ZGlmZiAtLWdpdCBhLy5hcHB2ZXlvci55bWwgYi8uYXBwdmV5b3IueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IueW1sCkBAIC0wLDAgKzEsNjUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKwordmVyc2lvbjogMC4xLntidWlsZH0KK2ltYWdlOiBWaXN1YWwgU3R1ZGlvIDIwMTUKK2NvbmZpZ3VyYXRpb246CistIFJlbGVhc2UKK3BsYXRmb3JtOgorLSB4NjQKKy0geDg2CistIGFybQorY2xvbmVfZGVwdGg6IDEwCitpbnN0YWxsOgorICAgIC0gY21kOiBCY2RlZGl0LmV4ZSAtc2V0IFRFU1RTSUdOSU5HIE9OCisgICAgIyBDb25maWd1cmUgbG9nZ2luZworICAgIC0gY21kOiByZWcgaW1wb3J0IHRvb2xzXHdpbmRvd3NcVGhyZWFkRXR3LnJlZworICAgIC0gcHM6IFJlc3RhcnQtQ29tcHV0ZXIgLUZvcmNlCisgICAgLSBwczogU3RhcnQtU2xlZXAgLXMgMTAKK2JlZm9yZV9idWlsZDoKKyAgICAtIGNtZDogcmVuICJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXFdpbmRvd3MgS2l0c1wxMFxpbmNsdWRlXDAwd2RmIiAid2RmIgorYnVpbGQ6CisgIHByb2plY3Q6IGV0Yy92aXN1YWwtc3R1ZGlvL29wZW50aHJlYWQuc2xuCisgIHZlcmJvc2l0eTogbWluaW1hbAorYWZ0ZXJfYnVpbGQ6CisgICAgLSBwczogJGVudjpQbGF0Zm9ybTIgPSAkZW52OlBsYXRmb3JtCisgICAgLSBwczogSWYgKCRlbnY6UGxhdGZvcm0yIC1lcSAieDg2IikgeyAkZW52OlBsYXRmb3JtMiA9ICJXaW4zMiIgfQorICAgICMgU2V0IHVwIHRoZSByZWxlYXNlIGRpcmVjdG9yaWVzCisgICAgLSBjbWQ6IC5hcHB2ZXlvclxtYWtlX3JlbGVhc2UuY21kCisgICAgIyBJbnN0YWxsIGRyaXZlciAob25seSBydW5zIG9uIHg2NCkKKyAgICAtIGNtZDogLmFwcHZleW9yXGluc3RhbGxfZHJpdmVyLmNtZAordGVzdF9zY3JpcHQ6CisgICAgIyBSdW4gdGhlIHVuaXQgdGVzdHMKKyAgICAtIGNtZDogLmFwcHZleW9yXHJ1bl91bml0X3Rlc3RzLmNtZAorICAgICMgUnVuIHRoZSB0ZXN0cyBmb3IgdGhlIGRyaXZlciAob25seSBydW5zIG9uIHg2NCkKKyAgICAjLSBjbWQ6IC5hcHB2ZXlvclx0ZXN0X2RyaXZlci5jbWQKK2FydGlmYWN0czoKKy0gcGF0aDogcmVsZWFzZQorICBuYW1lOiByZWxlYXNlCistIHBhdGg6IGJ1aWxkXGJpblxBcHBQYWNrYWdlcworICBuYW1lOiBhcHAKZGlmZiAtLWdpdCBhLy5hcHB2ZXlvci9pbnN0YWxsX2RyaXZlci5jbWQgYi8uYXBwdmV5b3IvaW5zdGFsbF9kcml2ZXIuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTA3NDIKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IvaW5zdGFsbF9kcml2ZXIuY21kCkBAIC0wLDAgKzEsNDMgQEAKK1JFTQorUkVNICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCitSRU0gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0KK1JFTSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitSRU0gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorUkVNICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSRU0gIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitSRU0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK1JFTSAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1JFTSAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCitSRU0gICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCitSRU0gICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorUkVNCitSRU0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorUkVNICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitSRU0gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitSRU0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKK1JFTSAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorUkVNICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorUkVNICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK1JFTSAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK1JFTSAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK1JFTSAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1JFTSAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitSRU0KKworSUYgTk9UICIlUGxhdGZvcm0lIj09Ing2NCIgR09UTyA6RU9GCisKK3B1c2hkICVBUFBWRVlPUl9CVUlMRF9GT0xERVIlXGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzCisKK1JFTSBJbnN0YWxsIHRoZSBjZXJ0aWZpY2F0aW9ucyB0byB0aGUgY2VydCBzdG9yZXMKK2NlcnR1dGlsIC1hZGRzdG9yZSByb290IG90THdmLmNlcgorY2VydHV0aWwgLWFkZHN0b3JlIFRydXN0ZWRQdWJsaXNoZXIgb3RMd2YuY2VyCisKK2NkIG90THdmCisKK1JFTSBJbnN0YWxsIHRoZSBORElTIExXRiBkcml2ZXIsIG90THdmLnN5cworCituZXRjZmcuZXhlIC12IC1sIG90bHdmLmluZiAtYyBzIC1pIG90THdmCisKK3BvcGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uYXBwdmV5b3IvbWFrZV9yZWxlYXNlLmNtZCBiLy5hcHB2ZXlvci9tYWtlX3JlbGVhc2UuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjlmMmMKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IvbWFrZV9yZWxlYXNlLmNtZApAQCAtMCwwICsxLDg3IEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK3B1c2hkICVBUFBWRVlPUl9CVUlMRF9GT0xERVIlCisKK1JFTSBNYWtlIHRoZSByZWxlYXNlIGRpcmVjdG9yaWVzCitta2RpciByZWxlYXNlCitta2RpciByZWxlYXNlXGluY2x1ZGUKK21rZGlyIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXAorbWtkaXIgcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWRcbWlzc2luZworbWtkaXIgcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWRccGxhdGZvcm0KK21rZGlyIHJlbGVhc2VcbGlicworbWtkaXIgcmVsZWFzZVxzeW1ib2xzCitta2RpciByZWxlYXNlXHN5bWJvbHNcVHJhY2VGb3JtYXQKKworUkVNIENvcHkgdGhlIHJlbGF2YW50IGluY2x1ZGUgaGVhZGVycworCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxjb21taXNzaW9uZXIuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcZGF0YXNldC5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxpbnN0YW5jZS5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxpcDYuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcam9pbmVyLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXGxpbmsuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcbWVzc2FnZS5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkCitjb3B5IGluY2x1ZGVcb3BlbnRocmVhZFxuZXRkYXRhLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXG9wZW50aHJlYWQuaCByZWxlYXNlXGluY2x1ZGVcb3BlbnRocmVhZAorY29weSBpbmNsdWRlXG9wZW50aHJlYWRcdGhyZWFkLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXHR5cGVzLmggcmVsZWFzZVxpbmNsdWRlXG9wZW50aHJlYWQKK2NvcHkgaW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXHRvb2xjaGFpbi5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtCitjb3B5IHNyY1xtaXNzaW5nXHN0ZGJvb2xcc3RkYm9vbC5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXG1pc3NpbmcKK2NvcHkgc3JjXG1pc3Npbmdcc3RkaW50XHN0ZGludC5oIHJlbGVhc2VcaW5jbHVkZVxvcGVudGhyZWFkXG1pc3NpbmcKKworUkVNIENvcHkgdGhlIHJlbGF2YW50IGJpbmFyaWVzCisKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxzeXNcb3Rsd2ZcKiByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90bHdmLmNlciByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90bHdmLnBkYiByZWxlYXNlXHN5bWJvbHMKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxzeXNcb3R0bXBcKiByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90dG1wLmNlciByZWxlYXNlCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcc3lzXG90dG1wLnBkYiByZWxlYXNlXHN5bWJvbHMKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxkbGxcb3RBcGkuZGxsIHJlbGVhc2UKK2NvcHkgYnVpbGRcYmluXCVQbGF0Zm9ybTIlXCVDb25maWd1cmF0aW9uJVxkbGxcb3RBcGkubGliIHJlbGVhc2VcbGlicworY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGRsbFxvdEFwaS5wZGIgcmVsZWFzZVxzeW1ib2xzCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcZGxsXG90Tm9kZUFwaS5kbGwgcmVsZWFzZQorY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGRsbFxvdE5vZGVBcGkubGliIHJlbGVhc2VcbGlicworY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGRsbFxvdE5vZGVBcGkucGRiIHJlbGVhc2Vcc3ltYm9scworY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGV4ZVxvdENsaS5leGUgcmVsZWFzZQorY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGV4ZVxvdENsaS5wZGIgcmVsZWFzZVxzeW1ib2xzCitjb3B5IGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcZXhlXG90VGVzdFJ1bm5lci5leGUgcmVsZWFzZQorY29weSBidWlsZFxiaW5cJVBsYXRmb3JtMiVcJUNvbmZpZ3VyYXRpb24lXGV4ZVxvdFRlc3RSdW5uZXIucGRiIHJlbGVhc2Vcc3ltYm9scworCitSRU0gQ29weSB0aGUgdG9vbHMKKworY29weSB0b29sc1x3aW5kb3dzXCogcmVsZWFzZQorY29weSB0b29sc1x3aW5kb3dzXCVQbGF0Zm9ybSVcb3RJbnN0YWxsLmV4ZSByZWxlYXNlCitjb3B5ICJDOlxQcm9ncmFtIEZpbGVzICh4ODYpXFdpbmRvd3MgS2l0c1wxMFxUb29sc1wlUGxhdGZvcm0lXGRldmNvbi5leGUiIHJlbGVhc2UKKworUkVNIEdlbmVyYXRlIHRoZSB0cmFjZSBmb3JtYXQgZmlsZXMgdG8gZGVjb2RlIHRoZSBXUFAgbG9ncworCisiQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgU0RLc1xXaW5kb3dzXHY3LjFBXEJpblx4NjRcVHJhY2VQZGIuZXhlIiAtZiByZWxlYXNlXHN5bWJvbHNcKi5wZGIgLXAgcmVsZWFzZVxzeW1ib2xzXFRyYWNlRm9ybWF0CisKK3BvcGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uYXBwdmV5b3IvcnVuX3VuaXRfdGVzdHMuY21kIGIvLmFwcHZleW9yL3J1bl91bml0X3Rlc3RzLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY0OTZjCi0tLSAvZGV2L251bGwKKysrIGIvLmFwcHZleW9yL3J1bl91bml0X3Rlc3RzLmNtZApAQCAtMCwwICsxLDMxIEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK0lGICIlUGxhdGZvcm0lIj09ImFybSIgR09UTyA6RU9GCisKK3ZzdGVzdC5jb25zb2xlIC9sb2dnZXI6QXBwdmV5b3IgL2luSXNvbGF0aW9uIC9wbGF0Zm9ybTolUGxhdGZvcm0lIGJ1aWxkXGJpblwlUGxhdGZvcm0yJVwlQ29uZmlndXJhdGlvbiVcZGxsXFVuaXRUZXN0cy5kbGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uYXBwdmV5b3IvdGVzdF9kcml2ZXIuY21kIGIvLmFwcHZleW9yL3Rlc3RfZHJpdmVyLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI1NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvLmFwcHZleW9yL3Rlc3RfZHJpdmVyLmNtZApAQCAtMCwwICsxLDQ3IEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK0lGIE5PVCAiJVBsYXRmb3JtJSI9PSJ4NjQiIEdPVE8gOkVPRgorCitwdXNoZCAlQVBQVkVZT1JfQlVJTERfRk9MREVSJVxyZWxlYXNlCisKK1JFTSBRdWVyeSB0aGUgZHJpdmVyIHN0YXRlCisKK3NjIHF1ZXJ5IG90bHdmCisKK1JFTSBSdW4gdGhlIGJhc2ljIGRyaXZlciB0ZXN0CisKK290VGVzdFJ1bm5lci5leGUgLi5cdGVzdHNcc2NyaXB0c1x0aHJlYWQtY2VydCBUZXN0X290THdmKiBhcHB2ZXlvcgorCitSRU0gR3JhYiB0aGUgbG9ncworCitta2RpciBsb2dzCitsb2dtYW4gc3RvcCBUaHJlYWQgLWV0cworY29weSAlU3lzdGVtUm9vdCVcU3lzdGVtMzJcTG9nRmlsZXNcV01JXFRocmVhZC4qIGxvZ3MKKworcG9wZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5hc3R5bGUvYXN0eWxlLW9wdHMgYi8uYXN0eWxlL2FzdHlsZS1vcHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZWJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi8uYXN0eWxlL2FzdHlsZS1vcHRzCkBAIC0wLDAgKzEsMTYgQEAKKy0tc3R5bGU9YWxsbWFuCistLW1heC1jb2RlLWxlbmd0aD0xMjAKKy0tbWF4LWluc3RhdGVtZW50LWluZGVudD0xMDAKKy0tYXR0YWNoLW5hbWVzcGFjZXMgLS1hdHRhY2gtaW5saW5lcworLS1hdHRhY2gtZXh0ZXJuLWMKKy0tbWluLWNvbmRpdGlvbmFsLWluZGVudD0wCistLWJyZWFrLWJsb2NrcworLS1wYWQtb3BlcgorLS1wYWQtaGVhZGVyCistLXVucGFkLXBhcmVuCistLWFsaWduLXBvaW50ZXI9bmFtZQorLS1hZGQtYnJhY2tldHMKKy0ta2VlcC1vbmUtbGluZS1ibG9ja3MKKy0tY29udmVydC10YWJzCistLWJyZWFrLWFmdGVyLWxvZ2ljYWwKKy0tZm9ybWF0dGVkCmRpZmYgLS1naXQgYS8uYXN0eWxlL2FzdHlsZS13cmFwLnNoIGIvLmFzdHlsZS9hc3R5bGUtd3JhcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNTMwNDUwCi0tLSAvZGV2L251bGwKKysrIGIvLmFzdHlsZS9hc3R5bGUtd3JhcC5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIworIyBhc3R5ZSBkb2VzIG5vdCByZXR1cm4gYSBub24temVybyBleGl0IGNvZGUuICBUaGlzIHdyYXBwZXIgZXhpc3RzIHdpdGggYQorIyBub24temVybyBleGl0IGNvZGUgaWYgdGhlcmUgaXMgYW55IG91dHB1dCBmcm9tIGFzdHlsZS4KKyMKKworZGllKCkgeworCWVjaG8gIiAqKiogRVJST1I6ICIgJCoKKwlleGl0IDEKK30KKworc2V0IC14CisKK1sgLXogImAkQGAiIF0gfHwgeworICAgIFsgIiQzIiAhPSAiLS1kcnktcnVuIiBdIHx8IGRpZQorfQpkaWZmIC0tZ2l0IGEvLmNvZGVjb3YueW1sIGIvLmNvZGVjb3YueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjFhN2YKLS0tIC9kZXYvbnVsbAorKysgYi8uY29kZWNvdi55bWwKQEAgLTAsMCArMSw4IEBACitjb3ZlcmFnZToKKyAgaWdub3JlOgorICAgIC0gInRlc3RzLyoiCisgICAgLSAidGhpcmRfcGFydHkvKiIKKworICBzdGF0dXM6CisgICAgcHJvamVjdDogZmFsc2UKKyAgICBwYXRjaDogZmFsc2UKZGlmZiAtLWdpdCBhLy5kZWZhdWx0LXZlcnNpb24gYi8uZGVmYXVsdC12ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjY1ODUKLS0tIC9kZXYvbnVsbAorKysgYi8uZGVmYXVsdC12ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzAuMDEuMDAKZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhZDY4YwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsNDUgQEAKKyMgQXV0byBub3JtYWxpemUgYWxsIGZpbGVzIHdoaWNoIGFwcGVhciB0byBiZSB0ZXh0IGZpbGVzLgorKiAgICAgICAgdGV4dD1hdXRvCisKKyMgQXV0byBub3JtYWxpemUgZmlsZXMgd2hpY2ggYXJlIGV4cGxpY2l0bHkgdGV4dAorKi5bY2hdICAgdGV4dAorKi5bY2hdcHAgdGV4dAorKi50eHQgICAgdGV4dAorKi5tZCAgICAgdGV4dAorKi55bWwgICAgdGV4dAorKi5odG1sICAgdGV4dAorKi5weSAgICAgdGV4dAorCisjIEZpbGVzIHdoaWNoIGFyZSBleHBsaWNpdGx5IGJpbmFyeQorKi5neiAgICAgYmluYXJ5ICFlb2wKKyoueHogICAgIGJpbmFyeSAhZW9sCisqLmJ6MiAgICBiaW5hcnkgIWVvbAorKi50YXIgICAgYmluYXJ5ICFlb2wKKyoucG5nICAgIGJpbmFyeSAhZW9sCisqLmpwZyAgICBiaW5hcnkgIWVvbAorKi5naWYgICAgYmluYXJ5ICFlb2wKKworIyBGaWxlcyBub3JtYWxpemVkIHRvIGFsd2F5cyBrZWVwIFVuaXggbGluZSBlbmRpbmdzCisuZGVmYXVsdC12ZXJzaW9uICBlb2w9bGYKK2Jvb3RzdHJhcCogICAgICAgIGVvbD1sZgorY29uZmlnLmd1ZXNzICAgICAgZW9sPWxmCitjb25maWcuc3RhdHVzICAgICBlb2w9bGYKK2NvbmZpZ3VyZSAgICAgICAgIGVvbD1sZgorbGlidG9vbCAgICAgICAgICAgZW9sPWxmCitsaWJ0b29saXplICAgICAgICBlb2w9bGYKK2F1dG9yZWNvbmYgICAgICAgIGVvbD1sZgorbWt2ZXJzaW9uICAgICAgICAgZW9sPWxmCisqLnNoICAgICAgICAgICAgICBlb2w9bGYKKyotc2ggICAgICAgICAgICAgIGVvbD1sZgorKi5tNCAgICAgICAgICAgICAgZW9sPWxmCitjb25maWd1cmUuYWMgICAgICBlb2w9bGYKK01ha2VmaWxlLmFtICAgICAgIGVvbD1sZgorTWFrZWZpbGUuaW4gICAgICAgZW9sPWxmCitNYWtlZmlsZSAgICAgICAgICBlb2w9bGYKKworIyBGaWxlcyBub3JtYWxpemVkIHRvIGFsd2F5cyBrZWVwIFdpbmRvd3MgbGluZSBlbmRpbmdzCisqLnZjeHByb2ogICAgICAgICBlb2w9Y3JsZgorKi52Y3hwcm9qLmZpbHRlcnMgZW9sPWNybGYKKyouc2xuICAgICAgICAgICAgIGVvbD1jcmxmCisqLnJjICAgICB0ZXh0ICAgICBlb2w9Y3JsZgorKi5pbmYgICAgdGV4dCAgICAgZW9sPWNybGYKZGlmZiAtLWdpdCBhLy5naXRodWIvSVNTVUVfVEVNUExBVEUubWQgYi8uZ2l0aHViL0lTU1VFX1RFTVBMQVRFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzBlNjQKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aHViL0lTU1VFX1RFTVBMQVRFLm1kCkBAIC0wLDAgKzEsNyBAQAorR2l0SHViIElzc3VlcyBhcmUgZm9yIGJ1Z3MgYW5kIGZlYXR1cmUgcmVxdWVzdHMuICBUbyBtYWtlIGJ1Z3MgYW5kIGZlYXR1cmUgcmVxdWVzdHMgbW9yZSBlYXN5IHRvIGZpbmQgYW5kIG9yZ2FuaXplLCB3ZSBjbG9zZSBpc3N1ZXMgdGhhdCBhcmUgZGVlbWVkIG91dCBvZiBzY29wZSBmb3IgR2l0SHViIElzc3Vlcy4KKworVXNhZ2UgcXVlc3Rpb25zPyBQb3N0IHF1ZXN0aW9ucyB0byBbU3RhY2sgT3ZlcmZsb3ddKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS8pIHVzaW5nIHRoZSBbW29wZW50aHJlYWRdIHRhZ10oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy90YWdnZWQvb3BlbnRocmVhZCkuIFdlIGFsc28gdXNlIEdvb2dsZSBHcm91cHMgZm9yIGRpc2N1c3Npb24gYW5kIGFubm91bmNlbWVudHM6CisKKyogW29wZW50aHJlYWQtYW5ub3VuY2VdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS9vcGVudGhyZWFkLWFubm91bmNlKSAtIHN1YnNjcmliZSBmb3IgcmVsZWFzZSBub3RlcyBhbmQgbmV3IHVwZGF0ZXMgb24gT3BlblRocmVhZAorKiBbb3BlbnRocmVhZC11c2Vyc10oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIWZvcnVtL29wZW50aHJlYWQtdXNlcnMpIC0gdGhlIGJlc3QgcGxhY2UgZm9yIHVzZXJzIHRvIGRpc2N1c3MgT3BlblRocmVhZCBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgT3BlblRocmVhZCB0ZWFtCisqIFtvcGVudGhyZWFkLWRldmVsXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vb3BlbnRocmVhZC1kZXZlbCkgLSB0ZWFtIG1lbWJlcnMgZGlzY3VzcyB0aGUgb24tZ29pbmcgZGV2ZWxvcG1lbnQgb2YgT3BlblRocmVhZApkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNlZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTAsMCArMSw5NiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitsYW5ndWFnZTogZ2VuZXJpYworCitzdWRvOiByZXF1aXJlZAorZGlzdDogdHJ1c3R5CisKK2JlZm9yZV9pbnN0YWxsOgorICAtIC50cmF2aXMvYmVmb3JlX2luc3RhbGwuc2gKKworc2NyaXB0OgorICAtIC50cmF2aXMvc2NyaXB0LnNoCisKK2FmdGVyX3N1Y2Nlc3M6CisgIC0gYmFzaCA8KGN1cmwgLXMgaHR0cHM6Ly9jb2RlY292LmlvL2Jhc2gpCisKK21hdHJpeDoKKyAgaW5jbHVkZToKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJwcmV0dHktY2hlY2siCisgICAgICBvczogbGludXgKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJzY2FuLWJ1aWxkIiBDQz0iY2xhbmciIENYWD0iY2xhbmcrKyIKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGNsYW5nCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0iYXJtLWdjYzQ5IgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0iYXJtLWdjYzU0IgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0iYXJtLWdjYzYzIgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgiIENDPSJjbGFuZyIgQ1hYPSJjbGFuZysrIgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogY2xhbmcKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJwb3NpeCIgQ0M9ImdjYyIgQ1hYPSJnKysiCisgICAgICBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAtIGVudjogQlVJTERfVEFSR0VUPSJwb3NpeCIgQ0M9ImdjYy01IiBDWFg9ImcrKy01IgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgICBhZGRvbnM6CisgICAgICAgIGFwdDoKKyAgICAgICAgICBzb3VyY2VzOgorICAgICAgICAgICAgLSB1YnVudHUtdG9vbGNoYWluLXItdGVzdAorICAgICAgICAgIHBhY2thZ2VzOgorICAgICAgICAgICAgLSBnY2MtNQorICAgICAgICAgICAgLSBnKystNQorICAgIC0gZW52OiBCVUlMRF9UQVJHRVQ9InBvc2l4IiBDQz0iZ2NjLTYiIENYWD0iZysrLTYiCisgICAgICBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6CisgICAgICAgICAgICAtIHVidW50dS10b29sY2hhaW4tci10ZXN0CisgICAgICAgICAgcGFja2FnZXM6CisgICAgICAgICAgICAtIGdjYy02CisgICAgICAgICAgICAtIGcrKy02CisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgtZGlzdGNoZWNrIiBWRVJCT1NFPTEKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGNsYW5nCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgtMzItYml0IiBWRVJCT1NFPTEKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGdjYworICAgIC0gZW52OiBCVUlMRF9UQVJHRVQ9InBvc2l4LW5jcC1zcGkiIFZFUkJPU0U9MQorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgLSBlbnY6IEJVSUxEX1RBUkdFVD0icG9zaXgtbmNwIiBWRVJCT1NFPTEKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGdjYwpkaWZmIC0tZ2l0IGEvLnRyYXZpcy9iZWZvcmVfaW5zdGFsbC5zaCBiLy50cmF2aXMvYmVmb3JlX2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg3ZTUwOAotLS0gL2Rldi9udWxsCisrKyBiLy50cmF2aXMvYmVmb3JlX2luc3RhbGwuc2gKQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitkaWUoKSB7CisJZWNobyAiICoqKiBFUlJPUjogIiAkKgorCWV4aXQgMQorfQorCitzZXQgLXgKKworY2QgL3RtcCB8fCBkaWUKKworWyAkVFJBVklTX09TX05BTUUgIT0gbGludXggXSB8fCB7CisgICAgc3VkbyBhcHQtZ2V0IHVwZGF0ZSB8fCBkaWUKKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC1kaXN0Y2hlY2sgLWEgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC0zMi1iaXQgLWEgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC1uY3AgXSB8fCB7CisgICAgICAgIHBpcCBpbnN0YWxsIC0tdXBncmFkZSBwaXAgfHwgZGllCisgICAgICAgIHBpcCBpbnN0YWxsIC0tdXNlciAtciAkVFJBVklTX0JVSUxEX0RJUi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3JlcXVpcmVtZW50cy50eHQgfHwgZGllCisgICAgICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC1uY3AgXSB8fCB7CisgICAgICAgICAgICAjIFBhY2thZ2VzIHVzZWQgYnkgbmNwIHRvb2xzLgorICAgICAgICAgICAgcGlwIGluc3RhbGwgLS11c2VyIGdpdCtodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9weXNwaW5lbCB8fCBkaWUKKyAgICAgICAgfQorICAgIH0KKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwcmV0dHktY2hlY2sgXSB8fCB7CisgICAgICAgIHdnZXQgaHR0cDovL2phaXN0LmRsLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2FzdHlsZS9hc3R5bGUvYXN0eWxlJTIwMi4wNS4xL2FzdHlsZV8yLjA1LjFfbGludXgudGFyLmd6IHx8IGRpZQorICAgICAgICB0YXIgeHp2ZiBhc3R5bGVfMi4wNS4xX2xpbnV4LnRhci5neiB8fCBkaWUKKyAgICAgICAgY2QgYXN0eWxlL2J1aWxkL2djYyB8fCBkaWUKKyAgICAgICAgTERGTEFHUz0iICIgbWFrZSB8fCBkaWUKKyAgICAgICAgY2QgLi4vLi4vLi4KKyAgICAgICAgZXhwb3J0IFBBVEg9L3RtcC9hc3R5bGUvYnVpbGQvZ2NjL2JpbjokUEFUSCB8fCBkaWUKKyAgICAgICAgYXN0eWxlIC0tdmVyc2lvbiB8fCBkaWUKKyAgICB9CisKKyAgICBbICRCVUlMRF9UQVJHRVQgIT0gc2Nhbi1idWlsZCBdIHx8IHsKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgY2xhbmcgfHwgZGllCisgICAgfQorCisgICAgWyAkQlVJTERfVEFSR0VUICE9IGFybS1nY2M0OSBdIHx8IHsKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGliMzJ6MSB8fCBkaWUKKyAgICAgICAgd2dldCBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC80LjkvNC45LTIwMTUtcTMtdXBkYXRlLytkb3dubG9hZC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzLTIwMTUwOTIxLWxpbnV4LnRhci5iejIgfHwgZGllCisgICAgICAgIHRhciB4amYgZ2NjLWFybS1ub25lLWVhYmktNF85LTIwMTVxMy0yMDE1MDkyMS1saW51eC50YXIuYnoyIHx8IGRpZQorICAgICAgICBleHBvcnQgUEFUSD0vdG1wL2djYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMvYmluOiRQQVRIIHx8IGRpZQorICAgICAgICBhcm0tbm9uZS1lYWJpLWdjYyAtLXZlcnNpb24gfHwgZGllCisgICAgfQorCisgICAgWyAkQlVJTERfVEFSR0VUICE9IGFybS1nY2M1NCBdIHx8IHsKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGliMzJ6MSB8fCBkaWUKKyAgICAgICAgd2dldCBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC81LjAvNS0yMDE2LXEzLXVwZGF0ZS8rZG93bmxvYWQvZ2NjLWFybS1ub25lLWVhYmktNV80LTIwMTZxMy0yMDE2MDkyNi1saW51eC50YXIuYnoyIHx8IGRpZQorICAgICAgICB0YXIgeGpmIGdjYy1hcm0tbm9uZS1lYWJpLTVfNC0yMDE2cTMtMjAxNjA5MjYtbGludXgudGFyLmJ6MiB8fCBkaWUKKyAgICAgICAgZXhwb3J0IFBBVEg9L3RtcC9nY2MtYXJtLW5vbmUtZWFiaS01XzQtMjAxNnEzL2JpbjokUEFUSCB8fCBkaWUKKyAgICAgICAgYXJtLW5vbmUtZWFiaS1nY2MgLS12ZXJzaW9uIHx8IGRpZQorICAgIH0KKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBhcm0tZ2NjNjMgXSB8fCB7CisgICAgICAgIHdnZXQgaHR0cHM6Ly9naXRodWIuY29tL2Zvc3MtZm9yLXN5bm9wc3lzLWR3Yy1hcmMtcHJvY2Vzc29ycy90b29sY2hhaW4vcmVsZWFzZXMvZG93bmxvYWQvYXJjLTIwMTcuMDMtcmMyL2FyY19nbnVfMjAxNy4wMy1yYzJfcHJlYnVpbHRfZWxmMzJfbGVfbGludXhfaW5zdGFsbC50YXIuZ3ogfHwgZGllCisgICAgICAgIHRhciB4emYgYXJjX2dudV8yMDE3LjAzLXJjMl9wcmVidWlsdF9lbGYzMl9sZV9saW51eF9pbnN0YWxsLnRhci5negorICAgICAgICBleHBvcnQgUEFUSD0vdG1wL2FyY19nbnVfMjAxNy4wMy1yYzJfcHJlYnVpbHRfZWxmMzJfbGVfbGludXhfaW5zdGFsbC9iaW46JFBBVEggfHwgZGllCisgICAgICAgIGFyYy1lbGYzMi1nY2MgLS12ZXJzaW9uIHx8IGRpZQorICAgIH0KKworICAgIFsgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC0zMi1iaXQgXSB8fCB7CisgICAgICAgIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGcrKy1tdWx0aWxpYiB8fCBkaWUKKyAgICB9CisKKyAgICBbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXgtZGlzdGNoZWNrIF0gfHwgeworICAgICAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCBjbGFuZyB8fCBkaWUKKyAgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGx2bS0zLjQtcnVudGltZSB8fCBkaWUKKyAgICB9CisKKyAgICBbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXggLW8gJENDICE9IGNsYW5nIF0gfHwgeworICAgICAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCBjbGFuZyB8fCBkaWUKKyAgICB9Cit9CisKK1sgJFRSQVZJU19PU19OQU1FICE9IG9zeCBdIHx8IHsKKyAgICBzdWRvIGVhc3lfaW5zdGFsbCBwZXhwZWN0IHx8IGRpZQorCisgICAgWyAkQlVJTERfVEFSR0VUICE9IGNjMjUzOCBdIHx8IHsKKyAgICAgICAgd2dldCBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC80LjkvNC45LTIwMTUtcTMtdXBkYXRlLytkb3dubG9hZC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzLTIwMTUwOTIxLW1hYy50YXIuYnoyIHx8IGRpZQorICAgICAgICB0YXIgeGpmIGdjYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMtMjAxNTA5MjEtbWFjLnRhci5iejIgfHwgZGllCisgICAgICAgIGV4cG9ydCBQQVRIPS90bXAvZ2NjLWFybS1ub25lLWVhYmktNF85LTIwMTVxMy9iaW46JFBBVEggfHwgZGllCisgICAgICAgIGFybS1ub25lLWVhYmktZ2NjIC0tdmVyc2lvbiB8fCBkaWUKKyAgICB9Cit9CmRpZmYgLS1naXQgYS8udHJhdmlzL3NjcmlwdC5zaCBiLy50cmF2aXMvc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwY2QzOTMKLS0tIC9kZXYvbnVsbAorKysgYi8udHJhdmlzL3NjcmlwdC5zaApAQCAtMCwwICsxLDIwNCBAQAorIyEvYmluL3NoCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2RpZSgpIHsKKwllY2hvICIgKioqIEVSUk9SOiAiICQqCisJZXhpdCAxCit9CisKK3NldCAteAorCitbICRCVUlMRF9UQVJHRVQgIT0gcHJldHR5LWNoZWNrIF0gfHwgeworICAgIGV4cG9ydCBQQVRIPS90bXAvYXN0eWxlL2J1aWxkL2djYy9iaW46JFBBVEggfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgLi9jb25maWd1cmUgfHwgZGllCisgICAgbWFrZSBwcmV0dHktY2hlY2sgfHwgZGllCit9CisKK1sgJEJVSUxEX1RBUkdFVCAhPSBzY2FuLWJ1aWxkIF0gfHwgeworICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIHNjYW4tYnVpbGQgLi9jb25maWd1cmUgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jbGktYXBwPWFsbCAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1uY3AtYXBwPWFsbCAgICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kaWFnICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kZWZhdWx0LWxvZ2dpbmcgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1yYXctbGluay1hcGk9eWVzICAgICAgICAgXAorICAgICAgICAtLXdpdGgtZXhhbXBsZXM9cG9zaXggICAgICAgICAgICAgXAorICAgICAgICAtLXdpdGgtcGxhdGZvcm0taW5mbz1QT1NJWCAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1ib3JkZXItYWdlbnQtcHJveHkgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jZXJ0LWxvZyAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1jb21taXNzaW9uZXIgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kaGNwNi1jbGllbnQgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kaGNwNi1zZXJ2ZXIgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1kbnMtY2xpZW50ICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1qYW0tZGV0ZWN0aW9uICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1qb2luZXIgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1sZWdhY3kgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1tYWMtd2hpdGVsaXN0ICAgICAgICAgICAgXAorICAgICAgICAtLWVuYWJsZS1tdGQtbmV0d29yay1kaWFnbm9zdGljIHx8IGRpZQorICAgIHNjYW4tYnVpbGQgLS1zdGF0dXMtYnVncyAtYW5hbHl6ZS1oZWFkZXJzIC12IG1ha2UgfHwgZGllCit9CisKK1sgJEJVSUxEX1RBUkdFVCAhPSBhcm0tZ2NjNDkgXSB8fCB7CisgICAgZXhwb3J0IFBBVEg9L3RtcC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzL2JpbjokUEFUSCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWNjMjUzOCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI1MzgvYmluL290LWNsaS1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNTM4L2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjUzOC9iaW4vb3QtbmNwLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI1MzgvYmluL290LW5jcC1tdGQgfHwgZGllCisKKyAgICBnaXQgY2hlY2tvdXQgLS0gLiB8fCBkaWUKKyAgICBnaXQgY2xlYW4gLXhmZCB8fCBkaWUKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBDT01NSVNTSU9ORVI9MSBKT0lORVI9MSBESENQNl9DTElFTlQ9MSBESENQNl9TRVJWRVI9MSBETlNfQ0xJRU5UPTEgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1kYTE1MDAwIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2RhMTUwMDAvYmluL290LWNsaS1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLW10ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9kYTE1MDAwL2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2RhMTUwMDAvYmluL290LW5jcC1tdGQgfHwgZGllCisKKyAgICBnaXQgY2hlY2tvdXQgLS0gLiB8fCBkaWUKKyAgICBnaXQgY2xlYW4gLXhmZCB8fCBkaWUKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBDT01NSVNTSU9ORVI9MSBKT0lORVI9MSBESENQNl9DTElFTlQ9MSBESENQNl9TRVJWRVI9MSBETlNfQ0xJRU5UPTEgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1rdzQxeiB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtY2xpLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtY2xpLW10ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtbmNwLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9rdzQxei9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLW5yZjUyODQwIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1jbGktZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L25yZjUyODQwL2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorCisgICAgZ2l0IGNoZWNrb3V0IC0tIC4gfHwgZGllCisgICAgZ2l0IGNsZWFuIC14ZmQgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1jYzI2NTAgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNjUwL2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjY1MC9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKK30KKworWyAkQlVJTERfVEFSR0VUICE9IGFybS1nY2M1NCBdIHx8IHsKKyAgICBleHBvcnQgUEFUSD0vdG1wL2djYy1hcm0tbm9uZS1lYWJpLTVfNC0yMDE2cTMvYmluOiRQQVRIIHx8IGRpZQorCisgICAgZ2l0IGNoZWNrb3V0IC0tIC4gfHwgZGllCisgICAgZ2l0IGNsZWFuIC14ZmQgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgQ09NTUlTU0lPTkVSPTEgSk9JTkVSPTEgREhDUDZfQ0xJRU5UPTEgREhDUDZfU0VSVkVSPTEgRE5TX0NMSUVOVD0xIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtY2MyNTM4IHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjUzOC9iaW4vb3QtY2xpLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI1MzgvYmluL290LWNsaS1tdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNTM4L2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2NjMjUzOC9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWRhMTUwMDAgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLWZ0ZCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9kYTE1MDAwL2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2RhMTUwMDAvYmluL290LW5jcC1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvZGExNTAwMC9iaW4vb3QtbmNwLW10ZCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWt3NDF6IHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1jbGktZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1jbGktbXRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1uY3AtZnRkIHx8IGRpZQorICAgIGFybS1ub25lLWVhYmktc2l6ZSAgb3V0cHV0L2t3NDF6L2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorCisgICAgZ2l0IGNoZWNrb3V0IC0tIC4gfHwgZGllCisgICAgZ2l0IGNsZWFuIC14ZmQgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgQ09NTUlTU0lPTkVSPTEgSk9JTkVSPTEgREhDUDZfQ0xJRU5UPTEgREhDUDZfU0VSVkVSPTEgRE5TX0NMSUVOVD0xIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtbnJmNTI4NDAgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LWNsaS1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LWNsaS1tdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LW5jcC1mdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvbnJmNTI4NDAvYmluL290LW5jcC1tdGQgfHwgZGllCisKKyAgICBnaXQgY2hlY2tvdXQgLS0gLiB8fCBkaWUKKyAgICBnaXQgY2xlYW4gLXhmZCB8fCBkaWUKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWNjMjY1MCB8fCBkaWUKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgIG91dHB1dC9jYzI2NTAvYmluL290LWNsaS1tdGQgfHwgZGllCisgICAgYXJtLW5vbmUtZWFiaS1zaXplICBvdXRwdXQvY2MyNjUwL2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorfQorCitbICRCVUlMRF9UQVJHRVQgIT0gYXJtLWdjYzYzIF0gfHwgeworICAgIGV4cG9ydCBQQVRIPS90bXAvYXJjX2dudV8yMDE3LjAzLXJjMl9wcmVidWlsdF9lbGYzMl9sZV9saW51eF9pbnN0YWxsL2JpbjokUEFUSCB8fCBkaWUKKworICAgIGdpdCBjaGVja291dCAtLSAuIHx8IGRpZQorICAgIGdpdCBjbGVhbiAteGZkIHx8IGRpZQorICAgIC4vYm9vdHN0cmFwIHx8IGRpZQorICAgIENPTU1JU1NJT05FUj0xIEpPSU5FUj0xIERIQ1A2X0NMSUVOVD0xIERIQ1A2X1NFUlZFUj0xIEROU19DTElFTlQ9MSBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWVtc2sgfHwgZGllCisgICAgYXJjLWVsZjMyLXNpemUgIG91dHB1dC9lbXNrL2Jpbi9vdC1jbGktZnRkIHx8IGRpZQorICAgIGFyYy1lbGYzMi1zaXplICBvdXRwdXQvZW1zay9iaW4vb3QtY2xpLW10ZCB8fCBkaWUKKyAgICBhcmMtZWxmMzItc2l6ZSAgb3V0cHV0L2Vtc2svYmluL290LW5jcC1mdGQgfHwgZGllCisgICAgYXJjLWVsZjMyLXNpemUgIG91dHB1dC9lbXNrL2Jpbi9vdC1uY3AtbXRkIHx8IGRpZQorfQorCitbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXggXSB8fCB7CisgICAgc2ggLWMgJyRDQyAtLXZlcnNpb24nIHx8IGRpZQorICAgIHNoIC1jICckQ1hYIC0tdmVyc2lvbicgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeCB8fCBkaWUKK30KKworWyAkQlVJTERfVEFSR0VUICE9IHBvc2l4LWRpc3RjaGVjayBdIHx8IHsKKyAgICBleHBvcnQgQVNBTl9TWU1CT0xJWkVSX1BBVEg9YHdoaWNoIGxsdm0tc3ltYm9saXplci0zLjRgIHx8IGRpZQorICAgIGV4cG9ydCBBU0FOX09QVElPTlM9c3ltYm9saXplPTEgfHwgZGllCisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeCBkaXN0Y2hlY2sgfHwgZGllCit9CisKK1sgJEJVSUxEX1RBUkdFVCAhPSBwb3NpeC0zMi1iaXQgXSB8fCB7CisgICAgLi9ib290c3RyYXAgfHwgZGllCisgICAgQ09WRVJBR0U9MSBDRkxBR1M9LW0zMiBDWFhGTEFHUz0tbTMyIExERkxBR1M9LW0zMiBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLXBvc2l4IGNoZWNrIHx8IGRpZQorfQorCitbICRCVUlMRF9UQVJHRVQgIT0gcG9zaXgtbmNwLXNwaSBdIHx8IHsKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLXBvc2l4IGNoZWNrIGNvbmZpZ3VyZV9PUFRJT05TPSItLWVuYWJsZS1uY3AtYXBwPWZ0ZCAtLXdpdGgtbmNwLWJ1cz1zcGkgLS13aXRoLWV4YW1wbGVzPXBvc2l4IC0td2l0aC1wbGF0Zm9ybS1pbmZvPVBPU0lYIiB8fCBkaWUKK30KKworWyAkQlVJTERfVEFSR0VUICE9IHBvc2l4LW5jcCBdIHx8IHsKKyAgICAuL2Jvb3RzdHJhcCB8fCBkaWUKKyAgICBDT1ZFUkFHRT0xIE5PREVfVFlQRT1uY3Atc2ltIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXggY2hlY2sgfHwgZGllCit9CmRpZmYgLS1naXQgYS9BVVRIT1JTIGIvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGFiNGJjCi0tLSAvZGV2L251bGwKKysrIGIvQVVUSE9SUwpAQCAtMCwwICsxLDE2IEBACisjIFRoaXMgaXMgdGhlIG9mZmljaWFsIGxpc3Qgb2YgT3BlblRocmVhZCBhdXRob3JzIGZvciBjb3B5cmlnaHQgcHVycG9zZXMuCisjCisjIFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbGlzdCBldmVyeW9uZSB3aG8gaGFzIGNvbnRyaWJ1dGVkIGNvZGUsIHNpbmNlIGluCisjIHNvbWUgY2FzZXMsIHRoZWlyIGVtcGxveWVyIG1heSBiZSB0aGUgY29weXJpZ2h0IGhvbGRlci4gVG8gc2VlIHRoZSBmdWxsIGxpc3QKKyMgb2YgY29udHJpYnV0b3JzLCBzZWUgdGhlIHJldmlzaW9uIGhpc3RvcnkgaW4gc291cmNlIGNvbnRyb2wgb3IKKyMgaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9ncmFwaHMvY29udHJpYnV0b3JzCisjCisjIEF1dGhvcnMgd2hvIHdpc2ggdG8gYmUgcmVjb2duaXplZCBpbiB0aGlzIGZpbGUgc2hvdWxkIGFkZCB0aGVtc2VsdmVzIChvcgorIyB0aGVpciBlbXBsb3llciwgYXMgYXBwcm9wcmlhdGUpLgorCitOZXN0IExhYnMsIEluYy4KK01pY3Jvc29mdCBDb3Jwb3JhdGlvbgorTm9yZGljIFNlbWljb25kdWN0b3IKK1RleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorTlhQIFNlbWljb25kdWN0b3JzCitTeW5vcHN5cywgSW5jLgpkaWZmIC0tZ2l0IGEvQ09ERV9PRl9DT05EVUNULm1kIGIvQ09ERV9PRl9DT05EVUNULm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjE3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RFX09GX0NPTkRVQ1QubWQKQEAgLTAsMCArMSw3NCBAQAorIyBPcGVuVGhyZWFkIENvZGUgb2YgQ29uZHVjdAorCisjIyBPdXIgUGxlZGdlCisKK0luIHRoZSBpbnRlcmVzdCBvZiBmb3N0ZXJpbmcgYW4gb3BlbiBhbmQgd2VsY29taW5nIGVudmlyb25tZW50LCB3ZSBhcworY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyIHByb2plY3QgYW5kCitvdXIgY29tbXVuaXR5IGEgaGFyYXNzbWVudC1mcmVlIGV4cGVyaWVuY2UgZm9yIGV2ZXJ5b25lLCByZWdhcmRsZXNzIG9mIGFnZSwgYm9keQorc2l6ZSwgZGlzYWJpbGl0eSwgZXRobmljaXR5LCBnZW5kZXIgaWRlbnRpdHkgYW5kIGV4cHJlc3Npb24sIGxldmVsIG9mIGV4cGVyaWVuY2UsCituYXRpb25hbGl0eSwgcGVyc29uYWwgYXBwZWFyYW5jZSwgcmFjZSwgcmVsaWdpb24sIG9yIHNleHVhbCBpZGVudGl0eSBhbmQKK29yaWVudGF0aW9uLgorCisjIyBPdXIgU3RhbmRhcmRzCisKK0V4YW1wbGVzIG9mIGJlaGF2aW9yIHRoYXQgY29udHJpYnV0ZXMgdG8gY3JlYXRpbmcgYSBwb3NpdGl2ZSBlbnZpcm9ubWVudAoraW5jbHVkZToKKworKiBVc2luZyB3ZWxjb21pbmcgYW5kIGluY2x1c2l2ZSBsYW5ndWFnZQorKiBCZWluZyByZXNwZWN0ZnVsIG9mIGRpZmZlcmluZyB2aWV3cG9pbnRzIGFuZCBleHBlcmllbmNlcworKiBHcmFjZWZ1bGx5IGFjY2VwdGluZyBjb25zdHJ1Y3RpdmUgY3JpdGljaXNtCisqIEZvY3VzaW5nIG9uIHdoYXQgaXMgYmVzdCBmb3IgdGhlIGNvbW11bml0eQorKiBTaG93aW5nIGVtcGF0aHkgdG93YXJkcyBvdGhlciBjb21tdW5pdHkgbWVtYmVycworCitFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CisKKyogVGhlIHVzZSBvZiBzZXh1YWxpemVkIGxhbmd1YWdlIG9yIGltYWdlcnkgYW5kIHVud2VsY29tZSBzZXh1YWwgYXR0ZW50aW9uIG9yCithZHZhbmNlcworKiBUcm9sbGluZywgaW5zdWx0aW5nL2Rlcm9nYXRvcnkgY29tbWVudHMsIGFuZCBwZXJzb25hbCBvciBwb2xpdGljYWwgYXR0YWNrcworKiBQdWJsaWMgb3IgcHJpdmF0ZSBoYXJhc3NtZW50CisqIFB1Ymxpc2hpbmcgb3RoZXJzJyBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IgZWxlY3Ryb25pYworICBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KKyogT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCisgIHByb2Zlc3Npb25hbCBzZXR0aW5nCisKKyMjIE91ciBSZXNwb25zaWJpbGl0aWVzCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGFyaWZ5aW5nIHRoZSBzdGFuZGFyZHMgb2YgYWNjZXB0YWJsZQorYmVoYXZpb3IgYW5kIGFyZSBleHBlY3RlZCB0byB0YWtlIGFwcHJvcHJpYXRlIGFuZCBmYWlyIGNvcnJlY3RpdmUgYWN0aW9uIGluCityZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KKworUHJvamVjdCBtYWludGFpbmVycyBoYXZlIHRoZSByaWdodCBhbmQgcmVzcG9uc2liaWxpdHkgdG8gcmVtb3ZlLCBlZGl0LCBvcgorcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlciBjb250cmlidXRpb25zCit0aGF0IGFyZSBub3QgYWxpZ25lZCB0byB0aGlzIENvZGUgb2YgQ29uZHVjdCwgb3IgdG8gYmFuIHRlbXBvcmFyaWx5IG9yCitwZXJtYW5lbnRseSBhbnkgY29udHJpYnV0b3IgZm9yIG90aGVyIGJlaGF2aW9ycyB0aGF0IHRoZXkgZGVlbSBpbmFwcHJvcHJpYXRlLAordGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KKworIyMgU2NvcGUKKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgYXBwbGllcyBib3RoIHdpdGhpbiBwcm9qZWN0IHNwYWNlcyBhbmQgaW4gcHVibGljIHNwYWNlcword2hlbiBhbiBpbmRpdmlkdWFsIGlzIHJlcHJlc2VudGluZyB0aGUgcHJvamVjdCBvciBpdHMgY29tbXVuaXR5LiBFeGFtcGxlcyBvZgorcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbiBvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbAorYWRkcmVzcywgcG9zdGluZyB2aWEgYW4gb2ZmaWNpYWwgc29jaWFsIG1lZGlhIGFjY291bnQsIG9yIGFjdGluZyBhcyBhbiBhcHBvaW50ZWQKK3JlcHJlc2VudGF0aXZlIGF0IGFuIG9ubGluZSBvciBvZmZsaW5lIGV2ZW50LiBSZXByZXNlbnRhdGlvbiBvZiBhIHByb2plY3QgbWF5IGJlCitmdXJ0aGVyIGRlZmluZWQgYW5kIGNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgorCisjIyBFbmZvcmNlbWVudAorCitJbnN0YW5jZXMgb2YgYWJ1c2l2ZSwgaGFyYXNzaW5nLCBvciBvdGhlcndpc2UgdW5hY2NlcHRhYmxlIGJlaGF2aW9yIG1heSBiZQorcmVwb3J0ZWQgYnkgY29udGFjdGluZyB0aGUgcHJvamVjdCB0ZWFtIGF0IG9wZW50aHJlYWQtY29uZHVjdEBnb29nbGUuY29tLiBBbGwKK2NvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHJlc3BvbnNlIHRoYXQKK2lzIGRlZW1lZCBuZWNlc3NhcnkgYW5kIGFwcHJvcHJpYXRlIHRvIHRoZSBjaXJjdW1zdGFuY2VzLiBUaGUgcHJvamVjdCB0ZWFtIGlzCitvYmxpZ2F0ZWQgdG8gbWFpbnRhaW4gY29uZmlkZW50aWFsaXR5IHdpdGggcmVnYXJkIHRvIHRoZSByZXBvcnRlciBvZiBhbiBpbmNpZGVudC4KK0Z1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudCBwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgd2hvIGRvIG5vdCBmb2xsb3cgb3IgZW5mb3JjZSB0aGUgQ29kZSBvZiBDb25kdWN0IGluIGdvb2QKK2ZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkIGJ5IG90aGVyCittZW1iZXJzIG9mIHRoZSBwcm9qZWN0J3MgbGVhZGVyc2hpcC4KKworIyMgQXR0cmlidXRpb24KKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBbQ29udHJpYnV0b3IgQ292ZW5hbnRdW2hvbWVwYWdlXSwgdmVyc2lvbiAxLjQsCithdmFpbGFibGUgYXQgW2h0dHA6Ly9jb250cmlidXRvci1jb3ZlbmFudC5vcmcvdmVyc2lvbi8xLzRdW3ZlcnNpb25dCisKK1tob21lcGFnZV06IGh0dHA6Ly9jb250cmlidXRvci1jb3ZlbmFudC5vcmcKK1t2ZXJzaW9uXTogaHR0cDovL2NvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNC8KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTYyNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsMTQyIEBACisjIENvbnRyaWJ1dGluZyB0byBPcGVuVGhyZWFkCisKK1dlIHdvdWxkIGxvdmUgZm9yIHlvdSB0byBjb250cmlidXRlIHRvIE9wZW5UaHJlYWQgYW5kIGhlbHAgbWFrZSBpdCBldmVuIGJldHRlciB0aGFuIGl0IGlzIHRvZGF5ISBBcyBhIGNvbnRyaWJ1dG9yLCBoZXJlIGFyZSB0aGUgZ3VpZGVsaW5lcyB3ZSB3b3VsZCBsaWtlIHlvdSB0byBmb2xsb3cuCisKKyogWzEgQ29kZSBvZiBDb25kdWN0XSgjY29kZS1vZi1jb25kdWN0KQorKiBbMiBCdWdzXSgjYnVncykKKyogWzMgTmV3IEZlYXR1cmVzXSgjbmV3LWZlYXR1cmVzKQorKiBbNCBDb250cmlidXRpbmcgQ29kZV0oI2NvbnRyaWJ1dGluZy1jb2RlKQorICAqIFs0LjEgSW5pdGlhbCBTZXR1cF0oI2luaXRpYWwtc2V0dXApCisgICogWzQuMiBDb250cmlidXRvciBMaWNlbnNlIEFncmVlbWVudCAoQ0xBKV0oI2NvbnRyaWJ1dG9yLWxpY2Vuc2UtYWdyZWVtZW50LS1jbGEtKQorICAqIFs0LjMgU3VibWl0dGluZyBhIFB1bGwgUmVxdWVzdF0oI3N1Ym1pdHRpbmctYS1wdWxsLXJlcXVlc3QpCisKKyMjIENvZGUgb2YgQ29uZHVjdAorCitIZWxwIHVzIGtlZXAgT3BlblRocmVhZCBvcGVuIGFuZCBpbmNsdXNpdmUuICBQbGVhc2UgcmVhZCBhbmQgZm9sbG93IG91ciBbQ29kZSBvZiBDb25kdWN0XShDT0RFX09GX0NPTkRVQ1QubWQpLgorCisjIyBCdWdzCisKK0lmIHlvdSBmaW5kIGEgYnVnIGluIHRoZSBzb3VyY2UgY29kZSwgeW91IGNhbiBoZWxwIHVzIGJ5IFtzdWJtaXR0aW5nIGEgR2l0SHViIElzc3VlXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL2lzc3Vlcy9uZXcpLiAgVGhlIGJlc3QgYnVnIHJlcG9ydHMgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBpc3N1ZSBhbmQgc3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyBmb3IgcHJlZGljdGFibHkgcmVwcm9kdWNpbmcgdGhlIGlzc3VlLiAgRXZlbiBiZXR0ZXIsIHlvdSBjYW4gW3N1Ym1pdCBhIFB1bGwgUmVxdWVzdF0oI3N1Ym1pdHRpbmctYS1wdWxsLXJlcXVlc3QpIHdpdGggYSBmaXguCisKKyMjIE5ldyBGZWF0dXJlcworCitZb3UgY2FuIHJlcXVlc3QgYSBuZXcgZmVhdHVyZSBieSBbc3VibWl0dGluZyBhIEdpdEh1YiBJc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9pc3N1ZXMvbmV3KS4KKworSWYgeW91IHdvdWxkIGxpa2UgdG8gaW1wbGVtZW50IGEgbmV3IGZlYXR1cmUsIHBsZWFzZSBjb25zaWRlciB0aGUgc2NvcGUgb2YgdGhlIG5ldyBmZWF0dXJlOgorCisqICpMYXJnZSBmZWF0dXJlKjogZmlyc3QgW3N1Ym1pdCBhIEdpdEh1YiBJc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9pc3N1ZXMvbmV3KSBhbmQgY29tbXVuaWNhdGUgeW91ciBwcm9wb3NhbCBzbyB0aGF0IHRoZSBjb21tdW5pdHkgY2FuIHJldmlldyBhbmQgcHJvdmlkZSBmZWVkYmFjay4gIEdldHRpbmcgZWFybHkgZmVlZGJhY2sgd2lsbCBoZWxwIGVuc3VyZSB5b3VyIGltcGxlbWVudGF0aW9uIHdvcmsgaXMgYWNjZXB0ZWQgYnkgdGhlIGNvbW11bml0eS4gIFRoaXMgd2lsbCBhbHNvIGFsbG93IHVzIHRvIGJldHRlciBjb29yZGluYXRlIG91ciBlZmZvcnRzIGFuZCBtaW5pbWl6ZSBkdXBsaWNhdGVkIGVmZm9ydC4KKworKiAqU21hbGwgZmVhdHVyZSo6IGNhbiBiZSBpbXBsZW1lbnRlZCBhbmQgZGlyZWN0bHkgW3N1Ym1pdHRlZCBhcyBhIFB1bGwgUmVxdWVzdF0oI3N1Ym1pdHRpbmctYS1wdWxsLXJlcXVlc3QpLgorCisjIyBDb250cmlidXRpbmcgQ29kZQorCitUaGUgT3BlblRocmVhZCBQcm9qZWN0IGZvbGxvd3MgdGhlICJGb3JrLWFuZC1QdWxsIiBtb2RlbCBmb3IgYWNjZXB0aW5nIGNvbnRyaWJ1dGlvbnMuCisKKyMjIyBJbml0aWFsIFNldHVwCisKK1NldHVwIHlvdXIgR2l0SHViIGZvcmsgYW5kIGNvbnRpbnVvdXMtaW50ZWdyYXRpb24gc2VydmljZXM6CisKKzEuIEZvcmsgdGhlIFtPcGVuVGhyZWFkIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQpIGJ5IGNsaWNraW5nICJGb3JrIiBvbiB0aGUgd2ViIFVJLgorMi4gRW5hYmxlIFtUcmF2aXMgQ0ldKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy8pIGFuZCBbQXBwVmV5b3JdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tLykgYnkgbG9nZ2luZyBpbiB0aGUgcmVzcGVjdGl2ZSBzZXJ2aWNlcyB3aXRoIHlvdXIgR2l0SHViIGFjY291bnQgYW5kIGVuYWJsaW5nIHlvdXIgbmV3bHkgY3JlYXRlZCBmb3JrLiAgV2UgdXNlIFRyYXZpcyBDSSBmb3IgTGludXgtYmFzZWQgY29udGludW91cyBpbnRlZ3JhdGlvbiBjaGVja3MgYW5kIEFwcFZleW9yIGZvciBXaW5kb3dzLWJhc2VkIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gY2hlY2tzLiAgQWxsIGNvbnRyaWJ1dGlvbnMgbXVzdCBwYXNzIHRoZXNlIGNoZWNrcyB0byBiZSBhY2NlcHRlZC4KKworU2V0dXAgeW91ciBsb2NhbCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudDoKKworYGBgYmFzaAorIyBDbG9uZSB5b3VyIGZvcmsKK2dpdCBjbG9uZSBnaXRAZ2l0aHViLmNvbTo8dXNlcm5hbWU+L29wZW50aHJlYWQuZ2l0CisKKyMgQ29uZmlndXJlIHVwc3RyZWFtIGFsaWFzCitnaXQgcmVtb3RlIGFkZCB1cHN0cmVhbSBnaXRAZ2l0aHViLmNvbTpvcGVudGhyZWFkL29wZW50aHJlYWQuZ2l0CitgYGAKKworIyMjIENvbnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50IChDTEEpCisKK1RoZSBPcGVuVGhyZWFkIFByb2plY3QgcmVxdWlyZXMgYWxsIGNvbnRyaWJ1dG9ycyB0byBzaWduIGEgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnQgKFtpbmRpdmlkdWFsXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9vcGVuLXNvdXJjZS9jbGEvaW5kaXZpZHVhbCkgb3IgW2NvcnBvcmF0ZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vb3Blbi1zb3VyY2UvY2xhL2NvcnBvcmF0ZSkpIGluIG9yZGVyIHRvIHByb3RlY3QgY29udHJpYnV0b3JzLCB1c2VycywgYW5kIEdvb2dsZSBpbiBpc3N1ZXMgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5LgorCitXaXRoIGVhY2ggUHVsbCBSZXF1ZXN0LCBhbiBhdXRvbWF0ZWQgY2hlY2sgb2NjdXJzIHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHNpZ25lZCB0aGUgQ0xBLiAgTWFrZSBzdXJlIHRoYXQgeW91IHNpZ24gdGhlIENMQSB3aXRoIHRoZSBzYW1lIGVtYWlsIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHlvdXIgY29tbWl0cyAoaS5lLiB2aWEgdGhlIGB1c2VyLmVtYWlsYCBHaXQgY29uZmlnIGFzIGRlc2NyaWJlZCBvbiBHaXRIdWIncyBbU2V0IHVwIEdpdF0oaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvc2V0LXVwLWdpdC8pIHBhZ2UuCisKK05PVEU6IE9ubHkgb3JpZ2luYWwgc291cmNlIGNvZGUgZnJvbSB5b3UgYW5kIG90aGVyIHBlb3BsZSB0aGF0IGhhdmUgc2lnbmVkIHRoZSBDTEEgY2FuIGJlIGFjY2VwdGVkIGludG8gdGhlIHJlcG9zaXRvcnkuIFRoaXMgcG9saWN5IGRvZXMgbm90IGFwcGx5IHRvIFt0aGlyZF9wYXJ0eV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC90cmVlL21hc3Rlci90aGlyZF9wYXJ0eSkuCisKKworIyMjIFN1Ym1pdHRpbmcgYSBQdWxsIFJlcXVlc3QKKworIyMjIyBCcmFuY2gKKworRm9yIGVhY2ggbmV3IGZlYXR1cmUsIGNyZWF0ZSBhIHdvcmtpbmcgYnJhbmNoOgorCitgYGBiYXNoCisjIENyZWF0ZSBhIHdvcmtpbmcgYnJhbmNoIGZvciB5b3VyIG5ldyBmZWF0dXJlCitnaXQgYnJhbmNoIC0tdHJhY2sgPGJyYW5jaC1uYW1lPiBvcmlnaW4vbWFzdGVyCisKKyMgQ2hlY2tvdXQgdGhlIGJyYW5jaAorZ2l0IGNoZWNrb3V0IDxicmFuY2gtbmFtZT4KK2BgYAorCisjIyMjIENyZWF0ZSBDb21taXRzCisKK2BgYGJhc2gKKyMgQWRkIGVhY2ggbW9kaWZpZWQgZmlsZSB5b3UnZCBsaWtlIHRvIGluY2x1ZGUgaW4gdGhlIGNvbW1pdAorZ2l0IGFkZCA8ZmlsZTE+IDxmaWxlMj4KKworIyBDcmVhdGUgYSBjb21taXQKK2dpdCBjb21taXQKK2BgYAorCitUaGlzIHdpbGwgb3BlbiB1cCBhIHRleHQgZWRpdG9yIHdoZXJlIHlvdSBjYW4gY3JhZnQgeW91ciBjb21taXQgbWVzc2FnZS4KKworIyMjIyBVcHN0cmVhbSBTeW5jIGFuZCBDbGVhbiBVcAorCitQcmlvciB0byBzdWJtaXR0aW5nIHlvdXIgcHVsbCByZXF1ZXN0LCB5b3UgbWlnaHQgd2FudCB0byBkbyBhIGZldyB0aGluZ3MgdG8gY2xlYW4gdXAgeW91ciBicmFuY2ggYW5kIG1ha2UgaXQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlIGZvciB0aGUgb3JpZ2luYWwgcmVwbydzIG1haW50YWluZXIgdG8gdGVzdCwgYWNjZXB0LCBhbmQgbWVyZ2UgeW91ciB3b3JrLgorCitJZiBhbnkgY29tbWl0cyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgdXBzdHJlYW0gbWFzdGVyIGJyYW5jaCwgeW91IHNob3VsZCByZWJhc2UgeW91ciBkZXZlbG9wbWVudCBicmFuY2ggc28gdGhhdCBtZXJnaW5nIGl0IHdpbGwgYmUgYSBzaW1wbGUgZmFzdC1mb3J3YXJkIHRoYXQgd29uJ3QgcmVxdWlyZSBhbnkgY29uZmxpY3QgcmVzb2x1dGlvbiB3b3JrLgorCitgYGBiYXNoCisjIEZldGNoIHVwc3RyZWFtIG1hc3RlciBhbmQgbWVyZ2Ugd2l0aCB5b3VyIHJlcG8ncyBtYXN0ZXIgYnJhbmNoCitnaXQgY2hlY2tvdXQgbWFzdGVyCitnaXQgcHVsbCB1cHN0cmVhbSBtYXN0ZXIKKworIyBJZiB0aGVyZSB3ZXJlIGFueSBuZXcgY29tbWl0cywgcmViYXNlIHlvdXIgZGV2ZWxvcG1lbnQgYnJhbmNoCitnaXQgY2hlY2tvdXQgPGJyYW5jaC1uYW1lPgorZ2l0IHJlYmFzZSBtYXN0ZXIKK2BgYAorCitOb3csIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gc3F1YXNoIHNvbWUgb2YgeW91ciBzbWFsbGVyIGNvbW1pdHMgZG93biBpbnRvIGEgc21hbGwgbnVtYmVyIG9mIGxhcmdlciBtb3JlIGNvaGVzaXZlIGNvbW1pdHMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIGFuIGludGVyYWN0aXZlIHJlYmFzZToKKworYGBgYmFzaAorIyBSZWJhc2UgYWxsIGNvbW1pdHMgb24geW91ciBkZXZlbG9wbWVudCBicmFuY2gKK2dpdCBjaGVja291dCAKK2dpdCByZWJhc2UgLWkgbWFzdGVyCitgYGAKKworVGhpcyB3aWxsIG9wZW4gdXAgYSB0ZXh0IGVkaXRvciB3aGVyZSB5b3UgY2FuIHNwZWNpZnkgd2hpY2ggY29tbWl0cyB0byBzcXVhc2guCisKKyMjIyMgQ29kaW5nIENvbnZlbnRpb25zIGFuZCBTdHlsZQorCitPcGVuVGhyZWFkIHVzZXMgYW5kIGVuZm9yY2VzIHRoZSBbT3BlblRocmVhZCBDb2RpbmcgQ29udmVudGlvbnMgYW5kIFN0eWxlXShTVFlMRV9HVUlERS5tZCkgb24gYWxsIGNvZGUsIGV4Y2VwdCBmb3IgY29kZSBsb2NhdGVkIGluIFt0aGlyZF9wYXJ0eV0odGhpcmRfcGFydHkpLgorCitBcyBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3MsIHlvdSBzaG91bGQgYWxzbyBydW4gYG1ha2UgcHJldHR5LWNoZWNrYCB0byBlbnN1cmUgdGhhdCB5b3VyIGNvZGUgcGFzc2VzIHRoZSBiYXNlbGluZSBjb2RlIHN0eWxlIGNoZWNrcy4KKworYGBgYmFzaAorLi9ib290c3RyYXAKKy4vY29uZmlndXJlIC0tZW5hYmxlLWZ0ZCAtLWVuYWJsZS1jbGkgLS1lbmFibGUtZGlhZyAtLWVuYWJsZS1kaGNwNi1jbGllbnQgLS1lbmFibGUtZGhjcDYtc2VydmVyIC0tZW5hYmxlLWNvbW1pc3Npb25lciAtLWVuYWJsZS1qb2luZXIgLS13aXRoLWV4YW1wbGVzPXBvc2l4CittYWtlIHByZXR0eS1jaGVjaworCitgYGAKKworTWFrZSBzdXJlIHRvIGluY2x1ZGUgYW55IGNvZGUgZm9ybWF0IGNoYW5nZXMgaW4geW91ciBjb21taXRzLgorCisjIyMjIFB1c2ggYW5kIFRlc3QKKworYGBgYmFzaAorIyBDaGVja291dCB5b3VyIGJyYW5jaAorZ2l0IGNoZWNrb3V0IDxicmFuY2gtbmFtZT4KKworIyBQdXNoIHRvIHlvdXIgR2l0SHViIGZvcms6CitnaXQgcHVzaCBvcmlnaW4gPGJyYW5jaC1uYW1lPgorYGBgCisKK1RoaXMgd2lsbCB0cmlnZ2VyIHRoZSBUcmF2aXMgQ0kgYW5kIEFwcFZleW9yIGNvbnRpbnVvdXMtaW50ZWdyYXRpb24gY2hlY2tzLiAgWW91IGNhbiB2aWV3IHRoZSByZXN1bHRzIGluIHRoZSByZXNwZWN0aXZlIHNlcnZpY2VzLiAgTm90ZSB0aGF0IHRoZSBpbnRlZ3JhdGlvbiBjaGVja3Mgd2lsbCByZXBvcnQgZmFpbHVyZXMgb24gb2NjYXNpb24uICBJZiBhIGZhaWx1cmUgb2NjdXJzLCB5b3UgbWF5IHRyeSByZXJ1bm5pbmcgdGhlIHRlc3QgdmlhIHRoZSBUcmF2aXMgYW5kL29yIEFwcFZleW9yIHdlYiBVSS4KKworIyMjIyBTdWJtaXQgUHVsbCBSZXF1ZXN0CisKK09uY2UgeW91J3ZlIHZhbGlkYXRlZCB0aGUgVHJhdmlzIENJIGFuZCBBcHBWZXlvciByZXN1bHRzLCBnbyB0byB0aGUgcGFnZSBmb3IgeW91ciBmb3JrIG9uIEdpdEh1Yiwgc2VsZWN0IHlvdXIgZGV2ZWxvcG1lbnQgYnJhbmNoLCBhbmQgY2xpY2sgdGhlIHB1bGwgcmVxdWVzdCBidXR0b24uIElmIHlvdSBuZWVkIHRvIG1ha2UgYW55IGFkanVzdG1lbnRzIHRvIHlvdXIgcHVsbCByZXF1ZXN0LCBqdXN0IHB1c2ggdGhlIHVwZGF0ZXMgdG8gR2l0SHViLiBZb3VyIHB1bGwgcmVxdWVzdCB3aWxsIGF1dG9tYXRpY2FsbHkgdHJhY2sgdGhlIGNoYW5nZXMgb24geW91ciBkZXZlbG9wbWVudCBicmFuY2ggYW5kIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTcwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTlNFCkBAIC0wLDAgKzEsMjUgQEAKK0NvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODYxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIwNCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitBTV9NQUtFRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisKK0FNX0RJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgICAgICAgID0gXAorICAgIC0tZW5hYmxlLWFkZHJlc3Mtc2FuaXRpemVyICAgICAgICBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1uY3AtYXBwPWFsbCAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1uY3AtYnVzPXVhcnQgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZGlhZyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLXdpdGgtZXhhbXBsZXM9cG9zaXggICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWNvbW1pc3Npb25lciAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtam9pbmVyICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1kaGNwNi1jbGllbnQgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRoY3A2LXNlcnZlciAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZG5zLWNsaWVudCAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwICAgICAgICAgXAorICAgIC0tZW5hYmxlLWJvcmRlci1yb3V0ZXIgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBpbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGhpcmRfcGFydHkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBleGFtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG9vbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLmFzdHlsZS9hc3R5bGUtb3B0cyAgICAgICAgICAgICAgIFwKKyAgICAuYXN0eWxlL2FzdHlsZS13cmFwLnNoICAgICAgICAgICAgXAorICAgIC5kZWZhdWx0LXZlcnNpb24gICAgICAgICAgICAgICAgICBcCisgICAgYm9vdHN0cmFwICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBldGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9USUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDT05UUklCVVRJTkcubWQgICAgICAgICAgICAgICAgICAgXAorICAgIExJQ0VOU0UgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitCVUlMVF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAubG9jYWwtdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworZGlzdF9kb2NfREFUQSAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitESVNUQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAubG9jYWwtdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0b29scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBJZ25vcmUgdGhlIHBzZXVkbyBmbGFzaCBmaWxlcyBvbiBQb3NpeCBwbGF0Zm9ybSBkdXJpbmcgZGlza2NoZWNrCitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgICAgICAgICAgICA9IFwKKyAgICAkKEFNX1ZfYXQpZmluZCAuIC10eXBlIGYgLW5hbWUgIipmbGFzaCIKKworIworIyBQYWNrYWdlIHZlcnNpb24gZmlsZXM6CisjCisjIC5kZWZhdWx0LXZlcnNpb24gLSBUaGUgZGVmYXVsdCBwYWNrYWdlIHZlcnNpb24uIFRoaXMgZmlsZSBpcyBBTFdBWVMgY2hlY2tlZAorIyAgICAgICAgICAgICAgICAgICAgaW4gYW5kIHNob3VsZCBhbHdheXMgcmVwcmVzZW50IHRoZSBjdXJyZW50IGJhc2VsaW5lCisjICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLgorIworIyAuZGlzdC12ZXJzaW9uICAgIC0gVGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgdmVyc2lvbi4gVGhpcyBmaWxlIGlzIE5FVkVSCisjICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGluIHdpdGhpbiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSwgaXMgYXV0by0KKyMgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCwgYW5kIGlzIG9ubHkgZm91bmQgaW4gdGhlIHBhY2thZ2UgZGlzdHJpYnV0aW9uLgorIworIyAubG9jYWwtdmVyc2lvbiAgIC0gVGhlIGN1cnJlbnQgc291cmNlIGNvZGUgY29udHJvbGxlZCBwYWNrYWdlIHZlcnNpb24uIFRoaXMKKyMgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgTkVWRVIgY2hlY2tlZCBpbiB3aXRoaW4gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksCisjICAgICAgICAgICAgICAgICAgICBpcyBhdXRvLWdlbmVyYXRlZCwgYW5kIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gYm90aCB0aGUKKyMgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRyZWUgYW5kIGRpc3RyaWJ1dGlvbi4KKyMKKyMgV2hlbiBwcmVzZW50LCB0aGUgLmxvY2FsLXZlcnNpb24gZmlsZSBpcyBwcmVmZXJyZWQgZmlyc3QsIHRoZQorIyAuZGlzdC12ZXJzaW9uIHNlY29uZCwgYW5kIHRoZSAuZGVmYXVsdC12ZXJzaW9uIGxhc3QuCisjCisKK1ZFUlNJT05fRklMRSAgICAgICAgICAgICAgICAgICAgICA6PSAkKGlmICQod2lsZGNhcmQgJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb24pLCQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uLCQoaWYgJCh3aWxkY2FyZCAkKHNyY2RpcikvLmRpc3QtdmVyc2lvbiksJChzcmNkaXIpLy5kaXN0LXZlcnNpb24sJChzcmNkaXIpLy5kZWZhdWx0LXZlcnNpb24pKQorCisjCisjIE92ZXJyaWRlIGF1dG90b29sJ3MgZGVmYXVsdCBub3Rpb24gb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiB2YXJpYWJsZXMuCisjIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gd2UgY3JlYXRlIGEgc291cmNlIGRpc3RyaWJ1dGlvbiB0aGF0IHRoZQorIyB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgY3VycmVudCB2ZXJzaW9uLCBub3QgdGhlIHZlcnNpb24gd2hlbiB0aGUKKyMgcGFja2FnZSB3YXMgYm9vdHN0cmFwcGVkLgorIworCitPUEVOVEhSRUFEX1ZFUlNJT04gICAgICAgICAgICAgICAgPz0gJChzaGVsbCBjYXQgJChWRVJTSU9OX0ZJTEUpIDI+IC9kZXYvbnVsbCkKKworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9ICQoT1BFTlRIUkVBRF9WRVJTSU9OKQorVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKHNoZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2lmIFsgIiQob3JpZ2luIE9QRU5USFJFQURfVkVSU0lPTikiICE9ICJmaWxlIiBdOyB0aGVuICAgICAgICAgICAgXAorICAgIGVjaG8gIiQoT1BFTlRIUkVBRF9WRVJTSU9OKSIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9zY3JpcHRzL21rdmVyc2lvbiAgICAgICAgICAgXAorICAgICAgICAtYiAiJChPUEVOVEhSRUFEX1ZFUlNJT04pIiAiJCh0b3Bfc3JjZGlyKSI7ICAgICAgICAgICAgICBcCitmaSApCisKKyMKKyMgY2hlY2stZmlsZS0ubG9jYWwtdmVyc2lvbgorIworIyBTcGVjdWxhdGl2ZWx5IHJlZ2VuZXJhdGUgLmxvY2FsLXZlcnNpb24gYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBuZWVkcworIyB0byBiZSB1cGRhdGVkLgorIworIyBJZiBPUEVOVEhSRUFEX1ZFUlNJT04gaGFzIGJlZW4gc3VwcGxpZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBpbiB0aGlzIGZpbGUKKyMgKHdoaWNoIGlzIGltcGxpY2l0bHkgdGhlIGNvbnRlbnRzIG9mIC5sb2NhbC12ZXJzaW9uKSwgdGhlbiB1c2UgdGhhdDsKKyMgb3RoZXJ3aXNlLCBhdHRlbXB0IHRvIGdlbmVyYXRlIGl0IGZyb20gdGhlIFNDTSBzeXN0ZW0uCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyb20gJChjYWxsIGNoZWNrLWZpbGUsLmxvY2FsLXZlcnNpb24pLgorIworZGVmaW5lIGNoZWNrLWZpbGUtLmxvY2FsLXZlcnNpb24KK2lmIFsgIiQob3JpZ2luIE9QRU5USFJFQURfVkVSU0lPTikiICE9ICJmaWxlIiBdOyB0aGVuIFwKKyAgICBlY2hvICIkKE9QRU5USFJFQURfVkVSU0lPTikiID4gIiQoMikiOyAgICAgICAgICAgIFwKK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL3NjcmlwdHMvbWt2ZXJzaW9uICAgICAgICAgICBcCisgICAgICAgIC1iICIkKE9QRU5USFJFQURfVkVSU0lPTikiICIkKHRvcF9zcmNkaXIpIiAgICBcCisgICAgICAgID4gIiQoMikiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2ZpCitlbmRlZgorCisjCisjIGNoZWNrLWZpbGUtLmRpc3QtdmVyc2lvbgorIworIyBTcGVjdWxhdGl2ZWx5IHJlZ2VuZXJhdGUgLmRpc3QtdmVyc2lvbiBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IG5lZWRzCisjIHRvIGJlIHVwZGF0ZWQuCisjCisjIFRoaXMgaXMgY2FsbGVkIGZyb20gJChjYWxsIGNoZWNrLWZpbGUsLmRpc3QtdmVyc2lvbikuCisjCitkZWZpbmUgY2hlY2stZmlsZS0uZGlzdC12ZXJzaW9uCitjYXQgIiQoMSkiID4gIiQoMikiCitlbmRlZgorCisjCisjIEEgY29udmVuaWVuY2UgdGFyZ2V0IHRvIGFsbG93IHBhY2thZ2UgdXNlcnMgdG8gZWFzaWx5IHJlcnVuIHRoZQorIyBwYWNrYWdlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjCisuUEhPTlk6IHJlY29uZmlndXJlCityZWNvbmZpZ3VyZTogJChidWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoQU1fVl9hdCkkKDwpIC0tcmVjaGVjaworCisjCisjIFZlcnNpb24gZmlsZSByZWdlbmVyYXRpb24gcnVsZXMuCisjCisuUEhPTlk6IGZvcmNlCisKKyQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uOiAkKHNyY2RpcikvLmRlZmF1bHQtdmVyc2lvbiBmb3JjZQorCiskKGRpc3RkaXIpLy5kaXN0LXZlcnNpb246ICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uIGZvcmNlCisKKyQoZGlzdGRpcikvLmRpc3QtdmVyc2lvbiAkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbjoKKwkkKGNhbGwgY2hlY2stZmlsZSwkKEBGKSkKKworZGlzdCBkaXN0Y2hlY2s6ICQoQlVJTFRfU09VUkNFUykKKworZGlzdC1ob29rOiAkKGRpc3RkaXIpLy5kaXN0LXZlcnNpb24KKworIworIyBUb3AtbGV2ZWwgY29udmVuaWVuY2UgdGFyZ2V0IGZvciBtYWtpbmcgYSBkb2N1bWVudGF0aW9uLW9ubHkKKyMgZGlzdHJpYnV0aW9uIHdob3NlIHJlc3VsdHMgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGJ1aWxkIHRyZWUKKyMgaW4gdGhlIHNhbWUgZmFzaGlvbiB0aGF0IHRoZSBkaXN0cmlidXRpb24gd291bGQgYmUgZm9yICdtYWtlIGRpc3QnLgorIworCisuUEhPTlk6IGRvY2Rpc3QKK2RvY2Rpc3Q6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpIC1DIGRvYyBkb2NkaXN0ZGlyPSQoYWJzX2J1aWxkZGlyKSAkKEApCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvTk9USUNFIGIvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWRhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9OT1RJQ0UKQEAgLTAsMCArMSwxOSBAQAorT3BlblRocmVhZCBpcyBhbiBvcGVuIHNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGhyZWFkIDEuMC4xIEZpbmFsIFNwZWNpZmljYXRpb24uCitUaGUgVGhyZWFkIDEuMC4xIEZpbmFsIFNwZWNpZmljYXRpb24gaXMgcHJvbXVsZ2F0ZWQgYnkgdGhlIFRocmVhZCBHcm91cC4gVGhlIFRocmVhZAorR3JvdXAgaXMgYSBub24tcHJvZml0IG9yZ2FuaXphdGlvbiBmb3JtZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBkZWZpbmluZyBvbmUgb3IKK21vcmUgc3BlY2lmaWNhdGlvbnMsIGJlc3QgcHJhY3RpY2VzLCByZWZlcmVuY2UgYXJjaGl0ZWN0dXJlcywgaW1wbGVtZW50YXRpb24KK2d1aWRlbGluZXMgYW5kIGNlcnRpZmljYXRpb24gcHJvZ3JhbXMgdG8gcHJvbW90ZSB0aGUgYXZhaWxhYmlsaXR5IG9mIGNvbXBsaWFudAoraW1wbGVtZW50YXRpb25zIG9mIHRoZSBUaHJlYWQgcHJvdG9jb2wuIEluZm9ybWF0aW9uIG9uIGJlY29taW5nIGEgTWVtYmVyLCBpbmNsdWRpbmcKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBiZW5lZml0cyB0aGVyZW9mLCBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3RocmVhZGdyb3VwLm9yZy4KKworT3BlblRocmVhZCBpcyBub3QgYWZmaWxpYXRlZCB3aXRoIG9yIGVuZG9yc2VkIGJ5IHRoZSBUaHJlYWQgR3JvdXAuIEltcGxlbWVudGF0aW9uCitvZiB0aGlzIE9wZW5UaHJlYWQgY29kZSBkb2VzIG5vdCBhc3N1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBUaHJlYWQgMS4wLjEgRmluYWwKK1NwZWNpZmljYXRpb24gYW5kIGRvZXMgbm90IGNvbnZleSB0aGUgcmlnaHQgdG8gaWRlbnRpZnkgYW55IGZpbmFsIHByb2R1Y3QgYXMgVGhyZWFkCitjZXJ0aWZpZWQuIE1lbWJlcnMgb2YgdGhlIFRocmVhZCBHcm91cCBtYXkgaG9sZCBwYXRlbnRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgVGhyZWFkIDEuMC4xIEZpbmFsIFNwZWNpZmljYXRpb24sIG93bmVyc2hpcCBhbmQKK2xpY2Vuc2VzIG9mIHdoaWNoIGFyZSBzdWJqZWN0IHRvIHRoZSBUaHJlYWQgR3JvdXDigJlzIElQIFBvbGljaWVzLCBhbmQgbm90IHRoaXMgbGljZW5zZS4KKworVGhlIGluY2x1ZGVkIGNvcHlyaWdodCB0byB0aGUgT3BlblRocmVhZCBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgaW4gdGhlCitMSUNFTlNFIGZpbGUsIGFuZCBhbGwgb3RoZXIgcmlnaHRzIGFuZCBsaWNlbnNlcyBhcmUgZXhwcmVzc2x5IHJlc2VydmVkLgorTm8gd2FycmFudHkgb3IgYXNzdXJhbmNlIGlzIG1hZGUgd2l0aCByZXNwZWN0IHRvIGFkZGl0aW9uYWwgcmlnaHRzIHRoYXQgbWF5IGJlCityZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhpcyBjb2RlLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2JmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSwxODQgQEAKK1shW09wZW5UaHJlYWRdW290LWxvZ29dXVtvdC1yZXBvXSAgCitbIVtCdWlsZCBTdGF0dXNdW290LXRyYXZpcy1zdmddXVtvdC10cmF2aXNdCitbIVtCdWlsZCBTdGF0dXNdW290LWFwcHZleW9yLXN2Z11dW290LWFwcHZleW9yXQorWyFbQ292ZXJhZ2UgU3RhdHVzXVtvdC1jb2RlY292LXN2Z11dW290LWNvZGVjb3ZdCisKKy0tLQorCisjIFdoYXQgaXMgT3BlblRocmVhZD8gIAorCitPcGVuVGhyZWFkIGlzLi4uCis8YSBocmVmPSJodHRwOi8vdGhyZWFkZ3JvdXAub3JnL3RlY2hub2xvZ3kvb3VydGVjaG5vbG9neSNjZXJ0aWZpZWRwcm9kdWN0cyI+Cis8aW1nIHNyYz0iaHR0cHM6Ly9jZG4ucmF3Z2l0LmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYWI0YzRlMWUvZG9jL2ltYWdlcy9jZXJ0aWZpZWQuc3ZnIiBhbHQ9IlRocmVhZCBDZXJ0aWZpZWQgQ29tcG9uZW50IiB3aWR0aD0iMTUwcHgiIGFsaWduPSJyaWdodCI+Cis8L2E+CisKKyoqLi4uYW4gb3Blbi1zb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtUaHJlYWRdKGh0dHA6Ly90aHJlYWRncm91cC5vcmcvdGVjaG5vbG9neS9vdXJ0ZWNobm9sb2d5KSBuZXR3b3JraW5nIHByb3RvY29sLioqIE5lc3QgaGFzIHJlbGVhc2VkIE9wZW5UaHJlYWQgdG8gbWFrZSB0aGUgdGVjaG5vbG9neSB1c2VkIGluIE5lc3QgcHJvZHVjdHMgbW9yZSBicm9hZGx5IGF2YWlsYWJsZSB0byBkZXZlbG9wZXJzIHRvIGFjY2VsZXJhdGUgdGhlIGRldmVsb3BtZW50IG9mIHByb2R1Y3RzIGZvciB0aGUgY29ubmVjdGVkIGhvbWUuCisKKyoqLi4uT1MgYW5kIHBsYXRmb3JtIGFnbm9zdGljKiosIHdpdGggYSBuYXJyb3cgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgYW5kIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCwgbWFraW5nIGl0IGhpZ2hseSBwb3J0YWJsZS4KKworKiouLi5hIFRocmVhZCBDZXJ0aWZpZWQgQ29tcG9uZW50KiosIGltcGxlbWVudGluZyBhbGwgZmVhdHVyZXMgZGVmaW5lZCBpbiB0aGUgW1RocmVhZCAxLjEuMSBzcGVjaWZpY2F0aW9uXShodHRwOi8vdGhyZWFkZ3JvdXAub3JnL3RlY2hub2xvZ3kvb3VydGVjaG5vbG9neSNzcGVjaWZpY2F0aW9ucykuIFRoaXMgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIGFuIElQdjYtYmFzZWQgcmVsaWFibGUsIHNlY3VyZSBhbmQgbG93LXBvd2VyIHdpcmVsZXNzIGRldmljZS10by1kZXZpY2UgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBmb3IgaG9tZSBhcHBsaWNhdGlvbnMuCisKK01vcmUgaW5mb3JtYXRpb24gYWJvdXQgVGhyZWFkIGNhbiBiZSBmb3VuZCBvbiBbdGhyZWFkZ3JvdXAub3JnXShodHRwOi8vdGhyZWFkZ3JvdXAub3JnLykuCisKK1t0aHJlYWRdOiBodHRwOi8vdGhyZWFkZ3JvdXAub3JnL3RlY2hub2xvZ3kvb3VydGVjaG5vbG9neQorW290LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkCitbb3QtbG9nb106IGRvYy9pbWFnZXMvb3BlbnRocmVhZF9sb2dvLnBuZworW290LXRyYXZpc106IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9vcGVudGhyZWFkL29wZW50aHJlYWQKK1tvdC10cmF2aXMtc3ZnXTogaHR0cHM6Ly90cmF2aXMtY2kub3JnL29wZW50aHJlYWQvb3BlbnRocmVhZC5zdmc/YnJhbmNoPW1hc3RlcgorW290LWFwcHZleW9yXTogaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vcHJvamVjdC9qd2h1aS9vcGVudGhyZWFkCitbb3QtYXBwdmV5b3Itc3ZnXTogaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vYXBpL3Byb2plY3RzL3N0YXR1cy9yNXF3eWhuOXAyNm5tZmszP3N2Zz10cnVlCitbb3QtY29kZWNvdl06IGh0dHBzOi8vY29kZWNvdi5pby9naC9vcGVudGhyZWFkL29wZW50aHJlYWQKK1tvdC1jb2RlY292LXN2Z106IGh0dHBzOi8vY29kZWNvdi5pby9naC9vcGVudGhyZWFkL29wZW50aHJlYWQvYnJhbmNoL21hc3Rlci9ncmFwaC9iYWRnZS5zdmcKKworIyBHZXQgc3RhcnRlZCB3aXRoIE9wZW5UaHJlYWQKKworPGEgaHJlZj0iaHR0cHM6Ly9jb2RlbGFicy5kZXZlbG9wZXJzLmdvb2dsZS5jb20vY29kZWxhYnMvb3BlbnRocmVhZC1zaW11bGF0aW9uL2luZGV4Lmh0bWwiPgorPGltZyBzcmM9ImRvYy9pbWFnZXMvb3QtY29kZWxhYi5wbmciIGFsdD0iT3BlblRocmVhZCBDb2RlbGFiIiB3aWR0aD0iMzAwcHgiIGFsaWduPSJyaWdodCI+Cis8L2E+CisKK1dhbnQgdG8gdHJ5IE9wZW5UaHJlYWQ/IFRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IHN0YXJ0ZWQgaXMgdG8gcnVuIHRocm91Z2ggb3VyIFtTaW11bGF0aW9uIENvZGVsYWJdKGh0dHBzOi8vY29kZWxhYnMuZGV2ZWxvcGVycy5nb29nbGUuY29tL2NvZGVsYWJzL29wZW50aHJlYWQtc2ltdWxhdGlvbi9pbmRleC5odG1sKSwgd2hpY2ggY292ZXJzIGFsbCB0aGUgYmFzaWNzLCB3aXRob3V0IHRoZSBuZWVkIGZvciB0ZXN0IGhhcmR3YXJlLiBVc2luZyBWaXJ0dWFsQm94IGFuZCBWYWdyYW50IG9uIGEgTWFjIG9yIExpbnV4IG1hY2hpbmUsIHlvdSB3aWxsIGxlYXJuOgorCisqIEhvdyB0byBzZXQgdXAgdGhlIE9wZW5UaHJlYWQgYnVpbGQgdG9vbGNoYWluCisqIEhvdyB0byBzaW11bGF0ZSBhIFRocmVhZCBuZXR3b3JrCisqIEhvdyB0byBhdXRoZW50aWNhdGUgVGhyZWFkIG5vZGVzIHdpdGggQ29tbWlzc2lvbmluZworKiBIb3cgdG8gdXNlIGB3cGFudHVuZGAgdG8gbWFuYWdlIGEgc2ltdWxhdGVkIFRocmVhZCBuZXR3b3JrIGZlYXR1cmluZyBhbiBOQ1AKKworIyMjIE5leHQgU3RlcHMKKworVGhlIENvZGVsYWIgc2hvd3MgeW91IGhvdyBlYXN5IGl0IGlzIHVzZSB0byBPcGVuVGhyZWFkIHRvIHNpbXVsYXRlIGEgVGhyZWFkIG5ldHdvcmsuIE9uY2UgY29tcGxldGU6CisKKzEuIExlYXJuIG1vcmUgYWJvdXQgdGhlIFtPcGVuVGhyZWFkIGFyY2hpdGVjdHVyZSBhbmQgZmVhdHVyZXNdKCNvcGVudGhyZWFkLWZlYXR1cmVzKQorMS4gR2V0IGZhbWlsaWFyIHdpdGggW3BsYXRmb3JtcyBhbmQgZGV2aWNlcyB0aGF0IHN1cHBvcnQgT3BlblRocmVhZF0oI3doby1zdXBwb3J0cy1vcGVudGhyZWFkKQorMS4gU2VlIHdoYXQgW3Rlc3RpbmcgdG9vbHNdKCN3aGF0LXRvb2xzLWFyZS1hdmFpbGFibGUtZm9yLXRlc3RpbmcpIGFyZSBhdmFpbGFibGUKKzEuIExlYXJuIFt3aGVyZSB0byBnZXQgaGVscF0oI25lZWQtaGVscCkgYW5kIFtob3cgdG8gY29udHJpYnV0ZV0oI3dhbnQtdG8tY29udHJpYnV0ZSkgdG8gdGhlIG9uZ29pbmcgZGV2ZWxvcG1lbnQgb2YgT3BlblRocmVhZAorCisjIE9wZW5UaHJlYWQgRmVhdHVyZXMKKworT3BlblRocmVhZCBpbXBsZW1lbnRzIGFsbCBmZWF0dXJlcyBkZWZpbmVkIGluIHRoZSBbVGhyZWFkIDEuMS4xIHNwZWNpZmljYXRpb25dKGh0dHA6Ly90aHJlYWRncm91cC5vcmcvdGVjaG5vbG9neS9vdXJ0ZWNobm9sb2d5I3NwZWNpZmljYXRpb25zKSwgaW5jbHVkaW5nIGFsbCBUaHJlYWQgbmV0d29ya2luZyBsYXllcnMgKElQdjYsIDZMb1dQQU4sIElFRUUgODAyLjE1LjQgd2l0aCBNQUMgc2VjdXJpdHksIE1lc2ggTGluayBFc3RhYmxpc2htZW50LCBNZXNoIFJvdXRpbmcpIGFuZCBkZXZpY2Ugcm9sZXMsIGFzIHdlbGwgYXMgW0JvcmRlciBSb3V0ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL2JvcmRlcnJvdXRlcikgc3VwcG9ydC4KKworT3BlblRocmVhZCBzdXBwb3J0cyBib3RoIHN5c3RlbS1vbi1jaGlwIChTb0MpIGFuZCBuZXR3b3JrIGNvLXByb2Nlc3NvciAoTkNQKSBkZXNpZ25zLiBPdGhlciBmZWF0dXJlcyBhbmQgZW5oYW5jZW1lbnRzIGluY2x1ZGU6CisKKyogQXBwbGljYXRpb24gc3VwcG9ydCBhbmQgc2VydmljZXMKKyAgICAqIElQdjYgY29uZmlndXJhdGlvbiBhbmQgcmF3IGRhdGEgaW50ZXJmYWNlCisgICAgKiBVRFAgc29ja2V0cworICAgICogQ29BUCBjbGllbnQgYW5kIHNlcnZlcgorICAgICogREhDUHY2IGNsaWVudCBhbmQgc2VydmVyCisgICAgKiBETlN2NiBjbGllbnQKKyAgICAqIENvbW1hbmQgTGluZSBJbnRlcmZhY2UgKENMSSkKKyogTkNQIHN1cHBvcnQKKyAgICAqIFNwaW5lbCAtIGdlbmVyYWwgcHVycG9zZSBOQ1AgcHJvdG9jb2wKKyAgICAqIGB3cGFudHVuZGAgLSB1c2VyLXNwYWNlIE5DUCBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXIvZGFlbW9uCisgICAgKiBTbmlmZmVyIHN1cHBvcnQgdmlhIE5DUCBTcGluZWwgbm9kZXMKKyogQm9yZGVyIFJvdXRlcgorICAgICogV2ViIFVJIGZvciBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50CisgICAgKiBUaHJlYWQgQm9yZGVyIEFnZW50IHRvIHN1cHBvcnQgYW4gRXh0ZXJuYWwgQ29tbWlzc2lvbmVyCisgICAgKiBOQVQ2NCBmb3IgY29ubmVjdGluZyB0byBJUHY0IG5ldHdvcmtzCisgICAgKiBUaHJlYWQgaW50ZXJmYWNlIGRyaXZlciB1c2luZyBgd3BhbnR1bmRgCisKKyMjIyBXaGF0J3MgY29taW5nPworCitUaGUgZGV2ZWxvcG1lbnQgb2YgT3BlblRocmVhZCBpcyBvbmdvaW5nIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBmZWF0dXJlcyBub3QgYXZhaWxhYmxlIGluIHRoZSBzdGFuZGFyZC4gQ2hlY2sgYmFjayByZWd1bGFybHkgZm9yIG5ldyB1cGRhdGVzLCBvciB2aXNpdCB0aGUgW29wZW50aHJlYWQtYW5ub3VuY2VdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFmb3J1bS9vcGVudGhyZWFkLWFubm91bmNlKSBHb29nbGUgR3JvdXAuCisKKyMgV2hvIHN1cHBvcnRzIE9wZW5UaHJlYWQ/CisKK0xlZCBieSBOZXN0LCB0aGUgZm9sbG93aW5nIGNvbXBhbmllcyBhcmUgY29udHJpYnV0aW5nIHRvIHRoZSBvbmdvaW5nIGRldmVsb3BtZW50IG9mIE9wZW5UaHJlYWQ6CisKKzxhIGhyZWY9Imh0dHBzOi8vd3d3LmFybS5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLWFybS5wbmciIGFsdD0iQVJNIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LmF0bWVsLmNvbS8iPjxpbWcgc3JjPSJkb2MvaW1hZ2VzL290LWNvbnRyaWItYXRtZWwucG5nIiBhbHQ9IkF0bWVsIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LmRpYWxvZy1zZW1pY29uZHVjdG9yLmNvbS8iPjxpbWcgc3JjPSJkb2MvaW1hZ2VzL290LWNvbnRyaWItZGlhbG9nLnBuZyIgYWx0PSJEaWFsb2ciIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW1zLnBuZyIgYWx0PSJNaWNyb3NvZnQiIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vbmVzdC5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW5lc3QucG5nIiBhbHQ9Ik5lc3QiIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cubm9yZGljc2VtaS5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW5vcmRpYy5wbmciIGFsdD0iTm9yZGljIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3Lm54cC5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLW54cC5wbmciIGFsdD0iTlhQIiB3aWR0aD0iMjAwcHgiPjwvYT48YSBocmVmPSJodHRwczovL3d3dy5xdWFsY29tbS5jb20vIj48aW1nIHNyYz0iZG9jL2ltYWdlcy9vdC1jb250cmliLXFjLnBuZyIgYWx0PSJRdWFsY29tbSIgd2lkdGg9IjIwMHB4Ij48L2E+PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3lub3BzeXMuY29tLyI+PGltZyBzcmM9ImRvYy9pbWFnZXMvb3QtY29udHJpYi1zeW5vcHN5cy5wbmciIGFsdD0iU3lub3BzeXMiIHdpZHRoPSIyMDBweCI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnRpLmNvbS8iPjxpbWcgc3JjPSJkb2MvaW1hZ2VzL290LWNvbnRyaWItdGkucG5nIiBhbHQ9IlRleGFzIEluc3RydW1lbnRzIiB3aWR0aD0iMjAwcHgiPjwvYT4KKworT3BlblRocmVhZCBoYXMgYmVlbiBwb3J0ZWQgdG8gc2V2ZXJhbCBkZXZpY2VzIGFuZCBwbGF0Zm9ybXMgYnkgYm90aCB0aGUgT3BlblRocmVhZCB0ZWFtIGFuZCB0aGUgY29tbXVuaXR5LiBCdWlsZCBleGFtcGxlcyBmb3IgYWxsIHN1cHBvcnRlZCBwbGF0Zm9ybXMgYXJlIGluY2x1ZGVkIGluIHRoZSBPcGVuVGhyZWFkIHByb2plY3QuCisKKyMjIyBJRUVFIDgwMi4xNS40IFBsYXRmb3JtIFN1cHBvcnQKKworKiBbRGlhbG9nIFNlbWljb25kdWN0b3IgREExNTAwMF0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNkaWFsb2ctZGExNTAwMCkKKyogW05vcmRpYyBTZW1pY29uZHVjdG9yIG5SRjUyODQwXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL3dpa2kvUGxhdGZvcm1zI25vcmRpYy1zZW1pY29uZHVjdG9yLW5yZjUyODQwKQorKiBbTlhQIEtXNDFaXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL3dpa2kvUGxhdGZvcm1zI254cC1rdzQxeikKKyogW1NpbGljb24gTGFicyBFRlIzMl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNzaWxpY29uLWxhYnMtZWZyMzIpCisqIFtTeW5vcHN5cyBBUkMgRU1TSyB3aXRoIE1pY3JvY2hpcCBNUkYyNEo0MF0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNzeW5vcHN5cy1hcmMtZW0td2l0aC1taWNyb2NoaXAtbXJmMjRqNDApCisqIFtUZXhhcyBJbnN0cnVtZW50cyBDQzI1MzhdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvd2lraS9QbGF0Zm9ybXMjdGV4YXMtaW5zdHJ1bWVudHMtY2MyNTM4KQorKiBbVGV4YXMgSW5zdHJ1bWVudHMgQ0MyNjUwXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL3dpa2kvUGxhdGZvcm1zI3RleGFzLWluc3RydW1lbnRzLWNjMjY1MCkKKyogW1BPU0lYIEVtdWxhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcyNwb3NpeC1lbXVsYXRpb24pCisKK1NlZSB0aGUgW1dpa2kgUGxhdGZvcm0gcGFnZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BsYXRmb3JtcykgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIHBsYXRmb3Jtcy4KKworIyMjIERlc2t0b3AgU3VwcG9ydAorCitEZXNrdG9wIHBsYXRmb3JtcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnRyb2wgYW5kIGludGVyZmFjZSB3aXRoIGEgVGhyZWFkIG5ldHdvcmsgdXNpbmcgT3BlblRocmVhZDoKKworKiAqKlVuaXgqKiDigJQgW2B3cGFudHVuZGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL3dwYW50dW5kKSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gYW4gTkNQCisqICoqV2luZG93cyAxMCoqIOKAlCBbdW5pdmVyc2FsIGRyaXZlcnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvd2lraS9PcGVuVGhyZWFkLW9uJUMyJUEwV2luZG93cykgdG8gaW50ZXJmYWNlIHdpdGggZGV2aWNlcyBydW5uaW5nIE9wZW5UaHJlYWQKKworIyMjIFBvcnRpbmcKKworSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHBvcnRpbmcgT3BlblRocmVhZCB0byBhIG5ldyBwbGF0Zm9ybSwgc2VlIHRoZSBbUG9ydGluZyBHdWlkZV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpL1BvcnRpbmctR3VpZGUpIGZvciBoYXJkd2FyZSByZXF1aXJlbWVudHMgYW5kIGRldGFpbGVkIHBvcnRpbmcgaW5zdHJ1Y3Rpb25zLgorCisjIyMgQm9yZGVyIFJvdXRlcgorCitBIEJvcmRlciBSb3V0ZXIgY29ubmVjdHMgYSBUaHJlYWQgbmV0d29yayB0byBuZXR3b3JrcyBhdCBkaWZmZXJlbnQgbGF5ZXJzLCBzdWNoIGFzIFdpRmkgb3IgRXRoZXJuZXQuIFtPcGVuVGhyZWFkIEJvcmRlciBSb3V0ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL2JvcmRlcnJvdXRlcikgcHJvdmlkZXMgZW5kLXRvLWVuZCBJUCB2aWEgcm91dGluZyBiZXR3ZWVuIFRocmVhZCBkZXZpY2VzIGFuZCBvdGhlciBleHRlcm5hbCBJUCBuZXR3b3JrcywgYXMgd2VsbCBhcyBleHRlcm5hbCBUaHJlYWQgQ29tbWlzc2lvbmluZy4KKworIyBXaGF0IHRvb2xzIGFyZSBhdmFpbGFibGUgZm9yIHRlc3Rpbmc/CisKKyMjIyBDZXJ0aWZpY2F0aW9uIFRlc3RpbmcKKworQ2VydGlmaWNhdGlvbiB0ZXN0aW5nIGlzIGRvbmUgd2l0aCB0aGUgW0dSTCBUaHJlYWQgVGVzdCBIYXJuZXNzIHNvZnR3YXJlXShodHRwOi8vZ3Jhbml0ZXJpdmVybGFicy5jb20vdGhyZWFkLyksIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgdG8gVGhyZWFkIG1lbWJlciBjb21wYW5pZXMuCisKK0FkZGl0aW9uYWwgdG9vbHMgdGhhdCBleHRlbmQgdGhlIFRlc3QgSGFybmVzcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9wZW5UaHJlYWQgcHJvamVjdDoKKworKiBbVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC90cmVlL21hc3Rlci90b29scy9oYXJuZXNzLWF1dG9tYXRpb24pIOKAlCBhdXRvbWF0ZXMgdGhlIFRocmVhZCBUZXN0IEhhcm5lc3Mgc29mdHdhcmUKKyogW1RocmVhZCBIYXJuZXNzIFRIQ0kgZm9yIE9wZW5UaHJlYWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvdHJlZS9tYXN0ZXIvdG9vbHMvaGFybmVzcy10aGNpKSDigJQgYWxsb3dzIHRoZSBUaHJlYWQgVGVzdCBIYXJuZXNzIHRvIGNvbnRyb2wgT3BlblRocmVhZC1iYXNlZCByZWZlcmVuY2UgZGV2aWNlcyBkaXJlY3RseQorICAgICogQ0MyNTM4IGV4YW1wbGUgaW5jbHVkZWQgaW4gdGhlIEdSTCBUaHJlYWQgVGVzdCBIYXJkbmVzcyBzb2Z0d2FyZQorICAgICogTGlicmFyeSB2ZXJzaW9uIGNhbiBiZSBtb2RpZmllZCBieSBkZXZlbG9wZXJzIGZvciB1c2Ugb24gb3RoZXIgcGxhdGZvcm1zCisKKyMjIyBTbmlmZmVyCisKK09wZW5UaHJlYWQgYWxzbyBwcm92aWRlcyBhIFtzbmlmZmVyXShodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkL2Jsb2IvbWFzdGVyL3Rvb2xzL3NwaW5lbC1jbGkvU05JRkZFUi5tZCkgb24gdGhlIE5DUCBidWlsZC4gVGhlIHNuaWZmZXIgaXMgZXhwb3NlZCBieSB0aGUgU3BpbmVsIHByb3RvY29sIGFuZCBmZWF0dXJlczoKKworKiBNb25pdG9yIG1vZGUg4oCUIGNhcHR1cmUgcGFja2V0cyBkdXJpbmcgb3BlcmF0aW9uCisqIFByb21pc2N1b3VzIG1vZGUg4oCUIGRlZGljYXRlZCBzbmlmZmVyCisqIEhvc3Qtc2lkZSBzdXBwb3J0IOKAlCBgd3BhbnR1bmRgCisqIHBjYXAgc3RyZWFtIG91dHB1dAorCisjIE5lZWQgaGVscD8KKworIyMjIFdpa2kKKworRXhwbG9yZSB0aGUgW09wZW5UaHJlYWQgV2lraV0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC93aWtpKSBmb3IgbW9yZSBpbi1kZXB0aCBkb2N1bWVudGF0aW9uIG9uIGJ1aWxkaW5nLCB0ZXN0aW5nLCBhdXRvbWF0aW9uIGFuZCB0b29scy4KKworIyMjIEludGVyYWN0CisKK1RoZXJlIGFyZSBudW1lcm91cyBhdmVudWVzIGZvciBPcGVuVGhyZWFkIHN1cHBvcnQ6CisKKyogQnVncyBhbmQgZmVhdHVyZSByZXF1ZXN0cyDigJQgW3N1Ym1pdCB0byB0aGUgSXNzdWUgVHJhY2tlcl0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9pc3N1ZXMpCisqIFN0YWNrIE92ZXJmbG93IOKAlCBbcG9zdCBxdWVzdGlvbnMgdXNpbmcgdGhlIGBvcGVudGhyZWFkYCB0YWddKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvdGFnZ2VkL29wZW50aHJlYWQpCisqIEdvb2dsZSBHcm91cHMg4oCUIGRpc2N1c3Npb24gYW5kIGFubm91bmNlbWVudHMKKyAgICAqIFtvcGVudGhyZWFkLWFubm91bmNlXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vb3BlbnRocmVhZC1hbm5vdW5jZSkg4oCUIHJlbGVhc2Ugbm90ZXMgYW5kIG5ldyB1cGRhdGVzIG9uIE9wZW5UaHJlYWQKKyAgICAqIFtvcGVudGhyZWFkLXVzZXJzXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vb3BlbnRocmVhZC11c2Vycykg4oCUIHRoZSBiZXN0IHBsYWNlIGZvciB1c2VycyB0byBkaXNjdXNzIE9wZW5UaHJlYWQgYW5kIGludGVyYWN0IHdpdGggdGhlIE9wZW5UaHJlYWQgdGVhbQorCisjIyMgRGlyZWN0b3J5IFN0cnVjdHVyZQorCitUaGUgT3BlblRocmVhZCByZXBvc2l0b3J5IGlzIHN0cnVjdHVyZWQgYXMgZm9sbG93czoKKworRm9sZGVyICAgfCBDb250ZW50cworLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYGRvY2AgICAgICAgICB8IFNwaW5lbCBkb2NzIGFuZCBEb3h5Z2VuIGJ1aWxkIGZpbGUKK2BldGNgICAgICAgICAgfCBDb25maWd1cmF0aW9uIGZpbGVzIGZvciBvdGhlciBidWlsZCBzeXN0ZW1zIChlLmcuIFZpc3VhbCBTdHVkaW8pCitgZXhhbXBsZXNgICAgIHwgU2FtcGxlIGFwcGxpY2F0aW9ucyBhbmQgcGxhdGZvcm1zIGRlbW9uc3RyYXRpbmcgT3BlblRocmVhZAorYGluY2x1ZGVgICAgICB8IFB1YmxpYyBBUEkgaGVhZGVyIGZpbGVzCitgc3JjYCAgICAgICAgIHwgQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGhyZWFkIHN0YW5kYXJkIGFuZCByZWxhdGVkIGFkZC1vbnMKK2B0ZXN0c2AgICAgICAgfCBVbml0IGFuZCBUaHJlYWQgY29uZm9ybWFuY2UgdGVzdHMKK2B0aGlyZF9wYXJ0eWAgfCBUaGlyZC1wYXJ0eSBjb2RlIHVzZWQgYnkgT3BlblRocmVhZAorYHRvb2xzYCAgICAgICB8IEhlbHBmdWwgdXRpbGl0aWVzIHJlbGF0ZWQgdG8gdGhlIE9wZW5UaHJlYWQgcHJvamVjdAorCisKKyMgV2FudCB0byBjb250cmlidXRlPworCitXZSB3b3VsZCBsb3ZlIGZvciB5b3UgdG8gY29udHJpYnV0ZSB0byBPcGVuVGhyZWFkIGFuZCBoZWxwIG1ha2UgaXQgZXZlbiBiZXR0ZXIgdGhhbiBpdCBpcyB0b2RheSEgU2VlIHRoZSBbYENPTlRSSUJVVElORy5tZGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kKSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIFZlcnNpb25pbmcKKworT3BlblRocmVhZCBmb2xsb3dzIHRoZSBbU2VtYW50aWMgVmVyc2lvbmluZyBndWlkZWxpbmVzXShodHRwOi8vc2VtdmVyLm9yZy8pIGZvciByZWxlYXNlIGN5Y2xlIHRyYW5zcGFyZW5jeSBhbmQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIE9wZW5UaHJlYWQncyB2ZXJzaW9uaW5nIGlzIGluZGVwZW5kZW50IG9mIHRoZSBUaHJlYWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGJ1dCB3aWxsIGNsZWFybHkgaW5kaWNhdGUgd2hpY2ggdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbiBpdCBjdXJyZW50bHkgc3VwcG9ydHMuCisKKyMgTGljZW5zZQorCitPcGVuVGhyZWFkIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbQlNEIDMtQ2xhdXNlIGxpY2Vuc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvTElDRU5TRSkuIFNlZSB0aGUgW2BMSUNFTlNFYF0oaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9ibG9iL21hc3Rlci9MSUNFTlNFKSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgCisgIAorUGxlYXNlIG9ubHkgdXNlIHRoZSBPcGVuVGhyZWFkIG5hbWUgYW5kIG1hcmtzIHdoZW4gYWNjdXJhdGVseSByZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi4gRG8gbm90IHVzZSB0aGUgbWFya3MgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyB5b3UgYXJlIGVuZG9yc2VkIGJ5IG9yIG90aGVyd2lzZSBhZmZpbGlhdGVkIHdpdGggTmVzdCwgR29vZ2xlLCBvciBUaGUgVGhyZWFkIEdyb3VwLgpkaWZmIC0tZ2l0IGEvU1RZTEVfR1VJREUubWQgYi9TVFlMRV9HVUlERS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EzNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvU1RZTEVfR1VJREUubWQKQEAgLTAsMCArMSwxODIgQEAKKyMgT3BlblRocmVhZCBDb2RpbmcgQ29udmVudGlvbnMgYW5kIFN0eWxlCisKKyogWzEgQyBhbmQgQysrXSgjYy1hbmQtYykKKyAgKiBbMS4xIFN0YW5kYXJkc10oI3N0YW5kYXJkcykKKyAgKiBbMS4yIENvbnZlbnRpb25zIGFuZCBCZXN0IFByYWN0aWNlc10oI2NvbnZlbnRpb25zLWFuZC1iZXN0LXByYWN0aWNlcykKKyAgKiBbMS4zIFRpZ2h0bHktY29uc3RyYWluZWQgU3lzdGVtcyBhbmQgU2hhcmVkIEluZnJhc3RydWN0dXJlXSgjdGlnaHRseS1jb25zdHJhaW5lZC1zeXN0ZW1zLWFuZC1zaGFyZWQtaW5mcmFzdHJ1Y3R1cmUpCisgICogWzEuNCBGb3JtYXQgYW5kIFN0eWxlXSgjZm9ybWF0LWFuZC1zdHlsZSkKKyAgKiBbMS41IENvbW1lbnRzXSgjY29tbWVudHMpCisqIFsyIFB5dGhvbl0oI3B5dGhvbikKKyAgKiBbMi4xIFN0YW5kYXJkc10oI3N0YW5kYXJkcykKKyAgKiBbMi4yIENvbnZlbnRpb25zIGFuZCBCZXN0IFByYWN0aWNlc10oI2NvbnZlbnRpb25zLWFuZC1iZXN0LXByYWN0aWNlcykKKyAgKiBbMi4zIEZvcm1hdCBhbmQgU3R5bGVdKCNmb3JtYXQtYW5kLXN0eWxlKQorCisjIEMgYW5kIEMrKworCisjIyBTdGFuZGFyZHMKKworLSBDCisgIC0gT3BlblRocmVhZCB1c2VzIGFuZCBlbmZvcmNlcyB0aGUgSVNPOTg5OToxOTk5IChha2EgSVNPIEM5OSwgQzk5KSBDIGxhbmd1YWdlIHN0YW5kYXJkIGFzIHRoZSBtaW5pbXVtLgorLSBDKysKKyAgLSBPcGVuVGhyZWFkIHVzZXMgYW5kIGVuZm9yY2VzIHRoZSBJU08xNDg4MjoyMDAzIChha2EgSVNPIEMrKzAzLCBDKyswMykgQysrIGxhbmd1YWdlIHN0YW5kYXJkIGFzIHRoZSBtaW5pbXVtLgorLSBFeHRlbnNpb25zCisgIC0gV2hlcmV2ZXIgcG9zc2libGUsIHRvb2xjaGFpbi1zcGVjaWZpYyAoZS5nIEdDQy9HTlUpIGV4dGVuc2lvbnMgb3IgdGhlIHVzZSBvZiBsYXRlciBzdGFuZGFyZHMgc2hhbGwgYmUgYXZvaWRlZCBvciBzaGFsbCBiZSBsZXZlcmFnZWQgdGhyb3VnaCB0b29sY2hhaW4tY29tcGF0aWJpbGl0eSBwcmVwcm9jZXNzb3IgbWFjcm9zLgorCisjIyBDb252ZW50aW9ucyBhbmQgQmVzdCBQcmFjdGljZXMKKworIyMjIExhbmd1YWdlIEluZGVwZW5kZW50CisKKy0gSW5saW5lIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBqdWRpY2lvdXNseS4KKyAgLSBUaGUgdXNlIG9mIGNvZGUgaW4gaGVhZGVycyBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgdXNlIG9mIHRoZSBub24tbG9jYWwgc2NvcGUgaW5saW5lIGZ1bmN0aW9ucyBzaG91bGQgYmUgYXZvaWRlZC4gIEV4Y2VwdGlvbjogU2ltcGxlIHNldHRlcnMgYW5kIGdldHRlcnMgYXJlIGZpbmUgc2luY2UgdGhlIGNvbXBpbGVyIGNhbiBlZmZpY2llbnRseSBvcHRpbWl6ZSB0aGVzZSBhbmQgbWFrZSB0aGVpciBvdmVyaGVhZCBhcyBsb3cgYXMgYSBkaXJlY3QgZGF0YSBtZW1iZXIgYWNjZXNzLgorLSBSZXR1cm4gU3RhdGVtZW50cworICAtIFRoZXJlIHNob3VsZCBiZSBvbmUgcmV0dXJuIHN0YXRlbWVudCBwZXIgZnJlZSBmdW5jdGlvbiBvciBtZXRob2QgYXQgdGhlIGVuZCBvZiB0aGUgZnJlZSBmdW5jdGlvbiBvciBtZXRob2QuCistIE5vbi1sb2NhbCBHb3RvCisgIC0gVGhlcmUgc2hvdWxkIGJlIG5vIGNhbGxzIHRvIHRoZSBmdW5jdGlvbnMgYHNldGptcGAgb3IgYGxvbmdqbXBgLgorLSBMb2NhbCBHb3RvCisgIC0gVGhlcmUgc2hvdWxkIGJlIG5vIGNhbGxzIHRvIHRoZSBDL0MrKyBrZXl3b3JkIGdvdG8uICBFeGNlcHRpb246IFRoZSB1c2Ugb2YgbG9jYWwgZ290b3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBjb21tb24gZXJyb3IgaGFuZGxpbmcgYmxvY2tzIGFuZCBzaW5nbGUgcG9pbnRzIG9mIGZ1bmN0aW9uIHJldHVybiBhdCB0aGUgYm90dG9tIG9mIGEgZnVuY3Rpb24uCistIEMgUHJlcHJvY2Vzc29yCisgIC0gVXNlIG9mIHRoZSBDIHByZXByb2Nlc3NvciBzaG91bGQgYmUgbGltaXRlZCB0byBmaWxlIGluY2x1c2lvbiBhbmQgc2ltcGxlIG1hY3Jvcy4KKyAgLSBNYWNyb3Mgc2hhbGwgbm90IGJlIGRlZmluZWQgd2l0aGluIGEgZnVuY3Rpb24gb3IgYSBibG9jayBhbmQgc2hvdWxkIGJlIGRlZmluZWQgYXQgdGhlIHRvcCBvZiBhIGZpbGUuCisgIC0gQWxsIGAjZWxzZWAsIGAjZWxpZmAsIGFuZCBgI2VuZGlmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBzaGFsbCByZXNpZGUgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlIHRvIHdoaWNoIHRoZXkgYXJlIHJlbGF0ZWQuCisgIC0gQWxsIGAjZW5kaWZgIGRpcmVjdGl2ZXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDIwIGxpbmVzIGF3YXkgZnJvbSB0aGUgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlIHRvIHdoaWNoIHRoZXkgYXJlIHJlbGF0ZWQgc2hhbGwgYmUgZGVjb3JhdGVkIGJ5IGxhbmd1YWdlIGNvbW1lbnQgaW5kaWNhdGluZyB0aGUgY29uZGl0aW9uYWwgdGhleSBhcmUgYXNzb2NpYXRlZCB3aXRoLgorICAtIFByZXByb2Nlc3NvciBgI2luY2x1ZGVgIGRpcmVjdGl2ZXMgaW4gYSBmaWxlIHNoYWxsIG9ubHkgYmUgcHJlY2VkZWQgYnkgb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgb3IgY29tbWVudHMuCisgIC0gUHJlcHJvY2Vzc29yIGAjaW5jbHVkZWAgZGlyZWN0aXZlcyBzaGFsbCB1c2UgYnJhY2UgKOKAnDzigJ0pIGFuZCAo4oCcPuKAnSkgc3R5bGUgZm9yIGFsbCBwdWJsaWMgaGVhZGVycywgaW5jbHVkaW5nIEMgYW5kIEMrKyBzdGFuZGFyZCBsaWJyYXJ5LCBvciBvdGhlciBmaXJzdC0gYW5kIHRoaXJkLXBhcnR5IHB1YmxpYyBsaWJyYXJ5IGhlYWRlcnMuCisgIC0gUHJlcHJvY2Vzc29yIGAjaW5jbHVkZWAgZGlyZWN0aXZlcyBzaG91bGQgdXNlIGRvdWJsZSBxdW90ZSAo4oCY4oCc4oCYKSBhbmQgKOKAmOKAnOKAmCkgc3R5bGUgZm9yIGFsbCBwcml2YXRlIG9yIHJlbGF0aXZlIGhlYWRlcnMuCisgIC0gUHJlcHJvY2Vzc29yIGAjaW5jbHVkZWAgZGlyZWN0aXZlcyBzaG91bGQgYmUgZ3JvdXBlZCwgb3JkZXJlZCwgb3Igc29ydGVkIGFzIGZvbGxvd3M6CisgICAgLSBUaGlzIGNvbXBpbGF0aW9uIHVuaXQncyBjb3JyZXNwb25kaW5nIGhlYWRlciwgaWYgYW55LgorICAgIC0gQysrIFN0YW5kYXJkIExpYnJhcnkgaGVhZGVycworICAgIC0gQyBTdGFuZGFyZCBMaWJyYXJ5IGhlYWRlcnMKKyAgICAtIFRoaXJkLXBhcnR5IGxpYnJhcnkgaGVhZGVycworICAgIC0gRmlyc3QtcGFydHkgbGlicmFyeSBoZWFkZXJzCisgICAgLSBQcml2YXRlIG9yIGxvY2FsIGhlYWRlcnMKKyAgICAtIEFscGhhbnVtZXJpYyBvcmRlciB3aXRoaW4gZWFjaCBzdWJncm91cAorICAtIFRoZSBwcmVwcm9jZXNzb3Igc2hhbGwgbm90IGJlIHVzZWQgdG8gcmVkZWZpbmUgcmVzZXJ2ZWQgbGFuZ3VhZ2Uga2V5d29yZHMuCisgIC0gVW51c2VkIGNvZGUgc2hhbGwgbm90IGJlIGRpc2FibGVkIGJ5IGNvbW1lbnRpbmcgaXQgb3V0IHdpdGggQy0gb3IgQysrLXN0eWxlIGNvbW1lbnRzIG9yIHdpdGggcHJlcHJvY2Vzc29yIGAjaWYgMCAuLi4gI2VuZGlmYCBzZW1hbnRpY3MuCisgIC0gVXNlIG9mIHRoZSBwcmVwcm9jZXNzb3IgdG9rZW4gY29uY2F0ZW5hdGlvbiBvcGVyYXRvciAnIyMnIHNob3VsZCBiZSBhdm9pZGVkLgorICAtIFRoZSBgdW5kZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc2hvdWxkIGJlIGF2b2lkZWQgYW5kIHNoYWxsIG5ldmVyIGJlIHVzZWQgdG8gdW5kZWZpbmUgYSBzeW1ib2wgZnJvbSBhIGZvcmVpZ24gbW9kdWxlLgorLSBPYmplY3QgU2NvcGUKKyAgLSBEYXRhIG9iamVjdHMgc2hhbGwgYmUgZGVjbGFyZWQgYXQgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGxldmVsIG9mIHNjb3BlLgorICAtIE5vIGRlY2xhcmF0aW9uIGluIGFuIGlubmVyIHNjb3BlIHNoYWxsIGhpZGUgb3Igc2hhZG93IGEgZGVjbGFyYXRpb24gaW4gYW4gb3V0ZXIgc2NvcGUuIENvbXBpbGVyIGZsYWdzIHNoYWxsIGJlIHNldCB0byBmbGFnIGFuZCBlbmZvcmNlIHRoaXMuCistIFVuYm91bmRlZCBSZWN1cnNpb24KKyAgLSBUaGVyZSBzaGFsbCBiZSBubyBkaXJlY3Qgb3IgaW5kaXJlY3QgdXNlIG9mIHVuYm91bmRlZCByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMuCistIFN5bW1ldHJpYyBBUElzCisgIC0gV2hlcmV2ZXIgcG9zc2libGUgYW5kIGFwcHJvcHJpYXRlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBtYW5hZ2VtZW50IG9mIHJlc291cmNlcywgQVBJcyBzaG91bGQgYmUgc3ltbWV0cmljLiAgRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGlzIGEgZnJlZSBmdW5jdGlvbiBvciBvYmplY3QgbWV0aG9kIHRoYXQgYWxsb2NhdGVzIGEgcmVzb3VyY2UsIHRoZW4gdGhlcmUgc2hvdWxkIGJlIG9uZSB0aGF0IGRlYWxsb2NhdGVzIGl0LiBJZiB0aGVyZSBpcyBhIGZyZWUgZnVuY3Rpb24gb3Igb2JqZWN0IG1ldGhvZCB0aGF0IG9wZW5zIGEgZmlsZSBvciBuZXR3b3JrIHN0cmVhbSwgdGhlbiB0aGVyZSBzaG91bGQgYmUgb25lIHRoYXQgY2xvc2VzIGl0LgorLSBVc2UgQyBzdGRpbnQuaCBvciBDKysgY3N0ZGludCBmb3IgUGxhaW4gT2xkIERhdGEgVHlwZXMKKyAgLSBTdGFuZGFyZCwgc2NhbGFyIGRhdGEgdHlwZXMgZGVmaW5lZCBpbiBzdGRpbnQuaCAoQykgb3IgY3N0ZGludCAoQysrKSBzaG91bGQgYmUgdXNlZCBmb3IgYmFzaWMgc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGVzLCBlc3BlY2lhbGx5IHdoZW4gc2l6ZSBhbmQgc2VyaWFsaXphdGlvbiB0byBub24tdm9sYXRpbGUgc3RvcmFnZSBvciBhY3Jvc3MgYSBuZXR3b3JrIGlzIGNvbmNlcm5lZC4gIEV4YW1wbGVzIG9mIHRoZXNlIGFyZTogYHVpbnQ4X3RgLCBgaW50OF90YCwgZXRjLgorLSBDb25zdGFudCBRdWFsaWZpZXJzCisgIC0gUmVhZC1vbmx5IG1ldGhvZHMsIGdsb2JhbCB2YXJpYWJsZXMsIHN0YWNrIHZhcmlhYmxlcywgb3IgZGF0YSBtZW1iZXJzIGFyZSByZWFkLW9ubHkgc2hvdWxkIGJlIHF1YWxpZmllZCB1c2luZyB0aGUgQyBvciBDKysgYGNvbnN0YCBxdWFsaWZpZXIuCisgIC0gUG9pbnRlcnMgb3IgcmVmZXJlbmNlcyB0byByZWFkLW9ubHkgb2JqZWN0cyBvciBzdG9yYWdlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIHNob3VsZCBiZSBxdWFsaWZpZWQgdXNpbmcgdGhlIEMgb3IgQysrIGBjb25zdGAgcXVhbGlmaWVyLgorLSBIZWFkZXIgSW5jbHVkZSBHdWFyZAorICAtIEFsbCBDIGFuZCBDKysgaGVhZGVycyBzaGFsbCB1c2UgcHJlcHJvY2Vzc29yIGhlYWRlciBpbmNsdWRlIGd1YXJkcy4KKyAgLSBUaGUgdGVybWluYXRpbmcgZW5kaWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzaGFsbCBoYXZlIGEgY29tbWVudCwgQyBvciBDKysgZGVwZW5kaW5nIG9uIHRoZSBoZWFkZXIgdHlwZSwgY29udGFpbmluZyB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCBpbnRyb2R1Y2VkIGJ5IHRoZSBpZm5kZWYgZGlyZWN0aXZlIHN0YXJ0aW5nIHRoZSBndWFyZC4KKyAgLSBUaGUgc3ltYm9sIHVzZWQgZm9yIHRoZSBndWFyZCBzaG91bGQgYmUgdGhlIGZpbGUgbmFtZSwgY29udmVydGVkIHRvIGFsbCB1cHBlcmNhc2UsIHdpdGggYW55IHNwYWNlcyAo4oCcIOKAnCkgb3IgZG90cyAo4oCcLuKAnSkgY29udmVydGVkIHRvIHVuZGVyc2NvcmVzICjigJxf4oCdKS4KKy0gRnVuY3Rpb24gYW5kIE1ldGhvZCBQcm90b3R5cGVzCisgIC0gQWxsIHZvaWQgZnVuY3Rpb25zIG9yIG1ldGhvZHMgc2hhbGwgZXhwbGljaXRseSBkZWNsYXJlIGFuZCBzcGVjaWZ5IHRoZSB2b2lkIHR5cGUga2V5d29yZC4KKworIyMjIEMKKworLSBDIC8gQysrIExpbmthZ2UgV3JhcHBlcnMKKyAgLSBBbGwgaGVhZGVyIGZpbGVzIGludGVuZGVkIHRvIGhhdmUgQyBzeW1ib2wgbGlua2FnZSBzaGFsbCB1c2Ug4oCcZXh0ZXJuIEPigJ0gbGlua2FnZSB3cmFwcGVycy4KKworIyMjIEMrKworCistIFByZWZlciBQYXNzaW5nIFBhcmFtZXRlcnMgYnkgUmVmZXJlbmNlIHRvIFBvaW50ZXIKKyAgLSBVbmxpa2UgQywgQysrIG9mZmVycyBhbiBhbHRlcm5hdGUgd2F5IHRvIGFsaWFzIGRhdGEgb3ZlciBhbmQgYWJvdmUgYSBwb2ludGVyLCB0aGUgcmVmZXJlbmNlLCBpbmRpY2F0ZWQgYnkgdGhlICYgc3ltYm9sLiAgV2hlcmUgYXBwcm9wcmlhdGUsIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlIHByZWZlcnJlZCB0byB0aGUgcG9pbnRlci4KKy0gUGFzc2luZyBCYXNlIFNjYWxhcnMKKyAgLSBTaXplLSBhbmQgY2FsbCBmcmVxdWVuY3ktYmFzZWQgY29uc2lkZXJhdGlvbnMgc2hvdWxkIGJlIG1hZGUgd2hlbiBwYXNzaW5nIHNjYWxhcnMgYXMgdG8gd2hldGhlciB0aGV5IHNob3VsZCBiZSBwYXNzZWQgYnkgdmFsdWUgb3IgYnkgY29uc3RhbnQgcmVmZXJlbmNlOyBob3dldmVyLCBwYXNzLWJ5LXZhbHVlIHNob3VsZCBnZW5lcmFsbHkgYmUgcHJlZmVycmVkLgorLSBFbGltaW5hdGUgVW5uZWNlc3NhcnkgRGVzdHJ1Y3RvcnMKKyAgLSBUaGUgY3JlYXRpb24gb2YgZW1wdHkgb3IgdXNlbGVzcyBkZXN0cnVjdG9ycyBzaG91bGQgYmUgYXZvaWRlZC4gIEVtcHR5IG9yIHVzZWxlc3MgZGVzdHJ1Y3RvcnMgc2hvdWxkIGJlIHJlbW92ZWQuCistIERlZmF1bHQgUGFyYW1ldGVycworICAtIFdoZW4geW91IGRlY2xhcmUgQysrIGZyZWUgZnVuY3Rpb25zIGFuZCBvYmplY3QgbWV0aG9kcywgeW91IHNob3VsZCBhdm9pZCBvciBtaW5pbWl6ZSB1c2luZyBkZWZhdWx0IHBhcmFtZXRlcnMuCisgIC0gV2hlbiB5b3UgZGVjbGFyZSBDKysgdmlydHVhbCBvYmplY3QgbWV0aG9kcywgeW91IHNoYWxsIGF2b2lkIHVzaW5nIGRlZmF1bHQgcGFyYW1ldGVycy4KKy0gR2xvYmFsIGFuZCBTY29wZWQgU3RhdGljIENvbnN0cnVjdGlvbgorICAtIFRoZXJlIHNoYWxsIGJlIG5vIHVzZSBvZiBnbG9iYWwsIHN0YXRpYyBvciBvdGhlcndpc2UsIG9iamVjdCBjb25zdHJ1Y3Rpb24uICBUaGUgdXNlIG9mIHNjb3BlZCBzdGF0aWMgb2JqZWN0IGNvbnN0cnVjdGlvbiBzaG91bGQgYmUgYXZvaWRlZC4KKy0gQysrLXN0eWxlIENhc3RzCisgIC0gV2hlcmV2ZXIgcG9zc2libGUgYW5kIHByYWN0aWNhbCwgQysrIHN0eWxlIGNhc3RzIHNob3VsZCBiZSB1c2VkIGFuZCBwcmVmZXJyZWQgdG8gdGhlIEMgc3R5bGUgY2FzdCBlcXVpdmFsZW50LgorLSBBdm9pZCBgdXNpbmcgbmFtZXNwYWNlYCBTdGF0ZW1lbnRzIGluIEhlYWRlcnMKKyAgLSBUaGUgQysrIGB1c2luZyBuYW1lc3BhY2VgIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiBvYmplY3Qgc2NvcGUgaW5zaWRlIGhlYWRlciBmaWxlcy4KKworIyMgVGlnaHRseS1jb25zdHJhaW5lZCBTeXN0ZW1zIGFuZCBTaGFyZWQgSW5mcmFzdHJ1Y3R1cmUKKworLSBIZWFwLWJhc2VkIHJlc291cmNlIGFsbG9jYXRpb24gc2hvdWxkIGJlIGF2b2lkZWQuCistIFRoZXJlIHNoYWxsIGJlIG5vIGRpcmVjdCBvciBpbmRpcmVjdCB1c2Ugb2YgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzLgorLSBUaGUgdXNlIG9mIHZpcnR1YWwgZnVuY3Rpb25zIHNob3VsZCBiZSBhdm9pZGVkLgorLSBUaGUgdXNlIG9mIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeSBzaGFsbCBiZSBhdm9pZGVkLgorLSBUaGUgdXNlIG9mIHRoZSBDKysgU3RhbmRhcmQgVGVtcGxhdGUgTGlicmFyeSAoU1RMKSBzaG91bGQgYmUgYXZvaWRlZCBvciBtaW5pbWl6ZWQuCistIFRoZSB1c2Ugb2YgdGhlIEMrKyB0ZW1wbGF0ZXMgc2hvdWxkIGJlIGF2b2lkZWQgb3IgbWluaW1pemVkLgorLSBDb2RlIHNoYWxsIG5vdCB1c2UgZXhjZXB0aW9ucy4KKy0gQ29kZSBzaGFsbCBub3QgdXNlIEMrKyBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gKFJUVEkpLCBpbmNsdWRpbmcgZmFjaWxpdGllcyB0aGF0IHJlbHkgdXBvbiBpdCwgc3VjaCBhcyBgZHluYW1pY19jYXN0YCBhbmQgYHR5cGVpZGAuCisKKyMjIEZvcm1hdCBhbmQgU3R5bGUKKworLSBPcGVuVGhyZWFkIHVzZXMgdGhlIGBtYWtlIHByZXR0eWAgYnVpbGQgdGFyZ2V0IHRvIHJlZm9ybWF0IGNvZGUgYW5kIGVuZm9yY2UgY29kZSBmb3JtYXQgYW5kIHN0eWxlLiAgVGhlIGBtYWtlIHByZXR0eS1jaGVja2AgYnVpbGQgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIE9wZW5UaHJlYWQncyBjb250aW51b3VzIGludGVncmF0aW9uIGFuZCBtdXN0IHBhc3MgYmVmb3JlIGEgcHVsbCByZXF1ZXN0IGlzIG1lcmdlZC4KKworIyMjIEZpbGUgTmFtZXMKKy0gRmlsZSBuYW1lcyBzaG91bGQgbWF0Y2ggdGhlIG5hbWVzIGFuZCB0eXBlcyBvZiB3aGF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZS4gIElmIGEgZmlsZSBjb250YWlucyBtYW55IGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMsIHRoZSBhdXRob3Igc2hvdWxkIGNob29zZSB0aGUgb25lIHRoYXQgcHJlZG9taW5hbnRseSBkZXNjcmliZXMgb3IgdGhhdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KKy0gRmlsZSBjb250ZW50cyBhbmQgbmFtZXMgc2hvdWxkIGJlIGxpbWl0ZWQgaW4gdGhlIHNjb3BlIG9mIHdoYXQgdGhleSBjb250YWluLiBJdCBtYXkgYWxzbyBiZSBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIHRvbyBtdWNoIHN0dWZmIGluIG9uZSBmaWxlIGFuZCB5b3UgbmVlZCB0byBicmVhayBpdCB1cCBpbnRvIG11bHRpcGxlIGZpbGVzLgorLSBGaWxlIG5hbWVzIHNob3VsZCBiZSBhbGwgbG93ZXIgY2FzZS4KKy0gRmlsZSBleHRlbnNpb25zIHNoYWxsIGJlIGluZGljYXRpdmUgYW5kIGFwcHJvcHJpYXRlIGZvciB0aGUgdHlwZSBhbmQgdXNhZ2Ugb2YgdGhlIHNvdXJjZSBvciBoZWFkZXIgZmlsZS4KKworIyMjIE5hbWluZworLSBOYW1lcyBzaG91bGQgYmUgZGVzY3JpcHRpdmUgYnV0IG5vdCBvdmVybHkgc28gYW5kIHRoZXkgc2hvdWxkIGdpdmUgc29tZSBpZGVhIG9mIHNjb3BlIGFuZCBzaG91bGQgYmUgc2VsZWN0ZWQgc3VjaCB0aGF0ICp3cm9uZyBjb2RlIGxvb2tzIHdyb25nKi4KKy0gTmFtZXMgc2hhbGwgbm90IGdpdmUgYW55IGlkZWEgb2YgdHlwZSwgc3VjaCBhcyBpcyBkb25lIHdpdGggU3lzdGVtIEh1bmdhcmlhbiBub3RhdGlvbi4KKy0gQ2FzZQorICAtIEMgcHJlcHJvY2Vzc29yIHN5bWJvbHMgc2hvdWxkIGJlIGFsbCB1cHBlcmNhc2UuCisgIC0gQWxsIE9wZW5UaHJlYWQgbmFtZXMgaW4gdGhlIEMgbGFuZ3VhZ2Ugc2hhbGwgYmUgaW4gKnNuYWtlIGNhc2UqLgorICAtIEFsbCBPcGVuVGhyZWFkIGNsYXNzLCBuYW1lc3BhY2UsIHN0cnVjdHVyZSwgbWV0aG9kLCBmdW5jdGlvbiwgZW51bWVyYXRpb24sIGFuZCB0eXBlIG5hbWVzIGluIHRoZSBDKysgbGFuZ3VhZ2Ugc2hhbGwgYmUgaW4gKnVwcGVyIGNhbWVsIGNhc2UqLiAgRXhjZXB0aW9uOiB0aGUgdG9wIGxldmVsIE9wZW5UaHJlYWQgbmFtZXNwYWNlICdvdCcuCisgIC0gQWxsIE9wZW5UaHJlYWQgaW5zdGFudGlhdGVkIG5hbWVzIG9mIGluc3RhbmNlcyBvZiBjbGFzc2VzLCBuYW1lc3BhY2VzLCBzdHJ1Y3R1cmVzLCBtZXRob2RzLCBmdW5jdGlvbnMsIGVudW1lcmF0aW9ucywgYW5kIHR5cGVzIGFzIHdlbGwgYXMgbWV0aG9kIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBDKysgbGFuZ3VhZ2Ugc2hhbGwgYmUgaW4gKmxvd2VyIGNhbWVsIGNhc2UqLgorLSBTeW1ib2wgUXVhbGlmaWNhdGlvbgorICAtIEFsbCBPcGVuVGhyZWFkIEMgcHVibGljIGRhdGEgdHlwZXMgYW5kIGZyZWUgZnVuY3Rpb25zIHNob3VsZCBoYXZlIGBvdGAgcHJlcGVuZGVkIHRvIHRoZWlyIG5hbWUuCisgIC0gQWxsIE9wZW5UaHJlYWQgQysrIGNvZGUgc2hvdWxkIGJlIGluIHRoZSDigJhvdOKAmSB0b3AtbGV2ZWwgbmFtZXNwYWNlLgorLSBTY29wZQorICAtIEFsbCBnbG9iYWwgZGF0YSBzaGFsbCBoYXZlIGEgYGdgIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0byBkZW5vdGUgZ2xvYmFsIHNjb3BlLgorICAtIEFsbCBzdGF0aWMgZGF0YSBzaGFsbCBoYXZlIGEgYHNgIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0byBkZW5vdGUgc3RhdGljIHNjb3BlLgorICAtIEFsbCBjbGFzcyBvciBzdHJ1Y3R1cmUgZGF0YSBtZW1iZXJzIHNoYWxsIGhhdmUgYSBgbWAgcHJlcGVuZGVkIHRvIHRoZSBuYW1lIHRvIGRlbm90ZSBtZW1iZXIgc2NvcGUuCisgIC0gQWxsIGZyZWUgZnVuY3Rpb24gb3IgbWV0aG9kIHBhcmFtZXRlcnMgc2hvdWxkIGhhdmUgYW4gYGFgIHByZXBlbmRlZCB0byB0aGUgbmFtZSB0byBkZW5vdGUgZnVuY3Rpb24gcGFyYW1ldGVyIHNjb3BlLgorICAtIEFsbCB2YXJpYWJsZXMgdGhhdCBkbyBub3QgaGF2ZSBzdWNoIHByZWZpeGVzIHNoYWxsIGJlIGFzc3VtZWQgdG8gYmUgZnVuY3Rpb24gbG9jYWwgc2NvcGUuCisKKyMjIyBXaGl0ZSBTcGFjZQorLSBJbmRlbnRhdGlvbiBzaGFsbCBiZSA0IHNwYWNlIGNoYXJhY3RlcnMuCistIENvbmRpdGlvbmFscyBzaGFsbCBhbHdheXMgYXBwZWFyIG9uIGEgc2VwYXJhdGUgbGluZSBmcm9tIHRoZSBjb2RlIHRvIGV4ZWN1dGUgYXMgYSByZXN1bHQgb2YgdGhlIGNvbmRpdGlvbi4KKy0gU2NvcGVkIFZhcmlhYmxlIGRlY2xhcmF0aW9ucworICAtIEFsbCBzY29wZWQgKGkuZS4gc3RhY2spIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgcGxhY2VkIHRvZ2V0aGVyIGF0IHRoZSB0b3Agb2YgdGhlIGVuY2xvc2luZyBzY29wZSBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLgorICAtIFRoZXJlIHNoYWxsIGJlIGFuIGVtcHR5IGxpbmUgYWZ0ZXIgYWxsIHN1Y2ggdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAtIFRoZSBuYW1lcyBvZiBhbGwgdmFyaWFibGUgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBsZWZ0IGFsaWduZWQuCistIERhdGEgTWVtYmVyIGRlY2xhcmF0aW9ucworICAtIEFsbCBkYXRhIG1lbWJlciBkZWNsYXJhdGlvbnMgc2hvdWxkIGJlIHBsYWNlZCB0b2dldGhlci4KKyAgLSBUaGUgbmFtZXMgb2YgYWxsIGRhdGEgbWVtYmVyIGRlY2xhcmF0aW9ucyBzaG91bGQgYmUgbGVmdCBhbGlnbmVkLgorICAtIFRoZSBkYXRhIG1lbWJlciBkZWNsYXJhdGlvbnMgZm9yIEMrKyBjbGFzc2VzIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvciB0YWlsIG9mIHRoZSBjbGFzcy4KKy0gQnJhY2VzCisgIC0gQnJhY2VzIHNob3VsZCBnbyBvbiB0aGVpciBvd24gbGluZXMuCisgIC0gU3RhdGVtZW50cyBzaG91bGQgbmV2ZXIgYmUgb24gdGhlIHNhbWUgbGluZSBmb2xsb3dpbmcgYSBjbG9zaW5nIGJyYWNlLgorLSBLZXl3b3JkcworICAtIFRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBzcGFjZSBhZnRlciBsYW5ndWFnZS1yZXNlcnZlZCBrZXl3b3JkcyAoZm9yLCB3aGlsZSwgaWYsIGV0YykuCisKKyMjIENvbW1lbnRzCisKKy0gQWxsIGNvZGUgc2hvdWxkIHVzZSBEb3h5Z2VuIHRvOgorICAtIERldGFpbCB3aGF0IHRoZSB2YXJpb3VzIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzIGFyZSBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgY29udGV4dC4KKyAgLSBEZXRhaWwgd2hhdCB0aGUgdmFyaW91cyBDKysgbmFtZXNwYWNlcyBhcmUuCisgIC0gRGV0YWlsIHdoYXQgdGhlIGNvbnN0YW50cywgQyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGFuZCBlbnVtZXJhdGlvbnMgYXJlLgorICAtIERldGFpbCB3aGF0IHRoZSBnbG9iYWxzIGFyZSBhbmQgaG93IHRoZXkgYXJlIHRvIGJlIHVzZWQuCisgIC0gRGV0YWlsIHdoYXQgdGhlIGZyZWUgZnVuY3Rpb24gYW5kIG9iamVjdCAvIGNsYXNzIG1ldGhvZHMgYXJlIGFuZCBob3cgdGhleSBhcmUgdG8gYmUgdXNlZCwgd2hhdCB0aGVpciBwYXJhbWV0ZXJzIGFyZSwgYW5kIHdoYXQgdGhlaXIgcmV0dXJuIHZhbHVlcyBhcmUuCisgIC0gRGV0YWlsIGFueSBvdGhlciBpbXBvcnRhbnQgdGVjaG5pY2FsIGluZm9ybWF0aW9uIG9yIHRoZW9yeSBvZiBvcGVyYXRpb24gdW5pcXVlIGFuZCByZWxldmFudCB0byB0aGUgc3RhY2sgdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGNhcHR1cmVkIGluIGFyY2hpdGVjdHVyZSwgZGVzaWduLCBvciBwcm90b2NvbCBkb2N1bWVudGF0aW9uLgorLSBFdmVyeSBwdWJsaWMsIGFuZCBpZGVhbGx5IHByaXZhdGUsIGZyZWUgZnVuY3Rpb24gYW5kIGNsYXNzIG1ldGhvZCBzaG91bGQgbGlrZXdpc2UgaGF2ZSBhIHByb2xvZ3VlIGNvbW1lbnQgdGhhdDoKKyAgLSBCcmllZmx5IGRlc2NyaWJlcyB3aGF0IGl0IGlzIGFuZCB3aGF0IGl0IGRvZXMuCisgIC0gRGVzY3JpYmVzIGluIGRldGFpbCwgb3B0aW9uYWxseSwgd2hhdCBpdCBpcyBhbmQgd2hhdCBpdCBkb2VzLgorICAtIERlc2NyaWJlcyB0aGUgcHVycG9zZSwgZnVuY3Rpb24sIGFuZCBpbmZsdWVuY2Ugb2YgZWFjaCBwYXJhbWV0ZXIgYXMgd2VsbCBhcyB3aGV0aGVyIGl0IGlzIGFuIGlucHV0LCBhbiBvdXRwdXQsIG9yIGJvdGguCisgIC0gRGVzY3JpYmVzIHRoZSByZXR1cm4gdmFsdWUsIGlmIHByZXNlbnQsIGFuZCB0aGUgZXhwZWN0ZWQgcmFuZ2Ugb3IgY29uc3RyYWludHMgb2YgaXQuCisKKyMgUHl0aG9uCisKKyMjIFN0YW5kYXJkcworCistIE9wZW5UaHJlYWQgdXNlcyBhbmQgZW5mb3JlcyBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMy4gIFN1cHBvcnQgZm9yIFB5dGhvbiAyIGlzIGEgcmVzdWx0IG9mIHRoZSBmYWN0IHRoYXQgc29tZSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbnMgYW5kIE1hY3MgYXJlIHN0aWxsIHVzaW5nIDIueCBhcyBkZWZhdWx0LgorCisjIyBDb252ZW50aW9ucyBhbmQgQmVzdCBQcmFjdGljZXMKKworLSBSdW4gYHB5bGludGAgb3ZlciB5b3VyIGNvZGUuICBgcHlsaW50YCBpcyBhIHRvb2wgZm9yIGZpbmRpbmcgYnVncyBhbmQgc3R5bGUgcHJvYmxlbXMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLiBJdCBmaW5kcyBwcm9ibGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IGEgY29tcGlsZXIgZm9yIGxlc3MgZHluYW1pYyBsYW5ndWFnZXMgbGlrZSBDIGFuZCBDKysuIEJlY2F1c2Ugb2YgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIFB5dGhvbiwgc29tZSB3YXJuaW5ncyBtYXkgYmUgaW5jb3JyZWN0OyBob3dldmVyLCBzcHVyaW91cyB3YXJuaW5ncyBzaG91bGQgYmUgZmFpcmx5IGluZnJlcXVlbnQuCisKKyMjIEZvcm1hdCBhbmQgU3R5bGUKKworLSBBbGwgY29kZSBzaG91bGQgYWRoZXJlIHRvIFtQRVAgOF0oaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8pLgpkaWZmIC0tZ2l0IGEvYm9vdHN0cmFwIGIvYm9vdHN0cmFwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2ZjhlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ib290c3RyYXAKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyBhIHRyYW1wb2xpbmUgc2NyaXB0IHRvIHRoZSBubGJ1aWxkLWF1dG90b29scworIyAgICAgIGJvb3RzdHJhcCBzY3JpcHQgYW5kIGF1Z21lbnRzIGl0IGJ5IHByb3ZpZGluZyB0aGUgcGF0aCB0byB0aGUKKyMgICAgICBubGJ1aWxkLWF1dG90b29scyByZXBvc2l0b3J5IGZvciB0aGlzIHByb2plY3QuCisjCisKKyMgU2V0IHRoaXMgdG8gdGhlIHJlbGF0aXZlIGxvY2F0aW9uIG9mIG5sYnVpbGQtYXV0b3Rvb2xzIHRvIHRoaXMgc2NyaXB0CisKK25sYnVpbGRfYXV0b3Rvb2xzX3N0ZW09InRoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8iCisKKyMgRXN0YWJsaXNoIHNvbWUga2V5IGRpcmVjdG9yaWVzCisKK3NyY2Rpcj1gZGlybmFtZSAkezB9YAorYWJzX3NyY2Rpcj1gcHdkYAorYWJzX3RvcF9zcmNkaXI9IiR7YWJzX3NyY2Rpcn0iCisKK2V4ZWMgJHtzcmNkaXJ9LyR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX0vc2NyaXB0cy9ib290c3RyYXAgLUkgIiR7YWJzX3RvcF9zcmNkaXJ9LyR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX0iICQqCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0M2EyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDE0MzggQEAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKworIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisjCisjIERlY2xhcmUgYXV0b2NvbmYgdmVyc2lvbiByZXF1aXJlbWVudHMKKyMKK0FDX1BSRVJFUShbMi42OF0pCisKKyMKKyMgSW5pdGlhbGl6ZSBhdXRvY29uZiBmb3IgdGhlIHBhY2thZ2UKKyMKK0FDX0lOSVQoW09QRU5USFJFQURdLAorICAgICAgICBtNF9lc3lzY21kKFt0aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvbWt2ZXJzaW9uIC1iIGBjYXQgLmRlZmF1bHQtdmVyc2lvbmAgLl0pLAorICAgICAgICBbb3BlbnRocmVhZC1kZXZlbEBnb29nbGVncm91cHMuY29tXSwKKyAgICAgICAgW29wZW50aHJlYWRdLAorICAgICAgICBbaHR0cDovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC9vcGVudGhyZWFkXSkKKworIyBUZWxsIHRoZSByZXN0IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhlIGFic29sdXRlIHBhdGggd2hlcmUgdGhlCisjIG5sYnVpbGQtYXV0b3Rvb2xzIHJlcG9zaXRvcnkgaXMgcm9vdGVkIGF0LgorCitBQ19TVUJTVChubGJ1aWxkX2F1dG90b29sc19zdGVtLFt0aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvXSkKK0FDX1NVQlNUKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyLFtcJHthYnNfdG9wX3NyY2Rpcn0vXCR7bmxidWlsZF9hdXRvdG9vbHNfc3RlbX1dKQorCisjCisjIE9QRU5USFJFQUQgaW50ZXJmYWNlIGN1cnJlbnQsIHJldmlzaW9uLCBhbmQgYWdlIHZlcnNpb25zLgorIworIyBNYWludGFpbnRlcnM6IFBsZWFzZSBtYW5hZ2UgdGhlc2UgZmllbGRzIGFzIGZvbGxvd3M6CisjCisjICAgSW50ZXJmYWNlcyByZW1vdmVkOiAgICBDVVJSRU5UKyssIEFHRSA9IDAsIFJFVklTSU9OID0gMAorIyAgIEludGVyZmFjZXMgYWRkZWQ6ICAgICAgQ1VSUkVOVCsrLCBBR0UrKywgICBSRVZJU0lPTiA9IDAKKyMgICBObyBpbnRlcmZhY2VzIGNoYW5nZWQ6ICAgICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKworIworIworQUNfU1VCU1QoTElCT1BFTlRIUkVBRF9WRVJTSU9OX0NVUlJFTlQsICBbMF0pCitBQ19TVUJTVChMSUJPUEVOVEhSRUFEX1ZFUlNJT05fQUdFLCAgICAgIFs1XSkKK0FDX1NVQlNUKExJQk9QRU5USFJFQURfVkVSU0lPTl9SRVZJU0lPTiwgWzBdKQorQUNfU1VCU1QoTElCT1BFTlRIUkVBRF9WRVJTSU9OX0lORk8sICAgICBbJHtMSUJPUEVOVEhSRUFEX1ZFUlNJT05fQ1VSUkVOVH06JHtMSUJPUEVOVEhSRUFEX1ZFUlNJT05fUkVWSVNJT059OiR7TElCT1BFTlRIUkVBRF9WRVJTSU9OX0FHRX1dKQorCisjCisjIENoZWNrIHRoZSBzYW5pdHkgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYnkgY2hlY2tpbmcgZm9yIHRoZQorIyBwcmVzZW5jZSBvZiBhIGtleSB3YXRjaCBmaWxlCisjCitBQ19DT05GSUdfU1JDRElSKFtpbmNsdWRlL29wZW50aHJlYWQvb3BlbnRocmVhZC5oXSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoZXJlIHRvIGZpbmQgYXV4aWxsaWFyeSBidWlsZCB0b29scyAoZS5nLiBjb25maWcuZ3Vlc3MsCisjIGluc3RhbGwtc2gsIG1pc3NpbmcsIGV0Yy4pCisjCitBQ19DT05GSUdfQVVYX0RJUihbdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZl0pCisKKyMKKyMgVGVsbCBhdXRvY29uZiB3aGVyZSB0byBmaW5kIGF1eGlsbGlhcnkgTTQgbWFjcm9zCisjCitBQ19DT05GSUdfTUFDUk9fRElSKFt0aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200XSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoYXQgZmlsZSB0aGUgcGFja2FnZSBpcyB1c2luZyB0byBhZ2dyZWdhdGUgQyBwcmVwcm9jZXNzb3IKKyMgZGVmaW5lcy4KKyMKK0FDX0NPTkZJR19IRUFERVJTKFtpbmNsdWRlL29wZW50aHJlYWQtY29uZmlnLWdlbmVyaWMuaF0pCisKKyMKKyMgRmlndXJlIG91dCB3aGF0IHRoZSBjYW5vbmljYWwgYnVpbGQgYW5kIGhvc3QgdHVwbGVzIGFyZS4KKyMKK0FDX0NBTk9OSUNBTF9CVUlMRAorQUNfQ0FOT05JQ0FMX0hPU1QKKworIworIyBNYWMgT1MgWCAvIERhcndpbiBlbmRzIHVwIHB1dHRpbmcgc29tZSB2ZXJzaW9uaW5nIGNydWZ0IG9uIHRoZSBlbmQgb2YgaXRzCisjIHR1cGxlIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dCBpbiB0aGlzIHNjcmlwdC4gQ3JlYXRlICJjbGVhbiIgdmFyaWFibGVzCisjIGRldm9pZCBvZiBpdC4KKyMKKworTkxfRklMVEVSRURfQ0FOT05JQ0FMX0JVSUxECitOTF9GSUxURVJFRF9DQU5PTklDQUxfSE9TVAorCisjCisjIENvbmZpZ3VyZSBhdXRvbWFrZSB3aXRoIHRoZSBkZXNpcmVkIG9wdGlvbnMsIGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIG5vdAorIyBhIG5hdGl2ZSBHTlUgcGFja2FnZSwgdGhhdCB3ZSB3YW50ICJzaWxlbnQiIGJ1aWxkIHJ1bGVzLCBhbmQgdGhhdCB3ZSB3YW50CisjIG9iamVjdHMgYnVpbHQgaW4gdGhlIHNhbWUgc3ViZGlyZWN0b3J5IGFzIHRoZWlyIHNvdXJjZSByYXRoZXIgdGhhbiBjb2xsYXBzZWQKKyMgdG9nZXRoZXIgYXQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisjCisjIERpc2FibGUgc2lsZW50IGJ1aWxkIHJ1bGVzIGJ5IGVpdGhlciBwYXNzaW5nIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgdG8KKyMgY29uZmlndXJlIG9yIHBhc3NpbmcgVj0xIHRvIG1ha2UKKyMKK0FNX0lOSVRfQVVUT01BS0UoWzEuMTQgZm9yZWlnbiBzaWxlbnQtcnVsZXMgc3ViZGlyLW9iamVjdHMgdGFyLXBheF0pCisKKyMKKyMgU2lsZW50IGJ1aWxkIHJ1bGVzIHJlcXVpcmVzIGF0IGxlYXN0IGF1dG9tYWtlLTEuMTEuIEVtcGxveQorIyB0ZWNobmlxdWVzIGZvciBub3QgYnJlYWtpbmcgZWFybGllciB2ZXJzaW9ucyBvZiBhdXRvbWFrZS4KKyMKK200X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLCBbQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKV0pCitBTV9TSUxFTlRfUlVMRVMoW3llc10pCisKKyMKKyMgRW5hYmxlIG1haW50YWluZXIgbW9kZSB0byBwcmV2ZW50IHRoZSBwYWNrYWdlIGZyb20gY29uc3RhbnRseSB0cnlpbmcKKyMgdG8gcmVidWlsZCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCBldGMuIFJlYnVpbGRpbmcgc3VjaCBmaWxlcyByYXJlbHksCisjIGlmIGV2ZXIsIG5lZWRzIHRvIGJlIGRvbmUgImluIHRoZSBmaWVsZCIuCisjCisjIFVzZSB0aGUgaW5jbHVkZWQgJ2Jvb3RzdHJhcCcgc2NyaXB0IGluc3RlYWQgd2hlbiBuZWNlc3NhcnkuCisjCitBTV9NQUlOVEFJTkVSX01PREUKKworIworIyBIb3N0LW9zLXNwZWNpZmljIGNoZWNrcworIworCitjYXNlICR7aG9zdF9vc30gaW4KKworICAgICpkYXJ3aW4qKQorICAgICAgICBPUEVOVEhSRUFEX1RBUkdFVD1kYXJ3aW4KKyAgICAgICAgT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUz0iLURPUEVOVEhSRUFEX1RBUkdFVF9EQVJXSU4iCisgICAgICAgIDs7CisKKyAgICAqbGludXgqKQorICAgICAgICBPUEVOVEhSRUFEX1RBUkdFVD1saW51eAorICAgICAgICBPUEVOVEhSRUFEX1RBUkdFVF9ERUZJTkVTPSItRE9QRU5USFJFQURfVEFSR0VUX0xJTlVYIgorICAgICAgICA7OworCitlc2FjCisKK0FDX1NVQlNUKE9QRU5USFJFQURfVEFSR0VUX0RBUldJTikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX1RBUkdFVF9EQVJXSU5dLCBbdGVzdCAiJHtPUEVOVEhSRUFEX1RBUkdFVH0iID0gImRhcndpbiJdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX1RBUkdFVF9MSU5VWCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX1RBUkdFVF9MSU5VWF0sIFt0ZXN0ICIke09QRU5USFJFQURfVEFSR0VUfSIgPSAibGludXgiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUykKKworIworIyBDaGVja3MgZm9yIGJ1aWxkIGhvc3QgcHJvZ3JhbXMKKyMKKworIyBUaGlzIGlzIGEgaGFjayB0byByZXN0b3JlIHNvbWUgb2xkIGJyb2tlbiBiZWhhdmlvciB0aGF0IHdhcworIyByZW1vdmVkIGluIHB1bGwgcmVxdWVzdCAjMTUyNy4gSXQncyB1c2UgaXMgaGlnaGx5IGRpc2NvdXJhZ2VkLAorIyB5b3Ugc2hvdWxkIHRyeSB0byBmaXggeW91ciBidWlsZCBlbnZpcm9ubWVudCBpbnN0ZWFkLgorQUNfQVJHX0VOQUJMRShuby1leGVjdXRhYmxlcy1oYWNrLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbm8tZXhlY3V0YWJsZXMtaGFja10sCisgICAgICAgIFtFbmFibGUgaGFjayB0aGF0IHByZXZlbnRzIGxpbmsgY2hlY2tzIGF0IGNvbmZpZ3VyZSB0aW1lLiBIaWdobHkgZGlzY291cmFnZWQuXSldKQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGRpc2FibGUgZXhlY3V0YWJsZSBjaGVja2luZ10pCitpZiB0ZXN0ICIke2VuYWJsZV9ub19leGVjdXRhYmxlc19oYWNrfSIgPSAieWVzIgordGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfTk9fRVhFQ1VUQUJMRVMKKyAgICAjIEhlcmUgd2UgZ3Vlc3MgY29uc2VydmF0aXZlIHZhbHVlcyBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIGxpbmsgY2hlY2tzCisgICAgIyB0byB0ZXN0IGZvciB0aGVzZSBmZWF0dXJlcy4gVGhpcyB3aWxsIHByZXZlbnQgdGhlc2UgY2hlY2tzIGZyb20KKyAgICAjIGJlaW5nIHBlcmZvcm1lZCBsYXRlciBpbiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorICAgIGFjX2N2X2Z1bmNfc3RybGNhdD0ke2FjX2N2X2Z1bmNfc3RybGNhdC1ub30KKyAgICBhY19jdl9mdW5jX3N0cmxjcHk9JHthY19jdl9mdW5jX3N0cmxjcHktbm99CisgICAgYWNfY3ZfZnVuY19zdHJubGVuPSR7YWNfY3ZfZnVuY19zdHJubGVuLW5vfQorZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKKyMgUGFzc2luZyAtV2Vycm9yIHRvIEdDQy1iYXNlZCBvciAtY29tcGF0aWJsZSBjb21waWxlcnMgYnJlYWtzIHNvbWUKKyMgYXV0b2NvbmYgdGVzdHMgKHNlZQorIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b2NvbmYtcGF0Y2hlcy8yMDA4LTA5L21zZzAwMDE0Lmh0bWwpLgorIworIyBJZiAtV2Vycm9yIGhhcyBiZWVuIHBhc3NlZCB0cmFuc2Zvcm0gaXQgaW50byAtV25vLWVycm9yLiBXZSdsbAorIyB0cmFuc2Zvcm0gaXQgYmFjayBsYXRlciB3aXRoIE5MX1JFU1RPUkVfV0VSUk9SLgorCitOTF9TQVZFX1dFUlJPUgorCisjIENoZWNrIGZvciBjb21waWxlcnMuCisjCisjIFRoZXNlIHNob3VsZCBiZSBjaGVja2VkIEJFRk9SRSB3ZSBjaGVjayBmb3IgYW5kLCBpbXBsaWNpdGx5LAorIyBpbml0aWFsaXplIGxpYnRvb2wgc3VjaCB0aGF0IGxpYnRvb2wga25vd3Mgd2hhdCBsYW5ndWFnZXMgaXQgaGFzIHRvCisjIHdvcmsgd2l0aC4KKworQUNfUFJPR19DUFAKK0FDX1BST0dfQ1BQX1dFUlJPUgorCitBQ19QUk9HX0NDCitBQ19QUk9HX0NDX0NfTworCitBQ19QUk9HX0NYWENQUAorCitBQ19QUk9HX0NYWAorQUNfUFJPR19DWFhfQ19PCisKK0FNX1BST0dfQVMKKworIyBDaGVjayBmb3Igb3RoZXIgY29tcGlsZXIgdG9vbGNoYWluIHRvb2xzLgorCitBQ19DSEVDS19UT09MKEFSLCBhcikKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIpCitBQ19DSEVDS19UT09MKE9CSkNPUFksIG9iamNvcHkpCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCkKKworIyBDaGVjayBmb3Igb3RoZXIgaG9zdCB0b29scy4KKworQUNfUFJPR19JTlNUQUxMCitBQ19QUk9HX0xOX1MKKworQUNfUEFUSF9QUk9HKENNUCwgY21wKQorCisjCisjIENoZWNrcyBmb3Igc3BlY2lmaWMgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisjCisKKyMKKyMgQ29tbW9uIGNvbXBpbGVyIGZsYWdzIHdlIHdvdWxkIGxpa2UgdG8gaGF2ZS4KKyMKKyMgICAtV2FsbCAgICAgICAgICAgICAgICAgICAgICAgIENDLCBDWFgKKyMKKworUFJPU1BFQ1RJVkVfQ0ZMQUdTPSItV2FsbCAtV2V4dHJhIC1Xc2hhZG93IC1XZXJyb3IgLXN0ZD1jOTkgLXBlZGFudGljLWVycm9ycyIKK1BST1NQRUNUSVZFX0NYWEZMQUdTPSItV2FsbCAtV2V4dHJhIC1Xc2hhZG93IC1XZXJyb3IgLXN0ZD1nbnUrKzk4IC1Xbm8tYysrMTQtY29tcGF0IgorCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkQ0MgaXMgQ2xhbmddLAorICAgIFtubF9jdl9jbGFuZ10sCisgICAgW25sX2N2X2NsYW5nPW5vCisgICAgaWYgdGVzdCAieCR7R0NDfSIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfRUdSRVBfQ1BQKFtOTF9DQ19JU19DTEFOR10sCisgICAgICAgICAgICBbLyogTm90ZTogQ2xhbmcgMi43IGxhY2tzIF9fY2xhbmdfW2Etel0rX18gKi8KKyMgICAgICAgICAgICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2xsdm1fXykKKyAgICAgICAgICAgICBOTF9DQ19JU19DTEFORworIyAgICAgICAgICAgIGVuZGlmCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgW25sX2N2X2NsYW5nPXllc10pCisgICAgZmkKKyAgICBdKQorCitpZiB0ZXN0ICIke25sX2N2X2NsYW5nfSIgPSAieWVzIjsgdGhlbgorICAgIFBST1NQRUNUSVZFX0NGTEFHUz0iJHtQUk9TUEVDVElWRV9DRkxBR1N9IC1XY29udmVyc2lvbiIKKyAgICBQUk9TUEVDVElWRV9DWFhGTEFHUz0iJHtQUk9TUEVDVElWRV9DWFhGTEFHU30gLVdjb252ZXJzaW9uIgorZmkKKworQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQ10sICAgJHtQUk9TUEVDVElWRV9DRkxBR1N9KQorQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQysrXSwgJHtQUk9TUEVDVElWRV9DWFhGTEFHU30pCisKKyMgQ2hlY2sgZm9yIGFuZCBpbml0aWFsaXplIGxpYnRvb2wKKworTFRfSU5JVAorQUNfUFJPR19MSUJUT09MCisKKyMgRGlzYWJsZSBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQgKGNhbiBiZSBlbmFibGVkIHdpdGggLS1lbmFibGUtc2hhcmVkKQorCitBQ19ESVNBQkxFX1NIQVJFRAorCisjCisjIERlYnVnIGluc3RhbmNlcworIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBpbnN0YW5jZXNdKQorCisjIERlYnVnCisKK05MX0VOQUJMRV9ERUJVRyhbbm9dKQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9CVUlMRF9ERUJVR10sIFt0ZXN0ICIke25sX2N2X2J1aWxkX2RlYnVnfSIgPSAieWVzIl0pCisKKyMKKyMgQ29kZSBjb3ZlcmFnZSBhbmQgY29tcGlsZXIgb3B0aW1pemF0aW9uCisjCisKKyMgQ292ZXJhZ2UKKworTkxfRU5BQkxFX0NPVkVSQUdFKFtub10pCisKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2V9IiA9ICJ5ZXMiXSkKKworTkxfRU5BQkxFX0NPVkVSQUdFX1JFUE9SVFMoW2F1dG9dKQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0c30iID0gInllcyJdKQorCisjIE9wdGltaXphdGlvbgorCitOTF9FTkFCTEVfT1BUSU1JWkFUSU9OKFt5ZXNdKQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9CVUlMRF9PUFRJTUlaRURdLCBbdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJ5ZXMiXSkKKworIyBBZGRyZXNzIFNhbml0aXplcgorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgd2l0aCBBZGRyZXNzIFNhbml0aXplciBzdXBwb3J0XSkKK0FDX0FSR19FTkFCTEUoYWRkcmVzcy1zYW5pdGl6ZXIsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hZGRyZXNzLXNhbml0aXplcl0sW0VuYWJsZSBBZGRyZXNzIFNhbml0aXplciBzdXBwb3J0IEA8OkBkZWZhdWx0PW5vQDo+QC5dKV0sCisgICAgWworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKyAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtYWRkcmVzcy1zYW5pdGl6ZXJdKQorICAgICAgICAgICAgOzsKKworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyPW5vXSkKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfYWRkcmVzc19zYW5pdGl6ZXJ9KQorCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9XSVRIX0FERFJFU1NfU0FOSVRJWkVSXSwgW3Rlc3QgIiR7ZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyfSIgPSAieWVzIl0pCisKK2lmIHRlc3QgIiR7ZW5hYmxlX2FkZHJlc3Nfc2FuaXRpemVyfSIgPSAieWVzIiA7IHRoZW4KKworICAgIFBST1NQRUNUSVZFX0NGTEFHUz0iLWZzYW5pdGl6ZT1hZGRyZXNzIgorCisgICAgIyBDaGVjayBpZiB0aGUgY29tcGlsZXJzIHN1cHBvcnQgYWRkcmVzcyBzYW5pdGl6ZXIKKyAgICBBWF9DSEVDS19DT01QSUxFUl9PUFRJT05TKFtDXSwgICAke1BST1NQRUNUSVZFX0NGTEFHU30pCisgICAgQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhbQysrXSwgJHtQUk9TUEVDVElWRV9DRkxBR1N9KQorCitmaQorCisjCisjIENvZGUgc3R5bGUKKyMKKworQUNfU1VCU1QoUFJFVFRZLCBbIlwke2Fic190b3Bfc3JjZGlyfS8uYXN0eWxlL2FzdHlsZS13cmFwLnNoIl0pCitBQ19TVUJTVChQUkVUVFlfQVJHUywgWyJhc3R5bGUgLS1vcHRpb25zPVwke2Fic190b3Bfc3JjZGlyfS8uYXN0eWxlL2FzdHlsZS1vcHRzIl0pCitBQ19TVUJTVChQUkVUVFlfQ0hFQ0ssIFsiXCR7YWJzX3RvcF9zcmNkaXJ9Ly5hc3R5bGUvYXN0eWxlLXdyYXAuc2giXSkKK0FDX1NVQlNUKFBSRVRUWV9DSEVDS19BUkdTLCBbImFzdHlsZSAtLW9wdGlvbnM9XCR7YWJzX3RvcF9zcmNkaXJ9Ly5hc3R5bGUvYXN0eWxlLW9wdHMgLS1kcnktcnVuIl0pCisKKyMKKyMgVGVzdHMKKyMKK0FDX01TR19OT1RJQ0UoW2NoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgdGVzdHNdKQorCisjIFRlc3RzCisKK05MX0VOQUJMRV9URVNUUyhbeWVzXSkKKworQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfQlVJTERfVEVTVFNdLCBbdGVzdCAiJHtubF9jdl9idWlsZF90ZXN0c30iID0gInllcyJdKQorCisjCisjIENMSSBMaWJyYXJ5CisjCitBQ19BUkdfRU5BQkxFKGNsaS1hcHAsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jbGktYXBwXSxbRW5hYmxlIENMSSBzdXBwb3J0IChub3xtdGR8ZnRkfGFsbCkgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgYWxsfGJvdGgpCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcD15ZXMKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwX210ZD15ZXMKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwX2Z0ZD15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHBfbXRkPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHBfZnRkPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKyAgICAgICAgbXRkKQorICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHA9eWVzCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcF9tdGQ9eWVzCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcF9mdGQ9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgIGZ0ZCkKKyAgICAgICAgICAgIGVuYWJsZV9jbGlfYXBwPXllcworICAgICAgICAgICAgZW5hYmxlX2NsaV9hcHBfbXRkPW5vCisgICAgICAgICAgICBlbmFibGVfY2xpX2FwcF9mdGQ9eWVzCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtY2xpLWFwcF0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbCisgICAgIGVuYWJsZV9jbGlfYXBwPW5vCisgICAgIGVuYWJsZV9jbGlfYXBwX210ZD1ubworICAgICBlbmFibGVfY2xpX2FwcF9mdGQ9bm9dKQorCisKK0FDX01TR19DSEVDS0lORyhbY2xpLWFwcCBtb2Rlc10pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX2NsaV9hcHB9KQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NMSV0sICAgICBbdGVzdCAiJHtlbmFibGVfY2xpX2FwcH0iID09ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9DTElfTVREXSwgW3Rlc3QgIiR7ZW5hYmxlX2NsaV9hcHBfbXRkfSIgPT0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NMSV9GVERdLCBbdGVzdCAiJHtlbmFibGVfY2xpX2FwcF9mdGR9IiA9PSAieWVzIl0pCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9DTEkpCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9DTElfRlREKQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX01URCkKKworCisjCisjIE5DUCBhcHAKKyMKK0FDX0FSR19FTkFCTEUobmNwLWFwcCwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5jcC1hcHBdLFtFbmFibGUgTkNQIHN1cHBvcnQgKG5vfG10ZHxmdGR8YWxsKSBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgIyBNYXAgYWxsICYgYm90aCB0byB5ZXMKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICBhbGx8Ym90aCkKKyAgICAgICAgICAgIGVuYWJsZXZhbD15ZXMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIGVuYWJsZV9uY3BfYXBwX210ZD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIGVuYWJsZV9uY3BfYXBwX2Z0ZD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgbXRkKQorICAgICAgICAgICAgZW5hYmxlX25jcF9hcHA9eWVzCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcF9tdGQ9eWVzCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcF9mdGQ9bm8KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZnRkKQorICAgICAgICAgICAgZW5hYmxlX25jcF9hcHA9eWVzCisgICAgICAgICAgICBlbmFibGVfbmNwX2FwcF9tdGQ9bm8KKyAgICAgICAgICAgIGVuYWJsZV9uY3BfYXBwX2Z0ZD15ZXMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW5jcC1hcHBdKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgWworICAgICBlbmFibGVfbmNwX2FwcD1ubworICAgICBlbmFibGVfbmNwX2FwcF9mdGQ9bm8KKyAgICAgZW5hYmxlX25jcF9hcHBfbXRkPW5vCisgICAgXQorICAgICkKKworCitBQ19NU0dfQ0hFQ0tJTkcoW25jcC1hcHAgbW9kZXNdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9uY3BfYXBwfSkKK0FDX01TR19DSEVDS0lORyhbc2hvdWxkIE5DUCBzdXBwb3J0IGZ0ZF0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX25jcF9hcHBfZnRkfSkKK0FDX01TR19DSEVDS0lORyhbc2hvdWxkIE5DUCBzdXBwb3J0IG10ZF0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX25jcF9hcHBfbXRkfSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQKQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQX01URCkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX05DUF9GVEQpCisKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9OQ1BdLCAgICAgIFt0ZXN0ICIke2VuYWJsZV9uY3BfYXBwfSIgPT0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX05DUF9NVERdLCAgW3Rlc3QgIiR7ZW5hYmxlX25jcF9hcHBfbXRkfSIgPT0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX05DUF9GVERdLCAgW3Rlc3QgIiR7ZW5hYmxlX25jcF9hcHBfZnRkfSIgPT0gInllcyJdKQorCisjCisjIE5DUCBCVVMgLSBob3cgZG9lcyB0aGUgTkNQIHRhbGsgdG8gdGhlIGhvc3Q/CisjCisKK0FDX0FSR19XSVRIKAorICAgIFtuY3AtYnVzXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1uY3AtYnVzXSxbU3BlY2lmeSB0aGUgTkNQIGJ1cyAobm9uZXxzcGl8dWFydCkgQDw6QGRlZmF1bHQ9bm9uZUA6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHt3aXRoX25jcF9idXN9IiBpbgorICAgICAgICAibm9uZSIpCisgICAgICAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJPTAKKyAgICAgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUPTAKKyAgICAgICAgICAgIDs7CisgICAgICAgICJzcGkiKQorICAgICAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQST0xCisgICAgICAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVD0wCisgICAgICAgICAgICA7OworICAgICAgICAidWFydCIpCisgICAgICAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJPTAKKyAgICAgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUPTEKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW3VuZXhwZWN0ZWQgLS13aXRoLW5jcC1idXM9JHt3aXRoX25jcF9idXN9XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFsKKyAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJPTAKKyAgICAgICBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVD0wCisgICAgXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfU1BJXSwgIFt0ZXN0ICIke3dpdGhfbmNwX2J1c30iICA9ICJzcGkiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSV0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSX1dLFtEZWZpbmUgdG8gMSB0byBlbmFibGUgdGhlIE5DUCBTUEkgaW50ZXJmYWNlLl0pCitBQ19NU0dfQ0hFQ0tJTkcoW3Nob3VsZCBOQ1Agc3VwcG9ydCBTUEldKQorQUNfTVNHX1JFU1VMVChbJHtPUEVOVEhSRUFEX0VOQUJMRV9TUEl9XSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlRdLCBbdGVzdCAiJHt3aXRoX25jcF9idXN9IiAgPSAidWFydCJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlR9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBOQ1AgVUFSVCBpbnRlcmZhY2UuXSkKK0FDX01TR19DSEVDS0lORyhbc291bGQgTkNQIHN1cHBvcnQgVUFSVF0pCitBQ19NU0dfUkVTVUxUKFske09QRU5USFJFQURfRU5BQkxFX1VBUlR9XSkKKworIworIyBNdWx0aXBsZSBPcGVuVGhyZWFkIEluc3RhbmNlcworIworCitBQ19BUkdfRU5BQkxFKG11bHRpcGxlLWluc3RhbmNlcywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW11bHRpcGxlLWluc3RhbmNlc10sW0VuYWJsZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBPcGVuVGhyZWFkIGluc3RhbmNlcyBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9tdWx0aXBsZV9pbnN0YW5jZXM9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfbXVsdGlwbGVfaW5zdGFuY2VzfSBmb3IgLS1lbmFibGUtbXVsdGlwbGUtaW5zdGFuY2VzXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfbXVsdGlwbGVfaW5zdGFuY2VzPW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV9tdWx0aXBsZV9pbnN0YW5jZXMiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVM9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUz0wCitmaQorCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX211bHRpcGxlX2luc3RhbmNlc30pCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTXSwgW3Rlc3QgIiR7ZW5hYmxlX211bHRpcGxlX2luc3RhbmNlc30iID0gInllcyJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVNdLFske09QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFU31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgT3BlblRocmVhZCBpbnN0YW5jZXMuXSkKKworIworIyBCdWlsdGluIG1iZWR0bHMKKyMKKworQUNfQVJHX0VOQUJMRShidWlsdGluLW1iZWR0bHMsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1idWlsdGluLW1iZWR0bHNdLFtFbmFibGUgYnVpbHRpbiBtYmVkdGxzIEA8OkBkZWZhdWx0PXllc0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9idWlsdGluX21iZWR0bHM9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfYnVpbHRpbl9tYmVkdGxzfSBmb3IgLS1lbmFibGUtYnVpbHRpbi1tYmVkdGxzXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfYnVpbHRpbl9tYmVkdGxzPXllc10pCisKK2lmIHRlc3QgIiRlbmFibGVfYnVpbHRpbl9tYmVkdGxzIiA9ICJ5ZXMiIC1hICEgIiR7TUJFRFRMU19DUFBGTEFHU30iOyB0aGVuCisgICAgTUJFRFRMU19DUFBGTEFHUz0iLUlcJHthYnNfdG9wX3NyY2Rpcn0vdGhpcmRfcGFydHkvbWJlZHRscyIKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIke01CRURUTFNfQ1BQRkxBR1N9IC1JXCR7YWJzX3RvcF9zcmNkaXJ9L3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlIgorICAgIE1CRURUTFNfQ1BQRkxBR1M9IiR7TUJFRFRMU19DUFBGTEFHU30gLUlcJHthYnNfdG9wX3NyY2Rpcn0vdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscyIKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIke01CRURUTFNfQ1BQRkxBR1N9IC1ETUJFRFRMU19DT05GSUdfRklMRT1cXFwibWJlZHRscy1jb25maWcuaFxcXCIiCitmaQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1iZWQgVExTIHNob3VsZCBiZSBlbmFibGVkXSkKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfYnVpbHRpbl9tYmVkdGxzfSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFNdLCBbdGVzdCAiJHtlbmFibGVfYnVpbHRpbl9tYmVkdGxzfSIgPSAieWVzIl0pCisKKyMKKyMgVGhyZWFkIFRNRiBQcm94eQorIworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIFRNRiBwcm94eV0pCitBQ19BUkdfRU5BQkxFKHRtZl9wcm94eSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRtZi1wcm94eV0sW0VuYWJsZSBUTUYgcHJveHkgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV90bWZfcHJveHk9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfdG1mX3Byb3h5fSBmb3IgLS1lbmFibGUtdG1mLXByb3h5XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfdG1mX3Byb3h5PW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV90bWZfcHJveHkiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFk9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWT0wCitmaQorCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX3RtZl9wcm94eX0pCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZXSwgW3Rlc3QgIiR7ZW5hYmxlX3RtZl9wcm94eX0iID0gInllcyJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFldLFske09QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWX1dLFtEZWZpbmUgdG8gMSB0byBlbmFibGUgdGhlIFRNRiBwcm94eSBmZWF0dXJlLl0pCisKKyMKKyMgVGhyZWFkIE5ldHdvcmsgRGlhZ25vc3RpYyBmb3IgTVRECisjCisKK0FDX0FSR19FTkFCTEUobXRkX25ldHdvcmtfZGlhZ25vc3RpYywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW10ZC1uZXR3b3JrLWRpYWdub3N0aWNdLFtFbmFibGUgbmV0d29yayBkaWFnbm9zdGljIHN1cHBvcnQgZm9yIE1URCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX210ZF9uZXR3b3JrX2RpYWdub3N0aWN9IGZvciAtLWVuYWJsZS1tdGQtbmV0d29yay1kaWFnbm9zdGljXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfbXRkX25ldHdvcmtfZGlhZ25vc3RpYz1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfbXRkX25ldHdvcmtfZGlhZ25vc3RpYyIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUM9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUM9MAorZmkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSB0aGUgbmV0d29yayBkaWFnbm9zdGljIGZvciBNVERdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljfSkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQ10sIFt0ZXN0ICIke2VuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUNdLFske09QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUN9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIG5ldHdvcmsgZGlhZ25vc3RpYyBmb3IgTVRELl0pCisKKyMKKyMgVGhyZWFkIENvbW1pc3Npb25lcgorIworCitBQ19BUkdfRU5BQkxFKGNvbW1pc3Npb25lciwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvbW1pc3Npb25lcl0sW0VuYWJsZSBjb21taXNzaW9uZXIgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jb21taXNzaW9uZXI9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfY29tbWlzc2lvbmVyfSBmb3IgLS1lbmFibGUtY29tbWlzc2lvbmVyXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfY29tbWlzc2lvbmVyPW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV9jb21taXNzaW9uZXIiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVI9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUj0wCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIHRoZSBjb21taXNzaW9uZXJdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9jb21taXNzaW9uZXJ9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUl0sIFt0ZXN0ICIke2VuYWJsZV9jb21taXNzaW9uZXJ9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVJ9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBjb21taXNzaW9uZXIgcm9sZS5dKQorCisjCisjIFRocmVhZCBKb2luZXIKKyMKKworQUNfQVJHX0VOQUJMRShqb2luZXIsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1qb2luZXJdLFtFbmFibGUgam9pbmVyIHN1cHBvcnQgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfam9pbmVyPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX2pvaW5lcn0gZm9yIC0tZW5hYmxlLWpvaW5lcl0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2pvaW5lcj1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfam9pbmVyIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVI9MAorZmkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSB0aGUgam9pbmVyIGZlYXR1cmVdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9qb2luZXJ9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0pPSU5FUl0sIFt0ZXN0ICIke2VuYWJsZV9qb2luZXJ9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVJ9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBqb2luZXIgcm9sZS5dKQorCitpZiB0ZXN0ICIke2VuYWJsZV9jb21taXNzaW9uZXJ9IiA9ICJ5ZXMiIC1vICIke2VuYWJsZV9qb2luZXJ9IiA9ICJ5ZXMiOyB0aGVuCisgICAgZW5hYmxlX2R0bHM9InllcyIKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9EVExTPTEKK2Vsc2UKKyAgICBlbmFibGVfZHRscz0ibm8iCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUz0wCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIERUTFMgZHVlIHRvIGpvaW5lci9jb21taXNzaW9uZXJdKQorQUNfTVNHX1JFU1VMVCgke2VuYWJsZV9kdGxzfSkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0RUTFMpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfRFRMU10sIFt0ZXN0ICIke2VuYWJsZV9kdGxzfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0RUTFNdLFske09QRU5USFJFQURfRU5BQkxFX0RUTFN9XSxbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIGR0bHMgc3VwcG9ydC5dKQorCisjCisjIEphbSBEZXRlY3Rpb24KKyMKKworQUNfQVJHX0VOQUJMRShqYW1fZGV0ZWN0aW9uLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtamFtLWRldGVjdGlvbl0sW0VuYWJsZSBKYW0gRGV0ZWN0aW9uIHN1cHBvcnQgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfamFtX2RldGVjdGlvbj0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9qYW1fZGV0ZWN0aW9ufSBmb3IgLS1lbmFibGUtamFtLWRldGVjdGlvbl0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2phbV9kZXRlY3Rpb249bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2phbV9kZXRlY3Rpb24iID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgamFtIGRldGVjdGlvbl0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX2phbV9kZXRlY3Rpb259KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OXSwgW3Rlc3QgIiR7ZW5hYmxlX2phbV9kZXRlY3Rpb259IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTl0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgamFtIGRldGVjdGlvbiBmZWF0dXJlXSkKKworIworIyBNQUMgV2hpdGVsaXN0IGFuZCBCbGFja2xpc3QKKyMKKworQUNfQVJHX0VOQUJMRShtYWNfd2hpdGVsaXN0LAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbWFjLXdoaXRlbGlzdF0sW0VuYWJsZSBNQUMgd2hpdGVsaXN0L2JsYWNrbGlzdCBzdXBwb3J0IEA8OkBkZWZhdWx0PXllc0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9tYWNfd2hpdGVsaXN0PSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX21hY193aGl0ZWxpc3R9IGZvciAtLWVuYWJsZS1tYWMtd2hpdGVsaXN0XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfbWFjX3doaXRlbGlzdD15ZXNdKQorCitpZiB0ZXN0ICIkZW5hYmxlX21hY193aGl0ZWxpc3QiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgbWFjIHdoaXRlbGlzdF0pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX21hY193aGl0ZWxpc3R9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUXSwgW3Rlc3QgIiR7ZW5hYmxlX21hY193aGl0ZWxpc3R9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVH1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgTUFDIHdoaXRlbGlzdC9ibGFja2xpc3QgZmVhdHVyZV0pCisKKyMKKyMgRGlhZ25vc3RpY3MgTGlicmFyeQorIworCitBQ19BUkdfRU5BQkxFKGRpYWcsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaWFnXSxbRW5hYmxlIGRpYWdub3N0aWNzIHN1cHBvcnQgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfZGlhZz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9kaWFnfSBmb3IgLS1lbmFibGUtZGlhZ10pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2RpYWc9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2RpYWciID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgZGlhZ10pCitBQ19NU0dfUkVTVUxUKCR7ZW5hYmxlX2RpYWd9KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfRElBRykKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9ESUFHXSwgW3Rlc3QgIiR7ZW5hYmxlX2RpYWd9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfRElBR10sWyR7T1BFTlRIUkVBRF9FTkFCTEVfRElBR31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgZGlhZ25vc3RpY3MgbW9kdWxlXSkKKworIworIyBMZWdhY3kgTmV0d29yaworIworCitBQ19BUkdfRU5BQkxFKGxlZ2FjeSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxlZ2FjeV0sW0VuYWJsZSBsZWdhY3kgbmV0d29yayBzdXBwb3J0IEA8OkBkZWZhdWx0PW5vQDo+QC5dKV0sCisgICAgWworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKyAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgZW5hYmxlX2xlZ2FjeT0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9sZWdhY3l9IGZvciAtLWVuYWJsZS1sZWdhY3ldKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW2VuYWJsZV9sZWdhY3k9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2xlZ2FjeSIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWT0xCitlbHNlCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZPTAKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgbGVnYWN5XSkKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfbGVnYWN5fSkKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWSkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1ldLCBbdGVzdCAiJHtlbmFibGVfbGVnYWN5fSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0xFR0FDWV0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBsZWdhY3kgbmV0d29yayBzdXBwb3J0XSkKKworIworIyBDaGlsZCBTdXBlcnZpc2lvbgorIworCitBQ19BUkdfRU5BQkxFKGNoaWxkX3N1cGVydmlzaW9uLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY2hpbGQtc3VwZXJ2aXNpb25dLFtFbmFibGUgY2hpbGQgc3VwZXJ2aXNpb24gZmVhdHVyZSBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jaGlsZF9zdXBlcnZpc2lvbj0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9jaGlsZF9zdXBlcnZpc2lvbn0gZm9yIC0tZW5hYmxlLWNoaWxkLXN1cGVydmlzaW9uXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfY2hpbGRfc3VwZXJ2aXNpb249bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2NoaWxkX3N1cGVydmlzaW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT049MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OPTAKK2ZpCisKK0FDX01TR19SRVNVTFQoJHtlbmFibGVfY2hpbGRfc3VwZXJ2aXNpb259KQorQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04pCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT05dLCBbdGVzdCAiJHtlbmFibGVfY2hpbGRfc3VwZXJ2aXNpb259IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT05dLFske09QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlXSkKKworIworIyBMb2cgZm9yIGNlcnRpZmljYXRpb24gdGVzdAorIworCitBQ19BUkdfRU5BQkxFKGNlcnRfbG9nLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY2VydC1sb2ddLFtFbmFibGUgY2VydGlmaWNhdGlvbiBsb2cgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9jZXJ0X2xvZz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9jZXJ0X2xvZ30gZm9yIC0tZW5hYmxlLWNlcnQtbG9nXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfY2VydF9sb2c9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2NlcnRfbG9nIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0c9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HPTAKK2ZpCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HXSwgW3Rlc3QgIiR7ZW5hYmxlX2NlcnRfbG9nfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9DRVJUX0xPR31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgbG9nIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RdKQorCisjCisjIERIQ1B2NiBDbGllbnQKKyMKKworQUNfQVJHX0VOQUJMRShkaGNwNl9jbGllbnQsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaGNwNi1jbGllbnRdLFtFbmFibGUgREhDUHY2IGNsaWVudCBzdXBwb3J0IEA8OkBkZWZhdWx0PW5vQDo+QC5dKV0sCisgICAgWworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisKKyAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgZW5hYmxlX2RoY3A2X2NsaWVudD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9kaGNwNl9jbGllbnR9IGZvciAtLWVuYWJsZS1kaGNwNi1jbGllbnRdKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW2VuYWJsZV9kaGNwNl9jbGllbnQ9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2RoY3A2X2NsaWVudCIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVD0xCitlbHNlCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UPTAKK2ZpCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlRdLCBbdGVzdCAiJHtlbmFibGVfZGhjcDZfY2xpZW50fSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBESENQdjYgQ2xpZW50XSkKKworIworIyBESENQdjYgU2VydmVyCisjCisKK0FDX0FSR19FTkFCTEUoZGhjcDZfc2VydmVyLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZGhjcDYtc2VydmVyXSxbRW5hYmxlIERIQ1B2NiBzZXJ2ZXIgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9kaGNwNl9zZXJ2ZXI9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfZGhjcDZfc2VydmVyfSBmb3IgLS1lbmFibGUtZGhjcDYtc2VydmVyXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfZGhjcDZfc2VydmVyPW5vXSkKKworaWYgdGVzdCAiJGVuYWJsZV9kaGNwNl9zZXJ2ZXIiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVI9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUj0wCitmaQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSXSwgW3Rlc3QgIiR7ZW5hYmxlX2RoY3A2X3NlcnZlcn0iID0gInllcyJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVJdLFske09QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgREhDUHY2IFNlcnZlcl0pCisKKyMKKyMgRE5TIENsaWVudAorIworCitBQ19BUkdfRU5BQkxFKGRuc19jbGllbnQsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kbnMtY2xpZW50XSxbRW5hYmxlIEROUyBjbGllbnQgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9kbnNfY2xpZW50PSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX2Ruc19jbGllbnR9IGZvciAtLWVuYWJsZS1kbnMtY2xpZW50XSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfZG5zX2NsaWVudD1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfZG5zX2NsaWVudCIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQ9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQ9MAorZmkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UXSwgW3Rlc3QgIiR7ZW5hYmxlX2Ruc19jbGllbnR9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVF0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVH1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgRE5TIENsaWVudF0pCisKKyMKKyMgQXBwbGljYXRpb24gQ29BUAorIworCitBQ19BUkdfRU5BQkxFKGFwcGxpY2F0aW9uX2NvYXAsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwXSxbRW5hYmxlIENvQVAgdG8gYW4gYXBwbGljYXRpb24uQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBlbmFibGVfYXBwbGljYXRpb25fY29hcD0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZV9hcHBsaWNhdGlvbl9jb2FwfSBmb3IgLS1lbmFibGUtYXBwbGljYXRpb24tY29hcF0pCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgXSwKKyAgICBbZW5hYmxlX2FwcGxpY2F0aW9uX2NvYXA9bm9dKQorCitpZiB0ZXN0ICIkZW5hYmxlX2FwcGxpY2F0aW9uX2NvYXAiID0gInllcyI7IHRoZW4KKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQPTAKK2ZpCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVApCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUF0sIFt0ZXN0ICIke2VuYWJsZV9hcHBsaWNhdGlvbl9jb2FwfSIgPSAieWVzIl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVBdLFske09QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVB9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIENvQVAgdG8gYW4gYXBwbGljYXRpb24uXSkKKworIworIyBvdExpbmtSYXcgQVBJCisjCisKK0FDX0FSR19FTkFCTEUocmF3X2xpbmtfYXBpLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcmF3LWxpbmstYXBpXSxbRW5hYmxlIHJhdyBsaW5rLWxheWVyIEFQSSBzdXBwb3J0IEA8OkBkZWZhdWx0PXllc0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9yYXdfbGlua19hcGk9JHtlbmFibGV2YWx9CisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGVfcmF3X2xpbmtfYXBpfSBmb3IgLS1lbmFibGUtcmF3LWxpbmstYXBpXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfcmF3X2xpbmtfYXBpPXllc10pCisKK2lmIHRlc3QgIiRlbmFibGVfcmF3X2xpbmtfYXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJPTEKK2Vsc2UKKyAgICBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEk9MAorZmkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSV0sIFt0ZXN0ICIke2VuYWJsZV9yYXdfbGlua19hcGl9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJXSxbJHtPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEl9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJhdyBsaW5rLWxheWVyIEFQSV0pCisKKyMKKyMgQm9yZGVyIFJvdXRlcgorIworCitBQ19BUkdfRU5BQkxFKGJvcmRlcl9yb3V0ZXIsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ib3JkZXItcm91dGVyXSxbRW5hYmxlIEJvcmRlciBSb3V0ZXIgc3VwcG9ydCBAPDpAZGVmYXVsdD1ub0A6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorCisgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgIGVuYWJsZV9ib3JkZXJfcm91dGVyPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxlX2JvcmRlcl9yb3V0ZXJ9IGZvciAtLWVuYWJsZS1ib3JkZXItcm91dGVyXSkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBdLAorICAgIFtlbmFibGVfYm9yZGVyX3JvdXRlcj1ub10pCisKK2lmIHRlc3QgIiRlbmFibGVfYm9yZGVyX3JvdXRlciIgPSAieWVzIjsgdGhlbgorICAgIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVI9MQorZWxzZQorICAgIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVI9MAorZmkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSXSwgW3Rlc3QgIiR7ZW5hYmxlX2JvcmRlcl9yb3V0ZXJ9IiA9ICJ5ZXMiXSkKK0FDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUl0sWyR7T1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgQm9yZGVyIFJvdXRlcl0pCisKKyMKKyMgRXhhbXBsZXMKKyMKKworQUNfQVJHX1dJVEgoZXhhbXBsZXMsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZXhhbXBsZXM9VEFSR0VUXSwKKyAgICAgICAgW1NwZWNpZnkgdGhlIGV4YW1wbGVzIGZyb20gb25lIG9mOiBub25lLCBwb3NpeCwgY2MyNTM4LCBjYzI2NTAsIGRhMTUwMDAsIGVmcjMyLCBlbXNrLCBrdzQxeiwgbnJmNTI4NDAgQDw6QGRlZmF1bHQ9bm9uZUA6PkAuXSldLAorICAgIFsKKyAgICAgICAgY2FzZSAiJHt3aXRoX2V4YW1wbGVzfSIgaW4KKworICAgICAgICBub25lfHBvc2l4fGNjMjUzOHxjYzI2NTB8ZGExNTAwMHxlZnIzMnxlbXNrfGt3NDF6fG5yZjUyODQwKQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke3dpdGhfZXhhbXBsZXN9IGZvciAtLXdpdGgtZXhhbXBsZXNdKQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW3dpdGhfZXhhbXBsZXM9bm9uZV0pCisKK09QRU5USFJFQURfRVhBTVBMRVM9JHt3aXRoX2V4YW1wbGVzfQorCitjYXNlICR7d2l0aF9leGFtcGxlc30gaW4KKworICAgIHBvc2l4KQorICAgICAgICBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYXSxbJHtPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBwb3NpeCBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBjYzI1MzgpCisgICAgICAgIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4PTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0NDMjUzOF0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19DQzI1Mzh9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIGNjMjUzOCBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBjYzI2NTApCisgICAgICAgIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0NDMjY1MF0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19DQzI2NTB9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIGNjMjY1MCBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBkYTE1MDAwKQorICAgICAgICBPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDA9MQorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMF0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19EQTE1MDAwfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBkYTE1MDAwIGV4YW1wbGVzXSkKKyAgICAgICAgOzsKKworICAgIGVmcjMyKQorICAgICAgICBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyXSxbJHtPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyfV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIHVzZSBlZnIzMiBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICAgZW1zaykKKyAgICAgICAgT1BFTlRIUkVBRF9FWEFNUExFU19FTVNLPTEKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VNU0tdLFske09QRU5USFJFQURfRVhBTVBMRVNfRU1TS31dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2UgZW1zayBleGFtcGxlc10pCisgICAgICAgIDs7CisKKyAgICBrdzQxeikKKyAgICAgICAgT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWj0xCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWl0sWyR7T1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWn1dLFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byB1c2Uga3c0MXogZXhhbXBsZXNdKQorICAgICAgICA7OworCisgICAgbnJmNTI4NDApCisgICAgICAgIE9QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDA9MQorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW09QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDBdLFske09QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDB9XSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIG5yZjUyODQwIGV4YW1wbGVzXSkKKyAgICAgICAgOzsKKworZXNhYworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGV4YW1wbGVzXSkKK0FDX01TR19SRVNVTFQoJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFUykKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTXSwgW3Rlc3QgJHt3aXRoX2V4YW1wbGVzfSAhPSAibm9uZSJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtPUEVOVEhSRUFEX0VYQU1QTEVTXSxbJHtPUEVOVEhSRUFEX0VYQU1QTEVTfV0sW09wZW5UaHJlYWQgZXhhbXBsZXNdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRVhBTVBMRVNfUE9TSVhdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAicG9zaXgiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzgpCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzhdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAiY2MyNTM4Il0pCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gImNjMjY1MCJdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDApCitBTV9DT05ESVRJT05BTChbT1BFTlRIUkVBRF9FWEFNUExFU19EQTE1MDAwXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gImRhMTUwMDAiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMikKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gImVmcjMyIl0pCisKK0FDX1NVQlNUKE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSykKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTX0VNU0tdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAiZW1zayJdKQorCitBQ19TVUJTVChPUEVOVEhSRUFEX0VYQU1QTEVTX0tXNDFaKQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfRVhBTVBMRVNfS1c0MVpdLCBbdGVzdCAiJHtPUEVOVEhSRUFEX0VYQU1QTEVTfSIgPSAia3c0MXoiXSkKKworQUNfU1VCU1QoT1BFTlRIUkVBRF9FWEFNUExFU19OUkY1Mjg0MCkKK0FNX0NPTkRJVElPTkFMKFtPUEVOVEhSRUFEX0VYQU1QTEVTX05SRjUyODQwXSwgW3Rlc3QgIiR7T1BFTlRIUkVBRF9FWEFNUExFU30iID0gIm5yZjUyODQwIl0pCisKKyMKKyMgUGxhdGZvcm0gSW5mb3JtYXRpb24KKyMKKworQUNfQVJHX1dJVEgocGxhdGZvcm0taW5mbywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wbGF0Zm9ybS1pbmZvPVBMQVRGT1JNXSwKKyAgICAgICAgW1NwZWNpZnkgdGhlIHBsYXRmb3JtIGluZm9ybWF0aW9uIEA8OkBkZWZhdWx0PW5vbmVAOj5ALl0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9wbGF0Zm9ybV9pbmZvPW5vbmVdKQorCitQTEFURk9STV9JTkZPPSR7d2l0aF9wbGF0Zm9ybV9pbmZvfQorCitBQ19NU0dfQ0hFQ0tJTkcoW3dpdGggcGxhdGZvcm0gaW5mb10pCitBQ19NU0dfUkVTVUxUKCR7UExBVEZPUk1fSU5GT30pCisKK0FDX1NVQlNUKFBMQVRGT1JNX0lORk8pCitBQ19ERUZJTkVfVU5RVU9URUQoW1BMQVRGT1JNX0lORk9dLFsiJHtQTEFURk9STV9JTkZPfSJdLFtPcGVuVGhyZWFkIHBsYXRmb3JtIGluZm9ybWF0aW9uXSkKKworIworIyBUb29scworIworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgdG9vbHNdKQorQUNfQVJHX0VOQUJMRSh0b29scywKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10b29sc10sW0Rpc2FibGUgYnVpbGRpbmcgb2YgdG9vbHMgQDw6QGRlZmF1bHQ9bm9AOj5ALl0pXSwKKyAgICBbCisgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKworICAgICAgICBub3x5ZXMpCisgICAgICAgICAgICBidWlsZF90b29scz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgKikKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRvb2xzXSkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgZXNhYworICAgIF0sCisgICAgW2J1aWxkX3Rvb2xzPXllc10pCitBQ19NU0dfUkVTVUxUKCR7YnVpbGRfdG9vbHN9KQorQU1fQ09ORElUSU9OQUwoW09QRU5USFJFQURfQlVJTERfVE9PTFNdLCBbdGVzdCAiJHtidWlsZF90b29sc30iID0gInllcyJdKQorCisjCisjIERvY3VtZW50YXRpb24KKyMKKworIyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgZG9jdW1lbnRhdGlvbiAodmlhIERveHlnZW4pIHNob3VsZCBiZSBidWlsdAorIyBvciBub3QsIHdpdGggJ2F1dG8nIGFzIHRoZSBkZWZhdWx0IGFuZCBlc3RhYmxpc2ggYSBkZWZhdWx0IHN1cHBvcnQKKyMgdmFsdWUgZm9yIEdyYXBoVml6ICdkb3QnIHN1cHBvcnQuCisKK05MX0VOQUJMRV9ET0NTKFthdXRvXSxbTk9dKQorCitBTV9DT05ESVRJT05BTChPUEVOVEhSRUFEX0JVSUxEX0RPQ1MsIFt0ZXN0ICIke25sX2N2X2J1aWxkX2RvY3N9IiA9ICJ5ZXMiXSkKKworIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyBhbmQgcGFja2FnZXMuCisjCisjIEF0IG1pbmltdW0sIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIG9wdGlvbmFsLCBkZXBlbmRpbmcgb24KKyMgY29uZmlndXJhdGlvbjoKKyMKKyMgICAqIFRCRAorIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgcmVxdWlyZWQgcGFja2FnZSBkZXBlbmRlbmNpZXNdKQorCisjIE5MX1dJVEhfUEFDS0FHRSguLi4pCisKKyMKKyMgQ2hlY2sgZm9yIGhlYWRlcnMKKyMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgQlNEIFNlY3VyaXR5IEZlYXR1cmVzCisjIFRoaXMgZW5hYmxlcyBzdHJsY3B5KCkgYW5kIG90aGVyIGZyaWVuZHMgaW4gR05VIGxhbmQuCisjIFdoaWxlIHRoZSByZWZlcmVuY2VzIGJlbG93IGdlbmVyYWxseSBzcGVhayBvZjogImdsaWJjIgorIyBUaGUgQVJNIEVtYmVkZGVkIHBsYXRmb3JtIHVzZXMgdGhlIG5hbm8gaW5zdGFuY2Ugb2YgTkVXTElCCisjIFdoaWNoIGdyZWF0bHkgZm9sbG93cyBhbmQgbWlycm9ycyBnbGliYy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUmVmZXJlbmNlczoKKyMgMSkgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yOTIwMTUxNS93aGF0LWRvZXMtZC1kZWZhdWx0LXNvdXJjZS1kbworIyAyKSBodHRwOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjcvZmVhdHVyZV90ZXN0X21hY3Jvcy43Lmh0bWwKKyMKK0NGTEFHUz0iJHtDRkxBR1N9IC1EX0JTRF9TT1VSQ0U9MSAtRF9ERUZBVUxUX1NPVVJDRT0xIgorQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1EX0JTRF9TT1VSQ0U9MSAtRF9ERUZBVUxUX1NPVVJDRT0xIgorCitPTERfQ0ZMQUdTPSIke0NGTEFHU30iCitDRkxBR1M9IiR7Q0ZMQUdTfSAtV25vLWVycm9yPWFkZHJlc3MiCitBQ19IRUFERVJfU1REQk9PTAorQ0ZMQUdTPSIke09MRF9DRkxBR1N9IgorQUNfSEVBREVSX1NUREMKKworQUNfQ0hFQ0tfSEVBREVSUyhbc3RkaW50LmhdKQorQUNfQ0hFQ0tfSEVBREVSUyhbc3RyaW5nLmhdKQorCisjCisjIE1pc3NpbmcgRnVuY3Rpb25zCisjCitBQ19DSEVDS19GVU5DKFtzdHJsY3B5XSwgW0FDX0RFRklORShbSEFWRV9TVFJMQ1BZXSwgWzFdLCBbRGVmaW5lIGlmIHN0cmxjcHkgZXhpc3RzLl0pXSkKK0FDX0NIRUNLX0ZVTkMoW3N0cmxjYXRdLCBbQUNfREVGSU5FKFtIQVZFX1NUUkxDQVRdLCBbMV0sIFtEZWZpbmUgaWYgc3RybGNhdCBleGlzdHMuXSldKQorQUNfQ0hFQ0tfRlVOQyhbc3Rybmxlbl0sIFtBQ19ERUZJTkUoW0hBVkVfU1RSTkxFTl0sIFsxXSwgW0RlZmluZSBpZiBzdHJubGVuIGV4aXN0cy5dKV0pCisKKyMKKyMgQ2hlY2sgZm9yIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzCisjCitBQ19UWVBFX0lOVDhfVAorQUNfVFlQRV9JTlQxNl9UCitBQ19UWVBFX0lOVDMyX1QKK0FDX1RZUEVfSU5UNjRfVAorQUNfVFlQRV9VSU5UOF9UCitBQ19UWVBFX1VJTlQxNl9UCitBQ19UWVBFX1VJTlQzMl9UCitBQ19UWVBFX1VJTlQ2NF9UCisKKyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworIworCitpZiB0ZXN0ICIke2FjX25vX2xpbmt9IiAhPSAieWVzIjsgdGhlbgorICAgIEFDX0NIRUNLX0ZVTkNTKFttZW1jcHldKQorZmkKKworIyBBZGQgYW55IG1iZWR0bHMgQ1BQRkxBR1MKKworQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7TUJFRFRMU19DUFBGTEFHU30iCisKKyMgQWRkIGFueSBjb2RlIGNvdmVyYWdlIENQUEZMQUdTIGFuZCBMREZMQUdTCisKK0NQUEZMQUdTPSIke0NQUEZMQUdTfSAke05MX0NPVkVSQUdFX0NQUEZMQUdTfSIKK0xERkxBR1M9IiR7TERGTEFHU30gJHtOTF9DT1ZFUkFHRV9MREZMQUdTfSIKKworIyBBdCB0aGlzIHBvaW50LCB3ZSBjYW4gcmVzdG9yZSB0aGUgY29tcGlsZXIgZmxhZ3MgdG8gd2hhdGV2ZXIgdGhlCisjIHVzZXIgcGFzc2VkIGluLCBub3cgdGhhdCB3ZSdyZSBjbGVhciBvZiBhbiAtV2Vycm9yIGlzc3VlcyBieQorIyB0cmFuc2Zvcm1pbmcgLVduby1lcnJvciBiYWNrIHRvIC1XZXJyb3IuCisKK05MX1JFU1RPUkVfV0VSUk9SCisKKyMKKyMgSWRlbnRpZnkgdGhlIHZhcmlvdXMgbWFrZWZpbGVzIGFuZCBhdXRvLWdlbmVyYXRlZCBmaWxlcyBmb3IgdGhlIHBhY2thZ2UKKyMKK0FDX0NPTkZJR19GSUxFUyhbCitNYWtlZmlsZQoraW5jbHVkZS9NYWtlZmlsZQoraW5jbHVkZS9vcGVudGhyZWFkL01ha2VmaWxlCitpbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vTWFrZWZpbGUKK3NyYy9NYWtlZmlsZQorc3JjL2NsaS9NYWtlZmlsZQorc3JjL25jcC9NYWtlZmlsZQorc3JjL2NvcmUvTWFrZWZpbGUKK3NyYy9kaWFnL01ha2VmaWxlCit0aGlyZF9wYXJ0eS9NYWtlZmlsZQordGhpcmRfcGFydHkvbWJlZHRscy9NYWtlZmlsZQorZXhhbXBsZXMvTWFrZWZpbGUKK2V4YW1wbGVzL2FwcHMvTWFrZWZpbGUKK2V4YW1wbGVzL2FwcHMvY2xpL01ha2VmaWxlCitleGFtcGxlcy9hcHBzL25jcC9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L01ha2VmaWxlCitleGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvTWFrZWZpbGUKK2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9NYWtlZmlsZQorZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzL01ha2VmaWxlCit0b29scy9NYWtlZmlsZQordG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL01ha2VmaWxlCit0b29scy9oYXJuZXNzLXRoY2kvTWFrZWZpbGUKK3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvTWFrZWZpbGUKK3Rlc3RzL01ha2VmaWxlCit0ZXN0cy9zY3JpcHRzL01ha2VmaWxlCit0ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L01ha2VmaWxlCit0ZXN0cy91bml0L01ha2VmaWxlCitkb2MvTWFrZWZpbGUKK10pCisKKyMKKyMgR2VuZXJhdGUgdGhlIGF1dG8tZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgcGFja2FnZQorIworQUNfT1VUUFVUCisKKyMKKyMgU3VtbWFyaXplIHRoZSBwYWNrYWdlIGNvbmZpZ3VyYXRpb24KKyMKKworQUNfTVNHX05PVElDRShbCisKKyAgQ29uZmlndXJhdGlvbiBTdW1tYXJ5CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBQYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9OQU1FfQorICBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9WRVJTSU9OfQorICBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TElCT1BFTlRIUkVBRF9WRVJTSU9OX0lORk8vLzovLn0KKyAgQnVpbGQgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2J1aWxkfQorICBIb3N0IHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7aG9zdH0KKyAgSG9zdCBhcmNoaXRlY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2hvc3RfY3B1fQorICBIb3N0IE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7aG9zdF9vc30KKyAgQ3Jvc3MgY29tcGlsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2Nyb3NzX2NvbXBpbGluZ30KKyAgQnVpbGQgc2hhcmVkIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9zaGFyZWR9CisgIEJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfc3RhdGljfQorICBCdWlsZCBkZWJ1ZyBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfZGVidWd9CisgIEJ1aWxkIG9wdGltaXplZCBsaWJyYXJpZXMgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9CisgIEJ1aWxkIGNvdmVyYWdlIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9jb3ZlcmFnZX0KKyAgQnVpbGQgY292ZXJhZ2UgcmVwb3J0cyAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHN9CisgIEFkZHJlc3Mgc2FuaXRpemVyIHN1cHBvcnQgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfYWRkcmVzc19zYW5pdGl6ZXJ9CisgIExjb3YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMQ09WOi0tfQorICBHZW5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7R0VOSFRNTDotLX0KKyAgQnVpbGQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX3Rlc3RzfQorICBCdWlsZCB0b29scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7YnVpbGRfdG9vbHN9CisgIE9wZW5UaHJlYWQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHt3aXRoX3Rlc3RzfQorICBQcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7cHJlZml4fQorICBEb2N1bWVudGF0aW9uIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfZG9jc30KKyAgRG94eWdlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0RPWFlHRU46LS19CisgIEdyYXBoVml6IGRvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtET1Q6LS19CisgIEMgUHJlcHJvY2Vzc29yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDUFB9CisgIEMgQ29tcGlsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDQ30KKyAgQysrIFByZXByb2Nlc3NvciAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NYWENQUH0KKyAgQysrIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NYWH0KKyAgQXNzZW1ibGVyIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NDQVN9CisgIEFyY2hpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtBUn0KKyAgQXJjaGl2ZSBJbmRleGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1JBTkxJQn0KKyAgU3ltYm9sIFN0cmlwcGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1NUUklQfQorICBPYmplY3QgQ29waWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7T0JKQ09QWX0KKyAgQyBQcmVwcm9jZXNzb3IgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgOiAke0NQUEZMQUdTOi0tfQorICBDIENvbXBpbGUgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q0ZMQUdTOi0tfQorICBDKysgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7Q1hYRkxBR1M6LS19CisgIEFzc2VtYmxlciBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDQ0FTRkxBR1M6LS19CisgIExpbmsgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMREZMQUdTOi0tfQorICBMaW5rIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TElCU30KKyAgUHJldHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BSRVRUWTotLX0KKyAgUHJldHR5IGFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BSRVRUWV9BUkdTOi0tfQorICBQcmV0dHkgY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UFJFVFRZX0NIRUNLOi0tfQorICBQcmV0dHkgY2hlY2sgYXJncyAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UFJFVFRZX0NIRUNLX0FSR1M6LS19CisgIE9wZW5UaHJlYWQgQ0xJIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfY2xpX2FwcH0KKyAgT3BlblRocmVhZCBDTEktTVREIHN1cHBvcnQgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9jbGlfYXBwX210ZH0KKyAgT3BlblRocmVhZCBDTEktRlREIHN1cHBvcnQgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9jbGlfYXBwX2Z0ZH0KKyAgT3BlblRocmVhZCBOQ1Agc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9uY3BfYXBwfQorICBPcGVuVGhyZWFkIE5DUC1NVEQgc3VwcG9ydCAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX25jcF9hcHBfbXRkfQorICBPcGVuVGhyZWFkIE5DUC1GVEQgc3VwcG9ydCAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX25jcF9hcHBfZnRkfQorICBPcGVuVGhyZWFkIE5DUC1CVVMgQ29uZmlndXJhdGlvbiAgICAgICAgICA6ICR7d2l0aF9uY3BfYnVzfQorICBPcGVuVGhyZWFkIE11bHRpcGxlIEluc3RhbmNlcyBzdXBwb3J0ICAgICA6ICR7ZW5hYmxlX211bHRpcGxlX2luc3RhbmNlc30KKyAgT3BlblRocmVhZCBNVEQgTmV0d29yayBEaWFnbm9zdGljIHN1cHBvcnQgOiAke2VuYWJsZV9tdGRfbmV0d29ya19kaWFnbm9zdGljfQorICBPcGVuVGhyZWFkIGJ1aWx0aW4gbWJlZHRscyBzdXBwb3J0ICAgICAgICA6ICR7ZW5hYmxlX2J1aWx0aW5fbWJlZHRsc30KKyAgT3BlblRocmVhZCBUTUYgUHJveHkgc3VwcG9ydCAgICAgICAgICAgICAgOiAke2VuYWJsZV90bWZfcHJveHl9CisgIE9wZW5UaHJlYWQgQ29tbWlzc2lvbmVyIHN1cHBvcnQgICAgICAgICAgIDogJHtlbmFibGVfY29tbWlzc2lvbmVyfQorICBPcGVuVGhyZWFkIEpvaW5lciBzdXBwb3J0ICAgICAgICAgICAgICAgICA6ICR7ZW5hYmxlX2pvaW5lcn0KKyAgT3BlblRocmVhZCBEVExTIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9kdGxzfQorICBPcGVuVGhyZWFkIEphbSBEZXRlY3Rpb24gc3VwcG9ydCAgICAgICAgICA6ICR7ZW5hYmxlX2phbV9kZXRlY3Rpb259CisgIE9wZW5UaHJlYWQgTUFDIFdoaXRlbGlzdCBzdXBwb3J0ICAgICAgICAgIDogJHtlbmFibGVfbWFjX3doaXRlbGlzdH0KKyAgT3BlblRocmVhZCBEaWFnbm9zdGljcyBzdXBwb3J0ICAgICAgICAgICAgOiAke2VuYWJsZV9kaWFnfQorICBPcGVuVGhyZWFkIENoaWxkIFN1cGVydmlzaW9uIHN1cHBvcnQgICAgICA6ICR7ZW5hYmxlX2NoaWxkX3N1cGVydmlzaW9ufQorICBPcGVuVGhyZWFkIExlZ2FjeSBuZXR3b3JrIHN1cHBvcnQgICAgICAgICA6ICR7ZW5hYmxlX2xlZ2FjeX0KKyAgT3BlblRocmVhZCBDZXJ0aWZpY2F0aW9uIGxvZyBzdXBwb3J0ICAgICAgOiAke2VuYWJsZV9jZXJ0X2xvZ30KKyAgT3BlblRocmVhZCBESENQdjYgU2VydmVyIHN1cHBvcnQgICAgICAgICAgOiAke2VuYWJsZV9kaGNwNl9zZXJ2ZXJ9CisgIE9wZW5UaHJlYWQgREhDUHY2IENsaWVudCBzdXBwb3J0ICAgICAgICAgIDogJHtlbmFibGVfZGhjcDZfY2xpZW50fQorICBPcGVuVGhyZWFkIEROUyBDbGllbnQgc3VwcG9ydCAgICAgICAgICAgICA6ICR7ZW5hYmxlX2Ruc19jbGllbnR9CisgIE9wZW5UaHJlYWQgQXBwbGljYXRpb24gQ29BUCBzdXBwb3J0ICAgICAgIDogJHtlbmFibGVfYXBwbGljYXRpb25fY29hcH0KKyAgT3BlblRocmVhZCBSYXcgTGluay1MYXllciBzdXBwb3J0ICAgICAgICAgOiAke2VuYWJsZV9yYXdfbGlua19hcGl9CisgIE9wZW5UaHJlYWQgQm9yZGVyIFJvdXRlciBzdXBwb3J0ICAgICAgICAgIDogJHtlbmFibGVfYm9yZGVyX3JvdXRlcn0KKyAgT3BlblRocmVhZCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgOiAke09QRU5USFJFQURfRVhBTVBMRVN9CisgIE9wZW5UaHJlYWQgcGxhdGZvcm0gaW5mb3JtYXRpb24gICAgICAgICAgIDogJHtQTEFURk9STV9JTkZPfQorCitdKQpkaWZmIC0tZ2l0IGEvZG9jL0RveHlmaWxlLmluIGIvZG9jL0RveHlmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTcyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvRG94eWZpbGUuaW4KQEAgLTAsMCArMSwyMzg0IEBACisjIERveHlmaWxlIDEuOC42CisKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24gc3lzdGVtICMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKSBmb3IgT3BlblRocmVhZC4KKyMKKyMgICAgICBUaGlzIHdhcyBpbml0aWFsbHkgYXV0b2dlbmVyYXRlZCAnZG94eXdpemFyZCcgYW5kIHRoZW4gaGFuZC10dW5lZC4KKyMKKyMgICAgICBBbGwgdGV4dCBhZnRlciBhIGhhc2ggKCMpIGlzIGNvbnNpZGVyZWQgYSBjb21tZW50IGFuZCB3aWxsIGJlCisjICAgICAgaWdub3JlZC4KKyMKKyMgICAgICBUaGUgZm9ybWF0IGlzOgorIworIyAgICAgICAgICBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMKKyMgICAgICBGb3IgbGlzdHMgaXRlbXMgY2FuIGFsc28gYmUgYXBwZW5kZWQgdXNpbmc6CisjCisjICAgICAgICAgIFRBRyArPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMKKyMgICAgICBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzICgiICIpCisjCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlCisjIHRoYXQgZm9sbG93LiBUaGUgZGVmYXVsdCBpcyBVVEYtOCB3aGljaCBpcyBhbHNvIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwgdGV4dAorIyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlIGljb252CisjIGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udgorIyBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogVVRGLTguCisKK0RPWFlGSUxFX0VOQ09ESU5HICAgICAgPSBVVEYtOAorCisjIFRoZSBQUk9KRUNUX05BTUUgdGFnIGlzIGEgc2luZ2xlIHdvcmQgKG9yIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc3Vycm91bmRlZCBieQorIyBkb3VibGUtcXVvdGVzLCB1bmxlc3MgeW91IGFyZSB1c2luZyBEb3h5d2l6YXJkKSB0aGF0IHNob3VsZCBpZGVudGlmeSB0aGUKKyMgcHJvamVjdCBmb3Igd2hpY2ggdGhlIGRvY3VtZW50YXRpb24gaXMgZ2VuZXJhdGVkLiBUaGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUKKyMgdGl0bGUgb2YgbW9zdCBnZW5lcmF0ZWQgcGFnZXMgYW5kIGluIGEgZmV3IG90aGVyIHBsYWNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE15IFByb2plY3QuCisKK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSBPcGVuVGhyZWFkCisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiBUaGlzCisjIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yIGlmIHNvbWUgdmVyc2lvbgorIyBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgorCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gQFBBQ0tBR0VfVkVSU0lPTkAKKworIyBVc2luZyB0aGUgUFJPSkVDVF9CUklFRiB0YWcgb25lIGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIG9uZSBsaW5lIGRlc2NyaXB0aW9uCisjIGZvciBhIHByb2plY3QgdGhhdCBhcHBlYXJzIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlIGFuZCBzaG91bGQgZ2l2ZSB2aWV3ZXIgYQorIyBxdWljayBpZGVhIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwcm9qZWN0LiBLZWVwIHRoZSBkZXNjcmlwdGlvbiBzaG9ydC4KKworUFJPSkVDVF9CUklFRiAgICAgICAgICA9CisKKyMgV2l0aCB0aGUgUFJPSkVDVF9MT0dPIHRhZyBvbmUgY2FuIHNwZWNpZnkgYW4gbG9nbyBvciBpY29uIHRoYXQgaXMgaW5jbHVkZWQgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgbG9nbyBzaG91bGQgbm90IGV4Y2VlZCA1NSBwaXhlbHMKKyMgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIHNob3VsZCBub3QgZXhjZWVkIDIwMCBwaXhlbHMuIERveHlnZW4gd2lsbCBjb3B5IHRoZSBsb2dvCisjIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorCitQUk9KRUNUX0xPR08gICAgICAgICAgID0gQGFic19zcmNkaXJAL2ltYWdlcy9PcGVuLVRocmVhZC1Mb2dvLTIwMHg0Mi5wbmcKKworIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpIHBhdGgKKyMgaW50byB3aGljaCB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSB3cml0dGVuLiBJZiBhIHJlbGF0aXZlIHBhdGggaXMKKyMgZW50ZXJlZCwgaXQgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gd2hlcmUgZG94eWdlbiB3YXMgc3RhcnRlZC4gSWYKKyMgbGVmdCBibGFuayB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLgorCitPVVRQVVRfRElSRUNUT1JZICAgICAgID0gQGFic19idWlsZGRpckAKKworIyBJZiB0aGUgQ1JFQVRFX1NVQkRJUlMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGNyZWF0ZSA0MDk2IHN1Yi0KKyMgZGlyZWN0b3JpZXMgKGluIDIgbGV2ZWxzKSB1bmRlciB0aGUgb3V0cHV0IGRpcmVjdG9yeSBvZiBlYWNoIG91dHB1dCBmb3JtYXQgYW5kCisjIHdpbGwgZGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIG92ZXIgdGhlc2UgZGlyZWN0b3JpZXMuIEVuYWJsaW5nIHRoaXMKKyMgb3B0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBmZWVkaW5nIGRveHlnZW4gYSBodWdlIGFtb3VudCBvZiBzb3VyY2UgZmlsZXMsIHdoZXJlCisjIHB1dHRpbmcgYWxsIGdlbmVyYXRlZCBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd291bGQgb3RoZXJ3aXNlIGNhdXNlcworIyBwZXJmb3JtYW5jZSBwcm9ibGVtcyBmb3IgdGhlIGZpbGUgc3lzdGVtLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0NSRUFURV9TVUJESVJTICAgICAgICAgPSBZRVMKKworIyBUaGUgT1VUUFVUX0xBTkdVQUdFIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGxhbmd1YWdlIGluIHdoaWNoIGFsbAorIyBkb2N1bWVudGF0aW9uIGdlbmVyYXRlZCBieSBkb3h5Z2VuIGlzIHdyaXR0ZW4uIERveHlnZW4gd2lsbCB1c2UgdGhpcworIyBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhbGwgY29uc3RhbnQgb3V0cHV0IGluIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEFmcmlrYWFucywgQXJhYmljLCBBcm1lbmlhbiwgQnJhemlsaWFuLCBDYXRhbGFuLCBDaGluZXNlLAorIyBDaGluZXNlLVRyYWRpdGlvbmFsLCBDcm9hdGlhbiwgQ3plY2gsIERhbmlzaCwgRHV0Y2gsIEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpLAorIyBFc3BlcmFudG8sIEZhcnNpIChQZXJzaWFuKSwgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBIdW5nYXJpYW4sCisjIEluZG9uZXNpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCBKYXBhbmVzZS1lbiAoSmFwYW5lc2Ugd2l0aCBFbmdsaXNoIG1lc3NhZ2VzKSwKKyMgS29yZWFuLCBLb3JlYW4tZW4gKEtvcmVhbiB3aXRoIEVuZ2xpc2ggbWVzc2FnZXMpLCBMYXR2aWFuLCBMaXRodWFuaWFuLAorIyBNYWNlZG9uaWFuLCBOb3J3ZWdpYW4sIFBlcnNpYW4gKEZhcnNpKSwgUG9saXNoLCBQb3J0dWd1ZXNlLCBSb21hbmlhbiwgUnVzc2lhbiwKKyMgU2VyYmlhbiwgU2VyYmlhbi1DeXJpbGxpYywgU2xvdmFrLCBTbG92ZW5lLCBTcGFuaXNoLCBTd2VkaXNoLCBUdXJraXNoLAorIyBVa3JhaW5pYW4gYW5kIFZpZXRuYW1lc2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBFbmdsaXNoLgorCitPVVRQVVRfTEFOR1VBR0UgICAgICAgID0gRW5nbGlzaAorCisjIElmIHRoZSBCUklFRl9NRU1CRVJfREVTQyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBicmllZiBtZW1iZXIKKyMgZGVzY3JpcHRpb25zIGFmdGVyIHRoZSBtZW1iZXJzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgZmlsZSBhbmQgY2xhc3MKKyMgZG9jdW1lbnRhdGlvbiAoc2ltaWxhciB0byBKYXZhZG9jKS4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworCisjIElmIHRoZSBSRVBFQVRfQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24KKyMKKyMgTm90ZTogSWYgYm90aCBISURFX1VORE9DX01FTUJFUlMgYW5kIEJSSUVGX01FTUJFUl9ERVNDIGFyZSBzZXQgdG8gTk8sIHRoZQorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKKworIyBUaGlzIHRhZyBpbXBsZW1lbnRzIGEgcXVhc2ktaW50ZWxsaWdlbnQgYnJpZWYgZGVzY3JpcHRpb24gYWJicmV2aWF0b3IgdGhhdCBpcworIyB1c2VkIHRvIGZvcm0gdGhlIHRleHQgaW4gdmFyaW91cyBsaXN0aW5ncy4gRWFjaCBzdHJpbmcgaW4gdGhpcyBsaXN0LCBpZiBmb3VuZAorIyBhcyB0aGUgbGVhZGluZyB0ZXh0IG9mIHRoZSBicmllZiBkZXNjcmlwdGlvbiwgd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSB0ZXh0CisjIGFuZCB0aGUgcmVzdWx0LCBhZnRlciBwcm9jZXNzaW5nIHRoZSB3aG9sZSBsaXN0LCBpcyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQKKyMgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gSWYgbGVmdCBibGFuaywgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgKCRuYW1lIGlzIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZgorIyB0aGUgZW50aXR5KTpUaGUgJG5hbWUgY2xhc3MsIFRoZSAkbmFtZSB3aWRnZXQsIFRoZSAkbmFtZSBmaWxlLCBpcywgcHJvdmlkZXMsCisjIHNwZWNpZmllcywgY29udGFpbnMsIHJlcHJlc2VudHMsIGEsIGFuIGFuZCB0aGUuCisKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAiVGhlICRuYW1lIGNsYXNzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSAkbmFtZSB3aWRnZXQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRuYW1lIGZpbGUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKworIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRldGFpbGVkIHNlY3Rpb24gZXZlbiBpZiB0aGVyZSBpcyBvbmx5IGEgYnJpZWYKKyMgZGVzY3JpcHRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsCisjIGluaGVyaXRlZCBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZQorIyBtZW1iZXJzIHdlcmUgb3JkaW5hcnkgY2xhc3MgbWVtYmVycy4gQ29uc3RydWN0b3JzLCBkZXN0cnVjdG9ycyBhbmQgYXNzaWdubWVudAorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8KKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBwcmVwZW5kIHRoZSBmdWxsIHBhdGgKKyMgYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0IHRvIE5PIHRoZQorIyBzaG9ydGVzdCBwYXRoIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUgd2lsbCBiZSB1c2VkCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0ZVTExfUEFUSF9OQU1FUyAgICAgICAgPSBZRVMKKworIyBUaGUgU1RSSVBfRlJPTV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZSBwYXRoLgorIyBTdHJpcHBpbmcgaXMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kCisjIHBhcnQgb2YgdGhlIHBhdGguIFRoZSB0YWcgY2FuIGJlIHVzZWQgdG8gc2hvdyByZWxhdGl2ZSBwYXRocyBpbiB0aGUgZmlsZSBsaXN0LgorIyBJZiBsZWZ0IGJsYW5rIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBkb3h5Z2VuIGlzIHJ1biBpcyB1c2VkIGFzIHRoZSBwYXRoIHRvCisjIHN0cmlwLgorIworIyBOb3RlIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGFic29sdXRlIHBhdGhzIGhlcmUsIGJ1dCBhbHNvIHJlbGF0aXZlIHBhdGhzLCB3aGljaAorIyB3aWxsIGJlIHJlbGF0aXZlIGZyb20gdGhlIGRpcmVjdG9yeSB3aGVyZSBkb3h5Z2VuIGlzIHN0YXJ0ZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBGVUxMX1BBVEhfTkFNRVMgaXMgc2V0IHRvIFlFUy4KKworU1RSSVBfRlJPTV9QQVRIICAgICAgICA9IEBhYnNfdG9wX3NyY2RpckAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEBhYnNfdG9wX2J1aWxkZGlyQAorCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZQorIyBwYXRoIG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIGNsYXNzLCB3aGljaCB0ZWxscyB0aGUgcmVhZGVyIHdoaWNoCisjIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIGEgY2xhc3MuIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZgorIyB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyB1c2VkLiBPdGhlcndpc2Ugb25lIHNob3VsZAorIyBzcGVjaWZ5IHRoZSBsaXN0IG9mIGluY2x1ZGUgcGF0aHMgdGhhdCBhcmUgbm9ybWFsbHkgcGFzc2VkIHRvIHRoZSBjb21waWxlcgorIyB1c2luZyB0aGUgLUkgZmxhZy4KKworU1RSSVBfRlJPTV9JTkNfUEFUSCAgICA9IEBhYnNfdG9wX3NyY2RpckAKKworIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIgKGJ1dAorIyBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMgZG9lc24ndAorIyBzdXBwb3J0IGxvbmcgbmFtZXMgbGlrZSBvbiBET1MsIE1hYywgb3IgQ0QtUk9NLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NIT1JUX05BTUVTICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBKQVZBRE9DX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlCisjIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YWRvYy1zdHlsZSBjb21tZW50IGFzIHRoZSBicmllZgorIyBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgSmF2YWRvYy1zdHlsZSB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC0KKyMgc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IEBicmllZiBjb21tYW5kIGZvciBhIGJyaWVmCisjIGRlc2NyaXB0aW9uLikKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gWUVTCisKKyMgSWYgdGhlIFFUX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0CisjIGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmCisjIHNldCB0byBOTywgdGhlIFF0LXN0eWxlIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzCisjIHJlcXVpcmluZyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVRfQVVUT0JSSUVGICAgICAgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgZG94eWdlbiB0cmVhdCBhCisjIG11bHRpLWxpbmUgQysrIHNwZWNpYWwgY29tbWVudCBibG9jayAoaS5lLiBhIGJsb2NrIG9mIC8vISBvciAvLy8gY29tbWVudHMpIGFzCisjIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIG5ldyBkZWZhdWx0IGlzCisjIHRvIHRyZWF0IGEgbXVsdGktbGluZSBDKysgY29tbWVudCBibG9jayBhcyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBTZXQgdGhpcworIyB0YWcgdG8gWUVTIGlmIHlvdSBwcmVmZXIgdGhlIG9sZCBiZWhhdmlvciBpbnN0ZWFkLgorIworIyBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIHRhZyB0byBZRVMgYWxzbyBtZWFucyB0aGF0IHJhdGlvbmFsIHJvc2UgY29tbWVudHMgYXJlCisjIG5vdCByZWNvZ25pemVkIGFueSBtb3JlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworCisjIElmIHRoZSBJTkhFUklUX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhbiB1bmRvY3VtZW50ZWQgbWVtYmVyIGluaGVyaXRzIHRoZQorIyBkb2N1bWVudGF0aW9uIGZyb20gYW55IGRvY3VtZW50ZWQgbWVtYmVyIHRoYXQgaXQgcmUtaW1wbGVtZW50cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UgYQorIyBuZXcgcGFnZSBmb3IgZWFjaCBtZW1iZXIuIElmIHNldCB0byBOTywgdGhlIGRvY3VtZW50YXRpb24gb2YgYSBtZW1iZXIgd2lsbCBiZQorIyBwYXJ0IG9mIHRoZSBmaWxlL2NsYXNzL25hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIGl0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NFUEFSQVRFX01FTUJFUl9QQUdFUyAgPSBOTworCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLiBEb3h5Z2VuCisjIHVzZXMgdGhpcyB2YWx1ZSB0byByZXBsYWNlIHRhYnMgYnkgc3BhY2VzIGluIGNvZGUgZnJhZ21lbnRzLgorIyBNaW5pbXVtIHZhbHVlOiAxLCBtYXhpbXVtIHZhbHVlOiAxNiwgZGVmYXVsdCB2YWx1ZTogNC4KKworVEFCX1NJWkUgICAgICAgICAgICAgICA9IDQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGFsaWFzZXMgdGhhdCBhY3QgYXMgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybToKKyMgbmFtZT12YWx1ZQorIyBGb3IgZXhhbXBsZSBhZGRpbmcKKyMgInNpZGVlZmZlY3Q9QHBhciBTaWRlIEVmZmVjdHM6XG4iCisjIHdpbGwgYWxsb3cgeW91IHRvIHB1dCB0aGUgY29tbWFuZCBcc2lkZWVmZmVjdCAob3IgQHNpZGVlZmZlY3QpIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHVzZXItZGVmaW5lZCBwYXJhZ3JhcGggd2l0aCBoZWFkaW5nCisjICJTaWRlIEVmZmVjdHM6Ii4gWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQKKyMgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPQorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2Ygd29yZC1rZXl3b3JkIG1hcHBpbmdzIChUQ0wgb25seSkuCisjIEEgbWFwcGluZyBoYXMgdGhlIGZvcm0gIm5hbWU9dmFsdWUiLiBGb3IgZXhhbXBsZSBhZGRpbmcgImNsYXNzPWl0Y2w6OmNsYXNzIgorIyB3aWxsIGFsbG93IHlvdSB0byB1c2UgdGhlIGNvbW1hbmQgY2xhc3MgaW4gdGhlIGl0Y2w6OmNsYXNzIG1lYW5pbmcuCisKK1RDTF9TVUJTVCAgICAgICAgICAgICAgPQorCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0ZPUl9DIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEMgc291cmNlcworIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBDLiBGb3IKKyMgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IG9mIGFsbAorIyBtZW1iZXJzIHdpbGwgYmUgb21pdHRlZCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9GT1JfQyAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBvcgorIyBQeXRob24gc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkCisjIGZvciB0aGF0IGxhbmd1YWdlLiBGb3IgaW5zdGFuY2UsIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsCisjIHF1YWxpZmllZCBzY29wZXMgd2lsbCBsb29rIGRpZmZlcmVudCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfRk9SX0ZPUlRSQU4gdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgRm9ydHJhbgorIyBzb3VyY2VzLiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyB0YWlsb3JlZCBmb3IgRm9ydHJhbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9GT1JfRk9SVFJBTiAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9WSERMIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIFZIREwKKyMgc291cmNlcy4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgdGFpbG9yZWQgZm9yIFZIREwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX1ZIREwgICA9IE5PCisKKyMgRG94eWdlbiBzZWxlY3RzIHRoZSBwYXJzZXIgdG8gdXNlIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlcyBpdAorIyBwYXJzZXMuIFdpdGggdGhpcyB0YWcgeW91IGNhbiBhc3NpZ24gd2hpY2ggcGFyc2VyIHRvIHVzZSBmb3IgYSBnaXZlbgorIyBleHRlbnNpb24uIERveHlnZW4gaGFzIGEgYnVpbHQtaW4gbWFwcGluZywgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgb3IgZXh0ZW5kIGl0CisjIHVzaW5nIHRoaXMgdGFnLiBUaGUgZm9ybWF0IGlzIGV4dD1sYW5ndWFnZSwgd2hlcmUgZXh0IGlzIGEgZmlsZSBleHRlbnNpb24sIGFuZAorIyBsYW5ndWFnZSBpcyBvbmUgb2YgdGhlIHBhcnNlcnMgc3VwcG9ydGVkIGJ5IGRveHlnZW46IElETCwgSmF2YSwgSmF2YXNjcmlwdCwKKyMgQyMsIEMsIEMrKywgRCwgUEhQLCBPYmplY3RpdmUtQywgUHl0aG9uLCBGb3J0cmFuLCBWSERMLiBGb3IgaW5zdGFuY2UgdG8gbWFrZQorIyBkb3h5Z2VuIHRyZWF0IC5pbmMgZmlsZXMgYXMgRm9ydHJhbiBmaWxlcyAoZGVmYXVsdCBpcyBQSFApLCBhbmQgLmYgZmlsZXMgYXMgQworIyAoZGVmYXVsdCBpcyBGb3J0cmFuKSwgdXNlOiBpbmM9Rm9ydHJhbiBmPUMuCisjCisjIE5vdGUgRm9yIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9uIHlvdSBjYW4gdXNlIG5vX2V4dGVuc2lvbiBhcyBhIHBsYWNlaG9sZGVyLgorIworIyBOb3RlIHRoYXQgZm9yIGN1c3RvbSBleHRlbnNpb25zIHlvdSBhbHNvIG5lZWQgdG8gc2V0IEZJTEVfUEFUVEVSTlMgb3RoZXJ3aXNlCisjIHRoZSBmaWxlcyBhcmUgbm90IHJlYWQgYnkgZG94eWdlbi4KKworRVhURU5TSU9OX01BUFBJTkcgICAgICA9CisKKyMgSWYgdGhlIE1BUktET1dOX1NVUFBPUlQgdGFnIGlzIGVuYWJsZWQgdGhlbiBkb3h5Z2VuIHByZS1wcm9jZXNzZXMgYWxsIGNvbW1lbnRzCisjIGFjY29yZGluZyB0byB0aGUgTWFya2Rvd24gZm9ybWF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcmVhZGFibGUKKyMgZG9jdW1lbnRhdGlvbi4gU2VlIGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vIGZvciBkZXRhaWxzLgorIyBUaGUgb3V0cHV0IG9mIG1hcmtkb3duIHByb2Nlc3NpbmcgaXMgZnVydGhlciBwcm9jZXNzZWQgYnkgZG94eWdlbiwgc28geW91IGNhbgorIyBtaXggZG94eWdlbiwgSFRNTCwgYW5kIFhNTCBjb21tYW5kcyB3aXRoIE1hcmtkb3duIGZvcm1hdHRpbmcuIERpc2FibGUgb25seSBpbgorIyBjYXNlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdGllcyBpc3N1ZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK01BUktET1dOX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBXaGVuIGVuYWJsZWQgZG94eWdlbiB0cmllcyB0byBsaW5rIHdvcmRzIHRoYXQgY29ycmVzcG9uZCB0byBkb2N1bWVudGVkCisjIGNsYXNzZXMsIG9yIG5hbWVzcGFjZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uLiBTdWNoIGEgbGluayBjYW4KKyMgYmUgcHJldmVudGVkIGluIGluZGl2aWR1YWwgY2FzZXMgYnkgYnkgcHV0dGluZyBhICUgc2lnbiBpbiBmcm9udCBvZiB0aGUgd29yZAorIyBvciBnbG9iYWxseSBieSBzZXR0aW5nIEFVVE9MSU5LX1NVUFBPUlQgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FVVE9MSU5LX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50CisjIHRvIGluY2x1ZGUgKGEgdGFnIGZpbGUgZm9yKSB0aGUgU1RMIHNvdXJjZXMgYXMgaW5wdXQsIHRoZW4geW91IHNob3VsZCBzZXQgdGhpcworIyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOworIyB2ZXJzdXMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZSB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBOTworCisjIElmIHlvdSB1c2UgTWljcm9zb2Z0J3MgQysrL0NMSSBsYW5ndWFnZSwgeW91IHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvCisjIGVuYWJsZSBwYXJzaW5nIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQ1BQX0NMSV9TVVBQT1JUICAgICAgICA9IE5PCisKKyMgU2V0IHRoZSBTSVBfU1VQUE9SVCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBzaXAgKHNlZToKKyMgaHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwL2ludHJvKSBzb3VyY2VzIG9ubHkuIERveHlnZW4KKyMgd2lsbCBwYXJzZSB0aGVtIGxpa2Ugbm9ybWFsIEMrKyBidXQgd2lsbCBhc3N1bWUgYWxsIGNsYXNzZXMgdXNlIHB1YmxpYyBpbnN0ZWFkCisjIG9mIHByaXZhdGUgaW5oZXJpdGFuY2Ugd2hlbiBubyBleHBsaWNpdCBwcm90ZWN0aW9uIGtleXdvcmQgaXMgcHJlc2VudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSVBfU1VQUE9SVCAgICAgICAgICAgID0gTk8KKworIyBGb3IgTWljcm9zb2Z0J3MgSURMIHRoZXJlIGFyZSBwcm9wZ2V0IGFuZCBwcm9wcHV0IGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUKKyMgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBZRVMgd2lsbCBtYWtlCisjIGRveHlnZW4gdG8gcmVwbGFjZSB0aGUgZ2V0IGFuZCBzZXQgbWV0aG9kcyBieSBhIHByb3BlcnR5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBtZXRob2RzIGFyZSBpbmRlZWQgZ2V0dGluZyBvciBzZXR0aW5nIGEgc2ltcGxlCisjIHR5cGUuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB5b3Ugd2FudCB0byBzaG93IHRoZSBtZXRob2RzIGFueXdheSwgeW91CisjIHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lETF9QUk9QRVJUWV9TVVBQT1JUICAgPSBZRVMKKworIyBJZiBtZW1iZXIgZ3JvdXBpbmcgaXMgdXNlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIERJU1RSSUJVVEVfR1JPVVBfRE9DCisjIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCByZXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0CisjIGFsbCBtZW1iZXJzIG9mIGEgZ3JvdXAgbXVzdCBiZSBkb2N1bWVudGVkIGV4cGxpY2l0bHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCisKKyMgU2V0IHRoZSBTVUJHUk9VUElORyB0YWcgdG8gWUVTIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgdGhlIHNhbWUgdHlwZQorIyAoZm9yIGluc3RhbmNlIGEgZ3JvdXAgb2YgcHVibGljIGZ1bmN0aW9ucykgdG8gYmUgcHV0IGFzIGEgc3ViZ3JvdXAgb2YgdGhhdAorIyB0eXBlIChlLmcuIHVuZGVyIHRoZSBQdWJsaWMgRnVuY3Rpb25zIHNlY3Rpb24pLiBTZXQgaXQgdG8gTk8gdG8gcHJldmVudAorIyBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgdGhlCisjIFxub3N1Ymdyb3VwaW5nIGNvbW1hbmQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NVQkdST1VQSU5HICAgICAgICAgICAgPSBZRVMKKworIyBXaGVuIHRoZSBJTkxJTkVfR1JPVVBFRF9DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBjbGFzc2VzLCBzdHJ1Y3RzIGFuZCB1bmlvbnMKKyMgYXJlIHNob3duIGluc2lkZSB0aGUgZ3JvdXAgaW4gd2hpY2ggdGhleSBhcmUgaW5jbHVkZWQgKGUuZy4gdXNpbmcgXGluZ3JvdXApCisjIGluc3RlYWQgb2Ygb24gYSBzZXBhcmF0ZSBwYWdlIChmb3IgSFRNTCBhbmQgTWFuIHBhZ2VzKSBvciBzZWN0aW9uIChmb3IgTGFUZVgKKyMgYW5kIFJURikuCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgZG9lcyBub3Qgd29yayBpbiBjb21iaW5hdGlvbiB3aXRoCisjIFNFUEFSQVRFX01FTUJFUl9QQUdFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfR1JPVVBFRF9DTEFTU0VTID0gTk8KKworIyBXaGVuIHRoZSBJTkxJTkVfU0lNUExFX1NUUlVDVFMgdGFnIGlzIHNldCB0byBZRVMsIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMKKyMgd2l0aCBvbmx5IHB1YmxpYyBkYXRhIGZpZWxkcyBvciBzaW1wbGUgdHlwZWRlZiBmaWVsZHMgd2lsbCBiZSBzaG93biBpbmxpbmUgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHNjb3BlIGluIHdoaWNoIHRoZXkgYXJlIGRlZmluZWQgKGkuZS4gZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBncm91cCBkb2N1bWVudGF0aW9uKSwgcHJvdmlkZWQgdGhpcyBzY29wZSBpcyBkb2N1bWVudGVkLiBJZiBzZXQKKyMgdG8gTk8sIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMgYXJlIHNob3duIG9uIGEgc2VwYXJhdGUgcGFnZSAoZm9yIEhUTUwgYW5kCisjIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYIGFuZCBSVEYpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOTElORV9TSU1QTEVfU1RSVUNUUyAgPSBOTworCisjIFdoZW4gVFlQRURFRl9ISURFU19TVFJVQ1QgdGFnIGlzIGVuYWJsZWQsIGEgdHlwZWRlZiBvZiBhIHN0cnVjdCwgdW5pb24sIG9yCisjIGVudW0gaXMgZG9jdW1lbnRlZCBhcyBzdHJ1Y3QsIHVuaW9uLCBvciBlbnVtIHdpdGggdGhlIG5hbWUgb2YgdGhlIHR5cGVkZWYuIFNvCisjIHR5cGVkZWYgc3RydWN0IFR5cGVTIHt9IFR5cGVULCB3aWxsIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHN0cnVjdAorIyB3aXRoIG5hbWUgVHlwZVQuIFdoZW4gZGlzYWJsZWQgdGhlIHR5cGVkZWYgd2lsbCBhcHBlYXIgYXMgYSBtZW1iZXIgb2YgYSBmaWxlLAorIyBuYW1lc3BhY2UsIG9yIGNsYXNzLiBBbmQgdGhlIHN0cnVjdCB3aWxsIGJlIG5hbWVkIFR5cGVTLiBUaGlzIGNhbiB0eXBpY2FsbHkgYmUKKyMgdXNlZnVsIGZvciBDIGNvZGUgaW4gY2FzZSB0aGUgY29kaW5nIGNvbnZlbnRpb24gZGljdGF0ZXMgdGhhdCBhbGwgY29tcG91bmQKKyMgdHlwZXMgYXJlIHR5cGVkZWYnZWQgYW5kIG9ubHkgdGhlIHR5cGVkZWYgaXMgcmVmZXJlbmNlZCwgbmV2ZXIgdGhlIHRhZyBuYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1RZUEVERUZfSElERVNfU1RSVUNUICAgPSBOTworCisjIFRoZSBzaXplIG9mIHRoZSBzeW1ib2wgbG9va3VwIGNhY2hlIGNhbiBiZSBzZXQgdXNpbmcgTE9PS1VQX0NBQ0hFX1NJWkUuIFRoaXMKKyMgY2FjaGUgaXMgdXNlZCB0byByZXNvbHZlIHN5bWJvbHMgZ2l2ZW4gdGhlaXIgbmFtZSBhbmQgc2NvcGUuIFNpbmNlIHRoaXMgY2FuIGJlCisjIGFuIGV4cGVuc2l2ZSBwcm9jZXNzIGFuZCBvZnRlbiB0aGUgc2FtZSBzeW1ib2wgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUKKyMgY29kZSwgZG94eWdlbiBrZWVwcyBhIGNhY2hlIG9mIHByZS1yZXNvbHZlZCBzeW1ib2xzLiBJZiB0aGUgY2FjaGUgaXMgdG9vIHNtYWxsCisjIGRveHlnZW4gd2lsbCBiZWNvbWUgc2xvd2VyLiBJZiB0aGUgY2FjaGUgaXMgdG9vIGxhcmdlLCBtZW1vcnkgaXMgd2FzdGVkLiBUaGUKKyMgY2FjaGUgc2l6ZSBpcyBnaXZlbiBieSB0aGlzIGZvcm11bGE6IDJeKDE2K0xPT0tVUF9DQUNIRV9TSVpFKS4gVGhlIHZhbGlkIHJhbmdlCisjIGlzIDAuLjksIHRoZSBkZWZhdWx0IGlzIDAsIGNvcnJlc3BvbmRpbmcgdG8gYSBjYWNoZSBzaXplIG9mIDJeMTY9NjU1MzYKKyMgc3ltYm9scy4gQXQgdGhlIGVuZCBvZiBhIHJ1biBkb3h5Z2VuIHdpbGwgcmVwb3J0IHRoZSBjYWNoZSB1c2FnZSBhbmQgc3VnZ2VzdAorIyB0aGUgb3B0aW1hbCBjYWNoZSBzaXplIGZyb20gYSBzcGVlZCBwb2ludCBvZiB2aWV3LgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiA5LCBkZWZhdWx0IHZhbHVlOiAwLgorCitMT09LVVBfQ0FDSEVfU0laRSAgICAgID0gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLiBQcml2YXRlCisjIGNsYXNzIG1lbWJlcnMgYW5kIHN0YXRpYyBmaWxlIG1lbWJlcnMgd2lsbCBiZSBoaWRkZW4gdW5sZXNzIHRoZQorIyBFWFRSQUNUX1BSSVZBVEUgcmVzcGVjdGl2ZWx5IEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgd2lsbCBhbHNvIGRpc2FibGUgdGhlIHdhcm5pbmdzIGFib3V0IHVuZG9jdW1lbnRlZCBtZW1iZXJzIHRoYXQgYXJlCisjIG5vcm1hbGx5IHByb2R1Y2VkIHdoZW4gV0FSTklOR1MgaXMgc2V0IHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9QUklWQVRFIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBwcml2YXRlIG1lbWJlcnMgb2YgYSBjbGFzcyB3aWxsCisjIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRSQUNUX1BBQ0tBR0UgdGFnIGlzIHNldCB0byBZRVMgYWxsIG1lbWJlcnMgd2l0aCBwYWNrYWdlIG9yIGludGVybmFsCisjIHNjb3BlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QQUNLQUdFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfU1RBVElDIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBzdGF0aWMgbWVtYmVycyBvZiBhIGZpbGUgd2lsbCBiZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUyBjbGFzc2VzIChhbmQgc3RydWN0cykgZGVmaW5lZAorIyBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gTk8KKyMgb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4gRG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0CisjIGZvciBKYXZhIHNvdXJjZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMKKworIyBUaGlzIGZsYWcgaXMgb25seSB1c2VmdWwgZm9yIE9iamVjdGl2ZS1DIGNvZGUuIFdoZW4gc2V0IHRvIFlFUyBsb2NhbCBtZXRob2RzLAorIyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2VjdGlvbiBidXQgbm90IGluIHRoZSBpbnRlcmZhY2UgYXJlCisjIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gTk8gb25seSBtZXRob2RzIGluIHRoZSBpbnRlcmZhY2UgYXJlCisjIGluY2x1ZGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfTE9DQUxfTUVUSE9EUyAgPSBOTworCisjIElmIHRoaXMgZmxhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBhbm9ueW1vdXMgbmFtZXNwYWNlcyB3aWxsIGJlCisjIGV4dHJhY3RlZCBhbmQgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFzIGEgbmFtZXNwYWNlIGNhbGxlZAorIyAnYW5vbnltb3VzX25hbWVzcGFjZXtmaWxlfScsIHdoZXJlIGZpbGUgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBiYXNlIG5hbWUgb2YKKyMgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZS4gQnkgZGVmYXVsdCBhbm9ueW1vdXMgbmFtZXNwYWNlCisjIGFyZSBoaWRkZW4uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9BTk9OX05TUEFDRVMgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIHVuZG9jdW1lbnRlZCBtZW1iZXJzIGluc2lkZSBkb2N1bWVudGVkIGNsYXNzZXMgb3IgZmlsZXMuIElmIHNldCB0byBOTyB0aGVzZQorIyBtZW1iZXJzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLCBidXQgbm8gZG9jdW1lbnRhdGlvbgorIyBzZWN0aW9uIGlzIGdlbmVyYXRlZC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfVU5ET0NfTUVNQkVSUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuIElmIHNldAorIyB0byBOTyB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbiBoYXMKKyMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsIGZyaWVuZAorIyAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuIElmIHNldCB0byBOTyB0aGVzZSBkZWNsYXJhdGlvbnMgd2lsbCBiZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX0ZSSUVORF9DT01QT1VORFMgID0gTk8KKworIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFueQorIyBkb2N1bWVudGF0aW9uIGJsb2NrcyBmb3VuZCBpbnNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4gSWYgc2V0IHRvIE5PIHRoZXNlCisjIGJsb2NrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBmdW5jdGlvbidzIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYmxvY2suCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbiB0aGF0IGlzIHR5cGVkIGFmdGVyIGEKKyMgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gdGhlIGRvY3VtZW50YXRpb24KKyMgd2lsbCBiZSBleGNsdWRlZC4gU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZSBmaWxlCisjIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUyB1cHBlci1jYXNlIGxldHRlcnMgYXJlIGFsc28KKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlcgorIyBpbiBjYXNlIGFuZCBpZiB5b3VyIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgbmFtZXMuIFdpbmRvd3MKKyMgYW5kIE1hYyB1c2VycyBhcmUgYWR2aXNlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBzeXN0ZW0gZGVwZW5kZW50LgorCitDQVNFX1NFTlNFX05BTUVTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IG1lbWJlcnMgd2l0aAorIyB0aGVpciBmdWxsIGNsYXNzIGFuZCBuYW1lc3BhY2Ugc2NvcGVzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTIHRoZQorIyBzY29wZSB3aWxsIGJlIGhpZGRlbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHB1dCBhIGxpc3Qgb2YKKyMgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZpbGUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfSU5DTFVERV9GSUxFUyAgICAgPSBZRVMKKworIyBJZiB0aGUgU0hPV19HUk9VUEVEX01FTUJfSU5DIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsIGFkZCBmb3IgZWFjaAorIyBncm91cGVkIG1lbWJlciBhbiBpbmNsdWRlIHN0YXRlbWVudCB0byB0aGUgZG9jdW1lbnRhdGlvbiwgdGVsbGluZyB0aGUgcmVhZGVyCisjIHdoaWNoIGZpbGUgdG8gaW5jbHVkZSBpbiBvcmRlciB0byB1c2UgdGhlIG1lbWJlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSE9XX0dST1VQRURfTUVNQl9JTkMgID0gTk8KKworIyBJZiB0aGUgRk9SQ0VfTE9DQUxfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbGlzdCBpbmNsdWRlCisjIGZpbGVzIHdpdGggZG91YmxlIHF1b3RlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiByYXRoZXIgdGhhbiB3aXRoIHNoYXJwIGJyYWNrZXRzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0ZPUkNFX0xPQ0FMX0lOQ0xVREVTICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgdGFnIFtpbmxpbmVdIGlzIGluc2VydGVkIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIGZvciBpbmxpbmUgbWVtYmVycy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX01FTUJFUl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlCisjIChkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBmaWxlIGFuZCBjbGFzcyBtZW1iZXJzIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlcgorIyBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gZGVjbGFyYXRpb24gb3JkZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NPUlRfTUVNQkVSX0RPQ1MgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU09SVF9CUklFRl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9ucyBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyCisjIG5hbWUuIElmIHNldCB0byBOTyB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiBkZWNsYXJhdGlvbiBvcmRlci4gTm90ZSB0aGF0CisjIHRoaXMgd2lsbCBhbHNvIGluZmx1ZW5jZSB0aGUgb3JkZXIgb2YgdGhlIGNsYXNzZXMgaW4gdGhlIGNsYXNzIGxpc3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9CUklFRl9ET0NTICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSU19DVE9SU18xU1QgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgKGJyaWVmIGFuZCBkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBjbGFzcyBtZW1iZXJzIHNvIHRoYXQgY29uc3RydWN0b3JzIGFuZAorIyBkZXN0cnVjdG9ycyBhcmUgbGlzdGVkIGZpcnN0LiBJZiBzZXQgdG8gTk8gdGhlIGNvbnN0cnVjdG9ycyB3aWxsIGFwcGVhciBpbiB0aGUKKyMgcmVzcGVjdGl2ZSBvcmRlcnMgZGVmaW5lZCBieSBTT1JUX0JSSUVGX0RPQ1MgYW5kIFNPUlRfTUVNQkVSX0RPQ1MuCisjIE5vdGU6IElmIFNPUlRfQlJJRUZfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZyBicmllZgorIyBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgTm90ZTogSWYgU09SVF9NRU1CRVJfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZworIyBkZXRhaWxlZCBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX01FTUJFUlNfQ1RPUlNfMVNUID0gTk8KKworIyBJZiB0aGUgU09SVF9HUk9VUF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSBoaWVyYXJjaHkKKyMgb2YgZ3JvdXAgbmFtZXMgaW50byBhbHBoYWJldGljYWwgb3JkZXIuIElmIHNldCB0byBOTyB0aGUgZ3JvdXAgbmFtZXMgd2lsbAorIyBhcHBlYXIgaW4gdGhlaXIgZGVmaW5lZCBvcmRlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0dST1VQX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9CWV9TQ09QRV9OQU1FIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlIHNvcnRlZCBieQorIyBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8gTk8sIHRoZSBjbGFzcyBsaXN0IHdpbGwKKyMgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwgbm90IGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlIHBhcnQuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgY2xhc3MgbGlzdCwgbm90IHRvIHRoZSBhbHBoYWJldGljYWwKKyMgbGlzdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0JZX1NDT1BFX05BTUUgICAgID0gTk8KKworIyBJZiB0aGUgU1RSSUNUX1BST1RPX01BVENISU5HIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBkb3h5Z2VuIGZhaWxzIHRvIGRvIHByb3BlcgorIyB0eXBlIHJlc29sdXRpb24gb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBpdCB3aWxsIHJlamVjdCBhIG1hdGNoIGJldHdlZW4KKyMgdGhlIHByb3RvdHlwZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMKKyMgb25seSBvbmUgY2FuZGlkYXRlIG9yIGl0IGlzIG9idmlvdXMgd2hpY2ggY2FuZGlkYXRlIHRvIGNob29zZSBieSBkb2luZyBhCisjIHNpbXBsZSBzdHJpbmcgbWF0Y2guIEJ5IGRpc2FibGluZyBTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgZG94eWdlbiB3aWxsIHN0aWxsCisjIGFjY2VwdCBhIG1hdGNoIGJldHdlZW4gcHJvdG90eXBlIGFuZCBpbXBsZW1lbnRhdGlvbiBpbiBzdWNoIGNhc2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NUUklDVF9QUk9UT19NQVRDSElORyAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UT0RPTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlICggWUVTKSBvciBkaXNhYmxlICggTk8pIHRoZQorIyB0b2RvIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRvZG8gY29tbWFuZHMgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUKKyMgdGVzdCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0ZXN0IGNvbW1hbmRzIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUgYnVnCisjIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGJ1ZyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfQlVHTElTVCAgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9ERVBSRUNBVEVETElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlICggWUVTKSBvciBkaXNhYmxlICggTk8pCisjIHRoZSBkZXByZWNhdGVkIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsIGRvY3VtZW50YXRpb24KKyMgc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgPHNlY3Rpb25fbGFiZWw+IC4uLiBcZW5kaWYgYW5kIFxjb25kIDxzZWN0aW9uX2xhYmVsPgorIyAuLi4gXGVuZGNvbmQgYmxvY2tzLgorCitFTkFCTEVEX1NFQ1RJT05TICAgICAgID0KKworIyBUaGUgTUFYX0lOSVRJQUxJWkVSX0xJTkVTIHRhZyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHRoZQorIyBpbml0aWFsIHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgbWFjcm8gLyBkZWZpbmUgY2FuIGhhdmUgZm9yIGl0IHRvIGFwcGVhciBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemVyIGNvbnNpc3RzIG9mIG1vcmUgbGluZXMgdGhhbiBzcGVjaWZpZWQgaGVyZQorIyBpdCB3aWxsIGJlIGhpZGRlbi4gVXNlIGEgdmFsdWUgb2YgMCB0byBoaWRlIGluaXRpYWxpemVycyBjb21wbGV0ZWx5LiBUaGUKKyMgYXBwZWFyYW5jZSBvZiB0aGUgdmFsdWUgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIG1hY3JvcyAvIGRlZmluZXMgY2FuIGJlCisjIGNvbnRyb2xsZWQgdXNpbmcgXHNob3dpbml0aWFsaXplciBvciBcaGlkZWluaXRpYWxpemVyIGNvbW1hbmQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMDAwLCBkZWZhdWx0IHZhbHVlOiAzMC4KKworTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCisKKyMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkIGF0CisjIHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50YXRpb24gb2YgY2xhc3NlcyBhbmQgc3RydWN0cy4gSWYgc2V0IHRvIFlFUyB0aGUgbGlzdAorIyB3aWxsIG1lbnRpb24gdGhlIGZpbGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX1VTRURfRklMRVMgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBGaWxlcyBwYWdlLiBUaGlzCisjIHdpbGwgcmVtb3ZlIHRoZSBGaWxlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUgRm9sZGVyIFRyZWUgVmlldworIyAoaWYgc3BlY2lmaWVkKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19GSUxFUyAgICAgICAgICAgICA9IFlFUworCisjIFNldCB0aGUgU0hPV19OQU1FU1BBQ0VTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBOYW1lc3BhY2VzCisjIHBhZ2UuIFRoaXMgd2lsbCByZW1vdmUgdGhlIE5hbWVzcGFjZXMgZW50cnkgZnJvbSB0aGUgUXVpY2sgSW5kZXggYW5kIGZyb20gdGhlCisjIEZvbGRlciBUcmVlIFZpZXcgKGlmIHNwZWNpZmllZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfTkFNRVNQQUNFUyAgICAgICAgPSBZRVMKKworIyBUaGUgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gb3Igc2NyaXB0IHRoYXQKKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tCisjIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtKS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgcHJvZ3JhbSBieSBleGVjdXRpbmcgKHZpYQorIyBwb3BlbigpKSB0aGUgY29tbWFuZCBjb21tYW5kIGlucHV0LWZpbGUsIHdoZXJlIGNvbW1hbmQgaXMgdGhlIHZhbHVlIG9mIHRoZQorIyBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIGlucHV0LWZpbGUgaXMgdGhlIG5hbWUgb2YgYW4gaW5wdXQgZmlsZSBwcm92aWRlZAorIyBieSBkb3h5Z2VuLiBXaGF0ZXZlciB0aGUgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQgYXMgdGhlIGZpbGUKKyMgdmVyc2lvbi4gRm9yIGFuIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorCitGSUxFX1ZFUlNJT05fRklMVEVSICAgID0KKworIyBUaGUgTEFZT1VUX0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsYXlvdXQgZmlsZSB3aGljaCB3aWxsIGJlIHBhcnNlZAorIyBieSBkb3h5Z2VuLiBUaGUgbGF5b3V0IGZpbGUgY29udHJvbHMgdGhlIGdsb2JhbCBzdHJ1Y3R1cmUgb2YgdGhlIGdlbmVyYXRlZAorIyBvdXRwdXQgZmlsZXMgaW4gYW4gb3V0cHV0IGZvcm1hdCBpbmRlcGVuZGVudCB3YXkuIFRvIGNyZWF0ZSB0aGUgbGF5b3V0IGZpbGUKKyMgdGhhdCByZXByZXNlbnRzIGRveHlnZW4ncyBkZWZhdWx0cywgcnVuIGRveHlnZW4gd2l0aCB0aGUgLWwgb3B0aW9uLiBZb3UgY2FuCisjIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGZpbGUgbmFtZSBhZnRlciB0aGUgb3B0aW9uLCBpZiBvbWl0dGVkIERveHlnZW5MYXlvdXQueG1sCisjIHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgbGF5b3V0IGZpbGUuCisjCisjIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGRveHlnZW4gZnJvbSBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZmlsZSBjYWxsZWQKKyMgRG94eWdlbkxheW91dC54bWwsIGRveHlnZW4gd2lsbCBwYXJzZSBpdCBhdXRvbWF0aWNhbGx5IGV2ZW4gaWYgdGhlIExBWU9VVF9GSUxFCisjIHRhZyBpcyBsZWZ0IGVtcHR5LgorCitMQVlPVVRfRklMRSAgICAgICAgICAgID0KKworIyBUaGUgQ0lURV9CSUJfRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgYmliIGZpbGVzIGNvbnRhaW5pbmcKKyMgdGhlIHJlZmVyZW5jZSBkZWZpbml0aW9ucy4gVGhpcyBtdXN0IGJlIGEgbGlzdCBvZiAuYmliIGZpbGVzLiBUaGUgLmJpYgorIyBleHRlbnNpb24gaXMgYXV0b21hdGljYWxseSBhcHBlbmRlZCBpZiBvbWl0dGVkLiBUaGlzIHJlcXVpcmVzIHRoZSBiaWJ0ZXggdG9vbAorIyB0byBiZSBpbnN0YWxsZWQuIFNlZSBhbHNvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGZvciBtb3JlIGluZm8uCisjIEZvciBMYVRlWCB0aGUgc3R5bGUgb2YgdGhlIGJpYmxpb2dyYXBoeSBjYW4gYmUgY29udHJvbGxlZCB1c2luZworIyBMQVRFWF9CSUJfU1RZTEUuIFRvIHVzZSB0aGlzIGZlYXR1cmUgeW91IG5lZWQgYmlidGV4IGFuZCBwZXJsIGF2YWlsYWJsZSBpbiB0aGUKKyMgc2VhcmNoIHBhdGguIERvIG5vdCB1c2UgZmlsZSBuYW1lcyB3aXRoIHNwYWNlcywgYmlidGV4IGNhbm5vdCBoYW5kbGUgdGhlbS4gU2VlCisjIGFsc28gXGNpdGUgZm9yIGluZm8gaG93IHRvIGNyZWF0ZSByZWZlcmVuY2VzLgorCitDSVRFX0JJQl9GSUxFUyAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCB0bworIyBzdGFuZGFyZCBvdXRwdXQgYnkgZG94eWdlbi4gSWYgUVVJRVQgaXMgc2V0IHRvIFlFUyB0aGlzIGltcGxpZXMgdGhhdCB0aGUKKyMgbWVzc2FnZXMgYXJlIG9mZi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitRVUlFVCAgICAgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgV0FSTklOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgYXJlCisjIGdlbmVyYXRlZCB0byBzdGFuZGFyZCBlcnJvciAoIHN0ZGVycikgYnkgZG94eWdlbi4gSWYgV0FSTklOR1MgaXMgc2V0IHRvIFlFUworIyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgd2FybmluZ3MgYXJlIG9uLgorIworIyBUaXA6IFR1cm4gd2FybmluZ3Mgb24gd2hpbGUgd3JpdGluZyB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX1VORE9DVU1FTlRFRCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUKKyMgd2FybmluZ3MgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnCisjIHdpbGwgYXV0b21hdGljYWxseSBiZSBkaXNhYmxlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTl9JRl9VTkRPQ1VNRU5URUQgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX0RPQ19FUlJPUiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzIGZvcgorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIHBhcmFtZXRlcnMKKyMgaW4gYSBkb2N1bWVudGVkIGZ1bmN0aW9uLCBvciBkb2N1bWVudGluZyBwYXJhbWV0ZXJzIHRoYXQgZG9uJ3QgZXhpc3Qgb3IgdXNpbmcKKyMgbWFya3VwIGNvbW1hbmRzIHdyb25nbHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1dBUk5fSUZfRE9DX0VSUk9SICAgICAgPSBZRVMKKworIyBUaGlzIFdBUk5fTk9fUEFSQU1ET0Mgb3B0aW9uIGNhbiBiZSBlbmFibGVkIHRvIGdldCB3YXJuaW5ncyBmb3IgZnVuY3Rpb25zIHRoYXQKKyMgYXJlIGRvY3VtZW50ZWQsIGJ1dCBoYXZlIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZWlyIHBhcmFtZXRlcnMgb3IgcmV0dXJuCisjIHZhbHVlLiBJZiBzZXQgdG8gTk8gZG94eWdlbiB3aWxsIG9ubHkgd2FybiBhYm91dCB3cm9uZyBvciBpbmNvbXBsZXRlIHBhcmFtZXRlcgorIyBkb2N1bWVudGF0aW9uLCBidXQgbm90IGFib3V0IHRoZSBhYnNlbmNlIG9mIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5fRk9STUFUIHRhZyBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBkb3h5Z2VuCisjIGNhbiBwcm9kdWNlLiBUaGUgc3RyaW5nIHNob3VsZCBjb250YWluIHRoZSAkZmlsZSwgJGxpbmUsIGFuZCAkdGV4dCB0YWdzLCB3aGljaAorIyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZSB3YXJuaW5nIG9yaWdpbmF0ZWQKKyMgYW5kIHRoZSB3YXJuaW5nIHRleHQuIE9wdGlvbmFsbHkgdGhlIGZvcm1hdCBtYXkgY29udGFpbiAkdmVyc2lvbiwgd2hpY2ggd2lsbAorIyBiZSByZXBsYWNlZCBieSB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSAoaWYgaXQgY291bGQgYmUgb2J0YWluZWQgdmlhCisjIEZJTEVfVkVSU0lPTl9GSUxURVIpCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAkZmlsZTokbGluZTogJHRleHQuCisKK1dBUk5fRk9STUFUICAgICAgICAgICAgPSAiJGZpbGU6JGxpbmU6ICR0ZXh0IgorCisjIFRoZSBXQVJOX0xPR0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHRvIHdoaWNoIHdhcm5pbmcgYW5kIGVycm9yCisjIG1lc3NhZ2VzIHNob3VsZCBiZSB3cml0dGVuLiBJZiBsZWZ0IGJsYW5rIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byBzdGFuZGFyZAorIyBlcnJvciAoc3RkZXJyKS4KKworV0FSTl9MT0dGSUxFICAgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIElOUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KKyMgZG9jdW1lbnRlZCBzb3VyY2UgZmlsZXMuIFlvdSBtYXkgZW50ZXIgZmlsZSBuYW1lcyBsaWtlIG15ZmlsZS5jcHAgb3IKKyMgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL3NyYy9teXByb2plY3QuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB3aXRoCisjIHNwYWNlcy4KKyMgTm90ZTogSWYgdGhpcyB0YWcgaXMgZW1wdHkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNlYXJjaGVkLgorCitJTlBVVCAgICAgICAgICAgICAgICAgID0gQGFic190b3BfYnVpbGRkaXJAL3NyYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQGFic190b3Bfc3JjZGlyQC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBAYWJzX3RvcF9zcmNkaXJAL2RvYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQGFic190b3Bfc3JjZGlyQC9SRUFETUUubWQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcworIyB0aGF0IGRveHlnZW4gcGFyc2VzLiBJbnRlcm5hbGx5IGRveHlnZW4gdXNlcyB0aGUgVVRGLTggZW5jb2RpbmcuIERveHlnZW4gdXNlcworIyBsaWJpY29udiAob3IgdGhlIGljb252IGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIHRoZSBsaWJpY29udgorIyBkb2N1bWVudGF0aW9uIChzZWU6IGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udikgZm9yIHRoZSBsaXN0IG9mCisjIHBvc3NpYmxlIGVuY29kaW5ncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFVURi04LgorCitJTlBVVF9FTkNPRElORyAgICAgICAgID0gVVRGLTgKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayB0aGUKKyMgZm9sbG93aW5nIHBhdHRlcm5zIGFyZSB0ZXN0ZWQ6Ki5jLCAqLmNjLCAqLmN4eCwgKi5jcHAsICouYysrLCAqLmphdmEsICouaWksCisjICouaXh4LCAqLmlwcCwgKi5pKyssICouaW5sLCAqLmlkbCwgKi5kZGwsICoub2RsLCAqLmgsICouaGgsICouaHh4LCAqLmhwcCwKKyMgKi5oKyssICouY3MsICouZCwgKi5waHAsICoucGhwNCwgKi5waHA1LCAqLnBodG1sLCAqLmluYywgKi5tLCAqLm1hcmtkb3duLAorIyAqLm1kLCAqLm1tLCAqLmRveCwgKi5weSwgKi5mOTAsICouZiwgKi5mb3IsICoudGNsLCAqLnZoZCwgKi52aGRsLCAqLnVjZiwKKyMgKi5xc2YsICouYXMgYW5kICouanMuCisKK0ZJTEVfUEFUVEVSTlMgICAgICAgICAgPSAqLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY2MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3h4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmNwcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5jKysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5qYXZhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLml4eCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5pcHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaSsrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlubCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmhoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmh4eCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5ocHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaCsrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlkbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5vZGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoucGhwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnBocDMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaW5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLm0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICoubW0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZG94IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnB5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmY5MCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5mIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmZvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi52aGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoudmhkbAorCisjIFRoZSBSRUNVUlNJVkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBvciBub3Qgc3ViZGlyZWN0b3JpZXMgc2hvdWxkCisjIGJlIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyBhcyB3ZWxsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBZRVMKKworIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisjCisjIE5vdGUgdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gLi4vc3JjL25jcC9uY3AucGItYy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi9zcmMvbmNwL25jcC5wYi1jLmMKKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZSBzeXN0ZW0gZmVhdHVyZSkgYXJlIGV4Y2x1ZGVkCisjIGZyb20gdGhlIGlucHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYQ0xVREVfU1lNTElOS1MgICAgICAgPSBOTworCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlCisjIGNlcnRhaW4gZmlsZXMgZnJvbSB0aG9zZSBkaXJlY3Rvcmllcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSB3aWxkY2FyZHMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvCisjIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgZm9yIGV4YW1wbGUgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPQorCisjIFRoZSBFWENMVURFX1NZTUJPTFMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgc3ltYm9sIG5hbWVzCisjIChuYW1lc3BhY2VzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGV0Yy4pIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisjIG91dHB1dC4gVGhlIHN5bWJvbCBuYW1lIGNhbiBiZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lLCBhIHdvcmQsIG9yIGlmIHRoZQorIyB3aWxkY2FyZCAqIGlzIHVzZWQsIGEgc3Vic3RyaW5nLiBFeGFtcGxlczogQU5hbWVzcGFjZSwgQUNsYXNzLAorIyBBQ2xhc3M6OkFOYW1lc3BhY2UsIEFOYW1lc3BhY2U6OipUZXN0CisjCisjIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbGUgd2l0aCBhYnNvbHV0ZSBwYXRoLCBzbyB0bworIyBleGNsdWRlIGFsbCB0ZXN0IGRpcmVjdG9yaWVzIHVzZSB0aGUgcGF0dGVybiAqL3Rlc3QvKgorCitFWENMVURFX1NZTUJPTFMgICAgICAgID0KKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisjIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUgdGhlIFxpbmNsdWRlCisjIGNvbW1hbmQpLgorCitFWEFNUExFX1BBVEggICAgICAgICAgID0KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWEFNUExFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAgYW5kCisjICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuayBhbGwKKyMgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gKgorCisjIElmIHRoZSBFWEFNUExFX1JFQ1VSU0lWRSB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKKyMgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgXGluY2x1ZGUgb3IgXGRvbnRpbmNsdWRlIGNvbW1hbmRzCisjIGlycmVzcGVjdGl2ZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFJFQ1VSU0lWRSB0YWcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhBTVBMRV9SRUNVUlNJVkUgICAgICA9IE5PCisKKyMgVGhlIElNQUdFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyMgdGhhdCBjb250YWluIGltYWdlcyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZQorIyBcaW1hZ2UgY29tbWFuZCkuCisKK0lNQUdFX1BBVEggICAgICAgICAgICAgPSBAYWJzX3NyY2RpckAvaW1hZ2VzLworCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQKKyMgaW52b2tlIHRvIGZpbHRlciBmb3IgZWFjaCBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBmaWx0ZXIgcHJvZ3JhbQorIyBieSBleGVjdXRpbmcgKHZpYSBwb3BlbigpKSB0aGUgY29tbWFuZDoKKyMKKyMgPGZpbHRlcj4gPGlucHV0LWZpbGU+CisjCisjIHdoZXJlIDxmaWx0ZXI+IGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUKKyMgbmFtZSBvZiBhbiBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgdGhlbiB1c2UgdGhlIG91dHB1dCB0aGF0IHRoZSBmaWx0ZXIKKyMgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0LiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZworIyB3aWxsIGJlIGlnbm9yZWQuCisjCisjIE5vdGUgdGhhdCB0aGUgZmlsdGVyIG11c3Qgbm90IGFkZCBvciByZW1vdmUgbGluZXM7IGl0IGlzIGFwcGxpZWQgYmVmb3JlIHRoZQorIyBjb2RlIGlzIHNjYW5uZWQsIGJ1dCBub3Qgd2hlbiB0aGUgb3V0cHV0IGNvZGUgaXMgZ2VuZXJhdGVkLiBJZiBsaW5lcyBhcmUgYWRkZWQKKyMgb3IgcmVtb3ZlZCwgdGhlIGFuY2hvcnMgd2lsbCBub3QgYmUgcGxhY2VkIGNvcnJlY3RseS4KKworSU5QVVRfRklMVEVSICAgICAgICAgICA9CisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybgorIyBiYXNpcy4gRG94eWdlbiB3aWxsIGNvbXBhcmUgdGhlIGZpbGUgbmFtZSB3aXRoIGVhY2ggcGF0dGVybiBhbmQgYXBwbHkgdGhlCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiBUaGUgZmlsdGVycyBhcmUgYSBsaXN0IG9mIHRoZSBmb3JtOiBwYXR0ZXJuPWZpbHRlcgorIyAobGlrZSAqLmNwcD1teV9jcHBfZmlsdGVyKS4gU2VlIElOUFVUX0ZJTFRFUiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cKKyMgZmlsdGVycyBhcmUgdXNlZC4gSWYgdGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgaXMgZW1wdHkgb3IgaWYgbm9uZSBvZiB0aGUKKyMgcGF0dGVybnMgbWF0Y2ggdGhlIGZpbGUgbmFtZSwgSU5QVVRfRklMVEVSIGlzIGFwcGxpZWQuCisKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPQorCisjIElmIHRoZSBGSUxURVJfU09VUkNFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgaW5wdXQgZmlsdGVyIChpZiBzZXQgdXNpbmcKKyMgSU5QVVRfRklMVEVSICkgd2lsbCBhbHNvIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnB1dCBmaWxlcyB0aGF0IGFyZSB1c2VkIGZvcgorIyBwcm9kdWNpbmcgdGhlIHNvdXJjZSBmaWxlcyB0byBicm93c2UgKGkuZS4gd2hlbiBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitGSUxURVJfU09VUkNFX0ZJTEVTICAgID0gTk8KKworIyBUaGUgRklMVEVSX1NPVVJDRV9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBzb3VyY2UgZmlsdGVycyBwZXIgZmlsZQorIyBwYXR0ZXJuLiBBIHBhdHRlcm4gd2lsbCBvdmVycmlkZSB0aGUgc2V0dGluZyBmb3IgRklMVEVSX1BBVFRFUk4gKGlmIGFueSkgYW5kCisjIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJsZSBzb3VyY2UgZmlsdGVyaW5nIGZvciBhIHNwZWNpZmljIHBhdHRlcm4gdXNpbmcKKyMgKi5leHQ9IChzbyB3aXRob3V0IG5hbWluZyBhIGZpbHRlcikuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBGSUxURVJfU09VUkNFX0ZJTEVTIGlzIHNldCB0byBZRVMuCisKK0ZJTFRFUl9TT1VSQ0VfUEFUVEVSTlMgPQorCisjIElmIHRoZSBVU0VfTURGSUxFX0FTX01BSU5QQUdFIHRhZyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgYSBtYXJrZG93biBmaWxlIHRoYXQKKyMgaXMgcGFydCBvZiB0aGUgaW5wdXQsIGl0cyBjb250ZW50cyB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgbWFpbiBwYWdlCisjIChpbmRleC5odG1sKS4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIGEgcHJvamVjdCBvbiBmb3IgaW5zdGFuY2UgR2l0SHViCisjIGFuZCB3YW50IHRvIHJldXNlIHRoZSBpbnRyb2R1Y3Rpb24gcGFnZSBhbHNvIGZvciB0aGUgZG94eWdlbiBvdXRwdXQuCisKK1VTRV9NREZJTEVfQVNfTUFJTlBBR0UgPSBSRUFETUUubWQKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuCisjCisjIE5vdGU6IFRvIGdldCByaWQgb2YgYWxsIHNvdXJjZSBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBtYWtlIHN1cmUgdGhhdAorIyBhbHNvIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NPVVJDRV9CUk9XU0VSICAgICAgICAgPSBOTworCisjIFNldHRpbmcgdGhlIElOTElORV9TT1VSQ0VTIHRhZyB0byBZRVMgd2lsbCBpbmNsdWRlIHRoZSBib2R5IG9mIGZ1bmN0aW9ucywKKyMgY2xhc3NlcyBhbmQgZW51bXMgZGlyZWN0bHkgaW50byB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgd2lsbCBpbnN0cnVjdCBkb3h5Z2VuIHRvIGhpZGUgYW55CisjIHNwZWNpYWwgY29tbWVudCBibG9ja3MgZnJvbSBnZW5lcmF0ZWQgc291cmNlIGNvZGUgZnJhZ21lbnRzLiBOb3JtYWwgQywgQysrIGFuZAorIyBGb3J0cmFuIGNvbW1lbnRzIHdpbGwgYWx3YXlzIHJlbWFpbiB2aXNpYmxlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTVFJJUF9DT0RFX0NPTU1FTlRTICAgID0gWUVTCisKKyMgSWYgdGhlIFJFRkVSRU5DRURfQllfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkCisjIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkIGZ1bmN0aW9ucyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OID0gTk8KKworIyBJZiB0aGUgUkVGRVJFTkNFU19SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQgZnVuY3Rpb24KKyMgYWxsIGRvY3VtZW50ZWQgZW50aXRpZXMgY2FsbGVkL3VzZWQgYnkgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitSRUZFUkVOQ0VTX1JFTEFUSU9OICAgID0gTk8KKworIyBJZiB0aGUgUkVGRVJFTkNFU19MSU5LX1NPVVJDRSB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgU09VUkNFX0JST1dTRVIgdGFnIGlzIHNldAorIyB0byBZRVMsIHRoZW4gdGhlIGh5cGVybGlua3MgZnJvbSBmdW5jdGlvbnMgaW4gUkVGRVJFTkNFU19SRUxBVElPTiBhbmQKKyMgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiBsaXN0cyB3aWxsIGxpbmsgdG8gdGhlIHNvdXJjZSBjb2RlLiBPdGhlcndpc2UgdGhleSB3aWxsCisjIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFRkVSRU5DRVNfTElOS19TT1VSQ0UgPSBZRVMKKworIyBJZiBTT1VSQ0VfVE9PTFRJUFMgaXMgZW5hYmxlZCAodGhlIGRlZmF1bHQpIHRoZW4gaG92ZXJpbmcgYSBoeXBlcmxpbmsgaW4gdGhlCisjIHNvdXJjZSBjb2RlIHdpbGwgc2hvdyBhIHRvb2x0aXAgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgcHJvdG90eXBlLAorIyBicmllZiBkZXNjcmlwdGlvbiBhbmQgbGlua3MgdG8gdGhlIGRlZmluaXRpb24gYW5kIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoaXMKKyMgd2lsbCBtYWtlIHRoZSBIVE1MIGZpbGUgbGFyZ2VyIGFuZCBsb2FkaW5nIG9mIGxhcmdlIGZpbGVzIGEgYml0IHNsb3dlciwgeW91CisjIGNhbiBvcHQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTT1VSQ0VfQlJPV1NFUiBpcyBzZXQgdG8gWUVTLgorCitTT1VSQ0VfVE9PTFRJUFMgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVTRV9IVEFHUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSByZWZlcmVuY2VzIHRvIHNvdXJjZSBjb2RlIHdpbGwKKyMgcG9pbnQgdG8gdGhlIEhUTUwgZ2VuZXJhdGVkIGJ5IHRoZSBodGFncygxKSB0b29sIGluc3RlYWQgb2YgZG94eWdlbiBidWlsdC1pbgorIyBzb3VyY2UgYnJvd3Nlci4gVGhlIGh0YWdzIHRvb2wgaXMgcGFydCBvZiBHTlUncyBnbG9iYWwgc291cmNlIHRhZ2dpbmcgc3lzdGVtCisjIChzZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dsb2JhbC9nbG9iYWwuaHRtbCkuIFlvdSB3aWxsIG5lZWQgdmVyc2lvbgorIyA0LjguNiBvciBoaWdoZXIuCisjCisjIFRvIHVzZSBpdCBkbyB0aGUgZm9sbG93aW5nOgorIyAtIEluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGdsb2JhbAorIyAtIEVuYWJsZSBTT1VSQ0VfQlJPV1NFUiBhbmQgVVNFX0hUQUdTIGluIHRoZSBjb25maWcgZmlsZQorIyAtIE1ha2Ugc3VyZSB0aGUgSU5QVVQgcG9pbnRzIHRvIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZQorIyAtIFJ1biBkb3h5Z2VuIGFzIG5vcm1hbAorIworIyBEb3h5Z2VuIHdpbGwgaW52b2tlIGh0YWdzIChhbmQgdGhhdCB3aWxsIGluIHR1cm4gaW52b2tlIGd0YWdzKSwgc28gdGhlc2UKKyMgdG9vbHMgbXVzdCBiZSBhdmFpbGFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIChpLmUuIGluIHRoZSBzZWFyY2ggcGF0aCkuCisjCisjIFRoZSByZXN1bHQ6IGluc3RlYWQgb2YgdGhlIHNvdXJjZSBicm93c2VyIGdlbmVyYXRlZCBieSBkb3h5Z2VuLCB0aGUgbGlua3MgdG8KKyMgc291cmNlIGNvZGUgd2lsbCBub3cgcG9pbnQgdG8gdGhlIG91dHB1dCBvZiBodGFncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUy4KKworVVNFX0hUQUdTICAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFZFUkJBVElNX0hFQURFUlMgdGFnIGlzIHNldCB0aGUgWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgdmVyYmF0aW0gY29weSBvZiB0aGUgaGVhZGVyIGZpbGUgZm9yIGVhY2ggY2xhc3MgZm9yIHdoaWNoIGFuIGluY2x1ZGUgaXMKKyMgc3BlY2lmaWVkLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorIyBTZWUgYWxzbzogU2VjdGlvbiBcY2xhc3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1ZFUkJBVElNX0hFQURFUlMgICAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYWxwaGFiZXRpY2FsIGNsYXNzIGluZGV4CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEFMUEhBQkVUSUNBTF9JTkRFWCB0YWcgaXMgc2V0IHRvIFlFUywgYW4gYWxwaGFiZXRpY2FsIGluZGV4IG9mIGFsbAorIyBjb21wb3VuZHMgd2lsbCBiZSBnZW5lcmF0ZWQuIEVuYWJsZSB0aGlzIGlmIHRoZSBwcm9qZWN0IGNvbnRhaW5zIGEgbG90IG9mCisjIGNsYXNzZXMsIHN0cnVjdHMsIHVuaW9ucyBvciBpbnRlcmZhY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitBTFBIQUJFVElDQUxfSU5ERVggICAgID0gWUVTCisKKyMgVGhlIENPTFNfSU5fQUxQSEFfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluCisjIHdoaWNoIHRoZSBhbHBoYWJldGljYWwgaW5kZXggbGlzdCB3aWxsIGJlIHNwbGl0LgorIyBNaW5pbXVtIHZhbHVlOiAxLCBtYXhpbXVtIHZhbHVlOiAyMCwgZGVmYXVsdCB2YWx1ZTogNS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEFMUEhBQkVUSUNBTF9JTkRFWCBpcyBzZXQgdG8gWUVTLgorCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorCisjIEluIGNhc2UgYWxsIGNsYXNzZXMgaW4gYSBwcm9qZWN0IHN0YXJ0IHdpdGggYSBjb21tb24gcHJlZml4LCBhbGwgY2xhc3NlcyB3aWxsCisjIGJlIHB1dCB1bmRlciB0aGUgc2FtZSBoZWFkZXIgaW4gdGhlIGFscGhhYmV0aWNhbCBpbmRleC4gVGhlIElHTk9SRV9QUkVGSVggdGFnCisjIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcmVmaXggKG9yIGEgbGlzdCBvZiBwcmVmaXhlcykgdGhhdCBzaG91bGQgYmUgaWdub3JlZAorIyB3aGlsZSBnZW5lcmF0aW5nIHRoZSBpbmRleCBoZWFkZXJzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgQUxQSEFCRVRJQ0FMX0lOREVYIGlzIHNldCB0byBZRVMuCisKK0lHTk9SRV9QUkVGSVggICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBIVE1MIG91dHB1dAorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9IVE1MICAgICAgICAgID0gWUVTCisKKyMgVGhlIEhUTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIEhUTUwgZG9jcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogaHRtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9PVVRQVVQgICAgICAgICAgICA9IGh0bWwKKworIyBUaGUgSFRNTF9GSUxFX0VYVEVOU0lPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gZm9yIGVhY2gKKyMgZ2VuZXJhdGVkIEhUTUwgcGFnZSAoZm9yIGV4YW1wbGU6IC5odG0sIC5waHAsIC5hc3ApLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogLmh0bWwuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbAorCisjIFRoZSBIVE1MX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBIVE1MIGhlYWRlciBmaWxlIGZvcgorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBzdGFuZGFyZCBoZWFkZXIuCisjCisjIFRvIGdldCB2YWxpZCBIVE1MIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGluY2x1ZGVzIGFueSBzY3JpcHRzIGFuZCBzdHlsZSBzaGVldHMKKyMgdGhhdCBkb3h5Z2VuIG5lZWRzLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2VkIChlLmcuCisjIHRoZSBzZXR0aW5nIEdFTkVSQVRFX1RSRUVWSUVXKS4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHN0YXJ0IHdpdGggYQorIyBkZWZhdWx0IGhlYWRlciB1c2luZworIyBkb3h5Z2VuIC13IGh0bWwgbmV3X2hlYWRlci5odG1sIG5ld19mb290ZXIuaHRtbCBuZXdfc3R5bGVzaGVldC5jc3MKKyMgWW91ckNvbmZpZ0ZpbGUKKyMgYW5kIHRoZW4gbW9kaWZ5IHRoZSBmaWxlIG5ld19oZWFkZXIuaHRtbC4gU2VlIGFsc28gc2VjdGlvbiAiRG94eWdlbiB1c2FnZSIKKyMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZW5lcmF0ZSB0aGUgZGVmYXVsdCBoZWFkZXIgdGhhdCBkb3h5Z2VuIG5vcm1hbGx5CisjIHVzZXMuCisjIE5vdGU6IFRoZSBoZWFkZXIgaXMgc3ViamVjdCB0byBjaGFuZ2Ugc28geW91IHR5cGljYWxseSBoYXZlIHRvIHJlZ2VuZXJhdGUgdGhlCisjIGRlZmF1bHQgaGVhZGVyIHdoZW4gdXBncmFkaW5nIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBkb3h5Z2VuLiBGb3IgYSBkZXNjcmlwdGlvbgorIyBvZiB0aGUgcG9zc2libGUgbWFya2VycyBhbmQgYmxvY2sgbmFtZXMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0hFQURFUiAgICAgICAgICAgID0gQGFic19zcmNkaXJAL2hlYWRlci5odG1sCisKKyMgVGhlIEhUTUxfRk9PVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIEhUTUwgZm9vdGVyIGZvciBlYWNoCisjIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZAorIyBmb290ZXIuIFNlZSBIVE1MX0hFQURFUiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgYSBkZWZhdWx0CisjIGZvb3RlciBhbmQgd2hhdCBzcGVjaWFsIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluc2lkZSB0aGUgZm9vdGVyLiBTZWUgYWxzbworIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IGZvb3RlcgorIyB0aGF0IGRveHlnZW4gbm9ybWFsbHkgdXNlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9GT09URVIgICAgICAgICAgICA9CisKKyMgVGhlIEhUTUxfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUKKyMgc2hlZXQgdGhhdCBpcyB1c2VkIGJ5IGVhY2ggSFRNTCBwYWdlLiBJdCBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlIGxvb2sgb2YKKyMgdGhlIEhUTUwgb3V0cHV0LiBJZiBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRlZmF1bHQgc3R5bGUgc2hlZXQuCisjIFNlZSBhbHNvIHNlY3Rpb24gIkRveHlnZW4gdXNhZ2UiIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgdGhlIHN0eWxlCisjIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIGluc3RlYWQgb2YgdGhpcyB0YWcsIGFzCisjIGl0IGlzIG1vcmUgcm9idXN0IGFuZCB0aGlzIHRhZyAoSFRNTF9TVFlMRVNIRUVUKSB3aWxsIGluIHRoZSBmdXR1cmUgYmVjb21lCisjIG9ic29sZXRlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1NUWUxFU0hFRVQgICAgICAgID0KKworIyBUaGUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgdXNlci0KKyMgZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUgc2hlZXQgdGhhdCBpcyBpbmNsdWRlZCBhZnRlciB0aGUgc3RhbmRhcmQgc3R5bGUgc2hlZXRzCisjIGNyZWF0ZWQgYnkgZG94eWdlbi4gVXNpbmcgdGhpcyBvcHRpb24gb25lIGNhbiBvdmVycnVsZSBjZXJ0YWluIHN0eWxlIGFzcGVjdHMuCisjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgdXNpbmcgSFRNTF9TVFlMRVNIRUVUIHNpbmNlIGl0IGRvZXMgbm90IHJlcGxhY2UgdGhlCisjIHN0YW5kYXJkIHN0eWxlIHNoZWV0IGFuZCBpcyB0aGVyZWZvciBtb3JlIHJvYnVzdCBhZ2FpbnN0IGZ1dHVyZSB1cGRhdGVzLgorIyBEb3h5Z2VuIHdpbGwgY29weSB0aGUgc3R5bGUgc2hlZXQgZmlsZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4gRm9yIGFuIGV4YW1wbGUKKyMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0VYVFJBX1NUWUxFU0hFRVQgID0KKworIyBUaGUgSFRNTF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4gTm90ZQorIyB0aGF0IHRoZXNlIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBiYXNlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4gVXNlIHRoZQorIyAkcmVscGF0aF4gbWFya2VyIGluIHRoZSBIVE1MX0hFQURFUiBhbmQvb3IgSFRNTF9GT09URVIgZmlsZXMgdG8gbG9hZCB0aGVzZQorIyBmaWxlcy4gSW4gdGhlIEhUTUxfU1RZTEVTSEVFVCBmaWxlLCB1c2UgdGhlIGZpbGUgbmFtZSBvbmx5LiBBbHNvIG5vdGUgdGhhdCB0aGUKKyMgZmlsZXMgd2lsbCBiZSBjb3BpZWQgYXMtaXM7IHRoZXJlIGFyZSBubyBjb21tYW5kcyBvciBtYXJrZXJzIGF2YWlsYWJsZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9FWFRSQV9GSUxFUyAgICAgICA9CisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9IVUUgdGFnIGNvbnRyb2xzIHRoZSBjb2xvciBvZiB0aGUgSFRNTCBvdXRwdXQuIERveHlnZW4KKyMgd2lsbCBhZGp1c3QgdGhlIGNvbG9ycyBpbiB0aGUgc3R5bGVzaGVldCBhbmQgYmFja2dyb3VuZCBpbWFnZXMgYWNjb3JkaW5nIHRvCisjIHRoaXMgY29sb3IuIEh1ZSBpcyBzcGVjaWZpZWQgYXMgYW4gYW5nbGUgb24gYSBjb2xvcndoZWVsLCBzZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IdWUgZm9yIG1vcmUgaW5mb3JtYXRpb24uIEZvciBpbnN0YW5jZSB0aGUgdmFsdWUKKyMgMCByZXByZXNlbnRzIHJlZCwgNjAgaXMgeWVsbG93LCAxMjAgaXMgZ3JlZW4sIDE4MCBpcyBjeWFuLCAyNDAgaXMgYmx1ZSwgMzAwCisjIHB1cnBsZSwgYW5kIDM2MCBpcyByZWQgYWdhaW4uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDM1OSwgZGVmYXVsdCB2YWx1ZTogMjIwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfSFVFICAgID0gMjIwCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9TQVQgdGFnIGNvbnRyb2xzIHRoZSBwdXJpdHkgKG9yIHNhdHVyYXRpb24pIG9mIHRoZSBjb2xvcnMKKyMgaW4gdGhlIEhUTUwgb3V0cHV0LiBGb3IgYSB2YWx1ZSBvZiAwIHRoZSBvdXRwdXQgd2lsbCB1c2UgZ3JheXNjYWxlcyBvbmx5LiBBCisjIHZhbHVlIG9mIDI1NSB3aWxsIHByb2R1Y2UgdGhlIG1vc3Qgdml2aWQgY29sb3JzLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAyNTUsIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX1NBVCAgICA9IDEwMAorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfR0FNTUEgdGFnIGNvbnRyb2xzIHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFwcGxpZWQgdG8gdGhlCisjIGx1bWluYW5jZSBjb21wb25lbnQgb2YgdGhlIGNvbG9ycyBpbiB0aGUgSFRNTCBvdXRwdXQuIFZhbHVlcyBiZWxvdyAxMDAKKyMgZ3JhZHVhbGx5IG1ha2UgdGhlIG91dHB1dCBsaWdodGVyLCB3aGVyZWFzIHZhbHVlcyBhYm92ZSAxMDAgbWFrZSB0aGUgb3V0cHV0CisjIGRhcmtlci4gVGhlIHZhbHVlIGRpdmlkZWQgYnkgMTAwIGlzIHRoZSBhY3R1YWwgZ2FtbWEgYXBwbGllZCwgc28gODAgcmVwcmVzZW50cworIyBhIGdhbW1hIG9mIDAuOCwgVGhlIHZhbHVlIDIyMCByZXByZXNlbnRzIGEgZ2FtbWEgb2YgMi4yLCBhbmQgMTAwIGRvZXMgbm90CisjIGNoYW5nZSB0aGUgZ2FtbWEuCisjIE1pbmltdW0gdmFsdWU6IDQwLCBtYXhpbXVtIHZhbHVlOiAyNDAsIGRlZmF1bHQgdmFsdWU6IDgwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfR0FNTUEgID0gODAKKworIyBJZiB0aGUgSFRNTF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkIEhUTUwKKyMgcGFnZSB3aWxsIGNvbnRhaW4gdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgcGFnZSB3YXMgZ2VuZXJhdGVkLiBTZXR0aW5nIHRoaXMKKyMgdG8gTk8gY2FuIGhlbHAgd2hlbiBjb21wYXJpbmcgdGhlIG91dHB1dCBvZiBtdWx0aXBsZSBydW5zLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1RJTUVTVEFNUCAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhUTUxfRFlOQU1JQ19TRUNUSU9OUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBnZW5lcmF0ZWQgSFRNTAorIyBkb2N1bWVudGF0aW9uIHdpbGwgY29udGFpbiBzZWN0aW9ucyB0aGF0IGNhbiBiZSBoaWRkZW4gYW5kIHNob3duIGFmdGVyIHRoZQorIyBwYWdlIGhhcyBsb2FkZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9EWU5BTUlDX1NFQ1RJT05TICA9IE5PCisKKyMgV2l0aCBIVE1MX0lOREVYX05VTV9FTlRSSUVTIG9uZSBjYW4gY29udHJvbCB0aGUgcHJlZmVycmVkIG51bWJlciBvZiBlbnRyaWVzCisjIHNob3duIGluIHRoZSB2YXJpb3VzIHRyZWUgc3RydWN0dXJlZCBpbmRpY2VzIGluaXRpYWxseTsgdGhlIHVzZXIgY2FuIGV4cGFuZAorIyBhbmQgY29sbGFwc2UgZW50cmllcyBkeW5hbWljYWxseSBsYXRlciBvbi4gRG94eWdlbiB3aWxsIGV4cGFuZCB0aGUgdHJlZSB0bworIyBzdWNoIGEgbGV2ZWwgdGhhdCBhdCBtb3N0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMgYXJlIHZpc2libGUgKHVubGVzcworIyBhIGZ1bGx5IGNvbGxhcHNlZCB0cmVlIGFscmVhZHkgZXhjZWVkcyB0aGlzIGFtb3VudCkuIFNvIHNldHRpbmcgdGhlIG51bWJlciBvZgorIyBlbnRyaWVzIDEgd2lsbCBwcm9kdWNlIGEgZnVsbCBjb2xsYXBzZWQgdHJlZSBieSBkZWZhdWx0LiAwIGlzIGEgc3BlY2lhbCB2YWx1ZQorIyByZXByZXNlbnRpbmcgYW4gaW5maW5pdGUgbnVtYmVyIG9mIGVudHJpZXMgYW5kIHdpbGwgcmVzdWx0IGluIGEgZnVsbCBleHBhbmRlZAorIyB0cmVlIGJ5IGRlZmF1bHQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDk5OTksIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9JTkRFWF9OVU1fRU5UUklFUyA9IDEwMAorCisjIElmIHRoZSBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgd2lsbCBiZQorIyBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgQXBwbGUncyBYY29kZSAzIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQKKyMgZW52aXJvbm1lbnQgKHNlZTogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMveGNvZGUvKSwgaW50cm9kdWNlZCB3aXRoCisjIE9TWCAxMC41IChMZW9wYXJkKS4gVG8gY3JlYXRlIGEgZG9jdW1lbnRhdGlvbiBzZXQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIE1ha2VmaWxlIGluIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFJ1bm5pbmcgbWFrZSB3aWxsIHByb2R1Y2UgdGhlIGRvY3NldCBpbgorIyB0aGF0IGRpcmVjdG9yeSBhbmQgcnVubmluZyBtYWtlIGluc3RhbGwgd2lsbCBpbnN0YWxsIHRoZSBkb2NzZXQgaW4KKyMgfi9MaWJyYXJ5L0RldmVsb3Blci9TaGFyZWQvRG9jdW1lbnRhdGlvbi9Eb2NTZXRzIHNvIHRoYXQgWGNvZGUgd2lsbCBmaW5kIGl0IGF0CisjIHN0YXJ0dXAuIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90b29scy9jcmVhdGluZ2RvY3NldHN3aXRoZG94eWdlbi5odG1sCisjIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0RPQ1NFVCAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGRldGVybWluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3NldCBmZWVkLiBBIGRvY3VtZW50YXRpb24gZmVlZCBwcm92aWRlcworIyBhbiB1bWJyZWxsYSB1bmRlciB3aGljaCBtdWx0aXBsZSBkb2N1bWVudGF0aW9uIHNldHMgZnJvbSBhIHNpbmdsZSBwcm92aWRlcgorIyAoc3VjaCBhcyBhIGNvbXBhbnkgb3IgcHJvZHVjdCBzdWl0ZSkgY2FuIGJlIGdyb3VwZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBEb3h5Z2VuIGdlbmVyYXRlZCBkb2NzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9GRUVETkFNRSAgICAgICAgPSAiRG94eWdlbiBnZW5lcmF0ZWQgZG9jcyIKKworIyBUaGlzIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGRvY3VtZW50YXRpb24KKyMgc2V0IGJ1bmRsZS4gVGhpcyBzaG91bGQgYmUgYSByZXZlcnNlIGRvbWFpbi1uYW1lIHN0eWxlIHN0cmluZywgZS5nLgorIyBjb20ubXljb21wYW55Lk15RG9jU2V0LiBEb3h5Z2VuIHdpbGwgYXBwZW5kIC5kb2NzZXQgdG8gdGhlIG5hbWUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBvcmcuZG94eWdlbi5Qcm9qZWN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9CVU5ETEVfSUQgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0CisKKyMgVGhlIERPQ1NFVF9QVUJMSVNIRVJfSUQgdGFnIHNwZWNpZmllcyBhIHN0cmluZyB0aGF0IHNob3VsZCB1bmlxdWVseSBpZGVudGlmeQorIyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuIFRoaXMgc2hvdWxkIGJlIGEgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZQorIyBzdHJpbmcsIGUuZy4gY29tLm15Y29tcGFueS5NeURvY1NldC5kb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHVibGlzaGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9QVUJMSVNIRVJfSUQgICAgPSBvcmcuZG94eWdlbi5QdWJsaXNoZXIKKworIyBUaGUgRE9DU0VUX1BVQkxJU0hFUl9OQU1FIHRhZyBpZGVudGlmaWVzIHRoZSBkb2N1bWVudGF0aW9uIHB1Ymxpc2hlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFB1Ymxpc2hlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfUFVCTElTSEVSX05BTUUgID0gUHVibGlzaGVyCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiBnZW5lcmF0ZXMgdGhyZWUKKyMgYWRkaXRpb25hbCBIVE1MIGluZGV4IGZpbGVzOiBpbmRleC5oaHAsIGluZGV4LmhoYywgYW5kIGluZGV4Lmhoay4gVGhlCisjIGluZGV4LmhocCBpcyBhIHByb2plY3QgZmlsZSB0aGF0IGNhbiBiZSByZWFkIGJ5IE1pY3Jvc29mdCdzIEhUTUwgSGVscCBXb3Jrc2hvcAorIyAoc2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvZG93bmxvYWQvZGV0YWlscy5hc3B4P2lkPTIxMTM4KSBvbgorIyBXaW5kb3dzLgorIworIyBUaGUgSFRNTCBIZWxwIFdvcmtzaG9wIGNvbnRhaW5zIGEgY29tcGlsZXIgdGhhdCBjYW4gY29udmVydCBhbGwgSFRNTCBvdXRwdXQKKyMgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaW50byBhIHNpbmdsZSBjb21waWxlZCBIVE1MIGZpbGUgKC5jaG0pLiBDb21waWxlZCBIVE1MCisjIGZpbGVzIGFyZSBub3cgdXNlZCBhcyB0aGUgV2luZG93cyA5OCBoZWxwIGZvcm1hdCwgYW5kIHdpbGwgcmVwbGFjZSB0aGUgb2xkCisjIFdpbmRvd3MgaGVscCBmb3JtYXQgKC5obHApIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3JtcyBpbiB0aGUgZnV0dXJlLiBDb21wcmVzc2VkCisjIEhUTUwgZmlsZXMgYWxzbyBjb250YWluIGFuIGluZGV4LCBhIHRhYmxlIG9mIGNvbnRlbnRzLCBhbmQgeW91IGNhbiBzZWFyY2ggZm9yCisjIHdvcmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgSFRNTCB3b3Jrc2hvcCBhbHNvIGNvbnRhaW5zIGEgdmlld2VyIGZvcgorIyBjb21wcmVzc2VkIEhUTUwgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCisKKyMgVGhlIENITV9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htCisjIGZpbGUuIFlvdSBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUKKyMgd3JpdHRlbiB0byB0aGUgaHRtbCBvdXRwdXQgZGlyZWN0b3J5LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9CisKKyMgVGhlIEhIQ19MT0NBVElPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gKGFic29sdXRlIHBhdGgKKyMgaW5jbHVkaW5nIGZpbGUgbmFtZSkgb2YgdGhlIEhUTUwgaGVscCBjb21waWxlciAoIGhoYy5leGUpLiBJZiBub24tZW1wdHkKKyMgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gdGhlIEhUTUwgaGVscCBjb21waWxlciBvbiB0aGUgZ2VuZXJhdGVkIGluZGV4LmhocC4KKyMgVGhlIGZpbGUgaGFzIHRvIGJlIHNwZWNpZmllZCB3aXRoIGZ1bGwgcGF0aC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0hIQ19MT0NBVElPTiAgICAgICAgICAgPQorCisjIFRoZSBHRU5FUkFURV9DSEkgZmxhZyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKAorIyBZRVMpIG9yIHRoYXQgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlICggTk8pLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9DSEkgICAgICAgICAgID0gTk8KKworIyBUaGUgQ0hNX0lOREVYX0VOQ09ESU5HIGlzIHVzZWQgdG8gZW5jb2RlIEh0bWxIZWxwIGluZGV4ICggaGhrKSwgY29udGVudCAoIGhoYykKKyMgYW5kIHByb2plY3QgZmlsZSBjb250ZW50LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0lOREVYX0VOQ09ESU5HICAgICA9CisKKyMgVGhlIEJJTkFSWV9UT0MgZmxhZyBjb250cm9scyB3aGV0aGVyIGEgYmluYXJ5IHRhYmxlIG9mIGNvbnRlbnRzIGlzIGdlbmVyYXRlZCAoCisjIFlFUykgb3IgYSBub3JtYWwgdGFibGUgb2YgY29udGVudHMgKCBOTykgaW4gdGhlIC5jaG0gZmlsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMgdG8KKyMgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG9mIHRoZSBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgdG8gdGhlIHRyZWUgdmlldy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgYm90aCBRSFBfTkFNRVNQQUNFIGFuZAorIyBRSFBfVklSVFVBTF9GT0xERVIgYXJlIHNldCwgYW4gYWRkaXRpb25hbCBpbmRleCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIHRoYXQKKyMgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIFF0J3MgcWhlbHBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSBRdCBDb21wcmVzc2VkIEhlbHAKKyMgKC5xY2gpIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1FIUCAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBRSEdfTE9DQVRJT04gdGFnIGlzIHNwZWNpZmllZCwgdGhlIFFDSF9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisjIHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAucWNoIGZpbGUuIFRoZSBwYXRoIHNwZWNpZmllZCBpcyByZWxhdGl2ZSB0bworIyB0aGUgSFRNTCBvdXRwdXQgZm9sZGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FDSF9GSUxFICAgICAgICAgICAgICAgPQorCisjIFRoZSBRSFBfTkFNRVNQQUNFIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIFF0IEhlbHAKKyMgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gTmFtZXNwYWNlCisjIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNuYW1lc3BhY2UpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfTkFNRVNQQUNFICAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFRoZSBRSFBfVklSVFVBTF9GT0xERVIgdGFnIHNwZWNpZmllcyB0aGUgbmFtZXNwYWNlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgUXQKKyMgSGVscCBQcm9qZWN0IG91dHB1dC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBRdCBIZWxwIFByb2plY3QgLyBWaXJ0dWFsCisjIEZvbGRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI3ZpcnR1YWwtCisjIGZvbGRlcnMpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogZG9jLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9WSVJUVUFMX0ZPTERFUiAgICAgPSBkb2MKKworIyBJZiB0aGUgUUhQX0NVU1RfRklMVEVSX05BTUUgdGFnIGlzIHNldCwgaXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY3VzdG9tCisjIGZpbHRlciB0byBhZGQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tCisjIEZpbHRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS0KKyMgZmlsdGVycykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX0NVU1RfRklMVEVSX05BTUUgICA9CisKKyMgVGhlIFFIUF9DVVNUX0ZJTFRFUl9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZQorIyBjdXN0b20gZmlsdGVyIHRvIGFkZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBRdCBIZWxwIFByb2plY3QgLyBDdXN0b20KKyMgRmlsdGVycyAoc2VlOiBodHRwOi8vcXQtcHJvamVjdC5vcmcvZG9jL3F0LTQuOC9xdGhlbHBwcm9qZWN0Lmh0bWwjY3VzdG9tLQorIyBmaWx0ZXJzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfQ1VTVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhQX1NFQ1RfRklMVEVSX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgdGhpcworIyBwcm9qZWN0J3MgZmlsdGVyIHNlY3Rpb24gbWF0Y2hlcy4gUXQgSGVscCBQcm9qZWN0IC8gRmlsdGVyIEF0dHJpYnV0ZXMgKHNlZToKKyMgaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2ZpbHRlci1hdHRyaWJ1dGVzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfU0VDVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhHX0xPQ0FUSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBRdCdzCisjIHFoZWxwZ2VuZXJhdG9yLiBJZiBub24tZW1wdHkgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gcWhlbHBnZW5lcmF0b3Igb24gdGhlCisjIGdlbmVyYXRlZCAucWhwIGZpbGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhHX0xPQ0FUSU9OICAgICAgICAgICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX0VDTElQU0VIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkLCB0b2dldGhlciB3aXRoIHRoZSBIVE1MIGZpbGVzLCB0aGV5IGZvcm0gYW4gRWNsaXBzZSBoZWxwIHBsdWdpbi4gVG8KKyMgaW5zdGFsbCB0aGlzIHBsdWdpbiBhbmQgbWFrZSBpdCBhdmFpbGFibGUgdW5kZXIgdGhlIGhlbHAgY29udGVudHMgbWVudSBpbgorIyBFY2xpcHNlLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwgZmlsZXMgbmVlZHMKKyMgdG8gYmUgY29waWVkIGludG8gdGhlIHBsdWdpbnMgZGlyZWN0b3J5IG9mIGVjbGlwc2UuIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkKKyMgd2l0aGluIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEVDTElQU0VfRE9DX0lEIHZhbHVlLgorIyBBZnRlciBjb3B5aW5nIEVjbGlwc2UgbmVlZHMgdG8gYmUgcmVzdGFydGVkIGJlZm9yZSB0aGUgaGVscCBhcHBlYXJzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0VDTElQU0VIRUxQICAgPSBOTworCisjIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBFY2xpcHNlIGhlbHAgcGx1Z2luLiBXaGVuIGluc3RhbGxpbmcgdGhlIHBsdWdpbgorIyB0aGUgZGlyZWN0b3J5IG5hbWUgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MIGZpbGVzIHNob3VsZCBhbHNvIGhhdmUgdGhpcworIyBuYW1lLiBFYWNoIGRvY3VtZW50YXRpb24gc2V0IHNob3VsZCBoYXZlIGl0cyBvd24gaWRlbnRpZmllci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9FQ0xJUFNFSEVMUCBpcyBzZXQgdG8gWUVTLgorCitFQ0xJUFNFX0RPQ19JRCAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIElmIHlvdSB3YW50IGZ1bGwgY29udHJvbCBvdmVyIHRoZSBsYXlvdXQgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIHBhZ2VzIGl0IG1pZ2h0CisjIGJlIG5lY2Vzc2FyeSB0byBkaXNhYmxlIHRoZSBpbmRleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHlvdXIgb3duLiBUaGUKKyMgRElTQUJMRV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIGNvbmRlbnNlZCBpbmRleCAodGFicykgYXQgdG9wCisjIG9mIGVhY2ggSFRNTCBwYWdlLiBBIHZhbHVlIG9mIE5PIGVuYWJsZXMgdGhlIGluZGV4IGFuZCB0aGUgdmFsdWUgWUVTIGRpc2FibGVzCisjIGl0LiBTaW5jZSB0aGUgdGFicyBpbiB0aGUgaW5kZXggY29udGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgbmF2aWdhdGlvbgorIyB0cmVlLCB5b3UgY2FuIHNldCB0aGlzIG9wdGlvbiB0byBZRVMgaWYgeW91IGFsc28gc2V0IEdFTkVSQVRFX1RSRUVWSUVXIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGEgdHJlZS1saWtlIGluZGV4CisjIHN0cnVjdHVyZSBzaG91bGQgYmUgZ2VuZXJhdGVkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGluZm9ybWF0aW9uLiBJZiB0aGUgdGFnCisjIHZhbHVlIGlzIHNldCB0byBZRVMsIGEgc2lkZSBwYW5lbCB3aWxsIGJlIGdlbmVyYXRlZCBjb250YWluaW5nIGEgdHJlZS1saWtlCisjIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdCBpcyBnZW5lcmF0ZWQgZm9yIEhUTUwgSGVscCkuIEZvciB0aGlzCisjIHRvIHdvcmsgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgSmF2YVNjcmlwdCwgREhUTUwsIENTUyBhbmQgZnJhbWVzIGlzIHJlcXVpcmVkCisjIChpLmUuIGFueSBtb2Rlcm4gYnJvd3NlcikuIFdpbmRvd3MgdXNlcnMgYXJlIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlCisjIEhUTUwgaGVscCBmZWF0dXJlLiBWaWEgY3VzdG9tIHN0eWxlc2hlZXRzIChzZWUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUKSBvbmUgY2FuCisjIGZ1cnRoZXIgZmluZS10dW5lIHRoZSBsb29rIG9mIHRoZSBpbmRleC4gQXMgYW4gZXhhbXBsZSwgdGhlIGRlZmF1bHQgc3R5bGUKKyMgc2hlZXQgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaGFzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gcHV0IGFuIGltYWdlIGF0CisjIHRoZSByb290IG9mIHRoZSB0cmVlIGluc3RlYWQgb2YgdGhlIFBST0pFQ1RfTkFNRS4gU2luY2UgdGhlIHRyZWUgYmFzaWNhbGx5IGhhcworIyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgdGFiIGluZGV4LCB5b3UgY291bGQgY29uc2lkZXIgc2V0dGluZworIyBESVNBQkxFX0lOREVYIHRvIFlFUyB3aGVuIGVuYWJsaW5nIHRoaXMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBZRVMKKworIyBUaGUgRU5VTV9WQUxVRVNfUEVSX0xJTkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGVudW0gdmFsdWVzIHRoYXQKKyMgZG94eWdlbiB3aWxsIGdyb3VwIG9uIG9uZSBsaW5lIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgYSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBzdXBwcmVzcyB0aGUgZW51bSB2YWx1ZXMgZnJvbSBhcHBlYXJpbmcKKyMgaW4gdGhlIG92ZXJ2aWV3IHNlY3Rpb24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDIwLCBkZWZhdWx0IHZhbHVlOiA0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gMQorCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlIHVzZWQKKyMgdG8gc2V0IHRoZSBpbml0aWFsIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBmcmFtZSBpbiB3aGljaCB0aGUgdHJlZSBpcyBzaG93bi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTUwMCwgZGVmYXVsdCB2YWx1ZTogMjUwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisKKyMgV2hlbiB0aGUgRVhUX0xJTktTX0lOX1dJTkRPVyBvcHRpb24gaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgb3BlbiBsaW5rcyB0bworIyBleHRlcm5hbCBzeW1ib2xzIGltcG9ydGVkIHZpYSB0YWcgZmlsZXMgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRVhUX0xJTktTX0lOX1dJTkRPVyAgICA9IE5PCisKKyMgVXNlIHRoaXMgdGFnIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIG9mIExhVGVYIGZvcm11bGFzIGluY2x1ZGVkIGFzIGltYWdlcyBpbgorIyB0aGUgSFRNTCBkb2N1bWVudGF0aW9uLiBXaGVuIHlvdSBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBhZnRlciBhIHN1Y2Nlc3NmdWwKKyMgZG94eWdlbiBydW4geW91IG5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlIGFueSBmb3JtXyoucG5nIGltYWdlcyBmcm9tIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdG8gZm9yY2UgdGhlbSB0byBiZSByZWdlbmVyYXRlZC4KKyMgTWluaW11bSB2YWx1ZTogOCwgbWF4aW11bSB2YWx1ZTogNTAsIGRlZmF1bHQgdmFsdWU6IDEwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitGT1JNVUxBX0ZPTlRTSVpFICAgICAgID0gMTAKKworIyBVc2UgdGhlIEZPUk1VTEFfVFJBTlBBUkVOVCB0YWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGZvciBmb3JtdWxhcyBhcmUgdHJhbnNwYXJlbnQgUE5Hcy4gVHJhbnNwYXJlbnQgUE5HcyBhcmUgbm90CisjIHN1cHBvcnRlZCBwcm9wZXJseSBmb3IgSUUgNi4wLCBidXQgYXJlIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXJuIGJyb3dzZXJzLgorIworIyBOb3RlIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGlzIG9wdGlvbiB5b3UgbmVlZCB0byBkZWxldGUgYW55IGZvcm1fKi5wbmcgZmlsZXMgaW4KKyMgdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgdGhlIGNoYW5nZXMgaGF2ZSBlZmZlY3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0ZPUk1VTEFfVFJBTlNQQVJFTlQgICAgPSBZRVMKKworIyBFbmFibGUgdGhlIFVTRV9NQVRISkFYIG9wdGlvbiB0byByZW5kZXIgTGFUZVggZm9ybXVsYXMgdXNpbmcgTWF0aEpheCAoc2VlCisjIGh0dHA6Ly93d3cubWF0aGpheC5vcmcpIHdoaWNoIHVzZXMgY2xpZW50IHNpZGUgSmF2YXNjcmlwdCBmb3IgdGhlIHJlbmRlcmluZworIyBpbnN0ZWFkIG9mIHVzaW5nIHByZXJlbmRlcmVkIGJpdG1hcHMuIFVzZSB0aGlzIGlmIHlvdSBkbyBub3QgaGF2ZSBMYVRlWAorIyBpbnN0YWxsZWQgb3IgaWYgeW91IHdhbnQgdG8gZm9ybXVsYXMgbG9vayBwcmV0dGllciBpbiB0aGUgSFRNTCBvdXRwdXQuIFdoZW4KKyMgZW5hYmxlZCB5b3UgbWF5IGFsc28gbmVlZCB0byBpbnN0YWxsIE1hdGhKYXggc2VwYXJhdGVseSBhbmQgY29uZmlndXJlIHRoZSBwYXRoCisjIHRvIGl0IHVzaW5nIHRoZSBNQVRISkFYX1JFTFBBVEggb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK1VTRV9NQVRISkFYICAgICAgICAgICAgPSBOTworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdG8gYmUgdXNlZCBmb3IKKyMgdGhlIE1hdGhKYXggb3V0cHV0LiBTZWUgdGhlIE1hdGhKYXggc2l0ZSAoc2VlOgorIyBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEhUTUwtQ1NTICh3aGljaCBpcyBzbG93ZXIsIGJ1dCBoYXMgdGhlIGJlc3QKKyMgY29tcGF0aWJpbGl0eSksIE5hdGl2ZU1NTCAoaS5lLiBNYXRoTUwpIGFuZCBTVkcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIVE1MLUNTUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfRk9STUFUICAgICAgICAgPSBIVE1MLUNTUworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uIFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKyMgc2hvdWxkIGNvbnRhaW4gdGhlIE1hdGhKYXguanMgc2NyaXB0LiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBtYXRoamF4IGRpcmVjdG9yeQorIyBpcyBsb2NhdGVkIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnksIHRoZW4KKyMgTUFUSEpBWF9SRUxQQVRIIHNob3VsZCBiZSAuLi9tYXRoamF4LiBUaGUgZGVmYXVsdCB2YWx1ZSBwb2ludHMgdG8gdGhlIE1hdGhKYXgKKyMgQ29udGVudCBEZWxpdmVyeSBOZXR3b3JrIHNvIHlvdSBjYW4gcXVpY2tseSBzZWUgdGhlIHJlc3VsdCB3aXRob3V0IGluc3RhbGxpbmcKKyMgTWF0aEpheC4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhIGxvY2FsIGNvcHkgb2YKKyMgTWF0aEpheCBmcm9tIGh0dHA6Ly93d3cubWF0aGpheC5vcmcgYmVmb3JlIGRlcGxveW1lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9SRUxQQVRIICAgICAgICA9IGh0dHA6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QKKworIyBUaGUgTUFUSEpBWF9FWFRFTlNJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIE1hdGhKYXgKKyMgZXh0ZW5zaW9uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgZHVyaW5nIE1hdGhKYXggcmVuZGVyaW5nLiBGb3IgZXhhbXBsZQorIyBNQVRISkFYX0VYVEVOU0lPTlMgPSBUZVgvQU1TbWF0aCBUZVgvQU1Tc3ltYm9scworIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9FWFRFTlNJT05TICAgICA9CisKKyMgVGhlIE1BVEhKQVhfQ09ERUZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHdpdGggamF2YXNjcmlwdCBwaWVjZXMKKyMgb2YgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiBzdGFydHVwIG9mIHRoZSBNYXRoSmF4IGNvZGUuIFNlZSB0aGUgTWF0aEpheCBzaXRlCisjIChzZWU6IGh0dHA6Ly9kb2NzLm1hdGhqYXgub3JnL2VuL2xhdGVzdC9vdXRwdXQuaHRtbCkgZm9yIG1vcmUgZGV0YWlscy4gRm9yIGFuCisjIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9DT0RFRklMRSAgICAgICA9CisKKyMgV2hlbiB0aGUgU0VBUkNIRU5HSU5FIHRhZyBpcyBlbmFibGVkIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHNlYXJjaCBib3ggZm9yCisjIHRoZSBIVE1MIG91dHB1dC4gVGhlIHVuZGVybHlpbmcgc2VhcmNoIGVuZ2luZSB1c2VzIGphdmFzY3JpcHQgYW5kIERIVE1MIGFuZAorIyBzaG91bGQgd29yayBvbiBhbnkgbW9kZXJuIGJyb3dzZXIuIE5vdGUgdGhhdCB3aGVuIHVzaW5nIEhUTUwgaGVscAorIyAoR0VORVJBVEVfSFRNTEhFTFApLCBRdCBoZWxwIChHRU5FUkFURV9RSFApLCBvciBkb2NzZXRzIChHRU5FUkFURV9ET0NTRVQpCisjIHRoZXJlIGlzIGFscmVhZHkgYSBzZWFyY2ggZnVuY3Rpb24gc28gdGhpcyBvbmUgc2hvdWxkIHR5cGljYWxseSBiZSBkaXNhYmxlZC4KKyMgRm9yIGxhcmdlIHByb2plY3RzIHRoZSBqYXZhc2NyaXB0IGJhc2VkIHNlYXJjaCBlbmdpbmUgY2FuIGJlIHNsb3csIHRoZW4KKyMgZW5hYmxpbmcgU0VSVkVSX0JBU0VEX1NFQVJDSCBtYXkgcHJvdmlkZSBhIGJldHRlciBzb2x1dGlvbi4gSXQgaXMgcG9zc2libGUgdG8KKyMgc2VhcmNoIHVzaW5nIHRoZSBrZXlib2FyZDsgdG8ganVtcCB0byB0aGUgc2VhcmNoIGJveCB1c2UgPGFjY2VzcyBrZXk+ICsgUworIyAod2hhdCB0aGUgPGFjY2VzcyBrZXk+IGlzIGRlcGVuZHMgb24gdGhlIE9TIGFuZCBicm93c2VyLCBidXQgaXQgaXMgdHlwaWNhbGx5CisjIDxDVFJMPiwgPEFMVD4vPG9wdGlvbj4sIG9yIGJvdGgpLiBJbnNpZGUgdGhlIHNlYXJjaCBib3ggdXNlIHRoZSA8Y3Vyc29yIGRvd24KKyMga2V5PiB0byBqdW1wIGludG8gdGhlIHNlYXJjaCByZXN1bHRzIHdpbmRvdywgdGhlIHJlc3VsdHMgY2FuIGJlIG5hdmlnYXRlZAorIyB1c2luZyB0aGUgPGN1cnNvciBrZXlzPi4gUHJlc3MgPEVudGVyPiB0byBzZWxlY3QgYW4gaXRlbSBvciA8ZXNjYXBlPiB0byBjYW5jZWwKKyMgdGhlIHNlYXJjaC4gVGhlIGZpbHRlciBvcHRpb25zIGNhbiBiZSBzZWxlY3RlZCB3aGVuIHRoZSBjdXJzb3IgaXMgaW5zaWRlIHRoZQorIyBzZWFyY2ggYm94IGJ5IHByZXNzaW5nIDxTaGlmdD4rPGN1cnNvciBkb3duPi4gQWxzbyBoZXJlIHVzZSB0aGUgPGN1cnNvciBrZXlzPgorIyB0byBzZWxlY3QgYSBmaWx0ZXIgYW5kIDxFbnRlcj4gb3IgPGVzY2FwZT4gdG8gYWN0aXZhdGUgb3IgY2FuY2VsIHRoZSBmaWx0ZXIKKyMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gWUVTCisKKyMgV2hlbiB0aGUgU0VSVkVSX0JBU0VEX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCB0aGUgc2VhcmNoIGVuZ2luZSB3aWxsIGJlCisjIGltcGxlbWVudGVkIHVzaW5nIGEgd2ViIHNlcnZlciBpbnN0ZWFkIG9mIGEgd2ViIGNsaWVudCB1c2luZyBKYXZhc2NyaXB0LiBUaGVyZQorIyBhcmUgdHdvIGZsYXZvdXJzIG9mIHdlYiBzZXJ2ZXIgYmFzZWQgc2VhcmNoaW5nIGRlcGVuZGluZyBvbiB0aGUKKyMgRVhURVJOQUxfU0VBUkNIIHNldHRpbmcuIFdoZW4gZGlzYWJsZWQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIFBIUCBzY3JpcHQgZm9yCisjIHNlYXJjaGluZyBhbmQgYW4gaW5kZXggZmlsZSB1c2VkIGJ5IHRoZSBzY3JpcHQuIFdoZW4gRVhURVJOQUxfU0VBUkNIIGlzCisjIGVuYWJsZWQgdGhlIGluZGV4aW5nIGFuZCBzZWFyY2hpbmcgbmVlZHMgdG8gYmUgcHJvdmlkZWQgYnkgZXh0ZXJuYWwgdG9vbHMuIFNlZQorIyB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRVJWRVJfQkFTRURfU0VBUkNIICAgID0gTk8KKworIyBXaGVuIEVYVEVSTkFMX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgbm8gbG9uZ2VyIGdlbmVyYXRlIHRoZSBQSFAKKyMgc2NyaXB0IGZvciBzZWFyY2hpbmcuIEluc3RlYWQgdGhlIHNlYXJjaCByZXN1bHRzIGFyZSB3cml0dGVuIHRvIGFuIFhNTCBmaWxlCisjIHdoaWNoIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBhbiBleHRlcm5hbCBpbmRleGVyLiBEb3h5Z2VuIHdpbGwgaW52b2tlIGFuCisjIGV4dGVybmFsIHNlYXJjaCBlbmdpbmUgcG9pbnRlZCB0byBieSB0aGUgU0VBUkNIRU5HSU5FX1VSTCBvcHRpb24gdG8gb2J0YWluIHRoZQorIyBzZWFyY2ggcmVzdWx0cy4KKyMKKyMgRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgaW5kZXhlciAoIGRveHlpbmRleGVyKSBhbmQgc2VhcmNoIGVuZ2luZQorIyAoZG94eXNlYXJjaC5jZ2kpIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgb3BlbiBzb3VyY2Ugc2VhcmNoIGVuZ2luZSBsaWJyYXJ5CisjIFhhcGlhbiAoc2VlOiBodHRwOi8veGFwaWFuLm9yZy8pLgorIworIyBTZWUgdGhlIHNlY3Rpb24gIkV4dGVybmFsIEluZGV4aW5nIGFuZCBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworRVhURVJOQUxfU0VBUkNIICAgICAgICA9IE5PCisKKyMgVGhlIFNFQVJDSEVOR0lORV9VUkwgc2hvdWxkIHBvaW50IHRvIGEgc2VhcmNoIGVuZ2luZSBob3N0ZWQgYnkgYSB3ZWIgc2VydmVyCisjIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIEVYVEVSTkFMX1NFQVJDSCBpcyBlbmFibGVkLgorIworIyBEb3h5Z2VuIHNoaXBzIHdpdGggYW4gZXhhbXBsZSBpbmRleGVyICggZG94eWluZGV4ZXIpIGFuZCBzZWFyY2ggZW5naW5lCisjIChkb3h5c2VhcmNoLmNnaSkgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBvcGVuIHNvdXJjZSBzZWFyY2ggZW5naW5lIGxpYnJhcnkKKyMgWGFwaWFuIChzZWU6IGh0dHA6Ly94YXBpYW4ub3JnLykuIFNlZSB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kCisjIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIRU5HSU5FX1VSTCAgICAgICA9CisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIGFuZCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUgdW5pbmRleGVkCisjIHNlYXJjaCBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGZvciBpbmRleGluZyBieSBhbiBleHRlcm5hbCB0b29sLiBXaXRoIHRoZQorIyBTRUFSQ0hEQVRBX0ZJTEUgdGFnIHRoZSBuYW1lIG9mIHRoaXMgZmlsZSBjYW4gYmUgc3BlY2lmaWVkLgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBzZWFyY2hkYXRhLnhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hEQVRBX0ZJTEUgICAgICAgID0gc2VhcmNoZGF0YS54bWwKKworIyBXaGVuIFNFUlZFUl9CQVNFRF9TRUFSQ0ggYW5kIEVYVEVSTkFMX1NFQVJDSCBhcmUgYm90aCBlbmFibGVkIHRoZQorIyBFWFRFUk5BTF9TRUFSQ0hfSUQgdGFnIGNhbiBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBwcm9qZWN0LiBUaGlzIGlzCisjIHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0byBzZWFyY2ggdGhyb3VnaCBtdWx0aXBsZQorIyBwcm9qZWN0cyBhbmQgcmVkaXJlY3QgdGhlIHJlc3VsdHMgYmFjayB0byB0aGUgcmlnaHQgcHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRFUk5BTF9TRUFSQ0hfSUQgICAgID0KKworIyBUaGUgRVhUUkFfU0VBUkNIX01BUFBJTkdTIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgc2VhcmNoaW5nIHRocm91Z2ggZG94eWdlbgorIyBwcm9qZWN0cyBvdGhlciB0aGFuIHRoZSBvbmUgZGVmaW5lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoYXQgYXJlCisjIGFsbCBhZGRlZCB0byB0aGUgc2FtZSBleHRlcm5hbCBzZWFyY2ggaW5kZXguIEVhY2ggcHJvamVjdCBuZWVkcyB0byBoYXZlIGEKKyMgdW5pcXVlIGlkIHNldCB2aWEgRVhURVJOQUxfU0VBUkNIX0lELiBUaGUgc2VhcmNoIG1hcHBpbmcgdGhlbiBtYXBzIHRoZSBpZCBvZgorIyB0byBhIHJlbGF0aXZlIGxvY2F0aW9uIHdoZXJlIHRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZC4gVGhlIGZvcm1hdCBpczoKKyMgRVhUUkFfU0VBUkNIX01BUFBJTkdTID0gdGFnbmFtZTE9bG9jMSB0YWduYW1lMj1sb2MyIC4uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1NFQVJDSF9NQVBQSU5HUyAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIExhVGVYIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBsYXRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlCisjIGludm9rZWQuCisjCisjIE5vdGUgdGhhdCB3aGVuIGVuYWJsaW5nIFVTRV9QREZMQVRFWCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGdlbmVyYXRpbmcKKyMgYml0bWFwcyBmb3IgZm9ybXVsYXMgaW4gdGhlIEhUTUwgb3V0cHV0LCBidXQgbm90IGluIHRoZSBNYWtlZmlsZSB0aGF0IGlzCisjIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisjIFRoZSBkZWZhdWx0IGZpbGUgaXM6IGxhdGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvIGdlbmVyYXRlCisjIGluZGV4IGZvciBMYVRlWC4KKyMgVGhlIGRlZmF1bHQgZmlsZSBpczogbWFrZWluZGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTUFLRUlOREVYX0NNRF9OQU1FICAgICA9IG1ha2VpbmRleAorCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCBMYVRlWAorIyBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvIHNhdmUgc29tZQorIyB0cmVlcyBpbiBnZW5lcmFsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8KKworIyBUaGUgUEFQRVJfVFlQRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBwYXBlciB0eXBlIHRoYXQgaXMgdXNlZCBieSB0aGUKKyMgcHJpbnRlci4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogYTQgKDIxMCB4IDI5NyBtbSksIGxldHRlciAoOC41IHggMTEgaW5jaGVzKSwgbGVnYWwgKDguNSB4CisjIDE0IGluY2hlcykgYW5kIGV4ZWN1dGl2ZSAoNy4yNSB4IDEwLjUgaW5jaGVzKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGE0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGxldHRlcgorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBMYVRlWCBwYWNrYWdlIG5hbWVzCisjIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBMYVRlWCBvdXRwdXQuIFRvIGdldCB0aGUgdGltZXMgZm9udCBmb3IKKyMgaW5zdGFuY2UgeW91IGNhbiBzcGVjaWZ5CisjIEVYVFJBX1BBQ0tBR0VTPXRpbWVzCisjIElmIGxlZnQgYmxhbmsgbm8gZXh0cmEgcGFja2FnZXMgd2lsbCBiZSBpbmNsdWRlZC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBoZWFkZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyB1bnRpbCB0aGUgZmlyc3QKKyMgY2hhcHRlci4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZCBoZWFkZXIuIFNlZQorIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCBkb3h5Z2VuIHdyaXRlIHRoZQorIyBkZWZhdWx0IGhlYWRlciB0byBhIHNlcGFyYXRlIGZpbGUuCisjCisjIE5vdGU6IE9ubHkgdXNlIGEgdXNlci1kZWZpbmVkIGhlYWRlciBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchIFRoZQorIyBmb2xsb3dpbmcgY29tbWFuZHMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBpbnNpZGUgdGhlIGhlYWRlcjogJHRpdGxlLAorIyAkZGF0ZXRpbWUsICRkYXRlLCAkZG94eWdlbnZlcnNpb24sICRwcm9qZWN0bmFtZSwgJHByb2plY3RudW1iZXIuIERveHlnZW4gd2lsbAorIyByZXBsYWNlIHRoZW0gYnkgcmVzcGVjdGl2ZWx5IHRoZSB0aXRsZSBvZiB0aGUgcGFnZSwgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwKKyMgb25seSB0aGUgY3VycmVudCBkYXRlLCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgZG94eWdlbiwgdGhlIHByb2plY3QgbmFtZSAoc2VlCisjIFBST0pFQ1RfTkFNRSksIG9yIHRoZSBwcm9qZWN0IG51bWJlciAoc2VlIFBST0pFQ1RfTlVNQkVSKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBmb290ZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBmb290ZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdAorIyBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHN0YW5kYXJkIGZvb3Rlci4KKyMKKyMgTm90ZTogT25seSB1c2UgYSB1c2VyLWRlZmluZWQgZm9vdGVyIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyEKKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0ZPT1RFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIExBVEVYX09VVFBVVCBvdXRwdXQKKyMgZGlyZWN0b3J5LiBOb3RlIHRoYXQgdGhlIGZpbGVzIHdpbGwgYmUgY29waWVkIGFzLWlzOyB0aGVyZSBhcmUgbm8gY29tbWFuZHMgb3IKKyMgbWFya2VycyBhdmFpbGFibGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9FWFRSQV9GSUxFUyAgICAgID0KKworIyBJZiB0aGUgUERGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBMYVRlWCB0aGF0IGlzIGdlbmVyYXRlZCBpcworIyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBQREYgKHVzaW5nIHBzMnBkZiBvciBwZGZsYXRleCkuIFRoZSBQREYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzCisjIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIFBERiB2aWV3ZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIExBVEVYX1BERkxBVEVYIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgdXNlIHBkZmxhdGV4IHRvIGdlbmVyYXRlCisjIHRoZSBQREYgZmlsZSBkaXJlY3RseSBmcm9tIHRoZSBMYVRlWCBmaWxlcy4gU2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0byBnZXQgYQorIyBoaWdoZXIgcXVhbGl0eSBQREYgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgTEFURVhfQkFUQ0hNT0RFIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgYWRkIHRoZSBcYmF0Y2htb2RlCisjIGNvbW1hbmQgdG8gdGhlIGdlbmVyYXRlZCBMYVRlWCBmaWxlcy4gVGhpcyB3aWxsIGluc3RydWN0IExhVGVYIHRvIGtlZXAgcnVubmluZworIyBpZiBlcnJvcnMgb2NjdXIsIGluc3RlYWQgb2YgYXNraW5nIHRoZSB1c2VyIGZvciBoZWxwLiBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQKKyMgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworCisjIElmIHRoZSBMQVRFWF9ISURFX0lORElDRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90IGluY2x1ZGUgdGhlCisjIGluZGV4IGNoYXB0ZXJzIChzdWNoIGFzIEZpbGUgSW5kZXgsIENvbXBvdW5kIEluZGV4LCBldGMuKSBpbiB0aGUgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIyBJZiB0aGUgTEFURVhfU09VUkNFX0NPREUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBzb3VyY2UKKyMgY29kZSB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gdGhlIExhVGVYIG91dHB1dC4KKyMKKyMgTm90ZSB0aGF0IHdoaWNoIHNvdXJjZXMgYXJlIHNob3duIGFsc28gZGVwZW5kcyBvbiBvdGhlciBzZXR0aW5ncyBzdWNoIGFzCisjIFNPVVJDRV9CUk9XU0VSLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9TT1VSQ0VfQ09ERSAgICAgID0gTk8KKworIyBUaGUgTEFURVhfQklCX1NUWUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdHlsZSB0byB1c2UgZm9yIHRoZQorIyBiaWJsaW9ncmFwaHksIGUuZy4gcGxhaW5uYXQsIG9yIGllZWV0ci4gU2VlCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGFuZCBcY2l0ZSBmb3IgbW9yZSBpbmZvLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcGxhaW4uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9CSUJfU1RZTEUgICAgICAgID0gcGxhaW4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQuIFRoZQorIyBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHRvbyBwcmV0dHkgd2l0aCBvdGhlciBSVEYKKyMgcmVhZGVycy9lZGl0b3JzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTworCisjIFRoZSBSVEZfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFJURiBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBydGYuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9SVEYgaXMgc2V0IHRvIFlFUy4KKworUlRGX09VVFBVVCAgICAgICAgICAgICA9IHJ0ZgorCisjIElmIHRoZSBDT01QQUNUX1JURiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgUlRGCisjIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gc2F2ZSBzb21lCisjIHRyZWVzIGluIGdlbmVyYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgd2lsbAorIyBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTAorIyBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZQorIyBicm93c2luZyB1c2luZyBXb3JkIG9yIHNvbWUgb3RoZXIgV29yZCBjb21wYXRpYmxlIHJlYWRlcnMgdGhhdCBzdXBwb3J0IHRob3NlCisjIGZpZWxkcy4KKyMKKyMgTm90ZTogV29yZFBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KKworIyBMb2FkIHN0eWxlc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnCisjIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZSByZXBsYWNlbWVudHMsCisjIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorIworIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IHN0eWxlIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPQorCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBSVEYgZG9jdW1lbnQuIFN5bnRheCBpcworIyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4gQSB0ZW1wbGF0ZSBleHRlbnNpb25zIGZpbGUgY2FuIGJlIGdlbmVyYXRlZAorIyB1c2luZyBkb3h5Z2VuIC1lIHJ0ZiBleHRlbnNpb25GaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtYW4gcGFnZXMgZm9yCisjIGNsYXNzZXMgYW5kIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTworCisjIFRoZSBNQU5fT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIG1hbiBwYWdlcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuIEEgZGlyZWN0b3J5IG1hbjMgd2lsbCBiZSBjcmVhdGVkIGluc2lkZSB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorIyBNQU5fT1VUUFVULgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IG1hbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQKKyMgbWFuIHBhZ2VzLiBJbiBjYXNlIHRoZSBtYW51YWwgc2VjdGlvbiBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyLCB0aGUgbnVtYmVyCisjIDMgaXMgcHJlcGVuZGVkLiBUaGUgZG90ICguKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNQU5fRVhURU5TSU9OIHRhZyBpcworIyBvcHRpb25hbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IC4zLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMworCisjIElmIHRoZSBNQU5fTElOS1MgdGFnIGlzIHNldCB0byBZRVMgYW5kIGRveHlnZW4gZ2VuZXJhdGVzIG1hbiBvdXRwdXQsIHRoZW4gaXQKKyMgd2lsbCBnZW5lcmF0ZSBvbmUgYWRkaXRpb25hbCBtYW4gZmlsZSBmb3IgZWFjaCBlbnRpdHkgZG9jdW1lbnRlZCBpbiB0aGUgcmVhbAorIyBtYW4gcGFnZShzKS4gVGhlc2UgYWRkaXRpb25hbCBmaWxlcyBvbmx5IHNvdXJjZSB0aGUgcmVhbCBtYW4gcGFnZSwgYnV0IHdpdGhvdXQKKyMgdGhlbSB0aGUgbWFuIGNvbW1hbmQgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGFnZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9MSU5LUyAgICAgICAgICAgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1hNTCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYW4gWE1MIGZpbGUgdGhhdAorIyBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IHhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1hNTCBpcyBzZXQgdG8gWUVTLgorCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCisKKyMgVGhlIFhNTF9TQ0hFTUEgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBYTUwgc2NoZW1hLCB3aGljaCBjYW4gYmUgdXNlZCBieSBhCisjIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX1NDSEVNQSAgICAgICAgICAgICA9CisKKyMgVGhlIFhNTF9EVEQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBYTUwgRFRELCB3aGljaCBjYW4gYmUgdXNlZCBieSBhCisjIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX0RURCAgICAgICAgICAgICAgICA9CisKKyMgSWYgdGhlIFhNTF9QUk9HUkFNTElTVElORyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZHVtcCB0aGUgcHJvZ3JhbQorIyBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0bworIyB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplCisjIG9mIHRoZSBYTUwgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgRE9DQk9PSyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfRE9DQk9PSyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgRG9jYm9vayBmaWxlcworIyB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIFBERi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9ET0NCT09LICAgICAgID0gTk8KKworIyBUaGUgRE9DQk9PS19PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgRG9jYm9vayBwYWdlcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4KKyMgZnJvbnQgb2YgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogZG9jYm9vay4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ0JPT0sgaXMgc2V0IHRvIFlFUy4KKworRE9DQk9PS19PVVRQVVQgICAgICAgICA9IGRvY2Jvb2sKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYW4gQXV0b0dlbgorIyBEZWZpbml0aW9ucyAoc2VlIGh0dHA6Ly9hdXRvZ2VuLnNmLm5ldCkgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsCisjIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX0FVVE9HRU5fREVGICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUEVSTE1PRCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBQZXJsIG1vZHVsZQorIyBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpbmNvbXBsZXRlIGF0IHRoZSBtb21lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKKyMgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJCisjIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSBuaWNlbHkKKyMgZm9ybWF0dGVkIHNvIGl0IGNhbiBiZSBwYXJzZWQgYnkgYSBodW1hbiByZWFkZXIuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvCisjIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoaXMgdGFnIGlzIHNldCB0byBOTyB0aGUKKyMgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQKKyMganVzdCB0aGUgc2FtZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9QUkVUVFkgICAgICAgICA9IFlFUworCisjIFRoZSBuYW1lcyBvZiB0aGUgbWFrZSB2YXJpYWJsZXMgaW4gdGhlIGdlbmVyYXRlZCBkb3h5cnVsZXMubWFrZSBmaWxlIGFyZQorIyBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguIFRoaXMgaXMgdXNlZnVsCisjIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZSBNYWtlZmlsZSBkb24ndAorIyBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIHZhcmlhYmxlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvcgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZXZhbHVhdGUgYWxsCisjIEMtcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgYW5kIGluY2x1ZGUgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBleHBhbmQgYWxsIG1hY3JvIG5hbWVzCisjIGluIHRoZSBzb3VyY2UgY29kZS4gSWYgc2V0IHRvIE5PIG9ubHkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2lsbCBiZQorIyBwZXJmb3JtZWQuIE1hY3JvIGV4cGFuc2lvbiBjYW4gYmUgZG9uZSBpbiBhIGNvbnRyb2xsZWQgd2F5IGJ5IHNldHRpbmcKKyMgRVhQQU5EX09OTFlfUFJFREVGIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMgdGhlbgorIyB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgUFJFREVGSU5FRCBhbmQKKyMgRVhQQU5EX0FTX0RFRklORUQgdGFncy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IFlFUworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlIGluY2x1ZGVzIGZpbGVzIGluIHRoZQorIyBJTkNMVURFX1BBVEggd2lsbCBiZSBzZWFyY2hlZCBpZiBhICNpbmNsdWRlIGlzIGZvdW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHRoZQorIyBwcmVwcm9jZXNzb3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hfSU5DTFVERVMgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9QQVRIICAgICAgICAgICA9IEBhYnNfdG9wX3NyY2RpckAvaW5jbHVkZQorCisjIFlvdSBjYW4gdXNlIHRoZSBJTkNMVURFX0ZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQKKyMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZQorIyBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuaywgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIEZJTEVfUEFUVEVSTlMgd2lsbCBiZQorIyB1c2VkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9CisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdCBhcmUKKyMgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YgZS5nLgorIyBnY2MpLiBUaGUgYXJndW1lbnQgb2YgdGhlIHRhZyBpcyBhIGxpc3Qgb2YgbWFjcm9zIG9mIHRoZSBmb3JtOiBuYW1lIG9yCisjIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSAiPSIgYXJlIG9taXR0ZWQsICI9MSIKKyMgaXMgYXNzdW1lZC4gVG8gcHJldmVudCBhIG1hY3JvIGRlZmluaXRpb24gZnJvbSBiZWluZyB1bmRlZmluZWQgdmlhICN1bmRlZiBvcgorIyByZWN1cnNpdmVseSBleHBhbmRlZCB1c2UgdGhlIDo9IG9wZXJhdG9yIGluc3RlYWQgb2YgdGhlID0gb3BlcmF0b3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0gX19hdHRyaWJ1dGVfXyh4KT0KKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIGFuZCBFWFBBTkRfT05MWV9QUkVERUYgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIHRoaXMKKyMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaXN0IG9mIG1hY3JvIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGUKKyMgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4gVXNlIHRoZSBQUkVERUZJTkVECisjIHRhZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IG92ZXJydWxlcyB0aGUKKyMgZGVmaW5pdGlvbiBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0KKworIyBJZiB0aGUgU0tJUF9GVU5DVElPTl9NQUNST1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwKKyMgcmVtb3ZlIGFsbCByZWZyZW5jZXMgdG8gZnVuY3Rpb24tbGlrZSBtYWNyb3MgdGhhdCBhcmUgYWxvbmUgb24gYSBsaW5lLCBoYXZlIGFuCisjIGFsbCB1cHBlcmNhc2UgbmFtZSwgYW5kIGRvIG5vdCBlbmQgd2l0aCBhIHNlbWljb2xvbi4gU3VjaCBmdW5jdGlvbiBtYWNyb3MgYXJlCisjIHR5cGljYWxseSB1c2VkIGZvciBib2lsZXItcGxhdGUgY29kZSwgYW5kIHdpbGwgY29uZnVzZSB0aGUgcGFyc2VyIGlmIG5vdAorIyByZW1vdmVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0tJUF9GVU5DVElPTl9NQUNST1MgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgVEFHRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnIGZpbGVzLiBGb3IgZWFjaCB0YWcKKyMgZmlsZSB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUgZm9ybWF0IG9mCisjIGEgdGFnIGZpbGUgd2l0aG91dCB0aGlzIGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTE9bG9jMSAiZmlsZTIgPSBsb2MyIiAuLi4KKyMgd2hlcmUgbG9jMSBhbmQgbG9jMiBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgb3IgVVJMcy4gU2VlIHRoZQorIyBzZWN0aW9uICJMaW5raW5nIHRvIGV4dGVybmFsIGRvY3VtZW50YXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2UKKyMgb2YgdGFnIGZpbGVzLgorIyBOb3RlOiBFYWNoIHRhZyBmaWxlIG11c3QgaGF2ZSBhbiB1bmlxdWUgbmFtZSAod2hlcmUgdGhlIG5hbWUgZG9lcyBOT1QgaW5jbHVkZQorIyB0aGUgcGF0aCkuIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuIGlzCisjIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPQorCisjIFdoZW4gYSBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFmdGVyIEdFTkVSQVRFX1RBR0ZJTEUsIGRveHlnZW4gd2lsbCBjcmVhdGUgYQorIyB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4gU2VlIHNlY3Rpb24gIkxpbmtpbmcgdG8KKyMgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbiIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzYWdlIG9mIHRhZyBmaWxlcy4KKworR0VORVJBVEVfVEFHRklMRSAgICAgICA9CisKKyMgSWYgdGhlIEFMTEVYVEVSTkFMUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgY2xhc3Mgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlCisjIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8gb25seSB0aGUgaW5oZXJpdGVkIGV4dGVybmFsIGNsYXNzZXMgd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVEVSTkFMX0dST1VQUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgZ3JvdXBzIHdpbGwgYmUgbGlzdGVkIGluCisjIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsIGJlCisjIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRFUk5BTF9QQUdFUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgcGFnZXMgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIHJlbGF0ZWQgcGFnZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgcGFnZXMgd2lsbAorIyBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVEVSTkFMX1BBR0VTICAgICAgICAgPSBZRVMKKworIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiAnd2hpY2ggcGVybCcpLgorIyBUaGUgZGVmYXVsdCBmaWxlICh3aXRoIGFic29sdXRlIHBhdGgpIGlzOiAvdXNyL2Jpbi9wZXJsLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gQFBFUkxACisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNsYXNzIGRpYWdyYW0KKyMgKGluIEhUTUwgYW5kIExhVGVYKSBmb3IgY2xhc3NlcyB3aXRoIGJhc2Ugb3Igc3VwZXIgY2xhc3Nlcy4gU2V0dGluZyB0aGUgdGFnIHRvCisjIE5PIHR1cm5zIHRoZSBkaWFncmFtcyBvZmYuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBhbHNvIHdvcmtzIHdpdGggSEFWRV9ET1QKKyMgZGlzYWJsZWQsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGFuZCB1c2UgZG90LCBzaW5jZSBpdCB5aWVsZHMgbW9yZQorIyBwb3dlcmZ1bCBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKKworIyBZb3UgY2FuIGRlZmluZSBtZXNzYWdlIHNlcXVlbmNlIGNoYXJ0cyB3aXRoaW4gZG94eWdlbiBjb21tZW50cyB1c2luZyB0aGUgXG1zYworIyBjb21tYW5kLiBEb3h5Z2VuIHdpbGwgdGhlbiBydW4gdGhlIG1zY2dlbiB0b29sIChzZWU6CisjIGh0dHA6Ly93d3cubWN0ZXJuYW4ubWUudWsvbXNjZ2VuLykpIHRvIHByb2R1Y2UgdGhlIGNoYXJ0IGFuZCBpbnNlcnQgaXQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIFRoZSBNU0NHRU5fUEFUSCB0YWcgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyMgdGhlIG1zY2dlbiB0b29sIHJlc2lkZXMuIElmIGxlZnQgZW1wdHkgdGhlIHRvb2wgaXMgYXNzdW1lZCB0byBiZSBmb3VuZCBpbiB0aGUKKyMgZGVmYXVsdCBzZWFyY2ggcGF0aC4KKworTVNDR0VOX1BBVEggICAgICAgICAgICA9CisKKyMgWW91IGNhbiBpbmNsdWRlIGRpYWdyYW1zIG1hZGUgd2l0aCBkaWEgaW4gZG94eWdlbiBkb2N1bWVudGF0aW9uLiBEb3h5Z2VuIHdpbGwKKyMgdGhlbiBydW4gZGlhIHRvIHByb2R1Y2UgdGhlIGRpYWdyYW0gYW5kIGluc2VydCBpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlCisjIERJQV9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZGlhIGJpbmFyeSByZXNpZGVzLgorIyBJZiBsZWZ0IGVtcHR5IGRpYSBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitESUFfUEFUSCAgICAgICAgICAgICAgID0KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZSBpbmhlcml0YW5jZQorIyBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIG9yIGlzIG5vdCBhIGNsYXNzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzCisjIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiAoc2VlOgorIyBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy8pLCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudAorIyBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbiBoYXZlIG5vIGVmZmVjdCBpZiB0aGlzIG9wdGlvbiBpcworIyBzZXQgdG8gTk8KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gQERPWFlHRU5fVVNFX0RPVEAKKworIyBUaGUgRE9UX05VTV9USFJFQURTIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRvdCBpbnZvY2F0aW9ucyBkb3h5Z2VuIGlzIGFsbG93ZWQKKyMgdG8gcnVuIGluIHBhcmFsbGVsLiBXaGVuIHNldCB0byAwIGRveHlnZW4gd2lsbCBiYXNlIHRoaXMgb24gdGhlIG51bWJlciBvZgorIyBwcm9jZXNzb3JzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBZb3UgY2FuIHNldCBpdCBleHBsaWNpdGx5IHRvIGEgdmFsdWUKKyMgbGFyZ2VyIHRoYW4gMCB0byBnZXQgY29udHJvbCBvdmVyIHRoZSBiYWxhbmNlIGJldHdlZW4gQ1BVIGxvYWQgYW5kIHByb2Nlc3NpbmcKKyMgc3BlZWQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDMyLCBkZWZhdWx0IHZhbHVlOiAwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX05VTV9USFJFQURTICAgICAgICA9IDAKKworIyBXaGVuIHlvdSB3YW50IGEgZGlmZmVyZW50bHkgbG9va2luZyBmb250IG4gdGhlIGRvdCBmaWxlcyB0aGF0IGRveHlnZW4KKyMgZ2VuZXJhdGVzIHlvdSBjYW4gc3BlY2lmeSB0aGUgZm9udCBuYW1lIHVzaW5nIERPVF9GT05UTkFNRS4gWW91IG5lZWQgdG8gbWFrZQorIyBzdXJlIGRvdCBpcyBhYmxlIHRvIGZpbmQgdGhlIGZvbnQsIHdoaWNoIGNhbiBiZSBkb25lIGJ5IHB1dHRpbmcgaXQgaW4gYQorIyBzdGFuZGFyZCBsb2NhdGlvbiBvciBieSBzZXR0aW5nIHRoZSBET1RGT05UUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBieQorIyBzZXR0aW5nIERPVF9GT05UUEFUSCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZvbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIZWx2ZXRpY2EuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfRk9OVE5BTUUgICAgICAgICAgID0gSGVsdmV0aWNhCisKKyMgVGhlIERPVF9GT05UU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzaXplIChpbiBwb2ludHMpIG9mIHRoZSBmb250IG9mCisjIGRvdCBncmFwaHMuCisjIE1pbmltdW0gdmFsdWU6IDQsIG1heGltdW0gdmFsdWU6IDI0LCBkZWZhdWx0IHZhbHVlOiAxMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9GT05UU0laRSAgICAgICAgICAgPSAxMAorCisjIEJ5IGRlZmF1bHQgZG94eWdlbiB3aWxsIHRlbGwgZG90IHRvIHVzZSB0aGUgZGVmYXVsdCBmb250IGFzIHNwZWNpZmllZCB3aXRoCisjIERPVF9GT05UTkFNRS4gSWYgeW91IHNwZWNpZnkgYSBkaWZmZXJlbnQgZm9udCB1c2luZyBET1RfRk9OVE5BTUUgeW91IGNhbiBzZXQKKyMgdGhlIHBhdGggd2hlcmUgZG90IGNhbiBmaW5kIGl0IHVzaW5nIHRoaXMgdGFnLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0ZPTlRQQVRIICAgICAgICAgICA9CisKKyMgSWYgdGhlIENMQVNTX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yCisjIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4KKyMgU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUgQ0xBU1NfRElBR1JBTVMgdGFnIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0xBU1NfR1JBUEggICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDT0xMQUJPUkFUSU9OX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGltcGxlbWVudGF0aW9uCisjIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQgY2xhc3MgcmVmZXJlbmNlcyB2YXJpYWJsZXMpIG9mIHRoZQorIyBjbGFzcyB3aXRoIG90aGVyIGRvY3VtZW50ZWQgY2xhc3Nlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgR1JPVVBfR1JBUEhTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yCisjIGdyb3Vwcywgc2hvd2luZyB0aGUgZGlyZWN0IGdyb3VwcyBkZXBlbmRlbmNpZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUk9VUF9HUkFQSFMgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVNTF9MT09LIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcKKyMgTGFuZ3VhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgZW5hYmxlZCwgdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBhcmUgc2hvd24gaW5zaWRlIHRoZQorIyBjbGFzcyBub2RlLiBJZiB0aGVyZSBhcmUgbWFueSBmaWVsZHMgb3IgbWV0aG9kcyBhbmQgbWFueSBub2RlcyB0aGUgZ3JhcGggbWF5CisjIGJlY29tZSB0b28gYmlnIHRvIGJlIHVzZWZ1bC4gVGhlIFVNTF9MSU1JVF9OVU1fRklFTERTIHRocmVzaG9sZCBsaW1pdHMgdGhlCisjIG51bWJlciBvZiBpdGVtcyBmb3IgZWFjaCB0eXBlIHRvIG1ha2UgdGhlIHNpemUgbW9yZSBtYW5hZ2VhYmxlLiBTZXQgdGhpcyB0byAwCisjIGZvciBubyBsaW1pdC4gTm90ZSB0aGF0IHRoZSB0aHJlc2hvbGQgbWF5IGJlIGV4Y2VlZGVkIGJ5IDUwJSBiZWZvcmUgdGhlIGxpbWl0CisjIGlzIGVuZm9yY2VkLiBTbyB3aGVuIHlvdSBzZXQgdGhlIHRocmVzaG9sZCB0byAxMCwgdXAgdG8gMTUgZmllbGRzIG1heSBhcHBlYXIsCisjIGJ1dCBpZiB0aGUgbnVtYmVyIGV4Y2VlZHMgMTUsIHRoZSB0b3RhbCBhbW91bnQgb2YgZmllbGRzIHNob3duIGlzIGxpbWl0ZWQgdG8KKyMgMTAuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitVTUxfTElNSVRfTlVNX0ZJRUxEUyAgID0gMTAKKworIyBJZiB0aGUgVEVNUExBVEVfUkVMQVRJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIKKyMgaW5zdGFuY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gTk8KKworIyBJZiB0aGUgSU5DTFVERV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZSBzZXQgdG8KKyMgWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcgdGhlCisjIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBJTkNMVURFRF9CWV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZQorIyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcKKyMgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERURfQllfR1JBUEggICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbAorIyBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gb3IgY2xhc3MgbWV0aG9kLgorIworIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLgorIyBTbyBpbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGVuYWJsZSBjYWxsIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZ3JhcGggY29tbWFuZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0FMTF9HUkFQSCAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMRVJfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBjYWxsZXIKKyMgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4KKyMKKyMgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgdGltZSBvZiBhIHJ1bi4KKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbGVyIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZXJncmFwaCBjb21tYW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDQUxMRVJfR1JBUEggICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEdSQVBISUNBTF9ISUVSQVJDSFkgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ3JhcGhpY2FsCisjIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCisKKyMgSWYgdGhlIERJUkVDVE9SWV9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IHRoZQorIyBkZXBlbmRlbmNpZXMgYSBkaXJlY3RvcnkgaGFzIG9uIG90aGVyIGRpcmVjdG9yaWVzIGluIGEgZ3JhcGhpY2FsIHdheS4gVGhlCisjIGRlcGVuZGVuY3kgcmVsYXRpb25zIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSAjaW5jbHVkZSByZWxhdGlvbnMgYmV0d2VlbiB0aGUKKyMgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRElSRUNUT1JZX0dSQVBIICAgICAgICA9IFlFUworCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzCisjIGdlbmVyYXRlZCBieSBkb3QuCisjIE5vdGU6IElmIHlvdSBjaG9vc2Ugc3ZnIHlvdSBuZWVkIHRvIHNldCBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyCisjIHRvIG1ha2UgdGhlIFNWRyBmaWxlcyB2aXNpYmxlIGluIElFIDkrIChvdGhlciBicm93c2VycyBkbyBub3QgaGF2ZSB0aGlzCisjIHJlcXVpcmVtZW50KS4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogcG5nLCBqcGcsIGdpZiBhbmQgc3ZnLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcG5nLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIElmIERPVF9JTUFHRV9GT1JNQVQgaXMgc2V0IHRvIHN2ZywgdGhlbiB0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIFlFUyB0bworIyBlbmFibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcmFjdGl2ZSBTVkcgaW1hZ2VzIHRoYXQgYWxsb3cgem9vbWluZyBhbmQgcGFubmluZy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBtb2Rlcm4gYnJvd3NlciBvdGhlciB0aGFuIEludGVybmV0IEV4cGxvcmVyLiBUZXN0ZWQKKyMgYW5kIHdvcmtpbmcgYXJlIEZpcmVmb3gsIENocm9tZSwgU2FmYXJpLCBhbmQgT3BlcmEuCisjIE5vdGU6IEZvciBJRSA5KyB5b3UgbmVlZCB0byBzZXQgSFRNTF9GSUxFX0VYVEVOU0lPTiB0byB4aHRtbCBpbiBvcmRlciB0byBtYWtlCisjIHRoZSBTVkcgZmlsZXMgdmlzaWJsZS4gT2xkZXIgdmVyc2lvbnMgb2YgSUUgZG8gbm90IGhhdmUgU1ZHIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOVEVSQUNUSVZFX1NWRyAgICAgICAgPSBOTworCisjIFRoZSBET1RfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfUEFUSCAgICAgICAgICAgICAgID0KKworIyBUaGUgRE9URklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBkb3QgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXGRvdGZpbGUKKyMgY29tbWFuZCkuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgTVNDRklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBtc2MgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXG1zY2ZpbGUKKyMgY29tbWFuZCkuCisKK01TQ0ZJTEVfRElSUyAgICAgICAgICAgPQorCisjIFRoZSBESUFGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGRpYSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBcZGlhZmlsZQorIyBjb21tYW5kKS4KKworRElBRklMRV9ESVJTICAgICAgICAgICA9CisKKyMgVGhlIERPVF9HUkFQSF9NQVhfTk9ERVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMKKyMgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBncmFwaC4gSWYgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhIGdyYXBoIGJlY29tZXMKKyMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRydW5jYXRlIHRoZSBncmFwaCwgd2hpY2ggaXMgdmlzdWFsaXplZAorIyBieSByZXByZXNlbnRpbmcgYSBub2RlIGFzIGEgcmVkIGJveC4gTm90ZSB0aGF0IGRveHlnZW4gaWYgdGhlIG51bWJlciBvZiBkaXJlY3QKKyMgY2hpbGRyZW4gb2YgdGhlIHJvb3Qgbm9kZSBpbiBhIGdyYXBoIGlzIGFscmVhZHkgbGFyZ2VyIHRoYW4KKyMgRE9UX0dSQVBIX01BWF9OT0RFUyB0aGVuIHRoZSBncmFwaCB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuIEFsc28gbm90ZSB0aGF0CisjIHRoZSBzaXplIG9mIGEgZ3JhcGggY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZCBieSBNQVhfRE9UX0dSQVBIX0RFUFRILgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwMCwgZGVmYXVsdCB2YWx1ZTogNTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfR1JBUEhfTUFYX05PREVTICAgID0gNTAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBncmFwaHMKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gQSBkZXB0aCB2YWx1ZSBvZiAzIG1lYW5zIHRoYXQgb25seSBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUKKyMgcm9vdCBieSBmb2xsb3dpbmcgYSBwYXRoIHZpYSBhdCBtb3N0IDMgZWRnZXMgd2lsbCBiZSBzaG93bi4gTm9kZXMgdGhhdCBsYXkKKyMgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAxCisjIG9yIDIgbWF5IGdyZWF0bHkgcmVkdWNlIHRoZSBjb21wdXRhdGlvbiB0aW1lIG5lZWRlZCBmb3IgbGFyZ2UgY29kZSBiYXNlcy4gQWxzbworIyBub3RlIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5CisjIERPVF9HUkFQSF9NQVhfTk9ERVMuIFVzaW5nIGEgZGVwdGggb2YgMCBtZWFucyBubyBkZXB0aCByZXN0cmljdGlvbi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTAwMCwgZGVmYXVsdCB2YWx1ZTogMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK01BWF9ET1RfR1JBUEhfREVQVEggICAgPSAwCisKKyMgU2V0IHRoZSBET1RfVFJBTlNQQVJFTlQgdGFnIHRvIFlFUyB0byBnZW5lcmF0ZSBpbWFnZXMgd2l0aCBhIHRyYW5zcGFyZW50CisjIGJhY2tncm91bmQuIFRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBkb3Qgb24gV2luZG93cyBkb2VzIG5vdCBzZWVtCisjIHRvIHN1cHBvcnQgdGhpcyBvdXQgb2YgdGhlIGJveC4KKyMKKyMgV2FybmluZzogRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSB1c2VkLCBlbmFibGluZyB0aGlzIG9wdGlvbiBtYXkgbGVhZCB0bworIyBiYWRseSBhbnRpLWFsaWFzZWQgbGFiZWxzIG9uIHRoZSBlZGdlcyBvZiBhIGdyYXBoIChpLmUuIHRoZXkgYmVjb21lIGhhcmQgdG8KKyMgcmVhZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9UUkFOU1BBUkVOVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgRE9UX01VTFRJX1RBUkdFVFMgdGFnIHRvIFlFUyBhbGxvdyBkb3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgb3V0cHV0CisjIGZpbGVzIGluIG9uZSBydW4gKGkuZS4gbXVsdGlwbGUgLW8gYW5kIC1UIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSkuIFRoaXMKKyMgbWFrZXMgZG90IHJ1biBmYXN0ZXIsIGJ1dCBzaW5jZSBvbmx5IG5ld2VyIHZlcnNpb25zIG9mIGRvdCAoPjEuOC4xMCkgc3VwcG9ydAorIyB0aGlzLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IFlFUworCisjIElmIHRoZSBHRU5FUkFURV9MRUdFTkQgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgbGVnZW5kIHBhZ2UKKyMgZXhwbGFpbmluZyB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBib3hlcyBhbmQgYXJyb3dzIGluIHRoZSBkb3QgZ2VuZXJhdGVkCisjIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0xFR0VORCAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRE9UX0NMRUFOVVAgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGRvdAorIyBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2YXJpb3VzIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjcyZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTE0IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChzcmNkaXIpL2hlYWRlci5odG1sICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHNyY2RpcikvaW1hZ2VzL09wZW4tVGhyZWFkLUxvZ28tMjAweDQyLnBuZyAgXAorICAgICQoc3JjZGlyKS9pbWFnZXMvb3BlbnRocmVhZF9jb250cmliLnBuZyAgICAgICBcCisgICAgJChzcmNkaXIpL2ltYWdlcy9vcGVudGhyZWFkX2xvZ28ucG5nICAgICAgICAgIFwKKyAgICBkcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC5odG1sICAgICAgICAgICAgXAorICAgIGRyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLnR4dCAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjCisjIE92ZXJyaWRlIGF1dG90b29sJ3MgZGVmYXVsdCBub3Rpb24gb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiB2YXJpYWJsZXMuCisjIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gd2UgY3JlYXRlIGEgZG9jIGRpc3RyaWJ1dGlvbiB0aGF0IHRoZQorIyB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgY3VycmVudCB2ZXJzaW9uLCBub3QgdGhlIHZlcnNpb24gd2hlbiB0aGUKKyMgcGFja2FnZSB3YXMgYm9vdHN0cmFwcGVkLgorIworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHNoZWxsIGNhdCAkKHRvcF9idWlsZGRpcikvLmxvY2FsLXZlcnNpb24pCitWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCisKK2RvY2Rpc3RkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz0gLgorCitvcGVudGhyZWFkX2RvY2Rpc3RfYWxpYXMgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBBQ0tBR0VfVEFSTkFNRSktZG9jcworCitvcGVudGhyZWFkX2RvY2Rpc3RfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKG9wZW50aHJlYWRfZG9jZGlzdF9hbGlhcyktJChWRVJTSU9OKQorCitvcGVudGhyZWFkX2RvY2Rpc3RfYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKGRvY2Rpc3RkaXIpLyQob3BlbnRocmVhZF9kb2NkaXN0X25hbWUpLnRhci5negorCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBEb3h5ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQob3BlbnRocmVhZF9kb2NkaXN0X2FyY2hpdmUpICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0RPQ1MKKworYWxsLWxvY2FsOiBodG1sL2luZGV4Lmh0bWwKKworIworIyBXZSBjaG9vc2UgdG8gbWFudWFsbHkgdHJhbnNmb3JtIERveHlmaWxlLmluIGludG8gRG94eWZpbGUgaGVyZSBpbgorIyB0aGUgbWFrZWZpbGUgcmF0aGVyIHRoYW4gaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCB3ZSBjYW4gdGFrZQorIyBhZHZhbnRhZ2Ugb2YgbGl2ZSwgYXQgYnVpbGQgdGltZSAocmF0aGVyIHRoYW4gYXQgY29uZmlndXJlIHRpbWUpLAorIyB1cGRhdGluZyBvZiB0aGUgcGFja2FnZSB2ZXJzaW9uIG51bWJlci4KKyMKKworRG94eWZpbGU6ICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiBNYWtlZmlsZQorCSQoQU1fVl9HRU4pJChTRUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgLWUgInMsXEBET1hZR0VOX1VTRV9ET1RcQCwkKERPWFlHRU5fVVNFX0RPVCksZyIgICBcCisJICAgIC1lICJzLFxAUEFDS0FHRV9OQU1FXEAsJChQQUNLQUdFX05BTUUpLGciICAgICAgICAgXAorCSAgICAtZSAicyxcQFBBQ0tBR0VfVkVSU0lPTlxALCQoUEFDS0FHRV9WRVJTSU9OKSxnIiAgIFwKKwkgICAgLWUgInMsXEBQRVJMXEAsJChQRVJMKSxnIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIC1lICJzLFxAYWJzX2J1aWxkZGlyXEAsJChhYnNfYnVpbGRkaXIpLGciICAgICAgICAgXAorCSAgICAtZSAicyxcQGFic19zcmNkaXJcQCwkKGFic19zcmNkaXIpLGciICAgICAgICAgICAgIFwKKwkgICAgLWUgInMsXEBhYnNfdG9wX2J1aWxkZGlyXEAsJChhYnNfdG9wX2J1aWxkZGlyKSxnIiBcCisJICAgIC1lICJzLFxAYWJzX3RvcF9zcmNkaXJcQCwkKGFic190b3Bfc3JjZGlyKSxnIiAgICAgXAorCSAgICA8ICIkKHNyY2RpcikvRG94eWZpbGUuaW4iID4gIiQoQCkiCisKK2h0bWwvaW5kZXguaHRtbDogRG94eWZpbGUKKwkkKEFNX1ZfR0VOKSQoRE9YWUdFTikgJCg8KQorCisjCisjIEFkZGl0aW9uIHJ1bGVzIGFuZCBjb21tYW5kcyB0byBjcmVhdGUgYSBkb2N1bWVudGF0aW9uLW9ubHkKKyMgZGlzdHJpYnV0aW9uIG9mIG9wZW50aHJlYWQKKyMKKworJChvcGVudGhyZWFkX2RvY2Rpc3RfbmFtZSk6IGh0bWwvaW5kZXguaHRtbAorCSQoQU1fVl9hdClybSAtZiAtciAkKEApCisJJChjYWxsIGNyZWF0ZS1kaXJlY3RvcnkpCisJJChBTV9WX2F0KWNwIC1SIGh0bWwgJChAKQorCiskKG9wZW50aHJlYWRfZG9jZGlzdF9hcmNoaXZlKTogJChvcGVudGhyZWFkX2RvY2Rpc3RfbmFtZSkKKwkkKEFNX1ZfYXQpZWNobyAiICBUQVIgICAgICAkKEApIgorCSQoQU1fVl9hdCl0YXJkaXI9IiQoPCkiICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiAiJChAKSIgJiYgcm0gLXJmICQoPCkKKworZG9jZGlzdCAkKG9wZW50aHJlYWRfZG9jZGlzdF9hbGlhcyk6ICQob3BlbnRocmVhZF9kb2NkaXN0X2FyY2hpdmUpCisKK2NsZWFuLWxvY2FsOgorCSQoQU1fVl9hdClybSAtZiAtciBodG1sCisKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9ET0NTCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZG9jL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLmh0bWwgYi9kb2MvZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzRkNDlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLmh0bWwKQEAgLTAsMCArMSw0OTI1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorCis8aHRtbCBsYW5nPSJlbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZCBwcm9maWxlPSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzAzL2hjYXJkIGh0dHA6Ly9kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvMjAwOC8wOC8wNC9kYy1odG1sLyI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgorCisgIDx0aXRsZT5TcGluZWwgSG9zdC1Db250cm9sbGVyIFByb3RvY29sPC90aXRsZT4KKworICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJYbWwyUmZjIChzYW5zIHNlcmlmKSI+CisgIC8qPCFbQ0RBVEFbKi8KKwkgIGEgeworCSAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworCSAgfQorICAgICAgLyogaW5mbyBjb2RlIGZyb20gU2FudGFLbGF1c3MgYXQgaHR0cDovL3d3dy5tYWRhYm91dHN0eWxlLmNvbS90b29sdGlwMi5odG1sICovCisgICAgICBhLmluZm8geworICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIGtleS4gKi8KKyAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgICAgei1pbmRleDogMjQ7CisgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgfQorICAgICAgYS5pbmZvOmhvdmVyIHsKKyAgICAgICAgICB6LWluZGV4OiAyNTsKKyAgICAgICAgICBjb2xvcjogI0ZGRjsgYmFja2dyb3VuZC1jb2xvcjogIzkwMDsKKyAgICAgIH0KKyAgICAgIGEuaW5mbyBzcGFuIHsgZGlzcGxheTogbm9uZTsgfQorICAgICAgYS5pbmZvOmhvdmVyIHNwYW4uaW5mbyB7CisgICAgICAgICAgLyogVGhlIHNwYW4gd2lsbCBkaXNwbGF5IGp1c3Qgb24gOmhvdmVyIHN0YXRlLiAqLworICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7CisgICAgICAgICAgdG9wOiAyZW07IGxlZnQ6IC01ZW07IHdpZHRoOiAxNWVtOworICAgICAgICAgIHBhZGRpbmc6IDJweDsgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICAgICAgICBjb2xvcjogIzkwMDsgYmFja2dyb3VuZC1jb2xvcjogI0VFRTsKKyAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgfQorCSAgYS5zbXBsIHsKKwkgIGNvbG9yOiBibGFjazsKKwkgIH0KKwkgIGE6aG92ZXIgeworCSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisJICB9CisJICBhOmFjdGl2ZSB7CisJICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKwkgIH0KKwkgIGFkZHJlc3MgeworCSAgbWFyZ2luLXRvcDogMWVtOworCSAgbWFyZ2luLWxlZnQ6IDJlbTsKKwkgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKwkgIH0KKwkgIGJvZHkgeworCSAgY29sb3I6IGJsYWNrOworCSAgZm9udC1mYW1pbHk6IHZlcmRhbmEsIGhlbHZldGljYSwgYXJpYWwsIHNhbnMtc2VyaWY7CisJICBmb250LXNpemU6IDEwcHQ7CisJICBtYXgtd2lkdGg6IDU1ZW07CisJICAKKwkgIH0KKwkgIGNpdGUgeworCSAgZm9udC1zdHlsZTogbm9ybWFsOworCSAgfQorCSAgZGQgeworCSAgbWFyZ2luLXJpZ2h0OiAyZW07CisJICB9CisJICBkbCB7CisJICBtYXJnaW4tbGVmdDogMmVtOworCSAgfQorCQorCSAgdWwuZW1wdHkgeworCSAgbGlzdC1zdHlsZS10eXBlOiBub25lOworCSAgfQorCSAgdWwuZW1wdHkgbGkgeworCSAgbWFyZ2luLXRvcDogLjVlbTsKKwkgIH0KKwkgIGRsIHAgeworCSAgbWFyZ2luLWxlZnQ6IDBlbTsKKwkgIH0KKwkgIGR0IHsKKwkgIG1hcmdpbi10b3A6IC41ZW07CisJICB9CisJICBoMSB7CisJICBmb250LXNpemU6IDE0cHQ7CisJICBsaW5lLWhlaWdodDogMjFwdDsKKwkgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOworCSAgfQorCSAgaDEubnAgeworCSAgcGFnZS1icmVhay1iZWZvcmU6IGFsd2F5czsKKwkgIH0KKwkgIGgxIGEgeworCSAgY29sb3I6ICMzMzMzMzM7CisJICB9CisJICBoMiB7CisJICBmb250LXNpemU6IDEycHQ7CisJICBsaW5lLWhlaWdodDogMTVwdDsKKwkgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOworCSAgfQorCSAgaDMsIGg0LCBoNSwgaDYgeworCSAgZm9udC1zaXplOiAxMHB0OworCSAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7CisJICB9CisJICBoMiBhLCBoMyBhLCBoNCBhLCBoNSBhLCBoNiBhIHsKKwkgIGNvbG9yOiBibGFjazsKKwkgIH0KKwkgIGltZyB7CisJICBtYXJnaW4tbGVmdDogM2VtOworCSAgfQorCSAgbGkgeworCSAgbWFyZ2luLWxlZnQ6IDJlbTsKKwkgIG1hcmdpbi1yaWdodDogMmVtOworCSAgfQorCSAgb2wgeworCSAgbWFyZ2luLWxlZnQ6IDJlbTsKKwkgIG1hcmdpbi1yaWdodDogMmVtOworCSAgfQorCSAgb2wgcCB7CisJICBtYXJnaW4tbGVmdDogMGVtOworCSAgfQorCSAgcCB7CisJICBtYXJnaW4tbGVmdDogMmVtOworCSAgbWFyZ2luLXJpZ2h0OiAyZW07CisJICB9CisJICBwcmUgeworCSAgbWFyZ2luLWxlZnQ6IDNlbTsKKwkgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0eWVsbG93OworCSAgcGFkZGluZzogLjI1ZW07CisJICB9CisJICBwcmUudGV4dDIgeworCSAgYm9yZGVyLXN0eWxlOiBkb3R0ZWQ7CisJICBib3JkZXItd2lkdGg6IDFweDsKKwkgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7CisJICB3aWR0aDogNjllbTsKKwkgIH0KKwkgIHByZS5pbmxpbmUgeworCSAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisJICBwYWRkaW5nOiAwZW07CisJICB9CisJICBwcmUudGV4dCB7CisJICBib3JkZXItc3R5bGU6IGRvdHRlZDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKKwkgIHdpZHRoOiA2OWVtOworCSAgfQorCSAgcHJlLmRyYXdpbmcgeworCSAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKKwkgIHBhZGRpbmc6IDJlbTsKKwkgIH0KKwkgIHRhYmxlIHsKKwkgIG1hcmdpbi1sZWZ0OiAyZW07CisJICB9CisJICB0YWJsZS50dCB7CisJICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworCSAgfQorCSAgdGFibGUuZnVsbCB7CisJICBib3JkZXItc3R5bGU6IG91dHNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUuaGVhZGVycyB7CisJICBib3JkZXItc3R5bGU6IG91dHNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUudHQgdGQgeworCSAgdmVydGljYWwtYWxpZ246IHRvcDsKKwkgIH0KKwkgIHRhYmxlLmZ1bGwgdGQgeworCSAgYm9yZGVyLXN0eWxlOiBpbnNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUudHQgdGggeworCSAgdmVydGljYWwtYWxpZ246IHRvcDsKKwkgIH0KKwkgIHRhYmxlLmZ1bGwgdGggeworCSAgYm9yZGVyLXN0eWxlOiBpbnNldDsKKwkgIGJvcmRlci13aWR0aDogMXB4OworCSAgfQorCSAgdGFibGUuaGVhZGVycyB0aCB7CisJICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBpbnNldCBub25lOworCSAgYm9yZGVyLXdpZHRoOiAxcHg7CisJICB9CisJICB0YWJsZS5sZWZ0IHsKKwkgIG1hcmdpbi1yaWdodDogYXV0bzsKKwkgIH0KKwkgIHRhYmxlLnJpZ2h0IHsKKwkgIG1hcmdpbi1sZWZ0OiBhdXRvOworCSAgfQorCSAgdGFibGUuY2VudGVyIHsKKwkgIG1hcmdpbi1sZWZ0OiBhdXRvOworCSAgbWFyZ2luLXJpZ2h0OiBhdXRvOworCSAgfQorCSAgY2FwdGlvbiB7CisJICBjYXB0aW9uLXNpZGU6IGJvdHRvbTsKKwkgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgZm9udC1zaXplOiA5cHQ7CisJICBtYXJnaW4tdG9wOiAuNWVtOworCSAgfQorCQorCSAgdGFibGUuaGVhZGVyIHsKKwkgIGJvcmRlci1zcGFjaW5nOiAxcHg7CisJICB3aWR0aDogOTUlOworCSAgZm9udC1zaXplOiAxMHB0OworCSAgY29sb3I6IHdoaXRlOworCSAgfQorCSAgdGQudG9wIHsKKwkgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisJICB9CisJICB0ZC50b3Bub3dyYXAgeworCSAgdmVydGljYWwtYWxpZ246IHRvcDsKKwkgIHdoaXRlLXNwYWNlOiBub3dyYXA7IAorCSAgfQorCSAgdGFibGUuaGVhZGVyIHRkIHsKKwkgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CisJICB3aWR0aDogNTAlOworCSAgfQorCSAgdGFibGUuaGVhZGVyIGEgeworCSAgY29sb3I6IHdoaXRlOworCSAgfQorCSAgdGQucmVmZXJlbmNlIHsKKwkgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisJICB3aGl0ZS1zcGFjZTogbm93cmFwOworCSAgcGFkZGluZy1yaWdodDogMWVtOworCSAgfQorCSAgdGhlYWQgeworCSAgZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXA7CisJICB9CisJICB1bC50b2MsIHVsLnRvYyB1bCB7CisJICBsaXN0LXN0eWxlOiBub25lOworCSAgbWFyZ2luLWxlZnQ6IDEuNWVtOworCSAgbWFyZ2luLXJpZ2h0OiAwZW07CisJICBwYWRkaW5nLWxlZnQ6IDBlbTsKKwkgIH0KKwkgIHVsLnRvYyBsaSB7CisJICBsaW5lLWhlaWdodDogMTUwJTsKKwkgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgZm9udC1zaXplOiAxMHB0OworCSAgbWFyZ2luLWxlZnQ6IDBlbTsKKwkgIG1hcmdpbi1yaWdodDogMGVtOworCSAgfQorCSAgdWwudG9jIGxpIGxpIHsKKwkgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CisJICBmb250LXdlaWdodDogbm9ybWFsOworCSAgZm9udC1zaXplOiA5cHQ7CisJICBtYXJnaW4tbGVmdDogMGVtOworCSAgbWFyZ2luLXJpZ2h0OiAwZW07CisJICB9CisJICBsaS5leGNsdWRlZCB7CisJICBmb250LXNpemU6IDBwdDsKKwkgIH0KKwkgIHVsIHAgeworCSAgbWFyZ2luLWxlZnQ6IDBlbTsKKwkgIH0KKwkKKwkgIC5jb21tZW50IHsKKwkgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKKwkgIH0KKwkgIC5jZW50ZXIgeworCSAgdGV4dC1hbGlnbjogY2VudGVyOworCSAgfQorCSAgLmVycm9yIHsKKwkgIGNvbG9yOiByZWQ7CisJICBmb250LXN0eWxlOiBpdGFsaWM7CisJICBmb250LXdlaWdodDogYm9sZDsKKwkgIH0KKwkgIC5maWd1cmUgeworCSAgZm9udC13ZWlnaHQ6IGJvbGQ7CisJICB0ZXh0LWFsaWduOiBjZW50ZXI7CisJICBmb250LXNpemU6IDlwdDsKKwkgIH0KKwkgIC5maWxlbmFtZSB7CisJICBjb2xvcjogIzMzMzMzMzsKKwkgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgZm9udC1zaXplOiAxMnB0OworCSAgbGluZS1oZWlnaHQ6IDIxcHQ7CisJICB0ZXh0LWFsaWduOiBjZW50ZXI7CisJICB9CisJICAuZm4geworCSAgZm9udC13ZWlnaHQ6IGJvbGQ7CisJICB9CisJICAuaGlkZGVuIHsKKwkgIGRpc3BsYXk6IG5vbmU7CisJICB9CisJICAubGVmdCB7CisJICB0ZXh0LWFsaWduOiBsZWZ0OworCSAgfQorCSAgLnJpZ2h0IHsKKwkgIHRleHQtYWxpZ246IHJpZ2h0OworCSAgfQorCSAgLnRpdGxlIHsKKwkgIGNvbG9yOiAjOTkwMDAwOworCSAgZm9udC1zaXplOiAxOHB0OworCSAgbGluZS1oZWlnaHQ6IDE4cHQ7CisJICBmb250LXdlaWdodDogYm9sZDsKKwkgIHRleHQtYWxpZ246IGNlbnRlcjsKKwkgIG1hcmdpbi10b3A6IDM2cHQ7CisJICB9CisJICAudmNhcmRsaW5lIHsKKwkgIGRpc3BsYXk6IGJsb2NrOworCSAgfQorCSAgLndhcm5pbmcgeworCSAgZm9udC1zaXplOiAxNHB0OworCSAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworCSAgfQorCQorCQorCSAgQG1lZGlhIHByaW50IHsKKwkgIC5ub3ByaW50IHsKKwkJZGlzcGxheTogbm9uZTsKKwkgIH0KKwkKKwkgIGEgeworCQljb2xvcjogYmxhY2s7CisJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwkgIH0KKwkKKwkgIHRhYmxlLmhlYWRlciB7CisJCXdpZHRoOiA5MCU7CisJICB9CisJCisJICB0ZC5oZWFkZXIgeworCQl3aWR0aDogNTAlOworCQljb2xvcjogYmxhY2s7CisJCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworCQl2ZXJ0aWNhbC1hbGlnbjogdG9wOworCQlmb250LXNpemU6IDEycHQ7CisJICB9CisJCisJICB1bC50b2MgYTo6YWZ0ZXIgeworCQljb250ZW50OiBsZWFkZXIoJy4nKSB0YXJnZXQtY291bnRlcihhdHRyKGhyZWYpLCBwYWdlKTsKKwkgIH0KKwkKKwkgIHVsLmluZCBsaSBsaSBhIHsKKwkJY29udGVudDogdGFyZ2V0LWNvdW50ZXIoYXR0cihocmVmKSwgcGFnZSk7CisJICB9CisJCisJICAucHJpbnQyY29sIHsKKwkJY29sdW1uLWNvdW50OiAyOworCQktbW96LWNvbHVtbi1jb3VudDogMjsKKwkJY29sdW1uLWZpbGw6IGF1dG87CisJICB9CisJICB9CisJCisJICBAcGFnZSB7CisJICBAdG9wLWxlZnQgeworCQkgICBjb250ZW50OiAiSW50ZXJuZXQtRHJhZnQiOyAKKwkgIH0gCisJICBAdG9wLXJpZ2h0IHsKKwkJICAgY29udGVudDogIkRlY2VtYmVyIDIwMTAiOyAKKwkgIH0gCisJICBAdG9wLWNlbnRlciB7CisJCSAgIGNvbnRlbnQ6ICJBYmJyZXZpYXRlZCBUaXRsZSI7CisJICB9IAorCSAgQGJvdHRvbS1sZWZ0IHsKKwkJICAgY29udGVudDogIkRvZSI7IAorCSAgfSAKKwkgIEBib3R0b20tY2VudGVyIHsKKwkJICAgY29udGVudDogIkV4cGlyZXMgSnVuZSAyMDExIjsgCisJICB9IAorCSAgQGJvdHRvbS1yaWdodCB7CisJCSAgIGNvbnRlbnQ6ICJbUGFnZSAiIGNvdW50ZXIocGFnZSkgIl0iOyAKKwkgIH0gCisJICB9CisJCisJICBAcGFnZTpmaXJzdCB7IAorCQlAdG9wLWxlZnQgeworCQkgIGNvbnRlbnQ6IG5vcm1hbDsKKwkJfQorCQlAdG9wLXJpZ2h0IHsKKwkJICBjb250ZW50OiBub3JtYWw7CisJCX0KKwkJQHRvcC1jZW50ZXIgeworCQkgIGNvbnRlbnQ6IG5vcm1hbDsKKwkJfQorCSAgfQorICAvKl1dPiovCisgIDwvc3R5bGU+CisKKyAgPGxpbmsgaHJlZj0iI3JmYy50b2MiIHJlbD0iQ29udGVudHMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxIEludHJvZHVjdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMS4xIEFib3V0IHRoaXMgRHJhZnQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xLjEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMS4xLjEgU2NvcGUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xLjEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMS4xLjIgUmVudW1iZXJpbmciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIyIEZyYW1lIEZvcm1hdCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMi4xIEhlYWRlciBGb3JtYXQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMi4xLjEgRkxHOiBGbGFnIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjIuMS4yIE5MSTogTmV0d29yayBMaW5rIElkZW50aWZpZXIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMi4xLjMgVElEOiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjIuMS40IENvbW1hbmQgSWRlbnRpZmllciAoQ01EKSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIyLjEuNSBDb21tYW5kIFBheWxvYWQgKE9wdGlvbmFsKSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjMgRGF0YSBQYWNraW5nIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjEgUHJpbWl0aXZlIFR5cGVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjIgUGFja2VkIFVuc2lnbmVkIEludGVnZXIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjMuMyBEYXRhIEJsb2JzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjQgU3RydWN0dXJlZCBEYXRhIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMy41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIzLjUgQXJyYXlzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNCBDb21tYW5kcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4xIENNRCAwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTk9PUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4yIENNRCAxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUkVTRVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjQuMyBDTUQgMjogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfR0VUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjQgQ01EIDM6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX1NFVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC41IENNRCA0OiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjQuNiBDTUQgNTogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfUkVNT1ZFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC43IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjcgQ01EIDY6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX0lTIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjggQ01EIDc6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjkgQ01EIDg6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjEwIENNRCAxODogKEhvc3QtJmd0O05DUCkgQ01EX1BFRUsiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjExIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjExIENNRCAxOTogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BFRUtfUkVUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4xMiBDTUQgMjA6IChIb3N0LSZndDtOQ1ApIENNRF9QT0tFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNC4xMyBDTUQgMjE6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMTQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjQuMTQgQ01EIDIyOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi40LjE1IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI0LjE1IENNRCAyMzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVTX0FSRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xIFByb3BlcnR5IE1ldGhvZHMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMiBQcm9wZXJ0eSBUeXBlcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjIuMSBTaW5nbGUtVmFsdWUgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjIuMiBNdWx0aXBsZS1WYWx1ZSBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMi4zIFN0cmVhbSBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjMgUHJvcGVydHkgTnVtYmVyaW5nIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjQgUHJvcGVydHkgU2VjdGlvbnMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNSBDb3JlIFByb3BlcnRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjEgUFJPUCAwOiBQUk9QX0xBU1RfU1RBVFVTIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNS4yIFBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNS4zIFBST1AgMjogUFJPUF9OQ1BfVkVSU0lPTiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuNCBQUk9QIDM6IFBST1BfSU5URVJGQUNFX1RZUEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjUgUFJPUCA0OiBQUk9QX0lOVEVSRkFDRV9WRU5ET1JfSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjYgUFJPUCA1OiBQUk9QX0NBUFMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjcgUFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuOCBQUk9QIDc6IFBST1BfUE9XRVJfU1RBVEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjkgUFJPUCA4OiBQUk9QX0hXQUREUiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS41LjEwIFBST1AgOTogUFJPUF9MT0NLIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjExIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuMTEgUFJPUCAxMDogUFJPUF9IT1NUX1BPV0VSX1NUQVRFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjEyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjUuMTIgUFJPUCA0MTA0OiBQUk9QX1VOU09MX1VQREFURV9GSUxURVIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNS4xMyBQUk9QIDQxMDU6IFBST1BfVU5TT0xfVVBEQVRFX0xJU1QiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNiBTdHJlYW0gUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjYuMSBQUk9QIDExMjogUFJPUF9TVFJFQU1fREVCVUciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS42LjIgUFJPUCAxMTM6IFBST1BfU1RSRUFNX1JBVyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjYuMyBQUk9QIDExNDogUFJPUF9TVFJFQU1fTkVUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNi40IFBST1AgMTE1OiBQUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjciIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNyBQSFkgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjcuMSBQUk9QIDMyOiBQUk9QX1BIWV9FTkFCTEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNy4yIFBST1AgMzM6IFBST1BfUEhZX0NIQU4iLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS43LjMgUFJPUCAzNDogUFJPUF9QSFlfQ0hBTl9TVVBQT1JURUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS43LjQgUFJPUCAzNTogUFJPUF9QSFlfRlJFUSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjcuNSBQUk9QIDM2OiBQUk9QX1BIWV9DQ0FfVEhSRVNIT0xEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNy42IFBST1AgMzc6IFBST1BfUEhZX1RYX1BPV0VSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjciIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuNy43IFBST1AgMzg6IFBST1BfUEhZX1JTU0kiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuOCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS43LjggUFJPUCAzOTogUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFkiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOCBNQUMgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMSBQUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOC4yIFBST1AgNDk6IFBST1BfTUFDX1NDQU5fTUFTSyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMyBQUk9QIDUwOiBQUk9QX01BQ19TQ0FOX1BFUklPRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguNCBQUk9QIDUxOiBQUk9QX01BQ19TQ0FOX0JFQUNPTiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguNSBQUk9QIDUyOiBQUk9QX01BQ18xNV80X0xBRERSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOC42IFBST1AgNTM6IFBST1BfTUFDXzE1XzRfU0FERFIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjcgUFJPUCA1NDogUFJPUF9NQUNfMTVfNF9QQU5JRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguOCBQUk9QIDU1OiBQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjkgUFJPUCA1NjogUFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjEwIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjExIFBST1AgNDg2NDogUFJPUF9NQUNfV0hJVEVMSVNUIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMTIgUFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjEzIFBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE0IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjguMTQgUFJPUCA0ODY4OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjE1IFBST1AgNDg2OTogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOC4xNiBQUk9QIDQ4NzA6IFBST1BfTUFDX0JMQUNLTElTVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS44LjE3IFBST1AgNDg3MTogUFJPUF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOSBORVQgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuMSBQUk9QIDY0OiBQUk9QX05FVF9TQVZFRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuMiBQUk9QIDY1OiBQUk9QX05FVF9JRl9VUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuMyBQUk9QIDY2OiBQUk9QX05FVF9TVEFDS19VUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuNCBQUk9QIDY3OiBQUk9QX05FVF9ST0xFIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOS41IFBST1AgNjg6IFBST1BfTkVUX05FVFdPUktfTkFNRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS42IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuNiBQUk9QIDY5OiBQUk9QX05FVF9YUEFOSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS45LjcgUFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuOCBQUk9QIDcxOiBQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjkuOSBQUk9QIDcyOiBQUk9QX05FVF9QQVJUSVRJT05fSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMTAiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOS4xMCBQUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMTEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuOS4xMSBQUk9QIDc0OiBQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS45LjEyIFBST1AgNzU6IFBST1BfTkVUX1BTS0MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjEwIElQdjYgUHJvcGVydGllcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTAuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xMC4xIFBST1AgOTY6IFBST1BfSVBWNl9MTF9BRERSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjEwLjIgUFJPUCA5NzogUFJPUF9JUFY2X01MX0FERFIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMTAuMyBQUk9QIDk4OiBQUk9QX0lQVjZfTUxfUFJFRklYIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjEwLjQgUFJPUCA5OTogUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjUuMTAuNSBQUk9QIDEwMTogUFJPUF9JUHY2X0lDTVBfUElOR19PRkZMT0FEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xMSBEZWJ1ZyBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI1LjExLjEgUFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNS4xMS4yIFBST1AgMTYzODU6IFBST1BfREVCVUdfTkNQX0xPR19MRVZFTCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjYgU3RhdHVzIENvZGVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNyBUZWNobm9sb2d5OiBUaHJlYWQoUikiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMSBDYXBhYmlsaXRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMiBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4xIFBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yIFBST1AgODE6IFBST1BfVEhSRUFEX1BBUkVOVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMyBQUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuNCBQUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi41IFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjYgUFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi43IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuNyBQUk9QIDg2OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEEiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjggUFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04iLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjkgUFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjEwIFBST1AgODk6IFBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjExIFBST1AgOTA6IFBST1BfVEhSRUFEX09OX01FU0hfTkVUUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjEyIFBST1AgOTE6IFBST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjEzIFBST1AgOTI6IFBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjE0IFBST1AgOTM6IFBST1BfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjE1IFBST1AgOTQ6IFBST1BfVEhSRUFEX01PREUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4xNiBQUk9QIDUzNzY6IFBST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTciIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4xNyBQUk9QIDUzNzc6IFBST1BfVEhSRUFEX1JMT0MxNiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xOCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjE4IFBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjE5IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMTkgUFJPUCA1Mzc5OiBQUk9QX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMjAgUFJPUCA1MzgwOiBQUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yMSBQUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMjIgUFJPUCA1MzgyOiBQUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yMyBQUk9QIDUzODM6IFBST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yNCBQUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjI1IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMjUgUFJPUCA1Mzg1OiBQUk9QX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjI2IFBST1AgNTM4NjogUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjI3IFBST1AgNTM4NzogUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4yOCBQUk9QIDUzODg6IFBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yOSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjI5IFBST1AgNTM4OTogUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjMwIFBST1AgNTM5MDogUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEEiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4zMSBQUk9QIDUzOTE6IFBST1BfVEhSRUFEX0pPSU5FUlMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4zMiBQUk9QIDUzOTI6IFBST1BfVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjMzIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI3LjIuMzMgUFJPUCA1MzkzOiBQUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM0IFBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM1IFBST1AgNTM5NTogUFJPUF9USFJFQURfRElTT1ZFUllfU0NBTl9KT0lORVJfRkxBRyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM2IFBST1AgNTM5NjogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iNy4yLjM3IFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjcuMi4zOCBQUk9QIDUzOTg6IFBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEEiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI4IEZlYXR1cmU6IE5ldHdvcmsgU2F2ZSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjguMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOC4xIENvbW1hbmRzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOC4xLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjguMS4xIENNRCA5OiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX1NBVkUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOC4xLjIgQ01EIDEwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX0NMRUFSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOC4xLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjguMS4zIENNRCAxMTogKEhvc3QtJmd0O05DUCkgQ01EX05FVF9SRUNBTEwiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5IEZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMSBDb21tYW5kcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuMSBDTUQgMTI6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fT0ZGTE9BRCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuMiBDTUQgMTM6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fUkVDTEFJTSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuMyBDTUQgMTQ6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fRFJPUCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSI5LjEuNCBDTUQgMTU6IChIb3N0LSZndDtOQ1ApIENNRF9IQk9fT0ZGTE9BREVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOS4xLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMS41IENNRCAxNjogKEhvc3QtJmd0O05DUCkgQ01EX0hCT19SRUNMQUlNRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOS4xLjYgQ01EIDE3OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX0RST1BQRUQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMiBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uOS4yLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjkuMi4xIFBST1AgMTA6IFBST1BfSEJPX01FTV9NQVgiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iOS4yLjIgUFJPUCAxMTogUFJPUF9IQk9fQkxPQ0tfTUFYIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTAiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwIEZlYXR1cmU6IEphbSBEZXRlY3Rpb24iLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMC4xIFByb3BlcnRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuMSBQUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEUiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuMiBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMC4xLjMgUFJPUCA0NjEwOiBQUk9QX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuNCBQUk9QIDQ2MTE6IFBST1BfSkFNX0RFVEVDVF9XSU5ET1ciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjUiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEwLjEuNSBQUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS42IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMC4xLjYgUFJPUCA0NjEzOiBQUk9QX0pBTV9ERVRFQ1RfSElTVE9SWV9CSVRNQVAiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTEgRmVhdHVyZTogR1BJTyBBY2Nlc3MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMS4xIFByb3BlcnRpZXMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjExLjEuMSBQUk9QIDQwOTY6IFBST1BfR1BJT19DT05GSUciLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjExLjEuMiBQUk9QIDQwOTg6IFBST1BfR1BJT19TVEFURSIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTEuMS4zIFBST1AgNDA5OTogUFJPUF9HUElPX1NUQVRFX1NFVCIvPgorPGxpbmsgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuNCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTEuMS40IFBST1AgNDEwMDogUFJPUF9HUElPX1NUQVRFX0NMRUFSIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEyIEZlYXR1cmU6IFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTIuMSBQcm9wZXJ0aWVzIi8+Cis8bGluayBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMi4xLjEgUFJPUCA0MTAxOiBQUk9QX1RSTkdfMzIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEyLjEuMiBQUk9QIDQxMDI6IFBST1BfVFJOR18xMjgiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xLjMiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IjEyLjEuMyBQUk9QIDQxMDM6IFBST1BfVFJOR19SQVdfMzIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iMTMgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuc2VjdGlvbi4xMy4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSIxMy4xIFJhdyBBcHBsaWNhdGlvbiBBY2Nlc3MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQSBGcmFtaW5nIFByb3RvY29sIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4xIFVBUlQgUmVjb21tZW5kYXRpb25zIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMS4xIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJBLjEuMSBVQVJUIEJpdCBSYXRlIERldGVjdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4xLjIgSERMQy1MaXRlIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMiIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4yIFNQSSBSZWNvbW1lbmRhdGlvbnMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkEuMi4xIFNQSSBGcmFtaW5nIFByb3RvY29sIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQS4zIEkmI3hCMjtDIFJlY29tbWVuZGF0aW9ucyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkEuNCBOYXRpdmUgVVNCIFJlY29tbWVuZGF0aW9ucyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCIFRlc3QgVmVjdG9ycyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkIuMSBUZXN0IFZlY3RvcjogUGFja2VkIFVuc2lnbmVkIEludGVnZXIiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4yIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjIgVGVzdCBWZWN0b3I6IFJlc2V0IENvbW1hbmQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4zIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjMgVGVzdCBWZWN0b3I6IFJlc2V0IE5vdGlmaWNhdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjQiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkIuNCBUZXN0IFZlY3RvcjogU2NhbiBCZWFjb24iLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi41IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjUgVGVzdCBWZWN0b3I6IEluYm91bmQgSVB2NiBQYWNrZXQiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi42IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjYgVGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0Ii8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkIuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQi43IFRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQi44IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjggVGVzdCBWZWN0b3I6IFJldHVybmVkIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrcyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjkiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkIuOSBUZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEwIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjEwIFRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjExIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjExIFRlc3QgVmVjdG9yOiBSZW1vdmluZyBhIGxvY2FsIG9uLW1lc2ggbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEyIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJCLjEyIFRlc3QgVmVjdG9yOiBSZW1vdmFsIG5vdGlmaWNhdGlvbiBvZiBhbiBvbi1tZXNoIG5ldHdvcmsiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQyBFeGFtcGxlIFNlc3Npb25zIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy4xIE5DUCBJbml0aWFsaXphdGlvbiIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjIiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuMiBBdHRhY2hpbmcgdG8gYSBuZXR3b3JrIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy4zIFN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQy40IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJDLjQgVW5zdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNSIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy41IERldGFjaGluZyBmcm9tIGEgbmV0d29yayIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjYiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuNiBBdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNyIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iQy43IE5DUCBTb2Z0d2FyZSBSZXNldCIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjgiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuOCBBZGRpbmcgYW4gb24tbWVzaCBwcmVmaXgiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguQy45IiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJDLjkgRW50ZXJpbmcgbG93LXBvd2VyIG1vZGVzIi8+Cis8bGluayBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMTAiIHJlbD0iQ2hhcHRlciIgdGl0bGU9IkMuMTAgU25pZmZpbmcgcmF3IHBhY2tldHMiLz4KKzxsaW5rIGhyZWY9IiNyZmMuYXBwZW5kaXguRCIgcmVsPSJDaGFwdGVyIiB0aXRsZT0iRCBHbG9zc2FyeSIvPgorPGxpbmsgaHJlZj0iI3JmYy5hcHBlbmRpeC5FIiByZWw9IkNoYXB0ZXIiIHRpdGxlPSJFIEFja25vd2xlZGdtZW50cyIvPgorPGxpbmsgaHJlZj0iI3JmYy5hdXRob3JzIiByZWw9IkNoYXB0ZXIiLz4KKworCisgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ieG1sMnJmYyB2ZXJzaW9uIDIuNS4yIC0gaHR0cDovL3Rvb2xzLmlldGYub3JnL3Rvb2xzL3htbDJyZmMiIC8+CisgIDxsaW5rIHJlbD0ic2NoZW1hLmRjdCIgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIgLz4KKworICA8bWV0YSBuYW1lPSJkY3QuY3JlYXRvciIgY29udGVudD0iUXVhdHRsZWJhdW0sIFIuIGFuZCBKLiBXb29keWF0dCwgRWQuIiAvPgorICA8bWV0YSBuYW1lPSJkY3QuaWRlbnRpZmllciIgY29udGVudD0idXJuOmlldGY6aWQ6ZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQtYWI1NjI4YTUiIC8+CisgIDxtZXRhIG5hbWU9ImRjdC5pc3N1ZWQiIHNjaGVtZT0iSVNPODYwMSIgY29udGVudD0iMjAxNy02LTIyIiAvPgorICA8bWV0YSBuYW1lPSJkY3QuYWJzdHJhY3QiIGNvbnRlbnQ9IlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBTcGluZWwgcHJvdG9jb2wsIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IG9mIElQdjYgbmV0d29yayBpbnRlcmZhY2VzIG9uIGRldmljZXMgd2hlcmUgZ2VuZXJhbCBwdXJwb3NlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMgb2ZmbG9hZCBuZXR3b3JrIGZ1bmN0aW9ucyBhdCB0aGVpciBpbnRlcmZhY2VzIHRvIG5ldHdvcmsgY28tcHJvY2Vzc29ycyAoTkNQKSBjb25uZWN0ZWQgYnkgc2ltcGxlIGNvbW11bmljYXRpb24gbGlua3MgbGlrZSBzZXJpYWwgZGF0YSBjaGFubmVscy4gV2hpbGUgaW5pdGlhbGx5IGRldmVsb3BlZCB0byBzdXBwb3J0IFRocmVhZChSKSwgU3BpbmVsJ3MgbGF5ZXJlZCBkZXNpZ24gYWxsb3dzIGl0IHRvIGJlIGVhc2lseSBhZGFwdGVkIHRvIG90aGVyIHNpbWlsYXIgbmV0d29yayB0ZWNobm9sb2dpZXMuICAiIC8+CisgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU3BpbmVsIHByb3RvY29sLCB3aGljaCBmYWNpbGl0YXRlcyB0aGUgY29udHJvbCBhbmQgbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBkZXZpY2VzIHdoZXJlIGdlbmVyYWwgcHVycG9zZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzIG9mZmxvYWQgbmV0d29yayBmdW5jdGlvbnMgYXQgdGhlaXIgaW50ZXJmYWNlcyB0byBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgY29ubmVjdGVkIGJ5IHNpbXBsZSBjb21tdW5pY2F0aW9uIGxpbmtzIGxpa2Ugc2VyaWFsIGRhdGEgY2hhbm5lbHMuIFdoaWxlIGluaXRpYWxseSBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQgZGVzaWduIGFsbG93cyBpdCB0byBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciBzaW1pbGFyIG5ldHdvcmsgdGVjaG5vbG9naWVzLiAgIiAvPgorCis8L2hlYWQ+CisKKzxib2R5PgorCisgIDx0YWJsZSBjbGFzcz0iaGVhZGVyIj4KKyAgICA8dGJvZHk+CisgICAgCisgICAgCTx0cj4KKyAgPHRkIGNsYXNzPSJsZWZ0Ij5OZXR3b3JrIFdvcmtpbmcgR3JvdXA8L3RkPgorICA8dGQgY2xhc3M9InJpZ2h0Ij5SLiBRdWF0dGxlYmF1bTwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImxlZnQiPkludGVybmV0LURyYWZ0PC90ZD4KKyAgPHRkIGNsYXNzPSJyaWdodCI+Si4gV29vZHlhdHQsIEVkLjwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImxlZnQiPkludGVuZGVkIHN0YXR1czogSW5mb3JtYXRpb25hbDwvdGQ+CisgIDx0ZCBjbGFzcz0icmlnaHQiPk5lc3QgTGFicywgSW5jLjwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImxlZnQiPkV4cGlyZXM6IERlY2VtYmVyIDI0LCAyMDE3PC90ZD4KKyAgPHRkIGNsYXNzPSJyaWdodCI+SnVuZSAyMiwgMjAxNzwvdGQ+Cis8L3RyPgorCisgICAgCQorICAgIDwvdGJvZHk+CisgIDwvdGFibGU+CisKKyAgPHAgY2xhc3M9InRpdGxlIj5TcGluZWwgSG9zdC1Db250cm9sbGVyIFByb3RvY29sPGJyIC8+CisgIDxzcGFuIGNsYXNzPSJmaWxlbmFtZSI+ZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQtYWI1NjI4YTU8L3NwYW4+PC9wPgorICAKKyAgPGgxIGlkPSJyZmMuYWJzdHJhY3QiPgorICA8YSBocmVmPSIjcmZjLmFic3RyYWN0Ij5BYnN0cmFjdDwvYT4KKzwvaDE+Cis8cD5UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU3BpbmVsIHByb3RvY29sLCB3aGljaCBmYWNpbGl0YXRlcyB0aGUgY29udHJvbCBhbmQgbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBkZXZpY2VzIHdoZXJlIGdlbmVyYWwgcHVycG9zZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzIG9mZmxvYWQgbmV0d29yayBmdW5jdGlvbnMgYXQgdGhlaXIgaW50ZXJmYWNlcyB0byBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgY29ubmVjdGVkIGJ5IHNpbXBsZSBjb21tdW5pY2F0aW9uIGxpbmtzIGxpa2Ugc2VyaWFsIGRhdGEgY2hhbm5lbHMuIFdoaWxlIGluaXRpYWxseSBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQgZGVzaWduIGFsbG93cyBpdCB0byBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciBzaW1pbGFyIG5ldHdvcmsgdGVjaG5vbG9naWVzLiAgPC9wPgorPHA+VGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB2YXJpb3VzIFNwaW5lbCBzcGVjaWFsaXphdGlvbnMsIGluY2x1ZGluZyBzdXBwb3J0IGZvciB0aGUgVGhyZWFkKFIpIGxvdy1wb3dlciBtZXNoIG5ldHdvcmsgdGVjaG5vbG9neS4gIDwvcD4KKzxoMSBpZD0icmZjLnN0YXR1cyI+CisgIDxhIGhyZWY9IiNyZmMuc3RhdHVzIj5TdGF0dXMgb2YgVGhpcyBNZW1vPC9hPgorPC9oMT4KKzxwPlRoaXMgSW50ZXJuZXQtRHJhZnQgaXMgc3VibWl0dGVkIGluIGZ1bGwgY29uZm9ybWFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBvZiBCQ1AgNzggYW5kIEJDUCA3OS48L3A+Cis8cD5JbnRlcm5ldC1EcmFmdHMgYXJlIHdvcmtpbmcgZG9jdW1lbnRzIG9mIHRoZSBJbnRlcm5ldCBFbmdpbmVlcmluZyBUYXNrIEZvcmNlIChJRVRGKS4gIE5vdGUgdGhhdCBvdGhlciBncm91cHMgbWF5IGFsc28gZGlzdHJpYnV0ZSB3b3JraW5nIGRvY3VtZW50cyBhcyBJbnRlcm5ldC1EcmFmdHMuICBUaGUgbGlzdCBvZiBjdXJyZW50IEludGVybmV0LURyYWZ0cyBpcyBhdCBodHRwOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZHJhZnRzL2N1cnJlbnQvLjwvcD4KKzxwPkludGVybmV0LURyYWZ0cyBhcmUgZHJhZnQgZG9jdW1lbnRzIHZhbGlkIGZvciBhIG1heGltdW0gb2Ygc2l4IG1vbnRocyBhbmQgbWF5IGJlIHVwZGF0ZWQsIHJlcGxhY2VkLCBvciBvYnNvbGV0ZWQgYnkgb3RoZXIgZG9jdW1lbnRzIGF0IGFueSB0aW1lLiAgSXQgaXMgaW5hcHByb3ByaWF0ZSB0byB1c2UgSW50ZXJuZXQtRHJhZnRzIGFzIHJlZmVyZW5jZSBtYXRlcmlhbCBvciB0byBjaXRlIHRoZW0gb3RoZXIgdGhhbiBhcyAid29yayBpbiBwcm9ncmVzcy4iPC9wPgorPHA+VGhpcyBJbnRlcm5ldC1EcmFmdCB3aWxsIGV4cGlyZSBvbiBEZWNlbWJlciAyNCwgMjAxNy48L3A+Cis8aDEgaWQ9InJmYy5jb3B5cmlnaHRub3RpY2UiPgorICA8YSBocmVmPSIjcmZjLmNvcHlyaWdodG5vdGljZSI+Q29weXJpZ2h0IE5vdGljZTwvYT4KKzwvaDE+Cis8cD5Db3B5cmlnaHQgKGMpIDIwMTcgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcyB0aGUgZG9jdW1lbnQgYXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgorPHA+VGhpcyBkb2N1bWVudCBpcyBzdWJqZWN0IHRvIEJDUCA3OCBhbmQgdGhlIElFVEYgVHJ1c3QncyBMZWdhbCBQcm92aXNpb25zIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzIChodHRwOi8vdHJ1c3RlZS5pZXRmLm9yZy9saWNlbnNlLWluZm8pIGluIGVmZmVjdCBvbiB0aGUgZGF0ZSBvZiBwdWJsaWNhdGlvbiBvZiB0aGlzIGRvY3VtZW50LiAgUGxlYXNlIHJldmlldyB0aGVzZSBkb2N1bWVudHMgY2FyZWZ1bGx5LCBhcyB0aGV5IGRlc2NyaWJlIHlvdXIgcmlnaHRzIGFuZCByZXN0cmljdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoaXMgZG9jdW1lbnQuICBDb2RlIENvbXBvbmVudHMgZXh0cmFjdGVkIGZyb20gdGhpcyBkb2N1bWVudCBtdXN0IGluY2x1ZGUgU2ltcGxpZmllZCBCU0QgTGljZW5zZSB0ZXh0IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuZSBvZiB0aGUgVHJ1c3QgTGVnYWwgUHJvdmlzaW9ucyBhbmQgYXJlIHByb3ZpZGVkIHdpdGhvdXQgd2FycmFudHkgYXMgZGVzY3JpYmVkIGluIHRoZSBTaW1wbGlmaWVkIEJTRCBMaWNlbnNlLjwvcD4KKzxwPlRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBtb2RpZmllZCwgYW5kIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgbWF5IG5vdCBiZSBjcmVhdGVkLCBhbmQgaXQgbWF5IG5vdCBiZSBwdWJsaXNoZWQgZXhjZXB0IGFzIGFuIEludGVybmV0LURyYWZ0LjwvcD4KKworICAKKyAgPGhyIGNsYXNzPSJub3ByaW50IiAvPgorICA8aDEgY2xhc3M9Im5wIiBpZD0icmZjLnRvYyI+PGEgaHJlZj0iI3JmYy50b2MiPlRhYmxlIG9mIENvbnRlbnRzPC9hPjwvaDE+CisgIDx1bCBjbGFzcz0idG9jIj4KKworICAJPGxpPjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEiPkludHJvZHVjdGlvbjwvYT48L2xpPgorPHVsPjxsaT4xLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMSI+QWJvdXQgdGhpcyBEcmFmdDwvYT48L2xpPgorPHVsPjxsaT4xLjEuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMS4xLjEiPlNjb3BlPC9hPjwvbGk+Cis8bGk+MS4xLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMS4yIj5SZW51bWJlcmluZzwvYT48L2xpPgorPC91bD48L3VsPjxsaT4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yIj5GcmFtZSBGb3JtYXQ8L2E+PC9saT4KKzx1bD48bGk+Mi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEiPkhlYWRlciBGb3JtYXQ8L2E+PC9saT4KKzx1bD48bGk+Mi4xLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS4xIj5GTEc6IEZsYWc8L2E+PC9saT4KKzxsaT4yLjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjIiPk5MSTogTmV0d29yayBMaW5rIElkZW50aWZpZXI8L2E+PC9saT4KKzxsaT4yLjEuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjMiPlRJRDogVHJhbnNhY3Rpb24gSWRlbnRpZmllcjwvYT48L2xpPgorPGxpPjIuMS40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuNCI+Q29tbWFuZCBJZGVudGlmaWVyIChDTUQpPC9hPjwvbGk+Cis8bGk+Mi4xLjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS41Ij5Db21tYW5kIFBheWxvYWQgKE9wdGlvbmFsKTwvYT48L2xpPgorPC91bD48L3VsPjxsaT4zLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zIj5EYXRhIFBhY2tpbmc8L2E+PC9saT4KKzx1bD48bGk+My4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjEiPlByaW1pdGl2ZSBUeXBlczwvYT48L2xpPgorPGxpPjMuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4yIj5QYWNrZWQgVW5zaWduZWQgSW50ZWdlcjwvYT48L2xpPgorPGxpPjMuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4zIj5EYXRhIEJsb2JzPC9hPjwvbGk+Cis8bGk+My40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjQiPlN0cnVjdHVyZWQgRGF0YTwvYT48L2xpPgorPGxpPjMuNS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMy41Ij5BcnJheXM8L2E+PC9saT4KKzwvdWw+PGxpPjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQiPkNvbW1hbmRzPC9hPjwvbGk+Cis8dWw+PGxpPjQuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xIj5DTUQgMDogKEhvc3QtJmd0O05DUCkgQ01EX05PT1A8L2E+PC9saT4KKzxsaT40LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMiI+Q01EIDE6IChIb3N0LSZndDtOQ1ApIENNRF9SRVNFVDwvYT48L2xpPgorPGxpPjQuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4zIj5DTUQgMjogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfR0VUPC9hPjwvbGk+Cis8bGk+NC40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjQiPkNNRCAzOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9TRVQ8L2E+PC9saT4KKzxsaT40LjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuNSI+Q01EIDQ6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX0lOU0VSVDwvYT48L2xpPgorPGxpPjQuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC42Ij5DTUQgNTogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfUkVNT1ZFPC9hPjwvbGk+Cis8bGk+NC43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjciPkNNRCA2OiAoTkNQLSZndDtIb3N0KSBDTURfUFJPUF9WQUxVRV9JUzwvYT48L2xpPgorPGxpPjQuOC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC44Ij5DTUQgNzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfSU5TRVJURUQ8L2E+PC9saT4KKzxsaT40LjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuOSI+Q01EIDg6IChOQ1AtJmd0O0hvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQ8L2E+PC9saT4KKzxsaT40LjEwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEwIj5DTUQgMTg6IChIb3N0LSZndDtOQ1ApIENNRF9QRUVLPC9hPjwvbGk+Cis8bGk+NC4xMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMSI+Q01EIDE5OiAoTkNQLSZndDtIb3N0KSBDTURfUEVFS19SRVQ8L2E+PC9saT4KKzxsaT40LjEyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEyIj5DTUQgMjA6IChIb3N0LSZndDtOQ1ApIENNRF9QT0tFPC9hPjwvbGk+Cis8bGk+NC4xMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMyI+Q01EIDIxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L2E+PC9saT4KKzxsaT40LjE0LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjE0Ij5DTUQgMjI6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvYT48L2xpPgorPGxpPjQuMTUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMTUiPkNNRCAyMzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVTX0FSRTwvYT48L2xpPgorPC91bD48bGk+NS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNSI+UHJvcGVydGllczwvYT48L2xpPgorPHVsPjxsaT41LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMSI+UHJvcGVydHkgTWV0aG9kczwvYT48L2xpPgorPGxpPjUuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yIj5Qcm9wZXJ0eSBUeXBlczwvYT48L2xpPgorPHVsPjxsaT41LjIuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjEiPlNpbmdsZS1WYWx1ZSBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8bGk+NS4yLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4yIj5NdWx0aXBsZS1WYWx1ZSBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8bGk+NS4yLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMi4zIj5TdHJlYW0gUHJvcGVydGllczwvYT48L2xpPgorPC91bD48bGk+NS4zLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjMiPlByb3BlcnR5IE51bWJlcmluZzwvYT48L2xpPgorPGxpPjUuNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS40Ij5Qcm9wZXJ0eSBTZWN0aW9uczwvYT48L2xpPgorPGxpPjUuNS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41Ij5Db3JlIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS41LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xIj5QUk9QIDA6IFBST1BfTEFTVF9TVEFUVVM8L2E+PC9saT4KKzxsaT41LjUuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjIiPlBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OPC9hPjwvbGk+Cis8bGk+NS41LjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4zIj5QUk9QIDI6IFBST1BfTkNQX1ZFUlNJT048L2E+PC9saT4KKzxsaT41LjUuNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjQiPlBST1AgMzogUFJPUF9JTlRFUkZBQ0VfVFlQRTwvYT48L2xpPgorPGxpPjUuNS41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNSI+UFJPUCA0OiBQUk9QX0lOVEVSRkFDRV9WRU5ET1JfSUQ8L2E+PC9saT4KKzxsaT41LjUuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjYiPlBST1AgNTogUFJPUF9DQVBTPC9hPjwvbGk+Cis8bGk+NS41LjcuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS43Ij5QUk9QIDY6IFBST1BfSU5URVJGQUNFX0NPVU5UPC9hPjwvbGk+Cis8bGk+NS41LjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS44Ij5QUk9QIDc6IFBST1BfUE9XRVJfU1RBVEU8L2E+PC9saT4KKzxsaT41LjUuOS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjkiPlBST1AgODogUFJPUF9IV0FERFI8L2E+PC9saT4KKzxsaT41LjUuMTAuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMCI+UFJPUCA5OiBQUk9QX0xPQ0s8L2E+PC9saT4KKzxsaT41LjUuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMSI+UFJPUCAxMDogUFJPUF9IT1NUX1BPV0VSX1NUQVRFPC9hPjwvbGk+Cis8bGk+NS41LjEyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTIiPlBST1AgNDEwNDogUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSPC9hPjwvbGk+Cis8bGk+NS41LjEzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTMiPlBST1AgNDEwNTogUFJPUF9VTlNPTF9VUERBVEVfTElTVDwvYT48L2xpPgorPC91bD48bGk+NS42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYiPlN0cmVhbSBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjUuNi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYuMSI+UFJPUCAxMTI6IFBST1BfU1RSRUFNX0RFQlVHPC9hPjwvbGk+Cis8bGk+NS42LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4yIj5QUk9QIDExMzogUFJPUF9TVFJFQU1fUkFXPC9hPjwvbGk+Cis8bGk+NS42LjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4zIj5QUk9QIDExNDogUFJPUF9TVFJFQU1fTkVUPC9hPjwvbGk+Cis8bGk+NS42LjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi40Ij5QUk9QIDExNTogUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFPC9hPjwvbGk+Cis8L3VsPjxsaT41LjcuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNyI+UEhZIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS43LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4xIj5QUk9QIDMyOiBQUk9QX1BIWV9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS43LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4yIj5QUk9QIDMzOiBQUk9QX1BIWV9DSEFOPC9hPjwvbGk+Cis8bGk+NS43LjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4zIj5QUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRDwvYT48L2xpPgorPGxpPjUuNy40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNCI+UFJPUCAzNTogUFJPUF9QSFlfRlJFUTwvYT48L2xpPgorPGxpPjUuNy41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNSI+UFJPUCAzNjogUFJPUF9QSFlfQ0NBX1RIUkVTSE9MRDwvYT48L2xpPgorPGxpPjUuNy42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNiI+UFJPUCAzNzogUFJPUF9QSFlfVFhfUE9XRVI8L2E+PC9saT4KKzxsaT41LjcuNy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjciPlBST1AgMzg6IFBST1BfUEhZX1JTU0k8L2E+PC9saT4KKzxsaT41LjcuOC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjgiPlBST1AgMzk6IFBST1BfUEhZX1JYX1NFTlNJVElWSVRZPC9hPjwvbGk+Cis8L3VsPjxsaT41LjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOCI+TUFDIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS44LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xIj5QUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFPC9hPjwvbGk+Cis8bGk+NS44LjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4yIj5QUk9QIDQ5OiBQUk9QX01BQ19TQ0FOX01BU0s8L2E+PC9saT4KKzxsaT41LjguMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjMiPlBST1AgNTA6IFBST1BfTUFDX1NDQU5fUEVSSU9EPC9hPjwvbGk+Cis8bGk+NS44LjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC40Ij5QUk9QIDUxOiBQUk9QX01BQ19TQ0FOX0JFQUNPTjwvYT48L2xpPgorPGxpPjUuOC41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNSI+UFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUjwvYT48L2xpPgorPGxpPjUuOC42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNiI+UFJPUCA1MzogUFJPUF9NQUNfMTVfNF9TQUREUjwvYT48L2xpPgorPGxpPjUuOC43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNyI+UFJPUCA1NDogUFJPUF9NQUNfMTVfNF9QQU5JRDwvYT48L2xpPgorPGxpPjUuOC44LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguOCI+UFJPUCA1NTogUFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS44LjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC45Ij5QUk9QIDU2OiBQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFPC9hPjwvbGk+Cis8bGk+NS44LjEwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTAiPlBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVDwvYT48L2xpPgorPGxpPjUuOC4xMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjExIj5QUk9QIDQ4NjQ6IFBST1BfTUFDX1dISVRFTElTVDwvYT48L2xpPgorPGxpPjUuOC4xMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEyIj5QUk9QIDQ4NjU6IFBST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS44LjEzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTMiPlBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEPC9hPjwvbGk+Cis8bGk+NS44LjE0LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTQiPlBST1AgNDg2ODogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVM8L2E+PC9saT4KKzxsaT41LjguMTUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNSI+UFJPUCA0ODY5OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUzwvYT48L2xpPgorPGxpPjUuOC4xNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE2Ij5QUk9QIDQ4NzA6IFBST1BfTUFDX0JMQUNLTElTVDwvYT48L2xpPgorPGxpPjUuOC4xNy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE3Ij5QUk9QIDQ4NzE6IFBST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEPC9hPjwvbGk+Cis8L3VsPjxsaT41LjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOSI+TkVUIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS45LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xIj5QUk9QIDY0OiBQUk9QX05FVF9TQVZFRDwvYT48L2xpPgorPGxpPjUuOS4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMiI+UFJPUCA2NTogUFJPUF9ORVRfSUZfVVA8L2E+PC9saT4KKzxsaT41LjkuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjMiPlBST1AgNjY6IFBST1BfTkVUX1NUQUNLX1VQPC9hPjwvbGk+Cis8bGk+NS45LjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS40Ij5QUk9QIDY3OiBQUk9QX05FVF9ST0xFPC9hPjwvbGk+Cis8bGk+NS45LjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS41Ij5QUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUU8L2E+PC9saT4KKzxsaT41LjkuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjYiPlBST1AgNjk6IFBST1BfTkVUX1hQQU5JRDwvYT48L2xpPgorPGxpPjUuOS43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuNyI+UFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWTwvYT48L2xpPgorPGxpPjUuOS44LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuOCI+UFJPUCA3MTogUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVI8L2E+PC9saT4KKzxsaT41LjkuOS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjkiPlBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRDwvYT48L2xpPgorPGxpPjUuOS4xMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjEwIj5QUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc8L2E+PC9saT4KKzxsaT41LjkuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMSI+UFJPUCA3NDogUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUU8L2E+PC9saT4KKzxsaT41LjkuMTIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMiI+UFJPUCA3NTogUFJPUF9ORVRfUFNLQzwvYT48L2xpPgorPC91bD48bGk+NS4xMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMCI+SVB2NiBQcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjUuMTAuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4xIj5QUk9QIDk2OiBQUk9QX0lQVjZfTExfQUREUjwvYT48L2xpPgorPGxpPjUuMTAuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4yIj5QUk9QIDk3OiBQUk9QX0lQVjZfTUxfQUREUjwvYT48L2xpPgorPGxpPjUuMTAuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4zIj5QUk9QIDk4OiBQUk9QX0lQVjZfTUxfUFJFRklYPC9hPjwvbGk+Cis8bGk+NS4xMC40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjQiPlBST1AgOTk6IFBST1BfSVBWNl9BRERSRVNTX1RBQkxFPC9hPjwvbGk+Cis8bGk+NS4xMC41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjUiPlBST1AgMTAxOiBQUk9QX0lQdjZfSUNNUF9QSU5HX09GRkxPQUQ8L2E+PC9saT4KKzwvdWw+PGxpPjUuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEiPkRlYnVnIFByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+NS4xMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjExLjEiPlBST1AgMTYzODQ6IFBST1BfREVCVUdfVEVTVF9BU1NFUlQ8L2E+PC9saT4KKzxsaT41LjExLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEuMiI+UFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjYuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjYiPlN0YXR1cyBDb2RlczwvYT48L2xpPgorPGxpPjcuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjciPlRlY2hub2xvZ3k6IFRocmVhZChSKTwvYT48L2xpPgorPHVsPjxsaT43LjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMSI+Q2FwYWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+Ny4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIiPlByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+Ny4yLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xIj5QUk9QIDgwOiBQUk9QX1RIUkVBRF9MRUFERVJfQUREUjwvYT48L2xpPgorPGxpPjcuMi4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMiI+UFJPUCA4MTogUFJPUF9USFJFQURfUEFSRU5UPC9hPjwvbGk+Cis8bGk+Ny4yLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zIj5QUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRTwvYT48L2xpPgorPGxpPjcuMi40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNCI+UFJPUCA4MzogUFJPUF9USFJFQURfTEVBREVSX1JJRDwvYT48L2xpPgorPGxpPjcuMi41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNSI+UFJPUCA4NDogUFJPUF9USFJFQURfTEVBREVSX1dFSUdIVDwvYT48L2xpPgorPGxpPjcuMi42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNiI+UFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVDwvYT48L2xpPgorPGxpPjcuMi43LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNyI+UFJPUCA4NjogUFJPUF9USFJFQURfTkVUV09SS19EQVRBPC9hPjwvbGk+Cis8bGk+Ny4yLjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi44Ij5QUk9QIDg3OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTjwvYT48L2xpPgorPGxpPjcuMi45LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOSI+UFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQTwvYT48L2xpPgorPGxpPjcuMi4xMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjEwIj5QUk9QIDg5OiBQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT048L2E+PC9saT4KKzxsaT43LjIuMTEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMSI+UFJPUCA5MDogUFJPUF9USFJFQURfT05fTUVTSF9ORVRTPC9hPjwvbGk+Cis8bGk+Ny4yLjEyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTIiPlBST1AgOTE6IFBST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUzwvYT48L2xpPgorPGxpPjcuMi4xMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjEzIj5QUk9QIDkyOiBQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFM8L2E+PC9saT4KKzxsaT43LjIuMTQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNCI+UFJPUCA5MzogUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFPC9hPjwvbGk+Cis8bGk+Ny4yLjE1LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTUiPlBST1AgOTQ6IFBST1BfVEhSRUFEX01PREU8L2E+PC9saT4KKzxsaT43LjIuMTYuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNiI+UFJPUCA1Mzc2OiBQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUPC9hPjwvbGk+Cis8bGk+Ny4yLjE3LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTciPlBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2PC9hPjwvbGk+Cis8bGk+Ny4yLjE4LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTgiPlBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEPC9hPjwvbGk+Cis8bGk+Ny4yLjE5LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTkiPlBST1AgNTM3OTogUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWTwvYT48L2xpPgorPGxpPjcuMi4yMC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIwIj5QUk9QIDUzODA6IFBST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVDwvYT48L2xpPgorPGxpPjcuMi4yMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIxIj5QUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTPC9hPjwvbGk+Cis8bGk+Ny4yLjIyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjIiPlBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVPC9hPjwvbGk+Cis8bGk+Ny4yLjIzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjMiPlBST1AgNTM4MzogUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRDwvYT48L2xpPgorPGxpPjcuMi4yNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjI0Ij5QUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEPC9hPjwvbGk+Cis8bGk+Ny4yLjI1LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjUiPlBST1AgNTM4NTogUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVI8L2E+PC9saT4KKzxsaT43LjIuMjYuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNiI+UFJPUCA1Mzg2OiBQUk9QX1RIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEPC9hPjwvbGk+Cis8bGk+Ny4yLjI3LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjciPlBST1AgNTM4NzogUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEU8L2E+PC9saT4KKzxsaT43LjIuMjguICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yOCI+UFJPUCA1Mzg4OiBQUk9QX1RIUkVBRF9DSElMRF9DT1VOVF9NQVg8L2E+PC9saT4KKzxsaT43LjIuMjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yOSI+UFJPUCA1Mzg5OiBQUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBPC9hPjwvbGk+Cis8bGk+Ny4yLjMwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzAiPlBST1AgNTM5MDogUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEE8L2E+PC9saT4KKzxsaT43LjIuMzEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMSI+UFJPUCA1MzkxOiBQUk9QX1RIUkVBRF9KT0lORVJTPC9hPjwvbGk+Cis8bGk+Ny4yLjMyLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzIiPlBST1AgNTM5MjogUFJPUF9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQ8L2E+PC9saT4KKzxsaT43LjIuMzMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMyI+UFJPUCA1MzkzOiBQUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRDwvYT48L2xpPgorPGxpPjcuMi4zNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjM0Ij5QUk9QIDUzOTQ6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU08L2E+PC9saT4KKzxsaT43LjIuMzUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zNSI+UFJPUCA1Mzk1OiBQUk9QX1RIUkVBRF9ESVNPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHPC9hPjwvbGk+Cis8bGk+Ny4yLjM2LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzYiPlBST1AgNTM5NjogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORzwvYT48L2xpPgorPGxpPjcuMi4zNy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjM3Ij5QUk9QIDUzOTc6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEPC9hPjwvbGk+Cis8bGk+Ny4yLjM4LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzgiPlBST1AgNTM5ODogUFJPUF9USFJFQURfU1RFRVJJTkdfREFUQTwvYT48L2xpPgorPC91bD48L3VsPjxsaT44LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44Ij5GZWF0dXJlOiBOZXR3b3JrIFNhdmU8L2E+PC9saT4KKzx1bD48bGk+OC4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEiPkNvbW1hbmRzPC9hPjwvbGk+Cis8dWw+PGxpPjguMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMSI+Q01EIDk6IChIb3N0LSZndDtOQ1ApIENNRF9ORVRfU0FWRTwvYT48L2xpPgorPGxpPjguMS4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMiI+Q01EIDEwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX0NMRUFSPC9hPjwvbGk+Cis8bGk+OC4xLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjguMS4zIj5DTUQgMTE6IChIb3N0LSZndDtOQ1ApIENNRF9ORVRfUkVDQUxMPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjkuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkiPkZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQ8L2E+PC9saT4KKzx1bD48bGk+OS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEiPkNvbW1hbmRzPC9hPjwvbGk+Cis8dWw+PGxpPjkuMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuMSI+Q01EIDEyOiAoTkNQLSZndDtIb3N0KSBDTURfSEJPX09GRkxPQUQ8L2E+PC9saT4KKzxsaT45LjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uOS4xLjIiPkNNRCAxMzogKE5DUC0mZ3Q7SG9zdCkgQ01EX0hCT19SRUNMQUlNPC9hPjwvbGk+Cis8bGk+OS4xLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4zIj5DTUQgMTQ6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fRFJPUDwvYT48L2xpPgorPGxpPjkuMS40LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNCI+Q01EIDE1OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX09GRkxPQURFRDwvYT48L2xpPgorPGxpPjkuMS41LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNSI+Q01EIDE2OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX1JFQ0xBSU1FRDwvYT48L2xpPgorPGxpPjkuMS42LiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjEuNiI+Q01EIDE3OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX0RST1BQRUQ8L2E+PC9saT4KKzwvdWw+PGxpPjkuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uOS4yIj5Qcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjkuMi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMSI+UFJPUCAxMDogUFJPUF9IQk9fTUVNX01BWDwvYT48L2xpPgorPGxpPjkuMi4yLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMiI+UFJPUCAxMTogUFJPUF9IQk9fQkxPQ0tfTUFYPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjEwLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMCI+RmVhdHVyZTogSmFtIERldGVjdGlvbjwvYT48L2xpPgorPHVsPjxsaT4xMC4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xIj5Qcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjEwLjEuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS4xIj5QUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEU8L2E+PC9saT4KKzxsaT4xMC4xLjIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwLjEuMiI+UFJPUCA0NjA5OiBQUk9QX0pBTV9ERVRFQ1RFRDwvYT48L2xpPgorPGxpPjEwLjEuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS4zIj5QUk9QIDQ2MTA6IFBST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRDwvYT48L2xpPgorPGxpPjEwLjEuNC4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS40Ij5QUk9QIDQ2MTE6IFBST1BfSkFNX0RFVEVDVF9XSU5ET1c8L2E+PC9saT4KKzxsaT4xMC4xLjUuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwLjEuNSI+UFJPUCA0NjEyOiBQUk9QX0pBTV9ERVRFQ1RfQlVTWTwvYT48L2xpPgorPGxpPjEwLjEuNi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS42Ij5QUk9QIDQ2MTM6IFBST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUDwvYT48L2xpPgorPC91bD48L3VsPjxsaT4xMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEiPkZlYXR1cmU6IEdQSU8gQWNjZXNzPC9hPjwvbGk+Cis8dWw+PGxpPjExLjEuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEiPlByb3BlcnRpZXM8L2E+PC9saT4KKzx1bD48bGk+MTEuMS4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjEiPlBST1AgNDA5NjogUFJPUF9HUElPX0NPTkZJRzwvYT48L2xpPgorPGxpPjExLjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEuMS4yIj5QUk9QIDQwOTg6IFBST1BfR1BJT19TVEFURTwvYT48L2xpPgorPGxpPjExLjEuMy4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEuMS4zIj5QUk9QIDQwOTk6IFBST1BfR1BJT19TVEFURV9TRVQ8L2E+PC9saT4KKzxsaT4xMS4xLjQuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuNCI+UFJPUCA0MTAwOiBQUk9QX0dQSU9fU1RBVEVfQ0xFQVI8L2E+PC9saT4KKzwvdWw+PC91bD48bGk+MTIuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyIj5GZWF0dXJlOiBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbjwvYT48L2xpPgorPHVsPjxsaT4xMi4xLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xIj5Qcm9wZXJ0aWVzPC9hPjwvbGk+Cis8dWw+PGxpPjEyLjEuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4xIj5QUk9QIDQxMDE6IFBST1BfVFJOR18zMjwvYT48L2xpPgorPGxpPjEyLjEuMi4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4yIj5QUk9QIDQxMDI6IFBST1BfVFJOR18xMjg8L2E+PC9saT4KKzxsaT4xMi4xLjMuICAgPGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyLjEuMyI+UFJPUCA0MTAzOiBQUk9QX1RSTkdfUkFXXzMyPC9hPjwvbGk+Cis8L3VsPjwvdWw+PGxpPjEzLiAgIDxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMyI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9saT4KKzx1bD48bGk+MTMuMS4gICA8YSBocmVmPSIjcmZjLnNlY3Rpb24uMTMuMSI+UmF3IEFwcGxpY2F0aW9uIEFjY2VzczwvYT48L2xpPgorPC91bD48bGk+QXBwZW5kaXggQS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEiPkZyYW1pbmcgUHJvdG9jb2w8L2E+PC9saT4KKzx1bD48bGk+QS4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4xIj5VQVJUIFJlY29tbWVuZGF0aW9uczwvYT48L2xpPgorPHVsPjxsaT5BLjEuMS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMS4xIj5VQVJUIEJpdCBSYXRlIERldGVjdGlvbjwvYT48L2xpPgorPGxpPkEuMS4yLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4xLjIiPkhETEMtTGl0ZTwvYT48L2xpPgorPC91bD48bGk+QS4yLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yIj5TUEkgUmVjb21tZW5kYXRpb25zPC9hPjwvbGk+Cis8dWw+PGxpPkEuMi4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yLjEiPlNQSSBGcmFtaW5nIFByb3RvY29sPC9hPjwvbGk+Cis8L3VsPjxsaT5BLjMuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjMiPkkmIzE3ODtDIFJlY29tbWVuZGF0aW9uczwvYT48L2xpPgorPGxpPkEuNC4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuNCI+TmF0aXZlIFVTQiBSZWNvbW1lbmRhdGlvbnM8L2E+PC9saT4KKzwvdWw+PGxpPkFwcGVuZGl4IEIuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CIj5UZXN0IFZlY3RvcnM8L2E+PC9saT4KKzx1bD48bGk+Qi4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4xIj5UZXN0IFZlY3RvcjogUGFja2VkIFVuc2lnbmVkIEludGVnZXI8L2E+PC9saT4KKzxsaT5CLjIuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjIiPlRlc3QgVmVjdG9yOiBSZXNldCBDb21tYW5kPC9hPjwvbGk+Cis8bGk+Qi4zLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4zIj5UZXN0IFZlY3RvcjogUmVzZXQgTm90aWZpY2F0aW9uPC9hPjwvbGk+Cis8bGk+Qi40LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi40Ij5UZXN0IFZlY3RvcjogU2NhbiBCZWFjb248L2E+PC9saT4KKzxsaT5CLjUuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjUiPlRlc3QgVmVjdG9yOiBJbmJvdW5kIElQdjYgUGFja2V0PC9hPjwvbGk+Cis8bGk+Qi42LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi42Ij5UZXN0IFZlY3RvcjogT3V0Ym91bmQgSVB2NiBQYWNrZXQ8L2E+PC9saT4KKzxsaT5CLjcuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjciPlRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3M8L2E+PC9saT4KKzxsaT5CLjguICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjgiPlRlc3QgVmVjdG9yOiBSZXR1cm5lZCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3M8L2E+PC9saT4KKzxsaT5CLjkuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjkiPlRlc3QgVmVjdG9yOiBBZGRpbmcgYW4gb24tbWVzaCBuZXR3b3JrPC9hPjwvbGk+Cis8bGk+Qi4xMC4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMTAiPlRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2xpPgorPGxpPkIuMTEuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjExIj5UZXN0IFZlY3RvcjogUmVtb3ZpbmcgYSBsb2NhbCBvbi1tZXNoIG5ldHdvcms8L2E+PC9saT4KKzxsaT5CLjEyLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4xMiI+VGVzdCBWZWN0b3I6IFJlbW92YWwgbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2xpPgorPC91bD48bGk+QXBwZW5kaXggQy4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMiPkV4YW1wbGUgU2Vzc2lvbnM8L2E+PC9saT4KKzx1bD48bGk+Qy4xLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy4xIj5OQ1AgSW5pdGlhbGl6YXRpb248L2E+PC9saT4KKzxsaT5DLjIuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjIiPkF0dGFjaGluZyB0byBhIG5ldHdvcms8L2E+PC9saT4KKzxsaT5DLjMuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjMiPlN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcms8L2E+PC9saT4KKzxsaT5DLjQuICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjQiPlVuc3VjY2Vzc2Z1bGx5IGpvaW5pbmcgYSBwcmUtZXhpc3RpbmcgbmV0d29yazwvYT48L2xpPgorPGxpPkMuNS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNSI+RGV0YWNoaW5nIGZyb20gYSBuZXR3b3JrPC9hPjwvbGk+Cis8bGk+Qy42LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy42Ij5BdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrPC9hPjwvbGk+Cis8bGk+Qy43LiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy43Ij5OQ1AgU29mdHdhcmUgUmVzZXQ8L2E+PC9saT4KKzxsaT5DLjguICAgPGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjgiPkFkZGluZyBhbiBvbi1tZXNoIHByZWZpeDwvYT48L2xpPgorPGxpPkMuOS4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuOSI+RW50ZXJpbmcgbG93LXBvd2VyIG1vZGVzPC9hPjwvbGk+Cis8bGk+Qy4xMC4gICA8YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMTAiPlNuaWZmaW5nIHJhdyBwYWNrZXRzPC9hPjwvbGk+Cis8L3VsPjxsaT5BcHBlbmRpeCBELiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguRCI+R2xvc3Nhcnk8L2E+PC9saT4KKzxsaT5BcHBlbmRpeCBFLiAgIDxhIGhyZWY9IiNyZmMuYXBwZW5kaXguRSI+QWNrbm93bGVkZ21lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iI3JmYy5hdXRob3JzIj5BdXRob3JzJyBBZGRyZXNzZXM8L2E+PC9saT4KKworCisgIDwvdWw+CisKKyAgPGgxIGlkPSJyZmMuc2VjdGlvbi4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMSI+MS48L2E+IDxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iIGlkPSJpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEucC4xIj5TcGluZWwgaXMgYSBob3N0LWNvbnRyb2xsZXIgcHJvdG9jb2wgZGVzaWduZWQgdG8gZW5hYmxlIGludGVyb3BlcmF0aW9uIG92ZXIgc2ltcGxlIHNlcmlhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIGdlbmVyYWwgcHVycG9zZSBkZXZpY2Ugb3BlcmF0aW5nIHN5c3RlbXMgKE9TKSBhbmQgbmV0d29yayBjby1wcm9jZXNzb3JzIChOQ1ApIGZvciB0aGUgcHVycG9zZSBvZiBjb250cm9sbGluZyBhbmQgbWFuYWdpbmcgdGhlaXIgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMsIGFjaGlldmluZyB0aGUgZm9sbG93aW5nIGdvYWxzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkFkb3B0IGEgbGF5ZXJlZCBhcHByb2FjaCB0byB0aGUgcHJvdG9jb2wgZGVzaWduLCBhbGxvd2luZyBmdXR1cmUgc3VwcG9ydCBmb3Igb3RoZXIgbmV0d29yayBwcm90b2NvbHMuPC9saT4KKyAgPGxpPk1pbmltaXplIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgY29tbWFuZHMvbWV0aG9kcyBieSBwcm92aWRpbmcgYSByaWNoLCBwcm9wZXJ0eS1iYXNlZCBBUEkuPC9saT4KKyAgPGxpPlN1cHBvcnQgTkNQcyBjYXBhYmxlIG9mIGJlaW5nIGNvbm5lY3RlZCB0byBtb3JlIHRoYW4gb25lIG5ldHdvcmsgYXQgYSB0aW1lLjwvbGk+CisgIDxsaT5HcmFjZWZ1bGx5IGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgd2l0aG91dCBuZWNlc3NhcmlseSBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LjwvbGk+CisgIDxsaT5CZSBhcyBtaW5pbWFsIGFuZCBsaWdodC13ZWlnaHQgYXMgcG9zc2libGUgd2l0aG91dCB1bm5lY2Vzc2FyaWx5IHNhY3JpZmljaW5nIGZsZXhpYmlsaXR5LjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEucC4zIj5PbiB0b3Agb2YgdGhpcyBjb3JlIGZyYW1ld29yaywgd2UgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIGFuZCBjb21tYW5kcyB0byBlbmFibGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbmV0d29yayBwcm90b2NvbHMuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMSI+MS4xLjwvYT4gPGEgaHJlZj0iI2Fib3V0LXRoaXMtZHJhZnQiIGlkPSJhYm91dC10aGlzLWRyYWZ0Ij5BYm91dCB0aGlzIERyYWZ0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMS4xLnAuMSI+VGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgaW4gYSBkcmFmdCBzdGF0dXMgYW5kIGlzIGNoYW5naW5nIG9mdGVuLiAgVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGlkZWFzIGZvciBjaGFuZ2VzIHRvIHRoZSBwcm90b2NvbCB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gZnVsbHkgc3BlY2lmaWVkLCBhcyB3ZWxsIGFzIHNvbWUgb2YgdGhlIGltcGV0dXMgZm9yIHRoZSBjdXJyZW50IGRlc2lnbi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMS4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xLjEuMSI+MS4xLjEuPC9hPiA8YSBocmVmPSIjc2NvcGUiIGlkPSJzY29wZSI+U2NvcGU8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xLjEuMS5wLjEiPlRoZSBldmVudHVhbCBpbnRlbnQgaXMgdG8gaGF2ZSB0d28gZG9jdW1lbnRzOiBBIFNwaW5lbCBiYXNpcyBkb2N1bWVudCB3aGljaCBkaXNjdXNzZXMgdGhlIG5ldHdvcmstdGVjaG5vbG9neS1hZ25vc3RpYyBtZWNoYW5pc21zIGFuZCBhIFRocmVhZChSKSBzcGVjaWFsaXphdGlvbiBkb2N1bWVudCB3aGljaCBkZXNjcmliZXMgYWxsIG9mIHRoZSBUaHJlYWQoUiktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gQ3VycmVudGx5LCB0aGlzIGRvY3VtZW50IGNvdmVycyBib3RoLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xLjEuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEuMS4yIj4xLjEuMi48L2E+IDxhIGhyZWY9IiNyZW51bWJlcmluZyIgaWQ9InJlbnVtYmVyaW5nIj5SZW51bWJlcmluZzwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuMSI+RWZmb3J0cyBhcmUgY3VycmVudGx5IG1haW50YWluZWQgdG8gdHJ5IHRvIHByZXZlbnQgb3ZlcnRseSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgcHJvdG9jb2wsIGJ1dCBpZiB5b3UgYXJlIGltcGxlbWVudGluZyBTcGluZWwgaW4geW91ciBvd24gcHJvZHVjdHMgeW91IHNob3VsZCBleHBlY3QgdGhlcmUgdG8gYmUgYXQgbGVhc3Qgb25lIGxhcmdlIHJlbnVtYmVyaW5nIGV2ZW50IGFuZCBtYWpvciB2ZXJzaW9uIG51bWJlciBjaGFuZ2UgYmVmb3JlIHRoZSBzdGFuZGFyZCBpcyBjb25zaWRlcmVkICJiYWtlZCIuIEFsbCBjaGFuZ2VzIHdpbGwgYmUgY2xlYXJseSBtYXJrZWQgYW5kIGRvY3VtZW50ZWQgdG8gbWFrZSBzdWNoIGEgdHJhbnNpdGlvbiBhcyBlYXN5IGFzIHBvc3NpYmxlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuMiI+VG8gYWxsb3cgY29uY2x1c2l2ZSBkZXRlY3Rpb24gb2YgcHJvdG9jb2wgKGluKWNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIE5DUCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhbmQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBjb25zaWRlcmVkIHRvIGJlICJiYWtlZCIgYW5kIHdpbGwgbm90IGNoYW5nZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5Db21tYW5kIElEcyB6ZXJvIHRocm91Z2ggZWlnaHQuIChSZXNldCwgTm8tb3AsIGFuZCBQcm9wZXJ0eS1WYWx1ZSBDb21tYW5kcyk8L2xpPgorICA8bGk+UHJvcGVydHkgSURzIHplcm8gdGhyb3VnaCB0d28uIChMYXN0IHN0YXR1cywgUHJvdG9jb2wgVmVyc2lvbiwgYW5kIE5DUCBWZXJzaW9uKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuNCI+UmVudW1iZXJpbmcgd291bGQgYmUgdW5kZXJ0YWtlbiBpbiBvcmRlciB0byBiZXR0ZXIgb3JnYW5pemUgdGhlIGFsbG9jYXRpb24gb2YgcHJvcGVydHkgSURzIGFuZCBjYXBhYmlsaXR5IElEcy4gT25lIG9mIHRoZSBpbml0aWFsIGdvYWxzIG9mIHRoaXMgcHJvdG9jb2wgd2FzIGZvciBpdCB0byBiZSBwb3NzaWJsZSBmb3IgYSBob3N0IG9yIE5DUCB0byBvbmx5IGltcGxlbWVudCBwcm9wZXJ0aWVzIHdpdGggdmFsdWVzIGxlc3MgdGhhbiAxMjcgYW5kIGZvciB0aGUgTkNQIHRvIHN0aWxsIGJlIHVzYWJsZS0tLXJlbGVnYXRpbmcgYWxsIGxhcmdlciBwcm9wZXJ0eSB2YWx1ZXMgZm9yIGV4dHJhIGZlYXR1cmVzIG9yIG90aGVyIGNhcGFiaWxpdGllcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBuZWNlc3NhcnkuIFRoaXMgd291bGQgYWxsb3cgc2ltcGxlIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCB0aGUgbmVlZCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgUFVJcyAoPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4pLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEuMS4yLnAuNSI+QXMgdGltZSBoYXMgZ29uZSBieSBhbmQgdGhlIHByb3RvY29sIGhhcyBiZWNvbWUgbW9yZSBmbGVzaGVkIG91dCwgaXQgaGFzIGJlY29tZSBjbGVhciB0aGF0IHNvbWUgb2YgdGhlIGluaXRpYWwgYWxsb2NhdGlvbnMgd2VyZSBpbmFkZXF1YXRlIGFuZCBzaG91bGQgYmUgcmV2aXNpdGVkIGlmIHdlIHdhbnQgdG8gdHJ5IHRvIGFjaGlldmUgdGhlIG9yaWdpbmFsIGdvYWwuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yIj4yLjwvYT4gPGEgaHJlZj0iI2ZyYW1lLWZvcm1hdCIgaWQ9ImZyYW1lLWZvcm1hdCI+RnJhbWUgRm9ybWF0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi5wLjEiPkEgZnJhbWUgaXMgZGVmaW5lZCBzaW1wbHkgYXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5BIGhlYWRlciBieXRlPC9saT4KKyAgPGxpPkEgY29tbWFuZCAodXAgdG8gdGhyZWUgYnl0ZXMsIHNlZSA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiBmb3IgZm9ybWF0KTwvbGk+CisgIDxsaT5BbiBvcHRpb25hbCBjb21tYW5kIHBheWxvYWQ8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUEFZTE9BRDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMSI+Mi4xLjwvYT4gPGEgaHJlZj0iI2hlYWRlci1mb3JtYXQiIGlkPSJoZWFkZXItZm9ybWF0Ij5IZWFkZXIgRm9ybWF0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLnAuMSI+VGhlIGhlYWRlciBieXRlIGlzIGJyb2tlbiBkb3duIGFzIGZvbGxvd3M6IDwvcD4KKzxwcmU+CisgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgIEZMRyAgfCAgTkxJICB8ICAgICAgVElEICAgICAgfAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCis8L3ByZT4KKzxwPgorICA8YSBpZD0iQ1JFRjEiIGNsYXNzPSJpbmZvIj5bQ1JFRjFdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBFdmVudHVhbGx5LCB3aGVuIGh0dHBzOi8vZ2l0aHViLmNvbS9taWVrZy9tbWFyay9pc3N1ZXMvOTUgaXMgYWRkcmVzc2VkLCB0aGUgYWJvdmUgdGFibGUgc2hvdWxkIGJlIHN3YXBwZWQgb3V0IHdpdGggdGhpczogfCAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IHwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfCB8ICBGTEcgfHwgIE5MSSB8fCAgICAgIFRJRCAgIHx8fHw8L3NwYW4+PC9hPgorPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4yLjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS4xIj4yLjEuMS48L2E+IDxhIGhyZWY9IiNmbGctZmxhZyIgaWQ9ImZsZy1mbGFnIj5GTEc6IEZsYWc8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4yLjEuMS5wLjEiPlRoZSBmbGFnIGZpZWxkIG9mIHRoZSBoZWFkZXIgYnl0ZSAoPHNhbXA+RkxHPC9zYW1wPikgaXMgYWx3YXlzIHNldCB0byB0aGUgdmFsdWUgdHdvIChvciA8c2FtcD4xMDwvc2FtcD4gaW4gYmluYXJ5KS4gQW55IGZyYW1lIHJlY2VpdmVkIHdpdGggdGhlc2UgYml0cyBzZXQgdG8gYW55IG90aGVyIHZhbHVlIGVsc2UgTVVTVCBOT1QgYmUgY29uc2lkZXJlZCBhIFNwaW5lbCBmcmFtZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4yLjEuMS5wLjIiPlRoaXMgY29udmVudGlvbiBhbGxvd3MgU3BpbmVsIHRvIGJlIGxpbmUgY29tcGF0aWJsZSB3aXRoIEJUTEUgSENJLiBCeSBkZWZpbmluZyB0aGUgZmlyc3QgdHdvIGJpdCBpbiB0aGlzIHdheSB3ZSBjYW4gZGlzYW1iaWd1YXRlIGJldHdlZW4gU3BpbmVsIGZyYW1lcyBhbmQgSENJIGZyYW1lcyAod2hpY2ggYWx3YXlzIHN0YXJ0IHdpdGggZWl0aGVyIDxzYW1wPjB4MDE8L3NhbXA+IG9yIDxzYW1wPjB4MDQ8L3NhbXA+KSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZyYW1pbmcgb3ZlcmhlYWQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjIuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMi4xLjIiPjIuMS4yLjwvYT4gPGEgaHJlZj0iI25saS1uZXR3b3JrLWxpbmstaWRlbnRpZmllciIgaWQ9Im5saS1uZXR3b3JrLWxpbmstaWRlbnRpZmllciI+TkxJOiBOZXR3b3JrIExpbmsgSWRlbnRpZmllcjwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjIuMS4yLnAuMSI+VGhlIE5ldHdvcmsgTGluayBJZGVudGlmaWVyIChOTEkpIGlzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMywgd2hpY2ggaXMgYXNzb2NpYXRlZCBieSB0aGUgT1Mgd2l0aCBvbmUgb2YgdXAgdG8gZm91ciBJUHY2IHpvbmUgaW5kaWNlcyBjb3JyZXNwb25kaW5nIHRvIGNvbmNlcHR1YWwgSVB2NiBpbnRlcmZhY2VzIG9uIHRoZSBOQ1AuIFRoaXMgYWxsb3dzIHRoZSBwcm90b2NvbCB0byBzdXBwb3J0IElQdjYgbm9kZXMgY29ubmVjdGluZyBzaW11bHRhbmVvdXNseSB0byBtb3JlIHRoYW4gb25lIElQdjYgbmV0d29yayBsaW5rIHVzaW5nIGEgc2luZ2xlIE5DUCBpbnN0YW5jZS4gVGhlIGZpcnN0IE5ldHdvcmsgTGluayBJZGVudGlmaWVyICgwKSBNVVNUIHJlZmVyIHRvIGEgZGlzdGluZ3Vpc2hlZCBjb25jZXB0dWFsIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgTkNQIGZvciBpdHMgSVB2NiBsaW5rIHR5cGUuIFRoZSBvdGhlciB0aHJlZSBOZXR3b3JrIExpbmsgSWRlbnRpZmllcnMgKDEsIDIgYW5kIDMpIE1BWSBiZSBkaXNzb2NpYXRlZCBmcm9tIGFueSBjb25jZXB0dWFsIGludGVyZmFjZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMi4xLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuMyI+Mi4xLjMuPC9hPiA8YSBocmVmPSIjdGlkLXRyYW5zYWN0aW9uLWlkZW50aWZpZXIiIGlkPSJ0aWQtdHJhbnNhY3Rpb24taWRlbnRpZmllciI+VElEOiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLjMucC4xIj5UaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgaGVhZGVyIHJlcHJlc2VudCB0aGUgVHJhbnNhY3Rpb24gSWRlbnRpZmllcihUSUQpLiBUaGUgVElEIGlzIHVzZWQgZm9yIGNvcnJlbGF0aW5nIHJlc3BvbnNlcyB0byB0aGUgY29tbWFuZHMgd2hpY2ggZ2VuZXJhdGVkIHRoZW0uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLjMucC4yIj5XaGVuIGEgY29tbWFuZCBpcyBzZW50IGZyb20gdGhlIGhvc3QsIGFueSByZXBseSB0byB0aGF0IGNvbW1hbmQgc2VudCBieSB0aGUgTkNQIHdpbGwgdXNlIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgVElELiBXaGVuIHRoZSBob3N0IHJlY2VpdmVzIGEgZnJhbWUgdGhhdCBtYXRjaGVzIHRoZSBUSUQgb2YgdGhlIGNvbW1hbmQgaXQgc2VudCwgaXQgY2FuIGVhc2lseSByZWNvZ25pemUgdGhhdCBmcmFtZSBhcyB0aGUgYWN0dWFsIHJlc3BvbnNlIHRvIHRoYXQgY29tbWFuZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4yLjEuMy5wLjMiPlRoZSBUSUQgdmFsdWUgb2YgemVybyAoMCkgaXMgdXNlZCBmb3IgY29tbWFuZHMgdG8gd2hpY2ggYSBjb3JyZWxhdGVkIHJlc3BvbnNlIGlzIG5vdCBleHBlY3RlZCBvciBuZWVkZWQsIHN1Y2ggYXMgZm9yIHVuc29saWNpdGVkIHVwZGF0ZSBjb21tYW5kcyBzZW50IHRvIHRoZSBob3N0IGZyb20gdGhlIE5DUC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMi4xLjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4yLjEuNCI+Mi4xLjQuPC9hPiA8YSBocmVmPSIjY29tbWFuZC1pZGVudGlmaWVyLWNtZCIgaWQ9ImNvbW1hbmQtaWRlbnRpZmllci1jbWQiPkNvbW1hbmQgSWRlbnRpZmllciAoQ01EKTwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjIuMS40LnAuMSI+VGhlIGNvbW1hbmQgaWRlbnRpZmllciBpcyBhIDIxLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVuY29kZWQgaW4gdXAgdG8gdGhyZWUgYnl0ZXMgdXNpbmcgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4uIFRoaXMgZW5jb2RpbmcgYWxsb3dzIGZvciB1cCB0byAyLDA5NywxNTIgaW5kaXZpZHVhbCBjb21tYW5kcywgd2l0aCB0aGUgZmlyc3QgMTI3IGNvbW1hbmRzIHJlcHJlc2VudGVkIGFzIGEgc2luZ2xlIGJ5dGUuICBDb21tYW5kIGlkZW50aWZpZXJzIGxhcmdlciB0aGFuIDIsMDk3LDE1MSBhcmUgZXhwbGljaXRseSBmb3JiaWRkZW4uICA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkNJRCBSYW5nZTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MCAtIDYzPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5SZXNlcnZlZCBmb3IgY29yZSBjb21tYW5kczwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+NjQgLSAxNSwzNTk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8ZW0+VU5BTExPQ0FURUQ8L2VtPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4xNSwzNjAgLSAxNiwzODM8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZlbmRvci1zcGVjaWZpYzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTYsMzg0IC0gMSw5OTksOTk5PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGVtPlVOQUxMT0NBVEVEPC9lbT4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MiwwMDAsMDAwIC0gMiwwOTcsMTUxPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5FeHBlcmltZW50YWwgdXNlIG9ubHk8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4yLjEuNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjIuMS41Ij4yLjEuNS48L2E+IDxhIGhyZWY9IiNjb21tYW5kLXBheWxvYWQtb3B0aW9uYWwiIGlkPSJjb21tYW5kLXBheWxvYWQtb3B0aW9uYWwiPkNvbW1hbmQgUGF5bG9hZCAoT3B0aW9uYWwpPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMi4xLjUucC4xIj5EZXBlbmRpbmcgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgY29tbWFuZCBpbiBxdWVzdGlvbiwgYSBwYXlsb2FkIE1BWSBiZSBpbmNsdWRlZCBpbiB0aGUgZnJhbWUuIFRoZSBleGFjdCBjb21wb3NpdGlvbiBhbmQgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkIGlzIGRlZmluZWQgYnkgdGhlIGNvbW1hbmQgaWRlbnRpZmllci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjMiPjMuPC9hPiA8YSBocmVmPSIjZGF0YS1wYWNraW5nIiBpZD0iZGF0YS1wYWNraW5nIj5EYXRhIFBhY2tpbmc8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLnAuMSI+RGF0YSBzZXJpYWxpemF0aW9uIGZvciBwcm9wZXJ0aWVzIGlzIHBlcmZvcm1lZCB1c2luZyBhIGxpZ2h0LXdlaWdodCBkYXRhIHBhY2tpbmcgZm9ybWF0IHdoaWNoIHdhcyBsb29zZWx5IGluc3BpcmVkIGJ5IEQtQnVzLiBUaGUgZm9ybWF0IG9mIGEgc2VyaWFsaXphdGlvbiBpcyBkZWZpbmVkIGJ5IGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBzdHJpbmcuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy5wLjIiPlRoaXMgcGFja2luZyBmb3JtYXQgaXMgdXNlZCBmb3Igbm90YXRpb25hbCBjb252ZW5pZW5jZS4gV2hpbGUgdGhpcyBzdHJpbmctYmFzZWQgZGF0YXR5cGUgZm9ybWF0IGhhcyBiZWVuIGRlc2lnbmVkIHNvIHRoYXQgdGhlIHN0cmluZ3MgbWF5IGJlIGRpcmVjdGx5IHVzZWQgYnkgYSBzdHJ1Y3R1cmVkIGRhdGEgcGFyc2VyLCBzdWNoIGEgdGhpbmcgaXMgbm90IHJlcXVpcmVkIHRvIGltcGxlbWVudCBTcGluZWwuIEluZGVlZCwgaGlnbHkgY29uc3RyYWluZWQgYXBwbGljYXRpb25zIG1heSBmaW5kIHN1Y2ggYSB0aGluZyB0byBiZSB0b28gaGVhdnl3ZWlnaHQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy5wLjMiPkdvYWxzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkJlIGxpZ2h0d2VpZ2h0IGFuZCBmYXZvciBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgdmFsdWVzLjwvbGk+CisgIDxsaT5Vc2UgYW4gZWFzaWx5IHJlYWRhYmxlIGFuZCBtZW1vcmFibGUgZm9ybWF0IHN0cmluZy48L2xpPgorICA8bGk+U3VwcG9ydCBsaXN0cyBhbmQgc3RydWN0dXJlcy48L2xpPgorICA8bGk+QWxsb3cgcHJvcGVydGllcyB0byBiZSBhcHBlbmRlZCB0byBzdHJ1Y3R1cmVzIHdoaWxlIG1haW50YWluaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy5wLjUiPkVhY2ggcHJpbWl0aXZlIGRhdGF0eXBlIGhhcyBhbiBBU0NJSSBjaGFyYWN0ZXIgYXNzb2NpYXRlZCB3aXRoIGl0LiAgU3RydWN0dXJlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgc3RyaW5ncyBvZiB0aGVzZSBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DPC9zYW1wPjogQSBzaW5nbGUgdW5zaWduZWQgYnl0ZS48L2xpPgorICA8bGk+PHNhbXA+QzZVPC9zYW1wPjogQSBzaW5nbGUgdW5zaWduZWQgYnl0ZSwgZm9sbG93ZWQgYnkgYSAxMjgtYml0IElQdjYgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSB6ZXJvLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcuPC9saT4KKyAgPGxpPjxzYW1wPkEoNik8L3NhbXA+OiBBbiBhcnJheSBvZiBjb25jYXRlbmF0ZWQgSVB2NiBhZGRyZXNzZXM8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLnAuNyI+SW4gZWFjaCBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBleGFjdGx5IGFzIGRlc2NyaWJlZC4gRm9yIGV4YW1wbGUsIGFuIGFycmF5IG9mIDEwIElQdjYgYWRkcmVzcyBpcyBzdG9yZWQgYXMgMTYwIGJ5dGVzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4zLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjEiPjMuMS48L2E+IDxhIGhyZWY9IiNwcmltaXRpdmUtdHlwZXMiIGlkPSJwcmltaXRpdmUtdHlwZXMiPlByaW1pdGl2ZSBUeXBlczwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5DaGFyPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+TmFtZTwvdGg+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPkRlc2NyaXB0aW9uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD4uPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfVk9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkVtcHR5IGRhdGEgdHlwZS4gVXNlZCBpbnRlcm5hbGx5LjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmI8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9CT09MPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+Qm9vbGVhbiB2YWx1ZS4gRW5jb2RlZCBpbiA4LWJpdHMgYXMgZWl0aGVyIDB4MDAgb3IgMHgwMS4gQWxsIG90aGVyIHZhbHVlcyBhcmUgaWxsZWdhbC48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5DPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfVUlOVDg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5VbnNpZ25lZCA4LWJpdCBpbnRlZ2VyLjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmM8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9JTlQ4PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+U2lnbmVkIDgtYml0IGludGVnZXIuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+Uzwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX1VJTlQxNjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPnM8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9JTlQxNjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlNpZ25lZCAxNi1iaXQgaW50ZWdlci48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5MPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfVUlOVDMyPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+VW5zaWduZWQgMzItYml0IGludGVnZXIuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+bDwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX0lOVDMyPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+U2lnbmVkIDMyLWJpdCBpbnRlZ2VyLjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmk8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9VSU5UX1BBQ0tFRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyLiBTZWUgPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4uPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+Njwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX0lQdjZBRERSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+SVB2NiBBZGRyZXNzLiAoQmlnLWVuZGlhbik8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5FPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfRVVJNjQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5FVUktNjQgQWRkcmVzcy4gKEJpZy1lbmRpYW4pPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+ZTwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPkRBVEFUWVBFX0VVSTQ4PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+RVVJLTQ4IEFkZHJlc3MuIChCaWctZW5kaWFuKTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPkQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9EQVRBPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+QXJiaXRyYXJ5IGRhdGEuIFNlZSA8YSBocmVmPSIjZGF0YS1ibG9icyI+U2VjdGlvbiAzLjM8L2E+LjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPmQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9EQVRBX1dMRU48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5BcmJpdHJhcnkgZGF0YSB3aXRoIHByZXBlbmRlZCBsZW5ndGguIFNlZSA8YSBocmVmPSIjZGF0YS1ibG9icyI+U2VjdGlvbiAzLjM8L2E+LjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPlU8L3NhbXA+CisgICAgICA8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5EQVRBVFlQRV9VVEY4PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+WmVyby10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+dCguLi4pPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfU1RSVUNUPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+U3RydWN0dXJlZCBkYXRhdHlwZSB3aXRoIHByZXBlbmRlZCBsZW5ndGguIFNlZSA8YSBocmVmPSIjc3RydWN0dXJlZC1kYXRhIj5TZWN0aW9uIDMuNDwvYT4uPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+QSguLi4pPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+REFUQVRZUEVfQVJSQVk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5BcnJheSBvZiBkYXRhdHlwZXMuIENvbXBvdW5kIHR5cGUuIFNlZSA8YSBocmVmPSIjYXJyYXlzIj5TZWN0aW9uIDMuNTwvYT4uPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjEucC4xIj5BbGwgbXVsdGktYnl0ZSB2YWx1ZXMgYXJlIGxpdHRsZS1lbmRpYW4gdW5sZXNzIGV4cGxpY2l0bHkgc3RhdGVkIG90aGVyd2lzZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMy4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4yIj4zLjIuPC9hPiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiIGlkPSJwYWNrZWQtdW5zaWduZWQtaW50ZWdlciI+UGFja2VkIFVuc2lnbmVkIEludGVnZXI8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjIucC4xIj5Gb3IgY2VydGFpbiB0eXBlcyBvZiBpbnRlZ2Vycywgc3VjaCBjb21tYW5kIG9yIHByb3BlcnR5IGlkZW50aWZpZXJzLCB1c3VhbGx5IGhhdmUgYSB2YWx1ZSBvbiB0aGUgd2lyZSB0aGF0IGlzIGxlc3MgdGhhbiAxMjcuIEhvd2V2ZXIsIGluIG9yZGVyIHRvIG5vdCBwcmVjbHVkZSB0aGUgdXNlIG9mIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUsIHdlIHdvdWxkIG5lZWQgdG8gYWRkIGFuIGV4dHJhIGJ5dGUuIERvaW5nIHRoaXMgd291bGQgYWRkIGFuIGV4dHJhIGJ5dGUgdG8gdGhlIG1ham9yaXR5IG9mIGluc3RhbmNlcywgd2hpY2ggY2FuIGFkZCB1cCBpbiB0ZXJtcyBvZiBiYW5kd2lkdGguICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4yLnAuMiI+VGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBpcyBiYXNlZCBvbiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly93d3cudzMub3JnL1RSL2V4aS8jZW5jb2RpbmdVbnNpZ25lZEludGVnZXIiPnVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGluIEVYSTwvYT4sIGV4Y2VwdCB0aGF0IHdlIGxpbWl0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGVuY29kZWQgaW50byB0aHJlZSBieXRlcygyLDA5NywxNTEpLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMi5wLjMiPkZvciBhbGwgdmFsdWVzIGxlc3MgdGhhbiAxMjcsIHRoZSBwYWNrZWQgZm9ybSBvZiB0aGUgbnVtYmVyIGlzIHNpbXBseSBhIHNpbmdsZSBieXRlIHdoaWNoIGRpcmVjdGx5IHJlcHJlc2VudHMgdGhlIG51bWJlci4gRm9yIHZhbHVlcyBsYXJnZXIgdGhhbiAxMjcsIHRoZSBmb2xsb3dpbmcgcHJvY2VzcyBpcyB1c2VkIHRvIGVuY29kZSB0aGUgdmFsdWU6IDwvcD4KKzxwLz4KKworPG9sPgorICA8bGk+VGhlIHVuc2lnbmVkIGludGVnZXIgaXMgYnJva2VuIHVwIGludG8gPGVtPm48L2VtPiA3LWJpdCBjaHVua3MgYW5kIHBsYWNlZCBpbnRvIDxlbT5uPC9lbT4gb2N0ZXRzLCBsZWF2aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoIG9jdGV0IHVudXNlZC48L2xpPgorICA8bGk+T3JkZXIgdGhlIG9jdGV0cyBmcm9tIGxlYXN0LXNpZ25pZmljYW50IHRvIG1vc3Qtc2lnbmlmaWNhbnQuICAoTGl0dGxlLWVuZGlhbik8L2xpPgorICA8bGk+Q2xlYXIgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IG9jdGV0LiBTZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvbiBhbGwgb3RoZXIgb2N0ZXRzLjwvbGk+Cis8L29sPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMi5wLjUiPldoZXJlIDxlbT5uPC9lbT4gaXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiA3LWJpdCBjaHVua3MgeW91IGNhbiB1c2UgdG8gcmVwcmVzZW50IHRoZSBnaXZlbiB2YWx1ZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjIucC42Ij5UYWtlIHRoZSB2YWx1ZSAxMzM3LCBmb3IgZXhhbXBsZTogPC9wPgorPHByZT4KKzEzMzcgPSZndDsgMHgwNTM5CisgICAgID0mZ3Q7IFszOSAwQV0KKyAgICAgPSZndDsgW0I5IDBBXQorPC9wcmU+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4yLnAuNyI+VG8gZGVjb2RlIHRoZSB2YWx1ZSwgeW91IGNvbGxlY3QgdGhlIDctYml0IGNodW5rcyB1bnRpbCB5b3UgZmluZCBhbiBvY3RldCB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBjbGVhci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMy4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMy4zIj4zLjMuPC9hPiA8YSBocmVmPSIjZGF0YS1ibG9icyIgaWQ9ImRhdGEtYmxvYnMiPkRhdGEgQmxvYnM8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjMucC4xIj5UaGVyZSBhcmUgdHdvIHR5cGVzIGZvciBkYXRhIGJsb2JzOiA8c2FtcD5kPC9zYW1wPiBhbmQgPHNhbXA+RDwvc2FtcD4uICA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPmQ8L3NhbXA+IGhhcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChpbiBieXRlcykgcHJlcGVuZGVkIHRvIHRoZSBkYXRhICh3aXRoIHRoZSBsZW5ndGggZW5jb2RlZCBhcyB0eXBlIDxzYW1wPlM8L3NhbXA+KS4gVGhlIHNpemUgb2YgdGhlIGxlbmd0aCBmaWVsZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxlbmd0aC48L2xpPgorICA8bGk+PHNhbXA+RDwvc2FtcD4gZG9lcyBub3QgaGF2ZSBhIHByZXBlbmRlZCBsZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgaXMgaW1wbGllZCBieSB0aGUgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHBhcnNlZC4gSXQgaXMgYW4gZXJyb3IgZm9yIDxzYW1wPkQ8L3NhbXA+IHRvIG5vdCBiZSB0aGUgbGFzdCB0eXBlIGluIGEgdHlwZSBpbiBhIHR5cGUgc2lnbmF0dXJlLjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMy5wLjMiPlRoaXMgZGljaG90b215IGFsbG93cyBmb3IgbW9yZSBlZmZpY2llbnQgZW5jb2RpbmcgYnkgZWxpbWluYXRpbmcgcmVkdW5kZW5jeS4gSWYgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciBpcyBhIGRhdGEgYmxvYiwgZW5jb2RpbmcgdGhlIGxlbmd0aCB3b3VsZCBiZSByZWR1bmRhbnQgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlIGluIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4zLnAuNCI+SW4gc29tZSBjYXNlcyB3ZSB1c2UgPHNhbXA+ZDwvc2FtcD4gZXZlbiBpZiBpdCBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIHR5cGUgc2lnbmF0dXJlLiAgV2UgZG8gdGhpcyB0byBhbGxvdyBmb3IgdXMgdG8gYmUgYWJsZSB0byBhcHBlbmQgYWRkaXRpb25hbCBmaWVsZHMgdG8gdGhlIHR5cGUgc2lnbmF0dXJlIGlmIG5lY2Vzc2FyeSBpbiB0aGUgZnV0dXJlLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2l0aCBlbWJlZGRlZCBzdHJ1Y3RzLCBsaWtlIGluIHRoZSBzY2FuIHJlc3VsdHMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMy4zLnAuNSI+Rm9yIGV4YW1wbGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgYnVmZmVyIHRoYXQgaXMgZW5jb2RlZCB3aXRoIHRoZSBkYXRhdHlwZSBzaWduYXR1cmUgb2YgPHNhbXA+Q0xMRDwvc2FtcD4uIEluIHRoaXMgY2FzZSwgaXQgaXMgcHJldHR5IGVhc3kgdG8gdGVsbCB3aGVyZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZGF0YSBibG9iIGlzOiB0aGUgc3RhcnQgaXMgOSBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgaXRzIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgbWludXMgOS4gKDkgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0YWtlbiB1cCBieSBhIGJ5dGUgYW5kIHR3byBsb25ncykgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuMy5wLjYiPlRoZSBkYXRhdHlwZSBzaWduYXR1cmUgPHNhbXA+Q0xMRFU8L3NhbXA+IGlzIGlsbGVnYWwgYmVjYXVzZSB3ZSBjYW4ndCBkZXRlcm1pbmUgd2hlcmUgdGhlIGxhc3QgZmllbGQgKGEgemVyby10ZXJtaW5hdGVkIFVURjggc3RyaW5nKSBzdGFydHMuIEJ1dCB0aGUgZGF0YXR5cGUgPHNhbXA+Q0xMZFU8L3NhbXA+IDxlbT5pczwvZW0+IGxlZ2FsLCBiZWNhdXNlIHRoZSBwYXJzZXIgY2FuIGRldGVybWluZSB0aGUgZXhhY3QgbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2ItLSBhbGxvd2luZyBpdCB0byBrbm93IHdoZXJlIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBmaWVsZCB3b3VsZCBiZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMy40Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uMy40Ij4zLjQuPC9hPiA8YSBocmVmPSIjc3RydWN0dXJlZC1kYXRhIiBpZD0ic3RydWN0dXJlZC1kYXRhIj5TdHJ1Y3R1cmVkIERhdGE8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjQucC4xIj5UaGUgc3RydWN0dXJlIGRhdGEgdHlwZSAoPHNhbXA+dCguLi4pPC9zYW1wPikgaXMgYSB3YXkgb2YgYnVuZGxpbmcgdG9nZXRoZXIgc2V2ZXJhbCBmaWVsZHMgaW50byBhIHNpbmdsZSBzdHJ1Y3R1cmUuIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgPHNhbXA+ZDwvc2FtcD4gdHlwZSBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIGJlaW5nIG9wYXF1ZSwgdGhlIGZpZWxkcyBpbiB0aGUgY29udGVudCBhcmUga25vd24uIFRoaXMgaXMgdXNlZnVsIGZvciB0aGluZ3MgbGlrZSBzY2FuIHJlc3VsdHMgd2hlcmUgeW91IGhhdmUgc3Vic3RydWN0dXJlcyB3aGljaCBhcmUgZGVmaW5lZCBieSBkaWZmZXJlbnQgbGF5ZXJzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNC5wLjIiPkZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHlwZSBzaWduYXR1cmUgPHNhbXA+THQoRVMpdCg2Qyk8L3NhbXA+LiBJbiB0aGlzIGh5cG90aGV0aWNhbCBjYXNlLCB0aGUgZmlyc3Qgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIE1BQyBsYXllciwgYW5kIHRoZSBzZWNvbmQgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIFBIWSBsYXllci4gQmVjYXVzZSBvZiB0aGUgdXNlIG9mIHN0cnVjdHVyZXMsIHdlIGtub3cgZXhhY3RseSB3aGF0IHBhcnQgY29tZXMgZnJvbSB0aGF0IGxheWVyLiAgQWRkaXRpb25hbGx5LCB3ZSBjYW4gYWRkIGZpZWxkcyB0byBlYWNoIHN0cnVjdHVyZSB3aXRob3V0IGludHJvZHVjaW5nIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgcHJvYmxlbXM6IERhdGEgZW5jb2RlZCBhcyA8c2FtcD5MdChFU1UpdCg2Qyk8L3NhbXA+IChOb3RpY2UgdGhlIGV4dHJhIDxzYW1wPlU8L3NhbXA+KSB3aWxsIGRlY29kZSBqdXN0IGZpbmUgYXMgPHNhbXA+THQoRVMpdCg2Qyk8L3NhbXA+LiBBZGRpdGlvbmFsbHksIGlmIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgb25seSBjYXJlIGFib3V0IHRoZSBuZXR3b3JrIGxheWVyLCB3ZSBjb3VsZCBwYXJzZSBhcyA8c2FtcD5MdCgpdCg2Qyk8L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNC5wLjMiPk5vdGUgdGhhdCBkYXRhIGVuY29kZWQgYXMgPHNhbXA+THQoRVMpdCg2Qyk8L3NhbXA+IHdpbGwgYWxzbyBwYXJzZSBhcyA8c2FtcD5MZGQ8L3NhbXA+LCB3aXRoIHRoZSBzdHJ1Y3R1cmVzIGZyb20gYm90aCBsYXllcnMgbm93IGJlaW5nIG9wYXF1ZSBkYXRhIGJsb2JzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4zLjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4zLjUiPjMuNS48L2E+IDxhIGhyZWY9IiNhcnJheXMiIGlkPSJhcnJheXMiPkFycmF5czwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNS5wLjEiPkFuIGFycmF5IGlzIHNpbXBseSBhIGNvbmNhdGVuYXRlZCBzZXQgb2YgPGVtPm48L2VtPiBkYXRhIGVuY29kaW5ncy4gRm9yIGV4YW1wbGUsIHRoZSB0eXBlIDxzYW1wPkEoNik8L3NhbXA+IGlzIHNpbXBseSBhIGxpc3Qgb2YgSVB2NiBhZGRyZXNzZXMtLS1vbmUgYWZ0ZXIgdGhlIG90aGVyLiAgVGhlIHR5cGUgPHNhbXA+QSg2RSk8L3NhbXA+IGxpa2V3aXNlIGEgY29uY2F0ZW5hdGlvbiBvZiBJUHY2LWFkZHJlc3MvRVVJLTY0IHBhaXJzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjMuNS5wLjIiPklmIGFuIGFycmF5IGNvbnRhaW5zIG1hbnkgZmllbGRzLCB0aGUgZmllbGRzIHdpbGwgb2Z0ZW4gYmUgc3Vycm91bmRlZCBieSBhIHN0cnVjdHVyZSAoPHNhbXA+dCguLi4pPC9zYW1wPikuIFRoaXMgZWZmZWN0aXZlbHkgcHJlcGVuZHMgZWFjaCBpdGVtIGluIHRoZSBhcnJheSB3aXRoIGl0cyBsZW5ndGguIFRoaXMgaXMgdXNlZnVsIGZvciBpbXByb3ZpbmcgcGFyc2luZyBwZXJmb3JtYW5jZSBvciB0byBhbGxvdyBhZGRpdGlvbmFsIGZpZWxkcyB0byBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlIGluIGEgYmFja3dhcmQgY29tcGF0aWJsZSB3YXkuIElmIHRoZXJlIGlzIGEgaGlnaCBjZXJ0YWludHkgdGhhdCBhZGRpdGlvbmFsIGZpZWxkcyB3aWxsIG5ldmVyIGJlIGFkZGVkLCB0aGUgc3RydWN0IG1heSBiZSBvbWl0dGVkIChzYXZpbmcgdHdvIGJ5dGVzIHBlciBpdGVtKS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4zLjUucC4zIj5UaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgd2F5IHRvIGVtYmVkIGFuIGFycmF5IGFzIGEgZmllbGQgYWxvbmdzaWRlIG90aGVyIGZpZWxkcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQiPjQuPC9hPiA8YSBocmVmPSIjY29tbWFuZHMiIGlkPSJjb21tYW5kcyI+Q29tbWFuZHM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNC4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xIj40LjEuPC9hPiA8YSBocmVmPSIjY21kLW5vb3AiIGlkPSJjbWQtbm9vcCI+Q01EIDA6IChIb3N0LSZndDtOQ1ApIENNRF9OT09QPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfTk9PUDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xLnAuMSI+Tm8tT3BlcmF0aW9uIGNvbW1hbmQuIEluZHVjZXMgdGhlIE5DUCB0byBzZW5kIGEgc3VjY2VzcyBzdGF0dXMgYmFjayB0byB0aGUgaG9zdC4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZCBmb3IgbGl2ZWxpbmVzcyBjaGVja3MuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xLnAuMiI+VGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gVGhlIHJlY2VpdmVyIE1VU1QgaWdub3JlIGFueSBub24tZW1wdHkgY29tbWFuZCBwYXlsb2FkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMS5wLjMiPlRoZXJlIGlzIG5vIGVycm9yIGNvbmRpdGlvbiBmb3IgdGhpcyBjb21tYW5kLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjIiPjQuMi48L2E+IDxhIGhyZWY9IiNjbWQtcmVzZXQiIGlkPSJjbWQtcmVzZXQiPkNNRCAxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUkVTRVQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9SRVNFVDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4yLnAuMSI+UmVzZXQgTkNQIGNvbW1hbmQuIENhdXNlcyB0aGUgTkNQIHRvIHBlcmZvcm0gYSBzb2Z0d2FyZSByZXNldC4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCB0aGUgVElEIGlzIGlnbm9yZWQuIFRoZSBob3N0IHNob3VsZCBpbnN0ZWFkIHdhaXQgZm9yIGEgPHNhbXA+Q01EX1BST1BfVkFMVUVfSVM8L3NhbXA+IGNvbW1hbmQgZnJvbSB0aGUgTkNQIGluZGljYXRpbmcgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gaGFzIGJlZW4gc2V0IHRvIDxzYW1wPlNUQVRVU19SRVNFVF9TT0ZUV0FSRTwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4yLnAuMiI+VGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gVGhlIHJlY2VpdmVyIE1VU1QgaWdub3JlIGFueSBub24tZW1wdHkgY29tbWFuZCBwYXlsb2FkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMi5wLjMiPklmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdpbGwgYmUgZW1pdHRlZCBpbnN0ZWFkIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMyI+NC4zLjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWdldCIgaWQ9ImNtZC1wcm9wLXZhbHVlLWdldCI+Q01EIDI6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX0dFVDwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9HRVQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMy5wLjEiPkdldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiBDYXVzZXMgdGhlIE5DUCB0byBlbWl0IGEgPHNhbXA+Q01EX1BST1BfVkFMVUVfSVM8L3NhbXA+IGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZGVudGlmaWVyLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMy5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjMucC4zIj5JZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPiB3aWxsIGJlIGVtaXR0ZWQgaW5zdGVhZCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjQiPjQuNC48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1zZXQiIGlkPSJjbWQtcHJvcC12YWx1ZS1zZXQiPkNNRCAzOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9TRVQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX1BST1BfVkFMVUVfU0VUPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5QUk9QX0lEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC40LnAuMSI+U2V0IHByb3BlcnR5IHZhbHVlIGNvbW1hbmQuIEluc3RydWN0cyB0aGUgTkNQIHRvIHNldCB0aGUgZ2l2ZW4gcHJvcGVydHkgdG8gdGhlIHNwZWNpZmljIGdpdmVuIHZhbHVlLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIHZhbHVlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNC5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIHByb3BlcnR5IHZhbHVlLiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBkZWZpbmVkIGJ5IHRoZSBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjQucC4zIj5JZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPiB3aWxsIGJlIGVtaXR0ZWQgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNC41Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC41Ij40LjUuPC9hPiA8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtaW5zZXJ0IiBpZD0iY21kLXByb3AtdmFsdWUtaW5zZXJ0Ij5DTUQgNDogKEhvc3QtJmd0O05DUCkgQ01EX1BST1BfVkFMVUVfSU5TRVJUPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9QUk9QX1ZBTFVFX0lOU0VSVDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+VkFMVUU8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNS5wLjEiPkluc2VydCB2YWx1ZSBpbnRvIHByb3BlcnR5IGNvbW1hbmQuIEluc3RydWN0cyB0aGUgTkNQIHRvIGluc2VydCB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIGxpc3Qtb3JpZW50ZWQgcHJvcGVydHksIHdpdGhvdXQgcmVtb3Zpbmcgb3RoZXIgaXRlbXMgaW4gdGhlIGxpc3QuIFRoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjUucC4yIj5UaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gPGEgaHJlZj0iI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5TZWN0aW9uIDMuMjwvYT4sIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZC4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcHJvcGVydHkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC41LnAuMyI+SWYgdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgPHNhbXA+UFJPUF9JRDwvc2FtcD4gY29uc2lzdHMgb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5ICg8c2FtcD5BKHQoLi4uKSk8L3NhbXA+KSwgdGhlbiB0aGUgY29udGVudHMgb2YgPHNhbXA+VkFMVUU8L3NhbXA+IE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZSAoPHNhbXA+Li4uPC9zYW1wPikgcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKDxzYW1wPnQoLi4uKTwvc2FtcD4pLiAgU3BlY2lmaWNhbGx5LCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUgTVVTVCBOT1QgYmUgcHJlcGVuZGVkIHRvIDxzYW1wPlZBTFVFPC9zYW1wPi4gVGhpcyBoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC41LnAuNCI+SWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gd2lsbCBiZSBlbWl0dGVkIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuNiI+NC42LjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLXJlbW92ZSIgaWQ9ImNtZC1wcm9wLXZhbHVlLXJlbW92ZSI+Q01EIDU6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX1JFTU9WRTwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9SRU1PVkU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZBTFVFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjYucC4xIj5SZW1vdmUgdmFsdWUgZnJvbSBwcm9wZXJ0eSBjb21tYW5kLiBJbnN0cnVjdHMgdGhlIE5DUCB0byByZW1vdmUgdGhlIGdpdmVuIHZhbHVlIGZyb20gYSBsaXN0LW9yaWVudGVkIHByb3BlcnR5LCB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBpdGVtcyBpbiB0aGUgbGlzdC4gVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIHByb3BlcnR5IGJlaW5nIG9wZXJhdGVkIG9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjIiPk5vdGUgdGhhdCB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgPGVtPmJ5IHZhbHVlPC9lbT4sIG5vdCBieSBpbmRleCEgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjMiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIHZhbHVlIHRvIGJlIHJlbW92ZWQuIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIHByb3BlcnR5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjQiPklmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IDxzYW1wPlBST1BfSUQ8L3NhbXA+IGNvbnNpc3RzIG9mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoPHNhbXA+QSh0KC4uLikpPC9zYW1wPiksIHRoZW4gdGhlIGNvbnRlbnRzIG9mIDxzYW1wPlZBTFVFPC9zYW1wPiBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKDxzYW1wPi4uLjwvc2FtcD4pIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICg8c2FtcD50KC4uLik8L3NhbXA+KS4gIFNwZWNpZmljYWxseSwgdGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlIE1VU1QgTk9UIGJlIHByZXBlbmRlZCB0byA8c2FtcD5WQUxVRTwvc2FtcD4uIFRoaXMgaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNi5wLjUiPklmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjciPjQuNy48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pcyIgaWQ9ImNtZC1wcm9wLXZhbHVlLWlzIj5DTUQgNjogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfSVM8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX1BST1BfVkFMVUVfSVM8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZBTFVFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjcucC4xIj5Qcm9wZXJ0eSB2YWx1ZSBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gYSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhvc3QsIG9yIGl0IGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gYW4gdW5zb2xpY2l0ZWQgZmFzaGlvbiB0byBub3RpZnkgdGhlIGhvc3Qgb2YgdmFyaW91cyBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuNy5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjgiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjgiPjQuOC48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pbnNlcnRlZCIgaWQ9ImNtZC1wcm9wLXZhbHVlLWluc2VydGVkIj5DTUQgNzogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfSU5TRVJURUQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX1BST1BfVkFMVUVfSU5TRVJURUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBST1BfSUQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlZBTFVFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjgucC4xIj5Qcm9wZXJ0eSB2YWx1ZSBpbnNlcnRpb24gbm90aWZpY2F0aW9uIGNvbW1hbmQuIFRoaXMgY29tbWFuZCBjYW4gYmUgc2VudCBieSB0aGUgTkNQIGluIHJlc3BvbnNlIHRvIHRoZSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JTlNFUlQ8L3NhbXA+IGNvbW1hbmQsIG9yIGl0IGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gYW4gdW5zb2xpY2l0ZWQgZmFzaGlvbiB0byBub3RpZnkgdGhlIGhvc3Qgb2YgdmFyaW91cyBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuOC5wLjIiPlRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPiwgZm9sbG93ZWQgYnkgdGhlIHZhbHVlIHRoYXQgd2FzIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHByb3BlcnR5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuOC5wLjMiPklmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IDxzYW1wPlBST1BfSUQ8L3NhbXA+IGNvbnNpc3RzIG9mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoPHNhbXA+QSh0KC4uLikpPC9zYW1wPiksIHRoZW4gdGhlIGNvbnRlbnRzIG9mIDxzYW1wPlZBTFVFPC9zYW1wPiBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKDxzYW1wPi4uLjwvc2FtcD4pIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICg8c2FtcD50KC4uLik8L3NhbXA+KS4gIFNwZWNpZmljYWxseSwgdGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlIE1VU1QgTk9UIGJlIHByZXBlbmRlZCB0byA8c2FtcD5WQUxVRTwvc2FtcD4uIFRoaXMgaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuOC5wLjQiPlRoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gcHJvcGVydHkuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuOSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuOSI+NC45LjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLXJlbW92ZWQiIGlkPSJjbWQtcHJvcC12YWx1ZS1yZW1vdmVkIj5DTUQgODogKE5DUC0mZ3Q7SG9zdCkgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRDwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9SRU1PVkVEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5QUk9QX0lEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC45LnAuMSI+UHJvcGVydHkgdmFsdWUgcmVtb3ZhbCBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gdGhlIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX1JFTU9WRTwvc2FtcD4gY29tbWFuZCwgb3IgaXQgY2FuIGJlIHNlbnQgYnkgdGhlIE5DUCBpbiBhbiB1bnNvbGljaXRlZCBmYXNoaW9uIHRvIG5vdGlmeSB0aGUgaG9zdCBvZiB2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC45LnAuMiI+Tm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyA8ZW0+YnkgdmFsdWU8L2VtPiwgbm90IGJ5IGluZGV4ISA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC45LnAuMyI+VGhlIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCBpcyB0aGUgcHJvcGVydHkgaWRlbnRpZmllciBlbmNvZGVkIGluIHRoZSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluIDxhIGhyZWY9IiNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciI+U2VjdGlvbiAzLjI8L2E+LCBmb2xsb3dlZCBieSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjkucC40Ij5JZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSA8c2FtcD5QUk9QX0lEPC9zYW1wPiBjb25zaXN0cyBvZiBhIHNpbmdsZSBzdHJ1Y3R1cmUgZW5jbG9zZWQgYnkgYW4gYXJyYXkgKDxzYW1wPkEodCguLi4pKTwvc2FtcD4pLCB0aGVuIHRoZSBjb250ZW50cyBvZiA8c2FtcD5WQUxVRTwvc2FtcD4gTVVTVCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlICg8c2FtcD4uLi48L3NhbXA+KSByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoPHNhbXA+dCguLi4pPC9zYW1wPikuICBTcGVjaWZpY2FsbHksIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gPHNhbXA+VkFMVUU8L3NhbXA+LiBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgZGF0YS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjkucC41Ij5UaGUgcmVzdWx0aW5nIG9yZGVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0IGlzIGRlZmluZWQgYnkgdGhlIGdpdmVuIHByb3BlcnR5LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjEwIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMCI+NC4xMC48L2E+IDxhIGhyZWY9IiNjbWQtcGVlayIgaWQ9ImNtZC1wZWVrIj5DTUQgMTg6IChIb3N0LSZndDtOQ1ApIENNRF9QRUVLPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjQ8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUEVFSzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+QUREUkVTUzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q09VTlQ8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTAucC4xIj5UaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBOQ1AgdG8gZmV0Y2ggdmFsdWVzIGZyb20gdGhlIFJBTSBvZiB0aGUgTkNQIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIFVwb24gc3VjY2VzcywgPHNhbXA+Q01EX1BFRUtfUkVUPC9zYW1wPiBpcyBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdC4gVXBvbiBmYWlsdXJlLCA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPiBpcyBlbWl0dGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGVycm9yIGluZGljYXRpb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMC5wLjIiPkR1ZSB0byB0aGUgbG93LWxldmVsIG5hdHVyZSBvZiB0aGlzIGNvbW1hbmQsIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucyBtYXkgaW5kdWNlIHRoZSBOQ1AgdG8gcmVzZXQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMC5wLjMiPlRoZSBOQ1AgTUFZIHByZXZlbnQgY2VydGFpbiByZWdpb25zIG9mIG1lbW9yeSBmcm9tIGJlaW5nIGFjY2Vzc2VkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTAucC40Ij5UaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUgPGEgaHJlZj0iI3NlY3VyaXR5LWNvbnNpZGVyYXRpb25zIj5TZWN0aW9uIDEzPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjEwLnAuNSI+VGhpcyBjb21tYW5kIHJlcXVpcmVzIHRoZSBjYXBhYmlsaXR5IDxzYW1wPkNBUF9QRUVLX1BPS0U8L3NhbXA+IHRvIGJlIHByZXNlbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuMTEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjExIj40LjExLjwvYT4gPGEgaHJlZj0iI2NtZC1wZWVrLXJldCIgaWQ9ImNtZC1wZWVrLXJldCI+Q01EIDE5OiAoTkNQLSZndDtIb3N0KSBDTURfUEVFS19SRVQ8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+NDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9QRUVLX1JFVDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+QUREUkVTUzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q09VTlQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkJZVEVTPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjExLnAuMSI+VGhpcyBjb21tYW5kIGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgdGhhdCB3YXMgcmVxdWVzdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byA8c2FtcD5DTURfUEVFSzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMS5wLjIiPlRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSA8c2FtcD5DQVBfUEVFS19QT0tFPC9zYW1wPiB0byBiZSBwcmVzZW50LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjEyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xMiI+NC4xMi48L2E+IDxhIGhyZWY9IiNjbWQtcG9rZSIgaWQ9ImNtZC1wb2tlIj5DTUQgMjA6IChIb3N0LSZndDtOQ1ApIENNRF9QT0tFPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjQ8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUE9LRTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+QUREUkVTUzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q09VTlQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkJZVEVTPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjEyLnAuMSI+VGhpcyBjb21tYW5kIHdyaXRlcyB0aGUgYnl0ZXMgdG8gdGhlIHNwZWNpZmllZCBtZW1vcnkgYWRkcmVzcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTIucC4yIj5EdWUgdG8gdGhlIGxvdy1sZXZlbCBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgbWF5IGluZHVjZSB0aGUgTkNQIHRvIHJlc2V0LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjQuMTIucC4zIj5UaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUgPGEgaHJlZj0iI3NlY3VyaXR5LWNvbnNpZGVyYXRpb25zIj5TZWN0aW9uIDEzPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjEyLnAuNCI+VGhpcyBjb21tYW5kIHJlcXVpcmVzIHRoZSBjYXBhYmlsaXR5IDxzYW1wPkNBUF9QRUVLX1BPS0U8L3NhbXA+IHRvIGJlIHByZXNlbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjQuMTMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi40LjEzIj40LjEzLjwvYT4gPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLW11bHRpLWdldCIgaWQ9ImNtZC1wcm9wLXZhbHVlLW11bHRpLWdldCI+Q01EIDIxOiAoSG9zdC0mZ3Q7TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkEoaSk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIENhcGFiaWxpdHk6IDxzYW1wPkNBUF9DTURfTVVMVEk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMy5wLjIiPkZldGNoIHRoZSB2YWx1ZSBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIG9uZSBjb21tYW5kLiBBcmd1bWVudHMgYXJlIGFuIGFycmF5IG9mIHByb3BlcnR5IElEcy4gSWYgYWxsIHByb3BlcnRpZXMgYXJlIGZldGNoZWQgc3VjY2Vzc2Z1bGx5LCBhIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IGNvbW1hbmQgaXMgc2VudCBiYWNrIHRvIHRoZSBob3N0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5aWQgYW5kIHZhbHVlIG9mIGVhY2ggZmV0Y2hlZCBwcm9wZXJ0eS4gVGhlIG9yZGVyIG9mIHRoZSByZXN1bHRzIGluIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IG1hdGNoIHRoZSBvcmRlciBvZiBwcm9wZXJ0aWVzIGdpdmVuIGluIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0dFVDwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMy5wLjMiPkVycm9ycyBmZXRjaGluZyBpbmRpdmlkdWFsIHByb3BlcnRpZXMgYXJlIHJlZmxlY3RlZCBhcyBpbmRpY2F0aW5nIGEgY2hhbmdlIHRvIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IGZvciB0aGF0IHByb3BlcnR5J3MgcGxhY2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xMy5wLjQiPk5vdCBhbGwgcHJvcGVydGllcyBjYW4gYmUgZmV0Y2hlZCB1c2luZyB0aGlzIG1ldGhvZC4gQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsIGFueSBwcm9wZXJ0eSB0aGF0IGJsb2NrcyB3aGVuIGdldHRpbmcgd2lsbCBmYWlsIGZvciB0aGF0IGluZGl2aWR1YWwgcHJvcGVydHkgd2l0aCA8c2FtcD5TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QPC9zYW1wPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNC4xNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjQuMTQiPjQuMTQuPC9hPiA8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtbXVsdGktc2V0IiBpZD0iY21kLXByb3AtdmFsdWUtbXVsdGktc2V0Ij5DTUQgMjI6IChIb3N0LSZndDtOQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5Bcmd1bWVudC1FbmNvZGluZzogPHNhbXA+QShpRCk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIENhcGFiaWxpdHk6IDxzYW1wPkNBUF9DTURfTVVMVEk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlByb3BlcnR5L1ZhbHVlIFBhaXJzPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE0LnAuMiI+V2l0aCBlYWNoIHByb3BlcnR5L3ZhbHVlIHBhaXIgYmVpbmc6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkxFTkdUSDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNC5wLjMiPlRoaXMgY29tbWFuZCBzZXRzIHRoZSB2YWx1ZSBvZiBzZXZlcmFsIHByb3BlcnRpZXMgYXQgb25jZSBpbiB0aGUgZ2l2ZW4gb3JkZXIuIFRoZSBzZXR0aW5nIG9mIHByb3BlcnRpZXMgc3RvcHMgYXQgdGhlIGZpcnN0IGVycm9yLCBpZ25vcmluZyBhbnkgbGF0ZXIgcHJvcGVydGllcy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE0LnAuNCI+VGhlIHJlc3VsdCBvZiB0aGlzIGNvbW1hbmQgaXMgZ2VuZXJhbGx5IDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IHVubGVzcyAoZm9yIGV4YW1wbGUpIGEgcGFyc2luZyBlcnJvciBoYXMgb2NjdXJlZCAoaW4gd2hpY2ggY2FzZSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdvdWxkIGJlIHRoZSByZXN1bHQpLiBUaGUgb3JkZXIgb2YgdGhlIHJlc3VsdHMgaW4gPHNhbXA+Q01EX1BST1BfVkFMVUVTX0FSRTwvc2FtcD4gbWF0Y2ggdGhlIG9yZGVyIG9mIHByb3BlcnRpZXMgZ2l2ZW4gaW4gPHNhbXA+Q01EX1BST1BfVkFMVUVfTVVMVElfU0VUPC9zYW1wPi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE0LnAuNSI+U2luY2UgdGhlIHByb2Nlc3Npbmcgb2YgcHJvcGVydGllcyB0byBzZXQgc3RvcHMgYXQgdGhlIGZpcnN0IGVycm9yLCB0aGUgcmVzdWx0aW5nIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+IGNhbiBjb250YWluIGZld2VyIGl0ZW1zIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcHJvcGVydGllcyB0byBzZXQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNC5wLjYiPk5vdCBhbGwgcHJvcGVydGllcyBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgbWV0aG9kLiBBcyBhIGdlbmVyYWwgcnVsZSBvZiB0aHVtYiwgYW55IHByb3BlcnR5IHRoYXQgYmxvY2tzIHdoZW4gc2V0dGluZyB3aWxsIGZhaWwgZm9yIHRoYXQgaW5kaXZpZHVhbCBwcm9wZXJ0eSB3aXRoIDxzYW1wPlNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1A8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi40LjE1Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNC4xNSI+NC4xNS48L2E+IDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZXMtYXJlIiBpZD0iY21kLXByb3AtdmFsdWVzLWFyZSI+Q01EIDIzOiAoTkNQLSZndDtIb3N0KSBDTURfUFJPUF9WQUxVRVNfQVJFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkFyZ3VtZW50LUVuY29kaW5nOiA8c2FtcD5BKGlEKTwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgQ2FwYWJpbGl0eTogPHNhbXA+Q0FQX0NNRF9NVUxUSTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRUFERVI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlByb3BlcnR5L1ZhbHVlIFBhaXJzPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE1LnAuMiI+V2l0aCBlYWNoIHByb3BlcnR5L3ZhbHVlIHBhaXIgYmVpbmc6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkxFTkdUSDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9JRDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UFJPUF9WQUxVRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNS5wLjMiPlRoaXMgY29tbWFuZCBpcyBlbWl0dGVkIGJ5IHRoZSBOQ1AgYXMgdGhlIHJlc3BvbnNlIHRvIGJvdGggdGhlIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVDwvc2FtcD4gYW5kIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvc2FtcD4gY29tbWFuZHMuIEl0IGlzIHJvdWdobHkgYW5hbG9nb3VzIHRvIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiwgZXhjZXB0IHRoYXQgaXQgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi40LjE1LnAuNCI+VGhpcyBjb21tYW5kIFNIT1VMRCBOT1QgYmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSwgb3IgaW4gcmVzcG9uc2UgdG8gYW55IGNvbW1hbmQgb3RoZXIgdGhhbiA8c2FtcD5DTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L3NhbXA+IG9yIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVDwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNC4xNS5wLjUiPlRoZSBhcmd1bWVudHMgYXJlIGEgbGlzdCBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGVtaXR0ZWQgcHJvcGVydHkgYW5kIHRoZSBhc3NvY2lhdGVkIHZhbHVlLiBUaGVzZSBhcmUgcHJlc2VudGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIGdpdmVuIGluIHRoZSBhc3NvY2lhdGVkIGluaXRpYXRpbmcgY29tbWFuZC4gSW4gY2FzZXMgd2hlcmUgZ2V0dGluZyBvciBzZXR0aW5nIGEgc3BlY2lmaWMgcHJvcGVydHkgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHRoZSBhc3NvY2lhdGVkIHNsb3QgaW4gdGhpcyBjb21tYW5kIHdpbGwgZGVzY3JpYmUgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41Ij41LjwvYT4gPGEgaHJlZj0iI3Byb3BlcnRpZXMiIGlkPSJwcm9wZXJ0aWVzIj5Qcm9wZXJ0aWVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS5wLjEiPlNwaW5lbCBpcyBsYXJnZWx5IGEgcHJvcGVydHktYmFzZWQgcHJvdG9jb2wsIHNpbWlsYXIgdG8gcmVwcmVzZW50YXRpb25hbCBzdGF0ZSB0cmFuc2ZlciAoUkVTVCksIHdpdGggYSBwcm9wZXJ0eSBkZWZpbmVkIGZvciBldmVyeSBhdHRyaWJ1dGUgdGhhdCBhbiBPUyBuZWVkcyB0byBjcmVhdGUsIHJlYWQsIHVwZGF0ZSBvciBkZWxldGUgaW4gdGhlIGZ1bmN0aW9uIG9mIGFuIElQdjYgaW50ZXJmYWNlLiBUaGUgaW5zcGlyYXRpb24gb2YgdGhpcyBhcHByb2FjaCB3YXMgbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMgZm9yIHBlcmlwaGVyYWxzLiBUaGUgZ29hbCBpcyB0byBhdm9pZCwgYXMgbXVjaCBhcyBwb3NzaWJsZSwgdGhlIHVzZSBvZiBsYXJnZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmVzIGFuZC9vciBtZXRob2QgYXJndW1lbnQgbGlzdHMuIFRoZSByZWFzb24gZm9yIGF2b2lkaW5nIHRoZXNlIGlzIGJlY2F1c2UgdGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gY2hhbmdlLCBlc3BlY2lhbGx5IGVhcmx5IGluIGRldmVsb3BtZW50LiBBZGRpbmcgb3IgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBmcm9tIGEgc3RydWN0dXJlIGNhbiByZW5kZXIgdGhlIGVudGlyZSBwcm90b2NvbCBpbmNvbXBhdGlibGUuIEJ5IHVzaW5nIHByb3BlcnRpZXMsIHlvdSBzaW1wbHkgZXh0ZW5kIHRoZSBwcm90b2NvbCB3aXRoIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS5wLjIiPkFsbW9zdCBhbGwgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcHJvcGVydGllcy4gTW9zdCBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgaW5pdGlhbGx5IHByb3Bvc2VkIGFzIGNvbW1hbmRzIGNhbiBiZSBhZGFwdGVkIHRvIGJlIHByb3BlcnR5LWJhc2VkIGluc3RlYWQuIE5vdGFibGUgZXhjZXB0aW9ucyBpbmNsdWRlICJIb3N0IEJ1ZmZlciBPZmZsb2FkIiAoPGEgaHJlZj0iI2ZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZCI+U2VjdGlvbiA5PC9hPikgYW5kICJOZXR3b3JrIFNhdmUiICg8YSBocmVmPSIjZmVhdHVyZS1uZXR3b3JrLXNhdmUiPlNlY3Rpb24gODwvYT4pLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUucC4zIj5JbiBTcGluZWwsIHByb3BlcnRpZXMgYXJlIGtleWVkIGJ5IGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyLDA5NywxNTEgKFNlZSA8YSBocmVmPSIjcGFja2VkLXVuc2lnbmVkLWludGVnZXIiPlNlY3Rpb24gMy4yPC9hPikuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMSI+NS4xLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnR5LW1ldGhvZHMiIGlkPSJwcm9wZXJ0eS1tZXRob2RzIj5Qcm9wZXJ0eSBNZXRob2RzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xLnAuMSI+UHJvcGVydGllcyBtYXkgc3VwcG9ydCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+VkFMVUVfR0VUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWdldCI+U2VjdGlvbiA0LjM8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5WQUxVRV9TRVQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtc2V0Ij5TZWN0aW9uIDQuNDwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPlZBTFVFX0lOU0VSVDwvc2FtcD4gICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtaW5zZXJ0Ij5TZWN0aW9uIDQuNTwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPlZBTFVFX1JFTU9WRTwvc2FtcD4gICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtcmVtb3ZlIj5TZWN0aW9uIDQuNjwvYT4pPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xLnAuMyI+QWRkaXRpb25hbGx5LCB0aGUgTkNQIGNhbiBzZW5kIHVwZGF0ZXMgdG8gdGhlIGhvc3QgKGVpdGhlciBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KSB0aGF0IGluZm9ybSB0aGUgaG9zdCBhYm91dCBjaGFuZ2VzIHRvIHNwZWNpZmljIHByb3BlcnRpZXM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+VkFMVUVfSVM8L3NhbXA+ICAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWlzIj5TZWN0aW9uIDQuNzwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPlZBTFVFX0lOU0VSVEVEPC9zYW1wPiAgKDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pbnNlcnRlZCI+U2VjdGlvbiA0Ljg8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5WQUxVRV9SRU1PVkVEPC9zYW1wPiAgKDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1yZW1vdmVkIj5TZWN0aW9uIDQuOTwvYT4pPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMiI+NS4yLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnR5LXR5cGVzIiBpZD0icHJvcGVydHktdHlwZXMiPlByb3BlcnR5IFR5cGVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4yLnAuMSI+Q29uY2VwdHVhbGx5LCB0aGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIHByb3BlcnRpZXM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+U2luZ2xlLXZhbHVlIHByb3BlcnRpZXM8L2xpPgorICA8bGk+TXVsdGlwbGUtdmFsdWUgKEFycmF5KSBwcm9wZXJ0aWVzPC9saT4KKyAgPGxpPlN0cmVhbSBwcm9wZXJ0aWVzPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMi4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjEiPjUuMi4xLjwvYT4gPGEgaHJlZj0iI3NpbmdsZXZhbHVlLXByb3BlcnRpZXMiIGlkPSJzaW5nbGV2YWx1ZS1wcm9wZXJ0aWVzIj5TaW5nbGUtVmFsdWUgUHJvcGVydGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4xLnAuMSI+U2luZ2xlLXZhbHVlIHByb3BlcnRpZXMgYXJlIHByb3BlcnRpZXMgdGhhdCBoYXZlIGEgc2ltcGxlIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHZhbHVlLiBFeGFtcGxlcyB3b3VsZCBiZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DdXJyZW50IHJhZGlvIGNoYW5uZWwgKFJlcHJlc2VudGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIpPC9saT4KKyAgPGxpPk5ldHdvcmsgbmFtZSAoUmVwcmVzZW50ZWQgYXMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZyk8L2xpPgorICA8bGk+ODAyLjE1LjQgUEFOIElEIChSZXByZXNlbnRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjIuMS5wLjMiPlRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlIDxzYW1wPkdFVDwvc2FtcD4gYW5kIDxzYW1wPlNFVDwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMi4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjIiPjUuMi4yLjwvYT4gPGEgaHJlZj0iI211bHRpcGxldmFsdWUtcHJvcGVydGllcyIgaWQ9Im11bHRpcGxldmFsdWUtcHJvcGVydGllcyI+TXVsdGlwbGUtVmFsdWUgUHJvcGVydGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4yLnAuMSI+TXVsdGlwbGUtVmFsdWUgUHJvcGVydGllcyBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEV4YW1wbGVzIHdvdWxkIGJlOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkxpc3Qgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBoYXJkd2FyZS48L2xpPgorICA8bGk+TGlzdCBvZiBJUHY2IGFkZHJlc3NlcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLjwvbGk+CisgIDxsaT5MaXN0IG9mIGNhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIE5DUC48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjIuMi5wLjMiPlRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlIDxzYW1wPlZBTFVFX0dFVDwvc2FtcD4sIDxzYW1wPlZBTFVFX1NFVDwvc2FtcD4sIDxzYW1wPlZBTFVFX0lOU0VSVDwvc2FtcD4sIGFuZCA8c2FtcD5WQUxVRV9SRU1PVkU8L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4yLnAuNCI+V2hlbiB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB1c2luZyA8c2FtcD5WQUxVRV9HRVQ8L3NhbXA+LCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHZhbHVlcyBpbiB0aGUgbGlzdC4gSWYgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgZm9yIGFuIGluZGl2aWR1YWwgaXRlbSBpbiB0aGUgbGlzdCBpcyBub3QgZGVmaW5lZCBieSB0aGUgdHlwZSB0aGVuIGVhY2ggaXRlbSByZXR1cm5lZCBpbiB0aGUgbGlzdCBpcyBwcmVwZW5kZWQgd2l0aCBhIGxlbmd0aCAoU2VlIDxhIGhyZWY9IiNhcnJheXMiPlNlY3Rpb24gMy41PC9hPikuIFRoZSBvcmRlciBvZiB0aGUgcmV0dXJuZWQgaXRlbXMsIHVubGVzcyBleHBsaWNpdGx5IGRlZmluZWQgZm9yIHRoYXQgc3BlY2lmaWMgcHJvcGVydHksIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxwPjxzYW1wPlZBTFVFX1NFVDwvc2FtcD4gcHJvdmlkZXMgYSB3YXkgdG8gY29tcGxldGVseSByZXBsYWNlIGFsbCBwcmV2aW91cyB2YWx1ZXMuIENhbGxpbmcgPHNhbXA+VkFMVUVfU0VUPC9zYW1wPiB3aXRoIGFuIGVtcHR5IHZhbHVlIGVmZmVjdGl2ZWx5IGluc3RydWN0cyB0aGUgTkNQIHRvIGNsZWFyIHRoZSB2YWx1ZSBvZiB0aGF0IHByb3BlcnR5LiAgPC9wPgorPHA+PHNhbXA+VkFMVUVfSU5TRVJUPC9zYW1wPiBhbmQgPHNhbXA+VkFMVUVfUkVNT1ZFPC9zYW1wPiBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIHRoZSBpbnNlcnRpb24gb3IgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIGl0ZW1zIDxlbT5ieSB2YWx1ZTwvZW0+LiBUaGUgcGF5bG9hZCBmb3IgdGhlc2UgY29tbWFuZHMgaXMgYSBwbGFpbiBzaW5nbGUgdmFsdWUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMi4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4yLjMiPjUuMi4zLjwvYT4gPGEgaHJlZj0iI3N0cmVhbS1wcm9wZXJ0aWVzIiBpZD0ic3RyZWFtLXByb3BlcnRpZXMiPlN0cmVhbSBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4yLjMucC4xIj5TdHJlYW0gcHJvcGVydGllcyBhcmUgc3BlY2lhbCBwcm9wZXJ0aWVzIHJlcHJlc2VudGluZyBzdHJlYW1zIG9mIGRhdGEuIEV4YW1wbGVzIHdvdWxkIGJlOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPk5ldHdvcmsgcGFja2V0IHN0cmVhbSAoPGEgaHJlZj0iI3Byb3Atc3RyZWFtLW5ldCI+U2VjdGlvbiA1LjYuMzwvYT4pPC9saT4KKyAgPGxpPlJhdyBwYWNrZXQgc3RyZWFtICg8YSBocmVmPSIjcHJvcC1zdHJlYW0tcmF3Ij5TZWN0aW9uIDUuNi4yPC9hPik8L2xpPgorICA8bGk+RGVidWcgbWVzc2FnZSBzdHJlYW0gKDxhIGhyZWY9IiNwcm9wLXN0cmVhbS1kZWJ1ZyI+U2VjdGlvbiA1LjYuMTwvYT4pPC9saT4KKyAgPGxpPk5ldHdvcmsgQmVhY29uIHN0cmVhbSAoPGEgaHJlZj0iI3Byb3AtbWFjLXNjYW4tYmVhY29uIj5TZWN0aW9uIDUuOC40PC9hPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjIuMy5wLjMiPkFsbCBzdWNoIHByb3BlcnRpZXMgZW1pdCBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSA8c2FtcD5WQUxVRV9JUzwvc2FtcD4gY29tbWFuZCwgc2VudCBmcm9tIHRoZSBOQ1AgdG8gdGhlIGhvc3QuIEZvciBleGFtcGxlLCBhcyBJUHY2IHRyYWZmaWMgaXMgcmVjZWl2ZWQgYnkgdGhlIE5DUCwgdGhlIElQdjYgcGFja2V0cyBhcmUgc2VudCB0byB0aGUgaG9zdCBieSB3YXkgb2YgYXN5bmNocm9ub3VzIDxzYW1wPlZBTFVFX0lTPC9zYW1wPiBub3RpZmljYXRpb25zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMi4zLnAuNCI+U29tZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGFsc28gc3VwcG9ydCB0aGUgaG9zdCBzZW5kIGRhdGEgYmFjayB0byB0aGUgTkNQLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyBob3cgdGhlIGhvc3Qgc2VuZHMgSVB2NiB0cmFmZmljIHRvIHRoZSBOQ1AuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4yLjMucC41Ij5UaGVzZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGdlbmVyYWxseSBkbyBub3Qgc3VwcG9ydCA8c2FtcD5WQUxVRV9HRVQ8L3NhbXA+LCBhcyBpdCBpcyBtZWFuaW5nbGVzcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4zIj41LjMuPC9hPiA8YSBocmVmPSIjcHJvcGVydHktbnVtYmVyaW5nIiBpZD0icHJvcGVydHktbnVtYmVyaW5nIj5Qcm9wZXJ0eSBOdW1iZXJpbmc8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjMucC4xIj5XaGlsZSB0aGUgbWFqb3JpdHkgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBhcmUgbmV0d29yayBwcm90b2NvbCBzcGVjaWZpYywgdGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBhbGwgaW1wbGVtZW50YXRpb25zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMy5wLjIiPkZ1dHVyZSBwcm9wZXJ0eSBhbGxvY2F0aW9ucyBTSEFMTCBiZSBtYWRlIGZyb20gdGhlIGZvbGxvd2luZyBhbGxvY2F0aW9uIHBsYW46IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPlByb3BlcnR5IElEIFJhbmdlPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjAgLSAxMjc8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5SZXNlcnZlZCBmb3IgZnJlcXVlbnRseS11c2VkIHByb3BlcnRpZXM8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij4xMjggLSAxNSwzNTk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5VbmFsbG9jYXRlZDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjE1LDM2MCAtIDE2LDM4MzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlZlbmRvci1zcGVjaWZpYzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjE2LDM4NCAtIDEsOTk5LDk5OTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlVuYWxsb2NhdGVkPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+MiwwMDAsMDAwIC0gMiwwOTcsMTUxPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+RXhwZXJpbWVudGFsIHVzZSBvbmx5PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjMucC4zIj5Gb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRhdGEgZm9ybWF0IGVuY29kaW5nIHNob3J0aGFuZCB1c2VkIHRocm91Z2hvdXQgdGhpcyBkb2N1bWVudCwgc2VlIDxhIGhyZWY9IiNkYXRhLXBhY2tpbmciPlNlY3Rpb24gMzwvYT4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNCI+NS40LjwvYT4gPGEgaHJlZj0iI3Byb3BlcnR5LXNlY3Rpb25zIiBpZD0icHJvcGVydHktc2VjdGlvbnMiPlByb3BlcnR5IFNlY3Rpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS40LnAuMSI+VGhlIGN1cnJlbnRseSBhc3NpZ25lZCBwcm9wZXJ0aWVzIGFyZSBicm9rZW4gdXAgaW50byBzZXZlcmFsIHNlY3Rpb25zLCBlYWNoIHdpdGggcmVzZXJ2ZWQgcmFuZ2VzIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzLiAgVGhlc2UgcmFuZ2VzIGFyZTogPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5OYW1lPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5SYW5nZSAoSW5jbHVzaXZlKTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+RG9jdW1lbnRhdGlvbjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5Db3JlPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4weDAwIC0gMHgxRiwgMHgxMDAwIC0gMHgxMUZGPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGEgaHJlZj0iI3Byb3AtY29yZSI+U2VjdGlvbiA1LjU8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBIWTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgyMCAtIDB4MkYsIDB4MTIwMCAtIDB4MTJGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLXBoeSI+U2VjdGlvbiA1Ljc8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk1BQzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgzMCAtIDB4M0YsIDB4MTMwMCAtIDB4MTNGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLW1hYyI+U2VjdGlvbiA1Ljg8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk5FVDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg0MCAtIDB4NEYsIDB4MTQwMCAtIDB4MTRGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLW5ldCI+U2VjdGlvbiA1Ljk8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRlY2g8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4NTAgLSAweDVGLCAweDE1MDAgLSAweDE1RkY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRlY2hub2xvZ3ktc3BlY2lmaWM8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPklQdjY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4NjAgLSAweDZGLCAweDE2MDAgLSAweDE2RkY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8YSBocmVmPSIjcHJvcC1pcHY2Ij5TZWN0aW9uIDUuMTA8L2E+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlN0cmVhbTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg3MCAtIDB4N0YsIDB4MTcwMCAtIDB4MTdGRjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxhIGhyZWY9IiNwcm9wLWNvcmUiPlNlY3Rpb24gNS41PC9hPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5EZWJ1ZzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg0MDAwIC0gMHg0NDAwPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGEgaHJlZj0iI3Byb3AtZGVidWciPlNlY3Rpb24gNS4xMTwvYT4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS40LnAuMiI+Tm90ZSB0aGF0IHNvbWUgb2YgdGhlIHByb3BlcnR5IHNlY3Rpb25zIGhhdmUgdHdvIHJlc2VydmVkIHJhbmdlczogYSBwcmltYXJ5IHJhbmdlICh3aGljaCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGUpIGFuZCBhbiBleHRlbmRlZCByYW5nZSAod2hpY2ggaXMgZW5jb2RlZCBhcyB0d28gYnl0ZXMpLiAgcHJvcGVydGllcyB3aGljaCBhcmUgdXNlZCBtb3JlIGZyZXF1ZW50bHkgYXJlIGdlbmVyYWxseSBhbGxvY2F0ZWQgZnJvbSB0aGUgZm9ybWVyIHJhbmdlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUiPjUuNS48L2E+IDxhIGhyZWY9IiNwcm9wLWNvcmUiIGlkPSJwcm9wLWNvcmUiPkNvcmUgUHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xIj41LjUuMS48L2E+IDxhIGhyZWY9IiNwcm9wLWxhc3Qtc3RhdHVzIiBpZD0icHJvcC1sYXN0LXN0YXR1cyI+UFJPUCAwOiBQUk9QX0xBU1RfU1RBVFVTPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5FbmNvZGluZzogPHNhbXA+aTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9InJpZ2h0Ij5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5MQVNUX1NUQVRVUzwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEucC4yIj5EZXNjcmliZXMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBvcGVyYXRpb24uIEVuY29kZWQgYXMgYSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMS5wLjMiPlRoaXMgcHJvcGVydHkgaXMgZW1pdHRlZCBvZnRlbiB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IHN0YXR1cyBvZiBwcmV0dHkgbXVjaCBhbnkgSG9zdC10by1OQ1Agb3BlcmF0aW9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xLnAuNCI+SXQgaXMgZW1pdHRlZCBhdXRvbWF0aWNhbGx5IGF0IE5DUCBzdGFydHVwIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNldCByZWFzb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEucC41Ij5TZWUgPGEgaHJlZj0iI3N0YXR1cy1jb2RlcyI+U2VjdGlvbiA2PC9hPiBmb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3RhdHVzIGNvZGVzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4yIj41LjUuMi48L2E+IDxhIGhyZWY9IiNwcm9wLXByb3RvY29sLXZlcnNpb24iIGlkPSJwcm9wLXByb3RvY29sLXZlcnNpb24iPlBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5FbmNvZGluZzogPHNhbXA+aWk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk1BSk9SX1ZFUlNJT048L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk1JTk9SX1ZFUlNJT048L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4yLnAuMiI+RGVzY3JpYmVzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIGZvdXIgZmllbGRzLCBlYWNoIGVuY29kZWQgYXMgYSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlcjogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5NYWpvciBWZXJzaW9uIE51bWJlcjwvbGk+CisgIDxsaT5NaW5vciBWZXJzaW9uIE51bWJlcjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4yLnAuNCI+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbWFqb3IgdmVyc2lvbiA0LCBtaW5vciB2ZXJzaW9uIDMgb2YgdGhpcyBwcm90b2NvbC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMi5wLjUiPlRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiBCZWhhdmlvciB3aGVuIHVzZWQgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4yLjEiPjUuNS4yLjEuPC9hPiA8YSBocmVmPSIjbWFqb3ItdmVyc2lvbi1udW1iZXIiIGlkPSJtYWpvci12ZXJzaW9uLW51bWJlciI+TWFqb3IgVmVyc2lvbiBOdW1iZXI8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMi4xLnAuMSI+VGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgbGFyZ2UgYW5kIGluY29tcGF0aWJsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb3RvY29sIHZlcnNpb25zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4yLjEucC4yIj5UaGUgaG9zdCBNVVNUIGVudGVyIGEgRkFVTFQgc3RhdGUgaWYgaXQgZG9lcyBub3QgZXhwbGljaXRseSBzdXBwb3J0IHRoZSBnaXZlbiBtYWpvciB2ZXJzaW9uIG51bWJlci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjIuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4yLjIiPjUuNS4yLjIuPC9hPiA8YSBocmVmPSIjbWlub3ItdmVyc2lvbi1udW1iZXIiIGlkPSJtaW5vci12ZXJzaW9uLW51bWJlciI+TWlub3IgVmVyc2lvbiBOdW1iZXI8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMi4yLnAuMSI+VGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgc21hbGwgYnV0IG90aGVyd2lzZSBjb21wYXRpYmxlIGRpZmZlcmVuY2VzIGJldHdlZW4gcHJvdG9jb2wgdmVyc2lvbnMuIEEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYWR2ZXJ0aXNlZCBtaW5vciB2ZXJzaW9uIG51bWJlciBhbmQgdGhlIG1pbm9yIHZlcnNpb24gdGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgU0hPVUxEIE5PVCBiZSBmYXRhbCB0byB0aGUgb3BlcmF0aW9uIG9mIHRoZSBob3N0LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4zIj41LjUuMy48L2E+IDxhIGhyZWY9IiNwcm9wLW5jcC12ZXJzaW9uIiBpZD0icHJvcC1uY3AtdmVyc2lvbiI+UFJPUCAyOiBQUk9QX05DUF9WRVJTSU9OPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlU8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TkNQX1ZFU0lPTl9TVFJJTkc8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4zLnAuMiI+Q29udGFpbnMgYSBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHRoZSBmaXJtd2FyZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgTkNQLiBFbmNvZGVkIGFzIGEgemVyby10ZXJtaW5hdGVkIFVURi04IHN0cmluZy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMy5wLjMiPlRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBub3Qgc3RyaWN0bHkgZGVmaW5lZCwgYnV0IGl0IGlzIGludGVuZGVkIHRvIHByZXNlbnQgc2ltaWxhcmx5IHRvIHRoZSAiVXNlci1BZ2VudCIgc3RyaW5nIGZyb20gSFRUUC4gVGhlIFJFQ09NTUVOREVEIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGFzIGZvbGxvd3M6IDwvcD4KKzxwcmU+CitTVEFDSy1OQU1FL1NUQUNLLVZFUlNJT05bQlVJTERfSU5GT11bOyBPVEhFUl9JTkZPXTsgQlVJTERfREFURV9BTkRfVElNRQorPC9wcmU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjMucC40Ij5FeGFtcGxlczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT4KKyAgICA8c2FtcD5PcGVuVGhyZWFkLzEuMGQyNi0yNS1nYjY4NGM3ZjsgREVCVUc7IE1heSA5IDIwMTYgMTg6MjI6MDQ8L3NhbXA+CisgIDwvbGk+CisgIDxsaT4KKyAgICA8c2FtcD5Db25uZWN0SVAvMi4wYjEyNSBzMSBBTFBIQTsgU2VwdCAyNCAyMDE1IDIwOjQ5OjE5PC9zYW1wPgorICA8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMy5wLjYiPlRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiBCZWhhdmlvciB3aGVuIHVzZWQgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNCI+NS41LjQuPC9hPiA8YSBocmVmPSIjcHJvcC1pbnRlcmZhY2UtdHlwZSIgaWQ9InByb3AtaW50ZXJmYWNlLXR5cGUiPlBST1AgMzogUFJPUF9JTlRFUkZBQ0VfVFlQRTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+RW5jb2Rpbmc6IDxzYW1wPmk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5JTlRFUkZBQ0VfVFlQRTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjQucC4yIj5UaGlzIGludGVnZXIgaWRlbnRpZmllcyB3aGF0IHRoZSBuZXR3b3JrIHByb3RvY29sIGZvciB0aGlzIE5DUC4gIEN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+MDogQm9vdGxvYWRlcjwvbGk+CisgIDxsaT4yOiBaaWdCZWUgSVAoVE0pPC9saT4KKyAgPGxpPjM6IFRocmVhZChSKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS40LnAuNCI+VGhlIGhvc3QgTVVTVCBlbnRlciBhIEZBVUxUIHN0YXRlIGlmIGl0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgcHJvdG9jb2wgZ2l2ZW4gYnkgdGhlIE5DUC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNSI+NS41LjUuPC9hPiA8YSBocmVmPSIjcHJvcC1pbnRlcmZhY2UtdmVuZG9yLWlkIiBpZD0icHJvcC1pbnRlcmZhY2UtdmVuZG9yLWlkIj5QUk9QIDQ6IFBST1BfSU5URVJGQUNFX1ZFTkRPUl9JRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+RW5jb2Rpbmc6IDxzYW1wPmk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjEtMzwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WRU5ET1JfSUQ8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS41LnAuMiI+VmVuZG9yIGlkZW50aWZpZXIuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNS42Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjYiPjUuNS42LjwvYT4gPGEgaHJlZj0iI3Byb3AtY2FwcyIgaWQ9InByb3AtY2FwcyI+UFJPUCA1OiBQUk9QX0NBUFM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShpKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MS0zPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xLTM8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPi4uLjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DQVBfMTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q0FQXzI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPi4uLjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjYucC4yIj5EZXNjcmliZXMgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgb2YgdGhpcyBOQ1AuIEVuY29kZWQgYXMgYSBsaXN0IG9mIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2Vycy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNi5wLjMiPkEgY2FwYWJpbGl0eSBpcyBkZWZpbmVkIGFzIGEgMjEtYml0IGludGVnZXIgdGhhdCBkZXNjcmliZXMgYSBzdWJzZXQgb2YgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNi5wLjQiPkN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+MTogPHNhbXA+Q0FQX0xPQ0s8L3NhbXA+PC9saT4KKyAgPGxpPjI6IDxzYW1wPkNBUF9ORVRfU0FWRTwvc2FtcD48L2xpPgorICA8bGk+MzogPHNhbXA+Q0FQX0hCTzwvc2FtcD46IEhvc3QgQnVmZmVyIE9mZmxvYWQuIFNlZSA8YSBocmVmPSIjZmVhdHVyZS1ob3N0LWJ1ZmZlci1vZmZsb2FkIj5TZWN0aW9uIDk8L2E+LjwvbGk+CisgIDxsaT40OiA8c2FtcD5DQVBfUE9XRVJfU0FWRTwvc2FtcD48L2xpPgorICA8bGk+NTogPHNhbXA+Q0FQX0NPVU5URVJTPC9zYW1wPjwvbGk+CisgIDxsaT42OiA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD46IEphbW1pbmcgZGV0ZWN0aW9uLiBTZWUgPGEgaHJlZj0iI2ZlYXR1cmUtamFtLWRldGVjdCI+U2VjdGlvbiAxMDwvYT48L2xpPgorICA8bGk+NzogPHNhbXA+Q0FQX1BFRUtfUE9LRTwvc2FtcD46IFBFRUsvUE9LRSBkZWJ1Z2dpbmcgY29tbWFuZHMuPC9saT4KKyAgPGxpPjg6IDxzYW1wPkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNPC9zYW1wPjogPHNhbXA+UFJPUF9TVFJFQU1fUkFXPC9zYW1wPiBpcyB3cml0YWJsZS48L2xpPgorICA8bGk+OTogPHNhbXA+Q0FQX0dQSU88L3NhbXA+OiBTdXBwb3J0IGZvciBHUElPIGFjY2Vzcy4gU2VlIDxhIGhyZWY9IiNmZWF0dXJlLWdwaW8tYWNjZXNzIj5TZWN0aW9uIDExPC9hPi48L2xpPgorICA8bGk+MTA6IDxzYW1wPkNBUF9UUk5HPC9zYW1wPjogU3VwcG9ydCBmb3IgdHJ1ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uIFNlZSA8YSBocmVmPSIjZmVhdHVyZS10cm5nIj5TZWN0aW9uIDEyPC9hPi48L2xpPgorICA8bGk+MTE6IDxzYW1wPkNBUF9DTURfTVVMVEk8L3NhbXA+OiBTdXBwb3J0IGZvciA8c2FtcD5DTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtbXVsdGktZ2V0Ij5TZWN0aW9uIDQuMTM8L2E+KSwgPHNhbXA+Q01EX1BST1BfVkFMVUVfTVVMVElfU0VUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLW11bHRpLXNldCI+U2VjdGlvbiA0LjE0PC9hPiwgYW5kIDxzYW1wPkNNRF9QUk9QX1ZBTFVFU19BUkU8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWVzLWFyZSI+U2VjdGlvbiA0LjE1PC9hPikuPC9saT4KKyAgPGxpPjEyOiA8c2FtcD5DQVBfVU5TT0xfVVBEQVRFX0ZJTFRFUjwvc2FtcD46IFN1cHBvcnQgZm9yIDxzYW1wPlBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUjwvc2FtcD4gKDxhIGhyZWY9IiNwcm9wLXVuc29sLXVwZGF0ZS1maWx0ZXIiPlNlY3Rpb24gNS41LjEyPC9hPikgYW5kIDxzYW1wPlBST1BfVU5TT0xfVVBEQVRFX0xJU1Q8L3NhbXA+ICg8YSBocmVmPSIjcHJvcC11bnNvbC11cGRhdGUtbGlzdCI+U2VjdGlvbiA1LjUuMTM8L2E+KS48L2xpPgorICA8bGk+MTY6IDxzYW1wPkNBUF84MDJfMTVfNF8yMDAzPC9zYW1wPjwvbGk+CisgIDxsaT4xNzogPHNhbXA+Q0FQXzgwMl8xNV80XzIwMDY8L3NhbXA+PC9saT4KKyAgPGxpPjE4OiA8c2FtcD5DQVBfODAyXzE1XzRfMjAxMTwvc2FtcD48L2xpPgorICA8bGk+MjE6IDxzYW1wPkNBUF84MDJfMTVfNF9QSUI8L3NhbXA+PC9saT4KKyAgPGxpPjI0OiA8c2FtcD5DQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTSzwvc2FtcD48L2xpPgorICA8bGk+MjU6IDxzYW1wPkNBUF84MDJfMTVfNF85MTVNSFpfT1FQU0s8L3NhbXA+PC9saT4KKyAgPGxpPjI2OiA8c2FtcD5DQVBfODAyXzE1XzRfODY4TUhaX09RUFNLPC9zYW1wPjwvbGk+CisgIDxsaT4yNzogPHNhbXA+Q0FQXzgwMl8xNV80XzkxNU1IWl9CUFNLPC9zYW1wPjwvbGk+CisgIDxsaT4yODogPHNhbXA+Q0FQXzgwMl8xNV80Xzg2OE1IWl9CUFNLPC9zYW1wPjwvbGk+CisgIDxsaT4yOTogPHNhbXA+Q0FQXzgwMl8xNV80XzkxNU1IWl9BU0s8L3NhbXA+PC9saT4KKyAgPGxpPjMwOiA8c2FtcD5DQVBfODAyXzE1XzRfODY4TUhaX0FTSzwvc2FtcD48L2xpPgorICA8bGk+NDg6IDxzYW1wPkNBUF9ST0xFX1JPVVRFUjwvc2FtcD48L2xpPgorICA8bGk+NDk6IDxzYW1wPkNBUF9ST0xFX1NMRUVQWTwvc2FtcD48L2xpPgorICA8bGk+NTI6IDxzYW1wPkNBUF9ORVRfVEhSRUFEXzFfMDwvc2FtcD48L2xpPgorICA8bGk+NTEyOiA8c2FtcD5DQVBfTUFDX1dISVRFTElTVDwvc2FtcD48L2xpPgorICA8bGk+NTEzOiA8c2FtcD5DQVBfTUFDX1JBVzwvc2FtcD48L2xpPgorICA8bGk+NTE0OiA8c2FtcD5DQVBfT09CX1NURUVSSU5HX0RBVEE8L3NhbXA+PC9saT4KKyAgPGxpPjEwMjQ6IDxzYW1wPkNBUF9USFJFQURfQ09NTUlTU0lPTkVSPC9zYW1wPjwvbGk+CisgIDxsaT4xMDI1OiA8c2FtcD5DQVBfVEhSRUFEX1RNRl9QUk9YWTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNi5wLjYiPkFkZGl0aW9uYWxseSwgZnV0dXJlIGNhcGFiaWxpdHkgYWxsb2NhdGlvbnMgU0hBTEwgYmUgbWFkZSBmcm9tIHRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbiBwbGFuOiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkNhcGFiaWxpdHkgUmFuZ2U8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkRlc2NyaXB0aW9uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjAgLSAxMjc8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlJlc2VydmVkIGZvciBjb3JlIGNhcGFiaWxpdGllczwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTI4IC0gMTUsMzU5PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPGVtPlVOQUxMT0NBVEVEPC9lbT4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTUsMzYwIC0gMTYsMzgzPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5WZW5kb3Itc3BlY2lmaWM8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjE2LDM4NCAtIDEsOTk5LDk5OTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxlbT5VTkFMTE9DQVRFRDwvZW0+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjIsMDAwLDAwMCAtIDIsMDk3LDE1MTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RXhwZXJpbWVudGFsIHVzZSBvbmx5PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuNyI+NS41LjcuPC9hPiA8YSBocmVmPSIjcHJvcC1pbnRlcmZhY2UtY291bnQiIGlkPSJwcm9wLWludGVyZmFjZS1jb3VudCI+UFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5JTlRFUkZBQ0VfQ09VTlQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS43LnAuMiI+RGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgY29uY3VycmVudCBpbnRlcmZhY2VzIHN1cHBvcnRlZCBieSB0aGlzIE5DUC4gIFNpbmNlIHRoZSBjb25jdXJyZW50IGludGVyZmFjZSBtZWNoYW5pc20gaXMgc3RpbGwgVEJELCB0aGlzIHZhbHVlIE1VU1QgYWx3YXlzIGJlIG9uZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuNy5wLjMiPlRoaXMgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS43LnAuNCI+VGhlIGhvc3QgTVVTVCBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZCBmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS44Ij41LjUuOC48L2E+IDxhIGhyZWY9IiNwcm9wLXBvd2VyLXN0YXRlIiBpZD0icHJvcC1wb3dlci1zdGF0ZSI+UFJPUCA3OiBQUk9QX1BPV0VSX1NUQVRFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlBPV0VSX1NUQVRFPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuOC5wLjIiPkRlc2NyaWJlcyB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgTkNQLiBCeSB3cml0aW5nIHRvIHRoaXMgcHJvcGVydHkgeW91IGNhbiBtYW5hZ2UgdGhlIGxvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuIEVudW1lcmF0aW9uIGlzIGVuY29kZWQgYXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuOC5wLjMiPkRlZmluZWQgdmFsdWVzIGFyZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT4wOiA8c2FtcD5QT1dFUl9TVEFURV9PRkZMSU5FPC9zYW1wPjogTkNQIGlzIHBoeXNpY2FsbHkgcG93ZXJlZCBvZmYuICAoRW51bWVyYXRlZCBmb3IgY29tcGxldGVuZXNzIHNha2UsIG5vdCBleHBlY3RlZCBvbiB0aGUgd2lyZSk8L2xpPgorICA8bGk+MTogPHNhbXA+UE9XRVJfU1RBVEVfREVFUF9TTEVFUDwvc2FtcD46IEFsbW9zdCBldmVyeXRoaW5nIG9uIHRoZSBOQ1AgaXMgc2h1dCBkb3duLCBidXQgY2FuIHN0aWxsIGJlIHJlc3VtZWQgdmlhIGEgY29tbWFuZCBvciBpbnRlcnJ1cHQuPC9saT4KKyAgPGxpPjI6IDxzYW1wPlBPV0VSX1NUQVRFX1NUQU5EQlk8L3NhbXA+OiBOQ1AgaXMgaW4gdGhlIGxvd2VzdCBwb3dlciBzdGF0ZSB0aGF0IGNhbiBzdGlsbCBiZSBhd29rZW4gYnkgYW4gZXZlbnQgZnJvbSB0aGUgcmFkaW8gKGUuZy4gd2FpdGluZyBmb3IgYWxhcm0pPC9saT4KKyAgPGxpPjM6IDxzYW1wPlBPV0VSX1NUQVRFX0xPV19QT1dFUjwvc2FtcD46IE5DUCBpcyByZXNwb25zaXZlIChhbmQgcG9zc2libHkgY29ubmVjdGVkKSwgYnV0IHVzaW5nIGxlc3MgcG93ZXIuIChlLmcuICJTbGVlcHkiIGNoaWxkIG5vZGUpPC9saT4KKyAgPGxpPjQ6IDxzYW1wPlBPV0VSX1NUQVRFX09OTElORTwvc2FtcD46IE5DUCBpcyBmdWxseSBwb3dlcmVkLiAoZS5nLiAiUGFyZW50IiBub2RlKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHA+CisgIDxhIGlkPSJDUkVGMiIgY2xhc3M9ImluZm8iPltDUkVGMl08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IFdlIHNob3VsZCBjb25zaWRlciByZXZlcnNpbmcgdGhlIG51bWJlcmluZyBoZXJlIHNvIHRoYXQgMCBpcyBgUE9XRVJfU1RBVEVfT05MSU5FYC4gV2UgbWF5IGFsc28gd2FudCB0byBpbmNsdWRlIHNvbWUgZXh0cmEgdmFsdWVzIGJldHdlZW4gdGhlIGRlZmluZWQgdmFsdWVzIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBzbyB0aGF0IHdlIGNhbiBwcmVzZXJ2ZSB0aGUgb3JkZXJlZCByZWxhdGlvbnNoaXAuIC0tPC9zcGFuPjwvYT4KKzwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuOSI+NS41LjkuPC9hPiA8YSBocmVmPSIjcHJvcC1od2FkZHIiIGlkPSJwcm9wLWh3YWRkciI+UFJPUCA4OiBQUk9QX0hXQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHkqPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+ODwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IV0FERFI8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS45LnAuMiI+VGhlIHN0YXRpYyBFVUk2NCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UsIHVzZWQgYXMgYSBzZXJpYWwgbnVtYmVyLiAgVGhpcyB2YWx1ZSBpcyByZWFkLW9ubHksIGJ1dCBtYXkgYmUgd3JpdGFibGUgdW5kZXIgY2VydGFpbiB2ZW5kb3ItZGVmaW5lZCBjaXJjdW1zdGFuY2VzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMTAiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTAiPjUuNS4xMC48L2E+IDxhIGhyZWY9IiNwcm9wLWxvY2siIGlkPSJwcm9wLWxvY2siPlBST1AgOTogUFJPUF9MT0NLPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkxPQ0s8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMC5wLjIiPlByb3BlcnR5IGxvY2suIFVzZWQgZm9yIGdyb3VwaW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBwcm9wZXJ0aWVzIHRvIHRha2UgZWZmZWN0IGF0IG9uY2UsIG9yIHRvIHRlbXBvcmFyaWx5IHByZXZlbnQgdGhlIGF1dG9tYXRpYyB1cGRhdGluZyBvZiBwcm9wZXJ0eSB2YWx1ZXMuIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBleGVjdXRpb24gb2YgdGhlIE5DUCBpcyBlZmZlY3RpdmVseSBmcm96ZW4gdW50aWwgaXQgaXMgY2xlYXJlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTAucC4zIj5UaGlzIHByb3BlcnR5IGlzIG9ubHkgc3VwcG9ydGVkIGlmIHRoZSA8c2FtcD5DQVBfTE9DSzwvc2FtcD4gY2FwYWJpbGl0eSBpcyBwcmVzZW50LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMC5wLjQiPlVubGlrZSBtb3N0IG90aGVyIHByb3BlcnRpZXMsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBhbHJlYWR5IHRydWUgTVVTVCBmYWlsIHdpdGggYSBsYXN0IHN0YXR1cyBvZiA8c2FtcD5TVEFUVVNfQUxSRUFEWTwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNS4xMSI+NS41LjExLjwvYT4gPGEgaHJlZj0iI3Byb3AtaG9zdC1wb3dlci1zdGF0ZSIgaWQ9InByb3AtaG9zdC1wb3dlci1zdGF0ZSI+UFJPUCAxMDogUFJPUF9IT1NUX1BPV0VSX1NUQVRFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+CisgIDxsaT5EZWZhdWx0IHZhbHVlOiA0PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPkhPU1RfUE9XRVJfU1RBVEU8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMS5wLjIiPkRlc2NyaWJlcyB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgPGVtPmhvc3Q8L2VtPi4gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IHRoZSBob3N0IHRvIGluZm9ybSB0aGUgTkNQIHdoZW4gaXQgaGFzIGNoYW5nZWQgcG93ZXIgc3RhdGVzLiBUaGUgTkNQIGNhbiB0aGVuIHVzZSB0aGlzIHN0YXRlIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIG5lZWQgYXN5bmNocm9ub3VzIHVwZGF0ZXMuIEVudW1lcmF0aW9uIGlzIGVuY29kZWQgYXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4gVGhlc2Ugc3RhdGVzIGFyZSBkZWZpbmVkIGluIHNpbWlsYXIgdGVybXMgdG8gPHNhbXA+UFJPUF9QT1dFUl9TVEFURTwvc2FtcD4gKDxhIGhyZWY9IiNwcm9wLXBvd2VyLXN0YXRlIj5TZWN0aW9uIDUuNS44PC9hPikuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuMyI+RGVmaW5lZCB2YWx1ZXMgYXJlOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IDxzYW1wPkhPU1RfUE9XRVJfU1RBVEVfT0ZGTElORTwvc2FtcD46IEhvc3QgaXMgcGh5c2ljYWxseSBwb3dlcmVkIG9mZiBhbmQgY2Fubm90IGJlIHdva2VuIGJ5IHRoZSBOQ1AuIEFsbCBhc3luY2hyb25vdXMgY29tbWFuZHMgYXJlIHNxdWVsY2hlZC48L2xpPgorICA8bGk+MTogPHNhbXA+SE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQPC9zYW1wPjogVGhlIGhvc3QgaXMgaW4gYSBsb3cgcG93ZXIgc3RhdGUgd2hlcmUgaXQgY2FuIGJlIHdva2VuIGJ5IHRoZSBOQ1AgYnV0IHdpbGwgcG90ZW50aWFsbHkgcmVxdWlyZSBtb3JlIHRoYW4gdHdvIHNlY29uZHMgdG8gYmVjb21lIGZ1bGx5IHJlc3BvbnNpdmUuIFRoZSBOQ1AgTVVTVCBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUgdXBkYXRlcyBvciBub24tY3JpdGljYWwgbWVzc2FnZXMgb24gdGhlIGRlYnVnIHN0cmVhbS4gSWYgdGhlIE5DUCBuZWVkcyB0byB3YWtlIHRoZSBob3N0IGZvciB0cmFmZmljLCB0aGUgTkNQIE1VU1QgZmlyc3QgdGFrZSBhY3Rpb24gdG8gd2FrZSB0aGUgaG9zdC4gT25jZSB0aGUgTkNQIHNpZ25hbHMgdG8gdGhlIGhvc3QgdGhhdCBpdCBzaG91bGQgd2FrZSB1cCwgdGhlIE5DUCBNVVNUIHdhaXQgZm9yIHNvbWUgYWN0aXZpdHkgZnJvbSB0aGUgaG9zdCAoaW5kaWNhdGluZyB0aGF0IGl0IGlzIGZ1bGx5IGF3YWtlKSBiZWZvcmUgc2VuZGluZyBmcmFtZXMuPC9saT4KKyAgPGxpPjI6IDxzdHJvbmc+UkVTRVJWRUQ8L3N0cm9uZz4uIFRoaXMgdmFsdWUgTVVTVCBOT1QgYmUgc2V0IGJ5IHRoZSBob3N0LiBJZiByZWNlaXZlZCBieSB0aGUgTkNQLCB0aGUgTkNQIFNIT1VMRCBjb25zaWRlciB0aGlzIGFzIGEgc3lub255bSBvZiA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVA8L3NhbXA+LjwvbGk+CisgIDxsaT4zOiA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUjwvc2FtcD46IFRoZSBob3N0IGlzIGluIGEgbG93IHBvd2VyIHN0YXRlIHdoZXJlIGl0IGNhbiBiZSBpbW1lZGlhdGVseSB3b2tlbiBieSB0aGUgTkNQLiBUaGUgTkNQIFNIT1VMRCBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUgdXBkYXRlcyBvciBub24tY3JpdGljYWwgbWVzc2FnZXMgb24gdGhlIGRlYnVnIHN0cmVhbS48L2xpPgorICA8bGk+NDogPHNhbXA+SE9TVF9QT1dFUl9TVEFURV9PTkxJTkU8L3NhbXA+OiBUaGUgaG9zdCBpcyBhd2FrZSBhbmQgcmVzcG9uc2l2ZS4gTm8gc3BlY2lhbCBmaWx0ZXJpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoZSBOQ1Agb24gYXN5bmNocm9ub3VzIHVwZGF0ZXMuPC9saT4KKyAgPGxpPkFsbCBvdGhlciB2YWx1ZXMgYXJlIDxzdHJvbmc+UkVTRVJWRUQ8L3N0cm9uZz4uIFRoZXkgTVVTVCBOT1QgYmUgc2V0IGJ5IHRoZSBob3N0LiBJZiByZWNlaXZlZCBieSB0aGUgTkNQLCB0aGUgTkNQIFNIT1VMRCBjb25zaWRlciB0aGUgdmFsdWUgYXMgYSBzeW5vbnltIG9mIDxzYW1wPkhPU1RfUE9XRVJfU1RBVEVfTE9XX1BPV0VSPC9zYW1wPi48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjMiIGNsYXNzPSJpbmZvIj5bQ1JFRjNdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBXZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBudW1iZXJpbmcgaGVyZSBzbyB0aGF0IDAgaXMgYFBPV0VSX1NUQVRFX09OTElORWAuIFdlIG1heSBhbHNvIHdhbnQgdG8gaW5jbHVkZSBzb21lIGV4dHJhIHZhbHVlcyBiZXR3ZWVuIHRoZSBkZWZpbmVkIHZhbHVlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgc28gdGhhdCB3ZSBjYW4gcHJlc2VydmUgdGhlIG9yZGVyZWQgcmVsYXRpb25zaGlwLiAtLTwvc3Bhbj48L2E+Cis8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuNiI+QWZ0ZXIgc2V0dGluZyB0aGlzIHBvd2VyIHN0YXRlLCBhbnkgZnVydGhlciBjb21tYW5kcyBmcm9tIHRoZSBob3N0IHRvIHRoZSBOQ1Agd2lsbCBjYXVzZSA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFPC9zYW1wPiB0byBhdXRvbWF0aWNhbGx5IHJldmVydCB0byA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX09OTElORTwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuNyI+V2hlbiB0aGUgaG9zdCBpcyBlbnRlcmluZyBhIGxvdy1wb3dlciBzdGF0ZSwgaXQgc2hvdWxkIHdhaXQgZm9yIHRoZSByZXNwb25zZSBmcm9tIHRoZSBOQ1AgYWNrbm93bGVkZ2luZyB0aGUgY29tbWFuZCAod2l0aCA8c2FtcD5DTURfVkFMVUVfSVM8L3NhbXA+KS4gIE9uY2UgdGhhdCBhY2tub3dsZWRnZW1lbnQgaXMgcmVjZWl2ZWQgdGhlIGhvc3QgbWF5IGVudGVyIHRoZSBsb3ctcG93ZXIgc3RhdGUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjExLnAuOCI+SWYgdGhlIE5DUCBoYXMgdGhlIDxzYW1wPkNBUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiBjYXBhYmlsaXR5LCBhbnkgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcyBtYXNrZWQgYnkgPHNhbXA+UFJPUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiBzaG91bGQgYmUgaG9ub3JlZCB3aGlsZSB0aGUgaG9zdCBpbmRpY2F0ZXMgaXQgaXMgaW4gYSBsb3ctcG93ZXIgc3RhdGUuIEFmdGVyIHJlc3VtaW5nIHRvIHRoZSA8c2FtcD5IT1NUX1BPV0VSX1NUQVRFX09OTElORTwvc2FtcD4gc3RhdGUsIHRoZSB2YWx1ZSBvZiA8c2FtcD5QUk9QX1VOU09MX1VQREFURV9GSUxURVI8L3NhbXA+IE1VU1QgYmUgdW5jaGFuZ2VkIGZyb20gdGhlIHZhbHVlIGFzc2lnbmVkIHByaW9yIHRvIHRoZSBob3N0IGluZGljYXRpbmcgaXQgd2FzIGVudGVyaW5nIGEgbG93LXBvd2VyIHN0YXRlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMS5wLjkiPlRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiBCZWhhdmlvciB3aGVuIHVzZWQgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS41LjEyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS41LjEyIj41LjUuMTIuPC9hPiA8YSBocmVmPSIjcHJvcC11bnNvbC11cGRhdGUtZmlsdGVyIiBpZD0icHJvcC11bnNvbC11cGRhdGUtZmlsdGVyIj5QUk9QIDQxMDQ6IFBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5SZXF1aXJlZCBvbmx5IGlmIDxzYW1wPkNBUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiBpcyBzZXQuPC9saT4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEkpPC9zYW1wPjwvbGk+CisgIDxsaT5EZWZhdWx0IHZhbHVlOiBFbXB0eS48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTIucC4yIj5Db250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB3aGljaCBhcmUgPGVtPmV4Y2x1ZGVkPC9lbT4gZnJvbSBnZW5lcmF0aW5nIHVuc29saWNpdGVkIHZhbHVlIHVwZGF0ZXMuIFRoaXMgcHJvcGVydHkgTVVTVCBiZSBlbXB0eSBhZnRlciByZXNldC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTIucC4zIj5JbiBvdGhlciB3b3JkcywgdGhlIGhvc3QgbWF5IG9wdC1vdXQgb2YgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcyBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBieSBhZGRpbmcgdGhhdCBwcm9wZXJ0eSBpZCB0byB0aGlzIGxpc3QuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEyLnAuNCI+SG9zdHMgU0hPVUxEIE5PVCBhZGQgcHJvcGVydGllcyB0byB0aGlzIGxpc3Qgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIDxzYW1wPlBST1BfVU5TT0xfVVBEQVRFX0xJU1Q8L3NhbXA+LiBJZiBzdWNoIHByb3BlcnRpZXMgYXJlIGFkZGVkLCB0aGUgTkNQIE1VU1QgaWdub3JlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiAgPC9wPgorPHA+CisgIDxhIGlkPSJDUkVGNCIgY2xhc3M9ImluZm8iPltDUkVGNF08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IFRoZSBqdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgYmVoYXZpb3IgaXMgdG8gYXR0ZW1wdCB0byBhdm9pZCBwb3NzaWJsZSBmdXR1cmUgaW50ZXJvcCBwcm9ibGVtcyBieSBleHBsaWNpdGx5IG1ha2luZyBzdXJlIHRoYXQgdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkLiBTaW5jZSB1bmtub3duIHByb3BlcnRpZXMgd2lsbCBvYnZpb3VzbHkgbm90IGJlIGdlbmVyYXRpbmcgdW5zb2xpY2l0ZWQgdXBkYXRlcywgaXQgc2VlbXMgZmFpcmx5IGhhcm1sZXNzLiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJpbnQgb3V0IGEgd2FybmluZyB0byB0aGUgZGVidWcgc3RyZWFtLiAgTm90ZSB0aGF0IHRoZSBlcnJvciBpcyBzdGlsbCBkZXRlY3RhYmxlOiBJZiB5b3UgVkFMVUVcX1NFVCB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLCB0aGUgcmVzdWx0aW5nIFZBTFVFXF9JUyB3b3VsZCBjb250YWluIG9ubHkgdGhlIHN1cHBvcnRlZCBwcm9wZXJ0aWVzIG9mIHRoYXQgc2V0KHNpbmNlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzIHdvdWxkIGJlIGlnbm9yZWQpLiBJZiBhbiBpbXBsZW1lbnRhdGlvbiBjYXJlcyB0aGF0IG11Y2ggYWJvdXQgZ2V0dGluZyB0aGlzIHJpZ2h0IHRoZW4gaXQgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2hlY2tzIFBST1BcX1VOU09MXF9VUERBVEVcX0xJU1QgZmlyc3QuICAtLTwvc3Bhbj48L2E+Cis8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEyLnAuNiI+SW1wbGVtZW50YXRpb25zIG9mIHRoaXMgcHJvcGVydHkgYXJlIG9ubHkgUkVRVUlSRUQgdG8gc3VwcG9ydCBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Q01EX1BST1BfVkFMVUVfR0VUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWdldCI+U2VjdGlvbiA0LjM8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtc2V0Ij5TZWN0aW9uIDQuNDwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWlzIj5TZWN0aW9uIDQuNzwvYT4pPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEyLnAuOCI+SW1wbGVtZW50YXRpb25zIG9mIHRoaXMgcHJvcGVydHkgTUFZIG9wdGlvbmFsbHkgc3VwcG9ydCBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Q01EX1BST1BfVkFMVUVfSU5TRVJUPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWluc2VydCI+U2VjdGlvbiA0LjU8L2E+KTwvbGk+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQUxVRV9SRU1PVkU8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtcmVtb3ZlIj5TZWN0aW9uIDQuNjwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEPC9zYW1wPiAoPGEgaHJlZj0iI2NtZC1wcm9wLXZhbHVlLWluc2VydGVkIj5TZWN0aW9uIDQuODwvYT4pPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX1JFTU9WRUQ8L3NhbXA+ICg8YSBocmVmPSIjY21kLXByb3AtdmFsdWUtcmVtb3ZlZCI+U2VjdGlvbiA0Ljk8L2E+KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMi5wLjEwIj5Ib3N0IGltcGxlbWVudGF0aW9ucyB3aGljaCBhcmUgYWltaW5nIHRvIG1heGltaXplIHRoZWlyIGNvbXBhdGFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBmaXJtd3JlIGltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UIGFzc3VtZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBvcHRpb25hbCBjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTIucC4xMSI+VGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgU0hBTEwgYmUgaW5kZXBlbmRlbnQgZm9yIGVhY2ggTkxJLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjUuMTMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjUuMTMiPjUuNS4xMy48L2E+IDxhIGhyZWY9IiNwcm9wLXVuc29sLXVwZGF0ZS1saXN0IiBpZD0icHJvcC11bnNvbC11cGRhdGUtbGlzdCI+UFJPUCA0MTA1OiBQUk9QX1VOU09MX1VQREFURV9MSVNUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlJlcXVpcmVkIG9ubHkgaWYgPHNhbXA+Q0FQX1VOU09MX1VQREFURV9GSUxURVI8L3NhbXA+IGlzIHNldC48L2xpPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShJKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjUuMTMucC4yIj5Db250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB3aGljaCBhcmUgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHVuc29saWNpdGVkIHZhbHVlIHVwZGF0ZXMuIFRoaXMgbGlzdCBjYW4gYmUgdXNlZCB3aGVuIHBvcHVsYXRpbmcgPHNhbXA+UFJPUF9VTlNPTF9VUERBVEVfRklMVEVSPC9zYW1wPiB0byBkaXNhYmxlIGFsbCB1bnNvbGljaXRlZCBwcm9wZXJ0eSB1cGRhdGVzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMy5wLjMiPlRoaXMgcHJvcGVydHkgaXMgaW50ZW5kZWQgdG8gZWZmZWN0aXZlbHkgYmVoYXZlIGFzIGEgY29uc3RhbnQgZm9yIGEgZ2l2ZW4gTkNQIGZpcm13YXJlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNS4xMy5wLjQiPk5vdGUgdGhhdCBub3QgYWxsIHByb3BlcnRpZXMgdGhhdCBzdXBwb3J0IHVuc29saWNpdGVkIHVwZGF0ZXMgbmVlZCB0byBiZSBsaXN0ZWQgaGVyZS4gU2NhbiByZXN1bHRzLCBmb3IgZXhhbXBsZSwgYXJlIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0byBkaXJlY3QgYWN0aW9uIG9uIHRoZSBwYXJ0IG9mIHRoZSBob3N0LCBzbyB0aG9zZSBwcm9wZXJ0aWVzIE1VU1QgTk9UIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS41LjEzLnAuNSI+VGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgTUFZIGJlIGRpZmZlcmVudCBhY3Jvc3MgYXZhaWxhYmxlIE5MSXMuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNiI+NS42LjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtIiBpZD0icHJvcC1zdHJlYW0iPlN0cmVhbSBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNi4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjEiPjUuNi4xLjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtLWRlYnVnIiBpZD0icHJvcC1zdHJlYW0tZGVidWciPlBST1AgMTEyOiBQUk9QX1NUUkVBTV9ERUJVRzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHktU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5VVEY4X0RBVEE8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4xLnAuMiI+VGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QgZXhwbGljaXRseSBmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVGhlIHN0cmVhbSBwcm92aWRlcyBodW1hbi1yZWFkYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWNoIG1heSBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhvc3QgbG9ncy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMS5wLjMiPlRoZSBsb2NhdGlvbiBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaXMgbm90IGFzc3VtZWQgYnkgdGhlIGhvc3Q6IGl0IGlzIHRoZSBOQ1AncyByZXNwb25zaWJpbGl0eSB0byBpbnNlcnQgbmV3bGluZSBjaGFyYWN0ZXJzIHdoZXJlIG5lZWRlZCwganVzdCBsaWtlIHdpdGggYW55IG90aGVyIHRleHQgc3RyZWFtLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4xLnAuNCI+VG8gcmVjZWl2ZSB0aGUgZGVidWdnaW5nIHN0cmVhbSwgeW91IHdhaXQgZm9yIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiBjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eSBmcm9tIHRoZSBOQ1AuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNi4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjIiPjUuNi4yLjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtLXJhdyIgaWQ9InByb3Atc3RyZWFtLXJhdyI+UFJPUCAxMTM6IFBST1BfU1RSRUFNX1JBVzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlLVN0cmVhbTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmREPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4yPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX0RBVEFfTEVOPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9EQVRBPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9NRVRBREFUQTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIucC4yIj5UaGlzIHN0cmVhbSBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgcmF3IHBhY2tldHMgdG8gYW5kIGZyb20gdGhlIHJhZGlvLiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBmcmFtZSBtZXRhZGF0YSBhbmQgZGF0YSBpcyBkZXBlbmRlbnQgb24gdGhlIE1BQyBhbmQgUEhZIGJlaW5nIHVzZWQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIucC4zIj5UaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5IGZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LiBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdSB3YWl0IGZvciA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi5wLjQiPkltcGxlbWVudGF0aW9ucyBtYXkgT1BUSU9OQUxMWSBzdXBwb3J0IHRoZSBhYmlsaXR5IHRvIHRyYW5zbWl0IGFyYml0cmFyeSByYXcgcGFja2V0cy4gU3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGlzIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIDxzYW1wPkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNPC9zYW1wPiBjYXBhYmlsaXR5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4yLnAuNSI+SWYgdGhlIGNhcGFiaWxpdHkgPHNhbXA+Q0FQX1dSSVRBQkxFX1JBV19TVFJFQU08L3NhbXA+IGlzIHNldCwgdGhlbiBwYWNrZXRzIHdyaXR0ZW4gdG8gdGhpcyBzdHJlYW0gd2l0aCA8c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+IHdpbGwgYmUgc2VudCBvdXQgb3ZlciB0aGUgcmFkaW8uICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgcmFkaW8gZGlyZWN0bHksIHdpdGggdGhlIHN0YWNrIGJlaW5nIGltcGxlbWVudGVkIG9uIHRoZSBob3N0IGluc3RlYWQgb2YgdGhlIE5DUC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS42LjIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNi4yLjEiPjUuNi4yLjEuPC9hPiA8YSBocmVmPSIjZnJhbWUtbWV0YWRhdGEtZm9ybWF0IiBpZD0iZnJhbWUtbWV0YWRhdGEtZm9ybWF0Ij5GcmFtZSBNZXRhZGF0YSBGb3JtYXQ8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi4xLnAuMSI+QW55IGRhdGEgcGFzdCB0aGUgZW5kIG9mIDxzYW1wPkZSQU1FX0RBVEFfTEVOPC9zYW1wPiBpcyBjb25zaWRlcmVkIG1ldGFkYXRhIGFuZCBpcyBPUFRJT05BTC4gRnJhbWUgbWV0YWRhdGEgTUFZIGJlIGVtcHR5IG9yIHBhcnRpYWxseSBzcGVjaWZpZWQuIFBhcnRpYWxseSBzcGVjaWZpZWQgbWV0YWRhdGEgTVVTVCBiZSBhY2NlcHRlZC4gRGVmYXVsdCB2YWx1ZXMgYXJlIHVzZWQgZm9yIGFsbCB1bnNwZWNpZmllZCBmaWVsZHMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIuMS5wLjIiPlRoZSBzYW1lIGdlbmVyYWwgZm9ybWF0IGlzIHVzZWQgZm9yIDxzYW1wPlBST1BfU1RSRUFNX1JBVzwvc2FtcD4sIDxzYW1wPlBST1BfU1RSRUFNX05FVDwvc2FtcD4sIGFuZCA8c2FtcD5QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkU8L3NhbXA+LiBJdCBjYW4gYmUgdXNlZCBmb3IgZnJhbWVzIHNlbnQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0IGFzIHdlbGwgYXMgZnJhbWVzIHNlbnQgZnJvbSB0aGUgaG9zdCB0byB0aGUgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4yLjEucC4zIj5UaGUgZnJhbWUgbWV0YWRhdGEgZmllbGQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPkZpZWxkPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+RGVzY3JpcHRpb248L3RoPgorICAgICAgPHRoIGNsYXNzPSJsZWZ0Ij5UeXBlPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5MZW48L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkRlZmF1bHQ8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPk1EX1BPV0VSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+KGRCbSkgUlNTSS9UWC1Qb3dlcjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPjxzYW1wPmM8L3NhbXA+IGludDg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPi0xMjg8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5NRF9OT0lTRTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPihkQm0pIE5vaXNlIGZsb29yPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+PHNhbXA+Yzwvc2FtcD4gaW50ODwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+LTEyODwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPk1EX0ZMQUc8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5GbGFncyAoZGVmaW5lZCBiZWxvdyk8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij48c2FtcD5TPC9zYW1wPiB1aW50MTY8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiLz4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+TURfUEhZPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+UEhZLXNwZWNpZmljIGRhdGE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij48c2FtcD5kPC9zYW1wPiBkYXRhPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4mZ3Q7PTI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiLz4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+TURfVkVORDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPlZlbmRvci1zcGVjaWZpYyBkYXRhPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+PHNhbXA+ZDwvc2FtcD4gZGF0YTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Jmd0Oz0yPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIi8+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjIuMS5wLjQiPlRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBpZ25vcmVkIGJ5IHRoZSBOQ1AgZm9yIHBhY2tldHMgc2VudCB0byBpdCBmcm9tIHRoZSBob3N0OiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPk1EX05PSVNFPC9saT4KKyAgPGxpPk1EX0ZMQUc8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi4xLnAuNiI+V2hlbiBzcGVjaWZ5aW5nIDxzYW1wPk1EX1BPV0VSPC9zYW1wPiBmb3IgYSBwYWNrZXQgdG8gYmUgdHJhbnNtaXR0ZWQsIHRoZSBhY3R1YWwgdHJhbnNtaXQgcG93ZXIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgPHNhbXA+UFJPUF9QSFlfVFhfUE9XRVI8L3NhbXA+ICg8YSBocmVmPSIjcHJvcC1waHktdHgtcG93ZXIiPlNlY3Rpb24gNS43LjY8L2E+KS4gV2hlbiBsZWZ0IHVuc3BlY2lmaWVkIChvciBzZXQgdG8gdGhlIHZhbHVlIC0xMjgpLCBhbiBhcHByb3ByaWF0ZSB0cmFuc21pdCBwb3dlciB3aWxsIGJlIGNob3NlbiBieSB0aGUgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi4yLjEucC43Ij5UaGUgYml0IHZhbHVlcyBpbiA8c2FtcD5NRF9GTEFHPC9zYW1wPiBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPkJpdDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+TWFzazwvdGg+CisgICAgICA8dGggY2xhc3M9ImxlZnQiPk5hbWU8L3RoPgorICAgICAgPHRoIGNsYXNzPSJsZWZ0Ij5EZXNjcmlwdGlvbiBpZiBzZXQ8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MTU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4MDAwMTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPk1EX0ZMQUdfVFg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5QYWNrZXQgd2FzIHRyYW5zbWl0dGVkLCBub3QgcmVjZWl2ZWQuPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4xMzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgwMDA0PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+TURfRkxBR19CQURfRkNTPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+UGFja2V0IHdhcyByZWNlaXZlZCB3aXRoIGJhZCBGQ1M8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjEyPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4weDAwMDg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5NRF9GTEFHX0RVUEU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5QYWNrZXQgc2VlbXMgdG8gYmUgYSBkdXBsaWNhdGU8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjAtMTEsIDE0PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4weEZGRjI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij5NRF9GTEFHX1JFU0VSVkVEPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+RmxhZ3MgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMi4xLnAuOCI+VGhlIGZvcm1hdCBvZiA8c2FtcD5NRF9QSFk8L3NhbXA+IGlzIHNwZWNpZmllZCBieSB0aGUgUEhZIGxheWVyIGN1cnJlbnRseSBpbiB1c2UsIGFuZCBtYXkgY29udGFpbiBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBjaGFubmVsLCBMUUksIGFudGVubmEsIG9yIG90aGVyIHBlcnRhaW5lbnQgaW5mb3JtYXRpb24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNi4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS42LjMiPjUuNi4zLjwvYT4gPGEgaHJlZj0iI3Byb3Atc3RyZWFtLW5ldCIgaWQ9InByb3Atc3RyZWFtLW5ldCI+UFJPUCAxMTQ6IFBST1BfU1RSRUFNX05FVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlLVN0cmVhbTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmREPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4yPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5uPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX0RBVEFfTEVOPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9EQVRBPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GUkFNRV9NRVRBREFUQTwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjMucC4yIj5UaGlzIHN0cmVhbSBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgZGF0YSBwYWNrZXRzIHRvIGFuZCBmcm9tIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgbmV0d29yay4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUgbWV0YWRhdGEgYW5kIGRhdGEgaXMgZGVwZW5kZW50IG9uIHRoZSBuZXR3b3JrIHByb3RvY29sIGJlaW5nIHVzZWQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS42LjMucC4zIj5UaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5IGZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LiBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdSB3YWl0IGZvciA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMy5wLjQiPlRvIHNlbmQgbmV0d29yayBwYWNrZXRzLCB5b3UgY2FsbCA8c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+IG9uIHRoaXMgcHJvcGVydHkgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHBhY2tldC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuMy5wLjUiPkFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiA8c2FtcD5GUkFNRV9EQVRBX0xFTjwvc2FtcD4gaXMgY29uc2lkZXJlZCBtZXRhZGF0YSwgdGhlIGZvcm1hdCBvZiB3aGljaCBpcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iI2ZyYW1lLW1ldGFkYXRhLWZvcm1hdCI+U2VjdGlvbiA1LjYuMi4xPC9hPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS42LjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjYuNCI+NS42LjQuPC9hPiA8YSBocmVmPSIjcHJvcC1zdHJlYW0tbmV0LWluc2VjdXJlIiBpZD0icHJvcC1zdHJlYW0tbmV0LWluc2VjdXJlIj5QUk9QIDExNTogUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+ZEQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RlJBTUVfREFUQV9MRU48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX0RBVEE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZSQU1FX01FVEFEQVRBPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuNC5wLjIiPlRoaXMgc3RyZWFtIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyB1bmVuY3J5cHRlZCBhbmQgdW5hdXRoZW50aWNhdGVkIGRhdGEgcGFja2V0cyB0byBhbmQgZnJvbSBuZWFyYnkgZGV2aWNlcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRldmljZSBjb21taXNzaW9uaW5nLiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBmcmFtZSBtZXRhZGF0YSBhbmQgZGF0YSBpcyBkZXBlbmRlbnQgb24gdGhlIG5ldHdvcmsgcHJvdG9jb2wgYmVpbmcgdXNlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjYuNC5wLjMiPlRoaXMgcHJvcGVydHkgaXMgYSBzdHJlYW1pbmcgcHJvcGVydHksIG1lYW5pbmcgdGhhdCB5b3UgY2Fubm90IGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuIFRvIHJlY2VpdmUgdHJhZmZpYywgeW91IHdhaXQgZm9yIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi40LnAuNCI+VG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX1NFVDwvc2FtcD4gb24gdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcGFja2V0LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNi40LnAuNSI+QW55IGRhdGEgcGFzdCB0aGUgZW5kIG9mIDxzYW1wPkZSQU1FX0RBVEFfTEVOPC9zYW1wPiBpcyBjb25zaWRlcmVkIG1ldGFkYXRhLCB0aGUgZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSIjZnJhbWUtbWV0YWRhdGEtZm9ybWF0Ij5TZWN0aW9uIDUuNi4yLjE8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjciPjUuNy48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeSIgaWQ9InByb3AtcGh5Ij5QSFkgUHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4xIj41LjcuMS48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1lbmFibGVkIiBpZD0icHJvcC1waHktZW5hYmxlZCI+UFJPUCAzMjogUFJPUF9QSFlfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD4gKGJvb2w4KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNy4xLnAuMiI+U2V0IHRvIDEgaWYgdGhlIFBIWSBpcyBlbmFibGVkLCBzZXQgdG8gMCBvdGhlcndpc2UuICBNYXkgYmUgZGlyZWN0bHkgZW5hYmxlZCB0byBieXBhc3MgaGlnaGVyLWxldmVsIHBhY2tldCBwcm9jZXNzaW5nIGluIG9yZGVyIHRvIGltcGxlbWVudCB0aGluZ3MgbGlrZSBwYWNrZXQgc25pZmZlcnMuIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgd3JpdHRlbiBpZiB0aGUgPHNhbXA+U1BJTkVMX0NBUF9NQUNfUkFXPC9zYW1wPiBjYXBhYmlsaXR5IGlzIHByZXNlbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNy4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjIiPjUuNy4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtcGh5LWNoYW4iIGlkPSJwcm9wLXBoeS1jaGFuIj5QUk9QIDMzOiBQUk9QX1BIWV9DSEFOPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPiAodWludDgpPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS43LjIucC4yIj5WYWx1ZSBpcyB0aGUgY3VycmVudCBjaGFubmVsLiBNdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gPHNhbXA+UFJPUF9QSFlfQ0hBTl9TVVBQT1JURUQ8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy4zIj41LjcuMy48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1jaGFuLXN1cHBvcnRlZCIgaWQ9InByb3AtcGh5LWNoYW4tc3VwcG9ydGVkIj5QUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEMpPC9zYW1wPiAoYXJyYXkgb2YgdWludDgpPC9saT4KKyAgPGxpPlVuaXQ6IExpc3Qgb2YgY2hhbm5lbHM8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuMy5wLjIiPlZhbHVlIGlzIGEgbGlzdCBvZiBjaGFubmVsIHZhbHVlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy40Ij41LjcuNC48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1mcmVxIiBpZD0icHJvcC1waHktZnJlcSI+UFJPUCAzNTogUFJPUF9QSFlfRlJFUTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPiAodWludDMyKTwvbGk+CisgIDxsaT5Vbml0OiBLaWxvaGVydHo8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuNC5wLjIiPlZhbHVlIGlzIHRoZSByYWRpbyBmcmVxdWVuY3kgKGluIGtpbG9oZXJ0eikgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS43LjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNSI+NS43LjUuPC9hPiA8YSBocmVmPSIjcHJvcC1waHktY2NhLXRocmVzaG9sZCIgaWQ9InByb3AtcGh5LWNjYS10aHJlc2hvbGQiPlBST1AgMzY6IFBST1BfUEhZX0NDQV9USFJFU0hPTEQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmM8L3NhbXA+IChpbnQ4KTwvbGk+CisgIDxsaT5Vbml0OiBkQm08L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuNS5wLjIiPlZhbHVlIGlzIHRoZSBDQ0EgKGNsZWFyLWNoYW5uZWwgYXNzZXNzbWVudCkgdGhyZXNob2xkLiBTZXQgdG8gLTEyOCB0byBkaXNhYmxlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuNy41LnAuMyI+V2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyByYWRpbyBoYXJkd2FyZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS43LjYiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjcuNiI+NS43LjYuPC9hPiA8YSBocmVmPSIjcHJvcC1waHktdHgtcG93ZXIiIGlkPSJwcm9wLXBoeS10eC1wb3dlciI+UFJPUCAzNzogUFJPUF9QSFlfVFhfUE9XRVI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmM8L3NhbXA+IChpbnQ4KTwvbGk+CisgIDxsaT5Vbml0OiBkQm08L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuNi5wLjIiPlZhbHVlIGlzIHRoZSB0cmFuc21pdCBwb3dlciBvZiB0aGUgcmFkaW8uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS43LjYucC4zIj5XaGVuIHNldHRpbmcsIHRoZSB2YWx1ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byBhIHZhbHVlIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHJhZGlvIGhhcmR3YXJlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjcuNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuNy43Ij41LjcuNy48L2E+IDxhIGhyZWY9IiNwcm9wLXBoeS1yc3NpIiBpZD0icHJvcC1waHktcnNzaSI+UFJPUCAzODogUFJPUF9QSFlfUlNTSTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5jPC9zYW1wPiAoaW50OCk8L2xpPgorICA8bGk+VW5pdDogZEJtPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS43LjcucC4yIj5WYWx1ZSBpcyB0aGUgY3VycmVudCBSU1NJIChSZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggaW5kaWNhdGlvbikgZnJvbSB0aGUgcmFkaW8uIFRoaXMgdmFsdWUgY2FuIGJlIHVzZWQgaW4gZW5lcmd5IHNjYW5zIGFuZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFtYmllbnQgbm9pc2UgZmxvb3IgZm9yIHRoZSBvcGVyYXRpbmcgZW52aXJvbm1lbnQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuNy44Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS43LjgiPjUuNy44LjwvYT4gPGEgaHJlZj0iI3Byb3AtcGh5LXJ4LXNlbnNpdGl2aXR5IiBpZD0icHJvcC1waHktcngtc2Vuc2l0aXZpdHkiPlBST1AgMzk6IFBST1BfUEhZX1JYX1NFTlNJVElWSVRZPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmM8L3NhbXA+IChpbnQ4KTwvbGk+CisgIDxsaT5Vbml0OiBkQm08L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjcuOC5wLjIiPlZhbHVlIGlzIHRoZSByYWRpbyByZWNlaXZlIHNlbnNpdGl2aXR5LiBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIGFzIGxvd2VyIGJvdW5kIG5vaXNlIGZsb29yIGZvciBsaW5rIG1ldHJpY3MgY29tcHV0YXRpb24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOCI+NS44LjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjIiBpZD0icHJvcC1tYWMiPk1BQyBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEiPjUuOC4xLjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXNjYW4tc3RhdGUiIGlkPSJwcm9wLW1hYy1zY2FuLXN0YXRlIj5QUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBFbnVtZXJhdGlvbjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuMiI+UG9zc2libGUgVmFsdWVzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IDxzYW1wPlNDQU5fU1RBVEVfSURMRTwvc2FtcD48L2xpPgorICA8bGk+MTogPHNhbXA+U0NBTl9TVEFURV9CRUFDT048L3NhbXA+PC9saT4KKyAgPGxpPjI6IDxzYW1wPlNDQU5fU1RBVEVfRU5FUkdZPC9zYW1wPjwvbGk+CisgIDxsaT4zOiA8c2FtcD5TQ0FOX1NUQVRFX0RJU0NPVkVSPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuNCI+U2V0IHRvIDxzYW1wPlNDQU5fU1RBVEVfQkVBQ09OPC9zYW1wPiB0byBzdGFydCBhbiBhY3RpdmUgc2Nhbi4gIEJlYWNvbnMgd2lsbCBiZSBlbWl0dGVkIGZyb20gPHNhbXA+UFJPUF9NQUNfU0NBTl9CRUFDT048L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuNSI+U2V0IHRvIDxzYW1wPlNDQU5fU1RBVEVfRU5FUkdZPC9zYW1wPiB0byBzdGFydCBhbiBlbmVyZ3kgc2Nhbi4gIENoYW5uZWwgZW5lcmd5IHJlc3VsdCB3aWxsIGJlIHJlcG9ydGVkIGJ5IGVtaXNzaW9ucyBvZiA8c2FtcD5QUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQ8L3NhbXA+IChwZXIgY2hhbm5lbCkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjEucC42Ij5TZXQgdG8gPHNhbXA+U0NBTl9TVEFURV9ESVNPVkVSPC9zYW1wPiB0byBzdGFydCBhIFRocmVhZCBNTEUgZGlzY292ZXJ5IHNjYW4gb3BlcmF0aW9uLiBEaXNjb3Zlcnkgc2NhbiByZXN1bHQgd2lsbCBiZSBlbWl0dGVkIGZyb20gPHNhbXA+UFJPUF9NQUNfU0NBTl9CRUFDT048L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xLnAuNyI+VmFsdWUgc3dpdGNoZXMgdG8gPHNhbXA+U0NBTl9TVEFURV9JRExFPC9zYW1wPiB3aGVuIHNjYW4gaXMgY29tcGxldGUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjIiPjUuOC4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXNjYW4tbWFzayIgaWQ9InByb3AtbWFjLXNjYW4tbWFzayI+UFJPUCA0OTogUFJPUF9NQUNfU0NBTl9NQVNLPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEMpPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBMaXN0IG9mIGNoYW5uZWxzIHRvIHNjYW48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMyI+NS44LjMuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtc2Nhbi1wZXJpb2QiIGlkPSJwcm9wLW1hYy1zY2FuLXBlcmlvZCI+UFJPUCA1MDogUFJPUF9NQUNfU0NBTl9QRVJJT0Q8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlM8L3NhbXA+ICh1aW50MTYpPC9saT4KKyAgPGxpPlVuaXQ6IG1pbGxpc2Vjb25kcyBwZXIgY2hhbm5lbDwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC40Ij41LjguNC48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy1zY2FuLWJlYWNvbiIgaWQ9InByb3AtbWFjLXNjYW4tYmVhY29uIj5QUk9QIDUxOiBQUk9QX01BQ19TQ0FOX0JFQUNPTjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHktU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Q2NkZDwvc2FtcD4gKG9yIDxzYW1wPkNjdChFU1NjKXQoaUNVZGQpPC9zYW1wPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+bjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DSDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+UlNTSTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TUFDX0xFTjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TUFDX0RBVEE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk5FVF9MRU48L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPk5FVF9EQVRBPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNC5wLjIiPlNjYW4gYmVhY29ucyBoYXZlIHR3byBlbWJlZGRlZCBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgdGhlIE5FVCBsYXllci4gVGhlaXIgZm9ybWF0IGRlcGVuZHMgb24gdGhlIE1BQyBhbmQgTkVUIGxheWVyIGN1cnJlbnRseSBpbiB1c2UuICBUaGUgZm9ybWF0IGJlbG93IGlzIGZvciBhbiA4MDIuMTUuNCBNQUMgd2l0aCBUaHJlYWQ6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IENoYW5uZWw8L2xpPgorICA8bGk+PHNhbXA+Yzwvc2FtcD46IFJTU0kgb2YgdGhlIGJlYWNvbjwvbGk+CisgIDxsaT48c2FtcD50PC9zYW1wPjogTUFDIGxheWVyIHByb3BlcnRpZXMgKDgwMi4xNS40IGxheWVyIHNob3duIGJlbG93IGZvciBjb252ZW5pZW5jZSkgPHVsPjxsaT48c2FtcD5FPC9zYW1wPjogTG9uZyBhZGRyZXNzPC9saT48bGk+PHNhbXA+Uzwvc2FtcD46IFNob3J0IGFkZHJlc3M8L2xpPjxsaT48c2FtcD5TPC9zYW1wPjogUEFOLUlEPC9saT48bGk+PHNhbXA+Yzwvc2FtcD46IExRSTwvbGk+PC91bD48L2xpPgorICA8bGk+TkVUIGxheWVyIHByb3BlcnRpZXMgKFN0YW5kYXJkIG5ldCBsYXllciBzaG93biBiZWxvdyBmb3IgY29udmVuaWVuY2UpIDx1bD48bGk+PHNhbXA+aTwvc2FtcD46IFByb3RvY29sIE51bWJlcjwvbGk+PGxpPjxzYW1wPkM8L3NhbXA+OiBGbGFnczwvbGk+PGxpPjxzYW1wPlU8L3NhbXA+OiBOZXR3b3JrIE5hbWU8L2xpPjxsaT48c2FtcD5kPC9zYW1wPjogWFBBTklEPC9saT48bGk+PHNhbXA+ZDwvc2FtcD46IFN0ZWVyaW5nIGRhdGE8L2xpPjwvdWw+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjQucC40Ij5FeHRyYSBwYXJhbWV0ZXJzIG1heSBiZSBhZGRlZCB0byBlYWNoIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZSBmdXR1cmUsIHNvIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIHJlYWQgdGhlIGxlbmd0aCB0aGF0IHByZXBlbmRzIGVhY2ggc3RydWN0dXJlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC41Ij41LjguNS48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy0xNS00LWxhZGRyIiBpZD0icHJvcC1tYWMtMTUtNC1sYWRkciI+UFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNS5wLjIiPlRoZSA4MDIuMTUuNCBsb25nIGFkZHJlc3Mgb2YgdGhpcyBub2RlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC41LnAuMyI+VGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHByZXNlbnQgb24gTkNQcyB3aGljaCBpbXBsZW1lbnQgODAyLjE1LjQgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC42Ij41LjguNi48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy0xNS00LXNhZGRyIiBpZD0icHJvcC1tYWMtMTUtNC1zYWRkciI+UFJPUCA1MzogUFJPUF9NQUNfMTVfNF9TQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNi5wLjIiPlRoZSA4MDIuMTUuNCBzaG9ydCBhZGRyZXNzIG9mIHRoaXMgbm9kZS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNi5wLjMiPlRoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguNyI+NS44LjcuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtMTUtNC1wYW5pZCIgaWQ9InByb3AtbWFjLTE1LTQtcGFuaWQiPlBST1AgNTQ6IFBST1BfTUFDXzE1XzRfUEFOSUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjcucC4yIj5UaGUgODAyLjE1LjQgUEFOSUQgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguNy5wLjMiPlRoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjgiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguOCI+NS44LjguPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtcmF3LXN0cmVhbS1lbmFibGVkIiBpZD0icHJvcC1tYWMtcmF3LXN0cmVhbS1lbmFibGVkIj5QUk9QIDU1OiBQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjgucC4yIj5TZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmF3IE1BQyBmcmFtZXMgdG8gYmUgZW1pdHRlZCBmcm9tIDxzYW1wPlBST1BfU1RSRUFNX1JBVzwvc2FtcD4uICBTZWUgPGEgaHJlZj0iI3Byb3Atc3RyZWFtLXJhdyI+U2VjdGlvbiA1LjYuMjwvYT4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC45Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjkiPjUuOC45LjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXByb21pc2N1b3VzLW1vZGUiIGlkPSJwcm9wLW1hYy1wcm9taXNjdW91cy1tb2RlIj5QUk9QIDU2OiBQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC45LnAuMiI+UG9zc2libGUgVmFsdWVzOiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPklkPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5OYW1lPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5EZXNjcmlwdGlvbjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4wPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+TUFDX1BST01JU0NVT1VTX01PREVfT0ZGPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5Ob3JtYWwgTUFDIGZpbHRlcmluZyBpcyBpbiBwbGFjZS48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5NQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5BbGwgTUFDIHBhY2tldHMgbWF0Y2hpbmcgbmV0d29yayBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPgorICAgICAgICA8c2FtcD5NQUNfUFJPTUlTQ1VPVVNfTU9ERV9GVUxMPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5BbGwgZGVjb2RlZCBNQUMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay48L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC45LnAuMyI+U2VlIDxhIGhyZWY9IiNwcm9wLXN0cmVhbS1yYXciPlNlY3Rpb24gNS42LjI8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguMTAiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTAiPjUuOC4xMC48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy1lc2Nhbi1yZXN1bHQiIGlkPSJwcm9wLW1hYy1lc2Nhbi1yZXN1bHQiPlBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHktU3RyZWFtPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Q2M8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjEwLnAuMiI+VGhpcyBwcm9wZXJ0eSBpcyBlbWl0dGVkIGR1cmluZyBlbmVyZ3kgc2NhbiBvcGVyYXRpb24gcGVyIHNjYW5uZWQgY2hhbm5lbCB3aXRoIGZvbGxvd2luZyBmb3JtYXQ6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IENoYW5uZWw8L2xpPgorICA8bGk+PHNhbXA+Yzwvc2FtcD46IFJTU0kgKGluIGRCbSk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjExIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjExIj41LjguMTEuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtd2hpdGVsaXN0IiBpZD0icHJvcC1tYWMtd2hpdGVsaXN0Ij5QUk9QIDQ4NjQ6IFBST1BfTUFDX1dISVRFTElTVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShUKEVjKSk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIGNhcGFiaWxpdHk6IDxzYW1wPkNBUF9NQUNfV0hJVEVMSVNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xMS5wLjIiPlN0cnVjdHVyZSBQYXJhbWV0ZXJzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkU8L3NhbXA+OiBFVUk2NCBhZGRyZXNzIG9mIG5vZGU8L2xpPgorICA8bGk+PHNhbXA+Yzwvc2FtcD46IE9wdGlvbmFsIFJTU0ktb3ZlcnJpZGUgdmFsdWUuIFRoZSB2YWx1ZSAxMjcgaW5kaWNhdGVzIHRoYXQgdGhlIFJTU0ktb3ZlcnJpZGUgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBhZGRyZXNzLiBJZiB0aGlzIHZhbHVlIGlzIG9taXR0ZWQgd2hlbiBzZXR0aW5nIG9yIGluc2VydGluZywgaXQgaXMgYXNzdW1lZCB0byBiZSAxMjcuIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgd2hlbiByZW1vdmluZy48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjEyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjEyIj41LjguMTIuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtd2hpdGVsaXN0LWVuYWJsZWQiIGlkPSJwcm9wLW1hYy13aGl0ZWxpc3QtZW5hYmxlZCI+UFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX01BQ19XSElURUxJU1Q8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4xMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xMyI+NS44LjEzLjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLXNyYy1tYXRjaC1lbmFibGVkIiBpZD0icHJvcC1tYWMtc3JjLW1hdGNoLWVuYWJsZWQiPlBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguMTMucC4yIj5TZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmFkaW8gc291cmNlIG1hdGNoaW5nIG9yIGZhbHNlIHRvIGRpc2FibGUgaXQuIFRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDxzYW1wPlNQSU5FTF9DQVBfTUFDX1JBVzwvc2FtcD4gY2FwYWJpbGl0eSBpcyBwcmVzZW50LiBUaGUgc291cmNlIG1hdGNoIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCBieSByYWRpb3Mgd2hlbiBnZW5lcmF0aW5nIEFDS3MuIFRoZSBzaG9ydCBhbmQgZXh0ZW5kZWQgYWRkcmVzcyBsaXN0cyBhcmUgdXNlZCBmb3Igc2V0dGluZ3MgdGhlIEZyYW1lIFBlbmRpbmcgYml0IGluIHRoZSBBQ0tzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjguMTQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjguMTQiPjUuOC4xNC48L2E+IDxhIGhyZWY9IiNwcm9wLW1hYy1zcmMtbWF0Y2gtc2hvcnQtYWRkcmVzc2VzIiBpZD0icHJvcC1tYWMtc3JjLW1hdGNoLXNob3J0LWFkZHJlc3NlcyI+UFJPUCA0ODY4OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBXcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEoUyk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjE0LnAuMiI+Q29uZmlndXJlcyB0aGUgbGlzdCBvZiBzaG9ydCBhZGRyZXNzZXMgdXNlZCBmb3Igc291cmNlIG1hdGNoaW5nLiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8c2FtcD5TUElORUxfQ0FQX01BQ19SQVc8L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjguMTQucC4zIj5TdHJ1Y3R1cmUgUGFyYW1ldGVyczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5TPC9zYW1wPjogU2hvcnQgYWRkcmVzcyBmb3IgaGFyZHdhcmUgZ2VuZXJhdGVkIEFDS3M8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjE1Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE1Ij41LjguMTUuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtc3JjLW1hdGNoLWV4dGVuZGVkLWFkZHJlc3NlcyIgaWQ9InByb3AtbWFjLXNyYy1tYXRjaC1leHRlbmRlZC1hZGRyZXNzZXMiPlBST1AgNDg2OTogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKEUpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xNS5wLjIiPkNvbmZpZ3VyZXMgdGhlIGxpc3Qgb2YgZXh0ZW5kZWQgYWRkcmVzc2VzIHVzZWQgZm9yIHNvdXJjZSBtYXRjaGluZy4gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+U1BJTkVMX0NBUF9NQUNfUkFXPC9zYW1wPiBjYXBhYmlsaXR5IGlzIHByZXNlbnQuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS44LjE1LnAuMyI+U3RydWN0dXJlIFBhcmFtZXRlcnM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+RTwvc2FtcD46IEVVSTY0IGFkZHJlc3MgZm9yIGhhcmR3YXJlIGdlbmVyYXRlZCBBQ0tzPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOC4xNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOC4xNiI+NS44LjE2LjwvYT4gPGEgaHJlZj0iI3Byb3AtbWFjLWJsYWNrbGlzdCIgaWQ9InByb3AtbWFjLWJsYWNrbGlzdCI+UFJPUCA0ODcwOiBQUk9QX01BQ19CTEFDS0xJU1Q8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEoVChFKSk8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIGNhcGFiaWxpdHk6IDxzYW1wPkNBUF9NQUNfV0hJVEVMSVNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOC4xNi5wLjIiPlN0cnVjdHVyZSBQYXJhbWV0ZXJzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkU8L3NhbXA+OiBFVUk2NCBhZGRyZXNzIG9mIG5vZGU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS44LjE3Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS44LjE3Ij41LjguMTcuPC9hPiA8YSBocmVmPSIjcHJvcC1tYWMtYmxhY2tsaXN0LWVuYWJsZWQiIGlkPSJwcm9wLW1hYy1ibGFja2xpc3QtZW5hYmxlZCI+UFJPUCA0ODcxOiBQUk9QX01BQ19CTEFDS0xJU1RfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX01BQ19XSElURUxJU1Q8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOSI+NS45LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0IiBpZD0icHJvcC1uZXQiPk5FVCBQcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjEiPjUuOS4xLjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LXNhdmVkIiBpZD0icHJvcC1uZXQtc2F2ZWQiPlBST1AgNjQ6IFBST1BfTkVUX1NBVkVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS45LjEucC4yIj5SZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuZXR3b3JrIHN0YXRlIHN0b3JlZC9zYXZlZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS45LjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMiI+NS45LjIuPC9hPiA8YSBocmVmPSIjcHJvcC1uZXQtaWYtdXAiIGlkPSJwcm9wLW5ldC1pZi11cCI+UFJPUCA2NTogUFJPUF9ORVRfSUZfVVA8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS45LjIucC4yIj5OZXR3b3JrIGludGVyZmFjZSB1cC9kb3duIHN0YXR1cy4gTm9uLXplcm8gKHNldCB0byAxKSBpbmRpY2F0ZXMgdXAsIHplcm8gaW5kaWNhdGVzIGRvd24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjMiPjUuOS4zLjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LXN0YWNrLXVwIiBpZD0icHJvcC1uZXQtc3RhY2stdXAiPlBST1AgNjY6IFBST1BfTkVUX1NUQUNLX1VQPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBFbnVtZXJhdGlvbjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOS4zLnAuMiI+VGhyZWFkIHN0YWNrIG9wZXJhdGlvbmFsIHN0YXR1cy4gTm9uLXplcm8gKHNldCB0byAxKSBpbmRpY2F0ZXMgdXAsIHplcm8gaW5kaWNhdGVzIGRvd24uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS40Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjQiPjUuOS40LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LXJvbGUiIGlkPSJwcm9wLW5ldC1yb2xlIj5QUk9QIDY3OiBQUk9QX05FVF9ST0xFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0OiBFbnVtZXJhdGlvbjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuOS40LnAuMiI+VmFsdWVzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IDxzYW1wPk5FVF9ST0xFX0RFVEFDSEVEPC9zYW1wPjwvbGk+CisgIDxsaT4xOiA8c2FtcD5ORVRfUk9MRV9DSElMRDwvc2FtcD48L2xpPgorICA8bGk+MjogPHNhbXA+TkVUX1JPTEVfUk9VVEVSPC9zYW1wPjwvbGk+CisgIDxsaT4zOiA8c2FtcD5ORVRfUk9MRV9MRUFERVI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS41Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjUiPjUuOS41LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LW5ldHdvcmstbmFtZSIgaWQ9InByb3AtbmV0LW5ldHdvcmstbmFtZSI+UFJPUCA2ODogUFJPUF9ORVRfTkVUV09SS19OQU1FPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5VPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjkuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS42Ij41LjkuNi48L2E+IDxhIGhyZWY9IiNwcm9wLW5ldC14cGFuaWQiIGlkPSJwcm9wLW5ldC14cGFuaWQiPlBST1AgNjk6IFBST1BfTkVUX1hQQU5JRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS45LjciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuNyI+NS45LjcuPC9hPiA8YSBocmVmPSIjcHJvcC1uZXQtbWFzdGVyLWtleSIgaWQ9InByb3AtbmV0LW1hc3Rlci1rZXkiPlBST1AgNzA6IFBST1BfTkVUX01BU1RFUl9LRVk8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS44Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjgiPjUuOS44LjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LWtleS1zZXF1ZW5jZS1jb3VudGVyIiBpZD0icHJvcC1uZXQta2V5LXNlcXVlbmNlLWNvdW50ZXIiPlBST1AgNzE6IFBST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjkuOSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS45Ij41LjkuOS48L2E+IDxhIGhyZWY9IiNwcm9wLW5ldC1wYXJ0aXRpb24taWQiIGlkPSJwcm9wLW5ldC1wYXJ0aXRpb24taWQiPlBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+TDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjkuOS5wLjIiPlRoZSBwYXJ0aXRpb24gSUQgb2YgdGhlIHBhcnRpdGlvbiB0aGF0IHRoaXMgbm9kZSBpcyBhIG1lbWJlciBvZi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS45LjEwIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS45LjEwIj41LjkuMTAuPC9hPiA8YSBocmVmPSIjcHJvcC1uZXQtcmVxdWlyZS1qb2luLWV4aXN0aW5nIiBpZD0icHJvcC1uZXQtcmVxdWlyZS1qb2luLWV4aXN0aW5nIj5QUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuOS4xMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuOS4xMSI+NS45LjExLjwvYT4gPGEgaHJlZj0iI3Byb3AtbmV0LWtleS1zd3RpY2gtZ3VhcmR0aW1lIiBpZD0icHJvcC1uZXQta2V5LXN3dGljaC1ndWFyZHRpbWUiPlBST1AgNzQ6IFBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjkuMTIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjkuMTIiPjUuOS4xMi48L2E+IDxhIGhyZWY9IiNwcm9wLW5ldC1wc2tjIiBpZD0icHJvcC1uZXQtcHNrYyI+UFJPUCA3NTogUFJPUF9ORVRfUFNLQzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4xMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTAiPjUuMTAuPC9hPiA8YSBocmVmPSIjcHJvcC1pcHY2IiBpZD0icHJvcC1pcHY2Ij5JUHY2IFByb3BlcnRpZXM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4xMC4xIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC4xIj41LjEwLjEuPC9hPiA8YSBocmVmPSIjcHJvcC1pcHY2LWxsLWFkZHIiIGlkPSJwcm9wLWlwdjYtbGwtYWRkciI+UFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Njwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi41LjEwLjEucC4yIj5JUHY2IEFkZHJlc3MgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjEwLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjIiPjUuMTAuMi48L2E+IDxhIGhyZWY9IiNwcm9wLWlwdjYtbWwtYWRkciIgaWQ9InByb3AtaXB2Ni1tbC1hZGRyIj5QUk9QIDk3OiBQUk9QX0lQVjZfTUxfQUREUjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD42PC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTAuMi5wLjIiPklQdjYgQWRkcmVzcyArIFByZWZpeCBMZW5ndGggPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjEwLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjEwLjMiPjUuMTAuMy48L2E+IDxhIGhyZWY9IiNwcm9wLWlwdjYtbWwtcHJlZml4IiBpZD0icHJvcC1pcHY2LW1sLXByZWZpeCI+UFJPUCA5ODogUFJPUF9JUFY2X01MX1BSRUZJWDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+NkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xMC4zLnAuMiI+SVB2NiBQcmVmaXggKyBQcmVmaXggTGVuZ3RoIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNS4xMC40Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMC40Ij41LjEwLjQuPC9hPiA8YSBocmVmPSIjcHJvcC1pcHY2LWFkZHJlc3MtdGFibGUiIGlkPSJwcm9wLWlwdjYtYWRkcmVzcy10YWJsZSI+UFJPUCA5OTogUFJPUF9JUFY2X0FERFJFU1NfVEFCTEU8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodCg2Q0xMQykpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTAuNC5wLjIiPkFycmF5IG9mIHN0cnVjdHVyZXMgY29udGFpbmluZzogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD42PC9zYW1wPjogSVB2NiBBZGRyZXNzPC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBOZXR3b3JrIFByZWZpeCBMZW5ndGg8L2xpPgorICA8bGk+PHNhbXA+TDwvc2FtcD46IFZhbGlkIExpZmV0aW1lPC9saT4KKyAgPGxpPjxzYW1wPkw8L3NhbXA+OiBQcmVmZXJyZWQgTGlmZXRpbWU8L2xpPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IEZsYWdzPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMTAuNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTAuNSI+NS4xMC41LjwvYT4gPGEgaHJlZj0iI3Byb3AtMTAxLXByb3BpcHY2aWNtcHBpbmdvZmZsb2FkIiBpZD0icHJvcC0xMDEtcHJvcGlwdjZpY21wcGluZ29mZmxvYWQiPlBST1AgMTAxOiBQUk9QX0lQdjZfSUNNUF9QSU5HX09GRkxPQUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xMC41LnAuMiI+QWxsb3cgdGhlIE5DUCB0byBkaXJlY3RseSByZXNwb25kIHRvIElDTVAgcGluZyByZXF1ZXN0cy4gSWYgdGhpcyBpcyB0dXJuZWQgb24sIHBpbmcgcmVxdWVzdCBJQ01QIHBhY2tldHMgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTAuNS5wLjMiPkRlZmF1bHQgdmFsdWUgaXMgPHNhbXA+ZmFsc2U8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjExIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNS4xMSI+NS4xMS48L2E+IDxhIGhyZWY9IiNwcm9wLWRlYnVnIiBpZD0icHJvcC1kZWJ1ZyI+RGVidWcgUHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi41LjExLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi41LjExLjEiPjUuMTEuMS48L2E+IDxhIGhyZWY9IiNwcm9wLWRlYnVnLXRlc3QtYXNzZXJ0IiBpZD0icHJvcC1kZWJ1Zy10ZXN0LWFzc2VydCI+UFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTEuMS5wLjIiPlJlYWRpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIGNhdXNlIGFuIGFzc2VydCBvbiB0aGUgTkNQLiBUaGlzIGlzIGludGVuZGVkIGZvciB0ZXN0aW5nIHRoZSBhc3NlcnQgZnVuY3Rpb25hbGl0eSBvZiB1bmRlcmx5aW5nIHBsYXRmb3JtL05DUC4gQXNzZXJ0IHNob3VsZCBpZGVhbGx5IGNhdXNlIHRoZSBOQ1AgdG8gcmVzZXQsIGJ1dCBpZiA8c2FtcD5hc3NlcnQ8L3NhbXA+IGlzIG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQgYm9vbGVhbiB2YWx1ZSBvZiA8c2FtcD5mYWxzZTwvc2FtcD4gaXMgcmV0dXJuZWQgaW4gcmVzcG9uc2UuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjUuMTEuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjUuMTEuMiI+NS4xMS4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtZGVidWctbmNwLWxvZy1sZXZlbCIgaWQ9InByb3AtZGVidWctbmNwLWxvZy1sZXZlbCI+UFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjUuMTEuMi5wLjIiPlByb3ZpZGVzIGFjY2VzcyB0byB0aGUgTkNQIGxvZyBsZXZlbC4gQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZSAod2hpY2ggZm9sbG93cyB0aGUgUkZDIDU0MjQpOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjA6IEVtZXJnZW5jeSAoZW1lcmcpLjwvbGk+CisgIDxsaT4xOiBBbGVydCAoYWxlcnQpLjwvbGk+CisgIDxsaT4yOiBDcml0aWNhbCAoY3JpdCkuPC9saT4KKyAgPGxpPjM6IEVycm9yIChlcnIpLjwvbGk+CisgIDxsaT40OiBXYXJuaW5nICh3YXJuKS48L2xpPgorICA8bGk+NTogTm90aWNlIChub3RpY2UpLjwvbGk+CisgIDxsaT42OiBJbmZvcm1hdGlvbiAoaW5mbykuPC9saT4KKyAgPGxpPjc6IERlYnVnIChkZWJ1ZykuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNS4xMS4yLnAuNCI+SWYgdGhlIE5DUCBzdXBwb3J0cyBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sLCBzZXR0aW5nIHRoaXMgcHJvcGVydHkgY2hhbmdlcyB0aGUgbG9nIGxldmVsIGFjY29yZGluZ2x5LiBHZXR0aW5nIHRoZSB2YWx1ZSByZXR1cm5zIHRoZSBjdXJyZW50IGxvZyBsZXZlbC4gIElmIHRoZSBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gd2l0aCA8c2FtcD5TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QPC9zYW1wPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjYiPjYuPC9hPiA8YSBocmVmPSIjc3RhdHVzLWNvZGVzIiBpZD0ic3RhdHVzLWNvZGVzIj5TdGF0dXMgQ29kZXM8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi42LnAuMSI+U3RhdHVzIGNvZGVzIGFyZSBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdCB2aWEgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4gdXNpbmcgdGhlIDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4gY29tbWFuZCB0byBpbmRpY2F0ZSB0aGUgcmV0dXJuIHN0YXR1cyBvZiBhIHByZXZpb3VzIGNvbW1hbmQuIEFzIHdpdGggYW55IHJlc3BvbnNlLCB0aGUgVElEIGZpZWxkIG9mIHRoZSBGTEFHIGJ5dGUgaXMgdXNlZCB0byBjb3JyZWxhdGUgdGhlIHJlc3BvbnNlIHdpdGggdGhlIHJlcXVlc3QuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNi5wLjIiPk5vdGUgdGhhdCBtb3N0IHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBjb21tYW5kcyBkbyBub3QgaW5kaWNhdGUgYSBsYXN0IHN0YXR1cyBvZiA8c2FtcD5TVEFUVVNfT0s8L3NhbXA+LiBUaGUgdXN1YWwgd2F5IHRoZSBOQ1AgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCBjb21tYW5kIGlzIHRvIG1pcnJvciB0aGUgcHJvcGVydHkgY2hhbmdlIGJhY2sgdG8gdGhlIGhvc3QuIEZvciBleGFtcGxlLCBpZiB5b3UgZG8gYSA8c2FtcD5DTURfVkFMVUVfU0VUPC9zYW1wPiBvbiA8c2FtcD5QUk9QX1BIWV9FTkFCTEVEPC9zYW1wPiwgdGhlIE5DUCB3b3VsZCBpbmRpY2F0ZSBzdWNjZXNzIGJ5IHJlc3BvbmRpbmcgd2l0aCBhIDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfUEhZX0VOQUJMRUQ8L3NhbXA+LiBJZiB0aGUgY29tbWFuZCBmYWlsZWQsIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+IHdvdWxkIGJlIGVtaXR0ZWQgaW5zdGVhZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi42LnAuMyI+U2VlIDxhIGhyZWY9IiNwcm9wLWxhc3Qtc3RhdHVzIj5TZWN0aW9uIDUuNS4xPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA8c2FtcD5QUk9QX0xBU1RfU1RBVFVTPC9zYW1wPi4gIDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+MDogPHNhbXA+U1RBVFVTX09LPC9zYW1wPjogT3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LjwvbGk+CisgIDxsaT4xOiA8c2FtcD5TVEFUVVNfRkFJTFVSRTwvc2FtcD46IE9wZXJhdGlvbiBoYXMgZmFpbGVkIGZvciBzb21lIHVuZGVmaW5lZCByZWFzb24uPC9saT4KKyAgPGxpPjI6IDxzYW1wPlNUQVRVU19VTklNUExFTUVOVEVEPC9zYW1wPjogVGhlIGdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuPC9saT4KKyAgPGxpPjM6IDxzYW1wPlNUQVRVU19JTlZBTElEX0FSR1VNRU5UPC9zYW1wPjogQW4gYXJndW1lbnQgdG8gdGhlIGdpdmVuIG9wZXJhdGlvbiBpcyBpbnZhbGlkLjwvbGk+CisgIDxsaT40OiA8c2FtcD5TVEFUVVNfSU5WQUxJRF9TVEFURTwvc2FtcD4gOiBUaGUgZ2l2ZW4gb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkZXZpY2UuPC9saT4KKyAgPGxpPjU6IDxzYW1wPlNUQVRVU19JTlZBTElEX0NPTU1BTkQ8L3NhbXA+OiBUaGUgZ2l2ZW4gY29tbWFuZCBpcyBub3QgcmVjb2duaXplZC48L2xpPgorICA8bGk+NjogPHNhbXA+U1RBVFVTX0lOVkFMSURfSU5URVJGQUNFPC9zYW1wPjogVGhlIGdpdmVuIFNwaW5lbCBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZC48L2xpPgorICA8bGk+NzogPHNhbXA+U1RBVFVTX0lOVEVSTkFMX0VSUk9SPC9zYW1wPjogQW4gaW50ZXJuYWwgcnVudGltZSBlcnJvciBoYXMgb2NjdXJyZWQuPC9saT4KKyAgPGxpPjg6IDxzYW1wPlNUQVRVU19TRUNVUklUWV9FUlJPUjwvc2FtcD46IEEgc2VjdXJpdHkgb3IgYXV0aGVudGljYXRpb24gZXJyb3IgaGFzIG9jY3VycmVkLjwvbGk+CisgIDxsaT45OiA8c2FtcD5TVEFUVVNfUEFSU0VfRVJST1I8L3NhbXA+OiBBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgY29tbWFuZC48L2xpPgorICA8bGk+MTA6IDxzYW1wPlNUQVRVU19JTl9QUk9HUkVTUzwvc2FtcD46IFRoZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgYW5kIHdpbGwgYmUgY29tcGxldGVkIGFzeW5jaHJvbm91c2x5LjwvbGk+CisgIDxsaT4xMTogPHNhbXA+U1RBVFVTX05PTUVNPC9zYW1wPjogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBwcmV2ZW50ZWQgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZS48L2xpPgorICA8bGk+MTI6IDxzYW1wPlNUQVRVU19CVVNZPC9zYW1wPjogVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcGVyYXRpb24uPC9saT4KKyAgPGxpPjEzOiA8c2FtcD5TVEFUVVNfUFJPUF9OT1RfRk9VTkQ8L3NhbXA+OiBUaGUgZ2l2ZW4gcHJvcGVydHkgaXMgbm90IHJlY29nbml6ZWQuPC9saT4KKyAgPGxpPjE0OiA8c2FtcD5TVEFUVVNfUEFDS0VUX0RST1BQRUQ8L3NhbXA+OiBUaGUgcGFja2V0IHdhcyBkcm9wcGVkLjwvbGk+CisgIDxsaT4xNTogPHNhbXA+U1RBVFVTX0VNUFRZPC9zYW1wPjogVGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIGlzIGVtcHR5LjwvbGk+CisgIDxsaT4xNjogPHNhbXA+U1RBVFVTX0NNRF9UT09fQklHPC9zYW1wPjogVGhlIGNvbW1hbmQgd2FzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIGludGVybmFsIGJ1ZmZlci48L2xpPgorICA8bGk+MTc6IDxzYW1wPlNUQVRVU19OT19BQ0s8L3NhbXA+OiBUaGUgcGFja2V0IHdhcyBub3QgYWNrbm93bGVkZ2VkLjwvbGk+CisgIDxsaT4xODogPHNhbXA+U1RBVFVTX0NDQV9GQUlMVVJFPC9zYW1wPjogVGhlIHBhY2tldCB3YXMgbm90IHNlbnQgZHVlIHRvIGEgQ0NBIGZhaWx1cmUuPC9saT4KKyAgPGxpPjE5OiA8c2FtcD5TVEFUVVNfQUxSRUFEWTwvc2FtcD46IFRoZSBvcGVyYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBvciB0aGUgcHJvcGVydHkgd2FzIGFscmVhZHkgc2V0IHRvIHRoZSBnaXZlbiB2YWx1ZS48L2xpPgorICA8bGk+MjA6IDxzYW1wPlNUQVRVU19JVEVNX05PVF9GT1VORDwvc2FtcD46IFRoZSBnaXZlbiBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcHJvcGVydHkuPC9saT4KKyAgPGxpPjIxOiA8c2FtcD5TVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QPC9zYW1wPjogVGhlIGdpdmVuIGNvbW1hbmQgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiB0aGlzIHByb3BlcnR5LjwvbGk+CisgIDxsaT4yMi0xMTE6IFJFU0VSVkVEPC9saT4KKyAgPGxpPjExMi0xMjc6IFJlc2V0IENhdXNlcyA8dWw+PGxpPjExMjogPHNhbXA+U1RBVFVTX1JFU0VUX1BPV0VSX09OPC9zYW1wPjwvbGk+PGxpPjExMzogPHNhbXA+U1RBVFVTX1JFU0VUX0VYVEVSTkFMPC9zYW1wPjwvbGk+PGxpPjExNDogPHNhbXA+U1RBVFVTX1JFU0VUX1NPRlRXQVJFPC9zYW1wPjwvbGk+PGxpPjExNTogPHNhbXA+U1RBVFVTX1JFU0VUX0ZBVUxUPC9zYW1wPjwvbGk+PGxpPjExNjogPHNhbXA+U1RBVFVTX1JFU0VUX0NSQVNIPC9zYW1wPjwvbGk+PGxpPjExNzogPHNhbXA+U1RBVFVTX1JFU0VUX0FTU0VSVDwvc2FtcD48L2xpPjxsaT4xMTg6IDxzYW1wPlNUQVRVU19SRVNFVF9PVEhFUjwvc2FtcD48L2xpPjxsaT4xMTk6IDxzYW1wPlNUQVRVU19SRVNFVF9VTktOT1dOPC9zYW1wPjwvbGk+PGxpPjEyMDogPHNhbXA+U1RBVFVTX1JFU0VUX1dBVENIRE9HPC9zYW1wPjwvbGk+PGxpPjEyMS0xMjc6IFJFU0VSVkVELVJFU0VULUNPREVTPC9saT48L3VsPjwvbGk+CisgIDxsaT4xMjggLSAxNSwzNTk6IFVOQUxMT0NBVEVEPC9saT4KKyAgPGxpPjE1LDM2MCAtIDE2LDM4MzogVmVuZG9yLXNwZWNpZmljPC9saT4KKyAgPGxpPjE2LDM4NCAtIDEsOTk5LDk5OTogVU5BTExPQ0FURUQ8L2xpPgorICA8bGk+MiwwMDAsMDAwIC0gMiwwOTcsMTUxOiBFeHBlcmltZW50YWwgVXNlIE9ubHkgKE1VU1QgTkVWRVIgYmUgdXNlZCBpbiBwcm9kdWN0aW9uISk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjciPjcuPC9hPiA8YSBocmVmPSIjdGVjaC10aHJlYWQiIGlkPSJ0ZWNoLXRocmVhZCI+VGVjaG5vbG9neTogVGhyZWFkKFIpPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy5wLjEiPlRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZW1hbnRpY3MgcmVxdWlyZWQgZm9yIG1hbmFnaW5nIGEgVGhyZWFkKFIpIE5DUC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LnAuMiI+VGhyZWFkKFIpIE5DUHMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5UaGUgcHJvcGVydHkgPHNhbXA+UFJPUF9JTlRFUkZBQ0VfVFlQRTwvc2FtcD4gbXVzdCBiZSAzLjwvbGk+CisgIDxsaT5UaGUgbm9uLW9wdGlvbmFsIHByb3BlcnRpZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBNVVNUIGJlIGltcGxlbWVudGVkOiBDT1JFLCBQSFksIE1BQywgTkVULCBhbmQgSVBWNi48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LnAuNCI+QWxsIHNlcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIGFuIE5DUCBTSE9VTEQgYWxzbyBzdXBwb3J0IHRoZSBuZXR3b3JrIHNhdmUgZmVhdHVyZSAoU2VlIDxhIGhyZWY9IiNmZWF0dXJlLW5ldHdvcmstc2F2ZSI+U2VjdGlvbiA4PC9hPikuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMSI+Ny4xLjwvYT4gPGEgaHJlZj0iI3RocmVhZC1jYXBzIiBpZD0idGhyZWFkLWNhcHMiPkNhcGFiaWxpdGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMS5wLjEiPlRoZSBUaHJlYWQoUikgdGVjaG5vbG9neSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkNBUF9ORVRfVEhSRUFEXzFfMDwvc2FtcD4gLSBJbmRpY2F0ZXMgdGhhdCB0aGUgTkNQIGltcGxlbWVudHMgdjEuMCBvZiB0aGUgVGhyZWFkKFIpIHN0YW5kYXJkLjwvbGk+CisgIDxsaT48c2FtcD5DQVBfTkVUX1RIUkVBRF8xXzE8L3NhbXA+IC0gSW5kaWNhdGVzIHRoYXQgdGhlIE5DUCBpbXBsZW1lbnRzIHYxLjEgb2YgdGhlIFRocmVhZChSKSBzdGFuZGFyZC48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yIj43LjIuPC9hPiA8YSBocmVmPSIjdGhyZWFkLXByb3BlcnRpZXMiIGlkPSJ0aHJlYWQtcHJvcGVydGllcyI+UHJvcGVydGllczwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi5wLjEiPlByb3BlcnRpZXMgZm9yIFRocmVhZChSKSBhcmUgYWxsb2NhdGVkIG91dCBvZiB0aGUgPHNhbXA+VGVjaDwvc2FtcD4gcHJvcGVydHkgc2VjdGlvbiAoc2VlIDxhIGhyZWY9IiNwcm9wZXJ0eS1zZWN0aW9ucyI+U2VjdGlvbiA1LjQ8L2E+KS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMSI+Ny4yLjEuPC9hPiA8YSBocmVmPSIjcHJvcC04MC1wcm9wdGhyZWFkbGVhZGVyYWRkciIgaWQ9InByb3AtODAtcHJvcHRocmVhZGxlYWRlcmFkZHIiPlBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPjY8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjEucC4yIj5UaGUgSVB2NiBhZGRyZXNzIG9mIHRoZSBsZWFkZXIuIChOb3RlOiBNYXkgY2hhbmdlIHRvIGxvbmcgYW5kIHNob3J0IGFkZHJlc3Mgb2YgbGVhZGVyKSA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIiPjcuMi4yLjwvYT4gPGEgaHJlZj0iI3Byb3AtODEtcHJvcHRocmVhZHBhcmVudCIgaWQ9InByb3AtODEtcHJvcHRocmVhZHBhcmVudCI+UFJPUCA4MTogUFJPUF9USFJFQURfUEFSRU5UPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkVTPC9zYW1wPjwvbGk+CisgIDxsaT5MQUREUiwgU0FERFI8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMi5wLjIiPlRoZSBsb25nIGFkZHJlc3MgYW5kIHNob3J0IGFkZHJlc3Mgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjMiPjcuMi4zLjwvYT4gPGEgaHJlZj0iI3Byb3AtODItcHJvcHRocmVhZGNoaWxkdGFibGUiIGlkPSJwcm9wLTgyLXByb3B0aHJlYWRjaGlsZHRhYmxlIj5QUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKHQoRVMpKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMy5wLjIiPlRhYmxlIGNvbnRhaW5pbmcgdGhlIGxvbmcgYW5kIHNob3J0IGFkZHJlc3NlcyBvZiBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNCI+Ny4yLjQuPC9hPiA8YSBocmVmPSIjcHJvcC04My1wcm9wdGhyZWFkbGVhZGVycmlkIiBpZD0icHJvcC04My1wcm9wdGhyZWFkbGVhZGVycmlkIj5QUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjQucC4yIj5UaGUgcm91dGVyLWlkIG9mIHRoZSBjdXJyZW50IGxlYWRlci4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuNSI+Ny4yLjUuPC9hPiA8YSBocmVmPSIjcHJvcC04NC1wcm9wdGhyZWFkbGVhZGVyd2VpZ2h0IiBpZD0icHJvcC04NC1wcm9wdGhyZWFkbGVhZGVyd2VpZ2h0Ij5QUk9QIDg0OiBQUk9QX1RIUkVBRF9MRUFERVJfV0VJR0hUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjUucC4yIj5UaGUgbGVhZGVyIHdlaWdodCBvZiB0aGUgY3VycmVudCBsZWFkZXIuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi42Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjYiPjcuMi42LjwvYT4gPGEgaHJlZj0iI3Byb3AtODUtcHJvcHRocmVhZGxvY2FsbGVhZGVyd2VpZ2h0IiBpZD0icHJvcC04NS1wcm9wdGhyZWFkbG9jYWxsZWFkZXJ3ZWlnaHQiPlBST1AgODU6IFBST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjYucC4yIj5UaGUgbGVhZGVyIHdlaWdodCBmb3IgdGhpcyBub2RlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi43Ij43LjIuNy48L2E+IDxhIGhyZWY9IiNwcm9wLTg2LXByb3B0aHJlYWRuZXR3b3JrZGF0YSIgaWQ9InByb3AtODYtcHJvcHRocmVhZG5ldHdvcmtkYXRhIj5QUk9QIDg2OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEE8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+RDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuNy5wLjIiPlRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi44Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjgiPjcuMi44LjwvYT4gPGEgaHJlZj0iI3Byb3AtODctcHJvcHRocmVhZG5ldHdvcmtkYXRhdmVyc2lvbiIgaWQ9InByb3AtODctcHJvcHRocmVhZG5ldHdvcmtkYXRhdmVyc2lvbiI+UFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT048L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Pbmx5PC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuOSI+Ny4yLjkuPC9hPiA8YSBocmVmPSIjcHJvcC04OC1wcm9wdGhyZWFkc3RhYmxlbmV0d29ya2RhdGEiIGlkPSJwcm9wLTg4LXByb3B0aHJlYWRzdGFibGVuZXR3b3JrZGF0YSI+UFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5EPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi45LnAuMiI+VGhlIGxvY2FsIHN0YWJsZSBuZXR3b3JrIGRhdGEuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMCI+Ny4yLjEwLjwvYT4gPGEgaHJlZj0iI3Byb3AtODktcHJvcHRocmVhZHN0YWJsZW5ldHdvcmtkYXRhdmVyc2lvbiIgaWQ9InByb3AtODktcHJvcHRocmVhZHN0YWJsZW5ldHdvcmtkYXRhdmVyc2lvbiI+UFJPUCA4OTogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPlM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMSI+Ny4yLjExLjwvYT4gPGEgaHJlZj0iI3Byb3AtOTAtcHJvcHRocmVhZG9ubWVzaG5ldHMiIGlkPSJwcm9wLTkwLXByb3B0aHJlYWRvbm1lc2huZXRzIj5QUk9QIDkwOiBQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodCg2Q2JDYikpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMS5wLjIiPkRhdGEgcGVyIGl0ZW0gaXM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Njwvc2FtcD46IElQdjYgUHJlZml4PC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBQcmVmaXggbGVuZ3RoIGluIGJpdHM8L2xpPgorICA8bGk+PHNhbXA+Yjwvc2FtcD46IFN0YWJsZSBmbGFnPC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBUTFYgZmxhZ3M8L2xpPgorICA8bGk+PHNhbXA+Yjwvc2FtcD46ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuIFNldCBpZiB0aGlzIG5ldHdvcmsgd2FzIGxvY2FsbHkgZGVmaW5lZC4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYgdGhlIG9uIG1lc2ggbmV0d29yayB3YXMgZGVmaW5lZCBieSBhbm90aGVyIG5vZGUuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMiI+Ny4yLjEyLjwvYT4gPGEgaHJlZj0iI3Byb3AtOTEtcHJvcHRocmVhZG9mZm1lc2hyb3V0ZXMiIGlkPSJwcm9wLTkxLXByb3B0aHJlYWRvZmZtZXNocm91dGVzIj5QUk9QIDkxOiBQUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVM8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodCg2Q2JDYmIpKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMTIucC4yIj5EYXRhIHBlciBpdGVtIGlzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPjY8L3NhbXA+OiBSb3V0ZSBQcmVmaXg8L2xpPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IFByZWZpeCBsZW5ndGggaW4gYml0czwvbGk+CisgIDxsaT48c2FtcD5iPC9zYW1wPjogU3RhYmxlIGZsYWc8L2xpPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IFJvdXRlIHByZWZlcmVuY2UgZmxhZ3M8L2xpPgorICA8bGk+PHNhbXA+Yjwvc2FtcD46ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuIFNldCBpZiB0aGlzIHJvdXRlIGluZm8gd2FzIGxvY2FsbHkgZGVmaW5lZCBhcyBwYXJ0IG9mIGxvY2FsIG5ldHdvcmsgZGF0YS4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYgdGhlIHJvdXRlIGlzIHBhcnQgb2YgcGFydGl0aW9uJ3MgbmV0d29yayBkYXRhLjwvbGk+CisgIDxsaT48c2FtcD5iPC9zYW1wPjogIk5leHQgaG9wIGlzIHRoaXMgZGV2aWNlIiBmbGFnLiBTZXQgaWYgdGhlIG5leHQgaG9wIGZvciB0aGUgcm91dGUgaXMgdGhpcyBkZXZpY2UgaXRzZWxmIChpLmUuLCByb3V0ZSB3YXMgYWRkZWQgYnkgdGhpcyBkZXZpY2UpIFRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIGFkZGluZyBhbiBleHRlcm5hbCByb3V0ZS4gRm9yIGFueSBhZGRlZCByb3V0ZSB0aGUgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xMyI+Ny4yLjEzLjwvYT4gPGEgaHJlZj0iI3Byb3AtOTItcHJvcHRocmVhZGFzc2lzdGluZ3BvcnRzIiBpZD0icHJvcC05Mi1wcm9wdGhyZWFkYXNzaXN0aW5ncG9ydHMiPlBST1AgOTI6IFBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+QShTKTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjE0Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjE0Ij43LjIuMTQuPC9hPiA8YSBocmVmPSIjcHJvcC05My1wcm9wdGhyZWFkYWxsb3dsb2NhbG5ldGRhdGFjaGFuZ2UiIGlkPSJwcm9wLTkzLXByb3B0aHJlYWRhbGxvd2xvY2FsbmV0ZGF0YWNoYW5nZSI+UFJPUCA5MzogUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4xNC5wLjIiPlNldCB0byB0cnVlIGJlZm9yZSBjaGFuZ2luZyBsb2NhbCBuZXQgZGF0YS4gU2V0IHRvIGZhbHNlIHdoZW4gZmluaXNoZWQuICBUaGlzIGFsbG93cyBjaGFuZ2VzIHRvIGJlIGFnZ3JlZ2F0ZWQgaW50byBzaW5nbGUgZXZlbnRzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMTUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTUiPjcuMi4xNS48L2E+IDxhIGhyZWY9IiNwcm9wLTk0LXByb3B0aHJlYWRtb2RlIiBpZD0icHJvcC05NC1wcm9wdGhyZWFkbW9kZSI+UFJPUCA5NDogUFJPUF9USFJFQURfTU9ERTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Qzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMTUucC4yIj5UaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZSBUTFYgZm9yIHRoaXMgbm9kZS4gVGhlIG1lYW5pbmcgb2YgdGhlIGJpdHMgaW4gdGhpcyBiaXRmaWVsZCBhcmUgZGVmaW5lZCBieSBzZWN0aW9uIDQuNS4yIG9mIHRoZSBUaHJlYWQoUikgc3BlY2lmaWNhdGlvbi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjE2Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjE2Ij43LjIuMTYuPC9hPiA8YSBocmVmPSIjcHJvcC01Mzc2LXByb3B0aHJlYWRjaGlsZHRpbWVvdXQiIGlkPSJwcm9wLTUzNzYtcHJvcHRocmVhZGNoaWxkdGltZW91dCI+UFJPUCA1Mzc2OiBQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4xNi5wLjIiPlVzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4xNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4xNyI+Ny4yLjE3LjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM3Ny1wcm9wdGhyZWFkcmxvYzE2IiBpZD0icHJvcC01Mzc3LXByb3B0aHJlYWRybG9jMTYiPlBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2PC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5TPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMTgiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTgiPjcuMi4xOC48L2E+IDxhIGhyZWY9IiNwcm9wLTUzNzgtcHJvcHRocmVhZHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQiIGlkPSJwcm9wLTUzNzgtcHJvcHRocmVhZHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQiPlBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMTkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMTkiPjcuMi4xOS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzNzktcHJvcHRocmVhZGNvbnRleHRyZXVzZWRlbGF5IiBpZD0icHJvcC01Mzc5LXByb3B0aHJlYWRjb250ZXh0cmV1c2VkZWxheSI+UFJPUCA1Mzc5OiBQUk9QX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjAiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjAiPjcuMi4yMC48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODAtcHJvcHRocmVhZG5ldHdvcmtpZHRpbWVvdXQiIGlkPSJwcm9wLTUzODAtcHJvcHRocmVhZG5ldHdvcmtpZHRpbWVvdXQiPlBST1AgNTM4MDogUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VUPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4yMC5wLjIiPkFsbG93cyB5b3UgdG8gZ2V0IG9yIHNldCB0aGUgVGhyZWFkKFIpIDxzYW1wPk5FVFdPUktfSURfVElNRU9VVDwvc2FtcD4gY29uc3RhbnQsIGFzIGRlZmluZWQgYnkgdGhlIFRocmVhZChSKSBzcGVjaWZpY2F0aW9uLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjEiPjcuMi4yMS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODEtcHJvcHRocmVhZGFjdGl2ZXJvdXRlcmlkcyIgaWQ9InByb3AtNTM4MS1wcm9wdGhyZWFkYWN0aXZlcm91dGVyaWRzIj5QUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGUvV3JpdGUtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEoQyk8L3NhbXA+IChMaXN0IG9mIGFjdGl2ZSB0aHJlYWQgcm91dGVyIGlkcyk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjEucC4yIj5Ob3RlIHRoYXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0IDxzYW1wPkNNRF9HRVRfVkFMVUU8L3NhbXA+IHJvdXRlciBpZHMsIGJ1dCBtYXkgc3VwcG9ydCA8c2FtcD5DTURfUkVNT1ZFX1ZBTFVFPC9zYW1wPiB3aGVuIHRoZSBub2RlIGlzIGEgbGVhZGVyLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjIiPjcuMi4yMi48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODItcHJvcHRocmVhZHJsb2MxNmRlYnVncGFzc3RocnUiIGlkPSJwcm9wLTUzODItcHJvcHRocmVhZHJsb2MxNmRlYnVncGFzc3RocnUiPlBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4yMi5wLjIiPkFsbG93IHRoZSBIT1NUIHRvIGRpcmVjdGx5IG9ic2VydmUgYWxsIElQdjYgcGFja2V0cyByZWNlaXZlZCBieSB0aGUgTkNQLCBpbmNsdWRpbmcgb25lcyBzZW50IHRvIHRoZSBSTE9DMTYgYWRkcmVzcy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjIucC4zIj5EZWZhdWx0IHZhbHVlIGlzIDxzYW1wPmZhbHNlPC9zYW1wPi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjIzIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjIzIj43LjIuMjMuPC9hPiA8YSBocmVmPSIjcHJvcC01MzgzLXByb3B0aHJlYWRyb3V0ZXJyb2xlZW5hYmxlZCIgaWQ9InByb3AtNTM4My1wcm9wdGhyZWFkcm91dGVycm9sZWVuYWJsZWQiPlBST1AgNTM4MzogUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjMucC4yIj5BbGxvdyB0aGUgSE9TVCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUgcm91dGVyIHJvbGUgaXMgZW5hYmxlZC4gIElmIGN1cnJlbnQgcm9sZSBpcyBhIHJvdXRlciwgc2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIDxzYW1wPmZhbHNlPC9zYW1wPiBzdGFydHMgYSByZS1hdHRhY2ggcHJvY2VzcyBhcyBhbiBlbmQtZGV2aWNlLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjQiPjcuMi4yNC48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODQtcHJvcHRocmVhZHJvdXRlcmRvd25ncmFkZXRocmVzaG9sZCIgaWQ9InByb3AtNTM4NC1wcm9wdGhyZWFkcm91dGVyZG93bmdyYWRldGhyZXNob2xkIj5QUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjUiPjcuMi4yNS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODUtcHJvcHRocmVhZHJvdXRlcnNlbGVjdGlvbmppdHRlciIgaWQ9InByb3AtNTM4NS1wcm9wdGhyZWFkcm91dGVyc2VsZWN0aW9uaml0dGVyIj5QUk9QIDUzODU6IFBST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5DPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4yNS5wLjIiPlNwZWNpZmllcyB0aGUgc2VsZiBpbXBvc2VkIHJhbmRvbSBkZWxheSBpbiBzZWNvbmRzIGEgUkVFRCB3YWl0cyBiZWZvcmUgcmVnaXN0ZXJpbmcgdG8gYmVjb21lIGFuIEFjdGl2ZSBSb3V0ZXIuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4yNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNiI+Ny4yLjI2LjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM4Ni1wcm9wdGhyZWFkcHJlZmVycmVkcm91dGVyaWQiIGlkPSJwcm9wLTUzODYtcHJvcHRocmVhZHByZWZlcnJlZHJvdXRlcmlkIj5QUk9QIDUzODY6IFBST1BfVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGUtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkM8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjI2LnAuMiI+U3BlY2lmaWVzIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkLiBVcG9uIGJlY29taW5nIGEgcm91dGVyL2xlYWRlciB0aGUgbm9kZSBhdHRlbXB0cyB0byB1c2UgdGhpcyBSb3V0ZXIgSWQuIElmIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IgaWYgaXQgY2FuIG5vdCBiZSB1c2VkLCBhIHJhbmRvbWx5IGdlbmVyYXRlZCByb3V0ZXIgaWQgaXMgcGlja2VkLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgb25seSB3aGVuIHRoZSBkZXZpY2Ugcm9sZSBpcyBlaXRoZXIgZGV0YWNoZWQgb3IgZGlzYWJsZWQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4yNyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4yNyI+Ny4yLjI3LjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM4Ny1wcm9wdGhyZWFkbmVpZ2hib3J0YWJsZSIgaWQ9InByb3AtNTM4Ny1wcm9wdGhyZWFkbmVpZ2hib3J0YWJsZSI+UFJPUCA1Mzg3OiBQUk9QX1RIUkVBRF9ORUlHSEJPUl9UQUJMRTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5BKHQoRVNMQ2NDYkxMKSk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjI3LnAuMiI+RGF0YSBwZXIgaXRlbSBpczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5FPC9zYW1wPjogRXh0ZW5kZWQvbG9uZyBhZGRyZXNzPC9saT4KKyAgPGxpPjxzYW1wPlM8L3NhbXA+OiBSTE9DMTY8L2xpPgorICA8bGk+PHNhbXA+TDwvc2FtcD46IEFnZTwvbGk+CisgIDxsaT48c2FtcD5DPC9zYW1wPjogTGluayBRdWFsaXR5IEluPC9saT4KKyAgPGxpPjxzYW1wPmM8L3NhbXA+OiBBdmVyYWdlIFJTUzwvbGk+CisgIDxsaT48c2FtcD5DPC9zYW1wPjogTW9kZSAoYml0LWZsYWdzKTwvbGk+CisgIDxsaT48c2FtcD5iPC9zYW1wPjogPHNhbXA+dHJ1ZTwvc2FtcD4gaWYgbmVpZ2hib3IgaXMgYSBjaGlsZCwgPHNhbXA+ZmFsc2U8L3NhbXA+IG90aGVyd2lzZS48L2xpPgorICA8bGk+PHNhbXA+TDwvc2FtcD46IExpbmsgRnJhbWUgQ291bnRlcjwvbGk+CisgIDxsaT48c2FtcD5MPC9zYW1wPjogTUxFIEZyYW1lIENvdW50ZXI8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjI4Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjI4Ij43LjIuMjguPC9hPiA8YSBocmVmPSIjcHJvcC01Mzg4LXByb3B0aHJlYWRjaGlsZGNvdW50bWF4IiBpZD0icHJvcC01Mzg4LXByb3B0aHJlYWRjaGlsZGNvdW50bWF4Ij5QUk9QIDUzODg6IFBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Qzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMjgucC4yIj5TcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaWxkcmVuIGN1cnJlbnRseSBhbGxvd2VkLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IHdoZW4gVGhyZWFkKFIpIHByb3RvY29sIG9wZXJhdGlvbiBoYXMgYmVlbiBzdG9wcGVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMjkiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMjkiPjcuMi4yOS48L2E+IDxhIGhyZWY9IiNwcm9wLTUzODktcHJvcHRocmVhZGxlYWRlcm5ldHdvcmtkYXRhIiBpZD0icHJvcC01Mzg5LXByb3B0aHJlYWRsZWFkZXJuZXR3b3JrZGF0YSI+UFJPUCA1Mzg5OiBQUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjI5LnAuMiI+VGhlIGxlYWRlciBuZXR3b3JrIGRhdGEuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4zMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zMCI+Ny4yLjMwLjwvYT4gPGEgaHJlZj0iI3Byb3AtNTM5MC1wcm9wdGhyZWFkc3RhYmxlbGVhZGVybmV0d29ya2RhdGEiIGlkPSJwcm9wLTUzOTAtcHJvcHRocmVhZHN0YWJsZWxlYWRlcm5ldHdvcmtkYXRhIj5QUk9QIDUzOTA6IFBST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjMwLnAuMiI+VGhlIHN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzEiPjcuMi4zMS48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1qb2luZXJzIiBpZD0icHJvcC10aHJlYWQtam9pbmVycyI+UFJPUCA1MzkxOiBQUk9QX1RIUkVBRF9KT0lORVJTPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IEluc2VydC9SZW1vdmUgT25seSAob3B0aW9uYWxseSBSZWFkLVdyaXRlKTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkEodChVTEUpKTwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX1RIUkVBRF9DT01NSVNTSU9ORVI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjMxLnAuMiI+RGF0YSBwZXIgaXRlbSBpczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5VPC9zYW1wPjogUFNLZDwvbGk+CisgIDxsaT48c2FtcD5MPC9zYW1wPjogVGltZW91dCBpbiBzZWNvbmRzPC9saT4KKyAgPGxpPjxzYW1wPkU8L3NhbXA+OiBFeHRlbmRlZC9sb25nIGFkZHJlc3MgKG9wdGlvbmFsKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4zMS5wLjQiPlBhc3Nlc3MgUHJlLVNoYXJlZCBLZXkgZm9yIHRoZSBEZXZpY2UgdG8gdGhlIE5DUCBpbiB0aGUgY29tbWlzc2lvbmluZyBwcm9jZXNzLiAgV2hlbiB0aGUgRXh0ZW5kZWQgYWRkcmVzcyBpcyBvbW1pdGVkIGFsbCBEZXZpY2VzIHdoaWNoIHByb3ZpZGVkIGEgdmFsaWQgUFNLZCBhcmUgYWxsb3dlZCB0byBqb2luIHRoZSBUaHJlYWQoUikgTmV0d29yay4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjMyIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjMyIj43LjIuMzIuPC9hPiA8YSBocmVmPSIjcHJvcC10aHJlYWQtY29tbWlzc2lvbmVyLWVuYWJsZWQiIGlkPSJwcm9wLXRocmVhZC1jb21taXNzaW9uZXItZW5hYmxlZCI+UFJPUCA1MzkyOiBQUk9QX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBXcml0ZSBvbmx5IChvcHRpb25hbGx5IFJlYWQtV3JpdGUpPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yjwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX1RIUkVBRF9DT01NSVNTSU9ORVI8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjMyLnAuMiI+U2V0IHRvIHRydWUgdG8gZW5hYmxlIHRoZSBuYXRpdmUgY29tbWlzc2lvbmVyLiBJdCBpcyBtYW5kYXRvcnkgYmVmb3JlIGFkZGluZyB0aGUgam9pbmVyIHRvIHRoZSBuZXR3b3JrLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzMiPjcuMi4zMy48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC10bWYtcHJveHktZW5hYmxlZCIgaWQ9InByb3AtdGhyZWFkLXRtZi1wcm94eS1lbmFibGVkIj5QUk9QIDUzOTM6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+CisgIDxsaT5SZXF1aXJlZCBjYXBhYmlsaXR5OiA8c2FtcD5DQVBfVEhSRUFEX1RNRl9QUk9YWTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzMucC4yIj5TZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIFRNRiBwcm94eS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uNy4yLjM0Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uNy4yLjM0Ij43LjIuMzQuPC9hPiA8YSBocmVmPSIjcHJvcC10aHJlYWQtdG1mLXByb3h5LXN0cmVhbSIgaWQ9InByb3AtdGhyZWFkLXRtZi1wcm94eS1zdHJlYW0iPlBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlLVN0cmVhbTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmRTUzwvc2FtcD48L2xpPgorICA8bGk+UmVxdWlyZWQgY2FwYWJpbGl0eTogPHNhbXA+Q0FQX1RIUkVBRF9UTUZfUFJPWFk8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uNy4yLjM0LnAuMiI+RGF0YSBwZXIgaXRlbSBpczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5kPC9zYW1wPjogQ29BUCBmcmFtZTwvbGk+CisgIDxsaT48c2FtcD5TPC9zYW1wPjogc291cmNlL2Rlc3RpbmF0aW9uIFJMT0MvQUxPQzwvbGk+CisgIDxsaT48c2FtcD5TPC9zYW1wPjogc291cmNlL2Rlc3RpbmF0aW9uIHBvcnQ8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZWN0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPm48L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjI8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+TGVuZ3RoPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5Db0FQPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5sb2NhdG9yPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5wb3J0PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzQucC40Ij5UaGlzIHByb3BlcnR5IGFsbG93cyB0aGUgaG9zdCB0byBzZW5kIGFuZCByZWNlaXZlIFRNRiBtZXNzYWdlcyBmcm9tIHRoZSBOQ1AncyBSTE9DIGFkZHJlc3MgYW5kIHN1cHBvcnQgVGhyZWFkLXNwZWNpZmljIGJvcmRlciByb3V0ZXIgZnVuY3Rpb25zLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzUiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzUiPjcuMi4zNS48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1qb2luZXItZmxhZyIgaWQ9InByb3AtdGhyZWFkLWRpc2NvdmVyeS1zY2FuLWpvaW5lci1mbGFnIj5QUk9QIDUzOTU6IFBST1BfVEhSRUFEX0RJU09WRVJZX1NDQU5fSk9JTkVSX0ZMQUc8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6OiA8c2FtcD5iPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjcuMi4zNS5wLjIiPlRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSB2YWx1ZSB1c2VkIGluIFRocmVhZChSKSBNTEUgRGlzY292ZXJ5IFJlcXVlc3QgVExWIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgPHNhbXA+ZmFsc2U8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzYiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzYiPjcuMi4zNi48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1lbmFibGUtZmlsdGVyaW5nIiBpZD0icHJvcC10aHJlYWQtZGlzY292ZXJ5LXNjYW4tZW5hYmxlLWZpbHRlcmluZyI+UFJPUCA1Mzk2OiBQUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOjogPHNhbXA+Yjwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzYucC4yIj5UaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgRVVJNjQgZmlsdGVyaW5nIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgPHNhbXA+ZmFsc2U8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi43LjIuMzciPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi43LjIuMzciPjcuMi4zNy48L2E+IDxhIGhyZWY9IiNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1wYW5pZCIgaWQ9InByb3AtdGhyZWFkLWRpc2NvdmVyeS1zY2FuLXBhbmlkIj5QUk9QIDUzOTc6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtd3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOjogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzcucC4yIj5UaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgUEFOSUQgdXNlZCBmb3IgZmlsdGVyaW5nIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgPHNhbXA+MHhmZmZmPC9zYW1wPiAoYnJvYWRjYXN0IFBBTklEKSB3aGljaCBkaXNhYmxlcyBQQU5JRCBmaWx0ZXJpbmcuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjcuMi4zOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjcuMi4zOCI+Ny4yLjM4LjwvYT4gPGEgaHJlZj0iI3Byb3AtdGhyZWFkLXN0ZWVyaW5nLWRhdGEiIGlkPSJwcm9wLXRocmVhZC1zdGVlcmluZy1kYXRhIj5QUk9QIDUzOTg6IFBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEE8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGUtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkU8L3NhbXA+PC9saT4KKyAgPGxpPlJlcXVpcmVkIGNhcGFiaWxpdHk6IDxzYW1wPkNBUF9PT0JfU1RFRVJJTkdfREFUQTwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi43LjIuMzgucC4yIj5UaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc3RlZXJpbmcgZGF0YSBmb3IgTUxFIERpc2NvdmVyeSBSZXNwb25zZSBtZXNzYWdlcy4gIDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+QWxsIHplcm9zIHRvIGNsZWFyIHRoZSBzdGVlcmluZyBkYXRhIChpbmRpY2F0aW5nIG5vIHN0ZWVyaW5nIGRhdGEpLjwvbGk+CisgIDxsaT5BbGwgMHhGRnMgdG8gc2V0IHRoZSBzdGVlcmluZyBkYXRhIChibG9vbSBmaWx0ZXIpIHRvIGFjY2VwdC9hbGxvdyBhbGwuPC9saT4KKyAgPGxpPkEgc3BlY2lmaWMgRVVJNjQgd2hpY2ggaXMgdGhlbiBhZGRlZCB0byBzdGVlcmluZyBkYXRhL2Jsb29tIGZpbHRlci48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjgiPjguPC9hPiA8YSBocmVmPSIjZmVhdHVyZS1uZXR3b3JrLXNhdmUiIGlkPSJmZWF0dXJlLW5ldHdvcmstc2F2ZSI+RmVhdHVyZTogTmV0d29yayBTYXZlPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uOC5wLjEiPlRoZSBuZXR3b3JrIHNhdmUvcmVjYWxsIGZlYXR1cmUgaXMgYW4gb3B0aW9uYWwgTkNQIGNhcGFiaWxpdHkgdGhhdCwgd2hlbiBwcmVzZW50LCBhbGxvd3MgdGhlIGhvc3QgdG8gc2F2ZSBhbmQgcmVjYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMgYW5kIHN0YXRlIHRvIGFuZCBmcm9tIG5vbnZvbGF0aWxlIHN0b3JhZ2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uOC5wLjIiPlRoZSBwcmVzZW5jZSBvZiB0aGUgc2F2ZS9yZWNhbGwgZmVhdHVyZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgPHNhbXA+Q0FQX05FVF9TQVZFPC9zYW1wPiBjYXBhYmlsaXR5IGluIDxzYW1wPlBST1BfQ0FQUzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uOC5wLjMiPk5ldHdvcmsgY2xlYXIgZmVhdHVyZSBhbGxvd3MgaG9zdCB0byBlcmFzZSBhbGwgbmV0d29yayBjcmVkZW50aWFscyBhbmQgc3RhdGUgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi44LjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEiPjguMS48L2E+IDxhIGhyZWY9IiNjb21tYW5kcy0xIiBpZD0iY29tbWFuZHMtMSI+Q29tbWFuZHM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOC4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMSI+OC4xLjEuPC9hPiA8YSBocmVmPSIjY21kLTktaG9zdG5jcC1jbWRuZXRzYXZlIiBpZD0iY21kLTktaG9zdG5jcC1jbWRuZXRzYXZlIj5DTUQgOTogKEhvc3QtJmd0O05DUCkgQ01EX05FVF9TQVZFPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfTkVUX1NBVkU8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4xLnAuMSI+U2F2ZSBuZXR3b3JrIHN0YXRlIGNvbW1hbmQuIFNhdmVzIGFueSBjdXJyZW50IG5ldHdvcmsgY3JlZGVudGlhbHMgYW5kIHN0YXRlIG5lY2Vzc2FyeSB0byByZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnQgbmV0d29yayB0byBub24tdm9sYXRpbGUgbWVtb3J5LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4xLnAuMiI+VGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuIFRoZSBjdXJyZW50IG5ldHdvcmsgaW5mb3JtYXRpb24gc3RvcmVkIGluIHZvbGF0aWxlIG1lbW9yeSBpcyB1bmFmZmVjdGVkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4xLnAuMyI+VGhlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+LCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMS5wLjQiPlRoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+Q0FQX05FVF9TQVZFPC9zYW1wPiBjYXBhYmlsaXR5IGlzIHNldC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOC4xLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi44LjEuMiI+OC4xLjIuPC9hPiA8YSBocmVmPSIjY21kLTEwLWhvc3RuY3AtY21kbmV0Y2xlYXIiIGlkPSJjbWQtMTAtaG9zdG5jcC1jbWRuZXRjbGVhciI+Q01EIDEwOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX0NMRUFSPC9hPjwvaDE+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+SEVBREVSPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5DTURfTkVUX0NMRUFSPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMi5wLjEiPkNsZWFyIHNhdmVkIG5ldHdvcmsgc2V0dGluZ3MgY29tbWFuZC4gRXJhc2VzIGFsbCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuIFRoZSBlcmFzZWQgc2V0dGluZ3MgaW5jbHVkZSBhbnkgZGF0YSBzYXZlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZpcm13YXJlIGFuZC9vciBkYXRhIHNhdmVkIGJ5IDxzYW1wPkNNRF9ORVRfU0FWRTwvc2FtcD4gb3BlcmF0aW9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4yLnAuMiI+VGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuIFRoZSBjdXJyZW50IG5ldHdvcmsgaW5mb3JtYXRpb24gc3RvcmVkIGluIHZvbGF0aWxlIG1lbW9yeSBpcyB1bmFmZmVjdGVkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4yLnAuMyI+VGhlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4gZm9yIDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+LCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMi5wLjQiPlRoaXMgY29tbWFuZCBpcyBhbHdheXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZSBvZiA8c2FtcD5DQVBfTkVUX1NBVkU8L3NhbXA+IGNhcGFiaWxpdHkuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjguMS4zIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uOC4xLjMiPjguMS4zLjwvYT4gPGEgaHJlZj0iI2NtZC0xMS1ob3N0bmNwLWNtZG5ldHJlY2FsbCIgaWQ9ImNtZC0xMS1ob3N0bmNwLWNtZG5ldHJlY2FsbCI+Q01EIDExOiAoSG9zdC0mZ3Q7TkNQKSBDTURfTkVUX1JFQ0FMTDwvYT48L2gxPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldHM6PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj4xPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkZpZWxkczo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPkhFQURFUjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Q01EX05FVF9SRUNBTEw8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4zLnAuMSI+UmVjYWxsIHNhdmVkIG5ldHdvcmsgc3RhdGUgY29tbWFuZC4gUmVjYWxscyBhbnkgcHJldmlvdXNseSBzYXZlZCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBwcmV2aW91c2x5IHN0b3JlZCBieSA8c2FtcD5DTURfTkVUX1NBVkU8L3NhbXA+IGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi44LjEuMy5wLjIiPlRoaXMgY29tbWFuZCB3aWxsIHR5cGljYWxseSBnZW5lcmF0ZWQgc2V2ZXJhbCB1bnNvbGljaXRlZCBwcm9wZXJ0eSB1cGRhdGVzIGFzIHRoZSBuZXR3b3JrIHN0YXRlIGlzIGxvYWRlZC4gQXQgdGhlIGNvbmNsdXNpb24gb2YgbG9hZGluZywgdGhlIGF1dGhvcml0YXRpdmUgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kIGlzIGFsd2F5cyBhIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lTPC9zYW1wPiBmb3IgPHNhbXA+UFJPUF9MQVNUX1NUQVRVUzwvc2FtcD4sIGluZGljYXRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjguMS4zLnAuMyI+VGhpcyBjb21tYW5kIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8c2FtcD5DQVBfTkVUX1NBVkU8L3NhbXA+IGNhcGFiaWxpdHkgaXMgc2V0LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uOSI+OS48L2E+IDxhIGhyZWY9IiNmZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQiIGlkPSJmZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQiPkZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQ8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LnAuMSI+VGhlIG1lbW9yeSBvbiBhbiBOQ1AgbWF5IGJlIG11Y2ggbW9yZSBsaW1pdGVkIHRoYW4gdGhlIG1lbW9yeSBvbiB0aGUgaG9zdCBwcm9jZXNzb3IuIEluIHN1Y2ggc2l0dWF0aW9ucywgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCBmb3IgdGhlIE5DUCB0byBvZmZsb2FkIGJ1ZmZlcnMgdG8gdGhlIGhvc3QgcHJvY2Vzc29yIHRlbXBvcmFyaWx5IHNvIHRoYXQgaXQgY2FuIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LnAuMiI+SG9zdCBidWZmZXIgb2ZmbG9hZCBpcyBhbiBvcHRpb25hbCBOQ1AgY2FwYWJpbGl0eSB0aGF0LCB3aGVuIHByZXNlbnQsIGFsbG93cyB0aGUgTkNQIHRvIHN0b3JlIGRhdGEgYnVmZmVycyBvbiB0aGUgaG9zdCBwcm9jZXNzb3IgdGhhdCBjYW4gYmUgcmVjYWxsZWQgYXQgYSBsYXRlciB0aW1lLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjkucC4zIj5UaGUgcHJlc2VuY2Ugb2YgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlY3RlZCBieSB0aGUgaG9zdCBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSA8c2FtcD5DQVBfSEJPPC9zYW1wPiBjYXBhYmlsaXR5IGluIDxzYW1wPlBST1BfQ0FQUzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjkuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMSI+OS4xLjwvYT4gPGEgaHJlZj0iI2NvbW1hbmRzLTIiIGlkPSJjb21tYW5kcy0yIj5Db21tYW5kczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4xIj45LjEuMS48L2E+IDxhIGhyZWY9IiNjbWQtMTItbmNwaG9zdC1jbWRoYm9vZmZsb2FkIiBpZD0iY21kLTEyLW5jcGhvc3QtY21kaGJvb2ZmbG9hZCI+Q01EIDEyOiAoTkNQLSZndDtIb3N0KSBDTURfSEJPX09GRkxPQUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxzY0Q8L3NhbXA+IDx1bD48bGk+PHNhbXA+T2ZmbG9hZElkPC9zYW1wPjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyPC9saT48bGk+PHNhbXA+RXhwaXJhdGlvbjwvc2FtcD46IEluIHNlY29uZHMtZnJvbS1ub3c8L2xpPjxsaT48c2FtcD5Qcmlvcml0eTwvc2FtcD46IENyaXRpY2FsLCBIaWdoLCBNZWRpdW0sIExvdzwvbGk+PGxpPjxzYW1wPkRhdGE8L3NhbXA+OiBEYXRhIHRvIG9mZmxvYWQ8L2xpPjwvdWw+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjkuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uOS4xLjIiPjkuMS4yLjwvYT4gPGEgaHJlZj0iI2NtZC0xMy1uY3Bob3N0LWNtZGhib3JlY2xhaW0iIGlkPSJjbWQtMTMtbmNwaG9zdC1jbWRoYm9yZWNsYWltIj5DTUQgMTM6IChOQ1AtJmd0O0hvc3QpIENNRF9IQk9fUkVDTEFJTTwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5Bcmd1bWVudC1FbmNvZGluZzogPHNhbXA+TGI8L3NhbXA+IDx1bD48bGk+PHNhbXA+T2ZmbG9hZElkPC9zYW1wPjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyPC9saT48bGk+PHNhbXA+S2VlcEFmdGVyUmVjbGFpbTwvc2FtcD46IElmIG5vdCBzZXQgdG8gdHJ1ZSwgdGhlIGJsb2NrIHdpbGwgYmUgZHJvcHBlZCBieSB0aGUgaG9zdCBhZnRlciBpdCBpcyBzZW50IHRvIHRoZSBOQ1AuPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS4zIj45LjEuMy48L2E+IDxhIGhyZWY9IiNjbWQtMTQtbmNwaG9zdC1jbWRoYm9kcm9wIiBpZD0iY21kLTE0LW5jcGhvc3QtY21kaGJvZHJvcCI+Q01EIDE0OiAoTkNQLSZndDtIb3N0KSBDTURfSEJPX0RST1A8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkw8L3NhbXA+IDx1bD48bGk+PHNhbXA+T2ZmbG9hZElkPC9zYW1wPjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS40Ij45LjEuNC48L2E+IDxhIGhyZWY9IiNjbWQtMTUtaG9zdG5jcC1jbWRoYm9vZmZsb2FkZWQiIGlkPSJjbWQtMTUtaG9zdG5jcC1jbWRoYm9vZmZsb2FkZWQiPkNNRCAxNTogKEhvc3QtJmd0O05DUCkgQ01EX0hCT19PRkZMT0FERUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxpPC9zYW1wPiA8dWw+PGxpPjxzYW1wPk9mZmxvYWRJZDwvc2FtcD46IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcjwvbGk+PGxpPjxzYW1wPlN0YXR1czwvc2FtcD46IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuNSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS41Ij45LjEuNS48L2E+IDxhIGhyZWY9IiNjbWQtMTYtaG9zdG5jcC1jbWRoYm9yZWNsYWltZWQiIGlkPSJjbWQtMTYtaG9zdG5jcC1jbWRoYm9yZWNsYWltZWQiPkNNRCAxNjogKEhvc3QtJmd0O05DUCkgQ01EX0hCT19SRUNMQUlNRUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxpRDwvc2FtcD4gPHVsPjxsaT48c2FtcD5PZmZsb2FkSWQ8L3NhbXA+OiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXI8L2xpPjxsaT48c2FtcD5TdGF0dXM8L3NhbXA+OiBTdGF0dXMgY29kZSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLjwvbGk+PGxpPjxzYW1wPkRhdGE8L3NhbXA+OiBEYXRhIHRoYXQgd2FzIHByZXZpb3VzbHkgb2ZmbG9hZGVkIChpZiBhbnkpPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjEuNiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMS42Ij45LjEuNi48L2E+IDxhIGhyZWY9IiNjbWQtMTctaG9zdG5jcC1jbWRoYm9kcm9wcGVkIiBpZD0iY21kLTE3LWhvc3RuY3AtY21kaGJvZHJvcHBlZCI+Q01EIDE3OiAoSG9zdC0mZ3Q7TkNQKSBDTURfSEJPX0RST1BQRUQ8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkxpPC9zYW1wPiA8dWw+PGxpPjxzYW1wPk9mZmxvYWRJZDwvc2FtcD46IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcjwvbGk+PGxpPjxzYW1wPlN0YXR1czwvc2FtcD46IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uPC9saT48L3VsPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIiPjkuMi48L2E+IDxhIGhyZWY9IiNwcm9wZXJ0aWVzLTEiIGlkPSJwcm9wZXJ0aWVzLTEiPlByb3BlcnRpZXM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLnNlY3Rpb24uOS4yLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi45LjIuMSI+OS4yLjEuPC9hPiA8YSBocmVmPSIjcHJvcC1oYm8tbWVtLW1heCIgaWQ9InByb3AtaGJvLW1lbS1tYXgiPlBST1AgMTA6IFBST1BfSEJPX01FTV9NQVg8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPkw8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjQ8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPlBST1BfSEJPX01FTV9NQVg8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjkuMi4xLnAuMiI+RGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdC4gRGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLCBzbyB0aGlzIHByb3BlcnR5IG11c3QgYmUgc2V0IGJ5IHRoZSBob3N0IHRvIGEgbm9uLXplcm8gdmFsdWUgYmVmb3JlIHRoZSBOQ1Agd2lsbCBiZWdpbiBvZmZsb2FkaW5nIGJsb2Nrcy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMS5wLjMiPlRoaXMgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMS5wLjQiPlRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDxzYW1wPkNBUF9IQk88L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi45LjIuMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjkuMi4yIj45LjIuMi48L2E+IDxhIGhyZWY9IiNwcm9wLWhiby1ibG9jay1tYXgiIGlkPSJwcm9wLWhiby1ibG9jay1tYXgiPlBST1AgMTE6IFBST1BfSEJPX0JMT0NLX01BWDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Uzwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+UFJPUF9IQk9fQkxPQ0tfTUFYPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMi5wLjIiPkRlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG1heSBiZSBvZmZsb2FkZWQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LiBEZWZhdWx0IHZhbHVlIGlzIDMyLiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gemVybyB3aWxsIGNhdXNlIGhvc3QgYmxvY2sgb2ZmbG9hZCB0byBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMi5wLjMiPlRoaXMgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi45LjIuMi5wLjQiPlRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDxzYW1wPkNBUF9IQk88L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwIj4xMC48L2E+IDxhIGhyZWY9IiNmZWF0dXJlLWphbS1kZXRlY3QiIGlkPSJmZWF0dXJlLWphbS1kZXRlY3QiPkZlYXR1cmU6IEphbSBEZXRlY3Rpb248L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMC5wLjEiPkphbW1pbmcgZGV0ZWN0aW9uIGlzIGEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgTkNQIHRvIHJlcG9ydCB3aGVuIGl0IGRldGVjdHMgaGlnaCBsZXZlbHMgb2YgaW50ZXJmZXJlbmNlIHRoYXQgYXJlIGNoYXJhY3RlcmlzdGljIG9mIGludGVudGlvbmFsIHNpZ25hbCBqYW1taW5nLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLnAuMiI+VGhlIHByZXNlbmNlIG9mIHRoaXMgZmVhdHVyZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+ICh2YWx1ZSA2KSBjYXBhYmlsaXR5IGluIDxzYW1wPlBST1BfQ0FQUzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEwLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xIj4xMC4xLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnRpZXMtMiIgaWQ9InByb3BlcnRpZXMtMiI+UHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjEiPjEwLjEuMS48L2E+IDxhIGhyZWY9IiNwcm9wLWphbS1kZXRlY3QtZW5hYmxlIiBpZD0icHJvcC1qYW0tZGV0ZWN0LWVuYWJsZSI+UFJPUCA0NjA4OiBQUk9QX0pBTV9ERVRFQ1RfRU5BQkxFPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5iPC9zYW1wPjwvbGk+CisgIDxsaT5EZWZhdWx0IFZhbHVlOiBmYWxzZTwvbGk+CisgIDxsaT5SRVFVSVJFRCBmb3IgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk9jdGV0czo8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPjE8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RmllbGRzOjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+CisgICAgICAgIDxzYW1wPlBST1BfSkFNX0RFVEVDVF9FTkFCTEU8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuMS5wLjIiPkluZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgamFtbWluZyBkZXRlY3Rpb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS4xLnAuMyI+VGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjIiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjIiPjEwLjEuMi48L2E+IDxhIGhyZWY9IiNwcm9wLWphbS1kZXRlY3RlZCIgaWQ9InByb3AtamFtLWRldGVjdGVkIj5QUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+CisgIDxsaT5QYWNrZWQtRW5jb2Rpbmc6IDxzYW1wPmI8L3NhbXA+PC9saT4KKyAgPGxpPlJFUVVJUkVEIGZvciA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4KKyAgICAgICAgPHNhbXA+UFJPUF9KQU1fREVURUNURUQ8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuMi5wLjIiPlNldCB0byB0cnVlIGlmIHJhZGlvIGphbW1pbmcgaXMgZGV0ZWN0ZWQuIFNldCB0byBmYWxzZSBvdGhlcndpc2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS4yLnAuMyI+V2hlbiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkLCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGFyZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5IHZpYSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JUzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS4yLnAuNCI+VGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgPHNhbXA+Q0FQX0pBTV9ERVRFQ1Q8L3NhbXA+IGNhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiA8c2FtcD5QUk9QX0NBUFM8L3NhbXA+LiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMC4xLjMiPjEwLjEuMy48L2E+IDxhIGhyZWY9IiNwcm9wLTQ2MTAtcHJvcGphbWRldGVjdHJzc2l0aHJlc2hvbGQiIGlkPSJwcm9wLTQ2MTAtcHJvcGphbWRldGVjdHJzc2l0aHJlc2hvbGQiPlBST1AgNDYxMDogUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5jPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0czogZEJtPC9saT4KKyAgPGxpPkRlZmF1bHQgVmFsdWU6IEltcGxlbWVudGF0aW9uLXNwZWNpZmljPC9saT4KKyAgPGxpPlJFQ09NTUVOREVEIGZvciA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjMucC4yIj5UaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHRocmVzaG9sZCBSU1NJIGxldmVsIChtZWFzdXJlZCBpbiBkQm0pIGFib3ZlIHdoaWNoIHRoZSBqYW1taW5nIGRldGVjdGlvbiB3aWxsIGNvbnNpZGVyIHRoZSBjaGFubmVsIGJsb2NrZWQuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEwLjEuNCI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEwLjEuNCI+MTAuMS40LjwvYT4gPGEgaHJlZj0iI3Byb3AtNDYxMS1wcm9wamFtZGV0ZWN0d2luZG93IiBpZD0icHJvcC00NjExLXByb3BqYW1kZXRlY3R3aW5kb3ciPlBST1AgNDYxMTogUFJPUF9KQU1fREVURUNUX1dJTkRPVzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLVdyaXRlPC9saT4KKyAgPGxpPlBhY2tlZC1FbmNvZGluZzogPHNhbXA+Yzwvc2FtcD48L2xpPgorICA8bGk+VW5pdHM6IFNlY29uZHMgKDEtNjQpPC9saT4KKyAgPGxpPkRlZmF1bHQgVmFsdWU6IEltcGxlbWVudGF0aW9uLXNwZWNpZmljPC9saT4KKyAgPGxpPlJFQ09NTUVOREVEIGZvciA8c2FtcD5DQVBfSkFNX0RFVEVDVDwvc2FtcD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMC4xLjQucC4yIj5UaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHdpbmRvdyBwZXJpb2QgZm9yIHNpZ25hbCBqYW1taW5nIGRldGVjdGlvbi4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTAuMS41Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS41Ij4xMC4xLjUuPC9hPiA8YSBocmVmPSIjcHJvcC00NjEyLXByb3BqYW1kZXRlY3RidXN5IiBpZD0icHJvcC00NjEyLXByb3BqYW1kZXRlY3RidXN5Ij5QUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPlR5cGU6IFJlYWQtV3JpdGU8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5pPC9zYW1wPjwvbGk+CisgIDxsaT5Vbml0czogU2Vjb25kcyAoMS02NCk8L2xpPgorICA8bGk+RGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWM8L2xpPgorICA8bGk+UkVDT01NRU5ERUQgZm9yIDxzYW1wPkNBUF9KQU1fREVURUNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuNS5wLjIiPlRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGFnZ3JlZ2F0ZSBzZWNvbmRzIHdpdGhpbiB0aGUgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlIDxzYW1wPlBST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRDwvc2FtcD4gdG8gdHJpZ2dlciBkZXRlY3Rpb24uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTAuMS41LnAuMyI+VGhlIGJlaGF2aW9yIG9mIHRoZSBqYW1taW5nIGRldGVjdGlvbiBmZWF0dXJlIHdoZW4gPHNhbXA+UFJPUF9KQU1fREVURUNUX0JVU1k8L3NhbXA+IGlzIGxhcmdlciB0aGFuIDxzYW1wPlBST1BfSkFNX0RFVEVDVF9XSU5ET1c8L3NhbXA+IGlzIHVuZGVmaW5lZC4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTAuMS42Ij48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTAuMS42Ij4xMC4xLjYuPC9hPiA8YSBocmVmPSIjcHJvcC00NjEzLXByb3BqYW1kZXRlY3RoaXN0b3J5Yml0bWFwIiBpZD0icHJvcC00NjEzLXByb3BqYW1kZXRlY3RoaXN0b3J5Yml0bWFwIj5QUk9QIDQ2MTM6IFBST1BfSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorICA8bGk+UGFja2VkLUVuY29kaW5nOiA8c2FtcD5MTDwvc2FtcD48L2xpPgorICA8bGk+RGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWM8L2xpPgorICA8bGk+UkVDT01NRU5ERUQgZm9yIDxzYW1wPkNBUF9KQU1fREVURUNUPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEwLjEuNi5wLjIiPlRoaXMgdmFsdWUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBzdGF0ZSBvZiBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgZm9yIG1vbml0b3JpbmcvZGVidWdnaW5nIHB1cnBvc2UuIEl0IHJldHVybnMgYSA2NC1iaXQgdmFsdWUgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lIHNlY29uZCBpbnRlcnZhbCBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUgbW9zdCByZWNlbnQgaW50ZXJ2YWwgYW5kIGJpdCA2MyBmb3IgdGhlIG9sZGVzdCBpbnRlcnZhbHMgKDYzIHNlYyBlYXJsaWVyKS4gIFRoZSBiaXQgaXMgc2V0IHRvIDEgaWYgdGhlIGphbW1pbmcgZGV0ZWN0aW9uIG1vZHVsZSBvYnNlcnZlZC9kZXRlY3RlZCBoaWdoIHNpZ25hbCBsZXZlbCBkdXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgb25lIHNlY29uZCBpbnRlcnZhbC4gIFRoZSB2YWx1ZSBpcyByZWFkLW9ubHkgYW5kIGlzIGVuY29kZWQgYXMgdHdvIDxzYW1wPkw8L3NhbXA+ICh1aW50MzIpIHZhbHVlcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAoZmlyc3QgPHNhbXA+TDwvc2FtcD4gKHVpbnQzMikgdmFsdWUgZ2l2ZXMgdGhlIGxvd2VyIGJpdHMgY29ycmVzcG9uZGluZyB0byBtb3JlIHJlY2VudCBoaXN0b3J5KS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMSI+MTEuPC9hPiA8YSBocmVmPSIjZmVhdHVyZS1ncGlvLWFjY2VzcyIgaWQ9ImZlYXR1cmUtZ3Bpby1hY2Nlc3MiPkZlYXR1cmU6IEdQSU8gQWNjZXNzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEucC4xIj5UaGlzIGZlYXR1cmUgYWxsb3dzIHRoZSBob3N0IHRvIGhhdmUgY29udHJvbCBvdmVyIHNvbWUgb3IgYWxsIG9mIHRoZSBHUElPIHBpbnMgb24gdGhlIE5DUC4gVGhlIGhvc3QgY2FuIGRldGVybWluZSB3aGljaCBHUElPcyBhcmUgYXZhaWxhYmxlIGJ5IGV4YW1pbmluZyA8c2FtcD5QUk9QX0dQSU9fQ09ORklHPC9zYW1wPiwgZGVzY3JpYmVkIGJlbG93LiBUaGlzIEFQSSBzdXBwb3J0cyBhIG1heGltdW0gb2YgMjU2IGluZGl2aWR1YWwgR1BJTyBwaW5zLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLnAuMiI+U3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiA8c2FtcD5DQVBfR1BJTzwvc2FtcD4uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjExLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xIj4xMS4xLjwvYT4gPGEgaHJlZj0iI3Byb3BlcnRpZXMtMyIgaWQ9InByb3BlcnRpZXMtMyI+UHJvcGVydGllczwvYT48L2gxPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjEiPjExLjEuMS48L2E+IDxhIGhyZWY9IiNwcm9wLTQwOTYtcHJvcGdwaW9jb25maWciIGlkPSJwcm9wLTQwOTYtcHJvcGdwaW9jb25maWciPlBST1AgNDA5NjogUFJPUF9HUElPX0NPTkZJRzwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5Bcmd1bWVudC1FbmNvZGluZzogPHNhbXA+QSh0KENDVSkpPC9zYW1wPjwvbGk+CisgIDxsaT5UeXBlOiBSZWFkLXdyaXRlIChXcml0YWJsZSBvbmx5IHVzaW5nIDxzYW1wPkNNRF9QUk9QX1ZBTFVFX0lOU0VSVDwvc2FtcD4sIDxhIGhyZWY9IiNjbWQtcHJvcC12YWx1ZS1pbnNlcnQiPlNlY3Rpb24gNC41PC9hPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEucC4yIj5BbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBmaWVsZHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+PHNhbXA+Qzwvc2FtcD46IEdQSU8gTnVtYmVyPC9saT4KKyAgPGxpPjxzYW1wPkM8L3NhbXA+OiBHUElPIENvbmZpZ3VyYXRpb24gRmxhZ3M8L2xpPgorICA8bGk+PHNhbXA+VTwvc2FtcD46IEh1bWFuLXJlYWRhYmxlIEdQSU8gbmFtZTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuMS5wLjQiPkdQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEucC41Ij5UaGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIHRoZSBHUElPOiA8L3A+Cis8cHJlPgorICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNworKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8RElSfFBVUHxQRE58VFJJR0dFUnwgIFJFU0VSVkVEIHwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICB8Ty9EfAorICAgICAgICArLS0tKworPC9wcmU+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkRJUjwvc2FtcD46IFBpbiBkaXJlY3Rpb24uIENsZWFyICgwKSBmb3IgaW5wdXQsIHNldCAoMSkgZm9yIG91dHB1dC48L2xpPgorICA8bGk+PHNhbXA+UFVQPC9zYW1wPjogUHVsbC11cCBlbmFibGVkIGZsYWcuPC9saT4KKyAgPGxpPjxzYW1wPlBETjwvc2FtcD4vPHNhbXA+Ty9EPC9zYW1wPjogRmxhZyBtZWFuaW5nIGRlcGVuZHMgb24gcGluIGRpcmVjdGlvbjogPHVsPjxsaT5JbnB1dDogUHVsbC1kb3duIGVuYWJsZWQuPC9saT48bGk+T3V0cHV0OiBPdXRwdXQgaXMgYW4gb3Blbi1kcmFpbi48L2xpPjwvdWw+PC9saT4KKyAgPGxpPjxzYW1wPlRSSUdHRVI8L3NhbXA+OiBFbnVtZXJhdGlvbiBkZXNjcmliaW5nIGhvdyBwaW4gY2hhbmdlcyBnZW5lcmF0ZSBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uIGNvbW1hbmRzIChUQkQpIGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdC4gIDx1bD48bGk+MDogRmVhdHVyZSBkaXNhYmxlZCBmb3IgdGhpcyBwaW48L2xpPjxsaT4xOiBUcmlnZ2VyIG9uIGZhbGxpbmcgZWRnZTwvbGk+PGxpPjI6IFRyaWdnZXIgb24gcmlzaW5nIGVkZ2U8L2xpPjxsaT4zOiBUcmlnZ2VyIG9uIGxldmVsIGNoYW5nZTwvbGk+PC91bD48L2xpPgorICA8bGk+PHNhbXA+UkVTRVJWRUQ8L3NhbXA+OiBCaXRzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBBbHdheXMgY2xlYXJlZCB0byB6ZXJvIGFuZCBpZ25vcmVkIHdoZW4gcmVhZC48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjEucC43Ij5BcyBhbiBvcHRpb25hbCBmZWF0dXJlLCB0aGUgY29uZmlndXJhdGlvbiBvZiBpbmRpdmlkdWFsIHBpbnMgbWF5IGJlIG1vZGlmaWVkIHVzaW5nIHRoZSA8c2FtcD5DTURfUFJPUF9WQUxVRV9JTlNFUlQ8L3NhbXA+IGNvbW1hbmQuIE9ubHkgdGhlIEdQSU8gbnVtYmVyIGFuZCBmbGFncyBmaWVsZHMgTVVTVCBiZSBwcmVzZW50LCB0aGUgR1BJTyBuYW1lIChpZiBwcmVzZW50KSB3b3VsZCBiZSBpZ25vcmVkLiBUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgdXNlZCB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgR1BJT3Mgd2hpY2ggYXJlIGFscmVhZHkgZXhwb3NlZC0tLWl0IGNhbm5vdCBiZSB1c2VkIGJ5IHRoZSBob3N0IHRvIGFkZCBhZGRpb25hbCBHUElPcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTEuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTEuMS4yIj4xMS4xLjIuPC9hPiA8YSBocmVmPSIjcHJvcC00MDk4LXByb3BncGlvc3RhdGUiIGlkPSJwcm9wLTQwOTgtcHJvcGdwaW9zdGF0ZSI+UFJPUCA0MDk4OiBQUk9QX0dQSU9fU1RBVEU8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogUmVhZC1Xcml0ZTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuMi5wLjIiPkNvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBzdGF0ZSBvZiB0aGUgR1BJT3MuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIHByb3BlcnRpZXMgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIEdQSU9zLiBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuIEdQSU9zIGFyZSBudW1iZXJlZCBmcm9tIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHRvIGxlYXN0IHNpZ25pZmljYW50IGJpdCwgc28gMHg4MCBpcyBHUElPIDAsIDB4NDAgaXMgR1BJTyAxLCBldGMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4yLnAuMyI+Rm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgaW5wdXRzOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBVUVfR0VUPC9zYW1wPjogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBkZXNjcmliZXMgdGhlIGxvZ2ljIGxldmVsIHJlYWQgZnJvbSB0aGUgcGluLjwvbGk+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQUxVRV9TRVQ8L3NhbXA+OiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzIGlnbm9yZWQgZm9yIHRoZXNlIHBpbnMuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4yLnAuNSI+Rm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgb3V0cHV0czogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQVVFX0dFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX1NFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgZGV0ZXJtaW5lcyB0aGUgbmV3IGxvZ2ljIGxldmVsIG9mIHRoZSBvdXRwdXQuIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYW4gb3Blbi1kcmFpbiwgc2V0dGluZyB0aGUgYXNzb2NpYXRlZCBiaXQgdG8gMSB3aWxsIGNhdXNlIHRoZSBwaW4gdG8gZW50ZXIgYSBIaS1aIHN0YXRlLjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuMi5wLjciPkZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiA8c2FtcD5QUk9QX0dQSU9fQ09ORklHPC9zYW1wPjogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DTURfUFJPUF9WQVVFX0dFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuPC9saT4KKyAgPGxpPjxzYW1wPkNNRF9QUk9QX1ZBTFVFX1NFVDwvc2FtcD46IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgTVVTVCBiZSBpZ25vcmVkIGJ5IHRoZSBOQ1AuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4yLnAuOSI+V2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjExLjEuMyI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjExLjEuMyI+MTEuMS4zLjwvYT4gPGEgaHJlZj0iI3Byb3AtNDA5OS1wcm9wZ3Bpb3N0YXRlc2V0IiBpZD0icHJvcC00MDk5LXByb3BncGlvc3RhdGVzZXQiPlBST1AgNDA5OTogUFJPUF9HUElPX1NUQVRFX1NFVDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5UeXBlOiBXcml0ZS1vbmx5PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4zLnAuMiI+QWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIEdQSU8gc3RhdGVzLiBDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUgb3V0cHV0IEdQSU9zIHRoYXQgc2hvdWxkIGhhdmUgdGhlaXIgc3RhdGUgc2V0IHRvIDEuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS4zLnAuMyI+V2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZiBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gPHNhbXA+UFJPUF9HUElPX0NPTkZJRzwvc2FtcD4gTVVTVCBiZSBpZ25vcmVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMS4xLjQiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMS4xLjQiPjExLjEuNC48L2E+IDxhIGhyZWY9IiNwcm9wLTQxMDAtcHJvcGdwaW9zdGF0ZWNsZWFyIiBpZD0icHJvcC00MTAwLXByb3BncGlvc3RhdGVjbGVhciI+UFJPUCA0MTAwOiBQUk9QX0dQSU9fU1RBVEVfQ0xFQVI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+VHlwZTogV3JpdGUtb25seTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjExLjEuNC5wLjIiPkFsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgR1BJTyBzdGF0ZXMuIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBvdXRwdXQgR1BJT3MgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBjbGVhcmVkIHRvIDAuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTEuMS40LnAuMyI+V2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZiBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gPHNhbXA+UFJPUF9HUElPX0NPTkZJRzwvc2FtcD4gTVVTVCBiZSBpZ25vcmVkLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMiI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyIj4xMi48L2E+IDxhIGhyZWY9IiNmZWF0dXJlLXRybmciIGlkPSJmZWF0dXJlLXRybmciPkZlYXR1cmU6IFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIucC4xIj5UaGlzIGZlYXR1cmUgYWxsb3dzIHRoZSBob3N0IHRvIGhhdmUgYWNjZXNzIHRvIGFueSBzdHJvbmcgaGFyZHdhcmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhhdCBtaWdodCBiZSBwcmVzZW50IG9uIHRoZSBOQ1AsIGZvciB0aGluZ3MgbGlrZSBrZXkgZ2VuZXJhdGlvbiBvciBzZWVkaW5nIFBSTkdzLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLnAuMiI+U3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiA8c2FtcD5DQVBfVFJORzwvc2FtcD4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIucC4zIj5Ob3RlIHdlbGwgdGhhdCBpbXBsZW1lbnRpbmcgYSBjcnlwdG9ncmFwaGljYWxseS1zdHJvbmcgc29mdHdhcmUtYmFzZWQgdHJ1ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAodGhhdCBpcyBpbXBlcnZpb3VzIHRvIHRoaW5ncyBsaWtlIHRlbXBlcmF0dXJlIGNoYW5nZXMsIG1hbnVmYWN0dXJpbmcgZGlmZmVyZW5jZXMgYWNyb3NzIGRldmljZXMsIG9yIHVuZXhwZWN0ZWQgb3V0cHV0IGNvcnJlbGF0aW9ucykgaXMgbm9uLXRyaXZpYWwgd2l0aG91dCBhIHdlbGwtZGVzaWduZWQsIGRlZGljYXRlZCBoYXJkd2FyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gSW1wbGVtZW50b3JzIHdobyBoYXZlIGxpdHRsZSBvciBubyBleHBlcmllbmNlIGluIHRoaXMgYXJlYSBhcmUgZW5jb3VyYWdlZCB0byBub3QgYWR2ZXJ0aXNlIHRoaXMgY2FwYWJpbGl0eS4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTIuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyLjEiPjEyLjEuPC9hPiA8YSBocmVmPSIjcHJvcGVydGllcy00IiBpZD0icHJvcGVydGllcy00Ij5Qcm9wZXJ0aWVzPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMSI+PGEgaHJlZj0iI3JmYy5zZWN0aW9uLjEyLjEuMSI+MTIuMS4xLjwvYT4gPGEgaHJlZj0iI3Byb3AtNDEwMS1wcm9wdHJuZzMyIiBpZD0icHJvcC00MTAxLXByb3B0cm5nMzIiPlBST1AgNDEwMTogUFJPUF9UUk5HXzMyPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkFyZ3VtZW50LUVuY29kaW5nOiA8c2FtcD5MPC9zYW1wPjwvbGk+CisgIDxsaT5UeXBlOiBSZWFkLU9ubHk8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjEucC4yIj5GZXRjaGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgYSBzdHJvbmcgcmFuZG9tIDMyLWJpdCBpbnRlZ2VyIHRoYXQgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyBhIFBSTkcgc2VlZCBvciBmb3IgY3J5cHRvZ3JhcGhpYyB1c2UuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4xLnAuMyI+V2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMsIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+RGF0YSByZXByZXNlbnRpbmcgYXQgbGVhc3QgMzIgYml0cyBvZiBmcmVzaCBlbnRyb3B5IChleHRyYWN0ZWQgZnJvbSB0aGUgcHJpbWFyeSBlbnRyb3B5IHNvdXJjZSkgTVVTVCBiZSBjb25zdW1lZCBieSB0aGUgY2FsY3VsYXRpb24gb2YgZWFjaCBxdWVyeS48L2xpPgorICA8bGk+RWFjaCBvZiB0aGUgMzIgYml0cyByZXR1cm5lZCBNVVNUIGJlIGZyZWUgb2YgYmlhcyBhbmQgaGF2ZSBubyBzdGF0aXN0aWNhbCBjb3JyZWxhdGlvbiB0byBhbnkgcGFydCBvZiB0aGUgcmF3IGRhdGEgdXNlZCBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIGFueSBxdWVyeS48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjEucC41Ij5TdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmIDxzYW1wPkNBUF9UUk5HPC9zYW1wPiBpcyBpbmNsdWRlZCBpbiB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcy4gIDwvcD4KKzxoMSBpZD0icmZjLnNlY3Rpb24uMTIuMS4yIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTIuMS4yIj4xMi4xLjIuPC9hPiA8YSBocmVmPSIjcHJvcC00MTAyLXByb3B0cm5nMTI4IiBpZD0icHJvcC00MTAyLXByb3B0cm5nMTI4Ij5QUk9QIDQxMDI6IFBST1BfVFJOR18xMjg8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMi5wLjIiPkZldGNoaW5nIHRoaXMgcHJvcGVydHkgcmV0dXJucyAxNiBieXRlcyBvZiBzdHJvbmcgcmFuZG9tIGRhdGEgc3VpdGFibGUgZm9yIGRpcmVjdCBjcnlwdG9ncmFwaGljIHVzZSB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZyhGb3IgZXhhbXBsZSwgYXMgYW4gQUVTIGtleSkuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4yLnAuMyI+V2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMsIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+RGF0YSByZXByZXNlbnRpbmcgYXQgbGVhc3QgMTI4IGJpdHMgb2YgZnJlc2ggZW50cm9weSAoZXh0cmFjdGVkIGZyb20gdGhlIHByaW1hcnkgZW50cm9weSBzb3VyY2UpIE1VU1QgYmUgY29uc3VtZWQgYnkgdGhlIGNhbGN1bGF0aW9uIG9mIGVhY2ggcXVlcnkuPC9saT4KKyAgPGxpPkVhY2ggb2YgdGhlIDEyOCBiaXRzIHJldHVybmVkIE1VU1QgYmUgZnJlZSBvZiBiaWFzIGFuZCBoYXZlIG5vIHN0YXRpc3RpY2FsIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYW55IHF1ZXJ5LjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMi5wLjUiPlN1cHBvcnQgZm9yIHRoaXMgcHJvcGVydHkgaXMgUkVRVUlSRUQgaWYgPHNhbXA+Q0FQX1RSTkc8L3NhbXA+IGlzIGluY2x1ZGVkIGluIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLiAgPC9wPgorPGgxIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjMiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMi4xLjMiPjEyLjEuMy48L2E+IDxhIGhyZWY9IiNwcm9wLTQxMDMtcHJvcHRybmdyYXczMiIgaWQ9InByb3AtNDEwMy1wcm9wdHJuZ3JhdzMyIj5QUk9QIDQxMDM6IFBST1BfVFJOR19SQVdfMzI8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+QXJndW1lbnQtRW5jb2Rpbmc6IDxzYW1wPkQ8L3NhbXA+PC9saT4KKyAgPGxpPlR5cGU6IFJlYWQtT25seTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLjEyLjEuMy5wLjIiPlRoaXMgcHJvcGVydHkgaXMgcHJpbWFyaWx5IHVzZWQgdG8gZGlhZ25vc2UgYW5kIGRlYnVnIHRoZSBiZWhhdmlvciBvZiB0aGUgZW50cm9weSBzb3VyY2UgdXNlZCBmb3Igc3Ryb25nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi4xMi4xLjMucC4zIj5XaGVuIHF1ZXJpZWQsIHJldHVybnMgdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgZW50cm9weSBzb3VyY2UgdXNlZCB0byBnZW5lcmF0ZSA8c2FtcD5QUk9QX1RSTkdfMzI8L3NhbXA+LCBwcmlvciB0byBhbnkgcmVkdWN0aW9uL3doaXRlbmluZyBhbmQvb3IgbWl4aW5nIHdpdGggcHJpb3Igc3RhdGUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4zLnAuNCI+VGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBzaG91bGQgYmUgZXhwZWN0ZWQgdG8gYmUgbm9uLWRldGVybWluaXN0aWMuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTIuMS4zLnAuNSI+U3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBSRUNPTU1FTkRFRCBpZiA8c2FtcD5DQVBfVFJORzwvc2FtcD4gaXMgaW5jbHVkZWQgaW4gdGhlIGRldmljZSBjYXBhYmlsaXRpZXMuICA8L3A+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEzIj48YSBocmVmPSIjcmZjLnNlY3Rpb24uMTMiPjEzLjwvYT4gPGEgaHJlZj0iI3NlY3VyaXR5LWNvbnNpZGVyYXRpb25zIiBpZD0ic2VjdXJpdHktY29uc2lkZXJhdGlvbnMiPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9hPjwvaDE+Cis8aDEgaWQ9InJmYy5zZWN0aW9uLjEzLjEiPjxhIGhyZWY9IiNyZmMuc2VjdGlvbi4xMy4xIj4xMy4xLjwvYT4gPGEgaHJlZj0iI3Jhdy1hcHBsaWNhdGlvbi1hY2Nlc3MiIGlkPSJyYXctYXBwbGljYXRpb24tYWNjZXNzIj5SYXcgQXBwbGljYXRpb24gQWNjZXNzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uMTMuMS5wLjEiPlNwaW5lbCBNQVkgYmUgdXNlZCBhcyBhbiBBUEkgYm91bmRhcnkgZm9yIGFsbG93aW5nIHByb2Nlc3NlcyB0byBjb25maWd1cmUgdGhlIE5DUC4gSG93ZXZlciwgc3VjaCBhIHN5c3RlbSBNVVNUIE5PVCBnaXZlIHVucHJpdmlsZWdlZCBwcm9jZXNzZXNzIHRoZSBhYmlsaXR5IHRvIHNlbmQgb3IgcmVjZWl2ZSBhcmJpdHJhcnkgY29tbWFuZCBmcmFtZXMgdG8gdGhlIE5DUC4gT25seSB0aGUgc3BlY2lmaWMgY29tbWFuZHMgYW5kIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVxdWlyZWQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgcGFzc2VkLCBhbmQgdGhlbiBvbmx5IGFmdGVyIGJlaW5nIGNoZWNrZWQgZm9yIHByb3BlciBmb3JtYXQuICA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5BIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEiPkFwcGVuZGl4IEEuPC9hPiA8YSBocmVmPSIjZnJhbWluZy1wcm90b2NvbCIgaWQ9ImZyYW1pbmctcHJvdG9jb2wiPkZyYW1pbmcgUHJvdG9jb2w8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLnAuMSI+U2luY2UgdGhpcyBOQ1AgcHJvdG9jb2wgaXMgZGVmaW5lZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwaHlzaWNhbCB0cmFuc3BvcnQgb3IgZnJhbWluZywgYW55IG51bWJlciBvZiB0cmFuc3BvcnRzIGFuZCBmcmFtaW5nIHByb3RvY29scyBjb3VsZCBiZSB1c2VkIHN1Y2Nlc3NmdWxseS4gSG93ZXZlciwgaW4gdGhlIGludGVyZXN0cyBvZiBjb21wYXRpYmlsaXR5LCB0aGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgcmVjb21tZW5kYXRpb25zLiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4xIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMSI+QS4xLjwvYT4gPGEgaHJlZj0iI3VhcnQtcmVjb21tZW5kYXRpb25zIiBpZD0idWFydC1yZWNvbW1lbmRhdGlvbnMiPlVBUlQgUmVjb21tZW5kYXRpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLnAuMSI+VGhlIHJlY29tbWVuZGVkIGRlZmF1bHQgVUFSVCBzZXR0aW5ncyBhcmU6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Qml0IHJhdGU6ICAgICAxMTUyMDA8L2xpPgorICA8bGk+U3RhcnQgYml0czogICAxPC9saT4KKyAgPGxpPkRhdGEgYml0czogICAgODwvbGk+CisgIDxsaT5TdG9wIGJpdHM6ICAgIDE8L2xpPgorICA8bGk+UGFyaXR5OiAgICAgICBOb25lPC9saT4KKyAgPGxpPkZsb3cgQ29udHJvbDogSGFyZHdhcmU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjEucC4zIj5UaGVzZSB2YWx1ZXMgbWF5IGJlIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgaW5kaXZpZHVhbCBuZWVkcyBvZiB0aGUgYXBwbGljYXRpb24gb3IgcHJvZHVjdCwgYnV0IHNvbWUgc29ydCBvZiBmbG93IGNvbnRyb2wgTVVTVCBiZSB1c2VkLiAgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIHByZWZlcnJlZCBvdmVyIHNvZnR3YXJlIGZsb3cgY29udHJvbC4gSW4gdGhlIGFic2VuY2Ugb2YgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKFhPTi9YT0ZGKSBNVVNUIGJlIHVzZWQgaW5zdGVhZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjEucC40Ij5XZSBhbHNvIDxzdHJvbmc+UkVDT01NRU5EPC9zdHJvbmc+IGFuIEFyZHVpbm8tc3R5bGUgaGFyZHdhcmUgcmVzZXQsIHdoZXJlIHRoZSBEVFIgc2lnbmFsIGlzIGNvdXBsZWQgdG8gdGhlIDxzYW1wPlImIzc3MztFJiM3NzM7UyYjNzczOzwvc2FtcD4gcGluIHRocm91Z2ggYSAwLjAxJiMxODE7RiBjYXBhY2l0b3IuIFRoaXMgY2F1c2VzIHRoZSBOQ1AgdG8gYXV0b21hdGljYWxseSByZXNldCB3aGVuZXZlciB0aGUgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiBBdCB0aGUgdmVyeSBsZWFzdCB3ZSA8c3Ryb25nPlJFQ09NTUVORDwvc3Ryb25nPiBkZWRpY2F0aW5nIG9uZSBvZiB5b3VyIGhvc3QgcGlucyB0byBjb250cm9sbGluZyB0aGUgPHNhbXA+UiYjNzczO0UmIzc3MztTJiM3NzM7PC9zYW1wPiBwaW4gb24gdGhlIE5DUCwgc28gdGhhdCB5b3UgY2FuIGVhc2lseSBwZXJmb3JtIGEgaGFyZHdhcmUgcmVzZXQgaWYgbmVjZXNzYXJ5LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4xLjEiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4xLjEiPkEuMS4xLjwvYT4gPGEgaHJlZj0iI3VhcnQtYml0LXJhdGUtZGV0ZWN0aW9uIiBpZD0idWFydC1iaXQtcmF0ZS1kZXRlY3Rpb24iPlVBUlQgQml0IFJhdGUgRGV0ZWN0aW9uPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjEucC4xIj5XaGVuIHVzaW5nIGEgVUFSVCwgdGhlIGlzc3VlIG9mIGFuIGFwcHJvcHJpYXRlIGJpdCByYXRlIG11c3QgYmUgY29uc2lkZXJlZC4gQSBiaXRyYXRlIG9mIDExNTIwMCBiaXRzIHBlciBzZWNvbmQgaGFzIGJlY29tZSBhIGRlZmFjdG8gc3RhbmRhcmQgYmF1ZCByYXRlIGZvciBtYW55IHNlcmlhbCBwZXJpcGhlcmFscy4gVGhpcyByYXRlLCBob3dldmVyLCBpcyBzbG93ZXIgdGhhbiB0aGUgdGhlb3JldGljYWwgbWF4aW11bSBiaXRyYXRlIG9mIHRoZSA4MDIuMTUuNCAyLjRHSHogUEhZICgyNTBrYml0KS4gSW4gbW9zdCBjaXJjdW1zdGFuY2VzIHRoaXMgbWlzbWF0Y2ggaXMgbm90IHNpZ25pZmljYW50IGJlY2F1c2UgdGhlIG92ZXJhbGwgYml0cmF0ZSB3aWxsIGJlIG11Y2ggbG93ZXIgdGhhbiBlaXRoZXIgb2YgdGhlc2UgcmF0ZXMsIGJ1dCB0aGVyZSBhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBhIGZhc3RlciBVQVJUIGJpdHJhdGUgaXMgZGVzaXJhYmxlLiBUaHVzLCB0aGlzIGRvY3VtZW50IHByb3Bvc2VzIGEgc2ltcGxlIGJpdHJhdGUgZGV0ZWN0aW9uIHNjaGVtZSB0aGF0IGNhbiBiZSBlbXBsb3llZCBieSB0aGUgaG9zdCB0byBkZXRlY3Qgd2hlbiB0aGUgYXR0YWNoZWQgTkNQIGlzIGluaXRpYWxseSBydW5uaW5nIGF0IGEgaGlnaGVyIGJpdHJhdGUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjEucC4yIj5UaGUgYWxnb3JpdGhtIGlzIHRvIHNlbmQgc3VjY2Vzc2l2ZSBOT09QIGNvbW1hbmRzIHRvIHRoZSBOQ1AgYXQgaW5jcmVhc2luZyBiaXRyYXRlcy4gV2hlbiBhIHZhbGlkIDxzYW1wPkNNRF9MQVNUX1NUQVRVUzwvc2FtcD4gcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGUgY29ycmVjdCBiaXRyYXRlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4xLnAuMyI+SW4gb3JkZXIgdG8gbGltaXQgdGhlIHRpbWUgc3BlbnQgaHVudGluZyBmb3IgdGhlIGFwcHJvcHJpYXRlIGJpdHJhdGUsIHdlIFJFQ09NTUVORCB0aGF0IG9ubHkgdGhlIGZvbGxvd2luZyBiaXRyYXRlcyBiZSBjaGVja2VkOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjExNTIwMDwvbGk+CisgIDxsaT4yMzA0MDA8L2xpPgorICA8bGk+MTAwMDAwMCAoMU1iaXQpPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjEucC41Ij5UaGUgYml0cmF0ZSBNQVkgYWxzbyBiZSBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkgYnkgYWRqdXN0aW5nIDxzYW1wPlBST1BfVUFSVF9CSVRSQVRFPC9zYW1wPiwgaWYgaW1wbGVtZW50ZWQuICA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5BLjEuMiI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5BLjEuMiI+QS4xLjIuPC9hPiA8YSBocmVmPSIjaGRsYy1saXRlIiBpZD0iaGRsYy1saXRlIj5IRExDLUxpdGU8L2E+PC9oMT4KKzxwPjxlbT5IRExDLUxpdGU8L2VtPiBpcyB0aGUgcmVjb21tZW5kZWQgZnJhbWluZyBwcm90b2NvbCBmb3IgdHJhbnNtaXR0aW5nIFNwaW5lbCBmcmFtZXMgb3ZlciBhIFVBUlQuIEhETEMtTGl0ZSBjb25zaXN0cyBvZiBvbmx5IHRoZSBmcmFtaW5nLCBlc2NhcGluZywgYW5kIENSQyBwYXJ0cyBvZiB0aGUgbGFyZ2VyIEhETEMgcHJvdG9jb2wtLS1hbGwgb3RoZXIgcGFydHMgb2YgSERMQyBhcmUgb21pdHRlZC4gVGhpcyBwcm90b2NvbCB3YXMgY2hvc2VuIGJlY2F1c2UgaXQgd29ya3Mgd2VsbCB3aXRoIHNvZnR3YXJlIGZsb3cgY29udHJvbCBhbmQgaXMgd2lkZWx5IGltcGxlbWVudGVkLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuMiI+VG8gdHJhbnNtaXQgYSBmcmFtZSB3aXRoIEhETEMtbGl0ZSwgdGhlIDE2LWJpdCBDUkMgbXVzdCBmaXJzdCBiZSBhcHBlbmRlZCB0byB0aGUgZnJhbWUuIFRoZSBDUkMgZnVuY3Rpb24gaXMgZGVmaW5lZCB0byBiZSBDUkMtMTYvQ0NJVFQsIG90aGVyd2lzZSBrbm93biBhcyB0aGUgPGEgaHJlZj0iaHR0cDovL3JldmVuZy5zb3VyY2Vmb3JnZS5uZXQvY3JjLWNhdGFsb2d1ZS8xNi5odG0jY3JjLmNhdC5rZXJtaXQiPktFUk1JVCBDUkM8L2E+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuMyI+SW5kaXZpZHVhbCBmcmFtZXMgYXJlIHRlcm1pbmF0ZWQgd2l0aCBhIGZyYW1lIGRlbGltaXRlciBvY3RldCBjYWxsZWQgdGhlICdmbGFnJyBvY3RldCAoPHNhbXA+MHg3RTwvc2FtcD4pLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuNCI+VGhlIGZvbGxvd2luZyBvY3RldHMgdmFsdWVzIGFyZSBjb25zaWRlcmVkIDxlbT5zcGVjaWFsPC9lbT4gYW5kIHNob3VsZCBiZSBlc2NhcGVkIHdoZW4gcHJlc2VudCBpbiBkYXRhIGZyYW1lczogPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5PY3RldCBWYWx1ZTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+RGVzY3JpcHRpb248L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg3RTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RnJhbWUgRGVsaW1pdGVyIChGbGFnKTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHg3RDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+RXNjYXBlIEJ5dGU8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjB4MTE8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlhPTjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHgxMzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+WE9GRjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MHhGODwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+VmVuZG9yLVNwZWNpZmljPC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjEuMi5wLjUiPldoZW4gcHJlc2VudCBpbiBhIGRhdGEgZnJhbWUsIHRoZXNlIG9jdGV0IHZhbHVlcyBhcmUgZXNjYXBlZCBieSBwcmVwZW5kaW5nIHRoZSBlc2NhcGUgb2N0ZXQgKDxzYW1wPjB4N0Q8L3NhbXA+KSBhbmQgWE9SaW5nIHRoZSB2YWx1ZSB3aXRoIDxzYW1wPjB4MjA8L3NhbXA+LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuNiI+V2hlbiByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIENSQyBtdXN0IGJlIHZlcmlmaWVkIGFmdGVyIHRoZSBmcmFtZSBpcyB1bmVzY2FwZWQuIElmIHRoZSBDUkMgdmFsdWUgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBjYWxjdWxhdGVkIGZvciB0aGUgZnJhbWUgZGF0YSwgdGhlIGZyYW1lIE1VU1QgYmUgZGlzY2FyZGVkLiBUaGUgaW1wbGVtZW50YXRpb24gTUFZIGluZGljYXRlIHRoZSBmYWlsdXJlIHRvIGhpZ2hlciBsZXZlbHMgdG8gaGFuZGxlIGFzIHRoZXkgc2VlIGZpdCwgYnV0IE1VU1QgTk9UIGF0dGVtcHQgdG8gcHJvY2VzcyB0aGUgZGVjZWl2ZWQgZnJhbWUuICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4xLjIucC43Ij5Db25zZWN1dGl2ZSBmbGFnIG9jdGV0cyBhcmUgZW50aXJlbHkgbGVnYWwgYW5kIE1VU1QgTk9UIGJlIHRyZWF0ZWQgYXMgYSBmcmFtaW5nIGVycm9yLiBDb25zZWN1dGl2ZSBmbGFnIG9jdGV0cyBNQVkgYmUgdXNlZCBhcyBhIHdheSB0byB3YWtlIHVwIGEgc2xlZXBpbmcgTkNQLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMS4yLnAuOCI+V2hlbiBmaXJzdCBlc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uIHRvIHRoZSBOQ1AsIGl0IGlzIGN1c3RvbWFyeSB0byBzZW5kIG9uZSBvciBtb3JlIGZsYWcgb2N0ZXRzIHRvIGVuc3VyZSB0aGF0IGFueSBwcmV2aW91c2x5IHJlY2VpdmVkIGRhdGEgaXMgZGlzY2FyZGVkLiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4yIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMiI+QS4yLjwvYT4gPGEgaHJlZj0iI3NwaS1yZWNvbW1lbmRhdGlvbnMiIGlkPSJzcGktcmVjb21tZW5kYXRpb25zIj5TUEkgUmVjb21tZW5kYXRpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLnAuMSI+V2UgUkVDT01NRU5EIHRoZSB1c2Ugb2YgdGhlIGZvbGxvd2luZyBzdGFuZGFyZCBTUEkgc2lnbmFsczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DJiM3NzM7UyYjNzczOzwvc2FtcD46ICAgKEhvc3QtdG8tTkNQKSBDaGlwIFNlbGVjdDwvbGk+CisgIDxsaT48c2FtcD5DTEs8L3NhbXA+OiAgKEhvc3QtdG8tTkNQKSBDbG9jazwvbGk+CisgIDxsaT48c2FtcD5NT1NJPC9zYW1wPjogTWFzdGVyLU91dHB1dC9TbGF2ZS1JbnB1dDwvbGk+CisgIDxsaT48c2FtcD5NSVNPPC9zYW1wPjogTWFzdGVyLUlucHV0L1NsYXZlLU91dHB1dDwvbGk+CisgIDxsaT48c2FtcD5JJiM3NzM7TiYjNzczO1QmIzc3Mzs8L3NhbXA+OiAgKE5DUC10by1Ib3N0KSBIb3N0IEludGVycnVwdDwvbGk+CisgIDxsaT48c2FtcD5SJiM3NzM7RSYjNzczO1MmIzc3Mzs8L3NhbXA+OiAgKEhvc3QtdG8tTkNQKSBOQ1AgSGFyZHdhcmUgUmVzZXQ8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjIucC4zIj5UaGUgPHNhbXA+SSYjNzczO04mIzc3MztUJiM3NzM7PC9zYW1wPiBzaWduYWwgaXMgdXNlZCBieSB0aGUgTkNQIHRvIGluZGljYXRlIHRvIHRoZSBob3N0IHRoYXQgdGhlIE5DUCBoYXMgZnJhbWVzIHBlbmRpbmcgdG8gc2VuZCB0byBpdC4gV2hlbiBhc3NlcnRlZCwgdGhlIGhvc3QgU0hPVUxEIGluaXRpYXRlIGEgU1BJIHRyYW5zYWN0aW9uIGluIGEgdGltZWx5IG1hbm5lci4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjIucC40Ij5XZSBSRUNPTU1FTkQgdGhlIGZvbGxvd2luZyBTUEkgcHJvcGVydGllczogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT48c2FtcD5DJiM3NzM7UyYjNzczOzwvc2FtcD4gaXMgYWN0aXZlIGxvdy48L2xpPgorICA8bGk+PHNhbXA+Q0xLPC9zYW1wPiBpcyBhY3RpdmUgaGlnaC48L2xpPgorICA8bGk+PHNhbXA+Q0xLPC9zYW1wPiBzcGVlZCBpcyBsYXJnZXIgdGhhbiA1MDAga0h6LjwvbGk+CisgIDxsaT5EYXRhIGlzIHZhbGlkIG9uIGxlYWRpbmcgZWRnZSBvZiA8c2FtcD5DTEs8L3NhbXA+LjwvbGk+CisgIDxsaT5EYXRhIGlzIHNlbnQgaW4gbXVsdGlwbGVzIG9mIDgtYml0cyAob2N0ZXRzKS48L2xpPgorICA8bGk+T2N0ZXRzIGFyZSBzZW50IG1vc3Qtc2lnbmlmaWNhbnQgYml0IGZpcnN0LjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi5wLjYiPlRoaXMgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbiBtYXkgYmUgYWRqdXN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBpbmRpdmlkdWFsIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBwcm9kdWN0LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4yLjEiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQS4yLjEiPkEuMi4xLjwvYT4gPGEgaHJlZj0iI3NwaS1mcmFtaW5nLXByb3RvY29sIiBpZD0ic3BpLWZyYW1pbmctcHJvdG9jb2wiPlNQSSBGcmFtaW5nIFByb3RvY29sPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLjEucC4xIj5FYWNoIFNQSSBmcmFtZSBzdGFydHMgd2l0aCBhIDUtYnl0ZSBmcmFtZSBoZWFkZXI6IDwvcD4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T2N0ZXRzOjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MTwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+MjwvdGg+CisgICAgPC90cj4KKyAgPC90aGVhZD4KKyAgPHRib2R5PgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GaWVsZHM6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5IRFI8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlJFQ1ZfTEVOPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5EQVRBX0xFTjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPkhEUjwvc2FtcD46IFRoZSBmaXJzdCBieXRlIGlzIHRoZSBoZWFkZXIgYnl0ZSAoZGVmaW5lZCBiZWxvdyk8L2xpPgorICA8bGk+PHNhbXA+UkVDVl9MRU48L3NhbXA+OiBUaGUgc2Vjb25kIGFuZCB0aGlyZCBieXRlcyBpbmRpY2F0ZSB0aGUgbGFyZ2VzdCBmcmFtZSBzaXplIHRoYXQgdGhhdCBkZXZpY2UgaXMgcmVhZHkgdG8gcmVjZWl2ZS4gSWYgemVybywgdGhlbiB0aGUgb3RoZXIgZGV2aWNlIG11c3Qgbm90IHNlbmQgYW55IGRhdGEuIChMaXR0bGUgZW5kaWFuKTwvbGk+CisgIDxsaT48c2FtcD5EQVRBX0xFTjwvc2FtcD46IFRoZSBmb3VydGggYW5kIGZpZnRoIGJ5dGVzIGluZGljYXRlIHRoZSBzaXplIG9mIHRoZSBwZW5kaW5nIGRhdGEgZnJhbWUgdG8gYmUgc2VudCB0byB0aGUgb3RoZXIgZGV2aWNlLiBJZiB0aGlzIHZhbHVlIGlzIGVxdWFsLXRvIG9yIGxlc3MtdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIG90aGVyIGRldmljZSBpcyB3aWxsaW5nIHRvIHJlY2VpdmUsIHRoZW4gdGhlIGRhdGEgb2YgdGhlIGZyYW1lIGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBoZWFkZXIuIChMaXR0bGUgRW5kaWFuKTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi4xLnAuMyI+VGhlIDxzYW1wPkhEUjwvc2FtcD4gYnl0ZSBpcyBkZWZpbmVkIGFzOiA8L3A+Cis8cHJlPgorICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNworKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8UlNUfENSQ3xDQ0Z8ICBSRVNFUlZFRCB8UEFUVEVSTnwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworPC9wcmU+Cis8cC8+CisKKzx1bD4KKyAgPGxpPjxzYW1wPlJTVDwvc2FtcD46IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoYXQgZGV2aWNlIGhhcyBiZWVuIHJlc2V0IHNpbmNlIHRoZSBsYXN0IHRpbWUgPHNhbXA+QyYjNzczO1MmIzc3Mzs8L3NhbXA+IHdhcyBhc3NlcnRlZC48L2xpPgorICA8bGk+PHNhbXA+Q1JDPC9zYW1wPjogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhhdCBkZXZpY2Ugc3VwcG9ydHMgd3JpdGluZyBhIDE2LWJpdCBDUkMgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YS4gVGhlIENSQyBsZW5ndGggaXMgTk9UIGluY2x1ZGVkIGluIERBVEFfTEVOLjwvbGk+CisgIDxsaT48c2FtcD5DQ0Y8L3NhbXA+OiAiQ1JDIENoZWNrIEZhaWx1cmUiLiBTZXQgaWYgdGhlIENSQyBjaGVjayBvbiB0aGUgbGFzdCByZWNlaXZlZCBmcmFtZSBmYWlsZWQsIGNsZWFyZWQgdG8gemVybyBvdGhlcndpc2UuIFRoaXMgYml0IGlzIG9ubHkgdXNlZCBpZiBib3RoIHNpZGVzIHN1cHBvcnQgQ1JDLjwvbGk+CisgIDxsaT48c2FtcD5SRVNFUlZFRDwvc2FtcD46IFRoZXNlIGJpdHMgYXJlIGFsbCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuIFRoZXkgTVVTVCBiZSBjbGVhcmVkIHRvIHplcm8gYW5kIE1VU1QgYmUgaWdub3JlZCBpZiBzZXQuPC9saT4KKyAgPGxpPjxzYW1wPlBBVFRFUk48L3NhbXA+OiBUaGVzZSBiaXRzIGFyZSBzZXQgdG8gYSBmaXhlZCB2YWx1ZSB0byBoZWxwIGRpc3Rpbmd1aXNoIHZhbGlkIFNQSSBmcmFtZXMgZnJvbSBnYXJiYWdlIChieSBleHBsaWNpdGx5IG1ha2luZyA8c2FtcD4weEZGPC9zYW1wPiBhbmQgPHNhbXA+MHgwMDwvc2FtcD4gaW52YWxpZCB2YWx1ZXMpLiBCaXQgNiBNVVNUIGJlIHNldCB0byBiZSBvbmUgYW5kIGJpdCA3IE1VU1QgYmUgY2xlYXJlZCAoMCkuIEEgZnJhbWUgcmVjZWl2ZWQgdGhhdCBoYXMgYW55IG90aGVyIHZhbHVlcyBmb3IgdGhlc2UgYml0cyBNVVNUIGJlIGRyb3BwZWQuPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLjEucC41Ij5QcmlvciB0byBhIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgZnJhbWUsIHRoZSBtYXN0ZXIgTUFZIHNlbmQgYSA1LW9jdGV0IGZyYW1lIHdpdGggemVyb3MgZm9yIGJvdGggdGhlIG1heCByZWNlaXZlIGZyYW1lIHNpemUgYW5kIHRoZSB0aGUgY29udGFpbmVkIGZyYW1lIGxlbmd0aC4gVGhpcyB3aWxsIGluZHVjZSB0aGUgc2xhdmUgZGV2aWNlIHRvIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGl0IHdhbnRzIHRvIHNlbmQgKGlmIGFueSkgYW5kIGluZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lIGl0IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGF0IHRoZSBtb21lbnQuICBUaGlzIGFsbG93cyB0aGUgbWFzdGVyIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIHRoZSBtYXN0ZXIgaGFzIGEgZnJhbWUgdG8gc2VuZCBpdCBjYW4ganVzdCBnbyBhaGVhZCBhbmQgc2VuZCBhIGZyYW1lIG9mIHRoYXQgbGVuZ3RoIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGZyYW1lIHdhcyBhY2NlcHRlZCBieSBjaGVja2luZyB0aGF0IHRoZSA8c2FtcD5SRUNWX0xFTjwvc2FtcD4gZnJvbSB0aGUgc2xhdmUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGZyYW1lIHRoZSBtYXN0ZXIganVzdCB0cmllZCB0byBzZW5kLiBJZiB0aGUgPHNhbXA+UkVDVl9MRU48L3NhbXA+IGlzIHNtYWxsZXIgdGhlbiB0aGUgZnJhbWUgd2Fzbid0IGFjY2VwdGVkIGFuZCB3aWxsIG5lZWQgdG8gYmUgdHJhbnNtaXR0ZWQgYWdhaW4uICA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS4yLjEucC42Ij5UaGlzIHByb3RvY29sIGNhbiBiZSB1c2VkIGVpdGhlciB1bmlkaXJlY3Rpb25hbGx5IG9yIGJpZGlyZWN0aW9uYWxseSwgZGV0ZXJtaW5lZCBieSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi4xLnAuNyI+SWYgdGhlIHRoZSBtYXN0ZXIgbm90aWNlcyA8c2FtcD5QQVRURVJOPC9zYW1wPiBpcyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlIG1hc3RlciBzaG91bGQgY29uc2lkZXIgdGhlIHRyYW5zYWN0aW9uIHRvIGhhdmUgZmFpbGVkIGFuZCB0cnkgYWdhaW4gYWZ0ZXIgMTAgbWlsbGlzZWNvbmRzLCByZXRyeWluZyB1cCB0byAyMDAgdGltZXMuIEFmdGVyIHVuc3VjY2Vzc2Z1bGx5IHRyeWluZyAyMDAgdGltZXMgaW4gYSByb3csIHRoZSBtYXN0ZXIgTUFZIHRha2UgYXBwcm9wcmlhdGUgcmVtZWRpYWwgYWN0aW9uIChsaWtlIGEgTkNQIGhhcmR3YXJlIHJlc2V0LCBvciBpbmRpY2F0aW5nIGEgY29tbXVuaWNhdGlvbiBmYWlsdXJlIHRvIGEgdXNlciBpbnRlcmZhY2UpLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkEuMi4xLnAuOCI+QXQgdGhlIGVuZCBvZiB0aGUgZGF0YSBvZiBhIGZyYW1lIGlzIGFuIG9wdGlvbmFsIDE2LWJpdCBDUkMsIHN1cHBvcnQgZm9yIHdoaWNoIGlzIGluZGljYXRlZCBieSB0aGUgPHNhbXA+Q1JDPC9zYW1wPiBiaXQgb2YgdGhlIDxzYW1wPkhEUjwvc2FtcD4gYnl0ZSBiZWluZyBzZXQuIElmIHRoZXNlIGJpdHMgYXJlIHNldCBmb3IgYm90aCB0aGUgbWFzdGVyIGFuZCBzbGF2ZSBmcmFtZXMsIHRoZW4gQ1JDIGNoZWNraW5nIGlzIGVuYWJsZWQgb24gYm90aCBzaWRlcywgZWZmZWN0aXZlbHkgcmVxdWlyaW5nIHRoYXQgZnJhbWUgc2l6ZXMgYmUgdHdvIGJ5dGVzIGxvbmdlciB0aGFuIHdvdWxkIGJlIG90aGVyd2lzZSByZXF1aXJlZC4gVGhlIENSQyBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSB1c2VkIGZvciB0aGUgQ1JDIGNhbGN1bGF0aW9uIGluIEhETEMtTGl0ZSAoU2VlIDxhIGhyZWY9IiNoZGxjLWxpdGUiPkFwcGVuZGl4IEEuMS4yPC9hPikuICBXaGVuIGJvdGggb2YgdGhlIDxzYW1wPkNSQzwvc2FtcD4gYml0cyBhcmUgc2V0LCBib3RoIHNpZGVzIG11c3QgdmVyaWZ5IHRoYXQgdGhlIDxzYW1wPkNSQzwvc2FtcD4gaXMgdmFsaWQgYmVmb3JlIGFjY2VwdGluZyB0aGUgZnJhbWUuIElmIG5vdCBlbm91Z2ggYnl0ZXMgd2VyZSBjbG9ja2VkIG91dCBmb3IgdGhlIENSQyB0byBiZSByZWFkLCB0aGVuIHRoZSBmcmFtZSBtdXN0IGJlIGlnbm9yZWQuIElmIGVub3VnaCBieXRlcyB3ZXJlIGNsb2NrZWQgb3V0IHRvIHBlcmZvcm0gYSBDUkMgY2hlY2ssIGJ1dCB0aGUgQ1JDIGNoZWNrIGZhaWxzLCB0aGVuIHRoZSBmcmFtZSBtdXN0IGJlIHJlamVjdGVkIGFuZCB0aGUgPHNhbXA+Q1JDX0ZBSUw8L3NhbXA+IGJpdCBvbiB0aGUgbmV4dCBmcmFtZSAoYW5kIE9OTFkgdGhlIG5leHQgZnJhbWUpIE1VU1QgYmUgc2V0LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS4zIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuMyI+QS4zLjwvYT4gPGEgaHJlZj0iI2kyYy1yZWNvbW1lbmRhdGlvbnMiIGlkPSJpMmMtcmVjb21tZW5kYXRpb25zIj5JJiMxNzg7QyBSZWNvbW1lbmRhdGlvbnM8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5BLjMucC4xIj5UQkQgPC9wPgorPHA+CisgIDxhIGlkPSJDUkVGNSIgY2xhc3M9ImluZm8iPltDUkVGNV08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IEl0IG1heSBtYWtlIHNlbnNlIHRvIGhhdmUgYSBsb29rIGF0IHdoYXQgQmx1ZXRvb3RoIEhDSSBpcyBkb2luZyBmb3IgbmF0aXZlIEkmIzE3ODtDIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC48L3NwYW4+PC9hPgorPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQS40Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkEuNCI+QS40LjwvYT4gPGEgaHJlZj0iI25hdGl2ZS11c2ItcmVjb21tZW5kYXRpb25zIiBpZD0ibmF0aXZlLXVzYi1yZWNvbW1lbmRhdGlvbnMiPk5hdGl2ZSBVU0IgUmVjb21tZW5kYXRpb25zPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQS40LnAuMSI+VEJEIDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjYiIGNsYXNzPSJpbmZvIj5bQ1JFRjZdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMgZG9pbmcgZm9yIG5hdGl2ZSBVU0IgZnJhbWluZyBhbmQgZ28gd2l0aCB0aGF0Ljwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIiPkFwcGVuZGl4IEIuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3JzIiBpZD0idGVzdC12ZWN0b3JzIj5UZXN0IFZlY3RvcnM8L2E+PC9oMT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkIuMSI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjEiPkIuMS48L2E+IDxhIGhyZWY9IiN0ZXN0LXZlY3Rvci1wYWNrZWQtdW5zaWduZWQtaW50ZWdlciIgaWQ9InRlc3QtdmVjdG9yLXBhY2tlZC11bnNpZ25lZC1pbnRlZ2VyIj5UZXN0IFZlY3RvcjogUGFja2VkIFVuc2lnbmVkIEludGVnZXI8L2E+PC9oMT4KKzx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJ0dCBmdWxsIGNlbnRlciI+CisgIDx0aGVhZD4KKyAgICA8dHI+CisgICAgICA8dGggY2xhc3M9InJpZ2h0Ij5EZWNpbWFsIFZhbHVlPC90aD4KKyAgICAgIDx0aCBjbGFzcz0ibGVmdCI+UGFja2V0IE9jdGV0IEVuY29kaW5nPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJyaWdodCI+MDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD4wMDwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij4xPC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPjAxPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjEyNzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD43Rjwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij4xMjg8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij4KKyAgICAgICAgPHNhbXA+ODAgMDE8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJyaWdodCI+MTI5PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPjgxIDAxPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjEsMzM3PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPkI5IDBBPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjE2LDM4MzwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD5GRiA3Rjwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9InJpZ2h0Ij4xNiwzODQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJsZWZ0Ij4KKyAgICAgICAgPHNhbXA+ODAgODAgMDE8L3NhbXA+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJyaWdodCI+MTYsMzg1PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVmdCI+CisgICAgICAgIDxzYW1wPjgxIDgwIDAxPC9zYW1wPgorICAgICAgPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0icmlnaHQiPjIsMDk3LDE1MTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlZnQiPgorICAgICAgICA8c2FtcD5GRiBGRiA3Rjwvc2FtcD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKzwvdGFibGU+Cis8cD4KKyAgPGEgaWQ9IkNSRUY3IiBjbGFzcz0iaW5mbyI+W0NSRUY3XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogVGhlIFBVSSB0ZXN0LXZlY3RvciBlbmNvZGluZ3MgbmVlZCB0byBiZSB2ZXJpZmllZC48L3NwYW4+PC9hPgorPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi4yIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMiI+Qi4yLjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLXJlc2V0LWNvbW1hbmQiIGlkPSJ0ZXN0LXZlY3Rvci1yZXNldC1jb21tYW5kIj5UZXN0IFZlY3RvcjogUmVzZXQgQ29tbWFuZDwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiAwPC9saT4KKyAgPGxpPkNNRDogMSAoPHNhbXA+Q01EX1JFU0VUPC9zYW1wPik8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5CLjIucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzgwIDAxCis8L3ByZT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkIuMyI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5CLjMiPkIuMy48L2E+IDxhIGhyZWY9IiN0ZXN0LXZlY3Rvci1yZXNldC1ub3RpZmljYXRpb24iIGlkPSJ0ZXN0LXZlY3Rvci1yZXNldC1ub3RpZmljYXRpb24iPlRlc3QgVmVjdG9yOiBSZXNldCBOb3RpZmljYXRpb248L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+TkxJOiAwPC9saT4KKyAgPGxpPlRJRDogMDwvbGk+CisgIDxsaT5DTUQ6IDYgKDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDAgKDxzYW1wPlBST1BfTEFTVF9TVEFUVVM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogMTE0ICg8c2FtcD5TVEFUVVNfUkVTRVRfU09GVFdBUkU8L3NhbXA+KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMy5wLjIiPkZyYW1lOiA8L3A+Cis8cHJlPgorODAgMDYgMDAgNzIKKzwvcHJlPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi40Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuNCI+Qi40LjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLXNjYW4tYmVhY29uIiBpZD0idGVzdC12ZWN0b3Itc2Nhbi1iZWFjb24iPlRlc3QgVmVjdG9yOiBTY2FuIEJlYWNvbjwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiAwPC9saT4KKyAgPGxpPkNNRDogNyAoPHNhbXA+Q01EX1ZBTFVFX0lOU0VSVEVEPC9zYW1wPik8L2xpPgorICA8bGk+UFJPUDogNTEgKDxzYW1wPlBST1BfTUFDX1NDQU5fQkVBQ09OPC9zYW1wPik8L2xpPgorICA8bGk+VkFMVUU6IFN0cnVjdHVyZSwgZW5jb2RlZCBhcyA8c2FtcD5DY3QoRVNTYyl0KGlDVWQpPC9zYW1wPiA8dWw+PGxpPkNIQU46IDE1PC9saT48bGk+UlNTSTogLTYwZEJtPC9saT48bGk+TUFDX0RBVEE6ICgwRCAwMCBCNiA0MCBENCA4QyBFOSAzOCBGOSA1MiBGRiBGRiBEMiAwNCAwMCkgPHVsPjxsaT5Mb25nIGFkZHJlc3M6IEI2OjQwOkQ0OjhDOkU5OjM4OkY5OjUyPC9saT48bGk+U2hvcnQgYWRkcmVzczogMHhGRkZGPC9saT48bGk+UEFOLUlEOiAweDA0RDI8L2xpPjxsaT5MUUk6IDA8L2xpPjwvdWw+PC9saT48bGk+TkVUX0RBVEE6ICgxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQSBGRSkgPHVsPjxsaT5Qcm90b2NvbCBOdW1iZXI6IDM8L2xpPjxsaT5GbGFnczogMHgyMDwvbGk+PGxpPk5ldHdvcmsgTmFtZTogPHNhbXA+c3BpbmVsPC9zYW1wPjwvbGk+PGxpPlhQQU5JRDogPHNhbXA+REUgQUQgMDAgQkUgRUYgMDAgQ0EgRkU8L3NhbXA+PC9saT48L3VsPjwvbGk+PC91bD48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5CLjQucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzgwIDA3IDMzIDBGIEM0IDBEIDAwIEI2IDQwIEQ0IDhDIEU5IDM4IEY5IDUyIEZGIEZGIEQyIDA0IDAwCisxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQQorRkUKKzwvcHJlPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi41Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuNSI+Qi41LjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLWluYm91bmQtaXB2Ni1wYWNrZXQiIGlkPSJ0ZXN0LXZlY3Rvci1pbmJvdW5kLWlwdjYtcGFja2V0Ij5UZXN0IFZlY3RvcjogSW5ib3VuZCBJUHY2IFBhY2tldDwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuNS5wLjEiPkNNRF9WQUxVRV9JUyhQUk9QX1NUUkVBTV9ORVQpIDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjgiIGNsYXNzPSJpbmZvIj5bQ1JFRjhdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjYiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi42Ij5CLjYuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3Itb3V0Ym91bmQtaXB2Ni1wYWNrZXQiIGlkPSJ0ZXN0LXZlY3Rvci1vdXRib3VuZC1pcHY2LXBhY2tldCI+VGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0PC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQi42LnAuMSI+Q01EX1ZBTFVFX1NFVChQUk9QX1NUUkVBTV9ORVQpIDwvcD4KKzxwPgorICA8YSBpZD0iQ1JFRjkiIGNsYXNzPSJpbmZvIj5bQ1JFRjldPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjciPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi43Ij5CLjcuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItZmV0Y2gtbGlzdC1vZi1vbm1lc2gtbmV0d29ya3MiIGlkPSJ0ZXN0LXZlY3Rvci1mZXRjaC1saXN0LW9mLW9ubWVzaC1uZXR3b3JrcyI+VGVzdCBWZWN0b3I6IEZldGNoIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrczwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA0PC9saT4KKyAgPGxpPkNNRDogMiAoPHNhbXA+Q01EX1ZBTFVFX0dFVDwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuNy5wLjIiPkZyYW1lOiA8L3A+Cis8cHJlPgorODQgMDIgNUEKKzwvcHJlPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQi44Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuOCI+Qi44LjwvYT4gPGEgaHJlZj0iI3Rlc3QtdmVjdG9yLXJldHVybmVkLWxpc3Qtb2Ytb25tZXNoLW5ldHdvcmtzIiBpZD0idGVzdC12ZWN0b3ItcmV0dXJuZWQtbGlzdC1vZi1vbm1lc2gtbmV0d29ya3MiPlRlc3QgVmVjdG9yOiBSZXR1cm5lZCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3M8L2E+PC9oMT4KKzxwLz4KKworPHVsPgorICA8bGk+TkxJOiAwPC9saT4KKyAgPGxpPlRJRDogNDwvbGk+CisgIDxsaT5DTUQ6IDYgKDxzYW1wPkNNRF9WQUxVRV9JUzwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogQXJyYXkgb2Ygc3RydWN0dXJlcywgZW5jb2RlZCBhcyA8c2FtcD5BKHQoNkNiQykpPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5JUHY2IFByZWZpeDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+UHJlZml4IExlbmd0aDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+U3RhYmxlIEZsYWc8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk90aGVyIEZsYWdzPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjIwMDE6REI4OjE6OjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+NjQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRydWU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPj8/PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4yMDAxOkRCODoyOjo8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjY0PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj5GYWxzZTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Pz88L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuOC5wLjIiPkZyYW1lOiA8L3A+Cis8cHJlPgorODQgMDYgNUEgMTMgMDAgMjAgMDEgMEQgQjggMDAgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKzAwIDQwIDAxID8/IDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCiswMCAwMCA0MCAwMCA/PworPC9wcmU+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjkiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi45Ij5CLjkuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItYWRkaW5nLWFuLW9ubWVzaC1uZXR3b3JrIiBpZD0idGVzdC12ZWN0b3ItYWRkaW5nLWFuLW9ubWVzaC1uZXR3b3JrIj5UZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA1PC9saT4KKyAgPGxpPkNNRDogNCAoPHNhbXA+Q01EX1ZBTFVFX0lOU0VSVDwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogU3RydWN0dXJlLCBlbmNvZGVkIGFzIDxzYW1wPjZDYkNiPC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InR0IGZ1bGwgY2VudGVyIj4KKyAgPHRoZWFkPgorICAgIDx0cj4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5JUHY2IFByZWZpeDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+UHJlZml4IExlbmd0aDwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+U3RhYmxlIEZsYWc8L3RoPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPk90aGVyIEZsYWdzPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHk+CisgICAgPHRyPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPjIwMDE6REI4OjM6OjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+NjQ8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPlRydWU8L3RkPgorICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiPj8/PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5PgorPC90YWJsZT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5CLjkucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg1IDAzIDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCiswMSA/PyAwMQorPC9wcmU+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxMCIgY2xhc3M9ImluZm8iPltDUkVGMTBdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjEwIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMTAiPkIuMTAuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItaW5zZXJ0aW9uLW5vdGlmaWNhdGlvbi1vZi1hbi1vbm1lc2gtbmV0d29yayIgaWQ9InRlc3QtdmVjdG9yLWluc2VydGlvbi1ub3RpZmljYXRpb24tb2YtYW4tb25tZXNoLW5ldHdvcmsiPlRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yazwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA1PC9saT4KKyAgPGxpPkNNRDogNyAoPHNhbXA+Q01EX1ZBTFVFX0lOU0VSVEVEPC9zYW1wPik8L2xpPgorICA8bGk+UFJPUDogOTAgKDxzYW1wPlBST1BfVEhSRUFEX09OX01FU0hfTkVUUzwvc2FtcD4pPC9saT4KKyAgPGxpPlZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgPHNhbXA+NkNiQ2I8L3NhbXA+PC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0idHQgZnVsbCBjZW50ZXIiPgorICA8dGhlYWQ+CisgICAgPHRyPgorICAgICAgPHRoIGNsYXNzPSJjZW50ZXIiPklQdjYgUHJlZml4PC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5QcmVmaXggTGVuZ3RoPC90aD4KKyAgICAgIDx0aCBjbGFzcz0iY2VudGVyIj5TdGFibGUgRmxhZzwvdGg+CisgICAgICA8dGggY2xhc3M9ImNlbnRlciI+T3RoZXIgRmxhZ3M8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keT4KKyAgICA8dHI+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+MjAwMTpEQjg6Mzo6PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj42NDwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+VHJ1ZTwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImNlbnRlciI+Pz88L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cis8L3RhYmxlPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMTAucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg1IDA3IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCiswMSA/PyAwMQorPC9wcmU+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxMSIgY2xhc3M9ImluZm8iPltDUkVGMTFdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5CLjExIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkIuMTEiPkIuMTEuPC9hPiA8YSBocmVmPSIjdGVzdC12ZWN0b3ItcmVtb3ZpbmctYS1sb2NhbC1vbm1lc2gtbmV0d29yayIgaWQ9InRlc3QtdmVjdG9yLXJlbW92aW5nLWEtbG9jYWwtb25tZXNoLW5ldHdvcmsiPlRlc3QgVmVjdG9yOiBSZW1vdmluZyBhIGxvY2FsIG9uLW1lc2ggbmV0d29yazwvYT48L2gxPgorPHAvPgorCis8dWw+CisgIDxsaT5OTEk6IDA8L2xpPgorICA8bGk+VElEOiA2PC9saT4KKyAgPGxpPkNNRDogNSAoPHNhbXA+Q01EX1ZBTFVFX1JFTU9WRTwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogSVB2NiBQcmVmaXggPHNhbXA+MjAwMTpEQjg6Mzo6PC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMTEucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg2IDA1IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCis8L3ByZT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkIuMTIiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQi4xMiI+Qi4xMi48L2E+IDxhIGhyZWY9IiN0ZXN0LXZlY3Rvci1yZW1vdmFsLW5vdGlmaWNhdGlvbi1vZi1hbi1vbm1lc2gtbmV0d29yayIgaWQ9InRlc3QtdmVjdG9yLXJlbW92YWwtbm90aWZpY2F0aW9uLW9mLWFuLW9ubWVzaC1uZXR3b3JrIj5UZXN0IFZlY3RvcjogUmVtb3ZhbCBub3RpZmljYXRpb24gb2YgYW4gb24tbWVzaCBuZXR3b3JrPC9hPjwvaDE+Cis8cC8+CisKKzx1bD4KKyAgPGxpPk5MSTogMDwvbGk+CisgIDxsaT5USUQ6IDY8L2xpPgorICA8bGk+Q01EOiA4ICg8c2FtcD5DTURfVkFMVUVfUkVNT1ZFRDwvc2FtcD4pPC9saT4KKyAgPGxpPlBST1A6IDkwICg8c2FtcD5QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L3NhbXA+KTwvbGk+CisgIDxsaT5WQUxVRTogSVB2NiBQcmVmaXggPHNhbXA+MjAwMTpEQjg6Mzo6PC9zYW1wPjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkIuMTIucC4yIj5GcmFtZTogPC9wPgorPHByZT4KKzg2IDA4IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCis8L3ByZT4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkMiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQyI+QXBwZW5kaXggQy48L2E+IDxhIGhyZWY9IiNleGFtcGxlLXNlc3Npb25zIiBpZD0iZXhhbXBsZS1zZXNzaW9ucyI+RXhhbXBsZSBTZXNzaW9uczwvYT48L2gxPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy4xIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMSI+Qy4xLjwvYT4gPGEgaHJlZj0iI25jcC1pbml0aWFsaXphdGlvbiIgaWQ9Im5jcC1pbml0aWFsaXphdGlvbiI+TkNQIEluaXRpYWxpemF0aW9uPC9hPjwvaDE+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxMiIgY2xhc3M9ImluZm8iPltDUkVGMTJdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS48L3NwYW4+PC9hPgorPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMS5wLjIiPkNoZWNrIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBzdXBwb3J0ZWQ6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX0dFVDpQUk9QX1BST1RPQ09MX1ZFUlNJT048L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfUFJPVE9DT0xfVkVSU0lPTjwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMS5wLjQiPkNoZWNrIHRoZSBOQ1AgdmVyc2lvbiB0byBzZWUgaWYgYSBmaXJtd2FyZSB1cGRhdGUgbWF5IGJlIG5lY2Vzc2FyeTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfR0VUOlBST1BfTkNQX1ZFUlNJT048L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkNQX1ZFUlNJT048L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEucC42Ij5DaGVjayBpbnRlcmZhY2UgdHlwZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyB3aGF0IHdlIGV4cGVjdDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfR0VUOlBST1BfSU5URVJGQUNFX1RZUEU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfSU5URVJGQUNFX1RZUEU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEucC44Ij5JZiB0aGUgaG9zdCBzdXBwb3J0cyB1c2luZyB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMsIHRoZSB2ZW5kb3Igc2hvdWxkIGJlIHZlcmlmaWVkIGJlZm9yZSB1c2luZyB0aGVtOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9HRVQ6UFJPUF9WRU5ET1JfSUQ8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfVkVORE9SX0lEPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xLnAuMTAiPkZldGNoIHRoZSBjYXBhYmlsaXR5IGxpc3Qgc28gdGhhdCB3ZSBrbm93IHdoYXQgZmVhdHVyZXMgdGhpcyBOQ1Agc3VwcG9ydHM6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX0dFVDpQUk9QX0NBUFM8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfQ0FQUzwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMS5wLjEyIj5JZiB0aGUgTkNQIHN1cHBvcnRzIENBUF9ORVRfU0FWRSwgdGhlbiB3ZSBnbyBhaGVhZCBhbmQgcmVjYWxsIHRoZSBuZXR3b3JrOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9ORVRfUkVDQUxMPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5DLjIiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy4yIj5DLjIuPC9hPiA8YSBocmVmPSIjYXR0YWNoaW5nLXRvLWEtbmV0d29yayIgaWQ9ImF0dGFjaGluZy10by1hLW5ldHdvcmsiPkF0dGFjaGluZyB0byBhIG5ldHdvcms8L2E+PC9oMT4KKzxwPgorICA8YSBpZD0iQ1JFRjEzIiBjbGFzcz0iaW5mbyI+W0NSRUYxM108c3BhbiBjbGFzcz0iaW5mbyI+UlE6IEZJWE1FOiBUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpbmNvbXBsZXRlLjwvc3Bhbj48L2E+Cis8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4yLnAuMiI+V2UgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBOQ1AgaXMgbm90IGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMi5wLjMiPlNldCB0aGUgbmV0d29yayBwcm9wZXJ0aWVzLCBpZiB0aGV5IHdlcmUgbm90IGFscmVhZHkgc2V0OiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9QSFlfQ0hBTjwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9QSFlfQ0hBTjwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1hQQU5JRDwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfWFBBTklEPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfMTVfNF9QQU5JRDwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9NQUNfMTVfNF9QQU5JRDwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX05FVFdPUktfTkFNRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfTkVUV09SS19OQU1FPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfTUFTVEVSX0tFWTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfTUFTVEVSX0tFWTwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUjwvbGk+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMi5wLjUiPkJyaW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1cDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX0lGX1VQOlRSVUU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX0lGX1VQOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjIucC43Ij5CcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjIucC45Ij5Tb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9ST0xFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQ8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUzwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy4zIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuMyI+Qy4zLjwvYT4gPGEgaHJlZj0iI3N1Y2Nlc3NmdWxseS1qb2luaW5nLWEtcHJlZXhpc3RpbmctbmV0d29yayIgaWQ9InN1Y2Nlc3NmdWxseS1qb2luaW5nLWEtcHJlZXhpc3RpbmctbmV0d29yayI+U3VjY2Vzc2Z1bGx5IGpvaW5pbmcgYSBwcmUtZXhpc3RpbmcgbmV0d29yazwvYT48L2gxPgorPHA+CisgIDxhIGlkPSJDUkVGMTQiIGNsYXNzPSJpbmZvIj5bQ1JFRjE0XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuPC9zcGFuPjwvYT4KKzwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjMucC4yIj5UaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpZGVudGljYWwgdG8gdGhlIGFib3ZlIHNlc3Npb24gdXAgdG8gdGhlIHBvaW50IHdoZXJlIHdlIHNldCBQUk9QX05FVF9JRl9VUCB0byB0cnVlLiBGcm9tIHRoZXJlLCB0aGUgYmVoYXZpb3IgY2hhbmdlcy4gIDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjMucC40Ij5CcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUU8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjMucC42Ij5Tb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9ST0xFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQ8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUzwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMy5wLjgiPk5vdyBsZXQncyBzYXZlIHRoZSBuZXR3b3JrIHNldHRpbmdzIHRvIE5WUkFNOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9ORVRfU0FWRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy40Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNCI+Qy40LjwvYT4gPGEgaHJlZj0iI3Vuc3VjY2Vzc2Z1bGx5LWpvaW5pbmctYS1wcmVleGlzdGluZy1uZXR3b3JrIiBpZD0idW5zdWNjZXNzZnVsbHktam9pbmluZy1hLXByZWV4aXN0aW5nLW5ldHdvcmsiPlVuc3VjY2Vzc2Z1bGx5IGpvaW5pbmcgYSBwcmUtZXhpc3RpbmcgbmV0d29yazwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNC5wLjEiPlRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgc2Vzc2lvbiB1cCB0byB0aGUgcG9pbnQgd2hlcmUgd2Ugc2V0IFBST1BfTkVUX0lGX1VQIHRvIHRydWUuIEZyb20gdGhlcmUsIHRoZSBiZWhhdmlvciBjaGFuZ2VzLiAgPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORzpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNC5wLjMiPkJyaW5nIHRoZSByb3V0aW5nIHN0YWNrIHVwOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNC5wLjUiPlNvbWUgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9tIHRoZSBOQ1A6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTEFTVF9TVEFUVVM6U1RBVFVTX0pPSU5fTk9fUEVFUlM8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOkZBTFNFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5DLjUiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy41Ij5DLjUuPC9hPiA8YSBocmVmPSIjZGV0YWNoaW5nLWZyb20tYS1uZXR3b3JrIiBpZD0iZGV0YWNoaW5nLWZyb20tYS1uZXR3b3JrIj5EZXRhY2hpbmcgZnJvbSBhIG5ldHdvcms8L2E+PC9oMT4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjUucC4xIj5UQkQgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy42Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuNiI+Qy42LjwvYT4gPGEgaHJlZj0iI2F0dGFjaGluZy10by1hLXNhdmVkLW5ldHdvcmsiIGlkPSJhdHRhY2hpbmctdG8tYS1zYXZlZC1uZXR3b3JrIj5BdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrPC9hPjwvaDE+Cis8cD4KKyAgPGEgaWQ9IkNSRUYxNSIgY2xhc3M9ImluZm8iPltDUkVGMTVdPHNwYW4gY2xhc3M9ImluZm8iPlJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS48L3NwYW4+PC9hPgorPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNi5wLjIiPlJlY2FsbCB0aGUgc2F2ZWQgbmV0d29yayBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc286IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX05FVF9SRUNBTEw8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjYucC40Ij5CcmluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXA6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9JRl9VUDpUUlVFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy42LnAuNiI+QnJpbmcgdGhlIHJvdXRpbmcgc3RhY2sgdXA6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX05FVF9TVEFDS19VUDpUUlVFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy42LnAuOCI+U29tZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gdGhlIE5DUDogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9ORVRfUEFSVElUSU9OX0lEPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFM8L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkMuNyI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5DLjciPkMuNy48L2E+IDxhIGhyZWY9IiNuY3Atc29mdHdhcmUtcmVzZXQiIGlkPSJuY3Atc29mdHdhcmUtcmVzZXQiPk5DUCBTb2Z0d2FyZSBSZXNldDwvYT48L2gxPgorPHA+CisgIDxhIGlkPSJDUkVGMTYiIGNsYXNzPSJpbmZvIj5bQ1JFRjE2XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuPC9zcGFuPjwvYT4KKzwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1JFU0VUPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX0xBU1RfU1RBVFVTOlNUQVRVU19SRVNFVF9TT0ZUV0FSRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuNy5wLjMiPlRoZW4ganVtcCB0byA8YSBocmVmPSIjbmNwLWluaXRpYWxpemF0aW9uIj5BcHBlbmRpeCBDLjE8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguQy44Ij48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkMuOCI+Qy44LjwvYT4gPGEgaHJlZj0iI2FkZGluZy1hbi1vbm1lc2gtcHJlZml4IiBpZD0iYWRkaW5nLWFuLW9ubWVzaC1wcmVmaXgiPkFkZGluZyBhbiBvbi1tZXNoIHByZWZpeDwvYT48L2gxPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuOC5wLjEiPlRCRCA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5DLjkiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy45Ij5DLjkuPC9hPiA8YSBocmVmPSIjZW50ZXJpbmctbG93cG93ZXItbW9kZXMiIGlkPSJlbnRlcmluZy1sb3dwb3dlci1tb2RlcyI+RW50ZXJpbmcgbG93LXBvd2VyIG1vZGVzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy45LnAuMSI+VEJEIDwvcD4KKzxoMSBpZD0icmZjLmFwcGVuZGl4LkMuMTAiPjxhIGhyZWY9IiNyZmMuYXBwZW5kaXguQy4xMCI+Qy4xMC48L2E+IDxhIGhyZWY9IiNzbmlmZmluZy1yYXctcGFja2V0cyIgaWQ9InNuaWZmaW5nLXJhdy1wYWNrZXRzIj5TbmlmZmluZyByYXcgcGFja2V0czwvYT48L2gxPgorPHA+CisgIDxhIGlkPSJDUkVGMTciIGNsYXNzPSJpbmZvIj5bQ1JFRjE3XTxzcGFuIGNsYXNzPSJpbmZvIj5SUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuPC9zcGFuPjwvYT4KKzwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEwLnAuMiI+VGhpcyBhc3N1bWVzIHRoYXQgdGhlIE5DUCBoYXMgYmVlbiBpbml0aWFsaXplZC4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEwLnAuMyI+T3B0aW9uYWxseSBzZXQgdGhlIGNoYW5uZWw6IDwvcD4KKzxwLz4KKworPHVsPgorICA8bGk+Q01EX1ZBTFVFX1NFVDpQUk9QX1BIWV9DSEFOOng8L2xpPgorICA8bGk+Q01EX1ZBTFVFX0lTOlBST1BfUEhZX0NIQU48L2xpPgorPC91bD4KKworPHA+IDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5DLjEwLnAuNSI+U2V0IHRoZSBmaWx0ZXIgbW9kZTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTUFDX1BST01JU0NVT1VTX01PREU6TUFDX1BST01JU0NVT1VTX01PREVfTU9OSVRPUjwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERTpNQUNfUFJPTUlTQ1VPVVNfTU9ERV9NT05JVE9SPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xMC5wLjciPkVuYWJsZSB0aGUgcmF3IHN0cmVhbTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRDpUUlVFPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ6VFJVRTwvbGk+Cis8L3VsPgorCis8cD4gPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkMuMTAucC45Ij5FbmFibGUgdGhlIFBIWSBkaXJlY3RseTogPC9wPgorPHAvPgorCis8dWw+CisgIDxsaT5DTURfVkFMVUVfU0VUOlBST1BfUEhZX0VOQUJMRUQ6VFJVRTwvbGk+CisgIDxsaT5DTURfVkFMVUVfSVM6UFJPUF9QSFlfRU5BQkxFRDpUUlVFPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xMC5wLjExIj5Ob3cgd2Ugd2lsbCBnZXQgcmF3IDgwMi4xNS40IHBhY2tldHMgYXN5bmNocm9ub3VzbHkgb24gUFJPUF9TVFJFQU1fUkFXOiA8L3A+Cis8cC8+CisKKzx1bD4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uPC9saT4KKyAgPGxpPkNNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uPC9saT4KKzwvdWw+CisKKzxwPiA8L3A+Cis8cCBpZD0icmZjLnNlY3Rpb24uQy4xMC5wLjEzIj5UaGlzIG1vZGUgbWF5IGJlIGVudGVyZWQgZXZlbiB3aGVuIGFzc29jaWF0ZWQgd2l0aCBhIG5ldHdvcmsuICBJbiB0aGF0IGNhc2UsIHlvdSBzaG91bGQgc2V0IDxzYW1wPlBST1BfTUFDX1BST01JU0NVT1VTX01PREU8L3NhbXA+IHRvIDxzYW1wPk1BQ19QUk9NSVNDVU9VU19NT0RFX1BST01JU0NVT1VTPC9zYW1wPiBvciA8c2FtcD5NQUNfUFJPTUlTQ1VPVVNfTU9ERV9OT1JNQUw8L3NhbXA+LCBzbyB0aGF0IHlvdSBjYW4gYXZvaWQgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBvdGhlciBuZXR3b3JrcyBvciB0aGF0IGFyZSBkZXN0aW5lZCBmb3Igb3RoZXIgbm9kZXMuICA8L3A+Cis8aDEgaWQ9InJmYy5hcHBlbmRpeC5EIj48YSBocmVmPSIjcmZjLmFwcGVuZGl4LkQiPkFwcGVuZGl4IEQuPC9hPiA8YSBocmVmPSIjZ2xvc3NhcnkiIGlkPSJnbG9zc2FyeSI+R2xvc3Nhcnk8L2E+PC9oMT4KKzxwPgorICA8YSBpZD0iQ1JFRjE4IiBjbGFzcz0iaW5mbyI+W0NSRUYxOF08c3BhbiBjbGFzcz0iaW5mbyI+UlE6IEFscGhhYmV0aXplIGJlZm9yZSBmaW5hbGl6YXRpb24uPC9zcGFuPjwvYT4KKzwvcD4KKzxwLz4KKworPGRsPgorICA8ZHQ+RkNTPC9kdD4KKyAgPGRkIHN0eWxlPSJtYXJnaW4tbGVmdDogOCI+PGJyLz4gRmluYWwgQ2hlY2tzdW0uIEJ5dGVzIGFkZGVkIHRvIHRoZSBlbmQgb2YgYSBwYWNrZXQgdG8gaGVscCBkZXRlcm1pbmUgaWYgdGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aG91dCBjb3JydXB0aW9uLjwvZGQ+CisgIDxkdD5OQ1A8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBOZXR3b3JrIENvbnRyb2wgUHJvY2Vzc29yLjwvZGQ+CisgIDxkdD5OTEk8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBOZXR3b3JrIExpbmsgSWRlbnRpZmllci4gTWF5IGJlIGEgdmFsdWUgYmV0d2VlbiB6ZXJvIGFuZCB0aHJlZS4gU2VlIDxhIGhyZWY9IiNubGktbmV0d29yay1saW5rLWlkZW50aWZpZXIiPlNlY3Rpb24gMi4xLjI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvZGQ+CisgIDxkdD5PUzwvZHQ+CisgIDxkZCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDgiPjxici8+IE9wZXJhdGluZyBTeXN0ZW0sIGkuZS4gdGhlIElQdjYgbm9kZSB1c2luZyBTcGluZWwgdG8gY29udHJvbCBhbmQgbWFuYWdlIG9uZSBvciBtb3JlIG9mIGl0cyBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcy48L2RkPgorICA8ZHQ+UEhZPC9kdD4KKyAgPGRkIHN0eWxlPSJtYXJnaW4tbGVmdDogOCI+PGJyLz4gUGh5c2ljYWwgbGF5ZXIuIFJlZmVycyB0byBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgaW1wbGVtZW50YXRpb24gYW5kIG9wZXJhdGlvbiBvZiBhIG5ldHdvcmtpbmcgbWVkaXVtLjwvZGQ+CisgIDxkdD5QVUk8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBQYWNrZWQgVW5zaWduZWQgSW50ZWdlci4gQSB3YXkgdG8gc2VyaWFsaXplIGFuIHVuc2lnbmVkIGludGVnZXIgdXNpbmcgb25lLCB0d28sIG9yIHRocmVlIGJ5dGVzLiBVc2VkIHRocm91Z2hvdXQgdGhlIFNwaW5lbCBwcm90b2NvbC4gU2VlIDxhIGhyZWY9IiNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciI+U2VjdGlvbiAzLjI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvZGQ+CisgIDxkdD5USUQ8L2R0PgorICA8ZGQgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4Ij48YnIvPiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyLiBNYXkgYmUgYSB2YWx1ZSBiZXR3ZWVuIHplcm8gYW5kIGZpZnRlZW4uIFNlZSA8YSBocmVmPSIjdGlkLXRyYW5zYWN0aW9uLWlkZW50aWZpZXIiPlNlY3Rpb24gMi4xLjM8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvZGQ+Cis8L2RsPgorCis8cD4gPC9wPgorPGgxIGlkPSJyZmMuYXBwZW5kaXguRSI+PGEgaHJlZj0iI3JmYy5hcHBlbmRpeC5FIj5BcHBlbmRpeCBFLjwvYT4gPGEgaHJlZj0iI2Fja25vd2xlZGdtZW50cyIgaWQ9ImFja25vd2xlZGdtZW50cyI+QWNrbm93bGVkZ21lbnRzPC9hPjwvaDE+Cis8cCBpZD0icmZjLnNlY3Rpb24uRS5wLjEiPlRocmVhZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBUaHJlYWQgR3JvdXAsIEluYy4gIDwvcD4KKzxwIGlkPSJyZmMuc2VjdGlvbi5FLnAuMiI+U3BlY2lhbCB0aGFua3MgdG8gTmljayBCYW5rcywgSm9uYXRoYW4gSHVpLCBBYnRpbiBLZXNoYXZhcnppYW4sIFlha3VuIFh1LCBQaW90ciBTemtvdGFrLCBBcmp1bmEgU2l2YXNpdGhhbWJhcmVzYW4gYW5kIE1hcnRpbiBUdXJvbiBmb3IgdGhlaXIgc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyBhbmQgZmVlZGJhY2sgcmVsYXRlZCB0byB0aGlzIGRvY3VtZW50LiAgPC9wPgorPHAgaWQ9InJmYy5zZWN0aW9uLkUucC4zIj5UaGlzIGRvY3VtZW50IHdhcyBwcmVwYXJlZCB1c2luZyA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWlla2cvbW1hcmsiPm1tYXJrPC9hPiBieSAoTWllayBHaWViZW4pIGFuZCA8YSBocmVmPSJodHRwOi8veG1sMnJmYy5pZXRmLm9yZy8iPnhtbDJyZmMgKHZlcnNpb24gMik8L2E+LiAgPC9wPgorPGgxIGlkPSJyZmMuYXV0aG9ycyI+CisgIDxhIGhyZWY9IiNyZmMuYXV0aG9ycyI+QXV0aG9ycycgQWRkcmVzc2VzPC9hPgorPC9oMT4KKzxkaXYgY2xhc3M9ImF2b2lkYnJlYWsiPgorICA8YWRkcmVzcyBjbGFzcz0idmNhcmQiPgorCTxzcGFuIGNsYXNzPSJ2Y2FyZGxpbmUiPgorCSAgPHNwYW4gY2xhc3M9ImZuIj5Sb2JlcnQgUy4gUXVhdHRsZWJhdW08L3NwYW4+IAorCSAgPHNwYW4gY2xhc3M9Im4gaGlkZGVuIj4KKwkJPHNwYW4gY2xhc3M9ImZhbWlseS1uYW1lIj5RdWF0dGxlYmF1bTwvc3Bhbj4KKwkgIDwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9Im9yZyB2Y2FyZGxpbmUiPk5lc3QgTGFicywgSW5jLjwvc3Bhbj4KKwk8c3BhbiBjbGFzcz0iYWRyIj4KKwkgIDxzcGFuIGNsYXNzPSJ2Y2FyZGxpbmUiPjM0MDAgSGlsbHZpZXcgQXZlLjwvc3Bhbj4KKworCSAgPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+CisJCTxzcGFuIGNsYXNzPSJsb2NhbGl0eSI+UGFsbyBBbHRvPC9zcGFuPiwgIAorCQk8c3BhbiBjbGFzcz0icmVnaW9uIj5DYWxpZm9ybmlhPC9zcGFuPiAKKwkJPHNwYW4gY2xhc3M9ImNvZGUiPjk0MzA0PC9zcGFuPgorCSAgPC9zcGFuPgorCSAgPHNwYW4gY2xhc3M9ImNvdW50cnktbmFtZSB2Y2FyZGxpbmUiPlVTQTwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+RU1haWw6IDxhIGhyZWY9Im1haWx0bzpycXVhdHRsZUBuZXN0bGFicy5jb20iPnJxdWF0dGxlQG5lc3RsYWJzLmNvbTwvYT48L3NwYW4+CisKKyAgPC9hZGRyZXNzPgorPC9kaXY+PGRpdiBjbGFzcz0iYXZvaWRicmVhayI+CisgIDxhZGRyZXNzIGNsYXNzPSJ2Y2FyZCI+CisJPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+CisJICA8c3BhbiBjbGFzcz0iZm4iPkphbWVzIFdvb2R5YXR0PC9zcGFuPiAoZWRpdG9yKQorCSAgPHNwYW4gY2xhc3M9Im4gaGlkZGVuIj4KKwkJPHNwYW4gY2xhc3M9ImZhbWlseS1uYW1lIj5Xb29keWF0dDwvc3Bhbj4KKwkgIDwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9Im9yZyB2Y2FyZGxpbmUiPk5lc3QgTGFicywgSW5jLjwvc3Bhbj4KKwk8c3BhbiBjbGFzcz0iYWRyIj4KKwkgIDxzcGFuIGNsYXNzPSJ2Y2FyZGxpbmUiPjM0MDAgSGlsbHZpZXcgQXZlLjwvc3Bhbj4KKworCSAgPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+CisJCTxzcGFuIGNsYXNzPSJsb2NhbGl0eSI+UGFsbyBBbHRvPC9zcGFuPiwgIAorCQk8c3BhbiBjbGFzcz0icmVnaW9uIj5DYWxpZm9ybmlhPC9zcGFuPiAKKwkJPHNwYW4gY2xhc3M9ImNvZGUiPjk0MzA0PC9zcGFuPgorCSAgPC9zcGFuPgorCSAgPHNwYW4gY2xhc3M9ImNvdW50cnktbmFtZSB2Y2FyZGxpbmUiPlVTQTwvc3Bhbj4KKwk8L3NwYW4+CisJPHNwYW4gY2xhc3M9InZjYXJkbGluZSI+RU1haWw6IDxhIGhyZWY9Im1haWx0bzpqaHdAbmVzdGxhYnMuY29tIj5qaHdAbmVzdGxhYnMuY29tPC9hPjwvc3Bhbj4KKworICA8L2FkZHJlc3M+Cis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLnR4dCBiL2RvYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiODczZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC50eHQKQEAgLTAsMCArMSw0NjQ4IEBACisKKworCisKK05ldHdvcmsgV29ya2luZyBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLiBRdWF0dGxlYmF1bQorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKLiBXb29keWF0dCwgRWQuCitJbnRlbmRlZCBzdGF0dXM6IEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXN0IExhYnMsIEluYy4KK0V4cGlyZXM6IERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVuZSAyMiwgMjAxNworCisKKyAgICAgICAgICAgICAgICAgICAgU3BpbmVsIEhvc3QtQ29udHJvbGxlciBQcm90b2NvbAorICAgICAgICAgICAgICAgICBkcmFmdC1ycXVhdHRsZS1zcGluZWwtdW5pZmllZC1hYjU2MjhhNQorCitBYnN0cmFjdAorCisgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgU3BpbmVsIHByb3RvY29sLCB3aGljaCBmYWNpbGl0YXRlcyB0aGUKKyAgIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb2YgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMgb24gZGV2aWNlcyB3aGVyZQorICAgZ2VuZXJhbCBwdXJwb3NlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMgb2ZmbG9hZCBuZXR3b3JrIGZ1bmN0aW9ucyBhdAorICAgdGhlaXIgaW50ZXJmYWNlcyB0byBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgY29ubmVjdGVkIGJ5IHNpbXBsZQorICAgY29tbXVuaWNhdGlvbiBsaW5rcyBsaWtlIHNlcmlhbCBkYXRhIGNoYW5uZWxzLiAgV2hpbGUgaW5pdGlhbGx5CisgICBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQgZGVzaWduIGFsbG93cyBpdCB0bworICAgYmUgZWFzaWx5IGFkYXB0ZWQgdG8gb3RoZXIgc2ltaWxhciBuZXR3b3JrIHRlY2hub2xvZ2llcy4KKworICAgVGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB2YXJpb3VzIFNwaW5lbCBzcGVjaWFsaXphdGlvbnMsCisgICBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgdGhlIFRocmVhZChSKSBsb3ctcG93ZXIgbWVzaCBuZXR3b3JrCisgICB0ZWNobm9sb2d5LgorCitTdGF0dXMgb2YgVGhpcyBNZW1vCisKKyAgIFRoaXMgSW50ZXJuZXQtRHJhZnQgaXMgc3VibWl0dGVkIGluIGZ1bGwgY29uZm9ybWFuY2Ugd2l0aCB0aGUKKyAgIHByb3Zpc2lvbnMgb2YgQkNQIDc4IGFuZCBCQ1AgNzkuCisKKyAgIEludGVybmV0LURyYWZ0cyBhcmUgd29ya2luZyBkb2N1bWVudHMgb2YgdGhlIEludGVybmV0IEVuZ2luZWVyaW5nCisgICBUYXNrIEZvcmNlIChJRVRGKS4gIE5vdGUgdGhhdCBvdGhlciBncm91cHMgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgd29ya2luZyBkb2N1bWVudHMgYXMgSW50ZXJuZXQtRHJhZnRzLiAgVGhlIGxpc3Qgb2YgY3VycmVudCBJbnRlcm5ldC0KKyAgIERyYWZ0cyBpcyBhdCBodHRwOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZHJhZnRzL2N1cnJlbnQvLgorCisgICBJbnRlcm5ldC1EcmFmdHMgYXJlIGRyYWZ0IGRvY3VtZW50cyB2YWxpZCBmb3IgYSBtYXhpbXVtIG9mIHNpeCBtb250aHMKKyAgIGFuZCBtYXkgYmUgdXBkYXRlZCwgcmVwbGFjZWQsIG9yIG9ic29sZXRlZCBieSBvdGhlciBkb2N1bWVudHMgYXQgYW55CisgICB0aW1lLiAgSXQgaXMgaW5hcHByb3ByaWF0ZSB0byB1c2UgSW50ZXJuZXQtRHJhZnRzIGFzIHJlZmVyZW5jZQorICAgbWF0ZXJpYWwgb3IgdG8gY2l0ZSB0aGVtIG90aGVyIHRoYW4gYXMgIndvcmsgaW4gcHJvZ3Jlc3MuIgorCisgICBUaGlzIEludGVybmV0LURyYWZ0IHdpbGwgZXhwaXJlIG9uIERlY2VtYmVyIDI0LCAyMDE3LgorCitDb3B5cmlnaHQgTm90aWNlCisKKyAgIENvcHlyaWdodCAoYykgMjAxNyBJRVRGIFRydXN0IGFuZCB0aGUgcGVyc29ucyBpZGVudGlmaWVkIGFzIHRoZQorICAgZG9jdW1lbnQgYXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoaXMgZG9jdW1lbnQgaXMgc3ViamVjdCB0byBCQ1AgNzggYW5kIHRoZSBJRVRGIFRydXN0J3MgTGVnYWwKKyAgIFByb3Zpc2lvbnMgUmVsYXRpbmcgdG8gSUVURiBEb2N1bWVudHMKKyAgIChodHRwOi8vdHJ1c3RlZS5pZXRmLm9yZy9saWNlbnNlLWluZm8pIGluIGVmZmVjdCBvbiB0aGUgZGF0ZSBvZgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBwdWJsaWNhdGlvbiBvZiB0aGlzIGRvY3VtZW50LiAgUGxlYXNlIHJldmlldyB0aGVzZSBkb2N1bWVudHMKKyAgIGNhcmVmdWxseSwgYXMgdGhleSBkZXNjcmliZSB5b3VyIHJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zIHdpdGggcmVzcGVjdAorICAgdG8gdGhpcyBkb2N1bWVudC4gIENvZGUgQ29tcG9uZW50cyBleHRyYWN0ZWQgZnJvbSB0aGlzIGRvY3VtZW50IG11c3QKKyAgIGluY2x1ZGUgU2ltcGxpZmllZCBCU0QgTGljZW5zZSB0ZXh0IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuZSBvZgorICAgdGhlIFRydXN0IExlZ2FsIFByb3Zpc2lvbnMgYW5kIGFyZSBwcm92aWRlZCB3aXRob3V0IHdhcnJhbnR5IGFzCisgICBkZXNjcmliZWQgaW4gdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UuCisKKyAgIFRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBtb2RpZmllZCwgYW5kIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgbWF5IG5vdAorICAgYmUgY3JlYXRlZCwgYW5kIGl0IG1heSBub3QgYmUgcHVibGlzaGVkIGV4Y2VwdCBhcyBhbiBJbnRlcm5ldC1EcmFmdC4KKworVGFibGUgb2YgQ29udGVudHMKKworICAgMS4gIEludHJvZHVjdGlvbiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA3CisgICAgIDEuMS4gIEFib3V0IHRoaXMgRHJhZnQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDcKKyAgICAgICAxLjEuMS4gIFNjb3BlIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgNworICAgICAgIDEuMS4yLiAgUmVudW1iZXJpbmcgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA3CisgICAyLiAgRnJhbWUgRm9ybWF0ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDgKKyAgICAgMi4xLiAgSGVhZGVyIEZvcm1hdCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgOAorICAgICAgIDIuMS4xLiAgRkxHOiBGbGFnIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA5CisgICAgICAgMi4xLjIuICBOTEk6IE5ldHdvcmsgTGluayBJZGVudGlmaWVyICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgIDkKKyAgICAgICAyLjEuMy4gIFRJRDogVHJhbnNhY3Rpb24gSWRlbnRpZmllciAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgOQorICAgICAgIDIuMS40LiAgQ29tbWFuZCBJZGVudGlmaWVyIChDTUQpICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICA5CisgICAgICAgMi4xLjUuICBDb21tYW5kIFBheWxvYWQgKE9wdGlvbmFsKSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTAKKyAgIDMuICBEYXRhIFBhY2tpbmcgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMAorICAgICAzLjEuICBQcmltaXRpdmUgVHlwZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDExCisgICAgIDMuMi4gIFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTEKKyAgICAgMy4zLiAgRGF0YSBCbG9icyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxMgorICAgICAzLjQuICBTdHJ1Y3R1cmVkIERhdGEgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDEzCisgICAgIDMuNS4gIEFycmF5cyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTMKKyAgIDQuICBDb21tYW5kcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxNAorICAgICA0LjEuICBDTUQgMDogKEhvc3QtPk5DUCkgQ01EX05PT1AgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE0CisgICAgIDQuMi4gIENNRCAxOiAoSG9zdC0+TkNQKSBDTURfUkVTRVQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTQKKyAgICAgNC4zLiAgQ01EIDI6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX0dFVCAuIC4gLiAuIC4gLiAuIC4gLiAuICAxNAorICAgICA0LjQuICBDTUQgMzogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfU0VUIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE1CisgICAgIDQuNS4gIENNRCA0OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQgIC4gLiAuIC4gLiAuIC4gLiAgMTUKKyAgICAgNC42LiAgQ01EIDU6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX1JFTU9WRSAgLiAuIC4gLiAuIC4gLiAuICAxNgorICAgICA0LjcuICBDTUQgNjogKE5DUC0+SG9zdCkgQ01EX1BST1BfVkFMVUVfSVMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE3CisgICAgIDQuOC4gIENNRCA3OiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRV9JTlNFUlRFRCAgLiAuIC4gLiAuIC4gLiAgMTcKKyAgICAgNC45LiAgQ01EIDg6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQgLiAuIC4gLiAuIC4gLiAuICAxOAorICAgICA0LjEwLiBDTUQgMTg6IChIb3N0LT5OQ1ApIENNRF9QRUVLICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDE4CisgICAgIDQuMTEuIENNRCAxOTogKE5DUC0+SG9zdCkgQ01EX1BFRUtfUkVUICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMTkKKyAgICAgNC4xMi4gQ01EIDIwOiAoSG9zdC0+TkNQKSBDTURfUE9LRSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAxOQorICAgICA0LjEzLiBDTUQgMjE6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCAgLiAuIC4gLiAuIC4gIDE5CisgICAgIDQuMTQuIENNRCAyMjogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUICAuIC4gLiAuIC4gLiAgMjAKKyAgICAgNC4xNS4gQ01EIDIzOiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRVNfQVJFIC4gLiAuIC4gLiAuIC4gLiAuICAyMQorICAgNS4gIFByb3BlcnRpZXMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDIxCisgICAgIDUuMS4gIFByb3BlcnR5IE1ldGhvZHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjIKKyAgICAgNS4yLiAgUHJvcGVydHkgVHlwZXMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyMgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgNS4yLjEuICBTaW5nbGUtVmFsdWUgUHJvcGVydGllcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjIKKyAgICAgICA1LjIuMi4gIE11bHRpcGxlLVZhbHVlIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyMworICAgICAgIDUuMi4zLiAgU3RyZWFtIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDIzCisgICAgIDUuMy4gIFByb3BlcnR5IE51bWJlcmluZyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjQKKyAgICAgNS40LiAgUHJvcGVydHkgU2VjdGlvbnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyNAorICAgICA1LjUuICBDb3JlIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDI1CisgICAgICAgNS41LjEuICBQUk9QIDA6IFBST1BfTEFTVF9TVEFUVVMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjUKKyAgICAgICA1LjUuMi4gIFBST1AgMTogUFJPUF9QUk9UT0NPTF9WRVJTSU9OIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyNQorICAgICAgIDUuNS4zLiAgUFJPUCAyOiBQUk9QX05DUF9WRVJTSU9OICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDI2CisgICAgICAgNS41LjQuICBQUk9QIDM6IFBST1BfSU5URVJGQUNFX1RZUEUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjcKKyAgICAgICA1LjUuNS4gIFBST1AgNDogUFJPUF9JTlRFUkZBQ0VfVkVORE9SX0lEICAuIC4gLiAuIC4gLiAuIC4gLiAuICAyNworICAgICAgIDUuNS42LiAgUFJPUCA1OiBQUk9QX0NBUFMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDI3CisgICAgICAgNS41LjcuICBQUk9QIDY6IFBST1BfSU5URVJGQUNFX0NPVU5UICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMjkKKyAgICAgICA1LjUuOC4gIFBST1AgNzogUFJPUF9QT1dFUl9TVEFURSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAyOQorICAgICAgIDUuNS45LiAgUFJPUCA4OiBQUk9QX0hXQUREUiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDMwCisgICAgICAgNS41LjEwLiBQUk9QIDk6IFBST1BfTE9DSyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzAKKyAgICAgICA1LjUuMTEuIFBST1AgMTA6IFBST1BfSE9TVF9QT1dFUl9TVEFURSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzMQorICAgICAgIDUuNS4xMi4gUFJPUCA0MTA0OiBQUk9QX1VOU09MX1VQREFURV9GSUxURVIgLiAuIC4gLiAuIC4gLiAuIC4gIDMyCisgICAgICAgNS41LjEzLiBQUk9QIDQxMDU6IFBST1BfVU5TT0xfVVBEQVRFX0xJU1QgLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzMKKyAgICAgNS42LiAgU3RyZWFtIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzMworICAgICAgIDUuNi4xLiAgUFJPUCAxMTI6IFBST1BfU1RSRUFNX0RFQlVHIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDMzCisgICAgICAgNS42LjIuICBQUk9QIDExMzogUFJPUF9TVFJFQU1fUkFXIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzQKKyAgICAgICA1LjYuMy4gIFBST1AgMTE0OiBQUk9QX1NUUkVBTV9ORVQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzNgorICAgICAgIDUuNi40LiAgUFJPUCAxMTU6IFBST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSAgLiAuIC4gLiAuIC4gLiAuIC4gIDM3CisgICAgIDUuNy4gIFBIWSBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzcKKyAgICAgICA1LjcuMS4gIFBST1AgMzI6IFBST1BfUEhZX0VOQUJMRUQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzNworICAgICAgIDUuNy4yLiAgUFJPUCAzMzogUFJPUF9QSFlfQ0hBTiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM3CisgICAgICAgNS43LjMuICBQUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzgKKyAgICAgICA1LjcuNC4gIFBST1AgMzU6IFBST1BfUEhZX0ZSRVEgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzOAorICAgICAgIDUuNy41LiAgUFJPUCAzNjogUFJPUF9QSFlfQ0NBX1RIUkVTSE9MRCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM4CisgICAgICAgNS43LjYuICBQUk9QIDM3OiBQUk9QX1BIWV9UWF9QT1dFUiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzgKKyAgICAgICA1LjcuNy4gIFBST1AgMzg6IFBST1BfUEhZX1JTU0kgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzOAorICAgICAgIDUuNy44LiAgUFJPUCAzOTogUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFkgIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM5CisgICAgIDUuOC4gIE1BQyBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzkKKyAgICAgICA1LjguMS4gIFBST1AgNDg6IFBST1BfTUFDX1NDQU5fU1RBVEUgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAzOQorICAgICAgIDUuOC4yLiAgUFJPUCA0OTogUFJPUF9NQUNfU0NBTl9NQVNLIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDM5CisgICAgICAgNS44LjMuICBQUk9QIDUwOiBQUk9QX01BQ19TQ0FOX1BFUklPRCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgMzkKKyAgICAgICA1LjguNC4gIFBST1AgNTE6IFBST1BfTUFDX1NDQU5fQkVBQ09OIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0MAorICAgICAgIDUuOC41LiAgUFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQwCisgICAgICAgNS44LjYuICBQUk9QIDUzOiBQUk9QX01BQ18xNV80X1NBRERSICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDEKKyAgICAgICA1LjguNy4gIFBST1AgNTQ6IFBST1BfTUFDXzE1XzRfUEFOSUQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0MQorICAgICAgIDUuOC44LiAgUFJPUCA1NTogUFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEICAuIC4gLiAuIC4gLiAuIC4gIDQxCisgICAgICAgNS44LjkuICBQUk9QIDU2OiBQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFICAuIC4gLiAuIC4gLiAuIC4gLiAgNDEKKyAgICAgICA1LjguMTAuIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCAgLiAuIC4gLiAuIC4gLiAuICA0MgorICAgICAgIDUuOC4xMS4gUFJPUCA0ODY0OiBQUk9QX01BQ19XSElURUxJU1QgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQyCisgICAgICAgNS44LjEyLiBQUk9QIDQ4NjU6IFBST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEIC4gLiAuIC4gLiAuIC4gLiAgNDIKKyAgICAgICA1LjguMTMuIFBST1AgNDg2NzogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEICAuIC4gLiAuICA0MgorICAgICAgIDUuOC4xNC4gUFJPUCA0ODY4OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyAgIDQyCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICA1LjguMTUuIFBST1AgNDg2OToKKyAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTICAuIC4gLiAuICA0MworICAgICAgIDUuOC4xNi4gUFJPUCA0ODcwOiBQUk9QX01BQ19CTEFDS0xJU1QgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQzCisgICAgICAgNS44LjE3LiBQUk9QIDQ4NzE6IFBST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEIC4gLiAuIC4gLiAuIC4gLiAgNDMKKyAgICAgNS45LiAgTkVUIFByb3BlcnRpZXMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0MworICAgICAgIDUuOS4xLiAgUFJPUCA2NDogUFJPUF9ORVRfU0FWRUQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQzCisgICAgICAgNS45LjIuICBQUk9QIDY1OiBQUk9QX05FVF9JRl9VUCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDQKKyAgICAgICA1LjkuMy4gIFBST1AgNjY6IFBST1BfTkVUX1NUQUNLX1VQICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NAorICAgICAgIDUuOS40LiAgUFJPUCA2NzogUFJPUF9ORVRfUk9MRSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ0CisgICAgICAgNS45LjUuICBQUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUUgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDQKKyAgICAgICA1LjkuNi4gIFBST1AgNjk6IFBST1BfTkVUX1hQQU5JRCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NAorICAgICAgIDUuOS43LiAgUFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWSAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ0CisgICAgICAgNS45LjguICBQUk9QIDcxOiBQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiAgLiAuIC4gLiAuIC4gLiAgNDUKKyAgICAgICA1LjkuOS4gIFBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NQorICAgICAgIDUuOS4xMC4gUFJPUCA3MzogUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HIC4gLiAuIC4gLiAuIC4gIDQ1CisgICAgICAgNS45LjExLiBQUk9QIDc0OiBQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRSAgLiAuIC4gLiAuIC4gLiAgNDUKKyAgICAgICA1LjkuMTIuIFBST1AgNzU6IFBST1BfTkVUX1BTS0MgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NQorICAgICA1LjEwLiBJUHY2IFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ1CisgICAgICAgNS4xMC4xLiAgUFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDUKKyAgICAgICA1LjEwLjIuICBQUk9QIDk3OiBQUk9QX0lQVjZfTUxfQUREUiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0NQorICAgICAgIDUuMTAuMy4gIFBST1AgOTg6IFBST1BfSVBWNl9NTF9QUkVGSVggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ1CisgICAgICAgNS4xMC40LiAgUFJPUCA5OTogUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDYKKyAgICAgICA1LjEwLjUuICBQUk9QIDEwMTogUFJPUF9JUHY2X0lDTVBfUElOR19PRkZMT0FEICAuIC4gLiAuIC4gLiAuICA0NgorICAgICA1LjExLiBEZWJ1ZyBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ2CisgICAgICAgNS4xMS4xLiAgUFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVCAuIC4gLiAuIC4gLiAuIC4gLiAgNDYKKyAgICAgICA1LjExLjIuICBQUk9QIDE2Mzg1OiBQUk9QX0RFQlVHX05DUF9MT0dfTEVWRUwgLiAuIC4gLiAuIC4gLiAuICA0NgorICAgNi4gIFN0YXR1cyBDb2RlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ3CisgICA3LiAgVGVjaG5vbG9neTogVGhyZWFkKFIpIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDgKKyAgICAgNy4xLiAgQ2FwYWJpbGl0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0OQorICAgICA3LjIuICBQcm9wZXJ0aWVzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ5CisgICAgICAgNy4yLjEuICBQUk9QIDgwOiBQUk9QX1RIUkVBRF9MRUFERVJfQUREUiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNDkKKyAgICAgICA3LjIuMi4gIFBST1AgODE6IFBST1BfVEhSRUFEX1BBUkVOVCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA0OQorICAgICAgIDcuMi4zLiAgUFJPUCA4MjogUFJPUF9USFJFQURfQ0hJTERfVEFCTEUgIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDQ5CisgICAgICAgNy4yLjQuICBQUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklEIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTAKKyAgICAgICA3LjIuNS4gIFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQgIC4gLiAuIC4gLiAuIC4gLiAuICA1MAorICAgICAgIDcuMi42LiAgUFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCAgLiAuIC4gLiAuIC4gIDUwCisgICAgICAgNy4yLjcuICBQUk9QIDg2OiBQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEEgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTAKKyAgICAgICA3LjIuOC4gIFBST1AgODc6IFBST1BfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OIC4gLiAuIC4gLiAuICA1MAorICAgICAgIDcuMi45LiAgUFJPUCA4ODogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQSAgLiAuIC4gLiAuIC4gIDUwCisgICAgICAgNy4yLjEwLiBQUk9QIDg5OiBQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04gIC4gLiAgNTAKKyAgICAgICA3LjIuMTEuIFBST1AgOTA6IFBST1BfVEhSRUFEX09OX01FU0hfTkVUUyAuIC4gLiAuIC4gLiAuIC4gLiAuICA1MQorICAgICAgIDcuMi4xMi4gUFJPUCA5MTogUFJPUF9USFJFQURfT0ZGX01FU0hfUk9VVEVTICAuIC4gLiAuIC4gLiAuIC4gIDUxCisgICAgICAgNy4yLjEzLiBQUk9QIDkyOiBQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFMgIC4gLiAuIC4gLiAuIC4gLiAgNTEKKyAgICAgICA3LjIuMTQuIFBST1AgOTM6IFBST1BfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSAgLiAuICA1MQorICAgICAgIDcuMi4xNS4gUFJPUCA5NDogUFJPUF9USFJFQURfTU9ERSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDUyCisgICAgICAgNy4yLjE2LiBQUk9QIDUzNzY6IFBST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQgIC4gLiAuIC4gLiAuIC4gLiAgNTIKKyAgICAgICA3LjIuMTcuIFBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1MgorICAgICAgIDcuMi4xOC4gUFJPUCA1Mzc4OiBQUk9QX1RIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQgLiAuIC4gIDUyCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgNF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICA3LjIuMTkuIFBST1AgNTM3OTogUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSAgLiAuIC4gLiAuICA1MgorICAgICAgIDcuMi4yMC4gUFJPUCA1MzgwOiBQUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQgLiAuIC4gLiAuIC4gIDUyCisgICAgICAgNy4yLjIxLiBQUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTICAuIC4gLiAuIC4gLiAgNTIKKyAgICAgICA3LjIuMjIuIFBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVICAuIC4gLiAuICA1MworICAgICAgIDcuMi4yMy4gUFJPUCA1MzgzOiBQUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVEICAuIC4gLiAuIC4gIDUzCisgICAgICAgNy4yLjI0LiBQUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIC4gLiAgNTMKKyAgICAgICA3LjIuMjUuIFBST1AgNTM4NTogUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIgIC4gLiAuICA1MworICAgICAgIDcuMi4yNi4gUFJPUCA1Mzg2OiBQUk9QX1RIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEICAuIC4gLiAuIC4gIDUzCisgICAgICAgNy4yLjI3LiBQUk9QIDUzODc6IFBST1BfVEhSRUFEX05FSUdIQk9SX1RBQkxFIC4gLiAuIC4gLiAuIC4gLiAgNTMKKyAgICAgICA3LjIuMjguIFBST1AgNTM4ODogUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYICAuIC4gLiAuIC4gLiAuICA1NAorICAgICAgIDcuMi4yOS4gUFJPUCA1Mzg5OiBQUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBICAuIC4gLiAuIC4gIDU0CisgICAgICAgNy4yLjMwLiBQUk9QIDUzOTA6IFBST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBIC4gLiAgNTQKKyAgICAgICA3LjIuMzEuIFBST1AgNTM5MTogUFJPUF9USFJFQURfSk9JTkVSUyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1NAorICAgICAgIDcuMi4zMi4gUFJPUCA1MzkyOiBQUk9QX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRCAuIC4gLiAuIC4gIDU1CisgICAgICAgNy4yLjMzLiBQUk9QIDUzOTM6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEICAuIC4gLiAuIC4gLiAgNTUKKyAgICAgICA3LjIuMzQuIFBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSAuIC4gLiAuIC4gLiAuICA1NQorICAgICAgIDcuMi4zNS4gUFJPUCA1Mzk1OiBQUk9QX1RIUkVBRF9ESVNPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHICAuIC4gIDU1CisgICAgICAgNy4yLjM2LiBQUk9QIDUzOTY6CisgICAgICAgICAgICAgICBQUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HIC4gLiAuIC4gLiAgNTYKKyAgICAgICA3LjIuMzcuIFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQgLiAuIC4gLiAuICA1NgorICAgICAgIDcuMi4zOC4gUFJPUCA1Mzk4OiBQUk9QX1RIUkVBRF9TVEVFUklOR19EQVRBICAuIC4gLiAuIC4gLiAuIC4gIDU2CisgICA4LiAgRmVhdHVyZTogTmV0d29yayBTYXZlIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTYKKyAgICAgOC4xLiAgQ29tbWFuZHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1NworICAgICAgIDguMS4xLiAgQ01EIDk6IChIb3N0LT5OQ1ApIENNRF9ORVRfU0FWRSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDU3CisgICAgICAgOC4xLjIuICBDTUQgMTA6IChIb3N0LT5OQ1ApIENNRF9ORVRfQ0xFQVIgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTcKKyAgICAgICA4LjEuMy4gIENNRCAxMTogKEhvc3QtPk5DUCkgQ01EX05FVF9SRUNBTEwgIC4gLiAuIC4gLiAuIC4gLiAuICA1OAorICAgOS4gIEZlYXR1cmU6IEhvc3QgQnVmZmVyIE9mZmxvYWQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDU4CisgICAgIDkuMS4gIENvbW1hbmRzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTgKKyAgICAgICA5LjEuMS4gIENNRCAxMjogKE5DUC0+SG9zdCkgQ01EX0hCT19PRkZMT0FEIC4gLiAuIC4gLiAuIC4gLiAuICA1OAorICAgICAgIDkuMS4yLiAgQ01EIDEzOiAoTkNQLT5Ib3N0KSBDTURfSEJPX1JFQ0xBSU0gLiAuIC4gLiAuIC4gLiAuIC4gIDU5CisgICAgICAgOS4xLjMuICBDTUQgMTQ6IChOQ1AtPkhvc3QpIENNRF9IQk9fRFJPUCAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNTkKKyAgICAgICA5LjEuNC4gIENNRCAxNTogKEhvc3QtPk5DUCkgQ01EX0hCT19PRkZMT0FERUQgLiAuIC4gLiAuIC4gLiAuICA1OQorICAgICAgIDkuMS41LiAgQ01EIDE2OiAoSG9zdC0+TkNQKSBDTURfSEJPX1JFQ0xBSU1FRCAuIC4gLiAuIC4gLiAuIC4gIDU5CisgICAgICAgOS4xLjYuICBDTUQgMTc6IChIb3N0LT5OQ1ApIENNRF9IQk9fRFJPUFBFRCAuIC4gLiAuIC4gLiAuIC4gLiAgNTkKKyAgICAgOS4yLiAgUHJvcGVydGllcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA1OQorICAgICAgIDkuMi4xLiAgUFJPUCAxMDogUFJPUF9IQk9fTUVNX01BWCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDU5CisgICAgICAgOS4yLjIuICBQUk9QIDExOiBQUk9QX0hCT19CTE9DS19NQVggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjAKKyAgIDEwLiBGZWF0dXJlOiBKYW0gRGV0ZWN0aW9uICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MAorICAgICAxMC4xLiAgUHJvcGVydGllcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDYwCisgICAgICAgMTAuMS4xLiAgUFJPUCA0NjA4OiBQUk9QX0pBTV9ERVRFQ1RfRU5BQkxFICAuIC4gLiAuIC4gLiAuIC4gLiAgNjAKKyAgICAgICAxMC4xLjIuICBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MQorICAgICAgIDEwLjEuMy4gIFBST1AgNDYxMDogUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEICAuIC4gLiAuIC4gIDYxCisgICAgICAgMTAuMS40LiAgUFJPUCA0NjExOiBQUk9QX0pBTV9ERVRFQ1RfV0lORE9XICAuIC4gLiAuIC4gLiAuIC4gLiAgNjEKKyAgICAgICAxMC4xLjUuICBQUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZICAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MgorICAgICAgIDEwLjEuNi4gIFBST1AgNDYxMzogUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQICAuIC4gLiAuIC4gIDYyCisgICAxMS4gRmVhdHVyZTogR1BJTyBBY2Nlc3MgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjIKKyAgICAgMTEuMS4gIFByb3BlcnRpZXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2MworICAgICAgIDExLjEuMS4gIFBST1AgNDA5NjogUFJPUF9HUElPX0NPTkZJRyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDYzCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgNV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICAxMS4xLjIuICBQUk9QIDQwOTg6IFBST1BfR1BJT19TVEFURSAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NAorICAgICAgIDExLjEuMy4gIFBST1AgNDA5OTogUFJPUF9HUElPX1NUQVRFX1NFVCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY0CisgICAgICAgMTEuMS40LiAgUFJPUCA0MTAwOiBQUk9QX0dQSU9fU1RBVEVfQ0xFQVIgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjUKKyAgIDEyLiBGZWF0dXJlOiBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NQorICAgICAxMi4xLiAgUHJvcGVydGllcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY1CisgICAgICAgMTIuMS4xLiAgUFJPUCA0MTAxOiBQUk9QX1RSTkdfMzIgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjUKKyAgICAgICAxMi4xLjIuICBQUk9QIDQxMDI6IFBST1BfVFJOR18xMjggLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NgorICAgICAgIDEyLjEuMy4gIFBST1AgNDEwMzogUFJPUF9UUk5HX1JBV18zMiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY2CisgICAxMy4gU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjcKKyAgICAgMTMuMS4gIFJhdyBBcHBsaWNhdGlvbiBBY2Nlc3MgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NworICAgICAxNC4xLiAgVVJJcyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY3CisgICBBcHBlbmRpeCBBLiAgRnJhbWluZyBQcm90b2NvbCAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjcKKyAgICAgQS4xLiAgVUFSVCBSZWNvbW1lbmRhdGlvbnMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2NworICAgICAgIEEuMS4xLiAgVUFSVCBCaXQgUmF0ZSBEZXRlY3Rpb24gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDY4CisgICAgICAgQS4xLjIuICBIRExDLUxpdGUgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNjgKKyAgICAgQS4yLiAgU1BJIFJlY29tbWVuZGF0aW9ucyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA2OQorICAgICAgIEEuMi4xLiAgU1BJIEZyYW1pbmcgUHJvdG9jb2wgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDcwCisgICAgIEEuMy4gIEleMkMgUmVjb21tZW5kYXRpb25zICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzIKKyAgICAgQS40LiAgTmF0aXZlIFVTQiBSZWNvbW1lbmRhdGlvbnMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3MgorICAgQXBwZW5kaXggQi4gIFRlc3QgVmVjdG9ycyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDcyCisgICAgIEIuMS4gIFRlc3QgVmVjdG9yOiBQYWNrZWQgVW5zaWduZWQgSW50ZWdlciAgLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzIKKyAgICAgQi4yLiAgVGVzdCBWZWN0b3I6IFJlc2V0IENvbW1hbmQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3MgorICAgICBCLjMuICBUZXN0IFZlY3RvcjogUmVzZXQgTm90aWZpY2F0aW9uIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDczCisgICAgIEIuNC4gIFRlc3QgVmVjdG9yOiBTY2FuIEJlYWNvbiAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzMKKyAgICAgQi41LiAgVGVzdCBWZWN0b3I6IEluYm91bmQgSVB2NiBQYWNrZXQgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3MworICAgICBCLjYuICBUZXN0IFZlY3RvcjogT3V0Ym91bmQgSVB2NiBQYWNrZXQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc0CisgICAgIEIuNy4gIFRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MgLiAuIC4gLiAuIC4gLiAgNzQKKyAgICAgQi44LiAgVGVzdCBWZWN0b3I6IFJldHVybmVkIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrcyAgLiAuIC4gLiAuICA3NAorICAgICBCLjkuICBUZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yayAgLiAuIC4gLiAuIC4gLiAuIC4gIDc0CisgICAgIEIuMTAuIFRlc3QgVmVjdG9yOiBJbnNlcnRpb24gbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yayAgNzUKKyAgICAgQi4xMS4gVGVzdCBWZWN0b3I6IFJlbW92aW5nIGEgbG9jYWwgb24tbWVzaCBuZXR3b3JrIC4gLiAuIC4gLiAuICA3NQorICAgICBCLjEyLiBUZXN0IFZlY3RvcjogUmVtb3ZhbCBub3RpZmljYXRpb24gb2YgYW4gb24tbWVzaCBuZXR3b3JrIC4gIDc2CisgICBBcHBlbmRpeCBDLiAgRXhhbXBsZSBTZXNzaW9ucyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzYKKyAgICAgQy4xLiAgTkNQIEluaXRpYWxpemF0aW9uICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3NgorICAgICBDLjIuICBBdHRhY2hpbmcgdG8gYSBuZXR3b3JrICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc3CisgICAgIEMuMy4gIFN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsgLiAuIC4gLiAuIC4gLiAgNzcKKyAgICAgQy40LiAgVW5zdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrIC4gLiAuIC4gLiAuICA3OAorICAgICBDLjUuICBEZXRhY2hpbmcgZnJvbSBhIG5ldHdvcmsgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc4CisgICAgIEMuNi4gIEF0dGFjaGluZyB0byBhIHNhdmVkIG5ldHdvcmsgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzkKKyAgICAgQy43LiAgTkNQIFNvZnR3YXJlIFJlc2V0ICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3OQorICAgICBDLjguICBBZGRpbmcgYW4gb24tbWVzaCBwcmVmaXggIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDc5CisgICAgIEMuOS4gIEVudGVyaW5nIGxvdy1wb3dlciBtb2RlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgNzkKKyAgICAgQy4xMC4gU25pZmZpbmcgcmF3IHBhY2tldHMgIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA3OQorICAgQXBwZW5kaXggRC4gIEdsb3NzYXJ5IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIDgwCisgICBBcHBlbmRpeCBFLiAgQWNrbm93bGVkZ21lbnRzICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgODEKKyAgIEF1dGhvcnMnIEFkZHJlc3NlcyAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICA4MgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgICBbUGFnZSA2XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworMS4gIEludHJvZHVjdGlvbgorCisgICBTcGluZWwgaXMgYSBob3N0LWNvbnRyb2xsZXIgcHJvdG9jb2wgZGVzaWduZWQgdG8gZW5hYmxlCisgICBpbnRlcm9wZXJhdGlvbiBvdmVyIHNpbXBsZSBzZXJpYWwgY29ubmVjdGlvbnMgYmV0d2VlbiBnZW5lcmFsIHB1cnBvc2UKKyAgIGRldmljZSBvcGVyYXRpbmcgc3lzdGVtcyAoT1MpIGFuZCBuZXR3b3JrIGNvLXByb2Nlc3NvcnMgKE5DUCkgZm9yIHRoZQorICAgcHVycG9zZSBvZiBjb250cm9sbGluZyBhbmQgbWFuYWdpbmcgdGhlaXIgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMsCisgICBhY2hpZXZpbmcgdGhlIGZvbGxvd2luZyBnb2FsczoKKworICAgbyAgQWRvcHQgYSBsYXllcmVkIGFwcHJvYWNoIHRvIHRoZSBwcm90b2NvbCBkZXNpZ24sIGFsbG93aW5nIGZ1dHVyZQorICAgICAgc3VwcG9ydCBmb3Igb3RoZXIgbmV0d29yayBwcm90b2NvbHMuCisgICBvICBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGNvbW1hbmRzL21ldGhvZHMgYnkgcHJvdmlkaW5nIGEKKyAgICAgIHJpY2gsIHByb3BlcnR5LWJhc2VkIEFQSS4KKyAgIG8gIFN1cHBvcnQgTkNQcyBjYXBhYmxlIG9mIGJlaW5nIGNvbm5lY3RlZCB0byBtb3JlIHRoYW4gb25lIG5ldHdvcmsKKyAgICAgIGF0IGEgdGltZS4KKyAgIG8gIEdyYWNlZnVsbHkgaGFuZGxlIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcworICAgICAgd2l0aG91dCBuZWNlc3NhcmlseSBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgbyAgQmUgYXMgbWluaW1hbCBhbmQgbGlnaHQtd2VpZ2h0IGFzIHBvc3NpYmxlIHdpdGhvdXQgdW5uZWNlc3NhcmlseQorICAgICAgc2FjcmlmaWNpbmcgZmxleGliaWxpdHkuCisKKyAgIE9uIHRvcCBvZiB0aGlzIGNvcmUgZnJhbWV3b3JrLCB3ZSBkZWZpbmUgdGhlIHByb3BlcnRpZXMgYW5kIGNvbW1hbmRzCisgICB0byBlbmFibGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgbmV0d29yayBwcm90b2NvbHMuCisKKzEuMS4gIEFib3V0IHRoaXMgRHJhZnQKKworICAgVGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgaW4gYSBkcmFmdCBzdGF0dXMgYW5kIGlzIGNoYW5naW5nIG9mdGVuLgorICAgVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGlkZWFzIGZvciBjaGFuZ2VzIHRvIHRoZSBwcm90b2NvbCB0aGF0CisgICBoYXZlbid0IHlldCBiZWVuIGZ1bGx5IHNwZWNpZmllZCwgYXMgd2VsbCBhcyBzb21lIG9mIHRoZSBpbXBldHVzIGZvcgorICAgdGhlIGN1cnJlbnQgZGVzaWduLgorCisxLjEuMS4gIFNjb3BlCisKKyAgIFRoZSBldmVudHVhbCBpbnRlbnQgaXMgdG8gaGF2ZSB0d28gZG9jdW1lbnRzOiBBIFNwaW5lbCBiYXNpcyBkb2N1bWVudAorICAgd2hpY2ggZGlzY3Vzc2VzIHRoZSBuZXR3b3JrLXRlY2hub2xvZ3ktYWdub3N0aWMgbWVjaGFuaXNtcyBhbmQgYQorICAgVGhyZWFkKFIpIHNwZWNpYWxpemF0aW9uIGRvY3VtZW50IHdoaWNoIGRlc2NyaWJlcyBhbGwgb2YgdGhlCisgICBUaHJlYWQoUiktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gIEN1cnJlbnRseSwgdGhpcyBkb2N1bWVudAorICAgY292ZXJzIGJvdGguCisKKzEuMS4yLiAgUmVudW1iZXJpbmcKKworICAgRWZmb3J0cyBhcmUgY3VycmVudGx5IG1haW50YWluZWQgdG8gdHJ5IHRvIHByZXZlbnQgb3ZlcnRseSBiYWNrd2FyZC0KKyAgIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBleGlzdGluZyBwcm90b2NvbCwgYnV0IGlmIHlvdSBhcmUKKyAgIGltcGxlbWVudGluZyBTcGluZWwgaW4geW91ciBvd24gcHJvZHVjdHMgeW91IHNob3VsZCBleHBlY3QgdGhlcmUgdG8KKyAgIGJlIGF0IGxlYXN0IG9uZSBsYXJnZSByZW51bWJlcmluZyBldmVudCBhbmQgbWFqb3IgdmVyc2lvbiBudW1iZXIKKyAgIGNoYW5nZSBiZWZvcmUgdGhlIHN0YW5kYXJkIGlzIGNvbnNpZGVyZWQgImJha2VkIi4gIEFsbCBjaGFuZ2VzIHdpbGwKKyAgIGJlIGNsZWFybHkgbWFya2VkIGFuZCBkb2N1bWVudGVkIHRvIG1ha2Ugc3VjaCBhIHRyYW5zaXRpb24gYXMgZWFzeSBhcworICAgcG9zc2libGUuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDddCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUbyBhbGxvdyBjb25jbHVzaXZlIGRldGVjdGlvbiBvZiBwcm90b2NvbCAoaW4pY29tcGF0aWJpbGl0eSBiZXR3ZWVuCisgICB0aGUgaG9zdCBhbmQgdGhlIE5DUCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhbmQgcHJvcGVydGllcyBhcmUKKyAgIGFscmVhZHkgY29uc2lkZXJlZCB0byBiZSAiYmFrZWQiIGFuZCB3aWxsIG5vdCBjaGFuZ2U6CisKKyAgIG8gIENvbW1hbmQgSURzIHplcm8gdGhyb3VnaCBlaWdodC4gIChSZXNldCwgTm8tb3AsIGFuZCBQcm9wZXJ0eS1WYWx1ZQorICAgICAgQ29tbWFuZHMpCisgICBvICBQcm9wZXJ0eSBJRHMgemVybyB0aHJvdWdoIHR3by4gIChMYXN0IHN0YXR1cywgUHJvdG9jb2wgVmVyc2lvbiwKKyAgICAgIGFuZCBOQ1AgVmVyc2lvbikKKworICAgUmVudW1iZXJpbmcgd291bGQgYmUgdW5kZXJ0YWtlbiBpbiBvcmRlciB0byBiZXR0ZXIgb3JnYW5pemUgdGhlCisgICBhbGxvY2F0aW9uIG9mIHByb3BlcnR5IElEcyBhbmQgY2FwYWJpbGl0eSBJRHMuICBPbmUgb2YgdGhlIGluaXRpYWwKKyAgIGdvYWxzIG9mIHRoaXMgcHJvdG9jb2wgd2FzIGZvciBpdCB0byBiZSBwb3NzaWJsZSBmb3IgYSBob3N0IG9yIE5DUCB0bworICAgb25seSBpbXBsZW1lbnQgcHJvcGVydGllcyB3aXRoIHZhbHVlcyBsZXNzIHRoYW4gMTI3IGFuZCBmb3IgdGhlIE5DUAorICAgdG8gc3RpbGwgYmUgdXNhYmxlLS0tcmVsZWdhdGluZyBhbGwgbGFyZ2VyIHByb3BlcnR5IHZhbHVlcyBmb3IgZXh0cmEKKyAgIGZlYXR1cmVzIG9yIG90aGVyIGNhcGFiaWxpdGllcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBuZWNlc3NhcnkuICBUaGlzCisgICB3b3VsZCBhbGxvdyBzaW1wbGUgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGltcGxlbWVudAorICAgc3VwcG9ydCBmb3IgUFVJcyAoU2VjdGlvbiAzLjIpLgorCisgICBBcyB0aW1lIGhhcyBnb25lIGJ5IGFuZCB0aGUgcHJvdG9jb2wgaGFzIGJlY29tZSBtb3JlIGZsZXNoZWQgb3V0LCBpdAorICAgaGFzIGJlY29tZSBjbGVhciB0aGF0IHNvbWUgb2YgdGhlIGluaXRpYWwgYWxsb2NhdGlvbnMgd2VyZSBpbmFkZXF1YXRlCisgICBhbmQgc2hvdWxkIGJlIHJldmlzaXRlZCBpZiB3ZSB3YW50IHRvIHRyeSB0byBhY2hpZXZlIHRoZSBvcmlnaW5hbAorICAgZ29hbC4KKworMi4gIEZyYW1lIEZvcm1hdAorCisgICBBIGZyYW1lIGlzIGRlZmluZWQgc2ltcGx5IGFzIHRoZSBjb25jYXRlbmF0aW9uIG9mCisKKyAgIG8gIEEgaGVhZGVyIGJ5dGUKKyAgIG8gIEEgY29tbWFuZCAodXAgdG8gdGhyZWUgYnl0ZXMsIHNlZSBTZWN0aW9uIDMuMiBmb3IgZm9ybWF0KQorICAgbyAgQW4gb3B0aW9uYWwgY29tbWFuZCBwYXlsb2FkCisKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAxLTMgfCAgICAgIG4gICAgICB8CisgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EIHwgQ01EX1BBWUxPQUQgfAorICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKzIuMS4gIEhlYWRlciBGb3JtYXQKKworICAgVGhlIGhlYWRlciBieXRlIGlzIGJyb2tlbiBkb3duIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgfCAgRkxHICB8ICBOTEkgIHwgICAgICBUSUQgICAgICB8CisgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKworICAgW0NSRUYxXQorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICAgW1BhZ2UgOF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzIuMS4xLiAgRkxHOiBGbGFnCisKKyAgIFRoZSBmbGFnIGZpZWxkIG9mIHRoZSBoZWFkZXIgYnl0ZSAoIkZMRyIpIGlzIGFsd2F5cyBzZXQgdG8gdGhlIHZhbHVlCisgICB0d28gKG9yICIxMCIgaW4gYmluYXJ5KS4gIEFueSBmcmFtZSByZWNlaXZlZCB3aXRoIHRoZXNlIGJpdHMgc2V0IHRvCisgICBhbnkgb3RoZXIgdmFsdWUgZWxzZSBNVVNUIE5PVCBiZSBjb25zaWRlcmVkIGEgU3BpbmVsIGZyYW1lLgorCisgICBUaGlzIGNvbnZlbnRpb24gYWxsb3dzIFNwaW5lbCB0byBiZSBsaW5lIGNvbXBhdGlibGUgd2l0aCBCVExFIEhDSS4KKyAgIEJ5IGRlZmluaW5nIHRoZSBmaXJzdCB0d28gYml0IGluIHRoaXMgd2F5IHdlIGNhbiBkaXNhbWJpZ3VhdGUgYmV0d2VlbgorICAgU3BpbmVsIGZyYW1lcyBhbmQgSENJIGZyYW1lcyAod2hpY2ggYWx3YXlzIHN0YXJ0IHdpdGggZWl0aGVyICIweDAxIgorICAgb3IgIjB4MDQiKSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZyYW1pbmcgb3ZlcmhlYWQuCisKKzIuMS4yLiAgTkxJOiBOZXR3b3JrIExpbmsgSWRlbnRpZmllcgorCisgICBUaGUgTmV0d29yayBMaW5rIElkZW50aWZpZXIgKE5MSSkgaXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAzLCB3aGljaAorICAgaXMgYXNzb2NpYXRlZCBieSB0aGUgT1Mgd2l0aCBvbmUgb2YgdXAgdG8gZm91ciBJUHY2IHpvbmUgaW5kaWNlcworICAgY29ycmVzcG9uZGluZyB0byBjb25jZXB0dWFsIElQdjYgaW50ZXJmYWNlcyBvbiB0aGUgTkNQLiAgVGhpcyBhbGxvd3MKKyAgIHRoZSBwcm90b2NvbCB0byBzdXBwb3J0IElQdjYgbm9kZXMgY29ubmVjdGluZyBzaW11bHRhbmVvdXNseSB0byBtb3JlCisgICB0aGFuIG9uZSBJUHY2IG5ldHdvcmsgbGluayB1c2luZyBhIHNpbmdsZSBOQ1AgaW5zdGFuY2UuICBUaGUgZmlyc3QKKyAgIE5ldHdvcmsgTGluayBJZGVudGlmaWVyICgwKSBNVVNUIHJlZmVyIHRvIGEgZGlzdGluZ3Vpc2hlZCBjb25jZXB0dWFsCisgICBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIE5DUCBmb3IgaXRzIElQdjYgbGluayB0eXBlLiAgVGhlIG90aGVyCisgICB0aHJlZSBOZXR3b3JrIExpbmsgSWRlbnRpZmllcnMgKDEsIDIgYW5kIDMpIE1BWSBiZSBkaXNzb2NpYXRlZCBmcm9tCisgICBhbnkgY29uY2VwdHVhbCBpbnRlcmZhY2UuCisKKzIuMS4zLiAgVElEOiBUcmFuc2FjdGlvbiBJZGVudGlmaWVyCisKKyAgIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBoZWFkZXIgcmVwcmVzZW50IHRoZSBUcmFuc2FjdGlvbgorICAgSWRlbnRpZmllcihUSUQpLiAgVGhlIFRJRCBpcyB1c2VkIGZvciBjb3JyZWxhdGluZyByZXNwb25zZXMgdG8gdGhlCisgICBjb21tYW5kcyB3aGljaCBnZW5lcmF0ZWQgdGhlbS4KKworICAgV2hlbiBhIGNvbW1hbmQgaXMgc2VudCBmcm9tIHRoZSBob3N0LCBhbnkgcmVwbHkgdG8gdGhhdCBjb21tYW5kIHNlbnQKKyAgIGJ5IHRoZSBOQ1Agd2lsbCB1c2UgdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSBUSUQuICBXaGVuIHRoZSBob3N0CisgICByZWNlaXZlcyBhIGZyYW1lIHRoYXQgbWF0Y2hlcyB0aGUgVElEIG9mIHRoZSBjb21tYW5kIGl0IHNlbnQsIGl0IGNhbgorICAgZWFzaWx5IHJlY29nbml6ZSB0aGF0IGZyYW1lIGFzIHRoZSBhY3R1YWwgcmVzcG9uc2UgdG8gdGhhdCBjb21tYW5kLgorCisgICBUaGUgVElEIHZhbHVlIG9mIHplcm8gKDApIGlzIHVzZWQgZm9yIGNvbW1hbmRzIHRvIHdoaWNoIGEgY29ycmVsYXRlZAorICAgcmVzcG9uc2UgaXMgbm90IGV4cGVjdGVkIG9yIG5lZWRlZCwgc3VjaCBhcyBmb3IgdW5zb2xpY2l0ZWQgdXBkYXRlCisgICBjb21tYW5kcyBzZW50IHRvIHRoZSBob3N0IGZyb20gdGhlIE5DUC4KKworMi4xLjQuICBDb21tYW5kIElkZW50aWZpZXIgKENNRCkKKworICAgVGhlIGNvbW1hbmQgaWRlbnRpZmllciBpcyBhIDIxLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGVuY29kZWQgaW4gdXAgdG8KKyAgIHRocmVlIGJ5dGVzIHVzaW5nIHRoZSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluCisgICBTZWN0aW9uIDMuMi4gIFRoaXMgZW5jb2RpbmcgYWxsb3dzIGZvciB1cCB0byAyLDA5NywxNTIgaW5kaXZpZHVhbAorICAgY29tbWFuZHMsIHdpdGggdGhlIGZpcnN0IDEyNyBjb21tYW5kcyByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBieXRlLgorICAgQ29tbWFuZCBpZGVudGlmaWVycyBsYXJnZXIgdGhhbiAyLDA5NywxNTEgYXJlIGV4cGxpY2l0bHkgZm9yYmlkZGVuLgorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgIFtQYWdlIDldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICBDSUQgUmFuZ2UgICAgICAgfCAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgIDAgLSA2MyAgICAgICAgfCBSZXNlcnZlZCBmb3IgY29yZSBjb21tYW5kcyB8CisgICAgICAgICAgfCAgICAgIDY0IC0gMTUsMzU5ICAgICAgfCAgICAgICBfVU5BTExPQ0FURURfICAgICAgICB8CisgICAgICAgICAgfCAgICAxNSwzNjAgLSAxNiwzODMgICAgfCAgICAgIFZlbmRvci1zcGVjaWZpYyAgICAgICB8CisgICAgICAgICAgfCAgIDE2LDM4NCAtIDEsOTk5LDk5OSAgfCAgICAgICBfVU5BTExPQ0FURURfICAgICAgICB8CisgICAgICAgICAgfCAyLDAwMCwwMDAgLSAyLDA5NywxNTEgfCAgIEV4cGVyaW1lbnRhbCB1c2Ugb25seSAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKzIuMS41LiAgQ29tbWFuZCBQYXlsb2FkIChPcHRpb25hbCkKKworICAgRGVwZW5kaW5nIG9uIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGNvbW1hbmQgaW4gcXVlc3Rpb24sIGEgcGF5bG9hZCBNQVkKKyAgIGJlIGluY2x1ZGVkIGluIHRoZSBmcmFtZS4gIFRoZSBleGFjdCBjb21wb3NpdGlvbiBhbmQgbGVuZ3RoIG9mIHRoZQorICAgcGF5bG9hZCBpcyBkZWZpbmVkIGJ5IHRoZSBjb21tYW5kIGlkZW50aWZpZXIuCisKKzMuICBEYXRhIFBhY2tpbmcKKworICAgRGF0YSBzZXJpYWxpemF0aW9uIGZvciBwcm9wZXJ0aWVzIGlzIHBlcmZvcm1lZCB1c2luZyBhIGxpZ2h0LXdlaWdodAorICAgZGF0YSBwYWNraW5nIGZvcm1hdCB3aGljaCB3YXMgbG9vc2VseSBpbnNwaXJlZCBieSBELUJ1cy4gIFRoZSBmb3JtYXQKKyAgIG9mIGEgc2VyaWFsaXphdGlvbiBpcyBkZWZpbmVkIGJ5IGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBzdHJpbmcuCisKKyAgIFRoaXMgcGFja2luZyBmb3JtYXQgaXMgdXNlZCBmb3Igbm90YXRpb25hbCBjb252ZW5pZW5jZS4gIFdoaWxlIHRoaXMKKyAgIHN0cmluZy1iYXNlZCBkYXRhdHlwZSBmb3JtYXQgaGFzIGJlZW4gZGVzaWduZWQgc28gdGhhdCB0aGUgc3RyaW5ncworICAgbWF5IGJlIGRpcmVjdGx5IHVzZWQgYnkgYSBzdHJ1Y3R1cmVkIGRhdGEgcGFyc2VyLCBzdWNoIGEgdGhpbmcgaXMgbm90CisgICByZXF1aXJlZCB0byBpbXBsZW1lbnQgU3BpbmVsLiAgSW5kZWVkLCBoaWdseSBjb25zdHJhaW5lZCBhcHBsaWNhdGlvbnMKKyAgIG1heSBmaW5kIHN1Y2ggYSB0aGluZyB0byBiZSB0b28gaGVhdnl3ZWlnaHQuCisKKyAgIEdvYWxzOgorCisgICBvICBCZSBsaWdodHdlaWdodCBhbmQgZmF2b3IgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlcy4KKyAgIG8gIFVzZSBhbiBlYXNpbHkgcmVhZGFibGUgYW5kIG1lbW9yYWJsZSBmb3JtYXQgc3RyaW5nLgorICAgbyAgU3VwcG9ydCBsaXN0cyBhbmQgc3RydWN0dXJlcy4KKyAgIG8gIEFsbG93IHByb3BlcnRpZXMgdG8gYmUgYXBwZW5kZWQgdG8gc3RydWN0dXJlcyB3aGlsZSBtYWludGFpbmluZworICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgRWFjaCBwcmltaXRpdmUgZGF0YXR5cGUgaGFzIGFuIEFTQ0lJIGNoYXJhY3RlciBhc3NvY2lhdGVkIHdpdGggaXQuCisgICBTdHJ1Y3R1cmVzIGNhbiBiZSByZXByZXNlbnRlZCBhcyBzdHJpbmdzIG9mIHRoZXNlIGNoYXJhY3RlcnMuICBGb3IKKyAgIGV4YW1wbGU6CisKKyAgIG8gICJDIjogQSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4KKyAgIG8gICJDNlUiOiBBIHNpbmdsZSB1bnNpZ25lZCBieXRlLCBmb2xsb3dlZCBieSBhIDEyOC1iaXQgSVB2NiBhZGRyZXNzLAorICAgICAgZm9sbG93ZWQgYnkgYSB6ZXJvLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcuCisgICBvICAiQSg2KSI6IEFuIGFycmF5IG9mIGNvbmNhdGVuYXRlZCBJUHY2IGFkZHJlc3NlcworCisgICBJbiBlYWNoIGNhc2UsIHRoZSBkYXRhIGlzIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgZGVzY3JpYmVkLiAgRm9yCisgICBleGFtcGxlLCBhbiBhcnJheSBvZiAxMCBJUHY2IGFkZHJlc3MgaXMgc3RvcmVkIGFzIDE2MCBieXRlcy4KKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCiszLjEuICBQcmltaXRpdmUgVHlwZXMKKworICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8ICAgQ2hhciAgIHwgTmFtZSAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCAgICIuIiAgICB8IERBVEFUWVBFX1ZPSUQgICAgICAgIHwgRW1wdHkgZGF0YSB0eXBlLiBVc2VkICAgICAgICAgICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBpbnRlcm5hbGx5LiAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAiYiIgICAgfCBEQVRBVFlQRV9CT09MICAgICAgICB8IEJvb2xlYW4gdmFsdWUuIEVuY29kZWQgaW4gICAgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgOC1iaXRzIGFzIGVpdGhlciAweDAwIG9yIDB4MDEuICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBBbGwgb3RoZXIgdmFsdWVzIGFyZSBpbGxlZ2FsLiAgIHwKKyAgIHwgICAiQyIgICAgfCBEQVRBVFlQRV9VSU5UOCAgICAgICB8IFVuc2lnbmVkIDgtYml0IGludGVnZXIuICAgICAgICAgfAorICAgfCAgICJjIiAgICB8IERBVEFUWVBFX0lOVDggICAgICAgIHwgU2lnbmVkIDgtYml0IGludGVnZXIuICAgICAgICAgICB8CisgICB8ICAgIlMiICAgIHwgREFUQVRZUEVfVUlOVDE2ICAgICAgfCBVbnNpZ25lZCAxNi1iaXQgaW50ZWdlci4gICAgICAgIHwKKyAgIHwgICAicyIgICAgfCBEQVRBVFlQRV9JTlQxNiAgICAgICB8IFNpZ25lZCAxNi1iaXQgaW50ZWdlci4gICAgICAgICAgfAorICAgfCAgICJMIiAgICB8IERBVEFUWVBFX1VJTlQzMiAgICAgIHwgVW5zaWduZWQgMzItYml0IGludGVnZXIuICAgICAgICB8CisgICB8ICAgImwiICAgIHwgREFUQVRZUEVfSU5UMzIgICAgICAgfCBTaWduZWQgMzItYml0IGludGVnZXIuICAgICAgICAgIHwKKyAgIHwgICAiaSIgICAgfCBEQVRBVFlQRV9VSU5UX1BBQ0tFRCB8IFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyLiBTZWUgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgU2VjdGlvbiAzLjIuICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgIjYiICAgIHwgREFUQVRZUEVfSVB2NkFERFIgICAgfCBJUHY2IEFkZHJlc3MuIChCaWctZW5kaWFuKSAgICAgIHwKKyAgIHwgICAiRSIgICAgfCBEQVRBVFlQRV9FVUk2NCAgICAgICB8IEVVSS02NCBBZGRyZXNzLiAoQmlnLWVuZGlhbikgICAgfAorICAgfCAgICJlIiAgICB8IERBVEFUWVBFX0VVSTQ4ICAgICAgIHwgRVVJLTQ4IEFkZHJlc3MuIChCaWctZW5kaWFuKSAgICB8CisgICB8ICAgIkQiICAgIHwgREFUQVRZUEVfREFUQSAgICAgICAgfCBBcmJpdHJhcnkgZGF0YS4gU2VlIFNlY3Rpb24gICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IDMuMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICJkIiAgICB8IERBVEFUWVBFX0RBVEFfV0xFTiAgIHwgQXJiaXRyYXJ5IGRhdGEgd2l0aCBwcmVwZW5kZWQgICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBsZW5ndGguIFNlZSBTZWN0aW9uIDMuMy4gICAgICAgIHwKKyAgIHwgICAiVSIgICAgfCBEQVRBVFlQRV9VVEY4ICAgICAgICB8IFplcm8tdGVybWluYXRlZCBVVEY4LWVuY29kZWQgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICJ0KC4uLikiIHwgREFUQVRZUEVfU1RSVUNUICAgICAgfCBTdHJ1Y3R1cmVkIGRhdGF0eXBlIHdpdGggICAgICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IHByZXBlbmRlZCBsZW5ndGguIFNlZSBTZWN0aW9uICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgMy40LiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICJBKC4uLikiIHwgREFUQVRZUEVfQVJSQVkgICAgICAgfCBBcnJheSBvZiBkYXRhdHlwZXMuIENvbXBvdW5kICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUuIFNlZSBTZWN0aW9uIDMuNS4gICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIEFsbCBtdWx0aS1ieXRlIHZhbHVlcyBhcmUgbGl0dGxlLWVuZGlhbiB1bmxlc3MgZXhwbGljaXRseSBzdGF0ZWQKKyAgIG90aGVyd2lzZS4KKworMy4yLiAgUGFja2VkIFVuc2lnbmVkIEludGVnZXIKKworICAgRm9yIGNlcnRhaW4gdHlwZXMgb2YgaW50ZWdlcnMsIHN1Y2ggY29tbWFuZCBvciBwcm9wZXJ0eSBpZGVudGlmaWVycywKKyAgIHVzdWFsbHkgaGF2ZSBhIHZhbHVlIG9uIHRoZSB3aXJlIHRoYXQgaXMgbGVzcyB0aGFuIDEyNy4gIEhvd2V2ZXIsIGluCisgICBvcmRlciB0byBub3QgcHJlY2x1ZGUgdGhlIHVzZSBvZiB2YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1LCB3ZSB3b3VsZAorICAgbmVlZCB0byBhZGQgYW4gZXh0cmEgYnl0ZS4gIERvaW5nIHRoaXMgd291bGQgYWRkIGFuIGV4dHJhIGJ5dGUgdG8gdGhlCisgICBtYWpvcml0eSBvZiBpbnN0YW5jZXMsIHdoaWNoIGNhbiBhZGQgdXAgaW4gdGVybXMgb2YgYmFuZHdpZHRoLgorCisgICBUaGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGlzIGJhc2VkIG9uIHRoZSB1bnNpZ25lZCBpbnRlZ2VyCisgICBmb3JtYXQgaW4gRVhJIFsxXSwgZXhjZXB0IHRoYXQgd2UgbGltaXQgdGhlIG1heGltdW0gdmFsdWUgdG8gdGhlCisgICBsYXJnZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGVuY29kZWQgaW50byB0aHJlZSBieXRlcygyLDA5NywxNTEpLgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBGb3IgYWxsIHZhbHVlcyBsZXNzIHRoYW4gMTI3LCB0aGUgcGFja2VkIGZvcm0gb2YgdGhlIG51bWJlciBpcyBzaW1wbHkKKyAgIGEgc2luZ2xlIGJ5dGUgd2hpY2ggZGlyZWN0bHkgcmVwcmVzZW50cyB0aGUgbnVtYmVyLiAgRm9yIHZhbHVlcworICAgbGFyZ2VyIHRoYW4gMTI3LCB0aGUgZm9sbG93aW5nIHByb2Nlc3MgaXMgdXNlZCB0byBlbmNvZGUgdGhlIHZhbHVlOgorCisgICAxLiAgVGhlIHVuc2lnbmVkIGludGVnZXIgaXMgYnJva2VuIHVwIGludG8gX25fIDctYml0IGNodW5rcyBhbmQKKyAgICAgICBwbGFjZWQgaW50byBfbl8gb2N0ZXRzLCBsZWF2aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoCisgICAgICAgb2N0ZXQgdW51c2VkLgorICAgMi4gIE9yZGVyIHRoZSBvY3RldHMgZnJvbSBsZWFzdC1zaWduaWZpY2FudCB0byBtb3N0LXNpZ25pZmljYW50LgorICAgICAgIChMaXR0bGUtZW5kaWFuKQorICAgMy4gIENsZWFyIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBvY3RldC4KKyAgICAgICBTZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvbiBhbGwgb3RoZXIgb2N0ZXRzLgorCisgICBXaGVyZSBfbl8gaXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiA3LWJpdCBjaHVua3MgeW91IGNhbiB1c2UgdG8KKyAgIHJlcHJlc2VudCB0aGUgZ2l2ZW4gdmFsdWUuCisKKyAgIFRha2UgdGhlIHZhbHVlIDEzMzcsIGZvciBleGFtcGxlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzM3ID0+IDB4MDUzOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBbMzkgMEFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFtCOSAwQV0KKworICAgVG8gZGVjb2RlIHRoZSB2YWx1ZSwgeW91IGNvbGxlY3QgdGhlIDctYml0IGNodW5rcyB1bnRpbCB5b3UgZmluZCBhbgorICAgb2N0ZXQgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY2xlYXIuCisKKzMuMy4gIERhdGEgQmxvYnMKKworICAgVGhlcmUgYXJlIHR3byB0eXBlcyBmb3IgZGF0YSBibG9iczogImQiIGFuZCAiRCIuCisKKyAgIG8gICJkIiBoYXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAoaW4gYnl0ZXMpIHByZXBlbmRlZCB0byB0aGUgZGF0YQorICAgICAgKHdpdGggdGhlIGxlbmd0aCBlbmNvZGVkIGFzIHR5cGUgIlMiKS4gIFRoZSBzaXplIG9mIHRoZSBsZW5ndGgKKyAgICAgIGZpZWxkIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGVuZ3RoLgorICAgbyAgIkQiIGRvZXMgbm90IGhhdmUgYSBwcmVwZW5kZWQgbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGlzCisgICAgICBpbXBsaWVkIGJ5IHRoZSBieXRlcyByZW1haW5pbmcgdG8gYmUgcGFyc2VkLiAgSXQgaXMgYW4gZXJyb3IgZm9yCisgICAgICAiRCIgdG8gbm90IGJlIHRoZSBsYXN0IHR5cGUgaW4gYSB0eXBlIGluIGEgdHlwZSBzaWduYXR1cmUuCisKKyAgIFRoaXMgZGljaG90b215IGFsbG93cyBmb3IgbW9yZSBlZmZpY2llbnQgZW5jb2RpbmcgYnkgZWxpbWluYXRpbmcKKyAgIHJlZHVuZGVuY3kuICBJZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIGlzIGEgZGF0YSBibG9iLCBlbmNvZGluZyB0aGUKKyAgIGxlbmd0aCB3b3VsZCBiZSByZWR1bmRhbnQgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlCisgICBpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLgorCisgICBJbiBzb21lIGNhc2VzIHdlIHVzZSAiZCIgZXZlbiBpZiBpdCBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIHR5cGUKKyAgIHNpZ25hdHVyZS4gIFdlIGRvIHRoaXMgdG8gYWxsb3cgZm9yIHVzIHRvIGJlIGFibGUgdG8gYXBwZW5kCisgICBhZGRpdGlvbmFsIGZpZWxkcyB0byB0aGUgdHlwZSBzaWduYXR1cmUgaWYgbmVjZXNzYXJ5IGluIHRoZSBmdXR1cmUuCisgICBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2Ugd2l0aCBlbWJlZGRlZCBzdHJ1Y3RzLCBsaWtlIGluIHRoZSBzY2FuCisgICByZXN1bHRzLgorCisgICBGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5IHdlIGhhdmUgYSBidWZmZXIgdGhhdCBpcyBlbmNvZGVkIHdpdGggdGhlCisgICBkYXRhdHlwZSBzaWduYXR1cmUgb2YgIkNMTEQiLiAgSW4gdGhpcyBjYXNlLCBpdCBpcyBwcmV0dHkgZWFzeSB0bworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICB0ZWxsIHdoZXJlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBkYXRhIGJsb2IgaXM6IHRoZSBzdGFydCBpcyA5CisgICBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgaXRzIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mCisgICB0aGUgYnVmZmVyIG1pbnVzIDkuICg5IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGFrZW4gdXAgYnkgYSBieXRlIGFuZAorICAgdHdvIGxvbmdzKQorCisgICBUaGUgZGF0YXR5cGUgc2lnbmF0dXJlICJDTExEVSIgaXMgaWxsZWdhbCBiZWNhdXNlIHdlIGNhbid0IGRldGVybWluZQorICAgd2hlcmUgdGhlIGxhc3QgZmllbGQgKGEgemVyby10ZXJtaW5hdGVkIFVURjggc3RyaW5nKSBzdGFydHMuICBCdXQgdGhlCisgICBkYXRhdHlwZSAiQ0xMZFUiIF9pc18gbGVnYWwsIGJlY2F1c2UgdGhlIHBhcnNlciBjYW4gZGV0ZXJtaW5lIHRoZQorICAgZXhhY3QgbGVuZ3RoIG9mIHRoZSBkYXRhIGJsb2ItLSBhbGxvd2luZyBpdCB0byBrbm93IHdoZXJlIHRoZSBzdGFydAorICAgb2YgdGhlIG5leHQgZmllbGQgd291bGQgYmUuCisKKzMuNC4gIFN0cnVjdHVyZWQgRGF0YQorCisgICBUaGUgc3RydWN0dXJlIGRhdGEgdHlwZSAoInQoLi4uKSIpIGlzIGEgd2F5IG9mIGJ1bmRsaW5nIHRvZ2V0aGVyCisgICBzZXZlcmFsIGZpZWxkcyBpbnRvIGEgc2luZ2xlIHN0cnVjdHVyZS4gIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEKKyAgICJkIiB0eXBlIGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YgYmVpbmcgb3BhcXVlLCB0aGUgZmllbGRzIGluIHRoZQorICAgY29udGVudCBhcmUga25vd24uICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhpbmdzIGxpa2Ugc2NhbiByZXN1bHRzIHdoZXJlCisgICB5b3UgaGF2ZSBzdWJzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IGRpZmZlcmVudCBsYXllcnMuCisKKyAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHlwZSBzaWduYXR1cmUgIkx0KEVTKXQoNkMpIi4gIEluIHRoaXMKKyAgIGh5cG90aGV0aWNhbCBjYXNlLCB0aGUgZmlyc3Qgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIE1BQyBsYXllciwgYW5kCisgICB0aGUgc2Vjb25kIHN0cnVjdCBpcyBkZWZpbmVkIGJ5IHRoZSBQSFkgbGF5ZXIuICBCZWNhdXNlIG9mIHRoZSB1c2Ugb2YKKyAgIHN0cnVjdHVyZXMsIHdlIGtub3cgZXhhY3RseSB3aGF0IHBhcnQgY29tZXMgZnJvbSB0aGF0IGxheWVyLgorICAgQWRkaXRpb25hbGx5LCB3ZSBjYW4gYWRkIGZpZWxkcyB0byBlYWNoIHN0cnVjdHVyZSB3aXRob3V0IGludHJvZHVjaW5nCisgICBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IHByb2JsZW1zOiBEYXRhIGVuY29kZWQgYXMgIkx0KEVTVSl0KDZDKSIKKyAgIChOb3RpY2UgdGhlIGV4dHJhICJVIikgd2lsbCBkZWNvZGUganVzdCBmaW5lIGFzICJMdChFUyl0KDZDKSIuCisgICBBZGRpdGlvbmFsbHksIGlmIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgb25seSBjYXJlCisgICBhYm91dCB0aGUgbmV0d29yayBsYXllciwgd2UgY291bGQgcGFyc2UgYXMgIkx0KCl0KDZDKSIuCisKKyAgIE5vdGUgdGhhdCBkYXRhIGVuY29kZWQgYXMgIkx0KEVTKXQoNkMpIiB3aWxsIGFsc28gcGFyc2UgYXMgIkxkZCIsCisgICB3aXRoIHRoZSBzdHJ1Y3R1cmVzIGZyb20gYm90aCBsYXllcnMgbm93IGJlaW5nIG9wYXF1ZSBkYXRhIGJsb2JzLgorCiszLjUuICBBcnJheXMKKworICAgQW4gYXJyYXkgaXMgc2ltcGx5IGEgY29uY2F0ZW5hdGVkIHNldCBvZiBfbl8gZGF0YSBlbmNvZGluZ3MuICBGb3IKKyAgIGV4YW1wbGUsIHRoZSB0eXBlICJBKDYpIiBpcyBzaW1wbHkgYSBsaXN0IG9mIElQdjYgYWRkcmVzc2VzLS0tb25lCisgICBhZnRlciB0aGUgb3RoZXIuICBUaGUgdHlwZSAiQSg2RSkiIGxpa2V3aXNlIGEgY29uY2F0ZW5hdGlvbiBvZiBJUHY2LQorICAgYWRkcmVzcy9FVUktNjQgcGFpcnMuCisKKyAgIElmIGFuIGFycmF5IGNvbnRhaW5zIG1hbnkgZmllbGRzLCB0aGUgZmllbGRzIHdpbGwgb2Z0ZW4gYmUgc3Vycm91bmRlZAorICAgYnkgYSBzdHJ1Y3R1cmUgKCJ0KC4uLikiKS4gIFRoaXMgZWZmZWN0aXZlbHkgcHJlcGVuZHMgZWFjaCBpdGVtIGluCisgICB0aGUgYXJyYXkgd2l0aCBpdHMgbGVuZ3RoLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGltcHJvdmluZyBwYXJzaW5nCisgICBwZXJmb3JtYW5jZSBvciB0byBhbGxvdyBhZGRpdGlvbmFsIGZpZWxkcyB0byBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlCisgICBpbiBhIGJhY2t3YXJkIGNvbXBhdGlibGUgd2F5LiAgSWYgdGhlcmUgaXMgYSBoaWdoIGNlcnRhaW50eSB0aGF0CisgICBhZGRpdGlvbmFsIGZpZWxkcyB3aWxsIG5ldmVyIGJlIGFkZGVkLCB0aGUgc3RydWN0IG1heSBiZSBvbWl0dGVkCisgICAoc2F2aW5nIHR3byBieXRlcyBwZXIgaXRlbSkuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTNdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgd2F5IHRvIGVtYmVkIGFuIGFycmF5IGFzIGEgZmllbGQKKyAgIGFsb25nc2lkZSBvdGhlciBmaWVsZHMuCisKKzQuICBDb21tYW5kcworCis0LjEuICBDTUQgMDogKEhvc3QtPk5DUCkgQ01EX05PT1AKKworICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAxICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9OT09QIHwKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgIE5vLU9wZXJhdGlvbiBjb21tYW5kLiAgSW5kdWNlcyB0aGUgTkNQIHRvIHNlbmQgYSBzdWNjZXNzIHN0YXR1cyBiYWNrCisgICB0byB0aGUgaG9zdC4gIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIGxpdmVsaW5lc3MgY2hlY2tzLgorCisgICBUaGUgY29tbWFuZCBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgU0hPVUxEIGJlIGVtcHR5LiAgVGhlIHJlY2VpdmVyCisgICBNVVNUIGlnbm9yZSBhbnkgbm9uLWVtcHR5IGNvbW1hbmQgcGF5bG9hZC4KKworICAgVGhlcmUgaXMgbm8gZXJyb3IgY29uZGl0aW9uIGZvciB0aGlzIGNvbW1hbmQuCisKKzQuMi4gIENNRCAxOiAoSG9zdC0+TkNQKSBDTURfUkVTRVQKKworICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAxICAgICB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1JFU0VUIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisKKyAgIFJlc2V0IE5DUCBjb21tYW5kLiAgQ2F1c2VzIHRoZSBOQ1AgdG8gcGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0LiAgRHVlCisgICB0byB0aGUgbmF0dXJlIG9mIHRoaXMgY29tbWFuZCwgdGhlIFRJRCBpcyBpZ25vcmVkLiAgVGhlIGhvc3Qgc2hvdWxkCisgICBpbnN0ZWFkIHdhaXQgZm9yIGEgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kIGZyb20gdGhlIE5DUAorICAgaW5kaWNhdGluZyAiUFJPUF9MQVNUX1NUQVRVUyIgaGFzIGJlZW4gc2V0IHRvCisgICAiU1RBVFVTX1JFU0VUX1NPRlRXQVJFIi4KKworICAgVGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gIFRoZSByZWNlaXZlcgorICAgTVVTVCBpZ25vcmUgYW55IG5vbi1lbXB0eSBjb21tYW5kIHBheWxvYWQuCisKKyAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mICJQUk9QX0xBU1RfU1RBVFVTIiB3aWxsIGJlIGVtaXR0ZWQKKyAgIGluc3RlYWQgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZQorICAgZXJyb3IuCisKKzQuMy4gIENNRCAyOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9HRVQKKworCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAxNF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKworICAgICAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAgICAxICAgICAgICAgIHwgICAxLTMgICB8CisgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKKyAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFX0dFVCB8IFBST1BfSUQgfAorICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCisKKyAgIEdldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiAgQ2F1c2VzIHRoZSBOQ1AgdG8gZW1pdCBhCisgICAiQ01EX1BST1BfVkFMVUVfSVMiIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZGVudGlmaWVyLgorCisgICBUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4KKyAgIHRoZSBwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLgorCisgICBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiAiUFJPUF9MQVNUX1NUQVRVUyIgd2lsbCBiZSBlbWl0dGVkCisgICBpbnN0ZWFkIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUKKyAgIGVycm9yLgorCis0LjQuICBDTUQgMzogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfU0VUCisKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAgICAxICAgICAgICAgIHwgICAxLTMgICB8ICAgbiAgIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfU0VUIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKworICAgU2V0IHByb3BlcnR5IHZhbHVlIGNvbW1hbmQuICBJbnN0cnVjdHMgdGhlIE5DUCB0byBzZXQgdGhlIGdpdmVuCisgICBwcm9wZXJ0eSB0byB0aGUgc3BlY2lmaWMgZ2l2ZW4gdmFsdWUsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgdmFsdWUuCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgcHJvcGVydHkgdmFsdWUuICBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcworICAgZGVmaW5lZCBieSB0aGUgcHJvcGVydHkuCisKKyAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mICJQUk9QX0xBU1RfU1RBVFVTIiB3aWxsIGJlIGVtaXR0ZWQKKyAgIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuCisKKzQuNS4gIENNRCA0OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQKKworICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgICAxICAgICAgICAgICB8ICAgMS0zICAgfCAgIG4gICB8CisgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfSU5TRVJUIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisKKyAgIEluc2VydCB2YWx1ZSBpbnRvIHByb3BlcnR5IGNvbW1hbmQuICBJbnN0cnVjdHMgdGhlIE5DUCB0byBpbnNlcnQgdGhlCisgICBnaXZlbiB2YWx1ZSBpbnRvIGEgbGlzdC1vcmllbnRlZCBwcm9wZXJ0eSwgd2l0aG91dCByZW1vdmluZyBvdGhlcgorICAgaXRlbXMgaW4gdGhlIGxpc3QuICBUaGUgcmVzdWx0aW5nIG9yZGVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0IGlzCisgICBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIHByb3BlcnR5IGJlaW5nIG9wZXJhdGVkIG9uLgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAxNV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdG8gYmUgaW5zZXJ0ZWQuICBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSB2YWx1ZSBpcworICAgZGVmaW5lZCBieSB0aGUgcHJvcGVydHkuCisKKyAgIElmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5ICJQUk9QX0lEIiBjb25zaXN0cworICAgb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5ICgiQSh0KC4uLikpIiksIHRoZW4gdGhlCisgICBjb250ZW50cyBvZiAiVkFMVUUiIE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZQorICAgKCIuLi4iKSByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoInQoLi4uKSIpLgorICAgU3BlY2lmaWNhbGx5LCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUgTVVTVCBOT1QgYmUgcHJlcGVuZGVkIHRvCisgICAiVkFMVUUiLiAgVGhpcyBoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuCisKKyAgIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mICJQUk9QX0xBU1RfU1RBVFVTIiB3aWxsIGJlIGVtaXR0ZWQKKyAgIHdpdGggdGhlIHZhbHVlIHNldCB0byB0aGUgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlIGZvciB0aGUgZXJyb3IuCisKKzQuNi4gIENNRCA1OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9SRU1PVkUKKworICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgICAxICAgICAgICAgICB8ICAgMS0zICAgfCAgIG4gICB8CisgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfUkVNT1ZFIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisKKyAgIFJlbW92ZSB2YWx1ZSBmcm9tIHByb3BlcnR5IGNvbW1hbmQuICBJbnN0cnVjdHMgdGhlIE5DUCB0byByZW1vdmUgdGhlCisgICBnaXZlbiB2YWx1ZSBmcm9tIGEgbGlzdC1vcmllbnRlZCBwcm9wZXJ0eSwgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIKKyAgIGl0ZW1zIGluIHRoZSBsaXN0LiAgVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcworICAgZGVmaW5lZCBieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4KKworICAgTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyBfYnkgdmFsdWVfLCBub3QgYnkgaW5kZXghCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4gIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzIGRlZmluZWQKKyAgIGJ5IHRoZSBwcm9wZXJ0eS4KKworICAgSWYgdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgIlBST1BfSUQiIGNvbnNpc3RzCisgICBvZiBhIHNpbmdsZSBzdHJ1Y3R1cmUgZW5jbG9zZWQgYnkgYW4gYXJyYXkgKCJBKHQoLi4uKSkiKSwgdGhlbiB0aGUKKyAgIGNvbnRlbnRzIG9mICJWQUxVRSIgTVVTVCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlCisgICAoIi4uLiIpIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICgidCguLi4pIikuCisgICBTcGVjaWZpY2FsbHksIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8KKyAgICJWQUxVRSIuICBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgZGF0YS4KKworICAgSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgIlBST1BfTEFTVF9TVEFUVVMiIHdpbGwgYmUgZW1pdHRlZAorICAgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4KKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMTZdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis0LjcuICBDTUQgNjogKE5DUC0+SG9zdCkgQ01EX1BST1BfVkFMVUVfSVMKKworICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgMSAgICAgICAgIHwgICAxLTMgICB8ICAgbiAgIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9JUyB8IFBST1BfSUQgfCBWQUxVRSB8CisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKworICAgUHJvcGVydHkgdmFsdWUgbm90aWZpY2F0aW9uIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgY2FuIGJlIHNlbnQgYnkgdGhlCisgICBOQ1AgaW4gcmVzcG9uc2UgdG8gYSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhvc3QsIG9yIGl0IGNhbiBiZQorICAgc2VudCBieSB0aGUgTkNQIGluIGFuIHVuc29saWNpdGVkIGZhc2hpb24gdG8gbm90aWZ5IHRoZSBob3N0IG9mCisgICB2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkuCisKKzQuOC4gIENNRCA3OiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRV9JTlNFUlRFRAorCisgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAgICAgICAxICAgICAgICAgICAgfCAgIDEtMyAgIHwgICBuICAgfAorICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIHwgUFJPUF9JRCB8IFZBTFVFIHwKKyAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworCisgICBQcm9wZXJ0eSB2YWx1ZSBpbnNlcnRpb24gbm90aWZpY2F0aW9uIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgY2FuIGJlCisgICBzZW50IGJ5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gdGhlICJDTURfUFJPUF9WQUxVRV9JTlNFUlQiIGNvbW1hbmQsCisgICBvciBpdCBjYW4gYmUgc2VudCBieSB0aGUgTkNQIGluIGFuIHVuc29saWNpdGVkIGZhc2hpb24gdG8gbm90aWZ5IHRoZQorICAgaG9zdCBvZiB2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdGhhdCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgZ2l2ZW4gcHJvcGVydHkuCisKKyAgIElmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5ICJQUk9QX0lEIiBjb25zaXN0cworICAgb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5ICgiQSh0KC4uLikpIiksIHRoZW4gdGhlCisgICBjb250ZW50cyBvZiAiVkFMVUUiIE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZQorICAgKCIuLi4iKSByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoInQoLi4uKSIpLgorICAgU3BlY2lmaWNhbGx5LCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUgTVVTVCBOT1QgYmUgcHJlcGVuZGVkIHRvCisgICAiVkFMVUUiLiAgVGhpcyBoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuCisKKyAgIFRoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KKyAgIHByb3BlcnR5LgorCisKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDE3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNC45LiAgQ01EIDg6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQKKworICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAgICAgICAgMSAgICAgICAgICAgIHwgICAxLTMgICB8ICAgbiAgIHwKKyAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworICAgICAgfCBGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCB8IFBST1BfSUQgfCBWQUxVRSB8CisgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKworICAgUHJvcGVydHkgdmFsdWUgcmVtb3ZhbCBub3RpZmljYXRpb24gY29tbWFuZC4gIFRoaXMgY29tbWFuZCBjYW4gYmUKKyAgIHNlbnQgYnkgdGhlIE5DUCBpbiByZXNwb25zZSB0byB0aGUgIkNNRF9QUk9QX1ZBTFVFX1JFTU9WRSIgY29tbWFuZCwKKyAgIG9yIGl0IGNhbiBiZSBzZW50IGJ5IHRoZSBOQ1AgaW4gYW4gdW5zb2xpY2l0ZWQgZmFzaGlvbiB0byBub3RpZnkgdGhlCisgICBob3N0IG9mIHZhcmlvdXMgc3RhdGUgY2hhbmdlcyBhc3luY2hyb25vdXNseS4KKworICAgTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyBfYnkgdmFsdWVfLCBub3QgYnkgaW5kZXghCisKKyAgIFRoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbgorICAgdGhlIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIGZvbGxvd2VkCisgICBieSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS4KKworICAgSWYgdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkgIlBST1BfSUQiIGNvbnNpc3RzCisgICBvZiBhIHNpbmdsZSBzdHJ1Y3R1cmUgZW5jbG9zZWQgYnkgYW4gYXJyYXkgKCJBKHQoLi4uKSkiKSwgdGhlbiB0aGUKKyAgIGNvbnRlbnRzIG9mICJWQUxVRSIgTVVTVCBjb250YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlCisgICAoIi4uLiIpIHJhdGhlciB0aGFuIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSB3aG9sZSBpdGVtICgidCguLi4pIikuCisgICBTcGVjaWZpY2FsbHksIHRoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8KKyAgICJWQUxVRSIuICBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgZGF0YS4KKworICAgVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkIGJ5IHRoZSBnaXZlbgorICAgcHJvcGVydHkuCisKKzQuMTAuICBDTUQgMTg6IChIb3N0LT5OQ1ApIENNRF9QRUVLCisKKyAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgMSAgICAgfCAgICA0ICAgIHwgICAyICAgfAorICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFSyB8IEFERFJFU1MgfCBDT1VOVCB8CisgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKworCisgICBUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBOQ1AgdG8gZmV0Y2ggdmFsdWVzIGZyb20gdGhlIFJBTSBvZiB0aGUgTkNQCisgICBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgVXBvbiBzdWNjZXNzLCAiQ01EX1BFRUtfUkVUIiBpcyBzZW50IGZyb20KKyAgIHRoZSBOQ1AgdG8gdGhlIGhvc3QuICBVcG9uIGZhaWx1cmUsICJQUk9QX0xBU1RfU1RBVFVTIiBpcyBlbWl0dGVkCisgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBpbmRpY2F0aW9uLgorCisgICBEdWUgdG8gdGhlIGxvdy1sZXZlbCBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMKKyAgIG1heSBpbmR1Y2UgdGhlIE5DUCB0byByZXNldC4KKworICAgVGhlIE5DUCBNQVkgcHJldmVudCBjZXJ0YWluIHJlZ2lvbnMgb2YgbWVtb3J5IGZyb20gYmVpbmcgYWNjZXNzZWQuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMThdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUKKyAgIFNlY3Rpb24gMTMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSAiQ0FQX1BFRUtfUE9LRSIgdG8gYmUgcHJlc2VudC4KKworNC4xMS4gIENNRCAxOTogKE5DUC0+SG9zdCkgQ01EX1BFRUtfUkVUCisKKyAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgICAxICAgICAgIHwgICAgNCAgICB8ICAgMiAgIHwgICBuICAgfAorICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFS19SRVQgfCBBRERSRVNTIHwgQ09VTlQgfCBCWVRFUyB8CisgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworCisgICBUaGlzIGNvbW1hbmQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSB0aGF0IHdhcyByZXF1ZXN0ZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byAiQ01EX1BFRUsiLgorCisgICBUaGlzIGNvbW1hbmQgcmVxdWlyZXMgdGhlIGNhcGFiaWxpdHkgIkNBUF9QRUVLX1BPS0UiIHRvIGJlIHByZXNlbnQuCisKKzQuMTIuICBDTUQgMjA6IChIb3N0LT5OQ1ApIENNRF9QT0tFCisKKyAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworICAgICAgICAgfCBPY3RldHM6IHwgICAxICAgIHwgICAgMSAgICAgfCAgICA0ICAgIHwgICAyICAgfCAgIG4gICB8CisgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9QT0tFIHwgQUREUkVTUyB8IENPVU5UIHwgQllURVMgfAorICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisKKyAgIFRoaXMgY29tbWFuZCB3cml0ZXMgdGhlIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGFkZHJlc3MgZm9yCisgICBkZWJ1Z2dpbmcgcHVycG9zZXMuCisKKyAgIER1ZSB0byB0aGUgbG93LWxldmVsIG5hdHVyZSBvZiB0aGlzIGNvbW1hbmQsIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucworICAgbWF5IGluZHVjZSB0aGUgTkNQIHRvIHJlc2V0LgorCisgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuICBTZWUKKyAgIFNlY3Rpb24gMTMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSAiQ0FQX1BFRUtfUE9LRSIgdG8gYmUgcHJlc2VudC4KKworNC4xMy4gIENNRCAyMTogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfTVVMVElfR0VUCisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiQShpKSIKKyAgIG8gIFJlcXVpcmVkIENhcGFiaWxpdHk6ICJDQVBfQ01EX01VTFRJIgorCisgICBGZXRjaCB0aGUgdmFsdWUgb2YgbXVsdGlwbGUgcHJvcGVydGllcyBpbiBvbmUgY29tbWFuZC4gIEFyZ3VtZW50cyBhcmUKKyAgIGFuIGFycmF5IG9mIHByb3BlcnR5IElEcy4gIElmIGFsbCBwcm9wZXJ0aWVzIGFyZSBmZXRjaGVkCisgICBzdWNjZXNzZnVsbHksIGEgIkNNRF9QUk9QX1ZBTFVFU19BUkUiIGNvbW1hbmQgaXMgc2VudCBiYWNrIHRvIHRoZQorICAgaG9zdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0eWlkIGFuZCB2YWx1ZSBvZiBlYWNoIGZldGNoZWQgcHJvcGVydHkuCisgICBUaGUgb3JkZXIgb2YgdGhlIHJlc3VsdHMgaW4gIkNNRF9QUk9QX1ZBTFVFU19BUkUiIG1hdGNoIHRoZSBvcmRlciBvZgorICAgcHJvcGVydGllcyBnaXZlbiBpbiAiQ01EX1BST1BfVkFMVUVfR0VUIi4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDE5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgRXJyb3JzIGZldGNoaW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyBhcmUgcmVmbGVjdGVkIGFzIGluZGljYXRpbmcgYQorICAgY2hhbmdlIHRvICJQUk9QX0xBU1RfU1RBVFVTIiBmb3IgdGhhdCBwcm9wZXJ0eSdzIHBsYWNlLgorCisgICBOb3QgYWxsIHByb3BlcnRpZXMgY2FuIGJlIGZldGNoZWQgdXNpbmcgdGhpcyBtZXRob2QuICBBcyBhIGdlbmVyYWwKKyAgIHJ1bGUgb2YgdGh1bWIsIGFueSBwcm9wZXJ0eSB0aGF0IGJsb2NrcyB3aGVuIGdldHRpbmcgd2lsbCBmYWlsIGZvcgorICAgdGhhdCBpbmRpdmlkdWFsIHByb3BlcnR5IHdpdGggIlNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1AiLgorCis0LjE0LiAgQ01EIDIyOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJBKGlEKSIKKyAgIG8gIFJlcXVpcmVkIENhcGFiaWxpdHk6ICJDQVBfQ01EX01VTFRJIgorCisgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgICAgICAgMSAgICAgICAgICAgICB8ICAgICAgICAgIG4gICAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQgfCAgICBQcm9wZXJ0eS9WYWx1ZSAgIHwKKyAgIHwgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBQYWlycyAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdpdGggZWFjaCBwcm9wZXJ0eS92YWx1ZSBwYWlyIGJlaW5nOgorCisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMiAgICB8ICAgMS0zICAgfCAgICAgbiAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgTEVOR1RIIHwgUFJPUF9JRCB8IFBST1BfVkFMVUUgfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKworICAgVGhpcyBjb21tYW5kIHNldHMgdGhlIHZhbHVlIG9mIHNldmVyYWwgcHJvcGVydGllcyBhdCBvbmNlIGluIHRoZQorICAgZ2l2ZW4gb3JkZXIuICBUaGUgc2V0dGluZyBvZiBwcm9wZXJ0aWVzIHN0b3BzIGF0IHRoZSBmaXJzdCBlcnJvciwKKyAgIGlnbm9yaW5nIGFueSBsYXRlciBwcm9wZXJ0aWVzLgorCisgICBUaGUgcmVzdWx0IG9mIHRoaXMgY29tbWFuZCBpcyBnZW5lcmFsbHkgIkNNRF9QUk9QX1ZBTFVFU19BUkUiIHVubGVzcworICAgKGZvciBleGFtcGxlKSBhIHBhcnNpbmcgZXJyb3IgaGFzIG9jY3VyZWQgKGluIHdoaWNoIGNhc2UKKyAgICJDTURfUFJPUF9WQUxVRV9JUyIgZm9yICJQUk9QX0xBU1RfU1RBVFVTIiB3b3VsZCBiZSB0aGUgcmVzdWx0KS4gIFRoZQorICAgb3JkZXIgb2YgdGhlIHJlc3VsdHMgaW4gIkNNRF9QUk9QX1ZBTFVFU19BUkUiIG1hdGNoIHRoZSBvcmRlciBvZgorICAgcHJvcGVydGllcyBnaXZlbiBpbiAiQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIi4KKworICAgU2luY2UgdGhlIHByb2Nlc3Npbmcgb2YgcHJvcGVydGllcyB0byBzZXQgc3RvcHMgYXQgdGhlIGZpcnN0IGVycm9yLAorICAgdGhlIHJlc3VsdGluZyAiQ01EX1BST1BfVkFMVUVTX0FSRSIgY2FuIGNvbnRhaW4gZmV3ZXIgaXRlbXMgdGhhbiB0aGUKKyAgIHJlcXVlc3RlZCBudW1iZXIgb2YgcHJvcGVydGllcyB0byBzZXQuCisKKyAgIE5vdCBhbGwgcHJvcGVydGllcyBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgbWV0aG9kLiAgQXMgYSBnZW5lcmFsIHJ1bGUKKyAgIG9mIHRodW1iLCBhbnkgcHJvcGVydHkgdGhhdCBibG9ja3Mgd2hlbiBzZXR0aW5nIHdpbGwgZmFpbCBmb3IgdGhhdAorICAgaW5kaXZpZHVhbCBwcm9wZXJ0eSB3aXRoICJTVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QIi4KKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis0LjE1LiAgQ01EIDIzOiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRVNfQVJFCisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiQShpRCkiCisgICBvICBSZXF1aXJlZCBDYXBhYmlsaXR5OiAiQ0FQX0NNRF9NVUxUSSIKKworICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAgICAgICAxICAgICAgICAgIHwgICAgICAgICAgbiAgICAgICAgICAgfAorICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICB8IEZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRVNfQVJFIHwgUHJvcGVydHkvVmFsdWUgUGFpcnMgfAorICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaXRoIGVhY2ggcHJvcGVydHkvdmFsdWUgcGFpciBiZWluZzoKKworICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDIgICAgfCAgIDEtMyAgIHwgICAgIG4gICAgICB8CisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IExFTkdUSCB8IFBST1BfSUQgfCBQUk9QX1ZBTFVFIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgY29tbWFuZCBpcyBlbWl0dGVkIGJ5IHRoZSBOQ1AgYXMgdGhlIHJlc3BvbnNlIHRvIGJvdGggdGhlCisgICAiQ01EX1BST1BfVkFMVUVfTVVMVElfR0VUIiBhbmQgIkNNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVCIgY29tbWFuZHMuCisgICBJdCBpcyByb3VnaGx5IGFuYWxvZ291cyB0byAiQ01EX1BST1BfVkFMVUVfSVMiLCBleGNlcHQgdGhhdCBpdAorICAgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwcm9wZXJ0eS4KKworICAgVGhpcyBjb21tYW5kIFNIT1VMRCBOT1QgYmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSwgb3IgaW4gcmVzcG9uc2UgdG8KKyAgIGFueSBjb21tYW5kIG90aGVyIHRoYW4gIkNNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCIgb3IKKyAgICJDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVQiLgorCisgICBUaGUgYXJndW1lbnRzIGFyZSBhIGxpc3Qgb2Ygc3RydWN0dXJlcyBjb250YWluaW5nIHRoZSBlbWl0dGVkCisgICBwcm9wZXJ0eSBhbmQgdGhlIGFzc29jaWF0ZWQgdmFsdWUuICBUaGVzZSBhcmUgcHJlc2VudGVkIGluIHRoZSBzYW1lCisgICBvcmRlciBhcyBnaXZlbiBpbiB0aGUgYXNzb2NpYXRlZCBpbml0aWF0aW5nIGNvbW1hbmQuICBJbiBjYXNlcyB3aGVyZQorICAgZ2V0dGluZyBvciBzZXR0aW5nIGEgc3BlY2lmaWMgcHJvcGVydHkgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHRoZQorICAgYXNzb2NpYXRlZCBzbG90IGluIHRoaXMgY29tbWFuZCB3aWxsIGRlc2NyaWJlICJQUk9QX0xBU1RfU1RBVFVTIi4KKworNS4gIFByb3BlcnRpZXMKKworICAgU3BpbmVsIGlzIGxhcmdlbHkgYSBwcm9wZXJ0eS1iYXNlZCBwcm90b2NvbCwgc2ltaWxhciB0bworICAgcmVwcmVzZW50YXRpb25hbCBzdGF0ZSB0cmFuc2ZlciAoUkVTVCksIHdpdGggYSBwcm9wZXJ0eSBkZWZpbmVkIGZvcgorICAgZXZlcnkgYXR0cmlidXRlIHRoYXQgYW4gT1MgbmVlZHMgdG8gY3JlYXRlLCByZWFkLCB1cGRhdGUgb3IgZGVsZXRlIGluCisgICB0aGUgZnVuY3Rpb24gb2YgYW4gSVB2NiBpbnRlcmZhY2UuICBUaGUgaW5zcGlyYXRpb24gb2YgdGhpcyBhcHByb2FjaAorICAgd2FzIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBwZXJpcGhlcmFscy4gIFRoZSBnb2FsIGlzIHRvCisgICBhdm9pZCwgYXMgbXVjaCBhcyBwb3NzaWJsZSwgdGhlIHVzZSBvZiBsYXJnZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmVzCisgICBhbmQvb3IgbWV0aG9kIGFyZ3VtZW50IGxpc3RzLiAgVGhlIHJlYXNvbiBmb3IgYXZvaWRpbmcgdGhlc2UgaXMKKyAgIGJlY2F1c2UgdGhleSBoYXZlIGEgdGVuZGVuY3kgdG8gY2hhbmdlLCBlc3BlY2lhbGx5IGVhcmx5IGluCisgICBkZXZlbG9wbWVudC4gIEFkZGluZyBvciByZW1vdmluZyBhIHByb3BlcnR5IGZyb20gYSBzdHJ1Y3R1cmUgY2FuCisgICByZW5kZXIgdGhlIGVudGlyZSBwcm90b2NvbCBpbmNvbXBhdGlibGUuICBCeSB1c2luZyBwcm9wZXJ0aWVzLCB5b3UKKyAgIHNpbXBseSBleHRlbmQgdGhlIHByb3RvY29sIHdpdGggYW4gYWRkaXRpb25hbCBwcm9wZXJ0eS4KKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBBbG1vc3QgYWxsIGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGltcGxlbWVudGVkIHVzaW5nCisgICBwcm9wZXJ0aWVzLiAgTW9zdCBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgaW5pdGlhbGx5IHByb3Bvc2VkIGFzCisgICBjb21tYW5kcyBjYW4gYmUgYWRhcHRlZCB0byBiZSBwcm9wZXJ0eS1iYXNlZCBpbnN0ZWFkLiAgTm90YWJsZQorICAgZXhjZXB0aW9ucyBpbmNsdWRlICJIb3N0IEJ1ZmZlciBPZmZsb2FkIiAoU2VjdGlvbiA5KSBhbmQgIk5ldHdvcmsKKyAgIFNhdmUiIChTZWN0aW9uIDgpLgorCisgICBJbiBTcGluZWwsIHByb3BlcnRpZXMgYXJlIGtleWVkIGJ5IGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZAorICAgMiwwOTcsMTUxIChTZWUgU2VjdGlvbiAzLjIpLgorCis1LjEuICBQcm9wZXJ0eSBNZXRob2RzCisKKyAgIFByb3BlcnRpZXMgbWF5IHN1cHBvcnQgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisgICBvICAiVkFMVUVfR0VUIiAoU2VjdGlvbiA0LjMpCisgICBvICAiVkFMVUVfU0VUIiAoU2VjdGlvbiA0LjQpCisgICBvICAiVkFMVUVfSU5TRVJUIiAoU2VjdGlvbiA0LjUpCisgICBvICAiVkFMVUVfUkVNT1ZFIiAoU2VjdGlvbiA0LjYpCisKKyAgIEFkZGl0aW9uYWxseSwgdGhlIE5DUCBjYW4gc2VuZCB1cGRhdGVzIHRvIHRoZSBob3N0IChlaXRoZXIKKyAgIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpIHRoYXQgaW5mb3JtIHRoZSBob3N0IGFib3V0IGNoYW5nZXMKKyAgIHRvIHNwZWNpZmljIHByb3BlcnRpZXM6CisKKyAgIG8gICJWQUxVRV9JUyIgKFNlY3Rpb24gNC43KQorICAgbyAgIlZBTFVFX0lOU0VSVEVEIiAoU2VjdGlvbiA0LjgpCisgICBvICAiVkFMVUVfUkVNT1ZFRCIgKFNlY3Rpb24gNC45KQorCis1LjIuICBQcm9wZXJ0eSBUeXBlcworCisgICBDb25jZXB0dWFsbHksIHRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YgcHJvcGVydGllczoKKworICAgbyAgU2luZ2xlLXZhbHVlIHByb3BlcnRpZXMKKyAgIG8gIE11bHRpcGxlLXZhbHVlIChBcnJheSkgcHJvcGVydGllcworICAgbyAgU3RyZWFtIHByb3BlcnRpZXMKKworNS4yLjEuICBTaW5nbGUtVmFsdWUgUHJvcGVydGllcworCisgICBTaW5nbGUtdmFsdWUgcHJvcGVydGllcyBhcmUgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBzaW1wbGUKKyAgIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHZhbHVlLiAgRXhhbXBsZXMgd291bGQgYmU6CisKKyAgIG8gIEN1cnJlbnQgcmFkaW8gY2hhbm5lbCAoUmVwcmVzZW50ZWQgYXMgYW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlcikKKyAgIG8gIE5ldHdvcmsgbmFtZSAoUmVwcmVzZW50ZWQgYXMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZykKKyAgIG8gIDgwMi4xNS40IFBBTiBJRCAoUmVwcmVzZW50ZWQgYXMgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIpCisKKyAgIFRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlICJHRVQiIGFuZAorICAgIlNFVCIuCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAyMl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuMi4yLiAgTXVsdGlwbGUtVmFsdWUgUHJvcGVydGllcworCisgICBNdWx0aXBsZS1WYWx1ZSBQcm9wZXJ0aWVzIGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZW0uICBFeGFtcGxlcyB3b3VsZCBiZToKKworICAgbyAgTGlzdCBvZiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvIGhhcmR3YXJlLgorICAgbyAgTGlzdCBvZiBJUHY2IGFkZHJlc3NlcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLgorICAgbyAgTGlzdCBvZiBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBOQ1AuCisKKyAgIFRoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlICJWQUxVRV9HRVQiLAorICAgIlZBTFVFX1NFVCIsICJWQUxVRV9JTlNFUlQiLCBhbmQgIlZBTFVFX1JFTU9WRSIuCisKKyAgIFdoZW4gdGhlIHZhbHVlIGlzIGZldGNoZWQgdXNpbmcgIlZBTFVFX0dFVCIsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcworICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHZhbHVlcyBpbiB0aGUgbGlzdC4gIElmCisgICB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBmb3IgYW4gaW5kaXZpZHVhbCBpdGVtIGluIHRoZSBsaXN0IGlzIG5vdAorICAgZGVmaW5lZCBieSB0aGUgdHlwZSB0aGVuIGVhY2ggaXRlbSByZXR1cm5lZCBpbiB0aGUgbGlzdCBpcyBwcmVwZW5kZWQKKyAgIHdpdGggYSBsZW5ndGggKFNlZSBTZWN0aW9uIDMuNSkuICBUaGUgb3JkZXIgb2YgdGhlIHJldHVybmVkIGl0ZW1zLAorICAgdW5sZXNzIGV4cGxpY2l0bHkgZGVmaW5lZCBmb3IgdGhhdCBzcGVjaWZpYyBwcm9wZXJ0eSwgaXMgdW5kZWZpbmVkLgorCisgICAiVkFMVUVfU0VUIiBwcm92aWRlcyBhIHdheSB0byBjb21wbGV0ZWx5IHJlcGxhY2UgYWxsIHByZXZpb3VzIHZhbHVlcy4KKyAgIENhbGxpbmcgIlZBTFVFX1NFVCIgd2l0aCBhbiBlbXB0eSB2YWx1ZSBlZmZlY3RpdmVseSBpbnN0cnVjdHMgdGhlIE5DUAorICAgdG8gY2xlYXIgdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkuCisKKyAgICJWQUxVRV9JTlNFUlQiIGFuZCAiVkFMVUVfUkVNT1ZFIiBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIHRoZQorICAgaW5zZXJ0aW9uIG9yIHJlbW92YWwgb2YgaW5kaXZpZHVhbCBpdGVtcyBfYnkgdmFsdWVfLiBUaGUgcGF5bG9hZCBmb3IKKyAgIHRoZXNlIGNvbW1hbmRzIGlzIGEgcGxhaW4gc2luZ2xlIHZhbHVlLgorCis1LjIuMy4gIFN0cmVhbSBQcm9wZXJ0aWVzCisKKyAgIFN0cmVhbSBwcm9wZXJ0aWVzIGFyZSBzcGVjaWFsIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIHN0cmVhbXMgb2YKKyAgIGRhdGEuICBFeGFtcGxlcyB3b3VsZCBiZToKKworICAgbyAgTmV0d29yayBwYWNrZXQgc3RyZWFtIChTZWN0aW9uIDUuNi4zKQorICAgbyAgUmF3IHBhY2tldCBzdHJlYW0gKFNlY3Rpb24gNS42LjIpCisgICBvICBEZWJ1ZyBtZXNzYWdlIHN0cmVhbSAoU2VjdGlvbiA1LjYuMSkKKyAgIG8gIE5ldHdvcmsgQmVhY29uIHN0cmVhbSAoU2VjdGlvbiA1LjguNCkKKworICAgQWxsIHN1Y2ggcHJvcGVydGllcyBlbWl0IGNoYW5nZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlICJWQUxVRV9JUyIKKyAgIGNvbW1hbmQsIHNlbnQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LiAgRm9yIGV4YW1wbGUsIGFzIElQdjYgdHJhZmZpYworICAgaXMgcmVjZWl2ZWQgYnkgdGhlIE5DUCwgdGhlIElQdjYgcGFja2V0cyBhcmUgc2VudCB0byB0aGUgaG9zdCBieSB3YXkKKyAgIG9mIGFzeW5jaHJvbm91cyAiVkFMVUVfSVMiIG5vdGlmaWNhdGlvbnMuCisKKyAgIFNvbWUgb2YgdGhlc2UgcHJvcGVydGllcyBhbHNvIHN1cHBvcnQgdGhlIGhvc3Qgc2VuZCBkYXRhIGJhY2sgdG8gdGhlCisgICBOQ1AuICBGb3IgZXhhbXBsZSwgdGhpcyBpcyBob3cgdGhlIGhvc3Qgc2VuZHMgSVB2NiB0cmFmZmljIHRvIHRoZQorICAgTkNQLgorCisgICBUaGVzZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGdlbmVyYWxseSBkbyBub3Qgc3VwcG9ydCAiVkFMVUVfR0VUIiwgYXMgaXQKKyAgIGlzIG1lYW5pbmdsZXNzLgorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjNdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjMuICBQcm9wZXJ0eSBOdW1iZXJpbmcKKworICAgV2hpbGUgdGhlIG1ham9yaXR5IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YKKyAgIG5ldHdvcmsgY29ubmVjdGl2aXR5IGFyZSBuZXR3b3JrIHByb3RvY29sIHNwZWNpZmljLCB0aGVyZSBhcmUgc2V2ZXJhbAorICAgcHJvcGVydGllcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBhbGwgaW1wbGVtZW50YXRpb25zLgorCisgICBGdXR1cmUgcHJvcGVydHkgYWxsb2NhdGlvbnMgU0hBTEwgYmUgbWFkZSBmcm9tIHRoZSBmb2xsb3dpbmcKKyAgIGFsbG9jYXRpb24gcGxhbjoKKworICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFByb3BlcnR5IElEIFJhbmdlICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgMCAtIDEyNyAgICAgICAgICAgICAgIHwgUmVzZXJ2ZWQgZm9yIGZyZXF1ZW50bHktdXNlZCBwcm9wZXJ0aWVzIHwKKyAgICB8IDEyOCAtIDE1LDM1OSAgICAgICAgICB8IFVuYWxsb2NhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAxNSwzNjAgLSAxNiwzODMgICAgICAgfCBWZW5kb3Itc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgMTYsMzg0IC0gMSw5OTksOTk5ICAgIHwgVW5hbGxvY2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8IDIsMDAwLDAwMCAtIDIsMDk3LDE1MSB8IEV4cGVyaW1lbnRhbCB1c2Ugb25seSAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRhdGEgZm9ybWF0IGVuY29kaW5nIHNob3J0aGFuZCB1c2VkCisgICB0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnQsIHNlZSBTZWN0aW9uIDMuCisKKzUuNC4gIFByb3BlcnR5IFNlY3Rpb25zCisKKyAgIFRoZSBjdXJyZW50bHkgYXNzaWduZWQgcHJvcGVydGllcyBhcmUgYnJva2VuIHVwIGludG8gc2V2ZXJhbAorICAgc2VjdGlvbnMsIGVhY2ggd2l0aCByZXNlcnZlZCByYW5nZXMgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMuICBUaGVzZQorICAgcmFuZ2VzIGFyZToKKworICAgICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICBOYW1lICB8ICAgICAgUmFuZ2UgKEluY2x1c2l2ZSkgICAgICAgfCAgICBEb2N1bWVudGF0aW9uICAgIHwKKyAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgQ29yZSAgfCAweDAwIC0gMHgxRiwgMHgxMDAwIC0gMHgxMUZGIHwgICAgIFNlY3Rpb24gNS41ICAgICB8CisgICAgICB8ICBQSFkgICB8IDB4MjAgLSAweDJGLCAweDEyMDAgLSAweDEyRkYgfCAgICAgU2VjdGlvbiA1LjcgICAgIHwKKyAgICAgIHwgIE1BQyAgIHwgMHgzMCAtIDB4M0YsIDB4MTMwMCAtIDB4MTNGRiB8ICAgICBTZWN0aW9uIDUuOCAgICAgfAorICAgICAgfCAgTkVUICAgfCAweDQwIC0gMHg0RiwgMHgxNDAwIC0gMHgxNEZGIHwgICAgIFNlY3Rpb24gNS45ICAgICB8CisgICAgICB8ICBUZWNoICB8IDB4NTAgLSAweDVGLCAweDE1MDAgLSAweDE1RkYgfCBUZWNobm9sb2d5LXNwZWNpZmljIHwKKyAgICAgIHwgIElQdjYgIHwgMHg2MCAtIDB4NkYsIDB4MTYwMCAtIDB4MTZGRiB8ICAgICBTZWN0aW9uIDUuMTAgICAgfAorICAgICAgfCBTdHJlYW0gfCAweDcwIC0gMHg3RiwgMHgxNzAwIC0gMHgxN0ZGIHwgICAgIFNlY3Rpb24gNS41ICAgICB8CisgICAgICB8IERlYnVnICB8ICAgICAgIDB4NDAwMCAtIDB4NDQwMCAgICAgICAgfCAgICAgU2VjdGlvbiA1LjExICAgIHwKKyAgICAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBOb3RlIHRoYXQgc29tZSBvZiB0aGUgcHJvcGVydHkgc2VjdGlvbnMgaGF2ZSB0d28gcmVzZXJ2ZWQgcmFuZ2VzOiBhCisgICBwcmltYXJ5IHJhbmdlICh3aGljaCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGUpIGFuZCBhbiBleHRlbmRlZAorICAgcmFuZ2UgKHdoaWNoIGlzIGVuY29kZWQgYXMgdHdvIGJ5dGVzKS4gIHByb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQKKyAgIG1vcmUgZnJlcXVlbnRseSBhcmUgZ2VuZXJhbGx5IGFsbG9jYXRlZCBmcm9tIHRoZSBmb3JtZXIgcmFuZ2UuCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAyNF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuNS4gIENvcmUgUHJvcGVydGllcworCis1LjUuMS4gIFBST1AgMDogUFJPUF9MQVNUX1NUQVRVUworCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIEVuY29kaW5nOiAiaSIKKworICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgICAgMS0zICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IExBU1RfU1RBVFVTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKyAgIERlc2NyaWJlcyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IG9wZXJhdGlvbi4gIEVuY29kZWQgYXMgYSBwYWNrZWQKKyAgIHVuc2lnbmVkIGludGVnZXIuCisKKyAgIFRoaXMgcHJvcGVydHkgaXMgZW1pdHRlZCBvZnRlbiB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IHN0YXR1cyBvZgorICAgcHJldHR5IG11Y2ggYW55IEhvc3QtdG8tTkNQIG9wZXJhdGlvbi4KKworICAgSXQgaXMgZW1pdHRlZCBhdXRvbWF0aWNhbGx5IGF0IE5DUCBzdGFydHVwIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nCisgICB0aGUgcmVzZXQgcmVhc29uLgorCisgICBTZWUgU2VjdGlvbiA2IGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBzdGF0dXMgY29kZXMuCisKKzUuNS4yLiAgUFJPUCAxOiBQUk9QX1BST1RPQ09MX1ZFUlNJT04KKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBFbmNvZGluZzogImlpIgorCisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgMS0zICAgICAgfCAgICAgIDEtMyAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgTUFKT1JfVkVSU0lPTiB8IE1JTk9SX1ZFUlNJT04gfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAgVGhpcyBwcm9wZXJ0eSBjb250YWlucworICAgZm91ciBmaWVsZHMsIGVhY2ggZW5jb2RlZCBhcyBhIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyOgorCisgICBvICBNYWpvciBWZXJzaW9uIE51bWJlcgorICAgbyAgTWlub3IgVmVyc2lvbiBOdW1iZXIKKworICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbWFqb3IgdmVyc2lvbiA0LCBtaW5vciB2ZXJzaW9uIDMgb2YgdGhpcworICAgcHJvdG9jb2wuCisKKyAgIFRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiAgQmVoYXZpb3Igd2hlbiB1c2VkCisgICBmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDI1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS41LjIuMS4gIE1ham9yIFZlcnNpb24gTnVtYmVyCisKKyAgIFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBpcyB1c2VkIHRvIGlkZW50aWZ5IGxhcmdlIGFuZCBpbmNvbXBhdGlibGUKKyAgIGRpZmZlcmVuY2VzIGJldHdlZW4gcHJvdG9jb2wgdmVyc2lvbnMuCisKKyAgIFRoZSBob3N0IE1VU1QgZW50ZXIgYSBGQVVMVCBzdGF0ZSBpZiBpdCBkb2VzIG5vdCBleHBsaWNpdGx5IHN1cHBvcnQKKyAgIHRoZSBnaXZlbiBtYWpvciB2ZXJzaW9uIG51bWJlci4KKworNS41LjIuMi4gIE1pbm9yIFZlcnNpb24gTnVtYmVyCisKKyAgIFRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHNtYWxsIGJ1dCBvdGhlcndpc2UKKyAgIGNvbXBhdGlibGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBwcm90b2NvbCB2ZXJzaW9ucy4gIEEgbWlzbWF0Y2ggYmV0d2VlbgorICAgdGhlIGFkdmVydGlzZWQgbWlub3IgdmVyc2lvbiBudW1iZXIgYW5kIHRoZSBtaW5vciB2ZXJzaW9uIHRoYXQgaXMKKyAgIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBTSE9VTEQgTk9UIGJlIGZhdGFsIHRvIHRoZSBvcGVyYXRpb24gb2YgdGhlCisgICBob3N0LgorCis1LjUuMy4gIFBST1AgMjogUFJPUF9OQ1BfVkVSU0lPTgorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlUiCisKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICBuICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCBOQ1BfVkVTSU9OX1NUUklORyB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBDb250YWlucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGZpcm13YXJlIGN1cnJlbnRseSBydW5uaW5nIG9uCisgICB0aGUgTkNQLiAgRW5jb2RlZCBhcyBhIHplcm8tdGVybWluYXRlZCBVVEYtOCBzdHJpbmcuCisKKyAgIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBub3Qgc3RyaWN0bHkgZGVmaW5lZCwgYnV0IGl0IGlzIGludGVuZGVkCisgICB0byBwcmVzZW50IHNpbWlsYXJseSB0byB0aGUgIlVzZXItQWdlbnQiIHN0cmluZyBmcm9tIEhUVFAuICBUaGUKKyAgIFJFQ09NTUVOREVEIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGFzIGZvbGxvd3M6CisKKyBTVEFDSy1OQU1FL1NUQUNLLVZFUlNJT05bQlVJTERfSU5GT11bOyBPVEhFUl9JTkZPXTsgQlVJTERfREFURV9BTkRfVElNRQorCisgICBFeGFtcGxlczoKKworICAgbyAgIk9wZW5UaHJlYWQvMS4wZDI2LTI1LWdiNjg0YzdmOyBERUJVRzsgTWF5IDkgMjAxNiAxODoyMjowNCIKKyAgIG8gICJDb25uZWN0SVAvMi4wYjEyNSBzMSBBTFBIQTsgU2VwdCAyNCAyMDE1IDIwOjQ5OjE5IgorCisgICBUaGUgaG9zdCBNVVNUIG9ubHkgdXNlIHRoaXMgcHJvcGVydHkgZnJvbSBOTEkgMC4gIEJlaGF2aW9yIHdoZW4gdXNlZAorICAgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAyNl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuNS40LiAgUFJPUCAzOiBQUk9QX0lOVEVSRkFDRV9UWVBFCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgRW5jb2Rpbmc6ICJpIgorCisgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAxLTMgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IElOVEVSRkFDRV9UWVBFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGlzIGludGVnZXIgaWRlbnRpZmllcyB3aGF0IHRoZSBuZXR3b3JrIHByb3RvY29sIGZvciB0aGlzIE5DUC4KKyAgIEN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6CisKKyAgIG8gIDA6IEJvb3Rsb2FkZXIKKyAgIG8gIDI6IFppZ0JlZSBJUChUTSkKKyAgIG8gIDM6IFRocmVhZChSKQorCisgICBUaGUgaG9zdCBNVVNUIGVudGVyIGEgRkFVTFQgc3RhdGUgaWYgaXQgZG9lcyBub3QgcmVjb2duaXplIHRoZQorICAgcHJvdG9jb2wgZ2l2ZW4gYnkgdGhlIE5DUC4KKworNS41LjUuICBQUk9QIDQ6IFBST1BfSU5URVJGQUNFX1ZFTkRPUl9JRAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIEVuY29kaW5nOiAiaSIKKworICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgICAxLTMgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCBWRU5ET1JfSUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworCisgICBWZW5kb3IgaWRlbnRpZmllci4KKworNS41LjYuICBQUk9QIDU6IFBST1BfQ0FQUworCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoaSkiCisKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgIDEtMyAgfCAgMS0zICB8IC4uLiB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IENBUF8xIHwgQ0FQXzIgfCAuLi4gfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0rCisKKyAgIERlc2NyaWJlcyB0aGUgc3VwcG9ydGVkIGNhcGFiaWxpdGllcyBvZiB0aGlzIE5DUC4gIEVuY29kZWQgYXMgYSBsaXN0CisgICBvZiBwYWNrZWQgdW5zaWduZWQgaW50ZWdlcnMuCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDI3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgQSBjYXBhYmlsaXR5IGlzIGRlZmluZWQgYXMgYSAyMS1iaXQgaW50ZWdlciB0aGF0IGRlc2NyaWJlcyBhIHN1YnNldAorICAgb2YgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlIE5DUC4KKworICAgQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZToKKworICAgbyAgMTogIkNBUF9MT0NLIgorICAgbyAgMjogIkNBUF9ORVRfU0FWRSIKKyAgIG8gIDM6ICJDQVBfSEJPIjogSG9zdCBCdWZmZXIgT2ZmbG9hZC4gIFNlZSBTZWN0aW9uIDkuCisgICBvICA0OiAiQ0FQX1BPV0VSX1NBVkUiCisgICBvICA1OiAiQ0FQX0NPVU5URVJTIgorICAgbyAgNjogIkNBUF9KQU1fREVURUNUIjogSmFtbWluZyBkZXRlY3Rpb24uICBTZWUgU2VjdGlvbiAxMAorICAgbyAgNzogIkNBUF9QRUVLX1BPS0UiOiBQRUVLL1BPS0UgZGVidWdnaW5nIGNvbW1hbmRzLgorICAgbyAgODogIkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNIjogIlBST1BfU1RSRUFNX1JBVyIgaXMgd3JpdGFibGUuCisgICBvICA5OiAiQ0FQX0dQSU8iOiBTdXBwb3J0IGZvciBHUElPIGFjY2Vzcy4gIFNlZSBTZWN0aW9uIDExLgorICAgbyAgMTA6ICJDQVBfVFJORyI6IFN1cHBvcnQgZm9yIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLiAgU2VlCisgICAgICBTZWN0aW9uIDEyLgorICAgbyAgMTE6ICJDQVBfQ01EX01VTFRJIjogU3VwcG9ydCBmb3IgIkNNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCIKKyAgICAgIChTZWN0aW9uIDQuMTMpLCAiQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIiAoU2VjdGlvbiA0LjE0LCBhbmQKKyAgICAgICJDTURfUFJPUF9WQUxVRVNfQVJFIiAoU2VjdGlvbiA0LjE1KS4KKyAgIG8gIDEyOiAiQ0FQX1VOU09MX1VQREFURV9GSUxURVIiOiBTdXBwb3J0IGZvcgorICAgICAgIlBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUiIgKFNlY3Rpb24gNS41LjEyKSBhbmQKKyAgICAgICJQUk9QX1VOU09MX1VQREFURV9MSVNUIiAoU2VjdGlvbiA1LjUuMTMpLgorICAgbyAgMTY6ICJDQVBfODAyXzE1XzRfMjAwMyIKKyAgIG8gIDE3OiAiQ0FQXzgwMl8xNV80XzIwMDYiCisgICBvICAxODogIkNBUF84MDJfMTVfNF8yMDExIgorICAgbyAgMjE6ICJDQVBfODAyXzE1XzRfUElCIgorICAgbyAgMjQ6ICJDQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTSyIKKyAgIG8gIDI1OiAiQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTSyIKKyAgIG8gIDI2OiAiQ0FQXzgwMl8xNV80Xzg2OE1IWl9PUVBTSyIKKyAgIG8gIDI3OiAiQ0FQXzgwMl8xNV80XzkxNU1IWl9CUFNLIgorICAgbyAgMjg6ICJDQVBfODAyXzE1XzRfODY4TUhaX0JQU0siCisgICBvICAyOTogIkNBUF84MDJfMTVfNF85MTVNSFpfQVNLIgorICAgbyAgMzA6ICJDQVBfODAyXzE1XzRfODY4TUhaX0FTSyIKKyAgIG8gIDQ4OiAiQ0FQX1JPTEVfUk9VVEVSIgorICAgbyAgNDk6ICJDQVBfUk9MRV9TTEVFUFkiCisgICBvICA1MjogIkNBUF9ORVRfVEhSRUFEXzFfMCIKKyAgIG8gIDUxMjogIkNBUF9NQUNfV0hJVEVMSVNUIgorICAgbyAgNTEzOiAiQ0FQX01BQ19SQVciCisgICBvICA1MTQ6ICJDQVBfT09CX1NURUVSSU5HX0RBVEEiCisgICBvICAxMDI0OiAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiCisgICBvICAxMDI1OiAiQ0FQX1RIUkVBRF9UTUZfUFJPWFkiCisKKyAgIEFkZGl0aW9uYWxseSwgZnV0dXJlIGNhcGFiaWxpdHkgYWxsb2NhdGlvbnMgU0hBTEwgYmUgbWFkZSBmcm9tIHRoZQorICAgZm9sbG93aW5nIGFsbG9jYXRpb24gcGxhbjoKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMjhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCAgICBDYXBhYmlsaXR5IFJhbmdlICAgfCAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgICAgICAgIDAgLSAxMjcgICAgICAgIHwgUmVzZXJ2ZWQgZm9yIGNvcmUgY2FwYWJpbGl0aWVzIHwKKyAgICAgICAgfCAgICAgIDEyOCAtIDE1LDM1OSAgICAgfCAgICAgICAgIF9VTkFMTE9DQVRFRF8gICAgICAgICAgfAorICAgICAgICB8ICAgIDE1LDM2MCAtIDE2LDM4MyAgICB8ICAgICAgICBWZW5kb3Itc3BlY2lmaWMgICAgICAgICB8CisgICAgICAgIHwgICAxNiwzODQgLSAxLDk5OSw5OTkgIHwgICAgICAgICBfVU5BTExPQ0FURURfICAgICAgICAgIHwKKyAgICAgICAgfCAyLDAwMCwwMDAgLSAyLDA5NywxNTEgfCAgICAgRXhwZXJpbWVudGFsIHVzZSBvbmx5ICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKzUuNS43LiAgUFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICAxICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiSU5URVJGQUNFX0NPVU5UIiB8CisgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBEZXNjcmliZXMgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGludGVyZmFjZXMgc3VwcG9ydGVkIGJ5IHRoaXMgTkNQLgorICAgU2luY2UgdGhlIGNvbmN1cnJlbnQgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyBzdGlsbCBUQkQsIHRoaXMgdmFsdWUKKyAgIE1VU1QgYWx3YXlzIGJlIG9uZS4KKworICAgVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIuCisKKyAgIFRoZSBob3N0IE1VU1Qgb25seSB1c2UgdGhpcyBwcm9wZXJ0eSBmcm9tIE5MSSAwLiAgQmVoYXZpb3Igd2hlbiB1c2VkCisgICBmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLgorCis1LjUuOC4gIFBST1AgNzogUFJPUF9QT1dFUl9TVEFURQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgMSAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgUE9XRVJfU1RBVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuICBCeSB3cml0aW5nIHRvIHRoaXMKKyAgIHByb3BlcnR5IHlvdSBjYW4gbWFuYWdlIHRoZSBsb3dlciBzdGF0ZSBvZiB0aGUgTkNQLiAgRW51bWVyYXRpb24gaXMKKyAgIGVuY29kZWQgYXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZS4KKworICAgRGVmaW5lZCB2YWx1ZXMgYXJlOgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDI5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgMDogIlBPV0VSX1NUQVRFX09GRkxJTkUiOiBOQ1AgaXMgcGh5c2ljYWxseSBwb3dlcmVkIG9mZi4KKyAgICAgIChFbnVtZXJhdGVkIGZvciBjb21wbGV0ZW5lc3Mgc2FrZSwgbm90IGV4cGVjdGVkIG9uIHRoZSB3aXJlKQorICAgbyAgMTogIlBPV0VSX1NUQVRFX0RFRVBfU0xFRVAiOiBBbG1vc3QgZXZlcnl0aGluZyBvbiB0aGUgTkNQIGlzIHNodXQKKyAgICAgIGRvd24sIGJ1dCBjYW4gc3RpbGwgYmUgcmVzdW1lZCB2aWEgYSBjb21tYW5kIG9yIGludGVycnVwdC4KKyAgIG8gIDI6ICJQT1dFUl9TVEFURV9TVEFOREJZIjogTkNQIGlzIGluIHRoZSBsb3dlc3QgcG93ZXIgc3RhdGUgdGhhdAorICAgICAgY2FuIHN0aWxsIGJlIGF3b2tlbiBieSBhbiBldmVudCBmcm9tIHRoZSByYWRpbyAoZS5nLiB3YWl0aW5nIGZvcgorICAgICAgYWxhcm0pCisgICBvICAzOiAiUE9XRVJfU1RBVEVfTE9XX1BPV0VSIjogTkNQIGlzIHJlc3BvbnNpdmUgKGFuZCBwb3NzaWJseQorICAgICAgY29ubmVjdGVkKSwgYnV0IHVzaW5nIGxlc3MgcG93ZXIuIChlLmcuICAiU2xlZXB5IiBjaGlsZCBub2RlKQorICAgbyAgNDogIlBPV0VSX1NUQVRFX09OTElORSI6IE5DUCBpcyBmdWxseSBwb3dlcmVkLiAoZS5nLiAgIlBhcmVudCIKKyAgICAgIG5vZGUpCisKKyAgIFtDUkVGMl0KKworNS41LjkuICBQUk9QIDg6IFBST1BfSFdBRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seSoKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkUiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDggICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhXQUREUiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKworCisgICBUaGUgc3RhdGljIEVVSTY0IGFkZHJlc3Mgb2YgdGhlIGRldmljZSwgdXNlZCBhcyBhIHNlcmlhbCBudW1iZXIuCisgICBUaGlzIHZhbHVlIGlzIHJlYWQtb25seSwgYnV0IG1heSBiZSB3cml0YWJsZSB1bmRlciBjZXJ0YWluIHZlbmRvci0KKyAgIGRlZmluZWQgY2lyY3Vtc3RhbmNlcy4KKworNS41LjEwLiAgUFJPUCA5OiBQUk9QX0xPQ0sKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAxICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IExPQ0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tKworCisgICBQcm9wZXJ0eSBsb2NrLiAgVXNlZCBmb3IgZ3JvdXBpbmcgY2hhbmdlcyB0byBzZXZlcmFsIHByb3BlcnRpZXMgdG8KKyAgIHRha2UgZWZmZWN0IGF0IG9uY2UsIG9yIHRvIHRlbXBvcmFyaWx5IHByZXZlbnQgdGhlIGF1dG9tYXRpYyB1cGRhdGluZworICAgb2YgcHJvcGVydHkgdmFsdWVzLiAgV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKKyAgIE5DUCBpcyBlZmZlY3RpdmVseSBmcm96ZW4gdW50aWwgaXQgaXMgY2xlYXJlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgIkNBUF9MT0NLIiBjYXBhYmlsaXR5IGlzCisgICBwcmVzZW50LgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAzMF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFVubGlrZSBtb3N0IG90aGVyIHByb3BlcnRpZXMsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHdoZW4gdGhlCisgICB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaXMgYWxyZWFkeSB0cnVlIE1VU1QgZmFpbCB3aXRoIGEgbGFzdCBzdGF0dXMgb2YKKyAgICJTVEFUVVNfQUxSRUFEWSIuCisKKzUuNS4xMS4gIFBST1AgMTA6IFBST1BfSE9TVF9QT1dFUl9TVEFURQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorICAgbyAgRGVmYXVsdCB2YWx1ZTogNAorCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICAxICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiSE9TVF9QT1dFUl9TVEFURSIgfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSBfaG9zdF8uIFRoaXMgcHJvcGVydHkgaXMKKyAgIHVzZWQgYnkgdGhlIGhvc3QgdG8gaW5mb3JtIHRoZSBOQ1Agd2hlbiBpdCBoYXMgY2hhbmdlZCBwb3dlciBzdGF0ZXMuCisgICBUaGUgTkNQIGNhbiB0aGVuIHVzZSB0aGlzIHN0YXRlIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIG5lZWQKKyAgIGFzeW5jaHJvbm91cyB1cGRhdGVzLiAgRW51bWVyYXRpb24gaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSB1bnNpZ25lZAorICAgYnl0ZS4gIFRoZXNlIHN0YXRlcyBhcmUgZGVmaW5lZCBpbiBzaW1pbGFyIHRlcm1zIHRvCisgICAiUFJPUF9QT1dFUl9TVEFURSIgKFNlY3Rpb24gNS41LjgpLgorCisgICBEZWZpbmVkIHZhbHVlcyBhcmU6CisKKyAgIG8gIDA6ICJIT1NUX1BPV0VSX1NUQVRFX09GRkxJTkUiOiBIb3N0IGlzIHBoeXNpY2FsbHkgcG93ZXJlZCBvZmYgYW5kCisgICAgICBjYW5ub3QgYmUgd29rZW4gYnkgdGhlIE5DUC4gIEFsbCBhc3luY2hyb25vdXMgY29tbWFuZHMgYXJlCisgICAgICBzcXVlbGNoZWQuCisgICBvICAxOiAiSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQIjogVGhlIGhvc3QgaXMgaW4gYSBsb3cgcG93ZXIgc3RhdGUKKyAgICAgIHdoZXJlIGl0IGNhbiBiZSB3b2tlbiBieSB0aGUgTkNQIGJ1dCB3aWxsIHBvdGVudGlhbGx5IHJlcXVpcmUgbW9yZQorICAgICAgdGhhbiB0d28gc2Vjb25kcyB0byBiZWNvbWUgZnVsbHkgcmVzcG9uc2l2ZS4gIFRoZSBOQ1AgTVVTVCBhdm9pZAorICAgICAgc2VuZGluZyB1bm5lY2Vzc2FyeSBwcm9wZXJ0eSB1cGRhdGVzLCBzdWNoIGFzIGNoaWxkIHRhYmxlIHVwZGF0ZXMKKyAgICAgIG9yIG5vbi1jcml0aWNhbCBtZXNzYWdlcyBvbiB0aGUgZGVidWcgc3RyZWFtLiAgSWYgdGhlIE5DUCBuZWVkcyB0bworICAgICAgd2FrZSB0aGUgaG9zdCBmb3IgdHJhZmZpYywgdGhlIE5DUCBNVVNUIGZpcnN0IHRha2UgYWN0aW9uIHRvIHdha2UKKyAgICAgIHRoZSBob3N0LiAgT25jZSB0aGUgTkNQIHNpZ25hbHMgdG8gdGhlIGhvc3QgdGhhdCBpdCBzaG91bGQgd2FrZQorICAgICAgdXAsIHRoZSBOQ1AgTVVTVCB3YWl0IGZvciBzb21lIGFjdGl2aXR5IGZyb20gdGhlIGhvc3QgKGluZGljYXRpbmcKKyAgICAgIHRoYXQgaXQgaXMgZnVsbHkgYXdha2UpIGJlZm9yZSBzZW5kaW5nIGZyYW1lcy4KKyAgIG8gIDI6ICpSRVNFUlZFRCouIFRoaXMgdmFsdWUgTVVTVCBOT1QgYmUgc2V0IGJ5IHRoZSBob3N0LiAgSWYKKyAgICAgIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsIHRoZSBOQ1AgU0hPVUxEIGNvbnNpZGVyIHRoaXMgYXMgYSBzeW5vbnltIG9mCisgICAgICAiSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQIi4KKyAgIG8gIDM6ICJIT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUiI6IFRoZSBob3N0IGlzIGluIGEgbG93IHBvd2VyIHN0YXRlCisgICAgICB3aGVyZSBpdCBjYW4gYmUgaW1tZWRpYXRlbHkgd29rZW4gYnkgdGhlIE5DUC4gIFRoZSBOQ1AgU0hPVUxECisgICAgICBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUKKyAgICAgIHVwZGF0ZXMgb3Igbm9uLWNyaXRpY2FsIG1lc3NhZ2VzIG9uIHRoZSBkZWJ1ZyBzdHJlYW0uCisgICBvICA0OiAiSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUiOiBUaGUgaG9zdCBpcyBhd2FrZSBhbmQgcmVzcG9uc2l2ZS4KKyAgICAgIE5vIHNwZWNpYWwgZmlsdGVyaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgTkNQIG9uIGFzeW5jaHJvbm91cworICAgICAgdXBkYXRlcy4KKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBvICBBbGwgb3RoZXIgdmFsdWVzIGFyZSAqUkVTRVJWRUQqLiBUaGV5IE1VU1QgTk9UIGJlIHNldCBieSB0aGUgaG9zdC4KKyAgICAgIElmIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsIHRoZSBOQ1AgU0hPVUxEIGNvbnNpZGVyIHRoZSB2YWx1ZSBhcyBhCisgICAgICBzeW5vbnltIG9mICJIT1NUX1BPV0VSX1NUQVRFX0xPV19QT1dFUiIuCisKKyAgIFtDUkVGM10KKworICAgQWZ0ZXIgc2V0dGluZyB0aGlzIHBvd2VyIHN0YXRlLCBhbnkgZnVydGhlciBjb21tYW5kcyBmcm9tIHRoZSBob3N0IHRvCisgICB0aGUgTkNQIHdpbGwgY2F1c2UgIkhPU1RfUE9XRVJfU1RBVEUiIHRvIGF1dG9tYXRpY2FsbHkgcmV2ZXJ0IHRvCisgICAiSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUiLgorCisgICBXaGVuIHRoZSBob3N0IGlzIGVudGVyaW5nIGEgbG93LXBvd2VyIHN0YXRlLCBpdCBzaG91bGQgd2FpdCBmb3IgdGhlCisgICByZXNwb25zZSBmcm9tIHRoZSBOQ1AgYWNrbm93bGVkZ2luZyB0aGUgY29tbWFuZCAod2l0aAorICAgIkNNRF9WQUxVRV9JUyIpLiAgT25jZSB0aGF0IGFja25vd2xlZGdlbWVudCBpcyByZWNlaXZlZCB0aGUgaG9zdCBtYXkKKyAgIGVudGVyIHRoZSBsb3ctcG93ZXIgc3RhdGUuCisKKyAgIElmIHRoZSBOQ1AgaGFzIHRoZSAiQ0FQX1VOU09MX1VQREFURV9GSUxURVIiIGNhcGFiaWxpdHksIGFueQorICAgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcyBtYXNrZWQgYnkgIlBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUiIKKyAgIHNob3VsZCBiZSBob25vcmVkIHdoaWxlIHRoZSBob3N0IGluZGljYXRlcyBpdCBpcyBpbiBhIGxvdy1wb3dlcgorICAgc3RhdGUuICBBZnRlciByZXN1bWluZyB0byB0aGUgIkhPU1RfUE9XRVJfU1RBVEVfT05MSU5FIiBzdGF0ZSwgdGhlCisgICB2YWx1ZSBvZiAiUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSIiBNVVNUIGJlIHVuY2hhbmdlZCBmcm9tIHRoZSB2YWx1ZQorICAgYXNzaWduZWQgcHJpb3IgdG8gdGhlIGhvc3QgaW5kaWNhdGluZyBpdCB3YXMgZW50ZXJpbmcgYSBsb3ctcG93ZXIKKyAgIHN0YXRlLgorCisgICBUaGUgaG9zdCBNVVNUIG9ubHkgdXNlIHRoaXMgcHJvcGVydHkgZnJvbSBOTEkgMC4gIEJlaGF2aW9yIHdoZW4gdXNlZAorICAgZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworNS41LjEyLiAgUFJPUCA0MTA0OiBQUk9QX1VOU09MX1VQREFURV9GSUxURVIKKworICAgbyAgUmVxdWlyZWQgb25seSBpZiAiQ0FQX1VOU09MX1VQREFURV9GSUxURVIiIGlzIHNldC4KKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoSSkiCisgICBvICBEZWZhdWx0IHZhbHVlOiBFbXB0eS4KKworICAgQ29udGFpbnMgYSBsaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggYXJlIF9leGNsdWRlZF8gZnJvbSBnZW5lcmF0aW5nCisgICB1bnNvbGljaXRlZCB2YWx1ZSB1cGRhdGVzLiAgVGhpcyBwcm9wZXJ0eSBNVVNUIGJlIGVtcHR5IGFmdGVyIHJlc2V0LgorCisgICBJbiBvdGhlciB3b3JkcywgdGhlIGhvc3QgbWF5IG9wdC1vdXQgb2YgdW5zb2xpY2l0ZWQgcHJvcGVydHkgdXBkYXRlcworICAgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkgYnkgYWRkaW5nIHRoYXQgcHJvcGVydHkgaWQgdG8gdGhpcyBsaXN0LgorCisgICBIb3N0cyBTSE9VTEQgTk9UIGFkZCBwcm9wZXJ0aWVzIHRvIHRoaXMgbGlzdCB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4KKyAgICJQUk9QX1VOU09MX1VQREFURV9MSVNUIi4gIElmIHN1Y2ggcHJvcGVydGllcyBhcmUgYWRkZWQsIHRoZSBOQ1AgTVVTVAorICAgaWdub3JlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLgorCisgICBbQ1JFRjRdCisKKyAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHByb3BlcnR5IGFyZSBvbmx5IFJFUVVJUkVEIHRvIHN1cHBvcnQgYW5kIHVzZQorICAgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBvICAiQ01EX1BST1BfVkFMVUVfR0VUIiAoU2VjdGlvbiA0LjMpCisgICBvICAiQ01EX1BST1BfVkFMVUVfU0VUIiAoU2VjdGlvbiA0LjQpCisgICBvICAiQ01EX1BST1BfVkFMVUVfSVMiIChTZWN0aW9uIDQuNykKKworICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgcHJvcGVydHkgTUFZIG9wdGlvbmFsbHkgc3VwcG9ydCBhbmQgdXNlIHRoZQorICAgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgICBvICAiQ01EX1BST1BfVkFMVUVfSU5TRVJUIiAoU2VjdGlvbiA0LjUpCisgICBvICAiQ01EX1BST1BfVkFMVUVfUkVNT1ZFIiAoU2VjdGlvbiA0LjYpCisgICBvICAiQ01EX1BST1BfVkFMVUVfSU5TRVJURUQiIChTZWN0aW9uIDQuOCkKKyAgIG8gICJDTURfUFJPUF9WQUxVRV9SRU1PVkVEIiAoU2VjdGlvbiA0LjkpCisKKyAgIEhvc3QgaW1wbGVtZW50YXRpb25zIHdoaWNoIGFyZSBhaW1pbmcgdG8gbWF4aW1pemUgdGhlaXIgY29tcGF0YWJpbGl0eQorICAgYWNyb3NzIGRpZmZlcmVudCBmaXJtd3JlIGltcGxlbWVudGF0aW9ucyBTSE9VTEQgTk9UIGFzc3VtZSB0aGUKKyAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgb3B0aW9uYWwgY29tbWFuZHMgZm9yIHRoaXMgcHJvcGVydHkuCisKKyAgIFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IFNIQUxMIGJlIGluZGVwZW5kZW50IGZvciBlYWNoIE5MSS4KKworNS41LjEzLiAgUFJPUCA0MTA1OiBQUk9QX1VOU09MX1VQREFURV9MSVNUCisKKyAgIG8gIFJlcXVpcmVkIG9ubHkgaWYgIkNBUF9VTlNPTF9VUERBVEVfRklMVEVSIiBpcyBzZXQuCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoSSkiCisKKyAgIENvbnRhaW5zIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcKKyAgIHVuc29saWNpdGVkIHZhbHVlIHVwZGF0ZXMuICBUaGlzIGxpc3QgY2FuIGJlIHVzZWQgd2hlbiBwb3B1bGF0aW5nCisgICAiUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSIiB0byBkaXNhYmxlIGFsbCB1bnNvbGljaXRlZCBwcm9wZXJ0eQorICAgdXBkYXRlcy4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBpbnRlbmRlZCB0byBlZmZlY3RpdmVseSBiZWhhdmUgYXMgYSBjb25zdGFudCBmb3IgYQorICAgZ2l2ZW4gTkNQIGZpcm13YXJlLgorCisgICBOb3RlIHRoYXQgbm90IGFsbCBwcm9wZXJ0aWVzIHRoYXQgc3VwcG9ydCB1bnNvbGljaXRlZCB1cGRhdGVzIG5lZWQgdG8KKyAgIGJlIGxpc3RlZCBoZXJlLiAgU2NhbiByZXN1bHRzLCBmb3IgZXhhbXBsZSwgYXJlIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0bworICAgZGlyZWN0IGFjdGlvbiBvbiB0aGUgcGFydCBvZiB0aGUgaG9zdCwgc28gdGhvc2UgcHJvcGVydGllcyBNVVNUIE5PVAorICAgbm90IGJlIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4KKworICAgVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgTUFZIGJlIGRpZmZlcmVudCBhY3Jvc3MgYXZhaWxhYmxlIE5MSXMuCisKKzUuNi4gIFN0cmVhbSBQcm9wZXJ0aWVzCisKKzUuNi4xLiAgUFJPUCAxMTI6IFBST1BfU1RSRUFNX0RFQlVHCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSAzM10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgIG4gICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgVVRGOF9EQVRBIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUaGUgc3RyZWFtIHByb3ZpZGVzCisgICBodW1hbi1yZWFkYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWNoIG1heSBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhvc3QKKyAgIGxvZ3MuCisKKyAgIFRoZSBsb2NhdGlvbiBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaXMgbm90IGFzc3VtZWQgYnkgdGhlIGhvc3Q6IGl0IGlzCisgICB0aGUgTkNQJ3MgcmVzcG9uc2liaWxpdHkgdG8gaW5zZXJ0IG5ld2xpbmUgY2hhcmFjdGVycyB3aGVyZSBuZWVkZWQsCisgICBqdXN0IGxpa2Ugd2l0aCBhbnkgb3RoZXIgdGV4dCBzdHJlYW0uCisKKyAgIFRvIHJlY2VpdmUgdGhlIGRlYnVnZ2luZyBzdHJlYW0sIHlvdSB3YWl0IGZvciAiQ01EX1BST1BfVkFMVUVfSVMiCisgICBjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eSBmcm9tIHRoZSBOQ1AuCisKKzUuNi4yLiAgUFJPUCAxMTM6IFBST1BfU1RSRUFNX1JBVworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlLVN0cmVhbQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiZEQiCisKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IE9jdGV0czogfCAgICAgICAyICAgICAgICB8ICAgICBuICAgICAgfCAgICAgICBuICAgICAgICB8CisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCBGaWVsZHM6IHwgRlJBTUVfREFUQV9MRU4gfCBGUkFNRV9EQVRBIHwgRlJBTUVfTUVUQURBVEEgfAorICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgc3RyZWFtIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyByYXcKKyAgIHBhY2tldHMgdG8gYW5kIGZyb20gdGhlIHJhZGlvLiAgVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUKKyAgIG1ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgTUFDIGFuZCBQSFkgYmVpbmcgdXNlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdQorICAgd2FpdCBmb3IgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUKKyAgIE5DUC4KKworICAgSW1wbGVtZW50YXRpb25zIG1heSBPUFRJT05BTExZIHN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gdHJhbnNtaXQKKyAgIGFyYml0cmFyeSByYXcgcGFja2V0cy4gIFN1cHBvcnQgZm9yIHRoaXMgZmVhdHVyZSBpcyBpbmRpY2F0ZWQgYnkgdGhlCisgICBwcmVzZW5jZSBvZiB0aGUgIkNBUF9XUklUQUJMRV9SQVdfU1RSRUFNIiBjYXBhYmlsaXR5LgorCisgICBJZiB0aGUgY2FwYWJpbGl0eSAiQ0FQX1dSSVRBQkxFX1JBV19TVFJFQU0iIGlzIHNldCwgdGhlbiBwYWNrZXRzCisgICB3cml0dGVuIHRvIHRoaXMgc3RyZWFtIHdpdGggIkNNRF9QUk9QX1ZBTFVFX1NFVCIgd2lsbCBiZSBzZW50IG91dAorICAgb3ZlciB0aGUgcmFkaW8uICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgcmFkaW8gZGlyZWN0bHksCisgICB3aXRoIHRoZSBzdGFjayBiZWluZyBpbXBsZW1lbnRlZCBvbiB0aGUgaG9zdCBpbnN0ZWFkIG9mIHRoZSBOQ1AuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjYuMi4xLiAgRnJhbWUgTWV0YWRhdGEgRm9ybWF0CisKKyAgIEFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiAiRlJBTUVfREFUQV9MRU4iIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEgYW5kCisgICBpcyBPUFRJT05BTC4gIEZyYW1lIG1ldGFkYXRhIE1BWSBiZSBlbXB0eSBvciBwYXJ0aWFsbHkgc3BlY2lmaWVkLgorICAgUGFydGlhbGx5IHNwZWNpZmllZCBtZXRhZGF0YSBNVVNUIGJlIGFjY2VwdGVkLiAgRGVmYXVsdCB2YWx1ZXMgYXJlCisgICB1c2VkIGZvciBhbGwgdW5zcGVjaWZpZWQgZmllbGRzLgorCisgICBUaGUgc2FtZSBnZW5lcmFsIGZvcm1hdCBpcyB1c2VkIGZvciAiUFJPUF9TVFJFQU1fUkFXIiwKKyAgICJQUk9QX1NUUkVBTV9ORVQiLCBhbmQgIlBST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSIuICBJdCBjYW4gYmUgdXNlZAorICAgZm9yIGZyYW1lcyBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdCBhcyB3ZWxsIGFzIGZyYW1lcyBzZW50IGZyb20KKyAgIHRoZSBob3N0IHRvIHRoZSBOQ1AuCisKKyAgIFRoZSBmcmFtZSBtZXRhZGF0YSBmaWVsZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKworICAgICB8IEZpZWxkICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgVHlwZSAgICAgICB8IExlbiB8IERlZmF1bHQgfAorICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKworICAgICB8IE1EX1BPV0VSIHwgKGRCbSkgUlNTSS9UWC1Qb3dlciAgIHwgImMiIGludDggICB8ICAxICB8ICAgLTEyOCAgfAorICAgICB8IE1EX05PSVNFIHwgKGRCbSkgTm9pc2UgZmxvb3IgICAgIHwgImMiIGludDggICB8ICAxICB8ICAgLTEyOCAgfAorICAgICB8IE1EX0ZMQUcgIHwgRmxhZ3MgKGRlZmluZWQgYmVsb3cpIHwgIlMiIHVpbnQxNiB8ICAyICB8ICAgICAgICAgfAorICAgICB8IE1EX1BIWSAgIHwgUEhZLXNwZWNpZmljIGRhdGEgICAgIHwgImQiIGRhdGEgICB8ID49MiB8ICAgICAgICAgfAorICAgICB8IE1EX1ZFTkQgIHwgVmVuZG9yLXNwZWNpZmljIGRhdGEgIHwgImQiIGRhdGEgICB8ID49MiB8ICAgICAgICAgfAorICAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKworCisgICBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgaWdub3JlZCBieSB0aGUgTkNQIGZvciBwYWNrZXRzIHNlbnQgdG8gaXQKKyAgIGZyb20gdGhlIGhvc3Q6CisKKyAgIG8gIE1EX05PSVNFCisgICBvICBNRF9GTEFHCisKKyAgIFdoZW4gc3BlY2lmeWluZyAiTURfUE9XRVIiIGZvciBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCwgdGhlIGFjdHVhbAorICAgdHJhbnNtaXQgcG93ZXIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyAgICJQUk9QX1BIWV9UWF9QT1dFUiIgKFNlY3Rpb24gNS43LjYpLiAgV2hlbiBsZWZ0IHVuc3BlY2lmaWVkIChvciBzZXQKKyAgIHRvIHRoZSB2YWx1ZSAtMTI4KSwgYW4gYXBwcm9wcmlhdGUgdHJhbnNtaXQgcG93ZXIgd2lsbCBiZSBjaG9zZW4gYnkKKyAgIHRoZSBOQ1AuCisKKyAgIFRoZSBiaXQgdmFsdWVzIGluICJNRF9GTEFHIiBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgorCisKKworCisKKworCisKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDM1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8ICAgQml0ICAgfCAgTWFzayAgfCBOYW1lICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gaWYgc2V0ICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCAgICAxNSAgIHwgMHgwMDAxIHwgTURfRkxBR19UWCAgICAgICB8IFBhY2tldCB3YXMgdHJhbnNtaXR0ZWQsIG5vdCB8CisgICB8ICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgcmVjZWl2ZWQuICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgMTMgICB8IDB4MDAwNCB8IE1EX0ZMQUdfQkFEX0ZDUyAgfCBQYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGggICAgfAorICAgfCAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGJhZCBGQ1MgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgIDEyICAgfCAweDAwMDggfCBNRF9GTEFHX0RVUEUgICAgIHwgUGFja2V0IHNlZW1zIHRvIGJlIGEgICAgICAgIHwKKyAgIHwgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBkdXBsaWNhdGUgICAgICAgICAgICAgICAgICAgfAorICAgfCAgMC0xMSwgIHwgMHhGRkYyIHwgTURfRkxBR19SRVNFUlZFRCB8IEZsYWdzIHJlc2VydmVkIGZvciBmdXR1cmUgICB8CisgICB8ICAgIDE0ICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgdXNlLiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGUgZm9ybWF0IG9mICJNRF9QSFkiIGlzIHNwZWNpZmllZCBieSB0aGUgUEhZIGxheWVyIGN1cnJlbnRseSBpbgorICAgdXNlLCBhbmQgbWF5IGNvbnRhaW4gaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgY2hhbm5lbCwgTFFJLCBhbnRlbm5hLAorICAgb3Igb3RoZXIgcGVydGFpbmVudCBpbmZvcm1hdGlvbi4KKworNS42LjMuICBQUk9QIDExNDogUFJPUF9TVFJFQU1fTkVUCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJkRCIKKworICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgIDIgICAgICAgIHwgICAgIG4gICAgICB8ICAgICAgIG4gICAgICAgIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IEZpZWxkczogfCBGUkFNRV9EQVRBX0xFTiB8IEZSQU1FX0RBVEEgfCBGUkFNRV9NRVRBREFUQSB8CisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKworICAgVGhpcyBzdHJlYW0gcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBhbmQgcmVjZWl2aW5nIGRhdGEKKyAgIHBhY2tldHMgdG8gYW5kIGZyb20gdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBuZXR3b3JrLiAgVGhlIGV4YWN0IGZvcm1hdAorICAgb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbAorICAgYmVpbmcgdXNlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdQorICAgd2FpdCBmb3IgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUKKyAgIE5DUC4KKworICAgVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsICJDTURfUFJPUF9WQUxVRV9TRVQiIG9uIHRoaXMKKyAgIHByb3BlcnR5IHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKKyAgIEFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiAiRlJBTUVfREFUQV9MRU4iIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorICAgZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUuNi4yLjEuCisKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzZdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjYuNC4gIFBST1AgMTE1OiBQUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImREIgorCisgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCBPY3RldHM6IHwgICAgICAgMiAgICAgICAgfCAgICAgbiAgICAgIHwgICAgICAgbiAgICAgICAgfAorICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgRmllbGRzOiB8IEZSQU1FX0RBVEFfTEVOIHwgRlJBTUVfREFUQSB8IEZSQU1FX01FVEFEQVRBIHwKKyAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGlzIHN0cmVhbSBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcKKyAgIHVuZW5jcnlwdGVkIGFuZCB1bmF1dGhlbnRpY2F0ZWQgZGF0YSBwYWNrZXRzIHRvIGFuZCBmcm9tIG5lYXJieQorICAgZGV2aWNlcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRldmljZSBjb21taXNzaW9uaW5nLiAgVGhlIGV4YWN0IGZvcm1hdAorICAgb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbAorICAgYmVpbmcgdXNlZC4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBhIHN0cmVhbWluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGF0IHlvdSBjYW5ub3QKKyAgIGV4cGxpY2l0bHkgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuICBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdQorICAgd2FpdCBmb3IgIkNNRF9QUk9QX1ZBTFVFX0lTIiBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUKKyAgIE5DUC4KKworICAgVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsICJDTURfUFJPUF9WQUxVRV9TRVQiIG9uIHRoaXMKKyAgIHByb3BlcnR5IHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKKyAgIEFueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiAiRlJBTUVfREFUQV9MRU4iIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorICAgZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUuNi4yLjEuCisKKzUuNy4gIFBIWSBQcm9wZXJ0aWVzCisKKzUuNy4xLiAgUFJPUCAzMjogUFJPUF9QSFlfRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIiAoYm9vbDgpCisKKyAgIFNldCB0byAxIGlmIHRoZSBQSFkgaXMgZW5hYmxlZCwgc2V0IHRvIDAgb3RoZXJ3aXNlLiAgTWF5IGJlIGRpcmVjdGx5CisgICBlbmFibGVkIHRvIGJ5cGFzcyBoaWdoZXItbGV2ZWwgcGFja2V0IHByb2Nlc3NpbmcgaW4gb3JkZXIgdG8KKyAgIGltcGxlbWVudCB0aGluZ3MgbGlrZSBwYWNrZXQgc25pZmZlcnMuICBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlCisgICB3cml0dGVuIGlmIHRoZSAiU1BJTkVMX0NBUF9NQUNfUkFXIiBjYXBhYmlsaXR5IGlzIHByZXNlbnQuCisKKzUuNy4yLiAgUFJPUCAzMzogUFJPUF9QSFlfQ0hBTgorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIiAodWludDgpCisKKyAgIFZhbHVlIGlzIHRoZSBjdXJyZW50IGNoYW5uZWwuICBNdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcworICAgY29udGFpbmVkIGluICJQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCIuCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDM3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS43LjMuICBQUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoQykiIChhcnJheSBvZiB1aW50OCkKKyAgIG8gIFVuaXQ6IExpc3Qgb2YgY2hhbm5lbHMKKworICAgVmFsdWUgaXMgYSBsaXN0IG9mIGNoYW5uZWwgdmFsdWVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuCisKKzUuNy40LiAgUFJPUCAzNTogUFJPUF9QSFlfRlJFUQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkwiICh1aW50MzIpCisgICBvICBVbml0OiBLaWxvaGVydHoKKworICAgVmFsdWUgaXMgdGhlIHJhZGlvIGZyZXF1ZW5jeSAoaW4ga2lsb2hlcnR6KSBvZiB0aGUgY3VycmVudCBjaGFubmVsLgorCis1LjcuNS4gIFBST1AgMzY6IFBST1BfUEhZX0NDQV9USFJFU0hPTEQKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYyIgKGludDgpCisgICBvICBVbml0OiBkQm0KKworICAgVmFsdWUgaXMgdGhlIENDQSAoY2xlYXItY2hhbm5lbCBhc3Nlc3NtZW50KSB0aHJlc2hvbGQuICBTZXQgdG8gLTEyOAorICAgdG8gZGlzYWJsZS4KKworICAgV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZSB0aGF0IGlzCisgICBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKzUuNy42LiAgUFJPUCAzNzogUFJPUF9QSFlfVFhfUE9XRVIKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYyIgKGludDgpCisgICBvICBVbml0OiBkQm0KKworICAgVmFsdWUgaXMgdGhlIHRyYW5zbWl0IHBvd2VyIG9mIHRoZSByYWRpby4KKworICAgV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZSB0aGF0IGlzCisgICBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKzUuNy43LiAgUFJPUCAzODogUFJPUF9QSFlfUlNTSQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiIChpbnQ4KQorICAgbyAgVW5pdDogZEJtCisKKyAgIFZhbHVlIGlzIHRoZSBjdXJyZW50IFJTU0kgKFJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0aW9uKSBmcm9tCisgICB0aGUgcmFkaW8uICBUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIGluIGVuZXJneSBzY2FucyBhbmQgZm9yCisgICBkZXRlcm1pbmluZyB0aGUgYW1iaWVudCBub2lzZSBmbG9vciBmb3IgdGhlIG9wZXJhdGluZyBlbnZpcm9ubWVudC4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDM4XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS43LjguICBQUk9QIDM5OiBQUk9QX1BIWV9SWF9TRU5TSVRJVklUWQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiIChpbnQ4KQorICAgbyAgVW5pdDogZEJtCisKKyAgIFZhbHVlIGlzIHRoZSByYWRpbyByZWNlaXZlIHNlbnNpdGl2aXR5LiAgVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBhcworICAgbG93ZXIgYm91bmQgbm9pc2UgZmxvb3IgZm9yIGxpbmsgbWV0cmljcyBjb21wdXRhdGlvbi4KKworNS44LiAgTUFDIFByb3BlcnRpZXMKKworNS44LjEuICBQUk9QIDQ4OiBQUk9QX01BQ19TQ0FOX1NUQVRFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisgICBvICBVbml0OiBFbnVtZXJhdGlvbgorCisgICBQb3NzaWJsZSBWYWx1ZXM6CisKKyAgIG8gIDA6ICJTQ0FOX1NUQVRFX0lETEUiCisgICBvICAxOiAiU0NBTl9TVEFURV9CRUFDT04iCisgICBvICAyOiAiU0NBTl9TVEFURV9FTkVSR1kiCisgICBvICAzOiAiU0NBTl9TVEFURV9ESVNDT1ZFUiIKKworICAgU2V0IHRvICJTQ0FOX1NUQVRFX0JFQUNPTiIgdG8gc3RhcnQgYW4gYWN0aXZlIHNjYW4uICBCZWFjb25zIHdpbGwgYmUKKyAgIGVtaXR0ZWQgZnJvbSAiUFJPUF9NQUNfU0NBTl9CRUFDT04iLgorCisgICBTZXQgdG8gIlNDQU5fU1RBVEVfRU5FUkdZIiB0byBzdGFydCBhbiBlbmVyZ3kgc2Nhbi4gIENoYW5uZWwgZW5lcmd5CisgICByZXN1bHQgd2lsbCBiZSByZXBvcnRlZCBieSBlbWlzc2lvbnMgb2YgIlBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCIKKyAgIChwZXIgY2hhbm5lbCkuCisKKyAgIFNldCB0byAiU0NBTl9TVEFURV9ESVNPVkVSIiB0byBzdGFydCBhIFRocmVhZCBNTEUgZGlzY292ZXJ5IHNjYW4KKyAgIG9wZXJhdGlvbi4gIERpc2NvdmVyeSBzY2FuIHJlc3VsdCB3aWxsIGJlIGVtaXR0ZWQgZnJvbQorICAgIlBST1BfTUFDX1NDQU5fQkVBQ09OIi4KKworICAgVmFsdWUgc3dpdGNoZXMgdG8gIlNDQU5fU1RBVEVfSURMRSIgd2hlbiBzY2FuIGlzIGNvbXBsZXRlLgorCis1LjguMi4gIFBST1AgNDk6IFBST1BfTUFDX1NDQU5fTUFTSworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKEMpIgorICAgbyAgVW5pdDogTGlzdCBvZiBjaGFubmVscyB0byBzY2FuCisKKzUuOC4zLiAgUFJPUCA1MDogUFJPUF9NQUNfU0NBTl9QRVJJT0QKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiUyIgKHVpbnQxNikKKyAgIG8gIFVuaXQ6IG1pbGxpc2Vjb25kcyBwZXIgY2hhbm5lbAorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgMzldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis1LjguNC4gIFBST1AgNTE6IFBST1BfTUFDX1NDQU5fQkVBQ09OCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkNjZGQiIChvciAiQ2N0KEVTU2MpdChpQ1VkZCkiKQorCisgICAgICstLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgIHwgT2N0ZXRzOiB8IDEgIHwgIDEgICB8ICAgIDIgICAgfCAgICBuICAgICB8ICAgIDIgICAgfCAgICBuICAgICB8CisgICAgICstLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgIHwgRmllbGRzOiB8IENIIHwgUlNTSSB8IE1BQ19MRU4gfCBNQUNfREFUQSB8IE5FVF9MRU4gfCBORVRfREFUQSB8CisgICAgICstLS0tLS0tLS0rLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgIFNjYW4gYmVhY29ucyBoYXZlIHR3byBlbWJlZGRlZCBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBNQUMgbGF5ZXIgYW5kIHRoZSBORVQgbGF5ZXIuICBUaGVpciBmb3JtYXQgZGVwZW5kcyBvbiB0aGUKKyAgIE1BQyBhbmQgTkVUIGxheWVyIGN1cnJlbnRseSBpbiB1c2UuICBUaGUgZm9ybWF0IGJlbG93IGlzIGZvciBhbgorICAgODAyLjE1LjQgTUFDIHdpdGggVGhyZWFkOgorCisgICBvICAiQyI6IENoYW5uZWwKKyAgIG8gICJjIjogUlNTSSBvZiB0aGUgYmVhY29uCisgICBvICAidCI6IE1BQyBsYXllciBwcm9wZXJ0aWVzICg4MDIuMTUuNCBsYXllciBzaG93biBiZWxvdyBmb3IKKyAgICAgIGNvbnZlbmllbmNlKQorCisgICAgICAqICAiRSI6IExvbmcgYWRkcmVzcworICAgICAgKiAgIlMiOiBTaG9ydCBhZGRyZXNzCisgICAgICAqICAiUyI6IFBBTi1JRAorICAgICAgKiAgImMiOiBMUUkKKyAgIG8gIE5FVCBsYXllciBwcm9wZXJ0aWVzIChTdGFuZGFyZCBuZXQgbGF5ZXIgc2hvd24gYmVsb3cgZm9yCisgICAgICBjb252ZW5pZW5jZSkKKworICAgICAgKiAgImkiOiBQcm90b2NvbCBOdW1iZXIKKyAgICAgICogICJDIjogRmxhZ3MKKyAgICAgICogICJVIjogTmV0d29yayBOYW1lCisgICAgICAqICAiZCI6IFhQQU5JRAorICAgICAgKiAgImQiOiBTdGVlcmluZyBkYXRhCisKKyAgIEV4dHJhIHBhcmFtZXRlcnMgbWF5IGJlIGFkZGVkIHRvIGVhY2ggb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCisgICBmdXR1cmUsIHNvIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIHJlYWQgdGhlIGxlbmd0aCB0aGF0IHByZXBlbmRzIGVhY2gKKyAgIHN0cnVjdHVyZS4KKworNS44LjUuICBQUk9QIDUyOiBQUk9QX01BQ18xNV80X0xBRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkUiCisKKyAgIFRoZSA4MDIuMTUuNCBsb25nIGFkZHJlc3Mgb2YgdGhpcyBub2RlLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgcHJlc2VudCBvbiBOQ1BzIHdoaWNoIGltcGxlbWVudCA4MDIuMTUuNAorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS44LjYuICBQUk9QIDUzOiBQUk9QX01BQ18xNV80X1NBRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlMiCisKKyAgIFRoZSA4MDIuMTUuNCBzaG9ydCBhZGRyZXNzIG9mIHRoaXMgbm9kZS4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHByZXNlbnQgb24gTkNQcyB3aGljaCBpbXBsZW1lbnQgODAyLjE1LjQKKworNS44LjcuICBQUk9QIDU0OiBQUk9QX01BQ18xNV80X1BBTklECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlMiCisKKyAgIFRoZSA4MDIuMTUuNCBQQU5JRCB0aGlzIG5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgcHJlc2VudCBvbiBOQ1BzIHdoaWNoIGltcGxlbWVudCA4MDIuMTUuNAorCis1LjguOC4gIFBST1AgNTU6IFBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorCisgICBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmF3IE1BQyBmcmFtZXMgdG8gYmUgZW1pdHRlZCBmcm9tCisgICAiUFJPUF9TVFJFQU1fUkFXIi4gIFNlZSBTZWN0aW9uIDUuNi4yLgorCis1LjguOS4gIFBST1AgNTY6IFBST1BfTUFDX1BST01JU0NVT1VTX01PREUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQyIKKworICAgUG9zc2libGUgVmFsdWVzOgorCisgICArLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgSWQgfCAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgfCAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgfAorICAgKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDAgIHwgICAiTUFDX1BST01JU0NVT1VTX01PREVfT0ZGIiAgIHwgIE5vcm1hbCBNQUMgZmlsdGVyaW5nIGlzIGluIHwKKyAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHBsYWNlLiAgICAgICAgICAgfAorICAgfCAxICB8ICJNQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLIiB8ICAgQWxsIE1BQyBwYWNrZXRzIG1hdGNoaW5nICB8CisgICB8ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5ldHdvcmsgYXJlIHBhc3NlZCB1cCB0aGUgIHwKKyAgIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHN0YWNrLiAgICAgICAgICAgfAorICAgfCAyICB8ICAiTUFDX1BST01JU0NVT1VTX01PREVfRlVMTCIgICB8IEFsbCBkZWNvZGVkIE1BQyBwYWNrZXRzIGFyZSB8CisgICB8ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHBhc3NlZCB1cCB0aGUgc3RhY2suICAgIHwKKyAgICstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBTZWUgU2VjdGlvbiA1LjYuMi4KKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0MV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuOC4xMC4gIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVAorCisgICBvICBUeXBlOiBSZWFkLU9ubHktU3RyZWFtCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDYyIKKworICAgVGhpcyBwcm9wZXJ0eSBpcyBlbWl0dGVkIGR1cmluZyBlbmVyZ3kgc2NhbiBvcGVyYXRpb24gcGVyIHNjYW5uZWQKKyAgIGNoYW5uZWwgd2l0aCBmb2xsb3dpbmcgZm9ybWF0OgorCisgICBvICAiQyI6IENoYW5uZWwKKyAgIG8gICJjIjogUlNTSSAoaW4gZEJtKQorCis1LjguMTEuICBQUk9QIDQ4NjQ6IFBST1BfTUFDX1dISVRFTElTVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKFQoRWMpKSIKKyAgIG8gIFJlcXVpcmVkIGNhcGFiaWxpdHk6ICJDQVBfTUFDX1dISVRFTElTVCIKKworICAgU3RydWN0dXJlIFBhcmFtZXRlcnM6CisKKyAgIG8gICJFIjogRVVJNjQgYWRkcmVzcyBvZiBub2RlCisgICBvICAiYyI6IE9wdGlvbmFsIFJTU0ktb3ZlcnJpZGUgdmFsdWUuICBUaGUgdmFsdWUgMTI3IGluZGljYXRlcyB0aGF0CisgICAgICB0aGUgUlNTSS1vdmVycmlkZSBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIGFkZHJlc3MuICBJZgorICAgICAgdGhpcyB2YWx1ZSBpcyBvbWl0dGVkIHdoZW4gc2V0dGluZyBvciBpbnNlcnRpbmcsIGl0IGlzIGFzc3VtZWQgdG8KKyAgICAgIGJlIDEyNy4gIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgd2hlbiByZW1vdmluZy4KKworNS44LjEyLiAgUFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9NQUNfV0hJVEVMSVNUIgorCis1LjguMTMuICBQUk9QIDQ4Njc6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRU5BQkxFRAorCisgICBvICBUeXBlOiBXcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgU2V0IHRvIHRydWUgdG8gZW5hYmxlIHJhZGlvIHNvdXJjZSBtYXRjaGluZyBvciBmYWxzZSB0byBkaXNhYmxlIGl0LgorICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIlNQSU5FTF9DQVBfTUFDX1JBVyIKKyAgIGNhcGFiaWxpdHkgaXMgcHJlc2VudC4gIFRoZSBzb3VyY2UgbWF0Y2ggZnVuY3Rpb25hbGl0eSBpcyB1c2VkIGJ5CisgICByYWRpb3Mgd2hlbiBnZW5lcmF0aW5nIEFDS3MuICBUaGUgc2hvcnQgYW5kIGV4dGVuZGVkIGFkZHJlc3MgbGlzdHMKKyAgIGFyZSB1c2VkIGZvciBzZXR0aW5ncyB0aGUgRnJhbWUgUGVuZGluZyBiaXQgaW4gdGhlIEFDS3MuCisKKzUuOC4xNC4gIFBST1AgNDg2ODogU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMKKworICAgbyAgVHlwZTogV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEoUykiCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNDJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBDb25maWd1cmVzIHRoZSBsaXN0IG9mIHNob3J0IGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcuCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiU1BJTkVMX0NBUF9NQUNfUkFXIgorICAgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCisgICBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworICAgbyAgIlMiOiBTaG9ydCBhZGRyZXNzIGZvciBoYXJkd2FyZSBnZW5lcmF0ZWQgQUNLcworCis1LjguMTUuICBQUk9QIDQ4Njk6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTCisKKyAgIG8gIFR5cGU6IFdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKEUpIgorCisgICBDb25maWd1cmVzIHRoZSBsaXN0IG9mIGV4dGVuZGVkIGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcuCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiU1BJTkVMX0NBUF9NQUNfUkFXIgorICAgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCisgICBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworICAgbyAgIkUiOiBFVUk2NCBhZGRyZXNzIGZvciBoYXJkd2FyZSBnZW5lcmF0ZWQgQUNLcworCis1LjguMTYuICBQUk9QIDQ4NzA6IFBST1BfTUFDX0JMQUNLTElTVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKFQoRSkpIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9NQUNfV0hJVEVMSVNUIgorCisgICBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworICAgbyAgIkUiOiBFVUk2NCBhZGRyZXNzIG9mIG5vZGUKKworNS44LjE3LiAgUFJPUCA0ODcxOiBQUk9QX01BQ19CTEFDS0xJU1RfRU5BQkxFRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9NQUNfV0hJVEVMSVNUIgorCis1LjkuICBORVQgUHJvcGVydGllcworCis1LjkuMS4gIFBST1AgNjQ6IFBST1BfTkVUX1NBVkVECisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgbmV0d29yayBzdGF0ZSBzdG9yZWQvc2F2ZWQuCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0M10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzUuOS4yLiAgUFJPUCA2NTogUFJPUF9ORVRfSUZfVVAKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgTmV0d29yayBpbnRlcmZhY2UgdXAvZG93biBzdGF0dXMuICBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKKyAgIHplcm8gaW5kaWNhdGVzIGRvd24uCisKKzUuOS4zLiAgUFJPUCA2NjogUFJPUF9ORVRfU1RBQ0tfVVAKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKyAgIG8gIFVuaXQ6IEVudW1lcmF0aW9uCisKKyAgIFRocmVhZCBzdGFjayBvcGVyYXRpb25hbCBzdGF0dXMuICBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKKyAgIHplcm8gaW5kaWNhdGVzIGRvd24uCisKKzUuOS40LiAgUFJPUCA2NzogUFJPUF9ORVRfUk9MRQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorICAgbyAgVW5pdDogRW51bWVyYXRpb24KKworICAgVmFsdWVzOgorCisgICBvICAwOiAiTkVUX1JPTEVfREVUQUNIRUQiCisgICBvICAxOiAiTkVUX1JPTEVfQ0hJTEQiCisgICBvICAyOiAiTkVUX1JPTEVfUk9VVEVSIgorICAgbyAgMzogIk5FVF9ST0xFX0xFQURFUiIKKworNS45LjUuICBQUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiVSIKKworNS45LjYuICBQUk9QIDY5OiBQUk9QX05FVF9YUEFOSUQKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiRCIKKworNS45LjcuICBQUk9QIDcwOiBQUk9QX05FVF9NQVNURVJfS0VZCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ0XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNS45LjguICBQUk9QIDcxOiBQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUgorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCis1LjkuOS4gIFBST1AgNzI6IFBST1BfTkVUX1BBUlRJVElPTl9JRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCisgICBUaGUgcGFydGl0aW9uIElEIG9mIHRoZSBwYXJ0aXRpb24gdGhhdCB0aGlzIG5vZGUgaXMgYSBtZW1iZXIgb2YuCisKKzUuOS4xMC4gIFBST1AgNzM6IFBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorCis1LjkuMTEuICBQUk9QIDc0OiBQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCis1LjkuMTIuICBQUk9QIDc1OiBQUk9QX05FVF9QU0tDCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKzUuMTAuICBJUHY2IFByb3BlcnRpZXMKKworNS4xMC4xLiAgUFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFIKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICI2IgorCisgICBJUHY2IEFkZHJlc3MKKworNS4xMC4yLiAgUFJPUCA5NzogUFJPUF9JUFY2X01MX0FERFIKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICI2IgorCisgICBJUHY2IEFkZHJlc3MgKyBQcmVmaXggTGVuZ3RoCisKKzUuMTAuMy4gIFBST1AgOTg6IFBST1BfSVBWNl9NTF9QUkVGSVgKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiNkMiCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgSVB2NiBQcmVmaXggKyBQcmVmaXggTGVuZ3RoCisKKzUuMTAuNC4gIFBST1AgOTk6IFBST1BfSVBWNl9BRERSRVNTX1RBQkxFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkEodCg2Q0xMQykpIgorCisgICBBcnJheSBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmc6CisKKyAgIG8gICI2IjogSVB2NiBBZGRyZXNzCisgICBvICAiQyI6IE5ldHdvcmsgUHJlZml4IExlbmd0aAorICAgbyAgIkwiOiBWYWxpZCBMaWZldGltZQorICAgbyAgIkwiOiBQcmVmZXJyZWQgTGlmZXRpbWUKKyAgIG8gICJDIjogRmxhZ3MKKworNS4xMC41LiAgUFJPUCAxMDE6IFBST1BfSVB2Nl9JQ01QX1BJTkdfT0ZGTE9BRAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJiIgorCisgICBBbGxvdyB0aGUgTkNQIHRvIGRpcmVjdGx5IHJlc3BvbmQgdG8gSUNNUCBwaW5nIHJlcXVlc3RzLiAgSWYgdGhpcyBpcworICAgdHVybmVkIG9uLCBwaW5nIHJlcXVlc3QgSUNNUCBwYWNrZXRzIHdpbGwgbm90IGJlIHBhc3NlZCB0byB0aGUgaG9zdC4KKworICAgRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiLgorCis1LjExLiAgRGVidWcgUHJvcGVydGllcworCis1LjExLjEuICBQUk9QIDE2Mzg0OiBQUk9QX0RFQlVHX1RFU1RfQVNTRVJUCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgUmVhZGluZyB0aGlzIHByb3BlcnR5IHdpbGwgY2F1c2UgYW4gYXNzZXJ0IG9uIHRoZSBOQ1AuICBUaGlzIGlzCisgICBpbnRlbmRlZCBmb3IgdGVzdGluZyB0aGUgYXNzZXJ0IGZ1bmN0aW9uYWxpdHkgb2YgdW5kZXJseWluZyBwbGF0Zm9ybS8KKyAgIE5DUC4gIEFzc2VydCBzaG91bGQgaWRlYWxseSBjYXVzZSB0aGUgTkNQIHRvIHJlc2V0LCBidXQgaWYgImFzc2VydCIKKyAgIGlzIG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQgYm9vbGVhbiB2YWx1ZSBvZiAiZmFsc2UiIGlzIHJldHVybmVkIGluCisgICByZXNwb25zZS4KKworNS4xMS4yLiAgUFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKyAgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgTkNQIGxvZyBsZXZlbC4gIEN1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmUKKyAgICh3aGljaCBmb2xsb3dzIHRoZSBSRkMgNTQyNCk6CisKKyAgIG8gIDA6IEVtZXJnZW5jeSAoZW1lcmcpLgorICAgbyAgMTogQWxlcnQgKGFsZXJ0KS4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ2XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgMjogQ3JpdGljYWwgKGNyaXQpLgorICAgbyAgMzogRXJyb3IgKGVycikuCisgICBvICA0OiBXYXJuaW5nICh3YXJuKS4KKyAgIG8gIDU6IE5vdGljZSAobm90aWNlKS4KKyAgIG8gIDY6IEluZm9ybWF0aW9uIChpbmZvKS4KKyAgIG8gIDc6IERlYnVnIChkZWJ1ZykuCisKKyAgIElmIHRoZSBOQ1Agc3VwcG9ydHMgZHluYW1pYyBsb2cgbGV2ZWwgY29udHJvbCwgc2V0dGluZyB0aGlzIHByb3BlcnR5CisgICBjaGFuZ2VzIHRoZSBsb2cgbGV2ZWwgYWNjb3JkaW5nbHkuICBHZXR0aW5nIHRoZSB2YWx1ZSByZXR1cm5zIHRoZQorICAgY3VycmVudCBsb2cgbGV2ZWwuICBJZiB0aGUgZHluYW1pYyBsb2cgbGV2ZWwgY29udHJvbCBpcyBub3QKKyAgIHN1cHBvcnRlZCwgc2V0dGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgYSAiUFJPUF9MQVNUX1NUQVRVUyIgd2l0aAorICAgIlNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1AiLgorCis2LiAgU3RhdHVzIENvZGVzCisKKyAgIFN0YXR1cyBjb2RlcyBhcmUgc2VudCBmcm9tIHRoZSBOQ1AgdG8gdGhlIGhvc3QgdmlhICJQUk9QX0xBU1RfU1RBVFVTIgorICAgdXNpbmcgdGhlICJDTURfVkFMVUVfSVMiIGNvbW1hbmQgdG8gaW5kaWNhdGUgdGhlIHJldHVybiBzdGF0dXMgb2YgYQorICAgcHJldmlvdXMgY29tbWFuZC4gIEFzIHdpdGggYW55IHJlc3BvbnNlLCB0aGUgVElEIGZpZWxkIG9mIHRoZSBGTEFHCisgICBieXRlIGlzIHVzZWQgdG8gY29ycmVsYXRlIHRoZSByZXNwb25zZSB3aXRoIHRoZSByZXF1ZXN0LgorCisgICBOb3RlIHRoYXQgbW9zdCBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQgY29tbWFuZHMgZG8gbm90IGluZGljYXRlIGEgbGFzdAorICAgc3RhdHVzIG9mICJTVEFUVVNfT0siLiAgVGhlIHVzdWFsIHdheSB0aGUgTkNQIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwKKyAgIGNvbW1hbmQgaXMgdG8gbWlycm9yIHRoZSBwcm9wZXJ0eSBjaGFuZ2UgYmFjayB0byB0aGUgaG9zdC4gIEZvcgorICAgZXhhbXBsZSwgaWYgeW91IGRvIGEgIkNNRF9WQUxVRV9TRVQiIG9uICJQUk9QX1BIWV9FTkFCTEVEIiwgdGhlIE5DUAorICAgd291bGQgaW5kaWNhdGUgc3VjY2VzcyBieSByZXNwb25kaW5nIHdpdGggYSAiQ01EX1ZBTFVFX0lTIiBmb3IKKyAgICJQUk9QX1BIWV9FTkFCTEVEIi4gIElmIHRoZSBjb21tYW5kIGZhaWxlZCwgIlBST1BfTEFTVF9TVEFUVVMiIHdvdWxkCisgICBiZSBlbWl0dGVkIGluc3RlYWQuCisKKyAgIFNlZSBTZWN0aW9uIDUuNS4xIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uICJQUk9QX0xBU1RfU1RBVFVTIi4KKworICAgbyAgMDogIlNUQVRVU19PSyI6IE9wZXJhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAgIG8gIDE6ICJTVEFUVVNfRkFJTFVSRSI6IE9wZXJhdGlvbiBoYXMgZmFpbGVkIGZvciBzb21lIHVuZGVmaW5lZAorICAgICAgcmVhc29uLgorICAgbyAgMjogIlNUQVRVU19VTklNUExFTUVOVEVEIjogVGhlIGdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4KKyAgICAgIGltcGxlbWVudGVkLgorICAgbyAgMzogIlNUQVRVU19JTlZBTElEX0FSR1VNRU5UIjogQW4gYXJndW1lbnQgdG8gdGhlIGdpdmVuIG9wZXJhdGlvbgorICAgICAgaXMgaW52YWxpZC4KKyAgIG8gIDQ6ICJTVEFUVVNfSU5WQUxJRF9TVEFURSIgOiBUaGUgZ2l2ZW4gb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZQorICAgICAgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlLgorICAgbyAgNTogIlNUQVRVU19JTlZBTElEX0NPTU1BTkQiOiBUaGUgZ2l2ZW4gY29tbWFuZCBpcyBub3QgcmVjb2duaXplZC4KKyAgIG8gIDY6ICJTVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0UiOiBUaGUgZ2l2ZW4gU3BpbmVsIGludGVyZmFjZSBpcyBub3QKKyAgICAgIHN1cHBvcnRlZC4KKyAgIG8gIDc6ICJTVEFUVVNfSU5URVJOQUxfRVJST1IiOiBBbiBpbnRlcm5hbCBydW50aW1lIGVycm9yIGhhcworICAgICAgb2NjdXJyZWQuCisgICBvICA4OiAiU1RBVFVTX1NFQ1VSSVRZX0VSUk9SIjogQSBzZWN1cml0eSBvciBhdXRoZW50aWNhdGlvbiBlcnJvciBoYXMKKyAgICAgIG9jY3VycmVkLgorICAgbyAgOTogIlNUQVRVU19QQVJTRV9FUlJPUiI6IEFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZQorICAgICAgY29tbWFuZC4KKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDQ3XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgMTA6ICJTVEFUVVNfSU5fUFJPR1JFU1MiOiBUaGUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGFuZCB3aWxsIGJlCisgICAgICBjb21wbGV0ZWQgYXN5bmNocm9ub3VzbHkuCisgICBvICAxMTogIlNUQVRVU19OT01FTSI6IFRoZSBvcGVyYXRpb24gaGFzIGJlZW4gcHJldmVudGVkIGR1ZSB0byBtZW1vcnkKKyAgICAgIHByZXNzdXJlLgorICAgbyAgMTI6ICJTVEFUVVNfQlVTWSI6IFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHBlcmZvcm1pbmcgYSBtdXR1YWxseQorICAgICAgZXhjbHVzaXZlIG9wZXJhdGlvbi4KKyAgIG8gIDEzOiAiU1RBVFVTX1BST1BfTk9UX0ZPVU5EIjogVGhlIGdpdmVuIHByb3BlcnR5IGlzIG5vdCByZWNvZ25pemVkLgorICAgbyAgMTQ6ICJTVEFUVVNfUEFDS0VUX0RST1BQRUQiOiBUaGUgcGFja2V0IHdhcyBkcm9wcGVkLgorICAgbyAgMTU6ICJTVEFUVVNfRU1QVFkiOiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgZW1wdHkuCisgICBvICAxNjogIlNUQVRVU19DTURfVE9PX0JJRyI6IFRoZSBjb21tYW5kIHdhcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZQorICAgICAgaW50ZXJuYWwgYnVmZmVyLgorICAgbyAgMTc6ICJTVEFUVVNfTk9fQUNLIjogVGhlIHBhY2tldCB3YXMgbm90IGFja25vd2xlZGdlZC4KKyAgIG8gIDE4OiAiU1RBVFVTX0NDQV9GQUlMVVJFIjogVGhlIHBhY2tldCB3YXMgbm90IHNlbnQgZHVlIHRvIGEgQ0NBCisgICAgICBmYWlsdXJlLgorICAgbyAgMTk6ICJTVEFUVVNfQUxSRUFEWSI6IFRoZSBvcGVyYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBvciB0aGUKKyAgICAgIHByb3BlcnR5IHdhcyBhbHJlYWR5IHNldCB0byB0aGUgZ2l2ZW4gdmFsdWUuCisgICBvICAyMDogIlNUQVRVU19JVEVNX05PVF9GT1VORCI6IFRoZSBnaXZlbiBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbgorICAgICAgdGhlIHByb3BlcnR5LgorICAgbyAgMjE6ICJTVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QIjogVGhlIGdpdmVuIGNvbW1hbmQgY2Fubm90IGJlCisgICAgICBwZXJmb3JtZWQgb24gdGhpcyBwcm9wZXJ0eS4KKyAgIG8gIDIyLTExMTogUkVTRVJWRUQKKyAgIG8gIDExMi0xMjc6IFJlc2V0IENhdXNlcworCisgICAgICAqICAxMTI6ICJTVEFUVVNfUkVTRVRfUE9XRVJfT04iCisgICAgICAqICAxMTM6ICJTVEFUVVNfUkVTRVRfRVhURVJOQUwiCisgICAgICAqICAxMTQ6ICJTVEFUVVNfUkVTRVRfU09GVFdBUkUiCisgICAgICAqICAxMTU6ICJTVEFUVVNfUkVTRVRfRkFVTFQiCisgICAgICAqICAxMTY6ICJTVEFUVVNfUkVTRVRfQ1JBU0giCisgICAgICAqICAxMTc6ICJTVEFUVVNfUkVTRVRfQVNTRVJUIgorICAgICAgKiAgMTE4OiAiU1RBVFVTX1JFU0VUX09USEVSIgorICAgICAgKiAgMTE5OiAiU1RBVFVTX1JFU0VUX1VOS05PV04iCisgICAgICAqICAxMjA6ICJTVEFUVVNfUkVTRVRfV0FUQ0hET0ciCisgICAgICAqICAxMjEtMTI3OiBSRVNFUlZFRC1SRVNFVC1DT0RFUworICAgbyAgMTI4IC0gMTUsMzU5OiBVTkFMTE9DQVRFRAorICAgbyAgMTUsMzYwIC0gMTYsMzgzOiBWZW5kb3Itc3BlY2lmaWMKKyAgIG8gIDE2LDM4NCAtIDEsOTk5LDk5OTogVU5BTExPQ0FURUQKKyAgIG8gIDIsMDAwLDAwMCAtIDIsMDk3LDE1MTogRXhwZXJpbWVudGFsIFVzZSBPbmx5IChNVVNUIE5FVkVSIGJlIHVzZWQKKyAgICAgIGluIHByb2R1Y3Rpb24hKQorCis3LiAgVGVjaG5vbG9neTogVGhyZWFkKFIpCisKKyAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZW1hbnRpY3MgcmVxdWlyZWQKKyAgIGZvciBtYW5hZ2luZyBhIFRocmVhZChSKSBOQ1AuCisKKyAgIFRocmVhZChSKSBOQ1BzIGhhdmUgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKKyAgIG8gIFRoZSBwcm9wZXJ0eSAiUFJPUF9JTlRFUkZBQ0VfVFlQRSIgbXVzdCBiZSAzLgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0OF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIG8gIFRoZSBub24tb3B0aW9uYWwgcHJvcGVydGllcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIE1VU1QgYmUKKyAgICAgIGltcGxlbWVudGVkOiBDT1JFLCBQSFksIE1BQywgTkVULCBhbmQgSVBWNi4KKworICAgQWxsIHNlcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIGFuIE5DUCBTSE9VTEQgYWxzbyBzdXBwb3J0IHRoZSBuZXR3b3JrCisgICBzYXZlIGZlYXR1cmUgKFNlZSBTZWN0aW9uIDgpLgorCis3LjEuICBDYXBhYmlsaXRpZXMKKworICAgVGhlIFRocmVhZChSKSB0ZWNobm9sb2d5IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXM6CisKKyAgIG8gICJDQVBfTkVUX1RIUkVBRF8xXzAiIC0gSW5kaWNhdGVzIHRoYXQgdGhlIE5DUCBpbXBsZW1lbnRzIHYxLjAgb2YKKyAgICAgIHRoZSBUaHJlYWQoUikgc3RhbmRhcmQuCisgICBvICAiQ0FQX05FVF9USFJFQURfMV8xIiAtIEluZGljYXRlcyB0aGF0IHRoZSBOQ1AgaW1wbGVtZW50cyB2MS4xIG9mCisgICAgICB0aGUgVGhyZWFkKFIpIHN0YW5kYXJkLgorCis3LjIuICBQcm9wZXJ0aWVzCisKKyAgIFByb3BlcnRpZXMgZm9yIFRocmVhZChSKSBhcmUgYWxsb2NhdGVkIG91dCBvZiB0aGUgIlRlY2giIHByb3BlcnR5CisgICBzZWN0aW9uIChzZWUgU2VjdGlvbiA1LjQpLgorCis3LjIuMS4gIFBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiNiIKKworICAgVGhlIElQdjYgYWRkcmVzcyBvZiB0aGUgbGVhZGVyLiAgKE5vdGU6IE1heSBjaGFuZ2UgdG8gbG9uZyBhbmQgc2hvcnQKKyAgIGFkZHJlc3Mgb2YgbGVhZGVyKQorCis3LjIuMi4gIFBST1AgODE6IFBST1BfVEhSRUFEX1BBUkVOVAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkVTIgorICAgbyAgTEFERFIsIFNBRERSCisKKyAgIFRoZSBsb25nIGFkZHJlc3MgYW5kIHNob3J0IGFkZHJlc3Mgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuCisKKzcuMi4zLiAgUFJPUCA4MjogUFJPUF9USFJFQURfQ0hJTERfVEFCTEUKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoRVMpKSIKKworICAgVGFibGUgY29udGFpbmluZyB0aGUgbG9uZyBhbmQgc2hvcnQgYWRkcmVzc2VzIG9mIGFsbCB0aGUgY2hpbGRyZW4gb2YKKyAgIHRoaXMgbm9kZS4KKworCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA0OV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzcuMi40LiAgUFJPUCA4MzogUFJPUF9USFJFQURfTEVBREVSX1JJRAorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKyAgIFRoZSByb3V0ZXItaWQgb2YgdGhlIGN1cnJlbnQgbGVhZGVyLgorCis3LjIuNS4gIFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBUaGUgbGVhZGVyIHdlaWdodCBvZiB0aGUgY3VycmVudCBsZWFkZXIuCisKKzcuMi42LiAgUFJPUCA4NTogUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBUaGUgbGVhZGVyIHdlaWdodCBmb3IgdGhpcyBub2RlLgorCis3LjIuNy4gIFBST1AgODY6IFBST1BfVEhSRUFEX05FVFdPUktfREFUQQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKyAgIFRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuCisKKzcuMi44LiAgUFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04KKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJTIgorCis3LjIuOS4gIFBST1AgODg6IFBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJEIgorCisgICBUaGUgbG9jYWwgc3RhYmxlIG5ldHdvcmsgZGF0YS4KKworNy4yLjEwLiAgUFJPUCA4OTogUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiUyIKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNTBdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis3LjIuMTEuICBQUk9QIDkwOiBQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQSh0KDZDYkNiKSkiCisKKyAgIERhdGEgcGVyIGl0ZW0gaXM6CisKKyAgIG8gICI2IjogSVB2NiBQcmVmaXgKKyAgIG8gICJDIjogUHJlZml4IGxlbmd0aCBpbiBiaXRzCisgICBvICAiYiI6IFN0YWJsZSBmbGFnCisgICBvICAiQyI6IFRMViBmbGFncworICAgbyAgImIiOiAiSXMgZGVmaW5lZCBsb2NhbGx5IiBmbGFnLiAgU2V0IGlmIHRoaXMgbmV0d29yayB3YXMgbG9jYWxseQorICAgICAgZGVmaW5lZC4gIEFzc3VtZWQgdG8gYmUgdHJ1ZSBmb3Igc2V0LCBpbnNlcnQgYW5kIHJlcGxhY2UuICBDbGVhcgorICAgICAgaWYgdGhlIG9uIG1lc2ggbmV0d29yayB3YXMgZGVmaW5lZCBieSBhbm90aGVyIG5vZGUuCisKKzcuMi4xMi4gIFBST1AgOTE6IFBST1BfVEhSRUFEX09GRl9NRVNIX1JPVVRFUworCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoNkNiQ2JiKSkiCisKKyAgIERhdGEgcGVyIGl0ZW0gaXM6CisKKyAgIG8gICI2IjogUm91dGUgUHJlZml4CisgICBvICAiQyI6IFByZWZpeCBsZW5ndGggaW4gYml0cworICAgbyAgImIiOiBTdGFibGUgZmxhZworICAgbyAgIkMiOiBSb3V0ZSBwcmVmZXJlbmNlIGZsYWdzCisgICBvICAiYiI6ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuICBTZXQgaWYgdGhpcyByb3V0ZSBpbmZvIHdhcworICAgICAgbG9jYWxseSBkZWZpbmVkIGFzIHBhcnQgb2YgbG9jYWwgbmV0d29yayBkYXRhLiAgQXNzdW1lZCB0byBiZSB0cnVlCisgICAgICBmb3Igc2V0LCBpbnNlcnQgYW5kIHJlcGxhY2UuICBDbGVhciBpZiB0aGUgcm91dGUgaXMgcGFydCBvZgorICAgICAgcGFydGl0aW9uJ3MgbmV0d29yayBkYXRhLgorICAgbyAgImIiOiAiTmV4dCBob3AgaXMgdGhpcyBkZXZpY2UiIGZsYWcuICBTZXQgaWYgdGhlIG5leHQgaG9wIGZvciB0aGUKKyAgICAgIHJvdXRlIGlzIHRoaXMgZGV2aWNlIGl0c2VsZiAoaS5lLiwgcm91dGUgd2FzIGFkZGVkIGJ5IHRoaXMgZGV2aWNlKQorICAgICAgVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIHdoZW4gYWRkaW5nIGFuIGV4dGVybmFsIHJvdXRlLiAgRm9yIGFueQorICAgICAgYWRkZWQgcm91dGUgdGhlIG5leHQgaG9wIGlzIHRoaXMgZGV2aWNlLgorCis3LjIuMTMuICBQUk9QIDkyOiBQUk9QX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFMKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQShTKSIKKworNy4yLjE0LiAgUFJPUCA5MzogUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImIiCisKKyAgIFNldCB0byB0cnVlIGJlZm9yZSBjaGFuZ2luZyBsb2NhbCBuZXQgZGF0YS4gIFNldCB0byBmYWxzZSB3aGVuCisgICBmaW5pc2hlZC4gIFRoaXMgYWxsb3dzIGNoYW5nZXMgdG8gYmUgYWdncmVnYXRlZCBpbnRvIHNpbmdsZSBldmVudHMuCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDUxXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNy4yLjE1LiAgUFJPUCA5NDogUFJPUF9USFJFQURfTU9ERQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZSBUTFYgZm9yIHRoaXMgbm9kZS4gIFRoZQorICAgbWVhbmluZyBvZiB0aGUgYml0cyBpbiB0aGlzIGJpdGZpZWxkIGFyZSBkZWZpbmVkIGJ5IHNlY3Rpb24gNC41LjIgb2YKKyAgIHRoZSBUaHJlYWQoUikgc3BlY2lmaWNhdGlvbi4KKworNy4yLjE2LiAgUFJPUCA1Mzc2OiBQUk9QX1RIUkVBRF9DSElMRF9USU1FT1VUCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkwiCisKKyAgIFVzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuCisKKzcuMi4xNy4gIFBST1AgNTM3NzogUFJPUF9USFJFQURfUkxPQzE2CisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIlMiCisKKzcuMi4xOC4gIFBST1AgNTM3ODogUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKzcuMi4xOS4gIFBST1AgNTM3OTogUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCis3LjIuMjAuICBQUk9QIDUzODA6IFBST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBBbGxvd3MgeW91IHRvIGdldCBvciBzZXQgdGhlIFRocmVhZChSKSAiTkVUV09SS19JRF9USU1FT1VUIiBjb25zdGFudCwKKyAgIGFzIGRlZmluZWQgYnkgdGhlIFRocmVhZChSKSBzcGVjaWZpY2F0aW9uLgorCis3LjIuMjEuICBQUk9QIDUzODE6IFBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUvV3JpdGUtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQShDKSIgKExpc3Qgb2YgYWN0aXZlIHRocmVhZCByb3V0ZXIgaWRzKQorCisgICBOb3RlIHRoYXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0ICJDTURfR0VUX1ZBTFVFIiByb3V0ZXIKKyAgIGlkcywgYnV0IG1heSBzdXBwb3J0ICJDTURfUkVNT1ZFX1ZBTFVFIiB3aGVuIHRoZSBub2RlIGlzIGEgbGVhZGVyLgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDUyXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworNy4yLjIyLiAgUFJPUCA1MzgyOiBQUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgQWxsb3cgdGhlIEhPU1QgdG8gZGlyZWN0bHkgb2JzZXJ2ZSBhbGwgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZQorICAgTkNQLCBpbmNsdWRpbmcgb25lcyBzZW50IHRvIHRoZSBSTE9DMTYgYWRkcmVzcy4KKworICAgRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiLgorCis3LjIuMjMuICBQUk9QIDUzODM6IFBST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKworICAgQWxsb3cgdGhlIEhPU1QgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHJvdXRlciByb2xlIGlzIGVuYWJsZWQuCisgICBJZiBjdXJyZW50IHJvbGUgaXMgYSByb3V0ZXIsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byAiZmFsc2UiIHN0YXJ0cworICAgYSByZS1hdHRhY2ggcHJvY2VzcyBhcyBhbiBlbmQtZGV2aWNlLgorCis3LjIuMjQuICBQUk9QIDUzODQ6IFBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkMiCisKKzcuMi4yNS4gIFBST1AgNTM4NTogUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiQyIKKworICAgU3BlY2lmaWVzIHRoZSBzZWxmIGltcG9zZWQgcmFuZG9tIGRlbGF5IGluIHNlY29uZHMgYSBSRUVEIHdhaXRzCisgICBiZWZvcmUgcmVnaXN0ZXJpbmcgdG8gYmVjb21lIGFuIEFjdGl2ZSBSb3V0ZXIuCisKKzcuMi4yNi4gIFBST1AgNTM4NjogUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRAorCisgICBvICBUeXBlOiBXcml0ZS1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuICBVcG9uIGJlY29taW5nIGEgcm91dGVyL2xlYWRlciB0aGUKKyAgIG5vZGUgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgUm91dGVyIElkLiAgSWYgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQgaXMKKyAgIG5vdCBzZXQgb3IgaWYgaXQgY2FuIG5vdCBiZSB1c2VkLCBhIHJhbmRvbWx5IGdlbmVyYXRlZCByb3V0ZXIgaWQgaXMKKyAgIHBpY2tlZC4gIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCBvbmx5IHdoZW4gdGhlIGRldmljZSByb2xlIGlzIGVpdGhlcgorICAgZGV0YWNoZWQgb3IgZGlzYWJsZWQuCisKKzcuMi4yNy4gIFBST1AgNTM4NzogUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEUKKworICAgbyAgVHlwZTogUmVhZC1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoRVNMQ2NDYkxMKSkiCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDUzXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgRGF0YSBwZXIgaXRlbSBpczoKKworICAgbyAgIkUiOiBFeHRlbmRlZC9sb25nIGFkZHJlc3MKKyAgIG8gICJTIjogUkxPQzE2CisgICBvICAiTCI6IEFnZQorICAgbyAgIkMiOiBMaW5rIFF1YWxpdHkgSW4KKyAgIG8gICJjIjogQXZlcmFnZSBSU1MKKyAgIG8gICJDIjogTW9kZSAoYml0LWZsYWdzKQorICAgbyAgImIiOiAidHJ1ZSIgaWYgbmVpZ2hib3IgaXMgYSBjaGlsZCwgImZhbHNlIiBvdGhlcndpc2UuCisgICBvICAiTCI6IExpbmsgRnJhbWUgQ291bnRlcgorICAgbyAgIkwiOiBNTEUgRnJhbWUgQ291bnRlcgorCis3LjIuMjguICBQUk9QIDUzODg6IFBST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJDIgorCisgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaWxkcmVuIGN1cnJlbnRseSBhbGxvd2VkLiAgVGhpcworICAgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCB3aGVuIFRocmVhZChSKSBwcm90b2NvbCBvcGVyYXRpb24gaGFzIGJlZW4KKyAgIHN0b3BwZWQuCisKKzcuMi4yOS4gIFBST1AgNTM4OTogUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQQorCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogIkQiCisKKyAgIFRoZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCis3LjIuMzAuICBQUk9QIDUzOTA6IFBST1BfVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiRCIKKworICAgVGhlIHN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCis3LjIuMzEuICBQUk9QIDUzOTE6IFBST1BfVEhSRUFEX0pPSU5FUlMKKworICAgbyAgVHlwZTogSW5zZXJ0L1JlbW92ZSBPbmx5IChvcHRpb25hbGx5IFJlYWQtV3JpdGUpCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJBKHQoVUxFKSkiCisgICBvICBSZXF1aXJlZCBjYXBhYmlsaXR5OiAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiCisKKyAgIERhdGEgcGVyIGl0ZW0gaXM6CisKKyAgIG8gICJVIjogUFNLZAorICAgbyAgIkwiOiBUaW1lb3V0IGluIHNlY29uZHMKKyAgIG8gICJFIjogRXh0ZW5kZWQvbG9uZyBhZGRyZXNzIChvcHRpb25hbCkKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA1NF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFBhc3Nlc3MgUHJlLVNoYXJlZCBLZXkgZm9yIHRoZSBEZXZpY2UgdG8gdGhlIE5DUCBpbiB0aGUgY29tbWlzc2lvbmluZworICAgcHJvY2Vzcy4gIFdoZW4gdGhlIEV4dGVuZGVkIGFkZHJlc3MgaXMgb21taXRlZCBhbGwgRGV2aWNlcyB3aGljaAorICAgcHJvdmlkZWQgYSB2YWxpZCBQU0tkIGFyZSBhbGxvd2VkIHRvIGpvaW4gdGhlIFRocmVhZChSKSBOZXR3b3JrLgorCis3LjIuMzIuICBQUk9QIDUzOTI6IFBST1BfVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVECisKKyAgIG8gIFR5cGU6IFdyaXRlIG9ubHkgKG9wdGlvbmFsbHkgUmVhZC1Xcml0ZSkKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImIiCisgICBvICBSZXF1aXJlZCBjYXBhYmlsaXR5OiAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiCisKKyAgIFNldCB0byB0cnVlIHRvIGVuYWJsZSB0aGUgbmF0aXZlIGNvbW1pc3Npb25lci4gIEl0IGlzIG1hbmRhdG9yeQorICAgYmVmb3JlIGFkZGluZyB0aGUgam9pbmVyIHRvIHRoZSBuZXR3b3JrLgorCis3LjIuMzMuICBQUk9QIDUzOTM6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImIiCisgICBvICBSZXF1aXJlZCBjYXBhYmlsaXR5OiAiQ0FQX1RIUkVBRF9UTUZfUFJPWFkiCisKKyAgIFNldCB0byB0cnVlIHRvIGVuYWJsZSB0aGUgVE1GIHByb3h5LgorCis3LjIuMzQuICBQUk9QIDUzOTQ6IFBST1BfVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU0KKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZS1TdHJlYW0KKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImRTUyIKKyAgIG8gIFJlcXVpcmVkIGNhcGFiaWxpdHk6ICJDQVBfVEhSRUFEX1RNRl9QUk9YWSIKKworICAgRGF0YSBwZXIgaXRlbSBpczoKKworICAgbyAgImQiOiBDb0FQIGZyYW1lCisgICBvICAiUyI6IHNvdXJjZS9kZXN0aW5hdGlvbiBSTE9DL0FMT0MKKyAgIG8gICJTIjogc291cmNlL2Rlc3RpbmF0aW9uIHBvcnQKKworICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0rCisgICAgICAgICAgICAgICB8IE9jdGVjdHM6IHwgICAyICAgIHwgIG4gICB8ICAgIDIgICAgfCAgMiAgIHwKKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tKworICAgICAgICAgICAgICAgfCBGaWVsZHM6ICB8IExlbmd0aCB8IENvQVAgfCBsb2NhdG9yIHwgcG9ydCB8CisgICAgICAgICAgICAgICArLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSsKKworICAgVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIGhvc3QgdG8gc2VuZCBhbmQgcmVjZWl2ZSBUTUYgbWVzc2FnZXMgZnJvbQorICAgdGhlIE5DUCdzIFJMT0MgYWRkcmVzcyBhbmQgc3VwcG9ydCBUaHJlYWQtc3BlY2lmaWMgYm9yZGVyIHJvdXRlcgorICAgZnVuY3Rpb25zLgorCis3LjIuMzUuICBQUk9QIDUzOTU6IFBST1BfVEhSRUFEX0RJU09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOjogImIiCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDU1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIHZhbHVlIHVzZWQgaW4gVGhyZWFkKFIpIE1MRSBEaXNjb3ZlcnkKKyAgIFJlcXVlc3QgVExWIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uICBEZWZhdWx0IHZhbHVlIGlzCisgICAiZmFsc2UiLgorCis3LjIuMzYuICBQUk9QIDUzOTY6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOjogImIiCisKKyAgIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBFVUk2NCBmaWx0ZXJpbmcgZHVyaW5nCisgICBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uICBEZWZhdWx0IHZhbHVlIGlzICJmYWxzZSIuCisKKzcuMi4zNy4gIFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQKKworICAgbyAgVHlwZTogUmVhZC13cml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOjogIlMiCisKKyAgIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBQQU5JRCB1c2VkIGZvciBmaWx0ZXJpbmcgZHVyaW5nIGRpc2NvdmVyeQorICAgc2NhbiBvcGVyYXRpb24uICBEZWZhdWx0IHZhbHVlIGlzICIweGZmZmYiIChicm9hZGNhc3QgUEFOSUQpIHdoaWNoCisgICBkaXNhYmxlcyBQQU5JRCBmaWx0ZXJpbmcuCisKKzcuMi4zOC4gIFBST1AgNTM5ODogUFJPUF9USFJFQURfU1RFRVJJTkdfREFUQQorCisgICBvICBUeXBlOiBXcml0ZS1Pbmx5CisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJFIgorICAgbyAgUmVxdWlyZWQgY2FwYWJpbGl0eTogIkNBUF9PT0JfU1RFRVJJTkdfREFUQSIKKworICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHN0ZWVyaW5nIGRhdGEgZm9yIE1MRSBEaXNjb3ZlcnkKKyAgIFJlc3BvbnNlIG1lc3NhZ2VzLgorCisgICBvICBBbGwgemVyb3MgdG8gY2xlYXIgdGhlIHN0ZWVyaW5nIGRhdGEgKGluZGljYXRpbmcgbm8gc3RlZXJpbmcKKyAgICAgIGRhdGEpLgorICAgbyAgQWxsIDB4RkZzIHRvIHNldCB0aGUgc3RlZXJpbmcgZGF0YSAoYmxvb20gZmlsdGVyKSB0byBhY2NlcHQvYWxsb3cKKyAgICAgIGFsbC4KKyAgIG8gIEEgc3BlY2lmaWMgRVVJNjQgd2hpY2ggaXMgdGhlbiBhZGRlZCB0byBzdGVlcmluZyBkYXRhL2Jsb29tCisgICAgICBmaWx0ZXIuCisKKzguICBGZWF0dXJlOiBOZXR3b3JrIFNhdmUKKworICAgVGhlIG5ldHdvcmsgc2F2ZS9yZWNhbGwgZmVhdHVyZSBpcyBhbiBvcHRpb25hbCBOQ1AgY2FwYWJpbGl0eSB0aGF0LAorICAgd2hlbiBwcmVzZW50LCBhbGxvd3MgdGhlIGhvc3QgdG8gc2F2ZSBhbmQgcmVjYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMKKyAgIGFuZCBzdGF0ZSB0byBhbmQgZnJvbSBub252b2xhdGlsZSBzdG9yYWdlLgorCisgICBUaGUgcHJlc2VuY2Ugb2YgdGhlIHNhdmUvcmVjYWxsIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IGNoZWNraW5nCisgICBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAiQ0FQX05FVF9TQVZFIiBjYXBhYmlsaXR5IGluICJQUk9QX0NBUFMiLgorCisgICBOZXR3b3JrIGNsZWFyIGZlYXR1cmUgYWxsb3dzIGhvc3QgdG8gZXJhc2UgYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMKKyAgIGFuZCBzdGF0ZSBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA1Nl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKzguMS4gIENvbW1hbmRzCisKKzguMS4xLiAgQ01EIDk6IChIb3N0LT5OQ1ApIENNRF9ORVRfU0FWRQorCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgMSAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfU0FWRSB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCisKKyAgIFNhdmUgbmV0d29yayBzdGF0ZSBjb21tYW5kLiAgU2F2ZXMgYW55IGN1cnJlbnQgbmV0d29yayBjcmVkZW50aWFscworICAgYW5kIHN0YXRlIG5lY2Vzc2FyeSB0byByZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnQgbmV0d29yayB0byBub24tCisgICB2b2xhdGlsZSBtZW1vcnkuCisKKyAgIFRoaXMgb3BlcmF0aW9uIGFmZmVjdHMgbm9uLXZvbGF0aWxlIG1lbW9yeSBvbmx5LiAgVGhlIGN1cnJlbnQgbmV0d29yaworICAgaW5mb3JtYXRpb24gc3RvcmVkIGluIHZvbGF0aWxlIG1lbW9yeSBpcyB1bmFmZmVjdGVkLgorCisgICBUaGUgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kIGlzIGFsd2F5cyBhICJDTURfUFJPUF9WQUxVRV9JUyIgZm9yCisgICAiUFJPUF9MQVNUX1NUQVRVUyIsIGluZGljYXRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorCisgICBUaGlzIGNvbW1hbmQgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlICJDQVBfTkVUX1NBVkUiIGNhcGFiaWxpdHkgaXMKKyAgIHNldC4KKworOC4xLjIuICBDTUQgMTA6IChIb3N0LT5OQ1ApIENNRF9ORVRfQ0xFQVIKKworICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgMSAgICB8ICAgICAgIDEgICAgICAgfAorICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfQ0xFQVIgfAorICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICBDbGVhciBzYXZlZCBuZXR3b3JrIHNldHRpbmdzIGNvbW1hbmQuICBFcmFzZXMgYWxsIG5ldHdvcmsgY3JlZGVudGlhbHMKKyAgIGFuZCBzdGF0ZSBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuICBUaGUgZXJhc2VkIHNldHRpbmdzIGluY2x1ZGUgYW55CisgICBkYXRhIHNhdmVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG5ldHdvcmsgc3RhY2sgZmlybXdhcmUgYW5kL29yIGRhdGEKKyAgIHNhdmVkIGJ5ICJDTURfTkVUX1NBVkUiIG9wZXJhdGlvbi4KKworICAgVGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuICBUaGUgY3VycmVudCBuZXR3b3JrCisgICBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdm9sYXRpbGUgbWVtb3J5IGlzIHVuYWZmZWN0ZWQuCisKKyAgIFRoZSByZXNwb25zZSB0byB0aGlzIGNvbW1hbmQgaXMgYWx3YXlzIGEgIkNNRF9QUk9QX1ZBTFVFX0lTIiBmb3IKKyAgICJQUk9QX0xBU1RfU1RBVFVTIiwgaW5kaWNhdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCBpcyBhbHdheXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZSBvZgorICAgIkNBUF9ORVRfU0FWRSIgY2FwYWJpbGl0eS4KKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNTddCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis4LjEuMy4gIENNRCAxMTogKEhvc3QtPk5DUCkgQ01EX05FVF9SRUNBTEwKKworICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgIDEgICAgfCAgICAgICAxICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfUkVDQUxMIHwKKyAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFJlY2FsbCBzYXZlZCBuZXR3b3JrIHN0YXRlIGNvbW1hbmQuICBSZWNhbGxzIGFueSBwcmV2aW91c2x5IHNhdmVkCisgICBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZCBzdGF0ZSBwcmV2aW91c2x5IHN0b3JlZCBieSAiQ01EX05FVF9TQVZFIgorICAgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorCisgICBUaGlzIGNvbW1hbmQgd2lsbCB0eXBpY2FsbHkgZ2VuZXJhdGVkIHNldmVyYWwgdW5zb2xpY2l0ZWQgcHJvcGVydHkKKyAgIHVwZGF0ZXMgYXMgdGhlIG5ldHdvcmsgc3RhdGUgaXMgbG9hZGVkLiAgQXQgdGhlIGNvbmNsdXNpb24gb2YKKyAgIGxvYWRpbmcsIHRoZSBhdXRob3JpdGF0aXZlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYQorICAgIkNNRF9QUk9QX1ZBTFVFX0lTIiBmb3IgIlBST1BfTEFTVF9TVEFUVVMiLCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YKKyAgIHRoZSBvcGVyYXRpb24uCisKKyAgIFRoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIkNBUF9ORVRfU0FWRSIgY2FwYWJpbGl0eSBpcworICAgc2V0LgorCis5LiAgRmVhdHVyZTogSG9zdCBCdWZmZXIgT2ZmbG9hZAorCisgICBUaGUgbWVtb3J5IG9uIGFuIE5DUCBtYXkgYmUgbXVjaCBtb3JlIGxpbWl0ZWQgdGhhbiB0aGUgbWVtb3J5IG9uIHRoZQorICAgaG9zdCBwcm9jZXNzb3IuICBJbiBzdWNoIHNpdHVhdGlvbnMsIGl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgZm9yIHRoZQorICAgTkNQIHRvIG9mZmxvYWQgYnVmZmVycyB0byB0aGUgaG9zdCBwcm9jZXNzb3IgdGVtcG9yYXJpbHkgc28gdGhhdCBpdAorICAgY2FuIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucy4KKworICAgSG9zdCBidWZmZXIgb2ZmbG9hZCBpcyBhbiBvcHRpb25hbCBOQ1AgY2FwYWJpbGl0eSB0aGF0LCB3aGVuIHByZXNlbnQsCisgICBhbGxvd3MgdGhlIE5DUCB0byBzdG9yZSBkYXRhIGJ1ZmZlcnMgb24gdGhlIGhvc3QgcHJvY2Vzc29yIHRoYXQgY2FuCisgICBiZSByZWNhbGxlZCBhdCBhIGxhdGVyIHRpbWUuCisKKyAgIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IHRoZSBob3N0IGJ5IGNoZWNraW5nCisgICBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSAiQ0FQX0hCTyIgY2FwYWJpbGl0eSBpbiAiUFJPUF9DQVBTIi4KKworOS4xLiAgQ29tbWFuZHMKKworOS4xLjEuICBDTUQgMTI6IChOQ1AtPkhvc3QpIENNRF9IQk9fT0ZGTE9BRAorCisgICBvICBBcmd1bWVudC1FbmNvZGluZzogIkxzY0QiCisKKyAgICAgICogICJPZmZsb2FkSWQiOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKyAgICAgICogICJFeHBpcmF0aW9uIjogSW4gc2Vjb25kcy1mcm9tLW5vdworICAgICAgKiAgIlByaW9yaXR5IjogQ3JpdGljYWwsIEhpZ2gsIE1lZGl1bSwgTG93CisgICAgICAqICAiRGF0YSI6IERhdGEgdG8gb2ZmbG9hZAorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNThdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCis5LjEuMi4gIENNRCAxMzogKE5DUC0+SG9zdCkgQ01EX0hCT19SRUNMQUlNCisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiTGIiCisKKyAgICAgICogICJPZmZsb2FkSWQiOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKyAgICAgICogICJLZWVwQWZ0ZXJSZWNsYWltIjogSWYgbm90IHNldCB0byB0cnVlLCB0aGUgYmxvY2sgd2lsbCBiZQorICAgICAgICAgZHJvcHBlZCBieSB0aGUgaG9zdCBhZnRlciBpdCBpcyBzZW50IHRvIHRoZSBOQ1AuCisKKzkuMS4zLiAgQ01EIDE0OiAoTkNQLT5Ib3N0KSBDTURfSEJPX0RST1AKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJMIgorCisgICAgICAqICAiT2ZmbG9hZElkIjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisKKzkuMS40LiAgQ01EIDE1OiAoSG9zdC0+TkNQKSBDTURfSEJPX09GRkxPQURFRAorCisgICBvICBBcmd1bWVudC1FbmNvZGluZzogIkxpIgorCisgICAgICAqICAiT2ZmbG9hZElkIjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgICAqICAiU3RhdHVzIjogU3RhdHVzIGNvZGUgZm9yIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKworOS4xLjUuICBDTUQgMTY6IChIb3N0LT5OQ1ApIENNRF9IQk9fUkVDTEFJTUVECisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiTGlEIgorCisgICAgICAqICAiT2ZmbG9hZElkIjogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgICAqICAiU3RhdHVzIjogU3RhdHVzIGNvZGUgZm9yIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgICAgICogICJEYXRhIjogRGF0YSB0aGF0IHdhcyBwcmV2aW91c2x5IG9mZmxvYWRlZCAoaWYgYW55KQorCis5LjEuNi4gIENNRCAxNzogKEhvc3QtPk5DUCkgQ01EX0hCT19EUk9QUEVECisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiTGkiCisKKyAgICAgICogICJPZmZsb2FkSWQiOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKyAgICAgICogICJTdGF0dXMiOiBTdGF0dXMgY29kZSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorCis5LjIuICBQcm9wZXJ0aWVzCisKKzkuMi4xLiAgUFJPUCAxMDogUFJPUF9IQk9fTUVNX01BWAorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJMIgorCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICA0ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiUFJPUF9IQk9fTUVNX01BWCIgfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDU5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgRGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIGZyb20gdGhlIE5DUCB0bworICAgdGhlIGhvc3QuICBEZWZhdWx0IHZhbHVlIGlzIHplcm8sIHNvIHRoaXMgcHJvcGVydHkgbXVzdCBiZSBzZXQgYnkgdGhlCisgICBob3N0IHRvIGEgbm9uLXplcm8gdmFsdWUgYmVmb3JlIHRoZSBOQ1Agd2lsbCBiZWdpbiBvZmZsb2FkaW5nIGJsb2Nrcy4KKworICAgVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiQ0FQX0hCTyIgY2FwYWJpbGl0eSBpcworICAgcHJlc2VudCBpbiAiUFJPUF9DQVBTIi4KKworOS4yLjIuICBQUk9QIDExOiBQUk9QX0hCT19CTE9DS19NQVgKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiUyIKKworICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgICAgIDIgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8IEZpZWxkczogfCAiUFJPUF9IQk9fQkxPQ0tfTUFYIiB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgRGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCBmcm9tIHRoZSBOQ1AgdG8KKyAgIHRoZSBob3N0LiAgRGVmYXVsdCB2YWx1ZSBpcyAzMi4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byB6ZXJvIHdpbGwKKyAgIGNhdXNlIGhvc3QgYmxvY2sgb2ZmbG9hZCB0byBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KKworICAgVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiQ0FQX0hCTyIgY2FwYWJpbGl0eSBpcworICAgcHJlc2VudCBpbiAiUFJPUF9DQVBTIi4KKworMTAuICBGZWF0dXJlOiBKYW0gRGV0ZWN0aW9uCisKKyAgIEphbW1pbmcgZGV0ZWN0aW9uIGlzIGEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgTkNQIHRvIHJlcG9ydCB3aGVuIGl0CisgICBkZXRlY3RzIGhpZ2ggbGV2ZWxzIG9mIGludGVyZmVyZW5jZSB0aGF0IGFyZSBjaGFyYWN0ZXJpc3RpYyBvZgorICAgaW50ZW50aW9uYWwgc2lnbmFsIGphbW1pbmcuCisKKyAgIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IGNoZWNraW5nIGZvciB0aGUKKyAgIHByZXNlbmNlIG9mIHRoZSAiQ0FQX0pBTV9ERVRFQ1QiICh2YWx1ZSA2KSBjYXBhYmlsaXR5IGluICJQUk9QX0NBUFMiLgorCisxMC4xLiAgUHJvcGVydGllcworCisxMC4xLjEuICBQUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEUKKworICAgbyAgVHlwZTogUmVhZC1Xcml0ZQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKyAgIG8gIERlZmF1bHQgVmFsdWU6IGZhbHNlCisgICBvICBSRVFVSVJFRCBmb3IgIkNBUF9KQU1fREVURUNUIgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDYwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgIHwgT2N0ZXRzOiB8ICAgICAgICAgICAgMSAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgIlBST1BfSkFNX0RFVEVDVF9FTkFCTEUiIHwKKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIEluZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiAgU2V0IHRvIHRydWUKKyAgIHRvIGVuYWJsZSBqYW1taW5nIGRldGVjdGlvbi4KKworICAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIkNBUF9KQU1fREVURUNUIiBjYXBhYmlsaXR5IGlzCisgICBwcmVzZW50IGluICJQUk9QX0NBUFMiLgorCisxMC4xLjIuICBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVECisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiYiIKKyAgIG8gIFJFUVVJUkVEIGZvciAiQ0FQX0pBTV9ERVRFQ1QiCisKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgfCBPY3RldHM6IHwgICAgICAgICAgMSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgRmllbGRzOiB8ICJQUk9QX0pBTV9ERVRFQ1RFRCIgfAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFNldCB0byB0cnVlIGlmIHJhZGlvIGphbW1pbmcgaXMgZGV0ZWN0ZWQuICBTZXQgdG8gZmFsc2Ugb3RoZXJ3aXNlLgorCisgICBXaGVuIGphbW1pbmcgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIGNoYW5nZXMgdG8gdGhlIHZhbHVlIG9mIHRoaXMKKyAgIHByb3BlcnR5IGFyZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5IHZpYSAiQ01EX1BST1BfVkFMVUVfSVMiLgorCisgICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSAiQ0FQX0pBTV9ERVRFQ1QiIGNhcGFiaWxpdHkgaXMKKyAgIHByZXNlbnQgaW4gIlBST1BfQ0FQUyIuCisKKzEwLjEuMy4gIFBST1AgNDYxMDogUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xECisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiCisgICBvICBVbml0czogZEJtCisgICBvICBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgbyAgUkVDT01NRU5ERUQgZm9yICJDQVBfSkFNX0RFVEVDVCIKKworICAgVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSB0aHJlc2hvbGQgUlNTSSBsZXZlbCAobWVhc3VyZWQgaW4gZEJtKQorICAgYWJvdmUgd2hpY2ggdGhlIGphbW1pbmcgZGV0ZWN0aW9uIHdpbGwgY29uc2lkZXIgdGhlIGNoYW5uZWwgYmxvY2tlZC4KKworMTAuMS40LiAgUFJPUCA0NjExOiBQUk9QX0pBTV9ERVRFQ1RfV0lORE9XCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKyAgIG8gIFBhY2tlZC1FbmNvZGluZzogImMiCisgICBvICBVbml0czogU2Vjb25kcyAoMS02NCkKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDYxXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgRGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyAgIG8gIFJFQ09NTUVOREVEIGZvciAiQ0FQX0pBTV9ERVRFQ1QiCisKKyAgIFRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgd2luZG93IHBlcmlvZCBmb3Igc2lnbmFsIGphbW1pbmcKKyAgIGRldGVjdGlvbi4KKworMTAuMS41LiAgUFJPUCA0NjEyOiBQUk9QX0pBTV9ERVRFQ1RfQlVTWQorCisgICBvICBUeXBlOiBSZWFkLVdyaXRlCisgICBvICBQYWNrZWQtRW5jb2Rpbmc6ICJpIgorICAgbyAgVW5pdHM6IFNlY29uZHMgKDEtNjQpCisgICBvICBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgbyAgUkVDT01NRU5ERUQgZm9yICJDQVBfSkFNX0RFVEVDVCIKKworICAgVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluIHRoZQorICAgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlCisgICAiUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEIiB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKworICAgVGhlIGJlaGF2aW9yIG9mIHRoZSBqYW1taW5nIGRldGVjdGlvbiBmZWF0dXJlIHdoZW4KKyAgICJQUk9QX0pBTV9ERVRFQ1RfQlVTWSIgaXMgbGFyZ2VyIHRoYW4gIlBST1BfSkFNX0RFVEVDVF9XSU5ET1ciIGlzCisgICB1bmRlZmluZWQuCisKKzEwLjEuNi4gIFBST1AgNDYxMzogUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQCisKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorICAgbyAgUGFja2VkLUVuY29kaW5nOiAiTEwiCisgICBvICBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgbyAgUkVDT01NRU5ERUQgZm9yICJDQVBfSkFNX0RFVEVDVCIKKworICAgVGhpcyB2YWx1ZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHN0YXRlIG9mIGphbW1pbmcKKyAgIGRldGVjdGlvbiBtb2R1bGUgZm9yIG1vbml0b3JpbmcvZGVidWdnaW5nIHB1cnBvc2UuICBJdCByZXR1cm5zIGEKKyAgIDY0LWJpdCB2YWx1ZSB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBvbmUgc2Vjb25kIGludGVydmFsCisgICBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUgbW9zdCByZWNlbnQgaW50ZXJ2YWwgYW5kIGJpdCA2MyBmb3IgdGhlCisgICBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuICBUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZQorICAgamFtbWluZyBkZXRlY3Rpb24gbW9kdWxlIG9ic2VydmVkL2RldGVjdGVkIGhpZ2ggc2lnbmFsIGxldmVsIGR1cmluZworICAgdGhlIGNvcnJlc3BvbmRpbmcgb25lIHNlY29uZCBpbnRlcnZhbC4gIFRoZSB2YWx1ZSBpcyByZWFkLW9ubHkgYW5kIGlzCisgICBlbmNvZGVkIGFzIHR3byAiTCIgKHVpbnQzMikgdmFsdWVzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0IChmaXJzdCAiTCIKKyAgICh1aW50MzIpIHZhbHVlIGdpdmVzIHRoZSBsb3dlciBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gbW9yZSByZWNlbnQKKyAgIGhpc3RvcnkpLgorCisxMS4gIEZlYXR1cmU6IEdQSU8gQWNjZXNzCisKKyAgIFRoaXMgZmVhdHVyZSBhbGxvd3MgdGhlIGhvc3QgdG8gaGF2ZSBjb250cm9sIG92ZXIgc29tZSBvciBhbGwgb2YgdGhlCisgICBHUElPIHBpbnMgb24gdGhlIE5DUC4gIFRoZSBob3N0IGNhbiBkZXRlcm1pbmUgd2hpY2ggR1BJT3MgYXJlCisgICBhdmFpbGFibGUgYnkgZXhhbWluaW5nICJQUk9QX0dQSU9fQ09ORklHIiwgZGVzY3JpYmVkIGJlbG93LiAgVGhpcyBBUEkKKyAgIHN1cHBvcnRzIGEgbWF4aW11bSBvZiAyNTYgaW5kaXZpZHVhbCBHUElPIHBpbnMuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjJdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mCisgICAiQ0FQX0dQSU8iLgorCisxMS4xLiAgUHJvcGVydGllcworCisxMS4xLjEuICBQUk9QIDQwOTY6IFBST1BfR1BJT19DT05GSUcKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJBKHQoQ0NVKSkiCisgICBvICBUeXBlOiBSZWFkLXdyaXRlIChXcml0YWJsZSBvbmx5IHVzaW5nICJDTURfUFJPUF9WQUxVRV9JTlNFUlQiLAorICAgICAgU2VjdGlvbiA0LjUpCisKKyAgIEFuIGFycmF5IG9mIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworICAgbyAgIkMiOiBHUElPIE51bWJlcgorICAgbyAgIkMiOiBHUElPIENvbmZpZ3VyYXRpb24gRmxhZ3MKKyAgIG8gICJVIjogSHVtYW4tcmVhZGFibGUgR1BJTyBuYW1lCisKKyAgIEdQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGZvciB0aGUKKyAgIEdQSU86CisKKyAgICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgfERJUnxQVVB8UEROfFRSSUdHRVJ8ICBSRVNFUlZFRCB8CisgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE8vRHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSsKKworICAgbyAgIkRJUiI6IFBpbiBkaXJlY3Rpb24uICBDbGVhciAoMCkgZm9yIGlucHV0LCBzZXQgKDEpIGZvciBvdXRwdXQuCisgICBvICAiUFVQIjogUHVsbC11cCBlbmFibGVkIGZsYWcuCisgICBvICAiUEROIi8iTy9EIjogRmxhZyBtZWFuaW5nIGRlcGVuZHMgb24gcGluIGRpcmVjdGlvbjoKKworICAgICAgKiAgSW5wdXQ6IFB1bGwtZG93biBlbmFibGVkLgorICAgICAgKiAgT3V0cHV0OiBPdXRwdXQgaXMgYW4gb3Blbi1kcmFpbi4KKyAgIG8gICJUUklHR0VSIjogRW51bWVyYXRpb24gZGVzY3JpYmluZyBob3cgcGluIGNoYW5nZXMgZ2VuZXJhdGUKKyAgICAgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gY29tbWFuZHMgKFRCRCkgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LgorCisgICAgICAqICAwOiBGZWF0dXJlIGRpc2FibGVkIGZvciB0aGlzIHBpbgorICAgICAgKiAgMTogVHJpZ2dlciBvbiBmYWxsaW5nIGVkZ2UKKyAgICAgICogIDI6IFRyaWdnZXIgb24gcmlzaW5nIGVkZ2UKKyAgICAgICogIDM6IFRyaWdnZXIgb24gbGV2ZWwgY2hhbmdlCisgICBvICAiUkVTRVJWRUQiOiBCaXRzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAgQWx3YXlzIGNsZWFyZWQgdG8gemVybworICAgICAgYW5kIGlnbm9yZWQgd2hlbiByZWFkLgorCisgICBBcyBhbiBvcHRpb25hbCBmZWF0dXJlLCB0aGUgY29uZmlndXJhdGlvbiBvZiBpbmRpdmlkdWFsIHBpbnMgbWF5IGJlCisgICBtb2RpZmllZCB1c2luZyB0aGUgIkNNRF9QUk9QX1ZBTFVFX0lOU0VSVCIgY29tbWFuZC4gIE9ubHkgdGhlIEdQSU8KKyAgIG51bWJlciBhbmQgZmxhZ3MgZmllbGRzIE1VU1QgYmUgcHJlc2VudCwgdGhlIEdQSU8gbmFtZSAoaWYgcHJlc2VudCkKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDYzXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgd291bGQgYmUgaWdub3JlZC4gIFRoaXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gb2YgR1BJT3Mgd2hpY2ggYXJlIGFscmVhZHkgZXhwb3NlZC0tLWl0IGNhbm5vdCBiZSB1c2VkCisgICBieSB0aGUgaG9zdCB0byBhZGQgYWRkaW9uYWwgR1BJT3MuCisKKzExLjEuMi4gIFBST1AgNDA5ODogUFJPUF9HUElPX1NUQVRFCisKKyAgIG8gIFR5cGU6IFJlYWQtV3JpdGUKKworICAgQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlIHN0YXRlIG9mIHRoZSBHUElPcy4gIFRoZSBsZW5ndGgKKyAgIG9mIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBwcm9wZXJ0aWVzIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZgorICAgR1BJT3MuICBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuICBHUElPcyBhcmUKKyAgIG51bWJlcmVkIGZyb20gbW9zdCBzaWduaWZpY2FudCBiaXQgdG8gbGVhc3Qgc2lnbmlmaWNhbnQgYml0LCBzbyAweDgwCisgICBpcyBHUElPIDAsIDB4NDAgaXMgR1BJTyAxLCBldGMuCisKKyAgIEZvciBHUElPcyBjb25maWd1cmVkIGFzIGlucHV0czoKKworICAgbyAgIkNNRF9QUk9QX1ZBVUVfR0VUIjogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBkZXNjcmliZXMgdGhlCisgICAgICBsb2dpYyBsZXZlbCByZWFkIGZyb20gdGhlIHBpbi4KKyAgIG8gICJDTURfUFJPUF9WQUxVRV9TRVQiOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzIGlnbm9yZWQKKyAgICAgIGZvciB0aGVzZSBwaW5zLgorCisgICBGb3IgR1BJT3MgY29uZmlndXJlZCBhcyBvdXRwdXRzOgorCisgICBvICAiQ01EX1BST1BfVkFVRV9HRVQiOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzCisgICAgICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KKyAgIG8gICJDTURfUFJPUF9WQUxVRV9TRVQiOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGRldGVybWluZXMKKyAgICAgIHRoZSBuZXcgbG9naWMgbGV2ZWwgb2YgdGhlIG91dHB1dC4gIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMKKyAgICAgIGFuIG9wZW4tZHJhaW4sIHNldHRpbmcgdGhlIGFzc29jaWF0ZWQgYml0IHRvIDEgd2lsbCBjYXVzZSB0aGUgcGluCisgICAgICB0byBlbnRlciBhIEhpLVogc3RhdGUuCisKKyAgIEZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiAiUFJPUF9HUElPX0NPTkZJRyI6CisKKyAgIG8gICJDTURfUFJPUF9WQVVFX0dFVCI6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMKKyAgICAgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLgorICAgbyAgIkNNRF9QUk9QX1ZBTFVFX1NFVCI6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgTVVTVCBiZQorICAgICAgaWdub3JlZCBieSB0aGUgTkNQLgorCisgICBXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4KKworMTEuMS4zLiAgUFJPUCA0MDk5OiBQUk9QX0dQSU9fU1RBVEVfU0VUCisKKyAgIG8gIFR5cGU6IFdyaXRlLW9ubHkKKworICAgQWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQKKyAgIGFmZmVjdGluZyBvdGhlciBHUElPIHN0YXRlcy4gIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZQorICAgb3V0cHV0IEdQSU9zIHRoYXQgc2hvdWxkIGhhdmUgdGhlaXIgc3RhdGUgc2V0IHRvIDEuCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4gIFRoZSB2YWx1ZSBvZgorICAgYW55IGJpdHMgZm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluICJQUk9QX0dQSU9fQ09ORklHIiBNVVNUCisgICBiZSBpZ25vcmVkLgorCisxMS4xLjQuICBQUk9QIDQxMDA6IFBST1BfR1BJT19TVEFURV9DTEVBUgorCisgICBvICBUeXBlOiBXcml0ZS1vbmx5CisKKyAgIEFsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dAorICAgYWZmZWN0aW5nIG90aGVyIEdQSU8gc3RhdGVzLiAgQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlCisgICBvdXRwdXQgR1BJT3MgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBjbGVhcmVkIHRvIDAuCisKKyAgIFdoZW4gd3JpdGluZywgdW5zcGVjaWZpZWQgYml0cyBhcmUgYXNzdW1lZCB0byBiZSB6ZXJvLiAgVGhlIHZhbHVlIG9mCisgICBhbnkgYml0cyBmb3IgR1BJT3Mgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gIlBST1BfR1BJT19DT05GSUciIE1VU1QKKyAgIGJlIGlnbm9yZWQuCisKKzEyLiAgRmVhdHVyZTogVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKworICAgVGhpcyBmZWF0dXJlIGFsbG93cyB0aGUgaG9zdCB0byBoYXZlIGFjY2VzcyB0byBhbnkgc3Ryb25nIGhhcmR3YXJlCisgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgb24gdGhlIE5DUCwgZm9yIHRoaW5ncworICAgbGlrZSBrZXkgZ2VuZXJhdGlvbiBvciBzZWVkaW5nIFBSTkdzLgorCisgICBTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mCisgICAiQ0FQX1RSTkciLgorCisgICBOb3RlIHdlbGwgdGhhdCBpbXBsZW1lbnRpbmcgYSBjcnlwdG9ncmFwaGljYWxseS1zdHJvbmcgc29mdHdhcmUtYmFzZWQKKyAgIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKHRoYXQgaXMgaW1wZXJ2aW91cyB0byB0aGluZ3MgbGlrZQorICAgdGVtcGVyYXR1cmUgY2hhbmdlcywgbWFudWZhY3R1cmluZyBkaWZmZXJlbmNlcyBhY3Jvc3MgZGV2aWNlcywgb3IKKyAgIHVuZXhwZWN0ZWQgb3V0cHV0IGNvcnJlbGF0aW9ucykgaXMgbm9uLXRyaXZpYWwgd2l0aG91dCBhIHdlbGwtCisgICBkZXNpZ25lZCwgZGVkaWNhdGVkIGhhcmR3YXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgSW1wbGVtZW50b3JzCisgICB3aG8gaGF2ZSBsaXR0bGUgb3Igbm8gZXhwZXJpZW5jZSBpbiB0aGlzIGFyZWEgYXJlIGVuY291cmFnZWQgdG8gbm90CisgICBhZHZlcnRpc2UgdGhpcyBjYXBhYmlsaXR5LgorCisxMi4xLiAgUHJvcGVydGllcworCisxMi4xLjEuICBQUk9QIDQxMDE6IFBST1BfVFJOR18zMgorCisgICBvICBBcmd1bWVudC1FbmNvZGluZzogIkwiCisgICBvICBUeXBlOiBSZWFkLU9ubHkKKworICAgRmV0Y2hpbmcgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgc3Ryb25nIHJhbmRvbSAzMi1iaXQgaW50ZWdlciB0aGF0IGlzCisgICBzdWl0YWJsZSBmb3IgdXNlIGFzIGEgUFJORyBzZWVkIG9yIGZvciBjcnlwdG9ncmFwaGljIHVzZS4KKworICAgV2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMKKyAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBzYXRpc2Z5IHRoZQorICAgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA2NV0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIG8gIERhdGEgcmVwcmVzZW50aW5nIGF0IGxlYXN0IDMyIGJpdHMgb2YgZnJlc2ggZW50cm9weSAoZXh0cmFjdGVkCisgICAgICBmcm9tIHRoZSBwcmltYXJ5IGVudHJvcHkgc291cmNlKSBNVVNUIGJlIGNvbnN1bWVkIGJ5IHRoZQorICAgICAgY2FsY3VsYXRpb24gb2YgZWFjaCBxdWVyeS4KKyAgIG8gIEVhY2ggb2YgdGhlIDMyIGJpdHMgcmV0dXJuZWQgTVVTVCBiZSBmcmVlIG9mIGJpYXMgYW5kIGhhdmUgbm8KKyAgICAgIHN0YXRpc3RpY2FsIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUKKyAgICAgIGNhbGN1bGF0aW9uIG9mIGFueSBxdWVyeS4KKworICAgU3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBSRVFVSVJFRCBpZiAiQ0FQX1RSTkciIGlzIGluY2x1ZGVkIGluCisgICB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcy4KKworMTIuMS4yLiAgUFJPUCA0MTAyOiBQUk9QX1RSTkdfMTI4CisKKyAgIG8gIEFyZ3VtZW50LUVuY29kaW5nOiAiRCIKKyAgIG8gIFR5cGU6IFJlYWQtT25seQorCisgICBGZXRjaGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgMTYgYnl0ZXMgb2Ygc3Ryb25nIHJhbmRvbSBkYXRhCisgICBzdWl0YWJsZSBmb3IgZGlyZWN0IGNyeXB0b2dyYXBoaWMgdXNlIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nKEZvcgorICAgZXhhbXBsZSwgYXMgYW4gQUVTIGtleSkuCisKKyAgIFdoaWxlIHRoZSBleGFjdCBtZWNoYW5pc20gYmVoaW5kIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGlzIHZhbHVlIGlzCisgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYywgdGhlIGltcGxlbWVudGF0aW9uIG11c3Qgc2F0aXNmeSB0aGUKKyAgIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKKyAgIG8gIERhdGEgcmVwcmVzZW50aW5nIGF0IGxlYXN0IDEyOCBiaXRzIG9mIGZyZXNoIGVudHJvcHkgKGV4dHJhY3RlZAorICAgICAgZnJvbSB0aGUgcHJpbWFyeSBlbnRyb3B5IHNvdXJjZSkgTVVTVCBiZSBjb25zdW1lZCBieSB0aGUKKyAgICAgIGNhbGN1bGF0aW9uIG9mIGVhY2ggcXVlcnkuCisgICBvICBFYWNoIG9mIHRoZSAxMjggYml0cyByZXR1cm5lZCBNVVNUIGJlIGZyZWUgb2YgYmlhcyBhbmQgaGF2ZSBubworICAgICAgc3RhdGlzdGljYWwgY29ycmVsYXRpb24gdG8gYW55IHBhcnQgb2YgdGhlIHJhdyBkYXRhIHVzZWQgZm9yIHRoZQorICAgICAgY2FsY3VsYXRpb24gb2YgYW55IHF1ZXJ5LgorCisgICBTdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmICJDQVBfVFJORyIgaXMgaW5jbHVkZWQgaW4KKyAgIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLgorCisxMi4xLjMuICBQUk9QIDQxMDM6IFBST1BfVFJOR19SQVdfMzIKKworICAgbyAgQXJndW1lbnQtRW5jb2Rpbmc6ICJEIgorICAgbyAgVHlwZTogUmVhZC1Pbmx5CisKKyAgIFRoaXMgcHJvcGVydHkgaXMgcHJpbWFyaWx5IHVzZWQgdG8gZGlhZ25vc2UgYW5kIGRlYnVnIHRoZSBiZWhhdmlvciBvZgorICAgdGhlIGVudHJvcHkgc291cmNlIHVzZWQgZm9yIHN0cm9uZyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uCisKKyAgIFdoZW4gcXVlcmllZCwgcmV0dXJucyB0aGUgcmF3IG91dHB1dCBmcm9tIHRoZSBlbnRyb3B5IHNvdXJjZSB1c2VkIHRvCisgICBnZW5lcmF0ZSAiUFJPUF9UUk5HXzMyIiwgcHJpb3IgdG8gYW55IHJlZHVjdGlvbi93aGl0ZW5pbmcgYW5kL29yCisgICBtaXhpbmcgd2l0aCBwcmlvciBzdGF0ZS4KKworICAgVGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZAorICAgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljLgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA2Nl0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFN1cHBvcnQgZm9yIHRoaXMgcHJvcGVydHkgaXMgUkVDT01NRU5ERUQgaWYgIkNBUF9UUk5HIiBpcyBpbmNsdWRlZCBpbgorICAgdGhlIGRldmljZSBjYXBhYmlsaXRpZXMuCisKKzEzLiAgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKKworMTMuMS4gIFJhdyBBcHBsaWNhdGlvbiBBY2Nlc3MKKworICAgU3BpbmVsIE1BWSBiZSB1c2VkIGFzIGFuIEFQSSBib3VuZGFyeSBmb3IgYWxsb3dpbmcgcHJvY2Vzc2VzIHRvCisgICBjb25maWd1cmUgdGhlIE5DUC4gIEhvd2V2ZXIsIHN1Y2ggYSBzeXN0ZW0gTVVTVCBOT1QgZ2l2ZSB1bnByaXZpbGVnZWQKKyAgIHByb2Nlc3Nlc3MgdGhlIGFiaWxpdHkgdG8gc2VuZCBvciByZWNlaXZlIGFyYml0cmFyeSBjb21tYW5kIGZyYW1lcyB0bworICAgdGhlIE5DUC4gIE9ubHkgdGhlIHNwZWNpZmljIGNvbW1hbmRzIGFuZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlcXVpcmVkCisgICBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBwYXNzZWQsIGFuZCB0aGVuIG9ubHkgYWZ0ZXIgYmVpbmcgY2hlY2tlZCBmb3IKKyAgIHByb3BlciBmb3JtYXQuCisKKzE0LiAgUmVmZXJlbmNlcworCisxNC4xLiAgVVJJcworCisgICBbMV0gaHR0cHM6Ly93d3cudzMub3JnL1RSL2V4aS8jZW5jb2RpbmdVbnNpZ25lZEludGVnZXIKKworICAgWzJdIGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvMTYuaHRtI2NyYy5jYXQua2VybWl0CisKKyAgIFszXSBodHRwczovL2dpdGh1Yi5jb20vbWlla2cvbW1hcmsKKworICAgWzRdIGh0dHA6Ly94bWwycmZjLmlldGYub3JnLworCitBcHBlbmRpeCBBLiAgRnJhbWluZyBQcm90b2NvbAorCisgICBTaW5jZSB0aGlzIE5DUCBwcm90b2NvbCBpcyBkZWZpbmVkIGluZGVwZW5kZW50bHkgb2YgdGhlIHBoeXNpY2FsCisgICB0cmFuc3BvcnQgb3IgZnJhbWluZywgYW55IG51bWJlciBvZiB0cmFuc3BvcnRzIGFuZCBmcmFtaW5nIHByb3RvY29scworICAgY291bGQgYmUgdXNlZCBzdWNjZXNzZnVsbHkuICBIb3dldmVyLCBpbiB0aGUgaW50ZXJlc3RzIG9mCisgICBjb21wYXRpYmlsaXR5LCB0aGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgcmVjb21tZW5kYXRpb25zLgorCitBLjEuICBVQVJUIFJlY29tbWVuZGF0aW9ucworCisgICBUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBVQVJUIHNldHRpbmdzIGFyZToKKworICAgbyAgQml0IHJhdGU6IDExNTIwMAorICAgbyAgU3RhcnQgYml0czogMQorICAgbyAgRGF0YSBiaXRzOiA4CisgICBvICBTdG9wIGJpdHM6IDEKKyAgIG8gIFBhcml0eTogTm9uZQorICAgbyAgRmxvdyBDb250cm9sOiBIYXJkd2FyZQorCisgICBUaGVzZSB2YWx1ZXMgbWF5IGJlIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgaW5kaXZpZHVhbCBuZWVkcyBvZiB0aGUKKyAgIGFwcGxpY2F0aW9uIG9yIHByb2R1Y3QsIGJ1dCBzb21lIHNvcnQgb2YgZmxvdyBjb250cm9sIE1VU1QgYmUgdXNlZC4KKyAgIEhhcmR3YXJlIGZsb3cgY29udHJvbCBpcyBwcmVmZXJyZWQgb3ZlciBzb2Z0d2FyZSBmbG93IGNvbnRyb2wuICBJbgorCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA2N10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIHRoZSBhYnNlbmNlIG9mIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgc29mdHdhcmUgZmxvdyBjb250cm9sIChYT04vCisgICBYT0ZGKSBNVVNUIGJlIHVzZWQgaW5zdGVhZC4KKworICAgV2UgYWxzbyAqUkVDT01NRU5EKiBhbiBBcmR1aW5vLXN0eWxlIGhhcmR3YXJlIHJlc2V0LCB3aGVyZSB0aGUgRFRSCisgICBzaWduYWwgaXMgY291cGxlZCB0byB0aGUgIlImIzc3MztFJiM3NzM7UyYjNzczOyIgcGluIHRocm91Z2ggYQorICAgMC4wMVttaWNyb11GIGNhcGFjaXRvci4gIFRoaXMgY2F1c2VzIHRoZSBOQ1AgdG8gYXV0b21hdGljYWxseSByZXNldAorICAgd2hlbmV2ZXIgdGhlIHNlcmlhbCBwb3J0IGlzIG9wZW5lZC4gIEF0IHRoZSB2ZXJ5IGxlYXN0IHdlICpSRUNPTU1FTkQqCisgICBkZWRpY2F0aW5nIG9uZSBvZiB5b3VyIGhvc3QgcGlucyB0byBjb250cm9sbGluZyB0aGUKKyAgICJSJiM3NzM7RSYjNzczO1MmIzc3MzsiIHBpbiBvbiB0aGUgTkNQLCBzbyB0aGF0IHlvdSBjYW4gZWFzaWx5CisgICBwZXJmb3JtIGEgaGFyZHdhcmUgcmVzZXQgaWYgbmVjZXNzYXJ5LgorCitBLjEuMS4gIFVBUlQgQml0IFJhdGUgRGV0ZWN0aW9uCisKKyAgIFdoZW4gdXNpbmcgYSBVQVJULCB0aGUgaXNzdWUgb2YgYW4gYXBwcm9wcmlhdGUgYml0IHJhdGUgbXVzdCBiZQorICAgY29uc2lkZXJlZC4gIEEgYml0cmF0ZSBvZiAxMTUyMDAgYml0cyBwZXIgc2Vjb25kIGhhcyBiZWNvbWUgYSBkZWZhY3RvCisgICBzdGFuZGFyZCBiYXVkIHJhdGUgZm9yIG1hbnkgc2VyaWFsIHBlcmlwaGVyYWxzLiAgVGhpcyByYXRlLCBob3dldmVyLAorICAgaXMgc2xvd2VyIHRoYW4gdGhlIHRoZW9yZXRpY2FsIG1heGltdW0gYml0cmF0ZSBvZiB0aGUgODAyLjE1LjQgMi40R0h6CisgICBQSFkgKDI1MGtiaXQpLiAgSW4gbW9zdCBjaXJjdW1zdGFuY2VzIHRoaXMgbWlzbWF0Y2ggaXMgbm90CisgICBzaWduaWZpY2FudCBiZWNhdXNlIHRoZSBvdmVyYWxsIGJpdHJhdGUgd2lsbCBiZSBtdWNoIGxvd2VyIHRoYW4KKyAgIGVpdGhlciBvZiB0aGVzZSByYXRlcywgYnV0IHRoZXJlIGFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGEgZmFzdGVyCisgICBVQVJUIGJpdHJhdGUgaXMgZGVzaXJhYmxlLiAgVGh1cywgdGhpcyBkb2N1bWVudCBwcm9wb3NlcyBhIHNpbXBsZQorICAgYml0cmF0ZSBkZXRlY3Rpb24gc2NoZW1lIHRoYXQgY2FuIGJlIGVtcGxveWVkIGJ5IHRoZSBob3N0IHRvIGRldGVjdAorICAgd2hlbiB0aGUgYXR0YWNoZWQgTkNQIGlzIGluaXRpYWxseSBydW5uaW5nIGF0IGEgaGlnaGVyIGJpdHJhdGUuCisKKyAgIFRoZSBhbGdvcml0aG0gaXMgdG8gc2VuZCBzdWNjZXNzaXZlIE5PT1AgY29tbWFuZHMgdG8gdGhlIE5DUCBhdAorICAgaW5jcmVhc2luZyBiaXRyYXRlcy4gIFdoZW4gYSB2YWxpZCAiQ01EX0xBU1RfU1RBVFVTIiByZXNwb25zZSBoYXMKKyAgIGJlZW4gcmVjZWl2ZWQsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGUgY29ycmVjdCBiaXRyYXRlLgorCisgICBJbiBvcmRlciB0byBsaW1pdCB0aGUgdGltZSBzcGVudCBodW50aW5nIGZvciB0aGUgYXBwcm9wcmlhdGUgYml0cmF0ZSwKKyAgIHdlIFJFQ09NTUVORCB0aGF0IG9ubHkgdGhlIGZvbGxvd2luZyBiaXRyYXRlcyBiZSBjaGVja2VkOgorCisgICBvICAxMTUyMDAKKyAgIG8gIDIzMDQwMAorICAgbyAgMTAwMDAwMCAoMU1iaXQpCisKKyAgIFRoZSBiaXRyYXRlIE1BWSBhbHNvIGJlIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSBieSBhZGp1c3RpbmcKKyAgICJQUk9QX1VBUlRfQklUUkFURSIsIGlmIGltcGxlbWVudGVkLgorCitBLjEuMi4gIEhETEMtTGl0ZQorCisgICBfSERMQy1MaXRlXyBpcyB0aGUgcmVjb21tZW5kZWQgZnJhbWluZyBwcm90b2NvbCBmb3IgdHJhbnNtaXR0aW5nCisgICBTcGluZWwgZnJhbWVzIG92ZXIgYSBVQVJULiAgSERMQy1MaXRlIGNvbnNpc3RzIG9mIG9ubHkgdGhlIGZyYW1pbmcsCisgICBlc2NhcGluZywgYW5kIENSQyBwYXJ0cyBvZiB0aGUgbGFyZ2VyIEhETEMgcHJvdG9jb2wtLS1hbGwgb3RoZXIgcGFydHMKKyAgIG9mIEhETEMgYXJlIG9taXR0ZWQuICBUaGlzIHByb3RvY29sIHdhcyBjaG9zZW4gYmVjYXVzZSBpdCB3b3JrcyB3ZWxsCisgICB3aXRoIHNvZnR3YXJlIGZsb3cgY29udHJvbCBhbmQgaXMgd2lkZWx5IGltcGxlbWVudGVkLgorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUbyB0cmFuc21pdCBhIGZyYW1lIHdpdGggSERMQy1saXRlLCB0aGUgMTYtYml0IENSQyBtdXN0IGZpcnN0IGJlCisgICBhcHBlbmRlZCB0byB0aGUgZnJhbWUuICBUaGUgQ1JDIGZ1bmN0aW9uIGlzIGRlZmluZWQgdG8gYmUgQ1JDLTE2LworICAgQ0NJVFQsIG90aGVyd2lzZSBrbm93biBhcyB0aGUgS0VSTUlUIENSQyBbMl0uCisKKyAgIEluZGl2aWR1YWwgZnJhbWVzIGFyZSB0ZXJtaW5hdGVkIHdpdGggYSBmcmFtZSBkZWxpbWl0ZXIgb2N0ZXQgY2FsbGVkCisgICB0aGUgJ2ZsYWcnIG9jdGV0ICgiMHg3RSIpLgorCisgICBUaGUgZm9sbG93aW5nIG9jdGV0cyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgX3NwZWNpYWxfIGFuZCBzaG91bGQgYmUKKyAgIGVzY2FwZWQgd2hlbiBwcmVzZW50IGluIGRhdGEgZnJhbWVzOgorCisgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCBPY3RldCBWYWx1ZSB8ICAgICAgRGVzY3JpcHRpb24gICAgICAgfAorICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgIHwgICAgIDB4N0UgICAgfCBGcmFtZSBEZWxpbWl0ZXIgKEZsYWcpIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgMHg3RCAgICB8ICAgICAgRXNjYXBlIEJ5dGUgICAgICAgfAorICAgICAgICAgICAgICAgICB8ICAgICAweDExICAgIHwgICAgICAgICAgWE9OICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgIHwgICAgIDB4MTMgICAgfCAgICAgICAgICBYT0ZGICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgMHhGOCAgICB8ICAgIFZlbmRvci1TcGVjaWZpYyAgICAgfAorICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZW4gcHJlc2VudCBpbiBhIGRhdGEgZnJhbWUsIHRoZXNlIG9jdGV0IHZhbHVlcyBhcmUgZXNjYXBlZCBieQorICAgcHJlcGVuZGluZyB0aGUgZXNjYXBlIG9jdGV0ICgiMHg3RCIpIGFuZCBYT1JpbmcgdGhlIHZhbHVlIHdpdGgKKyAgICIweDIwIi4KKworICAgV2hlbiByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIENSQyBtdXN0IGJlIHZlcmlmaWVkIGFmdGVyIHRoZSBmcmFtZSBpcworICAgdW5lc2NhcGVkLiAgSWYgdGhlIENSQyB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIGNhbGN1bGF0ZWQgZm9yCisgICB0aGUgZnJhbWUgZGF0YSwgdGhlIGZyYW1lIE1VU1QgYmUgZGlzY2FyZGVkLiAgVGhlIGltcGxlbWVudGF0aW9uIE1BWQorICAgaW5kaWNhdGUgdGhlIGZhaWx1cmUgdG8gaGlnaGVyIGxldmVscyB0byBoYW5kbGUgYXMgdGhleSBzZWUgZml0LCBidXQKKyAgIE1VU1QgTk9UIGF0dGVtcHQgdG8gcHJvY2VzcyB0aGUgZGVjZWl2ZWQgZnJhbWUuCisKKyAgIENvbnNlY3V0aXZlIGZsYWcgb2N0ZXRzIGFyZSBlbnRpcmVseSBsZWdhbCBhbmQgTVVTVCBOT1QgYmUgdHJlYXRlZCBhcworICAgYSBmcmFtaW5nIGVycm9yLiAgQ29uc2VjdXRpdmUgZmxhZyBvY3RldHMgTUFZIGJlIHVzZWQgYXMgYSB3YXkgdG8KKyAgIHdha2UgdXAgYSBzbGVlcGluZyBOQ1AuCisKKyAgIFdoZW4gZmlyc3QgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgTkNQLCBpdCBpcyBjdXN0b21hcnkgdG8KKyAgIHNlbmQgb25lIG9yIG1vcmUgZmxhZyBvY3RldHMgdG8gZW5zdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVjZWl2ZWQKKyAgIGRhdGEgaXMgZGlzY2FyZGVkLgorCitBLjIuICBTUEkgUmVjb21tZW5kYXRpb25zCisKKyAgIFdlIFJFQ09NTUVORCB0aGUgdXNlIG9mIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgU1BJIHNpZ25hbHM6CisKKyAgIG8gICJDJiM3NzM7UyYjNzczOyI6IChIb3N0LXRvLU5DUCkgQ2hpcCBTZWxlY3QKKyAgIG8gICJDTEsiOiAoSG9zdC10by1OQ1ApIENsb2NrCisgICBvICAiTU9TSSI6IE1hc3Rlci1PdXRwdXQvU2xhdmUtSW5wdXQKKyAgIG8gICJNSVNPIjogTWFzdGVyLUlucHV0L1NsYXZlLU91dHB1dAorICAgbyAgIkkmIzc3MztOJiM3NzM7VCYjNzczOyI6IChOQ1AtdG8tSG9zdCkgSG9zdCBJbnRlcnJ1cHQKKyAgIG8gICJSJiM3NzM7RSYjNzczO1MmIzc3MzsiOiAoSG9zdC10by1OQ1ApIE5DUCBIYXJkd2FyZSBSZXNldAorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNjldCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBUaGUgIkkmIzc3MztOJiM3NzM7VCYjNzczOyIgc2lnbmFsIGlzIHVzZWQgYnkgdGhlIE5DUCB0byBpbmRpY2F0ZSB0bworICAgdGhlIGhvc3QgdGhhdCB0aGUgTkNQIGhhcyBmcmFtZXMgcGVuZGluZyB0byBzZW5kIHRvIGl0LiAgV2hlbgorICAgYXNzZXJ0ZWQsIHRoZSBob3N0IFNIT1VMRCBpbml0aWF0ZSBhIFNQSSB0cmFuc2FjdGlvbiBpbiBhIHRpbWVseQorICAgbWFubmVyLgorCisgICBXZSBSRUNPTU1FTkQgdGhlIGZvbGxvd2luZyBTUEkgcHJvcGVydGllczoKKworICAgbyAgIkMmIzc3MztTJiM3NzM7IiBpcyBhY3RpdmUgbG93LgorICAgbyAgIkNMSyIgaXMgYWN0aXZlIGhpZ2guCisgICBvICAiQ0xLIiBzcGVlZCBpcyBsYXJnZXIgdGhhbiA1MDAga0h6LgorICAgbyAgRGF0YSBpcyB2YWxpZCBvbiBsZWFkaW5nIGVkZ2Ugb2YgIkNMSyIuCisgICBvICBEYXRhIGlzIHNlbnQgaW4gbXVsdGlwbGVzIG9mIDgtYml0cyAob2N0ZXRzKS4KKyAgIG8gIE9jdGV0cyBhcmUgc2VudCBtb3N0LXNpZ25pZmljYW50IGJpdCBmaXJzdC4KKworICAgVGhpcyByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIG1heSBiZSBhZGp1c3RlZCBkZXBlbmRpbmcgb24gdGhlCisgICBpbmRpdmlkdWFsIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBwcm9kdWN0LgorCitBLjIuMS4gIFNQSSBGcmFtaW5nIFByb3RvY29sCisKKyAgIEVhY2ggU1BJIGZyYW1lIHN0YXJ0cyB3aXRoIGEgNS1ieXRlIGZyYW1lIGhlYWRlcjoKKworICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICB8IE9jdGV0czogfCAgMSAgfCAgICAyICAgICB8ICAgIDIgICAgIHwKKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgfCBGaWVsZHM6IHwgSERSIHwgUkVDVl9MRU4gfCBEQVRBX0xFTiB8CisgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICAgbyAgIkhEUiI6IFRoZSBmaXJzdCBieXRlIGlzIHRoZSBoZWFkZXIgYnl0ZSAoZGVmaW5lZCBiZWxvdykKKyAgIG8gICJSRUNWX0xFTiI6IFRoZSBzZWNvbmQgYW5kIHRoaXJkIGJ5dGVzIGluZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lCisgICAgICBzaXplIHRoYXQgdGhhdCBkZXZpY2UgaXMgcmVhZHkgdG8gcmVjZWl2ZS4gIElmIHplcm8sIHRoZW4gdGhlCisgICAgICBvdGhlciBkZXZpY2UgbXVzdCBub3Qgc2VuZCBhbnkgZGF0YS4gIChMaXR0bGUgZW5kaWFuKQorICAgbyAgIkRBVEFfTEVOIjogVGhlIGZvdXJ0aCBhbmQgZmlmdGggYnl0ZXMgaW5kaWNhdGUgdGhlIHNpemUgb2YgdGhlCisgICAgICBwZW5kaW5nIGRhdGEgZnJhbWUgdG8gYmUgc2VudCB0byB0aGUgb3RoZXIgZGV2aWNlLiAgSWYgdGhpcyB2YWx1ZQorICAgICAgaXMgZXF1YWwtdG8gb3IgbGVzcy10aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgb3RoZXIgZGV2aWNlCisgICAgICBpcyB3aWxsaW5nIHRvIHJlY2VpdmUsIHRoZW4gdGhlIGRhdGEgb2YgdGhlIGZyYW1lIGlzIGltbWVkaWF0ZWx5CisgICAgICBhZnRlciB0aGUgaGVhZGVyLiAgKExpdHRsZSBFbmRpYW4pCisKKyAgIFRoZSAiSERSIiBieXRlIGlzIGRlZmluZWQgYXM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgICAgICAgICAgICAgICAgICstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICAgfFJTVHxDUkN8Q0NGfCAgUkVTRVJWRUQgfFBBVFRFUk58CisgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKworICAgbyAgIlJTVCI6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoYXQgZGV2aWNlIGhhcyBiZWVuIHJlc2V0IHNpbmNlIHRoZQorICAgICAgbGFzdCB0aW1lICJDJiM3NzM7UyYjNzczOyIgd2FzIGFzc2VydGVkLgorCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDcwXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgIkNSQyI6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoYXQgZGV2aWNlIHN1cHBvcnRzIHdyaXRpbmcgYSAxNi1iaXQKKyAgICAgIENSQyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhLiAgVGhlIENSQyBsZW5ndGggaXMgTk9UIGluY2x1ZGVkIGluCisgICAgICBEQVRBX0xFTi4KKyAgIG8gICJDQ0YiOiAiQ1JDIENoZWNrIEZhaWx1cmUiLiAgU2V0IGlmIHRoZSBDUkMgY2hlY2sgb24gdGhlIGxhc3QKKyAgICAgIHJlY2VpdmVkIGZyYW1lIGZhaWxlZCwgY2xlYXJlZCB0byB6ZXJvIG90aGVyd2lzZS4gIFRoaXMgYml0IGlzCisgICAgICBvbmx5IHVzZWQgaWYgYm90aCBzaWRlcyBzdXBwb3J0IENSQy4KKyAgIG8gICJSRVNFUlZFRCI6IFRoZXNlIGJpdHMgYXJlIGFsbCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuICBUaGV5CisgICAgICBNVVNUIGJlIGNsZWFyZWQgdG8gemVybyBhbmQgTVVTVCBiZSBpZ25vcmVkIGlmIHNldC4KKyAgIG8gICJQQVRURVJOIjogVGhlc2UgYml0cyBhcmUgc2V0IHRvIGEgZml4ZWQgdmFsdWUgdG8gaGVscCBkaXN0aW5ndWlzaAorICAgICAgdmFsaWQgU1BJIGZyYW1lcyBmcm9tIGdhcmJhZ2UgKGJ5IGV4cGxpY2l0bHkgbWFraW5nICIweEZGIiBhbmQKKyAgICAgICIweDAwIiBpbnZhbGlkIHZhbHVlcykuICBCaXQgNiBNVVNUIGJlIHNldCB0byBiZSBvbmUgYW5kIGJpdCA3CisgICAgICBNVVNUIGJlIGNsZWFyZWQgKDApLiAgQSBmcmFtZSByZWNlaXZlZCB0aGF0IGhhcyBhbnkgb3RoZXIgdmFsdWVzCisgICAgICBmb3IgdGhlc2UgYml0cyBNVVNUIGJlIGRyb3BwZWQuCisKKyAgIFByaW9yIHRvIGEgc2VuZGluZyBvciByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIG1hc3RlciBNQVkgc2VuZCBhCisgICA1LW9jdGV0IGZyYW1lIHdpdGggemVyb3MgZm9yIGJvdGggdGhlIG1heCByZWNlaXZlIGZyYW1lIHNpemUgYW5kIHRoZQorICAgdGhlIGNvbnRhaW5lZCBmcmFtZSBsZW5ndGguICBUaGlzIHdpbGwgaW5kdWNlIHRoZSBzbGF2ZSBkZXZpY2UgdG8KKyAgIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGl0IHdhbnRzIHRvIHNlbmQgKGlmIGFueSkgYW5kCisgICBpbmRpY2F0ZSB0aGUgbGFyZ2VzdCBmcmFtZSBpdCBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZyBhdCB0aGUgbW9tZW50LgorICAgVGhpcyBhbGxvd3MgdGhlIG1hc3RlciB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG5leHQgdHJhbnNhY3Rpb24uCisgICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgbWFzdGVyIGhhcyBhIGZyYW1lIHRvIHNlbmQgaXQgY2FuIGp1c3QgZ28gYWhlYWQKKyAgIGFuZCBzZW5kIGEgZnJhbWUgb2YgdGhhdCBsZW5ndGggYW5kIGRldGVybWluZSBpZiB0aGUgZnJhbWUgd2FzCisgICBhY2NlcHRlZCBieSBjaGVja2luZyB0aGF0IHRoZSAiUkVDVl9MRU4iIGZyb20gdGhlIHNsYXZlIGZyYW1lIGlzCisgICBsYXJnZXIgdGhhbiB0aGUgZnJhbWUgdGhlIG1hc3RlciBqdXN0IHRyaWVkIHRvIHNlbmQuICBJZiB0aGUKKyAgICJSRUNWX0xFTiIgaXMgc21hbGxlciB0aGVuIHRoZSBmcmFtZSB3YXNuJ3QgYWNjZXB0ZWQgYW5kIHdpbGwgbmVlZCB0bworICAgYmUgdHJhbnNtaXR0ZWQgYWdhaW4uCisKKyAgIFRoaXMgcHJvdG9jb2wgY2FuIGJlIHVzZWQgZWl0aGVyIHVuaWRpcmVjdGlvbmFsbHkgb3IgYmlkaXJlY3Rpb25hbGx5LAorICAgZGV0ZXJtaW5lZCBieSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLgorCisgICBJZiB0aGUgdGhlIG1hc3RlciBub3RpY2VzICJQQVRURVJOIiBpcyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlIG1hc3RlcgorICAgc2hvdWxkIGNvbnNpZGVyIHRoZSB0cmFuc2FjdGlvbiB0byBoYXZlIGZhaWxlZCBhbmQgdHJ5IGFnYWluIGFmdGVyIDEwCisgICBtaWxsaXNlY29uZHMsIHJldHJ5aW5nIHVwIHRvIDIwMCB0aW1lcy4gIEFmdGVyIHVuc3VjY2Vzc2Z1bGx5IHRyeWluZworICAgMjAwIHRpbWVzIGluIGEgcm93LCB0aGUgbWFzdGVyIE1BWSB0YWtlIGFwcHJvcHJpYXRlIHJlbWVkaWFsIGFjdGlvbgorICAgKGxpa2UgYSBOQ1AgaGFyZHdhcmUgcmVzZXQsIG9yIGluZGljYXRpbmcgYSBjb21tdW5pY2F0aW9uIGZhaWx1cmUgdG8KKyAgIGEgdXNlciBpbnRlcmZhY2UpLgorCisgICBBdCB0aGUgZW5kIG9mIHRoZSBkYXRhIG9mIGEgZnJhbWUgaXMgYW4gb3B0aW9uYWwgMTYtYml0IENSQywgc3VwcG9ydAorICAgZm9yIHdoaWNoIGlzIGluZGljYXRlZCBieSB0aGUgIkNSQyIgYml0IG9mIHRoZSAiSERSIiBieXRlIGJlaW5nIHNldC4KKyAgIElmIHRoZXNlIGJpdHMgYXJlIHNldCBmb3IgYm90aCB0aGUgbWFzdGVyIGFuZCBzbGF2ZSBmcmFtZXMsIHRoZW4gQ1JDCisgICBjaGVja2luZyBpcyBlbmFibGVkIG9uIGJvdGggc2lkZXMsIGVmZmVjdGl2ZWx5IHJlcXVpcmluZyB0aGF0IGZyYW1lCisgICBzaXplcyBiZSB0d28gYnl0ZXMgbG9uZ2VyIHRoYW4gd291bGQgYmUgb3RoZXJ3aXNlIHJlcXVpcmVkLiAgVGhlIENSQworICAgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgc2FtZSBtZWNoYW5pc20gdXNlZCBmb3IgdGhlIENSQyBjYWxjdWxhdGlvbgorICAgaW4gSERMQy1MaXRlIChTZWUgQXBwZW5kaXggQS4xLjIpLiAgV2hlbiBib3RoIG9mIHRoZSAiQ1JDIiBiaXRzIGFyZQorICAgc2V0LCBib3RoIHNpZGVzIG11c3QgdmVyaWZ5IHRoYXQgdGhlICJDUkMiIGlzIHZhbGlkIGJlZm9yZSBhY2NlcHRpbmcKKyAgIHRoZSBmcmFtZS4gIElmIG5vdCBlbm91Z2ggYnl0ZXMgd2VyZSBjbG9ja2VkIG91dCBmb3IgdGhlIENSQyB0byBiZQorICAgcmVhZCwgdGhlbiB0aGUgZnJhbWUgbXVzdCBiZSBpZ25vcmVkLiAgSWYgZW5vdWdoIGJ5dGVzIHdlcmUgY2xvY2tlZAorICAgb3V0IHRvIHBlcmZvcm0gYSBDUkMgY2hlY2ssIGJ1dCB0aGUgQ1JDIGNoZWNrIGZhaWxzLCB0aGVuIHRoZSBmcmFtZQorCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBtdXN0IGJlIHJlamVjdGVkIGFuZCB0aGUgIkNSQ19GQUlMIiBiaXQgb24gdGhlIG5leHQgZnJhbWUgKGFuZCBPTkxZCisgICB0aGUgbmV4dCBmcmFtZSkgTVVTVCBiZSBzZXQuCisKK0EuMy4gIEleMkMgUmVjb21tZW5kYXRpb25zCisKKyAgIFRCRAorCisgICBbQ1JFRjVdCisKK0EuNC4gIE5hdGl2ZSBVU0IgUmVjb21tZW5kYXRpb25zCisKKyAgIFRCRAorCisgICBbQ1JFRjZdCisKK0FwcGVuZGl4IEIuICBUZXN0IFZlY3RvcnMKKworQi4xLiAgVGVzdCBWZWN0b3I6IFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyCisKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCBEZWNpbWFsIFZhbHVlIHwgUGFja2V0IE9jdGV0IEVuY29kaW5nIHwKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAwIHwgIjAwIiAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAxIHwgIjAxIiAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgMTI3IHwgIjdGIiAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgMTI4IHwgIjgwIDAxIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgMTI5IHwgIjgxIDAxIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgIDEsMzM3IHwgIkI5IDBBIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgMTYsMzgzIHwgIkZGIDdGIiAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgMTYsMzg0IHwgIjgwIDgwIDAxIiAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgMTYsMzg1IHwgIjgxIDgwIDAxIiAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgfCAgICAgMiwwOTcsMTUxIHwgIkZGIEZGIDdGIiAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgW0NSRUY3XQorCitCLjIuICBUZXN0IFZlY3RvcjogUmVzZXQgQ29tbWFuZAorCisgICBvICBOTEk6IDAKKyAgIG8gIFRJRDogMAorICAgbyAgQ01EOiAxICgiQ01EX1JFU0VUIikKKworICAgRnJhbWU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAgMDEKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDcyXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworQi4zLiAgVGVzdCBWZWN0b3I6IFJlc2V0IE5vdGlmaWNhdGlvbgorCisgICBvICBOTEk6IDAKKyAgIG8gIFRJRDogMAorICAgbyAgQ01EOiA2ICgiQ01EX1ZBTFVFX0lTIikKKyAgIG8gIFBST1A6IDAgKCJQUk9QX0xBU1RfU1RBVFVTIikKKyAgIG8gIFZBTFVFOiAxMTQgKCJTVEFUVVNfUkVTRVRfU09GVFdBUkUiKQorCisgICBGcmFtZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MCAwNiAwMCA3MgorCitCLjQuICBUZXN0IFZlY3RvcjogU2NhbiBCZWFjb24KKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDAKKyAgIG8gIENNRDogNyAoIkNNRF9WQUxVRV9JTlNFUlRFRCIpCisgICBvICBQUk9QOiA1MSAoIlBST1BfTUFDX1NDQU5fQkVBQ09OIikKKyAgIG8gIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgIkNjdChFU1NjKXQoaUNVZCkiCisKKyAgICAgICogIENIQU46IDE1CisgICAgICAqICBSU1NJOiAtNjBkQm0KKyAgICAgICogIE1BQ19EQVRBOiAoMEQgMDAgQjYgNDAgRDQgOEMgRTkgMzggRjkgNTIgRkYgRkYgRDIgMDQgMDApCisKKyAgICAgICAgICsgIExvbmcgYWRkcmVzczogQjY6NDA6RDQ6OEM6RTk6Mzg6Rjk6NTIKKyAgICAgICAgICsgIFNob3J0IGFkZHJlc3M6IDB4RkZGRgorICAgICAgICAgKyAgUEFOLUlEOiAweDA0RDIKKyAgICAgICAgICsgIExRSTogMAorICAgICAgKiAgTkVUX0RBVEE6ICgxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRQorICAgICAgICAgRUYgMDAgQ0EgRkUpCisKKyAgICAgICAgICsgIFByb3RvY29sIE51bWJlcjogMworICAgICAgICAgKyAgRmxhZ3M6IDB4MjAKKyAgICAgICAgICsgIE5ldHdvcmsgTmFtZTogInNwaW5lbCIKKyAgICAgICAgICsgIFhQQU5JRDogIkRFIEFEIDAwIEJFIEVGIDAwIENBIEZFIgorCisgICBGcmFtZToKKworICAgICAgICA4MCAwNyAzMyAwRiBDNCAwRCAwMCBCNiA0MCBENCA4QyBFOSAzOCBGOSA1MiBGRiBGRiBEMiAwNCAwMAorICAgICAgICAxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQQorICAgICAgICBGRQorCitCLjUuICBUZXN0IFZlY3RvcjogSW5ib3VuZCBJUHY2IFBhY2tldAorCisgICBDTURfVkFMVUVfSVMoUFJPUF9TVFJFQU1fTkVUKQorCisgICBbQ1JFRjhdCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDczXQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworQi42LiAgVGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0CisKKyAgIENNRF9WQUxVRV9TRVQoUFJPUF9TVFJFQU1fTkVUKQorCisgICBbQ1JFRjldCisKK0IuNy4gIFRlc3QgVmVjdG9yOiBGZXRjaCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MKKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDQKKyAgIG8gIENNRDogMiAoIkNNRF9WQUxVRV9HRVQiKQorICAgbyAgUFJPUDogOTAgKCJQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMiKQorCisgICBGcmFtZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQgMDIgNUEKKworQi44LiAgVGVzdCBWZWN0b3I6IFJldHVybmVkIGxpc3Qgb2Ygb24tbWVzaCBuZXR3b3JrcworCisgICBvICBOTEk6IDAKKyAgIG8gIFRJRDogNAorICAgbyAgQ01EOiA2ICgiQ01EX1ZBTFVFX0lTIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBBcnJheSBvZiBzdHJ1Y3R1cmVzLCBlbmNvZGVkIGFzICJBKHQoNkNiQykpIgorCisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCBJUHY2IFByZWZpeCAgfCBQcmVmaXggTGVuZ3RoIHwgU3RhYmxlIEZsYWcgfCBPdGhlciBGbGFncyB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCAyMDAxOkRCODoxOjogfCAgICAgICA2NCAgICAgIHwgICAgIFRydWUgICAgfCAgICAgID8/ICAgICB8CisgICAgICAgfCAyMDAxOkRCODoyOjogfCAgICAgICA2NCAgICAgIHwgICAgRmFsc2UgICAgfCAgICAgID8/ICAgICB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKyAgIEZyYW1lOgorCisgICAgICAgIDg0IDA2IDVBIDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAxIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgICAgIDAwIDQwIDAxID8/IDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgICAgIDAwIDAwIDQwIDAwID8/CisKK0IuOS4gIFRlc3QgVmVjdG9yOiBBZGRpbmcgYW4gb24tbWVzaCBuZXR3b3JrCisKKyAgIG8gIE5MSTogMAorICAgbyAgVElEOiA1CisgICBvICBDTUQ6IDQgKCJDTURfVkFMVUVfSU5TRVJUIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgIjZDYkNiIgorCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzRdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCBJUHY2IFByZWZpeCAgfCBQcmVmaXggTGVuZ3RoIHwgU3RhYmxlIEZsYWcgfCBPdGhlciBGbGFncyB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgICAgfCAyMDAxOkRCODozOjogfCAgICAgICA2NCAgICAgIHwgICAgIFRydWUgICAgfCAgICAgID8/ICAgICB8CisgICAgICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rCisKKyAgIEZyYW1lOgorCisgICAgICAgIDg1IDAzIDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCisgICAgICAgIDAxID8/IDAxCisKKyAgIFtDUkVGMTBdCisKK0IuMTAuICBUZXN0IFZlY3RvcjogSW5zZXJ0aW9uIG5vdGlmaWNhdGlvbiBvZiBhbiBvbi1tZXNoIG5ldHdvcmsKKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDUKKyAgIG8gIENNRDogNyAoIkNNRF9WQUxVRV9JTlNFUlRFRCIpCisgICBvICBQUk9QOiA5MCAoIlBST1BfVEhSRUFEX09OX01FU0hfTkVUUyIpCisgICBvICBWQUxVRTogU3RydWN0dXJlLCBlbmNvZGVkIGFzICI2Q2JDYiIKKworICAgICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgIHwgSVB2NiBQcmVmaXggIHwgUHJlZml4IExlbmd0aCB8IFN0YWJsZSBGbGFnIHwgT3RoZXIgRmxhZ3MgfAorICAgICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAgIHwgMjAwMTpEQjg6Mzo6IHwgICAgICAgNjQgICAgICB8ICAgICBUcnVlICAgIHwgICAgICA/PyAgICAgfAorICAgICAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKworCisgICBGcmFtZToKKworICAgICAgICA4NSAwNyA1QSAyMCAwMSAwRCBCOCAwMCAwMyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA0MAorICAgICAgICAwMSA/PyAwMQorCisgICBbQ1JFRjExXQorCitCLjExLiAgVGVzdCBWZWN0b3I6IFJlbW92aW5nIGEgbG9jYWwgb24tbWVzaCBuZXR3b3JrCisKKyAgIG8gIE5MSTogMAorICAgbyAgVElEOiA2CisgICBvICBDTUQ6IDUgKCJDTURfVkFMVUVfUkVNT1ZFIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBJUHY2IFByZWZpeCAiMjAwMTpEQjg6Mzo6IgorCisgICBGcmFtZToKKworICAgICAgICAgODYgMDUgNUEgMjAgMDEgMEQgQjggMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworCisKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDc1XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworQi4xMi4gIFRlc3QgVmVjdG9yOiBSZW1vdmFsIG5vdGlmaWNhdGlvbiBvZiBhbiBvbi1tZXNoIG5ldHdvcmsKKworICAgbyAgTkxJOiAwCisgICBvICBUSUQ6IDYKKyAgIG8gIENNRDogOCAoIkNNRF9WQUxVRV9SRU1PVkVEIikKKyAgIG8gIFBST1A6IDkwICgiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIikKKyAgIG8gIFZBTFVFOiBJUHY2IFByZWZpeCAiMjAwMTpEQjg6Mzo6IgorCisgICBGcmFtZToKKworICAgICAgICAgODYgMDggNUEgMjAgMDEgMEQgQjggMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworQXBwZW5kaXggQy4gIEV4YW1wbGUgU2Vzc2lvbnMKKworQy4xLiAgTkNQIEluaXRpYWxpemF0aW9uCisKKyAgIFtDUkVGMTJdCisKKyAgIENoZWNrIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBzdXBwb3J0ZWQ6CisKKyAgIG8gIENNRF9WQUxVRV9HRVQ6UFJPUF9QUk9UT0NPTF9WRVJTSU9OCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9QUk9UT0NPTF9WRVJTSU9OCisKKyAgIENoZWNrIHRoZSBOQ1AgdmVyc2lvbiB0byBzZWUgaWYgYSBmaXJtd2FyZSB1cGRhdGUgbWF5IGJlIG5lY2Vzc2FyeToKKworICAgbyAgQ01EX1ZBTFVFX0dFVDpQUk9QX05DUF9WRVJTSU9OCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9OQ1BfVkVSU0lPTgorCisgICBDaGVjayBpbnRlcmZhY2UgdHlwZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyB3aGF0IHdlIGV4cGVjdDoKKworICAgbyAgQ01EX1ZBTFVFX0dFVDpQUk9QX0lOVEVSRkFDRV9UWVBFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9JTlRFUkZBQ0VfVFlQRQorCisgICBJZiB0aGUgaG9zdCBzdXBwb3J0cyB1c2luZyB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMsIHRoZSB2ZW5kb3IKKyAgIHNob3VsZCBiZSB2ZXJpZmllZCBiZWZvcmUgdXNpbmcgdGhlbToKKworICAgbyAgQ01EX1ZBTFVFX0dFVDpQUk9QX1ZFTkRPUl9JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfVkVORE9SX0lECisKKyAgIEZldGNoIHRoZSBjYXBhYmlsaXR5IGxpc3Qgc28gdGhhdCB3ZSBrbm93IHdoYXQgZmVhdHVyZXMgdGhpcyBOQ1AKKyAgIHN1cHBvcnRzOgorCisgICBvICBDTURfVkFMVUVfR0VUOlBST1BfQ0FQUworICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfQ0FQUworCisgICBJZiB0aGUgTkNQIHN1cHBvcnRzIENBUF9ORVRfU0FWRSwgdGhlbiB3ZSBnbyBhaGVhZCBhbmQgcmVjYWxsIHRoZQorICAgbmV0d29yazoKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzZdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICBvICBDTURfTkVUX1JFQ0FMTAorCitDLjIuICBBdHRhY2hpbmcgdG8gYSBuZXR3b3JrCisKKyAgIFtDUkVGMTNdCisKKyAgIFdlIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgTkNQIGlzIG5vdCBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoCisgICBhIG5ldHdvcmsuCisKKyAgIFNldCB0aGUgbmV0d29yayBwcm9wZXJ0aWVzLCBpZiB0aGV5IHdlcmUgbm90IGFscmVhZHkgc2V0OgorCisgICBvICBDTURfVkFMVUVfU0VUOlBST1BfUEhZX0NIQU4KKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9DSEFOCisgICBvICBDTURfVkFMVUVfU0VUOlBST1BfTkVUX1hQQU5JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1hQQU5JRAorICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX01BQ18xNV80X1BBTklECisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9NQUNfMTVfNF9QQU5JRAorICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9ORVRXT1JLX05BTUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9ORVRXT1JLX05BTUUKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfTUFTVEVSX0tFWQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX01BU1RFUl9LRVkKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUgorICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FCisKKyAgIEJyaW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfSUZfVVA6VFJVRQorCisgICBCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCisgICBTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1BBUlRJVElPTl9JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUworCitDLjMuICBTdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrCisKKyAgIFtDUkVGMTRdCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA3N10KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgc2Vzc2lvbiB1cCB0byB0aGUKKyAgIHBvaW50IHdoZXJlIHdlIHNldCBQUk9QX05FVF9JRl9VUCB0byB0cnVlLiAgRnJvbSB0aGVyZSwgdGhlIGJlaGF2aW9yCisgICBjaGFuZ2VzLgorCisgICBvICBDTURfVkFMVUVfU0VUOlBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORzpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKworICAgQnJpbmcgdGhlIHJvdXRpbmcgc3RhY2sgdXA6CisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUUKKworICAgU29tZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gdGhlIE5DUDoKKworICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1JPTEUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMKKworICAgTm93IGxldCdzIHNhdmUgdGhlIG5ldHdvcmsgc2V0dGluZ3MgdG8gTlZSQU06CisKKyAgIG8gIENNRF9ORVRfU0FWRQorCitDLjQuICBVbnN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsKKworICAgVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHVwIHRvIHRoZQorICAgcG9pbnQgd2hlcmUgd2Ugc2V0IFBST1BfTkVUX0lGX1VQIHRvIHRydWUuICBGcm9tIHRoZXJlLCB0aGUgYmVoYXZpb3IKKyAgIGNoYW5nZXMuCisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRQorCisgICBCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCisgICBTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9MQVNUX1NUQVRVUzpTVEFUVVNfSk9JTl9OT19QRUVSUworICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOkZBTFNFCisKK0MuNS4gIERldGFjaGluZyBmcm9tIGEgbmV0d29yaworCisgICBUQkQKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgNzhdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCitDLjYuICBBdHRhY2hpbmcgdG8gYSBzYXZlZCBuZXR3b3JrCisKKyAgIFtDUkVGMTVdCisKKyAgIFJlY2FsbCB0aGUgc2F2ZWQgbmV0d29yayBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc286CisKKyAgIG8gIENNRF9ORVRfUkVDQUxMCisKKyAgIEJyaW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfSUZfVVA6VFJVRQorCisgICBCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCisgICBTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRQorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1BBUlRJVElPTl9JRAorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUworCitDLjcuICBOQ1AgU29mdHdhcmUgUmVzZXQKKworICAgW0NSRUYxNl0KKworICAgbyAgQ01EX1JFU0VUCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9MQVNUX1NUQVRVUzpTVEFUVVNfUkVTRVRfU09GVFdBUkUKKworICAgVGhlbiBqdW1wIHRvIEFwcGVuZGl4IEMuMS4KKworQy44LiAgQWRkaW5nIGFuIG9uLW1lc2ggcHJlZml4CisKKyAgIFRCRAorCitDLjkuICBFbnRlcmluZyBsb3ctcG93ZXIgbW9kZXMKKworICAgVEJECisKK0MuMTAuICBTbmlmZmluZyByYXcgcGFja2V0cworCisgICBbQ1JFRjE3XQorCisgICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgTkNQIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCisgICBPcHRpb25hbGx5IHNldCB0aGUgY2hhbm5lbDoKKworCisKK1F1YXR0bGViYXVtICYgV29vZHlhdHQgIEV4cGlyZXMgRGVjZW1iZXIgMjQsIDIwMTcgICAgICAgICAgICAgIFtQYWdlIDc5XQorDAorSW50ZXJuZXQtRHJhZnQgICAgICAgICAgU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSAgICAgICAgICAgICAgSnVuZSAyMDE3CisKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX1BIWV9DSEFOOngKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9DSEFOCisKKyAgIFNldCB0aGUgZmlsdGVyIG1vZGU6CisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERTpNQUNfUFJPTUlTQ1VPVVNfTU9ERV9NT05JVAorICAgICAgT1IKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFOk1BQ19QUk9NSVNDVU9VU19NT0RFX01PTklUTworICAgICAgUgorCisgICBFbmFibGUgdGhlIHJhdyBzdHJlYW06CisKKyAgIG8gIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEOlRSVUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ6VFJVRQorCisgICBFbmFibGUgdGhlIFBIWSBkaXJlY3RseToKKworICAgbyAgQ01EX1ZBTFVFX1NFVDpQUk9QX1BIWV9FTkFCTEVEOlRSVUUKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9FTkFCTEVEOlRSVUUKKworICAgTm93IHdlIHdpbGwgZ2V0IHJhdyA4MDIuMTUuNCBwYWNrZXRzIGFzeW5jaHJvbm91c2x5IG9uCisgICBQUk9QX1NUUkVBTV9SQVc6CisKKyAgIG8gIENNRF9WQUxVRV9JUzpQUk9QX1NUUkVBTV9SQVc6Li4uCisgICBvICBDTURfVkFMVUVfSVM6UFJPUF9TVFJFQU1fUkFXOi4uLgorICAgbyAgQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKworICAgVGhpcyBtb2RlIG1heSBiZSBlbnRlcmVkIGV2ZW4gd2hlbiBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLiAgSW4KKyAgIHRoYXQgY2FzZSwgeW91IHNob3VsZCBzZXQgIlBST1BfTUFDX1BST01JU0NVT1VTX01PREUiIHRvCisgICAiTUFDX1BST01JU0NVT1VTX01PREVfUFJPTUlTQ1VPVVMiIG9yICJNQUNfUFJPTUlTQ1VPVVNfTU9ERV9OT1JNQUwiLAorICAgc28gdGhhdCB5b3UgY2FuIGF2b2lkIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gb3RoZXIgbmV0d29ya3Mgb3IgdGhhdAorICAgYXJlIGRlc3RpbmVkIGZvciBvdGhlciBub2Rlcy4KKworQXBwZW5kaXggRC4gIEdsb3NzYXJ5CisKKyAgIFtDUkVGMThdCisKKyAgIEZDUworICAgICAgRmluYWwgQ2hlY2tzdW0uICBCeXRlcyBhZGRlZCB0byB0aGUgZW5kIG9mIGEgcGFja2V0IHRvIGhlbHAKKyAgICAgIGRldGVybWluZSBpZiB0aGUgcGFja2V0IHdhcyByZWNlaXZlZCB3aXRob3V0IGNvcnJ1cHRpb24uCisgICBOQ1AKKyAgICAgIE5ldHdvcmsgQ29udHJvbCBQcm9jZXNzb3IuCisgICBOTEkKKyAgICAgIE5ldHdvcmsgTGluayBJZGVudGlmaWVyLiAgTWF5IGJlIGEgdmFsdWUgYmV0d2VlbiB6ZXJvIGFuZCB0aHJlZS4KKyAgICAgIFNlZSBTZWN0aW9uIDIuMS4yIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgT1MKKyAgICAgIE9wZXJhdGluZyBTeXN0ZW0sIGkuZS4gdGhlIElQdjYgbm9kZSB1c2luZyBTcGluZWwgdG8gY29udHJvbCBhbmQKKyAgICAgIG1hbmFnZSBvbmUgb3IgbW9yZSBvZiBpdHMgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMuCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA4MF0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIFBIWQorICAgICAgUGh5c2ljYWwgbGF5ZXIuICBSZWZlcnMgdG8gY2hhcmFjdGVyaXN0aWNzIGFuZCBwYXJhbWV0ZXJzIHJlbGF0ZWQKKyAgICAgIHRvIHRoZSBwaHlzaWNhbCBpbXBsZW1lbnRhdGlvbiBhbmQgb3BlcmF0aW9uIG9mIGEgbmV0d29ya2luZworICAgICAgbWVkaXVtLgorICAgUFVJCisgICAgICBQYWNrZWQgVW5zaWduZWQgSW50ZWdlci4gIEEgd2F5IHRvIHNlcmlhbGl6ZSBhbiB1bnNpZ25lZCBpbnRlZ2VyCisgICAgICB1c2luZyBvbmUsIHR3bywgb3IgdGhyZWUgYnl0ZXMuICBVc2VkIHRocm91Z2hvdXQgdGhlIFNwaW5lbAorICAgICAgcHJvdG9jb2wuICBTZWUgU2VjdGlvbiAzLjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICBUSUQKKyAgICAgIFRyYW5zYWN0aW9uIElkZW50aWZpZXIuICBNYXkgYmUgYSB2YWx1ZSBiZXR3ZWVuIHplcm8gYW5kIGZpZnRlZW4uCisgICAgICBTZWUgU2VjdGlvbiAyLjEuMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQXBwZW5kaXggRS4gIEFja25vd2xlZGdtZW50cworCisgICBUaHJlYWQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBUaGUgVGhyZWFkIEdyb3VwLCBJbmMuCisKKyAgIFNwZWNpYWwgdGhhbmtzIHRvIE5pY2sgQmFua3MsIEpvbmF0aGFuIEh1aSwgQWJ0aW4gS2VzaGF2YXJ6aWFuLCBZYWt1bgorICAgWHUsIFBpb3RyIFN6a290YWssIEFyanVuYSBTaXZhc2l0aGFtYmFyZXNhbiBhbmQgTWFydGluIFR1cm9uIGZvcgorICAgdGhlaXIgc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyBhbmQgZmVlZGJhY2sgcmVsYXRlZCB0byB0aGlzCisgICBkb2N1bWVudC4KKworICAgVGhpcyBkb2N1bWVudCB3YXMgcHJlcGFyZWQgdXNpbmcgbW1hcmsgWzNdIGJ5IChNaWVrIEdpZWJlbikgYW5kCisgICB4bWwycmZjICh2ZXJzaW9uIDIpIFs0XS4KKworRWRpdG9yaWFsIENvbW1lbnRzCisKK1tDUkVGMV0gUlE6IEV2ZW50dWFsbHksIHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL21pZWtnL21tYXJrL2lzc3Vlcy85NSBpcworICAgICAgICBhZGRyZXNzZWQsIHRoZSBhYm92ZSB0YWJsZSBzaG91bGQgYmUgc3dhcHBlZCBvdXQgd2l0aCB0aGlzOiB8CisgICAgICAgIDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfAorICAgICAgICA3IHwgfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18IHwgRkxHIHx8IE5MSSB8fCBUSUQgfHx8fAorCitbQ1JFRjJdIFJROiBXZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBudW1iZXJpbmcgaGVyZSBzbyB0aGF0IDAgaXMKKyAgICAgICAgYFBPV0VSX1NUQVRFX09OTElORWAuIFdlIG1heSBhbHNvIHdhbnQgdG8gaW5jbHVkZSBzb21lIGV4dHJhCisgICAgICAgIHZhbHVlcyBiZXR3ZWVuIHRoZSBkZWZpbmVkIHZhbHVlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgc28gdGhhdAorICAgICAgICB3ZSBjYW4gcHJlc2VydmUgdGhlIG9yZGVyZWQgcmVsYXRpb25zaGlwLiAtLQorCitbQ1JFRjNdIFJROiBXZSBzaG91bGQgY29uc2lkZXIgcmV2ZXJzaW5nIHRoZSBudW1iZXJpbmcgaGVyZSBzbyB0aGF0IDAgaXMKKyAgICAgICAgYFBPV0VSX1NUQVRFX09OTElORWAuIFdlIG1heSBhbHNvIHdhbnQgdG8gaW5jbHVkZSBzb21lIGV4dHJhCisgICAgICAgIHZhbHVlcyBiZXR3ZWVuIHRoZSBkZWZpbmVkIHZhbHVlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgc28gdGhhdAorICAgICAgICB3ZSBjYW4gcHJlc2VydmUgdGhlIG9yZGVyZWQgcmVsYXRpb25zaGlwLiAtLQorCitbQ1JFRjRdIFJROiBUaGUganVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIGJlaGF2aW9yIGlzIHRvIGF0dGVtcHQgdG8KKyAgICAgICAgYXZvaWQgcG9zc2libGUgZnV0dXJlIGludGVyb3AgcHJvYmxlbXMgYnkgZXhwbGljaXRseSBtYWtpbmcgc3VyZQorICAgICAgICB0aGF0IHVua25vd24gcHJvcGVydGllcyBhcmUgaWdub3JlZC4gIFNpbmNlIHVua25vd24gcHJvcGVydGllcworICAgICAgICB3aWxsIG9idmlvdXNseSBub3QgYmUgZ2VuZXJhdGluZyB1bnNvbGljaXRlZCB1cGRhdGVzLCBpdCBzZWVtcworICAgICAgICBmYWlybHkgaGFybWxlc3MuICBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJpbnQgb3V0IGEgd2FybmluZyB0bworICAgICAgICB0aGUgZGVidWcgc3RyZWFtLiAgTm90ZSB0aGF0IHRoZSBlcnJvciBpcyBzdGlsbCBkZXRlY3RhYmxlOiBJZgorICAgICAgICB5b3UgVkFMVUVcX1NFVCB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLCB0aGUgcmVzdWx0aW5nIFZBTFVFXF9JUworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgODFdCisMCitJbnRlcm5ldC1EcmFmdCAgICAgICAgICBTcGluZWwgUHJvdG9jb2wgKFVuaWZpZWQpICAgICAgICAgICAgICBKdW5lIDIwMTcKKworCisgICAgICAgIHdvdWxkIGNvbnRhaW4gb25seSB0aGUgc3VwcG9ydGVkIHByb3BlcnRpZXMgb2YgdGhhdCBzZXQoc2luY2UKKyAgICAgICAgdGhlIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMgd291bGQgYmUgaWdub3JlZCkuICBJZiBhbgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBjYXJlcyB0aGF0IG11Y2ggYWJvdXQgZ2V0dGluZyB0aGlzIHJpZ2h0IHRoZW4gaXQKKyAgICAgICAgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2hlY2tzIFBST1BcX1VOU09MXF9VUERBVEVcX0xJU1QKKyAgICAgICAgZmlyc3QuICAtLQorCitbQ1JFRjVdIFJROiBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMKKyAgICAgICAgZG9pbmcgZm9yIG5hdGl2ZSBJXjJDIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC4KKworW0NSRUY2XSBSUTogSXQgbWF5IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBhIGxvb2sgYXQgd2hhdCBCbHVldG9vdGggSENJIGlzCisgICAgICAgIGRvaW5nIGZvciBuYXRpdmUgVVNCIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC4KKworW0NSRUY3XSBSUTogVGhlIFBVSSB0ZXN0LXZlY3RvciBlbmNvZGluZ3MgbmVlZCB0byBiZSB2ZXJpZmllZC4KKworW0NSRUY4XSBSUTogRklYTUU6IFRoaXMgdGVzdCB2ZWN0b3IgaXMgaW5jb21wbGV0ZS4KKworW0NSRUY5XSBSUTogRklYTUU6IFRoaXMgdGVzdCB2ZWN0b3IgaXMgaW5jb21wbGV0ZS4KKworW0NSRUYxMF0gUlE6IEZJWE1FOiBUaGlzIHRlc3QgdmVjdG9yIGlzIGluY29tcGxldGUuCisKK1tDUkVGMTFdIFJROiBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLgorCitbQ1JFRjEyXSBSUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuCisKK1tDUkVGMTNdIFJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4KKworW0NSRUYxNF0gUlE6IEZJWE1FOiBUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpbmNvbXBsZXRlLgorCitbQ1JFRjE1XSBSUTogRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuCisKK1tDUkVGMTZdIFJROiBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4KKworW0NSRUYxN10gUlE6IEZJWE1FOiBUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpbmNvbXBsZXRlLgorCitbQ1JFRjE4XSBSUTogQWxwaGFiZXRpemUgYmVmb3JlIGZpbmFsaXphdGlvbi4KKworQXV0aG9ycycgQWRkcmVzc2VzCisKKyAgIFJvYmVydCBTLiBRdWF0dGxlYmF1bQorICAgTmVzdCBMYWJzLCBJbmMuCisgICAzNDAwIEhpbGx2aWV3IEF2ZS4KKyAgIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSAgOTQzMDQKKyAgIFVTQQorCisgICBFbWFpbDogcnF1YXR0bGVAbmVzdGxhYnMuY29tCisKKworCisKKworCitRdWF0dGxlYmF1bSAmIFdvb2R5YXR0ICBFeHBpcmVzIERlY2VtYmVyIDI0LCAyMDE3ICAgICAgICAgICAgICBbUGFnZSA4Ml0KKwwKK0ludGVybmV0LURyYWZ0ICAgICAgICAgIFNwaW5lbCBQcm90b2NvbCAoVW5pZmllZCkgICAgICAgICAgICAgIEp1bmUgMjAxNworCisKKyAgIEphbWVzIFdvb2R5YXR0IChlZGl0b3IpCisgICBOZXN0IExhYnMsIEluYy4KKyAgIDM0MDAgSGlsbHZpZXcgQXZlLgorICAgUGFsbyBBbHRvLCBDYWxpZm9ybmlhICA5NDMwNAorICAgVVNBCisKKyAgIEVtYWlsOiBqaHdAbmVzdGxhYnMuY29tCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworUXVhdHRsZWJhdW0gJiBXb29keWF0dCAgRXhwaXJlcyBEZWNlbWJlciAyNCwgMjAxNyAgICAgICAgICAgICAgW1BhZ2UgODNdCmRpZmYgLS1naXQgYS9kb2MvaGVhZGVyLmh0bWwgYi9kb2MvaGVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyODRkNwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDU1IEBACis8IS0tIEhUTUwgaGVhZGVyIGZvciBkb3h5Z2VuIDEuOC45LjEtLT4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9OSIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuICRkb3h5Z2VudmVyc2lvbiIvPgorPCEtLUJFR0lOIFBST0pFQ1RfTkFNRS0tPjx0aXRsZT4kcHJvamVjdG5hbWU6ICR0aXRsZTwvdGl0bGU+PCEtLUVORCBQUk9KRUNUX05BTUUtLT4KKzwhLS1CRUdJTiAhUFJPSkVDVF9OQU1FLS0+PHRpdGxlPiR0aXRsZTwvdGl0bGU+PCEtLUVORCAhUFJPSkVDVF9OQU1FLS0+Cis8bGluayBocmVmPSIkcmVscGF0aF50YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJHJlbHBhdGheanF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRyZWxwYXRoXmR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KKyR0cmVldmlldworJHNlYXJjaAorJG1hdGhqYXgKKzxsaW5rIGhyZWY9IiRyZWxwYXRoXiRzdHlsZXNoZWV0IiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorJGV4dHJhc3R5bGVzaGVldAorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgorCis8IS0tQkVHSU4gVElUTEVBUkVBLS0+Cis8ZGl2IGlkPSJ0aXRsZWFyZWEiPgorPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CisgPHRib2R5PgorIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CisgIDwhLS1CRUdJTiBQUk9KRUNUX0xPR08tLT4KKyAgPHRkIGlkPSJwcm9qZWN0bG9nbyI+PGltZyBhbHQ9IkxvZ28iIHNyYz0iJHJlbHBhdGheJHByb2plY3Rsb2dvIi8+PC90ZD4KKyAgPCEtLUVORCBQUk9KRUNUX0xPR08tLT4KKyAgPCEtLUJFR0lOIFBST0pFQ1RfTkFNRS0tPgorICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj4KKyAgIDwhLS1CRUdJTiBQUk9KRUNUX05VTUJFUi0tPiYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4kcHJvamVjdG51bWJlcjwvc3Bhbj48IS0tRU5EIFBST0pFQ1RfTlVNQkVSLS0+CisgICA8L2Rpdj4KKyAgIDwhLS1CRUdJTiBQUk9KRUNUX0JSSUVGLS0+PGRpdiBpZD0icHJvamVjdGJyaWVmIj4kcHJvamVjdGJyaWVmPC9kaXY+PCEtLUVORCBQUk9KRUNUX0JSSUVGLS0+CisgIDwvdGQ+CisgIDwhLS1FTkQgUFJPSkVDVF9OQU1FLS0+CisgIDwhLS1CRUdJTiAhUFJPSkVDVF9OQU1FLS0+CisgICA8IS0tQkVHSU4gUFJPSkVDVF9CUklFRi0tPgorICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgorICAgIDxkaXYgaWQ9InByb2plY3RicmllZiI+JHByb2plY3RicmllZjwvZGl2PgorICAgIDwvdGQ+CisgICA8IS0tRU5EIFBST0pFQ1RfQlJJRUYtLT4KKyAgPCEtLUVORCAhUFJPSkVDVF9OQU1FLS0+CisgIDwhLS1CRUdJTiBESVNBQkxFX0lOREVYLS0+CisgICA8IS0tQkVHSU4gU0VBUkNIRU5HSU5FLS0+CisgICA8dGQ+JHNlYXJjaGJveDwvdGQ+CisgICA8IS0tRU5EIFNFQVJDSEVOR0lORS0tPgorICA8IS0tRU5EIERJU0FCTEVfSU5ERVgtLT4KKyA8L3RyPgorIDwvdGJvZHk+Cis8L3RhYmxlPgorPC9kaXY+Cis8IS0tRU5EIFRJVExFQVJFQS0tPgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+CmRpZmYgLS1naXQgYS9kb2MvaW1hZ2VzL09wZW4tVGhyZWFkLUxvZ28tMjAweDQyLnBuZyBiL2RvYy9pbWFnZXMvT3Blbi1UaHJlYWQtTG9nby0yMDB4NDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTk1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL09wZW4tVGhyZWFkLUxvZ28tMjAweDQyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaW1hZ2VzL2NlcnRpZmllZC5zdmcgYi9kb2MvaW1hZ2VzL2NlcnRpZmllZC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjNjVjNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvY2VydGlmaWVkLnN2ZwpAQCAtMCwwICsxLDgzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgorPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKKwkgdmlld0JveD0iMCAwIDkyLjEgNDIuNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgOTIuMSA0Mi42OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCS5zdDB7ZmlsbDojRkY2NjMzO30KKwkuc3Qxe2ZpbGw6I0ZGRkZGRjt9Cis8L3N0eWxlPgorPGc+CisJPGc+CisJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04NiwwTDIxLjMsMEM5LjUsMCwwLDkuNSwwLDIxLjNDMCwzMyw5LjUsNDIuNiwyMS4zLDQyLjZsNjQuNywwYzMuNCwwLDYuMS0yLjcsNi4xLTYuMVY2LjEKKwkJCUM5Mi4xLDIuNyw4OS40LDAsODYsMHoiLz4KKwk8L2c+CisJPGc+CisJCTxnPgorCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTIxLjMsNi4xYy04LjQsMC0xNS4yLDYuOC0xNS4yLDE1LjJjMCw4LjMsNi43LDE1LjEsMTUsMTUuMlYyMS4zaC01Yy0xLjUsMC0yLjcsMS4yLTIuNywyLjcKKwkJCQljMCwxLjUsMS4yLDIuNywyLjcsMi43VjMwYy0zLjMsMC02LTIuNy02LTZjMC0zLjMsMi43LTYsNi02aDV2LTEuN2MwLTIuOCwyLjItNSw1LTVjMi43LDAsNSwyLjIsNSw1YzAsMi44LTIuMiw1LTUsNWgtMS43djE0LjkKKwkJCQljNi45LTEuNSwxMi4xLTcuNiwxMi4xLTE0LjlDMzYuNSwxMi45LDI5LjcsNi4xLDIxLjMsNi4xeiIvPgorCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTI3LjgsMTYuM2MwLTAuOS0wLjgtMS43LTEuNy0xLjdjLTAuOSwwLTEuNywwLjgtMS43LDEuN1YxOGgxLjdDMjcsMTgsMjcuOCwxNy4yLDI3LjgsMTYuM3oiLz4KKwkJPC9nPgorCQk8Zz4KKwkJCTxnPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik00Ni45LDIwLjhjMC4zLDAsMC42LDAuMSwwLjksMC4yYzAuMywwLjEsMC41LDAuMywwLjcsMC41TDQ3LjksMjJjLTAuMy0wLjMtMC42LTAuNC0xLjEtMC40CisJCQkJCWMtMC4yLDAtMC40LDAtMC42LDAuMWMtMC4yLDAuMS0wLjMsMC4yLTAuNSwwLjNjLTAuMSwwLjEtMC4yLDAuMy0wLjMsMC41Yy0wLjEsMC4yLTAuMSwwLjQtMC4xLDAuNmMwLDAuMiwwLDAuNCwwLjEsMC42CisJCQkJCWMwLjEsMC4yLDAuMiwwLjMsMC4zLDAuNWMwLjEsMC4xLDAuMywwLjIsMC41LDAuM2MwLjIsMC4xLDAuNCwwLjEsMC42LDAuMWMwLjQsMCwwLjgtMC4xLDEuMS0wLjRsMC41LDAuNQorCQkJCQljLTAuMiwwLjItMC40LDAuNC0wLjcsMC41Yy0wLjMsMC4xLTAuNiwwLjItMC45LDAuMmMtMC4zLDAtMC42LTAuMS0wLjktMC4yYy0wLjMtMC4xLTAuNS0wLjMtMC43LTAuNWMtMC4yLTAuMi0wLjQtMC40LTAuNS0wLjcKKwkJCQkJYy0wLjEtMC4zLTAuMi0wLjYtMC4yLTAuOWMwLTAuMywwLjEtMC42LDAuMi0wLjljMC4xLTAuMywwLjMtMC41LDAuNS0wLjdjMC4yLTAuMiwwLjQtMC40LDAuNy0wLjUKKwkJCQkJQzQ2LjMsMjAuOSw0Ni42LDIwLjgsNDYuOSwyMC44eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01MywyMC44djAuOGgtMi4zdjEuMUg1M3YwLjdoLTIuM3YxLjFINTN2MC44aC0zdi00LjVINTN6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTU3LjUsMjUuNGwtMC45LTEuNWgtMS4zdjEuNWgtMC43di00LjVoMi4zYzAuNCwwLDAuOCwwLjEsMS4xLDAuNGMwLjMsMC4zLDAuNCwwLjYsMC40LDEuMQorCQkJCQljMCwwLjMtMC4xLDAuNi0wLjMsMC45Yy0wLjIsMC4zLTAuNCwwLjQtMC43LDAuNWwwLjksMS42SDU3LjV6IE01Ni44LDIxLjZoLTEuNXYxLjVsMS41LDBjMC4yLDAsMC40LTAuMSwwLjUtMC4yCisJCQkJCWMwLjEtMC4xLDAuMi0wLjMsMC4yLTAuNWMwLTAuMi0wLjEtMC40LTAuMi0wLjVDNTcuMiwyMS43LDU3LDIxLjYsNTYuOCwyMS42eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik01OS4zLDIwLjhoMy44djAuOGgtMS41djMuOGgtMC44di0zLjhoLTEuNVYyMC44eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NC41LDIwLjhoMC44djQuNWgtMC44VjIwLjh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY5LjgsMjAuOHYwLjhoLTIuM3YxLjFoMi4zdjAuN2gtMi4zdjEuOWgtMC43di00LjVINjkuOHoiLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzEuNCwyMC44aDAuN3Y0LjVoLTAuN1YyMC44eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik03Ni43LDIwLjh2MC44aC0yLjN2MS4xaDIuM3YwLjdoLTIuM3YxLjFoMi4zdjAuOGgtM3YtNC41SDc2Ljd6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTc4LjIsMjAuOGgxLjVjMC4zLDAsMC42LDAuMSwwLjksMC4yYzAuMywwLjEsMC41LDAuMywwLjcsMC41YzAuMiwwLjIsMC40LDAuNCwwLjUsMC43CisJCQkJCWMwLjEsMC4zLDAuMiwwLjYsMC4yLDAuOWMwLDAuMy0wLjEsMC42LTAuMiwwLjljLTAuMSwwLjMtMC4zLDAuNS0wLjUsMC43Yy0wLjIsMC4yLTAuNCwwLjQtMC43LDAuNWMtMC4zLDAuMS0wLjYsMC4yLTAuOSwwLjIKKwkJCQkJaC0xLjVWMjAuOHogTTc5LjcsMjQuNmMwLjIsMCwwLjQsMCwwLjYtMC4xYzAuMi0wLjEsMC4zLTAuMiwwLjUtMC4zYzAuMS0wLjEsMC4yLTAuMywwLjMtMC41YzAuMS0wLjIsMC4xLTAuNCwwLjEtMC42CisJCQkJCWMwLTAuMiwwLTAuNC0wLjEtMC42Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNWMtMC4xLTAuMS0wLjMtMC4yLTAuNS0wLjNjLTAuMi0wLjEtMC40LTAuMS0wLjYtMC4xSDc5djNINzkuN3oiLz4KKwkJCTwvZz4KKwkJCTxnPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik00Mi4yLDI4YzAuMywwLDAuNiwwLjEsMC45LDAuMmMwLjMsMC4xLDAuNSwwLjMsMC43LDAuNWwtMC41LDAuNWMtMC4zLTAuMy0wLjYtMC40LTEuMS0wLjQKKwkJCQkJYy0wLjIsMC0wLjQsMC0wLjYsMC4xYy0wLjIsMC4xLTAuMywwLjItMC41LDAuM2MtMC4xLDAuMS0wLjIsMC4zLTAuMywwLjVjLTAuMSwwLjItMC4xLDAuNC0wLjEsMC42YzAsMC4yLDAsMC40LDAuMSwwLjYKKwkJCQkJYzAuMSwwLjIsMC4yLDAuMywwLjMsMC41YzAuMSwwLjEsMC4zLDAuMiwwLjUsMC4zYzAuMiwwLjEsMC40LDAuMSwwLjYsMC4xYzAuNCwwLDAuOC0wLjEsMS4xLTAuNGwwLjUsMC41CisJCQkJCWMtMC4yLDAuMi0wLjQsMC40LTAuNywwLjVjLTAuMywwLjEtMC42LDAuMi0wLjksMC4yYy0wLjMsMC0wLjYtMC4xLTAuOS0wLjJjLTAuMy0wLjEtMC41LTAuMy0wLjctMC41Yy0wLjItMC4yLTAuNC0wLjQtMC41LTAuNworCQkJCQljLTAuMS0wLjMtMC4yLTAuNi0wLjItMC45YzAtMC4zLDAuMS0wLjYsMC4yLTAuOWMwLjEtMC4zLDAuMy0wLjUsMC41LTAuN2MwLjItMC4yLDAuNC0wLjQsMC43LTAuNUM0MS42LDI4LjEsNDEuOSwyOCw0Mi4yLDI4eiIKKwkJCQkJLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDcsMjhjMC42LDAsMS4yLDAuMiwxLjYsMC43YzAuNCwwLjQsMC43LDEsMC43LDEuNmMwLDAuNi0wLjIsMS4yLTAuNywxLjZjLTAuNCwwLjQtMSwwLjctMS42LDAuNworCQkJCQljLTAuNiwwLTEuMi0wLjItMS42LTAuN2MtMC40LTAuNC0wLjctMS0wLjctMS42YzAtMC42LDAuMi0xLjEsMC43LTEuNkM0NS44LDI4LjIsNDYuMywyOCw0NywyOHogTTQ3LDI4LjgKKwkJCQkJYy0wLjQsMC0wLjgsMC4xLTEuMSwwLjRjLTAuMywwLjMtMC40LDAuNi0wLjQsMS4xYzAsMC40LDAuMSwwLjgsMC40LDEuMWMwLjMsMC4zLDAuNywwLjQsMS4xLDAuNGMwLjQsMCwwLjgtMC4xLDEuMS0wLjQKKwkJCQkJYzAuMy0wLjMsMC40LTAuNywwLjQtMS4xYzAtMC40LTAuMS0wLjgtMC40LTEuMUM0Ny43LDI4LjksNDcuNCwyOC44LDQ3LDI4Ljh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTUxLjMsMjkuOHYyLjdoLTAuN1YyOGwyLjMsMi4zbDIuMy0yLjN2NC41aC0wLjh2LTIuN2wtMS41LDEuNUw1MS4zLDI5Ljh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTU3LjcsMzF2MS41SDU3VjI4aDIuM2MwLjQsMCwwLjgsMC4xLDEuMSwwLjRjMC4zLDAuMywwLjQsMC42LDAuNCwxLjFjMCwwLjQtMC4xLDAuOC0wLjQsMS4xCisJCQkJCUM2MCwzMC45LDU5LjcsMzEsNTkuMiwzMUg1Ny43eiBNNTcuNywyOC44djEuNWgxLjVjMC4yLDAsMC40LTAuMSwwLjUtMC4yYzAuMS0wLjEsMC4yLTAuMywwLjItMC41YzAtMC4yLTAuMS0wLjQtMC4yLTAuNQorCQkJCQljLTAuMS0wLjEtMC4zLTAuMi0wLjUtMC4ySDU3Ljd6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY0LjEsMjhjMC42LDAsMS4yLDAuMiwxLjYsMC43YzAuNCwwLjQsMC43LDEsMC43LDEuNmMwLDAuNi0wLjIsMS4yLTAuNywxLjZjLTAuNCwwLjQtMSwwLjctMS42LDAuNworCQkJCQljLTAuNiwwLTEuMi0wLjItMS42LTAuN2MtMC40LTAuNC0wLjctMS0wLjctMS42YzAtMC42LDAuMi0xLjEsMC43LTEuNkM2Mi45LDI4LjIsNjMuNSwyOCw2NC4xLDI4eiBNNjQuMSwyOC44CisJCQkJCWMtMC40LDAtMC44LDAuMS0xLjEsMC40Yy0wLjMsMC4zLTAuNCwwLjYtMC40LDEuMWMwLDAuNCwwLjEsMC44LDAuNCwxLjFjMC4zLDAuMywwLjcsMC40LDEuMSwwLjRjMC40LDAsMC44LTAuMSwxLjEtMC40CisJCQkJCWMwLjMtMC4zLDAuNC0wLjcsMC40LTEuMWMwLTAuNC0wLjEtMC44LTAuNC0xLjFDNjQuOSwyOC45LDY0LjUsMjguOCw2NC4xLDI4Ljh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY3LjcsMjhsMywyLjdWMjhoMC44djQuNXYwdjBsLTMtMi43djIuN2gtMC44VjI4eiIvPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik03NiwyOHYwLjhoLTIuM3YxLjFINzZ2MC43aC0yLjN2MS4xSDc2djAuOGgtM1YyOEg3NnoiLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzcuNiwyOGwzLDIuN1YyOGgwLjh2NC41djB2MGwtMy0yLjd2Mi43aC0wLjdWMjh6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTgyLjksMjhoMy44djAuOGgtMS41djMuOGgtMC44di0zLjhoLTEuNVYyOHoiLz4KKwkJCTwvZz4KKwkJCTxnPgorCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0zOS45LDEwaDUuN3YxLjFoLTIuM3Y1LjZoLTEuMXYtNS42aC0yLjNWMTB6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTQ4LjIsMTBoMS4xdjIuOGgzLjRWMTBoMS4xdjYuOGgtMS4xVjE0aC0zLjR2Mi44aC0xLjFWMTB6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTYxLjEsMTYuOGwtMS4zLTIuM2gtMS45djIuM2gtMS4xVjEwaDMuNGMwLjYsMCwxLjEsMC4yLDEuNiwwLjdjMC40LDAuNCwwLjcsMSwwLjcsMS42CisJCQkJCWMwLDAuNS0wLjEsMC45LTAuNCwxLjNjLTAuMywwLjQtMC42LDAuNi0xLDAuOGwxLjQsMi40SDYxLjF6IE02MC4yLDExLjJoLTIuM3YyLjJsMi4zLDBjMC4zLDAsMC42LTAuMSwwLjgtMC4zCisJCQkJCWMwLjItMC4yLDAuMy0wLjUsMC4zLTAuOGMwLTAuMy0wLjEtMC42LTAuMy0wLjhDNjAuNywxMS4zLDYwLjUsMTEuMiw2MC4yLDExLjJ6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTY5LjcsMTB2MS4xaC0zLjR2MS43aDMuNFYxNGgtMy40djEuN2gzLjR2MS4xaC00LjVWMTBINjkuN3oiLz4KKwkJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuOSwxNS43aC0zLjFsLTAuNiwxLjFINzJsMy40LTYuOGwzLjQsNi44aC0xLjNMNzYuOSwxNS43eiBNNzQuNCwxNC42aDJsLTEtMkw3NC40LDE0LjZ6Ii8+CisJCQkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTgxLDEwaDIuM2MwLjUsMCwwLjksMC4xLDEuMywwLjNjMC40LDAuMiwwLjgsMC40LDEuMSwwLjdjMC4zLDAuMywwLjYsMC43LDAuNywxLjEKKwkJCQkJYzAuMiwwLjQsMC4zLDAuOCwwLjMsMS4zYzAsMC41LTAuMSwwLjktMC4zLDEuM2MtMC4yLDAuNC0wLjQsMC44LTAuNywxLjFjLTAuMywwLjMtMC43LDAuNi0xLjEsMC43Yy0wLjQsMC4yLTAuOSwwLjMtMS4zLDAuMworCQkJCQlIODFWMTB6IE04My4zLDE1LjdjMC4zLDAsMC42LTAuMSwwLjktMC4yYzAuMy0wLjEsMC41LTAuMywwLjctMC41YzAuMi0wLjIsMC40LTAuNSwwLjUtMC43YzAuMS0wLjMsMC4yLTAuNiwwLjItMC45CisJCQkJCWMwLTAuMy0wLjEtMC42LTAuMi0wLjljLTAuMS0wLjMtMC4zLTAuNS0wLjUtMC43Yy0wLjItMC4yLTAuNS0wLjQtMC43LTAuNWMtMC4zLTAuMS0wLjYtMC4yLTAuOS0wLjJoLTEuMXY0LjVIODMuM3oiLz4KKwkJCTwvZz4KKwkJPC9nPgorCTwvZz4KKzwvZz4KKzwvc3ZnPgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2NvbnRyaWIucG5nIGIvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2NvbnRyaWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZDgwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL29wZW50aHJlYWRfY29udHJpYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2xvZ28ucG5nIGIvZG9jL2ltYWdlcy9vcGVudGhyZWFkX2xvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTY1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL29wZW50aHJlYWRfbG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb2RlbGFiLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29kZWxhYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhNDlkNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29kZWxhYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLWFybS5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItYXJtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQ1NTZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLWFybS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLWF0bWVsLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1hdG1lbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MzIyZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1hdG1lbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLWRpYWxvZy5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItZGlhbG9nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI2MTdlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLWRpYWxvZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW1zLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1tcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwM2E0MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1tcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW5lc3QucG5nIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLW5lc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzlkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItbmVzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW5vcmRpYy5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItbm9yZGljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI5YWVmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLW5vcmRpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLW54cC5wbmcgYi9kb2MvaW1hZ2VzL290LWNvbnRyaWItbnhwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWM0MGEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy9vdC1jb250cmliLW54cC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLXFjLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1xYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmY2UzMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1xYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLXN5bm9wc3lzLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1zeW5vcHN5cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhODYyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi1zeW5vcHN5cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy9vdC1jb250cmliLXRpLnBuZyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi10aS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4OTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvb3QtY29udHJpYi10aS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC1kZXRhaWxzLnBuZyBiL2RvYy9pbWFnZXMvd2luZG93cy1hcHAtZGV0YWlscy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NzdjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9pbWFnZXMvd2luZG93cy1hcHAtZGV0YWlscy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC1pbnRlcmZhY2UtbGlzdC5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLWludGVyZmFjZS1saXN0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjJiNWYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC1pbnRlcmZhY2UtbGlzdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLWNsaWVudC5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLXRhbGstY2xpZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBjOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLWNsaWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLXNlcnZlci5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLXRhbGstc2VydmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU2ODliCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLXNlcnZlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2ltYWdlcy93aW5kb3dzX2Rlc2lnbi5wbmcgYi9kb2MvaW1hZ2VzL3dpbmRvd3NfZGVzaWduLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWZhMzQzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2ltYWdlcy93aW5kb3dzX2Rlc2lnbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvTWFrZWZpbGUgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFmYjIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTQgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgTmVzdCBMYWJzLCBJbmMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK1hNTDJSRkNfQ0FDSEVfRElSID89ICQoSE9NRSkvLmNhY2hlL3htbDJyZmMKKworVE9PTF9QUkVGSVggICAgICAgID0gJChET0NLRVIpIHJ1biAtLXJtIC0tdXNlcj1gaWQgLXVgOmBpZCAtZ2AgLXYgYHB3ZGA6L3JmYyAtdiAkKFhNTDJSRkNfQ0FDSEVfRElSKTovdmFyL2NhY2hlL3htbDJyZmMgcGF1bGVqL3JmY3Rvb2xzCisKK0RPQ0tFUiAgICAgICAgICAgID89IGRvY2tlcgorTUQyUkZDICAgICAgICAgICAgPz0gJChUT09MX1BSRUZJWCkgbWQycmZjCitYTUwyUkZDICAgICAgICAgICA/PSAkKFRPT0xfUFJFRklYKSB4bWwycmZjCitNTUFSSyAgICAgICAgICAgICA/PSAkKFRPT0xfUFJFRklYKSBtbWFyaworU0VEICAgICAgICAgICAgICAgPz0gc2VkCitSTV9GCQkgICAgICA/PSBybSAtZgorTUtESVJfUAkJICAgICAgPz0gbWtkaXIgLXAKKworU09VUkNFX0RBVEUgICAgICAgOj0gJChzaGVsbCAoVFo9VVRDIGdpdCBsb2cgLW4gMSAtLWRhdGU9aXNvLXN0cmljdC1sb2NhbCAtLXByZXR0eT1mb3JtYXQ6JWFkIDI+IC9kZXYvbnVsbCB8fCBkYXRlIC11ICsiJVktJW0tJWRUJUg6JU06JVNaIiApIHwgc2VkICdzLyswMDowMCQkL1ovJykKK1NPVVJDRV9WRVJTSU9OICAgID89ICQoc2hlbGwgZ2l0IGRlc2NyaWJlIC0tZGlydHkgLS1hbHdheXMgLS1tYXRjaCAiLS1Qb0lzT24tLSIgMj4gL2Rldi9udWxsKQorCisjIC0tLS0tLS0tLS0tLS0KKworU1JDICAgOj0gJCh3aWxkY2FyZCBkcmFmdC0qLm1kKSAkKHdpbGRjYXJkIGRyYWZ0LSoubWQuaW4pCitYTUwgICA6PSAkKHBhdHN1YnN0ICUubWQsJS54bWwsJChwYXRzdWJzdCAlLm1kLmluLCUueG1sLCQoU1JDKSkpCitUWFQgICA6PSAkKHBhdHN1YnN0ICUubWQsJS50eHQsJChwYXRzdWJzdCAlLm1kLmluLCUudHh0LCQoU1JDKSkpCitIVE1MICA6PSAkKHBhdHN1YnN0ICUubWQsJS5odG1sLCQocGF0c3Vic3QgJS5tZC5pbiwlLmh0bWwsJChTUkMpKSkKKworYWxsOiAkKFhNTCkgJChUWFQpICQoSFRNTCkKKworY2xlYW46CisJJChSTV9GKSAkKFhNTCkgJChUWFQpICQoSFRNTCkgJChwYXRzdWJzdCAlLm1kLmluLCUubWQsJCh3aWxkY2FyZCBkcmFmdC0qLm1kLmluKSkKKworJChYTUwyUkZDX0NBQ0hFX0RJUik6CisJJChNS0RJUl9QKSAiJChYTUwyUkZDX0NBQ0hFX0RJUikiCisKKyUubWQ6ICUubWQuaW4KKwkkKFNFRCkgJ3MvQFNPVVJDRV9WRVJTSU9OQC8kKFNPVVJDRV9WRVJTSU9OKS9nO3MvQFNPVVJDRV9EQVRFQC8kKFNPVVJDRV9EQVRFKS9nJyA8ICQ8ID4gJEAKKworJS54bWw6ICUubWQKKwkkKE1NQVJLKSAteG1sMiAtcGFnZSAkPCAkQAorCSQoU0VEKSAtaSAiIiAtZSAncy9mdWxsbmFtZT0iSmFtZXMgV29vZHlhdHQiL2Z1bGxuYW1lPSJKYW1lcyBXb29keWF0dCIgcm9sZT0iZWRpdG9yIi8nICRACisKKyUuaHRtbDogJS54bWwgJChYTUwyUkZDX0NBQ0hFX0RJUikKKwkkKFhNTDJSRkMpIC0taHRtbCAkPAorCislLnR4dDogJS54bWwgJChYTUwyUkZDX0NBQ0hFX0RJUikKKwkkKFhNTDJSRkMpIC0tdGV4dCAkPAorCisjIC0tLS0tLS0tLS0tLS0KKworZHJhZnQtcnF1YXR0bGUtc3BpbmVsLWJhc2lzLnhtbDogXAorCWRyYWZ0LXJxdWF0dGxlLXNwaW5lbC1iYXNpcy5tZCBcCisJc3BpbmVsLWNvbW1hbmRzLm1kIFwKKwlzcGluZWwtZGF0YS1wYWNraW5nLm1kIFwKKwlzcGluZWwtZXhhbXBsZS1zZXNzaW9ucy5tZCBcCisJc3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZCBcCisJc3BpbmVsLWZlYXR1cmUtbmV0d29yay1zYXZlLm1kIFwKKwlzcGluZWwtZnJhbWUtZm9ybWF0Lm1kIFwKKwlzcGluZWwtZnJhbWluZy5tZCBcCisJc3BpbmVsLXByb3AtY29yZS5tZCBcCisJc3BpbmVsLXByb3AtZGVidWcubWQgXAorCXNwaW5lbC1wcm9wLWlwdjYubWQgXAorCXNwaW5lbC1wcm9wLW1hYy5tZCBcCisJc3BpbmVsLXByb3AtbmV0Lm1kIFwKKwlzcGluZWwtcHJvcC1waHkubWQgXAorCXNwaW5lbC1wcm9wLm1kIFwKKwlzcGluZWwtc3RhdHVzLWNvZGVzLm1kIFwKKwlzcGluZWwtdGVjaC10aHJlYWQubWQgXAorCXNwaW5lbC10ZXN0LXZlY3RvcnMubWQgXAorCSQoTlVMTCkKKworZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQueG1sOiBcCisJZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQubWQgXAorCXNwaW5lbC1jb21tYW5kcy5tZCBcCisJc3BpbmVsLWRhdGEtcGFja2luZy5tZCBcCisJc3BpbmVsLWV4YW1wbGUtc2Vzc2lvbnMubWQgXAorCXNwaW5lbC1mZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQubWQgXAorCXNwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZCBcCisJc3BpbmVsLWZyYW1lLWZvcm1hdC5tZCBcCisJc3BpbmVsLWZyYW1pbmcubWQgXAorCXNwaW5lbC1wcm9wLWNvcmUubWQgXAorCXNwaW5lbC1wcm9wLWRlYnVnLm1kIFwKKwlzcGluZWwtcHJvcC1pcHY2Lm1kIFwKKwlzcGluZWwtcHJvcC1tYWMubWQgXAorCXNwaW5lbC1wcm9wLW5ldC5tZCBcCisJc3BpbmVsLXByb3AtcGh5Lm1kIFwKKwlzcGluZWwtcHJvcC5tZCBcCisJc3BpbmVsLXN0YXR1cy1jb2Rlcy5tZCBcCisJc3BpbmVsLXRlY2gtdGhyZWFkLm1kIFwKKwlzcGluZWwtdGVzdC12ZWN0b3JzLm1kIFwKKwkkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtYmFzaXMubWQuaW4gYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9kcmFmdC1ycXVhdHRsZS1zcGluZWwtYmFzaXMubWQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MGE0NAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC1iYXNpcy5tZC5pbgpAQCAtMCwwICsxLDEwOSBAQAorJSUlCisgICAgdGl0bGUgICAgICAgICAgID0gIlNwaW5lbDogQSBwcm90b2NvbCBiYXNpcyBmb3IgY29udHJvbCBhbmQgbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlIGNvLXByb2Nlc3NvcnMiCisgICAgYWJicmV2ICAgICAgICAgID0gIlNwaW5lbCBCYXNpcyIKKyAgICBjYXRlZ29yeSAgICAgICAgPSAic3RkIgorICAgIGRvY05hbWUgICAgICAgICA9ICJkcmFmdC1ycXVhdHRsZS1zcGluZWwtYmFzaXMiCisgICAgaXByICAgICAgICAgICAgID0gInRydXN0MjAwOTAyIgorICAgIGtleXdvcmQgICAgICAgICA9IFsiU3BpbmVsIiwgIklQdjYiLCAiTkNQIl0KKyAgICBkYXRlICAgICAgICAgICAgPSBAU09VUkNFX0RBVEVACisgICAgCisgICAgW3BpXQorICAgIGVkaXRpbmcgICAgICAgICA9ICJ5ZXMiCisgICAgY29tcGFjdCAgICAgICAgID0gInllcyIKKyAgICBzdWJjb21wYWN0ICAgICAgPSAieWVzIgorICAgIGNvbW1lbnRzICAgICAgICA9ICJ5ZXMiCisgICAgCisgICAgW1thdXRob3JdXQorICAgIGluaXRpYWxzICAgICAgICA9ICJSLiIKKyAgICBzdXJuYW1lICAgICAgICAgPSAiUXVhdHRsZWJhdW0iCisgICAgZnVsbG5hbWUgICAgICAgID0gIlJvYmVydCBTLiBRdWF0dGxlYmF1bSIKKyAgICBvcmdhbml6YXRpb24gICAgPSAiTmVzdCBMYWJzLCBJbmMuIgorICAgIAorICAgICAgICBbYXV0aG9yLmFkZHJlc3NdCisgICAgICAgIGVtYWlsICAgICAgID0gInJxdWF0dGxlQG5lc3RsYWJzLmNvbSIKKyAgICAgICAgCisgICAgICAgIFthdXRob3IuYWRkcmVzcy5wb3N0YWxdCisgICAgICAgIHN0cmVldCAgICAgID0gIjM0MDAgSGlsbHZpZXcgQXZlLiIKKyAgICAgICAgY2l0eSAgICAgICAgPSAiUGFsbyBBbHRvIgorICAgICAgICByZWdpb24gICAgICA9ICJDYWxpZm9ybmlhIgorICAgICAgICBjb2RlICAgICAgICA9ICI5NDMwNCIKKyAgICAgICAgY291bnRyeSAgICAgPSAiVVNBIgorICAgIAorICAgIFtbYXV0aG9yXV0KKyAgICBpbml0aWFscyAgICAgICAgPSAiai5oLiIKKyAgICBzdXJuYW1lICAgICAgICAgPSAid29vZHlhdHQiCisgICAgZnVsbG5hbWUgICAgICAgID0gImphbWVzIHdvb2R5YXR0IgorICAgIG9yZ2FuaXphdGlvbiAgICA9ICJOZXN0IExhYnMsIEluYy4iCisgICAgcm9sZSAgICAgICAgICAgID0gImVkaXRvciIKKyAgICAKKyAgICAgICAgW2F1dGhvci5hZGRyZXNzXQorICAgICAgICBlbWFpbCAgICAgICA9ICJqaHdAbmVzdGxhYnMuY29tIgorICAgICAgICAKKyAgICAgICAgW2F1dGhvci5hZGRyZXNzLnBvc3RhbF0KKyAgICAgICAgc3RyZWV0ICAgICAgPSAiMzQwMCBIaWxsdmlldyBBdmUuIgorICAgICAgICBjaXR5ICAgICAgICA9ICJQYWxvIEFsdG8iCisgICAgICAgIHJlZ2lvbiAgICAgID0gIkNhbGlmb3JuaWEiCisgICAgICAgIGNvZGUgICAgICAgID0gIjk0MzA0IgorICAgICAgICBjb3VudHJ5ICAgICA9ICJVU0EiCislJSUKKworLiMgQWJzdHJhY3QKKworVGhpcyBkb2N1bWVudCBzcGVjaWZpZXMgdGhlIGJhc2lzIG9mIHRoZSBTcGluZWwgcHJvdG9jb2wsIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSBjb250cm9sIGFuZCBtYW5hZ2VtZW50IG9mIElQdjYgbmV0d29yayBpbnRlcmZhY2VzIG9uIGRldmljZXMgd2hlcmUgZ2VuZXJhbCBwdXJwb3NlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMgb2ZmbG9hZCBuZXR3b3JrIGZ1bmN0aW9ucyBhdCB0aGVpciBpbnRlcmZhY2VzIHRvIG5ldHdvcmsgY28tcHJvY2Vzc29ycyAoTkNQKSBjb25uZWN0ZWQgYnkgc2ltcGxlIGNvbW11bmljYXRpb24gbGlua3MgbGlrZSBzZXJpYWwgZGF0YSBjaGFubmVscy4gU3BpbmVsIHdhcyBpbml0aWFsbHkgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFRocmVhZCBuZXR3b3JrIGNvLXByb2Nlc3NvcnMsIGJ1dCBpdHMgYmFzaXMgaXMgZ2VuZXJhbCBwdXJwb3NlIGFuZCBpbnRlbmRlZCB0byBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciB0eXBlcyBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlLgorCit7bWFpbm1hdHRlcn0KKworIyBJbnRyb2R1Y3Rpb24gIworCitTcGluZWwgaXMgYSBob3N0LWNvbnRyb2xsZXIgcHJvdG9jb2wgZGVzaWduZWQgdG8gZW5hYmxlIGludGVyb3BlcmF0aW9uIG92ZXIgc2ltcGxlIHNlcmlhbCBjb25uZWN0aW9ucyBiZXR3ZWVuIGdlbmVyYWwgcHVycG9zZSBkZXZpY2Ugb3BlcmF0aW5nIHN5c3RlbXMgKE9TKSBhbmQgbmV0d29yayBjby1wcm9jZXNzb3JzIChOQ1ApIGZvciB0aGUgcHVycG9zZSBvZiBjb250cm9sbGluZyBhbmQgbWFuYWdpbmcgdGhlaXIgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMsIGFjaGlldmluZyB0aGUgZm9sbG93aW5nIGdvYWxzOgorCisqICAgQWRvcHQgYSBsYXllcmVkIGFwcHJvYWNoIHRvIHRoZSBwcm90b2NvbCBkZXNpZ24sIGFsbG93aW5nIGZ1dHVyZSBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBvZiBJUHY2IGxpbmsuCisqICAgTWluaW1pemUgdGhlIG51bWJlciBvZiByZXF1aXJlZCBjb21tYW5kcy9tZXRob2RzIGJ5IHN1cHBvcnRpbmcgYSByaWNoLCBwcm9wZXJ0eS1iYXNlZCBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCisqICAgU3VwcG9ydCBOQ1BzIGNhcGFibGUgb2YgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIElQdjYgaW50ZXJmYWNlcy4KKyogICBTdXBwb3J0IE5DUHMgY2FwYWJsZSBvZiBjb21tdW5pY2F0aW5nIHNpbXVsdGFuZW91c2x5IG9uIG1vcmUgdGhhbiBvbmUgcGh5c2ljYWwgbGluay4KKyogICBHcmFjZWZ1bGx5IGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgd2l0aG91dCBuZWNlc3NhcmlseSBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorKiAgIEJlIGFzIG1pbmltYWwgYW5kIGxpZ2h0LXdlaWdodCBhcyBwb3NzaWJsZSB3aXRob3V0IHVubmVjZXNzYXJpbHkgc2FjcmlmaWNpbmcgZmxleGliaWxpdHkuCisKK09uIHRvcCBvZiB0aGlzIGNvcmUgZnJhbWV3b3JrLCBwcm9wZXJ0aWVzIGFuZCBjb21tYW5kcyBlbmFibGUgdmFyaW91cyBjb21tb24gZmVhdHVyZXMgb2YgSVB2Ni4gSW4gcmVsYXRlZCBhbmQgZm9ydGhjb21pbmcgZG9jdW1lbnRzLCB0aGUgU3BpbmVsIHByb3RvY29sIGlzIGV4dGVuZGVkIHRvIHN1cHBvcnQgTkNQIGltcGxlbWVudGF0aW9ucyBmb3Igc3BlY2lmaWMgSVB2NiBsaW5rIHR5cGVzLCBlLmcuIFRocmVhZC4KKwore3tzcGluZWwtZnJhbWUtZm9ybWF0Lm1kfX0KKwore3tzcGluZWwtZGF0YS1wYWNraW5nLm1kfX0KKwore3tzcGluZWwtY29tbWFuZHMubWR9fQorCit7e3NwaW5lbC1wcm9wLm1kfX0KKwore3tzcGluZWwtc3RhdHVzLWNvZGVzLm1kfX0KKwore3tzcGluZWwtdGVjaC10aHJlYWQubWR9fQorCit7e3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtamFtLWRldGVjdC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtZ3Bpby5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtdHJuZy5tZH19CisKK3t7c3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kfX0KKwore2JhY2ttYXR0ZXJ9CisKK3t7c3BpbmVsLWZyYW1pbmcubWR9fQorCit7e3NwaW5lbC10ZXN0LXZlY3RvcnMubWR9fQorCit7e3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kfX0KKwore3tzcGluZWwtYmFzaXMtZ2xvc3NhcnkubWR9fQorCisjIEFja25vd2xlZGdtZW50cyAjCisKK1RocmVhZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBUaHJlYWQgR3JvdXAsIEluYy4KKworU3BlY2lhbCB0aGFua3MgdG8gTmljayBCYW5rcywgSm9uYXRoYW4gSHVpLCBBYnRpbiBLZXNoYXZhcnppYW4sIFBpb3RyIFN6a290YWssIEFyanVuYSBTaXZhc2l0aGFtYmFyZXNhbiBhbmQgTWFydGluIFR1cm9uIGZvciB0aGVpciBzdWJzdGFudGlhbCBjb250cmlidXRpb25zIGFuZCBmZWVkYmFjayByZWxhdGVkIHRvIHRoaXMgZG9jdW1lbnQuCisKK1RoaXMgZG9jdW1lbnQgd2FzIHByZXBhcmVkIHVzaW5nIFttbWFya10oaHR0cHM6Ly9naXRodWIuY29tL21pZWtnL21tYXJrKSBieSAoTWllayBHaWViZW4pIGFuZCBbeG1sMnJmYyAodmVyc2lvbiAyKV0oaHR0cDovL3htbDJyZmMuaWV0Zi5vcmcvKS4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLm1kLmluIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQubWQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2OGY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL2RyYWZ0LXJxdWF0dGxlLXNwaW5lbC11bmlmaWVkLm1kLmluCkBAIC0wLDAgKzEsMTc0IEBACislJSUKKyAgICB0aXRsZSAgICAgICAgICAgPSAiU3BpbmVsIEhvc3QtQ29udHJvbGxlciBQcm90b2NvbCIKKyAgICBhYmJyZXYgICAgICAgICAgPSAiU3BpbmVsIFByb3RvY29sIChVbmlmaWVkKSIKKyAgICBjYXRlZ29yeSAgICAgICAgPSAiaW5mbyIKKyAgICBkb2NOYW1lICAgICAgICAgPSAiZHJhZnQtcnF1YXR0bGUtc3BpbmVsLXVuaWZpZWQtQFNPVVJDRV9WRVJTSU9OQCIKKyAgICBpcHIgICAgICAgICAgICAgPSAibm9EZXJpdmF0aXZlc1RydXN0MjAwOTAyIgorICAgIGtleXdvcmQgICAgICAgICA9IFsiU3BpbmVsIiwgIklQdjYiLCAiTkNQIl0KKyAgICBkYXRlICAgICAgICAgICAgPSBAU09VUkNFX0RBVEVACisgICAgc3VibWlzc2lvblR5cGUgID0gImluZGVwZW5kZW50IgorICAgIAorICAgIFtwaV0KKyAgICBlZGl0aW5nICAgICAgICAgPSAieWVzIgorICAgIGNvbXBhY3QgICAgICAgICA9ICJ5ZXMiCisgICAgc3ViY29tcGFjdCAgICAgID0gInllcyIKKyAgICBjb21tZW50cyAgICAgICAgPSAieWVzIgorICAgIAorICAgIFtbYXV0aG9yXV0KKyAgICBpbml0aWFscyAgICAgICAgPSAiUi4iCisgICAgc3VybmFtZSAgICAgICAgID0gIlF1YXR0bGViYXVtIgorICAgIGZ1bGxuYW1lICAgICAgICA9ICJSb2JlcnQgUy4gUXVhdHRsZWJhdW0iCisgICAgb3JnYW5pemF0aW9uICAgID0gIk5lc3QgTGFicywgSW5jLiIKKyAgICAKKyAgICAgICAgW2F1dGhvci5hZGRyZXNzXQorICAgICAgICBlbWFpbCAgICAgICA9ICJycXVhdHRsZUBuZXN0bGFicy5jb20iCisgICAgICAgIAorICAgICAgICBbYXV0aG9yLmFkZHJlc3MucG9zdGFsXQorICAgICAgICBzdHJlZXQgICAgICA9ICIzNDAwIEhpbGx2aWV3IEF2ZS4iCisgICAgICAgIGNpdHkgICAgICAgID0gIlBhbG8gQWx0byIKKyAgICAgICAgcmVnaW9uICAgICAgPSAiQ2FsaWZvcm5pYSIKKyAgICAgICAgY29kZSAgICAgICAgPSAiOTQzMDQiCisgICAgICAgIGNvdW50cnkgICAgID0gIlVTQSIKKyAgICAKKyAgICBbW2F1dGhvcl1dCisgICAgcm9sZSAgICAgICAgICAgID0gImVkaXRvciIKKyAgICBpbml0aWFscyAgICAgICAgPSAiSi5ILiIKKyAgICBzdXJuYW1lICAgICAgICAgPSAiV29vZHlhdHQiCisgICAgZnVsbG5hbWUgICAgICAgID0gIkphbWVzIFdvb2R5YXR0IgorICAgIG9yZ2FuaXphdGlvbiAgICA9ICJOZXN0IExhYnMsIEluYy4iCisgICAgCisgICAgICAgIFthdXRob3IuYWRkcmVzc10KKyAgICAgICAgZW1haWwgICAgICAgPSAiamh3QG5lc3RsYWJzLmNvbSIKKyAgICAgICAgCisgICAgICAgIFthdXRob3IuYWRkcmVzcy5wb3N0YWxdCisgICAgICAgIHN0cmVldCAgICAgID0gIjM0MDAgSGlsbHZpZXcgQXZlLiIKKyAgICAgICAgY2l0eSAgICAgICAgPSAiUGFsbyBBbHRvIgorICAgICAgICByZWdpb24gICAgICA9ICJDYWxpZm9ybmlhIgorICAgICAgICBjb2RlICAgICAgICA9ICI5NDMwNCIKKyAgICAgICAgY291bnRyeSAgICAgPSAiVVNBIgorJSUlCisKKy4jIEFic3RyYWN0CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBTcGluZWwgcHJvdG9jb2wsIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSBjb250cm9sIGFuZAorbWFuYWdlbWVudCBvZiBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBkZXZpY2VzIHdoZXJlIGdlbmVyYWwgcHVycG9zZQorYXBwbGljYXRpb24gcHJvY2Vzc29ycyBvZmZsb2FkIG5ldHdvcmsgZnVuY3Rpb25zIGF0IHRoZWlyIGludGVyZmFjZXMgdG8gbmV0d29yaworY28tcHJvY2Vzc29ycyAoTkNQKSBjb25uZWN0ZWQgYnkgc2ltcGxlIGNvbW11bmljYXRpb24gbGlua3MgbGlrZSBzZXJpYWwgZGF0YQorY2hhbm5lbHMuIFdoaWxlIGluaXRpYWxseSBkZXZlbG9wZWQgdG8gc3VwcG9ydCBUaHJlYWQoUiksIFNwaW5lbCdzIGxheWVyZWQKK2Rlc2lnbiBhbGxvd3MgaXQgdG8gYmUgZWFzaWx5IGFkYXB0ZWQgdG8gb3RoZXIgc2ltaWxhciBuZXR3b3JrIHRlY2hub2xvZ2llcy4KKworVGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB2YXJpb3VzIFNwaW5lbCBzcGVjaWFsaXphdGlvbnMsIGluY2x1ZGluZyBzdXBwb3J0Citmb3IgdGhlIFRocmVhZChSKSBsb3ctcG93ZXIgbWVzaCBuZXR3b3JrIHRlY2hub2xvZ3kuCisKKwore21haW5tYXR0ZXJ9CisKKyMgSW50cm9kdWN0aW9uICMKKworU3BpbmVsIGlzIGEgaG9zdC1jb250cm9sbGVyIHByb3RvY29sIGRlc2lnbmVkIHRvIGVuYWJsZSBpbnRlcm9wZXJhdGlvbiBvdmVyIHNpbXBsZSBzZXJpYWwgY29ubmVjdGlvbnMgYmV0d2VlbiBnZW5lcmFsIHB1cnBvc2UgZGV2aWNlIG9wZXJhdGluZyBzeXN0ZW1zIChPUykgYW5kIG5ldHdvcmsgY28tcHJvY2Vzc29ycyAoTkNQKSBmb3IgdGhlIHB1cnBvc2Ugb2YgY29udHJvbGxpbmcgYW5kIG1hbmFnaW5nIHRoZWlyIElQdjYgbmV0d29yayBpbnRlcmZhY2VzLCBhY2hpZXZpbmcgdGhlIGZvbGxvd2luZyBnb2FsczoKKworKiAgIEFkb3B0IGEgbGF5ZXJlZCBhcHByb2FjaCB0byB0aGUgcHJvdG9jb2wgZGVzaWduLCBhbGxvd2luZyBmdXR1cmUKKyAgICBzdXBwb3J0IGZvciBvdGhlciBuZXR3b3JrIHByb3RvY29scy4KKyogICBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGNvbW1hbmRzL21ldGhvZHMgYnkgcHJvdmlkaW5nIGEKKyAgICByaWNoLCBwcm9wZXJ0eS1iYXNlZCBBUEkuCisqICAgU3VwcG9ydCBOQ1BzIGNhcGFibGUgb2YgYmVpbmcgY29ubmVjdGVkIHRvIG1vcmUgdGhhbiBvbmUgbmV0d29yaworICAgIGF0IGEgdGltZS4KKyogICBHcmFjZWZ1bGx5IGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMKKyAgICB3aXRob3V0IG5lY2Vzc2FyaWx5IGJyZWFraW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisqICAgQmUgYXMgbWluaW1hbCBhbmQgbGlnaHQtd2VpZ2h0IGFzIHBvc3NpYmxlIHdpdGhvdXQgdW5uZWNlc3NhcmlseQorICAgIHNhY3JpZmljaW5nIGZsZXhpYmlsaXR5LgorCitPbiB0b3Agb2YgdGhpcyBjb3JlIGZyYW1ld29yaywgd2UgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIGFuZCBjb21tYW5kcwordG8gZW5hYmxlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIG5ldHdvcmsgcHJvdG9jb2xzLgorCisjIyBBYm91dCB0aGlzIERyYWZ0ICMjCisKK1RoaXMgZG9jdW1lbnQgaXMgY3VycmVudGx5IGluIGEgZHJhZnQgc3RhdHVzIGFuZCBpcyBjaGFuZ2luZyBvZnRlbi4KK1RoaXMgc2VjdGlvbiBkaXNjdXNzZXMgc29tZSBpZGVhcyBmb3IgY2hhbmdlcyB0byB0aGUgcHJvdG9jb2wgdGhhdAoraGF2ZW4ndCB5ZXQgYmVlbiBmdWxseSBzcGVjaWZpZWQsIGFzIHdlbGwgYXMgc29tZSBvZiB0aGUgaW1wZXR1cyBmb3IKK3RoZSBjdXJyZW50IGRlc2lnbi4KKworIyMjIFNjb3BlICMjIworCitUaGUgZXZlbnR1YWwgaW50ZW50IGlzIHRvIGhhdmUgdHdvIGRvY3VtZW50czogQSBTcGluZWwgYmFzaXMgZG9jdW1lbnQKK3doaWNoIGRpc2N1c3NlcyB0aGUgbmV0d29yay10ZWNobm9sb2d5LWFnbm9zdGljIG1lY2hhbmlzbXMgYW5kIGEKK1RocmVhZChSKSBzcGVjaWFsaXphdGlvbiBkb2N1bWVudCB3aGljaCBkZXNjcmliZXMgYWxsIG9mIHRoZSBUaHJlYWQoUiktc3BlY2lmaWMKK2ltcGxlbWVudGF0aW9uIGRldGFpbHMuIEN1cnJlbnRseSwgdGhpcyBkb2N1bWVudCBjb3ZlcnMgYm90aC4KKworIyMjIFJlbnVtYmVyaW5nICMjIworCitFZmZvcnRzIGFyZSBjdXJyZW50bHkgbWFpbnRhaW5lZCB0byB0cnkgdG8gcHJldmVudCBvdmVydGx5CitiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgcHJvdG9jb2wsIGJ1dCBpZiB5b3UgYXJlCitpbXBsZW1lbnRpbmcgU3BpbmVsIGluIHlvdXIgb3duIHByb2R1Y3RzIHlvdSBzaG91bGQgZXhwZWN0IHRoZXJlIHRvIGJlCithdCBsZWFzdCBvbmUgbGFyZ2UgcmVudW1iZXJpbmcgZXZlbnQgYW5kIG1ham9yIHZlcnNpb24gbnVtYmVyIGNoYW5nZQorYmVmb3JlIHRoZSBzdGFuZGFyZCBpcyBjb25zaWRlcmVkICJiYWtlZCIuIEFsbCBjaGFuZ2VzIHdpbGwgYmUgY2xlYXJseQorbWFya2VkIGFuZCBkb2N1bWVudGVkIHRvIG1ha2Ugc3VjaCBhIHRyYW5zaXRpb24gYXMgZWFzeSBhcyBwb3NzaWJsZS4KKworVG8gYWxsb3cgY29uY2x1c2l2ZSBkZXRlY3Rpb24gb2YgcHJvdG9jb2wgKGluKWNvbXBhdGliaWxpdHkgYmV0d2VlbgordGhlIGhvc3QgYW5kIHRoZSBOQ1AsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYW5kIHByb3BlcnRpZXMgYXJlCithbHJlYWR5IGNvbnNpZGVyZWQgdG8gYmUgImJha2VkIiBhbmQgd2lsbCBub3QgY2hhbmdlOgorCisqICAgQ29tbWFuZCBJRHMgemVybyB0aHJvdWdoIGVpZ2h0LiAoUmVzZXQsIE5vLW9wLCBhbmQgUHJvcGVydHktVmFsdWUKKyAgICBDb21tYW5kcykKKyogICBQcm9wZXJ0eSBJRHMgemVybyB0aHJvdWdoIHR3by4gKExhc3Qgc3RhdHVzLCBQcm90b2NvbCBWZXJzaW9uLCBhbmQKKyAgICBOQ1AgVmVyc2lvbikKKworUmVudW1iZXJpbmcgd291bGQgYmUgdW5kZXJ0YWtlbiBpbiBvcmRlciB0byBiZXR0ZXIgb3JnYW5pemUgdGhlCithbGxvY2F0aW9uIG9mIHByb3BlcnR5IElEcyBhbmQgY2FwYWJpbGl0eSBJRHMuIE9uZSBvZiB0aGUgaW5pdGlhbAorZ29hbHMgb2YgdGhpcyBwcm90b2NvbCB3YXMgZm9yIGl0IHRvIGJlIHBvc3NpYmxlIGZvciBhIGhvc3Qgb3IgTkNQIHRvCitvbmx5IGltcGxlbWVudCBwcm9wZXJ0aWVzIHdpdGggdmFsdWVzIGxlc3MgdGhhbiAxMjcgYW5kIGZvciB0aGUgTkNQIHRvCitzdGlsbCBiZSB1c2FibGUtLS1yZWxlZ2F0aW5nIGFsbCBsYXJnZXIgcHJvcGVydHkgdmFsdWVzIGZvciBleHRyYQorZmVhdHVyZXMgb3Igb3RoZXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlbid0IHN0cmljdGx5IG5lY2Vzc2FyeS4gVGhpcword291bGQgYWxsb3cgc2ltcGxlIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCB0aGUgbmVlZCB0byBpbXBsZW1lbnQKK3N1cHBvcnQgZm9yIFBVSXMgKCgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpKS4KKworQXMgdGltZSBoYXMgZ29uZSBieSBhbmQgdGhlIHByb3RvY29sIGhhcyBiZWNvbWUgbW9yZSBmbGVzaGVkIG91dCwgaXQKK2hhcyBiZWNvbWUgY2xlYXIgdGhhdCBzb21lIG9mIHRoZSBpbml0aWFsIGFsbG9jYXRpb25zIHdlcmUgaW5hZGVxdWF0ZQorYW5kIHNob3VsZCBiZSByZXZpc2l0ZWQgaWYgd2Ugd2FudCB0byB0cnkgdG8gYWNoaWV2ZSB0aGUgb3JpZ2luYWwKK2dvYWwuCisKKwore3tzcGluZWwtZnJhbWUtZm9ybWF0Lm1kfX0KKwore3tzcGluZWwtZGF0YS1wYWNraW5nLm1kfX0KKwore3tzcGluZWwtY29tbWFuZHMubWR9fQorCit7e3NwaW5lbC1wcm9wLm1kfX0KKwore3tzcGluZWwtc3RhdHVzLWNvZGVzLm1kfX0KKwore3tzcGluZWwtdGVjaC10aHJlYWQubWR9fQorCit7e3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtamFtLWRldGVjdC5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtZ3Bpby5tZH19CisKK3t7c3BpbmVsLWZlYXR1cmUtdHJuZy5tZH19CisKK3t7c3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kfX0KKwore2JhY2ttYXR0ZXJ9CisKK3t7c3BpbmVsLWZyYW1pbmcubWR9fQorCit7e3NwaW5lbC10ZXN0LXZlY3RvcnMubWR9fQorCit7e3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kfX0KKwore3tzcGluZWwtYmFzaXMtZ2xvc3NhcnkubWR9fQorCisjIEFja25vd2xlZGdtZW50cyAjCisKK1RocmVhZCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBUaHJlYWQgR3JvdXAsIEluYy4KKworU3BlY2lhbCB0aGFua3MgdG8gTmljayBCYW5rcywgSm9uYXRoYW4gSHVpLCBBYnRpbiBLZXNoYXZhcnppYW4sIFlha3VuIFh1LAorUGlvdHIgU3prb3RhaywgQXJqdW5hIFNpdmFzaXRoYW1iYXJlc2FuIGFuZCBNYXJ0aW4gVHVyb24gZm9yIHRoZWlyCitzdWJzdGFudGlhbCBjb250cmlidXRpb25zIGFuZCBmZWVkYmFjayByZWxhdGVkIHRvIHRoaXMgZG9jdW1lbnQuCisKK1RoaXMgZG9jdW1lbnQgd2FzIHByZXBhcmVkIHVzaW5nIFttbWFya10oaHR0cHM6Ly9naXRodWIuY29tL21pZWtnL21tYXJrKQorYnkgKE1pZWsgR2llYmVuKSBhbmQgW3htbDJyZmMgKHZlcnNpb24gMildKGh0dHA6Ly94bWwycmZjLmlldGYub3JnLykuCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtYmFzaXMtZ2xvc3NhcnkubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtYmFzaXMtZ2xvc3NhcnkubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhYmYzNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1iYXNpcy1nbG9zc2FyeS5tZApAQCAtMCwwICsxLDI1IEBACisjIEdsb3NzYXJ5ICMKKworPCEtLSBSUSAtLSBBbHBoYWJldGl6ZSBiZWZvcmUgZmluYWxpemF0aW9uLiAtLT4KKworRkNTCis6IEZpbmFsIENoZWNrc3VtLiBCeXRlcyBhZGRlZCB0byB0aGUgZW5kIG9mIGEgcGFja2V0IHRvIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkIHdpdGhvdXQgY29ycnVwdGlvbi4KKworTkNQCis6IE5ldHdvcmsgQ29udHJvbCBQcm9jZXNzb3IuCisKK05MSQorOiBOZXR3b3JrIExpbmsgSWRlbnRpZmllci4gTWF5IGJlIGEgdmFsdWUgYmV0d2VlbiB6ZXJvIGFuZCB0aHJlZS4gU2VlICgjbmxpLW5ldHdvcmstbGluay1pZGVudGlmaWVyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworT1MKKzogT3BlcmF0aW5nIFN5c3RlbSwgaS5lLiB0aGUgSVB2NiBub2RlIHVzaW5nIFNwaW5lbCB0byBjb250cm9sIGFuZCBtYW5hZ2Ugb25lIG9yIG1vcmUgb2YgaXRzIElQdjYgbmV0d29yayBpbnRlcmZhY2VzLgorCitQSFkKKzogUGh5c2ljYWwgbGF5ZXIuIFJlZmVycyB0byBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgaW1wbGVtZW50YXRpb24gYW5kIG9wZXJhdGlvbiBvZiBhIG5ldHdvcmtpbmcgbWVkaXVtLgorCitQVUkKKzogUGFja2VkIFVuc2lnbmVkIEludGVnZXIuIEEgd2F5IHRvIHNlcmlhbGl6ZSBhbiB1bnNpZ25lZCBpbnRlZ2VyIHVzaW5nIG9uZSwgdHdvLCBvciB0aHJlZSBieXRlcy4gVXNlZCB0aHJvdWdob3V0IHRoZSBTcGluZWwgcHJvdG9jb2wuIFNlZSAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVElECis6IFRyYW5zYWN0aW9uIElkZW50aWZpZXIuIE1heSBiZSBhIHZhbHVlIGJldHdlZW4gemVybyBhbmQgZmlmdGVlbi4gU2VlICgjdGlkLXRyYW5zYWN0aW9uLWlkZW50aWZpZXIpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtY29tbWFuZHMubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtY29tbWFuZHMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2YmFlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1jb21tYW5kcy5tZApAQCAtMCwwICsxLDMzMCBAQAorIyBDb21tYW5kcworCisjIyBDTUQgMDogKEhvc3QtPk5DUCkgQ01EX05PT1AgeyNjbWQtbm9vcH0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAxCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX05PT1AKKworTm8tT3BlcmF0aW9uIGNvbW1hbmQuIEluZHVjZXMgdGhlIE5DUCB0byBzZW5kIGEgc3VjY2VzcyBzdGF0dXMgYmFjayB0bwordGhlIGhvc3QuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIGxpdmVsaW5lc3MgY2hlY2tzLgorCitUaGUgY29tbWFuZCBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgU0hPVUxEIGJlIGVtcHR5LiBUaGUgcmVjZWl2ZXIKK01VU1QgaWdub3JlIGFueSBub24tZW1wdHkgY29tbWFuZCBwYXlsb2FkLgorCitUaGVyZSBpcyBubyBlcnJvciBjb25kaXRpb24gZm9yIHRoaXMgY29tbWFuZC4KKworCisKKyMjIENNRCAxOiAoSG9zdC0+TkNQKSBDTURfUkVTRVQgeyNjbWQtcmVzZXR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgMQorLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9SRVNFVAorCitSZXNldCBOQ1AgY29tbWFuZC4gQ2F1c2VzIHRoZSBOQ1AgdG8gcGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0LiBEdWUgdG8KK3RoZSBuYXR1cmUgb2YgdGhpcyBjb21tYW5kLCB0aGUgVElEIGlzIGlnbm9yZWQuIFRoZSBob3N0IHNob3VsZAoraW5zdGVhZCB3YWl0IGZvciBhIGBDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZCBmcm9tIHRoZSBOQ1AgaW5kaWNhdGluZworYFBST1BfTEFTVF9TVEFUVVNgIGhhcyBiZWVuIHNldCB0byBgU1RBVFVTX1JFU0VUX1NPRlRXQVJFYC4KKworVGhlIGNvbW1hbmQgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIFNIT1VMRCBiZSBlbXB0eS4gVGhlIHJlY2VpdmVyCitNVVNUIGlnbm9yZSBhbnkgbm9uLWVtcHR5IGNvbW1hbmQgcGF5bG9hZC4KKworSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgYFBST1BfTEFTVF9TVEFUVVNgIHdpbGwgYmUgZW1pdHRlZAoraW5zdGVhZCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLgorCisKKworIyMgQ01EIDI6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX0dFVCB7I2NtZC1wcm9wLXZhbHVlLWdldH0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgICAgIDEgICAgICAgICB8ICAgMS0zCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9HRVQgfCBQUk9QX0lECisKK0dldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiBDYXVzZXMgdGhlIE5DUCB0byBlbWl0IGEKK2BDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGlkZW50aWZpZXIuCisKK1RoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUKK3BhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlcikuCisKK0lmIGFuIGVycm9yIG9jY3VycywgdGhlIHZhbHVlIG9mIGBQUk9QX0xBU1RfU1RBVFVTYCB3aWxsIGJlIGVtaXR0ZWQKK2luc3RlYWQgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4KKworCisKKyMjIENNRCAzOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9TRVQgeyNjbWQtcHJvcC12YWx1ZS1zZXR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgICAgICAxICAgICAgICAgfCAgIDEtMyAgIHwgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfU0VUIHwgUFJPUF9JRCB8IFZBTFVFCisKK1NldCBwcm9wZXJ0eSB2YWx1ZSBjb21tYW5kLiBJbnN0cnVjdHMgdGhlIE5DUCB0byBzZXQgdGhlIGdpdmVuCitwcm9wZXJ0eSB0byB0aGUgc3BlY2lmaWMgZ2l2ZW4gdmFsdWUsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgdmFsdWUuCisKK1RoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUKK3BhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciksIGZvbGxvd2VkIGJ5Cit0aGUgcHJvcGVydHkgdmFsdWUuIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGRlZmluZWQKK2J5IHRoZSBwcm9wZXJ0eS4KKworSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgdmFsdWUgb2YgYFBST1BfTEFTVF9TVEFUVVNgIHdpbGwgYmUgZW1pdHRlZAord2l0aCB0aGUgdmFsdWUgc2V0IHRvIHRoZSBnZW5lcmF0ZWQgc3RhdHVzIGNvZGUgZm9yIHRoZSBlcnJvci4KKworCisKKyMjIENNRCA0OiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9JTlNFUlQgeyNjbWQtcHJvcC12YWx1ZS1pbnNlcnR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgICAgICAxICAgICAgICAgICAgfCAgIDEtMyAgIHwgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfSU5TRVJUIHwgUFJPUF9JRCB8IFZBTFVFCisKK0luc2VydCB2YWx1ZSBpbnRvIHByb3BlcnR5IGNvbW1hbmQuIEluc3RydWN0cyB0aGUgTkNQIHRvIGluc2VydCB0aGUKK2dpdmVuIHZhbHVlIGludG8gYSBsaXN0LW9yaWVudGVkIHByb3BlcnR5LCB3aXRob3V0IHJlbW92aW5nIG90aGVyCitpdGVtcyBpbiB0aGUgbGlzdC4gVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkCitieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4KKworVGhlIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCBpcyB0aGUgcHJvcGVydHkgaWRlbnRpZmllciBlbmNvZGVkIGluIHRoZQorcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbiAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKSwgZm9sbG93ZWQgYnkKK3RoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZC4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgdmFsdWUgaXMgZGVmaW5lZCBieQordGhlIHByb3BlcnR5LgorCitJZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSBgUFJPUF9JRGAgY29uc2lzdHMKK29mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoYEEodCguLi4pKWApLCB0aGVuIHRoZQorY29udGVudHMgb2YgYFZBTFVFYCBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKGAuLi5gKQorcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKGB0KC4uLilgKS4gIFNwZWNpZmljYWxseSwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gYFZBTFVFYC4gVGhpcworaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLgorCitJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiBgUFJPUF9MQVNUX1NUQVRVU2Agd2lsbCBiZSBlbWl0dGVkCit3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLgorCisKKworIyMgQ01EIDU6IChIb3N0LT5OQ1ApIENNRF9QUk9QX1ZBTFVFX1JFTU9WRSB7I2NtZC1wcm9wLXZhbHVlLXJlbW92ZX0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgICAgIDEgICAgICAgICAgICB8ICAgMS0zICAgfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9SRU1PVkUgfCBQUk9QX0lEIHwgVkFMVUUKKworUmVtb3ZlIHZhbHVlIGZyb20gcHJvcGVydHkgY29tbWFuZC4gSW5zdHJ1Y3RzIHRoZSBOQ1AgdG8gcmVtb3ZlIHRoZQorZ2l2ZW4gdmFsdWUgZnJvbSBhIGxpc3Qtb3JpZW50ZWQgcHJvcGVydHksIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyCitpdGVtcyBpbiB0aGUgbGlzdC4gVGhlIHJlc3VsdGluZyBvcmRlciBvZiBpdGVtcyBpbiB0aGUgbGlzdCBpcyBkZWZpbmVkCitieSB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0eSBiZWluZyBvcGVyYXRlZCBvbi4KKworTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBvcGVyYXRlcyAqYnkgdmFsdWUqLCBub3QgYnkgaW5kZXghCisKK1RoZSBwYXlsb2FkIGZvciB0aGlzIGNvbW1hbmQgaXMgdGhlIHByb3BlcnR5IGlkZW50aWZpZXIgZW5jb2RlZCBpbiB0aGUKK3BhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBkZXNjcmliZWQgaW4gKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlciksIGZvbGxvd2VkIGJ5Cit0aGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgdmFsdWUgaXMgZGVmaW5lZCBieQordGhlIHByb3BlcnR5LgorCitJZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSBgUFJPUF9JRGAgY29uc2lzdHMKK29mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoYEEodCguLi4pKWApLCB0aGVuIHRoZQorY29udGVudHMgb2YgYFZBTFVFYCBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKGAuLi5gKQorcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKGB0KC4uLilgKS4gIFNwZWNpZmljYWxseSwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gYFZBTFVFYC4gVGhpcworaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLgorCitJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSB2YWx1ZSBvZiBgUFJPUF9MQVNUX1NUQVRVU2Agd2lsbCBiZSBlbWl0dGVkCit3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gdGhlIGdlbmVyYXRlZCBzdGF0dXMgY29kZSBmb3IgdGhlIGVycm9yLgorCisKKyMjIENNRCA2OiAoTkNQLT5Ib3N0KSBDTURfUFJPUF9WQUxVRV9JUyB7I2NtZC1wcm9wLXZhbHVlLWlzfQorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAgICAgMSAgICAgICAgfCAgIDEtMyAgIHwgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUFJPUF9WQUxVRV9JUyB8IFBST1BfSUQgfCBWQUxVRQorCitQcm9wZXJ0eSB2YWx1ZSBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZSBzZW50IGJ5IHRoZQorTkNQIGluIHJlc3BvbnNlIHRvIGEgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBob3N0LCBvciBpdCBjYW4gYmUgc2VudAorYnkgdGhlIE5DUCBpbiBhbiB1bnNvbGljaXRlZCBmYXNoaW9uIHRvIG5vdGlmeSB0aGUgaG9zdCBvZiB2YXJpb3VzCitzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LgorCitUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluICgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpLCBmb2xsb3dlZCBieQordGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LgorCisKKworIyMgQ01EIDc6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIHsjY21kLXByb3AtdmFsdWUtaW5zZXJ0ZWR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgICAgICAgIDEgICAgICAgICAgICB8ICAgMS0zICAgfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEIHwgUFJPUF9JRCB8IFZBTFVFCisKK1Byb3BlcnR5IHZhbHVlIGluc2VydGlvbiBub3RpZmljYXRpb24gY29tbWFuZC4gVGhpcyBjb21tYW5kIGNhbiBiZQorc2VudCBieSB0aGUgTkNQIGluIHJlc3BvbnNlIHRvIHRoZSBgQ01EX1BST1BfVkFMVUVfSU5TRVJUYCBjb21tYW5kLCBvcgoraXQgY2FuIGJlIHNlbnQgYnkgdGhlIE5DUCBpbiBhbiB1bnNvbGljaXRlZCBmYXNoaW9uIHRvIG5vdGlmeSB0aGUgaG9zdAorb2YgdmFyaW91cyBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LgorCitUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluICgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpLCBmb2xsb3dlZCBieQordGhlIHZhbHVlIHRoYXQgd2FzIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHByb3BlcnR5LgorCitJZiB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZCBieSBgUFJPUF9JRGAgY29uc2lzdHMKK29mIGEgc2luZ2xlIHN0cnVjdHVyZSBlbmNsb3NlZCBieSBhbiBhcnJheSAoYEEodCguLi4pKWApLCB0aGVuIHRoZQorY29udGVudHMgb2YgYFZBTFVFYCBNVVNUIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJ1Y3R1cmUgKGAuLi5gKQorcmF0aGVyIHRoYW4gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIHdob2xlIGl0ZW0gKGB0KC4uLilgKS4gIFNwZWNpZmljYWxseSwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZSBNVVNUIE5PVCBiZSBwcmVwZW5kZWQgdG8gYFZBTFVFYC4gVGhpcworaGVscHMgdG8gZWxpbWluYXRlIHJlZHVuZGFudCBkYXRhLgorCitUaGUgcmVzdWx0aW5nIG9yZGVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0IGlzIGRlZmluZWQgYnkgdGhlIGdpdmVuCitwcm9wZXJ0eS4KKworIyMgQ01EIDg6IChOQ1AtPkhvc3QpIENNRF9QUk9QX1ZBTFVFX1JFTU9WRUQgeyNjbWQtcHJvcC12YWx1ZS1yZW1vdmVkfQorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAgICAgICAxICAgICAgICAgICB8ICAgMS0zICAgfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCB8IFBST1BfSUQgfCBWQUxVRQorCitQcm9wZXJ0eSB2YWx1ZSByZW1vdmFsIG5vdGlmaWNhdGlvbiBjb21tYW5kLiBUaGlzIGNvbW1hbmQgY2FuIGJlIHNlbnQKK2J5IHRoZSBOQ1AgaW4gcmVzcG9uc2UgdG8gdGhlIGBDTURfUFJPUF9WQUxVRV9SRU1PVkVgIGNvbW1hbmQsIG9yIGl0CitjYW4gYmUgc2VudCBieSB0aGUgTkNQIGluIGFuIHVuc29saWNpdGVkIGZhc2hpb24gdG8gbm90aWZ5IHRoZSBob3N0IG9mCit2YXJpb3VzIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuCisKK05vdGUgdGhhdCB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgKmJ5IHZhbHVlKiwgbm90IGJ5IGluZGV4IQorCitUaGUgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kIGlzIHRoZSBwcm9wZXJ0eSBpZGVudGlmaWVyIGVuY29kZWQgaW4gdGhlCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgZGVzY3JpYmVkIGluICgjcGFja2VkLXVuc2lnbmVkLWludGVnZXIpLCBmb2xsb3dlZCBieQordGhlIHZhbHVlIHRoYXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuCisKK0lmIHRoZSB0eXBlIHNpZ25hdHVyZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IGBQUk9QX0lEYCBjb25zaXN0cworb2YgYSBzaW5nbGUgc3RydWN0dXJlIGVuY2xvc2VkIGJ5IGFuIGFycmF5IChgQSh0KC4uLikpYCksIHRoZW4gdGhlCitjb250ZW50cyBvZiBgVkFMVUVgIE1VU1QgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlIHN0cnVjdHVyZSAoYC4uLmApCityYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgd2hvbGUgaXRlbSAoYHQoLi4uKWApLiAgU3BlY2lmaWNhbGx5LAordGhlIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlIE1VU1QgTk9UIGJlIHByZXBlbmRlZCB0byBgVkFMVUVgLiBUaGlzCitoZWxwcyB0byBlbGltaW5hdGUgcmVkdW5kYW50IGRhdGEuCisKK1RoZSByZXN1bHRpbmcgb3JkZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QgaXMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KK3Byb3BlcnR5LgorCisKKyMjIENNRCAxODogKEhvc3QtPk5DUCkgQ01EX1BFRUsgeyNjbWQtcGVla30KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAxICAgIHwgICAgNCAgICB8IDIKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFSyB8IEFERFJFU1MgfCBDT1VOVAorCitUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBOQ1AgdG8gZmV0Y2ggdmFsdWVzIGZyb20gdGhlIFJBTSBvZiB0aGUgTkNQCitmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBVcG9uIHN1Y2Nlc3MsIGBDTURfUEVFS19SRVRgIGlzIHNlbnQgZnJvbSB0aGUKK05DUCB0byB0aGUgaG9zdC4gVXBvbiBmYWlsdXJlLCBgUFJPUF9MQVNUX1NUQVRVU2AgaXMgZW1pdHRlZCB3aXRoCit0aGUgYXBwcm9wcmlhdGUgZXJyb3IgaW5kaWNhdGlvbi4KKworRHVlIHRvIHRoZSBsb3ctbGV2ZWwgbmF0dXJlIG9mIHRoaXMgY29tbWFuZCwgY2VydGFpbiBlcnJvciBjb25kaXRpb25zCittYXkgaW5kdWNlIHRoZSBOQ1AgdG8gcmVzZXQuCisKK1RoZSBOQ1AgTUFZIHByZXZlbnQgY2VydGFpbiByZWdpb25zIG9mIG1lbW9yeSBmcm9tIGJlaW5nIGFjY2Vzc2VkLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCitTZWUgKCNzZWN1cml0eS1jb25zaWRlcmF0aW9ucykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSBgQ0FQX1BFRUtfUE9LRWAgdG8gYmUgcHJlc2VudC4KKworIyMgQ01EIDE5OiAoTkNQLT5Ib3N0KSBDTURfUEVFS19SRVQgeyNjbWQtcGVlay1yZXR9CisKK09jdGV0czogfCAgICAxICAgfCAgICAgMSAgICAgICAgfCAgICA0ICAgIHwgMiAgICAgfCAqbioKKy0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUEVFS19SRVQgfCBBRERSRVNTIHwgQ09VTlQgfCBCWVRFUworCitUaGlzIGNvbW1hbmQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSB0aGF0IHdhcyByZXF1ZXN0ZWQgYnkKK2EgcHJldmlvdXMgY2FsbCB0byBgQ01EX1BFRUtgLgorCitUaGlzIGNvbW1hbmQgcmVxdWlyZXMgdGhlIGNhcGFiaWxpdHkgYENBUF9QRUVLX1BPS0VgIHRvIGJlIHByZXNlbnQuCisKKyMjIENNRCAyMDogKEhvc3QtPk5DUCkgQ01EX1BPS0UgeyNjbWQtcG9rZX0KKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAxICAgIHwgICAgNCAgICB8IDIgICAgIHwgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KK0ZpZWxkczogfCBIRUFERVIgfCBDTURfUE9LRSB8IEFERFJFU1MgfCBDT1VOVCB8IEJZVEVTCisKK1RoaXMgY29tbWFuZCB3cml0ZXMgdGhlIGJ5dGVzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGFkZHJlc3MKK2ZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisKK0R1ZSB0byB0aGUgbG93LWxldmVsIG5hdHVyZSBvZiB0aGlzIGNvbW1hbmQsIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucworbWF5IGluZHVjZSB0aGUgTkNQIHRvIHJlc2V0LgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjb21tYW5kIGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCitTZWUgKCNzZWN1cml0eS1jb25zaWRlcmF0aW9ucykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoaXMgY29tbWFuZCByZXF1aXJlcyB0aGUgY2FwYWJpbGl0eSBgQ0FQX1BFRUtfUE9LRWAgdG8gYmUgcHJlc2VudC4KKworIyMgQ01EIDIxOiAoSG9zdC0+TkNQKSBDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVQgeyNjbWQtcHJvcC12YWx1ZS1tdWx0aS1nZXR9CisKKyogICBBcmd1bWVudC1FbmNvZGluZzogYEEoaSlgCisqICAgUmVxdWlyZWQgQ2FwYWJpbGl0eTogYENBUF9DTURfTVVMVElgCisKK0ZldGNoIHRoZSB2YWx1ZSBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIG9uZSBjb21tYW5kLiBBcmd1bWVudHMgYXJlCithbiBhcnJheSBvZiBwcm9wZXJ0eSBJRHMuIElmIGFsbCBwcm9wZXJ0aWVzIGFyZSBmZXRjaGVkIHN1Y2Nlc3NmdWxseSwKK2EgYENNRF9QUk9QX1ZBTFVFU19BUkVgIGNvbW1hbmQgaXMgc2VudCBiYWNrIHRvIHRoZSBob3N0IGNvbnRhaW5pbmcKK3RoZSBwcm9wZXJ0eWlkIGFuZCB2YWx1ZSBvZiBlYWNoIGZldGNoZWQgcHJvcGVydHkuIFRoZSBvcmRlciBvZiB0aGUKK3Jlc3VsdHMgaW4gYENNRF9QUk9QX1ZBTFVFU19BUkVgIG1hdGNoIHRoZSBvcmRlciBvZiBwcm9wZXJ0aWVzIGdpdmVuCitpbiBgQ01EX1BST1BfVkFMVUVfR0VUYC4KKworRXJyb3JzIGZldGNoaW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyBhcmUgcmVmbGVjdGVkIGFzIGluZGljYXRpbmcgYQorY2hhbmdlIHRvIGBQUk9QX0xBU1RfU1RBVFVTYCBmb3IgdGhhdCBwcm9wZXJ0eSdzIHBsYWNlLgorCitOb3QgYWxsIHByb3BlcnRpZXMgY2FuIGJlIGZldGNoZWQgdXNpbmcgdGhpcyBtZXRob2QuIEFzIGEgZ2VuZXJhbCBydWxlCitvZiB0aHVtYiwgYW55IHByb3BlcnR5IHRoYXQgYmxvY2tzIHdoZW4gZ2V0dGluZyB3aWxsIGZhaWwgZm9yIHRoYXQKK2luZGl2aWR1YWwgcHJvcGVydHkgd2l0aCBgU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUGAuCisKKyMjIENNRCAyMjogKEhvc3QtPk5DUCkgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIHsjY21kLXByb3AtdmFsdWUtbXVsdGktc2V0fQorCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBBKGlEKWAKKyogICBSZXF1aXJlZCBDYXBhYmlsaXR5OiBgQ0FQX0NNRF9NVUxUSWAKKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgICAgIDEgICAgICAgICAgICAgICB8ICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUIHwgUHJvcGVydHkvVmFsdWUgUGFpcnMKKworV2l0aCBlYWNoIHByb3BlcnR5L3ZhbHVlIHBhaXIgYmVpbmc6CisKK09jdGV0czogfCAgICAyICAgfCAgIDEtMyAgIHwgICpuKgorLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IExFTkdUSCB8IFBST1BfSUQgfCBQUk9QX1ZBTFVFCisKK1RoaXMgY29tbWFuZCBzZXRzIHRoZSB2YWx1ZSBvZiBzZXZlcmFsIHByb3BlcnRpZXMgYXQgb25jZSBpbiB0aGUgZ2l2ZW4KK29yZGVyLiBUaGUgc2V0dGluZyBvZiBwcm9wZXJ0aWVzIHN0b3BzIGF0IHRoZSBmaXJzdCBlcnJvciwgaWdub3JpbmcKK2FueSBsYXRlciBwcm9wZXJ0aWVzLgorCitUaGUgcmVzdWx0IG9mIHRoaXMgY29tbWFuZCBpcyBnZW5lcmFsbHkgYENNRF9QUk9QX1ZBTFVFU19BUkVgIHVubGVzcworKGZvciBleGFtcGxlKSBhIHBhcnNpbmcgZXJyb3IgaGFzIG9jY3VyZWQgKGluIHdoaWNoIGNhc2UKK2BDTURfUFJPUF9WQUxVRV9JU2AgZm9yIGBQUk9QX0xBU1RfU1RBVFVTYCB3b3VsZCBiZSB0aGUgcmVzdWx0KS4gVGhlCitvcmRlciBvZiB0aGUgcmVzdWx0cyBpbiBgQ01EX1BST1BfVkFMVUVTX0FSRWAgbWF0Y2ggdGhlIG9yZGVyIG9mCitwcm9wZXJ0aWVzIGdpdmVuIGluIGBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVRgLgorCitTaW5jZSB0aGUgcHJvY2Vzc2luZyBvZiBwcm9wZXJ0aWVzIHRvIHNldCBzdG9wcyBhdCB0aGUgZmlyc3QgZXJyb3IsCit0aGUgcmVzdWx0aW5nIGBDTURfUFJPUF9WQUxVRVNfQVJFYCBjYW4gY29udGFpbiBmZXdlciBpdGVtcyB0aGFuIHRoZQorcmVxdWVzdGVkIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRvIHNldC4KKworTm90IGFsbCBwcm9wZXJ0aWVzIGNhbiBiZSBzZXQgdXNpbmcgdGhpcyBtZXRob2QuIEFzIGEgZ2VuZXJhbCBydWxlCitvZiB0aHVtYiwgYW55IHByb3BlcnR5IHRoYXQgYmxvY2tzIHdoZW4gc2V0dGluZyB3aWxsIGZhaWwgZm9yIHRoYXQKK2luZGl2aWR1YWwgcHJvcGVydHkgd2l0aCBgU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUGAuCisKKyMjIENNRCAyMzogKE5DUC0+SG9zdCkgQ01EX1BST1BfVkFMVUVTX0FSRSB7I2NtZC1wcm9wLXZhbHVlcy1hcmV9CisKKyogICBBcmd1bWVudC1FbmNvZGluZzogYEEoaUQpYAorKiAgIFJlcXVpcmVkIENhcGFiaWxpdHk6IGBDQVBfQ01EX01VTFRJYAorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAgICAgMSAgICAgICAgICB8ICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9QUk9QX1ZBTFVFU19BUkUgfCBQcm9wZXJ0eS9WYWx1ZSBQYWlycworCitXaXRoIGVhY2ggcHJvcGVydHkvdmFsdWUgcGFpciBiZWluZzoKKworT2N0ZXRzOiB8ICAgIDIgICB8ICAgMS0zICAgfCAgKm4qCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgTEVOR1RIIHwgUFJPUF9JRCB8IFBST1BfVkFMVUUKKworVGhpcyBjb21tYW5kIGlzIGVtaXR0ZWQgYnkgdGhlIE5DUCBhcyB0aGUgcmVzcG9uc2UgdG8gYm90aCB0aGUKK2BDTURfUFJPUF9WQUxVRV9NVUxUSV9HRVRgIGFuZCBgQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUYCBjb21tYW5kcy4gSXQKK2lzIHJvdWdobHkgYW5hbG9nb3VzIHRvIGBDTURfUFJPUF9WQUxVRV9JU2AsIGV4Y2VwdCB0aGF0IGl0IGNvbnRhaW5zCittb3JlIHRoYW4gb25lIHByb3BlcnR5LgorCitUaGlzIGNvbW1hbmQgU0hPVUxEIE5PVCBiZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5LCBvciBpbiByZXNwb25zZSB0bworYW55IGNvbW1hbmQgb3RoZXIgdGhhbiBgQ01EX1BST1BfVkFMVUVfTVVMVElfR0VUYCBvcgorYENNRF9QUk9QX1ZBTFVFX01VTFRJX1NFVGAuCisKK1RoZSBhcmd1bWVudHMgYXJlIGEgbGlzdCBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGVtaXR0ZWQgcHJvcGVydHkKK2FuZCB0aGUgYXNzb2NpYXRlZCB2YWx1ZS4gVGhlc2UgYXJlIHByZXNlbnRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcworZ2l2ZW4gaW4gdGhlIGFzc29jaWF0ZWQgaW5pdGlhdGluZyBjb21tYW5kLiBJbiBjYXNlcyB3aGVyZSBnZXR0aW5nIG9yCitzZXR0aW5nIGEgc3BlY2lmaWMgcHJvcGVydHkgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHRoZSBhc3NvY2lhdGVkIHNsb3QKK2luIHRoaXMgY29tbWFuZCB3aWxsIGRlc2NyaWJlIGBQUk9QX0xBU1RfU1RBVFVTYC4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1kYXRhLXBhY2tpbmcubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZGF0YS1wYWNraW5nLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZGF0YS1wYWNraW5nLm1kCkBAIC0wLDAgKzEsMTY3IEBACisjIERhdGEgUGFja2luZworCitEYXRhIHNlcmlhbGl6YXRpb24gZm9yIHByb3BlcnRpZXMgaXMgcGVyZm9ybWVkIHVzaW5nIGEgbGlnaHQtd2VpZ2h0CitkYXRhIHBhY2tpbmcgZm9ybWF0IHdoaWNoIHdhcyBsb29zZWx5IGluc3BpcmVkIGJ5IEQtQnVzLiBUaGUgZm9ybWF0IG9mCithIHNlcmlhbGl6YXRpb24gaXMgZGVmaW5lZCBieSBhIHNwZWNpYWxseSBmb3JtYXR0ZWQgc3RyaW5nLgorCitUaGlzIHBhY2tpbmcgZm9ybWF0IGlzIHVzZWQgZm9yIG5vdGF0aW9uYWwgY29udmVuaWVuY2UuIFdoaWxlIHRoaXMKK3N0cmluZy1iYXNlZCBkYXRhdHlwZSBmb3JtYXQgaGFzIGJlZW4gZGVzaWduZWQgc28gdGhhdCB0aGUgc3RyaW5ncyBtYXkKK2JlIGRpcmVjdGx5IHVzZWQgYnkgYSBzdHJ1Y3R1cmVkIGRhdGEgcGFyc2VyLCBzdWNoIGEgdGhpbmcgaXMgbm90CityZXF1aXJlZCB0byBpbXBsZW1lbnQgU3BpbmVsLiBJbmRlZWQsIGhpZ2x5IGNvbnN0cmFpbmVkIGFwcGxpY2F0aW9ucworbWF5IGZpbmQgc3VjaCBhIHRoaW5nIHRvIGJlIHRvbyBoZWF2eXdlaWdodC4KKworR29hbHM6CisKKyAqICBCZSBsaWdodHdlaWdodCBhbmQgZmF2b3IgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlcy4KKyAqICBVc2UgYW4gZWFzaWx5IHJlYWRhYmxlIGFuZCBtZW1vcmFibGUgZm9ybWF0IHN0cmluZy4KKyAqICBTdXBwb3J0IGxpc3RzIGFuZCBzdHJ1Y3R1cmVzLgorICogIEFsbG93IHByb3BlcnRpZXMgdG8gYmUgYXBwZW5kZWQgdG8gc3RydWN0dXJlcyB3aGlsZSBtYWludGFpbmluZworICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK0VhY2ggcHJpbWl0aXZlIGRhdGF0eXBlIGhhcyBhbiBBU0NJSSBjaGFyYWN0ZXIgYXNzb2NpYXRlZCB3aXRoIGl0LgorU3RydWN0dXJlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgc3RyaW5ncyBvZiB0aGVzZSBjaGFyYWN0ZXJzLiBGb3IKK2V4YW1wbGU6CisKKyAqICBgQ2A6IEEgc2luZ2xlIHVuc2lnbmVkIGJ5dGUuCisgKiAgYEM2VWA6IEEgc2luZ2xlIHVuc2lnbmVkIGJ5dGUsIGZvbGxvd2VkIGJ5IGEgMTI4LWJpdCBJUHY2CisgICAgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSB6ZXJvLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcuCisgKiAgYEEoNilgOiBBbiBhcnJheSBvZiBjb25jYXRlbmF0ZWQgSVB2NiBhZGRyZXNzZXMKKworSW4gZWFjaCBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBleGFjdGx5IGFzIGRlc2NyaWJlZC4gRm9yCitleGFtcGxlLCBhbiBhcnJheSBvZiAxMCBJUHY2IGFkZHJlc3MgaXMgc3RvcmVkIGFzIDE2MCBieXRlcy4KKworIyMgUHJpbWl0aXZlIFR5cGVzCisKK0NoYXIgfCBOYW1lICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24KKy0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYC5gIHwgREFUQVRZUEVfVk9JRCAgICAgICAgfCBFbXB0eSBkYXRhIHR5cGUuIFVzZWQgaW50ZXJuYWxseS4KKyBgYmAgfCBEQVRBVFlQRV9CT09MICAgICAgICB8IEJvb2xlYW4gdmFsdWUuIEVuY29kZWQgaW4gOC1iaXRzIGFzIGVpdGhlciAweDAwIG9yIDB4MDEuIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGlsbGVnYWwuCisgYENgIHwgREFUQVRZUEVfVUlOVDggICAgICAgfCBVbnNpZ25lZCA4LWJpdCBpbnRlZ2VyLgorIGBjYCB8IERBVEFUWVBFX0lOVDggICAgICAgIHwgU2lnbmVkIDgtYml0IGludGVnZXIuCisgYFNgIHwgREFUQVRZUEVfVUlOVDE2ICAgICAgfCBVbnNpZ25lZCAxNi1iaXQgaW50ZWdlci4KKyBgc2AgfCBEQVRBVFlQRV9JTlQxNiAgICAgICB8IFNpZ25lZCAxNi1iaXQgaW50ZWdlci4KKyBgTGAgfCBEQVRBVFlQRV9VSU5UMzIgICAgICB8IFVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorIGBsYCB8IERBVEFUWVBFX0lOVDMyICAgICAgIHwgU2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorIGBpYCB8IERBVEFUWVBFX1VJTlRfUEFDS0VEIHwgUGFja2VkIFVuc2lnbmVkIEludGVnZXIuIFNlZSAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKS4KKyBgNmAgfCBEQVRBVFlQRV9JUHY2QUREUiAgICB8IElQdjYgQWRkcmVzcy4gKEJpZy1lbmRpYW4pCisgYEVgIHwgREFUQVRZUEVfRVVJNjQgICAgICAgfCBFVUktNjQgQWRkcmVzcy4gKEJpZy1lbmRpYW4pCisgYGVgIHwgREFUQVRZUEVfRVVJNDggICAgICAgfCBFVUktNDggQWRkcmVzcy4gKEJpZy1lbmRpYW4pCisgYERgIHwgREFUQVRZUEVfREFUQSAgICAgICAgfCBBcmJpdHJhcnkgZGF0YS4gU2VlICgjZGF0YS1ibG9icykuCisgYGRgIHwgREFUQVRZUEVfREFUQV9XTEVOICAgfCBBcmJpdHJhcnkgZGF0YSB3aXRoIHByZXBlbmRlZCBsZW5ndGguIFNlZSAoI2RhdGEtYmxvYnMpLgorIGBVYCB8IERBVEFUWVBFX1VURjggICAgICAgIHwgWmVyby10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcuCisgYHQoLi4uKWAgfCBEQVRBVFlQRV9TVFJVQ1QgfCBTdHJ1Y3R1cmVkIGRhdGF0eXBlIHdpdGggcHJlcGVuZGVkIGxlbmd0aC4gU2VlICgjc3RydWN0dXJlZC1kYXRhKS4KKyBgQSguLi4pYCB8IERBVEFUWVBFX0FSUkFZICB8IEFycmF5IG9mIGRhdGF0eXBlcy4gQ29tcG91bmQgdHlwZS4gU2VlICgjYXJyYXlzKS4KKworQWxsIG11bHRpLWJ5dGUgdmFsdWVzIGFyZSBsaXR0bGUtZW5kaWFuIHVubGVzcyBleHBsaWNpdGx5IHN0YXRlZAorb3RoZXJ3aXNlLgorCisjIyBQYWNrZWQgVW5zaWduZWQgSW50ZWdlcgorCitGb3IgY2VydGFpbiB0eXBlcyBvZiBpbnRlZ2Vycywgc3VjaCBjb21tYW5kIG9yIHByb3BlcnR5IGlkZW50aWZpZXJzLAordXN1YWxseSBoYXZlIGEgdmFsdWUgb24gdGhlIHdpcmUgdGhhdCBpcyBsZXNzIHRoYW4gMTI3LiBIb3dldmVyLCBpbgorb3JkZXIgdG8gbm90IHByZWNsdWRlIHRoZSB1c2Ugb2YgdmFsdWVzIGxhcmdlciB0aGFuIDI1NSwgd2Ugd291bGQgbmVlZAordG8gYWRkIGFuIGV4dHJhIGJ5dGUuIERvaW5nIHRoaXMgd291bGQgYWRkIGFuIGV4dHJhIGJ5dGUgdG8gdGhlCittYWpvcml0eSBvZiBpbnN0YW5jZXMsIHdoaWNoIGNhbiBhZGQgdXAgaW4gdGVybXMgb2YgYmFuZHdpZHRoLgorCitUaGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGlzIGJhc2VkIG9uIHRoZSBbdW5zaWduZWQgaW50ZWdlcgorZm9ybWF0IGluIEVYSV1bRVhJXSwgZXhjZXB0IHRoYXQgd2UgbGltaXQgdGhlIG1heGltdW0gdmFsdWUgdG8gdGhlCitsYXJnZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGVuY29kZWQgaW50byB0aHJlZSBieXRlcygyLDA5NywxNTEpLgorCitbRVhJXTogaHR0cHM6Ly93d3cudzMub3JnL1RSL2V4aS8jZW5jb2RpbmdVbnNpZ25lZEludGVnZXIKKworRm9yIGFsbCB2YWx1ZXMgbGVzcyB0aGFuIDEyNywgdGhlIHBhY2tlZCBmb3JtIG9mIHRoZSBudW1iZXIgaXMgc2ltcGx5CithIHNpbmdsZSBieXRlIHdoaWNoIGRpcmVjdGx5IHJlcHJlc2VudHMgdGhlIG51bWJlci4gRm9yIHZhbHVlcyBsYXJnZXIKK3RoYW4gMTI3LCB0aGUgZm9sbG93aW5nIHByb2Nlc3MgaXMgdXNlZCB0byBlbmNvZGUgdGhlIHZhbHVlOgorCisxLiAgVGhlIHVuc2lnbmVkIGludGVnZXIgaXMgYnJva2VuIHVwIGludG8gKm4qIDctYml0IGNodW5rcyBhbmQgcGxhY2VkCisgICAgaW50byAqbiogb2N0ZXRzLCBsZWF2aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBlYWNoIG9jdGV0CisgICAgdW51c2VkLgorMi4gIE9yZGVyIHRoZSBvY3RldHMgZnJvbSBsZWFzdC1zaWduaWZpY2FudCB0byBtb3N0LXNpZ25pZmljYW50LgorICAgIChMaXR0bGUtZW5kaWFuKQorMy4gIENsZWFyIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBvY3RldC4gU2V0CisgICAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvbiBhbGwgb3RoZXIgb2N0ZXRzLgorCitXaGVyZSAqbiogaXMgdGhlIHNtYWxsZXN0IG51bWJlciBvZiA3LWJpdCBjaHVua3MgeW91IGNhbiB1c2UgdG8KK3JlcHJlc2VudCB0aGUgZ2l2ZW4gdmFsdWUuCisKK1Rha2UgdGhlIHZhbHVlIDEzMzcsIGZvciBleGFtcGxlOgorCisgICAgMTMzNyA9PiAweDA1MzkKKyAgICAgICAgID0+IFszOSAwQV0KKyAgICAgICAgID0+IFtCOSAwQV0KKworVG8gZGVjb2RlIHRoZSB2YWx1ZSwgeW91IGNvbGxlY3QgdGhlIDctYml0IGNodW5rcyB1bnRpbCB5b3UgZmluZCBhbgorb2N0ZXQgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY2xlYXIuCisKKyMjIERhdGEgQmxvYnMKKworVGhlcmUgYXJlIHR3byB0eXBlcyBmb3IgZGF0YSBibG9iczogYGRgIGFuZCBgRGAuCisKKyogICBgZGAgaGFzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKGluIGJ5dGVzKSBwcmVwZW5kZWQgdG8gdGhlIGRhdGEKKyAgICAod2l0aCB0aGUgbGVuZ3RoIGVuY29kZWQgYXMgdHlwZSBgU2ApLiBUaGUgc2l6ZSBvZiB0aGUgbGVuZ3RoCisgICAgZmllbGQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsZW5ndGguCisqICAgYERgIGRvZXMgbm90IGhhdmUgYSBwcmVwZW5kZWQgbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGlzCisgICAgaW1wbGllZCBieSB0aGUgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHBhcnNlZC4gSXQgaXMgYW4gZXJyb3IgZm9yCisgICAgYERgIHRvIG5vdCBiZSB0aGUgbGFzdCB0eXBlIGluIGEgdHlwZSBpbiBhIHR5cGUgc2lnbmF0dXJlLgorCitUaGlzIGRpY2hvdG9teSBhbGxvd3MgZm9yIG1vcmUgZWZmaWNpZW50IGVuY29kaW5nIGJ5IGVsaW1pbmF0aW5nCityZWR1bmRlbmN5LiBJZiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIGlzIGEgZGF0YSBibG9iLCBlbmNvZGluZyB0aGUKK2xlbmd0aCB3b3VsZCBiZSByZWR1bmRhbnQgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlCitpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLgorCitJbiBzb21lIGNhc2VzIHdlIHVzZSBgZGAgZXZlbiBpZiBpdCBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIHR5cGUgc2lnbmF0dXJlLgorV2UgZG8gdGhpcyB0byBhbGxvdyBmb3IgdXMgdG8gYmUgYWJsZSB0byBhcHBlbmQgYWRkaXRpb25hbCBmaWVsZHMKK3RvIHRoZSB0eXBlIHNpZ25hdHVyZSBpZiBuZWNlc3NhcnkgaW4gdGhlIGZ1dHVyZS4gVGhpcyBpcyB1c3VhbGx5IHRoZQorY2FzZSB3aXRoIGVtYmVkZGVkIHN0cnVjdHMsIGxpa2UgaW4gdGhlIHNjYW4gcmVzdWx0cy4KKworRm9yIGV4YW1wbGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgYnVmZmVyIHRoYXQgaXMgZW5jb2RlZCB3aXRoIHRoZQorZGF0YXR5cGUgc2lnbmF0dXJlIG9mIGBDTExEYC4gSW4gdGhpcyBjYXNlLCBpdCBpcyBwcmV0dHkgZWFzeSB0byB0ZWxsCit3aGVyZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZGF0YSBibG9iIGlzOiB0aGUgc3RhcnQgaXMgOSBieXRlcyBmcm9tCit0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIGl0cyBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyCittaW51cyA5LiAoOSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRha2VuIHVwIGJ5IGEgYnl0ZSBhbmQgdHdvIGxvbmdzKQorCitUaGUgZGF0YXR5cGUgc2lnbmF0dXJlIGBDTExEVWAgaXMgaWxsZWdhbCBiZWNhdXNlIHdlIGNhbid0IGRldGVybWluZQord2hlcmUgdGhlIGxhc3QgZmllbGQgKGEgemVyby10ZXJtaW5hdGVkIFVURjggc3RyaW5nKSBzdGFydHMuIEJ1dCB0aGUKK2RhdGF0eXBlIGBDTExkVWAgKmlzKiBsZWdhbCwgYmVjYXVzZSB0aGUgcGFyc2VyIGNhbiBkZXRlcm1pbmUgdGhlCitleGFjdCBsZW5ndGggb2YgdGhlIGRhdGEgYmxvYi0tIGFsbG93aW5nIGl0IHRvIGtub3cgd2hlcmUgdGhlIHN0YXJ0CitvZiB0aGUgbmV4dCBmaWVsZCB3b3VsZCBiZS4KKworIyMgU3RydWN0dXJlZCBEYXRhCisKK1RoZSBzdHJ1Y3R1cmUgZGF0YSB0eXBlIChgdCguLi4pYCkgaXMgYSB3YXkgb2YgYnVuZGxpbmcgdG9nZXRoZXIKK3NldmVyYWwgZmllbGRzIGludG8gYSBzaW5nbGUgc3RydWN0dXJlLiBJdCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhCitgZGAgdHlwZSBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIGJlaW5nIG9wYXF1ZSwgdGhlIGZpZWxkcyBpbiB0aGUKK2NvbnRlbnQgYXJlIGtub3duLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhpbmdzIGxpa2Ugc2NhbiByZXN1bHRzIHdoZXJlCit5b3UgaGF2ZSBzdWJzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IGRpZmZlcmVudCBsYXllcnMuCisKK0ZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgdHlwZSBzaWduYXR1cmUgYEx0KEVTKXQoNkMpYC4gSW4gdGhpcworaHlwb3RoZXRpY2FsIGNhc2UsIHRoZSBmaXJzdCBzdHJ1Y3QgaXMgZGVmaW5lZCBieSB0aGUgTUFDIGxheWVyLCBhbmQKK3RoZSBzZWNvbmQgc3RydWN0IGlzIGRlZmluZWQgYnkgdGhlIFBIWSBsYXllci4gQmVjYXVzZSBvZiB0aGUgdXNlIG9mCitzdHJ1Y3R1cmVzLCB3ZSBrbm93IGV4YWN0bHkgd2hhdCBwYXJ0IGNvbWVzIGZyb20gdGhhdCBsYXllci4KK0FkZGl0aW9uYWxseSwgd2UgY2FuIGFkZCBmaWVsZHMgdG8gZWFjaCBzdHJ1Y3R1cmUgd2l0aG91dCBpbnRyb2R1Y2luZworYmFja3dhcmQgY29tcGF0YWJpbGl0eSBwcm9ibGVtczogRGF0YSBlbmNvZGVkIGFzIGBMdChFU1UpdCg2QylgIChOb3RpY2UKK3RoZSBleHRyYSBgVWApIHdpbGwKK2RlY29kZSBqdXN0IGZpbmUgYXMgYEx0KEVTKXQoNkMpYC4gQWRkaXRpb25hbGx5LCBpZiB3ZSBkb24ndCBjYXJlCithYm91dCB0aGUgTUFDIGxheWVyIGFuZCBvbmx5IGNhcmUgYWJvdXQgdGhlIG5ldHdvcmsgbGF5ZXIsIHdlIGNvdWxkCitwYXJzZSBhcyBgTHQoKXQoNkMpYC4KKworTm90ZSB0aGF0IGRhdGEgZW5jb2RlZCBhcyBgTHQoRVMpdCg2QylgIHdpbGwgYWxzbyBwYXJzZSBhcyBgTGRkYCwKK3dpdGggdGhlIHN0cnVjdHVyZXMgZnJvbSBib3RoIGxheWVycyBub3cgYmVpbmcgb3BhcXVlIGRhdGEgYmxvYnMuCisKKyMjIEFycmF5cworCitBbiBhcnJheSBpcyBzaW1wbHkgYSBjb25jYXRlbmF0ZWQgc2V0IG9mICpuKiBkYXRhIGVuY29kaW5ncy4gRm9yIGV4YW1wbGUsCit0aGUgdHlwZSBgQSg2KWAgaXMgc2ltcGx5IGEgbGlzdCBvZiBJUHY2IGFkZHJlc3Nlcy0tLW9uZSBhZnRlciB0aGUgb3RoZXIuCitUaGUgdHlwZSBgQSg2RSlgIGxpa2V3aXNlIGEgY29uY2F0ZW5hdGlvbiBvZiBJUHY2LWFkZHJlc3MvRVVJLTY0IHBhaXJzLgorCitJZiBhbiBhcnJheSBjb250YWlucyBtYW55IGZpZWxkcywgdGhlIGZpZWxkcyB3aWxsIG9mdGVuIGJlIHN1cnJvdW5kZWQKK2J5IGEgc3RydWN0dXJlIChgdCguLi4pYCkuIFRoaXMgZWZmZWN0aXZlbHkgcHJlcGVuZHMgZWFjaCBpdGVtIGluIHRoZQorYXJyYXkgd2l0aCBpdHMgbGVuZ3RoLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wcm92aW5nIHBhcnNpbmcgcGVyZm9ybWFuY2UKK29yIHRvIGFsbG93IGFkZGl0aW9uYWwgZmllbGRzIHRvIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUgaW4gYSBiYWNrd2FyZAorY29tcGF0aWJsZSB3YXkuIElmIHRoZXJlIGlzIGEgaGlnaCBjZXJ0YWludHkgdGhhdCBhZGRpdGlvbmFsCitmaWVsZHMgd2lsbCBuZXZlciBiZSBhZGRlZCwgdGhlIHN0cnVjdCBtYXkgYmUgb21pdHRlZCAoc2F2aW5nIHR3byBieXRlcworcGVyIGl0ZW0pLgorCitUaGlzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZGVmaW5lIGEgd2F5IHRvIGVtYmVkIGFuIGFycmF5IGFzIGEgZmllbGQKK2Fsb25nc2lkZSBvdGhlciBmaWVsZHMuCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWV4YW1wbGUtc2Vzc2lvbnMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0MWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1leGFtcGxlLXNlc3Npb25zLm1kCkBAIC0wLDAgKzEsMjEwIEBACisjIEV4YW1wbGUgU2Vzc2lvbnMKKworIyMgTkNQIEluaXRpYWxpemF0aW9uCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCitDaGVjayB0aGUgcHJvdG9jb2wgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgc3VwcG9ydGVkOgorCisqIENNRF9WQUxVRV9HRVQ6UFJPUF9QUk9UT0NPTF9WRVJTSU9OCisqIENNRF9WQUxVRV9JUzpQUk9QX1BST1RPQ09MX1ZFUlNJT04KKworQ2hlY2sgdGhlIE5DUCB2ZXJzaW9uIHRvIHNlZSBpZiBhIGZpcm13YXJlIHVwZGF0ZSBtYXkgYmUgbmVjZXNzYXJ5OgorCisqIENNRF9WQUxVRV9HRVQ6UFJPUF9OQ1BfVkVSU0lPTgorKiBDTURfVkFMVUVfSVM6UFJPUF9OQ1BfVkVSU0lPTgorCitDaGVjayBpbnRlcmZhY2UgdHlwZSB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyB3aGF0IHdlIGV4cGVjdDoKKworKiBDTURfVkFMVUVfR0VUOlBST1BfSU5URVJGQUNFX1RZUEUKKyogQ01EX1ZBTFVFX0lTOlBST1BfSU5URVJGQUNFX1RZUEUKKworSWYgdGhlIGhvc3Qgc3VwcG9ydHMgdXNpbmcgdmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzLCB0aGUgdmVuZG9yIHNob3VsZAorYmUgdmVyaWZpZWQgYmVmb3JlIHVzaW5nIHRoZW06CisKKyogQ01EX1ZBTFVFX0dFVDpQUk9QX1ZFTkRPUl9JRAorKiBDTURfVkFMVUVfSVM6UFJPUF9WRU5ET1JfSUQKKworRmV0Y2ggdGhlIGNhcGFiaWxpdHkgbGlzdCBzbyB0aGF0IHdlIGtub3cgd2hhdCBmZWF0dXJlcyB0aGlzIE5DUAorc3VwcG9ydHM6CisKKyogQ01EX1ZBTFVFX0dFVDpQUk9QX0NBUFMKKyogQ01EX1ZBTFVFX0lTOlBST1BfQ0FQUworCitJZiB0aGUgTkNQIHN1cHBvcnRzIENBUF9ORVRfU0FWRSwgdGhlbiB3ZSBnbyBhaGVhZCBhbmQgcmVjYWxsIHRoZSBuZXR3b3JrOgorCisqIENNRF9ORVRfUkVDQUxMCisKKyMjIEF0dGFjaGluZyB0byBhIG5ldHdvcmsKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4gLS0+CisKK1dlIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgTkNQIGlzIG5vdCBjdXJyZW50bHkgYXNzb2NpYXRlZAord2l0aCBhIG5ldHdvcmsuCisKK1NldCB0aGUgbmV0d29yayBwcm9wZXJ0aWVzLCBpZiB0aGV5IHdlcmUgbm90IGFscmVhZHkgc2V0OgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9QSFlfQ0hBTgorKiBDTURfVkFMVUVfSVM6UFJPUF9QSFlfQ0hBTgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfWFBBTklECisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9YUEFOSUQKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTUFDXzE1XzRfUEFOSUQKKyogQ01EX1ZBTFVFX0lTOlBST1BfTUFDXzE1XzRfUEFOSUQKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTkVUX05FVFdPUktfTkFNRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfTkVUV09SS19OQU1FCisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9NQVNURVJfS0VZCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9NQVNURVJfS0VZCisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUgorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRQorCitCcmluZyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdXA6CisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9JRl9VUDpUUlVFCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9JRl9VUDpUUlVFCisKK0JyaW5nIHRoZSByb3V0aW5nIHN0YWNrIHVwOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCitTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9ST0xFCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9QQVJUSVRJT05fSUQKKyogQ01EX1ZBTFVFX0lTOlBST1BfVEhSRUFEX09OX01FU0hfTkVUUworCisjIyBTdWNjZXNzZnVsbHkgam9pbmluZyBhIHByZS1leGlzdGluZyBuZXR3b3JrCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCitUaGlzIGV4YW1wbGUgc2Vzc2lvbiBpcyBpZGVudGljYWwgdG8gdGhlIGFib3ZlIHNlc3Npb24gdXAgdG8gdGhlIHBvaW50Cit3aGVyZSB3ZSBzZXQgUFJPUF9ORVRfSUZfVVAgdG8gdHJ1ZS4gRnJvbSB0aGVyZSwgdGhlIGJlaGF2aW9yIGNoYW5nZXMuCisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKworQnJpbmcgdGhlIHJvdXRpbmcgc3RhY2sgdXA6CisKKyogQ01EX1ZBTFVFX1NFVDpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9TVEFDS19VUDpUUlVFCisKK1NvbWUgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9tIHRoZSBOQ1A6CisKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1JPTEUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1BBUlRJVElPTl9JRAorKiBDTURfVkFMVUVfSVM6UFJPUF9USFJFQURfT05fTUVTSF9ORVRTCisKK05vdyBsZXQncyBzYXZlIHRoZSBuZXR3b3JrIHNldHRpbmdzIHRvIE5WUkFNOgorCisqIENNRF9ORVRfU0FWRQorCisjIyBVbnN1Y2Nlc3NmdWxseSBqb2luaW5nIGEgcHJlLWV4aXN0aW5nIG5ldHdvcmsKKworVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHVwIHRvIHRoZSBwb2ludAord2hlcmUgd2Ugc2V0IFBST1BfTkVUX0lGX1VQIHRvIHRydWUuIEZyb20gdGhlcmUsIHRoZSBiZWhhdmlvciBjaGFuZ2VzLgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HOlRSVUUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORzpUUlVFCisKK0JyaW5nIHRoZSByb3V0aW5nIHN0YWNrIHVwOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfU1RBQ0tfVVA6VFJVRQorCitTb21lIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbSB0aGUgTkNQOgorCisqIENNRF9WQUxVRV9JUzpQUk9QX0xBU1RfU1RBVFVTOlNUQVRVU19KT0lOX05PX1BFRVJTCisqIENNRF9WQUxVRV9JUzpQUk9QX05FVF9TVEFDS19VUDpGQUxTRQorCisjIyBEZXRhY2hpbmcgZnJvbSBhIG5ldHdvcmsKKworVEJECisKKyMjIEF0dGFjaGluZyB0byBhIHNhdmVkIG5ldHdvcmsKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyBleGFtcGxlIHNlc3Npb24gaXMgaW5jb21wbGV0ZS4gLS0+CisKK1JlY2FsbCB0aGUgc2F2ZWQgbmV0d29yayBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc286CisKKyogQ01EX05FVF9SRUNBTEwKKworQnJpbmcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVwOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9ORVRfSUZfVVA6VFJVRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfSUZfVVA6VFJVRQorCitCcmluZyB0aGUgcm91dGluZyBzdGFjayB1cDoKKworKiBDTURfVkFMVUVfU0VUOlBST1BfTkVUX1NUQUNLX1VQOlRSVUUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTkVUX1NUQUNLX1VQOlRSVUUKKworU29tZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20gdGhlIE5DUDoKKworKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUk9MRQorKiBDTURfVkFMVUVfSVM6UFJPUF9ORVRfUEFSVElUSU9OX0lECisqIENNRF9WQUxVRV9JUzpQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMKKworIyMgTkNQIFNvZnR3YXJlIFJlc2V0CisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCisqIENNRF9SRVNFVAorKiBDTURfVkFMVUVfSVM6UFJPUF9MQVNUX1NUQVRVUzpTVEFUVVNfUkVTRVRfU09GVFdBUkUKKworVGhlbiBqdW1wIHRvICgjbmNwLWluaXRpYWxpemF0aW9uKS4KKworIyMgQWRkaW5nIGFuIG9uLW1lc2ggcHJlZml4CisKK1RCRAorCisjIyBFbnRlcmluZyBsb3ctcG93ZXIgbW9kZXMKKworVEJECisKKyMjIFNuaWZmaW5nIHJhdyBwYWNrZXRzCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgZXhhbXBsZSBzZXNzaW9uIGlzIGluY29tcGxldGUuIC0tPgorCitUaGlzIGFzc3VtZXMgdGhhdCB0aGUgTkNQIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCitPcHRpb25hbGx5IHNldCB0aGUgY2hhbm5lbDoKKworKiBDTURfVkFMVUVfU0VUOlBST1BfUEhZX0NIQU46eAorKiBDTURfVkFMVUVfSVM6UFJPUF9QSFlfQ0hBTgorCitTZXQgdGhlIGZpbHRlciBtb2RlOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERTpNQUNfUFJPTUlTQ1VPVVNfTU9ERV9NT05JVE9SCisqIENNRF9WQUxVRV9JUzpQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFOk1BQ19QUk9NSVNDVU9VU19NT0RFX01PTklUT1IKKworRW5hYmxlIHRoZSByYXcgc3RyZWFtOgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9NQUNfUkFXX1NUUkVBTV9FTkFCTEVEOlRSVUUKKyogQ01EX1ZBTFVFX0lTOlBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRDpUUlVFCisKK0VuYWJsZSB0aGUgUEhZIGRpcmVjdGx5OgorCisqIENNRF9WQUxVRV9TRVQ6UFJPUF9QSFlfRU5BQkxFRDpUUlVFCisqIENNRF9WQUxVRV9JUzpQUk9QX1BIWV9FTkFCTEVEOlRSVUUKKworTm93IHdlIHdpbGwgZ2V0IHJhdyA4MDIuMTUuNCBwYWNrZXRzIGFzeW5jaHJvbm91c2x5IG9uCitQUk9QX1NUUkVBTV9SQVc6CisKKyogQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKyogQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKyogQ01EX1ZBTFVFX0lTOlBST1BfU1RSRUFNX1JBVzouLi4KKworVGhpcyBtb2RlIG1heSBiZSBlbnRlcmVkIGV2ZW4gd2hlbiBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLgorSW4gdGhhdCBjYXNlLCB5b3Ugc2hvdWxkIHNldCBgUFJPUF9NQUNfUFJPTUlTQ1VPVVNfTU9ERWAgdG8KK2BNQUNfUFJPTUlTQ1VPVVNfTU9ERV9QUk9NSVNDVU9VU2Agb3IgYE1BQ19QUk9NSVNDVU9VU19NT0RFX05PUk1BTGAsIHNvIHRoYXQKK3lvdSBjYW4gYXZvaWQgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBvdGhlciBuZXR3b3JrcyBvciB0aGF0IGFyZSBkZXN0aW5lZAorZm9yIG90aGVyIG5vZGVzLgorCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS1ncGlvLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtZ3Bpby5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNmNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtZ3Bpby5tZApAQCAtMCwwICsxLDExNCBAQAorIyBGZWF0dXJlOiBHUElPIEFjY2VzcyB7I2ZlYXR1cmUtZ3Bpby1hY2Nlc3N9CisKK1RoaXMgZmVhdHVyZSBhbGxvd3MgdGhlIGhvc3QgdG8gaGF2ZSBjb250cm9sIG92ZXIgc29tZSBvciBhbGwgb2YgdGhlCitHUElPIHBpbnMgb24gdGhlIE5DUC4gVGhlIGhvc3QgY2FuIGRldGVybWluZSB3aGljaCBHUElPcyBhcmUgYXZhaWxhYmxlCitieSBleGFtaW5pbmcgYFBST1BfR1BJT19DT05GSUdgLCBkZXNjcmliZWQgYmVsb3cuIFRoaXMgQVBJIHN1cHBvcnRzIGEKK21heGltdW0gb2YgMjU2IGluZGl2aWR1YWwgR1BJTyBwaW5zLgorCitTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIHByZXNlbmNlIG9mIGBDQVBfR1BJT2AuCisKKyMjIFByb3BlcnRpZXMgIyMKKworIyMjIFBST1AgNDA5NjogUFJPUFxfR1BJT1xfQ09ORklHICMjIworCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBBKHQoQ0NVKSlgCisqICAgVHlwZTogUmVhZC13cml0ZSAoV3JpdGFibGUgb25seSB1c2luZyBgQ01EX1BST1BfVkFMVUVfSU5TRVJUYCwKKyAgICAoI2NtZC1wcm9wLXZhbHVlLWluc2VydCkpCisKK0FuIGFycmF5IG9mIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworKiAgIGBDYDogR1BJTyBOdW1iZXIKKyogICBgQ2A6IEdQSU8gQ29uZmlndXJhdGlvbiBGbGFncworKiAgIGBVYDogSHVtYW4tcmVhZGFibGUgR1BJTyBuYW1lCisKK0dQSU9zIHdoaWNoIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbnRyeSBhcmUgbm90IHN1cHBvcnRlZC4KKworVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGZvciB0aGUKK0dQSU86CisKKyAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgfERJUnxQVVB8UEROfFRSSUdHRVJ8ICBSRVNFUlZFRCB8CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgICAgICAgICB8Ty9EfAorICAgICAgICAgICAgKy0tLSsKKworKiAgIGBESVJgOiBQaW4gZGlyZWN0aW9uLiBDbGVhciAoMCkgZm9yIGlucHV0LCBzZXQgKDEpIGZvciBvdXRwdXQuCisqICAgYFBVUGA6IFB1bGwtdXAgZW5hYmxlZCBmbGFnLgorKiAgIGBQRE5gL2BPL0RgOiBGbGFnIG1lYW5pbmcgZGVwZW5kcyBvbiBwaW4gZGlyZWN0aW9uOgorICAgICogICBJbnB1dDogUHVsbC1kb3duIGVuYWJsZWQuCisgICAgKiAgIE91dHB1dDogT3V0cHV0IGlzIGFuIG9wZW4tZHJhaW4uCisqICAgYFRSSUdHRVJgOiBFbnVtZXJhdGlvbiBkZXNjcmliaW5nIGhvdyBwaW4gY2hhbmdlcyBnZW5lcmF0ZQorICAgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gY29tbWFuZHMgKFRCRCkgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LgorICAgICogICAwOiBGZWF0dXJlIGRpc2FibGVkIGZvciB0aGlzIHBpbgorICAgICogICAxOiBUcmlnZ2VyIG9uIGZhbGxpbmcgZWRnZQorICAgICogICAyOiBUcmlnZ2VyIG9uIHJpc2luZyBlZGdlCisgICAgKiAgIDM6IFRyaWdnZXIgb24gbGV2ZWwgY2hhbmdlCisqICAgYFJFU0VSVkVEYDogQml0cyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gQWx3YXlzIGNsZWFyZWQgdG8gemVybworICAgIGFuZCBpZ25vcmVkIHdoZW4gcmVhZC4KKworQXMgYW4gb3B0aW9uYWwgZmVhdHVyZSwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaW5kaXZpZHVhbCBwaW5zIG1heSBiZQorbW9kaWZpZWQgdXNpbmcgdGhlIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRgIGNvbW1hbmQuIE9ubHkgdGhlIEdQSU8KK251bWJlciBhbmQgZmxhZ3MgZmllbGRzIE1VU1QgYmUgcHJlc2VudCwgdGhlIEdQSU8gbmFtZSAoaWYgcHJlc2VudCkKK3dvdWxkIGJlIGlnbm9yZWQuIFRoaXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUKK2NvbmZpZ3VyYXRpb24gb2YgR1BJT3Mgd2hpY2ggYXJlIGFscmVhZHkgZXhwb3NlZC0tLWl0IGNhbm5vdCBiZSB1c2VkCitieSB0aGUgaG9zdCB0byBhZGQgYWRkaW9uYWwgR1BJT3MuCisKKyMjIyBQUk9QIDQwOTg6IFBST1BcX0dQSU9cX1NUQVRFICMjIworCisqICAgVHlwZTogUmVhZC1Xcml0ZQorCitDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zLiBUaGUgbGVuZ3RoIG9mCit0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgcHJvcGVydGllcyBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKK0dQSU9zLiBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuIEdQSU9zIGFyZSBudW1iZXJlZAorZnJvbSBtb3N0IHNpZ25pZmljYW50IGJpdCB0byBsZWFzdCBzaWduaWZpY2FudCBiaXQsIHNvIDB4ODAgaXMgR1BJTyAwLAorMHg0MCBpcyBHUElPIDEsIGV0Yy4KKworRm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgaW5wdXRzOgorCisqICAgYENNRF9QUk9QX1ZBVUVfR0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBkZXNjcmliZXMgdGhlCisgICAgbG9naWMgbGV2ZWwgcmVhZCBmcm9tIHRoZSBwaW4uCisqICAgYENNRF9QUk9QX1ZBTFVFX1NFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaWdub3JlZAorICAgIGZvciB0aGVzZSBwaW5zLgorCitGb3IgR1BJT3MgY29uZmlndXJlZCBhcyBvdXRwdXRzOgorCisqICAgYENNRF9QUk9QX1ZBVUVfR0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBpcworICAgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLgorKiAgIGBDTURfUFJPUF9WQUxVRV9TRVRgOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGRldGVybWluZXMKKyAgICB0aGUgbmV3IGxvZ2ljIGxldmVsIG9mIHRoZSBvdXRwdXQuIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYW4KKyAgICBvcGVuLWRyYWluLCBzZXR0aW5nIHRoZSBhc3NvY2lhdGVkIGJpdCB0byAxIHdpbGwgY2F1c2UgdGhlIHBpbiB0bworICAgIGVudGVyIGEgSGktWiBzdGF0ZS4KKworRm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYDoKKworKiAgIGBDTURfUFJPUF9WQVVFX0dFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMKKyAgICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KKyogICBgQ01EX1BST1BfVkFMVUVfU0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBNVVNUIGJlCisgICAgaWdub3JlZCBieSB0aGUgTkNQLgorCitXaGVuIHdyaXRpbmcsIHVuc3BlY2lmaWVkIGJpdHMgYXJlIGFzc3VtZWQgdG8gYmUgemVyby4KKworIyMjIFBST1AgNDA5OTogUFJPUFxfR1BJT1xfU1RBVEVcX1NFVCAjIyMKKworKiAgIFR5cGU6IFdyaXRlLW9ubHkKKworQWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQKK2FmZmVjdGluZyBvdGhlciBHUElPIHN0YXRlcy4gQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlCitvdXRwdXQgR1BJT3MgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBzdGF0ZSBzZXQgdG8gMS4KKworV2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZgorYW55IGJpdHMgZm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYCBNVVNUCitiZSBpZ25vcmVkLgorCisjIyMgUFJPUCA0MTAwOiBQUk9QXF9HUElPXF9TVEFURVxfQ0xFQVIgIyMjCisKKyogICBUeXBlOiBXcml0ZS1vbmx5CisKK0FsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dAorYWZmZWN0aW5nIG90aGVyIEdQSU8gc3RhdGVzLiBDb250YWlucyBhIGJpdCBmaWVsZCBpZGVudGlmeWluZyB0aGUKK291dHB1dCBHUElPcyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIHN0YXRlIGNsZWFyZWQgdG8gMC4KKworV2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZgorYW55IGJpdHMgZm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYCBNVVNUCitiZSBpZ25vcmVkLgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZC5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ZGZlYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLWhvc3QtYnVmZmVyLW9mZmxvYWQubWQKQEAgLTAsMCArMSw5NSBAQAorIyBGZWF0dXJlOiBIb3N0IEJ1ZmZlciBPZmZsb2FkCisKK1RoZSBtZW1vcnkgb24gYW4gTkNQIG1heSBiZSBtdWNoIG1vcmUgbGltaXRlZCB0aGFuIHRoZSBtZW1vcnkgb24KK3RoZSBob3N0IHByb2Nlc3Nvci4gSW4gc3VjaCBzaXR1YXRpb25zLCBpdCBpcyBzb21ldGltZXMgdXNlZnVsCitmb3IgdGhlIE5DUCB0byBvZmZsb2FkIGJ1ZmZlcnMgdG8gdGhlIGhvc3QgcHJvY2Vzc29yIHRlbXBvcmFyaWx5CitzbyB0aGF0IGl0IGNhbiBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuCisKK0hvc3QgYnVmZmVyIG9mZmxvYWQgaXMgYW4gb3B0aW9uYWwgTkNQIGNhcGFiaWxpdHkgdGhhdCwgd2hlbgorcHJlc2VudCwgYWxsb3dzIHRoZSBOQ1AgdG8gc3RvcmUgZGF0YSBidWZmZXJzIG9uIHRoZSBob3N0IHByb2Nlc3NvcgordGhhdCBjYW4gYmUgcmVjYWxsZWQgYXQgYSBsYXRlciB0aW1lLgorCitUaGUgcHJlc2VuY2Ugb2YgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlY3RlZCBieSB0aGUgaG9zdCBieQorY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYENBUF9IQk9gCitjYXBhYmlsaXR5IGluIGBQUk9QX0NBUFNgLgorCisjIyBDb21tYW5kcworCisjIyMgQ01EIDEyOiAoTkNQLT5Ib3N0KSBDTURfSEJPX09GRkxPQUQKKworKiBBcmd1bWVudC1FbmNvZGluZzogYExzY0RgCisgICAgKiBgT2ZmbG9hZElkYDogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgKiBgRXhwaXJhdGlvbmA6IEluIHNlY29uZHMtZnJvbS1ub3cKKyAgICAqIGBQcmlvcml0eWA6IENyaXRpY2FsLCBIaWdoLCBNZWRpdW0sIExvdworICAgICogYERhdGFgOiBEYXRhIHRvIG9mZmxvYWQKKworIyMjIENNRCAxMzogKE5DUC0+SG9zdCkgQ01EX0hCT19SRUNMQUlNCisgKiAgQXJndW1lbnQtRW5jb2Rpbmc6IGBMYmAKKyAgICAgKiAgYE9mZmxvYWRJZGA6IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcgorICAgICAqICBgS2VlcEFmdGVyUmVjbGFpbWA6IElmIG5vdCBzZXQgdG8gdHJ1ZSwgdGhlIGJsb2NrIHdpbGwgYmUKKyAgICAgICAgZHJvcHBlZCBieSB0aGUgaG9zdCBhZnRlciBpdCBpcyBzZW50IHRvIHRoZSBOQ1AuCisKKyMjIyBDTUQgMTQ6IChOQ1AtPkhvc3QpIENNRF9IQk9fRFJPUAorCisqIEFyZ3VtZW50LUVuY29kaW5nOiBgTGAKKyAgICAqIGBPZmZsb2FkSWRgOiAzMi1iaXQgdW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKKworIyMjIENNRCAxNTogKEhvc3QtPk5DUCkgQ01EX0hCT19PRkZMT0FERUQKKworKiBBcmd1bWVudC1FbmNvZGluZzogYExpYAorICAgICogYE9mZmxvYWRJZGA6IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcgorICAgICogYFN0YXR1c2A6IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKKyMjIyBDTUQgMTY6IChIb3N0LT5OQ1ApIENNRF9IQk9fUkVDTEFJTUVECisKKyogQXJndW1lbnQtRW5jb2Rpbmc6IGBMaURgCisgICAgKiBgT2ZmbG9hZElkYDogMzItYml0IHVuaXF1ZSBibG9jayBpZGVudGlmaWVyCisgICAgKiBgU3RhdHVzYDogU3RhdHVzIGNvZGUgZm9yIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgICAqIGBEYXRhYDogRGF0YSB0aGF0IHdhcyBwcmV2aW91c2x5IG9mZmxvYWRlZCAoaWYgYW55KQorCisjIyMgQ01EIDE3OiAoSG9zdC0+TkNQKSBDTURfSEJPX0RST1BQRUQKKworKiBBcmd1bWVudC1FbmNvZGluZzogYExpYAorICAgICogYE9mZmxvYWRJZGA6IDMyLWJpdCB1bmlxdWUgYmxvY2sgaWRlbnRpZmllcgorICAgICogYFN0YXR1c2A6IFN0YXR1cyBjb2RlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKKyMjIFByb3BlcnRpZXMKKworIyMjIFBST1AgMTA6IFBST1BfSEJPX01FTV9NQVggeyNwcm9wLWhiby1tZW0tbWF4fQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgTGAKKworT2N0ZXRzOiB8ICAgICAgIDQKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgYFBST1BfSEJPX01FTV9NQVhgCisKK0Rlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCBmcm9tIHRoZSBOQ1AgdG8KK3RoZSBob3N0LiBEZWZhdWx0IHZhbHVlIGlzIHplcm8sIHNvIHRoaXMgcHJvcGVydHkgbXVzdCBiZSBzZXQgYnkgdGhlCitob3N0IHRvIGEgbm9uLXplcm8gdmFsdWUgYmVmb3JlIHRoZSBOQ1Agd2lsbCBiZWdpbiBvZmZsb2FkaW5nIGJsb2Nrcy4KKworVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX0hCT2AKK2NhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiBgUFJPUF9DQVBTYC4KKworIyMjIFBST1AgMTE6IFBST1BfSEJPX0JMT0NLX01BWCAgeyNwcm9wLWhiby1ibG9jay1tYXh9CisKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBTYAorCitPY3RldHM6IHwgICAgICAgMgorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBgUFJPUF9IQk9fQkxPQ0tfTUFYYAorCitEZXNjcmliZXMgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIGZyb20gdGhlIE5DUCB0bwordGhlIGhvc3QuIERlZmF1bHQgdmFsdWUgaXMgMzIuIFNldHRpbmcgdGhpcyB2YWx1ZSB0byB6ZXJvIHdpbGwgY2F1c2UKK2hvc3QgYmxvY2sgb2ZmbG9hZCB0byBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KKworVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX0hCT2AKK2NhcGFiaWxpdHkgaXMgcHJlc2VudCBpbiBgUFJPUF9DQVBTYC4KKworCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLWphbS1kZXRlY3QubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS1qYW0tZGV0ZWN0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmE2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS1qYW0tZGV0ZWN0Lm1kCkBAIC0wLDAgKzEsMTAwIEBACisjIEZlYXR1cmU6IEphbSBEZXRlY3Rpb24geyNmZWF0dXJlLWphbS1kZXRlY3R9CisKK0phbW1pbmcgZGV0ZWN0aW9uIGlzIGEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgTkNQIHRvIHJlcG9ydCB3aGVuIGl0CitkZXRlY3RzIGhpZ2ggbGV2ZWxzIG9mIGludGVyZmVyZW5jZSB0aGF0IGFyZSBjaGFyYWN0ZXJpc3RpYyBvZiBpbnRlbnRpb25hbAorc2lnbmFsIGphbW1pbmcuCisKK1RoZSBwcmVzZW5jZSBvZiB0aGlzIGZlYXR1cmUgY2FuIGJlIGRldGVjdGVkIGJ5IGNoZWNraW5nIGZvciB0aGUKK3ByZXNlbmNlIG9mIHRoZSBgQ0FQX0pBTV9ERVRFQ1RgICh2YWx1ZSA2KSBjYXBhYmlsaXR5IGluIGBQUk9QX0NBUFNgLgorCisjIyBQcm9wZXJ0aWVzCisKKyMjIyBQUk9QIDQ2MDg6IFBST1BfSkFNX0RFVEVDVF9FTkFCTEUgeyNwcm9wLWphbS1kZXRlY3QtZW5hYmxlfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKyogRGVmYXVsdCBWYWx1ZTogZmFsc2UKKyogUkVRVUlSRUQgZm9yIGBDQVBfSkFNX0RFVEVDVGAKKworT2N0ZXRzOiB8ICAgICAgIDEKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgYFBST1BfSkFNX0RFVEVDVF9FTkFCTEVgCisKK0luZGljYXRlcyBpZiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBTZXQgdG8gdHJ1ZQordG8gZW5hYmxlIGphbW1pbmcgZGV0ZWN0aW9uLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX0pBTV9ERVRFQ1RgCitjYXBhYmlsaXR5IGlzIHByZXNlbnQgaW4gYFBST1BfQ0FQU2AuCisKKyMjIyBQUk9QIDQ2MDk6IFBST1BfSkFNX0RFVEVDVEVEIHsjcHJvcC1qYW0tZGV0ZWN0ZWR9CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisqIFJFUVVJUkVEIGZvciBgQ0FQX0pBTV9ERVRFQ1RgCisKK09jdGV0czogfCAgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IGBQUk9QX0pBTV9ERVRFQ1RFRGAKKworU2V0IHRvIHRydWUgaWYgcmFkaW8gamFtbWluZyBpcyBkZXRlY3RlZC4gU2V0IHRvIGZhbHNlIG90aGVyd2lzZS4KKworV2hlbiBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkLCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZSBvZiB0aGlzCitwcm9wZXJ0eSBhcmUgZW1pdHRlZCBhc3luY2hyb25vdXNseSB2aWEgYENNRF9QUk9QX1ZBTFVFX0lTYC4KKworVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYENBUF9KQU1fREVURUNUYAorY2FwYWJpbGl0eSBpcyBwcmVzZW50IGluIGBQUk9QX0NBUFNgLgorCisjIyMgUFJPUCA0NjEwOiBQUk9QX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQKKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGNgCisqIFVuaXRzOiBkQm0KKyogRGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyogUkVDT01NRU5ERUQgZm9yIGBDQVBfSkFNX0RFVEVDVGAKKworVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSB0aHJlc2hvbGQgUlNTSSBsZXZlbCAobWVhc3VyZWQgaW4KK2RCbSkgYWJvdmUgd2hpY2ggdGhlIGphbW1pbmcgZGV0ZWN0aW9uIHdpbGwgY29uc2lkZXIgdGhlCitjaGFubmVsIGJsb2NrZWQuCisKKyMjIyBQUk9QIDQ2MTE6IFBST1BfSkFNX0RFVEVDVF9XSU5ET1cKKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGNgCisqIFVuaXRzOiBTZWNvbmRzICgxLTY0KQorKiBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworKiBSRUNPTU1FTkRFRCBmb3IgYENBUF9KQU1fREVURUNUYAorCitUaGlzIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIHdpbmRvdyBwZXJpb2QgZm9yIHNpZ25hbCBqYW1taW5nCitkZXRlY3Rpb24uCisKKyMjIyBQUk9QIDQ2MTI6IFBST1BfSkFNX0RFVEVDVF9CVVNZCisKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBpYAorKiBVbml0czogU2Vjb25kcyAoMS02NCkKKyogRGVmYXVsdCBWYWx1ZTogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyogUkVDT01NRU5ERUQgZm9yIGBDQVBfSkFNX0RFVEVDVGAKKworVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluCit0aGUgZGV0ZWN0aW9uIHdpbmRvdyB3aGVyZSB0aGUgUlNTSSBtdXN0IGJlIGFib3ZlCitgUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEYCB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKworVGhlIGJlaGF2aW9yIG9mIHRoZSBqYW1taW5nIGRldGVjdGlvbiBmZWF0dXJlIHdoZW4gYFBST1BfSkFNX0RFVEVDVF9CVVNZYAoraXMgbGFyZ2VyIHRoYW4gYFBST1BfSkFNX0RFVEVDVF9XSU5ET1dgIGlzIHVuZGVmaW5lZC4KKworIyMjIFBST1AgNDYxMzogUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQCisKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYExMYAorKiBEZWZhdWx0IFZhbHVlOiBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworKiBSRUNPTU1FTkRFRCBmb3IgYENBUF9KQU1fREVURUNUYAorCitUaGlzIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgc3RhdGUgb2YgamFtbWluZyBkZXRlY3Rpb24KK21vZHVsZSBmb3IgbW9uaXRvcmluZy9kZWJ1Z2dpbmcgcHVycG9zZS4gSXQgcmV0dXJucyBhIDY0LWJpdCB2YWx1ZSB3aGVyZQorZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lIHNlY29uZCBpbnRlcnZhbCBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUKK21vc3QgcmVjZW50IGludGVydmFsIGFuZCBiaXQgNjMgZm9yIHRoZSBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuCitUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZSBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgb2JzZXJ2ZWQvZGV0ZWN0ZWQKK2hpZ2ggc2lnbmFsIGxldmVsIGR1cmluZyB0aGUgY29ycmVzcG9uZGluZyBvbmUgc2Vjb25kIGludGVydmFsLgorVGhlIHZhbHVlIGlzIHJlYWQtb25seSBhbmQgaXMgZW5jb2RlZCBhcyB0d28gYExgICh1aW50MzIpIHZhbHVlcyBpbgorbGl0dGxlLWVuZGlhbiBmb3JtYXQgKGZpcnN0IGBMYCAodWludDMyKSB2YWx1ZSBnaXZlcyB0aGUgbG93ZXIgYml0cworY29ycmVzcG9uZGluZyB0byBtb3JlIHJlY2VudCBoaXN0b3J5KS4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLW5ldHdvcmstc2F2ZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjU1YWFjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZlYXR1cmUtbmV0d29yay1zYXZlLm1kCkBAIC0wLDAgKzEsNzQgQEAKKyMgRmVhdHVyZTogTmV0d29yayBTYXZlCisKK1RoZSBuZXR3b3JrIHNhdmUvcmVjYWxsIGZlYXR1cmUgaXMgYW4gb3B0aW9uYWwgTkNQIGNhcGFiaWxpdHkgdGhhdCwgd2hlbgorcHJlc2VudCwgYWxsb3dzIHRoZSBob3N0IHRvIHNhdmUgYW5kIHJlY2FsbCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZAorc3RhdGUgdG8gYW5kIGZyb20gbm9udm9sYXRpbGUgc3RvcmFnZS4KKworVGhlIHByZXNlbmNlIG9mIHRoZSBzYXZlL3JlY2FsbCBmZWF0dXJlIGNhbiBiZSBkZXRlY3RlZCBieSBjaGVja2luZyBmb3IKK3RoZSBwcmVzZW5jZSBvZiB0aGUgYENBUF9ORVRfU0FWRWAgY2FwYWJpbGl0eSBpbiBgUFJPUF9DQVBTYC4KKworTmV0d29yayBjbGVhciBmZWF0dXJlIGFsbG93cyBob3N0IHRvIGVyYXNlIGFsbCBuZXR3b3JrIGNyZWRlbnRpYWxzIGFuZAorc3RhdGUgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorCisjIyBDb21tYW5kcworCisjIyMgQ01EIDk6IChIb3N0LT5OQ1ApIENNRF9ORVRfU0FWRQorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRF9ORVRfU0FWRQorCitTYXZlIG5ldHdvcmsgc3RhdGUgY29tbWFuZC4gU2F2ZXMgYW55IGN1cnJlbnQgbmV0d29yayBjcmVkZW50aWFscyBhbmQKK3N0YXRlIG5lY2Vzc2FyeSB0byByZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnQgbmV0d29yayB0byBub24tdm9sYXRpbGUKK21lbW9yeS4KKworVGhpcyBvcGVyYXRpb24gYWZmZWN0cyBub24tdm9sYXRpbGUgbWVtb3J5IG9ubHkuIFRoZSBjdXJyZW50IG5ldHdvcmsKK2luZm9ybWF0aW9uIHN0b3JlZCBpbiB2b2xhdGlsZSBtZW1vcnkgaXMgdW5hZmZlY3RlZC4KKworVGhlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYSBgQ01EX1BST1BfVkFMVUVfSVNgIGZvcgorYFBST1BfTEFTVF9TVEFUVVNgLCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKworVGhpcyBjb21tYW5kIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgQ0FQX05FVF9TQVZFYCBjYXBhYmlsaXR5IGlzCitzZXQuCisKKyMjIyBDTUQgMTA6IChIb3N0LT5OQ1ApIENNRF9ORVRfQ0xFQVIKKworT2N0ZXRzOiB8ICAgIDEgICB8ICAgICAgMQorLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX05FVF9DTEVBUgorCitDbGVhciBzYXZlZCBuZXR3b3JrIHNldHRpbmdzIGNvbW1hbmQuIEVyYXNlcyBhbGwgbmV0d29yayBjcmVkZW50aWFscworYW5kIHN0YXRlIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4gVGhlIGVyYXNlZCBzZXR0aW5ncyBpbmNsdWRlIGFueSBkYXRhCitzYXZlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZpcm13YXJlIGFuZC9vciBkYXRhIHNhdmVkIGJ5CitgQ01EX05FVF9TQVZFYCBvcGVyYXRpb24uCisKK1RoaXMgb3BlcmF0aW9uIGFmZmVjdHMgbm9uLXZvbGF0aWxlIG1lbW9yeSBvbmx5LiBUaGUgY3VycmVudCBuZXR3b3JrCitpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdm9sYXRpbGUgbWVtb3J5IGlzIHVuYWZmZWN0ZWQuCisKK1RoZSByZXNwb25zZSB0byB0aGlzIGNvbW1hbmQgaXMgYWx3YXlzIGEgYENNRF9QUk9QX1ZBTFVFX0lTYCBmb3IKK2BQUk9QX0xBU1RfU1RBVFVTYCwgaW5kaWNhdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisKK1RoaXMgY29tbWFuZCBpcyBhbHdheXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIHRoZSB2YWx1ZSBvZgorYENBUF9ORVRfU0FWRWAgY2FwYWJpbGl0eS4KKworCisjIyMgQ01EIDExOiAoSG9zdC0+TkNQKSBDTURfTkVUX1JFQ0FMTAorCitPY3RldHM6IHwgICAgMSAgIHwgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgSEVBREVSIHwgQ01EX05FVF9SRUNBTEwKKworUmVjYWxsIHNhdmVkIG5ldHdvcmsgc3RhdGUgY29tbWFuZC4gUmVjYWxscyBhbnkgcHJldmlvdXNseSBzYXZlZAorbmV0d29yayBjcmVkZW50aWFscyBhbmQgc3RhdGUgcHJldmlvdXNseSBzdG9yZWQgYnkgYENNRF9ORVRfU0FWRWAgZnJvbQorbm9uLXZvbGF0aWxlIG1lbW9yeS4KKworVGhpcyBjb21tYW5kIHdpbGwgdHlwaWNhbGx5IGdlbmVyYXRlZCBzZXZlcmFsIHVuc29saWNpdGVkIHByb3BlcnR5Cit1cGRhdGVzIGFzIHRoZSBuZXR3b3JrIHN0YXRlIGlzIGxvYWRlZC4gQXQgdGhlIGNvbmNsdXNpb24gb2YgbG9hZGluZywKK3RoZSBhdXRob3JpdGF0aXZlIHJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCBpcyBhbHdheXMgYQorYENNRF9QUk9QX1ZBTFVFX0lTYCBmb3IgYFBST1BfTEFTVF9TVEFUVVNgLCBpbmRpY2F0aW5nIHRoZSByZXN1bHQgb2YKK3RoZSBvcGVyYXRpb24uCisKK1RoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYENBUF9ORVRfU0FWRWAgY2FwYWJpbGl0eSBpcworc2V0LgorCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mZWF0dXJlLXRybmcubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS10cm5nLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTBiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZmVhdHVyZS10cm5nLm1kCkBAIC0wLDAgKzEsNzcgQEAKKyMgRmVhdHVyZTogVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24geyNmZWF0dXJlLXRybmd9CisKK1RoaXMgZmVhdHVyZSBhbGxvd3MgdGhlIGhvc3QgdG8gaGF2ZSBhY2Nlc3MgdG8gYW55IHN0cm9uZyBoYXJkd2FyZQorcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhhdCBtaWdodCBiZSBwcmVzZW50IG9uIHRoZSBOQ1AsIGZvciB0aGluZ3MKK2xpa2Uga2V5IGdlbmVyYXRpb24gb3Igc2VlZGluZyBQUk5Hcy4KKworU3VwcG9ydCBmb3IgdGhpcyBmZWF0dXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBgQ0FQX1RSTkdgLgorCitOb3RlIHdlbGwgdGhhdCBpbXBsZW1lbnRpbmcgYSBjcnlwdG9ncmFwaGljYWxseS1zdHJvbmcgc29mdHdhcmUtYmFzZWQgdHJ1ZQorcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKHRoYXQgaXMgaW1wZXJ2aW91cyB0byB0aGluZ3MgbGlrZSB0ZW1wZXJhdHVyZQorY2hhbmdlcywgbWFudWZhY3R1cmluZyBkaWZmZXJlbmNlcyBhY3Jvc3MgZGV2aWNlcywgb3IgdW5leHBlY3RlZCBvdXRwdXQKK2NvcnJlbGF0aW9ucykgaXMgbm9uLXRyaXZpYWwgd2l0aG91dCBhIHdlbGwtZGVzaWduZWQsIGRlZGljYXRlZCBoYXJkd2FyZQorcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuIEltcGxlbWVudG9ycyB3aG8gaGF2ZSBsaXR0bGUgb3Igbm8gZXhwZXJpZW5jZSBpbgordGhpcyBhcmVhIGFyZSBlbmNvdXJhZ2VkIHRvIG5vdCBhZHZlcnRpc2UgdGhpcyBjYXBhYmlsaXR5LgorCisjIyBQcm9wZXJ0aWVzICMjCisKKyMjIyBQUk9QIDQxMDE6IFBST1BfVFJOR18zMiAjIyMKKworKiAgIEFyZ3VtZW50LUVuY29kaW5nOiBgTGAKKyogICBUeXBlOiBSZWFkLU9ubHkKKworRmV0Y2hpbmcgdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgc3Ryb25nIHJhbmRvbSAzMi1iaXQgaW50ZWdlciB0aGF0IGlzIHN1aXRhYmxlCitmb3IgdXNlIGFzIGEgUFJORyBzZWVkIG9yIGZvciBjcnlwdG9ncmFwaGljIHVzZS4KKworV2hpbGUgdGhlIGV4YWN0IG1lY2hhbmlzbSBiZWhpbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMKK2ltcGxlbWVudGF0aW9uLXNwZWNpZmljLCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcKK3JlcXVpcmVtZW50czoKKworKiBEYXRhIHJlcHJlc2VudGluZyBhdCBsZWFzdCAzMiBiaXRzIG9mIGZyZXNoIGVudHJvcHkgKGV4dHJhY3RlZCBmcm9tIHRoZQorICBwcmltYXJ5IGVudHJvcHkgc291cmNlKSBNVVNUIGJlIGNvbnN1bWVkIGJ5IHRoZSBjYWxjdWxhdGlvbiBvZiBlYWNoIHF1ZXJ5LgorKiBFYWNoIG9mIHRoZSAzMiBiaXRzIHJldHVybmVkIE1VU1QgYmUgZnJlZSBvZiBiaWFzIGFuZCBoYXZlIG5vIHN0YXRpc3RpY2FsCisgIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYW55CisgIHF1ZXJ5LgorCitTdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmIGBDQVBfVFJOR2AgaXMgaW5jbHVkZWQgaW4gdGhlCitkZXZpY2UgY2FwYWJpbGl0aWVzLgorCisjIyMgUFJPUCA0MTAyOiBQUk9QX1RSTkdfMTI4ICMjIworCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBEYAorKiAgIFR5cGU6IFJlYWQtT25seQorCitGZXRjaGluZyB0aGlzIHByb3BlcnR5IHJldHVybnMgMTYgYnl0ZXMgb2Ygc3Ryb25nIHJhbmRvbSBkYXRhIHN1aXRhYmxlIGZvcgorZGlyZWN0IGNyeXB0b2dyYXBoaWMgdXNlIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nKEZvciBleGFtcGxlLCBhcyBhbgorQUVTIGtleSkuCisKK1doaWxlIHRoZSBleGFjdCBtZWNoYW5pc20gYmVoaW5kIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGlzIHZhbHVlIGlzCitpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYywgdGhlIGltcGxlbWVudGF0aW9uIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nCityZXF1aXJlbWVudHM6CisKKyogRGF0YSByZXByZXNlbnRpbmcgYXQgbGVhc3QgMTI4IGJpdHMgb2YgZnJlc2ggZW50cm9weSAoZXh0cmFjdGVkIGZyb20gdGhlCisgIHByaW1hcnkgZW50cm9weSBzb3VyY2UpIE1VU1QgYmUgY29uc3VtZWQgYnkgdGhlIGNhbGN1bGF0aW9uIG9mIGVhY2ggcXVlcnkuCisqIEVhY2ggb2YgdGhlIDEyOCBiaXRzIHJldHVybmVkIE1VU1QgYmUgZnJlZSBvZiBiaWFzIGFuZCBoYXZlIG5vIHN0YXRpc3RpY2FsCisgIGNvcnJlbGF0aW9uIHRvIGFueSBwYXJ0IG9mIHRoZSByYXcgZGF0YSB1c2VkIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYW55CisgIHF1ZXJ5LgorCitTdXBwb3J0IGZvciB0aGlzIHByb3BlcnR5IGlzIFJFUVVJUkVEIGlmIGBDQVBfVFJOR2AgaXMgaW5jbHVkZWQgaW4gdGhlCitkZXZpY2UgY2FwYWJpbGl0aWVzLgorCisjIyMgUFJPUCA0MTAzOiBQUk9QX1RSTkdfUkFXXzMyICMjIworCisqICAgQXJndW1lbnQtRW5jb2Rpbmc6IGBEYAorKiAgIFR5cGU6IFJlYWQtT25seQorCitUaGlzIHByb3BlcnR5IGlzIHByaW1hcmlseSB1c2VkIHRvIGRpYWdub3NlIGFuZCBkZWJ1ZyB0aGUgYmVoYXZpb3IKK29mIHRoZSBlbnRyb3B5IHNvdXJjZSB1c2VkIGZvciBzdHJvbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLgorCitXaGVuIHF1ZXJpZWQsIHJldHVybnMgdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgZW50cm9weSBzb3VyY2UgdXNlZCB0bworZ2VuZXJhdGUgYFBST1BfVFJOR18zMmAsIHByaW9yIHRvIGFueSByZWR1Y3Rpb24vd2hpdGVuaW5nIGFuZC9vciBtaXhpbmcKK3dpdGggcHJpb3Igc3RhdGUuCisKK1RoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBhbmQgc2hvdWxkIGJlCitleHBlY3RlZCB0byBiZSBub24tZGV0ZXJtaW5pc3RpYy4KKworU3VwcG9ydCBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBSRUNPTU1FTkRFRCBpZiBgQ0FQX1RSTkdgIGlzIGluY2x1ZGVkIGluIHRoZQorZGV2aWNlIGNhcGFiaWxpdGllcy4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mcmFtZS1mb3JtYXQubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZnJhbWUtZm9ybWF0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZjFhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtZnJhbWUtZm9ybWF0Lm1kCkBAIC0wLDAgKzEsODMgQEAKKyMgRnJhbWUgRm9ybWF0ICMjCisKK0EgZnJhbWUgaXMgZGVmaW5lZCBzaW1wbHkgYXMgdGhlIGNvbmNhdGVuYXRpb24gb2YKKworICogIEEgaGVhZGVyIGJ5dGUKKyAqICBBIGNvbW1hbmQgKHVwIHRvIHRocmVlIGJ5dGVzLCBzZWUgKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlcikgZm9yIGZvcm1hdCkKKyAqICBBbiBvcHRpb25hbCBjb21tYW5kIHBheWxvYWQKKworT2N0ZXRzOiB8ICAgIDEgICB8IDEtMyB8ICAgICpuKgorLS0tLS0tLS18LS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhFQURFUiB8IENNRCB8IENNRF9QQVlMT0FECisKKworIyMgSGVhZGVyIEZvcm1hdCAjIyMKKworVGhlIGhlYWRlciBieXRlIGlzIGJyb2tlbiBkb3duIGFzIGZvbGxvd3M6CisKKyAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgfCAgRkxHICB8ICBOTEkgIHwgICAgICBUSUQgICAgICB8CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisKKzwhLS0gUlEgLS0gRXZlbnR1YWxseSwgd2hlbiBodHRwczovL2dpdGh1Yi5jb20vbWlla2cvbW1hcmsvaXNzdWVzLzk1CitpcyBhZGRyZXNzZWQsIHRoZSBhYm92ZSB0YWJsZSBzaG91bGQgYmUgc3dhcHBlZCBvdXQgd2l0aCB0aGlzOgorCit8IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwKK3wtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfAorfCAgRkxHIHx8ICBOTEkgfHwgICAgICBUSUQgICB8fHx8CistLT4KKworIyMjIEZMRzogRmxhZworCitUaGUgZmxhZyBmaWVsZCBvZiB0aGUgaGVhZGVyIGJ5dGUgKGBGTEdgKSBpcyBhbHdheXMgc2V0IHRvIHRoZSB2YWx1ZQordHdvIChvciBgMTBgIGluIGJpbmFyeSkuIEFueSBmcmFtZSByZWNlaXZlZCB3aXRoIHRoZXNlIGJpdHMgc2V0IHRvCithbnkgb3RoZXIgdmFsdWUgZWxzZSBNVVNUIE5PVCBiZSBjb25zaWRlcmVkIGEgU3BpbmVsIGZyYW1lLgorCitUaGlzIGNvbnZlbnRpb24gYWxsb3dzIFNwaW5lbCB0byBiZSBsaW5lIGNvbXBhdGlibGUgd2l0aCBCVExFIEhDSS4gQnkKK2RlZmluaW5nIHRoZSBmaXJzdCB0d28gYml0IGluIHRoaXMgd2F5IHdlIGNhbiBkaXNhbWJpZ3VhdGUgYmV0d2VlbgorU3BpbmVsIGZyYW1lcyBhbmQgSENJIGZyYW1lcyAod2hpY2ggYWx3YXlzIHN0YXJ0IHdpdGggZWl0aGVyIGAweDAxYAorb3IgYDB4MDRgKSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZyYW1pbmcgb3ZlcmhlYWQuCisKKyMjIyBOTEk6IE5ldHdvcmsgTGluayBJZGVudGlmaWVyCisKK1RoZSBOZXR3b3JrIExpbmsgSWRlbnRpZmllciAoTkxJKSBpcyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDMsIHdoaWNoIGlzIGFzc29jaWF0ZWQgYnkgdGhlIE9TIHdpdGggb25lIG9mIHVwIHRvIGZvdXIgSVB2NiB6b25lIGluZGljZXMgY29ycmVzcG9uZGluZyB0byBjb25jZXB0dWFsIElQdjYgaW50ZXJmYWNlcyBvbiB0aGUgTkNQLiBUaGlzIGFsbG93cyB0aGUgcHJvdG9jb2wgdG8gc3VwcG9ydCBJUHY2IG5vZGVzIGNvbm5lY3Rpbmcgc2ltdWx0YW5lb3VzbHkgdG8gbW9yZSB0aGFuIG9uZSBJUHY2IG5ldHdvcmsgbGluayB1c2luZyBhIHNpbmdsZSBOQ1AgaW5zdGFuY2UuIFRoZSBmaXJzdCBOZXR3b3JrIExpbmsgSWRlbnRpZmllciAoMCkgTVVTVCByZWZlciB0byBhIGRpc3Rpbmd1aXNoZWQgY29uY2VwdHVhbCBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIE5DUCBmb3IgaXRzIElQdjYgbGluayB0eXBlLiBUaGUgb3RoZXIgdGhyZWUgTmV0d29yayBMaW5rIElkZW50aWZpZXJzICgxLCAyIGFuZCAzKSBNQVkgYmUgZGlzc29jaWF0ZWQgZnJvbSBhbnkgY29uY2VwdHVhbCBpbnRlcmZhY2UuCisKKyMjIyBUSUQ6IFRyYW5zYWN0aW9uIElkZW50aWZpZXIKKworVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGhlYWRlciByZXByZXNlbnQgdGhlIFRyYW5zYWN0aW9uCitJZGVudGlmaWVyKFRJRCkuIFRoZSBUSUQgaXMgdXNlZCBmb3IgY29ycmVsYXRpbmcgcmVzcG9uc2VzIHRvIHRoZQorY29tbWFuZHMgd2hpY2ggZ2VuZXJhdGVkIHRoZW0uCisKK1doZW4gYSBjb21tYW5kIGlzIHNlbnQgZnJvbSB0aGUgaG9zdCwgYW55IHJlcGx5IHRvIHRoYXQgY29tbWFuZCBzZW50CitieSB0aGUgTkNQIHdpbGwgdXNlIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgVElELiBXaGVuIHRoZSBob3N0IHJlY2VpdmVzCithIGZyYW1lIHRoYXQgbWF0Y2hlcyB0aGUgVElEIG9mIHRoZSBjb21tYW5kIGl0IHNlbnQsIGl0IGNhbiBlYXNpbHkKK3JlY29nbml6ZSB0aGF0IGZyYW1lIGFzIHRoZSBhY3R1YWwgcmVzcG9uc2UgdG8gdGhhdCBjb21tYW5kLgorCitUaGUgVElEIHZhbHVlIG9mIHplcm8gKDApIGlzIHVzZWQgZm9yIGNvbW1hbmRzIHRvIHdoaWNoIGEgY29ycmVsYXRlZAorcmVzcG9uc2UgaXMgbm90IGV4cGVjdGVkIG9yIG5lZWRlZCwgc3VjaCBhcyBmb3IgdW5zb2xpY2l0ZWQgdXBkYXRlCitjb21tYW5kcyBzZW50IHRvIHRoZSBob3N0IGZyb20gdGhlIE5DUC4KKworIyMjIENvbW1hbmQgSWRlbnRpZmllciAoQ01EKSAjIyMjCisKK1RoZSBjb21tYW5kIGlkZW50aWZpZXIgaXMgYSAyMS1iaXQgdW5zaWduZWQgaW50ZWdlciBlbmNvZGVkIGluIHVwIHRvCit0aHJlZSBieXRlcyB1c2luZyB0aGUgcGFja2VkIHVuc2lnbmVkIGludGVnZXIgZm9ybWF0IGRlc2NyaWJlZCBpbgorKCNwYWNrZWQtdW5zaWduZWQtaW50ZWdlcikuIFRoaXMgZW5jb2RpbmcgYWxsb3dzIGZvciB1cCB0byAyLDA5NywxNTIgaW5kaXZpZHVhbAorY29tbWFuZHMsIHdpdGggdGhlIGZpcnN0IDEyNyBjb21tYW5kcyByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBieXRlLgorQ29tbWFuZCBpZGVudGlmaWVycyBsYXJnZXIgdGhhbiAyLDA5NywxNTEgYXJlIGV4cGxpY2l0bHkgZm9yYmlkZGVuLgorCitDSUQgUmFuZ2UgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KKzAgLSA2MyAgICAgICAgICAgICAgICB8IFJlc2VydmVkIGZvciBjb3JlIGNvbW1hbmRzCis2NCAtIDE1LDM1OSAgICAgICAgICAgfCAqVU5BTExPQ0FURUQqCisxNSwzNjAgLSAxNiwzODMgICAgICAgfCBWZW5kb3Itc3BlY2lmaWMKKzE2LDM4NCAtIDEsOTk5LDk5OSAgICB8ICpVTkFMTE9DQVRFRCoKKzIsMDAwLDAwMCAtIDIsMDk3LDE1MSB8IEV4cGVyaW1lbnRhbCB1c2Ugb25seQorCisjIyMgQ29tbWFuZCBQYXlsb2FkIChPcHRpb25hbCkgIyMjIworCitEZXBlbmRpbmcgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgY29tbWFuZCBpbiBxdWVzdGlvbiwgYSBwYXlsb2FkIE1BWQorYmUgaW5jbHVkZWQgaW4gdGhlIGZyYW1lLiBUaGUgZXhhY3QgY29tcG9zaXRpb24gYW5kIGxlbmd0aCBvZiB0aGUKK3BheWxvYWQgaXMgZGVmaW5lZCBieSB0aGUgY29tbWFuZCBpZGVudGlmaWVyLgorCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mcmFtaW5nLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLWZyYW1pbmcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzNTkzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1mcmFtaW5nLm1kCkBAIC0wLDAgKzEsMjIzIEBACisKKyMgRnJhbWluZyBQcm90b2NvbAorCitTaW5jZSB0aGlzIE5DUCBwcm90b2NvbCBpcyBkZWZpbmVkIGluZGVwZW5kZW50bHkgb2YgdGhlIHBoeXNpY2FsCit0cmFuc3BvcnQgb3IgZnJhbWluZywgYW55IG51bWJlciBvZiB0cmFuc3BvcnRzIGFuZCBmcmFtaW5nIHByb3RvY29scworY291bGQgYmUgdXNlZCBzdWNjZXNzZnVsbHkuIEhvd2V2ZXIsIGluIHRoZSBpbnRlcmVzdHMgb2YgY29tcGF0aWJpbGl0eSwKK3RoaXMgZG9jdW1lbnQgcHJvdmlkZXMgc29tZSByZWNvbW1lbmRhdGlvbnMuCisKKyMjIFVBUlQgUmVjb21tZW5kYXRpb25zICMjIworCitUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBVQVJUIHNldHRpbmdzIGFyZToKKworKiBCaXQgcmF0ZTogICAgIDExNTIwMAorKiBTdGFydCBiaXRzOiAgIDEKKyogRGF0YSBiaXRzOiAgICA4CisqIFN0b3AgYml0czogICAgMQorKiBQYXJpdHk6ICAgICAgIE5vbmUKKyogRmxvdyBDb250cm9sOiBIYXJkd2FyZQorCitUaGVzZSB2YWx1ZXMgbWF5IGJlIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgaW5kaXZpZHVhbCBuZWVkcyBvZgordGhlIGFwcGxpY2F0aW9uIG9yIHByb2R1Y3QsIGJ1dCBzb21lIHNvcnQgb2YgZmxvdyBjb250cm9sICoqTVVTVCoqIGJlIHVzZWQuCitIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgcHJlZmVycmVkIG92ZXIgc29mdHdhcmUgZmxvdyBjb250cm9sLiBJbiB0aGUKK2Fic2VuY2Ugb2YgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKFhPTi9YT0ZGKSAqKk1VU1QqKgorYmUgdXNlZCBpbnN0ZWFkLgorCitXZSBhbHNvICoqUkVDT01NRU5EKiogYW4gQXJkdWluby1zdHlsZSBoYXJkd2FyZSByZXNldCwgd2hlcmUgdGhlIERUUgorc2lnbmFsIGlzIGNvdXBsZWQgdG8gdGhlIGBSzIVFzIVTzIVgIHBpbiB0aHJvdWdoIGEgMC4wMcK1RiBjYXBhY2l0b3IuIFRoaXMKK2NhdXNlcyB0aGUgTkNQIHRvIGF1dG9tYXRpY2FsbHkgcmVzZXQgd2hlbmV2ZXIgdGhlIHNlcmlhbCBwb3J0IGlzCitvcGVuZWQuIEF0IHRoZSB2ZXJ5IGxlYXN0IHdlICoqUkVDT01NRU5EKiogZGVkaWNhdGluZyBvbmUgb2YgeW91ciBob3N0CitwaW5zIHRvIGNvbnRyb2xsaW5nIHRoZSBgUsyFRcyFU8yFYCBwaW4gb24gdGhlIE5DUCwgc28gdGhhdCB5b3UgY2FuCitlYXNpbHkgcGVyZm9ybSBhIGhhcmR3YXJlIHJlc2V0IGlmIG5lY2Vzc2FyeS4KKworIyMjIFVBUlQgQml0IFJhdGUgRGV0ZWN0aW9uICMjIworCitXaGVuIHVzaW5nIGEgVUFSVCwgdGhlIGlzc3VlIG9mIGFuIGFwcHJvcHJpYXRlIGJpdCByYXRlIG11c3QgYmUKK2NvbnNpZGVyZWQuIEEgYml0cmF0ZSBvZiAxMTUyMDAgYml0cyBwZXIgc2Vjb25kIGhhcyBiZWNvbWUgYSBkZWZhY3RvCitzdGFuZGFyZCBiYXVkIHJhdGUgZm9yIG1hbnkgc2VyaWFsIHBlcmlwaGVyYWxzLiBUaGlzIHJhdGUsIGhvd2V2ZXIsCitpcyBzbG93ZXIgdGhhbiB0aGUgdGhlb3JldGljYWwgbWF4aW11bSBiaXRyYXRlIG9mIHRoZSA4MDIuMTUuNCAyLjRHSHoKK1BIWSAoMjUwa2JpdCkuIEluIG1vc3QgY2lyY3Vtc3RhbmNlcyB0aGlzIG1pc21hdGNoIGlzIG5vdCBzaWduaWZpY2FudAorYmVjYXVzZSB0aGUgb3ZlcmFsbCBiaXRyYXRlIHdpbGwgYmUgbXVjaCBsb3dlciB0aGFuIGVpdGhlciBvZiB0aGVzZQorcmF0ZXMsIGJ1dCB0aGVyZSBhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBhIGZhc3RlciBVQVJUIGJpdHJhdGUgaXMKK2Rlc2lyYWJsZS4gVGh1cywgdGhpcyBkb2N1bWVudCBwcm9wb3NlcyBhIHNpbXBsZSBiaXRyYXRlIGRldGVjdGlvbgorc2NoZW1lIHRoYXQgY2FuIGJlIGVtcGxveWVkIGJ5IHRoZSBob3N0IHRvIGRldGVjdCB3aGVuIHRoZSBhdHRhY2hlZAorTkNQIGlzIGluaXRpYWxseSBydW5uaW5nIGF0IGEgaGlnaGVyIGJpdHJhdGUuCisKK1RoZSBhbGdvcml0aG0gaXMgdG8gc2VuZCBzdWNjZXNzaXZlIE5PT1AgY29tbWFuZHMgdG8gdGhlIE5DUCBhdCBpbmNyZWFzaW5nCitiaXRyYXRlcy4gV2hlbiBhIHZhbGlkIGBDTURfTEFTVF9TVEFUVVNgIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLCB3ZQoraGF2ZSBpZGVudGlmaWVkIHRoZSBjb3JyZWN0IGJpdHJhdGUuCisKK0luIG9yZGVyIHRvIGxpbWl0IHRoZSB0aW1lIHNwZW50IGh1bnRpbmcgZm9yIHRoZSBhcHByb3ByaWF0ZSBiaXRyYXRlLAord2UgUkVDT01NRU5EIHRoYXQgb25seSB0aGUgZm9sbG93aW5nIGJpdHJhdGVzIGJlIGNoZWNrZWQ6CisKKyogMTE1MjAwCisqIDIzMDQwMAorKiAxMDAwMDAwICgxTWJpdCkKKworVGhlIGJpdHJhdGUgTUFZIGFsc28gYmUgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IGJ5IGFkanVzdGluZworYFBST1BfVUFSVF9CSVRSQVRFYCwgaWYgaW1wbGVtZW50ZWQuCisKKyMjIyBIRExDLUxpdGUgeyNoZGxjLWxpdGV9CisKKypIRExDLUxpdGUqIGlzIHRoZSByZWNvbW1lbmRlZCBmcmFtaW5nIHByb3RvY29sIGZvciB0cmFuc21pdHRpbmcKK1NwaW5lbCBmcmFtZXMgb3ZlciBhIFVBUlQuIEhETEMtTGl0ZSBjb25zaXN0cyBvZiBvbmx5IHRoZSBmcmFtaW5nLAorZXNjYXBpbmcsIGFuZCBDUkMgcGFydHMgb2YgdGhlIGxhcmdlciBIRExDIHByb3RvY29sLS0tYWxsIG90aGVyIHBhcnRzCitvZiBIRExDIGFyZSBvbWl0dGVkLiBUaGlzIHByb3RvY29sIHdhcyBjaG9zZW4gYmVjYXVzZSBpdCB3b3JrcyB3ZWxsCit3aXRoIHNvZnR3YXJlIGZsb3cgY29udHJvbCBhbmQgaXMgd2lkZWx5IGltcGxlbWVudGVkLgorCitUbyB0cmFuc21pdCBhIGZyYW1lIHdpdGggSERMQy1saXRlLCB0aGUgMTYtYml0IENSQyBtdXN0IGZpcnN0IGJlCithcHBlbmRlZCB0byB0aGUgZnJhbWUuIFRoZSBDUkMgZnVuY3Rpb24gaXMgZGVmaW5lZCB0byBiZSBDUkMtMTYvQ0NJVFQsCitvdGhlcndpc2Uga25vd24gYXMgdGhlIFtLRVJNSVQgQ1JDXVtdLgorCitbS0VSTUlUIENSQ106IGh0dHA6Ly9yZXZlbmcuc291cmNlZm9yZ2UubmV0L2NyYy1jYXRhbG9ndWUvMTYuaHRtI2NyYy5jYXQua2VybWl0CisKK0luZGl2aWR1YWwgZnJhbWVzIGFyZSB0ZXJtaW5hdGVkIHdpdGggYSBmcmFtZSBkZWxpbWl0ZXIgb2N0ZXQgY2FsbGVkCit0aGUgJ2ZsYWcnIG9jdGV0IChgMHg3RWApLgorCitUaGUgZm9sbG93aW5nIG9jdGV0cyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgKnNwZWNpYWwqIGFuZCBzaG91bGQgYmUKK2VzY2FwZWQgd2hlbiBwcmVzZW50IGluIGRhdGEgZnJhbWVzOgorCitPY3RldCBWYWx1ZSB8IERlc2NyaXB0aW9uICAKKy0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisgICAgICAgMHg3RSB8IEZyYW1lIERlbGltaXRlciAoRmxhZykgIAorICAgICAgIDB4N0QgfCBFc2NhcGUgQnl0ZSAgCisgICAgICAgMHgxMSB8IFhPTiAgCisgICAgICAgMHgxMyB8IFhPRkYgIAorICAgICAgIDB4RjggfCBWZW5kb3ItU3BlY2lmaWMgIAorCitXaGVuIHByZXNlbnQgaW4gYSBkYXRhIGZyYW1lLCB0aGVzZSBvY3RldCB2YWx1ZXMgYXJlIGVzY2FwZWQgYnkKK3ByZXBlbmRpbmcgdGhlIGVzY2FwZSBvY3RldCAoYDB4N0RgKSBhbmQgWE9SaW5nIHRoZSB2YWx1ZSB3aXRoIGAweDIwYC4KKworV2hlbiByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIENSQyBtdXN0IGJlIHZlcmlmaWVkIGFmdGVyIHRoZSBmcmFtZSBpcwordW5lc2NhcGVkLiBJZiB0aGUgQ1JDIHZhbHVlIGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgY2FsY3VsYXRlZCBmb3IgdGhlCitmcmFtZSBkYXRhLCB0aGUgZnJhbWUgTVVTVCBiZSBkaXNjYXJkZWQuIFRoZSBpbXBsZW1lbnRhdGlvbiBNQVkKK2luZGljYXRlIHRoZSBmYWlsdXJlIHRvIGhpZ2hlciBsZXZlbHMgdG8gaGFuZGxlIGFzIHRoZXkgc2VlIGZpdCwgYnV0CitNVVNUIE5PVCBhdHRlbXB0IHRvIHByb2Nlc3MgdGhlIGRlY2VpdmVkIGZyYW1lLgorCitDb25zZWN1dGl2ZSBmbGFnIG9jdGV0cyBhcmUgZW50aXJlbHkgbGVnYWwgYW5kIE1VU1QgTk9UIGJlIHRyZWF0ZWQgYXMKK2EgZnJhbWluZyBlcnJvci4gQ29uc2VjdXRpdmUgZmxhZyBvY3RldHMgTUFZIGJlIHVzZWQgYXMgYSB3YXkgdG8gd2FrZQordXAgYSBzbGVlcGluZyBOQ1AuCisKK1doZW4gZmlyc3QgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgTkNQLCBpdCBpcyBjdXN0b21hcnkgdG8KK3NlbmQgb25lIG9yIG1vcmUgZmxhZyBvY3RldHMgdG8gZW5zdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVjZWl2ZWQKK2RhdGEgaXMgZGlzY2FyZGVkLgorCisjIyBTUEkgUmVjb21tZW5kYXRpb25zICMjIworCitXZSBSRUNPTU1FTkQgdGhlIHVzZSBvZiB0aGUgZm9sbG93aW5nIHN0YW5kYXJkIFNQSSBzaWduYWxzOgorCisqICAgYEPMhVPMhWA6ICAgKEhvc3QtdG8tTkNQKSBDaGlwIFNlbGVjdAorKiAgIGBDTEtgOiAgKEhvc3QtdG8tTkNQKSBDbG9jaworKiAgIGBNT1NJYDogTWFzdGVyLU91dHB1dC9TbGF2ZS1JbnB1dAorKiAgIGBNSVNPYDogTWFzdGVyLUlucHV0L1NsYXZlLU91dHB1dAorKiAgIGBJzIVOzIVUzIVgOiAgKE5DUC10by1Ib3N0KSBIb3N0IEludGVycnVwdAorKiAgIGBSzIVFzIVTzIVgOiAgKEhvc3QtdG8tTkNQKSBOQ1AgSGFyZHdhcmUgUmVzZXQKKworVGhlIGBJzIVOzIVUzIVgIHNpZ25hbCBpcyB1c2VkIGJ5IHRoZSBOQ1AgdG8gaW5kaWNhdGUgdG8gdGhlIGhvc3QgdGhhdAordGhlIE5DUCBoYXMgZnJhbWVzIHBlbmRpbmcgdG8gc2VuZCB0byBpdC4gV2hlbiBhc3NlcnRlZCwgdGhlIGhvc3QKK1NIT1VMRCBpbml0aWF0ZSBhIFNQSSB0cmFuc2FjdGlvbiBpbiBhIHRpbWVseSBtYW5uZXIuCisKK1dlIFJFQ09NTUVORCB0aGUgZm9sbG93aW5nIFNQSSBwcm9wZXJ0aWVzOgorCisqICAgYEPMhVPMhWAgaXMgYWN0aXZlIGxvdy4KKyogICBgQ0xLYCBpcyBhY3RpdmUgaGlnaC4KKyogICBgQ0xLYCBzcGVlZCBpcyBsYXJnZXIgdGhhbiA1MDAga0h6LgorKiAgIERhdGEgaXMgdmFsaWQgb24gbGVhZGluZyBlZGdlIG9mIGBDTEtgLgorKiAgIERhdGEgaXMgc2VudCBpbiBtdWx0aXBsZXMgb2YgOC1iaXRzIChvY3RldHMpLgorKiAgIE9jdGV0cyBhcmUgc2VudCBtb3N0LXNpZ25pZmljYW50IGJpdCBmaXJzdC4KKworVGhpcyByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIG1heSBiZSBhZGp1c3RlZCBkZXBlbmRpbmcgb24gdGhlCitpbmRpdmlkdWFsIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBwcm9kdWN0LgorCisjIyMgU1BJIEZyYW1pbmcgUHJvdG9jb2wgIyMjIworCitFYWNoIFNQSSBmcmFtZSBzdGFydHMgd2l0aCBhIDUtYnl0ZSBmcmFtZSBoZWFkZXI6CisKK09jdGV0czogfCAgMSAgfCAgICAyICAgICB8ICAgICAyICAKKy0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLSAgCitGaWVsZHM6IHwgSERSIHwgUkVDVl9MRU4gfCBEQVRBX0xFTiAgCisKKyogICBgSERSYDogVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIGhlYWRlciBieXRlIChkZWZpbmVkIGJlbG93KQorKiAgIGBSRUNWX0xFTmA6IFRoZSBzZWNvbmQgYW5kIHRoaXJkIGJ5dGVzIGluZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lCisgICAgc2l6ZSB0aGF0IHRoYXQgZGV2aWNlIGlzIHJlYWR5IHRvIHJlY2VpdmUuIElmIHplcm8sIHRoZW4gdGhlIG90aGVyCisgICAgZGV2aWNlIG11c3Qgbm90IHNlbmQgYW55IGRhdGEuIChMaXR0bGUgZW5kaWFuKQorKiAgIGBEQVRBX0xFTmA6IFRoZSBmb3VydGggYW5kIGZpZnRoIGJ5dGVzIGluZGljYXRlIHRoZSBzaXplIG9mIHRoZQorICAgIHBlbmRpbmcgZGF0YSBmcmFtZSB0byBiZSBzZW50IHRvIHRoZSBvdGhlciBkZXZpY2UuIElmIHRoaXMgdmFsdWUKKyAgICBpcyBlcXVhbC10byBvciBsZXNzLXRoYW4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBvdGhlciBkZXZpY2UKKyAgICBpcyB3aWxsaW5nIHRvIHJlY2VpdmUsIHRoZW4gdGhlIGRhdGEgb2YgdGhlIGZyYW1lIGlzIGltbWVkaWF0ZWx5CisgICAgYWZ0ZXIgdGhlIGhlYWRlci4gKExpdHRsZSBFbmRpYW4pCisKK1RoZSBgSERSYCBieXRlIGlzIGRlZmluZWQgYXM6CisKKyAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgfFJTVHxDUkN8Q0NGfCAgUkVTRVJWRUQgfFBBVFRFUk58CisgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisKKyogICBgUlNUYDogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhhdCBkZXZpY2UgaGFzIGJlZW4gcmVzZXQgc2luY2UgdGhlCisgICAgbGFzdCB0aW1lIGBDzIVTzIVgIHdhcyBhc3NlcnRlZC4KKyogICBgQ1JDYDogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhhdCBkZXZpY2Ugc3VwcG9ydHMgd3JpdGluZyBhIDE2LWJpdAorICAgIENSQyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhLiBUaGUgQ1JDIGxlbmd0aCBpcyBOT1QgaW5jbHVkZWQgaW4gREFUQV9MRU4uCisqICAgYENDRmA6ICJDUkMgQ2hlY2sgRmFpbHVyZSIuIFNldCBpZiB0aGUgQ1JDIGNoZWNrIG9uIHRoZSBsYXN0IHJlY2VpdmVkCisgICAgZnJhbWUgZmFpbGVkLCBjbGVhcmVkIHRvIHplcm8gb3RoZXJ3aXNlLiBUaGlzIGJpdCBpcyBvbmx5IHVzZWQgaWYgYm90aAorICAgIHNpZGVzIHN1cHBvcnQgQ1JDLgorKiAgIGBSRVNFUlZFRGA6IFRoZXNlIGJpdHMgYXJlIGFsbCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZWQuIFRoZXkKKyAgICBNVVNUIGJlIGNsZWFyZWQgdG8gemVybyBhbmQgTVVTVCBiZSBpZ25vcmVkIGlmIHNldC4KKyogICBgUEFUVEVSTmA6IFRoZXNlIGJpdHMgYXJlIHNldCB0byBhIGZpeGVkIHZhbHVlIHRvIGhlbHAgZGlzdGluZ3Vpc2gKKyAgICB2YWxpZCBTUEkgZnJhbWVzIGZyb20gZ2FyYmFnZSAoYnkgZXhwbGljaXRseSBtYWtpbmcgYDB4RkZgIGFuZCBgMHgwMGAKKyAgICBpbnZhbGlkIHZhbHVlcykuIEJpdCA2IE1VU1QgYmUgc2V0IHRvIGJlIG9uZSBhbmQgYml0IDcgTVVTVCBiZQorICAgIGNsZWFyZWQgKDApLiBBIGZyYW1lIHJlY2VpdmVkIHRoYXQgaGFzIGFueSBvdGhlciB2YWx1ZXMgZm9yIHRoZXNlIGJpdHMKKyAgICBNVVNUIGJlIGRyb3BwZWQuCisKK1ByaW9yIHRvIGEgc2VuZGluZyBvciByZWNlaXZpbmcgYSBmcmFtZSwgdGhlIG1hc3RlciBNQVkgc2VuZCBhCis1LW9jdGV0IGZyYW1lIHdpdGggemVyb3MgZm9yIGJvdGggdGhlIG1heCByZWNlaXZlIGZyYW1lIHNpemUgYW5kIHRoZQordGhlIGNvbnRhaW5lZCBmcmFtZSBsZW5ndGguIFRoaXMgd2lsbCBpbmR1Y2UgdGhlIHNsYXZlIGRldmljZSB0bworaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgaXQgd2FudHMgdG8gc2VuZCAoaWYgYW55KSBhbmQKK2luZGljYXRlIHRoZSBsYXJnZXN0IGZyYW1lIGl0IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGF0IHRoZSBtb21lbnQuCitUaGlzIGFsbG93cyB0aGUgbWFzdGVyIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KK0FsdGVybmF0aXZlbHksIGlmIHRoZSBtYXN0ZXIgaGFzIGEgZnJhbWUgdG8gc2VuZCBpdCBjYW4ganVzdCBnbyBhaGVhZAorYW5kIHNlbmQgYSBmcmFtZSBvZiB0aGF0IGxlbmd0aCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBmcmFtZSB3YXMgYWNjZXB0ZWQKK2J5IGNoZWNraW5nIHRoYXQgdGhlIGBSRUNWX0xFTmAgZnJvbSB0aGUgc2xhdmUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4KK3RoZSBmcmFtZSB0aGUgbWFzdGVyIGp1c3QgdHJpZWQgdG8gc2VuZC4gSWYgdGhlIGBSRUNWX0xFTmAgaXMgc21hbGxlcgordGhlbiB0aGUgZnJhbWUgd2Fzbid0IGFjY2VwdGVkIGFuZCB3aWxsIG5lZWQgdG8gYmUgdHJhbnNtaXR0ZWQgYWdhaW4uCisKK1RoaXMgcHJvdG9jb2wgY2FuIGJlIHVzZWQgZWl0aGVyIHVuaWRpcmVjdGlvbmFsbHkgb3IgYmlkaXJlY3Rpb25hbGx5LAorZGV0ZXJtaW5lZCBieSB0aGUgYmVoYXZpb3Igb2YgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlLgorCitJZiB0aGUgdGhlIG1hc3RlciBub3RpY2VzIGBQQVRURVJOYCBpcyBub3Qgc2V0IGNvcnJlY3RseSwgdGhlIG1hc3Rlcgorc2hvdWxkIGNvbnNpZGVyIHRoZSB0cmFuc2FjdGlvbiB0byBoYXZlIGZhaWxlZCBhbmQgdHJ5IGFnYWluIGFmdGVyIDEwCittaWxsaXNlY29uZHMsIHJldHJ5aW5nIHVwIHRvIDIwMCB0aW1lcy4gQWZ0ZXIgdW5zdWNjZXNzZnVsbHkgdHJ5aW5nCisyMDAgdGltZXMgaW4gYSByb3csIHRoZSBtYXN0ZXIgTUFZIHRha2UgYXBwcm9wcmlhdGUgcmVtZWRpYWwgYWN0aW9uCisobGlrZSBhIE5DUCBoYXJkd2FyZSByZXNldCwgb3IgaW5kaWNhdGluZyBhIGNvbW11bmljYXRpb24gZmFpbHVyZSB0byBhCit1c2VyIGludGVyZmFjZSkuCisKK0F0IHRoZSBlbmQgb2YgdGhlIGRhdGEgb2YgYSBmcmFtZSBpcyBhbiBvcHRpb25hbCAxNi1iaXQgQ1JDLCBzdXBwb3J0IGZvcgord2hpY2ggaXMgaW5kaWNhdGVkIGJ5IHRoZSBgQ1JDYCBiaXQgb2YgdGhlIGBIRFJgIGJ5dGUgYmVpbmcgc2V0LiBJZiB0aGVzZQorYml0cyBhcmUgc2V0IGZvciBib3RoIHRoZSBtYXN0ZXIgYW5kIHNsYXZlIGZyYW1lcywgdGhlbiBDUkMgY2hlY2tpbmcgaXMKK2VuYWJsZWQgb24gYm90aCBzaWRlcywgZWZmZWN0aXZlbHkgcmVxdWlyaW5nIHRoYXQgZnJhbWUgc2l6ZXMgYmUgdHdvIGJ5dGVzCitsb25nZXIgdGhhbiB3b3VsZCBiZSBvdGhlcndpc2UgcmVxdWlyZWQuIFRoZSBDUkMgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUKK3NhbWUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBDUkMgY2FsY3VsYXRpb24gaW4gSERMQy1MaXRlIChTZWUgKCNoZGxjLWxpdGUpKS4KK1doZW4gYm90aCBvZiB0aGUgYENSQ2AgYml0cyBhcmUgc2V0LCBib3RoIHNpZGVzIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGBDUkNgCitpcyB2YWxpZCBiZWZvcmUgYWNjZXB0aW5nIHRoZSBmcmFtZS4gSWYgbm90IGVub3VnaCBieXRlcyB3ZXJlIGNsb2NrZWQgb3V0Citmb3IgdGhlIENSQyB0byBiZSByZWFkLCB0aGVuIHRoZSBmcmFtZSBtdXN0IGJlIGlnbm9yZWQuIElmIGVub3VnaCBieXRlcword2VyZSBjbG9ja2VkIG91dCB0byBwZXJmb3JtIGEgQ1JDIGNoZWNrLCBidXQgdGhlIENSQyBjaGVjayBmYWlscywgdGhlbgordGhlIGZyYW1lIG11c3QgYmUgcmVqZWN0ZWQgYW5kIHRoZSBgQ1JDX0ZBSUxgIGJpdCBvbiB0aGUgbmV4dCBmcmFtZSAoYW5kCitPTkxZIHRoZSBuZXh0IGZyYW1lKSBNVVNUIGJlIHNldC4KKworIyMgScKyQyBSZWNvbW1lbmRhdGlvbnMgeyNpMmMtcmVjb21tZW5kYXRpb25zfQorCitUQkQKKworPCEtLSBSUQorICAtLSBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMgZG9pbmcKKyAgICAgZm9yIG5hdGl2ZSBJwrJDIGZyYW1pbmcgYW5kIGdvIHdpdGggdGhhdC4KKyAgLS0+CisKKyMjIE5hdGl2ZSBVU0IgUmVjb21tZW5kYXRpb25zICMjIworCitUQkQKKworPCEtLSBSUQorICAtLSBJdCBtYXkgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9vayBhdCB3aGF0IEJsdWV0b290aCBIQ0kgaXMgZG9pbmcKKyAgICAgZm9yIG5hdGl2ZSBVU0IgZnJhbWluZyBhbmQgZ28gd2l0aCB0aGF0LgorICAtLT4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWNvcmUubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1jb3JlLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzg0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1jb3JlLm1kCkBAIC0wLDAgKzEsNTQ0IEBACisjIyBDb3JlIFByb3BlcnRpZXMgeyNwcm9wLWNvcmV9CisKKyMjIyBQUk9QIDA6IFBST1BfTEFTVF9TVEFUVVMgeyNwcm9wLWxhc3Qtc3RhdHVzfQorCisqIFR5cGU6IFJlYWQtT25seQorKiBFbmNvZGluZzogYGlgCisKK09jdGV0czogfCAgICAxLTMKKy0tLS0tLS06fC0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBMQVNUX1NUQVRVUworCitEZXNjcmliZXMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBvcGVyYXRpb24uIEVuY29kZWQgYXMgYSBwYWNrZWQKK3Vuc2lnbmVkIGludGVnZXIuCisKK1RoaXMgcHJvcGVydHkgaXMgZW1pdHRlZCBvZnRlbiB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IHN0YXR1cyBvZgorcHJldHR5IG11Y2ggYW55IEhvc3QtdG8tTkNQIG9wZXJhdGlvbi4KKworSXQgaXMgZW1pdHRlZCBhdXRvbWF0aWNhbGx5IGF0IE5DUCBzdGFydHVwIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nCit0aGUgcmVzZXQgcmVhc29uLgorCitTZWUgKCNzdGF0dXMtY29kZXMpIGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBzdGF0dXMgY29kZXMuCisKKyMjIyBQUk9QIDE6IFBST1BfUFJPVE9DT0xfVkVSU0lPTiB7I3Byb3AtcHJvdG9jb2wtdmVyc2lvbn0KKworKiBUeXBlOiBSZWFkLU9ubHkKKyogRW5jb2Rpbmc6IGBpaWAKKworT2N0ZXRzOiB8ICAgICAgIDEtMyAgICAgIHwgICAgICAxLTMKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgIE1BSk9SX1ZFUlNJT04gfCBNSU5PUl9WRVJTSU9OCisKK0Rlc2NyaWJlcyB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhpcyBwcm9wZXJ0eSBjb250YWlucworZm91ciBmaWVsZHMsIGVhY2ggZW5jb2RlZCBhcyBhIHBhY2tlZCB1bnNpZ25lZCBpbnRlZ2VyOgorCisgKiAgTWFqb3IgVmVyc2lvbiBOdW1iZXIKKyAqICBNaW5vciBWZXJzaW9uIE51bWJlcgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBtYWpvciB2ZXJzaW9uIDQsIG1pbm9yIHZlcnNpb24gMyBvZiB0aGlzIHByb3RvY29sLgorCitUaGUgaG9zdCAqKk1VU1QqKiBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZAorZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworIyMjIyBNYWpvciBWZXJzaW9uIE51bWJlcgorCitUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgdXNlZCB0byBpZGVudGlmeSBsYXJnZSBhbmQgaW5jb21wYXRpYmxlCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb3RvY29sIHZlcnNpb25zLgorCitUaGUgaG9zdCBNVVNUIGVudGVyIGEgRkFVTFQgc3RhdGUgaWYgaXQgZG9lcyBub3QgZXhwbGljaXRseSBzdXBwb3J0Cit0aGUgZ2l2ZW4gbWFqb3IgdmVyc2lvbiBudW1iZXIuCisKKyMjIyMgTWlub3IgVmVyc2lvbiBOdW1iZXIKKworVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgc21hbGwgYnV0IG90aGVyd2lzZQorY29tcGF0aWJsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHByb3RvY29sIHZlcnNpb25zLiBBIG1pc21hdGNoIGJldHdlZW4KK3RoZSBhZHZlcnRpc2VkIG1pbm9yIHZlcnNpb24gbnVtYmVyIGFuZCB0aGUgbWlub3IgdmVyc2lvbiB0aGF0IGlzCitzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgU0hPVUxEIE5PVCBiZSBmYXRhbCB0byB0aGUgb3BlcmF0aW9uIG9mIHRoZQoraG9zdC4KKworIyMjIFBST1AgMjogUFJPUF9OQ1BfVkVSU0lPTiB7I3Byb3AtbmNwLXZlcnNpb259CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYFVgCisKK09jdGV0czogfCAgICAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBOQ1BfVkVTSU9OX1NUUklORworCitDb250YWlucyBhIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlIGZpcm13YXJlIGN1cnJlbnRseSBydW5uaW5nIG9uCit0aGUgTkNQLiBFbmNvZGVkIGFzIGEgemVyby10ZXJtaW5hdGVkIFVURi04IHN0cmluZy4KKworVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIG5vdCBzdHJpY3RseSBkZWZpbmVkLCBidXQgaXQgaXMgaW50ZW5kZWQKK3RvIHByZXNlbnQgc2ltaWxhcmx5IHRvIHRoZSAiVXNlci1BZ2VudCIgc3RyaW5nIGZyb20gSFRUUC4gVGhlCitSRUNPTU1FTkRFRCBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBhcyBmb2xsb3dzOgorCisgICAgU1RBQ0stTkFNRS9TVEFDSy1WRVJTSU9OW0JVSUxEX0lORk9dWzsgT1RIRVJfSU5GT107IEJVSUxEX0RBVEVfQU5EX1RJTUUKKworRXhhbXBsZXM6CisKKyAqICBgT3BlblRocmVhZC8xLjBkMjYtMjUtZ2I2ODRjN2Y7IERFQlVHOyBNYXkgOSAyMDE2IDE4OjIyOjA0YAorICogIGBDb25uZWN0SVAvMi4wYjEyNSBzMSBBTFBIQTsgU2VwdCAyNCAyMDE1IDIwOjQ5OjE5YAorCitUaGUgaG9zdCAqKk1VU1QqKiBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZAorZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworIyMjIFBST1AgMzogUFJPUF9JTlRFUkZBQ0VfVFlQRSB7I3Byb3AtaW50ZXJmYWNlLXR5cGV9CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIEVuY29kaW5nOiBgaWAKKworT2N0ZXRzOiB8ICAgICAgIDEtMworLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IElOVEVSRkFDRV9UWVBFCisKK1RoaXMgaW50ZWdlciBpZGVudGlmaWVzIHdoYXQgdGhlIG5ldHdvcmsgcHJvdG9jb2wgZm9yIHRoaXMgTkNQLgorQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZToKKworICogIDA6IEJvb3Rsb2FkZXIKKyAqICAyOiBaaWdCZWUgSVAoVE0pCisgKiAgMzogVGhyZWFkKFIpCisKK1RoZSBob3N0IE1VU1QgZW50ZXIgYSBGQVVMVCBzdGF0ZSBpZiBpdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlCitwcm90b2NvbCBnaXZlbiBieSB0aGUgTkNQLgorCisjIyMgUFJPUCA0OiBQUk9QX0lOVEVSRkFDRV9WRU5ET1JfSUQgeyNwcm9wLWludGVyZmFjZS12ZW5kb3ItaWR9CisKKyogVHlwZTogUmVhZC1Pbmx5CisqIEVuY29kaW5nOiBgaWAKKworT2N0ZXRzOiB8ICAgICAgIDEtMworLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IFZFTkRPUl9JRAorCitWZW5kb3IgaWRlbnRpZmllci4KKworIyMjIFBST1AgNTogUFJPUF9DQVBTIHsjcHJvcC1jYXBzfQorCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKGkpYAorCitPY3RldHM6IHwgIDEtMyAgfCAgMS0zICB8IC4uLgorLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tCitGaWVsZHM6IHwgQ0FQXzEgfCBDQVBfMiB8IC4uLgorCitEZXNjcmliZXMgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgb2YgdGhpcyBOQ1AuIEVuY29kZWQgYXMgYSBsaXN0IG9mCitwYWNrZWQgdW5zaWduZWQgaW50ZWdlcnMuCisKK0EgY2FwYWJpbGl0eSBpcyBkZWZpbmVkIGFzIGEgMjEtYml0IGludGVnZXIgdGhhdCBkZXNjcmliZXMgYSBzdWJzZXQgb2YKK2Z1bmN0aW9uYWxpdHkgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBOQ1AuCisKK0N1cnJlbnRseSBkZWZpbmVkIHZhbHVlcyBhcmU6CisKKyAqIDE6IGBDQVBfTE9DS2AKKyAqIDI6IGBDQVBfTkVUX1NBVkVgCisgKiAzOiBgQ0FQX0hCT2A6IEhvc3QgQnVmZmVyIE9mZmxvYWQuIFNlZSAoI2ZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZCkuCisgKiA0OiBgQ0FQX1BPV0VSX1NBVkVgCisgKiA1OiBgQ0FQX0NPVU5URVJTYAorICogNjogYENBUF9KQU1fREVURUNUYDogSmFtbWluZyBkZXRlY3Rpb24uIFNlZSAoI2ZlYXR1cmUtamFtLWRldGVjdCkKKyAqIDc6IGBDQVBfUEVFS19QT0tFYDogUEVFSy9QT0tFIGRlYnVnZ2luZyBjb21tYW5kcy4KKyAqIDg6IGBDQVBfV1JJVEFCTEVfUkFXX1NUUkVBTWA6IGBQUk9QX1NUUkVBTV9SQVdgIGlzIHdyaXRhYmxlLgorICogOTogYENBUF9HUElPYDogU3VwcG9ydCBmb3IgR1BJTyBhY2Nlc3MuIFNlZSAoI2ZlYXR1cmUtZ3Bpby1hY2Nlc3MpLgorICogMTA6IGBDQVBfVFJOR2A6IFN1cHBvcnQgZm9yIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLiBTZWUgKCNmZWF0dXJlLXRybmcpLgorICogMTE6IGBDQVBfQ01EX01VTFRJYDogU3VwcG9ydCBmb3IgYENNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVGAgKCgjY21kLXByb3AtdmFsdWUtbXVsdGktZ2V0KSksIGBDTURfUFJPUF9WQUxVRV9NVUxUSV9TRVRgICgoI2NtZC1wcm9wLXZhbHVlLW11bHRpLXNldCksIGFuZCBgQ01EX1BST1BfVkFMVUVTX0FSRWAgKCgjY21kLXByb3AtdmFsdWVzLWFyZSkpLgorICogMTI6IGBDQVBfVU5TT0xfVVBEQVRFX0ZJTFRFUmA6IFN1cHBvcnQgZm9yIGBQUk9QX1VOU09MX1VQREFURV9GSUxURVJgICgoI3Byb3AtdW5zb2wtdXBkYXRlLWZpbHRlcikpIGFuZCBgUFJPUF9VTlNPTF9VUERBVEVfTElTVGAgKCgjcHJvcC11bnNvbC11cGRhdGUtbGlzdCkpLgorICogMTY6IGBDQVBfODAyXzE1XzRfMjAwM2AKKyAqIDE3OiBgQ0FQXzgwMl8xNV80XzIwMDZgCisgKiAxODogYENBUF84MDJfMTVfNF8yMDExYAorICogMjE6IGBDQVBfODAyXzE1XzRfUElCYAorICogMjQ6IGBDQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTS2AKKyAqIDI1OiBgQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTS2AKKyAqIDI2OiBgQ0FQXzgwMl8xNV80Xzg2OE1IWl9PUVBTS2AKKyAqIDI3OiBgQ0FQXzgwMl8xNV80XzkxNU1IWl9CUFNLYAorICogMjg6IGBDQVBfODAyXzE1XzRfODY4TUhaX0JQU0tgCisgKiAyOTogYENBUF84MDJfMTVfNF85MTVNSFpfQVNLYAorICogMzA6IGBDQVBfODAyXzE1XzRfODY4TUhaX0FTS2AKKyAqIDQ4OiBgQ0FQX1JPTEVfUk9VVEVSYAorICogNDk6IGBDQVBfUk9MRV9TTEVFUFlgCisgKiA1MjogYENBUF9ORVRfVEhSRUFEXzFfMGAKKyAqIDUxMjogYENBUF9NQUNfV0hJVEVMSVNUYAorICogNTEzOiBgQ0FQX01BQ19SQVdgCisgKiA1MTQ6IGBDQVBfT09CX1NURUVSSU5HX0RBVEFgCisgKiAxMDI0OiBgQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVJgCisgKiAxMDI1OiBgQ0FQX1RIUkVBRF9UTUZfUFJPWFlgCisKKworQWRkaXRpb25hbGx5LCBmdXR1cmUgY2FwYWJpbGl0eSBhbGxvY2F0aW9ucyBTSEFMTCBiZSBtYWRlIGZyb20gdGhlCitmb2xsb3dpbmcgYWxsb2NhdGlvbiBwbGFuOgorCitDYXBhYmlsaXR5IFJhbmdlICAgICAgfCBEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KKzAgLSAxMjcgICAgICAgICAgICAgICB8IFJlc2VydmVkIGZvciBjb3JlIGNhcGFiaWxpdGllcworMTI4IC0gMTUsMzU5ICAgICAgICAgIHwgKlVOQUxMT0NBVEVEKgorMTUsMzYwIC0gMTYsMzgzICAgICAgIHwgVmVuZG9yLXNwZWNpZmljCisxNiwzODQgLSAxLDk5OSw5OTkgICAgfCAqVU5BTExPQ0FURUQqCisyLDAwMCwwMDAgLSAyLDA5NywxNTEgfCBFeHBlcmltZW50YWwgdXNlIG9ubHkKKworCisjIyMgUFJPUCA2OiBQUk9QX0lOVEVSRkFDRV9DT1VOVCB7I3Byb3AtaW50ZXJmYWNlLWNvdW50fQorCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitPY3RldHM6IHwgICAgICAgMQorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBgSU5URVJGQUNFX0NPVU5UYAorCitEZXNjcmliZXMgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGludGVyZmFjZXMgc3VwcG9ydGVkIGJ5IHRoaXMgTkNQLgorU2luY2UgdGhlIGNvbmN1cnJlbnQgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyBzdGlsbCBUQkQsIHRoaXMgdmFsdWUgTVVTVAorYWx3YXlzIGJlIG9uZS4KKworVGhpcyB2YWx1ZSBpcyBlbmNvZGVkIGFzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIuCisKK1RoZSBob3N0ICoqTVVTVCoqIG9ubHkgdXNlIHRoaXMgcHJvcGVydHkgZnJvbSBOTEkgMC4gQmVoYXZpb3Igd2hlbiB1c2VkCitmcm9tIG90aGVyIE5MSXMgaXMgdW5kZWZpbmVkLgorCisjIyMgUFJPUCA3OiBQUk9QX1BPV0VSX1NUQVRFIHsjcHJvcC1wb3dlci1zdGF0ZX0KKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK09jdGV0czogfCAgICAgICAgMQorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgUE9XRVJfU1RBVEUKKworRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuIEJ5IHdyaXRpbmcgdG8gdGhpcworcHJvcGVydHkgeW91IGNhbiBtYW5hZ2UgdGhlIGxvd2VyIHN0YXRlIG9mIHRoZSBOQ1AuIEVudW1lcmF0aW9uIGlzCitlbmNvZGVkIGFzIGEgc2luZ2xlIHVuc2lnbmVkIGJ5dGUuCisKK0RlZmluZWQgdmFsdWVzIGFyZToKKworICogIDA6IGBQT1dFUl9TVEFURV9PRkZMSU5FYDogTkNQIGlzIHBoeXNpY2FsbHkgcG93ZXJlZCBvZmYuCisgICAgKEVudW1lcmF0ZWQgZm9yIGNvbXBsZXRlbmVzcyBzYWtlLCBub3QgZXhwZWN0ZWQgb24gdGhlIHdpcmUpCisgKiAgMTogYFBPV0VSX1NUQVRFX0RFRVBfU0xFRVBgOiBBbG1vc3QgZXZlcnl0aGluZyBvbiB0aGUgTkNQIGlzIHNodXQKKyAgICBkb3duLCBidXQgY2FuIHN0aWxsIGJlIHJlc3VtZWQgdmlhIGEgY29tbWFuZCBvciBpbnRlcnJ1cHQuCisgKiAgMjogYFBPV0VSX1NUQVRFX1NUQU5EQllgOiBOQ1AgaXMgaW4gdGhlIGxvd2VzdCBwb3dlciBzdGF0ZSB0aGF0CisgICAgY2FuIHN0aWxsIGJlIGF3b2tlbiBieSBhbiBldmVudCBmcm9tIHRoZSByYWRpbyAoZS5nLiB3YWl0aW5nIGZvcgorICAgIGFsYXJtKQorICogIDM6IGBQT1dFUl9TVEFURV9MT1dfUE9XRVJgOiBOQ1AgaXMgcmVzcG9uc2l2ZSAoYW5kIHBvc3NpYmx5CisgICAgY29ubmVjdGVkKSwgYnV0IHVzaW5nIGxlc3MgcG93ZXIuIChlLmcuICJTbGVlcHkiIGNoaWxkIG5vZGUpCisgKiAgNDogYFBPV0VSX1NUQVRFX09OTElORWA6IE5DUCBpcyBmdWxseSBwb3dlcmVkLiAoZS5nLiAiUGFyZW50IgorICAgIG5vZGUpCisKKzwhLS0gUlEKKyAgLS0gV2Ugc2hvdWxkIGNvbnNpZGVyIHJldmVyc2luZyB0aGUgbnVtYmVyaW5nIGhlcmUgc28gdGhhdCAwIGlzCisgICAgIGBQT1dFUl9TVEFURV9PTkxJTkVgLiBXZSBtYXkgYWxzbyB3YW50IHRvIGluY2x1ZGUgc29tZSBleHRyYQorICAgICB2YWx1ZXMgYmV0d2VlbiB0aGUgZGVmaW5lZCB2YWx1ZXMgZm9yIGZ1dHVyZSBleHBhbnNpb24sIHNvCisgICAgIHRoYXQgd2UgY2FuIHByZXNlcnZlIHRoZSBvcmRlcmVkIHJlbGF0aW9uc2hpcC4gLS0gLS0+CisKKyMjIyBQUk9QIDg6IFBST1BfSFdBRERSIHsjcHJvcC1od2FkZHJ9CisKKyogVHlwZTogUmVhZC1Pbmx5XCoKKyogUGFja2VkLUVuY29kaW5nOiBgRWAKKworT2N0ZXRzOiB8ICAgIDgKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEhXQUREUgorCitUaGUgc3RhdGljIEVVSTY0IGFkZHJlc3Mgb2YgdGhlIGRldmljZSwgdXNlZCBhcyBhIHNlcmlhbCBudW1iZXIuCitUaGlzIHZhbHVlIGlzIHJlYWQtb25seSwgYnV0IG1heSBiZSB3cml0YWJsZSB1bmRlciBjZXJ0YWluCit2ZW5kb3ItZGVmaW5lZCBjaXJjdW1zdGFuY2VzLgorCisjIyMgUFJPUCA5OiBQUk9QX0xPQ0sgeyNwcm9wLWxvY2t9CisKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitPY3RldHM6IHwgICAgMQorLS0tLS0tLS18LS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgTE9DSworCitQcm9wZXJ0eSBsb2NrLiBVc2VkIGZvciBncm91cGluZyBjaGFuZ2VzIHRvIHNldmVyYWwgcHJvcGVydGllcyB0bwordGFrZSBlZmZlY3QgYXQgb25jZSwgb3IgdG8gdGVtcG9yYXJpbHkgcHJldmVudCB0aGUgYXV0b21hdGljIHVwZGF0aW5nCitvZiBwcm9wZXJ0eSB2YWx1ZXMuIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBleGVjdXRpb24gb2YgdGhlCitOQ1AgaXMgZWZmZWN0aXZlbHkgZnJvemVuIHVudGlsIGl0IGlzIGNsZWFyZWQuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhlIGBDQVBfTE9DS2AgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCitVbmxpa2UgbW9zdCBvdGhlciBwcm9wZXJ0aWVzLCBzZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB3aGVuIHRoZQordmFsdWUgb2YgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgdHJ1ZSAqKk1VU1QqKiBmYWlsIHdpdGggYSBsYXN0IHN0YXR1cworb2YgYFNUQVRVU19BTFJFQURZYC4KKworIyMjIFBST1AgMTA6IFBST1BfSE9TVF9QT1dFUl9TVEFURSB7I3Byb3AtaG9zdC1wb3dlci1zdGF0ZX0KKworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisqIERlZmF1bHQgdmFsdWU6IDQKKworT2N0ZXRzOiB8ICAgICAgICAxCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KK0ZpZWxkczogfCBgSE9TVF9QT1dFUl9TVEFURWAKKworRGVzY3JpYmVzIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIHRoZSAqaG9zdCouIFRoaXMgcHJvcGVydHkgaXMgdXNlZAorYnkgdGhlIGhvc3QgdG8gaW5mb3JtIHRoZSBOQ1Agd2hlbiBpdCBoYXMgY2hhbmdlZCBwb3dlciBzdGF0ZXMuIFRoZQorTkNQIGNhbiB0aGVuIHVzZSB0aGlzIHN0YXRlIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIG5lZWQKK2FzeW5jaHJvbm91cyB1cGRhdGVzLiBFbnVtZXJhdGlvbiBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIHVuc2lnbmVkCitieXRlLiBUaGVzZSBzdGF0ZXMgYXJlIGRlZmluZWQgaW4gc2ltaWxhciB0ZXJtcyB0byBgUFJPUF9QT1dFUl9TVEFURWAKKygoI3Byb3AtcG93ZXItc3RhdGUpKS4KKworRGVmaW5lZCB2YWx1ZXMgYXJlOgorCisqICAgMDogYEhPU1RfUE9XRVJfU1RBVEVfT0ZGTElORWA6IEhvc3QgaXMgcGh5c2ljYWxseSBwb3dlcmVkIG9mZiBhbmQKKyAgICBjYW5ub3QgYmUgd29rZW4gYnkgdGhlIE5DUC4gQWxsIGFzeW5jaHJvbm91cyBjb21tYW5kcyBhcmUKKyAgICBzcXVlbGNoZWQuCisqICAgMTogYEhPU1RfUE9XRVJfU1RBVEVfREVFUF9TTEVFUGA6IFRoZSBob3N0IGlzIGluIGEgbG93IHBvd2VyIHN0YXRlCisgICAgd2hlcmUgaXQgY2FuIGJlIHdva2VuIGJ5IHRoZSBOQ1AgYnV0IHdpbGwgcG90ZW50aWFsbHkgcmVxdWlyZSBtb3JlCisgICAgdGhhbiB0d28gc2Vjb25kcyB0byBiZWNvbWUgZnVsbHkgcmVzcG9uc2l2ZS4gVGhlIE5DUCAqKk1VU1QqKgorICAgIGF2b2lkIHNlbmRpbmcgdW5uZWNlc3NhcnkgcHJvcGVydHkgdXBkYXRlcywgc3VjaCBhcyBjaGlsZCB0YWJsZQorICAgIHVwZGF0ZXMgb3Igbm9uLWNyaXRpY2FsIG1lc3NhZ2VzIG9uIHRoZSBkZWJ1ZyBzdHJlYW0uIElmIHRoZSBOQ1AKKyAgICBuZWVkcyB0byB3YWtlIHRoZSBob3N0IGZvciB0cmFmZmljLCB0aGUgTkNQICoqTVVTVCoqIGZpcnN0IHRha2UKKyAgICBhY3Rpb24gdG8gd2FrZSB0aGUgaG9zdC4gT25jZSB0aGUgTkNQIHNpZ25hbHMgdG8gdGhlIGhvc3QgdGhhdCBpdAorICAgIHNob3VsZCB3YWtlIHVwLCB0aGUgTkNQICoqTVVTVCoqIHdhaXQgZm9yIHNvbWUgYWN0aXZpdHkgZnJvbSB0aGUKKyAgICBob3N0IChpbmRpY2F0aW5nIHRoYXQgaXQgaXMgZnVsbHkgYXdha2UpIGJlZm9yZSBzZW5kaW5nIGZyYW1lcy4KKyogICAyOiAqKlJFU0VSVkVEKiouIFRoaXMgdmFsdWUgKipNVVNUIE5PVCoqIGJlIHNldCBieSB0aGUgaG9zdC4gSWYKKyAgICByZWNlaXZlZCBieSB0aGUgTkNQLCB0aGUgTkNQICoqU0hPVUxEKiogY29uc2lkZXIgdGhpcyBhcyBhIHN5bm9ueW0KKyAgICBvZiBgSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQYC4KKyogICAzOiBgSE9TVF9QT1dFUl9TVEFURV9MT1dfUE9XRVJgOiBUaGUgaG9zdCBpcyBpbiBhIGxvdyBwb3dlciBzdGF0ZQorICAgIHdoZXJlIGl0IGNhbiBiZSBpbW1lZGlhdGVseSB3b2tlbiBieSB0aGUgTkNQLiBUaGUgTkNQICoqU0hPVUxEKioKKyAgICBhdm9pZCBzZW5kaW5nIHVubmVjZXNzYXJ5IHByb3BlcnR5IHVwZGF0ZXMsIHN1Y2ggYXMgY2hpbGQgdGFibGUKKyAgICB1cGRhdGVzIG9yIG5vbi1jcml0aWNhbCBtZXNzYWdlcyBvbiB0aGUgZGVidWcgc3RyZWFtLgorKiAgIDQ6IGBIT1NUX1BPV0VSX1NUQVRFX09OTElORWA6IFRoZSBob3N0IGlzIGF3YWtlIGFuZCByZXNwb25zaXZlLiBObworICAgIHNwZWNpYWwgZmlsdGVyaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgTkNQIG9uIGFzeW5jaHJvbm91cyB1cGRhdGVzLgorKiAgIEFsbCBvdGhlciB2YWx1ZXMgYXJlICoqUkVTRVJWRUQqKi4gVGhleSBNVVNUIE5PVCBiZSBzZXQgYnkgdGhlCisgICAgaG9zdC4gSWYgcmVjZWl2ZWQgYnkgdGhlIE5DUCwgdGhlIE5DUCAqKlNIT1VMRCoqIGNvbnNpZGVyIHRoZSB2YWx1ZSBhcworICAgIGEgc3lub255bSBvZiBgSE9TVF9QT1dFUl9TVEFURV9MT1dfUE9XRVJgLgorCis8IS0tIFJRCisgIC0tIFdlIHNob3VsZCBjb25zaWRlciByZXZlcnNpbmcgdGhlIG51bWJlcmluZyBoZXJlIHNvIHRoYXQgMCBpcworICAgICBgUE9XRVJfU1RBVEVfT05MSU5FYC4gV2UgbWF5IGFsc28gd2FudCB0byBpbmNsdWRlIHNvbWUgZXh0cmEKKyAgICAgdmFsdWVzIGJldHdlZW4gdGhlIGRlZmluZWQgdmFsdWVzIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBzbworICAgICB0aGF0IHdlIGNhbiBwcmVzZXJ2ZSB0aGUgb3JkZXJlZCByZWxhdGlvbnNoaXAuIC0tIC0tPgorCitBZnRlciBzZXR0aW5nIHRoaXMgcG93ZXIgc3RhdGUsIGFueSBmdXJ0aGVyIGNvbW1hbmRzIGZyb20gdGhlIGhvc3QgdG8KK3RoZSBOQ1Agd2lsbCBjYXVzZSBgSE9TVF9QT1dFUl9TVEFURWAgdG8gYXV0b21hdGljYWxseSByZXZlcnQgdG8KK2BIT1NUX1BPV0VSX1NUQVRFX09OTElORWAuCisKK1doZW4gdGhlIGhvc3QgaXMgZW50ZXJpbmcgYSBsb3ctcG93ZXIgc3RhdGUsIGl0IHNob3VsZCB3YWl0IGZvciB0aGUKK3Jlc3BvbnNlIGZyb20gdGhlIE5DUCBhY2tub3dsZWRnaW5nIHRoZSBjb21tYW5kICh3aXRoIGBDTURfVkFMVUVfSVNgKS4KK09uY2UgdGhhdCBhY2tub3dsZWRnZW1lbnQgaXMgcmVjZWl2ZWQgdGhlIGhvc3QgbWF5IGVudGVyIHRoZSBsb3ctcG93ZXIKK3N0YXRlLgorCitJZiB0aGUgTkNQIGhhcyB0aGUgYENBUF9VTlNPTF9VUERBVEVfRklMVEVSYCBjYXBhYmlsaXR5LCBhbnkgdW5zb2xpY2l0ZWQKK3Byb3BlcnR5IHVwZGF0ZXMgbWFza2VkIGJ5IGBQUk9QX1VOU09MX1VQREFURV9GSUxURVJgIHNob3VsZCBiZSBob25vcmVkCit3aGlsZSB0aGUgaG9zdCBpbmRpY2F0ZXMgaXQgaXMgaW4gYSBsb3ctcG93ZXIgc3RhdGUuIEFmdGVyIHJlc3VtaW5nIHRvIHRoZQorYEhPU1RfUE9XRVJfU1RBVEVfT05MSU5FYCBzdGF0ZSwgdGhlIHZhbHVlIG9mIGBQUk9QX1VOU09MX1VQREFURV9GSUxURVJgCisqKk1VU1QqKiBiZSB1bmNoYW5nZWQgZnJvbSB0aGUgdmFsdWUgYXNzaWduZWQgcHJpb3IgdG8gdGhlIGhvc3QgaW5kaWNhdGluZworaXQgd2FzIGVudGVyaW5nIGEgbG93LXBvd2VyIHN0YXRlLgorCitUaGUgaG9zdCAqKk1VU1QqKiBvbmx5IHVzZSB0aGlzIHByb3BlcnR5IGZyb20gTkxJIDAuIEJlaGF2aW9yIHdoZW4gdXNlZAorZnJvbSBvdGhlciBOTElzIGlzIHVuZGVmaW5lZC4KKworIyMjIFBST1AgNDEwNDogUFJPUF9VTlNPTF9VUERBVEVfRklMVEVSIHsjcHJvcC11bnNvbC11cGRhdGUtZmlsdGVyfQorCisqIFJlcXVpcmVkIG9ubHkgaWYgYENBUF9VTlNPTF9VUERBVEVfRklMVEVSYCBpcyBzZXQuCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQShJKWAKKyogRGVmYXVsdCB2YWx1ZTogRW1wdHkuCisKK0NvbnRhaW5zIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSAqZXhjbHVkZWQqIGZyb20gZ2VuZXJhdGluZwordW5zb2xpY2l0ZWQgdmFsdWUgdXBkYXRlcy4gVGhpcyBwcm9wZXJ0eSAqKk1VU1QqKiBiZSBlbXB0eSBhZnRlciByZXNldC4KKworSW4gb3RoZXIgd29yZHMsIHRoZSBob3N0IG1heSBvcHQtb3V0IG9mIHVuc29saWNpdGVkIHByb3BlcnR5IHVwZGF0ZXMKK2ZvciBhIHNwZWNpZmljIHByb3BlcnR5IGJ5IGFkZGluZyB0aGF0IHByb3BlcnR5IGlkIHRvIHRoaXMgbGlzdC4KKworSG9zdHMgKipTSE9VTEQgTk9UKiogYWRkIHByb3BlcnRpZXMgdG8gdGhpcyBsaXN0IHdoaWNoIGFyZSBub3QKK3ByZXNlbnQgaW4gYFBST1BfVU5TT0xfVVBEQVRFX0xJU1RgLiBJZiBzdWNoIHByb3BlcnRpZXMgYXJlIGFkZGVkLAordGhlIE5DUCAqKk1VU1QqKiBpZ25vcmUgdGhlIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuCisKKzwhLS0gUlEKKyAgLS0gVGhlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBiZWhhdmlvciBpcyB0byBhdHRlbXB0IHRvIGF2b2lkIHBvc3NpYmxlCisgICAgIGZ1dHVyZSBpbnRlcm9wIHByb2JsZW1zIGJ5IGV4cGxpY2l0bHkgbWFraW5nIHN1cmUgdGhhdCB1bmtub3duCisgICAgIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQuIFNpbmNlIHVua25vd24gcHJvcGVydGllcyB3aWxsIG9idmlvdXNseSBub3QgYmUKKyAgICAgZ2VuZXJhdGluZyB1bnNvbGljaXRlZCB1cGRhdGVzLCBpdCBzZWVtcyBmYWlybHkgaGFybWxlc3MuIEFuCisgICAgIGltcGxlbWVudGF0aW9uIG1heSBwcmludCBvdXQgYSB3YXJuaW5nIHRvIHRoZSBkZWJ1ZyBzdHJlYW0uCisKKyAgICAgTm90ZSB0aGF0IHRoZSBlcnJvciBpcyBzdGlsbCBkZXRlY3RhYmxlOiBJZiB5b3UgVkFMVUVcX1NFVCB1bnN1cHBvcnRlZAorICAgICBwcm9wZXJ0aWVzLCB0aGUgcmVzdWx0aW5nIFZBTFVFXF9JUyB3b3VsZCBjb250YWluIG9ubHkgdGhlIHN1cHBvcnRlZAorICAgICBwcm9wZXJ0aWVzIG9mIHRoYXQgc2V0KHNpbmNlIHRoZSB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzIHdvdWxkIGJlCisgICAgIGlnbm9yZWQpLiBJZiBhbiBpbXBsZW1lbnRhdGlvbiBjYXJlcyB0aGF0IG11Y2ggYWJvdXQgZ2V0dGluZyB0aGlzCisgICAgIHJpZ2h0IHRoZW4gaXQgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2hlY2tzCisgICAgIFBST1BcX1VOU09MXF9VUERBVEVcX0xJU1QgZmlyc3QuCisgIC0tIC0tPgorCitJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBwcm9wZXJ0eSBhcmUgb25seSAqKlJFUVVJUkVEKiogdG8gc3VwcG9ydAorYW5kIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisqIGBDTURfUFJPUF9WQUxVRV9HRVRgICgoI2NtZC1wcm9wLXZhbHVlLWdldCkpCisqIGBDTURfUFJPUF9WQUxVRV9TRVRgICgoI2NtZC1wcm9wLXZhbHVlLXNldCkpCisqIGBDTURfUFJPUF9WQUxVRV9JU2AgKCgjY21kLXByb3AtdmFsdWUtaXMpKQorCitJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBwcm9wZXJ0eSAqKk1BWSoqIG9wdGlvbmFsbHkgc3VwcG9ydCBhbmQgdXNlCit0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisqIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRgICgoI2NtZC1wcm9wLXZhbHVlLWluc2VydCkpCisqIGBDTURfUFJPUF9WQUxVRV9SRU1PVkVgICgoI2NtZC1wcm9wLXZhbHVlLXJlbW92ZSkpCisqIGBDTURfUFJPUF9WQUxVRV9JTlNFUlRFRGAgKCgjY21kLXByb3AtdmFsdWUtaW5zZXJ0ZWQpKQorKiBgQ01EX1BST1BfVkFMVUVfUkVNT1ZFRGAgKCgjY21kLXByb3AtdmFsdWUtcmVtb3ZlZCkpCisKK0hvc3QgaW1wbGVtZW50YXRpb25zIHdoaWNoIGFyZSBhaW1pbmcgdG8gbWF4aW1pemUgdGhlaXIgY29tcGF0YWJpbGl0eSBhY3Jvc3MKK2RpZmZlcmVudCBmaXJtd3JlIGltcGxlbWVudGF0aW9ucyAqKlNIT1VMRCBOT1QqKiBhc3N1bWUgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUKK29wdGlvbmFsIGNvbW1hbmRzIGZvciB0aGlzIHByb3BlcnR5LgorCitUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSAqKlNIQUxMKiogYmUgaW5kZXBlbmRlbnQgZm9yIGVhY2ggTkxJLgorCisjIyMgUFJPUCA0MTA1OiBQUk9QX1VOU09MX1VQREFURV9MSVNUIHsjcHJvcC11bnNvbC11cGRhdGUtbGlzdH0KKworKiBSZXF1aXJlZCBvbmx5IGlmIGBDQVBfVU5TT0xfVVBEQVRFX0ZJTFRFUmAgaXMgc2V0LgorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQShJKWAKKworQ29udGFpbnMgYSBsaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNhcGFibGUgb2YgZ2VuZXJhdGluZwordW5zb2xpY2l0ZWQgdmFsdWUgdXBkYXRlcy4gVGhpcyBsaXN0IGNhbiBiZSB1c2VkIHdoZW4gcG9wdWxhdGluZworYFBST1BfVU5TT0xfVVBEQVRFX0ZJTFRFUmAgdG8gZGlzYWJsZSBhbGwgdW5zb2xpY2l0ZWQgcHJvcGVydHkKK3VwZGF0ZXMuCisKK1RoaXMgcHJvcGVydHkgaXMgaW50ZW5kZWQgdG8gZWZmZWN0aXZlbHkgYmVoYXZlIGFzIGEgY29uc3RhbnQKK2ZvciBhIGdpdmVuIE5DUCBmaXJtd2FyZS4KKworTm90ZSB0aGF0IG5vdCBhbGwgcHJvcGVydGllcyB0aGF0IHN1cHBvcnQgdW5zb2xpY2l0ZWQgdXBkYXRlcyBuZWVkIHRvCitiZSBsaXN0ZWQgaGVyZS4gU2NhbiByZXN1bHRzLCBmb3IgZXhhbXBsZSwgYXJlIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0bworZGlyZWN0IGFjdGlvbiBvbiB0aGUgcGFydCBvZiB0aGUgaG9zdCwgc28gdGhvc2UgcHJvcGVydGllcyAqKk1VU1QgTk9UKioKK25vdCBiZSBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuCisKK1RoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5ICoqTUFZKiogYmUgZGlmZmVyZW50IGFjcm9zcyBhdmFpbGFibGUKK05MSXMuCisKKyMjIFN0cmVhbSBQcm9wZXJ0aWVzIHsjcHJvcC1zdHJlYW19CisKKyMjIyBQUk9QIDExMjogUFJPUF9TVFJFQU1fREVCVUcgeyNwcm9wLXN0cmVhbS1kZWJ1Z30KKworKiBUeXBlOiBSZWFkLU9ubHktU3RyZWFtCisqIFBhY2tlZC1FbmNvZGluZzogYERgCisKK09jdGV0czogfCAgICAqbioKKy0tLS0tLS0tfC0tLS0tLS0tLS0tLQorRmllbGRzOiB8IFVURjhfREFUQQorCitUaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5CitmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVGhlIHN0cmVhbSBwcm92aWRlcyBodW1hbi1yZWFkYWJsZSBkZWJ1Z2dpbmcKK291dHB1dCB3aGljaCBtYXkgYmUgZGlzcGxheWVkIGluIHRoZSBob3N0IGxvZ3MuCisKK1RoZSBsb2NhdGlvbiBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaXMgbm90IGFzc3VtZWQgYnkgdGhlIGhvc3Q6IGl0IGlzCit0aGUgTkNQJ3MgcmVzcG9uc2liaWxpdHkgdG8gaW5zZXJ0IG5ld2xpbmUgY2hhcmFjdGVycyB3aGVyZSBuZWVkZWQsCitqdXN0IGxpa2Ugd2l0aCBhbnkgb3RoZXIgdGV4dCBzdHJlYW0uCisKK1RvIHJlY2VpdmUgdGhlIGRlYnVnZ2luZyBzdHJlYW0sIHlvdSB3YWl0IGZvciBgQ01EX1BST1BfVkFMVUVfSVNgCitjb21tYW5kcyBmb3IgdGhpcyBwcm9wZXJ0eSBmcm9tIHRoZSBOQ1AuCisKKyMjIyBQUk9QIDExMzogUFJPUF9TVFJFQU1fUkFXIHsjcHJvcC1zdHJlYW0tcmF3fQorCisqIFR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtCisqIFBhY2tlZC1FbmNvZGluZzogYGREYAorCitPY3RldHM6IHwgICAgICAgIDIgICAgICAgfCAgICAgKm4qICAgIHwgICAgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgRlJBTUVfREFUQV9MRU4gfCBGUkFNRV9EQVRBIHwgRlJBTUVfTUVUQURBVEEKKworVGhpcyBzdHJlYW0gcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBhbmQgcmVjZWl2aW5nIHJhdyBwYWNrZXRzCit0byBhbmQgZnJvbSB0aGUgcmFkaW8uIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGFuZCBkYXRhIGlzCitkZXBlbmRlbnQgb24gdGhlIE1BQyBhbmQgUEhZIGJlaW5nIHVzZWQuCisKK1RoaXMgcHJvcGVydHkgaXMgYSBzdHJlYW1pbmcgcHJvcGVydHksIG1lYW5pbmcgdGhhdCB5b3UgY2Fubm90IGV4cGxpY2l0bHkKK2ZldGNoIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LiBUbyByZWNlaXZlIHRyYWZmaWMsIHlvdSB3YWl0IGZvcgorYENNRF9QUk9QX1ZBTFVFX0lTYCBjb21tYW5kcyB3aXRoIHRoaXMgcHJvcGVydHkgaWQgZnJvbSB0aGUgTkNQLgorCitJbXBsZW1lbnRhdGlvbnMgbWF5IE9QVElPTkFMTFkgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byB0cmFuc21pdCBhcmJpdHJhcnkKK3JhdyBwYWNrZXRzLiBTdXBwb3J0IGZvciB0aGlzIGZlYXR1cmUgaXMgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUKK2BDQVBfV1JJVEFCTEVfUkFXX1NUUkVBTWAgY2FwYWJpbGl0eS4KKworSWYgdGhlIGNhcGFiaWxpdHkgYENBUF9XUklUQUJMRV9SQVdfU1RSRUFNYCBpcyBzZXQsIHRoZW4gcGFja2V0cyB3cml0dGVuCit0byB0aGlzIHN0cmVhbSB3aXRoIGBDTURfUFJPUF9WQUxVRV9TRVRgIHdpbGwgYmUgc2VudCBvdXQgb3ZlciB0aGUgcmFkaW8uCitUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgcmFkaW8gZGlyZWN0bHksIHdpdGggdGhlIHN0YWNrIGJlaW5nCitpbXBsZW1lbnRlZCBvbiB0aGUgaG9zdCBpbnN0ZWFkIG9mIHRoZSBOQ1AuCisKKyMjIyMgRnJhbWUgTWV0YWRhdGEgRm9ybWF0IHsjZnJhbWUtbWV0YWRhdGEtZm9ybWF0fQorCitBbnkgZGF0YSBwYXN0IHRoZSBlbmQgb2YgYEZSQU1FX0RBVEFfTEVOYCBpcyBjb25zaWRlcmVkIG1ldGFkYXRhIGFuZCBpcworT1BUSU9OQUwuIEZyYW1lIG1ldGFkYXRhIE1BWSBiZSBlbXB0eSBvciBwYXJ0aWFsbHkgc3BlY2lmaWVkLiBQYXJ0aWFsbHkKK3NwZWNpZmllZCBtZXRhZGF0YSBNVVNUIGJlIGFjY2VwdGVkLiBEZWZhdWx0IHZhbHVlcyBhcmUgdXNlZCBmb3IgYWxsCit1bnNwZWNpZmllZCBmaWVsZHMuCisKK1RoZSBzYW1lIGdlbmVyYWwgZm9ybWF0IGlzIHVzZWQgZm9yIGBQUk9QX1NUUkVBTV9SQVdgLCBgUFJPUF9TVFJFQU1fTkVUYCwKK2FuZCBgUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFYC4gSXQgY2FuIGJlIHVzZWQgZm9yIGZyYW1lcyBzZW50IGZyb20gdGhlCitOQ1AgdG8gdGhlIGhvc3QgYXMgd2VsbCBhcyBmcmFtZXMgc2VudCBmcm9tIHRoZSBob3N0IHRvIHRoZSBOQ1AuCisKK1RoZSBmcmFtZSBtZXRhZGF0YSBmaWVsZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworIEZpZWxkICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICB8IExlbiAgIHwgRGVmYXVsdAorOi0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tLS0tCitNRF9QT1dFUiB8IChkQm0pIFJTU0kvVFgtUG93ZXIgICAgICAgICAgfCBgY2AgaW50OCAgIHwgMSAgICAgfCAtMTI4CitNRF9OT0lTRSB8IChkQm0pIE5vaXNlIGZsb29yICAgICAgICAgICAgfCBgY2AgaW50OCAgIHwgMSAgICAgfCAtMTI4CitNRF9GTEFHICB8IEZsYWdzIChkZWZpbmVkIGJlbG93KSAgICAgICAgfCBgU2AgdWludDE2IHwgMiAgICAgfAorTURfUEhZICAgfCBQSFktc3BlY2lmaWMgZGF0YSAgICAgICAgICAgIHwgYGRgIGRhdGEgICB8ID49MiAgIHwKK01EX1ZFTkQgIHwgVmVuZG9yLXNwZWNpZmljIGRhdGEgICAgICAgICB8IGBkYCBkYXRhICAgfCA+PTIgICB8CisKK1RoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBpZ25vcmVkIGJ5IHRoZSBOQ1AgZm9yIHBhY2tldHMgc2VudCB0byBpdCBmcm9tCit0aGUgaG9zdDoKKworKiBNRF9OT0lTRQorKiBNRF9GTEFHCisKK1doZW4gc3BlY2lmeWluZyBgTURfUE9XRVJgIGZvciBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZCwgdGhlIGFjdHVhbAordHJhbnNtaXQgcG93ZXIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYFBST1BfUEhZX1RYX1BPV0VSYAorKCgjcHJvcC1waHktdHgtcG93ZXIpKS4gV2hlbiBsZWZ0IHVuc3BlY2lmaWVkIChvciBzZXQgdG8gdGhlIHZhbHVlIC0xMjgpLAorYW4gYXBwcm9wcmlhdGUgdHJhbnNtaXQgcG93ZXIgd2lsbCBiZSBjaG9zZW4gYnkgdGhlIE5DUC4KKworVGhlIGJpdCB2YWx1ZXMgaW4gYE1EX0ZMQUdgIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisKKyBCaXQgICAgIHwgTWFzayAgIHwgTmFtZSAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiBpZiBzZXQKKy0tLS0tLS0tLXwtLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tCisxNSAgICAgICB8IDB4MDAwMSB8IE1EX0ZMQUdfVFggICAgICAgIHwgUGFja2V0IHdhcyB0cmFuc21pdHRlZCwgbm90IHJlY2VpdmVkLgorMTMgICAgICAgfCAweDAwMDQgfCBNRF9GTEFHX0JBRF9GQ1MgICB8IFBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aCBiYWQgRkNTCisxMiAgICAgICB8IDB4MDAwOCB8IE1EX0ZMQUdfRFVQRSAgICAgIHwgUGFja2V0IHNlZW1zIHRvIGJlIGEgZHVwbGljYXRlCiswLTExLCAxNCB8IDB4RkZGMiB8IE1EX0ZMQUdfUkVTRVJWRUQgIHwgRmxhZ3MgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisKK1RoZSBmb3JtYXQgb2YgYE1EX1BIWWAgaXMgc3BlY2lmaWVkIGJ5IHRoZSBQSFkgbGF5ZXIgY3VycmVudGx5IGluIHVzZSwKK2FuZCBtYXkgY29udGFpbiBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBjaGFubmVsLCBMUUksIGFudGVubmEsIG9yIG90aGVyCitwZXJ0YWluZW50IGluZm9ybWF0aW9uLgorCisjIyMgUFJPUCAxMTQ6IFBST1BfU1RSRUFNX05FVCB7I3Byb3Atc3RyZWFtLW5ldH0KKworKiBUeXBlOiBSZWFkLVdyaXRlLVN0cmVhbQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBkRGAKKworT2N0ZXRzOiB8ICAgICAgICAyICAgICAgIHwgICAgICpuKiAgICB8ICAgICAgICpuKgorLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLQorRmllbGRzOiB8IEZSQU1FX0RBVEFfTEVOIHwgRlJBTUVfREFUQSB8IEZSQU1FX01FVEFEQVRBCisKK1RoaXMgc3RyZWFtIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhIHBhY2tldHMKK3RvIGFuZCBmcm9tIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgbmV0d29yay4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUKK21ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbCBiZWluZyB1c2VkLgorCitUaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5CitmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVG8gcmVjZWl2ZSB0cmFmZmljLCB5b3Ugd2FpdCBmb3IKK2BDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4KKworVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsIGBDTURfUFJPUF9WQUxVRV9TRVRgIG9uIHRoaXMgcHJvcGVydHkgd2l0aAordGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKK0FueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiBgRlJBTUVfREFUQV9MRU5gIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiAoI2ZyYW1lLW1ldGFkYXRhLWZvcm1hdCkuCisKKyMjIyBQUk9QIDExNTogUFJPUF9TVFJFQU1fTkVUX0lOU0VDVVJFIHsjcHJvcC1zdHJlYW0tbmV0LWluc2VjdXJlfQorCisqIFR5cGU6IFJlYWQtV3JpdGUtU3RyZWFtCisqIFBhY2tlZC1FbmNvZGluZzogYGREYAorCitPY3RldHM6IHwgICAgICAgIDIgICAgICAgfCAgICAgKm4qICAgIHwgICAgICAgKm4qCistLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tCitGaWVsZHM6IHwgRlJBTUVfREFUQV9MRU4gfCBGUkFNRV9EQVRBIHwgRlJBTUVfTUVUQURBVEEKKworVGhpcyBzdHJlYW0gcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBhbmQgcmVjZWl2aW5nIHVuZW5jcnlwdGVkCithbmQgdW5hdXRoZW50aWNhdGVkIGRhdGEgcGFja2V0cyB0byBhbmQgZnJvbSBuZWFyYnkgZGV2aWNlcyBmb3IgdGhlCitwdXJwb3NlcyBvZiBkZXZpY2UgY29tbWlzc2lvbmluZy4gVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgZnJhbWUKK21ldGFkYXRhIGFuZCBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayBwcm90b2NvbCBiZWluZyB1c2VkLgorCitUaGlzIHByb3BlcnR5IGlzIGEgc3RyZWFtaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoYXQgeW91IGNhbm5vdCBleHBsaWNpdGx5CitmZXRjaCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4gVG8gcmVjZWl2ZSB0cmFmZmljLCB5b3Ugd2FpdCBmb3IKK2BDTURfUFJPUF9WQUxVRV9JU2AgY29tbWFuZHMgd2l0aCB0aGlzIHByb3BlcnR5IGlkIGZyb20gdGhlIE5DUC4KKworVG8gc2VuZCBuZXR3b3JrIHBhY2tldHMsIHlvdSBjYWxsIGBDTURfUFJPUF9WQUxVRV9TRVRgIG9uIHRoaXMgcHJvcGVydHkgd2l0aAordGhlIHZhbHVlIG9mIHRoZSBwYWNrZXQuCisKK0FueSBkYXRhIHBhc3QgdGhlIGVuZCBvZiBgRlJBTUVfREFUQV9MRU5gIGlzIGNvbnNpZGVyZWQgbWV0YWRhdGEsIHRoZQorZm9ybWF0IG9mIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiAoI2ZyYW1lLW1ldGFkYXRhLWZvcm1hdCkuCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWRlYnVnLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtZGVidWcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyNjI2MQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWRlYnVnLm1kCkBAIC0wLDAgKzEsMzIgQEAKKyMjIERlYnVnIFByb3BlcnRpZXMgeyNwcm9wLWRlYnVnfQorCisjIyMgUFJPUCAxNjM4NDogUFJPUF9ERUJVR19URVNUX0FTU0VSVCB7I3Byb3AtZGVidWctdGVzdC1hc3NlcnR9CisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitSZWFkaW5nIHRoaXMgcHJvcGVydHkgd2lsbCBjYXVzZSBhbiBhc3NlcnQgb24gdGhlIE5DUC4gVGhpcworaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgdGhlIGFzc2VydCBmdW5jdGlvbmFsaXR5IG9mCit1bmRlcmx5aW5nIHBsYXRmb3JtL05DUC4gQXNzZXJ0IHNob3VsZCBpZGVhbGx5IGNhdXNlIHRoZQorTkNQIHRvIHJlc2V0LCBidXQgaWYgYGFzc2VydGAgaXMgbm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZAorYm9vbGVhbiB2YWx1ZSBvZiBgZmFsc2VgIGlzIHJldHVybmVkIGluIHJlc3BvbnNlLgorCisjIyMgUFJPUCAxNjM4NTogUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMIHsjcHJvcC1kZWJ1Zy1uY3AtbG9nLWxldmVsfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK1Byb3ZpZGVzIGFjY2VzcyB0byB0aGUgTkNQIGxvZyBsZXZlbC4gQ3VycmVudGx5IGRlZmluZWQgdmFsdWVzIGFyZSAod2hpY2ggZm9sbG93cwordGhlIFJGQyA1NDI0KToKKworICogIDA6IEVtZXJnZW5jeSAoZW1lcmcpLgorICogIDE6IEFsZXJ0IChhbGVydCkuCisgKiAgMjogQ3JpdGljYWwgKGNyaXQpLgorICogIDM6IEVycm9yIChlcnIpLgorICogIDQ6IFdhcm5pbmcgKHdhcm4pLgorICogIDU6IE5vdGljZSAobm90aWNlKS4KKyAqICA2OiBJbmZvcm1hdGlvbiAoaW5mbykuCisgKiAgNzogRGVidWcgKGRlYnVnKS4KKworSWYgdGhlIE5DUCBzdXBwb3J0cyBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sLCBzZXR0aW5nIHRoaXMgcHJvcGVydHkKK2NoYW5nZXMgdGhlIGxvZyBsZXZlbCBhY2NvcmRpbmdseS4gR2V0dGluZyB0aGUgdmFsdWUgcmV0dXJucyB0aGUgY3VycmVudAorbG9nIGxldmVsLiAgSWYgdGhlIGR5bmFtaWMgbG9nIGxldmVsIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCwgc2V0dGluZyB0aGlzCitwcm9wZXJ0eSByZXR1cm5zIGEgYFBST1BfTEFTVF9TVEFUVVNgIHdpdGggYFNUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1BgLgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtaXB2Ni5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWlwdjYubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NzRkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLWlwdjYubWQKQEAgLTAsMCArMSw0MSBAQAorIyMgSVB2NiBQcm9wZXJ0aWVzIHsjcHJvcC1pcHY2fQorCisjIyMgUFJPUCA5NjogUFJPUF9JUFY2X0xMX0FERFIgeyNwcm9wLWlwdjYtbGwtYWRkcn0KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYDZgCisKK0lQdjYgQWRkcmVzcworCisjIyMgUFJPUCA5NzogUFJPUF9JUFY2X01MX0FERFIgeyNwcm9wLWlwdjYtbWwtYWRkcn0KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYDZgCisKK0lQdjYgQWRkcmVzcyArIFByZWZpeCBMZW5ndGgKKworIyMjIFBST1AgOTg6IFBST1BfSVBWNl9NTF9QUkVGSVggeyNwcm9wLWlwdjYtbWwtcHJlZml4fQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYDZDYAorCitJUHY2IFByZWZpeCArIFByZWZpeCBMZW5ndGgKKworIyMjIFBST1AgOTk6IFBST1BfSVBWNl9BRERSRVNTX1RBQkxFIHsjcHJvcC1pcHY2LWFkZHJlc3MtdGFibGV9CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQSh0KDZDTExDKSlgCisKK0FycmF5IG9mIHN0cnVjdHVyZXMgY29udGFpbmluZzoKKworKiBgNmA6IElQdjYgQWRkcmVzcworKiBgQ2A6IE5ldHdvcmsgUHJlZml4IExlbmd0aAorKiBgTGA6IFZhbGlkIExpZmV0aW1lCisqIGBMYDogUHJlZmVycmVkIExpZmV0aW1lCisqIGBDYDogRmxhZ3MKKworIyMjIFBST1AgMTAxOiBQUk9QX0lQdjZfSUNNUF9QSU5HX09GRkxPQUQKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitBbGxvdyB0aGUgTkNQIHRvIGRpcmVjdGx5IHJlc3BvbmQgdG8gSUNNUCBwaW5nIHJlcXVlc3RzLiBJZiB0aGlzIGlzCit0dXJuZWQgb24sIHBpbmcgcmVxdWVzdCBJQ01QIHBhY2tldHMgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LgorCitEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuCisKZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLW1hYy5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLW1hYy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDMwYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtbWFjLm1kCkBAIC0wLDAgKzEsMjA0IEBACisjIyBNQUMgUHJvcGVydGllcyB7I3Byb3AtbWFjfQorCisjIyMgUFJPUCA0ODogUFJPUF9NQUNfU0NBTl9TVEFURSB7I3Byb3AtbWFjLXNjYW4tc3RhdGV9CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AKKyogVW5pdDogRW51bWVyYXRpb24KKworUG9zc2libGUgVmFsdWVzOgorCisqIDA6IGBTQ0FOX1NUQVRFX0lETEVgCisqIDE6IGBTQ0FOX1NUQVRFX0JFQUNPTmAKKyogMjogYFNDQU5fU1RBVEVfRU5FUkdZYAorKiAzOiBgU0NBTl9TVEFURV9ESVNDT1ZFUmAKKworU2V0IHRvIGBTQ0FOX1NUQVRFX0JFQUNPTmAgdG8gc3RhcnQgYW4gYWN0aXZlIHNjYW4uCitCZWFjb25zIHdpbGwgYmUgZW1pdHRlZCBmcm9tIGBQUk9QX01BQ19TQ0FOX0JFQUNPTmAuCisKK1NldCB0byBgU0NBTl9TVEFURV9FTkVSR1lgIHRvIHN0YXJ0IGFuIGVuZXJneSBzY2FuLgorQ2hhbm5lbCBlbmVyZ3kgcmVzdWx0IHdpbGwgYmUgcmVwb3J0ZWQgYnkgZW1pc3Npb25zCitvZiBgUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUYCAocGVyIGNoYW5uZWwpLgorCitTZXQgdG8gYFNDQU5fU1RBVEVfRElTT1ZFUmAgdG8gc3RhcnQgYSBUaHJlYWQgTUxFIGRpc2NvdmVyeQorc2NhbiBvcGVyYXRpb24uIERpc2NvdmVyeSBzY2FuIHJlc3VsdCB3aWxsIGJlIGVtaXR0ZWQgZnJvbQorYFBST1BfTUFDX1NDQU5fQkVBQ09OYC4KKworVmFsdWUgc3dpdGNoZXMgdG8gYFNDQU5fU1RBVEVfSURMRWAgd2hlbiBzY2FuIGlzIGNvbXBsZXRlLgorCisjIyMgUFJPUCA0OTogUFJPUF9NQUNfU0NBTl9NQVNLIHsjcHJvcC1tYWMtc2Nhbi1tYXNrfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEoQylgCisqIFVuaXQ6IExpc3Qgb2YgY2hhbm5lbHMgdG8gc2NhbgorCisKKyMjIyBQUk9QIDUwOiBQUk9QX01BQ19TQ0FOX1BFUklPRCB7I3Byb3AtbWFjLXNjYW4tcGVyaW9kfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYFNgICh1aW50MTYpCisqIFVuaXQ6IG1pbGxpc2Vjb25kcyBwZXIgY2hhbm5lbAorCisjIyMgUFJPUCA1MTogUFJPUF9NQUNfU0NBTl9CRUFDT04geyNwcm9wLW1hYy1zY2FuLWJlYWNvbn0KKyogVHlwZTogUmVhZC1Pbmx5LVN0cmVhbQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDY2RkYCAob3IgYENjdChFU1NjKXQoaUNVZGQpYCkKKworT2N0ZXRzOiB8IDEgIHwgICAxICB8ICAgIDIgICAgfCAgICpuKiAgICB8ICAgIDIgICAgfCAgICpuKgorLS0tLS0tLS18LS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0KK0ZpZWxkczogfCBDSCB8IFJTU0kgfCBNQUNfTEVOIHwgTUFDX0RBVEEgfCBORVRfTEVOIHwgTkVUX0RBVEEKKworU2NhbiBiZWFjb25zIGhhdmUgdHdvIGVtYmVkZGVkIHN0cnVjdHVyZXMgd2hpY2ggY29udGFpbgoraW5mb3JtYXRpb24gYWJvdXQgdGhlIE1BQyBsYXllciBhbmQgdGhlIE5FVCBsYXllci4gVGhlaXIKK2Zvcm1hdCBkZXBlbmRzIG9uIHRoZSBNQUMgYW5kIE5FVCBsYXllciBjdXJyZW50bHkgaW4gdXNlLgorVGhlIGZvcm1hdCBiZWxvdyBpcyBmb3IgYW4gODAyLjE1LjQgTUFDIHdpdGggVGhyZWFkOgorCisqIGBDYDogQ2hhbm5lbAorKiBgY2A6IFJTU0kgb2YgdGhlIGJlYWNvbgorKiBgdGA6IE1BQyBsYXllciBwcm9wZXJ0aWVzICg4MDIuMTUuNCBsYXllciBzaG93biBiZWxvdyBmb3IgY29udmVuaWVuY2UpCisgICogYEVgOiBMb25nIGFkZHJlc3MKKyAgKiBgU2A6IFNob3J0IGFkZHJlc3MKKyAgKiBgU2A6IFBBTi1JRAorICAqIGBjYDogTFFJCisqIE5FVCBsYXllciBwcm9wZXJ0aWVzIChTdGFuZGFyZCBuZXQgbGF5ZXIgc2hvd24gYmVsb3cgZm9yIGNvbnZlbmllbmNlKQorICAqIGBpYDogUHJvdG9jb2wgTnVtYmVyCisgICogYENgOiBGbGFncworICAqIGBVYDogTmV0d29yayBOYW1lCisgICogYGRgOiBYUEFOSUQKKyAgKiBgZGA6IFN0ZWVyaW5nIGRhdGEKKworRXh0cmEgcGFyYW1ldGVycyBtYXkgYmUgYWRkZWQgdG8gZWFjaCBvZiB0aGUgc3RydWN0dXJlcworaW4gdGhlIGZ1dHVyZSwgc28gY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gcmVhZCB0aGUgbGVuZ3RoCit0aGF0IHByZXBlbmRzIGVhY2ggc3RydWN0dXJlLgorCisjIyMgUFJPUCA1MjogUFJPUF9NQUNfMTVfNF9MQUREUiB7I3Byb3AtbWFjLTE1LTQtbGFkZHJ9CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgRWAKKworVGhlIDgwMi4xNS40IGxvbmcgYWRkcmVzcyBvZiB0aGlzIG5vZGUuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40CisKKyMjIyBQUk9QIDUzOiBQUk9QX01BQ18xNV80X1NBRERSIHsjcHJvcC1tYWMtMTUtNC1zYWRkcn0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBTYAorCitUaGUgODAyLjE1LjQgc2hvcnQgYWRkcmVzcyBvZiB0aGlzIG5vZGUuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBwcmVzZW50IG9uIE5DUHMgd2hpY2ggaW1wbGVtZW50IDgwMi4xNS40CisKKyMjIyBQUk9QIDU0OiBQUk9QX01BQ18xNV80X1BBTklEIHsjcHJvcC1tYWMtMTUtNC1wYW5pZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBTYAorCitUaGUgODAyLjE1LjQgUEFOSUQgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aC4KKworVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHByZXNlbnQgb24gTkNQcyB3aGljaCBpbXBsZW1lbnQgODAyLjE1LjQKKworIyMjIFBST1AgNTU6IFBST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCB7I3Byb3AtbWFjLXJhdy1zdHJlYW0tZW5hYmxlZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitTZXQgdG8gdHJ1ZSB0byBlbmFibGUgcmF3IE1BQyBmcmFtZXMgdG8gYmUgZW1pdHRlZCBmcm9tIGBQUk9QX1NUUkVBTV9SQVdgLgorU2VlICgjcHJvcC1zdHJlYW0tcmF3KS4KKworIyMjIFBST1AgNTY6IFBST1BfTUFDX1BST01JU0NVT1VTX01PREUgeyNwcm9wLW1hYy1wcm9taXNjdW91cy1tb2RlfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK1Bvc3NpYmxlIFZhbHVlczoKKworSWQgfCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uCistLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0KKyAwIHwgYE1BQ19QUk9NSVNDVU9VU19NT0RFX09GRmAgICAgfCBOb3JtYWwgTUFDIGZpbHRlcmluZyBpcyBpbiBwbGFjZS4KKyAxIHwgYE1BQ19QUk9NSVNDVU9VU19NT0RFX05FVFdPUktgfCBBbGwgTUFDIHBhY2tldHMgbWF0Y2hpbmcgbmV0d29yayBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4KKyAyIHwgYE1BQ19QUk9NSVNDVU9VU19NT0RFX0ZVTExgICAgfCBBbGwgZGVjb2RlZCBNQUMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4KKworU2VlICgjcHJvcC1zdHJlYW0tcmF3KS4KKworIyMjIFBST1AgNTc6IFBST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCB7I3Byb3AtbWFjLWVzY2FuLXJlc3VsdH0KKyogVHlwZTogUmVhZC1Pbmx5LVN0cmVhbQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDY2AKKworVGhpcyBwcm9wZXJ0eSBpcyBlbWl0dGVkIGR1cmluZyBlbmVyZ3kgc2NhbiBvcGVyYXRpb24KK3BlciBzY2FubmVkIGNoYW5uZWwgd2l0aCBmb2xsb3dpbmcgZm9ybWF0OgorCisqIGBDYDogQ2hhbm5lbAorKiBgY2A6IFJTU0kgKGluIGRCbSkKKworIyMjIFBST1AgNTg6IFBST1BfTUFDX0RBVEFfUE9MTF9QRVJJT0QgeyNwcm9wLW1hYy1kYXRhLXBvbGwtcGVyaW9kCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgTGAKKworVGhlICh1c2VyLXNwZWNpZmllZCkgZGF0YSBwb2xsICg4MDIuMTUuNCBNQUMgRGF0YSBSZXF1ZXN0KSBwZXJpb2QKK2luIG1pbGxpc2Vjb25kcy4gVmFsdWUgemVybyBtZWFucyB0aGVyZSBpcyBubyB1c2VyLXNwZWNpZmllZAorcG9sbCBwZXJpb2QsIGFuZCB0aGUgbmV0d29yayBzdGFjayBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIHBlcmlvZAorYmFzZWQgb24gdGhlIE1MRSBDaGlsZCBUaW1lb3V0LgorCitJZiB0aGUgdmFsdWUgaXMgbm9uLXplcm8sIGl0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBwZXJpb2QgYmV0d2VlbgorZGF0YSBwb2xsIHRyYW5zbWlzc2lvbnMuIE5vdGUgdGhhdCB0aGUgbmV0d29yayBzdGFjayBtYXkgc2VuZCBkYXRhCityZXF1ZXN0IHRyYW5zbWlzc2lvbnMgbW9yZSBmcmVxdWVudGx5IHdoZW4gZXhwZWN0aW5nIGEgY29udHJvbC1tZXNzYWdlCisoZS5nLiwgd2hlbiB3YWl0aW5nIGZvciBhbiBNTEUgQ2hpbGQgSUQgUmVzcG9uc2UpLgorCitUaGlzIHByb3BlcnR5IGlzIG9ubHkgcHJlc2VudCBvbiBOQ1BzIHdoaWNoIGltcGxlbWVudCA4MDIuMTUuNC4KKworIyMjIFBST1AgNDg2NDogUFJPUF9NQUNfV0hJVEVMSVNUICB7I3Byb3AtbWFjLXdoaXRlbGlzdH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKFQoRWMpKWAKKyogUmVxdWlyZWQgY2FwYWJpbGl0eTogYENBUF9NQUNfV0hJVEVMSVNUYAorCitTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKworKiBgRWA6IEVVSTY0IGFkZHJlc3Mgb2Ygbm9kZQorKiBgY2A6IE9wdGlvbmFsIFJTU0ktb3ZlcnJpZGUgdmFsdWUuIFRoZSB2YWx1ZSAxMjcgaW5kaWNhdGVzCisgICAgICAgdGhhdCB0aGUgUlNTSS1vdmVycmlkZSBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGZvciB0aGlzCisgICAgICAgYWRkcmVzcy4gSWYgdGhpcyB2YWx1ZSBpcyBvbWl0dGVkIHdoZW4gc2V0dGluZyBvcgorICAgICAgIGluc2VydGluZywgaXQgaXMgYXNzdW1lZCB0byBiZSAxMjcuIFRoaXMgcGFyYW1ldGVyIGlzCisgICAgICAgaWdub3JlZCB3aGVuIHJlbW92aW5nLgorCisjIyMgUFJPUCA0ODY1OiBQUk9QX01BQ19XSElURUxJU1RfRU5BQkxFRCAgeyNwcm9wLW1hYy13aGl0ZWxpc3QtZW5hYmxlZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX01BQ19XSElURUxJU1RgCisKKyMjIyBQUk9QIDQ4Njc6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRU5BQkxFRCAgeyNwcm9wLW1hYy1zcmMtbWF0Y2gtZW5hYmxlZH0KKyogVHlwZTogV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKworU2V0IHRvIHRydWUgdG8gZW5hYmxlIHJhZGlvIHNvdXJjZSBtYXRjaGluZyBvciBmYWxzZSB0byBkaXNhYmxlIGl0LiBUaGlzIHByb3BlcnR5CitpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYFNQSU5FTF9DQVBfTUFDX1JBV2AgY2FwYWJpbGl0eSBpcyBwcmVzZW50LiBUaGUgc291cmNlIG1hdGNoCitmdW5jdGlvbmFsaXR5IGlzIHVzZWQgYnkgcmFkaW9zIHdoZW4gZ2VuZXJhdGluZyBBQ0tzLiBUaGUgc2hvcnQgYW5kIGV4dGVuZGVkIGFkZHJlc3MKK2xpc3RzIGFyZSB1c2VkIGZvciBzZXR0aW5ncyB0aGUgRnJhbWUgUGVuZGluZyBiaXQgaW4gdGhlIEFDS3MuCisKKyMjIyBQUk9QIDQ4Njg6IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTICB7I3Byb3AtbWFjLXNyYy1tYXRjaC1zaG9ydC1hZGRyZXNzZXN9CisqIFR5cGU6IFdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEoUylgCisKK0NvbmZpZ3VyZXMgdGhlIGxpc3Qgb2Ygc2hvcnQgYWRkcmVzc2VzIHVzZWQgZm9yIHNvdXJjZSBtYXRjaGluZy4gVGhpcyBwcm9wZXJ0eQoraXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGBTUElORUxfQ0FQX01BQ19SQVdgIGNhcGFiaWxpdHkgaXMgcHJlc2VudC4KKworU3RydWN0dXJlIFBhcmFtZXRlcnM6CisKKyogYFNgOiBTaG9ydCBhZGRyZXNzIGZvciBoYXJkd2FyZSBnZW5lcmF0ZWQgQUNLcworCisjIyMgUFJPUCA0ODY5OiBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyAgeyNwcm9wLW1hYy1zcmMtbWF0Y2gtZXh0ZW5kZWQtYWRkcmVzc2VzfQorKiBUeXBlOiBXcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKEUpYAorCitDb25maWd1cmVzIHRoZSBsaXN0IG9mIGV4dGVuZGVkIGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcuIFRoaXMgcHJvcGVydHkKK2lzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgU1BJTkVMX0NBUF9NQUNfUkFXYCBjYXBhYmlsaXR5IGlzIHByZXNlbnQuCisKK1N0cnVjdHVyZSBQYXJhbWV0ZXJzOgorCisqIGBFYDogRVVJNjQgYWRkcmVzcyBmb3IgaGFyZHdhcmUgZ2VuZXJhdGVkIEFDS3MKKworIyMjIFBST1AgNDg3MDogUFJPUF9NQUNfQkxBQ0tMSVNUICB7I3Byb3AtbWFjLWJsYWNrbGlzdH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKFQoRSkpYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX01BQ19XSElURUxJU1RgCisKK1N0cnVjdHVyZSBQYXJhbWV0ZXJzOgorCisqIGBFYDogRVVJNjQgYWRkcmVzcyBvZiBub2RlCisKKyMjIyBQUk9QIDQ4NzE6IFBST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEICB7I3Byb3AtbWFjLWJsYWNrbGlzdC1lbmFibGVkfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisqIFJlcXVpcmVkIGNhcGFiaWxpdHk6IGBDQVBfTUFDX1dISVRFTElTVGAKKwpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtbmV0Lm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AtbmV0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTgxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1uZXQubWQKQEAgLTAsMCArMSw3MCBAQAorIyMgTkVUIFByb3BlcnRpZXMgeyNwcm9wLW5ldH0KKworIyMjIFBST1AgNjQ6IFBST1BfTkVUX1NBVkVEIHsjcHJvcC1uZXQtc2F2ZWR9CisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuZXR3b3JrIHN0YXRlIHN0b3JlZC9zYXZlZC4KKworIyMjIFBST1AgNjU6IFBST1BfTkVUX0lGX1VQICB7I3Byb3AtbmV0LWlmLXVwfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisKK05ldHdvcmsgaW50ZXJmYWNlIHVwL2Rvd24gc3RhdHVzLiBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKK3plcm8gaW5kaWNhdGVzIGRvd24uCisKKyMjIyBQUk9QIDY2OiBQUk9QX05FVF9TVEFDS19VUCAgeyNwcm9wLW5ldC1zdGFjay11cH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorKiBVbml0OiBFbnVtZXJhdGlvbgorCitUaHJlYWQgc3RhY2sgb3BlcmF0aW9uYWwgc3RhdHVzLiBOb24temVybyAoc2V0IHRvIDEpIGluZGljYXRlcyB1cCwKK3plcm8gaW5kaWNhdGVzIGRvd24uCisKKyMjIyBQUk9QIDY3OiBQUk9QX05FVF9ST0xFIHsjcHJvcC1uZXQtcm9sZX0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorKiBVbml0OiBFbnVtZXJhdGlvbgorCitWYWx1ZXM6CisKKyogMDogYE5FVF9ST0xFX0RFVEFDSEVEYAorKiAxOiBgTkVUX1JPTEVfQ0hJTERgCisqIDI6IGBORVRfUk9MRV9ST1VURVJgCisqIDM6IGBORVRfUk9MRV9MRUFERVJgCisKKyMjIyBQUk9QIDY4OiBQUk9QX05FVF9ORVRXT1JLX05BTUUgIHsjcHJvcC1uZXQtbmV0d29yay1uYW1lfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYFVgCisKKyMjIyBQUk9QIDY5OiBQUk9QX05FVF9YUEFOSUQgICB7I3Byb3AtbmV0LXhwYW5pZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCisjIyMgUFJPUCA3MDogUFJPUF9ORVRfTUFTVEVSX0tFWSAgIHsjcHJvcC1uZXQtbWFzdGVyLWtleX0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCisjIyMgUFJPUCA3MTogUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIgICB7I3Byb3AtbmV0LWtleS1zZXF1ZW5jZS1jb3VudGVyfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYExgCisKKyMjIyBQUk9QIDcyOiBQUk9QX05FVF9QQVJUSVRJT05fSUQgICB7I3Byb3AtbmV0LXBhcnRpdGlvbi1pZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBMYAorCitUaGUgcGFydGl0aW9uIElEIG9mIHRoZSBwYXJ0aXRpb24gdGhhdCB0aGlzIG5vZGUgaXMgYSBtZW1iZXIgb2YuCisKKyMjIyBQUk9QIDczOiBQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcgICB7I3Byb3AtbmV0LXJlcXVpcmUtam9pbi1leGlzdGluZ30KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCisjIyMgUFJPUCA3NDogUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUgICB7I3Byb3AtbmV0LWtleS1zd3RpY2gtZ3VhcmR0aW1lfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYExgCisKKyMjIyBQUk9QIDc1OiBQUk9QX05FVF9QU0tDICAgeyNwcm9wLW5ldC1wc2tjfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYERgCisKKwpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3Atb3ZlcnZpZXcubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1vdmVydmlldy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc3YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3Atb3ZlcnZpZXcubWQKQEAgLTAsMCArMSw2OSBAQAorU3BpbmVsIGlzIGxhcmdlbHkgYSBwcm9wZXJ0eS1iYXNlZCBwcm90b2NvbCwgc2ltaWxhciB0byByZXByZXNlbnRhdGlvbmFsIHN0YXRlIHRyYW5zZmVyIChSRVNUKSwgd2l0aCBhIHByb3BlcnR5IGRlZmluZWQgZm9yIGV2ZXJ5IGF0dHJpYnV0ZSB0aGF0IGFuIE9TIG5lZWRzIHRvIGNyZWF0ZSwgcmVhZCwgdXBkYXRlIG9yIGRlbGV0ZSBpbiB0aGUgZnVuY3Rpb24gb2YgYW4gSVB2NiBpbnRlcmZhY2UuIFRoZSBpbnNwaXJhdGlvbiBvZiB0aGlzIGFwcHJvYWNoIHdhcyBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycyBmb3IgcGVyaXBoZXJhbHMuIFRoZSBnb2FsIGlzIHRvIGF2b2lkLCBhcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGUgdXNlIG9mIGxhcmdlIGNvbXBsaWNhdGVkIHN0cnVjdHVyZXMgYW5kL29yIG1ldGhvZCBhcmd1bWVudCBsaXN0cy4gVGhlIHJlYXNvbiBmb3IgYXZvaWRpbmcgdGhlc2UgaXMgYmVjYXVzZSB0aGV5IGhhdmUgYSB0ZW5kZW5jeSB0byBjaGFuZ2UsIGVzcGVjaWFsbHkgZWFybHkgaW4gZGV2ZWxvcG1lbnQuIEFkZGluZyBvciByZW1vdmluZyBhIHByb3BlcnR5IGZyb20gYSBzdHJ1Y3R1cmUgY2FuIHJlbmRlciB0aGUgZW50aXJlIHByb3RvY29sIGluY29tcGF0aWJsZS4gQnkgdXNpbmcgcHJvcGVydGllcywgeW91IHNpbXBseSBleHRlbmQgdGhlIHByb3RvY29sIHdpdGggYW4gYWRkaXRpb25hbCBwcm9wZXJ0eS4KKworQWxtb3N0IGFsbCBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBwcm9wZXJ0aWVzLiBNb3N0IG5ldyBmZWF0dXJlcyB0aGF0IGFyZSBpbml0aWFsbHkgcHJvcG9zZWQgYXMgY29tbWFuZHMgY2FuIGJlIGFkYXB0ZWQgdG8gYmUgcHJvcGVydHktYmFzZWQgaW5zdGVhZC4gTm90YWJsZSBleGNlcHRpb25zIGluY2x1ZGUgIkhvc3QgQnVmZmVyIE9mZmxvYWQiICgoI2ZlYXR1cmUtaG9zdC1idWZmZXItb2ZmbG9hZCkpIGFuZCAiTmV0d29yayBTYXZlIiAoKCNmZWF0dXJlLW5ldHdvcmstc2F2ZSkpLgorCitJbiBTcGluZWwsIHByb3BlcnRpZXMgYXJlIGtleWVkIGJ5IGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyLDA5NywxNTEgKFNlZSAoI3BhY2tlZC11bnNpZ25lZC1pbnRlZ2VyKSkuCisKKyMjIFByb3BlcnR5IE1ldGhvZHMgIyMjCisKK1Byb3BlcnRpZXMgbWF5IHN1cHBvcnQgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisqICAgYFZBTFVFX0dFVGAgKCgjY21kLXByb3AtdmFsdWUtZ2V0KSkKKyogICBgVkFMVUVfU0VUYCAoKCNjbWQtcHJvcC12YWx1ZS1zZXQpKQorKiAgIGBWQUxVRV9JTlNFUlRgICAoKCNjbWQtcHJvcC12YWx1ZS1pbnNlcnQpKQorKiAgIGBWQUxVRV9SRU1PVkVgICAoKCNjbWQtcHJvcC12YWx1ZS1yZW1vdmUpKQorCitBZGRpdGlvbmFsbHksIHRoZSBOQ1AgY2FuIHNlbmQgdXBkYXRlcyB0byB0aGUgaG9zdCAoZWl0aGVyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpIHRoYXQgaW5mb3JtIHRoZSBob3N0IGFib3V0IGNoYW5nZXMgdG8gc3BlY2lmaWMgcHJvcGVydGllczoKKworKiAgIGBWQUxVRV9JU2AgICgoI2NtZC1wcm9wLXZhbHVlLWlzKSkKKyogICBgVkFMVUVfSU5TRVJURURgICAoKCNjbWQtcHJvcC12YWx1ZS1pbnNlcnRlZCkpCisqICAgYFZBTFVFX1JFTU9WRURgICAoKCNjbWQtcHJvcC12YWx1ZS1yZW1vdmVkKSkKKworIyMgUHJvcGVydHkgVHlwZXMgIyMjCisKK0NvbmNlcHR1YWxseSwgdGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBwcm9wZXJ0aWVzOgorCisqICAgU2luZ2xlLXZhbHVlIHByb3BlcnRpZXMKKyogICBNdWx0aXBsZS12YWx1ZSAoQXJyYXkpIHByb3BlcnRpZXMKKyogICBTdHJlYW0gcHJvcGVydGllcworCisjIyMgU2luZ2xlLVZhbHVlIFByb3BlcnRpZXMgIyMjIworCitTaW5nbGUtdmFsdWUgcHJvcGVydGllcyBhcmUgcHJvcGVydGllcyB0aGF0IGhhdmUgYSBzaW1wbGUgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgdmFsdWUuIEV4YW1wbGVzIHdvdWxkIGJlOgorCisqICAgQ3VycmVudCByYWRpbyBjaGFubmVsIChSZXByZXNlbnRlZCBhcyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyKQorKiAgIE5ldHdvcmsgbmFtZSAoUmVwcmVzZW50ZWQgYXMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZykKKyogICA4MDJcLjE1LjQgUEFOIElEIChSZXByZXNlbnRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcikKKworVGhlIHZhbGlkIG9wZXJhdGlvbnMgb24gdGhlc2Ugc29ydHMgb2YgcHJvcGVydGllcyBhcmUgYEdFVGAgYW5kIGBTRVRgLgorCisjIyMgTXVsdGlwbGUtVmFsdWUgUHJvcGVydGllcyAjIyMjCisKK011bHRpcGxlLVZhbHVlIFByb3BlcnRpZXMgaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBFeGFtcGxlcyB3b3VsZCBiZToKKworKiAgIExpc3Qgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBoYXJkd2FyZS4KKyogICBMaXN0IG9mIElQdjYgYWRkcmVzc2VzIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UuCisqICAgTGlzdCBvZiBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBOQ1AuCisKK1RoZSB2YWxpZCBvcGVyYXRpb25zIG9uIHRoZXNlIHNvcnRzIG9mIHByb3BlcnRpZXMgYXJlIGBWQUxVRV9HRVRgLCBgVkFMVUVfU0VUYCwgYFZBTFVFX0lOU0VSVGAsIGFuZCBgVkFMVUVfUkVNT1ZFYC4KKworV2hlbiB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB1c2luZyBgVkFMVUVfR0VUYCwgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMgaW4gdGhlIGxpc3QuIElmIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGZvciBhbiBpbmRpdmlkdWFsIGl0ZW0gaW4gdGhlIGxpc3QgaXMgbm90IGRlZmluZWQgYnkgdGhlIHR5cGUgdGhlbiBlYWNoIGl0ZW0gcmV0dXJuZWQgaW4gdGhlIGxpc3QgaXMgcHJlcGVuZGVkIHdpdGggYSBsZW5ndGggKFNlZSAoI2FycmF5cykpLiBUaGUgb3JkZXIgb2YgdGhlIHJldHVybmVkIGl0ZW1zLCB1bmxlc3MgZXhwbGljaXRseSBkZWZpbmVkIGZvciB0aGF0IHNwZWNpZmljIHByb3BlcnR5LCBpcyB1bmRlZmluZWQuCisKK2BWQUxVRV9TRVRgIHByb3ZpZGVzIGEgd2F5IHRvIGNvbXBsZXRlbHkgcmVwbGFjZSBhbGwgcHJldmlvdXMgdmFsdWVzLiBDYWxsaW5nIGBWQUxVRV9TRVRgIHdpdGggYW4gZW1wdHkgdmFsdWUgZWZmZWN0aXZlbHkgaW5zdHJ1Y3RzIHRoZSBOQ1AgdG8gY2xlYXIgdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkuCisKK2BWQUxVRV9JTlNFUlRgIGFuZCBgVkFMVUVfUkVNT1ZFYCBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIHRoZSBpbnNlcnRpb24gb3IgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIGl0ZW1zICpieSB2YWx1ZSouIFRoZSBwYXlsb2FkIGZvciB0aGVzZSBjb21tYW5kcyBpcyBhIHBsYWluIHNpbmdsZSB2YWx1ZS4KKworIyMjIFN0cmVhbSBQcm9wZXJ0aWVzICMjIyMKKworU3RyZWFtIHByb3BlcnRpZXMgYXJlIHNwZWNpYWwgcHJvcGVydGllcyByZXByZXNlbnRpbmcgc3RyZWFtcyBvZiBkYXRhLiBFeGFtcGxlcyB3b3VsZCBiZToKKworKiAgIE5ldHdvcmsgcGFja2V0IHN0cmVhbSAoKCNwcm9wLXN0cmVhbS1uZXQpKQorKiAgIFJhdyBwYWNrZXQgc3RyZWFtICgoI3Byb3Atc3RyZWFtLXJhdykpCisqICAgRGVidWcgbWVzc2FnZSBzdHJlYW0gKCgjcHJvcC1zdHJlYW0tZGVidWcpKQorKiAgIE5ldHdvcmsgQmVhY29uIHN0cmVhbSAoKCNwcm9wLW1hYy1zY2FuLWJlYWNvbikpCisKK0FsbCBzdWNoIHByb3BlcnRpZXMgZW1pdCBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSBgVkFMVUVfSVNgIGNvbW1hbmQsIHNlbnQgZnJvbSB0aGUgTkNQIHRvIHRoZSBob3N0LiBGb3IgZXhhbXBsZSwgYXMgSVB2NiB0cmFmZmljIGlzIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsIHRoZSBJUHY2IHBhY2tldHMgYXJlIHNlbnQgdG8gdGhlIGhvc3QgYnkgd2F5IG9mIGFzeW5jaHJvbm91cyBgVkFMVUVfSVNgIG5vdGlmaWNhdGlvbnMuCisKK1NvbWUgb2YgdGhlc2UgcHJvcGVydGllcyBhbHNvIHN1cHBvcnQgdGhlIGhvc3Qgc2VuZCBkYXRhIGJhY2sgdG8gdGhlIE5DUC4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgaG93IHRoZSBob3N0IHNlbmRzIElQdjYgdHJhZmZpYyB0byB0aGUgTkNQLgorCitUaGVzZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGdlbmVyYWxseSBkbyBub3Qgc3VwcG9ydCBgVkFMVUVfR0VUYCwgYXMgaXQgaXMgbWVhbmluZ2xlc3MuCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1waHkubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtcHJvcC1waHkubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNmMxNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLXBoeS5tZApAQCAtMCwwICsxLDcyIEBACisjIyBQSFkgUHJvcGVydGllcyB7I3Byb3AtcGh5fQorCisKKyMjIyBQUk9QIDMyOiBQUk9QX1BIWV9FTkFCTEVEIHsjcHJvcC1waHktZW5hYmxlZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYCAoYm9vbDgpCisKK1NldCB0byAxIGlmIHRoZSBQSFkgaXMgZW5hYmxlZCwgc2V0IHRvIDAgb3RoZXJ3aXNlLgorTWF5IGJlIGRpcmVjdGx5IGVuYWJsZWQgdG8gYnlwYXNzIGhpZ2hlci1sZXZlbCBwYWNrZXQgcHJvY2Vzc2luZworaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoaW5ncyBsaWtlIHBhY2tldCBzbmlmZmVycy4gVGhpcyBwcm9wZXJ0eQorY2FuIG9ubHkgYmUgd3JpdHRlbiBpZiB0aGUgYFNQSU5FTF9DQVBfTUFDX1JBV2AgY2FwYWJpbGl0eSBpcyBwcmVzZW50LgorCisjIyMgUFJPUCAzMzogUFJPUF9QSFlfQ0hBTiB7I3Byb3AtcGh5LWNoYW59CisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AgKHVpbnQ4KQorCitWYWx1ZSBpcyB0aGUgY3VycmVudCBjaGFubmVsLiBNdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlCit2YWx1ZXMgY29udGFpbmVkIGluIGBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRGAuCisKKyMjIyBQUk9QIDM0OiBQUk9QX1BIWV9DSEFOX1NVUFBPUlRFRCB7I3Byb3AtcGh5LWNoYW4tc3VwcG9ydGVkfQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQShDKWAgKGFycmF5IG9mIHVpbnQ4KQorKiBVbml0OiBMaXN0IG9mIGNoYW5uZWxzCisKK1ZhbHVlIGlzIGEgbGlzdCBvZiBjaGFubmVsIHZhbHVlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitoYXJkd2FyZS4KKworIyMjIFBST1AgMzU6IFBST1BfUEhZX0ZSRVEgeyNwcm9wLXBoeS1mcmVxfQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgTGAgKHVpbnQzMikKKyogVW5pdDogS2lsb2hlcnR6CisKK1ZhbHVlIGlzIHRoZSByYWRpbyBmcmVxdWVuY3kgKGluIGtpbG9oZXJ0eikgb2YgdGhlCitjdXJyZW50IGNoYW5uZWwuCisKKyMjIyBQUk9QIDM2OiBQUk9QX1BIWV9DQ0FfVEhSRVNIT0xEIHsjcHJvcC1waHktY2NhLXRocmVzaG9sZH0KKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBjYCAoaW50OCkKKyogVW5pdDogZEJtCisKK1ZhbHVlIGlzIHRoZSBDQ0EgKGNsZWFyLWNoYW5uZWwgYXNzZXNzbWVudCkgdGhyZXNob2xkLiBTZXQgdG8KKy0xMjggdG8gZGlzYWJsZS4KKworV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZQordGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKyMjIyBQUk9QIDM3OiBQUk9QX1BIWV9UWF9QT1dFUiB7I3Byb3AtcGh5LXR4LXBvd2VyfQorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYGNgIChpbnQ4KQorKiBVbml0OiBkQm0KKworVmFsdWUgaXMgdGhlIHRyYW5zbWl0IHBvd2VyIG9mIHRoZSByYWRpby4KKworV2hlbiBzZXR0aW5nLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gYSB2YWx1ZQordGhhdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgcmFkaW8gaGFyZHdhcmUuCisKKyMjIyBQUk9QIDM4OiBQUk9QX1BIWV9SU1NJIHsjcHJvcC1waHktcnNzaX0KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYGNgIChpbnQ4KQorKiBVbml0OiBkQm0KKworVmFsdWUgaXMgdGhlIGN1cnJlbnQgUlNTSSAoUmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRpb24pCitmcm9tIHRoZSByYWRpby4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBpbiBlbmVyZ3kgc2NhbnMgYW5kIGZvcgorZGV0ZXJtaW5pbmcgdGhlIGFtYmllbnQgbm9pc2UgZmxvb3IgZm9yIHRoZSBvcGVyYXRpbmcgZW52aXJvbm1lbnQuCisKKyMjIyBQUk9QIDM5OiBQUk9QX1BIWV9SWF9TRU5TSVRJVklUWSB7I3Byb3AtcGh5LXJ4LXNlbnNpdGl2aXR5fQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgY2AgKGludDgpCisqIFVuaXQ6IGRCbQorCitWYWx1ZSBpcyB0aGUgcmFkaW8gcmVjZWl2ZSBzZW5zaXRpdml0eS4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBhcworbG93ZXIgYm91bmQgbm9pc2UgZmxvb3IgZm9yIGxpbmsgbWV0cmljcyBjb21wdXRhdGlvbi4KZGlmZiAtLWdpdCBhL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXByb3AubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MmM2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1wcm9wLm1kCkBAIC0wLDAgKzEsNTggQEAKKyMgUHJvcGVydGllcworCit7e3NwaW5lbC1wcm9wLW92ZXJ2aWV3Lm1kfX0KKworIyMgUHJvcGVydHkgTnVtYmVyaW5nCisKK1doaWxlIHRoZSBtYWpvcml0eSBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGFsbG93IHRoZSBjb25maWd1cmF0aW9uCitvZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBhcmUgbmV0d29yayBwcm90b2NvbCBzcGVjaWZpYywgdGhlcmUgYXJlCitzZXZlcmFsIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gYWxsIGltcGxlbWVudGF0aW9ucy4KKworRnV0dXJlIHByb3BlcnR5IGFsbG9jYXRpb25zICoqU0hBTEwqKiBiZSBtYWRlIGZyb20gdGhlCitmb2xsb3dpbmcgYWxsb2NhdGlvbiBwbGFuOgorCitQcm9wZXJ0eSBJRCBSYW5nZSAgICAgfCBEZXNjcmlwdGlvbgorOi0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0KKzAgLSAxMjcgICAgICAgICAgICAgICB8IFJlc2VydmVkIGZvciBmcmVxdWVudGx5LXVzZWQgcHJvcGVydGllcworMTI4IC0gMTUsMzU5ICAgICAgICAgIHwgVW5hbGxvY2F0ZWQKKzE1LDM2MCAtIDE2LDM4MyAgICAgICB8IFZlbmRvci1zcGVjaWZpYworMTYsMzg0IC0gMSw5OTksOTk5ICAgIHwgVW5hbGxvY2F0ZWQKKzIsMDAwLDAwMCAtIDIsMDk3LDE1MSB8IEV4cGVyaW1lbnRhbCB1c2Ugb25seQorCitGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGRhdGEgZm9ybWF0IGVuY29kaW5nIHNob3J0aGFuZCB1c2VkCit0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnQsIHNlZSAoI2RhdGEtcGFja2luZykuCisKKyMjIFByb3BlcnR5IFNlY3Rpb25zCisKK1RoZSBjdXJyZW50bHkgYXNzaWduZWQgcHJvcGVydGllcyBhcmUgYnJva2VuIHVwIGludG8gc2V2ZXJhbAorc2VjdGlvbnMsIGVhY2ggd2l0aCByZXNlcnZlZCByYW5nZXMgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMuCitUaGVzZSByYW5nZXMgYXJlOgorCitOYW1lICAgfCBSYW5nZSAoSW5jbHVzaXZlKSAgICAgICAgICAgIHwgRG9jdW1lbnRhdGlvbgorLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0KK0NvcmUgICB8IDB4MDAgLSAweDFGLCAweDEwMDAgLSAweDExRkYgfCAoI3Byb3AtY29yZSkKK1BIWSAgICB8IDB4MjAgLSAweDJGLCAweDEyMDAgLSAweDEyRkYgfCAoI3Byb3AtcGh5KQorTUFDICAgIHwgMHgzMCAtIDB4M0YsIDB4MTMwMCAtIDB4MTNGRiB8ICgjcHJvcC1tYWMpCitORVQgICAgfCAweDQwIC0gMHg0RiwgMHgxNDAwIC0gMHgxNEZGIHwgKCNwcm9wLW5ldCkKK1RlY2ggICB8IDB4NTAgLSAweDVGLCAweDE1MDAgLSAweDE1RkYgfCBUZWNobm9sb2d5LXNwZWNpZmljCitJUHY2ICAgfCAweDYwIC0gMHg2RiwgMHgxNjAwIC0gMHgxNkZGIHwgKCNwcm9wLWlwdjYpCitTdHJlYW0gfCAweDcwIC0gMHg3RiwgMHgxNzAwIC0gMHgxN0ZGIHwgKCNwcm9wLWNvcmUpCitEZWJ1ZyAgfCAgICAgICAgICAgICAgMHg0MDAwIC0gMHg0NDAwIHwgKCNwcm9wLWRlYnVnKQorCitOb3RlIHRoYXQgc29tZSBvZiB0aGUgcHJvcGVydHkgc2VjdGlvbnMgaGF2ZSB0d28gcmVzZXJ2ZWQKK3JhbmdlczogYSBwcmltYXJ5IHJhbmdlICh3aGljaCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGUpCithbmQgYW4gZXh0ZW5kZWQgcmFuZ2UgKHdoaWNoIGlzIGVuY29kZWQgYXMgdHdvIGJ5dGVzKS4KK3Byb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQgbW9yZSBmcmVxdWVudGx5IGFyZSBnZW5lcmFsbHkKK2FsbG9jYXRlZCBmcm9tIHRoZSBmb3JtZXIgcmFuZ2UuCisKK3t7c3BpbmVsLXByb3AtY29yZS5tZH19CisKK3t7c3BpbmVsLXByb3AtcGh5Lm1kfX0KKwore3tzcGluZWwtcHJvcC1tYWMubWR9fQorCit7e3NwaW5lbC1wcm9wLW5ldC5tZH19CisKK3t7c3BpbmVsLXByb3AtaXB2Ni5tZH19CisKK3t7c3BpbmVsLXByb3AtZGVidWcubWR9fQpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXNlY3VyaXR5LWNvbnNpZGVyYXRpb25zLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NGVjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtc2VjdXJpdHktY29uc2lkZXJhdGlvbnMubWQKQEAgLTAsMCArMSw5IEBACisjIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zICMKKworIyMgUmF3IEFwcGxpY2F0aW9uIEFjY2VzcyAjIworCitTcGluZWwgKipNQVkqKiBiZSB1c2VkIGFzIGFuIEFQSSBib3VuZGFyeSBmb3IgYWxsb3dpbmcgcHJvY2Vzc2VzIHRvIGNvbmZpZ3VyZQordGhlIE5DUC4gSG93ZXZlciwgc3VjaCBhIHN5c3RlbSAqKk1VU1QgTk9UKiogZ2l2ZSB1bnByaXZpbGVnZWQgcHJvY2Vzc2VzcyB0aGUKK2FiaWxpdHkgdG8gc2VuZCBvciByZWNlaXZlIGFyYml0cmFyeSBjb21tYW5kIGZyYW1lcyB0byB0aGUgTkNQLiBPbmx5IHRoZQorc3BlY2lmaWMgY29tbWFuZHMgYW5kIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVxdWlyZWQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUKK3Bhc3NlZCwgYW5kIHRoZW4gb25seSBhZnRlciBiZWluZyBjaGVja2VkIGZvciBwcm9wZXIgZm9ybWF0LgpkaWZmIC0tZ2l0IGEvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXN0YXR1cy1jb2Rlcy5tZCBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1zdGF0dXMtY29kZXMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2YjViYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC1zdGF0dXMtY29kZXMubWQKQEAgLTAsMCArMSw2NiBAQAorIyBTdGF0dXMgQ29kZXMKKworU3RhdHVzIGNvZGVzIGFyZSBzZW50IGZyb20gdGhlIE5DUCB0byB0aGUgaG9zdCB2aWEKK2BQUk9QX0xBU1RfU1RBVFVTYCB1c2luZyB0aGUgYENNRF9WQUxVRV9JU2AgY29tbWFuZCB0byBpbmRpY2F0ZQordGhlIHJldHVybiBzdGF0dXMgb2YgYSBwcmV2aW91cyBjb21tYW5kLiBBcyB3aXRoIGFueSByZXNwb25zZSwKK3RoZSBUSUQgZmllbGQgb2YgdGhlIEZMQUcgYnl0ZSBpcyB1c2VkIHRvIGNvcnJlbGF0ZSB0aGUgcmVzcG9uc2UKK3dpdGggdGhlIHJlcXVlc3QuCisKK05vdGUgdGhhdCBtb3N0IHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBjb21tYW5kcyBkbyBub3QgaW5kaWNhdGUKK2EgbGFzdCBzdGF0dXMgb2YgYFNUQVRVU19PS2AuIFRoZSB1c3VhbCB3YXkgdGhlIE5DUCBpbmRpY2F0ZXMgYQorc3VjY2Vzc2Z1bCBjb21tYW5kIGlzIHRvIG1pcnJvciB0aGUgcHJvcGVydHkgY2hhbmdlIGJhY2sgdG8gdGhlCitob3N0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGRvIGEgYENNRF9WQUxVRV9TRVRgIG9uIGBQUk9QX1BIWV9FTkFCTEVEYCwKK3RoZSBOQ1Agd291bGQgaW5kaWNhdGUgc3VjY2VzcyBieSByZXNwb25kaW5nIHdpdGggYSBgQ01EX1ZBTFVFX0lTYAorZm9yIGBQUk9QX1BIWV9FTkFCTEVEYC4gSWYgdGhlIGNvbW1hbmQgZmFpbGVkLCBgUFJPUF9MQVNUX1NUQVRVU2AKK3dvdWxkIGJlIGVtaXR0ZWQgaW5zdGVhZC4KKworU2VlICgjcHJvcC1sYXN0LXN0YXR1cykgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYFBST1BfTEFTVF9TVEFUVVNgLgorCisgKiAgMDogYFNUQVRVU19PS2A6IE9wZXJhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAqICAxOiBgU1RBVFVTX0ZBSUxVUkVgOiBPcGVyYXRpb24gaGFzIGZhaWxlZCBmb3Igc29tZSB1bmRlZmluZWQKKyAgICByZWFzb24uCisgKiAgMjogYFNUQVRVU19VTklNUExFTUVOVEVEYDogVGhlIGdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuCisgKiAgMzogYFNUQVRVU19JTlZBTElEX0FSR1VNRU5UYDogQW4gYXJndW1lbnQgdG8gdGhlIGdpdmVuIG9wZXJhdGlvbiBpcyBpbnZhbGlkLgorICogIDQ6IGBTVEFUVVNfSU5WQUxJRF9TVEFURWAgOiBUaGUgZ2l2ZW4gb3BlcmF0aW9uIGlzIGludmFsaWQgZm9yIHRoZSBjdXJyZW50CisgICAgc3RhdGUgb2YgdGhlIGRldmljZS4KKyAqICA1OiBgU1RBVFVTX0lOVkFMSURfQ09NTUFORGA6IFRoZSBnaXZlbiBjb21tYW5kIGlzIG5vdCByZWNvZ25pemVkLgorICogIDY6IGBTVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0VgOiBUaGUgZ2l2ZW4gU3BpbmVsIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLgorICogIDc6IGBTVEFUVVNfSU5URVJOQUxfRVJST1JgOiBBbiBpbnRlcm5hbCBydW50aW1lIGVycm9yIGhhcyBvY2N1cnJlZC4KKyAqICA4OiBgU1RBVFVTX1NFQ1VSSVRZX0VSUk9SYDogQSBzZWN1cml0eSBvciBhdXRoZW50aWNhdGlvbiBlcnJvciBoYXMgb2NjdXJyZWQuCisgKiAgOTogYFNUQVRVU19QQVJTRV9FUlJPUmA6IEFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBjb21tYW5kLgorICogIDEwOiBgU1RBVFVTX0lOX1BST0dSRVNTYDogVGhlIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBhbmQgd2lsbCBiZQorICAgIGNvbXBsZXRlZCBhc3luY2hyb25vdXNseS4KKyAqICAxMTogYFNUQVRVU19OT01FTWA6IFRoZSBvcGVyYXRpb24gaGFzIGJlZW4gcHJldmVudGVkIGR1ZSB0byBtZW1vcnkKKyAgICBwcmVzc3VyZS4KKyAqICAxMjogYFNUQVRVU19CVVNZYDogVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhIG11dHVhbGx5IGV4Y2x1c2l2ZQorICAgIG9wZXJhdGlvbi4KKyAqICAxMzogYFNUQVRVU19QUk9QX05PVF9GT1VORGA6IFRoZSBnaXZlbiBwcm9wZXJ0eSBpcyBub3QgcmVjb2duaXplZC4KKyAqICAxNDogYFNUQVRVU19QQUNLRVRfRFJPUFBFRGA6IFRoZSBwYWNrZXQgd2FzIGRyb3BwZWQuCisgKiAgMTU6IGBTVEFUVVNfRU1QVFlgOiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgZW1wdHkuCisgKiAgMTY6IGBTVEFUVVNfQ01EX1RPT19CSUdgOiBUaGUgY29tbWFuZCB3YXMgdG9vIGxhcmdlIHRvIGZpdCBpbiB0aGUgaW50ZXJuYWwKKyAgICBidWZmZXIuCisgKiAgMTc6IGBTVEFUVVNfTk9fQUNLYDogVGhlIHBhY2tldCB3YXMgbm90IGFja25vd2xlZGdlZC4KKyAqICAxODogYFNUQVRVU19DQ0FfRkFJTFVSRWA6IFRoZSBwYWNrZXQgd2FzIG5vdCBzZW50IGR1ZSB0byBhIENDQSBmYWlsdXJlLgorICogIDE5OiBgU1RBVFVTX0FMUkVBRFlgOiBUaGUgb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgb3IKKyAgICB0aGUgcHJvcGVydHkgd2FzIGFscmVhZHkgc2V0IHRvIHRoZSBnaXZlbiB2YWx1ZS4KKyAqICAyMDogYFNUQVRVU19JVEVNX05PVF9GT1VORGA6IFRoZSBnaXZlbiBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGUgcHJvcGVydHkuIAorICogIDIxOiBgU1RBVFVTX0lOVkFMSURfQ09NTUFORF9GT1JfUFJPUGA6IFRoZSBnaXZlbiBjb21tYW5kIGNhbm5vdCBiZSBwZXJmb3JtZWQKKyAgICBvbiB0aGlzIHByb3BlcnR5LgorICogIDIyLTExMTogUkVTRVJWRUQKKyAqICAxMTItMTI3OiBSZXNldCBDYXVzZXMKKyAgICAgKiAgMTEyOiBgU1RBVFVTX1JFU0VUX1BPV0VSX09OYAorICAgICAqICAxMTM6IGBTVEFUVVNfUkVTRVRfRVhURVJOQUxgCisgICAgICogIDExNDogYFNUQVRVU19SRVNFVF9TT0ZUV0FSRWAKKyAgICAgKiAgMTE1OiBgU1RBVFVTX1JFU0VUX0ZBVUxUYAorICAgICAqICAxMTY6IGBTVEFUVVNfUkVTRVRfQ1JBU0hgCisgICAgICogIDExNzogYFNUQVRVU19SRVNFVF9BU1NFUlRgCisgICAgICogIDExODogYFNUQVRVU19SRVNFVF9PVEhFUmAKKyAgICAgKiAgMTE5OiBgU1RBVFVTX1JFU0VUX1VOS05PV05gCisgICAgICogIDEyMDogYFNUQVRVU19SRVNFVF9XQVRDSERPR2AKKyAgICAgKiAgMTIxLTEyNzogUkVTRVJWRUQtUkVTRVQtQ09ERVMKKyAqICAxMjggLSAxNSwzNTk6IFVOQUxMT0NBVEVECisgKiAgMTUsMzYwIC0gMTYsMzgzOiBWZW5kb3Itc3BlY2lmaWMKKyAqICAxNiwzODQgLSAxLDk5OSw5OTk6IFVOQUxMT0NBVEVECisgKiAgMiwwMDAsMDAwIC0gMiwwOTcsMTUxOiBFeHBlcmltZW50YWwgVXNlIE9ubHkgKE1VU1QgTkVWRVIgYmUgdXNlZAorICAgIGluIHByb2R1Y3Rpb24hKQorCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtdGVjaC10aHJlYWQubWQgYi9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtdGVjaC10aHJlYWQubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxMGZkMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcGluZWwtcHJvdG9jb2wtc3JjL3NwaW5lbC10ZWNoLXRocmVhZC5tZApAQCAtMCwwICsxLDMzMyBAQAorIyBUZWNobm9sb2d5OiBUaHJlYWQoUikgeyN0ZWNoLXRocmVhZH0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgYW5kIHNlbWFudGljcyByZXF1aXJlZAorZm9yIG1hbmFnaW5nIGEgVGhyZWFkKFIpIE5DUC4KKworVGhyZWFkKFIpIE5DUHMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworKiBUaGUgcHJvcGVydHkgYFBST1BfSU5URVJGQUNFX1RZUEVgIG11c3QgYmUgMy4KKyogVGhlIG5vbi1vcHRpb25hbCBwcm9wZXJ0aWVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgKipNVVNUKiogYmUKKyAgaW1wbGVtZW50ZWQ6IENPUkUsIFBIWSwgTUFDLCBORVQsIGFuZCBJUFY2LgorCitBbGwgc2VyaW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgYW4gTkNQICoqU0hPVUxEKiogYWxzbyBzdXBwb3J0IHRoZSBuZXR3b3JrCitzYXZlIGZlYXR1cmUgKFNlZSAoI2ZlYXR1cmUtbmV0d29yay1zYXZlKSkuCisKKyMjIENhcGFiaWxpdGllcyB7I3RocmVhZC1jYXBzfQorCitUaGUgVGhyZWFkKFIpIHRlY2hub2xvZ3kgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdGllczoKKworKiBgQ0FQX05FVF9USFJFQURfMV8wYCAtIEluZGljYXRlcyB0aGF0IHRoZSBOQ1AgaW1wbGVtZW50cyB2MS4wIG9mIHRoZSBUaHJlYWQoUikgc3RhbmRhcmQuCisqIGBDQVBfTkVUX1RIUkVBRF8xXzFgIC0gSW5kaWNhdGVzIHRoYXQgdGhlIE5DUCBpbXBsZW1lbnRzIHYxLjEgb2YgdGhlIFRocmVhZChSKSBzdGFuZGFyZC4KKworIyMgUHJvcGVydGllcyB7I3RocmVhZC1wcm9wZXJ0aWVzfQorCitQcm9wZXJ0aWVzIGZvciBUaHJlYWQoUikgYXJlIGFsbG9jYXRlZCBvdXQgb2YgdGhlIGBUZWNoYCBwcm9wZXJ0eQorc2VjdGlvbiAoc2VlICgjcHJvcGVydHktc2VjdGlvbnMpKS4KKworIyMjIFBST1AgODA6IFBST1BfVEhSRUFEX0xFQURFUl9BRERSCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGA2YAorCitUaGUgSVB2NiBhZGRyZXNzIG9mIHRoZSBsZWFkZXIuIChOb3RlOiBNYXkgY2hhbmdlIHRvIGxvbmcgYW5kIHNob3J0IGFkZHJlc3Mgb2YgbGVhZGVyKQorCisjIyMgUFJPUCA4MTogUFJPUF9USFJFQURfUEFSRU5UCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBFU2AKKyogTEFERFIsIFNBRERSCisKK1RoZSBsb25nIGFkZHJlc3MgYW5kIHNob3J0IGFkZHJlc3Mgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuCisKKyMjIyBQUk9QIDgyOiBQUk9QX1RIUkVBRF9DSElMRF9UQUJMRQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQSh0KEVTKSlgCisKK1RhYmxlIGNvbnRhaW5pbmcgdGhlIGxvbmcgYW5kIHNob3J0IGFkZHJlc3NlcyBvZiBhbGwKK3RoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUuCisKKyMjIyBQUk9QIDgzOiBQUk9QX1RIUkVBRF9MRUFERVJfUklECisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitUaGUgcm91dGVyLWlkIG9mIHRoZSBjdXJyZW50IGxlYWRlci4KKworIyMjIFBST1AgODQ6IFBST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKK1RoZSBsZWFkZXIgd2VpZ2h0IG9mIHRoZSBjdXJyZW50IGxlYWRlci4KKworIyMjIFBST1AgODU6IFBST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitUaGUgbGVhZGVyIHdlaWdodCBmb3IgdGhpcyBub2RlLgorCisjIyMgUFJPUCA4NjogUFJPUF9USFJFQURfTkVUV09SS19EQVRBCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCitUaGUgbG9jYWwgbmV0d29yayBkYXRhLgorCisjIyMgUFJPUCA4NzogUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04KKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYFNgCisKKyMjIyBQUk9QIDg4OiBQUk9QX1RIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBEYAorCitUaGUgbG9jYWwgc3RhYmxlIG5ldHdvcmsgZGF0YS4KKworIyMjIFBST1AgODk6IFBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTgorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgU2AKKworIyMjIFBST1AgOTA6IFBST1BfVEhSRUFEX09OX01FU0hfTkVUUworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEodCg2Q2JDYikpYAorCitEYXRhIHBlciBpdGVtIGlzOgorCisqIGA2YDogSVB2NiBQcmVmaXgKKyogYENgOiBQcmVmaXggbGVuZ3RoIGluIGJpdHMKKyogYGJgOiBTdGFibGUgZmxhZworKiBgQ2A6IFRMViBmbGFncworKiBgYmA6ICJJcyBkZWZpbmVkIGxvY2FsbHkiIGZsYWcuIFNldCBpZiB0aGlzIG5ldHdvcmsgd2FzIGxvY2FsbHkKKyAgZGVmaW5lZC4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsIGluc2VydCBhbmQgcmVwbGFjZS4gQ2xlYXIgaWYKKyAgdGhlIG9uIG1lc2ggbmV0d29yayB3YXMgZGVmaW5lZCBieSBhbm90aGVyIG5vZGUuCisKKyMjIyBQUk9QIDkxOiBQUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKHQoNkNiQ2JiKSlgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYDZgOiBSb3V0ZSBQcmVmaXgKKyogYENgOiBQcmVmaXggbGVuZ3RoIGluIGJpdHMKKyogYGJgOiBTdGFibGUgZmxhZworKiBgQ2A6IFJvdXRlIHByZWZlcmVuY2UgZmxhZ3MKKyogYGJgOiAiSXMgZGVmaW5lZCBsb2NhbGx5IiBmbGFnLiBTZXQgaWYgdGhpcyByb3V0ZSBpbmZvIHdhcyBsb2NhbGx5CisgIGRlZmluZWQgYXMgcGFydCBvZiBsb2NhbCBuZXR3b3JrIGRhdGEuIEFzc3VtZWQgdG8gYmUgdHJ1ZSBmb3Igc2V0LAorICBpbnNlcnQgYW5kIHJlcGxhY2UuIENsZWFyIGlmIHRoZSByb3V0ZSBpcyBwYXJ0IG9mIHBhcnRpdGlvbidzIG5ldHdvcmsKKyAgZGF0YS4KKyogYGJgOiAiTmV4dCBob3AgaXMgdGhpcyBkZXZpY2UiIGZsYWcuIFNldCBpZiB0aGUgbmV4dCBob3AgZm9yIHRoZQorICByb3V0ZSBpcyB0aGlzIGRldmljZSBpdHNlbGYgKGkuZS4sIHJvdXRlIHdhcyBhZGRlZCBieSB0aGlzIGRldmljZSkKKyAgVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIHdoZW4gYWRkaW5nIGFuIGV4dGVybmFsIHJvdXRlLiBGb3IgYW55IGFkZGVkCisgIHJvdXRlIHRoZSBuZXh0IGhvcCBpcyB0aGlzIGRldmljZS4KKworIyMjIFBST1AgOTI6IFBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUworKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYEEoUylgCisKKyMjIyBQUk9QIDkzOiBQUk9QX1RIUkVBRF9BTExPV19MT0NBTF9ORVRfREFUQV9DSEFOR0UKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBiYAorCitTZXQgdG8gdHJ1ZSBiZWZvcmUgY2hhbmdpbmcgbG9jYWwgbmV0IGRhdGEuIFNldCB0byBmYWxzZSB3aGVuIGZpbmlzaGVkLgorVGhpcyBhbGxvd3MgY2hhbmdlcyB0byBiZSBhZ2dyZWdhdGVkIGludG8gc2luZ2xlIGV2ZW50cy4KKworIyMjIFBST1AgOTQ6IFBST1BfVEhSRUFEX01PREUKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZQorVExWIGZvciB0aGlzIG5vZGUuIFRoZSBtZWFuaW5nIG9mIHRoZSBiaXRzIGluIHRoaXMKK2JpdGZpZWxkIGFyZSBkZWZpbmVkIGJ5IHNlY3Rpb24gNC41LjIgb2YgdGhlIFRocmVhZChSKQorc3BlY2lmaWNhdGlvbi4KKworIyMjIFBST1AgNTM3NjogUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVAorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYExgCisKK1VzZWQgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIENoaWxkIHJvbGUuCisKKyMjIyBQUk9QIDUzNzc6IFBST1BfVEhSRUFEX1JMT0MxNgorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYFNgCisKKyMjIyBQUk9QIDUzNzg6IFBST1BfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRAorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKKyMjIyBQUk9QIDUzNzk6IFBST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBMYAorCisjIyMgUFJPUCA1MzgwOiBQUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQKKyogVHlwZTogUmVhZC1Xcml0ZQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitBbGxvd3MgeW91IHRvIGdldCBvciBzZXQgdGhlIFRocmVhZChSKSBgTkVUV09SS19JRF9USU1FT1VUYCBjb25zdGFudCwgYXMKK2RlZmluZWQgYnkgdGhlIFRocmVhZChSKSBzcGVjaWZpY2F0aW9uLgorCisjIyMgUFJPUCA1MzgxOiBQUk9QX1RIUkVBRF9BQ1RJVkVfUk9VVEVSX0lEUworKiBUeXBlOiBSZWFkLVdyaXRlL1dyaXRlLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgQShDKWAgKExpc3Qgb2YgYWN0aXZlIHRocmVhZCByb3V0ZXIgaWRzKQorCitOb3RlIHRoYXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0IGBDTURfR0VUX1ZBTFVFYAorcm91dGVyIGlkcywgYnV0IG1heSBzdXBwb3J0IGBDTURfUkVNT1ZFX1ZBTFVFYCB3aGVuIHRoZSBub2RlIGlzCithIGxlYWRlci4KKworIyMjIFBST1AgNTM4MjogUFJPUF9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKworQWxsb3cgdGhlIEhPU1QgdG8gZGlyZWN0bHkgb2JzZXJ2ZSBhbGwgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZSBOQ1AsCitpbmNsdWRpbmcgb25lcyBzZW50IHRvIHRoZSBSTE9DMTYgYWRkcmVzcy4KKworRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLgorCisjIyMgUFJPUCA1MzgzOiBQUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVECisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKworQWxsb3cgdGhlIEhPU1QgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIHJvdXRlciByb2xlIGlzIGVuYWJsZWQuCitJZiBjdXJyZW50IHJvbGUgaXMgYSByb3V0ZXIsIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgIHN0YXJ0cworYSByZS1hdHRhY2ggcHJvY2VzcyBhcyBhbiBlbmQtZGV2aWNlLgorCisjIyMgUFJPUCA1Mzg0OiBQUk9QX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRAorKiBUeXBlOiBSZWFkLVdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzogYENgCisKKyMjIyBQUk9QIDUzODU6IFBST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AKKworU3BlY2lmaWVzIHRoZSBzZWxmIGltcG9zZWQgcmFuZG9tIGRlbGF5IGluIHNlY29uZHMgYSBSRUVEIHdhaXRzIGJlZm9yZQorcmVnaXN0ZXJpbmcgdG8gYmVjb21lIGFuIEFjdGl2ZSBSb3V0ZXIuCisKKyMjIyBQUk9QIDUzODY6IFBST1BfVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQKKyogVHlwZTogV3JpdGUtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBDYAorCitTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuIFVwb24gYmVjb21pbmcgYSByb3V0ZXIvbGVhZGVyIHRoZSBub2RlCithdHRlbXB0cyB0byB1c2UgdGhpcyBSb3V0ZXIgSWQuIElmIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IKK2lmIGl0IGNhbiBub3QgYmUgdXNlZCwgYSByYW5kb21seSBnZW5lcmF0ZWQgcm91dGVyIGlkIGlzIHBpY2tlZC4gVGhpcworcHJvcGVydHkgY2FuIGJlIHNldCBvbmx5IHdoZW4gdGhlIGRldmljZSByb2xlIGlzIGVpdGhlciBkZXRhY2hlZCBvcgorZGlzYWJsZWQuCisKKyMjIyBQUk9QIDUzODc6IFBST1BfVEhSRUFEX05FSUdIQk9SX1RBQkxFCisqIFR5cGU6IFJlYWQtT25seQorKiBQYWNrZWQtRW5jb2Rpbmc6IGBBKHQoRVNMQ2NDYkxMKSlgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYEVgOiBFeHRlbmRlZC9sb25nIGFkZHJlc3MKKyogYFNgOiBSTE9DMTYKKyogYExgOiBBZ2UKKyogYENgOiBMaW5rIFF1YWxpdHkgSW4KKyogYGNgOiBBdmVyYWdlIFJTUworKiBgQ2A6IE1vZGUgKGJpdC1mbGFncykKKyogYGJgOiBgdHJ1ZWAgaWYgbmVpZ2hib3IgaXMgYSBjaGlsZCwgYGZhbHNlYCBvdGhlcndpc2UuCisqIGBMYDogTGluayBGcmFtZSBDb3VudGVyCisqIGBMYDogTUxFIEZyYW1lIENvdW50ZXIKKworIyMjIFBST1AgNTM4ODogUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgQ2AKKworU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbiBjdXJyZW50bHkgYWxsb3dlZC4KK1RoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCB3aGVuIFRocmVhZChSKSBwcm90b2NvbCBvcGVyYXRpb24KK2hhcyBiZWVuIHN0b3BwZWQuCisKKyMjIyBQUk9QIDUzODk6IFBST1BfVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEKKyogVHlwZTogUmVhZC1Pbmx5CisqIFBhY2tlZC1FbmNvZGluZzogYERgCisKK1RoZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCisjIyMgUFJPUCA1MzkwOiBQUk9QX1RIUkVBRF9TVEFCTEVfTEVBREVSX05FVFdPUktfREFUQQorKiBUeXBlOiBSZWFkLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgRGAKKworVGhlIHN0YWJsZSBsZWFkZXIgbmV0d29yayBkYXRhLgorCisjIyMgUFJPUCA1MzkxOiBQUk9QX1RIUkVBRF9KT0lORVJTIHsjcHJvcC10aHJlYWQtam9pbmVyc30KKworKiBUeXBlOiBJbnNlcnQvUmVtb3ZlIE9ubHkgKG9wdGlvbmFsbHkgUmVhZC1Xcml0ZSkKKyogUGFja2VkLUVuY29kaW5nOiBgQSh0KFVMRSkpYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVJgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYFVgOiBQU0tkCisqIGBMYDogVGltZW91dCBpbiBzZWNvbmRzCisqIGBFYDogRXh0ZW5kZWQvbG9uZyBhZGRyZXNzIChvcHRpb25hbCkKKworUGFzc2VzcyBQcmUtU2hhcmVkIEtleSBmb3IgdGhlIERldmljZSB0byB0aGUgTkNQIGluIHRoZSBjb21taXNzaW9uaW5nIHByb2Nlc3MuCitXaGVuIHRoZSBFeHRlbmRlZCBhZGRyZXNzIGlzIG9tbWl0ZWQgYWxsIERldmljZXMgd2hpY2ggcHJvdmlkZWQgYSB2YWxpZCBQU0tkCithcmUgYWxsb3dlZCB0byBqb2luIHRoZSBUaHJlYWQoUikgTmV0d29yay4KKworIyMjIFBST1AgNTM5MjogUFJPUF9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQgeyNwcm9wLXRocmVhZC1jb21taXNzaW9uZXItZW5hYmxlZH0KKworKiBUeXBlOiBXcml0ZSBvbmx5IChvcHRpb25hbGx5IFJlYWQtV3JpdGUpCisqIFBhY2tlZC1FbmNvZGluZzogYGJgCisqIFJlcXVpcmVkIGNhcGFiaWxpdHk6IGBDQVBfVEhSRUFEX0NPTU1JU1NJT05FUmAKKworU2V0IHRvIHRydWUgdG8gZW5hYmxlIHRoZSBuYXRpdmUgY29tbWlzc2lvbmVyLiBJdCBpcyBtYW5kYXRvcnkgYmVmb3JlIGFkZGluZyB0aGUgam9pbmVyIHRvIHRoZSBuZXR3b3JrLgorCisjIyMgUFJPUCA1MzkzOiBQUk9QX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRCB7I3Byb3AtdGhyZWFkLXRtZi1wcm94eS1lbmFibGVkfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOiBgYmAKKyogUmVxdWlyZWQgY2FwYWJpbGl0eTogYENBUF9USFJFQURfVE1GX1BST1hZYAorCitTZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIFRNRiBwcm94eS4KKworIyMjIFBST1AgNTM5NDogUFJPUF9USFJFQURfVE1GX1BST1hZX1NUUkVBTSB7I3Byb3AtdGhyZWFkLXRtZi1wcm94eS1zdHJlYW19CisKKyogVHlwZTogUmVhZC1Xcml0ZS1TdHJlYW0KKyogUGFja2VkLUVuY29kaW5nOiBgZFNTYAorKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBgQ0FQX1RIUkVBRF9UTUZfUFJPWFlgCisKK0RhdGEgcGVyIGl0ZW0gaXM6CisKKyogYGRgOiBDb0FQIGZyYW1lCisqIGBTYDogc291cmNlL2Rlc3RpbmF0aW9uIFJMT0MvQUxPQworKiBgU2A6IHNvdXJjZS9kZXN0aW5hdGlvbiBwb3J0CisKK09jdGVjdHM6IHwgMiAgICAgIHwgKm4qICB8ICAgIDIgICAgfCAgMgorLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLQorRmllbGRzOiAgfCBMZW5ndGggfCBDb0FQIHwgbG9jYXRvciB8IHBvcnQKKworVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdGhlIGhvc3QgdG8gc2VuZCBhbmQgcmVjZWl2ZSBUTUYgbWVzc2FnZXMgZnJvbQordGhlIE5DUCdzIFJMT0MgYWRkcmVzcyBhbmQgc3VwcG9ydCBUaHJlYWQtc3BlY2lmaWMgYm9yZGVyIHJvdXRlciBmdW5jdGlvbnMuCisKKworIyMjIFBST1AgNTM5NTogUFJPUF9USFJFQURfRElTT1ZFUllfU0NBTl9KT0lORVJfRkxBRyB7I3Byb3AtdGhyZWFkLWRpc2NvdmVyeS1zY2FuLWpvaW5lci1mbGFnfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOjogYGJgCisKK1RoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSB2YWx1ZSB1c2VkIGluIFRocmVhZChSKSBNTEUgRGlzY292ZXJ5IFJlcXVlc3QKK1RMViBkdXJpbmcgZGlzY292ZXJ5IHNjYW4gb3BlcmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuCisKKyMjIyBQUk9QIDUzOTY6IFBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcgeyNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1lbmFibGUtZmlsdGVyaW5nfQorCisqIFR5cGU6IFJlYWQtV3JpdGUKKyogUGFja2VkLUVuY29kaW5nOjogYGJgCisKK1RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBFVUk2NCBmaWx0ZXJpbmcgZHVyaW5nIGRpc2NvdmVyeQorc2NhbiBvcGVyYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4KKworIyMjIFBST1AgNTM5NzogUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQgeyNwcm9wLXRocmVhZC1kaXNjb3Zlcnktc2Nhbi1wYW5pZH0KKworKiBUeXBlOiBSZWFkLXdyaXRlCisqIFBhY2tlZC1FbmNvZGluZzo6IGBTYAorCitUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgUEFOSUQgdXNlZCBmb3IgZmlsdGVyaW5nIGR1cmluZyBkaXNjb3ZlcnkKK3NjYW4gb3BlcmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIGAweGZmZmZgIChicm9hZGNhc3QgUEFOSUQpIHdoaWNoIGRpc2FibGVzCitQQU5JRCBmaWx0ZXJpbmcuCisKKyMjIyBQUk9QIDUzOTg6IFBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEEgeyNwcm9wLXRocmVhZC1zdGVlcmluZy1kYXRhfQorCisqIFR5cGU6IFdyaXRlLU9ubHkKKyogUGFja2VkLUVuY29kaW5nOiBgRWAKKyogUmVxdWlyZWQgY2FwYWJpbGl0eTogYENBUF9PT0JfU1RFRVJJTkdfREFUQWAKKworVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHN0ZWVyaW5nIGRhdGEgZm9yIE1MRSBEaXNjb3ZlcnkKK1Jlc3BvbnNlIG1lc3NhZ2VzLgorCisqIEFsbCB6ZXJvcyB0byBjbGVhciB0aGUgc3RlZXJpbmcgZGF0YSAoaW5kaWNhdGluZyBubyBzdGVlcmluZyBkYXRhKS4KKyogQWxsIDB4RkZzIHRvIHNldCB0aGUgc3RlZXJpbmcgZGF0YSAoYmxvb20gZmlsdGVyKSB0byBhY2NlcHQvYWxsb3cgYWxsLgorKiBBIHNwZWNpZmljIEVVSTY0IHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gc3RlZXJpbmcgZGF0YS9ibG9vbSBmaWx0ZXIuCmRpZmYgLS1naXQgYS9kb2Mvc3BpbmVsLXByb3RvY29sLXNyYy9zcGluZWwtdGVzdC12ZWN0b3JzLm1kIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXRlc3QtdmVjdG9ycy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmI5ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NwaW5lbC1wcm90b2NvbC1zcmMvc3BpbmVsLXRlc3QtdmVjdG9ycy5tZApAQCAtMCwwICsxLDE3NCBAQAorIyBUZXN0IFZlY3RvcnMKKworIyMgVGVzdCBWZWN0b3I6IFBhY2tlZCBVbnNpZ25lZCBJbnRlZ2VyCisKK0RlY2ltYWwgVmFsdWUgfCBQYWNrZXQgT2N0ZXQgRW5jb2RpbmcKKy0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAwIHwgYDAwYAorICAgICAgICAgICAgMSB8IGAwMWAKKyAgICAgICAgICAxMjcgfCBgN0ZgCisgICAgICAgICAgMTI4IHwgYDgwIDAxYAorICAgICAgICAgIDEyOSB8IGA4MSAwMWAKKyAgICAgICAgMSwzMzcgfCBgQjkgMEFgCisgICAgICAgMTYsMzgzIHwgYEZGIDdGYAorICAgICAgIDE2LDM4NCB8IGA4MCA4MCAwMWAKKyAgICAgICAxNiwzODUgfCBgODEgODAgMDFgCisgICAgMiwwOTcsMTUxIHwgYEZGIEZGIDdGYAorCis8IS0tIFJRIC0tIFRoZSBQVUkgdGVzdC12ZWN0b3IgZW5jb2RpbmdzIG5lZWQgdG8gYmUgdmVyaWZpZWQuIC0tPgorCisjIyBUZXN0IFZlY3RvcjogUmVzZXQgQ29tbWFuZAorCisqIE5MSTogMAorKiBUSUQ6IDAKKyogQ01EOiAxIChgQ01EX1JFU0VUYCkKKworRnJhbWU6CisKKyAgICA4MCAwMQorCisjIyBUZXN0IFZlY3RvcjogUmVzZXQgTm90aWZpY2F0aW9uCisKKyogTkxJOiAwCisqIFRJRDogMAorKiBDTUQ6IDYgKGBDTURfVkFMVUVfSVNgKQorKiBQUk9QOiAwIChgUFJPUF9MQVNUX1NUQVRVU2ApCisqIFZBTFVFOiAxMTQgKGBTVEFUVVNfUkVTRVRfU09GVFdBUkVgKQorCitGcmFtZToKKworICAgIDgwIDA2IDAwIDcyCisKKyMjIFRlc3QgVmVjdG9yOiBTY2FuIEJlYWNvbgorCisqIE5MSTogMAorKiBUSUQ6IDAKKyogQ01EOiA3IChgQ01EX1ZBTFVFX0lOU0VSVEVEYCkKKyogUFJPUDogNTEgKGBQUk9QX01BQ19TQ0FOX0JFQUNPTmApCisqIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgYENjdChFU1NjKXQoaUNVZClgCisgICAgKiBDSEFOOiAxNQorICAgICogUlNTSTogLTYwZEJtCisgICAgKiBNQUNfREFUQTogKDBEIDAwIEI2IDQwIEQ0IDhDIEU5IDM4IEY5IDUyIEZGIEZGIEQyIDA0IDAwKQorICAgICAgICAqIExvbmcgYWRkcmVzczogQjY6NDA6RDQ6OEM6RTk6Mzg6Rjk6NTIKKyAgICAgICAgKiBTaG9ydCBhZGRyZXNzOiAweEZGRkYKKyAgICAgICAgKiBQQU4tSUQ6IDB4MDREMgorICAgICAgICAqIExRSTogMAorICAgICogTkVUX0RBVEE6ICgxMyAwMCAwMyAyMCA3MyA3MCA2OSA2RSA2NSA2QyAwMCAwOCAwMCBERSBBRCAwMCBCRSBFRiAwMCBDQSBGRSkKKyAgICAgICAgKiBQcm90b2NvbCBOdW1iZXI6IDMKKyAgICAgICAgKiBGbGFnczogMHgyMAorICAgICAgICAqIE5ldHdvcmsgTmFtZTogYHNwaW5lbGAKKyAgICAgICAgKiBYUEFOSUQ6IGBERSBBRCAwMCBCRSBFRiAwMCBDQSBGRWAKKworRnJhbWU6CisKKyAgICA4MCAwNyAzMyAwRiBDNCAwRCAwMCBCNiA0MCBENCA4QyBFOSAzOCBGOSA1MiBGRiBGRiBEMiAwNCAwMAorICAgIDEzIDAwIDAzIDIwIDczIDcwIDY5IDZFIDY1IDZDIDAwIDA4IDAwIERFIEFEIDAwIEJFIEVGIDAwIENBCisgICAgRkUKKworIyMgVGVzdCBWZWN0b3I6IEluYm91bmQgSVB2NiBQYWNrZXQKKworQ01EX1ZBTFVFX0lTKFBST1BfU1RSRUFNX05FVCkKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLiAtLT4KKworIyMgVGVzdCBWZWN0b3I6IE91dGJvdW5kIElQdjYgUGFja2V0CisKK0NNRF9WQUxVRV9TRVQoUFJPUF9TVFJFQU1fTkVUKQorCis8IS0tIFJRIC0tIEZJWE1FOiBUaGlzIHRlc3QgdmVjdG9yIGlzIGluY29tcGxldGUuIC0tPgorCisjIyBUZXN0IFZlY3RvcjogRmV0Y2ggbGlzdCBvZiBvbi1tZXNoIG5ldHdvcmtzCisKKyogTkxJOiAwCisqIFRJRDogNAorKiBDTUQ6IDIgKGBDTURfVkFMVUVfR0VUYCkKKyogUFJPUDogOTAgKGBQUk9QX1RIUkVBRF9PTl9NRVNIX05FVFNgKQorCitGcmFtZToKKworICAgIDg0IDAyIDVBCisKKyMjIFRlc3QgVmVjdG9yOiBSZXR1cm5lZCBsaXN0IG9mIG9uLW1lc2ggbmV0d29ya3MKKworKiBOTEk6IDAKKyogVElEOiA0CisqIENNRDogNiAoYENNRF9WQUxVRV9JU2ApCisqIFBST1A6IDkwIChgUFJPUF9USFJFQURfT05fTUVTSF9ORVRTYCkKKyogVkFMVUU6IEFycmF5IG9mIHN0cnVjdHVyZXMsIGVuY29kZWQgYXMgYEEodCg2Q2JDKSlgCisKK0lQdjYgUHJlZml4ICB8IFByZWZpeCBMZW5ndGggfCBTdGFibGUgRmxhZyB8IE90aGVyIEZsYWdzCistLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tCisyMDAxOkRCODoxOjogfCA2NCAgICAgICAgICAgIHwgVHJ1ZSAgICAgICAgfCA/PworMjAwMTpEQjg6Mjo6IHwgNjQgICAgICAgICAgICB8IEZhbHNlICAgICAgIHwgPz8KKworRnJhbWU6CisKKyAgICA4NCAwNiA1QSAxMyAwMCAyMCAwMSAwRCBCOCAwMCAwMSAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorICAgIDAwIDQwIDAxID8/IDEzIDAwIDIwIDAxIDBEIEI4IDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgMDAgMDAgNDAgMDAgPz8KKworPCEtLSBUT0RPOiBUaGlzIHRlc3QgdmVjdG9yIGlzIGluY29tcGxldGUuIC0tPgorCisjIyBUZXN0IFZlY3RvcjogQWRkaW5nIGFuIG9uLW1lc2ggbmV0d29yaworCisqIE5MSTogMAorKiBUSUQ6IDUKKyogQ01EOiA0IChgQ01EX1ZBTFVFX0lOU0VSVGApCisqIFBST1A6IDkwIChgUFJPUF9USFJFQURfT05fTUVTSF9ORVRTYCkKKyogVkFMVUU6IFN0cnVjdHVyZSwgZW5jb2RlZCBhcyBgNkNiQ2JgCisKK0lQdjYgUHJlZml4ICB8IFByZWZpeCBMZW5ndGggfCBTdGFibGUgRmxhZyB8IE90aGVyIEZsYWdzCistLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tCisyMDAxOkRCODozOjogfCA2NCAgICAgICAgICAgIHwgVHJ1ZSAgICAgICAgfCA/PworCitGcmFtZToKKworICAgIDg1IDAzIDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDQwCisgICAgMDEgPz8gMDEKKworPCEtLSBSUSAtLSBGSVhNRTogVGhpcyB0ZXN0IHZlY3RvciBpcyBpbmNvbXBsZXRlLiAtLT4KKworIyMgVGVzdCBWZWN0b3I6IEluc2VydGlvbiBub3RpZmljYXRpb24gb2YgYW4gb24tbWVzaCBuZXR3b3JrCisKKyogTkxJOiAwCisqIFRJRDogNQorKiBDTUQ6IDcgKGBDTURfVkFMVUVfSU5TRVJURURgKQorKiBQUk9QOiA5MCAoYFBST1BfVEhSRUFEX09OX01FU0hfTkVUU2ApCisqIFZBTFVFOiBTdHJ1Y3R1cmUsIGVuY29kZWQgYXMgYDZDYkNiYAorCitJUHY2IFByZWZpeCAgfCBQcmVmaXggTGVuZ3RoIHwgU3RhYmxlIEZsYWcgfCBPdGhlciBGbGFncworLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLQorMjAwMTpEQjg6Mzo6IHwgNjQgICAgICAgICAgICB8IFRydWUgICAgICAgIHwgPz8KKworRnJhbWU6CisKKyAgICA4NSAwNyA1QSAyMCAwMSAwRCBCOCAwMCAwMyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA0MAorICAgIDAxID8/IDAxCisKKzwhLS0gUlEgLS0gRklYTUU6IFRoaXMgdGVzdCB2ZWN0b3IgaXMgaW5jb21wbGV0ZS4gLS0+CisKKyMjIFRlc3QgVmVjdG9yOiBSZW1vdmluZyBhIGxvY2FsIG9uLW1lc2ggbmV0d29yaworCisqIE5MSTogMAorKiBUSUQ6IDYKKyogQ01EOiA1IChgQ01EX1ZBTFVFX1JFTU9WRWApCisqIFBST1A6IDkwIChgUFJPUF9USFJFQURfT05fTUVTSF9ORVRTYCkKKyogVkFMVUU6IElQdjYgUHJlZml4IGAyMDAxOkRCODozOjpgCisKK0ZyYW1lOgorCisgICAgODYgMDUgNUEgMjAgMDEgMEQgQjggMDAgMDMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworIyMgVGVzdCBWZWN0b3I6IFJlbW92YWwgbm90aWZpY2F0aW9uIG9mIGFuIG9uLW1lc2ggbmV0d29yaworCisqIE5MSTogMAorKiBUSUQ6IDYKKyogQ01EOiA4IChgQ01EX1ZBTFVFX1JFTU9WRURgKQorKiBQUk9QOiA5MCAoYFBST1BfVEhSRUFEX09OX01FU0hfTkVUU2ApCisqIFZBTFVFOiBJUHY2IFByZWZpeCBgMjAwMTpEQjg6Mzo6YAorCitGcmFtZToKKworICAgIDg2IDA4IDVBIDIwIDAxIDBEIEI4IDAwIDAzIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisKKwpkaWZmIC0tZ2l0IGEvZXRjL3ZhZ3JhbnQvVmFncmFudGZpbGUgYi9ldGMvdmFncmFudC9WYWdyYW50ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQwNDMzCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3ZhZ3JhbnQvVmFncmFudGZpbGUKQEAgLTAsMCArMSw4NiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisjIC0qLSBtb2RlOiBydWJ5IC0qLQorIyB2aTogc2V0IGZ0PXJ1YnkgOgorCisjIGNyaWJiZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWRhZnJ1aXQvZXNwODI2Ni1taWNyb3B5dGhvbi12YWdyYW50CitWYWdyYW50LmNvbmZpZ3VyZSgiMiIpIGRvIHxjb25maWd8CisgIGNvbmZpZy52bS5ib3ggPSAidWJ1bnR1L3RydXN0eTY0IgorCisgICMgVmlydHVhbGJveCBWTSBjb25maWd1cmF0aW9uLgorICBjb25maWcudm0ucHJvdmlkZXIgInZpcnR1YWxib3giIGRvIHx2fAorICAgICMgZXh0cmEgbWVtb3J5IGZvciBjb21waWxhdGlvbgorICAgIHYubWVtb3J5ID0gMjA0OAorICBlbmQKKworICAjIGRvd25sb2FkcyBhbmQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMKKyAgY29uZmlnLnZtLnByb3Zpc2lvbiAic2hlbGwiLCBwcml2aWxlZ2VkOiBmYWxzZSwgaW5saW5lOiA8PC1TSEVMTAorICAgIGVjaG8gIkluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uIgorCisgICAgIyBxdWlldHMgc29tZSBzdGRpbiBlcnJvcnMKKyAgICBleHBvcnQgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlCisKKyAgICBzdWRvIGFwdC1nZXQgaW5zdGFsbCAteSBweXRob24tc29mdHdhcmUtcHJvcGVydGllcworICAgIHN1ZG8gYWRkLWFwdC1yZXBvc2l0b3J5IC15IHBwYTp0ZXJyeS5ndW8vZ2NjLWFybS1lbWJlZGRlZAorICAgIHN1ZG8gYXB0LWdldCB1cGRhdGUgLXFxCisKKyAgICAjIHdwYW5kdHVuZCBydW50aW1lICYgYnVpbGQgcmVxdWlyZW1lbnRzCisgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgLXkgYnVpbGQtZXNzZW50aWFsIGdpdCBtYWtlIGF1dG9jb25mIGF1dG9jb25mLWFyY2hpdmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYWtlIGRidXMgbGlidG9vbCBnY2MgZysrIGdwZXJmIGZsZXggYmlzb24gdGV4aW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcy1kZXYgbGliZXhwYXQtZGV2IHB5dGhvbiBzZWQgcHl0aG9uLXBpcCBnYXdrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyZWFkbGluZTYtZGV2IGxpYnJlYWRsaW5lNiBsaWJkYnVzLTEtZGV2IGxpYmJvb3N0LWRldgorICAgIHN1ZG8gYXB0LWdldCBpbnN0YWxsIC15IC0tZm9yY2UteWVzIGdjYy1hcm0tbm9uZS1lYWJpCisKKyAgICBzdWRvIHBpcCBpbnN0YWxsIHBleHBlY3QKKworICAgIGVjaG8gIkluc3RhbGxpbmcgT3BlblRocmVhZCAmIHdwYW5kdHVuZC4uLiIKKyAgICBta2RpciAtcCB+L3NyYworCisgICAgIyBpbnN0YWxsIHdwYW50dW5kCisgICAgY2Qgfi9zcmMKKyAgICBlY2hvICJpbnN0YWxsaW5nIHdwYW50dW5kIgorICAgIGdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSBodHRwczovL2dpdGh1Yi5jb20vb3BlbnRocmVhZC93cGFudHVuZC5naXQKKyAgICBjZCB3cGFudHVuZAorICAgIHN1ZG8gZ2l0IGNoZWNrb3V0IGZ1bGwvbWFzdGVyCisgICAgLi9jb25maWd1cmUgLS1zeXNjb25mZGlyPS9ldGMKKyAgICBtYWtlCisgICAgc3VkbyBtYWtlIGluc3RhbGwKKyAgICAjIGRidXMgc29tZXRpbWVzIGlzIHdvbmt5OyBmb3JjaW5nIHJlc3RhcnQKKyAgICBzdWRvIHNlcnZpY2UgZGJ1cyByZXN0YXJ0CisKKyAgICAjIGluc3RhbGwgT3BlblRocmVhZAorICAgIGNkIH4vc3JjCisgICAgZ2l0IGNsb25lIC0tcmVjdXJzaXZlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQuZ2l0CisgICAgY2Qgb3BlbnRocmVhZAorICAgIC4vYm9vdHN0cmFwCisKKyAgICBlY2hvICJPcGVuVGhyZWFkIGFuZCB3cGFudHVuZCBzZXR1cCBjb21wbGV0ZSEgRXhhbXBsZXMgY2FuIGJlIGZvdW5kIGluIH4vc3JjL29wZW50aHJlYWQvZXhhbXBsZXMiCisgIFNIRUxMCisKK2VuZApkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL0xvY2tTY3JlZW5Mb2dvLnNjYWxlLTIwMC5wbmcgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvTG9ja1NjcmVlbkxvZ28uc2NhbGUtMjAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVkYzcxCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL0xvY2tTY3JlZW5Mb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDM4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3BsYXNoU2NyZWVuLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTE1MHgxNTBMb2dvLnNjYWxlLTIwMC5wbmcgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3F1YXJlMTUweDE1MExvZ28uc2NhbGUtMjAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWUyMzlkCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTE1MHgxNTBMb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby5zY2FsZS0yMDAucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby5zY2FsZS0yMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDIwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3F1YXJlNDR4NDRMb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby50YXJnZXRzaXplLTI0X2FsdGZvcm0tdW5wbGF0ZWQucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1NxdWFyZTQ0eDQ0TG9nby50YXJnZXRzaXplLTI0X2FsdGZvcm0tdW5wbGF0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNmYyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3F1YXJlNDR4NDRMb2dvLnRhcmdldHNpemUtMjRfYWx0Zm9ybS11bnBsYXRlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1N0b3JlTG9nby5wbmcgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvU3RvcmVMb2dvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmEzN2MyCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1N0b3JlTG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1dpZGUzMTB4MTUwTG9nby5zY2FsZS0yMDAucG5nIGIvZXRjL3Zpc3VhbC1zdHVkaW8vQXNzZXRzL1dpZGUzMTB4MTUwTG9nby5zY2FsZS0yMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjgwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9Bc3NldHMvV2lkZTMxMHgxNTBMb2dvLnNjYWxlLTIwMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vT3BlblRocmVhZC52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vT3BlblRocmVhZC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTI3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9PcGVuVGhyZWFkLnZjeHByb2oKQEAgLTAsMCArMSwxNTUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjE0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntmOGMyMjg0NC05YjkzLTQ5NzgtODBkZi04YWYyYjM3YTdhYmJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5vdDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8RGVmYXVsdExhbmd1YWdlPmVuLVVTPC9EZWZhdWx0TGFuZ3VhZ2U+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxBcHBDb250YWluZXJBcHBsaWNhdGlvbj50cnVlPC9BcHBDb250YWluZXJBcHBsaWNhdGlvbj4KKyAgICA8QXBwbGljYXRpb25UeXBlPldpbmRvd3MgU3RvcmU8L0FwcGxpY2F0aW9uVHlwZT4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFVzZURvdE5ldE5hdGl2ZVRvb2xjaGFpbj50cnVlPC9Vc2VEb3ROZXROYXRpdmVUb29sY2hhaW4+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxQYWNrYWdlQ2VydGlmaWNhdGVLZXlGaWxlPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xPcGVuVGhyZWFkX1RlbXBvcmFyeUtleS5wZng8L1BhY2thZ2VDZXJ0aWZpY2F0ZUtleUZpbGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGFwcFw8L091dERpcj4KKyAgICA8QXBweEF1dG9JbmNyZW1lbnRQYWNrYWdlUmV2aXNpb24+VHJ1ZTwvQXBweEF1dG9JbmNyZW1lbnRQYWNrYWdlUmV2aXNpb24+CisgICAgPEFwcHhQYWNrYWdlRGlyPi4uXC4uXGJ1aWxkXGJpblxBcHBQYWNrYWdlc1w8L0FwcHhQYWNrYWdlRGlyPgorICAgIDxBcHB4QnVuZGxlPk5ldmVyPC9BcHB4QnVuZGxlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L2JpZ29iaiAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDQ1MzsyODIwNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgICUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7CisgICAgICAgIC4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGRsbFxvdEFwaS5saWI7CisgICAgICA8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50QXJncy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXENsaWVudENvbnRyb2wueGFtbC5oIj4KKyAgICAgIDxEZXBlbmRlbnRVcG9uPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xDbGllbnRDb250cm9sLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xGYWN0b3J5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSUNsaWVudENvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xJTGlzdGVuZXJDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcUHJvdG9jb2wuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xJQXN5bmNUaHJlYWROb3RpZnkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xJTWFpblBhZ2VVSUVsZW1lbnRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcTGlzdGVuZXJBcmdzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3Ncb3RBZGFwdGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3Ncb3RBcGkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xwY2guaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xBcHAueGFtbC5oIj4KKyAgICAgIDxEZXBlbmRlbnRVcG9uPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xBcHAueGFtbDwvRGVwZW5kZW50VXBvbj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xNYWluUGFnZS54YW1sLmgiPgorICAgICAgPERlcGVuZGVudFVwb24+Li5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXE1haW5QYWdlLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sLmgiPgorICAgICAgPERlcGVuZGVudFVwb24+Li5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFNlcnZlckNvbnRyb2wueGFtbDwvRGVwZW5kZW50VXBvbj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTdHJlYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU3RyZWFtTGlzdGVuZXJDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0NvbnN0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtHcmlkLnhhbWwuaCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbDwvRGVwZW5kZW50VXBvbj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xUYWxrSGVscGVyLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxBcHBsaWNhdGlvbkRlZmluaXRpb24gSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEFwcC54YW1sIj4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvQXBwbGljYXRpb25EZWZpbml0aW9uPgorICAgIDxQYWdlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xDbGllbnRDb250cm9sLnhhbWwiPgorICAgICAgPFN1YlR5cGU+RGVzaWduZXI8L1N1YlR5cGU+CisgICAgPC9QYWdlPgorICAgIDxQYWdlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xNYWluUGFnZS54YW1sIj4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sIj4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbCI+CisgICAgICA8U3ViVHlwZT5EZXNpZ25lcjwvU3ViVHlwZT4KKyAgICA8L1BhZ2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxBcHB4TWFuaWZlc3QgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFBhY2thZ2UuYXBweG1hbmlmZXN0Ij4KKyAgICAgIDxTdWJUeXBlPkRlc2lnbmVyPC9TdWJUeXBlPgorICAgIDwvQXBweE1hbmlmZXN0PgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xPcGVuVGhyZWFkX1RlbXBvcmFyeUtleS5wZngiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcTG9ja1NjcmVlbkxvZ28uc2NhbGUtMjAwLnBuZyIgLz4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nIiAvPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlMTUweDE1MExvZ28uc2NhbGUtMjAwLnBuZyIgLz4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNxdWFyZTQ0eDQ0TG9nby5zY2FsZS0yMDAucG5nIiAvPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlNDR4NDRMb2dvLnRhcmdldHNpemUtMjRfYWx0Zm9ybS11bnBsYXRlZC5wbmciIC8+CisgICAgPEltYWdlIEluY2x1ZGU9IkFzc2V0c1xTdG9yZUxvZ28ucG5nIiAvPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcV2lkZTMxMHgxNTBMb2dvLnNjYWxlLTIwMC5wbmciIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEFwcC54YW1sLmNwcCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQXBwLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sLmNwcCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sPC9EZXBlbmRlbnRVcG9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXERhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEZhY3RvcnkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXE1haW5QYWdlLnhhbWwuY3BwIj4KKyAgICAgIDxEZXBlbmRlbnRVcG9uPi4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xNYWluUGFnZS54YW1sPC9EZXBlbmRlbnRVcG9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXHBjaC5jcHAiPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPkNyZWF0ZTwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sLmNwcCI+CisgICAgICA8RGVwZW5kZW50VXBvbj4uLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU2VydmVyQ29udHJvbC54YW1sPC9EZXBlbmRlbnRVcG9uPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUNsaWVudENvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUxpc3RlbmVyQ29udGV4dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbC5jcHAiPgorICAgICAgPERlcGVuZGVudFVwb24+Li5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtHcmlkLnhhbWw8L0RlcGVuZGVudFVwb24+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL09wZW5UaHJlYWQudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vT3BlblRocmVhZC52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiNDMxNQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL09wZW5UaHJlYWQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsODcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iQ29tbW9uIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPmY4YzIyODQ0LTliOTMtNDk3OC04MGRmLThhZjJiMzdhN2FiYjwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkFzc2V0cyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj5jZjUzOWJmMS00NGFmLTRhMDYtYmUxMy01OTQxZjZhYzI2MjM8L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5ibXA7ZmJ4O2dpZjtqcGc7anBlZzt0Z2E7dGlmZjt0aWY7cG5nPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8QXBwbGljYXRpb25EZWZpbml0aW9uIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xBcHAueGFtbCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQXBwLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXE1haW5QYWdlLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXHBjaC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRmFjdG9yeS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTZXJ2ZXJDb250cm9sLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtHcmlkLnhhbWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXERhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUNsaWVudENvbnRleHQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFN0cmVhbUxpc3RlbmVyQ29udGV4dC5jcHAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXHBjaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXEFwcC54YW1sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcTWFpblBhZ2UueGFtbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXG90QWRhcHRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXG90QXBpLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSUFzeW5jVGhyZWFkTm90aWZ5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSU1haW5QYWdlVUlFbGVtZW50cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXExpc3RlbmVyQXJncy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXENsaWVudEFyZ3MuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xQcm90b2NvbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXElMaXN0ZW5lckNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xGYWN0b3J5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcSUNsaWVudENvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xDbGllbnRDb250cm9sLnhhbWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTZXJ2ZXJDb250cm9sLnhhbWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xUYWxrR3JpZC54YW1sLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTdHJlYW1DbGllbnRDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcU3RyZWFtTGlzdGVuZXJDb250ZXh0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0NvbnN0cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFRhbGtIZWxwZXIuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPEltYWdlIEluY2x1ZGU9IkFzc2V0c1xMb2NrU2NyZWVuTG9nby5zY2FsZS0yMDAucG5nIj4KKyAgICAgIDxGaWx0ZXI+QXNzZXRzPC9GaWx0ZXI+CisgICAgPC9JbWFnZT4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNwbGFzaFNjcmVlbi5zY2FsZS0yMDAucG5nIj4KKyAgICAgIDxGaWx0ZXI+QXNzZXRzPC9GaWx0ZXI+CisgICAgPC9JbWFnZT4KKyAgICA8SW1hZ2UgSW5jbHVkZT0iQXNzZXRzXFNxdWFyZTE1MHgxNTBMb2dvLnNjYWxlLTIwMC5wbmciPgorICAgICAgPEZpbHRlcj5Bc3NldHM8L0ZpbHRlcj4KKyAgICA8L0ltYWdlPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlNDR4NDRMb2dvLnNjYWxlLTIwMC5wbmciPgorICAgICAgPEZpbHRlcj5Bc3NldHM8L0ZpbHRlcj4KKyAgICA8L0ltYWdlPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3F1YXJlNDR4NDRMb2dvLnRhcmdldHNpemUtMjRfYWx0Zm9ybS11bnBsYXRlZC5wbmciPgorICAgICAgPEZpbHRlcj5Bc3NldHM8L0ZpbHRlcj4KKyAgICA8L0ltYWdlPgorICAgIDxJbWFnZSBJbmNsdWRlPSJBc3NldHNcU3RvcmVMb2dvLnBuZyI+CisgICAgICA8RmlsdGVyPkFzc2V0czwvRmlsdGVyPgorICAgIDwvSW1hZ2U+CisgICAgPEltYWdlIEluY2x1ZGU9IkFzc2V0c1xXaWRlMzEweDE1MExvZ28uc2NhbGUtMjAwLnBuZyI+CisgICAgICA8RmlsdGVyPkFzc2V0czwvRmlsdGVyPgorICAgIDwvSW1hZ2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxBcHB4TWFuaWZlc3QgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1x3aW5kb3dzXFBhY2thZ2UuYXBweG1hbmlmZXN0IiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcT3BlblRocmVhZF9UZW1wb3JhcnlLZXkucGZ4IiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcTWFpblBhZ2UueGFtbCIgLz4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcVGFsa0dyaWQueGFtbCIgLz4KKyAgICA8UGFnZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xhcHBzXHdpbmRvd3NcQ2xpZW50Q29udHJvbC54YW1sIiAvPgorICAgIDxQYWdlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcd2luZG93c1xTZXJ2ZXJDb250cm9sLnhhbWwiIC8+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vVW5pdFRlc3RzLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhNjQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qCkBAIC0wLDAgKzEsMTAzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZGxsXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgJChWQ0luc3RhbGxEaXIpVW5pdFRlc3RcaW5jbHVkZTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpCisgICAgICAgIE1CRURUTFNfQ09ORklHX0ZJTEU9Im1iZWR0bHMtY29uZmlnLmgiOworICAgICAgICBPUEVOVEhSRUFEX0NPTkZJR19GSUxFPSJvcGVudGhyZWFkLXdpbmRvd3MtY29uZmlnLmgiOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8VXNlRnVsbFBhdGhzPnRydWU8L1VzZUZ1bGxQYXRocz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICAgICUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk7CisgICAgICAgICQoVkNJbnN0YWxsRGlyKVVuaXRUZXN0XGxpYjsKKyAgICAgICAgPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2Flcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfZnV6ei5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfaG1hY19zaGEyNTYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2xpbmtfcXVhbGl0eS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbG93cGFuLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9tYWNfZnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X21lc3NhZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X21lc3NhZ2VfcXVldWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X25jcF9idWZmZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3BsYXRmb3JtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9wcmlvcml0eV9xdWV1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfdGltZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3Rvb2xjaGFpbl9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfdG9vbGNoYWluLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF93aW5kb3dzLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfcGxhdGZvcm0uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9sb3dwYW4uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3V0aWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmhwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntkOTQ4NjdkMi02ZGFlLTQ3ZTItOTYyYS01ZThlNjU4MTM0ZDF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2RkNTAxOGJlLTU0YzYtNGZkNC05ZjhkLTA4ZDUyZmMwY2Q0MH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWR0bHMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDExMWM4YmItZDM1NC00MzQ4LWFkM2MtZWI2ODMyZTg0ODMxfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vVW5pdFRlc3RzLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZGRhMAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL1VuaXRUZXN0cy52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw3OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfYWVzLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2Z1enouY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfaG1hY19zaGEyNTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbGlua19xdWFsaXR5LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2xvd3Bhbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9tYWNfZnJhbWUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbWVzc2FnZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF9tZXNzYWdlX3F1ZXVlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3RpbWVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3Rvb2xjaGFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X3dpbmRvd3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfcGxhdGZvcm0uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfbmNwX2J1ZmZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1x1bml0XHRlc3RfcGxhdGZvcm0uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcdW5pdFx0ZXN0X2xvd3Bhbi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXHVuaXRcdGVzdF91dGlsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLXdpbmRvd3MudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLXdpbmRvd3MudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MThlMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qCkBAIC0wLDAgKzEsNjYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5TdGF0aWNMaWJyYXJ5PC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9URExMOworICAgICAgICBPVEJVSUxEOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxzcmM7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfZGF0YXNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV9pbnN0YW5jZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV91YXJ0LmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLWNsaS13aW5kb3dzLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGJhMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWFydC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpX2RhdGFzZXQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV9pbnN0YW5jZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGkudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMGU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtY2xpLnZjeHByb2oKQEAgLTAsMCArMSw2NyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPlN0YXRpY0xpYnJhcnk8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBNQkVEVExTX0NPTkZJR19GSUxFPSJtYmVkdGxzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY2xpXGNsaV9kYXRhc2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpX3VhcnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWRwLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1jbGkudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNmM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLWNsaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWRwLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNsaVxjbGlfdWFydC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjbGlcY2xpX2RhdGFzZXQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3Atc3BpLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwMTQyNAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qCkBAIC0wLDAgKzEsNzUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5TdGF0aWNMaWJyYXJ5PC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MDsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2J1ZmZlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9zcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2J1ZmZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9zcGkuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3Atc3BpLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmODU0NwotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXNwaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw0NSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYnVmZmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3Bfc3BpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2Jhc2UuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9idWZmZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9zcGkuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXVhcnQudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtbmNwLXVhcnQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2M1OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qCkBAIC0wLDAgKzEsNzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5TdGF0aWNMaWJyYXJ5PC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MDsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MTsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXGhkbGMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYmFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9idWZmZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfdWFydC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcaGRsYy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3BcbmNwX2J1ZmZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF91YXJ0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLW5jcC11YXJ0LnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjU0NDMzCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC1uY3AtdWFydC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw1MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXGhkbGMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYnVmZmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfdWFydC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXGhkbGMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXG5jcF9iYXNlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfYnVmZmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxuY3BfdWFydC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTFjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvagpAQCAtMCwwICsxLDc1IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4gCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezMwNzIzQzM4LUJBM0ItNDRDOS04RDY0LUM1ODYxQTI2OTM0Rn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPlN0YXRpY0xpYnJhcnk8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9UQlVJTEQ7CisgICAgICA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgICUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk7CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXHBsYXRmb3JtczsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxhbGFybS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XGZsYXNoLXdpbmRvd3Mtc3R1YnMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxsb2dnaW5nLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcbWlzYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHBsYXRmb3JtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccmFkaW8uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxyYW5kb20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxzcGktc3R1YnMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFx1YXJ0LXdpbmRvd3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1x1dGlsc1xzZXR0aW5ncy5jcHAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHBsYXRmb3JtLXBvc2l4LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNcdXRpbHNcZmxhc2guaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbGlib3BlbnRocmVhZC13aW5kb3dzLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwZWNhOAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw1MiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthZjJhMGUwNC0xMzRkLTQwYjMtODRkNC04MmM4YzYyMmY5YWV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1xwb3NpeFxhbGFybS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcZmxhc2gtd2luZG93cy1zdHVicy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcbG9nZ2luZy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcbWlzYy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccGxhdGZvcm0uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHJhbmRvbS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccmFkaW8uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHBvc2l4XHNwaS1zdHVicy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhcdWFydC13aW5kb3dzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXHBsYXRmb3Jtc1x1dGlsc1xzZXR0aW5ncy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXNccG9zaXhccGxhdGZvcm0tcG9zaXguaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zXHV0aWxzXGZsYXNoLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlNzAyYQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQudmN4cHJvagpAQCAtMCwwICsxLDIzNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0RENTAxOEJFLTU0QzYtNEZENC05RjhELTA4RDUyRkMwQ0Q0MH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPlN0YXRpY0xpYnJhcnk8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBNQkVEVExTX0NPTkZJR19GSUxFPSJtYmVkdGxzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgT1RCVUlMRDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHM7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xpbmNsdWRlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxjb21taXNzaW9uZXJfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxib3JkZXJfcm91dGVyX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGF0YXNldF9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRhdGFzZXRfZnRkX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGhjcDZfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpY21wNl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGlwNl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGluc3RhbmNlX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcam9pbmVyX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbGlua19hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfcmF3X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbWVzc2FnZV9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXG5ldGRhdGFfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0YXNrbGV0X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2Z0ZF9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9oZWFkZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwX3NlY3VyZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfZnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9jbGllbnQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxjb21taXNzaW9uZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkdGxzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZW5lcmd5X3NjYW5fY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyX3JvdXRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGxlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHRpbWVzdGFtcC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXG1lc2hjb3BfdGx2cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGljbXA2LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9hZGRyZXNzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfZmlsdGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfbXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfcm91dGVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxuZXRpZi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYWRkcmVzc19yZXNvbHZlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxrZXlfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbGlua19xdWFsaXR5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsb3dwYW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1lc2hfZm9yd2FyZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZV9yb3V0ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxwYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHNyY19tYXRjaF9jb250cm9sbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfbmV0aWYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRvcG9sb2d5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXGNoaWxkX3N1cGVydmlzaW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXG1pc3Npbmdfc3Rybmxlbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY2F0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xtaXNzaW5nX3N0cmxjcHkuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbGlua19yYXcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9zZWN1cmUuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNvZGVfdXRpbHMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNyYzE2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxjb250ZXh0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxkZWJ1Zy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZW5jb2RpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG5ldy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGFza2xldC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRyaWNrbGVfdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19jY20uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19lY2IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGhtYWNfc2hhMjU2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xtYmVkdGxzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xwYmtkZjJfY21hYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2ZyYW1lLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGFubm91bmNlX2JlZ2luX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGNvbW1pc3Npb25lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGVuZXJneV9zY2FuX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxsZWFkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxwYW5pZF9xdWVyeV9jbGllbnQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpY21wNi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfYWRkcmVzcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2ZpbHRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X21wbC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X3JvdXRlcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcbmV0aWYuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHNvY2tldC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYWRkcmVzc19yZXNvbHZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZGF0YV9wb2xsX21hbmFnZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX2NvbnN0YW50cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3RsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX3VyaV9wYXRocy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcc2xhYWNfYWRkcmVzcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdHJpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHdyYXBfc3RkYm9vbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdGRpbnQuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzMzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDU5MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzA5YzJkMWMtODVmYi00MDgxLTgyMzUtOTI1YjQ1ZWQzYzRifTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xhcGkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e0NFNzdBQTk4LUZDOTgtNEZDNi1CQjUyLThBODg2Mzc4QUI1RX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcY29tbW9uIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthNTk2MzZiOC1kMDQ2LTQ2YjctOTkyYi03NjU3MmNhNzJiZDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXGNvYXAiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezdjOTg5ZjUzLTQ4MGItNDJkNC1hMmRjLTQ1NGFkYWZkYTgxOH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcY3J5cHRvIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0NDRhYjhjNi02YjgzLTRhNWItOTA1OS02N2Y0NjlkYTEzMzF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXG1hYyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YTQ5YTljYzMtNmEzNy00OGE2LTgwNDktYjEwYzljZWNkMTkzfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xtZXNoY29wIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswZTdmNGY1OC1hMTE1LTRjZTgtOGUzYi0xMDk0ZmI3OWFmNTJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXG5ldCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OWE2MTM1M2EtODYxMy00NDk2LTllZTgtYzNkMjgwMGM1YWM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1x0aHJlYWQiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MxNGE3YTNmLTA4OWYtNDdlZS04MGRiLTFjYWYxYjQ3YWI2Yn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcdXRpbHMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e0EwRDJFOTkwLURDNUUtNEI1Ni1BNTUyLTg4OEY5NzIxNEExN308L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcbWlzc2luZyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57RjBEREE5MC1EMTNGLTRCNTYtQTU1Mi0zMjhGOTcxMjRBODF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiNDkwNWMxNS05NzAyLTRmZjAtOGQ1Ny1lNzkyNjMzN2Q1MGZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGNvYXAiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2MyZjcyMTMyLTBkZjEtNGRiYS1iMjRmLTBhYjY4Mzg3NDUzOH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcY29tbW9uIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5MmYyMGNlNy04Zjg3LTRhMWMtYmMwYi1kN2ZhM2RmZDNiNjB9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGNyeXB0byI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzYxOGRkYzktNWM2Ni00ODVmLWEwZmYtZWJhYmIzNTA4NTY4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtYWMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkwMjk0NTk4LWU5NGItNGMwNy1hNTMxLTkzMzM1YTg5NTVkOX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcbmV0Ij4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswYzc2ZDExNi0wYjRkLTRmZWMtYTBkOC01Y2ExMjc5MTMxMjR9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXHRocmVhZCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NzAyMTQ1ZjktMGU2Ni00ZTQ1LWIzZDQtZDQzZjJjZjE3ZTEwfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtZXNoY29wIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2MzVhYWFiZi04MGYwLTQwZTItOTIxOC0yMmZmNzViYzBlMzJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXHV0aWxzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns1YWM5NmNiOS02MjU3LTQzODctOTIzOC0yNzY0OTkxNTQ2M2F9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXGFwaSI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MjVhNTY2MmQtMDcwOS00Njk4LThmZDktM2FiZmRlOGYwZmM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtaXNzaW5nIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5NzE5NjlmMi1mNmVjLTUwYjQtODA2YS05Nzk2NWM5MzRjZWZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxjb21taXNzaW9uZXJfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxib3JkZXJfcm91dGVyX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGF0YXNldF9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRhdGFzZXRfZnRkX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGhjcDZfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpY21wNl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGlwNl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGluc3RhbmNlX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcam9pbmVyX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbGlua19hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfcmF3X2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbWVzc2FnZV9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXG5ldGRhdGFfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0YXNrbGV0X2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2Z0ZF9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfc2VjdXJlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cbG9jYXRvci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cbG9nZ2luZy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cbWVzc2FnZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGFza2xldC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGltZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRsdnMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRyaWNrbGVfdGltZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19jY20uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hYy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2ZyYW1lLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaWNtcDYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2FkZHJlc3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9maWx0ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9tcGwuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9yb3V0ZXMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XG5ldGlmLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxhZGRyZXNzX3Jlc29sdmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxkYXRhX3BvbGxfbWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZW5lcmd5X3NjYW5fc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxrZXlfbWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbGlua19xdWFsaXR5LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsb3dwYW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1lc2hfZm9yd2FyZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZV9yb3V0ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV9sb2NhbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0b3BvbG9neS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGNvbW1pc3Npb25lci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9sb2NhbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkdGxzLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGVuZXJneV9zY2FuX2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxqb2luZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyX3JvdXRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxsZWFkZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BccGFuaWRfcXVlcnlfY2xpZW50LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHRpbWVzdGFtcC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxtZXNoY29wX3RsdnMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xjaGlsZF9zdXBlcnZpc2lvbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdXRpbHM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0cm5sZW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0cmxjcHkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0cmxjYXQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGFubm91bmNlX2JlZ2luX2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFubm91bmNlX2JlZ2luX3NlcnZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGlhZ25vc3RpYy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfc2VjdXJlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29kZV91dGlscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29udGV4dC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZGVidWcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGVuY29kaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2NhdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2dnaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxtZXNzYWdlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxuZXcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19mcmFtZS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdF9pbXBsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X3N0dWIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2LmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaWNtcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2FkZHJlc3MuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9maWx0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9tcGwuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9yb3V0ZXMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XG5ldGlmLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxzb2NrZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHVkcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFubm91bmNlX2JlZ2luX3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZGF0YV9wb2xsX21hbmFnZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGVuZXJneV9zY2FuX3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRca2V5X21hbmFnZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxpbmtfcXVhbGl0eS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbG93cGFuLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtZXNoX2ZvcndhcmRlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGVfY29uc3RhbnRzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGVfcm91dGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGVfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbG9jYWwuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV90bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxwYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHNyY19tYXRjaF9jb250cm9sbGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfbmV0aWYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRocmVhZF90bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdXJpX3BhdGhzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0b3BvbG9neS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdF9pbXBsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0X3N0dWIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcY29tbWlzc2lvbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxlbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xzaGEyNTYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xzbGFhY19hZGRyZXNzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdHJpbmcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0ZGJvb2wuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwX3N0ZGludC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdXRpbHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxjcmMxNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbGlua19yYXcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGlhZ25vc3RpY190bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWRfay52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2IwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvagpAQCAtMCwwICsxLDI3MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezlCMzNDMTkwLTVEMDctNDBCRi05NTM2LTY4ODQzREM1RDdBRn08L1Byb2plY3RHdWlkPgorICAgIDxUZW1wbGF0ZUd1aWQ+ezhjMGUzZDhiLWRmNDMtNDU1Yi04MTVhLTRhMGU3Mjk3M2JjNn08L1RlbXBsYXRlR3VpZD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICcnIj5XaW4zMjwvUGxhdGZvcm0+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPERyaXZlclR5cGU+S01ERjwvRHJpdmVyVHlwZT4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0tlcm5lbE1vZGVEcml2ZXIxMC4wPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxsaWJcPC9PdXREaXI+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSJvcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIFdJTkRPV1NfTE9HR0lORzsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgSEFWRV9TVERCT09MX0g9MTsKKyAgICAgICAgSEFWRV9TVERJTlRfSD0xOworICAgICAgICBPVEJVSUxEOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHM7CisgICAgICAgIC4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xpbmNsdWRlOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZV9jOTk7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEwMDs0NzA2OzQ3NDg7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgorICAgICAgPFRyZWF0V2FybmluZ0FzRXJyb3I+dHJ1ZTwvVHJlYXRXYXJuaW5nQXNFcnJvcj4KKyAgICAgIDxXcHBFbmFibGVkPnRydWU8L1dwcEVuYWJsZWQ+CisgICAgICA8V3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPi4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxwbGF0Zm9ybVxsb2dnaW5nLXdpbmRvd3MuaDwvV3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPgorICAgICAgPFdwcEFkZGl0aW9uYWxPcHRpb25zPi1rbSAlKFdwcEFkZGl0aW9uYWxPcHRpb25zKTwvV3BwQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdENvcmU8L1dwcE1vZHVsZU5hbWU+CisgICAgICA8V3BwU2VhcmNoU3RyaW5nPldQUF9JTklUX1RSQUNJTkc8L1dwcFNlYXJjaFN0cmluZz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGNvbW1pc3Npb25lcl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGJvcmRlcl9yb3V0ZXJfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxkYXRhc2V0X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcZGF0YXNldF9mdGRfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxkaGNwNl9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGljbXA2X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcaXA2X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcaW5zdGFuY2VfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxqb2luZXJfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxsaW5rX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbWVzc2FnZV9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXG5ldGRhdGFfYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0YXNrbGV0X2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2FwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcdGhyZWFkX2Z0ZF9hcGkuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9oZWFkZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwX3NlY3VyZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfZnJhbWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3QuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxjb21taXNzaW9uZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkdGxzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcYW5ub3VuY2VfYmVnaW5fY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZW5lcmd5X3NjYW5fY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyX3JvdXRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGxlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHRpbWVzdGFtcC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXG1lc2hjb3BfdGx2cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfY2xpZW50LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGljbXA2LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9hZGRyZXNzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfZmlsdGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfbXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfcm91dGVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxuZXRpZi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcdWRwNi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYWRkcmVzc19yZXNvbHZlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxkYXRhX3BvbGxfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcZW5lcmd5X3NjYW5fc2VydmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxrZXlfbWFuYWdlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbGlua19xdWFsaXR5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsb3dwYW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1lc2hfZm9yd2FyZGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxtbGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZV9yb3V0ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlcl9mdGQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YV9sb2NhbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxwYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHNyY19tYXRjaF9jb250cm9sbGVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfbmV0aWYuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRvcG9sb2d5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXGNoaWxkX3N1cGVydmlzaW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXG1pc3Npbmdfc3RybGNhdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY3B5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xtaXNzaW5nX3N0cm5sZW4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZVxvcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxjb2FwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcY29tbWlzc2lvbmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcY3J5cHRvLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcYm9yZGVyX3JvdXRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRhdGFzZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxkYXRhc2V0X2Z0ZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRoY3A2X2NsaWVudC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRoY3A2X3NlcnZlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGljbXA2LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaW5zdGFuY2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxpcDYuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxqYW1fZGV0ZWN0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcam9pbmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbGluay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXG1lc3NhZ2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxuZXRkYXRhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcb3BlbnRocmVhZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHRhc2tsZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx0aHJlYWQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx0aHJlYWRfZnRkLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcdHlwZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHVkcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfcmF3LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9zZWN1cmUuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNvZGVfdXRpbHMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNvbnRleHQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGNyYzE2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxkZWJ1Zy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZW5jb2RpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvY2F0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGxvZ2dpbmcuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG1lc3NhZ2UuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXG5ldy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGFza2xldC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRyaWNrbGVfdGltZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19jY20uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGFlc19lY2IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXGhtYWNfc2hhMjU2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xtYmVkdGxzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xwYmtkZjJfY21hYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHNoYTI1Ni5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfYmxhY2tsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2ZyYW1lLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X2ltcGwuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3Rfc3R1Yi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGFubm91bmNlX2JlZ2luX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGNvbW1pc3Npb25lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGVuZXJneV9zY2FuX2NsaWVudC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxsZWFkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxwYW5pZF9xdWVyeV9jbGllbnQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfY2xpZW50LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGljbXA2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDYuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9hZGRyZXNzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfZmlsdGVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfbXBsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfcm91dGVzLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxuZXRpZi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcc29ja2V0LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFx1ZHA2LmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtY29yZS1jb25maWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtY29yZS1kZWZhdWx0LWNvbmZpZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcb3BlbnRocmVhZC1pbnN0YW5jZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX2NvbnN0YW50cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3RsdnMuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdGx2cy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX3VyaV9wYXRocy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcc2xhYWNfYWRkcmVzcy5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdHJpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHdyYXBfc3RkYm9vbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcF9zdGRpbnQuaCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL2xpYm9wZW50aHJlYWRfay52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTZkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9saWJvcGVudGhyZWFkX2sudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsNjY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjMDljMmQxYy04NWZiLTQwODEtODIzNS05MjViNDVlZDNjNGJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXGFwaSI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57Qjc4NzQ3QTktMTFDMi00Nzg0LUI4MjUtRDQ4RkQzODhGRTJGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xjb21tb24iPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2E1OTYzNmI4LWQwNDYtNDZiNy05OTJiLTc2NTcyY2E3MmJkMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcY29hcCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57N2M5ODlmNTMtNDgwYi00MmQ0LWEyZGMtNDU0YWRhZmRhODE4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xjcnlwdG8iPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezQ0NGFiOGM2LTZiODMtNGE1Yi05MDU5LTY3ZjQ2OWRhMTMzMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcbWFjIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnthNDlhOWNjMy02YTM3LTQ4YTYtODA0OS1iMTBjOWNlY2QxOTN9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXG1lc2hjb3AiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezUwYTM5YWNjLWZhYjYtNGUyYS04NWI3LWQ3NjRiZTUyOTlmNX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNcbmV0Ij4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5YTYxMzUzYS04NjEzLTQ0OTYtOWVlOC1jM2QyODAwYzVhYzZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzXHRocmVhZCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzE0YTdhM2YtMDg5Zi00N2VlLTgwZGItMWNhZjFiNDdhYjZifTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1x1dGlscyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57QTBEMkU5OTAtREM1RS00QjU2LUE1NTItODg4Rjk3MjE0QTE3fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xtaXNzaW5nIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntGMEREQTkwLUQxM0YtNEI1Ni1BNTUyLTMyOEY5NzEyNEE4MX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2I0OTA1YzE1LTk3MDItNGZmMC04ZDU3LWU3OTI2MzM3ZDUwZn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcY29hcCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YzJmNzIxMzItMGRmMS00ZGJhLWIyNGYtMGFiNjgzODc0NTM4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xjb21tb24iPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkyZjIwY2U3LThmODctNGExYy1iYzBiLWQ3ZmEzZGZkM2I2MH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcY3J5cHRvIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjNjE4ZGRjOS01YzY2LTQ4NWYtYTBmZi1lYmFiYjM1MDg1Njh9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXG1hYyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTAyOTQ1OTgtZTk0Yi00YzA3LWE1MzEtOTMzMzVhODk1NWQ5fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1xtZXNoY29wIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns4ZjU0ZThiMy1kOGZiLTRmZWQtODhjZS00MmIzOWYxNzFkMGJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXG5ldCI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGM3NmQxMTYtMGI0ZC00ZmVjLWEwZDgtNWNhMTI3OTEzMTI0fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlc1x0aHJlYWQiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezcwMjE0NWY5LTBlNjYtNGU0NS1iM2Q0LWQ0M2YyY2YxN2UxMH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcdXRpbHMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezVhYzk2Y2I5LTYyNTctNDM4Ny05MjM4LTI3NjQ5OTE1NDYzYX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcYXBpIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2M2EyN2QyMC1iMDM5LTQ2YjQtYWZmOS02M2FjZTIwMTBiOWJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzXG9wZW50aHJlYWQiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezJiNjY2MzVkLWZiMDktNDIxYi05OTQyLThjNDNkZjVjOGM3N308L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXNcbWlzc2luZyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTcxOTY5ZjItZjZlYy01MGI0LTgwNmEtOTc5NjVjOTM0Y2VmfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcY29tbWlzc2lvbmVyX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcYm9yZGVyX3JvdXRlcl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRhdGFzZXRfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxkYXRhc2V0X2Z0ZF9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGRoY3A2X2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcaWNtcDZfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpcDZfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxpbnN0YW5jZV9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGpvaW5lcl9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXGxpbmtfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVxtZXNzYWdlX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbmV0ZGF0YV9hcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcYXBpXHRhc2tsZXRfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0aHJlYWRfYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xhcGk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGFwaVx0aHJlYWRfZnRkX2FwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcYXBpPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXAuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9oZWFkZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvYXBcY29hcF9zZWN1cmUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2NhdG9yLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2dnaW5nLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxtZXNzYWdlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0YXNrbGV0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0aW1lci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdGx2cy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cdHJpY2tsZV90aW1lci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cYWVzX2NjbS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfZnJhbWUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY193aGl0ZWxpc3QuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcZGhjcDZfc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpY21wNi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxpcDZfYWRkcmVzcy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2ZpbHRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X21wbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X3JvdXRlcy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcbmV0aWYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbGVhZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHBhbmlkX3F1ZXJ5X3NlcnZlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcc3JjX21hdGNoX2NvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXHRocmVhZF9uZXRpZi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHVkcDYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3QuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxjb21taXNzaW9uZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXRfbG9jYWwuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X21hbmFnZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X21hbmFnZXJfZnRkLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxlbmVyZ3lfc2Nhbl9jbGllbnQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbGVhZGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbWVzaGNvcF90bHZzLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cYWVzX2VjYi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9caG1hY19zaGEyNTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY3J5cHRvXHBia2RmMl9jbWFjLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xzaGEyNTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xjaGlsZF9zdXBlcnZpc2lvbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcdXRpbHM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHV0aWxzXHNsYWFjX2FkZHJlc3MuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xqYW1fZGV0ZWN0b3IuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcYW5ub3VuY2VfYmVnaW5fY2xpZW50LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY3JjMTYuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWlzc2luZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJsY2F0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWlzc2luZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcbWlzc2luZ19zdHJubGVuLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcbWlzc2luZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtY29yZS1jb25maWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29hcFxjb2FwLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfaGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb2FwXGNvYXBfc2VjdXJlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb2FwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29kZV91dGlscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cY29udGV4dC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjb21tb25cZGVidWcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXGVuY29kaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2NhdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxsb2dnaW5nLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxtZXNzYWdlLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxuZXcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRhc2tsZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNvbW1vbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcY29tbW9uXHRpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblx0cmlja2xlX3RpbWVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjb21tb248L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfY2NtLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19mcmFtZS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX3doaXRlbGlzdF9pbXBsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1hY1xtYWNfd2hpdGVsaXN0X3N0dWIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2LmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxkaGNwNl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGRoY3A2X3NlcnZlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaWNtcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbmV0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxuZXRcaXA2X2FkZHJlc3MuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9maWx0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9tcGwuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XGlwNl9yb3V0ZXMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XG5ldGlmLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xuZXQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG5ldFxzb2NrZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbmV0XHVkcDYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG5ldDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGFkZHJlc3NfcmVzb2x2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGRhdGFfcG9sbF9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxlbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGtleV9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxsaW5rX3F1YWxpdHkuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXGxvd3Bhbi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWVzaF9mb3J3YXJkZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG1sZS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX2NvbnN0YW50cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3JvdXRlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbWxlX3RsdnMuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdGhyZWFkXG5ldHdvcmtfZGF0YS5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xlYWRlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kYXRhX2xvY2FsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RhdGFfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcbmV0d29ya19kaWFnbm9zdGljLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxuZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRccGFuaWRfcXVlcnlfc2VydmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFxzcmNfbWF0Y2hfY29udHJvbGxlci5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX25ldGlmLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXHRocmVhZFx0aHJlYWRfdGx2cy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdGhyZWFkX3VyaV9wYXRocy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcdGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx0aHJlYWRcdG9wb2xvZ3kuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3QuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1hYzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWFjXG1hY19ibGFja2xpc3RfaW1wbC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWFjPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtYWNcbWFjX2JsYWNrbGlzdF9zdHViLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtYWM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcY29tbWlzc2lvbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGRhdGFzZXQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxkYXRhc2V0X2xvY2FsLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZGF0YXNldF9tYW5hZ2VyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxlbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3Bcam9pbmVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXGpvaW5lcl9yb3V0ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG1lc2hjb3BcbGVhZGVyLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtZXNoY29wPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxtZXNoY29wXHBhbmlkX3F1ZXJ5X2NsaWVudC5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcbWVzaGNvcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0aW1lc3RhbXAuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFx0bHZzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x0aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xhZXNfZWNiLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xobWFjX3NoYTI1Ni5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9cbWJlZHRscy5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY3J5cHRvPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxjcnlwdG9ccGJrZGYyX2NtYWMuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xjcnlwdG88L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNyeXB0b1xzaGEyNTYuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGNyeXB0bzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcY2hpbGRfc3VwZXJ2aXNpb24uaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHV0aWxzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1xzbGFhY19hZGRyZXNzLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcamFtX2RldGVjdG9yLmhwcCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1x1dGlsczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXHRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcbWVzaGNvcFxhbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1lc2hjb3A8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXGNvbW1vblxjcmMxNi5ocHAiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcY29tbW9uPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcb3BlbnRocmVhZC1jb3JlLWRlZmF1bHQtY29uZmlnLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xjb3JlXG9wZW50aHJlYWQtaW5zdGFuY2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHR5cGVzLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGVcb3BlbnRocmVhZC1jb3JlLXdpbmRvd3MtY29uZmlnLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxjb2FwLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGNvbW1pc3Npb25lci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxjcnlwdG8uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcYm9yZGVyX3JvdXRlci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxkYXRhc2V0LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRhdGFzZXRfZnRkLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGRoY3A2X2NsaWVudC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxkaGNwNl9zZXJ2ZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaWNtcDYuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaW5zdGFuY2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcaXA2LmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGphbV9kZXRlY3Rpb24uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcam9pbmVyLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXGxpbmsuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcbWVzc2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxuZXRkYXRhLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXNcb3BlbnRocmVhZDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxvcGVudGhyZWFkXG9wZW50aHJlYWQuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcdGFza2xldC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx0aHJlYWQuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG9wZW50aHJlYWRcdGhyZWFkX2Z0ZC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG9wZW50aHJlYWQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFx1ZHAuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xvcGVudGhyZWFkPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVxhcGlcbGlua19yYXcuaHBwIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXGFwaTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXGNvcmVcdXRpbHNcd3JhcHBlcl9zdHJpbmcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtaXNzaW5nPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwcGVyX3N0ZGJvb2wuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlc1xtaXNzaW5nPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxzcmNcY29yZVx1dGlsc1x3cmFwcGVyX3N0ZGludC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzXG1pc3Npbmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxODMyZQotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL21iZWR0bHMudmN4cHJvagpAQCAtMCwwICsxLDg2IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm1iZWR0bHM8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcbGliXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgIDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGVcbWJlZHRscworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNcaGFyZHdhcmVfZW50cm9weS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxiaWdudW0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNjbS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjaXBoZXJfd3JhcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY21hYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY3RyX2RyYmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGRlYnVnLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY2pwYWtlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3AuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGVjcF9jdXJ2ZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGVudHJvcHkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGVudHJvcHlfcG9sbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcbWQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kX3dyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1lbW9yeV9idWZmZXJfYWxsb2MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHBsYXRmb3JtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzaGEyNTYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9jaXBoZXJzdWl0ZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9jbGkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9jb29raWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF9zcnYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF90aWNrZXQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XHNzbF90bHMuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL21iZWR0bHMudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Mzk5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDkyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNccmVwbyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGEyY2U3N2UtZGNjZi00MDhjLWFlYTAtN2E3ODEyODRhOTM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezg1OTgxOWRjLWU4NGUtNDg1NC1hZDMyLTI4MTlkNjBkYTM4Yn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xoYXJkd2FyZV9lbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGFlcy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYmlnbnVtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjY20uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNpcGhlci5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNtYWMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGN0cl9kcmJnLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxkZWJ1Zy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNqcGFrZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3BfY3VydmVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZF93cmFwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxwbGF0Zm9ybS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcc2hhMjU2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2xpLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY29va2llLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfc3J2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGlja2V0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGxzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzX2sudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWZkNDJkCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2oKQEAgLTAsMCArMSw4OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn08L1Byb2plY3RHdWlkPgorICAgIDxUZW1wbGF0ZUd1aWQ+ezhjMGUzZDhiLWRmNDMtNDU1Yi04MTVhLTRhMGU3Mjk3M2JjNn08L1RlbXBsYXRlR3VpZD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICA8UGxhdGZvcm0gQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICcnIj5XaW4zMjwvUGxhdGZvcm0+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPERyaXZlclR5cGU+S01ERjwvRHJpdmVyVHlwZT4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0tlcm5lbE1vZGVEcml2ZXIxMC4wPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFRhcmdldFZlcnNpb24+V2luZG93czEwPC9UYXJnZXRWZXJzaW9uPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxsaWJcPC9PdXREaXI+CisgICAgPEludERpcj4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzOworICAgICAgICAuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGluY2x1ZGVcbWJlZHRsczsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGVfYzk5OworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTUJFRFRMU19DT05GSUdfRklMRT0ibWJlZHRscy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIEhBVkVfU1REQk9PTF9IPTE7CisgICAgICAgIEhBVkVfU1RESU5UX0g9MTsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDEzMjs0MjQyOzQyNDU7NDYwMzs0NjI3OzQ5ODY7NDk4Nzs0OTk2OyUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+CisgICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXGhhcmR3YXJlX2VudHJvcHkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGFlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYmlnbnVtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjY20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNpcGhlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNtYWMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGN0cl9kcmJnLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxkZWJ1Zy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNqcGFrZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3BfY3VydmVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZF93cmFwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxwbGF0Zm9ybS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcc2hhMjU2LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2xpLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY29va2llLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfc3J2LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGlja2V0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGxzLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiIC8+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9tYmVkdGxzX2sudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE4MDNmCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vbWJlZHRsc19rLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDkyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXNccmVwbyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGEyY2U3N2UtZGNjZi00MDhjLWFlYTAtN2E3ODEyODRhOTM2fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnkiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezg3ZWM2OGIzLTViZWMtNGM2MC1iNzY0LWMyZGFmM2ZmY2ZiMn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xoYXJkd2FyZV9lbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGFlcy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcYmlnbnVtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxjY20uYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNpcGhlci5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGNtYWMuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XGN0cl9kcmJnLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxkZWJ1Zy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNqcGFrZS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcZWNwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlY3BfY3VydmVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxlbnRyb3B5X3BvbGwuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xyZXBvXGxpYnJhcnk8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRoaXJkX3BhcnR5XG1iZWR0bHNccmVwb1xsaWJyYXJ5XG1kLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZF93cmFwLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxtZW1vcnlfYnVmZmVyX2FsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxwbGF0Zm9ybS5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXHJlcG9cbGlicmFyeTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cdGhpcmRfcGFydHlcbWJlZHRsc1xyZXBvXGxpYnJhcnlcc2hhMjU2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2lwaGVyc3VpdGVzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY2xpLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfY29va2llLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfc3J2LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGlja2V0LmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx0aGlyZF9wYXJ0eVxtYmVkdGxzXHJlcG9cbGlicmFyeVxzc2xfdGxzLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNccmVwb1xsaWJyYXJ5PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTI5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gIAorPFByb2plY3QgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+ICAKKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8QVJNIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkFSTTwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxBUk0iPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5BUk08L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vcGVudGhyZWFkLnNsbiBiL2V0Yy92aXN1YWwtc3R1ZGlvL29wZW50aHJlYWQuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTlmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vcGVudGhyZWFkLnNsbgpAQCAtMCwwICsxLDM4OSBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMi4wMAorIyBWaXN1YWwgU3R1ZGlvIDE0CitWaXN1YWxTdHVkaW9WZXJzaW9uID0gMTQuMC4yNTQyMC4xCitNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDEwLjAuNDAyMTkuMQorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJjb25maWcgZmlsZXMiLCAiY29uZmlnIGZpbGVzIiwgIns1M0Y0RUVGNi1COTZELTQ4ODctQjlDRi1DRDIxRThCRUNEMTV9IgorCVByb2plY3RTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcHJlUHJvamVjdAorCQkuLlwuLlwuYXBwdmV5b3IueW1sID0gLi5cLi5cLmFwcHZleW9yLnltbAorCQkuLlwuLlwuY29kZWNvdi55bWwgPSAuLlwuLlwuY29kZWNvdi55bWwKKwkJLi5cLi5cLnRyYXZpcy55bWwgPSAuLlwuLlwudHJhdmlzLnltbAorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gImV4YW1wbGVzIiwgImV4YW1wbGVzIiwgIns3NkVBNTQxRS1DQUIxLTREQjUtQTM5Ri1FM0RCMkE3OENERER9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJzcmMiLCAic3JjIiwgIns5NUJEMDY2OS0wNEM4LTRFRUItQjNDQy0wNTM1QjAzRjQ0Njh9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJ0ZXN0cyIsICJ0ZXN0cyIsICJ7MzVGNkFCNzEtNUJEMi00RDUzLThBNTEtRDc1Q0NENENDQzNEfSIKK0VuZFByb2plY3QKK1Byb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAidGhpcmRfcGFydHkiLCAidGhpcmRfcGFydHkiLCAiezg3M0U5RDE2LTJBMDgtNDFGQy1CMzAxLTc5Qzk1QjNBOEY5OH0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYm9wZW50aHJlYWQiLCAibGlib3BlbnRocmVhZC52Y3hwcm9qIiwgIntERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJvcGVudGhyZWFkX2siLCAibGlib3BlbnRocmVhZF9rLnZjeHByb2oiLCAiezlCMzNDMTkwLTVEMDctNDBCRi05NTM2LTY4ODQzREM1RDdBRn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1iZWR0bHMiLCAibWJlZHRscy52Y3hwcm9qIiwgIns0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYmVkdGxzX2siLCAibWJlZHRsc19rLnZjeHByb2oiLCAiezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIlVuaXRUZXN0cyIsICJVbml0VGVzdHMudmN4cHJvaiIsICJ7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGlib3BlbnRocmVhZC13aW5kb3dzIiwgImxpYm9wZW50aHJlYWQtd2luZG93cy52Y3hwcm9qIiwgInszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJvcGVudGhyZWFkLWNsaSIsICJsaWJvcGVudGhyZWFkLWNsaS52Y3hwcm9qIiwgIns0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdC1jbGkiLCAib3QtY2xpLnZjeHByb2oiLCAiezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYm9wZW50aHJlYWQtbmNwLXNwaSIsICJsaWJvcGVudGhyZWFkLW5jcC1zcGkudmN4cHJvaiIsICJ7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGlib3BlbnRocmVhZC1uY3AtdWFydCIsICJsaWJvcGVudGhyZWFkLW5jcC11YXJ0LnZjeHByb2oiLCAie0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm90LW5jcC1zcGkiLCAib3QtbmNwLXNwaS52Y3hwcm9qIiwgIntCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdC1uY3AtdWFydCIsICJvdC1uY3AtdWFydC52Y3hwcm9qIiwgIns5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJkcml2ZXJzIiwgImRyaXZlcnMiLCAiezYxRThBNEEwLTgxMzgtNDlEQi05N0I0LTNCRUM4N0M4RTEzM30iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm90THdmIiwgIm90THdmLnZjeHByb2oiLCAiezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm90QXBpIiwgIm90QXBpLnZjeHByb2oiLCAie0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYm9wZW50aHJlYWQtY2xpLXdpbmRvd3MiLCAibGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qIiwgInsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdENsaSIsICJvdENsaS52Y3hwcm9qIiwgIntDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdE5vZGVBcGkiLCAib3ROb2RlQXBpLnZjeHByb2oiLCAie0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRGNzlFRkJDfSIpID0gIm90VGVzdFJ1bm5lciIsICJvdFRlc3RSdW5uZXIuY3Nwcm9qIiwgIntENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJPcGVuVGhyZWFkIiwgIk9wZW5UaHJlYWQudmN4cHJvaiIsICJ7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9ID0ge0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzcGluZWxfayIsICJzcGluZWxfay52Y3hwcm9qIiwgIntBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9IgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJvdHRtcCIsICJvdHRtcC52Y3hwcm9qIiwgInsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8QVJNID0gRGVidWd8QVJNCisJCURlYnVnfHg2NCA9IERlYnVnfHg2NAorCQlEZWJ1Z3x4ODYgPSBEZWJ1Z3x4ODYKKwkJUmVsZWFzZXxBUk0gPSBSZWxlYXNlfEFSTQorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0CisJCVJlbGVhc2V8eDg2ID0gUmVsZWFzZXx4ODYKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJe0RENTAxOEJFLTU0QzYtNEZENC05RjhELTA4RDUyRkMwQ0Q0MH0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0RENTAxOEJFLTU0QzYtNEZENC05RjhELTA4RDUyRkMwQ0Q0MH0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7REQ1MDE4QkUtNTRDNi00RkQ0LTlGOEQtMDhENTJGQzBDRDQwfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfEFSTS5EZXBsb3kuMCA9IERlYnVnfEFSTQorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7OUIzM0MxOTAtNUQwNy00MEJGLTk1MzYtNjg4NDNEQzVEN0FGfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs5QjMzQzE5MC01RDA3LTQwQkYtOTUzNi02ODg0M0RDNUQ3QUZ9LlJlbGVhc2V8eDg2LkRlcGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJezQxMTFDOEJCLUQzNTQtNDM0OC1BRDNDLUVCNjgzMkU4NDgzMX0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0MTExQzhCQi1EMzU0LTQzNDgtQUQzQy1FQjY4MzJFODQ4MzF9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uRGVidWd8eDg2LkRlcGxveS4wID0gRGVidWd8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LlJlbGVhc2V8QVJNLkRlcGxveS4wID0gUmVsZWFzZXxBUk0KKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezY5QkU4RThDLUNGMUUtNDZENi05MzJCLURCNDM1RjQ3MDU5Qn0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGRDY0QkYxNy04RDM2LTQ1NzgtOEQxMy03N0IxMjNCRTMwRDN9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7RkQ2NEJGMTctOEQzNi00NTc4LThEMTMtNzdCMTIzQkUzMEQzfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtGRDY0QkYxNy04RDM2LTQ1NzgtOEQxMy03N0IxMjNCRTMwRDN9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezMwNzIzQzM4LUJBM0ItNDRDOS04RDY0LUM1ODYxQTI2OTM0Rn0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXszMDcyM0MzOC1CQTNCLTQ0QzktOEQ2NC1DNTg2MUEyNjkzNEZ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezMwNzIzQzM4LUJBM0ItNDRDOS04RDY0LUM1ODYxQTI2OTM0Rn0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDFCMzIwNjktNjMyRS00NTc4LTg1NUItQTM2RUJGQTgwQjU2fS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJezQxQjMyMDY5LTYzMkUtNDU3OC04NTVCLUEzNkVCRkE4MEI1Nn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NDFCMzIwNjktNjMyRS00NTc4LTg1NUItQTM2RUJGQTgwQjU2fS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs5MUQzQURFQS1GMUZFLTQ0MzMtOTVCNi1GOEY2QTdDRjdCQUZ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs5MUQzQURFQS1GMUZFLTQ0MzMtOTVCNi1GOEY2QTdDRjdCQUZ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0I5MkY0NDlFLTBGRDktNDRGQy1BQ0ZBLTY1MjFBMzI0MENBMn0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtCOTJGNDQ5RS0wRkQ5LTQ0RkMtQUNGQS02NTIxQTMyNDBDQTJ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0I5MkY0NDlFLTBGRDktNDRGQy1BQ0ZBLTY1MjFBMzI0MENBMn0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RDk0ODY3RDItNkRBRS00N0UyLTk2MkEtNUU4RTY1ODEzNEQxfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJe0Q5NDg2N0QyLTZEQUUtNDdFMi05NjJBLTVFOEU2NTgxMzREMX0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDk0ODY3RDItNkRBRS00N0UyLTk2MkEtNUU4RTY1ODEzNEQxfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7QjRDNzQ0RUMtQjY2Mi00NkM2LUEwNzYtRkI1OEZBOEZERjFCfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezlFRUY5RENELUVBOEYtNDE1NC1CRDAyLUFCMkIzMUNFQzMyNH0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXs5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezlFRUY5RENELUVBOEYtNDE1NC1CRDAyLUFCMkIzMUNFQzMyNH0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfEFSTS5EZXBsb3kuMCA9IERlYnVnfEFSTQorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LkRlYnVnfHg2NC5EZXBsb3kuMCA9IERlYnVnfHg2NAorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5EZWJ1Z3x4ODYuRGVwbG95LjAgPSBEZWJ1Z3xXaW4zMgorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0uUmVsZWFzZXxBUk0uRGVwbG95LjAgPSBSZWxlYXNlfEFSTQorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezNGMUY3RjZDLTJBMzMtNDYzNS05ODgwLTA4RkM1QkM0RTQzNX0uUmVsZWFzZXx4NjQuRGVwbG95LjAgPSBSZWxlYXNlfHg2NAorCQl7M0YxRjdGNkMtMkEzMy00NjM1LTk4ODAtMDhGQzVCQzRFNDM1fS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9LlJlbGVhc2V8eDg2LkRlcGxveS4wID0gUmVsZWFzZXxXaW4zMgorCQl7RUQwRUEyNjItQzIyMi00MkM3LTk4RDMtRTcwQzcyOTc4RUQyfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RUQwRUEyNjItQzIyMi00MkM3LTk4RDMtRTcwQzcyOTc4RUQyfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtFRDBFQTI2Mi1DMjIyLTQyQzctOThEMy1FNzBDNzI5NzhFRDJ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5SZWxlYXNlfEFSTS5BY3RpdmVDZmcgPSBSZWxlYXNlfEFSTQorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBUk0KKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsyODgzNDQ5OC0zODM3LTQ0QTUtOEY2Ny0yNDlBQkFCN0I5N0R9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezI4ODM0NDk4LTM4MzctNDRBNS04RjY3LTI0OUFCQUI3Qjk3RH0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0NBQzhBMDBFLUM2QzgtNENGMC1CQTVBLUM5QTlBNjAxQzZEQn0uRGVidWd8QVJNLkFjdGl2ZUNmZyA9IERlYnVnfEFSTQorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5EZWJ1Z3xBUk0uQnVpbGQuMCA9IERlYnVnfEFSTQorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0NBQzhBMDBFLUM2QzgtNENGMC1CQTVBLUM5QTlBNjAxQzZEQn0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QjdDNkYzNDQtNzI4Ny00OTMwLUFGMzgtMjIzNjIyQkQ4Q0JCfS5EZWJ1Z3xBUk0uQWN0aXZlQ2ZnID0gRGVidWd8QVJNCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QVJNCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uUmVsZWFzZXxBUk0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxBUk0KKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0uUmVsZWFzZXxBUk0uQnVpbGQuMCA9IFJlbGVhc2V8QVJNCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QjdDNkYzNDQtNzI4Ny00OTMwLUFGMzgtMjIzNjIyQkQ4Q0JCfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtCN0M2RjM0NC03Mjg3LTQ5MzAtQUYzOC0yMjM2MjJCRDhDQkJ9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBbnkgQ1BVCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfEFSTS5CdWlsZC4wID0gRGVidWd8QW55IENQVQorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QW55IENQVQorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5SZWxlYXNlfEFSTS5CdWlsZC4wID0gUmVsZWFzZXxBbnkgQ1BVCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtENTU3N0U1MS1GQTMxLTQ4MDItODY2OS0xREIzMjgwNTkzNUV9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RjhDMjI4NDQtOUI5My00OTc4LTgwREYtOEFGMkIzN0E3QUJCfS5SZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Y4QzIyODQ0LTlCOTMtNDk3OC04MERGLThBRjJCMzdBN0FCQn0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0CisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfS5SZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0CisJCXtBNTU3NjZCNS01OEI2LTQ1MTktODM1RS01QTRCN0MxNjRCNUF9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfEFSTS5BY3RpdmVDZmcgPSBEZWJ1Z3xBUk0KKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8QVJNLkJ1aWxkLjAgPSBEZWJ1Z3xBUk0KKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8QVJNLkRlcGxveS4wID0gRGVidWd8QVJNCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uRGVidWd8eDY0LkRlcGxveS4wID0gRGVidWd8eDY0CisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LkRlYnVnfHg4Ni5EZXBsb3kuMCA9IERlYnVnfFdpbjMyCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8QVJNLkFjdGl2ZUNmZyA9IFJlbGVhc2V8QVJNCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8QVJNLkJ1aWxkLjAgPSBSZWxlYXNlfEFSTQorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfS5SZWxlYXNlfEFSTS5EZXBsb3kuMCA9IFJlbGVhc2V8QVJNCisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfS5SZWxlYXNlfHg2NC5EZXBsb3kuMCA9IFJlbGVhc2V8eDY0CisJCXsxRUFGRjdDOC04MjE1LTRFREEtODNCMi1FRUI1NkNFQ0U4NER9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH0uUmVsZWFzZXx4ODYuRGVwbG95LjAgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKE5lc3RlZFByb2plY3RzKSA9IHByZVNvbHV0aW9uCisJCXtERDUwMThCRS01NEM2LTRGRDQtOUY4RC0wOEQ1MkZDMENENDB9ID0gezk1QkQwNjY5LTA0QzgtNEVFQi1CM0NDLTA1MzVCMDNGNDQ2OH0KKwkJezlCMzNDMTkwLTVEMDctNDBCRi05NTM2LTY4ODQzREM1RDdBRn0gPSB7OTVCRDA2NjktMDRDOC00RUVCLUIzQ0MtMDUzNUIwM0Y0NDY4fQorCQl7NDExMUM4QkItRDM1NC00MzQ4LUFEM0MtRUI2ODMyRTg0ODMxfSA9IHs4NzNFOUQxNi0yQTA4LTQxRkMtQjMwMS03OUM5NUIzQThGOTh9CisJCXs2OUJFOEU4Qy1DRjFFLTQ2RDYtOTMyQi1EQjQzNUY0NzA1OUJ9ID0gezg3M0U5RDE2LTJBMDgtNDFGQy1CMzAxLTc5Qzk1QjNBOEY5OH0KKwkJe0ZENjRCRjE3LThEMzYtNDU3OC04RDEzLTc3QjEyM0JFMzBEM30gPSB7MzVGNkFCNzEtNUJEMi00RDUzLThBNTEtRDc1Q0NENENDQzNEfQorCQl7MzA3MjNDMzgtQkEzQi00NEM5LThENjQtQzU4NjFBMjY5MzRGfSA9IHs3NkVBNTQxRS1DQUIxLTREQjUtQTM5Ri1FM0RCMkE3OENERER9CisJCXs0MUIzMjA2OS02MzJFLTQ1NzgtODU1Qi1BMzZFQkZBODBCNTZ9ID0gezk1QkQwNjY5LTA0QzgtNEVFQi1CM0NDLTA1MzVCMDNGNDQ2OH0KKwkJezkxRDNBREVBLUYxRkUtNDQzMy05NUI2LUY4RjZBN0NGN0JBRn0gPSB7NzZFQTU0MUUtQ0FCMS00REI1LUEzOUYtRTNEQjJBNzhDREREfQorCQl7QjkyRjQ0OUUtMEZEOS00NEZDLUFDRkEtNjUyMUEzMjQwQ0EyfSA9IHs5NUJEMDY2OS0wNEM4LTRFRUItQjNDQy0wNTM1QjAzRjQ0Njh9CisJCXtEOTQ4NjdEMi02REFFLTQ3RTItOTYyQS01RThFNjU4MTM0RDF9ID0gezk1QkQwNjY5LTA0QzgtNEVFQi1CM0NDLTA1MzVCMDNGNDQ2OH0KKwkJe0I0Qzc0NEVDLUI2NjItNDZDNi1BMDc2LUZCNThGQThGREYxQn0gPSB7NzZFQTU0MUUtQ0FCMS00REI1LUEzOUYtRTNEQjJBNzhDREREfQorCQl7OUVFRjlEQ0QtRUE4Ri00MTU0LUJEMDItQUIyQjMxQ0VDMzI0fSA9IHs3NkVBNTQxRS1DQUIxLTREQjUtQTM5Ri1FM0RCMkE3OENERER9CisJCXszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9ID0gezYxRThBNEEwLTgxMzgtNDlEQi05N0I0LTNCRUM4N0M4RTEzM30KKwkJe0VEMEVBMjYyLUMyMjItNDJDNy05OEQzLUU3MEM3Mjk3OEVEMn0gPSB7NjFFOEE0QTAtODEzOC00OURCLTk3QjQtM0JFQzg3QzhFMTMzfQorCQl7Mjg4MzQ0OTgtMzgzNy00NEE1LThGNjctMjQ5QUJBQjdCOTdEfSA9IHs5NUJEMDY2OS0wNEM4LTRFRUItQjNDQy0wNTM1QjAzRjQ0Njh9CisJCXtDQUM4QTAwRS1DNkM4LTRDRjAtQkE1QS1DOUE5QTYwMUM2REJ9ID0gezYxRThBNEEwLTgxMzgtNDlEQi05N0I0LTNCRUM4N0M4RTEzM30KKwkJe0I3QzZGMzQ0LTcyODctNDkzMC1BRjM4LTIyMzYyMkJEOENCQn0gPSB7NjFFOEE0QTAtODEzOC00OURCLTk3QjQtM0JFQzg3QzhFMTMzfQorCQl7RDU1NzdFNTEtRkEzMS00ODAyLTg2NjktMURCMzI4MDU5MzVFfSA9IHszNUY2QUI3MS01QkQyLTRENTMtOEE1MS1ENzVDQ0Q0Q0NDM0R9CisJCXtGOEMyMjg0NC05QjkzLTQ5NzgtODBERi04QUYyQjM3QTdBQkJ9ID0gezc2RUE1NDFFLUNBQjEtNERCNS1BMzlGLUUzREIyQTc4Q0RERH0KKwkJe0E1NTc2NkI1LTU4QjYtNDUxOS04MzVFLTVBNEI3QzE2NEI1QX0gPSB7OTVCRDA2NjktMDRDOC00RUVCLUIzQ0MtMDUzNUIwM0Y0NDY4fQorCQl7MUVBRkY3QzgtODIxNS00RURBLTgzQjItRUVCNTZDRUNFODREfSA9IHs2MUU4QTRBMC04MTM4LTQ5REItOTdCNC0zQkVDODdDOEUxMzN9CisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdC1jbGkudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LWNsaS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjY5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdC1jbGkudmN4cHJvagpAQCAtMCwwICsxLDgwIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9Im9wZW50aHJlYWQuY29uZmlndXJhdGlvbi5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57OTFEM0FERUEtRjFGRS00NDMzLTk1QjYtRjhGNkE3Q0Y3QkFGfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBPUEVOVEhSRUFEX0NPTkZJR19GSUxFPSJvcGVudGhyZWFkLXdpbmRvd3MtY29uZmlnLmgiOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxleGFtcGxlc1xwbGF0Zm9ybXM7CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgIG1pbmNvcmUubGliOworICAgICAgPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9ImxpYm9wZW50aHJlYWQtY2xpLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQxYjMyMDY5LTYzMmUtNDU3OC04NTViLWEzNmViZmE4MGI1Nn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9ImxpYm9wZW50aHJlYWQudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57ZGQ1MDE4YmUtNTRjNi00ZmQ0LTlmOGQtMDhkNTJmYzBjZDQwfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZHRscy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0MTExYzhiYi1kMzU0LTQzNDgtYWQzYy1lYjY4MzJlODQ4MzF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57MzA3MjNjMzgtYmEzYi00NGM5LThkNjQtYzU4NjFhMjY5MzRmfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xjbGlcbWFpbi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdC1jbGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtY2xpLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDczNWIzCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtY2xpLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDE0IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xjbGlcbWFpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjExN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtbmNwLXNwaS52Y3hwcm9qCkBAIC0wLDAgKzEsODIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCNEM3NDRFQy1CNjYyLTQ2QzYtQTA3Ni1GQjU4RkE4RkRGMUJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgICBtaW5jb3JlLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcbmNwXG1haW4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntkZDUwMThiZS01NGM2LTRmZDQtOWY4ZC0wOGQ1MmZjMGNkNDB9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLW5jcC1zcGkudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57YjkyZjQ0OWUtMGZkOS00NGZjLWFjZmEtNjUyMWEzMjQwY2EyfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZHRscy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0MTExYzhiYi1kMzU0LTQzNDgtYWQzYy1lYjY4MzJlODQ4MzF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLXdpbmRvd3MudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57MzA3MjNjMzgtYmEzYi00NGM5LThkNjQtYzU4NjFhMjY5MzRmfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtbmNwLXNwaS52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmZDI4NwotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC1zcGkudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aGg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xuY3BcbWFpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC11YXJ0LnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdC1uY3AtdWFydC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDA2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdC1uY3AtdWFydC52Y3hwcm9qCkBAIC0wLDAgKzEsODIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns5RUVGOURDRC1FQThGLTQxNTQtQkQwMi1BQjJCMzFDRUMzMjR9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEFwcGxpY2F0aW9uVHlwZT5XaW5kb3dzIFN0b3JlPC9BcHBsaWNhdGlvblR5cGU+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjE0LjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjEwLjAuMTA1ODYuMDwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtTWluVmVyc2lvbj4xMC4wLjEwMjQwLjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+CisgICAgPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjEwLjA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXREaXI+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE9QRU5USFJFQURfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCI7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEk9MDsKKyAgICAgICAgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQ9MTsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNccGxhdGZvcm1zOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgICAuLlwuLlxzcmNcY29yZTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgICBtaW5jb3JlLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGFwcHNcbmNwXG1haW4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntkZDUwMThiZS01NGM2LTRmZDQtOWY4ZC0wOGQ1MmZjMGNkNDB9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJsaWJvcGVudGhyZWFkLW5jcC11YXJ0LnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2Q5NDg2N2QyLTZkYWUtNDdlMi05NjJhLTVlOGU2NTgxMzRkMX08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWR0bHMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDExMWM4YmItZDM1NC00MzQ4LWFkM2MtZWI2ODMyZTg0ODMxfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC13aW5kb3dzLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezMwNzIzYzM4LWJhM2ItNDRjOS04ZDY0LWM1ODYxYTI2OTM0Zn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC11YXJ0LnZjeHByb2ouZmlsdGVycyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290LW5jcC11YXJ0LnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZkMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3QtbmNwLXVhcnQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aGg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcYXBwc1xuY3BcbWFpbi5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290QXBpLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdEFwaS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWNmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdEFwaS52Y3hwcm9qCkBAIC0wLDAgKzEsNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RUQwRUEyNjItQzIyMi00MkM3LTk4RDMtRTcwQzcyOTc4RUQyfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxkbGxcPC9PdXREaXI+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQ+QzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxNC4wXFRlYW0gVG9vbHNcU3RhdGljIEFuYWx5c2lzIFRvb2xzXFJ1bGUgU2V0c1xOYXRpdmVSZWNvbW1lbmRlZFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+CisgICAgPEFwaVZhbGlkYXRvcl9FbmFibGU+ZmFsc2U8L0FwaVZhbGlkYXRvcl9FbmFibGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgICBPVEFQSV9FWFBPUlRTOworICAgICAgPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxTRExDaGVjaz50cnVlPC9TRExDaGVjaz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3NcaW5jbHVkZTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90QXBpOworICAgICAgICAuLlwuLlxpbmNsdWRlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdwcEVuYWJsZWQ+dHJ1ZTwvV3BwRW5hYmxlZD4KKyAgICAgIDxXcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+Li5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXGxvZ2dpbmctd2luZG93cy5oPC9XcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdEFwaTwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxFbmFibGVQUkVmYXN0PnRydWU8L0VuYWJsZVBSRWZhc3Q+CisgICAgICA8RXhjZXB0aW9uSGFuZGxpbmcgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknPT0nQVJNJyI+U3luYzwvRXhjZXB0aW9uSGFuZGxpbmc+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEFwaVxwcmVjb21wLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90QXBpXGRsbG1haW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90QXBpXG90QXBpLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3RBcGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3RBcGkudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmRlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdEFwaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwzMCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGlcb3RBcGkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGlcZGxsbWFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGlccHJlY29tcC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290Q2xpLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdENsaS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTEwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdENsaS52Y3hwcm9qCkBAIC0wLDAgKzEsNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57Q0FDOEEwMEUtQzZDOC00Q0YwLUJBNUEtQzlBOUE2MDFDNkRCfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBTdG9yZTwvQXBwbGljYXRpb25UeXBlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xNC4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4xMC4wLjEwNTg2LjA8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24+CisgICAgPFdpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24+MTAuMC4xMDI0MC4wPC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uPgorICAgIDxBcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4xMC4wPC9BcHBsaWNhdGlvblR5cGVSZXZpc2lvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iU2hhcmVkIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBPUEVOVEhSRUFEX0ZURD0xOworICAgICAgICBPVERMTDsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8U0RMQ2hlY2s+dHJ1ZTwvU0RMQ2hlY2s+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdENsaVxtYWluLmNwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZC1jbGktd2luZG93cy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PnsyODgzNDQ5OC0zODM3LTQ0YTUtOGY2Ny0yNDlhYmFiN2I5N2R9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJvdEFwaS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntlZDBlYTI2Mi1jMjIyLTQyYzctOThkMy1lNzBjNzI5NzhlZDJ9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3RDbGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3RDbGkudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2QxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdENsaS52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RDbGlcbWFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3RMd2YudmN4cHJvaiBiL2V0Yy92aXN1YWwtc3R1ZGlvL290THdmLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhZjE3MAotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290THdmLnZjeHByb2oKQEAgLTAsMCArMSwxMzQgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnszRjFGN0Y2Qy0yQTMzLTQ2MzUtOTg4MC0wOEZDNUJDNEU0MzV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8VGVtcGxhdGVHdWlkPns4YjE4MDBiOS1kMDE3LTQwMjktOTc4NS0xM2VmNWU1YjMyOGV9PC9UZW1wbGF0ZUd1aWQ+CisgICAgPFRhcmdldEZyYW1ld29ya1ZlcnNpb24+djQuNTwvVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj4KKyAgICA8TWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+MTIuMDwvTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+CisgICAgPFJvb3ROYW1lc3BhY2U+b3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPERyaXZlclR5cGU+S01ERjwvRHJpdmVyVHlwZT4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0tlcm5lbE1vZGVEcml2ZXIxMC4wPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkRyaXZlcjwvQ29uZmlndXJhdGlvblR5cGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXHN5c1w8L091dERpcj4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0PkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVQcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVQcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE5ESVNfV0RNPTE7CisgICAgICAgIE5ESVM2MzA9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9QUk9KRUNUX0NPUkVfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtY29yZS13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgIDwvUHJlUHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xpbmNsdWRlX2M5OTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmOworICAgICAgICAuLlwuLlxzcmM7CisgICAgICAgIC4uXC4uXHNyY1xjb3JlOworICAgICAgPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxUcmVhdFdhcm5pbmdBc0Vycm9yPnRydWU8L1RyZWF0V2FybmluZ0FzRXJyb3I+CisgICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyk7NDIwMTs0MjE0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxQcmVDb21waWxlZEhlYWRlckZpbGU+cHJlY29tcC5oPC9QcmVDb21waWxlZEhlYWRlckZpbGU+CisgICAgICA8UHJlQ29tcGlsZWRIZWFkZXI+VXNlPC9QcmVDb21waWxlZEhlYWRlcj4KKyAgICAgIDxXcHBFbmFibGVkPnRydWU8L1dwcEVuYWJsZWQ+CisgICAgICA8V3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPi4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxwbGF0Zm9ybVxsb2dnaW5nLXdpbmRvd3MuaDwvV3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPgorICAgICAgPFdwcEFkZGl0aW9uYWxPcHRpb25zPi1rbSAlKFdwcEFkZGl0aW9uYWxPcHRpb25zKTwvV3BwQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdEx3ZjwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxXcHBTZWFyY2hTdHJpbmc+V1BQX0lOSVRfVFJBQ0lORzwvV3BwU2VhcmNoU3RyaW5nPgorICAgICAgPEVuYWJsZVBSRWZhc3Q+dHJ1ZTwvRW5hYmxlUFJFZmFzdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsuLjsuOzwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgICAlKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOworICAgICAgICBuZGlzLmxpYjsKKyAgICAgICAgd2Rtc2VjLmxpYjsKKyAgICAgICAgbmV0aW8ubGliOworICAgICAgICB1dWlkLmxpYjsKKyAgICAgICAgY25nLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgICAgPFBvc3RCdWlsZEV2ZW50PgorICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknPT0nQVJNJyI+aW5mMmNhdCAvZHJpdmVyOiQoVGFyZ2V0RGlyKSAvb3M6OF9BUk08L0NvbW1hbmQ+CisgICAgPC9Qb3N0QnVpbGRFdmVudD4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGFkZHJlc3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxhbGFybS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGNvbW1hbmQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkYXRhcGF0aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGRyaXZlci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGV2ZW50cHJvY2Vzc2luZy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGlvY29udHJvbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHNldHRpbmdzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdGhyZWFkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdHVubmVsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZccHJlY29tcC5jIj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uOy47JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVQcm9jZXNzb3JEZWZpbml0aW9ucz4lKFByZVByb2Nlc3NvckRlZmluaXRpb25zKTtORElTX1dETT0xPC9QcmVQcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVDb21waWxlZEhlYWRlckZpbGU+cHJlY29tcC5oPC9QcmVDb21waWxlZEhlYWRlckZpbGU+CisgICAgICA8UHJlQ29tcGlsZWRIZWFkZXI+Q3JlYXRlPC9QcmVDb21waWxlZEhlYWRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkZXZpY2UuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxyYWRpby5jIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGNvbW1hbmQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkZXZpY2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxkcml2ZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxpb2NvbnRyb2wuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxuc2loZWxwZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxyYWRpby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHRocmVhZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHR1bm5lbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHByZWNvbXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIuaCIgLz4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIucmMiIC8+CisgICAgPEluZiBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2Zcb3RMd2YuaW5mIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsZXNUb1BhY2thZ2UgSW5jbHVkZT0iJChUYXJnZXRQYXRoKSIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGlib3BlbnRocmVhZF9rLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezliMzNjMTkwLTVkMDctNDBiZi05NTM2LTY4ODQzZGM1ZDdhZn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWR0bHNfay52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns2OWJlOGU4Yy1jZjFlLTQ2ZDYtOTMyYi1kYjQzNWY0NzA1OWJ9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJzcGluZWxfay52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PnthNTU3NjZiNS01OGI2LTQ1MTktODM1ZS01YTRiN2MxNjRiNWF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdEx3Zi52Y3hwcm9qLmZpbHRlcnMgYi9ldGMvdmlzdWFsLXN0dWRpby9vdEx3Zi52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1NDBlMwotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290THdmLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDEwNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkRyaXZlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OEU0MTIxNEItNjc4NS00Q0ZFLUI5OTItMDM3RDY4OTQ5QTE0fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmluZjtpbnY7aW54O21vZjttYzs8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxJbmYgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXG90THdmLmluZiI+CisgICAgICA8RmlsdGVyPkRyaXZlciBGaWxlczwvRmlsdGVyPgorICAgIDwvSW5mPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxwcmVjb21wLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxmaWx0ZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGRyaXZlci5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZGV2aWNlLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxuc2loZWxwZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGlvY29udHJvbC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZccmFkaW8uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHRocmVhZC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdHVubmVsLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxjb21tYW5kLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZmlsdGVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxkZXZpY2UuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHByZWNvbXAuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGFsYXJtLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxyYWRpby5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZHJpdmVyLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3Zlxpb2NvbnRyb2wuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGV2ZW50cHJvY2Vzc2luZy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcZGF0YXBhdGguYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGFkZHJlc3MuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXHR1bm5lbC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcdGhyZWFkLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdEx3ZlxzZXR0aW5ncy5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RMd2ZcY29tbWFuZC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90THdmXGZpbHRlci5yYyI+CisgICAgICA8RmlsdGVyPlJlc291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290Tm9kZUFwaS52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3ROb2RlQXBpLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkNjg3NgotLS0gL2Rldi9udWxsCisrKyBiL2V0Yy92aXN1YWwtc3R1ZGlvL290Tm9kZUFwaS52Y3hwcm9qCkBAIC0wLDAgKzEsNzggQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QjdDNkYzNDQtNzI4Ny00OTMwLUFGMzgtMjIzNjIyQkQ4Q0JCfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm90PC9Sb290TmFtZXNwYWNlPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8RHJpdmVyVGFyZ2V0UGxhdGZvcm0+VW5pdmVyc2FsPC9Ecml2ZXJUYXJnZXRQbGF0Zm9ybT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93c0FwcGxpY2F0aW9uRm9yRHJpdmVyczEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPE91dERpcj4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxkbGxcPC9PdXREaXI+CisgICAgPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+CisgICAgPEFwaVZhbGlkYXRvcl9FbmFibGU+ZmFsc2U8L0FwaVZhbGlkYXRvcl9FbmFibGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgICAgJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7CisgICAgICAgIE9QRU5USFJFQURfRlREPTE7CisgICAgICAgIE9UQVBJX0VYUE9SVFM7CisgICAgICA8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICAgICUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xpbmNsdWRlOworICAgICAgICAuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3RBcGk7CisgICAgICAgIC4uXC4uXGluY2x1ZGU7CisgICAgICA8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFNETENoZWNrPnRydWU8L1NETENoZWNrPgorICAgICAgPFdwcEVuYWJsZWQ+dHJ1ZTwvV3BwRW5hYmxlZD4KKyAgICAgIDxXcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+Li5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXGxvZ2dpbmctd2luZG93cy5oPC9XcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdE5vZGVBcGk8L1dwcE1vZHVsZU5hbWU+CisgICAgICA8RW5hYmxlUFJFZmFzdD50cnVlPC9FbmFibGVQUkVmYXN0PgorICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJz09J0FSTSciPlN5bmM8L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgIG50ZGxsLmxpYjsKKyAgICAgIDwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlccHJlY29tcC5oIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlcZGxsbWFpbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3ROb2RlQXBpXG90Tm9kZUFwaS5jcHAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im90QXBpLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2VkMGVhMjYyLWMyMjItNDJjNy05OGQzLWU3MGM3Mjk3OGVkMn08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdE5vZGVBcGkudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3ROb2RlQXBpLnZjeHByb2ouZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTUyN2FlCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3ROb2RlQXBpLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDMwIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5oO2hoO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPnJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4O3RpZmY7dGlmO3BuZzt3YXY7bWZjcmliYm9uLW1zPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlcb3ROb2RlQXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90Tm9kZUFwaVxkbGxtYWluLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdE5vZGVBcGlccHJlY29tcC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL290VGVzdFJ1bm5lci5jc3Byb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9vdFRlc3RSdW5uZXIuY3Nwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODQwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdFRlc3RSdW5uZXIuY3Nwcm9qCkBAIC0wLDAgKzEsMTEyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSIxNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9IiQoTVNCdWlsZEV4dGVuc2lvbnNQYXRoKVwkKE1TQnVpbGRUb29sc1ZlcnNpb24pXE1pY3Jvc29mdC5Db21tb24ucHJvcHMiIENvbmRpdGlvbj0iRXhpc3RzKCckKE1TQnVpbGRFeHRlbnNpb25zUGF0aClcJChNU0J1aWxkVG9vbHNWZXJzaW9uKVxNaWNyb3NvZnQuQ29tbW9uLnByb3BzJykiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IiAnJChQbGF0Zm9ybSknID09ICcnICI+QW55Q1BVPC9QbGF0Zm9ybT4KKyAgICA8UHJvamVjdEd1aWQ+e0Q1NTc3RTUxLUZBMzEtNDgwMi04NjY5LTFEQjMyODA1OTM1RX08L1Byb2plY3RHdWlkPgorICAgIDxPdXRwdXRUeXBlPkV4ZTwvT3V0cHV0VHlwZT4KKyAgICA8QXBwRGVzaWduZXJGb2xkZXI+UHJvcGVydGllczwvQXBwRGVzaWduZXJGb2xkZXI+CisgICAgPFJvb3ROYW1lc3BhY2U+b3RUZXN0UnVubmVyPC9Sb290TmFtZXNwYWNlPgorICAgIDxBc3NlbWJseU5hbWU+b3RUZXN0UnVubmVyPC9Bc3NlbWJseU5hbWU+CisgICAgPFRhcmdldEZyYW1ld29ya1ZlcnNpb24+djQuNS4yPC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxGaWxlQWxpZ25tZW50PjUxMjwvRmlsZUFsaWdubWVudD4KKyAgICA8QXV0b0dlbmVyYXRlQmluZGluZ1JlZGlyZWN0cz50cnVlPC9BdXRvR2VuZXJhdGVCaW5kaW5nUmVkaXJlY3RzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iICckKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnRGVidWd8QW55Q1BVJyAiPgorICAgIDxQbGF0Zm9ybVRhcmdldD5BbnlDUFU8L1BsYXRmb3JtVGFyZ2V0PgorICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVidWdTeW1ib2xzPgorICAgIDxEZWJ1Z1R5cGU+ZnVsbDwvRGVidWdUeXBlPgorICAgIDxPcHRpbWl6ZT5mYWxzZTwvT3B0aW1pemU+CisgICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8QmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvQmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPE91dHB1dFBhdGg+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0cHV0UGF0aD4KKyAgICA8RGVmaW5lQ29uc3RhbnRzPkRFQlVHO1RSQUNFPC9EZWZpbmVDb25zdGFudHM+CisgICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+CisgICAgPFdhcm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIgJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdSZWxlYXNlfEFueUNQVScgIj4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+QW55Q1BVPC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RGVidWdUeXBlPnBkYm9ubHk8L0RlYnVnVHlwZT4KKyAgICA8T3B0aW1pemU+dHJ1ZTwvT3B0aW1pemU+CisgICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8QmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvQmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPE91dHB1dFBhdGg+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0cHV0UGF0aD4KKyAgICA8RGVmaW5lQ29uc3RhbnRzPlRSQUNFPC9EZWZpbmVDb25zdGFudHM+CisgICAgPEVycm9yUmVwb3J0PnByb21wdDwvRXJyb3JSZXBvcnQ+CisgICAgPFdhcm5pbmdMZXZlbD40PC9XYXJuaW5nTGV2ZWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKScgPT0gJ0RlYnVnfHg2NCciPgorICAgIDxEZWJ1Z1N5bWJvbHM+dHJ1ZTwvRGVidWdTeW1ib2xzPgorICAgIDxEZWZpbmVDb25zdGFudHM+REVCVUc7VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KKyAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9JbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgIDxCYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9CYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8T3V0cHV0UGF0aD4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXRwdXRQYXRoPgorICAgIDxQbGF0Zm9ybVRhcmdldD54NjQ8L1BsYXRmb3JtVGFyZ2V0PgorICAgIDxFcnJvclJlcG9ydD5wcm9tcHQ8L0Vycm9yUmVwb3J0PgorICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0Pk1pbmltdW1SZWNvbW1lbmRlZFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CisgICAgPFByZWZlcjMyQml0PnRydWU8L1ByZWZlcjMyQml0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknID09ICdSZWxlYXNlfHg2NCciPgorICAgIDxEZWZpbmVDb25zdGFudHM+VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8T3B0aW1pemU+dHJ1ZTwvT3B0aW1pemU+CisgICAgPEludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8QmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcb3RUZXN0UnVubmVyXDwvQmFzZUludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPE91dHB1dFBhdGg+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcZXhlXDwvT3V0cHV0UGF0aD4KKyAgICA8RGVidWdUeXBlPnBkYm9ubHk8L0RlYnVnVHlwZT4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+eDY0PC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldD5NaW5pbXVtUmVjb21tZW5kZWRSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxQcmVmZXIzMkJpdD50cnVlPC9QcmVmZXIzMkJpdD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnRGVidWd8V2luMzInIj4KKyAgICA8RGVidWdTeW1ib2xzPnRydWU8L0RlYnVnU3ltYm9scz4KKyAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9JbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgIDxCYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4uLlwuLlxidWlsZFxvYmpcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxvdFRlc3RSdW5uZXJcPC9CYXNlSW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4KKyAgICA8T3V0cHV0UGF0aD4uLlwuLlxidWlsZFxiaW5cJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVxleGVcPC9PdXRwdXRQYXRoPgorICAgIDxEZWZpbmVDb25zdGFudHM+REVCVUc7VFJBQ0U8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8RGVidWdUeXBlPmZ1bGw8L0RlYnVnVHlwZT4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+eDg2PC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldD5NaW5pbXVtUmVjb21tZW5kZWRSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxQcmVmZXIzMkJpdD50cnVlPC9QcmVmZXIzMkJpdD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJyA9PSAnUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXG90VGVzdFJ1bm5lclw8L0ludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgPEJhc2VJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXG90VGVzdFJ1bm5lclw8L0Jhc2VJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgIDxPdXRwdXRQYXRoPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGV4ZVw8L091dHB1dFBhdGg+CisgICAgPERlZmluZUNvbnN0YW50cz5UUkFDRTwvRGVmaW5lQ29uc3RhbnRzPgorICAgIDxPcHRpbWl6ZT50cnVlPC9PcHRpbWl6ZT4KKyAgICA8RGVidWdUeXBlPnBkYm9ubHk8L0RlYnVnVHlwZT4KKyAgICA8UGxhdGZvcm1UYXJnZXQ+eDg2PC9QbGF0Zm9ybVRhcmdldD4KKyAgICA8RXJyb3JSZXBvcnQ+cHJvbXB0PC9FcnJvclJlcG9ydD4KKyAgICA8Q29kZUFuYWx5c2lzUnVsZVNldD5NaW5pbXVtUmVjb21tZW5kZWRSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgorICAgIDxQcmVmZXIzMkJpdD50cnVlPC9QcmVmZXIzMkJpdD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtIiAvPgorICAgIDxSZWZlcmVuY2UgSW5jbHVkZT0iU3lzdGVtLkNvcmUiIC8+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uWG1sLkxpbnEiIC8+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uRGF0YS5EYXRhU2V0RXh0ZW5zaW9ucyIgLz4KKyAgICA8UmVmZXJlbmNlIEluY2x1ZGU9Ik1pY3Jvc29mdC5DU2hhcnAiIC8+CisgICAgPFJlZmVyZW5jZSBJbmNsdWRlPSJTeXN0ZW0uRGF0YSIgLz4KKyAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5OZXQuSHR0cCIgLz4KKyAgICA8UmVmZXJlbmNlIEluY2x1ZGU9IlN5c3RlbS5YbWwiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXG90VGVzdFJ1bm5lclxQcm9ncmFtLmNzIiAvPgorICAgIDxDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXG90VGVzdFJ1bm5lclxBc3NlbWJseUluZm8uY3MiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXG90VGVzdFJ1bm5lclxBcHAuY29uZmlnIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKE1TQnVpbGRUb29sc1BhdGgpXE1pY3Jvc29mdC5DU2hhcnAudGFyZ2V0cyIgLz4KKyAgPCEtLSBUbyBtb2RpZnkgeW91ciBidWlsZCBwcm9jZXNzLCBhZGQgeW91ciB0YXNrIGluc2lkZSBvbmUgb2YgdGhlIHRhcmdldHMgYmVsb3cgYW5kIHVuY29tbWVudCBpdC4gCisgICAgICAgT3RoZXIgc2ltaWxhciBleHRlbnNpb24gcG9pbnRzIGV4aXN0LCBzZWUgTWljcm9zb2Z0LkNvbW1vbi50YXJnZXRzLgorICA8VGFyZ2V0IE5hbWU9IkJlZm9yZUJ1aWxkIj4KKyAgPC9UYXJnZXQ+CisgIDxUYXJnZXQgTmFtZT0iQWZ0ZXJCdWlsZCI+CisgIDwvVGFyZ2V0PgorICAtLT4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ldGMvdmlzdWFsLXN0dWRpby9vdHRtcC52Y3hwcm9qIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE1ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvagpAQCAtMCwwICsxLDEwMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxMi4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVudGhyZWFkLmNvbmZpZ3VyYXRpb24ucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezFFQUZGN0M4LTgyMTUtNEVEQS04M0IyLUVFQjU2Q0VDRTg0RH08L1Byb2plY3RHdWlkPgorICAgIDxUZW1wbGF0ZUd1aWQ+ezQ5N2UzMWNiLTA1NmItNGYzMS1hYmI4LTQ0N2ZkNTVlZTVhNX08L1RlbXBsYXRlR3VpZD4KKyAgICA8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC41PC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPgorICAgIDxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4xMi4wPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4KKyAgICA8Um9vdE5hbWVzcGFjZT5vdDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzS2VybmVsTW9kZURyaXZlcjEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHJpdmVyPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8RHJpdmVyVHlwZT5LTURGPC9Ecml2ZXJUeXBlPgorICAgIDxEcml2ZXJUYXJnZXRQbGF0Zm9ybT5Vbml2ZXJzYWw8L0RyaXZlclRhcmdldFBsYXRmb3JtPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxPdXREaXI+Li5cLi5cYnVpbGRcYmluXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcc3lzXDwvT3V0RGlyPgorICAgIDxJbnREaXI+Li5cLi5cYnVpbGRcb2JqXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQ+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KKyAgICA8UnVuQ29kZUFuYWx5c2lzPnRydWU8L1J1bkNvZGVBbmFseXNpcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZVByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZVByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTkRJU19NSU5JUE9SVF9EUklWRVI9MTsKKyAgICAgICAgTkRJU19XRE09MTsKKyAgICAgICAgTkRJUzY1MF9NSU5JUE9SVD0xOworICAgICAgICBPVFRNUF9MRUdBQ1k9MTsKKyAgICAgIDwvUHJlUHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXGluY2x1ZGU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcDsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+CisgICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPgorICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPiUoRGlzYWJsZVNwZWNpZmljV2FybmluZ3MpOzQyMDA7NDIwMTs0MjE0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgIDxXcHBFbmFibGVkPnRydWU8L1dwcEVuYWJsZWQ+CisgICAgICA8V3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPi4uXC4uXGluY2x1ZGVcb3BlbnRocmVhZFxwbGF0Zm9ybVxsb2dnaW5nLXdpbmRvd3MuaDwvV3BwU2NhbkNvbmZpZ3VyYXRpb25EYXRhPgorICAgICAgPFdwcEFkZGl0aW9uYWxPcHRpb25zPi1rbSAlKFdwcEFkZGl0aW9uYWxPcHRpb25zKTwvV3BwQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8V3BwTW9kdWxlTmFtZT5vdHRtcDwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxXcHBTZWFyY2hTdHJpbmc+V1BQX0lOSVRfVFJBQ0lORzwvV3BwU2VhcmNoU3RyaW5nPgorICAgICAgPEVuYWJsZVBSRWZhc3Q+dHJ1ZTwvRW5hYmxlUFJFZmFzdD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZVByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgICAlKFByZVByb2Nlc3NvckRlZmluaXRpb25zKTsKKyAgICAgICAgTkRJU19NSU5JUE9SVF9EUklWRVI9MTsKKyAgICAgICAgTkRJU19XRE09MTsKKyAgICAgICAgTkRJUzY1MF9NSU5JUE9SVD0xOworICAgICAgICBPVFRNUF9MRUdBQ1k9MTsKKyAgICAgIDwvUHJlUHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpOy4uOy47PC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvUmVzb3VyY2VDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICAgICUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7CisgICAgICAgIG5kaXMubGliOworICAgICAgPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgICA8UG9zdEJ1aWxkRXZlbnQ+CisgICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKFBsYXRmb3JtKSc9PSdBUk0nIj5pbmYyY2F0IC9kcml2ZXI6JChUYXJnZXREaXIpIC9vczo4X0FSTTwvQ29tbWFuZD4KKyAgICA8L1Bvc3RCdWlsZEV2ZW50PgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcYWRhcHRlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcZGV2aWNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxkcml2ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXGhkbGMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXG9pZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcc2VyaWFsLmNwcCIgLz4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxvdHRtcC5yYyIgLz4KKyAgICA8SW5mIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxvdHRtcC5pbmYiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcYWRhcHRlci5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcZGV2aWNlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxkcml2ZXIuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXGhhcmR3YXJlLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxoZGxjLmhwcCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xvdHRtcFxvaWQuaHBwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cZXhhbXBsZXNcZHJpdmVyc1x3aW5kb3dzXG90dG1wXHBjaC5ocHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxleGFtcGxlc1xkcml2ZXJzXHdpbmRvd3Ncb3R0bXBcc2VyaWFsLmhwcCIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbGVzVG9QYWNrYWdlIEluY2x1ZGU9IiQoVGFyZ2V0UGF0aCkiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vb3R0bXAudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YmExZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9vdHRtcC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57QkVEMTA3MDQtQkZEQS00MjdDLUJCMDEtQjA4RjIwQUIxNzE4fTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntBNkM2MUIyOC05NjFDLTRCNjMtODkyQi1BN0U1RUIyQTRCM0V9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezBDQkZDNjNDLTExQ0ItNEU1Ri05NUYxLTE4N0JFM0Y2REE0NH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkRyaXZlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NkMyQkFGRDQtRTI0NC00RkYyLUEwMDItRkJDQ0YxNEFGQTlEfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmluZjtpbnY7aW54O21vZjttYzs8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2V0Yy92aXN1YWwtc3R1ZGlvL3NwaW5lbF9rLnZjeHByb2ogYi9ldGMvdmlzdWFsLXN0dWRpby9zcGluZWxfay52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDk5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9zcGluZWxfay52Y3hwcm9qCkBAIC0wLDAgKzEsNzIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJbXBvcnQgUHJvamVjdD0ib3BlbnRocmVhZC5jb25maWd1cmF0aW9uLnByb3BzIiAvPiAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QTU1NzY2QjUtNThCNi00NTE5LTgzNUUtNUE0QjdDMTY0QjVBfTwvUHJvamVjdEd1aWQ+CisgICAgPFRlbXBsYXRlR3VpZD57OGMwZTNkOGItZGY0My00NTViLTgxNWEtNGEwZTcyOTczYmM2fTwvVGVtcGxhdGVHdWlkPgorICAgIDxUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPnY0LjU8L1RhcmdldEZyYW1ld29ya1ZlcnNpb24+CisgICAgPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPjEyLjA8L01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPgorICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJyciPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8Um9vdE5hbWVzcGFjZT5vdDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8RHJpdmVyVHlwZT5LTURGPC9Ecml2ZXJUeXBlPgorICAgIDxEcml2ZXJUYXJnZXRQbGF0Zm9ybT5Vbml2ZXJzYWw8L0RyaXZlclRhcmdldFBsYXRmb3JtPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzS2VybmVsTW9kZURyaXZlcjEwLjA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VGFyZ2V0VmVyc2lvbj5XaW5kb3dzMTA8L1RhcmdldFZlcnNpb24+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8T3V0RGlyPi4uXC4uXGJ1aWxkXGJpblwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXGxpYlw8L091dERpcj4KKyAgICA8SW50RGlyPi4uXC4uXGJ1aWxkXG9ialwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAgICUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpOworICAgICAgICBIQVZFX1NUUk5MRU49MTsKKyAgICAgICAgT1BFTlRIUkVBRF9GVEQ9MTsKKyAgICAgICAgSEFWRV9TVERCT09MX0g9MTsKKyAgICAgICAgSEFWRV9TVERJTlRfSD0xOworICAgICAgICBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9FUlJOT19WQVI9MTsKKyAgICAgICAgT1BFTlRIUkVBRF9DT05GSUdfRklMRT0ib3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgICAgT1BFTlRIUkVBRF9QUk9KRUNUX0NPUkVfQ09ORklHX0ZJTEU9Im9wZW50aHJlYWQtY29yZS13aW5kb3dzLWNvbmZpZy5oIjsKKyAgICAgIDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTsKKyAgICAgICAgLi5cLi5caW5jbHVkZTsKKyAgICAgICAgLi5cLi5cc3JjXGNvcmU7CisgICAgICAgIC4uXC4uXGV4YW1wbGVzXGRyaXZlcnNcd2luZG93c1xpbmNsdWRlX2M5OTsKKyAgICAgIDwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MTAwOzQ3MDY7NDc0ODslKERpc2FibGVTcGVjaWZpY1dhcm5pbmdzKTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+CisgICAgICA8VHJlYXRXYXJuaW5nQXNFcnJvcj50cnVlPC9UcmVhdFdhcm5pbmdBc0Vycm9yPgorICAgICAgPFdwcEVuYWJsZWQ+dHJ1ZTwvV3BwRW5hYmxlZD4KKyAgICAgIDxXcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+Li5cLi5caW5jbHVkZVxvcGVudGhyZWFkXHBsYXRmb3JtXGxvZ2dpbmctd2luZG93cy5oPC9XcHBTY2FuQ29uZmlndXJhdGlvbkRhdGE+CisgICAgICA8V3BwQWRkaXRpb25hbE9wdGlvbnM+LWttICUoV3BwQWRkaXRpb25hbE9wdGlvbnMpPC9XcHBBZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxXcHBNb2R1bGVOYW1lPm90Q29yZTwvV3BwTW9kdWxlTmFtZT4KKyAgICAgIDxXcHBTZWFyY2hTdHJpbmc+V1BQX0lOSVRfVFJBQ0lORzwvV3BwU2VhcmNoU3RyaW5nPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHNyY1xuY3Bcc3BpbmVsLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZXRjL3Zpc3VhbC1zdHVkaW8vc3BpbmVsX2sudmN4cHJvai5maWx0ZXJzIGIvZXRjL3Zpc3VhbC1zdHVkaW8vc3BpbmVsX2sudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzEyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9ldGMvdmlzdWFsLXN0dWRpby9zcGluZWxfay52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57QzAzNEY3RjQtM0NCRC00QjlBLUEwMzMtMEQ3NkExOTVCNTgxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns3QTk1ODg1RS1BRDIzLTQzOUEtQjI4My05QkRFMEUzOUQ4NEV9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezFFMURGOTNFLTk3NDYtNDY4OC1BMUYwLTdCNTkzNzhDRjI4Rn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxzcmNcbmNwXHNwaW5lbC5jIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cc3JjXG5jcFxzcGluZWwuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS1jYzI1MzggYi9leGFtcGxlcy9NYWtlZmlsZS1jYzI1MzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1NGQxMAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWNjMjUzOApAQCAtMCwwICsxLDI2MiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisuTk9UUEFSQUxMRUw6CisKK0FSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFyCitDQ0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1hcworQ1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktY3BwCitDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1nY2MKK0NYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWcrKworTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktbGQKK1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLXN0cmlwCitOTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1ubQorUkFOTElCICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktcmFubGliCitPQkpDT1BZICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1vYmpjb3B5CisKK0J1aWxkSm9icyAgICAgICAgICAgICAgICAgICAgICA/PSAxMAorCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgID0gXAorICAgIC0tZW5hYmxlLWNsaS1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1uY3AtYXBwPWFsbCAgICAgICAgICBcCisgICAgLS13aXRoLW5jcC1idXM9dWFydCAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRpYWcgICAgICAgICAgICAgICAgIFwKKyAgICAtLXdpdGgtZXhhbXBsZXM9Y2MyNTM4ICAgICAgICBcCisgICAgLS13aXRoLXBsYXRmb3JtLWluZm89Q0MyNTM4ICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGRpciAkKGFic3BhdGggJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpL2NvbW1vbi1zd2l0Y2hlcy5taworCitUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQoc2hlbGwgcmVhZGxpbmsgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCitBYnNUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQocmVhbHBhdGggJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCisKK0NPTkZJR19GSUxFICAgICAgPSBPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRT0nXCJvcGVudGhyZWFkLWNvcmUtY2MyNTM4LWNvbmZpZy5oXCInCitDT05GSUdfRklMRV9QQVRIID0gJChBYnNUb3BTb3VyY2VEaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtbm9zdGFydGZpbGVzICAgICAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5hbm8uc3BlY3MgICAgICAgICAgICAgXAorICAgIC1zcGVjcz1ub3N5cy5zcGVjcyAgICAgICAgICAgIFwKKyAgICAtV2wsLS1nYy1zZWN0aW9ucyAgICAgICAgICAgICBcCisgICAgLVdsLC1NYXA9bWFwLm1hcCAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRUNITyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBtYWtlCitNS0RJUl9QICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1rZGlyIC1wCitMTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IHJtIC1mCisKK0lOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgOj0gL3Vzci9iaW4vaW5zdGFsbAorSU5TVEFMTEZMQUdTICAgICAgICAgICAgICAgICAgICA6PSAtcAorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBjYzI1MzgKKworQVJDSFMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworCitUb3BUYXJnZXRMaWJEaXIgICAgICAgICAgICAgICAgID0gJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYgorCitpZm5kZWYgQnVpbGRKb2JzCitCdWlsZEpvYnMgOj0gJChzaGVsbCBnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOKQorZW5kaWYKK0pPQlNGTEFHIDo9IC1qJChCdWlsZEpvYnMpCisKKyMKKyMgY29uZmlndXJlLWFyY2ggPGFyY2g+CisjCisjIENvbmZpZ3VyZSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLWFyY2gKKyQoRUNITykgIiAgQ09ORklHICAgJChUYXJnZXRUdXBsZSkuLi4iCisoY2QgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUD0iJChDUFApIiBDQz0iJChDQykiIENYWD0iJChDWFgpIiBPQkpDPSIkKE9CSkMpIiBPQkpDWFg9IiQoT0JKQ1hYKSIgQVI9IiQoQVIpIiBSQU5MSUI9IiQoUkFOTElCKSIgTk09IiQoTk0pIiBTVFJJUD0iJChTVFJJUCkiIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBjb3J0ZXgtbTMKKyMKKworY29ydGV4LW0zX3RhcmdldF9BQkkgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworY29ydGV4LW0zX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tM190YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTNfdGFyZ2V0X0NYWEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW0zIC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW0zX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWNjMjY1MCBiL2V4YW1wbGVzL01ha2VmaWxlLWNjMjY1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTBiNWYyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUtY2MyNjUwCkBAIC0wLDAgKzEsMjY3IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1tdGQgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9bXRkICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPWNjMjY1MCAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPWNjMjY1MCAgIFwKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIkKENDMjY1MF9NQkVEVExTX0NQUEZMQUdTKSIgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGRpciAkKGFic3BhdGggJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpL2NvbW1vbi1zd2l0Y2hlcy5taworCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyAgPSAtRE1CRURUTFNfQ09ORklHX0ZJTEU9J1wiY2MyNjUwLW1iZWR0bHMtY29uZmlnLmhcIicKK0NDMjY1MF9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChQV0QpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoUFdEKS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoUFdEKS90aGlyZF9wYXJ0eS9tYmVkdGxzCitDQzI2NTBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoUFdEKS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZQorCitDQzI2NTBfQ09ORklHX0ZJTEVfQ1BQRkxBR1MgID0gLURPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRT0nXCJvcGVudGhyZWFkLWNvcmUtY2MyNjUwLWNvbmZpZy5oXCInCitDQzI2NTBfQ09ORklHX0ZJTEVfQ1BQRkxBR1MgKz0gLUkkKFBXRCkvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC8KKworQ09NTU9OQ0ZMQUdTICAgICAgICAgICAgICAgICAgIDo9IFwKKyAgICAtZmRhdGEtc2VjdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZmdW5jdGlvbi1zZWN0aW9ucyAgICAgICAgICAgXAorICAgIC1PcyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChDQzI2NTBfQ09ORklHX0ZJTEVfQ1BQRkxBR1MpXAorICAgICQoTlVMTCkKKworQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ1BQRkxBR1MpICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ0ZMQUdTKSAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ1hYRkxBR1MpICAgICAgICAgICAgXAorICAgIC1mbm8tZXhjZXB0aW9ucyAgICAgICAgICAgICAgIFwKKyAgICAtZm5vLXJ0dGkgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9MREZMQUdTKSAgICAgICAgICAgICBcCisgICAgLW5vc3RhcnRmaWxlcyAgICAgICAgICAgICAgICAgXAorICAgIC1zcGVjcz1uYW5vLnNwZWNzICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bm9zeXMuc3BlY3MgICAgICAgICAgICBcCisgICAgLVdsLC0tZ2Mtc2VjdGlvbnMgICAgICAgICAgICAgXAorICAgIC1XbCwtTWFwPW1hcC5tYXAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0VDSE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gQGVjaG8KK01BS0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWFrZQorTUtESVJfUCAgICAgICAgICAgICAgICAgICAgICAgICA6PSBta2RpciAtcAorTE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBsbiAtcworUk1fRiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBybSAtZgorCitJTlNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgIDo9IC91c3IvYmluL2luc3RhbGwKK0lOU1RBTExGTEFHUyAgICAgICAgICAgICAgICAgICAgOj0gLXAKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBjYzI2NTAKKworQVJDSFMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworCitUb3BUYXJnZXRMaWJEaXIgICAgICAgICAgICAgICAgID0gJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYgorCitpZm5kZWYgQnVpbGRKb2JzCitCdWlsZEpvYnMgOj0gJChzaGVsbCBnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOKQorZW5kaWYKK0pPQlNGTEFHIDo9IC1qJChCdWlsZEpvYnMpCisKKyMKKyMgY29uZmlndXJlLWFyY2ggPGFyY2g+CisjCisjIENvbmZpZ3VyZSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLWFyY2gKKyQoRUNITykgIiAgQ09ORklHICAgJChUYXJnZXRUdXBsZSkuLi4iCisoY2QgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUD0iJChDUFApIiBDQz0iJChDQykiIENYWD0iJChDWFgpIiBPQkpDPSIkKE9CSkMpIiBPQkpDWFg9IiQoT0JKQ1hYKSIgQVI9IiQoQVIpIiBSQU5MSUI9IiQoUkFOTElCKSIgTk09IiQoTk0pIiBTVFJJUD0iJChTVFJJUCkiIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBjb3J0ZXgtbTMKKyMKKworY29ydGV4LW0zX3RhcmdldF9BQkkgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMworY29ydGV4LW0zX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tM190YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTNfdGFyZ2V0X0NYWEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW0zIC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW0zX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMyAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWRhMTUwMDAgYi9leGFtcGxlcy9NYWtlZmlsZS1kYTE1MDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDljMWEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9NYWtlZmlsZS1kYTE1MDAwCkBAIC0wLDAgKzEsMjYxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPWRhMTUwMDAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPURBMTUwMDAgIFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChkaXIgJChhYnNwYXRoICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS9jb21tb24tc3dpdGNoZXMubWsKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitDT05GSUdfRklMRSAgICAgICAgICAgICAgICAgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1kYTE1MDAwLWNvbmZpZy5oXCInCitDT05GSUdfRklMRV9QQVRIICAgICAgICAgICAgICAgICA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC8KKworQ09NTU9OQ0ZMQUdTICAgICAgICAgICAgICAgICAgIDo9IFwKKyAgICAtZmRhdGEtc2VjdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZmdW5jdGlvbi1zZWN0aW9ucyAgICAgICAgICAgXAorICAgIC1PcyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUQkKENPTkZJR19GSUxFKSAgICAgICAgICAgICAgXAorICAgIC1JJChDT05GSUdfRklMRV9QQVRIKSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NQUEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NGTEFHUykgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NYWEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAtZm5vLWV4Y2VwdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZuby1ydHRpICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfTERGTEFHUykgICAgICAgICAgICAgXAorICAgIC1ub3N0YXJ0ZmlsZXMgICAgICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5vc3lzLnNwZWNzICAgICAgICAgICAgXAorICAgIC1XbCwtLWdjLXNlY3Rpb25zICAgICAgICAgICAgIFwKKyAgICAtV2wsLU1hcD1tYXAubWFwICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitFQ0hPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IEBlY2hvCitNQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1ha2UKK01LRElSX1AgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWtkaXIgLXAKK0xOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbG4gLXMKK1JNX0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gcm0gLWYKKworSU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICA6PSAvdXNyL2Jpbi9pbnN0YWxsCitJTlNUQUxMRkxBR1MgICAgICAgICAgICAgICAgICAgIDo9IC1wCisKK0J1aWxkUGF0aCAgICAgICAgICAgICAgICAgICAgICAgPSBidWlsZAorVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICAgICA9ICQoQnVpbGRQYXRoKQorQWJzVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcEJ1aWxkRGlyKQorCitSZXN1bHRQYXRoICAgICAgICAgICAgICAgICAgICAgID0gb3V0cHV0CitUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgICAgID0gJChSZXN1bHRQYXRoKQorQWJzVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcFJlc3VsdERpcikKKworVGFyZ2V0VHVwbGUgICAgICAgICAgICAgICAgICAgICA9IGRhMTUwMDAKKworQVJDSFMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMAorCitUb3BUYXJnZXRMaWJEaXIgICAgICAgICAgICAgICAgID0gJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYgorCitpZm5kZWYgQnVpbGRKb2JzCitCdWlsZEpvYnMgOj0gJChzaGVsbCBnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOKQorZW5kaWYKK0pPQlNGTEFHIDo9IC1qJChCdWlsZEpvYnMpCisKKyMKKyMgY29uZmlndXJlLWFyY2ggPGFyY2g+CisjCisjIENvbmZpZ3VyZSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLWFyY2gKKyQoRUNITykgIiAgQ09ORklHICAgJChUYXJnZXRUdXBsZSkuLi4iCisoY2QgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUD0iJChDUFApIiBDQz0iJChDQykiIENYWD0iJChDWFgpIiBPQkpDPSIkKE9CSkMpIiBPQkpDWFg9IiQoT0JKQ1hYKSIgQVI9IiQoQVIpIiBSQU5MSUI9IiQoUkFOTElCKSIgTk09IiQoTk0pIiBTVFJJUD0iJChTVFJJUCkiIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBjb3J0ZXgtbTAKKyMKKworY29ydGV4LW0wX3RhcmdldF9BQkkgICAgICAgICAgICAgICAgICA9IGNvcnRleC1tMAorY29ydGV4LW0wX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMCAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tMF90YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTAgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBfdGFyZ2V0X0NYWEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW0wIC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW0wX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMCAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWVmcjMyIGIvZXhhbXBsZXMvTWFrZWZpbGUtZWZyMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzYTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWVmcjMyCkBAIC0wLDAgKzEsMjc2IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0NDQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZGlhZyAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1leGFtcGxlcz1lZnIzMiAgICAgICAgIFwKKyAgICAtLXdpdGgtcGxhdGZvcm0taW5mbz1FRlIzMiAgICBcCisgICAgTUJFRFRMU19DUFBGTEFHUz0iJChFRlIzMl9NQkVEVExTX0NQUEZMQUdTKSIgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGRpciAkKGFic3BhdGggJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpL2NvbW1vbi1zd2l0Y2hlcy5taworCitUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQoc2hlbGwgcmVhZGxpbmsgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCitBYnNUb3BTb3VyY2VEaXIgICAgICAgICAgICAgICAgIDo9ICQoZGlyICQocmVhbHBhdGggJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCisKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgID0gLURNQkVEVExTX0NPTkZJR19GSUxFPSdcIm1iZWR0bHMtY29uZmlnLmhcIicKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLURNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEU9J1wiZWZyMzItbWJlZHRscy1jb25maWcuaFwiJworRUZSMzJfTUJFRFRMU19DUFBGTEFHUyArPSAtREVGUjMyTUcxMlA0MzJGMTAyNEdMMTI1CitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9jcnlwdG8KK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3V0aWwvdGhpcmRfcGFydHkvbWJlZHRscy9jb25maWdzCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9DTVNJUy9JbmNsdWRlCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS91dGlsL3RoaXJkX3BhcnR5L21iZWR0bHMvc2xfY3J5cHRvL2luY2x1ZGUKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL0RldmljZS9TaWxpY29uTGFicy9FRlIzMk1HMTJQL0luY2x1ZGUKK0VGUjMyX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL2luYworRUZSMzJfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoQWJzVG9wU291cmNlRGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlCitFRlIzMl9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMKKworQ09ORklHX0ZJTEUgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1lZnIzMi1jb25maWcuaFwiJworQ09ORklHX0ZJTEVfUEFUSCA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtbm9zdGFydGZpbGVzICAgICAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5hbm8uc3BlY3MgICAgICAgICAgICAgXAorICAgIC1zcGVjcz1ub3N5cy5zcGVjcyAgICAgICAgICAgIFwKKyAgICAtV2wsLS1nYy1zZWN0aW9ucyAgICAgICAgICAgICBcCisgICAgLVdsLC1NYXA9bWFwLm1hcCAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRUNITyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBtYWtlCitNS0RJUl9QICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1rZGlyIC1wCitMTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IHJtIC1mCisKK0lOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgOj0gL3Vzci9iaW4vaW5zdGFsbAorSU5TVEFMTEZMQUdTICAgICAgICAgICAgICAgICAgICA6PSAtcAorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBlZnIzMgorCitBUkNIUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00CisKK1RvcFRhcmdldExpYkRpciAgICAgICAgICAgICAgICAgPSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8YXJjaD4KKyMKKyMgQ29uZmlndXJlIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZS4KKyMKK2RlZmluZSBjb25maWd1cmUtYXJjaAorJChFQ0hPKSAiICBDT05GSUcgICAkKFRhcmdldFR1cGxlKS4uLiIKKyhjZCAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgJiYgJChBYnNUb3BTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCitJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorQ1BQPSIkKENQUCkiIENDPSIkKENDKSIgQ1hYPSIkKENYWCkiIE9CSkM9IiQoT0JKQykiIE9CSkNYWD0iJChPQkpDWFgpIiBBUj0iJChBUikiIFJBTkxJQj0iJChSQU5MSUIpIiBOTT0iJChOTSkiIFNUUklQPSIkKFNUUklQKSIgQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBcCistLWhvc3Q9YXJtLW5vbmUtZWFiaSBcCistLXByZWZpeD0vIFwKKy0tZXhlYy1wcmVmaXg9LyQoVGFyZ2V0VHVwbGUpIFwKKyQoY29uZmlndXJlX09QVElPTlMpKQorZW5kZWYgIyBjb25maWd1cmUtYXJjaAorCisjCisjIGJ1aWxkLWFyY2ggPGFyY2g+CisjCisjIEJ1aWxkIHRoZSBPcGVuVGhyZWFkIGludGVybWVkaWF0ZSBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gYnVpbGQuCisjCitkZWZpbmUgYnVpbGQtYXJjaAorJChFQ0hPKSAiICBCVUlMRCAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK2FsbAorZW5kZWYgIyBidWlsZC1hcmNoCisKKyMKKyMgc3RhZ2UtYXJjaCA8YXJjaD4KKyMKKyMgU3RhZ2UgKGluc3RhbGwpIHRoZSBPcGVuVGhyZWFkIGZpbmFsIGJ1aWxkIHByb2R1Y3RzIGZvciB0aGUgc3BlY2lmaWVkCisjIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBzdGFnZS4KKyMKK2RlZmluZSBzdGFnZS1hcmNoCiskKEVDSE8pICIgIFNUQUdFICAgICQoVGFyZ2V0VHVwbGUpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorREVTVERJUj0kKEFic1RvcFJlc3VsdERpcikgXAoraW5zdGFsbAorZW5kZWYgIyBzdGFnZS1hcmNoCisKKyMKKyMgQVJDSF90ZW1wbGF0ZSA8YXJjaD4KKyMKKyMgRGVmaW5lIG1hY3JvcywgdGFyZ2V0cyBhbmQgcnVsZXMgdG8gY29uZmlndXJlLCBidWlsZCwgYW5kIHN0YWdlIHRoZQorIyBPcGVuVGhyZWFkIGZvciBhIHNpbmdsZSBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gaW5zdGFudGlhdGUgdGhlIHRlbXBsYXRlIGZvci4KKyMKK2RlZmluZSBBUkNIX3RlbXBsYXRlCitDT05GSUdVUkVfVEFSR0VUUyArPSBjb25maWd1cmUtJCgxKQorQlVJTERfVEFSR0VUUyAgICAgKz0gZG8tYnVpbGQtJCgxKQorU1RBR0VfVEFSR0VUUyAgICAgKz0gc3RhZ2UtJCgxKQorQlVJTERfRElSUyAgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCitESVJFQ1RPUklFUyAgICAgICArPSAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkKKworY29uZmlndXJlLSQoMSk6IHRhcmdldF9DUFBGTEFHUz0kKCQoMSlfdGFyZ2V0X0NQUEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DRkxBR1M9JCgkKDEpX3RhcmdldF9DRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NYWEZMQUdTPSQoJCgxKV90YXJnZXRfQ1hYRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0xERkxBR1M9JCgkKDEpX3RhcmdldF9MREZMQUdTKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXMKKworJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXM6IHwgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisJJCQoY2FsbCBjb25maWd1cmUtYXJjaCwkKDEpKQorCitkby1idWlsZC0kKDEpOiBjb25maWd1cmUtJCgxKQorCitkby1idWlsZC0kKDEpOgorCSskJChjYWxsIGJ1aWxkLWFyY2gsJCgxKSkKKworc3RhZ2UtJCgxKTogZG8tYnVpbGQtJCgxKQorCitzdGFnZS0kKDEpOiB8ICQoVG9wUmVzdWx0RGlyKQorCSQkKGNhbGwgc3RhZ2UtYXJjaCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIEFSQ0hfdGVtcGxhdGUKKworLkRFRkFVTFRfR09BTCA6PSBhbGwKKworYWxsOiBzdGFnZQorCisjCisjIGNvcnRleC1tNAorIworCitjb3J0ZXgtbTRfdGFyZ2V0X0FCSSAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00Citjb3J0ZXgtbTRfdGFyZ2V0X0NQUEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorY29ydGV4LW00X3RhcmdldF9DRkxBR1MgICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tNCAtbWZsb2F0LWFiaT1zb2Z0IC1tdGh1bWIKK2NvcnRleC1tNF90YXJnZXRfQ1hYRkxBR1MgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTQgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTRfdGFyZ2V0X0xERkxBR1MgICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPXNvZnQgLW10aHVtYgorCisjIEluc3RhbnRpYXRlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBidWlsZCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQKKyMgYXJjaGl0ZWN0dXJlLgorCiskKGZvcmVhY2ggYXJjaCwkKEFSQ0hTKSwkKGV2YWwgJChjYWxsIEFSQ0hfdGVtcGxhdGUsJChhcmNoKSkpKQorCisjCisjIENvbW1vbiAvIEZpbmFsaXphdGlvbgorIworCitjb25maWd1cmU6ICQoQ09ORklHVVJFX1RBUkdFVFMpCisKK2J1aWxkOiAkKEJVSUxEX1RBUkdFVFMpCisKK3N0YWdlOiAkKFNUQUdFX1RBUkdFVFMpCisKK0RJUkVDVE9SSUVTICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliICQoQlVJTERfRElSUykKKworQ0xFQU5fRElSUyAgICAgID0gJChUb3BSZXN1bHREaXIpICQoQlVJTERfRElSUykKKworYWxsOiBzdGFnZQorCiskKERJUkVDVE9SSUVTKToKKwkkKEVDSE8pICIgIE1LRElSICAgICRAIgorCUAkKE1LRElSX1ApICIkQCIKKworY2xlYW46CisJJChFQ0hPKSAiICBDTEVBTiIKKwlAJChSTV9GKSAtciAkKENMRUFOX0RJUlMpCisKK2hlbHA6CisJJChFQ0hPKSAiU2ltcGx5IHR5cGUgJ21ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSknIHRvIGJ1aWxkIE9wZW5UaHJlYWQgZm9yIHRoZSBmb2xsb3dpbmcgIgorCSQoRUNITykgImFyY2hpdGVjdHVyZXM6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgICQoQVJDSFMpIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICJUbyBidWlsZCBvbmx5IGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUsIHNwZWNpZnk6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgIG1ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkgPGFyY2hpdGVjdHVyZT4iCisJJChFQ0hPKSAiIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUtZW1zayBiL2V4YW1wbGVzL01ha2VmaWxlLWVtc2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhNGYwNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWVtc2sKQEAgLTAsMCArMSwzMjcgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworLk5PVFBBUkFMTEVMOgorCitBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLWFyCitDQ0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLWdjYworQ1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFyYy1lbGYzMi1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItZ2NjCitDWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLWcrKworTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFyYy1lbGYzMi1nY2MKK1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItbm0KK1JBTkxJQiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcmMtZWxmMzItcmFubGliCitPQkpDT1BZICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjLWVsZjMyLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPWVtc2sgICAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPUVNU0sgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmZXEgKCQoQ0VSVF9MT0cpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtY2VydC1sb2cKK2VuZGlmCisKK2lmZXEgKCQoQ09NTUlTU0lPTkVSKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWNvbW1pc3Npb25lcgorZW5kaWYKKworaWZlcSAoJChKT0lORVIpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtam9pbmVyCitlbmRpZgorCitpZmVxICgkKERIQ1A2X1NFUlZFUiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1kaGNwNi1zZXJ2ZXIKK2VuZGlmCisKK2lmZXEgKCQoREhDUDZfQ0xJRU5UKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWRoY3A2LWNsaWVudAorZW5kaWYKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitDT05GSUdfRklMRSAgICAgICAgICAgICAgICAgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1lbXNrLWNvbmZpZy5oXCInCitDT05GSUdfRklMRV9QQVRIICAgICAgICAgICAgICAgICA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay8KKworQ09NTU9OQ0ZMQUdTICAgICAgICAgICAgICAgICAgIDo9IFwKKyAgICAtZmRhdGEtc2VjdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZmdW5jdGlvbi1zZWN0aW9ucyAgICAgICAgICAgXAorICAgIC1PcyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUQkKENPTkZJR19GSUxFKSAgICAgICAgICAgICAgXAorICAgIC1JJChDT05GSUdfRklMRV9QQVRIKSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NQUEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NGTEFHUykgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NYWEZMQUdTKSAgICAgICAgICAgIFwKKyAgICAtZm5vLWV4Y2VwdGlvbnMgICAgICAgICAgICAgICBcCisgICAgLWZuby1ydHRpICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ0NBU0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNDQVNGTEFHUykgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfQ0NBU0ZMQUdTKSAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJCh0YXJnZXRfTERGTEFHUykgICAgICAgICAgICAgXAorICAgIC1ub3N0YXJ0ZmlsZXMgICAgICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLVdsLC0tZ2Mtc2VjdGlvbnMgICAgICAgICAgICAgXAorICAgIC1XbCwtTWFwPW1hcC5tYXAgICAgICAgICAgICAgIFwKKyAgICAtV2wsLS1kZWZzeW09X1NUQUNLU0laRT01MjQyODggXAorICAgIC1XbCwtLWRlZnN5bT1fSEVBUFNJWkU9NTI0Mjg4IFwKKyAgICAkKE5VTEwpCisKK0VDSE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gQGVjaG8KK01BS0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWFrZQorTUtESVJfUCAgICAgICAgICAgICAgICAgICAgICAgICA6PSBta2RpciAtcAorTE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBsbiAtcworUk1fRiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBybSAtZgorCitJTlNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgIDo9IC91c3IvYmluL2luc3RhbGwKK0lOU1RBTExGTEFHUyAgICAgICAgICAgICAgICAgICAgOj0gLXAKKworQnVpbGRQYXRoICAgICAgICAgICAgICAgICAgICAgICA9IGJ1aWxkCitUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgICAgID0gJChCdWlsZFBhdGgpCitBYnNUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wQnVpbGREaXIpCisKK1Jlc3VsdFBhdGggICAgICAgICAgICAgICAgICAgICAgPSBvdXRwdXQKK1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgICAgPSAkKFJlc3VsdFBhdGgpCitBYnNUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wUmVzdWx0RGlyKQorCitUYXJnZXRUdXBsZSAgICAgICAgICAgICAgICAgICAgID0gZW1zaworCitBUkNIUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJjZW0xMWQKKworVG9wVGFyZ2V0TGliRGlyICAgICAgICAgICAgICAgICA9ICQoVG9wUmVzdWx0RGlyKS8kKFRhcmdldFR1cGxlKS9saWIKKworaWZuZGVmIEJ1aWxkSm9icworQnVpbGRKb2JzIDo9ICQoc2hlbGwgZ2V0Y29uZiBfTlBST0NFU1NPUlNfT05MTikKK2VuZGlmCitKT0JTRkxBRyA6PSAtaiQoQnVpbGRKb2JzKQorCisjCisjIGNvbmZpZ3VyZS1hcmNoIDxhcmNoPgorIworIyBDb25maWd1cmUgT3BlblRocmVhZCBmb3IgdGhlIHNwZWNpZmllZCBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gY29uZmlndXJlLgorIworZGVmaW5lIGNvbmZpZ3VyZS1hcmNoCiskKEVDSE8pICIgIENPTkZJRyAgICQoVGFyZ2V0VHVwbGUpLi4uIgorKGNkICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAmJiAkKEFic1RvcFNvdXJjZURpcikvY29uZmlndXJlIFwKK0lOU1RBTEw9IiQoSU5TVEFMTCkgJChJTlNUQUxMRkxBR1MpIiBcCitDUFA9IiQoQ1BQKSIgQ0M9IiQoQ0MpIiBDWFg9IiQoQ1hYKSIgQ0NBUz0iJChDQ0FTKSIgT0JKQz0iJChPQkpDKSIgT0JKQ1hYPSIkKE9CSkNYWCkiIEFSPSIkKEFSKSIgUkFOTElCPSIkKFJBTkxJQikiIE5NPSIkKE5NKSIgU1RSSVA9IiQoU1RSSVApIiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIENGTEFHUz0iJChDRkxBR1MpIiBDWFhGTEFHUz0iJChDWFhGTEFHUykiIENDQVNGTEFHUz0iJChDQ0FTRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBcCistLWhvc3Q9YXJjLWVsZjMyIFwKKy0tcHJlZml4PS8gXAorLS1leGVjLXByZWZpeD0vJChUYXJnZXRUdXBsZSkgXAorJChjb25maWd1cmVfT1BUSU9OUykpCitlbmRlZiAjIGNvbmZpZ3VyZS1hcmNoCisKKyMKKyMgYnVpbGQtYXJjaCA8YXJjaD4KKyMKKyMgQnVpbGQgdGhlIE9wZW5UaHJlYWQgaW50ZXJtZWRpYXRlIGJ1aWxkIHByb2R1Y3RzIGZvciB0aGUgc3BlY2lmaWVkCisjIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBidWlsZC4KKyMKK2RlZmluZSBidWlsZC1hcmNoCiskKEVDSE8pICIgIEJVSUxEICAgICQoVGFyZ2V0VHVwbGUpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorYWxsCitlbmRlZiAjIGJ1aWxkLWFyY2gKKworIworIyBzdGFnZS1hcmNoIDxhcmNoPgorIworIyBTdGFnZSAoaW5zdGFsbCkgdGhlIE9wZW5UaHJlYWQgZmluYWwgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIHN0YWdlLgorIworZGVmaW5lIHN0YWdlLWFyY2gKKyQoRUNITykgIiAgU1RBR0UgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCitERVNURElSPSQoQWJzVG9wUmVzdWx0RGlyKSBcCitpbnN0YWxsCitlbmRlZiAjIHN0YWdlLWFyY2gKKworIworIyBBUkNIX3RlbXBsYXRlIDxhcmNoPgorIworIyBEZWZpbmUgbWFjcm9zLCB0YXJnZXRzIGFuZCBydWxlcyB0byBjb25maWd1cmUsIGJ1aWxkLCBhbmQgc3RhZ2UgdGhlCisjIE9wZW5UaHJlYWQgZm9yIGEgc2luZ2xlIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBpbnN0YW50aWF0ZSB0aGUgdGVtcGxhdGUgZm9yLgorIworZGVmaW5lIEFSQ0hfdGVtcGxhdGUKK0NPTkZJR1VSRV9UQVJHRVRTICs9IGNvbmZpZ3VyZS0kKDEpCitCVUlMRF9UQVJHRVRTICAgICArPSBkby1idWlsZC0kKDEpCitTVEFHRV9UQVJHRVRTICAgICArPSBzdGFnZS0kKDEpCitCVUlMRF9ESVJTICAgICAgICArPSAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkKK0RJUkVDVE9SSUVTICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NQUEZMQUdTPSQoJCgxKV90YXJnZXRfQ1BQRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NGTEFHUz0kKCQoMSlfdGFyZ2V0X0NGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1hYRkxBR1M9JCgkKDEpX3RhcmdldF9DWFhGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfTERGTEFHUz0kKCQoMSlfdGFyZ2V0X0xERkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NDQVNGTEFHUz0kKCQoMSlfdGFyZ2V0X0NDQVNGTEFHUykKKworY29uZmlndXJlLSQoMSk6ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzCisKKyQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorCSQkKGNhbGwgY29uZmlndXJlLWFyY2gsJCgxKSkKKworZG8tYnVpbGQtJCgxKTogY29uZmlndXJlLSQoMSkKKworZG8tYnVpbGQtJCgxKToKKwkrJCQoY2FsbCBidWlsZC1hcmNoLCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLWFyY2gsJCgxKSkKKworJCgxKTogc3RhZ2UtJCgxKQorZW5kZWYgIyBBUkNIX3RlbXBsYXRlCisKKy5ERUZBVUxUX0dPQUwgOj0gYWxsCisKK2FsbDogc3RhZ2UKKworIworIyBFTVNLMi4zIGFyY2VtMTFkCisjCisKKyMgQ29tbW9uIG9wdGlvbnMKK01LREVQX09QVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtTU1EIC1NVCAkQCAtTUYgJEAuZAorT1BUX09MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC1PMAorCisjIEluY2x1ZGUgRU1TSyBCU1AgZm9sZGVyCitBTExfSU5DTFVERVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYgorCisjIENPTU1PTl9DT01QSUxFX09QVCAgICAgICAgICAgICAgICAgID0gLW1uby1zZGF0YSAkKE9QVF9PTEVWRUwpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKEFMTF9JTkNMVURFUykgJChNS0RFUF9PUFQpCisKKyMgQ29yZSBvcHRpb25zIG9mIGFyY2VtMTFkIGluIEVNU0syLjMgZnJvbSBBUkMgVENGIGZpbGUKK0NPTU1PTl9DT1JFX09QVF9HTlUgICAgICAgICAgICAgICAgICAgPSAtbWNwdT1lbTRfZnB1ZGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tbGl0dGxlLWVuZGlhbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1jb2RlLWRlbnNpdHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tZGl2LXJlbSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1zd2FwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbW5vcm0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tbXB5LW9wdGlvbj02IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWJhcnJlbC1zaGlmdGVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWZwdT1mcHVkYV9hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcGFyYW0gbDEtY2FjaGUtc2l6ZT0xNjM4NCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1wYXJhbSBsMS1jYWNoZS1saW5lLXNpemU9MzIKKworQ0NPUkVfT1BUX0dOVSAgICAgICAgICAgICAgICAgICAgICAgICs9ICQoQ09NTU9OX0NPUkVfT1BUX0dOVSkKK0NYWENPUkVfT1BUX0dOVSAgICAgICAgICAgICAgICAgICAgICArPSAkKENPTU1PTl9DT1JFX09QVF9HTlUpCitBQ09SRV9PUFRfR05VICAgICAgICAgICAgICAgICAgICAgICAgKz0gJChDT01NT05fQ09SRV9PUFRfR05VKQorTENPUkVfT1BUX0dOVSAgICAgICAgICAgICAgICAgICAgICAgICs9ICQoQ09NTU9OX0NPUkVfT1BUX0dOVSkKKworIyBDL0NQUC9BU00vTGlua2VyIE9wdGlvbnMKK0NPTVBJTEVfT1BUICAgICAgICAgICAgICAgICAgICAgICAgICArPSAkKENDT1JFX09QVF9HTlUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKENPTU1PTl9DT01QSUxFX09QVCkgLXN0ZD1nbnU5OQorQ1hYX0NPTVBJTEVfT1BUICAgICAgICAgICAgICAgICAgICAgICs9ICQoQ1hYQ09SRV9PUFRfR05VKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChDT01NT05fQ09NUElMRV9PUFQpCitBU01fT1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gJChBQ09SRV9PUFRfR05VKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChDT01NT05fQ09NUElMRV9PUFQpIC14IGFzc2VtYmxlci13aXRoLWNwcAorTElOS19PUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICQoTENPUkVfT1BUX0dOVSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tbm8tc2RhdGEgLW5vc3RhcnRmaWxlcyAtLXZlcmJvc2UKKworYXJjZW0xMWRfdGFyZ2V0X0FCSSAgICAgICAgICAgICAgICAgICA9IGFyY2VtMTFkCithcmNlbTExZF90YXJnZXRfQ1BQRkxBR1MgICAgICAgICAgICAgID0gJChDWFhfQ09NUElMRV9PUFQpCithcmNlbTExZF90YXJnZXRfQ0ZMQUdTICAgICAgICAgICAgICAgID0gJChDT01QSUxFX09QVCkKK2FyY2VtMTFkX3RhcmdldF9DWFhGTEFHUyAgICAgICAgICAgICAgPSAkKENYWF9DT01QSUxFX09QVCkKK2FyY2VtMTFkX3RhcmdldF9DQ0FTRkxBR1MgICAgICAgICAgICAgPSAkKEFTTV9PUFQpCithcmNlbTExZF90YXJnZXRfTERGTEFHUyAgICAgICAgICAgICAgID0gJChMSU5LX09QVCkKKworIyBJbnN0YW50aWF0ZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYnVpbGQgdGVtcGxhdGUgZm9yIGVhY2ggdGFyZ2V0CisjIGFyY2hpdGVjdHVyZS4KKworJChmb3JlYWNoIGFyY2gsJChBUkNIUyksJChldmFsICQoY2FsbCBBUkNIX3RlbXBsYXRlLCQoYXJjaCkpKSkKKworIworIyBDb21tb24gLyBGaW5hbGl6YXRpb24KKyMKKworY29uZmlndXJlOiAkKENPTkZJR1VSRV9UQVJHRVRTKQorCitidWlsZDogJChCVUlMRF9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJhcmNoaXRlY3R1cmVzOiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICAkKEFSQ0hTKSIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiVG8gYnVpbGQgb25seSBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBzcGVjaWZ5OiAiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIiAgICBtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDxhcmNoaXRlY3R1cmU+IgorCSQoRUNITykgIiIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLWt3NDF6IGIvZXhhbXBsZXMvTWFrZWZpbGUta3c0MXoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyMjgwMwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlLWt3NDF6CkBAIC0wLDAgKzEsMjYxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKy5OT1RQQVJBTExFTDoKKworQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktYXIKK0NDQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFzCitDUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1jcHAKK0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWdjYworQ1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZysrCitMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1sZAorU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktc3RyaXAKK05NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW5tCitSQU5MSUIgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1yYW5saWIKK09CSkNPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLW9iamNvcHkKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgPSBcCisgICAgLS1lbmFibGUtY2xpLWFwcD1hbGwgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW5jcC1hcHA9YWxsICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZGlhZyAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1leGFtcGxlcz1rdzQxeiAgICAgICAgIFwKKyAgICAtLXdpdGgtcGxhdGZvcm0taW5mbz1LVzQxWiAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoZGlyICQoYWJzcGF0aCAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkvY29tbW9uLXN3aXRjaGVzLm1rCisKK1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChzaGVsbCByZWFkbGluayAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KK0Fic1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChyZWFscGF0aCAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KKworQ09ORklHX0ZJTEUgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1rdzQxei1jb25maWcuaFwiJworQ09ORklHX0ZJTEVfUEFUSCA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5vc3lzLnNwZWNzICAgICAgICAgICAgXAorICAgIC1XbCwtLWdjLXNlY3Rpb25zICAgICAgICAgICAgIFwKKyAgICAtV2wsLU1hcD1tYXAubWFwICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitFQ0hPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IEBlY2hvCitNQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1ha2UKK01LRElSX1AgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbWtkaXIgLXAKK0xOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gbG4gLXMKK1JNX0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gcm0gLWYKKworSU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICA6PSAvdXNyL2Jpbi9pbnN0YWxsCitJTlNUQUxMRkxBR1MgICAgICAgICAgICAgICAgICAgIDo9IC1wCisKK0J1aWxkUGF0aCAgICAgICAgICAgICAgICAgICAgICAgPSBidWlsZAorVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICAgICA9ICQoQnVpbGRQYXRoKQorQWJzVG9wQnVpbGREaXIgICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcEJ1aWxkRGlyKQorCitSZXN1bHRQYXRoICAgICAgICAgICAgICAgICAgICAgID0gb3V0cHV0CitUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgICAgID0gJChSZXN1bHRQYXRoKQorQWJzVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICA9ICQoUFdEKS8kKFRvcFJlc3VsdERpcikKKworVGFyZ2V0VHVwbGUgICAgICAgICAgICAgICAgICAgICA9IGt3NDF6CisKK0FSQ0hTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjb3J0ZXgtbTBwbHVzCisKK1RvcFRhcmdldExpYkRpciAgICAgICAgICAgICAgICAgPSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8YXJjaD4KKyMKKyMgQ29uZmlndXJlIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZS4KKyMKK2RlZmluZSBjb25maWd1cmUtYXJjaAorJChFQ0hPKSAiICBDT05GSUcgICAkKFRhcmdldFR1cGxlKS4uLiIKKyhjZCAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgJiYgJChBYnNUb3BTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCitJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorQ1BQPSIkKENQUCkiIENDPSIkKENDKSIgQ1hYPSIkKENYWCkiIE9CSkM9IiQoT0JKQykiIE9CSkNYWD0iJChPQkpDWFgpIiBBUj0iJChBUikiIFJBTkxJQj0iJChSQU5MSUIpIiBOTT0iJChOTSkiIFNUUklQPSIkKFNUUklQKSIgQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBcCistLWhvc3Q9YXJtLW5vbmUtZWFiaSBcCistLXByZWZpeD0vIFwKKy0tZXhlYy1wcmVmaXg9LyQoVGFyZ2V0VHVwbGUpIFwKKyQoY29uZmlndXJlX09QVElPTlMpKQorZW5kZWYgIyBjb25maWd1cmUtYXJjaAorCisjCisjIGJ1aWxkLWFyY2ggPGFyY2g+CisjCisjIEJ1aWxkIHRoZSBPcGVuVGhyZWFkIGludGVybWVkaWF0ZSBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gYnVpbGQuCisjCitkZWZpbmUgYnVpbGQtYXJjaAorJChFQ0hPKSAiICBCVUlMRCAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK2FsbAorZW5kZWYgIyBidWlsZC1hcmNoCisKKyMKKyMgc3RhZ2UtYXJjaCA8YXJjaD4KKyMKKyMgU3RhZ2UgKGluc3RhbGwpIHRoZSBPcGVuVGhyZWFkIGZpbmFsIGJ1aWxkIHByb2R1Y3RzIGZvciB0aGUgc3BlY2lmaWVkCisjIGFyY2hpdGVjdHVyZS4KKyMKKyMgICBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSB0byBzdGFnZS4KKyMKK2RlZmluZSBzdGFnZS1hcmNoCiskKEVDSE8pICIgIFNUQUdFICAgICQoVGFyZ2V0VHVwbGUpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorREVTVERJUj0kKEFic1RvcFJlc3VsdERpcikgXAoraW5zdGFsbAorZW5kZWYgIyBzdGFnZS1hcmNoCisKKyMKKyMgQVJDSF90ZW1wbGF0ZSA8YXJjaD4KKyMKKyMgRGVmaW5lIG1hY3JvcywgdGFyZ2V0cyBhbmQgcnVsZXMgdG8gY29uZmlndXJlLCBidWlsZCwgYW5kIHN0YWdlIHRoZQorIyBPcGVuVGhyZWFkIGZvciBhIHNpbmdsZSBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gaW5zdGFudGlhdGUgdGhlIHRlbXBsYXRlIGZvci4KKyMKK2RlZmluZSBBUkNIX3RlbXBsYXRlCitDT05GSUdVUkVfVEFSR0VUUyArPSBjb25maWd1cmUtJCgxKQorQlVJTERfVEFSR0VUUyAgICAgKz0gZG8tYnVpbGQtJCgxKQorU1RBR0VfVEFSR0VUUyAgICAgKz0gc3RhZ2UtJCgxKQorQlVJTERfRElSUyAgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCitESVJFQ1RPUklFUyAgICAgICArPSAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkKKworY29uZmlndXJlLSQoMSk6IHRhcmdldF9DUFBGTEFHUz0kKCQoMSlfdGFyZ2V0X0NQUEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DRkxBR1M9JCgkKDEpX3RhcmdldF9DRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0NYWEZMQUdTPSQoJCgxKV90YXJnZXRfQ1hYRkxBR1MpCitjb25maWd1cmUtJCgxKTogdGFyZ2V0X0xERkxBR1M9JCgkKDEpX3RhcmdldF9MREZMQUdTKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXMKKworJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXM6IHwgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisJJCQoY2FsbCBjb25maWd1cmUtYXJjaCwkKDEpKQorCitkby1idWlsZC0kKDEpOiBjb25maWd1cmUtJCgxKQorCitkby1idWlsZC0kKDEpOgorCSskJChjYWxsIGJ1aWxkLWFyY2gsJCgxKSkKKworc3RhZ2UtJCgxKTogZG8tYnVpbGQtJCgxKQorCitzdGFnZS0kKDEpOiB8ICQoVG9wUmVzdWx0RGlyKQorCSQkKGNhbGwgc3RhZ2UtYXJjaCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIEFSQ0hfdGVtcGxhdGUKKworLkRFRkFVTFRfR09BTCA6PSBhbGwKKworYWxsOiBzdGFnZQorCisjCisjIGNvcnRleC1tMHBsdXMKKyMKKworY29ydGV4LW0wcGx1c190YXJnZXRfQUJJICAgICAgICAgICAgICAgICAgPSBjb3J0ZXgtbTBwbHVzCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9DUFBGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9DRkxBR1MgICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9DWFhGTEFHUyAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCitjb3J0ZXgtbTBwbHVzX3RhcmdldF9MREZMQUdTICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tMHBsdXMgLW1mbG9hdC1hYmk9c29mdCAtbXRodW1iCisKKyMgSW5zdGFudGlhdGUgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJ1aWxkIHRlbXBsYXRlIGZvciBlYWNoIHRhcmdldAorIyBhcmNoaXRlY3R1cmUuCisKKyQoZm9yZWFjaCBhcmNoLCQoQVJDSFMpLCQoZXZhbCAkKGNhbGwgQVJDSF90ZW1wbGF0ZSwkKGFyY2gpKSkpCisKKyMKKyMgQ29tbW9uIC8gRmluYWxpemF0aW9uCisjCisKK2NvbmZpZ3VyZTogJChDT05GSUdVUkVfVEFSR0VUUykKKworYnVpbGQ6ICQoQlVJTERfVEFSR0VUUykKKworc3RhZ2U6ICQoU1RBR0VfVEFSR0VUUykKKworRElSRUNUT1JJRVMgICAgID0gJChUb3BSZXN1bHREaXIpICQoVG9wUmVzdWx0RGlyKS8kKFRhcmdldFR1cGxlKS9saWIgJChCVUlMRF9ESVJTKQorCitDTEVBTl9ESVJTICAgICAgPSAkKFRvcFJlc3VsdERpcikgJChCVUlMRF9ESVJTKQorCithbGw6IHN0YWdlCisKKyQoRElSRUNUT1JJRVMpOgorCSQoRUNITykgIiAgTUtESVIgICAgJEAiCisJQCQoTUtESVJfUCkgIiRAIgorCitjbGVhbjoKKwkkKEVDSE8pICIgIENMRUFOIgorCUAkKFJNX0YpIC1yICQoQ0xFQU5fRElSUykKKworaGVscDoKKwkkKEVDSE8pICJTaW1wbHkgdHlwZSAnbWFrZSAtZiAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKScgdG8gYnVpbGQgT3BlblRocmVhZCBmb3IgdGhlIGZvbGxvd2luZyAiCisJJChFQ0hPKSAiYXJjaGl0ZWN0dXJlczogIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICIgICAgJChBUkNIUykiCisJJChFQ0hPKSAiIgorCSQoRUNITykgIlRvIGJ1aWxkIG9ubHkgYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSwgc3BlY2lmeTogIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICIgICAgbWFrZSAtZiAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSA8YXJjaGl0ZWN0dXJlPiIKKwkkKEVDSE8pICIiCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS1ucmY1Mjg0MCBiL2V4YW1wbGVzL01ha2VmaWxlLW5yZjUyODQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjN2EwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9NYWtlZmlsZS1ucmY1Mjg0MApAQCAtMCwwICsxLDI4NSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisuTk9UUEFSQUxMRUw6CisKK0FSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWFyCitDQ0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1nY2MKK0NQUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWNwcAorQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktZ2NjCitDWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1nKysKK0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLWxkCitTVFJJUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYXJtLW5vbmUtZWFiaS1zdHJpcAorTk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktbm0KK1JBTkxJQiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhcm0tbm9uZS1lYWJpLXJhbmxpYgorT0JKQ09QWSAgICAgICAgICAgICAgICAgICAgICAgICA9IGFybS1ub25lLWVhYmktb2JqY29weQorCitCdWlsZEpvYnMgICAgICAgICAgICAgICAgICAgICAgPz0gMTAKKworY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtLWVuYWJsZS1jbGktYXBwPWFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtbmNwLWFwcD1hbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1uY3AtYnVzPXVhcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1kaWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLS13aXRoLWV4YW1wbGVzPW5yZjUyODQwICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPU5SRjUyODQwICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQkVEVExTX0NQUEZMQUdTPSIkKE5SRjUyODQwX01CRURUTFNfQ1BQRkxBR1MpIiBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoZGlyICQoYWJzcGF0aCAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkvY29tbW9uLXN3aXRjaGVzLm1rCisKK2lmZGVmIFNSQ19QQVRICitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1zcmNkaXI9IiQoU1JDX1BBVEgpIgorZW5kaWYKKworVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHJlYWxwYXRoICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICA9IC1ETUJFRFRMU19DT05GSUdfRklMRT0nXCJtYmVkdGxzLWNvbmZpZy5oXCInCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICs9IC1ETUJFRFRMU19VU0VSX0NPTkZJR19GSUxFPSdcIm5yZjUyODQwLW1iZWR0bHMtY29uZmlnLmhcIicKK05SRjUyODQwX01CRURUTFNfQ1BQRkxBR1MgKz0gLUkkKEFic1RvcFNvdXJjZURpcikvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2NyeXB0bworTlJGNTI4NDBfTUJFRFRMU19DUFBGTEFHUyArPSAtSSQoQWJzVG9wU291cmNlRGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlCitOUkY1Mjg0MF9NQkVEVExTX0NQUEZMQUdTICs9IC1JJChBYnNUb3BTb3VyY2VEaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMKKworQ09ORklHX0ZJTEUgICAgICA9IE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFPSdcIm9wZW50aHJlYWQtY29yZS1ucmY1Mjg0MC1jb25maWcuaFwiJworQ09ORklHX0ZJTEVfUEFUSCA9ICQoQWJzVG9wU291cmNlRGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvCisKK0NPTU1PTkNGTEFHUyAgICAgICAgICAgICAgICAgICA6PSBcCisgICAgLWZkYXRhLXNlY3Rpb25zICAgICAgICAgICAgICAgXAorICAgIC1mZnVuY3Rpb24tc2VjdGlvbnMgICAgICAgICAgIFwKKyAgICAtT3MgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EJChDT05GSUdfRklMRSkgICAgICAgICAgICAgIFwKKyAgICAtSSQoQ09ORklHX0ZJTEVfUEFUSCkgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZmVxICgkKENFUlRfTE9HKSwxKQorQ09NTU9OQ0ZMQUdTICs9IC1ET1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVD0xCitlbmRpZgorCitDUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DUFBGTEFHUykgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DRkxBR1MpICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKHRhcmdldF9DWFhGTEFHUykgICAgICAgICAgICBcCisgICAgLWZuby1leGNlcHRpb25zICAgICAgICAgICAgICAgXAorICAgIC1mbm8tcnR0aSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0xERkxBR1MpICAgICAgICAgICAgIFwKKyAgICAtc3BlY3M9bmFuby5zcGVjcyAgICAgICAgICAgICBcCisgICAgLXNwZWNzPW5vc3lzLnNwZWNzICAgICAgICAgICAgXAorICAgIC1XbCwtLWdjLXNlY3Rpb25zICAgICAgICAgICAgIFwKKyAgICAtV2wsLU1hcD1tYXAubWFwICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDQ0FTRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNDQVNGTEFHUykgICAgICAgICAgICAgXAorICAgICQodGFyZ2V0X0NDQVNGTEFHUykgICAgICAgICAgICBcCisgICAgLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc3NlbWJsZXItd2l0aC1jcHAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRUNITyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBtYWtlCitNS0RJUl9QICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1rZGlyIC1wCitMTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IHJtIC1mCisKK0lOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgOj0gL3Vzci9iaW4vaW5zdGFsbAorSU5TVEFMTEZMQUdTICAgICAgICAgICAgICAgICAgICA6PSAtcAorCitCdWlsZFBhdGggICAgICAgICAgICAgICAgICAgICAgID0gYnVpbGQKK1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgICAgPSAkKEJ1aWxkUGF0aCkKK0Fic1RvcEJ1aWxkRGlyICAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BCdWlsZERpcikKKworUmVzdWx0UGF0aCAgICAgICAgICAgICAgICAgICAgICA9IG91dHB1dAorVG9wUmVzdWx0RGlyICAgICAgICAgICAgICAgICAgICA9ICQoUmVzdWx0UGF0aCkKK0Fic1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgPSAkKFBXRCkvJChUb3BSZXN1bHREaXIpCisKK1RhcmdldFR1cGxlICAgICAgICAgICAgICAgICAgICAgPSBucmY1Mjg0MAorCitBUkNIUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00CisKK1RvcFRhcmdldExpYkRpciAgICAgICAgICAgICAgICAgPSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8YXJjaD4KKyMKKyMgQ29uZmlndXJlIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZS4KKyMKK2RlZmluZSBjb25maWd1cmUtYXJjaAorJChFQ0hPKSAiICBDT05GSUcgICAkKFRhcmdldFR1cGxlKS4uLiIKKyhjZCAkKEJ1aWxkUGF0aCkvJChUYXJnZXRUdXBsZSkgJiYgJChBYnNUb3BTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCitJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorQ1BQPSIkKENQUCkiIENDPSIkKENDKSIgQ1hYPSIkKENYWCkiIENDQVM9IiQoQ0NBUykiIE9CSkM9IiQoT0JKQykiIE9CSkNYWD0iJChPQkpDWFgpIiBBUj0iJChBUikiIFJBTkxJQj0iJChSQU5MSUIpIiBOTT0iJChOTSkiIFNUUklQPSIkKFNUUklQKSIgQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgQ1hYRkxBR1M9IiQoQ1hYRkxBR1MpIiBDQ0FTRkxBR1M9IiQoQ0NBU0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1ob3N0PWFybS1ub25lLWVhYmkgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKFRhcmdldFR1cGxlKSBcCiskKGNvbmZpZ3VyZV9PUFRJT05TKSkKK2VuZGVmICMgY29uZmlndXJlLWFyY2gKKworIworIyBidWlsZC1hcmNoIDxhcmNoPgorIworIyBCdWlsZCB0aGUgT3BlblRocmVhZCBpbnRlcm1lZGlhdGUgYnVpbGQgcHJvZHVjdHMgZm9yIHRoZSBzcGVjaWZpZWQKKyMgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkLgorIworZGVmaW5lIGJ1aWxkLWFyY2gKKyQoRUNITykgIiAgQlVJTEQgICAgJChUYXJnZXRUdXBsZSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCithbGwKK2VuZGVmICMgYnVpbGQtYXJjaAorCisjCisjIHN0YWdlLWFyY2ggPGFyY2g+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyBhcmNoaXRlY3R1cmUuCisjCisjICAgYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgdG8gc3RhZ2UuCisjCitkZWZpbmUgc3RhZ2UtYXJjaAorJChFQ0hPKSAiICBTVEFHRSAgICAkKFRhcmdldFR1cGxlKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK0RFU1RESVI9JChBYnNUb3BSZXN1bHREaXIpIFwKK2luc3RhbGwKK2VuZGVmICMgc3RhZ2UtYXJjaAorCisjCisjIEFSQ0hfdGVtcGxhdGUgPGFyY2g+CisjCisjIERlZmluZSBtYWNyb3MsIHRhcmdldHMgYW5kIHJ1bGVzIHRvIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBzdGFnZSB0aGUKKyMgT3BlblRocmVhZCBmb3IgYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorIworIyAgIGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgQVJDSF90ZW1wbGF0ZQorQ09ORklHVVJFX1RBUkdFVFMgKz0gY29uZmlndXJlLSQoMSkKK0JVSUxEX1RBUkdFVFMgICAgICs9IGRvLWJ1aWxkLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKFRhcmdldFR1cGxlKQorRElSRUNUT1JJRVMgICAgICAgKz0gJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ1BQRkxBR1M9JCgkKDEpX3RhcmdldF9DUFBGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0ZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9DWFhGTEFHUz0kKCQoMSlfdGFyZ2V0X0NYWEZMQUdTKQorY29uZmlndXJlLSQoMSk6IHRhcmdldF9MREZMQUdTPSQoJCgxKV90YXJnZXRfTERGTEFHUykKK2NvbmZpZ3VyZS0kKDEpOiB0YXJnZXRfQ0NBU0ZMQUdTPSQoJCgxKV90YXJnZXRfQ0NBU0ZMQUdTKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXMKKworJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpL2NvbmZpZy5zdGF0dXM6IHwgJChCdWlsZFBhdGgpLyQoVGFyZ2V0VHVwbGUpCisJJCQoY2FsbCBjb25maWd1cmUtYXJjaCwkKDEpKQorCitkby1idWlsZC0kKDEpOiBjb25maWd1cmUtJCgxKQorCitkby1idWlsZC0kKDEpOgorCSskJChjYWxsIGJ1aWxkLWFyY2gsJCgxKSkKKworc3RhZ2UtJCgxKTogZG8tYnVpbGQtJCgxKQorCitzdGFnZS0kKDEpOiB8ICQoVG9wUmVzdWx0RGlyKQorCSQkKGNhbGwgc3RhZ2UtYXJjaCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIEFSQ0hfdGVtcGxhdGUKKworLkRFRkFVTFRfR09BTCA6PSBhbGwKKworYWxsOiBzdGFnZQorCisjCisjIENvcnRleC1tNAorIworCitjb3J0ZXgtbTRfdGFyZ2V0X0FCSSAgICAgICAgICAgICAgICAgID0gY29ydGV4LW00Citjb3J0ZXgtbTRfdGFyZ2V0X0NQUEZMQUdTICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9ZnB2NC1zcC1kMTYgLW10aHVtYiAtbWFiaT1hYXBjcworY29ydGV4LW00X3RhcmdldF9DRkxBR1MgICAgICAgICAgICAgICA9IC1tY3B1PWNvcnRleC1tNCAtbWZsb2F0LWFiaT1oYXJkIC1tZnB1PWZwdjQtc3AtZDE2IC1tdGh1bWIgLW1hYmk9YWFwY3MKK2NvcnRleC1tNF90YXJnZXRfQ1hYRkxBR1MgICAgICAgICAgICAgPSAtbWNwdT1jb3J0ZXgtbTQgLW1mbG9hdC1hYmk9aGFyZCAtbWZwdT1mcHY0LXNwLWQxNiAtbXRodW1iIC1tYWJpPWFhcGNzCitjb3J0ZXgtbTRfdGFyZ2V0X0xERkxBR1MgICAgICAgICAgICAgID0gLW1jcHU9Y29ydGV4LW00IC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9ZnB2NC1zcC1kMTYgLW10aHVtYiAtbWFiaT1hYXBjcworCisjIEluc3RhbnRpYXRlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBidWlsZCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQKKyMgYXJjaGl0ZWN0dXJlLgorCiskKGZvcmVhY2ggYXJjaCwkKEFSQ0hTKSwkKGV2YWwgJChjYWxsIEFSQ0hfdGVtcGxhdGUsJChhcmNoKSkpKQorCisjCisjIENvbW1vbiAvIEZpbmFsaXphdGlvbgorIworCitjb25maWd1cmU6ICQoQ09ORklHVVJFX1RBUkdFVFMpCisKK2J1aWxkOiAkKEJVSUxEX1RBUkdFVFMpCisKK3N0YWdlOiAkKFNUQUdFX1RBUkdFVFMpCisKK0RJUkVDVE9SSUVTICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKFRvcFJlc3VsdERpcikvJChUYXJnZXRUdXBsZSkvbGliICQoQlVJTERfRElSUykKKworQ0xFQU5fRElSUyAgICAgID0gJChUb3BSZXN1bHREaXIpICQoQlVJTERfRElSUykKKworYWxsOiBzdGFnZQorCiskKERJUkVDVE9SSUVTKToKKwkkKEVDSE8pICIgIE1LRElSICAgICRAIgorCUAkKE1LRElSX1ApICIkQCIKKworY2xlYW46CisJJChFQ0hPKSAiICBDTEVBTiIKKwlAJChSTV9GKSAtciAkKENMRUFOX0RJUlMpCisKK2hlbHA6CisJJChFQ0hPKSAiU2ltcGx5IHR5cGUgJ21ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSknIHRvIGJ1aWxkIE9wZW5UaHJlYWQgZm9yIHRoZSBmb2xsb3dpbmcgIgorCSQoRUNITykgImFyY2hpdGVjdHVyZXM6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgICQoQVJDSFMpIgorCSQoRUNITykgIiIKKwkkKEVDSE8pICJUbyBidWlsZCBvbmx5IGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUsIHNwZWNpZnk6ICIKKwkkKEVDSE8pICIiCisJJChFQ0hPKSAiICAgIG1ha2UgLWYgJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkgPGFyY2hpdGVjdHVyZT4iCisJJChFQ0hPKSAiIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXggYi9leGFtcGxlcy9NYWtlZmlsZS1wb3NpeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM3YjMzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXgKQEAgLTAsMCArMSwzMDAgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworIyBEb24ndCBhbGxvdyB0aGlzIHRvcC1sZXZlbCBtYWtlZmlsZSdzIHRhcmdldHMgdG8gYmUgYnVpbHQgaW4gcGFyYWxsZWwuCisKKy5OT1RQQVJBTExFTDoKKworQ09WRVJBR0UgICAgICAgICAgICAgICAgICAgICAgID89IDAKK0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICA/PSAwCisKK0VDSE8gICAgICAgICAgICAgICAgICAgICAgICAgICA6PSBAZWNobworTUFLRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IG1ha2UKK01LRElSX1AgICAgICAgICAgICAgICAgICAgICAgICA6PSBta2RpciAtcAorTE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGxuIC1zCitSTV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gcm0gLWYKKworQnVpbGRKb2JzICAgICAgICAgICAgICAgICAgICAgID89IDEwCisKK1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgICA6PSAkKGRpciAkKHNoZWxsIHJlYWRsaW5rICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkuLgorQWJzVG9wU291cmNlRGlyICAgICAgICAgICAgICAgIDo9ICQoZGlyICQocmVhbHBhdGggJChmaXJzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpKS4uCisKK0NPTkZJR19GSUxFICAgICAgPSBPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRT0nXCJvcGVudGhyZWFkLWNvcmUtcG9zaXgtY29uZmlnLmhcIicKK0NPTkZJR19GSUxFX1BBVEggPSAkKEFic1RvcFNvdXJjZURpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4LworCitDT01NT05DRkxBR1MgICAgICAgICAgICAgICAgICAgOj0gXAorICAgIC1PMSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUQkKENPTkZJR19GSUxFKSAgICAgICAgICAgICAgXAorICAgIC1JJChDT05GSUdfRklMRV9QQVRIKSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKENPTU1PTkNGTEFHUykgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQoQ09NTU9OQ0ZMQUdTKSAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJChDT01NT05DRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworSU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICA6PSAvdXNyL2Jpbi9pbnN0YWxsCitJTlNUQUxMRkxBR1MgICAgICAgICAgICAgICAgICAgIDo9IC1wCisKK1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChzaGVsbCByZWFkbGluayAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KK0Fic1RvcFNvdXJjZURpciAgICAgICAgICAgICAgICAgOj0gJChkaXIgJChyZWFscGF0aCAkKGZpcnN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpLi4KKworQnVpbGRQYXRoICAgICAgICAgICAgICAgICAgICAgICA9IGJ1aWxkCitUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgICAgID0gJChCdWlsZFBhdGgpCitBYnNUb3BCdWlsZERpciAgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wQnVpbGREaXIpCisKK1Jlc3VsdFBhdGggICAgICAgICAgICAgICAgICAgICAgPSBvdXRwdXQKK1RvcFJlc3VsdERpciAgICAgICAgICAgICAgICAgICAgPSAkKFJlc3VsdFBhdGgpCitBYnNUb3BSZXN1bHREaXIgICAgICAgICAgICAgICAgID0gJChQV0QpLyQoVG9wUmVzdWx0RGlyKQorCitUYXJnZXRUdXBsZSAgICAgICAgICAgICAgICAgICAgID0gJChzaGVsbCAke0Fic1RvcFNvdXJjZURpcn0vdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb25maWcuZ3Vlc3MgfCBzZWQgLWUgJ3MvW1s6ZGlnaXQ6XS5dKiQkLy9nJykKKworIyBJZiB0aGUgdXNlciBoYXMgYXNzZXJ0ZWQgQ09WRVJBR0UsIGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMgYWNjb3JkaW5nbHkuCisKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICAgICAgID0gXAorICAgIC0tZW5hYmxlLWNsaS1hcHA9YWxsICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtbmNwLWFwcD1hbGwgICAgICAgICAgICAgIFwKKyAgICAtLXdpdGgtbmNwLWJ1cz11YXJ0ICAgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRpYWcgICAgICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtcmF3LWxpbmstYXBpPXllcyAgICAgICAgIFwKKyAgICAtLXdpdGgtZXhhbXBsZXM9cG9zaXggICAgICAgICAgICAgXAorICAgIC0td2l0aC1wbGF0Zm9ybS1pbmZvPVBPU0lYICAgICAgICBcCisgICAgLS1lbmFibGUtYXBwbGljYXRpb24tY29hcCAgICAgICAgIFwKKyAgICAtLWVuYWJsZS10bWYtcHJveHkgICAgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWNlcnQtbG9nICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtY29tbWlzc2lvbmVyICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1kaGNwNi1jbGllbnQgICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWRoY3A2LXNlcnZlciAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtZG5zLWNsaWVudCAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1qYW0tZGV0ZWN0aW9uICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLWpvaW5lciAgICAgICAgICAgICAgICAgICBcCisgICAgLS1lbmFibGUtbGVnYWN5ICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLWVuYWJsZS1tYWMtd2hpdGVsaXN0ICAgICAgICAgICAgXAorICAgIC0tZW5hYmxlLW10ZC1uZXR3b3JrLWRpYWdub3N0aWMgICBcCisgICAgLS1lbmFibGUtYm9yZGVyLXJvdXRlciAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmbmRlZiBCdWlsZEpvYnMKK0J1aWxkSm9icyA6PSAkKHNoZWxsIGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4pCitlbmRpZgorSk9CU0ZMQUcgOj0gLWokKEJ1aWxkSm9icykKKworIworIyBjb25maWd1cmUtYXJjaCA8dGFyZ2V0PgorIworIyBDb25maWd1cmUgT3BlblRocmVhZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBjb25maWd1cmUuCisjCitkZWZpbmUgY29uZmlndXJlLXRhcmdldAorJChFQ0hPKSAiICBDT05GSUcgICAkKDEpLi4uIgorKGNkICQoQnVpbGRQYXRoKS8kKDEpICYmICQoQWJzVG9wU291cmNlRGlyKS9jb25maWd1cmUgXAorSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKK0NQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIENYWEZMQUdTPSIkKENYWEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgXAorLS1wcmVmaXg9LyBcCistLWV4ZWMtcHJlZml4PS8kKDEpIFwKKyQoY29uZmlndXJlX09QVElPTlMpKQorZW5kZWYgIyBjb25maWd1cmUtdGFyZ2V0CisKKyMKKyMgYnVpbGQtdGFyZ2V0IDx0YXJnZXQ+CisjCisjIEJ1aWxkIHRoZSBPcGVuVGhyZWFkIGludGVybWVkaWF0ZSBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBidWlsZC4KKyMKK2RlZmluZSBidWlsZC10YXJnZXQKKyQoRUNITykgIiAgQlVJTEQgICAgJCgxKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoMSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorYWxsCitlbmRlZiAjIGJ1aWxkLXRhcmdldAorCisjCisjIGNoZWNrLXRhcmdldCA8dGFyZ2V0PgorIworIyBDaGVjayAocnVuIHVuaXQgdGVzdHMpIE9wZW5UaHJlYWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0LgorIworIyAgIHRhcmdldCAtIFRoZSB0YXJnZXQgdG8gY2hlY2suCisjCitkZWZpbmUgY2hlY2stdGFyZ2V0CiskKEVDSE8pICIgIENIRUNLICAgICQoMSkiCiskKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGRQYXRoKS8kKDEpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IFwKK2NoZWNrCitlbmRlZiAjIGNoZWNrLXRhcmdldAorCisjCisjIGRpc3RjaGVjay10YXJnZXQgPHRhcmdldD4KKyMKKyMgQ2hlY2sgKHJ1biB1bml0IHRlc3RzKSBPcGVuVGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldC4KKyMKKyMgICB0YXJnZXQgLSBUaGUgdGFyZ2V0IHRvIGRpc3RjaGVjay4KKyMKK2RlZmluZSBkaXN0Y2hlY2stdGFyZ2V0CiskKEVDSE8pICIgIERJU1RDSEVDSyAgICAkKDEpIgorJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkUGF0aCkvJCgxKSAtLW5vLXByaW50LWRpcmVjdG9yeSBcCitkaXN0Y2hlY2sKK2VuZGVmICMgZGlzdGNoZWNrLXRhcmdldAorCisjCisjIGNvdmVyYWdlLXRhcmdldCA8dGFyZ2V0PgorIworIyBHZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIGZyb20gdW5pdCB0ZXN0cyBmb3IgT3BlblRocmVhZCBmb3IgdGhlCisjIHNwZWNpZmllZCB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBnZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIGZvci4KKyMKK2RlZmluZSBjb3ZlcmFnZS10YXJnZXQKKyQoRUNITykgIiAgQ09WRVJBR0UgJCgxKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoMSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorY292ZXJhZ2UKK2VuZGVmICMgY292ZXJhZ2UtdGFyZ2V0CisKKyMKKyMgc3RhZ2UtdGFyZ2V0IDx0YXJnZXQ+CisjCisjIFN0YWdlIChpbnN0YWxsKSB0aGUgT3BlblRocmVhZCBmaW5hbCBidWlsZCBwcm9kdWN0cyBmb3IgdGhlIHNwZWNpZmllZAorIyB0YXJnZXQuCisjCisjICAgdGFyZ2V0IC0gVGhlIHRhcmdldCB0byBzdGFnZS4KKyMKK2RlZmluZSBzdGFnZS10YXJnZXQKKyQoRUNITykgIiAgU1RBR0UgICAgJCgxKSIKKyQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZFBhdGgpLyQoMSkgLS1uby1wcmludC1kaXJlY3RvcnkgXAorREVTVERJUj0kKEFic1RvcFJlc3VsdERpcikgXAoraW5zdGFsbAorZW5kZWYgIyBzdGFnZS10YXJnZXQKKworIworIyBUQVJHRVRfdGVtcGxhdGUgPHRhcmdldD4KKyMKKyMgRGVmaW5lIG1hY3JvcywgdGFyZ2V0cyBhbmQgcnVsZXMgdG8gY29uZmlndXJlLCBidWlsZCwgYW5kIHN0YWdlCisjIE9wZW5UaHJlYWQgZm9yIGEgc2luZ2xlIHRhcmdldC4KKyMKKyMgICB0YXJnZXQgLSBUaGUgdGFyZ2V0IHRvIGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSBmb3IuCisjCitkZWZpbmUgVEFSR0VUX3RlbXBsYXRlCitDT05GSUdVUkVfVEFSR0VUUyArPSBjb25maWd1cmUtJCgxKQorQlVJTERfVEFSR0VUUyAgICAgKz0gZG8tYnVpbGQtJCgxKQorQ0hFQ0tfVEFSR0VUUyAgICAgKz0gY2hlY2stJCgxKQorRElTVENIRUNLX1RBUkdFVFMgKz0gZGlzdGNoZWNrLSQoMSkKK0NPVkVSQUdFX1RBUkdFVFMgICs9IGNvdmVyYWdlLSQoMSkKK1NUQUdFX1RBUkdFVFMgICAgICs9IHN0YWdlLSQoMSkKK0JVSUxEX0RJUlMgICAgICAgICs9ICQoQnVpbGRQYXRoKS8kKDEpCitESVJFQ1RPUklFUyAgICAgICArPSAkKEJ1aWxkUGF0aCkvJCgxKQorCitjb25maWd1cmUtJCgxKTogJChCdWlsZFBhdGgpLyQoMSkvY29uZmlnLnN0YXR1cworCiskKEJ1aWxkUGF0aCkvJCgxKS9jb25maWcuc3RhdHVzOiB8ICQoQnVpbGRQYXRoKS8kKDEpCisJJCQoY2FsbCBjb25maWd1cmUtdGFyZ2V0LCQoMSkpCisKK2RvLWJ1aWxkLSQoMSk6IGNvbmZpZ3VyZS0kKDEpCisKK2RvLWJ1aWxkLSQoMSk6CisJKyQkKGNhbGwgYnVpbGQtdGFyZ2V0LCQoMSkpCisKK2NoZWNrLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworY2hlY2stJCgxKToKKwkrJCQoY2FsbCBjaGVjay10YXJnZXQsJCgxKSkKKworZGlzdGNoZWNrLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworZGlzdGNoZWNrLSQoMSk6CisJKyQkKGNhbGwgZGlzdGNoZWNrLXRhcmdldCwkKDEpKQorCitjb3ZlcmFnZS0kKDEpOiBkby1idWlsZC0kKDEpCisKK2NvdmVyYWdlLSQoMSk6CisJKyQkKGNhbGwgY292ZXJhZ2UtdGFyZ2V0LCQoMSkpCisKK3N0YWdlLSQoMSk6IGRvLWJ1aWxkLSQoMSkKKworc3RhZ2UtJCgxKTogfCAkKFRvcFJlc3VsdERpcikKKwkkJChjYWxsIHN0YWdlLXRhcmdldCwkKDEpKQorCiskKDEpOiBzdGFnZS0kKDEpCitlbmRlZiAjIFRBUkdFVF90ZW1wbGF0ZQorCisuREVGQVVMVF9HT0FMIDo9IGFsbAorCithbGw6IHN0YWdlCisKKyMgSW5zdGFudGlhdGUgYW4gdGFyZ2V0LXNwZWNpZmljIGJ1aWxkIHRlbXBsYXRlIGZvciB0aGUgdGFyZ2V0LgorCiskKGV2YWwgJChjYWxsIFRBUkdFVF90ZW1wbGF0ZSwkKFRhcmdldFR1cGxlKSkpCisKKyMKKyMgQ29tbW9uIC8gRmluYWxpemF0aW9uCisjCisKK2NvbmZpZ3VyZTogJChDT05GSUdVUkVfVEFSR0VUUykKKworYnVpbGQ6ICQoQlVJTERfVEFSR0VUUykKKworY2hlY2s6ICQoQ0hFQ0tfVEFSR0VUUykKKworZGlzdGNoZWNrOiAkKERJU1RDSEVDS19UQVJHRVRTKQorCitjb3ZlcmFnZTogJChDT1ZFUkFHRV9UQVJHRVRTKQorCitzdGFnZTogJChTVEFHRV9UQVJHRVRTKQorCitESVJFQ1RPUklFUyAgICAgPSAkKFRvcFJlc3VsdERpcikgJChUb3BSZXN1bHREaXIpLyQoVGFyZ2V0VHVwbGUpL2xpYiAkKEJVSUxEX0RJUlMpCisKK0NMRUFOX0RJUlMgICAgICA9ICQoVG9wUmVzdWx0RGlyKSAkKEJVSUxEX0RJUlMpCisKK2FsbDogc3RhZ2UKKworJChESVJFQ1RPUklFUyk6CisJJChFQ0hPKSAiICBNS0RJUiAgICAkQCIKKwlAJChNS0RJUl9QKSAiJEAiCisKK2NsZWFuOgorCSQoRUNITykgIiAgQ0xFQU4iCisJQCQoUk1fRikgLXIgJChDTEVBTl9ESVJTKQorCitoZWxwOgorCSQoRUNITykgIlNpbXBseSB0eXBlICdtYWtlIC1mICQoZmlyc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpJyB0byBidWlsZCBPcGVuVGhyZWFkIGZvciB0aGUgZm9sbG93aW5nICIKKwkkKEVDSE8pICJ0YXJnZXQ6IgorCSQoRUNITykgIiIKKwkkKEVDSE8pICIgICAgJChUYXJnZXRUdXBsZSkiCisJJChFQ0hPKSAiIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGIxMDUxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCisjIEFsd2F5cyBwYWNrYWdlIChlLmcuIGZvciAnbWFrZSBkaXN0JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK0RJU1RfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBwbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhcHBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBkcml2ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMgQWx3YXlzIGJ1aWxkIChlLmcuIGZvciAnbWFrZSBhbGwnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHBsYXRmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKyAgICAKK2lmIE9QRU5USFJFQURfRVhBTVBMRVMKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICBhcHBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXBwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9hcHBzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzQ1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2xpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBidWlsZCAoZS5nLiBmb3IgJ21ha2UgYWxsJykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSQorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gY2xpCitlbmRpZgorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9OQ1AKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG5jcAorZW5kaWYKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL2NsaS9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL2FwcHMvY2xpL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL2NsaS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE5OCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitiaW5fUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworQ1BQRkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworU09VUkNFU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBtYWluLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFMKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvbGlibWJlZGNyeXB0by5hICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FTkFCTEVfQlVJTFRJTl9NQkVEVExTCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9kaWFnL2xpYm9wZW50aHJlYWQtZGlhZy5hICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbGlib3BlbnRocmVhZC1wb3NpeC5hICAgICAgIFwKKyAgICAtbHN0ZGMrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4CitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2xpYm9wZW50aHJlYWQtY2MyNTM4LmEgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZCAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzgKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI2NTAKK0NQUEZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvbGlib3BlbnRocmVhZC1jYzI2NTAuYSAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICAgXAorICAgIC1UICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5sZHMgXAorICAgICQoTlVMTCkKKworZW5kaWYgI09QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMAorTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvbGlib3BlbnRocmVhZC1kYTE1MDAwLmEgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvZGExNTAwMC5sZCAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMAorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCisgICAgTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbGlib3BlbnRocmVhZC1lZnIzMi5hICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9yYWRpby9yYWlsX2xpYi9hdXRvZ2VuL2xpYnJhaWxfcmVsZWFzZS9saWJyYWlsX2VmcjMyeGcxMl9nY2NfcmVsZWFzZS5hIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vRGV2aWNlL1NpbGljb25MYWJzL0VGUjMyTUcxMlAvU291cmNlL0dDQy9lZnIzMm1nMTJwLmxkIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfRUZSMzIKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FTVNLCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9saWJvcGVudGhyZWFkLWVtc2suYSAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9lbXNrLmxkICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FWEFNUExFU19FTVNLCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDAKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9saWJvcGVudGhyZWFkLW5yZjUyODQwLmEgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtVCAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9ucmY1Mjg0MC5sZCAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWgorTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2xpYm9wZW50aHJlYWQta3c0MXouYSAgICAgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L01LVzQxWjUxMnh4eDQubGQgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfS1c0MVoKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0ZURAorYmluX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICBvdC1jbGktZnRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworb3RfY2xpX2Z0ZF9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENQUEZMQUdTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvdF9jbGlfZnRkX0xEQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvY2xpL2xpYm9wZW50aHJlYWQtY2xpLWZ0ZC5hICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL2NvcmUvbGlib3BlbnRocmVhZC1mdGQuYSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChMREFERF9DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfY2xpX2Z0ZF9MREZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKExERkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvdF9jbGlfZnRkX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoU09VUkNFU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSV9NVEQKK2Jpbl9QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgb3QtY2xpLW10ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK290X2NsaV9tdGRfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDUFBGTEFHU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfY2xpX210ZF9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL2NsaS9saWJvcGVudGhyZWFkLWNsaS1tdGQuYSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9jb3JlL2xpYm9wZW50aHJlYWQtbXRkLmEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTERBRERfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X2NsaV9tdGRfTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChMREZMQUdTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfY2xpX210ZF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh3aWxkY2FyZCAqLmdjZGEgKi5nY25vKQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy9jbGkvUkVBRE1FLm1kIGIvZXhhbXBsZXMvYXBwcy9jbGkvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDE5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL2NsaS9SRUFETUUubWQKQEAgLTAsMCArMSwxMTIgQEAKKyMgT3BlblRocmVhZCBDTEkgRXhhbXBsZQorCitUaGlzIGV4YW1wbGUgYXBwbGljYXRpb24gZGVtb25zdHJhdGVzIGEgbWluaW1hbCBPcGVuVGhyZWFkIGFwcGxpY2F0aW9uCit0aGF0IGV4cG9zZXMgdGhlIE9wZW5UaHJlYWQgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudCBpbnRlcmZhY2VzCit2aWEgYSBiYXNpYyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLiBUaGUgc3RlcHMgYmVsb3cgdGFrZSB5b3UgdGhyb3VnaAordGhlIG1pbmltYWwgc3RlcHMgcmVxdWlyZWQgdG8gcGluZyBvbmUgZW11bGF0ZWQgVGhyZWFkIGRldmljZSBmcm9tCithbm90aGVyIGVtdWxhdGVkIFRocmVhZCBkZXZpY2UuCisKKyMjIDEuIEJ1aWxkCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeAorYGBgCisKKyMjIDIuIFN0YXJ0IG5vZGUgMQorCitTcGF3biB0aGUgcHJvY2VzczoKKworYGBgYmFzaAorJCBjZCA8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvPHBsYXRmb3JtPi9iaW4KKyQgLi9vdC1jbGktZnRkIDEKK2BgYAorCitTZXQgdGhlIFBBTiBJRDoKKworYGBgYmFzaAorPiBwYW5pZCAweDEyMzQKK2BgYAorCitCcmluZyB1cCB0aGUgSVB2NiBpbnRlcmZhY2U6CisKK2BgYGJhc2gKKz4gaWZjb25maWcgdXAKK0RvbmUKK2BgYAorCitTdGFydCBUaHJlYWQgcHJvdG9jb2wgb3BlcmF0aW9uOgorCitgYGBiYXNoCis+IHRocmVhZCBzdGFydAorRG9uZQorYGBgCisKK1dhaXQgYSBmZXcgc2Vjb25kcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGRldmljZSBoYXMgYmVjb21lIGEgVGhyZWFkIExlYWRlcjoKKworYGBgYmFzaAorPiBzdGF0ZQorbGVhZGVyCitEb25lCitgYGAKKworVmlldyBJUHY2IGFkZHJlc3NlcyBhc3NpZ25lZCB0byBOb2RlIDEncyBUaHJlYWQgaW50ZXJmYWNlOgorCitgYGBiYXNoCis+IGlwYWRkcgorZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6MAorZmRkZTphZDAwOmJlZWY6MDo1NTg6ZjU2YjpkNjg4Ojc5OQorZmU4MDowOjA6MDpmM2Q5OjJhODI6YzhkODpmZTQzCitEb25lCitgYGAKKworIyMgMi4gU3RhcnQgbm9kZSAyCisKK1NwYXduIHRoZSBwcm9jZXNzOgorCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC88cGxhdGZvcm0+L2JpbgorJCAuL290LWNsaS1mdGQgMgorYGBgCisKK1NldCB0aGUgUEFOIElEOgorCitgYGBiYXNoCis+IHBhbmlkIDB4MTIzNAorYGBgCisKK0JyaW5nIHVwIHRoZSBJUHY2IGludGVyZmFjZToKKworYGBgYmFzaAorPiBpZmNvbmZpZyB1cAorRG9uZQorYGBgCisKK1N0YXJ0IFRocmVhZCBwcm90b2NvbCBvcGVyYXRpb246CisKK2BgYGJhc2gKKz4gdGhyZWFkIHN0YXJ0CitEb25lCitgYGAKKworV2FpdCBhIGZldyBzZWNvbmRzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIGhhcyBiZWNvbWUgYSBUaHJlYWQgUm91dGVyOgorCitgYGBiYXNoCis+IHN0YXRlCityb3V0ZXIKK0RvbmUKK2BgYAorCisjIyAzLiBQaW5nIE5vZGUgMSBmcm9tIE5vZGUgMgorCitgYGBiYXNoCis+IHBpbmcgZmRkZTphZDAwOmJlZWY6MDo1NTg6ZjU2YjpkNjg4Ojc5OQorMTYgYnl0ZXMgZnJvbSBmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5OiBpY21wX3NlcT0xIGhsaW09NjQKK2BgYAorCisjIyA0LiBXYW50IG1vcmU/CisKK1lvdSBtYXkgbm90ZSB0aGF0IHRoZSBleGFtcGxlIGFib3ZlIGRpZCBub3QgaW5jbHVkZSBhbnkgbmV0d29yayBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiwgc3VjaCBhcyB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQgb3IgdGhlIFRocmVhZCBNYXN0ZXIgS2V5LiBPcGVuVGhyZWFkIGN1cnJlbnRseSBpbXBsZW1lbnRzIGRlZmF1bHQgdmFsdWVzIGZvciBuZXR3b3JrIHBhcmFtZXRlcnMsIGhvd2V2ZXIsIHlvdSBtYXkgdXNlIHRoZSBDTEkgdG8gY2hhbmdlIG5ldHdvcmsgcGFyYW1ldGVycywgb3RoZXIgY29uZmlndXJhdGlvbnMsIGFuZCBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuCisKK1NlZSB0aGUgW09wZW5UaHJlYWQgQ0xJIFJlZmVyZW5jZSBSRUFETUUubWRdKC4uLy4uLy4uL3NyYy9jbGkvUkVBRE1FLm1kKSB0byBleHBsb3JlIG1vcmUuCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL2NsaS9tYWluLmMgYi9leGFtcGxlcy9hcHBzL2NsaS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkNDg5MwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvY2xpL21haW4uYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jbGkuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3BsYXRmb3JtLmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKK3ZvaWQgKm90UGxhdENBbGxvYyhzaXplX3QgYU51bSwgc2l6ZV90IGFTaXplKQoreworICAgIHJldHVybiBjYWxsb2MoYU51bSwgYVNpemUpOworfQorCit2b2lkIG90UGxhdEZyZWUodm9pZCAqYVB0cikKK3sKKyAgICBmcmVlKGFQdHIpOworfQorI2VuZGlmCisKK3ZvaWQgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBzaXplX3Qgb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCA9IDA7CisgICAgdWludDhfdCAqb3RJbnN0YW5jZUJ1ZmZlciA9IE5VTEw7CisjZW5kaWYKKworICAgIFBsYXRmb3JtSW5pdChhcmdjLCBhcmd2KTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIC8vIENhbGwgdG8gcXVlcnkgdGhlIGJ1ZmZlciBzaXplCisgICAgKHZvaWQpb3RJbnN0YW5jZUluaXQoTlVMTCwgJm90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworCisgICAgLy8gQ2FsbCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyCisgICAgb3RJbnN0YW5jZUJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKG90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworICAgIGFzc2VydChvdEluc3RhbmNlQnVmZmVyKTsKKworICAgIC8vIEluaXRpYWxpemUgT3BlblRocmVhZCB3aXRoIHRoZSBidWZmZXIKKyAgICBzSW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdChvdEluc3RhbmNlQnVmZmVyLCAmb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisjZWxzZQorICAgIHNJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0U2luZ2xlKCk7CisjZW5kaWYKKyAgICBhc3NlcnQoc0luc3RhbmNlKTsKKworICAgIG90Q2xpVWFydEluaXQoc0luc3RhbmNlKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICBvdERpYWdJbml0KHNJbnN0YW5jZSk7CisjZW5kaWYKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgb3RUYXNrbGV0c1Byb2Nlc3Moc0luc3RhbmNlKTsKKyAgICAgICAgUGxhdGZvcm1Qcm9jZXNzRHJpdmVycyhzSW5zdGFuY2UpOworICAgIH0KKworICAgIC8vIG90SW5zdGFuY2VGaW5hbGl6ZShzSW5zdGFuY2UpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIC8vIGZyZWUob3RJbnN0YW5jZUJ1ZmZlcik7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy9uY3AvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9hcHBzL25jcC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZlMzkyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy9uY3AvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxOTggQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworYmluX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK0NQUEZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK1NPVVJDRVNfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfQlVJTFRJTl9NQkVEVExTCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzL2xpYm1iZWRjcnlwdG8uYSAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX0JVSUxUSU5fTUJFRFRMUworCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvZGlhZy9saWJvcGVudGhyZWFkLWRpYWcuYSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbGlib3BlbnRocmVhZC1wb3NpeC5hICAgICAgIFwKKyAgICAtbHN0ZGMrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4CitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2xpYm9wZW50aHJlYWQtY2MyNTM4LmEgICAgIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZCAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmICMgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI1MzgKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19DQzI2NTAKK0NQUEZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvbGlib3BlbnRocmVhZC1jYzI2NTAuYSAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICAgXAorICAgIC1UICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5sZHMgXAorICAgICQoTlVMTCkKKworZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0NDMjY1MAorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDAKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2xpYm9wZW50aHJlYWQtZGExNTAwMC5hICAgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtVCAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2RhMTUwMDAubGQgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0RBMTUwMDAKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2xpYm9wZW50aHJlYWQtZWZyMzIuYSAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vcmFkaW8vcmFpbF9saWIvYXV0b2dlbi9saWJyYWlsX3JlbGVhc2UvbGlicmFpbF9lZnIzMnhnMTJfZ2NjX3JlbGVhc2UuYSBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL0RldmljZS9TaWxpY29uTGFicy9FRlIzMk1HMTJQL1NvdXJjZS9HQ0MvZWZyMzJtZzEycC5sZCBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSworTERBRERfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svbGlib3BlbnRocmVhZC1lbXNrLmEgICAgICAgICBcCisgICAgJChOVUxMKQorCitMREZMQUdTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIC1UICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svZW1zay5sZCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSworCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX05SRjUyODQwCitMREFERF9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvbGlib3BlbnRocmVhZC1ucmY1Mjg0MC5hIFwKKyAgICAkKE5VTEwpCisKK0xERkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgLVQgJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvbnJmNTI4NDAubGQgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfS1c0MVoKK0xEQUREX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9saWJvcGVudGhyZWFkLWt3NDF6LmEgICAgICAgXAorICAgICQoTlVMTCkKKworTERGTEFHU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtVCAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NS1c0MVo1MTJ4eHg0LmxkICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0tXNDFaCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX05DUF9GVEQKK2Jpbl9QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgb3QtbmNwLWZ0ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK290X25jcF9mdGRfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDUFBGTEFHU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfbmNwX2Z0ZF9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHRvcF9idWlsZGRpcikvc3JjL25jcC9saWJvcGVudGhyZWFkLW5jcC1mdGQuYSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9jb3JlL2xpYm9wZW50aHJlYWQtZnRkLmEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTERBRERfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X25jcF9mdGRfTERGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChMREZMQUdTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworb3RfbmNwX2Z0ZF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfTVRECitiaW5fUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIG90LW5jcC1tdGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitvdF9uY3BfbXRkX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X25jcF9tdGRfTERBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9uY3AvbGlib3BlbnRocmVhZC1uY3AtbXRkLmEgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvY29yZS9saWJvcGVudGhyZWFkLW10ZC5hICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKExEQUREX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvdF9uY3BfbXRkX0xERkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTERGTEFHU19DT01NT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X25jcF9tdGRfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChTT1VSQ0VTX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvbmNwL21haW4uYyBiL2V4YW1wbGVzL2FwcHMvbmNwL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUzMjE4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy9uY3AvbWFpbi5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL25jcC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUwordm9pZCAqb3RQbGF0Q0FsbG9jKHNpemVfdCBhTnVtLCBzaXplX3QgYVNpemUpCit7CisgICAgcmV0dXJuIGNhbGxvYyhhTnVtLCBhU2l6ZSk7Cit9CisKK3ZvaWQgb3RQbGF0RnJlZSh2b2lkICphUHRyKQoreworICAgIGZyZWUoYVB0cik7Cit9CisjZW5kaWYKKwordm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90SW5zdGFuY2UgKnNJbnN0YW5jZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHNpemVfdCBvdEluc3RhbmNlQnVmZmVyTGVuZ3RoID0gMDsKKyAgICB1aW50OF90ICpvdEluc3RhbmNlQnVmZmVyID0gTlVMTDsKKyNlbmRpZgorCisgICAgUGxhdGZvcm1Jbml0KGFyZ2MsIGFyZ3YpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgLy8gQ2FsbCB0byBxdWVyeSB0aGUgYnVmZmVyIHNpemUKKyAgICAodm9pZClvdEluc3RhbmNlSW5pdChOVUxMLCAmb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBDYWxsIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIKKyAgICBvdEluc3RhbmNlQnVmZmVyID0gKHVpbnQ4X3QgKiltYWxsb2Mob3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisgICAgYXNzZXJ0KG90SW5zdGFuY2VCdWZmZXIpOworCisgICAgLy8gSW5pdGlhbGl6ZSBPcGVuVGhyZWFkIHdpdGggdGhlIGJ1ZmZlcgorICAgIHNJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KG90SW5zdGFuY2VCdWZmZXIsICZvdEluc3RhbmNlQnVmZmVyTGVuZ3RoKTsKKyNlbHNlCisgICAgc0luc3RhbmNlID0gb3RJbnN0YW5jZUluaXRTaW5nbGUoKTsKKyNlbmRpZgorICAgIGFzc2VydChzSW5zdGFuY2UpOworCisgICAgb3ROY3BJbml0KHNJbnN0YW5jZSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisgICAgb3REaWFnSW5pdChzSW5zdGFuY2UpOworI2VuZGlmCisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIG90VGFza2xldHNQcm9jZXNzKHNJbnN0YW5jZSk7CisgICAgICAgIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMoc0luc3RhbmNlKTsKKyAgICB9CisKKyAgICAvLyBvdEluc3RhbmNlRmluYWxpemUoc0luc3RhbmNlKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICAvLyBmcmVlKG90SW5zdGFuY2VCdWZmZXIpOworI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIwMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0FwcC54YW1sCkBAIC0wLDAgKzEsMzUgQEAKK++7vzwhLS0KKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+Cis8QXBwbGljYXRpb24KKyAgICB4OkNsYXNzPSJvdC5BcHAiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgUmVxdWVzdGVkVGhlbWU9IkRhcmsiPgorCis8L0FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0FwcC54YW1sLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzM2I1NAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5jcHAKQEAgLTAsMCArMSwxNDYgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlICJNYWluUGFnZS54YW1sLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6QWN0aXZhdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpJbnRlcm9wOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworLy8vIDxzdW1tYXJ5PgorLy8vIEluaXRpYWxpemVzIHRoZSBzaW5nbGV0b24gYXBwbGljYXRpb24gb2JqZWN0LiAgVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiBhdXRob3JlZCBjb2RlCisvLy8gZXhlY3V0ZWQsIGFuZCBhcyBzdWNoIGlzIHRoZSBsb2dpY2FsIGVxdWl2YWxlbnQgb2YgbWFpbigpIG9yIFdpbk1haW4oKS4KKy8vLyA8L3N1bW1hcnk+CitBcHA6OkFwcCgpCit7CisgICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOworICAgIFN1c3BlbmRpbmcgKz0gcmVmIG5ldyBTdXNwZW5kaW5nRXZlbnRIYW5kbGVyKHRoaXMsICZBcHA6Ok9uU3VzcGVuZGluZyk7Cit9CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBJbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkIG5vcm1hbGx5IGJ5IHRoZSBlbmQgdXNlci4gIE90aGVyIGVudHJ5IHBvaW50cworLy8vIHdpbGwgYmUgdXNlZCBzdWNoIGFzIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkIHRvIG9wZW4gYSBzcGVjaWZpYyBmaWxlLgorLy8vIDwvc3VtbWFyeT4KKy8vLyA8cGFyYW0gbmFtZT0iZSI+RGV0YWlscyBhYm91dCB0aGUgbGF1bmNoIHJlcXVlc3QgYW5kIHByb2Nlc3MuPC9wYXJhbT4KK3ZvaWQgQXBwOjpPbkxhdW5jaGVkKFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkFjdGl2YXRpb246OkxhdW5jaEFjdGl2YXRlZEV2ZW50QXJnc14gZSkKK3sKKyNpZiBfREVCVUcKKyAgICAvLyBTaG93IGdyYXBoaWNzIHByb2ZpbGluZyBpbmZvcm1hdGlvbiB3aGlsZSBkZWJ1Z2dpbmcuCisgICAgaWYgKElzRGVidWdnZXJQcmVzZW50KCkpCisgICAgeworICAgICAgICAvLyBEaXNwbGF5IHRoZSBjdXJyZW50IGZyYW1lIHJhdGUgY291bnRlcnMKKyAgICAgICAgIERlYnVnU2V0dGluZ3MtPkVuYWJsZUZyYW1lUmF0ZUNvdW50ZXIgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGF1dG8gcm9vdEZyYW1lID0gZHluYW1pY19jYXN0PEZyYW1lXj4oV2luZG93OjpDdXJyZW50LT5Db250ZW50KTsKKworICAgIC8vIERvIG5vdCByZXBlYXQgYXBwIGluaXRpYWxpemF0aW9uIHdoZW4gdGhlIFdpbmRvdyBhbHJlYWR5IGhhcyBjb250ZW50LAorICAgIC8vIGp1c3QgZW5zdXJlIHRoYXQgdGhlIHdpbmRvdyBpcyBhY3RpdmUKKyAgICBpZiAocm9vdEZyYW1lID09IG51bGxwdHIpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSBGcmFtZSB0byBhY3QgYXMgdGhlIG5hdmlnYXRpb24gY29udGV4dCBhbmQgYXNzb2NpYXRlIGl0IHdpdGgKKyAgICAgICAgLy8gYSBTdXNwZW5zaW9uTWFuYWdlciBrZXkKKyAgICAgICAgcm9vdEZyYW1lID0gcmVmIG5ldyBGcmFtZSgpOworCisgICAgICAgIHJvb3RGcmFtZS0+TmF2aWdhdGlvbkZhaWxlZCArPSByZWYgbmV3IFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uRmFpbGVkRXZlbnRIYW5kbGVyKHRoaXMsICZBcHA6Ok9uTmF2aWdhdGlvbkZhaWxlZCk7CisKKyAgICAgICAgaWYgKGUtPlByZXZpb3VzRXhlY3V0aW9uU3RhdGUgPT0gQXBwbGljYXRpb25FeGVjdXRpb25TdGF0ZTo6VGVybWluYXRlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVE9ETzogUmVzdG9yZSB0aGUgc2F2ZWQgc2Vzc2lvbiBzdGF0ZSBvbmx5IHdoZW4gYXBwcm9wcmlhdGUsIHNjaGVkdWxpbmcgdGhlCisgICAgICAgICAgICAvLyBmaW5hbCBsYXVuY2ggc3RlcHMgYWZ0ZXIgdGhlIHJlc3RvcmUgaXMgY29tcGxldGUKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlLT5QcmVsYXVuY2hBY3RpdmF0ZWQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyb290RnJhbWUtPkNvbnRlbnQgPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBuYXZpZ2F0aW9uIHN0YWNrIGlzbid0IHJlc3RvcmVkIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlLAorICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyaW5nIHRoZSBuZXcgcGFnZSBieSBwYXNzaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGFzIGEgbmF2aWdhdGlvbgorICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIHJvb3RGcmFtZS0+TmF2aWdhdGUoVHlwZU5hbWUoTWFpblBhZ2U6OnR5cGVpZCksIGUtPkFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQbGFjZSB0aGUgZnJhbWUgaW4gdGhlIGN1cnJlbnQgV2luZG93CisgICAgICAgICAgICBXaW5kb3c6OkN1cnJlbnQtPkNvbnRlbnQgPSByb290RnJhbWU7CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGN1cnJlbnQgd2luZG93IGlzIGFjdGl2ZQorICAgICAgICAgICAgV2luZG93OjpDdXJyZW50LT5BY3RpdmF0ZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChlLT5QcmVsYXVuY2hBY3RpdmF0ZWQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyb290RnJhbWUtPkNvbnRlbnQgPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBuYXZpZ2F0aW9uIHN0YWNrIGlzbid0IHJlc3RvcmVkIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlLAorICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyaW5nIHRoZSBuZXcgcGFnZSBieSBwYXNzaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uIGFzIGEgbmF2aWdhdGlvbgorICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIHJvb3RGcmFtZS0+TmF2aWdhdGUoVHlwZU5hbWUoTWFpblBhZ2U6OnR5cGVpZCksIGUtPkFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGN1cnJlbnQgd2luZG93IGlzIGFjdGl2ZQorICAgICAgICAgICAgV2luZG93OjpDdXJyZW50LT5BY3RpdmF0ZSgpOworICAgICAgICB9CisgICAgfQorfQorCisvLy8gPHN1bW1hcnk+CisvLy8gSW52b2tlZCB3aGVuIGFwcGxpY2F0aW9uIGV4ZWN1dGlvbiBpcyBiZWluZyBzdXNwZW5kZWQuICBBcHBsaWNhdGlvbiBzdGF0ZSBpcyBzYXZlZAorLy8vIHdpdGhvdXQga25vd2luZyB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHRlcm1pbmF0ZWQgb3IgcmVzdW1lZCB3aXRoIHRoZSBjb250ZW50cworLy8vIG9mIG1lbW9yeSBzdGlsbCBpbnRhY3QuCisvLy8gPC9zdW1tYXJ5PgorLy8vIDxwYXJhbSBuYW1lPSJzZW5kZXIiPlRoZSBzb3VyY2Ugb2YgdGhlIHN1c3BlbmQgcmVxdWVzdC48L3BhcmFtPgorLy8vIDxwYXJhbSBuYW1lPSJlIj5EZXRhaWxzIGFib3V0IHRoZSBzdXNwZW5kIHJlcXVlc3QuPC9wYXJhbT4KK3ZvaWQgQXBwOjpPblN1c3BlbmRpbmcoT2JqZWN0XiBzZW5kZXIsIFN1c3BlbmRpbmdFdmVudEFyZ3NeIGUpCit7CisgICAgKHZvaWQpIHNlbmRlcjsgIC8vIFVudXNlZCBwYXJhbWV0ZXIKKyAgICAodm9pZCkgZTsgICAvLyBVbnVzZWQgcGFyYW1ldGVyCisKKyAgICAvL1RPRE86IFNhdmUgYXBwbGljYXRpb24gc3RhdGUgYW5kIHN0b3AgYW55IGJhY2tncm91bmQgYWN0aXZpdHkKK30KKworLy8vIDxzdW1tYXJ5PgorLy8vIEludm9rZWQgd2hlbiBOYXZpZ2F0aW9uIHRvIGEgY2VydGFpbiBwYWdlIGZhaWxzCisvLy8gPC9zdW1tYXJ5PgorLy8vIDxwYXJhbSBuYW1lPSJzZW5kZXIiPlRoZSBGcmFtZSB3aGljaCBmYWlsZWQgbmF2aWdhdGlvbjwvcGFyYW0+CisvLy8gPHBhcmFtIG5hbWU9ImUiPkRldGFpbHMgYWJvdXQgdGhlIG5hdmlnYXRpb24gZmFpbHVyZTwvcGFyYW0+Cit2b2lkIEFwcDo6T25OYXZpZ2F0aW9uRmFpbGVkKFBsYXRmb3JtOjpPYmplY3QgXnNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb25GYWlsZWRFdmVudEFyZ3MgXmUpCit7CisgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKCJGYWlsZWQgdG8gbG9hZCBQYWdlICIgKyBlLT5Tb3VyY2VQYWdlVHlwZS5OYW1lKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0FwcC54YW1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0OWM4OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9BcHAueGFtbC5oCkBAIC0wLDAgKzEsNTAgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXBwLmcuaCIKKworbmFtZXNwYWNlIG90Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcm92aWRlcyBhcHBsaWNhdGlvbi1zcGVjaWZpYyBiZWhhdmlvciB0byBzdXBwbGVtZW50IHRoZSBkZWZhdWx0IEFwcGxpY2F0aW9uIGNsYXNzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcmVmIGNsYXNzIEFwcCBzZWFsZWQKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgT25MYXVuY2hlZChXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpBY3RpdmF0aW9uOjpMYXVuY2hBY3RpdmF0ZWRFdmVudEFyZ3NeIGUpIG92ZXJyaWRlOworCisgICAgaW50ZXJuYWw6CisgICAgICAgIEFwcCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBPblN1c3BlbmRpbmcoUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpTdXNwZW5kaW5nRXZlbnRBcmdzXiBlKTsKKyAgICAgICAgdm9pZCBPbk5hdmlnYXRpb25GYWlsZWQoUGxhdGZvcm06Ok9iamVjdCBec2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjo6TmF2aWdhdGlvbkZhaWxlZEV2ZW50QXJncyBeZSk7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRBcmdzLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDNhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50QXJncy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ugb3QKK3sKKworcHVibGljIHJlZiBjbGFzcyBDbGllbnRBcmdzIHNlYWxlZAoreworcHVibGljOgorICAgIHByb3BlcnR5IFdpbmRvd3M6Ok5ldHdvcmtpbmc6Okhvc3ROYW1lXiBTZXJ2ZXJIb3N0TmFtZTsKKyAgICBwcm9wZXJ0eSBQbGF0Zm9ybTo6U3RyaW5nXiAgICAgICAgICAgICAgU2VydmVyUG9ydDsKKyAgICBwcm9wZXJ0eSBXaW5kb3dzOjpOZXR3b3JraW5nOjpIb3N0TmFtZV4gQ2xpZW50SG9zdE5hbWU7CisgICAgcHJvcGVydHkgUGxhdGZvcm06OlN0cmluZ14gICAgICAgICAgICAgIENsaWVudFBvcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0NsaWVudENvbnRyb2wueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRDb250cm9sLnhhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwMGZiYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRDb250cm9sLnhhbWwKQEAgLTAsMCArMSwxNDIgQEAKK++7vzwhLS0KKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+Cis8VXNlckNvbnRyb2wKKyAgICB4OkNsYXNzPSJvdC5DbGllbnRDb250cm9sIgorICAgIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbC9wcmVzZW50YXRpb24iCisgICAgeG1sbnM6eD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwiCisgICAgeG1sbnM6bG9jYWw9InVzaW5nOm90IgorICAgIHhtbG5zOmQ9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZXhwcmVzc2lvbi9ibGVuZC8yMDA4IgorICAgIHhtbG5zOm1jPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIKKyAgICBtYzpJZ25vcmFibGU9ImQiPgorICAgIDxHcmlkPgorICAgICAgICA8R3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSIyMCIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IkF1dG8iLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iMjAiLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSIyMCIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IkF1dG8iLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iMjAiLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICA8L0dyaWQuUm93RGVmaW5pdGlvbnM+CisgICAgICAgIDxHcmlkLkNvbHVtbkRlZmluaXRpb25zPgorICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IkF1dG8iLz4KKyAgICAgICAgICAgIDxDb2x1bW5EZWZpbml0aW9uIFdpZHRoPSIyMCIvPgorICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IioiLz4KKyAgICAgICAgPC9HcmlkLkNvbHVtbkRlZmluaXRpb25zPgorICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICBHcmlkLlJvdz0iMCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIwIgorICAgICAgICAgICAgVGV4dD0iU2VydmVyIElQIDoiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgR3JpZC5Sb3c9IjAiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMiIKKyAgICAgICAgICAgIHg6TmFtZT0iU2VydmVySVAiCisgICAgICAgICAgICBNaW5XaWR0aD0iNTAwIgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIFRleHQ9IlNlcnZlciBQb3J0IDoiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMiIKKyAgICAgICAgICAgIHg6TmFtZT0iU2VydmVyUG9ydCIKKyAgICAgICAgICAgIFdpZHRoPSIxMDAiCisgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJMZWZ0IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgR3JpZC5Sb3c9IjQiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIFRleHQ9IkNsaWVudCBJUCA6IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCb3gKKyAgICAgICAgICAgIEdyaWQuUm93PSI0IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IkNsaWVudElQIgorICAgICAgICAgICAgTWluV2lkdGg9IjUwMCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgIEdyaWQuUm93PSI2IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBUZXh0PSJDbGllbnQgUG9ydCA6IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCb3gKKyAgICAgICAgICAgIEdyaWQuUm93PSI2IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IkNsaWVudFBvcnQiCisgICAgICAgICAgICBXaWR0aD0iMTAwIgorICAgICAgICAgICAgSG9yaXpvbnRhbEFsaWdubWVudD0iTGVmdCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgIEdyaWQuUm93PSI4IgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBHcmlkLkNvbHVtblNwYW49IjMiCisgICAgICAgICAgICBXaWR0aD0iNzUiCisgICAgICAgICAgICBDb250ZW50PSJDb25uZWN0IgorICAgICAgICAgICAgQ2xpY2s9IkNvbm5lY3RfQ2xpY2siCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICBHcmlkLlJvdz0iMTAiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIFRleHQ9IklucHV0IDoiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgR3JpZC5Sb3c9IjEwIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IklucHV0IgorICAgICAgICAgICAgTWluV2lkdGg9IjMwMCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxTdGFja1BhbmVsCisgICAgICAgICAgICBPcmllbnRhdGlvbj0iSG9yaXpvbnRhbCIKKyAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICBHcmlkLlJvdz0iMTIiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uU3Bhbj0iMyIKKyAgICAgICAgICAgID4KKyAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICBXaWR0aD0iNzUiCisgICAgICAgICAgICAgICAgQ29udGVudD0iU2VuZCIKKyAgICAgICAgICAgICAgICBDbGljaz0iU2VuZF9DbGljayIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjAsMCw3NSwwIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8QnV0dG9uCisgICAgICAgICAgICAgICAgV2lkdGg9Ijc1IgorICAgICAgICAgICAgICAgIENvbnRlbnQ9IkV4aXQiCisgICAgICAgICAgICAgICAgQ2xpY2s9IkV4aXRfQ2xpY2siCisgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgPC9TdGFja1BhbmVsPgorICAgIDwvR3JpZD4KKzwvVXNlckNvbnRyb2w+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50Q29udHJvbC54YW1sLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9DbGllbnRDb250cm9sLnhhbWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGY0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50Q29udHJvbC54YW1sLmNwcApAQCAtMCwwICsxLDE4OCBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgIkNsaWVudENvbnRyb2wueGFtbC5oIgorI2luY2x1ZGUgIkZhY3RvcnkuaCIKKyNpbmNsdWRlICJUYWxrSGVscGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIENvbmN1cnJlbmN5OwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOjpQcmltaXRpdmVzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpEYXRhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpJbnB1dDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TWVkaWE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok5hdmlnYXRpb247CisKKy8vIFRoZSBVc2VyIENvbnRyb2wgaXRlbSB0ZW1wbGF0ZSBpcyBkb2N1bWVudGVkIGF0IGh0dHA6Ly9nby5taWNyb3NvZnQuY29tL2Z3bGluay8/TGlua0lkPTIzNDIzNgorCitzdGQ6OmF0b21pYzxpbnQ+IENsaWVudENvbnRyb2w6Ol9jbGllbnRQb3J0eyBUYWxrQ29uc3RzOjpERUZfQ0xJRU5UX1BPUlRfSU5JVCB9OworCitDbGllbnRDb250cm9sOjpDbGllbnRDb250cm9sKCkKK3sKKyAgICBJbml0aWFsaXplQ29tcG9uZW50KCk7CisKKyAgICBTZXJ2ZXJQb3J0LT5UZXh0ID0gREVGX1NFUlZFUl9QT1JULlRvU3RyaW5nKCk7CisgICAgYXV0byBjbGllbnRQb3J0ID0gX2NsaWVudFBvcnQubG9hZCgpOworICAgIENsaWVudFBvcnQtPlRleHQgPSBjbGllbnRQb3J0LlRvU3RyaW5nKCk7Cit9CisKK3ZvaWQKK0NsaWVudENvbnRyb2w6OkluaXQoCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiAgbm90aWZ5LAorICAgIElNYWluUGFnZVVJRWxlbWVudHNeIG1haW5QYWdlVUlFbGVtZW50cykKK3sKKyAgICBfbm90aWZ5ID0gc3RkOjptb3ZlKG5vdGlmeSk7CisgICAgX21haW5QYWdlVUlFbGVtZW50cyA9IHN0ZDo6bW92ZShtYWluUGFnZVVJRWxlbWVudHMpOworfQorCit2b2lkCitDbGllbnRDb250cm9sOjpQcm90b2NvbENoYW5nZWQoCisgICAgUHJvdG9jb2wgcHJvdG9jb2wpCit7CisgICAgX3Byb3RvY29sID0gcHJvdG9jb2w7Cit9CisKK3ZvaWQKK0NsaWVudENvbnRyb2w6OkNvbm5lY3RfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgYXV0byBjbGllbnRBcmdzID0gcmVmIG5ldyBDbGllbnRBcmdzKCk7CisKKyAgICAgICAgYXV0byBzZXJ2ZXJJUCA9IFNlcnZlcklQLT5UZXh0OworICAgICAgICBpZiAoc2VydmVySVAtPklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm8gU2VydmVyIElQIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVjayB2YWxpZCBjaGFycyBvZiBJcHY2IEFkZHJlc3MKKyAgICAgICAgaWYgKCFUYWxrSGVscGVyOjpBbGxWYWxpZElwdjZDaGFycyhzZXJ2ZXJJUC0+RGF0YSgpLCBzZXJ2ZXJJUC0+RGF0YSgpICsgc2VydmVySVAtPkxlbmd0aCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm90IGEgdmFsaWQgU2VydmVyIElQdjYgYWRkcmVzcyIpOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50QXJncy0+U2VydmVySG9zdE5hbWUgPSByZWYgbmV3IEhvc3ROYW1lKHNlcnZlcklQKTsKKworICAgICAgICBpZiAoU2VydmVyUG9ydC0+VGV4dC0+SXNFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX0lOVkFMSURBUkcsICJObyBTZXJ2ZXIgUG9ydCIpOworICAgICAgICB9CisgICAgICAgIGNsaWVudEFyZ3MtPlNlcnZlclBvcnQgPSBTZXJ2ZXJQb3J0LT5UZXh0OworCisgICAgICAgIGF1dG8gY2xpZW50SVAgPSBDbGllbnRJUC0+VGV4dDsKKyAgICAgICAgaWYgKGNsaWVudElQLT5Jc0VtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRywgIk5vIENsaWVudCBJUCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgdmFsaWQgY2hhcnMgb2YgSXB2NiBBZGRyZXNzCisgICAgICAgIGlmICghVGFsa0hlbHBlcjo6QWxsVmFsaWRJcHY2Q2hhcnMoY2xpZW50SVAtPkRhdGEoKSwgY2xpZW50SVAtPkRhdGEoKSArIGNsaWVudElQLT5MZW5ndGgoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRywgIk5vdCBhIHZhbGlkIGNsaWVudCBJUHY2IGFkZHJlc3MiKTsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudEFyZ3MtPkNsaWVudEhvc3ROYW1lID0gcmVmIG5ldyBIb3N0TmFtZShjbGllbnRJUCk7CisKKyAgICAgICAgaWYgKENsaWVudFBvcnQtPlRleHQtPklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm8gQ2xpZW50IFBvcnQiKTsKKyAgICAgICAgfQorICAgICAgICBjbGllbnRBcmdzLT5DbGllbnRQb3J0ID0gQ2xpZW50UG9ydC0+VGV4dDsKKworICAgICAgICBhdXRvIGNsZWludENvbnRleHQgPSBGYWN0b3J5OjpDcmVhdGVDbGllbnRDb250ZXh0KF9ub3RpZnksIGNsaWVudEFyZ3MsIF9wcm90b2NvbCk7CisgICAgICAgIGNsZWludENvbnRleHQtPkNvbm5lY3RfQ2xpY2soc2VuZGVyLCBlKTsKKworICAgICAgICAvLyBmaXggT25seSB1c2FnZSBvZiBlYWNoIHNvY2tldCBhZGRyZXNzIChwcm90b2NvbC9uZXR3b3JrIGFkZHJlc3MvcG9ydCkKKyAgICAgICAgLy8gaXMgbm9ybWFsbHkgcGVybWl0dGVkLiAKKyAgICAgICAgYXV0byBjbGllbnRQb3J0ID0gKytfY2xpZW50UG9ydDsKKyAgICAgICAgQ2xpZW50UG9ydC0+VGV4dCA9IGNsaWVudFBvcnQuVG9TdHJpbmcoKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgeworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAiQ29ubmVjdGluZyBmYWlsZWQgd2l0aCBpbnB1dCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgIH0KK30KKwordm9pZAorQ2xpZW50Q29udHJvbDo6U2VuZF9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBhdXRvIGlucHV0ID0gSW5wdXQtPlRleHQ7CisgICAgICAgIGlmIChpbnB1dC0+SXNFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX0lOVkFMSURBUkcsICJObyBJbnB1dCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkhhc0tleSgiY2xpZW50Q29udGV4dCIpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX1VORVhQRUNURUQsICJOb3QgQ29ubmVjdGVkIik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNsaWVudENvbnRleHQgPSBkeW5hbWljX2Nhc3Q8SUNsaWVudENvbnRleHRePigKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+TG9va3VwKCJjbGllbnRDb250ZXh0IikpOworICAgICAgICBpZiAoY2xpZW50Q29udGV4dCA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX1VORVhQRUNURUQsICJObyBjbGllbnRDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICBjbGllbnRDb250ZXh0LT5TZW5kX0NsaWNrKHNlbmRlciwgZSwgaW5wdXQpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICB7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICJTZW5kaW5nIG1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICB9Cit9CisKK3ZvaWQKK0NsaWVudENvbnRyb2w6OkV4aXRfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIF9tYWluUGFnZVVJRWxlbWVudHMtPlRhbGtHcmlkLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgIF9tYWluUGFnZVVJRWxlbWVudHMtPlRocmVhZEdyaWQtPlZpc2liaWxpdHkgPSBYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0NsaWVudENvbnRyb2wueGFtbC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0NsaWVudENvbnRyb2wueGFtbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjQ3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvQ2xpZW50Q29udHJvbC54YW1sLmgKQEAgLTAsMCArMSw2NiBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSAiQ2xpZW50Q29udHJvbC5nLmgiCisjaW5jbHVkZSAiVGFsa0NvbnN0cy5oIgorI2luY2x1ZGUgIklBc3luY1RocmVhZE5vdGlmeS5oIgorI2luY2x1ZGUgIklNYWluUGFnZVVJRWxlbWVudHMuaCIKKyNpbmNsdWRlICJQcm90b2NvbC5oIgorCituYW1lc3BhY2Ugb3QKK3sKKworW1dpbmRvd3M6OkZvdW5kYXRpb246Ok1ldGFkYXRhOjpXZWJIb3N0SGlkZGVuXQorcHVibGljIHJlZiBjbGFzcyBDbGllbnRDb250cm9sIHNlYWxlZAoreworcHVibGljOgorICAgIENsaWVudENvbnRyb2woKTsKKworICAgIHZvaWQgSW5pdChJQXN5bmNUaHJlYWROb3RpZnleIG5vdGlmeSwgSU1haW5QYWdlVUlFbGVtZW50c14gbWFpblBhZ2VVSUVsZW1lbnRzKTsKKworICAgIHZvaWQgUHJvdG9jb2xDaGFuZ2VkKFByb3RvY29sIHByb3RvY29sKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNob3J0IERFRl9TRVJWRVJfUE9SVCA9IFRhbGtDb25zdHM6OkRFRl9TRVJWRVJfUE9SVDsKKworICAgIHZvaWQgQ29ubmVjdF9DbGljayhQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgdm9pZCBTZW5kX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2b2lkIEV4aXRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIElBc3luY1RocmVhZE5vdGlmeV4gICAgIF9ub3RpZnk7CisgICAgSU1haW5QYWdlVUlFbGVtZW50c14gICAgX21haW5QYWdlVUlFbGVtZW50czsKKyAgICBQcm90b2NvbCAgICAgICAgICAgICAgICBfcHJvdG9jb2w7CisgICAgc3RhdGljIHN0ZDo6YXRvbWljPGludD4gX2NsaWVudFBvcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1DbGllbnRDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjIzYjBkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgIkRhdGFncmFtQ2xpZW50Q29udGV4dC5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VzaW5nIG5hbWVzcGFjZSBDb25jdXJyZW5jeTsKK3VzaW5nIG5hbWVzcGFjZSBQbGF0Zm9ybTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpBcHBsaWNhdGlvbk1vZGVsOjpDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb247Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjo6Q29sbGVjdGlvbnM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOjpQcmltaXRpdmVzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpEYXRhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpJbnB1dDsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TWVkaWE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok5hdmlnYXRpb247CisKK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6RGF0YWdyYW1DbGllbnRDb250ZXh0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LAorICAgIERhdGFncmFtU29ja2V0XiAgICAgY2xpZW50LAorICAgIENsaWVudEFyZ3NeICAgICAgICAgYXJncykgOgorICAgIF9ub3RpZnl7IHN0ZDo6bW92ZShub3RpZnkpIH0sCisgICAgX2NsaWVudHsgc3RkOjptb3ZlKGNsaWVudCkgfSwKKyAgICBfYXJnc3sgc3RkOjptb3ZlKGFyZ3MpIH0KK3sKK30KKworRGF0YWdyYW1DbGllbnRDb250ZXh0Ojp+RGF0YWdyYW1DbGllbnRDb250ZXh0KCkKK3sKKyAgICAvLyBBIENsaWVudCBjYW4gYmUgY2xvc2VkIGluIHR3byB3YXlzOgorICAgIC8vICAtIGV4cGxpY2l0bHk6IHVzaW5nIHRoZSAnZGVsZXRlJyBrZXl3b3JkIChjbGllbnQgaXMgY2xvc2VkIGV2ZW4gaWYgdGhlcmUgYXJlIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gaXQpLgorICAgIC8vICAtIGltcGxpY2l0bHk6IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBpdCAoaS5lLiwgZmFsbGluZyBvdXQtb2Ytc2NvcGUpLgorICAgIC8vCisgICAgLy8gV2hlbiBhIFNvY2tldCBpcyBjbG9zZWQgaW1wbGljaXRseSwgaXQgY2FuIHRha2Ugc2V2ZXJhbCBzZWNvbmRzIGZvciB0aGUgbG9jYWwgcG9ydCBiZWluZyB1c2VkCisgICAgLy8gYnkgaXQgdG8gYmUgZnJlZWQvcmVjbGFpbWVkIGJ5IHRoZSBsb3dlciBuZXR3b3JraW5nIGxheWVycy4gRHVyaW5nIHRoYXQgdGltZSwgb3RoZXIgc29ja2V0cyBvbiB0aGUgbWFjaGluZQorICAgIC8vIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoZSBwb3J0LiBUaHVzLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IFNvY2tldCBpbnN0YW5jZXMgYmUgZXhwbGljaXRseQorICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBnbyBvdXQgb2Ygc2NvcGUoZS5nLiwgYmVmb3JlIGFwcGxpY2F0aW9uIGV4aXQpLiBUaGUgY2FsbCBiZWxvdyBleHBsaWNpdGx5IGNsb3NlcyB0aGUgc29ja2V0LgorICAgIGlmIChfY2xpZW50ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBkZWxldGUgX2NsaWVudDsKKyAgICAgICAgX2NsaWVudCA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkCitEYXRhZ3JhbUNsaWVudENvbnRleHQ6OkNvbm5lY3RfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRhc2s8dm9pZD4gcmVtb3ZlQ29udGV4dDsKKworICAgIGlmIChDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkhhc0tleSgiY2xpZW50Q29udGV4dCIpKQorICAgIHsKKyAgICAgICAgYXV0byBjbGllbnRDb250ZXh0ID0gZHluYW1pY19jYXN0PElDbGllbnRDb250ZXh0Xj4oCisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkxvb2t1cCgiY2xpZW50Q29udGV4dCIpKTsKKyAgICAgICAgaWYgKGNsaWVudENvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gY2xpZW50Q29udGV4dCIpOworICAgICAgICB9CisKKyAgICAgICAgcmVtb3ZlQ29udGV4dCA9IGNyZWF0ZV90YXNrKGNsaWVudENvbnRleHQtPkNhbmNlbElPKCkpLnRoZW4oCisgICAgICAgICAgICBbXSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJjbGllbnRDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgX2NsaWVudC0+TWVzc2FnZVJlY2VpdmVkICs9IHJlZiBuZXcgTWVzc2FnZUhhbmRsZXIoCisgICAgICAgIHRoaXMsICZEYXRhZ3JhbUNsaWVudENvbnRleHQ6Ok9uTWVzc2FnZSk7CisKKyAgICByZW1vdmVDb250ZXh0LnRoZW4oW3RoaXNdKHRhc2s8dm9pZD4gcHJldlRhc2spCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgcHJldlRhc2suZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIEV2ZW50cyBjYW5ub3QgYmUgaG9va2VkIHVwIGRpcmVjdGx5IHRvIHRoZSBTY2VuYXJpb0lucHV0MiBvYmplY3QsIGFzIHRoZSBvYmplY3QgY2FuIGZhbGwgb3V0LW9mLXNjb3BlIGFuZCBiZQorICAgICAgICAgICAgLy8gZGVsZXRlZC4gVGhpcyB3b3VsZCByZW5kZXIgYW55IGV2ZW50IGhvb2tlZCB1cCB0byB0aGUgb2JqZWN0IGluZWZmZWN0aXZlLiBUaGUgQ2xpZW50Q29udGV4dCBndWFyYW50ZWVzIHRoYXQKKyAgICAgICAgICAgIC8vIGJvdGggdGhlIHNvY2tldCBhbmQgb2JqZWN0IHRoYXQgc2VydmVzIGl0cyBldmVudHMgaGF2ZSB0aGUgc2FtZSBsaWZldGltZS4KKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SW5zZXJ0KCJjbGllbnRDb250ZXh0IiwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAiUmVtb3ZlIGNsaWVudENvbnRleHQgZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKHRhc2tfY2FuY2VsZWQmKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9KS50aGVuKFt0aGlzXSgpCisgICAgeworICAgICAgICBhdXRvIGVuZHBvaW50UGFpciA9IHJlZiBuZXcgRW5kcG9pbnRQYWlyKF9hcmdzLT5DbGllbnRIb3N0TmFtZSwgX2FyZ3MtPkNsaWVudFBvcnQsCisgICAgICAgICAgICBfYXJncy0+U2VydmVySG9zdE5hbWUsIF9hcmdzLT5TZXJ2ZXJQb3J0KTsKKworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlN0YXJ0IGNvbm5lY3RpbmciLCBOb3RpZnlUeXBlOjpTdGF0dXMpOworCisgICAgICAgIGNyZWF0ZV90YXNrKF9jbGllbnQtPkNvbm5lY3RBc3luYyhlbmRwb2ludFBhaXIpKS50aGVuKAorICAgICAgICAgICAgW3RoaXMsIGVuZHBvaW50UGFpcl0odGFzazx2b2lkPiBwcmV2VGFzaykKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworICAgICAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3QgZnJvbSAiICsgZW5kcG9pbnRQYWlyLT5Mb2NhbEhvc3ROYW1lLT5DYW5vbmljYWxOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgIiB0byAiICsgZW5kcG9pbnRQYWlyLT5SZW1vdGVIb3N0TmFtZS0+Q2Fub25pY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKyAgICAgICAgICAgICAgICBTZXRDb25uZWN0ZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJTdGFydCBiaW5kaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICAgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgiY2xpZW50Q29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKHRhc2tfY2FuY2VsZWQmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJjbGllbnRDb250ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkCitEYXRhZ3JhbUNsaWVudENvbnRleHQ6OlNlbmRfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlLAorICAgIFN0cmluZ14gICAgICAgICAgaW5wdXQpCit7CisgICAgU2VuZE1lc3NhZ2UoR2V0RGF0YVdyaXRlcigpLCBpbnB1dCk7Cit9CisKK0lBc3luY0FjdGlvbl4KK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6Q2FuY2VsSU8oKQoreworICAgIHJldHVybiBfY2xpZW50LT5DYW5jZWxJT0FzeW5jKCk7Cit9CisKK3ZvaWQKK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6U2V0Q29ubmVjdGVkKAorICAgIGJvb2wgY29ubmVjdGVkKQoreworICAgIF9jb25uZWN0ZWQgPSBjb25uZWN0ZWQ7Cit9CisKK2Jvb2wKK290OjpEYXRhZ3JhbUNsaWVudENvbnRleHQ6OklzQ29ubmVjdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gX2Nvbm5lY3RlZDsKK30KKwordm9pZAorb3Q6OkRhdGFncmFtQ2xpZW50Q29udGV4dDo6T25NZXNzYWdlKAorICAgIERhdGFncmFtU29ja2V0XiAgICAgICAgICAgc29ja2V0LAorICAgIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14gZXZlbnRBcmdzKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgYXV0byBkYXRhUmVhZGVyID0gZXZlbnRBcmdzLT5HZXREYXRhUmVhZGVyKCk7CisgICAgICAgIFJlY2VpdmUoZGF0YVJlYWRlciwgZGF0YVJlYWRlci0+VW5jb25zdW1lZEJ1ZmZlckxlbmd0aCk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgIHsKKyAgICAgICAgYXV0byBzb2NrZXRFcnJvciA9IFNvY2tldEVycm9yOjpHZXRTdGF0dXMoZXgtPkhSZXN1bHQpOworICAgICAgICBpZiAoc29ja2V0RXJyb3IgPT0gU29ja2V0RXJyb3JTdGF0dXM6OkNvbm5lY3Rpb25SZXNldEJ5UGVlcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBlcnJvciB3b3VsZCBpbmRpY2F0ZSB0aGF0IGEgcHJldmlvdXMgc2VuZCBvcGVyYXRpb24gcmVzdWx0ZWQgaW4gYW4gSUNNUCAiUG9ydCBVbnJlYWNoYWJsZSIgbWVzc2FnZS4KKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAiUGVlciBkb2VzIG5vdCBsaXN0ZW4gb24gdGhlIHNwZWNpZmljIHBvcnQuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgcnVuIHN0ZXAgMSBmaXJzdCAiCisgICAgICAgICAgICAgICAgIm9yIHlvdSBoYXZlIGEgc2VydmVyIHByb3Blcmx5IHdvcmtpbmcgb24gYSByZW1vdGUgc2VydmVyLiIsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNvY2tldEVycm9yICE9IFNvY2tldEVycm9yU3RhdHVzOjpVbmtub3duKQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgIkVycm9yIGhhcHBlbmVkIHdoZW4gcmVjZWl2aW5nIGEgZGF0YWdyYW06ICIgKyBzb2NrZXRFcnJvci5Ub1N0cmluZygpLAorICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkCitEYXRhZ3JhbUNsaWVudENvbnRleHQ6OlJlY2VpdmUoCisgICAgRGF0YVJlYWRlcl4gIGRhdGFSZWFkZXIsCisgICAgdW5zaWduZWQgaW50IHN0ckxlbikKK3sKKyAgICBpZiAoIXN0ckxlbikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIG1zZyA9IGRhdGFSZWFkZXItPlJlYWRTdHJpbmcoc3RyTGVuKTsKKyAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlJlY2VpdmVkIGRhdGEgZnJvbSBzZXJ2ZXI6IFwiIiArIG1zZyArICJcIiIsCisgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7Cit9CisKK3ZvaWQKK0RhdGFncmFtQ2xpZW50Q29udGV4dDo6U2VuZE1lc3NhZ2UoCisgICAgRGF0YVdyaXRlcl4gZGF0YVdyaXRlciwKKyAgICBTdHJpbmdeICAgICBtc2cpCit7CisgICAgaWYgKCFJc0Nvbm5lY3RlZCgpKQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJUaGlzIHNvY2tldCBpcyBub3QgeWV0IGNvbm5lY3RlZC4iLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGRhdGFXcml0ZXItPldyaXRlU3RyaW5nKG1zZyk7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiU2VuZGluZyAtICIgKyBtc2csIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTZW5kaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSB0aGUgbG9jYWxseSBidWZmZXJlZCBkYXRhIHRvIHRoZSBuZXR3b3JrLiBQbGVhc2Ugbm90ZSB0aGF0IHdyaXRlIG9wZXJhdGlvbiB3aWxsIHN1Y2NlZWQKKyAgICAvLyBldmVuIGlmIHRoZSBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZy4KKyAgICBjcmVhdGVfdGFzayhkYXRhV3JpdGVyLT5TdG9yZUFzeW5jKCkpLnRoZW4oCisgICAgICAgIFt0aGlzXSh0YXNrPHVuc2lnbmVkIGludD4gd3JpdGVUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHdyaXRlVGFzay5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgeworICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTZW5kIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhV3JpdGVyXgorRGF0YWdyYW1DbGllbnRDb250ZXh0OjpHZXREYXRhV3JpdGVyKCkKK3sKKyAgICBpZiAoX2RhdGFXcml0ZXIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIF9kYXRhV3JpdGVyID0gcmVmIG5ldyBEYXRhV3JpdGVyKF9jbGllbnQtPk91dHB1dFN0cmVhbSk7CisgICAgfQorCisgICAgcmV0dXJuIF9kYXRhV3JpdGVyOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtQ2xpZW50Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1DbGllbnRDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJQ2xpZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIklBc3luY1RocmVhZE5vdGlmeS5oIgorI2luY2x1ZGUgIkNsaWVudEFyZ3MuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgRGF0YWdyYW1DbGllbnRDb250ZXh0IHNlYWxlZCA6IHB1YmxpYyBJQ2xpZW50Q29udGV4dAoreworcHVibGljOgorICAgIHVzaW5nIERhdGFncmFtU29ja2V0ID0gV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czo6RGF0YWdyYW1Tb2NrZXQ7CisKKyAgICBEYXRhZ3JhbUNsaWVudENvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIERhdGFncmFtU29ja2V0XiBjbGllbnQsIENsaWVudEFyZ3NeIGFyZ3MpOworICAgIHZpcnR1YWwgfkRhdGFncmFtQ2xpZW50Q29udGV4dCgpOworCisgICAgdmlydHVhbCB2b2lkIENvbm5lY3RfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIHZpcnR1YWwgdm9pZCBTZW5kX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSwgUGxhdGZvcm06OlN0cmluZ14gaW5wdXQpOworCisgICAgdmlydHVhbCBXaW5kb3dzOjpGb3VuZGF0aW9uOjpJQXN5bmNBY3Rpb25eIENhbmNlbElPKCk7CisKK3ByaXZhdGU6CisgICAgdXNpbmcgTWVzc2FnZVJlY2VpdmVkRXZlbnRBcmdzID0gV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czo6RGF0YWdyYW1Tb2NrZXRNZXNzYWdlUmVjZWl2ZWRFdmVudEFyZ3M7CisgICAgdXNpbmcgTWVzc2FnZUhhbmRsZXIgPSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpUeXBlZEV2ZW50SGFuZGxlcjxEYXRhZ3JhbVNvY2tldF4sIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14+OworICAgIHVzaW5nIERhdGFSZWFkZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhUmVhZGVyOworICAgIHVzaW5nIERhdGFXcml0ZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhV3JpdGVyOworICAgIHVzaW5nIEFyZ3MgPSBDbGllbnRBcmdzOworCisgICAgdm9pZCBTZXRDb25uZWN0ZWQoYm9vbCBjb25uZWN0ZWQpOworICAgIGJvb2wgSXNDb25uZWN0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgT25NZXNzYWdlKERhdGFncmFtU29ja2V0XiBzb2NrZXQsIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14gZXZlbnRBcmdzKTsKKyAgICB2b2lkIFJlY2VpdmUoRGF0YVJlYWRlcl4sIHVuc2lnbmVkIGludCBzdHJMZW4pOworCisgICAgdm9pZCBTZW5kTWVzc2FnZShEYXRhV3JpdGVyXiwgU3RyaW5nXiBtc2cpOworCisgICAgRGF0YVdyaXRlcl4gR2V0RGF0YVdyaXRlcigpOworCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBfbm90aWZ5OworICAgIERhdGFncmFtU29ja2V0XiAgICAgX2NsaWVudDsKKyAgICBBcmdzXiAgICAgICAgICAgICAgIF9hcmdzOworICAgIGJvb2wgICAgICAgICAgICAgICAgX2Nvbm5lY3RlZCA9IGZhbHNlOworICAgIERhdGFSZWFkZXJeICAgICAgICAgX2RhdGFSZWFkZXI7CisgICAgRGF0YVdyaXRlcl4gICAgICAgICBfZGF0YVdyaXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuY3BwIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtTGlzdGVuZXJDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzllOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0RhdGFncmFtTGlzdGVuZXJDb250ZXh0LmNwcApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSAiRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCit1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6RGF0YWdyYW1MaXN0ZW5lckNvbnRleHQoCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksCisgICAgRGF0YWdyYW1Tb2NrZXReICAgICBsaXN0ZW5lciwKKyAgICBMaXN0ZW5lckFyZ3NeICAgICAgIGFyZ3MpIDoKKyAgICBfbm90aWZ5eyBzdGQ6Om1vdmUobm90aWZ5KSB9LAorICAgIF9saXN0ZW5lcnsgc3RkOjptb3ZlKGxpc3RlbmVyKSB9LAorICAgIF9hcmdzeyBzdGQ6Om1vdmUoYXJncykgfQoreworfQorCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6fkRhdGFncmFtTGlzdGVuZXJDb250ZXh0KCkKK3sKKyAgICAvLyBBIExpc3RlbmVyIGNhbiBiZSBjbG9zZWQgaW4gdHdvIHdheXM6CisgICAgLy8gIC0gZXhwbGljaXRseTogdXNpbmcgdGhlICdkZWxldGUnIGtleXdvcmQgKGxpc3RlbmVyIGlzIGNsb3NlZCBldmVuIGlmIHRoZXJlIGFyZSBvdXRzdGFuZGluZyByZWZlcmVuY2VzIHRvIGl0KS4KKyAgICAvLyAgLSBpbXBsaWNpdGx5OiByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gaXQgKGkuZS4sIGZhbGxpbmcgb3V0LW9mLXNjb3BlKS4KKyAgICAvLworICAgIC8vIFdoZW4gYSBTb2NrZXQgaXMgY2xvc2VkIGltcGxpY2l0bHksIGl0IGNhbiB0YWtlIHNldmVyYWwgc2Vjb25kcyBmb3IgdGhlIGxvY2FsIHBvcnQgYmVpbmcgdXNlZAorICAgIC8vIGJ5IGl0IHRvIGJlIGZyZWVkL3JlY2xhaW1lZCBieSB0aGUgbG93ZXIgbmV0d29ya2luZyBsYXllcnMuIER1cmluZyB0aGF0IHRpbWUsIG90aGVyIHNvY2tldHMgb24gdGhlIG1hY2hpbmUKKyAgICAvLyB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSB0aGUgcG9ydC4gVGh1cywgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBTb2NrZXQgaW5zdGFuY2VzIGJlIGV4cGxpY2l0bHkKKyAgICAvLyBjbG9zZWQgYmVmb3JlIHRoZXkgZ28gb3V0IG9mIHNjb3BlKGUuZy4sIGJlZm9yZSBhcHBsaWNhdGlvbiBleGl0KS4gVGhlIGNhbGwgYmVsb3cgZXhwbGljaXRseSBjbG9zZXMgdGhlIHNvY2tldC4KKyAgICBpZiAoX2xpc3RlbmVyICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBkZWxldGUgX2xpc3RlbmVyOworICAgICAgICBfbGlzdGVuZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZAorRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQ6Okxpc3Rlbl9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgdGFzazx2b2lkPiByZW1vdmVDb250ZXh0OworCisgICAgaWYgKENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SGFzS2V5KCJsaXN0ZW5lckNvbnRleHQiKSkKKyAgICB7CisgICAgICAgIGF1dG8gbGlzdGVuZXJDb250ZXh0ID0gZHluYW1pY19jYXN0PElMaXN0ZW5lckNvbnRleHRePigKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+TG9va3VwKCJsaXN0ZW5lckNvbnRleHQiKSk7CisgICAgICAgIGlmIChsaXN0ZW5lckNvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gbGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2sobGlzdGVuZXJDb250ZXh0LT5DYW5jZWxJTygpKS50aGVuKAorICAgICAgICAgICAgW10oKQorICAgICAgICB7CisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgibGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgX2xpc3RlbmVyLT5NZXNzYWdlUmVjZWl2ZWQgKz0gcmVmIG5ldyBNZXNzYWdlSGFuZGxlcigKKyAgICAgICAgdGhpcywgJkRhdGFncmFtTGlzdGVuZXJDb250ZXh0OjpPbk1lc3NhZ2UpOworCisgICAgcmVtb3ZlQ29udGV4dC50aGVuKFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworCisgICAgICAgICAgICAvLyBFdmVudHMgY2Fubm90IGJlIGhvb2tlZCB1cCBkaXJlY3RseSB0byB0aGUgU2NlbmFyaW9JbnB1dDEgb2JqZWN0LCBhcyB0aGUgb2JqZWN0IGNhbiBmYWxsIG91dC1vZi1zY29wZSBhbmQgYmUKKyAgICAgICAgICAgIC8vIGRlbGV0ZWQuIFRoaXMgd291bGQgcmVuZGVyIGFueSBldmVudCBob29rZWQgdXAgdG8gdGhlIG9iamVjdCBpbmVmZmVjdGl2ZS4gVGhlIExpc3RlbmVyQ29udGV4dCBndWFyYW50ZWVzIHRoYXQKKyAgICAgICAgICAgIC8vIGJvdGggdGhlIGxpc3RlbmVyIGFuZCBvYmplY3QgdGhhdCBzZXJ2ZXMgaXRzIGV2ZW50cyBoYXZlIHRoZSBzYW1lIGxpZmV0aW1lLgorICAgICAgICAgICAgQ29yZUFwcGxpY2F0aW9uOjpQcm9wZXJ0aWVzLT5JbnNlcnQoImxpc3RlbmVyQ29udGV4dCIsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgIlJlbW92ZSBsaXN0ZW5lckNvbnRleHQgZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKHRhc2tfY2FuY2VsZWQmKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9KS50aGVuKFt0aGlzXSgpCisgICAgeworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlN0YXJ0IGxpc3RlbmluZyIsIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisKKyAgICAgICAgY3JlYXRlX3Rhc2soX2xpc3RlbmVyLT5CaW5kRW5kcG9pbnRBc3luYyhfYXJncy0+U2VydmVySG9zdE5hbWUsIF9hcmdzLT5TZXJ2ZXJQb3J0KSkudGhlbigKKyAgICAgICAgICAgIFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgICAgICB7CisgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgcHJldlRhc2suZ2V0KCk7CisgICAgICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgICAgICAgICAiTGlzdGVuaW5nIG9uIGFkZHJlc3MgIiArIF9hcmdzLT5TZXJ2ZXJIb3N0TmFtZS0+Q2Fub25pY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIlN0YXJ0IGxpc3RlbmluZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgICAgICAgICAgQ29yZUFwcGxpY2F0aW9uOjpQcm9wZXJ0aWVzLT5SZW1vdmUoImxpc3RlbmVyQ29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKworSUFzeW5jQWN0aW9uXgorRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQ6OkNhbmNlbElPKCkKK3sKKyAgICByZXR1cm4gX2xpc3RlbmVyLT5DYW5jZWxJT0FzeW5jKCk7Cit9CisKK3ZvaWQKK0RhdGFncmFtTGlzdGVuZXJDb250ZXh0OjpPbk1lc3NhZ2UoCisgICAgRGF0YWdyYW1Tb2NrZXReICAgICAgICAgICBzb2NrZXQsCisgICAgTWVzc2FnZVJlY2VpdmVkRXZlbnRBcmdzXiBldmVudEFyZ3MpCit7CisgICAgaWYgKF9vdXRwdXRTdHJlYW0gIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGF1dG8gZGF0YVJlYWRlciA9IGV2ZW50QXJncy0+R2V0RGF0YVJlYWRlcigpOworICAgICAgICBSZWNlaXZlKGRhdGFSZWFkZXIsIGRhdGFSZWFkZXItPlVuY29uc3VtZWRCdWZmZXJMZW5ndGgsIEdldERhdGFXcml0ZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3QgaGF2ZSBhbiBvdXRwdXQgc3RyZWFtIHlldCBzbyBjcmVhdGUgb25lLgorICAgIGNyZWF0ZV90YXNrKHNvY2tldC0+R2V0T3V0cHV0U3RyZWFtQXN5bmMoZXZlbnRBcmdzLT5SZW1vdGVBZGRyZXNzLCBldmVudEFyZ3MtPlJlbW90ZVBvcnQpKS50aGVuKAorICAgICAgICBbdGhpcywgc29ja2V0LCBldmVudEFyZ3NdKElPdXRwdXRTdHJlYW1eIHN0cmVhbSkKKyAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxtdXRleF90PiBsb2NrKF9tdHgpOworCisgICAgICAgICAgICAvLyBJdCBtaWdodCBoYXBwZW4gdGhhdCB0aGUgT25NZXNzYWdlIHdhcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSB0aGUgR2V0T3V0cHV0U3RyZWFtQXN5bmMgY2FsbAorICAgICAgICAgICAgLy8gY29tcGxldGVkLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCBlbmQgdXAgd2l0aCBtdWx0aXBsZSBzdHJlYW1zIC0ganVzdCBrZWVwIG9uZSBvZiB0aGVtLgorICAgICAgICAgICAgaWYgKF9vdXRwdXRTdHJlYW0gPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfb3V0cHV0U3RyZWFtID0gc3RyZWFtOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byBkYXRhUmVhZGVyID0gZXZlbnRBcmdzLT5HZXREYXRhUmVhZGVyKCk7CisgICAgICAgIFJlY2VpdmUoZGF0YVJlYWRlciwgZGF0YVJlYWRlci0+VW5jb25zdW1lZEJ1ZmZlckxlbmd0aCwgR2V0RGF0YVdyaXRlcigpKTsKKyAgICB9KS50aGVuKFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFsbCBleGNlcHRpb25zIGZyb20gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbiBhYm92ZSB0aGlzIHBvaW50LgorICAgICAgICAgICAgcHJldlRhc2suZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiT24gbWVzc2FnZSB3aXRoIGFuIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG8gbm90IHByaW50IGFueXRoaW5nIGhlcmUgLSB0aGlzIHdpbGwgdXN1YWxseSBoYXBwZW4gYmVjYXVzZSB1c2VyIGNsb3NlZCB0aGUgY2xpZW50IHNvY2tldC4KKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6UmVjZWl2ZSgKKyAgICBEYXRhUmVhZGVyXiAgZGF0YVJlYWRlciwKKyAgICB1bnNpZ25lZCBpbnQgc3RyTGVuLAorICAgIERhdGFXcml0ZXJeICBkYXRhV3JpdGVyKQoreworICAgIGlmICghc3RyTGVuKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbXNnID0gZGF0YVJlYWRlci0+UmVhZFN0cmluZyhzdHJMZW4pOworICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiUmVjZWl2ZWQgZGF0YSBmcm9tIGNsaWVudDogXCIiICsgbXNnICsgIlwiIiwKKyAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKyAgICBhdXRvIGVjaG8gPSBDcmVhdGVFY2hvTWVzc2FnZShtc2cpOworICAgIEVjaG9NZXNzYWdlKGRhdGFXcml0ZXIsIGVjaG8pOworfQorCitTdHJpbmdeCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6Q3JlYXRlRWNob01lc3NhZ2UoCisgICAgU3RyaW5nXiBtc2cpCit7CisgICAgd2NoYXJfdCBidWZbMjU2XTsKKyAgICBhdXRvIGxlbiA9IHN3cHJpbnRmX3MoYnVmLCBMIlNlcnZlciVzIHJlY2VpdmVkIGRhdGEgZnJvbSBjbGllbnQgOiBcIiVzXCIiLAorICAgICAgICBfYXJncy0+U2VydmVyTmFtZS0+SXNFbXB0eSgpID8gTCIiIDogKCIgIiArIF9hcmdzLT5TZXJ2ZXJOYW1lKS0+RGF0YSgpLCBtc2ctPkRhdGEoKSk7CisKKyAgICBsZW4gKz0gc3dwcmludGZfcygmYnVmW2xlbl0sIF9jb3VudG9mKGJ1ZikgLSBsZW4sIEwiIC0gZ290ICVkIGNoYXJzIiwKKyAgICAgICAgbXNnLT5MZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKGJ1Zik7Cit9CisKK3ZvaWQKK0RhdGFncmFtTGlzdGVuZXJDb250ZXh0OjpFY2hvTWVzc2FnZSgKKyAgICBEYXRhV3JpdGVyXiBkYXRhV3JpdGVyLAorICAgIFN0cmluZ14gICAgIGVjaG8pCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBkYXRhV3JpdGVyLT5Xcml0ZVN0cmluZyhlY2hvKTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgeworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIkVjaG9pbmcgZmFpbGVkIHdpdGggZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKyAgICB9CisKKyAgICBjcmVhdGVfdGFzayhkYXRhV3JpdGVyLT5TdG9yZUFzeW5jKCkpLnRoZW4oCisgICAgICAgIFt0aGlzXSh0YXNrPHVuc2lnbmVkIGludD4gd3JpdGVUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFsbCBleGNlcHRpb25zIGZyb20gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbiBhYm92ZSB0aGlzIHBvaW50LgorICAgICAgICAgICAgd3JpdGVUYXNrLmdldCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIkVjaG8gbWVzc2FnZSB3aXRoIGFuIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK1dpbmRvd3M6OlN0b3JhZ2U6OlN0cmVhbXM6OkRhdGFXcml0ZXJeCitEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dDo6R2V0RGF0YVdyaXRlcigpCit7CisgICAgaWYgKF9kYXRhV3JpdGVyID09IG51bGxwdHIpCisgICAgeworICAgICAgICBfZGF0YVdyaXRlciA9IHJlZiBuZXcgRGF0YVdyaXRlcihfb3V0cHV0U3RyZWFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gX2RhdGFXcml0ZXI7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9EYXRhZ3JhbUxpc3RlbmVyQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODY5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgIklMaXN0ZW5lckNvbnRleHQuaCIKKyNpbmNsdWRlICJJQXN5bmNUaHJlYWROb3RpZnkuaCIKKyNpbmNsdWRlICJMaXN0ZW5lckFyZ3MuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQgc2VhbGVkIDogcHVibGljIElMaXN0ZW5lckNvbnRleHQKK3sKK3B1YmxpYzoKKyAgICB1c2luZyBEYXRhZ3JhbVNvY2tldCA9IFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM6OkRhdGFncmFtU29ja2V0OworCisgICAgRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIERhdGFncmFtU29ja2V0XiBsaXN0ZW5lciwgTGlzdGVuZXJBcmdzXiBhcmdzKTsKKyAgICB2aXJ0dWFsIH5EYXRhZ3JhbUxpc3RlbmVyQ29udGV4dCgpOworCisgICAgdmlydHVhbCB2b2lkIExpc3Rlbl9DbGljayhQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgdmlydHVhbCBXaW5kb3dzOjpGb3VuZGF0aW9uOjpJQXN5bmNBY3Rpb25eIENhbmNlbElPKCk7CisKK3ByaXZhdGU6CisgICAgdXNpbmcgTWVzc2FnZVJlY2VpdmVkRXZlbnRBcmdzID0gV2luZG93czo6TmV0d29ya2luZzo6U29ja2V0czo6RGF0YWdyYW1Tb2NrZXRNZXNzYWdlUmVjZWl2ZWRFdmVudEFyZ3M7CisgICAgdXNpbmcgTWVzc2FnZUhhbmRsZXIgPSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpUeXBlZEV2ZW50SGFuZGxlcjxEYXRhZ3JhbVNvY2tldF4sIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14+OworICAgIHVzaW5nIERhdGFSZWFkZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhUmVhZGVyOworICAgIHVzaW5nIERhdGFXcml0ZXIgPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpEYXRhV3JpdGVyOworICAgIHVzaW5nIElPdXRwdXRTdHJlYW0gPSBXaW5kb3dzOjpTdG9yYWdlOjpTdHJlYW1zOjpJT3V0cHV0U3RyZWFtOworICAgIHVzaW5nIExpc3RlbmVyID0gRGF0YWdyYW1Tb2NrZXQ7CisgICAgdXNpbmcgQXJncyA9IExpc3RlbmVyQXJnczsKKyAgICB1c2luZyBtdXRleF90ID0gc3RkOjptdXRleDsKKworICAgIHZvaWQgT25NZXNzYWdlKERhdGFncmFtU29ja2V0XiBzb2NrZXQsIE1lc3NhZ2VSZWNlaXZlZEV2ZW50QXJnc14gZXZlbnRBcmdzKTsKKyAgICB2b2lkIFJlY2VpdmUoRGF0YVJlYWRlcl4sIHVuc2lnbmVkIGludCBzdHJMZW4sIERhdGFXcml0ZXJeKTsKKyAgICBTdHJpbmdeIENyZWF0ZUVjaG9NZXNzYWdlKFN0cmluZ14gbXNnKTsKKyAgICB2b2lkIEVjaG9NZXNzYWdlKERhdGFXcml0ZXJeLCBTdHJpbmdeIGVjaG8pOworCisgICAgRGF0YVdyaXRlcl4gR2V0RGF0YVdyaXRlcigpOworCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBfbm90aWZ5OworICAgIExpc3RlbmVyXiAgICAgICAgICAgX2xpc3RlbmVyOworICAgIEFyZ3NeICAgICAgICAgICAgICAgX2FyZ3M7CisgICAgRGF0YVdyaXRlcl4gICAgICAgICBfZGF0YVdyaXRlcjsKKworICAgIG11dGFibGUgbXV0ZXhfdCBfbXR4OworICAgIC8vIG11dGV4IHByb3RlY3RlZCBkYXRhCisgICAgSU91dHB1dFN0cmVhbV4gIF9vdXRwdXRTdHJlYW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0ZhY3RvcnkuY3BwIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0ZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDdhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRmFjdG9yeS5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgIkZhY3RvcnkuaCIKKyNpbmNsdWRlICJTdHJlYW1MaXN0ZW5lckNvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhZ3JhbUxpc3RlbmVyQ29udGV4dC5oIgorI2luY2x1ZGUgIlN0cmVhbUNsaWVudENvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhZ3JhbUNsaWVudENvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCit1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCitJTGlzdGVuZXJDb250ZXh0XgorRmFjdG9yeTo6Q3JlYXRlTGlzdGVuZXJDb250ZXh0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LAorICAgIExpc3RlbmVyQXJnc14gICAgICAgbGlzdGVuZXJBcmdzLAorICAgIFByb3RvY29sICAgICAgICAgICAgcHJvdG9jb2wpCit7CisgICAgaWYgKHByb3RvY29sID09IFByb3RvY29sOjpUQ1ApCisgICAgeworICAgICAgICBhdXRvIGxpc3RlbmVyID0gcmVmIG5ldyBTdHJlYW1Tb2NrZXRMaXN0ZW5lcigpOworICAgICAgICByZXR1cm4gcmVmIG5ldyBTdHJlYW1MaXN0ZW5lckNvbnRleHQobm90aWZ5LCBsaXN0ZW5lciwgbGlzdGVuZXJBcmdzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IHJlZiBuZXcgRGF0YWdyYW1Tb2NrZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgRGF0YWdyYW1MaXN0ZW5lckNvbnRleHQobm90aWZ5LCBsaXN0ZW5lciwgbGlzdGVuZXJBcmdzKTsKKyAgICB9Cit9CisKK0lDbGllbnRDb250ZXh0XgorRmFjdG9yeTo6Q3JlYXRlQ2xpZW50Q29udGV4dCgKKyAgICBJQXN5bmNUaHJlYWROb3RpZnleIG5vdGlmeSwKKyAgICBDbGllbnRBcmdzXiAgICAgICAgIGNsaWVudEFyZ3MsCisgICAgUHJvdG9jb2wgICAgICAgICAgICBwcm90b2NvbCkKK3sKKyAgICBpZiAocHJvdG9jb2wgPT0gUHJvdG9jb2w6OlRDUCkKKyAgICB7CisgICAgICAgIGF1dG8gY2xpZW50ID0gcmVmIG5ldyBTdHJlYW1Tb2NrZXQoKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyZWFtQ2xpZW50Q29udGV4dChub3RpZnksIGNsaWVudCwgY2xpZW50QXJncyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGF1dG8gY2xpZW50ID0gcmVmIG5ldyBEYXRhZ3JhbVNvY2tldCgpOworICAgICAgICByZXR1cm4gcmVmIG5ldyBEYXRhZ3JhbUNsaWVudENvbnRleHQobm90aWZ5LCBjbGllbnQsIGNsaWVudEFyZ3MpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9GYWN0b3J5LmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZGVhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvRmFjdG9yeS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSUFzeW5jVGhyZWFkTm90aWZ5LmgiCisjaW5jbHVkZSAiTGlzdGVuZXJBcmdzLmgiCisjaW5jbHVkZSAiSUxpc3RlbmVyQ29udGV4dC5oIgorI2luY2x1ZGUgIkNsaWVudEFyZ3MuaCIKKyNpbmNsdWRlICJJQ2xpZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlByb3RvY29sLmgiCisKK25hbWVzcGFjZSBvdAoreworCitjbGFzcyBGYWN0b3J5Cit7CitwdWJsaWM6CisgICAgc3RhdGljIElMaXN0ZW5lckNvbnRleHReIENyZWF0ZUxpc3RlbmVyQ29udGV4dChJQXN5bmNUaHJlYWROb3RpZnleLCBMaXN0ZW5lckFyZ3NeLCBQcm90b2NvbCk7CisKKyAgICBzdGF0aWMgSUNsaWVudENvbnRleHReIENyZWF0ZUNsaWVudENvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiwgQ2xpZW50QXJnc14sIFByb3RvY29sKTsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvSUFzeW5jVGhyZWFkTm90aWZ5LmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvSUFzeW5jVGhyZWFkTm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzYzkwMAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JQXN5bmNUaHJlYWROb3RpZnkuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyBlbnVtIGNsYXNzIE5vdGlmeVR5cGUKK3sKKyAgICBTdGF0dXMsCisgICAgRXJyb3IsCit9OworCitwdWJsaWMgaW50ZXJmYWNlIHN0cnVjdCBJQXN5bmNUaHJlYWROb3RpZnkKK3sKKyAgICB2b2lkIE5vdGlmeUZyb21Bc3luY1RocmVhZChQbGF0Zm9ybTo6U3RyaW5nXiBtZXNzYWdlLCBOb3RpZnlUeXBlIHR5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JQ2xpZW50Q29udGV4dC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lDbGllbnRDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjOTQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JQ2xpZW50Q29udGV4dC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ugb3QKK3sKKyAgICAKK3B1YmxpYyBpbnRlcmZhY2Ugc3RydWN0IElDbGllbnRDb250ZXh0Cit7CisgICAgdm9pZCBDb25uZWN0X0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2b2lkIFNlbmRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlLCBQbGF0Zm9ybTo6U3RyaW5nXiBpbnB1dCk7CisKKyAgICBXaW5kb3dzOjpGb3VuZGF0aW9uOjpJQXN5bmNBY3Rpb25eIENhbmNlbElPKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lMaXN0ZW5lckNvbnRleHQuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JTGlzdGVuZXJDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjYjg5YQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9JTGlzdGVuZXJDb250ZXh0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBvdAoreworCitwdWJsaWMgaW50ZXJmYWNlIHN0cnVjdCBJTGlzdGVuZXJDb250ZXh0Cit7CisgICAgdm9pZCBMaXN0ZW5fQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIFdpbmRvd3M6OkZvdW5kYXRpb246OklBc3luY0FjdGlvbl4gQ2FuY2VsSU8oKTsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvSU1haW5QYWdlVUlFbGVtZW50cy5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lNYWluUGFnZVVJRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2NkNDZmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL0lNYWluUGFnZVVJRWxlbWVudHMuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyBpbnRlcmZhY2Ugc3RydWN0IElNYWluUGFnZVVJRWxlbWVudHMKK3sKKyAgICBwcm9wZXJ0eSBXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XiBUaHJlYWRHcmlkCisgICAgeworICAgICAgICBXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XiBnZXQoKTsKKyAgICB9CisgICAgCisgICAgcHJvcGVydHkgV2luZG93czo6VUk6OlhhbWw6OlVJRWxlbWVudF4gVGFsa0dyaWQKKyAgICB7CisgICAgICAgIFdpbmRvd3M6OlVJOjpYYW1sOjpVSUVsZW1lbnReIGdldCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTGlzdGVuZXJBcmdzLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTGlzdGVuZXJBcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwYzAxNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9MaXN0ZW5lckFyZ3MuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyByZWYgY2xhc3MgTGlzdGVuZXJBcmdzIHNlYWxlZAoreworcHVibGljOgorICAgIHByb3BlcnR5IFBsYXRmb3JtOjpTdHJpbmdeICAgICAgICAgICAgICBTZXJ2ZXJOYW1lOworICAgIHByb3BlcnR5IFdpbmRvd3M6Ok5ldHdvcmtpbmc6Okhvc3ROYW1lXiBTZXJ2ZXJIb3N0TmFtZTsKKyAgICBwcm9wZXJ0eSBQbGF0Zm9ybTo6U3RyaW5nXiAgICAgICAgICAgICAgU2VydmVyUG9ydDsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjFlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbApAQCAtMCwwICsxLDMwNyBAQAor77u/PCEtLQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzxQYWdlCisgICAgeDpDbGFzcz0ib3QuTWFpblBhZ2UiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9leHByZXNzaW9uL2JsZW5kLzIwMDgiCisgICAgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IgorICAgIElzVGFiU3RvcD0iZmFsc2UiCisgICAgbWM6SWdub3JhYmxlPSJkIj4KKworICAgIDxHcmlkPgorICAgICAgICA8R3JpZC5CYWNrZ3JvdW5kPgorICAgICAgICAgICAgPEltYWdlQnJ1c2ggSW1hZ2VTb3VyY2U9Im1zLWFwcHg6Ly8vQXNzZXRzL1dpZGUzMTB4MTUwTG9nby5wbmciIE9wYWNpdHk9IjAuMjUiIFN0cmV0Y2g9IlVuaWZvcm0iLz4KKyAgICAgICAgPC9HcmlkLkJhY2tncm91bmQ+CisgICAgICAgIDwhLS0gSW50ZXJmYWNlIExpc3QgLS0+CisgICAgICAgIDxHcmlkCisgICAgICAgICAgICB4Ok5hbWU9IlRocmRHcmlkIgorICAgICAgICAgICAgPgorICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgIFRleHQ9IlRocmVhZCBVWCIgCisgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEFsaWdubWVudD0iTGVmdCIgCisgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IlRvcCIgCisgICAgICAgICAgICAgICAgTWFyZ2luPSIyMCIgCisgICAgICAgICAgICAgICAgRm9udFNpemU9IjUwIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgIE9yaWVudGF0aW9uPSJIb3Jpem9udGFsIgorICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgVGV4dD0iSW50ZXJmYWNlcyIgCisgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiIAorICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iVG9wIiAKKyAgICAgICAgICAgICAgICAgICAgTWFyZ2luPSI2MCw5MCIgCisgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyNSIKKyAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICA8QnV0dG9uCisgICAgICAgICAgICAgICAgICAgIHg6TmFtZT0iVGFsayIKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudD0iVGFsayIKKyAgICAgICAgICAgICAgICAgICAgTWFyZ2luPSIxMCwwIgorICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgPC9TdGFja1BhbmVsPgorICAgICAgICAgICAgPExpc3RWaWV3CisgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlTGlzdCIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjYwLDEzMCwyMCwxNTAiCisgICAgICAgICAgICAgICAgU2VsZWN0aW9uTW9kZT0iTm9uZSI+CisgICAgICAgICAgICA8L0xpc3RWaWV3PgorCisgICAgICAgICAgICA8IS0tIEludGVyZmFjZSBDb25maWd1cmF0aW9uIC0tPgorICAgICAgICAgICAgPEdyaWQgCisgICAgICAgICAgICAgICAgeDpOYW1lPSJJbnRlcmZhY2VDb25maWd1cmF0aW9uIiAKKyAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSIjQjJGRkZGRkYiCisgICAgICAgICAgICAgICAgVmlzaWJpbGl0eT0iQ29sbGFwc2VkIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSJ7U3RhdGljUmVzb3VyY2UgQXBwbGljYXRpb25QYWdlQmFja2dyb3VuZFRoZW1lQnJ1c2h9IgorICAgICAgICAgICAgICAgICAgICBXaWR0aD0iNjAwIiAKKyAgICAgICAgICAgICAgICAgICAgSGVpZ2h0PSIzNjAiIAorICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiIAorICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IkludGVyZmFjZSBDb25maWd1cmF0aW9uIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiIAorICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IlRvcCIgCisgICAgICAgICAgICAgICAgICAgICAgICBNYXJnaW49IjIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyNSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDxHcmlkIE1hcmdpbj0iNDAsMTAiPgorICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IjIwMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb2x1bW5EZWZpbml0aW9uIFdpZHRoPSIqIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iNTAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEJveAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IkludGVyZmFjZUNvbmZpZ05hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iVGVzdCBOZXR3b3JrIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIxOCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IktleSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0Qm94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlQ29uZmlnS2V5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IjAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIxOCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik1heCBDaGlsZHJlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTbGlkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDb25maWdNYXhDaGlsZHJlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtPSIwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heGltdW09IjMyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlPSIxNiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iQ2hhbm5lbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTbGlkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDb25maWdDaGFubmVsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSIzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW09IjExIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heGltdW09IjI0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlPSIxMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSI1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uU3Bhbj0iMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50YXRpb249Ikhvcml6b250YWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlQ29uZmlnT2tCdXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ9Ik9rIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJnaW49IjIwLDAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDb25maWdDYW5jZWxCdXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ9IkNhbmNlbCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyZ2luPSIyMCwwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhbmVsPgorICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+CisgICAgICAgICAgICAgICAgPC9TdGFja1BhbmVsPgorICAgICAgICAgICAgPC9HcmlkPgorCisgICAgICAgICAgICA8IS0tIEludGVyZmFjZSBEZXRhaWxzIC0tPgorICAgICAgICAgICAgPEdyaWQgCisgICAgICAgICAgICAgICAgeDpOYW1lPSJJbnRlcmZhY2VEZXRhaWxzIiAKKyAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSIjQjJGRkZGRkYiCisgICAgICAgICAgICAgICAgVmlzaWJpbGl0eT0iQ29sbGFwc2VkIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kPSJ7U3RhdGljUmVzb3VyY2UgQXBwbGljYXRpb25QYWdlQmFja2dyb3VuZFRoZW1lQnJ1c2h9IgorICAgICAgICAgICAgICAgICAgICBXaWR0aD0iNjAwIiAKKyAgICAgICAgICAgICAgICAgICAgSGVpZ2h0PSI0MDUiIAorICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiIAorICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IkludGVyZmFjZSBEZXRhaWxzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiIAorICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IlRvcCIgCisgICAgICAgICAgICAgICAgICAgICAgICBNYXJnaW49IjIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyNSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDxHcmlkIE1hcmdpbj0iNDAsMCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW5EZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29sdW1uRGVmaW5pdGlvbiBXaWR0aD0iMjAwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IioiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW5EZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxHcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iNTAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iNTAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjUwIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSI1MCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik1BQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VNYWNBZGRyZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9IjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIxOCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik1MLUVJRCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VNTF9FSUQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iOjowMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMTgiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0PSJSTE9DIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyaWQuUm93PSIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRTaXplPSIyMiIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljYWxBbGlnbm1lbnQ9IkNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IkludGVyZmFjZVJMT0MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iOjowMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMTgiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VOZWlnaGJvcnNUZXh0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQ9Ik5laWdoYm9ycyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VOZWlnaGJvcnMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iMyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VDaGlsZHJlblRleHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iQ2hpbGRyZW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iQ2VudGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iSW50ZXJmYWNlQ2hpbGRyZW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dD0iMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLlJvdz0iNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250U2l6ZT0iMjIiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJJbnRlcmZhY2VEZXRhaWxzQ2xvc2VCdXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Sb3c9IjYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZC5Db2x1bW5TcGFuPSIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ9IkNsb3NlIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsQWxpZ25tZW50PSJDZW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFNpemU9IjIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvR3JpZD4KKyAgICAgICAgICAgICAgICA8L1N0YWNrUGFuZWw+CisgICAgICAgICAgICA8L0dyaWQ+CisgICAgICAgIDwvR3JpZD4KKyAgICAgICAgPGxvY2FsOlRhbGtHcmlkCisgICAgICAgICAgICB4Ok5hbWU9IlRsa0dyaWQiCisgICAgICAgICAgICBNYXJnaW49IjIwIgorICAgICAgICAgICAgVmlzaWJpbGl0eT0iQ29sbGFwc2VkIgorICAgICAgICAgICAgLz4KKyAgICA8L0dyaWQ+Cis8L1BhZ2U+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbC5jcHAgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvTWFpblBhZ2UueGFtbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3MzJkZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sLmNwcApAQCAtMCwwICsxLDQxOSBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgIk1haW5QYWdlLnhhbWwuaCIKKyNpbmNsdWRlICJUYWxrR3JpZC54YW1sLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb247Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjo6Q29sbGVjdGlvbnM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCisjZGVmaW5lIEdVSURfRk9STUFUIEwieyUwOGxYLSUwNGhYLSUwNGhYLSUwMmhoWCUwMmhoWC0lMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFh9IgorI2RlZmluZSBHVUlEX0FSRyhndWlkKSBndWlkLkRhdGExLCBndWlkLkRhdGEyLCBndWlkLkRhdGEzLCBndWlkLkRhdGE0WzBdLCBndWlkLkRhdGE0WzFdLCBndWlkLkRhdGE0WzJdLCBndWlkLkRhdGE0WzNdLCBndWlkLkRhdGE0WzRdLCBndWlkLkRhdGE0WzVdLCBndWlkLkRhdGE0WzZdLCBndWlkLkRhdGE0WzddCisKK3ZvaWQgb3RMb2coUENTVFIgYUZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKworICAgIENIQVIgbG9nU3RyaW5nWzUxMl0gPSB7IDAgfTsKKyAgICBpbnQgY2hhcnNXcml0dGVuID0gdnNwcmludGZfcyhsb2dTdHJpbmcsIHNpemVvZihsb2dTdHJpbmcpLCBhRm9ybWF0LCBhcmdzKTsKKyAgICBpZiAoY2hhcnNXcml0dGVuID4gMCkgT3V0cHV0RGVidWdTdHJpbmdBKGxvZ1N0cmluZyk7CisKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK01haW5QYWdlOjpNYWluUGFnZSgpIDogX290QXBpKG51bGxwdHIpCit7CisgICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOworCisgICAgSW50ZXJmYWNlQ29uZmlnQ2FuY2VsQnV0dG9uLT5DbGljayArPQorICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgIHRoaXMtPkludGVyZmFjZUNvbmZpZ3VyYXRpb24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgIHRoaXMtPl9jdXJBZGFwdGVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICApOworICAgIEludGVyZmFjZUNvbmZpZ09rQnV0dG9uLT5DbGljayArPQorICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgIHRoaXMtPkludGVyZmFjZUNvbmZpZ3VyYXRpb24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgIHRoaXMtPkNvbm5lY3ROZXR3b3JrKF9jdXJBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5fY3VyQWRhcHRlciA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgKTsKKyAgICBJbnRlcmZhY2VEZXRhaWxzQ2xvc2VCdXR0b24tPkNsaWNrICs9CisgICAgICAgIHJlZiBuZXcgUm91dGVkRXZlbnRIYW5kbGVyKAorICAgICAgICAgICAgWz1dKFBsYXRmb3JtOjpPYmplY3ReLCBSb3V0ZWRFdmVudEFyZ3NeKSB7CisgICAgICAgICAgICAgICAgdGhpcy0+SW50ZXJmYWNlRGV0YWlscy0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgICAgICAgICB9CisgICAgKTsKKyAgICBUYWxrLT5DbGljayArPQorICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgIHRoaXMtPlRocmVhZEdyaWQtPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgIHRoaXMtPlRhbGtHcmlkLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICB9CisgICAgKTsKKworICAgIFRsa0dyaWQtPkluaXQodGhpcyk7Cit9CisKK3ZvaWQgTWFpblBhZ2U6Ok9uTmF2aWdhdGVkVG8oTmF2aWdhdGlvbkV2ZW50QXJnc14gZSkKK3sKKyAgICBMb2FkZWQgKz0gcmVmIG5ldyBSb3V0ZWRFdmVudEhhbmRsZXIodGhpcywgJk1haW5QYWdlOjpPbkxvYWRlZCk7CisgICAgVW5sb2FkZWQgKz0gcmVmIG5ldyBSb3V0ZWRFdmVudEhhbmRsZXIodGhpcywgJk1haW5QYWdlOjpPblVubG9hZGVkKTsKK30KKwordm9pZCBNYWluUGFnZTo6T25Mb2FkZWQoT2JqZWN0XiBzZW5kZXIsIFJvdXRlZEV2ZW50QXJnc14gZSkKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgYXBpIGhhbmRsZQorICAgICAgICBfb3RBcGkgPSByZWYgbmV3IG90QXBpKCk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIHN0YXRlIGNoYW5nZXMKKyAgICAgICAgX2FkYXB0ZXJBcnJpdmFsVG9rZW4gPQorICAgICAgICAgICAgX290QXBpLT5BZGFwdGVyQXJyaXZhbCArPQorICAgICAgICAgICAgICAgIHJlZiBuZXcgb3RBZGFwdGVyQXJyaXZhbERlbGVnYXRlKAorICAgICAgICAgICAgICAgICAgICBbPV0ob3RBZGFwdGVyXiBhZGFwdGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb24gdGhlIFVJIHRocmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlzcGF0Y2hlci0+UnVuQXN5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93czo6VUk6OkNvcmU6OkNvcmVEaXNwYXRjaGVyUHJpb3JpdHk6Ok5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgbmV3IFdpbmRvd3M6OlVJOjpDb3JlOjpEaXNwYXRjaGVkSGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QWRkQWRhcHRlclRvTGlzdChhZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIEVudW1lcmF0ZSB0aGUgYWRhcHRlciBsaXN0CisgICAgICAgIGF1dG8gYWRhcHRlcnMgPSBfb3RBcGktPkdldEFkYXB0ZXJzKCk7CisgICAgICAgIGZvciAoYXV0byYmIGFkYXB0ZXIgOiBhZGFwdGVycykgeworICAgICAgICAgICAgQWRkQWRhcHRlclRvTGlzdChhZGFwdGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXikKKyAgICB7CisgICAgfQorfQorCit2b2lkIE1haW5QYWdlOjpPblVubG9hZGVkKE9iamVjdF4gc2VuZGVyLCBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgaWYgKF9vdEFwaSkKKyAgICB7CisgICAgICAgIC8vIFVucmVnaXN0ZXIKKyAgICAgICAgX290QXBpLT5BZGFwdGVyQXJyaXZhbCAtPSBfYWRhcHRlckFycml2YWxUb2tlbjsKKworICAgICAgICAvLyBDbGVhciBjdXJyZW50IGFkYXB0ZXIKKyAgICAgICAgX2N1ckFkYXB0ZXIgPSBudWxscHRyOworCisgICAgICAgIC8vIFJlbW92ZSB0aGUgYWRhcHRlciBsaXN0CisgICAgICAgIGF1dG8gYWRhcHRlcnMgPSBfb3RBcGktPkdldEFkYXB0ZXJzKCk7CisgICAgICAgIGZvciAoYXV0byYmIGFkYXB0ZXIgOiBhZGFwdGVycykgeworICAgICAgICAgICAgYWRhcHRlci0+SW52b2tlQWRhcHRlclJlbW92YWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZyZWUgdGhlIGFwaSBoYW5kbGUKKyAgICAgICAgX290QXBpID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgTWFpblBhZ2U6Ok9uUmVzdW1pbmcoKQoreworfQorCit2b2lkIE1haW5QYWdlOjpTaG93SW50ZXJmYWNlRGV0YWlscyhvdEFkYXB0ZXJeIGFkYXB0ZXIpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBJbnRlcmZhY2VNYWNBZGRyZXNzLT5UZXh0ID0gb3RBcGk6Ok1hY1RvU3RyaW5nKGFkYXB0ZXItPkV4dGVuZGVkQWRkcmVzcyk7CisgICAgICAgIEludGVyZmFjZU1MX0VJRC0+VGV4dCA9IGFkYXB0ZXItPk1lc2hMb2NhbEVpZC0+VG9TdHJpbmcoKTsKKyAgICAgICAgSW50ZXJmYWNlUkxPQy0+VGV4dCA9IG90QXBpOjpSbG9jMTZUb1N0cmluZyhhZGFwdGVyLT5SbG9jMTYpOworCisgICAgICAgIGlmIChhZGFwdGVyLT5TdGF0ZSA+IG90VGhyZWFkU3RhdGU6OkNoaWxkKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGluZGV4ID0gMDsKKyAgICAgICAgICAgIG90Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKyAgICAgICAgICAgIHdoaWxlIChPVF9FUlJPUl9OT05FID09IG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleCgob3RJbnN0YW5jZSopKHZvaWQqKWFkYXB0ZXItPlJhd0hhbmRsZSwgaW5kZXgsICZjaGlsZEluZm8pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdDSEFSIHN6VGV4dFs2NF0gPSB7IDAgfTsKKyAgICAgICAgICAgIHN3cHJpbnRmX3Moc3pUZXh0LCA2NCwgTCIlZCIsIGluZGV4KTsKKyAgICAgICAgICAgIEludGVyZmFjZUNoaWxkcmVuLT5UZXh0ID0gcmVmIG5ldyBTdHJpbmcoc3pUZXh0KTsKKworICAgICAgICAgICAgSW50ZXJmYWNlTmVpZ2hib3JzLT5UZXh0ID0gTCJ1bmtub3duIjsKKworICAgICAgICAgICAgSW50ZXJmYWNlTmVpZ2hib3JzLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICBJbnRlcmZhY2VOZWlnaGJvcnNUZXh0LT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICBJbnRlcmZhY2VDaGlsZHJlbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgICAgICAgICAgSW50ZXJmYWNlQ2hpbGRyZW5UZXh0LT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaG93IHRoZSBkZXRhaWxzCisgICAgICAgIEludGVyZmFjZURldGFpbHMtPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4pCisgICAgeworCisgICAgfQorfQorCit2b2lkIE1haW5QYWdlOjpBZGRBZGFwdGVyVG9MaXN0KG90QWRhcHRlcl4gYWRhcHRlcikKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEdVSUQgaW50ZXJmYWNlR3VpZCA9IGFkYXB0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIFdDSEFSIHN6TmFtZVsyNTZdID0geyAwIH07CisgICAgICAgIHN3cHJpbnRmX3Moc3pOYW1lLCAyNTYsIEdVSURfRk9STUFULCBHVUlEX0FSRyhpbnRlcmZhY2VHdWlkKSk7CisKKyAgICAgICAgYXV0byBJbnRlcmZhY2VTdGFja1BhbmVsID0gcmVmIG5ldyBTdGFja1BhbmVsKCk7CisgICAgICAgIEludGVyZmFjZVN0YWNrUGFuZWwtPk5hbWUgPSByZWYgbmV3IFN0cmluZyhzek5hbWUpOworICAgICAgICBJbnRlcmZhY2VTdGFja1BhbmVsLT5PcmllbnRhdGlvbiA9IE9yaWVudGF0aW9uOjpIb3Jpem9udGFsOworCisgICAgICAgIG90TG9nKCIlUyBhcnJpdmFsIVxuIiwgSW50ZXJmYWNlU3RhY2tQYW5lbC0+TmFtZS0+RGF0YSgpKTsKKworICAgICAgICAvLyBCYXNpYyBkZXNjcmlwdGlvbiB0ZXh0CisgICAgICAgIGF1dG8gSW50ZXJmYWNlVGV4dEJsb2NrID0gcmVmIG5ldyBUZXh0QmxvY2soKTsKKyAgICAgICAgSW50ZXJmYWNlVGV4dEJsb2NrLT5UZXh0ID0gcmVmIG5ldyBTdHJpbmcoTCJvcGVudGhyZWFkIGludGVyZmFjZSIpOworICAgICAgICBJbnRlcmZhY2VUZXh0QmxvY2stPkZvbnRTaXplID0gMTY7CisgICAgICAgIEludGVyZmFjZVRleHRCbG9jay0+TWFyZ2luID0gVGhpY2tuZXNzKDEwKTsKKyAgICAgICAgSW50ZXJmYWNlVGV4dEJsb2NrLT5UZXh0V3JhcHBpbmcgPSBUZXh0V3JhcHBpbmc6OldyYXA7CisgICAgICAgIEludGVyZmFjZVN0YWNrUGFuZWwtPkNoaWxkcmVuLT5BcHBlbmQoSW50ZXJmYWNlVGV4dEJsb2NrKTsKKworICAgICAgICAvLyBDb25uZWN0IGJ1dHRvbgorICAgICAgICBhdXRvIENvbm5lY3RCdXR0b24gPSByZWYgbmV3IEJ1dHRvbigpOworICAgICAgICBDb25uZWN0QnV0dG9uLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OkNvbGxhcHNlZDsKKyAgICAgICAgQ29ubmVjdEJ1dHRvbi0+Q29udGVudCA9IHJlZiBuZXcgU3RyaW5nKEwiQ29ubmVjdCIpOworICAgICAgICBDb25uZWN0QnV0dG9uLT5DbGljayArPQorICAgICAgICAgICAgcmVmIG5ldyBSb3V0ZWRFdmVudEhhbmRsZXIoCisgICAgICAgICAgICAgICAgWz1dKFBsYXRmb3JtOjpPYmplY3ReLCBSb3V0ZWRFdmVudEFyZ3NeKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMtPl9jdXJBZGFwdGVyID0gYWRhcHRlcjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+SW50ZXJmYWNlQ29uZmlndXJhdGlvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIEludGVyZmFjZVN0YWNrUGFuZWwtPkNoaWxkcmVuLT5BcHBlbmQoQ29ubmVjdEJ1dHRvbik7CisKKyAgICAgICAgLy8gRGV0YWlscyBidXR0b24KKyAgICAgICAgYXV0byBEZXRhaWxzQnV0dG9uID0gcmVmIG5ldyBCdXR0b24oKTsKKyAgICAgICAgRGV0YWlsc0J1dHRvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgICAgIERldGFpbHNCdXR0b24tPkNvbnRlbnQgPSByZWYgbmV3IFN0cmluZyhMIkRldGFpbHMiKTsKKyAgICAgICAgRGV0YWlsc0J1dHRvbi0+Q2xpY2sgKz0KKyAgICAgICAgICAgIHJlZiBuZXcgUm91dGVkRXZlbnRIYW5kbGVyKAorICAgICAgICAgICAgICAgIFs9XShQbGF0Zm9ybTo6T2JqZWN0XiwgUm91dGVkRXZlbnRBcmdzXikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLT5TaG93SW50ZXJmYWNlRGV0YWlscyhhZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworICAgICAgICBJbnRlcmZhY2VTdGFja1BhbmVsLT5DaGlsZHJlbi0+QXBwZW5kKERldGFpbHNCdXR0b24pOworCisgICAgICAgIC8vIERpc2Nvbm5lY3QgYnV0dG9uCisgICAgICAgIGF1dG8gRGlzY29ubmVjdEJ1dHRvbiA9IHJlZiBuZXcgQnV0dG9uKCk7CisgICAgICAgIERpc2Nvbm5lY3RCdXR0b24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICBEaXNjb25uZWN0QnV0dG9uLT5Db250ZW50ID0gcmVmIG5ldyBTdHJpbmcoTCJEaXNjb25uZWN0Iik7CisgICAgICAgIERpc2Nvbm5lY3RCdXR0b24tPkNsaWNrICs9CisgICAgICAgICAgICByZWYgbmV3IFJvdXRlZEV2ZW50SGFuZGxlcigKKyAgICAgICAgICAgICAgICBbPV0oUGxhdGZvcm06Ok9iamVjdF4sIFJvdXRlZEV2ZW50QXJnc14pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlzY29ubmVjdE5ldHdvcmsoYWRhcHRlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgSW50ZXJmYWNlU3RhY2tQYW5lbC0+Q2hpbGRyZW4tPkFwcGVuZChEaXNjb25uZWN0QnV0dG9uKTsKKworICAgICAgICAvLyBEZWxlZ2F0ZSBmb3IgaGFuZGxpbmcgcm9sZSBjaGFuZ2VzCisgICAgICAgIGF1dG8gT25BZGFwdGVyUm9sZUNoYW5nZWQgPQorICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgIEdVSUQgaW50ZXJmYWNlR3VpZCA9IGFkYXB0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgICAgICAgICAgYXV0byBzdGF0ZSA9IGFkYXB0ZXItPlN0YXRlOworICAgICAgICAgICAgICAgIGF1dG8gc3RhdGVTdHIgPSBvdEFwaTo6VGhyZWFkU3RhdGVUb1N0cmluZyhhZGFwdGVyLT5TdGF0ZSk7CisKKyAgICAgICAgICAgICAgICBXQ0hBUiBzelRleHRbMjU2XSA9IHsgMCB9OworICAgICAgICAgICAgICAgIHN3cHJpbnRmX3Moc3pUZXh0LCAyNTYsIEdVSURfRk9STUFUIEwiXHJcblx0JXNcclxuXHQlcyIsCisgICAgICAgICAgICAgICAgICAgIEdVSURfQVJHKGludGVyZmFjZUd1aWQpLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0ci0+RGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA+PSBvdFRocmVhZFN0YXRlOjpDaGlsZCA/IAorICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+TWVzaExvY2FsRWlkLT5Ub1N0cmluZygpLT5EYXRhKCkgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIEwiIik7CisKKyAgICAgICAgICAgICAgICBJbnRlcmZhY2VUZXh0QmxvY2stPlRleHQgPSByZWYgbmV3IFN0cmluZyhzelRleHQpOworCisgICAgICAgICAgICAgICAgb3RMb2coIiVTIHN0YXRlID0gJVNcbiIsIEludGVyZmFjZVN0YWNrUGFuZWwtPk5hbWUtPkRhdGEoKSwgc3RhdGVTdHItPkRhdGEoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gb3RUaHJlYWRTdGF0ZTo6RGlzYWJsZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25uZWN0QnV0dG9uLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgICAgICAgICAgICAgICAgIERldGFpbHNCdXR0b24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICAgICAgICAgICAgICBEaXNjb25uZWN0QnV0dG9uLT5WaXNpYmlsaXR5ID0gV2luZG93czo6VUk6OlhhbWw6OlZpc2liaWxpdHk6OkNvbGxhcHNlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29ubmVjdEJ1dHRvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgICAgICAgICAgICAgICAgIERldGFpbHNCdXR0b24tPlZpc2liaWxpdHkgPSBXaW5kb3dzOjpVSTo6WGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICAgICAgICAgICAgICAgICAgRGlzY29ubmVjdEJ1dHRvbi0+VmlzaWJpbGl0eSA9IFdpbmRvd3M6OlVJOjpYYW1sOjpWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIHJvbGUgY2hhbmdlIGNhbGxiYWNrcworICAgICAgICBhdXRvIGFkYXB0ZXJSb2xlQ2hhbmdlZFRva2VuID0gCisgICAgICAgICAgICBhZGFwdGVyLT5OZXRSb2xlQ2hhbmdlZCArPQorICAgICAgICAgICAgICAgIHJlZiBuZXcgb3ROZXRSb2xlQ2hhbmdlZERlbGVnYXRlKAorICAgICAgICAgICAgICAgICAgICBbPV0oYXV0byBzZW5kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGV4dCBvbiB0aGUgVUkgdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5EaXNwYXRjaGVyLT5SdW5Bc3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dzOjpVSTo6Q29yZTo6Q29yZURpc3BhdGNoZXJQcmlvcml0eTo6Tm9ybWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiBuZXcgV2luZG93czo6VUk6OkNvcmU6OkRpc3BhdGNoZWRIYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkFkYXB0ZXJSb2xlQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGFkZHJlc3MgY2hhbmdlIGNhbGxiYWNrcworICAgICAgICBhdXRvIGFkYXB0ZXJNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkVG9rZW4gPQorICAgICAgICAgICAgYWRhcHRlci0+SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkICs9CisgICAgICAgICAgICAgICAgcmVmIG5ldyBvdElwTWVzaExvY2FsQWRkcmVzQ2hhbmdlZERlbGVnYXRlKAorICAgICAgICAgICAgICAgICAgICBbPV0oYXV0byBzZW5kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGV4dCBvbiB0aGUgVUkgdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5EaXNwYXRjaGVyLT5SdW5Bc3luYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dzOjpVSTo6Q29yZTo6Q29yZURpc3BhdGNoZXJQcmlvcml0eTo6Tm9ybWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiBuZXcgV2luZG93czo6VUk6OkNvcmU6OkRpc3BhdGNoZWRIYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkFkYXB0ZXJSb2xlQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGFkYXB0ZXIgcmVtb3ZhbCBjYWxsYmFja3MKKyAgICAgICAgV2luZG93czo6Rm91bmRhdGlvbjo6RXZlbnRSZWdpc3RyYXRpb25Ub2tlbiBhZGFwdGVyUmVtb3ZhbFRva2VuOworICAgICAgICBhZGFwdGVyUmVtb3ZhbFRva2VuID0KKyAgICAgICAgICAgIGFkYXB0ZXItPkFkYXB0ZXJSZW1vdmFsICs9CisgICAgICAgICAgICAgICAgcmVmIG5ldyBvdEFkYXB0ZXJSZW1vdmFsRGVsZWdhdGUoCisgICAgICAgICAgICAgICAgICAgIFs9XShvdEFkYXB0ZXJeIGFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPk5ldFJvbGVDaGFuZ2VkIC09IGFkYXB0ZXJSb2xlQ2hhbmdlZFRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkIC09IGFkYXB0ZXJNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkVG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5BZGFwdGVyUmVtb3ZhbCAtPSBhZGFwdGVyUmVtb3ZhbFRva2VuOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGl0ZW0gb24gdGhlIFVJIHRocmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RGlzcGF0Y2hlci0+UnVuQXN5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93czo6VUk6OkNvcmU6OkNvcmVEaXNwYXRjaGVyUHJpb3JpdHk6Ok5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgbmV3IFdpbmRvd3M6OlVJOjpDb3JlOjpEaXNwYXRjaGVkSGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRoaXMtPkludGVyZmFjZUxpc3QtPkl0ZW1zLT5TaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBJdGVtID0gZHluYW1pY19jYXN0PFN0YWNrUGFuZWxePih0aGlzLT5JbnRlcmZhY2VMaXN0LT5JdGVtcy0+R2V0QXQoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJdGVtID09IEludGVyZmFjZVN0YWNrUGFuZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdExvZygiJVMgcmVtb3ZhbCFcbiIsIEludGVyZmFjZVN0YWNrUGFuZWwtPk5hbWUtPkRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkludGVyZmFjZUxpc3QtPkl0ZW1zLT5SZW1vdmVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGluaXRpYWwgcm9sZSBjaGFuZ2UKKyAgICAgICAgT25BZGFwdGVyUm9sZUNoYW5nZWQoKTsKKworICAgICAgICAvLyBBZGQgdGhlIGludGVyZmFjZSB0byB0aGUgbGlzdAorICAgICAgICBJbnRlcmZhY2VMaXN0LT5JdGVtcy0+QXBwZW5kKEludGVyZmFjZVN0YWNrUGFuZWwpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXikKKyAgICB7CisgICAgfQorfQorCit2b2lkIE1haW5QYWdlOjpDb25uZWN0TmV0d29yayhvdEFkYXB0ZXJeIGFkYXB0ZXIpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBHVUlEIGludGVyZmFjZUd1aWQgPSBhZGFwdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBXQ0hBUiBzek5hbWVbMjU2XSA9IHsgMCB9OworICAgICAgICBzd3ByaW50Zl9zKHN6TmFtZSwgMjU2LCBHVUlEX0ZPUk1BVCwgR1VJRF9BUkcoaW50ZXJmYWNlR3VpZCkpOworICAgICAgICBvdExvZygiJVMgc3RhcnRpbmcgY29ubmVjdGlvbi4uLlxuIiwgc3pOYW1lKTsKKworICAgICAgICAvLyBDb25maWd1cmUKKyAgICAgICAgYWRhcHRlci0+TmV0d29ya05hbWUgPSBJbnRlcmZhY2VDb25maWdOYW1lLT5UZXh0OworICAgICAgICBhZGFwdGVyLT5NYXN0ZXJLZXkgPSBJbnRlcmZhY2VDb25maWdLZXktPlRleHQ7CisgICAgICAgIGFkYXB0ZXItPkNoYW5uZWwgPSAodWludDhfdClJbnRlcmZhY2VDb25maWdDaGFubmVsLT5WYWx1ZTsKKyAgICAgICAgYWRhcHRlci0+TWF4QWxsb3dlZENoaWxkcmVuID0gKHVpbnQ4X3QpSW50ZXJmYWNlQ29uZmlnTWF4Q2hpbGRyZW4tPlZhbHVlOworICAgICAgICBhZGFwdGVyLT5QYW5JZCA9IDB4NDU2NzsKKworICAgICAgICAvLyBCcmluZyB1cCB0aGUgaW50ZXJmYWNlIGFuZCBzdGFydCB0aGUgVGhyZWFkIGxvZ2ljCisgICAgICAgIGFkYXB0ZXItPklwRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGFkYXB0ZXItPlRocmVhZEVuYWJsZWQgPSB0cnVlOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXikKKyAgICB7CisKKyAgICB9Cit9CisKK3ZvaWQgTWFpblBhZ2U6OkRpc2Nvbm5lY3ROZXR3b3JrKG90QWRhcHRlcl4gYWRhcHRlcikKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIEdVSUQgaW50ZXJmYWNlR3VpZCA9IGFkYXB0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIFdDSEFSIHN6TmFtZVsyNTZdID0geyAwIH07CisgICAgICAgIHN3cHJpbnRmX3Moc3pOYW1lLCAyNTYsIEdVSURfRk9STUFULCBHVUlEX0FSRyhpbnRlcmZhY2VHdWlkKSk7CisgICAgICAgIG90TG9nKCIlUyBkaXNjb25uZWN0aW5nLi4uXG4iLCBzek5hbWUpOworCisgICAgICAgIC8vIFN0b3AgdGhlIFRocmVhZCBuZXR3b3JrIGFuZCBicmluZyBkb3duIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgYWRhcHRlci0+VGhyZWFkRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBhZGFwdGVyLT5JcEVuYWJsZWQgPSBmYWxzZTsKKyAgICB9CisgICAgY2F0Y2ggKEV4Y2VwdGlvbl4pCisgICAgeworCisgICAgfQorfQorCitXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XgorTWFpblBhZ2U6OlRocmVhZEdyaWQ6OmdldCgpCit7CisgICAgcmV0dXJuIFRocmRHcmlkOworfQorCitXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XgorTWFpblBhZ2U6OlRhbGtHcmlkOjpnZXQoKQoreworICAgIHJldHVybiBUbGtHcmlkOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL01haW5QYWdlLnhhbWwuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkM2U3YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9NYWluUGFnZS54YW1sLmgKQEAgLTAsMCArMSw3NyBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYWluUGFnZS5nLmgiCisjaW5jbHVkZSAiSU1haW5QYWdlVUlFbGVtZW50cy5oIgorCituYW1lc3BhY2Ugb3QKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEFuIGVtcHR5IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBvbiBpdHMgb3duIG9yIG5hdmlnYXRlZCB0byB3aXRoaW4gYSBGcmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyByZWYgY2xhc3MgTWFpblBhZ2Ugc2VhbGVkIDogcHVibGljIElNYWluUGFnZVVJRWxlbWVudHMKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBNYWluUGFnZSgpOworCisgICAgICAgIHZvaWQgT25SZXN1bWluZygpOworCisgICAgICAgIHZvaWQgQ29ubmVjdE5ldHdvcmsob3RBZGFwdGVyXiBhZGFwdGVyKTsKKyAgICAgICAgdm9pZCBTaG93SW50ZXJmYWNlRGV0YWlscyhvdEFkYXB0ZXJeIGFkYXB0ZXIpOworICAgICAgICB2b2lkIERpc2Nvbm5lY3ROZXR3b3JrKG90QWRhcHRlcl4gYWRhcHRlcik7CisKKyAgICAgICAgcHJvcGVydHkgV2luZG93czo6VUk6OlhhbWw6OlVJRWxlbWVudF4gVGhyZWFkR3JpZAorICAgICAgICB7CisgICAgICAgICAgICB2aXJ0dWFsIFdpbmRvd3M6OlVJOjpYYW1sOjpVSUVsZW1lbnReIGdldCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm9wZXJ0eSBXaW5kb3dzOjpVSTo6WGFtbDo6VUlFbGVtZW50XiBUYWxrR3JpZAorICAgICAgICB7CisgICAgICAgICAgIHZpcnR1YWwgV2luZG93czo6VUk6OlhhbWw6OlVJRWxlbWVudF4gZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBPbk5hdmlnYXRlZFRvKFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uRXZlbnRBcmdzXiBlKSBvdmVycmlkZTsKKworICAgIHByaXZhdGU6CisKKyAgICAgICAgdm9pZCBPbkxvYWRlZChQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworICAgICAgICB2b2lkIE9uVW5sb2FkZWQoUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgICAgICB2b2lkIEFkZEFkYXB0ZXJUb0xpc3Qob3RBZGFwdGVyXiBhZGFwdGVyKTsKKyAgICAgICAgCisgICAgICAgIG90QXBpXiBfb3RBcGk7CisKKyAgICAgICAgV2luZG93czo6Rm91bmRhdGlvbjo6RXZlbnRSZWdpc3RyYXRpb25Ub2tlbiBfYWRhcHRlckFycml2YWxUb2tlbjsKKworICAgICAgICBvdEFkYXB0ZXJeIF9jdXJBZGFwdGVyOworCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9PcGVuVGhyZWFkX1RlbXBvcmFyeUtleS5wZnggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvT3BlblRocmVhZF9UZW1wb3JhcnlLZXkucGZ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjQ3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvT3BlblRocmVhZF9UZW1wb3JhcnlLZXkucGZ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9QYWNrYWdlLmFwcHhtYW5pZmVzdCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9QYWNrYWdlLmFwcHhtYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzM2ZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1BhY2thZ2UuYXBweG1hbmlmZXN0CkBAIC0wLDAgKzEsMzAgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UGFja2FnZSB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hcHB4L21hbmlmZXN0L2ZvdW5kYXRpb24vd2luZG93czEwIiB4bWxuczptcD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hcHB4LzIwMTQvcGhvbmUvbWFuaWZlc3QiIHhtbG5zOnVhcD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hcHB4L21hbmlmZXN0L3VhcC93aW5kb3dzMTAiIElnbm9yYWJsZU5hbWVzcGFjZXM9InVhcCBtcCI+CisgIDxJZGVudGl0eSBOYW1lPSI3OTI2ZTNmOS04MzVlLTQyMWMtOTRjMS0yODEyZjM1NjlmNGEiIFB1Ymxpc2hlcj0iQ049bmliYW5rcyIgVmVyc2lvbj0iMS4wLjEyLjAiIC8+CisgIDxtcDpQaG9uZUlkZW50aXR5IFBob25lUHJvZHVjdElkPSI3OTI2ZTNmOS04MzVlLTQyMWMtOTRjMS0yODEyZjM1NjlmNGEiIFBob25lUHVibGlzaGVySWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgLz4KKyAgPFByb3BlcnRpZXM+CisgICAgPERpc3BsYXlOYW1lPk9wZW5UaHJlYWQ8L0Rpc3BsYXlOYW1lPgorICAgIDxQdWJsaXNoZXJEaXNwbGF5TmFtZT5PcGVuVGhyZWFkPC9QdWJsaXNoZXJEaXNwbGF5TmFtZT4KKyAgICA8TG9nbz5Bc3NldHNcU3RvcmVMb2dvLnBuZzwvTG9nbz4KKyAgPC9Qcm9wZXJ0aWVzPgorICA8RGVwZW5kZW5jaWVzPgorICAgIDxUYXJnZXREZXZpY2VGYW1pbHkgTmFtZT0iV2luZG93cy5Vbml2ZXJzYWwiIE1pblZlcnNpb249IjEwLjAuMC4wIiBNYXhWZXJzaW9uVGVzdGVkPSIxMC4wLjAuMCIgLz4KKyAgPC9EZXBlbmRlbmNpZXM+CisgIDxSZXNvdXJjZXM+CisgICAgPFJlc291cmNlIExhbmd1YWdlPSJ4LWdlbmVyYXRlIiAvPgorICA8L1Jlc291cmNlcz4KKyAgPEFwcGxpY2F0aW9ucz4KKyAgICA8QXBwbGljYXRpb24gSWQ9IkFwcCIgRXhlY3V0YWJsZT0iJHRhcmdldG5hbWV0b2tlbiQuZXhlIiBFbnRyeVBvaW50PSJvdC5BcHAiPgorICAgICAgPHVhcDpWaXN1YWxFbGVtZW50cyBEaXNwbGF5TmFtZT0iT3BlblRocmVhZCIgU3F1YXJlMTUweDE1MExvZ289IkFzc2V0c1xTcXVhcmUxNTB4MTUwTG9nby5wbmciIFNxdWFyZTQ0eDQ0TG9nbz0iQXNzZXRzXFNxdWFyZTQ0eDQ0TG9nby5wbmciIERlc2NyaXB0aW9uPSJPcGVuVGhyZWFkIiBCYWNrZ3JvdW5kQ29sb3I9IndoaXRlIj4KKyAgICAgICAgPHVhcDpEZWZhdWx0VGlsZSBXaWRlMzEweDE1MExvZ289IkFzc2V0c1xXaWRlMzEweDE1MExvZ28ucG5nIj4KKyAgICAgICAgPC91YXA6RGVmYXVsdFRpbGU+CisgICAgICAgIDx1YXA6U3BsYXNoU2NyZWVuIEltYWdlPSJBc3NldHNcU3BsYXNoU2NyZWVuLnBuZyIgQmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIgLz4KKyAgICAgIDwvdWFwOlZpc3VhbEVsZW1lbnRzPgorICAgIDwvQXBwbGljYXRpb24+CisgIDwvQXBwbGljYXRpb25zPgorICA8Q2FwYWJpbGl0aWVzPgorICAgIDxDYXBhYmlsaXR5IE5hbWU9ImludGVybmV0Q2xpZW50IiAvPgorICAgIDxDYXBhYmlsaXR5IE5hbWU9InByaXZhdGVOZXR3b3JrQ2xpZW50U2VydmVyIiAvPgorICAgIDxDYXBhYmlsaXR5IE5hbWU9ImludGVybmV0Q2xpZW50U2VydmVyIiAvPgorICA8L0NhcGFiaWxpdGllcz4KKzwvUGFja2FnZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvUHJvdG9jb2wuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9Qcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjVlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvUHJvdG9jb2wuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIG90Cit7CisKK3B1YmxpYyBlbnVtIGNsYXNzIFByb3RvY29sCit7CisgICAgVENQLAorICAgIFVEUCwKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvUkVBRE1FLm1kIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2IyZThmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1JFQURNRS5tZApAQCAtMCwwICsxLDI2IEBACisjIE9wZW5UaHJlYWQgQXBwIGZvciBXaW5kb3dzICMKKworVGhpcyBzYW1wbGUgYXBwIHByb3ZpZGVzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGludGVyZmFjZSB3aXRoIHRoZSBPcGVuVGhyZWFkIEFQSSBhbmQgdGFsayB0byBlYWNoIG90aGVyIGluIGEKK1tVbml2ZXJzYWwgV2luZG93cyBBcHBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9hcHBzKS4gVGhlIGFwcCBpcyB3cml0dGVuIGluIEMrKyAvQ1gKK2FuZCBwcm92aWRlcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgT3BlblRocmVhZCBBUEksIGhpZGluZyB0aGUgcmF3IEMvQysrIGludGVyZmFjZS4KKworVGhlIG1haW4gcGFnZSBvZiB0aGUgQXBwIGlzIGEgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIGludGVyZmFjZXMsIHRoZWlyIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZSwKK3RoZWlyIGN1cnJlbnQgTUwtRUlEIElQdjYgYWRkcmVzcywgYW5kIGJ1dHRvbnMgdG8gY29ubmVjdC9kaXNjb25uZWN0IGFuZCB0byB2aWV3IHNvbWUgbW9yZSBkZXRhaWxzLgorCishW0ludGVyZmFjZSBMaXN0XSguLi8uLi8uLi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLWludGVyZmFjZS1saXN0LnBuZykKKworVGhlIGRldGFpbHMgbGlzdCBwcm92aWRlcyBzb21lIG1vcmUgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBleHRlbmRlZCBNQUMgYWRkcmVzcywgUkxPQzE2IGFuZCBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGN1cnJlbnQgY2hpbGRyZW4uCisKKyFbSW50ZXJmYWNlIExpc3RdKC4uLy4uLy4uL2RvYy9pbWFnZXMvd2luZG93cy1hcHAtZGV0YWlscy5wbmcpCisKK1RoZSAiVGFsayIgYnV0dG9uIG9mIG1haW4gcGFnZSBzd2l0Y2hlcyB0aGUgdXNlciBpbnRlcmZhY2UgdG8gdGhlIHRhbGsgZnVjdGlvbmFsaXR5LiBUaGlzIGFwcCBhY3RzCitlaXRoZXIgYXMgYSBzZXJ2ZXIgb3IgYSBjbGllbnQgcm9sZSBhbmQgdGFsa3MgdG8gZWFjaCBvdGhlciBvdmVyIGEgVENQIG9yIGEgVURQIHByb3RvY29sLgorCitUaGUgc2VydmVyIGxpc3RlbnMgdG8gdGhlIGNsaWVudHMuCisKKyFbVGFsayBGdW5jdGlvbmFsaXR5XSguLi8uLi8uLi9kb2MvaW1hZ2VzL3dpbmRvd3MtYXBwLXRhbGstc2VydmVyLnBuZykKKworVGhlIGNsaWVudCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIHNlcnZlciBhbmQgdGhlIHNlcnZlciBlY2hvcyB0aGF0IG1lc3NhZ2UgYmFjayB0byB0aGUgY2xpZW50LgorCishW1RhbGsgRnVuY3Rpb25hbGl0eV0oLi4vLi4vLi4vZG9jL2ltYWdlcy93aW5kb3dzLWFwcC10YWxrLWNsaWVudC5wbmcpCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDA4YjJlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbApAQCAtMCwwICsxLDEwNiBAQAor77u/PCEtLQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzxVc2VyQ29udHJvbAorICAgIHg6Q2xhc3M9Im90LlNlcnZlckNvbnRyb2wiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9leHByZXNzaW9uL2JsZW5kLzIwMDgiCisgICAgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IgorICAgIG1jOklnbm9yYWJsZT0iZCI+CisgICAgPEdyaWQ+CisgICAgICAgIDxHcmlkLlJvd0RlZmluaXRpb25zPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IkF1dG8iLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iMjAiLz4KKyAgICAgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSIyMCIvPgorICAgICAgICAgICAgPFJvd0RlZmluaXRpb24gSGVpZ2h0PSJBdXRvIi8+CisgICAgICAgIDwvR3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICAgICAgPEdyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgICAgICA8Q29sdW1uRGVmaW5pdGlvbiBXaWR0aD0iQXV0byIvPgorICAgICAgICAgICAgPENvbHVtbkRlZmluaXRpb24gV2lkdGg9IjIwIi8+CisgICAgICAgICAgICA8Q29sdW1uRGVmaW5pdGlvbiBXaWR0aD0iKiIvPgorICAgICAgICA8L0dyaWQuQ29sdW1uRGVmaW5pdGlvbnM+CisgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgIEdyaWQuUm93PSIwIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBUZXh0PSJTZXJ2ZXIgTmFtZSA6IgorICAgICAgICAgICAgLz4KKyAgICAgICAgPFRleHRCb3gKKyAgICAgICAgICAgIEdyaWQuUm93PSIwIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjIiCisgICAgICAgICAgICB4Ok5hbWU9IlNlcnZlck5hbWUiCisgICAgICAgICAgICBXaWR0aD0iMzAwIgorICAgICAgICAgICAgSG9yaXpvbnRhbEFsaWdubWVudD0iTGVmdCIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0QmxvY2sKKyAgICAgICAgICAgIEdyaWQuUm93PSIyIgorICAgICAgICAgICAgR3JpZC5Db2x1bW49IjAiCisgICAgICAgICAgICBUZXh0PSJTZXJ2ZXIgSVAgOiIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0Qm94CisgICAgICAgICAgICBHcmlkLlJvdz0iMiIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIyIgorICAgICAgICAgICAgeDpOYW1lPSJTZXJ2ZXJJUCIKKyAgICAgICAgICAgIE1pbldpZHRoPSI1MDAiCisgICAgICAgICAgICAvPgorICAgICAgICA8VGV4dEJsb2NrCisgICAgICAgICAgICBHcmlkLlJvdz0iNCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIwIgorICAgICAgICAgICAgVGV4dD0iU2VydmVyIFBvcnQgOiIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDxUZXh0Qm94CisgICAgICAgICAgICBHcmlkLlJvdz0iNCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uPSIyIgorICAgICAgICAgICAgeDpOYW1lPSJTZXJ2ZXJQb3J0IgorICAgICAgICAgICAgV2lkdGg9IjEwMCIKKyAgICAgICAgICAgIEhvcml6b250YWxBbGlnbm1lbnQ9IkxlZnQiCisgICAgICAgICAgICAvPgorICAgICAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgT3JpZW50YXRpb249Ikhvcml6b250YWwiCisgICAgICAgICAgICBWZXJ0aWNhbEFsaWdubWVudD0iVG9wIgorICAgICAgICAgICAgR3JpZC5Sb3c9IjYiCisgICAgICAgICAgICBHcmlkLkNvbHVtbj0iMCIKKyAgICAgICAgICAgIEdyaWQuQ29sdW1uU3Bhbj0iMyIKKyAgICAgICAgICAgID4KKyAgICAgICAgICAgIDxCdXR0b24KKyAgICAgICAgICAgICAgICBXaWR0aD0iNzUiCisgICAgICAgICAgICAgICAgQ29udGVudD0iTGlzdGVuIgorICAgICAgICAgICAgICAgIENsaWNrPSJMaXN0ZW5fQ2xpY2siCisgICAgICAgICAgICAgICAgTWFyZ2luPSIwLDAsNzUsMCIKKyAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgIFdpZHRoPSI3NSIKKyAgICAgICAgICAgICAgICBDb250ZW50PSJFeGl0IgorICAgICAgICAgICAgICAgIENsaWNrPSJFeGl0X0NsaWNrIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgIDwvU3RhY2tQYW5lbD4KKyAgICA8L0dyaWQ+Cis8L1VzZXJDb250cm9sPgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbC5jcHAgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU0NWJkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1NlcnZlckNvbnRyb2wueGFtbC5jcHAKQEAgLTAsMCArMSwxMjQgQEAKK++7vy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJTZXJ2ZXJDb250cm9sLnhhbWwuaCIKKyNpbmNsdWRlICJGYWN0b3J5LmgiCisjaW5jbHVkZSAiVGFsa0hlbHBlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VzaW5nIG5hbWVzcGFjZSBQbGF0Zm9ybTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworLy8gVGhlIFVzZXIgQ29udHJvbCBpdGVtIHRlbXBsYXRlIGlzIGRvY3VtZW50ZWQgYXQgaHR0cDovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9MaW5rSWQ9MjM0MjM2CisKK1NlcnZlckNvbnRyb2w6OlNlcnZlckNvbnRyb2woKQoreworICAgIEluaXRpYWxpemVDb21wb25lbnQoKTsKKworICAgIFNlcnZlclBvcnQtPlRleHQgPSBERUZfUE9SVC5Ub1N0cmluZygpOworfQorCit2b2lkCitTZXJ2ZXJDb250cm9sOjpJbml0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gIG5vdGlmeSwKKyAgICBJTWFpblBhZ2VVSUVsZW1lbnRzXiBtYWluUGFnZVVJRWxlbWVudHMpCit7CisgICAgX25vdGlmeSA9IHN0ZDo6bW92ZShub3RpZnkpOworICAgIF9tYWluUGFnZVVJRWxlbWVudHMgPSBzdGQ6Om1vdmUobWFpblBhZ2VVSUVsZW1lbnRzKTsKK30KKwordm9pZAorU2VydmVyQ29udHJvbDo6UHJvdG9jb2xDaGFuZ2VkKAorICAgIFByb3RvY29sIHByb3RvY29sKQoreworICAgIF9wcm90b2NvbCA9IHByb3RvY29sOworfQorCit2b2lkCitTZXJ2ZXJDb250cm9sOjpMaXN0ZW5fQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgYXV0byBsaXN0ZW5lckFyZ3MgPSByZWYgbmV3IExpc3RlbmVyQXJncygpOworCisgICAgICAgIGxpc3RlbmVyQXJncy0+U2VydmVyTmFtZSA9IFNlcnZlck5hbWUtPlRleHQ7CisKKyAgICAgICAgYXV0byBzZXJ2ZXJJUCA9IFNlcnZlcklQLT5UZXh0OworICAgICAgICBpZiAoc2VydmVySVAtPklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm8gU2VydmVyIElQIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVjayB2YWxpZCBjaGFycyBvZiBJcHY2IEFkZHJlc3MKKyAgICAgICAgaWYgKCFUYWxrSGVscGVyOjpBbGxWYWxpZElwdjZDaGFycyhzZXJ2ZXJJUC0+RGF0YSgpLCBzZXJ2ZXJJUC0+RGF0YSgpICsgc2VydmVySVAtPkxlbmd0aCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHLCAiTm90IGEgdmFsaWQgU2VydmVyIElQdjYgYWRkcmVzcyIpOworICAgICAgICB9CisKKyAgICAgICAgbGlzdGVuZXJBcmdzLT5TZXJ2ZXJIb3N0TmFtZSA9IHJlZiBuZXcgSG9zdE5hbWUoc2VydmVySVApOworCisgICAgICAgIGlmIChTZXJ2ZXJQb3J0LT5UZXh0LT5Jc0VtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRywgIk5vIFNlcnZlciBQb3J0Iik7CisgICAgICAgIH0KKyAgICAgICAgbGlzdGVuZXJBcmdzLT5TZXJ2ZXJQb3J0ID0gU2VydmVyUG9ydC0+VGV4dDsKKworICAgICAgICBhdXRvIGxpc3RlbmVyQ29udGV4dCA9IEZhY3Rvcnk6OkNyZWF0ZUxpc3RlbmVyQ29udGV4dChfbm90aWZ5LCBsaXN0ZW5lckFyZ3MsIF9wcm90b2NvbCk7CisgICAgICAgIGxpc3RlbmVyQ29udGV4dC0+TGlzdGVuX0NsaWNrKHNlbmRlciwgZSk7CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgIkxpc3RlbmluZyBmYWlsZWQgd2l0aCBpbnB1dCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgIH0KK30KKwordm9pZAorU2VydmVyQ29udHJvbDo6RXhpdF9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgX21haW5QYWdlVUlFbGVtZW50cy0+VGFsa0dyaWQtPlZpc2liaWxpdHkgPSBYYW1sOjpWaXNpYmlsaXR5OjpDb2xsYXBzZWQ7CisgICAgX21haW5QYWdlVUlFbGVtZW50cy0+VGhyZWFkR3JpZC0+VmlzaWJpbGl0eSA9IFhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU2VydmVyQ29udHJvbC54YW1sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NGY0YQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TZXJ2ZXJDb250cm9sLnhhbWwuaApAQCAtMCwwICsxLDYyIEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNlcnZlckNvbnRyb2wuZy5oIgorI2luY2x1ZGUgIlRhbGtDb25zdHMuaCIKKyNpbmNsdWRlICJJQXN5bmNUaHJlYWROb3RpZnkuaCIKKyNpbmNsdWRlICJJTWFpblBhZ2VVSUVsZW1lbnRzLmgiCisjaW5jbHVkZSAiUHJvdG9jb2wuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgU2VydmVyQ29udHJvbCBzZWFsZWQKK3sKK3B1YmxpYzoKKyAgICBTZXJ2ZXJDb250cm9sKCk7CisKKyAgICB2b2lkIEluaXQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIElNYWluUGFnZVVJRWxlbWVudHNeIG1haW5QYWdlVUlFbGVtZW50cyk7CisKKyAgICB2b2lkIFByb3RvY29sQ2hhbmdlZChQcm90b2NvbCBwcm90b2NvbCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzaG9ydCBERUZfUE9SVCA9IFRhbGtDb25zdHM6OkRFRl9TRVJWRVJfUE9SVDsKKworICAgIHZvaWQgTGlzdGVuX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2b2lkIEV4aXRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKTsKKworICAgIElBc3luY1RocmVhZE5vdGlmeV4gIF9ub3RpZnk7CisgICAgSU1haW5QYWdlVUlFbGVtZW50c14gX21haW5QYWdlVUlFbGVtZW50czsKKyAgICBQcm90b2NvbCAgICAgICAgICAgICBfcHJvdG9jb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuY3BwIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDllOWMKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtQ2xpZW50Q29udGV4dC5jcHAKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgIlN0cmVhbUNsaWVudENvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCit1c2luZyBuYW1lc3BhY2UgQ29uY3VycmVuY3k7Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6QXBwbGljYXRpb25Nb2RlbDo6Q29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczo6UHJpbWl0aXZlczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6RGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6SW5wdXQ7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6Ok1lZGlhOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpOYXZpZ2F0aW9uOworCitTdHJlYW1DbGllbnRDb250ZXh0OjpTdHJlYW1DbGllbnRDb250ZXh0KAorICAgIElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LAorICAgIFN0cmVhbVNvY2tldF4gICAgICAgY2xpZW50LAorICAgIENsaWVudEFyZ3NeICAgICAgICAgYXJncykgOgorICAgIF9ub3RpZnl7IHN0ZDo6bW92ZShub3RpZnkpIH0sCisgICAgX2NsaWVudHsgc3RkOjptb3ZlKGNsaWVudCkgfSwKKyAgICBfYXJnc3sgc3RkOjptb3ZlKGFyZ3MpIH0KK3sKK30KKworU3RyZWFtQ2xpZW50Q29udGV4dDo6flN0cmVhbUNsaWVudENvbnRleHQoKQoreworICAgIC8vIEEgQ2xpZW50IGNhbiBiZSBjbG9zZWQgaW4gdHdvIHdheXM6CisgICAgLy8gIC0gZXhwbGljaXRseTogdXNpbmcgdGhlICdkZWxldGUnIGtleXdvcmQgKGNsaWVudCBpcyBjbG9zZWQgZXZlbiBpZiB0aGVyZSBhcmUgb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byBpdCkuCisgICAgLy8gIC0gaW1wbGljaXRseTogcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGl0IChpLmUuLCBmYWxsaW5nIG91dC1vZi1zY29wZSkuCisgICAgLy8KKyAgICAvLyBXaGVuIGEgU29ja2V0IGlzIGNsb3NlZCBpbXBsaWNpdGx5LCBpdCBjYW4gdGFrZSBzZXZlcmFsIHNlY29uZHMgZm9yIHRoZSBsb2NhbCBwb3J0IGJlaW5nIHVzZWQKKyAgICAvLyBieSBpdCB0byBiZSBmcmVlZC9yZWNsYWltZWQgYnkgdGhlIGxvd2VyIG5ldHdvcmtpbmcgbGF5ZXJzLiBEdXJpbmcgdGhhdCB0aW1lLCBvdGhlciBzb2NrZXRzIG9uIHRoZSBtYWNoaW5lCisgICAgLy8gd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgdGhlIHBvcnQuIFRodXMsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgU29ja2V0IGluc3RhbmNlcyBiZSBleHBsaWNpdGx5CisgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGdvIG91dCBvZiBzY29wZShlLmcuLCBiZWZvcmUgYXBwbGljYXRpb24gZXhpdCkuIFRoZSBjYWxsIGJlbG93IGV4cGxpY2l0bHkgY2xvc2VzIHRoZSBzb2NrZXQuCisgICAgaWYgKF9jbGllbnQgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGRlbGV0ZSBfY2xpZW50OworICAgICAgICBfY2xpZW50ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQKK1N0cmVhbUNsaWVudENvbnRleHQ6OkNvbm5lY3RfQ2xpY2soCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIHRhc2s8dm9pZD4gcmVtb3ZlQ29udGV4dDsKKworICAgIGlmIChDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkhhc0tleSgiY2xpZW50Q29udGV4dCIpKQorICAgIHsKKyAgICAgICAgYXV0byBjbGllbnRDb250ZXh0ID0gZHluYW1pY19jYXN0PElDbGllbnRDb250ZXh0Xj4oCisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkxvb2t1cCgiY2xpZW50Q29udGV4dCIpKTsKKyAgICAgICAgaWYgKGNsaWVudENvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gY2xpZW50Q29udGV4dCIpOworICAgICAgICB9CisKKyAgICAgICAgcmVtb3ZlQ29udGV4dCA9IGNyZWF0ZV90YXNrKGNsaWVudENvbnRleHQtPkNhbmNlbElPKCkpLnRoZW4oCisgICAgICAgICAgICBbXSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJjbGllbnRDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgcmVtb3ZlQ29udGV4dC50aGVuKFt0aGlzXSh0YXNrPHZvaWQ+IHByZXZUYXNrKQorICAgIHsKKyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworCisgICAgICAgICAgICAvLyBFdmVudHMgY2Fubm90IGJlIGhvb2tlZCB1cCBkaXJlY3RseSB0byB0aGUgU2NlbmFyaW9JbnB1dDIgb2JqZWN0LCBhcyB0aGUgb2JqZWN0IGNhbiBmYWxsIG91dC1vZi1zY29wZSBhbmQgYmUKKyAgICAgICAgICAgIC8vIGRlbGV0ZWQuIFRoaXMgd291bGQgcmVuZGVyIGFueSBldmVudCBob29rZWQgdXAgdG8gdGhlIG9iamVjdCBpbmVmZmVjdGl2ZS4gVGhlIENsaWVudENvbnRleHQgZ3VhcmFudGVlcyB0aGF0CisgICAgICAgICAgICAvLyBib3RoIHRoZSBzb2NrZXQgYW5kIG9iamVjdCB0aGF0IHNlcnZlcyBpdHMgZXZlbnRzIGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUuCisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPkluc2VydCgiY2xpZW50Q29udGV4dCIsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgIlJlbW92ZSBjbGllbnRDb250ZXh0IGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfSkudGhlbihbdGhpc10oKQorICAgIHsKKyAgICAgICAgYXV0byBlbmRwb2ludFBhaXIgPSByZWYgbmV3IEVuZHBvaW50UGFpcihfYXJncy0+Q2xpZW50SG9zdE5hbWUsIF9hcmdzLT5DbGllbnRQb3J0LAorICAgICAgICAgICAgX2FyZ3MtPlNlcnZlckhvc3ROYW1lLCBfYXJncy0+U2VydmVyUG9ydCk7CisKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTdGFydCBjb25uZWN0aW5nIiwgTm90aWZ5VHlwZTo6U3RhdHVzKTsKKworICAgICAgICBjcmVhdGVfdGFzayhfY2xpZW50LT5Db25uZWN0QXN5bmMoZW5kcG9pbnRQYWlyKSkudGhlbigKKyAgICAgICAgICAgIFt0aGlzLCBlbmRwb2ludFBhaXJdKHRhc2s8dm9pZD4gcHJldlRhc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRyeSBnZXR0aW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICBwcmV2VGFzay5nZXQoKTsKKyAgICAgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJDb25uZWN0IGZyb20gIiArIGVuZHBvaW50UGFpci0+TG9jYWxIb3N0TmFtZS0+Q2Fub25pY2FsTmFtZSArCisgICAgICAgICAgICAgICAgICAgICIgdG8gIiArIGVuZHBvaW50UGFpci0+UmVtb3RlSG9zdE5hbWUtPkNhbm9uaWNhbE5hbWUsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgICAgICAgICAgICAgT25Db25uZWN0aW9uKF9jbGllbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgICAgICAgICAiU3RhcnQgYmluZGluZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgICAgICAgICAgQ29yZUFwcGxpY2F0aW9uOjpQcm9wZXJ0aWVzLT5SZW1vdmUoImNsaWVudENvbnRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgiY2xpZW50Q29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZAorb3Q6OlN0cmVhbUNsaWVudENvbnRleHQ6OlNlbmRfQ2xpY2soCisgICAgUGxhdGZvcm06Ok9iamVjdF4gICAgICAgICAgICAgICAgICAgc2VuZGVyLAorICAgIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUsCisgICAgUGxhdGZvcm06OlN0cmluZ14gICAgICAgICAgICAgICAgICAgaW5wdXQpCit7CisgICAgU2VuZE1lc3NhZ2UoR2V0RGF0YVdyaXRlcigpLCBpbnB1dCk7Cit9CisKK0lBc3luY0FjdGlvbl4KK290OjpTdHJlYW1DbGllbnRDb250ZXh0OjpDYW5jZWxJTygpCit7CisgICAgcmV0dXJuIF9jbGllbnQtPkNhbmNlbElPQXN5bmMoKTsKK30KKwordm9pZAorU3RyZWFtQ2xpZW50Q29udGV4dDo6T25Db25uZWN0aW9uKAorICAgIFN0cmVhbVNvY2tldF4gc3RyZWFtU29ja2V0KQoreworICAgIFNldENvbm5lY3RlZCh0cnVlKTsKKyAgICBSZWNlaXZlTG9vcChzdHJlYW1Tb2NrZXQsIEdldERhdGFSZWFkZXIoKSk7Cit9CisKK3ZvaWQKK1N0cmVhbUNsaWVudENvbnRleHQ6OlNldENvbm5lY3RlZCgKKyAgICBib29sIGNvbm5lY3RlZCkKK3sKKyAgICBfY29ubmVjdGVkID0gY29ubmVjdGVkOworfQorCitib29sCitTdHJlYW1DbGllbnRDb250ZXh0OjpJc0Nvbm5lY3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIF9jb25uZWN0ZWQ7Cit9CisKK3ZvaWQKK1N0cmVhbUNsaWVudENvbnRleHQ6OlJlY2VpdmVMb29wKAorICAgIFN0cmVhbVNvY2tldF4gc3RyZWFtU29ja2V0LAorICAgIERhdGFSZWFkZXJeICAgZGF0YVJlYWRlcikKK3sKKyAgICAvLyBSZWFkIGZpcnN0IDQgYnl0ZXMgKGxlbmd0aCBvZiB0aGUgc3Vic2VxdWVudCBzdHJpbmcpLgorICAgIGNyZWF0ZV90YXNrKGRhdGFSZWFkZXItPkxvYWRBc3luYyhzaXplb2YoVUlOVDMyKSkpLnRoZW4oCisgICAgICAgIFt0aGlzLCBkYXRhUmVhZGVyXSh1bnNpZ25lZCBpbnQgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgc2l6ZW9mKFVJTlQzMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIHNvY2tldCB3YXMgY2xvc2VkIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgd2hvbGUgZGF0YS4KKyAgICAgICAgICAgIGNhbmNlbF9jdXJyZW50X3Rhc2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc3RyTGVuID0gZGF0YVJlYWRlci0+UmVhZFVJbnQzMigpOworICAgICAgICByZXR1cm4gY3JlYXRlX3Rhc2soZGF0YVJlYWRlci0+TG9hZEFzeW5jKHN0ckxlbikpLnRoZW4oCisgICAgICAgICAgICBbdGhpcywgZGF0YVJlYWRlciwgc3RyTGVuXSh1bnNpZ25lZCBpbnQgYWN0dWFsU3RyTGVuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWN0dWFsU3RyTGVuICE9IHN0ckxlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdW5kZXJseWluZyBzb2NrZXQgd2FzIGNsb3NlZCBiZWZvcmUgd2Ugd2VyZSBhYmxlIHRvIHJlYWQgdGhlIHdob2xlIGRhdGEuCisgICAgICAgICAgICAgICAgY2FuY2VsX2N1cnJlbnRfdGFzaygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWNlaXZlKGRhdGFSZWFkZXIsIHN0ckxlbik7CisgICAgICAgIH0pOworICAgIH0pLnRoZW4oW3RoaXMsIHN0cmVhbVNvY2tldCwgZGF0YVJlYWRlcl0odGFzazx2b2lkPiBwcmV2aW91c1Rhc2spCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYWxsIGV4Y2VwdGlvbnMgZnJvbSB0aGUgY29udGludWF0aW9uIGNoYWluIGFib3ZlIHRoaXMgcG9pbnQuCisgICAgICAgICAgICBwcmV2aW91c1Rhc2suZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgd2VudCBvaywgc28gdHJ5IHRvIHJlY2VpdmUgYW5vdGhlciBzdHJpbmcuIFRoZSByZWNlaXZlIHdpbGwgY29udGludWUgdW50aWwgdGhlIHN0cmVhbSBpcworICAgICAgICAgICAgLy8gYnJva2VuIChpLmUuIHBlZXIgY2xvc2VkIHRoZSBzb2NrZXQpLgorICAgICAgICAgICAgUmVjZWl2ZUxvb3Aoc3RyZWFtU29ja2V0LCBkYXRhUmVhZGVyKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgeworICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJSZWFkIHN0cmVhbSBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OkVycm9yKTsKKworICAgICAgICAgICAgLy8gRXhwbGljaXRseSBjbG9zZSB0aGUgc29ja2V0LgorICAgICAgICAgICAgZGVsZXRlIHN0cmVhbVNvY2tldDsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAodGFza19jYW5jZWxlZCYpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERvIG5vdCBwcmludCBhbnl0aGluZyBoZXJlIC0gdGhpcyB3aWxsIHVzdWFsbHkgaGFwcGVuIGJlY2F1c2UgdXNlciBjbG9zZWQgdGhlIGNsaWVudCBzb2NrZXQuCisKKyAgICAgICAgICAgIC8vIEV4cGxpY2l0bHkgY2xvc2UgdGhlIHNvY2tldC4KKyAgICAgICAgICAgIGRlbGV0ZSBzdHJlYW1Tb2NrZXQ7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZAorU3RyZWFtQ2xpZW50Q29udGV4dDo6UmVjZWl2ZSgKKyAgICBEYXRhUmVhZGVyXiAgZGF0YVJlYWRlciwKKyAgICB1bnNpZ25lZCBpbnQgc3RyTGVuKQoreworICAgIGlmICghc3RyTGVuKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbXNnID0gZGF0YVJlYWRlci0+UmVhZFN0cmluZyhzdHJMZW4pOworICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiUmVjZWl2ZWQgZGF0YSBmcm9tIHNlcnZlcjogXCIiICsgbXNnICsgIlwiIiwKKyAgICAgICAgTm90aWZ5VHlwZTo6U3RhdHVzKTsKK30KKwordm9pZAorU3RyZWFtQ2xpZW50Q29udGV4dDo6U2VuZE1lc3NhZ2UoCisgICAgRGF0YVdyaXRlcl4gZGF0YVdyaXRlciwKKyAgICBTdHJpbmdeICAgICBtc2cpCit7CisgICAgaWYgKCFJc0Nvbm5lY3RlZCgpKQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJUaGlzIHNvY2tldCBpcyBub3QgeWV0IGNvbm5lY3RlZC4iLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGRhdGFXcml0ZXItPldyaXRlVUludDMyKG1zZy0+TGVuZ3RoKCkpOworICAgICAgICBkYXRhV3JpdGVyLT5Xcml0ZVN0cmluZyhtc2cpOworICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlNlbmRpbmcgLSAiICsgbXNnLCBOb3RpZnlUeXBlOjpTdGF0dXMpOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICB7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiU2VuZGluZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIGxvY2FsbHkgYnVmZmVyZWQgZGF0YSB0byB0aGUgbmV0d29yay4gUGxlYXNlIG5vdGUgdGhhdCB3cml0ZSBvcGVyYXRpb24gd2lsbCBzdWNjZWVkCisgICAgLy8gZXZlbiBpZiB0aGUgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcuCisgICAgY3JlYXRlX3Rhc2soZGF0YVdyaXRlci0+U3RvcmVBc3luYygpKS50aGVuKAorICAgICAgICBbdGhpc10odGFzazx1bnNpZ25lZCBpbnQ+IHdyaXRlVGFzaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICB3cml0ZVRhc2suZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiU2VuZCBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLCBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVJlYWRlcl4KK1N0cmVhbUNsaWVudENvbnRleHQ6OkdldERhdGFSZWFkZXIoKQoreworICAgIGlmIChfZGF0YVJlYWRlciA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgX2RhdGFSZWFkZXIgPSByZWYgbmV3IERhdGFSZWFkZXIoX2NsaWVudC0+SW5wdXRTdHJlYW0pOworICAgIH0KKworICAgIHJldHVybiBfZGF0YVJlYWRlcjsKK30KKworV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVdyaXRlcl4KK1N0cmVhbUNsaWVudENvbnRleHQ6OkdldERhdGFXcml0ZXIoKQoreworICAgIGlmIChfZGF0YVdyaXRlciA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgX2RhdGFXcml0ZXIgPSByZWYgbmV3IERhdGFXcml0ZXIoX2NsaWVudC0+T3V0cHV0U3RyZWFtKTsKKyAgICB9CisKKyAgICByZXR1cm4gX2RhdGFXcml0ZXI7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtQ2xpZW50Q29udGV4dC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTExODIzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUNsaWVudENvbnRleHQuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklDbGllbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiSUFzeW5jVGhyZWFkTm90aWZ5LmgiCisjaW5jbHVkZSAiQ2xpZW50QXJncy5oIgorCituYW1lc3BhY2Ugb3QKK3sKKworW1dpbmRvd3M6OkZvdW5kYXRpb246Ok1ldGFkYXRhOjpXZWJIb3N0SGlkZGVuXQorcHVibGljIHJlZiBjbGFzcyBTdHJlYW1DbGllbnRDb250ZXh0IHNlYWxlZCA6IHB1YmxpYyBJQ2xpZW50Q29udGV4dAoreworcHVibGljOgorICAgIHVzaW5nIFN0cmVhbVNvY2tldCA9IFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM6OlN0cmVhbVNvY2tldDsKKworICAgIFN0cmVhbUNsaWVudENvbnRleHQoSUFzeW5jVGhyZWFkTm90aWZ5XiBub3RpZnksIFN0cmVhbVNvY2tldF4gY2xpZW50LCBDbGllbnRBcmdzXiBhcmdzKTsKKyAgICB2aXJ0dWFsIH5TdHJlYW1DbGllbnRDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgQ29ubmVjdF9DbGljayhQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgdmlydHVhbCB2b2lkIFNlbmRfQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlLCBQbGF0Zm9ybTo6U3RyaW5nXiBpbnB1dCk7CisKKyAgICB2aXJ0dWFsIFdpbmRvd3M6OkZvdW5kYXRpb246OklBc3luY0FjdGlvbl4gQ2FuY2VsSU8oKTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhUmVhZGVyID0gV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVJlYWRlcjsKKyAgICB1c2luZyBEYXRhV3JpdGVyID0gV2luZG93czo6U3RvcmFnZTo6U3RyZWFtczo6RGF0YVdyaXRlcjsKKyAgICB1c2luZyBBcmdzID0gQ2xpZW50QXJnczsKKworICAgIHZvaWQgT25Db25uZWN0aW9uKFN0cmVhbVNvY2tldF4pOworCisgICAgdm9pZCBTZXRDb25uZWN0ZWQoYm9vbCBjb25uZWN0ZWQpOworICAgIGJvb2wgSXNDb25uZWN0ZWQoKSBjb25zdDsKKworICAgIHZvaWQgUmVjZWl2ZUxvb3AoU3RyZWFtU29ja2V0XiwgRGF0YVJlYWRlcl4pOworICAgIHZvaWQgUmVjZWl2ZShEYXRhUmVhZGVyXiwgdW5zaWduZWQgaW50IHN0ckxlbik7CisKKyAgICB2b2lkIFNlbmRNZXNzYWdlKERhdGFXcml0ZXJeLCBTdHJpbmdeIG1zZyk7CisKKyAgICBEYXRhUmVhZGVyXiBHZXREYXRhUmVhZGVyKCk7CisgICAgRGF0YVdyaXRlcl4gR2V0RGF0YVdyaXRlcigpOworCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiBfbm90aWZ5OworICAgIFN0cmVhbVNvY2tldF4gICAgICAgX2NsaWVudDsKKyAgICBBcmdzXiAgICAgICAgICAgICAgIF9hcmdzOworICAgIGJvb2wgICAgICAgICAgICAgICAgX2Nvbm5lY3RlZCA9IGZhbHNlOworICAgIERhdGFSZWFkZXJeICAgICAgICAgX2RhdGFSZWFkZXI7CisgICAgRGF0YVdyaXRlcl4gICAgICAgICBfZGF0YVdyaXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtTGlzdGVuZXJDb250ZXh0LmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TdHJlYW1MaXN0ZW5lckNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTIwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvU3RyZWFtTGlzdGVuZXJDb250ZXh0LmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSAiU3RyZWFtTGlzdGVuZXJDb250ZXh0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordXNpbmcgbmFtZXNwYWNlIENvbmN1cnJlbmN5OwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6Rm91bmRhdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpOZXR3b3JraW5nOjpTb2NrZXRzOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpTdHJlYW1MaXN0ZW5lckNvbnRleHQoCisgICAgSUFzeW5jVGhyZWFkTm90aWZ5XiAgIG5vdGlmeSwKKyAgICBTdHJlYW1Tb2NrZXRMaXN0ZW5lcl4gbGlzdGVuZXIsCisgICAgTGlzdGVuZXJBcmdzXiAgICAgICAgIGFyZ3MpIDoKKyAgICBfbm90aWZ5eyBzdGQ6Om1vdmUobm90aWZ5KSB9LAorICAgIF9saXN0ZW5lcnsgc3RkOjptb3ZlKGxpc3RlbmVyKSB9LAorICAgIF9hcmdzeyBzdGQ6Om1vdmUoYXJncykgfQoreworfQorCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6On5TdHJlYW1MaXN0ZW5lckNvbnRleHQoKQoreworICAgIC8vIEEgTGlzdGVuZXIgY2FuIGJlIGNsb3NlZCBpbiB0d28gd2F5czoKKyAgICAvLyAgLSBleHBsaWNpdGx5OiB1c2luZyB0aGUgJ2RlbGV0ZScga2V5d29yZCAobGlzdGVuZXIgaXMgY2xvc2VkIGV2ZW4gaWYgdGhlcmUgYXJlIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gaXQpLgorICAgIC8vICAtIGltcGxpY2l0bHk6IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBpdCAoaS5lLiwgZmFsbGluZyBvdXQtb2Ytc2NvcGUpLgorICAgIC8vCisgICAgLy8gV2hlbiBhIFNvY2tldCBpcyBjbG9zZWQgaW1wbGljaXRseSwgaXQgY2FuIHRha2Ugc2V2ZXJhbCBzZWNvbmRzIGZvciB0aGUgbG9jYWwgcG9ydCBiZWluZyB1c2VkCisgICAgLy8gYnkgaXQgdG8gYmUgZnJlZWQvcmVjbGFpbWVkIGJ5IHRoZSBsb3dlciBuZXR3b3JraW5nIGxheWVycy4gRHVyaW5nIHRoYXQgdGltZSwgb3RoZXIgc29ja2V0cyBvbiB0aGUgbWFjaGluZQorICAgIC8vIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoZSBwb3J0LiBUaHVzLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IFNvY2tldCBpbnN0YW5jZXMgYmUgZXhwbGljaXRseQorICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBnbyBvdXQgb2Ygc2NvcGUoZS5nLiwgYmVmb3JlIGFwcGxpY2F0aW9uIGV4aXQpLiBUaGUgY2FsbCBiZWxvdyBleHBsaWNpdGx5IGNsb3NlcyB0aGUgc29ja2V0LgorICAgIGlmIChfbGlzdGVuZXIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGRlbGV0ZSBfbGlzdGVuZXI7CisgICAgICAgIF9saXN0ZW5lciA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6Okxpc3Rlbl9DbGljaygKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgdGFzazx2b2lkPiByZW1vdmVDb250ZXh0OworCisgICAgaWYgKENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SGFzS2V5KCJsaXN0ZW5lckNvbnRleHQiKSkKKyAgICB7CisgICAgICAgIGF1dG8gbGlzdGVuZXJDb250ZXh0ID0gZHluYW1pY19jYXN0PElMaXN0ZW5lckNvbnRleHRePigKKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+TG9va3VwKCJsaXN0ZW5lckNvbnRleHQiKSk7CisgICAgICAgIGlmIChsaXN0ZW5lckNvbnRleHQgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgcmVmIG5ldyBGYWlsdXJlRXhjZXB0aW9uKEwiTm8gbGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0KKworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2sobGlzdGVuZXJDb250ZXh0LT5DYW5jZWxJTygpKS50aGVuKAorICAgICAgICAgICAgW10oKQorICAgICAgICB7CisgICAgICAgICAgICBDb3JlQXBwbGljYXRpb246OlByb3BlcnRpZXMtPlJlbW92ZSgibGlzdGVuZXJDb250ZXh0Iik7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZW1vdmVDb250ZXh0ID0gY3JlYXRlX3Rhc2soW10oKSB7fSk7CisgICAgfQorCisgICAgX2xpc3RlbmVyLT5Db25uZWN0aW9uUmVjZWl2ZWQgKz0gcmVmIG5ldyBDb25uZWN0aW9uSGFuZGxlcigKKyAgICAgICAgdGhpcywgJlN0cmVhbUxpc3RlbmVyQ29udGV4dDo6T25Db25uZWN0aW9uKTsKKworICAgIHJlbW92ZUNvbnRleHQudGhlbihbdGhpc10odGFzazx2b2lkPiBwcmV2VGFzaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICBwcmV2VGFzay5nZXQoKTsKKworICAgICAgICAgICAgLy8gRXZlbnRzIGNhbm5vdCBiZSBob29rZWQgdXAgZGlyZWN0bHkgdG8gdGhlIFNjZW5hcmlvSW5wdXQxIG9iamVjdCwgYXMgdGhlIG9iamVjdCBjYW4gZmFsbCBvdXQtb2Ytc2NvcGUgYW5kIGJlCisgICAgICAgICAgICAvLyBkZWxldGVkLiBUaGlzIHdvdWxkIHJlbmRlciBhbnkgZXZlbnQgaG9va2VkIHVwIHRvIHRoZSBvYmplY3QgaW5lZmZlY3RpdmUuIFRoZSBMaXN0ZW5lckNvbnRleHQgZ3VhcmFudGVlcyB0aGF0CisgICAgICAgICAgICAvLyBib3RoIHRoZSBsaXN0ZW5lciBhbmQgb2JqZWN0IHRoYXQgc2VydmVzIGl0cyBldmVudHMgaGF2ZSB0aGUgc2FtZSBsaWZldGltZS4KKyAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+SW5zZXJ0KCJsaXN0ZW5lckNvbnRleHQiLCB0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgeworICAgICAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKAorICAgICAgICAgICAgICAgICJSZW1vdmUgbGlzdGVuZXJDb250ZXh0IGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfSkudGhlbihbdGhpc10oKQorICAgIHsKKyAgICAgICAgX25vdGlmeS0+Tm90aWZ5RnJvbUFzeW5jVGhyZWFkKCJTdGFydCBsaXN0ZW5pbmciLCBOb3RpZnlUeXBlOjpTdGF0dXMpOworCisgICAgICAgIGNyZWF0ZV90YXNrKF9saXN0ZW5lci0+QmluZEVuZHBvaW50QXN5bmMoX2FyZ3MtPlNlcnZlckhvc3ROYW1lLCBfYXJncy0+U2VydmVyUG9ydCkpLnRoZW4oCisgICAgICAgICAgICBbdGhpc10odGFzazx2b2lkPiBwcmV2VGFzaykKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgIHByZXZUYXNrLmdldCgpOworICAgICAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgKKyAgICAgICAgICAgICAgICAgICAgIkxpc3RlbmluZyBvbiBhZGRyZXNzICIgKyBfYXJncy0+U2VydmVySG9zdE5hbWUtPkNhbm9uaWNhbE5hbWUsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJTdGFydCBsaXN0ZW5pbmcgZmFpbGVkIHdpdGggZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgICAgICAgICAgICAgIENvcmVBcHBsaWNhdGlvbjo6UHJvcGVydGllcy0+UmVtb3ZlKCJsaXN0ZW5lckNvbnRleHQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK0lBc3luY0FjdGlvbl4KK1N0cmVhbUxpc3RlbmVyQ29udGV4dDo6Q2FuY2VsSU8oKQoreworICAgIHJldHVybiBfbGlzdGVuZXItPkNhbmNlbElPQXN5bmMoKTsKK30KKwordm9pZAorU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpPbkNvbm5lY3Rpb24oCisgICAgU3RyZWFtU29ja2V0TGlzdGVuZXJeICAgICAgICBsaXN0ZW5lciwKKyAgICBDb25uZWN0aW9uUmVjZWl2ZWRFdmVudEFyZ3NeIGFyZ3MpCit7CisgICAgYXV0byBkYXRhUmVhZGVyID0gcmVmIG5ldyBEYXRhUmVhZGVyKGFyZ3MtPlNvY2tldC0+SW5wdXRTdHJlYW0pOworICAgIGF1dG8gZGF0YVdyaXRlciA9IHJlZiBuZXcgRGF0YVdyaXRlcihhcmdzLT5Tb2NrZXQtPk91dHB1dFN0cmVhbSk7CisKKyAgICBSZWNlaXZlTG9vcChhcmdzLT5Tb2NrZXQsIGRhdGFSZWFkZXIsIGRhdGFXcml0ZXIpOworfQorCit2b2lkCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6OlJlY2VpdmVMb29wKAorICAgIFN0cmVhbVNvY2tldF4gc3RyZWFtU29ja2V0LAorICAgIERhdGFSZWFkZXJeICAgZGF0YVJlYWRlciwKKyAgICBEYXRhV3JpdGVyXiAgIGRhdGFXcml0ZXIpCit7CisgICAgLy8gUmVhZCBmaXJzdCA0IGJ5dGVzIChsZW5ndGggb2YgdGhlIHN1YnNlcXVlbnQgc3RyaW5nKS4KKyAgICBjcmVhdGVfdGFzayhkYXRhUmVhZGVyLT5Mb2FkQXN5bmMoc2l6ZW9mKFVJTlQzMikpKS50aGVuKAorICAgICAgICBbdGhpcywgc3RyZWFtU29ja2V0LCBkYXRhUmVhZGVyLCBkYXRhV3JpdGVyXSh1bnNpZ25lZCBpbnQgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDwgc2l6ZW9mKFVJTlQzMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIHNvY2tldCB3YXMgY2xvc2VkIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgd2hvbGUgZGF0YS4KKyAgICAgICAgICAgIGNhbmNlbF9jdXJyZW50X3Rhc2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGludCBzdHJMZW4gPSBkYXRhUmVhZGVyLT5SZWFkVUludDMyKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVfdGFzayhkYXRhUmVhZGVyLT5Mb2FkQXN5bmMoc3RyTGVuKSkudGhlbigKKyAgICAgICAgICAgIFt0aGlzLCBkYXRhUmVhZGVyLCBkYXRhV3JpdGVyLCBzdHJMZW5dKHVuc2lnbmVkIGludCBhY3R1YWxTdHJMZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhY3R1YWxTdHJMZW4gIT0gc3RyTGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIHNvY2tldCB3YXMgY2xvc2VkIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgd2hvbGUgZGF0YS4KKyAgICAgICAgICAgICAgICBjYW5jZWxfY3VycmVudF90YXNrKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlY2VpdmUoZGF0YVJlYWRlciwgc3RyTGVuLCBkYXRhV3JpdGVyKTsKKyAgICAgICAgfSk7CisgICAgfSkudGhlbihbdGhpcywgc3RyZWFtU29ja2V0LCBkYXRhUmVhZGVyLCBkYXRhV3JpdGVyXSh0YXNrPHZvaWQ+IHByZXZpb3VzVGFzaykKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUcnkgZ2V0dGluZyBhbGwgZXhjZXB0aW9ucyBmcm9tIHRoZSBjb250aW51YXRpb24gY2hhaW4gYWJvdmUgdGhpcyBwb2ludC4KKyAgICAgICAgICAgIHByZXZpb3VzVGFzay5nZXQoKTsKKworICAgICAgICAgICAgLy8gRXZlcnl0aGluZyB3ZW50IG9rLCBzbyB0cnkgdG8gcmVjZWl2ZSBhbm90aGVyIHN0cmluZy4gVGhlIHJlY2VpdmUgd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgc3RyZWFtIGlzCisgICAgICAgICAgICAvLyBicm9rZW4gKGkuZS4gcGVlciBjbG9zZWQgdGhlIHNvY2tldCkuCisgICAgICAgICAgICBSZWNlaXZlTG9vcChzdHJlYW1Tb2NrZXQsIGRhdGFSZWFkZXIsIGRhdGFXcml0ZXIpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChFeGNlcHRpb25eIGV4KQorICAgICAgICB7CisgICAgICAgICAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlJlYWQgc3RyZWFtIGZhaWxlZCB3aXRoIGVycm9yOiAiICsgZXgtPk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworCisgICAgICAgICAgICAvLyBFeHBsaWNpdGx5IGNsb3NlIHRoZSBzb2NrZXQuCisgICAgICAgICAgICBkZWxldGUgc3RyZWFtU29ja2V0OworICAgICAgICB9CisgICAgICAgIGNhdGNoICh0YXNrX2NhbmNlbGVkJikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG8gbm90IHByaW50IGFueXRoaW5nIGhlcmUgLSB0aGlzIHdpbGwgdXN1YWxseSBoYXBwZW4gYmVjYXVzZSB1c2VyIGNsb3NlZCB0aGUgY2xpZW50IHNvY2tldC4KKworICAgICAgICAgICAgLy8gRXhwbGljaXRseSBjbG9zZSB0aGUgc29ja2V0LgorICAgICAgICAgICAgZGVsZXRlIHN0cmVhbVNvY2tldDsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkCitTdHJlYW1MaXN0ZW5lckNvbnRleHQ6OlJlY2VpdmUoCisgICAgRGF0YVJlYWRlcl4gIGRhdGFSZWFkZXIsCisgICAgdW5zaWduZWQgaW50IHN0ckxlbiwKKyAgICBEYXRhV3JpdGVyXiAgZGF0YVdyaXRlcikKK3sKKyAgICBpZiAoIXN0ckxlbikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIG1zZyA9IGRhdGFSZWFkZXItPlJlYWRTdHJpbmcoc3RyTGVuKTsKKyAgICBfbm90aWZ5LT5Ob3RpZnlGcm9tQXN5bmNUaHJlYWQoIlJlY2VpdmVkIGRhdGEgZnJvbSBjbGllbnQ6IFwiIiArIG1zZyArICJcIiIsCisgICAgICAgIE5vdGlmeVR5cGU6OlN0YXR1cyk7CisgICAgYXV0byBlY2hvID0gQ3JlYXRlRWNob01lc3NhZ2UobXNnKTsKKyAgICBFY2hvTWVzc2FnZShkYXRhV3JpdGVyLCBlY2hvKTsKK30KKworU3RyaW5nXgorU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpDcmVhdGVFY2hvTWVzc2FnZSgKKyAgICBTdHJpbmdeIG1zZykKK3sKKyAgICB3Y2hhcl90IGJ1ZlsyNTZdOworICAgIGF1dG8gbGVuID0gc3dwcmludGZfcyhidWYsIEwiU2VydmVyJXMgcmVjZWl2ZWQgZGF0YSBmcm9tIGNsaWVudCA6IFwiJXNcIiIsCisgICAgICAgIF9hcmdzLT5TZXJ2ZXJOYW1lLT5Jc0VtcHR5KCkgPyBMIiIgOiAoIiAiICsgX2FyZ3MtPlNlcnZlck5hbWUpLT5EYXRhKCksIG1zZy0+RGF0YSgpKTsKKworICAgIGxlbiArPSBzd3ByaW50Zl9zKCZidWZbbGVuXSwgX2NvdW50b2YoYnVmKSAtIGxlbiwgTCIgLSBnb3QgJWQgY2hhcnMiLAorICAgICAgICBtc2ctPkxlbmd0aCgpKTsKKyAgICByZXR1cm4gcmVmIG5ldyBTdHJpbmcoYnVmKTsKK30KKwordm9pZAorU3RyZWFtTGlzdGVuZXJDb250ZXh0OjpFY2hvTWVzc2FnZSgKKyAgICBEYXRhV3JpdGVyXiBkYXRhV3JpdGVyLAorICAgIFN0cmluZ14gICAgIGVjaG8pCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBkYXRhV3JpdGVyLT5Xcml0ZVVJbnQzMihlY2hvLT5MZW5ndGgoKSk7CisgICAgICAgIGRhdGFXcml0ZXItPldyaXRlU3RyaW5nKGVjaG8pOworICAgIH0KKyAgICBjYXRjaCAoRXhjZXB0aW9uXiBleCkKKyAgICB7CisgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiRWNob2luZyBmYWlsZWQgd2l0aCBlcnJvcjogIiArIGV4LT5NZXNzYWdlLAorICAgICAgICAgICAgTm90aWZ5VHlwZTo6RXJyb3IpOworICAgIH0KKworICAgIGNyZWF0ZV90YXNrKGRhdGFXcml0ZXItPlN0b3JlQXN5bmMoKSkudGhlbigKKyAgICAgICAgW3RoaXNdKHRhc2s8dW5zaWduZWQgaW50PiB3cml0ZVRhc2spCisgICAgeworICAgICAgICB0cnkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHJ5IGdldHRpbmcgYWxsIGV4Y2VwdGlvbnMgZnJvbSB0aGUgY29udGludWF0aW9uIGNoYWluIGFib3ZlIHRoaXMgcG9pbnQuCisgICAgICAgICAgICB3cml0ZVRhc2suZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbl4gZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIF9ub3RpZnktPk5vdGlmeUZyb21Bc3luY1RocmVhZCgiRWNobyBtZXNzYWdlIHdpdGggYW4gZXJyb3I6ICIgKyBleC0+TWVzc2FnZSwKKyAgICAgICAgICAgICAgICBOb3RpZnlUeXBlOjpFcnJvcik7CisgICAgICAgIH0KKyAgICB9KTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TdHJlYW1MaXN0ZW5lckNvbnRleHQuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9TdHJlYW1MaXN0ZW5lckNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlhZmZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1N0cmVhbUxpc3RlbmVyQ29udGV4dC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSUxpc3RlbmVyQ29udGV4dC5oIgorI2luY2x1ZGUgIklBc3luY1RocmVhZE5vdGlmeS5oIgorI2luY2x1ZGUgIkxpc3RlbmVyQXJncy5oIgorCituYW1lc3BhY2Ugb3QKK3sKKworW1dpbmRvd3M6OkZvdW5kYXRpb246Ok1ldGFkYXRhOjpXZWJIb3N0SGlkZGVuXQorcHVibGljIHJlZiBjbGFzcyBTdHJlYW1MaXN0ZW5lckNvbnRleHQgc2VhbGVkIDogcHVibGljIElMaXN0ZW5lckNvbnRleHQKK3sKK3B1YmxpYzoKKyAgICB1c2luZyBTdHJlYW1Tb2NrZXRMaXN0ZW5lciA9IFdpbmRvd3M6Ok5ldHdvcmtpbmc6OlNvY2tldHM6OlN0cmVhbVNvY2tldExpc3RlbmVyOworCisgICAgU3RyZWFtTGlzdGVuZXJDb250ZXh0KElBc3luY1RocmVhZE5vdGlmeV4gbm90aWZ5LCBTdHJlYW1Tb2NrZXRMaXN0ZW5lcl4gbGlzdGVuZXIsIExpc3RlbmVyQXJnc14gYXJncyk7CisgICAgdmlydHVhbCB+U3RyZWFtTGlzdGVuZXJDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgTGlzdGVuX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7CisKKyAgICB2aXJ0dWFsIFdpbmRvd3M6OkZvdW5kYXRpb246OklBc3luY0FjdGlvbl4gQ2FuY2VsSU8oKTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBDb25uZWN0aW9uUmVjZWl2ZWRFdmVudEFyZ3MgPSBXaW5kb3dzOjpOZXR3b3JraW5nOjpTb2NrZXRzOjpTdHJlYW1Tb2NrZXRMaXN0ZW5lckNvbm5lY3Rpb25SZWNlaXZlZEV2ZW50QXJnczsKKyAgICB1c2luZyBDb25uZWN0aW9uSGFuZGxlciA9IFdpbmRvd3M6OkZvdW5kYXRpb246OlR5cGVkRXZlbnRIYW5kbGVyPFN0cmVhbVNvY2tldExpc3RlbmVyXiwgQ29ubmVjdGlvblJlY2VpdmVkRXZlbnRBcmdzXj47CisgICAgdXNpbmcgRGF0YVJlYWRlciA9IFdpbmRvd3M6OlN0b3JhZ2U6OlN0cmVhbXM6OkRhdGFSZWFkZXI7CisgICAgdXNpbmcgRGF0YVdyaXRlciA9IFdpbmRvd3M6OlN0b3JhZ2U6OlN0cmVhbXM6OkRhdGFXcml0ZXI7CisgICAgdXNpbmcgTGlzdGVuZXIgPSBTdHJlYW1Tb2NrZXRMaXN0ZW5lcjsKKyAgICB1c2luZyBTdHJlYW1Tb2NrZXQgPSBXaW5kb3dzOjpOZXR3b3JraW5nOjpTb2NrZXRzOjpTdHJlYW1Tb2NrZXQ7CisgICAgdXNpbmcgQXJncyA9IExpc3RlbmVyQXJnczsKKworICAgIHZvaWQgT25Db25uZWN0aW9uKFN0cmVhbVNvY2tldExpc3RlbmVyXiBsaXN0ZW5lciwgQ29ubmVjdGlvblJlY2VpdmVkRXZlbnRBcmdzXiBhcmdzKTsKKyAgICB2b2lkIFJlY2VpdmVMb29wKFN0cmVhbVNvY2tldF4sIERhdGFSZWFkZXJeLCBEYXRhV3JpdGVyXik7CisgICAgdm9pZCBSZWNlaXZlKERhdGFSZWFkZXJeLCB1bnNpZ25lZCBpbnQgc3RyTGVuLCBEYXRhV3JpdGVyXik7CisgICAgU3RyaW5nXiBDcmVhdGVFY2hvTWVzc2FnZShTdHJpbmdeIG1zZyk7CisgICAgdm9pZCBFY2hvTWVzc2FnZShEYXRhV3JpdGVyXiwgU3RyaW5nXiBlY2hvKTsKKworICAgIElBc3luY1RocmVhZE5vdGlmeV4gX25vdGlmeTsKKyAgICBMaXN0ZW5lcl4gICAgICAgICAgIF9saXN0ZW5lcjsKKyAgICBBcmdzXiAgICAgICAgICAgICAgIF9hcmdzOworfTsKKworfSAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrQ29uc3RzLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0NvbnN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMGZhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0NvbnN0cy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ugb3QKK3sKKworc3RydWN0IFRhbGtDb25zdHMKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNob3J0IERFRl9TRVJWRVJfUE9SVCA9IDUxMDAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2hvcnQgREVGX0NMSUVOVF9QT1JUX0lOSVQgPSA1MTEwMDsKK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0dyaWQueGFtbCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrR3JpZC54YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGFhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0dyaWQueGFtbApAQCAtMCwwICsxLDEwOCBAQAor77u/PCEtLQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzxHcmlkCisgICAgeDpDbGFzcz0ib3QuVGFsa0dyaWQiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiIKKyAgICB4bWxuczp4PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbCIKKyAgICB4bWxuczpsb2NhbD0idXNpbmc6b3QiCisgICAgeG1sbnM6ZD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9leHByZXNzaW9uL2JsZW5kLzIwMDgiCisgICAgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IgorICAgIG1jOklnbm9yYWJsZT0iZCI+CisgICAgPEdyaWQuUm93RGVmaW5pdGlvbnM+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iKiIvPgorICAgICAgICA8Um93RGVmaW5pdGlvbiBIZWlnaHQ9IjIwIi8+CisgICAgICAgIDxSb3dEZWZpbml0aW9uIEhlaWdodD0iQXV0byIvPgorICAgIDwvR3JpZC5Sb3dEZWZpbml0aW9ucz4KKyAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgR3JpZC5Sb3c9IjAiCisgICAgICAgICAgICBPcmllbnRhdGlvbj0iSG9yaXpvbnRhbCIKKyAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICA+CisgICAgICAgIDxSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgIHg6TmFtZT0iVGNwUmFkaW8iCisgICAgICAgICAgICAgICAgQ29udGVudD0iVENQIgorICAgICAgICAgICAgICAgIEdyb3VwTmFtZT0iUHJvdG9jb2xHcm91cCIKKyAgICAgICAgICAgICAgICBDaGVja2VkPSJQcm90b2NvbF9DaGFuZ2VkIgorICAgICAgICAgICAgICAgIE1hcmdpbj0iMCwwLDIwLDAiCisgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgPFJhZGlvQnV0dG9uCisgICAgICAgICAgICAgICAgeDpOYW1lPSJVZHBSYWRpbyIKKyAgICAgICAgICAgICAgICBDb250ZW50PSJVRFAiCisgICAgICAgICAgICAgICAgR3JvdXBOYW1lPSJQcm90b2NvbEdyb3VwIgorICAgICAgICAgICAgICAgIENoZWNrZWQ9IlByb3RvY29sX0NoYW5nZWQiCisgICAgICAgICAgICAgICAgTWFyZ2luPSIwLDAsMjAsMCIKKyAgICAgICAgICAgICAgICAvPgorICAgIDwvU3RhY2tQYW5lbD4KKyAgICA8U3RhY2tQYW5lbAorICAgICAgICAgICAgR3JpZC5Sb3c9IjIiCisgICAgICAgICAgICBPcmllbnRhdGlvbj0iSG9yaXpvbnRhbCIKKyAgICAgICAgICAgIFZlcnRpY2FsQWxpZ25tZW50PSJUb3AiCisgICAgICAgICAgICA+CisgICAgICAgIDxSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgIHg6TmFtZT0iU2VydmVyUmFkaW8iCisgICAgICAgICAgICAgICAgQ29udGVudD0iU2VydmVyIgorICAgICAgICAgICAgICAgIEdyb3VwTmFtZT0iUm9sZUdyb3VwIgorICAgICAgICAgICAgICAgIENoZWNrZWQ9IlJvbGVfQ2hhbmdlZCIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjAsMCwyMCwwIgorICAgICAgICAgICAgICAgIC8+CisgICAgICAgIDxSYWRpb0J1dHRvbgorICAgICAgICAgICAgICAgIHg6TmFtZT0iQ2xpZW50UmFkaW8iCisgICAgICAgICAgICAgICAgQ29udGVudD0iQ2xpZW50IgorICAgICAgICAgICAgICAgIEdyb3VwTmFtZT0iUm9sZUdyb3VwIgorICAgICAgICAgICAgICAgIENoZWNrZWQ9IlJvbGVfQ2hhbmdlZCIKKyAgICAgICAgICAgICAgICBNYXJnaW49IjAsMCwyMCwwIgorICAgICAgICAgICAgICAgIC8+CisgICAgPC9TdGFja1BhbmVsPgorICAgIDxsb2NhbDpTZXJ2ZXJDb250cm9sCisgICAgICAgIHg6TmFtZT0iU2VydmVyUm9sZSIKKyAgICAgICAgR3JpZC5Sb3c9IjQiCisgICAgICAgIFZpc2liaWxpdHk9IkNvbGxhcHNlZCIKKyAgICAgICAgLz4KKyAgICA8bG9jYWw6Q2xpZW50Q29udHJvbAorICAgICAgICB4Ok5hbWU9IkNsaWVudFJvbGUiCisgICAgICAgIEdyaWQuUm93PSI0IgorICAgICAgICBWaXNpYmlsaXR5PSJDb2xsYXBzZWQiCisgICAgICAgIC8+CisgICAgPEJvcmRlcgorICAgICAgICB4Ok5hbWU9IlN0YXR1c0JvcmRlciIKKyAgICAgICAgR3JpZC5Sb3c9IjYiCisgICAgICAgID4KKyAgICAgICAgPFRleHRCbG9jaworICAgICAgICAgICAgeDpOYW1lPSJTdGF0dXNCbG9jayIKKyAgICAgICAgICAgIEZvbnRXZWlnaHQ9IkJvbGQiCisgICAgICAgICAgICBUZXh0PSIiCisgICAgICAgICAgICBGb250U2l6ZT0iMTYiCisgICAgICAgICAgICBUZXh0V3JhcHBpbmc9IldyYXAiCisgICAgICAgICAgICBNYXhIZWlnaHQ9IjgwIgorICAgICAgICAgICAgLz4KKyAgICA8L0JvcmRlcj4KKzwvR3JpZD4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrR3JpZC54YW1sLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrR3JpZC54YW1sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJjMjZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtHcmlkLnhhbWwuY3BwCkBAIC0wLDAgKzEsMTUwIEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGNoLmgiCisjaW5jbHVkZSAiVGFsa0dyaWQueGFtbC5oIgorI2luY2x1ZGUgIkNsaWVudENvbnRyb2wueGFtbC5oIgorI2luY2x1ZGUgIlNlcnZlckNvbnRyb2wueGFtbC5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VzaW5nIG5hbWVzcGFjZSBQbGF0Zm9ybTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkZvdW5kYXRpb246OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpDb250cm9sczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OlByaW1pdGl2ZXM7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkRhdGE7Cit1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OklucHV0OwordXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OlVJOjpYYW1sOjpNZWRpYTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6WGFtbDo6TmF2aWdhdGlvbjsKKworLy8gVGhlIFVzZXIgQ29udHJvbCBpdGVtIHRlbXBsYXRlIGlzIGRvY3VtZW50ZWQgYXQgaHR0cDovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9MaW5rSWQ9MjM0MjM2CisKK1RhbGtHcmlkOjpUYWxrR3JpZCgpCit7CisgICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOworCisgICAgVGNwUmFkaW8tPklzQ2hlY2tlZCA9IHRydWU7CisgICAgU2VydmVyUmFkaW8tPklzQ2hlY2tlZCA9IHRydWU7Cit9CisKKwordm9pZAorVGFsa0dyaWQ6OkluaXQoCisgICAgSU1haW5QYWdlVUlFbGVtZW50c14gbWFpblBhZ2VVSUVsZW1lbnRzKQoreworICAgIFNlcnZlclJvbGUtPkluaXQodGhpcywgbWFpblBhZ2VVSUVsZW1lbnRzKTsKKyAgICBDbGllbnRSb2xlLT5Jbml0KHRoaXMsIG1haW5QYWdlVUlFbGVtZW50cyk7Cit9CisKK3ZvaWQKK1RhbGtHcmlkOjpOb3RpZnlGcm9tQXN5bmNUaHJlYWQoCisgICAgU3RyaW5nXiAgICBtZXNzYWdlLAorICAgIE5vdGlmeVR5cGUgdHlwZSkKK3sKKyAgICBEaXNwYXRjaGVyLT5SdW5Bc3luYyhDb3JlRGlzcGF0Y2hlclByaW9yaXR5OjpOb3JtYWwsCisgICAgICAgIHJlZiBuZXcgRGlzcGF0Y2hlZEhhbmRsZXIoW3RoaXMsIG1lc3NhZ2UsIHR5cGVdKCkKKyAgICB7CisgICAgICAgIE5vdGlmeShtZXNzYWdlLCB0eXBlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQKK1RhbGtHcmlkOjpOb3RpZnkoCisgICAgU3RyaW5nXiAgICBtZXNzYWdlLAorICAgIE5vdGlmeVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2UgTm90aWZ5VHlwZTo6U3RhdHVzOgorICAgICAgICBTdGF0dXNCb3JkZXItPkJhY2tncm91bmQgPSByZWYgbmV3IFNvbGlkQ29sb3JCcnVzaChDb2xvcnM6OkdyZWVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RpZnlUeXBlOjpFcnJvcjoKKyAgICAgICAgU3RhdHVzQm9yZGVyLT5CYWNrZ3JvdW5kID0gcmVmIG5ldyBTb2xpZENvbG9yQnJ1c2goQ29sb3JzOjpSZWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBTdGF0dXNCbG9jay0+VGV4dCA9IG1lc3NhZ2U7CisKKyAgICAvLyBDb2xsYXBzZSB0aGUgU3RhdHVzQmxvY2sgaWYgaXQgaGFzIG5vIHRleHQgdG8gY29uc2VydmUgcmVhbCBlc3RhdGUuCisgICAgaWYgKFN0YXR1c0Jsb2NrLT5UZXh0ICE9ICIiKQorICAgIHsKKyAgICAgICAgU3RhdHVzQm9yZGVyLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3RhdHVzQm9yZGVyLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgIH0KK30KKwordm9pZAorVGFsa0dyaWQ6OlByb3RvY29sX0NoYW5nZWQoCisgICAgT2JqZWN0XiAgICAgICAgICBzZW5kZXIsCisgICAgUm91dGVkRXZlbnRBcmdzXiBlKQoreworICAgIGF1dG8gcmFkaW9CdG4gPSBkeW5hbWljX2Nhc3Q8UmFkaW9CdXR0b25ePihzZW5kZXIpOworICAgIGlmICghcmFkaW9CdG4pCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwcm90b2NvbCA9IChyYWRpb0J0biA9PSBUY3BSYWRpbykgPyBQcm90b2NvbDo6VENQIDogUHJvdG9jb2w6OlVEUDsKKworICAgIFNlcnZlclJvbGUtPlByb3RvY29sQ2hhbmdlZChwcm90b2NvbCk7CisgICAgQ2xpZW50Um9sZS0+UHJvdG9jb2xDaGFuZ2VkKHByb3RvY29sKTsKK30KKwordm9pZAorVGFsa0dyaWQ6OlJvbGVfQ2hhbmdlZCgKKyAgICBPYmplY3ReICAgICAgICAgIHNlbmRlciwKKyAgICBSb3V0ZWRFdmVudEFyZ3NeIGUpCit7CisgICAgYXV0byByYWRpb0J0biA9IGR5bmFtaWNfY2FzdDxSYWRpb0J1dHRvbl4+KHNlbmRlcik7CisgICAgaWYgKCFyYWRpb0J0bikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmFkaW9CdG4gPT0gU2VydmVyUmFkaW8pCisgICAgeworICAgICAgICAvLyBzd2l0Y2ggdG8gc2VydmVyIHJvbGUgVUkKKyAgICAgICAgQ2xpZW50Um9sZS0+VmlzaWJpbGl0eSA9IFhhbWw6OlZpc2liaWxpdHk6OkNvbGxhcHNlZDsKKyAgICAgICAgU2VydmVyUm9sZS0+VmlzaWJpbGl0eSA9IFhhbWw6OlZpc2liaWxpdHk6OlZpc2libGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIHN3aXRjaCB0byBjbGllbnQgcm9sZSBVSQorICAgICAgICBTZXJ2ZXJSb2xlLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6Q29sbGFwc2VkOworICAgICAgICBDbGllbnRSb2xlLT5WaXNpYmlsaXR5ID0gWGFtbDo6VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvVGFsa0dyaWQueGFtbC5oIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtHcmlkLnhhbWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtHcmlkLnhhbWwuaApAQCAtMCwwICsxLDYxIEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRhbGtHcmlkLmcuaCIKKyNpbmNsdWRlICJJQXN5bmNUaHJlYWROb3RpZnkuaCIKKyNpbmNsdWRlICJJTWFpblBhZ2VVSUVsZW1lbnRzLmgiCisjaW5jbHVkZSAiUHJvdG9jb2wuaCIKKworbmFtZXNwYWNlIG90Cit7CisKK1tXaW5kb3dzOjpGb3VuZGF0aW9uOjpNZXRhZGF0YTo6V2ViSG9zdEhpZGRlbl0KK3B1YmxpYyByZWYgY2xhc3MgVGFsa0dyaWQgc2VhbGVkIDogcHVibGljIElBc3luY1RocmVhZE5vdGlmeQoreworcHVibGljOgorICAgIFRhbGtHcmlkKCk7CisKKyAgICB2b2lkIEluaXQoSU1haW5QYWdlVUlFbGVtZW50c14gbWFpblBhZ2VVSUVsZW1lbnRzKTsKKworICAgIC8vIElBc3luY1RocmVhZE1lc3NhZ2UKKyAgICB2aXJ0dWFsIHZvaWQgTm90aWZ5RnJvbUFzeW5jVGhyZWFkKFN0cmluZ14gbWVzc2FnZSwgTm90aWZ5VHlwZSB0eXBlKTsKKworICAgIHZvaWQgTm90aWZ5KFN0cmluZ14gbWVzc2FnZSwgTm90aWZ5VHlwZSB0eXBlKTsKKworcHJpdmF0ZToKKyAgICAvLyBjaGFuZ2UgcHJvdG9jb2wKKyAgICAvLyBUQ1AgPC0+IFVEUAorICAgIHZvaWQgUHJvdG9jb2xfQ2hhbmdlZChQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpYYW1sOjpSb3V0ZWRFdmVudEFyZ3NeIGUpOworCisgICAgLy8gY2hhbmdlIHJvbGUgZnJvbSBzZXJ2ZXIgY2xpZW50IChvciB2aWNlIHZlcnNhKQorICAgIHZvaWQgUm9sZV9DaGFuZ2VkKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL1RhbGtIZWxwZXIuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmYjg0OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9UYWxrSGVscGVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBvdAoreworcmVmIGNsYXNzIENsaWVudENvbnRyb2w7CityZWYgY2xhc3MgU2VydmVyQ29udHJvbDsKKworY2xhc3MgVGFsa0hlbHBlcgoreworcHJpdmF0ZToKKyAgICBmcmllbmQgcmVmIGNsYXNzIENsaWVudENvbnRyb2w7CisgICAgZnJpZW5kIHJlZiBjbGFzcyBTZXJ2ZXJDb250cm9sOworCisgICAgLy8gdGhpcyBpcyBhIHByaXZhdGUgbWV0aG9kIGZvciBzcGVjaWZpYyB1c2FnZSwgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIG9uZQorICAgIC8vIGNoZWNrcyBhbGwgY2hhcnMgYXJlIHZhbGlkIElwdjYgY2hhcnMgaW4gdGhlIHJhbmdlIFtiZWdpbiwgZW5kKQorICAgIHN0YXRpYyBib29sIEFsbFZhbGlkSXB2NkNoYXJzKGNvbnN0IHdjaGFyX3QqIGJlZ2luLCBjb25zdCB3Y2hhcl90KiBlbmQpCisgICAgeworICAgICAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGMgPSAqaXQ7CisKKyAgICAgICAgICAgIGlmICgoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IChjID09ICc6JykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnRicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwcHMvd2luZG93cy9vdEFkYXB0ZXIuaCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9vdEFkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA4MTgyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL290QWRhcHRlci5oCkBAIC0wLDAgKzEsNjA3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2RlZmluZSBPVERMTCAxCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9ib3JkZXJfcm91dGVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90aHJlYWRfZnRkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb21taXNzaW9uZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2pvaW5lci5oPgorCisjaW5jbHVkZSA8d3JsLmg+CisjaW5jbHVkZSA8Y29sbGVjdGlvbi5oPgorCit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07Cit1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm06OkNvbGxlY3Rpb25zOwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOjpNZXRhZGF0YTsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpOZXR3b3JraW5nOworCituYW1lc3BhY2Ugb3QKK3sKKworcmVmIGNsYXNzIG90QWRhcHRlcjsKKworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RBZGFwdGVyUmVtb3ZhbERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKKworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RJcEFkZHJlc3NBZGRlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90SXBBZGRyZXNzUmVtb3ZlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90SXBSbG9jQWRkZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdElwUmxvY1JlbW92ZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdElwTGlua0xvY2FsQWRkcmVzQ2hhbmdlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkRGVsZWdhdGUob3RBZGFwdGVyXiBzZW5kZXIpOworCitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdE5ldFJvbGVDaGFuZ2VkRGVsZWdhdGUob3RBZGFwdGVyXiBzZW5kZXIpOworcHVibGljIGRlbGVnYXRlIHZvaWQgb3ROZXRQYXJ0aXRpb25JZENoYW5nZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CitwdWJsaWMgZGVsZWdhdGUgdm9pZCBvdE5ldEtleVNlcXVlbmNlQ291bnRlckNoYW5nZWREZWxlZ2F0ZShvdEFkYXB0ZXJeIHNlbmRlcik7CisKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90VGhyZWFkQ2hpbGRBZGRlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKK3B1YmxpYyBkZWxlZ2F0ZSB2b2lkIG90VGhyZWFkQ2hpbGRSZW1vdmVkRGVsZWdhdGUob3RBZGFwdGVyXiBzZW5kZXIpOworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RUaHJlYWROZXREYXRhVXBkYXRlZERlbGVnYXRlKG90QWRhcHRlcl4gc2VuZGVyKTsKKworW0ZsYWdzXQorcHVibGljIGVudW0gY2xhc3Mgb3RMaW5rTW9kZUZsYWdzIDogdW5zaWduZWQgaW50Cit7CisgICAgTm9uZSAgICAgICAgICAgICAgICA9IDAsCisgICAgUnhPbldoZW5JZGxlICAgICAgICA9IDB4MSwgIC8qIDEsIGlmIHRoZSBzZW5kZXIgaGFzIGl0cyByZWNlaXZlciBvbiB3aGVuIG5vdCB0cmFuc21pdHRpbmcuICAwLCBvdGhlcndpc2UuICovCisgICAgU2VjdXJlRGF0YVJlcXVlc3RzICA9IDB4MiwgIC8qIDEsIGlmIHRoZSBzZW5kZXIgd2lsbCB1c2UgSUVFRSA4MDIuMTUuNCB0byBzZWN1cmUgYWxsIGRhdGEgcmVxdWVzdHMuICAwLCBvdGhlcndpc2UuICovCisgICAgRGV2aWNlVHlwZSAgICAgICAgICA9IDB4NCwgIC8qIDEsIGlmIHRoZSBzZW5kZXIgaXMgYW4gRkZELiAgMCwgb3RoZXJ3aXNlLiAqLworICAgIE5ldHdvcmtEYXRhICAgICAgICAgPSAweDggICAvKiAxLCBpZiB0aGUgc2VuZGVyIHJlcXVpcmVzIHRoZSBmdWxsIE5ldHdvcmsgRGF0YS4gIDAsIG90aGVyd2lzZS4gKi8KK307CisKK3B1YmxpYyBlbnVtIGNsYXNzIG90VGhyZWFkU3RhdGUKK3sKKyAgICBPZmZsaW5lLAorICAgIERpc2FibGVkLAorICAgIERldGFjaGVkLAorICAgIENoaWxkLAorICAgIFJvdXRlciwKKyAgICBMZWFkZXIKK307CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgT3BlblRocmVhZCBJbnRlcmZhY2UvQWRhcHRlciBzcGVjaWZpYyBBUElzCitwdWJsaWMgcmVmIGNsYXNzIG90QWRhcHRlciBzZWFsZWQKK3sKK3ByaXZhdGU6CisKKyAgICB2b2lkICpfSW5zdGFuY2U7CisgICAgI2RlZmluZSBEZXZpY2VJbnN0YW5jZSAoKG90SW5zdGFuY2UqKV9JbnN0YW5jZSkKKworICAgICNkZWZpbmUgVGhyb3dPbkZhaWx1cmUoZXhwKSBcCisgICAgZG8geyBcCisgICAgICAgIGF1dG8gcmVzID0gZXhwOyBcCisgICAgICAgIGlmIChyZXMgIT0gMCkgXAorICAgICAgICAgICAgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oVGhlYWRFcnJvclRvSFJlc3VsdChyZXMpLCAjZXhwKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCitwdWJsaWM6CisKKyNwcmFnbWEgcmVnaW9uIEV2ZW50cworCisgICAgZXZlbnQgb3RBZGFwdGVyUmVtb3ZhbERlbGVnYXRlXiAgICAgICAgICAgICAgICAgQWRhcHRlclJlbW92YWw7CisKKyAgICBldmVudCBvdElwQWRkcmVzc0FkZGVkRGVsZWdhdGVeICAgICAgICAgICAgICAgICBJcEFkZHJlc3NBZGRlZDsKKyAgICBldmVudCBvdElwQWRkcmVzc1JlbW92ZWREZWxlZ2F0ZV4gICAgICAgICAgICAgICBJcEFkZHJlc3NSZW1vdmVkOworICAgIGV2ZW50IG90SXBSbG9jQWRkZWREZWxlZ2F0ZV4gICAgICAgICAgICAgICAgICAgIElwUmxvY0FkZGVkOworICAgIGV2ZW50IG90SXBSbG9jUmVtb3ZlZERlbGVnYXRlXiAgICAgICAgICAgICAgICAgIElwUmxvY1JlbW92ZWQ7CisgICAgZXZlbnQgb3RJcExpbmtMb2NhbEFkZHJlc0NoYW5nZWREZWxlZ2F0ZV4gICAgICAgSXBMaW5rTG9jYWxBZGRyZXNDaGFuZ2VkOworICAgIGV2ZW50IG90SXBNZXNoTG9jYWxBZGRyZXNDaGFuZ2VkRGVsZWdhdGVeICAgICAgIElwTWVzaExvY2FsQWRkcmVzQ2hhbmdlZDsKKworICAgIGV2ZW50IG90TmV0Um9sZUNoYW5nZWREZWxlZ2F0ZV4gICAgICAgICAgICAgICAgIE5ldFJvbGVDaGFuZ2VkOworICAgIGV2ZW50IG90TmV0UGFydGl0aW9uSWRDaGFuZ2VkRGVsZWdhdGVeICAgICAgICAgIE5ldFBhcnRpdGlvbklkQ2hhbmdlZDsKKyAgICBldmVudCBvdE5ldEtleVNlcXVlbmNlQ291bnRlckNoYW5nZWREZWxlZ2F0ZV4gICBOZXRLZXlTZXF1ZW5jZUNvdW50ZXJDaGFuZ2VkOworCisgICAgZXZlbnQgb3RUaHJlYWRDaGlsZEFkZGVkRGVsZWdhdGVeICAgICAgICAgICAgICAgVGhyZWFkQ2hpbGRBZGRlZDsKKyAgICBldmVudCBvdFRocmVhZENoaWxkUmVtb3ZlZERlbGVnYXRlXiAgICAgICAgICAgICBUaHJlYWRDaGlsZFJlbW92ZWQ7CisgICAgZXZlbnQgb3RUaHJlYWROZXREYXRhVXBkYXRlZERlbGVnYXRlXiAgICAgICAgICAgVGhyZWFkTmV0RGF0YVVwZGF0ZWQ7CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgcmVnaW9uIFByb3BlcnRpZXMKKworICAgIHByb3BlcnR5IEludFB0ciBSYXdIYW5kbGUKKyAgICB7CisgICAgICAgIEludFB0ciBnZXQoKSB7IHJldHVybiBfSW5zdGFuY2U7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBHdWlkIEludGVyZmFjZUd1aWQKKyAgICB7CisgICAgICAgIEd1aWQgZ2V0KCkgeyByZXR1cm4gb3RHZXREZXZpY2VHdWlkKERldmljZUluc3RhbmNlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQzMl90IElmSW5kZXgKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGdldCgpIHsgcmV0dXJuIG90R2V0RGV2aWNlSWZJbmRleChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MzJfdCBDb21wYXJ0bWVudElkCisgICAgeworICAgICAgICB1aW50MzJfdCBnZXQoKSB7IHJldHVybiBvdEdldENvbXBhcnRtZW50SWQoRGV2aWNlSW5zdGFuY2UpOyB9CisgICAgfQorCisjcHJhZ21hIHJlZ2lvbiBMaW5rIExheWVyCisKKyAgICBwcm9wZXJ0eSBzaWduZWQgaW50IC8qaW50OF90Ki8gTWF4VHJhbnNtaXRQb3dlcgorICAgIHsKKyAgICAgICAgc2lnbmVkIGludCBnZXQoKSB7IHJldHVybiBvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldChzaWduZWQgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUgPiAxMjcpIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRyk7CisgICAgICAgICAgICBvdExpbmtTZXRNYXhUcmFuc21pdFBvd2VyKERldmljZUluc3RhbmNlLCAoaW50OF90KXZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQzMl90IFBvbGxQZXJpb2QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGdldCgpIHsgcmV0dXJuIG90TGlua0dldFBvbGxQZXJpb2QoRGV2aWNlSW5zdGFuY2UpOyB9CisgICAgICAgIHZvaWQgc2V0KHVpbnQzMl90IHZhbHVlKSB7IG90TGlua1NldFBvbGxQZXJpb2QoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ4X3QgQ2hhbm5lbAorICAgIHsgCisgICAgICAgIHVpbnQ4X3QgZ2V0KCkgeyByZXR1cm4gb3RMaW5rR2V0Q2hhbm5lbChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQodWludDhfdCB2YWx1ZSkgeyBUaHJvd09uRmFpbHVyZShvdExpbmtTZXRDaGFubmVsKERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDE2X3QgUGFuSWQKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGdldCgpIHsgcmV0dXJuIG90TGlua0dldFBhbklkKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldCh1aW50MTZfdCB2YWx1ZSkgeyBUaHJvd09uRmFpbHVyZShvdExpbmtTZXRQYW5JZChEZXZpY2VJbnN0YW5jZSwgdmFsdWUpKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQxNl90IFNob3J0QWRkcmVzcworICAgIHsKKyAgICAgICAgdWludDE2X3QgZ2V0KCkgeyByZXR1cm4gb3RMaW5rR2V0U2hvcnRBZGRyZXNzKERldmljZUluc3RhbmNlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ2NF90IEV4dGVuZGVkQWRkcmVzcworICAgIHsKKyAgICAgICAgdWludDY0X3QgZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRyID0gb3RMaW5rR2V0RXh0ZW5kZWRBZGRyZXNzKERldmljZUluc3RhbmNlKTsKKyAgICAgICAgICAgIGF1dG8gcmV0ID0gKih1aW50NjRfdCopYWRkcjsKKyAgICAgICAgICAgIG90RnJlZU1lbW9yeShhZGRyKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXQodWludDY0X3QgdmFsdWUpIAorICAgICAgICB7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdExpbmtTZXRFeHRlbmRlZEFkZHJlc3MoRGV2aWNlSW5zdGFuY2UsIChvdEV4dEFkZHJlc3MqKSZ2YWx1ZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDY0X3QgRmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0CisgICAgeworICAgICAgICB1aW50NjRfdCBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50NjRfdCBhZGRyOworICAgICAgICAgICAgb3RMaW5rR2V0RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KERldmljZUluc3RhbmNlLCAob3RFeHRBZGRyZXNzKikmYWRkcik7CisgICAgICAgICAgICByZXR1cm4gYWRkcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ2NF90IEpvaW5lcklkCisgICAgeworICAgICAgICB1aW50NjRfdCBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50NjRfdCBhZGRyOworICAgICAgICAgICAgb3RMaW5rR2V0Sm9pbmVySWQoRGV2aWNlSW5zdGFuY2UsIChvdEV4dEFkZHJlc3MqKSZhZGRyKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgICAgICB9CisgICAgfQorCisjcHJhZ21hIGVuZHJlZ2lvbgorCisjcHJhZ21hIHJlZ2lvbiBJUCBMYXllcgorCisgICAgcHJvcGVydHkgYm9vbCBJcEVuYWJsZWQKKyAgICB7CisgICAgICAgIGJvb2wgZ2V0KCkgeyByZXR1cm4gb3RJcDZJc0VuYWJsZWQoRGV2aWNlSW5zdGFuY2UpOyB9CisgICAgICAgIHZvaWQgc2V0KGJvb2wgdmFsdWUpIHsgVGhyb3dPbkZhaWx1cmUob3RJcDZTZXRFbmFibGVkKERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisjcHJhZ21hIGVuZHJlZ2lvbgorCisjcHJhZ21hIHJlZ2lvbiBUaHJlYWQgTGF5ZXIKKworICAgIHByb3BlcnR5IHVpbnQ2NF90IEV4dGVuZGVkUGFuSWQKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcGFuaWQgPSBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQoRGV2aWNlSW5zdGFuY2UpOworICAgICAgICAgICAgYXV0byByZXQgPSAqKHVpbnQ2NF90KilwYW5pZDsKKyAgICAgICAgICAgIG90RnJlZU1lbW9yeShwYW5pZCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KHVpbnQ2NF90IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQoRGV2aWNlSW5zdGFuY2UsICh1aW50OF90KikmdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgb3RMaW5rTW9kZUZsYWdzIExpbmtNb2RlCisgICAgeworICAgICAgICBvdExpbmtNb2RlRmxhZ3MgZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsaW5rbW9kZSA9IG90VGhyZWFkR2V0TGlua01vZGUoRGV2aWNlSW5zdGFuY2UpOworICAgICAgICAgICAgb3RMaW5rTW9kZUZsYWdzIGZsYWdzID0gb3RMaW5rTW9kZUZsYWdzOjpOb25lOworICAgICAgICAgICAgaWYgKGxpbmttb2RlLm1SeE9uV2hlbklkbGUpICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IG90TGlua01vZGVGbGFnczo6UnhPbldoZW5JZGxlOworICAgICAgICAgICAgaWYgKGxpbmttb2RlLm1TZWN1cmVEYXRhUmVxdWVzdHMpICAgZmxhZ3MgPSBmbGFncyB8IG90TGlua01vZGVGbGFnczo6U2VjdXJlRGF0YVJlcXVlc3RzOworICAgICAgICAgICAgaWYgKGxpbmttb2RlLm1EZXZpY2VUeXBlKSAgICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IG90TGlua01vZGVGbGFnczo6RGV2aWNlVHlwZTsKKyAgICAgICAgICAgIGlmIChsaW5rbW9kZS5tTmV0d29ya0RhdGEpICAgICAgICAgIGZsYWdzID0gZmxhZ3MgfCBvdExpbmtNb2RlRmxhZ3M6Ok5ldHdvcmtEYXRhOworICAgICAgICAgICAgcmV0dXJuIGZsYWdzOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KG90TGlua01vZGVGbGFncyB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaW5rTW9kZUNvbmZpZyBsaW5rbW9kZSA9IHsgMCB9OworICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG90TGlua01vZGVGbGFnczo6UnhPbldoZW5JZGxlKSAhPSBvdExpbmtNb2RlRmxhZ3M6Ok5vbmUpCisgICAgICAgICAgICAgICAgbGlua21vZGUubVJ4T25XaGVuSWRsZSA9IHRydWU7CisgICAgICAgICAgICBpZiAoKHZhbHVlICYgb3RMaW5rTW9kZUZsYWdzOjpTZWN1cmVEYXRhUmVxdWVzdHMpICE9IG90TGlua01vZGVGbGFnczo6Tm9uZSkKKyAgICAgICAgICAgICAgICBsaW5rbW9kZS5tU2VjdXJlRGF0YVJlcXVlc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICgodmFsdWUgJiBvdExpbmtNb2RlRmxhZ3M6OkRldmljZVR5cGUpICE9IG90TGlua01vZGVGbGFnczo6Tm9uZSkKKyAgICAgICAgICAgICAgICBsaW5rbW9kZS5tRGV2aWNlVHlwZSA9IHRydWU7CisgICAgICAgICAgICBpZiAoKHZhbHVlICYgb3RMaW5rTW9kZUZsYWdzOjpOZXR3b3JrRGF0YSkgIT0gb3RMaW5rTW9kZUZsYWdzOjpOb25lKQorICAgICAgICAgICAgICAgIGxpbmttb2RlLm1OZXR3b3JrRGF0YSA9IHRydWU7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZFNldExpbmtNb2RlKERldmljZUluc3RhbmNlLCBsaW5rbW9kZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHVpbnQzMl90IGNoYXJUb1ZhbHVlKHdjaGFyX3QgYykKKyAgICB7CisgICAgICAgIGlmIChjID49IEwnYScgJiYgYyA8PSBMJ2YnKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYyAtIEwnYSc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYyA+PSBMJ0EnICYmIGMgPD0gTCdGJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGMgLSBMJ0EnOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGMgPj0gTCcwJyAmJiBjIDw9IEwnOScpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjIC0gTCcwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IEV4Y2VwdGlvbjo6Q3JlYXRlRXhjZXB0aW9uKEVfSU5WQUxJREFSRyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBTdHJpbmdeIE1hc3RlcktleQorICAgIHsKKyAgICAgICAgU3RyaW5nXiBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBoZXhtYXBbXSA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnIH07CisgICAgICAgICAgICBhdXRvIGtleSA9IG90VGhyZWFkR2V0TWFzdGVyS2V5KERldmljZUluc3RhbmNlKTsKKyAgICAgICAgICAgIFdDSEFSIHN6S2V5W09UX01BU1RFUl9LRVlfU0laRSAqIDIgKyAxXSA9IHsgMCB9OworICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1RfTUFTVEVSX0tFWV9TSVpFOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3pLZXlbMiAqIGldICAgICA9IGhleG1hcFsoa2V5LT5tOFtpXSAmIDB4RjApID4+IDRdOworICAgICAgICAgICAgICAgIHN6S2V5WzIgKiBpICsgMV0gPSBoZXhtYXBba2V5LT5tOFtpXSAmIDB4MEZdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3RGcmVlTWVtb3J5KGtleSk7CisgICAgICAgICAgICByZXR1cm4gcmVmIG5ldyBTdHJpbmcoc3pLZXkpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KFN0cmluZ14gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TWFzdGVyS2V5IGtleTsKKyAgICAgICAgICAgIHVpbnQ4X3Qga2V5TGVuID0gMDsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB2YWx1ZS0+TGVuZ3RoKCkgLSAxOyBpKz0yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGtleS5tOFtrZXlMZW4rK10gPSAodWludDhfdCkoKGNoYXJUb1ZhbHVlKHZhbHVlLT5EYXRhKClbaV0pIDw8IDQpIHwKKyAgICAgICAgICAgICAgICAgICAgY2hhclRvVmFsdWUodmFsdWUtPkRhdGEoKVtpICsgMV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChrZXlMZW4gKiAyID09IHZhbHVlLT5MZW5ndGgoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5Lm04W2tleUxlbisrXSA9ICh1aW50OF90KShjaGFyVG9WYWx1ZSh2YWx1ZS0+RGF0YSgpW3ZhbHVlLT5MZW5ndGgoKS0xXSkpIDw8IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1zZXQoa2V5Lm04ICsga2V5TGVuLCAwLCBzaXplb2Yoa2V5KSAtIGtleUxlbik7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZFNldE1hc3RlcktleShEZXZpY2VJbnN0YW5jZSwgJmtleSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgU3RyaW5nXiBOZXR3b3JrTmFtZQorICAgIHsKKyAgICAgICAgU3RyaW5nXiBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIF9uYW1lID0gb3RUaHJlYWRHZXROZXR3b3JrTmFtZShEZXZpY2VJbnN0YW5jZSk7CisgICAgICAgICAgICBXQ0hBUiBuYW1lW09UX05FVFdPUktfTkFNRV9NQVhfU0laRSArIDFdOworICAgICAgICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBfbmFtZSwgLTEsIG5hbWUsIEFSUkFZU0laRShuYW1lKSk7CisgICAgICAgICAgICBvdEZyZWVNZW1vcnkoX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKG5hbWUpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0KFN0cmluZ14gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgbmFtZVtPVF9ORVRXT1JLX05BTUVfTUFYX1NJWkUgKyAxXTsKKyAgICAgICAgICAgIGF1dG8gbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB2YWx1ZS0+RGF0YSgpLCAtMSwgbmFtZSwgQVJSQVlTSVpFKG5hbWUpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChsZW4gPD0gMCkgdGhyb3cgRXhjZXB0aW9uOjpDcmVhdGVFeGNlcHRpb24oRV9JTlZBTElEQVJHKTsKKyAgICAgICAgICAgIFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0TmV0d29ya05hbWUoRGV2aWNlSW5zdGFuY2UsIG5hbWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQ4X3QgTWF4QWxsb3dlZENoaWxkcmVuCisgICAgeworICAgICAgICB1aW50OF90IGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0TWF4QWxsb3dlZENoaWxkcmVuKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldCh1aW50OF90IHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDMyX3QgQ2hpbGRUaW1lb3V0CisgICAgeworICAgICAgICB1aW50MzJfdCBnZXQoKSB7IHJldHVybiBvdFRocmVhZEdldENoaWxkVGltZW91dChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQodWludDMyX3QgdmFsdWUpIHsgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IGJvb2wgVGhyZWFkRW5hYmxlZAorICAgIHsKKyAgICAgICAgLy9ib29sIGdldCgpIHsgcmV0dXJuIG90SXNUaHJlYWRTdGFydGVkKERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldChib29sIHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0RW5hYmxlZChEZXZpY2VJbnN0YW5jZSwgdmFsdWUpKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IGJvb2wgQXV0b1N0YXJ0CisgICAgeworICAgICAgICBib29sIGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0QXV0b1N0YXJ0KERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldChib29sIHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0QXV0b1N0YXJ0KERldmljZUluc3RhbmNlLCB2YWx1ZSkpOyB9CisgICAgfQorCisgICAgcHJvcGVydHkgYm9vbCBTaW5nbGV0b24KKyAgICB7CisgICAgICAgIGJvb2wgZ2V0KCkgeyByZXR1cm4gb3RUaHJlYWRJc1NpbmdsZXRvbihEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBib29sIFJvdXRlclJvbGVFbmFibGVkCisgICAgeworICAgICAgICBib29sIGdldCgpIHsgcmV0dXJuIG90VGhyZWFkSXNSb3V0ZXJSb2xlRW5hYmxlZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQoYm9vbCB2YWx1ZSkgeyBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKERldmljZUluc3RhbmNlLCB2YWx1ZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50OF90IFByZWZlcnJlZFJvdXRlcklkCisgICAgeworICAgICAgICB2b2lkIHNldCh1aW50OF90IHZhbHVlKSB7IFRocm93T25GYWlsdXJlKG90VGhyZWFkU2V0UHJlZmVycmVkUm91dGVySWQoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBIb3N0TmFtZV4gTWVzaExvY2FsRWlkCisgICAgeworICAgICAgICBIb3N0TmFtZV4gZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRyID0gb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQoRGV2aWNlSW5zdGFuY2UpOworICAgICAgICAgICAgV0NIQVIgc3pBZGRyWzQ2XTsKKyAgICAgICAgICAgIFJ0bElwdjZBZGRyZXNzVG9TdHJpbmcoKElONl9BRERSKilhZGRyLCBzekFkZHIpOworICAgICAgICAgICAgb3RGcmVlTWVtb3J5KGFkZHIpOworICAgICAgICAgICAgcmV0dXJuIHJlZiBuZXcgSG9zdE5hbWUocmVmIG5ldyBTdHJpbmcoc3pBZGRyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSBIb3N0TmFtZV4gTGVhZGVyUmxvYworICAgIHsKKyAgICAgICAgSG9zdE5hbWVeIGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIElONl9BRERSIGFkZHI7CisgICAgICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZEdldExlYWRlclJsb2MoRGV2aWNlSW5zdGFuY2UsIChvdElwNkFkZHJlc3MqKSZhZGRyKSk7CisgICAgICAgICAgICBXQ0hBUiBzekFkZHJbNDZdOworICAgICAgICAgICAgUnRsSXB2NkFkZHJlc3NUb1N0cmluZygmYWRkciwgc3pBZGRyKTsKKyAgICAgICAgICAgIHJldHVybiByZWYgbmV3IEhvc3ROYW1lKHJlZiBuZXcgU3RyaW5nKHN6QWRkcikpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvcGVydHkgdWludDhfdCBMb2NhbExlYWRlcldlaWdodAorICAgIHsKKyAgICAgICAgdWludDhfdCBnZXQoKSB7IHJldHVybiBvdFRocmVhZEdldExvY2FsTGVhZGVyV2VpZ2h0KERldmljZUluc3RhbmNlKTsgfQorICAgICAgICB2b2lkIHNldCh1aW50OF90IHZhbHVlKSB7IG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQoRGV2aWNlSW5zdGFuY2UsIHZhbHVlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IHVpbnQzMl90IExvY2FsTGVhZGVyUGFydGl0aW9uSWQKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0TG9jYWxMZWFkZXJQYXJ0aXRpb25JZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICAgICAgdm9pZCBzZXQodWludDMyX3QgdmFsdWUpIHsgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKERldmljZUluc3RhbmNlLCB2YWx1ZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50OF90IExlYWRlcldlaWdodAorICAgIHsKKyAgICAgICAgdWludDhfdCBnZXQoKSB7IHJldHVybiBvdFRocmVhZEdldExlYWRlcldlaWdodChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MzJfdCBMZWFkZXJSb3V0ZXJJZAorICAgIHsKKyAgICAgICAgdWludDMyX3QgZ2V0KCkgeyByZXR1cm4gb3RUaHJlYWRHZXRMZWFkZXJSb3V0ZXJJZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MzJfdCBQYXJ0aXRpb25JZAorICAgIHsKKyAgICAgICAgdWludDMyX3QgZ2V0KCkgeyByZXR1cm4gb3RUaHJlYWRHZXRQYXJ0aXRpb25JZChEZXZpY2VJbnN0YW5jZSk7IH0KKyAgICB9CisKKyAgICBwcm9wZXJ0eSB1aW50MTZfdCBSbG9jMTYKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGdldCgpIHsgcmV0dXJuIG90VGhyZWFkR2V0UmxvYzE2KERldmljZUluc3RhbmNlKTsgfQorICAgIH0KKworICAgIHByb3BlcnR5IG90VGhyZWFkU3RhdGUgU3RhdGUKKyAgICB7CisgICAgICAgIG90VGhyZWFkU3RhdGUgZ2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChvdFRocmVhZFN0YXRlKW90VGhyZWFkR2V0RGV2aWNlUm9sZShEZXZpY2VJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgcmVnaW9uIENvbnN0cnVjdG9yL0Rlc3RydWN0b3IKKworICAgIG90QWRhcHRlcihfSW5fIEludFB0ciAvKm90SW5zdGFuY2UqKi8gYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgX0luc3RhbmNlID0gKHZvaWQqKWFJbnN0YW5jZTsKKworICAgICAgICBJSW5zcGVjdGFibGUqIHBJbnNwZWN0YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUluc3BlY3RhYmxlKj4odGhpcyk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIGRldmljZSBhdmFpbGFiaWxpdHkgY2FsbGJhY2tzCisgICAgICAgIG90U2V0U3RhdGVDaGFuZ2VkQ2FsbGJhY2soRGV2aWNlSW5zdGFuY2UsIFRocmVhZFN0YXRlQ2hhbmdlQ2FsbGJhY2ssIHBJbnNwZWN0YWJsZSk7CisgICAgfQorCisgICAgdmlydHVhbCB+b3RBZGFwdGVyKCkKKyAgICB7CisgICAgICAgIC8vIFVucmVnaXN0ZXIgZm9yIGNhbGxiYWNrcyBmb3IgdGhlIGRldmljZQorICAgICAgICBvdFNldFN0YXRlQ2hhbmdlZENhbGxiYWNrKERldmljZUluc3RhbmNlLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBkZXZpY2UKKyAgICAgICAgb3RGcmVlTWVtb3J5KERldmljZUluc3RhbmNlKTsKKyAgICB9CisKKyNwcmFnbWEgZW5kcmVnaW9uCisKKyNwcmFnbWEgcmVnaW9uIEZ1bmN0aW9ucworCisgICAgdm9pZCBQbGF0Zm9ybVJlc2V0KCkKKyAgICB7CisgICAgICAgIG90SW5zdGFuY2VSZXNldChEZXZpY2VJbnN0YW5jZSk7CisgICAgfQorCisgICAgdm9pZCBGYWN0b3J5UmVzZXQoKQorICAgIHsKKyAgICAgICAgb3RJbnN0YW5jZUZhY3RvcnlSZXNldChEZXZpY2VJbnN0YW5jZSk7CisgICAgfQorCisgICAgdm9pZCBCZWNvbWVSb3V0ZXIoKQorICAgIHsKKyAgICAgICAgVGhyb3dPbkZhaWx1cmUob3RUaHJlYWRCZWNvbWVSb3V0ZXIoRGV2aWNlSW5zdGFuY2UpKTsKKyAgICB9CisKKyAgICB2b2lkIEJlY29tZUxlYWRlcigpCisgICAgeworICAgICAgICBUaHJvd09uRmFpbHVyZShvdFRocmVhZEJlY29tZUxlYWRlcihEZXZpY2VJbnN0YW5jZSkpOworICAgIH0KKworI3ByYWdtYSBlbmRyZWdpb24KKworaW50ZXJuYWw6CisKKyAgICB2b2lkIEludm9rZUFkYXB0ZXJSZW1vdmFsKCkKKyAgICB7CisgICAgICAgIEFkYXB0ZXJSZW1vdmFsKHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIGZyaWVuZCByZWYgY2xhc3Mgb3RBcGk7CisKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwKKyAgICBUaHJlYWRTdGF0ZUNoYW5nZUNhbGxiYWNrKAorICAgICAgICB1aW50MzJfdCBhRmxhZ3MsCisgICAgICAgIF9Jbl8gdm9pZCogYUNvbnRleHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgSUluc3BlY3RhYmxlKiBwSW5zcGVjdGFibGUgPSAoSUluc3BlY3RhYmxlKilhQ29udGV4dDsKKyAgICAgICAgb3RBZGFwdGVyXiBwVGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8b3RBZGFwdGVyXj4ocEluc3BlY3RhYmxlKTsKKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19BRERFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPklwQWRkcmVzc0FkZGVkKHBUaGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRmxhZ3MgJiBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5JcEFkZHJlc3NSZW1vdmVkKHBUaGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEKQorICAgICAgICB7CisgICAgICAgICAgICBwVGhpcy0+SXBSbG9jQWRkZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPklwUmxvY1JlbW92ZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0xMX0FERFIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5JcExpbmtMb2NhbEFkZHJlc0NoYW5nZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX01MX0FERFIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5JcE1lc2hMb2NhbEFkZHJlc0NoYW5nZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBUaGlzLT5OZXRSb2xlQ2hhbmdlZChwVGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKQorICAgICAgICB7CisgICAgICAgICAgICBwVGhpcy0+TmV0UGFydGl0aW9uSWRDaGFuZ2VkKHBUaGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUikKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPk5ldEtleVNlcXVlbmNlQ291bnRlckNoYW5nZWQocFRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEKQorICAgICAgICB7CisgICAgICAgICAgICBwVGhpcy0+VGhyZWFkQ2hpbGRBZGRlZChwVGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfUkVNT1ZFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPlRocmVhZENoaWxkUmVtb3ZlZChwVGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSkKKyAgICAgICAgeworICAgICAgICAgICAgcFRoaXMtPlRocmVhZE5ldERhdGFVcGRhdGVkKHBUaGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBIUkVTVUxUCisgICAgVGhlYWRFcnJvclRvSFJlc3VsdCgKKyAgICAgICAgaW50IC8qIG90RXJyb3IgKi8gZXJyb3IKKyAgICApCisgICAgeworICAgICAgICBzd2l0Y2ggKGVycm9yKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzogICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICBjYXNlIE9UX0VSUk9SX0RST1A6CisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fUk9VVEU6ICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfTkVUV09SS19VTlJFQUNIQUJMRSk7CisgICAgICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9BUkdTOiAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgICAgIGNhc2UgT1RfRVJST1JfU0VDVVJJVFk6ICAgICAgICAgIHJldHVybiBFX0FDQ0VTU0RFTklFRDsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT1RfQ0FQQUJMRToKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ6ICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOiAgICAgcmV0dXJuIEVfTk9UX1ZBTElEX1NUQVRFOworICAgICAgICBjYXNlIE9UX0VSUk9SX05PVF9GT1VORDogICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX05PVF9GT1VORCk7CisgICAgICAgIGNhc2UgT1RfRVJST1JfQUxSRUFEWTogICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfQUxSRUFEWV9FWElTVFMpOworICAgICAgICBjYXNlIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ6ICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX1RJTUVPVVQpOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRV9GQUlMOworICAgICAgICB9CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ugb3QKKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBwcy93aW5kb3dzL290QXBpLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3Mvb3RBcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBhMDAxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvYXBwcy93aW5kb3dzL290QXBpLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIm90QWRhcHRlci5oIgorI2luY2x1ZGUgPGNvbGxlY3Rpb24uaD4KKwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOwordXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOjpDb2xsZWN0aW9uczsKK3VzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpGb3VuZGF0aW9uOjpDb2xsZWN0aW9uczsKKworI2RlZmluZSBNQUM4X0ZPUk1BVCBMIiUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWCIKKyNkZWZpbmUgTUFDOF9BUkcobWFjKSBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLCBtYWNbNl0sIG1hY1s3XQorCituYW1lc3BhY2Ugb3QKK3sKKworcHVibGljIGRlbGVnYXRlIHZvaWQgb3RBZGFwdGVyQXJyaXZhbERlbGVnYXRlKG90QWRhcHRlcl4gYUFkYXB0ZXIpOworCisvLyBIZWxwZXIgY2xhc3MgZm9yIE9wZW5UaHJlYWQgQVBJCitwdWJsaWMgcmVmIGNsYXNzIG90QXBpIHNlYWxlZAoreworcHJpdmF0ZToKKworICAgIHZvaWQgKl9hcGlJbnN0YW5jZTsKKyAgICAjZGVmaW5lIEFwaUluc3RhbmNlICgob3RBcGlJbnN0YW5jZSopX2FwaUluc3RhbmNlKQorCisgICAgQ1JJVElDQUxfU0VDVElPTiBfY3M7CisgICAgVmVjdG9yPG90QWRhcHRlcl4+XiBfYWRhcHRlcnM7CisKK3B1YmxpYzoKKworICAgIC8vIEV2ZW50IGZvciBkZXZpY2UgYXZhaWxhYmlsaXR5IGNoYW5nZXMKKyAgICBldmVudCBvdEFkYXB0ZXJBcnJpdmFsRGVsZWdhdGVeIEFkYXB0ZXJBcnJpdmFsOworCisgICAgcHJvcGVydHkgSW50UHRyIFJhd0hhbmRsZQorICAgIHsKKyAgICAgICAgSW50UHRyIGdldCgpIHsgcmV0dXJuIF9hcGlJbnN0YW5jZTsgfQorICAgIH0KKworICAgIC8vIENvbnN0cnVjdG9yCisgICAgb3RBcGkoKSA6CisgICAgICAgIF9hZGFwdGVycyhyZWYgbmV3IFZlY3RvcjxvdEFkYXB0ZXJePigpKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQVBJIGhhbmRsZQorICAgICAgICBfYXBpSW5zdGFuY2UgPSBvdEFwaUluaXQoKTsKKyAgICAgICAgaWYgKF9hcGlJbnN0YW5jZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBFeGNlcHRpb246OkNyZWF0ZUV4Y2VwdGlvbihFX1VORVhQRUNURUQsIEwib3RBcGlJbml0IGZhaWxlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJl9jcyk7CisKKyAgICAgICAgSUluc3BlY3RhYmxlKiBwSW5zcGVjdGFibGUgPSByZWludGVycHJldF9jYXN0PElJbnNwZWN0YWJsZSo+KHRoaXMpOworCisgICAgICAgIC8vIFJlZ2lzdGVyIGZvciBkZXZpY2UgYXZhaWxhYmlsaXR5IGNhbGxiYWNrcworICAgICAgICBvdFNldERldmljZUF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhBcGlJbnN0YW5jZSwgVGhyZWFkRGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2ssIHBJbnNwZWN0YWJsZSk7CisKKyAgICAgICAgLy8gUXVlcnkgbGlzdCBvZiBkZXZpY2VzCisgICAgICAgIGF1dG8gZGV2aWNlTGlzdCA9IG90RW51bWVyYXRlRGV2aWNlcyhBcGlJbnN0YW5jZSk7CisgICAgICAgIGlmIChkZXZpY2VMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKworICAgICAgICAgICAgLy8gQWRkIGVhY2ggYWRhcHRlciB0byBvdXIgY2FjaGUgdW5sZXNzIGl0IGFscmVhZHkgd2FzIGluc2VydGVkIGZyb20gYSBub3RpZmljYXRpb24KKyAgICAgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBkZXZpY2VMaXN0LT5hRGV2aWNlc0xlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChHZXRBZGFwdGVyKGRldmljZUxpc3QtPmFEZXZpY2VzW2ldKSA9PSBudWxscHRyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkZXZpY2VJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KEFwaUluc3RhbmNlLCAmZGV2aWNlTGlzdC0+YURldmljZXNbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlSW5zdGFuY2UpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hZGFwdGVycy0+QXBwZW5kKHJlZiBuZXcgb3RBZGFwdGVyKGRldmljZUluc3RhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZfY3MpOworCisgICAgICAgICAgICBvdEZyZWVNZW1vcnkoZGV2aWNlTGlzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZXN0cnVjdG9yCisgICAgdmlydHVhbCB+b3RBcGkoKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgcmVnaXN0cmF0aW9uIGZvciBjYWxsYmFja3MKKyAgICAgICAgb3RTZXREZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2soQXBpSW5zdGFuY2UsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKworICAgICAgICAvLyBDbGVhbiB1cCBhcGkKKyAgICAgICAgb3RBcGlGaW5hbGl6ZShBcGlJbnN0YW5jZSk7CisgICAgICAgIF9hcGlJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgZW50aXJlIGxpc3Qgb2YgYWRhcHRlcnMKKyAgICBJVmVjdG9yVmlldzxvdEFkYXB0ZXJePl4gR2V0QWRhcHRlcnMoKQorICAgIHsKKyAgICAgICAgSVZlY3RvclZpZXc8b3RBZGFwdGVyXj5eIGFkYXB0ZXJzOworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKyAgICAgICAgYWRhcHRlcnMgPSBfYWRhcHRlcnMtPkdldFZpZXcoKTsgLy8gVE9ETyAtIE5lZWQgdG8gY29weQorICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmX2NzKTsKKyAgICAgICAgcmV0dXJuIGFkYXB0ZXJzOworICAgIH0KKworICAgIC8vIEhlbHBlciB0byBnZXQgYW4gYWRhcHRlciwgZ2l2ZW4gaXRzIGRldmljZSBndWlkCisgICAgb3RBZGFwdGVyXiBHZXRBZGFwdGVyKEd1aWQgYURldmljZUd1aWQpCisgICAgeworICAgICAgICBvdEFkYXB0ZXJeIHJldCA9IG51bGxwdHI7CisKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJl9jcyk7CisKKyAgICAgICAgZm9yIChhdXRvJiYgYWRhcHRlciA6IF9hZGFwdGVycykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFkYXB0ZXItPkludGVyZmFjZUd1aWQgPT0gYURldmljZUd1aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gYWRhcHRlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZfY3MpOworCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgbWFjIGFkZHJlc3MgdG8gc3RyaW5nCisgICAgc3RhdGljIFN0cmluZ14gTWFjVG9TdHJpbmcodWludDY0X3QgbWFjKQorICAgIHsKKyAgICAgICAgV0NIQVIgc3pNYWNbNjRdID0geyAwIH07CisgICAgICAgIHN3cHJpbnRmX3Moc3pNYWMsIDY0LCBNQUM4X0ZPUk1BVCwgTUFDOF9BUkcoKChVQ0hBUiopJm1hYykpKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKHN6TWFjKTsKKyAgICB9CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBSTE9DMTYvUEFOSUQgdG8gc3RyaW5nCisgICAgc3RhdGljIFN0cmluZ14gUmxvYzE2VG9TdHJpbmcodWludDE2X3QgcmxvYykKKyAgICB7CisgICAgICAgIFdDSEFSIHN6UmxvY1sxNl0gPSB7IDAgfTsKKyAgICAgICAgc3dwcmludGZfcyhzelJsb2MsIDE2LCBMIjB4JVgiLCBybG9jKTsKKyAgICAgICAgcmV0dXJuIHJlZiBuZXcgU3RyaW5nKHN6UmxvYyk7CisgICAgfQorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgc3RhdGUgdG8gc3RyaW5nCisgICAgc3RhdGljIFN0cmluZ14gVGhyZWFkU3RhdGVUb1N0cmluZyhvdFRocmVhZFN0YXRlIHN0YXRlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkKKyAgICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6Ok9mZmxpbmU6ICAgIHJldHVybiBMIk9mZmxpbmUiOworICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6OkRpc2FibGVkOiAgIHJldHVybiBMIkRpc2FibGVkIjsKKyAgICAgICAgY2FzZSBvdFRocmVhZFN0YXRlOjpEZXRhY2hlZDogICByZXR1cm4gTCJEaXNjb25uZWN0ZWQiOworICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6OkNoaWxkOiAgICAgIHJldHVybiBMIkNvbm5lY3RlZCAtIENoaWxkIjsKKyAgICAgICAgY2FzZSBvdFRocmVhZFN0YXRlOjpSb3V0ZXI6ICAgICByZXR1cm4gTCJDb25uZWN0ZWQgLSBSb3V0ZXIiOworICAgICAgICBjYXNlIG90VGhyZWFkU3RhdGU6OkxlYWRlcjogICAgIHJldHVybiBMIkNvbm5lY3RlZCAtIExlYWRlciI7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAvLyBDYWxsYmFjayBmcm9tIE9wZW5UaHJlYWQgaW5kaWNhdGluZyBhcnJpdmFsIG9yIHJlbW92YWwgb2YgaW50ZXJmYWNlcworICAgIHN0YXRpYyB2b2lkIE9UQ0FMTAorICAgIFRocmVhZERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrKAorICAgICAgICBib29sICAgICAgICBhQWRkZWQsCisgICAgICAgIGNvbnN0IEdVSUQqIGFEZXZpY2VHdWlkLAorICAgICAgICBfSW5fIHZvaWQqICBhQ29udGV4dAorICAgICkKKyAgICB7CisgICAgICAgIElJbnNwZWN0YWJsZSogcEluc3BlY3RhYmxlID0gKElJbnNwZWN0YWJsZSopYUNvbnRleHQ7CisgICAgICAgIG90QXBpXiBwVGhpcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8b3RBcGlePihwSW5zcGVjdGFibGUpOworCisgICAgICAgIGlmIChhQWRkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90QWRhcHRlcl4gYWRhcHRlciA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgZGV2aWNlIHRvIHRoZSBsaXN0LCBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlCisgICAgICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmcFRoaXMtPl9jcyk7CisKKyAgICAgICAgICAgIGlmIChwVGhpcy0+R2V0QWRhcHRlcigqYURldmljZUd1aWQpID09IG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBkZXZpY2VJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KChvdEFwaUluc3RhbmNlKilwVGhpcy0+X2FwaUluc3RhbmNlLCBhRGV2aWNlR3VpZCk7CisgICAgICAgICAgICAgICAgaWYgKGRldmljZUluc3RhbmNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcFRoaXMtPl9hZGFwdGVycy0+QXBwZW5kKGFkYXB0ZXIgPSByZWYgbmV3IG90QWRhcHRlcihkZXZpY2VJbnN0YW5jZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBUaGlzLT5fY3MpOworCisgICAgICAgICAgICBpZiAoYWRhcHRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIGEgbm90aWZpY2F0aW9uIG9mIGFycml2YWwKKyAgICAgICAgICAgICAgICBwVGhpcy0+QWRhcHRlckFycml2YWwoYWRhcHRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdEFkYXB0ZXJeIHJldCA9IG51bGxwdHI7CisgICAgICAgICAgICBHdWlkIGd1aWQgPSAqYURldmljZUd1aWQ7CisKKyAgICAgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZwVGhpcy0+X2NzKTsKKworICAgICAgICAgICAgLy8gTG9vayB1cCBpbiB0aGUgY2FjaGVkIGxpc3Qgb2YgYWRhcHRlcnMgdG8gcmVtb3ZlIGl0CisgICAgICAgICAgICB1aW50MzJfdCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoYXV0byYmIGFkYXB0ZXIgOiBwVGhpcy0+X2FkYXB0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLT5JbnRlcmZhY2VHdWlkID09IGd1aWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBhZGFwdGVyOworICAgICAgICAgICAgICAgICAgICBwVGhpcy0+X2FkYXB0ZXJzLT5SZW1vdmVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBUaGlzLT5fY3MpOworCisgICAgICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldC0+SW52b2tlQWRhcHRlclJlbW92YWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmNwcCBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9wY2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODk0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmNwcApAQCAtMCwwICsxLDI5IEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGNoLmgiCmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmggYi9leGFtcGxlcy9hcHBzL3dpbmRvd3MvcGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNDRhYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FwcHMvd2luZG93cy9wY2guaApAQCAtMCwwICsxLDQ0IEBACivvu78vKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworCisjaW5jbHVkZSA8V2luU29jazIuaD4KKyNpbmNsdWRlIDxXaW5kb3dzLmg+CisjaW5jbHVkZSA8Y29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPHBwbHRhc2tzLmg+CisKKyNpbmNsdWRlIDx3czJkZWYuaD4KKyNpbmNsdWRlIDx3czJpcGRlZi5oPgorI2luY2x1ZGUgPG1zdGNwaXAuaD4KKworI2luY2x1ZGUgIm90QXBpLmgiCisKKyNpbmNsdWRlICJBcHAueGFtbC5oIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY29tbW9uLXN3aXRjaGVzLm1rIGIvZXhhbXBsZXMvY29tbW9uLXN3aXRjaGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2Q2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jb21tb24tc3dpdGNoZXMubWsKQEAgLTAsMCArMSw5MSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2lmZXEgKCQoVE1GX1BST1hZKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLXRtZi1wcm94eQorZW5kaWYKKworaWZlcSAoJChCT1JERVJfUk9VVEVSKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWJvcmRlci1yb3V0ZXIKK2VuZGlmCisKK2lmZXEgKCQoQ0VSVF9MT0cpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtY2VydC1sb2cKK2VuZGlmCisKK2lmZXEgKCQoQ09BUCksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1hcHBsaWNhdGlvbi1jb2FwCitlbmRpZgorCitpZmVxICgkKENPTU1JU1NJT05FUiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1jb21taXNzaW9uZXIKK2VuZGlmCisKK2lmZXEgKCQoQ09WRVJBR0UpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtY292ZXJhZ2UKK2VuZGlmCisKK2lmZXEgKCQoREVCVUcpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtZGVidWcgLS1lbmFibGUtb3B0aW1pemF0aW9uPW5vCitlbmRpZgorCitpZmVxICgkKERIQ1A2X0NMSUVOVCksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1kaGNwNi1jbGllbnQKK2VuZGlmCisKK2lmZXEgKCQoREhDUDZfU0VSVkVSKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWRoY3A2LXNlcnZlcgorZW5kaWYKKworaWZlcSAoJChESVNBQkxFX0RPQyksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWRpc2FibGUtZG9jcworZW5kaWYKKworaWZlcSAoJChETlNfQ0xJRU5UKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWRucy1jbGllbnQKK2VuZGlmCisKK2lmZXEgKCQoSkFNX0RFVEVDVElPTiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1qYW0tZGV0ZWN0aW9uCitlbmRpZgorCitpZmVxICgkKEpPSU5FUiksMSkKK2NvbmZpZ3VyZV9PUFRJT05TICAgICAgICAgICAgICArPSAtLWVuYWJsZS1qb2luZXIKK2VuZGlmCisKK2lmZXEgKCQoTEVHQUNZKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLWxlZ2FjeQorZW5kaWYKKworaWZlcSAoJChNQUNfV0hJVEVMSVNUKSwxKQorY29uZmlndXJlX09QVElPTlMgICAgICAgICAgICAgICs9IC0tZW5hYmxlLW1hYy13aGl0ZWxpc3QKK2VuZGlmCisKK2lmZXEgKCQoTVREX05FVERJQUcpLDEpCitjb25maWd1cmVfT1BUSU9OUyAgICAgICAgICAgICAgKz0gLS1lbmFibGUtbXRkLW5ldHdvcmstZGlhZ25vc3RpYworZW5kaWYKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9SRUFETUUubWQgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNTQgQEAKKyMgT3BlblRocmVhZCBvbiBXaW5kb3dzICMKKworVGhlc2UgY29tcG9uZW50cyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0byBnZXQgT3BlblRocmVhZCBpbnRlZ3JhdGVkIGludG8gdGhlIFdpbmRvd3MKK25ldHdvcmtpbmcgc3RhY2sgYW5kIHByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciBhcHBsaWNhdGlvbnMgdG8gY29udHJvbCBpdC4KKworIyMgQXJjaGl0ZWN0dXJlICMjCisKK1tuZGlzXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmRpcy1kcml2ZXJzCitbbHdmXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmRpcy1maWx0ZXItZHJpdmVycworW21pbmlwb3J0XTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmRpcy1taW5pcG9ydC1kcml2ZXJzMgorW2lvY3RsXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjMyMTkodj12cy44NSkuYXNweAorW29pZF06IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9oYXJkd2FyZS9mZjU2NjcwNyh2PXZzLjg1KS5hc3B4CitbbmJsXTogaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9oYXJkd2FyZS9kcml2ZXJzL25ldHdvcmsvbmV0LWJ1ZmZlci1hcmNoaXRlY3R1cmUKKworIVtXaW5kb3dzIEFyY2hpdGVjdHVyZV0oLi4vLi4vLi4vZG9jL2ltYWdlcy93aW5kb3dzX2Rlc2lnbi5wbmcpCisKK1RoaXMgZGVzaWduIGFsbG93cyBmb3Igc3VwcG9ydCBvZiBib3RoIHNpbXBsZSByYWRpbyBkZXZpY2VzIGFuZCBkZXZpY2VzIHJ1bm5pbmcgdGhlIGNvbXBsZXRlCitPcGVuVGhyZWFkIHN0YWNrLgorCisjIyMgb3RBcGkuZGxsICMjIworCitUaGlzIGlzIHRoZSBkeW5hbWljIGxpYnJheSBmb3IgYXBwbGljYXRpb25zIHRvIGNvbnRyb2wgdGhlIE9wZW5UaHJlYWQgc3RhY2sgZnJvbSB1c2VyIG1vZGUuIEl0CitleHBvc2VzIGFsbCB0aGUgY29udHJvbCBwYXRoIEFQSXMgZnJvbSBgb3BlbnRocmVhZC5oYC4gSXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBkcml2ZXIgYnkgdGhlIHVzZQorb2YgW0lPQ1RMXVtpb2N0bF1zLiBUaGUgSU9DVExzIGFsbG93IG90QXBpLmRsbCB0byBzZXJpYWxpemUgYW5kIHNlbmQgY29tbWFuZHMsIGFuZCBwb2xsIGZvciBub3RpZmljYXRpb25zLAord2hpY2ggY2FuIHRoZW4gYmUgcmV0dXJuZWQgYmFjayB0byB0aGUgY2xpZW50LgorCisjIyMgb3RMd2Yuc3lzICMjIworCitUaGlzIGlzIHdoZXJlIG1vc3Qgb2YgdGhlIHJlYWwgbG9naWMgbGl2ZXMuIGBvdEx3Zi5zeXNgIGlzIGFuIFtORElTXVtuZGlzXSBMaWdodCBXZWlnaHQgRmlsdGVyIChbTFdGXVtsd2ZdKSBkcml2ZXIuCitJdCBwbHVncyBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBiaW5kaW5nIHRvIGEgcHJvdG9jb2wgZHJpdmVyIChUQ1BJUCkgYXQgdGhlIHRvcCwgYW5kIGFuIE5ESVMgW01pbmlwb3J0XVttaW5pcG9ydF0KK2F0IHRoZSBib3R0b20uIEl0J3Mgam9iIGlzIHRvIHRha2UgSVB2NiBwYWNrZXRzIGZyb20gVENQSVAgYW5kIHBhc3MgdGhlIG5lY2Vzc2FyeSBkYXRhIGRvd24gdG8gdGhlIE1pbmlwb3J0CitpbiBvcmRlciB0byBzZW5kIHRoZSBwYWNrZXRzIG91dCBvdmVyIHRoZSBuZXR3b3JrLgorCitgb3RMd2Yuc3lzYCBzdXBwb3J0cyBvcGVyYXRpbmcgaW4gdHdvIG1vZGVzOiBGdWxsIFN0YWNrIGFuZCBUdW5uZWwuIEZ1bGwgU3RhY2sgbW9kZSBpcyB3aGVyZSBPcGVuVGhyZWFkIGlzCitydW5uaW5nIG9uIHRoZSBob3N0IChpbiBXaW5kb3dzKSBhbmQgYSBzaW1wbGUgcmFkaW8gZGV2aWNlIGlzIGNvbm5lY3RlZCBleHRlcm5hbGx5LiBUdW5uZWwgbW9kZSBpcyB3aGVyZQorT3BlblRocmVhZCBpcyBydW5uaW5nIG9uIHRoZSBleHRlcm5hbCBkZXZpY2UgYW5kIFdpbmRvd3MgaXMgbWVyZWx5IGEgcGFzcyB0aHJvdWdoIGZvciBjb21tYW5kcyBhbmQgcGFja2V0cy4KKworSW4gYm90aCBjYXNlcywgYG90THdmLnN5c2AgdXNlcyB0aGUgU3BpbmVsIGNvbW1hbmQgaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBjb25uZWN0ZWQgZGV2aWNlLiBXaGVuIG9wZXJhdGluZworaW4gRnVsbCBTdGFjayBtb2RlLCBgb3RMd2Yuc3lzYCB1c2VzIG9ubHkgdGhlIGxvdyBsZXZlbCBQSFkvTUFDIGNvbW1hbmRzLiBJbiBUdW5uZWwgbW9kZSwgaXQgdXNlcyB0aGUgaGlnaGVyIGxheWVyCitTcGluZWwgY29tbWFuZHMgYW5kIGxldHMgdGhlIGRldmljZSBtYW5hZ2UgdGhlIGFjdHVhbCBUaHJlYWQgc3RhY2suCisKKyMjIyBvdHRtcC5zeXMgIyMjCisKK1RoaXMgaXMgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBwYXNzaW5nIHRoZSBTcGluZWwgY29tbWFuZHMgZnJvbSBgb3RMd2Yuc3lzYCBkb3duIHRvIHRoZSBkZXZpY2UuIEl0IGlzIHJlc3BvbnNpYmxlCitmb3IgYWJzdHJhY3RpbmcgdGhlIGFjdHVhbCBtZWNoYW5pc20gKFVTQiwgU2VyaWFsLCBTUEkpIHVzZWQgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgZGV2aWNlLiBJdCBoYW5kbGVzIHRoZSBkZXZpY2UKK2Fycml2YWwvcmVtb3ZhbCBhbmQgdGhlIGVuY29kaW5nL2RlY29kaW5nIG9mIGRhdGEgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggaXQuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkgaGFuZGxlcworU2VyaWFsIGRldmljZXMuCisKKyMjIyBEZXZpY2UgIyMjCisKK1dpbmRvd3Mgc3VwcG9ydHMgT3BlblRocmVhZCBkZXZpY2VzIHRoYXQgaW1wbGVtZW50IHRoZSBTcGluZWwgcHJvdG9jb2wuIEl0IHN1cHBvcnRzIGRldmljZXMgdGhhdCBzdXBwb3J0IGVpdGhlciB0aGUgcmF3CitsaW5rLWxheWVyIFBIWS9NQUMgY29tbWFuZHMgYW5kIGRldmljZXMgdGhhdCBzdXBwb3J0IHRoZSBUaHJlYWQgY29tbWFuZHMgKGFuZCBkZXZpY2VzIHRoYXQgc3VwcG9ydCBib3RoKS4gQnkgZGVmYXVsdCwKK1dpbmRvd3Mgd2lsbCBvcGVyYXRlIGluIEZ1bGwgU3RhY2sgbW9kZSwgb25seSBzZW5kaW5nIHJhdyBsaW5rLWxheWVyIGNvbW1hbmRzLgorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL29wZW50aHJlYWQtY29yZS13aW5kb3dzLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYWYzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vcGVudGhyZWFkLWNvcmUtd2luZG93cy1jb25maWcuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBXaW5kb3dzIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9XSU5ET1dTX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfV0lORE9XU19DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMKKyAqCisgKiBUaGUgbnVtYmVyIG9mIG1lc3NhZ2UgYnVmZmVycyBpbiB0aGUgYnVmZmVyIHBvb2wuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMgICAgICAgICAgICAgICAyMDQ4CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU4KKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4uCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTiAgICAgICAgICAgICAgICAgICAgICAzMgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfSVBfQUREUlNfUEVSX0NISUxECisgKgorICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBJUHY2IGFkZHJlc3MgcmVnaXN0cmF0aW9ucyBwZXIgY2hpbGQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0lQX0FERFJTX1BFUl9DSElMRCAgICAgICAgICAgICAgICA2CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMKKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgSm9pbmVyIGVudHJpZXMgbWFpbnRhaW5lZCBieSB0aGUgQ29tbWlzc2lvbmVyLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMgICAgICAgICAgICAgICAgMTYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorICoKKyAqIFRoZSBtZXNzYWdlIHBvb2wgaXMgbWFuYWdlZCBieSBwbGF0Zm9ybSBkZWZpbmVkIGxvZ2ljIHdoZW4gdGhpcyBmbGFnIGlzIHNldC4KKyAqIFRoaXMgZmVhdHVyZSB3b3VsZCB0eXBpY2FsbHkgYmUgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiBhIG11bHRpLXRocmVhZGVkIHN5c3RlbQorICogYW5kIG11bHRpcGxlIHRocmVhZHMgbmVlZCB0byBhY2Nlc3MgdGhlIG1lc3NhZ2UgcG9vbC4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UICAgICAgIDEKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTAorICoKKyAqIFRoZSBsb2cgbGV2ZWwuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICBPVF9MT0dfTEVWRUxfREVCRworCisgLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QS1RfRFVNUAorICoKKyAqIERlZmluZSB0byBlbmFibGUgbG9nIGNvbnRlbnQgb2YgcGFja2V0cy4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QICAgICAgICAgICAgICAgICAgICAgIDAKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfV0lORE9XU19DT05GSUdfSF8KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3RMd2ZJb2N0bC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3RMd2ZJb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmRmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vdEx3ZklvY3RsLmgKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgSU9DVEwgaW50ZXJmYWNlIGZvciBvdEx3Zi5zeXMuCisgKi8KKworI2lmbmRlZiBfX09UTFdGSU9DVExfSF9fCisjZGVmaW5lIF9fT1RMV0ZJT0NUTF9IX18KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworX19pbmxpbmUgTE9ORyBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RFcnJvciBlcnJvcikgeyByZXR1cm4gKExPTkcpLSgoaW50KWVycm9yKTsgfQorCisvLyBVc2VyLW1vZGUgSU9DVEwgcGF0aCBmb3IgQ3JlYXRlRmlsZQorI2RlZmluZSBPVExXRl9JT0NMVF9QQVRIICAgICAgVEVYVCgiXFxcXC5cXFxcb3Rsd2YiKQorCisvLworLy8gSU9DTFRzIGFuZCBEYXRhIFR5cGVzCisvLworCisjZGVmaW5lIE9UTFdGX0NUTF9DT0RFKHJlcXVlc3QsIG1ldGhvZCwgYWNjZXNzKSBcCisgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfTkVUV09SSywgcmVxdWVzdCwgbWV0aG9kLCBhY2Nlc3MpCisKKy8vIERpZmZlcmVudCBwb3NzaWJsZSBub3RpZmljYXRpb24gdHlwZXMKK3R5cGVkZWYgZW51bSBfT1RMV0ZfTk9USUZfVFlQRQoreworICAgIE9UTFdGX05PVElGX1VOU1BFQ0lGSUVELAorICAgIE9UTFdGX05PVElGX0RFVklDRV9BVkFJTEFCSUxJVFksCisgICAgT1RMV0ZfTk9USUZfU1RBVEVfQ0hBTkdFLAorICAgIE9UTFdGX05PVElGX0RJU0NPVkVSLAorICAgIE9UTFdGX05PVElGX0FDVElWRV9TQ0FOLAorICAgIE9UTFdGX05PVElGX0VORVJHWV9TQ0FOLAorICAgIE9UTFdGX05PVElGX0NPTU1JU1NJT05FUl9FTkVSR1lfUkVQT1JULAorICAgIE9UTFdGX05PVElGX0NPTU1JU1NJT05FUl9QQU5JRF9RVUVSWSwKKyAgICBPVExXRl9OT1RJRl9KT0lORVJfQ09NUExFVEUKKworfSBPVExXRl9OT1RJRl9UWVBFOworCisjZGVmaW5lIE1BWF9FTkVSR1lfUkVQT1JUX0xFTkdUSCAgICA2NAorCisvLworLy8gUXVlcmllcyAoYXN5bmMpIHRoZSBuZXh0IG5vdGlmaWNhdGlvbiBpbiB0aGUgcXVldWUKKy8vCisjZGVmaW5lIElPQ1RMX09UTFdGX1FVRVJZX05PVElGSUNBVElPTiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RMV0ZfTk9USUZJQ0FUSU9OIHsKKyAgICAgICAgR1VJRCAgICAgICAgICAgICAgICBJbnRlcmZhY2VHdWlkOworICAgICAgICBPVExXRl9OT1RJRl9UWVBFICAgIE5vdGlmVHlwZTsKKyAgICAgICAgdW5pb24KKyAgICAgICAgeworICAgICAgICAgICAgLy8gUGF5bG9hZCBmb3IgT1RMV0ZfTk9USUZfREVWSUNFX0FWQUlMQUJJTElUWQorICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgQXZhaWxhYmxlOworICAgICAgICAgICAgfSBEZXZpY2VBdmFpbGFiaWxpdHlQYXlsb2FkOworCisgICAgICAgICAgICAvLyBQYXlsb2FkIGZvciBPVExXRl9OT1RJRl9TVEFURV9DSEFOR0UKKyAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEZsYWdzOworICAgICAgICAgICAgfSBTdGF0ZUNoYW5nZVBheWxvYWQ7CisKKyAgICAgICAgICAgIC8vIFBheWxvYWQgZm9yIE9UTFdGX05PVElGX0RJU0NPVkVSCisgICAgICAgICAgICBzdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBWYWxpZDsKKyAgICAgICAgICAgICAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgICAgICBSZXN1bHRzOworICAgICAgICAgICAgfSBEaXNjb3ZlclBheWxvYWQ7CisKKyAgICAgICAgICAgIC8vIFBheWxvYWQgZm9yIE9UTFdGX05PVElGX0FDVElWRV9TQ0FOCisgICAgICAgICAgICBzdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBWYWxpZDsKKyAgICAgICAgICAgICAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgICAgICBSZXN1bHRzOworICAgICAgICAgICAgfSBBY3RpdmVTY2FuUGF5bG9hZDsKKworICAgICAgICAgICAgLy8gUGF5bG9hZCBmb3IgT1RMV0ZfTk9USUZfRU5FUkdZX1NDQU4KKyAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFZhbGlkOworICAgICAgICAgICAgICAgIG90RW5lcmd5U2NhblJlc3VsdCAgICAgIFJlc3VsdHM7CisgICAgICAgICAgICB9IEVuZXJneVNjYW5QYXlsb2FkOworCisgICAgICAgICAgICAvLyBQYXlsb2FkIGZvciBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfRU5FUkdZX1JFUE9SVAorICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgQ2hhbm5lbE1hc2s7CisgICAgICAgICAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgRW5lcmd5TGlzdExlbmd0aDsKKyAgICAgICAgICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBFbmVyZ3lMaXN0W01BWF9FTkVSR1lfUkVQT1JUX0xFTkdUSF07CisKKyAgICAgICAgICAgIH0gQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0UGF5bG9hZDsKKworICAgICAgICAgICAgLy8gUGF5bG9hZCBmb3IgT1RMV0ZfTk9USUZfQ09NTUlTU0lPTkVSX1BBTklEX1FVRVJZCisgICAgICAgICAgICBzdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICBQYW5JZDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBDaGFubmVsTWFzazsKKyAgICAgICAgICAgIH0gQ29tbWlzc2lvbmVyUGFuSWRRdWVyeVBheWxvYWQ7CisKKyAgICAgICAgICAgIC8vIFBheWxvYWQgZm9yIE9UTFdGX05PVElGX0pPSU5FUl9DT01QTEVURQorICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RFcnJvciAgICAgICAgICAgICBFcnJvcjsKKyAgICAgICAgICAgIH0gSm9pbmVyQ29tcGxldGVQYXlsb2FkOworICAgICAgICB9OworICAgIH0gT1RMV0ZfTk9USUZJQ0FUSU9OLCAqUE9UTFdGX05PVElGSUNBVElPTjsKKworLy8KKy8vIEVudW1lcmF0ZXMgYWxsIHRoZSBUaHJlYWQgaW50ZXJmYWNlcyBndWlkcworLy8KKyNkZWZpbmUgSU9DVExfT1RMV0ZfRU5VTUVSQVRFX0RFVklDRVMgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UTFdGX0lOVEVSRkFDRV9MSVNUCisgICAgeworICAgICAgICB1aW50MTZfdCBjSW50ZXJmYWNlR3VpZHM7CisgICAgICAgIEdVSUQgICAgIEludGVyZmFjZUd1aWRzWzFdOworICAgIH0gT1RMV0ZfSU5URVJGQUNFX0xJU1QsICpQT1RMV0ZfSU5URVJGQUNFX0xJU1Q7CisKKy8vCisvLyBRdWVyaWVzIHRoZSBkZXRpYWxzIG9mIGEgZ2l2ZW4gZGV2aWNlIFRocmVhZCBpbnRlcmZhY2VzCisvLworI2RlZmluZSBJT0NUTF9PVExXRl9RVUVSWV9ERVZJQ0UgXAorICAgIE9UTFdGX0NUTF9DT0RFKDIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQgKGluKQorICAgIHR5cGVkZWYgc3RydWN0IF9PVExXRl9ERVZJQ0UgeworICAgICAgICBVTE9ORyAgICAgICAgICAgQ29tcGFydG1lbnRJRDsKKyAgICB9IE9UTFdGX0RFVklDRSwgKlBPVExXRl9ERVZJQ0U7CisKKy8vCisvLyBQcm94aWVzIHRvIG90KiBBUElzIGluIG90THdmLnN5cworLy8KKworLyogUkVNT1ZFRAorI2RlZmluZSBJT0NUTF9PVExXRl9PVF9FTkFCTEVEIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gQk9PTEVBTiAtIGFFbmFibGVkCisqLworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9JTlRFUkZBQ0UgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIEJPT0xFQU4gLSBhVXAKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9USFJFQUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwMiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYVN0YXJ0ZWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9BQ1RJVkVfU0NBTiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTAzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhU2NhbkNoYW5uZWxzCisgICAgLy8gdWludDE2X3QgLSBhU2NhbkR1cmF0aW9uCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfRElTQ09WRVIgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwNCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQzMl90IC0gYVNjYW5DaGFubmVscworICAgIC8vIHVpbnQxNl90IC0gYVNjYW5EdXJhdGlvbgorICAgIC8vIHVpbnQxNl90IC0gYVBhbmlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ0hBTk5FTCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFDaGFubmVsCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ0hJTERfVElNRU9VVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhVGltZW91dAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0VYVEVOREVEX0FERFJFU1MgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEwNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90RXh0QWRkcmVzcyAtIGFFeHRlbmRlZEFkZHJlc3MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9FWFRFTkRFRF9QQU5JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRlbmRlZFBhbklkIC0gYUV4dGVuZGVkUGFuSWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9MRUFERVJfUkxPQyBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTA5LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYUxlYWRlclJsb2MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9MSU5LX01PREUgXAorICAgIE9UTFdGX0NUTF9DT0RFKDExMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TGlua01vZGVDb25maWcgLSBhQ29uZmlnCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTUFTVEVSX0tFWSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTExLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RNYXN0ZXJLZXkgLSBhS2V5CisgICAgLy8gdWludDhfdCAtIGFLZXlMZW5ndGgKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9NRVNIX0xPQ0FMX0VJRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTEyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYU1lc2hMb2NhbEVpZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01FU0hfTE9DQUxfUFJFRklYIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE1lc2hMb2NhbFByZWZpeCAtIGFQcmVmaXgKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0RBVEFfTEVBREVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90W10gLSBhRGF0YQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX05FVFdPUktfREFUQV9MT0NBTCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTE1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdFtdIC0gYURhdGEKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX05BTUUgXAorICAgIE9UTFdGX0NUTF9DT0RFKDExNiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TmV0d29ya05hbWUgLSBhTmV0d29ya05hbWUKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9QQU5fSUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDExNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90UGFuSWQgLSBhUGFuSWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ST1VURVJfUk9MTF9FTkFCTEVEIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYUVuYWJsZWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TSE9SVF9BRERSRVNTIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMTksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdFNob3J0QWRkcmVzcyAtIGFTaG9ydEFkZHJlc3MKKworLyogTk9UIFVTRUQKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfVU5JQ0FTVF9BRERSRVNTRVMgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEyMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TmV0aWZBZGRyZXNzW10gLSBhQWRkcmVzc2VzCisqLworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE9wZXJhdGlvbmFsRGF0YXNldCAtIGFEYXRhc2V0CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUEVORElOR19EQVRBU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE9wZXJhdGlvbmFsRGF0YXNldCAtIGFEYXRhc2V0CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTE9DQUxfTEVBREVSX1dFSUdIVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTIzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFXZWlnaHQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9BRERfQk9SREVSX1JPVVRFUiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTI0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90Qm9yZGVyUm91dGVyQ29uZmlnIC0gYUNvbmZpZworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JFTU9WRV9CT1JERVJfUk9VVEVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZQcmVmaXggLSBhUHJlZml4CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQUREX0VYVEVSTkFMX1JPVVRFIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRlcm5hbFJvdXRlQ29uZmlnIC0gYUNvbmZpZworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JFTU9WRV9FWFRFUk5BTF9ST1VURSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTI3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90SXA2UHJlZml4IC0gYVByZWZpeAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1NFTkRfU0VSVkVSX0RBVEEgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEyOCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT05URVhUX0lEX1JFVVNFX0RFTEFZIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMjksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFEZWxheQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0tFWV9TRVFVRU5DRV9DT1VOVEVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMzAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFLZXlTZXF1ZW5jZUNvdW50ZXIKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0lEX1RJTUVPVVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhVGltZW91dAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTMyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFUaHJlc2hvbGQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9SRUxFQVNFX1JPVVRFUl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTMzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhUm91dGVySWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzNCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIEJPT0xFQU4gLSBhRW5hYmxlZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0FERF9NQUNfV0hJVEVMSVNUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMzUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRBZGRyZXNzIC0gYUV4dEFkZHIKKyAgICAvLyBpbnQ4X3QgLSBhUnNzaSAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUkVNT1ZFX01BQ19XSElURUxJU1QgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzNiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXh0QWRkcgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BQ19XSElURUxJU1RfRU5UUlkgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhSW5kZXggKGlucHV0KQorICAgIC8vIG90TWFjV2hpdGVsaXN0RW50cnkgLSBhRW50cnkgKG91dHB1dCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DTEVBUl9NQUNfV0hJVEVMSVNUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxMzgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUgXAorICAgIE9UTFdGX0NUTF9DT0RFKDEzOSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90RGV2aWNlUm9sZSAtIGFSb2xlCisgICAgLy8gb3RNbGVBdHRhY2hGaWx0ZXIgLSBhRmlsdGVyIChvbmx5IGZvciBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DSElMRF9JTkZPX0JZX0lEIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFDaGlsZElkIChpbnB1dCkKKyAgICAvLyBvdENoaWxkSW5mbyAtIGFDaGlsZEluZm8gKG91dHB1dCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DSElMRF9JTkZPX0JZX0lOREVYIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNDEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUNoaWxkSW5kZXggKGlucHV0KQorICAgIC8vIG90Q2hpbGRJbmZvIC0gYUNoaWxkSW5mbyAob3V0cHV0KQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0VJRF9DQUNIRV9FTlRSWSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTQyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFJbmRleCAoaW5wdXQpCisgICAgLy8gb3RFaWRDYWNoZUVudHJ5IC0gYUVudHJ5IChvdXRwdXQpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTEVBREVSX0RBVEEgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90TGVhZGVyRGF0YSAtIGFMZWFkZXJEYXRhCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1JPVVRFUl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTQ0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFSb3V0ZXJJRAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0xFQURFUl9XRUlHSFQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0NSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhV2VpZ2h0CisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTkVUV09SS19EQVRBX1ZFUlNJT04gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0NiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhVmVyc2lvbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BBUlRJVElPTl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTQ3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhUGFydGl0aW9uCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUkxPQzE2IFwKKyAgICBPVExXRl9DVExfQ09ERSgxNDgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFSbG9jMTYKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ST1VURVJfSURfU0VRVUVOQ0UgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE0OSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhSWRTZXF1ZW5jZQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JPVVRFUl9JTkZPIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFSb3V0ZXJJZCAoaW5wdXQpCisgICAgLy8gb3RSb3V0ZXJJbmZvIC0gYVJvdXRlckluZm8gKG91dHB1dCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE1MSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhVmVyc2lvbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BQ19CTEFDS0xJU1RfRU5BQkxFRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTUyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gQk9PTEVBTiAtIGFFbmFibGVkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQUREX01BQ19CTEFDS0xJU1QgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE1MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXh0QWRkcgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JFTU9WRV9NQUNfQkxBQ0tMSVNUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RFeHRBZGRyZXNzIC0gYUV4dEFkZHIKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOVFJZIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUluZGV4IChpbnB1dCkKKyAgICAvLyBvdE1hY0JsYWNrbGlzdEVudHJ5IC0gYUVudHJ5IChvdXRwdXQpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ0xFQVJfTUFDX0JMQUNLTElTVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTU2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BWF9UUkFOU01JVF9QT1dFUiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTU3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gaW50OF90IC0gYVBvd2VyCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTkVYVF9PTl9NRVNIX1BSRUZJWCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTU4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gQk9PTEVBTiAtIGFMb2NhbCAoaW5wdXQpCisgICAgLy8gdWludDhfdCAtIGFJdGVyYXRvciAoaW5wdXQpCisgICAgLy8gdWludDhfdCAtIGFOZXdJdGVyYXRvciAob3V0cHV0KQorICAgIC8vIG90Qm9yZGVyUm91dGVyQ29uZmlnIC0gYUNvbmZpZyAob3V0cHV0KQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BPTExfUEVSSU9EIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNTksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFQb2xsUGVyaW9kCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfTE9DQUxfTEVBREVSX1BBUlRJVElPTl9JRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTYwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhUGFydGl0aW9uSWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9BU1NJR05fTElOS19RVUFMSVRZIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXh0QWRkciAoaW5wdXQpCisgICAgLy8gdWludDhfdCAtIGFMaW5rUXVhbGl0eSAoaW5wdXQgb3Igb3V0cHV0KQorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BMQVRGT1JNX1JFU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUEFSRU5UX0lORk8gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE2MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90Um91dGVySW5mbyAtIGFQYXJlbnRJbmZvCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0lOR0xFVE9OIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYVNpbmdsZXRvbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BQ19DT1VOVEVSUyBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTY1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RNYWNDb3VudGVycyAtIGFDb3VudGVycworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX01BWF9DSElMRFJFTiBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTY2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFNYXhDaGlsZHJlbgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1NUQVJUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNjcsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfU1RPUCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTY4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorCisjZGVmaW5lIE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEggICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgT1BFTlRIUkVBRF9QUk9WX1VSTF9NQVhfTEVOR1RIICAgICAgICAgICA2NAorI2RlZmluZSBPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggICAgICAgIDMyCisjZGVmaW5lIE9QRU5USFJFQURfVkVORE9SX01PREVMX01BWF9MRU5HVEggICAgICAgMzIKKyNkZWZpbmUgT1BFTlRIUkVBRF9WRU5ET1JfU1dfVkVSU0lPTl9NQVhfTEVOR1RIICAxNgorI2RlZmluZSBPUEVOVEhSRUFEX1ZFTkRPUl9EQVRBX01BWF9MRU5HVEggICAgICAgIDY0Cit0eXBlZGVmIHN0cnVjdCBvdENvbW1pc3Npb25Db25maWcKK3sKKyAgICBjaGFyIFBTS2RbT1BFTlRIUkVBRF9QU0tfTUFYX0xFTkdUSCArIDFdOworICAgIGNoYXIgUHJvdmlzaW9uaW5nVXJsW09QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDFdOworICAgIGNoYXIgVmVuZG9yTmFtZVtPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyIFZlbmRvck1vZGVsW09QRU5USFJFQURfVkVORE9SX01PREVMX01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyIFZlbmRvclN3VmVyc2lvbltPUEVOVEhSRUFEX1ZFTkRPUl9TV19WRVJTSU9OX01BWF9MRU5HVEggKyAxXTsKKyAgICBjaGFyIFZlbmRvckRhdGFbT1BFTlRIUkVBRF9WRU5ET1JfREFUQV9NQVhfTEVOR1RIICsgMV07Cit9IG90Q29tbWlzc2lvbkNvbmZpZzsKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9KT0lORVJfU1RBUlQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE2OSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdENvbW1pc3Npb25Db25maWcgLSBhQ29uZmlnCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1NUT1AgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3MCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9GQUNUT1JZX0VVSTY0IFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXVpNjQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9IQVNIX01BQ19BRERSRVNTIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdEV4dEFkZHJlc3MgLSBhRXVpNjQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTczLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDhfdCAtIGFUaHJlc2hvbGQKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT01NSVNTSU9ORVJfUEFOSURfUVVFUlkgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3NCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MTZfdCAtIGFQYW5JZAorICAgIC8vIHVpbnQzMl90IC0gYUNoYW5uZWtNYXNrCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYUFkZHJlc3MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT01NSVNTSU9ORVJfRU5FUkdZX1NDQU4gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3NSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFDaGFubmVrTWFzaworICAgIC8vIHVpbnQ4X3QgLSBhQ291bnQKKyAgICAvLyB1aW50MTZfdCAtIGFQZXJpb2QKKyAgICAvLyB1aW50MTZfdCAtIGFTY2FuRHVyYXRpb24KKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYVJvdXRlckppdHRlcgorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0pPSU5FUl9VRFBfUE9SVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTc3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDE2X3QgLSBhSm9pbmVyVWRwUG9ydAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1NFTkRfRElBR05PU1RJQ19HRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE3OCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhRGVzdGluYXRpb24KKyAgICAvLyB1aW50OF90IC0gYUNvdW50CisgICAgLy8gdWludDhfdFthQ291bnRdIC0gYVRsdlR5cGVzCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9ESUFHTk9TVElDX1JFU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxNzksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RJcDZBZGRyZXNzIC0gYURlc3RpbmF0aW9uCisgICAgLy8gdWludDhfdCAtIGFDb3VudAorICAgIC8vIHVpbnQ4X3RbYUNvdW50XSAtIGFUbHZUeXBlcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX0FERF9KT0lORVIgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4MCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUV4dEFkZHJlc3NWYWxpZAorICAgIC8vIG90RXh0QWRkcmVzcyAtIGFFeHRBZGRyZXNzIChvcHRpb25hbCkKKyAgICAvLyBjaGFyW09QRU5USFJFQURfUFNLX01BWF9MRU5HVEggKyAxXSAtIGFQU0tkCisgICAgLy8gdWludDMyX3QgLSBhVGltZW91dAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1JFTU9WRV9KT0lORVIgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4MSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUV4dEFkZHJlc3NWYWxpZAorICAgIC8vIG90RXh0QWRkcmVzcyAtIGFFeHRBZGRyZXNzIChvcHRpb25hbCkKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9DT01NSVNJT05FUl9QUk9WSVNJT05JTkdfVVJMIFwKKyAgICBPVExXRl9DVExfQ09ERSgxODIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBjaGFyW09QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDFdIC0gYVByb3Zpc2lvbmluZ1VybCAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQU5OT1VOQ0VfQkVHSU4gXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFDaGFubmVsTWFzaworICAgIC8vIHVpbnQ4X3QgLSBhQ291bnQKKyAgICAvLyB1aW50MTZfdCAtIGFQZXJpb2QKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX0VORVJHWV9TQ0FOIFwKKyAgICBPVExXRl9DVExfQ09ERSgxODQsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50MzJfdCAtIGFTY2FuQ2hhbm5lbHMKKyAgICAvLyB1aW50MTZfdCAtIGFTY2FuRHVyYXRpb24KKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TRU5EX0FDVElWRV9HRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4NSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUxlbmd0aAorICAgIC8vIHVpbnQ4X3RbYUxlbmd0aF0gLSBhVGx2VHlwZXMKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcyAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9BQ1RJVkVfU0VUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxODYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RPcGVyYXRpb25hbERhdGFzZXQgLSBhRGF0YXNldAorICAgIC8vIHVpbnQ4X3QgLSBhTGVuZ3RoCisgICAgLy8gdWludDhfdFthTGVuZ3RoXSAtIGFUbHZUeXBlcworCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19HRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE4NywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYUxlbmd0aAorICAgIC8vIHVpbnQ4X3RbYUxlbmd0aF0gLSBhVGx2VHlwZXMKKyAgICAvLyBvdElwNkFkZHJlc3MgLSBhQWRkcmVzcyAob3B0aW9uYWwpCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9QRU5ESU5HX1NFVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTg4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIG90T3BlcmF0aW9uYWxEYXRhc2V0IC0gYURhdGFzZXQKKyAgICAvLyB1aW50OF90IC0gYUxlbmd0aAorICAgIC8vIHVpbnQ4X3RbYUxlbmd0aF0gLSBhVGx2VHlwZXMKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX0dFVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTg5LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIHVpbnQ4X3QgLSBhTGVuZ3RoCisgICAgLy8gdWludDhfdFthTGVuZ3RoXSAtIGFUbHZzCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfU0VORF9NR01UX0NPTU1JU1NJT05FUl9TRVQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE5MCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBvdE9wZXJhdGlvbmFsRGF0YXNldCAtIGFEYXRhc2V0CisgICAgLy8gdWludDhfdCAtIGFMZW5ndGgKKyAgICAvLyB1aW50OF90W2FMZW5ndGhdIC0gYVRsdnMKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9LRVlfU1dJVENIX0dVQVJEVElNRSBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTkxLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gdWludDMyX3QgLSBhS2V5U3dpdGNoR3VhcmRUaW1lCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfRkFDVE9SWV9SRVNFVCBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTkyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1RIUkVBRF9BVVRPX1NUQVJUIFwKKyAgICBPVExXRl9DVExfQ09ERSgxOTMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyBCT09MRUFOIC0gYUF1dG9TdGFydAorCisjZGVmaW5lIElPQ1RMX09UTFdGX09UX1BSRUZFUlJFRF9ST1VURVJfSUQgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE5NCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1dSSVRFX0RBVEEpCisgICAgLy8gR1VJRCAtIEludGVyZmFjZUd1aWQKKyAgICAvLyB1aW50OF90IC0gYVJvdXRlcklkCisKKyNkZWZpbmUgSU9DVExfT1RMV0ZfT1RfUFNLQyBcCisgICAgT1RMV0ZfQ1RMX0NPREUoMTk1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9EQVRBIHwgRklMRV9XUklURV9EQVRBKQorICAgIC8vIEdVSUQgLSBJbnRlcmZhY2VHdWlkCisgICAgLy8gb3RQU0tjIC0gYVBTS2MKKworI2RlZmluZSBJT0NUTF9PVExXRl9PVF9QQVJFTlRfUFJJT1JJVFkgXAorICAgIE9UTFdGX0NUTF9DT0RFKDE5NiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKyAgICAvLyBHVUlEIC0gSW50ZXJmYWNlR3VpZAorICAgIC8vIGludDhfdCAtIGFQYXJlbnRQcmlvcml0eQorCisvLyBPcGVuVGhyZWFkIGZ1bmN0aW9uIElPQ1RMIGNvZGVzCisjZGVmaW5lIE1JTl9PVExXRl9JT0NUTF9GVU5DX0NPREUgMTAwCisjZGVmaW5lIE1BWF9PVExXRl9JT0NUTF9GVU5DX0NPREUgMTk2CisKKyNlbmRpZiAvL19fT1RMV0ZJT0NUTF9IX18KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290TkJMQ29udGV4dC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3ROQkxDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyMDRmMgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290TkJMQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgY29udGV4dCBzdHJ1Y3R1cmUgZm9yIE5CTHMgc2VuZCBiZXR3ZWVuIG90THdmIGFuZCBpdCdzIG1pbmlwb3J0LgorICovCisKKyNpZm5kZWYgX19PVF9OQkxfQ09OVEVYVF9IX18KKyNkZWZpbmUgX19PVF9OQkxfQ09OVEVYVF9IX18KKworI2lmbmRlZiBfTkRJU18KKyNkZWZpbmUgTkVUX0JVRkZFUl9MSVNUX0lORk8oX05CTCwgX0lkKSAgICAgICAgICAgICAoKF9OQkwpLT5OZXRCdWZmZXJMaXN0SW5mb1soX0lkKV0pCisjZW5kaWYKKworLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGUgQUNLIHJlY2VpdmVkIGhhZCB0aGUgRnJhbWUgcGVuZGluZyBmbGFnCisjZGVmaW5lIE9UX05CTF9GTEFHX0FDS19GUkFNRV9QRU5ESU5HICAgMHgwMQorCisvLyBSZXByZXNlbnRzIHRoZSBkYXRhIG5lY2Vzc2FyeSBmb3IgdGhlIE1BQyBsYXllciB0byBzZW5kIG91dCB0aGUgTmV0QnVmZmVyTGlzdAorLy8gTXVzdCBiZSBzYXZlZCBpbjogTkVUX0JVRkZFUl9MSVNUX0lORk8oTmV0QnVmZmVyTGlzdCwgTWVkaWFTcGVjaWZpY0luZm9ybWF0aW9uRXgpCit0eXBlZGVmIHN0cnVjdCBfT1RfTkJMX0NPTlRFWFQKK3sKKyAgICAvLyBGbGFncworICAgIFVDSEFSIEZsYWdzOworCisgICAgLy8gQ2hhbm5lbCB1c2VkIHRvIHRyYW5zbWl0L3JlY2VpdmUgdGhlIGZyYW1lLgorICAgIFVDSEFSIENoYW5uZWw7CisKKyAgICAvLyBUcmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbS4KKyAgICBDSEFSICBQb3dlcjsKKworICAgIC8vIExpbmsgUXVhbGl0eSBJbmRpY2F0b3IgZm9yIHJlY2VpdmVkIGZyYW1lcy4KKyAgICBVQ0hBUiBMcWk7CisKK30gT1RfTkJMX0NPTlRFWFQsICpQT1RfTkJMX0NPTlRFWFQ7CisKKy8vIE9UX05CTF9DT05URVhUIG11c3QgZml0IGluIHRoZSBwb2ludGVyIHVzZWQgZm9yIE1lZGlhU3BlY2lmaWNJbmZvcm1hdGlvbkV4IGluIHRoZSBOQkwKK0NfQVNTRVJUKHNpemVvZihPVF9OQkxfQ09OVEVYVCkgPD0gc2l6ZW9mKFBWT0lEKSk7CisKKy8vIEhlbHBlciB0byBzZXQgdGhlIE9UX05CTF9DT05URVhUIGF0dGFjaGVkIHRvIHRoZSBOZXRCdWZmZXJMaXN0CitfX2ZvcmNlaW5saW5lIFZPSUQgU2V0TkJMQ29udGV4dChfSW5fIFBORVRfQlVGRkVSX0xJU1QgTmV0QnVmZmVyTGlzdCwgX0luXyBQT1RfTkJMX0NPTlRFWFQgQ29udGV4dCkKK3sKKyAgICAqKFBPVF9OQkxfQ09OVEVYVCkoJk5FVF9CVUZGRVJfTElTVF9JTkZPKE5ldEJ1ZmZlckxpc3QsIE1lZGlhU3BlY2lmaWNJbmZvcm1hdGlvbkV4KSkgPSAqQ29udGV4dDsKK30KKworLy8gSGVscGVyIHRvIHJldHVybiB0aGUgT1RfTkJMX0NPTlRFWFQgYXR0YWNoZWQgdG8gdGhlIE5ldEJ1ZmZlckxpc3QKK19fZm9yY2VpbmxpbmUgUE9UX05CTF9DT05URVhUIEdldE5CTENvbnRleHQoX0luXyBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QpCit7CisgICAgcmV0dXJuIChQT1RfTkJMX0NPTlRFWFQpKCZORVRfQlVGRkVSX0xJU1RfSU5GTyhOZXRCdWZmZXJMaXN0LCBNZWRpYVNwZWNpZmljSW5mb3JtYXRpb25FeCkpOworfQorCisjZW5kaWYgLy9fX09UX05CTF9DT05URVhUX0hfXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3ROb2RlLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9vdE5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhhOTViCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3ROb2RlLmgKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIGEgbm9kZSBpbnRlcmZhY2UgZm9yIG9wZW50aHJlYWQuaCB0byBiZSB1c2VkIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RzCisgKi8KKworI2lmbmRlZiBPVE5PREVfSF8KKyNkZWZpbmUgT1ROT0RFX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2lmbmRlZiBPVE5PREVBUEkKKyNkZWZpbmUgT1ROT0RFQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBSZXByZXNlbnRzIGEgdmlydHVhbCBub2RlIGZvciBhbiBvcGVudGhyZWFkIGludGVyZmFjZQorICovCit0eXBlZGVmIHN0cnVjdCBvdE5vZGUgb3ROb2RlOworCisvKioKKyAqIExvZ3MgYSBXUFAgbWVzc2FnZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlTG9nKGNvbnN0IGNoYXIgKmFNZXNzYWdlKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYSBuZXcgdmlydHVhbCBub2RlCisgKi8KK09UTk9ERUFQSSBvdE5vZGUqIE9UQ0FMTCBvdE5vZGVJbml0KHVpbnQzMl90IGlkKTsKKworLyoqCisgKiBGcmVlcyBhIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUZpbmFsaXplKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIGxpbmsgbW9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TW9kZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTW9kZSk7CisKKy8qKgorICogU3RhcnRzIHRoZSB0aHJlYWQgaW50ZXJmYWNlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVJbnRlcmZhY2VVcChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTdG9wcyB0aGUgdGhyZWFkIGludGVyZmFjZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlSW50ZXJmYWNlRG93bihvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTdGFydHMgdGhlIHRocmVhZCBsb2dpYworICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlVGhyZWFkU3RhcnQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU3RvcHMgdGhlIHRocmVhZCBsb2dpYworICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlVGhyZWFkU3RvcChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTdGFydHMgdGhlIGNvbW1pc3Npb25lciBsb2dpYworICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyU3RhcnQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogQWRkcyBhIG5ldyBqb2luZXIgdG8gdGhlIGxpc3QgZm9yIGNvbW1pc3Npb25pbmcKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lckpvaW5lckFkZChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphRXh0QWRkciwgY29uc3QgY2hhciAqYVBTS2QpOworCisvKioKKyAqIFN0b3BzIHRoZSBjb21taXNzaW9uZXIgbG9naWMKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lclN0b3Aob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU3RhcnRzIHRoZSBqb2luZXIgbG9naWMKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUpvaW5lclN0YXJ0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQU0tkLCBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsKTsKKworLyoqCisgKiBDbGVhcnMgdGhlIG5vZGUncyB3aGl0ZWxpc3QKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNsZWFyV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIEVuYWJsZXMgdGhlIG5vZGUncyB3aGl0ZWxpc3QKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUVuYWJsZVdoaXRlbGlzdChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBEaXNhYmxlcyB0aGUgbm9kZSdzIHdoaXRlbGlzdAorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRGlzYWJsZVdoaXRlbGlzdChvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBBZGRzIGFuIGVudHJ5IHRvIHRoZSBub2RlJ3Mgd2hpdGVsaXN0CisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVBZGRXaGl0ZWxpc3Qob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYUV4dEFkZHIsIGludDhfdCBhUnNzaSk7CisKKy8qKgorICogUmVtb3ZlcyBhbiBlbnRyeSB0byB0aGUgbm9kZSdzIHdoaXRlbGlzdAorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUmVtb3ZlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFFeHRBZGRyKTsKKworLyoqCisgKiBHZXRzIHRoZSBub2RlJ3Mgc2hvcnQgbWFjIGFkZHJlc3MgKFJsb2MxNikKKyAqLworT1ROT0RFQVBJIHVpbnQxNl90IE9UQ0FMTCBvdE5vZGVHZXRBZGRyMTYob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogR2V0cyB0aGUgbm9kZSdzIGV4dGVuZGVkIG1hYyBhZGRyZXNzCisgKi8KK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlR2V0QWRkcjY0KG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIEdldHMgdGhlIG5vZGUncyBoYXNoIG1hYyBhZGRyZXNzCisgKi8KK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlR2V0SGFzaE1hY0FkZHJlc3Mob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUgY2hhbm5lbCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldENoYW5uZWwob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhQ2hhbm5lbCk7CisKKy8qKgorICogR2V0cyB0aGUgY2hhbm5lbCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIHVpbnQ4X3QgT1RDQUxMIG90Tm9kZUdldENoYW5uZWwob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogc2V0cyB0aGUgbm9kZSdzIG1hc3RlciBrZXkKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldE1hc3RlcmtleShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTWFzdGVya2V5KTsKKworLyoqCisgKiBHZXRzIHRoZSBub2RlJ3MgbWFzdGVyIGtleQorICovCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldE1hc3RlcmtleShvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBHZXRzIHRoZSBrZXkgc2VxdWVuY2UgY291bnRlciBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIHVpbnQzMl90IE9UQ0FMTCBvdE5vZGVHZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUga2V5IHNlcXVlbmNlIGNvdW50ZXIgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVNlcXVlbmNlKTsKKworLyoqCisgKiBTZXRzIHRoZSBrZXkgc3dpdGNoIGd1YXJkIHRpbWUgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRLZXlTd2l0Y2hHdWFyZFRpbWUob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVNlcXVlbmNlKTsKKworLyoqCisgKiBTZXRzIHRoZSBuZXR3b3JrIGlkIHRpbWVvdXQgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXROZXR3b3JrSWRUaW1lb3V0KG90Tm9kZSogYU5vZGUsIHVpbnQ4X3QgYVRpbWVvdXQpOworCisvKioKKyAqIEdldHMgdGhlIG5ldHdvcmsgbmFtZSBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXROZXR3b3JrTmFtZShvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBTZXRzIHRoZSBuZXR3b3JrIG5hbWUgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXROZXR3b3JrTmFtZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTmFtZSk7CisKKy8qKgorICogR2V0cyB0aGUgcGFuIGlkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDE2X3QgT1RDQUxMIG90Tm9kZUdldFBhbklkKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIHBhbiBpZCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFBhbklkKG90Tm9kZSogYU5vZGUsIHVpbnQxNl90IGFQYW5JZCk7CisKKy8qKgorICogR2V0cyB0aGUgcGFydGl0aW9uIGlkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZUdldFBhcnRpdGlvbklkKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIHBhcnRpdGlvbiBpZCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFBhcnRpdGlvbklkKG90Tm9kZSogYU5vZGUsIHVpbnQzMl90IGFQYXJ0aXRpb25JZCk7CisKKy8qKgorICogU2V0cyB0aGUgcm91dGVyIHVwZ3JhZGUgdGhyZXNob2xkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFUaHJlc2hvbGQpOworCisvKioKKyAqIFNldHMgdGhlIHJvdXRlciBkb3duZ3JhZGUgdGhyZXNob2xkIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG90Tm9kZSogYU5vZGUsIHVpbnQ4X3QgYVRocmVzaG9sZCk7CisKKy8qKgorICogUmVsZWFzZXMgYSByb3V0ZXIgaWQgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVSZWxlYXNlUm91dGVySWQob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhUm91dGVySWQpOworCisvKioKKyAqIEdldHMgdGhlIG5vZGUncyBzdGF0ZQorICovCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldFN0YXRlKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIG5vZGUncyBzdGF0ZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0U3RhdGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVN0YXRlKTsKKworLyoqCisgKiBHZXRzIHRoZSBjaGlsZCB0aW1lb3V0IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZUdldFRpbWVvdXQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUgY2hpbGQgdGltZW91dCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFRpbWVvdXQob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVRpbWVvdXQpOworCisvKioKKyAqIEdldHMgdGhlIGxlYWRlciB3ZWlnaHQgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSB1aW50OF90IE9UQ0FMTCBvdE5vZGVHZXRXZWlnaHQob3ROb2RlKiBhTm9kZSk7CisKKy8qKgorICogU2V0cyB0aGUgbGVhZGVyIHdlaWdodCBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFdlaWdodChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFXZWlnaHQpOworCisvKioKKyAqIEFkZHMgYW4gSVAgYWRkcmVzcyBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUFkZElwQWRkcihvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphQWRkcik7CisKKy8qKgorICogR2V0cyB0aGUgSVAgYWRkcmVzcyBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRBZGRycyhvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBHZXRzIHRoZSBjb250ZXh0IHJldXNlIGRlbGF5IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZUdldENvbnRleHRSZXVzZURlbGF5KG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFNldHMgdGhlIGNvbnRleHQgcmV1c2UgZGVsYXkgZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRDb250ZXh0UmV1c2VEZWxheShvdE5vZGUqIGFOb2RlLCB1aW50MzJfdCBhRGVsYXkpOworCisvKioKKyAqIEFkZHMgYW4gSVAgcHJlZml4IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkUHJlZml4KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQcmVmaXgsIGNvbnN0IGNoYXIgKmFGbGFncywgY29uc3QgY2hhciAqYVByZWZlcmVuY2UpOworCisvKioKKyAqIFJlbW92ZXMgYW4gSVAgcHJlZml4IGZyb20gdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbW92ZVByZWZpeChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphUHJlZml4KTsKKworLyoqCisgKiBBZGRzIGFuIElQIHJvdXRlIGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkUm91dGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCwgY29uc3QgY2hhciAqYVByZWZlcmVuY2UpOworCisvKioKKyAqIFJlbW92ZXMgYW4gSVAgcm91dGUgZnJvbSB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUmVtb3ZlUm91dGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCk7CisKKy8qKgorICogUmVnaXN0ZXJzIHRoZSBuZXQgZGF0YSBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlZ2lzdGVyTmV0ZGF0YShvdE5vZGUqIGFOb2RlKTsKKworLyoqCisgKiBQZXJmb3JtcyBhbiBlbmVyZ3kgc2NhbiBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUVuZXJneVNjYW4ob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYU1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kLCB1aW50MTZfdCBhRHVyYXRpb24sIGNvbnN0IGNoYXIgKmFBZGRyKTsKKworLyoqCisgKiBQZXJmb3JtcyBhIHBhbmlkIHF1ZXJ5IGZvciB0aGUgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUGFuSWRRdWVyeShvdE5vZGUqIGFOb2RlLCB1aW50MTZfdCBhUGFuSWQsIHVpbnQzMl90IGFNYXNrLCBjb25zdCBjaGFyICphQWRkcik7CisKKy8qKgorICogUGVyZm9ybXMgYW4gc2NhbiBmb3IgdGhlIG5vZGUKKyAqLworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVTY2FuKG90Tm9kZSogYU5vZGUpOworCisvKioKKyAqIFBlcmZvcm1zIGFuIHNjYW4gZm9yIHRoZSBub2RlCisgKi8KK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlUGluZyhvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphQWRkciwgdWludDE2X3QgYVNpemUsIHVpbnQzMl90IGFNaW5SZXBsaWVzLCB1aW50MTZfdCBhVGltZW91dCk7CisKKy8qKgorICogU2V0cyB0aGUgcm91dGVyIHNlbGVjdGlvbiBqaXR0ZXIgdmFsdWUgZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKG90Tm9kZSogYU5vZGUsIHVpbnQ4X3QgYVJvdXRlckppdHRlcik7CisKKy8qKgorICogU2VuZHMgdGhlIGFubm91bmNlIG1lc3NhZ2UgZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbihvdE5vZGUqIGFOb2RlLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kLCBjb25zdCBjaGFyICphQWRkcik7CisKKy8qKgorICogU2V0cyB0aGUgYWN0aXZlIGRhdGFzZXQgZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0QWN0aXZlRGF0YXNldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhVGltZXN0YW1wLCB1aW50MTZfdCBhUGFuSWQsIHVpbnQxNl90IGFDaGFubmVsLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXkpOworCisvKioKKyAqIFNldHMgdGhlIHBlbmRpbmcgZGF0YXNldCBmb3IgYSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRQZW5kaW5nRGF0YXNldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhQWN0aXZlVGltZXN0YW1wLCB1aW50NjRfdCBhUGVuZGluZ1RpbWVzdGFtcCwgdWludDE2X3QgYVBhbklkLCB1aW50MTZfdCBhQ2hhbm5lbCk7CisKKy8qKgorICogU2VuZHMgYSBwZW5kaW5nIHNldCBmb3IgYSBub2RlCisgKi8KK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZW5kUGVuZGluZ1NldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhQWN0aXZlVGltZXN0YW1wLCB1aW50NjRfdCBhUGVuZGluZ1RpbWVzdGFtcCwgdWludDMyX3QgYURlbGF5VGltZXIsIHVpbnQxNl90IGFQYW5JZCwgdWludDE2X3QgYUNoYW5uZWwsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSk7CisKKy8qKgorICogU2VuZHMgYSBhY3RpdmUgc2V0IGZvciBhIG5vZGUKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNlbmRBY3RpdmVTZXQob3ROb2RlKiBhTm9kZSwgdWludDY0X3QgYUFjdGl2ZVRpbWVzdGFtcCwgdWludDE2X3QgYVBhbklkLCB1aW50MTZfdCBhQ2hhbm5lbCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCBjaGFyICphRXh0UGFuSWQsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSwgY29uc3QgY2hhciAqYUJpbmFyeSk7CisKKy8qKgorICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIGEgbm9kZQorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TWF4Q2hpbGRyZW4ob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhTWF4Q2hpbGRyZW4pOworCisvKioKKyAqIFRoZSBpbnRlcmZhY2UgdXNlZCB0byBsaXN0ZW4gaW4gb24gdmlydHVhbCBub2RlcycgTUFDIGZyYW1lcworICovCisKK3R5cGVkZWYgc3RydWN0IG90TGlzdGVuZXIgb3RMaXN0ZW5lcjsKKworLyoqCisgKiBDcmVhdGVzIGFuZCBzdGFydHMgYSBuZXcgbGlzdGVuZXIKKyAqLworT1ROT0RFQVBJIG90TGlzdGVuZXIqIE9UQ0FMTCBvdExpc3RlbmVySW5pdCh1aW50MzJfdCBub2RlaWQpOworCisvKioKKyAqIEZyZWVzIGEgbGlzdGVuZXIKKyAqLworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90TGlzdGVuZXJGaW5hbGl6ZShvdExpc3RlbmVyKiBhTGlzdGVuZXIpOworCisvKioKKyAqIFN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgYSByZWNlaXZlZCBNQUMgZnJhbWUgZnJvbSB0aGUgbGlzdGVuZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RNYWNGcmFtZQoreworICAgIHVpbnQ4X3QgYnVmZmVyWzEyOF07CisgICAgdWludDhfdCBsZW5ndGg7CisgICAgdWludDMyX3Qgbm9kZWlkOworfSBvdE1hY0ZyYW1lOworCisvKioKKyAqIFJlYWRzIHRoZSBuZXh0IE1BQyBmcmFtZSBmcm9tIHRoZSBsaXN0ZW5lcgorICovCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3RMaXN0ZW5lclJlYWQob3RMaXN0ZW5lciogYUxpc3RlbmVyLCBvdE1hY0ZyYW1lICphRnJhbWUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9UTk9ERV9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGUvb3RPSUQuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290T0lELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL290T0lELmgKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT0lEIGludGVyZmFjZSBiZXR3ZWVuIG90THdmIGFuZCBpdCdzIG1pbmlwb3J0LgorICovCisKKyNpZm5kZWYgX19PVE9JRF9IX18KKyNkZWZpbmUgX19PVE9JRF9IX18KKworI3ByYWdtYSBvbmNlCisKKy8vCisvLyBNYWNyb3MgZm9yIGRlZmluaW5nIG5hdGl2ZSBPcGVuVGhyZWFkIE9JRHMKKy8vCisKKyNkZWZpbmUgT1RfT1BFUkFUSU9OQUxfT0lEICAgICAgKDB4MDFVKQorI2RlZmluZSBPVF9TVEFUSVNUSUNTX09JRCAgICAgICAoMHgwMlUpIAorCisjZGVmaW5lIE9UX01BTkRBVE9SWV9PSUQgICAgICAgICgweDAxVSkKKyNkZWZpbmUgT1RfT1BUSU9OQUxfT0lEICAgICAgICAgKDB4MDJVKQorCisjZGVmaW5lIE9UX0RFRklORV9PSUQoU2VxLG8sbSkgICgoMHhEMDAwMDAwMFUpIHwgKChvKSA8PCAxNikgfCAoKG0pIDw8IDgpIHwgKFNlcSkpCisKKy8vCisvLyBPcGVuVGhyZWFkIFN0YXR1cyBJbmRpY2F0aW9uIGNvZGVzIChhbmQgYXNzb2NpYXRlZCBwYXlsb2FkIHR5cGVzKQorLy8KKworI2RlZmluZSBORElTX1NUQVRVU19PVF9FTkVSR1lfU0NBTl9SRVNVTFQgICAgICAgICAgICgoTkRJU19TVEFUVVMpMHg0MDA1MDAwMEwpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX0VORVJHWV9TQ0FOX1JFU1VMVAorICAgIHsKKyAgICAgICAgTkRJU19TVEFUVVMgICAgICAgICBTdGF0dXM7CisgICAgICAgIENIQVIgICAgICAgICAgICAgICAgTWF4UnNzaTsKKyAgICB9IE9UX0VORVJHWV9TQ0FOX1JFU1VMVCwgKiBQT1RfRU5FUkdZX1NDQU5fUkVTVUxUOworCisvLworLy8gR2VuZXJhbCBPSUQgRGVmaW5pdGlvbnMKKy8vCisKKy8vIFVzZWQgdG8gcXVlcnkgaW5pdGlhbCBjb25zdGFudHMgb2YgdGhlIG1pbmlwb3J0CisjZGVmaW5lIE9JRF9PVF9DQVBBQklMSVRJRVMgICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgwLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBlbnVtIE9UX01QX01PREUKKyAgICB7CisgICAgICAgIE9UX01QX01PREVfUkFESU8sICAvLyBTdXBwb3J0cyB0aGUgcGh5c2ljYWwgcmFkaW8gbGF5ZXIKKyAgICAgICAgT1RfTVBfTU9ERV9USFJFQUQgIC8vIFN1cHBvcnRzIHRoZSBmdWxsIFRocmVhZCBzdGFjaworICAgIH0gT1RfTVBfTU9ERTsKKyAgICB0eXBlZGVmIGVudW0gT1RfUkFESU9fQ0FQQUJJTElUWQorICAgIHsKKyAgICAgICAgLy8gUmFkaW8gc3VwcG9ydHMgQWNrIHRpbWVvdXRzIGludGVybmFsbHkKKyAgICAgICAgT1RfUkFESU9fQ0FQX0FDS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIC8vIFJhZGlvIHN1cHBvcnRzIE1BQyByZXRyeSBsb2dpYyBhbmQgdGltZXJzOyBhcyB3ZWxsIGFzIGNvbGxpc2lvbiBhdm9pZGFuY2UuCisgICAgICAgIE9UX1JBRElPX0NBUF9NQUNfUkVUUllfQU5EX0NPTExJU0lPTl9BVk9JREFOQ0UgID0gMSA8PCAxLAorICAgICAgICAvLyBSYWRpbyBzdXBwb3J0cyBzbGVlcGluZy4gSWYgdGhlIGRldmljZSBzdXBwb3J0cyBzbGVlcGluZywgaXQgaXMgYXNzdW1lZCB0bworICAgICAgICAvLyBkZWZhdWx0IHRvIHRoZSBzbGVlcCBzdGF0ZSBvbiBicmluZyB1cC4KKyAgICAgICAgT1RfUkFESU9fQ0FQX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsCisgICAgfSBPVF9SQURJT19DQVBBQklMSVRZOworICAgIHR5cGVkZWYgc3RydWN0IF9PVF9DQVBBQklMSVRJRVMKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBPVF9NUF9NT0RFICAgICAgICAgTWluaXBvcnRNb2RlOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgUmFkaW9DYXBhYmlsaXRpZXM7ICAvLyBPVF9SQURJT19DQVBBQklMSVRZIGZsYWdzCisgICAgfSBPVF9DQVBBQklMSVRJRVMsICogUE9UX0NBUEFCSUxJVElFUzsKKworI2RlZmluZSBTSVpFT0ZfT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEgXAorICAgIFJUTF9TSVpFT0ZfVEhST1VHSF9GSUVMRChPVF9DQVBBQklMSVRJRVMsIFJhZGlvQ2FwYWJpbGl0aWVzKQorCisvLworLy8gUmFkaW8gTW9kZSBPSURzCisvLworCisvLyBVc2VkIHRvIHF1ZXJ5L3NldCBzbGVlcCBtb2RlOyBvbmx5IHVzZWQgaWYgUmFkaW9DYXBhYmlsaXRpZXMgCisvLyBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgT1RfUkFESU9fQ0FQX1NMRUVQLgorI2RlZmluZSBPSURfT1RfU0xFRVBfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAwLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX09QVElPTkFMX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfU0xFRVBfTU9ERQorICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9TTEVFUF9NT0RFX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBCT09MRUFOICAgICAgICAgICAgSW5TbGVlcE1vZGU7CisgICAgfSBPVF9TTEVFUF9NT0RFLCAqIFBPVF9TTEVFUF9NT0RFOworCisjZGVmaW5lIFNJWkVPRl9PVF9TTEVFUF9NT0RFX1JFVklTSU9OXzEgXAorICAgIFJUTF9TSVpFT0ZfVEhST1VHSF9GSUVMRChPVF9TTEVFUF9NT0RFLCBJblNsZWVwTW9kZSkKKworLy8gVXNlZCB0byBxdWVyeS9zZXQgcHJvbWlzY3VvdXMgbW9kZQorI2RlZmluZSBPSURfT1RfUFJPTUlTQ1VPVVNfTU9ERSAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAxLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX1BST01JU0NVT1VTX01PREUKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfUFJPTUlTQ1VPVVNfTU9ERV9SRVZJU0lPTl8xIDEKKyAgICAgICAgTkRJU19PQkpFQ1RfSEVBREVSIEhlYWRlcjsKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgIEluUHJvbWlzY3VvdXNNb2RlOworICAgIH0gT1RfUFJPTUlTQ1VPVVNfTU9ERSwgKiBQT1RfUFJPTUlTQ1VPVVNfTU9ERTsKKworI2RlZmluZSBTSVpFT0ZfT1RfUFJPTUlTQ1VPVVNfTU9ERV9SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfUFJPTUlTQ1VPVVNfTU9ERSwgSW5Qcm9taXNjdW91c01vZGUpCisKKy8vIFVzZWQgdG8gcXVlcnkgdGhlIGZhY3RvcnkgRXh0ZW5kZWQgQWRkcmVzcworI2RlZmluZSBPSURfT1RfRkFDVE9SWV9FWFRFTkRFRF9BRERSRVNTICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAyLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX0ZBQ1RPUllfRVhURU5ERURfQUREUkVTUworICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9GQUNUT1JZX0VYVEVOREVEX0FERFJFU1NfUkVWSVNJT05fMSAxCisgICAgICAgIE5ESVNfT0JKRUNUX0hFQURFUiBIZWFkZXI7CisgICAgICAgIFVMT05HTE9ORyAgICAgICAgICBFeHRlbmRlZEFkZHJlc3M7CisgICAgfSBPVF9GQUNUT1JZX0VYVEVOREVEX0FERFJFU1MsICogUE9UX0ZBQ1RPUllfRVhURU5ERURfQUREUkVTUzsKKworI2RlZmluZSBTSVpFT0ZfT1RfRkFDVE9SWV9FWFRFTkRFRF9BRERSRVNTX1JFVklTSU9OXzEgXAorICAgIFJUTF9TSVpFT0ZfVEhST1VHSF9GSUVMRChPVF9GQUNUT1JZX0VYVEVOREVEX0FERFJFU1MsIEV4dGVuZGVkQWRkcmVzcykKKworLy8gVXNlZCB0byBxdWVyeS9zZXQgdGhlIFBhbiBJRAorI2RlZmluZSBPSURfT1RfUEFORF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTAzLCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX1BBTkRfSUQKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfUEFORF9JRF9SRVZJU0lPTl8xIDEKKyAgICAgICAgTkRJU19PQkpFQ1RfSEVBREVSIEhlYWRlcjsKKyAgICAgICAgVVNIT1JUICAgICAgICAgICAgIFBhbklEOworICAgIH0gT1RfUEFORF9JRCwgKiBQT1RfUEFORF9JRDsKKworI2RlZmluZSBTSVpFT0ZfT1RfUEFORF9JRF9SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfUEFORF9JRCwgUGFuSUQpCisKKy8vIFVzZWQgdG8gcXVlcnkvc2V0IHRoZSBTaG9ydCBBZGRyZXNzCisjZGVmaW5lIE9JRF9PVF9TSE9SVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgxMDQsIE9UX09QRVJBVElPTkFMX09JRCwgT1RfTUFOREFUT1JZX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfU0hPUlRfQUREUkVTUworICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9TSE9SVF9BRERSRVNTX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgU2hvcnRBZGRyZXNzOworICAgIH0gT1RfU0hPUlRfQUREUkVTUywgKiBQT1RfU0hPUlRfQUREUkVTUzsKKworI2RlZmluZSBTSVpFT0ZfT1RfU0hPUlRfQUREUkVTU19SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfU0hPUlRfQUREUkVTUywgU2hvcnRBZGRyZXNzKQorCisvLyBVc2VkIHRvIHF1ZXJ5L3NldCB0aGUgRXh0ZW5kZWQgQWRkcmVzcworI2RlZmluZSBPSURfT1RfRVhURU5ERURfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIE9UX0RFRklORV9PSUQoMTA1LCBPVF9PUEVSQVRJT05BTF9PSUQsIE9UX01BTkRBVE9SWV9PSUQpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX09UX0VYVEVOREVEX0FERFJFU1MKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfRVhURU5ERURfQUREUkVTU19SRVZJU0lPTl8xIDEKKyAgICAgICAgTkRJU19PQkpFQ1RfSEVBREVSIEhlYWRlcjsKKyAgICAgICAgVUxPTkdMT05HICAgICAgICAgIEV4dGVuZGVkQWRkcmVzczsKKyAgICB9IE9UX0VYVEVOREVEX0FERFJFU1MsICogUE9UX0VYVEVOREVEX0FERFJFU1M7CisKKyNkZWZpbmUgU0laRU9GX09UX0VYVEVOREVEX0FERFJFU1NfUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX0VYVEVOREVEX0FERFJFU1MsIEV4dGVuZGVkQWRkcmVzcykKKworLy8gVXNlZCB0byBxdWVyeS9zZXQgdGhlIGN1cnJlbnQgbGlzdGVuaW5nIGNoYW5uZWwKKyNkZWZpbmUgT0lEX09UX0NVUlJFTlRfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgICBPVF9ERUZJTkVfT0lEKDEwNiwgT1RfT1BFUkFUSU9OQUxfT0lELCBPVF9NQU5EQVRPUllfT0lEKQorICAgIHR5cGVkZWYgc3RydWN0IF9PVF9DVVJSRU5UX0NIQU5ORUwKKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfQ1VSUkVOVF9DSEFOTkVMX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBVQ0hBUiAgICAgICAgICAgICAgQ2hhbm5lbDsKKyAgICB9IE9UX0NVUlJFTlRfQ0hBTk5FTCwgKiBQT1RfQ1VSUkVOVF9DSEFOTkVMOworCisjZGVmaW5lIFNJWkVPRl9PVF9DVVJSRU5UX0NIQU5ORUxfUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX0NVUlJFTlRfQ0hBTk5FTCwgQ2hhbm5lbCkKKworLy8gVXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBSU1NJIGZvciB0aGUgY3VycmVudCBjaGFubmVsCisjZGVmaW5lIE9JRF9PVF9SU1NJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgxMDcsIE9UX09QRVJBVElPTkFMX09JRCwgT1RfTUFOREFUT1JZX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfUlNTSQorICAgIHsKKyAgICAgICAgI2RlZmluZSBPVF9SU1NJX1JFVklTSU9OXzEgMQorICAgICAgICBORElTX09CSkVDVF9IRUFERVIgSGVhZGVyOworICAgICAgICBDSEFSICAgICAgICAgICAgICAgUnNzaTsKKyAgICB9IE9UX1JTU0ksICogUE9UX1JTU0k7CisKKyNkZWZpbmUgU0laRU9GX09UX1JTU0lfUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX1JTU0ksIFJzc2kpCisKKy8vIFRoZSBtYXhpbXVtIG9mIGVhY2ggdHlwZSAoc2hvcnQgb3IgZXh0ZW5kZWQpIG9mIE1BQyBhZGRyZXNzIHRvIHBlbmQKKyNkZWZpbmUgTUFYX1BFTkRJTkdfTUFDX1NJWkUgICAgMzIKKworLy8gVXNlZCB0byBzZXQgdGhlIGxpc3Qgb2YgTUFDIGFkZHJlc3NlcyBmb3IgU0VEcyB3ZSBjdXJyZW50bHkgaGF2ZSBwYWNrZXRzIHBlbmRpbmcKKyNkZWZpbmUgT0lEX09UX1BFTkRJTkdfTUFDX09GRkxPQUQgICAgICAgICAgICAgICAgICBPVF9ERUZJTkVfT0lEKDEwOCwgT1RfT1BFUkFUSU9OQUxfT0lELCBPVF9NQU5EQVRPUllfT0lEKQorICAgIHR5cGVkZWYgc3RydWN0IF9PVF9QRU5ESU5HX01BQ19PRkZMT0FECisgICAgeworICAgICAgICAjZGVmaW5lIE9UX1BFTkRJTkdfTUFDX09GRkxPQURfUkVWSVNJT05fMSAxCisgICAgICAgIE5ESVNfT0JKRUNUX0hFQURFUiBIZWFkZXI7CisgICAgICAgIFVDSEFSICAgICAgICAgICAgICBTaG9ydEFkZHJlc3NDb3VudDsKKyAgICAgICAgVUNIQVIgICAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVzc0NvdW50OworICAgICAgICAvLyBEeW5hbWljIGFycmF5IG9mIFVTSE9SVCBTaG9ydEFkZHJlc3NlcyBvZiBjb3VudCBTaG9ydEFkZHJlc3NDb3VudAorICAgICAgICAvLyBEeW5hbWljIGFycmF5IG9mIFVMT05HTE9ORyBFeHRlbmRlZEFkZHJlc3NlcyBvZiBjb3VudCBFeHRlbmRlZEFkZHJlc3NDb3VudAorICAgIH0gT1RfUEVORElOR19NQUNfT0ZGTE9BRCwgKiBQT1RfUEVORElOR19NQUNfT0ZGTE9BRDsKKworI2RlZmluZSBTSVpFT0ZfT1RfUEVORElOR19NQUNfT0ZGTE9BRF9SRVZJU0lPTl8xIFwKKyAgICBSVExfU0laRU9GX1RIUk9VR0hfRklFTEQoT1RfUEVORElOR19NQUNfT0ZGTE9BRCwgRXh0ZW5kZWRBZGRyZXNzQ291bnQpCisKKyNkZWZpbmUgQ09NUExFVEVfU0laRU9GX09UX1BFTkRJTkdfTUFDX09GRkxPQURfUkVWSVNJT05fMShTaG9ydEFkZHJlc3NDb3VudCwgRXh0ZW5kZWRBZGRyZXNzQ291bnQpIFwKKyAgICAoU0laRU9GX09UX1BFTkRJTkdfTUFDX09GRkxPQURfUkVWSVNJT05fMSArIHNpemVvZihVU0hPUlQpICogU2hvcnRBZGRyZXNzQ291bnQgKyBzaXplb2YoVUxPTkdMT05HKSAqIEV4dGVuZGVkQWRkcmVzc0NvdW50KQorCisvLyBVc2VkIHRvIGlzc3VlIGFuIGVuZXJneSBzY2FuIHJlcXVlc3QgZm9yIHRoZSBnaXZlbiBjaGFubmVsCisjZGVmaW5lIE9JRF9PVF9FTkVSR1lfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICAgT1RfREVGSU5FX09JRCgxMDksIE9UX09QRVJBVElPTkFMX09JRCwgT1RfTUFOREFUT1JZX09JRCkKKyAgICB0eXBlZGVmIHN0cnVjdCBfT1RfRU5FUkdZX1NDQU4KKyAgICB7CisgICAgICAgICNkZWZpbmUgT1RfRU5FUkdZX1NDQU5fUkVWSVNJT05fMSAxCisgICAgICAgIE5ESVNfT0JKRUNUX0hFQURFUiBIZWFkZXI7CisgICAgICAgIFVDSEFSICAgICAgICAgICAgICBDaGFubmVsOworICAgICAgICBVU0hPUlQgICAgICAgICAgICAgRHVyYXRpb25NczsKKyAgICB9IE9UX0VORVJHWV9TQ0FOLCAqIFBPVF9FTkVSR1lfU0NBTjsKKworI2RlZmluZSBTSVpFT0ZfT1RfRU5FUkdZX1NDQU5fUkVWSVNJT05fMSBcCisgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE9UX0VORVJHWV9TQ0FOLCBEdXJhdGlvbk1zKQorCisvLworLy8gVGhyZWFkIE1vZGUgT0lEcworLy8KKworLy8gVE9ETyAuLi4KKworI2VuZGlmIC8vX19PVE9JRF9IX18KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlL3J0bHJlZmNvdW50LmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9ydGxyZWZjb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTliYzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3MvaW5jbHVkZS9ydGxyZWZjb3VudC5oCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIG1vZHVsZSBjb250YWlucyByb3V0aW5lcyBhbmQgdHlwZSBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgcmVmZXJlbmNlCisgKiAgY291bnRzLgorICoKKyAqICBOLkIuIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIHVzZSB0aGUgbWluaW11bSBmZW5jaW5nIHJlcXVpcmVkIGZvciBjb3JyZWN0CisgKiAgICAgICBtYW5hZ2VtZW50IG9mIHRoZSByZWZlcmVuY2UgY291bnQgY29udHJhY3QuIE5vIGFkZGl0aW9uYWwgbWVtb3J5CisgKiAgICAgICBvcmRlcmluZyBzaG91bGQgYmUgYXNzdW1lZC4KKyAqLworCisjcHJhZ21hIG9uY2UKKworLy8KKy8vIEFyY2hpdGVjdHVyZSBzdXBwb3J0IG1hY3Jvcy4KKy8vIChVbmRlZmluZWQgYXQgdGhlIGJvdHRvbSB0byBhdm9pZCBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbikKKy8vCisKKyNpZiBkZWZpbmVkKF9XSU42NCkKKworI2RlZmluZSBSdGxJbmNyZW1lbnRMb25nUHRyTm9GZW5jZSBJbnRlcmxvY2tlZEluY3JlbWVudE5vRmVuY2U2NAorI2RlZmluZSBSdGxEZWNyZW1lbnRMb25nUHRyUmVsZWFzZSBJbnRlcmxvY2tlZERlY3JlbWVudFJlbGVhc2U2NAorI2RlZmluZSBSdGxFeGNoYW5nZUFkZExvbmdQdHJOb0ZlbmNlIEludGVybG9ja2VkRXhjaGFuZ2VBZGROb0ZlbmNlNjQKKyNkZWZpbmUgUnRsRXhjaGFuZ2VBZGRMb25nUHRyUmVsZWFzZSBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkUmVsZWFzZTY0CisjZGVmaW5lIFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJOb0ZlbmNlIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlTm9GZW5jZTY0CisjZGVmaW5lIFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJSZWxlYXNlIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUmVsZWFzZTY0CisKKyNlbHNlCisKKyNkZWZpbmUgUnRsSW5jcmVtZW50TG9uZ1B0ck5vRmVuY2UgSW50ZXJsb2NrZWRJbmNyZW1lbnROb0ZlbmNlCisjZGVmaW5lIFJ0bERlY3JlbWVudExvbmdQdHJSZWxlYXNlIEludGVybG9ja2VkRGVjcmVtZW50UmVsZWFzZQorI2RlZmluZSBSdGxFeGNoYW5nZUFkZExvbmdQdHJOb0ZlbmNlIEludGVybG9ja2VkRXhjaGFuZ2VBZGROb0ZlbmNlCisjZGVmaW5lIFJ0bEV4Y2hhbmdlQWRkTG9uZ1B0clJlbGVhc2UgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZFJlbGVhc2UKKyNkZWZpbmUgUnRsQ29tcGFyZUV4Y2hhbmdlTG9uZ1B0ck5vRmVuY2UgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VOb0ZlbmNlCisjZGVmaW5lIFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJSZWxlYXNlIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUmVsZWFzZQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1g4Nl8pIHx8IGRlZmluZWQoX0FNRDY0XykKKworI2RlZmluZSBSdGxCYXJyaWVyQWZ0ZXJJbnRlcmxvY2soKQorCisjZWxpZiBkZWZpbmVkKF9BUk02NF8pCisKKyNkZWZpbmUgUnRsQmFycmllckFmdGVySW50ZXJsb2NrKCkgIF9fZG1iKF9BUk02NF9CQVJSSUVSX0lTSCkKKworI2VsaWYgZGVmaW5lZChfQVJNXykKKworI2RlZmluZSBSdGxCYXJyaWVyQWZ0ZXJJbnRlcmxvY2soKSAgX19kbWIoX0FSTV9CQVJSSUVSX0lTSCkKKworI2Vsc2UKKworI2RlZmluZSBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuCisKKyNlbmRpZgorCisjZGVmaW5lIFJUTF9SRUZfQ09VTlRfSU5JVCAxCisKK0ZPUkNFSU5MSU5FCitWT0lECitSdGxJbml0aWFsaXplUmVmZXJlbmNlQ291bnQgKAorICAgIF9PdXRfIFBSVExfUkVGRVJFTkNFX0NPVU5UIFJlZkNvdW50CisgICAgKQorCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcmVmZXJlbmNlIGNvdW50IHRvIDEuCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50IHRvIGluaXRpYWxpemUuCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KKworeworCisgICAgKlJlZkNvdW50ID0gUlRMX1JFRl9DT1VOVF9JTklUOworICAgIHJldHVybjsKK30KKworRk9SQ0VJTkxJTkUKK1ZPSUQKK1J0bEluaXRpYWxpemVSZWZlcmVuY2VDb3VudEV4ICgKKyAgICBfT3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSByZWZlcmVuY2UgY291bnQgdG8gYSBwb3NpdGl2ZSB2YWx1ZS4KKworQXJndW1lbnRzOgorCisgICAgUmVmQ291bnQgLSBTdXBwbGllcyBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgY291bnQgdG8gaW5pdGlhbGl6ZS4KKworICAgIEJpYXMgLSBTdXBwbGllcyBhbiBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCAobXVzdCBiZSBwb3NpdGl2ZSkuCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KKworeworCisgICAgKlJlZkNvdW50ID0gQmlhczsKKyAgICByZXR1cm47Cit9CisKK0ZPUkNFSU5MSU5FCitWT0lECitSdGxJbmNyZW1lbnRSZWZlcmVuY2VDb3VudCAoCisgICAgX0lub3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudAorICAgICkKKworLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGNvdW50LCBwcmV2ZW50aW5nIG9iamVjdAorICAgIGRlbGV0aW9uLgorCitBcmd1bWVudHM6CisKKyAgICBSZWZDb3VudCAtIFN1cHBsaWVzIGEgcG9pbnRlciB0byBhIHJlZmVyZW5jZSBjb3VudC4KKworUmV0dXJuIFZhbHVlOgorCisgICAgTm9uZS4KKworLS0qLworCit7CisKKyAgICBpZiAoUnRsSW5jcmVtZW50TG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQpID4gMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworfQorCitGT1JDRUlOTElORQorVk9JRAorUnRsSW5jcmVtZW50UmVmZXJlbmNlQ291bnRFeCAoCisgICAgX0lub3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGNvdW50IGJ5IHRoZSBzcGVjaWZpZWQgYmlhcywKKyAgICBwcmV2ZW50aW5nIG9iamVjdCBkZWxldGlvbi4KKworQXJndW1lbnRzOgorCisgICAgUmVmQ291bnQgLSBTdXBwbGllcyBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgY291bnQuCisKKyAgICBCaWFzIC0gU3VwcGxpZXMgYSByZWZlcmVuY2UgYmlhcyBhbW91bnQuCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KKworeworCisgICAgaWYgKFJ0bEV4Y2hhbmdlQWRkTG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQsIEJpYXMpID4gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworfQorCitGT1JDRUlOTElORQorQk9PTEVBTgorUnRsSW5jcmVtZW50UmVmZXJlbmNlQ291bnROb25aZXJvICgKKyAgICBfSW5vdXRfIHZvbGF0aWxlIFJUTF9SRUZFUkVOQ0VfQ09VTlQgKlJlZkNvdW50LAorICAgIF9Jbl8gVUxPTkcgQmlhcworICAgICkKKworLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgVGhpcyBmdW5jdGlvbiBpbmNyZWFzZXMgdGhlIHNwZWNpZmllZCByZWZlcmVuY2UgY291bnQgYnkgdGhlIHNwZWNpZmllZCBiaWFzLAorICAgIHVubGVzcyB0aGUgcmVmZXJlbmNlIGNvdW50IHdhcyBwcmV2aW91c2x5IHplcm8uCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50LgorCisgICAgQmlhcyAtIFN1cHBsaWVzIGEgcmVmZXJlbmNlIGJpYXMgYW1vdW50LgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBUUlVFIGlmIHRoZSByZWZlcmVuY2UgY291bnQgd2FzIGluY3JlbWVudGVkLCBGQUxTRSBvdGhlcndpc2UuCisKKy0tKi8KKworeworCisgICAgUlRMX1JFRkVSRU5DRV9DT1VOVCBOZXdWYWx1ZTsKKyAgICBSVExfUkVGRVJFTkNFX0NPVU5UIE9sZFZhbHVlOworCisgICAgUHJlZmV0Y2hGb3JXcml0ZShSZWZDb3VudCk7CisgICAgT2xkVmFsdWUgPSBSZWFkTG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgTmV3VmFsdWUgPSBPbGRWYWx1ZSArIEJpYXM7CisgICAgICAgIGlmICgoVUxPTkdfUFRSKU5ld1ZhbHVlID4gQmlhcykgeworICAgICAgICAgICAgTmV3VmFsdWUgPSBSdGxDb21wYXJlRXhjaGFuZ2VMb25nUHRyTm9GZW5jZShSZWZDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKE5ld1ZhbHVlID09IE9sZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9sZFZhbHVlID0gTmV3VmFsdWU7CisKKyAgICAgICAgfSBlbHNlIGlmICgoVUxPTkdfUFRSKU5ld1ZhbHVlID09IEJpYXMpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworICAgICAgICB9CisgICAgfQorfQorCitGT1JDRUlOTElORQorQk9PTEVBTgorUnRsRGVjcmVtZW50UmVmZXJlbmNlQ291bnQgKAorICAgIF9Jbm91dF8gUFJUTF9SRUZFUkVOQ0VfQ09VTlQgUmVmQ291bnQKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gcmVkdWNlcyB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBjb3VudCwgcG90ZW50aWFsbHkgdHJpZ2dlcmluZworICAgIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZ3VhcmRlZCBvYmplY3QuCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50LgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBUUlVFIGlmIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGRlc3Ryb3llZCwgRkFMU0Ugb3RoZXJ3aXNlLgorCistLSovCisKK3sKKworICAgIFJUTF9SRUZFUkVOQ0VfQ09VTlQgTmV3VmFsdWU7CisKKyAgICAvLworICAgIC8vIEEgcmVsZWFzZSBmZW5jZSBpcyByZXF1aXJlZCB0byBlbnN1cmUgYWxsIGd1YXJkZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZQorICAgIC8vIGNvbXBsZXRlIGJlZm9yZSBhbnkgdGhyZWFkIGNhbiBiZWdpbiBkZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAgLy8KKworICAgIE5ld1ZhbHVlID0gUnRsRGVjcmVtZW50TG9uZ1B0clJlbGVhc2UoUmVmQ291bnQpOworICAgIGlmIChOZXdWYWx1ZSA+IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgfSBlbHNlIGlmIChOZXdWYWx1ZSA9PSAwKSB7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW4gYWNxdWlyZSBmZW5jZSBpcyByZXF1aXJlZCBiZWZvcmUgb2JqZWN0IGRlc3RydWN0aW9uIHRvIGVuc3VyZQorICAgICAgICAvLyB0aGF0IHRoZSBkZXN0cnVjdG9yIGNhbm5vdCBvYnNlcnZlIHZhbHVlcyBjaGFuZ2luZyBvbiBvdGhlciB0aHJlYWRzLgorICAgICAgICAvLworCisgICAgICAgIFJ0bEJhcnJpZXJBZnRlckludGVybG9jaygpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBfX2Zhc3RmYWlsKEZBU1RfRkFJTF9JTlZBTElEX1JFRkVSRU5DRV9DT1VOVCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitGT1JDRUlOTElORQorQk9PTEVBTgorUnRsRGVjcmVtZW50UmVmZXJlbmNlQ291bnRFeCAoCisgICAgX0lub3V0XyBQUlRMX1JFRkVSRU5DRV9DT1VOVCBSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gcmVkdWNlcyB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBjb3VudCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudCwKKyAgICBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZ3VhcmRlZCBvYmplY3QuCisKK0FyZ3VtZW50czoKKworICAgIFJlZkNvdW50IC0gU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIGNvdW50LgorCisgICAgQmlhcyAtIFN1cHBsaWVzIGEgcmVmZXJlbmNlIGJpYXMgYW1vdW50LgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBUUlVFIGlmIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGRlc3Ryb3llZCwgRkFMU0Ugb3RoZXJ3aXNlLgorCistLSovCisKK3sKKworICAgIFJUTF9SRUZFUkVOQ0VfQ09VTlQgTmV3VmFsdWU7CisKKyAgICAvLworICAgIC8vIEEgcmVsZWFzZSBmZW5jZSBpcyByZXF1aXJlZCB0byBlbnN1cmUgYWxsIGd1YXJkZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZQorICAgIC8vIGNvbXBsZXRlIGJlZm9yZSBhbnkgdGhyZWFkIGNhbiBiZWdpbiBkZXN0cm95aW5nIHRoZSBvYmplY3QuCisgICAgLy8KKworICAgIE5ld1ZhbHVlID0gUnRsRXhjaGFuZ2VBZGRMb25nUHRyUmVsZWFzZShSZWZDb3VudCwgLShMT05HKUJpYXMpIC0gQmlhczsKKyAgICBpZiAoTmV3VmFsdWUgPiAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIH0gZWxzZSBpZiAoTmV3VmFsdWUgPT0gMCkgeworCisgICAgICAgIC8vCisgICAgICAgIC8vIEFuIGFjcXVpcmUgZmVuY2UgaXMgcmVxdWlyZWQgYmVmb3JlIG9iamVjdCBkZXN0cnVjdGlvbiB0byBlbnN1cmUKKyAgICAgICAgLy8gdGhhdCB0aGUgZGVzdHJ1Y3RvciBjYW5ub3Qgb2JzZXJ2ZSB2YWx1ZXMgY2hhbmdpbmcgb24gb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgLy8KKworICAgICAgICBSdGxCYXJyaWVyQWZ0ZXJJbnRlcmxvY2soKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworRk9SQ0VJTkxJTkUKK0JPT0xFQU4KK1J0bERlY3JlbWVudFJlZmVyZW5jZUNvdW50Tm9uWmVybyAoCisgICAgX0lub3V0XyB2b2xhdGlsZSBSVExfUkVGRVJFTkNFX0NPVU5UICpSZWZDb3VudCwKKyAgICBfSW5fIFVMT05HIEJpYXMKKyAgICApCisKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFRoaXMgZnVuY3Rpb24gcmVkdWNlcyB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBjb3VudCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudCwKKyAgICB1bmxlc3MgZG9pbmcgc28gd291bGQgcmVzdWx0IGluIGEgemVybyB2YWx1ZS4KKworQXJndW1lbnRzOgorCisgICAgUmVmQ291bnQgLSBTdXBwbGllcyBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgY291bnQuCisKKyAgICBCaWFzIC0gU3VwcGxpZXMgYSByZWZlcmVuY2UgYmlhcyBhbW91bnQuCisKK1JldHVybiBWYWx1ZToKKworICAgIFRSVUUgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCB3b3VsZCBiZSB6ZXJvLCBGQUxTRSBvdGhlcndpc2UuCisKKy0tKi8KKworeworCisgICAgUlRMX1JFRkVSRU5DRV9DT1VOVCBOZXdWYWx1ZTsKKyAgICBSVExfUkVGRVJFTkNFX0NPVU5UIE9sZFZhbHVlOworCisgICAgUHJlZmV0Y2hGb3JXcml0ZShSZWZDb3VudCk7CisgICAgT2xkVmFsdWUgPSBSZWFkTG9uZ1B0ck5vRmVuY2UoUmVmQ291bnQpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgTmV3VmFsdWUgPSBPbGRWYWx1ZSAtIEJpYXM7CisgICAgICAgIGlmIChOZXdWYWx1ZSA+IDApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEEgcmVsZWFzZSBmZW5jZSBpcyByZXF1aXJlZCB0byBlbnN1cmUgYWxsIGd1YXJkZWQgbWVtb3J5CisgICAgICAgICAgICAvLyBhY2Nlc3NlcyBhcmUgY29tcGxldGUgYmVmb3JlIGFueSB0aHJlYWQgY2FuIGJlZ2luIGRlc3Ryb3lpbmcKKyAgICAgICAgICAgIC8vIHRoZSBvYmplY3QuCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICBOZXdWYWx1ZSA9IFJ0bENvbXBhcmVFeGNoYW5nZUxvbmdQdHJSZWxlYXNlKFJlZkNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2xkVmFsdWUpOworCisgICAgICAgICAgICBpZiAoTmV3VmFsdWUgPT0gT2xkVmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9sZFZhbHVlID0gTmV3VmFsdWU7CisKKyAgICAgICAgfSBlbHNlIGlmIChOZXdWYWx1ZSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX19mYXN0ZmFpbChGQVNUX0ZBSUxfSU5WQUxJRF9SRUZFUkVOQ0VfQ09VTlQpOworICAgICAgICB9CisgICAgfQorfQorCisjdW5kZWYgUnRsSW5jcmVtZW50TG9uZ1B0ck5vRmVuY2UKKyN1bmRlZiBSdGxEZWNyZW1lbnRMb25nUHRyUmVsZWFzZQorI3VuZGVmIFJ0bEV4Y2hhbmdlQWRkTG9uZ1B0ck5vRmVuY2UKKyN1bmRlZiBSdGxFeGNoYW5nZUFkZExvbmdQdHJSZWxlYXNlCisjdW5kZWYgUnRsQ29tcGFyZUV4Y2hhbmdlTG9uZ1B0ck5vRmVuY2UKKyN1bmRlZiBSdGxDb21wYXJlRXhjaGFuZ2VMb25nUHRyUmVsZWFzZQorI3VuZGVmIFJ0bEJhcnJpZXJBZnRlckludGVybG9jawpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGVfYzk5L3N0ZGJvb2wuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRib29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4MTIxYwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRib29sLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU1REQk9PTF9IXworI2RlZmluZSBfU1REQk9PTF9IXworCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKK3R5cGVkZWYgX0Jvb2wgYm9vbDsKKyNkZWZpbmUgZmFsc2UgMAorI2RlZmluZSB0cnVlIDEKKworI2VuZGlmIC8vIF9fY3BsdXNwbHVzCisKKyNlbmRpZiAgLy8gX1NUREJPT0xfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRpbnQuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9pbmNsdWRlX2M5OS9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTJkYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL2luY2x1ZGVfYzk5L3N0ZGludC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NURElOVF9IXworI2RlZmluZSBfU1RESU5UX0hfCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAgIGludDhfdDsKK3R5cGVkZWYgc2hvcnQgICAgICAgICAgICAgIGludDE2X3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICBpbnQzMl90OwordHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgIHVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIHVpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CisKKyNlbmRpZiAgLy8gX1NURElOVF9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290QXBpL2RsbG1haW4uY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290QXBpL2RsbG1haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDIzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RBcGkvZGxsbWFpbi5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJkbGxtYWluLnRtaCIKKworQk9PTCAKK19fc3RkY2FsbCAKK0RsbE1haW4oCisgICAgSElOU1RBTkNFIGhpbnN0RGxsLCAKKyAgICBEV09SRCBkd1JlYXNvbiwgCisgICAgTFBWT0lEIC8qIGxwdlJlc2VydmVkICovCisgICAgKQoreworICAgIHN3aXRjaCAoZHdSZWFzb24pCisgICAgeworICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzKGhpbnN0RGxsKTsKKyAgICAgICAgV1BQX0lOSVRfVFJBQ0lORyhMIm90QXBpIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CisgICAgICAgIFdQUF9DTEVBTlVQKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKKyAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290QXBpL290QXBpLmNwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEFwaS9vdEFwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZGMwZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEFwaS9vdEFwaS5jcHAKQEAgLTAsMCArMSwzODY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgIm90QXBpLnRtaCIKKworLy8jZGVmaW5lIERFQlVHX0FTWU5DX0lPCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKy8vIFRoZSBtYXhpbXVtIHRpbWUgd2Ugd2lsbCB3YWl0IGZvciBhbiBvdmVybGFwcGVkIHJlc3VsdC4gRXNzZW50aWFsbHksIHRoZSBtYXhpbXVtCisvLyBhbW91bnQgb2YgdGltZSBlYWNoIHN5bmNocm9ub3VzIElPQ1RMIHNob3VsZCB0YWtlLgorY29uc3QgRFdPUkQgY19NYXhPdmVybGFwcGVkV2FpdFRpbWVNUyA9IDUgKiAxMDAwOworCisvLyBWZXJzaW9uIHN0cmluZyByZXR1cm5lZCBieSB0aGUgQVBJCitjb25zdCBjaGFyIGNfVmVyc2lvbltdID0gIldpbmRvd3MiOyAvLyBUT0RPIC0gV2hhdCBzaG91bGQgd2UgcmVhbGx5IHB1dCBoZXJlPworCit0ZW1wbGF0ZTxjbGFzcyBDYWxsYmFja1Q+CitjbGFzcyBvdENhbGxiYWNrCit7CitwdWJsaWM6CisgICAgUlRMX1JFRkVSRU5DRV9DT1VOVCBDYWxsYmFja1JlZkNvdW50OworICAgIEhBTkRMRSAgICAgICAgICAgICAgQ2FsbGJhY2tDb21wbGV0ZUV2ZW50OworICAgIEdVSUQgICAgICAgICAgICAgICAgSW50ZXJmYWNlR3VpZDsKKyAgICBDYWxsYmFja1QgICAgICAgICAgIENhbGxiYWNrOworICAgIFBWT0lEICAgICAgICAgICAgICAgQ2FsbGJhY2tDb250ZXh0OworCisgICAgb3RDYWxsYmFjaygKKyAgICAgICAgQ2FsbGJhY2tUIF9DYWxsYmFjaywKKyAgICAgICAgUFZPSUQgX0NhbGxiYWNrQ29udGV4dAorICAgICAgICApIDogCisgICAgICAgIENhbGxiYWNrUmVmQ291bnQoMSksCisgICAgICAgIENhbGxiYWNrQ29tcGxldGVFdmVudChDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpKSwKKyAgICAgICAgQ2FsbGJhY2soX0NhbGxiYWNrKSwKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0KF9DYWxsYmFja0NvbnRleHQpCisgICAgeworICAgIH0KKworICAgIG90Q2FsbGJhY2soCisgICAgICAgIGNvbnN0IEdVSUQmIF9JbnRlcmZhY2VHdWlkLAorICAgICAgICBDYWxsYmFja1QgX0NhbGxiYWNrLAorICAgICAgICBQVk9JRCBfQ2FsbGJhY2tDb250ZXh0CisgICAgICAgICkgOiAKKyAgICAgICAgQ2FsbGJhY2tSZWZDb3VudCgxKSwKKyAgICAgICAgQ2FsbGJhY2tDb21wbGV0ZUV2ZW50KENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cikpLAorICAgICAgICBJbnRlcmZhY2VHdWlkKF9JbnRlcmZhY2VHdWlkKSwKKyAgICAgICAgQ2FsbGJhY2soX0NhbGxiYWNrKSwKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0KF9DYWxsYmFja0NvbnRleHQpCisgICAgeworICAgIH0KKworICAgIH5vdENhbGxiYWNrKCkKKyAgICB7CisgICAgICAgIGlmIChDYWxsYmFja0NvbXBsZXRlRXZlbnQpIENsb3NlSGFuZGxlKENhbGxiYWNrQ29tcGxldGVFdmVudCk7CisgICAgfQorCisgICAgdm9pZCBBZGRSZWYoKQorICAgIHsKKyAgICAgICAgUnRsSW5jcmVtZW50UmVmZXJlbmNlQ291bnQoJkNhbGxiYWNrUmVmQ291bnQpOworICAgIH0KKworICAgIHZvaWQgUmVsZWFzZShib29sIHdhaXRGb3JTaHV0ZG93biA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKFJ0bERlY3JlbWVudFJlZmVyZW5jZUNvdW50KCZDYWxsYmFja1JlZkNvdW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2V0IGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgcmVmcworICAgICAgICAgICAgU2V0RXZlbnQoQ2FsbGJhY2tDb21wbGV0ZUV2ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3YWl0Rm9yU2h1dGRvd24pCisgICAgICAgIHsKKyAgICAgICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoQ2FsbGJhY2tDb21wbGV0ZUV2ZW50LCBJTkZJTklURSk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit0eXBlZGVmIG90Q2FsbGJhY2s8b3REZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2s+IG90QXBpRGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2s7Cit0eXBlZGVmIG90Q2FsbGJhY2s8b3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0PiBvdEFwaUFjdGl2ZVNjYW5DYWxsYmFjazsKK3R5cGVkZWYgb3RDYWxsYmFjazxvdEhhbmRsZUVuZXJneVNjYW5SZXN1bHQ+IG90QXBpRW5lcmd5U2NhbkNhbGxiYWNrOwordHlwZWRlZiBvdENhbGxiYWNrPG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2s+IG90QXBpU3RhdGVDaGFuZ2VDYWxsYmFjazsKK3R5cGVkZWYgb3RDYWxsYmFjazxvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrPiBvdEFwaUNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrOwordHlwZWRlZiBvdENhbGxiYWNrPG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrPiBvdEFwaUNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjazsKK3R5cGVkZWYgb3RDYWxsYmFjazxvdEpvaW5lckNhbGxiYWNrPiBvdEFwaUpvaW5lckNhbGxiYWNrOworCit0eXBlZGVmIHN0cnVjdCBvdEFwaUluc3RhbmNlCit7CisgICAgLy8gSGFuZGxlIHRvIHRoZSBkcml2ZXIKKyAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlOworCisgICAgLy8gQXN5bmMgSU8gdmFyaWFibGVzCisgICAgT1ZFUkxBUFBFRCAgICAgICAgICAgICAgICAgIE92ZXJsYXBwZWQ7CisgICAgUFRQX1dBSVQgICAgICAgICAgICAgICAgICAgIFRocmVhZHBvb2xXYWl0OworCisgICAgLy8gTm90aWZpY2F0aW9uIHZhcmlhYmxlcworICAgIENSSVRJQ0FMX1NFQ1RJT04gICAgICAgICAgICBDYWxsYmFja0xvY2s7CisgICAgT1RMV0ZfTk9USUZJQ0FUSU9OICAgICAgICAgIE5vdGlmaWNhdGlvbkJ1ZmZlcjsKKworICAgIC8vIENhbGxiYWNrcworICAgIG90QXBpRGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2sqICAgIERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrczsKKyAgICB2ZWN0b3I8b3RBcGlBY3RpdmVTY2FuQ2FsbGJhY2sqPiAgICBBY3RpdmVTY2FuQ2FsbGJhY2tzOworICAgIHZlY3RvcjxvdEFwaUVuZXJneVNjYW5DYWxsYmFjayo+ICAgIEVuZXJneVNjYW5DYWxsYmFja3M7CisgICAgdmVjdG9yPG90QXBpQWN0aXZlU2NhbkNhbGxiYWNrKj4gICAgRGlzY292ZXJDYWxsYmFja3M7CisgICAgdmVjdG9yPG90QXBpU3RhdGVDaGFuZ2VDYWxsYmFjayo+ICAgU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzOworICAgIHZlY3RvcjxvdEFwaUNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrKj4gIENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrczsKKyAgICB2ZWN0b3I8b3RBcGlDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2sqPiBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzOworICAgIHZlY3RvcjxvdEFwaUpvaW5lckNhbGxiYWNrKj4gICAgICAgIEpvaW5lckNhbGxiYWNrczsKKworICAgIC8vIENvbnN0cnVjdG9yCisgICAgb3RBcGlJbnN0YW5jZSgpIDogCisgICAgICAgIERldmljZUhhbmRsZShJTlZBTElEX0hBTkRMRV9WQUxVRSksCisgICAgICAgIE92ZXJsYXBwZWQoezB9KSwKKyAgICAgICAgVGhyZWFkcG9vbFdhaXQobnVsbHB0ciksCisgICAgICAgIERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcyhudWxscHRyKQorICAgIHsgCisgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJkNhbGxiYWNrTG9jayk7CisgICAgfQorCisgICAgfm90QXBpSW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZDYWxsYmFja0xvY2spOworICAgIH0KKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgYSBjYWxsYmFjaworICAgIHRlbXBsYXRlPGNsYXNzIENhbGxiYWNrVD4KKyAgICBib29sIAorICAgIFNldENhbGxiYWNrKAorICAgICAgICB2ZWN0b3I8b3RDYWxsYmFjazxDYWxsYmFja1Q+Kj4gJkNhbGxiYWNrcywgCisgICAgICAgIGNvbnN0IEdVSUQmIEludGVyZmFjZUd1aWQsCisgICAgICAgIENhbGxiYWNrVCBDYWxsYmFjaywKKyAgICAgICAgUFZPSUQgQ2FsbGJhY2tDb250ZXh0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIGJvb2wgYWxyZWFkeUV4aXN0cyA9IGZhbHNlOworICAgICAgICBvdENhbGxiYWNrPENhbGxiYWNrVD4qIENhbGxiYWNrVG9SZWxlYXNlID0gbnVsbHB0cjsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmQ2FsbGJhY2tMb2NrKTsKKworICAgICAgICBpZiAoQ2FsbGJhY2sgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKENhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBJbnRlcmZhY2VHdWlkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbGJhY2tUb1JlbGVhc2UgPSBDYWxsYmFja3NbaV07CisgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrcy5lcmFzZShDYWxsYmFja3MuYmVnaW4oKSArIGkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IENhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoQ2FsbGJhY2tzW2ldLT5JbnRlcmZhY2VHdWlkID09IEludGVyZmFjZUd1aWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5RXhpc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWFscmVhZHlFeGlzdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2tzLnB1c2hfYmFjayhuZXcgb3RDYWxsYmFjazxDYWxsYmFja1Q+KEludGVyZmFjZUd1aWQsIENhbGxiYWNrLCBDYWxsYmFja0NvbnRleHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZDYWxsYmFja0xvY2spOworCisgICAgICAgIGlmIChDYWxsYmFja1RvUmVsZWFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ2FsbGJhY2tUb1JlbGVhc2UtPlJlbGVhc2UodHJ1ZSk7CisgICAgICAgICAgICBkZWxldGUgQ2FsbGJhY2tUb1JlbGVhc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIWFscmVhZHlFeGlzdHM7CisgICAgfQorCit9IG90QXBpSW5zdGFuY2U7CisKK3R5cGVkZWYgc3RydWN0IG90SW5zdGFuY2UKK3sKKyAgICBvdEFwaUluc3RhbmNlICAgKkFwaUhhbmRsZTsgICAgICAvLyBQb2ludGVyIHRvIHRoZSBBcGkgaGFuZGxlCisgICAgTkVUX0lGSU5ERVggICAgICBJbnRlcmZhY2VJbmRleDsgLy8gSW50ZXJmYWNlIEluZGV4CisgICAgTkVUX0xVSUQgICAgICAgICBJbnRlcmZhY2VMdWlkOyAgLy8gSW50ZXJmYWNlIEx1aWQKKyAgICBHVUlEICAgICAgICAgICAgIEludGVyZmFjZUd1aWQ7ICAvLyBJbnRlcmZhY2UgZ3VpZAorICAgIFVMT05HICAgICAgICAgICAgQ29tcGFydG1lbnRJRDsgIC8vIEludGVyZmFjZSBDb21wYXJ0bWVudCBJRAorCit9IG90SW5zdGFuY2U7CisKKy8vIG90cG9vbCB3YWl0IGNhbGxiYWNrIGZvciBhc3luYyBJTyBjb21wbGV0aW9uCitWT0lEIENBTExCQUNLIAorb3RJb0NvbXBsZXRlKAorICAgIF9Jbm91dF8gICAgIFBUUF9DQUxMQkFDS19JTlNUQU5DRSBJbnN0YW5jZSwKKyAgICBfSW5vdXRfb3B0XyBQVk9JRCAgICAgICAgICAgICAgICAgQ29udGV4dCwKKyAgICBfSW5vdXRfICAgICBQVFBfV0FJVCAgICAgICAgICAgICAgV2FpdCwKKyAgICBfSW5fICAgICAgICBUUF9XQUlUX1JFU1VMVCAgICAgICAgV2FpdFJlc3VsdAorICAgICk7CisKK09UQVBJIAorb3RBcGlJbnN0YW5jZSAqCitPVENBTEwKK290QXBpSW5pdCgKKyAgICApCit7CisgICAgRFdPUkQgZHdFcnJvciA9IEVSUk9SX1NVQ0NFU1M7CisgICAgb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZSA9IG51bGxwdHI7CisgICAgCisgICAgTG9nRnVuY0VudHJ5KEFQSV9ERUZBVUxUKTsKKworICAgIGFBcGl0SW5zdGFuY2UgPSBuZXcoc3RkOjpub3Rocm93KW90QXBpSW5zdGFuY2UoKTsKKyAgICBpZiAoYUFwaXRJbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgZHdFcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBMb2dXYXJuaW5nKEFQSV9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90QXBpSW5zdGFuY2UiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBPcGVuIHRoZSBwaXBlIHRvIHRoZSBPcGVuVGhyZWFkIGRyaXZlcgorICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSA9IAorICAgICAgICBDcmVhdGVGaWxlKAorICAgICAgICAgICAgT1RMV0ZfSU9DTFRfUEFUSCwKKyAgICAgICAgICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgbnVsbHB0ciwgICAgICAgICAgICAgICAgLy8gbm8gU0VDVVJJVFlfQVRUUklCVVRFUyBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIE9QRU5fRVhJU1RJTkcsICAgICAgICAgIC8vIE5vIHNwZWNpYWwgY3JlYXRlIGZsYWdzCisgICAgICAgICAgICBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgICAvLyBBbGxvdyBhc3luY2hyb25vdXMgcmVxdWVzdHMKKyAgICAgICAgICAgIG51bGxwdHIKKyAgICAgICAgICAgICk7CisgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICB7CisgICAgICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJDcmVhdGVGaWxlIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgZXZlbnQgZm9yIGNvbXBsZXRpb24gb2YgYXN5bmMgSU8KKyAgICBhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkLmhFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKGFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQuaEV2ZW50ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlRXZlbnQgKE92ZXJsYXBwZWQuaEV2ZW50KSBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSBvdHBvb2wgd2FpdAorICAgIGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0ID0gCisgICAgICAgIENyZWF0ZVRocmVhZHBvb2xXYWl0KAorICAgICAgICAgICAgb3RJb0NvbXBsZXRlLAorICAgICAgICAgICAgYUFwaXRJbnN0YW5jZSwKKyAgICAgICAgICAgIG51bGxwdHIKKyAgICAgICAgICAgICk7CisgICAgaWYgKGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlVGhyZWFkcG9vbFdhaXQgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIFN0YXJ0IHRoZSBvdHBvb2wgd2FpdGluZyBvbiB0aGUgb3ZlcmxhcHBlZCBldmVudAorICAgIFNldFRocmVhZHBvb2xXYWl0KGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0LCBhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkLmhFdmVudCwgbnVsbHB0cik7CisKKyNpZmRlZiBERUJVR19BU1lOQ19JTworICAgIExvZ1ZlcmJvc2UoQVBJX0RFRkFVTFQsICJRdWVyeWluZyBmb3IgMXN0IG5vdGlmaWNhdGlvbiIpOworI2VuZGlmCisKKyAgICAvLyBSZXF1ZXN0IGZpcnN0IG5vdGlmaWNhdGlvbiBhc3luY2hyb25vdXNseQorICAgIGlmICghRGV2aWNlSW9Db250cm9sKAorICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+RGV2aWNlSGFuZGxlLAorICAgICAgICAgICAgSU9DVExfT1RMV0ZfUVVFUllfTk9USUZJQ0FUSU9OLAorICAgICAgICAgICAgbnVsbHB0ciwgMCwKKyAgICAgICAgICAgICZhQXBpdEluc3RhbmNlLT5Ob3RpZmljYXRpb25CdWZmZXIsIHNpemVvZihPVExXRl9OT1RJRklDQVRJT04pLAorICAgICAgICAgICAgbnVsbHB0ciwgCisgICAgICAgICAgICAmYUFwaXRJbnN0YW5jZS0+T3ZlcmxhcHBlZCkpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChkd0Vycm9yICE9IEVSUk9SX0lPX1BFTkRJTkcpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGV2aWNlSW9Db250cm9sIGZvciBmaXJzdCBub3RpZmljYXRpb24gZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBkd0Vycm9yID0gRVJST1JfU1VDQ0VTUzsKKyAgICB9CisKK2Vycm9yOgorCisgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIG90QXBpRmluYWxpemUoYUFwaXRJbnN0YW5jZSk7CisgICAgICAgIGFBcGl0SW5zdGFuY2UgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBMb2dGdW5jRXhpdChBUElfREVGQVVMVCk7CisKKyAgICByZXR1cm4gYUFwaXRJbnN0YW5jZTsKK30KKworT1RBUEkgCit2b2lkIAorT1RDQUxMCitvdEFwaUZpbmFsaXplKAorICAgIF9Jbl8gb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZQorKQoreworICAgIGlmIChhQXBpdEluc3RhbmNlID09IG51bGxwdHIpIHJldHVybjsKKyAgICAKKyAgICBMb2dGdW5jRW50cnkoQVBJX0RFRkFVTFQpOworCisgICAgLy8gSWYgd2UgbmV2ZXIgZ290IHRoZSBoYW5kbGUsIG5vdGhpbmcgbGVmdCB0byBjbGVhbiB1cAorICAgIGlmIChhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdW5yZWdpc3RlciBjYWxsYmFja3MKKyAgICAgICAgLy8KKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICBvdEFwaURldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrKiBEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MgPSBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3M7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcyA9IG51bGxwdHI7CisKKyAgICAgICAgdmVjdG9yPG90QXBpQWN0aXZlU2NhbkNhbGxiYWNrKj4gQWN0aXZlU2NhbkNhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzKTsKKyAgICAgICAgYUFwaXRJbnN0YW5jZS0+QWN0aXZlU2NhbkNhbGxiYWNrcy5jbGVhcigpOworCisgICAgICAgIHZlY3RvcjxvdEFwaUVuZXJneVNjYW5DYWxsYmFjayo+IEVuZXJneVNjYW5DYWxsYmFja3MoYUFwaXRJbnN0YW5jZS0+RW5lcmd5U2NhbkNhbGxiYWNrcyk7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPkVuZXJneVNjYW5DYWxsYmFja3MuY2xlYXIoKTsKKworICAgICAgICB2ZWN0b3I8b3RBcGlBY3RpdmVTY2FuQ2FsbGJhY2sqPiBEaXNjb3ZlckNhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrcyk7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRpc2NvdmVyQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICAgICAgdmVjdG9yPG90QXBpU3RhdGVDaGFuZ2VDYWxsYmFjayo+IFN0YXRlQ2hhbmdlZENhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MpOworICAgICAgICBhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MuY2xlYXIoKTsKKworICAgICAgICB2ZWN0b3I8b3RBcGlDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayo+IENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrcyhhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3MpOworICAgICAgICBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3MuY2xlYXIoKTsKKworICAgICAgICB2ZWN0b3I8b3RBcGlDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2sqPiBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzKGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3MpOworICAgICAgICBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICAgICAgdmVjdG9yPG90QXBpSm9pbmVyQ2FsbGJhY2sqPiBKb2luZXJDYWxsYmFja3MoYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzKTsKKyAgICAgICAgYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICAgICAgI2lmZGVmIERFQlVHX0FTWU5DX0lPCisgICAgICAgIExvZ1ZlcmJvc2UoQVBJX0RFRkFVTFQsICJDbGVhcmluZyBUaHJlYWRwb29sIFdhaXQiKTsKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIHRocmVhZHBvb2wgd2FpdCB0byBwcmV2ZW50IGZ1cnRoZXIgd2FpdHMgZnJvbSBiZWluZyBzY2hlZHVsZWQKKyAgICAgICAgUFRQX1dBSVQgdHBXYWl0ID0gYUFwaXRJbnN0YW5jZS0+VGhyZWFkcG9vbFdhaXQ7CisgICAgICAgIGFBcGl0SW5zdGFuY2UtPlRocmVhZHBvb2xXYWl0ID0gbnVsbHB0cjsKKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICAvLyBDbGVhciBhbGwgY2FsbGJhY2tzCisgICAgICAgIGlmIChEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIERldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcy0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3M7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBY3RpdmVTY2FuQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBBY3RpdmVTY2FuQ2FsbGJhY2tzW2ldLT5SZWxlYXNlKHRydWUpOworICAgICAgICAgICAgZGVsZXRlIEFjdGl2ZVNjYW5DYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBFbmVyZ3lTY2FuQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBFbmVyZ3lTY2FuQ2FsbGJhY2tzW2ldLT5SZWxlYXNlKHRydWUpOworICAgICAgICAgICAgZGVsZXRlIEVuZXJneVNjYW5DYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBEaXNjb3ZlckNhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRGlzY292ZXJDYWxsYmFja3NbaV0tPlJlbGVhc2UodHJ1ZSk7CisgICAgICAgICAgICBkZWxldGUgRGlzY292ZXJDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBTdGF0ZUNoYW5nZWRDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXRlQ2hhbmdlZENhbGxiYWNrc1tpXS0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBTdGF0ZUNoYW5nZWRDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrc1tpXS0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzW2ldLT5SZWxlYXNlKHRydWUpOworICAgICAgICAgICAgZGVsZXRlIENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBKb2luZXJDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEpvaW5lckNhbGxiYWNrc1tpXS0+UmVsZWFzZSh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSBKb2luZXJDYWxsYmFja3NbaV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENsZWFuIHVwIHRocmVhZHBvb2wgd2FpdAorICAgICAgICBpZiAodHBXYWl0KQorICAgICAgICB7CisgICAgICAgICAgICAjaWZkZWYgREVCVUdfQVNZTkNfSU8KKyAgICAgICAgICAgIExvZ1ZlcmJvc2UoQVBJX0RFRkFVTFQsICJXYWl0aW5nIGZvciBvdXRzdGFuZGluZyB0aHJlYWRwb29sIGNhbGxiYWNrcyB0byBjb21wZWx0ZSIpOworICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIC8vIENhbmNlbCBhbnkgcXVldWVkIHdhaXRzIGFuZCB3YWl0IGZvciBhbnkgb3V0c3RhbmRpbmcgY2FsbHMgdG8gY29tcGVsdGUKKyAgICAgICAgICAgIFdhaXRGb3JUaHJlYWRwb29sV2FpdENhbGxiYWNrcyh0cFdhaXQsIFRSVUUpOworICAgICAgICAKKyAgICAgICAgICAgICNpZmRlZiBERUJVR19BU1lOQ19JTworICAgICAgICAgICAgTG9nVmVyYm9zZShBUElfREVGQVVMVCwgIkNhbmNlbGxpbmcgYW55IHBlbmRpbmcgSU8iKTsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAvLyBDYW5jZWwgYW55IGFzeW5jIElPCisgICAgICAgICAgICBDYW5jZWxJb0V4KGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwgJmFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQpOworCisgICAgICAgICAgICAvLyBGcmVlIHRoZSB0aHJlYWRwb29sIHdhaXQKKyAgICAgICAgICAgIENsb3NlVGhyZWFkcG9vbFdhaXQodHBXYWl0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFuIHVwIG92ZXJsYXBwZWQgZXZlbnQKKyAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQuaEV2ZW50KQorICAgICAgICB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkLmhFdmVudCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gQ2xvc2UgdGhlIGRldmljZSBoYW5kbGUKKyAgICAgICAgQ2xvc2VIYW5kbGUoYUFwaXRJbnN0YW5jZS0+RGV2aWNlSGFuZGxlKTsKKyAgICB9CisKKyAgICBkZWxldGUgYUFwaXRJbnN0YW5jZTsKKyAgICAKKyAgICBMb2dGdW5jRXhpdChBUElfREVGQVVMVCk7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RGcmVlTWVtb3J5KAorICAgIF9Jbl8gY29uc3Qgdm9pZCAqbWVtCisgICAgKQoreworICAgIGZyZWUoKHZvaWQqKW1lbSk7Cit9CisKKy8vIEhhbmRsZXMgY2xlYW5seSBpbnZva2luZyB0aGUgcmVnaXN0ZXIgY2FsbGJhY2sKK1ZPSUQKK1Byb2Nlc3NOb3RpZmljYXRpb24oCisgICAgX0luXyBvdEFwaUluc3RhbmNlICAgICAgICAgKmFBcGl0SW5zdGFuY2UsCisgICAgX0luXyBQT1RMV0ZfTk9USUZJQ0FUSU9OICAgIE5vdGlmCisgICAgKQoreworICAgIGlmIChOb3RpZi0+Tm90aWZUeXBlID09IE9UTFdGX05PVElGX0RFVklDRV9BVkFJTEFCSUxJVFkpCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrPiogQ2FsbGJhY2sgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkRldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrcyAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MtPkFkZFJlZigpOworICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3M7CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIG91dHNpZGUgdGhlIGxvY2sgYW5kIHJlbGVhc2UgcmVmIHdoZW4gZG9uZQorICAgICAgICBpZiAoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+RGV2aWNlQXZhaWxhYmlsaXR5UGF5bG9hZC5BdmFpbGFibGUgIT0gRkFMU0UsIAorICAgICAgICAgICAgICAgICZOb3RpZi0+SW50ZXJmYWNlR3VpZCwgCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9TVEFURV9DSEFOR0UpCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2s+KiBDYWxsYmFjayA9IG51bGxwdHI7CisKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhQXBpdEluc3RhbmNlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3NbaV0tPkludGVyZmFjZUd1aWQgPT0gTm90aWYtPkludGVyZmFjZUd1aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzW2ldLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBDYWxsYmFjayA9IGFBcGl0SW5zdGFuY2UtPlN0YXRlQ2hhbmdlZENhbGxiYWNrc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworICAgICAgICAKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBvdXRzaWRlIHRoZSBsb2NrIGFuZCByZWxlYXNlIHJlZiB3aGVuIGRvbmUKKyAgICAgICAgaWYgKENhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgTm90aWYtPlN0YXRlQ2hhbmdlUGF5bG9hZC5GbGFncywgCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9ESVNDT1ZFUikKKyAgICB7CisgICAgICAgIG90Q2FsbGJhY2s8b3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0PiogQ2FsbGJhY2sgPSBudWxscHRyOworCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUFwaXRJbnN0YW5jZS0+RGlzY292ZXJDYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBOb3RpZi0+SW50ZXJmYWNlR3VpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrc1tpXS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5EaXNjb3ZlckNhbGxiYWNrc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworICAgICAgICAKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBvdXRzaWRlIHRoZSBsb2NrIGFuZCByZWxlYXNlIHJlZiB3aGVuIGRvbmUKKyAgICAgICAgaWYgKENhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgTm90aWYtPkRpc2NvdmVyUGF5bG9hZC5WYWxpZCA/ICZOb3RpZi0+RGlzY292ZXJQYXlsb2FkLlJlc3VsdHMgOiBudWxscHRyLCAKKyAgICAgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2tDb250ZXh0KTsKKworICAgICAgICAgICAgQ2FsbGJhY2stPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChOb3RpZi0+Tm90aWZUeXBlID09IE9UTFdGX05PVElGX0FDVElWRV9TQ0FOKQorICAgIHsKKyAgICAgICAgb3RDYWxsYmFjazxvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQ+KiBDYWxsYmFjayA9IG51bGxwdHI7CisKKyAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhQXBpdEluc3RhbmNlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYUFwaXRJbnN0YW5jZS0+QWN0aXZlU2NhbkNhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBOb3RpZi0+SW50ZXJmYWNlR3VpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzW2ldLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBDYWxsYmFjayA9IGFBcGl0SW5zdGFuY2UtPkFjdGl2ZVNjYW5DYWxsYmFja3NbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgb3V0c2lkZSB0aGUgbG9jayBhbmQgcmVsZWFzZSByZWYgd2hlbiBkb25lCisgICAgICAgIGlmIChDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrKAorICAgICAgICAgICAgICAgIE5vdGlmLT5BY3RpdmVTY2FuUGF5bG9hZC5WYWxpZCA/ICZOb3RpZi0+QWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cyA6IG51bGxwdHIsIAorICAgICAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFja0NvbnRleHQpOworCisgICAgICAgICAgICBDYWxsYmFjay0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKE5vdGlmLT5Ob3RpZlR5cGUgPT0gT1RMV0ZfTk9USUZfRU5FUkdZX1NDQU4pCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90SGFuZGxlRW5lcmd5U2NhblJlc3VsdD4qIENhbGxiYWNrID0gbnVsbHB0cjsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFBcGl0SW5zdGFuY2UtPkVuZXJneVNjYW5DYWxsYmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhQXBpdEluc3RhbmNlLT5FbmVyZ3lTY2FuQ2FsbGJhY2tzW2ldLT5JbnRlcmZhY2VHdWlkID09IE5vdGlmLT5JbnRlcmZhY2VHdWlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkVuZXJneVNjYW5DYWxsYmFja3NbaV0tPkFkZFJlZigpOworICAgICAgICAgICAgICAgIENhbGxiYWNrID0gYUFwaXRJbnN0YW5jZS0+RW5lcmd5U2NhbkNhbGxiYWNrc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworICAgICAgICAKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBvdXRzaWRlIHRoZSBsb2NrIGFuZCByZWxlYXNlIHJlZiB3aGVuIGRvbmUKKyAgICAgICAgaWYgKENhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBDYWxsYmFjay0+Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgTm90aWYtPkVuZXJneVNjYW5QYXlsb2FkLlZhbGlkID8gJk5vdGlmLT5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzIDogbnVsbHB0ciwgCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfRU5FUkdZX1JFUE9SVCkKKyAgICB7CisgICAgICAgIG90Q2FsbGJhY2s8b3RDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjaz4qIENhbGxiYWNrID0gbnVsbHB0cjsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrc1tpXS0+SW50ZXJmYWNlR3VpZCA9PSBOb3RpZi0+SW50ZXJmYWNlR3VpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3NbaV0tPkFkZFJlZigpOworICAgICAgICAgICAgICAgIENhbGxiYWNrID0gYUFwaXRJbnN0YW5jZS0+Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2tzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIG91dHNpZGUgdGhlIGxvY2sgYW5kIHJlbGVhc2UgcmVmIHdoZW4gZG9uZQorICAgICAgICBpZiAoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0UGF5bG9hZC5DaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICBOb3RpZi0+Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0UGF5bG9hZC5FbmVyZ3lMaXN0LAorICAgICAgICAgICAgICAgIE5vdGlmLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRQYXlsb2FkLkVuZXJneUxpc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgQ2FsbGJhY2stPkNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWYtPk5vdGlmVHlwZSA9PSBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfUEFOSURfUVVFUlkpCisgICAgeworICAgICAgICBvdENhbGxiYWNrPG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrPiogQ2FsbGJhY2sgPSBudWxscHRyOworCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUFwaXRJbnN0YW5jZS0+Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFBcGl0SW5zdGFuY2UtPkNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3NbaV0tPkludGVyZmFjZUd1aWQgPT0gTm90aWYtPkludGVyZmFjZUd1aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrc1tpXS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5Db21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2tzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIG91dHNpZGUgdGhlIGxvY2sgYW5kIHJlbGVhc2UgcmVmIHdoZW4gZG9uZQorICAgICAgICBpZiAoQ2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+Q29tbWlzc2lvbmVyUGFuSWRRdWVyeVBheWxvYWQuUGFuSWQsCisgICAgICAgICAgICAgICAgTm90aWYtPkNvbW1pc3Npb25lclBhbklkUXVlcnlQYXlsb2FkLkNoYW5uZWxNYXNrLAorICAgICAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFja0NvbnRleHQpOworCisgICAgICAgICAgICBDYWxsYmFjay0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKE5vdGlmLT5Ob3RpZlR5cGUgPT0gT1RMV0ZfTk9USUZfSk9JTkVSX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgb3RDYWxsYmFjazxvdEpvaW5lckNhbGxiYWNrPiogQ2FsbGJhY2sgPSBudWxscHRyOworCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzW2ldLT5JbnRlcmZhY2VHdWlkID09IE5vdGlmLT5JbnRlcmZhY2VHdWlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkpvaW5lckNhbGxiYWNrc1tpXS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgPSBhQXBpdEluc3RhbmNlLT5Kb2luZXJDYWxsYmFja3NbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgb3V0c2lkZSB0aGUgbG9jayBhbmQgcmVsZWFzZSByZWYgd2hlbiBkb25lCisgICAgICAgIGlmIChDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+U2V0Q2FsbGJhY2soCisgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+Sm9pbmVyQ2FsbGJhY2tzLAorICAgICAgICAgICAgICAgIE5vdGlmLT5JbnRlcmZhY2VHdWlkLCAob3RKb2luZXJDYWxsYmFjayludWxscHRyLCAoUFZPSUQpbnVsbHB0cgorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFjaygKKyAgICAgICAgICAgICAgICBOb3RpZi0+Sm9pbmVyQ29tcGxldGVQYXlsb2FkLkVycm9yLAorICAgICAgICAgICAgICAgIENhbGxiYWNrLT5DYWxsYmFja0NvbnRleHQpOworCisgICAgICAgICAgICBDYWxsYmFjay0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFVuZXhwZWN0ZWQgbm90aWYgdHlwZQorICAgIH0KK30KKworLy8gVGhyZWFkcG9vbCB3YWl0IGNhbGxiYWNrIGZvciBhc3luYyBJTyBjb21wbGV0aW9uCitWT0lEIENBTExCQUNLIAorb3RJb0NvbXBsZXRlKAorICAgIF9Jbm91dF8gICAgIFBUUF9DQUxMQkFDS19JTlNUQU5DRSAvKiBJbnN0YW5jZSAqLywKKyAgICBfSW5vdXRfb3B0XyBQVk9JRCAgICAgICAgICAgICAgICAgQ29udGV4dCwKKyAgICBfSW5vdXRfICAgICBQVFBfV0FJVCAgICAgICAgICAgICAgLyogV2FpdCAqLywKKyAgICBfSW5fICAgICAgICBUUF9XQUlUX1JFU1VMVCAgICAgICAgLyogV2FpdFJlc3VsdCAqLworICAgICkKK3sKKyNpZmRlZiBERUJVR19BU1lOQ19JTworICAgIExvZ0Z1bmNFbnRyeShBUElfREVGQVVMVCk7CisjZW5kaWYKKworICAgIG90QXBpSW5zdGFuY2UgKmFBcGl0SW5zdGFuY2UgPSAob3RBcGlJbnN0YW5jZSopQ29udGV4dDsKKyAgICBpZiAoYUFwaXRJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgSU8gb3BlcmF0aW9uCisgICAgRFdPUkQgZHdCeXRlc1RyYW5zZmVycmVkID0gMDsKKyAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHQoCisgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUsCisgICAgICAgICAgICAmYUFwaXRJbnN0YW5jZS0+T3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICZkd0J5dGVzVHJhbnNmZXJyZWQsCisgICAgICAgICAgICBGQUxTRSkpCisgICAgeworICAgICAgICBEV09SRCBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiR2V0T3ZlcmxhcHBlZFJlc3VsdCBmb3Igbm90aWZpY2F0aW9uIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShBUElfREVGQVVMVCwgIlJlY2VpdmVkIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgZm9yIG5vdGlmaWNhdGlvbiwgdHlwZT0lZCIsIAorICAgICAgICAgICAgICAgICAgICAgYUFwaXRJbnN0YW5jZS0+Tm90aWZpY2F0aW9uQnVmZmVyLk5vdGlmVHlwZSk7CisKKyAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBpZiBzZXQKKyAgICAgICAgUHJvY2Vzc05vdGlmaWNhdGlvbihhQXBpdEluc3RhbmNlLCAmYUFwaXRJbnN0YW5jZS0+Tm90aWZpY2F0aW9uQnVmZmVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUcnkgdG8gZ2V0IHRoZSB0aHJlYWRwb29sIHdhaXQgdG8gc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRvIGNvbnRpbnVlIHByb2Nlc3Npbmcgbm90aWZpY2F0aW9ucworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmYUFwaXRJbnN0YW5jZS0+Q2FsbGJhY2tMb2NrKTsKKyAgICAgICAgUFRQX1dBSVQgdHBXYWl0ID0gYUFwaXRJbnN0YW5jZS0+VGhyZWFkcG9vbFdhaXQ7CisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgICAgIGlmICh0cFdhaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHdhaXRpbmcgZm9yIG5leHQgbm90aWZpY2F0aW9uCisgICAgICAgICAgICBTZXRUaHJlYWRwb29sV2FpdCh0cFdhaXQsIGFBcGl0SW5zdGFuY2UtPk92ZXJsYXBwZWQuaEV2ZW50LCBudWxscHRyKTsKKyAgICAgICAgICAgIAorI2lmZGVmIERFQlVHX0FTWU5DX0lPCisgICAgICAgICAgICBMb2dWZXJib3NlKEFQSV9ERUZBVUxULCAiUXVlcnlpbmcgZm9yIG5leHQgbm90aWZpY2F0aW9uIik7CisjZW5kaWYKKworICAgICAgICAgICAgLy8gUmVxdWVzdCBuZXh0IG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgaWYgKCFEZXZpY2VJb0NvbnRyb2woCisgICAgICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgSU9DVExfT1RMV0ZfUVVFUllfTk9USUZJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAwLAorICAgICAgICAgICAgICAgICAgICAmYUFwaXRJbnN0YW5jZS0+Tm90aWZpY2F0aW9uQnVmZmVyLCBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgCisgICAgICAgICAgICAgICAgICAgICZhQXBpdEluc3RhbmNlLT5PdmVybGFwcGVkKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEV09SRCBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfSU9fUEVORElORykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGV2aWNlSW9Db250cm9sIGZvciBuZXcgbm90aWZpY2F0aW9uIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisjaWZkZWYgREVCVUdfQVNZTkNfSU8KKyAgICBMb2dGdW5jRXhpdChBUElfREVGQVVMVCk7CisjZW5kaWYKK30KKworRFdPUkQKK1NlbmRJT0NUTCgKKyAgICBfSW5fIG90QXBpSW5zdGFuY2UgKmFBcGl0SW5zdGFuY2UsCisgICAgX0luXyBEV09SRCBkd0lvQ29udHJvbENvZGUsCisgICAgX0luX3JlYWRzX2J5dGVzX29wdF8obkluQnVmZmVyU2l6ZSkgTFBWT0lEIGxwSW5CdWZmZXIsCisgICAgX0luXyBEV09SRCBuSW5CdWZmZXJTaXplLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzX29wdF8obk91dEJ1ZmZlclNpemUpIExQVk9JRCBscE91dEJ1ZmZlciwKKyAgICBfSW5fIERXT1JEIG5PdXRCdWZmZXJTaXplCisgICAgKQoreworICAgIERXT1JEIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgIE9WRVJMQVBQRUQgT3ZlcmxhcHBlZCA9IHsgMCB9OworICAgIERXT1JEIGR3Qnl0ZXNSZXR1cm5lZCA9IDA7CisgICAgCisgICAgT3ZlcmxhcHBlZC5oRXZlbnQgPSBDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGlmIChPdmVybGFwcGVkLmhFdmVudCA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgZHdFcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBMb2dFcnJvcihBUElfREVGQVVMVCwgIkNyZWF0ZUV2ZW50IChPdmVybGFwcGVkLmhFdmVudCkgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICAKKyAgICAvLyBTZW5kIHRoZSBJT0NUTCB0aGUgT3BlblRocmVhZCBkcml2ZXIKKyAgICBpZiAoIURldmljZUlvQ29udHJvbCgKKyAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgIGR3SW9Db250cm9sQ29kZSwKKyAgICAgICAgICAgIGxwSW5CdWZmZXIsIG5JbkJ1ZmZlclNpemUsCisgICAgICAgICAgICBscE91dEJ1ZmZlciwgbk91dEJ1ZmZlclNpemUsCisgICAgICAgICAgICBudWxscHRyLCAKKyAgICAgICAgICAgICZPdmVybGFwcGVkKSkKKyAgICB7CisgICAgICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfSU9fUEVORElORykKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJEZXZpY2VJb0NvbnRyb2woMHgleCkgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3SW9Db250cm9sQ29kZSwgZHdFcnJvcik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgIH0KKworICAgIC8vIEdldCB0aGUgcmVzdWx0IG9mIHRoZSBJTyBvcGVyYXRpb24KKyAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHRFeCgKKyAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgICZPdmVybGFwcGVkLAorICAgICAgICAgICAgJmR3Qnl0ZXNSZXR1cm5lZCwKKyAgICAgICAgICAgIGNfTWF4T3ZlcmxhcHBlZFdhaXRUaW1lTVMsCisgICAgICAgICAgICBGQUxTRQorICAgICAgICAgICAgKSkKKyAgICB7CisgICAgICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGR3RXJyb3IgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICB7CisgICAgICAgICAgICBkd0Vycm9yID0gRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgIENhbmNlbElvRXgoYUFwaXRJbnN0YW5jZS0+RGV2aWNlSGFuZGxlLCAmT3ZlcmxhcHBlZCk7CisgICAgICAgIH0KKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJHZXRPdmVybGFwcGVkUmVzdWx0IGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoZHdCeXRlc1JldHVybmVkICE9IG5PdXRCdWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgZHdFcnJvciA9IEVSUk9SX0lOVkFMSURfREFUQTsKKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJHZXRPdmVybGFwcGVkUmVzdWx0IHJldHVybmVkIGludmFsaWQgb3V0cHV0IHNpemUsIGV4cGVjdGVkPSV1IGFjdHVhbD0ldSIsIAorICAgICAgICAgICAgICAgICAgICAgbk91dEJ1ZmZlclNpemUsIGR3Qnl0ZXNSZXR1cm5lZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCitlcnJvcjoKKworICAgIGlmIChPdmVybGFwcGVkLmhFdmVudCkKKyAgICB7CisgICAgICAgIENsb3NlSGFuZGxlKE92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gZHdFcnJvcjsKK30KKworX19wcmFnbWEocGFjayhwdXNoLDEpKQordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KK3N0cnVjdCBQYWNrZWRCdWZmZXIyCit7CisgICAgVDEgZGF0YTE7IFQyIGRhdGEyOworICAgIFBhY2tlZEJ1ZmZlcjIoY29uc3QgVDEgJmQxLCBjb25zdCBUMiAmZDIpIDogZGF0YTEoZDEpLCBkYXRhMihkMikgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDM+CitzdHJ1Y3QgUGFja2VkQnVmZmVyMworeworICAgIFQxIGRhdGExOyBUMiBkYXRhMjsgVDMgZGF0YTM7CisgICAgUGFja2VkQnVmZmVyMyhjb25zdCBUMSAmZDEsIGNvbnN0IFQyICZkMiwgY29uc3QgVDMgJmQzKSA6IGRhdGExKGQxKSwgZGF0YTIoZDIpLCBkYXRhMyhkMykgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0Pgorc3RydWN0IFBhY2tlZEJ1ZmZlcjQKK3sKKyAgICBUMSBkYXRhMTsgVDIgZGF0YTI7IFQzIGRhdGEzOyBUNCBkYXRhNDsKKyAgICBQYWNrZWRCdWZmZXI0KGNvbnN0IFQxICZkMSwgY29uc3QgVDIgJmQyLCBjb25zdCBUMyAmZDMsIGNvbnN0IFQ0ICZkNCkgOiBkYXRhMShkMSksIGRhdGEyKGQyKSwgZGF0YTMoZDMpLCBkYXRhNChkNCkgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNT4KK3N0cnVjdCBQYWNrZWRCdWZmZXI1Cit7CisgICAgVDEgZGF0YTE7IFQyIGRhdGEyOyBUMyBkYXRhMzsgVDQgZGF0YTQ7IFQ1IGRhdGE1OworICAgIFBhY2tlZEJ1ZmZlcjUoY29uc3QgVDEgJmQxLCBjb25zdCBUMiAmZDIsIGNvbnN0IFQzICZkMywgY29uc3QgVDQgJmQ0LCBjb25zdCBUNSAmZDUpIDogZGF0YTEoZDEpLCBkYXRhMihkMiksIGRhdGEzKGQzKSwgZGF0YTQoZDQpLCBkYXRhNShkNSkgeyB9Cit9OwordGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNSwgY2xhc3MgVDY+CitzdHJ1Y3QgUGFja2VkQnVmZmVyNgoreworICAgIFQxIGRhdGExOyBUMiBkYXRhMjsgVDMgZGF0YTM7IFQ0IGRhdGE0OyBUNSBkYXRhNTsgVDYgZGF0YTY7CisgICAgUGFja2VkQnVmZmVyNihjb25zdCBUMSAmZDEsIGNvbnN0IFQyICZkMiwgY29uc3QgVDMgJmQzLCBjb25zdCBUNCAmZDQsIGNvbnN0IFQ1ICZkNSwgY29uc3QgVDYgJmQ2KSA6IGRhdGExKGQxKSwgZGF0YTIoZDIpLCBkYXRhMyhkMyksIGRhdGE0KGQ0KSwgZGF0YTUoZDUpLCBkYXRhNihkNikgeyB9Cit9OworIF9fcHJhZ21hKHBhY2socG9wKSkKKwordGVtcGxhdGUgPGNsYXNzIGluLCBjbGFzcyBvdXQ+CitEV09SRAorUXVlcnlJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfSW5fIGNvbnN0IGluICppbnB1dCwKKyAgICBfT3V0XyBvdXQqIG91dHB1dAorICAgICkKK3sKKyAgICBQYWNrZWRCdWZmZXIyPEdVSUQsaW4+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsICppbnB1dCk7CisgICAgcmV0dXJuIFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgZHdJb0NvbnRyb2xDb2RlLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgb3V0cHV0LCBzaXplb2Yob3V0KSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBvdXQ+CitEV09SRAorUXVlcnlJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfT3V0XyBvdXQqIG91dHB1dAorICAgICkKK3sKKyAgICByZXR1cm4gU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBkd0lvQ29udHJvbENvZGUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSwgb3V0cHV0LCBzaXplb2Yob3V0KSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBpbj4KK0RXT1JECitTZXRJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfSW5fIGNvbnN0IGluKiBpbnB1dAorICAgICkKK3sKKyAgICBQYWNrZWRCdWZmZXIyPEdVSUQsaW4+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsICppbnB1dCk7CisgICAgcmV0dXJuIFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgZHdJb0NvbnRyb2xDb2RlLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBpbj4KK0RXT1JECitTZXRJT0NUTCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBfSW5fIERXT1JEIGR3SW9Db250cm9sQ29kZSwKKyAgICBfSW5fIGNvbnN0IGluIGlucHV0CisgICAgKQoreworICAgIFBhY2tlZEJ1ZmZlcjI8R1VJRCxpbj4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgaW5wdXQpOworICAgIHJldHVybiBTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIGR3SW9Db250cm9sQ29kZSwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApOworfQorCitEV09SRAorU2V0SU9DVEwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX0luXyBEV09SRCBkd0lvQ29udHJvbENvZGUKKyAgICApCit7CisgICAgcmV0dXJuIFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgZHdJb0NvbnRyb2xDb2RlLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCksIG51bGxwdHIsIDApOworfQorCitvdEVycm9yCitEd29yZFRvVGhyZWFkRXJyb3IoCisgICAgRFdPUkQgZHdFcnJvcgorICAgICkKK3sKKyAgICBpZiAoKChpbnQpZHdFcnJvcikgPiAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0dFTkVSSUM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAob3RFcnJvcikoLShpbnQpZHdFcnJvcik7CisgICAgfQorfQorCitPVEFQSSAKK3ZvaWQgCitPVENBTEwKK290U2V0RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKAorICAgIF9Jbl8gb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZSwKKyAgICBfSW5fIG90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywKKyAgICBfSW5fIHZvaWQgKmFDYWxsYmFja0NvbnRleHQKKyAgICApCit7CisgICAgb3RBcGlEZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFjayogQ2FsbGJhY2tUb1JlbGVhc2UgPSBudWxscHRyOworCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFBcGl0SW5zdGFuY2UtPkNhbGxiYWNrTG9jayk7CisKKyAgICBpZiAoYUFwaXRJbnN0YW5jZS0+RGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2tzICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBDYWxsYmFja1RvUmVsZWFzZSA9IGFBcGl0SW5zdGFuY2UtPkRldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrczsKKyAgICAgICAgYUFwaXRJbnN0YW5jZS0+RGV2aWNlQXZhaWxhYmlsaXR5Q2FsbGJhY2tzID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoYUNhbGxiYWNrICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VBdmFpbGFiaWxpdHlDYWxsYmFja3MgPSAKKyAgICAgICAgICAgIG5ldyBvdEFwaURldmljZUF2YWlsYWJpbGl0eUNhbGxiYWNrKGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7CisgICAgfQorICAgIAorICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhQXBpdEluc3RhbmNlLT5DYWxsYmFja0xvY2spOworCisgICAgaWYgKENhbGxiYWNrVG9SZWxlYXNlKQorICAgIHsKKyAgICAgICAgQ2FsbGJhY2tUb1JlbGVhc2UtPlJlbGVhc2UodHJ1ZSk7CisgICAgICAgIGRlbGV0ZSBDYWxsYmFja1RvUmVsZWFzZTsKKyAgICB9Cit9CisKK09UQVBJIAorb3REZXZpY2VMaXN0KiAKK09UQ0FMTAorb3RFbnVtZXJhdGVEZXZpY2VzKAorICAgIF9Jbl8gb3RBcGlJbnN0YW5jZSAqYUFwaXRJbnN0YW5jZQorICAgICkKK3sKKyAgICBEV09SRCBkd0Vycm9yID0gRVJST1JfU1VDQ0VTUzsKKyAgICBPVkVSTEFQUEVEIE92ZXJsYXBwZWQgPSB7IDAgfTsKKyAgICBEV09SRCBkd0J5dGVzUmV0dXJuZWQgPSAwOworICAgIG90RGV2aWNlTGlzdCogcERldmljZUxpc3QgPSBudWxscHRyOworICAgIERXT1JEIGNiRGV2aWNlTGlzdCA9IHNpemVvZihvdERldmljZUxpc3QpOworICAgIAorICAgIExvZ0Z1bmNFbnRyeShBUElfREVGQVVMVCk7CisKKyAgICBPdmVybGFwcGVkLmhFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisgICAgaWYgKE92ZXJsYXBwZWQuaEV2ZW50ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlRXZlbnQgKE92ZXJsYXBwZWQuaEV2ZW50KSBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIAorICAgIHBEZXZpY2VMaXN0ID0gKG90RGV2aWNlTGlzdCopbWFsbG9jKGNiRGV2aWNlTGlzdCk7CisgICAgaWYgKHBEZXZpY2VMaXN0ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKEFQSV9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90RGV2aWNlTGlzdCBvZiAldSBieXRlcy4iLCBjYkRldmljZUxpc3QpOworICAgICAgICBkd0Vycm9yID0gRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFJ0bFplcm9NZW1vcnkocERldmljZUxpc3QsIGNiRGV2aWNlTGlzdCk7CisgICAgCisgICAgLy8gUXVlcnkgaW4gYSBsb29wIHRvIGFjY291bnQgZm9yIGl0IGNoYW5naW5nIGJldHdlZW4gY2FsbHMKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIC8vIFNlbmQgdGhlIElPQ1RMIHRvIHF1ZXJ5IHRoZSBpbnRlcmZhY2VzCisgICAgICAgIGlmICghRGV2aWNlSW9Db250cm9sKAorICAgICAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UtPkRldmljZUhhbmRsZSwKKyAgICAgICAgICAgICAgICBJT0NUTF9PVExXRl9FTlVNRVJBVEVfREVWSUNFUywKKyAgICAgICAgICAgICAgICBudWxscHRyLCAwLAorICAgICAgICAgICAgICAgIHBEZXZpY2VMaXN0LCBjYkRldmljZUxpc3QsCisgICAgICAgICAgICAgICAgbnVsbHB0ciwgCisgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQpKQorICAgICAgICB7CisgICAgICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICBpZiAoZHdFcnJvciAhPSBFUlJPUl9JT19QRU5ESU5HKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGV2aWNlSW9Db250cm9sKElPQ1RMX09UTFdGX0VOVU1FUkFURV9ERVZJQ0VTKSBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHRoZSByZXN1bHQgb2YgdGhlIElPIG9wZXJhdGlvbgorICAgICAgICBpZiAoIUdldE92ZXJsYXBwZWRSZXN1bHRFeCgKKyAgICAgICAgICAgICAgICBhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUsCisgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgJmR3Qnl0ZXNSZXR1cm5lZCwKKyAgICAgICAgICAgICAgICBjX01heE92ZXJsYXBwZWRXYWl0VGltZU1TLAorICAgICAgICAgICAgICAgIFRSVUUpKQorICAgICAgICB7CisgICAgICAgICAgICBkd0Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICBpZiAoZHdFcnJvciA9PSBXQUlUX1RJTUVPVVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHdFcnJvciA9IEVSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgICAgICAgQ2FuY2VsSW9FeChhQXBpdEluc3RhbmNlLT5EZXZpY2VIYW5kbGUsICZPdmVybGFwcGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiR2V0T3ZlcmxhcHBlZFJlc3VsdCBmb3Igbm90aWZpY2F0aW9uIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZnVsbCBidWZmZXIKKyAgICAgICAgY2JEZXZpY2VMaXN0ID0gCisgICAgICAgICAgICBGSUVMRF9PRkZTRVQob3REZXZpY2VMaXN0LCBhRGV2aWNlcykgKworICAgICAgICAgICAgcERldmljZUxpc3QtPmFEZXZpY2VzTGVuZ3RoICogc2l6ZW9mKG90RGV2aWNlTGlzdDo6YURldmljZXMpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZXkgcmV0dXJuZWQgYSBjb21wbGV0ZSBidWZmZXIKKyAgICAgICAgaWYgKGR3Qnl0ZXNSZXR1cm5lZCAhPSBzaXplb2Yob3REZXZpY2VMaXN0OjphRGV2aWNlc0xlbmd0aCkpIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhhdCBtZWFucyB3ZSBkaWRuJ3QgaGF2ZSBhIGJpZyBlbm91Z2ggYnVmZmVyCisgICAgICAgIC8vIFJlYWxsb2NhdGUgYSBuZXcgYnVmZmVyCisgICAgICAgIGZyZWUocERldmljZUxpc3QpOworICAgICAgICBwRGV2aWNlTGlzdCA9IChvdERldmljZUxpc3QqKW1hbGxvYyhjYkRldmljZUxpc3QpOworICAgICAgICBpZiAocERldmljZUxpc3QgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3REZXZpY2VMaXN0IG9mICV1IGJ5dGVzLiIsIGNiRGV2aWNlTGlzdCk7CisgICAgICAgICAgICBkd0Vycm9yID0gRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFJ0bFplcm9NZW1vcnkocERldmljZUxpc3QsIGNiRGV2aWNlTGlzdCk7CisgICAgfQorCitlcnJvcjoKKworICAgIGlmIChkd0Vycm9yICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgICBmcmVlKHBEZXZpY2VMaXN0KTsKKyAgICAgICAgcERldmljZUxpc3QgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChPdmVybGFwcGVkLmhFdmVudCkKKyAgICB7CisgICAgICAgIENsb3NlSGFuZGxlKE92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXRNc2coQVBJX0RFRkFVTFQsICIlZCBkZXZpY2VzIiwgcERldmljZUxpc3QgPT0gbnVsbHB0ciA/IC0xIDogKGludClwRGV2aWNlTGlzdC0+YURldmljZXNMZW5ndGgpOworCisgICAgcmV0dXJuIHBEZXZpY2VMaXN0OworfQorICAgIAorT1RBUEkgCitvdEluc3RhbmNlICoKK09UQ0FMTAorb3RJbnN0YW5jZUluaXQoCisgICAgX0luXyBvdEFwaUluc3RhbmNlICphQXBpdEluc3RhbmNlLCAKKyAgICBfSW5fIGNvbnN0IEdVSUQgKmFEZXZpY2VHdWlkCisgICAgKQoreworICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZSA9IG51bGxwdHI7CisKKyAgICBPVExXRl9ERVZJQ0UgUmVzdWx0ID0gezB9OworICAgIGlmIChhQXBpdEluc3RhbmNlICYmCisgICAgICAgIFNlbmRJT0NUTCgKKyAgICAgICAgICAgIGFBcGl0SW5zdGFuY2UsIAorICAgICAgICAgICAgSU9DVExfT1RMV0ZfUVVFUllfREVWSUNFLCAKKyAgICAgICAgICAgIChMUFZPSUQpYURldmljZUd1aWQsIAorICAgICAgICAgICAgc2l6ZW9mKEdVSUQpLCAKKyAgICAgICAgICAgICZSZXN1bHQsIAorICAgICAgICAgICAgc2l6ZW9mKFJlc3VsdCkKKyAgICAgICAgICAgICkgPT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZSA9IChvdEluc3RhbmNlKiltYWxsb2Moc2l6ZW9mKG90SW5zdGFuY2UpKTsKKyAgICAgICAgaWYgKGFJbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUgPSBhQXBpdEluc3RhbmNlOworICAgICAgICAgICAgYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkID0gKmFEZXZpY2VHdWlkOworICAgICAgICAgICAgYUluc3RhbmNlLT5Db21wYXJ0bWVudElEID0gUmVzdWx0LkNvbXBhcnRtZW50SUQ7CisKKyAgICAgICAgICAgIGlmIChDb252ZXJ0SW50ZXJmYWNlR3VpZFRvTHVpZChhRGV2aWNlR3VpZCwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlTHVpZCkgIT0gRVJST1JfU1VDQ0VTUyB8fAorICAgICAgICAgICAgICAgIENvbnZlcnRJbnRlcmZhY2VMdWlkVG9JbmRleCgmYUluc3RhbmNlLT5JbnRlcmZhY2VMdWlkLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihBUElfREVGQVVMVCwgIkZhaWxlZCB0byBjb252ZXJ0IGludGVyZmFjZSBndWlkIHRvIGluZGV4ISIpOworICAgICAgICAgICAgICAgIGZyZWUoYUluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBhSW5zdGFuY2UgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFJbnN0YW5jZTsKK30KKworT1RBUEkgCitHVUlEIAorT1RDQUxMCitvdEdldERldmljZUd1aWQoCisgICAgb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIHt9OworICAgIHJldHVybiBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQ7Cit9CisKK09UQVBJIAordWludDMyX3QgCitPVENBTEwKK290R2V0RGV2aWNlSWZJbmRleCgKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gKHVpbnQzMl90KS0xOworICAgIHJldHVybiBhSW5zdGFuY2UtPkludGVyZmFjZUluZGV4OworfQorCitPVEFQSSAKK3VpbnQzMl90IAorT1RDQUxMCitvdEdldENvbXBhcnRtZW50SWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gKHVpbnQzMl90KS0xOworICAgIHJldHVybiBhSW5zdGFuY2UtPkNvbXBhcnRtZW50SUQ7Cit9CisKK09UQVBJIAorY29uc3QgY2hhciAqCitPVENBTEwKK290R2V0VmVyc2lvblN0cmluZygpCit7CisgICAgY2hhciogc3pWZXJzaW9uID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY19WZXJzaW9uKSk7CisgICAgaWYgKHN6VmVyc2lvbikKKyAgICB7CisgICAgICAgIG1lbWNweV9zKHN6VmVyc2lvbiwgc2l6ZW9mKGNfVmVyc2lvbiksIGNfVmVyc2lvbiwgc2l6ZW9mKGNfVmVyc2lvbikpOworICAgIH0KKyAgICByZXR1cm4gc3pWZXJzaW9uOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290SXA2U2V0RW5hYmxlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBib29sIGFFbmFibGVkCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSU5URVJGQUNFLCAoQk9PTEVBTilhRW5hYmxlZCkpOworfQorCitPVEFQSSAKK2Jvb2wgCitPVENBTEwKK290SXA2SXNFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIEJPT0xFQU4gUmVzdWx0ID0gRkFMU0U7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0lOVEVSRkFDRSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdFRocmVhZFNldEVuYWJsZWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgYm9vbCBhRW5hYmxlZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1RIUkVBRCwgKEJPT0xFQU4pYUVuYWJsZWQpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRTZXRBdXRvU3RhcnQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgYm9vbCBhU3RhcnRBdXRvbWF0aWNhbGx5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfVEhSRUFEX0FVVE9fU1RBUlQsIChCT09MRUFOKShhU3RhcnRBdXRvbWF0aWNhbGx5ID8gVFJVRSA6IEZBTFNFKSkpOworfQorCitPVEFQSQorYm9vbAorT1RDQUxMCitvdFRocmVhZEdldEF1dG9TdGFydCgKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgQk9PTEVBTiBSZXN1bHQgPSBGQUxTRTsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfVEhSRUFEX0FVVE9fU1RBUlQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJIAorYm9vbCAKK09UQ0FMTAorb3RUaHJlYWRJc1NpbmdsZXRvbigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IEZBTFNFOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9TSU5HTEVUT04sICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RMaW5rQWN0aXZlU2NhbigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDMyX3QgYVNjYW5DaGFubmVscywgCisgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICBvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQgYUNhbGxiYWNrLAorICAgIF9Jbl8gdm9pZCAqYUNhbGxiYWNrQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5BY3RpdmVTY2FuQ2FsbGJhY2tzLAorICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dAorICAgICAgICApOworICAgIAorICAgIFBhY2tlZEJ1ZmZlcjM8R1VJRCx1aW50MzJfdCx1aW50MTZfdD4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYVNjYW5DaGFubmVscywgYVNjYW5EdXJhdGlvbik7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0FDVElWRV9TQ0FOLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCkpOworfQorCitPVEFQSSAKK2Jvb2wgCitPVENBTEwKK290TGlua0lzQWN0aXZlU2NhbkluUHJvZ3Jlc3MoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgQk9PTEVBTiBSZXN1bHQgPSBGQUxTRTsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQUNUSVZFX1NDQU4sICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTCAKK290TGlua0VuZXJneVNjYW4oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIAorICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sCisgICAgX0luXyBvdEhhbmRsZUVuZXJneVNjYW5SZXN1bHQgYUNhbGxiYWNrLCAKKyAgICBfSW5fIHZvaWQgKmFDYWxsYmFja0NvbnRleHQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUtPlNldENhbGxiYWNrKAorICAgICAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+RW5lcmd5U2NhbkNhbGxiYWNrcywKKyAgICAgICAgYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQKKyAgICAgICAgKTsKKyAgICAKKyAgICBQYWNrZWRCdWZmZXIzPEdVSUQsdWludDMyX3QsdWludDE2X3Q+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFTY2FuQ2hhbm5lbHMsIGFTY2FuRHVyYXRpb24pOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9FTkVSR1lfU0NBTiwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitib29sIAorT1RDQUxMIAorb3RMaW5rSXNFbmVyZ3lTY2FuSW5Qcm9ncmVzcygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IEZBTFNFOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9FTkVSR1lfU0NBTiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdFRocmVhZERpc2NvdmVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCAKKyAgICB1aW50MTZfdCBhUGFuaWQsCisgICAgYm9vbCBhSm9pbmVyLAorICAgIGJvb2wgYUVuYWJsZUV1aTY0RmlsdGVyaW5nLAorICAgIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBhQ2FsbGJhY2ssCisgICAgdm9pZCAqYUNhbGxiYWNrQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5EaXNjb3ZlckNhbGxiYWNrcywKKyAgICAgICAgYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQKKyAgICAgICAgKTsKKworICAgIFBhY2tlZEJ1ZmZlcjU8R1VJRCx1aW50MzJfdCx1aW50MTZfdCwgdWludDhfdCwgdWludDhfdD4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYVNjYW5DaGFubmVscywgYVBhbmlkLCBhSm9pbmVyLCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcpOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9ESVNDT1ZFUiwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitib29sIAorT1RDQUxMCitvdElzRGlzY292ZXJJblByb2dyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIEJPT0xFQU4gUmVzdWx0ID0gRkFMU0U7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0RJU0NPVkVSLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0ICE9IEZBTFNFOworfQorCitPVEFQSSAKK290RXJyb3IKK09UQ0FMTAorb3RMaW5rU2VuZERhdGFSZXF1ZXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFJbnN0YW5jZSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgLy8gVE9ETworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290TGlua0dldENoYW5uZWwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSAweEZGOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9DSEFOTkVMLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290TGlua1NldENoYW5uZWwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQ4X3QgYUNoYW5uZWwKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9DSEFOTkVMLCBhQ2hhbm5lbCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdERhdGFzZXRTZXREZWxheVRpbWVyTWluaW1hbCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICB1aW50MzJfdCBhRGVsYXlUaW1lck1pbmltYWwKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIC8vIFRPRE8KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFEZWxheVRpbWVyTWluaW1hbCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworT1RBUEkKK3VpbnQzMl90CitPVENBTEwKK290RGF0YXNldEdldERlbGF5VGltZXJNaW5pbWFsKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIDA7CisgICAgLy8gVE9ETworICAgIHJldHVybiAwOworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0TWF4QWxsb3dlZENoaWxkcmVuKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUFYX0NISUxEUkVOLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFNYXhDaGlsZHJlbgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BWF9DSElMRFJFTiwgYU1heENoaWxkcmVuKSk7Cit9CisKK09UQVBJIAordWludDMyX3QgCitPVENBTEwKK290VGhyZWFkR2V0Q2hpbGRUaW1lb3V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0NISUxEX1RJTUVPVVQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQzMl90IGFUaW1lb3V0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0hJTERfVElNRU9VVCwgYVRpbWVvdXQpOworfQorCitPVEFQSSAKK2NvbnN0IAordWludDhfdCAqCitPVENBTEwKK290TGlua0dldEV4dGVuZGVkQWRkcmVzcygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3RFeHRBZGRyZXNzICpSZXN1bHQgPSAob3RFeHRBZGRyZXNzKiltYWxsb2Moc2l6ZW9mKG90RXh0QWRkcmVzcykpOworICAgIGlmIChSZXN1bHQgJiYgUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0VYVEVOREVEX0FERFJFU1MsIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgUmVzdWx0ID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICh1aW50OF90KilSZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRlbmRlZEFkZHJlc3MKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9FWFRFTkRFRF9BRERSRVNTLCBhRXh0ZW5kZWRBZGRyZXNzKSk7Cit9CisKK09UQVBJIAorY29uc3QgdWludDhfdCAqCitPVENBTEwKK290VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3RFeHRlbmRlZFBhbklkICpSZXN1bHQgPSAob3RFeHRlbmRlZFBhbklkKiltYWxsb2Moc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpOworICAgIGlmIChSZXN1bHQgJiYgUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0VYVEVOREVEX1BBTklELCBSZXN1bHQpICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgICBmcmVlKFJlc3VsdCk7CisgICAgICAgIFJlc3VsdCA9IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAodWludDhfdCopUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkU2V0RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYUV4dGVuZGVkUGFuSWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9FWFRFTkRFRF9QQU5JRCwgKGNvbnN0IG90RXh0ZW5kZWRQYW5JZCopYUV4dGVuZGVkUGFuSWQpKTsKK30KKworT1RBUEkgCit2b2lkIAorT1RDQUxMCitvdExpbmtHZXRGYWN0b3J5QXNzaWduZWRJZWVlRXVpNjQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIF9PdXRfIG90RXh0QWRkcmVzcyAqYUV1aTY0CispCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm47CisgICAgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0ZBQ1RPUllfRVVJNjQsIGFFdWk2NCk7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RMaW5rR2V0Sm9pbmVySWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIF9PdXRfIG90RXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuOworICAgICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9IQVNIX01BQ19BRERSRVNTLCBhSGFzaE1hY0FkZHJlc3MpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkR2V0TGVhZGVyUmxvYygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX091dF8gb3RJcDZBZGRyZXNzICphTGVhZGVyUmxvYworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1JMT0MsIGFMZWFkZXJSbG9jKSk7Cit9CisKK09UQVBJIAorb3RMaW5rTW9kZUNvbmZpZyAKK09UQ0FMTAorb3RUaHJlYWRHZXRMaW5rTW9kZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBvdExpbmtNb2RlQ29uZmlnIFJlc3VsdCA9IHswfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSA9PSA0LCAiVGhlIHNpemUgb2Ygb3RMaW5rTW9kZUNvbmZpZyBzaG91bGQgYmUgNCBieXRlcyIpOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MSU5LX01PREUsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RUaHJlYWRTZXRMaW5rTW9kZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgb3RMaW5rTW9kZUNvbmZpZyBhQ29uZmlnCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSA9PSA0LCAiVGhlIHNpemUgb2Ygb3RMaW5rTW9kZUNvbmZpZyBzaG91bGQgYmUgNCBieXRlcyIpOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MSU5LX01PREUsIGFDb25maWcpKTsKK30KKworT1RBUEkgCitjb25zdCBvdE1hc3RlcktleSAqCitPVENBTEwKK290VGhyZWFkR2V0TWFzdGVyS2V5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIG51bGxwdHI7CisKKyAgICBvdE1hc3RlcktleSAqUmVzdWx0ID0gKG90TWFzdGVyS2V5KiltYWxsb2Moc2l6ZW9mKG90TWFzdGVyS2V5KSk7CisgICAgaWYgKFJlc3VsdCA9PSBudWxscHRyKSByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BU1RFUl9LRVksIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkU2V0TWFzdGVyS2V5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdE1hc3RlcktleSAqYUtleQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgCisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BU1RFUl9LRVksIGFLZXkpKTsKK30KKworT1RBUEkgCitjb25zdCB1aW50OF90ICoKK09UQ0FMTAorb3RUaHJlYWRHZXRQU0tjKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlIAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgdWludDhfdCAqUmVzdWx0ID0gKHVpbnQ4X3QqKW1hbGxvYyhzaXplb2Yob3RQU0tjKSk7CisgICAgaWYgKFJlc3VsdCA9PSBudWxscHRyKSByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BTS0MsIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkU2V0UFNLYygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYVBTS2MgCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBCWVRFIEJ1ZmZlcltzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RQU0tjKV07CisgICAgbWVtY3B5X3MoQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpLCBhUFNLYywgc2l6ZW9mKG90UFNLYykpOworICAgIAorICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9QU0tDLCBCdWZmZXIsIHNpemVvZihCdWZmZXIpLCBudWxscHRyLCAwKSk7Cit9CisKK09UQVBJIAoraW50OF90IAorT1RDQUxMCitvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGludDhfdCBSZXN1bHQgPSAwOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQVhfVFJBTlNNSVRfUE9XRVIsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgaW50OF90IGFQb3dlcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BWF9UUkFOU01JVF9QT1dFUiwgYVBvd2VyKTsKK30KKworT1RBUEkKK2NvbnN0IG90SXA2QWRkcmVzcyAqCitPVENBTEwKK290VGhyZWFkR2V0TWVzaExvY2FsRWlkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIG90SXA2QWRkcmVzcyAqUmVzdWx0ID0gKG90SXA2QWRkcmVzcyopbWFsbG9jKHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICBpZiAoUmVzdWx0ICYmIFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NRVNIX0xPQ0FMX0VJRCwgUmVzdWx0KSAhPSBFUlJPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZnJlZShSZXN1bHQpOworICAgICAgICBSZXN1bHQgPSBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSQorY29uc3QgdWludDhfdCAqCitPVENBTEwKK290VGhyZWFkR2V0TWVzaExvY2FsUHJlZml4KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIG51bGxwdHI7CisKKyAgICBvdE1lc2hMb2NhbFByZWZpeCAqUmVzdWx0ID0gKG90TWVzaExvY2FsUHJlZml4KiltYWxsb2Moc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSk7CisgICAgaWYgKFJlc3VsdCAmJiBRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUVTSF9MT0NBTF9QUkVGSVgsIFJlc3VsdCkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGZyZWUoUmVzdWx0KTsKKyAgICAgICAgUmVzdWx0ID0gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICh1aW50OF90KilSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkU2V0TWVzaExvY2FsUHJlZml4KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphTWVzaExvY2FsUHJlZml4CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUVTSF9MT0NBTF9QUkVGSVgsIChjb25zdCBvdE1lc2hMb2NhbFByZWZpeCopYU1lc2hMb2NhbFByZWZpeCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldE5ldHdvcmtEYXRhTGVhZGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBib29sIGFTdGFibGUsIAorICAgIF9PdXRfIHVpbnQ4X3QgKmFEYXRhLCAKKyAgICBfT3V0XyB1aW50OF90ICphRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhSW5zdGFuY2UpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoYVN0YWJsZSk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhRGF0YSk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhRGF0YUxlbmd0aCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgLy8gVE9ETworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldE5ldHdvcmtEYXRhTG9jYWwoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIGJvb2wgYVN0YWJsZSwgCisgICAgX091dF8gdWludDhfdCAqYURhdGEsIAorICAgIF9PdXRfIHVpbnQ4X3QgKmFEYXRhTGVuZ3RoCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFJbnN0YW5jZSk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhU3RhYmxlKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFEYXRhKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFEYXRhTGVuZ3RoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyAvLyBUT0RPCit9CisKK09UQVBJCitjb25zdCBjaGFyICoKK09UQ0FMTAorb3RUaHJlYWRHZXROZXR3b3JrTmFtZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3ROZXR3b3JrTmFtZSAqUmVzdWx0ID0gKG90TmV0d29ya05hbWUqKW1hbGxvYyhzaXplb2Yob3ROZXR3b3JrTmFtZSkpOworICAgIGlmIChSZXN1bHQgJiYgUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX05FVFdPUktfTkFNRSwgUmVzdWx0KSAhPSBFUlJPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZnJlZShSZXN1bHQpOworICAgICAgICBSZXN1bHQgPSBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gKGNoYXIqKVJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRTZXROZXR3b3JrTmFtZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX0luXyBjb25zdCBjaGFyICphTmV0d29ya05hbWUKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgb3ROZXR3b3JrTmFtZSBCdWZmZXIgPSB7MH07CisgICAgc3RyY3B5X3MoQnVmZmVyLm04LCBzaXplb2YoQnVmZmVyKSwgYU5ldHdvcmtOYW1lKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTkVUV09SS19OQU1FLCAoY29uc3Qgb3ROZXR3b3JrTmFtZSopJkJ1ZmZlcikpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIF9Jbm91dF8gb3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgX091dF8gb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFDb25maWcgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBCT09MRUFOIGFMb2NhbCA9IEZBTFNFOworICAgIFBhY2tlZEJ1ZmZlcjM8R1VJRCxCT09MRUFOLG90TmV0d29ya0RhdGFJdGVyYXRvcj4gSW5CdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhTG9jYWwsICphSXRlcmF0b3IpOworICAgIEJZVEUgT3V0QnVmZmVyW3NpemVvZih1aW50OF90KSArIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZyldOworCisgICAgb3RFcnJvciBhRXJyb3IgPQorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoCisgICAgICAgICAgICBTZW5kSU9DVEwoCisgICAgICAgICAgICAgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUsCisgICAgICAgICAgICAgICAgSU9DVExfT1RMV0ZfT1RfTkVYVF9PTl9NRVNIX1BSRUZJWCwKKyAgICAgICAgICAgICAgICAmSW5CdWZmZXIsIHNpemVvZihJbkJ1ZmZlciksCisgICAgICAgICAgICAgICAgT3V0QnVmZmVyLCBzaXplb2YoT3V0QnVmZmVyKSkpOworCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGFJdGVyYXRvciwgT3V0QnVmZmVyLCBzaXplb2YodWludDhfdCkpOworICAgICAgICBtZW1jcHkoYUNvbmZpZywgT3V0QnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpLCBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWmVyb01lbW9yeShhQ29uZmlnLCBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYUVycm9yOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlckdldE5leHRPbk1lc2hQcmVmaXgoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX0lub3V0XyBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICBfT3V0XyBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYUNvbmZpZyA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgQk9PTEVBTiBhTG9jYWwgPSBUUlVFOworICAgIFBhY2tlZEJ1ZmZlcjM8R1VJRCxCT09MRUFOLG90TmV0d29ya0RhdGFJdGVyYXRvcj4gSW5CdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhTG9jYWwsICphSXRlcmF0b3IpOworICAgIEJZVEUgT3V0QnVmZmVyW3NpemVvZih1aW50OF90KSArIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZyldOworCisgICAgb3RFcnJvciBhRXJyb3IgPSAKKyAgICAgICAgRHdvcmRUb1RocmVhZEVycm9yKAorICAgICAgICAgICAgU2VuZElPQ1RMKAorICAgICAgICAgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLCAKKyAgICAgICAgICAgICAgICBJT0NUTF9PVExXRl9PVF9ORVhUX09OX01FU0hfUFJFRklYLCAKKyAgICAgICAgICAgICAgICAmSW5CdWZmZXIsIHNpemVvZihJbkJ1ZmZlciksIAorICAgICAgICAgICAgICAgIE91dEJ1ZmZlciwgc2l6ZW9mKE91dEJ1ZmZlcikpKTsKKworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1lbWNweShhSXRlcmF0b3IsIE91dEJ1ZmZlciwgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgbWVtY3B5KGFDb25maWcsIE91dEJ1ZmZlciArIHNpemVvZih1aW50OF90KSwgc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFplcm9NZW1vcnkoYUNvbmZpZywgc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFFcnJvcjsKK30KKworT1RBUEkKK290UGFuSWQgCitPVENBTEwKK290TGlua0dldFBhbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIG90UGFuSWQgUmVzdWx0ID0gezB9OworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QQU5fSUQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290TGlua1NldFBhbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBvdFBhbklkIGFQYW5JZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BBTl9JRCwgYVBhbklkKSk7Cit9CisKK09UQVBJCitib29sIAorT1RDQUxMCitvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgQk9PTEVBTiBSZXN1bHQgPSB7MH07CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9ST0xMX0VOQUJMRUQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQgIT0gRkFMU0U7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBib29sIGFFbmFibGVkCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUk9VVEVSX1JPTExfRU5BQkxFRCwgKEJPT0xFQU4pYUVuYWJsZWQpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZFNldFByZWZlcnJlZFJvdXRlcklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIHVpbnQ4X3QgYVJvdXRlcklkCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUEFOX0lELCBhUm91dGVySWQpKTsKK30KKworT1RBUEkKK290U2hvcnRBZGRyZXNzIAorT1RDQUxMCitvdExpbmtHZXRTaG9ydEFkZHJlc3MoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgb3RTaG9ydEFkZHJlc3MgUmVzdWx0ID0gezB9OworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9TSE9SVF9BRERSRVNTLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitCT09MCitHZXRBZGFwdGVyQWRkcmVzc2VzKAorICAgIFBJUF9BREFQVEVSX0FERFJFU1NFUyAqIHBwSUFBCispCit7CisgICAgUElQX0FEQVBURVJfQUREUkVTU0VTIHBJQUEgPSBOVUxMOworICAgIERXT1JEIGxlbiA9IDA7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBmbGFncyA9IEdBQV9GTEFHX1NLSVBfQU5ZQ0FTVCB8IEdBQV9GTEFHX1NLSVBfTVVMVElDQVNUIHwgR0FBX0ZMQUdfU0tJUF9ETlNfU0VSVkVSOworICAgIGlmIChHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9JTkVUNiwgZmxhZ3MsIE5VTEwsIE5VTEwsICZsZW4pICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcElBQSA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpbWFsbG9jKGxlbik7CisgICAgaWYgKHBJQUEpIHsKKyAgICAgICAgR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVDYsIGZsYWdzLCBOVUxMLCBwSUFBLCAmbGVuKTsKKyAgICAgICAgKnBwSUFBID0gcElBQTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworT1RBUEkKK2NvbnN0IG90TmV0aWZBZGRyZXNzICoKK09UQ0FMTAorb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShBUElfREVGQVVMVCk7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgTG9nRnVuY0V4aXQoQVBJX0RFRkFVTFQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBQdXQgdGhlIGN1cnJlbnQgdGhlYWQgaW4gdGhlIGNvcnJlY3QgY29tcGFydG1lbnQKKyAgICBib29sIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gZmFsc2U7CisgICAgVUxPTkcgT3JpZ2luYWxDb21wYXJ0bWVudElEID0gR2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoKTsKKyAgICBpZiAoT3JpZ2luYWxDb21wYXJ0bWVudElEICE9IGFJbnN0YW5jZS0+Q29tcGFydG1lbnRJRCkKKyAgICB7CisgICAgICAgIERXT1JEIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgICAgICBpZiAoKGR3RXJyb3IgPSBTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChhSW5zdGFuY2UtPkNvbXBhcnRtZW50SUQpKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihBUElfREVGQVVMVCwgIlNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkIGZhaWxlZCwgJSFXSU5FUlJPUiEiLCBkd0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBvdE5ldGlmQWRkcmVzcyAqYWRkcnMgPSBudWxscHRyOworICAgIFVMT05HIEFkZHJDb3VudCA9IDA7CisKKyAgICAvLyBRdWVyeSB0aGUgY3VycmVudCBhZGFwdGVyIGFkZHJlc3NlcyBhbmQgZm9ybWF0IHRoZW0gaW4gdGhlIHByb3BlciBvdXRwdXQgZm9ybWF0CisgICAgUElQX0FEQVBURVJfQUREUkVTU0VTIHBJQUFMaXN0OworICAgIGlmIChHZXRBZGFwdGVyQWRkcmVzc2VzKCZwSUFBTGlzdCkpCisgICAgeworICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBpbnRlcmZhY2VzCisgICAgICAgIGZvciAoYXV0byBwSUFBID0gcElBQUxpc3Q7IHBJQUEgIT0gbnVsbHB0cjsgcElBQSA9IHBJQUEtPk5leHQpIAorICAgICAgICB7CisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcmlnaHQgaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAocElBQS0+SXB2NklmSW5kZXggIT0gYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleCkgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIExvb2sgdGhyb3VnaCBhbGwgdW5pY2FzdCBhZGRyZXNzZXMKKyAgICAgICAgICAgIGZvciAoYXV0byBwVW5pY2FzdEFkZHIgPSBwSUFBLT5GaXJzdFVuaWNhc3RBZGRyZXNzOyAKKyAgICAgICAgICAgICAgICAgcFVuaWNhc3RBZGRyICE9IG51bGxwdHI7IAorICAgICAgICAgICAgICAgICBwVW5pY2FzdEFkZHIgPSBwVW5pY2FzdEFkZHItPk5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQWRkckNvdW50Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGFkZHJlc3NlcywganVzdCBicmVhayBvdXQKKyAgICAgICAgaWYgKEFkZHJDb3VudCA9PSAwKSBnb3RvIGVycm9yOworCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBhZGRyZXNzZXMKKyAgICAgICAgYWRkcnMgPSAob3ROZXRpZkFkZHJlc3MqKW1hbGxvYyhBZGRyQ291bnQgKiBzaXplb2Yob3ROZXRpZkFkZHJlc3MpKTsKKyAgICAgICAgaWYgKGFkZHJzID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoQVBJX0RFRkFVTFQsICJOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvYyBvdE5ldGlmQWRkcmVzcyBhcnJheSIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBaZXJvTWVtb3J5KGFkZHJzLCBBZGRyQ291bnQgKiBzaXplb2Yob3ROZXRpZkFkZHJlc3MpKTsKKworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBuZXh0IHBvaW50ZXJzCisgICAgICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBBZGRyQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcnNbaV0ubU5leHQgPSAoaSArIDEgPT0gQWRkckNvdW50KSA/IG51bGxwdHIgOiAmYWRkcnNbaSArIDFdOworICAgICAgICB9CisKKyAgICAgICAgQWRkckNvdW50ID0gMDsKKworICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBpbnRlcmZhY2VzCisgICAgICAgIGZvciAoYXV0byBwSUFBID0gcElBQUxpc3Q7IHBJQUEgIT0gbnVsbHB0cjsgcElBQSA9IHBJQUEtPk5leHQpIAorICAgICAgICB7CisgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcmlnaHQgaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAocElBQS0+SXB2NklmSW5kZXggIT0gYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleCkgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIExvb2sgdGhyb3VnaCBhbGwgdW5pY2FzdCBhZGRyZXNzZXMKKyAgICAgICAgICAgIGZvciAoYXV0byBwVW5pY2FzdEFkZHIgPSBwSUFBLT5GaXJzdFVuaWNhc3RBZGRyZXNzOyAKKyAgICAgICAgICAgICAgICAgcFVuaWNhc3RBZGRyICE9IG51bGxwdHI7IAorICAgICAgICAgICAgICAgICBwVW5pY2FzdEFkZHIgPSBwVW5pY2FzdEFkZHItPk5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBTT0NLQUREUl9JTjYgcEFkZHIgPSAoTFBTT0NLQUREUl9JTjYpcFVuaWNhc3RBZGRyLT5BZGRyZXNzLmxwU29ja2FkZHI7CisKKyAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycworICAgICAgICAgICAgICAgIG1lbWNweSgmYWRkcnNbQWRkckNvdW50XS5tQWRkcmVzcywgJnBBZGRyLT5zaW42X2FkZHIsIHNpemVvZihwQWRkci0+c2luNl9hZGRyKSk7CisgICAgICAgICAgICAgICAgYWRkcnNbQWRkckNvdW50XS5tUHJlZmVycmVkID0gcFVuaWNhc3RBZGRyLT5QcmVmZXJyZWRMaWZldGltZSAhPSAwOworICAgICAgICAgICAgICAgIGFkZHJzW0FkZHJDb3VudF0ubVZhbGlkID0gcFVuaWNhc3RBZGRyLT5WYWxpZExpZmV0aW1lICE9IDA7CisgICAgICAgICAgICAgICAgYWRkcnNbQWRkckNvdW50XS5tUHJlZml4TGVuZ3RoID0gcFVuaWNhc3RBZGRyLT5PbkxpbmtQcmVmaXhMZW5ndGg7CisKKyAgICAgICAgICAgICAgICBBZGRyQ291bnQrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGVycm9yOgorICAgICAgICBmcmVlKHBJQUFMaXN0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJHZXRBZGFwdGVyQWRkcmVzc2VzIGZhaWxlZCEiKTsKKyAgICB9CisKKyAgICAvLyBSZXZlcnQgdGhlIGNvbXBhcm1lbnQgaWYgbmVjZXNzYXJ5CisgICAgaWYgKFJldmVydENvbXBhcnRtZW50T25FeGl0KQorICAgIHsKKyAgICAgICAgKFZPSUQpU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXRNc2coQVBJX0RFRkFVTFQsICIlZCBhZGRycyIsIEFkZHJDb3VudCk7CisgICAgcmV0dXJuIGFkZHJzOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdElwNkFkZFVuaWNhc3RBZGRyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgLy8gUHV0IHRoZSBjdXJyZW50IHRoZWFkIGluIHRoZSBjb3JyZWN0IGNvbXBhcnRtZW50CisgICAgYm9vbCBSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCA9IGZhbHNlOworICAgIFVMT05HIE9yaWdpbmFsQ29tcGFydG1lbnRJRCA9IEdldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKCk7CisgICAgaWYgKE9yaWdpbmFsQ29tcGFydG1lbnRJRCAhPSBhSW5zdGFuY2UtPkNvbXBhcnRtZW50SUQpCisgICAgeworICAgICAgICBEV09SRCBkd0Vycm9yID0gRVJST1JfU1VDQ0VTUzsKKyAgICAgICAgaWYgKChkd0Vycm9yID0gU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoYUluc3RhbmNlLT5Db21wYXJ0bWVudElEKSkgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoQVBJX0RFRkFVTFQsICJTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCBmYWlsZWQsICUhV0lORVJST1IhIiwgZHdFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgICAgICB9CisgICAgICAgIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBNSUJfVU5JQ0FTVElQQUREUkVTU19ST1cgbmV3Um93OworICAgIEluaXRpYWxpemVVbmljYXN0SXBBZGRyZXNzRW50cnkoJm5ld1Jvdyk7CisKKyAgICBuZXdSb3cuSW50ZXJmYWNlSW5kZXggPSBhSW5zdGFuY2UtPkludGVyZmFjZUluZGV4OworICAgIG5ld1Jvdy5JbnRlcmZhY2VMdWlkID0gYUluc3RhbmNlLT5JbnRlcmZhY2VMdWlkOworICAgIG5ld1Jvdy5BZGRyZXNzLnNpX2ZhbWlseSA9IEFGX0lORVQ2OworICAgIG5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSU42X0FERFIpID09IHNpemVvZihvdElwNkFkZHJlc3MpLCAiV2luZG93cyBhbmQgT3BlblRocmVhZCBJUHY2IEFkZHIgU3RydWN0cyBtdXN0IGJlIHNhbWUgc2l6ZSIpOworCisgICAgbWVtY3B5KCZuZXdSb3cuQWRkcmVzcy5JcHY2LnNpbjZfYWRkciwgJmFBZGRyZXNzLT5tQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisgICAgbmV3Um93Lk9uTGlua1ByZWZpeExlbmd0aCA9IGFBZGRyZXNzLT5tUHJlZml4TGVuZ3RoOworICAgIG5ld1Jvdy5QcmVmZXJyZWRMaWZldGltZSA9IGFBZGRyZXNzLT5tUHJlZmVycmVkID8gMHhmZmZmZmZmZiA6IDA7CisgICAgbmV3Um93LlZhbGlkTGlmZXRpbWUgPSBhQWRkcmVzcy0+bVZhbGlkID8gMHhmZmZmZmZmZiA6IDA7CisgICAgbmV3Um93LlByZWZpeE9yaWdpbiA9IElwUHJlZml4T3JpZ2luT3RoZXI7ICAvLyBEZXJpdmVkIGZyb20gbmV0d29yayBYUEFOSUQKKyAgICBuZXdSb3cuU2tpcEFzU291cmNlID0gRkFMU0U7ICAgICAgICAgICAgICAgIC8vIEFsbG93IGF1dG9tYXRpYyBiaW5kaW5nIHRvIHRoaXMgYWRkcmVzcyAoZGVmYXVsdCkKKworICAgIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJm5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9hZGRyKSkKKyAgICB7CisgICAgICAgIG5ld1Jvdy5TdWZmaXhPcmlnaW4gPSBJcFN1ZmZpeE9yaWdpbkxpbmtMYXllckFkZHJlc3M7ICAgLy8gRGVyaXZlZCBmcm9tIEV4dGVuZGVkIE1BQyBhZGRyZXNzCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ld1Jvdy5TdWZmaXhPcmlnaW4gPSBJcFN1ZmZpeE9yaWdpblJhbmRvbTsgICAgICAgICAgICAgLy8gV2FzIGNyZWF0ZWQgcmFuZG9tbHkKKyAgICB9CisKKyAgICBEV09SRCBkd0Vycm9yID0gQ3JlYXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZuZXdSb3cpOworCisgICAgLy8gUmV2ZXJ0IHRoZSBjb21wYXJtZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIChSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCkKKyAgICB7CisgICAgICAgIChWT0lEKVNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKE9yaWdpbmFsQ29tcGFydG1lbnRJRCk7CisgICAgfQorCisgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiQ3JlYXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5IGZhaWxlZCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdElwNlJlbW92ZVVuaWNhc3RBZGRyZXNzKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIC8vIFB1dCB0aGUgY3VycmVudCB0aGVhZCBpbiB0aGUgY29ycmVjdCBjb21wYXJ0bWVudAorICAgIGJvb2wgUmV2ZXJ0Q29tcGFydG1lbnRPbkV4aXQgPSBmYWxzZTsKKyAgICBVTE9ORyBPcmlnaW5hbENvbXBhcnRtZW50SUQgPSBHZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCgpOworICAgIGlmIChPcmlnaW5hbENvbXBhcnRtZW50SUQgIT0gYUluc3RhbmNlLT5Db21wYXJ0bWVudElEKQorICAgIHsKKyAgICAgICAgRFdPUkQgZHdFcnJvciA9IEVSUk9SX1NVQ0NFU1M7CisgICAgICAgIGlmICgoZHdFcnJvciA9IFNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKGFJbnN0YW5jZS0+Q29tcGFydG1lbnRJRCkpICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQgZmFpbGVkLCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCA9IHRydWU7CisgICAgfQorCisgICAgTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIGRlbGV0ZVJvdzsKKyAgICBJbml0aWFsaXplVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZkZWxldGVSb3cpOworCisgICAgZGVsZXRlUm93LkludGVyZmFjZUluZGV4ID0gYUluc3RhbmNlLT5JbnRlcmZhY2VJbmRleDsKKyAgICBkZWxldGVSb3cuSW50ZXJmYWNlTHVpZCA9IGFJbnN0YW5jZS0+SW50ZXJmYWNlTHVpZDsKKyAgICBkZWxldGVSb3cuQWRkcmVzcy5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKworICAgIG1lbWNweSgmZGVsZXRlUm93LkFkZHJlc3MuSXB2Ni5zaW42X2FkZHIsIGFBZGRyZXNzLCBzaXplb2YoSU42X0FERFIpKTsKKyAgICAKKyAgICBEV09SRCBkd0Vycm9yID0gRGVsZXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZkZWxldGVSb3cpOworCisgICAgLy8gUmV2ZXJ0IHRoZSBjb21wYXJtZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIChSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCkKKyAgICB7CisgICAgICAgIChWT0lEKVNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKE9yaWdpbmFsQ29tcGFydG1lbnRJRCk7CisgICAgfQorCisgICAgaWYgKGR3RXJyb3IgIT0gRVJST1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKEFQSV9ERUZBVUxULCAiRGVsZXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5IGZhaWxlZCAlIVdJTkVSUk9SISIsIGR3RXJyb3IpOworICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitPVEFQSQorb3RFcnJvciAKK09UQ0FMTAorb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjaygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX0luXyBvdFN0YXRlQ2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywgCisgICAgX0luXyB2b2lkICphQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgYm9vbCBzdWNjZXNzID0gCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TZXRDYWxsYmFjaygKKyAgICAgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MsCisgICAgICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFDYWxsYmFjaywgYUNvbnRleHQKKyAgICAgICAgICAgICk7CisgICAgcmV0dXJuIHN1Y2Nlc3MgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfQUxSRUFEWTsKK30KKworT1RBUEkKK3ZvaWQKK09UQ0FMTAorb3RSZW1vdmVTdGF0ZUNoYW5nZUNhbGxiYWNrKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIF9Jbl8gb3RTdGF0ZUNoYW5nZWRDYWxsYmFjayAvKiBhQ2FsbGJhY2sgKi8sCisgICAgX0luXyB2b2lkICphQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybjsKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TdGF0ZUNoYW5nZWRDYWxsYmFja3MsCisgICAgICAgIGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgKG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2spbnVsbHB0ciwgYUNvbnRleHQKKyAgICAgICAgKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3REYXRhc2V0R2V0QWN0aXZlKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBfT3V0XyBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VULCBhRGF0YXNldCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdERhdGFzZXRTZXRBY3RpdmUoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VULCBhRGF0YXNldCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdERhdGFzZXRHZXRQZW5kaW5nKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBfT3V0XyBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BFTkRJTkdfREFUQVNFVCwgYURhdGFzZXQpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3REYXRhc2V0U2V0UGVuZGluZygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUEVORElOR19EQVRBU0VULCBhRGF0YXNldCkpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290RGF0YXNldFNlbmRNZ210QWN0aXZlR2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphVGx2VHlwZXMsIAorICAgIHVpbnQ4X3QgYUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdlR5cGVzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIGlmIChhQWRkcmVzcykgQnVmZmVyU2l6ZSArPSBzaXplb2Yob3RJcDZBZGRyZXNzKTsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCAmYUxlbmd0aCwgc2l6ZW9mKGFMZW5ndGgpKTsKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZih1aW50OF90KSwgYVRsdlR5cGVzLCBhTGVuZ3RoKTsKKyAgICBpZiAoYUFkZHJlc3MpCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGgsIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBhTGVuZ3RoLCBhQWRkcmVzcywgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfQUNUSVZFX0dFVCwgQnVmZmVyLCBCdWZmZXJTaXplLCBudWxscHRyLCAwKSk7CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZVNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0LCAKKyAgICBjb25zdCB1aW50OF90ICphVGx2cywKKyAgICB1aW50OF90IGFMZW5ndGgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFEYXRhc2V0ID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgaWYgKGFUbHZzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aDsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCBhRGF0YXNldCwgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCksICZhTGVuZ3RoLCBzaXplb2YoYUxlbmd0aCkpOworICAgIGlmIChhTGVuZ3RoID4gMCkKKyAgICAgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSArIHNpemVvZih1aW50OF90KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgLSBzaXplb2YodWludDhfdCksIGFUbHZzLCBhTGVuZ3RoKTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX0FDVElWRV9TRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nR2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphVGx2VHlwZXMsIAorICAgIHVpbnQ4X3QgYUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdlR5cGVzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIGlmIChhQWRkcmVzcykgQnVmZmVyU2l6ZSArPSBzaXplb2Yob3RJcDZBZGRyZXNzKTsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCAmYUxlbmd0aCwgc2l6ZW9mKGFMZW5ndGgpKTsKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZih1aW50OF90KSwgYVRsdlR5cGVzLCBhTGVuZ3RoKTsKKyAgICBpZiAoYUFkZHJlc3MpCisgICAgICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGgsIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBhTGVuZ3RoLCBhQWRkcmVzcywgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19HRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQsIAorICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLAorICAgIHVpbnQ4X3QgYUxlbmd0aAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYURhdGFzZXQgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdnMgPT0gbnVsbHB0ciAmJiBhTGVuZ3RoICE9IDApIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgCisgICAgRFdPUkQgQnVmZmVyU2l6ZSA9IHNpemVvZihHVUlEKSArIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIFBCWVRFIEJ1ZmZlciA9IChQQllURSltYWxsb2MoQnVmZmVyU2l6ZSk7CisgICAgaWYgKEJ1ZmZlciA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfTk9fQlVGUzsKKworICAgIG1lbWNweV9zKEJ1ZmZlciwgQnVmZmVyU2l6ZSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCksIGFEYXRhc2V0LCBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSwgJmFMZW5ndGgsIHNpemVvZihhTGVuZ3RoKSk7CisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSAtIHNpemVvZih1aW50OF90KSwgYVRsdnMsIGFMZW5ndGgpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19TRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAordWludDMyX3QgCitPVENBTEwKK290TGlua0dldFBvbGxQZXJpb2QoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDMyX3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUE9MTF9QRVJJT0QsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RMaW5rU2V0UG9sbFBlcmlvZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDMyX3QgYVBvbGxQZXJpb2QKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QT0xMX1BFUklPRCwgYVBvbGxQZXJpb2QpOworfQorCitPVEFQSQordWludDhfdCAKK09UQ0FMTAorb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9XRUlHSFQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdFRocmVhZFNldExvY2FsTGVhZGVyV2VpZ2h0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFXZWlnaHQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MT0NBTF9MRUFERVJfV0VJR0hULCBhV2VpZ2h0KTsKK30KKworT1RBUEkgCit1aW50MzJfdCAKK09UQ0FMTAorb3RUaHJlYWRHZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9QQVJUSVRJT05fSUQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhUGFydGl0aW9uSWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9MT0NBTF9MRUFERVJfUEFSVElUSU9OX0lELCBhUGFydGl0aW9uSWQpOworfQorCitPVEFQSSAKK3VpbnQxNl90IAorT1RDQUxMIAorb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCispCit7CisgICAgdWludDE2X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1VEUF9QT1JULCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwgCitvdFRocmVhZFNldEpvaW5lclVkcFBvcnQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQxNl90IGFKb2luZXJVZHBQb3J0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1VEUF9QT1JULCBhSm9pbmVyVWRwUG9ydCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9BRERfQk9SREVSX1JPVVRFUiwgYUNvbmZpZykpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlclJlbW92ZU9uTWVzaFByZWZpeCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9SRU1PVkVfQk9SREVSX1JPVVRFUiwgYVByZWZpeCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdEJvcmRlclJvdXRlckFkZFJvdXRlKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9BRERfRVhURVJOQUxfUk9VVEUsIGFDb25maWcpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9SRU1PVkVfRVhURVJOQUxfUk9VVEUsIGFQcmVmaXgpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1NFTkRfU0VSVkVSX0RBVEEpKTsKK30KKworT1RBUEkKK3VpbnQzMl90IAorT1RDQUxMCitvdFRocmVhZEdldENvbnRleHRJZFJldXNlRGVsYXkoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDMyX3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ09OVEVYVF9JRF9SRVVTRV9ERUxBWSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0Q29udGV4dElkUmV1c2VEZWxheSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDMyX3QgYURlbGF5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ09OVEVYVF9JRF9SRVVTRV9ERUxBWSwgYURlbGF5KTsKK30KKworT1RBUEkKK3VpbnQzMl90IAorT1RDQUxMCitvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50MzJfdCBSZXN1bHQgPSAwOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2VDb3VudGVyCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfS0VZX1NFUVVFTkNFX0NPVU5URVIsIGFLZXlTZXF1ZW5jZUNvdW50ZXIpOworfQorCitPVEFQSQordWludDMyX3QgCitPVENBTEwKK290VGhyZWFkR2V0S2V5U3dpdGNoR3VhcmRUaW1lKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0tFWV9TV0lUQ0hfR1VBUkRUSU1FLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRLZXlTd2l0Y2hHdWFyZFRpbWUoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQzMl90IGFLZXlTd2l0Y2hHdWFyZFRpbWUKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9LRVlfU1dJVENIX0dVQVJEVElNRSwgYUtleVN3aXRjaEd1YXJkVGltZSk7Cit9CisKK09UQVBJCit1aW50OF90CitPVENBTEwKK290VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX05FVFdPUktfSURfVElNRU9VVCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0TmV0d29ya0lkVGltZW91dCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDhfdCBhVGltZW91dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX05FVFdPUktfSURfVElNRU9VVCwgYVRpbWVvdXQpOworfQorCitPVEFQSQordWludDhfdCAKK09UQ0FMTAorb3RUaHJlYWRHZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xELCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFUaHJlc2hvbGQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQsIGFUaHJlc2hvbGQpOworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQsICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RUaHJlYWRTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQ4X3QgYVRocmVzaG9sZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xELCBhVGhyZXNob2xkKTsKK30KKworT1RBUEkgCit1aW50OF90IAorT1RDQUxMCitvdFRocmVhZEdldFJvdXRlclNlbGVjdGlvbkppdHRlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSLCAmUmVzdWx0KTsKKyAgICByZXR1cm4gUmVzdWx0OworfQorCitPVEFQSSAKK3ZvaWQgCitPVENBTEwKK290VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFSb3V0ZXJKaXR0ZXIKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiwgYVJvdXRlckppdHRlcik7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkUmVsZWFzZVJvdXRlcklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFSb3V0ZXJJZAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JFTEVBU0VfUk9VVEVSX0lELCBhUm91dGVySWQpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RMaW5rQWRkV2hpdGVsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FERF9NQUNfV0hJVEVMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcikpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdExpbmtBZGRXaGl0ZWxpc3RSc3NpKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkciwgCisgICAgaW50OF90IGFSc3NpCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBQYWNrZWRCdWZmZXIzPEdVSUQsb3RFeHRBZGRyZXNzLGludDhfdD4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgKihvdEV4dEFkZHJlc3MqKWFFeHRBZGRyLCBhUnNzaSk7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0FERF9NQUNfV0hJVEVMSVNULCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCkpOworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JFTU9WRV9NQUNfV0hJVEVMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcik7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290TGlua0dldFdoaXRlbGlzdEVudHJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFJbmRleCwgCisgICAgX091dF8gb3RNYWNXaGl0ZWxpc3RFbnRyeSAqYUVudHJ5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOVFJZLCAmYUluZGV4LCBhRW50cnkpKTsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290TGlua0NsZWFyV2hpdGVsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0xFQVJfTUFDX1dISVRFTElTVCk7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdExpbmtTZXRXaGl0ZWxpc3RFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIGJvb2wgYUVuYWJsZWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQsIChCT09MRUFOKWFFbmFibGVkKTsKK30KKworT1RBUEkKK2Jvb2wgCitPVENBTEwKK290TGlua0lzV2hpdGVsaXN0RW5hYmxlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BQ19XSElURUxJU1RfRU5BQkxFRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRCZWNvbWVEZXRhY2hlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0RFVklDRV9ST0xFLCAodWludDhfdClPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRCkpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEJlY29tZUNoaWxkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUsICh1aW50OF90KU9UX0RFVklDRV9ST0xFX0NISUxEKSk7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkQmVjb21lUm91dGVyKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUsICh1aW50OF90KU9UX0RFVklDRV9ST0xFX1JPVVRFUikpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEJlY29tZUxlYWRlcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0RFVklDRV9ST0xFLCAodWludDhfdClPVF9ERVZJQ0VfUk9MRV9MRUFERVIpKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RMaW5rQWRkQmxhY2tsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0FERF9NQUNfQkxBQ0tMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcikpOworfQorCitPVEFQSQordm9pZCAKK09UQ0FMTAorb3RMaW5rUmVtb3ZlQmxhY2tsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCB1aW50OF90ICphRXh0QWRkcgorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JFTU9WRV9NQUNfQkxBQ0tMSVNULCAoY29uc3Qgb3RFeHRBZGRyZXNzKilhRXh0QWRkcik7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290TGlua0dldEJsYWNrbGlzdEVudHJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFJbmRleCwgCisgICAgX091dF8gb3RNYWNCbGFja2xpc3RFbnRyeSAqYUVudHJ5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOVFJZLCAmYUluZGV4LCBhRW50cnkpKTsKK30KKworT1RBUEkKK3ZvaWQgCitPVENBTEwKK290TGlua0NsZWFyQmxhY2tsaXN0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0xFQVJfTUFDX0JMQUNLTElTVCk7Cit9CisKK09UQVBJCit2b2lkIAorT1RDQUxMCitvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIGJvb2wgYUVuYWJsZWQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQsIChCT09MRUFOKWFFbmFibGVkKTsKK30KKworT1RBUEkKK2Jvb2wgCitPVENBTEwKK290TGlua0lzQmxhY2tsaXN0RW5hYmxlZCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBCT09MRUFOIFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX01BQ19CTEFDS0xJU1RfRU5BQkxFRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdCAhPSBGQUxTRTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdExpbmtHZXRBc3NpZ25MaW5rUXVhbGl0eSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYUV4dEFkZHIsIAorICAgIF9PdXRfIHVpbnQ4X3QgKmFMaW5rUXVhbGl0eQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQVNTSUdOX0xJTktfUVVBTElUWSwgKG90RXh0QWRkcmVzcyopYUV4dEFkZHIsIGFMaW5rUXVhbGl0eSkpOworfQorCitPVEFQSSAKK3ZvaWQgCitPVENBTEwKK290TGlua1NldEFzc2lnbkxpbmtRdWFsaXR5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCAKKyAgICB1aW50OF90IGFMaW5rUXVhbGl0eQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybjsKKyAgICBQYWNrZWRCdWZmZXIzPEdVSUQsb3RFeHRBZGRyZXNzLHVpbnQ4X3Q+IEJ1ZmZlcihhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsICoob3RFeHRBZGRyZXNzKilhRXh0QWRkciwgYUxpbmtRdWFsaXR5KTsKKyAgICAodm9pZClTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0FTU0lHTl9MSU5LX1FVQUxJVFksICZCdWZmZXIsIHNpemVvZihCdWZmZXIpLCBudWxscHRyLCAwKTsKK30KKworT1RBUEkgCit2b2lkIAorT1RDQUxMCitvdEluc3RhbmNlUmVzZXQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QTEFURk9STV9SRVNFVCk7Cit9CisKK09UQVBJIAordm9pZCAKK09UQ0FMTAorb3RJbnN0YW5jZUZhY3RvcnlSZXNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0ZBQ1RPUllfUkVTRVQpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldENoaWxkSW5mb0J5SWQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIHVpbnQxNl90IGFDaGlsZElkLCAKKyAgICBfT3V0XyBvdENoaWxkSW5mbyAqYUNoaWxkSW5mbworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ0hJTERfSU5GT19CWV9JRCwgJmFDaGlsZElkLCBhQ2hpbGRJbmZvKSk7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgdWludDhfdCBhQ2hpbGRJbmRleCwgCisgICAgX091dF8gb3RDaGlsZEluZm8gKmFDaGlsZEluZm8KKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0NISUxEX0lORk9fQllfSU5ERVgsICZhQ2hpbGRJbmRleCwgYUNoaWxkSW5mbykpOworfQorCitPVEFQSQorb3RFcnJvcgorT1RDQUxMCitvdFRocmVhZEdldE5leHROZWlnaGJvckluZm8oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX0lub3V0XyBvdE5laWdoYm9ySW5mb0l0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgX091dF8gb3ROZWlnaGJvckluZm8gKmFJbmZvCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFJdGVyYXRvcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhSW5mbyk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgLy8gVE9ETworfQorCitPVEFQSQorb3REZXZpY2VSb2xlIAorT1RDQUxMCitvdFRocmVhZEdldERldmljZVJvbGUoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUsICZSZXN1bHQpOworICAgIHJldHVybiAob3REZXZpY2VSb2xlKVJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRHZXRFaWRDYWNoZUVudHJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50OF90IGFJbmRleCwgCisgICAgX091dF8gb3RFaWRDYWNoZUVudHJ5ICphRW50cnkKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0VJRF9DQUNIRV9FTlRSWSwgJmFJbmRleCwgYUVudHJ5KSk7Cit9CisKK09UQVBJCitvdEVycm9yCitPVENBTEwKK290VGhyZWFkR2V0TGVhZGVyRGF0YSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX091dF8gb3RMZWFkZXJEYXRhICphTGVhZGVyRGF0YQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX0RBVEEsIGFMZWFkZXJEYXRhKSk7Cit9CisKK09UQVBJCit1aW50OF90IAorT1RDQUxMCitvdFRocmVhZEdldExlYWRlclJvdXRlcklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMHhGRjsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1JPVVRFUl9JRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQ4X3QgUmVzdWx0ID0gMHhGRjsKKyAgICBpZiAoYUluc3RhbmNlKSAodm9pZClRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTEVBREVSX1dFSUdIVCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290TmV0RGF0YUdldFZlcnNpb24oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSAweEZGOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0RBVEFfVkVSU0lPTiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQzMl90IAorT1RDQUxMCitvdFRocmVhZEdldFBhcnRpdGlvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIHVpbnQzMl90IFJlc3VsdCA9IDB4RkZGRkZGRkY7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BBUlRJVElPTl9JRCwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQxNl90IAorT1RDQUxMCitvdFRocmVhZEdldFJsb2MxNigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50MTZfdCBSZXN1bHQgPSAweEZGRkY7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JMT0MxNiwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290VGhyZWFkR2V0Um91dGVySWRTZXF1ZW5jZSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICB1aW50OF90IFJlc3VsdCA9IDB4RkY7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9JRF9TRVFVRU5DRSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRHZXRSb3V0ZXJJbmZvKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MTZfdCBhUm91dGVySWQsIAorICAgIF9PdXRfIG90Um91dGVySW5mbyAqYVJvdXRlckluZm8KKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIHJldHVybiBEd29yZFRvVGhyZWFkRXJyb3IoUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1JPVVRFUl9JTkZPLCAmYVJvdXRlcklkLCBhUm91dGVySW5mbykpOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290VGhyZWFkR2V0UGFyZW50SW5mbygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgX091dF8gb3RSb3V0ZXJJbmZvICphUGFyZW50SW5mbworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yob3RSb3V0ZXJJbmZvKSA9PSAyMCwgIlRoZSBzaXplIG9mIG90Um91dGVySW5mbyBzaG91bGQgYmUgMjAgYnl0ZXMiKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9QQVJFTlRfSU5GTywgYVBhcmVudEluZm8pKTsKK30KKworT1RBUEkKK3VpbnQ4X3QgCitPVENBTEwKK290TmV0RGF0YUdldFN0YWJsZVZlcnNpb24oCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UKKyAgICApCit7CisgICAgdWludDhfdCBSZXN1bHQgPSAweEZGOworICAgIGlmIChhSW5zdGFuY2UpICh2b2lkKVF1ZXJ5SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04sICZSZXN1bHQpOworICAgIHJldHVybiBSZXN1bHQ7Cit9CisKK09UQVBJCitjb25zdCBvdE1hY0NvdW50ZXJzKgorT1RDQUxMCitvdExpbmtHZXRDb3VudGVycygKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgb3RNYWNDb3VudGVycyogYUNvdW50ZXJzID0gKG90TWFjQ291bnRlcnMqKW1hbGxvYyhzaXplb2Yob3RNYWNDb3VudGVycykpOworICAgIGlmIChhQ291bnRlcnMpCisgICAgeworICAgICAgICBpZiAoRVJST1JfU1VDQ0VTUyAhPSBRdWVyeUlPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfTUFDX0NPVU5URVJTLCBhQ291bnRlcnMpKQorICAgICAgICB7CisgICAgICAgICAgICBmcmVlKGFDb3VudGVycyk7CisgICAgICAgICAgICBhQ291bnRlcnMgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhQ291bnRlcnM7Cit9CisKK09UQVBJCit2b2lkCitPVENBTEwKK290TWVzc2FnZUdldEJ1ZmZlckluZm8oCisgICAgX0luXyBvdEluc3RhbmNlICosCisgICAgX091dF8gb3RCdWZmZXJJbmZvICphQnVmZmVySW5mbworICAgICkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MKKyAgICBaZXJvTWVtb3J5KGFCdWZmZXJJbmZvLCBzaXplb2Yob3RCdWZmZXJJbmZvKSk7Cit9CisKK09UQVBJCitib29sIAorT1RDQUxMCitvdElzSXA2QWRkcmVzc0VxdWFsKAorICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYSwgCisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICpiCisgICAgKQoreworICAgIHJldHVybiBtZW1jbXAoYS0+bUZpZWxkcy5tOCwgYi0+bUZpZWxkcy5tOCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpID09IDA7Cit9CisKK09UQVBJCitvdEVycm9yIAorT1RDQUxMCitvdElwNkFkZHJlc3NGcm9tU3RyaW5nKAorICAgIGNvbnN0IGNoYXIgKnN0ciwgCisgICAgb3RJcDZBZGRyZXNzICphZGRyZXNzCisgICAgKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihhZGRyZXNzLT5tRmllbGRzLm04KTsKKyAgICB1aW50OF90ICplbmRwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGFkZHJlc3MtPm1GaWVsZHMubTggKyAxNSk7CisgICAgdWludDhfdCAqY29sb25wID0gTlVMTDsKKyAgICB1aW50MTZfdCB2YWwgPSAwOworICAgIHVpbnQ4X3QgY291bnQgPSAwOworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGNoYXIgY2g7CisgICAgdWludDhfdCBkOworCisgICAgbWVtc2V0KGFkZHJlc3MtPm1GaWVsZHMubTgsIDAsIDE2KTsKKworICAgIGRzdC0tOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNoID0gKnN0cisrOworICAgICAgICBkID0gY2ggJiAweGY7CisKKyAgICAgICAgaWYgKCgnYScgPD0gY2ggJiYgY2ggPD0gJ2YnKSB8fCAoJ0EnIDw9IGNoICYmIGNoIDw9ICdGJykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGQgKz0gOTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjaCA9PSAnOicgfHwgY2ggPT0gJ1wwJyB8fCBjaCA9PSAnICcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZHN0ICsgMiA+IGVuZHApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICooZHN0ICsgMSkgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwgPj4gOCk7CisgICAgICAgICAgICAgICAgKihkc3QgKyAyKSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgICAgICAgICAgICAgZHN0ICs9IDI7CisgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgIHZhbCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnOicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCEoY29sb25wID09IG51bGxwdHIgfHwgZmlyc3QpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xvbnAgPSBkc3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXDAnIHx8IGNoID09ICcgJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoISgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigodmFsIDw8IDQpIHwgZCk7CisgICAgICAgIGlmICghKCsrY291bnQgPD0gNCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoY29sb25wICYmIGRzdCA+IGNvbG9ucCkKKyAgICB7CisgICAgICAgICplbmRwLS0gPSAqZHN0LS07CisgICAgfQorCisgICAgd2hpbGUgKGVuZHAgPiBkc3QpCisgICAgeworICAgICAgICAqZW5kcC0tID0gMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVEFQSSAKK3VpbnQ4X3QgCitPVENBTEwKK290SXA2UHJlZml4TWF0Y2goCisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphRmlyc3QsIAorICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYVNlY29uZAorICAgICkKK3sKKyAgICB1aW50OF90IHJ2YWwgPSAwOworICAgIHVpbnQ4X3QgZGlmZjsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihvdElwNkFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBkaWZmID0gYUZpcnN0LT5tRmllbGRzLm04W2ldIF4gYVNlY29uZC0+bUZpZWxkcy5tOFtpXTsKKworICAgICAgICBpZiAoZGlmZiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsICs9IDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKGRpZmYgJiAweDgwKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ2YWwrKzsKKyAgICAgICAgICAgICAgICBkaWZmIDw8PSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCitPVEFQSQorY29uc3QgY2hhciAqCitPVENBTEwKK290VGhyZWFkRXJyb3JUb1N0cmluZygKKyAgICBvdEVycm9yIGFFcnJvcgorICAgICkKK3sKKyAgICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICByZXR2YWwgPSAiTm9uZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9GQUlMRUQ6CisgICAgICAgIHJldHZhbCA9ICJGYWlsZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgcmV0dmFsID0gIkRyb3AiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQnVmcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT19ST1VURToKKyAgICAgICAgcmV0dmFsID0gIk5vUm91dGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQlVTWToKKyAgICAgICAgcmV0dmFsID0gIkJ1c3kiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfUEFSU0U6CisgICAgICAgIHJldHZhbCA9ICJQYXJzZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX0FSR1M6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkQXJncyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9TRUNVUklUWToKKyAgICAgICAgcmV0dmFsID0gIlNlY3VyaXR5IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0FERFJFU1NfUVVFUlk6CisgICAgICAgIHJldHZhbCA9ICJBZGRyZXNzUXVlcnkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQWRkcmVzcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BQk9SVDoKKyAgICAgICAgcmV0dmFsID0gIkFib3J0IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDoKKyAgICAgICAgcmV0dmFsID0gIk5vdEltcGxlbWVudGVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU1RBVEU6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkU3RhdGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgICAgICByZXR2YWwgPSAiTm9BY2siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgcmV0dmFsID0gIkNoYW5uZWxBY2Nlc3NGYWlsdXJlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFVEFDSEVEOgorICAgICAgICByZXR2YWwgPSAiRGV0YWNoZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRkNTOgorICAgICAgICByZXR2YWwgPSAiRmNzRXJyIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEOgorICAgICAgICByZXR2YWwgPSAiTm9GcmFtZVJlY2VpdmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1I6CisgICAgICAgIHJldHZhbCA9ICJVbmtub3duTmVpZ2hib3IiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIkludmFsaWRTb3VyY2VBZGRyZXNzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1dISVRFTElTVF9GSUxURVJFRDoKKyAgICAgICAgcmV0dmFsID0gIldoaXRlbGlzdEZpbHRlcmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJEZXN0aW5hdGlvbkFkZHJlc3NGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgIHJldHZhbCA9ICJOb3RGb3VuZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BTFJFQURZOgorICAgICAgICByZXR2YWwgPSAiQWxyZWFkeSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9CTEFDS0xJU1RfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJCbGFja2xpc3RGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFOgorICAgICAgICByZXR2YWwgPSAiSXB2NkFkZHJlc3NDcmVhdGlvbkZhaWx1cmUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX0NBUEFCTEU6CisgICAgICAgIHJldHZhbCA9ICJOb3RDYXBhYmxlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ6CisgICAgICAgIHJldHZhbCA9ICJSZXNwb25zZVRpbWVvdXQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFVQTElDQVRFRDoKKyAgICAgICAgcmV0dmFsID0gIkR1cGxpY2F0ZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfR0VORVJJQzoKKyAgICAgICAgcmV0dmFsID0gIkdlbmVyaWNFcnJvciI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dmFsID0gIlVua25vd25FcnJvclR5cGUiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwgCitvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFEZXN0aW5hdGlvbiwgCisgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwKKyAgICB1aW50OF90IGFDb3VudAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYURlc3RpbmF0aW9uID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgaWYgKGFUbHZUeXBlcyA9PSBudWxscHRyICYmIGFDb3VudCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSArIGFDb3VudDsKKyAgICBQQllURSBCdWZmZXIgPSAoUEJZVEUpbWFsbG9jKEJ1ZmZlclNpemUpOworICAgIGlmIChCdWZmZXIgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBtZW1jcHlfcyhCdWZmZXIsIEJ1ZmZlclNpemUsICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpLCBhRGVzdGluYXRpb24sIHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdElwNkFkZHJlc3MpLCAmYUNvdW50LCBzaXplb2YoYUNvdW50KSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2Yob3RJcDZBZGRyZXNzKSAtIHNpemVvZih1aW50OF90KSwgYVRsdlR5cGVzLCBhQ291bnQpOworICAgIAorICAgIG90RXJyb3IgcmVzdWx0ID0gCisgICAgICAgIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX1NFTkRfRElBR05PU1RJQ19HRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTCAKK290VGhyZWFkU2VuZERpYWdub3N0aWNSZXNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sIAorICAgIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sCisgICAgdWludDhfdCBhQ291bnQKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFEZXN0aW5hdGlvbiA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIGlmIChhVGx2VHlwZXMgPT0gbnVsbHB0ciAmJiBhQ291bnQgIT0gMCkgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAKKyAgICBEV09SRCBCdWZmZXJTaXplID0gc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCkgKyBhQ291bnQ7CisgICAgUEJZVEUgQnVmZmVyID0gKFBCWVRFKW1hbGxvYyhCdWZmZXJTaXplKTsKKyAgICBpZiAoQnVmZmVyID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9OT19CVUZTOworCisgICAgbWVtY3B5X3MoQnVmZmVyLCBCdWZmZXJTaXplLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSwgYURlc3RpbmF0aW9uLCBzaXplb2Yob3RJcDZBZGRyZXNzKSk7CisgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKG90SXA2QWRkcmVzcyksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2Yob3RJcDZBZGRyZXNzKSwgJmFDb3VudCwgc2l6ZW9mKGFDb3VudCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZihvdElwNkFkZHJlc3MpICsgc2l6ZW9mKHVpbnQ4X3QpLCBCdWZmZXJTaXplIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKG90SXA2QWRkcmVzcykgLSBzaXplb2YodWludDhfdCksIGFUbHZUeXBlcywgYUNvdW50KTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX0RJQUdOT1NUSUNfUkVTRVQsIEJ1ZmZlciwgQnVmZmVyU2l6ZSwgbnVsbHB0ciwgMCkpOworCisgICAgZnJlZShCdWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJTdGFydCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZQorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZXRJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1NUQVJUKSk7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJBZGRKb2luZXIoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsIAorICAgIGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MsIAorICAgIGNvbnN0IGNoYXIgKmFQU0tkLAorICAgIHVpbnQzMl90IGFUaW1lb3V0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0ciB8fCBhUFNLZCA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgc2l6ZV90IGFQU0tkTGVuZ3RoID0gc3RybmxlbihhUFNLZCwgT1BFTlRIUkVBRF9QU0tfTUFYX0xFTkdUSCArIDEpOworICAgIGlmIChhUFNLZExlbmd0aCA+IE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEgpCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKworICAgIHVpbnQ4X3QgYUV4dEFkZHJlc3NWYWxpZCA9IGFFeHRBZGRyZXNzID8gMSA6IDA7CisgICAgCisgICAgY29uc3QgVUxPTkcgQnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKG90RXh0QWRkcmVzcykgKyAoVUxPTkcpYVBTS2RMZW5ndGggKyAxICsgc2l6ZW9mKGFUaW1lb3V0KTsKKyAgICBCWVRFIEJ1ZmZlcltzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSArIE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEggKyAxICsgc2l6ZW9mKGFUaW1lb3V0KV0gPSB7MH07CisgICAgbWVtY3B5X3MoQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpLCAmYUV4dEFkZHJlc3NWYWxpZCwgc2l6ZW9mKGFFeHRBZGRyZXNzVmFsaWQpKTsKKyAgICBpZiAoYUV4dEFkZHJlc3NWYWxpZCkKKyAgICAgICAgbWVtY3B5X3MoQnVmZmVyICsgc2l6ZW9mKEdVSUQpICsgc2l6ZW9mKHVpbnQ4X3QpLCBzaXplb2YoQnVmZmVyKSAtIHNpemVvZihHVUlEKSAtIHNpemVvZih1aW50OF90KSwgYUV4dEFkZHJlc3MsIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSwgc2l6ZW9mKEJ1ZmZlcikgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBzaXplb2Yob3RFeHRBZGRyZXNzKSwgYVBTS2QsIGFQU0tkTGVuZ3RoKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSArIGFQU0tkTGVuZ3RoICsgMSwgc2l6ZW9mKEJ1ZmZlcikgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCkgLSBzaXplb2Yob3RFeHRBZGRyZXNzKSAtIGFQU0tkTGVuZ3RoIC0gMSwgJmFUaW1lb3V0LCBzaXplb2YoYVRpbWVvdXQpKTsKKyAgICAKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQUREX0pPSU5FUiwgQnVmZmVyLCBCdWZmZXJMZW5ndGgsIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdENvbW1pc3Npb25lclJlbW92ZUpvaW5lcigKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcworICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICB1aW50OF90IGFFeHRBZGRyZXNzVmFsaWQgPSBhRXh0QWRkcmVzcyA/IDEgOiAwOworICAgIAorICAgIEJZVEUgQnVmZmVyW3NpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZihvdEV4dEFkZHJlc3MpXSA9IHswfTsKKyAgICBtZW1jcHlfcyhCdWZmZXIsIHNpemVvZihCdWZmZXIpLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSwgc2l6ZW9mKEJ1ZmZlcikgLSBzaXplb2YoR1VJRCksICZhRXh0QWRkcmVzc1ZhbGlkLCBzaXplb2YoYUV4dEFkZHJlc3NWYWxpZCkpOworICAgIGlmIChhRXh0QWRkcmVzc1ZhbGlkKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpIC0gc2l6ZW9mKHVpbnQ4X3QpLCBhRXh0QWRkcmVzcywgc2l6ZW9mKG90RXh0QWRkcmVzcykpOworCisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1JFTU9WRV9KT0lORVIsIEJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMCitvdENvbW1pc3Npb25lclNldFByb3Zpc2lvbmluZ1VybCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIHNpemVfdCBhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoID0gYVByb3Zpc2lvbmluZ1VybCA/IHN0cm5sZW4oYVByb3Zpc2lvbmluZ1VybCwgT1BFTlRIUkVBRF9QUk9WX1VSTF9NQVhfTEVOR1RIICsgMSkgOiAwOworICAgIGlmIChhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoID4gT1BFTlRIUkVBRF9QUk9WX1VSTF9NQVhfTEVOR1RIKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICB9CisgICAgCisgICAgY29uc3QgVUxPTkcgQnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEdVSUQpICsgKFVMT05HKWFQcm92aXNpb25pbmdVcmxMZW5ndGggKyAxOworICAgIEJZVEUgQnVmZmVyW3NpemVvZihHVUlEKSArIE9QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDFdID0gezB9OworICAgIG1lbWNweV9zKEJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksICZhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIHNpemVvZihHVUlEKSk7CisgICAgaWYgKGFQcm92aXNpb25pbmdVcmxMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIHNpemVvZihCdWZmZXIpIC0gc2l6ZW9mKEdVSUQpLCBhUHJvdmlzaW9uaW5nVXJsLCBhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoKTsKKyAgICAKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfUFJPVklTSU9OSU5HX1VSTCwgQnVmZmVyLCBCdWZmZXJMZW5ndGgsIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RDb21taXNzaW9uZXJBbm5vdW5jZUJlZ2luKAorICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssCisgICAgdWludDhfdCBhQ291bnQsCisgICAgdWludDE2X3QgYVBlcmlvZCwKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0ciB8fCBhQWRkcmVzcyA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgUGFja2VkQnVmZmVyNTxHVUlELHVpbnQzMl90LHVpbnQ4X3QsdWludDE2X3Qsb3RJcDZBZGRyZXNzPiBCdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2hhbm5lbE1hc2ssIGFDb3VudCwgYVBlcmlvZCwgKmFBZGRyZXNzKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQU5OT1VOQ0VfQkVHSU4sICZCdWZmZXIsIHNpemVvZihCdWZmZXIpLCBudWxscHRyLCAwKSk7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJTdG9wKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfU1RPUCkpOworfQorCitPVEFQSQorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIAorICAgIHVpbnQ4X3QgYUNvdW50LCAKKyAgICB1aW50MTZfdCBhUGVyaW9kLAorICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIAorICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsCisgICAgX0luXyBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIGFDYWxsYmFjaywgCisgICAgX0luXyB2b2lkICphQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisKKyAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+U2V0Q2FsbGJhY2soCisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFja3MsCisgICAgICAgIGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYUNhbGxiYWNrLCBhQ29udGV4dAorICAgICAgICApOworCisgICAgUGFja2VkQnVmZmVyNjxHVUlELHVpbnQzMl90LHVpbnQ4X3QsdWludDE2X3QsdWludDE2X3Qsb3RJcDZBZGRyZXNzPiBCdWZmZXIoYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBhQ2hhbm5lbE1hc2ssIGFDb3VudCwgYVBlcmlvZCwgYVNjYW5EdXJhdGlvbiwgKmFBZGRyZXNzKTsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNlbmRJT0NUTChhSW5zdGFuY2UtPkFwaUhhbmRsZSwgSU9DVExfT1RMV0ZfT1RfQ09NTUlTU0lPTkVSX0VORVJHWV9TQ0FOLCAmQnVmZmVyLCBzaXplb2YoQnVmZmVyKSwgbnVsbHB0ciwgMCkpOworfQorCitPVEFQSQorb3RFcnJvciAKK09UQ0FMTAorb3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlLCAKKyAgICB1aW50MTZfdCBhUGFuSWQsIAorICAgIHVpbnQzMl90IGFDaGFubmVsTWFzaywKKyAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzLAorICAgIF9Jbl8gb3RDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2sgYUNhbGxiYWNrLCAKKyAgICBfSW5fIHZvaWQgKmFDb250ZXh0CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TZXRDYWxsYmFjaygKKyAgICAgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUtPkNvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFja3MsCisgICAgICAgIGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYUNhbGxiYWNrLCBhQ29udGV4dAorICAgICAgICApOworCisgICAgUGFja2VkQnVmZmVyNDxHVUlELHVpbnQxNl90LHVpbnQzMl90LG90SXA2QWRkcmVzcz4gQnVmZmVyKGFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgYVBhbklkLCBhQ2hhbm5lbE1hc2ssICphQWRkcmVzcyk7CisgICAgcmV0dXJuIER3b3JkVG9UaHJlYWRFcnJvcihTZW5kSU9DVEwoYUluc3RhbmNlLT5BcGlIYW5kbGUsIElPQ1RMX09UTFdGX09UX0NPTU1JU1NJT05FUl9QQU5JRF9RVUVSWSwgJkJ1ZmZlciwgc2l6ZW9mKEJ1ZmZlciksIG51bGxwdHIsIDApKTsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMIAorb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgCisgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIAorICAgIHVpbnQ4X3QgYUxlbmd0aAorKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBpZiAoYVRsdnMgPT0gbnVsbHB0ciAmJiBhTGVuZ3RoICE9IDApIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgCisgICAgRFdPUkQgQnVmZmVyU2l6ZSA9IHNpemVvZihHVUlEKSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGg7CisgICAgUEJZVEUgQnVmZmVyID0gKFBCWVRFKW1hbGxvYyhCdWZmZXJTaXplKTsKKyAgICBpZiAoQnVmZmVyID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9OT19CVUZTOworCisgICAgbWVtY3B5X3MoQnVmZmVyLCBCdWZmZXJTaXplLCAmYUluc3RhbmNlLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSwgJmFMZW5ndGgsIHNpemVvZihhTGVuZ3RoKSk7CisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2YodWludDhfdCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2YodWludDhfdCksIGFUbHZzLCBhTGVuZ3RoKTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX0dFVCwgQnVmZmVyLCBCdWZmZXJTaXplLCBudWxscHRyLCAwKSk7CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1RBUEkgCitvdEVycm9yIAorT1RDQUxMIAorb3RDb21taXNzaW9uZXJTZW5kTWdtdFNldCgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBjb25zdCBvdENvbW1pc3Npb25pbmdEYXRhc2V0ICphRGF0YXNldCwKKyAgICBjb25zdCB1aW50OF90ICphVGx2cywKKyAgICB1aW50OF90IGFMZW5ndGgKKyAgICApCit7CisgICAgaWYgKGFJbnN0YW5jZSA9PSBudWxscHRyIHx8IGFEYXRhc2V0ID09IG51bGxwdHIpIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgaWYgKGFUbHZzID09IG51bGxwdHIgJiYgYUxlbmd0aCAhPSAwKSByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIAorICAgIERXT1JEIEJ1ZmZlclNpemUgPSBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoOworICAgIFBCWVRFIEJ1ZmZlciA9IChQQllURSltYWxsb2MoQnVmZmVyU2l6ZSk7CisgICAgaWYgKEJ1ZmZlciA9PSBudWxscHRyKSByZXR1cm4gT1RfRVJST1JfTk9fQlVGUzsKKworICAgIG1lbWNweV9zKEJ1ZmZlciwgQnVmZmVyU2l6ZSwgJmFJbnN0YW5jZS0+SW50ZXJmYWNlR3VpZCwgc2l6ZW9mKEdVSUQpKTsKKyAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCksIGFEYXRhc2V0LCBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkpOworICAgIG1lbWNweV9zKEJ1ZmZlciArIHNpemVvZihHVUlEKSArIHNpemVvZihvdENvbW1pc3Npb25pbmdEYXRhc2V0KSwgQnVmZmVyU2l6ZSAtIHNpemVvZihHVUlEKSAtIHNpemVvZihvdENvbW1pc3Npb25pbmdEYXRhc2V0KSwgJmFMZW5ndGgsIHNpemVvZihhTGVuZ3RoKSk7CisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgICAgICBtZW1jcHlfcyhCdWZmZXIgKyBzaXplb2YoR1VJRCkgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCksIEJ1ZmZlclNpemUgLSBzaXplb2YoR1VJRCkgLSBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgLSBzaXplb2YodWludDhfdCksIGFUbHZzLCBhTGVuZ3RoKTsKKyAgICAKKyAgICBvdEVycm9yIHJlc3VsdCA9IAorICAgICAgICBEd29yZFRvVGhyZWFkRXJyb3IoU2VuZElPQ1RMKGFJbnN0YW5jZS0+QXBpSGFuZGxlLCBJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX1NFVCwgQnVmZmVyLCBCdWZmZXJTaXplLCBudWxscHRyLCAwKSk7CisKKyAgICBmcmVlKEJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1RBUEkKK3VpbnQxNl90CitPVENBTEwKK290Q29tbWlzc2lvbmVyR2V0U2Vzc2lvbklkKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIDA7CisgICAgLy8gVE9ETworICAgIHJldHVybiAwOworfQorCitPVEFQSSAKK290RXJyb3IgCitPVENBTEwKK290Sm9pbmVyU3RhcnQoCisgICAgX0luXyBvdEluc3RhbmNlICphSW5zdGFuY2UsCisgICAgX051bGxfdGVybWluYXRlZF8gY29uc3QgY2hhciAqYVBTS2QsCisgICAgX051bGxfdGVybWluYXRlZF8gY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCwKKyAgICBfTnVsbF90ZXJtaW5hdGVkXyBjb25zdCBjaGFyICphVmVuZG9yTmFtZSwKKyAgICBfTnVsbF90ZXJtaW5hdGVkXyBjb25zdCBjaGFyICphVmVuZG9yTW9kZWwsCisgICAgX051bGxfdGVybWluYXRlZF8gY29uc3QgY2hhciAqYVZlbmRvclN3VmVyc2lvbiwKKyAgICBfTnVsbF90ZXJtaW5hdGVkXyBjb25zdCBjaGFyICphVmVuZG9yRGF0YSwKKyAgICBfSW5fIG90Sm9pbmVyQ2FsbGJhY2sgYUNhbGxiYWNrLAorICAgIF9Jbl8gdm9pZCAqYUNhbGxiYWNrQ29udGV4dAorICAgICkKK3sKKyAgICBpZiAoYUluc3RhbmNlID09IG51bGxwdHIgfHwgYVBTS2QgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKworICAgIG90Q29tbWlzc2lvbkNvbmZpZyBjb25maWcgPSB7MH07CisKKyAgICBzaXplX3QgYVBTS2RMZW5ndGggPSBzdHJsZW4oYVBTS2QpOworICAgIHNpemVfdCBhUHJvdmlzaW9uaW5nVXJsTGVuZ3RoID0gYVByb3Zpc2lvbmluZ1VybCA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhUHJvdmlzaW9uaW5nVXJsKTsKKyAgICBzaXplX3QgYVZlbmRvck5hbWVMZW5ndGggPSBhVmVuZG9yTmFtZSA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yTmFtZSk7CisgICAgc2l6ZV90IGFWZW5kb3JNb2RlbExlbmd0aCA9IGFWZW5kb3JNb2RlbCA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yTW9kZWwpOworICAgIHNpemVfdCBhVmVuZG9yU3dWZXJzaW9uTGVuZ3RoID0gYVZlbmRvclN3VmVyc2lvbiA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yU3dWZXJzaW9uKTsKKyAgICBzaXplX3QgYVZlbmRvckRhdGFMZW5ndGggPSBhVmVuZG9yRGF0YSA9PSBudWxscHRyID8gMCA6IHN0cmxlbihhVmVuZG9yRGF0YSk7CisKKyAgICBpZiAoYVBTS2RMZW5ndGggPiBPUEVOVEhSRUFEX1BTS19NQVhfTEVOR1RIIHx8CisgICAgICAgIGFQcm92aXNpb25pbmdVcmxMZW5ndGggPiBPUEVOVEhSRUFEX1BST1ZfVVJMX01BWF9MRU5HVEggfHwKKyAgICAgICAgYVZlbmRvck5hbWVMZW5ndGggPiBPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggfHwKKyAgICAgICAgYVZlbmRvck1vZGVsTGVuZ3RoID4gT1BFTlRIUkVBRF9WRU5ET1JfTU9ERUxfTUFYX0xFTkdUSCB8fAorICAgICAgICBhVmVuZG9yU3dWZXJzaW9uTGVuZ3RoID4gT1BFTlRIUkVBRF9WRU5ET1JfU1dfVkVSU0lPTl9NQVhfTEVOR1RIIHx8CisgICAgICAgIGFWZW5kb3JEYXRhTGVuZ3RoID4gT1BFTlRIUkVBRF9WRU5ET1JfREFUQV9NQVhfTEVOR1RIKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICB9CisKKyAgICBtZW1jcHlfcyhjb25maWcuUFNLZCwgc2l6ZW9mKGNvbmZpZy5QU0tkKSwgYVBTS2QsIGFQU0tkTGVuZ3RoKTsKKyAgICBtZW1jcHlfcyhjb25maWcuUHJvdmlzaW9uaW5nVXJsLCBzaXplb2YoY29uZmlnLlByb3Zpc2lvbmluZ1VybCksIGFQcm92aXNpb25pbmdVcmwsIGFQcm92aXNpb25pbmdVcmxMZW5ndGgpOworICAgIG1lbWNweV9zKGNvbmZpZy5WZW5kb3JOYW1lLCBzaXplb2YoY29uZmlnLlZlbmRvck5hbWUpLCBhVmVuZG9yTmFtZSwgYVZlbmRvck5hbWVMZW5ndGgpOworICAgIG1lbWNweV9zKGNvbmZpZy5WZW5kb3JNb2RlbCwgc2l6ZW9mKGNvbmZpZy5WZW5kb3JNb2RlbCksIGFWZW5kb3JNb2RlbCwgYVZlbmRvck1vZGVsTGVuZ3RoKTsKKyAgICBtZW1jcHlfcyhjb25maWcuVmVuZG9yU3dWZXJzaW9uLCBzaXplb2YoY29uZmlnLlZlbmRvclN3VmVyc2lvbiksIGFWZW5kb3JTd1ZlcnNpb24sIGFWZW5kb3JTd1ZlcnNpb25MZW5ndGgpOworICAgIG1lbWNweV9zKGNvbmZpZy5WZW5kb3JEYXRhLCBzaXplb2YoY29uZmlnLlZlbmRvckRhdGEpLCBhVmVuZG9yRGF0YSwgYVZlbmRvckRhdGFMZW5ndGgpOworCisgICAgYUluc3RhbmNlLT5BcGlIYW5kbGUtPlNldENhbGxiYWNrKAorICAgICAgICBhSW5zdGFuY2UtPkFwaUhhbmRsZS0+Sm9pbmVyQ2FsbGJhY2tzLAorICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dAorICAgICAgICApOworCisgICAgYXV0byByZXQgPSBEd29yZFRvVGhyZWFkRXJyb3IoU2V0SU9DVEwoYUluc3RhbmNlLCBJT0NUTF9PVExXRl9PVF9KT0lORVJfU1RBUlQsIChjb25zdCBvdENvbW1pc3Npb25Db25maWcqKSZjb25maWcpKTsKKworICAgIGlmIChyZXQgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5TZXRDYWxsYmFjaygKKyAgICAgICAgICAgIGFJbnN0YW5jZS0+QXBpSGFuZGxlLT5Kb2luZXJDYWxsYmFja3MsCisgICAgICAgICAgICBhSW5zdGFuY2UtPkludGVyZmFjZUd1aWQsIChvdEpvaW5lckNhbGxiYWNrKW51bGxwdHIsIChQVk9JRCludWxscHRyCisgICAgICAgICAgICApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK09UQVBJIAorb3RFcnJvciAKK09UQ0FMTAorb3RKb2luZXJTdG9wKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1NUT1ApKTsKK30KKworT1RBUEkKK2ludDhfdAorT1RDQUxMCitvdFRocmVhZEdldFBhcmVudFByaW9yaXR5KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqYUluc3RhbmNlCispCit7CisgICAgaW50OF90IFJlc3VsdCA9IDA7CisgICAgaWYgKGFJbnN0YW5jZSkgKHZvaWQpUXVlcnlJT0NUTChhSW5zdGFuY2UsIElPQ1RMX09UTFdGX09UX1BBUkVOVF9QUklPUklUWSwgJlJlc3VsdCk7CisgICAgcmV0dXJuIFJlc3VsdDsKK30KKworT1RBUEkKK290RXJyb3IKK09UQ0FMTAorb3RUaHJlYWRTZXRQYXJlbnRQcmlvcml0eSgKKyAgICBfSW5fIG90SW5zdGFuY2UgKmFJbnN0YW5jZSwKKyAgICBpbnQ4X3QgYVBhcmVudFByaW9yaXR5CisgICAgKQoreworICAgIGlmIChhSW5zdGFuY2UgPT0gbnVsbHB0cikgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICByZXR1cm4gRHdvcmRUb1RocmVhZEVycm9yKFNldElPQ1RMKGFJbnN0YW5jZSwgSU9DVExfT1RMV0ZfT1RfUEFSRU5UX1BSSU9SSVRZLCBhUGFyZW50UHJpb3JpdHkpKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEFwaS9wcmVjb21wLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RBcGkvcHJlY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDhlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RBcGkvcHJlY29tcC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIHN0ZGFmeC5oIDogaW5jbHVkZSBmaWxlIGZvciBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBmaWxlcywKKy8vIG9yIHByb2plY3Qgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHksIGJ1dAorLy8gYXJlIGNoYW5nZWQgaW5mcmVxdWVudGx5CisvLworCisjcHJhZ21hIG9uY2UKKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6MjgzMDEpICAvLyBObyBhbm5vdGF0aW9ucyBmb3IgZmlyc3QgZGVjbGFyYXRpb24gb2YgKgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbm50Lmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJpcGRlZi5oPgorI2luY2x1ZGUgPElQSGxwQXBpLmg+CisjaW5jbHVkZSA8bXN0Y3BpcC5oPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8dHVwbGU+CisKKy8vIERlZmluZSB0byBleHBvcnQgbmVjZXNzYXJ5IGZ1bmN0aW9ucworI2RlZmluZSBPVERMTAorI2RlZmluZSBPVEFQSSBFWFRFUk5fQyBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGF0YXNldF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3RocmVhZF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvam9pbmVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaD4KKworI2luY2x1ZGUgPHdpbmlvY3RsLmg+CisjaW5jbHVkZSA8b3RMd2ZJb2N0bC5oPgorI2luY2x1ZGUgPHJ0bHJlZmNvdW50Lmg+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RDbGkvbWFpbi5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RDbGkvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3MzM3NwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdENsaS9tYWluLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NsaS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorCitib29sIHNraXBOZXh0TGluZSA9IGZhbHNlOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90Q2xpVWFydEluaXQoTlVMTCk7CisKKyAgICBjaGFyIGNtZFsxMDI0XSA9ICJcbiI7CisgICAgb3RQbGF0VWFydFJlY2VpdmVkKCh1aW50OF90KiljbWQsIDEpOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNtZFswXSA9IDA7CisgICAgICAgIGlmIChOVUxMID09IGZnZXRzKGNtZCwgc2l6ZW9mKGNtZCksIHN0ZGluKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNpemVfdCBjbWRMZW4gPSBzdHJsZW4oY21kKTsKKyAgICAgICAgaWYgKGNtZExlbiA+PSBzaXplb2YoY21kKSkgY21kTGVuID0gc2l6ZW9mKGNtZCk7CisKKyAgICAgICAgaWYgKHN0cm5jbXAoY21kLCAiZXhpdCIsIDQpID09IDApIAorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2tpcE5leHRMaW5lID0gdHJ1ZTsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKCh1aW50OF90KiljbWQsICh1aW50MTZfdCljbWRMZW4pOworICAgIH0KKworICAgIHJldHVybiBOT19FUlJPUjsKK30KKworRVhURVJOX0Mgb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK0VYVEVSTl9DIG90RXJyb3Igb3RQbGF0VWFydFNlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmICghc2tpcE5leHRMaW5lKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGFCdWZMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGZwdXRjKGFCdWZbaV0sIHN0ZG91dCk7CisgICAgfQorCisgICAgaWYgKGFCdWZbYUJ1Zkxlbmd0aCAtIDFdID09ICdcbicpCisgICAgICAgIHNraXBOZXh0TGluZSA9IGZhbHNlOworCisgICAgb3RQbGF0VWFydFNlbmREb25lKCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0VYVEVSTl9DIHZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCkKK3sKKworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2FkZHJlc3MuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9hZGRyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhYmFhMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9hZGRyZXNzLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAiYWRkcmVzcy50bWgiCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK0JPT0xFQU4gCitvdEx3Zk9uQWRkcmVzc0FkZGVkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCAKKyAgICBfSW5fIGNvbnN0IG90TmV0aWZBZGRyZXNzKiBBZGRyLAorICAgIF9Jbl8gQk9PTEVBTiBVcGRhdGVXaW5kb3dzCisgICAgKQoreworICAgIGlmIChwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCA+PSBPVF9NQVhfQUREUkVTU0VTKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsaW5nIHRvIGFkZCBuZXcgYWRkcmVzcyBhcyB3ZSBoYXZlIHJlYWNoZWQgb3VyIG1heCEiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBhZGRpbmcgYWRkcmVzczogJSFJUFY2QUREUiEgKCV1LWJpdCBwcmVmaXgpIiwgCisgICAgICAgICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCAKKyAgICAgICAgKFBJTjZfQUREUikmQWRkci0+bUFkZHJlc3MsCisgICAgICAgIEFkZHItPm1QcmVmaXhMZW5ndGgKKyAgICAgICAgKTsKKworICAgIC8vIFVwZGF0ZSBsb2NhbCBjYWNoZQorICAgIG1lbWNweShwRmlsdGVyLT5vdENhY2hlZEFkZHIgKyBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCwgQWRkciwgc2l6ZW9mKElONl9BRERSKSk7CisgICAgcEZpbHRlci0+b3RDYWNoZWRBZGRyQ291bnQrKzsKKworICAgIC8vIElmIHRoaXMgaXMgbGluayBsb2NhbCwgY2FjaGUgaXQgYXMgb3VyIGxpbmsgbG9jYWwgYWRkcmVzcworICAgIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoKFBJTjZfQUREUikmQWRkci0+bUFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCZwRmlsdGVyLT5vdExpbmtMb2NhbEFkZHIsIEFkZHIsIHNpemVvZihJTjZfQUREUikpOworICAgIH0KKyAgICAgICAgCisgICAgLy8gVXBkYXRlIFdpbmRvd3MgaWYgbmVjZXNzYXJ5CisgICAgaWYgKFVwZGF0ZVdpbmRvd3MpCisgICAgeworICAgICAgICBOVFNUQVRVUyBzdGF0dXM7CisgICAgICAgIE1JQl9VTklDQVNUSVBBRERSRVNTX1JPVyBuZXdSb3c7CisgICAgICAgIE1JQl9JUEZPUldBUkRfUk9XMiBuZXdSb3V0ZVJvdzsKKyAgICAgICAgQ09NUEFSVE1FTlRfSUQgT3JpZ2luYWxDb21wYXJ0bWVudElEOworICAgICAgICBJbml0aWFsaXplVW5pY2FzdElwQWRkcmVzc0VudHJ5KCZuZXdSb3cpOworICAgICAgICBJbml0aWFsaXplSXBGb3J3YXJkRW50cnkoJm5ld1JvdXRlUm93KTsgCisKKyAgICAgICAgbmV3Um93LkludGVyZmFjZUluZGV4ID0gcEZpbHRlci0+SW50ZXJmYWNlSW5kZXg7CisgICAgICAgIG5ld1Jvdy5JbnRlcmZhY2VMdWlkID0gcEZpbHRlci0+SW50ZXJmYWNlTHVpZDsKKyAgICAgICAgbmV3Um93LkFkZHJlc3Muc2lfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIG5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgCisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKElONl9BRERSKSA9PSBzaXplb2Yob3RJcDZBZGRyZXNzKSwgIldpbmRvd3MgYW5kIE9wZW5UaHJlYWQgSVB2NiBBZGRyIFN0cnVjdHMgbXVzdCBiZSBzYW1lIHNpemUiKTsKKworICAgICAgICBtZW1jcHkoJm5ld1Jvdy5BZGRyZXNzLklwdjYuc2luNl9hZGRyLCAmQWRkci0+bUFkZHJlc3MsIHNpemVvZihJTjZfQUREUikpOworICAgICAgICBuZXdSb3cuT25MaW5rUHJlZml4TGVuZ3RoID0gQWRkci0+bVByZWZpeExlbmd0aDsKKyAgICAgICAgbmV3Um93LlByZWZlcnJlZExpZmV0aW1lID0gQWRkci0+bVByZWZlcnJlZCA/IDB4ZmZmZmZmZmYgOiAwOworICAgICAgICBuZXdSb3cuVmFsaWRMaWZldGltZSA9IEFkZHItPm1WYWxpZCA/IDB4ZmZmZmZmZmYgOiAwOworICAgICAgICBuZXdSb3cuUHJlZml4T3JpZ2luID0gSXBQcmVmaXhPcmlnaW5PdGhlcjsgIC8vIERlcml2ZWQgZnJvbSBuZXR3b3JrIFhQQU5JRAorICAgICAgICBuZXdSb3cuU2tpcEFzU291cmNlID0gRkFMU0U7ICAgICAgICAgICAgICAgIC8vIEFsbG93IGF1dG9tYXRpYyBiaW5kaW5nIHRvIHRoaXMgYWRkcmVzcyAoZGVmYXVsdCkKKworICAgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZuZXdSb3cuQWRkcmVzcy5JcHY2LnNpbjZfYWRkcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld1Jvdy5TdWZmaXhPcmlnaW4gPSBJcFN1ZmZpeE9yaWdpbkxpbmtMYXllckFkZHJlc3M7ICAgLy8gRGVyaXZlZCBmcm9tIEV4dGVuZGVkIE1BQyBhZGRyZXNzCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBuZXdSb3cuU3VmZml4T3JpZ2luID0gSXBTdWZmaXhPcmlnaW5SYW5kb207ICAgICAgICAgICAgIC8vIFdhcyBjcmVhdGVkIHJhbmRvbWx5CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSByaWdodCBjb21wYXJ0bWVudAorICAgICAgICAoVk9JRClvdEx3ZlNldENvbXBhcnRtZW50KHBGaWx0ZXIsICZPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgICAgIHN0YXR1cyA9IENyZWF0ZVVuaWNhc3RJcEFkZHJlc3NFbnRyeSgmbmV3Um93KTsKKyAgICAgICAgLy9OVF9BU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiQ3JlYXRlVW5pY2FzdElwQWRkcmVzc0VudHJ5IGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgbmV3Um91dGVSb3cuSW50ZXJmYWNlSW5kZXggPSBwRmlsdGVyLT5JbnRlcmZhY2VJbmRleDsKKyAgICAgICAgbmV3Um91dGVSb3cuSW50ZXJmYWNlTHVpZCA9IHBGaWx0ZXItPkludGVyZmFjZUx1aWQ7CisgICAgICAgIG5ld1JvdXRlUm93LkRlc3RpbmF0aW9uUHJlZml4LlByZWZpeC5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgbmV3Um91dGVSb3cuRGVzdGluYXRpb25QcmVmaXguUHJlZml4TGVuZ3RoID0gMDsKKworICAgICAgICBzdGF0dXMgPSBDcmVhdGVJcEZvcndhcmRFbnRyeTIoJm5ld1JvdXRlUm93KTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykgJiYgc3RhdHVzICE9IFNUQVRVU19EVVBMSUNBVEVfT0JKRUNUSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJDcmVhdGVJcEZvcndhcmRFbnRyeTIgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXZlcnQgYmFjayB0byBvcmlnaW5hbCBjb21wYXJ0bWVudAorICAgICAgICBvdEx3ZlJldmVydENvbXBhcnRtZW50KE9yaWdpbmFsQ29tcGFydG1lbnRJRCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3Zk9uQWRkcmVzc1JlbW92ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsIAorICAgIF9Jbl8gVUxPTkcgQ2FjaGVkSW5kZXgsCisgICAgX0luXyBCT09MRUFOIFVwZGF0ZVdpbmRvd3MKKyAgICApCit7CisgICAgLy8gQ2FjaGUgYWRkcmVzcyBiZWZvcmUgd2UgZGVsZXRlIGxvY2FsIGNhY2hlCisgICAgSU42X0FERFIgQWRkciA9IHBGaWx0ZXItPm90Q2FjaGVkQWRkcltDYWNoZWRJbmRleF07CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgcmVtb3ZpbmcgYWRkcmVzczogJSFJUFY2QUREUiEiLCAmcEZpbHRlci0+SW50ZXJmYWNlR3VpZCwgJkFkZHIpOworICAgIAorICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCAhPSAwKTsKKyAgICBOVF9BU1NFUlQoQ2FjaGVkSW5kZXggPCBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCk7CisKKyAgICAvLyBSZW1vdmUgdGhlIGNhY2hlZCBlbnRyeQorICAgIGlmIChDYWNoZWRJbmRleCArIDEgIT0gcEZpbHRlci0+b3RDYWNoZWRBZGRyQ291bnQpCisgICAgICAgIG1lbW1vdmUocEZpbHRlci0+b3RDYWNoZWRBZGRyICsgQ2FjaGVkSW5kZXgsIAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q2FjaGVkQWRkciArIENhY2hlZEluZGV4ICsgMSwgCisgICAgICAgICAgICAgICAgKHBGaWx0ZXItPm90Q2FjaGVkQWRkckNvdW50IC0gQ2FjaGVkSW5kZXggLSAxKSAqIHNpemVvZihJTjZfQUREUikKKyAgICAgICAgICAgICAgICApOworICAgIHBGaWx0ZXItPm90Q2FjaGVkQWRkckNvdW50LS07CisKKyAgICAvLyBVcGRhdGUgV2luZG93cyBpZiBuZWNlc3NhcnkKKyAgICBpZiAoVXBkYXRlV2luZG93cykKKyAgICB7CisgICAgICAgIE1JQl9VTklDQVNUSVBBRERSRVNTX1JPVyBkZWxldGVSb3c7CisgICAgICAgIENPTVBBUlRNRU5UX0lEIE9yaWdpbmFsQ29tcGFydG1lbnRJRDsKKyAgICAgICAgSW5pdGlhbGl6ZVVuaWNhc3RJcEFkZHJlc3NFbnRyeSgmZGVsZXRlUm93KTsKKworICAgICAgICBkZWxldGVSb3cuSW50ZXJmYWNlSW5kZXggPSBwRmlsdGVyLT5JbnRlcmZhY2VJbmRleDsKKyAgICAgICAgZGVsZXRlUm93LkludGVyZmFjZUx1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VMdWlkOworICAgICAgICBkZWxldGVSb3cuQWRkcmVzcy5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKworICAgICAgICBkZWxldGVSb3cuQWRkcmVzcy5JcHY2LnNpbjZfYWRkciA9IEFkZHI7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgcmlnaHQgY29tcGFydG1lbnQKKyAgICAgICAgKFZPSUQpb3RMd2ZTZXRDb21wYXJ0bWVudChwRmlsdGVyLCAmT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKyAgICAKKyAgICAgICAgLy8gQmVzdCBlZmZvcnQgcmVtb3ZlIGFkZHJlc3MgZnJvbSBUQ1BJUAorICAgICAgICAoVk9JRClEZWxldGVVbmljYXN0SXBBZGRyZXNzRW50cnkoJmRlbGV0ZVJvdyk7CisKKyAgICAgICAgLy8gUmV2ZXJ0IGJhY2sgdG8gb3JpZ2luYWwgY29tcGFydG1lbnQKKyAgICAgICAgb3RMd2ZSZXZlcnRDb21wYXJ0bWVudChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworICAgIH0KK30KKworaW50IAorb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCAKKyAgICBfSW5fIFBJTjZfQUREUiBhZGRyCisgICAgKQoreworICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudDsgaSsrKQorICAgICAgICBpZiAobWVtY21wKHBGaWx0ZXItPm90Q2FjaGVkQWRkciArIGksIGFkZHIsIHNpemVvZihJTjZfQUREUikpID09IDApCisgICAgICAgICAgICByZXR1cm4gKGludClpOworICAgIHJldHVybiAtMTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMgCitvdEx3ZkluaXRpYWxpemVBZGRyZXNzZXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIAorICAgIFBNSUJfVU5JQ0FTVElQQUREUkVTU19UQUJMRSBwTWliVW5pY2FzdEFkZHJlc3NUYWJsZSA9IE5VTEw7CisgICAgQ09NUEFSVE1FTlRfSUQgICAgICAgICAgICAgIE9yaWdpbmFsQ29tcGFydG1lbnRJRDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgcEZpbHRlci0+b3RDYWNoZWRBZGRyQ291bnQgPSAwOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgcmlnaHQgY29tcGFydG1lbnQKKyAgICAoVk9JRClvdEx3ZlNldENvbXBhcnRtZW50KHBGaWx0ZXIsICZPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgLy8gUXVlcnkgdGhlIHRhYmxlIGZvciB0aGUgY3VycmVudCBjb21wYXJ0bWVudAorICAgIHN0YXR1cyA9IEdldFVuaWNhc3RJcEFkZHJlc3NUYWJsZShBRl9JTkVUNiwgJnBNaWJVbmljYXN0QWRkcmVzc1RhYmxlKTsKKworICAgIC8vIFJldmVydCB0aGUgY29tcGFydG1lbnQsIG5vdyB0aGF0IHdlIGhhdmUgdGhlIHRhYmxlCisgICAgb3RMd2ZSZXZlcnRDb21wYXJ0bWVudChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkdldFVuaWNhc3RJcEFkZHJlc3NUYWJsZSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIAorICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYWRkcmVzc2VzIGFuZCBkZWxldGUgKGJlc3QgZWZmb3J0KSB0aGUgb25lcyBmb3Igb3VyIGludGVyZmFjZQorICAgIGZvciAoVUxPTkcgSW5kZXggPSAwOyBJbmRleCA8IHBNaWJVbmljYXN0QWRkcmVzc1RhYmxlLT5OdW1FbnRyaWVzOyBJbmRleCsrKQorICAgIHsKKyAgICAgICAgTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XKiByb3cgPSAmcE1pYlVuaWNhc3RBZGRyZXNzVGFibGUtPlRhYmxlW0luZGV4XTsKKworICAgICAgICBpZiAoKDAgPT0gbWVtY21wKCZyb3ctPkludGVyZmFjZUx1aWQsICZwRmlsdGVyLT5JbnRlcmZhY2VMdWlkLCBzaXplb2YoTkVUX0xVSUQpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJDYWNoaW5nIGluaXRpYWwgYWRkcmVzczogJSFJUFY2QUREUiEiLCAmcm93LT5BZGRyZXNzLklwdjYuc2luNl9hZGRyKTsKKyAgICAgICAgICAgIG1lbWNweShwRmlsdGVyLT5vdENhY2hlZEFkZHIgKyBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCwgJnJvdy0+QWRkcmVzcy5JcHY2LnNpbjZfYWRkciwgc2l6ZW9mKElONl9BRERSKSk7CisgICAgICAgICAgICBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudCsrOworICAgICAgICB9CisgICAgfQorCitlcnJvcjoKKyAgICAKKyAgICBpZiAoTlVMTCAhPSBwTWliVW5pY2FzdEFkZHJlc3NUYWJsZSkKKyAgICB7CisgICAgICAgIEZyZWVNaWJUYWJsZShwTWliVW5pY2FzdEFkZHJlc3NUYWJsZSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgc3RhdHVzKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8vIENhbGxiYWNrIGZyb20gV2luZG93cyBUQ1BJUCBzdGFjayB3aGVuIGFuIGFkZHJlc3MgY2hhbmdlIG9jY3VycworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorTkVUSU9BUElfQVBJXyAKK290THdmQWRkcmVzc0NoYW5nZUNhbGxiYWNrKAorICAgIF9Jbl8gUFZPSUQgQ2FsbGVyQ29udGV4dCwKKyAgICBfSW5fb3B0XyBQTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIFJvdywKKyAgICBfSW5fIE1JQl9OT1RJRklDQVRJT05fVFlQRSBOb3RpZmljYXRpb25UeXBlCisgICAgKQoreworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKUNhbGxlckNvbnRleHQ7CisgICAgaWYgKFJvdyA9PSBOVUxMIHx8IHBGaWx0ZXIgPT0gTlVMTCkgcmV0dXJuOworCisgICAgLy8gSWdub3JlIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmVuJ3QgZm9yIG91ciBpbnRlcmZhY2UKKyAgICBpZiAoUm93LT5JbnRlcmZhY2VJbmRleCAhPSBwRmlsdGVyLT5JbnRlcmZhY2VJbmRleCkgcmV0dXJuOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiJXAgKCV1KSAlIUlQVjZBRERSISIsIHBGaWx0ZXIsIE5vdGlmaWNhdGlvblR5cGUsICZSb3ctPkFkZHJlc3MuSXB2Ni5zaW42X2FkZHIpOworCisgICAgLy8gU2luY2Ugd2UgZG9uJ3QgcGFzcyBpbiB0aGUgaW5pdGlhbCBmbGFnLCB3ZSBzaG91bGRuJ3QgZ2V0IHRoaXMgdHlwZQorICAgIE5UX0FTU0VSVChOb3RpZmljYXRpb25UeXBlICE9IE1pYkluaXRpYWxOb3RpZmljYXRpb24pOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiByZWZlcmVuY2UgdGhlIGludGVyZmFjZQorICAgIGlmIChFeEFjcXVpcmVSdW5kb3duUHJvdGVjdGlvbigmcEZpbHRlci0+RXh0ZXJuYWxSZWZzKSkKKyAgICB7CisgICAgICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBRdWV1ZSB1cCB0aGUgZXZlbnQgZm9yIHByb2Nlc3NpbmcKKyAgICAgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVBZGRyZXNzQ2hhbmdlKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAmUm93LT5BZGRyZXNzLklwdjYuc2luNl9hZGRyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE5UX0FTU0VSVChGQUxTRSk7IC8vIE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHRoaXMgaW4gdHVubmVsIG1vZGUKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbGVhc2UgcmVmZXJlbmNlIG9uIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgRXhSZWxlYXNlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBDYWxsYmFjayBvbiB0aGUgT3BlblRocmVhZCB0aHJlYWQgZm9yIHByb2Nlc3NpbmcgYW4gYWRkcmVzcyBjaGFuZ2UKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nQWRkcmVzc0NoYW5nZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBNSUJfTk9USUZJQ0FUSU9OX1RZUEUgIE5vdGlmaWNhdGlvblR5cGUsCisgICAgX0luXyBQSU42X0FERFIgICAgICAgICAgICAgIHBBZGRyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIiVwICgldSkiLCBwRmlsdGVyLCBOb3RpZmljYXRpb25UeXBlKTsKKworICAgIGlmIChOb3RpZmljYXRpb25UeXBlID09IE1pYkFkZEluc3RhbmNlIHx8CisgICAgICAgIE5vdGlmaWNhdGlvblR5cGUgPT0gTWliUGFyYW1ldGVyTm90aWZpY2F0aW9uKQorICAgIHsKKyAgICAgICAgTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIFJvdzsKKyAgICAgICAgSW5pdGlhbGl6ZVVuaWNhc3RJcEFkZHJlc3NFbnRyeSgmUm93KTsKKworICAgICAgICBSb3cuQWRkcmVzcy5zaV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgUm93LkFkZHJlc3MuSXB2Ni5zaW42X2FkZHIgPSAqcEFkZHI7CisgICAgICAgIFJvdy5JbnRlcmZhY2VJbmRleCA9IHBGaWx0ZXItPkludGVyZmFjZUluZGV4OworICAgICAgICBSb3cuSW50ZXJmYWNlTHVpZCA9IHBGaWx0ZXItPkludGVyZmFjZUx1aWQ7CisKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0gR2V0VW5pY2FzdElwQWRkcmVzc0VudHJ5KCZSb3cpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJHZXRVbmljYXN0SXBBZGRyZXNzRW50cnkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3ROZXRpZkFkZHJlc3Mgb3RBZGRyID0gezB9OworICAgICAgICAgICAgbWVtY3B5KCZvdEFkZHIubUFkZHJlc3MsIHBBZGRyLCBzaXplb2YoSU42X0FERFIpKTsKKyAgICAgICAgICAgIG90QWRkci5tUHJlZmVycmVkID0gUm93LlByZWZlcnJlZExpZmV0aW1lICE9IDA7CisgICAgICAgICAgICBvdEFkZHIubVByZWZpeExlbmd0aCA9IFJvdy5PbkxpbmtQcmVmaXhMZW5ndGg7CisgICAgICAgICAgICBvdEFkZHIubVZhbGlkID0gUm93LlZhbGlkTGlmZXRpbWUgIT0gMDsKKworICAgICAgICAgICAgQk9PTEVBTiBTaG91bGREZWxldGUgPSBGQUxTRTsKKyAgICAgICAgICAgIEJPT0xFQU4gQWRkZWRUb0NhY2hlID0gRkFMU0U7CisgICAgICAgICAgICBCT09MRUFOIElzQ2FjaGVkID0gb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsIHBBZGRyKSAhPSAtMTsKKworICAgICAgICAgICAgLy8gSWdub3JlIGxpbmsgbG9jYWwgYWRkcmVzc2VzCisgICAgICAgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKHBBZGRyKSAmJiAhSXNDYWNoZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2hvdWxkRGVsZXRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBnb3RvIGFkZF9jb21wbGV0ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRvIHRoZSBjYWNoZSBpZiB0aGlzIGlzIGEgbmV3IGFkZHJlc3MKKyAgICAgICAgICAgIGlmIChOb3RpZmljYXRpb25UeXBlID09IE1pYkFkZEluc3RhbmNlICYmICFJc0NhY2hlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBZGRlZFRvQ2FjaGUgPSBvdEx3Zk9uQWRkcmVzc0FkZGVkKHBGaWx0ZXIsICZvdEFkZHIsIEZBTFNFKTsKKyAgICAgICAgICAgICAgICBpZiAoQWRkZWRUb0NhY2hlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2hvdWxkRGVsZXRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBhZGRfY29tcGxldGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBVcGRhdGUgT3BlblRocmVhZCBpZiB3ZSBkb24ndCBoYXZlIHRoaXMgY2FjaGVkIG9yIGl0IGlzIGJlaW5nIHVwZGF0ZWQKKyAgICAgICAgICAgIGlmICghSXNDYWNoZWQvKiB8fCBOb3RpZmljYXRpb25UeXBlID09IE1pYlBhcmFtZXRlck5vdGlmaWNhdGlvbiovKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgdHJ5aW5nIHRvIGFkZC91cGRhdGUgYWRkcmVzczogJSFJUFY2QUREUiEiLCBwRmlsdGVyLCBwQWRkcik7CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgKG9yIHVwZGF0ZSkgdGhlIGFkZHJlc3MgdG8gT3BlblRocmVhZAorICAgICAgICAgICAgICAgIG90RXJyb3Igb3RFcnJvciA9IG90SXA2QWRkVW5pY2FzdEFkZHJlc3MocEZpbHRlci0+b3RDdHgsICZvdEFkZHIpOworICAgICAgICAgICAgICAgIGlmIChvdEVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90SXA2QWRkVW5pY2FzdEFkZHJlc3MgZmFpbGVkLCAlIW90RXJyb3IhIiwgb3RFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIFNob3VsZERlbGV0ZSA9IG90RXJyb3IgPT0gT1RfRVJST1JfTk9fQlVGUyA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgYWRkX2NvbXBsZXRlOgorCisgICAgICAgICAgICAvLyBSZW1vdmUgaXQgZnJvbSBUQ1BJUCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIGlmIChTaG91bGREZWxldGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBkZWxldGluZyByZWNlbnRseSBhZGRlZCBhZGRyZXNzOiAlIUlQVjZBRERSISIsIHBGaWx0ZXIsIHBBZGRyKTsKKworICAgICAgICAgICAgICAgIC8vIEJlc3QgZWZmb3J0IHJlbW92ZSBhZGRyZXNzIGZyb20gVENQSVAKKyAgICAgICAgICAgICAgICAoVk9JRClEZWxldGVVbmljYXN0SXBBZGRyZXNzRW50cnkoJlJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoTm90aWZpY2F0aW9uVHlwZSA9PSBNaWJEZWxldGVJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIC8vIExvb2sgZm9yIHRoZSBhZGRyZXNzIGluIG91ciBjYWNoZQorICAgICAgICBpbnQgaW5kZXggPSBvdEx3ZkZpbmRDYWNoZWRBZGRySW5kZXgocEZpbHRlciwgcEFkZHIpOworCisgICAgICAgIC8vIElmIGl0J3Mgbm90IGFscmVhZHkgZGVsZXRlZCBmcm9tIG91ciBjYWNoZSwgdGhlbiBXaW5kb3dzCisgICAgICAgIC8vIGlzIGRlbGV0aW5nIHRoZSBhZGRkcmVzcyBhbmQgd2UgbmVlZCB0byB1cGRhdGUgT3BlblRocmVhZC4KKyAgICAgICAgaWYgKGluZGV4ICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGNhY2hlCisgICAgICAgICAgICBvdEx3Zk9uQWRkcmVzc1JlbW92ZWQocEZpbHRlciwgKFVMT05HKWluZGV4LCBGQUxTRSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgdHJ5aW5nIHRvIHJlbW92ZSBhZGRyZXNzOiAlIUlQVjZBRERSISIsIHBGaWx0ZXIsIHBBZGRyKTsKKworICAgICAgICAgICAgLy8gRmluZCB0aGUgY29ycmVjdCBhZGRyZXNzIGZyb20gT3BlblRocmVhZCB0byByZW1vdmUgKGJlc3QgZWZmb3J0KQorICAgICAgICAgICAgKHZvaWQpb3RJcDZSZW1vdmVVbmljYXN0QWRkcmVzcyhwRmlsdGVyLT5vdEN0eCwgKG90SXA2QWRkcmVzcyopcEFkZHIpOworICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lEIAorb3RMd2ZSYWRpb0FkZHJlc3Nlc1VwZGF0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFVMT05HIEZvdW5kSW5PcGVuVGhyZWFkID0gMDsgLy8gQml0IGZpZWxkCisgICAgVUxPTkcgT3JpZ2luYWxDYWNoZUxlbmd0aCA9IHBGaWx0ZXItPm90Q2FjaGVkQWRkckNvdW50OworICAgIAorICAgIE5UX0FTU0VSVChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKTsKKworICAgIGNvbnN0IG90TmV0aWZBZGRyZXNzKiBhZGRyID0gb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKHBGaWx0ZXItPm90Q3R4KTsKKworICAgIC8vIFByb2Nlc3MgdGhlIGFkZHJlc3NlcworICAgIHdoaWxlIChhZGRyKQorICAgIHsKKyAgICAgICAgaW50IGluZGV4ID0gb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsIChQSU42X0FERFIpJmFkZHItPm1BZGRyZXNzKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBvdEx3Zk9uQWRkcmVzc0FkZGVkKHBGaWx0ZXIsIGFkZHIsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTlRfQVNTRVJUKGluZGV4IDwgOCAqIHNpemVvZihGb3VuZEluT3BlblRocmVhZCkpOworICAgICAgICAgICAgRm91bmRJbk9wZW5UaHJlYWQgfD0gMSA8PCBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBhZGRyID0gYWRkci0+bU5leHQ7CisgICAgfQorCisgICAgLy8gTG9vayBmb3IgbWlzc2luZyBhZGRyZXNzZXMgYW5kIG1hcmsgdGhlbSBhcyByZW1vdmVkCisgICAgZm9yIChpbnQgaSA9IE9yaWdpbmFsQ2FjaGVMZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmICgoRm91bmRJbk9wZW5UaHJlYWQgJiAoMSA8PCBpKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMd2ZPbkFkZHJlc3NSZW1vdmVkKHBGaWx0ZXIsIChVTE9ORylpLCBUUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3ZlR1bkFkZHJlc3Nlc1VwZGF0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuLAorICAgIF9PdXRfIHVpbnQzMl90ICphTm90aWZGbGFncworICAgICkKK3sKKyAgICBVTE9ORyBGb3VuZEluT3BlblRocmVhZCA9IDA7IC8vIEJpdCBmaWVsZAorICAgIFVMT05HIE9yaWdpbmFsQ2FjaGVMZW5ndGggPSBwRmlsdGVyLT5vdENhY2hlZEFkZHJDb3VudDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgTlRfQVNTRVJUIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19USFJFQURfTU9ERSk7CisKKyAgICAqYU5vdGlmRmxhZ3MgPSAwOworCisgICAgd2hpbGUgKHZhbHVlX2RhdGFfbGVuID4gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVudHJ5X3B0ciA9IE5VTEw7CisgICAgICAgIHNwaW5lbF9zaXplX3QgZW50cnlfbGVuID0gMDsKKworICAgICAgICBzcGluZWxfc3NpemVfdCBsZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbiwgImQiLCAmZW50cnlfcHRyLCAmZW50cnlfbGVuKTsKKyAgICAgICAgaWYgKGxlbiA8IDEpIGJyZWFrOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFBJTjZfQUREUiBwQWRkciA9IE5VTEw7CisgICAgICAgICAgICBvdE5ldGlmQWRkcmVzcyBhZGRyID0geyB7IDAgfSwgMCwgMSwgMSwgMCwgMCwgMCwgTlVMTCB9OworICAgICAgICAgICAgdWludDMyX3QgcHJlZmVycmVkTGlmZXRpbWUgPSAweEZGRkZGRkZGOworICAgICAgICAgICAgdWludDMyX3QgdmFsaWRMaWZldGltZSA9IDB4RkZGRkZGRkY7CisKKyAgICAgICAgICAgIHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgZW50cnlfcHRyLCAKKyAgICAgICAgICAgICAgICBlbnRyeV9sZW4sIAorICAgICAgICAgICAgICAgICI2Q0xMIiwgCisgICAgICAgICAgICAgICAgJnBBZGRyLCAKKyAgICAgICAgICAgICAgICAmYWRkci5tUHJlZml4TGVuZ3RoLCAKKyAgICAgICAgICAgICAgICAmdmFsaWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAmcHJlZmVycmVkTGlmZXRpbWUpOworCisgICAgICAgICAgICBhZGRyLm1QcmVmZXJyZWQgPSBwcmVmZXJyZWRMaWZldGltZSAhPSAwOworICAgICAgICAgICAgYWRkci5tVmFsaWQgPSB2YWxpZExpZmV0aW1lICE9IDA7CisKKyAgICAgICAgICAgIGlmIChwQWRkcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBvdEx3ZkZpbmRDYWNoZWRBZGRySW5kZXgocEZpbHRlciwgcEFkZHIpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweV9zKCZhZGRyLm1BZGRyZXNzLCBzaXplb2YoYWRkci5tQWRkcmVzcyksIHBBZGRyLCBzaXplb2YoSU42X0FERFIpKTsKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZPbkFkZHJlc3NBZGRlZChwRmlsdGVyLCAmYWRkciwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICphTm90aWZGbGFncyB8PSBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoaW5kZXggPCA4ICogc2l6ZW9mKEZvdW5kSW5PcGVuVGhyZWFkKSk7CisgICAgICAgICAgICAgICAgICAgIEZvdW5kSW5PcGVuVGhyZWFkIHw9IDEgPDwgaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFsdWVfZGF0YV9sZW4gLT0gbGVuOworICAgICAgICB2YWx1ZV9kYXRhX3B0ciArPSBsZW47CisgICAgfQorCisgICAgLy8gTG9vayBmb3IgbWlzc2luZyBhZGRyZXNzZXMgYW5kIG1hcmsgdGhlbSBhcyByZW1vdmVkCisgICAgZm9yIChpbnQgaSA9IE9yaWdpbmFsQ2FjaGVMZW5ndGggLSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmICgoRm91bmRJbk9wZW5UaHJlYWQgJiAoMSA8PCBpKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMd2ZPbkFkZHJlc3NSZW1vdmVkKHBGaWx0ZXIsIChVTE9ORylpLCBUUlVFKTsKKyAgICAgICAgICAgICphTm90aWZGbGFncyB8PSBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2FsYXJtLmMgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg3ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2FsYXJtLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGFsYXJtIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImFsYXJtLnRtaCIKKwordWludDMyX3QgCitvdFBsYXRBbGFybUdldE5vdygpCit7CisgICAgLy8gUmV0dXJuIG51bWJlciBvZiAndGlja3MnCisgICAgTEFSR0VfSU5URUdFUiBQZXJmb3JtYW5jZUNvdW50ZXIgPSBLZVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKE5VTEwpOworCisgICAgLy8gTXVsdGlwbHkgYnkgMTAwMCBtcy9zZWMgYW5kIGRpdmlkZSBieSAndGlja3MnL3NlYyB0byBnZXQgbXMKKyAgICByZXR1cm4gKHVpbnQzMl90KShQZXJmb3JtYW5jZUNvdW50ZXIuUXVhZFBhcnQgKiAxMDAwIC8gRmlsdGVyUGVyZm9ybWFuY2VGcmVxdWVuY3kuUXVhZFBhcnQpOworfQorCit2b2lkIAorb3RQbGF0QWxhcm1TdG9wKAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgKKyAgICApCit7CisgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIm90UGxhdEFsYXJtU3RvcCIpOworICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdXYWl0VGltZShvdEN0eFRvRmlsdGVyKG90Q3R4KSwgKFVMT05HKSgtMSkpOworfQorCit2b2lkIAorb3RQbGF0QWxhcm1TdGFydEF0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIAorICAgIHVpbnQzMl90IG5vdywgCisgICAgdWludDMyX3Qgd2FpdFRpbWUKKyAgICApCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihub3cpOworICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJvdFBsYXRBbGFybVN0YXJ0QXQgJXUgbXMiLCB3YWl0VGltZSk7CisgICAgb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZU5ld1dhaXRUaW1lKG90Q3R4VG9GaWx0ZXIob3RDdHgpLCB3YWl0VGltZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvY29tbWFuZC5jIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2NvbW1hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTY4ZWJlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2NvbW1hbmQuYwpAQCAtMCwwICsxLDE0MjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIFNwaW5lbCBjb21tYW5kcyB0byB0aGUgbWluaXBvcnQuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJjb21tYW5kLnRtaCIKKwordHlwZWRlZiBzdHJ1Y3QgX1NQSU5FTF9DTURfSEFORExFUl9FTlRSWQoreworICAgIExJU1RfRU5UUlkgICAgICAgICAgTGluazsKKyAgICB2b2xhdGlsZSBMT05HICAgICAgIFJlZkNvdW50OworICAgIFNQSU5FTF9DTURfSEFORExFUiAqSGFuZGxlcjsKKyAgICBQVk9JRCAgICAgICAgICAgICAgIENvbnRleHQ7CisgICAgc3BpbmVsX3RpZF90ICAgICAgICBUcmFuc2FjdGlvbklkOworfSBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlk7CisKK3ZvaWQgQWRkRW50cnlSZWYoU1BJTkVMX0NNRF9IQU5ETEVSX0VOVFJZICpwRW50cnkpIHsgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnBFbnRyeS0+UmVmQ291bnQpOyB9Cit2b2lkIFJlbGVhc2VFbnRyeVJlZihTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkgKnBFbnRyeSkgCit7IAorICAgIGlmIChJbnRlcmxvY2tlZERlY3JlbWVudCgmcEVudHJ5LT5SZWZDb3VudCkgPT0gMCkKKyAgICB7CisgICAgICAgIEZJTFRFUl9GUkVFX01FTShwRW50cnkpOworICAgIH0KK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTkRJU19TVEFUVVMgCitvdEx3ZkNtZEluaXRpYWxpemUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTkRJU19TVEFUVVMgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBOVFNUQVRVUyBOdFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIHVpbnQzMl90IE1ham9yVmVyc2lvbiA9IDA7CisgICAgdWludDMyX3QgTWlub3JWZXJzaW9uID0gMDsKKyAgICB1aW50MzJfdCBJbnRlcmZhY2VUeXBlID0gMDsKKworICAgIE5FVF9CVUZGRVJfTElTVF9QT09MX1BBUkFNRVRFUlMgUG9vbFBhcmFtcyA9CisgICAgeworICAgICAgICB7IE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVCwgTkVUX0JVRkZFUl9MSVNUX1BPT0xfUEFSQU1FVEVSU19SRVZJU0lPTl8xLCBORElTX1NJWkVPRl9ORVRfQlVGRkVSX0xJU1RfUE9PTF9QQVJBTUVURVJTX1JFVklTSU9OXzEgfSwKKyAgICAgICAgTkRJU19QUk9UT0NPTF9JRF9ERUZBVUxULAorICAgICAgICBUUlVFLAorICAgICAgICAwLAorICAgICAgICAnbGJOQycsIC8vIENOYmwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHBGaWx0ZXItPmNtZFRJRHNJblVzZSA9IDA7CisgICAgICAgIHBGaWx0ZXItPmNtZE5leHRUSUQgPSAxOworICAgICAgICBwRmlsdGVyLT5jbWRSZXNldFJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOworCisgICAgICAgIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwRmlsdGVyLT5jbWRMb2NrKTsKKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5jbWRIYW5kbGVycyk7CisKKyAgICAgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICAgICAmcEZpbHRlci0+Y21kUmVzZXRDb21wbGV0ZUV2ZW50LAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKworICAgICAgICAvLyBFbmFibGUgcnVuZG93biBwcm90ZWN0aW9uCisgICAgICAgIEV4UmVJbml0aWFsaXplUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPmNtZFJ1bmRvd24pOworCisgICAgICAgIC8vIENyZWF0ZSB0aGUgTkRJUyBwb29sIGZvciBjcmVhdGluZyB0aGUgU2VuZE5ldEJ1ZmZlckxpc3QKKyAgICAgICAgcEZpbHRlci0+Y21kTmJsUG9vbCA9IE5kaXNBbGxvY2F0ZU5ldEJ1ZmZlckxpc3RQb29sKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgJlBvb2xQYXJhbXMpOworICAgICAgICBpZiAocEZpbHRlci0+Y21kTmJsUG9vbCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBOZXRCdWZmZXJMaXN0IHBvb2wgZm9yIFNwaW5lbCBjb21tYW5kcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBRdWVyeSB0aGUgaW50ZXJmYWNlIHR5cGUgdG8gbWFrZSBzdXJlIGl0IGlzIGEgVGhyZWFkIGRldmljZQorI2lmZGVmIENPTU1BTkRfSU5JVF9SRVRSWQorICAgICAgICBwRmlsdGVyLT5jbWRJbml0VHJ5Q291bnQgPSAwOworICAgICAgICB3aGlsZSAocEZpbHRlci0+Y21kSW5pdFRyeUNvdW50IDwgMTApCisgICAgICAgIHsKKyAgICAgICAgICAgIE50U3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsIE5VTEwsIFNQSU5FTF9QUk9QX1BST1RPQ09MX1ZFUlNJT04sICJpaSIsICZNYWpvclZlcnNpb24sICZNaW5vclZlcnNpb24pOworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5jbWRJbml0VHJ5Q291bnQrKzsKKyAgICAgICAgICAgICAgICBOZGlzTVNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocEZpbHRlci0+Y21kSW5pdFRyeUNvdW50ID49IDEwKQorICAgICAgICB7CisjZWxzZQorICAgICAgICBOdFN0YXR1cyA9IG90THdmQ21kR2V0UHJvcChwRmlsdGVyLCBOVUxMLCBTUElORUxfUFJPUF9QUk9UT0NPTF9WRVJTSU9OLCAiaWkiLCAmTWFqb3JWZXJzaW9uLCAmTWlub3JWZXJzaW9uKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgeworI2VuZGlmCisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gcXVlcnkgU1BJTkVMX1BST1BfUFJPVE9DT0xfVkVSU0lPTiwgJSFTVEFUVVMhIiwgTnRTdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE1ham9yVmVyc2lvbiAhPSBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUFKT1IgfHwKKyAgICAgICAgICAgIE1pbm9yVmVyc2lvbiA8IDMpIC8vIFRPRE8gLSBSZW1vdmUgdGhpcyBtaW5vciB2ZXJzaW9uIGNoZWNrIHdpdGggdGhlIG5leHQgbWFqb3IgdmVyc2lvbiB1cGRhdGUKKyAgICAgICAgeworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUHJvdG9jb2wgVmVyc2lvbiBNaXNtYXRjaCEgT3NWZXI6ICVkLiVkIERldmljZVZlcjogJWQuJWQiLAorICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1RPQ09MX1ZFUlNJT05fVEhSRUFEX01BSk9SLCBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUlOT1IsCisgICAgICAgICAgICAgICAgICAgICBNYWpvclZlcnNpb24sIE1pbm9yVmVyc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIE50U3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsIE5VTEwsIFNQSU5FTF9QUk9QX0lOVEVSRkFDRV9UWVBFLCBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgJkludGVyZmFjZVR5cGUpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gcXVlcnkgU1BJTkVMX1BST1BfSU5URVJGQUNFX1RZUEUsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChJbnRlcmZhY2VUeXBlICE9IFNQSU5FTF9QUk9UT0NPTF9UWVBFX1RIUkVBRCkKKyAgICAgICAgeworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU1BJTkVMX1BST1BfSU5URVJGQUNFX1RZUEUgaXMgaW52YWxpZCwgJWQiLCBJbnRlcmZhY2VUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTnRTdGF0dXMgPSBvdEx3ZkNtZFJlc2V0RGV2aWNlKHBGaWx0ZXIsIEZBTFNFKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIFN0YXR1cyk7CisKKyAgICAvLyBDbGVhbiB1cCBvbiBmYWlsdXJlCisgICAgaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgb3RMd2ZDbWRVbmluaXRpYWxpemUocEZpbHRlcik7CisgICAgfQorCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQordm9pZCAKK290THdmQ21kVW5pbml0aWFsaXplKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICAvLyBSZWxlYXNlIGFuZCB3YWl0IGZvciBydW4gZG93bi4gVGhpcyB3aWxsIGJsb2NrIHdhaXRpbmcgZm9yIGFueSBwZW5kaW5nIHNlbmRzIHRvIGNvbXBsZXRlCisgICAgRXhXYWl0Rm9yUnVuZG93blByb3RlY3Rpb25SZWxlYXNlKCZwRmlsdGVyLT5jbWRSdW5kb3duKTsKKworICAgIC8vIFVzZSB0aGUgTkJMIFBvb2wgdmFyaWFibGUgYXMgYSBmbGFnIGZvciBpbml0aWFsaXphdGlvbgorICAgIGlmIChwRmlsdGVyLT5jbWROYmxQb29sKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYW4gdXAgYW55IHBlbmRpbmcgaGFuZGxlcnMKKyAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IHBGaWx0ZXItPmNtZEhhbmRsZXJzLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+Y21kSGFuZGxlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSogcEVudHJ5ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgU1BJTkVMX0NNRF9IQU5ETEVSX0VOVFJZLCBMaW5rKTsKKyAgICAgICAgICAgIExpbmsgPSBMaW5rLT5GbGluazsKKworICAgICAgICAgICAgaWYgKHBFbnRyeS0+SGFuZGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwRW50cnktPkhhbmRsZXIocEZpbHRlciwgcEVudHJ5LT5Db250ZXh0LCAwLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVsZWFzZUVudHJ5UmVmKHBFbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5jbWRIYW5kbGVycyk7CisKKyAgICAgICAgLy8gRnJlZSBOQkwgUG9vbAorICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlclBvb2wocEZpbHRlci0+Y21kTmJsUG9vbCk7CisgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wgPSBOVUxMOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworLy8KKy8vIFJlY2VpdmUgU3BpbmVsIEVuY29kZWQgQ29tbWFuZAorLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQKK290THdmQ21kUHJvY2VzcygKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIFVJTlQgY29tbWFuZCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKGNtZF9kYXRhX2xlbikgY29uc3QgdWludDhfdCogY21kX2RhdGFfcHRyLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBjbWRfZGF0YV9sZW4KKyAgICApCit7CisgICAgdWludDhfdCBIZWFkZXI7CisgICAgc3BpbmVsX3Byb3Bfa2V5X3Qga2V5OworICAgIHVpbnQ4X3QqIHZhbHVlX2RhdGFfcHRyID0gTlVMTDsKKyAgICBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuID0gMDsKKworICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGFuIGV4cGVjdGVkIGNvbW1hbmQKKyAgICBpZiAoY29tbWFuZCA8IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUyB8fCBjb21tYW5kID4gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjaWV2ZWQgdW5oYW5kbGVkIGNvbW1hbmQsICV1IiwgY29tbWFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEZWNvZGUgdGhlIGtleSBhbmQgZGF0YQorICAgIGlmIChzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGNtZF9kYXRhX3B0ciwgY21kX2RhdGFfbGVuLCAiQ2lpRCIsICZIZWFkZXIsIE5VTEwsICZrZXksICZ2YWx1ZV9kYXRhX3B0ciwgJnZhbHVlX2RhdGFfbGVuKSA9PSAtMSkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gdW5wYWNrIGNvbW1hbmQga2V5ICYgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSB0cmFuc2FjdGlvbiBJRAorICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9USUQoSGVhZGVyKSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gSGFuZGxlIG91dCBvZiBiYW5kIGxhc3Qgc3RhdHVzIGxvY2FsbHkKKyAgICAgICAgaWYgKGNvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICYmIGtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlc2V0CisgICAgICAgICAgICBzcGluZWxfc3RhdHVzX3Qgc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgICAgIHNwaW5lbF9kYXRhdHlwZV91bnBhY2sodmFsdWVfZGF0YV9wdHIsIHZhbHVlX2RhdGFfbGVuLCAiaSIsICZzdGF0dXMpOworCisgICAgICAgICAgICBpZiAoKHN0YXR1cyA+PSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTikgJiYgKHN0YXR1cyA8PSBTUElORUxfU1RBVFVTX1JFU0VUX19FTkQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISB3YXMgcmVzZXQgKHN0YXR1cyAlZCkuIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgcEZpbHRlci0+Y21kUmVzZXRSZWFzb24gPSBzdGF0dXMgLSBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTjsKKyAgICAgICAgICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5jbWRSZXNldENvbXBsZXRlRXZlbnQsIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworCisgICAgICAgICAgICAgICAgLy8gVE9ETyAtIFNob3VsZCB0aGlzIGJlIHBhc3NlZCBvbiB0byBUaHJlYWQgb3IgVHVubmVsIGxvZ2ljPworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEV4QWNxdWlyZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgJ1ZhbHVlIElzJyBjb21tYW5kLCBwcm9jZXNzIGl0IGZvciBub3RpZmljYXRpb24gb2Ygc3RhdGUgY2hhbmdlcy4KKyAgICAgICAgICAgIGlmIChjb21tYW5kID09IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG90THdmVGhyZWFkVmFsdWVJcyhwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBrZXksIHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1RIUkVBRF9NT0RFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZUdW5WYWx1ZUlzKHBGaWx0ZXIsIERpc3BhdGNoTGV2ZWwsIGtleSwgdmFsdWVfZGF0YV9wdHIsIHZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kID09IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG90THdmVGhyZWFkVmFsdWVJbnNlcnRlZChwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBrZXksIHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1RIUkVBRF9NT0RFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZUdW5WYWx1ZUluc2VydGVkKHBGaWx0ZXIsIERpc3BhdGNoTGV2ZWwsIGtleSwgdmFsdWVfZGF0YV9wdHIsIHZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEV4UmVsZWFzZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpOworICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHRoZXJlIHdhcyBhIHRyYW5zYWN0aW9uIElELCB0aGVuIGxvb2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQgaGFuZGxlcgorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFBMSVNUX0VOVFJZIExpbms7CisgICAgICAgIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSogSGFuZGxlciA9IE5VTEw7CisKKyAgICAgICAgRklMVEVSX0FDUVVJUkVfTE9DSygmcEZpbHRlci0+Y21kTG9jaywgRGlzcGF0Y2hMZXZlbCk7CisKKyAgICAgICAgLy8gU2VhcmNoIGZvciBtYXRjaGluZyBoYW5kbGVycyBmb3IgdGhpcyBjb21tYW5kCisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5jbWRIYW5kbGVycy5GbGluazsKKyAgICAgICAgd2hpbGUgKExpbmsgIT0gJnBGaWx0ZXItPmNtZEhhbmRsZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkqIHBFbnRyeSA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSwgTGluayk7CisgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisKKyAgICAgICAgICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9USUQoSGVhZGVyKSA9PSBwRW50cnktPlRyYW5zYWN0aW9uSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIG1haW4gbGlzdAorICAgICAgICAgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmcEVudHJ5LT5MaW5rKTsKKworICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBoYW5kbGVyCisgICAgICAgICAgICAgICAgSGFuZGxlciA9IHBFbnRyeTsKKworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdHJhbnNhY3Rpb24gSUQgZnJvbSB0aGUgJ2luIHVzZScgYml0IGZpZWxkCisgICAgICAgICAgICAgICAgcEZpbHRlci0+Y21kVElEc0luVXNlICY9IH4oMSA8PCBwRW50cnktPlRyYW5zYWN0aW9uSWQpOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5jbWRMb2NrLCBEaXNwYXRjaExldmVsKTsKKworICAgICAgICAvLyBUT0RPIC0gU2V0IGV2ZW50CisKKyAgICAgICAgLy8gUHJvY2VzcyB0aGUgaGFuZGxlciB3ZSBmb3VuZCwgb3V0c2lkZSB0aGUgbG9jaworICAgICAgICBpZiAoSGFuZGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciBmdW5jdGlvbgorICAgICAgICAgICAgSGFuZGxlci0+SGFuZGxlcihwRmlsdGVyLCBIYW5kbGVyLT5Db250ZXh0LCBjb21tYW5kLCBrZXksIHZhbHVlX2RhdGFfcHRyLCB2YWx1ZV9kYXRhX2xlbik7CisKKyAgICAgICAgICAgIC8vIEZyZWUgdGhlIGVudHJ5CisgICAgICAgICAgICBSZWxlYXNlRW50cnlSZWYoSGFuZGxlcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZkNtZFJlY3ZlaXZlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnVmZmVyTGVuZ3RoKSBjb25zdCBQVUNIQVIgQnVmZmVyLAorICAgIF9Jbl8gVUxPTkcgQnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIHVpbnQ4X3QgSGVhZGVyOworICAgIFVJTlQgQ29tbWFuZDsKKworICAgIC8vIFVucGFjayB0aGUgaGVhZGVyIGZyb20gdGhlIGJ1ZmZlcgorICAgIGlmIChzcGluZWxfZGF0YXR5cGVfdW5wYWNrKEJ1ZmZlciwgQnVmZmVyTGVuZ3RoLCAiQ2kiLCAmSGVhZGVyLCAmQ29tbWFuZCkgPD0gMCkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gdW5wYWNrIGhlYWRlciBhbmQgY29tbWFuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgdGhlIGhlYWRlcgorICAgIGlmICgoSGVhZGVyICYgU1BJTkVMX0hFQURFUl9GTEFHKSAhPSBTUElORUxfSEVBREVSX0ZMQUcpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjaWV2ZWQgdW5yZWNvZ25pemVkIGZyYW1lLCBoZWFkZXI9MHgleCIsIEhlYWRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgSUlEIHplcm8gZm9yIG5vdworICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9JSUQoSGVhZGVyKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlJlY2lldmVkIHVuc3VwcG9ydGVkIElJRCwgJXUiLCBTUElORUxfSEVBREVSX0dFVF9JSUQoSGVhZGVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQcm9jZXNzIHRoZSByZWNlaXZlZCBjb21tYW5kCisgICAgb3RMd2ZDbWRQcm9jZXNzKHBGaWx0ZXIsIERpc3BhdGNoTGV2ZWwsIENvbW1hbmQsIEJ1ZmZlciwgQnVmZmVyTGVuZ3RoKTsKK30KKworLy8KKy8vIFNlbmQgQXN5bmMgU3BpbmVsIEVuY29kZWQgQ29tbWFuZAorLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorc3BpbmVsX3RpZF90CitvdEx3ZkNtZEdldE5leHRUSUQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgc3BpbmVsX3RpZF90IFRJRCA9IDA7CisgICAgd2hpbGUgKFRJRCA9PSAwKQorICAgIHsKKyAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEZpbHRlci0+Y21kTG9jayk7CisKKyAgICAgICAgaWYgKCgoMSA8PCBwRmlsdGVyLT5jbWROZXh0VElEKSAmIHBGaWx0ZXItPmNtZFRJRHNJblVzZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVElEID0gcEZpbHRlci0+Y21kTmV4dFRJRDsKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5leHRUSUQgPSBTUElORUxfR0VUX05FWFRfVElEKHBGaWx0ZXItPmNtZE5leHRUSUQpOworICAgICAgICAgICAgcEZpbHRlci0+Y21kVElEc0luVXNlIHw9ICgxIDw8IFRJRCk7CisgICAgICAgIH0KKworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5jbWRMb2NrKTsKKworICAgICAgICBpZiAoVElEID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE8gLSBXYWl0IGZvciBldmVudAorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUSUQ7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQKK290THdmQ21kQWRkSGFuZGxlcigKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSAqcEVudHJ5CisgICAgKQoreworICAgIC8vIEdldCB0aGUgbmV4dCB0cmFuc2FjdGlvbiBJRC4gVGhpcyBjYWxsIHdpbGwgYmxvY2sgaWYgdGhlcmUgYXJlCisgICAgLy8gbm9uZSBjdXJyZW50bHkgYXZhaWxhYmxlLgorICAgIHBFbnRyeS0+VHJhbnNhY3Rpb25JZCA9IG90THdmQ21kR2V0TmV4dFRJRChwRmlsdGVyKTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgInRpZD0ldSIsIChVTE9ORylwRW50cnktPlRyYW5zYWN0aW9uSWQpOworICAgIAorICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPmNtZExvY2spOworICAgIAorICAgIC8vIEFkZCB0byB0aGUgaGFuZGxlcnMgbGlzdAorICAgIEFkZEVudHJ5UmVmKHBFbnRyeSk7CisgICAgSW5zZXJ0VGFpbExpc3QoJnBGaWx0ZXItPmNtZEhhbmRsZXJzLCAmcEVudHJ5LT5MaW5rKTsKKyAgICAKKyAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5jbWRMb2NrKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kRW5jb2RlQW5kU2VuZEFzeW5jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gc3BpbmVsX3RpZF90IHRpZCwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIF9Jbl9vcHRfIHZhX2xpc3QgYXJncworICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworICAgIFBORVRfQlVGRkVSIE5ldEJ1ZmZlciA9IE5VTEw7CisgICAgVUxPTkcgTmV0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBQVUNIQVIgRGF0YUJ1ZmZlciA9IE5VTEw7CisgICAgc3BpbmVsX3NzaXplX3QgUGFja2VkTGVuZ3RoOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiQ21kPSV1IEtleT0ldSB0aWQ9JXUiLCAoVUxPTkcpQ29tbWFuZCwgKFVMT05HKUtleSwgKFVMT05HKXRpZCk7CisKKyAgICBOZXRCdWZmZXJMaXN0ID0KKyAgICAgICAgTmRpc0FsbG9jYXRlTmV0QnVmZmVyQW5kTmV0QnVmZmVyTGlzdCgKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wsICAgICAvLyBQb29sSGFuZGxlCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRTaXplCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRCYWNrRmlsbAorICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZGxDaGFpbgorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhT2Zmc2V0CisgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGFMZW5ndGgKKyAgICAgICAgICAgICk7CisgICAgaWYgKE5ldEJ1ZmZlckxpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBjb21tYW5kIE5ldEJ1ZmZlckxpc3QiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICAgICAgCisgICAgLy8gSW5pdGlhbGl6ZSBOZXRCdWZmZXIgZmllbGRzCisgICAgTmV0QnVmZmVyID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKE5ldEJ1ZmZlckxpc3QpOworICAgIE5FVF9CVUZGRVJfQ1VSUkVOVF9NREwoTmV0QnVmZmVyKSA9IE5VTEw7CisgICAgTkVUX0JVRkZFUl9DVVJSRU5UX01ETF9PRkZTRVQoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0RBVEFfT0ZGU0VUKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfRklSU1RfTURMKE5ldEJ1ZmZlcikgPSBOVUxMOworCisgICAgLy8gQ2FsY3VsYXRlIGxlbmd0aCBvZiBOZXRCdWZmZXIKKyAgICBOZXRCdWZmZXJMZW5ndGggPSAxNiArIE1heERhdGFMZW5ndGg7CisgICAgaWYgKE5ldEJ1ZmZlckxlbmd0aCA8IDY0KSBOZXRCdWZmZXJMZW5ndGggPSA2NDsKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSB0aGUgTmV0QnVmZmVyIGZvciBOZXRCdWZmZXJMaXN0CisgICAgaWYgKE5kaXNSZXRyZWF0TmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgTmV0QnVmZmVyTGVuZ3RoLCAwLCBOVUxMKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgTmV0QnVmZmVyID0gTlVMTDsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIE5CIGZvciBjb21tYW5kIE5ldEJ1ZmZlckxpc3QsICV1IGJ5dGVzIiwgTmV0QnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIEdldCB0aGUgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIKKyAgICBEYXRhQnVmZmVyID0gKFBVQ0hBUilOZGlzR2V0RGF0YUJ1ZmZlcihOZXRCdWZmZXIsIE5ldEJ1ZmZlckxlbmd0aCwgTlVMTCwgMSwgMCk7CisgICAgTlRfQVNTRVJUKERhdGFCdWZmZXIpOworICAgIAorICAgIC8vIFNhdmUgdGhlIHRydWUgTmV0QnVmZmVyIGxlbmd0aCBpbiB0aGUgcHJvdG9jb2wgcmVzZXJ2ZWQKKyAgICBOZXRCdWZmZXItPlByb3RvY29sUmVzZXJ2ZWRbMF0gPSAoUFZPSUQpTmV0QnVmZmVyTGVuZ3RoOworICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCA9IDA7CisgICAgCisgICAgLy8gU2F2ZSB0aGUgdHJhbnNhY3Rpb24gSUQgaW4gdGhlIHByb3RvY29sIHJlc2VydmVkCisgICAgTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzFdID0gKFBWT0lEKXRpZDsKKworICAgIC8vIFBhY2sgdGhlIGhlYWRlciwgY29tbWFuZCBhbmQga2V5CisgICAgUGFja2VkTGVuZ3RoID0gCisgICAgICAgIHNwaW5lbF9kYXRhdHlwZV9wYWNrKAorICAgICAgICAgICAgRGF0YUJ1ZmZlciwgCisgICAgICAgICAgICBOZXRCdWZmZXJMZW5ndGgsIAorICAgICAgICAgICAgIkNpaSIsIAorICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCB8IHRpZCwgCisgICAgICAgICAgICBDb21tYW5kLCAKKyAgICAgICAgICAgIEtleSk7CisgICAgaWYgKFBhY2tlZExlbmd0aCA8IDAgfHwgUGFja2VkTGVuZ3RoICsgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID4gTmV0QnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBOZXRCdWZmZXItPkRhdGFMZW5ndGggKz0gKFVMT05HKVBhY2tlZExlbmd0aDsKKworICAgIC8vIFBhY2sgdGhlIGRhdGEgKGlmIGFueSkKKyAgICBpZiAocGFja19mb3JtYXQpCisgICAgeworICAgICAgICBQYWNrZWRMZW5ndGggPSAKKyAgICAgICAgICAgIHNwaW5lbF9kYXRhdHlwZV92cGFjaygKKyAgICAgICAgICAgICAgICBEYXRhQnVmZmVyICsgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoLCAKKyAgICAgICAgICAgICAgICBOZXRCdWZmZXJMZW5ndGggLSBOZXRCdWZmZXItPkRhdGFMZW5ndGgsIAorICAgICAgICAgICAgICAgIHBhY2tfZm9ybWF0LCAKKyAgICAgICAgICAgICAgICBhcmdzKTsKKyAgICAgICAgaWYgKFBhY2tlZExlbmd0aCA8IDAgfHwgUGFja2VkTGVuZ3RoICsgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID4gTmV0QnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCArPSAoVUxPTkcpUGFja2VkTGVuZ3RoOworICAgIH0KKworICAgIC8vIEdyYWIgYSByZWYgZm9yIHJ1bmRvd24gcHJvdGVjdGlvbgorICAgIGlmICghRXhBY3F1aXJlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPmNtZFJ1bmRvd24pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9OT1RfUkVBRFk7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWNxdWlyZSBydW5kb3duIHByb3RlY3Rpb24iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIFNlbmQgdGhlIE5CTCBkb3duCisgICAgTmRpc0ZTZW5kTmV0QnVmZmVyTGlzdHMoCisgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgCisgICAgICAgIE5ldEJ1ZmZlckxpc3QsIAorICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsIAorICAgICAgICAwKTsKKworICAgIC8vIENsZWFyIGxvY2FsIHZhcmlhYmxlIGJlY2F1c2Ugd2UgZG9uJ3Qgb3duIHRoZSBOQkwgYW55IG1vcmUKKyAgICBOZXRCdWZmZXJMaXN0ID0gTlVMTDsKKworZXhpdDoKKworICAgIGlmIChOZXRCdWZmZXJMaXN0KQorICAgIHsKKyAgICAgICAgaWYgKE5ldEJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID0gKFVMT05HKShVTE9OR19QVFIpTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzBdOworICAgICAgICAgICAgTmRpc0FkdmFuY2VOZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBOZXRCdWZmZXItPkRhdGFMZW5ndGgsIFRSVUUsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kUmVzZXREZXZpY2UoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIGZBc3luYworICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgS2VSZXNldEV2ZW50KCZwRmlsdGVyLT5jbWRSZXNldENvbXBsZXRlRXZlbnQpOworCisgICAgTlRTVEFUVVMgc3RhdHVzID0gb3RMd2ZDbWRFbmNvZGVBbmRTZW5kQXN5bmMocEZpbHRlciwgU1BJTkVMX0NNRF9SRVNFVCwgMCwgMCwgMCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBzZW5kIFNQSU5FTF9DTURfUkVTRVQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorICAgIGVsc2UgaWYgKCFmQXN5bmMpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHJlbGF0aXZlIChuZWdhdGl2ZSkgdGltZSB0byB3YWl0IGZvciA1IHNlY29uZHMKKyAgICAgICAgTEFSR0VfSU5URUdFUiBUaW1lb3V0OworICAgICAgICBUaW1lb3V0LlF1YWRQYXJ0ID0gLTUwMDAgKiAxMDAwMDsKKworICAgICAgICBzdGF0dXMgPSBLZVdhaXRGb3JTaW5nbGVPYmplY3QoJnBGaWx0ZXItPmNtZFJlc2V0Q29tcGxldGVFdmVudCwgRXhlY3V0aXZlLCBLZXJuZWxNb2RlLCBGQUxTRSwgJlRpbWVvdXQpOworICAgICAgICBpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB3YWl0aW5nIGZvciByZXNldCBjb21wbGV0ZSwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19ERVZJQ0VfQlVTWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZDbWRTZW5kQXN5bmNWKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl9vcHRfIFNQSU5FTF9DTURfSEFORExFUiAqSGFuZGxlciwKKyAgICBfSW5fb3B0XyBQVk9JRCBIYW5kbGVyQ29udGV4dCwKKyAgICBfT3V0X29wdF8gc3BpbmVsX3RpZF90ICpwVGlkLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gVUxPTkcgTWF4RGF0YUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgCisgICAgX0luX29wdF8gdmFfbGlzdCBhcmdzCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSAqcEVudHJ5ID0gTlVMTDsKKworICAgIGlmIChwVGlkKSAqcFRpZCA9IDA7CisKKyAgICAvLyBDcmVhdGUgdGhlIGhhbmRsZXIgZW50cnkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdAorICAgIGlmIChIYW5kbGVyKQorICAgIHsKKyAgICAgICAgcEVudHJ5ID0gRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIHNpemVvZihTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkpKTsKKyAgICAgICAgaWYgKHBFbnRyeSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgaGFuZGxlciBlbnRyeSIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcEVudHJ5LT5SZWZDb3VudCA9IDE7CisgICAgICAgIHBFbnRyeS0+SGFuZGxlciA9IEhhbmRsZXI7CisgICAgICAgIHBFbnRyeS0+Q29udGV4dCA9IEhhbmRsZXJDb250ZXh0OworCisgICAgICAgIG90THdmQ21kQWRkSGFuZGxlcihwRmlsdGVyLCBwRW50cnkpOworCisgICAgICAgIGlmIChwVGlkKSAqcFRpZCA9IHBFbnRyeS0+VHJhbnNhY3Rpb25JZDsKKyAgICB9CisgICAgCisgICAgc3RhdHVzID0gb3RMd2ZDbWRFbmNvZGVBbmRTZW5kQXN5bmMocEZpbHRlciwgQ29tbWFuZCwgS2V5LCBwRW50cnkgPyBwRW50cnktPlRyYW5zYWN0aW9uSWQgOiAwLCBNYXhEYXRhTGVuZ3RoLCBwYWNrX2Zvcm1hdCwgYXJncyk7CisKKyAgICAvLyBSZW1vdmUgdGhlIGhhbmRsZXIgZW50cnkgZnJvbSB0aGUgbGlzdAorICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpICYmIHBFbnRyeSkKKyAgICB7CisgICAgICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPmNtZExvY2spOworICAgIAorICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgbWFpbiBsaXN0CisgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmcEVudHJ5LT5MaW5rKTsKKworICAgICAgICAvLyBSZW1vdmUgdGhlIHRyYW5zYWN0aW9uIElEIGZyb20gdGhlICdpbiB1c2UnIGJpdCBmaWVsZAorICAgICAgICBwRmlsdGVyLT5jbWRUSURzSW5Vc2UgJj0gfigxIDw8IHBFbnRyeS0+VHJhbnNhY3Rpb25JZCk7CisKKyAgICAgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEZpbHRlci0+Y21kTG9jayk7CisKKyAgICAgICAgLy8gVE9ETyAtIFNldCBldmVudAorCisgICAgICAgIFJlbGVhc2VFbnRyeVJlZihwRW50cnkpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChwRW50cnkpIFJlbGVhc2VFbnRyeVJlZihwRW50cnkpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2VuZEFzeW5jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl9vcHRfIFNQSU5FTF9DTURfSEFORExFUiAqSGFuZGxlciwKKyAgICBfSW5fb3B0XyBQVk9JRCBIYW5kbGVyQ29udGV4dCwKKyAgICBfT3V0X29wdF8gc3BpbmVsX3RpZF90ICpwVGlkLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gVUxPTkcgTWF4RGF0YUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgCisgICAgLi4uCisgICAgKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gCisgICAgICAgIG90THdmQ21kU2VuZEFzeW5jVihwRmlsdGVyLCBIYW5kbGVyLCBIYW5kbGVyQ29udGV4dCwgcFRpZCwgQ29tbWFuZCwgS2V5LCBNYXhEYXRhTGVuZ3RoLCBwYWNrX2Zvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitCT09MRUFOCitvdEx3ZkNtZENhbmNlbCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF90aWRfdCB0aWQKKyAgICApCit7CisgICAgUExJU1RfRU5UUlkgTGluazsKKyAgICBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkqIEhhbmRsZXIgPSBOVUxMOworICAgIEJPT0xFQU4gRm91bmQgPSBGQUxTRTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgInRpZD0ldSIsIChVTE9ORyl0aWQpOworCisgICAgRklMVEVSX0FDUVVJUkVfTE9DSygmcEZpbHRlci0+Y21kTG9jaywgRGlzcGF0Y2hMZXZlbCk7CisgICAgCisgICAgLy8gU2VhcmNoIGZvciBtYXRjaGluZyBoYW5kbGVycyBmb3IgdGhpcyB0cmFuc2FjdGlvbiBJRAorICAgIExpbmsgPSBwRmlsdGVyLT5jbWRIYW5kbGVycy5GbGluazsKKyAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+Y21kSGFuZGxlcnMpCisgICAgeworICAgICAgICBTUElORUxfQ01EX0hBTkRMRVJfRU5UUlkqIHBFbnRyeSA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIFNQSU5FTF9DTURfSEFORExFUl9FTlRSWSwgTGluayk7CisgICAgICAgIExpbmsgPSBMaW5rLT5GbGluazsKKworICAgICAgICBpZiAodGlkID09IHBFbnRyeS0+VHJhbnNhY3Rpb25JZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIG1haW4gbGlzdAorICAgICAgICAgICAgUmVtb3ZlRW50cnlMaXN0KCZwRW50cnktPkxpbmspOworCisgICAgICAgICAgICAvLyBTYXZlIGhhbmRsZXIgdG8gY2FuY2VsIG91dHNpZGUgbG9jaworICAgICAgICAgICAgSGFuZGxlciA9IHBFbnRyeTsKKyAgICAgICAgICAgIEZvdW5kID0gVFJVRTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0cmFuc2FjdGlvbiBJRCBmcm9tIHRoZSAnaW4gdXNlJyBiaXQgZmllbGQKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZFRJRHNJblVzZSAmPSB+KDEgPDwgcEVudHJ5LT5UcmFuc2FjdGlvbklkKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgRklMVEVSX1JFTEVBU0VfTE9DSygmcEZpbHRlci0+Y21kTG9jaywgRGlzcGF0Y2hMZXZlbCk7CisKKyAgICBpZiAoSGFuZGxlcikKKyAgICB7CisgICAgICAgIC8vIENhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24KKyAgICAgICAgSGFuZGxlci0+SGFuZGxlcihwRmlsdGVyLCBIYW5kbGVyLT5Db250ZXh0LCAwLCAwLCBOVUxMLCAwKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBlbnRyeQorICAgICAgICBSZWxlYXNlRW50cnlSZWYoSGFuZGxlcik7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXRNc2coRFJJVkVSX0RFRkFVTFQsICJGb3VuZD0ldSIsIEZvdW5kKTsKKworICAgIHJldHVybiBGb3VuZDsKK30KKworLy8KKy8vIFNlbmQgUGFja2V0L0ZyYW1lCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2VuZElwNlBhY2tldEFzeW5jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gUE5FVF9CVUZGRVIgSXBOZXRCdWZmZXIsCisgICAgX0luXyBCT09MRUFOIFNlY3VyZWQKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgUE5FVF9CVUZGRVJfTElTVCBOZXRCdWZmZXJMaXN0ID0gTlVMTDsKKyAgICBQTkVUX0JVRkZFUiBOZXRCdWZmZXIgPSBOVUxMOworICAgIFVMT05HIE5ldEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgUFVDSEFSIERhdGFCdWZmZXIgPSBOVUxMOworICAgIFBVQ0hBUiBJcERhdGFCdWZmZXIgPSBOVUxMOworICAgIHNwaW5lbF9zc2l6ZV90IFBhY2tlZExlbmd0aDsKKyAgICBJUFY2X0hFQURFUiogdjZIZWFkZXI7CisKKyAgICBOZXRCdWZmZXJMaXN0ID0KKyAgICAgICAgTmRpc0FsbG9jYXRlTmV0QnVmZmVyQW5kTmV0QnVmZmVyTGlzdCgKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wsICAgICAgICAgICAgLy8gUG9vbEhhbmRsZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0U2l6ZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0QmFja0ZpbGwKKyAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWRsQ2hhaW4KKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YU9mZnNldAorICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhTGVuZ3RoCisgICAgICAgICAgICApOworICAgIGlmIChOZXRCdWZmZXJMaXN0ID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBjcmVhdGUgY29tbWFuZCBOZXRCdWZmZXJMaXN0Iik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEluaXRpYWxpemUgTmV0QnVmZmVyIGZpZWxkcworICAgIE5ldEJ1ZmZlciA9IE5FVF9CVUZGRVJfTElTVF9GSVJTVF9OQihOZXRCdWZmZXJMaXN0KTsKKyAgICBORVRfQlVGRkVSX0NVUlJFTlRfTURMKE5ldEJ1ZmZlcikgPSBOVUxMOworICAgIE5FVF9CVUZGRVJfQ1VSUkVOVF9NRExfT0ZGU0VUKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9EQVRBX09GRlNFVChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0ZJUlNUX01ETChOZXRCdWZmZXIpID0gTlVMTDsKKworICAgIC8vIENhbGN1bGF0ZSBsZW5ndGggb2YgTmV0QnVmZmVyCisgICAgTmV0QnVmZmVyTGVuZ3RoID0gMjAgKyBJcE5ldEJ1ZmZlci0+RGF0YUxlbmd0aDsKKyAgICBpZiAoTmV0QnVmZmVyTGVuZ3RoIDwgNjQpIE5ldEJ1ZmZlckxlbmd0aCA9IDY0OworICAgIAorICAgIC8vIEFsbG9jYXRlIHRoZSBOZXRCdWZmZXIgZm9yIE5ldEJ1ZmZlckxpc3QKKyAgICBpZiAoTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBOZXRCdWZmZXJMZW5ndGgsIDAsIE5VTEwpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBOZXRCdWZmZXIgPSBOVUxMOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgTkIgZm9yIGNvbW1hbmQgTmV0QnVmZmVyTGlzdCwgJXUgYnl0ZXMiLCBOZXRCdWZmZXJMZW5ndGgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciBmb3IgdGhlIGhlYWRlciBkYXRhCisgICAgRGF0YUJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBOZXRCdWZmZXJMZW5ndGgsIE5VTEwsIDEsIDApOworICAgIE5UX0FTU0VSVChEYXRhQnVmZmVyKTsKKyAgICAKKyAgICAvLyBTYXZlIHRoZSB0cnVlIE5ldEJ1ZmZlciBsZW5ndGggaW4gdGhlIHByb3RvY29sIHJlc2VydmVkCisgICAgTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzBdID0gKFBWT0lEKU5ldEJ1ZmZlckxlbmd0aDsKKyAgICBOZXRCdWZmZXItPkRhdGFMZW5ndGggPSAwOworCisgICAgLy8gUGFjayB0aGUgaGVhZGVyLCBjb21tYW5kIGFuZCBrZXkKKyAgICBQYWNrZWRMZW5ndGggPSAKKyAgICAgICAgc3BpbmVsX2RhdGF0eXBlX3BhY2soCisgICAgICAgICAgICBEYXRhQnVmZmVyLCAKKyAgICAgICAgICAgIE5ldEJ1ZmZlckxlbmd0aCwgCisgICAgICAgICAgICAiQ2lpIiwgCisgICAgICAgICAgICAoc3BpbmVsX3RpZF90KShTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wKSwgCisgICAgICAgICAgICAoVUlOVClTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULCAKKyAgICAgICAgICAgIChTZWN1cmVkID8gU1BJTkVMX1BST1BfU1RSRUFNX05FVCA6IFNQSU5FTF9QUk9QX1NUUkVBTV9ORVRfSU5TRUNVUkUpKTsKKyAgICBpZiAoUGFja2VkTGVuZ3RoIDwgMCB8fCBQYWNrZWRMZW5ndGggKyBOZXRCdWZmZXItPkRhdGFMZW5ndGggPiBOZXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIE5UX0FTU0VSVChQYWNrZWRMZW5ndGggPj0gMyk7CisgICAgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoICs9IChVTE9ORylQYWNrZWRMZW5ndGg7CisgICAgCisgICAgLy8gQ29weSBvdmVyIHRoZSBkYXRhIGxlbmd0aAorICAgIERhdGFCdWZmZXJbTmV0QnVmZmVyLT5EYXRhTGVuZ3RoKzFdID0gKCgoVVNIT1JUKUlwTmV0QnVmZmVyLT5EYXRhTGVuZ3RoKSA+PiA4KSAmIDB4ZmY7CisgICAgRGF0YUJ1ZmZlcltOZXRCdWZmZXItPkRhdGFMZW5ndGhdICAgPSAoKChVU0hPUlQpSXBOZXRCdWZmZXItPkRhdGFMZW5ndGgpID4+IDApICYgMHhmZjsKKyAgICBOZXRCdWZmZXItPkRhdGFMZW5ndGggKz0gMjsKKyAgICAKKyAgICB2NkhlYWRlciA9IChJUFY2X0hFQURFUiopKERhdGFCdWZmZXIgKyBOZXRCdWZmZXItPkRhdGFMZW5ndGgpOworCisgICAgLy8gQ29weSB0aGUgSVAgcGFja2V0IGRhdGEKKyAgICBJcERhdGFCdWZmZXIgPSAoUFVDSEFSKU5kaXNHZXREYXRhQnVmZmVyKElwTmV0QnVmZmVyLCBJcE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCwgdjZIZWFkZXIsIDEsIDApOworICAgIGlmIChJcERhdGFCdWZmZXIgIT0gKFBVQ0hBUil2NkhlYWRlcikKKyAgICB7CisgICAgICAgIFJ0bENvcHlNZW1vcnkodjZIZWFkZXIsIElwRGF0YUJ1ZmZlciwgSXBOZXRCdWZmZXItPkRhdGFMZW5ndGgpOworICAgIH0KKworICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCArPSBJcE5ldEJ1ZmZlci0+RGF0YUxlbmd0aDsKKworICAgIC8vIEdyYWIgYSByZWYgZm9yIHJ1bmRvd24gcHJvdGVjdGlvbgorICAgIGlmICghRXhBY3F1aXJlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPmNtZFJ1bmRvd24pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9OT1RfUkVBRFk7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWNxdWlyZSBydW5kb3duIHByb3RlY3Rpb24iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgSVA2X1NFTkQ6ICVwIDogJSFJUFY2QUREUiEgPT4gJSFJUFY2QUREUiEgKCV1IGJ5dGVzKSIsIAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsIE5ldEJ1ZmZlckxpc3QsICZ2NkhlYWRlci0+U291cmNlQWRkcmVzcywgJnY2SGVhZGVyLT5EZXN0aW5hdGlvbkFkZHJlc3MsIAorICAgICAgICAgICAgICAgIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoSXBOZXRCdWZmZXIpKTsKKworICAgIC8vIFNlbmQgdGhlIE5CTCBkb3duCisgICAgTmRpc0ZTZW5kTmV0QnVmZmVyTGlzdHMoCisgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgCisgICAgICAgIE5ldEJ1ZmZlckxpc3QsIAorICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsIAorICAgICAgICBEaXNwYXRjaExldmVsID8gTkRJU19TRU5EX0ZMQUdTX0RJU1BBVENIX0xFVkVMIDogMCk7CisKKyAgICAvLyBDbGVhciBsb2NhbCB2YXJpYWJsZSBiZWNhdXNlIHdlIGRvbid0IG93biB0aGUgTkJMIGFueSBtb3JlCisgICAgTmV0QnVmZmVyTGlzdCA9IE5VTEw7CisKK2V4aXQ6CisKKyAgICBpZiAoTmV0QnVmZmVyTGlzdCkKKyAgICB7CisgICAgICAgIGlmIChOZXRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCA9IChVTE9ORykoVUxPTkdfUFRSKU5ldEJ1ZmZlci0+UHJvdG9jb2xSZXNlcnZlZFswXTsKKyAgICAgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoLCBUUlVFLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlckxpc3QoTmV0QnVmZmVyTGlzdCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmQ21kU2VuZE1hY0ZyYW1lQ29tcGxldGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCBDb250ZXh0LAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKENvbnRleHQpOworCisgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworCisgICAgaWYgKERhdGEgJiYgQ29tbWFuZCA9PSBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMpCisgICAgeworICAgICAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX0xBU1RfU1RBVFVTKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsX3N0YXR1cyA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBwYWNrZWRfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCAiaSIsICZzcGluZWxfc3RhdHVzKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRfbGVuID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BpbmVsX3N0YXR1cyA9PSBTUElORUxfU1RBVFVTX09LKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICAgICAgICAgICh2b2lkKXNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBEYXRhICsgcGFja2VkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGggLSAoc3BpbmVsX3NpemVfdClwYWNrZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RnJhbWVQZW5kaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IFNwaW5lbFN0YXR1c1RvVGhyZWFkRXJyb3Ioc3BpbmVsX3N0YXR1cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50CisgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmQ21kU2VuZE1hY0ZyYW1lQXN5bmMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICBwRmlsdGVyLAorICAgIF9Jbl8gb3RSYWRpb0ZyYW1lKiAgUGFja2V0CisgICAgKQoreworICAgIC8vIFJlc2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50CisgICAgS2VSZXNldEV2ZW50KCZwRmlsdGVyLT5TZW5kTmV0QnVmZmVyTGlzdENvbXBsZXRlKTsKKyAgICBwRmlsdGVyLT5TZW5kUGVuZGluZyA9IFRSVUU7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNlbmRBc3luYygKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICBvdEx3ZkNtZFNlbmRNYWNGcmFtZUNvbXBsZXRlLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgU1BJTkVMX1BST1BfU1RSRUFNX1JBVywKKyAgICAgICAgICAgIFBhY2tldC0+bUxlbmd0aCArIDIwLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUworICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUywKKyAgICAgICAgICAgIFBhY2tldC0+bVBzZHUsCisgICAgICAgICAgICAodWludDMyX3QpUGFja2V0LT5tTGVuZ3RoLAorICAgICAgICAgICAgUGFja2V0LT5tQ2hhbm5lbCwKKyAgICAgICAgICAgIFBhY2tldC0+bVBvd2VyCisgICAgICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfU1RSRUFNX1JBVyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9BQk9SVDsKKyAgICAgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7CisgICAgfQorfQorCisvLworLy8gU2VuZCBTeW5jaHJvbm91cyBTcGluZWwgRW5jb2RlZCBDb21tYW5kCisvLworCit0eXBlZGVmIHN0cnVjdCBfU1BJTkVMX0dFVF9QUk9QX0NPTlRFWFQKK3sKKyAgICBLRVZFTlQgICAgICAgICAgICAgIENvbXBsZXRpb25FdmVudDsKKyAgICBzcGluZWxfcHJvcF9rZXlfdCAgIEtleTsKKyAgICBQVk9JRCAgICAgICAgICAgICAgKkRhdGFCdWZmZXI7CisgICAgY29uc3QgY2hhciogICAgICAgICBGb3JtYXQ7CisgICAgdmFfbGlzdCAgICAgICAgICAgICBBcmdzOworICAgIE5UU1RBVFVTICAgICAgICAgICAgU3RhdHVzOworfSBTUElORUxfR0VUX1BST1BfQ09OVEVYVDsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmR2V0UHJvcEhhbmRsZXIoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCBDb250ZXh0LAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBTUElORUxfR0VUX1BST1BfQ09OVEVYVCogQ21kQ29udGV4dCA9IChTUElORUxfR0VUX1BST1BfQ09OVEVYVCopQ29udGV4dDsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIktleT0ldSIsIChVTE9ORylLZXkpOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRmlsdGVyKTsKKyAgICAKKyAgICBpZiAoRGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX0NBTkNFTExFRDsKKyAgICB9CisgICAgZWxzZSBpZiAoQ29tbWFuZCAhPSBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMpCisgICAgeworICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorICAgIGVsc2UgaWYgKEtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICB7CisgICAgICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxfc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgImkiLCAmc3BpbmVsX3N0YXR1cyk7CisgICAgICAgIGlmIChwYWNrZWRfbGVuIDwgMCB8fCAoVUxPTkcpcGFja2VkX2xlbiA+IERhdGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RFcnJvciBlcnJvckNvZGUgPSBTcGluZWxTdGF0dXNUb1RocmVhZEVycm9yKHNwaW5lbF9zdGF0dXMpOworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkdldCBrZXk9JXUgZmFpbGVkIHdpdGggJSFvdEVycm9yISIsIENtZENvbnRleHQtPktleSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKEtleSA9PSBDbWRDb250ZXh0LT5LZXkpCisgICAgeworICAgICAgICBpZiAoQ21kQ29udGV4dC0+RGF0YUJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgKkNtZENvbnRleHQtPkRhdGFCdWZmZXIgPSBGSUxURVJfQUxMT0NfTUVNKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgRGF0YUxlbmd0aCk7CisgICAgICAgICAgICBpZiAoKkNtZENvbnRleHQtPkRhdGFCdWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoKkNtZENvbnRleHQtPkRhdGFCdWZmZXIsIERhdGEsIERhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIERhdGEgPSAodWludDhfdCopKkNtZENvbnRleHQtPkRhdGFCdWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcGluZWxfc3NpemVfdCBwYWNrZWRfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3Z1bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgQ21kQ29udGV4dC0+Rm9ybWF0LCBDbWRDb250ZXh0LT5BcmdzKTsKKyAgICAgICAgaWYgKHBhY2tlZF9sZW4gPCAwIHx8IChVTE9ORylwYWNrZWRfbGVuID4gRGF0YUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDbWRDb250ZXh0LT5TdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50CisgICAgS2VTZXRFdmVudCgmQ21kQ29udGV4dC0+Q29tcGxldGlvbkV2ZW50LCAwLCBGQUxTRSk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZEdldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX091dF9vcHRfIFBWT0lEICpEYXRhQnVmZmVyLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXM7CisgICAgTEFSR0VfSU5URUdFUiBXYWl0VGltZW91dDsKKyAgICBzcGluZWxfdGlkX3QgdGlkOworCisgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IHN0cnVjdHVyZQorICAgIFNQSU5FTF9HRVRfUFJPUF9DT05URVhUIENvbnRleHQ7CisgICAgS2VJbml0aWFsaXplRXZlbnQoJkNvbnRleHQuQ29tcGxldGlvbkV2ZW50LCBTeW5jaHJvbml6YXRpb25FdmVudCwgRkFMU0UpOworICAgIENvbnRleHQuS2V5ID0gS2V5OworICAgIENvbnRleHQuRGF0YUJ1ZmZlciA9IERhdGFCdWZmZXI7CisgICAgQ29udGV4dC5Gb3JtYXQgPSBwYWNrX2Zvcm1hdDsKKyAgICBDb250ZXh0LlN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIHZhX3N0YXJ0KENvbnRleHQuQXJncywgcGFja19mb3JtYXQpOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiS2V5PSV1IiwgKFVMT05HKUtleSk7CisKKyAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRyYW5zYWN0aW9uCisgICAgc3RhdHVzID0gCisgICAgICAgIG90THdmQ21kU2VuZEFzeW5jVigKKyAgICAgICAgICAgIHBGaWx0ZXIsIAorICAgICAgICAgICAgb3RMd2ZHZXRQcm9wSGFuZGxlciwgCisgICAgICAgICAgICAmQ29udGV4dCwKKyAgICAgICAgICAgICZ0aWQsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULCAKKyAgICAgICAgICAgIEtleSwgCisgICAgICAgICAgICAwLCAKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGEgMSBzZWNvbmQgd2FpdCB0aW1lb3V0CisgICAgICAgIFdhaXRUaW1lb3V0LlF1YWRQYXJ0ID0gLTEwMDAgKiAxMDAwMDsKKworICAgICAgICAvLyBXYWl0IGZvciB0aGUgcmVzcG9uc2UKKyAgICAgICAgaWYgKEtlV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICAgICAmQ29udGV4dC5Db21wbGV0aW9uRXZlbnQsCisgICAgICAgICAgICAgICAgRXhlY3V0aXZlLAorICAgICAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgJldhaXRUaW1lb3V0KSAhPSBTVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFvdEx3ZkNtZENhbmNlbChwRmlsdGVyLCBGQUxTRSwgdGlkKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBLZVdhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICAgICAgICAgICZDb250ZXh0LkNvbXBsZXRpb25FdmVudCwKKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0aXZlLAorICAgICAgICAgICAgICAgICAgICBLZXJuZWxNb2RlLAorICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQ29udGV4dC5TdGF0dXMgPSBzdGF0dXM7CisgICAgfQorICAgIAorICAgIHZhX2VuZChDb250ZXh0LkFyZ3MpOworCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgQ29udGV4dC5TdGF0dXMpOworCisgICAgcmV0dXJuIENvbnRleHQuU3RhdHVzOworfQorCit0eXBlZGVmIHN0cnVjdCBfU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQKK3sKKyAgICBLRVZFTlQgICAgICAgICAgICAgIENvbXBsZXRpb25FdmVudDsKKyAgICBVSU5UICAgICAgICAgICAgICAgIEV4cGVjdGVkUmVzdWx0Q29tbWFuZDsKKyAgICBzcGluZWxfcHJvcF9rZXlfdCAgIEtleTsKKyAgICBOVFNUQVRVUyAgICAgICAgICAgIFN0YXR1czsKK30gU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQ7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZlNldFByb3BIYW5kbGVyKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gUFZPSUQgQ29udGV4dCwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgKKyAgICApCit7CisgICAgU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQqIENtZENvbnRleHQgPSAoU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQqKUNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJLZXk9JXUiLCAoVUxPTkcpS2V5KTsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIocEZpbHRlcik7CisgICAgCisgICAgaWYgKERhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19DQU5DRUxMRUQ7CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICYmIEtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICB7CisgICAgICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxfc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgImkiLCAmc3BpbmVsX3N0YXR1cyk7CisgICAgICAgIGlmIChwYWNrZWRfbGVuIDwgMCB8fCAoVUxPTkcpcGFja2VkX2xlbiA+IERhdGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RFcnJvciBlcnJvckNvZGUgPSBTcGluZWxTdGF0dXNUb1RocmVhZEVycm9yKHNwaW5lbF9zdGF0dXMpOworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlNldCBrZXk9JXUgZmFpbGVkIHdpdGggJSFvdEVycm9yISIsIENtZENvbnRleHQtPktleSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgIT0gQ21kQ29udGV4dC0+RXhwZWN0ZWRSZXN1bHRDb21tYW5kKQorICAgIHsKKyAgICAgICAgTlRfQVNTRVJUKEZBTFNFKTsKKyAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIH0KKyAgICBlbHNlIGlmIChLZXkgPT0gQ21kQ29udGV4dC0+S2V5KQorICAgIHsKKyAgICAgICAgQ21kQ29udGV4dC0+U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE5UX0FTU0VSVChGQUxTRSk7CisgICAgICAgIENtZENvbnRleHQtPlN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvbXBsZXRpb24gZXZlbnQKKyAgICBLZVNldEV2ZW50KCZDbWRDb250ZXh0LT5Db21wbGV0aW9uRXZlbnQsIDAsIEZBTFNFKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2V0UHJvcFYoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBVSU5UIENvbW1hbmQsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgX0luX29wdF8gdmFfbGlzdCBhcmdzCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1czsKKyAgICBMQVJHRV9JTlRFR0VSIFdhaXRUaW1lb3V0OworICAgIHNwaW5lbF90aWRfdCB0aWQ7CisKKyAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgc3RydWN0dXJlCisgICAgU1BJTkVMX1NFVF9QUk9QX0NPTlRFWFQgQ29udGV4dDsKKyAgICBLZUluaXRpYWxpemVFdmVudCgmQ29udGV4dC5Db21wbGV0aW9uRXZlbnQsIFN5bmNocm9uaXphdGlvbkV2ZW50LCBGQUxTRSk7CisgICAgQ29udGV4dC5LZXkgPSBLZXk7CisgICAgQ29udGV4dC5TdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIkNtZD0ldSBLZXk9JXUiLCBDb21tYW5kLCAoVUxPTkcpS2V5KTsKKworICAgIGlmIChDb21tYW5kID09IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQpCisgICAgeworICAgICAgICBDb250ZXh0LkV4cGVjdGVkUmVzdWx0Q29tbWFuZCA9IFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUzsKKyAgICB9CisgICAgZWxzZSBpZiAoQ29tbWFuZCA9PSBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJUKQorICAgIHsKKyAgICAgICAgQ29udGV4dC5FeHBlY3RlZFJlc3VsdENvbW1hbmQgPSBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQ7CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRSkKKyAgICB7CisgICAgICAgIENvbnRleHQuRXhwZWN0ZWRSZXN1bHRDb21tYW5kID0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgfQorCisgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0cmFuc2FjdGlvbgorICAgIHN0YXR1cyA9IAorICAgICAgICBvdEx3ZkNtZFNlbmRBc3luY1YoCisgICAgICAgICAgICBwRmlsdGVyLCAKKyAgICAgICAgICAgIG90THdmU2V0UHJvcEhhbmRsZXIsIAorICAgICAgICAgICAgJkNvbnRleHQsIAorICAgICAgICAgICAgJnRpZCwKKyAgICAgICAgICAgIENvbW1hbmQsCisgICAgICAgICAgICBLZXksIAorICAgICAgICAgICAgOCwgCisgICAgICAgICAgICBwYWNrX2Zvcm1hdCwKKyAgICAgICAgICAgIGFyZ3MpOworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICAvLyBTZXQgYSAxIHNlY29uZCB3YWl0IHRpbWVvdXQKKyAgICAgICAgV2FpdFRpbWVvdXQuUXVhZFBhcnQgPSAtMTAwMCAqIDEwMDAwOworCisgICAgICAgIC8vIFdhaXQgZm9yIHRoZSByZXNwb25zZQorICAgICAgICBpZiAoS2VXYWl0Rm9yU2luZ2xlT2JqZWN0KAorICAgICAgICAgICAgICAgICZDb250ZXh0LkNvbXBsZXRpb25FdmVudCwKKyAgICAgICAgICAgICAgICBFeGVjdXRpdmUsCisgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAmV2FpdFRpbWVvdXQpICE9IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW90THdmQ21kQ2FuY2VsKHBGaWx0ZXIsIEZBTFNFLCB0aWQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEtlV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgJkNvbnRleHQuQ29tcGxldGlvbkV2ZW50LAorICAgICAgICAgICAgICAgICAgICBFeGVjdXRpdmUsCisgICAgICAgICAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDb250ZXh0LlN0YXR1cyA9IHN0YXR1czsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBDb250ZXh0LlN0YXR1cyk7CisKKyAgICByZXR1cm4gQ29udGV4dC5TdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFNldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gb3RMd2ZDbWRTZXRQcm9wVihwRmlsdGVyLCBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULCBLZXksIHBhY2tfZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kSW5zZXJ0UHJvcCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwKKyAgICAuLi4KKyAgICApCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIHBhY2tfZm9ybWF0KTsKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBvdEx3ZkNtZFNldFByb3BWKHBGaWx0ZXIsIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlQsIEtleSwgcGFja19mb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZDbWRSZW1vdmVQcm9wKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9vcHRfIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LAorICAgIC4uLgorICAgICkKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgcGFja19mb3JtYXQpOworICAgIE5UU1RBVFVTIHN0YXR1cyA9IG90THdmQ21kU2V0UHJvcFYocEZpbHRlciwgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRSwgS2V5LCBwYWNrX2Zvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8vCisvLyBHZW5lcmFsIFNwaW5lbCBIZWxwZXJzCisvLworCitvdEVycm9yCitTcGluZWxTdGF0dXNUb1RocmVhZEVycm9yKAorICAgIHNwaW5lbF9zdGF0dXNfdCBlcnJvcgorICAgICkKK3sKKyAgICBvdEVycm9yIHJldDsKKworICAgIHN3aXRjaCAoZXJyb3IpCisgICAgeworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19PSzoKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfRkFJTEVEOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19EUk9QUEVEOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9EUk9QOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19OT01FTToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfQlVTWToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfQlVTWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1I6CisgICAgICAgIHJldCA9IE9UX0VSUk9SX1BBUlNFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQ6CisgICAgICAgIHJldCA9IE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURToKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfTk9fQUNLOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9OT19BQ0s7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0NDQV9GQUlMVVJFOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19BTFJFQURZOgorICAgICAgICByZXQgPSBPVF9FUlJPUl9BTFJFQURZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JVEVNX05PVF9GT1VORDoKKyAgICAgICAgcmV0ID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChlcnJvciA+PSBTUElORUxfU1RBVFVTX1NUQUNLX05BVElWRV9fQkVHSU4gJiYgZXJyb3IgPD0gU1BJTkVMX1NUQVRVU19TVEFDS19OQVRJVkVfX0VORCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gKG90RXJyb3IpKGVycm9yIC0gU1BJTkVMX1NUQVRVU19TVEFDS19OQVRJVkVfX0JFR0lOKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE9UX0VSUk9SX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitCT09MRUFOCit0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICBjb25zdCB1aW50OF90ICpkYXRhX2luLAorICAgIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV92dW5wYWNrKGRhdGFfaW4sIGRhdGFfbGVuLCBwYWNrX2Zvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgcmV0dXJuICEocGFja2VkX2xlbiA8IDAgfHwgKHNwaW5lbF9zaXplX3QpcGFja2VkX2xlbiA+IGRhdGFfbGVuKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9jb21tYW5kLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvY29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzNkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvY29tbWFuZC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIGZvciBzZW5kaW5nL3JlY2VpdmluZyBTcGluZWwgY29tbWFuZHMgdG8gdGhlIG1pbmlwb3J0LgorICovCisKKyNpZm5kZWYgX0NPTU1BTkRfSF8KKyNkZWZpbmUgX0NPTU1BTkRfSF8KKworLy8KKy8vIEluaXRpYWxpemF0aW9uCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitORElTX1NUQVRVUyAKK290THdmQ21kSW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZkNtZFVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFJlc2V0RGV2aWNlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBmQXN5bmMKKyAgICApOworCisvLworLy8gUmVjZWl2ZSBTcGluZWwgRW5jb2RlZCBDb21tYW5kCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQordm9pZAorb3RMd2ZDbWRSZWN2ZWl2ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEJ1ZmZlckxlbmd0aCkgY29uc3QgUFVDSEFSIEJ1ZmZlciwKKyAgICBfSW5fIFVMT05HIEJ1ZmZlckxlbmd0aAorICAgICk7CisKKy8vCisvLyBTZW5kIEFzeW5jIFNwaW5lbCBFbmNvZGVkIENvbW1hbmQKKy8vCisKK3R5cGVkZWYKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECisoU1BJTkVMX0NNRF9IQU5ETEVSKSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIFBWT0lEIENvbnRleHQsCisgICAgX0luXyBVSU5UIENvbW1hbmQsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kU2VuZEFzeW5jVigKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fb3B0XyBTUElORUxfQ01EX0hBTkRMRVIgKkhhbmRsZXIsCisgICAgX0luX29wdF8gUFZPSUQgSGFuZGxlckNvbnRleHQsCisgICAgX091dF9vcHRfIHNwaW5lbF90aWRfdCAqcFRpZCwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIF9Jbl9vcHRfIHZhX2xpc3QgYXJncworICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFNlbmRBc3luYygKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fb3B0XyBTUElORUxfQ01EX0hBTkRMRVIgKkhhbmRsZXIsCisgICAgX0luX29wdF8gUFZPSUQgSGFuZGxlckNvbnRleHQsCisgICAgX091dF9vcHRfIHNwaW5lbF90aWRfdCAqcFRpZCwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitCT09MRUFOCitvdEx3ZkNtZENhbmNlbCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF90aWRfdCB0aWQKKyAgICApOworCisvLworLy8gU2VuZCBQYWNrZXQvRnJhbWUKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZDbWRTZW5kSXA2UGFja2V0QXN5bmMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBQTkVUX0JVRkZFUiBJcE5ldEJ1ZmZlciwKKyAgICBfSW5fIEJPT0xFQU4gU2VjdXJlZAorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmQ21kU2VuZE1hY0ZyYW1lQXN5bmMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBvdFJhZGlvRnJhbWUqIFBhY2tldAorICAgICk7CisKKy8vCisvLyBTZW5kIFN5bmNocm9ub3VzIFNwaW5lbCBFbmNvZGVkIENvbW1hbmQKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZEdldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX091dF9vcHRfIFBWT0lEICpEYXRhQnVmZmVyLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZFNldFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZkNtZEluc2VydFByb3AoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmQ21kUmVtb3ZlUHJvcCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwKKyAgICAuLi4KKyAgICApOworCisvLworLy8gR2VuZXJhbCBTcGluZWwgSGVscGVycworLy8KKworb3RFcnJvcgorU3BpbmVsU3RhdHVzVG9UaHJlYWRFcnJvcigKKyAgICBzcGluZWxfc3RhdHVzX3QgZXJyb3IKKyAgICApOworCitCT09MRUFOCit0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICBjb25zdCB1aW50OF90ICpkYXRhX2luLAorICAgIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsCisgICAgLi4uCisgICAgKTsKKworI2VuZGlmICAvL19DT01NQU5EX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZGF0YXBhdGguYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kYXRhcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWI2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZGF0YXBhdGguYwpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgaGFuZGxpbmcgTmV0QnVmZmVyTGlzdHMgaW4KKyAqICB0aGUgZGF0YSBwYXRoLgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAiZGF0YXBhdGgudG1oIgorCisjaWZkZWYgTE9HX0JVRkZFUlMKKworX19mb3JjZWlubGluZSBDSEFSIFRvSGV4KENIQVIgbikKK3sKKyAgICBpZiAobiA+IDkpIHJldHVybiAnQScgKyAobiAtIDEwKTsKKyAgICBlbHNlICAgICAgIHJldHVybiAnMCcgKyBuOworfQorCisjZGVmaW5lIG90TG9nTGluZUxlbmd0aCAzMgorCisvLyBIZWxwZXIgdG8gbG9nIGEgYnVmZmVyCit2b2lkCitvdExvZ0J1ZmZlcigKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEJ1ZmZlckxlbmd0aCkgUFVDSEFSIEJ1ZmZlciwKKyAgICBfSW5fICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkcgIEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBVTE9ORyBpbmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgQnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICAgICAgQ0hBUiBzekJ1ZmZlcltvdExvZ0xpbmVMZW5ndGggKiA0XSA9ICIgICI7CisgICAgICAgIFBDSEFSIGJ1ZiA9IHN6QnVmZmVyICsgMjsKKyAgICAgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IG90TG9nTGluZUxlbmd0aCAmJiBpICsgaW5kZXggPCBCdWZmZXJMZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYnVmWzBdID0gVG9IZXgoQnVmZmVyW2kgKyBpbmRleF0gPj4gNCk7CisgICAgICAgICAgICBidWZbMV0gPSBUb0hleChCdWZmZXJbaSArIGluZGV4XSAmIDB4MEYpOworICAgICAgICAgICAgYnVmWzJdID0gJyAnOworICAgICAgICAgICAgYnVmICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgYnVmWzBdID0gMDsKKworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICIlcyIsIHN6QnVmZmVyKTsKKyAgICAgICAgaW5kZXggKz0gb3RMb2dMaW5lTGVuZ3RoOworICAgIH0KK30KKworI2VuZGlmCisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0ZpbHRlclNlbmROZXRCdWZmZXJMaXN0c0NvbXBsZXRlKAorICAgIE5ESVNfSEFORExFICAgICAgICAgRmlsdGVyTW9kdWxlQ29udGV4dCwKKyAgICBQTkVUX0JVRkZFUl9MSVNUICAgIE5ldEJ1ZmZlckxpc3RzLAorICAgIFVMT05HICAgICAgICAgICAgICAgU2VuZENvbXBsZXRlRmxhZ3MKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZW5kIGNvbXBsZXRlIGhhbmRsZXIKKworICAgIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHdoZW5ldmVyIHRoZSBsb3dlciBsYXllciBpcyBmaW5pc2hlZCBwcm9jZXNzaW5nCisgICAgc2VudCBORVRfQlVGRkVSX0xJU1RzLiAgSWYgdGhlIGZpbHRlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGludm9sdmVkIGluIHRoZQorICAgIHNlbmQgcGF0aCwgeW91IHNob3VsZCByZW1vdmUgdGhpcyByb3V0aW5lIGFuZCB0aGUgRmlsdGVyU2VuZE5ldEJ1ZmZlckxpc3RzCisgICAgcm91dGluZS4gIE5ESVMgd2lsbCBwYXNzIGFsb25nIHNlbmQgcGFja2V0cyBvbiBiZWhhbGYgb2YgeW91ciBmaWx0ZXIgbW9yZQorICAgIGVmZmljaWVudGx5IHRoYW4gdGhlIGZpbHRlciBjYW4uCisKK0FyZ3VtZW50czoKKworICAgIEZpbHRlck1vZHVsZUNvbnRleHQgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0CisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgLSBhIGNoYWluIG9mIE5CTHMgdGhhdCBhcmUgYmVpbmcgcmV0dXJuZWQgdG8geW91CisgICAgU2VuZENvbXBsZXRlRmxhZ3MgICAgICAgLSBmbGFncyAoc2VlIGRvY3VtZW50YXRpb24pCisKKy0tKi8KK3sKKyAgICBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisgICAgCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBOQkw6ICVwICUhU1RBVFVTISIsIEZpbHRlck1vZHVsZUNvbnRleHQsIE5ldEJ1ZmZlckxpc3RzLCBOZXRCdWZmZXJMaXN0cy0+U3RhdHVzKTsKKworICAgIFBORVRfQlVGRkVSX0xJU1QgTkJMID0gTmV0QnVmZmVyTGlzdHM7CisgICAgd2hpbGUgKE5CTCkKKyAgICB7CisgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgTmV4dE5CTCA9IE5CTC0+TmV4dDsKKyAgICAgICAgUE5FVF9CVUZGRVIgTmV0QnVmZmVyID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKE5CTCk7CisKKyAgICAgICAgLy8gQ2FuY2VsIGNvbW1hbmQgaWYgd2UgZmFpbGVkIHRvIHNlbmQgdGhlIE5CTAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTkJMLT5TdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfdGlkX3QgdGlkID0gKHNwaW5lbF90aWRfdCkoVUxPTkdfUFRSKU5ldEJ1ZmZlci0+UHJvdG9jb2xSZXNlcnZlZFsxXTsKKyAgICAgICAgICAgIGlmICh0aWQgIT0gMCkKKyAgICAgICAgICAgIHsKKyNpZmRlZiBDT01NQU5EX0lOSVRfUkVUUlkKKyAgICAgICAgICAgICAgICBOVF9BU1NFUlQocEZpbHRlci0+Y21kSW5pdFRyeUNvdW50IDwgOSB8fCBOQkwtPlN0YXR1cyAhPSBORElTX1NUQVRVU19QQVVTRUQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgb3RMd2ZDbWRDYW5jZWwocEZpbHRlciwgTkRJU19URVNUX1NFTkRfQ09NUExFVEVfQVRfRElTUEFUQ0hfTEVWRUwoU2VuZENvbXBsZXRlRmxhZ3MpLCB0aWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTmV0QnVmZmVyLT5EYXRhTGVuZ3RoID0gKFVMT05HKShVTE9OR19QVFIpTmV0QnVmZmVyLT5Qcm90b2NvbFJlc2VydmVkWzBdOworICAgICAgICBOZGlzQWR2YW5jZU5ldEJ1ZmZlckRhdGFTdGFydChOZXRCdWZmZXIsIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOQkwpOworCisgICAgICAgIC8vIFJlbGVhc2UgdGhlIGNvbW1hbmQgcnVuZG93biBwcm90ZWN0aW9uCisgICAgICAgIEV4UmVsZWFzZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5jbWRSdW5kb3duKTsKKworICAgICAgICBOQkwgPSBOZXh0TkJMOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJTZW5kTmV0QnVmZmVyTGlzdHMoCisgICAgTkRJU19IQU5ETEUgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORVRfQlVGRkVSX0xJU1QgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgTkRJU19QT1JUX05VTUJFUiAgICBQb3J0TnVtYmVyLAorICAgIFVMT05HICAgICAgICAgICAgICAgU2VuZEZsYWdzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VuZCBOZXQgQnVmZmVyIExpc3QgaGFuZGxlcgorICAgIFRoaXMgZnVuY3Rpb24gaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGZpbHRlciBkcml2ZXJzLiBJZiBwcm92aWRlZCwgTkRJUworICAgIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRyYW5zbWl0IGEgbGlua2VkIGxpc3Qgb2YgTmV0QnVmZmVycywgZGVzY3JpYmVkIGJ5IGEKKyAgICBOZXRCdWZmZXJMaXN0LCBvdmVyIHRoZSBuZXR3b3JrLiBJZiB0aGlzIGhhbmRsZXIgaXMgTlVMTCwgTkRJUyB3aWxsIHNraXAgY2FsbGluZworICAgIHRoaXMgZmlsdGVyIHdoZW4gc2VuZGluZyBhIE5ldEJ1ZmZlckxpc3QgYW5kIHdpbGwgY2FsbCB0aGUgbmV4dCBsb3dlcgorICAgIGRyaXZlciBpbiB0aGUgc3RhY2suICBBIGZpbHRlciB0aGF0IGRvZXNuJ3QgcHJvdmlkZSBhIEZpbGVyU2VuZE5ldEJ1ZmZlckxpc3QKKyAgICBoYW5kbGVyIGNhbiBub3Qgb3JpZ2luYXRlIGEgc2VuZCBvbiBpdHMgb3duLgorCitBcmd1bWVudHM6CisKKyAgICBGaWx0ZXJNb2R1bGVDb250ZXh0ICAgICAtIG91ciBmaWx0ZXIgY29udGV4dCBhcmVhCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgLSBhIExpc3Qgb2YgTmV0QnVmZmVyTGlzdHMgdG8gc2VuZAorICAgIFBvcnROdW1iZXIgICAgICAgICAgICAgIC0gUG9ydCBOdW1iZXIgdG8gd2hpY2ggdGhpcyBzZW5kIGlzIHRhcmdldGVkCisgICAgU2VuZEZsYWdzICAgICAgICAgICAgICAgLSBzcGVjaWZpZXMgaWYgdGhlIGNhbGwgaXMgYXQgRElTUEFUQ0hfTEVWRUwKKworLS0qLworeworICAgIFBNU19GSUxURVIgICAgICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisgICAgQk9PTEVBTiAgICAgICAgICAgICBEaXNwYXRjaExldmVsID0gTkRJU19URVNUX1NFTkRfQVRfRElTUEFUQ0hfTEVWRUwoU2VuZEZsYWdzKTsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoUG9ydE51bWJlcik7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsIE5CTDogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0LCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICAvLyBUcnkgdG8gZ3JhYiBhIHJlZiBvbiB0aGUgZGF0YSBwYXRoIGZpcnN0LCB0byBtYWtlIHN1cmUgd2UgYXJlIGFsbG93ZWQKKyAgICBpZiAoIUV4QWNxdWlyZVJ1bmRvd25Qcm90ZWN0aW9uKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZhaWxpbmcgU2VuZE5ldEJ1ZmZlckxpc3RzIGJlY2F1c2UgZGF0YSBwYXRoIGlzbid0IGFjdGl2ZS4iKTsKKworICAgICAgICAvLyBJZ25vcmUgYW55IE5CTHMgd2UgZ2V0IGlmIHdlIGFyZW4ndCBhY3RpdmUgKGNhbid0IGdldCBhIHJlZikKKyAgICAgICAgUE5FVF9CVUZGRVJfTElTVCBDdXJyTmJsID0gTmV0QnVmZmVyTGlzdHM7CisgICAgICAgIHdoaWxlIChDdXJyTmJsKQorICAgICAgICB7CisgICAgICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gTkRJU19TVEFUVVNfUEFVU0VEOworICAgICAgICAgICAgQ3Vyck5ibCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChDdXJyTmJsKTsKKyAgICAgICAgfQorICAgICAgICBOZGlzRlNlbmROZXRCdWZmZXJMaXN0c0NvbXBsZXRlKAorICAgICAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlLAorICAgICAgICAgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgICAgICAgICBEaXNwYXRjaExldmVsID8gTkRJU19TRU5EX0NPTVBMRVRFX0ZMQUdTX0RJU1BBVENIX0xFVkVMIDogMAorICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluZGljYXRlIGEgbmV3IE5CTCB0byBwcm9jZXNzIG9uIG91ciB3b3JrZXIgdGhyZWFkCisgICAgICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3TmV0QnVmZmVyTGlzdHMoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsLAorICAgICAgICAgICAgICAgIE5ldEJ1ZmZlckxpc3RzCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgQ3Vyck5ibCA9IE5ldEJ1ZmZlckxpc3RzOworICAgICAgICAgICAgd2hpbGUgKEN1cnJOYmwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUE5FVF9CVUZGRVIgQ3Vyck5iID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKEN1cnJOYmwpOworICAgICAgICAgICAgICAgIHdoaWxlIChDdXJyTmIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdEx3ZkNtZFNlbmRJcDZQYWNrZXRBc3luYyhwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBDdXJyTmIsIFRSVUUpOworICAgICAgICAgICAgICAgICAgICBDdXJyTmIgPSBORVRfQlVGRkVSX05FWFRfTkIoQ3Vyck5iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICBDdXJyTmJsID0gTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKEN1cnJOYmwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBOZGlzRlNlbmROZXRCdWZmZXJMaXN0c0NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwKKyAgICAgICAgICAgICAgICBOZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsID8gTkRJU19TRU5EX0NPTVBMRVRFX0ZMQUdTX0RJU1BBVENIX0xFVkVMIDogMAorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZWxlYXNlIHRoZSBkYXRhIHBhdGggcmVmIG5vdworICAgICAgICBFeFJlbGVhc2VSdW5kb3duUHJvdGVjdGlvbigmcEZpbHRlci0+RXh0ZXJuYWxSZWZzKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0ZpbHRlckNhbmNlbFNlbmROZXRCdWZmZXJMaXN0cygKKyAgICBORElTX0hBTkRMRSAgICAgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBWT0lEICAgICAgICAgICAgICAgICAgIENhbmNlbElkCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGFueSBORVRfQlVGRkVSX0xJU1RzIHBlbmRlZCBpbiB0aGUgZmlsdGVyIGFuZCB0aGVuCisgICAgY2FsbHMgdGhlIE5kaXNGQ2FuY2VsU2VuZE5ldEJ1ZmZlckxpc3RzIHRvIHByb3BhZ2F0ZSB0aGUgY2FuY2VsIG9wZXJhdGlvbi4KKworICAgIElmIHlvdXIgZHJpdmVyIGRvZXMgbm90IHF1ZXVlIGFueSBzZW5kIE5CTHMsIHlvdSBtYXkgb21pdCB0aGlzIHJvdXRpbmUuCisgICAgTkRJUyB3aWxsIHByb3BhZ2F0ZSB0aGUgY2FuY2VsYXRpb24gb24geW91ciBiZWhhbGYgbW9yZSBlZmZpY2llbnRseS4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVyTW9kdWxlQ29udGV4dCAgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0IGFyZWEuCisgICAgQ2FuY2VsSWQgICAgICAgICAgICAgICAgIC0gYW4gaWRlbnRpZmllciBmb3IgYWxsIE5CTHMgdGhhdCBzaG91bGQgYmUgZGVxdWV1ZWQKKworKi8KK3sKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSAoUE1TX0ZJTFRFUilGaWx0ZXJNb2R1bGVDb250ZXh0OworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBDYW5jZWxJZDogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0LCBDYW5jZWxJZCk7CisKKyAgICAvLyBPbmx5IGNhbmNlbCBpZiB3ZSBhcmUgJ1RocmVhZCBvbiBIb3N0Jywgb3RoZXJ3aXNlIHdlIGRvIGV2ZXJ5dGhpbmcgaW5saW5lCisgICAgaWYgKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUpCisgICAgeworICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV0QnVmZmVyTGlzdHNDYW5jZWxsZWQocEZpbHRlciwgQ2FuY2VsSWQpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0cygKKyAgICBORElTX0hBTkRMRSAgICAgICAgIEZpbHRlck1vZHVsZUNvbnRleHQsCisgICAgUE5FVF9CVUZGRVJfTElTVCAgICBOZXRCdWZmZXJMaXN0cywKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFJldHVybkZsYWdzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMgaGFuZGxlci4KKyAgICBGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0cyBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbi4gSWYgcHJvdmlkZWQsIE5ESVMgY2FsbHMKKyAgICBGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0cyB0byByZXR1cm4gdGhlIG93bmVyc2hpcCBvZiBvbmUgb3IgbW9yZSBOZXRCdWZmZXJMaXN0cworICAgIGFuZCB0aGVpciBlbWJlZGRlZCBOZXRCdWZmZXJzIHRvIHRoZSBmaWx0ZXIgZHJpdmVyLiBJZiB0aGlzIGhhbmRsZXIgaXMgTlVMTCwgTkRJUworICAgIHdpbGwgc2tpcCBjYWxsaW5nIHRoaXMgZmlsdGVyIHdoZW4gcmV0dXJuaW5nIE5ldEJ1ZmZlckxpc3RzIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgbWluaXBvcnQgYW5kIHdpbGwgY2FsbCB0aGUgbmV4dCBsb3dlciBkcml2ZXIgaW4gdGhlIHN0YWNrLiBBIGZpbHRlciB0aGF0IGRvZXNuJ3QKKyAgICBwcm92aWRlIGEgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMgaGFuZGxlciBjYW5ub3Qgb3JpZ2luYXRlIGEgcmVjZWl2ZSBpbmRpY2F0aW9uCisgICAgb24gaXRzIG93bi4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVySW5zdGFuY2VDb250ZXh0ICAgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0IGFyZWEKKyAgICBOZXRCdWZmZXJMaXN0cyAgICAgICAgICAgICAgLSBhIGxpbmtlZCBsaXN0IG9mIE5ldEJ1ZmZlckxpc3RzIHRoYXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciBkcml2ZXIgaW5kaWNhdGVkIGluIGEgcHJldmlvdXMgY2FsbCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNGSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMKKyAgICBSZXR1cm5GbGFncyAgICAgICAgICAgICAgICAgLSBmbGFncyBzcGVjaWZ5aW5nIGlmIHRoZSBjYWxsZXIgaXMgYXQgRElTUEFUQ0hfTEVWRUwKKworLS0qLworeworICAgIFBNU19GSUxURVIgICAgICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKFJldHVybkZsYWdzKTsKKyAgICAKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsIE5CTDogJXAiLCBwRmlsdGVyLCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICBQTkVUX0JVRkZFUl9MSVNUIEN1cnJOYmwgPSBOZXRCdWZmZXJMaXN0czsKKyAgICB3aGlsZSAoQ3Vyck5ibCkKKyAgICB7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhDdXJyTmJsLT5TdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJOQkwgZmFpbGVkIG9uIHJldHVybjogJSFTVEFUVVMhIiwgQ3Vyck5ibC0+U3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgTmJsVG9GcmVlID0gQ3Vyck5ibDsKKyAgICAgICAgUE5FVF9CVUZGRVIgTmJUb0ZyZWUgPSBORVRfQlVGRkVSX0xJU1RfRklSU1RfTkIoTmJsVG9GcmVlKTsKKworICAgICAgICBDdXJyTmJsID0gTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKEN1cnJOYmwpOworICAgICAgICBORVRfQlVGRkVSX0xJU1RfTkVYVF9OQkwoTmJsVG9GcmVlKSA9IE5VTEw7CisKKyAgICAgICAgTmRpc0FkdmFuY2VOZXRCdWZmZXJEYXRhU3RhcnQoTmJUb0ZyZWUsIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmJUb0ZyZWUpLCBUUlVFLCBOVUxMKTsKKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ibFRvRnJlZSk7CisgICAgfQorICAgIAorICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJSZWNlaXZlTmV0QnVmZmVyTGlzdHMoCisgICAgTkRJU19IQU5ETEUgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORVRfQlVGRkVSX0xJU1QgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgTkRJU19QT1JUX05VTUJFUiAgICBQb3J0TnVtYmVyLAorICAgIFVMT05HICAgICAgICAgICAgICAgTnVtYmVyT2ZOZXRCdWZmZXJMaXN0cywKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFJlY2VpdmVGbGFncworICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIEZpbGVyUmVjZWl2ZU5ldEJ1ZmZlckxpc3RzIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBmaWx0ZXIgZHJpdmVycy4KKyAgICBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgcmVjZWl2ZSBpbmRpY2F0aW9ucyBtYWRlIGJ5IHVuZGVybHlpbmcKKyAgICBOSUMgb3IgbG93ZXIgbGV2ZWwgZmlsdGVyIGRyaXZlcnMuIFRoaXMgZnVuY3Rpb24gIGNhbiBhbHNvIGJlIGNhbGxlZCBhcyBhCisgICAgcmVzdWx0IG9mIGxvb3BiYWNrLiBJZiB0aGlzIGhhbmRsZXIgaXMgTlVMTCwgTkRJUyB3aWxsIHNraXAgY2FsbGluZyB0aGlzCisgICAgZmlsdGVyIHdoZW4gcHJvY2Vzc2luZyBhIHJlY2VpdmUgaW5kaWNhdGlvbiBhbmQgd2lsbCBjYWxsIHRoZSBuZXh0IGhpZ2hlcgorICAgIGRyaXZlciBpbiB0aGUgc3RhY2suIEEgZmlsdGVyIHRoYXQgZG9lc24ndCBwcm92aWRlIGEKKyAgICBGaWx0ZXJSZWNlaXZlTmV0QnVmZmVyTGlzdHMgaGFuZGxlciBjYW5ub3QgcHJvdmlkZSBhCisgICAgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMgaGFuZGxlciBhbmQgY2Fubm90IGEgaW5pdGlhdGUgYW4gb3JpZ2luYWwgcmVjZWl2ZQorICAgIGluZGljYXRpb24gb24gaXRzIG93bi4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVyTW9kdWxlQ29udGV4dCAgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0IGFyZWEuCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgIC0gYSBsaW5rZWQgbGlzdCBvZiBOZXRCdWZmZXJMaXN0cworICAgIFBvcnROdW1iZXIgICAgICAgICAgICAgICAtIFBvcnQgb24gd2hpY2ggdGhlIHJlY2VpdmUgaXMgaW5kaWNhdGVkCisgICAgUmVjZWl2ZUZsYWdzICAgICAgICAgICAgIC0KKworTi5CLjogSXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSBSZWNlaXZlRmxhZ3MgaW4gTkRJU19URVNUX1JFQ0VJVkVfQ0FOTk9UX1BFTkQuCisgICAgVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSByZWNlaXZlIGluZGljYXRpb24gaXMgYW4gc3luY2hyb25vdXMgb3IKKyAgICBhc3luY2hyb25vdXMgZnVuY3Rpb24gY2FsbC4KKworLS0qLworeworCisgICAgUE1TX0ZJTFRFUiAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisgICAgQk9PTEVBTiAgICAgRGlzcGF0Y2hMZXZlbCA9IE5ESVNfVEVTVF9SRUNFSVZFX0FUX0RJU1BBVENIX0xFVkVMKFJlY2VpdmVGbGFncyk7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKFBvcnROdW1iZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoTnVtYmVyT2ZOZXRCdWZmZXJMaXN0cyk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsIE5CTDogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0LCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBOQkwvTkIgYW5kIGdyYWIgdGhlIGRhdGEgYXMgYSBjb250aWd1b3VzIGJ1ZmZlciB0bworICAgIC8vIGluZGljYXRlIHRvIHRoZSBTcGluZWwgY29tbWFuZCBsYXllci4KKyAgICBQTkVUX0JVRkZFUl9MSVNUIEN1cnJOYmwgPSBOZXRCdWZmZXJMaXN0czsKKyAgICB3aGlsZSAoQ3Vyck5ibCkKKyAgICB7CisgICAgICAgIFBORVRfQlVGRkVSIEN1cnJOYiA9IE5FVF9CVUZGRVJfTElTVF9GSVJTVF9OQihDdXJyTmJsKTsKKyAgICAgICAgd2hpbGUgKEN1cnJOYikKKyAgICAgICAgeworICAgICAgICAgICAgUFVDSEFSIEJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoQ3Vyck5iLCBDdXJyTmItPkRhdGFMZW5ndGgsIE5VTEwsIDEsIDApOworICAgICAgICAgICAgaWYgKEJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlciA9IChQVUNIQVIpRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIEN1cnJOYi0+RGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKEJ1ZmZlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUFVDSEFSIF9CdWZmZXIgPSAoUFVDSEFSKU5kaXNHZXREYXRhQnVmZmVyKEN1cnJOYiwgQ3Vyck5iLT5EYXRhTGVuZ3RoLCBCdWZmZXIsIDEsIDApOworICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoX0J1ZmZlciA9PSBCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoX0J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3RMd2ZDbWRSZWN2ZWl2ZShwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBCdWZmZXIsIEN1cnJOYi0+RGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgRklMVEVSX0ZSRUVfTUVNKEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90THdmQ21kUmVjdmVpdmUocEZpbHRlciwgRGlzcGF0Y2hMZXZlbCwgQnVmZmVyLCBDdXJyTmItPkRhdGFMZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ3Vyck5iID0gTkVUX0JVRkZFUl9ORVhUX05CKEN1cnJOYik7CisgICAgICAgIH0KKworICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgQ3Vyck5ibCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChDdXJyTmJsKTsKKyAgICB9CisKKyAgICBpZiAoTkRJU19URVNUX1JFQ0VJVkVfQ0FOX1BFTkQoUmVjZWl2ZUZsYWdzKSkKKyAgICB7CisgICAgICAgIE5kaXNGUmV0dXJuTmV0QnVmZmVyTGlzdHMoCisgICAgICAgICAgICBwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsCisgICAgICAgICAgICBOZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwgPyBORElTX1JFVFVSTl9GTEFHU19ESVNQQVRDSF9MRVZFTCA6IDAKKyAgICAgICAgICAgICk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7Cit9CisKKy8vIENhbGxiYWNrIHJlY2VpdmVkIGZyb20gT3BlblRocmVhZCB3aGVuIGl0IGhhcyBhbiBJUHY2IHBhY2tldCByZWFkeSBmb3IKKy8vIGRlbGl2ZXJ5IHRvIFRDUElQLgordm9pZCAKK290THdmUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2soCisgICAgX0luXyBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgIF9Jbl8gdm9pZCAqYUNvbnRleHQKKyAgICApCit7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgdWludDE2X3QgbWVzc2FnZUxlbmd0aCA9IG90TWVzc2FnZUdldExlbmd0aChhTWVzc2FnZSk7CisgICAgUE5FVF9CVUZGRVJfTElTVCBOZXRCdWZmZXJMaXN0ID0gTlVMTDsKKyAgICBQTkVUX0JVRkZFUiBOZXRCdWZmZXIgPSBOVUxMOworICAgIE5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgUFVDSEFSIERhdGFCdWZmZXIgPSBOVUxMOworICAgIGludCBCeXRlc1JlYWQgPSAwOworICAgIElQVjZfSEVBREVSKiB2NkhlYWRlcjsKKworI2lmZGVmIEZPUkNFX1NZTkNIUk9OT1VTX1JFQ0VJVkUKKyAgICBLSVJRTCBpcnFsOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUgdGhlIE5ldEJ1ZmZlckxpc3QKKyAgICBOZXRCdWZmZXJMaXN0ID0KKyAgICAgICAgTmRpc0FsbG9jYXRlTmV0QnVmZmVyQW5kTmV0QnVmZmVyTGlzdCgKKyAgICAgICAgICAgIHBGaWx0ZXItPmNtZE5ibFBvb2wsICAgICAgICAgICAgLy8gUG9vbEhhbmRsZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0U2l6ZQorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0QmFja0ZpbGwKKyAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWRsQ2hhaW4KKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YU9mZnNldAorICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhTGVuZ3RoCisgICAgICAgICAgICApOworICAgIGlmIChOZXRCdWZmZXJMaXN0ID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBSZWN2IE5ldEJ1ZmZlckxpc3QiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGZsYWcgdG8gaW5kaWNhdGUgaXRzIGEgSVB2NiBwYWNrZXQKKyAgICBOZGlzU2V0TmJsRmxhZyhOZXRCdWZmZXJMaXN0LCBORElTX05CTF9GTEFHU19JU19JUFY2KTsKKyAgICBORVRfQlVGRkVSX0xJU1RfSU5GTyhOZXRCdWZmZXJMaXN0LCBOZXRCdWZmZXJMaXN0RnJhbWVUeXBlKSA9CisgICAgICAgIFVsb25nVG9QdHIoUnRsVXNob3J0Qnl0ZVN3YXAoRVRIRVJORVRfVFlQRV9JUFY2KSk7CisKKyAgICAvLyBJbml0aWFsaXplIE5ldEJ1ZmZlciBmaWVsZHMKKyAgICBOZXRCdWZmZXIgPSBORVRfQlVGRkVSX0xJU1RfRklSU1RfTkIoTmV0QnVmZmVyTGlzdCk7CisgICAgTkVUX0JVRkZFUl9DVVJSRU5UX01ETChOZXRCdWZmZXIpID0gTlVMTDsKKyAgICBORVRfQlVGRkVSX0NVUlJFTlRfTURMX09GRlNFVChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfREFUQV9PRkZTRVQoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9GSVJTVF9NREwoTmV0QnVmZmVyKSA9IE5VTEw7CisKKyAgICAvLyBBbGxvY2F0ZSB0aGUgTmV0QnVmZmVyIGZvciBTZW5kTmV0QnVmZmVyTGlzdAorICAgIFN0YXR1cyA9IE5kaXNSZXRyZWF0TmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgbWVzc2FnZUxlbmd0aCwgMCwgTlVMTCk7CisgICAgaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgIHsKKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBOQiBmb3IgUmVjdiBOZXRCdWZmZXJMaXN0LCAlIU5ESVNfU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBkYXRhIGJ1ZmZlciB0byB3cml0ZSB0bworICAgIERhdGFCdWZmZXIgPSBOZGlzR2V0RGF0YUJ1ZmZlcihOZXRCdWZmZXIsIG1lc3NhZ2VMZW5ndGgsIE5VTEwsIDEsIDApOworICAgIE5UX0FTU0VSVChEYXRhQnVmZmVyKTsKKyAgICBpZiAoRGF0YUJ1ZmZlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgTmRpc0FkdmFuY2VOZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBtZXNzYWdlTGVuZ3RoLCBUUlVFLCBOVUxMKTsKKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBnZXQgY29udGlndW91cyBkYXRhIGJ1ZmZlciBmb3IgUmVjdiBOZXRCdWZmZXJMaXN0Iik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gUmVhZCB0aGUgYnl0ZXMgdG8gdGhlIGJ1ZmZlcgorICAgIEJ5dGVzUmVhZCA9IG90TWVzc2FnZVJlYWQoYU1lc3NhZ2UsIDAsIERhdGFCdWZmZXIsIG1lc3NhZ2VMZW5ndGgpOworICAgIE5UX0FTU0VSVChCeXRlc1JlYWQgPT0gKGludCltZXNzYWdlTGVuZ3RoKTsKKyAgICBpZiAoQnl0ZXNSZWFkICE9IChpbnQpbWVzc2FnZUxlbmd0aCkKKyAgICB7CisgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgbWVzc2FnZUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gcmVhZCBtZXNzYWdlIGJ1ZmZlciBmb3IgUmVjdiBOZXRCdWZmZXJMaXN0Iik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgdjZIZWFkZXIgPSAoSVBWNl9IRUFERVIqKURhdGFCdWZmZXI7CisgICAgCisgICAgLy8gRmlsdGVyIG1lc3NhZ2VzIHRvIGFkZHJlc3NlcyB3ZSBleHBvc2UKKyAgICBpZiAoIUlONl9JU19BRERSX01VTFRJQ0FTVCgmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcykgJiYKKyAgICAgICAgb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsICZ2NkhlYWRlci0+RGVzdGluYXRpb25BZGRyZXNzKSA9PSAtMSkKKyAgICB7CisgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgbWVzc2FnZUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCBkcm9wcGluZyBpbnRlcm5hbCBhZGRyZXNzIG1lc3NhZ2UuIiwgcEZpbHRlcik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gRmlsdGVyIGludGVybmFsIFRocmVhZCBtZXNzYWdlcworICAgIGlmICh2NkhlYWRlci0+TmV4dEhlYWRlciA9PSBJUFBST1RPX1VEUCAmJgorICAgICAgICBtZXNzYWdlTGVuZ3RoID49IHNpemVvZihJUFY2X0hFQURFUikgKyBzaXplb2YoVURQSGVhZGVyKSAmJgorICAgICAgICBtZW1jbXAoJnBGaWx0ZXItPm90TGlua0xvY2FsQWRkciwgJnY2SGVhZGVyLT5EZXN0aW5hdGlvbkFkZHJlc3MsIHNpemVvZihJTjZfQUREUikpID09IDApCisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgTUxFIG1lc3NhZ2UKKyAgICAgICAgVURQSGVhZGVyKiBVZHBIZWFkZXIgPSAoVURQSGVhZGVyKikodjZIZWFkZXIgKyAxKTsKKyAgICAgICAgaWYgKFVkcEhlYWRlci0+RGVzdGluYXRpb25Qb3J0ID09IFVkcEhlYWRlci0+U291cmNlUG9ydCAmJgorICAgICAgICAgICAgVWRwSGVhZGVyLT5EZXN0aW5hdGlvblBvcnQgPT0gUnRsVXNob3J0Qnl0ZVN3YXAoMTk3ODgpKSAvLyBNTEUgUG9ydAorICAgICAgICB7CisgICAgICAgICAgICBOZGlzQWR2YW5jZU5ldEJ1ZmZlckRhdGFTdGFydChOZXRCdWZmZXIsIG1lc3NhZ2VMZW5ndGgsIFRSVUUsIE5VTEwpOworICAgICAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCBkcm9wcGluZyBNTEUgbWVzc2FnZS4iLCBwRmlsdGVyKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBJUDZfUkVDVjogJXAgOiAlIUlQVjZBRERSISA9PiAlIUlQVjZBRERSISAoJXUgYnl0ZXMpIiwgCisgICAgICAgICAgICAgICBwRmlsdGVyLCBOZXRCdWZmZXJMaXN0LCAmdjZIZWFkZXItPlNvdXJjZUFkZHJlc3MsICZ2NkhlYWRlci0+RGVzdGluYXRpb25BZGRyZXNzLAorICAgICAgICAgICAgICAgbWVzc2FnZUxlbmd0aCk7CisKKyNpZmRlZiBMT0dfQlVGRkVSUworICAgIG90TG9nQnVmZmVyKERhdGFCdWZmZXIsIG1lc3NhZ2VMZW5ndGgpOworI2VuZGlmCisKKyNpZmRlZiBGT1JDRV9TWU5DSFJPTk9VU19SRUNFSVZFCisgICAgaXJxbCA9IEtmUmFpc2VJcnFsKERJU1BBVENIX0xFVkVMKTsKKworICAgIGlmIChtZXNzYWdlTGVuZ3RoID09IDI0OCkgLy8gTWFnaWMgbGVuZ3RoIHVzZWQgZm9yIFRBRUYgdGVzdCBwYWNrZXRzCisgICAgeworICAgICAgICBEYmdCcmVha1BvaW50KCk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBJbmRpY2F0ZSB0aGUgTkJMIHVwCisgICAgTmRpc0ZJbmRpY2F0ZVJlY2VpdmVOZXRCdWZmZXJMaXN0cygKKyAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlLAorICAgICAgICBOZXRCdWZmZXJMaXN0LAorICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsCisgICAgICAgIDEsCisjaWZkZWYgRk9SQ0VfU1lOQ0hST05PVVNfUkVDRUlWRQorICAgICAgICBORElTX1JFQ0VJVkVfRkxBR1NfUkVTT1VSQ0VTIHwgTkRJU19SRUNFSVZFX0ZMQUdTX0RJU1BBVENIX0xFVkVMCisjZWxzZQorICAgICAgICAwCisjZW5kaWYKKyAgICAgICAgKTsKKyAgICAKKyNpZmRlZiBGT1JDRV9TWU5DSFJPTk9VU19SRUNFSVZFCisgICAgS2VMb3dlcklycWwoaXJxbCk7CisgICAgRmlsdGVyUmV0dXJuTmV0QnVmZmVyTGlzdHMocEZpbHRlciwgTmV0QnVmZmVyTGlzdCwgMCk7CisjZW5kaWYKKworZXJyb3I6CisKKyAgICBvdE1lc3NhZ2VGcmVlKGFNZXNzYWdlKTsKK30KKworLy8gQ2FsbGVkIGluIHJlc3BvbnNlIHRvIHJlY2VpdmluZyBhIFNwaW5lbCBJcDYgcGFja2V0IGNvbW1hbmQKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkIAorb3RMd2ZUdW5SZWNlaXZlSXA2UGFja2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gQk9PTEVBTiBTZWN1cmUsCisgICAgX0luX3JlYWRzX2J5dGVzXyhCdWZmZXJMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIEJ1ZmZlciwKKyAgICBfSW5fIFVJTlQgQnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFBORVRfQlVGRkVSX0xJU1QgTmV0QnVmZmVyTGlzdCA9IE5VTEw7CisgICAgUE5FVF9CVUZGRVIgTmV0QnVmZmVyID0gTlVMTDsKKyAgICBQVUNIQVIgRGF0YUJ1ZmZlciA9IE5VTEw7CisgICAgSVBWNl9IRUFERVIqIHY2SGVhZGVyOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihTZWN1cmUpOyAvLyBUT0RPIC0gV2hhdCBzaG91bGQgd2UgZG8gd2l0aCB1bnNlY3VyZWQgcGFja2V0cz8KKworICAgIE5ldEJ1ZmZlckxpc3QgPQorICAgICAgICBOZGlzQWxsb2NhdGVOZXRCdWZmZXJBbmROZXRCdWZmZXJMaXN0KAorICAgICAgICAgICAgcEZpbHRlci0+Y21kTmJsUG9vbCwgICAgICAgICAgICAvLyBQb29sSGFuZGxlCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRTaXplCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHRCYWNrRmlsbAorICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZGxDaGFpbgorICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhT2Zmc2V0CisgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGFMZW5ndGgKKyAgICAgICAgICAgICk7CisgICAgaWYgKE5ldEJ1ZmZlckxpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGNyZWF0ZSBjb21tYW5kIE5ldEJ1ZmZlckxpc3QiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIFNldCB0aGUgZmxhZyB0byBpbmRpY2F0ZSBpdHMgYSBJUHY2IHBhY2tldAorICAgIE5kaXNTZXROYmxGbGFnKE5ldEJ1ZmZlckxpc3QsIE5ESVNfTkJMX0ZMQUdTX0lTX0lQVjYpOworICAgIE5FVF9CVUZGRVJfTElTVF9JTkZPKE5ldEJ1ZmZlckxpc3QsIE5ldEJ1ZmZlckxpc3RGcmFtZVR5cGUpID0KKyAgICAgICAgVWxvbmdUb1B0cihSdGxVc2hvcnRCeXRlU3dhcChFVEhFUk5FVF9UWVBFX0lQVjYpKTsKKworICAgIC8vIEluaXRpYWxpemUgTmV0QnVmZmVyIGZpZWxkcworICAgIE5ldEJ1ZmZlciA9IE5FVF9CVUZGRVJfTElTVF9GSVJTVF9OQihOZXRCdWZmZXJMaXN0KTsKKyAgICBORVRfQlVGRkVSX0NVUlJFTlRfTURMKE5ldEJ1ZmZlcikgPSBOVUxMOworICAgIE5FVF9CVUZGRVJfQ1VSUkVOVF9NRExfT0ZGU0VUKE5ldEJ1ZmZlcikgPSAwOworICAgIE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSA9IDA7CisgICAgTkVUX0JVRkZFUl9EQVRBX09GRlNFVChOZXRCdWZmZXIpID0gMDsKKyAgICBORVRfQlVGRkVSX0ZJUlNUX01ETChOZXRCdWZmZXIpID0gTlVMTDsKKworICAgIC8vIEFsbG9jYXRlIHRoZSBOZXRCdWZmZXIgZm9yIE5ldEJ1ZmZlckxpc3QKKyAgICBpZiAoTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBCdWZmZXJMZW5ndGgsIDAsIE5VTEwpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBOZXRCdWZmZXIgPSBOVUxMOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgTkIgZm9yIGNvbW1hbmQgTmV0QnVmZmVyTGlzdCwgJXUgYnl0ZXMiLCBCdWZmZXJMZW5ndGgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciBmb3IgdGhlIGhlYWRlciBkYXRhCisgICAgRGF0YUJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBCdWZmZXJMZW5ndGgsIE5VTEwsIDEsIDApOworICAgIE5UX0FTU0VSVChEYXRhQnVmZmVyKTsKKyAgICAKKyAgICAvLyBDb3B5IHRoZSBkYXRhIG92ZXIKKyAgICBSdGxDb3B5TWVtb3J5KERhdGFCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyTGVuZ3RoKTsKKworICAgIHY2SGVhZGVyID0gKElQVjZfSEVBREVSKilEYXRhQnVmZmVyOworCisgICAgLy8gRmlsdGVyIG1lc3NhZ2VzIHRvIGFkZHJlc3NlcyB3ZSBleHBvc2UKKyAgICBpZiAoIUlONl9JU19BRERSX01VTFRJQ0FTVCgmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcykgJiYKKyAgICAgICAgb3RMd2ZGaW5kQ2FjaGVkQWRkckluZGV4KHBGaWx0ZXIsICZ2NkhlYWRlci0+RGVzdGluYXRpb25BZGRyZXNzKSA9PSAtMSkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAgZHJvcHBpbmcgaW50ZXJuYWwgYWRkcmVzcyBtZXNzYWdlLiIsIHBGaWx0ZXIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgSVA2X1JFQ1Y6ICVwIDogJSFJUFY2QUREUiEgPT4gJSFJUFY2QUREUiEgKCV1IGJ5dGVzKSIsIAorICAgICAgICAgICAgICAgcEZpbHRlciwgTmV0QnVmZmVyTGlzdCwgJnY2SGVhZGVyLT5Tb3VyY2VBZGRyZXNzLCAmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcywKKyAgICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aCk7CisKKyNpZmRlZiBMT0dfQlVGRkVSUworICAgIG90TG9nQnVmZmVyKERhdGFCdWZmZXIsIEJ1ZmZlckxlbmd0aCk7CisjZW5kaWYKKworICAgIC8vIFNlbmQgdGhlIE5CTCBkb3duCisgICAgTmRpc0ZJbmRpY2F0ZVJlY2VpdmVOZXRCdWZmZXJMaXN0cygKKyAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlLCAKKyAgICAgICAgTmV0QnVmZmVyTGlzdCwgCisgICAgICAgIE5ESVNfREVGQVVMVF9QT1JUX05VTUJFUiwKKyAgICAgICAgMSwKKyAgICAgICAgRGlzcGF0Y2hMZXZlbCA/IE5ESVNfUkVDRUlWRV9GTEFHU19ESVNQQVRDSF9MRVZFTCA6IDApOworCisgICAgLy8gQ2xlYXIgbG9jYWwgdmFyaWFibGUgYmVjYXVzZSB3ZSBkb24ndCBvd24gdGhlIE5CTCBhbnkgbW9yZQorICAgIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworCitleGl0OgorCisgICAgaWYgKE5ldEJ1ZmZlckxpc3QpCisgICAgeworICAgICAgICBpZiAoTmV0QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzQWR2YW5jZU5ldEJ1ZmZlckRhdGFTdGFydChOZXRCdWZmZXIsIE5ldEJ1ZmZlci0+RGF0YUxlbmd0aCwgVFJVRSwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXJMaXN0KE5ldEJ1ZmZlckxpc3QpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTE4OGIxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RldmljZS5jCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImRldmljZS50bWgiCisKKy8vIElvQ29udHJvbCBEZXZpY2UgT2JqZWN0IGZyb20gSW9DcmVhdGVEZXZpY2VTZWN1cmUKK1BERVZJQ0VfT0JKRUNUIElvRGV2aWNlT2JqZWN0ID0gTlVMTDsKKworLy8gR2xvYmFsIGNvbnRleHQgZm9yIGRldmljZSBjb250cm9sIGNhbGxiYWNrcworUE9UTFdGX0RFVklDRV9FWFRFTlNJT04gRmlsdGVyRGV2aWNlRXh0ZW5zaW9uID0gTlVMTDsKKworLyoKKworUG93ZXJzaGVsbCBzY3JpcHQgdG8gZ2VuZXJhdGUgc2VjdXJpdHkgZGVzY2lwdG9yczoKKworJHNkZGwgPSAiRDpQKEE7O0dBOzs7U1kpKEE7O0dBOzs7TlMpKEE7O0dBOzs7QkEpKEE7O0dBOzs7V0QpKEE7O0dBOzs7Uy0xLTE1LTMtMykiCiskYmxvYiA9IChbd21pY2xhc3NdIldpbjMyX1NlY3VyaXR5RGVzY3JpcHRvckhlbHBlciIpLlNERExUb0JpbmFyeVNEKCRzZGRsKS5CaW5hcnlTRAorJHN0cmluZyA9IFtCaXRDb252ZXJ0ZXJdOjpUb1N0cmluZygkYmxvYikKKyRzdHJpbmcgPSAkc3RyaW5nIC1yZXBsYWNlICctJywgJycKKyRzdHJpbmcgPSAkc3RyaW5nIC1yZXBsYWNlICcoLi4pKC4uKSguLikoLi4pJywgJzB4JDQkMyQyJDEsICcKKyRzdHJpbmcgLXJlcGxhY2UgJyguezEwfSwgLnsxMH0sIC57MTB9LCAuezEwfSwpICcsICIkJmBuIgorCisqLworY29uc3QgdW5zaWduZWQgbG9uZyBjX3NkVGhyZWFkTHdmW10gPQoreworICAgIDB4OTAwNDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAxNCwgMHgwMDc0MDAwMiwgMHgwMDAwMDAwNSwgMHgwMDE0MDAwMCwKKyAgICAweDEwMDAwMDAwLCAweDAwMDAwMTAxLCAweDA1MDAwMDAwLCAweDAwMDAwMDEyLAorICAgIDB4MDAxNDAwMDAsIDB4MTAwMDAwMDAsIDB4MDAwMDAxMDEsIDB4MDUwMDAwMDAsCisgICAgMHgwMDAwMDAxNCwgMHgwMDE4MDAwMCwgMHgxMDAwMDAwMCwgMHgwMDAwMDIwMSwKKyAgICAweDA1MDAwMDAwLCAweDAwMDAwMDIwLCAweDAwMDAwMjIwLCAweDAwMTQwMDAwLAorICAgIDB4MTAwMDAwMDAsIDB4MDAwMDAxMDEsIDB4MDEwMDAwMDAsIDB4MDAwMDAwMDAsCisgICAgMHgwMDE4MDAwMCwgMHgxMDAwMDAwMCwgMHgwMDAwMDIwMSwgMHgwRjAwMDAwMCwKKyAgICAweDAwMDAwMDAzLCAweDAwMDAwMDAzCit9OworCitfTm9fY29tcGV0aW5nX3RocmVhZF8KK0lOSVRDT0RFCitORElTX1NUQVRVUworb3RMd2ZSZWdpc3RlckRldmljZSgKKyAgICBWT0lECisgICAgKQoreworICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBVTklDT0RFX1NUUklORyAgICAgICAgICAgICAgICAgIERldmljZU5hbWU7CisgICAgVU5JQ09ERV9TVFJJTkcgICAgICAgICAgICAgICAgICBEZXZpY2VMaW5rVW5pY29kZVN0cmluZzsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICAgICAgICAgIERldmljZU9iamVjdDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBOVF9BU1NFUlQoRmlsdGVyRGV2aWNlRXh0ZW5zaW9uID09IE5VTEwpOworCisgICAgTmRpc0luaXRVbmljb2RlU3RyaW5nKCZEZXZpY2VOYW1lLCBOVERFVklDRV9TVFJJTkcpOworICAgIE5kaXNJbml0VW5pY29kZVN0cmluZygmRGV2aWNlTGlua1VuaWNvZGVTdHJpbmcsIExJTktOQU1FX1NUUklORyk7CisKKyAgICBTdGF0dXMgPSBJb0NyZWF0ZURldmljZVNlY3VyZShGaWx0ZXJEcml2ZXJPYmplY3QsICAgICAgICAgICAgICAgICAgICAgLy8gRHJpdmVyT2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE9UTFdGX0RFVklDRV9FWFRFTlNJT04pLCAgICAgICAgIC8vIERldmljZUV4dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXZpY2VOYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXZpY2VOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9ERVZJQ0VfTkVUV09SSywgICAgICAgICAgICAgICAgICAgIC8vIERldmljZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0RFVklDRV9TRUNVUkVfT1BFTiwgICAgICAgICAgICAgICAgLy8gRGV2aWNlQ2hhcmFjdGVyaXN0aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTRERMX0RFVk9CSl9LRVJORUxfT05MWSwgICAgICAgICAgICAgICAvLyBzZWN1cml0eSBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlY3VyaXR5IG92ZXJyaWRlIGRldmljZSBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXZpY2VPYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXZpY2VPYmplY3QKKworICAgIGlmIChOVF9TVUNDRVNTKFN0YXR1cykpCisgICAgeworICAgICAgICBEZXZpY2VPYmplY3QtPkZsYWdzICY9IH5ET19ERVZJQ0VfSU5JVElBTElaSU5HOworICAgICAgICBTdGF0dXMgPSBJb0NyZWF0ZVN5bWJvbGljTGluaygmRGV2aWNlTGlua1VuaWNvZGVTdHJpbmcsICZEZXZpY2VOYW1lKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJb0NyZWF0ZVN5bWJvbGljTGluayBmYWlsZWQsICUhU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgICAgICBJb0RlbGV0ZURldmljZShEZXZpY2VPYmplY3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRmlsdGVyRGV2aWNlRXh0ZW5zaW9uID0gKFBPVExXRl9ERVZJQ0VfRVhURU5TSU9OKURldmljZU9iamVjdC0+RGV2aWNlRXh0ZW5zaW9uOworICAgICAgICAgICAgUnRsWmVyb01lbW9yeShGaWx0ZXJEZXZpY2VFeHRlbnNpb24sIHNpemVvZihPVExXRl9ERVZJQ0VfRVhURU5TSU9OKSk7CisKKyAgICAgICAgICAgIEZpbHRlckRldmljZUV4dGVuc2lvbi0+U2lnbmF0dXJlID0gJ0ZURFInOworICAgICAgICAgICAgRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5IYW5kbGUgPSBGaWx0ZXJEcml2ZXJIYW5kbGU7CisKKyAgICAgICAgICAgIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkxvY2spOworICAgICAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3QpOworCisgICAgICAgICAgICAjcHJhZ21hIHB1c2gKKyAgICAgICAgICAgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjI4MTY4KSAvLyBUaGUgZnVuY3Rpb24gJ290THdmRGlzcGF0Y2gnIGRvZXMgbm90IGhhdmUgYSBfRGlzcGF0Y2hfdHlwZV8gYW5ub3RhdGlvbiBtYXRjaGluZyBkaXNwYXRjaCB0YWJsZSBwb3NpdGlvbiAqCisgICAgICAgICAgICBGaWx0ZXJEcml2ZXJPYmplY3QtPk1ham9yRnVuY3Rpb25bSVJQX01KX0NSRUFURV0gPSBvdEx3ZkRpc3BhdGNoOworICAgICAgICAgICAgRmlsdGVyRHJpdmVyT2JqZWN0LT5NYWpvckZ1bmN0aW9uW0lSUF9NSl9DTEVBTlVQXSA9IG90THdmRGlzcGF0Y2g7CisgICAgICAgICAgICBGaWx0ZXJEcml2ZXJPYmplY3QtPk1ham9yRnVuY3Rpb25bSVJQX01KX0NMT1NFXSA9IG90THdmRGlzcGF0Y2g7CisgICAgICAgICAgICBGaWx0ZXJEcml2ZXJPYmplY3QtPk1ham9yRnVuY3Rpb25bSVJQX01KX0RFVklDRV9DT05UUk9MXSA9IG90THdmRGV2aWNlSW9Db250cm9sOworICAgICAgICAgICAgI3ByYWdtYSBwb3AKKworICAgICAgICAgICAgSEFORExFIGZpbGVIYW5kbGU7CisgICAgICAgICAgICBTdGF0dXMgPSBPYk9wZW5PYmplY3RCeVBvaW50ZXIoRGV2aWNlT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfREFDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZUhhbmRsZSk7CisgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhTdGF0dXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IFp3U2V0U2VjdXJpdHlPYmplY3QoZmlsZUhhbmRsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNMX1NFQ1VSSVRZX0lORk9STUFUSU9OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU0VDVVJJVFlfREVTQ1JJUFRPUiljX3NkVGhyZWFkTHdmKTsKKworICAgICAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1NldFNlY3VyaXR5T2JqZWN0IGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBad0Nsb3NlKGZpbGVIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiT2JPcGVuT2JqZWN0QnlQb2ludGVyIGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSW9EZXZpY2VPYmplY3QgPSBEZXZpY2VPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJb0NyZWF0ZURldmljZVNlY3VyZSBmYWlsZWQsICUhU1RBVFVTISIsIFN0YXR1cyk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiAoTkRJU19TVEFUVVMpU3RhdHVzOworfQorCitQSVJQCitvdEx3ZkRldmljZUNsaWVudENsZWFudXAoCisgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50CisgICAgKQoreworICAgIFBJUlAgSXJwVG9DYW5jZWwgPSBOVUxMOworCisgICAgLy8gQ2xlYW4gdGhlIEZpbGVPYmplY3QgY29udGV4dAorICAgIERldmljZUNsaWVudC0+RmlsZU9iamVjdC0+RnNDb250ZXh0MiA9IE5VTEw7CisKKyAgICAvLyBSZWxlYXNlIHBlbmRpbmcgSVJQCisgICAgaWYgKERldmljZUNsaWVudC0+UGVuZGluZ05vdGlmaWNhdGlvbklSUCkKKyAgICB7CisgICAgICAgIElycFRvQ2FuY2VsID0gRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQOworICAgICAgICBEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25JUlAgPSBOVUxMOworICAgIH0KKworICAgIC8vIEZyZWUgYWxsIHBlbmRpbmcgbm90aWZpY2F0aW9ucworICAgIE5UX0FTU0VSVChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvblNpemUgPD0gT1RMV0ZfTUFYX1BFTkRJTkdfTk9USUZJQ0FUSU9OU19QRVJfQ0xJRU5UKTsKKyAgICBmb3IgKFVDSEFSIGkgPSAwOyBpIDwgRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25TaXplOyBpKyspCisgICAgeworICAgICAgICBVQ0hBUiBpbmRleCA9IChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvbk9mZnNldCArIGkpICUgT1RMV0ZfTUFYX1BFTkRJTkdfTk9USUZJQ0FUSU9OU19QRVJfQ0xJRU5UOworICAgICAgICBvdEx3ZlJlbGVhc2VOb3RpZmljYXRpb24oRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uc1tpbmRleF0pOworICAgIH0KKworICAgIHJldHVybiBJcnBUb0NhbmNlbDsKK30KKworX05vX2NvbXBldGluZ190aHJlYWRfCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkRlcmVnaXN0ZXJEZXZpY2UoCisgICAgVk9JRAorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgaWYgKElvRGV2aWNlT2JqZWN0ICE9IE5VTEwpCisgICAgeworICAgICAgICBOVF9BU1NFUlQoRmlsdGVyRGV2aWNlRXh0ZW5zaW9uKTsKKyAgICAgICAgTmRpc0ZyZWVTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFuIHVwIGFsbCBwZW5kaW5nIGNsaWVudHMKKyAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IEZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdC5GbGluazsKKyAgICAgICAgd2hpbGUgKExpbmsgIT0gJkZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfREVWSUNFX0NMSUVOVCwgTGluayk7CisgICAgICAgICAgICBQSVJQIElycFRvQ2FuY2VsID0gTlVMTDsKKworICAgICAgICAgICAgLy8gU2V0IG5leHQgbGluaworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYW4gdXAgYW55IGxlZnQgb3ZlcnMgZnJvbSB0aGUgZGV2aWNlIGNsaWVudAorICAgICAgICAgICAgSXJwVG9DYW5jZWwgPSBvdEx3ZkRldmljZUNsaWVudENsZWFudXAoRGV2aWNlQ2xpZW50KTsKKworICAgICAgICAgICAgLy8gQ29tcGxldGUgdGhlIHBlbmRpbmcgSVJQIHNpbmNlIHdlIGFyZSBzaHV0dGluZyBkb3duCisgICAgICAgICAgICBpZiAoSXJwVG9DYW5jZWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIGNvbXBsZXRlIHRoZSBwZW5kaW5nIElSUCwgd2UgbXVzdCByZW1vdmUgdGhlIGNhbmNlbCByb3V0aW5lCisgICAgICAgICAgICAgICAgS0lSUUwgaXJxbDsKKyAgICAgICAgICAgICAgICBJb0FjcXVpcmVDYW5jZWxTcGluTG9jaygmaXJxbCk7CisgICAgICAgICAgICAgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycFRvQ2FuY2VsLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBJb1JlbGVhc2VDYW5jZWxTcGluTG9jayhpcnFsKTsKKworICAgICAgICAgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgICAgICAgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwVG9DYW5jZWwsIElPX05PX0lOQ1JFTUVOVCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGV2aWNlIGNsaWVudCBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICBSZW1vdmVFbnRyeUxpc3QoJkRldmljZUNsaWVudC0+TGluayk7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZGV2aWNlIGNsaWVudAorICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkoRGV2aWNlQ2xpZW50LCAwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIElvRGVsZXRlRGV2aWNlKElvRGV2aWNlT2JqZWN0KTsKKyAgICB9CisKKyAgICBJb0RldmljZU9iamVjdCA9IE5VTEw7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05UU1RBVFVTCitvdEx3ZkRpc3BhdGNoKAorICAgIFBERVZJQ0VfT0JKRUNUICAgICAgIERldmljZU9iamVjdCwKKyAgICBQSVJQICAgICAgICAgICAgICAgICBJcnAKKyAgICApCit7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OICAgICAgSXJwU3RhY2s7CisgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgUElSUCAgICAgICAgICAgICAgICAgICAgSXJwVG9DYW5jZWwgPSBOVUxMOworICAgIFBPVExXRl9ERVZJQ0VfQ0xJRU5UICAgIERldmljZUNsaWVudCA9IE5VTEw7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERldmljZU9iamVjdCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIElycFN0YWNrID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKworICAgIHN3aXRjaCAoSXJwU3RhY2stPk1ham9yRnVuY3Rpb24pCisgICAgeworICAgICAgICBjYXNlIElSUF9NSl9DUkVBVEU6CisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9JT0NUTCwgIkNsaWVudCAlcCBhdHRhY2hlZC4iLCBJcnBTdGFjay0+RmlsZU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3RTaXplID49IE9UTFdGX01BWF9DTElFTlRTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9JT0NUTCwgIkFscmVhZHkgaGF2ZSBtYXggY2xpZW50cyEiKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBTVEFUVVNfVE9PX01BTllfU0VTU0lPTlM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIERldmljZUNsaWVudCA9IEZJTFRFUl9BTExPQ19ERVZJQ0VfQ0xJRU5UKCk7CisgICAgICAgICAgICBpZiAoRGV2aWNlQ2xpZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoRGV2aWNlQ2xpZW50LCBzaXplb2YoT1RMV0ZfREVWSUNFX0NMSUVOVCkpOworICAgICAgICAgICAgICAgIERldmljZUNsaWVudC0+RmlsZU9iamVjdCA9IElycFN0YWNrLT5GaWxlT2JqZWN0OworCisgICAgICAgICAgICAgICAgTlRfQVNTRVJUKElycFN0YWNrLT5GaWxlT2JqZWN0LT5Gc0NvbnRleHQyID09IE5VTEwpOworICAgICAgICAgICAgICAgIElycFN0YWNrLT5GaWxlT2JqZWN0LT5Gc0NvbnRleHQyID0gRGV2aWNlQ2xpZW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEluc2VydCBpbnRvIHRoZSBjbGllbnQgbGlzdAorICAgICAgICAgICAgICAgIEluc2VydFRhaWxMaXN0KCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3QsICZEZXZpY2VDbGllbnQtPkxpbmspOworICAgICAgICAgICAgICAgIEZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdFNpemUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSVJQX01KX0NMRUFOVVA6CisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9JT0NUTCwgIkNsaWVudCAlcCBjbGVhbmluZyB1cC4iLCBJcnBTdGFjay0+RmlsZU9iamVjdCk7CisKKyAgICAgICAgICAgIERldmljZUNsaWVudCA9IChQT1RMV0ZfREVWSUNFX0NMSUVOVClJcnBTdGFjay0+RmlsZU9iamVjdC0+RnNDb250ZXh0MjsKKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNsZWFuIHVwIGFueSBsZWZ0IG92ZXJzIGZyb20gdGhlIGRldmljZSBjbGllbnQKKyAgICAgICAgICAgIElycFRvQ2FuY2VsID0gb3RMd2ZEZXZpY2VDbGllbnRDbGVhbnVwKERldmljZUNsaWVudCk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGV2aWNlIGNsaWVudCBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICBSZW1vdmVFbnRyeUxpc3QoJkRldmljZUNsaWVudC0+TGluayk7CisgICAgICAgICAgICBGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkNsaWVudExpc3RTaXplLS07CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZGV2aWNlIGNsaWVudAorICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkoRGV2aWNlQ2xpZW50LCAwLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSVJQX01KX0NMT1NFOgorICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfSU9DVEwsICJDbGllbnQgJXAgZGV0YXRjaGVkLiIsIElycFN0YWNrLT5GaWxlT2JqZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkxvY2spOworCisgICAgLy8gQ2FuY2VsIHRoZSBwZW5kaW5nIG5vdGlmaWNhdGlvbiBJUlAgaWYgc2V0CisgICAgaWYgKElycFRvQ2FuY2VsKQorICAgIHsKKyAgICAgICAgLy8gQ29tcGxldGUgdGhlIHBlbmRpbmcgSVJQCisgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgICAgICBJcnBUb0NhbmNlbC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnBUb0NhbmNlbCwgSU9fTk9fSU5DUkVNRU5UKTsKKyAgICB9CisKKyAgICBJcnAtPklvU3RhdHVzLlN0YXR1cyA9IFN0YXR1czsKKyAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnAsIElPX05PX0lOQ1JFTUVOVCk7CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9JT0NUTCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05UU1RBVFVTCitvdEx3ZkRldmljZUlvQ29udHJvbCgKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgRGV2aWNlT2JqZWN0LAorICAgIFBJUlAgICAgICAgICAgICAgICAgICBJcnAKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgQk9PTEVBTiBDb21wbGV0ZUlSUCA9IFRSVUU7CisKKyAgICBQVk9JRCAgICAgICAgICAgICAgIElvQnVmZmVyID0gSXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlcjsKKworICAgIFBJT19TVEFDS19MT0NBVElPTiAgSXJwU3AgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKElycCk7CisgICAgVUxPTkcgICAgICAgICAgICAgICBJbnB1dEJ1ZmZlckxlbmd0aCA9IElycFNwLT5QYXJhbWV0ZXJzLkRldmljZUlvQ29udHJvbC5JbnB1dEJ1ZmZlckxlbmd0aDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIE91dHB1dEJ1ZmZlckxlbmd0aCA9IElycFNwLT5QYXJhbWV0ZXJzLkRldmljZUlvQ29udHJvbC5PdXRwdXRCdWZmZXJMZW5ndGg7CisgICAgVUxPTkcgICAgICAgICAgICAgICBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisKKyAgICBVTE9ORyAgICAgICAgICAgICAgIEZ1bmNDb2RlID0gKElvQ29udHJvbENvZGUgPj4gMikgJiAweEZGRjsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfSU9DVEwsICIlcCIsIElycFNwLT5GaWxlT2JqZWN0KTsKKworI2lmIERCRworICAgIEFTU0VSVCgoKFBPVExXRl9ERVZJQ0VfRVhURU5TSU9OKURldmljZU9iamVjdC0+RGV2aWNlRXh0ZW5zaW9uKS0+U2lnbmF0dXJlID09ICdGVERSJyk7CisjZWxzZQorICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoRGV2aWNlT2JqZWN0KTsKKyNlbmRpZgorCisgICAgLy8gV2Ugb25seSBhbGxvdyBQQVNTSVZFX0xFVkVMIGNhbGxzCisgICAgaWYgKEtlR2V0Q3VycmVudElycWwoKSA+IFBBU1NJVkVfTEVWRUwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9JT0NUTCwgIkZpbHRlckRldmljZUlvQ29udHJvbCBjYWxsZWQgaGlnaGVyIHRoYW4gUEFTU0lWRS4iKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoSW9CdWZmZXIsIE91dHB1dEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIE91dHB1dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKEZ1bmNDb2RlID49IE1JTl9PVExXRl9JT0NUTF9GVU5DX0NPREUgJiYgRnVuY0NvZGUgPD0gTUFYX09UTFdGX0lPQ1RMX0ZVTkNfQ09ERSkKKyAgICB7CisgICAgICAgIENvbXBsZXRlSVJQID0gRkFMU0U7CisgICAgICAgIHN0YXR1cyA9IG90THdmSW9DdGxPcGVuVGhyZWFkQ29udHJvbChJcnApOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIENoZWNrIHRoZSBJb0NvbnRyb2xDb2RlIHRvIGRldGVybWluZSB3aGljaCBJT0NUTCB3ZSBhcmUgcHJvY2Vzc2luZworICAgIHN3aXRjaCAoSW9Db250cm9sQ29kZSkKKyAgICB7CisgICAgICAgIGNhc2UgSU9DVExfT1RMV0ZfUVVFUllfTk9USUZJQ0FUSU9OOgorICAgICAgICAgICAgQ29tcGxldGVJUlAgPSBGQUxTRTsKKyAgICAgICAgICAgIHN0YXR1cyA9IG90THdmUXVlcnlOZXh0Tm90aWZpY2F0aW9uKElycCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElPQ1RMX09UTFdGX0VOVU1FUkFURV9ERVZJQ0VTOgorICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICBvdEx3ZklvQ3RsRW51bWVyYXRlSW50ZXJmYWNlcygKKyAgICAgICAgICAgICAgICAgICAgSW9CdWZmZXIsIElucHV0QnVmZmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBJb0J1ZmZlciwgJk91dHB1dEJ1ZmZlckxlbmd0aAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJT0NUTF9PVExXRl9RVUVSWV9ERVZJQ0U6CisgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgIG90THdmSW9DdGxRdWVyeUludGVyZmFjZSgKKyAgICAgICAgICAgICAgICAgICAgSW9CdWZmZXIsIElucHV0QnVmZmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBJb0J1ZmZlciwgJk91dHB1dEJ1ZmZlckxlbmd0aAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19OT1RfSU1QTEVNRU5URUQ7CisgICAgICAgICAgICBSdGxaZXJvTWVtb3J5KElvQnVmZmVyLCBPdXRwdXRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgT3V0cHV0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworZXJyb3I6CisKKyAgICBpZiAoQ29tcGxldGVJUlApCisgICAgeworICAgICAgICBJcnAtPklvU3RhdHVzLlN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgSXJwLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbiA9IE91dHB1dEJ1ZmZlckxlbmd0aDsKKworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnAsIElPX05PX0lOQ1JFTUVOVCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfSU9DVEwsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitQTVNfRklMVEVSCitvdEx3ZkZpbmRBbmRSZWZJbnRlcmZhY2UoCisgICAgX0luXyBQR1VJRCAgSW50ZXJmYWNlR3VpZAorICAgICkKK3sKKyAgICBQTVNfRklMVEVSIHBPdXRwdXQgPSBOVUxMOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgZm9yIChQTElTVF9FTlRSWSBMaW5rID0gRmlsdGVyTW9kdWxlTGlzdC5GbGluazsgTGluayAhPSAmRmlsdGVyTW9kdWxlTGlzdDsgTGluayA9IExpbmstPkZsaW5rKQorICAgIHsKKyAgICAgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgTVNfRklMVEVSLCBGaWx0ZXJNb2R1bGVMaW5rKTsKKworICAgICAgICBpZiAocEZpbHRlci0+U3RhdGUgPT0gRmlsdGVyUnVubmluZyAmJgorICAgICAgICAgICAgbWVtY21wKEludGVyZmFjZUd1aWQsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCBzaXplb2YoR1VJRCkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChFeEFjcXVpcmVSdW5kb3duUHJvdGVjdGlvbigmcEZpbHRlci0+RXh0ZXJuYWxSZWZzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwT3V0cHV0ID0gcEZpbHRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgcmV0dXJuIHBPdXRwdXQ7Cit9CisKKy8vCisvLyBOb3RpZmljYXRpb24gRnVuY3Rpb25zCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZSZWxlYXNlTm90aWZpY2F0aW9uKAorICAgIF9Jbl8gUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeQorICAgICkKK3sKKyAgICBpZiAoUnRsRGVjcmVtZW50UmVmZXJlbmNlQ291bnQoJk5vdGlmRW50cnktPlJlZkNvdW50KSkKKyAgICB7CisgICAgICAgIE5kaXNGcmVlTWVtb3J5KE5vdGlmRW50cnksIDAsIDApOworICAgIH0KK30KKworLy8gSW5kaWNhdGVzIGEgbmV3IG5vdGlmaWNhdGlvbgorX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmSW5kaWNhdGVOb3RpZmljYXRpb24oCisgICAgX0luXyBQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSBOb3RpZkVudHJ5CisgICAgKQoreworICAgIFBJUlAgSXJwc1RvQ29tcGxldGVbT1RMV0ZfTUFYX0NMSUVOVFNdID0gezB9OworICAgIFVDSEFSIElycE9mZnNldCA9IDA7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIC8vIEluaXRpYWxpemUgd2l0aCBhIGxvY2FsIHJlZgorICAgIE5vdGlmRW50cnktPlJlZkNvdW50ID0gMTsKKworICAgIGlmIChGaWx0ZXJEZXZpY2VFeHRlbnNpb24gPT0gTlVMTCkgZ290byBlcnJvcjsKKworICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJkZpbHRlckRldmljZUV4dGVuc2lvbi0+TG9jayk7CisKKyAgICAvLyBQZW5kIHRoZSBub3RpZmljYXRpb24gZm9yIGVhY2ggY2xpZW50CisgICAgUExJU1RfRU5UUlkgTGluayA9IEZpbHRlckRldmljZUV4dGVuc2lvbi0+Q2xpZW50TGlzdC5GbGluazsKKyAgICB3aGlsZSAoTGluayAhPSAmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5DbGllbnRMaXN0KQorICAgIHsKKyAgICAgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfREVWSUNFX0NMSUVOVCwgTGluayk7CisKKyAgICAgICAgLy8gU2V0IG5leHQgbGluaworICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisgICAgICAgIAorICAgICAgICBLSVJRTCBpcnFsOworICAgICAgICBJb0FjcXVpcmVDYW5jZWxTcGluTG9jaygmaXJxbCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG90aGVyIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBvciB3ZSBkb24ndCBoYXZlIGEgcGVuZGluZyBJUlAgc2F2ZWQKKyAgICAgICAgLy8gdGhlbiBqdXN0IGdvIGFoZWFkIGFuZCBhZGQgdGhlIG5vdGlmaWNhdGlvbiB0byB0aGUgbGlzdAorICAgICAgICBOVF9BU1NFUlQoRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25TaXplIDw9IE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVCk7CisgICAgICAgIGlmIChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvblNpemUgIT0gMCB8fAorICAgICAgICAgICAgRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQID09IE5VTEwKKyAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IGluZGV4CisgICAgICAgICAgICBVQ0hBUiBJbmRleCA9IChEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvbk9mZnNldCArIERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZSkgJSBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQ7CisKKyAgICAgICAgICAgIC8vIEFkZCBhZGRpdGlvbmFsIHJlZiB0byB0aGUgbm90aWYKKyAgICAgICAgICAgIFJ0bEluY3JlbWVudFJlZmVyZW5jZUNvdW50KCZOb3RpZkVudHJ5LT5SZWZDb3VudCk7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBhdCB0aGUgbWF4IGFscmVhZHksIHJlbGVhc2UgdGhlIG9sZGVzdAorICAgICAgICAgICAgaWYgKERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZSA9PSBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nV2FybmluZyhEUklWRVJfSU9DVEwsICJEcm9wcGluZyBvbGQgbm90aWZpY2F0aW9uISIpOworICAgICAgICAgICAgICAgIG90THdmUmVsZWFzZU5vdGlmaWNhdGlvbihEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25zW0RldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uT2Zmc2V0XSk7CisgICAgICAgICAgICAgICAgRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25PZmZzZXQgPSAoRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25PZmZzZXQgKyAxKSAlIE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvblNpemUrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ29weSB0aGUgbm90aWZpY2F0aW9uIHRvIHRoZSBuZXh0IHNwYWNlCisgICAgICAgICAgICBEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25zW0luZGV4XSA9IE5vdGlmRW50cnk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBCZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gY29tcGxldGUgdGhlIHBlbmRpbmcgSVJQLCB3ZSBtdXN0IHJlbW92ZSB0aGUgY2FuY2VsIHJvdXRpbmUKKyAgICAgICAgICAgIElvU2V0Q2FuY2VsUm91dGluZShEZXZpY2VDbGllbnQtPlBlbmRpbmdOb3RpZmljYXRpb25JUlAsIE5VTEwpOworCisgICAgICAgICAgICBJcnBzVG9Db21wbGV0ZVtJcnBPZmZzZXRdID0gRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQOworICAgICAgICAgICAgSXJwT2Zmc2V0Kys7CisKKyAgICAgICAgICAgIERldmljZUNsaWVudC0+UGVuZGluZ05vdGlmaWNhdGlvbklSUCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlbGVhc2UgdGhlIGNhbmNlbCBzcGluIGxvY2sKKyAgICAgICAgSW9SZWxlYXNlQ2FuY2VsU3BpbkxvY2soaXJxbCk7CisgICAgfQorCisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKworICAgIC8vIENvbXBsZXRlIGFueSBJUlBzIG5vdywgb3V0c2lkZSB0aGUgbG9jaworICAgIGZvciAoVUNIQVIgaSA9IDA7IGkgPCBJcnBPZmZzZXQ7IGkrKykKKyAgICB7CisgICAgICAgIFBJUlAgSXJwVG9Db21wbGV0ZSA9IElycHNUb0NvbXBsZXRlW2ldOworCisgICAgICAgIC8vIENvcHkgdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkCisgICAgICAgIFBWT0lEIElvQnVmZmVyID0gSXJwVG9Db21wbGV0ZS0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXI7CisgICAgICAgIG1lbWNweShJb0J1ZmZlciwgJk5vdGlmRW50cnktPk5vdGlmLCBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKSk7CisgICAgICAgIElycFRvQ29tcGxldGUtPklvU3RhdHVzLkluZm9ybWF0aW9uID0gc2l6ZW9mKE9UTFdGX05PVElGSUNBVElPTik7CisKKyAgICAgICAgLy8gQ29tcGxldGUgdGhlIElSUAorICAgICAgICBJcnBUb0NvbXBsZXRlLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwVG9Db21wbGV0ZSwgSU9fTk9fSU5DUkVNRU5UKTsKKyAgICB9CisKK2Vycm9yOgorICAgIAorICAgIC8vIFJlbGVhc2UgbG9jYWwgcmVmIG9uIHRoZSBub3RpZmljYXRpb24KKyAgICBvdEx3ZlJlbGVhc2VOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfSU9DVEwpOworfQorCitEUklWRVJfQ0FOQ0VMIG90THdmUXVlcnlOb3RpZmljYXRpb25DYW5jZWxsZWQ7CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK290THdmUXVlcnlOb3RpZmljYXRpb25DYW5jZWxsZWQoCisgICAgX0lub3V0XyBQREVWSUNFX09CSkVDVCBEZXZpY2VPYmplY3QsCisgICAgX0lub3V0XyBfSVJRTF91c2VzX2NhbmNlbF8gc3RydWN0IF9JUlAgKklycAorKQoreworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoRGV2aWNlT2JqZWN0KTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfSU9DVEwpOworICAgIAorICAgIFBJT19TVEFDS19MT0NBVElPTiBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oSXJwKTsKKyAgICBQT1RMV0ZfREVWSUNFX0NMSUVOVCBEZXZpY2VDbGllbnQgPSAoUE9UTFdGX0RFVklDRV9DTElFTlQpSXJwU3AtPkZpbGVPYmplY3QtPkZzQ29udGV4dDI7CisKKyAgICBpZiAoRGV2aWNlQ2xpZW50KQorICAgIHsKKyAgICAgICAgRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQID0gTlVMTDsKKyAgICB9CisKKyAgICBJb1JlbGVhc2VDYW5jZWxTcGluTG9jayhJcnAtPkNhbmNlbElycWwpOworCisgICAgSXJwLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgIElycC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgIElvQ29tcGxldGVSZXF1ZXN0KElycCwgSU9fTk9fSU5DUkVNRU5UKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9JT0NUTCk7Cit9CisKKy8vIFF1ZXJpZXMgdGhlIG5leHQgbm90aWZpY2F0aW9uCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmUXVlcnlOZXh0Tm90aWZpY2F0aW9uKAorICAgIF9Jbl8gUElSUCBJcnAKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgUE9UTFdGX0RFVklDRV9DTElFTlQgRGV2aWNlQ2xpZW50ID0gTlVMTDsKKyAgICBQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSBOb3RpZkVudHJ5ID0gTlVMTDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfSU9DVEwpOworCisgICAgUElPX1NUQUNLX0xPQ0FUSU9OIElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworICAgIFVMT05HIE91dHB1dEJ1ZmZlckxlbmd0aCA9IElycFNwLT5QYXJhbWV0ZXJzLkRldmljZUlvQ29udHJvbC5PdXRwdXRCdWZmZXJMZW5ndGg7CisKKyAgICAvLyBWYWxpZGF0ZSB3ZSBoYXZlIGEgYmlnIGVub3VnaCBidWZmZXIKKyAgICBpZiAoT3V0cHV0QnVmZmVyTGVuZ3RoIDwgc2l6ZW9mKE9UTFdGX05PVElGSUNBVElPTikpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KElycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXIsIE91dHB1dEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICAKKyAgICBEZXZpY2VDbGllbnQgPSAoUE9UTFdGX0RFVklDRV9DTElFTlQpSXJwU3AtPkZpbGVPYmplY3QtPkZzQ29udGV4dDI7CisgICAgaWYgKERldmljZUNsaWVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9OT1RfUkVBRFk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyRGV2aWNlRXh0ZW5zaW9uLT5Mb2NrKTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vdGlmaWNhdGlvbnMgYXZhaWxhYmxlCisgICAgaWYgKERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gU2V0IHRoZSBjYW5jZWwgcm91dGluZQorICAgICAgICBJb1NldENhbmNlbFJvdXRpbmUoSXJwLCBvdEx3ZlF1ZXJ5Tm90aWZpY2F0aW9uQ2FuY2VsbGVkKTsKKworICAgICAgICAvLyBNYXJrIHRoZSBJcnAgYXMgcGVuZGluZworICAgICAgICBJb01hcmtJcnBQZW5kaW5nKElycCk7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgSVJQIHRvIGNvbXBsZXRlIGxhdGVyLCB3aGVuIHdlIGhhdmUgYSBub3RpZmljYXRpb24KKyAgICAgICAgRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uSVJQID0gSXJwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBHZXQgdGhlIG5vdGlmaWNhdGlvbgorICAgICAgICBOb3RpZkVudHJ5ID0gRGV2aWNlQ2xpZW50LT5QZW5kaW5nTm90aWZpY2F0aW9uc1tEZXZpY2VDbGllbnQtPk5vdGlmaWNhdGlvbk9mZnNldF07CisgICAgICAgIERldmljZUNsaWVudC0+UGVuZGluZ05vdGlmaWNhdGlvbnNbRGV2aWNlQ2xpZW50LT5Ob3RpZmljYXRpb25PZmZzZXRdID0gTlVMTDsKKworICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIG9mZnNldCBhbmQgZGVjcmVtZW50IHRoZSBzaXplCisgICAgICAgIERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uT2Zmc2V0ID0gKERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uT2Zmc2V0ICsgMSkgJSBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQ7CisgICAgICAgIERldmljZUNsaWVudC0+Tm90aWZpY2F0aW9uU2l6ZS0tOworICAgIH0KKworICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJkZpbHRlckRldmljZUV4dGVuc2lvbi0+TG9jayk7CisKKyAgICAvLyBJZiB3ZSBmb3VuZCBhIG5vdGlmaWNhdGlvbiwgY29tcGxldGUgdGhlIElSUCB3aXRoIGl0CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICAvLyBDb3B5IHRoZSBub3RpZmljYXRpb24gcGF5bG9hZAorICAgICAgICBQVk9JRCBJb0J1ZmZlciA9IElycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXI7CisgICAgICAgIG1lbWNweShJb0J1ZmZlciwgJk5vdGlmRW50cnktPk5vdGlmLCBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKSk7CisgICAgICAgIElycC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSBzaXplb2YoT1RMV0ZfTk9USUZJQ0FUSU9OKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBub3RpZmljYXRpb24KKyAgICAgICAgb3RMd2ZSZWxlYXNlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPdGhlcndpc2UsIHNldCBzdGF0dXMgdG8gaW5kaWNhdGUgd2UgYXJlIHBlbmRpbmcgdGhlIElSUAorICAgICAgICBzdGF0dXMgPSBTVEFUVVNfUEVORElORzsKKyAgICB9CisKK2Vycm9yOgorCisgICAgLy8gQ29tcGxldGUgdGhlIElSUCBpZiB3ZSBhcmVuJ3QgcGVuZGluZworICAgIGlmIChzdGF0dXMgIT0gU1RBVFVTX1BFTkRJTkcpCisgICAgeworICAgICAgICBJcnAtPklvU3RhdHVzLlN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwLCBJT19OT19JTkNSRU1FTlQpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0lPQ1RMLCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RldmljZS5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgZGV2aWNlIElPQ1RMIGludGVyZmFjZS4KKyAqLworCisjaWZuZGVmIF9ERVZJQ0VfSAorI2RlZmluZSBfREVWSUNFX0gKKworLy8KKy8vIFRoZSBmaWx0ZXIgbmVlZHMgdG8gaGFuZGxlIElPQ1RSTHMKKy8vCisjZGVmaW5lIExJTktOQU1FX1NUUklORyAgICAgICAgICAgICBMIlxcRG9zRGV2aWNlc1xcb3RMd2YiCisjZGVmaW5lIE5UREVWSUNFX1NUUklORyAgICAgICAgICAgICBMIlxcRGV2aWNlXFxvdEx3ZiIKKworLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBjbGllbnRzIHN1cHBvcnRlZAorI2RlZmluZSBPVExXRl9NQVhfQ0xJRU5UUyAgIDEwCisKKy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBub3RpZmljYXRpb25zIGFsbG93ZWQgdG8gYmUgcGVuZGVkLCBwZXIgY2xpZW50CisjZGVmaW5lIE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVCAgMTAwCisKKy8vIENvbnRleHQgZm9yIElPIERldmljZSBDb250cm9sIGNhbGxiYWNrcwordHlwZWRlZiBzdHJ1Y3QgX09UTFdGX0RFVklDRV9FWFRFTlNJT04KK3sKKyAgICBVTE9ORyAgICAgICAgICAgU2lnbmF0dXJlOworICAgIE5ESVNfSEFORExFICAgICBIYW5kbGU7CisKKyAgICBORElTX1NQSU5fTE9DSyAgTG9jazsKKyAgICBfR3VhcmRlZF9ieV8oTG9jaykKKyAgICBMSVNUX0VOVFJZICAgICAgQ2xpZW50TGlzdDsKKyAgICBVTE9ORyAgICAgICAgICAgQ2xpZW50TGlzdFNpemU7CisKK30gT1RMV0ZfREVWSUNFX0VYVEVOU0lPTiwgKlBPVExXRl9ERVZJQ0VfRVhURU5TSU9OOworCisvLyBOb3RpZmljYXRpb24gc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCBfRklMVEVSX05PVElGSUNBVElPTl9FTlRSWQoreworICAgIFJUTF9SRUZFUkVOQ0VfQ09VTlQgUmVmQ291bnQ7CisgICAgT1RMV0ZfTk9USUZJQ0FUSU9OICBOb3RpZjsKKworfSBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZLCAqUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlk7CisKKy8vIFRhZyBmb3IgYWxsb2NhdGluZyBub3RpZmljYXRpb24gc3RydWN0dXJlcyAnVE50ZgorI2RlZmluZSBGSUxURVJfTk9USUZfQUxMT0NfVEFHICdmdE5UJworCisvLyBIZWxwZXIgdG8gYWxsb2NhdGUgYSBuZXcgbm90aWZpY2F0aW9uIGVudHJ5CisjZGVmaW5lIEZJTFRFUl9BTExPQ19OT1RJRihfcEZpbHRlcikgXAorICAgIChQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSlOZGlzQWxsb2NhdGVNZW1vcnlXaXRoVGFnUHJpb3JpdHkoX3BGaWx0ZXItPkZpbHRlckhhbmRsZSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpLCBGSUxURVJfTk9USUZfQUxMT0NfVEFHLCBOb3JtYWxQb29sUHJpb3JpdHkpCisKKy8vIENvbnRleHQgZm9yIElPIERldmljZSBDb250cm9sIGNsaWVudHMKK3R5cGVkZWYgc3RydWN0IF9PVExXRl9ERVZJQ0VfQ0xJRU5UCit7CisgICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICAgIExpbms7CisgICAgUEZJTEVfT0JKRUNUICAgICAgICAgICAgICAgIEZpbGVPYmplY3Q7CisgICAgUElSUCAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdOb3RpZmljYXRpb25JUlA7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgIFBlbmRpbmdOb3RpZmljYXRpb25zW09UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVF07CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbk9mZnNldDsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uU2l6ZTsKKworfSBPVExXRl9ERVZJQ0VfQ0xJRU5ULCAqUE9UTFdGX0RFVklDRV9DTElFTlQ7CisKKy8vIEhlbHBlciB0byBhbGxvY2F0ZSBhIG5ldyBEZXZpY2UgQ29udHJvbCBjbGllbnQKKyNkZWZpbmUgRklMVEVSX0FMTE9DX0RFVklDRV9DTElFTlQoKSBcCisgICAgKFBPVExXRl9ERVZJQ0VfQ0xJRU5UKU5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eShGaWx0ZXJEZXZpY2VFeHRlbnNpb24tPkhhbmRsZSwgc2l6ZW9mKE9UTFdGX0RFVklDRV9DTElFTlQpLCBGSUxURVJfTk9USUZfQUxMT0NfVEFHLCBOb3JtYWxQb29sUHJpb3JpdHkpCisKK3N0YXRpY19hc3NlcnQoCisgICAgKDEgPDwgKHNpemVvZihVQ0hBUikgKiA4KSkgPiBPVExXRl9NQVhfUEVORElOR19OT1RJRklDQVRJT05TX1BFUl9DTElFTlQsIAorICAgICJUeXBlIG9mIE5vdGlmaWNhdGlvbk9mZnNldCBtdXN0IGJlIGJpZyBlbm91Z2ggZm9yIE9UTFdGX01BWF9QRU5ESU5HX05PVElGSUNBVElPTlNfUEVSX0NMSUVOVCIKKyAgICApOworCisvLyBHbG9iYWwgY29udGV4dCBmb3IgZGV2aWNlIGNvbnRyb2wgY2FsbGJhY2tzCitleHRlcm4gUE9UTFdGX0RFVklDRV9FWFRFTlNJT04gRmlsdGVyRGV2aWNlRXh0ZW5zaW9uOworCisvLworLy8gRnVuY3Rpb24gcHJvdG90eXBlcworLy8KKworLy8gUmVnaXN0ZXJzIGZvciBJbyBDb250cm9sIGNhbGxiYWNrcworX05vX2NvbXBldGluZ190aHJlYWRfCitJTklUQ09ERQorTkRJU19TVEFUVVMKK290THdmUmVnaXN0ZXJEZXZpY2UoCisgICAgVk9JRAorICAgICk7CisKKy8vIFVucmVnaXN0ZXJzIGZvciBJbyBDb250cm9sIENhbGxiYWNrcworX05vX2NvbXBldGluZ190aHJlYWRfCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkRlcmVnaXN0ZXJEZXZpY2UoCisgICAgVk9JRAorICAgICk7CisKKy8vIENhbGxiYWNrIGZvciBnZW5lcmFsIGNvbnRyb2wgSVJQcworRFJJVkVSX0RJU1BBVENIIG90THdmRGlzcGF0Y2g7CisKKy8vIENhbGxiYWNrIGZvciBJT0NUTHMKK0RSSVZFUl9ESVNQQVRDSCBvdEx3ZkRldmljZUlvQ29udHJvbDsKKworLy8gQXR0ZW1wdHMgdG8gZmluZCBhbmQgYWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitQTVNfRklMVEVSCitvdEx3ZkZpbmRBbmRSZWZJbnRlcmZhY2UoCisgICAgX0luXyBQR1VJRCAgSW50ZXJmYWNlR3VpZAorICAgICk7CisKKy8vCisvLyBOb3RpZmljYXRpb24gVHlwZSBhbmQgRnVuY3Rpb25zCisvLworCisvLyBJbmRpY2F0ZXMgYSBuZXcgbm90aWZpY2F0aW9uCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZJbmRpY2F0ZU5vdGlmaWNhdGlvbigKKyAgICBfSW5fIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkKKyAgICApOworCisvLyBRdWVyaWVzIHRoZSBuZXh0IG5vdGlmaWNhdGlvbgorX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlF1ZXJ5TmV4dE5vdGlmaWNhdGlvbigKKyAgICBfSW5fIFBJUlAgSXJwCisgICAgKTsKKworLy8gUmVsZWFzZSBhIHJlZiBvbiB0aGUgbm90aWZpY2F0aW9uCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZSZWxlYXNlTm90aWZpY2F0aW9uKAorICAgIF9Jbl8gUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeQorICAgICk7CisKKyNlbmRpZiAvLyBfREVWSUNFX0gKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDIxMGUxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RyaXZlci5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImRyaXZlci50bWgiCisKKy8vCisvLyBHbG9iYWwgdmFyaWFibGVzCisvLworCisvLyBHbG9iYWwgRHJpdmVyIE9iamVjdCBmcm9tIERyaXZlckVudHJ5CitQRFJJVkVSX09CSkVDVCAgICAgIEZpbHRlckRyaXZlck9iamVjdCA9IE5VTEw7CisKKy8vIE5ESVMgRmlsdGVyIGhhbmRsZSBmcm9tIE5kaXNGUmVnaXN0ZXJGaWx0ZXJEcml2ZXIKK05ESVNfSEFORExFICAgICAgICAgRmlsdGVyRHJpdmVySGFuZGxlID0gTlVMTDsKKworLy8gR2xvYmFsIGxpc3Qgb2YgVEhSRUFEX0ZJTFRFUiBpbnN0YW5jZXMKK05ESVNfU1BJTl9MT0NLICAgICAgRmlsdGVyTGlzdExvY2s7CitMSVNUX0VOVFJZICAgICAgICAgIEZpbHRlck1vZHVsZUxpc3Q7CisKKy8vIENhY2hlZCBwZXJmb3JtYW5jZSBmcmVxdWVuY3kgb2YgdGhlIHN5c3RlbQorTEFSR0VfSU5URUdFUiAgICAgICBGaWx0ZXJQZXJmb3JtYW5jZUZyZXF1ZW5jeTsKKworSU5JVENPREUKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05UU1RBVFVTCitEcml2ZXJFbnRyeSgKKyAgICBfSW5fIFBEUklWRVJfT0JKRUNUICAgICBEcml2ZXJPYmplY3QsCisgICAgX0luXyBQVU5JQ09ERV9TVFJJTkcgICAgUmVnaXN0cnlQYXRoCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlyc3QgZW50cnkgcG9pbnQgdG8gYmUgY2FsbGVkLCB3aGVuIHRoaXMgZHJpdmVyIGlzIGxvYWRlZC4KKyAgICBSZWdpc3RlciB3aXRoIE5ESVMgYXMgYSBmaWx0ZXIgZHJpdmVyIGFuZCBjcmVhdGUgYSBkZXZpY2UKKyAgICBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXItbW9kZS4KKworQXJndW1lbnRzOgorCisgICAgRHJpdmVyT2JqZWN0IC0gcG9pbnRlciB0byB0aGUgc3lzdGVtJ3MgZHJpdmVyIG9iamVjdCBzdHJ1Y3R1cmUKKyAgICBmb3IgdGhpcyBkcml2ZXIKKworICAgIFJlZ2lzdHJ5UGF0aCAtIHN5c3RlbSdzIHJlZ2lzdHJ5IHBhdGggZm9yIHRoaXMgZHJpdmVyCisKK1JldHVybiBWYWx1ZToKKworICAgIFNUQVRVU19TVUNDRVNTIGlmIGFsbCBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsLCBTVEFUVVNfWFhYCisgICAgZXJyb3IgY29kZSBpZiBub3QuCisKKy0tKi8KK3sKKyAgICBORElTX1NUQVRVUyBTdGF0dXM7CisKKyAgICAvLyBJbml0aWFsaXplIFdQUCBsb2dnaW5nCisgICAgV1BQX0lOSVRfVFJBQ0lORyhEcml2ZXJPYmplY3QsIFJlZ2lzdHJ5UGF0aCk7CisKKyAgICAvLyBTYXZlIGdsb2JhbCBEcml2ZXJPYmplY3QKKyAgICBGaWx0ZXJEcml2ZXJPYmplY3QgPSBEcml2ZXJPYmplY3Q7CisKKyAgICAvLyBTZXQgdGhlIGRyaXZlciB1bmxvYWQgaGFuZGxlcgorICAgIERyaXZlck9iamVjdC0+RHJpdmVyVW5sb2FkID0gRHJpdmVyVW5sb2FkOworCisgICAgLy8gQ2FjaGUgcGVyZm9ybWFuY2UgY291bnRlciBmcmVxdWVuY3kKKyAgICAoVk9JRClLZVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZGaWx0ZXJQZXJmb3JtYW5jZUZyZXF1ZW5jeSk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJSZWdpc3RyeTogJVMiLCBSZWdpc3RyeVBhdGgtPkJ1ZmZlcik7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgTkRJU19GSUxURVJfRFJJVkVSX0NIQVJBQ1RFUklTVElDUyAgRkNoYXJzID0gCisgICAgICAgIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBORElTX09CSkVDVF9UWVBFX0ZJTFRFUl9EUklWRVJfQ0hBUkFDVEVSSVNUSUNTLAorI2lmIE5ESVNfU1VQUE9SVF9ORElTNjEKKyAgICAgICAgICAgICAgICBORElTX0ZJTFRFUl9DSEFSQUNURVJJU1RJQ1NfUkVWSVNJT05fMiwKKyNlbHNlCisgICAgICAgICAgICAgICAgTkRJU19GSUxURVJfQ0hBUkFDVEVSSVNUSUNTX1JFVklTSU9OXzEsCisjZW5kaWYKKyAgICAgICAgICAgICAgICBzaXplb2YoTkRJU19GSUxURVJfRFJJVkVSX0NIQVJBQ1RFUklTVElDUykKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBORElTX0ZJTFRFUl9NQUpPUl9WRVJTSU9OLAorICAgICAgICAgICAgTkRJU19GSUxURVJfTUlOT1JfVkVSU0lPTiwKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIFJUTF9DT05TVEFOVF9TVFJJTkcoRklMVEVSX0ZSSUVORExZX05BTUUpLAorICAgICAgICAgICAgUlRMX0NPTlNUQU5UX1NUUklORyhGSUxURVJfVU5JUVVFX05BTUUpLAorICAgICAgICAgICAgUlRMX0NPTlNUQU5UX1NUUklORyhGSUxURVJfU0VSVklDRV9OQU1FKSwKKworICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBGaWx0ZXJBdHRhY2gsCisgICAgICAgICAgICBGaWx0ZXJEZXRhY2gsCisgICAgICAgICAgICBGaWx0ZXJSZXN0YXJ0LAorICAgICAgICAgICAgRmlsdGVyUGF1c2UsCisgICAgICAgICAgICBGaWx0ZXJTZW5kTmV0QnVmZmVyTGlzdHMsCisgICAgICAgICAgICBGaWx0ZXJTZW5kTmV0QnVmZmVyTGlzdHNDb21wbGV0ZSwKKyAgICAgICAgICAgIEZpbHRlckNhbmNlbFNlbmROZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgIEZpbHRlclJlY2VpdmVOZXRCdWZmZXJMaXN0cywKKyAgICAgICAgICAgIEZpbHRlclJldHVybk5ldEJ1ZmZlckxpc3RzLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBGaWx0ZXJTdGF0dXMsCisjaWYgKE5ESVNfU1VQUE9SVF9ORElTNjEpCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisjZW5kaWYKKyAgICAgICAgfTsKKworICAgICAgICAvLworICAgICAgICAvLyBJbml0aWFsaXplIGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgLy8KKyAgICAgICAgTmRpc0FsbG9jYXRlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZGaWx0ZXJNb2R1bGVMaXN0KTsKKyAgICAgICAgCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmaWx0ZXIgd2l0aCBORElTCisgICAgICAgIC8vCisgICAgICAgIFN0YXR1cyA9IAorICAgICAgICAgICAgTmRpc0ZSZWdpc3RlckZpbHRlckRyaXZlcigKKyAgICAgICAgICAgICAgICBEcml2ZXJPYmplY3QsCisgICAgICAgICAgICAgICAgKE5ESVNfSEFORExFKUZpbHRlckRyaXZlck9iamVjdCwKKyAgICAgICAgICAgICAgICAmRkNoYXJzLAorICAgICAgICAgICAgICAgICZGaWx0ZXJEcml2ZXJIYW5kbGUKKyAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUmVnaXN0ZXIgZmlsdGVyIGRyaXZlciBmYWlsZWQsICUhTkRJU19TVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGRldmljZSBJT0NUTCBpbnRlcmZhY2UKKyAgICAgICAgLy8KKyAgICAgICAgU3RhdHVzID0gb3RMd2ZSZWdpc3RlckRldmljZSgpOworICAgICAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUmVnaXN0ZXIgZGV2aWNlIGZvciB0aGUgZmlsdGVyIGRyaXZlciBmYWlsZWQsICUhTkRJU19TVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIFN0YXR1cyk7CisKKyAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBpZiAoRmlsdGVyRHJpdmVySGFuZGxlKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzRkRlcmVnaXN0ZXJGaWx0ZXJEcml2ZXIoRmlsdGVyRHJpdmVySGFuZGxlKTsKKyAgICAgICAgICAgIEZpbHRlckRyaXZlckhhbmRsZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgV1BQX0NMRUFOVVAoRHJpdmVyT2JqZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCitQQUdFRFgKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0RyaXZlclVubG9hZCgKKyAgICBfSW5fIFBEUklWRVJfT0JKRUNUICAgICBEcml2ZXJPYmplY3QKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBGaWx0ZXIgZHJpdmVyJ3MgdW5sb2FkIHJvdXRpbmUuCisgICAgRGVyZWdpc3RlciB0aGUgZHJpdmVyIGZyb20gTkRJUy4KKworQXJndW1lbnRzOgorCisgICAgRHJpdmVyT2JqZWN0IC0gcG9pbnRlciB0byB0aGUgc3lzdGVtJ3MgZHJpdmVyIG9iamVjdCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBkcml2ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTk9ORQorCistLSovCit7CisgICAgUEFHRURfQ09ERSgpOworICAgIAorICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICAvLworICAgIC8vIENsZWFuIHVwIHRoZSBkZXZpY2UgSU9DVEwgaW50ZXJmYWNlCisgICAgLy8KKyAgICBvdEx3ZkRlcmVnaXN0ZXJEZXZpY2UoKTsKKworICAgIC8vCisgICAgLy8gRGVyZWdpc3RlciB0aGUgTkRJUyBmaWx0ZXIKKyAgICAvLworICAgIE5kaXNGRGVyZWdpc3RlckZpbHRlckRyaXZlcihGaWx0ZXJEcml2ZXJIYW5kbGUpOworICAgIEZpbHRlckRyaXZlckhhbmRsZSA9IE5VTEw7CisKKyAgICAvLyBWYWxpZGF0ZSB3ZSBoYXZlIG5vIG91dHN0YW5kaW5nIGZpbHRlciBpbnN0YW5jZXMKKyAgICBOVF9BU1NFUlQoSXNMaXN0RW1wdHkoJkZpbHRlck1vZHVsZUxpc3QpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYW4gdXAgZ2xvYmFsIHZhcmlhYmxlcworICAgIC8vCisgICAgTmRpc0ZyZWVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworCisgICAgLy8KKyAgICAvLyBDbGVhbiB1cCBXUFAgbG9nZ2luZworICAgIC8vCisgICAgV1BQX0NMRUFOVVAoRHJpdmVyT2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMxY2QwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2RyaXZlci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZm9yIGRyaXZlciBpbml0aWFsaXphdGlvbgorICogIGFuZCBjbGVhbiB1cC4KKyAqLworCisjaWZuZGVmIF9EUklWRVJfSAorI2RlZmluZSBfRFJJVkVSX0gKKworLy8gTGVnYWwgdmFsdWVzIGluY2x1ZGU6CisvLyAgICA2LjAgIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgVmlzdGEgUlRNCisvLyAgICA2LjEgIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgVmlzdGEgU1AxIC8gV2luZG93cyBTZXJ2ZXIgMjAwOAorLy8gICAgNi4yMCBBdmFpbGFibGUgc3RhcnRpbmcgd2l0aCBXaW5kb3dzIDcgLyBXaW5kb3dzIFNlcnZlciAyMDA4IFIyCisvLyAgICA2LjMwIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgOCAvIFdpbmRvd3MgU2VydmVyICI4IgorI2RlZmluZSBGSUxURVJfTUFKT1JfTkRJU19WRVJTSU9OICAgNgorCisjaWYgZGVmaW5lZChORElTNjApCisjZGVmaW5lIEZJTFRFUl9NSU5PUl9ORElTX1ZFUlNJT04gICAwCisjZWxpZiBkZWZpbmVkKE5ESVM2MjApCisjZGVmaW5lIEZJTFRFUl9NSU5PUl9ORElTX1ZFUlNJT04gICAyMAorI2VsaWYgZGVmaW5lZChORElTNjMwKQorI2RlZmluZSBGSUxURVJfTUlOT1JfTkRJU19WRVJTSU9OICAgMzAKKyNlbmRpZgorCisvLworLy8gR2xvYmFsIHZhcmlhYmxlcworLy8KKworLy8gR2xvYmFsIERyaXZlciBPYmplY3QgZnJvbSBEcml2ZXJFbnRyeQorZXh0ZXJuIFBEUklWRVJfT0JKRUNUICAgICAgRmlsdGVyRHJpdmVyT2JqZWN0OworCisvLyBORElTIEZpbHRlciBoYW5kbGUgZnJvbSBOZGlzRlJlZ2lzdGVyRmlsdGVyRHJpdmVyCitleHRlcm4gTkRJU19IQU5ETEUgICAgICAgICBGaWx0ZXJEcml2ZXJIYW5kbGU7CisKKy8vIElvQ29udHJvbCBEZXZpY2UgT2JqZWN0IGZyb20gSW9DcmVhdGVEZXZpY2VTZWN1cmUKK2V4dGVybiBQREVWSUNFX09CSkVDVCAgICAgIElvRGV2aWNlT2JqZWN0OworCisvLyBHbG9iYWwgbGlzdCBvZiBUSFJFQURfRklMVEVSIGluc3RhbmNlcworZXh0ZXJuIE5ESVNfU1BJTl9MT0NLICAgICAgRmlsdGVyTGlzdExvY2s7CitleHRlcm4gTElTVF9FTlRSWSAgICAgICAgICBGaWx0ZXJNb2R1bGVMaXN0OworCisvLyBDYWNoZWQgcGVyZm9ybWFuY2UgZnJlcXVlbmN5IG9mIHRoZSBzeXN0ZW0KK2V4dGVybiBMQVJHRV9JTlRFR0VSICAgICAgIEZpbHRlclBlcmZvcm1hbmNlRnJlcXVlbmN5OworCisjZGVmaW5lIEZJTFRFUl9GUklFTkRMWV9OQU1FICAgICAgICBMIk9wZW5UaHJlYWQgTkRJUyBMaWdodFdlaWdodCBGaWx0ZXIiCisjZGVmaW5lIEZJTFRFUl9VTklRVUVfTkFNRSAgICAgICAgICBMIntCM0EzODQ1QS0xNjRFLTQ3MjctQjEyRS0zMkI4RENFMUY2Q0R9IiAvL3VuaXF1ZSBuYW1lLCBxdWlkIG5hbWUKKyNkZWZpbmUgRklMVEVSX1NFUlZJQ0VfTkFNRSAgICAgICAgIEwiT1RMV0YiCisKKy8vCisvLyBGdW5jdGlvbiBwcm90b3R5cGVzCisvLworSU5JVENPREUgRFJJVkVSX0lOSVRJQUxJWkUgRHJpdmVyRW50cnk7CisKK1BBR0VEWCBEUklWRVJfVU5MT0FEIERyaXZlclVubG9hZDsKKworI2VuZGlmIC8vIF9EUklWRVJfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2V2ZW50cHJvY2Vzc2luZy5jIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2V2ZW50cHJvY2Vzc2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOWVlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZXZlbnRwcm9jZXNzaW5nLmMKQEAgLTAsMCArMSwxMTE0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBuZXcgbm90aWZpY2F0aW9ucyBmb3IgSU9DVEwgY2xpZW50cy4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImV2ZW50cHJvY2Vzc2luZy50bWgiCisKK3R5cGVkZWYgc3RydWN0IF9PVExXRl9BRERSX0VWRU5UCit7CisgICAgTElTVF9FTlRSWSAgICAgICAgICAgICAgTGluazsKKyAgICBNSUJfTk9USUZJQ0FUSU9OX1RZUEUgICBOb3RpZmljYXRpb25UeXBlOworICAgIElONl9BRERSICAgICAgICAgICAgICAgIEFkZHJlc3M7CisKK30gT1RMV0ZfQUREUl9FVkVOVCwgKlBPVExXRl9BRERSX0VWRU5UOworCit0eXBlZGVmIHN0cnVjdCBfT1RMV0ZfTkJMX0VWRU5UCit7CisgICAgTElTVF9FTlRSWSAgICAgICAgICBMaW5rOworICAgIFBORVRfQlVGRkVSX0xJU1QgICAgTmV0QnVmZmVyTGlzdHM7CisKK30gT1RMV0ZfTkJMX0VWRU5ULCAqUE9UTFdGX05CTF9FVkVOVDsKKwordHlwZWRlZiBzdHJ1Y3QgX09UTFdGX01BQ19GUkFNRV9FVkVOVAoreworICAgIExJU1RfRU5UUlkgICAgICAgICAgTGluazsKKyAgICB1aW50OF90ICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aDsKKyAgICB1aW50OF90ICAgICAgICAgICAgIEJ1ZmZlclswXTsKKworfSBPVExXRl9NQUNfRlJBTUVfRVZFTlQsICpQT1RMV0ZfTUFDX0ZSQU1FX0VWRU5UOworCisKK0tTVEFSVF9ST1VUSU5FIG90THdmRXZlbnRXb3JrZXJUaHJlYWQ7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkNvbXBsZXRlTkJMcygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gICAgICAgICAgICAgICAgRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIFBORVRfQlVGRkVSX0xJU1QgICAgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgX0luXyBOVFNUQVRVUyAgICAgICAgICAgICAgIFN0YXR1cworICAgICk7CisKKy8vIFN0YXJ0cyB0aGUgZXZlbnQgcXVldWUgcHJvY2Vzc2luZworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmRXZlbnRQcm9jZXNzaW5nU3RhcnQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgSEFORExFICAgdGhyZWFkSGFuZGxlID0gTlVMTDsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAsIFRpbWVJbmNyZW1lbnQgPSAldSIsIHBGaWx0ZXIsIEtlUXVlcnlUaW1lSW5jcmVtZW50KCkpOworICAgIAorICAgIHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCA9IDA7CisKKyAgICBOVF9BU1NFUlQocEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQgPT0gTlVMTCk7CisgICAgaWYgKHBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkICE9IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfQUxSRUFEWV9SRUdJU1RFUkVEOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0byByZXNldCB0aGUgbmVjZXNzYXJ5IGV2ZW50cworICAgIEtlUmVzZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRTdG9wRXZlbnQpOworICAgIEtlUmVzZXRFdmVudCgmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSk7CisgICAgS2VSZXNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZEVuZXJneVNjYW5Db21wbGV0ZSk7CisKKyAgICAvLyBTdGFydCB0aGUgd29ya2VyIHRocmVhZAorICAgIHN0YXR1cyA9IFBzQ3JlYXRlU3lzdGVtVGhyZWFkKAorICAgICAgICAgICAgICAgICZ0aHJlYWRIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gVGhyZWFkSGFuZGxlCisgICAgICAgICAgICAgICAgVEhSRUFEX0FMTF9BQ0NFU1MsICAgICAgICAgICAgICAvLyBEZXNpcmVkQWNjZXNzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3RBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzSGFuZGxlCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRJZAorICAgICAgICAgICAgICAgIG90THdmRXZlbnRXb3JrZXJUaHJlYWQsICAgICAgICAgLy8gU3RhcnRSb3V0aW5lCisgICAgICAgICAgICAgICAgcEZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydENvbnRleHQKKyAgICAgICAgICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJQc0NyZWF0ZVN5c3RlbVRocmVhZCBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gR3JhYiB0aGUgb2JqZWN0IHJlZmVyZW5jZSB0byB0aGUgd29ya2VyIHRocmVhZAorICAgIHN0YXR1cyA9IE9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUoCisgICAgICAgICAgICAgICAgdGhyZWFkSGFuZGxlLAorICAgICAgICAgICAgICAgIFRIUkVBRF9BTExfQUNDRVNTLAorICAgICAgICAgICAgICAgICpQc1RocmVhZFR5cGUsCisgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQsCisgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICk7CisgICAgaWYgKCFOVF9WRVJJRllNU0coIk9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUgY2FuJ3QgZmFpbCB3aXRoIGEgdmFsaWQga2VybmVsIGhhbmRsZSIsIE5UX1NVQ0NFU1Moc3RhdHVzKSkpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFN0b3BFdmVudCwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7CisgICAgfQorCisgICAgWndDbG9zZSh0aHJlYWRIYW5kbGUpOworCitlcnJvcjoKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgRXhTZXRUaW1lclJlc29sdXRpb24oMCwgRkFMU0UpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBTdG9wcyB0aGUgZXZlbnQgcXVldWUgcHJvY2Vzc2luZworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdTdG9wKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyCisgICAgKQoreworICAgIFBMSVNUX0VOVFJZIExpbmsgPSBOVUxMOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgLy8gQnkgdGhpcyBwb2ludCwgd2UgaGF2ZSBkaXNhYmxlZCB0aGUgRGF0YSBQYXRoLCBzbyBubyBtb3JlIAorICAgIC8vIE5CTHMgc2hvdWxkIGJlIHF1ZXVlZCB1cC4KKworICAgIC8vIENsZWFuIHVwIHdvcmtlciB0aHJlYWQKKyAgICBpZiAocEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQpCisgICAgeworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiU3RvcHBpbmcgZXZlbnQgcHJvY2Vzc2luZyB3b3JrZXIgdGhyZWFkIGFuZCB3YWl0aW5nIGZvciBpdCB0byBjb21wbGV0ZS4iKTsKKworICAgICAgICAvLyBTZW5kIGV2ZW50IHRvIHNodXRkb3duIHdvcmtlciB0aHJlYWQKKyAgICAgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRTdG9wRXZlbnQsIDAsIEZBTFNFKTsKKworICAgICAgICAvLyBXYWl0IGZvciB3b3JrZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICBLZVdhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICBwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZCwKKyAgICAgICAgICAgIEV4ZWN1dGl2ZSwKKyAgICAgICAgICAgIEtlcm5lbE1vZGUsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gRnJlZSB3b3JrZXIgdGhyZWFkCisgICAgICAgIE9iRGVyZWZlcmVuY2VPYmplY3QocEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQpOworICAgICAgICBwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZCA9IE5VTEw7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkV2ZW50IHByb2Nlc3Npbmcgd29ya2VyIHRocmVhZCBjbGVhbmVkIHVwLiIpOworICAgIH0KKworICAgIC8vIENsZWFuIHVwIGFueSBsZWZ0IG92ZXIgZXZlbnRzCisgICAgaWYgKHBGaWx0ZXItPkFkZHJlc3NDaGFuZ2VzSGVhZC5GbGluaykKKyAgICB7CisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlc0hlYWQuRmxpbms7CisgICAgICAgIHdoaWxlIChMaW5rICE9ICZwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlc0hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBPVExXRl9BRERSX0VWRU5UIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfQUREUl9FVkVOVCwgTGluayk7CisgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFuIHVwIGFueSBsZWZ0IG92ZXIgZXZlbnRzCisgICAgaWYgKHBGaWx0ZXItPk5CTHNIZWFkLkZsaW5rKQorICAgIHsKKyAgICAgICAgTGluayA9IHBGaWx0ZXItPk5CTHNIZWFkLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+TkJMc0hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBPVExXRl9OQkxfRVZFTlQgRXZlbnQgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBPVExXRl9OQkxfRVZFTlQsIExpbmspOworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworCisgICAgICAgICAgICBvdEx3ZkNvbXBsZXRlTkJMcyhwRmlsdGVyLCBGQUxTRSwgRXZlbnQtPk5ldEJ1ZmZlckxpc3RzLCBTVEFUVVNfQ0FOQ0VMTEVEKTsKKworICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBldmVudAorICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkoRXZlbnQsIDAsIDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYW4gdXAgYW55IGxlZnQgb3ZlciBldmVudHMKKyAgICBpZiAocEZpbHRlci0+TWFjRnJhbWVzSGVhZC5GbGluaykKKyAgICB7CisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5NYWNGcmFtZXNIZWFkLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgUE9UTFdGX01BQ19GUkFNRV9FVkVOVCBFdmVudCA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIE9UTFdGX01BQ19GUkFNRV9FVkVOVCwgTGluayk7CisgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJlaW5pdGlhbGl6ZSB0aGUgbGlzdCBoZWFkCisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlc0hlYWQpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+TkJMc0hlYWQpOworICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCk7CisgICAgCisgICAgaWYgKHBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQuRmxpbmspCisgICAgeworICAgICAgICBGSUxURVJfQUNRVUlSRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisKKyAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGxlZnQgb3ZlciBJUlBzCisgICAgICAgIExpbmsgPSBwRmlsdGVyLT5FdmVudElycExpc3RIZWFkLkZsaW5rOworICAgICAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgUElSUCBJcnAgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBJUlAsIFRhaWwuT3ZlcmxheS5MaXN0RW50cnkpOworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworICAgICAgICAKKyAgICAgICAgICAgIC8vIEJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBjb21wbGV0ZSB0aGUgcGVuZGluZyBJUlAsIHdlIG11c3QgcmVtb3ZlIHRoZSBjYW5jZWwgcm91dGluZQorICAgICAgICAgICAgS0lSUUwgaXJxbDsKKyAgICAgICAgICAgIElvQWNxdWlyZUNhbmNlbFNwaW5Mb2NrKCZpcnFsKTsKKyAgICAgICAgICAgIElvU2V0Q2FuY2VsUm91dGluZShJcnAsIE5VTEwpOworICAgICAgICAgICAgSW9SZWxlYXNlQ2FuY2VsU3BpbkxvY2soaXJxbCk7CisKKyAgICAgICAgICAgIElycC0+SW9TdGF0dXMuU3RhdHVzID0gU1RBVFVTX0NBTkNFTExFRDsKKyAgICAgICAgICAgIElycC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgICAgICAgICAgSW9Db21wbGV0ZVJlcXVlc3QoSXJwLCBJT19OT19JTkNSRU1FTlQpOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIFJlaW5pdGlhbGl6ZSB0aGUgbGlzdCBoZWFkCisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZCk7CisgICAgCisgICAgICAgIEZJTFRFUl9SRUxFQVNFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIEZBTFNFKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKKy8vIFVwZGF0ZXMgdGhlIHdhaXQgdGltZSBmb3IgdGhlIGFsYXJtCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3V2FpdFRpbWUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICAgICAgICAgIHdhaXRUaW1lCisgICAgKQoreworICAgIEJPT0xFQU4gRmlyZVVwZGF0ZUV2ZW50ID0gVFJVRTsKKyAgICAKKyAgICAvLyBDYW5jZWwgcHJldmlvdXMgdGltZXIKKyAgICBpZiAoRXhDYW5jZWxUaW1lcihwRmlsdGVyLT5FdmVudEhpZ2hQcmVjaXNpb25UaW1lciwgTlVMTCkpCisgICAgeworICAgICAgICBwRmlsdGVyLT5FdmVudFRpbWVyU3RhdGUgPSBPVF9FVkVOVF9USU1FUl9OT1RfUlVOTklORzsKKyAgICB9CisKKyAgICBpZiAod2FpdFRpbWUgPT0gKFVMT05HKSgtMSkpCisgICAgeworICAgICAgICAvLyBJZ25vcmUgaWYgd2UgYXJlIGFscmVhZHkgc3RvcHBlZAorICAgICAgICBpZiAocEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0ID09IDApIHJldHVybjsKKyAgICAgICAgcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHdhaXRUaW1lID09IDApCisgICAgICAgIHsKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICAgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJFdmVudCBwcm9jZXNzaW5nIHVwZGF0aW5nIHRvIGZpcmUgdGltZXIgaW1tZWRpYXRlbHkuIik7CisjZW5kaWYKKyAgICAgICAgICAgIHBGaWx0ZXItPkV2ZW50VGltZXJTdGF0ZSA9IE9UX0VWRU5UX1RJTUVSX0ZJUkVEOworICAgICAgICAgICAgcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3YWl0VGltZSAqIDEwMDAwbGwgPCAoS2VRdWVyeVRpbWVJbmNyZW1lbnQoKSAtIDMwMDAwKSkKKyAgICAgICAgeworI2lmZGVmIERFQlVHX1RJTUlORworICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkV2ZW50IHByb2Nlc3Npbmcgc3RhcnRpbmcgaGlnaCBwcmVjaXNpb24gdGltZXIgZm9yICV1IG1zLiIsIHdhaXRUaW1lKTsKKyNlbmRpZgorICAgICAgICAgICAgcEZpbHRlci0+RXZlbnRUaW1lclN0YXRlID0gT1RfRVZFTlRfVElNRVJfUlVOTklORzsKKyAgICAgICAgICAgIHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCA9IDA7CisgICAgICAgICAgICBGaXJlVXBkYXRlRXZlbnQgPSBGQUxTRTsKKyAgICAgICAgICAgIEV4U2V0VGltZXIocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIsIHdhaXRUaW1lICogLTEwMDAwbGwsIDAsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworCisgICAgICAgICAgICBVTE9ORyBUaWNrV2FpdFRpbWUgPSAod2FpdFRpbWUgKiAxMDAwMGxsKSAvIEtlUXVlcnlUaW1lSW5jcmVtZW50KCk7CisgICAgICAgICAgICBpZiAoVGlja1dhaXRUaW1lID09IDApIFRpY2tXYWl0VGltZSA9IDE7CisjaWZkZWYgREVCVUdfVElNSU5HCisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRXZlbnQgcHJvY2Vzc2luZyB1cGRhdGluZyB3YWl0IHRpY2tzIHRvICV1LiIsIFRpY2tXYWl0VGltZSk7CisjZW5kaWYKKworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lIHRvIGJlICd3YWl0VGltZScgbXMgZnJvbSAnbm93Jywgc2F2ZWQgaW4gVGlja0NvdW50cworICAgICAgICAgICAgS2VRdWVyeVRpY2tDb3VudCgmcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50KTsKKyAgICAgICAgICAgIHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCArPSBUaWNrV2FpdFRpbWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSW5kaWNhdGUgZXZlbnQgdG8gd29ya2VyIHRocmVhZCB0byB1cGRhdGUgdGhlIHdhaXQgdGltZQorICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkV2FpdFRpbWVVcGRhdGVkLCAwLCBGQUxTRSk7Cit9CisKKy8vIEluZGljYXRlcyBhbm90aGVyIHRhc2tsZXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3VGFza2xldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICkKK3sKKyAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0cywgMCwgRkFMU0UpOworfQorCisvLyBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGFuIEFkZHJlc3MgY2hhbmdlIHRvIHByb2Nlc3MKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVBZGRyZXNzQ2hhbmdlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gTUlCX05PVElGSUNBVElPTl9UWVBFICBOb3RpZmljYXRpb25UeXBlLAorICAgIF9Jbl8gUElONl9BRERSICAgICAgICAgICAgICBwQWRkcgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXI6ICVwIiwgcEZpbHRlcik7CisKKyAgICBOVF9BU1NFUlQocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERSk7CisKKyAgICBQT1RMV0ZfQUREUl9FVkVOVCBFdmVudCA9IEZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCBzaXplb2YoT1RMV0ZfQUREUl9FVkVOVCkpOworICAgIGlmIChFdmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBhbGxvYyBuZXcgT1RMV0ZfQUREUl9FVkVOVCIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFdmVudC0+Tm90aWZpY2F0aW9uVHlwZSA9IE5vdGlmaWNhdGlvblR5cGU7CisgICAgICAgIEV2ZW50LT5BZGRyZXNzID0gKnBBZGRyOworCisgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQgdG8gdGhlIHF1ZXVlCisgICAgICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPkV2ZW50c0xvY2spOworICAgICAgICBJbnNlcnRUYWlsTGlzdCgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkLCAmRXZlbnQtPkxpbmspOworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIGhhdmUgYSBuZXcgYWRkcmVzcyB0byBwcm9jZXNzCisgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0FkZHJlc3NDaGFuZ2VzLCAwLCBGQUxTRSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGEgTmV0QnVmZmVyTGlzdHMgdG8gcHJvY2VzcworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdOZXRCdWZmZXJMaXN0cygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gICAgICAgICAgICAgICAgRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIFBORVRfQlVGRkVSX0xJU1QgICAgICAgTmV0QnVmZmVyTGlzdHMKKyAgICApCit7CisgICAgUE9UTFdGX05CTF9FVkVOVCBFdmVudCA9IEZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCBzaXplb2YoT1RMV0ZfTkJMX0VWRU5UKSk7CisgICAgaWYgKEV2ZW50ID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9EQVRBX1BBVEgsICJGYWlsZWQgdG8gYWxsb2MgbmV3IE9UTFdGX05CTF9FVkVOVCIpOworICAgICAgICBvdEx3ZkNvbXBsZXRlTkJMcyhwRmlsdGVyLCBEaXNwYXRjaExldmVsLCBOZXRCdWZmZXJMaXN0cywgU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXZlbnQtPk5ldEJ1ZmZlckxpc3RzID0gTmV0QnVmZmVyTGlzdHM7CisKKyAgICAvLyBBZGQgdGhlIGV2ZW50IHRvIHRoZSBxdWV1ZQorICAgIEZJTFRFUl9BQ1FVSVJFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIERpc3BhdGNoTGV2ZWwpOworICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5OQkxzSGVhZCwgJkV2ZW50LT5MaW5rKTsKKyAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBEaXNwYXRjaExldmVsKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIGhhdmUgYSBuZXcgTkJMIHRvIHByb2Nlc3MKKyAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NOQkxzLCAwLCBGQUxTRSk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3TWFjRnJhbWVDb21tYW5kKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsLAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIGNvbnN0IHVpbnQ4X3QqICAgICAgICAgQnVmZmVyLAorICAgIF9Jbl8gdWludDhfdCAgICAgICAgICAgICAgICBCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgUE9UTFdGX01BQ19GUkFNRV9FVkVOVCBFdmVudCA9IEZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCBGSUVMRF9PRkZTRVQoT1RMV0ZfTUFDX0ZSQU1FX0VWRU5ULCBCdWZmZXIpICsgQnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoRXZlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RBVEFfUEFUSCwgIkZhaWxlZCB0byBhbGxvYyBuZXcgT1RMV0ZfTUFDX0ZSQU1FX0VWRU5UIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFdmVudC0+QnVmZmVyTGVuZ3RoID0gQnVmZmVyTGVuZ3RoOworICAgIG1lbWNweShFdmVudC0+QnVmZmVyLCBCdWZmZXIsIEJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBBZGQgdGhlIGV2ZW50IHRvIHRoZSBxdWV1ZQorICAgIEZJTFRFUl9BQ1FVSVJFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIERpc3BhdGNoTGV2ZWwpOworICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5NYWNGcmFtZXNIZWFkLCAmRXZlbnQtPkxpbmspOworICAgIEZJTFRFUl9SRUxFQVNFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIERpc3BhdGNoTGV2ZWwpOworICAgIAorICAgIC8vIFNldCB0aGUgZXZlbnQgdG8gaW5kaWNhdGUgd2UgaGF2ZSBhIG5ldyBNYWMgRnJhbWUgdG8gcHJvY2VzcworICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc01hY0ZyYW1lcywgMCwgRkFMU0UpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZU5ldEJ1ZmZlckxpc3RzQ2FuY2VsbGVkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUFZPSUQgICAgICAgICAgICAgICAgICBDYW5jZWxJZAorICAgICkKK3sKKyAgICBQTElTVF9FTlRSWSBMaW5rID0gTlVMTDsKKyAgICBMSVNUX0VOVFJZIENhbmNlbExpc3QgPSB7MH07CisgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZDYW5jZWxMaXN0KTsKKyAgICAKKyAgICAvLyBCdWlsZCB1cCBhIGxvY2FsIGxpc3Qgb2YgYWxsIE5CTHMgdGhhdCBuZWVkIHRvIGJlIGNhbmNlbGxlZAorICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJnBGaWx0ZXItPkV2ZW50c0xvY2spOworICAgIExpbmsgPSBwRmlsdGVyLT5OQkxzSGVhZC5GbGluazsKKyAgICB3aGlsZSAoTGluayAhPSAmcEZpbHRlci0+TkJMc0hlYWQpCisgICAgeworICAgICAgICBQT1RMV0ZfTkJMX0VWRU5UIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfTkJMX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworCisgICAgICAgIGlmIChORElTX0dFVF9ORVRfQlVGRkVSX0xJU1RfQ0FOQ0VMX0lEKEV2ZW50LT5OZXRCdWZmZXJMaXN0cykgPT0gQ2FuY2VsSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZUVudHJ5TGlzdCgmRXZlbnQtPkxpbmspOworICAgICAgICAgICAgSW5zZXJ0VGFpbExpc3QoJkNhbmNlbExpc3QsICZFdmVudC0+TGluayk7CisgICAgICAgIH0KKyAgICB9CisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisgICAgCisgICAgLy8gQ2FuY2VsIGFsbCB0aGUgTkJMcworICAgIExpbmsgPSBDYW5jZWxMaXN0LkZsaW5rOworICAgIHdoaWxlIChMaW5rICE9ICZDYW5jZWxMaXN0KQorICAgIHsKKyAgICAgICAgUE9UTFdGX05CTF9FVkVOVCBFdmVudCA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIE9UTFdGX05CTF9FVkVOVCwgTGluayk7CisgICAgICAgIExpbmsgPSBMaW5rLT5GbGluazsKKworICAgICAgICBvdEx3ZkNvbXBsZXRlTkJMcyhwRmlsdGVyLCBGQUxTRSwgRXZlbnQtPk5ldEJ1ZmZlckxpc3RzLCBTVEFUVVNfQ0FOQ0VMTEVEKTsKKworICAgICAgICAvLyBEZWxldGUgdGhlIGV2ZW50CisgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICB9Cit9CisKKy8vIENvbXBsZXRlcyB0aGUgTmV0QnVmZmVyTGlzdHMgaW4gdGhlIGV2ZW50CitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZDb21wbGV0ZU5CTHMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBQTkVUX0JVRkZFUl9MSVNUICAgICAgIE5ldEJ1ZmZlckxpc3RzLAorICAgIF9Jbl8gTlRTVEFUVVMgICAgICAgICAgICAgICBTdGF0dXMKKyAgICApCit7CisgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAib3RMd2ZDb21wbGV0ZU5CTHMsIEZpbHRlcjolcCwgTkJMOiVwLCBTdGF0dXM6JSFTVEFUVVMhIiwgcEZpbHRlciwgTmV0QnVmZmVyTGlzdHMsIFN0YXR1cyk7CisKKyAgICAvLyBTZXQgdGhlIHN0YXR1cyBmb3IgYWxsIHRoZSBOQkxzCisgICAgUE5FVF9CVUZGRVJfTElTVCBDdXJyTmJsID0gTmV0QnVmZmVyTGlzdHM7CisgICAgd2hpbGUgKEN1cnJOYmwpCisgICAgeworICAgICAgICBORVRfQlVGRkVSX0xJU1RfU1RBVFVTKEN1cnJOYmwpID0gU3RhdHVzOworICAgICAgICBDdXJyTmJsID0gTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKEN1cnJOYmwpOworICAgIH0KKworICAgIE5UX0FTU0VSVChOZXRCdWZmZXJMaXN0cyk7CisKKyAgICAvLyBJbmRpY2F0ZSB0aGUgY29tcGxldGlvbgorICAgIE5kaXNGU2VuZE5ldEJ1ZmZlckxpc3RzQ29tcGxldGUoCisgICAgICAgIHBGaWx0ZXItPkZpbHRlckhhbmRsZSwKKyAgICAgICAgTmV0QnVmZmVyTGlzdHMsCisgICAgICAgIERpc3BhdGNoTGV2ZWwgPyBORElTX1NFTkRfQ09NUExFVEVfRkxBR1NfRElTUEFUQ0hfTEVWRUwgOiAwCisgICAgICAgICk7Cit9CisKK19GdW5jdGlvbl9jbGFzc18oRFJJVkVSX0NBTkNFTCkKK19SZXF1aXJlc19sb2NrX2hlbGRfKF9HbG9iYWxfY2FuY2VsX3NwaW5fbG9ja18pCitfUmVsZWFzZXNfbG9ja18oX0dsb2JhbF9jYW5jZWxfc3Bpbl9sb2NrXykKK19JUlFMX3JlcXVpcmVzX21pbl8oRElTUEFUQ0hfTEVWRUwpCitfSVJRTF9yZXF1aXJlc18oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0NhbmNlbElycCgKKyAgICBfSW5vdXRfIHN0cnVjdCBfREVWSUNFX09CSkVDVCAqRGV2aWNlT2JqZWN0LAorICAgIF9Jbm91dF8gX0lSUUxfdXNlc19jYW5jZWxfIHN0cnVjdCBfSVJQICpJcnAKKyAgICApCit7CisgICAgUElSUCBJcnBUb0NhbmNlbCA9IE5VTEw7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERldmljZU9iamVjdCk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0lPQ1RMLCAiSXJwPSVwIiwgSXJwKTsKKworICAgIElvUmVsZWFzZUNhbmNlbFNwaW5Mb2NrKElycC0+Q2FuY2VsSXJxbCk7CisKKyAgICAvLworICAgIC8vIFNlYXJjaCBmb3IgYSBxdWV1ZWQgdXAgSXJwIGFuZCBjYW5jZWwgaXQgaWYgd2UgZmluZCBpdAorICAgIC8vCisKKyAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCZGaWx0ZXJMaXN0TG9jayk7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBmaWx0ZXIgaW5zdGFuY2UKKyAgICBmb3IgKFBMSVNUX0VOVFJZIExpbmsgPSBGaWx0ZXJNb2R1bGVMaXN0LkZsaW5rOyBMaW5rICE9ICZGaWx0ZXJNb2R1bGVMaXN0OyBMaW5rID0gTGluay0+RmxpbmspCisgICAgeworICAgICAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBNU19GSUxURVIsIEZpbHRlck1vZHVsZUxpbmspOworICAgICAgICAgICAgCisgICAgICAgIEZJTFRFUl9BQ1FVSVJFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIFRSVUUpOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBxdWV1ZWQgSVJQcyBmb3IgdGhlIGZpbHRlcgorICAgICAgICBQTElTVF9FTlRSWSBJcnBMaW5rID0gcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZC5GbGluazsKKyAgICAgICAgd2hpbGUgKElycExpbmsgIT0gJnBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBJUlAgUXVldWVkSXJwID0gQ09OVEFJTklOR19SRUNPUkQoSXJwTGluaywgSVJQLCBUYWlsLk92ZXJsYXkuTGlzdEVudHJ5KTsKKyAgICAgICAgICAgIElycExpbmsgPSBJcnBMaW5rLT5GbGluazsKKworICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBpdCwgcmVtb3ZlIGZyb20gdGhlIGFuZCBwcmVwYXJlIHRvIGNvbXBsZXRlIGl0CisgICAgICAgICAgICBpZiAoUXVldWVkSXJwID09IElycCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW1vdmVFbnRyeUxpc3QoJlF1ZXVlZElycC0+VGFpbC5PdmVybGF5Lkxpc3RFbnRyeSk7CisgICAgICAgICAgICAgICAgSXJwVG9DYW5jZWwgPSBRdWV1ZWRJcnA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBUUlVFKTsKKworICAgICAgICBpZiAoSXJwVG9DYW5jZWwpIGJyZWFrOworICAgIH0KKworICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKworICAgIGlmIChJcnBUb0NhbmNlbCkKKyAgICB7CisgICAgICAgIElycFRvQ2FuY2VsLT5Jb1N0YXR1cy5TdGF0dXMgPSBTVEFUVVNfQ0FOQ0VMTEVEOworICAgICAgICBJcnBUb0NhbmNlbC0+SW9TdGF0dXMuSW5mb3JtYXRpb24gPSAwOworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnBUb0NhbmNlbCwgSU9fTk9fSU5DUkVNRU5UKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfSU9DVEwpOworfQorCisvLyBRdWV1ZXMgYW4gSXJwIGZvciBwcm9jZXNzaW5nCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlSXJwKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICBJcnAKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9JT0NUTCwgIklycD0lcCIsIElycCk7CisKKyAgICAvLyBNYXJrIHRoZSBJcnAgYXMgcGVuZGluZworICAgIElvTWFya0lycFBlbmRpbmcoSXJwKTsKKyAgICAKKyAgICBGSUxURVJfQUNRVUlSRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisKKyAgICAvLyBTZXQgdGhlIGNhbmNlbCByb3V0aW5lIGZvciB0aGUgSXJwCisgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycCwgb3RMd2ZFdmVudFByb2Nlc3NpbmdDYW5jZWxJcnApOworCisgICAgLy8gUXVldWUgdGhlIElycCB1cCBmb3IgcHJvY2Vzc2luZworICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5FdmVudElycExpc3RIZWFkLCAmSXJwLT5UYWlsLk92ZXJsYXkuTGlzdEVudHJ5KTsKKworICAgIEZJTFRFUl9SRUxFQVNFX0xPQ0soJnBGaWx0ZXItPkV2ZW50c0xvY2ssIEZBTFNFKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIGhhdmUgYW4gSXJwIHRvIHByb2Nlc3MKKyAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NJcnAsIDAsIEZBTFNFKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9JT0NUTCk7Cit9CisKKy8vIFByb2Nlc3NlcyB0aGUgbmV4dCBPcGVuVGhyZWFkIElvQ3RsIElycAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdOZXh0SXJwKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIFBJUlAgSXJwID0gTlVMTDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfSU9DVEwpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHBvaW50ZXIKKyAgICAgICAgSXJwID0gTlVMTDsKKworICAgICAgICAvLyBHZXQgdGhlIG5leHQgSXJwIGluIHRoZSBxdWV1ZQorICAgICAgICBGSUxURVJfQUNRVUlSRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisgICAgICAgIGlmICghSXNMaXN0RW1wdHkoJnBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQpKQorICAgICAgICB7CisgICAgICAgICAgICBQTElTVF9FTlRSWSBMaW5rID0gUmVtb3ZlSGVhZExpc3QoJnBGaWx0ZXItPkV2ZW50SXJwTGlzdEhlYWQpOworICAgICAgICAgICAgSXJwID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgSVJQLCBUYWlsLk92ZXJsYXkuTGlzdEVudHJ5KTsKKworICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGNhbmNlbCByb3V0aW5lIHNpbmNlIHdlIGFyZSBwcm9jZXNzaW5nIHRoaXMgbm93CisgICAgICAgICAgICBLSVJRTCBpcnFsOworICAgICAgICAgICAgSW9BY3F1aXJlQ2FuY2VsU3BpbkxvY2soJmlycWwpOworICAgICAgICAgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycCwgTlVMTCk7CisgICAgICAgICAgICBJb1JlbGVhc2VDYW5jZWxTcGluTG9jayhpcnFsKTsKKyAgICAgICAgfQorICAgICAgICBGSUxURVJfUkVMRUFTRV9MT0NLKCZwRmlsdGVyLT5FdmVudHNMb2NrLCBGQUxTRSk7CisKKyAgICAgICAgaWYgKElycCkKKyAgICAgICAgeyAgICAKKyAgICAgICAgICAgIG90THdmQ29tcGxldGVPcGVuVGhyZWFkSXJwKHBGaWx0ZXIsIElycCk7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKElycCk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfSU9DVEwpOworfQorCisvLyBJbmRpY2F0ZXMgYSBlbmVyZ3kgc2NhbiB3YXMgY29tcGxldGVkCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZUVuZXJneVNjYW5SZXN1bHQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBDSEFSICAgICAgIE1heFJzc2kKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9JT0NUTCk7CisKKyAgICAvLyBDYWNoZSB0aGUgUnNzaQorICAgIHBGaWx0ZXItPm90TGFzdEVuZXJneVNjYW5NYXhSc3NpID0gTWF4UnNzaTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGV2ZW50IHRvIGluZGljYXRlIHdlIHNob3VsZCBpbmRpY2F0ZSB0aGUgc3RhdGUgYmFjayB0byBPcGVuVGhyZWFkCisgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRFbmVyZ3lTY2FuQ29tcGxldGUsIDAsIEZBTFNFKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9JT0NUTCk7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjb3B5IGRhdGEgb3V0IG9mIGEgTkVUX0JVRkZFUgorX19mb3JjZWlubGluZQorTlRTVEFUVVMKK0NvcHlEYXRhQnVmZmVyKAorICAgIF9Jbl8gUE5FVF9CVUZGRVIgICAgICAgICAgICBOZXRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICAgICAgICAgIFNpemUsCisgICAgX091dF93cml0ZXNfYnl0ZXNfYWxsXyhTaXplKSAKKyAgICAgICAgIFBWT0lEICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24KKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICAvLyBSZWFkIHRoZSBkYXRhIG91dCBvZiB0aGUgTmV0QnVmZmVyCisgICAgUFZPSUQgbWVtID0gTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBTaXplLCBEZXN0aW5hdGlvbiwgMSwgMCk7CisgICAgaWYgKG1lbSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgTlRfQVNTRVJUKEZBTFNFKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGEgZGlmZmVyZW50IG91dHB1dCBtZW1vcnkgYWRkcmVzcywgdGhlbiBjb3B5IHRoYXQgZGF0YSB0byBEZXN0aW5hdGlvbjsKKyAgICAvLyBvdGhlcndpc2UsIGl0IHdhcyBhbHJlYWR5IGNvcGllZCB0aGVyZQorICAgIGlmIChtZW0gIT0gRGVzdGluYXRpb24pCisgICAgeworICAgICAgICBSdGxDb3B5TWVtb3J5KERlc3RpbmF0aW9uLCBtZW0sIFNpemUpOworICAgIH0KKworZXJyb3I6CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfRnVuY3Rpb25fY2xhc3NfKEVYVF9DQUxMQkFDSykKK19JUlFMX3JlcXVpcmVzXyhESVNQQVRDSF9MRVZFTCkKK19JUlFMX3JlcXVpcmVzX3NhbWVfCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ1RpbWVyKAorICAgIF9Jbl8gUEVYX1RJTUVSIFRpbWVyLAorICAgIF9Jbl9vcHRfIFBWT0lEIENvbnRleHQKKyAgICApCit7CisgICAgaWYgKENvbnRleHQgPT0gTlVMTCkgcmV0dXJuOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpQ29udGV4dDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKFRpbWVyKTsKKyAgICAKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRXZlbnQgcHJvY2Vzc2luZyBoaWdoIHByZWNpc2lvbiB0aW1lciBmaXJlZC4iKTsKKyNlbmRpZgorCisgICAgcEZpbHRlci0+RXZlbnRUaW1lclN0YXRlID0gT1RfRVZFTlRfVElNRVJfRklSRUQ7CisKKyAgICAvLyBJbmRpY2F0ZSBldmVudCB0byB3b3JrZXIgdGhyZWFkIHRvIHVwZGF0ZSB0aGUgd2FpdCB0aW1lCisgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRXYWl0VGltZVVwZGF0ZWQsIDAsIEZBTFNFKTsKK30KKworLy8gV29ya2VyIHRocmVhZCBmb3IgcHJvY2Vzc2luZyBhbGwgZXZlbnRzCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitvdEx3ZkV2ZW50V29ya2VyVGhyZWFkKAorICAgIFBWT0lEICAgQ29udGV4dAorICAgICkKK3sKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSAoUE1TX0ZJTFRFUilDb250ZXh0OworICAgIE5UX0FTU0VSVChwRmlsdGVyKTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQS0VWRU5UIFdhaXRFdmVudHNbXSA9IAorICAgIHsgCisgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFN0b3BFdmVudCwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHMsCisgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NNYWNGcmFtZXMsCisgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFdhaXRUaW1lVXBkYXRlZCwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc1Rhc2tsZXRzLAorICAgICAgICAmcEZpbHRlci0+U2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0lycCwKKyAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0FkZHJlc3NDaGFuZ2VzLAorICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRFbmVyZ3lTY2FuQ29tcGxldGUKKyAgICB9OworCisgICAgS1dBSVRfQkxPQ0sgV2FpdEJsb2Nrc1tBUlJBWVNJWkUoV2FpdEV2ZW50cyldID0geyAwIH07CisKKyAgICAvLyBTcGFjZSB0byBwcm9jZXNzaW5nIGJ1ZmZlcnMKKyAgICBjb25zdCBVTE9ORyBNZXNzYWdlQnVmZmVyU2l6ZSA9IDEyODA7CisgICAgUFVDSEFSIE1lc3NhZ2VCdWZmZXIgPSBGSUxURVJfQUxMT0NfTUVNKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgTWVzc2FnZUJ1ZmZlclNpemUpOworICAgIGlmIChNZXNzYWdlQnVmZmVyID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREFUQV9QQVRILCAiRmFpbGVkIHRvIGFsbG9jYXRlIDEyODAgYnl0ZXMgZm9yIE1lc3NhZ2VCdWZmZXIhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBERUJVR19BTExPQworICAgIC8vIEluaXRpYWxpemUgdGhlIGxpc3QgaGVhZCBmb3IgYWxsb2NhdGlvbnMKKyAgICBJbml0aWFsaXplTGlzdEhlYWQoJnBGaWx0ZXItPm90T3V0U3RhbmRpbmdBbGxvY2F0aW9ucyk7CisKKyAgICAvLyBDYWNoZSB0aGUgVGhyZWFkIElECisgICAgcEZpbHRlci0+b3RUaHJlYWRJZCA9IFBzR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKKworICAgIC8vIEluaXRpYWxpemUgdGhlIHJhZGlvIGxheWVyCisgICAgb3RMd2ZSYWRpb0luaXQocEZpbHRlcik7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG90SW5zdGFuY2UgYW5kIGFsbG9jYXRlIGl0CisgICAgcEZpbHRlci0+b3RJbnN0YW5jZVNpemUgPSAwOworICAgIChWT0lEKW90SW5zdGFuY2VJbml0KE5VTEwsICZwRmlsdGVyLT5vdEluc3RhbmNlU2l6ZSk7CisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPm90SW5zdGFuY2VTaXplICE9IDApOworCisgICAgLy8gQWRkIHNwYWNlIGZvciBhIHBvaW50ZXIgYmFjayB0byB0aGUgZmlsdGVyCisgICAgcEZpbHRlci0+b3RJbnN0YW5jZVNpemUgKz0gc2l6ZW9mKFBNU19GSUxURVIpOworCisgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlcgorICAgIHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIgPSAoUFVDSEFSKUZJTFRFUl9BTExPQ19NRU0ocEZpbHRlci0+RmlsdGVySGFuZGxlLCAoVUxPTkcpcEZpbHRlci0+b3RJbnN0YW5jZVNpemUpOworICAgIGlmIChwRmlsdGVyID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIG90SW5zdGFuY2UgYnVmZmVyLCAweCV4IGJ5dGVzIiwgKFVMT05HKXBGaWx0ZXItPm90SW5zdGFuY2VTaXplKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBSdGxaZXJvTWVtb3J5KHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIsIHBGaWx0ZXItPm90SW5zdGFuY2VTaXplKTsKKworICAgIC8vIFN0b3JlIHRoZSBwb2ludGVyIGFuZCBkZWNyZW1lbnQgdGhlIHNpemUKKyAgICBtZW1jcHkocEZpbHRlci0+b3RJbnN0YW5jZUJ1ZmZlciwgJnBGaWx0ZXIsIHNpemVvZihQTVNfRklMVEVSKSk7CisgICAgcEZpbHRlci0+b3RJbnN0YW5jZVNpemUgLT0gc2l6ZW9mKFBNU19GSUxURVIpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgT3BlblRocmVhZCBsaWJyYXJ5CisgICAgcEZpbHRlci0+b3RDYWNoZWRSb2xlID0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ7CisgICAgcEZpbHRlci0+b3RDdHggPSBvdEluc3RhbmNlSW5pdChwRmlsdGVyLT5vdEluc3RhbmNlQnVmZmVyICsgc2l6ZW9mKFBNU19GSUxURVIpLCAmcEZpbHRlci0+b3RJbnN0YW5jZVNpemUpOworICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdEN0eCk7CisgICAgaWYgKHBGaWx0ZXItPm90Q3R4ID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90SW5zdGFuY2VJbml0IGZhaWxlZCwgb3RJbnN0YW5jZVNpemUgPSAldSBieXRlcyIsIChVTE9ORylwRmlsdGVyLT5vdEluc3RhbmNlU2l6ZSk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgb3VyIGhlbHBlciBmdW5jdGlvbiByZXR1cm5zIHRoZSByaWdodCBwb2ludGVyIGZvciB0aGUgZmlsdGVyLCBnaXZlbiB0aGUgb3BlbnRocmVhZCBpbnN0YW5jZQorICAgIE5UX0FTU0VSVChvdEN0eFRvRmlsdGVyKHBGaWx0ZXItPm90Q3R4KSA9PSBwRmlsdGVyKTsKKworICAgIC8vIERpc2FibGUgSWNtcCAocGluZykgaGFuZGxpbmcKKyAgICBvdEljbXA2U2V0RWNob0VuYWJsZWQocEZpbHRlci0+b3RDdHgsIEZBTFNFKTsKKworICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyB3aXRoIE9wZW5UaHJlYWQKKyAgICBvdFNldFN0YXRlQ2hhbmdlZENhbGxiYWNrKHBGaWx0ZXItPm90Q3R4LCBvdEx3ZlN0YXRlQ2hhbmdlZENhbGxiYWNrLCBwRmlsdGVyKTsKKyAgICBvdElwNlNldFJlY2VpdmVDYWxsYmFjayhwRmlsdGVyLT5vdEN0eCwgb3RMd2ZSZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjaywgcEZpbHRlcik7CisKKyAgICAvLyBRdWVyeSB0aGUgY3VycmVudCBhZGRyZXNzZXMgZnJvbSBUQ1BJUCBhbmQgY2FjaGUgdGhlbQorICAgICh2b2lkKW90THdmSW5pdGlhbGl6ZUFkZHJlc3NlcyhwRmlsdGVyKTsKKworICAgIC8vIEluaXRpYWx6ZSBtZWRpYSBjb25uZWN0IHN0YXRlIHRvIGRpc2Nvbm5lY3RlZAorICAgIG90THdmSW5kaWNhdGVMaW5rU3RhdGUocEZpbHRlciwgTWVkaWFDb25uZWN0U3RhdGVEaXNjb25uZWN0ZWQpOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgICAgIGlmIChwRmlsdGVyLT5OZXh0QWxhcm1UaWNrQ291bnQuUXVhZFBhcnQgPT0gMCkKKyAgICAgICAgeworI2lmZGVmIERFQlVHX1RJTUlORworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkV2ZW50IFByb2Nlc3Npbmcgd2FpdGluZyBmb3IgbmV4dCBldmVudC4iKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvLyBXYWl0IGZvciBldmVudCB0byBzdG9wIG9yIHByb2Nlc3MgZXZlbnQgdG8gZmlyZQorICAgICAgICAgICAgc3RhdHVzID0gS2VXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKEFSUkFZU0laRShXYWl0RXZlbnRzKSwgKFBWT0lEKilXYWl0RXZlbnRzLCBXYWl0QW55LCBFeGVjdXRpdmUsIEtlcm5lbE1vZGUsIEZBTFNFLCBOVUxMLCBXYWl0QmxvY2tzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIExBUkdFX0lOVEVHRVIgU3lzdGVtVGlja0NvdW50OworICAgICAgICAgICAgS2VRdWVyeVRpY2tDb3VudCgmU3lzdGVtVGlja0NvdW50KTsKKworICAgICAgICAgICAgaWYgKHBGaWx0ZXItPk5leHRBbGFybVRpY2tDb3VudC5RdWFkUGFydCA+IFN5c3RlbVRpY2tDb3VudC5RdWFkUGFydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHJlbGF0aXZlIChuZWdhdGl2ZSkgdGltZSB0byB3YWl0IG9uCisgICAgICAgICAgICAgICAgTEFSR0VfSU5URUdFUiBUaW1lb3V0OworICAgICAgICAgICAgICAgIFRpbWVvdXQuUXVhZFBhcnQgPSAoU3lzdGVtVGlja0NvdW50LlF1YWRQYXJ0IC0gcEZpbHRlci0+TmV4dEFsYXJtVGlja0NvdW50LlF1YWRQYXJ0KSAqIEtlUXVlcnlUaW1lSW5jcmVtZW50KCk7CisgICAgICAgICAgICAgICAgCisjaWZkZWYgREVCVUdfVElNSU5HCisgICAgICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkV2ZW50IFByb2Nlc3Npbmcgd2FpdGluZyBmb3IgbmV4dCBldmVudCwgd2l0aCB0aW1lb3V0LCAlZCBtcy4iLCAoaW50KShUaW1lb3V0LlF1YWRQYXJ0IC8gLTEwMDAwKSk7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGV2ZW50IHRvIHN0b3Agb3IgcHJvY2VzcyBldmVudCB0byBmaXJlIG9yIHRpbWVvdXQKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBLZVdhaXRGb3JNdWx0aXBsZU9iamVjdHMoQVJSQVlTSVpFKFdhaXRFdmVudHMpLCAoUFZPSUQqKVdhaXRFdmVudHMsIFdhaXRBbnksIEV4ZWN1dGl2ZSwgS2VybmVsTW9kZSwgRkFMU0UsICZUaW1lb3V0LCBXYWl0QmxvY2tzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRXZlbnQgUHJvY2Vzc2luZyBydW5uaW5nIGltbWVkaWF0ZWx5LiIpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHdhaXQKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVElNRU9VVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGl0IGlzIHRoZSBmaXJzdCBldmVudCwgdGhlbiB3ZSBhcmUgc2h1dHRpbmcgZG93bi4gRXhpdCBsb29wIGFuZCB0ZXJtaW5hdGUgdGhyZWFkCisgICAgICAgIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIlJlY2VpdmVkIGV2ZW50IHdvcmtlciB0aHJlYWQgc2h1dGRvd24gZXZlbnQuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyNpZmRlZiBERUJVR19USU1JTkcKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkV2ZW50IFByb2Nlc3Npbmcgc3RhdHVzPTB4JXgiLCBzdGF0dXMpOworI2VuZGlmCisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXZlbnQgZmlyZWQgdG8gcHJvY2VzcyBldmVudHMKKyAgICAgICAgLy8KKworICAgICAgICBpZiAoc3RhdHVzID09IFNUQVRVU19USU1FT1VUIHx8IAorICAgICAgICAgICAgKHBGaWx0ZXItPkV2ZW50VGltZXJTdGF0ZSA9PSBPVF9FVkVOVF9USU1FUl9GSVJFRCAmJiBzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDMpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZXNldCB0aGUgd2FpdCB0aW1lb3V0CisgICAgICAgICAgICBwRmlsdGVyLT5OZXh0QWxhcm1UaWNrQ291bnQuUXVhZFBhcnQgPSAwOworICAgICAgICAgICAgcEZpbHRlci0+RXZlbnRUaW1lclN0YXRlID0gT1RfRVZFTlRfVElNRVJfTk9UX1JVTk5JTkc7CisKKyAgICAgICAgICAgIC8vIEluZGljYXRlIHRvIE9wZW5UaHJlYWQgdGhhdCB0aGUgYWxhcm0gaGFzIGZpcmVkCisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDEpIC8vIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHMgZmlyZWQKKyAgICAgICAgeworICAgICAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgcXVldWUgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMKKyAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUE9UTFdGX05CTF9FVkVOVCBFdmVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGdldCB0aGUgZmlyc3QgaXRlbSwgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgaWYgKCFJc0xpc3RFbXB0eSgmcEZpbHRlci0+TkJMc0hlYWQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IFJlbW92ZUhlYWRMaXN0KCZwRmlsdGVyLT5OQkxzSGVhZCk7CisgICAgICAgICAgICAgICAgICAgIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfTkJMX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBoYXZlIGVtcHRpZWQgdGhlIHF1ZXVlCisgICAgICAgICAgICAgICAgaWYgKEV2ZW50ID09IE5VTEwpIGJyZWFrOworCisgICAgICAgICAgICAgICAgTlRfQVNTRVJUKEV2ZW50LT5OZXRCdWZmZXJMaXN0cyk7CisgICAgICAgICAgICAgICAgTlRTVEFUVVMgTmJsU3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisKKyAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBldmVudAorICAgICAgICAgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgQ3Vyck5ibCA9IEV2ZW50LT5OZXRCdWZmZXJMaXN0czsKKyAgICAgICAgICAgICAgICB3aGlsZSAoQ3Vyck5ibCAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUE5FVF9CVUZGRVIgQ3Vyck5iID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKEN1cnJOYmwpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoQ3Vyck5iICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChORVRfQlVGRkVSX0RBVEFfTEVOR1RIKEN1cnJOYikgPD0gTWVzc2FnZUJ1ZmZlclNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoQ3Vyck5iKSA8PSBNZXNzYWdlQnVmZmVyU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IE5CIGRhdGEgaW50byBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5UX1NVQ0NFU1MoQ29weURhdGFCdWZmZXIoQ3Vyck5iLCBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKEN1cnJOYiksIE1lc3NhZ2VCdWZmZXIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TWVzc2FnZSAqbWVzc2FnZSA9IG90SXA2TmV3TWVzc2FnZShwRmlsdGVyLT5vdEN0eCwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBvdE1lc3NhZ2VBcHBlbmQobWVzc2FnZSwgTWVzc2FnZUJ1ZmZlciwgKHVpbnQxNl90KU5FVF9CVUZGRVJfREFUQV9MRU5HVEgoQ3Vyck5iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREFUQV9QQVRILCAib3RBcHBlbmRNZXNzYWdlIGZhaWxlZCB3aXRoICUhb3RFcnJvciEiLCBlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X0hFQURFUiogdjZIZWFkZXIgPSAoSVBWNl9IRUFERVIqKU1lc3NhZ2VCdWZmZXI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCBJUDZfU0VORDogJXAgOiAlIUlQVjZBRERSISA9PiAlIUlQVjZBRERSISAoJXUgYnl0ZXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZpbHRlciwgQ3Vyck5ibCwgJnY2SGVhZGVyLT5Tb3VyY2VBZGRyZXNzLCAmdjZIZWFkZXItPkRlc3RpbmF0aW9uQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChDdXJyTmIpKTsKKworI2lmZGVmIExPR19CVUZGRVJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RMb2dCdWZmZXIoTWVzc2FnZUJ1ZmZlciwgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChDdXJyTmIpKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBtZXNzYWdlIChpdCB3aWxsIGZyZWUgJ21lc3NhZ2UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gb3RJcDZTZW5kKHBGaWx0ZXItPm90Q3R4LCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9EQVRBX1BBVEgsICJvdFNlbmRJcDZEYXRhZ3JhbSBmYWlsZWQgd2l0aCAlIW90RXJyb3IhIiwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYmxTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREFUQV9QQVRILCAib3ROZXdJUHY2TWVzc2FnZSBmYWlsZWQhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJOYiA9IE5FVF9CVUZGRVJfTkVYVF9OQihDdXJyTmIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQ3Vyck5ibCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChDdXJyTmJsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoRXZlbnQtPk5ldEJ1ZmZlckxpc3RzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxldGUgdGhlIE5CTHMKKyAgICAgICAgICAgICAgICAgICAgb3RMd2ZDb21wbGV0ZU5CTHMocEZpbHRlciwgRkFMU0UsIEV2ZW50LT5OZXRCdWZmZXJMaXN0cywgTmJsU3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBldmVudAorICAgICAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDIpIC8vIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc01hY0ZyYW1lcyBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcworICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQT1RMV0ZfTUFDX0ZSQU1FX0VWRU5UIEV2ZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEp1c3QgZ2V0IHRoZSBmaXJzdCBpdGVtLCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBpZiAoIUlzTGlzdEVtcHR5KCZwRmlsdGVyLT5NYWNGcmFtZXNIZWFkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBMSVNUX0VOVFJZIExpbmsgPSBSZW1vdmVIZWFkTGlzdCgmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCk7CisgICAgICAgICAgICAgICAgICAgIEV2ZW50ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RMV0ZfTUFDX0ZSQU1FX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBoYXZlIGVtcHRpZWQgdGhlIHF1ZXVlCisgICAgICAgICAgICAgICAgaWYgKEV2ZW50ID09IE5VTEwpIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgaW5pdGlhbCBsZW5ndGggdmFsdWUgYW5kIHZhbGlkYXRlCisgICAgICAgICAgICAgICAgdWludDE2X3QgcGFja2V0TGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudC0+QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQtPkJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRMZW5ndGgpICYmCisgICAgICAgICAgICAgICAgICAgIHBhY2tldExlbmd0aCA8PSBzaXplb2YocEZpbHRlci0+b3RSZWNlaXZlTWVzc2FnZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgRXZlbnQtPkJ1ZmZlckxlbmd0aCA+IHNpemVvZih1aW50MTZfdCkgKyBwYWNrZXRMZW5ndGgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tTGVuZ3RoID0gKHVpbnQ4X3QpcGFja2V0TGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgb2Zmc2V0ID0gMjsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSBFdmVudC0+QnVmZmVyTGVuZ3RoIC0gMjsKKworICAgICAgICAgICAgICAgICAgICBpZiAocGFja2V0TGVuZ3RoICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcEZpbHRlci0+b3RSZWNlaXZlTWVzc2FnZSwgRXZlbnQtPkJ1ZmZlciArIG9mZnNldCwgcGFja2V0TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IHBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLm1MZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGVycm9yQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgaW50OF90IG5vaXNlRmxvb3IgPSAtMTI4OworICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBmbGFncyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudC0+QnVmZmVyICsgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyggLy8gUEhZLWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgLy8gODAyLjE1LjQgY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAvLyA4MDIuMTUuNCBMUUkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKCAvLyBWZW5kb3ItZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLm1Qb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9pc2VGbG9vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLm1DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tTHFpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvckNvZGUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdEx3ZlJhZGlvUmVjZWl2ZUZyYW1lKHBGaWx0ZXIsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBldmVudAorICAgICAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDMpIC8vIEV2ZW50V29ya2VyVGhyZWFkV2FpdFRpbWVVcGRhdGVkIGZpcmVkCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8sIHRoZSBuZXh0IHRpbWUgd2Ugd2FpdCwgd2Ugd2lsbCBiZSB1c2luZyB0aGUgdXBkYXRlZCB0aW1lCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19XQUlUXzAgKyA0KSAvLyBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0cyBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBQcm9jZXNzIGFsbCB0YXNrbGV0cyB0aGF0IHdlcmUgaW5kaWNhdGVkIHRvIHVzIGZyb20gT3BlblRocmVhZAorICAgICAgICAgICAgb3RUYXNrbGV0c1Byb2Nlc3MocEZpbHRlci0+b3RDdHgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUVVNfV0FJVF8wICsgNSkgLy8gU2VuZE5ldEJ1ZmZlckxpc3RDb21wbGV0ZSBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNvbXBsZXRpb24gb2YgdGhlIE5CTCBzZW5kCisgICAgICAgICAgICBvdEx3ZlJhZGlvVHJhbnNtaXRGcmFtZURvbmUocEZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19XQUlUXzAgKyA2KSAvLyBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NJcnAgZmlyZWQKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUHJvY2VzcyBhbnkgSVJQcyB0aGF0IHdlcmUgcGVuZGVkCisgICAgICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ05leHRJcnAocEZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRVU19XQUlUXzAgKyA3KSAvLyBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NBZGRyZXNzQ2hhbmdlcyBmaXJlZAorICAgICAgICB7CisgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcworICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQT1RMV0ZfQUREUl9FVkVOVCBFdmVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgaXRlbSwgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgaWYgKCFJc0xpc3RFbXB0eSgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBMSVNUX0VOVFJZIExpbmsgPSBSZW1vdmVIZWFkTGlzdCgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgRXZlbnQgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBPVExXRl9BRERSX0VWRU5ULCBMaW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwRmlsdGVyLT5FdmVudHNMb2NrKTsKKworICAgICAgICAgICAgICAgIC8vIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBoYXZlIGVtcHRpZWQgdGhlIHF1ZXVlCisgICAgICAgICAgICAgICAgaWYgKEV2ZW50ID09IE5VTEwpIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGFkZHJlc3MgY2hhbmdlIG9uIHRoZSBPcGVudGhyZWFkIHRocmVhZAorICAgICAgICAgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nQWRkcmVzc0NoYW5nZWQocEZpbHRlciwgRXZlbnQtPk5vdGlmaWNhdGlvblR5cGUsICZFdmVudC0+QWRkcmVzcyk7CisKKyAgICAgICAgICAgICAgICAvLyBGcmVlIHRoZSBldmVudAorICAgICAgICAgICAgICAgIE5kaXNGcmVlTWVtb3J5KEV2ZW50LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDgpIC8vIEV2ZW50V29ya2VyVGhyZWFkRW5lcmd5U2NhbkNvbXBsZXRlIGZpcmVkCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluZGljYXRlIGVuZXJneSBzY2FuIGNvbXBsZXRlCisgICAgICAgICAgICBvdFBsYXRSYWRpb0VuZXJneVNjYW5Eb25lKHBGaWx0ZXItPm90Q3R4LCBwRmlsdGVyLT5vdExhc3RFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiVW5leHBlY3RlZCB3YWl0IHJlc3VsdCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGhhdmUgYSBmcmFtZSByZWFkeSB0byB0cmFuc21pdCwgZG8gaXQgbm93IGlmIHdlIGFyZSBhbGxvd2VkIHRvIHRyYW5zbWl0CisgICAgICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgIXBGaWx0ZXItPlNlbmRQZW5kaW5nKQorICAgICAgICB7CisgICAgICAgICAgICBvdEx3ZlJhZGlvVHJhbnNtaXRGcmFtZShwRmlsdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIG90THdmUmVsZWFzZUluc3RhbmNlKHBGaWx0ZXIpOworCisgICAgaWYgKHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIE5kaXNGcmVlTWVtb3J5KHBGaWx0ZXItPm90SW5zdGFuY2VCdWZmZXIsIDAsIDApOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKKworICAgIEZJTFRFUl9GUkVFX01FTShNZXNzYWdlQnVmZmVyKTsKKworICAgIFBzVGVybWluYXRlU3lzdGVtVGhyZWFkKFNUQVRVU19TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWQzMmZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2ZpbHRlci5jCkBAIC0wLDAgKzEsODQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgImZpbHRlci50bWgiCisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBxdWVyeSB0aGUgQ29tcGFydG1lbnRJRCBvZiBhIE5ldHdvcmsgSW50ZXJmYWNlCitDT01QQVJUTUVOVF9JRCAKK0dldEludGVyZmFjZUNvbXBhcnRtZW50SUQoCisgICAgX0luXyBQSUZfTFVJRCBwTmV0THVpZAorICAgICkKK3sgIAorICAgIENPTVBBUlRNRU5UX0lEIENvbXBhcnRtZW50SUQgPSBVTlNQRUNJRklFRF9DT01QQVJUTUVOVF9JRDsgIAorCisgICAgTlRTVEFUVVMgU3RhdHVzID0KKyAgICAgICAgTnNpR2V0UGFyYW1ldGVyKAorICAgICAgICAgICAgTnNpQWN0aXZlLAorICAgICAgICAgICAgJk5QSV9NU19ORElTX01PRFVMRUlELAorICAgICAgICAgICAgTmRpc05zaU9iamVjdEludGVyZmFjZUluZm9ybWF0aW9uLAorICAgICAgICAgICAgcE5ldEx1aWQsIHNpemVvZigqcE5ldEx1aWQpLAorICAgICAgICAgICAgTnNpU3RydWN0Um9EeW5hbWljLAorICAgICAgICAgICAgJkNvbXBhcnRtZW50SUQsIHNpemVvZihDb21wYXJ0bWVudElEKSwKKyAgICAgICAgICAgIEZJRUxEX09GRlNFVChORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUk9ELCBDb21wYXJ0bWVudElkKQorICAgICAgICAgICAgKTsKKworICAgIHJldHVybiAoTlRfU1VDQ0VTUyhTdGF0dXMpID8gQ29tcGFydG1lbnRJRCA6IERFRkFVTFRfQ09NUEFSVE1FTlRfSUQpOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitORElTX1NUQVRVUworRmlsdGVyQXR0YWNoKAorICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgTmRpc0ZpbHRlckhhbmRsZSwKKyAgICBORElTX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIEZpbHRlckRyaXZlckNvbnRleHQsCisgICAgUE5ESVNfRklMVEVSX0FUVEFDSF9QQVJBTUVURVJTICBBdHRhY2hQYXJhbWV0ZXJzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyIGF0dGFjaCByb3V0aW5lLgorICAgIENyZWF0ZSBmaWx0ZXIncyBjb250ZXh0LCBhbGxvY2F0ZSBOZXRCdWZmZXJMaXN0cyBhbmQgTmV0QnVmZmVyIHBvb2xzIGFuZCBhbnkKKyAgICBvdGhlciByZXNvdXJjZXMsIGFuZCByZWFkIGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkLgorCitBcmd1bWVudHM6CisKKyAgICBOZGlzRmlsdGVySGFuZGxlIC0gU3BlY2lmeSBhIGhhbmRsZSBpZGVudGlmeWluZyB0aGlzIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIuIEZpbHRlckF0dGFjaAorICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgc2F2ZSB0aGlzIGhhbmRsZS4gSXQgaXMgYSByZXF1aXJlZCAgcGFyYW1ldGVyIGluIHN1YnNlcXVlbnQgY2FsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgdG8gTmRpc0Z4eHggZnVuY3Rpb25zLgorICAgIEZpbHRlckRyaXZlckNvbnRleHQgLSBGaWx0ZXIgZHJpdmVyIGNvbnRleHQgcGFzc2VkIHRvIE5kaXNGUmVnaXN0ZXJGaWx0ZXJEcml2ZXIuCisKKyAgICBBdHRhY2hQYXJhbWV0ZXJzIC0gYXR0YWNoIHBhcmFtZXRlcnMKKworUmV0dXJuIFZhbHVlOgorCisgICAgTkRJU19TVEFUVVNfU1VDQ0VTUzogRmlsdGVyQXR0YWNoIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgZmlsdGVyIGluc3RhbmNlLgorICAgIE5ESVNfU1RBVFVTX1JFU09VUkNFUzogRmlsdGVyQXR0YWNoIGZhaWxlZCBkdWUgdG8gaW5zdWZmaWNpZW50IHJlc291cmNlcy4KKyAgICBORElTX1NUQVRVU19GQUlMVVJFOiBGaWx0ZXJBdHRhY2ggY291bGQgbm90IHNldCB1cCB0aGlzIGluc3RhbmNlIG9mIHRoaXMgZmlsdGVyIGFuZCBpdCBoYXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc1dyaXRlRXJyb3JMb2dFbnRyeSB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmeWluZyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLgorCitOLkIuOiAgRklMVEVSIGNhbiB1c2UgTmRpc1JlZ2lzdGVyRGV2aWNlRXggdG8gY3JlYXRlIGEgZGV2aWNlLCBzbyB0aGUgdXBwZXIgCisgICAgbGF5ZXIgY2FuIHNlbmQgSXJwcyB0byB0aGUgZmlsdGVyLgorCistLSovCit7CisgICAgUE1TX0ZJTFRFUiAgICAgICAgICAgICAgcEZpbHRlciA9IE5VTEw7CisgICAgTkRJU19TVEFUVVMgICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBOdFN0YXR1czsKKyAgICBORElTX0ZJTFRFUl9BVFRSSUJVVEVTICBGaWx0ZXJBdHRyaWJ1dGVzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFNpemU7CisgICAgQ09NUEFSVE1FTlRfSUQgICAgICAgICAgT3JpZ2luYWxDb21wYXJ0bWVudElEOworICAgIE9CSkVDVF9BVFRSSUJVVEVTICAgICAgIE9iamVjdEF0dHJpYnV0ZXMgPSB7MH07CisKKyAgICBjb25zdCBVTE9ORyBSZWdLZXlPZmZzZXQgPSBBUlJBWVNJWkUoTCJcXFJFR0lTVFJZXFxNQUNISU5FXFxTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxTZXJ2aWNlc1xcb3Rsd2ZcXFBhcmFtZXRlcnNcXE5kaXNBZGFwdGVyc1xcIikgLSAxOworICAgIERFQ0xBUkVfQ09OU1RfVU5JQ09ERV9TVFJJTkcoUmVnS2V5UGF0aCwgTCJcXFJFR0lTVFJZXFxNQUNISU5FXFxTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxTZXJ2aWNlc1xcb3Rsd2ZcXFBhcmFtZXRlcnNcXE5kaXNBZGFwdGVyc1xcezAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMH0iKTsKKyAgICBSdGxDb3B5TWVtb3J5KFJlZ0tleVBhdGguQnVmZmVyICsgUmVnS2V5T2Zmc2V0LCBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnROYW1lLT5CdWZmZXIgKyA4LCBzaXplb2YoTCJ7MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfSIpKTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgQVNTRVJUKEZpbHRlckRyaXZlckNvbnRleHQgPT0gKE5ESVNfSEFORExFKUZpbHRlckRyaXZlck9iamVjdCk7CisgICAgICAgIGlmIChGaWx0ZXJEcml2ZXJDb250ZXh0ICE9IChORElTX0hBTkRMRSlGaWx0ZXJEcml2ZXJPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBWZXJpZnkgdGhlIG1lZGlhIHR5cGUgaXMgc3VwcG9ydGVkLiAgVGhpcyBpcyBhIGxhc3QgcmVzb3J0OyB0aGUKKyAgICAgICAgLy8gdGhlIGZpbHRlciBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGJvdW5kIHRvIGFuIHVuc3VwcG9ydGVkIG1pbmlwb3J0CisgICAgICAgIC8vIHRvIGJlZ2luIHdpdGguCisgICAgICAgIGlmIChBdHRhY2hQYXJhbWV0ZXJzLT5NaW5pcG9ydE1lZGlhVHlwZSAhPSBOZGlzTWVkaXVtSVApCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiVW5zdXBwb3J0ZWQgbWVkaWEgdHlwZSwgMHgleC4iLCAoVUxPTkcpQXR0YWNoUGFyYW1ldGVycy0+TWluaXBvcnRNZWRpYVR5cGUpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNpemUgPSBzaXplb2YoTVNfRklMVEVSKSArICBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnRJbnN0YW5jZU5hbWUtPkxlbmd0aDsKKworICAgICAgICBwRmlsdGVyID0gKFBNU19GSUxURVIpRklMVEVSX0FMTE9DX01FTShOZGlzRmlsdGVySGFuZGxlLCBTaXplKTsKKyAgICAgICAgaWYgKHBGaWx0ZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb250ZXh0IHN0cnVjdHVyZSwgMHgleCBieXRlcyIsIFNpemUpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBOZGlzWmVyb01lbW9yeShwRmlsdGVyLCBzaXplb2YoTVNfRklMVEVSKSk7CisKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIk9wZW5pbmcgaW50ZXJmYWNlIHJlZ2lzdHJ5IGtleSAlUyIsIFJlZ0tleVBhdGguQnVmZmVyKTsKKworICAgICAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgICAgICZPYmplY3RBdHRyaWJ1dGVzLAorICAgICAgICAgICAgKFBVTklDT0RFX1NUUklORykmUmVnS2V5UGF0aCwKKyAgICAgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFIHwgT0JKX0tFUk5FTF9IQU5ETEUsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgLy8gT3BlbiB0aGUgcmVnaXN0cnkga2V5CisgICAgICAgIE50U3RhdHVzID0gWndPcGVuS2V5KCZwRmlsdGVyLT5JbnRlcmZhY2VSZWdLZXksIEtFWV9BTExfQUNDRVNTLCAmT2JqZWN0QXR0cmlidXRlcyk7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhOdFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndPcGVuS2V5IGZhaWxlZCB0byBvcGVuICVTLCAlIVNUQVRVUyEiLCBSZWdLZXlQYXRoLkJ1ZmZlciwgTnRTdGF0dXMpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRm9ybWF0IG9mICJcREVWSUNFXHs1QkE5MEM0OS0wRDdFLTQ1NUItOEQzQi02MTRGNjcxNEEyMTJ9IgorICAgICAgICBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnROYW1lLT5CdWZmZXIgKz0gODsKKyAgICAgICAgQXR0YWNoUGFyYW1ldGVycy0+QmFzZU1pbmlwb3J0TmFtZS0+TGVuZ3RoIC09IDggKiBzaXplb2YoV0NIQVIpOworICAgICAgICBOdFN0YXR1cyA9IFJ0bEdVSURGcm9tU3RyaW5nKEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydE5hbWUsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkKTsKKyAgICAgICAgQXR0YWNoUGFyYW1ldGVycy0+QmFzZU1pbmlwb3J0TmFtZS0+QnVmZmVyIC09IDg7CisgICAgICAgIEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydE5hbWUtPkxlbmd0aCArPSA4ICogc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gY29udmVydCBGaWx0ZXJNb2R1bGVHdWlkTmFtZSB0byBhIEdVSUQsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUZyaWVuZGx5TmFtZS5MZW5ndGggPSBwRmlsdGVyLT5JbnRlcmZhY2VGcmllbmRseU5hbWUuTWF4aW11bUxlbmd0aCA9IEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydEluc3RhbmNlTmFtZS0+TGVuZ3RoOworICAgICAgICBwRmlsdGVyLT5JbnRlcmZhY2VGcmllbmRseU5hbWUuQnVmZmVyID0gKFBXU1RSKSgoUFVDSEFSKXBGaWx0ZXIgKyBzaXplb2YoTVNfRklMVEVSKSk7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBGaWx0ZXItPkludGVyZmFjZUZyaWVuZGx5TmFtZS5CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2hQYXJhbWV0ZXJzLT5CYXNlTWluaXBvcnRJbnN0YW5jZU5hbWUtPkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUZyaWVuZGx5TmFtZS5MZW5ndGgpOworCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUluZGV4ID0gQXR0YWNoUGFyYW1ldGVycy0+QmFzZU1pbmlwb3J0SWZJbmRleDsKKyAgICAgICAgcEZpbHRlci0+SW50ZXJmYWNlTHVpZCA9IEF0dGFjaFBhcmFtZXRlcnMtPkJhc2VNaW5pcG9ydE5ldEx1aWQ7CisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZUNvbXBhcnRtZW50SUQgPSBVTlNQRUNJRklFRF9DT01QQVJUTUVOVF9JRDsKKyAgICAgICAgcEZpbHRlci0+RmlsdGVySGFuZGxlID0gTmRpc0ZpbHRlckhhbmRsZTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeSgmRmlsdGVyQXR0cmlidXRlcywgc2l6ZW9mKE5ESVNfRklMVEVSX0FUVFJJQlVURVMpKTsKKyAgICAgICAgRmlsdGVyQXR0cmlidXRlcy5IZWFkZXIuUmV2aXNpb24gPSBORElTX0ZJTFRFUl9BVFRSSUJVVEVTX1JFVklTSU9OXzE7CisgICAgICAgIEZpbHRlckF0dHJpYnV0ZXMuSGVhZGVyLlNpemUgPSBzaXplb2YoTkRJU19GSUxURVJfQVRUUklCVVRFUyk7CisgICAgICAgIEZpbHRlckF0dHJpYnV0ZXMuSGVhZGVyLlR5cGUgPSBORElTX09CSkVDVF9UWVBFX0ZJTFRFUl9BVFRSSUJVVEVTOworICAgICAgICBGaWx0ZXJBdHRyaWJ1dGVzLkZsYWdzID0gMDsKKworICAgICAgICBORElTX0RFQ0xBUkVfRklMVEVSX01PRFVMRV9DT05URVhUKE1TX0ZJTFRFUik7CisgICAgICAgIFN0YXR1cyA9IE5kaXNGU2V0QXR0cmlidXRlcyhOZGlzRmlsdGVySGFuZGxlLCBwRmlsdGVyLCAmRmlsdGVyQXR0cmlidXRlcyk7CisgICAgICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gc2V0IGF0dHJpYnV0ZXMsICUhTkRJU19TVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmlsdGVyIGluaXRpYWxseSBpbiBQYXVzZWQgc3RhdGUKKyAgICAgICAgcEZpbHRlci0+U3RhdGUgPSBGaWx0ZXJQYXVzZWQ7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBydW5kb3ducyB0byBkaXNhYmxlZCB3aXRoIG5vIGFjdGl2ZSByZWZlcmVuY2VzCisgICAgICAgIHBGaWx0ZXItPkV4dGVybmFsUmVmcy5Db3VudCA9IEVYX1JVTkRPV05fQUNUSVZFOworICAgICAgICBwRmlsdGVyLT5jbWRSdW5kb3duLkNvdW50ID0gRVhfUlVORE9XTl9BQ1RJVkU7CisKKyAgICAgICAgLy8gUXVlcnkgdGhlIGNvbXBhcnRtZW50IElEIGZvciB0aGlzIGludGVyZmFjZSB0byB1c2UgZm9yIHRoZSBJUCBzdGFjaworICAgICAgICBwRmlsdGVyLT5JbnRlcmZhY2VDb21wYXJ0bWVudElEID0gR2V0SW50ZXJmYWNlQ29tcGFydG1lbnRJRCgmcEZpbHRlci0+SW50ZXJmYWNlTHVpZCk7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBpcyBpbiBDb21wYXJ0bWVudCAldSIsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCAoVUxPTkcpcEZpbHRlci0+SW50ZXJmYWNlQ29tcGFydG1lbnRJRCk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgcmlnaHQgY29tcGFydG1lbnQKKyAgICAgICAgKFZPSUQpb3RMd2ZTZXRDb21wYXJ0bWVudChwRmlsdGVyLCAmT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKworICAgICAgICAvLyBSZWdpc3RlciBmb3IgYWRkcmVzcyBjaGFuZ2VkIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgTnRTdGF0dXMgPSAKKyAgICAgICAgICAgIE5vdGlmeVVuaWNhc3RJcEFkZHJlc3NDaGFuZ2UoCisgICAgICAgICAgICAgICAgQUZfSU5FVDYsCisgICAgICAgICAgICAgICAgb3RMd2ZBZGRyZXNzQ2hhbmdlQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAmcEZpbHRlci0+QWRkcmVzc0NoYW5nZUhhbmRsZQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjb21wYXJ0bWVudCwgbm93IHRoYXQgd2UgaGF2ZSB0aGUgdGFibGUKKyAgICAgICAgb3RMd2ZSZXZlcnRDb21wYXJ0bWVudChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworCisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhOdFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTm90aWZ5VW5pY2FzdElwQWRkcmVzc0NoYW5nZSBmYWlsZWQsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBGaWx0ZXIgdG8gZ2xvYmFsIGxpc3Qgb2YgVGhyZWFkIEZpbHRlcnMKKyAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworICAgICAgICBJbnNlcnRUYWlsTGlzdCgmRmlsdGVyTW9kdWxlTGlzdCwgJnBGaWx0ZXItPkZpbHRlck1vZHVsZUxpbmspOworICAgICAgICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCZGaWx0ZXJMaXN0TG9jayk7CisKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkNyZWF0ZWQgRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgfSB3aGlsZSAoRkFMU0UpOworCisgICAgLy8gQ2xlYW4gdXAgb24gZmFpbHVyZQorICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChwRmlsdGVyICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlSGFuZGxlICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FuY2VsTWliQ2hhbmdlTm90aWZ5MihwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5BZGRyZXNzQ2hhbmdlSGFuZGxlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTmRpc0ZyZWVNZW1vcnkocEZpbHRlciwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIFN0YXR1cyk7CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitGaWx0ZXJEZXRhY2goCisgICAgTkRJU19IQU5ETEUgICAgIEZpbHRlck1vZHVsZUNvbnRleHQKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBGaWx0ZXIgZGV0YWNoIHJvdXRpbmUuCisgICAgVGhpcyBpcyBhIHJlcXVpcmVkIGZ1bmN0aW9uIHRoYXQgd2lsbCBkZWFsbG9jYXRlIGFsbCB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBkdXJpbmcKKyAgICBGaWx0ZXJBdHRhY2guIE5ESVMgY2FsbHMgRmlsdGVyQXR0YWNoIHRvIHJlbW92ZSBhIGZpbHRlciBpbnN0YW5jZSBmcm9tIGEgZmlsdGVyIHN0YWNrLgorCitBcmd1bWVudHM6CisKKyAgICBGaWx0ZXJNb2R1bGVDb250ZXh0IC0gcG9pbnRlciB0byB0aGUgZmlsdGVyIGNvbnRleHQgYXJlYS4KKworUmV0dXJuIFZhbHVlOgorICAgIE5vbmUuCisKK05PVEU6IENhbGxlZCBhdCBQQVNTSVZFX0xFVkVMIGFuZCB0aGUgZmlsdGVyIGlzIGluIHBhdXNlZCBzdGF0ZQorCistLSovCit7CisgICAgUE1TX0ZJTFRFUiAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXI6ICVwIiwgRmlsdGVyTW9kdWxlQ29udGV4dCk7CisKKyAgICAvLyBGaWx0ZXIgbXVzdCBiZSBpbiBwYXVzZWQgc3RhdGUgYW5kIHByZXR0eSBtdWNoIGluYWN0aXZlCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPlN0YXRlID09IEZpbHRlclBhdXNlZCk7CisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1VOSU5USUFMSVpFRCk7CisKKyAgICAvLworICAgIC8vIERldGFjaCBtdXN0IG5vdCBmYWlsLCBzbyBkbyBub3QgcHV0IGFueSBjb2RlIGhlcmUgdGhhdCBjYW4gcG9zc2libHkgZmFpbC4KKyAgICAvLworCisgICAgLy8gUmVtb3ZlIHRoaXMgRmlsdGVyIGZyb20gdGhlIGdsb2JhbCBsaXN0CisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworICAgIFJlbW92ZUVudHJ5TGlzdCgmcEZpbHRlci0+RmlsdGVyTW9kdWxlTGluayk7CisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgLy8gVW5yZWdpc3RlciBmcm9tIGFkZHJlc3MgY2hhbmdlIG5vdGlmaWNhdGlvbnMKKyAgICBDYW5jZWxNaWJDaGFuZ2VOb3RpZnkyKHBGaWx0ZXItPkFkZHJlc3NDaGFuZ2VIYW5kbGUpOworICAgIHBGaWx0ZXItPkFkZHJlc3NDaGFuZ2VIYW5kbGUgPSBOVUxMOworCisgICAgLy8gQ2xvc2UgdGhlIHJlZ2lzdHJ5IGtleQorICAgIGlmIChwRmlsdGVyLT5JbnRlcmZhY2VSZWdLZXkpCisgICAgeworICAgICAgICBad0Nsb3NlKHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSk7CisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSA9IE5VTEw7CisgICAgfQorCisgICAgLy8gRnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZAorICAgIE5kaXNGcmVlTWVtb3J5KHBGaWx0ZXIsIDAsIDApOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBJbmRpY2F0ZXMgYW4gaW50ZXJmYWNlIHN0YXRlIGNoYW5nZSBoYXMgdGFrZW4gcGxhY2UgKHVzZWQgZm9yIGludGVyZmFjZSBhcnJpdmFsL3JlbW92YWwpCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZOb3RpZnlEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2UoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIGZBdmFpbGFibGUKKyAgICApCit7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0RFVklDRV9BVkFJTEFCSUxJVFk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkRldmljZUF2YWlsYWJpbGl0eVBheWxvYWQuQXZhaWxhYmxlID0gZkF2YWlsYWJsZTsKKworICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KK30KKworUEFHRUQKK05UU1RBVFVTCitHZXRSZWdEV09SRFZhbHVlKAorICAgIF9Jbl8gIFBNU19GSUxURVIgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyAgUENXU1RSICAgICAgICAgICAgVmFsdWVOYW1lLAorICAgIF9PdXRfIFBVTE9ORyAgICAgICAgICAgIFZhbHVlRGF0YQorKQoreworICAgIE5UU1RBVFVTICAgICAgICAgICAgc3RhdHVzOworICAgIFVMT05HICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoOworICAgIFVDSEFSICAgICAgICAgICAgICAga2V5YnVmWzEyOF0gPSB7MH07CisgICAgVU5JQ09ERV9TVFJJTkcgICAgICBVVmFsdWVOYW1lOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgUnRsSW5pdFVuaWNvZGVTdHJpbmcoJlVWYWx1ZU5hbWUsIFZhbHVlTmFtZSk7CisKKyAgICBzdGF0dXMgPSBad1F1ZXJ5VmFsdWVLZXkoCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSwKKyAgICAgICAgJlVWYWx1ZU5hbWUsCisgICAgICAgIEtleVZhbHVlRnVsbEluZm9ybWF0aW9uLAorICAgICAgICBrZXlidWYsCisgICAgICAgIHNpemVvZihrZXlidWYpLAorICAgICAgICAmcmVzdWx0TGVuZ3RoKTsKKworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpIAorICAgIHsKKyAgICAgICAgUEtFWV9WQUxVRV9GVUxMX0lORk9STUFUSU9OIGtleUluZm8gPSAoUEtFWV9WQUxVRV9GVUxMX0lORk9STUFUSU9OKWtleWJ1ZjsKKworICAgICAgICBpZiAoa2V5SW5mby0+VHlwZSAhPSBSRUdfRFdPUkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUl9NSVg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqVmFsdWVEYXRhID0gKigoVUxPTkcgVU5BTElHTkVEICopKGtleWJ1ZiArIGtleUluZm8tPkRhdGFPZmZzZXQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK1BBR0VECitOVFNUQVRVUworU2V0UmVnRFdPUkRWYWx1ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQQ1dTVFIgICAgICAgICBWYWx1ZU5hbWUsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBWYWx1ZURhdGEKKykKK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKKyAgICBVTklDT0RFX1NUUklORyAgICAgIFVWYWx1ZU5hbWU7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBSdGxJbml0VW5pY29kZVN0cmluZygmVVZhbHVlTmFtZSwgVmFsdWVOYW1lKTsKKworICAgIHN0YXR1cyA9IFp3U2V0VmFsdWVLZXkoCisgICAgICAgIHBGaWx0ZXItPkludGVyZmFjZVJlZ0tleSwKKyAgICAgICAgJlVWYWx1ZU5hbWUsCisgICAgICAgIDAsCisgICAgICAgIFJFR19EV09SRCwKKyAgICAgICAgKFBWT0lEKSZWYWx1ZURhdGEsCisgICAgICAgIHNpemVvZihWYWx1ZURhdGEpKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK05ESVNfU1RBVFVTCitGaWx0ZXJSZXN0YXJ0KAorICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgRmlsdGVyTW9kdWxlQ29udGV4dCwKKyAgICBQTkRJU19GSUxURVJfUkVTVEFSVF9QQVJBTUVURVJTIFJlc3RhcnRQYXJhbWV0ZXJzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyIHJlc3RhcnQgcm91dGluZS4KKyAgICBTdGFydCB0aGUgZGF0YXBhdGggLSBiZWdpbiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgTkJMcy4KKworQXJndW1lbnRzOgorCisgICAgRmlsdGVyTW9kdWxlQ29udGV4dCAtIHBvaW50ZXIgdG8gdGhlIGZpbHRlciBjb250ZXh0IHN0dWN0dXJlLgorICAgIFJlc3RhcnRQYXJhbWV0ZXJzICAgLSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXN0YXJ0IG9wZXJhdGlvbi4KKworUmV0dXJuIFZhbHVlOgorCisgICAgTkRJU19TVEFUVVNfU1VDQ0VTUzogaWYgZmlsdGVyIHJlc3RhcnRzIHN1Y2Nlc3NmdWxseQorICAgIE5ESVNfU1RBVFVTX1hYWDogT3RoZXJ3aXNlLgorCistLSovCit7CisgICAgTlRTVEFUVVMgICAgICAgICAgICBOdFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIE5ESVNfU1RBVFVTICAgICAgICAgTmRpc1N0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgUE1TX0ZJTFRFUiAgICAgICAgICBwRmlsdGVyID0gKFBNU19GSUxURVIpRmlsdGVyTW9kdWxlQ29udGV4dDsKKyAgICBQVk9JRCAgICAgICAgICAgICAgIFNwaW5lbENhcHNEYXRhQnVmZmVyID0gTlVMTDsKKyAgICBjb25zdCB1aW50OF90KiAgICAgIFNwaW5lbENhcHNQdHIgPSBOVUxMOworICAgIHNwaW5lbF9zaXplX3QgICAgICAgU3BpbmVsQ2Fwc0xlbiA9IDA7CisgICAgTkxfSU5URVJGQUNFX0tFWSAgICBrZXkgPSB7MH07CisgICAgTkxfSU5URVJGQUNFX1JXICAgICBpbnRlcmZhY2VSdzsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFRocmVhZE9uSG9zdCA9IFRSVUU7CisKKyAgICBQTkRJU19SRVNUQVJUX0dFTkVSQUxfQVRUUklCVVRFUyBOZGlzR2VuZXJhbEF0dHJpYnV0ZXM7CisgICAgUE5ESVNfUkVTVEFSVF9BVFRSSUJVVEVTICAgICAgICAgTmRpc1Jlc3RhcnRBdHRyaWJ1dGVzOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyOiAlcCIsIEZpbHRlck1vZHVsZUNvbnRleHQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPlN0YXRlID09IEZpbHRlclBhdXNlZCk7CisKKyAgICBOZGlzUmVzdGFydEF0dHJpYnV0ZXMgPSBSZXN0YXJ0UGFyYW1ldGVycy0+UmVzdGFydEF0dHJpYnV0ZXM7CisKKyAgICAvLworICAgIC8vIElmIE5kaXNSZXN0YXJ0QXR0cmlidXRlcyBpcyBub3QgTlVMTCwgdGhlbiB0aGUgZmlsdGVyIGNhbiBtb2RpZnkgZ2VuZXJpYyAKKyAgICAvLyBhdHRyaWJ1dGVzIGFuZCBhZGQgbmV3IG1lZGlhIHNwZWNpZmljIGluZm8gYXR0cmlidXRlcyBhdCB0aGUgZW5kLiAKKyAgICAvLyBPdGhlcndpc2UsIGlmIE5kaXNSZXN0YXJ0QXR0cmlidXRlcyBpcyBOVUxMLCB0aGUgZmlsdGVyIHNob3VsZCBub3QgdHJ5IHRvIAorICAgIC8vIG1vZGlmeS9hZGQgYXR0cmlidXRlcy4KKyAgICAvLworICAgIGlmIChOZGlzUmVzdGFydEF0dHJpYnV0ZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEFTU0VSVChOZGlzUmVzdGFydEF0dHJpYnV0ZXMtPk9pZCA9PSBPSURfR0VOX01JTklQT1JUX1JFU1RBUlRfQVRUUklCVVRFUyk7CisKKyAgICAgICAgTmRpc0dlbmVyYWxBdHRyaWJ1dGVzID0gKFBORElTX1JFU1RBUlRfR0VORVJBTF9BVFRSSUJVVEVTKU5kaXNSZXN0YXJ0QXR0cmlidXRlcy0+RGF0YTsKKworICAgICAgICAvLworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjaGFuZ2UgYW55IGF0dHJpYnV0ZXMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgLy8gZHJpdmVyIGNhbiBjaGFuZ2UgdGhlIGN1cnJlbnQgTUFDIGFkZHJlc3MgaGVyZS4gT3IgdGhlIGRyaXZlciBjYW4gYWRkCisgICAgICAgIC8vIG1lZGlhIHNwZWNpZmljIGluZm8gYXR0cmlidXRlcy4KKyAgICAgICAgLy8KKyAgICAgICAgTmRpc0dlbmVyYWxBdHRyaWJ1dGVzLT5Mb29rYWhlYWRTaXplID0gMTI4OworICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgdGhlIFNwaW5lbCBjb21tYW5kIHByb2Nlc3NpbmcKKyAgICBOZGlzU3RhdHVzID0gb3RMd2ZDbWRJbml0aWFsaXplKHBGaWx0ZXIpOworICAgIGlmIChOZGlzU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90THdmQ21kSW5pdGlhbGl6ZSBmYWlsZWQsICUhTkRJU19TVEFUVVMhIiwgTmRpc1N0YXR1cyk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcworICAgIE50U3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsICZTcGluZWxDYXBzRGF0YUJ1ZmZlciwgU1BJTkVMX1BST1BfQ0FQUywgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywgJlNwaW5lbENhcHNQdHIsICZTcGluZWxDYXBzTGVuKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgIHsKKyAgICAgICAgTmRpc1N0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIHF1ZXJ5IFNQSU5FTF9QUk9QX0NBUFMsICUhU1RBVFVTISIsIE50U3RhdHVzKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIEl0ZXJhdGUgYW5kIHByb2Nlc3MgcmV0dXJuZWQgY2FwYWJpbGl0aWVzCisgICAgTlRfQVNTRVJUKFNwaW5lbENhcHNEYXRhQnVmZmVyKTsKKyAgICB3aGlsZSAoU3BpbmVsQ2Fwc0xlbiA+IDApCisgICAgeworICAgICAgICBVTE9ORyBTcGluZWxDYXAgPSAwOworICAgICAgICBzcGluZWxfc3NpemVfdCBsZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKFNwaW5lbENhcHNQdHIsIFNwaW5lbENhcHNMZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCAmU3BpbmVsQ2FwKTsKKyAgICAgICAgaWYgKGxlbiA8IDEpIGJyZWFrOworICAgICAgICBTcGluZWxDYXBzTGVuIC09IChzcGluZWxfc2l6ZV90KWxlbjsKKyAgICAgICAgU3BpbmVsQ2Fwc1B0ciArPSBsZW47CisKKyAgICAgICAgc3dpdGNoIChTcGluZWxDYXApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTUElORUxfQ0FQX01BQ19SQVc6CisgICAgICAgICAgICBwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgfD0gT1RMV0ZfREVWSUNFX0NBUF9SQURJTzsKKyAgICAgICAgICAgIHBGaWx0ZXItPkRldmljZUNhcGFiaWxpdGllcyB8PSBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0FDS19USU1FT1VUOworICAgICAgICAgICAgcEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzIHw9IE9UTFdGX0RFVklDRV9DQVBfUkFESU9fTUFDX1JFVFJZX0FORF9DT0xMSVNJT05fQVZPSURBTkNFOworICAgICAgICAgICAgcEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzIHw9IE9UTFdGX0RFVklDRV9DQVBfUkFESU9fRU5FUkdZX1NDQU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTUElORUxfQ0FQX05FVF9USFJFQURfMV8wOgorICAgICAgICAgICAgcEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzIHw9IE9UTFdGX0RFVklDRV9DQVBfVEhSRUFEXzFfMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIHN0YXRlIGluZGljYXRpbmcgd2hlcmUgd2Ugc2hvdWxkIGJlIHJ1bm5pbmcgdGhlIFRocmVhZCBsb2dpYyAoSG9zdCBvciBEZXZpY2UpLgorICAgIGlmICghTlRfU1VDQ0VTUyhHZXRSZWdEV09SRFZhbHVlKHBGaWx0ZXIsIEwiUnVuT25Ib3N0IiwgJlRocmVhZE9uSG9zdCkpKQorICAgIHsKKyAgICAgICAgLy8gRGVmYXVsdCB0byBydW5uaW5nIG9uIHRoZSBob3N0IGlmIHRoZSBrZXkgaXNuJ3QgcHJlc2VudAorICAgICAgICBUaHJlYWRPbkhvc3QgPSBUUlVFOworICAgICAgICBTZXRSZWdEV09SRFZhbHVlKHBGaWx0ZXIsIEwiUnVuT25Ib3N0IiwgVGhyZWFkT25Ib3N0KTsKKyAgICB9CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyOiAlcCBpbml0aWFsaXppbmcgVGhyZWFkT25Ib3N0PSVkIiwgRmlsdGVyTW9kdWxlQ29udGV4dCwgVGhyZWFkT25Ib3N0KTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIHByb2Nlc3NpbmcgbG9naWMKKyAgICBpZiAoVGhyZWFkT25Ib3N0KQorICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoZSBkZXZpY2UgaGFzIHRoZSBjYXBhYmlsaXRpZXMgdG8gc3VwcG9ydCByYXcgcmFkaW8gY29tbWFuZHMKKyAgICAgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBzdGFydCBiZWNhdXNlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgcmF3IHJhZGlvIGNvbW1hbmRzIik7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfUkFESU9fTU9ERTsKKyAgICAgICAgTnRTdGF0dXMgPSBvdEx3ZkluaXRpYWxpemVUaHJlYWRNb2RlKHBGaWx0ZXIpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90THdmSW5pdGlhbGl6ZVRocmVhZE1vZGUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOdFN0YXR1cyk7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVU5JTlRJQUxJWkVEOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGUgZGV2aWNlIGhhcyB0aGUgY2FwYWJpbGl0aWVzIHRvIHN1cHBvcnQgVGhyZWFkIGNvbW1hbmRzCisgICAgICAgIGlmICgocEZpbHRlci0+RGV2aWNlQ2FwYWJpbGl0aWVzICYgT1RMV0ZfREVWSUNFX0NBUF9USFJFQURfMV8wKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBzdGFydCBiZWNhdXNlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgdGhyZWFkIGNvbW1hbmRzIik7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVEhSRUFEX01PREU7CisgICAgICAgIE50U3RhdHVzID0gb3RMd2ZUdW5Jbml0aWFsaXplKHBGaWx0ZXIpOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoTnRTdGF0dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIm90THdmSW5pdGlhbGl6ZVR1bm5lbE1vZGUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOdFN0YXR1cyk7CisgICAgICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVU5JTlRJQUxJWkVEOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIERBRCBhbmQgTmVpZ2hib3IgYWR2ZXJ0aXNlbWVudHMKKyAgICAvLworICAgIGtleS5MdWlkID0gcEZpbHRlci0+SW50ZXJmYWNlTHVpZDsKKyAgICBObEluaXRpYWxpemVJbnRlcmZhY2VSdygmaW50ZXJmYWNlUncpOworICAgIGludGVyZmFjZVJ3LkRhZFRyYW5zbWl0cyA9IDA7CisgICAgaW50ZXJmYWNlUncuU2VuZFVuc29saWNpdGVkTmVpZ2hib3JBZHZlcnRpc2VtZW50T25EYWQgPSBGQUxTRTsKKyAgCisgICAgTnRTdGF0dXMgPQorICAgICAgICBOc2lTZXRBbGxQYXJhbWV0ZXJzKAorICAgICAgICAgICAgTnNpQWN0aXZlLAorICAgICAgICAgICAgTnNpU2V0RGVmYXVsdCwKKyAgICAgICAgICAgICZOUElfTVNfSVBWNl9NT0RVTEVJRCwKKyAgICAgICAgICAgIE5sSW50ZXJmYWNlT2JqZWN0LAorICAgICAgICAgICAgJmtleSwKKyAgICAgICAgICAgIHNpemVvZihrZXkpLAorICAgICAgICAgICAgJmludGVyZmFjZVJ3LAorICAgICAgICAgICAgc2l6ZW9mKGludGVyZmFjZVJ3KSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKE50U3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTnNpU2V0QWxsUGFyYW1ldGVycyAoTmxJbnRlcmZhY2VPYmplY3QpIGZhaWxlZCwgJSFTVEFUVVMhIiwgTnRTdGF0dXMpOworICAgICAgICBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBleHRlcm5hbCByZWZlcmVuY2VzIHRvIHRoZSBmaWx0ZXIKKyAgICAvLworICAgIEV4UmVJbml0aWFsaXplUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisKKyAgICAvLworICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgT0ssIHNldCB0aGUgZmlsdGVyIGluIHJ1bm5pbmcgc3RhdGUuCisgICAgLy8KKyAgICBwRmlsdGVyLT5TdGF0ZSA9IEZpbHRlclJ1bm5pbmc7IC8vIHdoZW4gc3VjY2Vzc2Z1bAorICAgIG90THdmTm90aWZ5RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlKHBGaWx0ZXIsIFRSVUUpOworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBhcnJpdmFsLCBGaWx0ZXI9JXAiLCAmcEZpbHRlci0+SW50ZXJmYWNlR3VpZCwgcEZpbHRlcik7CisKK2V4aXQ6CisKKyAgICAvLworICAgIC8vIEVuc3VyZSB0aGUgc3RhdGUgaXMgUGF1c2VkIGlmIHJlc3RhcnQgZmFpbGVkLgorICAgIC8vCisgICAgaWYgKE5kaXNTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBGaWx0ZXItPlN0YXRlID0gRmlsdGVyUGF1c2VkOworCisgICAgICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgICAgICB7CisgICAgICAgICAgICBvdEx3ZlVuaW5pdGlhbGl6ZVRocmVhZE1vZGUocEZpbHRlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocEZpbHRlci0+RGV2aWNlU3RhdHVzID09IE9UTFdGX0RFVklDRV9TVEFUVVNfVEhSRUFEX01PREUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90THdmVHVuVW5pbml0aWFsaXplKHBGaWx0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgcEZpbHRlci0+RGV2aWNlU3RhdHVzID0gT1RMV0ZfREVWSUNFX1NUQVRVU19VTklOVElBTElaRUQ7CisKKyAgICAgICAgLy8gQ2xlYW4gdXAgU3BpbmVsIGNvbW1hbmQgcHJvY2Vzc2luZworICAgICAgICBvdEx3ZkNtZFVuaW5pdGlhbGl6ZShwRmlsdGVyKTsKKyAgICB9CisKKyAgICAvLyBGcmVlIHRoZSBidWZmZXIgZm9yIHRoZSBjYXBhYmlsaXRpZXMgd2UgcXVlcmllZAorICAgIGlmIChTcGluZWxDYXBzRGF0YUJ1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRklMVEVSX0ZSRUVfTUVNKFNwaW5lbENhcHNEYXRhQnVmZmVyKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIE5kaXNTdGF0dXMpOworICAgIHJldHVybiBOZGlzU3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitORElTX1NUQVRVUworRmlsdGVyUGF1c2UoCisgICAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORElTX0ZJTFRFUl9QQVVTRV9QQVJBTUVURVJTICAgUGF1c2VQYXJhbWV0ZXJzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRmlsdGVyIHBhdXNlIHJvdXRpbmUuCisgICAgQ29tcGxldGUgYWxsIHRoZSBvdXRzdGFuZGluZyBzZW5kcyBhbmQgcXVldWVkIHNlbmRzLAorICAgIHdhaXQgZm9yIGFsbCB0aGUgb3V0c3RhbmRpbmcgcmVjdnMgdG8gYmUgcmV0dXJuZWQKKyAgICBhbmQgcmV0dXJuIGFsbCB0aGUgcXVldWVkIHJlY2VpdmVzLgorCitBcmd1bWVudHM6CisKKyAgICBGaWx0ZXJNb2R1bGVDb250ZXh0IC0gcG9pbnRlciB0byB0aGUgZmlsdGVyIGNvbnRleHQgc3R1Y3R1cmUKKyAgICBQYXVzZVBhcmFtZXRlcnMgICAgIC0gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGF1c2UKKworUmV0dXJuIFZhbHVlOgorCisgICAgTkRJU19TVEFUVVNfU1VDQ0VTUyBpZiBmaWx0ZXIgcGF1c2VzIHN1Y2Nlc3NmdWxseSwgTkRJU19TVEFUVVNfUEVORElORworICAgIGlmIG5vdC4gIE5vIG90aGVyIHJldHVybiB2YWx1ZSBpcyBhbGxvd2VkIChwYXVzZSBtdXN0IHN1Y2NlZWQsIGV2ZW50dWFsbHkpLgorCitOLkIuOiBXaGVuIHRoZSBmaWx0ZXIgaXMgaW4gUGF1c2luZyBzdGF0ZSwgaXQgY2FuIHN0aWxsIHByb2Nlc3MgT0lEIHJlcXVlc3RzLCAKKyAgICBjb21wbGV0ZSBzZW5kaW5nLCBhbmQgcmV0dXJuaW5nIHBhY2tldHMgdG8gTkRJUywgYW5kIGFsc28gaW5kaWNhdGUgc3RhdHVzLgorICAgIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUgZmlsdGVyIG11c3Qgbm90IGF0dGVtcHQgdG8gc2VuZCBvciAKKyAgICByZWNlaXZlIHBhY2tldHMsIGJ1dCBpdCBtYXkgc3RpbGwgcHJvY2VzcyBPSUQgcmVxdWVzdHMgYW5kIHN0YXR1cyAKKyAgICBpbmRpY2F0aW9ucy4KKworLS0qLworeworICAgIFBNU19GSUxURVIgICAgICBwRmlsdGVyID0gKFBNU19GSUxURVIpKEZpbHRlck1vZHVsZUNvbnRleHQpOworICAgIE5ESVNfU1RBVFVTICAgICBTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoUGF1c2VQYXJhbWV0ZXJzKTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAiLCBGaWx0ZXJNb2R1bGVDb250ZXh0KTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBmbGFnIHRoYXQgdGhlIGZpbHRlciBpcyBnb2luZyB0byBwYXVzZQorICAgIC8vCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPlN0YXRlID09IEZpbHRlclJ1bm5pbmcpOworICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKyAgICBwRmlsdGVyLT5TdGF0ZSA9IEZpbHRlclBhdXNpbmc7CisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgLy8KKyAgICAvLyBTZW5kIGZpbmFsIG5vdGlmaWNhdGlvbiBvZiBpbnRlcmZhY2UgcmVtb3ZhbAorICAgIC8vCisgICAgb3RMd2ZOb3RpZnlEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2UocEZpbHRlciwgRkFMU0UpOworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISByZW1vdmFsLiIsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSBleHRlcm5hbCByZWZlcmVuY2VzIGFuZCB3YWl0IGZvciBleGlzdGluZyBjYWxscyB0byBjb21wbGV0ZQorICAgIC8vCisgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkRpc2FibGluZyBhbmQgd2FpdGluZyBmb3IgZXh0ZXJuYWwgcmVmZXJlbmNlcyB0byByZWxlYXNlIik7CisgICAgRXhXYWl0Rm9yUnVuZG93blByb3RlY3Rpb25SZWxlYXNlKCZwRmlsdGVyLT5FeHRlcm5hbFJlZnMpOworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJFeHRlcm5hbCByZWZlcmVuY2VzIHJlbGVhc2VkLiIpOworCisgICAgLy8KKyAgICAvLyBDbGVhbiB1cCBiYXNlZCBvbiB0aGUgZGV2aWNlIG1vZGUKKyAgICAvLworICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgIHsKKyAgICAgICAgb3RMd2ZVbmluaXRpYWxpemVUaHJlYWRNb2RlKHBGaWx0ZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19USFJFQURfTU9ERSkKKyAgICB7CisgICAgICAgIG90THdmVHVuVW5pbml0aWFsaXplKHBGaWx0ZXIpOworICAgIH0KKworICAgIHBGaWx0ZXItPkRldmljZVN0YXR1cyA9IE9UTFdGX0RFVklDRV9TVEFUVVNfVU5JTlRJQUxJWkVEOworCisgICAgLy8KKyAgICAvLyBDbGVhbiB1cCB0aGUgU3BpbmVsIGNvbW1hbmQgcHJvY2Vzc2luZworICAgIC8vCisgICAgb3RMd2ZDbWRVbmluaXRpYWxpemUocEZpbHRlcik7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc3RhdGUgYmFjayB0byBQYXVzZWQgbm93IHRoYXQgd2UgYXJlIGRvbmUKKyAgICAvLworICAgIHBGaWx0ZXItPlN0YXRlID0gRmlsdGVyUGF1c2VkOworCisgICAgTG9nRnVuY0V4aXRORElTKERSSVZFUl9ERUZBVUxULCBTdGF0dXMpOworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19Vc2VfZGVjbF9hbm5vdGF0aW9uc18KK1ZPSUQKK0ZpbHRlclN0YXR1cygKKyAgICBORElTX0hBTkRMRSAgICAgICAgICAgICBGaWx0ZXJNb2R1bGVDb250ZXh0LAorICAgIFBORElTX1NUQVRVU19JTkRJQ0FUSU9OIFN0YXR1c0luZGljYXRpb24KKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTdGF0dXMgaW5kaWNhdGlvbiBoYW5kbGVyCisKK0FyZ3VtZW50czoKKworICAgIEZpbHRlck1vZHVsZUNvbnRleHQgICAgIC0gb3VyIGZpbHRlciBjb250ZXh0CisgICAgU3RhdHVzSW5kaWNhdGlvbiAgICAgICAgLSB0aGUgc3RhdHVzIGJlaW5nIGluZGljYXRlZAorCitOT1RFOiBjYWxsZWQgYXQgPD0gRElTUEFUQ0hfTEVWRUwKKworICBGSUxURVIgZHJpdmVyIG1heSBjYWxsIE5kaXNGSW5kaWNhdGVTdGF0dXMgdG8gZ2VuZXJhdGUgYSBzdGF0dXMgaW5kaWNhdGlvbiB0bworICBhbGwgaGlnaGVyIGxheWVyIG1vZHVsZXMuCisKKy0tKi8KK3sKKyAgICBQTVNfRklMVEVSICAgICAgcEZpbHRlciA9IChQTVNfRklMVEVSKUZpbHRlck1vZHVsZUNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXI6ICVwLCBJbmRpY2F0ZVN0YXR1czogJTh4IiwgRmlsdGVyTW9kdWxlQ29udGV4dCwgU3RhdHVzSW5kaWNhdGlvbi0+U3RhdHVzQ29kZSk7CisKKyAgICBpZiAoU3RhdHVzSW5kaWNhdGlvbi0+U3RhdHVzQ29kZSA9PSBORElTX1NUQVRVU19MSU5LX1NUQVRFKQorICAgIHsKKyAgICAgICAgUE5ESVNfTElOS19TVEFURSBMaW5rU3RhdGUgPSAoUE5ESVNfTElOS19TVEFURSlTdGF0dXNJbmRpY2F0aW9uLT5TdGF0dXNCdWZmZXI7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAsIE1lZGlhQ29ubmVjdFN0YXRlOiAldSIsIEZpbHRlck1vZHVsZUNvbnRleHQsIExpbmtTdGF0ZS0+TWVkaWFDb25uZWN0U3RhdGUpOworCisgICAgICAgIC8vIENhY2hlIHRoZSBsaW5rIHN0YXRlIGZyb20gdGhlIG1pbmlwb3J0CisgICAgICAgIG1lbWNweSgmcEZpbHRlci0+TWluaXBvcnRMaW5rU3RhdGUsIExpbmtTdGF0ZSwgc2l6ZW9mKE5ESVNfTElOS19TVEFURSkpOworICAgIH0KKworICAgIE5kaXNGSW5kaWNhdGVTdGF0dXMocEZpbHRlci0+RmlsdGVySGFuZGxlLCBTdGF0dXNJbmRpY2F0aW9uKTsKKyAgICAKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKKy8vIEluZGljYXRlIGEgY2hhbmdlIG9mIHRoZSBsaW5rIHN0YXRlCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZJbmRpY2F0ZUxpbmtTdGF0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBORElTX01FRElBX0NPTk5FQ1RfU1RBVEUgICBNZWRpYVN0YXRlCisgICAgKQoreworICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHN0YXRlLCBqdXN0IHJldHVybgorICAgIGlmIChwRmlsdGVyLT5NaW5pcG9ydExpbmtTdGF0ZS5NZWRpYUNvbm5lY3RTdGF0ZSA9PSBNZWRpYVN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5ESVNfU1RBVFVTX0lORElDQVRJT04gU3RhdHVzSW5kaWNhdGlvbiA9IHswfTsKKyAgCisgICAgU3RhdHVzSW5kaWNhdGlvbi5IZWFkZXIuVHlwZSA9IE5ESVNfT0JKRUNUX1RZUEVfU1RBVFVTX0lORElDQVRJT047ICAKKyAgICBTdGF0dXNJbmRpY2F0aW9uLkhlYWRlci5SZXZpc2lvbiA9IE5ESVNfU1RBVFVTX0lORElDQVRJT05fUkVWSVNJT05fMTsgIAorICAgIFN0YXR1c0luZGljYXRpb24uSGVhZGVyLlNpemUgPSBzaXplb2YoTkRJU19TVEFUVVNfSU5ESUNBVElPTik7ICAKKyAgICBTdGF0dXNJbmRpY2F0aW9uLlNvdXJjZUhhbmRsZSA9IHBGaWx0ZXItPkZpbHRlckhhbmRsZTsgIAorICAgICAgCisgICAgU3RhdHVzSW5kaWNhdGlvbi5TdGF0dXNDb2RlID0gTkRJU19TVEFUVVNfTElOS19TVEFURTsgIAorICAgIFN0YXR1c0luZGljYXRpb24uU3RhdHVzQnVmZmVyID0gJnBGaWx0ZXItPk1pbmlwb3J0TGlua1N0YXRlOyAgCisgICAgU3RhdHVzSW5kaWNhdGlvbi5TdGF0dXNCdWZmZXJTaXplID0gc2l6ZW9mKHBGaWx0ZXItPk1pbmlwb3J0TGlua1N0YXRlKTsgIAorICAgICAgCisgICAgcEZpbHRlci0+TWluaXBvcnRMaW5rU3RhdGUuTWVkaWFDb25uZWN0U3RhdGUgPSBNZWRpYVN0YXRlOworICAgIAorICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBuZXcgbWVkaWEgc3RhdGU6ICV1IiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIE1lZGlhU3RhdGUpOworICAKKyAgICBOZGlzRkluZGljYXRlU3RhdHVzKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgJlN0YXR1c0luZGljYXRpb24pOyAgCit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlNldENvbXBhcnRtZW50KAorICAgIF9Jbl8gIFBNU19GSUxURVIgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfT3V0XyBDT01QQVJUTUVOVF9JRCogICAgICAgICAgIHBPcmlnaW5hbENvbXBhcnRtZW50CisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2V0cyB0aGUgY3VycmVudCB0aHJlYWQncyBjb21wYXJ0bWVudCBJRCB0byBtYXRjaCB0aGUgZmlsdGVyIGluc3RhbmNlLgorCistLSovCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSByaWdodCBjb21wYXJ0bWVudAorICAgICpwT3JpZ2luYWxDb21wYXJ0bWVudCA9IE5kaXNHZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCgpOworICAgIGlmICgqcE9yaWdpbmFsQ29tcGFydG1lbnQgIT0gcEZpbHRlci0+SW50ZXJmYWNlQ29tcGFydG1lbnRJRCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IE5kaXNTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChwRmlsdGVyLT5JbnRlcmZhY2VDb21wYXJ0bWVudElEKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTmRpc1NldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICpwT3JpZ2luYWxDb21wYXJ0bWVudCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKnBPcmlnaW5hbENvbXBhcnRtZW50ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZlJldmVydENvbXBhcnRtZW50KAorICAgIF9Jbl8gQ09NUEFSVE1FTlRfSUQgICAgICAgICAgICAgT3JpZ2luYWxDb21wYXJ0bWVudAorICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFJlc2V0cyB0aGUgY3VycmVudCB0aHJlYWQncyBjb21wYXJ0bWVudCBJRC4KKworLS0qLworeworICAgIC8vIFJldmVydCB0aGUgY29tcGFydG1lbnQgaWYgaXQgaXMgc2V0CisgICAgaWYgKE9yaWdpbmFsQ29tcGFydG1lbnQgIT0gMCkKKyAgICB7CisgICAgICAgIChWT0lEKU5kaXNTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChPcmlnaW5hbENvbXBhcnRtZW50KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZmlsdGVyLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYjc4MgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIuaApAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIG90THdmIEZpbHRlciBpbnN0YW5jZS4KKyAqLworCisjaWZuZGVmIF9GSUxUX0gKKyNkZWZpbmUgX0ZJTFRfSAorCisvLyBUaGUgbWF4aW11bSBhbGxvd2VkIGFkZHJlc3NlcyBhbiBPcGVuVGhyZWFkIGludGVyZmFjZQorI2lmIChPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQgJiYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSKQorI2RlZmluZSBPVF9NQVhfQUREUkVTU0VTICg0ICsgT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFUyArIDIgKiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUykKKyNlbGlmIChPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSKQorI2RlZmluZSBPVF9NQVhfQUREUkVTU0VTICg0ICsgT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFUyArIE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTKQorI2Vsc2UKKyNkZWZpbmUgT1RfTUFYX0FERFJFU1NFUyAoNCArIE9QRU5USFJFQURfQ09ORklHX05VTV9TTEFBQ19BRERSRVNTRVMpCisjZW5kaWYKKworI2RlZmluZSBPVExXRl9BTExPQ19UQUcgJ21GdG8nIC8vIG90Rm0KKworI2RlZmluZSBGSUxURVJfQUxMT0NfTUVNKF9OZGlzSGFuZGxlLCBfU2l6ZSkgXAorICAgIE5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eShfTmRpc0hhbmRsZSwgX1NpemUsIE9UTFdGX0FMTE9DX1RBRywgTG93UG9vbFByaW9yaXR5KQorI2RlZmluZSBGSUxURVJfRlJFRV9NRU0oX3BNZW0pICAgICAgTmRpc0ZyZWVNZW1vcnkoX3BNZW0sIDAsIDApCisjZGVmaW5lIEZJTFRFUl9JTklUX0xPQ0soX3BMb2NrKSAgICBOZGlzQWxsb2NhdGVTcGluTG9jayhfcExvY2spCisjZGVmaW5lIEZJTFRFUl9GUkVFX0xPQ0soX3BMb2NrKSAgICBOZGlzRnJlZVNwaW5Mb2NrKF9wTG9jaykKKworLy8gSGVscGVyIGZvciBsb2NraW5nIGFuIE5ESVMgbG9jaworI2RlZmluZSBGSUxURVJfQUNRVUlSRV9MT0NLKF9wTG9jaywgRGlzcGF0Y2hMZXZlbCkgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChEaXNwYXRjaExldmVsKSB7IE5kaXNEcHJBY3F1aXJlU3BpbkxvY2soX3BMb2NrKTsgfSAgXAorICAgIGVsc2UgICAgICAgICAgICAgICB7IE5kaXNBY3F1aXJlU3BpbkxvY2soX3BMb2NrKTsgICAgfSAgXAorfQorCisvLyBIZWxwZXIgZm9yIHJlbGVhc2luZyBhbiBORElTIGxvY2sKKyNkZWZpbmUgRklMVEVSX1JFTEVBU0VfTE9DSyhfcExvY2ssIERpc3BhdGNoTGV2ZWwpICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoRGlzcGF0Y2hMZXZlbCkgeyBOZGlzRHByUmVsZWFzZVNwaW5Mb2NrKF9wTG9jayk7IH0gIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgeyBOZGlzUmVsZWFzZVNwaW5Mb2NrKF9wTG9jayk7ICAgIH0gIFwKK30KKworLy8KKy8vIEVudW0gb2YgZmlsdGVyJ3Mgc3RhdGVzCisvLyBGaWx0ZXIgY2FuIG9ubHkgYmUgaW4gb25lIHN0YXRlIGF0IG9uZSB0aW1lCisvLwordHlwZWRlZiBlbnVtIF9GSUxURVJfU1RBVEUKK3sKKyAgICBGaWx0ZXJTdGF0ZVVuc3BlY2lmaWVkLAorICAgIEZpbHRlclBhdXNpbmcsCisgICAgRmlsdGVyUGF1c2VkLAorICAgIEZpbHRlclJ1bm5pbmcsCit9IEZJTFRFUl9TVEFURTsKKworLy8gRmxhZ3MgZm9yIHRoZSBkaWZmZXJlbnQgZGV2aWNlIGNhcGFiaWxpdGllcwordHlwZWRlZiBlbnVtIE9UTFdGX0RFVklDRV9DQVBBQklMSVRZCit7CisgICAgLy8gRGV2aWNlIHN1cHBvcnRzIHJhdyBSYWRpbyBjb21tYW5kcworICAgIE9UTFdGX0RFVklDRV9DQVBfUkFESU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorCisgICAgLy8gRGV2aWNlIHN1cHBvcnRzIEFjayB0aW1lb3V0cyBpbnRlcm5hbGx5CisgICAgT1RMV0ZfREVWSUNFX0NBUF9SQURJT19BQ0tfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisKKyAgICAvLyBEZXZpY2Ugc3VwcG9ydHMgTUFDIHJldHJ5IGxvZ2ljIGFuZCB0aW1lcnM7IGFzIHdlbGwgYXMgY29sbGlzaW9uIGF2b2lkYW5jZS4KKyAgICBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX01BQ19SRVRSWV9BTkRfQ09MTElTSU9OX0FWT0lEQU5DRSAgICA9IDEgPDwgMiwKKworICAgIC8vIERldmljZSBzdXBwb3J0cyB0aGUgZW5lcmd5IHNjYW4gY29tbWFuZC4KKyAgICBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0VORVJHWV9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKworICAgIC8vIERldmljZSBzdXBwb3J0IE5ldCAmIFRocmVhZCBjb21tYW5kcy4KKyAgICBPVExXRl9ERVZJQ0VfQ0FQX1RIUkVBRF8xXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTYsCisKK30gT1RMV0ZfREVWSUNFX0NBUEFCSUxJVFk7CisKKy8vIEZsYWdzIGZvciB0aGUgZGlmZmVyZW50IGRldmljZSBjYXBhYmlsaXRpZXMKK3R5cGVkZWYgZW51bSBPVExXRl9ERVZJQ0VfU1RBVFVTCit7CisgICAgT1RMV0ZfREVWSUNFX1NUQVRVU19VTklOVElBTElaRUQsICAgLy8gTm90IHlldCBpbml0aWFsemllZC4KKyAgICBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUsICAgICAvLyBUaGUgZGV2aWNlIGlzIGp1c3Qgb3BlcmF0aW5nIGFzIGEgc2ltcGxlIHJhZGlvLgorICAgIE9UTFdGX0RFVklDRV9TVEFUVVNfVEhSRUFEX01PREUgICAgIC8vIFRoZSBkZXZpY2UgaXMgbWFuYWdpbmcgdGhlIFRocmVhZCBzdGFjay4KKworfSBPVExXRl9ERVZJQ0VfU1RBVFVTOworCisjZGVmaW5lIE9UX0VWRU5UX1RJTUVSX05PVF9SVU5OSU5HICAwCisjZGVmaW5lIE9UX0VWRU5UX1RJTUVSX1JVTk5JTkcgICAgICAxCisjZGVmaW5lIE9UX0VWRU5UX1RJTUVSX0ZJUkVEICAgICAgICAyCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQKKwordHlwZWRlZiBzdHJ1Y3QgQnVmZmVyUG9vbAoreworICAgIHN0cnVjdCBCdWZmZXJQb29sKiBOZXh0OworICAgIHVpbnQ4X3QgQnVmZmVyc1swXTsKKworfSBCdWZmZXJQb29sOworCitlbnVtCit7CisgICAga1BhZ2VTaXplICAgICAgICAgICAgICAgID0gUEFHRV9TSVpFLAorICAgIGtQYWdlc1BlckJ1ZmZlclBvb2wgICAgICA9IDEsCisgICAga01heFBhZ2VzRm9yQnVmZmVyUG9vbHMgID0gNjQsCisgICAga01heEJ5dGVzRm9yQnVmZmVyUG9vbHMgID0ga1BhZ2VTaXplICoga01heFBhZ2VzRm9yQnVmZmVyUG9vbHMsCisKKyAgICBrRXN0aW1hdGVkQnVmZmVyU2l6ZSAgICAgPSAxMjgsICAgICAgICAgLy8gc2l6ZW9mKG90OjpCdWZmZXIpCisgICAga0VzdGltYXRlZEJ1ZmZlclBvb2xTaXplID0gKChrUGFnZVNpemUgKiBrUGFnZXNQZXJCdWZmZXJQb29sKSAtIHNpemVvZihCdWZmZXJQb29sKSkgLyBrRXN0aW1hdGVkQnVmZmVyU2l6ZSwKKyAgICBrRXN0aW1hdGVkTWF4QnVmZmVycyAgICAgPSBrTWF4UGFnZXNGb3JCdWZmZXJQb29scyAqIGtFc3RpbWF0ZWRCdWZmZXJQb29sU2l6ZQorfTsKKworI2VuZGlmCisKKy8vCisvLyBEZWZpbmUgdGhlIGZpbHRlciBzdHJ1Y3QKKy8vCit0eXBlZGVmIHN0cnVjdCBfTVNfRklMVEVSCit7CisgICAgLy8gRW50cnkgaW4gdGhlIGdsb2JhbCBsaXN0IG9mIEZpbHRlciBpbnN0YW5jZXMKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIEZpbHRlck1vZHVsZUxpbms7CisKKyAgICAvLyBORElTIEhhbmRsZSBmb3IgdGhlIEZpbHRlciBpbnN0YW5jZQorICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgRmlsdGVySGFuZGxlOworCisgICAgLy8gQ3VycmVudCBzdGF0ZSAoUnVubmluZyBvciBub3QpIG9mIHRoZSBGaWx0ZXIgaW5zdGFuY2UKKyAgICBGSUxURVJfU1RBVEUgICAgICAgICAgICAgICAgICAgIFN0YXRlOworCisgICAgLy8gSGFuZGxlIGZvciB1bmljYXN0IElQIGFkZHJlc3Mgbm90aWZpY2F0aW9ucworICAgIEhBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc0NoYW5nZUhhbmRsZTsKKworICAgIC8vCisgICAgLy8gSW50ZXJmYWNlIHZhcmlhYmxlcworICAgIC8vCisgICAgR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VHdWlkOworICAgIE5FVF9JRklOREVYICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlSW5kZXg7CisgICAgTkVUX0xVSUQgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VMdWlkOworICAgIENPTVBBUlRNRU5UX0lEICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlQ29tcGFydG1lbnRJRDsKKyAgICBORElTX1NUUklORyAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZUZyaWVuZGx5TmFtZTsKKyAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVJlZ0tleTsKKworICAgIC8vCisgICAgLy8gTWluaXBvcnQgTGluayBTdGF0ZQorICAgIC8vCisgICAgTkRJU19MSU5LX1NUQVRFICAgICAgICAgICAgICAgICBNaW5pcG9ydExpbmtTdGF0ZTsKKworICAgIC8vCisgICAgLy8gRXh0ZXJuYWwgcmVmZXJlbmNlcyBtYW5hZ2VtZW50CisgICAgLy8gICBVc2VkIGZvciBJT0NUTHMsIFNlbmROQkxzLCBhbmQgQWRkcmVzcyBDaGFuZ2VkIGNhbGxiYWNrcworICAgIC8vCisgICAgRVhfUlVORE9XTl9SRUYgICAgICAgICAgICAgICAgICBFeHRlcm5hbFJlZnM7CisKKyAgICAvLworICAgIC8vIFNwaW5lbCBDb21tYW5kIFN0YXRlCisgICAgLy8KKyAgICBFWF9SVU5ET1dOX1JFRiAgICAgICAgICAgICAgICAgIGNtZFJ1bmRvd247CisgICAgTkRJU19TUElOX0xPQ0sgICAgICAgICAgICAgICAgICBjbWRMb2NrOworICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgY21kSGFuZGxlcnM7CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRUSURzSW5Vc2U7CisgICAgc3BpbmVsX3RpZF90ICAgICAgICAgICAgICAgICAgICBjbWROZXh0VElEOworICAgIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgY21kTmJsUG9vbDsKKyNpZmRlZiBDT01NQU5EX0lOSVRfUkVUUlkKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZEluaXRUcnlDb3VudDsKKyNlbmRpZgorICAgIG90UGxhdFJlc2V0UmVhc29uICAgICAgICAgICAgICAgY21kUmVzZXRSZWFzb247CisgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRSZXNldENvbXBsZXRlRXZlbnQ7CisKKyAgICAvLworICAgIC8vIERldmljZSBDYXBhYmlsaXRpZXMgLyBTdGF0ZQorICAgIC8vCisgICAgT1RMV0ZfREVWSUNFX0NBUEFCSUxJVFkgICAgICAgICBEZXZpY2VDYXBhYmlsaXRpZXM7CisgICAgT1RMV0ZfREVWSUNFX1NUQVRVUyAgICAgICAgICAgICBEZXZpY2VTdGF0dXM7CisKKyAgICAvLworICAgIC8vIE9wZW5UaHJlYWQgYWRkcmVzc2VzCisgICAgLy8KKyAgICBJTjZfQUREUiAgICAgICAgICAgICAgICAgICAgb3RDYWNoZWRBZGRyW09UX01BWF9BRERSRVNTRVNdOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBvdENhY2hlZEFkZHJDb3VudDsKKyAgICBJTjZfQUREUiAgICAgICAgICAgICAgICAgICAgb3RMaW5rTG9jYWxBZGRyOworICAgIG90TmV0aWZBZGRyZXNzICAgICAgICAgICAgICBvdEF1dG9BZGRyZXNzZXNbT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFU107CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgb3REaGNwQWRkcmVzcyAgICAgICAgICAgICAgIG90RGhjcEFkZHJlc3Nlc1tPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFU107CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyAgICB1bmlvbgorICAgIHsKKyAgICBzdHJ1Y3QgLy8gVGhyZWFkIE1vZGUgVmFyaWFibGVzCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIEV2ZW50IHByb2Nlc3NpbmcKKyAgICAgICAgLy8KKyAgICAgICAgUFZPSUQgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkOworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgRXZlbnRXb3JrZXJUaHJlYWRTdG9wRXZlbnQ7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NBZGRyZXNzQ2hhbmdlczsKKyAgICAgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHM7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NNYWNGcmFtZXM7CisgICAgICAgIE5ESVNfU1BJTl9MT0NLICAgICAgICAgICAgICBFdmVudHNMb2NrOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgQWRkcmVzc0NoYW5nZXNIZWFkOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgTkJMc0hlYWQ7CisgICAgICAgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICBNYWNGcmFtZXNIZWFkOworICAgICAgICBMQVJHRV9JTlRFR0VSICAgICAgICAgICAgICAgTmV4dEFsYXJtVGlja0NvdW50OworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgRXZlbnRXb3JrZXJUaHJlYWRXYWl0VGltZVVwZGF0ZWQ7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBFdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0czsKKyAgICAgICAgUEVYX1RJTUVSICAgICAgICAgICAgICAgICAgIEV2ZW50SGlnaFByZWNpc2lvblRpbWVyOworICAgICAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUaW1lclN0YXRlOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgRXZlbnRJcnBMaXN0SGVhZDsKKyAgICAgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0lycDsKKyAgICAgICAgS0VWRU5UICAgICAgICAgICAgICAgICAgICAgIEV2ZW50V29ya2VyVGhyZWFkRW5lcmd5U2NhbkNvbXBsZXRlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wZW5UaHJlYWQgU2V0dGluZ3MgTWFuYWdlbWVudAorICAgICAgICAvLworICAgICAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgb3RTZXR0aW5nc1JlZ0tleTsKKworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIHN0YXRlIG1hbmFnZW1lbnQKKyAgICAgICAgLy8KKyAgICAgICAgb3REZXZpY2VSb2xlICAgICAgICAgICAgICAgIG90Q2FjaGVkUm9sZTsKKworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIGRhdGEgcGF0aCBzdGF0ZQorICAgICAgICAvLworICAgICAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgU2VuZFBlbmRpbmc7CisgICAgICAgIEtFVkVOVCAgICAgICAgICAgICAgICAgICAgICBTZW5kTmV0QnVmZmVyTGlzdENvbXBsZXRlOworICAgIAorICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIHJhZGlvIHZhcmlhYmxlcworICAgICAgICAvLworICAgICAgICBvdFJhZGlvQ2FwcyAgICAgICAgICAgICAgICAgb3RSYWRpb0NhcGFiaWxpdGllczsKKyAgICAgICAgb3RSYWRpb1N0YXRlICAgICAgICAgICAgICAgIG90UmFkaW9TdGF0ZTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIG90Q3VycmVudExpc3RlbkNoYW5uZWw7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBvdFJlY2VpdmVNZXNzYWdlW09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIG90VHJhbnNtaXRNZXNzYWdlW09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKKyAgICAgICAgb3RSYWRpb0ZyYW1lICAgICAgICAgICAgICAgIG90UmVjZWl2ZUZyYW1lOworICAgICAgICBvdFJhZGlvRnJhbWUgICAgICAgICAgICAgICAgb3RUcmFuc21pdEZyYW1lOworICAgICAgICBvdEVycm9yICAgICAgICAgICAgICAgICAgICAgb3RMYXN0VHJhbnNtaXRFcnJvcjsKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG90TGFzdFRyYW5zbWl0RnJhbWVQZW5kaW5nOworICAgICAgICBDSEFSICAgICAgICAgICAgICAgICAgICAgICAgb3RMYXN0RW5lcmd5U2Nhbk1heFJzc2k7CisKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG90UHJvbWlzY3VvdXM7CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvdFBhbklEOworICAgICAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAgICAgb3RGYWN0b3J5QWRkcmVzczsKKyAgICAgICAgdWludDY0X3QgICAgICAgICAgICAgICAgICAgIG90RXh0ZW5kZWRBZGRyZXNzOworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb3RTaG9ydEFkZHJlc3M7CisKKyAgICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIG90UGVuZGluZ01hY09mZmxvYWRFbmFibGVkOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvdEJ1ZmZlclNpemU7ICAgICAgICAgICAgICAgLy8gQnl0ZXMgaW4gYSBzaW5nbGUgYnVmZmVyCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvdEJ1ZmZlclBvb2xCeXRlU2l6ZTsgICAgICAgLy8gQnl0ZXMgaW4gYSBidWZmZXIgcG9vbAorICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb3RCdWZmZXJQb29sQnVmZmVyQ291bnQ7ICAgIC8vIE51bWJlciBvZiBidWZmZXJzIGluIGEgcG9vbAorICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgb3RCdWZmZXJzTGVmdDsgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBidWZmZXJzIGxlZnQgdG8gcmV0dXJuCisgICAgICAgIEJ1ZmZlclBvb2wqICAgICAgICAgICAgICAgICBvdEJ1ZmZlclBvb2xIZWFkOyAgICAgICAgICAgLy8gTGlzdCBvZiBidWZmZXIgcG9vbHMKKyAgICAgICAgb3RNZXNzYWdlKiAgICAgICAgICAgICAgICAgIG90RnJlZUJ1ZmZlcnM7ICAgICAgICAgICAgICAvLyBMaXN0IG9mIGJ1ZmZlcnMgdG8gcmV0dXJuCisjZW5kaWYKKworI2lmIERFQlVHX0FMTE9DCisgICAgICAgIC8vIFVzZWQgZm9yIHRyYWNraW5nIG1lbW9yeSBhbGxvY2F0aW9ucworICAgICAgICBIQU5ETEUgICAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRJZDsKKyAgICAgICAgdm9sYXRpbGUgTE9ORyAgICAgICAgICAgICAgIG90T3V0c3RhbmRpbmdBbGxvY2F0aW9uQ291bnQ7CisgICAgICAgIHZvbGF0aWxlIExPTkcgICAgICAgICAgICAgICBvdE91dHN0YW5kaW5nTWVtb3J5QWxsb2NhdGVkOworICAgICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgb3RPdXRTdGFuZGluZ0FsbG9jYXRpb25zOworICAgICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgb3RBbGxvY2F0aW9uSUQ7CisjZW5kaWYKKworICAgICAgICAvLworICAgICAgICAvLyBPcGVuVGhyZWFkIEpvaW5lciBWZW5kb3IgSW5mbworICAgICAgICAvLworICAgICAgICBjaGFyIG90VmVuZG9yTmFtZVtPUEVOVEhSRUFEX1ZFTkRPUl9OQU1FX01BWF9MRU5HVEggKyAxXTsKKyAgICAgICAgY2hhciBvdFZlbmRvck1vZGVsW09QRU5USFJFQURfVkVORE9SX01PREVMX01BWF9MRU5HVEggKyAxXTsKKyAgICAgICAgY2hhciBvdFZlbmRvclN3VmVyc2lvbltPUEVOVEhSRUFEX1ZFTkRPUl9TV19WRVJTSU9OX01BWF9MRU5HVEggKyAxXTsKKyAgICAgICAgY2hhciBvdFZlbmRvckRhdGFbT1BFTlRIUkVBRF9WRU5ET1JfREFUQV9NQVhfTEVOR1RIICsgMV07CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3BlblRocmVhZCBjb250ZXh0IGJ1ZmZlcgorICAgICAgICAvLworICAgICAgICBvdEluc3RhbmNlKiAgICAgICAgICAgICAgICAgb3RDdHg7CisgICAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICBvdEluc3RhbmNlU2l6ZTsKKyAgICAgICAgUFVDSEFSICAgICAgICAgICAgICAgICAgICAgIG90SW5zdGFuY2VCdWZmZXI7CisgICAgfTsKKyAgICBzdHJ1Y3QgLy8gVHVubmVsIE1vZGUgVmFyaWFibGVzCisgICAgeworICAgICAgICBQVk9JRCAgICAgICAgICAgICAgICAgICAgICAgVHVuV29ya2VyVGhyZWFkOworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgVHVuV29ya2VyVGhyZWFkU3RvcEV2ZW50OworICAgICAgICBLRVZFTlQgICAgICAgICAgICAgICAgICAgICAgVHVuV29ya2VyVGhyZWFkQWRkcmVzc0NoYW5nZWRFdmVudDsKKyAgICB9OworICAgIH07CisKK30gTVNfRklMVEVSLCAqIFBNU19GSUxURVI7CisKKy8vCisvLyBORElTIEZpbHRlciBGdW5jdGlvbnMKKy8vCisKK0ZJTFRFUl9BVFRBQ0ggRmlsdGVyQXR0YWNoOworRklMVEVSX0RFVEFDSCBGaWx0ZXJEZXRhY2g7CitGSUxURVJfUkVTVEFSVCBGaWx0ZXJSZXN0YXJ0OworRklMVEVSX1BBVVNFIEZpbHRlclBhdXNlOworRklMVEVSX1NUQVRVUyBGaWx0ZXJTdGF0dXM7CitGSUxURVJfU0VORF9ORVRfQlVGRkVSX0xJU1RTIEZpbHRlclNlbmROZXRCdWZmZXJMaXN0czsKK0ZJTFRFUl9SRVRVUk5fTkVUX0JVRkZFUl9MSVNUUyBGaWx0ZXJSZXR1cm5OZXRCdWZmZXJMaXN0czsKK0ZJTFRFUl9TRU5EX05FVF9CVUZGRVJfTElTVFNfQ09NUExFVEUgRmlsdGVyU2VuZE5ldEJ1ZmZlckxpc3RzQ29tcGxldGU7CitGSUxURVJfUkVDRUlWRV9ORVRfQlVGRkVSX0xJU1RTIEZpbHRlclJlY2VpdmVOZXRCdWZmZXJMaXN0czsKK0ZJTFRFUl9DQU5DRUxfU0VORF9ORVRfQlVGRkVSX0xJU1RTIEZpbHRlckNhbmNlbFNlbmROZXRCdWZmZXJMaXN0czsKKworLy8KKy8vIExpbmsgU3RhdGUgRnVuY3Rpb25zCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZJbmRpY2F0ZUxpbmtTdGF0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBORElTX01FRElBX0NPTk5FQ1RfU1RBVEUgICBNZWRpYVN0YXRlCisgICAgKTsKKworLy8KKy8vIENvbXBhcnRtZW50IEZ1bmN0aW9ucworLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmU2V0Q29tcGFydG1lbnQoCisgICAgX0luXyAgUE1TX0ZJTFRFUiAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9PdXRfIENPTVBBUlRNRU5UX0lEKiAgICAgICAgICAgcE9yaWdpbmFsQ29tcGFydG1lbnQKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZlJldmVydENvbXBhcnRtZW50KAorICAgIF9Jbl8gQ09NUEFSVE1FTlRfSUQgICAgICAgICAgICAgT3JpZ2luYWxDb21wYXJ0bWVudAorICAgICk7CisKKy8vCisvLyBBZGRyZXNzIEZ1bmN0aW9ucworLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorTkVUSU9BUElfQVBJXyAKK290THdmQWRkcmVzc0NoYW5nZUNhbGxiYWNrKAorICAgIF9Jbl8gUFZPSUQgQ2FsbGVyQ29udGV4dCwKKyAgICBfSW5fb3B0XyBQTUlCX1VOSUNBU1RJUEFERFJFU1NfUk9XIFJvdywKKyAgICBfSW5fIE1JQl9OT1RJRklDQVRJT05fVFlQRSBOb3RpZmljYXRpb25UeXBlCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdBZGRyZXNzQ2hhbmdlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIE1JQl9OT1RJRklDQVRJT05fVFlQRSAgTm90aWZpY2F0aW9uVHlwZSwKKyAgICBfSW5fIFBJTjZfQUREUiAgICAgICAgICAgICAgcEFkZHIKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUyAKK290THdmSW5pdGlhbGl6ZUFkZHJlc3NlcygKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3ZlJhZGlvQWRkcmVzc2VzVXBkYXRlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQgCitvdEx3ZlR1bkFkZHJlc3Nlc1VwZGF0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuLAorICAgIF9PdXRfIHVpbnQzMl90ICphTm90aWZGbGFncworICAgICk7CisKK2ludCAKK290THdmRmluZENhY2hlZEFkZHJJbmRleCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgCisgICAgX0luXyBQSU42X0FERFIgYWRkcgorICAgICk7CisKKy8vCisvLyBUdW5uZWwgTG9naWMgRnVuY3Rpb25zCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitORElTX1NUQVRVUyAKK290THdmSW5pdGlhbGl6ZVR1bm5lbE1vZGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCit2b2lkIAorb3RMd2ZVbmluaXRpYWxpemVUdW5uZWxNb2RlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKTsKKworLy8KKy8vIExvZ2dpbmcgSGVscGVyCisvLworCisjaWZkZWYgTE9HX0JVRkZFUlMKK3ZvaWQKK290TG9nQnVmZmVyKAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnVmZmVyTGVuZ3RoKSBQVUNIQVIgQnVmZmVyLAorICAgIF9Jbl8gICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9ORyAgQnVmZmVyTGVuZ3RoCisgICAgKTsKKyNlbmRpZgorCisvLworLy8gRGVidWcgSGVscGVycworLy8KKworI2lmIERFQlVHX0FMTE9DCisKK3R5cGVkZWYgc3RydWN0IF9PVF9BTExPQworeworICAgIExJU1RfRU5UUlkgTGluazsKKyAgICBMT05HIExlbmd0aDsKKyAgICBVTE9ORyBJRDsKK30gT1RfQUxMT0M7CisKK1BNU19GSUxURVIKK290THdmRmluZEZyb21DdXJyZW50VGhyZWFkKCk7CisKKyNlbmRpZgorCisjZW5kaWYgIC8vX0ZJTFRfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2ZpbHRlci5yYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5YWQyYwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9maWx0ZXIucmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxudHZlcnAuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB0aGUgZm9sbG93aW5nIGxpbmVzIGFyZSBzcGVjaWZpYyB0byB0aGlzIGZpbGUgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBWRVJfRklMRVRZUEUsIFZFUl9GSUxFU1VCVFlQRSwgVkVSX0ZJTEVERVNDUklQVElPTl9TVFIKKyAqIGFuZCBWRVJfSU5URVJOQUxOQU1FX1NUUiBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBDT01NT04uVkVSCisgKiBUaGUgc3RyaW5ncyBkb24ndCBuZWVkIGEgJ1wwJywgc2luY2UgY29tbW9uLnZlciBoYXMgdGhlbS4KKyAqLworI2RlZmluZSAgICBWRVJfRklMRVRZUEUgICAgVkZUX0RSVgorLyogcG9zc2libGUgdmFsdWVzOiAgICAgICAgVkZUX1VOS05PV04KKyAgICAgICAgICAgICAgICBWRlRfQVBQCisgICAgICAgICAgICAgICAgVkZUX0RMTAorICAgICAgICAgICAgICAgIFZGVF9EUlYKKyAgICAgICAgICAgICAgICBWRlRfRk9OVAorICAgICAgICAgICAgICAgIFZGVF9WWEQKKyAgICAgICAgICAgICAgICBWRlRfU1RBVElDX0xJQgorKi8KKyNkZWZpbmUgICAgVkVSX0ZJTEVTVUJUWVBFICAgIFZGVDJfRFJWX05FVFdPUksKKy8qIHBvc3NpYmxlIHZhbHVlcyAgICAgICAgVkZUMl9VTktOT1dOCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfUFJJTlRFUgorICAgICAgICAgICAgICAgIFZGVDJfRFJWX0tFWUJPQVJECisgICAgICAgICAgICAgICAgVkZUMl9EUlZfTEFOR1VBR0UKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9ESVNQTEFZCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfTU9VU0UKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9ORVRXT1JLCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfU1lTVEVNCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfSU5TVEFMTEFCTEUKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9TT1VORAorICAgICAgICAgICAgICAgIFZGVDJfRFJWX0NPTU0KKyovCisjZGVmaW5lIFZFUl9GSUxFREVTQ1JJUFRJT05fU1RSICAgICAib3RMd2YgTkRJUyA2LjAgRmlsdGVyIERyaXZlciIKKyNkZWZpbmUgVkVSX0lOVEVSTkFMTkFNRV9TVFIgICAgICAgICJvdEx3Zi5zeXMiCisjZGVmaW5lIFZFUl9PUklHSU5BTEZJTEVOQU1FX1NUUiAgICAib3RMd2Yuc3lzIgorI2RlZmluZSBWRVJfTEFOR05FVVRSQUwKKworI2luY2x1ZGUgImNvbW1vbi52ZXIiCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9pb2NvbnRyb2wuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9pb2NvbnRyb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWIzNDNkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2lvY29udHJvbC5jCkBAIC0wLDAgKzEsNjI2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJpb2NvbnRyb2wudG1oIgorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICBJcnAKKyAgICApOworCit0eXBlZGVmIHN0cnVjdCBfT1RMV0ZfSU9DVExfSEFORExFUgoreworICAgIGNvbnN0IGNoYXIqICAgICAgICAgICAgIE5hbWU7CisgICAgT1RMV0ZfT1RfSU9DVExfRlVOQyogICAgb3RGdW5jOworICAgIE9UTFdGX1RVTl9JT0NUTF9GVU5DKiAgIHR1bkZ1bmM7Cit9IE9UTFdGX0lPQ1RMX0hBTkRMRVI7CisKK09UTFdGX0lPQ1RMX0hBTkRMRVIgSW9DdGxzW10gPQoreworICAgIHsgIklPQ1RMX09UTFdGX09UX0VOQUJMRUQiLCAgICAgICAgICAgICAgICAgICAgIE5VTEwgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9JTlRFUkZBQ0UiLCAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEludGVyZmFjZSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9USFJFQUQiLCAgICAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFRocmVhZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9BQ1RJVkVfU0NBTiIsICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFjdGl2ZVNjYW4pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRElTQ09WRVIiLCAgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3REaXNjb3ZlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9DSEFOTkVMIiwgICAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdENoYW5uZWwpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ0hJTERfVElNRU9VVCIsICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RDaGlsZFRpbWVvdXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRVhURU5ERURfQUREUkVTUyIsICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RFeHRlbmRlZEFkZHJlc3MpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRVhURU5ERURfUEFOSUQiLCAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RFeHRlbmRlZFBhbklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xFQURFUl9STE9DIiwgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TGVhZGVyUmxvYykgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9MSU5LX01PREUiLCAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdExpbmtNb2RlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01BU1RFUl9LRVkiLCAgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWFzdGVyS2V5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01FU0hfTE9DQUxfRUlEIiwgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWVzaExvY2FsRWlkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01FU0hfTE9DQUxfUFJFRklYIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWVzaExvY2FsUHJlZml4KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX05FVFdPUktfREFUQV9MRUFERVIiLCAgICAgICAgIE5VTEwgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0RBVEFfTE9DQUwiLCAgICAgICAgICBOVUxMIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfTkVUV09SS19OQU1FIiwgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3ROZXR3b3JrTmFtZSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9QQU5fSUQiLCAgICAgICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFBhbklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JPVVRFUl9ST0xMX0VOQUJMRUQiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Um91dGVyUm9sbEVuYWJsZWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0hPUlRfQUREUkVTUyIsICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RTaG9ydEFkZHJlc3MpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfVU5JQ0FTVF9BRERSRVNTRVMiLCAgICAgICAgICAgTlVMTCB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0FDVElWRV9EQVRBU0VUIiwgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90QWN0aXZlRGF0YXNldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9QRU5ESU5HX0RBVEFTRVQiLCAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdFBlbmRpbmdEYXRhc2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9XRUlHSFQiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TG9jYWxMZWFkZXJXZWlnaHQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQUREX0JPUkRFUl9ST1VURVIiLCAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RBZGRCb3JkZXJSb3V0ZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUkVNT1ZFX0JPUkRFUl9ST1VURVIiLCAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVCb3JkZXJSb3V0ZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQUREX0VYVEVSTkFMX1JPVVRFIiwgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RBZGRFeHRlcm5hbFJvdXRlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JFTU9WRV9FWFRFUk5BTF9ST1VURSIsICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UmVtb3ZlRXh0ZXJuYWxSb3V0ZSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX1NFUlZFUl9EQVRBIiwgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdFNlbmRTZXJ2ZXJEYXRhKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTlRFWFRfSURfUkVVU0VfREVMQVkiLCAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Q29udGV4dElkUmV1c2VEZWxheSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiIsICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEtleVNlcXVlbmNlQ291bnRlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ORVRXT1JLX0lEX1RJTUVPVVQiLCAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdE5ldHdvcmtJZFRpbWVvdXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIiwgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JFTEVBU0VfUk9VVEVSX0lEIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UmVsZWFzZVJvdXRlcklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01BQ19XSElURUxJU1RfRU5BQkxFRCIsICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TWFjV2hpdGVsaXN0RW5hYmxlZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9BRERfTUFDX1dISVRFTElTVCIsICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFkZE1hY1doaXRlbGlzdCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9SRU1PVkVfTUFDX1dISVRFTElTVCIsICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFJlbW92ZU1hY1doaXRlbGlzdCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9NQUNfV0hJVEVMSVNUX0VOVFJZIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdE1hY1doaXRlbGlzdEVudHJ5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NMRUFSX01BQ19XSElURUxJU1QiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Q2xlYXJNYWNXaGl0ZWxpc3QpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfREVWSUNFX1JPTEUiLCAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3REZXZpY2VSb2xlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NISUxEX0lORk9fQllfSUQiLCAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Q2hpbGRJbmZvQnlJZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9DSElMRF9JTkZPX0JZX0lOREVYIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdENoaWxkSW5mb0J5SW5kZXgpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfRUlEX0NBQ0hFX0VOVFJZIiwgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RFaWRDYWNoZUVudHJ5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xFQURFUl9EQVRBIiwgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90TGVhZGVyRGF0YSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9MRUFERVJfUk9VVEVSX0lEIiwgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdExlYWRlclJvdXRlcklkKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xFQURFUl9XRUlHSFQiLCAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TGVhZGVyV2VpZ2h0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX05FVFdPUktfREFUQV9WRVJTSU9OIiwgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90TmV0d29ya0RhdGFWZXJzaW9uKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BBUlRJVElPTl9JRCIsICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UGFydGl0aW9uSWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUkxPQzE2IiwgICAgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSbG9jMTYpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUk9VVEVSX0lEX1NFUVVFTkNFIiwgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RSb3V0ZXJJZFNlcXVlbmNlKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1JPVVRFUl9JTkZPIiwgICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Um91dGVySW5mbykgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04iLCBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFN0YWJsZU5ldHdvcmtEYXRhVmVyc2lvbikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQiLCAgICAgICBSRUZfSU9DVExfRlVOQyhvdE1hY0JsYWNrbGlzdEVuYWJsZWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQUREX01BQ19CTEFDS0xJU1QiLCAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RBZGRNYWNCbGFja2xpc3QpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUkVNT1ZFX01BQ19CTEFDS0xJU1QiLCAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RSZW1vdmVNYWNCbGFja2xpc3QpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfTUFDX0JMQUNLTElTVF9FTlRSWSIsICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RNYWNCbGFja2xpc3RFbnRyeSkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9DTEVBUl9NQUNfQkxBQ0tMSVNUIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdENsZWFyTWFjQmxhY2tsaXN0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX01BWF9UUkFOU01JVF9QT1dFUiIsICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90TWF4VHJhbnNtaXRQb3dlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ORVhUX09OX01FU0hfUFJFRklYIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdE5leHRPbk1lc2hQcmVmaXgpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUE9MTF9QRVJJT0QiLCAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RQb2xsUGVyaW9kKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0xPQ0FMX0xFQURFUl9QQVJUSVRJT05fSUQiLCAgIFJFRl9JT0NUTF9GVU5DKG90TG9jYWxMZWFkZXJQYXJ0aXRpb25JZCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9BU1NJR05fTElOS19RVUFMSVRZIiwgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdEFzc2lnbkxpbmtRdWFsaXR5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BMQVRGT1JNX1JFU0VUIiwgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UGxhdGZvcm1SZXNldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9QQVJFTlRfSU5GTyIsICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFBhcmVudEluZm8pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0lOR0xFVE9OIiwgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RTaW5nbGV0b24pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfTUFDX0NPVU5URVJTIiwgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RNYWNDb3VudGVycykgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9NQVhfQ0hJTERSRU4iLCAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdE1heENoaWxkcmVuKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX1NUQVJUIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyU3RhcnQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfU1RPUCIsICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJTdG9wKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0pPSU5FUl9TVEFSVCIsICAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90Sm9pbmVyU3RhcnQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfSk9JTkVSX1NUT1AiLCAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RKb2luZXJTdG9wKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0ZBQ1RPUllfRVVJNjQiLCAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0hBU0hfTUFDX0FERFJFU1MiLCAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90SGFzaE1hY0FkZHJlc3MpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQiLCAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTU0lPTkVSX1BBTklEX1FVRVJZIiwgICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTU1JU1NJT05FUl9FTkVSR1lfU0NBTiIsICAgIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiIsICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdFJvdXRlclNlbGVjdGlvbkppdHRlcikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9KT0lORVJfVURQX1BPUlQiLCAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdEpvaW5lclVkcFBvcnQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0VORF9ESUFHTk9TVElDX0dFVCIsICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RTZW5kRGlhZ25vc3RpY0dldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX0RJQUdOT1NUSUNfUkVTRVQiLCAgICAgICBSRUZfSU9DVExfRlVOQyhvdFNlbmREaWFnbm9zdGljUmVzZXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfQUREX0pPSU5FUiIsICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJBZGRKb2luZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfUkVNT1ZFX0pPSU5FUiIsICAgUkVGX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfQ09NTUlTSU9ORVJfUFJPVklTSU9OSU5HX1VSTCIsIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyUHJvdmlzaW9uaW5nVXJsKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0NPTU1JU0lPTkVSX0FOTk9VTkNFX0JFR0lOIiwgIFJFRl9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbikgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9FTkVSR1lfU0NBTiIsICAgICAgICAgICAgICAgICBSRUZfSU9DVExfRlVOQ19XSVRIX1RVTihvdEVuZXJneVNjYW4pIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0VORF9BQ1RJVkVfR0VUIiwgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkMob3RTZW5kQWN0aXZlR2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1NFTkRfQUNUSVZFX1NFVCIsICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90U2VuZEFjdGl2ZVNldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX1BFTkRJTkdfR0VUIiwgICAgICAgICAgICBSRUZfSU9DVExfRlVOQyhvdFNlbmRQZW5kaW5nR2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1NFTkRfUEVORElOR19TRVQiLCAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90U2VuZFBlbmRpbmdTZXQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfU0VORF9NR01UX0NPTU1JU1NJT05FUl9HRVQiLCAgUkVGX0lPQ1RMX0ZVTkMob3RTZW5kTWdtdENvbW1pc3Npb25lckdldCkgfSwKKyAgICB7ICJJT0NUTF9PVExXRl9PVF9TRU5EX01HTVRfQ09NTUlTU0lPTkVSX1NFVCIsICBSRUZfSU9DVExfRlVOQyhvdFNlbmRNZ210Q29tbWlzc2lvbmVyU2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0tFWV9TV0lUQ0hfR1VBUkRUSU1FIiwgICAgICAgIFJFRl9JT0NUTF9GVU5DX1dJVEhfVFVOKG90S2V5U3dpdGNoR3VhcmR0aW1lKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX0ZBQ1RPUllfUkVTRVQiLCAgICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90RmFjdG9yeVJlc2V0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1RIUkVBRF9BVVRPX1NUQVJUIiwgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90VGhyZWFkQXV0b1N0YXJ0KSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BSRUZFUlJFRF9ST1VURVJfSUQiLCAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90VGhyZWFkUHJlZmVycmVkUm91dGVySWQpIH0sCisgICAgeyAiSU9DVExfT1RMV0ZfT1RfUFNLQyIsICAgICAgICAgICAgICAgICAgICAgICAgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RQU0tjKSB9LAorICAgIHsgIklPQ1RMX09UTFdGX09UX1BBUkVOVF9QUklPUklUWSIsICAgICAgICAgICAgIFJFRl9JT0NUTF9GVU5DKG90UGFyZW50UHJpb3JpdHkpIH0sCit9OworCitzdGF0aWNfYXNzZXJ0KEFSUkFZU0laRShJb0N0bHMpID09IChNQVhfT1RMV0ZfSU9DVExfRlVOQ19DT0RFIC0gTUlOX09UTFdGX0lPQ1RMX0ZVTkNfQ09ERSkgKyAxLAorICAgICAgICAgICAgICAiVGhlIElvQ3RsIHN0cmluZ3Mgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aCB0aGUgYWN0dWFsIElvQ3RsIGxpc3QuIik7CisKK2NvbnN0IGNoYXIqCitJb0N0bFN0cmluZygKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlCispCit7CisgICAgVUxPTkcgRnVuY0NvZGUgPSAoKElvQ29udHJvbENvZGUgPj4gMikgJiAweEZGRikgLSAxMDA7CisgICAgcmV0dXJuIEZ1bmNDb2RlIDwgQVJSQVlTSVpFKElvQ3RscykgPyBJb0N0bHNbRnVuY0NvZGVdLk5hbWUgOiAiVU5LTk9XTiBJT0NUTCI7Cit9CisKKy8vIEhhbmRsZXMgcXVlcmllcyBmb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBUaHJlYWQgaW50ZXJmYWNlcworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxFbnVtZXJhdGVJbnRlcmZhY2VzKAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICBVTE9ORyBOZXdPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFBPVExXRl9JTlRFUkZBQ0VfTElTVCBwSW50ZXJmYWNlTGlzdCA9IChQT1RMV0ZfSU5URVJGQUNFX0xJU1QpT3V0QnVmZmVyOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0byB6ZXJvIG91dCB0aGUgb3V0cHV0IGZpcnN0CisgICAgUnRsWmVyb01lbW9yeShPdXRCdWZmZXIsICpPdXRCdWZmZXJMZW5ndGgpOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIGZpcnN0IHVpbnQxNl90CisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPCBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggaW50ZXJmYWNlIGFuZCBidWlsZCB1cCB0aGUgbGlzdCBvZiBydW5uaW5nIGludGVyZmFjZXMKKyAgICBmb3IgKFBMSVNUX0VOVFJZIExpbmsgPSBGaWx0ZXJNb2R1bGVMaXN0LkZsaW5rOyBMaW5rICE9ICZGaWx0ZXJNb2R1bGVMaXN0OyBMaW5rID0gTGluay0+RmxpbmspCisgICAgeworICAgICAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBDT05UQUlOSU5HX1JFQ09SRChMaW5rLCBNU19GSUxURVIsIEZpbHRlck1vZHVsZUxpbmspOworICAgICAgICBpZiAocEZpbHRlci0+U3RhdGUgIT0gRmlsdGVyUnVubmluZykgY29udGludWU7CisKKyAgICAgICAgUEdVSUQgcEludGVyZmFjZUd1aWQgPSAmcEludGVyZmFjZUxpc3QtPkludGVyZmFjZUd1aWRzW3BJbnRlcmZhY2VMaXN0LT5jSW50ZXJmYWNlR3VpZHNdOworICAgICAgICBwSW50ZXJmYWNlTGlzdC0+Y0ludGVyZmFjZUd1aWRzKys7CisKKyAgICAgICAgTmV3T3V0QnVmZmVyTGVuZ3RoID0KKyAgICAgICAgICAgIEZJRUxEX09GRlNFVChPVExXRl9JTlRFUkZBQ0VfTElTVCwgSW50ZXJmYWNlR3VpZHMpICsKKyAgICAgICAgICAgIHBJbnRlcmZhY2VMaXN0LT5jSW50ZXJmYWNlR3VpZHMgKiBzaXplb2YoR1VJRCk7CisKKyAgICAgICAgaWYgKE5ld091dEJ1ZmZlckxlbmd0aCA8PSAqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqcEludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKE5ld091dEJ1ZmZlckxlbmd0aCA+ICpPdXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBOZXdPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoVVNIT1JUKTsKKyAgICB9CisKK2Vycm9yOgorCisgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IE5ld091dEJ1ZmZlckxlbmd0aDsKKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0lPQ1RMLCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLy8gSGFuZGxlcyBxdWVyaWVzIGZvciB0aGUgZGV0YWlscyBvZiBhIHNwZWNpZmljIFRocmVhZCBpbnRlcmZhY2UKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsUXVlcnlJbnRlcmZhY2UoCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFVMT05HICAgIE5ld091dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0lPQ1RMKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBmaXJzdCBVU0hPUlQKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPCBzaXplb2YoR1VJRCkgfHwgKk91dEJ1ZmZlckxlbmd0aCA8IHNpemVvZihPVExXRl9ERVZJQ0UpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgUEdVSUQgcEludGVyZmFjZUd1aWQgPSAoUEdVSUQpSW5CdWZmZXI7CisgICAgUE9UTFdGX0RFVklDRSBwRGV2aWNlID0gKFBPVExXRl9ERVZJQ0UpT3V0QnVmZmVyOworCisgICAgLy8gTG9vayB1cCB0aGUgaW50ZXJmYWNlCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RMd2ZGaW5kQW5kUmVmSW50ZXJmYWNlKHBJbnRlcmZhY2VHdWlkKTsKKyAgICBpZiAocEZpbHRlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0RFVklDRV9ET0VTX05PVF9FWElTVDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBOZXdPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoT1RMV0ZfREVWSUNFKTsKKyAgICBwRGV2aWNlLT5Db21wYXJ0bWVudElEID0gcEZpbHRlci0+SW50ZXJmYWNlQ29tcGFydG1lbnRJRDsKKworICAgIC8vIFJlbGVhc2UgdGhlIHJlZiBvbiB0aGUgaW50ZXJmYWNlCisgICAgRXhSZWxlYXNlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisKK2Vycm9yOgorCisgICAgaWYgKE5ld091dEJ1ZmZlckxlbmd0aCA8ICpPdXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KChQVUNIQVIpT3V0QnVmZmVyICsgTmV3T3V0QnVmZmVyTGVuZ3RoLCAqT3V0QnVmZmVyTGVuZ3RoIC0gTmV3T3V0QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gTmV3T3V0QnVmZmVyTGVuZ3RoOworCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfSU9DVEwsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBIYW5kbGVzIElPVENMcyBmb3IgT3BlblRocmVhZCBjb250cm9sCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bE9wZW5UaHJlYWRDb250cm9sKAorICAgIF9Jbl8gUElSUCBJcnAKKyAgICApCit7CisgICAgTlRTVEFUVVMgICBzdGF0dXMgPSBTVEFUVVNfUEVORElORzsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBOVUxMOworCisgICAgUElPX1NUQUNLX0xPQ0FUSU9OIElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9JT0NUTCk7CisKKyAgICBpZiAoSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklucHV0QnVmZmVyTGVuZ3RoIDwgc2l6ZW9mKEdVSUQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHBGaWx0ZXIgPSBvdEx3ZkZpbmRBbmRSZWZJbnRlcmZhY2UoKFBHVUlEKUlycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXIpOworICAgIGlmIChwRmlsdGVyID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfREVWSUNFX0RPRVNfTk9UX0VYSVNUOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChwRmlsdGVyLT5EZXZpY2VTdGF0dXMgPT0gT1RMV0ZfREVWSUNFX1NUQVRVU19SQURJT19NT0RFKQorICAgIHsKKyAgICAgICAgLy8gUGVuZCB0aGUgSXJwIGZvciBwcm9jZXNzaW5nIG9uIHRoZSBPcGVuVGhyZWFkIGV2ZW50IHByb2Nlc3NpbmcgdGhyZWFkCisgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVJcnAocEZpbHRlciwgSXJwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gb3RMd2ZUdW5Jb0N0bChwRmlsdGVyLCBJcnApOworICAgIH0KKworICAgIC8vIFJlbGVhc2Ugb3VyIHJlZiBvbiB0aGUgZmlsdGVyCisgICAgRXhSZWxlYXNlUnVuZG93blByb3RlY3Rpb24oJnBGaWx0ZXItPkV4dGVybmFsUmVmcyk7CisKK2Vycm9yOgorCisgICAgLy8gQ29tcGxldGUgdGhlIElSUCBpZiB3ZSBhcmVuJ3QgcGVuZGluZyAoaW5kaWNhdGVzIHdlIGZhaWxlZCkKKyAgICBpZiAoc3RhdHVzICE9IFNUQVRVU19QRU5ESU5HKQorICAgIHsKKyAgICAgICAgTlRfQVNTRVJUKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUyk7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoSXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlciwgSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLk91dHB1dEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIElycC0+SW9TdGF0dXMuU3RhdHVzID0gc3RhdHVzOworICAgICAgICBJb0NvbXBsZXRlUmVxdWVzdChJcnAsIElPX05PX0lOQ1JFTUVOVCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfSU9DVEwsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBIYW5kbGVzIElycCBmb3IgSU9UQ0xzIGZvciBPcGVuVGhyZWFkIGNvbnRyb2wgb24gdGhlIE9wZW5UaHJlYWQgdGhyZWFkCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkNvbXBsZXRlT3BlblRocmVhZElycCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICBJcnAKKyAgICApCit7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OICBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oSXJwKTsKKworICAgIFBVQ0hBUiBJbkJ1ZmZlciA9IChQVUNIQVIpSXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlciArIHNpemVvZihHVUlEKTsKKyAgICBQVk9JRCBPdXRCdWZmZXIgPSBJcnAtPkFzc29jaWF0ZWRJcnAuU3lzdGVtQnVmZmVyOworCisgICAgVUxPTkcgSW5CdWZmZXJMZW5ndGggPSBJcnBTcC0+UGFyYW1ldGVycy5EZXZpY2VJb0NvbnRyb2wuSW5wdXRCdWZmZXJMZW5ndGggLSBzaXplb2YoR1VJRCk7CisgICAgVUxPTkcgT3V0QnVmZmVyTGVuZ3RoID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLk91dHB1dEJ1ZmZlckxlbmd0aDsKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisKKyAgICBVTE9ORyBPcmlnT3V0QnVmZmVyTGVuZ3RoID0gT3V0QnVmZmVyTGVuZ3RoOworCisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX05PVF9JTVBMRU1FTlRFRDsKKworICAgIFVMT05HIEZ1bmNDb2RlID0gKChJb0NvbnRyb2xDb2RlID4+IDIpICYgMHhGRkYpIC0gMTAwOworICAgIGlmIChGdW5jQ29kZSA8IEFSUkFZU0laRShJb0N0bHMpKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfSU9DVEwsICJQcm9jZXNzaW5nIElycD0lcCwgZm9yICVzIChJbjoldSxPdXQ6JXUpIiwKKyAgICAgICAgICAgICAgICAgICAgSXJwLCBJb0N0bHNbRnVuY0NvZGVdLk5hbWUsIEluQnVmZmVyTGVuZ3RoLCBPdXRCdWZmZXJMZW5ndGgpOworCisgICAgICAgIGlmIChJb0N0bHNbRnVuY0NvZGVdLm90RnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gSW9DdGxzW0Z1bmNDb2RlXS5vdEZ1bmMocEZpbHRlciwgSW5CdWZmZXIsIEluQnVmZmVyTGVuZ3RoLCBPdXRCdWZmZXIsICZPdXRCdWZmZXJMZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0lPQ1RMLCAiQ29tcGxldGluZyBJcnA9JXAsIHdpdGggJSFTVEFUVVMhIGZvciAlcyAoT3V0OiV1KSIsCisgICAgICAgICAgICAgICAgICAgIElycCwgc3RhdHVzLCBJb0N0bHNbRnVuY0NvZGVdLk5hbWUsIE91dEJ1ZmZlckxlbmd0aCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgLy8gQ2xlYXIgYW55IGxlZnRvdmVyIG91dHB1dCBidWZmZXIKKyAgICBpZiAoT3V0QnVmZmVyTGVuZ3RoIDwgT3JpZ091dEJ1ZmZlckxlbmd0aCkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoKFBVQ0hBUilPdXRCdWZmZXIgKyBPdXRCdWZmZXJMZW5ndGgsIE9yaWdPdXRCdWZmZXJMZW5ndGggLSBPdXRCdWZmZXJMZW5ndGgpOworICAgIH0KKworICAgIC8vIENvbXBsZXRlIHRoZSBJUlAKKyAgICBJcnAtPklvU3RhdHVzLkluZm9ybWF0aW9uID0gT3V0QnVmZmVyTGVuZ3RoOworICAgIElycC0+SW9TdGF0dXMuU3RhdHVzID0gc3RhdHVzOworICAgIElvQ29tcGxldGVSZXF1ZXN0KElycCwgSU9fTk9fSU5DUkVNRU5UKTsKK30KKworLy8gSGFuZGxlcyBJcnAgZm9yIElPVENMcyBmb3IgT3BlblRocmVhZCBjb250cm9sIG9uIHRoZSBPcGVuVGhyZWFkIHRocmVhZAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGwoCisgICAgX0luXyBQTVNfRklMVEVSICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgSXJwCisgICAgKQoreworICAgIFBJT19TVEFDS19MT0NBVElPTiAgSXJwU3AgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKElycCk7CisKKyAgICBQVUNIQVIgSW5CdWZmZXIgPSAoUFVDSEFSKUlycC0+QXNzb2NpYXRlZElycC5TeXN0ZW1CdWZmZXIgKyBzaXplb2YoR1VJRCk7CisgICAgVUxPTkcgSW5CdWZmZXJMZW5ndGggPSBJcnBTcC0+UGFyYW1ldGVycy5EZXZpY2VJb0NvbnRyb2wuSW5wdXRCdWZmZXJMZW5ndGggLSBzaXplb2YoR1VJRCk7CisgICAgVUxPTkcgT3V0QnVmZmVyTGVuZ3RoID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLk91dHB1dEJ1ZmZlckxlbmd0aDsKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfTk9UX0lNUExFTUVOVEVEOworCisgICAgVUxPTkcgRnVuY0NvZGUgPSAoKElvQ29udHJvbENvZGUgPj4gMikgJiAweEZGRikgLSAxMDA7CisgICAgaWYgKEZ1bmNDb2RlIDwgQVJSQVlTSVpFKElvQ3RscykpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9JT0NUTCwgIlByb2Nlc3NpbmcgSXJwPSVwLCBmb3IgJXMgKEluOiV1LE91dDoldSkiLAorICAgICAgICAgICAgICAgICAgICBJcnAsIElvQ3Rsc1tGdW5jQ29kZV0uTmFtZSwgSW5CdWZmZXJMZW5ndGgsIE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICAgICAgaWYgKElvQ3Rsc1tGdW5jQ29kZV0udHVuRnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gSW9DdGxzW0Z1bmNDb2RlXS50dW5GdW5jKHBGaWx0ZXIsIElycCwgSW5CdWZmZXIsIEluQnVmZmVyTGVuZ3RoLCBPdXRCdWZmZXJMZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0lPQ1RMLCAiQ29tcGxldGluZyBJcnA9JXAsIHdpdGggJSFTVEFUVVMhIGZvciAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBJcnAsIHN0YXR1cywgSW9DdGxzW0Z1bmNDb2RlXS5OYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfUEVORElORzsKKworICAgICAgICAvLyBNYXJrIHRoZSBJcnAgYXMgcGVuZGluZworICAgICAgICBJb01hcmtJcnBQZW5kaW5nKElycCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RJbnRlcmZhY2UoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIEJPT0xFQU4gSXNFbmFibGVkID0gKihCT09MRUFOKilJbkJ1ZmZlcjsKKyAgICAgICAgaWYgKElzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBhZGRyZXNzZXMgYXJlIGluIHN5bmMKKyAgICAgICAgICAgICh2b2lkKW90THdmSW5pdGlhbGl6ZUFkZHJlc3NlcyhwRmlsdGVyKTsKKyAgICAgICAgICAgIG90THdmUmFkaW9BZGRyZXNzZXNVcGRhdGVkKHBGaWx0ZXIpOworCX0KKworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RJcDZTZXRFbmFibGVkKHBGaWx0ZXItPm90Q3R4LCBJc0VuYWJsZWQpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdElwNklzRW5hYmxlZChwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEludGVyZmFjZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIEJPT0xFQU4gSXNFbmFibGVkID0gKihCT09MRUFOKilJbkJ1ZmZlcjsKKyAgICAgICAgaWYgKElzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBhZGRyZXNzZXMgYXJlIGluIHN5bmMKKyAgICAgICAgICAgICh2b2lkKW90THdmSW5pdGlhbGl6ZUFkZHJlc3NlcyhwRmlsdGVyKTsKKworICAgICAgICAgICAgLy8gU3luYyB0aGUgY3VycmVudCBhZGRyZXNzZXMKKyAgICAgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPlR1bldvcmtlclRocmVhZEFkZHJlc3NDaGFuZ2VkRXZlbnQsIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfSUZfVVAsCisgICAgICAgICAgICAgICAgc2l6ZW9mKEJPT0xFQU4pLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgSXNFbmFibGVkKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290SW50ZXJmYWNlX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfSUZfVVAsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RJbnRlcmZhY2VfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9JRl9VUCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfQk9PTF9TLCAoQk9PTEVBTiopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290VGhyZWFkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBCT09MRUFOIElzRW5hYmxlZCA9ICooQk9PTEVBTiopSW5CdWZmZXI7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdFRocmVhZFNldEVuYWJsZWQocEZpbHRlci0+b3RDdHgsIElzRW5hYmxlZCkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IChvdFRocmVhZEdldERldmljZVJvbGUocEZpbHRlci0+b3RDdHgpID4gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RUaHJlYWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9TVEFDS19VUCwKKyAgICAgICAgICAgICAgICBzaXplb2YoQk9PTEVBTiksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAqKEJPT0xFQU4qKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290VGhyZWFkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfU1RBQ0tfVVAsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RUaHJlYWRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9TVEFDS19VUCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfQk9PTF9TLCAoQk9PTEVBTiopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290QWN0aXZlU2NhbigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MTZfdCkpCisgICAgeworICAgICAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzID0gKih1aW50MzJfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24gPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RMaW5rQWN0aXZlU2NhbigKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICBhU2NhbkNoYW5uZWxzLAorICAgICAgICAgICAgICAgIGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgb3RMd2ZBY3RpdmVTY2FuQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgICooQk9PTEVBTiopT3V0QnVmZmVyID0gb3RMaW5rSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcyhwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEFjdGl2ZVNjYW4oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQxNl90KSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMgPSAqKHVpbnQzMl90KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiA9ICoodWludDE2X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICB1aW50OF90IGFTY2FuU3RhdGUgPSBTUElORUxfU0NBTl9TVEFURV9CRUFDT047CisKKyAgICAgICAgLy8gVE9ETyAtIFNlbmQgZG93biBzY2FuIGNoYW5uZWwgJiBkdXJhdGlvbiBmaXJzdAorICAgICAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFTY2FuQ2hhbm5lbHMpOworICAgICAgICBzdGF0dXMgPSBvdEx3ZkNtZFNldFByb3AocEZpbHRlciwgU1BJTkVMX1BST1BfTUFDX1NDQU5fTUFTSywgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCBhU2NhbkR1cmF0aW9uKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIGdvdG8gZXJyb3I7CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgYVNjYW5TdGF0ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdEFjdGl2ZVNjYW5fSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCitlcnJvcjoKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEFjdGl2ZVNjYW5fSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhU2NhblN0YXRlID0gMDsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAmYVNjYW5TdGF0ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICooQk9PTEVBTiopT3V0QnVmZmVyID0gKGFTY2FuU3RhdGUgPT0gU1BJTkVMX1NDQU5fU1RBVEVfQkVBQ09OKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEVuZXJneVNjYW4oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYVNjYW5DaGFubmVscyA9ICoodWludDMyX3QqKUluQnVmZmVyOworICAgICAgICB1aW50MTZfdCBhU2NhbkR1cmF0aW9uID0gKih1aW50MTZfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90TGlua0VuZXJneVNjYW4oCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgYVNjYW5DaGFubmVscywKKyAgICAgICAgICAgICAgICBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgIG90THdmRW5lcmd5U2NhbkNhbGxiYWNrLAorICAgICAgICAgICAgICAgIHBGaWx0ZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IG90TGlua0lzRW5lcmd5U2NhbkluUHJvZ3Jlc3MocEZpbHRlci0+b3RDdHgpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RFbmVyZ3lTY2FuKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MTZfdCkpCisgICAgeworICAgICAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzID0gKih1aW50MzJfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQxNl90IGFTY2FuRHVyYXRpb24gPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgdWludDhfdCBhU2NhblN0YXRlID0gU1BJTkVMX1NDQU5fU1RBVEVfRU5FUkdZOworCisgICAgICAgIC8vIFRPRE8gLSBTZW5kIGRvd24gc2NhbiBjaGFubmVsICYgZHVyYXRpb24gZmlyc3QKKyAgICAgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhU2NhbkNoYW5uZWxzKTsKKyAgICAgICAgc3RhdHVzID0gb3RMd2ZDbWRTZXRQcm9wKHBGaWx0ZXIsIFNQSU5FTF9QUk9QX01BQ19TQ0FOX01BU0ssIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgYVNjYW5EdXJhdGlvbik7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSBnb3RvIGVycm9yOworCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fU1RBVEUsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgIGFTY2FuU3RhdGUpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RFbmVyZ3lTY2FuX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworZXJyb3I6CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RFbmVyZ3lTY2FuX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYVNjYW5TdGF0ZSA9IDA7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgJmFTY2FuU3RhdGUpKQorICAgICAgICB7CisgICAgICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IChhU2NhblN0YXRlID09IFNQSU5FTF9TQ0FOX1NUQVRFX0VORVJHWSkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3REaXNjb3ZlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YoYm9vbCkpCisgICAgeworICAgICAgICB1aW50MzJfdCBhU2NhbkNoYW5uZWxzID0gKih1aW50MzJfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQxNl90IGFQYW5pZCA9ICoodWludDE2X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBib29sIGFKb2luZXIgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RUaHJlYWREaXNjb3ZlcigKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICBhU2NhbkNoYW5uZWxzLAorICAgICAgICAgICAgICAgIGFQYW5pZCwKKyAgICAgICAgICAgICAgICBhSm9pbmVyLAorICAgICAgICAgICAgICAgIGFFbmFibGVFdWk2NEZpbHRlcmluZywKKyAgICAgICAgICAgICAgICBvdEx3ZkRpc2NvdmVyQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdFRocmVhZElzRGlzY292ZXJJblByb2dyZXNzKHBGaWx0ZXItPm90Q3R4KSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2hhbm5lbCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90TGlua1NldENoYW5uZWwocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdExpbmtHZXRDaGFubmVsKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Q2hhbm5lbCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfUEhZX0NIQU4sCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RDaGFubmVsX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9QSFlfQ0hBTiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdENoYW5uZWxfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1BIWV9DSEFOKQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAodWludDhfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2hpbGRUaW1lb3V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQocEZpbHRlci0+b3RDdHgsICoodWludDMyX3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICAqKHVpbnQzMl90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldENoaWxkVGltZW91dChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RDaGlsZFRpbWVvdXQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVCwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RDaGlsZFRpbWVvdXRfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9USU1FT1VULAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Q2hpbGRUaW1lb3V0X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsICh1aW50MzJfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEV4dGVuZGVkQWRkcmVzcygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKHBGaWx0ZXItPm90Q3R4LCAob3RFeHRBZGRyZXNzKilJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhwRmlsdGVyLT5vdEN0eCksIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdEV4dEFkZHJlc3MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RFeHRlbmRlZEFkZHJlc3MoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSFdBRERSLAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dEFkZHJlc3MpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TLAorICAgICAgICAgICAgICAgIChvdEV4dEFkZHJlc3MqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RFeHRlbmRlZEFkZHJlc3NfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0hXQUREUiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEV4dGVuZGVkQWRkcmVzc19IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfSFdBRERSKQorICAgIHsKKyAgICAgICAgc3BpbmVsX2V1aTY0X3QgKmRhdGEgPSBOVUxMOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFeHRBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRFeHRlbmRlZFBhbklkKHBGaWx0ZXItPm90Q3R4LCAodWludDhfdCopSW5CdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpCisgICAgeworICAgICAgICBtZW1jcHkoT3V0QnVmZmVyLCBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQocEZpbHRlci0+b3RDdHgpLCBzaXplb2Yob3RFeHRlbmRlZFBhbklkKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFeHRlbmRlZFBhbklkKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290RXh0ZW5kZWRQYW5JZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dGVuZGVkUGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfWFBBTklELAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dGVuZGVkUGFuSWQpICsgc2l6ZW9mKHVpbnQxNl90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgIChvdEV4dGVuZGVkUGFuSWQqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dGVuZGVkUGFuSWQpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dGVuZGVkUGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RFeHRlbmRlZFBhbklkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfWFBBTklELAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290RXh0ZW5kZWRQYW5JZF9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTkVUX1hQQU5JRCkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgKmRhdGEgPSBOVUxMOworICAgICAgICBzcGluZWxfc2l6ZV90IGFFeHRQYW5JZExlbjsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsICZkYXRhLCAmYUV4dFBhbklkTGVuKSAmJiBkYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgIGFFeHRQYW5JZExlbiA9PSBzaXplb2Yob3RFeHRlbmRlZFBhbklkKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgZGF0YSwgc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpOworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdEV4dGVuZGVkUGFuSWQpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RGYWN0b3J5QXNzaWduZWRJZWVlRXVpNjQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChwRmlsdGVyLT5vdEN0eCwgKG90RXh0QWRkcmVzcyopT3V0QnVmZmVyKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdEV4dEFkZHJlc3MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RIYXNoTWFjQWRkcmVzcygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgb3RMaW5rR2V0Sm9pbmVySWQocEZpbHRlci0+b3RDdHgsIChvdEV4dEFkZHJlc3MqKU91dEJ1ZmZlcik7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFeHRBZGRyZXNzKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TGVhZGVyUmxvYygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90VGhyZWFkR2V0TGVhZGVyUmxvYyhwRmlsdGVyLT5vdEN0eCwgKG90SXA2QWRkcmVzcyopT3V0QnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RJcDZBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RMZWFkZXJSbG9jKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90SXA2QWRkcmVzcykpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfQUREUiwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RJcDZBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUywKKyAgICAgICAgICAgICAgICAob3RJcDZBZGRyZXNzKilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RJcDZBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TGVhZGVyUmxvY19IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9BRERSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGVhZGVyUmxvY19IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9BRERSKQorICAgIHsKKyAgICAgICAgc3BpbmVsX2lwdjZhZGRyX3QgKmRhdGEgPSBOVUxMOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCkpOworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdElwNkFkZHJlc3MpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RMaW5rTW9kZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSA9PSA0LCAiVGhlIHNpemUgb2Ygb3RMaW5rTW9kZUNvbmZpZyBzaG91bGQgYmUgNCBieXRlcyIpOworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRMaW5rTW9kZShwRmlsdGVyLT5vdEN0eCwgKihvdExpbmtNb2RlQ29uZmlnKilJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZykpCisgICAgeworICAgICAgICAqKG90TGlua01vZGVDb25maWcqKU91dEJ1ZmZlciA9IG90VGhyZWFkR2V0TGlua01vZGUocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TGlua01vZGVDb25maWcpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworZW51bQoreworICAgIGtUaHJlYWRNb2RlX1J4T25XaGVuSWRsZSAgICAgICAgPSAoMSA8PCAzKSwKKyAgICBrVGhyZWFkTW9kZV9TZWN1cmVEYXRhUmVxdWVzdCAgID0gKDEgPDwgMiksCisgICAga1RocmVhZE1vZGVfRnVsbEZ1bmN0aW9uRGV2aWNlICA9ICgxIDw8IDEpLAorICAgIGtUaHJlYWRNb2RlX0Z1bGxOZXR3b3JrRGF0YSAgICAgPSAoMSA8PCAwKSwKK307CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGlua01vZGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZykpCisgICAgeworICAgICAgICBjb25zdCBvdExpbmtNb2RlQ29uZmlnKiBhTGlua01vZGUgPSAob3RMaW5rTW9kZUNvbmZpZyopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3QgbnVtZXJpY19tb2RlID0gMDsKKworICAgICAgICBpZiAoYUxpbmtNb2RlLT5tUnhPbldoZW5JZGxlKSAgICAgICBudW1lcmljX21vZGUgfD0ga1RocmVhZE1vZGVfUnhPbldoZW5JZGxlOworICAgICAgICBpZiAoYUxpbmtNb2RlLT5tU2VjdXJlRGF0YVJlcXVlc3RzKSBudW1lcmljX21vZGUgfD0ga1RocmVhZE1vZGVfU2VjdXJlRGF0YVJlcXVlc3Q7CisgICAgICAgIGlmIChhTGlua01vZGUtPm1EZXZpY2VUeXBlKSAgICAgICAgIG51bWVyaWNfbW9kZSB8PSBrVGhyZWFkTW9kZV9GdWxsRnVuY3Rpb25EZXZpY2U7CisgICAgICAgIGlmIChhTGlua01vZGUtPm1OZXR3b3JrRGF0YSkgICAgICAgIG51bWVyaWNfbW9kZSB8PSBrVGhyZWFkTW9kZV9GdWxsTmV0d29ya0RhdGE7CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTU9ERSwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgbnVtZXJpY19tb2RlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdExpbmtNb2RlQ29uZmlnKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TGlua01vZGVfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9NT0RFLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGlua01vZGVfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9NT0RFKQorICAgIHsKKwkJdWludDhfdCBudW1lcmljX21vZGUgPSAwOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICZudW1lcmljX21vZGUpKQorICAgICAgICB7CisgICAgICAgICAgICBvdExpbmtNb2RlQ29uZmlnKiBhTGlua01vZGUgPSAob3RMaW5rTW9kZUNvbmZpZyopT3V0QnVmZmVyOworCisgICAgICAgICAgICBhTGlua01vZGUtPm1SeE9uV2hlbklkbGUgPSAoKG51bWVyaWNfbW9kZSAmIGtUaHJlYWRNb2RlX1J4T25XaGVuSWRsZSkgPT0ga1RocmVhZE1vZGVfUnhPbldoZW5JZGxlKTsKKyAgICAgICAgICAgIGFMaW5rTW9kZS0+bVNlY3VyZURhdGFSZXF1ZXN0cyA9ICgobnVtZXJpY19tb2RlICYga1RocmVhZE1vZGVfU2VjdXJlRGF0YVJlcXVlc3QpID09IGtUaHJlYWRNb2RlX1NlY3VyZURhdGFSZXF1ZXN0KTsKKyAgICAgICAgICAgIGFMaW5rTW9kZS0+bURldmljZVR5cGUgPSAoKG51bWVyaWNfbW9kZSAmIGtUaHJlYWRNb2RlX0Z1bGxGdW5jdGlvbkRldmljZSkgPT0ga1RocmVhZE1vZGVfRnVsbEZ1bmN0aW9uRGV2aWNlKTsKKyAgICAgICAgICAgIGFMaW5rTW9kZS0+bU5ldHdvcmtEYXRhID0gKChudW1lcmljX21vZGUgJiBrVGhyZWFkTW9kZV9GdWxsTmV0d29ya0RhdGEpID09IGtUaHJlYWRNb2RlX0Z1bGxOZXR3b3JrRGF0YSk7CisKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RMaW5rTW9kZUNvbmZpZyk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE1hc3RlcktleSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdFRocmVhZFNldE1hc3RlcktleShwRmlsdGVyLT5vdEN0eCwgKG90TWFzdGVyS2V5KilJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RNYXN0ZXJLZXkpKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3RNYXN0ZXJLZXkqIGFNYXN0ZXJLZXkgPSBvdFRocmVhZEdldE1hc3RlcktleShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGFNYXN0ZXJLZXksIHNpemVvZihvdE1hc3RlcktleSkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWFzdGVyS2V5KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TWFzdGVyS2V5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX01BU1RFUl9LRVksCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90TWFzdGVyS2V5KSArIHNpemVvZih1aW50MTZfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAob3RNYXN0ZXJLZXkqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIHNpemVvZihvdE1hc3RlcktleSkpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TWFzdGVyS2V5X0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfTUFTVEVSX0tFWSwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1hc3RlcktleV9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTkVUX01BU1RFUl9LRVkpCisgICAgeworICAgICAgICB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgICAgICAgc3BpbmVsX3NpemVfdCBhS2V5TGVuZ3RoOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywgJmRhdGEsICZhS2V5TGVuZ3RoKSAmJiBkYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgIGFLZXlMZW5ndGggPT0gc2l6ZW9mKG90TWFzdGVyS2V5KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgZGF0YSwgc2l6ZW9mKG90TWFzdGVyS2V5KSk7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWFzdGVyS2V5KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UFNLYygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UFNLYykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRQU0tjKHBGaWx0ZXItPm90Q3R4LCBJbkJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RQU0tjKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFQU0tjID0gb3RUaHJlYWRHZXRQU0tjKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgYVBTS2MsIHNpemVvZihvdFBTS2MpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFBTS2MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RQU0tjKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UFNLYykpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9QU0tDLAorICAgICAgICAgICAgICAgIHNpemVvZihvdFBTS2MpICsgc2l6ZW9mKHVpbnQxNl90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgIChvdFBTS2MqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIE9UX1BTS0NfTUFYX1NJWkUpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UFNLYykpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFBTS2NfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9QU0tDLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UFNLY19IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTkVUX1BTS0MpCisgICAgeworICAgICAgICB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgICAgICAgc3BpbmVsX3NpemVfdCBhUFNLY0xlbmd0aDsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsICZkYXRhLCAmYVBTS2NMZW5ndGgpICYmIGRhdGEgIT0gTlVMTCAmJgorICAgICAgICAgICAgYVBTS2NMZW5ndGggPT0gc2l6ZW9mKG90UFNLYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihvdFBTS2MpKTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RQU0tjKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWVzaExvY2FsRWlkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90SXA2QWRkcmVzcykpCisgICAgeworICAgICAgICBtZW1jcHkoT3V0QnVmZmVyLCAgb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQocEZpbHRlci0+b3RDdHgpLCBzaXplb2Yob3RJcDZBZGRyZXNzKSk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1lc2hMb2NhbEVpZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RNZXNoTG9jYWxFaWRfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0lQVjZfTUxfQUREUiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1lc2hMb2NhbEVpZF9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSKQorICAgIHsKKyAgICAgICAgc3BpbmVsX2lwdjZhZGRyX3QgKmRhdGEgPSBOVUxMOworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShPdXRCdWZmZXIsIGRhdGEsIHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCkpOworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdElwNkFkZHJlc3MpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RNZXNoTG9jYWxQcmVmaXgoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXRNZXNoTG9jYWxQcmVmaXgocEZpbHRlci0+b3RDdHgsIEluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpCisgICAgeworICAgICAgICBtZW1jcHkoT3V0QnVmZmVyLCBvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChwRmlsdGVyLT5vdEN0eCksIHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TWVzaExvY2FsUHJlZml4KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSkKKyAgICB7CisgICAgICAgIG90SXA2QWRkcmVzcyBhQWRkcmVzcyA9IHswfTsKKyAgICAgICAgbWVtY3B5KCZhQWRkcmVzcywgSW5CdWZmZXIsIHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpOworCisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSVBWNl9NTF9QUkVGSVgsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcyksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsCisgICAgICAgICAgICAgICAgJmFBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1lc2hMb2NhbFByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdE1lc2hMb2NhbFByZWZpeF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSVBWNl9NTF9QUkVGSVgsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RNZXNoTG9jYWxQcmVmaXhfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX0lQVjZfTUxfUFJFRklYKQorICAgIHsKKyAgICAgICAgaWYgKERhdGFMZW5ndGggPj0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KE91dEJ1ZmZlciwgRGF0YSwgc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KSk7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWVzaExvY2FsUHJlZml4KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8vIG90THdmSW9DdGxfb3ROZXR3b3JrRGF0YUxlYWRlcgorCisvLyBvdEx3ZklvQ3RsX290TmV0d29ya0RhdGFMb2NhbAorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE5ldHdvcmtOYW1lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3ROZXR3b3JrTmFtZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRTZXROZXR3b3JrTmFtZShwRmlsdGVyLT5vdEN0eCwgKGNoYXIqKUluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE5ldHdvcmtOYW1lKSkKKyAgICB7CisgICAgICAgIHN0cmNweV9zKChjaGFyKilPdXRCdWZmZXIsIHNpemVvZihvdE5ldHdvcmtOYW1lKSwgb3RUaHJlYWRHZXROZXR3b3JrTmFtZShwRmlsdGVyLT5vdEN0eCkpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TmV0d29ya05hbWUpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3ROZXR3b3JrTmFtZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE5ldHdvcmtOYW1lKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX05FVFdPUktfTkFNRSwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RJcDZBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TLAorICAgICAgICAgICAgICAgIChvdE5ldHdvcmtOYW1lKilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3ROZXR3b3JrTmFtZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdE5ldHdvcmtOYW1lX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfTkVUV09SS19OQU1FLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TmV0d29ya05hbWVfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9ORVRXT1JLX05BTUUpCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpkYXRhID0gTlVMTDsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MsICZkYXRhKSAmJiBkYXRhICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmNweV9zKE91dEJ1ZmZlciwgc2l6ZW9mKG90TmV0d29ya05hbWUpLCBkYXRhKTsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3ROZXR3b3JrTmFtZSk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFBhbklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RQYW5JZCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RMaW5rU2V0UGFuSWQocEZpbHRlci0+b3RDdHgsICoob3RQYW5JZCopSW5CdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UGFuSWQpKQorICAgIHsKKyAgICAgICAgKihvdFBhbklkKilPdXRCdWZmZXIgPSBvdExpbmtHZXRQYW5JZChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RQYW5JZCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBhbklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfMTVfNF9QQU5JRCwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RQYW5JZCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICoob3RQYW5JZCopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90UGFuSWQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RQYW5JZF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RQYW5JZF9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCAob3RQYW5JZCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFBhbklkKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Um91dGVyUm9sbEVuYWJsZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Um91dGVyUm9sZUVuYWJsZWQocEZpbHRlci0+b3RDdHgsICooQk9PTEVBTiopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQocEZpbHRlci0+b3RDdHgpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJSb2xsRW5hYmxlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKEJPT0xFQU4pLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgKihCT09MRUFOKilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclJvbGxFbmFibGVkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclJvbGxFbmFibGVkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfQk9PTF9TLCAoQk9PTEVBTiopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2hvcnRBZGRyZXNzKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90U2hvcnRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgICoob3RTaG9ydEFkZHJlc3MqKU91dEJ1ZmZlciA9IG90TGlua0dldFNob3J0QWRkcmVzcyhwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RTaG9ydEFkZHJlc3MpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RTaG9ydEFkZHJlc3MoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RTaG9ydEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RTaG9ydEFkZHJlc3NfSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1NBRERSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290U2hvcnRBZGRyZXNzX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9NQUNfMTVfNF9TQUREUikKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsIChvdFNob3J0QWRkcmVzcyopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvLyBvdEx3ZklvQ3RsX290VW5pY2FzdEFkZHJlc3NlcworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFjdGl2ZURhdGFzZXQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3REYXRhc2V0U2V0QWN0aXZlKHBGaWx0ZXItPm90Q3R4LCAob3RPcGVyYXRpb25hbERhdGFzZXQqKUluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3REYXRhc2V0R2V0QWN0aXZlKHBGaWx0ZXItPm90Q3R4LCAob3RPcGVyYXRpb25hbERhdGFzZXQqKU91dEJ1ZmZlcikpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RQZW5kaW5nRGF0YXNldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdERhdGFzZXRTZXRQZW5kaW5nKHBGaWx0ZXItPm90Q3R4LCAob3RPcGVyYXRpb25hbERhdGFzZXQqKUluQnVmZmVyKSk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3REYXRhc2V0R2V0UGVuZGluZyhwRmlsdGVyLT5vdEN0eCwgKG90T3BlcmF0aW9uYWxEYXRhc2V0KilPdXRCdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TG9jYWxMZWFkZXJXZWlnaHQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldExlYWRlcldlaWdodChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdExvY2FsTGVhZGVyV2VpZ2h0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgKih1aW50OF90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdExvY2FsTGVhZGVyV2VpZ2h0X0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdExvY2FsTGVhZGVyV2VpZ2h0X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFkZEJvcmRlclJvdXRlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeChwRmlsdGVyLT5vdEN0eCwgKG90Qm9yZGVyUm91dGVyQ29uZmlnKilJbkJ1ZmZlcikpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2NvbnN0IHVpbnQ4X3Qga1ByZWZlcmVuY2VPZmZzZXQgPSA2OworLy9jb25zdCB1aW50OF90IGtQcmVmZXJlbmNlTWFzayA9IDMgPDwga1ByZWZlcmVuY2VPZmZzZXQ7Citjb25zdCB1aW50OF90IGtQcmVmZXJyZWRGbGFnID0gMSA8PCA1OworY29uc3QgdWludDhfdCBrU2xhYWNGbGFnID0gMSA8PCA0OworY29uc3QgdWludDhfdCBrRGhjcEZsYWcgPSAxIDw8IDM7Citjb25zdCB1aW50OF90IGtDb25maWd1cmVGbGFnID0gMSA8PCAyOworY29uc3QgdWludDhfdCBrRGVmYXVsdFJvdXRlRmxhZyA9IDEgPDwgMTsKK2NvbnN0IHVpbnQ4X3Qga09uTWVzaEZsYWcgPSAxIDw8IDA7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290QWRkQm9yZGVyUm91dGVyKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnID0gKG90Qm9yZGVyUm91dGVyQ29uZmlnKilJbkJ1ZmZlcjsKKworICAgICAgICBvdElwNkFkZHJlc3MgcHJlZml4ID0gezB9OworICAgICAgICBtZW1jcHlfcygmcHJlZml4LCBzaXplb2YocHJlZml4KSwgJmFDb25maWctPm1QcmVmaXgubVByZWZpeCwgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoKTsKKworICAgICAgICB1aW50OF90IGZsYWdzID0gKHVpbnQ4X3QpKGFDb25maWctPm1QcmVmZXJlbmNlIDw8IGtQcmVmZXJlbmNlT2Zmc2V0KTsKKyAgICAgICAgaWYgKGFDb25maWctPm1TbGFhYykgICAgICAgIGZsYWdzIHw9IGtTbGFhY0ZsYWc7CisgICAgICAgIGlmIChhQ29uZmlnLT5tRGhjcCkgICAgICAgICBmbGFncyB8PSBrRGhjcEZsYWc7CisgICAgICAgIGlmIChhQ29uZmlnLT5tQ29uZmlndXJlKSAgICBmbGFncyB8PSBrQ29uZmlndXJlRmxhZzsKKyAgICAgICAgaWYgKGFDb25maWctPm1EZWZhdWx0Um91dGUpIGZsYWdzIHw9IGtEZWZhdWx0Um91dGVGbGFnOworICAgICAgICBpZiAoYUNvbmZpZy0+bU9uTWVzaCkgICAgICAgZmxhZ3MgfD0ga09uTWVzaEZsYWc7CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTLAorICAgICAgICAgICAgICAgIHNpemVvZihvdElwNkFkZHJlc3MpICsgMyAqIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICAiNkNiQyIsCisgICAgICAgICAgICAgICAgJnByZWZpeCwKKyAgICAgICAgICAgICAgICBhQ29uZmlnLT5tUHJlZml4Lm1MZW5ndGgsCisgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVN0YWJsZSwKKyAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSZW1vdmVCb3JkZXJSb3V0ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgocEZpbHRlci0+b3RDdHgsIChvdElwNlByZWZpeCopSW5CdWZmZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFJlbW92ZUJvcmRlclJvdXRlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXJMZW5ndGgpOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCA9IChvdElwNlByZWZpeCopSW5CdWZmZXI7CisKKyAgICAgICAgb3RJcDZBZGRyZXNzIHByZWZpeCA9IHswfTsKKyAgICAgICAgbWVtY3B5X3MoJnByZWZpeCwgc2l6ZW9mKHByZWZpeCksICZhUHJlZml4LT5tUHJlZml4LCBhUHJlZml4LT5tTGVuZ3RoKTsKKworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgIjZDIiwKKyAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAgIGFQcmVmaXgtPm1MZW5ndGgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290QWRkRXh0ZXJuYWxSb3V0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0ZXJuYWxSb3V0ZUNvbmZpZykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RCb3JkZXJSb3V0ZXJBZGRSb3V0ZShwRmlsdGVyLT5vdEN0eCwgKG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyopSW5CdWZmZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdEFkZEV4dGVybmFsUm91dGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcgPSAob3RCb3JkZXJSb3V0ZXJDb25maWcqKUluQnVmZmVyOworCisgICAgICAgIG90SXA2QWRkcmVzcyBwcmVmaXggPSB7MH07CisgICAgICAgIG1lbWNweV9zKCZwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAmYUNvbmZpZy0+bVByZWZpeC5tUHJlZml4LCBhQ29uZmlnLT5tUHJlZml4Lm1MZW5ndGgpOworCisgICAgICAgIHVpbnQ4X3QgZmxhZ3MgPSAodWludDhfdCkoYUNvbmZpZy0+bVByZWZlcmVuY2UgPDwga1ByZWZlcmVuY2VPZmZzZXQpOworICAgICAgICBpZiAoYUNvbmZpZy0+bVNsYWFjKSAgICAgICAgZmxhZ3MgfD0ga1NsYWFjRmxhZzsKKyAgICAgICAgaWYgKGFDb25maWctPm1EaGNwKSAgICAgICAgIGZsYWdzIHw9IGtEaGNwRmxhZzsKKyAgICAgICAgaWYgKGFDb25maWctPm1Db25maWd1cmUpICAgIGZsYWdzIHw9IGtDb25maWd1cmVGbGFnOworICAgICAgICBpZiAoYUNvbmZpZy0+bURlZmF1bHRSb3V0ZSkgZmxhZ3MgfD0ga0RlZmF1bHRSb3V0ZUZsYWc7CisgICAgICAgIGlmIChhQ29uZmlnLT5tT25NZXNoKSAgICAgICBmbGFncyB8PSBrT25NZXNoRmxhZzsKKworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyAzICogc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgICI2Q2JDIiwKKyAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAgIGFDb25maWctPm1QcmVmaXgubUxlbmd0aCwKKyAgICAgICAgICAgICAgICBhQ29uZmlnLT5tU3RhYmxlLAorICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFJlbW92ZUV4dGVybmFsUm91dGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZShwRmlsdGVyLT5vdEN0eCwgKG90SXA2UHJlZml4KilJbkJ1ZmZlcikpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmVtb3ZlRXh0ZXJuYWxSb3V0ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXJMZW5ndGgpOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNlByZWZpeCkpCisgICAgeworICAgICAgICBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCA9IChvdElwNlByZWZpeCopSW5CdWZmZXI7CisKKyAgICAgICAgb3RJcDZBZGRyZXNzIHByZWZpeCA9IHswfTsKKyAgICAgICAgbWVtY3B5X3MoJnByZWZpeCwgc2l6ZW9mKHByZWZpeCksICZhUHJlZml4LT5tUHJlZml4LCBhUHJlZml4LT5tTGVuZ3RoKTsKKworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgIjZDIiwKKyAgICAgICAgICAgICAgICAmcHJlZml4LAorICAgICAgICAgICAgICAgIGFQcmVmaXgtPm1MZW5ndGgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2VuZFNlcnZlckRhdGEoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90Qm9yZGVyUm91dGVyUmVnaXN0ZXIocEZpbHRlci0+b3RDdHgpKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q29udGV4dElkUmV1c2VEZWxheSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Q29udGV4dElkUmV1c2VEZWxheShwRmlsdGVyLT5vdEN0eCwgKih1aW50MzJfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgICoodWludDMyX3QqKU91dEJ1ZmZlciA9IG90VGhyZWFkR2V0Q29udGV4dElkUmV1c2VEZWxheShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RDb250ZXh0SWRSZXVzZURlbGF5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVksCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICAgKih1aW50MzJfdCopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290Q29udGV4dElkUmV1c2VEZWxheV9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVksCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RDb250ZXh0SWRSZXVzZURlbGF5X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsICh1aW50MzJfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEtleVNlcXVlbmNlQ291bnRlcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRLZXlTZXF1ZW5jZUNvdW50ZXIocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U2VxdWVuY2VDb3VudGVyKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSLAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICoodWludDMyX3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdEtleVNlcXVlbmNlQ291bnRlcl9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U2VxdWVuY2VDb3VudGVyX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLCAodWludDMyX3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3ROZXR3b3JrSWRUaW1lb3V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBvdFRocmVhZFNldE5ldHdvcmtJZFRpbWVvdXQocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldE5ldHdvcmtJZFRpbWVvdXQocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3ROZXR3b3JrSWRUaW1lb3V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VULAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TmV0d29ya0lkVGltZW91dF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfSURfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE5ldHdvcmtJZFRpbWVvdXRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBvdFRocmVhZFNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xELAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290Um91dGVyVXBncmFkZVRocmVzaG9sZF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclVwZ3JhZGVUaHJlc2hvbGRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgKih1aW50OF90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlckRvd25ncmFkZVRocmVzaG9sZF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xELAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Um91dGVyRG93bmdyYWRlVGhyZXNob2xkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSZWxlYXNlUm91dGVySWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdFRocmVhZFJlbGVhc2VSb3V0ZXJJZChwRmlsdGVyLT5vdEN0eCwgKih1aW50OF90KilJbkJ1ZmZlcikpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmVsZWFzZVJvdXRlcklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRSwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQUNUSVZFX1JPVVRFUl9JRFMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWFjV2hpdGVsaXN0RW5hYmxlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgQk9PTEVBTiBhRW5hYmxlZCA9ICooQk9PTEVBTiopSW5CdWZmZXI7CisgICAgICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQocEZpbHRlci0+b3RDdHgsIGFFbmFibGVkKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgICooQk9PTEVBTiopT3V0QnVmZmVyID0gb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkKHBGaWx0ZXItPm90Q3R4KSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TWFjV2hpdGVsaXN0RW5hYmxlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVF9FTkFCTEVELAorICAgICAgICAgICAgICAgIHNpemVvZihCT09MRUFOKSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICooQk9PTEVBTiopSW5CdWZmZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3RNYWNXaGl0ZWxpc3RFbmFibGVkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RNYWNXaGl0ZWxpc3RFbmFibGVkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywgKEJPT0xFQU4qKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFkZE1hY1doaXRlbGlzdCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykgKyBzaXplb2YoaW50OF90KSkKKyAgICB7CisgICAgICAgIGludDhfdCBhUnNzaSA9ICooaW50OF90KikoSW5CdWZmZXIgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSk7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdExpbmtBZGRXaGl0ZWxpc3RSc3NpKHBGaWx0ZXItPm90Q3R4LCAodWludDhfdCopSW5CdWZmZXIsIGFSc3NpKSk7CisgICAgfQorICAgIGVsc2UgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90TGlua0FkZFdoaXRlbGlzdChwRmlsdGVyLT5vdEN0eCwgKHVpbnQ4X3QqKUluQnVmZmVyKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBSU1NJX09WRVJSSURFX0RJU0FCTEVEICAgICAgICAxMjcgLy8gVXNlZCBmb3IgUFJPUF9NQUNfV0hJVEVMSVNUCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290QWRkTWFjV2hpdGVsaXN0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBpbnQ4X3QgYVJzc2kgPSBSU1NJX09WRVJSSURFX0RJU0FCTEVEOworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykgKyBzaXplb2YoaW50OF90KSkKKyAgICAgICAgeworICAgICAgICAgICAgYVJzc2kgPSAqKGludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKG90RXh0QWRkcmVzcykpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNULAorICAgICAgICAgICAgICAgIHNpemVvZihvdEV4dEFkZHJlc3MpICsgc2l6ZW9mKGludDhfdCksCisgICAgICAgICAgICAgICAgIkVjIiwKKyAgICAgICAgICAgICAgICAob3RFeHRBZGRyZXNzKilJbkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAmYVJzc2kpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UmVtb3ZlTWFjV2hpdGVsaXN0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIG90TGlua1JlbW92ZVdoaXRlbGlzdChwRmlsdGVyLT5vdEN0eCwgKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSZW1vdmVNYWNXaGl0ZWxpc3QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkUsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVCwKKyAgICAgICAgICAgICAgICBzaXplb2Yob3RFeHRBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAiRSIsCisgICAgICAgICAgICAgICAgKG90RXh0QWRkcmVzcyopSW5CdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWFjV2hpdGVsaXN0RW50cnkoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1hY1doaXRlbGlzdEVudHJ5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90TGlua0dldFdoaXRlbGlzdEVudHJ5KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90TWFjV2hpdGVsaXN0RW50cnkqKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RNYWNXaGl0ZWxpc3RFbnRyeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2xlYXJNYWNXaGl0ZWxpc3QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBvdExpbmtDbGVhcldoaXRlbGlzdChwRmlsdGVyLT5vdEN0eCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdENsZWFyTWFjV2hpdGVsaXN0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19XSElURUxJU1QsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdERldmljZVJvbGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90RGV2aWNlUm9sZSByb2xlID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKworICAgICAgICBJbkJ1ZmZlckxlbmd0aCAtPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIEluQnVmZmVyID0gSW5CdWZmZXIgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKHJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEJlY29tZUxlYWRlcihwRmlsdGVyLT5vdEN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICAgICAgICAgIG90VGhyZWFkQmVjb21lUm91dGVyKHBGaWx0ZXItPm90Q3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEJlY29tZUNoaWxkKHBGaWx0ZXItPm90Q3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyb2xlID09IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEJlY29tZURldGFjaGVkKHBGaWx0ZXItPm90Q3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9ICh1aW50OF90KW90VGhyZWFkR2V0RGV2aWNlUm9sZShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdERldmljZVJvbGUoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBvdERldmljZVJvbGUgcm9sZSA9ICoodWludDhfdCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3Qgc3BpbmVsX3JvbGUgPSBTUElORUxfTkVUX1JPTEVfREVUQUNIRUQ7CisKKyAgICAgICAgc3dpdGNoIChyb2xlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgICAgICBzcGluZWxfcm9sZSA9IFNQSU5FTF9ORVRfUk9MRV9DSElMRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgICAgIHNwaW5lbF9yb2xlID0gU1BJTkVMX05FVF9ST0xFX1JPVVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgICAgIHNwaW5lbF9yb2xlID0gU1BJTkVMX05FVF9ST0xFX0xFQURFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUk9MRSwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgc3BpbmVsX3JvbGUpOworICAgIH0KKyAgICBlbHNlIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3REZXZpY2VSb2xlX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUk9MRSwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdERldmljZVJvbGVfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9ST0xFKQorICAgIHsKKwkJdWludDhfdCBzcGluZWxfcm9sZSA9IDA7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgJnNwaW5lbF9yb2xlKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzcGluZWxfcm9sZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYXNlIFNQSU5FTF9ORVRfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfQ0hJTEQ6CisgICAgICAgICAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBPVF9ERVZJQ0VfUk9MRV9DSElMRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX1JPVVRFUjoKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IE9UX0RFVklDRV9ST0xFX1JPVVRFUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1BJTkVMX05FVF9ST0xFX0xFQURFUjoKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IE9UX0RFVklDRV9ST0xFX0xFQURFUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2hpbGRJbmZvQnlJZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQxNl90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdENoaWxkSW5mbykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICBvdFRocmVhZEdldENoaWxkSW5mb0J5SWQoCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgKih1aW50MTZfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90Q2hpbGRJbmZvKilPdXRCdWZmZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90Q2hpbGRJbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RDaGlsZEluZm9CeUluZGV4KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgJiYKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RDaGlsZEluZm8pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90Q2hpbGRJbmZvKilPdXRCdWZmZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90Q2hpbGRJbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RFaWRDYWNoZUVudHJ5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgJiYKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFaWRDYWNoZUVudHJ5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90VGhyZWFkR2V0RWlkQ2FjaGVFbnRyeSgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIChvdEVpZENhY2hlRW50cnkqKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RFaWRDYWNoZUVudHJ5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RMZWFkZXJEYXRhKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90TGVhZGVyRGF0YSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRHZXRMZWFkZXJEYXRhKHBGaWx0ZXItPm90Q3R4LCAob3RMZWFkZXJEYXRhKilPdXRCdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdExlYWRlckRhdGEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdExlYWRlclJvdXRlcklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldExlYWRlclJvdXRlcklkKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TGVhZGVyUm91dGVySWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdExlYWRlclJvdXRlcklkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1JJRCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdExlYWRlclJvdXRlcklkX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1JJRCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdExlYWRlcldlaWdodCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RMZWFkZXJXZWlnaHQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdExlYWRlcldlaWdodF9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9XRUlHSFQsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RMZWFkZXJXZWlnaHRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfV0VJR0hUKQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAodWludDhfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TmV0d29ya0RhdGFWZXJzaW9uKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdE5ldERhdGFHZXRWZXJzaW9uKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290TmV0d29ya0RhdGFWZXJzaW9uKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIG90THdmVHVuSW9DdGxfb3ROZXR3b3JrRGF0YVZlcnNpb25fSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE5ldHdvcmtEYXRhVmVyc2lvbl9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OKQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAodWludDhfdCopT3V0QnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UGFydGl0aW9uSWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRQYXJ0aXRpb25JZChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RQYXJ0aXRpb25JZCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCAgICAgICAgICAgICAgIHBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFBhcnRpdGlvbklkX0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUEFSVElUSU9OX0lELAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UGFydGl0aW9uSWRfSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX05FVF9QQVJUSVRJT05fSUQpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLCAodWludDMyX3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSbG9jMTYoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MTZfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSbG9jMTYocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmxvYzE2KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmIChPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290UmxvYzE2X0hhbmRsZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0dFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfUkxPQzE2LAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290UmxvYzE2X0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUkxPQzE2KQorICAgIHsKKyAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKERhdGEsIERhdGFMZW5ndGgsIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgKHVpbnQxNl90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Um91dGVySWRTZXF1ZW5jZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSb3V0ZXJJZFNlcXVlbmNlKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Um91dGVySW5mbygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQxNl90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdFJvdXRlckluZm8pKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RUaHJlYWRHZXRSb3V0ZXJJbmZvKAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDE2X3QqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgIChvdFJvdXRlckluZm8qKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RSb3V0ZXJJbmZvKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTdGFibGVOZXR3b3JrRGF0YVZlcnNpb24oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24ocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RTdGFibGVOZXR3b3JrRGF0YVZlcnNpb24oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFN0YWJsZU5ldHdvcmtEYXRhVmVyc2lvbl9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFN0YWJsZU5ldHdvcmtEYXRhVmVyc2lvbl9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTikKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE1hY0JsYWNrbGlzdEVuYWJsZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIEJPT0xFQU4gYUVuYWJsZWQgPSAqKEJPT0xFQU4qKUluQnVmZmVyOworICAgICAgICBvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKHBGaWx0ZXItPm90Q3R4LCBhRW5hYmxlZCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IG90TGlua0lzQmxhY2tsaXN0RW5hYmxlZChwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFkZE1hY0JsYWNrbGlzdCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RMaW5rQWRkQmxhY2tsaXN0KHBGaWx0ZXItPm90Q3R4LCAodWludDhfdCopSW5CdWZmZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFJlbW92ZU1hY0JsYWNrbGlzdCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICBvdExpbmtSZW1vdmVCbGFja2xpc3QocEZpbHRlci0+b3RDdHgsICh1aW50OF90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290TWFjQmxhY2tsaXN0RW50cnkoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1hY0JsYWNrbGlzdEVudHJ5KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgIG90TGlua0dldEJsYWNrbGlzdEVudHJ5KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICoodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAgICAgKG90TWFjQmxhY2tsaXN0RW50cnkqKU91dEJ1ZmZlcikKKyAgICAgICAgICAgICk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2Yob3RNYWNCbGFja2xpc3RFbnRyeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q2xlYXJNYWNCbGFja2xpc3QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBvdExpbmtDbGVhckJsYWNrbGlzdChwRmlsdGVyLT5vdEN0eCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE1heFRyYW5zbWl0UG93ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihwRmlsdGVyLT5vdEN0eCwgKihpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKihpbnQ4X3QqKU91dEJ1ZmZlciA9IG90TGlua0dldE1heFRyYW5zbWl0UG93ZXIocEZpbHRlci0+b3RDdHgpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKGludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdE5leHRPbk1lc2hQcmVmaXgoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSArIHNpemVvZih1aW50OF90KSAmJgorICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSArIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZykpCisgICAgeworICAgICAgICBCT09MRUFOIGFMb2NhbCA9ICooQk9PTEVBTiopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3QgYUl0ZXJhdG9yID0gKih1aW50OF90KikoSW5CdWZmZXIgKyBzaXplb2YoQk9PTEVBTikpOworICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyogYUNvbmZpZyA9IChvdEJvcmRlclJvdXRlckNvbmZpZyopKChQVUNIQVIpT3V0QnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgaWYgKGFMb2NhbCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgICAgIG90Qm9yZGVyUm91dGVyR2V0TmV4dE9uTWVzaFByZWZpeCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgICZhSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGFDb25maWcpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdE5ldERhdGFHZXROZXh0T25NZXNoUHJlZml4KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgJmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgYUNvbmZpZykKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RCb3JkZXJSb3V0ZXJDb25maWcpOworICAgICAgICBpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAqKHVpbnQ4X3QqKU91dEJ1ZmZlciA9IGFJdGVyYXRvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFBvbGxQZXJpb2QoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBvdExpbmtTZXRQb2xsUGVyaW9kKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RMaW5rR2V0UG9sbFBlcmlvZChwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RMb2NhbExlYWRlclBhcnRpdGlvbklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEFzc2lnbkxpbmtRdWFsaXR5KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90TGlua1NldEFzc2lnbkxpbmtRdWFsaXR5KAorICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAodWludDhfdCopSW5CdWZmZXIsCisgICAgICAgICAgICAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZihvdEV4dEFkZHJlc3MpKSk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90RXh0QWRkcmVzcykgJiYKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RMaW5rR2V0QXNzaWduTGlua1F1YWxpdHkoCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKUluQnVmZmVyLAorICAgICAgICAgICAgICAgICh1aW50OF90KilPdXRCdWZmZXIpCisgICAgICAgICAgICApOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RQbGF0Zm9ybVJlc2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgb3RJbnN0YW5jZVJlc2V0KHBGaWx0ZXItPm90Q3R4KTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290RmFjdG9yeVJlc2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgb3RJbnN0YW5jZUZhY3RvcnlSZXNldChwRmlsdGVyLT5vdEN0eCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBsYXRmb3JtUmVzZXQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyTGVuZ3RoKTsKKworICAgIHN0YXR1cyA9CisgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBTUElORUxfQ01EX1JFU0VULAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290UGFyZW50SW5mbygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKG90Um91dGVySW5mbykgPT0gMjAsICJUaGUgc2l6ZSBvZiBvdFJvdXRlckluZm8gc2hvdWxkIGJlIDIwIGJ5dGVzIik7CisgICAgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90Um91dGVySW5mbykpCisgICAgeworICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RUaHJlYWRHZXRQYXJlbnRJbmZvKHBGaWx0ZXItPm90Q3R4LCAob3RSb3V0ZXJJbmZvKilPdXRCdWZmZXIpKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZihvdFJvdXRlckluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBhcmVudEluZm8oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RSb3V0ZXJJbmZvKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290UGFyZW50SW5mb19IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdFBhcmVudEluZm9fSGFuZGxlcigKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICBpZiAoS2V5ID09IFNQSU5FTF9QUk9QX1RIUkVBRF9QQVJFTlQpCisgICAgeworICAgICAgICBvdFJvdXRlckluZm8qIGFSb3V0ZXJJbmZvID0gKG90Um91dGVySW5mbyopT3V0QnVmZmVyOworICAgICAgICBSdGxaZXJvTWVtb3J5KGFSb3V0ZXJJbmZvLCBzaXplb2Yob3RSb3V0ZXJJbmZvKSk7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCAiRVMiLCAmYVJvdXRlckluZm8tPm1FeHRBZGRyZXNzLm04LCAmYVJvdXRlckluZm8tPm1SbG9jMTYpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTaW5nbGV0b24oCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlcik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihJbkJ1ZmZlckxlbmd0aCk7CisKKyAgICBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoQk9PTEVBTikpCisgICAgeworICAgICAgICAqKEJPT0xFQU4qKU91dEJ1ZmZlciA9IG90VGhyZWFkSXNTaW5nbGV0b24ocEZpbHRlci0+b3RDdHgpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RNYWNDb3VudGVycygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKworICAgIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE1hY0NvdW50ZXJzKSkKKyAgICB7CisgICAgICAgIG1lbWNweV9zKE91dEJ1ZmZlciwgKk91dEJ1ZmZlckxlbmd0aCwgb3RMaW5rR2V0Q291bnRlcnMocEZpbHRlci0+b3RDdHgpLCBzaXplb2Yob3RNYWNDb3VudGVycykpOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKG90TWFjQ291bnRlcnMpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RNYXhDaGlsZHJlbigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4ocEZpbHRlci0+b3RDdHgsICoodWludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50OF90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZUdW5Jb0N0bF9vdE1heENoaWxkcmVuKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBwSXJwLAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1NFVCwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYLAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBvdEx3ZlR1bklvQ3RsX290TWF4Q2hpbGRyZW5fSGFuZGxlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfR0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9DT1VOVF9NQVgsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RNYXhDaGlsZHJlbl9IYW5kbGVyKAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgIGlmIChLZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX0NPVU5UX01BWCkKKyAgICB7CisgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjayhEYXRhLCBEYXRhTGVuZ3RoLCBTUElORUxfREFUQVRZUEVfVUlOVDhfUywgKHVpbnQ4X3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lclN0YXJ0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoSW5CdWZmZXJMZW5ndGgpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKworICAgIHJldHVybiBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RDb21taXNzaW9uZXJTdGFydChwRmlsdGVyLT5vdEN0eCkpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lclN0b3AoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RDb21taXNzaW9uZXJTdG9wKHBGaWx0ZXItPm90Q3R4KSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEpvaW5lclN0YXJ0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdENvbW1pc3Npb25Db25maWcpKQorICAgIHsKKyAgICAgICAgb3RDb21taXNzaW9uQ29uZmlnICphQ29uZmlnID0gKG90Q29tbWlzc2lvbkNvbmZpZyopSW5CdWZmZXI7CisKKyNkZWZpbmUgSXNOb3ROdWxsVGVybWluYXRlZChidWYpIChzdHJubGVuKGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKQorCisgICAgICAgIGlmIChJc05vdE51bGxUZXJtaW5hdGVkKGFDb25maWctPlBTS2QpIHx8CisgICAgICAgICAgICBJc05vdE51bGxUZXJtaW5hdGVkKGFDb25maWctPlByb3Zpc2lvbmluZ1VybCkgfHwKKyAgICAgICAgICAgIElzTm90TnVsbFRlcm1pbmF0ZWQoYUNvbmZpZy0+VmVuZG9yTmFtZSkgfHwKKyAgICAgICAgICAgIElzTm90TnVsbFRlcm1pbmF0ZWQoYUNvbmZpZy0+VmVuZG9yTW9kZWwpIHx8CisgICAgICAgICAgICBJc05vdE51bGxUZXJtaW5hdGVkKGFDb25maWctPlZlbmRvclN3VmVyc2lvbikgfHwKKyAgICAgICAgICAgIElzTm90TnVsbFRlcm1pbmF0ZWQoYUNvbmZpZy0+VmVuZG9yRGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmNweV9zKHBGaWx0ZXItPm90VmVuZG9yTmFtZSwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yTmFtZSksIGFDb25maWctPlZlbmRvck5hbWUpOworICAgICAgICAgICAgc3RyY3B5X3MocEZpbHRlci0+b3RWZW5kb3JNb2RlbCwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yTW9kZWwpLCBhQ29uZmlnLT5WZW5kb3JNb2RlbCk7CisgICAgICAgICAgICBzdHJjcHlfcyhwRmlsdGVyLT5vdFZlbmRvclN3VmVyc2lvbiwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yU3dWZXJzaW9uKSwgYUNvbmZpZy0+VmVuZG9yU3dWZXJzaW9uKTsKKyAgICAgICAgICAgIHN0cmNweV9zKHBGaWx0ZXItPm90VmVuZG9yRGF0YSwgc2l6ZW9mKHBGaWx0ZXItPm90VmVuZG9yRGF0YSksIGFDb25maWctPlZlbmRvckRhdGEpOworCisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RKb2luZXJTdGFydCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFDb25maWctPlBTS2QsCisgICAgICAgICAgICAgICAgICAgIGFDb25maWctPlByb3Zpc2lvbmluZ1VybCwKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RWZW5kb3JOYW1lLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFZlbmRvck1vZGVsLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFZlbmRvclN3VmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RWZW5kb3JEYXRhWzBdID09ICdcMCcgPyBOVUxMIDogcEZpbHRlci0+b3RWZW5kb3JEYXRhLAorICAgICAgICAgICAgICAgICAgICBvdEx3ZkpvaW5lckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEpvaW5lclN0b3AoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKEluQnVmZmVyTGVuZ3RoKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RKb2luZXJTdG9wKHBGaWx0ZXItPm90Q3R4KSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lclBhbklkUXVlcnkoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKG90SXA2QWRkcmVzcykpCisgICAgeworICAgICAgICB1aW50MTZfdCBhUGFuSWQgPSAqKHVpbnQxNl90KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDMyX3QgYUNoYW5uZWxNYXNrID0gKih1aW50MzJfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MgPSAob3RJcDZBZGRyZXNzKikoSW5CdWZmZXIgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgIGFQYW5JZCwKKyAgICAgICAgICAgICAgICBhQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgb3RMd2ZDb21taXNzaW9uZXJQYW5JZENvbmZsaWN0Q2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQxNl90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFDaGFubmVsTWFzayA9ICoodWludDMyX3QqKUluQnVmZmVyOworICAgICAgICB1aW50OF90IGFDb3VudCA9ICoodWludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHVpbnQxNl90IGFQZXJpb2QgPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiA9ICoodWludDE2X3QqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IChvdElwNkFkZHJlc3MqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQxNl90KSk7CisKKyAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgb3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKAorICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgIGFDaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICBhQ291bnQsCisgICAgICAgICAgICAgICAgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgIGFBZGRyZXNzLAorICAgICAgICAgICAgICAgIG90THdmQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcEZpbHRlcikKKyAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQ4X3QqKUluQnVmZmVyKTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKyAgICBlbHNlIGlmICgqT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgICoodWludDhfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuSW9DdGxfb3RSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBwSXJwLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VULAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiwKKyAgICAgICAgICAgICAgICBzaXplb2YodWludDhfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgKih1aW50OF90KilJbkJ1ZmZlcik7CisgICAgfQorICAgIGVsc2UgaWYgKE91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdFJvdXRlclNlbGVjdGlvbkppdHRlcl9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290Um91dGVyU2VsZWN0aW9uSml0dGVyX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsICh1aW50OF90KilPdXRCdWZmZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RKb2luZXJVZHBQb3J0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgb3RUaHJlYWRTZXRKb2luZXJVZHBQb3J0KHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQxNl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDE2X3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MTZfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDE2X3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFNlbmREaWFnbm9zdGljR2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RJcDZBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MgPSAob3RJcDZBZGRyZXNzKilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhQ291bnQgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IEluQnVmZmVyICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RUaHJlYWRTZW5kRGlhZ25vc3RpY0dldCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICBhVGx2VHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGFDb3VudCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTZW5kRGlhZ25vc3RpY1Jlc2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RJcDZBZGRyZXNzKSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MgPSAob3RJcDZBZGRyZXNzKilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhQ291bnQgPSAqKHVpbnQ4X3QqKShJbkJ1ZmZlciArIHNpemVvZihvdElwNkFkZHJlc3MpKTsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IEluQnVmZmVyICsgc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdElwNkFkZHJlc3MpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RUaHJlYWRTZW5kRGlhZ25vc3RpY1Jlc2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUNvdW50KQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdENvbW1pc3Npb25lckFkZEpvaW5lcigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIGNvbnN0IFVMT05HIGFQU0tkQnVmZmVyTGVuZ3RoID0gSW5CdWZmZXJMZW5ndGggLSBzaXplb2YodWludDhfdCkgLSBzaXplb2Yob3RFeHRBZGRyZXNzKSAtIHNpemVvZih1aW50MzJfdCk7CisKKyAgICAgICAgaWYgKGFQU0tkQnVmZmVyTGVuZ3RoIDw9IE9QRU5USFJFQURfUFNLX01BWF9MRU5HVEggKyAxKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGFFeHRBZGRyZXNzVmFsaWQgPSAqKHVpbnQ4X3QqKUluQnVmZmVyOworICAgICAgICAgICAgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyA9IGFFeHRBZGRyZXNzVmFsaWQgPT0gMCA/IE5VTEwgOiAob3RFeHRBZGRyZXNzKikoSW5CdWZmZXIgKyBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgY2hhciAqYVBTS2QgPSAoY2hhciopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKG90RXh0QWRkcmVzcykpOworICAgICAgICAgICAgdWludDMyX3QgYVRpbWVvdXQgPSAqKHVpbnQzMl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yob3RFeHRBZGRyZXNzKSArIGFQU0tkQnVmZmVyTGVuZ3RoKTsKKworICAgICAgICAgICAgLy8gRW5zdXJlIGFQU0tkIGlzIE5VTEwgdGVybWluYXRlZCBpbiB0aGUgYnVmZmVyCisgICAgICAgICAgICBpZiAoc3RybmxlbihhUFNLZCwgYVBTS2RCdWZmZXJMZW5ndGgpIDwgYVBTS2RCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwgYUV4dEFkZHJlc3MsIGFQU0tkLCBhVGltZW91dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKG90RXh0QWRkcmVzcykpCisgICAgeworICAgICAgICB1aW50OF90IGFFeHRBZGRyZXNzVmFsaWQgPSAqKHVpbnQ4X3QqKUluQnVmZmVyOworICAgICAgICBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzID0gYUV4dEFkZHJlc3NWYWxpZCA9PSAwID8gTlVMTCA6IChvdEV4dEFkZHJlc3MqKShJbkJ1ZmZlciArIHNpemVvZih1aW50OF90KSk7CisgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cyhvdENvbW1pc3Npb25lclJlbW92ZUpvaW5lcigKKyAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LCBhRXh0QWRkcmVzcykpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q29tbWlzc2lvbmVyUHJvdmlzaW9uaW5nVXJsKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihPdXRCdWZmZXIpOworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoIDw9IE9QRU5USFJFQURfUFJPVl9VUkxfTUFYX0xFTkdUSCArIDEpCisgICAgeworICAgICAgICBjaGFyICphUHJvdmlzaW9uaW5nVXJsID0gSW5CdWZmZXJMZW5ndGggPiAxID8gKGNoYXIqKUluQnVmZmVyIDogTlVMTDsKKworICAgICAgICAvLyBFbnN1cmUgYVByb3Zpc2lvbmluZ1VybCBpcyBlbXB0eSBvciBOVUxMIHRlcm1pbmF0ZWQgaW4gdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoYVByb3Zpc2lvbmluZ1VybCA9PSBOVUxMIHx8CisgICAgICAgICAgICBzdHJubGVuKGFQcm92aXNpb25pbmdVcmwsIEluQnVmZmVyTGVuZ3RoKSA8IEluQnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMob3RDb21taXNzaW9uZXJTZXRQcm92aXNpb25pbmdVcmwoCisgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsIGFQcm92aXNpb25pbmdVcmwpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbigKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2Yob3RJcDZBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFDaGFubmVsTWFzayA9ICoodWludDMyX3QqKUluQnVmZmVyOworICAgICAgICB1aW50OF90IGFDb3VudCA9ICoodWludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHVpbnQxNl90IGFQZXJpb2QgPSAqKHVpbnQxNl90KikoSW5CdWZmZXIgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IChvdElwNkFkZHJlc3MqKShJbkJ1ZmZlciArIHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2YodWludDE2X3QpKTsKKworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90SXA2QWRkcmVzcykgKyBzaXplb2YodWludDhfdCkgKyBhQ291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lckFubm91bmNlQmVnaW4oCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICBhQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgIGFDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2VuZEFjdGl2ZUdldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IGFMZW5ndGggPT0gMCA/IE5VTEwgOiBJbkJ1ZmZlciArIHNpemVvZih1aW50OF90KTsKKworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IE5VTEw7CisgICAgICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCArIHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGFBZGRyZXNzID0gKG90SXA2QWRkcmVzcyopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZUdldCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MpCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZklvQ3RsX290U2VuZEFjdGl2ZVNldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSArIHNpemVvZih1aW50OF90KSkKKyAgICB7CisgICAgICAgIGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCA9IChvdE9wZXJhdGlvbmFsRGF0YXNldCopSW5CdWZmZXI7CisgICAgICAgIHVpbnQ4X3QgYUxlbmd0aCA9ICoodWludDhfdCopKEluQnVmZmVyICsgc2l6ZW9mKG90T3BlcmF0aW9uYWxEYXRhc2V0KSk7CisgICAgICAgIFBVQ0hBUiBhVGx2VHlwZXMgPSBhTGVuZ3RoID09IDAgPyBOVUxMIDogSW5CdWZmZXIgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgICAgIG90RGF0YXNldFNlbmRNZ210QWN0aXZlU2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTZW5kUGVuZGluZ0dldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IGFMZW5ndGggPT0gMCA/IE5VTEwgOiBJbkJ1ZmZlciArIHNpemVvZih1aW50OF90KTsKKworICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZBZGRyZXNzICphQWRkcmVzcyA9IE5VTEw7CisgICAgICAgICAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCArIHNpemVvZihvdElwNkFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGFBZGRyZXNzID0gKG90SXA2QWRkcmVzcyopKEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpICsgYUxlbmd0aCk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdERhdGFzZXRTZW5kTWdtdFBlbmRpbmdHZXQoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICBhVGx2VHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGFBZGRyZXNzKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFNlbmRQZW5kaW5nU2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpICsgc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0ID0gKG90T3BlcmF0aW9uYWxEYXRhc2V0KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KikoSW5CdWZmZXIgKyBzaXplb2Yob3RPcGVyYXRpb25hbERhdGFzZXQpKTsKKyAgICAgICAgUFVDSEFSIGFUbHZUeXBlcyA9IGFMZW5ndGggPT0gMCA/IE5VTEwgOiBJbkJ1ZmZlciArIHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdE9wZXJhdGlvbmFsRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgYUxlbmd0aCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RTZW5kTWdtdENvbW1pc3Npb25lckdldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKE91dEJ1ZmZlcik7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgIHsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KilJbkJ1ZmZlcjsKKyAgICAgICAgUFVDSEFSIGFUbHZzID0gYUxlbmd0aCA9PSAwID8gTlVMTCA6IEluQnVmZmVyICsgc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkgKyBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldCgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RDdHgsCisgICAgICAgICAgICAgICAgICAgIGFUbHZzLAorICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFNlbmRNZ210Q29tbWlzc2lvbmVyU2V0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBjb25zdCBvdENvbW1pc3Npb25pbmdEYXRhc2V0ICphRGF0YXNldCA9IChvdENvbW1pc3Npb25pbmdEYXRhc2V0KilJbkJ1ZmZlcjsKKyAgICAgICAgdWludDhfdCBhTGVuZ3RoID0gKih1aW50OF90KikoSW5CdWZmZXIgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkpOworICAgICAgICBQVUNIQVIgYVRsdnMgPSBhTGVuZ3RoID09IDAgPyBOVUxMIDogSW5CdWZmZXIgKyBzaXplb2Yob3RDb21taXNzaW9uaW5nRGF0YXNldCkgKyBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihvdENvbW1pc3Npb25pbmdEYXRhc2V0KSArIHNpemVvZih1aW50OF90KSArIGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFRocmVhZEVycm9yVG9OdHN0YXR1cygKKyAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lclNlbmRNZ210U2V0KAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdEN0eCwKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgIGFUbHZzLAorICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdEtleVN3aXRjaEd1YXJkdGltZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKHBGaWx0ZXItPm90Q3R4LCAqKHVpbnQzMl90KilJbkJ1ZmZlcik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoKk91dEJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDMyX3QpKQorICAgIHsKKyAgICAgICAgKih1aW50MzJfdCopT3V0QnVmZmVyID0gb3RUaHJlYWRHZXRLZXlTd2l0Y2hHdWFyZFRpbWUocEZpbHRlci0+b3RDdHgpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U3dpdGNoR3VhcmR0aW1lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICAgICAgcElycCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKHVpbnQzMl90KSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgcElycCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9TRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FLAorICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCksCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICoodWludDMyX3QqKUluQnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoT3V0QnVmZmVyTGVuZ3RoID49IHNpemVvZih1aW50MzJfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZUdW5TZW5kQ29tbWFuZEZvcklycCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIHBJcnAsCisgICAgICAgICAgICAgICAgb3RMd2ZUdW5Jb0N0bF9vdEtleVN3aXRjaEd1YXJkdGltZV9IYW5kbGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1bklvQ3RsX290S2V5U3dpdGNoR3VhcmR0aW1lX0hhbmRsZXIoCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBLZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyhEYXRhTGVuZ3RoKSBjb25zdCB1aW50OF90KiBEYXRhLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCBEYXRhTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgaWYgKEtleSA9PSBTUElORUxfUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUpCisgICAgeworICAgICAgICBpZiAodHJ5X3NwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLCAodWludDMyX3QqKU91dEJ1ZmZlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RUaHJlYWRBdXRvU3RhcnQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEluQnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFVDSEFSICAgICAgICAgIEluQnVmZmVyLAorICAgIF9Jbl8gICAgVUxPTkcgICAgICAgICAgIEluQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXygqT3V0QnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAgUFZPSUQgICAgICAgICAgIE91dEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworCisgICAgaWYgKEluQnVmZmVyTGVuZ3RoID49IHNpemVvZihCT09MRUFOKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICBUaHJlYWRFcnJvclRvTnRzdGF0dXMoCisgICAgICAgICAgICAgICAgb3RUaHJlYWRTZXRBdXRvU3RhcnQoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICAqKEJPT0xFQU4qKUluQnVmZmVyICE9IEZBTFNFKQorICAgICAgICAgICAgKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKEJPT0xFQU4pKQorICAgIHsKKyAgICAgICAgKihCT09MRUFOKilPdXRCdWZmZXIgPSBvdFRocmVhZEdldEF1dG9TdGFydChwRmlsdGVyLT5vdEN0eCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoQk9PTEVBTik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqT3V0QnVmZmVyTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bF9vdFRocmVhZFByZWZlcnJlZFJvdXRlcklkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKworICAgICpPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoT3V0QnVmZmVyKTsKKworICAgIGlmIChJbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YodWludDhfdCkpCisgICAgeworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgVGhyZWFkRXJyb3JUb050c3RhdHVzKAorICAgICAgICAgICAgICAgIG90VGhyZWFkU2V0UHJlZmVycmVkUm91dGVySWQoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXItPm90Q3R4LAorICAgICAgICAgICAgICAgICAgICAqKHVpbnQ4X3QqKUluQnVmZmVyICE9IEZBTFNFKQorICAgICAgICAgICAgKTsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmSW9DdGxfb3RQYXJlbnRQcmlvcml0eSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisKKyAgICBpZiAoSW5CdWZmZXJMZW5ndGggPj0gc2l6ZW9mKGludDhfdCkpCisgICAgeworICAgICAgICBvdFRocmVhZFNldFBhcmVudFByaW9yaXR5KHBGaWx0ZXItPm90Q3R4LCAqKGludDhfdCopSW5CdWZmZXIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCpPdXRCdWZmZXJMZW5ndGggPj0gc2l6ZW9mKGludDhfdCkpCisgICAgeworICAgICAgICAqKHVpbnQxNl90KilPdXRCdWZmZXIgPSBvdFRocmVhZEdldFBhcmVudFByaW9yaXR5KHBGaWx0ZXItPm90Q3R4KTsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICpPdXRCdWZmZXJMZW5ndGggPSBzaXplb2YoaW50OF90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKk91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2lvY29udHJvbC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL2lvY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWI3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvaW9jb250cm9sLmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0lPQ09OVFJPTF9ICisjZGVmaW5lIF9JT0NPTlRST0xfSAorCisvLworLy8gRnVuY3Rpb24gcHJvdG90eXBlIGZvciBnZW5lcmFsIElvIENvbnRyb2wgZnVuY3Rpb25zCisvLworCit0eXBlZGVmIAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK09UTFdGX0lPQ1RMX0ZVTkMoCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc18oKk91dEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBWT0lEICAgICAgICAgICBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICAgICAgT3V0QnVmZmVyTGVuZ3RoCisgICAgKTsKKworLy8KKy8vIEdlbmVyYWwgSW8gQ29udHJvbCBGdW5jdGlvbnMKKy8vCisKKy8vIEhhbmRsZXMgcXVlcmllcyBmb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBUaHJlYWQgaW50ZXJmYWNlcworT1RMV0ZfSU9DVExfRlVOQyBvdEx3ZklvQ3RsRW51bWVyYXRlSW50ZXJmYWNlczsKKworLy8gSGFuZGxlcyBxdWVyaWVzIGZvciB0aGUgZGV0YWlscyBvZiBhIHNwZWNpZmljIFRocmVhZCBpbnRlcmZhY2UKK09UTFdGX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bFF1ZXJ5SW50ZXJmYWNlOworCisvLyBIYW5kbGVzIElPVENMcyBmb3IgT3BlblRocmVhZCBjb250cm9sCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZJb0N0bE9wZW5UaHJlYWRDb250cm9sKAorICAgIF9Jbl8gUElSUCBJcnAKKyAgICApOworCisvLyBIYW5kbGVzIElycCBmb3IgSU9UQ0xzIGZvciBPcGVuVGhyZWFkIGNvbnRyb2wgb24gdGhlIE9wZW5UaHJlYWQgdGhyZWFkCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkNvbXBsZXRlT3BlblRocmVhZElycCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQICAgICAgICAgICBJcnAKKyAgICApOworCisvLyBIZWxwZXIgZm9yIGNvbnZlcnRpbmcgSW9DdGwgdG8gc3RyaW5nCitjb25zdCBjaGFyKgorSW9DdGxTdHJpbmcoCisgICAgVUxPTkcgSW9Db250cm9sQ29kZQorICAgICk7CisKKy8vCisvLyBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIE9wZW5UaHJlYWQgSW8gQ29udHJvbCBmdW5jdGlvbnMKKy8vCisKK3R5cGVkZWYgCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworT1RMV0ZfT1RfSU9DVExfRlVOQygKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl9yZWFkc19ieXRlc18oSW5CdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVUNIQVIgICAgICAgICAgSW5CdWZmZXIsCisgICAgX0luXyAgICBVTE9ORyAgICAgICAgICAgSW5CdWZmZXJMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCAgICAgICAgICAgT3V0QnVmZmVyLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgICAgIE91dEJ1ZmZlckxlbmd0aAorICAgICk7CisKK3R5cGVkZWYgCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworT1RMV0ZfVFVOX0lPQ1RMX0ZVTkMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgICAgICAgICBJcnAsCisgICAgX0luX3JlYWRzX2J5dGVzXyhJbkJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgICAgICBJbkJ1ZmZlciwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBJbkJ1ZmZlckxlbmd0aCwKKyAgICBfSW5fICAgIFVMT05HICAgICAgICAgICBPdXRCdWZmZXJMZW5ndGgKKyAgICApOworCit0eXBlZGVmCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKKyhTUElORUxfSVJQX0NNRF9IQU5ETEVSKSgKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERhdGFMZW5ndGgpIGNvbnN0IHVpbnQ4X3QqIERhdGEsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IERhdGFMZW5ndGgsCisgICAgX091dF93cml0ZXNfYnl0ZXNfKCpPdXRCdWZmZXJMZW5ndGgpCisgICAgICAgICAgICBQVk9JRCBPdXRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgT3V0QnVmZmVyTGVuZ3RoCisgICAgKTsKKworI2RlZmluZSBERUNMX0lPQ1RMX0ZVTkMoWCkgXAorICAgIE9UTFdGX09UX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bF8jI1gKKworI2RlZmluZSBERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4oWCkgXAorICAgIE9UTFdGX09UX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bF8jI1g7IFwKKyAgICBPVExXRl9UVU5fSU9DVExfRlVOQyBvdEx3ZlR1bklvQ3RsXyMjWAorCisjZGVmaW5lIERFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIoWCkgXAorICAgIE9UTFdGX09UX0lPQ1RMX0ZVTkMgb3RMd2ZJb0N0bF8jI1g7IFwKKyAgICBPVExXRl9UVU5fSU9DVExfRlVOQyBvdEx3ZlR1bklvQ3RsXyMjWDsgXAorICAgIFNQSU5FTF9JUlBfQ01EX0hBTkRMRVIgb3RMd2ZUdW5Jb0N0bF8jI1gjI19IYW5kbGVyCisKKyNkZWZpbmUgUkVGX0lPQ1RMX0ZVTkMoWCkgb3RMd2ZJb0N0bF8jI1ggLCBOVUxMCisKKyNkZWZpbmUgUkVGX0lPQ1RMX0ZVTkNfV0lUSF9UVU4oWCkgb3RMd2ZJb0N0bF8jI1ggLCBvdEx3ZlR1bklvQ3RsXyMjWAorCitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90SW50ZXJmYWNlKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RUaHJlYWQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdEFjdGl2ZVNjYW4pOworREVDTF9JT0NUTF9GVU5DKG90RGlzY292ZXIpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdENoYW5uZWwpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdENoaWxkVGltZW91dCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90RXh0ZW5kZWRBZGRyZXNzKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RFeHRlbmRlZFBhbklkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RMZWFkZXJSbG9jKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RMaW5rTW9kZSk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TWFzdGVyS2V5KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RNZXNoTG9jYWxFaWQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdE1lc2hMb2NhbFByZWZpeCk7CisvL0RFQ0xfSU9DVExfRlVOQyhvdE5ldHdvcmtEYXRhTGVhZGVyKTsKKy8vREVDTF9JT0NUTF9GVU5DKG90TmV0d29ya0RhdGFMb2NhbCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TmV0d29ya05hbWUpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdFBhbklkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RSb3V0ZXJSb2xsRW5hYmxlZCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90U2hvcnRBZGRyZXNzKTsKK0RFQ0xfSU9DVExfRlVOQyhvdEFjdGl2ZURhdGFzZXQpOworREVDTF9JT0NUTF9GVU5DKG90UGVuZGluZ0RhdGFzZXQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdExvY2FsTGVhZGVyV2VpZ2h0KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFkZEJvcmRlclJvdXRlcik7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVCb3JkZXJSb3V0ZXIpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOKG90QWRkRXh0ZXJuYWxSb3V0ZSk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVFeHRlcm5hbFJvdXRlKTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRTZXJ2ZXJEYXRhKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RDb250ZXh0SWRSZXVzZURlbGF5KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RLZXlTZXF1ZW5jZUNvdW50ZXIpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdE5ldHdvcmtJZFRpbWVvdXQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOKG90UmVsZWFzZVJvdXRlcklkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RNYWNXaGl0ZWxpc3RFbmFibGVkKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTihvdEFkZE1hY1doaXRlbGlzdCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4ob3RSZW1vdmVNYWNXaGl0ZWxpc3QpOworREVDTF9JT0NUTF9GVU5DKG90TWFjV2hpdGVsaXN0RW50cnkpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOKG90Q2xlYXJNYWNXaGl0ZWxpc3QpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdERldmljZVJvbGUpOworREVDTF9JT0NUTF9GVU5DKG90Q2hpbGRJbmZvQnlJZCk7CitERUNMX0lPQ1RMX0ZVTkMob3RDaGlsZEluZm9CeUluZGV4KTsKK0RFQ0xfSU9DVExfRlVOQyhvdEVpZENhY2hlRW50cnkpOworREVDTF9JT0NUTF9GVU5DKG90TGVhZGVyRGF0YSk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TGVhZGVyUm91dGVySWQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdExlYWRlcldlaWdodCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90TmV0d29ya0RhdGFWZXJzaW9uKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RQYXJ0aXRpb25JZCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90UmxvYzE2KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFJvdXRlcklkU2VxdWVuY2UpOworREVDTF9JT0NUTF9GVU5DKG90Um91dGVySW5mbyk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90U3RhYmxlTmV0d29ya0RhdGFWZXJzaW9uKTsKK0RFQ0xfSU9DVExfRlVOQyhvdE1hY0JsYWNrbGlzdEVuYWJsZWQpOworREVDTF9JT0NUTF9GVU5DKG90QWRkTWFjQmxhY2tsaXN0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFJlbW92ZU1hY0JsYWNrbGlzdCk7CitERUNMX0lPQ1RMX0ZVTkMob3RNYWNCbGFja2xpc3RFbnRyeSk7CitERUNMX0lPQ1RMX0ZVTkMob3RDbGVhck1hY0JsYWNrbGlzdCk7CitERUNMX0lPQ1RMX0ZVTkMob3RNYXhUcmFuc21pdFBvd2VyKTsKK0RFQ0xfSU9DVExfRlVOQyhvdE5leHRPbk1lc2hQcmVmaXgpOworREVDTF9JT0NUTF9GVU5DKG90UG9sbFBlcmlvZCk7CitERUNMX0lPQ1RMX0ZVTkMob3RMb2NhbExlYWRlclBhcnRpdGlvbklkKTsKK0RFQ0xfSU9DVExfRlVOQyhvdEFzc2lnbkxpbmtRdWFsaXR5KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTihvdFBsYXRmb3JtUmVzZXQpOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdFBhcmVudEluZm8pOworREVDTF9JT0NUTF9GVU5DKG90U2luZ2xldG9uKTsKK0RFQ0xfSU9DVExfRlVOQyhvdE1hY0NvdW50ZXJzKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RNYXhDaGlsZHJlbik7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJTdGFydCk7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJTdG9wKTsKK0RFQ0xfSU9DVExfRlVOQyhvdEpvaW5lclN0YXJ0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdEpvaW5lclN0b3ApOworREVDTF9JT0NUTF9GVU5DKG90RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdEhhc2hNYWNBZGRyZXNzKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQpOworREVDTF9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeSk7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuKTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIpOworREVDTF9JT0NUTF9GVU5DKG90Sm9pbmVyVWRwUG9ydCk7CitERUNMX0lPQ1RMX0ZVTkMob3RTZW5kRGlhZ25vc3RpY0dldCk7CitERUNMX0lPQ1RMX0ZVTkMob3RTZW5kRGlhZ25vc3RpY1Jlc2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdENvbW1pc3Npb25lckFkZEpvaW5lcik7CitERUNMX0lPQ1RMX0ZVTkMob3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIpOworREVDTF9JT0NUTF9GVU5DKG90Q29tbWlzc2lvbmVyUHJvdmlzaW9uaW5nVXJsKTsKK0RFQ0xfSU9DVExfRlVOQyhvdENvbW1pc3Npb25lckFubm91bmNlQmVnaW4pOworREVDTF9JT0NUTF9GVU5DX1dJVEhfVFVOMihvdEVuZXJneVNjYW4pOworREVDTF9JT0NUTF9GVU5DKG90U2VuZEFjdGl2ZUdldCk7CitERUNMX0lPQ1RMX0ZVTkMob3RTZW5kQWN0aXZlU2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRQZW5kaW5nR2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRQZW5kaW5nU2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRNZ210Q29tbWlzc2lvbmVyR2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFNlbmRNZ210Q29tbWlzc2lvbmVyU2V0KTsKK0RFQ0xfSU9DVExfRlVOQ19XSVRIX1RVTjIob3RLZXlTd2l0Y2hHdWFyZHRpbWUpOworREVDTF9JT0NUTF9GVU5DKG90RmFjdG9yeVJlc2V0KTsKK0RFQ0xfSU9DVExfRlVOQyhvdFRocmVhZEF1dG9TdGFydCk7CitERUNMX0lPQ1RMX0ZVTkMob3RUaHJlYWRQcmVmZXJyZWRSb3V0ZXJJZCk7CitERUNMX0lPQ1RMX0ZVTkNfV0lUSF9UVU4yKG90UFNLYyk7CitERUNMX0lPQ1RMX0ZVTkMob3RQYXJlbnRQcmlvcml0eSk7CisKKyNlbmRpZiAvLyBfSU9DT05UUk9MX0gKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9uc2loZWxwZXIuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9uc2loZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzgzMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL25zaWhlbHBlci5oCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdmFyaW91cyB0eXBlcyBhbmQgZnVuY3Rpb24gcmVxdWlyZWQgdG8gdXNlIE5TSSB0bworICogIHF1ZXJ5IGFuIGludGVyZmFjZSdzIGNvbXBhcnRtZW50IElELgorICovCisKKyNpZm5kZWYgX05TSV9IRUxQRVJfSAorI2RlZmluZSBfTlNJX0hFTFBFUl9ICisKKyNkZWZpbmUgTlNJU1RBVFVTIE5UU1RBVFVTCisKK3R5cGVkZWYgZW51bSBfTlNJX1NUT1JFIHsKKyAgICBOc2lQZXJzaXN0ZW50LAorICAgIC8vIFBlcnNpc3RzIGFzIGxvbmcgYXMgbW9kdWxlIGV4aXN0cy4KKyAgICBOc2lBY3RpdmUsCisgICAgTnNpQm90aCwKKyAgICBOc2lDdXJyZW50LAorICAgIE5zaUJvb3RGaXJtd2FyZVRhYmxlCit9IE5TSV9TVE9SRTsKKwordHlwZWRlZiBlbnVtIF9OU0lfU0VUX0FDVElPTiB7ICAKKyAgICBOc2lTZXREZWZhdWx0LCAgCisgICAgTnNpU2V0Q3JlYXRlT25seSwgIAorICAgIE5zaVNldENyZWF0ZU9yU2V0LCAgCisgICAgTnNpU2V0RGVsZXRlLCAgCisgICAgTnNpU2V0UmVzZXQsICAKKyAgICBOc2lTZXRDbGVhciwgIAorICAgIE5zaVNldENyZWF0ZU9yU2V0V2l0aFJlZmVyZW5jZSwgIAorICAgIE5zaVNldERlbGV0ZVdpdGhSZWZlcmVuY2UsICAKK30gTlNJX1NFVF9BQ1RJT047ICAKKwordHlwZWRlZiBlbnVtIF9OU0lfU1RSVUNUX1RZUEUgeworICAgIE5zaVN0cnVjdFJ3LAorICAgIE5zaVN0cnVjdFJvRHluYW1pYywKKyAgICBOc2lTdHJ1Y3RSb1N0YXRpYywKKyAgICBOc2lNYXhpbXVtU3RydWN0VHlwZQorfSBOU0lfU1RSVUNUX1RZUEU7CisKK3R5cGVkZWYgc3RydWN0IF9OTF9JTlRFUkZBQ0VfS0VZIHsgIAorICAgIElGX0xVSUQgTHVpZDsgIAorfSBOTF9JTlRFUkZBQ0VfS0VZLCAqUE5MX0lOVEVSRkFDRV9LRVk7ICAKKwordHlwZWRlZiBlbnVtIF9OTF9UWVBFX09GX0lOVEVSRkFDRSB7ICAKKyAgICBJbnRlcmZhY2VBbGxvd0FsbCA9IDAsICAKKyAgICBJbnRlcmZhY2VEaXNhbGxvd1VuaWNhc3QsICAKKyAgICBJbnRlcmZhY2VEaXNhbGxvd011bHRpY2FzdCwgIAorICAgIEludGVyZmFjZURpc2FsbG93QWxsLCAgCisgICAgSW50ZXJmYWNlVW5jaGFuZ2VkID0gLTEgIAorfSBOTF9UWVBFX09GX0lOVEVSRkFDRTsgIAorICAKK3R5cGVkZWYgZW51bSBfTkxfRE9NQUlOX05FVFdPUktfTE9DQVRJT04geyAgCisgICAgRG9tYWluTmV0d29ya0xvY2F0aW9uUmVtb3RlID0gMCwgICAvLyBjb25uZWN0IHRvIGEgZG9tYWluIG5ldHdvcmsgcmVtb3RlbHkgdmlhIERBIGkuZS4gb3V0c2lkZSBjb3JwIG5ldHdvcmsuICAKKyAgICBEb21haW5OZXR3b3JrQ2F0ZWdvcnlMaW5rID0gMSwgICAgIC8vIGNvbm5lY3QgdG8gYSBkb21haW4gbmV0d29yayBkaXJlY3RseSBpLmUuIGluc2lkZSBjb3JwIG5ldHdvcmsuICAKKyAgICBEb21haW5OZXR3b3JrVW5jaGFuZ2VkID0gLTEgIAorfSBOTF9ET01BSU5fTkVUV09SS19MT0NBVElPTjsgIAorICAKK3R5cGVkZWYgZW51bSBfTkxfRE9NQUlOX1RZUEUgeyAgCisgICAgRG9tYWluVHlwZU5vbkRvbWFpbk5ldHdvcmsgPSAwLCAgICAvLyBjb25uZWN0ZWQgdG8gbm9uLWRvbWFpbiBuZXR3b3JrLiAgCisgICAgRG9tYWluVHlwZURvbWFpbk5ldHdvcmsgPSAxLCAgICAgICAvLyBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHRoYXQgaGFzIGFjdGl2ZSBkaXJlY3RvcnkuICAKKyAgICBEb21haW5UeXBlRG9tYWluQXV0aGVudGljYXRlZCA9IDIsIC8vIGNvbm5lY3RlZCB0byBBRCBuZXR3b3JrIGFuZCBtYWNoaW5lIGlzIGF1dGhlbnRpY2F0ZWQgYWdhaW5zdCBpdC4gIAorICAgIERvbWFpblR5cGVVbmNoYW5nZWQgPSAtMSAgCit9IE5MX0RPTUFJTl9UWVBFOyAgCisgIAordHlwZWRlZiBlbnVtIF9OTF9JTlRFUkZBQ0VfRUNOX0NBUEFCSUxJVFkgeyAgCisgICAgTmxJbnRlcmZhY2VFY25VbmNoYW5nZWQgPSAtMSwgIAorICAgIE5sSW50ZXJmYWNlRWNuRGlzYWJsZWQgPSAwLCAgCisgICAgTmxJbnRlcmZhY2VFY25Vc2VFY3QxID0gMSwgIAorICAgIE5sSW50ZXJmYWNlRWNuVXNlRWN0MCA9IDIsICAKKyAgICBObEludGVyZmFjZUVjbkFwcERlY2lkZSA9IDMgIAorfSBOTF9JTlRFUkZBQ0VfRUNOX0NBUEFCSUxJVFksICpQTkxfSU5URVJGQUNFX0VDTl9DQVBBQklMSVRZOyAgCisgIAordHlwZWRlZiBlbnVtIF9OTF9JTlRFUk5FVF9DT05ORUNUSVZJVFlfU1RBVFVTIHsgIAorICAgIE5sTm9JbnRlcm5ldENvbm5lY3Rpdml0eSwgIAorICAgIE5sTm9JbnRlcm5ldERuc1Jlc29sdXRpb25TdWNjZWVkZWQsICAKKyAgICBObEludGVybmV0Q29ubmVjdGl2aXR5RGV0ZWN0ZWQsICAKKyAgICBObEludGVybmV0Q29ubmVjdGl2aXR5VW5rbm93biA9IC0xICAKK30gTkxfSU5URVJORVRfQ09OTkVDVElWSVRZX1NUQVRVUywgKlBOTF9JTlRFUk5FVF9DT05ORUNUSVZJVFlfU1RBVFVTOyAgCisKK3R5cGVkZWYgdW5pb24gX0lQX0FERFJFU1NfU1RPUkFHRSB7ICAKKyAgICBJTl9BRERSIElwdjQ7ICAKKyAgICBJTjZfQUREUiBJcHY2OyAgCisgICAgVUNIQVIgQnVmZmVyW3NpemVvZihJTjZfQUREUildOyAgCit9IElQX0FERFJFU1NfU1RPUkFHRSwgKlBJUF9BRERSRVNTX1NUT1JBR0U7ICAKKwordHlwZWRlZiBzdHJ1Y3QgX05MX0lOVEVSRkFDRV9SVyB7ICAKKyAgICBCT09MRUFOIEFkdmVydGlzaW5nRW5hYmxlZDsgIAorICAgIEJPT0xFQU4gRm9yd2FyZGluZ0VuYWJsZWQ7ICAKKyAgICBCT09MRUFOIE11bHRpY2FzdEZvcndhcmRpbmdFbmFibGVkOyAgCisgICAgQk9PTEVBTiBXZWFrSG9zdFNlbmQ7ICAKKyAgICBCT09MRUFOIFdlYWtIb3N0UmVjZWl2ZTsgIAorICAgIEJPT0xFQU4gVXNlTmVpZ2hib3JVbnJlYWNoYWJpbGl0eURldGVjdGlvbjsgIAorICAgIEJPT0xFQU4gVXNlQXV0b21hdGljTWV0cmljOworICAgIEJPT0xFQU4gVXNlWmVyb0Jyb2FkY2FzdEFkZHJlc3M7ICAKKyAgICBCT09MRUFOIFVzZUJyb2FkY2FzdEZvclJvdXRlckRpc2NvdmVyeTsgIAorICAgIEJPT0xFQU4gRGhjcFJvdXRlckRpc2NvdmVyeUVuYWJsZWQ7ICAKKyAgICBCT09MRUFOIE1hbmFnZWRBZGRyZXNzQ29uZmlndXJhdGlvblN1cHBvcnRlZDsgIAorICAgIEJPT0xFQU4gT3RoZXJTdGF0ZWZ1bENvbmZpZ3VyYXRpb25TdXBwb3J0ZWQ7ICAKKyAgICBCT09MRUFOIEFkdmVydGlzZURlZmF1bHRSb3V0ZTsgIAorICAgIE5MX05FVFdPUktfQ0FURUdPUlkgTmV0d29ya0NhdGVnb3J5OyAgCisgICAgTkxfUk9VVEVSX0RJU0NPVkVSWV9CRUhBVklPUiBSb3V0ZXJEaXNjb3ZlcnlCZWhhdmlvcjsgIAorICAgIE5MX1RZUEVfT0ZfSU5URVJGQUNFIFR5cGVPZkludGVyZmFjZTsgIAorICAgIFVMT05HIE1ldHJpYzsgIAorICAgIFVMT05HIEJhc2VSZWFjaGFibGVUaW1lOyAgICAvLyBCYXNlIGZvciByYW5kb20gUmVhY2hhYmxlVGltZSAoaW4gbXMpLiAgCisgICAgVUxPTkcgUmV0cmFuc21pdFRpbWU7ICAgICAgIC8vIE5laWdoYm9yIFNvbGljaXRhdGlvbiB0aW1lb3V0IChpbiBtcykuICAKKyAgICBVTE9ORyBQYXRoTXR1RGlzY292ZXJ5VGltZW91dDsgLy8gUGF0aCBNVFUgZGlzY292ZXJ5IHRpbWVvdXQgKGluIG1zKS4gIAorICAgIFVMT05HIERhZFRyYW5zbWl0czsgICAgICAgICAvLyBEdXBBZGRyRGV0ZWN0VHJhbnNtaXRzIGluIFJGQyAyNDYyLiAgCisgICAgTkxfTElOS19MT0NBTF9BRERSRVNTX0JFSEFWSU9SIExpbmtMb2NhbEFkZHJlc3NCZWhhdmlvcjsgIAorICAgIFVMT05HIExpbmtMb2NhbEFkZHJlc3NUaW1lb3V0OyAvLyBJbiBtcy4gIAorICAgIFVMT05HIFpvbmVJbmRpY2VzW1Njb3BlTGV2ZWxDb3VudF07IC8vIFpvbmUgcGFydCBvZiBhIFNDT1BFX0lELiAgCisgICAgVUxPTkcgTmxNdHU7ICAKKyAgICBVTE9ORyBTaXRlUHJlZml4TGVuZ3RoOyAgCisgICAgVUxPTkcgTXVsdGljYXN0Rm9yd2FyZGluZ0hvcExpbWl0OyAgCisgICAgVUxPTkcgQ3VycmVudEhvcExpbWl0OyAKKyAgICBJUF9BRERSRVNTX1NUT1JBR0UgTGlua0xvY2FsQWRkcmVzczsgIAorICAgIEJPT0xFQU4gRGlzYWJsZURlZmF1bHRSb3V0ZXM7ICAKKyAgICBVTE9ORyBBZHZlcnRpc2VkUm91dGVyTGlmZXRpbWU7ICAKKyAgICBCT09MRUFOIFNlbmRVbnNvbGljaXRlZE5laWdoYm9yQWR2ZXJ0aXNlbWVudE9uRGFkOyAgCisgICAgQk9PTEVBTiBMaW1pdGVkTGlua0Nvbm5lY3Rpdml0eTsgIAorICAgIEJPT0xFQU4gRm9yY2VBUlBORFBhdHRlcm47ICAKKyAgICBCT09MRUFOIEVuYWJsZURpcmVjdE1BQ1BhdHRlcm47ICAKKyAgICBCT09MRUFOIEVuYWJsZVdvbDsgIAorICAgIEJPT0xFQU4gRm9yY2VUdW5uZWxpbmc7ICAKKyAgICBOTF9ET01BSU5fTkVUV09SS19MT0NBVElPTiBEb21haW5OZXR3b3JrTG9jYXRpb247ICAKKyAgICBVTE9OR0xPTkcgUmFuZG9taXplZEVwb2NoOyAgCisgICAgTkxfSU5URVJGQUNFX0VDTl9DQVBBQklMSVRZIEVjbkNhcGFiaWxpdHk7ICAKKyAgICBOTF9ET01BSU5fVFlQRSBEb21haW5UeXBlOyAgCisgICAgR1VJRCBOZXR3b3JrU2lnbmF0dXJlOyAgCisgICAgTkxfSU5URVJORVRfQ09OTkVDVElWSVRZX1NUQVRVUyBJbnRlcm5ldENvbm5lY3Rpdml0eURldGVjdGVkOyAgCisgICAgQk9PTEVBTiBQcm94eURldGVjdGVkOyAgCisgICAgVUxPTkcgRGFkUmV0cmFuc21pdFRpbWU7ICAKKyAgICBCT09MRUFOIFByZWZpeFNoYXJpbmc7ICAKKyAgICBCT09MRUFOIERpc2FibGVVbmNvbnN0cmFpbmVkUm91dGVMb29rdXA7ICAKKyAgICBVTE9ORyBOZXR3b3JrQ29udGV4dDsgIAorICAgIEJPT0xFQU4gUmVzZXRBdXRvY29uZmlndXJhdGlvbk9uT3BlclN0YXR1c0Rvd247ICAgCisgICAgQk9PTEVBTiBDbGFtcE1zc0VuYWJsZWQ7ICAKKyAgCit9IE5MX0lOVEVSRkFDRV9SVywgKlBOTF9JTlRFUkZBQ0VfUlc7ICAKKworX19pbmxpbmUgIAorVk9JRCAgCitObEluaXRpYWxpemVJbnRlcmZhY2VSdyggIAorICAgIElOIE9VVCBQTkxfSU5URVJGQUNFX1JXIFJ3ICAKKyAgICApICAKK3sgIAorICAgIC8vICAKKyAgICAvLyBJbml0aWFsaXplIGFsbCBmaWVsZHMgdG8gdmFsdWVzIHRoYXQgaW5kaWNhdGUgIm5vIGNoYW5nZSIuICAKKyAgICAvLyAgCisgICAgbWVtc2V0KFJ3LCAweGZmLCBzaXplb2YoKlJ3KSk7ICAKKyAgICBSdy0+QmFzZVJlYWNoYWJsZVRpbWUgPSAwOyAgCisgICAgUnctPlJldHJhbnNtaXRUaW1lID0gMDsgIAorICAgIFJ3LT5QYXRoTXR1RGlzY292ZXJ5VGltZW91dCA9IDA7ICAKKyAgICBSdy0+TmxNdHUgPSAwOyAgCisgICAgUnctPkRhZFJldHJhbnNtaXRUaW1lID0gMDsgIAorfSAgCisKK3R5cGVkZWYgZW51bSB7ICAKKyAgICBObEJlc3RSb3V0ZU9iamVjdCwgIAorICAgIE5sQ29tcGFydG1lbnRGb3J3YXJkaW5nT2JqZWN0LCAgCisgICAgTmxDb21wYXJ0bWVudE9iamVjdCwgIAorICAgIE5sQ29udHJvbFByb3RvY29sT2JqZWN0LCAgCisgICAgTmxFY2hvUmVxdWVzdE9iamVjdCwgIAorICAgIE5sRWNob1NlcXVlbmNlUmVxdWVzdE9iamVjdCwgIAorICAgIE5sR2xvYmFsT2JqZWN0LCAgCisgICAgTmxJbnRlcmZhY2VPYmplY3QsICAKKyAgICBObExvY2FsQW55Y2FzdEFkZHJlc3NPYmplY3QsICAKKyAgICBObExvY2FsTXVsdGljYXN0QWRkcmVzc09iamVjdCwgIAorICAgIE5sTG9jYWxVbmljYXN0QWRkcmVzc09iamVjdCwgIAorICAgIE5sTmVpZ2hib3JPYmplY3QsICAKKyAgICBObFBhdGhPYmplY3QsICAKKyAgICBObFBvdGVudGlhbFJvdXRlck9iamVjdCwgIAorICAgIE5sUHJlZml4UG9saWN5T2JqZWN0LCAgCisgICAgTmxQcm94eU5laWdoYm9yT2JqZWN0LCAgCisgICAgTmxSb3V0ZU9iamVjdCwgIAorICAgIE5sU2l0ZVByZWZpeE9iamVjdCwgIAorICAgIE5sU3ViSW50ZXJmYWNlT2JqZWN0LCAgCisgICAgTmxXYWtlVXBQYXR0ZXJuT2JqZWN0LCAgCisgICAgTmxSZXNvbHZlTmVpZ2hib3JPYmplY3QsICAKKyAgICBObFNvcnRBZGRyZXNzZXNPYmplY3QsICAKKyAgICBObE1mZU9iamVjdCwgIAorICAgIE5sTWZlTm90aWZ5T2JqZWN0LCAgCisgICAgTmxJbnRlcmZhY2VIb3BPYmplY3QsICAKKyAgICBObEludGVyZmFjZVVucHJpdmlsZWdlZE9iamVjdCwgIAorICAgIE5sVHVubmVsUGh5c2ljYWxJbnRlcmZhY2VPYmplY3QsICAKKyAgICBObExvY2FsaXR5T2JqZWN0LCAgCisgICAgTmxMb2NhbGl0eURhdGFPYmplY3QsICAKKyAgICBObExvY2FsaXR5UHJpdmF0ZU9iamVjdCwgIAorICAgIE5sTG9jYWxCb3R0bGVuZWNrT2JqZWN0LCAgCisgICAgTmxUaW1lck9iamVjdCwgIAorICAgIE5sRGlzY29ubmVjdEludGVyZmFjZSwgIAorICAgIE5sTWF4aW11bU9iamVjdCAgCit9IE5MX09CSkVDVF9UWVBFLCAqUE5MX09CSkVDVF9UWVBFOyAgCisKK05TSVNUQVRVUworTnNpR2V0UGFyYW1ldGVyKAorICAgIF9faW4gTlNJX1NUT1JFIFN0b3JlLAorICAgIF9faW4gUE5QSV9NT0RVTEVJRCBNb2R1bGVJZCwKKyAgICBfX2luIFVMT05HIE9iamVjdEluZGV4LAorICAgIF9faW5fYmNvdW50X29wdChLZXlTdHJ1Y3RMZW5ndGgpIFBWT0lEIEtleVN0cnVjdCwKKyAgICBfX2luIFVMT05HIEtleVN0cnVjdExlbmd0aCwKKyAgICBfX2luIE5TSV9TVFJVQ1RfVFlQRSBTdHJ1Y3RUeXBlLAorICAgIF9fb3V0X2Jjb3VudChQYXJhbWV0ZXJMZW4pIFBWT0lEIFBhcmFtZXRlciwKKyAgICBfX2luIFVMT05HIFBhcmFtZXRlckxlbiwKKyAgICBfX2luIFVMT05HIFBhcmFtZXRlck9mZnNldAorICAgICk7CisKK05TSVNUQVRVUyAgCitOc2lTZXRBbGxQYXJhbWV0ZXJzKCAgCisgICAgX19pbiBOU0lfU1RPUkUgICAgICBTdG9yZSwgIAorICAgIF9faW4gTlNJX1NFVF9BQ1RJT04gQWN0aW9uLCAgCisgICAgX19pbiBQTlBJX01PRFVMRUlEICBNb2R1bGVJZCwgIAorICAgIF9faW4gVUxPTkcgICAgICAgICAgT2JqZWN0SW5kZXgsICAKKyAgICBfX2luX2Jjb3VudF9vcHQoS2V5U3RydWN0TGVuZ3RoKSBQVk9JRCBLZXlTdHJ1Y3QsICAKKyAgICBfX2luIFVMT05HICAgICAgICAgIEtleVN0cnVjdExlbmd0aCwgIAorICAgIF9faW5fYmNvdW50X29wdChSd1BhcmFtZXRlclN0cnVjdExlbmd0aCkgUFZPSUQgUndQYXJhbWV0ZXJTdHJ1Y3QsICAKKyAgICBfX2luIFVMT05HICAgICAgICAgIFJ3UGFyYW1ldGVyU3RydWN0TGVuZ3RoICAKKyAgICApOyAgCisKK2V4dGVybiBDT05TVCBOUElfTU9EVUxFSUQgTlBJX01TX05ESVNfTU9EVUxFSUQ7CisKK3R5cGVkZWYgZW51bSBfTkRJU19OU0lfT0JKRUNUX0lOREVYCit7CisgICAgTmRpc05zaU9iamVjdEludGVyZmFjZUluZm9ybWF0aW9uLAorICAgIE5kaXNOc2lPYmplY3RJbnRlcmZhY2VFbnVtLAorICAgIE5kaXNOc2lPYmplY3RJbnRlcmZhY2VMb29rVXAsCisgICAgTmRpc05zaU9iamVjdElmUmN2QWRkcmVzcywKKyAgICBOZGlzTnNpT2JqZWN0U3RhY2tJZkVudHJ5LAorICAgIE5kaXNOc2lPYmplY3RJbnZlcnRlZElmU3RhY2tFbnRyeSwKKyAgICBOZGlzTnNpT2JqZWN0TmV0d29yaywKKyAgICBOZGlzTnNpT2JqZWN0Q29tcGFydG1lbnQsCisgICAgTmRpc05zaU9iamVjdFRocmVhZCwKKyAgICBOZGlzTnNpT2JqZWN0U2Vzc2lvbiwKKyAgICBOZGlzTnNpT2JqZWN0SW50ZXJmYWNlUGVyc2lzdCwKKyAgICBOZGlzTnNpT2JqZWN0Q29tcGFydG1lbnRMb29rdXAsCisgICAgTmRpc05zaU9iamVjdEludGVyZmFjZUluZm9ybWF0aW9uUmF3LAorICAgIE5kaXNOc2lPYmplY3RJbnRlcmZhY2VFbnVtUmF3LAorICAgIE5kaXNOc2lPYmplY3RTdGFja0lmRW51bSwKKyAgICBOZGlzTnNpT2JqZWN0SW50ZXJmYWNlSXNvbGF0aW9uSW5mbywKKyAgICBOZGlzTnNpT2JqZWN0Sm9iLAorICAgIE5kaXNOc2lPYmplY3RNYXhpbXVtCit9IE5ESVNfTlNJX09CSkVDVF9JTkRFWCwgKlBORElTX05TSV9PQkpFQ1RfSU5ERVg7CisKK3R5cGVkZWYgc3RydWN0IF9ORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUlcKK3sKKyAgICAvLyBydyBmaWVsZHMKKyAgICBHVUlEICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya0d1aWQ7CisgICAgTkVUX0lGX0FETUlOX1NUQVRVUyAgICAgICAgIGlmQWRtaW5TdGF0dXM7CisgICAgTkRJU19JRl9DT1VOVEVEX1NUUklORyAgICAgIGlmQWxpYXM7CisgICAgTkRJU19JRl9QSFlTSUNBTF9BRERSRVNTICAgIGlmUGh5c0FkZHJlc3M7CisgICAgTkRJU19JRl9DT1VOVEVEX1NUUklORyAgICAgIGlmTDJOZXR3b3JrSW5mbzsKK31ORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUlcsICpQTkRJU19OU0lfSU5URVJGQUNFX0lORk9STUFUSU9OX1JXOworCisjZGVmaW5lIE5ESVNfU0laRU9GX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUldfUkVWSVNJT05fMSAgICAgIFwKKyAgICAgICAgUlRMX1NJWkVPRl9USFJPVUdIX0ZJRUxEKE5ESVNfTlNJX0lOVEVSRkFDRV9JTkZPUk1BVElPTl9SVywgaWZQaHlzQWRkcmVzcykKKwordHlwZWRlZiBORElTX0lOVEVSRkFDRV9JTkZPUk1BVElPTiBORElTX05TSV9JTlRFUkZBQ0VfSU5GT1JNQVRJT05fUk9ELCAqUE5ESVNfTlNJX0lOVEVSRkFDRV9JTkZPUk1BVElPTl9ST0Q7CisKKy8vCisvLyBDb3BpZWQgZnJvbSBuZGlzY29tcC5oCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorRVhQT1JUCitDT01QQVJUTUVOVF9JRAorTmRpc0dldFRocmVhZE9iamVjdENvbXBhcnRtZW50SWQoCisgICAgX0luXyBQRVRIUkVBRCBUaHJlYWRPYmplY3QKKyAgICApOworCitfSVJRTF9yZXF1aXJlc18oUEFTU0lWRV9MRVZFTCkKK0VYUE9SVAorTlRTVEFUVVMKK05kaXNTZXRUaHJlYWRPYmplY3RDb21wYXJ0bWVudElkKAorICAgIF9Jbl8gUEVUSFJFQUQgVGhyZWFkT2JqZWN0LAorICAgIF9Jbl8gTkVUX0lGX0NPTVBBUlRNRU5UX0lEIENvbXBhcnRtZW50SWQKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorX19pbmxpbmUKK0NPTVBBUlRNRU5UX0lECitOZGlzR2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoCisgICAgVk9JRAorICAgICkKK3sKKyAgICByZXR1cm4gTmRpc0dldFRocmVhZE9iamVjdENvbXBhcnRtZW50SWQoUHNHZXRDdXJyZW50VGhyZWFkKCkpOworfQorCitfSVJRTF9yZXF1aXJlc18oUEFTU0lWRV9MRVZFTCkKK19faW5saW5lCitOVFNUQVRVUworTmRpc1NldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKAorICAgIF9Jbl8gQ09NUEFSVE1FTlRfSUQgQ29tcGFydG1lbnRJZAorICAgICkKK3sKKyAgICByZXR1cm4KKyAgICAgICAgTmRpc1NldFRocmVhZE9iamVjdENvbXBhcnRtZW50SWQoUHNHZXRDdXJyZW50VGhyZWFkKCksIENvbXBhcnRtZW50SWQpOworfQorCisjZW5kaWYgLy8gX05TSV9IRUxQRVJfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL290THdmLmluZiBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9vdEx3Zi5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5MGEyNAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9vdEx3Zi5pbmYKQEAgLTAsMCArMSwxMDYgQEAKKzsKKzsgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKzsgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCis7Cis7ICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKzsgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorOyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzsgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCis7ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorOyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCis7ICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworOyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCis7Cis7ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKzsgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKzsgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCis7ICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCis7ICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCis7ICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorOyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCis7ICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorOyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKzsgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCis7ICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKzsKKworW1ZlcnNpb25dCitTaWduYXR1cmUgICAgICAgICAgID0gIiRXaW5kb3dzIE5UJCIKK0NsYXNzICAgICAgICAgICAgICAgPSBOZXRTZXJ2aWNlCitDbGFzc0dVSUQgICAgICAgICAgID0gezREMzZFOTc0LUUzMjUtMTFDRS1CRkMxLTA4MDAyQkUxMDMxOH0KK1Byb3ZpZGVyICAgICAgICAgICAgPSAlT3BlblRocmVhZCUKK0RyaXZlclZlciAgICAgICAgICAgPSAKK1BucExvY2tEb3duICAgICAgICAgPSAxCitDYXRhbG9nRmlsZSAgICAgICAgID0gb3RMd2YuY2F0CisKK1tNYW51ZmFjdHVyZXJdCislT3BlblRocmVhZCUgICAgICAgID0gT3BlblRocmVhZCxOVCRBUkNIJAorCitbT3BlblRocmVhZC5OVCRBUkNIJF0KKyVvdGx3Zi5EZXZpY2VEZXNjJSAgPSBvdGx3Zi5uZGksIG90THdmCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IE9wZW5UaHJlYWQgTkRJUyBGaWx0ZXIgRHJpdmVyCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW290bHdmLm5kaV0KK0NoYXJhY3RlcmlzdGljcyAgICAgPSAweDQwMDAwCitOZXRDZmdJbnN0YW5jZUlkICAgID0gIntCM0EzODQ1QS0xNjRFLTQ3MjctQjEyRS0zMkI4RENFMUY2Q0R9IgorQWRkUmVnICAgICAgICAgICAgICA9IG90bHdmLlJlZworQ29weWZpbGVzICAgICAgICAgICA9IG90THdmLkNvcHlGaWxlcworCitbb3Rsd2YubmRpLlNlcnZpY2VzXQorQWRkU2VydmljZSAgICAgICAgICA9IG90THdmLCAsIG90bHdmLlNlcnZpY2UKKworW290bHdmLm5kaS5SZW1vdmUuU2VydmljZXNdCis7IFRoZSBTUFNWQ0lOU1RfU1RPUFNFUlZJQ0UgZmxhZyBpbnN0cnVjdHMgU0NNIHRvIHN0b3AgdGhlIE5UIHNlcnZpY2UKKzsgYmVmb3JlIHVuaW5zdGFsbGluZyB0aGUgZHJpdmVyLgorRGVsU2VydmljZSAgICAgICAgICA9ICAgb3RMd2YsICAweDIwMCA7IFNQU1ZDSU5TVF9TVE9QU0VSVklDRQorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBPcGVuVGhyZWFkIE5ESVMgRmlsdGVyIENvbW1vbgorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tvdGx3Zi5SZWddCitIS1IsIE5kaSwgICAgICAgICAgICAgICBTZXJ2aWNlLCAgICAgICAgICAgICwgICAgICAgICAgICJvdEx3ZiIKK0hLUiwgTmRpLCAgICAgICAgICAgICAgIENvU2VydmljZXMsICAgICAgICAgMHgwMDAxMDAwMCwgIm90THdmIgorSEtSLCBOZGksICAgICAgICAgICAgICAgRmlsdGVyQ2xhc3MsICAgICAgICAsICAgICAgICAgICBtc19tZWRpdW1fY29udmVydGVyX3RvcAorSEtSLCBOZGksICAgICAgICAgICAgICAgRmlsdGVyVHlwZSwgICAgICAgICAweDAwMDEwMDAxLCAweDAwMDAwMDAyCitIS1IsIE5kaSwgICAgICAgICAgICAgICBGaWx0ZXJSdW5UeXBlLCAgICAgIDB4MDAwMTAwMDEsIDB4MDAwMDAwMDIgICA7T1BUSU9OQUwgZmlsdGVyIAorSEtSLCBOZGlcSW50ZXJmYWNlcywgICAgVXBwZXJSYW5nZSwgICAgICAgICAsICAgICAgICAgICAibm91cHBlciIKK0hLUiwgTmRpXEludGVyZmFjZXMsICAgIExvd2VyUmFuZ2UsICAgICAgICAgLCAgICAgICAgICAgIm5vbG93ZXIiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCAgICBGaWx0ZXJNZWRpYVR5cGVzLCAgICwgICAgICAgICAgICI4MDIuMTUuNCIKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgRHJpdmVyIGFuZCBTZXJ2aWNlIFNlY3Rpb24KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbb3RMd2YuQ29weUZpbGVzXQorb3RMd2Yuc3lzLCwsMgorCitbb3Rsd2YuU2VydmljZV0KK0Rpc3BsYXlOYW1lICAgICAgICAgPSAlb3Rsd2YuU2VydmljZS5EaXNwTmFtZSUKK1NlcnZpY2VUeXBlICAgICAgICAgPSAxIDtTRVJWSUNFX0tFUk5FTF9EUklWRVIKK1N0YXJ0VHlwZSAgICAgICAgICAgPSAxIDtTRVJWSUNFX1NZU1RFTV9TVEFSVAorRXJyb3JDb250cm9sICAgICAgICA9IDEgO1NFUlZJQ0VfRVJST1JfTk9STUFMCitTZXJ2aWNlQmluYXJ5ICAgICAgID0gJTEyJVxvdEx3Zi5zeXMKK0xvYWRPcmRlckdyb3VwICAgICAgPSBORElTCitEZXNjcmlwdGlvbiAgICAgICAgID0gJW90bHdmLkRldmljZURlc2MlCisKK1tTb3VyY2VEaXNrc05hbWVzXQorMSA9ICVvdGx3Zi5EZXZpY2VEZXNjJSwiIiwsCisKK1tTb3VyY2VEaXNrc0ZpbGVzXQorOyBUT0RPOiBJbmNsdWRlIGFueSByZWxhdGVkIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCB3aXRoIHlvdXIgZHJpdmVyLgorb3RMd2Yuc3lzID0gMQorCitbRGVzdGluYXRpb25EaXJzXQorRGVmYXVsdERlc3REaXIgPSAxMgorb3RMd2YuQ29weUZpbGVzID0gMTIKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgTG9jYWxpemFibGUgU3RyaW5ncworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tTdHJpbmdzXQorT3BlblRocmVhZCAgICAgICAgICAgICAgPSAiT3BlblRocmVhZCIKK290bHdmLkRldmljZURlc2MgICAgICAgID0gIk9wZW5UaHJlYWQgTkRJUyBMaWdodFdlaWdodCBGaWx0ZXIiCitvdGx3Zi5TZXJ2aWNlLkRpc3BOYW1lICA9ICJPcGVuVGhyZWFkIE5ESVMgTGlnaHRXZWlnaHQgRmlsdGVyIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3ByZWNvbXAuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9wcmVjb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlYjBkNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9wcmVjb21wLmMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgInByZWNvbXAuaCIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9wcmVjb21wLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcHJlY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZWY5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcHJlY29tcC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBQcmVjb21waWxlZCBoZWFkZXIgZm9yIG90THdmIHByb2plY3QuCisgKi8KKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMSkgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkIDogbmFtZWxlc3Mgc3RydWN0L3VuaW9uCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjA0KSAgLy8gbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOiBub24tY29uc3RhbnQgYWdncmVnYXRlIGluaXRpYWxpemVyCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyODE3NSkgLy8gVGhlICdNYWpvckZ1bmN0aW9uJyBtZW1iZXIgb2YgX0RSSVZFUl9PQkpFQ1Qgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSBhIGRyaXZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgdG8gdGhpcyBtZW1iZXIgbWF5IGJlIHBlcm1pdHRlZCBmb3IgY2VydGFpbiBjbGFzc2VzIG9mIGRyaXZlcnMuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToyODMwMSkgLy8gTm8gYW5ub3RhdGlvbnMgZm9yIGZpcnN0IGRlY2xhcmF0aW9uIG9mICoKKworI2luY2x1ZGUgPG50aWZzLmg+CisjaW5jbHVkZSA8bmRpcy5oPgorI2luY2x1ZGUgPHdkbXNlYy5oPgorI2luY2x1ZGUgPHJ0bHJlZmNvdW50Lmg+CisjaW5jbHVkZSA8bmV0aW9kZWYuaD4KKyNpbmNsdWRlIDxuc2loZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXRpb2FwaS5oPgorI2luY2x1ZGUgPGJjcnlwdC5oPgorCitWT0lEICAKK1J0bENvcHlCdWZmZXJUb01kbCggIAorICAgIF9Jbl9yZWFkc19ieXRlc18oQnl0ZXNUb0NvcHkpIENPTlNUIFZPSUQgKkJ1ZmZlciwgIAorICAgIF9Jbm91dF8gUE1ETCBNZGxDaGFpbiwgIAorICAgIF9Jbl8gU0laRV9UIE1kbE9mZnNldCwgIAorICAgIF9Jbl8gU0laRV9UIEJ5dGVzVG9Db3B5LCAgCisgICAgX091dF8gU0laRV9UKiBCeXRlc0NvcGllZCAgCisgICAgKTsKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkLXdpbmRvd3MtY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGF0YXNldF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3RocmVhZF9mdGQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9pcDYuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3Rhc2tsZXQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvam9pbmVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oPgorI2luY2x1ZGUgPGNvbW1vbi9jb2RlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmctd2luZG93cy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaD4KKyNpbmNsdWRlIDxuY3Avc3BpbmVsLmg+CisKKyNpbmNsdWRlIDxvdEx3ZklvY3RsLmg+CisKKyNpZmRlZiBfS0VSTkVMX01PREUKKyNkZWZpbmUgQ09ERV9TRUcoc2VnbWVudCkgX19kZWNsc3BlYyhjb2RlX3NlZyhzZWdtZW50KSkKKyNlbHNlCisjZGVmaW5lIENPREVfU0VHKHNlZ21lbnQpIAorI2VuZGlmCisKKyNkZWZpbmUgUEFHRUQgQ09ERV9TRUcoIlBBR0UiKSBfSVJRTF9hbHdheXNfZnVuY3Rpb25fbWF4XyhQQVNTSVZFX0xFVkVMKQorI2RlZmluZSBQQUdFRFggQ09ERV9TRUcoIlBBR0UiKQorI2RlZmluZSBJTklUQ09ERSBDT0RFX1NFRygiSU5JVCIpCisKK3R5cGVkZWYgc3RydWN0IF9NU19GSUxURVIgTVNfRklMVEVSLCAqUE1TX0ZJTFRFUjsKKworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKKwordHlwZWRlZiBzdHJ1Y3QgVURQSGVhZGVyCit7CisgICAgVVNIT1JUIFNvdXJjZVBvcnQ7CisgICAgVVNIT1JUIERlc3RpbmF0aW9uUG9ydDsKKyAgICBVU0hPUlQgVG90YWxMZW5ndGg7CisgICAgVVNIT1JUIENoZWNrc3VtOworCit9IFVEUEhlYWRlcjsKKworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8jZGVmaW5lIERFQlVHX1RJTUlORworLy8jZGVmaW5lIERFQlVHX0FMTE9DCisjZGVmaW5lIExPR19CVUZGRVJTCisvLyNkZWZpbmUgRk9SQ0VfU1lOQ0hST05PVVNfUkVDRUlWRQorI2RlZmluZSBDT01NQU5EX0lOSVRfUkVUUlkKKworI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgImlvY29udHJvbC5oIgorI2luY2x1ZGUgInJhZGlvLmgiCisjaW5jbHVkZSAiZmlsdGVyLmgiCisjaW5jbHVkZSAiY29tbWFuZC5oIgorI2luY2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInR1bm5lbC5oIgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmMgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMyNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmMKQEAgLTAsMCArMSw5MzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBsb2dnaW5nIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAicmFkaW8udG1oIgorCit2b2lkIAorTG9nTWFjKAorICAgIF9Jbl8gUENTVFIgc3pEaXIsCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgVUxPTkcgZnJhbWVMZW5ndGgsCisgICAgX0luX3JlYWRzX2J5dGVzXyhmcmFtZUxlbmd0aCkgUFVDSEFSIGZyYW1lCisgICAgKTsKKworY29uc3QgY2hhciBNYWNTZW5kW10gPSAiTUFDX1NFTkQiOworY29uc3QgY2hhciBNYWNSZWN2W10gPSAiTUFDX1JFQ1YiOworCisjZGVmaW5lIExvZ01hY1NlbmQocEZpbHRlciwgZnJhbWVMZW5ndGgsIGZyYW1lKSBMb2dNYWMoTWFjU2VuZCwgcEZpbHRlciwgZnJhbWVMZW5ndGgsIGZyYW1lKQorI2RlZmluZSBMb2dNYWNSZWN2KHBGaWx0ZXIsIGZyYW1lTGVuZ3RoLCBmcmFtZSkgTG9nTWFjKE1hY1JlY3YsIHBGaWx0ZXIsIGZyYW1lTGVuZ3RoLCBmcmFtZSkKKwordm9pZCAKK290UGxhdFJlc2V0KAorICAgIF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgKKyAgICApCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgcmVzZXR0aW5nLi4uIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgKHZvaWQpb3RMd2ZDbWRSZXNldERldmljZShwRmlsdGVyLCBUUlVFKTsKKworICAgIC8vIEZpbmFsaXplIHByZXZpb3VzIE9wZW5UaHJlYWQgaW5zdGFuY2UKKyAgICBvdEx3ZlJlbGVhc2VJbnN0YW5jZShwRmlsdGVyKTsKKworICAgIC8vIFJlc2V0IHJhZGlvIGxheWVyCisgICAgcEZpbHRlci0+b3RSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CisgICAgcEZpbHRlci0+b3RDdXJyZW50TGlzdGVuQ2hhbm5lbCA9IDB4RkY7CisgICAgcEZpbHRlci0+b3RQcm9taXNjdW91cyA9IGZhbHNlOworICAgIHBGaWx0ZXItPm90UGVuZGluZ01hY09mZmxvYWRFbmFibGVkID0gRkFMU0U7CisKKyAgICAvLyBSZWluaXRpYWxpemUgdGhlIE9wZW5UaHJlYWQgbGlicmFyeQorICAgIHBGaWx0ZXItPm90Q2FjaGVkUm9sZSA9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOworICAgIHBGaWx0ZXItPm90Q3R4ID0gb3RJbnN0YW5jZUluaXQocEZpbHRlci0+b3RJbnN0YW5jZUJ1ZmZlciArIHNpemVvZihQTVNfRklMVEVSKSwgJnBGaWx0ZXItPm90SW5zdGFuY2VTaXplKTsKKyAgICBBU1NFUlQocEZpbHRlci0+b3RDdHgpOworCisgICAgLy8gTWFrZSBzdXJlIG91ciBoZWxwZXIgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmlnaHQgcG9pbnRlciBmb3IgdGhlIGZpbHRlciwgZ2l2ZW4gdGhlIG9wZW50aHJlYWQgaW5zdGFuY2UKKyAgICBOVF9BU1NFUlQob3RDdHhUb0ZpbHRlcihwRmlsdGVyLT5vdEN0eCkgPT0gcEZpbHRlcik7CisKKyAgICAvLyBEaXNhYmxlIEljbXAgKHBpbmcpIGhhbmRsaW5nCisgICAgb3RJY21wNlNldEVjaG9FbmFibGVkKHBGaWx0ZXItPm90Q3R4LCBGQUxTRSk7CisKKyAgICAvLyBSZWdpc3RlciBjYWxsYmFja3Mgd2l0aCBPcGVuVGhyZWFkCisgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhwRmlsdGVyLT5vdEN0eCwgb3RMd2ZTdGF0ZUNoYW5nZWRDYWxsYmFjaywgcEZpbHRlcik7CisgICAgb3RJcDZTZXRSZWNlaXZlQ2FsbGJhY2socEZpbHRlci0+b3RDdHgsIG90THdmUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2ssIHBGaWx0ZXIpOworCisgICAgLy8gUXVlcnkgdGhlIGN1cnJlbnQgYWRkcmVzc2VzIGZyb20gVENQSVAgYW5kIGNhY2hlIHRoZW0KKyAgICAodm9pZClvdEx3ZkluaXRpYWxpemVBZGRyZXNzZXMocEZpbHRlcik7CisKKyAgICAvLyBJbml0aWFsemUgbWVkaWEgY29ubmVjdCBzdGF0ZSB0byBkaXNjb25uZWN0ZWQKKyAgICBvdEx3ZkluZGljYXRlTGlua1N0YXRlKHBGaWx0ZXIsIE1lZGlhQ29ubmVjdFN0YXRlRGlzY29ubmVjdGVkKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworb3RQbGF0UmVzZXRSZWFzb24gCitvdFBsYXRHZXRSZXNldFJlYXNvbigKKyAgICBfSW5fIG90SW5zdGFuY2UgKm90Q3R4CisgICAgKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIHBGaWx0ZXItPmNtZFJlc2V0UmVhc29uOworfQorCitWT0lEIAorb3RMd2ZSYWRpb0dldEZhY3RvcnlBZGRyZXNzKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1czsKKyAgICBQVk9JRCBTcGluZWxCdWZmZXIgPSBOVUxMOworICAgIHVpbnQ4X3QgKmh3QWRkcmVzcyA9IE5VTEw7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzLCBzaXplb2YocEZpbHRlci0+b3RGYWN0b3J5QWRkcmVzcykpOworCisgICAgLy8gUXVlcnkgdGhlIE1QIGZvciB0aGUgYWRkcmVzcworICAgIHN0YXR1cyA9CisgICAgICAgIG90THdmQ21kR2V0UHJvcCgKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAmU3BpbmVsQnVmZmVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfSFdBRERSLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAmaHdBZGRyZXNzCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykgfHwgaHdBZGRyZXNzID09IE5VTEwpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkdldCBTUElORUxfUFJPUF9IV0FERFIgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlRfQVNTRVJUKFNwaW5lbEJ1ZmZlcik7CisgICAgbWVtY3B5KCZwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzLCBod0FkZHJlc3MsIHNpemVvZihwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzKSk7CisgICAgRklMVEVSX0ZSRUVfTUVNKFNwaW5lbEJ1ZmZlcik7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgY2FjaGVkIGZhY3RvcnkgRXh0ZW5kZWQgTWFjIEFkZHJlc3M6ICVsbFgiLCAmcEZpbHRlci0+SW50ZXJmYWNlR3VpZCwgcEZpbHRlci0+b3RGYWN0b3J5QWRkcmVzcyk7Cit9CisKK1ZPSUQgCitvdEx3ZlJhZGlvSW5pdCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZVN0YXR1cyA9PSBPVExXRl9ERVZJQ0VfU1RBVFVTX1JBRElPX01PREUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgT3BlblRocmVhZCByYWRpbyBjYXBhYmlsaXR5IGZsYWdzCisgICAgcEZpbHRlci0+b3RSYWRpb0NhcGFiaWxpdGllcyA9IDA7CisgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0FDS19USU1FT1VUKSAhPSAwKQorICAgICAgICBwRmlsdGVyLT5vdFJhZGlvQ2FwYWJpbGl0aWVzIHw9IE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQ7CisgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX01BQ19SRVRSWV9BTkRfQ09MTElTSU9OX0FWT0lEQU5DRSkgIT0gMCkKKyAgICAgICAgcEZpbHRlci0+b3RSYWRpb0NhcGFiaWxpdGllcyB8PSBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVM7CisgICAgaWYgKChwRmlsdGVyLT5EZXZpY2VDYXBhYmlsaXRpZXMgJiBPVExXRl9ERVZJQ0VfQ0FQX1JBRElPX0VORVJHWV9TQ0FOKSAhPSAwKQorICAgICAgICBwRmlsdGVyLT5vdFJhZGlvQ2FwYWJpbGl0aWVzIHw9IE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU47CisKKyAgICBwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKKyAgICBwRmlsdGVyLT5vdEN1cnJlbnRMaXN0ZW5DaGFubmVsID0gMHhGRjsKKyAgICBwRmlsdGVyLT5vdFByb21pc2N1b3VzID0gZmFsc2U7CisKKyAgICBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tUHNkdSA9IHBGaWx0ZXItPm90UmVjZWl2ZU1lc3NhZ2U7CisgICAgcEZpbHRlci0+b3RUcmFuc21pdEZyYW1lLm1Qc2R1ID0gcEZpbHRlci0+b3RUcmFuc21pdE1lc3NhZ2U7CisgICAgCisgICAgcEZpbHRlci0+b3RQZW5kaW5nTWFjT2ZmbG9hZEVuYWJsZWQgPSBGQUxTRTsKKworICAgIC8vIENhY2hlIHRoZSBmYWN0b3J5IGFkZHJlc3MKKyAgICBvdEx3ZlJhZGlvR2V0RmFjdG9yeUFkZHJlc3MocEZpbHRlcik7CisgICAgCisgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQuIiwgcEZpbHRlcik7CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgbWVtY3B5KGFJZWVlRXVpNjQsICZwRmlsdGVyLT5vdEZhY3RvcnlBZGRyZXNzLCBzaXplb2YoVUxPTkdMT05HKSk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50MTZfdCBwYW5pZCkKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworICAgIE5UU1RBVFVTIHN0YXR1czsKKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBzZXQgUGFuSUQ6ICVYIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHBhbmlkKTsKKworICAgIHBGaWx0ZXItPm90UGFuSUQgPSBwYW5pZDsKKworICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQgJiYKKyAgICAgICAgcEZpbHRlci0+b3RQYW5JRCAhPSAweEZGRkYpCisgICAgeworICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklELAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICBwYW5pZAorICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklEIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90ICphZGRyZXNzKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworICAgIHNwaW5lbF9ldWk2NF90IGV4dEFkZHI7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgc2V0IEV4dGVuZGVkIE1hYyBBZGRyZXNzOiAlbGxYIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsICooVUxPTkdMT05HKilhZGRyZXNzKTsKKworICAgIHBGaWx0ZXItPm90RXh0ZW5kZWRBZGRyZXNzID0gKihVTE9OR0xPTkcqKWFkZHJlc3M7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE9UX0VYVF9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGV4dEFkZHIuYnl0ZXNbaV0gPSBhZGRyZXNzWzcgLSBpXTsKKyAgICB9CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfTEFERFIsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICZleHRBZGRyCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlNldCBTUElORUxfUFJPUF9NQUNfMTVfNF9MQUREUiBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIHVpbnQxNl90IGFkZHJlc3MpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICBOVFNUQVRVUyBzdGF0dXM7CisKKyAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiSW50ZXJmYWNlICUhR1VJRCEgc2V0IFNob3J0IE1hYyBBZGRyZXNzOiAlWCIsICZwRmlsdGVyLT5JbnRlcmZhY2VHdWlkLCBhZGRyZXNzKTsKKworICAgIHBGaWx0ZXItPm90U2hvcnRBZGRyZXNzID0gYWRkcmVzczsKKworICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1NBRERSLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICBhZGRyZXNzCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMoX0luXyBvdEluc3RhbmNlICpvdEN0eCwgYm9vbCBhRW5hYmxlKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgcEZpbHRlci0+b3RQcm9taXNjdW91cyA9IChCT09MRUFOKWFFbmFibGU7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1BST01JU0NVT1VTX01PREUsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgIGFFbmFibGUgIT0gMCA/IFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9ORVRXT1JLIDogU1BJTkVMX01BQ19QUk9NSVNDVU9VU19NT0RFX09GRgorICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1BST01JU0NVT1VTX01PREUgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KK30KKworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIHBGaWx0ZXItPm90UmFkaW9TdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA8PSBPVF9SQURJT19TVEFURV9TTEVFUCk7CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA+IE9UX1JBRElPX1NUQVRFX1NMRUVQKSByZXR1cm4gT1RfRVJST1JfQlVTWTsKKworICAgIHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVELAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgIFRSVUUKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVEICh0cnVlKSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorCisgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVAuIiwgcEZpbHRlcik7CisKKyAgICBpZiAocEZpbHRlci0+b3RQYW5JRCAhPSAweEZGRkYpCisgICAgeworICAgICAgICAvLyBJbmRpY2F0ZSBQQU5JRCB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ18xNV80X1BBTklELAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFBhbklECisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW5kaWNhdGUgU2hvcnQgYWRkcmVzcyB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICBwRmlsdGVyLT5vdFNob3J0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgLy8gRmlyc3QgbWFrZSBzdXJlIHdlIGFyZSBpbiB0aGUgU2xlZXAgc3RhdGUgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA+IE9UX1JBRElPX1NUQVRFX1NMRUVQKQorICAgIHsKKyAgICAgICAgKHZvaWQpb3RQbGF0UmFkaW9TbGVlcChvdEN0eCk7CisgICAgfQorCisgICAgcEZpbHRlci0+b3RSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfUEhZX0VOQUJMRUQsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgRkFMU0UKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVEIChmYWxzZSkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVELiIsIHBGaWx0ZXIpOworCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBJZiB3ZSB3ZXJlIGluIHRoZSB0cmFuc21pdCBzdGF0ZSwgY2FuY2VsIHRoZSB0cmFuc21pdAorICAgIGlmIChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpCisgICAgeworICAgICAgICBwRmlsdGVyLT5vdExhc3RUcmFuc21pdEVycm9yID0gT1RfRVJST1JfQUJPUlQ7CisgICAgICAgIG90THdmUmFkaW9UcmFuc21pdEZyYW1lRG9uZShwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAocEZpbHRlci0+b3RSYWRpb1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX1NMRUVQKQorICAgIHsKKyAgICAgICAgcEZpbHRlci0+b3RSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQLiIsIHBGaWx0ZXIpOworCisgICAgICAgIC8vIEluZGljYXRlIHRvIHRoZSBtaW5pcG9ydAorICAgICAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgIEZBTFNFCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCAoZmFsc2UpIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90IGFDaGFubmVsKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCk7CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkgcmV0dXJuIE9UX0VSUk9SX0JVU1k7CisgICAgCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwIiwgcEZpbHRlcik7CisKKyAgICAvLyBVcGRhdGUgY3VycmVudCBjaGFubmVsIGlmIGRpZmZlcmVudAorICAgIGlmIChwRmlsdGVyLT5vdEN1cnJlbnRMaXN0ZW5DaGFubmVsICE9IGFDaGFubmVsKQorICAgIHsKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgICAgIE5UX0FTU0VSVChhQ2hhbm5lbCA+PSAxMSAmJiBhQ2hhbm5lbCA8PSAyNik7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBuZXcgTGlzdGVuIENoYW5uZWwgPSAldS4iLCBwRmlsdGVyLCBhQ2hhbm5lbCk7CisgICAgICAgIHBGaWx0ZXItPm90Q3VycmVudExpc3RlbkNoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1BIWV9DSEFOLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgIGFDaGFubmVsCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfUEhZX0NIQU4gZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gT25seSB0cmFuc2l0aW9uIHRvIHRoZSByZWNlaXZlIHN0YXRlIGlmIHdlIHdlcmUgc2xlZXBpbmc7IG90aGVyd2lzZSB3ZQorICAgIC8vIGFyZSBhbHJlYWR5IGluIHJlY2VpdmUgb3IgdHJhbnNtaXQgc3RhdGUuCisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9TTEVFUCkKKyAgICB7CisgICAgICAgIHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUuIiwgcEZpbHRlcik7CisKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICBUUlVFCisgICAgICAgICAgICApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCAodHJ1ZSkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBldmVudCB0byBpbmRpY2F0ZSB3ZSBjYW4gcHJvY2VzcyBOQkxzCisgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc05CTHMsIDAsIEZBTFNFKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICByZXR1cm4gJnBGaWx0ZXItPm90VHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRmlsdGVyKTsKKyAgICByZXR1cm4gMDsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICByZXR1cm4gb3RDdHhUb0ZpbHRlcihvdEN0eCktPm90UmFkaW9DYXBhYmlsaXRpZXM7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIHBGaWx0ZXItPm90UHJvbWlzY3VvdXM7Cit9CisKK1ZPSUQgCitvdEx3ZlJhZGlvUmVjZWl2ZUZyYW1lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gb3RFcnJvciBlcnJvckNvZGUKKyAgICApCit7ICAgIAorICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tQ2hhbm5lbCA+PSAxMSAmJiBwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZS5tQ2hhbm5lbCA8PSAyNik7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAiLCBwRmlsdGVyKTsKKworICAgIExvZ01hY1JlY3YocEZpbHRlciwgcEZpbHRlci0+b3RSZWNlaXZlRnJhbWUubUxlbmd0aCwgcEZpbHRlci0+b3RSZWNlaXZlRnJhbWUubVBzZHUpOworCisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA+IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9SZWNlaXZlRG9uZShwRmlsdGVyLT5vdEN0eCwgJnBGaWx0ZXItPm90UmVjZWl2ZUZyYW1lLCBlcnJvckNvZGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJNYWMgZnJhbWUgZHJvcHBlZC4iKTsKKyAgICB9CisgICAgCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RBVEFfUEFUSCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCBfSW5fIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGFGcmFtZSk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAiLCBwRmlsdGVyKTsKKworICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRSk7CisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9UUkFOU01JVDsKKyAgICAKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCBSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQuIiwgcEZpbHRlcik7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXRNc2coRFJJVkVSX0RBVEFfUEFUSCwgIiV1IiwgZXJyb3IpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitWT0lEIG90THdmUmFkaW9UcmFuc21pdEZyYW1lKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyKQoreworICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpOworCisgICAgTG9nTWFjU2VuZChwRmlsdGVyLCBwRmlsdGVyLT5vdFRyYW5zbWl0RnJhbWUubUxlbmd0aCwgcEZpbHRlci0+b3RUcmFuc21pdEZyYW1lLm1Qc2R1KTsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgb3RMd2ZDbWRTZW5kTWFjRnJhbWVBc3luYyhwRmlsdGVyLCAmcEZpbHRlci0+b3RUcmFuc21pdEZyYW1lKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9EQVRBX1BBVEgpOworfQorCitWT0lEIAorb3RMd2ZSYWRpb1RyYW5zbWl0RnJhbWVEb25lKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCIsIHBGaWx0ZXIpOworCisgICAgaWYgKHBGaWx0ZXItPm90UmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkKKyAgICB7CisgICAgICAgIHBGaWx0ZXItPlNlbmRQZW5kaW5nID0gRkFMU0U7CisKKyAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGNvbXBsZXRpbmcgYSBzZW5kLCBmYWxsIGJhY2sgdG8gcmVjZWl2ZSBzdGF0ZSBhbmQgc2V0IHRoZSBldmVudAorICAgICAgICBwRmlsdGVyLT5vdFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIFJhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFLiIsIHBGaWx0ZXIpOworICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NOQkxzLCAwLCBGQUxTRSk7CisKKyAgICAgICAgaWYgKHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJgorICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFICYmCisgICAgICAgICAgICBwRmlsdGVyLT5vdExhc3RUcmFuc21pdEVycm9yICE9IE9UX0VSUk9SX05PX0FDSykKKyAgICAgICAgeworICAgICAgICAgICAgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCgocEZpbHRlci0+b3RUcmFuc21pdEZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPT0gMCkgfHwKKyAgICAgICAgICAgIHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUocEZpbHRlci0+b3RDdHgsICZwRmlsdGVyLT5vdFRyYW5zbWl0RnJhbWUsIE5VTEwsIHBGaWx0ZXItPm90TGFzdFRyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUocEZpbHRlci0+b3RDdHgsICZwRmlsdGVyLT5vdFRyYW5zbWl0RnJhbWUsICZwRmlsdGVyLT5vdFJlY2VpdmVGcmFtZSwgcEZpbHRlci0+b3RMYXN0VHJhbnNtaXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREFUQV9QQVRIKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSWdub3JlIGlmIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHN0YXRlCisgICAgaWYgKGFFbmFibGUgPT0gcEZpbHRlci0+b3RQZW5kaW5nTWFjT2ZmbG9hZEVuYWJsZWQpIHJldHVybjsKKworICAgIC8vIENhY2hlIHRoZSBuZXcgdmFsdWUKKyAgICBwRmlsdGVyLT5vdFBlbmRpbmdNYWNPZmZsb2FkRW5hYmxlZCA9IGFFbmFibGUgPyBUUlVFIDogRkFMU0U7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVELAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgIChhRW5hYmxlID8gVFJVRSA6IEZBTFNFKQorICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICB9Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkoX0luXyBvdEluc3RhbmNlICpvdEN0eCwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRJbnNlcnRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgYVNob3J0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJbnNlcnQgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRJbnNlcnRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICBhRXh0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJbnNlcnQgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkoX0luXyBvdEluc3RhbmNlICpvdEN0eCwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRSZW1vdmVQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgYVNob3J0QWRkcmVzcworICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJSZW1vdmUgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJ5KF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFJlbW92ZVByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMsCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgIGFFeHRBZGRyZXNzCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlJlbW92ZSBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIC8vIEluZGljYXRlIHRvIHRoZSBtaW5pcG9ydAorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIG90THdmQ21kU2V0UHJvcCgKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUywKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBJbmRpY2F0ZSB0byB0aGUgbWluaXBvcnQKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMsCisgICAgICAgICAgICBOVUxMCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlNldCBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCB1aW50OF90IGFTY2FuQ2hhbm5lbCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbikKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworCisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX01BU0ssCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgIGFTY2FuQ2hhbm5lbAorICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXQgU1BJTkVMX1BST1BfTUFDX1NDQU5fTUFTSyBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1BFUklPRCwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgIGFTY2FuRHVyYXRpb24KKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ19TQ0FOX1BFUklPRCBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9FTkVSR1kKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKK2Vycm9yOgorCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXREZWZhdWx0VHhQb3dlcihfSW5fIG90SW5zdGFuY2UgKm90Q3R4LCBpbnQ4X3QgYVBvd2VyKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgLy8gSW5kaWNhdGUgdG8gdGhlIG1pbmlwb3J0CisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRTZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX1BIWV9UWF9QT1dFUiwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICBhUG93ZXIKKyAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2V0IFNQSU5FTF9QUk9QX1BIWV9UWF9QT1dFUiBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkoX0luXyBvdEluc3RhbmNlICpvdEN0eCkKK3sKKyAgICBOVF9BU1NFUlQob3RDdHgpOworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90Q3R4VG9GaWx0ZXIob3RDdHgpOworICAgIE5UU1RBVFVTIHN0YXR1czsKKyAgICBpbnQ4X3QgcmVjZWl2ZVNlbnNpdGl2aXR5OworCisgICAgc3RhdHVzID0KKyAgICAgICAgb3RMd2ZDbWRHZXRQcm9wKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBTUElORUxfUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFksCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgJnJlY2VpdmVTZW5zaXRpdml0eQorICAgICAgICApOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkdldCBTUElORUxfUFJPUF9QSFlfUlhfU0VOU0lUSVZJVFksIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIC0xMDA7ICAvLyByZXR1cm4gZGVmYXVsdCB2YWx1ZSAtMTAwZEJtCisgICAgfQorCisgICAgcmV0dXJuIHJlY2VpdmVTZW5zaXRpdml0eTsKK30KKworaW5saW5lIFVTSE9SVCBnZXREc3RTaG9ydEFkZHJlc3MoY29uc3QgVUNIQVIgKmZyYW1lKQoreworICAgIHJldHVybiAoKChVU0hPUlQpZnJhbWVbSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCArIDFdKSA8PCA4KSB8IGZyYW1lW0lFRUU4MDIxNTRfRFNUQUREUl9PRkZTRVRdOworfQorCitpbmxpbmUgVVNIT1JUIGdldFNyY1Nob3J0QWRkcmVzcyhVTE9ORyBmcmFtZUxlbmd0aCwgX0luX3JlYWRzX2J5dGVzXyhmcmFtZUxlbmd0aCkgUFVDSEFSIGZyYW1lLCBVTE9ORyBvZmZzZXQpCit7CisgICAgcmV0dXJuIChvZmZzZXQgKyAxIDwgZnJhbWVMZW5ndGgpID8gKCgoKFVTSE9SVClmcmFtZVtvZmZzZXQgKyAxXSkgPDwgOCkgfCBmcmFtZVtvZmZzZXRdKSA6IDA7Cit9CisKK2lubGluZSBVTE9OR0xPTkcgZ2V0RHN0RXh0QWRkcmVzcyhjb25zdCBVQ0hBUiAqZnJhbWUpCit7CisgICAgcmV0dXJuICooVUxPTkdMT05HKikoZnJhbWUgKyBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKTsKK30KKworaW5saW5lIFVMT05HTE9ORyBnZXRTcmNFeHRBZGRyZXNzKFVMT05HIGZyYW1lTGVuZ3RoLCBfSW5fcmVhZHNfYnl0ZXNfKGZyYW1lTGVuZ3RoKSBQVUNIQVIgZnJhbWUsIFVMT05HIG9mZnNldCkKK3sKKyAgICByZXR1cm4gKG9mZnNldCArIDcgPCBmcmFtZUxlbmd0aCkgPyAoKihVTE9OR0xPTkcqKShmcmFtZSArIG9mZnNldCkpIDogMDsKK30KKwordm9pZCAKK0xvZ01hYygKKyAgICBfSW5fIFBDU1RSIHN6RGlyLAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIFVMT05HIGZyYW1lTGVuZ3RoLAorICAgIF9Jbl9yZWFkc19ieXRlc18oZnJhbWVMZW5ndGgpIFBVQ0hBUiBmcmFtZQorICAgICkKK3sKKyAgICBpZiAoZnJhbWVMZW5ndGggPCA2KSByZXR1cm47CisKKyAgICBOVF9BU1NFUlQoZnJhbWUpOworCisgICAgVUNIQVIgQWNrUmVxdWVzdGVkID0gKGZyYW1lWzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgIT0gMCA/IDEgOiAwOworICAgIFVDSEFSIEZyYW1lUGVuZGluZyA9IChmcmFtZVswXSAmIElFRUU4MDIxNTRfRlJBTUVfUEVORElORykgIT0gMCA/IDEgOiAwOworCisgICAgc3dpdGNoIChmcmFtZVsxXSAmIChJRUVFODAyMTU0X0RTVF9BRERSX01BU0sgfCBJRUVFODAyMTU0X1NSQ19BRERSX01BU0spKQorICAgIHsKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfTk9ORSB8IElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORToKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6IG51bGwgPT4gbnVsbCAoJXUgYnl0ZXMsIEFja1JlcT0ldSwgRnJhbWVQZW5kaW5nPSV1KSIsIAorICAgICAgICAgICAgcEZpbHRlciwgc3pEaXIsIGZyYW1lTGVuZ3RoLCBBY2tSZXF1ZXN0ZWQsIEZyYW1lUGVuZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9OT05FIHwgSUVFRTgwMjE1NF9TUkNfQUREUl9TSE9SVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVYID0+IG51bGwgKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXRTcmNTaG9ydEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX05PTkUgfCBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVsbFggPT4gbnVsbCAoJXUgYnl0ZXMsIEFja1JlcT0ldSwgRnJhbWVQZW5kaW5nPSV1KSIsIAorICAgICAgICAgICAgcEZpbHRlciwgc3pEaXIsIGdldFNyY0V4dEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9TSE9SVCB8IElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORToKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6IG51bGwgPT4gJVggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXREc3RTaG9ydEFkZHJlc3MoZnJhbWUpLCBmcmFtZUxlbmd0aCwgQWNrUmVxdWVzdGVkLCBGcmFtZVBlbmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfU0hPUlQgfCBJRUVFODAyMTU0X1NSQ19BRERSX1NIT1JUOgorICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9EQVRBX1BBVEgsICJGaWx0ZXI6ICVwLCAlczogJVggPT4gJVggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXRTcmNTaG9ydEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKzIpLCBnZXREc3RTaG9ydEFkZHJlc3MoZnJhbWUpLCBmcmFtZUxlbmd0aCwgQWNrUmVxdWVzdGVkLCBGcmFtZVBlbmRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfU0hPUlQgfCBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVsbFggPT4gJVggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXRTcmNFeHRBZGRyZXNzKGZyYW1lTGVuZ3RoLCBmcmFtZSwgSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCsyKSwgZ2V0RHN0U2hvcnRBZGRyZXNzKGZyYW1lKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9FWFQgfCBJRUVFODAyMTU0X1NSQ19BRERSX05PTkU6CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsICVzOiBudWxsID0+ICVsbFggKCV1IGJ5dGVzLCBBY2tSZXE9JXUsIEZyYW1lUGVuZGluZz0ldSkiLCAKKyAgICAgICAgICAgIHBGaWx0ZXIsIHN6RGlyLCBnZXREc3RFeHRBZGRyZXNzKGZyYW1lKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX0VYVCB8IElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQ6CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RBVEFfUEFUSCwgIkZpbHRlcjogJXAsICVzOiAlWCA9PiAlbGxYICgldSBieXRlcywgQWNrUmVxPSV1LCBGcmFtZVBlbmRpbmc9JXUpIiwgCisgICAgICAgICAgICBwRmlsdGVyLCBzekRpciwgZ2V0U3JjU2hvcnRBZGRyZXNzKGZyYW1lTGVuZ3RoLCBmcmFtZSwgSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCs4KSwgZ2V0RHN0RXh0QWRkcmVzcyhmcmFtZSksIGZyYW1lTGVuZ3RoLCBBY2tSZXF1ZXN0ZWQsIEZyYW1lUGVuZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9FWFQgfCBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREFUQV9QQVRILCAiRmlsdGVyOiAlcCwgJXM6ICVsbFggPT4gJWxsWCAoJXUgYnl0ZXMsIEFja1JlcT0ldSwgRnJhbWVQZW5kaW5nPSV1KSIsIAorICAgICAgICAgICAgcEZpbHRlciwgc3pEaXIsIGdldFNyY0V4dEFkZHJlc3MoZnJhbWVMZW5ndGgsIGZyYW1lLCBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUKzgpLCBnZXREc3RFeHRBZGRyZXNzKGZyYW1lKSwgZnJhbWVMZW5ndGgsIEFja1JlcXVlc3RlZCwgRnJhbWVQZW5kaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorI2lmZGVmIExPR19CVUZGRVJTCisgICAgb3RMb2dCdWZmZXIoZnJhbWUsIGZyYW1lTGVuZ3RoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmggYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTBkNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3JhZGlvLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5UaHJlYWQgcmFkaW8gaW50ZXJmYWNlLgorICovCisKKyNpZm5kZWYgX09UTFdGX1JBRElPX0gKKyNkZWZpbmUgX09UTFdGX1JBRElPX0gKKworZW51bQoreworICAgIElFRUU4MDIxNTRfTUlOX0xFTkdUSCAgICAgICAgID0gNSwKKyAgICBJRUVFODAyMTU0X01BWF9MRU5HVEggICAgICAgICA9IDEyNywKKyAgICBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X0JST0FEQ0FTVCAgICAgICAgICA9IDB4ZmZmZiwKKworICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgID0gMiA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQUNDTUQgID0gMyA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLICAgID0gNyA8PCAwLAorCisgICAgSUVFRTgwMjE1NF9TRUNVUklUWV9FTkFCTEVEICAgPSAxIDw8IDMsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgPSAxIDw8IDQsCisgICAgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCAgICAgICAgPSAxIDw8IDUsCisgICAgSUVFRTgwMjE1NF9QQU5JRF9DT01QUkVTU0lPTiAgPSAxIDw8IDYsCisKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX05PTkUgICAgICA9IDAgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX1NIT1JUICAgICA9IDIgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX0VYVCAgICAgICA9IDMgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX01BU0sgICAgICA9IDMgPDwgMiwKKworICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORSAgICAgID0gMCA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQgICAgID0gMiA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfRVhUICAgICAgID0gMyA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTUFTSyAgICAgID0gMyA8PCA2LAorCisgICAgSUVFRTgwMjE1NF9EU05fT0ZGU0VUICAgICAgICAgPSAyLAorICAgIElFRUU4MDIxNTRfRFNUUEFOX09GRlNFVCAgICAgID0gMywKKyAgICBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X1NFQ19MRVZFTF9NQVNLICAgICA9IDcgPDwgMCwKKworICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMCAgICAgID0gMCA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMSAgICAgID0gMSA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMiAgICAgID0gMiA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMyAgICAgID0gMyA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfTUFTSyAgID0gMyA8PCAzLAorCisgICAgSUVFRTgwMjE1NF9NQUNDTURfREFUQV9SRVEgICAgPSA0LAorfTsKKworLy8gSW5pdGlhbGl6ZXMgdGhlIHJhZGlvIGxheWVyCitWT0lEIG90THdmUmFkaW9Jbml0KF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyKTsKKworLy8gSW5kaWNhdGVzIGEgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGUgcmFkaW8gbGF5ZXIKK1ZPSUQgb3RMd2ZSYWRpb1JlY2VpdmVGcmFtZShfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgX0luXyBvdEVycm9yIGVycm9yQ29kZSk7CisKKy8vIEluZGljYXRlcyB0aGUgdHJhbnNtaXQgZnJhbWUgaXMgcmVhZHkgdG8gc2VuZCB0byB0aGUgcmFkaW8gbGF5ZXIKK1ZPSUQgb3RMd2ZSYWRpb1RyYW5zbWl0RnJhbWUoX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIpOworCisvLyBJbmRpY2F0ZXMgdGhlIHRyYW5zbWl0IGZyYW1lIGZpbmlzaGVkIHNlbmRpbmcKK1ZPSUQgb3RMd2ZSYWRpb1RyYW5zbWl0RnJhbWVEb25lKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyKTsKKworI2VuZGlmICAvL19PVExXRl9SQURJT19ICmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2Yvc2V0dGluZ3MuYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi9zZXR0aW5ncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWVmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2Yvc2V0dGluZ3MuYwpAQCAtMCwwICsxLDYwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHNldHRpbmdzIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqLworCisjaW5jbHVkZSAicHJlY29tcC5oIgorI2luY2x1ZGUgInNldHRpbmdzLnRtaCIKKwordm9pZCBvdFBsYXRTZXR0aW5nc0luaXQob3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIERFQ0xBUkVfQ09OU1RfVU5JQ09ERV9TVFJJTkcoU3ViS2V5TmFtZSwgTCJPcGVuVGhyZWFkIik7CisKKyAgICBPQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIFVMT05HIGRpc3Bvc2l0aW9uOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIEluaXRpYWxpemVPYmplY3RBdHRyaWJ1dGVzKAorICAgICAgICAmYXR0cmlidXRlcywKKyAgICAgICAgKFBVTklDT0RFX1NUUklORykmU3ViS2V5TmFtZSwKKyAgICAgICAgT0JKX0NBU0VfSU5TRU5TSVRJVkUgfCBPQkpfS0VSTkVMX0hBTkRMRSwKKyAgICAgICAgcEZpbHRlci0+SW50ZXJmYWNlUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIENyZWF0ZS9PcGVuIHRoZSAnT3BlblRocmVhZCcgc3ViIGtleQorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIFp3Q3JlYXRlS2V5KAorICAgICAgICAgICAgJnBGaWx0ZXItPm90U2V0dGluZ3NSZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKKyAgICAgICAgICAgICZkaXNwb3NpdGlvbik7CisKKyAgICBOVF9BU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndDcmVhdGVLZXkgZm9yICdPcGVuVGhyZWFkJyBrZXkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordWludDE2X3QgRmlsdGVyQ291bnRTZXR0aW5ncyhfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgdWludDE2X3QgYUtleSkKK3sKKyAgICBIQU5ETEUgcmVnS2V5ID0gTlVMTDsKKyAgICBPQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIERFQ0xBUkVfVU5JQ09ERV9TVFJJTkdfU0laRShOYW1lLCA4KTsKKyAgICBVQ0hBUiBJbmZvQnVmZmVyWzEyOF0gPSB7MH07CisgICAgUEtFWV9GVUxMX0lORk9STUFUSU9OIHBJbmZvID0gKFBLRVlfRlVMTF9JTkZPUk1BVElPTilJbmZvQnVmZmVyOworICAgIFVMT05HIEluZm9MZW5ndGggPSBzaXplb2YoSW5mb0J1ZmZlcik7CisKKyAgICAvLyBDb252ZXJ0ICdhS2V5JyB0byBhIHN0cmluZworICAgIFJ0bEludGVnZXJUb1VuaWNvZGVTdHJpbmcoKFVMT05HKWFLZXksIDE2LCAmTmFtZSk7CisKKyAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICZOYW1lLAorICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIE9wZW4gdGhlIHJlZ2lzdHJ5IGtleQorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIFp3T3BlbktleSgKKyAgICAgICAgICAgICZyZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgLy8gS2V5IGRvZXNuJ3QgZXhpc3QsIHJldHVybiBhIGNvdW50IG9mIDAKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUga2V5IGluZm8gZnJvbSB0aGUgcmVnaXN0cnkKKyAgICBzdGF0dXMgPQorICAgICAgICBad1F1ZXJ5S2V5KAorICAgICAgICAgICAgcmVnS2V5LAorICAgICAgICAgICAgS2V5VmFsdWVGdWxsSW5mb3JtYXRpb24sCisgICAgICAgICAgICBwSW5mbywKKyAgICAgICAgICAgIEluZm9MZW5ndGgsCisgICAgICAgICAgICAmSW5mb0xlbmd0aCk7CisKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndRdWVyeUtleSBmb3IgJVMgdmFsdWUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKK2Vycm9yOgorCisgICAgaWYgKHJlZ0tleSkgWndDbG9zZShyZWdLZXkpOworCisgICAgcmV0dXJuICh1aW50MTZfdClwSW5mby0+VmFsdWVzOworfQorCitOVFNUQVRVUyBGaWx0ZXJSZWFkU2V0dGluZyhfSW5fIFBNU19GSUxURVIgcEZpbHRlciwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCwgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCAqYVZhbHVlTGVuZ3RoKQoreworICAgIEhBTkRMRSByZWdLZXkgPSBOVUxMOworICAgIE9CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgREVDTEFSRV9VTklDT0RFX1NUUklOR19TSVpFKE5hbWUsIDIwKTsKKyAgICBQS0VZX1ZBTFVFX1BBUlRJQUxfSU5GT1JNQVRJT04gcEluZm8gPSBOVUxMOworICAgIFVMT05HIEluZm9MZW5ndGggPSBzaXplb2YoKnBJbmZvKSArICphVmFsdWVMZW5ndGg7CisKKyAgICAvLyBDb252ZXJ0ICdhS2V5JyB0byBhIHN0cmluZworICAgIFJ0bEludGVnZXJUb1VuaWNvZGVTdHJpbmcoKFVMT05HKWFLZXksIDE2LCAmTmFtZSk7CisKKyAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICZOYW1lLAorICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIE9wZW4gdGhlIHJlZ2lzdHJ5IGtleQorICAgIE5UU1RBVFVTIHN0YXR1cyA9CisgICAgICAgIFp3T3BlbktleSgKKyAgICAgICAgICAgICZyZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgLy8gS2V5IGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZygoVUxPTkcpYUluZGV4LCAxNiwgJk5hbWUpOworCisgICAgLy8gQWxsb2NhdGUgYnVmZmVyIGZvciBxdWVyeQorICAgIHBJbmZvID0gRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIEluZm9MZW5ndGgpOworICAgIGlmIChwSW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gUXVlcnkgdGhlIGRhdGEKKyAgICBzdGF0dXMgPSBad1F1ZXJ5VmFsdWVLZXkoCisgICAgICAgIHJlZ0tleSwKKyAgICAgICAgJk5hbWUsCisgICAgICAgIEtleVZhbHVlUGFydGlhbEluZm9ybWF0aW9uLAorICAgICAgICBwSW5mbywKKyAgICAgICAgSW5mb0xlbmd0aCwKKyAgICAgICAgJkluZm9MZW5ndGgpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiWndRdWVyeVZhbHVlS2V5IGZvciAlUyB2YWx1ZSBmYWlsZWQsICUhU1RBVFVTISIsIE5hbWUuQnVmZmVyLCBzdGF0dXMpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIE5UX0FTU0VSVCgqYVZhbHVlTGVuZ3RoID49IHBJbmZvLT5EYXRhTGVuZ3RoKTsKKyAgICAqYVZhbHVlTGVuZ3RoID0gKHVpbnQxNl90KXBJbmZvLT5EYXRhTGVuZ3RoOworICAgIGlmIChhVmFsdWUpCisgICAgeworICAgICAgICBtZW1jcHkoYVZhbHVlLCBwSW5mby0+RGF0YSwgcEluZm8tPkRhdGFMZW5ndGgpOworICAgIH0KKworZXJyb3I6CisKKyAgICBpZiAocEluZm8pIEZJTFRFUl9GUkVFX01FTShwSW5mbyk7CisgICAgaWYgKHJlZ0tleSkgWndDbG9zZShyZWdLZXkpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworTlRTVEFUVVMgRmlsdGVyV3JpdGVTZXR0aW5nKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCkKK3sKKyAgICBIQU5ETEUgcmVnS2V5ID0gTlVMTDsKKyAgICBPQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIERFQ0xBUkVfVU5JQ09ERV9TVFJJTkdfU0laRShOYW1lLCAyMCk7CisKKyAgICAvLyBDb252ZXJ0ICdhS2V5JyB0byBhIHN0cmluZworICAgIFJ0bEludGVnZXJUb1VuaWNvZGVTdHJpbmcoKFVMT05HKWFLZXksIDE2LCAmTmFtZSk7CisKKyAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICZOYW1lLAorICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICBOVUxMKTsKKworICAgIC8vIENyZWF0ZS9PcGVuIHRoZSByZWdpc3RyeSBrZXkKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBad0NyZWF0ZUtleSgKKyAgICAgICAgICAgICZyZWdLZXksCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywKKyAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBSRUdfT1BUSU9OX05PTl9WT0xBVElMRSwKKyAgICAgICAgICAgIE5VTEwpOworCisgICAgTlRfQVNTRVJUKE5UX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlp3Q3JlYXRlS2V5IGZvciAlUyBrZXkgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZygoVUxPTkcpYUluZGV4LCAxNiwgJk5hbWUpOworCisgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIHJlZ2lzdHJ5CisgICAgc3RhdHVzID0KKyAgICAgICAgWndTZXRWYWx1ZUtleSgKKyAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICZOYW1lLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIFJFR19CSU5BUlksCisgICAgICAgICAgICAoUFZPSUQpYVZhbHVlLAorICAgICAgICAgICAgYVZhbHVlTGVuZ3RoKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1NldFZhbHVlS2V5IGZvciAlUyB2YWx1ZSBmYWlsZWQsICUhU1RBVFVTISIsIE5hbWUuQnVmZmVyLCBzdGF0dXMpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworZXJyb3I6CisKKyAgICBpZiAocmVnS2V5KSBad0Nsb3NlKHJlZ0tleSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitOVFNUQVRVUyBGaWx0ZXJEZWxldGVTZXR0aW5nKF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQoreworICAgIEhBTkRMRSByZWdLZXkgPSBOVUxMOworICAgIE9CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgREVDTEFSRV9VTklDT0RFX1NUUklOR19TSVpFKE5hbWUsIDIwKTsKKworICAgIC8vIENvbnZlcnQgJ2FLZXknIHRvIGEgc3RyaW5nCisgICAgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZygoVUxPTkcpYUtleSwgMTYsICZOYW1lKTsKKworICAgIEluaXRpYWxpemVPYmplY3RBdHRyaWJ1dGVzKAorICAgICAgICAmYXR0cmlidXRlcywKKyAgICAgICAgJk5hbWUsCisgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFIHwgT0JKX0tFUk5FTF9IQU5ETEUsCisgICAgICAgIHBGaWx0ZXItPm90U2V0dGluZ3NSZWdLZXksCisgICAgICAgIE5VTEwpOworCisgICAgLy8gT3BlbiB0aGUgcmVnaXN0cnkga2V5CisgICAgTlRTVEFUVVMgc3RhdHVzID0KKyAgICAgICAgWndPcGVuS2V5KAorICAgICAgICAgICAgJnJlZ0tleSwKKyAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTLAorICAgICAgICAgICAgJmF0dHJpYnV0ZXMpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICAvLyBLZXkgZG9lc24ndCBleGlzdAorICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIElmICdhSW5kZXgnIGlzIC0xIHRoZW4gZGVsZXRlIHRoZSB3aG9sZSBrZXksIG90aGVyd2lzZSBkZWxldGUgdGhlIGluZGl2aWR1YWwgdmFsdWUKKyAgICBpZiAoYUluZGV4ID09IC0xKQorICAgIHsKKyAgICAgICAgLy8gRGVsZXRlIHRoZSByZWdpc3RyeSBrZXkKKyAgICAgICAgc3RhdHVzID0gWndEZWxldGVLZXkocmVnS2V5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVUNIQVIgS2V5SW5mb0J1ZmZlclsxMjhdID0geyAwIH07CisgICAgICAgIFBLRVlfRlVMTF9JTkZPUk1BVElPTiBwS2V5SW5mbyA9IChQS0VZX0ZVTExfSU5GT1JNQVRJT04pS2V5SW5mb0J1ZmZlcjsKKyAgICAgICAgVUxPTkcgS2V5SW5mb0xlbmd0aCA9IHNpemVvZihLZXlJbmZvQnVmZmVyKTsKKworICAgICAgICAvLyBXaGVuIGRlbGV0aW5nIGFuIGluZGl2aWR1YWwgdmFsdWUsIHNpbmNlIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLCB3ZSB3aWxsIGFjdHVhbGx5CisgICAgICAgIC8vIGNvcHkgdGhlIGxhc3QgdmFsdWUgb3ZlciB0aGUgb25lIGJlaW5nIGRlbGV0ZWQgYW5kIHRoZW4gZGVsZXRlIHRoZSBsYXN0IHZhbHVlOyBzbworICAgICAgICAvLyB3ZSBtYWludGFpbiBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBudW1iZXJlZCB2YWx1ZXMKKworICAgICAgICAvLyBRdWVyeSB0aGUgbnVtYmVyIG9mIHZhbHVlcworICAgICAgICAvLyBOb3RlOiBDYW4ndCB1c2UgaGVscGVyIGZ1bmN0aW9uIGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBrZXkgb3BlbgorICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgWndRdWVyeUtleSgKKyAgICAgICAgICAgICAgICByZWdLZXksCisgICAgICAgICAgICAgICAgS2V5VmFsdWVGdWxsSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgcEtleUluZm8sCisgICAgICAgICAgICAgICAgS2V5SW5mb0xlbmd0aCwKKyAgICAgICAgICAgICAgICAmS2V5SW5mb0xlbmd0aCk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndRdWVyeUtleSBmb3IgJVMgdmFsdWUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKFVMT05HKWFJbmRleCA+PSBwS2V5SW5mby0+VmFsdWVzKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGRlbGV0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX09CSkVDVF9OQU1FX05PVF9GT1VORDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocEtleUluZm8tPlZhbHVlcyA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEZWxldGluZyB0aGUgb25seSB2YWx1ZSBvbiB0aGUga2V5LCBnbyBhaGVhZCBhbmQgZGVsZXRlIHRoZSBlbnRpcmUga2V5CisgICAgICAgICAgICBzdGF0dXMgPSBad0RlbGV0ZUtleShyZWdLZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBLZXlJbmZvLT5WYWx1ZXMgLSAxICE9IChVTE9ORylhSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZW4ndCBkZWxldGluZyB0aGUgbGFzdCB2YWx1ZSBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGxhc3QgdmFsdWUKKyAgICAgICAgICAgIC8vIG92ZXIgdGhpcyBvbmUsIGFuZCB0aGVuIGRlbGV0ZSB0aGUgbGFzdCBvbmUuCisKKyAgICAgICAgICAgIFBLRVlfVkFMVUVfUEFSVElBTF9JTkZPUk1BVElPTiBwVmFsdWVJbmZvID0gTlVMTDsKKyAgICAgICAgICAgIFVMT05HIFZhbHVlSW5mb0xlbmd0aCA9IDA7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgcEtleUluZm8tPlZhbHVlcy0xIHRvIGEgc3RyaW5nCisgICAgICAgICAgICBSdGxJbnRlZ2VyVG9Vbmljb2RlU3RyaW5nKHBLZXlJbmZvLT5WYWx1ZXMgLSAxLCAxNiwgJk5hbWUpOworCisgICAgICAgICAgICAvLyBRdWVyeSB0aGUga2V5IGRhdGEgYnVmZmVyIHNpemUKKyAgICAgICAgICAgIHN0YXR1cyA9IFp3UXVlcnlWYWx1ZUtleSgKKyAgICAgICAgICAgICAgICByZWdLZXksCisgICAgICAgICAgICAgICAgJk5hbWUsCisgICAgICAgICAgICAgICAgS2V5VmFsdWVQYXJ0aWFsSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgcFZhbHVlSW5mbywKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICZWYWx1ZUluZm9MZW5ndGgpOworCisgICAgICAgICAgICBOVF9BU1NFUlQoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gU1RBVFVTX0JVRkZFUl9UT09fU01BTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlp3UXVlcnlWYWx1ZUtleSBmb3IgJVMgdmFsdWUgZmFpbGVkLCAlIVNUQVRVUyEiLCBOYW1lLkJ1ZmZlciwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwVmFsdWVJbmZvID0gRklMVEVSX0FMTE9DX01FTShwRmlsdGVyLT5GaWx0ZXJIYW5kbGUsIFZhbHVlSW5mb0xlbmd0aCk7CisgICAgICAgICAgICBpZiAocFZhbHVlSW5mbyA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFF1ZXJ5IHRoZSBkYXRhIGJ1ZmZlcgorICAgICAgICAgICAgc3RhdHVzID0gWndRdWVyeVZhbHVlS2V5KAorICAgICAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICAgICAmTmFtZSwKKyAgICAgICAgICAgICAgICBLZXlWYWx1ZVBhcnRpYWxJbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICBwVmFsdWVJbmZvLAorICAgICAgICAgICAgICAgIFZhbHVlSW5mb0xlbmd0aCwKKyAgICAgICAgICAgICAgICAmVmFsdWVJbmZvTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1F1ZXJ5VmFsdWVLZXkgZm9yICVTIHZhbHVlIGZhaWxlZCwgJSFTVEFUVVMhIiwgTmFtZS5CdWZmZXIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEZWxldGUgdGhlIHJlZ2lzdHJ5IHZhbHVlCisgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgIFp3RGVsZXRlVmFsdWVLZXkoCisgICAgICAgICAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICAgICAgICAgJk5hbWUpOworCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlp3RGVsZXRlVmFsdWVLZXkgZm9yICVTIHZhbHVlIGZhaWxlZCwgJSFTVEFUVVMhIiwgTmFtZS5CdWZmZXIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgICAgICAgICBSdGxJbnRlZ2VyVG9Vbmljb2RlU3RyaW5nKChVTE9ORylhSW5kZXgsIDE2LCAmTmFtZSk7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSByZWdpc3RyeSBrZXkgd2UgYXJlIGRlbGV0aW5nCisgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgIFp3U2V0VmFsdWVLZXkoCisgICAgICAgICAgICAgICAgICAgIHJlZ0tleSwKKyAgICAgICAgICAgICAgICAgICAgJk5hbWUsCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgIFJFR19CSU5BUlksCisgICAgICAgICAgICAgICAgICAgIChQVk9JRClwVmFsdWVJbmZvLT5EYXRhLAorICAgICAgICAgICAgICAgICAgICBwVmFsdWVJbmZvLT5EYXRhTGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJad1NldFZhbHVlS2V5IGZvciAlUyB2YWx1ZSBmYWlsZWQsICUhU1RBVFVTISIsIE5hbWUuQnVmZmVyLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjbGVhbnVwOgorCisgICAgICAgICAgICBpZiAocFZhbHVlSW5mbykgRklMVEVSX0ZSRUVfTUVNKHBWYWx1ZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRGVsZXRpbmcgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIGxpc3QgKGJ1dCBub3QgdGhlIG9ubHkgdmFsdWUpCisgICAgICAgICAgICAvLyBKdXN0IGRlbGV0ZSB0aGUgdmFsdWUgZGlyZWN0bHkuIE5vIG5lZWQgdG8gY29weSBhbnkgb3RoZXJzLgorCisgICAgICAgICAgICAvLyBDb252ZXJ0ICdhSW5kZXgnIHRvIGEgc3RyaW5nCisgICAgICAgICAgICBSdGxJbnRlZ2VyVG9Vbmljb2RlU3RyaW5nKChVTE9ORylhSW5kZXgsIDE2LCAmTmFtZSk7CisKKyAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgcmVnaXN0cnkgdmFsdWUKKyAgICAgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICAgICAgWndEZWxldGVWYWx1ZUtleSgKKyAgICAgICAgICAgICAgICAgICAgcmVnS2V5LAorICAgICAgICAgICAgICAgICAgICAmTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKK2Vycm9yOgorCisgICAgaWYgKHJlZ0tleSkgWndDbG9zZShyZWdLZXkpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIob3RDdHgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihvdEN0eCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0FiYW5kb25DaGFuZ2Uob3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihvdEN0eCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0dldChvdEluc3RhbmNlICpvdEN0eCwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCwgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCAqYVZhbHVlTGVuZ3RoKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSAKKyAgICAgICAgRmlsdGVyUmVhZFNldHRpbmcoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIGFJbmRleCwKKyAgICAgICAgICAgIGFWYWx1ZSwKKyAgICAgICAgICAgIGFWYWx1ZUxlbmd0aCk7CisKKyAgICByZXR1cm4gTlRfU1VDQ0VTUyhzdGF0dXMpID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX05PVF9GT1VORDsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc1NldChvdEluc3RhbmNlICpvdEN0eCwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKworICAgIE5UU1RBVFVTIHN0YXR1cyA9IAorICAgICAgICBGaWx0ZXJXcml0ZVNldHRpbmcoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBhVmFsdWUsCisgICAgICAgICAgICBhVmFsdWVMZW5ndGgpOworCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NBZGQob3RJbnN0YW5jZSAqb3RDdHgsIHVpbnQxNl90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZSwgdWludDE2X3QgYVZhbHVlTGVuZ3RoKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICB1aW50MTZfdCBjb3VudCA9IEZpbHRlckNvdW50U2V0dGluZ3MocEZpbHRlciwgYUtleSk7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBGaWx0ZXJXcml0ZVNldHRpbmcoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgYVZhbHVlLAorICAgICAgICAgICAgYVZhbHVlTGVuZ3RoKTsKKworICAgIHJldHVybiBOVF9TVUNDRVNTKHN0YXR1cykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfRkFJTEVEOworfQorCitvdEVycm9yIG90UGxhdFNldHRpbmdzRGVsZXRlKG90SW5zdGFuY2UgKm90Q3R4LCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgICBGaWx0ZXJEZWxldGVTZXR0aW5nKAorICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICBhSW5kZXgpOworCisgICAgcmV0dXJuIE5UX1NVQ0NFU1Moc3RhdHVzKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9GQUlMRUQ7Cit9CisKK3ZvaWQgb3RQbGF0U2V0dGluZ3NXaXBlKG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgLy8gRGVsZXRlIGFsbCBzdWJrZXlzIG9mICdPcGVuVGhyZWFkJworICAgIGlmIChwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5KQorICAgIHsKKyAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIFVMT05HIGluZGV4ID0gMDsKKyAgICAgICAgVUNIQVIga2V5SW5mb1tzaXplb2YoS0VZX0JBU0lDX0lORk9STUFUSU9OKSArIDY0XTsKKworICAgICAgICB3aGlsZSAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBVTE9ORyBzaXplID0gc2l6ZW9mKGtleUluZm8pOworICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICBad0VudW1lcmF0ZUtleSgKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlci0+b3RTZXR0aW5nc1JlZ0tleSwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIEtleUJhc2ljSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGtleUluZm8sCisgICAgICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICZzaXplKTsKKworICAgICAgICAgICAgYm9vbCBkZWxldGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhBTkRMRSBzdWJLZXkgPSBOVUxMOworICAgICAgICAgICAgICAgIE9CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAgUEtFWV9CQVNJQ19JTkZPUk1BVElPTiBwS2V5SW5mbyA9IChQS0VZX0JBU0lDX0lORk9STUFUSU9OKWtleUluZm87CisKKyAgICAgICAgICAgICAgICBVTklDT0RFX1NUUklORyBzdWJLZXlOYW1lID0gCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAoVVNIT1JUKXBLZXlJbmZvLT5OYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAoVVNIT1JUKXBLZXlJbmZvLT5OYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBwS2V5SW5mby0+TmFtZQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICZzdWJLZXlOYW1lLAorICAgICAgICAgICAgICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSB8IE9CSl9LRVJORUxfSEFORExFLAorICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5vdFNldHRpbmdzUmVnS2V5LAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHN1YiBrZXkKKyAgICAgICAgICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICBad09wZW5LZXkoCisgICAgICAgICAgICAgICAgICAgICAgICAmc3ViS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAmYXR0cmlidXRlcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBrZXkKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gWndEZWxldGVLZXkoc3ViS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndEZWxldGVLZXkgZm9yIHN1YmtleSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIGhhbmRsZQorICAgICAgICAgICAgICAgICAgICBad0Nsb3NlKHN1YktleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiWndPcGVuS2V5IGZvciBzdWJrZXkgZmFpbGVkLCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT25seSBpbmNyZW1lbnQgaW5kZXggaWYgd2UgZGlkbid0IGRlbGV0ZQorICAgICAgICAgICAgaWYgKCFkZWxldGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdGhyZWFkLmMgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi90aHJlYWQuYwpAQCAtMCwwICsxLDgyMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIFRocmVhZCBtb2RlIChSYWRpbyBNaW5pcG9ydCkgZnVuY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAidGhyZWFkLnRtaCIKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTkRJU19TVEFUVVMgCitvdEx3ZkluaXRpYWxpemVUaHJlYWRNb2RlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIE5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZUNhcGFiaWxpdGllcyAmIE9UTFdGX0RFVklDRV9DQVBfUkFESU8pOworCisgICAgZG8KKyAgICB7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPlNlbmROZXRCdWZmZXJMaXN0Q29tcGxldGUsCisgICAgICAgICAgICBTeW5jaHJvbml6YXRpb25FdmVudCwgLy8gYXV0by1jbGVhcmluZyBldmVudAorICAgICAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluaXRpYWxseSBub24tc2lnbmFsbGVkCisgICAgICAgICAgICApOworCisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGV2ZW50IHByb2Nlc3NpbmcKKyAgICAgICAgcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWQgPSBOVUxMOworICAgICAgICBOZGlzQWxsb2NhdGVTcGluTG9jaygmcEZpbHRlci0+RXZlbnRzTG9jayk7CisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+QWRkcmVzc0NoYW5nZXNIZWFkKTsKKyAgICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZwRmlsdGVyLT5OQkxzSGVhZCk7CisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+TWFjRnJhbWVzSGVhZCk7CisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmcEZpbHRlci0+RXZlbnRJcnBMaXN0SGVhZCk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkU3RvcEV2ZW50LAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKyAgICAgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRXYWl0VGltZVVwZGF0ZWQsCisgICAgICAgICAgICBTeW5jaHJvbml6YXRpb25FdmVudCwgLy8gYXV0by1jbGVhcmluZyBldmVudAorICAgICAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluaXRpYWxseSBub24tc2lnbmFsbGVkCisgICAgICAgICAgICApOworICAgICAgICBLZUluaXRpYWxpemVFdmVudCgKKyAgICAgICAgICAgICZwRmlsdGVyLT5FdmVudFdvcmtlclRocmVhZFByb2Nlc3NUYXNrbGV0cywKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0FkZHJlc3NDaGFuZ2VzLAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKyAgICAgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICAgICAmcEZpbHRlci0+RXZlbnRXb3JrZXJUaHJlYWRQcm9jZXNzTkJMcywKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc01hY0ZyYW1lcywKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkUHJvY2Vzc0lycCwKKyAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgICAgICBGQUxTRSAgICAgICAgICAgICAgICAgLy8gZXZlbnQgaW5pdGlhbGx5IG5vbi1zaWduYWxsZWQKKyAgICAgICAgICAgICk7CisgICAgICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAgICAgJnBGaWx0ZXItPkV2ZW50V29ya2VyVGhyZWFkRW5lcmd5U2NhbkNvbXBsZXRlLAorICAgICAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICAgICAgKTsKKyAgICAgICAgcEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIgPSAKKyAgICAgICAgICAgIEV4QWxsb2NhdGVUaW1lcigKKyAgICAgICAgICAgICAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ1RpbWVyLCAKKyAgICAgICAgICAgICAgICBwRmlsdGVyLCAKKyAgICAgICAgICAgICAgICBFWF9USU1FUl9ISUdIX1JFU09MVVRJT04KKyAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgdGltZXIhIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFF1ZXJ5IHRoZSBpbnRlcmZhY2Ugc3RhdGUgKGJlc3QgZWZmb3J0LCBzaW5jZSBpdCBtaWdodCBub3QgYmUgc3VwcG9ydGVkKQorICAgICAgICBCT09MRUFOIElmVXAgPSBGQUxTRTsKKyAgICAgICAgU3RhdHVzID0gb3RMd2ZDbWRHZXRQcm9wKHBGaWx0ZXIsIE5VTEwsIFNQSU5FTF9QUk9QX05FVF9JRl9VUCwgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywgJklmVXApOworICAgICAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBxdWVyeSBTUElORUxfUFJPUF9JTlRFUkZBQ0VfVFlQRSwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOVF9BU1NFUlQoSWZVcCA9PSBGQUxTRSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBldmVudCBwcm9jZXNzaW5nIHRocmVhZAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1Mob3RMd2ZFdmVudFByb2Nlc3NpbmdTdGFydChwRmlsdGVyKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChGQUxTRSk7CisKKyAgICBpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgeworICAgICAgICAvLyBTdG9wIGV2ZW50IHByb2Nlc3NpbmcgdGhyZWFkCisgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nU3RvcChwRmlsdGVyKTsKKworICAgICAgICAvLyBTdG9wIGFuZCBmcmVlIHRoZSB0aW1lcgorICAgICAgICBpZiAocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4RGVsZXRlVGltZXIocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TkRJUyhEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlVuaW5pdGlhbGl6ZVRocmVhZE1vZGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIC8vIFN0b3AgZXZlbnQgcHJvY2Vzc2luZyB0aHJlYWQKKyAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ1N0b3AocEZpbHRlcik7CisgICAgCisgICAgLy8gRnJlZSB0aW1lcgorICAgIGlmIChwRmlsdGVyLT5FdmVudEhpZ2hQcmVjaXNpb25UaW1lcikKKyAgICB7CisgICAgICAgIEV4RGVsZXRlVGltZXIocEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgcEZpbHRlci0+RXZlbnRIaWdoUHJlY2lzaW9uVGltZXIgPSBOVUxMOworICAgIH0KKworICAgIC8vIENsb3NlIGhhbmRsZSB0byBzZXR0aW5ncyByZWdpc3RyeSBrZXkKKyAgICBpZiAocEZpbHRlci0+b3RTZXR0aW5nc1JlZ0tleSkKKyAgICB7CisgICAgICAgIFp3Q2xvc2UocEZpbHRlci0+b3RTZXR0aW5nc1JlZ0tleSk7CisgICAgICAgIHBGaWx0ZXItPm90U2V0dGluZ3NSZWdLZXkgPSBOVUxMOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworI2lmIERFQlVHX0FMTE9DCitQTVNfRklMVEVSCitvdEx3ZkZpbmRGcm9tQ3VycmVudFRocmVhZCgpCit7CisgICAgUE1TX0ZJTFRFUiBwT3V0cHV0ID0gTlVMTDsKKyAgICBIQU5ETEUgQ3VyVGhyZWFkSWQgPSBQc0dldEN1cnJlbnRUaHJlYWRJZCgpOworCisgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmRmlsdGVyTGlzdExvY2spOworCisgICAgZm9yIChQTElTVF9FTlRSWSBMaW5rID0gRmlsdGVyTW9kdWxlTGlzdC5GbGluazsgTGluayAhPSAmRmlsdGVyTW9kdWxlTGlzdDsgTGluayA9IExpbmstPkZsaW5rKQorICAgIHsKKyAgICAgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgTVNfRklMVEVSLCBGaWx0ZXJNb2R1bGVMaW5rKTsKKworICAgICAgICBpZiAocEZpbHRlci0+b3RUaHJlYWRJZCA9PSBDdXJUaHJlYWRJZCkKKyAgICAgICAgeworICAgICAgICAgICAgcE91dHB1dCA9IHBGaWx0ZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJkZpbHRlckxpc3RMb2NrKTsKKworICAgIE5UX0FTU0VSVChwT3V0cHV0KTsKKyAgICByZXR1cm4gcE91dHB1dDsKK30KKyNlbmRpZgorCisjZGVmaW5lIE9UUExBVF9DQUxMT0NfVEFHICdPVERNJworI2RlZmluZSBCVUZGRVJfUE9PTF9UQUcgJ09UQlAnCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQKK290THdmUmVsZWFzZUluc3RhbmNlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBpZiAocEZpbHRlci0+b3RDdHggIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90SW5zdGFuY2VGaW5hbGl6ZShwRmlsdGVyLT5vdEN0eCk7CisgICAgICAgIHBGaWx0ZXItPm90Q3R4ID0gTlVMTDsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCisgICAgICAgIC8vIEZyZWUgYWxsIHRoZSBwb29scyBhcyB0aGVyZSBzaG91bGQgYmUgbm8gb3V0c3RhbmRpbmcKKyAgICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGUgYnVmZmVycyBhbnkgbW9yZS4KKyAgICAgICAgQnVmZmVyUG9vbCAqY3VyUG9vbCA9IHBGaWx0ZXItPm90QnVmZmVyUG9vbEhlYWQ7CisgICAgICAgIHdoaWxlIChjdXJQb29sICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclBvb2wgKm5leHRQb29sID0gY3VyUG9vbC0+TmV4dDsKKyAgICAgICAgICAgIEV4RnJlZVBvb2xXaXRoVGFnKGN1clBvb2wsIEJVRkZFUl9QT09MX1RBRyk7CisgICAgICAgICAgICBjdXJQb29sID0gbmV4dFBvb2w7CisgICAgICAgIH0KKworI2VuZGlmCisKKyNpZiBERUJVR19BTExPQworCisgICAgICAgIE5UX0FTU0VSVChwRmlsdGVyLT5vdE91dHN0YW5kaW5nQWxsb2NhdGlvbkNvdW50ID09IDApOworICAgICAgICBOVF9BU1NFUlQocEZpbHRlci0+b3RPdXRzdGFuZGluZ01lbW9yeUFsbG9jYXRlZCA9PSAwKTsKKyAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IHBGaWx0ZXItPm90T3V0U3RhbmRpbmdBbGxvY2F0aW9ucy5GbGluazsKKyAgICAgICAgd2hpbGUgKExpbmsgIT0gJnBGaWx0ZXItPm90T3V0U3RhbmRpbmdBbGxvY2F0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgT1RfQUxMT0MqIEFsbG9jSGVhZGVyID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgT1RfQUxMT0MsIExpbmspOworICAgICAgICAgICAgTGluayA9IExpbmstPkZsaW5rOworCisgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiTGVha2VkIEFsbG9jIElEOiV1IiwgQWxsb2NIZWFkZXItPklEKTsKKworICAgICAgICAgICAgRXhGcmVlUG9vbFdpdGhUYWcoQWxsb2NIZWFkZXIsIE9UUExBVF9DQUxMT0NfVEFHKTsKKyAgICAgICAgfQorCisjZW5kaWYKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKKy8vCisvLyBPcGVuVGhyZWFkIFBsYXRmb3JtIGZ1bmN0aW9ucworLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQordm9pZCAqb3RQbGF0Q0FsbG9jKHNpemVfdCBhTnVtLCBzaXplX3QgYVNpemUpCit7CisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGFOdW0gKiBhU2l6ZTsKKyNpZiBERUJVR19BTExPQworICAgIHRvdGFsU2l6ZSArPSBzaXplb2YoT1RfQUxMT0MpOworI2VuZGlmCisgICAgUFZPSUQgbWVtID0gRXhBbGxvY2F0ZVBvb2xXaXRoVGFnKFBhZ2VkUG9vbCwgdG90YWxTaXplLCBPVFBMQVRfQ0FMTE9DX1RBRyk7CisgICAgaWYgKG1lbSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkobWVtLCB0b3RhbFNpemUpOworI2lmIERFQlVHX0FMTE9DCisgICAgICAgIFBNU19GSUxURVIgcEZpbHRlciA9IG90THdmRmluZEZyb21DdXJyZW50VGhyZWFkKCk7CisgICAgICAgIC8vTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIm90UGxhdEFsbG9jKCV1KSA9IElEOiV1ICVwIiwgKFVMT05HKXRvdGFsU2l6ZSwgcEZpbHRlci0+b3RBbGxvY2F0aW9uSUQsIG1lbSk7CisKKyAgICAgICAgT1RfQUxMT0MqIEFsbG9jSGVhZGVyID0gKE9UX0FMTE9DKiltZW07CisgICAgICAgIEFsbG9jSGVhZGVyLT5MZW5ndGggPSAoTE9ORyl0b3RhbFNpemU7CisgICAgICAgIEFsbG9jSGVhZGVyLT5JRCA9IHBGaWx0ZXItPm90QWxsb2NhdGlvbklEKys7CisgICAgICAgIEluc2VydFRhaWxMaXN0KCZwRmlsdGVyLT5vdE91dFN0YW5kaW5nQWxsb2NhdGlvbnMsICZBbGxvY0hlYWRlci0+TGluayk7CisKKyAgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnBGaWx0ZXItPm90T3V0c3RhbmRpbmdBbGxvY2F0aW9uQ291bnQpOworICAgICAgICBJbnRlcmxvY2tlZEFkZCgmcEZpbHRlci0+b3RPdXRzdGFuZGluZ01lbW9yeUFsbG9jYXRlZCwgQWxsb2NIZWFkZXItPkxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBtZW0gPSAoUFVDSEFSKShtZW0pICsgc2l6ZW9mKE9UX0FMTE9DKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gbWVtOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCit2b2lkIG90UGxhdEZyZWUoX0luX29wdF8gdm9pZCAqYVB0cikKK3sKKyAgICBpZiAoYVB0ciA9PSBOVUxMKSByZXR1cm47CisjaWYgREVCVUdfQUxMT0MKKyAgICBhUHRyID0gKFBVQ0hBUikoYVB0cikgLSBzaXplb2YoT1RfQUxMT0MpOworICAgIC8vTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIm90UGxhdEZyZWUoJXApIiwgYVB0cik7CisgICAgT1RfQUxMT0MqIEFsbG9jSGVhZGVyID0gKE9UX0FMTE9DKilhUHRyOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RMd2ZGaW5kRnJvbUN1cnJlbnRUaHJlYWQoKTsKKyAgICBJbnRlcmxvY2tlZERlY3JlbWVudCgmcEZpbHRlci0+b3RPdXRzdGFuZGluZ0FsbG9jYXRpb25Db3VudCk7CisgICAgSW50ZXJsb2NrZWRBZGQoJnBGaWx0ZXItPm90T3V0c3RhbmRpbmdNZW1vcnlBbGxvY2F0ZWQsIC1BbGxvY0hlYWRlci0+TGVuZ3RoKTsKKyAgICBSZW1vdmVFbnRyeUxpc3QoJkFsbG9jSGVhZGVyLT5MaW5rKTsKKyNlbmRpZgorICAgIEV4RnJlZVBvb2xXaXRoVGFnKGFQdHIsIE9UUExBVF9DQUxMT0NfVEFHKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitCdWZmZXJQb29sKiBBbGxvY0J1ZmZlclBvb2woX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIpCit7CisgICAgLy8gQWxsb2NhdGUgdGhlIG1lbW9yeQorICAgIEJ1ZmZlclBvb2wqIGJ1ZlBvb2wgPSAoQnVmZmVyUG9vbCopRXhBbGxvY2F0ZVBvb2xXaXRoVGFnKFBhZ2VkUG9vbCwgcEZpbHRlci0+b3RCdWZmZXJQb29sQnl0ZVNpemUsIEJVRkZFUl9QT09MX1RBRyk7CisgICAgaWYgKGJ1ZlBvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGJ1ZmZlciBwb29sISIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvLyBaZXJvIG91dCB0aGUgbWVtb3J5CisgICAgUnRsWmVyb01lbW9yeShidWZQb29sLCBwRmlsdGVyLT5vdEJ1ZmZlclBvb2xCeXRlU2l6ZSk7CisKKyAgICAvLyBTZXQgYWxsIG1OZXh0IGZvciB0aGUgYnVmZmVycworICAgIG90TWVzc2FnZSogcHJldkJ1ZiA9IChvdE1lc3NhZ2UqKWJ1ZlBvb2wtPkJ1ZmZlcnM7CisgICAgZm9yICh1aW50MTZfdCBpID0gMTsgaSA8IHBGaWx0ZXItPm90QnVmZmVyUG9vbEJ1ZmZlckNvdW50OyBpKyspCisgICAgeworICAgICAgICBvdE1lc3NhZ2UqIGN1ckJ1ZiA9CisgICAgICAgICAgICAob3RNZXNzYWdlKikmYnVmUG9vbC0+QnVmZmVyc1tpICogcEZpbHRlci0+b3RCdWZmZXJTaXplXTsKKworICAgICAgICBwcmV2QnVmLT5tTmV4dCA9IGN1ckJ1ZjsKKyAgICAgICAgcHJldkJ1ZiA9IGN1ckJ1ZjsKKyAgICB9CisKKyAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiQWxsb2NhdGVkIG5ldyBidWZmZXIgcG9vbCAoJWQgYnl0ZXMpISIsIHBGaWx0ZXItPm90QnVmZmVyUG9vbEJ5dGVTaXplKTsKKworICAgIHJldHVybiBidWZQb29sOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitvdE1lc3NhZ2UqIEdldE5leHRGcmVlQnVmZmVyRnJvbVBvb2woX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIpCit7CisgICAgLy8gSW1tZWRpYXRlbHkgcmV0dXJuIGlmIHdlIGhhdmUgaGl0IG91ciBsaW1pdAorICAgIGlmIChwRmlsdGVyLT5vdEJ1ZmZlcnNMZWZ0ID09IDApIHJldHVybiBOVUxMOworCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZnJlZSBidWZmZXJzIGxlZnQsIGFsbG9jYXRlIGFub3RoZXIgcG9vbAorICAgIGlmIChwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID09IE5VTEwpCisgICAgeworICAgICAgICBCdWZmZXJQb29sICpuZXdQb29sID0gQWxsb2NCdWZmZXJQb29sKHBGaWx0ZXIpOworICAgICAgICBpZiAobmV3UG9vbCA9PSBOVUxMKSByZXR1cm4gTlVMTDsgLy8gT3V0IG9mIHBoeXNpY2FsIG1lbW9yeQorCisgICAgICAgIC8vIFB1c2ggb24gdG9wIG9mIHRoZSBwb29sIGxpc3QKKyAgICAgICAgbmV3UG9vbC0+TmV4dCA9IHBGaWx0ZXItPm90QnVmZmVyUG9vbEhlYWQ7CisgICAgICAgIHBGaWx0ZXItPm90QnVmZmVyUG9vbEhlYWQgPSBuZXdQb29sOworCisgICAgICAgIC8vIFNldCB0aGUgZnJlZSBidWZmZXIgbGlzdAorICAgICAgICBwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID0gKG90TWVzc2FnZSopbmV3UG9vbC0+QnVmZmVyczsKKyAgICB9CisKKyAgICAvLyBQb3AgdGhlIHRvcCBmcmVlIGJ1ZmZlcgorICAgIG90TWVzc2FnZSogYnVmZmVyID0gcEZpbHRlci0+b3RGcmVlQnVmZmVyczsKKyAgICBwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID0gcEZpbHRlci0+b3RGcmVlQnVmZmVycy0+bU5leHQ7CisgICAgcEZpbHRlci0+b3RCdWZmZXJzTGVmdC0tOworICAgIGJ1ZmZlci0+bU5leHQgPSBOVUxMOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgb3RQbGF0TWVzc2FnZVBvb2xJbml0KF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIHVpbnQxNl90IGFNaW5OdW1GcmVlQnVmZmVycywgc2l6ZV90IGFCdWZmZXJTaXplKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoYU1pbk51bUZyZWVCdWZmZXJzKTsKKworICAgIC8vIEluaXRpYWxpemUgcGFyYW1ldGVycworICAgIHBGaWx0ZXItPm90QnVmZmVyU2l6ZSA9ICh1aW50MTZfdClhQnVmZmVyU2l6ZTsKKyAgICBwRmlsdGVyLT5vdEJ1ZmZlclBvb2xCeXRlU2l6ZSA9ICh1aW50MTZfdCkoa1BhZ2VTaXplICoga1BhZ2VzUGVyQnVmZmVyUG9vbCk7CisgICAgcEZpbHRlci0+b3RCdWZmZXJQb29sQnVmZmVyQ291bnQgPSAodWludDE2X3QpKChwRmlsdGVyLT5vdEJ1ZmZlclBvb2xCeXRlU2l6ZSAtIHNpemVvZihCdWZmZXJQb29sKSkgLyBhQnVmZmVyU2l6ZSk7CisgICAgcEZpbHRlci0+b3RCdWZmZXJzTGVmdCA9IGtNYXhQYWdlc0ZvckJ1ZmZlclBvb2xzICogcEZpbHRlci0+b3RCdWZmZXJQb29sQnVmZmVyQ291bnQ7CisKKyAgICAvLyBBbGxvY2F0ZSBmaXJzdCBwb29sCisgICAgcEZpbHRlci0+b3RCdWZmZXJQb29sSGVhZCA9IEFsbG9jQnVmZmVyUG9vbChwRmlsdGVyKTsKKyAgICBBU1NFUlQocEZpbHRlci0+b3RCdWZmZXJQb29sSGVhZCk7IC8vIFNob3VsZCB0aGlzIEFQSSBhbGxvdyBmb3IgZmFpbHVyZSA/Pz8KKworICAgIC8vIFNldCBpbml0aWFsIGZyZWUgYnVmZmVyIGxpc3QKKyAgICBwRmlsdGVyLT5vdEZyZWVCdWZmZXJzID0gKG90TWVzc2FnZSopcEZpbHRlci0+b3RCdWZmZXJQb29sSGVhZC0+QnVmZmVyczsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorb3RNZXNzYWdlICpvdFBsYXRNZXNzYWdlUG9vbE5ldyhfSW5fIG90SW5zdGFuY2UgKm90Q3R4KQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisgICAgcmV0dXJuIEdldE5leHRGcmVlQnVmZmVyRnJvbVBvb2wocEZpbHRlcik7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgb3RQbGF0TWVzc2FnZVBvb2xGcmVlKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgsIF9Jbl8gb3RNZXNzYWdlICphQnVmZmVyKQoreworICAgIE5UX0FTU0VSVChvdEN0eCk7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gb3RDdHhUb0ZpbHRlcihvdEN0eCk7CisKKyAgICAvLyBQdXQgYnVmZmVyIGJhY2sgb24gdGhlIGxpc3QKKyAgICBhQnVmZmVyLT5tTmV4dCA9IHBGaWx0ZXItPm90RnJlZUJ1ZmZlcnM7CisgICAgcEZpbHRlci0+b3RGcmVlQnVmZmVycyA9IGFCdWZmZXI7CisgICAgcEZpbHRlci0+b3RCdWZmZXJzTGVmdCsrOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCit1aW50MTZfdCBvdFBsYXRNZXNzYWdlUG9vbE51bUZyZWVCdWZmZXJzKF9Jbl8gb3RJbnN0YW5jZSAqb3RDdHgpCit7CisgICAgTlRfQVNTRVJUKG90Q3R4KTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICByZXR1cm4gcEZpbHRlci0+b3RCdWZmZXJzTGVmdDsKK30KKworI2VuZGlmCisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCgpCit7CisgICAgTEFSR0VfSU5URUdFUiBDb3VudGVyID0gS2VRdWVyeVBlcmZvcm1hbmNlQ291bnRlcihOVUxMKTsKKyAgICByZXR1cm4gKHVpbnQzMl90KVJ0bFJhbmRvbUV4KCZDb3VudGVyLkxvd1BhcnQpOworfQorCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICAvLyBKdXN0IHVzZSB0aGUgc3lzdGVtLXByZWZlcnJlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhbGdvcml0aG0KKyAgICBOVFNUQVRVUyBzdGF0dXMgPSAKKyAgICAgICAgQkNyeXB0R2VuUmFuZG9tKAorICAgICAgICAgICAgTlVMTCwgCisgICAgICAgICAgICBhT3V0cHV0LCAKKyAgICAgICAgICAgIChVTE9ORylhT3V0cHV0TGVuZ3RoLCAKKyAgICAgICAgICAgIEJDUllQVF9VU0VfU1lTVEVNX1BSRUZFUlJFRF9STkcKKyAgICAgICAgICAgICk7CisgICAgTlRfQVNTRVJUKE5UX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkJDcnlwdEdlblJhbmRvbSBmYWlsZWQsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9GQUlMRUQ7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcoX0luXyBvdEluc3RhbmNlICpvdEN0eCkKK3sKKyAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAib3RUYXNrbGV0c1NpZ25hbFBlbmRpbmciKTsKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSBvdEN0eFRvRmlsdGVyKG90Q3R4KTsKKyAgICBvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3VGFza2xldChwRmlsdGVyKTsKK30KKworLy8gUHJvY2VzcyBhIHJvbGUgc3RhdGUgY2hhbmdlCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorVk9JRAorb3RMd2ZQcm9jZXNzUm9sZVN0YXRlQ2hhbmdlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyCisgICAgKQoreworICAgIG90RGV2aWNlUm9sZSBwcmV2Um9sZSA9IHBGaWx0ZXItPm90Q2FjaGVkUm9sZTsKKyAgICBwRmlsdGVyLT5vdENhY2hlZFJvbGUgPSBvdFRocmVhZEdldERldmljZVJvbGUocEZpbHRlci0+b3RDdHgpOworICAgIGlmIChwcmV2Um9sZSA9PSBwRmlsdGVyLT5vdENhY2hlZFJvbGUpIHJldHVybjsKKworICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBuZXcgcm9sZTogJSFvdERldmljZVJvbGUhIiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHBGaWx0ZXItPm90Q2FjaGVkUm9sZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSBjb3JyZWN0IG1lZGlhIGNvbm5lY3Qgc3RhdGUKKyAgICBvdEx3ZkluZGljYXRlTGlua1N0YXRlKAorICAgICAgICBwRmlsdGVyLCAKKyAgICAgICAgSXNBdHRhY2hlZChwRmlsdGVyLT5vdENhY2hlZFJvbGUpID8gCisgICAgICAgICAgICBNZWRpYUNvbm5lY3RTdGF0ZUNvbm5lY3RlZCA6IAorICAgICAgICAgICAgTWVkaWFDb25uZWN0U3RhdGVEaXNjb25uZWN0ZWQpOworfQorCit2b2lkIG90THdmU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzLCBfSW5fIHZvaWQgKmFDb250ZXh0KQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQTVNfRklMVEVSIHBGaWx0ZXIgPSAoUE1TX0ZJTFRFUilhQ29udGV4dDsKKyAgICBQRklMVEVSX05PVElGSUNBVElPTl9FTlRSWSBOb3RpZkVudHJ5ID0gRklMVEVSX0FMTE9DX05PVElGKHBGaWx0ZXIpOworCisgICAgLy8KKyAgICAvLyBQcm9jZXNzIHRoZSBub3RpZmljYXRpb24gaW50ZXJuYWxseQorICAgIC8vCisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQiLCBwRmlsdGVyKTsKKyAgICAgICAgb3RMd2ZSYWRpb0FkZHJlc3Nlc1VwZGF0ZWQocEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCIsIHBGaWx0ZXIpOworICAgICAgICBvdEx3ZlJhZGlvQWRkcmVzc2VzVXBkYXRlZChwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfQURERUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfQURERUQiLCBwRmlsdGVyKTsKKyAgICAgICAgb3RMd2ZSYWRpb0FkZHJlc3Nlc1VwZGF0ZWQocEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX1JFTU9WRUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCIsIHBGaWx0ZXIpOworICAgICAgICBvdEx3ZlJhZGlvQWRkcmVzc2VzVXBkYXRlZChwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX1JPTEUiLCBwRmlsdGVyKTsKKyAgICAgICAgb3RMd2ZQcm9jZXNzUm9sZVN0YXRlQ2hhbmdlKHBGaWx0ZXIpOworICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQiLCBwRmlsdGVyKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiIsIHBGaWx0ZXIpOworICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfQURERUQpICE9IDApCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiRmlsdGVyICVwIHJlY2VpdmVkIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEIiwgcEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEIiwgcEZpbHRlcik7CisgICAgfQorCisgICAgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKSAhPSAwKQorICAgIHsKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIkZpbHRlciAlcCByZWNlaXZlZCBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBIiwgcEZpbHRlcik7CisgICAgICAgIG90SXA2U2xhYWNVcGRhdGUocEZpbHRlci0+b3RDdHgsIHBGaWx0ZXItPm90QXV0b0FkZHJlc3NlcywgQVJSQVlTSVpFKHBGaWx0ZXItPm90QXV0b0FkZHJlc3NlcyksIG90SXA2Q3JlYXRlUmFuZG9tSWlkLCBOVUxMKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorICAgICAgICBvdERoY3A2U2VydmVyVXBkYXRlKHBGaWx0ZXItPm90Q3R4KTsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICAgICAgb3REaGNwNkNsaWVudFVwZGF0ZShwRmlsdGVyLT5vdEN0eCwgcEZpbHRlci0+b3REaGNwQWRkcmVzc2VzLCBBUlJBWVNJWkUocEZpbHRlci0+b3REaGNwQWRkcmVzc2VzKSwgTlVMTCk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTUxfQUREUikgIT0gMCkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJGaWx0ZXIgJXAgcmVjZWl2ZWQgT1RfQ0hBTkdFRF9USFJFQURfTUxfQUREUiIsIHBGaWx0ZXIpOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIFF1ZXVlIHRoZSBub3RpZmljYXRpb24gZm9yIGNsaWVudHMKKyAgICAvLworCisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9TVEFURV9DSEFOR0U7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLlN0YXRlQ2hhbmdlUGF5bG9hZC5GbGFncyA9IGFGbGFnczsKKworICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordm9pZCBvdEx3ZkFjdGl2ZVNjYW5DYWxsYmFjayhfSW5fIG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCwgX0luXyB2b2lkICphQ29udGV4dCkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0FDVElWRV9TQ0FOOworCisgICAgICAgIGlmIChhUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5WYWxpZCA9IFRSVUU7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzID0gKmFSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5WYWxpZCA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordm9pZCBvdEx3ZkVuZXJneVNjYW5DYWxsYmFjayhfSW5fIG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCwgX0luXyB2b2lkICphQ29udGV4dCkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0VORVJHWV9TQ0FOOworCisgICAgICAgIGlmIChhUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5WYWxpZCA9IFRSVUU7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzID0gKmFSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5WYWxpZCA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdEx3ZkluZGljYXRlTm90aWZpY2F0aW9uKE5vdGlmRW50cnkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKwordm9pZCBvdEx3ZkRpc2NvdmVyQ2FsbGJhY2soX0luXyBvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIF9Jbl8gdm9pZCAqYUNvbnRleHQpCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKWFDb250ZXh0OworICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9ESVNDT1ZFUjsKKworICAgICAgICBpZiAoYVJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuRGlzY292ZXJQYXlsb2FkLlZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkRpc2NvdmVyUGF5bG9hZC5SZXN1bHRzID0gKmFSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5EaXNjb3ZlclBheWxvYWQuVmFsaWQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3RMd2ZJbmRpY2F0ZU5vdGlmaWNhdGlvbihOb3RpZkVudHJ5KTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK3ZvaWQgb3RMd2ZDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IHVpbnQ4X3QgKmFFbmVyZ3lMaXN0LCB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworICAgIAorICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKWFDb250ZXh0OworICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9DT01NSVNTSU9ORVJfRU5FUkdZX1JFUE9SVDsKKworICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlcG9ydHMgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChhRW5lcmd5TGlzdExlbmd0aCA+IE1BWF9FTkVSR1lfUkVQT1JUX0xFTkdUSCkgYUVuZXJneUxpc3RMZW5ndGggPSBNQVhfRU5FUkdZX1JFUE9SVF9MRU5HVEg7CisgICAgICAgIAorICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRQYXlsb2FkLkNoYW5uZWxNYXNrID0gYUNoYW5uZWxNYXNrOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Db21taXNzaW9uZXJFbmVyZ3lSZXBvcnRQYXlsb2FkLkVuZXJneUxpc3RMZW5ndGggPSBhRW5lcmd5TGlzdExlbmd0aDsKKyAgICAgICAgbWVtY3B5KE5vdGlmRW50cnktPk5vdGlmLkNvbW1pc3Npb25lckVuZXJneVJlcG9ydFBheWxvYWQuRW5lcmd5TGlzdCwgYUVuZXJneUxpc3QsIGFFbmVyZ3lMaXN0TGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCit2b2lkIG90THdmQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrKHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBfSW5fIHZvaWQgKmFDb250ZXh0KQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpYUNvbnRleHQ7CisgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICBpZiAoTm90aWZFbnRyeSkKKyAgICB7CisgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSW50ZXJmYWNlR3VpZCA9IHBGaWx0ZXItPkludGVyZmFjZUd1aWQ7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0NPTU1JU1NJT05FUl9QQU5JRF9RVUVSWTsKKyAgICAgICAgCisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkNvbW1pc3Npb25lclBhbklkUXVlcnlQYXlsb2FkLlBhbklkID0gYVBhbklkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Db21taXNzaW9uZXJQYW5JZFF1ZXJ5UGF5bG9hZC5DaGFubmVsTWFzayA9IGFDaGFubmVsTWFzazsKKyAgICAgICAgCisgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCit2b2lkIG90THdmSm9pbmVyQ2FsbGJhY2sob3RFcnJvciBhRXJyb3IsIF9Jbl8gdm9pZCAqYUNvbnRleHQpCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBNU19GSUxURVIgcEZpbHRlciA9IChQTVNfRklMVEVSKWFDb250ZXh0OworICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgaWYgKE5vdGlmRW50cnkpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5Ob3RpZlR5cGUgPSBPVExXRl9OT1RJRl9KT0lORVJfQ09NUExFVEU7CisKKyAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuSm9pbmVyQ29tcGxldGVQYXlsb2FkLkVycm9yID0gYUVycm9yOworCisgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQordm9pZAorb3RMd2ZUaHJlYWRWYWx1ZUlzKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3Qga2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18odmFsdWVfZGF0YV9sZW4pIGNvbnN0IHVpbnQ4X3QqIHZhbHVlX2RhdGFfcHRyLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCB2YWx1ZV9kYXRhX2xlbgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJbJXBdIHJlY2VpdmVkIFZhbHVlIGZvciAlcyIsIHBGaWx0ZXIsIHNwaW5lbF9wcm9wX2tleV90b19jc3RyKGtleSkpOworCisgICAgaWYgKGtleSA9PSBTUElORUxfUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUKQorICAgIHsKKyAgICAgICAgdWludDhfdCBzY2FuQ2hhbm5lbDsKKyAgICAgICAgaW50OF90IG1heFJzc2k7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IHJldDsKKworICAgICAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgdmFsdWVfZGF0YV9wdHIsCisgICAgICAgICAgICB2YWx1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgICJDYyIsCisgICAgICAgICAgICAmc2NhbkNoYW5uZWwsCisgICAgICAgICAgICAmbWF4UnNzaSk7CisKKyAgICAgICAgTlRfQVNTRVJUKHJldCA+IDApOworICAgICAgICBpZiAocmV0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkZpbHRlcjogJXAsIGNvbXBsZXRlZCBlbmVyZ3kgc2NhbjogUnNzaTolZCIsIHBGaWx0ZXIsIG1heFJzc2kpOworICAgICAgICAgICAgb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZUVuZXJneVNjYW5SZXN1bHQocEZpbHRlciwgbWF4UnNzaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX1NUUkVBTV9SQVcpCisgICAgeworICAgICAgICBpZiAodmFsdWVfZGF0YV9sZW4gPCAyNTYpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdNYWNGcmFtZUNvbW1hbmQoCisgICAgICAgICAgICAgICAgcEZpbHRlciwKKyAgICAgICAgICAgICAgICBEaXNwYXRjaExldmVsLAorICAgICAgICAgICAgICAgIHZhbHVlX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgICh1aW50OF90KXZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfU1RSRUFNX0RFQlVHKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogb3V0cHV0ID0gTlVMTDsKKyAgICAgICAgVUlOVCBvdXRwdXRfbGVuID0gMDsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcmV0OworCisgICAgICAgIHJldCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICB2YWx1ZV9kYXRhX3B0ciwKKyAgICAgICAgICAgIHZhbHVlX2RhdGFfbGVuLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICZvdXRwdXQsCisgICAgICAgICAgICAmb3V0cHV0X2xlbik7CisKKyAgICAgICAgTlRfQVNTRVJUKHJldCA+IDApOworICAgICAgICBpZiAocmV0ID4gMCAmJiBvdXRwdXQgJiYgb3V0cHV0X2xlbiA8PSAoVUlOVClyZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdHJubGVuKChjaGFyKilvdXRwdXQsIG91dHB1dF9sZW4pICE9IG91dHB1dF9sZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkRFVklDRTogJXMiLCAoY2hhciopb3V0cHV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dF9sZW4gPCAxMjgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciBzdHJPdXRwdXRbMTI4XSA9IHsgMCB9OworICAgICAgICAgICAgICAgIG1lbWNweShzdHJPdXRwdXQsIG91dHB1dCwgb3V0cHV0X2xlbik7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIkRFVklDRTogJXMiLCBzdHJPdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQordm9pZAorb3RMd2ZUaHJlYWRWYWx1ZUluc2VydGVkKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQk9PTEVBTiBEaXNwYXRjaExldmVsLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3Qga2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18odmFsdWVfZGF0YV9sZW4pIGNvbnN0IHVpbnQ4X3QqIHZhbHVlX2RhdGFfcHRyLAorICAgIF9Jbl8gc3BpbmVsX3NpemVfdCB2YWx1ZV9kYXRhX2xlbgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0RFRkFVTFQsICJbJXBdIHJlY2VpdmVkIFZhbHVlIEluc2VydGVkIGZvciAlcyIsIHBGaWx0ZXIsIHNwaW5lbF9wcm9wX2tleV90b19jc3RyKGtleSkpOworCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRmlsdGVyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERpc3BhdGNoTGV2ZWwpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoa2V5KTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHZhbHVlX2RhdGFfcHRyKTsKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHZhbHVlX2RhdGFfbGVuKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi90aHJlYWQuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdEx3Zi90aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjIxYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3RocmVhZC5oCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIGZvciB0aGUgb3RMd2YgRmlsdGVyIFRocmVhZCBtb2RlLgorICovCisKKyNpZm5kZWYgX1RIUkVBRF9IXworI2RlZmluZSBfVEhSRUFEX0hfCisKKy8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGFuIG90SW5zdGFuY2UgcG9pbnRlciB0byBhIE1TX0ZJTFRFUiBwb2ludGVyCitfX2lubGluZSBQTVNfRklMVEVSIG90Q3R4VG9GaWx0ZXIoX0luXyBvdEluc3RhbmNlKiBvdEN0eCkKK3sKKyAgICByZXR1cm4gKihQTVNfRklMVEVSKikoKFBVQ0hBUilvdEN0eCAtIHNpemVvZihQTVNfRklMVEVSKSk7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBpbmRpY2F0ZSBpZiBhIHJvbGUgbWVhbnMgaXQgaXMgYXR0YWNoZWQgb3Igbm90CitfaW5saW5lIEJPT0xFQU4gSXNBdHRhY2hlZChfSW5fIG90RGV2aWNlUm9sZSByb2xlKQoreworICAgIHJldHVybiByb2xlID4gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ7Cit9CisKKy8vCisvLyBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05ESVNfU1RBVFVTIAorb3RMd2ZJbml0aWFsaXplVGhyZWFkTW9kZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlVuaW5pdGlhbGl6ZVRocmVhZE1vZGUoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApOworCisvLworLy8gQ2xlYW4gdXAgb3RJbnN0YW5jZQorLy8KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQordm9pZAorb3RMd2ZSZWxlYXNlSW5zdGFuY2UoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIKKyAgICApOworCisvLworLy8gRXZlbnQgUHJvY2Vzc2luZyBGdW5jdGlvbnMKKy8vCisKK0VYVF9DQUxMQkFDSyBvdEx3ZkV2ZW50UHJvY2Vzc2luZ1RpbWVyOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworb3RMd2ZFdmVudFByb2Nlc3NpbmdTdGFydCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nU3RvcCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdXYWl0VGltZSgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlciwKKyAgICBfSW5fIFVMT05HICAgICAgICAgICAgICAgICAgd2FpdFRpbWUKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3VGFza2xldCgKKyAgICBfSW5fIFBNU19GSUxURVIgICAgICAgICAgICAgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVBZGRyZXNzQ2hhbmdlKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiAgICAgICAgICAgICBwRmlsdGVyLAorICAgIF9Jbl8gTUlCX05PVElGSUNBVElPTl9UWVBFICBOb3RpZmljYXRpb25UeXBlLAorICAgIF9Jbl8gUElONl9BRERSICAgICAgICAgICAgICBwQWRkcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV3TmV0QnVmZmVyTGlzdHMoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBQTkVUX0JVRkZFUl9MSVNUICAgICAgIE5ldEJ1ZmZlckxpc3RzCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVOZXdNYWNGcmFtZUNvbW1hbmQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOICAgICAgICAgICAgICAgIERpc3BhdGNoTGV2ZWwsCisgICAgX0luX3JlYWRzX2J5dGVzXyhCdWZmZXJMZW5ndGgpIAorICAgICAgICAgY29uc3QgdWludDhfdCogICAgICAgICBCdWZmZXIsCisgICAgX0luXyB1aW50OF90ICAgICAgICAgICAgICAgIEJ1ZmZlckxlbmd0aAorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZkV2ZW50UHJvY2Vzc2luZ0luZGljYXRlTmV0QnVmZmVyTGlzdHNDYW5jZWxsZWQoCisgICAgX0luXyBQTVNfRklMVEVSICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCAgICAgICAgICAgICAgICAgIENhbmNlbElkCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorb3RMd2ZFdmVudFByb2Nlc3NpbmdJbmRpY2F0ZUlycCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIFBJUlAgICAgICAgSXJwCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmRXZlbnRQcm9jZXNzaW5nSW5kaWNhdGVFbmVyZ3lTY2FuUmVzdWx0KAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gQ0hBUiAgICAgICBNYXhSc3NpCisgICAgKTsKKworLy8KKy8vIE9wZW5UaHJlYWQgY2FsbGJhY2tzCisvLworCit2b2lkIG90THdmU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzLCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZSZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayhfSW5fIG90TWVzc2FnZSAqYU1lc3NhZ2UsIF9Jbl8gdm9pZCAqYUNvbnRleHQpOwordm9pZCBvdEx3ZkFjdGl2ZVNjYW5DYWxsYmFjayhfSW5fIG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCwgX0luXyB2b2lkICphQ29udGV4dCk7Cit2b2lkIG90THdmRW5lcmd5U2NhbkNhbGxiYWNrKF9Jbl8gb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0LCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZEaXNjb3ZlckNhbGxiYWNrKF9Jbl8gb3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0LCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IHVpbnQ4X3QgKmFFbmVyZ3lMaXN0LCB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoLCB2b2lkICphQ29udGV4dCk7Cit2b2lkIG90THdmQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrKHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBfSW5fIHZvaWQgKmFDb250ZXh0KTsKK3ZvaWQgb3RMd2ZKb2luZXJDYWxsYmFjayhvdEVycm9yIGFFcnJvciwgX0luXyB2b2lkICphQ29udGV4dCk7CisKKy8vCisvLyBWYWx1ZSBDYWxsYmFja3MKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlRocmVhZFZhbHVlSXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQKK290THdmVGhyZWFkVmFsdWVJbnNlcnRlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IGtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKHZhbHVlX2RhdGFfbGVuKSBjb25zdCB1aW50OF90KiB2YWx1ZV9kYXRhX3B0ciwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgdmFsdWVfZGF0YV9sZW4KKyAgICApOworCisjZW5kaWYgIC8vX1RIUkVBRF9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5jIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MGY2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdHVubmVsLmMKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBUdW5uZWwgbW9kZSAoVGhyZWFkIE1pbmlwb3J0KSBmdW5jdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBPcGVuVGhyZWFkIGxpYnJhcnkuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJ0dW5uZWwudG1oIgorCitLU1RBUlRfUk9VVElORSBvdEx3ZlR1bldvcmtlclRocmVhZDsKKworU1BJTkVMX0NNRF9IQU5ETEVSIG90THdmSXJwQ29tbWFuZEhhbmRsZXI7CisKK3R5cGVkZWYgc3RydWN0IF9TUElORUxfSVJQX0NNRF9DT05URVhUCit7CisgICAgUE1TX0ZJTFRFUiAgICAgICAgICAgICAgcEZpbHRlcjsKKyAgICBQSVJQICAgICAgICAgICAgICAgICAgICBJcnA7CisgICAgU1BJTkVMX0lSUF9DTURfSEFORExFUiAqSGFuZGxlcjsKKyAgICBzcGluZWxfdGlkX3QgICAgICAgICAgICB0aWQ7Cit9IFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQ7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05ESVNfU1RBVFVTIAorb3RMd2ZUdW5Jbml0aWFsaXplKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyCisgICAgKQoreworICAgIE5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgSEFORExFIHRocmVhZEhhbmRsZSA9IE5VTEw7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTlRfQVNTRVJUKHBGaWx0ZXItPkRldmljZUNhcGFiaWxpdGllcyAmIE9UTFdGX0RFVklDRV9DQVBfVEhSRUFEXzFfMCk7CisgICAgCisgICAgS2VJbml0aWFsaXplRXZlbnQoCisgICAgICAgICZwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWRTdG9wRXZlbnQsCisgICAgICAgIFN5bmNocm9uaXphdGlvbkV2ZW50LCAvLyBhdXRvLWNsZWFyaW5nIGV2ZW50CisgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAvLyBldmVudCBpbml0aWFsbHkgbm9uLXNpZ25hbGxlZAorICAgICAgICApOworICAgIEtlSW5pdGlhbGl6ZUV2ZW50KAorICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkQWRkcmVzc0NoYW5nZWRFdmVudCwKKyAgICAgICAgU3luY2hyb25pemF0aW9uRXZlbnQsIC8vIGF1dG8tY2xlYXJpbmcgZXZlbnQKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluaXRpYWxseSBub24tc2lnbmFsbGVkCisgICAgICAgICk7CisKKyAgICAvLyBTdGFydCB0aGUgd29ya2VyIHRocmVhZAorICAgIFN0YXR1cyA9IFBzQ3JlYXRlU3lzdGVtVGhyZWFkKAorICAgICAgICAgICAgICAgICZ0aHJlYWRIYW5kbGUsICAgICAgICAgICAgICAgICAgLy8gVGhyZWFkSGFuZGxlCisgICAgICAgICAgICAgICAgVEhSRUFEX0FMTF9BQ0NFU1MsICAgICAgICAgICAgICAvLyBEZXNpcmVkQWNjZXNzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3RBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzSGFuZGxlCisgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRJZAorICAgICAgICAgICAgICAgIG90THdmVHVuV29ya2VyVGhyZWFkLCAgICAgICAgICAgLy8gU3RhcnRSb3V0aW5lCisgICAgICAgICAgICAgICAgcEZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydENvbnRleHQKKyAgICAgICAgICAgICAgICApOworICAgIGlmICghTlRfU1VDQ0VTUyhTdGF0dXMpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJQc0NyZWF0ZVN5c3RlbVRocmVhZCBmYWlsZWQsICUhU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLy8gR3JhYiB0aGUgb2JqZWN0IHJlZmVyZW5jZSB0byB0aGUgd29ya2VyIHRocmVhZAorICAgIFN0YXR1cyA9IE9iUmVmZXJlbmNlT2JqZWN0QnlIYW5kbGUoCisgICAgICAgICAgICAgICAgdGhyZWFkSGFuZGxlLAorICAgICAgICAgICAgICAgIFRIUkVBRF9BTExfQUNDRVNTLAorICAgICAgICAgICAgICAgICpQc1RocmVhZFR5cGUsCisgICAgICAgICAgICAgICAgS2VybmVsTW9kZSwKKyAgICAgICAgICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkLAorICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICApOworICAgIGlmICghTlRfVkVSSUZZTVNHKCJPYlJlZmVyZW5jZU9iamVjdEJ5SGFuZGxlIGNhbid0IGZhaWwgd2l0aCBhIHZhbGlkIGtlcm5lbCBoYW5kbGUiLCBOVF9TVUNDRVNTKFN0YXR1cykpKQorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJPYlJlZmVyZW5jZU9iamVjdEJ5SGFuZGxlIGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgS2VTZXRFdmVudCgmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkU3RvcEV2ZW50LCBJT19OT19JTkNSRU1FTlQsIEZBTFNFKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdG8gZW5hYmxlIFJMT0MgcGFzc3Rocm91Z2gKKyAgICBTdGF0dXMgPQorICAgICAgICBvdEx3ZkNtZFNldFByb3AoCisgICAgICAgICAgICBwRmlsdGVyLAorICAgICAgICAgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICBUUlVFCisgICAgICAgICk7CisgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkVuYWJsaW5nIFJMT0MgcGFzcyB0aHJvdWdoIGZhaWxlZCwgJSFTVEFUVVMhIiwgU3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvLyBUT0RPIC0gUXVlcnkgb3RoZXIgdmFsdWVzIGFuZCBjYXBhYmlsaXRpZXMKKworZXJyb3I6CisKKyAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICB7CisgICAgICAgIG90THdmVHVuVW5pbml0aWFsaXplKHBGaWx0ZXIpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TkRJUyhEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlR1blVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICkKK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgLy8gQ2xlYW4gdXAgd29ya2VyIHRocmVhZAorICAgIGlmIChwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWQpCisgICAgeworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiU3RvcHBpbmcgdHVubmVsIHdvcmtlciB0aHJlYWQgYW5kIHdhaXRpbmcgZm9yIGl0IHRvIGNvbXBsZXRlLiIpOworCisgICAgICAgIC8vIFNlbmQgZXZlbnQgdG8gc2h1dGRvd24gd29ya2VyIHRocmVhZAorICAgICAgICBLZVNldEV2ZW50KCZwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWRTdG9wRXZlbnQsIDAsIEZBTFNFKTsKKworICAgICAgICAvLyBXYWl0IGZvciB3b3JrZXIgdGhyZWFkIHRvIGZpbmlzaAorICAgICAgICBLZVdhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICBwRmlsdGVyLT5UdW5Xb3JrZXJUaHJlYWQsCisgICAgICAgICAgICBFeGVjdXRpdmUsCisgICAgICAgICAgICBLZXJuZWxNb2RlLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICApOworCisgICAgICAgIC8vIEZyZWUgd29ya2VyIHRocmVhZAorICAgICAgICBPYkRlcmVmZXJlbmNlT2JqZWN0KHBGaWx0ZXItPlR1bldvcmtlclRocmVhZCk7CisgICAgICAgIHBGaWx0ZXItPlR1bldvcmtlclRocmVhZCA9IE5VTEw7CisKKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIlR1bm5lbCB3b3JrZXIgdGhyZWFkIGNsZWFuZWQgdXAuIik7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCisvLyBXb3JrZXIgdGhyZWFkIGZvciBwcm9jZXNzaW5nIGFsbCB0dW5uZWwgZXZlbnRzCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitvdEx3ZlR1bldvcmtlclRocmVhZCgKKyAgICBQVk9JRCAgIENvbnRleHQKKyAgICApCit7CisgICAgUE1TX0ZJTFRFUiBwRmlsdGVyID0gKFBNU19GSUxURVIpQ29udGV4dDsKKyAgICBOVF9BU1NFUlQocEZpbHRlcik7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEtFVkVOVCBXYWl0RXZlbnRzW10gPSAKKyAgICB7IAorICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkU3RvcEV2ZW50LAorICAgICAgICAmcEZpbHRlci0+VHVuV29ya2VyVGhyZWFkQWRkcmVzc0NoYW5nZWRFdmVudAorICAgIH07CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgICAvLyBXYWl0IGZvciBldmVudCB0byBzdG9wIG9yIHByb2Nlc3MgZXZlbnQgdG8gZmlyZQorICAgICAgICBOVFNUQVRVUyBzdGF0dXMgPSAKKyAgICAgICAgICAgIEtlV2FpdEZvck11bHRpcGxlT2JqZWN0cygKKyAgICAgICAgICAgICAgICBBUlJBWVNJWkUoV2FpdEV2ZW50cyksIAorICAgICAgICAgICAgICAgIChQVk9JRCopV2FpdEV2ZW50cywgCisgICAgICAgICAgICAgICAgV2FpdEFueSwgCisgICAgICAgICAgICAgICAgRXhlY3V0aXZlLCAKKyAgICAgICAgICAgICAgICBLZXJuZWxNb2RlLCAKKyAgICAgICAgICAgICAgICBGQUxTRSwgCisgICAgICAgICAgICAgICAgTlVMTCwgCisgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgLy8gSWYgaXQgaXMgdGhlIGZpcnN0IGV2ZW50LCB0aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duLiBFeGl0IGxvb3AgYW5kIHRlcm1pbmF0ZSB0aHJlYWQKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUVVNfV0FJVF8wKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiUmVjZWl2ZWQgdHVubmVsIHdvcmtlciB0aHJlYWQgc2h1dGRvd24gZXZlbnQuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVFVTX1dBSVRfMCArIDEpIC8vIFR1bldvcmtlclRocmVhZEFkZHJlc3NDaGFuZ2VkRXZlbnQgZmlyZWQKKyAgICAgICAgeworICAgICAgICAgICAgUFZPSUQgRGF0YUJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2YWx1ZV9kYXRhX3B0ciA9IE5VTEw7CisgICAgICAgICAgICBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUXVlcnkgdGhlIGN1cnJlbnQgYWRkcmVzc2VzCisgICAgICAgICAgICBzdGF0dXMgPSAKKyAgICAgICAgICAgICAgICBvdEx3ZkNtZEdldFByb3AoCisgICAgICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICZEYXRhQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICAgICAgICZ2YWx1ZV9kYXRhX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgJnZhbHVlX2RhdGFfbGVuKTsKKyAgICAgICAgICAgIGlmIChOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgYU5vdGlmRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIG90THdmVHVuQWRkcmVzc2VzVXBkYXRlZChwRmlsdGVyLCB2YWx1ZV9kYXRhX3B0ciwgdmFsdWVfZGF0YV9sZW4sICZhTm90aWZGbGFncyk7CisKKyAgICAgICAgICAgICAgICAvLyBTZW5kIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgIGlmIChhTm90aWZGbGFncyAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vdGlmRW50cnkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuTm90aWZUeXBlID0gT1RMV0ZfTk9USUZfU1RBVEVfQ0hBTkdFOworICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuU3RhdGVDaGFuZ2VQYXlsb2FkLkZsYWdzID0gYU5vdGlmRmxhZ3M7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nV2FybmluZyhEUklWRVJfREVGQVVMVCwgIkZhaWxlZCB0byBxdWVyeSBhZGRyZXNzZXMsICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChEYXRhQnVmZmVyKSBGSUxURVJfRlJFRV9NRU0oRGF0YUJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiVW5leHBlY3RlZCB3YWl0IHJlc3VsdCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBzVGVybWluYXRlU3lzdGVtVGhyZWFkKFNUQVRVU19TVUNDRVNTKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK1ZPSUQKK290THdmSXJwQ29tbWFuZEhhbmRsZXIoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQVk9JRCBDb250ZXh0LAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGF0YUxlbmd0aCkgY29uc3QgdWludDhfdCogRGF0YSwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgRGF0YUxlbmd0aAorICAgICkKK3sKKyAgICBTUElORUxfSVJQX0NNRF9DT05URVhUKiBDbWRDb250ZXh0ID0gKFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQqKUNvbnRleHQ7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OICBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oQ21kQ29udGV4dC0+SXJwKTsKKyAgICAKKyAgICBVTE9ORyBJb0NvbnRyb2xDb2RlID0gSXJwU3AtPlBhcmFtZXRlcnMuRGV2aWNlSW9Db250cm9sLklvQ29udHJvbENvZGU7CisgICAgUFZPSUQgT3V0QnVmZmVyID0gQ21kQ29udGV4dC0+SXJwLT5Bc3NvY2lhdGVkSXJwLlN5c3RlbUJ1ZmZlcjsKKyAgICBVTE9ORyBPdXRCdWZmZXJMZW5ndGggPSBJcnBTcC0+UGFyYW1ldGVycy5EZXZpY2VJb0NvbnRyb2wuT3V0cHV0QnVmZmVyTGVuZ3RoOworICAgIFVMT05HIE9yaWdPdXRCdWZmZXJMZW5ndGggPSBPdXRCdWZmZXJMZW5ndGg7CisKKyAgICBOVFNUQVRVUyBzdGF0dXM7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBGaWx0ZXIpOworCisgICAgLy8gQ2xlYXIgdGhlIGNhbmNlbCByb3V0aW5lCisgICAgSW9TZXRDYW5jZWxSb3V0aW5lKENtZENvbnRleHQtPklycCwgTlVMTCk7CisgICAgCisgICAgaWYgKERhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19DQU5DRUxMRUQ7CisgICAgICAgIE91dEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKENvbW1hbmQgPT0gU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTICYmIEtleSA9PSBTUElORUxfUFJPUF9MQVNUX1NUQVRVUykKKyAgICB7CisgICAgICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxfc3RhdHVzID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgc3BpbmVsX3NzaXplX3QgcGFja2VkX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soRGF0YSwgRGF0YUxlbmd0aCwgImkiLCAmc3BpbmVsX3N0YXR1cyk7CisgICAgICAgIGlmIChwYWNrZWRfbGVuIDwgMCB8fCAoVUxPTkcpcGFja2VkX2xlbiA+IERhdGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gVGhyZWFkRXJyb3JUb050c3RhdHVzKFNwaW5lbFN0YXR1c1RvVGhyZWFkRXJyb3Ioc3BpbmVsX3N0YXR1cykpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKENtZENvbnRleHQtPkhhbmRsZXIpCisgICAgeworICAgICAgICBzdGF0dXMgPSBDbWRDb250ZXh0LT5IYW5kbGVyKEtleSwgRGF0YSwgRGF0YUxlbmd0aCwgT3V0QnVmZmVyLCAmT3V0QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisgICAgZWxzZSAvLyBObyBoYW5kbGVyLCBzbyBubyBvdXRwdXQKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgICAgICBPdXRCdWZmZXJMZW5ndGggPSAwOworICAgIH0KKworICAgIC8vIENsZWFyIGFueSBsZWZ0b3ZlciBvdXRwdXQgYnVmZmVyCisgICAgaWYgKE91dEJ1ZmZlckxlbmd0aCA8IE9yaWdPdXRCdWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICBSdGxaZXJvTWVtb3J5KChQVUNIQVIpT3V0QnVmZmVyICsgT3V0QnVmZmVyTGVuZ3RoLCBPcmlnT3V0QnVmZmVyTGVuZ3RoIC0gT3V0QnVmZmVyTGVuZ3RoKTsKKyAgICB9CisKKyAgICBMb2dWZXJib3NlKERSSVZFUl9JT0NUTCwgIkNvbXBsZXRpbmcgSXJwPSVwLCB3aXRoICUhU1RBVFVTISBmb3IgJXMgKE91dDoldSkiLCAKKyAgICAgICAgICAgICAgICBDbWRDb250ZXh0LT5JcnAsIHN0YXR1cywgSW9DdGxTdHJpbmcoSW9Db250cm9sQ29kZSksIE91dEJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBDb21wbGV0ZSB0aGUgSVJQCisgICAgQ21kQ29udGV4dC0+SXJwLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbiA9IE91dEJ1ZmZlckxlbmd0aDsKKyAgICBDbWRDb250ZXh0LT5JcnAtPklvU3RhdHVzLlN0YXR1cyA9IHN0YXR1czsKKyAgICBJb0NvbXBsZXRlUmVxdWVzdChDbWRDb250ZXh0LT5JcnAsIElPX05PX0lOQ1JFTUVOVCk7CisKKyAgICBGSUxURVJfRlJFRV9NRU0oQ29udGV4dCk7Cit9CisKK19GdW5jdGlvbl9jbGFzc18oRFJJVkVSX0NBTkNFTCkKK19SZXF1aXJlc19sb2NrX2hlbGRfKF9HbG9iYWxfY2FuY2VsX3NwaW5fbG9ja18pCitfUmVsZWFzZXNfbG9ja18oX0dsb2JhbF9jYW5jZWxfc3Bpbl9sb2NrXykKK19JUlFMX3JlcXVpcmVzX21pbl8oRElTUEFUQ0hfTEVWRUwpCitfSVJRTF9yZXF1aXJlc18oRElTUEFUQ0hfTEVWRUwpCitWT0lECitvdEx3ZlR1bkNhbmNlbElycCgKKyAgICBfSW5vdXRfIHN0cnVjdCBfREVWSUNFX09CSkVDVCAqRGV2aWNlT2JqZWN0LAorICAgIF9Jbm91dF8gX0lSUUxfdXNlc19jYW5jZWxfIHN0cnVjdCBfSVJQICpJcnAKKyAgICApCit7CisgICAgUElPX1NUQUNLX0xPQ0FUSU9OIElycFN0YWNrID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbihJcnApOworICAgIFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQqIENtZENvbnRleHQgPSAoU1BJTkVMX0lSUF9DTURfQ09OVEVYVCopSXJwU3RhY2stPkNvbnRleHQ7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKERldmljZU9iamVjdCk7CisKKyAgICBMb2dGdW5jRW50cnlNc2coRFJJVkVSX0lPQ1RMLCAiSXJwPSVwIiwgSXJwKTsKKworICAgIElvUmVsZWFzZUNhbmNlbFNwaW5Mb2NrKElycC0+Q2FuY2VsSXJxbCk7CisKKyAgICAvLyBUcnkgdG8gY2FuY2VsIHBlbmRpbmcgY29tbWFuZAorICAgIG90THdmQ21kQ2FuY2VsKAorICAgICAgICBDbWRDb250ZXh0LT5wRmlsdGVyLCAKKyAgICAgICAgKElycC0+Q2FuY2VsSXJxbCA9PSBESVNQQVRDSF9MRVZFTCkgPyBUUlVFIDogRkFMU0UsIAorICAgICAgICBDbWRDb250ZXh0LT50aWQpOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0lPQ1RMKTsKK30KKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK290THdmVHVuU2VuZENvbW1hbmRGb3JJcnAoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBQSVJQIElycCwKKyAgICBfSW5fb3B0XyBTUElORUxfSVJQX0NNRF9IQU5ETEVSICpIYW5kbGVyLAorICAgIF9Jbl8gVUlOVCBDb21tYW5kLAorICAgIF9Jbl8gc3BpbmVsX3Byb3Bfa2V5X3QgS2V5LAorICAgIF9Jbl8gVUxPTkcgTWF4RGF0YUxlbmd0aCwKKyAgICBfSW5fb3B0XyBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgCisgICAgLi4uCisgICAgKQoreworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQgKnBDb250ZXh0ID0gTlVMTDsKKyAgICBQSU9fU1RBQ0tfTE9DQVRJT04gSXJwU3RhY2sgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKElycCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgc3RydWN0dXJlCisgICAgcENvbnRleHQgPSBGSUxURVJfQUxMT0NfTUVNKHBGaWx0ZXItPkZpbHRlckhhbmRsZSwgc2l6ZW9mKFNQSU5FTF9JUlBfQ01EX0NPTlRFWFQpKTsKKyAgICBpZiAocENvbnRleHQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRmFpbGVkIHRvIGFsbG9jYXRlIGlycCBjbWQgY29udGV4dCIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcENvbnRleHQtPnBGaWx0ZXIgPSBwRmlsdGVyOworICAgIHBDb250ZXh0LT5JcnAgPSBJcnA7CisgICAgcENvbnRleHQtPkhhbmRsZXIgPSBIYW5kbGVyOworCisgICAgTlRfQVNTRVJUKElycFN0YWNrLT5Db250ZXh0ID09IE5VTEwpOworICAgIElycFN0YWNrLT5Db250ZXh0ID0gcENvbnRleHQ7CisKKyAgICAvLyBTZXQgdGhlIGNhbmNlbCByb3V0aW5lCisgICAgSW9TZXRDYW5jZWxSb3V0aW5lKElycCwgb3RMd2ZUdW5DYW5jZWxJcnApOworICAgIAorICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBwYWNrX2Zvcm1hdCk7CisgICAgc3RhdHVzID0gCisgICAgICAgIG90THdmQ21kU2VuZEFzeW5jVigKKyAgICAgICAgICAgIHBGaWx0ZXIsIAorICAgICAgICAgICAgb3RMd2ZJcnBDb21tYW5kSGFuZGxlciwgCisgICAgICAgICAgICBwQ29udGV4dCwgCisgICAgICAgICAgICAmcENvbnRleHQtPnRpZCwKKyAgICAgICAgICAgIENvbW1hbmQsIAorICAgICAgICAgICAgS2V5LCAKKyAgICAgICAgICAgIE1heERhdGFMZW5ndGgsIAorICAgICAgICAgICAgcGFja19mb3JtYXQsIAorICAgICAgICAgICAgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgLy8gUmVtb3ZlIHRoZSBoYW5kbGVyIGVudHJ5IGZyb20gdGhlIGxpc3QKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIC8vIENsZWFyIHRoZSBjYW5jZWwgcm91dGluZQorICAgICAgICBJb1NldENhbmNlbFJvdXRpbmUoSXJwLCBOVUxMKTsKKworICAgICAgICBGSUxURVJfRlJFRV9NRU0ocENvbnRleHQpOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlR1blZhbHVlSXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKQoreworICAgIHVpbnQzMl90IGFOb3RpZkZsYWdzID0gMDsKKworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIlslcF0gcmVjZWl2ZWQgVmFsdWUgZm9yICVzIiwgcEZpbHRlciwgc3BpbmVsX3Byb3Bfa2V5X3RvX2NzdHIoa2V5KSk7CisKKyAgICBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX05FVF9ST0xFKQorICAgIHsKKyAgICAgICAgdWludDhfdCB2YWx1ZTsKKyAgICAgICAgc3BpbmVsX2RhdGF0eXBlX3VucGFjayh2YWx1ZV9kYXRhX3B0ciwgdmFsdWVfZGF0YV9sZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLCAmdmFsdWUpOworCisgICAgICAgIExvZ0luZm8oRFJJVkVSX0RFRkFVTFQsICJJbnRlcmZhY2UgJSFHVUlEISBuZXcgc3BpbmVsIHJvbGU6ICV1IiwgJnBGaWx0ZXItPkludGVyZmFjZUd1aWQsIHZhbHVlKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSBjb3JyZWN0IG1lZGlhIGNvbm5lY3Qgc3RhdGUKKyAgICAgICAgb3RMd2ZJbmRpY2F0ZUxpbmtTdGF0ZSgKKyAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICB2YWx1ZSA+IFNQSU5FTF9ORVRfUk9MRV9ERVRBQ0hFRCA/CisgICAgICAgICAgICBNZWRpYUNvbm5lY3RTdGF0ZUNvbm5lY3RlZCA6CisgICAgICAgICAgICBNZWRpYUNvbm5lY3RTdGF0ZURpc2Nvbm5lY3RlZCk7CisKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9ST0xFOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfSVBWNl9MTF9BRERSKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfTkVUX1BBUlRJVElPTl9JRCkKKyAgICB7CisgICAgICAgIC8vIFNldCBmbGFnIHRvIGluZGljYXRlIHdlIHNob3VsZCBzZW5kIGEgbm90aWZpY2F0aW9uCisgICAgICAgIGFOb3RpZkZsYWdzID0gT1RfQ0hBTkdFRF9USFJFQURfUEFSVElUSU9OX0lEOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUjsKKyAgICB9CisgICAgZWxzZSBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX0lQVjZfQUREUkVTU19UQUJMRSkKKyAgICB7CisgICAgICAgIEtlU2V0RXZlbnQoJnBGaWx0ZXItPlR1bldvcmtlclRocmVhZEFkZHJlc3NDaGFuZ2VkRXZlbnQsIElPX05PX0lOQ1JFTUVOVCwgRkFMU0UpOworICAgIH0KKyAgICBlbHNlIGlmIChrZXkgPT0gU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX1RBQkxFKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyAtIFVwZGF0ZSBjYWNoZWQgY2hpbGRyZW4KKyAgICAgICAgLy8gVE9ETyAtIFNlbmQgbm90aWZpY2F0aW9uCisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTKQorICAgIHsKKyAgICAgICAgLy8gVE9ETyAtIFNsYWFjCisKKyAgICAgICAgLy8gU2V0IGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNlbmQgYSBub3RpZmljYXRpb24KKyAgICAgICAgYU5vdGlmRmxhZ3MgPSBPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBOworICAgIH0KKyAgICBlbHNlIGlmICgoa2V5ID09IFNQSU5FTF9QUk9QX1NUUkVBTV9ORVQpIHx8IChrZXkgPT0gU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSkpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBmcmFtZV9wdHIgPSBOVUxMOworICAgICAgICBVSU5UIGZyYW1lX2xlbiA9IDA7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IHJldDsKKworICAgICAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgdmFsdWVfZGF0YV9wdHIsCisgICAgICAgICAgICB2YWx1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fUyBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgJmZyYW1lX3B0ciwKKyAgICAgICAgICAgICZmcmFtZV9sZW4sCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgTlRfQVNTRVJUKHJldCA+IDApOworICAgICAgICBpZiAocmV0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMd2ZUdW5SZWNlaXZlSXA2UGFja2V0KAorICAgICAgICAgICAgICAgIHBGaWx0ZXIsCisgICAgICAgICAgICAgICAgRGlzcGF0Y2hMZXZlbCwKKyAgICAgICAgICAgICAgICAoU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSA9PSBrZXkpID8gRkFMU0UgOiBUUlVFLAorICAgICAgICAgICAgICAgIGZyYW1lX3B0ciwKKyAgICAgICAgICAgICAgICBmcmFtZV9sZW4pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSkKKyAgICB7CisgICAgICAgIC8vIFRPRE8gLSBJZiBwZW5kaW5nIHNjYW4sIHNlbmQgbm90aWZpY2F0aW9uIG9mIGNvbXBsZXRpb24KKyAgICB9CisgICAgZWxzZSBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX1NUUkVBTV9SQVcpCisgICAgeworICAgICAgICAvLyBNYXkgYmUgdXNlZCBpbiB0aGUgZnV0dXJlCisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9TVFJFQU1fREVCVUcpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBvdXRwdXQgPSBOVUxMOworICAgICAgICBVSU5UIG91dHB1dF9sZW4gPSAwOworICAgICAgICBzcGluZWxfc3NpemVfdCByZXQ7CisKKyAgICAgICAgcmV0ID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgIHZhbHVlX2RhdGFfcHRyLAorICAgICAgICAgICAgdmFsdWVfZGF0YV9sZW4sCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgJm91dHB1dCwKKyAgICAgICAgICAgICZvdXRwdXRfbGVuKTsKKworICAgICAgICBOVF9BU1NFUlQocmV0ID4gMCk7CisgICAgICAgIGlmIChyZXQgPiAwICYmIG91dHB1dCAmJiBvdXRwdXRfbGVuIDw9IChVSU5UKXJldCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cm5sZW4oKGNoYXIqKW91dHB1dCwgb3V0cHV0X2xlbikgIT0gb3V0cHV0X2xlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiREVWSUNFOiAlcyIsIChjaGFyKilvdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0X2xlbiA8IDEyOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFyIHN0ck91dHB1dFsxMjhdID0geyAwIH07CisgICAgICAgICAgICAgICAgbWVtY3B5KHN0ck91dHB1dCwgb3V0cHV0LCBvdXRwdXRfbGVuKTsKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiREVWSUNFOiAlcyIsIHN0ck91dHB1dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZW5kIG5vdGlmaWNhdGlvbgorICAgIGlmIChhTm90aWZGbGFncyAhPSAwKQorICAgIHsKKyAgICAgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICAgICAgaWYgKE5vdGlmRW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuTm90aWZUeXBlID0gT1RMV0ZfTk9USUZfU1RBVEVfQ0hBTkdFOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuU3RhdGVDaGFuZ2VQYXlsb2FkLkZsYWdzID0gYU5vdGlmRmxhZ3M7CisKKyAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlR1blZhbHVlSW5zZXJ0ZWQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeU1zZyhEUklWRVJfREVGQVVMVCwgIlslcF0gcmVjZWl2ZWQgVmFsdWUgSW5zZXJ0ZWQgZm9yICVzIiwgcEZpbHRlciwgc3BpbmVsX3Byb3Bfa2V5X3RvX2NzdHIoa2V5KSk7CisKKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBGaWx0ZXIpOworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoRGlzcGF0Y2hMZXZlbCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUih2YWx1ZV9kYXRhX3B0cik7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUih2YWx1ZV9kYXRhX2xlbik7CisKKyAgICBpZiAoa2V5ID09IFNQSU5FTF9QUk9QX01BQ19TQ0FOX0JFQUNPTikKKyAgICB7CisgICAgICAgIFBGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZIE5vdGlmRW50cnkgPSBGSUxURVJfQUxMT0NfTk9USUYocEZpbHRlcik7CisgICAgICAgIGlmIChOb3RpZkVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBSdGxaZXJvTWVtb3J5KE5vdGlmRW50cnksIHNpemVvZihGSUxURVJfTk9USUZJQ0FUSU9OX0VOVFJZKSk7CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5JbnRlcmZhY2VHdWlkID0gcEZpbHRlci0+SW50ZXJmYWNlR3VpZDsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLk5vdGlmVHlwZSA9IE9UTFdGX05PVElGX0FDVElWRV9TQ0FOOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuVmFsaWQgPSBUUlVFOworCisgICAgICAgICAgICBjb25zdCB1aW50OF90ICphRXh0QWRkciA9IE5VTEw7CisgICAgICAgICAgICBjb25zdCB1aW50OF90ICphRXh0UGFuSWQgPSBOVUxMOworICAgICAgICAgICAgY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lID0gTlVMTDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB4cGFuaWRfbGVuID0gMDsKKworICAgICAgICAgICAgaWYgKHRyeV9zcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgIHZhbHVlX2RhdGFfcHRyLAorICAgICAgICAgICAgICAgIHZhbHVlX2RhdGFfbGVuLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfUygKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMXzgwMl8xNV80X0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMV9TLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfTkVUX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMV9TCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAmTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAmTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tUnNzaSwKKyAgICAgICAgICAgICAgICAmYUV4dEFkZHIsCisgICAgICAgICAgICAgICAgTlVMTCwgLy8gc2FkZHIgKGRvbid0IGNhcmUpCisgICAgICAgICAgICAgICAgJk5vdGlmRW50cnktPk5vdGlmLkFjdGl2ZVNjYW5QYXlsb2FkLlJlc3VsdHMubVBhbklkLAorICAgICAgICAgICAgICAgICZOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzLm1McWksCisgICAgICAgICAgICAgICAgTlVMTCwgLy8gcHJvdG8gKGRvbid0IGNhcmUpCisgICAgICAgICAgICAgICAgTlVMTCwgLy8gZmxhZ3MgKGRvbid0IGNhcmUpCisgICAgICAgICAgICAgICAgJmFOZXR3b3JrTmFtZSwKKyAgICAgICAgICAgICAgICAmYUV4dFBhbklkLAorICAgICAgICAgICAgICAgICZ4cGFuaWRfbGVuCisgICAgICAgICAgICApICYmCisgICAgICAgICAgICAgICAgYUV4dEFkZHIgIT0gTlVMTCAmJiBhRXh0UGFuSWQgIT0gTlVMTCAmJiBhTmV0d29ya05hbWUgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIHhwYW5pZF9sZW4gPT0gT1RfRVhUX1BBTl9JRF9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbWNweV9zKE5vdGlmRW50cnktPk5vdGlmLkFjdGl2ZVNjYW5QYXlsb2FkLlJlc3VsdHMubUV4dEFkZHJlc3MubTgsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzLm1FeHRBZGRyZXNzLm04KSwKKyAgICAgICAgICAgICAgICAgICAgYUV4dEFkZHIsIHNpemVvZihvdEV4dEFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHlfcyhOb3RpZkVudHJ5LT5Ob3RpZi5BY3RpdmVTY2FuUGF5bG9hZC5SZXN1bHRzLm1FeHRlbmRlZFBhbklkLm04LAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tRXh0ZW5kZWRQYW5JZC5tOCksCisgICAgICAgICAgICAgICAgICAgIGFFeHRQYW5JZCwgc2l6ZW9mKG90RXh0ZW5kZWRQYW5JZCkpOworICAgICAgICAgICAgICAgIHN0cmNweV9zKE5vdGlmRW50cnktPk5vdGlmLkFjdGl2ZVNjYW5QYXlsb2FkLlJlc3VsdHMubU5ldHdvcmtOYW1lLm04LAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoTm90aWZFbnRyeS0+Tm90aWYuQWN0aXZlU2NhblBheWxvYWQuUmVzdWx0cy5tTmV0d29ya05hbWUubTgpLAorICAgICAgICAgICAgICAgICAgICBhTmV0d29ya05hbWUpOworICAgICAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRklMVEVSX0ZSRUVfTUVNKE5vdGlmRW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGtleSA9PSBTUElORUxfUFJPUF9NQUNfRU5FUkdZX1NDQU5fUkVTVUxUKQorICAgIHsKKyAgICAgICAgUEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkgTm90aWZFbnRyeSA9IEZJTFRFUl9BTExPQ19OT1RJRihwRmlsdGVyKTsKKyAgICAgICAgaWYgKE5vdGlmRW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJ0bFplcm9NZW1vcnkoTm90aWZFbnRyeSwgc2l6ZW9mKEZJTFRFUl9OT1RJRklDQVRJT05fRU5UUlkpKTsKKyAgICAgICAgICAgIE5vdGlmRW50cnktPk5vdGlmLkludGVyZmFjZUd1aWQgPSBwRmlsdGVyLT5JbnRlcmZhY2VHdWlkOworICAgICAgICAgICAgTm90aWZFbnRyeS0+Tm90aWYuTm90aWZUeXBlID0gT1RMV0ZfTk9USUZfRU5FUkdZX1NDQU47CisgICAgICAgICAgICBOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5WYWxpZCA9IFRSVUU7CisKKyAgICAgICAgICAgIGlmICh0cnlfc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICB2YWx1ZV9kYXRhX3B0ciwKKyAgICAgICAgICAgICAgICB2YWx1ZV9kYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAiQ2MiLAorICAgICAgICAgICAgICAgICZOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzLm1DaGFubmVsLAorICAgICAgICAgICAgICAgICZOb3RpZkVudHJ5LT5Ob3RpZi5FbmVyZ3lTY2FuUGF5bG9hZC5SZXN1bHRzLm1NYXhSc3NpCisgICAgICAgICAgICApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90THdmSW5kaWNhdGVOb3RpZmljYXRpb24oTm90aWZFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRklMVEVSX0ZSRUVfTUVNKE5vdGlmRW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5oIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290THdmL3R1bm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMTEyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3RMd2YvdHVubmVsLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmdW5jdGlvbnMgZm9yIHRoZSBvdEx3ZiBGaWx0ZXIgVHVubmVsIG1vZGUuCisgKi8KKworI2lmbmRlZiBfVFVOTkVMX0hfCisjZGVmaW5lIF9UVU5ORUxfSF8KKworLy8KKy8vIEluaXRpYWxpemF0aW9uCisvLworCitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitORElTX1NUQVRVUyAKK290THdmVHVuSW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK3ZvaWQgCitvdEx3ZlR1blVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlcgorICAgICk7CisKKy8vCisvLyBJcnAgQ29tbWFuZHMKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitvdEx3ZlR1blNlbmRDb21tYW5kRm9ySXJwKAorICAgIF9Jbl8gUE1TX0ZJTFRFUiBwRmlsdGVyLAorICAgIF9Jbl8gUElSUCBJcnAsCisgICAgX0luX29wdF8gU1BJTkVMX0lSUF9DTURfSEFORExFUiAqSGFuZGxlciwKKyAgICBfSW5fIFVJTlQgQ29tbWFuZCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IEtleSwKKyAgICBfSW5fIFVMT05HIE1heERhdGFMZW5ndGgsCisgICAgX0luX29wdF8gY29uc3QgY2hhciAqcGFja19mb3JtYXQsIAorICAgIC4uLgorICAgICk7CisKKy8vCisvLyBWYWx1ZSBDYWxsYmFja3MKKy8vCisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCit2b2lkCitvdEx3ZlR1blZhbHVlSXMoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBzcGluZWxfcHJvcF9rZXlfdCBrZXksCisgICAgX0luX3JlYWRzX2J5dGVzXyh2YWx1ZV9kYXRhX2xlbikgY29uc3QgdWludDhfdCogdmFsdWVfZGF0YV9wdHIsCisgICAgX0luXyBzcGluZWxfc2l6ZV90IHZhbHVlX2RhdGFfbGVuCisgICAgKTsKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQKK290THdmVHVuVmFsdWVJbnNlcnRlZCgKKyAgICBfSW5fIFBNU19GSUxURVIgcEZpbHRlciwKKyAgICBfSW5fIEJPT0xFQU4gRGlzcGF0Y2hMZXZlbCwKKyAgICBfSW5fIHNwaW5lbF9wcm9wX2tleV90IGtleSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKHZhbHVlX2RhdGFfbGVuKSBjb25zdCB1aW50OF90KiB2YWx1ZV9kYXRhX3B0ciwKKyAgICBfSW5fIHNwaW5lbF9zaXplX3QgdmFsdWVfZGF0YV9sZW4KKyAgICApOworCisvLyBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gcmVjZWl2aW5nIGEgU3BpbmVsIElwNiBwYWNrZXQgY29tbWFuZAorX0lSUUxfcmVxdWlyZXNfbWF4XyhESVNQQVRDSF9MRVZFTCkKK3ZvaWQgCitvdEx3ZlR1blJlY2VpdmVJcDZQYWNrZXQoCisgICAgX0luXyBQTVNfRklMVEVSIHBGaWx0ZXIsCisgICAgX0luXyBCT09MRUFOIERpc3BhdGNoTGV2ZWwsCisgICAgX0luXyBCT09MRUFOIFNlY3VyZSwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEJ1ZmZlckxlbmd0aCkgY29uc3QgdWludDhfdCogQnVmZmVyLAorICAgIF9Jbl8gVUlOVCBCdWZmZXJMZW5ndGgKKyAgICApOworCisjZW5kaWYgIC8vX1RVTk5FTF9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290Tm9kZUFwaS9kbGxtYWluLmNwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvZGxsbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZTJmNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvZGxsbWFpbi5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByZWNvbXAuaCIKKyNpbmNsdWRlICJkbGxtYWluLnRtaCIKKworQk9PTCAKK19fc3RkY2FsbCAKK0RsbE1haW4oCisgICAgSElOU1RBTkNFIGhpbnN0RGxsLCAKKyAgICBEV09SRCBkd1JlYXNvbiwgCisgICAgTFBWT0lEIC8qIGxwdlJlc2VydmVkICovCisgICAgKQoreworICAgIHN3aXRjaCAoZHdSZWFzb24pCisgICAgeworICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzKGhpbnN0RGxsKTsKKyAgICAgICAgV1BQX0lOSVRfVFJBQ0lORyhMIm90Tm9kZUFwaSIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgICAgICBVbmxvYWQoKTsKKyAgICAgICAgV1BQX0NMRUFOVVAoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERMTF9USFJFQURfQVRUQUNIOgorICAgIGNhc2UgRExMX1RIUkVBRF9ERVRBQ0g6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL290Tm9kZUFwaS5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL290Tm9kZUFwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxNDEyZAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvb3ROb2RlQXBpLmNwcApAQCAtMCwwICsxLDIzNzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwcmVjb21wLmgiCisjaW5jbHVkZSAib3ROb2RlQXBpLnRtaCIKKworI2RlZmluZSBERUJVR19QSU5HIDEKKworI2RlZmluZSBHVUlEX0ZPUk1BVCAieyUwOGxYLSUwNGhYLSUwNGhYLSUwMmhoWCUwMmhoWC0lMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFh9IgorI2RlZmluZSBHVUlEX0FSRyhndWlkKSBndWlkLkRhdGExLCBndWlkLkRhdGEyLCBndWlkLkRhdGEzLCBndWlkLkRhdGE0WzBdLCBndWlkLkRhdGE0WzFdLCBndWlkLkRhdGE0WzJdLCBndWlkLkRhdGE0WzNdLCBndWlkLkRhdGE0WzRdLCBndWlkLkRhdGE0WzVdLCBndWlkLkRhdGE0WzZdLCBndWlkLkRhdGE0WzddCisKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcE9wZW5IYW5kbGUpKF9PdXRfIEhBTkRMRSogcGhhbmRsZSk7Cit0eXBlZGVmIFZPSUQgICgqZnBfb3R2bXBDbG9zZUhhbmRsZSkoX0luXyBIQU5ETEUgaGFuZGxlKTsKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcEFkZFZpcnR1YWxCdXMpKF9Jbl8gSEFORExFIGhhbmRsZSwgX0lub3V0XyBVTE9ORyogcEJ1c051bWJlciwgX091dF8gVUxPTkcqIHBJZkluZGV4KTsKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcFJlbW92ZVZpcnR1YWxCdXMpKF9Jbl8gSEFORExFIGhhbmRsZSwgVUxPTkcgQnVzTnVtYmVyKTsKK3R5cGVkZWYgRFdPUkQgKCpmcF9vdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQpKF9Jbl8gSEFORExFIGhhbmRsZSwgRFdPUkQgQnVzTnVtYmVyLCBfSW5fIGNvbnN0IEdVSUQqIHBUb3BvbG9neUd1aWQpOwordHlwZWRlZiB2b2lkICgqZnBfb3R2bXBMaXN0ZW5lckNhbGxiYWNrKShfSW5fb3B0XyBQVk9JRCBhQ29udGV4dCwgX0luXyBVTE9ORyBTb3VyY2VJbnRlcmZhY2VJbmRleCwgX0luX3JlYWRzX2J5dGVzXyhGcmFtZUxlbmd0aCkgUFVDSEFSIEZyYW1lQnVmZmVyLCBfSW5fIFVDSEFSIEZyYW1lTGVuZ3RoLCBfSW5fIFVDSEFSIENoYW5uZWwpOwordHlwZWRlZiBIQU5ETEUgKCpmcF9vdHZtcExpc3RlbmVyQ3JlYXRlKShfSW5fIGNvbnN0IEdVSUQqIHBBZGFwdGVyVG9wb2xvZ3lHdWlkKTsKK3R5cGVkZWYgdm9pZCAoKmZwX290dm1wTGlzdGVuZXJEZXN0cm95KShfSW5fb3B0XyBIQU5ETEUgcEhhbmRsZSk7Cit0eXBlZGVmIHZvaWQoKmZwX290dm1wTGlzdGVuZXJSZWdpc3RlcikoX0luXyBIQU5ETEUgcEhhbmRsZSwgX0luX29wdF8gZnBfb3R2bXBMaXN0ZW5lckNhbGxiYWNrIENhbGxiYWNrLCBfSW5fb3B0XyBQVk9JRCBDb250ZXh0KTsKKworZnBfb3R2bXBPcGVuSGFuZGxlICAgICAgICAgICAgICBvdHZtcE9wZW5IYW5kbGUgPSBudWxscHRyOworZnBfb3R2bXBDbG9zZUhhbmRsZSAgICAgICAgICAgICBvdHZtcENsb3NlSGFuZGxlID0gbnVsbHB0cjsKK2ZwX290dm1wQWRkVmlydHVhbEJ1cyAgICAgICAgICAgb3R2bXBBZGRWaXJ0dWFsQnVzID0gbnVsbHB0cjsKK2ZwX290dm1wUmVtb3ZlVmlydHVhbEJ1cyAgICAgICAgb3R2bXBSZW1vdmVWaXJ0dWFsQnVzID0gbnVsbHB0cjsKK2ZwX290dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZCAgb3R2bXBTZXRBZGFwdGVyVG9wb2xvZ3lHdWlkID0gbnVsbHB0cjsKK2ZwX290dm1wTGlzdGVuZXJDcmVhdGUgICAgICAgICAgb3R2bXBMaXN0ZW5lckNyZWF0ZSA9IG51bGxwdHI7CitmcF9vdHZtcExpc3RlbmVyRGVzdHJveSAgICAgICAgIG90dm1wTGlzdGVuZXJEZXN0cm95ID0gbnVsbHB0cjsKK2ZwX290dm1wTGlzdGVuZXJSZWdpc3RlciAgICAgICAgb3R2bXBMaXN0ZW5lclJlZ2lzdGVyID0gbnVsbHB0cjsKKworSE1PRFVMRSBnVm1wTW9kdWxlID0gbnVsbHB0cjsKK0hBTkRMRSAgZ1ZtcEhhbmRsZSA9IG51bGxwdHI7CisKK1VMT05HIGdOZXh0QnVzTnVtYmVyID0gMTsKK0dVSUQgZ1RvcG9sb2d5R3VpZCA9IHswfTsKKwordm9sYXRpbGUgTE9ORyBnTnVtYmVyT2ZJbnRlcmZhY2VzID0gMDsKK0NSSVRJQ0FMX1NFQ1RJT04gZ0NTOwordmVjdG9yPG90Tm9kZSo+IGdOb2RlczsKK0hBTkRMRSBnRGV2aWNlQXJyaXZhbEV2ZW50ID0gbnVsbHB0cjsKKworb3RBcGlJbnN0YW5jZSAqZ0FwaUluc3RhbmNlID0gbnVsbHB0cjsKKworX1N1Y2Nlc3NfKHJldHVybiA9PSBPVF9FUlJPUl9OT05FKQorb3RFcnJvciBvdE5vZGVQYXJzZVByZWZpeChjb25zdCBjaGFyICphU3RyUHJlZml4LCBfT3V0XyBvdElwNlByZWZpeCAqYVByZWZpeCkKK3sKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgaWYgKChwcmVmaXhMZW5ndGhTdHIgPSAoY2hhciopc3RyY2hyKGFTdHJQcmVmaXgsICcvJykpID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoImludmFsaWQgcHJlZml4ICglcykhXHJcbiIsIGFTdHJQcmVmaXgpOworICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKworICAgICpwcmVmaXhMZW5ndGhTdHIrKyA9ICdcMCc7CisgICAgCisgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYVN0clByZWZpeCwgJmFQcmVmaXgtPm1QcmVmaXgpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJpcGFkZHIgKCVzKSB0byBzdHJpbmcgZmFpbGVkLCAweCV4IVxyXG4iLCBhU3RyUHJlZml4LCBlcnJvcik7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBhUHJlZml4LT5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworICAgIAorICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCisgICAgeworICAgICAgICBwcmludGYoImludmFsaWQgcHJlZml4IGVuZGluZyAoJXMpIVxyXG4iLCBhU3RyUHJlZml4KTsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIE9UQ0FMTCBvdE5vZGVEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYUFkZGVkLCBjb25zdCBHVUlEICosIHZvaWQgKikKK3sKKyAgICBpZiAoYUFkZGVkKSBTZXRFdmVudChnRGV2aWNlQXJyaXZhbEV2ZW50KTsKK30KKworb3RBcGlJbnN0YW5jZSogR2V0QXBpSW5zdGFuY2UoKQoreworICAgIGlmIChnQXBpSW5zdGFuY2UgPT0gbnVsbHB0cikKKyAgICB7IAorICAgICAgICBXU0FEQVRBIHdzYURhdGE7CisgICAgICAgIGludCByZXN1bHQgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDIpLCAmd3NhRGF0YSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZCFcclxuIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGdBcGlJbnN0YW5jZSA9IG90QXBpSW5pdCgpOworICAgICAgICBpZiAoZ0FwaUluc3RhbmNlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50Zigib3RBcGlJbml0IGZhaWxlZCFcclxuIik7CisgICAgICAgICAgICBVbmxvYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgICAgICBnVm1wTW9kdWxlID0gTG9hZExpYnJhcnkoVEVYVCgib3R2bXBhcGkuZGxsIikpOworICAgICAgICBpZiAoZ1ZtcE1vZHVsZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIkxvYWRMaWJyYXJ5KFwib3R2bXBhcGlcIikgZmFpbGVkIVxyXG4iKTsKKyAgICAgICAgICAgIFVubG9hZCgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBvdHZtcE9wZW5IYW5kbGUgICAgICAgICAgICAgPSAoZnBfb3R2bXBPcGVuSGFuZGxlKUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcE9wZW5IYW5kbGUiKTsKKyAgICAgICAgb3R2bXBDbG9zZUhhbmRsZSAgICAgICAgICAgID0gKGZwX290dm1wQ2xvc2VIYW5kbGUpR2V0UHJvY0FkZHJlc3MoZ1ZtcE1vZHVsZSwgIm90dm1wQ2xvc2VIYW5kbGUiKTsKKyAgICAgICAgb3R2bXBBZGRWaXJ0dWFsQnVzICAgICAgICAgID0gKGZwX290dm1wQWRkVmlydHVhbEJ1cylHZXRQcm9jQWRkcmVzcyhnVm1wTW9kdWxlLCAib3R2bXBBZGRWaXJ0dWFsQnVzIik7CisgICAgICAgIG90dm1wUmVtb3ZlVmlydHVhbEJ1cyAgICAgICA9IChmcF9vdHZtcFJlbW92ZVZpcnR1YWxCdXMpR2V0UHJvY0FkZHJlc3MoZ1ZtcE1vZHVsZSwgIm90dm1wUmVtb3ZlVmlydHVhbEJ1cyIpOworICAgICAgICBvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQgPSAoZnBfb3R2bXBTZXRBZGFwdGVyVG9wb2xvZ3lHdWlkKUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQiKTsKKyAgICAgICAgb3R2bXBMaXN0ZW5lckNyZWF0ZSAgICAgICAgID0gKGZwX290dm1wTGlzdGVuZXJDcmVhdGUpR2V0UHJvY0FkZHJlc3MoZ1ZtcE1vZHVsZSwgIm90dm1wTGlzdGVuZXJDcmVhdGUiKTsKKyAgICAgICAgb3R2bXBMaXN0ZW5lckRlc3Ryb3kgICAgICAgID0gKGZwX290dm1wTGlzdGVuZXJEZXN0cm95KUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcExpc3RlbmVyRGVzdHJveSIpOworICAgICAgICBvdHZtcExpc3RlbmVyUmVnaXN0ZXIgICAgICAgPSAoZnBfb3R2bXBMaXN0ZW5lclJlZ2lzdGVyKUdldFByb2NBZGRyZXNzKGdWbXBNb2R1bGUsICJvdHZtcExpc3RlbmVyUmVnaXN0ZXIiKTsKKworICAgICAgICBhc3NlcnQob3R2bXBPcGVuSGFuZGxlKTsKKyAgICAgICAgYXNzZXJ0KG90dm1wQ2xvc2VIYW5kbGUpOworICAgICAgICBhc3NlcnQob3R2bXBBZGRWaXJ0dWFsQnVzKTsKKyAgICAgICAgYXNzZXJ0KG90dm1wUmVtb3ZlVmlydHVhbEJ1cyk7CisgICAgICAgIGFzc2VydChvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQpOworICAgICAgICBhc3NlcnQob3R2bXBMaXN0ZW5lckNyZWF0ZSk7CisgICAgICAgIGFzc2VydChvdHZtcExpc3RlbmVyRGVzdHJveSk7CisgICAgICAgIGFzc2VydChvdHZtcExpc3RlbmVyUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChvdHZtcE9wZW5IYW5kbGUgPT0gbnVsbHB0cikgcHJpbnRmKCJvdHZtcE9wZW5IYW5kbGUgaXMgbnVsbCFcclxuIik7CisgICAgICAgIGlmIChvdHZtcENsb3NlSGFuZGxlID09IG51bGxwdHIpIHByaW50Zigib3R2bXBDbG9zZUhhbmRsZSBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wQWRkVmlydHVhbEJ1cyA9PSBudWxscHRyKSBwcmludGYoIm90dm1wQWRkVmlydHVhbEJ1cyBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wUmVtb3ZlVmlydHVhbEJ1cyA9PSBudWxscHRyKSBwcmludGYoIm90dm1wUmVtb3ZlVmlydHVhbEJ1cyBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZCA9PSBudWxscHRyKSBwcmludGYoIm90dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZCBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wTGlzdGVuZXJDcmVhdGUgPT0gbnVsbHB0cikgcHJpbnRmKCJvdHZtcExpc3RlbmVyQ3JlYXRlIGlzIG51bGwhXHJcbiIpOworICAgICAgICBpZiAob3R2bXBMaXN0ZW5lckRlc3Ryb3kgPT0gbnVsbHB0cikgcHJpbnRmKCJvdHZtcExpc3RlbmVyRGVzdHJveSBpcyBudWxsIVxyXG4iKTsKKyAgICAgICAgaWYgKG90dm1wTGlzdGVuZXJSZWdpc3RlciA9PSBudWxscHRyKSBwcmludGYoIm90dm1wTGlzdGVuZXJSZWdpc3RlciBpcyBudWxsIVxyXG4iKTsKKworICAgICAgICAoVk9JRClvdHZtcE9wZW5IYW5kbGUoJmdWbXBIYW5kbGUpOworICAgICAgICBpZiAoZ1ZtcEhhbmRsZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIm90dm1wT3BlbkhhbmRsZSBmYWlsZWQhXHJcbiIpOworICAgICAgICAgICAgVW5sb2FkKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc3RhdHVzID0gVXVpZENyZWF0ZSgmZ1RvcG9sb2d5R3VpZCk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiVXVpZENyZWF0ZSBmYWlsZWQsIDB4JXghXHJcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICBVbmxvYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBvZmZzZXQgPSBnZXRlbnYoIklOU1RBTkNFIik7CisgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdOZXh0QnVzTnVtYmVyID0gKGF0b2kob2Zmc2V0KSAqIDMyKSAlIDEwMDAgKyAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3JhbmQoZ1RvcG9sb2d5R3VpZC5EYXRhMSk7CisgICAgICAgICAgICBnTmV4dEJ1c051bWJlciA9IHJhbmQoKSAlIDEwMDAgKyAxOworICAgICAgICB9CisKKyAgICAgICAgZ0RldmljZUFycml2YWxFdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIEZBTFNFLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gU2V0IGNhbGxiYWNrIHRvIHdhaXQgZm9yIGRldmljZSBhcnJpdmFsIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgb3RTZXREZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2soZ0FwaUluc3RhbmNlLCBvdE5vZGVEZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkLCBudWxscHRyKTsKKworICAgICAgICBwcmludGYoIk5ldyB0b3BvbG9neSBjcmVhdGVkXHJcbiIgR1VJRF9GT1JNQVQgIiBbJWRdXHJcblxyXG4iLCBHVUlEX0FSRyhnVG9wb2xvZ3lHdWlkKSwgZ05leHRCdXNOdW1iZXIpOworICAgIH0KKworICAgIEludGVybG9ja2VkSW5jcmVtZW50KCZnTnVtYmVyT2ZJbnRlcmZhY2VzKTsKKworICAgIHJldHVybiBnQXBpSW5zdGFuY2U7Cit9CisKK3ZvaWQgUmVsZWFzZUFwaUluc3RhbmNlKCkKK3sKKyAgICBpZiAoMCA9PSBJbnRlcmxvY2tlZERlY3JlbWVudCgmZ051bWJlck9mSW50ZXJmYWNlcykpCisgICAgeworICAgICAgICAvLyBVbmluaXRpYWxpemUgZXZlcnl0aGluZyBlbHNlIGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmCisgICAgICAgIFVubG9hZCgpOworICAgIH0KK30KKwordm9pZCBVbmxvYWQoKQoreworICAgIGlmIChnTnVtYmVyT2ZJbnRlcmZhY2VzICE9IDApCisgICAgeworICAgICAgICBwcmludGYoIlVubG9hZGVkIHdpdGggJWQgb3V0c3RhbmRpbmcgbm9kZXMhXHJcbiIsIGdOdW1iZXJPZkludGVyZmFjZXMpOworICAgIH0KKworICAgIGlmIChnQXBpSW5zdGFuY2UpCisgICAgeworICAgICAgICBvdFNldERldmljZUF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhnQXBpSW5zdGFuY2UsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIGlmIChnRGV2aWNlQXJyaXZhbEV2ZW50ICE9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGdEZXZpY2VBcnJpdmFsRXZlbnQpOworICAgICAgICAgICAgZ0RldmljZUFycml2YWxFdmVudCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ1ZtcEhhbmRsZSAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBvdHZtcENsb3NlSGFuZGxlKGdWbXBIYW5kbGUpOworICAgICAgICAgICAgZ1ZtcEhhbmRsZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ1ZtcE1vZHVsZSAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBGcmVlTGlicmFyeShnVm1wTW9kdWxlKTsKKyAgICAgICAgICAgIGdWbXBNb2R1bGUgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZnQ1MpOworCisgICAgICAgIG90QXBpRmluYWxpemUoZ0FwaUluc3RhbmNlKTsKKyAgICAgICAgZ0FwaUluc3RhbmNlID0gbnVsbHB0cjsKKworICAgICAgICBXU0FDbGVhbnVwKCk7CisKKyAgICAgICAgcHJpbnRmKCJUb3BvbG9neSBkZXN0cm95ZWRcclxuIik7CisgICAgfQorfQorCitpbnQgSGV4MkJpbihjb25zdCBjaGFyICphSGV4LCB1aW50OF90ICphQmluLCB1aW50MTZfdCBhQmluTGVuZ3RoKQoreworICAgIHNpemVfdCBoZXhMZW5ndGggPSBzdHJsZW4oYUhleCk7CisgICAgY29uc3QgY2hhciAqaGV4RW5kID0gYUhleCArIGhleExlbmd0aDsKKyAgICB1aW50OF90ICpjdXIgPSBhQmluOworICAgIHVpbnQ4X3QgbnVtQ2hhcnMgPSBoZXhMZW5ndGggJiAxOworICAgIHVpbnQ4X3QgYnl0ZSA9IDA7CisKKyAgICBpZiAoKGhleExlbmd0aCArIDEpIC8gMiA+IGFCaW5MZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKGFIZXggPCBoZXhFbmQpCisgICAgeworICAgICAgICBpZiAoJ0EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdGJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdBJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJ2EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdmJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdhJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJzAnIDw9ICphSGV4ICYmICphSGV4IDw9ICc5JykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAqYUhleCAtICcwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGFIZXgrKzsKKyAgICAgICAgbnVtQ2hhcnMrKzsKKworICAgICAgICBpZiAobnVtQ2hhcnMgPj0gMikKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQ2hhcnMgPSAwOworICAgICAgICAgICAgKmN1cisrID0gYnl0ZTsKKyAgICAgICAgICAgIGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA8PD0gNDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCaW4pOworfQorCit0eXBlZGVmIHN0cnVjdCBvdFBpbmdIYW5kbGVyCit7CisgICAgb3ROb2RlKiAgICAgICAgIG1QYXJlbnROb2RlOworICAgIGJvb2wgICAgICAgICAgICBtQWN0aXZlOworICAgIG90SXA2QWRkcmVzcyAgICBtQWRkcmVzczsKKyAgICBTT0NLRVQgICAgICAgICAgbVNvY2tldDsKKyAgICBDSEFSICAgICAgICAgICAgbVJlY3ZCdWZmZXJbMTUwMF07CisgICAgV1NBT1ZFUkxBUFBFRCAgIG1PdmVybGFwcGVkOworICAgIFBUUF9XQUlUICAgICAgICBtVGhyZWFkcG9vbFdhaXQ7CisgICAgV1NBQlVGICAgICAgICAgIG1XU0FSZWN2QnVmZmVyOworICAgIERXT1JEICAgICAgICAgICBtTnVtQnl0ZXNSZWNlaXZlZDsKKyAgICBTT0NLQUREUl9JTjYgICAgbVNvdXJjZUFkZHI2OworICAgIGludCAgICAgICAgICAgICBtU291cmNlQWRkcjZMZW47CisKK30gb3RQaW5nSGFuZGxlcjsKKwordHlwZWRlZiBzdHJ1Y3Qgb3ROb2RlCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgbUlkOworICAgIERXT1JEICAgICAgICAgICAgICAgICAgIG1CdXNJbmRleDsKKyAgICBEV09SRCAgICAgICAgICAgICAgICAgICBtSW50ZXJmYWNlSW5kZXg7CisgICAgb3RJbnN0YW5jZSogICAgICAgICAgICAgbUluc3RhbmNlOworICAgIEhBTkRMRSAgICAgICAgICAgICAgICAgIG1FbmVyZ3lTY2FuRXZlbnQ7CisgICAgSEFORExFICAgICAgICAgICAgICAgICAgbVBhbklkQ29uZmxpY3RFdmVudDsKKyAgICBDUklUSUNBTF9TRUNUSU9OICAgICAgICBtQ1M7CisgICAgdmVjdG9yPG90UGluZ0hhbmRsZXIqPiAgbVBpbmdIYW5kbGVyczsKKyAgICB2ZWN0b3I8dm9pZCo+ICAgICAgICAgICBtTWVtb3J5VG9GcmVlOworfSBvdE5vZGU7CisKK2NvbnN0IGNoYXIqIG90RGV2aWNlUm9sZVRvU3RyaW5nKG90RGV2aWNlUm9sZSByb2xlKQoreworICAgIHN3aXRjaCAocm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDogcmV0dXJuICJkaXNhYmxlZCI7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDogcmV0dXJuICJkZXRhY2hlZCI7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDogICAgcmV0dXJuICJjaGlsZCI7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6ICAgcmV0dXJuICJyb3V0ZXIiOworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOiAgIHJldHVybiAibGVhZGVyIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImludmFsaWQiOworICAgIH0KK30KKworY29uc3QgVVNIT1JUIENlcnRpZmljYXRpb25QaW5nUG9ydCA9IGh0b25zKDEyMzQ1KTsKKworY29uc3QgSU42X0FERFIgTGlua0xvY2FsQWxsTm9kZXNBZGRyZXNzICAgID0geyB7IDB4RkYsIDB4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEgfSB9OworY29uc3QgSU42X0FERFIgTGlua0xvY2FsQWxsUm91dGVyc0FkZHJlc3MgID0geyB7IDB4RkYsIDB4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDIgfSB9OworY29uc3QgSU42X0FERFIgUmVhbG1Mb2NhbEFsbE5vZGVzQWRkcmVzcyAgID0geyB7IDB4RkYsIDB4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEgfSB9OworY29uc3QgSU42X0FERFIgUmVhbG1Mb2NhbEFsbFJvdXRlcnNBZGRyZXNzID0geyB7IDB4RkYsIDB4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDIgfSB9OworY29uc3QgSU42X0FERFIgUmVhbG1Mb2NhbFNwZWNpYWxBZGRyZXNzICAgID0geyB7IDB4RkYsIDB4MzMsIDAsIDB4NDAsIDB4ZmQsIDB4ZGUsIDB4YWQsIDAsIDB4YmUsIDB4ZWYsIDAsIDAsIDAsIDAsIDAsIDB4MDEgfSB9OworCit2b2lkCitDQUxMQkFDSyAKK1BpbmdIYW5kbGVyUmVjdkNhbGxiYWNrKAorICAgIF9Jbm91dF8gICAgIFBUUF9DQUxMQkFDS19JTlNUQU5DRSAvKiBJbnN0YW5jZSAqLywKKyAgICBfSW5vdXRfb3B0XyBQVk9JRCAgICAgICAgICAgICAgICAgQ29udGV4dCwKKyAgICBfSW5vdXRfICAgICBQVFBfV0FJVCAgICAgICAgICAgICAgLyogV2FpdCAqLywKKyAgICBfSW5fICAgICAgICBUUF9XQUlUX1JFU1VMVCAgICAgICAgLyogV2FpdFJlc3VsdCAqLworICAgICkKK3sKKyAgICBvdFBpbmdIYW5kbGVyICphUGluZ0hhbmRsZXIgPSAob3RQaW5nSGFuZGxlciopQ29udGV4dDsKKyAgICBpZiAoYVBpbmdIYW5kbGVyID09IE5VTEwpIHJldHVybjsKKyAgICAKKyAgICAvLyBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgSU8gb3BlcmF0aW9uCisgICAgRFdPUkQgY2JUcmFuc2ZlcnJlZCA9IDA7CisgICAgRFdPUkQgZHdGbGFncyA9IDA7CisgICAgaWYgKCFXU0FHZXRPdmVybGFwcGVkUmVzdWx0KAorICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0LAorICAgICAgICAgICAgJmFQaW5nSGFuZGxlci0+bU92ZXJsYXBwZWQsCisgICAgICAgICAgICAmY2JUcmFuc2ZlcnJlZCwKKyAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAmZHdGbGFncykpCisgICAgeworICAgICAgICBpbnQgcmVzdWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgICAgIC8vIE9ubHkgbG9nIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duCisgICAgICAgIGlmIChyZXN1bHQgIT0gV1NBRU5PVFNPQ0sgJiYgcmVzdWx0ICE9IEVSUk9SX09QRVJBVElPTl9BQk9SVEVEKQorICAgICAgICAgICAgcHJpbnRmKCJXU0FHZXRPdmVybGFwcGVkUmVzdWx0IGZhaWxlZCwgMHgleFxyXG4iLCByZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHJlc3VsdDsKKworICAgIC8vIE1ha2Ugc3VyZSBpdCBkaWRuJ3QgY29tZSBmcm9tIG91ciBhZGRyZXNzCisgICAgaWYgKG1lbWNtcCgmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYuc2luNl9hZGRyLCAmYVBpbmdIYW5kbGVyLT5tQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSkgIT0gMCkKKyAgICB7CisgICAgICAgIGJvb2wgc2hvdWxkUmVwbHkgPSB0cnVlOworCisgICAgICAgIC8vIFRPRE8gLSBGaXggdGhpcyBoYWNrLi4uCisgICAgICAgIGF1dG8gUmVjdkRlc3QgPSAoY29uc3Qgb3RJcDZBZGRyZXNzKilhUGluZ0hhbmRsZXItPm1SZWN2QnVmZmVyOworICAgICAgICBpZiAobWVtY21wKFJlY3ZEZXN0LCAmTGlua0xvY2FsQWxsUm91dGVyc0FkZHJlc3MsIHNpemVvZihJTjZfQUREUikpID09IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcChSZWN2RGVzdCwgJlJlYWxtTG9jYWxBbGxSb3V0ZXJzQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBSb2xlID0gb3RUaHJlYWRHZXREZXZpY2VSb2xlKGFQaW5nSGFuZGxlci0+bVBhcmVudE5vZGUtPm1JbnN0YW5jZSk7CisgICAgICAgICAgICBpZiAoUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgJiYgUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpCisgICAgICAgICAgICAgICAgc2hvdWxkUmVwbHkgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRSZXBseSkKKyAgICAgICAgeworI2lmIERFQlVHX1BJTkcKKyAgICAgICAgICAgIENIQVIgc3pJcEFkZHJlc3NbNDZdID0geyAwIH07CisgICAgICAgICAgICBSdGxJcHY2QWRkcmVzc1RvU3RyaW5nQSgmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYuc2luNl9hZGRyLCBzeklwQWRkcmVzcyk7CisgICAgICAgICAgICBwcmludGYoIiVkOiByZWNlaXZlZCBwaW5nICglZCBieXRlcykgZnJvbSAlc1xyXG4iLCBhUGluZ0hhbmRsZXItPm1QYXJlbnROb2RlLT5tSWQsIGNiVHJhbnNmZXJyZWQsIHN6SXBBZGRyZXNzKTsKKyNlbmRpZgorCisgICAgICAgICAgICAvLyBTZW5kIHRoZSByZWNlaXZlZCBkYXRhIGJhY2sKKyAgICAgICAgICAgIHJlc3VsdCA9IAorICAgICAgICAgICAgICAgIHNlbmR0bygKKyAgICAgICAgICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0LCAKKyAgICAgICAgICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tUmVjdkJ1ZmZlciwgY2JUcmFuc2ZlcnJlZCwgMCwgCisgICAgICAgICAgICAgICAgICAgIChTT0NLQUREUiopJmFQaW5nSGFuZGxlci0+bVNvdXJjZUFkZHI2LCBhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNkxlbgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJzZW5kdG8gZmFpbGVkLCAweCV4XHJcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBTdGFydCB0aGUgb3Rwb29sIHdhaXRpbmcgb24gdGhlIG92ZXJsYXBwZWQgZXZlbnQKKyAgICBTZXRUaHJlYWRwb29sV2FpdChhUGluZ0hhbmRsZXItPm1UaHJlYWRwb29sV2FpdCwgYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQsIG51bGxwdHIpOworCisgICAgLy8gUG9zdCBhbm90aGVyIHJlY3YKKyAgICBkd0ZsYWdzID0gTVNHX1BBUlRJQUw7CisgICAgYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjZMZW4gPSBzaXplb2YoYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYpOworICAgIHJlc3VsdCA9IAorICAgICAgICBXU0FSZWN2RnJvbSgKKyAgICAgICAgICAgIGFQaW5nSGFuZGxlci0+bVNvY2tldCwgCisgICAgICAgICAgICAmYVBpbmdIYW5kbGVyLT5tV1NBUmVjdkJ1ZmZlciwgMSwgJmFQaW5nSGFuZGxlci0+bU51bUJ5dGVzUmVjZWl2ZWQsICZkd0ZsYWdzLCAKKyAgICAgICAgICAgIChTT0NLQUREUiopJmFQaW5nSGFuZGxlci0+bVNvdXJjZUFkZHI2LCAmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjZMZW4sIAorICAgICAgICAgICAgJmFQaW5nSGFuZGxlci0+bU92ZXJsYXBwZWQsIG51bGxwdHIKKyAgICAgICAgICAgICk7CisgICAgaWYgKHJlc3VsdCAhPSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICAvLyBOb3QgcGVuZGluZywgc28gbWFudWFsbHkgdHJpZ2dlciB0aGUgZXZlbnQgZm9yIHRoZSBUaHJlYWRwb29sIHRvIGV4ZWN1dGUKKyAgICAgICAgU2V0RXZlbnQoYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBXU0FfSU9fUEVORElORykKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJXU0FSZWN2RnJvbSBmYWlsZWQsIDB4JXhcclxuIiwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBJc01lc2hMb2NhbEVJRChvdE5vZGUgKmFOb2RlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIGF1dG8gTUxfRUlEID0gb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgaWYgKE1MX0VJRCA9PSBudWxscHRyKSByZXR1cm4gZmFsc2U7CisgICAgYm9vbCByZXN1bHQgPSBtZW1jbXAoTUxfRUlELT5tRmllbGRzLm04LCBhQWRkcmVzcy0+bUZpZWxkcy5tOCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpID09IDA7CisgICAgb3RGcmVlTWVtb3J5KE1MX0VJRCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBBZGRQaW5nSGFuZGxlcihvdE5vZGUgKmFOb2RlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIG90UGluZ0hhbmRsZXIgKmFQaW5nSGFuZGxlciA9IG5ldyBvdFBpbmdIYW5kbGVyKCk7CisgICAgYVBpbmdIYW5kbGVyLT5tUGFyZW50Tm9kZSA9IGFOb2RlOworICAgIGFQaW5nSGFuZGxlci0+bUFkZHJlc3MgPSAqYUFkZHJlc3M7CisgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0ID0gSU5WQUxJRF9TT0NLRVQ7CisgICAgYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQgPSBDcmVhdGVFdmVudChudWxscHRyLCBGQUxTRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGFQaW5nSGFuZGxlci0+bVdTQVJlY3ZCdWZmZXIgPSB7IDE1MDAsIGFQaW5nSGFuZGxlci0+bVJlY3ZCdWZmZXIgfTsKKyAgICBhUGluZ0hhbmRsZXItPm1BY3RpdmUgPSB0cnVlOworICAgIGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0ID0gCisgICAgICAgIENyZWF0ZVRocmVhZHBvb2xXYWl0KAorICAgICAgICAgICAgUGluZ0hhbmRsZXJSZWN2Q2FsbGJhY2ssCisgICAgICAgICAgICBhUGluZ0hhbmRsZXIsCisgICAgICAgICAgICBudWxscHRyCisgICAgICAgICAgICApOworICAgIAorICAgIFNPQ0tBRERSX0lONiBhZGRyNiA9IHsgMCB9OworICAgIGFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgYWRkcjYuc2luNl9wb3J0ID0gQ2VydGlmaWNhdGlvblBpbmdQb3J0OworICAgIG1lbWNweSgmYWRkcjYuc2luNl9hZGRyLCBhQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisgICAgCisjaWYgREVCVUdfUElORworICAgIENIQVIgc3pJcEFkZHJlc3NbNDZdID0geyAwIH07CisgICAgUnRsSXB2NkFkZHJlc3NUb1N0cmluZ0EoJmFkZHI2LnNpbjZfYWRkciwgc3pJcEFkZHJlc3MpOworCisgICAgcHJpbnRmKCIlZDogc3RhcnRpbmcgcGluZyBoYW5kbGVyIGZvciAlc1xyXG4iLCBhTm9kZS0+bUlkLCBzeklwQWRkcmVzcyk7CisjZW5kaWYKKworICAgIC8vIFB1dCB0aGUgY3VycmVudCB0aGVhZCBpbiB0aGUgY29ycmVjdCBjb21wYXJ0bWVudAorICAgIGJvb2wgUmV2ZXJ0Q29tcGFydG1lbnRPbkV4aXQgPSBmYWxzZTsKKyAgICBVTE9ORyBPcmlnaW5hbENvbXBhcnRtZW50SUQgPSBHZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZCgpOworICAgIGlmIChPcmlnaW5hbENvbXBhcnRtZW50SUQgIT0gb3RHZXRDb21wYXJ0bWVudElkKGFOb2RlLT5tSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgRFdPUkQgZHdFcnJvciA9IEVSUk9SX1NVQ0NFU1M7CisgICAgICAgIGlmICgoZHdFcnJvciA9IFNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkKG90R2V0Q29tcGFydG1lbnRJZChhTm9kZS0+bUluc3RhbmNlKSkpICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQgZmFpbGVkLCAweCV4XHJcbiIsIGR3RXJyb3IpOworICAgICAgICB9CisgICAgICAgIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0OworICAgIERXT1JEIEZsYWcgPSBGQUxTRTsKKyAgICBJUFY2X01SRVEgTUNSZWc7CisgICAgTUNSZWcuaXB2Nm1yX2ludGVyZmFjZSA9IG90R2V0RGV2aWNlSWZJbmRleChhTm9kZS0+bUluc3RhbmNlKTsKKworICAgIGlmIChhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCA9PSBudWxscHRyIHx8CisgICAgICAgIGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0ID09IG51bGxwdHIpCisgICAgeworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIAorICAgIC8vIENyZWF0ZSB0aGUgc29ja2V0CisgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0ID0gV1NBU29ja2V0VyhBRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsIE5VTEwsIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOworICAgIGlmIChhUGluZ0hhbmRsZXItPm1Tb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpCisgICAgeworICAgICAgICBwcmludGYoIldTQVNvY2tldCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gQmluZCB0aGUgc29ja2V0IHRvIHRoZSBhZGRyZXNzCisgICAgcmVzdWx0ID0gYmluZChhUGluZ0hhbmRsZXItPm1Tb2NrZXQsIChzb2NrYWRkciopJmFkZHI2LCBzaXplb2YoYWRkcjYpKTsKKyAgICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikKKyAgICB7CisgICAgICAgIHByaW50ZigiYmluZCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIAorICAgIC8vIEJsb2NrIG91ciBvd24gc2VuZHMgZnJvbSBnZXR0aW5nIGNhbGxlZCBhcyByZWNlaXZlcworICAgIHJlc3VsdCA9IHNldHNvY2tvcHQoYVBpbmdIYW5kbGVyLT5tU29ja2V0LCBJUFBST1RPX0lQVjYsIElQVjZfTVVMVElDQVNUX0xPT1AsIChjaGFyICopJkZsYWcsIHNpemVvZihGbGFnKSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfTVVMVElDQVNUX0xPT1ApIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBCaW5kIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzCisgICAgaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmYWRkcjYuc2luNl9hZGRyKSkKKyAgICB7CisgICAgICAgIC8vIEFsbCBub2RlcyBhZGRyZXNzCisgICAgICAgIE1DUmVnLmlwdjZtcl9tdWx0aWFkZHIgPSBMaW5rTG9jYWxBbGxOb2Rlc0FkZHJlc3M7CisgICAgICAgIHJlc3VsdCA9IHNldHNvY2tvcHQoYVBpbmdIYW5kbGVyLT5tU29ja2V0LCBJUFBST1RPX0lQVjYsIElQVjZfQUREX01FTUJFUlNISVAsIChjaGFyICopJk1DUmVnLCBzaXplb2YoTUNSZWcpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50Zigic2V0c29ja29wdCAoSVBWNl9BRERfTUVNQkVSU0hJUCkgZmFpbGVkLCAweCV4XHJcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCByb3V0ZXJzIGFkZHJlc3MKKyAgICAgICAgTUNSZWcuaXB2Nm1yX211bHRpYWRkciA9IExpbmtMb2NhbEFsbFJvdXRlcnNBZGRyZXNzOworICAgICAgICByZXN1bHQgPSBzZXRzb2Nrb3B0KGFQaW5nSGFuZGxlci0+bVNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X0FERF9NRU1CRVJTSElQLCAoY2hhciAqKSZNQ1JlZywgc2l6ZW9mKE1DUmVnKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfQUREX01FTUJFUlNISVApIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoSXNNZXNoTG9jYWxFSUQoYU5vZGUsIGFBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIC8vIEFsbCBub2RlcyBhZGRyZXNzCisgICAgICAgIE1DUmVnLmlwdjZtcl9tdWx0aWFkZHIgPSBSZWFsbUxvY2FsQWxsTm9kZXNBZGRyZXNzOworICAgICAgICByZXN1bHQgPSBzZXRzb2Nrb3B0KGFQaW5nSGFuZGxlci0+bVNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X0FERF9NRU1CRVJTSElQLCAoY2hhciAqKSZNQ1JlZywgc2l6ZW9mKE1DUmVnKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfQUREX01FTUJFUlNISVApIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFsbCByb3V0ZXJzIGFkZHJlc3MKKyAgICAgICAgTUNSZWcuaXB2Nm1yX211bHRpYWRkciA9IFJlYWxtTG9jYWxBbGxSb3V0ZXJzQWRkcmVzczsKKyAgICAgICAgcmVzdWx0ID0gc2V0c29ja29wdChhUGluZ0hhbmRsZXItPm1Tb2NrZXQsIElQUFJPVE9fSVBWNiwgSVBWNl9BRERfTUVNQkVSU0hJUCwgKGNoYXIgKikmTUNSZWcsIHNpemVvZihNQ1JlZykpOworICAgICAgICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJzZXRzb2Nrb3B0IChJUFY2X0FERF9NRU1CRVJTSElQKSBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTcGVjaWFsIHJlYWxtIGxvY2FsIGFkZHJlc3MKKyAgICAgICAgTUNSZWcuaXB2Nm1yX211bHRpYWRkciA9IFJlYWxtTG9jYWxTcGVjaWFsQWRkcmVzczsKKyAgICAgICAgcmVzdWx0ID0gc2V0c29ja29wdChhUGluZ0hhbmRsZXItPm1Tb2NrZXQsIElQUFJPVE9fSVBWNiwgSVBWNl9BRERfTUVNQkVSU0hJUCwgKGNoYXIgKikmTUNSZWcsIHNpemVvZihNQ1JlZykpOworICAgICAgICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJzZXRzb2Nrb3B0IChJUFY2X0FERF9NRU1CRVJTSElQKSBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFN0YXJ0IHRoZSBvdHBvb2wgd2FpdGluZyBvbiB0aGUgb3ZlcmxhcHBlZCBldmVudAorICAgIFNldFRocmVhZHBvb2xXYWl0KGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0LCBhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCwgbnVsbHB0cik7CisKKyAgICAvLyBTdGFydCB0aGUgcmVjZWl2ZQorICAgIEZsYWcgPSBNU0dfUEFSVElBTDsKKyAgICBhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNkxlbiA9IHNpemVvZihhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNik7CisgICAgcmVzdWx0ID0gCisgICAgICAgIFdTQVJlY3ZGcm9tKAorICAgICAgICAgICAgYVBpbmdIYW5kbGVyLT5tU29ja2V0LCAKKyAgICAgICAgICAgICZhUGluZ0hhbmRsZXItPm1XU0FSZWN2QnVmZmVyLCAxLCAmYVBpbmdIYW5kbGVyLT5tTnVtQnl0ZXNSZWNlaXZlZCwgJkZsYWcsIAorICAgICAgICAgICAgKFNPQ0tBRERSKikmYVBpbmdIYW5kbGVyLT5tU291cmNlQWRkcjYsICZhUGluZ0hhbmRsZXItPm1Tb3VyY2VBZGRyNkxlbiwgCisgICAgICAgICAgICAmYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZCwgbnVsbHB0cgorICAgICAgICAgICAgKTsKKyAgICBpZiAocmVzdWx0ICE9IFNPQ0tFVF9FUlJPUikKKyAgICB7CisgICAgICAgIC8vIE5vdCBwZW5kaW5nLCBzbyBtYW51YWxseSB0cmlnZ2VyIHRoZSBldmVudCBmb3IgdGhlIFRocmVhZHBvb2wgdG8gZXhlY3V0ZQorICAgICAgICBTZXRFdmVudChhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworICAgICAgICBpZiAocmVzdWx0ICE9IFdTQV9JT19QRU5ESU5HKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIldTQVJlY3ZGcm9tIGZhaWxlZCwgMHgleFxyXG4iLCByZXN1bHQpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgYU5vZGUtPm1QaW5nSGFuZGxlcnMucHVzaF9iYWNrKGFQaW5nSGFuZGxlcik7CisgICAgYVBpbmdIYW5kbGVyID0gbnVsbHB0cjsKKworZXhpdDoKKyAgICAKKyAgICAvLyBSZXZlcnQgdGhlIGNvbXBhcm1lbnQgaWYgbmVjZXNzYXJ5CisgICAgaWYgKFJldmVydENvbXBhcnRtZW50T25FeGl0KQorICAgIHsKKyAgICAgICAgKFZPSUQpU2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoT3JpZ2luYWxDb21wYXJ0bWVudElEKTsKKyAgICB9CisKKyAgICAvLyBDbGVhbiB1cCBwaW5nIGhhbmRsZXIgaWYgbmVjZXNzYXJ5CisgICAgaWYgKGFQaW5nSGFuZGxlcikKKyAgICB7CisgICAgICAgIGlmIChhUGluZ0hhbmRsZXItPm1UaHJlYWRwb29sV2FpdCAhPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYVBpbmdIYW5kbGVyLT5tU29ja2V0ICE9IElOVkFMSURfU09DS0VUKSAKKyAgICAgICAgICAgICAgICBjbG9zZXNvY2tldChhUGluZ0hhbmRsZXItPm1Tb2NrZXQpOworICAgICAgICAgICAgV2FpdEZvclRocmVhZHBvb2xXYWl0Q2FsbGJhY2tzKGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0LCBUUlVFKTsKKyAgICAgICAgICAgIENsb3NlVGhyZWFkcG9vbFdhaXQoYVBpbmdIYW5kbGVyLT5tVGhyZWFkcG9vbFdhaXQpOworICAgICAgICB9CisgICAgICAgIGlmIChhUGluZ0hhbmRsZXItPm1PdmVybGFwcGVkLmhFdmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoYVBpbmdIYW5kbGVyLT5tT3ZlcmxhcHBlZC5oRXZlbnQpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBhUGluZ0hhbmRsZXI7CisgICAgfQorfQorCit2b2lkIEhhbmRsZUFkZHJlc3NDaGFuZ2VzKG90Tm9kZSAqYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBhdXRvIGFkZHJzID0gb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKGFOb2RlLT5tSW5zdGFuY2UpOworCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmFOb2RlLT5tQ1MpOworICAgICAgICAKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCBoYW5kbGVycworICAgIGZvciAoVUxPTkcgaSA9IDA7IGkgPCBhTm9kZS0+bVBpbmdIYW5kbGVycy5zaXplKCk7IGkrKykKKyAgICAgICAgYU5vZGUtPm1QaW5nSGFuZGxlcnNbaV0tPm1BY3RpdmUgPSBmYWxzZTsKKworICAgIC8vIFNlYXJjaCBmb3IgbWF0Y2hlcworICAgIGZvciAoYXV0byBhZGRyID0gYWRkcnM7IGFkZHI7IGFkZHIgPSBhZGRyLT5tTmV4dCkKKyAgICB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChVTE9ORyBpID0gMDsgaSA8IGFOb2RlLT5tUGluZ0hhbmRsZXJzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaWYgKCFhTm9kZS0+bVBpbmdIYW5kbGVyc1tpXS0+bUFjdGl2ZSAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCgmYWRkci0+bUFkZHJlc3MsICZhTm9kZS0+bVBpbmdIYW5kbGVyc1tpXS0+bUFkZHJlc3MsIHNpemVvZihvdElwNkFkZHJlc3MpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhTm9kZS0+bVBpbmdIYW5kbGVyc1tpXS0+bUFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQpIEFkZFBpbmdIYW5kbGVyKGFOb2RlLCAmYWRkci0+bUFkZHJlc3MpOworICAgIH0KKworICAgIHZlY3RvcjxvdFBpbmdIYW5kbGVyKj4gcGluZ0hhbmRsZXJzVG9EZWxldGU7CisgICAgICAgIAorICAgIC8vIFJlbGVhc2UgYWxsIGxlZnQgb3ZlciBoYW5kbGVycworICAgIGZvciAoaW50IGkgPSBhTm9kZS0+bVBpbmdIYW5kbGVycy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKKyAgICAgICAgaWYgKGFOb2RlLT5tUGluZ0hhbmRsZXJzW2ldLT5tQWN0aXZlID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGFQaW5nSGFuZGxlciA9IGFOb2RlLT5tUGluZ0hhbmRsZXJzW2ldOworCisjaWYgREVCVUdfUElORworICAgICAgICAgICAgQ0hBUiBzeklwQWRkcmVzc1s0Nl0gPSB7IDAgfTsKKyAgICAgICAgICAgIFJ0bElwdjZBZGRyZXNzVG9TdHJpbmdBKChQSU42X0FERFIpJmFQaW5nSGFuZGxlci0+bUFkZHJlc3MsIHN6SXBBZGRyZXNzKTsKKyAgICAgICAgICAgIHByaW50ZigiJWQ6IHJlbW92aW5nIHBpbmcgaGFuZGxlciBmb3IgJXNcclxuIiwgYU5vZGUtPm1JZCwgc3pJcEFkZHJlc3MpOworI2VuZGlmCisKKyAgICAgICAgICAgIGFOb2RlLT5tUGluZ0hhbmRsZXJzLmVyYXNlKGFOb2RlLT5tUGluZ0hhbmRsZXJzLmJlZ2luKCkgKyBpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNodXRkb3duKGFQaW5nSGFuZGxlci0+bVNvY2tldCwgU0RfQk9USCk7CisgICAgICAgICAgICBjbG9zZXNvY2tldChhUGluZ0hhbmRsZXItPm1Tb2NrZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBwaW5nSGFuZGxlcnNUb0RlbGV0ZS5wdXNoX2JhY2soYVBpbmdIYW5kbGVyKTsKKyAgICAgICAgfQorCisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJmFOb2RlLT5tQ1MpOworCisgICAgZm9yIGVhY2ggKGF1dG8gYVBpbmdIYW5kbGVyIGluIHBpbmdIYW5kbGVyc1RvRGVsZXRlKQorICAgIHsKKyAgICAgICAgV2FpdEZvclRocmVhZHBvb2xXYWl0Q2FsbGJhY2tzKGFQaW5nSGFuZGxlci0+bVRocmVhZHBvb2xXYWl0LCBUUlVFKTsKKyAgICAgICAgQ2xvc2VUaHJlYWRwb29sV2FpdChhUGluZ0hhbmRsZXItPm1UaHJlYWRwb29sV2FpdCk7CisgICAgICAgIENsb3NlSGFuZGxlKGFQaW5nSGFuZGxlci0+bU92ZXJsYXBwZWQuaEV2ZW50KTsKKworICAgICAgICBkZWxldGUgYVBpbmdIYW5kbGVyOworICAgIH0KKworICAgIGlmIChhZGRycykgb3RGcmVlTWVtb3J5KGFkZHJzKTsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKwordm9pZCBPVENBTEwgb3ROb2RlU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIG90Tm9kZSogYU5vZGUgPSAob3ROb2RlKilhQ29udGV4dDsKKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUk9MRSkgIT0gMCkKKyAgICB7CisgICAgICAgIGF1dG8gUm9sZSA9IG90VGhyZWFkR2V0RGV2aWNlUm9sZShhTm9kZS0+bUluc3RhbmNlKTsKKyAgICAgICAgcHJpbnRmKCIlZDogbmV3IHJvbGU6ICVzXHJcbiIsIGFOb2RlLT5tSWQsIG90RGV2aWNlUm9sZVRvU3RyaW5nKFJvbGUpKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfQURERUQpICE9IDAgfHwgKGFGbGFncyAmIE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCkgIT0gMCB8fAorICAgICAgICAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19BRERFRCkgIT0gMCB8fCAoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19SRU1PVkVEKSAhPSAwKQorICAgIHsKKyAgICAgICAgSGFuZGxlQWRkcmVzc0NoYW5nZXMoYU5vZGUpOworICAgIH0KKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVMb2coY29uc3QgY2hhciAqYU1lc3NhZ2UpCit7CisgICAgTG9nSW5mbyhPVF9BUEksICIlcyIsIGFNZXNzYWdlKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIG90Tm9kZSogT1RDQUxMIG90Tm9kZUluaXQodWludDMyX3QgaWQpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGF1dG8gQXBpSW5zdGFuY2UgPSBHZXRBcGlJbnN0YW5jZSgpOworICAgIGlmIChBcGlJbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJHZXRBcGlJbnN0YW5jZSBmYWlsZWQhXHJcbiIpOworICAgICAgICBvdExvZ0Z1bmNFeGl0TXNnKCJHZXRBcGlJbnN0YW5jZSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBCdXNBZGRlZCA9IGZhbHNlOworICAgIERXT1JEIG5ld0J1c0luZGV4OworICAgIE5FVF9JRklOREVYIGlmSW5kZXggPSB7fTsKKyAgICBORVRfTFVJRCBpZkx1aWQgPSB7fTsKKyAgICBHVUlEIGlmR3VpZCA9IHt9OworICAgIG90Tm9kZSAqbm9kZSA9IG51bGxwdHI7CisgICAgCisgICAgRFdPUkQgZHdFcnJvcjsKKyAgICBEV09SRCB0cmllcyA9IDA7CisgICAgd2hpbGUgKHRyaWVzIDwgMTAwMCkKKyAgICB7CisgICAgICAgIG5ld0J1c0luZGV4ID0gKGdOZXh0QnVzTnVtYmVyICsgdHJpZXMpICUgMTAwMDsKKyAgICAgICAgaWYgKG5ld0J1c0luZGV4ID09IDApIG5ld0J1c0luZGV4Kys7CisKKyAgICAgICAgZHdFcnJvciA9IG90dm1wQWRkVmlydHVhbEJ1cyhnVm1wSGFuZGxlLCAmbmV3QnVzSW5kZXgsICZpZkluZGV4KTsKKyAgICAgICAgaWYgKGR3RXJyb3IgPT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgQnVzQWRkZWQgPSB0cnVlOworICAgICAgICAgICAgZ05leHRCdXNOdW1iZXIgPSBuZXdCdXNJbmRleCArIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkd0Vycm9yID09IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSIHx8IGR3RXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyaWVzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIm90dm1wQWRkVmlydHVhbEJ1cyBmYWlsZWQsIDB4JXghXHJcbiIsIGR3RXJyb3IpOworICAgICAgICAgICAgb3RMb2dGdW5jRXhpdE1zZygib3R2bXBBZGRWaXJ0dWFsQnVzIGZhaWxlZCIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0cmllcyA9PSAxMDAwKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdHZtcEFkZFZpcnR1YWxCdXMgZmFpbGVkIHRvIGZpbmQgYW4gZW1wdHkgYnVzIVxyXG4iKTsKKyAgICAgICAgb3RMb2dGdW5jRXhpdE1zZygib3R2bXBBZGRWaXJ0dWFsQnVzIGZhaWxlZCB0byBmaW5kIGFuIGVtcHR5IGJ1cyIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmICgoZHdFcnJvciA9IG90dm1wU2V0QWRhcHRlclRvcG9sb2d5R3VpZChnVm1wSGFuZGxlLCBuZXdCdXNJbmRleCwgJmdUb3BvbG9neUd1aWQpKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdHZtcFNldEFkYXB0ZXJUb3BvbG9neUd1aWQgZmFpbGVkLCAweCV4IVxyXG4iLCBkd0Vycm9yKTsKKyAgICAgICAgb3RMb2dGdW5jRXhpdE1zZygib3R2bXBTZXRBZGFwdGVyVG9wb2xvZ3lHdWlkIGZhaWxlZCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChFUlJPUl9TVUNDRVNTICE9IENvbnZlcnRJbnRlcmZhY2VJbmRleFRvTHVpZChpZkluZGV4LCAmaWZMdWlkKSkKKyAgICB7CisgICAgICAgIHByaW50ZigiQ29udmVydEludGVyZmFjZUluZGV4VG9MdWlkKCV1KSBmYWlsZWQhXHJcbiIsIGlmSW5kZXgpOworICAgICAgICBvdExvZ0Z1bmNFeGl0TXNnKCJDb252ZXJ0SW50ZXJmYWNlSW5kZXhUb0x1aWQgZmFpbGVkIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKEVSUk9SX1NVQ0NFU1MgIT0gQ29udmVydEludGVyZmFjZUx1aWRUb0d1aWQoJmlmTHVpZCwgJmlmR3VpZCkpCisgICAgeworICAgICAgICBwcmludGYoIkNvbnZlcnRJbnRlcmZhY2VMdWlkVG9HdWlkIGZhaWxlZCFcclxuIik7CisgICAgICAgIG90TG9nRnVuY0V4aXRNc2coIkNvbnZlcnRJbnRlcmZhY2VMdWlkVG9HdWlkIGZhaWxlZCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8vIEtlZXAgdHJ5aW5nIGZvciB1cCB0byAzMCBzZWNvbmRzCisgICAgYXV0byBTdGFydFRpY2sgPSBHZXRUaWNrQ291bnQ2NCgpOworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gbnVsbHB0cjsKKyAgICBkbworICAgIHsKKyAgICAgICAgaW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdChBcGlJbnN0YW5jZSwgJmlmR3VpZCk7CisgICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxscHRyKSBicmVhazsKKworICAgICAgICBhdXRvIHdhaXRUaW1lTXMgPSAoMzAgKiAxMDAwIC0gKExPTkdMT05HKShHZXRUaWNrQ291bnQ2NCgpIC0gU3RhcnRUaWNrKSk7CisgICAgICAgIGlmICh3YWl0VGltZU1zIDw9IDApIGJyZWFrOworICAgICAgICBhdXRvIHdhaXRSZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGdEZXZpY2VBcnJpdmFsRXZlbnQsIChEV09SRCl3YWl0VGltZU1zKTsKKyAgICAgICAgaWYgKHdhaXRSZXN1bHQgIT0gV0FJVF9PQkpFQ1RfMCkgYnJlYWs7CisKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGlmIChpbnN0YW5jZSA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdEluc3RhbmNlSW5pdCBmYWlsZWQhXHJcbiIpOworICAgICAgICBvdExvZ0Z1bmNFeGl0TXNnKCJvdEluc3RhbmNlSW5pdCBmYWlsZWQiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBHVUlEIERldmljZUd1aWQgPSBvdEdldERldmljZUd1aWQoaW5zdGFuY2UpOworICAgIHVpbnQzMl90IENvbXBhcnRtZW50ID0gb3RHZXRDb21wYXJ0bWVudElkKGluc3RhbmNlKTsKKworICAgIG5vZGUgPSBuZXcgb3ROb2RlKCk7CisgICAgcHJpbnRmKCIlZDogTmV3IERldmljZSAiIEdVSURfRk9STUFUICIgaW4gY29tcGFydG1lbnQgJWRcclxuIiwgaWQsIEdVSURfQVJHKERldmljZUd1aWQpLCBDb21wYXJ0bWVudCk7CisKKyAgICBub2RlLT5tSWQgPSBpZDsKKyAgICBub2RlLT5tSW50ZXJmYWNlSW5kZXggPSBpZkluZGV4OworICAgIG5vZGUtPm1CdXNJbmRleCA9IG5ld0J1c0luZGV4OworICAgIG5vZGUtPm1JbnN0YW5jZSA9IGluc3RhbmNlOworCisgICAgbm9kZS0+bUVuZXJneVNjYW5FdmVudCA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIFRSVUUsIEZBTFNFLCBudWxscHRyKTsKKyAgICBub2RlLT5tUGFuSWRDb25mbGljdEV2ZW50ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwgVFJVRSwgRkFMU0UsIG51bGxwdHIpOworCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJmdDUyk7CisgICAgZ05vZGVzLnB1c2hfYmFjayhub2RlKTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJm5vZGUtPm1DUyk7CisKKyAgICAvLyBSZXNldCBhbnkgcHJldmlvdXNseSBzYXZlZCBzZXR0aW5ncworICAgIG90SW5zdGFuY2VGYWN0b3J5UmVzZXQoaW5zdGFuY2UpOworCisgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhpbnN0YW5jZSwgb3ROb2RlU3RhdGVDaGFuZ2VkQ2FsbGJhY2ssIG5vZGUpOworCisgICAgSGFuZGxlQWRkcmVzc0NoYW5nZXMobm9kZSk7CisKKyAgICBvdExvZ0Z1bmNFeGl0TXNnKCJzdWNjZXNzLiBbJWRdID0gJSFHVUlEISIsIGlkLCAmRGV2aWNlR3VpZCk7CisKK2Vycm9yOgorCisgICAgaWYgKG5vZGUgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGlmIChCdXNBZGRlZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3R2bXBSZW1vdmVWaXJ0dWFsQnVzKGdWbXBIYW5kbGUsIG5ld0J1c0luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbGVhc2VBcGlJbnN0YW5jZSgpOworICAgIH0KKworICAgIHJldHVybiBub2RlOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRmluYWxpemUob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIGlmIChhTm9kZSAhPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlZDogUmVtb3ZpbmcgRGV2aWNlXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgICAgIC8vIEZyZWUgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCBub3cKKyAgICAgICAgZm9yIGVhY2ggKGF1dG8gbWVtIGluIGFOb2RlLT5tTWVtb3J5VG9GcmVlKQorICAgICAgICAgICAgZnJlZShtZW0pOworCisgICAgICAgIC8vIENsZWFuIHVwIGNhbGxiYWNrcworICAgICAgICBDbG9zZUhhbmRsZShhTm9kZS0+bVBhbklkQ29uZmxpY3RFdmVudCk7CisgICAgICAgIENsb3NlSGFuZGxlKGFOb2RlLT5tRW5lcmd5U2NhbkV2ZW50KTsKKyAgICAgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhhTm9kZS0+bUluc3RhbmNlLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdOb2Rlcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdOb2Rlc1tpXSA9PSBhTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnTm9kZXMuZXJhc2UoZ05vZGVzLmJlZ2luKCkgKyBpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgICAgICAvLyBGcmVlIHRoZSBpbnN0YW5jZQorICAgICAgICBvdEZyZWVNZW1vcnkoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgICAgIGFOb2RlLT5tSW5zdGFuY2UgPSBudWxscHRyOworCisgICAgICAgIC8vIEZyZWUgdGhlIHBpbmcgaGFuZGxlcnMKKyAgICAgICAgSGFuZGxlQWRkcmVzc0NoYW5nZXMoYU5vZGUpOworICAgICAgICBhc3NlcnQoYU5vZGUtPm1QaW5nSGFuZGxlcnMuc2l6ZSgpID09IDApOworICAgICAgICBpZiAoYU5vZGUtPm1QaW5nSGFuZGxlcnMuc2l6ZSgpICE9IDApIHByaW50ZigiJWQgbGVmdCBvdmVyIHBpbmcgaGFuZGxlcnMhISEiLCAoaW50KWFOb2RlLT5tUGluZ0hhbmRsZXJzLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJmFOb2RlLT5tQ1MpOworCisgICAgICAgIC8vIERlbGV0ZSB0aGUgdmlydHVhbCBidXMKKyAgICAgICAgb3R2bXBSZW1vdmVWaXJ0dWFsQnVzKGdWbXBIYW5kbGUsIGFOb2RlLT5tQnVzSW5kZXgpOworICAgICAgICBkZWxldGUgYU5vZGU7CisgICAgICAgIAorICAgICAgICBSZWxlYXNlQXBpSW5zdGFuY2UoKTsKKyAgICB9CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TW9kZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTW9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlcyIsIGFOb2RlLT5tSWQsIGFNb2RlKTsKKyAgICBwcmludGYoIiVkOiBtb2RlICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFNb2RlKTsKKworICAgIG90TGlua01vZGVDb25maWcgbGlua01vZGUgPSB7MH07CisKKyAgICBjb25zdCBjaGFyICppbmRleCA9IGFNb2RlOworICAgIHdoaWxlICgqaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKCppbmRleCkKKyAgICAgICAgeworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGxpbmtNb2RlLm1SeE9uV2hlbklkbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgbGlua01vZGUubVNlY3VyZURhdGFSZXF1ZXN0cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBsaW5rTW9kZS5tRGV2aWNlVHlwZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICBsaW5rTW9kZS5tTmV0d29ya0RhdGEgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCsrOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRTZXRMaW5rTW9kZShhTm9kZS0+bUluc3RhbmNlLCBsaW5rTW9kZSk7CisgICAgCisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVJbnRlcmZhY2VVcChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogaWZjb25maWcgdXBcclxuIiwgYU5vZGUtPm1JZCk7CisKKyAgICBhdXRvIGVycm9yID0gb3RJcDZTZXRFbmFibGVkKGFOb2RlLT5tSW5zdGFuY2UsIHRydWUpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVJbnRlcmZhY2VEb3duKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBpZmNvbmZpZyBkb3duXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgKHZvaWQpb3RJcDZTZXRFbmFibGVkKGFOb2RlLT5tSW5zdGFuY2UsIGZhbHNlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVUaHJlYWRTdGFydChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogdGhyZWFkIHN0YXJ0XHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgYXV0byBlcnJvciA9IG90VGhyZWFkU2V0RW5hYmxlZChhTm9kZS0+bUluc3RhbmNlLCB0cnVlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlVGhyZWFkU3RvcChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogdGhyZWFkIHN0b3BcclxuIiwgYU5vZGUtPm1JZCk7CisKKyAgICAodm9pZClvdFRocmVhZFNldEVuYWJsZWQoYU5vZGUtPm1JbnN0YW5jZSwgZmFsc2UpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lclN0YXJ0KG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBjb21taXNzaW9uZXIgc3RhcnRcclxuIiwgYU5vZGUtPm1JZCk7CisKKyAgICBhdXRvIGVycm9yID0gb3RDb21taXNzaW9uZXJTdGFydChhTm9kZS0+bUluc3RhbmNlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVySm9pbmVyQWRkKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFFeHRBZGRyLCBjb25zdCBjaGFyICphUFNLZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlcyAlcyIsIGFOb2RlLT5tSWQsIGFFeHRBZGRyLCBhUFNLZCk7CisgICAgcHJpbnRmKCIlZDogY29tbWlzc2lvbmVyIGpvaW5lciBhZGQgJXMgJXNcclxuIiwgYU5vZGUtPm1JZCwgYUV4dEFkZHIsIGFQU0tkKTsKKworICAgIGNvbnN0IHVpbnQzMl90IGtEZWZhdWx0Sm9pbmVyVGltZW91dCA9IDEyMDsKKworICAgIG90RXJyb3IgZXJyb3I7CisgICAgCisgICAgaWYgKHN0cmNtcChhRXh0QWRkciwgIioiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lckFkZEpvaW5lcihhTm9kZS0+bUluc3RhbmNlLCBudWxscHRyLCBhUFNLZCwga0RlZmF1bHRKb2luZXJUaW1lb3V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RFeHRBZGRyZXNzIGV4dEFkZHI7CisgICAgICAgIGlmIChIZXgyQmluKGFFeHRBZGRyLCBleHRBZGRyLm04LCBzaXplb2YoZXh0QWRkcikpICE9IHNpemVvZihleHRBZGRyKSkKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9QQVJTRTsKKworICAgICAgICBlcnJvciA9IG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKGFOb2RlLT5tSW5zdGFuY2UsICZleHRBZGRyLCBhUFNLZCwga0RlZmF1bHRKb2luZXJUaW1lb3V0KTsKKyAgICB9CisgICAgCisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lclN0b3Aob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IGNvbW1pc3Npb25lciBzdG9wXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgKHZvaWQpb3RDb21taXNzaW9uZXJTdG9wKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUpvaW5lclN0YXJ0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQU0tkLCBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdICVzICVzIiwgYU5vZGUtPm1JZCwgYVBTS2QsIGFQcm92aXNpb25pbmdVcmwpOworICAgIHByaW50ZigiJWQ6IGpvaW5lciBzdGFydCAlcyAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhUFNLZCwgYVByb3Zpc2lvbmluZ1VybCk7CisKKyAgICAvLyBUT0RPOiBoYW5kbGUgdGhlIGpvaW5lciBjb21wbGV0aW9uIGNhbGxiYWNrCisgICAgYXV0byBlcnJvciA9IG90Sm9pbmVyU3RhcnQoYU5vZGUtPm1JbnN0YW5jZSwgYVBTS2QsIGFQcm92aXNpb25pbmdVcmwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIAorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVKb2luZXJTdG9wKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBqb2luZXIgc3RvcFxyXG4iLCBhTm9kZS0+bUlkKTsKKworICAgICh2b2lkKW90Sm9pbmVyU3RvcChhTm9kZS0+bUluc3RhbmNlKTsKKyAgICAKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVDbGVhcldoaXRlbGlzdChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogd2hpdGVsaXN0IGNsZWFyXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgb3RMaW5rQ2xlYXJXaGl0ZWxpc3QoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRW5hYmxlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiB3aGl0ZWxpc3QgZW5hYmxlXHJcbiIsIGFOb2RlLT5tSWQpOworCisgICAgb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZChhTm9kZS0+bUluc3RhbmNlLCB0cnVlKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVEaXNhYmxlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiB3aGl0ZWxpc3QgZGlzYWJsZVxyXG4iLCBhTm9kZS0+bUlkKTsKKworICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQoYU5vZGUtPm1JbnN0YW5jZSwgZmFsc2UpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUFkZFdoaXRlbGlzdChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphRXh0QWRkciwgaW50OF90IGFSc3NpKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgaWYgKGFSc3NpID09IDApCisgICAgICAgIHByaW50ZigiJWQ6IHdoaXRlbGlzdCBhZGQgJXNcclxuIiwgYU5vZGUtPm1JZCwgYUV4dEFkZHIpOworICAgIGVsc2UgcHJpbnRmKCIlZDogd2hpdGVsaXN0IGFkZCAlcyAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhRXh0QWRkciwgYVJzc2kpOworCisgICAgdWludDhfdCBleHRBZGRyWzhdOworICAgIGlmIChIZXgyQmluKGFFeHRBZGRyLCBleHRBZGRyLCBzaXplb2YoZXh0QWRkcikpICE9IHNpemVvZihleHRBZGRyKSkKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworCisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBpZiAoYVJzc2kgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RMaW5rQWRkV2hpdGVsaXN0KGFOb2RlLT5tSW5zdGFuY2UsIGV4dEFkZHIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90TGlua0FkZFdoaXRlbGlzdFJzc2koYU5vZGUtPm1JbnN0YW5jZSwgZXh0QWRkciwgYVJzc2kpOworICAgIH0KKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlUmVtb3ZlV2hpdGVsaXN0KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFFeHRBZGRyKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogd2hpdGVsaXN0IHJlbW92ZSAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhRXh0QWRkcik7CisKKyAgICB1aW50OF90IGV4dEFkZHJbOF07CisgICAgaWYgKEhleDJCaW4oYUV4dEFkZHIsIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgIT0gc2l6ZW9mKGV4dEFkZHIpKQorICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworCisgICAgb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KGFOb2RlLT5tSW5zdGFuY2UsIGV4dEFkZHIpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIHVpbnQxNl90IE9UQ0FMTCBvdE5vZGVHZXRBZGRyMTYob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRHZXRSbG9jMTYoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogcmxvYzE2XHJcbiUwNHhcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRIYXNoTWFjQWRkcmVzcyhvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgb3RFeHRBZGRyZXNzIGFIYXNoTWFjQWRkcmVzcyA9IHt9OworICAgIG90TGlua0dldEpvaW5lcklkKGFOb2RlLT5tSW5zdGFuY2UsICZhSGFzaE1hY0FkZHJlc3MpOworICAgIGNoYXIqIHN0ciA9IChjaGFyKiltYWxsb2MoMTgpOworICAgIGlmIChzdHIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGFOb2RlLT5tTWVtb3J5VG9GcmVlLnB1c2hfYmFjayhzdHIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgICAgIHNwcmludGZfcyhzdHIgKyBpICogMiwgMTggLSAoMiAqIGkpLCAiJTAyeCIsIGFIYXNoTWFjQWRkcmVzcy5tOFtpXSk7CisgICAgICAgIHByaW50ZigiJWQ6IGhhc2htYWNhZGRyXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gc3RyOworfQorCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldEFkZHI2NChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byBleHRBZGRyID0gb3RMaW5rR2V0RXh0ZW5kZWRBZGRyZXNzKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIGNoYXIqIHN0ciA9IChjaGFyKiltYWxsb2MoMTgpOworICAgIGlmIChzdHIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGFOb2RlLT5tTWVtb3J5VG9GcmVlLnB1c2hfYmFjayhzdHIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgICAgIHNwcmludGZfcyhzdHIgKyBpICogMiwgMTggLSAoMiAqIGkpLCAiJTAyeCIsIGV4dEFkZHJbaV0pOworICAgICAgICBwcmludGYoIiVkOiBleHRhZGRyXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90RnJlZU1lbW9yeShleHRBZGRyKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHN0cjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldENoYW5uZWwob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IGNoYW5uZWwgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUNoYW5uZWwpOworICAgIGF1dG8gcmVzdWx0ID0gb3RMaW5rU2V0Q2hhbm5lbChhTm9kZS0+bUluc3RhbmNlLCBhQ2hhbm5lbCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSB1aW50OF90IE9UQ0FMTCBvdE5vZGVHZXRDaGFubmVsKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90TGlua0dldENoYW5uZWwoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogY2hhbm5lbFxyXG4lZFxyXG4iLCBhTm9kZS0+bUlkLCByZXN1bHQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TWFzdGVya2V5KG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFNYXN0ZXJrZXkpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gJXMiLCBhTm9kZS0+bUlkLCBhTWFzdGVya2V5KTsKKyAgICBwcmludGYoIiVkOiBtYXN0ZXJrZXkgJXNcclxuIiwgYU5vZGUtPm1JZCwgYU1hc3RlcmtleSk7CisKKyAgICBpbnQga2V5TGVuZ3RoOworICAgIG90TWFzdGVyS2V5IGtleTsKKyAgICBpZiAoKGtleUxlbmd0aCA9IEhleDJCaW4oYU1hc3RlcmtleSwga2V5Lm04LCBzaXplb2Yoa2V5Lm04KSkpICE9IE9UX01BU1RFUl9LRVlfU0laRSkKKyAgICB7CisgICAgICAgIHByaW50ZigiaW52YWxpZCBsZW5ndGgga2V5ICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9QQVJTRTsKKyAgICB9CisKKyAgICBhdXRvIGVycm9yID0gb3RUaHJlYWRTZXRNYXN0ZXJLZXkoYU5vZGUtPm1JbnN0YW5jZSwgJmtleSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRNYXN0ZXJrZXkob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gYU1hc3RlcktleSA9IG90VGhyZWFkR2V0TWFzdGVyS2V5KGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHVpbnQ4X3Qgc3RyTGVuZ3RoID0gMipzaXplb2Yob3RNYXN0ZXJLZXkpICsgMTsKKyAgICBjaGFyKiBzdHIgPSAoY2hhciopbWFsbG9jKHN0ckxlbmd0aCk7CisgICAgaWYgKHN0ciAhPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYU5vZGUtPm1NZW1vcnlUb0ZyZWUucHVzaF9iYWNrKHN0cik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKG90TWFzdGVyS2V5KTsgaSsrKQorICAgICAgICAgICAgc3ByaW50Zl9zKHN0ciArIGkgKiAyLCBzdHJMZW5ndGggLSAoMiAqIGkpLCAiJTAyeCIsIGFNYXN0ZXJLZXktPm04W2ldKTsKKyAgICAgICAgcHJpbnRmKCIlZDogbWFzdGVya2V5XHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90RnJlZU1lbW9yeShhTWFzdGVyS2V5KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHN0cjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFBTS2Mob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVBTS2MpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gJXMiLCBhTm9kZS0+bUlkLCBhUFNLYyk7CisgICAgcHJpbnRmKCIlZDogcHNrYyAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhUFNLYyk7CisKKyAgICB1aW50OF90IHBza2NbT1RfUFNLQ19NQVhfU0laRV07CisgICAgaWYgKEhleDJCaW4oYVBTS2MsIHBza2MsIHNpemVvZihwc2tjKSkgIT0gT1RfUFNLQ19NQVhfU0laRSkKKyAgICB7CisgICAgICAgIHByaW50ZigiaW52YWxpZCBwc2tjICVzXHJcbiIsIGFQU0tjKTsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworICAgIH0KKworICAgIGF1dG8gZXJyb3IgPSBvdFRocmVhZFNldFBTS2MoYU5vZGUtPm1JbnN0YW5jZSwgcHNrYyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRQU0tjKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIGFQU0tjID0gb3RUaHJlYWRHZXRQU0tjKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHVpbnQ4X3Qgc3RyTGVuZ3RoID0gMiAqIE9UX1BTS0NfTUFYX1NJWkUgKyAxOworICAgIGNoYXIqIHN0ciA9IChjaGFyKiltYWxsb2Moc3RyTGVuZ3RoKTsKKyAgICBpZiAoc3RyICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBhTm9kZS0+bU1lbW9yeVRvRnJlZS5wdXNoX2JhY2soc3RyKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBPVF9QU0tDX01BWF9TSVpFOyBpKyspCisgICAgICAgICAgICBzcHJpbnRmX3Moc3RyICsgaSAqIDIsIHN0ckxlbmd0aCAtICgyICogaSksICIlMDJ4IiwgYVBTS2NbaV0pOworICAgICAgICBwcmludGYoIiVkOiBwc2tjXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHN0cik7CisgICAgfQorICAgIG90RnJlZU1lbW9yeShhUFNLYyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBzdHI7Cit9CisKK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlR2V0S2V5U2VxdWVuY2VDb3VudGVyKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkR2V0S2V5U2VxdWVuY2VDb3VudGVyKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHByaW50ZigiJWQ6IGtleXNlcXVlbmNlXHJcbiVkXHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVNlcXVlbmNlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDoga2V5c2VxdWVuY2UgY291bnRlciAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhU2VxdWVuY2UpOworICAgIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKGFOb2RlLT5tSW5zdGFuY2UsIGFTZXF1ZW5jZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG90Tm9kZSogYU5vZGUsIHVpbnQzMl90IGFLZXlTd2l0Y2hHdWFyZFRpbWUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBrZXlzZXF1ZW5jZSBndWFyZHRpbWUgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUtleVN3aXRjaEd1YXJkVGltZSk7CisgICAgb3RUaHJlYWRTZXRLZXlTd2l0Y2hHdWFyZFRpbWUoYU5vZGUtPm1JbnN0YW5jZSwgYUtleVN3aXRjaEd1YXJkVGltZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0TmV0d29ya0lkVGltZW91dChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFUaW1lb3V0KQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogbmV0d29ya2lkdGltZW91dCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhVGltZW91dCk7CisgICAgb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0KGFOb2RlLT5tSW5zdGFuY2UsIGFUaW1lb3V0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXROZXR3b3JrTmFtZShvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphTmFtZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IG5ldHdvcmtuYW1lICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFOYW1lKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkU2V0TmV0d29ya05hbWUoYU5vZGUtPm1JbnN0YW5jZSwgYU5hbWUpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgY29uc3QgY2hhciogT1RDQUxMIG90Tm9kZUdldE5ldHdvcmtOYW1lKG90Tm9kZSogYU5vZGUpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkR2V0TmV0d29ya05hbWUoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgYU5vZGUtPm1NZW1vcnlUb0ZyZWUucHVzaF9iYWNrKChjaGFyKilyZXN1bHQpOworICAgIHByaW50ZigiJWQ6IG5ldHdvcmtuYW1lXHJcbiVzXHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSB1aW50MTZfdCBPVENBTEwgb3ROb2RlR2V0UGFuSWQob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RMaW5rR2V0UGFuSWQoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogcGFuaWRcclxuMHglMDR4XHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRQYW5JZChvdE5vZGUqIGFOb2RlLCB1aW50MTZfdCBhUGFuSWQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBwYW5pZCAweCUwNHhcclxuIiwgYU5vZGUtPm1JZCwgYVBhbklkKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90TGlua1NldFBhbklkKGFOb2RlLT5tSW5zdGFuY2UsIGFQYW5JZCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlR2V0UGFydGl0aW9uSWQob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRHZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIHByaW50ZigiJWQ6IGxlYWRlcnBhcnRpdGlvbmlkXHJcbjB4JTA0eFxyXG4iLCBhTm9kZS0+bUlkLCByZXN1bHQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0UGFydGl0aW9uSWQob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVBhcnRpdGlvbklkKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogbGVhZGVycGFydGl0aW9uaWQgMHglMDR4XHJcbiIsIGFOb2RlLT5tSWQsIGFQYXJ0aXRpb25JZCk7CisgICAgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKGFOb2RlLT5tSW5zdGFuY2UsIGFQYXJ0aXRpb25JZCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFUaHJlc2hvbGQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiByb3V0ZXJ1cGdyYWRldGhyZXNob2xkICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFUaHJlc2hvbGQpOworICAgIG90VGhyZWFkU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChhTm9kZS0+bUluc3RhbmNlLCBhVGhyZXNob2xkKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhVGhyZXNob2xkKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogcm91dGVyZG93bmdyYWRldGhyZXNob2xkICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFUaHJlc2hvbGQpOworICAgIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKGFOb2RlLT5tSW5zdGFuY2UsIGFUaHJlc2hvbGQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbGVhc2VSb3V0ZXJJZChvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IHJlbGVhc2Vyb3V0ZXJpZCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhUm91dGVySWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRSZWxlYXNlUm91dGVySWQoYU5vZGUtPm1JbnN0YW5jZSwgYVJvdXRlcklkKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGNvbnN0IGNoYXIqIE9UQ0FMTCBvdE5vZGVHZXRTdGF0ZShvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byByb2xlID0gb3RUaHJlYWRHZXREZXZpY2VSb2xlKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIGF1dG8gcmVzdWx0ID0gX3N0cmR1cChvdERldmljZVJvbGVUb1N0cmluZyhyb2xlKSk7CisgICAgYU5vZGUtPm1NZW1vcnlUb0ZyZWUucHVzaF9iYWNrKHJlc3VsdCk7CisgICAgcHJpbnRmKCIlZDogc3RhdGVcclxuJXNcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFN0YXRlKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFTdGF0ZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IHN0YXRlICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFTdGF0ZSk7CisKKyAgICBvdEVycm9yIGVycm9yOworICAgIGlmIChzdHJjbXAoYVN0YXRlLCAiZGV0YWNoZWQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZURldGFjaGVkKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYVN0YXRlLCAiY2hpbGQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZUNoaWxkKGFOb2RlLT5tSW5zdGFuY2UpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYVN0YXRlLCAicm91dGVyIikgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRCZWNvbWVSb3V0ZXIoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhU3RhdGUsICJsZWFkZXIiKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZEJlY29tZUxlYWRlcihhTm9kZS0+bUluc3RhbmNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgfQorICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK09UTk9ERUFQSSB1aW50MzJfdCBPVENBTEwgb3ROb2RlR2V0VGltZW91dChvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byByZXN1bHQgPSBvdFRocmVhZEdldENoaWxkVGltZW91dChhTm9kZS0+bUluc3RhbmNlKTsKKyAgICBwcmludGYoIiVkOiBjaGlsZHRpbWVvdXRcclxuJWRcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldFRpbWVvdXQob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBjaGlsZHRpbWVvdXQgJWRcclxuIiwgYU5vZGUtPm1JZCwgYVRpbWVvdXQpOworICAgIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0KGFOb2RlLT5tSW5zdGFuY2UsIGFUaW1lb3V0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSB1aW50OF90IE9UQ0FMTCBvdE5vZGVHZXRXZWlnaHQob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogbGVhZGVyd2VpZ2h0XHJcbiVkXHJcbiIsIGFOb2RlLT5tSWQsIHJlc3VsdCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRXZWlnaHQob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhV2VpZ2h0KQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogbGVhZGVyd2VpZ2h0ICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFXZWlnaHQpOworICAgIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQoYU5vZGUtPm1JbnN0YW5jZSwgYVdlaWdodCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiAwOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkSXBBZGRyKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFBZGRyKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogYWRkIGlwYWRkciAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhQWRkcik7CisKKyAgICBvdE5ldGlmQWRkcmVzcyBhQWRkcmVzczsKKyAgICBhdXRvIGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhQWRkciwgJmFBZGRyZXNzLm1BZGRyZXNzKTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworCisgICAgYUFkZHJlc3MubVByZWZpeExlbmd0aCA9IDY0OworICAgIGFBZGRyZXNzLm1QcmVmZXJyZWQgPSB0cnVlOworICAgIGFBZGRyZXNzLm1WYWxpZCA9IHRydWU7CisgICAgYXV0byByZXN1bHQgPSBvdElwNkFkZFVuaWNhc3RBZGRyZXNzKGFOb2RlLT5tSW5zdGFuY2UsICZhQWRkcmVzcyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1aW50MTZfdCBTd2FwMTYodWludDE2X3QgdikKK3sKKyAgICByZXR1cm4KKyAgICAgICAgKCgodiAmIDB4MDBmZlUpIDw8IDgpICYgMHhmZjAwKSB8CisgICAgICAgICgoKHYgJiAweGZmMDBVKSA+PiA4KSAmIDB4MDBmZik7Cit9CisKK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlR2V0QWRkcnMob3ROb2RlKiBhTm9kZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IGlwYWRkclxyXG4iLCBhTm9kZS0+bUlkKTsKKworICAgIGF1dG8gYWRkcnMgPSBvdElwNkdldFVuaWNhc3RBZGRyZXNzZXMoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgaWYgKGFkZHJzID09IG51bGxwdHIpIHJldHVybiBudWxscHRyOworCisgICAgY2hhciogc3RyID0gKGNoYXIqKW1hbGxvYyg1MTIpOworICAgIGlmIChzdHIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGFOb2RlLT5tTWVtb3J5VG9GcmVlLnB1c2hfYmFjayhzdHIpOworICAgICAgICBSdGxaZXJvTWVtb3J5KHN0ciwgNTEyKTsKKworICAgICAgICBjaGFyKiBjdXIgPSBzdHI7CisgICAgCisgICAgICAgIGZvciAoY29uc3Qgb3ROZXRpZkFkZHJlc3MgKmFkZHIgPSBhZGRyczsgYWRkcjsgYWRkciA9IGFkZHItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyICE9IHN0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqY3VyID0gJ1xuJzsKKyAgICAgICAgICAgICAgICBjdXIrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBsYXN0ID0gY3VyOworCisgICAgICAgICAgICBjdXIgKz0gCisgICAgICAgICAgICAgICAgc3ByaW50Zl9zKAorICAgICAgICAgICAgICAgICAgICBjdXIsIDUxMiAtIChjdXIgLSBzdHIpLAorICAgICAgICAgICAgICAgICAgICAiJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXgiLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICBTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbN10pKTsKKworICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBsYXN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90RnJlZU1lbW9yeShhZGRycyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworCisgICAgcmV0dXJuIHN0cjsKK30KKworT1ROT0RFQVBJIHVpbnQzMl90IE9UQ0FMTCBvdE5vZGVHZXRDb250ZXh0UmV1c2VEZWxheShvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgYXV0byByZXN1bHQgPSBvdFRocmVhZEdldENvbnRleHRJZFJldXNlRGVsYXkoYU5vZGUtPm1JbnN0YW5jZSk7CisgICAgcHJpbnRmKCIlZDogY29udGV4dHJldXNlZGVsYXlcclxuJWRcclxuIiwgYU5vZGUtPm1JZCwgcmVzdWx0KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNldENvbnRleHRSZXVzZURlbGF5KG90Tm9kZSogYU5vZGUsIHVpbnQzMl90IGFEZWxheSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlZCIsIGFOb2RlLT5tSWQsIGFEZWxheSk7CisgICAgcHJpbnRmKCIlZDogY29udGV4dHJldXNlZGVsYXkgJWRcclxuIiwgYU5vZGUtPm1JZCwgYURlbGF5KTsKKyAgICBvdFRocmVhZFNldENvbnRleHRJZFJldXNlRGVsYXkoYU5vZGUtPm1JbnN0YW5jZSwgYURlbGF5KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVBZGRQcmVmaXgob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCwgY29uc3QgY2hhciAqYUZsYWdzLCBjb25zdCBjaGFyICphUHJlZmVyZW5jZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSIsIGFOb2RlLT5tSWQpOworICAgIHByaW50ZigiJWQ6IHByZWZpeCBhZGQgJXMgJXMgJXNcclxuIiwgYU5vZGUtPm1JZCwgYVByZWZpeCwgYUZsYWdzLCBhUHJlZmVyZW5jZSk7CisKKyAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBjb25maWcgPSB7MH07CisKKyAgICBhdXRvIGVycm9yID0gb3ROb2RlUGFyc2VQcmVmaXgoYVByZWZpeCwgJmNvbmZpZy5tUHJlZml4KTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworICAgIAorICAgIGNvbnN0IGNoYXIgKmluZGV4ID0gYUZsYWdzOworICAgIHdoaWxlICgqaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKCppbmRleCkKKyAgICAgICAgeworICAgICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGNvbmZpZy5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIGNvbmZpZy5tU2xhYWMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgY29uZmlnLm1EaGNwID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIGNvbmZpZy5tQ29uZmlndXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGNvbmZpZy5tRGVmYXVsdFJvdXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgIGNvbmZpZy5tT25NZXNoID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgIGNvbmZpZy5tU3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIAorICAgIGlmIChzdHJjbXAoYVByZWZlcmVuY2UsICJoaWdoIikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfSElHSDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFQcmVmZXJlbmNlLCAibWVkIikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYVByZWZlcmVuY2UsICJsb3ciKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29uZmlnLm1QcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1c7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeChhTm9kZS0+bUluc3RhbmNlLCAmY29uZmlnKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbW92ZVByZWZpeChvdE5vZGUqIGFOb2RlLCBjb25zdCBjaGFyICphUHJlZml4KQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisKKyAgICBvdElwNlByZWZpeCBwcmVmaXg7CisgICAgYXV0byBlcnJvciA9IG90Tm9kZVBhcnNlUHJlZml4KGFQcmVmaXgsICZwcmVmaXgpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKSByZXR1cm4gZXJyb3I7CisKKyAgICBhdXRvIHJlc3VsdCA9IG90Qm9yZGVyUm91dGVyUmVtb3ZlT25NZXNoUHJlZml4KGFOb2RlLT5tSW5zdGFuY2UsICZwcmVmaXgpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlQWRkUm91dGUob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYVByZWZpeCwgY29uc3QgY2hhciAqYVByZWZlcmVuY2UpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBvdEV4dGVybmFsUm91dGVDb25maWcgY29uZmlnID0gezB9OworCisgICAgYXV0byBlcnJvciA9IG90Tm9kZVBhcnNlUHJlZml4KGFQcmVmaXgsICZjb25maWcubVByZWZpeCk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKyAgICAKKyAgICBpZiAoc3RyY21wKGFQcmVmZXJlbmNlLCAiaGlnaCIpID09IDApCisgICAgeworICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0g7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhUHJlZmVyZW5jZSwgIm1lZCIpID09IDApCisgICAgeworICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFQcmVmZXJlbmNlLCAibG93IikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gb3RCb3JkZXJSb3V0ZXJBZGRSb3V0ZShhTm9kZS0+bUluc3RhbmNlLCAmY29uZmlnKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlbW92ZVJvdXRlKG90Tm9kZSogYU5vZGUsIGNvbnN0IGNoYXIgKmFQcmVmaXgpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKworICAgIG90SXA2UHJlZml4IHByZWZpeDsKKyAgICBhdXRvIGVycm9yID0gb3ROb2RlUGFyc2VQcmVmaXgoYVByZWZpeCwgJnByZWZpeCk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKworICAgIGF1dG8gcmVzdWx0ID0gb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZShhTm9kZS0+bUluc3RhbmNlLCAmcHJlZml4KTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVJlZ2lzdGVyTmV0ZGF0YShvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgcHJpbnRmKCIlZDogcmVnaXN0ZXJuZXRkYXRhXHJcbiIsIGFOb2RlLT5tSWQpOworICAgIGF1dG8gcmVzdWx0ID0gb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihhTm9kZS0+bUluc3RhbmNlKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2sodWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCB1aW50OF90ICphRW5lcmd5TGlzdCwgdWludDhfdCBhRW5lcmd5TGlzdExlbmd0aCwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3ROb2RlKiBhTm9kZSA9IChvdE5vZGUqKWFDb250ZXh0OworCisgICAgcHJpbnRmKCJFbmVyZ3k6IDB4JTA4eFxyXG4iLCBhQ2hhbm5lbE1hc2spOworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGFFbmVyZ3lMaXN0TGVuZ3RoOyBpKyspCisgICAgICAgIHByaW50ZigiJWQgIiwgYUVuZXJneUxpc3RbaV0pOworICAgIHByaW50ZigiXHJcbiIpOworCisgICAgU2V0RXZlbnQoYU5vZGUtPm1FbmVyZ3lTY2FuRXZlbnQpOworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlRW5lcmd5U2NhbihvdE5vZGUqIGFOb2RlLCB1aW50MzJfdCBhTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QsIHVpbnQxNl90IGFEdXJhdGlvbiwgY29uc3QgY2hhciAqYUFkZHIpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBlbmVyZ3kgc2NhbiAweCV4ICVkICVkICVkICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFNYXNrLCBhQ291bnQsIGFQZXJpb2QsIGFEdXJhdGlvbiwgYUFkZHIpOworCisgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3MgPSB7MH07CisgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYUFkZHIsICZhZGRyZXNzKTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHByaW50Zigib3RJcDZBZGRyZXNzRnJvbVN0cmluZyglcykgZmFpbGVkLCAweCV4IVxyXG4iLCBhQWRkciwgZXJyb3IpOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorICAgIAorICAgIFJlc2V0RXZlbnQoYU5vZGUtPm1FbmVyZ3lTY2FuRXZlbnQpOworCisgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lckVuZXJneVNjYW4oYU5vZGUtPm1JbnN0YW5jZSwgYU1hc2ssIGFDb3VudCwgYVBlcmlvZCwgYUR1cmF0aW9uLCAmYWRkcmVzcywgb3ROb2RlQ29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2ssIGFOb2RlKTsKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHByaW50Zigib3RDb21taXNzaW9uZXJFbmVyZ3lTY2FuIGZhaWxlZCwgMHgleCFcclxuIiwgZXJyb3IpOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGFOb2RlLT5tRW5lcmd5U2NhbkV2ZW50LCA4MDAwKSA9PSBXQUlUX09CSkVDVF8wID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBPVENBTEwgb3ROb2RlQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrKHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdE5vZGUqIGFOb2RlID0gKG90Tm9kZSopYUNvbnRleHQ7CisgICAgcHJpbnRmKCJDb25mbGljdDogMHglMDR4LCAweCUwOHhcclxuIiwgYVBhbklkLCBhQ2hhbm5lbE1hc2spOworICAgIFNldEV2ZW50KGFOb2RlLT5tUGFuSWRDb25mbGljdEV2ZW50KTsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVBhbklkUXVlcnkob3ROb2RlKiBhTm9kZSwgdWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhTWFzaywgY29uc3QgY2hhciAqYUFkZHIpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0iLCBhTm9kZS0+bUlkKTsKKyAgICBwcmludGYoIiVkOiBwYW5pZCBxdWVyeSAweCUwNHggMHgleCAlc1xyXG4iLCBhTm9kZS0+bUlkLCBhUGFuSWQsIGFNYXNrLCBhQWRkcik7CisKKyAgICBvdElwNkFkZHJlc3MgYWRkcmVzcyA9IHswfTsKKyAgICBhdXRvIGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhQWRkciwgJmFkZHJlc3MpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdElwNkFkZHJlc3NGcm9tU3RyaW5nKCVzKSBmYWlsZWQsIDB4JXghXHJcbiIsIGFBZGRyLCBlcnJvcik7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisgICAgCisgICAgUmVzZXRFdmVudChhTm9kZS0+bVBhbklkQ29uZmxpY3RFdmVudCk7CisKKyAgICBlcnJvciA9IG90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeShhTm9kZS0+bUluc3RhbmNlLCBhUGFuSWQsIGFNYXNrLCAmYWRkcmVzcywgb3ROb2RlQ29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrLCBhTm9kZSk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBwcmludGYoIm90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeSBmYWlsZWQsIDB4JXghXHJcbiIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdChhTm9kZS0+bVBhbklkQ29uZmxpY3RFdmVudCwgODAwMCkgPT0gV0FJVF9PQkpFQ1RfMCA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBjb25zdCBjaGFyKiBPVENBTEwgb3ROb2RlU2NhbihvdE5vZGUqIGFOb2RlKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdIiwgYU5vZGUtPm1JZCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhTm9kZSk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitPVE5PREVBUEkgdWludDMyX3QgT1RDQUxMIG90Tm9kZVBpbmcob3ROb2RlKiBhTm9kZSwgY29uc3QgY2hhciAqYUFkZHIsIHVpbnQxNl90IGFTaXplLCB1aW50MzJfdCBhTWluUmVwbGllcywgdWludDE2X3QgYVRpbWVvdXQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gJXMgKCVkIGJ5dGVzKSIsIGFOb2RlLT5tSWQsIGFBZGRyLCBhU2l6ZSk7CisgICAgcHJpbnRmKCIlZDogcGluZyAlcyAoJWQgYnl0ZXMpXHJcbiIsIGFOb2RlLT5tSWQsIGFBZGRyLCBhU2l6ZSk7CisKKyAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBkZXN0aW5hdGlvbiBhZGRyZXNzCisgICAgb3RJcDZBZGRyZXNzIG90RGVzdGluYXRpb25BZGRyZXNzID0gezB9OworICAgIGF1dG8gZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFBZGRyLCAmb3REZXN0aW5hdGlvbkFkZHJlc3MpOworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdElwNkFkZHJlc3NGcm9tU3RyaW5nKCVzKSBmYWlsZWQhXHJcbiIsIGFBZGRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8vIEdldCBNTC1FSUQgYXMgc291cmNlIGFkZHJlc3MgZm9yIHBpbmcKKyAgICBhdXRvIG90U291cmNlQWRkcmVzcyA9IG90VGhyZWFkR2V0TWVzaExvY2FsRWlkKGFOb2RlLT5tSW5zdGFuY2UpOworCisgICAgc29ja2FkZHJfaW42IFNvdXJjZUFkZHJlc3MgPSB7IEFGX0lORVQ2LCAoVVNIT1JUKShDZXJ0aWZpY2F0aW9uUGluZ1BvcnQgKyAxKSB9OworICAgIHNvY2thZGRyX2luNiBEZXN0aW5hdGlvbkFkZHJlc3MgPSB7IEFGX0lORVQ2LCBDZXJ0aWZpY2F0aW9uUGluZ1BvcnQgfTsKKworICAgIG1lbWNweSgmU291cmNlQWRkcmVzcy5zaW42X2FkZHIsIG90U291cmNlQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisgICAgbWVtY3B5KCZEZXN0aW5hdGlvbkFkZHJlc3Muc2luNl9hZGRyLCAmb3REZXN0aW5hdGlvbkFkZHJlc3MsIHNpemVvZihJTjZfQUREUikpOworCisgICAgb3RGcmVlTWVtb3J5KG90U291cmNlQWRkcmVzcyk7CisgICAgb3RTb3VyY2VBZGRyZXNzID0gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBQdXQgdGhlIGN1cnJlbnQgdGhlYWQgaW4gdGhlIGNvcnJlY3QgY29tcGFydG1lbnQKKyAgICBib29sIFJldmVydENvbXBhcnRtZW50T25FeGl0ID0gZmFsc2U7CisgICAgVUxPTkcgT3JpZ2luYWxDb21wYXJ0bWVudElEID0gR2V0Q3VycmVudFRocmVhZENvbXBhcnRtZW50SWQoKTsKKyAgICBpZiAoT3JpZ2luYWxDb21wYXJ0bWVudElEICE9IG90R2V0Q29tcGFydG1lbnRJZChhTm9kZS0+bUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIERXT1JEIGR3RXJyb3IgPSBFUlJPUl9TVUNDRVNTOworICAgICAgICBpZiAoKGR3RXJyb3IgPSBTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChvdEdldENvbXBhcnRtZW50SWQoYU5vZGUtPm1JbnN0YW5jZSkpKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIlNldEN1cnJlbnRUaHJlYWRDb21wYXJ0bWVudElkIGZhaWxlZCwgMHgleFxyXG4iLCBkd0Vycm9yKTsKKyAgICAgICAgfQorICAgICAgICBSZXZlcnRDb21wYXJ0bWVudE9uRXhpdCA9IHRydWU7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IDA7CisKKyAgICBhdXRvIFNlbmRCdWZmZXIgPSAoUENIQVIpbWFsbG9jKGFTaXplKTsKKyAgICBhdXRvIFJlY3ZCdWZmZXIgPSAoUENIQVIpbWFsbG9jKGFTaXplKTsKKworICAgIFdTQUJVRiBXU0FSZWN2QnVmZmVyID0geyBhU2l6ZSwgUmVjdkJ1ZmZlciB9OworICAgIAorICAgIFdTQU9WRVJMQVBQRUQgT3ZlcmxhcHBlZCA9IHsgMCB9OworICAgIE92ZXJsYXBwZWQuaEV2ZW50ID0gV1NBQ3JlYXRlRXZlbnQoKTsKKworICAgIERXT1JEIG51bWJlck9mUmVwbGllcyA9IDA7CisgICAgYm9vbCBpc1BlbmRpbmcgPSBmYWxzZTsKKyAgICBEV09SRCBGbGFnczsKKyAgICBEV09SRCBjYlJlY2VpdmVkOworICAgIGludCBjYkRlc3RpbmF0aW9uQWRkcmVzcyA9IHNpemVvZihEZXN0aW5hdGlvbkFkZHJlc3MpOworICAgIERXT1JEIGhvcExpbWl0ID0gNjQ7CisKKyAgICBTT0NLRVQgU29ja2V0ID0gV1NBU29ja2V0VyhBRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsIE5VTEwsIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOworICAgIGlmIChTb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpCisgICAgeworICAgICAgICBwcmludGYoIldTQVNvY2tldCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gQmluZCB0aGUgc29ja2V0IHRvIHRoZSBhZGRyZXNzCisgICAgcmVzdWx0ID0gYmluZChTb2NrZXQsIChzb2NrYWRkciopJlNvdXJjZUFkZHJlc3MsIHNpemVvZihTb3VyY2VBZGRyZXNzKSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoImJpbmQgZmFpbGVkLCAweCV4XHJcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICAKKyAgICAvLyBTZXQgdGhlIG11bHRpY2FzdCBob3AgbGltaXQgdG8gNjQKKyAgICByZXN1bHQgPSBzZXRzb2Nrb3B0KFNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X01VTFRJQ0FTVF9IT1BTLCAoY2hhciAqKSZob3BMaW1pdCwgc2l6ZW9mKGhvcExpbWl0KSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoInNldHNvY2tvcHQgKElQVjZfTVVMVElDQVNUX0hPUFMpIGZhaWxlZCwgMHgleFxyXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBzZW5kIGJ1ZmZlciBwYXR0ZXJuLgorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhU2l6ZTsgaSsrKQorICAgICAgICBTZW5kQnVmZmVyW2ldID0gKGNoYXIpKCdhJyArIChpICUgMjMpKTsKKworICAgIC8vIEhhY2sgdG8gcmV0cmlldmUgZGVzdGluYXRpb24gb24gb3RoZXIgZW5kCisgICAgbWVtY3B5X3MoU2VuZEJ1ZmZlciwgYVNpemUsICZvdERlc3RpbmF0aW9uQWRkcmVzcywgc2l6ZW9mKElONl9BRERSKSk7CisKKyAgICAvLyBTZW5kIHRoZSBidWZmZXIKKyAgICByZXN1bHQgPSBzZW5kdG8oU29ja2V0LCBTZW5kQnVmZmVyLCBhU2l6ZSwgMCwgKFNPQ0tBRERSKikmRGVzdGluYXRpb25BZGRyZXNzLCBzaXplb2YoRGVzdGluYXRpb25BZGRyZXNzKSk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgeworICAgICAgICBwcmludGYoInNlbmR0byBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgYXV0byBTdGFydFRpY2sgPSBHZXRUaWNrQ291bnQ2NCgpOworICAgIAorICAgIHdoaWxlIChudW1iZXJPZlJlcGxpZXMgPCBhTWluUmVwbGllcykKKyAgICB7CisgICAgICAgIEZsYWdzID0gMDsgLy9NU0dfUEFSVElBTDsKKyAgICAgICAgcmVzdWx0ID0gV1NBUmVjdkZyb20oU29ja2V0LCAmV1NBUmVjdkJ1ZmZlciwgMSwgJmNiUmVjZWl2ZWQsICZGbGFncywgKFNPQ0tBRERSKikmRGVzdGluYXRpb25BZGRyZXNzLCAmY2JEZXN0aW5hdGlvbkFkZHJlc3MsICZPdmVybGFwcGVkLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBXU0FfSU9fUEVORElORykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpc1BlbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiV1NBUmVjdkZyb20gZmFpbGVkLCAweCV4XHJcbiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzUGVuZGluZykKKyAgICAgICAgeworICAgICAgICAgICAgLy9wcmludGYoIndhaXRpbmcgZm9yIGNvbXBsZXRpb24gZXZlbnQuLi5cclxuIik7CisgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcmVjZWl2ZSB0byBjb21wbGV0ZQorICAgICAgICAgICAgVUxPTkdMT05HIGVsYXBzZWQgPSAoR2V0VGlja0NvdW50NjQoKSAtIFN0YXJ0VGljayk7CisgICAgICAgICAgICByZXN1bHQgPSBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMoMSwgJk92ZXJsYXBwZWQuaEV2ZW50LCBUUlVFLCAoRFdPUkQpKGFUaW1lb3V0IC0gbWluKGFUaW1lb3V0LCBlbGFwc2VkKSksIFRSVUUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBXU0FfV0FJVF9USU1FT1VUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJyZWN2IHRpbWVvdXRcclxuIik7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IFdTQV9XQUlUX0ZBSUxFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoInJlY3YgZmFpbGVkXHJcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IFdTQUdldE92ZXJsYXBwZWRSZXN1bHQoU29ja2V0LCAmT3ZlcmxhcHBlZCwgJmNiUmVjZWl2ZWQsIFRSVUUsICZGbGFncyk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiV1NBR2V0T3ZlcmxhcHBlZFJlc3VsdCBmYWlsZWQsIDB4JXhcclxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbnVtYmVyT2ZSZXBsaWVzKys7CisgICAgfQorCitleGl0OgorICAgIAorICAgIC8vIFJldmVydCB0aGUgY29tcGFybWVudCBpZiBuZWNlc3NhcnkKKyAgICBpZiAoUmV2ZXJ0Q29tcGFydG1lbnRPbkV4aXQpCisgICAgeworICAgICAgICAoVk9JRClTZXRDdXJyZW50VGhyZWFkQ29tcGFydG1lbnRJZChPcmlnaW5hbENvbXBhcnRtZW50SUQpOworICAgIH0KKworICAgIGZyZWUoUmVjdkJ1ZmZlcik7CisgICAgZnJlZShTZW5kQnVmZmVyKTsKKworICAgIFdTQUNsb3NlRXZlbnQoT3ZlcmxhcHBlZC5oRXZlbnQpOworCisgICAgaWYgKFNvY2tldCAhPSBJTlZBTElEX1NPQ0tFVCkgY2xvc2Vzb2NrZXQoU29ja2V0KTsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKKworICAgIHJldHVybiBudW1iZXJPZlJlcGxpZXM7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIob3ROb2RlKiBhTm9kZSwgdWludDhfdCBhUm91dGVySml0dGVyKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCJbJWRdICVkIiwgYU5vZGUtPm1JZCwgYVJvdXRlckppdHRlcik7CisgICAgcHJpbnRmKCIlZDogcm91dGVyc2VsZWN0aW9uaml0dGVyICVkXHJcbiIsIGFOb2RlLT5tSWQsIGFSb3V0ZXJKaXR0ZXIpOworICAgIG90VGhyZWFkU2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKGFOb2RlLT5tSW5zdGFuY2UsIGFSb3V0ZXJKaXR0ZXIpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZUNvbW1pc3Npb25lckFubm91bmNlQmVnaW4ob3ROb2RlKiBhTm9kZSwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCwgY29uc3QgY2hhciAqYUFkZHIpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gMHglMDh4ICVkICVkICVzIiwgYU5vZGUtPm1JZCwgYUNoYW5uZWxNYXNrLCBhQ291bnQsIGFQZXJpb2QsIGFBZGRyKTsKKyAgICBwcmludGYoIiVkOiBjb21taXNzaW9uZXIgYW5ub3VuY2UgMHglMDh4ICVkICVkICVzXHJcbiIsIGFOb2RlLT5tSWQsIGFDaGFubmVsTWFzaywgYUNvdW50LCBhUGVyaW9kLCBhQWRkcik7CisKKyAgICBvdElwNkFkZHJlc3MgYUFkZHJlc3M7CisgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYUFkZHIsICZhQWRkcmVzcyk7CisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKworICAgIGF1dG8gcmVzdWx0ID0gb3RDb21taXNzaW9uZXJBbm5vdW5jZUJlZ2luKGFOb2RlLT5tSW5zdGFuY2UsIGFDaGFubmVsTWFzaywgYUNvdW50LCBhUGVyaW9kLCAmYUFkZHJlc3MpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0QWN0aXZlRGF0YXNldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhVGltZXN0YW1wLCB1aW50MTZfdCBhUGFuSWQsIHVpbnQxNl90IGFDaGFubmVsLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXkpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gMHglbGxYICVkICVkIiwgYU5vZGUtPm1JZCwgYVRpbWVzdGFtcCwgYVBhbklkLCBhQ2hhbm5lbCk7CisgICAgcHJpbnRmKCIlZDogZGF0YXNldCBzZXQgYWN0aXZlIDB4JWxsWCAlZCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGFEYXRhc2V0ID0ge307CisKKyAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYVRpbWVzdGFtcDsKKyAgICBhRGF0YXNldC5tSXNBY3RpdmVUaW1lc3RhbXBTZXQgPSB0cnVlOworCisgICAgaWYgKGFQYW5JZCAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubVBhbklkID0gYVBhbklkOworICAgICAgICBhRGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFDaGFubmVsICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUNoYW5uZWxNYXNrICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCA9IGFDaGFubmVsTWFzazsKKyAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFNYXN0ZXJLZXkgIT0gTlVMTCAmJiBzdHJsZW4oYU1hc3RlcktleSkgIT0gMCkKKyAgICB7CisgICAgICAgIGludCBrZXlMZW5ndGg7CisgICAgICAgIGlmICgoa2V5TGVuZ3RoID0gSGV4MkJpbihhTWFzdGVyS2V5LCBhRGF0YXNldC5tTWFzdGVyS2V5Lm04LCBzaXplb2YoYURhdGFzZXQubU1hc3RlcktleSkpKSAhPSBPVF9NQVNURVJfS0VZX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiaW52YWxpZCBsZW5ndGgga2V5ICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfUEFSU0U7CisgICAgICAgIH0KKyAgICAgICAgYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdCA9IG90RGF0YXNldFNldEFjdGl2ZShhTm9kZS0+bUluc3RhbmNlLCAmYURhdGFzZXQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPVE5PREVBUEkgaW50MzJfdCBPVENBTEwgb3ROb2RlU2V0UGVuZGluZ0RhdGFzZXQob3ROb2RlKiBhTm9kZSwgdWludDY0X3QgYUFjdGl2ZVRpbWVzdGFtcCwgdWludDY0X3QgYVBlbmRpbmdUaW1lc3RhbXAsIHVpbnQxNl90IGFQYW5JZCwgdWludDE2X3QgYUNoYW5uZWwpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIlslZF0gMHglbGxYIDB4JWxsWCAlZCAlZCIsIGFOb2RlLT5tSWQsIGFBY3RpdmVUaW1lc3RhbXAsIGFQZW5kaW5nVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKyAgICBwcmludGYoIiVkOiBkYXRhc2V0IHNldCBwZW5kaW5nIDB4JWxsWCAweCVsbFggJWQgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUFjdGl2ZVRpbWVzdGFtcCwgYVBlbmRpbmdUaW1lc3RhbXAsIGFQYW5JZCwgYUNoYW5uZWwpOworCisgICAgb3RPcGVyYXRpb25hbERhdGFzZXQgYURhdGFzZXQgPSB7fTsKKworICAgIGlmIChhQWN0aXZlVGltZXN0YW1wICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYUFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYVBlbmRpbmdUaW1lc3RhbXAgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wID0gYVBlbmRpbmdUaW1lc3RhbXA7CisgICAgICAgIGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhUGFuSWQgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1QYW5JZCA9IGFQYW5JZDsKKyAgICAgICAgYURhdGFzZXQubUlzUGFuSWRTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhQ2hhbm5lbCAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbFNldCA9IHRydWU7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBvdERhdGFzZXRTZXRQZW5kaW5nKGFOb2RlLT5tSW5zdGFuY2UsICZhRGF0YXNldCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZW5kUGVuZGluZ1NldChvdE5vZGUqIGFOb2RlLCB1aW50NjRfdCBhQWN0aXZlVGltZXN0YW1wLCB1aW50NjRfdCBhUGVuZGluZ1RpbWVzdGFtcCwgdWludDMyX3QgYURlbGF5VGltZXIsIHVpbnQxNl90IGFQYW5JZCwgdWludDE2X3QgYUNoYW5uZWwsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAweCVsbFggMHglbGxYICVkICVkIiwgYU5vZGUtPm1JZCwgYUFjdGl2ZVRpbWVzdGFtcCwgYVBlbmRpbmdUaW1lc3RhbXAsIGFQYW5JZCwgYUNoYW5uZWwpOworICAgIHByaW50ZigiJWQ6IGRhdGFzZXQgc2VuZCBwZW5kaW5nIDB4JWxsWCAweCVsbFggJWQgJWRcclxuIiwgYU5vZGUtPm1JZCwgYUFjdGl2ZVRpbWVzdGFtcCwgYVBlbmRpbmdUaW1lc3RhbXAsIGFQYW5JZCwgYUNoYW5uZWwpOworCisgICAgb3RPcGVyYXRpb25hbERhdGFzZXQgYURhdGFzZXQgPSB7fTsKKworICAgIGlmIChhQWN0aXZlVGltZXN0YW1wICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYUFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYVBlbmRpbmdUaW1lc3RhbXAgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wID0gYVBlbmRpbmdUaW1lc3RhbXA7CisgICAgICAgIGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhRGVsYXlUaW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubURlbGF5ID0gYURlbGF5VGltZXI7CisgICAgICAgIGFEYXRhc2V0Lm1Jc0RlbGF5U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYVBhbklkICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tUGFuSWQgPSBhUGFuSWQ7CisgICAgICAgIGFEYXRhc2V0Lm1Jc1BhbklkU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUNoYW5uZWwgIT0gMCkKKyAgICB7CisgICAgICAgIGFEYXRhc2V0Lm1DaGFubmVsID0gYUNoYW5uZWw7CisgICAgICAgIGFEYXRhc2V0Lm1Jc0NoYW5uZWxTZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChhTWFzdGVyS2V5ICE9IE5VTEwgJiYgc3RybGVuKGFNYXN0ZXJLZXkpICE9IDApCisgICAgeworICAgICAgICBpbnQga2V5TGVuZ3RoOworICAgICAgICBpZiAoKGtleUxlbmd0aCA9IEhleDJCaW4oYU1hc3RlcktleSwgYURhdGFzZXQubU1hc3RlcktleS5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1NYXN0ZXJLZXkpKSkgIT0gT1RfTUFTVEVSX0tFWV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImludmFsaWQgbGVuZ3RoIGtleSAlZFxyXG4iLCBrZXlMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIE9UX0VSUk9SX1BBUlNFOworICAgICAgICB9CisgICAgICAgIGFEYXRhc2V0Lm1Jc01hc3RlcktleVNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFNZXNoTG9jYWwgIT0gTlVMTCAmJiBzdHJsZW4oYU1lc2hMb2NhbCkgIT0gMCkKKyAgICB7CisgICAgICAgIG90SXA2QWRkcmVzcyBwcmVmaXg7CisgICAgICAgIGF1dG8gZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFNZXNoTG9jYWwsICZwcmVmaXgpOworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworICAgICAgICBtZW1jcHkoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCwgcHJlZml4Lm1GaWVsZHMubTgsIHNpemVvZihhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04KSk7CisgICAgICAgIGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFOZXR3b3JrTmFtZSAhPSBOVUxMICYmIHN0cmxlbihhTmV0d29ya05hbWUpICE9IDApCisgICAgeworICAgICAgICBzdHJjcHlfcyhhRGF0YXNldC5tTmV0d29ya05hbWUubTgsIHNpemVvZihhRGF0YXNldC5tTmV0d29ya05hbWUubTgpLCBhTmV0d29ya05hbWUpOworICAgICAgICBhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCA9IHRydWU7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBvdERhdGFzZXRTZW5kTWdtdFBlbmRpbmdTZXQoYU5vZGUtPm1JbnN0YW5jZSwgJmFEYXRhc2V0LCBudWxscHRyLCAwKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90Tm9kZVNlbmRBY3RpdmVTZXQob3ROb2RlKiBhTm9kZSwgdWludDY0X3QgYUFjdGl2ZVRpbWVzdGFtcCwgdWludDE2X3QgYVBhbklkLCB1aW50MTZfdCBhQ2hhbm5lbCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCBjaGFyICphRXh0UGFuSWQsIGNvbnN0IGNoYXIgKmFNYXN0ZXJLZXksIGNvbnN0IGNoYXIgKmFNZXNoTG9jYWwsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSwgY29uc3QgY2hhciAqYUJpbmFyeSkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAweCVsbFggJWQgJWQiLCBhTm9kZS0+bUlkLCBhQWN0aXZlVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKyAgICBwcmludGYoIiVkOiBkYXRhc2V0IHNlbmQgYWN0aXZlIDB4JWxsWCAlZCAlZFxyXG4iLCBhTm9kZS0+bUlkLCBhQWN0aXZlVGltZXN0YW1wLCBhUGFuSWQsIGFDaGFubmVsKTsKKworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGFEYXRhc2V0ID0ge307CisgICAgdWludDhfdCB0bHZzWzEyOF07CisgICAgdWludDhfdCB0bHZzTGVuZ3RoID0gMDsKKworICAgIGlmIChhQWN0aXZlVGltZXN0YW1wICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gYUFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGFQYW5JZCAhPSAwKQorICAgIHsKKyAgICAgICAgYURhdGFzZXQubVBhbklkID0gYVBhbklkOworICAgICAgICBhRGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFDaGFubmVsICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUNoYW5uZWxNYXNrICE9IDApCisgICAgeworICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCA9IGFDaGFubmVsTWFzazsKKyAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFFeHRQYW5JZCAhPSBOVUxMICYmIHN0cmxlbihhRXh0UGFuSWQpICE9IDApCisgICAgeworICAgICAgICBpbnQga2V5TGVuZ3RoOworICAgICAgICBpZiAoKGtleUxlbmd0aCA9IEhleDJCaW4oYUV4dFBhbklkLCBhRGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkKSkpICE9IE9UX0VYVF9QQU5fSURfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJpbnZhbGlkIGxlbmd0aCBleHQgcGFuIGlkICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfUEFSU0U7CisgICAgICAgIH0KKyAgICAgICAgYURhdGFzZXQubUlzRXh0ZW5kZWRQYW5JZFNldCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGFNYXN0ZXJLZXkgIT0gTlVMTCAmJiBzdHJsZW4oYU1hc3RlcktleSkgIT0gMCkKKyAgICB7CisgICAgICAgIGludCBrZXlMZW5ndGg7CisgICAgICAgIGlmICgoa2V5TGVuZ3RoID0gSGV4MkJpbihhTWFzdGVyS2V5LCBhRGF0YXNldC5tTWFzdGVyS2V5Lm04LCBzaXplb2YoYURhdGFzZXQubU1hc3RlcktleSkpKSAhPSBPVF9NQVNURVJfS0VZX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiaW52YWxpZCBsZW5ndGgga2V5ICVkXHJcbiIsIGtleUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfUEFSU0U7CisgICAgICAgIH0KKyAgICAgICAgYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYU1lc2hMb2NhbCAhPSBOVUxMICYmIHN0cmxlbihhTWVzaExvY2FsKSAhPSAwKQorICAgIHsKKyAgICAgICAgb3RJcDZBZGRyZXNzIHByZWZpeDsKKyAgICAgICAgYXV0byBlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYU1lc2hMb2NhbCwgJnByZWZpeCk7CisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKSByZXR1cm4gZXJyb3I7CisgICAgICAgIG1lbWNweShhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCBwcmVmaXgubUZpZWxkcy5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1NZXNoTG9jYWxQcmVmaXgubTgpKTsKKyAgICAgICAgYURhdGFzZXQubUlzTWVzaExvY2FsUHJlZml4U2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYU5ldHdvcmtOYW1lICE9IE5VTEwgJiYgc3RybGVuKGFOZXR3b3JrTmFtZSkgIT0gMCkKKyAgICB7CisgICAgICAgIHN0cmNweV9zKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCksIGFOZXR3b3JrTmFtZSk7CisgICAgICAgIGFEYXRhc2V0Lm1Jc05ldHdvcmtOYW1lU2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYUJpbmFyeSAhPSBOVUxMICYmIHN0cmxlbihhQmluYXJ5KSAhPSAwKQorICAgIHsKKyAgICAgICAgaW50IGxlbmd0aDsKKyAgICAgICAgaWYgKChsZW5ndGggPSBIZXgyQmluKGFCaW5hcnksdGx2cywgc2l6ZW9mKHRsdnMpKSkgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImludmFsaWQgbGVuZ3RoIHRsdnMgJWRcclxuIiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9QQVJTRTsKKyAgICAgICAgfQorICAgICAgICB0bHZzTGVuZ3RoID0gKHVpbnQ4X3QpbGVuZ3RoOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gb3REYXRhc2V0U2VuZE1nbXRBY3RpdmVTZXQoYU5vZGUtPm1JbnN0YW5jZSwgJmFEYXRhc2V0LCB0bHZzTGVuZ3RoID09IDAgPyBudWxscHRyIDogdGx2cywgdGx2c0xlbmd0aCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09UTk9ERUFQSSBpbnQzMl90IE9UQ0FMTCBvdE5vZGVTZXRNYXhDaGlsZHJlbihvdE5vZGUqIGFOb2RlLCB1aW50OF90IGFNYXhDaGlsZHJlbikKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiWyVkXSAlZCIsIGFOb2RlLT5tSWQsIGFNYXhDaGlsZHJlbik7CisgICAgcHJpbnRmKCIlZDogY2hpbGRtYXggJWRcclxuIiwgYU5vZGUtPm1JZCwgYU1heENoaWxkcmVuKTsKKyAgICBhdXRvIHJlc3VsdCA9IG90VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKGFOb2RlLT5tSW5zdGFuY2UsIGFNYXhDaGlsZHJlbik7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3R5cGVkZWYgc3RydWN0IG90TWFjRnJhbWVFbnRyeQoreworICAgIG90TWFjRnJhbWUgIEZyYW1lOworICAgIExJU1RfRU5UUlkgIExpbms7Cit9IG90TWFjRnJhbWVFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3Qgb3RMaXN0ZW5lcgoreworICAgIEhBTkRMRSAgICAgICAgICAgICAgbUxpc3RlbmVyOworICAgIENSSVRJQ0FMX1NFQ1RJT04gICAgbUNTOworICAgIEhBTkRMRSAgICAgICAgICAgICAgbVN0b3BFdmVudDsKKyAgICBIQU5ETEUgICAgICAgICAgICAgIG1GcmFtZXNVcGRhdGVkRXZlbnQ7CisgICAgTElTVF9FTlRSWSAgICAgICAgICBtRnJhbWVzOyAvLyBMaXN0IG9mIG90TWFjRnJhbWVFbnRyeQorfSBvdExpc3RlbmVyOworCit2b2lkCitvdExpc3RlbmVyQ2FsbGJhY2soCisgICAgX0luX29wdF8gUFZPSUQgYUNvbnRleHQsCisgICAgX0luXyBVTE9ORyBTb3VyY2VJbnRlcmZhY2VJbmRleCwKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKEZyYW1lTGVuZ3RoKSBQVUNIQVIgRnJhbWVCdWZmZXIsCisgICAgX0luXyBVQ0hBUiBGcmFtZUxlbmd0aCwKKyAgICBfSW5fIFVDSEFSIENoYW5uZWwKKykKK3sKKyAgICBvdExpc3RlbmVyKiBhTGlzdGVuZXIgPSAob3RMaXN0ZW5lciopYUNvbnRleHQ7CisgICAgYXNzZXJ0KGFMaXN0ZW5lcik7CisKKyAgICBpZiAoRnJhbWVMZW5ndGgpCisgICAgeworICAgICAgICBvdE1hY0ZyYW1lRW50cnkqIGVudHJ5ID0gbmV3IG90TWFjRnJhbWVFbnRyeTsKKyAgICAgICAgZW50cnktPkZyYW1lLmJ1ZmZlclswXSA9IENoYW5uZWw7CisgICAgICAgIG1lbWNweV9zKGVudHJ5LT5GcmFtZS5idWZmZXIgKyAxLCBzaXplb2YoZW50cnktPkZyYW1lLmJ1ZmZlcikgLSAxLCBGcmFtZUJ1ZmZlciwgRnJhbWVMZW5ndGgpOworICAgICAgICBlbnRyeS0+RnJhbWUubGVuZ3RoID0gRnJhbWVMZW5ndGggKyAxOworICAgICAgICBlbnRyeS0+RnJhbWUubm9kZWlkID0gKHVpbnQzMl90KS0xOworCisgICAgICAgIC8vIExvb2sgdXAgdGhlIE5vZGUgSUQgZnJvbSBieSBpbnRlcmZhY2UgZ3VpZAorICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGdOb2Rlcy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdOb2Rlc1tpXS0+bUludGVyZmFjZUluZGV4ID09IFNvdXJjZUludGVyZmFjZUluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5LT5GcmFtZS5ub2RlaWQgPSBnTm9kZXNbaV0tPm1JZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmZ0NTKTsKKworICAgICAgICAvLyBQdXNoIHRoZSBmcmFtZSBvbiB0aGUgbGlzdCB0byBwcm9jZXNzCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhTGlzdGVuZXItPm1DUyk7CisgICAgICAgIEluc2VydFRhaWxMaXN0KCZhTGlzdGVuZXItPm1GcmFtZXMsICZlbnRyeS0+TGluayk7CisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZhTGlzdGVuZXItPm1DUyk7CisKKyAgICAgICAgLy8gU2V0IGV2ZW50IGluZGljYXRpbmcgd2UgaGF2ZSBhIG5ldyBmcmFtZSB0byBwcm9jZXNzCisgICAgICAgIFNldEV2ZW50KGFMaXN0ZW5lci0+bUZyYW1lc1VwZGF0ZWRFdmVudCk7CisgICAgfQorfQorCitPVE5PREVBUEkgb3RMaXN0ZW5lciogT1RDQUxMIG90TGlzdGVuZXJJbml0KHVpbnQzMl90IC8qIG5vZGVpZCAqLykKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgYXV0byBBcGlJbnN0YW5jZSA9IEdldEFwaUluc3RhbmNlKCk7CisgICAgaWYgKEFwaUluc3RhbmNlID09IG51bGxwdHIpCisgICAgeworICAgICAgICBwcmludGYoIkdldEFwaUluc3RhbmNlIGZhaWxlZCFcclxuIik7CisgICAgICAgIG90TG9nRnVuY0V4aXRNc2coIkdldEFwaUluc3RhbmNlIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBvdExpc3RlbmVyICpsaXN0ZW5lciA9IG5ldyBvdExpc3RlbmVyKCk7CisgICAgYXNzZXJ0KGxpc3RlbmVyKTsKKworICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJmxpc3RlbmVyLT5tQ1MpOworICAgIGxpc3RlbmVyLT5tU3RvcEV2ZW50ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwgVFJVRSwgRkFMU0UsIG51bGxwdHIpOworICAgIGxpc3RlbmVyLT5tRnJhbWVzVXBkYXRlZEV2ZW50ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwgRkFMU0UsIEZBTFNFLCBudWxscHRyKTsKKyAgICBJbml0aWFsaXplTGlzdEhlYWQoJmxpc3RlbmVyLT5tRnJhbWVzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgbGlzdGVuZXIKKyAgICBsaXN0ZW5lci0+bUxpc3RlbmVyID0gb3R2bXBMaXN0ZW5lckNyZWF0ZSgmZ1RvcG9sb2d5R3VpZCk7CisgICAgaWYgKGxpc3RlbmVyLT5tTGlzdGVuZXIgPT0gbnVsbHB0cikgZ290byBlcnJvcjsKKworICAgIC8vIFJlZ2lzdGVyIGZvciBjYWxsYmFja3MKKyAgICBvdHZtcExpc3RlbmVyUmVnaXN0ZXIobGlzdGVuZXItPm1MaXN0ZW5lciwgb3RMaXN0ZW5lckNhbGxiYWNrLCBsaXN0ZW5lcik7CisKKyAgICBwcmludGYoIlM6IFNuaWZmZXIgc3RhcnRlZFxyXG4iKTsKKworZXJyb3I6CisKKyAgICAvLyBDbGVhbiB1cCBvbiBmYWlsdXJlCisgICAgaWYgKGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgaWYgKGxpc3RlbmVyLT5tTGlzdGVuZXIgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaXN0ZW5lckZpbmFsaXplKGxpc3RlbmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90TG9nRnVuY0V4aXQoKTsKKworICAgIHJldHVybiBsaXN0ZW5lcjsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90TGlzdGVuZXJGaW5hbGl6ZShvdExpc3RlbmVyKiBhTGlzdGVuZXIpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGlmIChhTGlzdGVuZXIgIT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIC8vIFNldCBzdG9wIGV2ZW50IHRvIHByZXZlbnQgY2FuY2VsIGFueSBwZW5kaW5nIG90TGlzdGVuZXJSZWFkIGNhbGxzCisgICAgICAgIFNldEV2ZW50KGFMaXN0ZW5lci0+bVN0b3BFdmVudCk7CisKKyAgICAgICAgaWYgKGFMaXN0ZW5lci0+bUxpc3RlbmVyKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVbnJlZ2lzdGVycyAoYW5kIHdhaXRzIGZvciBjYWxsYmFja3MgdG8gY29tcGxldGUpIGFuZCBjbGVhbnMgdXAgdGhlIGhhbmRsZQorICAgICAgICAgICAgb3R2bXBMaXN0ZW5lckRlc3Ryb3koYUxpc3RlbmVyLT5tTGlzdGVuZXIpOworICAgICAgICAgICAgYUxpc3RlbmVyLT5tTGlzdGVuZXIgPSBudWxscHRyOworCisgICAgICAgICAgICAvLyBDbGVhbiB1cCBsZWZ0IG92ZXIgZnJhbWVzCisgICAgICAgICAgICBQTElTVF9FTlRSWSBMaW5rID0gYUxpc3RlbmVyLT5tRnJhbWVzLkZsaW5rOworICAgICAgICAgICAgd2hpbGUgKExpbmsgIT0gJmFMaXN0ZW5lci0+bUZyYW1lcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdE1hY0ZyYW1lRW50cnkgKmVudHJ5ID0gQ09OVEFJTklOR19SRUNPUkQoTGluaywgb3RNYWNGcmFtZUVudHJ5LCBMaW5rKTsKKyAgICAgICAgICAgICAgICBMaW5rID0gTGluay0+Rmxpbms7CisgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcmludGYoIlM6IFNuaWZmZXIgc3RvcHBlZFxyXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFuIHVwIGV2ZXJ5dGhpbmcgZWxzZQorICAgICAgICBDbG9zZUhhbmRsZShhTGlzdGVuZXItPm1GcmFtZXNVcGRhdGVkRXZlbnQpOworICAgICAgICBhTGlzdGVuZXItPm1GcmFtZXNVcGRhdGVkRXZlbnQgPSBudWxscHRyOworICAgICAgICBDbG9zZUhhbmRsZShhTGlzdGVuZXItPm1TdG9wRXZlbnQpOworICAgICAgICBhTGlzdGVuZXItPm1TdG9wRXZlbnQgPSBudWxscHRyOworICAgICAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJmFMaXN0ZW5lci0+bUNTKTsKKyAgICAgICAgZGVsZXRlIGFMaXN0ZW5lcjsKKworICAgICAgICBSZWxlYXNlQXBpSW5zdGFuY2UoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKworT1ROT0RFQVBJIGludDMyX3QgT1RDQUxMIG90TGlzdGVuZXJSZWFkKG90TGlzdGVuZXIqIGFMaXN0ZW5lciwgb3RNYWNGcmFtZSAqYUZyYW1lKQoreworICAgIGRvCisgICAgeworICAgICAgICBib29sIGV4aXQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZhTGlzdGVuZXItPm1DUyk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBlbmRpbmcgZnJhbWUsIHJldHVybiBpdCBub3cKKyAgICAgICAgaWYgKCFJc0xpc3RFbXB0eSgmYUxpc3RlbmVyLT5tRnJhbWVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgUExJU1RfRU5UUlkgTGluayA9IFJlbW92ZUhlYWRMaXN0KCZhTGlzdGVuZXItPm1GcmFtZXMpOworICAgICAgICAgICAgb3RNYWNGcmFtZUVudHJ5ICplbnRyeSA9IENPTlRBSU5JTkdfUkVDT1JEKExpbmssIG90TWFjRnJhbWVFbnRyeSwgTGluayk7CisgICAgICAgICAgICAqYUZyYW1lID0gZW50cnktPkZyYW1lOworICAgICAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAgICAgICAgZXhpdCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYUxpc3RlbmVyLT5tQ1MpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4aXQpIGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNodXRkb3duIG9yIGZyYW1lcyB1cGRhdGVkIGV2ZW50CisgICAgICAgIGF1dG8gd2FpdFJlc3VsdCA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgJmFMaXN0ZW5lci0+bVN0b3BFdmVudCwgRkFMU0UsIElORklOSVRFKTsKKworICAgICAgICBpZiAod2FpdFJlc3VsdCA9PSBXQUlUX09CSkVDVF8wICsgMSkgLy8gbUZyYW1lc1VwZGF0ZWRFdmVudAorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIG1TdG9wRXZlbnQKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICAvL3ByaW50ZigiUzogU25pZmZlciByZWFkICVkIGJ5dGVzIGZyb20gbm9kZSAlZFxyXG4iLCBhRnJhbWUtPmxlbmd0aCwgYUZyYW1lLT5ub2RlaWQpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL3ByZWNvbXAuaCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdE5vZGVBcGkvcHJlY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWQ1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3ROb2RlQXBpL3ByZWNvbXAuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5udC5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MyaXBkZWYuaD4KKyNpbmNsdWRlIDxJUEhscEFwaS5oPgorI2luY2x1ZGUgPG1zdGNwaXAuaD4KKyNpbmNsdWRlIDxycGMuaD4KKyNpbmNsdWRlIDxycGNkY2UuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHR1cGxlPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBEZWZpbmUgdG8gZXhwb3J0IG5lY2Vzc2FyeSBmdW5jdGlvbnMKKyNkZWZpbmUgT1RETEwKKyNkZWZpbmUgT1ROT0RFQVBJIEVYVEVSTl9DIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9ib3JkZXJfcm91dGVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29tbWlzc2lvbmVyLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9qb2luZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmctd2luZG93cy5oPgorI2luY2x1ZGUgPG90Tm9kZS5oPgorCit2b2lkIFVubG9hZCgpOworCitGT1JDRUlOTElORQorVk9JRAorSW5pdGlhbGl6ZUxpc3RIZWFkKAorICAgIF9PdXRfIFBMSVNUX0VOVFJZIExpc3RIZWFkCisgICAgKQoreworICAgIExpc3RIZWFkLT5GbGluayA9IExpc3RIZWFkLT5CbGluayA9IExpc3RIZWFkOworfQorCitGT1JDRUlOTElORQorUExJU1RfRU5UUlkKK1JlbW92ZUhlYWRMaXN0KAorICAgIF9Jbm91dF8gUExJU1RfRU5UUlkgTGlzdEhlYWQKKyAgICApCisKK3sKKworICAgIFBMSVNUX0VOVFJZIEVudHJ5OworICAgIFBMSVNUX0VOVFJZIE5leHRFbnRyeTsKKyAgICBFbnRyeSA9IExpc3RIZWFkLT5GbGluazsKKyAgICBOZXh0RW50cnkgPSBFbnRyeS0+Rmxpbms7CisgICAgTGlzdEhlYWQtPkZsaW5rID0gTmV4dEVudHJ5OworICAgIE5leHRFbnRyeS0+QmxpbmsgPSBMaXN0SGVhZDsKKyAgICByZXR1cm4gRW50cnk7Cit9CisKK0ZPUkNFSU5MSU5FCitWT0lECitJbnNlcnRUYWlsTGlzdCgKKyAgICBfSW5vdXRfIFBMSVNUX0VOVFJZIExpc3RIZWFkLAorICAgIF9PdXRfIF9fZHJ2X2FsaWFzZXNNZW0gUExJU1RfRU5UUlkgRW50cnkKKyAgICApCit7CisKKyAgICBQTElTVF9FTlRSWSBQcmV2RW50cnk7CisgICAgUHJldkVudHJ5ID0gTGlzdEhlYWQtPkJsaW5rOworICAgIEVudHJ5LT5GbGluayA9IExpc3RIZWFkOworICAgIEVudHJ5LT5CbGluayA9IFByZXZFbnRyeTsKKyAgICBQcmV2RW50cnktPkZsaW5rID0gRW50cnk7CisgICAgTGlzdEhlYWQtPkJsaW5rID0gRW50cnk7Cit9CisKK19NdXN0X2luc3BlY3RfcmVzdWx0XworQk9PTEVBTgorQ0ZPUkNFSU5MSU5FCitJc0xpc3RFbXB0eSgKKyAgICBfSW5fIGNvbnN0IExJU1RfRU5UUlkgKiBMaXN0SGVhZAorICAgICkKK3sKKyAgICByZXR1cm4gKEJPT0xFQU4pKExpc3RIZWFkLT5GbGluayA9PSBMaXN0SGVhZCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvYWRhcHRlci5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvYWRhcHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNjU0OQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9hZGFwdGVyLmNwcApAQCAtMCwwICsxLDU0NyBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGNvZGUgdG8gbWFuYWdlIHRoZSBORVRBREFQVEVSIG9iamVjdCBmb3IgdGhlCisgKiAgIG5ldHdvcmsgYWRhcHRlci4KKyAqLworCisjaW5jbHVkZSAicGNoLmhwcCIKKyNpbmNsdWRlICJhZGFwdGVyLnRtaCIKKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05ESVNfU1RBVFVTCitBZGFwdGVySW5pdGlhbGl6ZSgKKyAgICBfSW5fIE5ESVNfSEFORExFICAgICAgICAgICAgICAgIE1pbmlwb3J0QWRhcHRlckhhbmRsZSwKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQorLyorKyAKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBBZGFwdGVySW5pdGlhbGl6ZSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgTmV0d29yayBBZGFwdGVyCisgICAgYXQgdGhlIHRpbWUgb2YgUG5wIEFkZCBkZXZpY2UuIAorIAorICAgIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgY29udGV4dCBvZiB0aGUgYWRhcHRlciBvYmplY3QKKyAKK0FyZ3VtZW50czoKKyAKKyAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUgLSBIYW5kbGUgdG8gdGhlIE5ESVMgTWluaXBvcnQgQWRhcHRlciBvYmplY3QuCisgCisgICAgQWRhcHRlckNvbnRleHQgLSBUaGUgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIGEgZmF0YWwgZXJyb3IgaW4gdGhlIGRyaXZlci4KKworLS0qLworeworICAgIE5ESVNfU1RBVFVTIFN0YXR1czsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisgICAgCisgICAgZG8KKyAgICB7CisgICAgICAgIE5ESVNfTUlOSVBPUlRfQURBUFRFUl9SRUdJU1RSQVRJT05fQVRUUklCVVRFUyBBZGFwdGVyUmVnaXN0cmF0aW9uID0geyAwIH07CisgICAgICAgIE5ESVNfTUlOSVBPUlRfQURBUFRFUl9HRU5FUkFMX0FUVFJJQlVURVMgQWRhcHRlckdlbmVyYWwgPSB7IDAgfTsKKyAgICAgICAgTkRJU19QTV9DQVBBQklMSVRJRVMgUG1DYXBhYmlsaXRpZXMgPSB7IDAgfTsKKyAgICAgICAgCisgICAgICAgIC8vCisgICAgICAgIC8vIEZpcnN0LCBzZXQgdGhlIHJlZ2lzdHJhdGlvbiBhdHRyaWJ1dGVzLgorICAgICAgICAvLworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9NSU5JUE9SVF9BREFQVEVSX1JFR0lTVFJBVElPTl9BVFRSSUJVVEVTOworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkhlYWRlci5TaXplID0gc2l6ZW9mKEFkYXB0ZXJSZWdpc3RyYXRpb24pOworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkhlYWRlci5SZXZpc2lvbiA9IE5ESVNfTUlOSVBPUlRfQURBUFRFUl9SRUdJU1RSQVRJT05fQVRUUklCVVRFU19SRVZJU0lPTl8yOworCisgICAgICAgIEFkYXB0ZXJSZWdpc3RyYXRpb24uTWluaXBvcnRBZGFwdGVyQ29udGV4dCA9IEFkYXB0ZXJDb250ZXh0OworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkF0dHJpYnV0ZUZsYWdzID0gTkRJU19NSU5JUE9SVF9BVFRSSUJVVEVTX1NVUlBSSVNFX1JFTU9WRV9PSyB8IE5ESVNfTUlOSVBPUlRfQVRUUklCVVRFU19ORElTX1dETSB8IE5ESVNfTUlOSVBPUlRfQVRUUklCVVRFU19OT19QQVVTRV9PTl9TVVNQRU5EOworICAgICAgICBBZGFwdGVyUmVnaXN0cmF0aW9uLkludGVyZmFjZVR5cGUgPSBOZGlzSW50ZXJmYWNlUE5QQnVzOworCisgICAgICAgIE5ESVNfREVDTEFSRV9NSU5JUE9SVF9BREFQVEVSX0NPTlRFWFQoX09UVE1QX0FEQVBURVJfQ09OVEVYVCk7CisgICAgICAgIFN0YXR1cyA9IE5kaXNNU2V0TWluaXBvcnRBdHRyaWJ1dGVzKAorICAgICAgICAgICAgTWluaXBvcnRBZGFwdGVySGFuZGxlLAorICAgICAgICAgICAgKFBORElTX01JTklQT1JUX0FEQVBURVJfQVRUUklCVVRFUykmQWRhcHRlclJlZ2lzdHJhdGlvbik7CisKKyAgICAgICAgaWYgKE5ESVNfU1RBVFVTX1NVQ0NFU1MgIT0gU3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlslcF0gTmRpc1NldE9wdGlvbmFsSGFuZGxlcnMgU3RhdHVzICUhTkRJU19TVEFUVVMhIiwgQWRhcHRlckNvbnRleHQsIFN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5leHQsIHNldCB0aGUgZ2VuZXJhbCBhdHRyaWJ1dGVzLgorICAgICAgICAvLworCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9NSU5JUE9SVF9BREFQVEVSX0dFTkVSQUxfQVRUUklCVVRFUzsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuSGVhZGVyLlNpemUgPSBORElTX1NJWkVPRl9NSU5JUE9SVF9BREFQVEVSX0dFTkVSQUxfQVRUUklCVVRFU19SRVZJU0lPTl8yOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5IZWFkZXIuUmV2aXNpb24gPSBORElTX01JTklQT1JUX0FEQVBURVJfR0VORVJBTF9BVFRSSUJVVEVTX1JFVklTSU9OXzI7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3BlY2lmeSB0aGUgbWVkaXVtIHR5cGUgdGhhdCB0aGUgTklDIGNhbiBzdXBwb3J0IGJ1dCBub3QKKyAgICAgICAgLy8gbmVjZXNzYXJpbHkgdGhlIG1lZGl1bSB0eXBlIHRoYXQgdGhlIE5JQyBjdXJyZW50bHkgdXNlcy4KKyAgICAgICAgLy8KKyAgICAgICAgQWRhcHRlckdlbmVyYWwuTWVkaWFUeXBlID0gTklDX01FRElVTV9UWVBFOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNwZWNpZml5IG1lZGl1bSB0eXBlIHRoYXQgdGhlIE5JQyBjdXJyZW50bHkgdXNlcy4KKyAgICAgICAgLy8KKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUGh5c2ljYWxNZWRpdW1UeXBlID0gTmRpc1BoeXNpY2FsTWVkaXVtTmF0aXZlODAyXzE1XzQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgaGF2ZSB0byBsaWUgYWJvdXQgdGhlIE1UVSwgc28gdGhhdCBUQ1BJUCB3aWxsIGJpbmQgdG8gdXMuCisgICAgICAgIC8vIFNwZWNpZmljYWxseSwgd2UgaGF2ZSB0byByZWx5IHRoYXQgdGhlIFRocmVhZEx3ZiB3aWxsIGZyYWdtZW50CisgICAgICAgIC8vIHRoZSBwYWNrZXRzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIC8vCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLk10dVNpemUgPSBIV19NQVhfRlJBTUVfU0laRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuTWF4WG1pdExpbmtTcGVlZCA9IE5JQ19SRUNWX1hNSVRfU1BFRUQ7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLlhtaXRMaW5rU3BlZWQgPSBOSUNfUkVDVl9YTUlUX1NQRUVEOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NYXhSY3ZMaW5rU3BlZWQgPSBOSUNfUkVDVl9YTUlUX1NQRUVEOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5SY3ZMaW5rU3BlZWQgPSBOSUNfUkVDVl9YTUlUX1NQRUVEOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NZWRpYUNvbm5lY3RTdGF0ZSA9IE1lZGlhQ29ubmVjdFN0YXRlQ29ubmVjdGVkOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NZWRpYUR1cGxleFN0YXRlID0gTWVkaWFEdXBsZXhTdGF0ZUZ1bGw7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoZSBOSUMgY2FuIHByb3ZpZGUgYXMgbG9va2FoZWFkIGRhdGEuCisgICAgICAgIC8vIElmIHRoYXQgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2YgdGhlIGxvb2thaGVhZCBidWZmZXIKKyAgICAgICAgLy8gc3VwcG9ydGVkIGJ5IGJvdW5kIHByb3RvY29scywgTkRJUyB3aWxsIGNhbGwgTWluaXBvcnRPaWRSZXF1ZXN0IHRvCisgICAgICAgIC8vIHNldCB0aGUgc2l6ZSBvZiB0aGUgbG9va2FoZWFkIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgbWluaXBvcnQgZHJpdmVyCisgICAgICAgIC8vIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBtaW5pcG9ydCBkcml2ZXIgYW5kIHByb3RvY29sKHMpIHZhbHVlcy4gSWYgdGhlCisgICAgICAgIC8vIGRyaXZlciBhbHdheXMgaW5kaWNhdGVzIHVwIGZ1bGwgcGFja2V0cyB3aXRoCisgICAgICAgIC8vIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMsIGl0IHNob3VsZCBzZXQgdGhpcyB2YWx1ZSB0byB0aGUKKyAgICAgICAgLy8gbWF4aW11bSB0b3RhbCBmcmFtZSBzaXplLCB3aGljaCBleGNsdWRlcyB0aGUgaGVhZGVyLgorICAgICAgICAvLworICAgICAgICAvLyBVcHBlci1sYXllciBkcml2ZXJzIGV4YW1pbmUgbG9va2FoZWFkIGRhdGEgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQorICAgICAgICAvLyBwYWNrZXQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvb2thaGVhZCBkYXRhIGlzIGludGVuZGVkIGZvcgorICAgICAgICAvLyBvbmUgb3IgbW9yZSBvZiB0aGVpciBjbGllbnRzLiBJZiB0aGUgdW5kZXJseWluZyBkcml2ZXIgc3VwcG9ydHMKKyAgICAgICAgLy8gbXVsdGlwYWNrZXQgcmVjZWl2ZSBpbmRpY2F0aW9ucywgYm91bmQgcHJvdG9jb2xzIGFyZSBnaXZlbiBmdWxsIG5ldAorICAgICAgICAvLyBwYWNrZXRzIG9uIGV2ZXJ5IGluZGljYXRpb24uIENvbnNlcXVlbnRseSwgdGhpcyB2YWx1ZSBpcyBpZGVudGljYWwKKyAgICAgICAgLy8gdG8gdGhhdCByZXR1cm5lZCBmb3IgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUuCisgICAgICAgIC8vCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkxvb2thaGVhZFNpemUgPSBIV19NQVhfRlJBTUVfU0laRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUG93ZXJNYW5hZ2VtZW50Q2FwYWJpbGl0aWVzID0gTlVMTDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuTWFjT3B0aW9ucyA9IE5JQ19NQUNfT1BUSU9OUzsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkUGFja2V0RmlsdGVycyA9IE5JQ19TVVBQT1JURURfRklMVEVSUzsKKworICAgICAgICAvLworICAgICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0aGUgTklDIGRyaXZlciBjYW4gbWFuYWdlLgorICAgICAgICAvLyBUaGlzIGxpc3QgaXMgZ2xvYmFsIGZvciBhbGwgcHJvdG9jb2xzIGJvdW5kIHRvIChvciBhYm92ZSkgdGhlIE5JQy4KKyAgICAgICAgLy8gQ29uc2VxdWVudGx5LCBhIHByb3RvY29sIGNhbiByZWNlaXZlIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9GVUxMIGZyb20KKyAgICAgICAgLy8gdGhlIE5JQyBkcml2ZXIgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCwKKyAgICAgICAgLy8gZXZlbiBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBsaXN0IGlzIGxlc3MgdGhhbiB0aGUKKyAgICAgICAgLy8gbnVtYmVyIG9yaWdpbmFsbHkgcmV0dXJuZWQgZm9yIHRoaXMgcXVlcnkuCisgICAgICAgIC8vCisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLk1heE11bHRpY2FzdExpc3RTaXplID0gTklDX01BWF9NQ0FTVF9MSVNUOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5NYWNBZGRyZXNzTGVuZ3RoID0gTklDX01BQ0FERFJfU0laRTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm4gdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBOSUMgYnVybnQgaW4gdGhlIGhhcmR3YXJlLgorICAgICAgICAvLworICAgICAgICBtZW1jcHkoQWRhcHRlckdlbmVyYWwuUGVybWFuZW50TWFjQWRkcmVzcywgJkFkYXB0ZXJDb250ZXh0LT5FeHRlbmRlZEFkZHJlc3MsIHNpemVvZihBZGFwdGVyQ29udGV4dC0+RXh0ZW5kZWRBZGRyZXNzKSk7CisgICAgICAgIG1lbWNweShBZGFwdGVyR2VuZXJhbC5DdXJyZW50TWFjQWRkcmVzcywgJkFkYXB0ZXJDb250ZXh0LT5FeHRlbmRlZEFkZHJlc3MsIHNpemVvZihBZGFwdGVyQ29udGV4dC0+RXh0ZW5kZWRBZGRyZXNzKSk7CisKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUmVjdlNjYWxlQ2FwYWJpbGl0aWVzID0gTlVMTDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuQWNjZXNzVHlwZSA9IE5FVF9JRl9BQ0NFU1NfQlJPQURDQVNUOworICAgICAgICBBZGFwdGVyR2VuZXJhbC5EaXJlY3Rpb25UeXBlID0gTkVUX0lGX0RJUkVDVElPTl9TRU5EUkVDRUlWRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuQ29ubmVjdGlvblR5cGUgPSBORVRfSUZfQ09OTkVDVElPTl9ERURJQ0FURUQ7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLklmVHlwZSA9IElGX1RZUEVfSUVFRTgwMjE1NDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuSWZDb25uZWN0b3JQcmVzZW50ID0gVFJVRTsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkU3RhdGlzdGljcyA9IE5JQ19TVVBQT1JURURfU1RBVElTVElDUzsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkUGF1c2VGdW5jdGlvbnMgPSBOZGlzUGF1c2VGdW5jdGlvbnNVbnN1cHBvcnRlZDsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuRGF0YUJhY2tGaWxsU2l6ZSA9IDA7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkNvbnRleHRCYWNrRmlsbFNpemUgPSAwOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBTdXBwb3J0ZWRPaWRMaXN0IGlzIGFuIGFycmF5IG9mIE9JRHMgZm9yIG9iamVjdHMgdGhhdCB0aGUKKyAgICAgICAgLy8gdW5kZXJseWluZyBkcml2ZXIgb3IgaXRzIE5JQyBzdXBwb3J0cy4gIE9iamVjdHMgaW5jbHVkZSBnZW5lcmFsLAorICAgICAgICAvLyBtZWRpYS1zcGVjaWZpYywgYW5kIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9iamVjdHMuIE5ESVMgZm9yd2FyZHMgYQorICAgICAgICAvLyBzdWJzZXQgb2YgdGhlIHJldHVybmVkIGxpc3QgdG8gcHJvdG9jb2xzIHRoYXQgbWFrZSB0aGlzIHF1ZXJ5LiBUaGF0CisgICAgICAgIC8vIGlzLCBORElTIGZpbHRlcnMgYW55IHN1cHBvcnRlZCBzdGF0aXN0aWNzIE9JRHMgb3V0IG9mIHRoZSBsaXN0CisgICAgICAgIC8vIGJlY2F1c2UgcHJvdG9jb2xzIG5ldmVyIG1ha2Ugc3RhdGlzdGljcyBxdWVyaWVzLgorICAgICAgICAvLworICAgICAgICBBZGFwdGVyR2VuZXJhbC5TdXBwb3J0ZWRPaWRMaXN0ID0gTklDU3VwcG9ydGVkT2lkczsKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuU3VwcG9ydGVkT2lkTGlzdExlbmd0aCA9IFNpemVPZk5JQ1N1cHBvcnRlZE9pZHM7CisgICAgICAgIEFkYXB0ZXJHZW5lcmFsLkF1dG9OZWdvdGlhdGlvbkZsYWdzID0gTkRJU19MSU5LX1NUQVRFX0RVUExFWF9BVVRPX05FR09USUFURUQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IHRoZSBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gQWxsIDAgYmFzaWNhbGx5IG1lYW5zIHdlIGRvbid0CisgICAgICAgIC8vIHN1cHBvcnQgRHggZm9yIGFueXRoaW5nLgorICAgICAgICAvLworCisgICAgICAgIFBtQ2FwYWJpbGl0aWVzLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9ERUZBVUxUOworICAgICAgICBQbUNhcGFiaWxpdGllcy5IZWFkZXIuU2l6ZSA9IE5ESVNfU0laRU9GX05ESVNfUE1fQ0FQQUJJTElUSUVTX1JFVklTSU9OXzI7CisgICAgICAgIFBtQ2FwYWJpbGl0aWVzLkhlYWRlci5SZXZpc2lvbiA9IE5ESVNfUE1fQ0FQQUJJTElUSUVTX1JFVklTSU9OXzI7CisKKyAgICAgICAgQWRhcHRlckdlbmVyYWwuUG93ZXJNYW5hZ2VtZW50Q2FwYWJpbGl0aWVzRXggPSAmUG1DYXBhYmlsaXRpZXM7CisKKyAgICAgICAgU3RhdHVzID0gTmRpc01TZXRNaW5pcG9ydEF0dHJpYnV0ZXMoCisgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgICAgICAgICAoUE5ESVNfTUlOSVBPUlRfQURBUFRFUl9BVFRSSUJVVEVTKSZBZGFwdGVyR2VuZXJhbCk7CisKKyAgICAgICAgaWYgKE5ESVNfU1RBVFVTX1NVQ0NFU1MgIT0gU3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIlslcF0gTmRpc1NldE9wdGlvbmFsSGFuZGxlcnMgZmFpbGVkICUhTkRJU19TVEFUVVMhIiwgQWRhcHRlckNvbnRleHQsIFN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoRkFMU0UpOworCisgICAgTG9nRnVuY0V4aXRORElTKERSSVZFUl9ERUZBVUxULCBTdGF0dXMpOworCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyhQQVNTSVZFX0xFVkVMKQorVk9JRAorQWRhcHRlclVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQoreworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBTZXJpYWxVbmluaXRpYWxpemUoQWRhcHRlckNvbnRleHQpOworCisgICAgaWYgKEFkYXB0ZXJDb250ZXh0LT5EZXZpY2UpCisgICAgeworICAgICAgICBXZGZPYmplY3REZWxldGUoQWRhcHRlckNvbnRleHQtPkRldmljZSk7CisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5EZXZpY2UgPSBudWxscHRyOworICAgIH0KKworICAgIE5kaXNGcmVlTWVtb3J5KEFkYXB0ZXJDb250ZXh0LCAwLCAwKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyggUEFTU0lWRV9MRVZFTCApCitfRnVuY3Rpb25fY2xhc3NfKCBNSU5JUE9SVF9SRVNUQVJUICkKK05ESVNfU1RBVFVTCitNUFJlc3RhcnQoCisgICAgX0luXyAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisgICAgX0luXyAgUE5ESVNfTUlOSVBPUlRfUkVTVEFSVF9QQVJBTUVURVJTICAgICAgIC8qIFJlc3RhcnRQYXJhbWV0ZXJzICovCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgV2hlbiBhIG1pbmlwb3J0IHJlY2VpdmVzIGEgcmVzdGFydCByZXF1ZXN0LCBpdCBlbnRlcnMgaW50byBhIFJlc3RhcnRpbmcKKyAgICBzdGF0ZS4gIFRoZSBtaW5pcG9ydCBtYXkgYmVnaW4gaW5kaWNhdGluZyByZWNlaXZlZCBkYXRhIChlLmcuLCB1c2luZworICAgIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMpLCBoYW5kbGluZyBzdGF0dXMgaW5kaWNhdGlvbnMsIGFuZAorICAgIHByb2Nlc3NpbmcgT0lEIHJlcXVlc3RzIGluIHRoZSBSZXN0YXJ0aW5nIHN0YXRlLiAgSG93ZXZlciwgbm8gc2VuZHMgd2lsbCBiZQorICAgIHJlcXVlc3RlZCB3aGlsZSB0aGUgbWluaXBvcnQgaXMgaW4gdGhlIFJlc3RhcnRpbmcgc3RhdGUuCisKKyAgICBPbmNlIHRoZSBtaW5pcG9ydCBpcyByZWFkeSB0byBzZW5kIGRhdGEsIGl0IGhhcyBlbnRlcmVkIHRoZSBSdW5uaW5nIHN0YXRlLgorICAgIFRoZSBtaW5pcG9ydCBpbmZvcm1zIE5ESVMgdGhhdCBpdCBpcyBpbiB0aGUgUnVubmluZyBzdGF0ZSBieSByZXR1cm5pbmcKKyAgICBORElTX1NUQVRVU19TVUNDRVNTIGZyb20gdGhpcyBNaW5pcG9ydFJlc3RhcnQgZnVuY3Rpb247IG9yIGlmIHRoaXMgZnVuY3Rpb24KKyAgICBoYXMgYWxyZWFkeSByZXR1cm5lZCBORElTX1NUQVRVU19QRU5ESU5HLCBieSBjYWxsaW5nIE5kaXNNUmVzdGFydENvbXBsZXRlLgorCisKKyAgICBNaW5pcG9ydFJlc3RhcnQgcnVucyBhdCBJUlFMID0gUEFTU0lWRV9MRVZFTC4KKworQXJndW1lbnRzOgorCisgICAgTWluaXBvcnRBZGFwdGVyQ29udGV4dCAgUG9pbnRlciB0byB0aGUgQWRhcHRlcgorICAgIFJlc3RhcnRQYXJhbWV0ZXJzICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXN0YXJ0IG9wZXJhdGlvbgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBJZiB0aGUgbWluaXBvcnQgaXMgYWJsZSB0byBpbW1lZGlhdGVseSBlbnRlciB0aGUgUnVubmluZyBzdGF0ZSwgaXQgc2hvdWxkCisgICAgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1MuCisKKyAgICBJZiB0aGUgbWluaXBvcnQgaXMgc3RpbGwgaW4gdGhlIFJlc3RhcnRpbmcgc3RhdGUsIGl0IHNob3VsZCByZXR1cm4KKyAgICBORElTX1NUQVRVU19QRU5ESU5HIG5vdywgYW5kIGNhbGwgTmRpc01SZXN0YXJ0Q29tcGxldGUgd2hlbiB0aGUgbWluaXBvcnQKKyAgICBoYXMgZW50ZXJlZCB0aGUgUnVubmluZyBzdGF0ZS4KKworICAgIE90aGVyIE5ESVNfU1RBVFVTIGNvZGVzIGluZGljYXRlIGVycm9ycy4gIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCB0aGUKKyAgICBtaW5pcG9ydCBtdXN0IHJldHVybiB0byB0aGUgUGF1c2VkIHN0YXRlIChpLmUuLCBzdG9wIGluZGljYXRpbmcgcmVjZWl2ZXMpLgorCistLSovCisKK3sKKyAgICBORElTX1NUQVRVUyBzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQgPSAoUE9UVE1QX0FEQVBURVJfQ09OVEVYVClNaW5pcG9ydEFkYXB0ZXJDb250ZXh0OworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIC8vIFNldCB0aGUgcnVubmluZyBmbGFnCisgICAgQWRhcHRlckNvbnRleHQtPklzUnVubmluZyA9IHRydWU7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKCBQQVNTSVZFX0xFVkVMICkKK19GdW5jdGlvbl9jbGFzc18oIE1JTklQT1JUX1BBVVNFICkKK05ESVNfU1RBVFVTCitNUFBhdXNlKAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gIFBORElTX01JTklQT1JUX1BBVVNFX1BBUkFNRVRFUlMgICAvKiBNaW5pcG9ydFBhdXNlUGFyYW1ldGVycyAqLworICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFdoZW4gYSBtaW5pcG9ydCByZWNlaXZlcyBhIHBhdXNlIHJlcXVlc3QsIGl0IGVudGVycyBpbnRvIGEgUGF1c2luZyBzdGF0ZS4KKyAgICBUaGUgbWluaXBvcnQgc2hvdWxkIG5vdCBpbmRpY2F0ZSB1cCBhbnkgbW9yZSBuZXR3b3JrIGRhdGEuICBBbnkgcGVuZGluZworICAgIHNlbmQgcmVxdWVzdHMgbXVzdCBiZSBjb21wbGV0ZWQsIGFuZCBuZXcgcmVxdWVzdHMgbXVzdCBiZSByZWplY3RlZCB3aXRoCisgICAgTkRJU19TVEFUVVNfUEFVU0VELgorCisgICAgT25jZSBhbGwgc2VuZHMgaGF2ZSBiZWVuIGNvbXBsZXRlZCBhbmQgYWxsIHJlY2lldmUgTkJMcyBoYXZlIHJldHVybmVkIHRvCisgICAgdGhlIG1pbmlwb3J0LCB0aGUgbWluaXBvcnQgZW50ZXJzIHRoZSBQYXVzZWQgc3RhdGUuCisKKyAgICBXaGlsZSBwYXVzZWQsIHRoZSBtaW5pcG9ydCBjYW4gc3RpbGwgc2VydmljZSBpbnRlcnJ1cHRzIGZyb20gdGhlIGhhcmR3YXJlCisgICAgKHRvLCBmb3IgZXhhbXBsZSwgY29udGludWUgdG8gaW5kaWNhdGUgTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVAorICAgIG5vdGlmaWNhdGlvbnMpLgorCisgICAgVGhlIG1pbmlwb3J0IG11c3QgY29udGludWUgdG8gYmUgYWJsZSB0byBoYW5kbGUgc3RhdHVzIGluZGljYXRpb25zIGFuZCBPSUQKKyAgICByZXF1ZXN0cy4gIE1pbmlwb3J0UGF1c2UgaXMgZGlmZmVyZW50IGZyb20gTWluaXBvcnRIYWx0IGJlY2F1c2UsIGluCisgICAgZ2VuZXJhbCwgdGhlIE1pbmlwb3J0UGF1c2Ugb3BlcmF0aW9uIHdvbid0IHJlbGVhc2UgYW55IHJlc291cmNlcy4KKyAgICBNaW5pcG9ydFBhdXNlIG11c3Qgbm90IGF0dGVtcHQgdG8gYWNxdWlyZSBhbnkgcmVzb3VyY2VzIHdoZXJlIGFsbG9jYXRpb24KKyAgICBjYW4gZmFpbCwgc2luY2UgTWluaXBvcnRQYXVzZSBpdHNlbGYgbXVzdCBub3QgZmFpbC4KKworCisgICAgTWluaXBvcnRQYXVzZSBydW5zIGF0IElSUUwgPSBQQVNTSVZFX0xFVkVMLgorCitBcmd1bWVudHM6CisKKyAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBBZGFwdGVyCisgICAgTWluaXBvcnRQYXVzZVBhcmFtZXRlcnMgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhdXNlIG9wZXJhdGlvbgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBJZiB0aGUgbWluaXBvcnQgaXMgYWJsZSB0byBpbW1lZGlhdGVseSBlbnRlciB0aGUgUGF1c2VkIHN0YXRlLCBpdCBzaG91bGQKKyAgICByZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUy4KKworICAgIElmIHRoZSBtaW5pcG9ydCBtdXN0IHdhaXQgZm9yIHNlbmQgY29tcGxldGlvbnMgb3IgcGVuZGluZyByZWNlaXZlIE5CTHMsIGl0CisgICAgc2hvdWxkIHJldHVybiBORElTX1NUQVRVU19QRU5ESU5HIG5vdywgYW5kIGNhbGwgTkRJU01QYXVzZUNvbXBsZXRlIHdoZW4gdGhlCisgICAgbWluaXBvcnQgaGFzIGVudGVyZWQgdGhlIFBhdXNlZCBzdGF0ZS4KKworICAgIE5vIG90aGVyIHJldHVybiB2YWx1ZSBpcyBwZXJtaXR0ZWQuICBUaGUgcGF1c2Ugb3BlcmF0aW9uIG11c3Qgbm90IGZhaWwuCisKKy0tKi8KK3sKKyAgICBORElTX1NUQVRVUyBzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQgPSAoUE9UVE1QX0FEQVBURVJfQ09OVEVYVClNaW5pcG9ydEFkYXB0ZXJDb250ZXh0OworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKyAgICAKKyAgICAvLyBDbGVhciB0aGUgZmxhZyB0byBpbmRpY2F0ZSB3ZSBhcmUgbm8gbG9uZ2VyIHJ1bm5pbmcKKyAgICBBZGFwdGVyQ29udGV4dC0+SXNSdW5uaW5nID0gZmFsc2U7CisKKyAgICBMb2dGdW5jRXhpdE5ESVMoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitWT0lECitNUFNlbmROZXRCdWZmZXJMaXN0cygKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gIFBORVRfQlVGRkVSX0xJU1QgICAgICAgIE5ldEJ1ZmZlckxpc3RzLAorICAgIF9Jbl8gIE5ESVNfUE9SVF9OVU1CRVIgICAgICAgIC8qIFBvcnROdW1iZXIgKi8sCisgICAgX0luXyAgVUxPTkcgICAgICAgICAgICAgICAgICAgU2VuZEZsYWdzCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VuZCBQYWNrZXQgQXJyYXkgaGFuZGxlci4gQ2FsbGVkIGJ5IE5ESVMgd2hlbmV2ZXIgYSBwcm90b2NvbAorICAgIGJvdW5kIHRvIG91ciBtaW5pcG9ydCBzZW5kcyBvbmUgb3IgbW9yZSBwYWNrZXRzLgorCisgICAgVGhlIGlucHV0IHBhY2tldCBkZXNjcmlwdG9yIHBvaW50ZXJzIGhhdmUgYmVlbiBvcmRlcmVkIGFjY29yZGluZworICAgIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgcGFja2V0cyBzaG91bGQgYmUgc2VudCBvdmVyIHRoZSBuZXR3b3JrCisgICAgYnkgdGhlIHByb3RvY29sIGRyaXZlciB0aGF0IHNldCB1cCB0aGUgcGFja2V0IGFycmF5LiBUaGUgTkRJUworICAgIGxpYnJhcnkgcHJlc2VydmVzIHRoZSBwcm90b2NvbC1kZXRlcm1pbmVkIG9yZGVyaW5nIHdoZW4gaXQgc3VibWl0cworICAgIGVhY2ggcGFja2V0IGFycmF5IHRvIE1pbmlwb3J0U2VuZFBhY2tldHMKKworICAgIEFzIGEgZGVzZXJpYWxpemVkIGRyaXZlciwgd2UgYXJlIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGluY29taW5nIHNlbmQKKyAgICBwYWNrZXRzIGluIG91ciBpbnRlcm5hbCBxdWV1ZSB1bnRpbCB0aGV5IGNhbiBiZSB0cmFuc21pdHRlZCBvdmVyIHRoZQorICAgIG5ldHdvcmsgYW5kIGZvciBwcmVzZXJ2aW5nIHRoZSBwcm90b2NvbC1kZXRlcm1pbmVkIG9yZGVyaW5nIG9mIHBhY2tldAorICAgIGRlc2NyaXB0b3JzIGluY29taW5nIHRvIGl0cyBNaW5pcG9ydFNlbmRQYWNrZXRzIGZ1bmN0aW9uLgorICAgIEEgZGVzZXJpYWxpemVkIG1pbmlwb3J0IGRyaXZlciBtdXN0IGNvbXBsZXRlIGVhY2ggaW5jb21pbmcgc2VuZCBwYWNrZXQKKyAgICB3aXRoIE5kaXNNU2VuZENvbXBsZXRlLCBhbmQgaXQgY2Fubm90IGNhbGwgTmRpc01TZW5kUmVzb3VyY2VzQXZhaWxhYmxlLgorCisgICAgUnVucyBhdCBJUlFMIDw9IERJU1BBVENIX0xFVkVMCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgICAgIEhlYWQgb2YgYSBsaXN0IG9mIE5CTHMgdG8gc2VuZAorICAgIFBvcnROdW1iZXIgICAgICAgICAgICAgICAgICBBIG1pbmlwb3J0IGFkYXB0ZXIgcG9ydC4gIERlZmF1bHQgaXMgMC4KKyAgICBTZW5kRmxhZ3MgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBmbGFncyBmb3IgdGhlIHNlbmQgb3BlcmF0aW9uCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuICBXcml0ZSBzdGF0dXMgZGlyZWN0bHkgaW50byBlYWNoIE5CTCB3aXRoIHRoZSBORVRfQlVGRkVSX0xJU1RfU1RBVFVTCisgICAgbWFjcm8uCisKKy0tKi8KK3sKKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0ID0gKFBPVFRNUF9BREFQVEVSX0NPTlRFWFQpTWluaXBvcnRBZGFwdGVyQ29udGV4dDsKKyAgICBQTkVUX0JVRkZFUl9MSVNUIEZhaWxlZE5ibHMgPSBOVUxMOworCisgICAgTG9nRnVuY0VudHJ5TXNnKERSSVZFUl9ERUZBVUxULCAiTmV0QnVmZmVyTGlzdDogJXAiLCBOZXRCdWZmZXJMaXN0cyk7CisKKyAgICBQTkVUX0JVRkZFUl9MSVNUIEN1cnJOYmwgPSBOZXRCdWZmZXJMaXN0czsKKyAgICB3aGlsZSAoQ3Vyck5ibCkKKyAgICB7CisgICAgICAgIFBORVRfQlVGRkVSX0xJU1QgTmV4dE5ibCA9IEN1cnJOYmwtPk5leHQ7CisgICAgICAgIEN1cnJOYmwtPk5leHQgPSBOVUxMOworCisgICAgICAgIC8vIE9ubHkgYWxsb3cgb25lIE5CIHBlciBOQkwKKyAgICAgICAgaWYgKEN1cnJOYmwtPkZpcnN0TmV0QnVmZmVyID09IE5VTEwgfHwKKyAgICAgICAgICAgIEN1cnJOYmwtPkZpcnN0TmV0QnVmZmVyLT5OZXh0ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEN1cnJOYmwtPlN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBxdWV1ZSB1cCBmb3Igc2VuZAorICAgICAgICAgICAgTlRTVEFUVVMgc3RhdHVzID0gU2VyaWFsU2VuZERhdGEoQWRhcHRlckNvbnRleHQsIEN1cnJOYmwpOworCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIEN1cnJOYmwtPlN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEN1cnJOYmwgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSB0aGUgQ3Vyck5ibCwgaXQgZmFpbGVkLCBzbyBtb3ZlIGl0IHRvIHRoZSBmYWlsdXJlIGxpc3QKKyAgICAgICAgaWYgKEN1cnJOYmwpIHsKKyAgICAgICAgICAgIEN1cnJOYmwtPk5leHQgPSBGYWlsZWROYmxzOworICAgICAgICAgICAgRmFpbGVkTmJscyA9IEN1cnJOYmw7CisgICAgICAgIH0KKworICAgICAgICBDdXJyTmJsID0gTmV4dE5ibDsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcGxldGUgYW55IGZhaWx1cmVzCisgICAgaWYgKEZhaWxlZE5ibHMpIHsKKyAgICAgICAgTmRpc01TZW5kTmV0QnVmZmVyTGlzdHNDb21wbGV0ZShBZGFwdGVyQ29udGV4dC0+QWRhcHRlciwgRmFpbGVkTmJscywgKFNlbmRGbGFncyAmIE5ESVNfU0VORF9DT01QTEVURV9GTEFHU19ESVNQQVRDSF9MRVZFTCkpOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworVk9JRAorTVBDYW5jZWxTZW5kKAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAvKiBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICovLAorICAgIF9Jbl8gIFBWT0lEICAgICAgICAgICAvKiBDYW5jZWxJZCAqLworICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIE1pbmlwb3J0Q2FuY2VsU2VuZCBjYW5jZWxzIHRoZSB0cmFuc21pc3Npb24gb2YgYWxsIE5FVF9CVUZGRVJfTElTVHMgdGhhdAorICAgIGFyZSBtYXJrZWQgd2l0aCBhIHNwZWNpZmllZCBjYW5jZWxsYXRpb24gaWRlbnRpZmllci4gTWluaXBvcnQgZHJpdmVycworICAgIHRoYXQgcXVldWUgc2VuZCBwYWNrZXRzIGZvciBtb3JlIHRoYW4gb25lIHNlY29uZCBzaG91bGQgZXhwb3J0IHRoaXMKKyAgICBoYW5kbGVyLiBXaGVuIGEgcHJvdG9jb2wgZHJpdmVyIG9yIGludGVybWVkaWF0ZSBkcml2ZXIgY2FsbHMgdGhlCisgICAgTmRpc0NhbmNlbFNlbmROZXRCdWZmZXJMaXN0cyBmdW5jdGlvbiwgTkRJUyBjYWxscyB0aGUgTWluaXBvcnRDYW5jZWxTZW5kCisgICAgZnVuY3Rpb24gb2YgdGhlIGFwcHJvcHJpYXRlIGxvd2VyLWxldmVsIGRyaXZlciAobWluaXBvcnQgZHJpdmVyIG9yCisgICAgaW50ZXJtZWRpYXRlIGRyaXZlcikgb24gdGhlIGJpbmRpbmcuCisKKyAgICBSdW5zIGF0IElSUUwgPD0gRElTUEFUQ0hfTEVWRUwuCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgQ2FuY2VsSWQgICAgICAgICAgICAgICAgICAgIEFsbCB0aGUgcGFja2V0cyB3aXRoIHRoaXMgSWQgc2hvdWxkIGJlIGNhbmNlbGxlZAorCitSZXR1cm4gVmFsdWU6CisKKyAgICBOb25lLgorCistLSovCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworVk9JRAorTVBSZXR1cm5OZXRCdWZmZXJMaXN0cygKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAvKiBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICovLAorICAgIF9Jbl8gIFBORVRfQlVGRkVSX0xJU1QgIE5ldEJ1ZmZlckxpc3RzLAorICAgIF9Jbl8gIFVMT05HICAgICAgICAgICAgIC8qIFJldHVybkZsYWdzICovCisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgTkRJUyBNaW5pcG9ydCBlbnRyeSBwb2ludCBjYWxsZWQgd2hlbmV2ZXIgcHJvdG9jb2xzIGFyZSBkb25lIHdpdGggb25lIG9yCisgICAgTkJMcyB0aGF0IHdlIGluZGljYXRlZCB1cCB3aXRoIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMuCisKKyAgICBOb3RlIHRoYXQgdGhlIGxpc3Qgb2YgTkJMcyBtYXkgYmUgY2hhaW5lZCB0b2dldGhlciBmcm9tIG11bHRpcGxlIHNlcGFyYXRlCisgICAgbGlzdHMgdGhhdCB3ZXJlIGluZGljYXRlZCB1cCBpbmRpdmlkdWFsbHkuCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgTmV0QnVmZmVyTGlzdHMgICAgICAgICAgICAgIE5CTHMgYmVpbmcgcmV0dXJuZWQKKyAgICBSZXR1cm5GbGFncyAgICAgICAgICAgICAgICAgTWF5IGNvbnRhaW4gdGhlIE5ESVNfUkVUVVJOX0ZMQUdTX0RJU1BBVENIX0xFVkVMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcsIHdoaWNoIGlmIGlzIHNldCwgaW5kaWNhdGVzIHdlIGNhbiBnZXQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbCBwZXJmIHdpbiBieSBub3QgY2hlY2tpbmcgb3IgcmFpc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRTAorCitSZXR1cm4gVmFsdWU6CisKKyAgICBOb25lLgorCistLSovCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIE5ldEJ1ZmZlckxpc3RzCisgICAgZm9yIChQTkVUX0JVRkZFUl9MSVNUIHBOYmxOZXh0LCBwTmJsID0gTmV0QnVmZmVyTGlzdHM7IHBOYmw7IHBOYmwgPSBwTmJsTmV4dCkKKyAgICB7CisgICAgICAgIC8vIFNhdmUgbmV4dCB0byB0ZW1wb3JhcnkgYW5kIGNsZWFyIG1lbWJlciB2YXJpYWJsZQorICAgICAgICBwTmJsTmV4dCA9IE5FVF9CVUZGRVJfTElTVF9ORVhUX05CTChwTmJsKTsKKyAgICAgICAgTkVUX0JVRkZFUl9MSVNUX05FWFRfTkJMKHBOYmwpID0gTlVMTDsKKworICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBOZXRidWZmZXJzCisgICAgICAgIGZvciAoUE5FVF9CVUZGRVIgcE5iTmV4dCwgcE5iID0gTkVUX0JVRkZFUl9MSVNUX0ZJUlNUX05CKHBOYmwpOyBwTmI7IHBOYiA9IHBOYk5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBOYk5leHQgPSBORVRfQlVGRkVSX05FWFRfTkIocE5iKTsKKyAgICAgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyKHBOYik7CisgICAgICAgIH0KKworICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlckxpc3QocE5ibCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2FkYXB0ZXIuaHBwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2FkYXB0ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTExNzEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvYWRhcHRlci5ocHAKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgSGVhZGVyIGZpbGUgZm9yIHRoZSByb3V0aW5lcyByZWxhdGVkIHRvIE5FVEFEQVBURVIgT2JqZWN0IGZvciB0aGUgCisgKiAgIE5ldHdvcmsgQWRhcHRlcgorICovCisKKyNkZWZpbmUgTklDX1RBR19SRUNWX05CTCAoKFVMT05HKSdyTVZUJykgIC8vIFRWTXIKKyNkZWZpbmUgT1RUTVBfQURBUFRFUl9DT05URVhUX1NJR05BVFVSRSAncGRBdCcKKworLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBvbmUgU3BpbmVsIGNvbW1hbmQgLyBzZXJpYWwgcGFja2V0CisjZGVmaW5lIE1BWF9TUElORUxfQ09NTUFORF9MRU5HVEggICAgIDEzMDAKKwordHlwZWRlZiBzdHJ1Y3QgX1NFUklBTF9TRU5EX0lURU0KK3sKKyAgICBMSVNUX0VOVFJZICAgICAgICAgIExpbms7CisgICAgUE5FVF9CVUZGRVJfTElTVCAgICBOZXRCdWZmZXJMaXN0OworICAgIFdERk1FTU9SWSAgICAgICAgICAgV2RmTWVtb3J5OworICAgIFVMT05HICAgICAgICAgICAgICAgRW5jb2RlZEJ1ZmZlckxlbmd0aDsKKyAgICBfRmllbGRfc2l6ZV9ieXRlc18oRW5jb2RlZEJ1ZmZlckxlbmd0aCkKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEVuY29kZWRCdWZmZXJbMF07CisKK30gU0VSSUFMX1NFTkRfSVRFTSwgKlBTRVJJQUxfU0VORF9JVEVNOworCitjb25zdCBVTE9ORyBTRVJJQUxfU0VORF9JVEVNX1NJWkUgPSBGSUVMRF9PRkZTRVQoU0VSSUFMX1NFTkRfSVRFTSwgRW5jb2RlZEJ1ZmZlcik7CisKK3R5cGVkZWYgc3RydWN0IF9PVFRNUF9BREFQVEVSX0NPTlRFWFQgeworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOworCisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyOworI2Vsc2UKKyAgICAvLworICAgIC8vIEhhbmRsZSB0byB0aGUgTkVUQURBUFRFUiBvYmplY3QgZm9yIHRoaXMgY29udGV4dAorICAgIC8vCisgICAgTkVUQURBUFRFUiAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyOworI2VuZGlmCisKKyAgICAvLworICAgIC8vIEhhbmRsZSB0byB0aGUgY29ycmVzcG9uZGluZyBXREZERVZJQ0UKKyAgICAvLworICAgIFdERkRFVklDRSAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlOworCisgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgZGF0YSBwYXRoIGlzIGVuYWJsZWQKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzQ29ubmVjdGVkOworCisgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgQWRhcHRlciBoYXMgYmVlbiBzdGFydGVkIG9yIG5vdAorICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNSdW5uaW5nOworICAgIAorI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgIFBHTE9CQUxTICAgICAgICAgICAgICAgICAgICAgICAgcEdsb2JhbHM7CisjZWxzZQorICAgIC8vIFJlY2VpdmUgcGFja2V0IHBvb2wKKyAgICBORVRCVUZGRVJMSVNUQ09MTEVDVElPTiAgICAgICAgIFJlY2VpdmVDb2xsZWN0aW9uOworI2VuZGlmCisgICAgCisgICAgVUxPTkdMT05HICAgICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3M7IC8vIFRPRE8gLSBDYWNoZQorCisgICAgLy8KKyAgICAvLyBTZXJpYWwgRGV2aWNlCisgICAgLy8KKworICAgIFdERklPVEFSR0VUICAgICAgICAgICAgICAgICAgICAgV2RmSW9UYXJnZXQ7CisKKyAgICBXREZTUElOTE9DSyAgICAgICAgICAgICAgICAgICAgIFNlbmRMb2NrOworICAgIF9HdWFyZGVkX2J5XyhTZW5kTG9jaykKKyAgICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIFNlbmRRdWV1ZTsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRRdWV1ZVJ1bm5pbmc7CisgICAgV0RGV09SS0lURU0gICAgICAgICAgICAgICAgICAgICBTZW5kV29ya0l0ZW07CisgICAgCisgICAgV0RGV09SS0lURU0gICAgICAgICAgICAgICAgICAgICBSZWN2V29ya0l0ZW07CisgICAgV0RGUkVRVUVTVCAgICAgICAgICAgICAgICAgICAgICBSZWN2UmVhZFJlcXVlc3Q7CisKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3ZCdWZmZXJbTUFYX1NQSU5FTF9DT01NQU5EX0xFTkdUSCAqIDJdOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdkJ1ZmZlckxlbmd0aDsKKworICAgIC8vCisgICAgLy8gTklDIGNvbmZpZ3VyYXRpb24gLSBUaGlzIGluZm9ybWF0aW9uIGlzIHF1ZXJpZWQgYnkgdGhlIHByb3RvY29sIGRyaXZlcnMuCisgICAgLy8gU2luY2UgdGhpcyBzYW1wbGUgZm9jdXNlcyBvbiBkZW1vbnN0cmF0aW5nIHRoZSBORElTIFdERiBtb2RlbCwgCisgICAgLy8gaXQgZG9lc24ndCBtb2RpZnkgYW55IHRoZXNlIHZhbHVlcyBkdXJpbmcgcnVudGltZS4KKyAgICAvLyBQbGVhc2UgbG9vayBhdCB0aGUgbmV0dm1pbmk2MzAgc2FtcGxlIHRvIHNlZSBob3cgdGhlc2UgdmFsdWVzIGNhbiBiZSBzZXQKKyAgICAvLyBhbmQgdXBkYXRlZAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFBhY2tldEZpbHRlcjsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICB1bExvb2thaGVhZDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICB1bExpbmtTZW5kU3BlZWQ7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgdWxMaW5rUmVjdlNwZWVkOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsTWF4QnVzeVNlbmRzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsTWF4QnVzeVJlY3ZzOworCisgICAgLy8KKyAgICAvLyBTdGF0aXN0aWNzIC0gCisgICAgLy8gU2luY2UgdGhpcyBzYW1wbGUgZm9jdXNlcyBvbiBkZW1vbnN0cmF0aW5nIHRoZSBORElTIFdERiBtb2RlbCwgCisgICAgLy8gaXQgZG9lc24ndCBtb2RpZnkgYW55IHRoZXNlIHZhbHVlcyBkdXJpbmcgcnVudGltZS4KKyAgICAvLyBQbGVhc2UgbG9vayBhdCB0aGUgbmV0dm1pbmk2MzAgc2FtcGxlIHRvIHNlZSBob3cgdGhlc2UgdmFsdWVzIGNhbiBiZSBzZXQKKyAgICAvLyBhbmQgdXBkYXRlZAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLworCisgICAgLy8gUGFja2V0IGNvdW50cworICAgIFVMT05HNjQgICAgICAgICAgICAgICAgIEZyYW1lc1J4RGlyZWN0ZWQ7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgRnJhbWVzUnhNdWx0aWNhc3Q7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgRnJhbWVzUnhCcm9hZGNhc3Q7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgRnJhbWVzVHhEaXJlY3RlZDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBGcmFtZXNUeE11bHRpY2FzdDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBGcmFtZXNUeEJyb2FkY2FzdDsKKworICAgIC8vIEJ5dGUgY291bnRzCisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgQnl0ZXNSeERpcmVjdGVkOworICAgIFVMT05HNjQgICAgICAgICAgICAgICAgIEJ5dGVzUnhNdWx0aWNhc3Q7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgQnl0ZXNSeEJyb2FkY2FzdDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBCeXRlc1R4RGlyZWN0ZWQ7CisgICAgVUxPTkc2NCAgICAgICAgICAgICAgICAgQnl0ZXNUeE11bHRpY2FzdDsKKyAgICBVTE9ORzY0ICAgICAgICAgICAgICAgICBCeXRlc1R4QnJvYWRjYXN0OworCisgICAgLy8gQ291bnQgb2YgdHJhbnNtaXQgZXJyb3JzCisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgVHhBYm9ydEV4Y2Vzc0NvbGxpc2lvbnM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgVHhMYXRlQ29sbGlzaW9uczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBUeERtYVVuZGVycnVuOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFR4TG9zdENSUzsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBUeE9LQnV0RGVmZXJyZWQ7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgT25lUmV0cnk7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTW9yZVRoYW5PbmVSZXRyeTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBUb3RhbFJldHJpZXM7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgVHJhbnNtaXRGYWlsdXJlc090aGVyOworCisgICAgLy8gQ291bnQgb2YgcmVjZWl2ZSBlcnJvcnMKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeENyY0Vycm9yczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeEFsaWdubWVudEVycm9yczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeFJlc291cmNlRXJyb3JzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJ4RG1hT3ZlcnJ1bkVycm9yczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeENkdEZyYW1lczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSeFJ1bnRFcnJvcnM7CisKK30gT1RUTVBfQURBUFRFUl9DT05URVhULCAqUE9UVE1QX0FEQVBURVJfQ09OVEVYVDsKKworV0RGX0RFQ0xBUkVfQ09OVEVYVF9UWVBFX1dJVEhfTkFNRShPVFRNUF9BREFQVEVSX0NPTlRFWFQsIEdldEFkYXB0ZXJDb250ZXh0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1dERl9ERVZJQ0VfSU5GTworeworICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQ7CisKK30gV0RGX0RFVklDRV9JTkZPLCAqUFdERl9ERVZJQ0VfSU5GTzsKKworV0RGX0RFQ0xBUkVfQ09OVEVYVF9UWVBFX1dJVEhfTkFNRShXREZfREVWSUNFX0lORk8sIEdldFdkZkRldmljZUluZm8pOworCisjaWZkZWYgT1RUTVBfTEVHQUNZCisKK1BBR0VEIE1JTklQT1JUX1BBVVNFICAgICAgICAgICAgICAgICAgICBNUFBhdXNlOworUEFHRUQgTUlOSVBPUlRfUkVTVEFSVCAgICAgICAgICAgICAgICAgIE1QUmVzdGFydDsKKworTUlOSVBPUlRfU0VORF9ORVRfQlVGRkVSX0xJU1RTICAgICAgICAgIE1QU2VuZE5ldEJ1ZmZlckxpc3RzOworTUlOSVBPUlRfUkVUVVJOX05FVF9CVUZGRVJfTElTVFMgICAgICAgIE1QUmV0dXJuTmV0QnVmZmVyTGlzdHM7CitNSU5JUE9SVF9DQU5DRUxfU0VORCAgICAgICAgICAgICAgICAgICAgTVBDYW5jZWxTZW5kOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTkRJU19TVEFUVVMKK0FkYXB0ZXJJbml0aWFsaXplKAorICAgIF9Jbl8gTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgTWluaXBvcnRBZGFwdGVySGFuZGxlLAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKFBBU1NJVkVfTEVWRUwpCitWT0lECitBZGFwdGVyVW5pbml0aWFsaXplKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCisjZWxzZQorCitQQUdFRCBFVlRfTkVUX0FEQVBURVJfU0VUX0NBUEFCSUxJVElFUyAgRXZ0QWRhcHRlclNldENhcGFiaWxpdGllczsKK1BBR0VEIEVWVF9ORVRfQURBUFRFUl9TVEFSVCAgICAgICAgICAgICBFdnRBZGFwdGVyU3RhcnQ7CitQQUdFRCBFVlRfTkVUX0FEQVBURVJfUEFVU0UgICAgICAgICAgICAgRXZ0QWRhcHRlclBhdXNlOworCitFVlRfTkVUX0FEQVBURVJfU0VORF9ORVRfQlVGRkVSX0xJU1RTICAgRXZ0QWRhcHRlclNlbmROZXRCdWZmZXJMaXN0czsKKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitBZGFwdGVySW5pdGlhbGl6ZSgKKyAgICBfSW5fIE5FVEFEQVBURVIgICAgICAgICAgICAgQWRhcHRlciwKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBQT1RUTVBfREVWSUNFX0NPTlRFWFQgIERldmljZUNvbnRleHQKKyAgICApOworCisjZW5kaWYKKworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorQWRhcHRlckluZGljYXRlRW5lcmd5U2NhbkNvbXBsZXRlKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIE5ESVNfU1RBVFVTICAgICAgICAgICAgU3RhdHVzCisgICAgKTsKKworRVhUX0NBTExCQUNLIEFkYXB0ZXJFbmVyZ3lTY2FuVGltZXJDYWxsYmFjazsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9kZXZpY2UuY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RldmljZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NjE5YwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9kZXZpY2UuY3BwCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgY29kZSB0byBtYW5hZ2UgdGhlIFdERkRFVklDRSBvYmplY3QgZm9yIHRoZQorICogICBuZXR3b3JrIGFkYXB0ZXIuCisgKi8KKworI2luY2x1ZGUgPGluaXRndWlkLmg+CisjaW5jbHVkZSAicGNoLmhwcCIKKyNpbmNsdWRlICJkZXZpY2UudG1oIgorCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKCBQQVNTSVZFX0xFVkVMICkKK19GdW5jdGlvbl9jbGFzc18oIE1JTklQT1JUX0lOSVRJQUxJWkUgKQorTkRJU19TVEFUVVMKK01QSW5pdGlhbGl6ZUV4KAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAgICAgICAgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgX0luXyAgTkRJU19IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIE1pbmlwb3J0RHJpdmVyQ29udGV4dCwKKyAgICBfSW5fICBQTkRJU19NSU5JUE9SVF9JTklUX1BBUkFNRVRFUlMgICAgLyogTWluaXBvcnRJbml0UGFyYW1ldGVycyAqLworICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBUaGUgTWluaXBvcnRJbml0aWFsaXplIGZ1bmN0aW9uIGlzIGEgcmVxdWlyZWQgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIGEKKyAgICBOSUMgKG9yIHZpcnR1YWwgTklDKSBmb3IgbmV0d29yayBJL08gb3BlcmF0aW9ucywgY2xhaW1zIGFsbCBoYXJkd2FyZQorICAgIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gdGhlIE5JQyBpbiB0aGUgcmVnaXN0cnksIGFuZCBhbGxvY2F0ZXMgcmVzb3VyY2VzCisgICAgdGhlIGRyaXZlciBuZWVkcyB0byBjYXJyeSBvdXQgbmV0d29yayBJL08gb3BlcmF0aW9ucy4KKworICAgIE1pbmlwb3J0SW5pdGlhbGl6ZSBydW5zIGF0IElSUUwgPSBQQVNTSVZFX0xFVkVMLgorCitBcmd1bWVudHM6CisKK1JldHVybiBWYWx1ZToKKworICAgIE5ESVNfU1RBVFVTX3h4eCBjb2RlCisKKy0tKi8KK3sKKyAgICBORElTX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworICAgIFBHTE9CQUxTICAgICAgICAgICAgICAgIHBHbG9iYWxzID0gKFBHTE9CQUxTKU1pbmlwb3J0RHJpdmVyQ29udGV4dDsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICBwUGRvID0gbnVsbHB0cjsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICBwRmRvID0gbnVsbHB0cjsKKyAgICBQREVWSUNFX09CSkVDVCAgICAgICAgICBwTmV4dERldmljZU9iamVjdCA9IG51bGxwdHI7CisgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTICAgYXR0cmlidXRlczsKKyAgICBXREZERVZJQ0UgICAgICAgICAgICAgICBkZXZpY2UgPSBudWxscHRyOworICAgIFBPVFRNUF9ERVZJQ0VfQ09OVEVYVCAgIGRldmljZUNvbnRleHQgPSBudWxscHRyOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGRvCisgICAgeworICAgICAgICBORElTX01JTklQT1JUX0FEQVBURVJfUkVHSVNUUkFUSU9OX0FUVFJJQlVURVMgQWRhcHRlclJlZ2lzdHJhdGlvbiA9IHsgMCB9OworICAgICAgICBORElTX01JTklQT1JUX0FEQVBURVJfR0VORVJBTF9BVFRSSUJVVEVTIEFkYXB0ZXJHZW5lcmFsID0geyAwIH07CisgICAgICAgIE5ESVNfUE1fQ0FQQUJJTElUSUVTIFBtQ2FwYWJpbGl0aWVzID0geyAwIH07CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTmRpc01HZXREZXZpY2VQcm9wZXJ0eSBmdW5jdGlvbiBlbmFibGVzIHVzIHRvIGdldCB0aGU6CisgICAgICAgIC8vIFBETyAtIGNyZWF0ZWQgYnkgdGhlIGJ1cyBkcml2ZXIgdG8gcmVwcmVzZW50IG91ciBkZXZpY2UuCisgICAgICAgIC8vIEZETyAtIGNyZWF0ZWQgYnkgTkRJUyB0byByZXByZXNlbnQgb3VyIG1pbmlwb3J0IGFzIGEgZnVuY3Rpb24KKyAgICAgICAgLy8gICAgICAgICAgICAgIGRyaXZlci4KKyAgICAgICAgLy8gTmV4dERldmljZU9iamVjdCAtIGRldmljZW9iamVjdCBvZiBhbm90aGVyIGRyaXZlciAoZmlsdGVyKQorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgYXR0YWNoZWQgdG8gdXMgYXQgdGhlIGJvdHRvbS4KKyAgICAgICAgLy8gU2luY2Ugb3VyIGRyaXZlciBpcyB0YWxraW5nIHRvIE5ESVNQUk9ULCB0aGUgTmV4dERldmljZU9iamVjdAorICAgICAgICAvLyBpcyBub3QgdXNlZnVsLiBCdXQgaWYgd2Ugd2VyZSB0byB0YWxrIHRvIGEgZHJpdmVyIHRoYXQgd2UKKyAgICAgICAgLy8gYXJlIGF0dGFjaGVkIHRvIGFzIHBhcnQgb2YgdGhlIGRldmljZXN0YWNrIHRoZW4gTmV4dERldmljZU9iamVjdAorICAgICAgICAvLyB3b3VsZCBiZSBvdXIgdGFyZ2V0IERldmljZU9iamVjdCBmb3Igc2VuZGluZyByZWFkL3dyaXRlIFJlcXVlc3RzLgorICAgICAgICAvLworCisgICAgICAgIE5kaXNNR2V0RGV2aWNlUHJvcGVydHkoCisgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgICAgICAgICAmcFBkbywKKyAgICAgICAgICAgICZwRmRvLAorICAgICAgICAgICAgJnBOZXh0RGV2aWNlT2JqZWN0LAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxwdHIpOworCisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUX0NPTlRFWFRfVFlQRSgmYXR0cmlidXRlcywgT1RUTVBfREVWSUNFX0NPTlRFWFQpOworCisgICAgICAgIE5UU1RBVFVTIG50U3RhdHVzID0gV2RmRGV2aWNlTWluaXBvcnRDcmVhdGUoCisgICAgICAgICAgICBwR2xvYmFscy0+V2RmRHJpdmVyLAorICAgICAgICAgICAgJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICBwRmRvLAorICAgICAgICAgICAgcE5leHREZXZpY2VPYmplY3QsCisgICAgICAgICAgICBwUGRvLAorICAgICAgICAgICAgJmRldmljZSk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKG50U3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZEZXZpY2VNaW5pcG9ydENyZWF0ZSBmYWlsZWQgJSFTVEFUVVMhIiwgbnRTdGF0dXMpOworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2V0IFdERiBtaW5pcG9ydCBkZXZpY2UgY29udGV4dC4KKyAgICAgICAgLy8KKyAgICAgICAgZGV2aWNlQ29udGV4dCA9IEdldERldmljZUNvbnRleHQoZGV2aWNlKTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+U2lnbmF0dXJlID0gT1RUTVBfREVWSUNFX0NPTlRFWFRfU0lHTkFUVVJFOworICAgICAgICBkZXZpY2VDb250ZXh0LT5EZXZpY2UgPSBkZXZpY2U7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWxsb2NhdGUgYWRhcHRlciBjb250ZXh0IHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZSBhbGwgdGhlCisgICAgICAgIC8vIG1lbW9yeSByZXNvdXJjZXMgZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBwYWNrZXRzLgorICAgICAgICAvLworICAgICAgICBkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCA9IChQT1RUTVBfQURBUFRFUl9DT05URVhUKU5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eSgKKyAgICAgICAgICAgIHBHbG9iYWxzLT5oRHJpdmVyLCAKKyAgICAgICAgICAgIHNpemVvZihPVFRNUF9BREFQVEVSX0NPTlRFWFQpLCAKKyAgICAgICAgICAgIE9UVE1QX0FEQVBURVJfQ09OVEVYVF9TSUdOQVRVUkUsCisgICAgICAgICAgICBOb3JtYWxQb29sUHJpb3JpdHkpOworCisgICAgICAgIGlmIChkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWdQcmlvcml0eSBmYWlsZWQiKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSdGxaZXJvTWVtb3J5KGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0LCBzaXplb2YoT1RUTVBfQURBUFRFUl9DT05URVhUKSk7CisgICAgICAgIGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0LT5TaWduYXR1cmUgPSBPVFRNUF9BREFQVEVSX0NPTlRFWFRfU0lHTkFUVVJFOworICAgICAgICBkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dC0+QWRhcHRlciA9IE1pbmlwb3J0QWRhcHRlckhhbmRsZTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+QWRhcHRlckNvbnRleHQtPkRldmljZSA9IGRldmljZUNvbnRleHQtPkRldmljZTsKKyAgICAgICAgZGV2aWNlQ29udGV4dC0+QWRhcHRlckNvbnRleHQtPnBHbG9iYWxzID0gcEdsb2JhbHM7CisKKyAgICAgICAgU3RhdHVzID0gQWRhcHRlckluaXRpYWxpemUoCisgICAgICAgICAgICBNaW5pcG9ydEFkYXB0ZXJIYW5kbGUsCisgICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCk7CisKKyAgICAgICAgaWYgKE5ESVNfU1RBVFVTX1NVQ0NFU1MgIT0gU3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkFkYXB0ZXJJbml0aWFsaXplIGZhaWxlZCAlIU5ESVNfU1RBVFVTISIsIFN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG50U3RhdHVzID0gU2VyaWFsSW5pdGlhbGl6ZShkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dCk7CisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhudFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0YXJ0IHRoZSByZWFkIGxvb3AKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlN0YXJ0aW5nIHJlY3Ygd29ya2VyIik7CisgICAgICAgIFdkZldvcmtJdGVtRW5xdWV1ZShkZXZpY2VDb250ZXh0LT5BZGFwdGVyQ29udGV4dC0+UmVjdldvcmtJdGVtKTsKKworICAgIH0gd2hpbGUgKEZBTFNFKTsKKworICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChkZXZpY2VDb250ZXh0ICYmIGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBBZGFwdGVyVW5pbml0aWFsaXplKGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkFkYXB0ZXJDb250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TkRJUyhEUklWRVJfREVGQVVMVCwgU3RhdHVzKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK1BBR0VECitWT0lECitNUEhhbHRFeCgKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgTWluaXBvcnRBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fICBORElTX0hBTFRfQUNUSU9OICAgICAgSGFsdEFjdGlvbgorICAgICkKKy8qKysKKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIEhhbHQgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9TVE9QX0RFVklDRSwKKyAgICBJUlBfTU5fU1VQUklTRV9SRU1PVkUgb3IgSVJQX01OX1JFTU9WRV9ERVZJQ0UgcmVxdWVzdHMgZnJvbSB0aGUgUE5QCisgICAgbWFuYWdlci4gSGVyZSwgdGhlIGRyaXZlciBzaG91bGQgZnJlZSBhbGwgdGhlIHJlc291cmNlcyBhY3F1aXJlZCBpbgorICAgIE1pbmlwb3J0SW5pdGlhbGl6ZSBhbmQgc3RvcCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlLiBORElTIHdpbGwgbm90IHN1Ym1pdAorICAgIGFueSBmdXJ0aGVyIHJlcXVlc3Qgb25jZSB0aGlzIGhhbmRsZXIgaXMgaW52b2tlZC4KKworICAgIDEpIEZyZWUgYW5kIHVubWFwIGFsbCBJL08gcmVzb3VyY2VzLgorICAgIDIpIERpc2FibGUgaW50ZXJydXB0IGFuZCBkZXJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyLgorICAgIDMpIERlcmVnaXN0ZXIgc2h1dGRvd24gaGFuZGxlciByZWdzaXRlcmVkIGJ5CisgICAgICAgIE5kaXNNUmVnaXN0ZXJBZGFwdGVyU2h1dGRvd25IYW5kbGVyIC4KKyAgICA0KSBDYW5jZWwgYWxsIHF1ZXVlZCB1cCB0aW1lciBjYWxsYmFja3MuCisgICAgNSkgRmluYWxseSB3YWl0IGluZGVmaW5pdGVseSBmb3IgYWxsIHRoZSBvdXRzdGFuZGluZyByZWNlaXZlCisgICAgICAgIHBhY2tldHMgaW5kaWNhdGVkIHRvIHRoZSBwcm90b2NvbCB0byByZXR1cm4uCisKKyAgICBNaW5pcG9ydEhhbHQgcnVucyBhdCBJUlFMID0gUEFTU0lWRV9MRVZFTC4KKworCitBcmd1bWVudHM6CisKKyAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBBZGFwdGVyCisgICAgSGFsdEFjdGlvbiAgVGhlIHJlYXNvbiBmb3IgaGFsdGluZyB0aGUgYWRhcHRlcgorCitSZXR1cm4gVmFsdWU6CisKKyAgICBOb25lLgorCistLSovCit7CisgICAgUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCA9IChQT1RUTVBfQURBUFRFUl9DT05URVhUKU1pbmlwb3J0QWRhcHRlckNvbnRleHQ7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgLy8KKyAgICAvLyBDYWxsIFNodXRkb3duIGhhbmRsZXIgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHR1cm4gdGhlIGhhcmR3YXJlIG9mZgorICAgIC8vIGJ5IGlzc3VpbmcgYSBmdWxsIHJlc2V0CisgICAgLy8KKyAgICBpZiAoSGFsdEFjdGlvbiAhPSBOZGlzSGFsdERldmljZVN1cnByaXNlUmVtb3ZlZCkKKyAgICB7CisgICAgICAgIE1QU2h1dGRvd25FeChNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LCBOZGlzU2h1dGRvd25Qb3dlck9mZik7CisgICAgfQorCisgICAgQWRhcHRlclVuaW5pdGlhbGl6ZShBZGFwdGVyQ29udGV4dCk7CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK1ZPSUQKK01QU2h1dGRvd25FeCgKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgLyogTWluaXBvcnRBZGFwdGVyQ29udGV4dCAqLywKKyAgICBfSW5fICBORElTX1NIVVRET1dOX0FDVElPTiAgLyogU2h1dGRvd25BY3Rpb24gKi8KKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBUaGUgTWluaXBvcnRTaHV0ZG93bkV4IGhhbmRsZXIgcmVzdG9yZXMgaGFyZHdhcmUgdG8gaXRzIGluaXRpYWwgc3RhdGUgd2hlbgorICAgIHRoZSBzeXN0ZW0gaXMgc2h1dCBkb3duLCB3aGV0aGVyIGJ5IHRoZSB1c2VyIG9yIGJlY2F1c2UgYW4gdW5yZWNvdmVyYWJsZQorICAgIHN5c3RlbSBlcnJvciBvY2N1cnJlZC4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgTklDIGlzIGluIGEga25vd24KKyAgICBzdGF0ZSBhbmQgcmVhZHkgdG8gYmUgcmVpbml0aWFsaXplZCB3aGVuIHRoZSBtYWNoaW5lIGlzIHJlYm9vdGVkIGFmdGVyCisgICAgYSBzeXN0ZW0gc2h1dGRvd24gb2NjdXJzIGZvciBhbnkgcmVhc29uLCBpbmNsdWRpbmcgYSBjcmFzaCBkdW1wLgorCisgICAgSGVyZSBqdXN0IGRpc2FibGUgdGhlIGludGVycnVwdCBhbmQgc3RvcCB0aGUgRE1BIGVuZ2luZS4gIERvIG5vdCBmcmVlCisgICAgbWVtb3J5IHJlc291cmNlcyBvciB3YWl0IGZvciBhbnkgcGFja2V0IHRyYW5zZmVycyB0byBjb21wbGV0ZS4gIERvIG5vdCBjYWxsCisgICAgaW50byBORElTIGF0IHRoaXMgdGltZS4KKworICAgIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhcmliaXRyYXJ5IElSUUwsIGluY2x1ZGluZyBpbiB0aGUgY29udGV4dCBvZiBhCisgICAgYnVnY2hlY2suCisKK0FyZ3VtZW50czoKKworICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICBTaHV0ZG93bkFjdGlvbiAgVGhlIHJlYXNvbiB3aHkgTkRJUyBjYWxsZWQgdGhlIHNodXRkb3duIGZ1bmN0aW9uCisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitQQUdFRAorVk9JRAorTVBEZXZpY2VQbnBFdmVudE5vdGlmeSgKKyAgICBfSW5fICBORElTX0hBTkRMRSAgICAgICAgICAgICAvKiBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICovLAorICAgIF9Jbl8gIFBORVRfREVWSUNFX1BOUF9FVkVOVCAgIE5ldERldmljZVBuUEV2ZW50CisgICAgKQorLyorKworCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgUnVucyBhdCBJUlFMID0gUEFTU0lWRV9MRVZFTCBpbiB0aGUgY29udGV4dCBvZiBzeXN0ZW0gdGhyZWFkLgorCitBcmd1bWVudHM6CisKKyAgICBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0ICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgIE5ldERldmljZVBuUEV2ZW50ICAgICAgICAgICBTZWxmLWV4cGxhbmF0b3J5CisKK1JldHVybiBWYWx1ZToKKworICAgIE5vbmUuCisKKy0tKi8KK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgc3dpdGNoIChOZXREZXZpY2VQblBFdmVudC0+RGV2aWNlUG5QRXZlbnQpCisgICAgeworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50UXVlcnlSZW1vdmVkOgorICAgICAgICAvLworICAgICAgICAvLyBDYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9RVUVSWV9SRU1PVkVfREVWSUNFLgorICAgICAgICAvLworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiTVBQblBFdmVudE5vdGlmeTogTmRpc0RldmljZVBuUEV2ZW50UXVlcnlSZW1vdmVkIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOZGlzRGV2aWNlUG5QRXZlbnRSZW1vdmVkOgorICAgICAgICAvLworICAgICAgICAvLyBDYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9SRU1PVkVfREVWSUNFLgorICAgICAgICAvLyBORElTIGNhbGxzIE1pbmlwb3J0SGFsdCBmdW5jdGlvbiBhZnRlciB0aGlzIGNhbGwgcmV0dXJucy4KKyAgICAgICAgLy8KKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIk1QUG5QRXZlbnROb3RpZnk6IE5kaXNEZXZpY2VQblBFdmVudFJlbW92ZWQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5kaXNEZXZpY2VQblBFdmVudFN1cnByaXNlUmVtb3ZlZDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2FsbGVkIHdoZW4gTkRJUyByZWNlaXZlcyBJUlBfTU5fU1VQUklTRV9SRU1PVkFMLgorICAgICAgICAvLyBORElTIGNhbGxzIE1pbmlwb3J0SGFsdCBmdW5jdGlvbiBhZnRlciB0aGlzIGNhbGwgcmV0dXJucy4KKyAgICAgICAgLy8KKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIk1QRGV2aWNlUG5wRXZlbnROb3RpZnk6IE5kaXNEZXZpY2VQblBFdmVudFN1cnByaXNlUmVtb3ZlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50UXVlcnlTdG9wcGVkOgorICAgICAgICAvLworICAgICAgICAvLyBDYWxsZWQgd2hlbiBORElTIHJlY2VpdmVzIElSUF9NTl9RVUVSWV9TVE9QX0RFVklDRS4gPz8KKyAgICAgICAgLy8KKyAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIk1QUG5QRXZlbnROb3RpZnk6IE5kaXNEZXZpY2VQblBFdmVudFF1ZXJ5U3RvcHBlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50U3RvcHBlZDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2FsbGVkIHdoZW4gTkRJUyByZWNlaXZlcyBJUlBfTU5fU1RPUF9ERVZJQ0UuCisgICAgICAgIC8vIE5ESVMgY2FsbHMgTWluaXBvcnRIYWx0IGZ1bmN0aW9uIGFmdGVyIHRoaXMgY2FsbCByZXR1cm5zLgorICAgICAgICAvLworICAgICAgICAvLworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiTVBQblBFdmVudE5vdGlmeTogTmRpc0RldmljZVBuUEV2ZW50U3RvcHBlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTmRpc0RldmljZVBuUEV2ZW50UG93ZXJQcm9maWxlQ2hhbmdlZDoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWZ0ZXIgaW5pdGlhbGl6aW5nIGEgbWluaXBvcnQgZHJpdmVyIGFuZCBhZnRlciBtaW5pcG9ydCBkcml2ZXIKKyAgICAgICAgLy8gcmVjZWl2ZXMgYW4gT0lEX1BOUF9TRVRfUE9XRVIgbm90aWZpY2F0aW9uIHRoYXQgc3BlY2lmaWVzCisgICAgICAgIC8vIGEgZGV2aWNlIHBvd2VyIHN0YXRlIG9mIE5kaXNEZXZpY2VTdGF0ZUQwICh0aGUgcG93ZXJlZC1vbiBzdGF0ZSksCisgICAgICAgIC8vIE5ESVMgY2FsbHMgdGhlIG1pbmlwb3J0J3MgTWluaXBvcnRQblBFdmVudE5vdGlmeSBmdW5jdGlvbiB3aXRoCisgICAgICAgIC8vIFBuUEV2ZW50IHNldCB0byBOZGlzRGV2aWNlUG5QRXZlbnRQb3dlclByb2ZpbGVDaGFuZ2VkLgorICAgICAgICAvLworICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiTVBEZXZpY2VQbnBFdmVudE5vdGlmeTogTmRpc0RldmljZVBuUEV2ZW50UG93ZXJQcm9maWxlQ2hhbmdlZCIpOworCisgICAgICAgIGlmIChOZXREZXZpY2VQblBFdmVudC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPT0gc2l6ZW9mKCBVTE9ORyApKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBVTE9ORyBOZGlzUG93ZXJQcm9maWxlID0gKigoY29uc3QgVUxPTkcgKilOZXREZXZpY2VQblBFdmVudC0+SW5mb3JtYXRpb25CdWZmZXIpOworCisgICAgICAgICAgICBpZiAoTmRpc1Bvd2VyUHJvZmlsZSA9PSBOZGlzUG93ZXJQcm9maWxlQmF0dGVyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiVGhlIGhvc3Qgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYmF0dGVyeSBwb3dlciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoTmRpc1Bvd2VyUHJvZmlsZSA9PSBOZGlzUG93ZXJQcm9maWxlQWNPbkxpbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nSW5mbyhEUklWRVJfREVGQVVMVCwgIlRoZSBob3N0IHN5c3RlbSBpcyBydW5uaW5nIG9uIEFDIHBvd2VyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk1QRGV2aWNlUG5wRXZlbnROb3RpZnk6IHVua25vd24gUG5QIGV2ZW50IDB4JXhcbiIsIE5ldERldmljZVBuUEV2ZW50LT5EZXZpY2VQblBFdmVudCk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RldmljZS5ocHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZGV2aWNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E5ZWYyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RldmljZS5ocHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBIZWFkZXIgZmlsZSBmb3IgdGhlIHJvdXRpbmVzIHJlbGF0ZWQgdG8gV0RGREVWSUNFIHJlcHJlc2VudGluZyB0aGUKKyAqICAgTmV0d29yayBBZGFwdGVyCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNkZWZpbmUgT1RUTVBfREVWSUNFX0NPTlRFWFRfU0lHTkFUVVJFICd2ZUR0JwordHlwZWRlZiBzdHJ1Y3QgX09UVE1QX0RFVklDRV9DT05URVhUIHsKKyAgICAvLworICAgIC8vIFNpZ25hdHVyZSBmb3IgU2FuaXR5IENoZWNrLgorICAgIC8vCisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7CisKKyAgICAvLworICAgIC8vIEhhbmRsZSB0byB0aGUgV0RGREVWSUNFIG9mIHdoaWNoIHRoaXMgaXMgdGhlIGNvbnRleHQKKyAgICAvLworICAgIFdERkRFVklDRSAgICAgICAgICAgICAgICAgRGV2aWNlOworCisgICAgLy8KKyAgICAvLyBQb2ludGVyIHRvIHRoZSBDb250ZXh0IG9mIHRoZSBjb3JyZXNwb25kaW5nIE5FVEFEQVBURVIgb2JqZWN0CisgICAgLy8KKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0OworCit9IE9UVE1QX0RFVklDRV9DT05URVhULCAqUE9UVE1QX0RFVklDRV9DT05URVhUOworCitXREZfREVDTEFSRV9DT05URVhUX1RZUEVfV0lUSF9OQU1FKE9UVE1QX0RFVklDRV9DT05URVhULCBHZXREZXZpY2VDb250ZXh0KTsKKworZXh0ZXJuICJDIiB7CisjaWZkZWYgT1RUTVBfTEVHQUNZCitQQUdFRCBNSU5JUE9SVF9JTklUSUFMSVpFICAgICAgICAgICAgICAgICAgICBNUEluaXRpYWxpemVFeDsKK1BBR0VEIE1JTklQT1JUX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSGFsdEV4OworTUlOSVBPUlRfU0hVVERPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBTaHV0ZG93bkV4OworUEFHRUQgTUlOSVBPUlRfREVWSUNFX1BOUF9FVkVOVF9OT1RJRlkgICAgICAgTVBEZXZpY2VQbnBFdmVudE5vdGlmeTsKKyNlbHNlCitQQUdFRCBFVlRfV0RGX0RSSVZFUl9ERVZJQ0VfQUREICAgICAgICAgICAgICBFdnREcml2ZXJEZXZpY2VBZGQ7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9EMF9FWElUICAgICAgICAgICAgICAgICBFdnREZXZpY2VEMEV4aXQ7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9QUkVQQVJFX0hBUkRXQVJFICAgICAgICBFdnREZXZpY2VQcmVwYXJlSGFyZHdhcmU7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9SRUxFQVNFX0hBUkRXQVJFICAgICAgICBFdnREZXZpY2VSZWxlYXNlSGFyZHdhcmU7CitQQUdFRCBFVlRfV0RGX0RFVklDRV9TRUxGX01BTkFHRURfSU9fSU5JVCAgICBFdnREZXZpY2VTZWxmTWFuYWdlZElvSW5pdDsKK1BBR0VEIEVWVF9XREZfREVWSUNFX1NFTEZfTUFOQUdFRF9JT19DTEVBTlVQIEV2dERldmljZVNlbGZNYW5hZ2VkSW9DbGVhbnVwOworRVZUX1dERl9ERVZJQ0VfRDBfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgRXZ0RGV2aWNlRDBFbnRyeTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RyaXZlci5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZHJpdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDhkZjgyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2RyaXZlci5jcHAKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBtb2R1bGUgaGFzIGNvZGUgdG8gZGVhbCB3aXRoIGxvYWRpbmcgYW5kIHVubG9hZGluZyBvZiB0aGUgZHJpdmVyIAorICovCisKKyNpbmNsdWRlICJwY2guaHBwIgorI2luY2x1ZGUgImRyaXZlci50bWgiCisKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKK3N0YXRpYyBHTE9CQUxTIEdsb2JhbERhdGEgPSB7IDAgfTsKKyNlbmRpZgorCitJTklUQ09ERQorZXh0ZXJuICJDIgorTlRTVEFUVVMKK0RyaXZlckVudHJ5ICgKKyAgICBfSW5fIFBEUklWRVJfT0JKRUNUICAgRHJpdmVyT2JqZWN0LAorICAgIF9Jbl8gUFVOSUNPREVfU1RSSU5HICBSZWdpc3RyeVBhdGgKKyAgICApCisvKisrCisKK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgRHJpdmVyRW50cnkgaW5pdGlhbGl6ZXMgdGhlIGRyaXZlciBhbmQgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIGJ5IHRoZQorICAgIHN5c3RlbSBhZnRlciB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gRHJpdmVyRW50cnkgc3BlY2lmaWVzIHRoZSBvdGhlciBlbnRyeQorICAgIHBvaW50cyBpbiB0aGUgZnVuY3Rpb24gZHJpdmVyLCBzdWNoIGFzIEV2dERldmljZSBhbmQgRHJpdmVyVW5sb2FkLgorCitQYXJhbWV0ZXJzIERlc2NyaXB0aW9uOgorCisgICAgRHJpdmVyT2JqZWN0IC0gcmVwcmVzZW50cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGZ1bmN0aW9uIGRyaXZlciB0aGF0IGlzIGxvYWRlZAorICAgIGludG8gbWVtb3J5LiBEcml2ZXJFbnRyeSBtdXN0IGluaXRpYWxpemUgbWVtYmVycyBvZiBEcml2ZXJPYmplY3QgYmVmb3JlIGl0CisgICAgcmV0dXJucyB0byB0aGUgY2FsbGVyLiBEcml2ZXJPYmplY3QgaXMgYWxsb2NhdGVkIGJ5IHRoZSBzeXN0ZW0gYmVmb3JlIHRoZQorICAgIGRyaXZlciBpcyBsb2FkZWQsIGFuZCBpdCBpcyByZWxlYXNlZCBieSB0aGUgc3lzdGVtIGFmdGVyIHRoZSBzeXN0ZW0gdW5sb2FkcworICAgIHRoZSBmdW5jdGlvbiBkcml2ZXIgZnJvbSBtZW1vcnkuCisKKyAgICBSZWdpc3RyeVBhdGggLSByZXByZXNlbnRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcGF0aCBpbiB0aGUgUmVnaXN0cnkuCisgICAgVGhlIGZ1bmN0aW9uIGRyaXZlciBjYW4gdXNlIHRoZSBwYXRoIHRvIHN0b3JlIGRyaXZlciByZWxhdGVkIGRhdGEgYmV0d2VlbgorICAgIHJlYm9vdHMuIFRoZSBwYXRoIGRvZXMgbm90IHN0b3JlIGhhcmR3YXJlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEuCisKK1JldHVybiBWYWx1ZToKKworICAgIEEgc3VjY2VzcyBzdGF0dXMgYXMgZGV0ZXJtaW5lZCBieSBOVF9TVUNDRVNTIG1hY3JvLCBpZiBzdWNjZXNzZnVsLiAKKyAKKy0tKi8KK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIFdERl9EUklWRVJfQ09ORklHICAgICAgICAgICAgICAgICAgICBjb25maWc7CisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgTkRJU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIG5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworICAgIE5ESVNfTUlOSVBPUlRfRFJJVkVSX0NIQVJBQ1RFUklTVElDUyBNUENoYXIgPSB7IDAgfTsKKyAgICBORVRfQlVGRkVSX0xJU1RfUE9PTF9QQVJBTUVURVJTICAgICAgTmJsUGFyYW1zID0geyAwIH07CisgICAgTkVUX0JVRkZFUl9QT09MX1BBUkFNRVRFUlMgICAgICAgICAgIE5iUGFyYW1zID0geyAwIH07CisjZW5kaWYKKworICAgIFdQUF9JTklUX1RSQUNJTkcoRHJpdmVyT2JqZWN0LCBSZWdpc3RyeVBhdGgpOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIC8vCisgICAgLy8gQ3JlYXRlIHRoZSBXZGZEcml2ZXIgT2JqZWN0IAorICAgIC8vCisgICAgV0RGX0RSSVZFUl9DT05GSUdfSU5JVCgmY29uZmlnLCBXREZfTk9fRVZFTlRfQ0FMTEJBQ0spOworCisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgLy8KKyAgICAvLyBTZXQgV2RmRHJpdmVySW5pdE5vRGlzcGF0Y2hPdmVycmlkZSBmbGFnIHRvIHRlbGwgdGhlIGZyYW1ld29yaworICAgIC8vIG5vdCB0byBwcm92aWRlIGRpc3BhdGNoIHJvdXRpbmVzIGZvciB0aGUgZHJpdmVyLiBJbiBvdGhlciB3b3JkcywKKyAgICAvLyB0aGUgZnJhbWV3b3JrIG11c3Qgbm90IGludGVyY2VwdCBJUlBzIHRoYXQgdGhlIEkvTyBtYW5hZ2VyIGhhcworICAgIC8vIGRpcmVjdGVkIHRvIHRoZSBkcml2ZXIuIEluIHRoaXMgY2FzZSwgaXQgd2lsbCBiZSBoYW5kbGVkIGJ5IE5ESVMKKyAgICAvLyBwb3J0IGRyaXZlci4KKyAgICAvLworICAgIGNvbmZpZy5Ecml2ZXJJbml0RmxhZ3MgfD0gV2RmRHJpdmVySW5pdE5vRGlzcGF0Y2hPdmVycmlkZTsKKyNlbHNlCisgICAgY29uZmlnLkV2dERyaXZlckRldmljZUFkZCA9IEV2dERyaXZlckRldmljZUFkZDsKKyAgICBjb25maWcuRXZ0RHJpdmVyVW5sb2FkID0gRXZ0RHJpdmVyVW5sb2FkOworI2VuZGlmCisKKyAgICBzdGF0dXMgPSBXZGZEcml2ZXJDcmVhdGUoRHJpdmVyT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RyeVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdERl9OT19PQkpFQ1RfQVRUUklCVVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmZpZywKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdsb2JhbERhdGEuV2RmRHJpdmVyCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiV2RmRHJpdmVyQ3JlYXRlIGZhaWxlZCwgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgCisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgTVBDaGFyLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9NSU5JUE9SVF9EUklWRVJfQ0hBUkFDVEVSSVNUSUNTOworICAgIE1QQ2hhci5IZWFkZXIuUmV2aXNpb24gPSBORElTX01JTklQT1JUX0RSSVZFUl9DSEFSQUNURVJJU1RJQ1NfUkVWSVNJT05fMjsKKyAgICBNUENoYXIuSGVhZGVyLlNpemUgPSBORElTX1NJWkVPRl9NSU5JUE9SVF9EUklWRVJfQ0hBUkFDVEVSSVNUSUNTX1JFVklTSU9OXzI7CisKKyAgICAvLyBWZXJzaW9uIFN1ZmYKKyAgICBNUENoYXIuTWFqb3JOZGlzVmVyc2lvbiA9IE5ESVNfTUlOSVBPUlRfTUFKT1JfVkVSU0lPTjsKKyAgICBNUENoYXIuTWlub3JOZGlzVmVyc2lvbiA9IE5ESVNfTUlOSVBPUlRfTUlOT1JfVkVSU0lPTjsKKyAgICBNUENoYXIuTWFqb3JEcml2ZXJWZXJzaW9uID0gTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTl9NQUpPUjsKKyAgICBNUENoYXIuTWlub3JEcml2ZXJWZXJzaW9uID0gTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTl9NSU5PUjsKKworICAgIE1QQ2hhci5Jbml0aWFsaXplSGFuZGxlckV4ID0gTVBJbml0aWFsaXplRXg7CisgICAgTVBDaGFyLkhhbHRIYW5kbGVyRXggPSBNUEhhbHRFeDsKKyAgICBNUENoYXIuVW5sb2FkSGFuZGxlciA9IE1QRHJpdmVyVW5sb2FkOworICAgIE1QQ2hhci5QYXVzZUhhbmRsZXIgPSBNUFBhdXNlOworICAgIE1QQ2hhci5SZXN0YXJ0SGFuZGxlciA9IE1QUmVzdGFydDsKKyAgICBNUENoYXIuT2lkUmVxdWVzdEhhbmRsZXIgPSBNUE9pZFJlcXVlc3Q7CisgICAgTVBDaGFyLlNlbmROZXRCdWZmZXJMaXN0c0hhbmRsZXIgPSBNUFNlbmROZXRCdWZmZXJMaXN0czsKKyAgICBNUENoYXIuUmV0dXJuTmV0QnVmZmVyTGlzdHNIYW5kbGVyID0gTVBSZXR1cm5OZXRCdWZmZXJMaXN0czsKKyAgICBNUENoYXIuQ2FuY2VsU2VuZEhhbmRsZXIgPSBNUENhbmNlbFNlbmQ7CisgICAgTVBDaGFyLkRldmljZVBuUEV2ZW50Tm90aWZ5SGFuZGxlciA9IE1QRGV2aWNlUG5wRXZlbnROb3RpZnk7CisgICAgTVBDaGFyLlNodXRkb3duSGFuZGxlckV4ID0gTVBTaHV0ZG93bkV4OworICAgIE1QQ2hhci5DYW5jZWxPaWRSZXF1ZXN0SGFuZGxlciA9IE1QQ2FuY2VsT2lkUmVxdWVzdDsKKworICAgIG5kaXNTdGF0dXMgPSBOZGlzTVJlZ2lzdGVyTWluaXBvcnREcml2ZXIoRHJpdmVyT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0cnlQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdsb2JhbERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTVBDaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdsb2JhbERhdGEuaERyaXZlcik7CisgICAgaWYgKG5kaXNTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTmRpc01SZWdpc3Rlck1pbmlwb3J0RHJpdmVyIGZhaWxlZCAlIU5ESVNfU1RBVFVTISIsIG5kaXNTdGF0dXMpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIE5ibFBhcmFtcy5IZWFkZXIuVHlwZSA9IE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVDsKKyAgICBOYmxQYXJhbXMuSGVhZGVyLlJldmlzaW9uID0gTkVUX0JVRkZFUl9MSVNUX1BPT0xfUEFSQU1FVEVSU19SRVZJU0lPTl8xOworICAgIE5ibFBhcmFtcy5IZWFkZXIuU2l6ZSA9IE5ESVNfU0laRU9GX05FVF9CVUZGRVJfTElTVF9QT09MX1BBUkFNRVRFUlNfUkVWSVNJT05fMTsKKyAgICBOYmxQYXJhbXMuUG9vbFRhZyA9IE5JQ19UQUdfUkVDVl9OQkw7CisgICAgR2xvYmFsRGF0YS5oTmJsUG9vbCA9IE5kaXNBbGxvY2F0ZU5ldEJ1ZmZlckxpc3RQb29sKEdsb2JhbERhdGEuaERyaXZlciwgJk5ibFBhcmFtcyk7CisgICAgaWYgKEdsb2JhbERhdGEuaE5ibFBvb2wgPT0gMCkKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiTmRpc0FsbG9jYXRlTmV0QnVmZmVyTGlzdFBvb2wgZmFpbGVkIik7CisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIE5iUGFyYW1zLkhlYWRlci5UeXBlID0gTkRJU19PQkpFQ1RfVFlQRV9ERUZBVUxUOworICAgIE5iUGFyYW1zLkhlYWRlci5SZXZpc2lvbiA9IE5FVF9CVUZGRVJfUE9PTF9QQVJBTUVURVJTX1JFVklTSU9OXzE7CisgICAgTmJQYXJhbXMuSGVhZGVyLlNpemUgPSBORElTX1NJWkVPRl9ORVRfQlVGRkVSX1BPT0xfUEFSQU1FVEVSU19SRVZJU0lPTl8xOworICAgIE5iUGFyYW1zLlBvb2xUYWcgPSBOSUNfVEFHX1JFQ1ZfTkJMOworICAgIE5iUGFyYW1zLkRhdGFTaXplID0gTUFYX1NQSU5FTF9DT01NQU5EX0xFTkdUSDsKKyAgICBHbG9iYWxEYXRhLmhOYlBvb2wgPSBOZGlzQWxsb2NhdGVOZXRCdWZmZXJQb29sKEdsb2JhbERhdGEuaERyaXZlciwgJk5iUGFyYW1zKTsKKyAgICBpZiAoR2xvYmFsRGF0YS5oTmJQb29sID09IDApCisgICAgeworICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk5kaXNBbGxvY2F0ZU5ldEJ1ZmZlckxpc3RQb29sIGZhaWxlZCIpOworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisjZW5kaWYKKworZXJyb3I6CisKKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgCisgICAgeworI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgICAgICBNUERyaXZlclVubG9hZChEcml2ZXJPYmplY3QpOworI2Vsc2UKKyAgICAgICAgV1BQX0NMRUFOVVAoRHJpdmVyT2JqZWN0KTsKKyNlbmRpZgorICAgIH0KKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2lmZGVmIE9UVE1QX0xFR0FDWQorCitQQUdFRAorX1VzZV9kZWNsX2Fubm90YXRpb25zXworVk9JRAorTVBEcml2ZXJVbmxvYWQoCisgICAgX0luXyBQRFJJVkVSX09CSkVDVCBEcml2ZXJPYmplY3QKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgTVBEcml2ZXJVbmxvYWQgd2lsbCBjbGVhbiB1cCB0aGUgV1BQIHJlc291cmNlcyB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAgICBmb3IgdGhpcyBkcml2ZXIuCisKK0FyZ3VtZW50czoKKworICAgIERyaXZlck9iamVjdCAtIEhhbmRsZSB0byBhIGZyYW1ld29yayBkcml2ZXIgb2JqZWN0IGNyZWF0ZWQgaW4gRHJpdmVyRW50cnkKKworLS0qLworeworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBpZiAoR2xvYmFsRGF0YS5XZGZEcml2ZXIpCisgICAgeworICAgICAgICBOVF9BU1NFUlQoR2xvYmFsRGF0YS5XZGZEcml2ZXIgPT0gV2RmR2V0RHJpdmVyKCkpOworICAgICAgICBXZGZEcml2ZXJNaW5pcG9ydFVubG9hZChHbG9iYWxEYXRhLldkZkRyaXZlcik7CisgICAgICAgIEdsb2JhbERhdGEuV2RmRHJpdmVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoR2xvYmFsRGF0YS5oTmJsUG9vbCkKKyAgICB7CisgICAgICAgIE5kaXNGcmVlTmV0QnVmZmVyTGlzdFBvb2woR2xvYmFsRGF0YS5oTmJsUG9vbCk7CisgICAgICAgIEdsb2JhbERhdGEuaE5ibFBvb2wgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChHbG9iYWxEYXRhLmhEcml2ZXIpCisgICAgeworICAgICAgICBOZGlzTURlcmVnaXN0ZXJNaW5pcG9ydERyaXZlcihHbG9iYWxEYXRhLmhEcml2ZXIpOworICAgICAgICBHbG9iYWxEYXRhLmhEcml2ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKKworI3ByYWdtYSB3YXJuaW5nKHN1cHByZXNzOiAyNTAyNCkgLy8gRGFuZ2Vyb3VzIGNhc3QKKyAgICBXUFBfQ0xFQU5VUChEcml2ZXJPYmplY3QpOworfQorCisjZWxzZQorCitQQUdFRAorVk9JRAorRXZ0RHJpdmVyVW5sb2FkKAorICAgIFdERkRSSVZFUiBEcml2ZXIKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgRXZ0RHJpdmVyVW5sb2FkIHdpbGwgY2xlYW4gdXAgdGhlIFdQUCByZXNvdXJjZXMgdGhhdCB3YXMgYWxsb2NhdGVkCisgICAgZm9yIHRoaXMgZHJpdmVyLgorCitBcmd1bWVudHM6CisKKyAgICBEcml2ZXIgLSBIYW5kbGUgdG8gYSBmcmFtZXdvcmsgZHJpdmVyIG9iamVjdCBjcmVhdGVkIGluIERyaXZlckVudHJ5CisKKy0tKi8KK3sKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworICAgIFdQUF9DTEVBTlVQKFdkZkRyaXZlcldkbUdldERyaXZlck9iamVjdChEcml2ZXIpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZHJpdmVyLmhwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9kcml2ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2M2U2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvZHJpdmVyLmhwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIEhlYWRlciBmaWxlIGZvciB0aGUgRHJpdmVyIExvYWQgLyBVbmxvYWQgcm91dGluZXMKKyAqLworCisjcHJhZ21hIG9uY2UKKworZXh0ZXJuICJDIiB7CitEUklWRVJfSU5JVElBTElaRSBEcml2ZXJFbnRyeTsKK30KKworI2lmZGVmIE9UVE1QX0xFR0FDWQorUEFHRUQgTUlOSVBPUlRfVU5MT0FEIE1QRHJpdmVyVW5sb2FkOworCit0eXBlZGVmIHN0cnVjdCBfR0xPQkFMUworeworICAgIFdERkRSSVZFUiAgICAgICAgV2RmRHJpdmVyOworICAgIE5ESVNfSEFORExFICAgICAgaERyaXZlcjsKKyAgICBORElTX0hBTkRMRSAgICAgIGhOYmxQb29sOworICAgIE5ESVNfSEFORExFICAgICAgaE5iUG9vbDsKK30gR0xPQkFMUywgKlBHTE9CQUxTOworI2Vsc2UKK1BBR0VEIEVWVF9XREZfRFJJVkVSX1VOTE9BRCBFdnREcml2ZXJVbmxvYWQ7CisjZW5kaWYKKworLy8KKy8vIE93biBWZXJzaW9uCisvLworI2RlZmluZSBOSUNfVkVORE9SX0RSSVZFUl9WRVJTSU9OX01BSk9SICAxCisjZGVmaW5lIE5JQ19WRU5ET1JfRFJJVkVSX1ZFUlNJT05fTUlOT1IgIDAKKyNkZWZpbmUgTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTiAoKE5JQ19WRU5ET1JfRFJJVkVSX1ZFUlNJT05fTUFKT1IgPDwgMTYpIHwgTklDX1ZFTkRPUl9EUklWRVJfVkVSU0lPTl9NSU5PUikKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9oYXJkd2FyZS5ocHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGFyZHdhcmUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZGYzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGFyZHdhcmUuaHBwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgbW9kdWxlIGRlZmluZXMgY29uc3RhbnRzIHRoYXQgZGVzY3JpYmUgcGh5c2ljYWwgY2hhcmFjdGVyaXN0aWNzIGFuZAorICogICBsaW1pdHMgb2YgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZm5kZWYgSUZfVFlQRV9JRUVFODAyMTU0CisjZGVmaW5lIElGX1RZUEVfSUVFRTgwMjE1NCAgICAgICAgICAgICAgICAgIDI1OSAvLyBJRUVFIDgwMi4xNS40IFdQQU4gaW50ZXJmYWNlCisjZGVmaW5lIE5kaXNQaHlzaWNhbE1lZGl1bU5hdGl2ZTgwMl8xNV80ICAgIChORElTX1BIWVNJQ0FMX01FRElVTSkyMAorI2VuZGlmCisKKy8vCisvLyBMaW5rIGxheWVyIGFkZHJlc3NpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworCisvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gYSBoYXJkd2FyZSBhZGRyZXNzLiAgODAyLjE1LjQgdXNlcyA4IGJ5dGUgYWRkcmVzc2VzLgorI2RlZmluZSBOSUNfTUFDQUREUl9TSVpFICAgICAgICAgICAgICAgICAgIDgKKworLy8KKy8vIEZyYW1lcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisKKyNkZWZpbmUgSFdfTUFYX0ZSQU1FX1NJWkUgICAgICAgICAgICAgICAgICAxMjgwCisKKy8vCisvLyBNZWRpdW0gcHJvcGVydGllcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisKKyNkZWZpbmUgTklDX01FRElVTV9UWVBFICAgICAgICAgICAgICAgICAgICBOZGlzTWVkaXVtSVAKKworLy8gQ2xhaW0gdG8gYmUgMjUwa2JwcyBkdXBsZXgKKyNkZWZpbmUgS0lMT0JJVFNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAxMDAwVUxMCisjZGVmaW5lIE1FR0FCSVRTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgMTAwMDAwMFVMTAorI2RlZmluZSBOSUNfUkVDVl9YTUlUX1NQRUVEICAgICAgICAgICAgICAgICgyNTBVTEwqS0lMT0JJVFNfUEVSX1NFQ09ORCkKKworLy8KKy8vIEhhcmR3YXJlIGxpbWl0cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisKKy8vIE1heCBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUKKyNkZWZpbmUgTklDX01BWF9NQ0FTVF9MSVNUICAgICAgICAgICAgICAgICAzMgorCisvLyBNYXhpbXVtIG51bWJlciBvZiB1bmNvbXBsZXRlZCBzZW5kcyB0aGF0IGEgc2luZ2xlIGFkYXB0ZXIgd2lsbCBwZXJtaXQKKyNkZWZpbmUgTklDX01BWF9CVVNZX1NFTkRTICAgICAgICAgICAgICAgICAxMDI0CisKKy8vIE1heGltdW0gbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgdGhhdCBjYW4gYmUgaW4gdGhlIE9TIGF0IGFueSB0aW1lCisvLyAoQWxzbyBrbm93biBhcyB0aGUgcmVjZWl2ZSBwb29sIHNpemUpCisjZGVmaW5lIE5JQ19NQVhfT1VUU1RBTkRJTkdfUkVDRUlWRVMgICAgICAgMzIKKworCisvLworLy8gUGh5c2ljYWwgYWRhcHRlciBwcm9wZXJ0aWVzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKworLy8gQ2hhbmdlIHRvIHlvdXIgY29tcGFueSBuYW1lIGluc3RlYWQgb2YgdXNpbmcgT3BlblRocmVhZAorI2RlZmluZSBOSUNfVkVORE9SX0RFU0MgICAgICAgICAgICAgICAgICAgICJPcGVuVGhyZWFkIgorCisvLyBIaWdoZXN0IGJ5dGUgaXMgdGhlIE5JQyBieXRlIHBsdXMgdGhyZWUgdmVuZG9yIGJ5dGVzLiBUaGlzIGlzIG5vcm1hbGx5CisvLyBvYnRhaW5lZCBmcm9tIHRoZSBOSUMuCisjZGVmaW5lIE5JQ19WRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorCisjaWZkZWYgT1RUTVBfTEVHQUNZCisjZGVmaW5lIE5JQ19TVVBQT1JURURfRklMVEVSUyAoIFwKKyAgICAgICAgICAgICAgICBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICAgIHwgXAorICAgICAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICB8IFwKKyAgICAgICAgICAgICAgICBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTIHwgXAorICAgICAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkKKyNlbHNlCisjZGVmaW5lIE5JQ19TVVBQT1JURURfRklMVEVSUyAoTkVUX1BBQ0tFVF9GSUxURVJfVFlQRVNfRkxBR1MpICggXAorICAgICAgICAgICAgICAgIE5FVF9QQUNLRVRfRklMVEVSX1RZUEVfRElSRUNURUQgICB8IFwKKyAgICAgICAgICAgICAgICBORVRfUEFDS0VUX0ZJTFRFUl9UWVBFX01VTFRJQ0FTVCAgfCBcCisgICAgICAgICAgICAgICAgTkVUX1BBQ0tFVF9GSUxURVJfVFlQRV9CUk9BRENBU1QgIHwgXAorICAgICAgICAgICAgICAgIE5FVF9QQUNLRVRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVMgfCBcCisgICAgICAgICAgICAgICAgTkVUX1BBQ0tFVF9GSUxURVJfVFlQRV9BTExfTVVMVElDQVNUKQorI2VuZGlmCisKKy8vCisvLyBTcGVjaWZ5IGEgYml0bWFzayB0aGF0IGRlZmluZXMgb3B0aW9uYWwgcHJvcGVydGllcyBvZiB0aGUgTklDLgorLy8gVGhpcyBtaW5pcG9ydCBpbmRpY2F0ZXMgcmVjZWl2ZSB3aXRoIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMKKy8vIGZ1bmN0aW9uLiAgU3VjaCBhIGRyaXZlciBzaG91bGQgc2V0IHRoaXMgTkRJU19NQUNfT1BUSU9OX1RSQU5TRkVSU19OT1RfUEVORAorLy8gZmxhZy4KKy8vCisvLyBORElTX01BQ19PUFRJT05fTk9fTE9PUEJBQ0sgdGVsbHMgTkRJUyB0aGF0IE5JQyBoYXMgbm8gaW50ZXJuYWwKKy8vIGxvb3BiYWNrIHN1cHBvcnQgc28gTkRJUyB3aWxsIG1hbmFnZSBsb29wYmFja3Mgb24gYmVoYWxmIG9mCisvLyB0aGlzIGRyaXZlci4KKy8vCisvLyBORElTX01BQ19PUFRJT05fQ09QWV9MT09LQUhFQURfREFUQSB0ZWxscyB0aGUgcHJvdG9jb2wgdGhhdAorLy8gb3VyIHJlY2VpdmUgYnVmZmVyIGlzIG5vdCBvbiBhIGRldmljZS1zcGVjaWZpYyBjYXJkLiBJZgorLy8gTkRJU19NQUNfT1BUSU9OX0NPUFlfTE9PS0FIRUFEX0RBVEEgaXMgbm90IHNldCwgbXVsdGktYnVmZmVyCisvLyBpbmRpY2F0aW9ucyBhcmUgY29waWVkIHRvIGEgc2luZ2xlIGZsYXQgYnVmZmVyLgorLy8KKyNkZWZpbmUgTklDX01BQ19PUFRJT05TIChcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OX0NPUFlfTE9PS0FIRUFEX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OX1RSQU5TRkVSU19OT1RfUEVORCAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OX05PX0xPT1BCQUNLICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OXzgwMjFQX1BSSU9SSVRZICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19NQUNfT1BUSU9OXzgwMjFRX1ZMQU4pCisKKy8vIE5ESVMgNi54IG1pbmlwb3J0cyBtdXN0IHN1cHBvcnQgYWxsIGNvdW50ZXJzIGluIE9JRF9HRU5fU1RBVElTVElDUy4KKyNkZWZpbmUgTklDX1NVUFBPUlRFRF9TVEFUSVNUSUNTIChcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9GUkFNRVNfUkNWICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JZVEVTX1JDViAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1JDVl9ESVNDQVJEUyAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1JDVl9FUlJPUiAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JZVEVTX1hNSVQgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1hNSVRfRVJST1IgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX1hNSVRfRElTQ0FSRFMgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9CWVRFU19SQ1YgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX01VTFRJQ0FTVF9CWVRFU19YTUlUICAgfCBcCisgICAgICAgICAgICAgICAgTkRJU19TVEFUSVNUSUNTX0ZMQUdTX1ZBTElEX0JST0FEQ0FTVF9CWVRFU19YTUlUKQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2hkbGMuY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL2hkbGMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZGM5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGRsYy5jcHAKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYW4gSERMQy1saXRlIGVuY29kZXIgYW5kIGRlY29kZXIuCisgKi8KKworI2luY2x1ZGUgInBjaC5ocHAiCisjaW5jbHVkZSAiaGRsYy50bWgiCisKKy8qKgorICogRkNTIGxvb2t1cCB0YWJsZQorICovCitlbnVtCit7CisgICAga0luaXRGY3MgPSAweGZmZmYsICAvLy88IEluaXRpYWwgRkNTIHZhbHVlLgorICAgIGtHb29kRmNzID0gMHhmMGI4LCAgLy8vPCBHb29kIEZDUyB2YWx1ZS4KK307CisKK3N0YXRpYyBib29sCitoZGxjX2J5dGVfbmVlZHNfZXNjYXBlKFVDSEFSIGJ5dGUpCit7CisgICAgc3dpdGNoIChieXRlKSAKKyAgICB7CisgICAgY2FzZSBIZGxjWE9uOgorICAgIGNhc2UgSGRsY1hPZmY6CisgICAgY2FzZSBIZGxjRXNjYXBlU2VxdWVuY2U6CisgICAgY2FzZSBIZGxjRmxhZ1NlcXVlbmNlOgorICAgIGNhc2UgSGRsY1NwZWNpYWw6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLyoqCisgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIGFuIEZDUy4KKyAqCisgKiBAcGFyYW1baW5dICBhRmNzICAgVGhlIEZDUyB0byB1cGRhdGUuCisgKiBAcGFyYW1baW5dICBhQnl0ZSAgVGhlIGlucHV0IGJ5dGUgdmFsdWUuCisgKgorICogQHJldHVybnMgVGhlIHVwZGF0ZWQgRkNTLgorICovCitVU0hPUlQgVXBkYXRlRmNzKFVTSE9SVCBhRmNzLCBVQ0hBUiBhQnl0ZSkKK3sKKyAgICBjb25zdCBVU0hPUlQgc0Zjc1RhYmxlWzI1Nl0gPQorICAgIHsKKyAgICAgICAgMHgwMDAwLCAweDExODksIDB4MjMxMiwgMHgzMjliLCAweDQ2MjQsIDB4NTdhZCwgMHg2NTM2LCAweDc0YmYsCisgICAgICAgIDB4OGM0OCwgMHg5ZGMxLCAweGFmNWEsIDB4YmVkMywgMHhjYTZjLCAweGRiZTUsIDB4ZTk3ZSwgMHhmOGY3LAorICAgICAgICAweDEwODEsIDB4MDEwOCwgMHgzMzkzLCAweDIyMWEsIDB4NTZhNSwgMHg0NzJjLCAweDc1YjcsIDB4NjQzZSwKKyAgICAgICAgMHg5Y2M5LCAweDhkNDAsIDB4YmZkYiwgMHhhZTUyLCAweGRhZWQsIDB4Y2I2NCwgMHhmOWZmLCAweGU4NzYsCisgICAgICAgIDB4MjEwMiwgMHgzMDhiLCAweDAyMTAsIDB4MTM5OSwgMHg2NzI2LCAweDc2YWYsIDB4NDQzNCwgMHg1NWJkLAorICAgICAgICAweGFkNGEsIDB4YmNjMywgMHg4ZTU4LCAweDlmZDEsIDB4ZWI2ZSwgMHhmYWU3LCAweGM4N2MsIDB4ZDlmNSwKKyAgICAgICAgMHgzMTgzLCAweDIwMGEsIDB4MTI5MSwgMHgwMzE4LCAweDc3YTcsIDB4NjYyZSwgMHg1NGI1LCAweDQ1M2MsCisgICAgICAgIDB4YmRjYiwgMHhhYzQyLCAweDllZDksIDB4OGY1MCwgMHhmYmVmLCAweGVhNjYsIDB4ZDhmZCwgMHhjOTc0LAorICAgICAgICAweDQyMDQsIDB4NTM4ZCwgMHg2MTE2LCAweDcwOWYsIDB4MDQyMCwgMHgxNWE5LCAweDI3MzIsIDB4MzZiYiwKKyAgICAgICAgMHhjZTRjLCAweGRmYzUsIDB4ZWQ1ZSwgMHhmY2Q3LCAweDg4NjgsIDB4OTllMSwgMHhhYjdhLCAweGJhZjMsCisgICAgICAgIDB4NTI4NSwgMHg0MzBjLCAweDcxOTcsIDB4NjAxZSwgMHgxNGExLCAweDA1MjgsIDB4MzdiMywgMHgyNjNhLAorICAgICAgICAweGRlY2QsIDB4Y2Y0NCwgMHhmZGRmLCAweGVjNTYsIDB4OThlOSwgMHg4OTYwLCAweGJiZmIsIDB4YWE3MiwKKyAgICAgICAgMHg2MzA2LCAweDcyOGYsIDB4NDAxNCwgMHg1MTlkLCAweDI1MjIsIDB4MzRhYiwgMHgwNjMwLCAweDE3YjksCisgICAgICAgIDB4ZWY0ZSwgMHhmZWM3LCAweGNjNWMsIDB4ZGRkNSwgMHhhOTZhLCAweGI4ZTMsIDB4OGE3OCwgMHg5YmYxLAorICAgICAgICAweDczODcsIDB4NjIwZSwgMHg1MDk1LCAweDQxMWMsIDB4MzVhMywgMHgyNDJhLCAweDE2YjEsIDB4MDczOCwKKyAgICAgICAgMHhmZmNmLCAweGVlNDYsIDB4ZGNkZCwgMHhjZDU0LCAweGI5ZWIsIDB4YTg2MiwgMHg5YWY5LCAweDhiNzAsCisgICAgICAgIDB4ODQwOCwgMHg5NTgxLCAweGE3MWEsIDB4YjY5MywgMHhjMjJjLCAweGQzYTUsIDB4ZTEzZSwgMHhmMGI3LAorICAgICAgICAweDA4NDAsIDB4MTljOSwgMHgyYjUyLCAweDNhZGIsIDB4NGU2NCwgMHg1ZmVkLCAweDZkNzYsIDB4N2NmZiwKKyAgICAgICAgMHg5NDg5LCAweDg1MDAsIDB4Yjc5YiwgMHhhNjEyLCAweGQyYWQsIDB4YzMyNCwgMHhmMWJmLCAweGUwMzYsCisgICAgICAgIDB4MThjMSwgMHgwOTQ4LCAweDNiZDMsIDB4MmE1YSwgMHg1ZWU1LCAweDRmNmMsIDB4N2RmNywgMHg2YzdlLAorICAgICAgICAweGE1MGEsIDB4YjQ4MywgMHg4NjE4LCAweDk3OTEsIDB4ZTMyZSwgMHhmMmE3LCAweGMwM2MsIDB4ZDFiNSwKKyAgICAgICAgMHgyOTQyLCAweDM4Y2IsIDB4MGE1MCwgMHgxYmQ5LCAweDZmNjYsIDB4N2VlZiwgMHg0Yzc0LCAweDVkZmQsCisgICAgICAgIDB4YjU4YiwgMHhhNDAyLCAweDk2OTksIDB4ODcxMCwgMHhmM2FmLCAweGUyMjYsIDB4ZDBiZCwgMHhjMTM0LAorICAgICAgICAweDM5YzMsIDB4Mjg0YSwgMHgxYWQxLCAweDBiNTgsIDB4N2ZlNywgMHg2ZTZlLCAweDVjZjUsIDB4NGQ3YywKKyAgICAgICAgMHhjNjBjLCAweGQ3ODUsIDB4ZTUxZSwgMHhmNDk3LCAweDgwMjgsIDB4OTFhMSwgMHhhMzNhLCAweGIyYjMsCisgICAgICAgIDB4NGE0NCwgMHg1YmNkLCAweDY5NTYsIDB4NzhkZiwgMHgwYzYwLCAweDFkZTksIDB4MmY3MiwgMHgzZWZiLAorICAgICAgICAweGQ2OGQsIDB4YzcwNCwgMHhmNTlmLCAweGU0MTYsIDB4OTBhOSwgMHg4MTIwLCAweGIzYmIsIDB4YTIzMiwKKyAgICAgICAgMHg1YWM1LCAweDRiNGMsIDB4NzlkNywgMHg2ODVlLCAweDFjZTEsIDB4MGQ2OCwgMHgzZmYzLCAweDJlN2EsCisgICAgICAgIDB4ZTcwZSwgMHhmNjg3LCAweGM0MWMsIDB4ZDU5NSwgMHhhMTJhLCAweGIwYTMsIDB4ODIzOCwgMHg5M2IxLAorICAgICAgICAweDZiNDYsIDB4N2FjZiwgMHg0ODU0LCAweDU5ZGQsIDB4MmQ2MiwgMHgzY2ViLCAweDBlNzAsIDB4MWZmOSwKKyAgICAgICAgMHhmNzhmLCAweGU2MDYsIDB4ZDQ5ZCwgMHhjNTE0LCAweGIxYWIsIDB4YTAyMiwgMHg5MmI5LCAweDgzMzAsCisgICAgICAgIDB4N2JjNywgMHg2YTRlLCAweDU4ZDUsIDB4NDk1YywgMHgzZGUzLCAweDJjNmEsIDB4MWVmMSwgMHgwZjc4CisgICAgfTsKKyAgICByZXR1cm4gKGFGY3MgPj4gOCkgXiBzRmNzVGFibGVbKGFGY3MgXiBhQnl0ZSkgJiAweGZmXTsKK30KKworVUxPTkcKK0hkbGNDb21wdXRlRW5jb2RlZEJ5dGVMZW5ndGgoCisgICAgX0luXyBVQ0hBUiAgICAgICAgICBhQnl0ZQorICAgICkKK3sKKyAgICByZXR1cm4gaGRsY19ieXRlX25lZWRzX2VzY2FwZShhQnl0ZSkgPyAyIDogMTsKK30KKworVUxPTkcKK0hkbGNDb21wdXRlRW5jb2RlZExlbmd0aCgKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKERlY29kZWRCdWZmZXJMZW5ndGgpIAorICAgICAgICAgUFVDSEFSICAgICAgICAgRGVjb2RlZEJ1ZmZlciwKKyAgICBfSW5fIFVMT05HICAgICAgICAgIERlY29kZWRCdWZmZXJMZW5ndGgKKyAgICApCit7CisgICAgVVNIT1JUIEZjcyA9IGtJbml0RmNzOworICAgIFVMT05HIExlbmd0aCA9IDI7IC8vIFN0YXJ0IGFuZCBlbmQgc2VxdWVuY2UKKyAgICAKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgRGVjb2RlZEJ1ZmZlckxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgTGVuZ3RoICs9IEhkbGNDb21wdXRlRW5jb2RlZEJ5dGVMZW5ndGgoRGVjb2RlZEJ1ZmZlcltpXSk7CisgICAgICAgIEZjcyA9IFVwZGF0ZUZjcyhGY3MsIERlY29kZWRCdWZmZXJbaV0pOworICAgIH0KKyAgICAKKyAgICBGY3MgXj0gMHhmZmZmOworICAgIAorICAgIExlbmd0aCArPSBIZGxjQ29tcHV0ZUVuY29kZWRCeXRlTGVuZ3RoKEZjcyAmIDB4ZmYpOworICAgIExlbmd0aCArPSBIZGxjQ29tcHV0ZUVuY29kZWRCeXRlTGVuZ3RoKEZjcyA+PiA4KTsKKworICAgIHJldHVybiBMZW5ndGg7Cit9CisKK2Jvb2wKK0hkbGNFbmNvZGVCeXRlKAorICAgIF9Jbl8gICAgVUNIQVIgICAgICAgYUJ5dGUsCisgICAgX0lub3V0XyBVTE9ORyYgICAgICBPZmZzZXQsCisgICAgX0luXyAgICBVTE9ORyAgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXyhFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgIEVuY29kZWRCdWZmZXIKKyAgICApCit7CisgICAgaWYgKGhkbGNfYnl0ZV9uZWVkc19lc2NhcGUoYUJ5dGUpKQorICAgIHsKKyAgICAgICAgaWYgKE9mZnNldCArIDIgPiBFbmNvZGVkQnVmZmVyTGVuZ3RoKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgRW5jb2RlZEJ1ZmZlcltPZmZzZXQrK10gPSBIZGxjRXNjYXBlU2VxdWVuY2U7CisgICAgICAgIEVuY29kZWRCdWZmZXJbT2Zmc2V0KytdID0gKGFCeXRlIF4gMHgyMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChPZmZzZXQgKyAxID4gRW5jb2RlZEJ1ZmZlckxlbmd0aCkgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEVuY29kZWRCdWZmZXJbT2Zmc2V0KytdID0gYUJ5dGU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK19TdWNjZXNzXyhyZXR1cm4gPT0gdHJ1ZSkKK2Jvb2wKK0hkbGNFbmNvZGVCdWZmZXIoCisgICAgX0luX3JlYWRzX2J5dGVzXyhEZWNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIERlY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBEZWNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXyhFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIEVuY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoCisgICAgKQoreworICAgIFVTSE9SVCBGY3MgPSBrSW5pdEZjczsKKyAgICBVTE9ORyBPZmZzZXQgPSAwOworICAgIGJvb2wgQ29tcGxldGUgPSBmYWxzZTsKKworICAgIGlmIChPZmZzZXQgKyAxID4gRW5jb2RlZEJ1ZmZlckxlbmd0aCkgZ290byBlcnJvcjsKKyAgICBFbmNvZGVkQnVmZmVyW09mZnNldCsrXSA9IEhkbGNGbGFnU2VxdWVuY2U7CisKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgRGVjb2RlZEJ1ZmZlckxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgVUNIQVIgYUJ5dGUgPSBEZWNvZGVkQnVmZmVyW2ldOworCisgICAgICAgIGlmICghSGRsY0VuY29kZUJ5dGUoYUJ5dGUsIE9mZnNldCwgRW5jb2RlZEJ1ZmZlckxlbmd0aCwgRW5jb2RlZEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBGY3MgPSBVcGRhdGVGY3MoRmNzLCBhQnl0ZSk7CisgICAgfQorICAgIAorICAgIEZjcyBePSAweGZmZmY7CisgICAgCisgICAgaWYgKCFIZGxjRW5jb2RlQnl0ZShGY3MgJiAweGZmLCBPZmZzZXQsIEVuY29kZWRCdWZmZXJMZW5ndGgsIEVuY29kZWRCdWZmZXIpIHx8CisgICAgICAgICFIZGxjRW5jb2RlQnl0ZShGY3MgPj4gOCwgICBPZmZzZXQsIEVuY29kZWRCdWZmZXJMZW5ndGgsIEVuY29kZWRCdWZmZXIpKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIAorICAgIGlmIChPZmZzZXQgKyAxID4gRW5jb2RlZEJ1ZmZlckxlbmd0aCkgZ290byBlcnJvcjsKKyAgICBFbmNvZGVkQnVmZmVyW09mZnNldCsrXSA9IEhkbGNGbGFnU2VxdWVuY2U7CisKKyAgICBOVF9BU1NFUlQoT2Zmc2V0ID09IEVuY29kZWRCdWZmZXJMZW5ndGgpOworICAgIENvbXBsZXRlID0gdHJ1ZTsKKworZXJyb3I6CisKKyAgICByZXR1cm4gQ29tcGxldGU7Cit9CisKK2VudW0gSGRsY0RlY29kZVN0YXRlCit7CisgICAga1N0YXRlTm9TeW5jID0gMCwKKyAgICBrU3RhdGVTeW5jLAorICAgIGtTdGF0ZUVzY2FwZWQsCit9OworCitfU3VjY2Vzc18ocmV0dXJuID09IHRydWUpCitib29sCitIZGxjRGVjb2RlQnVmZmVyKAorICAgIF9Jbl9yZWFkc19ieXRlc18oKkVuY29kZWRCdWZmZXJMZW5ndGgpIAorICAgICAgICAgICAgUFVDSEFSICAgICAgRW5jb2RlZEJ1ZmZlciwKKyAgICBfSW5vdXRfIFBVTE9ORyAgICAgIEVuY29kZWRCdWZmZXJMZW5ndGgsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICBEZWNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzX29wdF8oKkRlY29kZWRCdWZmZXJMZW5ndGgpIAorICAgICAgICAgICAgUFVDSEFSICAgICAgRGVjb2RlZEJ1ZmZlciwKKyAgICBfT3V0XyAgIGJvb2wqICAgICAgIElzR29vZAorICAgICkKK3sKKyAgICBVQ0hBUiBieXRlOworICAgIEhkbGNEZWNvZGVTdGF0ZSBzdGF0ZSA9IGtTdGF0ZU5vU3luYzsKKyAgICBVTE9ORyBEZWNvZGVkTGVuZ3RoID0gMDsKKyAgICBVU0hPUlQgRmNzID0ga0luaXRGY3M7CisKKyAgICBmb3IgKFVMT05HIGkgPSAwOyBpIDwgKkVuY29kZWRCdWZmZXJMZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGJ5dGUgPSBFbmNvZGVkQnVmZmVyW2ldOworCisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Uga1N0YXRlTm9TeW5jOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChieXRlID09IEhkbGNGbGFnU2VxdWVuY2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCBmb3IganVuayBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICpFbmNvZGVkQnVmZmVyTGVuZ3RoID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQgJ0lzR29vZCcgZmxhZyBiYXNlZCBvbiBGQ1MKKyAgICAgICAgICAgICAgICAgICAgICAgICpJc0dvb2QgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGtTdGF0ZVN5bmM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIGtTdGF0ZVN5bmM6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChieXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBIZGxjRXNjYXBlU2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0ga1N0YXRlRXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSGRsY0ZsYWdTZXF1ZW5jZToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgd2Fzbid0IGVub3VnaCBidWZmZXIgdG8gYmUgYSBjb21wbGV0ZSBzZXF1ZW5jZSwgbWF5YmUgd2UgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY3R1YWxseSBiZXR3ZWVuIHNlcXVlbmNlcy4gTGVhdmUgdGhlIHRyYWlsaW5nIGVzY2FwZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IHNpemVvZihVU0hPUlQpICsgMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCBlbmNvZGVkIGJ1ZmZlciBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRW5jb2RlZEJ1ZmZlckxlbmd0aCA9IGk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSXNHb29kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQgZW5jb2RlZCBidWZmZXIgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkVuY29kZWRCdWZmZXJMZW5ndGggPSBpICsgMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGVjb2RlZCBidWZmZXIgbGVuZ3RoIChzdWJ0cmFjdCAyIGZvciB0aGUgRkNTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpEZWNvZGVkQnVmZmVyTGVuZ3RoID0gRGVjb2RlZExlbmd0aCAtIDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCAnSXNHb29kJyBmbGFnIGJhc2VkIG9uIEZDUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJc0dvb2QgPSAoRmNzID09IGtHb29kRmNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRmNzID0gVXBkYXRlRmNzKEZjcywgYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVkTGVuZ3RoKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGVjb2RlZEJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKkRlY29kZWRCdWZmZXJMZW5ndGggPj0gRGVjb2RlZExlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZWRCdWZmZXJbRGVjb2RlZExlbmd0aCAtIDFdID0gYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Uga1N0YXRlRXNjYXBlZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCAqRW5jb2RlZEJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJ5dGUgXj0gMHgyMDsKKyAgICAgICAgICAgICAgICAgICAgRmNzID0gVXBkYXRlRmNzKEZjcywgYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgIERlY29kZWRMZW5ndGgrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlY29kZWRCdWZmZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqRGVjb2RlZEJ1ZmZlckxlbmd0aCA+PSBEZWNvZGVkTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZWRCdWZmZXJbRGVjb2RlZExlbmd0aCAtIDFdID0gYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0ga1N0YXRlU3luYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90IGVub3VnaCBidWZmZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGRsYy5ocHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvaGRsYy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3MzM5NAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9oZGxjLmhwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgYW4gSERMQy1saXRlIGVuY29kZXIgYW5kIGRlY29kZXIuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK2VudW0KK3sKKyAgICBIZGxjWE9uICAgICAgICAgICAgPSAweDExLAorICAgIEhkbGNYT2ZmICAgICAgICAgICA9IDB4MTMsCisgICAgSGRsY0ZsYWdTZXF1ZW5jZSAgID0gMHg3ZSwgIC8vLzwgSERMQyBGbGFnIHZhbHVlCisgICAgSGRsY0VzY2FwZVNlcXVlbmNlID0gMHg3ZCwgIC8vLzwgSERMQyBFc2NhcGUgdmFsdWUKKyAgICBIZGxjU3BlY2lhbCAgICAgICAgPSAweEY4Cit9OworCitVTE9ORworSGRsY0NvbXB1dGVFbmNvZGVkTGVuZ3RoKAorICAgIF9Jbl9yZWFkc19ieXRlc18oRGVjb2RlZEJ1ZmZlckxlbmd0aCkgCisgICAgICAgICBQVUNIQVIgICAgICAgICBEZWNvZGVkQnVmZmVyLAorICAgIF9Jbl8gVUxPTkcgICAgICAgICAgRGVjb2RlZEJ1ZmZlckxlbmd0aAorICAgICk7CisKK19TdWNjZXNzXyhyZXR1cm4gPT0gdHJ1ZSkKK2Jvb2wKK0hkbGNFbmNvZGVCdWZmZXIoCisgICAgX0luX3JlYWRzX2J5dGVzXyhEZWNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIERlY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBEZWNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9PdXRfd3JpdGVzX2J5dGVzXyhFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgIFBVQ0hBUiAgICAgICAgIEVuY29kZWRCdWZmZXIsCisgICAgX0luXyBVTE9ORyAgICAgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoCisgICAgKTsKKworX1N1Y2Nlc3NfKHJldHVybiA9PSB0cnVlKQorYm9vbAorSGRsY0RlY29kZUJ1ZmZlcigKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKCpFbmNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgIEVuY29kZWRCdWZmZXIsCisgICAgX0lub3V0XyBQVUxPTkcgICAgICBFbmNvZGVkQnVmZmVyTGVuZ3RoLAorICAgIF9Jbm91dF8gUFVMT05HICAgICAgRGVjb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICBfT3V0X3dyaXRlc19ieXRlc19vcHRfKCpEZWNvZGVkQnVmZmVyTGVuZ3RoKSAKKyAgICAgICAgICAgIFBVQ0hBUiAgICAgIERlY29kZWRCdWZmZXIsCisgICAgX091dF8gICBib29sKiAgICAgICBJc0dvb2QKKyAgICApOwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL29pZC5jcHAgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvb2lkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM0YzlhCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL29pZC5jcHAKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwY2guaHBwIgorI2luY2x1ZGUgIm9pZC50bWgiCisKK3RlbXBsYXRlPHR5cGVuYW1lIF9EYXR1bT4KK1BBR0VEIE5ESVNfU1RBVFVTIFJlcXVlc3RRdWVyeSggX0luXyBQTkRJU19PSURfUkVRVUVTVCBPaWRSZXF1ZXN0LCBjb25zdCBfRGF0dW0gJiB2YWx1ZSApOworCisjZGVmaW5lIFZFUklGWV9ORElTX09CSkVDVF9IRUFERVIoX2hlYWRlciwgX3R5cGUsIF9yZXZpc2lvbiwgX3NpemUpIFwKKyAgICAoKChfaGVhZGVyKS5UeXBlID09IF90eXBlKSAmJiBcCisgICAgICgoX2hlYWRlcikuUmV2aXNpb24gPj0gX3JldmlzaW9uKSAmJiBcCisgICAgICgoX2hlYWRlcikuU2l6ZSA+PSBfc2l6ZSkpCisKKyNkZWZpbmUgVkVSSUZZX05ESVNfT0JKRUNUX0hFQURFUl9QVFIoX2hlYWRlciwgX3R5cGUsIF9yZXZpc2lvbiwgX3NpemUpIFwKKyAgICAoKChfaGVhZGVyKS0+VHlwZSA9PSBfdHlwZSkgJiYgXAorICAgICAoKF9oZWFkZXIpLT5SZXZpc2lvbiA+PSBfcmV2aXNpb24pICYmIFwKKyAgICAgKChfaGVhZGVyKS0+U2l6ZSA+PSBfc2l6ZSkpCisKKyNkZWZpbmUgVkVSSUZZX05ESVNfUkVRVUVTVF9PQkpFQ1RfSEVBREVSKF9idWZmZXIsIF90eXBlLCBfcmV2aXNpb24sIF9zaXplKSBcCisgICAgVkVSSUZZX05ESVNfT0JKRUNUX0hFQURFUl9QVFIocmVpbnRlcnByZXRfY2FzdDxQTkRJU19PQkpFQ1RfSEVBREVSPihfYnVmZmVyKSwgX3R5cGUsIF9yZXZpc2lvbiwgX3NpemUpCisKKyNkZWZpbmUgQVNTSUdOX05ESVNfT0JKRUNUX0hFQURFUihfaGVhZGVyLCBfdHlwZSwgX3JldmlzaW9uLCBfc2l6ZSkgXAorICAgIChfaGVhZGVyKS5UeXBlID0gX3R5cGU7IFwKKyAgICAoX2hlYWRlcikuUmV2aXNpb24gPSBfcmV2aXNpb247IFwKKyAgICAoX2hlYWRlcikuU2l6ZSA9IF9zaXplOyAKKworI2RlZmluZSBBU1NJR05fTkRJU19PQkpFQ1RfSEVBREVSX1BUUihfaGVhZGVyLCBfdHlwZSwgX3JldmlzaW9uLCBfc2l6ZSkgXAorICAgIChfaGVhZGVyKS0+VHlwZSA9IF90eXBlOyBcCisgICAgKF9oZWFkZXIpLT5SZXZpc2lvbiA9IF9yZXZpc2lvbjsgXAorICAgIChfaGVhZGVyKS0+U2l6ZSA9IF9zaXplOyAKKworLy8KKy8vIExpc3Qgb2YgU3VwcG9ydGVkIE9JRHMuCisvLworTkRJU19PSUQgTklDU3VwcG9ydGVkT2lkc1tdID0KK3sKKyAgICAvLyBHZW5lcmFsCisgICAgT0lEX0dFTl9DVVJSRU5UX0xPT0tBSEVBRCwKKyAgICBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwKKyAgICBPSURfR0VOX0lOVEVSUlVQVF9NT0RFUkFUSU9OLAorICAgIE9JRF9HRU5fTElOS19QQVJBTUVURVJTLCAgIC8vIFRPRE86IE1hbmRhdG9yeSBTZXQKKyAgICBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRSwKKyAgICBPSURfR0VOX1JDVl9PSywKKyAgICBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRSwKKyAgICBPSURfR0VOX1JFQ0VJVkVfQlVGRkVSX1NQQUNFLAorICAgIE9JRF9HRU5fU1RBVElTVElDUywKKyAgICBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUsCisgICAgT0lEX0dFTl9UUkFOU01JVF9CVUZGRVJfU1BBQ0UsCisgICAgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04sCisgICAgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04sCisgICAgT0lEX0dFTl9WRU5ET1JfSUQsCisgICAgT0lEX0dFTl9YTUlUX09LLAorICAgIE9JRF9HRU5fTElOS19QQVJBTUVURVJTLCAgICAvLyBUT0RPOiBNYW5kYXRvcnkgU2V0CisKKyAgICAvLyA4MDIuMyBTcGVjaWZpYworICAgIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MsCisgICAgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTLAorICAgIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVCwKKyAgICBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUsCisgICAgT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQsCisgICAgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTiwKKyAgICBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlMsCisKKyAgICAvLyBQblAgU3R1ZmYKKyAgICBPSURfUE5QX0NBUEFCSUxJVElFUywgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwKKyAgICBPSURfUE5QX1FVRVJZX1BPV0VSLCAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwKKyAgICAKKyAgICAvLyBPcGVuVGhyZWFkIFN0dWZmCisgICAgT0lEX09UX0NBUEFCSUxJVElFUywKK307CisKK2NvbnN0IFVMT05HIFNpemVPZk5JQ1N1cHBvcnRlZE9pZHMgPSBzaXplb2YoTklDU3VwcG9ydGVkT2lkcyk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIF9EYXR1bT4KK1BBR0VECitORElTX1NUQVRVUyBSZXF1ZXN0UXVlcnkoIF9Jbl8gUE5ESVNfT0lEX1JFUVVFU1QgT2lkUmVxdWVzdCwgY29uc3QgX0RhdHVtICYgdmFsdWUgKQoreworICAgIFBBR0VEX0NPREUoKTsKKyAgICBOVF9BU1NFUlQoIChPaWRSZXF1ZXN0LT5SZXF1ZXN0VHlwZSA9PSBOZGlzUmVxdWVzdFF1ZXJ5SW5mb3JtYXRpb24pIHx8CisgICAgICAgIChPaWRSZXF1ZXN0LT5SZXF1ZXN0VHlwZSA9PSBOZGlzUmVxdWVzdFF1ZXJ5U3RhdGlzdGljcykgKTsKKworICAgIGlmIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoIDwgc2l6ZW9mKCBfRGF0dW0gKSkKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIF9EYXR1bSApOworICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0xFTkdUSDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc05lZWRlZCA9IHNpemVvZiggX0RhdHVtICk7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNXcml0dGVuID0gc2l6ZW9mKCBfRGF0dW0gKTsKKyAgICAgICAgX0RhdHVtICogcERhdGEgPSByZWludGVycHJldF9jYXN0PF9EYXR1bSAqPihPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyKTsKKyAgICAgICAgKnBEYXRhID0gdmFsdWU7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworICAgIH0KK30KKworUEFHRUQKK05ESVNfU1RBVFVTIFJlcXVlc3RRdWVyeTMyb3I2NCggX0luXyBQTkRJU19PSURfUkVRVUVTVCBPaWRSZXF1ZXN0LCBjb25zdCBVTE9ORzY0IHZhbHVlICkKK3sKKyAgICBQQUdFRF9DT0RFKCk7CisgICAgTlRfQVNTRVJUKCAoT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUgPT0gTmRpc1JlcXVlc3RRdWVyeUluZm9ybWF0aW9uKSB8fAorICAgICAgICAoT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUgPT0gTmRpc1JlcXVlc3RRdWVyeVN0YXRpc3RpY3MpICk7CisKKyAgICBpZiAoT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA+PSBzaXplb2YoIFVMT05HNjQgKSkKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIFVMT05HNjQgKTsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSBzaXplb2YoIFVMT05HNjQgKTsKKyAgICAgICAgUFVMT05HNjQgcERhdGEgPSByZWludGVycHJldF9jYXN0PFBVTE9ORzY0PihPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyKTsKKyAgICAgICAgKnBEYXRhID0gdmFsdWU7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlIGlmIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID49IHNpemVvZiggVUxPTkcgKSkKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIFVMT05HICk7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNXcml0dGVuID0gc2l6ZW9mKCBVTE9ORyApOworICAgICAgICBQVUxPTkcgcERhdGEgPSByZWludGVycHJldF9jYXN0PFBVTE9ORz4oT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5JbmZvcm1hdGlvbkJ1ZmZlcik7CisgICAgICAgICpwRGF0YSA9IChVTE9ORyl2YWx1ZTsKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uQnl0ZXNOZWVkZWQgPSBzaXplb2YoIFVMT05HNjQgKTsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSAwOworICAgICAgICByZXR1cm4gTkRJU19TVEFUVVNfSU5WQUxJRF9MRU5HVEg7CisgICAgfQorfQorCitQQUdFRAorTkRJU19TVEFUVVMgUmVxdWVzdFF1ZXJ5VGhyZWFkQ2FwYWJpbGl0aWVzKF9Jbl8gUE5ESVNfT0lEX1JFUVVFU1QgT2lkUmVxdWVzdCkKK3sKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBPVF9DQVBBQklMSVRJRVMgY2FwcyA9IHsgMCB9OworICAgIEFTU0lHTl9ORElTX09CSkVDVF9IRUFERVIoY2Fwcy5IZWFkZXIsIE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVCwgT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEsIFNJWkVPRl9PVF9DQVBBQklMSVRJRVNfUkVWSVNJT05fMSk7CisgICAgY2Fwcy5NaW5pcG9ydE1vZGUgPSBPVF9NUF9NT0RFX1RIUkVBRDsgICAgLy8gVGhyZWFkIFR1bm5lbCBtb2RlCisgICAgCisgICAgaWYgKE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uSW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPCBTSVpFT0ZfT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzEpCisgICAgeworICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzTmVlZGVkID0gU0laRU9GX09UX0NBUEFCSUxJVElFU19SRVZJU0lPTl8xOworICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0xFTkdUSDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc05lZWRlZCA9IFNJWkVPRl9PVF9DQVBBQklMSVRJRVNfUkVWSVNJT05fMTsKKyAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSBTSVpFT0ZfT1RfQ0FQQUJJTElUSUVTX1JFVklTSU9OXzE7CisgICAgICAgIG1lbWNweShPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyLCAmY2FwcywgU0laRU9GX09UX0NBUEFCSUxJVElFU19SRVZJU0lPTl8xKTsKKyAgICAgICAgcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorfQorCitQQUdFRAorTkRJU19TVEFUVVMgUmVxdWVzdFF1ZXJ5R2VuU3RhdGlzdGljcyhfSW5fIFBORElTX09JRF9SRVFVRVNUIE9pZFJlcXVlc3QsIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCkKK3sKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBORElTX1NUQVRJU1RJQ1NfSU5GTyBzdGF0aXN0aWNzID0geyAwIH07CisgICAgQVNTSUdOX05ESVNfT0JKRUNUX0hFQURFUihzdGF0aXN0aWNzLkhlYWRlciwgTkRJU19PQkpFQ1RfVFlQRV9ERUZBVUxULCBORElTX1NJWkVPRl9TVEFUSVNUSUNTX0lORk9fUkVWSVNJT05fMSwgTkRJU19TVEFUSVNUSUNTX0lORk9fUkVWSVNJT05fMSk7CisKKyAgICBzdGF0aXN0aWNzLlN1cHBvcnRlZFN0YXRpc3RpY3MgPSBOSUNfU1VQUE9SVEVEX1NUQVRJU1RJQ1M7CisKKyAgICAvKiBCeXRlcyBpbiAqLworICAgIHN0YXRpc3RpY3MuaWZIQ0luT2N0ZXRzID0gQWRhcHRlckNvbnRleHQtPkJ5dGVzUnhEaXJlY3RlZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPkJ5dGVzUnhNdWx0aWNhc3QgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5CeXRlc1J4QnJvYWRjYXN0OworCisgICAgc3RhdGlzdGljcy5pZkhDSW5VY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1J4RGlyZWN0ZWQ7ICAgICAgICAgICAgCisgICAgc3RhdGlzdGljcy5pZkhDSW5NdWx0aWNhc3RPY3RldHMgPSBBZGFwdGVyQ29udGV4dC0+Qnl0ZXNSeE11bHRpY2FzdDsgICAgICAgICAgICAKKyAgICBzdGF0aXN0aWNzLmlmSENJbkJyb2FkY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1J4QnJvYWRjYXN0OworCisgICAgLyogUGFja2V0cyBpbiAqLworICAgIHN0YXRpc3RpY3MuaWZIQ0luVWNhc3RQa3RzID0gQWRhcHRlckNvbnRleHQtPkZyYW1lc1J4RGlyZWN0ZWQ7ICAgICAgICAgICAgCisgICAgc3RhdGlzdGljcy5pZkhDSW5NdWx0aWNhc3RQa3RzID0gQWRhcHRlckNvbnRleHQtPkZyYW1lc1J4TXVsdGljYXN0OyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ0luQnJvYWRjYXN0UGt0cyA9IEFkYXB0ZXJDb250ZXh0LT5GcmFtZXNSeEJyb2FkY2FzdDsKKworICAgIC8qIEVycm9ycyBpbiAqLworICAgIHN0YXRpc3RpY3MuaWZJbkVycm9ycyA9IEFkYXB0ZXJDb250ZXh0LT5SeENyY0Vycm9ycyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5SeEFsaWdubWVudEVycm9ycyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5SeERtYU92ZXJydW5FcnJvcnMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UnhSdW50RXJyb3JzOworCisgICAgc3RhdGlzdGljcy5pZkluRGlzY2FyZHMgPSBBZGFwdGVyQ29udGV4dC0+UnhSZXNvdXJjZUVycm9yczsgICAgICAgICAgICAKKworICAgIC8qIEJ5dGVzIG91dCAqLworICAgIHN0YXRpc3RpY3MuaWZIQ091dE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4RGlyZWN0ZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+Qnl0ZXNUeE11bHRpY2FzdCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4QnJvYWRjYXN0OworCisgICAgc3RhdGlzdGljcy5pZkhDT3V0VWNhc3RPY3RldHMgPSBBZGFwdGVyQ29udGV4dC0+Qnl0ZXNUeERpcmVjdGVkOyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ091dE11bHRpY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4TXVsdGljYXN0OyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ091dEJyb2FkY2FzdE9jdGV0cyA9IEFkYXB0ZXJDb250ZXh0LT5CeXRlc1R4QnJvYWRjYXN0OworCisgICAgLyogUGFja2V0cyBvdXQgKi8KKyAgICBzdGF0aXN0aWNzLmlmSENPdXRVY2FzdFBrdHMgPSBBZGFwdGVyQ29udGV4dC0+RnJhbWVzVHhEaXJlY3RlZDsgICAgICAgICAgICAKKyAgICBzdGF0aXN0aWNzLmlmSENPdXRNdWx0aWNhc3RQa3RzID0gQWRhcHRlckNvbnRleHQtPkZyYW1lc1R4TXVsdGljYXN0OyAgICAgICAgICAgIAorICAgIHN0YXRpc3RpY3MuaWZIQ091dEJyb2FkY2FzdFBrdHMgPSBBZGFwdGVyQ29udGV4dC0+RnJhbWVzVHhCcm9hZGNhc3Q7CisKKyAgICAvKiBFcnJvcnMgb3V0ICovCisgICAgc3RhdGlzdGljcy5pZk91dEVycm9ycyA9IEFkYXB0ZXJDb250ZXh0LT5UeEFib3J0RXhjZXNzQ29sbGlzaW9ucyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+VHhEbWFVbmRlcnJ1biArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+VHhMb3N0Q1JTICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5UeExhdGVDb2xsaXNpb25zKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPlRyYW5zbWl0RmFpbHVyZXNPdGhlcjsKKworICAgIHN0YXRpc3RpY3MuaWZPdXREaXNjYXJkcyA9IDBVTEw7CisgICAgCisgICAgcmV0dXJuIFJlcXVlc3RRdWVyeShPaWRSZXF1ZXN0LCBzdGF0aXN0aWNzKTsKK30KKworUEFHRUQgCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitORElTX1NUQVRVUworTVBPaWRSZXF1ZXN0KAorICAgIF9Jbl8gIE5ESVNfSEFORExFICAgICAgICAgICAgIE1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisgICAgX0luXyAgUE5ESVNfT0lEX1JFUVVFU1QgICAgICAgT2lkUmVxdWVzdAorICAgICkKK3sKKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0ID0gKFBPVFRNUF9BREFQVEVSX0NPTlRFWFQpTWluaXBvcnRBZGFwdGVyQ29udGV4dDsKKyAgICBORElTX1NUQVRVUyBzdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgIGJvb2wgZkZhaWxFeHBlY3RlZCA9IGZhbHNlOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIHN3aXRjaCAoT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUpCisgICAgeworICAgIGNhc2UgTmRpc1JlcXVlc3RTZXRJbmZvcm1hdGlvbjoKKyAgICAgICAgc3dpdGNoIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLk9pZCkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKKyAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIHdpdGggSmVmZnJleSBob3cgdG8gYmV0dGVyIGhhbmRsZSB0aGlzCisgICAgICAgICAgICBzdGF0dXMgPSBORElTX1NUQVRVU19NVUxUSUNBU1RfRlVMTDsKKyAgICAgICAgICAgIGZGYWlsRXhwZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGYWtlIGl0IHVudGlsIHdlIG1ha2UgaXQgOikKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGJpbmQgdW5sZXNzIHdlIHJlcG9ydCBzdWNjZXNzIGZvciB0aGVzZSBPSURzCisgICAgICAgICAgICAvLworICAgICAgICBjYXNlIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSOgorICAgICAgICBjYXNlIE9JRF9QTV9BRERfV09MX1BBVFRFUk46CisgICAgICAgIGNhc2UgT0lEX1BNX1JFTU9WRV9XT0xfUEFUVEVSTjoKKyAgICAgICAgY2FzZSBPSURfR0VOX0NVUlJFTlRfTE9PS0FIRUFEOgorICAgICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gRXhwbGljaXRseSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGNhc2UgT0lEX0dFTl9JTlRFUlJVUFRfTU9ERVJBVElPTjoKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgICBmRmFpbEV4cGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBVbmtub3duCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzdGF0dXMgPSBORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOZGlzUmVxdWVzdFF1ZXJ5SW5mb3JtYXRpb246CisgICAgY2FzZSBOZGlzUmVxdWVzdFF1ZXJ5U3RhdGlzdGljczoKKyAgICAgICAgc3dpdGNoIChPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLk9pZCkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9JRF9HRU5fSU5URVJSVVBUX01PREVSQVRJT046CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IE5ESVNfSU5URVJSVVBUX01PREVSQVRJT05fUEFSQU1FVEVSUyBuaW1wID0geworICAgICAgICAgICAgICAgICAgICB7IE5ESVNfT0JKRUNUX1RZUEVfREVGQVVMVCwgTkRJU19JTlRFUlJVUFRfTU9ERVJBVElPTl9QQVJBTUVURVJTX1JFVklTSU9OXzEsIE5ESVNfU0laRU9GX0lOVEVSUlVQVF9NT0RFUkFUSU9OX1BBUkFNRVRFUlNfUkVWSVNJT05fMSB9LAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICBOZGlzSW50ZXJydXB0TW9kZXJhdGlvbk5vdFN1cHBvcnRlZCB9OworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeSggT2lkUmVxdWVzdCwgbmltcCApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgT0lEX0dFTl9SQ1ZfT0s6CisgICAgICAgICAgICBzdGF0dXMgPSBSZXF1ZXN0UXVlcnkzMm9yNjQoIE9pZFJlcXVlc3QsIEFkYXB0ZXJDb250ZXh0LT5GcmFtZXNSeEJyb2FkY2FzdAorICAgICAgICAgICAgICAgICAgICAgKyBBZGFwdGVyQ29udGV4dC0+RnJhbWVzUnhNdWx0aWNhc3QKKyAgICAgICAgICAgICAgICAgICAgICsgQWRhcHRlckNvbnRleHQtPkZyYW1lc1J4RGlyZWN0ZWQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU6CisgICAgICAgIGNhc2UgT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFOgorICAgICAgICBjYXNlIE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFOgorICAgICAgICAgICAgc3RhdHVzID0gUmVxdWVzdFF1ZXJ5PFVMT05HPiggT2lkUmVxdWVzdCwgSFdfTUFYX0ZSQU1FX1NJWkUgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRToKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeTxVTE9ORz4oIE9pZFJlcXVlc3QsIEhXX01BWF9GUkFNRV9TSVpFICogQWRhcHRlckNvbnRleHQtPnVsTWF4QnVzeVJlY3ZzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9JRF9HRU5fU1RBVElTVElDUzoKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeUdlblN0YXRpc3RpY3MoT2lkUmVxdWVzdCwgQWRhcHRlckNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JVRkZFUl9TUEFDRToKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeTxVTE9ORz4oIE9pZFJlcXVlc3QsIEhXX01BWF9GUkFNRV9TSVpFICogQWRhcHRlckNvbnRleHQtPnVsTWF4QnVzeVNlbmRzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9JRF9HRU5fVkVORE9SX0RFU0NSSVBUSU9OOgorICAgICAgICBjYXNlIE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OOgorICAgICAgICBjYXNlIE9JRF9HRU5fVkVORE9SX0lEOgorICAgICAgICAgICAgaWYgKE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uSW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPCBzaXplb2YoTklDX1ZFTkRPUl9ERVNDKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzTmVlZGVkID0gc2l6ZW9mKCBOSUNfVkVORE9SX0RFU0MgKTsKKyAgICAgICAgICAgICAgICBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9MRU5HVEg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc05lZWRlZCA9IHNpemVvZiggTklDX1ZFTkRPUl9ERVNDICk7CisgICAgICAgICAgICAgICAgT2lkUmVxdWVzdC0+REFUQS5RVUVSWV9JTkZPUk1BVElPTi5CeXRlc1dyaXR0ZW4gPSBzaXplb2YoIE5JQ19WRU5ET1JfREVTQyApOworICAgICAgICAgICAgICAgIG1lbWNweShPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLkluZm9ybWF0aW9uQnVmZmVyLCBOSUNfVkVORE9SX0RFU0MsIHNpemVvZihOSUNfVkVORE9SX0RFU0MpKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfR0VOX1hNSVRfT0s6CisgICAgICAgICAgICBzdGF0dXMgPSBSZXF1ZXN0UXVlcnkzMm9yNjQoIE9pZFJlcXVlc3QsIEFkYXB0ZXJDb250ZXh0LT5GcmFtZXNUeEJyb2FkY2FzdAorICAgICAgICAgICAgICAgICAgICAgKyBBZGFwdGVyQ29udGV4dC0+RnJhbWVzVHhNdWx0aWNhc3QKKyAgICAgICAgICAgICAgICAgICAgICsgQWRhcHRlckNvbnRleHQtPkZyYW1lc1R4RGlyZWN0ZWQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzoKKyAgICAgICAgICAgIHN0YXR1cyA9IFJlcXVlc3RRdWVyeSggT2lkUmVxdWVzdCwgQWRhcHRlckNvbnRleHQtPkV4dGVuZGVkQWRkcmVzcyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6CisgICAgICAgICAgICBzdGF0dXMgPSBSZXF1ZXN0UXVlcnkoIE9pZFJlcXVlc3QsIEFkYXB0ZXJDb250ZXh0LT5FeHRlbmRlZEFkZHJlc3MgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX1BOUF9DQVBBQklMSVRJRVM6CisgICAgICAgICAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBsb3cgcG93ZXIKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgICBmRmFpbEV4cGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT0lEX1BOUF9RVUVSWV9QT1dFUjoKKyAgICAgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX05PVF9BQ0NFUFRFRDsKKyAgICAgICAgICAgIGZGYWlsRXhwZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPSURfT1RfQ0FQQUJJTElUSUVTOgorICAgICAgICAgICAgc3RhdHVzID0gUmVxdWVzdFF1ZXJ5VGhyZWFkQ2FwYWJpbGl0aWVzKCBPaWRSZXF1ZXN0ICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3RhdHVzID0gTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmRpc1JlcXVlc3RNZXRob2Q6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cyA9IE5ESVNfU1RBVFVTX0lOVkFMSURfT0lEOworICAgICAgICBicmVhazsKKworICAgIH0KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKCBPaWRSZXF1ZXN0ICk7CisKKyAgICBpZiAoIWZGYWlsRXhwZWN0ZWQgJiYgKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSkKKyAgICB7CisgICAgICAgIExvZ0Z1bmNFeGl0TXNnKERSSVZFUl9ERUZBVUxULCAiIFR5cGU6JXUgT2lkOiV1IFN0YXR1czolIU5ESVNfU1RBVFVTISIsIE9pZFJlcXVlc3QtPlJlcXVlc3RUeXBlLCBPaWRSZXF1ZXN0LT5EQVRBLlFVRVJZX0lORk9STUFUSU9OLk9pZCwgc3RhdHVzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gQnkgbm90IHVzaW5nIExvZ0Z1bmNFeGl0TkRJUywgdGhpcyB3b24ndCBnZXQgYXV0by1wcm9tb3RlZCB0byBhIHdhcm5pbmcgb24gbm9uLTAgc3RhdHVzZXMKKyAgICAgICAgTG9nRnVuY0V4aXRNc2coRFJJVkVSX0RFRkFVTFQsICIgVHlwZToldSBPaWQ6JXUgU3RhdHVzOiUhTkRJU19TVEFUVVMhIiwgT2lkUmVxdWVzdC0+UmVxdWVzdFR5cGUsIE9pZFJlcXVlc3QtPkRBVEEuUVVFUllfSU5GT1JNQVRJT04uT2lkLCBzdGF0dXMpOworICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfVXNlX2RlY2xfYW5ub3RhdGlvbnNfCitWT0lECitNUENhbmNlbE9pZFJlcXVlc3QoCisgICAgX0luXyAgTkRJU19IQU5ETEUgICAgICAgICAgICAgLyogTWluaXBvcnRBZGFwdGVyQ29udGV4dCAqLywKKyAgICBfSW5fICBQVk9JRCAgICAgICAgICAgICAgICAgICAvKiBwUmVxdWVzdElkICovCispCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vaWQuaHBwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL29pZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5YjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vaWQuaHBwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgSGVhZGVyIGZpbGUgZm9yIHRoZSByb3V0aW5lcyByZWxhdGVkIHRvIE9JRHMKKyAqLworCitleHRlcm4gTkRJU19PSUQgTklDU3VwcG9ydGVkT2lkc1tdOworZXh0ZXJuIGNvbnN0IFVMT05HIFNpemVPZk5JQ1N1cHBvcnRlZE9pZHM7CisKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKworUEFHRUQgTUlOSVBPUlRfT0lEX1JFUVVFU1QgTVBPaWRSZXF1ZXN0OworTUlOSVBPUlRfQ0FOQ0VMX09JRF9SRVFVRVNUIE1QQ2FuY2VsT2lkUmVxdWVzdDsKKworI2Vsc2UKKworRVZUX05FVF9SRVFVRVNUX1FVRVJZX0RBVEEgRXZ0UXVlcnlVbG9uZzsKK0VWVF9ORVRfUkVRVUVTVF9RVUVSWV9EQVRBIEV2dFF1ZXJ5R2VuVmVuZG9yRGVzY3JpcHRpb247CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUFkZHJlc3M7CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUdlblN0YXRpc3RpY3M7CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUdlbkludGVycnVwdE1vZGVyYXRpb247CitFVlRfTkVUX1JFUVVFU1RfUVVFUllfREFUQSBFdnRRdWVyeUdlblhtaXRSY3ZPazsKKworRVZUX05FVF9SRVFVRVNUX1FVRVJZX0RBVEEgRXZ0UXVlcnlUaHJlYWRDYXBhYmlsaXRpZXM7CisKK0VWVF9ORVRfUkVRVUVTVF9ERUZBVUxUX1NFVF9EQVRBIEV2dERlZmF1bHRTZXREYXRhOworCitORElTX1NUQVRVUworQWRhcHRlclNldEluZm9ybWF0aW9uKAorICAgIF9Jbl8gIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyAgUE5ESVNfT0lEX1JFUVVFU1QgICAgICAgICBOZGlzU2V0UmVxdWVzdCk7CisKK05ESVNfU1RBVFVTCitBZGFwdGVyUXVlcnlJbmZvcm1hdGlvbigKKyAgICBfSW5fICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgIEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbm91dF8gUE5ESVNfT0lEX1JFUVVFU1QgICAgICAgTmRpc1F1ZXJ5UmVxdWVzdAorICAgICk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworQWRkRGVmYXVsdFJlcXVlc3RTZXF1ZW50aWFsUXVldWUoCisgICAgX0luXyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0CisgICAgKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vdHRtcC5pbmYgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvb3R0bXAuaW5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvb3R0bXAuaW5mCkBAIC0wLDAgKzEsMTIxIEBACis7Cis7ICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCis7ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorOworOyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cis7ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzsgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCis7ICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorOyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorOyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzsgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorOyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKzsgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorOworOyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCis7ICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCis7ICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorOyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorOyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorOyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKzsgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworOyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKzsgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCis7ICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorOyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCis7CisKK1tWZXJzaW9uXQorU2lnbmF0dXJlICAgICAgICAgICA9ICIkV2luZG93cyBOVCQiCitDbGFzcyAgICAgICAgICAgICAgID0gTmV0CitDbGFzc0dVSUQgICAgICAgICAgID0gezRkMzZlOTcyLWUzMjUtMTFjZS1iZmMxLTA4MDAyYmUxMDMxOH0KK1Byb3ZpZGVyICAgICAgICAgICAgPSAlT3BlblRocmVhZCUKK0RyaXZlclZlciAgICAgICAgICAgPSAKK1BucExvY2tEb3duICAgICAgICAgPSAxCitDYXRhbG9nRmlsZSAgICAgICAgID0gb3R0bXAuY2F0CisKK1tNYW51ZmFjdHVyZXJdCislT3BlblRocmVhZCUgICAgICAgID0gT3BlblRocmVhZCxOVCRBUkNIJAorCitbT3BlblRocmVhZC5OVCRBUkNIJF0KKyVvdHRtcC5EZXZpY2VEZXNjJSAgPSBvdHRtcC5uZGksIHJvb3Rcb3R0bXAgOyBSb290IGVudW1lcmF0ZWQKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgT3BlblRocmVhZCBUdW5uZWwgVGhyZWFkIEFkYXB0ZXIKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbb3R0bXAubmRpXQorQ2hhcmFjdGVyaXN0aWNzICAgICA9IDB4NCA7IE5DRl9QSFlTSUNBTAorKklmVHlwZSAgICAgICAgICAgICA9IDI1OSA7IElGX1RZUEVfSUVFRTgwMjE1NAorKk1lZGlhVHlwZSAgICAgICAgICA9IDE5ICA7IE5kaXNNZWRpdW1JUAorKlBoeXNpY2FsTWVkaWFUeXBlICA9IDIwICA7IE5kaXNQaHlzaWNhbE1lZGl1bU5hdGl2ZTgwMl8xNV80CisqSWZDb25uZWN0b3JQcmVzZW50ID0gMAorKkFjY2Vzc1R5cGUgICAgICAgICA9IDIgICA7IE5FVF9JRl9BQ0NFU1NfQlJPQURDQVNUCisqQ29ubmVjdGlvblR5cGUgICAgID0gMSAgIDsgTkVUX0lGX0NPTk5FQ1RJT05fUEFTU0lWRQorKkRpcmVjdGlvblR5cGUgICAgICA9IDAgICA7IE5FVF9JRl9ESVJFQ1RJT05fU0VORFJFQ0VJVkUKK0FkZFJlZyAgICAgICAgICAgICAgPSBvdHRtcC5SZWcKK0NvcHlGaWxlcyAgICAgICAgICAgPSBvdHRtcC5Db3B5RmlsZXMKKworW290dG1wLm5kaS5TZXJ2aWNlc10KK0FkZFNlcnZpY2UgICAgICAgICAgPSBvdHRtcCwgMiwgb3R0bXAuU2VydmljZSwgb3R0bXAuRXZlbnRMb2cKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgT3BlblRocmVhZCBUdW5uZWwgTWluaXBvcnQgQ29tbW9uCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW290dG1wLlJlZ10KK0hLUiwgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICBCdXNOdW1iZXIsICAgICAgICAgICAwLCAiMCIgCitIS1IsIE5kaSwgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSwgICAgICAgICAgICAgMCwgIm90dG1wIgorSEtSLCBOZGlcSW50ZXJmYWNlcywgICAgICAgICAgICAgIFVwcGVyUmFuZ2UsICAgICAgICAgIDAsICJmbHBwNiIKK0hLUiwgTmRpXEludGVyZmFjZXMsICAgICAgICAgICAgICBMb3dlclJhbmdlLCAgICAgICAgICAwLCAiODAyLjE1LjQiCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IFdERiBTZWN0aW9uCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW290dG1wLm5kaS5XZGZdCitLbWRmU2VydmljZSAgICAgICAgID0gb3R0bXAsIG90dG1wLndkZnNlY3QKKworW290dG1wLndkZnNlY3RdCitLbWRmTGlicmFyeVZlcnNpb24gID0gJEtNREZWRVJTSU9OJAorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBEcml2ZXIgYW5kIFNlcnZpY2UgU2VjdGlvbgorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tvdHRtcC5Db3B5RmlsZXNdCitvdHRtcC5zeXMsLCwyCisKK1tvdHRtcC5TZXJ2aWNlXQorRGlzcGxheU5hbWUgICAgICAgID0gJW90dG1wLlNlcnZpY2UuRGlzcE5hbWUlCitTZXJ2aWNlVHlwZSAgICAgICAgPSAxIDslU0VSVklDRV9LRVJORUxfRFJJVkVSJQorU3RhcnRUeXBlICAgICAgICAgID0gMyA7JVNFUlZJQ0VfREVNQU5EX1NUQVJUJQorRXJyb3JDb250cm9sICAgICAgID0gMSA7JVNFUlZJQ0VfRVJST1JfTk9STUFMJQorU2VydmljZUJpbmFyeSAgICAgID0gJTEyJVxvdHRtcC5zeXMKK0xvYWRPcmRlckdyb3VwICAgICA9IE5ESVMKK0FkZFJlZyAgICAgICAgICAgICA9IFRleHRNb2RlRmxhZ3MuUmVnCitEZXNjcmlwdGlvbiAgICAgICAgPSAlb3R0bXAuRGV2aWNlRGVzYyUKKworW290dG1wLkV2ZW50TG9nXQorQWRkUmVnICAgICAgICAgICAgID0gb3R0bXAuQWRkRXZlbnRMb2cuUmVnCisKK1tvdHRtcC5BZGRFdmVudExvZy5SZWddCitIS1IsICwgRXZlbnRNZXNzYWdlRmlsZSwgMHgwMDAyMDAwMCwgIiUlU3lzdGVtUm9vdCUlXFN5c3RlbTMyXG5ldGV2ZW50LmRsbCIKK0hLUiwgLCBUeXBlc1N1cHBvcnRlZCwgICAweDAwMDEwMDAxLCA3CisKK1tUZXh0TW9kZUZsYWdzLlJlZ10KK0hLUiwgLCBUZXh0TW9kZUZsYWdzLCAgICAweDAwMDEwMDAxLCAweDAwMDEKKworW1NvdXJjZURpc2tzTmFtZXNdCisxID0gJW90dG1wLkRldmljZURlc2MlLCwsIiIKKworW1NvdXJjZURpc2tzRmlsZXNdCitvdHRtcC5zeXMgPSAxLCwKKworW0Rlc3RpbmF0aW9uRGlyc10KK290dG1wLkNvcHlGaWxlcyA9IDEyCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IExvY2FsaXphYmxlIFN0cmluZ3MKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbU3RyaW5nc10KK09wZW5UaHJlYWQgICAgICAgICAgICAgID0gIk9wZW5UaHJlYWQiICAgICAgICAgICAgICAgICAgICAgIAorb3R0bXAuRGV2aWNlRGVzYyAgICAgICAgPSAiT3BlblRocmVhZCBUdW5uZWwgVGhyZWFkIEFkYXB0ZXIiCitvdHRtcC5TZXJ2aWNlLkRpc3BOYW1lICA9ICJPcGVuVGhyZWFkIFR1bm5lbCBNaW5pcG9ydCIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vdHRtcC5yYyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9vdHRtcC5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmE3YzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL290dG1wLnJjCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPG50dmVycC5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHNwZWNpZmljIHRvIHRoaXMgZmlsZSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFZFUl9GSUxFVFlQRSwgVkVSX0ZJTEVTVUJUWVBFLCBWRVJfRklMRURFU0NSSVBUSU9OX1NUUgorICogYW5kIFZFUl9JTlRFUk5BTE5BTUVfU1RSIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIENPTU1PTi5WRVIKKyAqIFRoZSBzdHJpbmdzIGRvbid0IG5lZWQgYSAnXDAnLCBzaW5jZSBjb21tb24udmVyIGhhcyB0aGVtLgorICovCisjZGVmaW5lICAgIFZFUl9GSUxFVFlQRSAgICBWRlRfRFJWCisvKiBwb3NzaWJsZSB2YWx1ZXM6ICAgICAgICBWRlRfVU5LTk9XTgorICAgICAgICAgICAgICAgIFZGVF9BUFAKKyAgICAgICAgICAgICAgICBWRlRfRExMCisgICAgICAgICAgICAgICAgVkZUX0RSVgorICAgICAgICAgICAgICAgIFZGVF9GT05UCisgICAgICAgICAgICAgICAgVkZUX1ZYRAorICAgICAgICAgICAgICAgIFZGVF9TVEFUSUNfTElCCisqLworI2RlZmluZSAgICBWRVJfRklMRVNVQlRZUEUgICAgVkZUMl9EUlZfTkVUV09SSworLyogcG9zc2libGUgdmFsdWVzICAgICAgICBWRlQyX1VOS05PV04KKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9QUklOVEVSCisgICAgICAgICAgICAgICAgVkZUMl9EUlZfS0VZQk9BUkQKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9MQU5HVUFHRQorICAgICAgICAgICAgICAgIFZGVDJfRFJWX0RJU1BMQVkKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9NT1VTRQorICAgICAgICAgICAgICAgIFZGVDJfRFJWX05FVFdPUksKKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9TWVNURU0KKyAgICAgICAgICAgICAgICBWRlQyX0RSVl9JTlNUQUxMQUJMRQorICAgICAgICAgICAgICAgIFZGVDJfRFJWX1NPVU5ECisgICAgICAgICAgICAgICAgVkZUMl9EUlZfQ09NTQorKi8KKyNkZWZpbmUgVkVSX0ZJTEVERVNDUklQVElPTl9TVFIgICAgICJPcGVuVGhyZWFkIFR1bm5lbCBNaW5pcG9ydCIKKyNkZWZpbmUgVkVSX0lOVEVSTkFMTkFNRV9TVFIgICAgICAgICJPVFRNUC5TWVMiCisKKworI2luY2x1ZGUgImNvbW1vbi52ZXIiICAgLy8gTlQ1LjAgdmVyc2lvbiBmaWxlLgorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvcGNoLmhwcCBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9wY2guaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzkxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kcml2ZXJzL3dpbmRvd3Mvb3R0bXAvcGNoLmhwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorLy8KKy8vIHN5c3RlbSBoZWFkZXJzCisvLworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxudHZlcnAuaD4KKyNpbmNsdWRlIDxudGRkay5oPgorI2luY2x1ZGUgPG50c3Ryc2FmZS5oPgorI2luY2x1ZGUgPG50aW50c2FmZS5oPgorI2luY2x1ZGUgPG5kaXMuaD4KKyNpbmNsdWRlIDxXcHBSZWNvcmRlci5oPgorI2luY2x1ZGUgPHdkZi5oPgorI2lmbmRlZiBPVFRNUF9MRUdBQ1kKKyNpbmNsdWRlIDxuZXRhZGFwdGVyY3guaD4KKyNlbmRpZgorI2luY2x1ZGUgPFdkZk1pbmlwb3J0Lmg+CisjaW5jbHVkZSA8d2RtLmg+CisjaW5jbHVkZSA8bnRkZHNlci5oPgorfQorCisvLyBJbnRlbGxpc2Vuc2UgZGVmaW5pdGlvbiBmb3IgRGJnUmFpc2VBc3NlcnRpb25GYWlsdXJlIGJlY2F1c2UgZm9yIHNvbWUgcmVhc29uIFZpc3VhbCBTdHVkaW8gY2FuJ3QKKy8vIGZpbmQgaXQuCisjaWZkZWYgX19JTlRFTExJU0VOU0VfXworI2RlZmluZSBEYmdSYWlzZUFzc2VydGlvbkZhaWx1cmUoKSAoKHZvaWQpIDApCisjZW5kaWYKKworI2luY2x1ZGUgIm90T0lELmgiCisgCisjZGVmaW5lIENPREVfU0VHKHNlZykgX19kZWNsc3BlYyhjb2RlX3NlZyhzZWcpKQorI2RlZmluZSBJTklUQ09ERSBDT0RFX1NFRygiSU5JVCIpICAKKyNkZWZpbmUgUEFHRUQgIENPREVfU0VHKCJQQUdFIikKKwordHlwZWRlZiBzdHJ1Y3QgX09UVE1QX0FEQVBURVJfQ09OVEVYVCAqUE9UVE1QX0FEQVBURVJfQ09OVEVYVDsKK3R5cGVkZWYgc3RydWN0IF9PVFRNUF9ERVZJQ0VfQ09OVEVYVCAqUE9UVE1QX0RFVklDRV9DT05URVhUOworCisjaW5jbHVkZSAiaGFyZHdhcmUuaHBwIgorI2luY2x1ZGUgImhkbGMuaHBwIgorI2luY2x1ZGUgImRyaXZlci5ocHAiCisjaW5jbHVkZSAiYWRhcHRlci5ocHAiCisjaW5jbHVkZSAiZGV2aWNlLmhwcCIKKyNpbmNsdWRlICJzZXJpYWwuaHBwIgorI2luY2x1ZGUgIm9pZC5ocHAiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaCIKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuY3BwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL3NlcmlhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4NWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuY3BwCkBAIC0wLDAgKzEsMTMwOCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBjaC5ocHAiCisjaW5jbHVkZSAic2VyaWFsLnRtaCIKKworUEFHRUQKK19Ob19jb21wZXRpbmdfdGhyZWFkXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEluaXRpYWxpemUoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZXJpYWxJbml0aWFsaXplIGF0dGVtcHRzIHRvIGZpbmQgYW5kIG9wZW4gdGhlIGZpcnN0IENPTSBwb3J0IGF2YWlsYWJsZSwgd2l0aAorICAgIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQgc2hvdWxkIGJlIGZvciB0aGUgVGhyZWFkIGRldmljZS4KKworQXJndW1lbnRzOgorCisgICAgQWRhcHRlckNvbnRleHQgLSBoYW5kbGUgdG8gYSBPVFRNUCBBZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKworICAgIE5UU1RBVFVTICAgIC0gQSBmYWlsdXJlIGhlcmUgd2lsbCBpbmRpY2F0ZSB0aGUgc2VyaWFsIENPTSBwb3J0IHdhcyBub3QgYWJsZQorICAgICAgICAgICAgICAgICAgdG8gYmUgb3BlbmVkLgorLS0qLworeworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7CisgICAgUFdTVFIgU3ltYm9saWNMaW5rTGlzdCA9IE5VTEw7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworICAgIAorICAgIFBBR0VEX0NPREUoKTsKKyAgICAKKyAgICBkbworICAgIHsKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTIGF0dHIgPSB7IDAgfTsKKyAgICAgICAgV0RGX1dPUktJVEVNX0NPTkZJRyBjb25maWcgPSB7IDAgfTsKKworICAgICAgICAvLworICAgICAgICAvLyBTZW5kIFF1ZXVlIFZhcmlhYmxlcworICAgICAgICAvLworCisgICAgICAgIEluaXRpYWxpemVMaXN0SGVhZCgmQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZSk7CisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWVSdW5uaW5nID0gZmFsc2U7CisKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTX0lOSVQoJmF0dHIpOworICAgICAgICBhdHRyLlBhcmVudE9iamVjdCA9IEFkYXB0ZXJDb250ZXh0LT5EZXZpY2U7CisgICAgICAgIHN0YXR1cyA9IFdkZlNwaW5Mb2NrQ3JlYXRlKCZhdHRyLCAmQWRhcHRlckNvbnRleHQtPlNlbmRMb2NrKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZTcGluTG9ja0NyZWF0ZShsb2NrU2VuZCkgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUX0NPTlRFWFRfVFlQRSgmYXR0ciwgV0RGX0RFVklDRV9JTkZPKTsKKyAgICAgICAgYXR0ci5QYXJlbnRPYmplY3QgPSBBZGFwdGVyQ29udGV4dC0+RGV2aWNlOworICAgICAgICBXREZfV09SS0lURU1fQ09ORklHX0lOSVQoJmNvbmZpZywgU2VyaWFsU2VuZExvb3ApOworCisgICAgICAgIHN0YXR1cyA9IFdkZldvcmtJdGVtQ3JlYXRlKCZjb25maWcsICZhdHRyLCAmQWRhcHRlckNvbnRleHQtPlNlbmRXb3JrSXRlbSk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiV2RmV29ya0l0ZW1DcmVhdGUoU2VyaWFsU2VuZExvb3ApIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgR2V0V2RmRGV2aWNlSW5mbyhBZGFwdGVyQ29udGV4dC0+U2VuZFdvcmtJdGVtKS0+QWRhcHRlckNvbnRleHQgPSBBZGFwdGVyQ29udGV4dDsKKworICAgICAgICAvLworICAgICAgICAvLyBSZWNlaXZlIFZhcmlhYmxlcworICAgICAgICAvLworCisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUX0NPTlRFWFRfVFlQRSgmYXR0ciwgV0RGX0RFVklDRV9JTkZPKTsKKyAgICAgICAgYXR0ci5QYXJlbnRPYmplY3QgPSBBZGFwdGVyQ29udGV4dC0+RGV2aWNlOworICAgICAgICBXREZfV09SS0lURU1fQ09ORklHX0lOSVQoJmNvbmZpZywgU2VyaWFsUmVjdkxvb3ApOworCisgICAgICAgIHN0YXR1cyA9IFdkZldvcmtJdGVtQ3JlYXRlKCZjb25maWcsICZhdHRyLCAmQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSk7CisgICAgICAgIAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZXb3JrSXRlbUNyZWF0ZShTZXJpYWxSZWN2TG9vcCkgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEdldFdkZkRldmljZUluZm8oQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSktPkFkYXB0ZXJDb250ZXh0ID0gQWRhcHRlckNvbnRleHQ7CisKKyAgICAgICAgLy8gUXVlcnkgdGhlIHN5c3RlbSBmb3IgZGV2aWNlIHdpdGggU0VSSUFMIGludGVyZmFjZQorICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgSW9HZXREZXZpY2VJbnRlcmZhY2VzKAorICAgICAgICAgICAgICAgICZHVUlEX0RFVklOVEVSRkFDRV9DT01QT1JULAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAmU3ltYm9saWNMaW5rTGlzdCAgIC8vIExpc3Qgb2Ygc3ltYm9saWMgbmFtZXM7IHNlcGFyYXRlIGJ5IE5VTEwsIEVPTCB3aXRoIE5VTEwrTlVMTC4KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSW9HZXREZXZpY2VJbnRlcmZhY2VzIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBDT00gcG9ydCBmb3VuZAorICAgICAgICBOVF9BU1NFUlQoU3ltYm9saWNMaW5rTGlzdCk7CisgICAgICAgIGlmICgqU3ltYm9saWNMaW5rTGlzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfREVWSUNFX05PVF9DT05ORUNURUQ7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIk5vIENPTSBwb3J0cyBmb3VuZCEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyNpZiBEQkcKKyAgICAgICAgZm9yIChQQ1dTVFIgc3ltID0gU3ltYm9saWNMaW5rTGlzdDsgKnN5bSAhPSBOVUxMOyBzeW0gKz0gd2NzbGVuKHN5bSkgKyAxKQorICAgICAgICB7CisgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiU3ltYm9saWMgTmFtZSBmb3VuZDogJXdzIiwgc3ltKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLy8gVHJ5IHRvIG9wZW4gZWFjaCBzZXJpYWwgcG9ydCB1bnRpbCB3ZSBnZXQgdGhhdCBvbmUgd29ya3Mgb3Igd2UgZXhoYXVzdCB0aGVtIGFsbAorICAgICAgICBmb3IgKFBDV1NUUiBzeW0gPSBTeW1ib2xpY0xpbmtMaXN0OyAqc3ltICE9IE5VTEw7IHN5bSArPSB3Y3NsZW4oc3ltKSArIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRhcmdldAorICAgICAgICAgICAgc3RhdHVzID0gU2VyaWFsSW5pdGlhbGl6ZVRhcmdldChBZGFwdGVyQ29udGV4dCwgc3ltKTsKKworICAgICAgICAgICAgLy8gQnJlYWsgb24gc3VjY2VzcworICAgICAgICAgICAgaWYgKE5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAgICAvLyBDbGVhbiB1cCBvbiBmYWlsdXJlCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgU2VyaWFsVW5pbml0aWFsaXplKEFkYXB0ZXJDb250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAoU3ltYm9saWNMaW5rTGlzdCkgeworICAgICAgICBFeEZyZWVQb29sKFN5bWJvbGljTGlua0xpc3QpOworICAgICAgICBTeW1ib2xpY0xpbmtMaXN0ID0gTlVMTDsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK1NlcmlhbFVuaW5pdGlhbGl6ZSgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQorLyorKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFNlcmlhbFVuaW5pdGlhbGl6ZSBjbGVhbnMgdXAgYW55IGNhY2hlZCBXZGYgSW9UYXJnZXQgY3JlYXRlZCBmcm9tIFNlcmlhbEluaXRpYWxpemUuCisKK0FyZ3VtZW50czoKKworICAgIEFkYXB0ZXJDb250ZXh0IC0gaGFuZGxlIHRvIGEgT1RUTVAgQWRhcHRlcgorLS0qLworeworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgUEFHRURfQ09ERSgpOworCisgICAgLy8gVE9ETyAtIENsZWFuIHVwIHdvcmsgaXRlbQorCisgICAgLy8gVE9ETyAtIENsZWFuIHVwIHNlbmQgcXVldWUKKworICAgIFNlcmlhbFVuaW5pdGlhbGl6ZVRhcmdldChBZGFwdGVyQ29udGV4dCk7CisKKyAgICBpZiAoQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSkgeworICAgICAgICBXZGZXb3JrSXRlbUZsdXNoKEFkYXB0ZXJDb250ZXh0LT5SZWN2V29ya0l0ZW0pOworICAgIH0KKworICAgIExvZ0Z1bmNFeGl0KERSSVZFUl9ERUZBVUxUKTsKK30KKworUEFHRUQKK19Ob19jb21wZXRpbmdfdGhyZWFkXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEluaXRpYWxpemVUYXJnZXQoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIFBDV1NUUiAgICAgICAgICAgICAgICAgICAgIFRhcmdldE5hbWUKKykKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworICAgIFdERklPVEFSR0VUIHRlbXBUYXJnZXQgPSBXREZfTk9fSEFORExFOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGRvCisgICAgeworICAgICAgICBERUNMQVJFX1VOSUNPREVfU1RSSU5HX1NJWkUoUG9ydE5hbWUsIDY0KTsgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiB0aGUgZGV2aWNlIHBhdGggdG8gYSBzZXJpYWwgcG9ydAorICAgICAgICBXREZfSU9fVEFSR0VUX09QRU5fUEFSQU1TIG9wZW5QYXJhbXMgPSB7IDAgfTsKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTIGF0dHIgPSB7IDAgfTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIFdkZiBJb1RhcmdldAorICAgICAgICBzdGF0dXMgPSBXZGZJb1RhcmdldENyZWF0ZShBZGFwdGVyQ29udGV4dC0+RGV2aWNlLCBXREZfTk9fT0JKRUNUX0FUVFJJQlVURVMsICZ0ZW1wVGFyZ2V0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZJb1RhcmdldENyZWF0ZSBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IHRoZSBDT00gcG9ydAorICAgICAgICBMb2dJbmZvKERSSVZFUl9ERUZBVUxULCAiT3BlbmluZyBkZXZpY2U6ICV3cyIsIFRhcmdldE5hbWUpOworICAgICAgICBSdGxJbml0VW5pY29kZVN0cmluZygmUG9ydE5hbWUsIFRhcmdldE5hbWUpOworICAgICAgICBXREZfSU9fVEFSR0VUX09QRU5fUEFSQU1TX0lOSVRfT1BFTl9CWV9OQU1FKAorICAgICAgICAgICAgJm9wZW5QYXJhbXMsCisgICAgICAgICAgICAmUG9ydE5hbWUsCisgICAgICAgICAgICBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFKTsKKworICAgICAgICAvLyBPcGVuIHRoZSBwb3J0IG9uIHRoZSB0YXJnZXQKKyAgICAgICAgc3RhdHVzID0gV2RmSW9UYXJnZXRPcGVuKHRlbXBUYXJnZXQsICZvcGVuUGFyYW1zKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZJb1RhcmdldE9wZW4oJXdaKSBmYWlsZWQgJSFTVEFUVVMhIiwgJlBvcnROYW1lLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQgPSB0ZW1wVGFyZ2V0OworICAgICAgICB0ZW1wVGFyZ2V0ID0gV0RGX05PX0hBTkRMRTsKKworICAgICAgICBXREZfT0JKRUNUX0FUVFJJQlVURVNfSU5JVF9DT05URVhUX1RZUEUoJmF0dHIsIFdERl9ERVZJQ0VfSU5GTyk7CisgICAgICAgIGF0dHIuUGFyZW50T2JqZWN0ID0gQWRhcHRlckNvbnRleHQtPkRldmljZTsKKworICAgICAgICBzdGF0dXMgPSBXZGZSZXF1ZXN0Q3JlYXRlKCZhdHRyLCBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQsICZBZGFwdGVyQ29udGV4dC0+UmVjdlJlYWRSZXF1ZXN0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZSZXF1ZXN0Q3JlYXRlIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdG8gY29uZmlndXJlIHRoZSB0YXJnZXQKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsQ29uZmlndXJlKEFkYXB0ZXJDb250ZXh0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJTZXJpYWxDb25maWd1cmUgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoZmFsc2UpOworCisgICAgLy8gQ2xlYW4gdXAgb24gZmFpbHVyZQorICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIFNlcmlhbFVuaW5pdGlhbGl6ZVRhcmdldChBZGFwdGVyQ29udGV4dCk7CisgICAgfQorCisgICAgaWYgKHRlbXBUYXJnZXQpIHsKKyAgICAgICAgV2RmSW9UYXJnZXRDbG9zZSh0ZW1wVGFyZ2V0KTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK1NlcmlhbFVuaW5pdGlhbGl6ZVRhcmdldCgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CispCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VyaWFsVW5pbml0aWFsaXplVGFyZ2V0IGNsZWFucyB1cCBhbnkgY2FjaGVkIFdkZiBJb1RhcmdldCBjcmVhdGVkIGZyb20gU2VyaWFsSW5pdGlhbGl6ZVRhcmdldC4KKworQXJndW1lbnRzOgorCisgICAgQWRhcHRlckNvbnRleHQgLSBoYW5kbGUgdG8gYSBPVFRNUCBBZGFwdGVyCistLSovCit7CisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGlmIChBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQpIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2RmSW9UYXJnZXRTdG9wIHdpbGwgY2FuY2VsIGFsbCB0aGUgb3V0c3RhbmRpbmcgSS9PIGFuZCB3YWl0CisgICAgICAgIC8vIGZvciB0aGVtIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcuIFdkZklvVGFyZ2V0U3RvcCAgd2l0aCB0aGUKKyAgICAgICAgLy8gYWN0aW9uIHR5cGUgV2RmSW9UYXJnZXRDYW5jZWxTZW50SW8gY2FuIGJlIGNhbGxlZCBhdCBJUlFMIFBBU1NJVkVfTEVWRUwgb25seS4KKyAgICAgICAgLy8KKyAgICAgICAgV2RmSW9UYXJnZXRTdG9wKEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCwgV2RmSW9UYXJnZXRDYW5jZWxTZW50SW8pOworICAgICAgICBXZGZJb1RhcmdldENsb3NlKEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCk7CisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCA9IE5VTEw7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitfTXVzdF9pbnNwZWN0X3Jlc3VsdF8KK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitGT1JDRUlOTElORQorU2VyaWFsU2VuZElvY3RsKAorICAgIF9Jbl8gICAgIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIElvY3RsQ29kZSwKKyAgICBfSW5fb3B0XyBQV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TICBSZXF1ZXN0T3B0aW9ucyA9IE5VTEwsCisgICAgX0luX29wdF8gUFdERl9NRU1PUllfREVTQ1JJUFRPUiAgICAgSW5wdXRCdWZmZXIgPSBXREZfTk9fSEFORExFLAorICAgIF9Jbl9vcHRfIFBXREZfTUVNT1JZX0RFU0NSSVBUT1IgICAgIE91dHB1dEJ1ZmZlciA9IFdERl9OT19IQU5ETEUsCisgICAgX091dF9vcHRfIFBVTE9OR19QVFIgICAgICAgICAgICAgICAgQnl0ZXNSZXR1cm5lZCA9IE5VTEwKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgSGVscGVyL1dyYXBwZXIgZnVuY3Rpb24gZm9yIFdkZklvVGFyZ2V0U2VuZElvY3RsU3luY2hyb25vdXNseS4KKworLS0qLworeworICAgIHJldHVybiBXZGZJb1RhcmdldFNlbmRJb2N0bFN5bmNocm9ub3VzbHkoCisgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQsIAorICAgICAgICAgICAgV0RGX05PX0hBTkRMRSwgCisgICAgICAgICAgICBJb2N0bENvZGUsIAorICAgICAgICAgICAgSW5wdXRCdWZmZXIsIAorICAgICAgICAgICAgT3V0cHV0QnVmZmVyLCAKKyAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLCAKKyAgICAgICAgICAgIEJ5dGVzUmV0dXJuZWQpOworfQorCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbENvbmZpZ3VyZSgKKyAgICBfSW5fIFBPVFRNUF9BREFQVEVSX0NPTlRFWFQgICAgIEFkYXB0ZXJDb250ZXh0CisgICAgKQorLyorKworUm91dGluZSBEZXNjcmlwdGlvbjoKKworICAgIFNlcmlhbEluaXRpYWxpemUgYXR0ZW1wdHMgdG8gZmluZCBhbmQgb3BlbiB0aGUgZmlyc3QgQ09NIHBvcnQgYXZhaWxhYmxlLCB3aXRoCisgICAgdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBzaG91bGQgYmUgZm9yIHRoZSBUaHJlYWQgZGV2aWNlLgorCitBcmd1bWVudHM6CisKKyAgICBBZGFwdGVyQ29udGV4dCAtIGhhbmRsZSB0byBhIE9UVE1QIEFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgICAgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIHRoZSBzZXJpYWwgQ09NIHBvcnQgd2FzIG5vdCBhYmxlCisgICAgICAgICAgICAgICAgICB0byBiZSBjb25maWd1cmVkIGFzIGRlc2lyZWQuCistLSovCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKyAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1IgaW5wdXREZXNjOworICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OUyB3cnNvID0geworICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05fVElNRU9VVCB8IFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1NZTkNIUk9OT1VTLAorICAgICAgICBXREZfUkVMX1RJTUVPVVRfSU5fU0VDKDEpIC8vIE5vdGhpbmcgc2hvdWxkIHRha2UgbW9yZSB0aGFuIGEgc2Vjb25kIHRvIGNvbXBsZXRlCisgICAgfTsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisgICAgCisgICAgUEFHRURfQ09ERSgpOworICAgIAorICAgIGRvCisgICAgeworICAgICAgICAvLyBJbml0aWFsIHJlc2V0IG9mIHRoZSBkZXZpY2UKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfUkVTRVRfREVWSUNFLCAmd3Jzbyk7CisgICAgICAgIAorICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfUkVTRVRfREVWSUNFIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyA4IGJpdHMsIG5vIHBhcml0eSwgMSBzdG9wIGJpdAorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBTRVJJQUxfTElORV9DT05UUk9MIHNsYyA9IHsgU1RPUF9CSVRfMSwgTk9fUEFSSVRZLCA4IH07CisgICAgICAgICAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1JfSU5JVF9CVUZGRVIoJmlucHV0RGVzYywgKFBWT0lEKSZzbGMsIHNpemVvZihzbGMpKTsKKworICAgICAgICAgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfU0VUX0xJTkVfQ09OVFJPTCwgJndyc28sICZpbnB1dERlc2MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAgIklPQ1RMX1NFUklBTF9TRVRfTElORV9DT05UUk9MIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFhvbiBhbmQgWG9mZiBjaGFyYWN0ZXJzCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFNFUklBTF9DSEFSUyBzYyA9IHsgMCwgMCwgMCwgMCwgMHgxMSwgMHgxMyB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc2MsIHNpemVvZihzYykpOworCisgICAgICAgICAgICBzdGF0dXMgPSBTZXJpYWxTZW5kSW9jdGwoQWRhcHRlckNvbnRleHQsIElPQ1RMX1NFUklBTF9TRVRfQ0hBUlMsICZ3cnNvLCAmaW5wdXREZXNjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIklPQ1RMX1NFUklBTF9TRVRfQ0hBUlMgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBCYXVkIHJhdGUKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgU0VSSUFMX0JBVURfUkFURSBzYnIgPSB7IDExNTIwMCB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc2JyLCBzaXplb2Yoc2JyKSk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9CQVVEX1JBVEUsICZ3cnNvLCAmaW5wdXREZXNjKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIklPQ1RMX1NFUklBTF9TRVRfQkFVRF9SQVRFIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKnsKKyAgICAgICAgICAgIC8vIE9ubHkgc2VuZCBpZiBDVFMgaXMgc2V0LCBTZXQgUlRTIGJlZm9yZSBzZW5kaW5nCisgICAgICAgICAgICBjb25zdCBTRVJJQUxfSEFOREZMT1cgc2hmID0gCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU0VSSUFMX0NUU19IQU5EU0hBS0UsIFNFUklBTF9SVFNfQ09OVFJPTCwKKyAgICAgICAgICAgICAgICBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RILCBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RICisgICAgICAgICAgICB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc2hmLCBzaXplb2Yoc2hmKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9IQU5ERkxPVywgJndyc28sICZpbnB1dERlc2MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSU9DVExfU0VSSUFMX1NFVF9IQU5ERkxPVyBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAvLyBicmVhazsgSWdub3JlIGZvciBub3cKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9YT04sICZ3cnNvKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfU0VUX1hPTiBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfU0VUX1JUUywgJndyc28pOworICAgICAgICAKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSU9DVExfU0VSSUFMX1NFVF9SVFMgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9EVFIsICZ3cnNvKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfU0VUX0RUUiBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Ki8KKworICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBTRVJJQUxfVElNRU9VVFMgc3RvID0geworICAgICAgICAgICAgICAgIDEsIDAsIDAsICAgICAgLy8gT24gcmVhZCwgb25seSB0aW1lb3V0IGlmIG1vcmUgdGhhbiAxbXMgKmJldHdlZW4qIGJ5dGVzICh3YWl0IGZvcmV2ZXIgZm9yIGZpcnN0IGJ5dGUpCisgICAgICAgICAgICAgICAgMSwgMTAgICAgICAgICAvLyBXcml0ZSB0aW1lcyBvdXQgYWZ0ZXIgKDFtcyAqIG4tYnl0ZXMpICsgKDEwbXMpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfQlVGRkVSKCZpbnB1dERlc2MsIChQVk9JRCkmc3RvLCBzaXplb2Yoc3RvKSk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1NFVF9USU1FT1VUUywgJndyc28sICZpbnB1dERlc2MpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfU0VUX1RJTUVPVVRTIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsRmx1c2hBbmRDaGVja1N0YXR1cyhBZGFwdGVyQ29udGV4dCk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiU2VyaWFsRmx1c2hBbmRDaGVja1N0YXR1cyBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbENoZWNrU3RhdHVzKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBib29sICAgICAgICAgICAgICAgICAgICAgICBEYXRhRXhwZWN0ZWQKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VyaWFsQ2hlY2tTdGF0dXMgdmFsaWRhdGVzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc2VyaWFsIENPTSBwb3J0LgorCitBcmd1bWVudHM6CisKKyAgICBBZGFwdGVyQ29udGV4dCAtIGhhbmRsZSB0byBhIE9UVE1QIEFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgICAgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIHRoZSBzZXJpYWwgQ09NIHBvcnQgaXMgbm90IGluIGFuCisgICAgICAgICAgICAgICAgICBleHBlY3RlZCBzdGF0ZS4KKy0tKi8KK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOworICAgIFdERl9NRU1PUllfREVTQ1JJUFRPUiBvdXRwdXREZXNjOworICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OUyB3cnNvID0geworICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05fVElNRU9VVCB8IFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1NZTkNIUk9OT1VTLAorICAgICAgICBXREZfUkVMX1RJTUVPVVRfSU5fU0VDKDEpIC8vIE5vdGhpbmcgc2hvdWxkIHRha2UgbW9yZSB0aGFuIGEgc2Vjb25kIHRvIGNvbXBsZXRlCisgICAgfTsKKyAgICBVTE9OR19QVFIgYnl0ZXNSZXR1cm5lZCA9IDA7CisgICAgU0VSSUFMX1NUQVRVUyBzcyA9IHsgMCB9OworICAgIFdERl9NRU1PUllfREVTQ1JJUFRPUl9JTklUX0JVRkZFUigmb3V0cHV0RGVzYywgKFBWT0lEKSZzcywgc2l6ZW9mKHNzKSk7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisgICAgLy8gQ2hlY2sgdG8gZW5zdXJlIHdlIGFyZSByZWFkeSB0byBzZW5kCisgICAgc3RhdHVzID0gU2VyaWFsU2VuZElvY3RsKEFkYXB0ZXJDb250ZXh0LCBJT0NUTF9TRVJJQUxfR0VUX0NPTU1TVEFUVVMsICZ3cnNvLCBXREZfTk9fSEFORExFLCAmb3V0cHV0RGVzYywgJmJ5dGVzUmV0dXJuZWQpOworCisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIAorICAgIHsKKyAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJJT0NUTF9TRVJJQUxfR0VUX0NPTU1TVEFUVVMgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzUmV0dXJuZWQgPj0gc2l6ZW9mKHNzKSkgCisgICAgeworICAgICAgICBpZiAoc3MuSG9sZFJlYXNvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcy5Ib2xkUmVhc29ucyAhPSBTRVJJQUxfVFhfV0FJVElOR19GT1JfQ1RTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSG9sZFJlYXNvbnMgaXMgd3JvbmcgKHNob3VsZCBvbmx5IGJlIENUUywgYnV0IGlzICV4KSIsIHNzLkhvbGRSZWFzb25zICk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfREVWSUNFX1NUQVRFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIURhdGFFeHBlY3RlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIkFkYXB0ZXIgYWxyZWFkeSBoYXMgZGF0YSBvbiBpbml0IT8hPyEiKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9TVEFURV9UUkFOU0lUSU9OOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzcy5FcnJvcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJVbmV4cGVjdGVkIEVycm9yICV4Iiwgc3MuRXJyb3JzKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdE5UKERSSVZFUl9ERUZBVUxULCBzdGF0dXMpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworUEFHRUQKK19JUlFMX3JlcXVpcmVzXyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEZsdXNoQW5kQ2hlY2tTdGF0dXMoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZXJpYWxGbHVzaEFuZENoZWNrU3RhdHVzIGZsdXNoZWQgYW5kIHZhbGlkYXRlcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHNlcmlhbCBDT00gcG9ydC4KKworQXJndW1lbnRzOgorCisgICAgQWRhcHRlckNvbnRleHQgLSBoYW5kbGUgdG8gYSBPVFRNUCBBZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKworICAgIE5UU1RBVFVTICAgIC0gQSBmYWlsdXJlIGhlcmUgd2lsbCBpbmRpY2F0ZSB0aGUgc2VyaWFsIENPTSBwb3J0IGlzIG5vdCBpbiBhbgorICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgc3RhdGUuCistLSovCit7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKworICAgIExvZ0Z1bmNFbnRyeShEUklWRVJfREVGQVVMVCk7CisKKyAgICBQQUdFRF9DT0RFKCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SIGlucHV0RGVzYzsKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TIHdyc28gPSB7CisgICAgICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1RJTUVPVVQgfCBXREZfUkVRVUVTVF9TRU5EX09QVElPTl9TWU5DSFJPTk9VUywKKyAgICAgICAgICAgIFdERl9SRUxfVElNRU9VVF9JTl9TRUMoMSkgLy8gTm90aGluZyBzaG91bGQgdGFrZSBtb3JlIHRoYW4gYSBzZWNvbmQgdG8gY29tcGxldGUKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3QgVUxPTkcgZmxhZ3MgPSBTRVJJQUxfUFVSR0VfUlhBQk9SVCB8IFNFUklBTF9QVVJHRV9SWENMRUFSIHwgU0VSSUFMX1BVUkdFX1RYQUJPUlQgfCBTRVJJQUxfUFVSR0VfVFhDTEVBUjsKKworICAgICAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1JfSU5JVF9CVUZGRVIoJmlucHV0RGVzYywgKFBWT0lEKSZmbGFncywgc2l6ZW9mKGZsYWdzKSk7CisgICAgICAgIHN0YXR1cyA9IFNlcmlhbFNlbmRJb2N0bChBZGFwdGVyQ29udGV4dCwgSU9DVExfU0VSSUFMX1BVUkdFLCAmd3JzbywgJmlucHV0RGVzYyk7CisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiSU9DVExfU0VSSUFMX1BVUkdFIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBTZXJpYWxTZW5kSW9jdGwoQWRhcHRlckNvbnRleHQsIElPQ1RMX1NFUklBTF9DTEVBUl9TVEFUUywgJndyc28pOworCisgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIklPQ1RMX1NFUklBTF9DTEVBUl9TVEFUUyBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gU2VyaWFsQ2hlY2tTdGF0dXMoQWRhcHRlckNvbnRleHQsIGZhbHNlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7ICFOVF9TVUNDRVNTKHN0YXR1cykgJiYgaSA8IDIwOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNU2xlZXAoMSk7IC8vIGp1c3Qgc2xlZXAgZW5vdWdoIHRvIGdpdmUgdXAgb3VyIHF1YW50dW0KKyAgICAgICAgICAgIHN0YXR1cyA9IFNlcmlhbENoZWNrU3RhdHVzKEFkYXB0ZXJDb250ZXh0LCBmYWxzZSk7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKGZhbHNlKTsKKworICAgIExvZ0Z1bmNFeGl0TlQoRFJJVkVSX0RFRkFVTFQsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorYm9vbAorU2VyaWFsUHVzaFNlbmQoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0LAorICAgIF9Jbl8gUFNFUklBTF9TRU5EX0lURU0gICAgICBTZW5kSXRlbQorICAgICkKK3sKKyAgICBXZGZTcGluTG9ja0FjcXVpcmUoQWRhcHRlckNvbnRleHQtPlNlbmRMb2NrKTsKKyAgICAKKyAgICAvLyBTdGFydCB0aGUgd29yayBpdGVtIHVwIGlmIGl0J3Mgbm90IGFscmVhZHkgcnVubmluZworICAgIGlmICghQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZVJ1bm5pbmcpCisgICAgeworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiU3RhcnRpbmcgU2VuZCBXb3JrIEl0ZW0iKTsKKyAgICAgICAgQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZVJ1bm5pbmcgPSB0cnVlOworICAgICAgICBXZGZXb3JrSXRlbUVucXVldWUoQWRhcHRlckNvbnRleHQtPlNlbmRXb3JrSXRlbSk7CisgICAgfQorCisgICAgLy8gSW5zZXJ0IHRoZSBuZXcgaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgSW5zZXJ0VGFpbExpc3QoJkFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWUsICZTZW5kSXRlbS0+TGluayk7CisKKyAgICBXZGZTcGluTG9ja1JlbGVhc2UoQWRhcHRlckNvbnRleHQtPlNlbmRMb2NrKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorUFNFUklBTF9TRU5EX0lURU0KK1NlcmlhbFBvcFNlbmQoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0CisgICAgKQoreworICAgIFBMSVNUX0VOVFJZIGN1cnJlbnQgPSBOVUxMOworCisgICAgLy8gR3JhYiB0aGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIC8vIENhcmVmdWwsIHRoaXMgbWlnaHQgaGF2ZSBnb3R0ZW4gYWJvcnRlZCwgbGVhdmluZyB0aGUgbGlzdCBlbXB0eQorICAgIFdkZlNwaW5Mb2NrQWNxdWlyZShBZGFwdGVyQ29udGV4dC0+U2VuZExvY2spOworCisgICAgaWYgKCFJc0xpc3RFbXB0eSgmQWRhcHRlckNvbnRleHQtPlNlbmRRdWV1ZSkpCisgICAgeworICAgICAgICBjdXJyZW50ID0gUmVtb3ZlSGVhZExpc3QoJkFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWUpOworICAgIH0KKyAgICBpZiAoY3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gRG8gdGhpcyB1bmRlciB0aGUgbG9jaywgYnV0IHRoZSBzdGF0ZSBpcyBjb25zdW1lZCBvdXRzaWRlIHRoZSBsb2NrCisgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5TZW5kUXVldWVSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJTZW5kIFdvcmsgSXRlbSBDb21wbGV0ZSIpOworICAgIH0KKworICAgIFdkZlNwaW5Mb2NrUmVsZWFzZShBZGFwdGVyQ29udGV4dC0+U2VuZExvY2spOworCisgICAgcmV0dXJuIGN1cnJlbnQgPyBDT05UQUlOSU5HX1JFQ09SRChjdXJyZW50LCBTRVJJQUxfU0VORF9JVEVNLCBMaW5rKSA6IE5VTEw7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitOVFNUQVRVUworU2VyaWFsU2VuZERhdGEoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIFBORVRfQlVGRkVSX0xJU1QgICAgICAgICAgIE5ldEJ1ZmZlckxpc3QKKyAgICApCisvKisrCitSb3V0aW5lIERlc2NyaXB0aW9uOgorCisgICAgU2VyaWFsU2VuZERhdGEgZW5jb2RlcyBhbmQgcXVldWVzIHVwIHRoZSBkYXRhIHRvIGJlIHNlbnQgb3ZlciB0aGUgc2VyaWFsIENPTSBwb3J0LgorCitBcmd1bWVudHM6CisKKyAgICBBZGFwdGVyQ29udGV4dCAtIGhhbmRsZSB0byBhIE9UVE1QIEFkYXB0ZXIKKworICAgIE5ldEJ1ZmZlckxpc3RzIC0gYSBzaW5nbGUgTkVUX0JVRkZFUl9MSVNUIG9iamVjdCwgY29udGFpbmluZyBhIHNpZ25sZSBORVRfQlVGRkVSIGZvciAKKyAgICAgICAgICAgICAgICAgICAgIFNwaW5lbCB0dW5uZWwgY29tbWFuZHMuCisKKyAgICBEaXNwYXRjaExldmVsICAtIGZsYWcgaW5kaWNhdGluZyBpZiB3ZSBhcmUgcnVubmluZyBhdCBkaXNwYXRjaCBvciBub3QKKworUmV0dXJuIFZhbHVlOgorCisgICAgTlRTVEFUVVMgICAgLSBBIGZhaWx1cmUgaGVyZSB3aWxsIGluZGljYXRlIHdlIGVpdGhlciBmYWlsZWQgdG8gZW5jb2RlIG9yIHF1ZXVlIHRoZSBkYXRhLgorLS0qLworeworICAgIE5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFUyBhdHRyaWJ1dGVzOworICAgIFdERk1FTU9SWSBXZGZNZW1CdWZmZXIgPSBOVUxMOworICAgIFBTRVJJQUxfU0VORF9JVEVNIFNlbmRJdGVtID0gTlVMTDsKKyAgICBQVUNIQVIgRGVjb2RlZEJ1ZmZlciA9IE5VTEw7CisgICAgVUxPTkcgRGVjb2RlZEJ1ZmZlckxlbmd0aCA9IE5ldEJ1ZmZlckxpc3QtPkZpcnN0TmV0QnVmZmVyLT5EYXRhTGVuZ3RoOworICAgIFVMT05HIEVuY29kZWRCdWZmZXJMZW5ndGg7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIC8vIEdldCB0aGUgZGVjb2RlZCBidWZmZXIgZnJvbSB0aGUgTkJML05CLiBXZSByZXF1aXJlZAorICAgICAgICAvLyB0aGUgdXNlIG9mIGNvbnRpZ3VvdXMgYnVmZmVycy4KKyAgICAgICAgRGVjb2RlZEJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyTGlzdC0+Rmlyc3ROZXRCdWZmZXIsIERlY29kZWRCdWZmZXJMZW5ndGgsIE5VTEwsIDEsIDApOworICAgICAgICBpZiAoRGVjb2RlZEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG9nVmVyYm9zZShEUklWRVJfREVGQVVMVCwgIlNlbmRpbmcgJXUgZGVjb2RlZCBieXRlcyIsIERlY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICBEdW1wQnVmZmVyKERlY29kZWRCdWZmZXIsIERlY29kZWRCdWZmZXJMZW5ndGgpOworCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYnVmZmVyIHNpemUgcmVxdWlyZWQKKyAgICAgICAgRW5jb2RlZEJ1ZmZlckxlbmd0aCA9IEhkbGNDb21wdXRlRW5jb2RlZExlbmd0aChEZWNvZGVkQnVmZmVyLCBEZWNvZGVkQnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBtZW1vcnkKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTX0lOSVQoJmF0dHJpYnV0ZXMpOworICAgICAgICBhdHRyaWJ1dGVzLlBhcmVudE9iamVjdCA9IEFkYXB0ZXJDb250ZXh0LT5EZXZpY2U7CisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhzdXBwcmVzczogMjgxNjApIC8vIFBhcmFtIDMgY291bGQgYmUgMAorICAgICAgICBzdGF0dXMgPSBXZGZNZW1vcnlDcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICBOb25QYWdlZFBvb2xOeCwKKyAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgU0VSSUFMX1NFTkRfSVRFTV9TSVpFICsgRW5jb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgJldkZk1lbUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgKFBWT0lEKikmU2VuZEl0ZW0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyNwcmFnbWEgd2FybmluZyhwb3ApCisKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJXZGZNZW1vcnlDcmVhdGUgKCV1IGJ5dGVzKSBmYWlsZWQgJSFTVEFUVVMhIiwgKFNFUklBTF9TRU5EX0lURU1fU0laRSArIEVuY29kZWRCdWZmZXJMZW5ndGgpLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNlbmRJdGVtLT5OZXRCdWZmZXJMaXN0ID0gTmV0QnVmZmVyTGlzdDsKKyAgICAgICAgU2VuZEl0ZW0tPldkZk1lbW9yeSA9IFdkZk1lbUJ1ZmZlcjsKKyAgICAgICAgU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXJMZW5ndGggPSBFbmNvZGVkQnVmZmVyTGVuZ3RoOworCisgICAgICAgIC8vIEVuY29kZSBkYXRhCisgICAgICAgIGlmICghSGRsY0VuY29kZUJ1ZmZlcihEZWNvZGVkQnVmZmVyLCBEZWNvZGVkQnVmZmVyTGVuZ3RoLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlciwgRW5jb2RlZEJ1ZmZlckxlbmd0aCkpIHsKKyAgICAgICAgICAgIE5UX0FTU0VSVChGQUxTRSk7IC8vIFNob3VsZCBuZXZlciBmYWlsLCB1bmxlc3Mgd2UgaGF2ZSBhIGJ1ZyBpbiB0aGUgbGVuZ3RoIGNvbXB1dGF0aW9uCisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gUXVldWUgZGF0YSB0byBiZSBzZW50IG91dAorICAgICAgICBpZiAoIVNlcmlhbFB1c2hTZW5kKEFkYXB0ZXJDb250ZXh0LCBTZW5kSXRlbSkpIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19ERVZJQ0VfTk9UX1JFQURZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKGZhbHNlKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIGlmIChXZGZNZW1CdWZmZXIpIHsKKyAgICAgICAgICAgIFdkZk9iamVjdERlbGV0ZShXZGZNZW1CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgTG9nRnVuY0V4aXROVChEUklWRVJfREVGQVVMVCwgc3RhdHVzKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK1BBR0VECitfRnVuY3Rpb25fY2xhc3NfKEVWVF9XREZfV09SS0lURU0pCitfSVJRTF9yZXF1aXJlc19zYW1lXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsU2VuZExvb3AoCisgICAgX0luXyBXREZXT1JLSVRFTSBXb3JrSXRlbQorICAgICkKKy8qKysKK1JvdXRpbmUgRGVzY3JpcHRpb246CisKKyAgICBTZXJpYWxTZW5kTG9vcCBoYW5kbGVzIHRoZSBhY3R1YWwgc2VuZGluZyBvZiBkYXRhIG92ZXIgdGhlIHNlcmlhbCBDT00gcG9ydC4KKworQXJndW1lbnRzOgorCisgICAgV29ya0l0ZW0gLSBoYW5kbGUgdG8gYSBXZGYgRGV2aWNlIEluZm8gb2JqZWN0IGZvciB0aGUgQWRhcHRlciBjb250ZXh0CisKKy0tKi8KK3sKKyAgICBQT1RUTVBfQURBUFRFUl9DT05URVhUIEFkYXB0ZXJDb250ZXh0ID0gR2V0V2RmRGV2aWNlSW5mbyhXb3JrSXRlbSktPkFkYXB0ZXJDb250ZXh0OworICAgIFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OUyB3cnNvID0geworICAgICAgICBzaXplb2YoV0RGX1JFUVVFU1RfU0VORF9PUFRJT05TKSwKKyAgICAgICAgV0RGX1JFUVVFU1RfU0VORF9PUFRJT05fVElNRU9VVCB8IFdERl9SRVFVRVNUX1NFTkRfT1BUSU9OX1NZTkNIUk9OT1VTLAorICAgICAgICBXREZfUkVMX1RJTUVPVVRfSU5fU0VDKDEpIC8vIE5vdGhpbmcgc2hvdWxkIHRha2UgbW9yZSB0aGFuIGEgc2Vjb25kIHRvIGNvbXBsZXRlCisgICAgfTsKKyAgICBXREZNRU1PUllfT0ZGU0VUIG9mZnNldCA9IHsgMCB9OworICAgIFBTRVJJQUxfU0VORF9JVEVNIFNlbmRJdGVtID0gTlVMTDsKKyAgICBXREZfTUVNT1JZX0RFU0NSSVBUT1Igd21kOworICAgIE5UU1RBVFVTIHN0YXR1czsKKworICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFUyBBdHRyaWJ1dGVzOworICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUKCZBdHRyaWJ1dGVzKTsKKyAgICBBdHRyaWJ1dGVzLlBhcmVudE9iamVjdCA9IEFkYXB0ZXJDb250ZXh0LT5EZXZpY2U7CisKKyAgICBMb2dGdW5jRW50cnkoRFJJVkVSX0RFRkFVTFQpOworCisgICAgUEFHRURfQ09ERSgpOworCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhzdXBwcmVzczogNjM4NykgLy8gUGFyYW0gMiBpcyBOVUxMCisgICAgV0RGX01FTU9SWV9ERVNDUklQVE9SX0lOSVRfSEFORExFKCZ3bWQsIE5VTEwsICZvZmZzZXQpOworI3ByYWdtYSB3YXJuaW5nKHBvcCkKKworICAgIHdoaWxlIChOVUxMICE9IChTZW5kSXRlbSA9IFNlcmlhbFBvcFNlbmQoQWRhcHRlckNvbnRleHQpKSkKKyAgICB7CisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJTZW5kaW5nICV1IGVuY29kZWQgYnl0ZXMiLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCk7CisgICAgICAgIER1bXBCdWZmZXIoU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXIsIFNlbmRJdGVtLT5FbmNvZGVkQnVmZmVyTGVuZ3RoKTsKKworICAgICAgICBpZiAoU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXJMZW5ndGggPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQuQnVmZmVyTGVuZ3RoID0gU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXJMZW5ndGg7CisgICAgICAgICAgICBzdGF0dXMgPSAKKyAgICAgICAgICAgICAgICBXZGZNZW1vcnlDcmVhdGVQcmVhbGxvY2F0ZWQoCisgICAgICAgICAgICAgICAgICAgICZBdHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICAgICAgU2VuZEl0ZW0tPkVuY29kZWRCdWZmZXIsIAorICAgICAgICAgICAgICAgICAgICBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICZ3bWQudS5IYW5kbGVUeXBlLk1lbW9yeSk7CisKKyAgICAgICAgICAgIGlmICghTlRfU1VDQ0VTUyggc3RhdHVzICkpIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZklvVGFyZ2V0U2VuZFdyaXRlU3luY2hyb25vdXNseSAoJXUgYnl0ZXMpIGZhaWxlZCAlIVNUQVRVUyEiLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIHRoZSBidWZmZXIgb3V0CisgICAgICAgICAgICAgICAgc3RhdHVzID0gV2RmSW9UYXJnZXRTZW5kV3JpdGVTeW5jaHJvbm91c2x5KEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCwgTlVMTCwgJndtZCwgTlVMTCwgJndyc28sIE5VTEwpOworCisgICAgICAgICAgICAgICAgaWYgKCFOVF9TVUNDRVNTKCBzdGF0dXMgKSkgeworICAgICAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZklvVGFyZ2V0U2VuZFdyaXRlU3luY2hyb25vdXNseSAoJXUgYnl0ZXMpIGZhaWxlZCAlIVNUQVRVUyEiLCBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBXZGZPYmplY3REZWxldGUod21kLnUuSGFuZGxlVHlwZS5NZW1vcnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcGxldGUgdGhlIE5ldEJ1ZmZlckxpc3QKKyAgICAgICAgU2VuZEl0ZW0tPk5ldEJ1ZmZlckxpc3QtPlN0YXR1cyA9IHN0YXR1czsKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKyAgICAgICAgTmRpc01TZW5kTmV0QnVmZmVyTGlzdHNDb21wbGV0ZShBZGFwdGVyQ29udGV4dC0+QWRhcHRlciwgU2VuZEl0ZW0tPk5ldEJ1ZmZlckxpc3QsIDApOworI2Vsc2UKKyAgICAgICAgTmV0QnVmZmVyTGlzdHNDb21wbGV0ZVNlbmQoU2VuZEl0ZW0tPk5ldEJ1ZmZlckxpc3QpOworI2VuZGlmCisKKyAgICAgICAgLy8gSGFjayB0byBzbGVlcCAxIG1zIHBlciA1IGJ5dGVzIHNlbnQKKyAgICAgICAgTmRpc01TbGVlcCgxMDAwICogKDEgKyBTZW5kSXRlbS0+RW5jb2RlZEJ1ZmZlckxlbmd0aCAvIDUpKTsKKworICAgICAgICAvLyBDbGVhbnVwCisgICAgICAgIFdkZk9iamVjdERlbGV0ZShTZW5kSXRlbS0+V2RmTWVtb3J5KTsKKyAgICB9OworCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitQQUdFRAorX0Z1bmN0aW9uX2NsYXNzXyhFVlRfV0RGX1dPUktJVEVNKQorX0lSUUxfcmVxdWlyZXNfc2FtZV8KK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK1ZPSUQKK1NlcmlhbFJlY3ZMb29wKAorICAgIF9Jbl8gV0RGV09SS0lURU0gV29ya0l0ZW0KKyAgICApCit7CisgICAgUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCA9IEdldFdkZkRldmljZUluZm8oV29ya0l0ZW0pLT5BZGFwdGVyQ29udGV4dDsKKyAgICBXREZNRU1PUlkgbWVtID0geyAwIH07CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFBBR0VEX0NPREUoKTsKKworICAgIGRvCisgICAgeworICAgICAgICBXREZSRVFVRVNUICYgcmVxdWVzdCA9IEFkYXB0ZXJDb250ZXh0LT5SZWN2UmVhZFJlcXVlc3Q7CisKKyAgICAgICAgV0RGX09CSkVDVF9BVFRSSUJVVEVTIGF0dHJpYnV0ZXM7CisgICAgICAgIFdERl9PQkpFQ1RfQVRUUklCVVRFU19JTklUKCZhdHRyaWJ1dGVzKTsKKyAgICAgICAgYXR0cmlidXRlcy5QYXJlbnRPYmplY3QgPSBBZGFwdGVyQ29udGV4dC0+RGV2aWNlOworICAgICAgICBzdGF0dXMgPQorICAgICAgICAgICAgV2RmTWVtb3J5Q3JlYXRlUHJlYWxsb2NhdGVkKAorICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoLCAKKyAgICAgICAgICAgICAgICBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RILCAKKyAgICAgICAgICAgICAgICAmbWVtKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZNZW1vcnlDcmVhdGVGcm9tTG9va2FzaWRlIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBXZGZJb1RhcmdldEZvcm1hdFJlcXVlc3RGb3JSZWFkKEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCwgcmVxdWVzdCwgbWVtLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZJb1RhcmdldEZvcm1hdFJlcXVlc3RGb3JSZWFkIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBXZGZSZXF1ZXN0U2V0Q29tcGxldGlvblJvdXRpbmUocmVxdWVzdCwgU2VyaWFsUmVjdkNvbXBsZXRlLCBBZGFwdGVyQ29udGV4dCk7CisgICAgICAgICAgICBpZiAoV2RmUmVxdWVzdFNlbmQocmVxdWVzdCwgQWRhcHRlckNvbnRleHQtPldkZklvVGFyZ2V0LCBXREZfTk9fU0VORF9PUFRJT05TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIHN1Y2NlZWRlZCwgbm8gY2xlYW51cAorICAgICAgICAgICAgICAgIG1lbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXR1cyA9IFdkZlJlcXVlc3RHZXRTdGF0dXMocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZlJlcXVlc3RTZW5kIGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXREZfUkVRVUVTVF9SRVVTRV9QQVJBTVMgcmV1c2VQYXJhbXMgPSB7IDAgfTsKKyAgICAgICAgICAgIFdERl9SRVFVRVNUX1JFVVNFX1BBUkFNU19JTklUKCZyZXVzZVBhcmFtcywgV0RGX1JFUVVFU1RfUkVVU0VfTk9fRkxBR1MsIFNUQVRVU19TVUNDRVNTKTsKKworICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgcmVxdWVzdCBzbyBpdCBpcyByZWFkeSB0byByZXVzZQorICAgICAgICAgICAgc3RhdHVzID0gV2RmUmVxdWVzdFJldXNlKHJlcXVlc3QsICZyZXVzZVBhcmFtcyk7CisgICAgICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOVF9BU1NFUlQoTlRfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBMb2dFcnJvcihEUklWRVJfREVGQVVMVCwgIldkZlJlcXVlc3RSZXVzZSBmYWlsZWQgJSFTVEFUVVMhIiwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoZmFsc2UpOworCisgICAgaWYgKG1lbSkgeworICAgICAgICBXZGZPYmplY3REZWxldGUobWVtKTsKKyAgICB9CisKKyAgICBMb2dGdW5jRXhpdChEUklWRVJfREVGQVVMVCk7Cit9CisKK19JUlFMX3JlcXVpcmVzX21heF8oRElTUEFUQ0hfTEVWRUwpCitfV2hlbl8ocmV0dXJuPT0wLF9BdF8oKnBOZXRCdWZmZXJMaXN0LCBfX2Rydl9hbGxvY2F0ZXNNZW0obWVtKSkpCitfV2hlbl8ocmV0dXJuPT0wLF9BdF8oKCpwTmV0QnVmZmVyTGlzdCktPkZpcnN0TmV0QnVmZmVyLCBfX2Rydl9hbGxvY2F0ZXNNZW0obWVtKSkpCitOVFNUQVRVUworU2VyaWFsQWxsb2NhdGVOZXRCdWZmZXJMaXN0KAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBVTE9ORyAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJMZW5ndGgsCisgICAgX091dF8gUE5FVF9CVUZGRVJfTElTVCAgICAgICAgICpwTmV0QnVmZmVyTGlzdAorICAgICkKK3sKKyAgICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAgICBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworICAgIFBORVRfQlVGRkVSIE5ldEJ1ZmZlciA9IE5VTEw7CisKKyAgICBkbworICAgIHsKKworI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgTmV0QnVmZmVyTGlzdAorICAgICAgICBOZXRCdWZmZXJMaXN0ID0gTmRpc0FsbG9jYXRlTmV0QnVmZmVyTGlzdChBZGFwdGVyQ29udGV4dC0+cEdsb2JhbHMtPmhOYmxQb29sLCAwLCAwKTsKKworICAgICAgICBpZiAoTmV0QnVmZmVyTGlzdCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb2NhdGUgdGhlIE5ldEJ1ZmZlcgorICAgICAgICBOZXRCdWZmZXJMaXN0LT5GaXJzdE5ldEJ1ZmZlciA9IE5kaXNBbGxvY2F0ZU5ldEJ1ZmZlck1kbEFuZERhdGEoQWRhcHRlckNvbnRleHQtPnBHbG9iYWxzLT5oTmJQb29sKTsKKworICAgICAgICBpZiAoTmV0QnVmZmVyTGlzdC0+Rmlyc3ROZXRCdWZmZXIgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLy8gR3JhYiBhIE5ldEJ1ZmZlckxpc3QgZnJvbSB0aGUgY29sbGVjdGlvbgorICAgICAgICBzdGF0dXMgPSBOZXRCdWZmZXJMaXN0Q29sbGVjdGlvblJldHJpZXZlTmJscyhBZGFwdGVyQ29udGV4dC0+UmVjZWl2ZUNvbGxlY3Rpb24sIDEsICZOZXRCdWZmZXJMaXN0KTsKKworICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIE5ESVNfU1RBVFVTIG5kaXNTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICBOZXRCdWZmZXIgPSBOZXRCdWZmZXJMaXN0LT5GaXJzdE5ldEJ1ZmZlcjsKKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBidWZmZXIgYWxsb2NhdGVkIHlldCwgZ28gYWhlYWQgYW5kIGFsbG9jYXRlIHRoZSBtYXgKKyAgICAgICAgaWYgKE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgbWF4IGJ1ZmZlciBzaXplCisgICAgICAgICAgICBuZGlzU3RhdHVzID0gTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RILCAwLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChuZGlzU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJOZGlzUmV0cmVhdE5ldEJ1ZmZlckRhdGFTdGFydCBmYWlsZWQgJSFORElTX1NUQVRVUyEiLCBuZGlzU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ5IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGEgTmV0QnVmZmVyIHdpdGggYSBjb250aWd1b3VzIG1lbW9yeSBibG9jayBvZiBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RIIGJ5dGVzLAorICAgICAgICAvLyB0aG91Z2ggaXQncyBvZmZzZXQgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGJ1ZmZlciwgZnJvbSB3aGVuIGl0IHdhcyBwcmV2aW91c2x5IHVzZWQuCisKKyAgICAgICAgLy8gQWRqdXN0IGJ1ZmZlciBsZW5ndGggdG8gZml0IHRoZSByZXF1ZXN0ZWQgbGVuZ3RoCisgICAgICAgIGlmIChORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlcikgPiBCdWZmZXJMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNBZHZhbmNlTmV0QnVmZmVyRGF0YVN0YXJ0KE5ldEJ1ZmZlciwgTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChOZXRCdWZmZXIpIC0gQnVmZmVyTGVuZ3RoLCBGQUxTRSwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoTkVUX0JVRkZFUl9EQVRBX0xFTkdUSChOZXRCdWZmZXIpIDwgQnVmZmVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBuZGlzU3RhdHVzID0gTmRpc1JldHJlYXROZXRCdWZmZXJEYXRhU3RhcnQoTmV0QnVmZmVyLCBCdWZmZXJMZW5ndGggLSBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlciksIDAsIE5VTEwpOworICAgICAgICAgICAgTlRfQVNTRVJUKG5kaXNTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisgICAgICAgICAgICBpZiAobmRpc1N0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQKKyAgICAgICAgKnBOZXRCdWZmZXJMaXN0ID0gTmV0QnVmZmVyTGlzdDsKKworICAgIH0gd2hpbGUgKEZBTFNFKTsKKworICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgIHsKKyNpZmRlZiBPVFRNUF9MRUdBQ1kKKyAgICAgICAgaWYgKE5ldEJ1ZmZlcikgTmRpc0ZyZWVOZXRCdWZmZXIoTmV0QnVmZmVyKTsKKyAgICAgICAgaWYgKE5ldEJ1ZmZlckxpc3QpIE5kaXNGcmVlTmV0QnVmZmVyTGlzdChOZXRCdWZmZXJMaXN0KTsKKyNlbHNlCisgICAgICAgIGlmIChOZXRCdWZmZXJMaXN0KSBOZXRCdWZmZXJMaXN0c0Rpc2NhcmRSZWNlaXZlKE5ldEJ1ZmZlckxpc3QpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX0Z1bmN0aW9uX2NsYXNzXyhFVlRfV0RGX1JFUVVFU1RfQ09NUExFVElPTl9ST1VUSU5FKQorX0lSUUxfcmVxdWlyZXNfc2FtZV8KK1ZPSUQKK1NlcmlhbFJlY3ZDb21wbGV0ZSgKKyAgICBfSW5fIFdERlJFUVVFU1QgUmVxdWVzdCwKKyAgICBfSW5fIFdERklPVEFSR0VUIFRhcmdldCwKKyAgICBfSW5fIFBXREZfUkVRVUVTVF9DT01QTEVUSU9OX1BBUkFNUyBQYXJhbXMsCisgICAgX0luXyBXREZDT05URVhUIENvbnRleHQKKyAgICApCit7CisgICAgUE9UVE1QX0FEQVBURVJfQ09OVEVYVCBBZGFwdGVyQ29udGV4dCA9IChQT1RUTVBfQURBUFRFUl9DT05URVhUKUNvbnRleHQ7CisgICAgTlRTVEFUVVMgc3RhdHVzOworCisgICAgTG9nRnVuY0VudHJ5KERSSVZFUl9ERUZBVUxUKTsKKworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoVGFyZ2V0KTsgLy8gRXhjZXB0IGZvciBhbiBhc3NlcnQKKyAgICBOVF9BU1NFUlQoKFRhcmdldCA9PSBBZGFwdGVyQ29udGV4dC0+V2RmSW9UYXJnZXQpIHx8IChXREZfTk9fSEFORExFID09IEFkYXB0ZXJDb250ZXh0LT5XZGZJb1RhcmdldCkpOworICAgIE5UX0FTU0VSVChSZXF1ZXN0ID09IEFkYXB0ZXJDb250ZXh0LT5SZWN2UmVhZFJlcXVlc3QpOworCisgICAgV0RGTUVNT1JZIG1lbSA9IFBhcmFtcy0+UGFyYW1ldGVycy5SZWFkLkJ1ZmZlcjsKKyAgICBOVF9BU1NFUlQobWVtKTsKKworICAgIHN0YXR1cyA9IFdkZlJlcXVlc3RHZXRTdGF0dXMoUmVxdWVzdCk7CisgICAgaWYgKE5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICB7CisgICAgICAgIE5UX0FTU0VSVChQYXJhbXMtPlR5cGUgPT0gV2RmUmVxdWVzdFR5cGVSZWFkKTsKKyAgICAgICAgTlRfQVNTRVJUKFBhcmFtcy0+UGFyYW1ldGVycy5SZWFkLk9mZnNldCA9PSAwKTsKKworICAgICAgICBzaXplX3QgTWVtb3J5TGVuZ3RoID0gMDsKKyAgICAgICAgTlRfQVNTRVJUKEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyICsgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPT0gKFBVQ0hBUilXZGZNZW1vcnlHZXRCdWZmZXIobWVtLCAmTWVtb3J5TGVuZ3RoKSk7CisgICAgICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoTWVtb3J5TGVuZ3RoKTsKKworICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjZWl2ZWQgJXUgZW5jb2RlZCBieXRlcyIsIChVTE9ORylQYXJhbXMtPklvU3RhdHVzLkluZm9ybWF0aW9uKTsKKyAgICAgICAgRHVtcEJ1ZmZlcihBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoLCAoVUxPTkcpUGFyYW1zLT5Jb1N0YXR1cy5JbmZvcm1hdGlvbik7CisKKyAgICAgICAgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggKz0gKFVMT05HKVBhcmFtcy0+SW9TdGF0dXMuSW5mb3JtYXRpb247CisgICAgICAgIAorICAgICAgICAvLyBEZWNvZGUgYW5kIHJlY2VpdmUKKyAgICAgICAgVUxPTkcgUmVhZE9mZnNldCA9IDA7CisgICAgICAgIHdoaWxlIChBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlckxlbmd0aCA+IFJlYWRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFBhcnNlLCB2YWxpZGF0ZSBhbmQgY29tcHV0ZSB0aGUgZGVjb2RlZCBidWZmZXIgc2l6ZSByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIFVMT05HIFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoID0gQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggLSBSZWFkT2Zmc2V0OworICAgICAgICAgICAgVUxPTkcgRGVjb2RlZEJ1ZmZlckxlbmd0aCA9IDA7CisgICAgICAgICAgICBib29sIEhhc0dvb2RCdWZmZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgSGFzQ29tcGxldGVCdWZmZXIgPSAKKyAgICAgICAgICAgICAgICBIZGxjRGVjb2RlQnVmZmVyKAorICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIFJlYWRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICZVc2VkRW5jb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgJkRlY29kZWRCdWZmZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICZIYXNHb29kQnVmZmVyKTsKKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdXNlZCBtb3JlIGJ1ZmZlciB0aGFuIGF2YWlsYWJsZQorICAgICAgICAgICAgTlRfQVNTRVJUKFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoIDw9IEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoIC0gUmVhZE9mZnNldCk7CisKKyAgICAgICAgICAgIC8vIERpZCB3ZSBoYXZlIGEgY29tcGxldGUgKHN0YXJ0IGFuZCBlbmQgc2VxdWVuY2UgY2hhcnMpIGJ1ZmZlcj8KKyAgICAgICAgICAgIGlmICghSGFzQ29tcGxldGVCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggLT0gUmVhZE9mZnNldDsKKworICAgICAgICAgICAgICAgIExvZ1dhcm5pbmcoRFJJVkVSX0RFRkFVTFQsICJCdWZmZXJpbmcgJXUgaW5jb21wbGV0ZSBieXRlcyIsIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBOVF9BU1NFUlQoQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPCBNQVhfU1BJTkVMX0NPTU1BTkRfTEVOR1RIKTsKKworICAgICAgICAgICAgICAgIG1lbW1vdmVfcyhBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciwgc2l6ZW9mKEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyICsgUmVhZE9mZnNldCwgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdhcyB0aGUgYnVmZmVyIHRvbyBzaG9ydCBvciBkaWQgaXQncyBGQ1Mgbm90IG1hdGNoPworICAgICAgICAgICAgICAgIGlmIChIYXNHb29kQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTlRfQVNTRVJUKFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoIDw9IE1BWF9TUElORUxfQ09NTUFORF9MRU5HVEgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEFsbG9jYXRlIHRoZSBOZXRCdWZmZXJMaXN0ICYgTmV0QnVmZmVyIHRvIGRlY29kZSB0aGUgZGF0YSB0bworICAgICAgICAgICAgICAgICAgICBQTkVUX0JVRkZFUl9MSVNUIE5ldEJ1ZmZlckxpc3QgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTZXJpYWxBbGxvY2F0ZU5ldEJ1ZmZlckxpc3QoQWRhcHRlckNvbnRleHQsIERlY29kZWRCdWZmZXJMZW5ndGgsICZOZXRCdWZmZXJMaXN0KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQTkVUX0JVRkZFUiBOZXRCdWZmZXIgPSBOZXRCdWZmZXJMaXN0LT5GaXJzdE5ldEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChEZWNvZGVkQnVmZmVyTGVuZ3RoID09IE5FVF9CVUZGRVJfREFUQV9MRU5HVEgoTmV0QnVmZmVyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBwb2ludGVyIHRvIGNvbnRpZ3VvdXMgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICBQVUNIQVIgRGVjb2RlZEJ1ZmZlciA9IChQVUNIQVIpTmRpc0dldERhdGFCdWZmZXIoTmV0QnVmZmVyLCBEZWNvZGVkQnVmZmVyTGVuZ3RoLCBOVUxMLCAxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChEZWNvZGVkQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEZWNvZGVkQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc0NvbXBsZXRlQnVmZmVyID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhkbGNEZWNvZGVCdWZmZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dC0+UmVjdkJ1ZmZlciArIFJlYWRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNlZEVuY29kZWRCdWZmZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVjb2RlZEJ1ZmZlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZWRCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSGFzR29vZEJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoSGFzQ29tcGxldGVCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5UX0FTU0VSVChIYXNHb29kQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVF9BU1NFUlQoRGVjb2RlZEJ1ZmZlckxlbmd0aCA9PSBORVRfQlVGRkVSX0RBVEFfTEVOR1RIKE5ldEJ1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dWZXJib3NlKERSSVZFUl9ERUZBVUxULCAiUmVjZWl2ZWQgJXUgZGVjb2RlZCBieXRlcyIsIERlY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXBCdWZmZXIoRGVjb2RlZEJ1ZmZlciwgRGVjb2RlZEJ1ZmZlckxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHVwIHRoZSBuZXcgTkJMIHdlIGp1c3QgY3JlYXRlZAorI2lmZGVmIE9UVE1QX0xFR0FDWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNNSW5kaWNhdGVSZWNlaXZlTmV0QnVmZmVyTGlzdHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0LT5BZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRCdWZmZXJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORElTX0RFRkFVTFRfUE9SVF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0QnVmZmVyTGlzdHNDb21wbGV0ZVJlY2VpdmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJ1ZmZlckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ESVNfREVGQVVMVF9QT1JUX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisjaWZkZWYgT1RUTVBfTEVHQUNZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmRpc0ZyZWVOZXRCdWZmZXIoTmV0QnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZGlzRnJlZU5ldEJ1ZmZlckxpc3QoTmV0QnVmZmVyTGlzdCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJ1ZmZlckxpc3RzRGlzY2FyZFJlY2VpdmUoTmV0QnVmZmVyTGlzdCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2dXYXJuaW5nKERSSVZFUl9ERUZBVUxULCAiRHJvcHBpbmcgJXUgYmFkIGJ5dGVzIiwgVXNlZEVuY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBEdW1wQnVmZmVyKEFkYXB0ZXJDb250ZXh0LT5SZWN2QnVmZmVyICsgUmVhZE9mZnNldCwgVXNlZEVuY29kZWRCdWZmZXJMZW5ndGgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciB1c2VkIGRhdGEKKyAgICAgICAgICAgICAgICBSZWFkT2Zmc2V0ICs9IFVzZWRFbmNvZGVkQnVmZmVyTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgcmVhZCBhbGwgdGhlIGJ1ZmZlciwgc28gcmVzZXQgdGhlIGxlbmd0aAorICAgICAgICBpZiAoQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPT0gUmVhZE9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgQWRhcHRlckNvbnRleHQtPlJlY3ZCdWZmZXJMZW5ndGggPSAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIExvZ0Vycm9yKERSSVZFUl9ERUZBVUxULCAiUmVhZCByZXF1ZXN0IGZhaWxlZCAlIVNUQVRVUyEiLCBzdGF0dXMpOworICAgIH0KKworICAgIFdkZk9iamVjdERlbGV0ZShtZW0pOworCisgICAgaWYgKHN0YXR1cyAhPSBTVEFUVVNfREVMRVRFX1BFTkRJTkcpCisgICAgeworICAgICAgICBXREZfUkVRVUVTVF9SRVVTRV9QQVJBTVMgcmV1c2VQYXJhbXMgPSB7IDAgfTsKKyAgICAgICAgV0RGX1JFUVVFU1RfUkVVU0VfUEFSQU1TX0lOSVQoJnJldXNlUGFyYW1zLCBXREZfUkVRVUVTVF9SRVVTRV9OT19GTEFHUywgU1RBVFVTX1NVQ0NFU1MpOworICAgICAgICBzdGF0dXMgPSBXZGZSZXF1ZXN0UmV1c2UoUmVxdWVzdCwgJnJldXNlUGFyYW1zKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5UX0FTU0VSVChOVF9TVUNDRVNTKHN0YXR1cykpOworICAgICAgICAgICAgTG9nRXJyb3IoRFJJVkVSX0RFRkFVTFQsICJXZGZSZXF1ZXN0UmV1c2UgZmFpbGVkICUhU1RBVFVTISIsIHN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICJTdGFydGluZyByZWN2IHdvcmtlciIpOworICAgICAgICBXZGZXb3JrSXRlbUVucXVldWUoQWRhcHRlckNvbnRleHQtPlJlY3ZXb3JrSXRlbSk7CisgICAgfQorCisgICAgTG9nRnVuY0V4aXQoRFJJVkVSX0RFRkFVTFQpOworfQorCitWT0lEIAorRHVtcExpbmUoCisgICAgX0luX3JlYWRzX2J5dGVzXyhhTGVuZ3RoKSBQQ1VDSEFSIGFCdWYsIAorICAgIF9Jbl8gc2l6ZV90IGFMZW5ndGgKKyAgICApCit7CisgICAgY2hhciBidWZbODBdID0gezB9OworICAgIGNoYXIgKmN1ciA9IGJ1ZjsKKworICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICJ8Iik7CisgICAgY3VyICs9IDE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBpZiAoaSA8IGFMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICIgJTAyWCIsIGFCdWZbaV0pOworICAgICAgICAgICAgY3VyICs9IDM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzcHJpbnRmX3MoY3VyLCBzaXplb2YoYnVmKSAtIChjdXIgLSBidWYpLCAiIC4uIik7CisgICAgICAgICAgICBjdXIgKz0gMzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKChpICsgMSkgJSA4KSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ByaW50Zl9zKGN1ciwgc2l6ZW9mKGJ1ZikgLSAoY3VyIC0gYnVmKSwgIiB8Iik7CisgICAgICAgICAgICBjdXIgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICIgIik7CisgICAgY3VyICs9IDE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBpZiAoaSA8IGFMZW5ndGggJiYgaXNwcmludCgweDdmICYgYUJ1ZltpXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IDB4N2YgJiBhQnVmW2ldOworICAgICAgICAgICAgc3ByaW50Zl9zKGN1ciwgc2l6ZW9mKGJ1ZikgLSAoY3VyIC0gYnVmKSwgIiVjIiwgYyk7CisgICAgICAgICAgICBjdXIgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwcmludGZfcyhjdXIsIHNpemVvZihidWYpIC0gKGN1ciAtIGJ1ZiksICIuIik7CisgICAgICAgICAgICBjdXIgKz0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvZ1ZlcmJvc2UoRFJJVkVSX0RFRkFVTFQsICIlcyIsIGJ1Zik7Cit9CisKK1ZPSUQgCitEdW1wQnVmZmVyKAorICAgIF9Jbl9yZWFkc19ieXRlc18oYUxlbmd0aCkgUENVQ0hBUiBhQnVmLCAKKyAgICBfSW5fIHNpemVfdCBhTGVuZ3RoCisgICAgKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUxlbmd0aDsgaSArPSAxNikKKyAgICB7CisgICAgICAgIER1bXBMaW5lKGFCdWYgKyBpLCAoYUxlbmd0aCAtIGkpIDwgMTYgPyAoYUxlbmd0aCAtIGkpIDogMTYpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuaHBwIGIvZXhhbXBsZXMvZHJpdmVycy93aW5kb3dzL290dG1wL3NlcmlhbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1ODE5MgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2RyaXZlcnMvd2luZG93cy9vdHRtcC9zZXJpYWwuaHBwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworUEFHRUQKK19Ob19jb21wZXRpbmdfdGhyZWFkXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbEluaXRpYWxpemUoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitWT0lECitTZXJpYWxVbmluaXRpYWxpemUoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dAorICAgICk7CisKK1BBR0VECitfTm9fY29tcGV0aW5nX3RocmVhZF8KK19JUlFMX3JlcXVpcmVzX21heF8oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitTZXJpYWxJbml0aWFsaXplVGFyZ2V0KAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBQQ1dTVFIgICAgICAgICAgICAgICAgICAgICBUYXJnZXROYW1lCispOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsVW5pbml0aWFsaXplVGFyZ2V0KAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc19tYXhfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworU2VyaWFsQ29uZmlndXJlKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCitQQUdFRAorX0lSUUxfcmVxdWlyZXNfKFBBU1NJVkVfTEVWRUwpCitOVFNUQVRVUworU2VyaWFsQ2hlY2tTdGF0dXMoCisgICAgX0luXyBQT1RUTVBfQURBUFRFUl9DT05URVhUICAgICBBZGFwdGVyQ29udGV4dCwKKyAgICBfSW5fIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIERhdGFFeHBlY3RlZAorICAgICk7CisKK1BBR0VECitfSVJRTF9yZXF1aXJlc18oUEFTU0lWRV9MRVZFTCkKK05UU1RBVFVTCitTZXJpYWxGbHVzaEFuZENoZWNrU3RhdHVzKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQKKyAgICApOworCitfSVJRTF9yZXF1aXJlc19tYXhfKERJU1BBVENIX0xFVkVMKQorTlRTVEFUVVMKK1NlcmlhbFNlbmREYXRhKAorICAgIF9Jbl8gUE9UVE1QX0FEQVBURVJfQ09OVEVYVCAgICAgQWRhcHRlckNvbnRleHQsCisgICAgX0luXyBQTkVUX0JVRkZFUl9MSVNUICAgICAgICAgICBOZXRCdWZmZXJMaXN0cworICAgICk7CisKK1BBR0VECitfRnVuY3Rpb25fY2xhc3NfKEVWVF9XREZfV09SS0lURU0pCitfSVJRTF9yZXF1aXJlc19zYW1lXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsU2VuZExvb3AoCisgICAgX0luXyBXREZXT1JLSVRFTSAgICAgICAgICAgICAgICBXb3JrSXRlbQorICAgICk7CisKK1BBR0VECitfRnVuY3Rpb25fY2xhc3NfKEVWVF9XREZfV09SS0lURU0pCitfSVJRTF9yZXF1aXJlc19zYW1lXworX0lSUUxfcmVxdWlyZXNfbWF4XyhQQVNTSVZFX0xFVkVMKQorVk9JRAorU2VyaWFsUmVjdkxvb3AoCisgICAgX0luXyBXREZXT1JLSVRFTSAgICAgICAgICAgICAgICBXb3JrSXRlbQorICAgICk7CisKK19GdW5jdGlvbl9jbGFzc18oRVZUX1dERl9SRVFVRVNUX0NPTVBMRVRJT05fUk9VVElORSkKK19JUlFMX3JlcXVpcmVzX3NhbWVfCitWT0lECitTZXJpYWxSZWN2Q29tcGxldGUoCisgICAgX0luXyBXREZSRVFVRVNUICAgICAgICAgICAgICAgICBSZXF1ZXN0LAorICAgIF9Jbl8gV0RGSU9UQVJHRVQgICAgICAgICAgICAgICAgVGFyZ2V0LAorICAgIF9Jbl8gUFdERl9SRVFVRVNUX0NPTVBMRVRJT05fUEFSQU1TIFBhcmFtcywKKyAgICBfSW5fIFdERkNPTlRFWFQgICAgICAgICAgICAgICAgIENvbnRleHQKKyAgICApOworCitWT0lEIAorRHVtcEJ1ZmZlcigKKyAgICBfSW5fcmVhZHNfYnl0ZXNfKGFMZW5ndGgpIFBDVUNIQVIgYUJ1ZiwgCisgICAgX0luXyBzaXplX3QgICAgICAgICAgICAgICAgICAgICBhTGVuZ3RoCisgICAgKTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDJiMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOTcgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2MyNTM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2MyNjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGExNTAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWZyMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZW1zayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAga3c0MXogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbnJmNTI4NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcG9zaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXRpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBidWlsZCAoZS5nLiBmb3IgJ21ha2UgYWxsJykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICB1dGlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNTM4CitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBjYzI1MzgKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfQ0MyNjUwCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBjYzI2NTAKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfREExNTAwMAorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gZGExNTAwMAorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gZWZyMzIKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfRU1TSworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gZW1zaworZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FWEFNUExFU19LVzQxWgorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0ga3c0MXoKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfTlJGNTI4NDAKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG5yZjUyODQwCitlbmRpZgorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBwb3NpeAorZW5kaWYKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGNjMjUzOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNjMjY1MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRhMTUwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVmcjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVtc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGt3NDF6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5yZjUyODQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBvc2l4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHV0aWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMzMmYwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY2IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1jYzI1MzguYQorCitsaWJvcGVudGhyZWFkX2NjMjUzOF9hX0NQUEZMQUdTICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfY2MyNTM4X2FfU09VUkNFUyAgICAgICAgICAgID0gXAorICAgIGFsYXJtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhc2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXJ0dXAtZ2NjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWFydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK2xpYm9wZW50aHJlYWRfY2MyNTM4X2FfU09VUkNFUyAgICAgICAgICAgKz0gXAorICAgIGRpYWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2MyNTM4LXJlZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS1jYzI1MzguaCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJvbS11dGlsaXR5LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0KK2xpYm9wZW50aHJlYWRfY2MyNTM4X2FfTElCQUREICAgICAgICAgICAgID0gXAorICAgICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzICQoRGFzaCl0eXBlIGYgJChEYXNoKW5hbWUgIioubyIpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9SRUFETUUubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGUwYzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9SRUFETUUubWQKQEAgLTAsMCArMSw5MyBAQAorIyBPcGVuVGhyZWFkIG9uIENDMjUzOCBFeGFtcGxlCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YW1wbGUgcGxhdGZvcm0gZHJpdmVycyBmb3IgdGhlIFtUZXhhcworSW5zdHJ1bWVudHMgQ0MyNTM4XVtjYzI1MzhdLgorCitbY2MyNTM4XTogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC9DQzI1MzgKKworVGhlIGV4YW1wbGUgcGxhdGZvcm0gZHJpdmVycyBhcmUgaW50ZW5kZWQgdG8gcHJlc2VudCB0aGUgbWluaW1hbCBjb2RlCituZWNlc3NhcnkgdG8gc3VwcG9ydCBPcGVuVGhyZWFkLiAgQXMgYSByZXN1bHQsIHRoZSBleGFtcGxlIHBsYXRmb3JtCitkcml2ZXJzIGRvIG5vdCBuZWNlc3NhcmlseSBoaWdobGlnaHQgdGhlIHBsYXRmb3JtJ3MgZnVsbCBjYXBhYmlsaXRpZXMuCisKKyMjIFRvb2xjaGFpbgorCitEb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgW0dOVSB0b29sY2hhaW4gZm9yIEFSTQorQ29ydGV4LU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkCisKKyMjIEJ1aWxkaW5nCisKK0luIGEgQmFzaCB0ZXJtaW5hbCwgZm9sbG93IHRoZXNlIGluc3RydWN0aW9ucyB0byBidWlsZCB0aGUgY2MyNTM4IGV4YW1wbGVzLgorCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtY2MyNTM4CitgYGAKKworIyMgRmxhc2ggQmluYXJpZXMKKworSWYgdGhlIGJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRoZSBgZWxmYCBmaWxlcyBtYXkgYmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvY2MyNTM4L2JpbmAuCisKK1RvIGZsYXNoIHRoZSBpbWFnZXMgd2l0aCBbRmxhc2ggUHJvZ3JhbW1lciAyXVt0aS1mbGFzaC1wcm9ncmFtbWVyLTJdLAordGhlIGZpbGVzIG11c3QgaGF2ZSB0aGUgYCouZWxmYCBleHRlbnNpb24uCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjUzOC9iaW4KKyQgY3Agb3QtY2xpIG90LWNsaS5lbGYKK2BgYAorCitUbyBsb2FkIHRoZSBpbWFnZXMgd2l0aCB0aGUgW3NlcmlhbCBib290bG9hZGVyXVt0aS1jYzI1MzgtYm9vdGxvYWRlcl0sCit0aGUgaW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIGBiaW5gLiBUaGlzIGlzIGRvbmUgdXNpbmcKK2Bhcm0tbm9uZS1lYWJpLW9iamNvcHlgCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjUzOC9iaW4KKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSBvdC1jbGkgb3QtY2xpLmJpbgorYGBgCisKK1RoZSBbY2MyNTM4LWJzbC5weSBzY3JpcHRdW2NjMjUzOC1ic2wtdG9vbF0gcHJvdmlkZXMgYSBjb252ZW5pZW50CittZXRob2QgZm9yIGZsYXNoaW5nIGEgQ0MyNTM4IHZpYSB0aGUgVUFSVC4gVG8gZW50ZXIgdGhlIGJvb3Rsb2FkZXIKK2JhY2tkb29yIGZvciBmbGFzaGluZywgaG9sZCBkb3duIFNFTEVDVCBmb3IgQ0MyNTM4REsgKGNvcnJlc3BvbmRzIHRvCitsb2dpYyAnMCcpIHdoaWxlIHlvdSBwcmVzcyB0aGUgUmVzZXQgYnV0dG9uLgorCitbdGktZmxhc2gtcHJvZ3JhbW1lci0yXTogaHR0cDovL3d3dy50aS5jb20vdG9vbC9mbGFzaC1wcm9ncmFtbWVyCitbdGktY2MyNTM4LWJvb3Rsb2FkZXJdOiBodHRwOi8vd3d3LnRpLmNvbS9saXQvYW4vc3dyYTQ2NmEvc3dyYTQ2NmEucGRmCitbY2MyNTM4LWJzbC10b29sXTogaHR0cHM6Ly9naXRodWIuY29tL0plbG1lclQvY2MyNTM4LWJzbAorCisjIyBJbnRlcmFjdAorCisxLiBPcGVuIHRlcm1pbmFsIHRvIGAvZGV2L3R0eVVTQjFgIChzZXJpYWwgcG9ydCBzZXR0aW5nczogMTE1MjAwIDgtTi0xKS4KKzIuIFR5cGUgYGhlbHBgIGZvciBsaXN0IG9mIGNvbW1hbmRzLgorCitgYGBiYXNoCis+IGhlbHAKK2hlbHAKK2NoYW5uZWwKK2NoaWxkdGltZW91dAorY29udGV4dHJldXNlZGVsYXkKK2V4dGFkZHIKK2V4dHBhbmlkCitpcGFkZHIKK2tleXNlcXVlbmNlCitsZWFkZXJ3ZWlnaHQKK21hc3RlcmtleQorbW9kZQorbmV0ZGF0YXJlZ2lzdGVyCituZXR3b3JraWR0aW1lb3V0CituZXR3b3JrbmFtZQorcGFuaWQKK3BpbmcKK3ByZWZpeAorcmVsZWFzZXJvdXRlcmlkCitybG9jMTYKK3JvdXRlCityb3V0ZXJ1cGdyYWRldGhyZXNob2xkCitzY2FuCitzdGFydAorc3RhdGUKK3N0b3AKK3doaXRlbGlzdAorYGBgCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyZjNhYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvYWxhcm0uYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIGFsYXJtLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNTM4LmgiCisKK2VudW0KK3sKKyAgICBrU3lzdGVtQ2xvY2sgPSAzMjAwMDAwMCwgIC8vLzwgTUh6CisgICAga1RpY2tzUGVyU2VjID0gMTAwMCwgICAgICAvLy88IFRpY2tzIHBlciBzZWNvbmQKK307CisKK3N0YXRpYyB1aW50MzJfdCBzQ291bnRlciA9IDA7CitzdGF0aWMgdWludDMyX3Qgc0FsYXJtVDAgPSAwOworc3RhdGljIHVpbnQzMl90IHNBbGFybUR0ID0gMDsKK3N0YXRpYyBib29sIHNJc1J1bm5pbmcgPSBmYWxzZTsKKwordm9pZCBjYzI1MzhBbGFybUluaXQodm9pZCkKK3sKKyAgICBIV1JFRyhOVklDX1NUX1JFTE9BRCkgPSBrU3lzdGVtQ2xvY2sgLyBrVGlja3NQZXJTZWM7CisgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSA9IE5WSUNfU1RfQ1RSTF9DTEtfU1JDIHwgTlZJQ19TVF9DVFJMX0lOVEVOIHwgTlZJQ19TVF9DVFJMX0VOQUJMRTsKK30KKwordWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKK3sKKyAgICByZXR1cm4gc0NvdW50ZXI7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgdDAsIHVpbnQzMl90IGR0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzQWxhcm1UMCA9IHQwOworICAgIHNBbGFybUR0ID0gZHQ7CisgICAgc0lzUnVubmluZyA9IHRydWU7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0lzUnVubmluZyA9IGZhbHNlOworfQorCit2b2lkIGNjMjUzOEFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgdWludDMyX3QgZXhwaXJlczsKKyAgICBib29sIGZpcmUgPSBmYWxzZTsKKworICAgIGlmIChzSXNSdW5uaW5nKQorICAgIHsKKyAgICAgICAgZXhwaXJlcyA9IHNBbGFybVQwICsgc0FsYXJtRHQ7CisKKyAgICAgICAgaWYgKHNBbGFybVQwIDw9IHNDb3VudGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXhwaXJlcyA+PSBzQWxhcm1UMCAmJiBleHBpcmVzIDw9IHNDb3VudGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGV4cGlyZXMgPj0gc0FsYXJtVDAgfHwgZXhwaXJlcyA8PSBzQ291bnRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJlKQorICAgICAgICB7CisgICAgICAgICAgICBzSXNSdW5uaW5nID0gZmFsc2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdERpYWdBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK30KKwordm9pZCBTeXNUaWNrX0hhbmRsZXIoKQoreworICAgIHNDb3VudGVyKys7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC1yZWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvY2MyNTM4LXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC1yZWcuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgQ0MyNTM4IHJlZ2lzdGVyIGRlZmluaXRpb25zLgorICoKKyAqLworCisjaWZuZGVmIENDMjUzOF9SRUdfSF8KKyNkZWZpbmUgQ0MyNTM4X1JFR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgSFdSRUcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSh4KSkpCisKKyNkZWZpbmUgTlZJQ19TVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RTAwMEUwMTAgIC8vIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzCisjZGVmaW5lIE5WSUNfU1RfUkVMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAweEUwMDBFMDE0ICAvLyBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlcgorI2RlZmluZSBOVklDX0VOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFMDAwRTEwMCAgLy8gSW50ZXJydXB0IDAtMzEgU2V0IEVuYWJsZQorCisjZGVmaW5lIE5WSUNfU1RfQ1RSTF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwICAvLyBDb3VudCBGbGFnCisjZGVmaW5lIE5WSUNfU1RfQ1RSTF9DTEtfU1JDICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBDbG9jayBTb3VyY2UKKyNkZWZpbmUgTlZJQ19TVF9DVFJMX0lOVEVOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEludGVycnVwdCBFbmFibGUKKyNkZWZpbmUgTlZJQ19TVF9DVFJMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEVuYWJsZQorCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBTUkNNQVRDSC5TUkNfTUFUQ0hfRU4oMSkKKyNkZWZpbmUgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfQVVUT1BFTkQgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFNSQ01BVENILkFVVE9QRU5EKDEpCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX1BFTkRfREFUQVJFUV9PTkxZICAweDAwMDAwMDA0ICAvLyBTUkNNQVRDSC5QRU5EX0RBVEFSRVFfT05MWSgxKQorCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX0VOQUJMRV9TVEFUVVNfU0laRSAzICAgICAgICAgICAvLyBOdW0gb2YgcmVnaXN0ZXIgZm9yIHNvdXJjZSBtYXRjaCBlbmFibGUgc3RhdHVzCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIX1NIT1JUX0VOVFJJRVMgICAgICAyNCAgICAgICAgICAvLyAyNCBzaG9ydCBhZGRyZXNzIGVudHJpZXMgaW4gbWF4aW11bQorI2RlZmluZSBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUklFUyAgICAgICAgMTIgICAgICAgICAgLy8gMTIgZXh0ZW5kZWQgYWRkcmVzcyBlbnRyaWVzIGluIG1heGltdW0KKyNkZWZpbmUgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfU0hPUlRfRU5UUllfT0ZGU0VUIDQgICAgICAgICAgIC8vIGFkZHJlc3Mgb2Zmc2V0IGZvciBvbmUgc2hvcnQgYWRkcmVzcyBlbnRyeQorI2RlZmluZSBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUllfT0ZGU0VUICAgOCAgICAgICAgICAgLy8gYWRkcmVzcyBvZmZzZXQgZm9yIG9uZSBleHRlbmRlZCBhZGRyZXNzIGVudHJ5CisKKyNkZWZpbmUgSU5UX1VBUlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxICAgICAgICAgIC8vIFVBUlQwIFJ4IGFuZCBUeAorCisjZGVmaW5lIElFRUVfRVVJNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjgwMDI4ICAvLyBBZGRyZXNzIG9mIElFRUUgRVVJLTY0IGFkZHJlc3MKKworI2RlZmluZSBSRkNPUkVfRkZTTV9TUkNBRERSRVNTX1RBQkxFICAgICAgICAgICAgMHg0MDA4ODQwMCAgLy8gU291cmNlIEFkZHJlc3MgVGFibGUKKworI2RlZmluZSBSRkNPUkVfRkZTTV9TUkNFWFRQRU5ERU4wICAgICAgICAgICAgICAgMHg0MDA4ODU5MCAgLy8gRW5hYmxlL0Rpc2FibGUgYXV0b21hdGljIHBlbmRpbmcgcGVyIGV4dGVuZGVkIGFkZHJlc3MKKyNkZWZpbmUgUkZDT1JFX0ZGU01fU1JDU0hPUlRQRU5ERU4wICAgICAgICAgICAgIDB4NDAwODg1OUMgIC8vIEVuYWJsZS9EaXNhYmxlIGF1dG9tYXRpYyBwZW5kaW5nIHBlciBzaG9ydCBhZGRyZXNzCisjZGVmaW5lIFJGQ09SRV9GRlNNX0VYVF9BRERSMCAgICAgICAgICAgICAgICAgICAweDQwMDg4NUE4ICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1BBTl9JRDAgICAgICAgICAgICAgICAgICAgICAweDQwMDg4NUM4ICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1BBTl9JRDEgICAgICAgICAgICAgICAgICAgICAweDQwMDg4NUNDICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1NIT1JUX0FERFIwICAgICAgICAgICAgICAgICAweDQwMDg4NUQwICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9GRlNNX1NIT1JUX0FERFIxICAgICAgICAgICAgICAgICAweDQwMDg4NUQ0ICAvLyBMb2NhbCBhZGRyZXNzIGluZm9ybWF0aW9uCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUZJTFQwICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjAwICAvLyBUaGUgZnJhbWUgZmlsdGVyaW5nIGZ1bmN0aW9uCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ01BVENIICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjA4ICAvLyBTb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBhbmQgcGVuZGluZyBiaXRzCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ1NIT1JURU4wICAgICAgICAgICAgICAgICAweDQwMDg4NjBDICAvLyBTaG9ydCBhZGRyZXNzIG1hdGNoaW5nCisjZGVmaW5lIFJGQ09SRV9YUkVHX1NSQ0VYVEVOMCAgICAgICAgICAgICAgICAgICAweDQwMDg4NjE4ICAvLyBFeHRlbmRlZCBhZGRyZXNzIG1hdGNoaW5nCisKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlJNQ1RSTDAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2MjQgIC8vIEZyYW1lIGhhbmRsaW5nCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwxICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjI4ICAvLyBGcmFtZSBoYW5kbGluZworI2RlZmluZSBSRkNPUkVfWFJFR19SWEVOQUJMRSAgICAgICAgICAgICAgICAgICAgMHg0MDA4ODYyQyAgLy8gUlggZW5hYmxpbmcKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlJFUUNUUkwgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2M0MgIC8vIENvbnRyb2xzIHRoZSBSRiBmcmVxdWVuY3kKKyNkZWZpbmUgUkZDT1JFX1hSRUdfVFhQT1dFUiAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2NDAgIC8vIENvbnRyb2xzIHRoZSBvdXRwdXQgcG93ZXIKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDEgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2NEMgIC8vIFJhZGlvIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBSRkNPUkVfWFJFR19GSUZPUENUUkwgICAgICAgICAgICAgICAgICAgMHg0MDA4ODY1MCAgLy8gRklGT1AgdGhyZXNob2xkCisjZGVmaW5lIFJGQ09SRV9YUkVHX0NDQUNUUkwwICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjU4ICAvLyBDQ0EgdGhyZXNob2xkCisjZGVmaW5lIFJGQ09SRV9YUkVHX1JTU0lTVEFUICAgICAgICAgICAgICAgICAgICAweDQwMDg4NjY0ICAvLyBSU1NJIHZhbGlkIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBSRkNPUkVfWFJFR19BR0NDVFJMMSAgICAgICAgICAgICAgICAgICAgMHg0MDA4ODZDOCAgLy8gQUdDIHJlZmVyZW5jZSBsZXZlbAorI2RlZmluZSBSRkNPUkVfWFJFR19UWEZJTFRDRkcgICAgICAgICAgICAgICAgICAgMHg0MDA4ODdFOCAgLy8gVFggZmlsdGVyIGNvbmZpZ3VyYXRpb24KKyNkZWZpbmUgUkZDT1JFX1hSRUdfUkZSTkQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg2OUMgIC8vIFJhbmRvbSBkYXRhCisjZGVmaW5lIFJGQ09SRV9TRlJfUkZEQVRBICAgICAgICAgICAgICAgICAgICAgICAweDQwMDg4ODI4ICAvLyBUaGUgVFggRklGTyBhbmQgUlggRklGTworI2RlZmluZSBSRkNPUkVfU0ZSX1JGRVJSRiAgICAgICAgICAgICAgICAgICAgICAgMHg0MDA4ODgyQyAgLy8gUkYgZXJyb3IgaW50ZXJydXB0IGZsYWdzCisjZGVmaW5lIFJGQ09SRV9TRlJfUkZJUlFGMCAgICAgICAgICAgICAgICAgICAgICAweDQwMDg4ODM0ICAvLyBSRiBpbnRlcnJ1cHQgZmxhZ3MKKyNkZWZpbmUgUkZDT1JFX1NGUl9SRlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwODg4MzggIC8vIFJGIENTTUEtQ0Evc3Ryb2JlIHByb2Nlc3NvcgorCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUZJTFQwX0ZSQU1FX0ZJTFRFUl9FTiAgICAweDAwMDAwMDAxICAvLyBFbmFibGVzIGZyYW1lIGZpbHRlcmluZworCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0FVVE9BQ0sgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0FVVE9DUkMgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0lORklOSVRZX1JYICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlJNQ1RSTDFfUEVORElOR19PUiAgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBSRkNPUkVfWFJFR19SRlJORF9JUk5EICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX1RYX0FDVElWRSAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX0NDQSAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBDbGVhciBjaGFubmVsIGFzc2Vzc21lbnQKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDFfU0ZEICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDFfRklGT1AgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDT1JFX1hSRUdfRlNNU1RBVDFfRklGTyAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKworI2RlZmluZSBSRkNPUkVfWFJFR19SU1NJU1RBVF9SU1NJX1ZBTElEICAgICAgICAgMHgwMDAwMDAwMSAgLy8gUlNTSSB2YWx1ZSBpcyB2YWxpZC4KKworI2RlZmluZSBSRkNPUkVfU0ZSX1JGRVJSRl9SWE9WRVJGICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gUlggRklGTyBvdmVyZmxvd2VkLgorCisjZGVmaW5lIFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9SWE9OICAgICAgICAgICAgICAweEUzICAgICAgICAvLyBJbnN0cnVjdGlvbiBzZXQgUlggb24KKyNkZWZpbmUgUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1RYT04gICAgICAgICAgICAgIDB4RTkgICAgICAgIC8vIEluc3RydWN0aW9uIHNldCBUWCBvbgorI2RlZmluZSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfUkZPRkYgICAgICAgICAgICAgMHhFRiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc2V0IFJGIG9mZgorI2RlZmluZSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWCAgICAgICAgICAgMHhFRCAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc2V0IGZsdXNoIHJ4IGJ1ZmZlcgorI2RlZmluZSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hUWCAgICAgICAgICAgMHhFRSAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gc2V0IGZsdXNoIHR4IGJ1ZmZlcgorCisjZGVmaW5lIEFOQV9SRUdTX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQ2MDAwICAvLyBBTkFfUkVHUworI2RlZmluZSBBTkFfUkVHU19PX0lWQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLy8gQW5hbG9nIGNvbnRyb2wgcmVnaXN0ZXIKKworI2RlZmluZSBTWVNfQ1RSTF9DTE9DS19DVFJMICAgICAgICAgICAgICAgICAgICAgMHg0MDBEMjAwMCAgLy8gVGhlIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgU1lTX0NUUkxfU1lTRElWXzMyTUhaICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFN5c19kaXYgZm9yIHN5c2NsayAzMk1IegorI2RlZmluZSBTWVNfQ1RSTF9DTE9DS19DVFJMX0FNUF9ERVQgICAgICAgICAgICAgMHgwMDIwMDAwMAorCisjZGVmaW5lIFNZU19DVFJMX1BXUkRCRyAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQyMDc0CisjZGVmaW5lIFNZU19DVFJMX1BXUkRCR19GT1JDRV9XQVJNX1JFU0VUICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgU1lTX0NUUkxfUkNHQ1VBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwMjgKKyNkZWZpbmUgU1lTX0NUUkxfU0NHQ1VBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwMkMKKyNkZWZpbmUgU1lTX0NUUkxfRENHQ1VBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwMzAKKyNkZWZpbmUgU1lTX0NUUkxfSV9NQVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwOTgKKyNkZWZpbmUgU1lTX0NUUkxfUkNHQ1JGQyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQTgKKyNkZWZpbmUgU1lTX0NUUkxfU0NHQ1JGQyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQUMKKyNkZWZpbmUgU1lTX0NUUkxfRENHQ1JGQyAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQjAKKyNkZWZpbmUgU1lTX0NUUkxfRU1VT1ZSICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDIwQjQKKworI2RlZmluZSBTWVNfQ1RSTF9SQ0dDUkZDX1JGQzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTWVNfQ1RSTF9TQ0dDUkZDX1JGQzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTWVNfQ1RSTF9EQ0dDUkZDX1JGQzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIFNZU19DVFJMX0lfTUFQX0FMVE1BUCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgU1lTX0NUUkxfUkNHQ1VBUlRfVUFSVDAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1lTX0NUUkxfU0NHQ1VBUlRfVUFSVDAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1lTX0NUUkxfRENHQ1VBUlRfVUFSVDAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBJT0NfUEEwX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENDAwMCAgLy8gUGVyaXBoZXJhbCBzZWxlY3QgY29udHJvbAorI2RlZmluZSBJT0NfUEExX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENDAwNCAgLy8gUGVyaXBoZXJhbCBzZWxlY3QgY29udHJvbAorI2RlZmluZSBJT0NfVUFSVFJYRF9VQVJUMCAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENDEwMAorCisjZGVmaW5lIElPQ19QQTBfT1ZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQ0MDgwCisjZGVmaW5lIElPQ19QQTFfT1ZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMEQ0MDg0CisKKyNkZWZpbmUgSU9DX01VWF9PVVRfU0VMX1VBUlQwX1RYRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBJT0NfT1ZFUlJJREVfT0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gUEFEIENvbmZpZyBPdmVycmlkZSBPdXRwdXQgRW5hYmxlCisjZGVmaW5lIElPQ19PVkVSUklERV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwICAvLyBQQUQgQ29uZmlnIE92ZXJyaWRlIERpc2FibGVkCisKKyNkZWZpbmUgVUFSVDBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMEMwMDAKKyNkZWZpbmUgR1BJT19BX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDkwMDAgIC8vIEdQSU8KKworI2RlZmluZSBHUElPX09fRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX09fQUZTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQyMAorCisjZGVmaW5lIEdQSU9fUElOXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBHUElPIHBpbiAwCisjZGVmaW5lIEdQSU9fUElOXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBHUElPIHBpbiAxCisKKyNkZWZpbmUgVUFSVF9PX0RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFVBUlQgZGF0YQorI2RlZmluZSBVQVJUX09fRlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOCAgLy8gVUFSVCBmbGFnCisjZGVmaW5lIFVBUlRfT19JQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIFVBUlRfT19GQlJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIFVBUlRfT19MQ1JIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIFVBUlRfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwICAvLyBVQVJUIGNvbnRyb2wKKyNkZWZpbmUgVUFSVF9PX0lNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzggIC8vIFVBUlQgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgVUFSVF9PX01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIFVBUlQgbWFza2VkIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgVUFSVF9PX0lDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQgIC8vIFVBUlQgaW50ZXJydXB0IGNsZWFyCisjZGVmaW5lIFVBUlRfT19DQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkM4ICAvLyBVQVJUIGNsb2NrIGNvbmZpZ3VyYXRpb24KKworI2RlZmluZSBVQVJUX0ZSX1JYRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gVUFSVCByZWNlaXZlIEZJRk8gZW1wdHkKKyNkZWZpbmUgVUFSVF9GUl9UWEZGICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIFVBUlQgdHJhbnNtaXQgRklGTyBmdWxsCisjZGVmaW5lIFVBUlRfRlJfUlhGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwICAvLyBVQVJUIHJlY2VpdmUgRklGTyBmdWxsCisKKyNkZWZpbmUgVUFSVF9DT05GSUdfV0xFTl84ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAgIC8vIDggYml0IGRhdGEKKyNkZWZpbmUgVUFSVF9DT05GSUdfU1RPUF9PTkUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIE9uZSBzdG9wIGJpdAorI2RlZmluZSBVQVJUX0NPTkZJR19QQVJfTk9ORSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gTm8gcGFyaXR5CisKKyNkZWZpbmUgVUFSVF9DVExfVUFSVEVOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFVBUlQgZW5hYmxlCisjZGVmaW5lIFVBUlRfQ1RMX1RYRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwICAvLyBVQVJUIHRyYW5zbWl0IGVuYWJsZQorI2RlZmluZSBVQVJUX0NUTF9SWEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMCAgLy8gVUFSVCByZWNlaXZlIGVuYWJsZQorCisjZGVmaW5lIFVBUlRfSU1fUlhJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBVQVJUIHJlY2VpdmUgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgVUFSVF9JTV9SVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIFVBUlQgcmVjZWl2ZSB0aW1lLW91dCBpbnRlcnJ1cHQKKworI2RlZmluZSBTT0NfQURDX0FEQ0NPTjEgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENzAwMCAgLy8gQURDIENvbnRyb2wKKyNkZWZpbmUgU09DX0FEQ19STkRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwRDcwMTQgIC8vIFJORyBsb3cgZGF0YQorI2RlZmluZSBTT0NfQURDX1JOREggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBENzAxOCAgLy8gUk5HIGhpZ2ggZGF0YQorCisjZGVmaW5lIFNPQ19BRENfQURDQ09OMV9SQ1RSTDAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBBRENDT04xIFJDVFJMIGJpdCAwCisjZGVmaW5lIFNPQ19BRENfQURDQ09OMV9SQ1RSTDEgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBBRENDT04xIFJDVFJMIGJpdCAxCisKKyNkZWZpbmUgRkxBU0hfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAgIC8vIEZsYXNoIGJhc2UgYWRkcmVzcworI2RlZmluZSBGTEFTSF9DVFJMX0ZDVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBEMzAwOCAgLy8gRmxhc2ggY29udHJvbAorI2RlZmluZSBGTEFTSF9DVFJMX0RJRUNGRzAgICAgICAgICAgICAgICAgICAgICAgMHg0MDBEMzAxNCAgLy8gRmxhc2ggaW5mb3JtYXRpb24KKworI2VuZGlmCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvY2MyNTM4LmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWMxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2NjMjUzOC5sZApAQCAtMCwwICsxLDk2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIEdDQyBsaW5rZXIgc2NyaXB0IGZvciBDQzI1MzguCisgKi8KKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgOiAgICAgICAgICAgT1JJR0lOID0gMHgwMDIwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAweDAwMDdGRkQ0CisgIEZMQVNIX0NDQSAocngpIDogICAgICAgT1JJR0lOID0gMHgwMDI3RkZENCwgICAgICAgICAgICBMRU5HVEggPSAweDJDCisgIFNSQU0gKHJ3eCkgOiAgICAgICAgICAgT1JJR0lOID0gMHgyMDAwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAzMksKK30KKworRU5UUlkoZmxhc2hfY2NhX2xvY2tfcGFnZSkKK1NFQ1RJT05TCit7CisgICAgLnRleHQgOiBBTElHTig0KQorICAgIHsKKyAgICAgICAgX3RleHQgPSAuOworICAgICAgICAqKC52ZWN0b3JzKQorICAgICAgICAqKC50ZXh0KikKKyAgICAgICAgKigucm9kYXRhKikKKyAgICAgICAgS0VFUCgqKC5pbml0KSkKKyAgICAgICAgS0VFUCgqKC5maW5pKSkKKyAgICAgICAgX2V0ZXh0ID0gLjsKKyAgICB9ID4gRkxBU0g9IDAKKworICAgIC5pbml0X2FycmF5IDoKKyAgICB7CisgICAgICAgIF9pbml0X2FycmF5ID0gLjsKKyAgICAgICAgS0VFUCgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgICAgICBLRUVQKCooLmluaXRfYXJyYXkqKSkKKyAgICAgICAgX2Vpbml0X2FycmF5ID0gLjsKKyAgICB9ID4gRkxBU0gKKworICAgIC5BUk0uZXhpZHggOiBBTElHTig0KQorICAgIHsKKyAgICAgICAgKiguQVJNLmV4aWR4KikKKyAgICB9ID4gRkxBU0gKKworICAgIC5kYXRhIDogQUxJR04oNCkKKyAgICB7CisgICAgICAgIF9kYXRhID0gLjsKKyAgICAgICAgKiguZGF0YSopCisgICAgICAgIF9lZGF0YSA9IC47CisgICAgfSA+IFNSQU0gQVQgPiBGTEFTSAorICAgIF9sZGF0YSA9IExPQURBRERSKC5kYXRhKTsKKworICAgIC5ic3MgOiBBTElHTig0KQorICAgIHsKKyAgICAgICAgX2JzcyA9IC47CisgICAgICAgICooLmJzcyopCisgICAgICAgICooQ09NTU9OKQorICAgICAgICBfZWJzcyA9IC47CisgICAgfSA+IFNSQU0KKworICAgIF9oZWFwID0gLjsKKyAgICBlbmQgPSAuOworCisgICAgLnN0YWNrIDogQUxJR04oNCkKKyAgICB7CisgICAgICAgICooLnN0YWNrKQorICAgIH0gPiBTUkFNCisKKyAgICAuZmxhc2hjY2EgOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5mbGFzaF9jY2EpKQorICAgIH0gPiBGTEFTSF9DQ0EKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvZGlhZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9kaWFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmMjM0YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvZGlhZy5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNTM4LmgiCisKKy8qKgorICogRGlhZ25vc3RpY3MgbW9kZSB2YXJpYWJsZXMuCisgKgorICovCitzdGF0aWMgYm9vbCBzRGlhZ01vZGUgPSBmYWxzZTsKKwordm9pZCBvdFBsYXREaWFnUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIC8vIEFkZCBtb3JlIHBsYXJmb3JtIHNwZWNpZmljIGRpYWdub3N0aWNzIGZlYXR1cmVzIGhlcmUuCisgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgKHZvaWQpIGFyZ2M7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KKwordm9pZCBvdFBsYXREaWFnTW9kZVNldChib29sIGFNb2RlKQoreworICAgIHNEaWFnTW9kZSA9IGFNb2RlOworfQorCitib29sIG90UGxhdERpYWdNb2RlR2V0KCkKK3sKKyAgICByZXR1cm4gc0RpYWdNb2RlOworfQorCit2b2lkIG90UGxhdERpYWdDaGFubmVsU2V0KHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgKHZvaWQpIGFDaGFubmVsOworfQorCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcikKK3sKKyAgICAodm9pZCkgYVR4UG93ZXI7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICAodm9pZCkgYUZyYW1lOworICAgICh2b2lkKSBhRXJyb3I7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0FsYXJtQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmNzk0MQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvZmxhc2guYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNTM4LmgiCisjaW5jbHVkZSAicm9tLXV0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9jb2RlX3V0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvZmxhc2guaCIKKworI2RlZmluZSBGTEFTSF9DVFJMX0ZDVExfQlVTWSAgIDB4MDAwMDAwODAKKworZW51bQoreworICAgIEZMQVNIX1BBR0VfU0laRSA9IDB4ODAwLAorfTsKKworc3RhdGljIG90RXJyb3Igcm9tU3RhdHVzVG9UaHJlYWQoaW50MzJfdCBhU3RhdHVzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChhU3RhdHVzKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIC0xOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIC0yOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHVpbnQzMl90IHJlZyA9IChIV1JFRyhGTEFTSF9DVFJMX0RJRUNGRzApICYgMHgwMDAwMDA3MCkgPj4gNDsKKworICAgIHJldHVybiByZWcgPyAoMHgyMDAwMCAqIHJlZykgOiAweDEwMDAwOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hFcmFzZVBhZ2UodWludDMyX3QgYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgdWludDMyX3QgYWRkcmVzczsKKworICAgIG90RVhQRUNUX0FDVElPTihhQWRkcmVzcyA8IHV0aWxzRmxhc2hHZXRTaXplKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGFkZHJlc3MgPSBGTEFTSF9CQVNFICsgYUFkZHJlc3MgLSAoYUFkZHJlc3MgJiAoRkxBU0hfUEFHRV9TSVpFIC0gMSkpOworICAgIHN0YXR1cyA9IFJPTV9QYWdlRXJhc2UoYWRkcmVzcywgRkxBU0hfUEFHRV9TSVpFKTsKKyAgICBlcnJvciA9IHJvbVN0YXR1c1RvVGhyZWFkKHN0YXR1cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hTdGF0dXNXYWl0KHVpbnQzMl90IGFUaW1lb3V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IHN0YXJ0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICB1aW50MzJfdCBidXN5ID0gMTsKKworICAgIHdoaWxlIChidXN5ICYmICgob3RQbGF0QWxhcm1HZXROb3coKSAtIHN0YXJ0KSA8IGFUaW1lb3V0KSkKKyAgICB7CisgICAgICAgIGJ1c3kgPSBIV1JFRyhGTEFTSF9DVFJMX0ZDVEwpICYgRkxBU0hfQ1RSTF9GQ1RMX0JVU1k7CisgICAgfQorCisgICAgb3RFWFBFQ1RfQUNUSU9OKCFidXN5LCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgdWludDMyX3QgYnVzeSA9IDE7CisgICAgdWludDMyX3QgKmRhdGE7CisgICAgdWludDMyX3Qgc2l6ZSA9IDA7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oKChhQWRkcmVzcyArIGFTaXplKSA8IHV0aWxzRmxhc2hHZXRTaXplKCkpICYmCisgICAgICAgICAgICAgICAgICAgICghKGFBZGRyZXNzICYgMykpICYmICghKGFTaXplICYgMykpLCBhU2l6ZSA9IDApOworCisgICAgZGF0YSA9ICh1aW50MzJfdCAqKShhRGF0YSk7CisKKyAgICB3aGlsZSAoc2l6ZSA8IGFTaXplKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gUk9NX1Byb2dyYW1GbGFzaChkYXRhLCBhQWRkcmVzcyArIEZMQVNIX0JBU0UsIDQpOworCisgICAgICAgIHdoaWxlIChidXN5KQorICAgICAgICB7CisgICAgICAgICAgICBidXN5ID0gSFdSRUcoRkxBU0hfQ1RSTF9GQ1RMKSAmIEZMQVNIX0NUUkxfRkNUTF9CVVNZOworICAgICAgICB9CisKKyAgICAgICAgb3RFWFBFQ1Qocm9tU3RhdHVzVG9UaHJlYWQoc3RhdHVzKSA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgc2l6ZSArPSA0OworICAgICAgICBkYXRhKys7CisgICAgICAgIGFBZGRyZXNzICs9IDQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBzaXplOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHNpemUgPSAwOworCisgICAgb3RFWFBFQ1QoKGFBZGRyZXNzICsgYVNpemUpIDwgdXRpbHNGbGFzaEdldFNpemUoKSk7CisKKyAgICB3aGlsZSAoc2l6ZSA8IGFTaXplKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgcmVnID0gSFdSRUcoYUFkZHJlc3MgKyBGTEFTSF9CQVNFKTsKKyAgICAgICAgdWludDhfdCAqYnl0ZSA9ICh1aW50OF90ICopJnJlZzsKKyAgICAgICAgdWludDhfdCBtYXhJbmRleCA9IDQ7CisKKyAgICAgICAgaWYgKHNpemUgPT0gKGFTaXplIC0gYVNpemUgJSA0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4SW5kZXggPSBhU2l6ZSAlIDQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaW5kZXggPSAwOyBpbmRleCA8IG1heEluZGV4OyBpbmRleCsrLCBieXRlKyssIGFEYXRhKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICphRGF0YSA9ICpieXRlOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZSArPSBtYXhJbmRleDsKKyAgICAgICAgYUFkZHJlc3MgKz0gbWF4SW5kZXg7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBzaXplOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9taXNjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjdjYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9taXNjLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorCit2b2lkIG90UGxhdFJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgSFdSRUcoU1lTX0NUUkxfUFdSREJHKSA9IFNZU19DVFJMX1BXUkRCR19GT1JDRV9XQVJNX1JFU0VUOworfQorCitvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIC8vIFRPRE86IFdyaXRlIG1lIQorICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTjsKK30KKwordm9pZCBvdFBsYXRXYWtlSG9zdCh2b2lkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVudCBhbiBvcGVyYXRpb24gdG8gd2FrZSB0aGUgaG9zdCBmcm9tIHNsZWVwIHN0YXRlLgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9vcGVudGhyZWFkLWNvcmUtY2MyNTM4LWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9vcGVudGhyZWFkLWNvcmUtY2MyNTM4LWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzA3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L29wZW50aHJlYWQtY29yZS1jYzI1MzgtY29uZmlnLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgY2MyNTM4IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cyBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9DQzI1MzhfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9DQzI1MzhfQ09ORklHX0hfCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisgKgorICogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIGRlZmF1bHQgbG9nIG91dHB1dC4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVCAgICAgICAgICAgIDEKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgQUNLIHRpbWVvdXQgbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUICAgICAgICAgIDEKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgMQorCisgLyoqCisgICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSBlbmVyZ3kgc2Nhbm5pbmcgbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOICAgICAgICAgIDEKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfQ0MyNTM4X0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9wbGF0Zm9ybS1jYzI1MzguaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcGxhdGZvcm0tY2MyNTM4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzYWQxYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcGxhdGZvcm0tY2MyNTM4LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9DQzI1MzhfSF8KKyNkZWZpbmUgUExBVEZPUk1fQ0MyNTM4X0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNjMjUzOC1yZWcuaCIKKworLy8gR2xvYmFsIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlCitleHRlcm4gb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBjYzI1MzhBbGFybUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGFybSBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgY2MyNTM4QWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFkaW8gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGNjMjUzOFJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBjYzI1MzhSYWRpb1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSByYW5kb20gbnVtYmVyIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBjYzI1MzhSYW5kb21Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgVUFSVCBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKi8KK3ZvaWQgY2MyNTM4VWFydFByb2Nlc3Modm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fQ0MyNTM4X0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3BsYXRmb3JtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmOTdjYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorCitvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY2MyNTM4QWxhcm1Jbml0KCk7CisgICAgY2MyNTM4UmFuZG9tSW5pdCgpOworICAgIGNjMjUzOFJhZGlvSW5pdCgpOworCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworfQorCit2b2lkIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHNJbnN0YW5jZSA9IGFJbnN0YW5jZTsKKworICAgIC8vIHNob3VsZCBzbGVlcCBhbmQgd2FpdCBmb3IgaW50ZXJydXB0cyBoZXJlCisKKyAgICBjYzI1MzhVYXJ0UHJvY2VzcygpOworICAgIGNjMjUzOFJhZGlvUHJvY2VzcyhhSW5zdGFuY2UpOworICAgIGNjMjUzOEFsYXJtUHJvY2VzcyhhSW5zdGFuY2UpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9yYWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDNmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3JhZGlvLmMKQEAgLTAsMCArMSw4NDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1jYzI1MzguaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCitlbnVtCit7CisgICAgSUVFRTgwMjE1NF9NSU5fTEVOR1RIID0gNSwKKyAgICBJRUVFODAyMTU0X01BWF9MRU5HVEggPSAxMjcsCisgICAgSUVFRTgwMjE1NF9BQ0tfTEVOR1RIID0gNSwKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFTSyA9IDB4NywKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLID0gMHgyLAorICAgIElFRUU4MDIxNTRfRlJBTUVfUEVORElORyA9IDEgPDwgNCwKKyAgICBJRUVFODAyMTU0X0FDS19SRVFVRVNUID0gMSA8PCA1LAorICAgIElFRUU4MDIxNTRfRFNOX09GRlNFVCA9IDIsCit9OworCitlbnVtCit7CisgICAgQ0MyNTM4X1JTU0lfT0ZGU0VUID0gNzMsCisgICAgQ0MyNTM4X0NSQ19CSVRfTUFTSyA9IDB4ODAsCisgICAgQ0MyNTM4X0xRSV9CSVRfTUFTSyA9IDB4N2YsCit9OworCitlbnVtCit7CisgICAgQ0MyNTM4X1JFQ0VJVkVfU0VOU0lUSVZJVFkgPSAtMTAwLCAvLyBkQm0KK307CisKK3R5cGVkZWYgc3RydWN0IFR4UG93ZXJUYWJsZQoreworICAgIGludDhfdCAgbVR4UG93ZXJWYWw7CisgICAgdWludDhfdCBtVHhQb3dlclJlZzsKK30gVHhQb3dlclRhYmxlOworCisvLyBUaGUgdHJhbnNtaXQgcG93ZXIgdGFibGUsIHRoZSB2YWx1ZXMgYXJlIGZyb20gU21hcnRSRiBTdHVkaW8gMi40LjAKK3N0YXRpYyBjb25zdCBUeFBvd2VyVGFibGUgc1R4UG93ZXJUYWJsZVtdID0KK3sKKyAgICB7ICA3LCAweEZGIH0sCisgICAgeyAgNSwgMHhFRCB9LAorICAgIHsgIDMsIDB4RDUgfSwKKyAgICB7ICAxLCAweEM1IH0sCisgICAgeyAgMCwgMHhCNiB9LAorICAgIHsgLTEsIDB4QjAgfSwKKyAgICB7IC0zLCAweEExIH0sCisgICAgeyAtNSwgMHg5MSB9LAorICAgIHsgLTcsIDB4ODggfSwKKyAgICB7IC05LCAweDcyIH0sCisgICAgeyAtMTEsIDB4NjIgfSwKKyAgICB7IC0xMywgMHg1OCB9LAorICAgIHsgLTE1LCAweDQyIH0sCisgICAgeyAtMjQsIDB4MDAgfSwKK307CisKK3N0YXRpYyBvdFJhZGlvRnJhbWUgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RFcnJvciBzVHJhbnNtaXRFcnJvcjsKK3N0YXRpYyBvdEVycm9yIHNSZWNlaXZlRXJyb3I7CisKK3N0YXRpYyB1aW50OF90IHNUcmFuc21pdFBzZHVbSUVFRTgwMjE1NF9NQVhfTEVOR1RIXTsKK3N0YXRpYyB1aW50OF90IHNSZWNlaXZlUHNkdVtJRUVFODAyMTU0X01BWF9MRU5HVEhdOworc3RhdGljIHVpbnQ4X3Qgc0NoYW5uZWwgPSAwOworc3RhdGljIGludDhfdCBzVHhQb3dlciA9IDA7CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CitzdGF0aWMgYm9vbCBzSXNSZWNlaXZlckVuYWJsZWQgPSBmYWxzZTsKKwordm9pZCBlbmFibGVSZWNlaXZlcih2b2lkKQoreworICAgIGlmICghc0lzUmVjZWl2ZXJFbmFibGVkKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJFbmFibGluZyByZWNlaXZlciIsIE5VTEwpOworCisgICAgICAgIC8vIGZsdXNoIHJ4ZmlmbworICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX0ZMVVNIUlg7CisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWDsKKworICAgICAgICAvLyBlbmFibGUgcmVjZWl2ZXIKKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9SWE9OOworICAgICAgICBzSXNSZWNlaXZlckVuYWJsZWQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBkaXNhYmxlUmVjZWl2ZXIodm9pZCkKK3sKKyAgICBpZiAoc0lzUmVjZWl2ZXJFbmFibGVkKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJEaXNhYmxpbmcgcmVjZWl2ZXIiLCBOVUxMKTsKKworICAgICAgICB3aGlsZSAoSFdSRUcoUkZDT1JFX1hSRUdfRlNNU1RBVDEpICYgUkZDT1JFX1hSRUdfRlNNU1RBVDFfVFhfQUNUSVZFKTsKKworICAgICAgICAvLyBmbHVzaCByeGZpZm8KKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9GTFVTSFJYOworICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX0ZMVVNIUlg7CisKKyAgICAgICAgaWYgKEhXUkVHKFJGQ09SRV9YUkVHX1JYRU5BQkxFKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkaXNhYmxlIHJlY2VpdmVyCisgICAgICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1JGT0ZGOworICAgICAgICB9CisKKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIHNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBpZiAoc0NoYW5uZWwgIT0gYUNoYW5uZWwpCisgICAgeworICAgICAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAoc0lzUmVjZWl2ZXJFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBkaXNhYmxlUmVjZWl2ZXIoKTsKKyAgICAgICAgICAgIGVuYWJsZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJDaGFubmVsPSVkIiwgYUNoYW5uZWwpOworCisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX0ZSRVFDVFJMKSA9IDExICsgKGFDaGFubmVsIC0gMTEpICogNTsKKyAgICAgICAgc0NoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgICAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgZW5hYmxlUmVjZWl2ZXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBzZXRUeFBvd2VyKGludDhfdCBhVHhQb3dlcikKK3sKKyAgICB1aW50OF90IGkgPSAwOworCisgICAgaWYgKHNUeFBvd2VyICE9IGFUeFBvd2VyKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJUeFBvd2VyPSVkIiwgYVR4UG93ZXIpOworCisgICAgICAgIGZvciAoaSA9IHNpemVvZihzVHhQb3dlclRhYmxlKSAvIHNpemVvZihUeFBvd2VyVGFibGUpIC0gMTsgaSA+IDA7IGktLSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFUeFBvd2VyIDwgc1R4UG93ZXJUYWJsZVtpXS5tVHhQb3dlclZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX1RYUE9XRVIpID0gc1R4UG93ZXJUYWJsZVtpXS5tVHhQb3dlclJlZzsKKyAgICAgICAgc1R4UG93ZXIgPSBhVHhQb3dlcjsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgIHVpbnQ4X3QgKmV1aTY0ID0gKHVpbnQ4X3QgKilJRUVFX0VVSTY0OworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IE9UX0VYVF9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGFJZWVlRXVpNjRbaV0gPSBldWk2NFs3IC0gaV07CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUGFuaWQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJQQU5JRD0lWCIsIGFQYW5pZCk7CisKKyAgICBIV1JFRyhSRkNPUkVfRkZTTV9QQU5fSUQwKSA9IGFQYW5pZCAmIDB4RkY7CisgICAgSFdSRUcoUkZDT1JFX0ZGU01fUEFOX0lEMSkgPSBhUGFuaWQgPj4gODsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiRXh0QWRkcj0lWCVYJVglWCVYJVglWCVYIiwKKyAgICAgICAgICAgICAgICAgIGFBZGRyZXNzWzddLCBhQWRkcmVzc1s2XSwgYUFkZHJlc3NbNV0sIGFBZGRyZXNzWzRdLCBhQWRkcmVzc1szXSwKKyAgICAgICAgICAgICAgICAgIGFBZGRyZXNzWzJdLCBhQWRkcmVzc1sxXSwgYUFkZHJlc3NbMF0pOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspCisgICAgeworICAgICAgICAoKHZvbGF0aWxlIHVpbnQzMl90ICopUkZDT1JFX0ZGU01fRVhUX0FERFIwKVtpXSA9IGFBZGRyZXNzW2ldOworICAgIH0KK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU2hvcnRBZGRyPSVYIiwgYUFkZHJlc3MpOworCisgICAgSFdSRUcoUkZDT1JFX0ZGU01fU0hPUlRfQUREUjApID0gYUFkZHJlc3MgJiAweEZGOworICAgIEhXUkVHKFJGQ09SRV9GRlNNX1NIT1JUX0FERFIxKSA9IGFBZGRyZXNzID4+IDg7Cit9CisKK3ZvaWQgY2MyNTM4UmFkaW9Jbml0KHZvaWQpCit7CisgICAgc1RyYW5zbWl0RnJhbWUubUxlbmd0aCA9IDA7CisgICAgc1RyYW5zbWl0RnJhbWUubVBzZHUgPSBzVHJhbnNtaXRQc2R1OworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IDA7CisgICAgc1JlY2VpdmVGcmFtZS5tUHNkdSA9IHNSZWNlaXZlUHNkdTsKKworICAgIC8vIGVuYWJsZSBjbG9jaworICAgIEhXUkVHKFNZU19DVFJMX1JDR0NSRkMpID0gU1lTX0NUUkxfUkNHQ1JGQ19SRkMwOworICAgIEhXUkVHKFNZU19DVFJMX1NDR0NSRkMpID0gU1lTX0NUUkxfU0NHQ1JGQ19SRkMwOworICAgIEhXUkVHKFNZU19DVFJMX0RDR0NSRkMpID0gU1lTX0NUUkxfRENHQ1JGQ19SRkMwOworCisgICAgLy8gVGFibGUgMjMtNy4KKyAgICBIV1JFRyhSRkNPUkVfWFJFR19BR0NDVFJMMSkgPSAweDE1OworICAgIEhXUkVHKFJGQ09SRV9YUkVHX1RYRklMVENGRykgPSAweDA5OworICAgIEhXUkVHKEFOQV9SRUdTX0JBU0UgKyBBTkFfUkVHU19PX0lWQ1RSTCkgPSAweDBiOworCisgICAgSFdSRUcoUkZDT1JFX1hSRUdfQ0NBQ1RSTDApID0gMHhmODsKKyAgICBIV1JFRyhSRkNPUkVfWFJFR19GSUZPUENUUkwpID0gSUVFRTgwMjE1NF9NQVhfTEVOR1RIOworCisgICAgSFdSRUcoUkZDT1JFX1hSRUdfRlJNQ1RSTDApID0gUkZDT1JFX1hSRUdfRlJNQ1RSTDBfQVVUT0NSQyB8IFJGQ09SRV9YUkVHX0ZSTUNUUkwwX0FVVE9BQ0s7CisKKyAgICAvLyBkZWZhdWx0OiBTUkNNQVRDSC5TUkNfTUFUQ0hfRU4oMSksIFNSQ01BVENILkFVVE9QRU5EKDEpLAorICAgIC8vIFNSQ01BVENILlBFTkRfREFUQVJFUV9PTkxZKDEpLCBSRkNPUkVfWFJFR19GUk1DVFJMMV9QRU5ESU5HX09SKDApCisKKyAgICBIV1JFRyhSRkNPUkVfWFJFR19UWFBPV0VSKSA9IHNUeFBvd2VyVGFibGVbMF0ubVR4UG93ZXJSZWc7CisgICAgc1R4UG93ZXIgPSBzVHhQb3dlclRhYmxlWzBdLm1UeFBvd2VyVmFsOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJJbml0aWFsaXplZCIsIE5VTEwpOworfQorCitib29sIG90UGxhdFJhZGlvSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpID8gdHJ1ZSA6IGZhbHNlOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5hYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoIW90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX1NMRUVQIiwgTlVMTCk7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKG90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX0RJU0FCTEVEIiwgTlVMTCk7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfU0xFRVAgfHwgc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX1NMRUVQIiwgTlVMTCk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisgICAgICAgIGRpc2FibGVSZWNlaXZlcigpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlN0YXRlPU9UX1JBRElPX1NUQVRFX1JFQ0VJVkUiLCBOVUxMKTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIHNldENoYW5uZWwoYUNoYW5uZWwpOworICAgICAgICBzUmVjZWl2ZUZyYW1lLm1DaGFubmVsID0gYUNoYW5uZWw7CisgICAgICAgIGVuYWJsZVJlY2VpdmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBpbnQgaTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAgICAgd2hpbGUgKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX1RYX0FDVElWRSk7CisKKyAgICAgICAgLy8gZmx1c2ggdHhmaWZvCisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hUWDsKKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9GTFVTSFRYOworCisgICAgICAgIC8vIGZyYW1lIGxlbmd0aAorICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGREFUQSkgPSBhRnJhbWUtPm1MZW5ndGg7CisKKyAgICAgICAgLy8gZnJhbWUgZGF0YQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYUZyYW1lLT5tTGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZEQVRBKSA9IGFGcmFtZS0+bVBzZHVbaV07CisgICAgICAgIH0KKworICAgICAgICBzZXRDaGFubmVsKGFGcmFtZS0+bUNoYW5uZWwpOworICAgICAgICBzZXRUeFBvd2VyKGFGcmFtZS0+bVBvd2VyKTsKKworICAgICAgICB3aGlsZSAoKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIDEpID09IDApOworCisgICAgICAgIC8vIHdhaXQgZm9yIHZhbGlkIHJzc2kKKyAgICAgICAgd2hpbGUgKChIV1JFRyhSRkNPUkVfWFJFR19SU1NJU1RBVCkgJiBSRkNPUkVfWFJFR19SU1NJU1RBVF9SU1NJX1ZBTElEKSA9PSAwKTsKKworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oKChIV1JFRyhSRkNPUkVfWFJFR19GU01TVEFUMSkgJiBSRkNPUkVfWFJFR19GU01TVEFUMV9DQ0EpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgISgoSFdSRUcoUkZDT1JFX1hSRUdfRlNNU1RBVDEpICYgUkZDT1JFX1hSRUdfRlNNU1RBVDFfU0ZEKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFKTsKKworICAgICAgICAvLyBiZWdpbiB0cmFuc21pdAorICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1RYT047CisKKyAgICAgICAgd2hpbGUgKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX1RYX0FDVElWRSk7CisKKyAgICAgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJUcmFuc21pdHRlZCAlZCBieXRlcyIsIGFGcmFtZS0+bUxlbmd0aCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAwOworfQorCitvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19OT05FOworfQorCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gKEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUZJTFQwKSAmIFJGQ09SRV9YUkVHX0ZSTUZJTFQwX0ZSQU1FX0ZJTFRFUl9FTikgPT0gMDsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiUHJvbWlzY3VvdXNNb2RlPSVkIiwgYUVuYWJsZSA/IDEgOiAwKTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgSFdSRUcoUkZDT1JFX1hSRUdfRlJNRklMVDApICY9IH5SRkNPUkVfWFJFR19GUk1GSUxUMF9GUkFNRV9GSUxURVJfRU47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUZJTFQwKSB8PSBSRkNPUkVfWFJFR19GUk1GSUxUMF9GUkFNRV9GSUxURVJfRU47CisgICAgfQorfQorCit2b2lkIHJlYWRGcmFtZSh2b2lkKQoreworICAgIHVpbnQ4X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgY3JjQ29ycjsKKyAgICBpbnQgaTsKKworICAgIG90RVhQRUNUKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFIHx8IHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCk7CisgICAgb3RFWFBFQ1QoKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX0ZJRk9QKSAhPSAwKTsKKworICAgIC8vIHJlYWQgbGVuZ3RoCisgICAgbGVuZ3RoID0gSFdSRUcoUkZDT1JFX1NGUl9SRkRBVEEpOworICAgIG90RVhQRUNUKElFRUU4MDIxNTRfTUlOX0xFTkdUSCA8PSBsZW5ndGggJiYgbGVuZ3RoIDw9IElFRUU4MDIxNTRfTUFYX0xFTkdUSCk7CisKKyAgICAvLyByZWFkIHBzZHUKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoIC0gMjsgaSsrKQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVGcmFtZS5tUHNkdVtpXSA9IEhXUkVHKFJGQ09SRV9TRlJfUkZEQVRBKTsKKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciA9IChpbnQ4X3QpSFdSRUcoUkZDT1JFX1NGUl9SRkRBVEEpIC0gQ0MyNTM4X1JTU0lfT0ZGU0VUOworICAgIGNyY0NvcnIgPSBIV1JFRyhSRkNPUkVfU0ZSX1JGREFUQSk7CisKKyAgICBpZiAoY3JjQ29yciAmIENDMjUzOF9DUkNfQklUX01BU0spCisgICAgeworICAgICAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSBsZW5ndGg7CisgICAgICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IGNyY0NvcnIgJiBDQzI1MzhfTFFJX0JJVF9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyByZXNldHMgcnhmaWZvCisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWDsKKyAgICAgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9GTFVTSFJYOworCisgICAgICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiRHJvcHBpbmcgJWQgcmVjZWl2ZWQgYnl0ZXMgKEludmFsaWQgQ1JDKSIsIGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gY2hlY2sgZm9yIHJ4ZmlmbyBvdmVyZmxvdworICAgIGlmICgoSFdSRUcoUkZDT1JFX1hSRUdfRlNNU1RBVDEpICYgUkZDT1JFX1hSRUdfRlNNU1RBVDFfRklGT1ApICE9IDAgJiYKKyAgICAgICAgKEhXUkVHKFJGQ09SRV9YUkVHX0ZTTVNUQVQxKSAmIFJGQ09SRV9YUkVHX0ZTTVNUQVQxX0ZJRk8pID09IDApCisgICAgeworICAgICAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX0ZMVVNIUlg7CisgICAgICAgIEhXUkVHKFJGQ09SRV9TRlJfUkZTVCkgPSBSRkNPUkVfU0ZSX1JGU1RfSU5TVFJfRkxVU0hSWDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIGNjMjUzOFJhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmVhZEZyYW1lKCk7CisKKyAgICBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFICYmIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IDApIHx8CisgICAgICAgIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID4gSUVFRTgwMjE1NF9BQ0tfTEVOR1RIKSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsICZzUmVjZWl2ZUZyYW1lLCBzUmVjZWl2ZUVycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2lnbmFsIE1BQyBsYXllciBmb3IgZWFjaCByZWNlaXZlZCBmcmFtZSBpZiBwcm9taXNjb3VzIGlzIGVuYWJsZWQKKyAgICAgICAgICAgIC8vIG90aGVyd2lzZSBvbmx5IHNpZ25hbCBNQUMgbGF5ZXIgZm9yIG5vbi1BQ0sgZnJhbWUKKyAgICAgICAgICAgIGlmICgoKEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUZJTFQwKSAmIFJGQ09SRV9YUkVHX0ZSTUZJTFQwX0ZSQU1FX0ZJTFRFUl9FTikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID4gSUVFRTgwMjE1NF9BQ0tfTEVOR1RIKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlJlY2VpdmVkICVkIGJ5dGVzIiwgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkKKyAgICB7CisgICAgICAgIGlmIChzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FIHx8IChzVHJhbnNtaXRGcmFtZS5tUHNkdVswXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiVHJhbnNtaXQgZmFpbGVkIEVycm9yQ29kZT0lZCIsIHNUcmFuc21pdEVycm9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0RGlhZ1JhZGlvVHJhbnNtaXREb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9PSBJRUVFODAyMTU0X0FDS19MRU5HVEggJiYKKyAgICAgICAgICAgICAgICAgKHNSZWNlaXZlRnJhbWUubVBzZHVbMF0gJiBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFTSykgPT0gSUVFRTgwMjE1NF9GUkFNRV9UWVBFX0FDSyAmJgorICAgICAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tUHNkdVtJRUVFODAyMTU0X0RTTl9PRkZTRVRdID09IHNUcmFuc21pdEZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRFNOX09GRlNFVF0pKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworCisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgJnNSZWNlaXZlRnJhbWUsIHNUcmFuc21pdEVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IDA7Cit9CisKK3ZvaWQgUkZDb3JlUnhUeEludEhhbmRsZXIodm9pZCkKK3sKKyAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGSVJRRjApID0gMDsKK30KKwordm9pZCBSRkNvcmVFcnJJbnRIYW5kbGVyKHZvaWQpCit7CisgICAgSFdSRUcoUkZDT1JFX1NGUl9SRkVSUkYpID0gMDsKK30KKwordWludDMyX3QgZ2V0U3JjTWF0Y2hFbnRyaWVzRW5hYmxlU3RhdHVzKGJvb2wgYVNob3J0KQoreworICAgIHVpbnQzMl90IHN0YXR1cyA9IDA7CisgICAgdWludDMyX3QgKmFkZHIgPSBhU2hvcnQgPyAodWludDMyX3QgKikgUkZDT1JFX1hSRUdfU1JDU0hPUlRFTjAgOiAodWludDMyX3QgKikgUkZDT1JFX1hSRUdfU1JDRVhURU4wOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfRU5BQkxFX1NUQVRVU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBzdGF0dXMgfD0gSFdSRUcoYWRkcisrKSA8PCAoaSAqIDgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2ludDhfdCBmaW5kU3JjTWF0Y2hTaG9ydEVudHJ5KGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgdWludDE2X3Qgc2hvcnRBZGRyOworICAgIHVpbnQzMl90IGJpdE1hc2s7CisgICAgdWludDMyX3QgKmFkZHIgPSBOVUxMOworICAgIHVpbnQzMl90IHN0YXR1cyA9IGdldFNyY01hdGNoRW50cmllc0VuYWJsZVN0YXR1cyh0cnVlKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IFJGQ09SRV9YUkVHX1NSQ01BVENIX1NIT1JUX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIGJpdE1hc2sgPSAweDAwMDAwMDAxIDw8IGk7CisKKyAgICAgICAgaWYgKChzdGF0dXMgJiBiaXRNYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHIgPSAodWludDMyX3QgKilSRkNPUkVfRkZTTV9TUkNBRERSRVNTX1RBQkxFICsgKGkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9TSE9SVF9FTlRSWV9PRkZTRVQpOworCisgICAgICAgIHNob3J0QWRkciA9IEhXUkVHKGFkZHIgKyAyKTsKKyAgICAgICAgc2hvcnRBZGRyIHw9IEhXUkVHKGFkZHIgKyAzKSA8PCA4OworCisgICAgICAgIGlmICgoc2hvcnRBZGRyID09IGFTaG9ydEFkZHJlc3MpKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbnRyeTsKK30KKworaW50OF90IGZpbmRTcmNNYXRjaEV4dEVudHJ5KGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIGludDhfdCBlbnRyeSA9IC0xOworICAgIHVpbnQzMl90IGJpdE1hc2s7CisgICAgdWludDMyX3QgKmFkZHIgPSBOVUxMOworICAgIHVpbnQzMl90IHN0YXR1cyA9IGdldFNyY01hdGNoRW50cmllc0VuYWJsZVN0YXR1cyhmYWxzZSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgdWludDhfdCBqID0gMDsKKyAgICAgICAgYml0TWFzayA9IDB4MDAwMDAwMDEgPDwgMiAqIGk7CisKKyAgICAgICAgaWYgKChzdGF0dXMgJiBiaXRNYXNrKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHIgPSAodWludDMyX3QgKilSRkNPUkVfRkZTTV9TUkNBRERSRVNTX1RBQkxFICsgKGkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUllfT0ZGU0VUKTsKKworICAgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKG90RXh0QWRkcmVzcyk7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEhXUkVHKGFkZHIgKyBqKSAhPSBhRXh0QWRkcmVzc1tqXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChqID09IHNpemVvZihvdEV4dEFkZHJlc3MpKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbnRyeTsKK30KKwordm9pZCBzZXRTcmNNYXRjaEVudHJ5RW5hYmxlU3RhdHVzKGJvb2wgYVNob3J0LCB1aW50OF90IGFFbnRyeSwgYm9vbCBhRW5hYmxlKQoreworICAgIHVpbnQ4X3QgZW50cnkgPSBhU2hvcnQgPyBhRW50cnkgOiAoMiAqIGFFbnRyeSk7CisgICAgdWludDhfdCBpbmRleCA9IGVudHJ5IC8gODsKKyAgICB1aW50MzJfdCAqYWRkckVuID0gYVNob3J0ID8gKHVpbnQzMl90ICopUkZDT1JFX1hSRUdfU1JDU0hPUlRFTjAgOiAodWludDMyX3QgKilSRkNPUkVfWFJFR19TUkNFWFRFTjA7CisgICAgdWludDMyX3QgKmFkZHJBdXRvUGVuZEVuID0gYVNob3J0ID8gKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDU0hPUlRQRU5ERU4wIDogKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDRVhUUEVOREVOMDsKKyAgICB1aW50MzJfdCBiaXRNYXNrID0gMHgwMDAwMDAwMTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgSFdSRUcoYWRkckVuICsgaW5kZXgpIHw9IChiaXRNYXNrKSA8PCAoZW50cnkgJSA4KTsKKyAgICAgICAgSFdSRUcoYWRkckF1dG9QZW5kRW4gKyBpbmRleCkgfD0gKGJpdE1hc2spIDw8IChlbnRyeSAlIDgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBIV1JFRyhhZGRyRW4gKyBpbmRleCkgJj0gfigoYml0TWFzaykgPDwgKGVudHJ5ICUgOCkpOworICAgICAgICBIV1JFRyhhZGRyQXV0b1BlbmRFbiArIGluZGV4KSAmPSB+KChiaXRNYXNrKSA8PCAoZW50cnkgJSA4KSk7CisgICAgfQorfQorCitpbnQ4X3QgZmluZFNyY01hdGNoQXZhaWxFbnRyeShib29sIGFTaG9ydCkKK3sKKyAgICBpbnQ4X3QgZW50cnkgPSAtMTsKKyAgICB1aW50MzJfdCBiaXRNYXNrOworICAgIHVpbnQzMl90IHNob3J0RW5hYmxlU3RhdHVzID0gZ2V0U3JjTWF0Y2hFbnRyaWVzRW5hYmxlU3RhdHVzKHRydWUpOworICAgIHVpbnQzMl90IGV4dEVuYWJsZVN0YXR1cyA9IGdldFNyY01hdGNoRW50cmllc0VuYWJsZVN0YXR1cyhmYWxzZSk7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIlNob3J0IGVuYWJsZSBzdGF0dXM6IDB4JXgiLCBzaG9ydEVuYWJsZVN0YXR1cyk7CisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJFeHQgZW5hYmxlIHN0YXR1czogMHgleCIsIGV4dEVuYWJsZVN0YXR1cyk7CisKKyAgICBpZiAoYVNob3J0KQorICAgIHsKKyAgICAgICAgYml0TWFzayA9IDB4MDAwMDAwMDE7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfU0hPUlRfRU5UUklFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGV4dEVuYWJsZVN0YXR1cyAmIGJpdE1hc2spID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChzaG9ydEVuYWJsZVN0YXR1cyAmIGJpdE1hc2spID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgJSAyID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXh0RW5hYmxlU3RhdHVzID0gZXh0RW5hYmxlU3RhdHVzID4+IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNob3J0RW5hYmxlU3RhdHVzID0gc2hvcnRFbmFibGVTdGF0dXMgPj4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiaXRNYXNrID0gMHgwMDAwMDAwMzsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUklFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKChleHRFbmFibGVTdGF0dXMgfCBzaG9ydEVuYWJsZVN0YXR1cykgJiBiaXRNYXNrKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0RW5hYmxlU3RhdHVzID0gZXh0RW5hYmxlU3RhdHVzID4+IDI7CisgICAgICAgICAgICBzaG9ydEVuYWJsZVN0YXR1cyA9IHNob3J0RW5hYmxlU3RhdHVzID4+IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIkVuYWJsZVNyY01hdGNoPSVkIiwgYUVuYWJsZSA/IDEgOiAwKTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgLy8gb25seSBzZXQgRnJhbWVQZW5kaW5nIHdoZW4gYWNrIGZvciBkYXRhIHBvbGwgaWYgdGhlcmUgYXJlIHF1ZXVlZCBtZXNzYWdlcworICAgICAgICAvLyBmb3IgZW50cmllcyBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAgICBIV1JFRyhSRkNPUkVfWFJFR19GUk1DVFJMMSkgJj0gflJGQ09SRV9YUkVHX0ZSTUNUUkwxX1BFTkRJTkdfT1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIHNldCBGcmFtZVBlbmRpbmcgZm9yIGFsbCBhY2suCisgICAgICAgIEhXUkVHKFJGQ09SRV9YUkVHX0ZSTUNUUkwxKSB8PSBSRkNPUkVfWFJFR19GUk1DVFJMMV9QRU5ESU5HX09SOworICAgIH0KK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gZmluZFNyY01hdGNoQXZhaWxFbnRyeSh0cnVlKTsKKyAgICB1aW50MzJfdCAqYWRkciA9ICh1aW50MzJfdCAqKVJGQ09SRV9GRlNNX1NSQ0FERFJFU1NfVEFCTEU7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJBZGQgU2hvcnRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgYWRkciArPSAoZW50cnkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9TSE9SVF9FTlRSWV9PRkZTRVQpOworCisgICAgSFdSRUcoYWRkcisrKSA9IEhXUkVHKFJGQ09SRV9GRlNNX1BBTl9JRDApOworICAgIEhXUkVHKGFkZHIrKykgPSBIV1JFRyhSRkNPUkVfRkZTTV9QQU5fSUQxKTsKKyAgICBIV1JFRyhhZGRyKyspID0gYVNob3J0QWRkcmVzcyAmIDB4RkY7CisgICAgSFdSRUcoYWRkcisrKSA9IGFTaG9ydEFkZHJlc3MgPj4gODsKKworICAgIHNldFNyY01hdGNoRW50cnlFbmFibGVTdGF0dXModHJ1ZSwgKHVpbnQ4X3QpKGVudHJ5KSwgdHJ1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludDhfdCBlbnRyeSA9IGZpbmRTcmNNYXRjaEF2YWlsRW50cnkoZmFsc2UpOworICAgIHVpbnQzMl90ICphZGRyID0gKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDQUREUkVTU19UQUJMRTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkFkZCBFeHRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgYWRkciArPSAoZW50cnkgKiBSRkNPUkVfWFJFR19TUkNNQVRDSF9FWFRfRU5UUllfT0ZGU0VUKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihvdEV4dEFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBIV1JFRyhhZGRyKyspID0gYUV4dEFkZHJlc3NbaV07CisgICAgfQorCisgICAgc2V0U3JjTWF0Y2hFbnRyeUVuYWJsZVN0YXR1cyhmYWxzZSwgKHVpbnQ4X3QpKGVudHJ5KSwgdHJ1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludDhfdCBlbnRyeSA9IGZpbmRTcmNNYXRjaFNob3J0RW50cnkoYVNob3J0QWRkcmVzcyk7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBTaG9ydEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAsIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBzZXRTcmNNYXRjaEVudHJ5RW5hYmxlU3RhdHVzKHRydWUsICh1aW50OF90KShlbnRyeSksIGZhbHNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBpbnQ4X3QgZW50cnkgPSBmaW5kU3JjTWF0Y2hFeHRFbnRyeShhRXh0QWRkcmVzcyk7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBFeHRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgc2V0U3JjTWF0Y2hFbnRyeUVuYWJsZVN0YXR1cyhmYWxzZSwgKHVpbnQ4X3QpKGVudHJ5KSwgZmFsc2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90ICphZGRyRW4gPSAodWludDMyX3QgKilSRkNPUkVfWFJFR19TUkNTSE9SVEVOMDsKKyAgICB1aW50MzJfdCAqYWRkckF1dG9QZW5kRW4gPSAodWludDMyX3QgKilSRkNPUkVfRkZTTV9TUkNTSE9SVFBFTkRFTjA7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBTaG9ydEFkZHIgZW50cmllcyIsIE5VTEwpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfRU5BQkxFX1NUQVRVU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBIV1JFRyhhZGRyRW4rKykgPSAwOworICAgICAgICBIV1JFRyhhZGRyQXV0b1BlbmRFbisrKSA9IDA7CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90ICphZGRyRW4gPSAodWludDMyX3QgKilSRkNPUkVfWFJFR19TUkNFWFRFTjA7CisgICAgdWludDMyX3QgKmFkZHJBdXRvUGVuZEVuID0gKHVpbnQzMl90ICopUkZDT1JFX0ZGU01fU1JDRVhUUEVOREVOMDsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkNsZWFyIEV4dEFkZHIgZW50cmllcyIsIE5VTEwpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkZDT1JFX1hSRUdfU1JDTUFUQ0hfRU5BQkxFX1NUQVRVU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBIV1JFRyhhZGRyRW4rKykgPSAwOworICAgICAgICBIV1JFRyhhZGRyQXV0b1BlbmRFbisrKSA9IDA7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhU2NhbkNoYW5uZWw7CisgICAgKHZvaWQpYVNjYW5EdXJhdGlvbjsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQoreworICAgIC8vIFRPRE86IENyZWF0ZSBhIHByb3BlciBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBkcml2ZXIuCisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFQb3dlcjsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UmVjZWl2ZVNlbnNpdGl2aXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIENDMjUzOF9SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9yYW5kb20uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1YzkyZgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvcmFuZG9tLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworc3RhdGljIHZvaWQgZ2VuZXJhdGVSYW5kb20odWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICBIV1JFRyhTT0NfQURDX0FEQ0NPTjEpICY9IH4oU09DX0FEQ19BRENDT04xX1JDVFJMMSB8IFNPQ19BRENfQURDQ09OMV9SQ1RSTDApOworICAgIEhXUkVHKFNZU19DVFJMX1JDR0NSRkMpID0gU1lTX0NUUkxfUkNHQ1JGQ19SRkMwOworCisgICAgd2hpbGUgKEhXUkVHKFNZU19DVFJMX1JDR0NSRkMpICE9IFNZU19DVFJMX1JDR0NSRkNfUkZDMCk7CisKKyAgICBIV1JFRyhSRkNPUkVfWFJFR19GUk1DVFJMMCkgPSBSRkNPUkVfWFJFR19GUk1DVFJMMF9JTkZJTklUWV9SWDsKKyAgICBIV1JFRyhSRkNPUkVfU0ZSX1JGU1QpID0gUkZDT1JFX1NGUl9SRlNUX0lOU1RSX1JYT047CisKKyAgICB3aGlsZSAoIUhXUkVHKFJGQ09SRV9YUkVHX1JTU0lTVEFUKSAmIFJGQ09SRV9YUkVHX1JTU0lTVEFUX1JTU0lfVkFMSUQpOworCisgICAgZm9yICh1aW50MTZfdCBpbmRleCA9IDA7IGluZGV4IDwgYU91dHB1dExlbmd0aDsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGFPdXRwdXRbaW5kZXhdID0gMDsKKworICAgICAgICBmb3IgKHVpbnQ4X3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgOCAqIHNpemVvZih1aW50OF90KTsgb2Zmc2V0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPdXRwdXRbaW5kZXhdIDw8PSAxOworICAgICAgICAgICAgYU91dHB1dFtpbmRleF0gfD0gKEhXUkVHKFJGQ09SRV9YUkVHX1JGUk5EKSAmIFJGQ09SRV9YUkVHX1JGUk5EX0lSTkQpOworICAgICAgICB9CisgICAgfQorCisgICAgSFdSRUcoUkZDT1JFX1NGUl9SRlNUKSA9IFJGQ09SRV9TRlJfUkZTVF9JTlNUUl9SRk9GRjsKK30KKwordm9pZCBjYzI1MzhSYW5kb21Jbml0KHZvaWQpCit7CisgICAgdWludDE2X3Qgc2VlZCA9IDA7CisKKyAgICB3aGlsZSAoc2VlZCA9PSAweDAwMDAgfHwgc2VlZCA9PSAweDgwMDMpCisgICAgeworICAgICAgICBnZW5lcmF0ZVJhbmRvbSgodWludDhfdCAqKSZzZWVkLCBzaXplb2Yoc2VlZCkpOworICAgIH0KKworICAgIEhXUkVHKFNPQ19BRENfUk5ETCkgPSAoc2VlZCA+PiA4KSAmIDB4ZmY7CisgICAgSFdSRUcoU09DX0FEQ19STkRMKSA9IHNlZWQgJiAweGZmOworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCByYW5kb20gPSAwOworCisgICAgSFdSRUcoU09DX0FEQ19BRENDT04xKSB8PSBTT0NfQURDX0FEQ0NPTjFfUkNUUkwwOworICAgIHJhbmRvbSA9IEhXUkVHKFNPQ19BRENfUk5ETCkgfCAoSFdSRUcoU09DX0FEQ19STkRIKSA8PCA4KTsKKworICAgIEhXUkVHKFNPQ19BRENfQURDQ09OMSkgfD0gU09DX0FEQ19BRENDT04xX1JDVFJMMDsKKyAgICByYW5kb20gfD0gKChIV1JFRyhTT0NfQURDX1JOREwpIHwgKEhXUkVHKFNPQ19BRENfUk5ESCkgPDwgOCkpIDw8IDE2KTsKKworICAgIHJldHVybiByYW5kb207Cit9CisKK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY2hhbm5lbCA9IDA7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oYU91dHB1dCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgaWYgKG90UGxhdFJhZGlvSXNFbmFibGVkKHNJbnN0YW5jZSkpCisgICAgeworICAgICAgICBjaGFubmVsID0gMTEgKyAoSFdSRUcoUkZDT1JFX1hSRUdfRlJFUUNUUkwpIC0gMTEpIC8gNTsKKyAgICAgICAgb3RQbGF0UmFkaW9TbGVlcChzSW5zdGFuY2UpOworICAgICAgICBvdFBsYXRSYWRpb0Rpc2FibGUoc0luc3RhbmNlKTsKKyAgICB9CisKKyAgICBnZW5lcmF0ZVJhbmRvbShhT3V0cHV0LCBhT3V0cHV0TGVuZ3RoKTsKKworICAgIGlmIChjaGFubmVsKQorICAgIHsKKyAgICAgICAgY2MyNTM4UmFkaW9Jbml0KCk7CisgICAgICAgIG90UGxhdFJhZGlvRW5hYmxlKHNJbnN0YW5jZSk7CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZShzSW5zdGFuY2UsIGNoYW5uZWwpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3JvbS11dGlsaXR5LmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3JvbS11dGlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ODIzNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1Mzgvcm9tLXV0aWxpdHkuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJPTV9VVElMSVRZX0hfCisjZGVmaW5lIFJPTV9VVElMSVRZX0hfCisKKyNkZWZpbmUgUk9NX0FQSV9UQUJMRV9BRERSIDB4MDAwMDAwNDgKKwordHlwZWRlZiB1aW50MzJfdCAoKiB2b2xhdGlsZSBGUFRSX0NSQzMyX1QpKHVpbnQ4X3QgKiAvKnBEYXRhKi8sIHVpbnQzMl90IC8qYnl0ZUNvdW50Ki8pOwordHlwZWRlZiB1aW50MzJfdCAoKiB2b2xhdGlsZSBGUFRSX0dFVEZMU0laRV9UKSh2b2lkKTsKK3R5cGVkZWYgdWludDMyX3QgKCogdm9sYXRpbGUgRlBUUl9HRVRDSElQSURfVCkodm9pZCk7Cit0eXBlZGVmIGludDMyX3QgKCogdm9sYXRpbGUgRlBUUl9QQUdFRVJBU0VfVCkodWludDMyX3QgLypGbGFzaEFkZHIqLywgdWludDMyX3QgLypTaXplKi8pOwordHlwZWRlZiBpbnQzMl90ICgqIHZvbGF0aWxlIEZQVFJfUFJPR0ZMQVNIX1QpKHVpbnQzMl90ICogLypwUmFtRGF0YSovLCB1aW50MzJfdCAvKkZsYXNoQWRyKi8sIHVpbnQzMl90IC8qQnl0ZUNvdW50Ki8pOwordHlwZWRlZiB2b2lkICgqIHZvbGF0aWxlIEZQVFJfUkVTRVRERVZfVCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKigqIHZvbGF0aWxlIEZQVFJfTUVNU0VUX1QpKHZvaWQgKiAvKnMqLywgaW50MzJfdCAvKmMqLywgdWludDMyX3QgLypuKi8pOwordHlwZWRlZiB2b2lkICooKiB2b2xhdGlsZSBGUFRSX01FTUNQWV9UKSh2b2lkICogLypzMSovLCBjb25zdCB2b2lkICogLypzMiovLCB1aW50MzJfdCAvKm4qLyk7Cit0eXBlZGVmIGludDMyX3QgKCogdm9sYXRpbGUgRlBUUl9NRU1DTVBfVCkoY29uc3Qgdm9pZCAqIC8qczEqLywgY29uc3Qgdm9pZCAqIC8qczIqLywgdWludDMyX3QgLypuKi8pOwordHlwZWRlZiB2b2lkICooKiB2b2xhdGlsZSBGUFRSX01FTU1PVkVfVCkodm9pZCAqIC8qczEqLywgY29uc3Qgdm9pZCAqIC8qczIqLywgdWludDMyX3QgLypuKi8pOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZQVFJfQ1JDMzJfVCAgICAgICAgQ3JjMzI7CisgICAgRlBUUl9HRVRGTFNJWkVfVCAgICBHZXRGbGFzaFNpemU7CisgICAgRlBUUl9HRVRDSElQSURfVCAgICBHZXRDaGlwSWQ7CisgICAgRlBUUl9QQUdFRVJBU0VfVCAgICBQYWdlRXJhc2U7CisgICAgRlBUUl9QUk9HRkxBU0hfVCAgICBQcm9ncmFtRmxhc2g7CisgICAgRlBUUl9SRVNFVERFVl9UICAgICBSZXNldERldmljZTsKKyAgICBGUFRSX01FTVNFVF9UICAgICAgIG1lbXNldDsKKyAgICBGUFRSX01FTUNQWV9UICAgICAgIG1lbWNweTsKKyAgICBGUFRSX01FTUNNUF9UICAgICAgIG1lbWNtcDsKKyAgICBGUFRSX01FTU1PVkVfVCAgICAgIG1lbW1vdmU7Cit9IFJPTV9BUElfVDsKKworI2RlZmluZSBQX1JPTV9BUEkgICAgICAgICAgICAgICgoUk9NX0FQSV9UKikgUk9NX0FQSV9UQUJMRV9BRERSKQorCisjZGVmaW5lIFJPTV9DcmMzMihhLGIpICAgICAgICAgIFBfUk9NX0FQSS0+Q3JjMzIoYSxiKQorI2RlZmluZSBST01fR2V0Rmxhc2hTaXplKCkgICAgICBQX1JPTV9BUEktPkdldEZsYXNoU2l6ZSgpCisjZGVmaW5lIFJPTV9HZXRDaGlwSWQoKSAgICAgICAgIFBfUk9NX0FQSS0+R2V0Q2hpcElkKCkKKyNkZWZpbmUgUk9NX1BhZ2VFcmFzZShhLGIpICAgICAgUF9ST01fQVBJLT5QYWdlRXJhc2UoYSxiKQorI2RlZmluZSBST01fUHJvZ3JhbUZsYXNoKGEsYixjKSBQX1JPTV9BUEktPlByb2dyYW1GbGFzaChhLGIsYykKKyNkZWZpbmUgUk9NX1Jlc2V0RGV2aWNlKCkgICAgICAgUF9ST01fQVBJLT5SZXNldERldmljZSgpCisjZGVmaW5lIFJPTV9NZW1zZXQoYSxiLGMpICAgICAgIFBfUk9NX0FQSS0+bWVtc2V0KGEsYixjKQorI2RlZmluZSBST01fTWVtY3B5KGEsYixjKSAgICAgICBQX1JPTV9BUEktPm1lbWNweShhLGIsYykKKyNkZWZpbmUgUk9NX01lbWNtcChhLGIsYykgICAgICAgUF9ST01fQVBJLT5tZW1jbXAoYSxiLGMpCisjZGVmaW5lIFJPTV9NZW1tb3ZlKGEsYixjKSAgICAgIFBfUk9NX0FQSS0+bWVtbW92ZShhLGIsYykKKworI2VuZGlmICAvLyBST01fVVRJTElUWV9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9zdGFydHVwLWdjYy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC9zdGFydHVwLWdjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjI4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNTM4L3N0YXJ0dXAtZ2NjLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgZ2NjLXNwZWNpZmljIHN0YXJ0dXAgY29kZSBmb3IgdGhlIGNjMjUzOC4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjYzI1MzgtcmVnLmgiCisKK2V4dGVybiB1aW50OF90IF9sZGF0YTsKK2V4dGVybiB1aW50OF90IF9kYXRhOworZXh0ZXJuIHVpbnQ4X3QgX2VkYXRhOworZXh0ZXJuIHVpbnQ4X3QgX2JzczsKK2V4dGVybiB1aW50OF90IF9lYnNzOworZXh0ZXJuIHVpbnQ4X3QgX2luaXRfYXJyYXk7CitleHRlcm4gdWludDhfdCBfZWluaXRfYXJyYXk7CisKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fRElfXykpKTsKK2ludCBfX2N4YV9ndWFyZF9hY3F1aXJlKF9fZ3VhcmQgKmcpIHsgcmV0dXJuICEqKGNoYXIgKikoZyk7IH0KK3ZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkICpnKSB7ICooY2hhciAqKWcgPSAxOyB9Cit2b2lkIF9fY3hhX2d1YXJkX2Fib3J0KF9fZ3VhcmQgKmcpIHsgKHZvaWQpZzsgfQordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkgeyB3aGlsZSAoMSk7IH0KKwordm9pZCBJbnREZWZhdWx0SGFuZGxlcih2b2lkKTsKK3ZvaWQgUmVzZXRIYW5kbGVyKHZvaWQpOworCitleHRlcm4gdm9pZCBTeXNUaWNrX0hhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBVQVJUMEludEhhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBSRkNvcmVSeFR4SW50SGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIFJGQ29yZUVyckludEhhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBtYWluKHZvaWQpOworCitzdGF0aWMgdWludDY0X3Qgc3RhY2tbNTEyXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuc3RhY2siKSkpOworCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIudmVjdG9ycyIpLCB1c2VkKSkKK3ZvaWQgKCpjb25zdCB2ZWN0b3JzW10pKHZvaWQpID0KK3sKKyAgICAodm9pZCAoKikodm9pZCkpKCh1bnNpZ25lZCBsb25nKXN0YWNrICsgc2l6ZW9mKHN0YWNrKSksICAgLy8gSW5pdGlhbCBTdGFjayBQb2ludGVyCisgICAgUmVzZXRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgVGhlIHJlc2V0IGhhbmRsZXIKKyAgICBSZXNldEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyAyIFRoZSBOTUkgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIDMgVGhlIGhhcmQgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA0IFRoZSBNUFUgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA1IFRoZSBidXMgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA2IFRoZSB1c2FnZSBmYXVsdCBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDcgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOCBSZXNlcnZlZAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA5IFJlc2VydmVkCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwIFJlc2VydmVkCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDExIFNWQ2FsbCBoYW5kbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDEyIERlYnVnIG1vbml0b3IgaGFuZGxlcgorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMyBSZXNlcnZlZAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNCBUaGUgUGVuZFNWIGhhbmRsZXIKKyAgICBTeXNUaWNrX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTUgVGhlIFN5c1RpY2sgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNiBHUElPIFBvcnQgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxNyBHUElPIFBvcnQgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxOCBHUElPIFBvcnQgQworICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAxOSBHUElPIFBvcnQgRAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyMCBub25lCisgICAgVUFSVDBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIxIFVBUlQwIFJ4IGFuZCBUeAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAyMiBVQVJUMSBSeCBhbmQgVHgKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMjMgU1NJMCBSeCBhbmQgVHgKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMjQgSTJDIE1hc3RlciBhbmQgU2xhdmUKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjUgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjYgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjcgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjggUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjkgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzAgQURDIFNlcXVlbmNlIDAKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzEgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzIgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzMgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzQgV2F0Y2hkb2cgdGltZXIsIHRpbWVyIDAKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzUgVGltZXIgMCBzdWJ0aW1lciBBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDM2IFRpbWVyIDAgc3VidGltZXIgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyAzNyBUaW1lciAxIHN1YnRpbWVyIEEKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gMzggVGltZXIgMSBzdWJ0aW1lciBCCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDM5IFRpbWVyIDIgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA0MCBUaW1lciAyIHN1YnRpbWVyIEIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNDEgQW5hbG9nIENvbXBhcmF0b3IgMAorICAgIFJGQ29yZVJ4VHhJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAvLyA0MiBSRkNvcmUgUngvVHgKKyAgICBSRkNvcmVFcnJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy8gNDMgUkZDb3JlIEVycm9yCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ0IEljZVBpY2sKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNDUgRkxBU0ggQ29udHJvbAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA0NiBBRVMKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNDcgUEtBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ4IFNsZWVwIFRpbWVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ5IE1hY1RpbWVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDUwIFNTSTEgUnggYW5kIFR4CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIDUxIFRpbWVyIDMgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA1MiBUaW1lciAzIHN1YnRpbWVyIEIKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTMgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTQgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTUgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTYgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTcgUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTggUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTkgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNjAgVVNCIDI1MzgKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNjEgUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gNjIgdURNQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyA2MyB1RE1BIEVycm9yCit9OworCit2b2lkIEludERlZmF1bHRIYW5kbGVyKHZvaWQpCit7CisgICAgd2hpbGUgKDEpOworfQorCisjZGVmaW5lIEZMQVNIX0NDQV9CT09UTERSX0NGR19ESVNBQkxFICAgICAgICAgICAweEVGRkZGRkZGIC8vLzwgRGlzYWJsZSBiYWNrZG9vciBmdW5jdGlvbgorI2RlZmluZSBGTEFTSF9DQ0FfQk9PVExEUl9DRkdfRU5BQkxFICAgICAgICAgICAgMHhGMEZGRkZGRiAvLy88IEVuYWJsZSBiYWNrZG9vciBmdW5jdGlvbgorI2RlZmluZSBGTEFTSF9DQ0FfQk9PVExEUl9DRkdfQUNUSVZFX0hJR0ggICAgICAgMHgwODAwMDAwMCAvLy88IFNlbGVjdGVkIHBpbiBvbiBwYWQgQSBhY3RpdmUgaGlnaAorI2RlZmluZSBGTEFTSF9DQ0FfQk9PVExEUl9DRkdfUE9SVF9BX1BJTl9NICAgICAgMHgwNzAwMDAwMCAvLy88IFNlbGVjdGVkIHBpbiBvbiBwYWQgQSBtYXNrCisjZGVmaW5lIEZMQVNIX0NDQV9CT09UTERSX0NGR19QT1JUX0FfUElOX1MgICAgICAyNCAgICAgICAgIC8vLzwgU2VsZWN0ZWQgcGluIG9uIHBhZCBBIHNoaWZ0CisjZGVmaW5lIEZMQVNIX0NDQV9JTUFHRV9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8vLzwgSW5kaWNhdGVzIHZhbGlkIGltYWdlIGluIGZsYXNoCisKKyNkZWZpbmUgRkxBU0hfQ0NBX0NPTkZfQk9PVExEUl9CQUNLRE9PUl9QT1JUX0FfUElOICAzICAgICAgLy8vPCBTZWxlY3QgQnV0dG9uIG9uIFNtYXJ0UkYwNiBFdmFsIEJvYXJkCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdWkzMkJvb3RsZHJDZmc7CisgICAgdWludDMyX3QgdWkzMkltYWdlVmFsaWQ7CisgICAgdWludDMyX3QgdWkzMkltYWdlVmVjdG9yQWRkcjsKKyAgICB1aW50OF90ICB1aThsb2NrWzMyXTsKK30gZmxhc2hfY2NhX2xvY2tfcGFnZV90OworCitfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmZsYXNoY2NhIiksIHVzZWQpKQorY29uc3QgZmxhc2hfY2NhX2xvY2tfcGFnZV90IGZsYXNoX2NjYV9sb2NrX3BhZ2UgPQoreworICAgIEZMQVNIX0NDQV9CT09UTERSX0NGR19FTkFCTEUgfCAoRkxBU0hfQ0NBX0NPTkZfQk9PVExEUl9CQUNLRE9PUl9QT1JUX0FfUElOIDw8IEZMQVNIX0NDQV9CT09UTERSX0NGR19QT1JUX0FfUElOX1MpLAorICAgIEZMQVNIX0NDQV9JTUFHRV9WQUxJRCwKKyAgICAodWludDMyX3QpICZ2ZWN0b3JzLAorICAgIHsKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRgorICAgIH0KK307CisKK3R5cGVkZWYgdm9pZCAoKmluaXRfZm5fdCkodm9pZCk7CisKK3ZvaWQgUmVzZXRIYW5kbGVyKHZvaWQpCit7CisgICAgSFdSRUcoU1lTX0NUUkxfRU1VT1ZSKSA9IDB4RkY7CisKKyAgICAvLyBjb25maWd1cmUgY2xvY2tzCisgICAgSFdSRUcoU1lTX0NUUkxfQ0xPQ0tfQ1RSTCkgfD0gU1lTX0NUUkxfQ0xPQ0tfQ1RSTF9BTVBfREVUOworICAgIEhXUkVHKFNZU19DVFJMX0NMT0NLX0NUUkwpID0gU1lTX0NUUkxfU1lTRElWXzMyTUhaOworCisgICAgLy8gYWx0ZXJuYXRlIG1hcAorICAgIEhXUkVHKFNZU19DVFJMX0lfTUFQKSB8PSBTWVNfQ1RSTF9JX01BUF9BTFRNQVA7CisKKyAgICAvLyBjb3B5IHRoZSBkYXRhIHNlZ21lbnQgaW5pdGlhbGl6ZXJzIGZyb20gZmxhc2ggdG8gU1JBTQorICAgIG1lbWNweSgmX2RhdGEsICZfbGRhdGEsICZfZWRhdGEgLSAmX2RhdGEpOworCisgICAgLy8gemVyby1maWxsIHRoZSBic3Mgc2VnbWVudAorICAgIG1lbXNldCgmX2JzcywgMCwgJl9lYnNzIC0gJl9ic3MpOworCisgICAgLy8gQysrIHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gKEJTUywgRGF0YSwgcmVsb2NhdGlvbiwgZXRjLikKKyAgICBpbml0X2ZuX3QgKmZwOworCisgICAgZm9yIChmcCA9IChpbml0X2ZuX3QgKikmX2luaXRfYXJyYXk7IGZwIDwgKGluaXRfZm5fdCAqKSZfZWluaXRfYXJyYXk7IGZwKyspCisgICAgeworICAgICAgICAoKmZwKSgpOworICAgIH0KKworICAgIC8vIGNhbGwgdGhlIGFwcGxpY2F0aW9uJ3MgZW50cnkgcG9pbnQKKyAgICBtYWluKCk7CisKKyAgICAvLyBlbmQgaGVyZSBpZiBtYWluKCkgcmV0dXJucworICAgIHdoaWxlICgxKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjUzOC91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExMzE5YwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI1MzgvdWFydC5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBVQVJUIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWNjMjUzOC5oIgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworZW51bQoreworICAgIGtQbGF0Zm9ybUNsb2NrID0gMzIwMDAwMDAsCisgICAga0JhdWRSYXRlID0gMTE1MjAwLAorICAgIGtSZWNlaXZlQnVmZmVyU2l6ZSA9IDEyOCwKK307CisKK2V4dGVybiB2b2lkIFVBUlQwSW50SGFuZGxlcih2b2lkKTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCk7CisKK3N0YXRpYyBjb25zdCB1aW50OF90ICpzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworc3RhdGljIHVpbnQxNl90IHNUcmFuc21pdExlbmd0aCA9IDA7CisKK3R5cGVkZWYgc3RydWN0IFJlY3ZCdWZmZXIKK3sKKyAgICAvLyBUaGUgZGF0YSBidWZmZXIKKyAgICB1aW50OF90IG1CdWZmZXJba1JlY2VpdmVCdWZmZXJTaXplXTsKKyAgICAvLyBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbUhlYWQ7CisgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgbmV4dCBpdGVtIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbVRhaWw7Cit9IFJlY3ZCdWZmZXI7CisKK3N0YXRpYyBSZWN2QnVmZmVyIHNSZWNlaXZlOworCitvdEVycm9yIG90UGxhdFVhcnRFbmFibGUodm9pZCkKK3sKKyAgICB1aW50MzJfdCBkaXY7CisKKyAgICBzUmVjZWl2ZS5tSGVhZCA9IDA7CisgICAgc1JlY2VpdmUubVRhaWwgPSAwOworCisgICAgLy8gY2xvY2sKKyAgICBIV1JFRyhTWVNfQ1RSTF9SQ0dDVUFSVCkgPSBTWVNfQ1RSTF9SQ0dDVUFSVF9VQVJUMDsKKyAgICBIV1JFRyhTWVNfQ1RSTF9TQ0dDVUFSVCkgPSBTWVNfQ1RSTF9TQ0dDVUFSVF9VQVJUMDsKKyAgICBIV1JFRyhTWVNfQ1RSTF9EQ0dDVUFSVCkgPSBTWVNfQ1RSTF9EQ0dDVUFSVF9VQVJUMDsKKworICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fQ0MpID0gMDsKKworICAgIC8vIHR4IHBpbgorICAgIEhXUkVHKElPQ19QQTFfU0VMKSA9IElPQ19NVVhfT1VUX1NFTF9VQVJUMF9UWEQ7CisgICAgSFdSRUcoSU9DX1BBMV9PVkVSKSA9IElPQ19PVkVSUklERV9PRTsKKyAgICBIV1JFRyhHUElPX0FfQkFTRSArIEdQSU9fT19BRlNFTCkgfD0gR1BJT19QSU5fMTsKKworICAgIC8vIHJ4IHBpbgorICAgIEhXUkVHKElPQ19QQTBfU0VMKSA9IElPQ19VQVJUUlhEX1VBUlQwOworICAgIEhXUkVHKElPQ19QQTBfT1ZFUikgPSBJT0NfT1ZFUlJJREVfRElTOworICAgIEhXUkVHKEdQSU9fQV9CQVNFICsgR1BJT19PX0FGU0VMKSB8PSBHUElPX1BJTl8wOworCisgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19DVEwpID0gMDsKKworICAgIC8vIGJhdWQgcmF0ZQorICAgIGRpdiA9ICgoKGtQbGF0Zm9ybUNsb2NrICogOCkgLyBrQmF1ZFJhdGUpICsgMSkgLyAyOworICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fSUJSRCkgPSBkaXYgLyA2NDsKKyAgICBIV1JFRyhVQVJUMF9CQVNFICsgVUFSVF9PX0ZCUkQpID0gZGl2ICUgNjQ7CisgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19MQ1JIKSA9IFVBUlRfQ09ORklHX1dMRU5fOCB8IFVBUlRfQ09ORklHX1NUT1BfT05FIHwgVUFSVF9DT05GSUdfUEFSX05PTkU7CisKKyAgICAvLyBjb25maWd1cmUgaW50ZXJydXB0cworICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fSU0pIHw9IFVBUlRfSU1fUlhJTSB8IFVBUlRfSU1fUlRJTTsKKworICAgIC8vIGVuYWJsZQorICAgIEhXUkVHKFVBUlQwX0JBU0UgKyBVQVJUX09fQ1RMKSA9IFVBUlRfQ1RMX1VBUlRFTiB8IFVBUlRfQ1RMX1RYRSB8IFVBUlRfQ1RMX1JYRTsKKworICAgIC8vIGVuYWJsZSBpbnRlcnJ1cHRzCisgICAgSFdSRUcoTlZJQ19FTjApID0gMSA8PCAoKElOVF9VQVJUMCAtIDE2KSAmIDMxKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydFNlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90RVhQRUNUX0FDVElPTihzVHJhbnNtaXRCdWZmZXIgPT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIHNUcmFuc21pdEJ1ZmZlciA9IGFCdWY7CisgICAgc1RyYW5zbWl0TGVuZ3RoID0gYUJ1Zkxlbmd0aDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCkKK3sKKyAgICAvLyBDb3B5IHRhaWwgdG8gcHJldmVudCBtdWx0aXBsZSByZWFkcworICAgIHVpbnQxNl90IHRhaWwgPSBzUmVjZWl2ZS5tVGFpbDsKKworICAgIC8vIElmIHRoZSBkYXRhIHdyYXBzIGFyb3VuZCwgcHJvY2VzcyB0aGUgZmlyc3QgcGFydAorICAgIGlmIChzUmVjZWl2ZS5tSGVhZCA+IHRhaWwpCisgICAgeworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmUubUJ1ZmZlciArIHNSZWNlaXZlLm1IZWFkLCBrUmVjZWl2ZUJ1ZmZlclNpemUgLSBzUmVjZWl2ZS5tSGVhZCk7CisKKyAgICAgICAgLy8gUmVzZXQgdGhlIGJ1ZmZlciBtSGVhZCBiYWNrIHRvIHplcm8uCisgICAgICAgIHNSZWNlaXZlLm1IZWFkID0gMDsKKyAgICB9CisKKyAgICAvLyBGb3IgYW55IGRhdGEgcmVtYWluaW5nLCBwcm9jZXNzIGl0CisgICAgaWYgKHNSZWNlaXZlLm1IZWFkICE9IHRhaWwpCisgICAgeworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmUubUJ1ZmZlciArIHNSZWNlaXZlLm1IZWFkLCB0YWlsIC0gc1JlY2VpdmUubUhlYWQpOworCisgICAgICAgIC8vIFNldCBtSGVhZCB0byB0aGUgbG9jYWwgdGFpbCB3ZSBoYXZlIGNhY2hlZAorICAgICAgICBzUmVjZWl2ZS5tSGVhZCA9IHRhaWw7CisgICAgfQorfQorCit2b2lkIHByb2Nlc3NUcmFuc21pdCh2b2lkKQoreworICAgIG90RVhQRUNUKHNUcmFuc21pdEJ1ZmZlciAhPSBOVUxMKTsKKworICAgIGZvciAoOyBzVHJhbnNtaXRMZW5ndGggPiAwOyBzVHJhbnNtaXRMZW5ndGgtLSkKKyAgICB7CisgICAgICAgIHdoaWxlIChIV1JFRyhVQVJUMF9CQVNFICsgVUFSVF9PX0ZSKSAmIFVBUlRfRlJfVFhGRik7CisKKyAgICAgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19EUikgPSAqc1RyYW5zbWl0QnVmZmVyKys7CisgICAgfQorCisgICAgc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKKyAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgY2MyNTM4VWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICBwcm9jZXNzUmVjZWl2ZSgpOworICAgIHByb2Nlc3NUcmFuc21pdCgpOworfQorCit2b2lkIFVBUlQwSW50SGFuZGxlcih2b2lkKQoreworICAgIHVpbnQzMl90IG1pczsKKyAgICB1aW50OF90IGJ5dGU7CisKKyAgICBtaXMgPSBIV1JFRyhVQVJUMF9CQVNFICsgVUFSVF9PX01JUyk7CisgICAgSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19JQ1IpID0gbWlzOworCisgICAgaWYgKG1pcyAmIChVQVJUX0lNX1JYSU0gfCBVQVJUX0lNX1JUSU0pKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCEoSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1JYRkUpKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlID0gSFdSRUcoVUFSVDBfQkFTRSArIFVBUlRfT19EUik7CisKKyAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IHdyaXRlIGlmIGluY3JlbWVudGluZyBtVGFpbCBkb2Vzbid0IGVxdWFsIG1IZWFkCisgICAgICAgICAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc1JlY2VpdmUubUJ1ZmZlcltzUmVjZWl2ZS5tVGFpbF0gPSBieXRlOworICAgICAgICAgICAgICAgIHNSZWNlaXZlLm1UYWlsID0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTYyNDZhCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDc2IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1jYzI2NTAuYQorCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvZXhhbXBsZXMvcGxhdGZvcm1zICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUgICAgXAorICAgICQoTUJFRFRMU19DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWlzYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFuZG9tLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9zaGEyNTZfYWx0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY3J5cHRvL2Flc19hbHQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYzI2NTBfY2NmZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNjMjY1MF9zdGFydHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX0RFUEVOREVOQ0lFUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmEgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworbGlib3BlbnRocmVhZF9jYzI2NTBfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgZGlhZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBwbGF0Zm9ybS1jYzI2NTAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtCitsaWJvcGVudGhyZWFkX2NjMjY1MF9hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHNoZWxsIGZpbmQgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscyAkKERhc2gpdHlwZSBmICQoRGFzaCluYW1lICIqLm8iKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzZDFiYwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTM5IEBACisjIE9wZW5UaHJlYWQgb24gQ0MyNjUwIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciB0aGUgW1RleGFzCitJbnN0cnVtZW50cyBDQzI2NTBdW2NjMjY1MF0uCisKK1RoZSBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgYXJlIGludGVuZGVkIHRvIHByZXNlbnQgdGhlIG1pbmltYWwgY29kZSBuZWNlc3NhcnkKK3RvIHN1cHBvcnQgT3BlblRocmVhZC4gQXMgYSByZXN1bHQsIHRoZSBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgZG8gbm90CituZWNlc3NhcmlseSBoaWdobGlnaHQgdGhlIHBsYXRmb3JtJ3MgZnVsbCBjYXBhYmlsaXRpZXMuIFRoZSBwbGF0Zm9ybQorYWJzdHJhY3Rpb24gbGF5ZXIgd2FzIGJ1aWxkIGZvciB0aGUgW0NDMjY1MCBMQVVOQ0hYTF1bY2MyNjUwLWxhdW5jaHhsXSwgdXNhZ2UKK29uIG90aGVyIGJvYXJkcyB3aXRoIGEgQ0MyNjUwIHdpbGwgcmVxdWlyZSBjaGFuZ2VzIHRvIHRoZSBwZXJpcGhlcmFsIGRyaXZlcnMuCisKK0R1ZSB0byBmbGFzaCBzaXplIGxpbWl0YXRpb25zLCBzb21lIGZlYXR1cmVzIG9mIE9wZW5UaHJlYWQgYXJlIG5vdCBzdXBwb3J0ZWQgb24KK3RoZSBbVGV4YXMgSW5zdHJ1bWVudHMgQ0MyNjUwXVtjYzI2NTBdLiBUaGlzIHBsYXRmb3JtIGlzIGludGVuZGVkIGZvcgorZXhwcmltZW50YXRpb24gYW5kIGV4cGxvcmF0aW9uIG9mIE9wZW5UaHJlYWQsIG5vdCBhIHByb2R1Y3Rpb24gcmVhZHkKK2Vudmlyb25tZW50LiBUZXhhcyBJbnN0cnVtZW50cyByZWNvbW1lbmRzIGZ1dHVyZSBUSSBTb0NzIGZvciBwcm9kdWN0aW9uLgorCitCdWlsZGluZyB3aXRoIGdjYyA1LjQgaXMgcmVjb21tZW5kZWQgZHVlIHRvIGdlbmVyYXRlZCBjb2RlIHNpemUgY29uY2VybnMuCisKK0FsbCB0aHJlZSBjb25maWd1cmF0aW9ucyB3ZXJlIHRlc3RlZCB3aXRoIGBhcm0tbm9uZS1lYWJpLWdjYyA1LjQuMSAyMDE2MDYwOQorKHJlbGVhc2UpYCBvbiBbdGhpcyBjb21taXRdW3Rlc3RlZC1jb21taXRdLiBUaGUgYXV0b21hdGljIGludGVncmF0aW9uIGJ1aWxkcyBoYXZlIHNpbmNlCitiZWVuIGxpbWl0ZWQgdG8gb25seSB0aGUgYGNsaS1tdGRgIGNvbmZpZ3VyYXRpb24gdG8gbGltaXQgdGhlIGltcGFjdCBvbiBwdWxsCityZXF1ZXN0cy4KKworW2NjMjY1MF06IGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvQ0MyNjUwCitbY2MyNjUwLWxhdW5jaHhsXTogaHR0cDovL3d3dy50aS5jb20vdG9vbC9MYXVuY2h4bC1jYzI2NTAKK1t0ZXN0ZWQtY29tbWl0XTogaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9jb21taXQvZTg2MTEyOTFkNjVlOGFkMjhkNzdhNzY0NTY5NWM1MzUyNTA0YzNkZAorCisjIyBCdWlsZCBFbnZpcm9ubWVudAorCitCdWlsZGluZyB0aGUgZXhhbXBsZXMgZm9yIHRoZSBjYzI2NTAgcmVxdWlyZXMgW0dOVSBBdXRvQ29uZl1bZ251LWF1dG9jb25mXSwKK1tHTlUgQXV0b01ha2VdW2dudS1hdXRvbWFrZV0sIFtQeXRob25dW3B5dGhvbl0sIGFuZCB0aGUKK1tBUk0gZ2NjIHRvb2xjaGFpbl1bYXJtLXRvb2xjaGFpbl0uCisKK1dpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgYXJtIHRvb2xjaGFpbiwgbW9zdCBvZiB0aGVzZSB0b29scyBhcmUgaW5zdGFsbGVkIGJ5CitkZWZhdWx0IG9uIG1vZGVybiBQb3NpeCBzeXN0ZW1zLiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgdGhlc2UgdG9vbHMgaW5zdGFsbGVkIGJ5CitkZWZhdWx0LCBhbmQgdGhlIGJvb3RzdHJhcCBzY3JpcHQgcmVxdWlyZXMgYSBQb3NpeCBvciBNU1lTIGVudmlyb25tZW50IHRvIHJ1bi4KK0l0IGlzIHBvc3NpYmxlIHRvIHNldHVwIGFuIE1TWVMgZW52aXJvbm1lbnQgaW5zaWRlIG9mIFdpbmRvd3MgdXNpbmcgdG9vbHMgc3VjaAorYXMgW0N5Z3dpbl1bY3lnd2luXSBvciBbTWluR1ddW21pbmd3XSBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0dXAgYSBMaW51eCBWTQorZm9yIGJ1aWxkaW5nIG9uIGEgV2luZG93cyBzeXN0ZW0uIEZvciBoZWxwIHNldHRpbmcgdXAgVmlydHVhbEJveCB3aXRoIFVidW50dSwKK2NvbnN1bHQgdGhpcyBbY29tbXVuaXR5IGhlbHAgd2lraSBhcnRpY2xlXVt1YnVudHUtd2lraS12aXJ0dWFsYm94XS4KKworW2dudS1hdXRvY29uZl06IGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYKK1tnbnUtYXV0b21ha2VdOiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlCitbcHl0aG9uXTogaHR0cHM6Ly93d3cucHl0aG9uLm9yZworW2FybS10b29sY2hhaW5dOiBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZAorW2N5Z3dpbl06IGh0dHBzOi8vd3d3LmN5Z3dpbi5jb20KK1ttaW5nd106IGh0dHA6Ly93d3cubWluZ3cub3JnCitbdWJ1bnR1LXdpa2ktdmlydHVhbGJveF06IGh0dHBzOi8vaGVscC51YnVudHUuY29tL2NvbW11bml0eS9WaXJ0dWFsQm94CisKKworIyMgQnVpbGRpbmcKKworSW4gYSBCYXNoIHRlcm1pbmFsLCBmb2xsb3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIHRvIGJ1aWxkIHRoZSBjYzI2NTAgZXhhbXBsZXMuCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1jYzI2NTAKK2BgYAorCisjIyBGbGFzaCBCaW5hcmllcworCitJZiB0aGUgYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgdGhlIGBlbGZgIGZpbGVzIG1heSBiZSBmb3VuZCBpbgorYDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC9jYzI2NTAvYmluYC4KKworVG8gZmxhc2ggdGhlIGltYWdlcyB3aXRoIFtGbGFzaCBQcm9ncmFtbWVyIDJdW3RpLWZsYXNoLXByb2dyYW1tZXItMl0sIHRoZSBmaWxlcworbXVzdCBoYXZlIHRoZSBgKi5lbGZgIGV4dGVuc2lvbi4KK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjY1MC9iaW4KKyQgY3Agb3QtY2xpIG90LWNsaS5lbGYKK2BgYAorCitUbyBsb2FkIHRoZSBpbWFnZXMgd2l0aCB0aGUgW3NlcmlhbCBib290bG9hZGVyXVt0aS1jYzI2NTAtYm9vdGxvYWRlcl0sIHRoZQoraW1hZ2VzIG11c3QgYmUgY29udmVydGVkIHRvIGBiaW5gLiBUaGlzIGlzIGRvbmUgdXNpbmcgYGFybS1ub25lLWVhYmktb2JqY29weWAKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4vb3V0cHV0L2NjMjY1MC9iaW4KKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSBvdC1jbGkgb3QtY2xpLmJpbgorYGBgCitUaGUgW2NjMjUzOC1ic2wucHkgc2NyaXB0XVtjYzI1MzgtYnNsLXRvb2xdIHByb3ZpZGVzIGEgY29udmVuaWVudCBtZXRob2QKK2ZvciBmbGFzaGluZyBhIENDMjY1MCB2aWEgdGhlIFVBUlQuIFRvIGVudGVyIHRoZSBib290bG9hZGVyIGJhY2tkb29yIGZvciBmbGFzaGluZywKK2hvbGQgZG93biBCVE4tMSBvbiBDQzI2NTAgTGF1Y2hQYWQgb3IgU0VMRUNUIGZvciBDQzI2NTBESyAoY29ycmVzcG9uZHMgdG8gbG9naWMgJzAnKQord2hpbGUgeW91IHByZXNzIHRoZSBSZXNldCBidXR0b24uCisKK1t0aS1mbGFzaC1wcm9ncmFtbWVyLTJdOiBodHRwOi8vd3d3LnRpLmNvbS90b29sL2ZsYXNoLXByb2dyYW1tZXIKK1t0aS1jYzI2NTAtYm9vdGxvYWRlcl06IGh0dHA6Ly93d3cudGkuY29tL2xpdC9hbi9zd3JhNDY2YS9zd3JhNDY2YS5wZGYKK1tjYzI1MzgtYnNsLXRvb2xdOiBodHRwczovL2dpdGh1Yi5jb20vSmVsbWVyVC9jYzI1MzgtYnNsCisKKyMjIEludGVyYWN0CisKKyMjIyBDTEkgZXhhbXBsZQorCisxLiBXaXRoIGEgdGVybWluYWwgY2xpZW50IChwdXR0eSwgbWluaWNvbSwgZXRjLikgb3BlbiB0aGUgY29tIHBvcnQgYXNzb2NpYXRlZAorICAgd2l0aCB0aGUgY2MyNjUwIFVBUlQuIFRoZSBzZXJpYWwgcG9ydCBzZXR0aW5ncyBhcmU6CisgICAgKiAxMTUyMDAgYmF1ZAorICAgICogOCBkYXRhIGJpdHMKKyAgICAqIG5vIHBhcml0eSBiaXQKKyAgICAqIDEgc3RvcCBiaXQKKzIuIFR5cGUgYGhlbHBgIGZvciBhIGxpc3Qgb2YgY29tbWFuZHMKKzMuIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBbQ0xJIFJFQURNRV1bY2xpLXJlYWRtZV0gZm9yIGluc3RydWN0aW9ucyBvbgorICAgc2V0dGluZyB1cCBhIG5ldHdvcmsKKworW2NsaS1yZWFkbWVdOiAuLi8uLi8uLi9zcmMvY2xpL1JFQURNRS5tZAorCitgYGBiYXNoCis+IGhlbHAKK2hlbHAKK2NoYW5uZWwKK2NoaWxkdGltZW91dAorY29udGV4dHJldXNlZGVsYXkKK2V4dGFkZHIKK2V4dHBhbmlkCitpcGFkZHIKK2tleXNlcXVlbmNlCitsZWFkZXJ3ZWlnaHQKK21hc3RlcmtleQorbW9kZQorbmV0ZGF0YXJlZ2lzdGVyCituZXR3b3JraWR0aW1lb3V0CituZXR3b3JrbmFtZQorcGFuaWQKK3BpbmcKK3ByZWZpeAorcmVsZWFzZXJvdXRlcmlkCitybG9jMTYKK3JvdXRlCityb3V0ZXJ1cGdyYWRldGhyZXNob2xkCitzY2FuCitzdGFydAorc3RhdGUKK3N0b3AKK3doaXRlbGlzdAorYGBgCisKKyMjIyBOQ1AgZXhhbXBsZQorCitSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgW3dwYW50dW5kXVt3cGFudHVuZF0gcHJvamVjdCBmb3IgYnVpbGQKK2luc3RydWN0aW9ucyBhbmQgdXNhZ2UgaW5mb3JtYXRpb24uCisKK1t3cGFudHVuZF06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL3dwYW50dW5kCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZmU5YwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvYWxhcm0uYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9ydGMuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2RpYWcuaD4KKworLyoqCisgKiAvTk9URTogd2UgY291bGQgdXNlIHN5c3RpY2ssIGJ1dCB0aGF0IHdvdWxkIHNhY3JpZmljZSBhdGxlYXN0IGEgZmV3IG9wcworICogZXZlcnkgbXMsIGFuZCBub3QgcnVuIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBzbGVlcGluZy4KKyAqLworCitzdGF0aWMgdWludDMyX3Qgc1RpbWUwICAgICA9IDA7CitzdGF0aWMgdWludDMyX3Qgc0FsYXJtVGltZSA9IDA7CitzdGF0aWMgYm9vbCAgICAgc0lzUnVubmluZyA9IGZhbHNlOworCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0tY2MyNjUwLmgKKyAqLwordm9pZCBjYzI2NTBBbGFybUluaXQodm9pZCkKK3sKKyAgICAvKgorICAgICAqIE5PVEU6IHRoaXMgd2lsbCBub3QgZW5hYmxlIHRoZSBpbmRpdmlkdWFsIHJ0YyBhbGFybSBjaGFubmVscworICAgICAqLworICAgIEFPTlJUQ0VuYWJsZSgpOworICAgIHNJc1J1bm5pbmcgPSB0cnVlOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vYWxhcm0uaAorICovCit1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKQoreworICAgIC8qCisgICAgICogVGhpcyBpcyBjdXJyZW50IHZhbHVlIG9mIFJUQyBhcyBpdCBhcHBlYXJzIGluIHRoZSByZWdpc3Rlci4KKyAgICAgKiBXaXRoIHNlY29uZHMgYXMgdGhlIHVwcGVyIDMyIGJ5dGVzIGFuZCBmcmFjdGlvbnMgb2YgYSBzZWNvbmQgYXMgdGhlCisgICAgICogbG93ZXIgMzIgYnl0ZXMgPDMyLjMyPi4KKyAgICAgKi8KKyAgICB1aW50NjRfdCBydGNWYWwgPSBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldCgpOworICAgIHJldHVybiAoKHJ0Y1ZhbCAqIDEwMDApID4+IDMyKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL2FsYXJtLmgKKyAqLwordm9pZCBvdFBsYXRBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc1RpbWUwID0gYVQwOworICAgIHNBbGFybVRpbWUgPSBhRHQ7CisgICAgc0lzUnVubmluZyA9IHRydWU7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9hbGFybS5oCisgKi8KK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0lzUnVubmluZyA9IGZhbHNlOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0tY2MyNjUwLmgKKyAqLwordm9pZCBjYzI2NTBBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90IG9mZnNldFRpbWU7CisKKyAgICBpZiAoc0lzUnVubmluZykKKyAgICB7CisgICAgICAgIC8qIHVuc2luZ2VkIHN1YnRyYWN0aW9uIHdpbGwgcmVzdWx0IGluIHRoZSBhYnNvbHV0ZSBvZmZzZXQgKi8KKyAgICAgICAgb2Zmc2V0VGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCkgLSBzVGltZTA7CisKKyAgICAgICAgaWYgKHNBbGFybVRpbWUgPD0gb2Zmc2V0VGltZSkKKyAgICAgICAgeworICAgICAgICAgICAgc0lzUnVubmluZyA9IGZhbHNlOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0RGlhZ0FsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0QWxhcm1GaXJlZChhSW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NjMjY1MF9jY2ZnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NjMjY1MF9jY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxZmE0NwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY2MyNjUwX2NjZmcuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQ29uZmlndXJlIHRoZSBDdXN0b21lciBDb25maWd1cmF0aW9uIEFyZWEuCisgKi8KKworLy8gZW5hYmxlIGJvb3Rsb2FkZXIgYmFja2Rvb3IKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFICAgICAgICAgICAgMHhDNSAgICAgICAvLyBFbmFibGUgUk9NIGJvb3QgbG9hZGVyCisKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgwICAgICAgICAvLyBBY3RpdmUgbG93IHRvIG9wZW4gYm9vdCBsb2FkZXIgYmFja2Rvb3IKKworI2RlZmluZSBTRVRfQ0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUiAgICAgICAgICAgICAgICAweDBEICAgICAgIC8vIERJTzEzIChCVE4tMSBidXR0b24pIG9uIENDMjY1MCBMYXVuY2hQYWQgQm9hcmQgZm9yIGJvb3QgbG9hZGVyIGJhY2tkb29yCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9QSU5fTlVNQkVSICAgICAgICAgICAgIDB4MEIgICAgICAgLy8gRElPMTEgKFNFTEVDVCBidXR0b24pIG9uIENDMjY1MERLIChRRk40OC83KjcpIGZvciBib290IGxvYWRlciBiYWNrZG9vcgorCisjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4QzUgICAgICAgLy8gRW5hYmxlZCBib290IGxvYWRlciBiYWNrZG9vcgorCisjZGVmaW5lIFNFVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSUQgICAgICAgICAgIDB4MDAwMDAwMDAgLy8gRmxhc2ggaW1hZ2UgaXMgdmFsaWQKKworLyoKKyAqIEluY2x1ZGUgdGhlIGRlZmF1bHQgY2NmZyBzdHJ1Y3QgYW5kIGNvbmZpZ3VyYXRpb24gY29kZS4KKyAqLworI2luY2x1ZGUgPHN0YXJ0dXBfZmlsZXMvY2NmZy5jPgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jYzI2NTBfcmFkaW8uaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY2MyNjUwX3JhZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyOGFmNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY2MyNjUwX3JhZGlvLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0MyNjUwX1JBRElPX0hfCisjZGVmaW5lIENDMjY1MF9SQURJT19IXworCisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX2llZWVfY21kLmg+CisKK2VudW0KK3sKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFTSyAgICAgICAgPSAweDcsICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYpIFBTRFUuRkNGLmZyYW1lVHlwZQorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgICAgICA9IDB4MiwgICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNikgZnJhbWUgdHlwZTogQUNLCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgICAgID0gKDE8PDQpLCAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBQU0RVLkZDRi5iRnJhbWVQZW5kaW5nCisgICAgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCAgICAgICAgICAgID0gKDE8PDUpLCAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBQU0RVLkZDRi5iQVIKKyAgICBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICAgICAgPSAyLCAgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYpIFBTRFUuc2VxdWVuY2VOdW1iZXIKKyAgICBJRUVFODAyMTU0X01BQ19NSU5fQkUgICAgICAgICAgICAgPSAxLCAgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYpIG1hY01pbkJFCisgICAgSUVFRTgwMjE1NF9NQUNfTUFYX0JFICAgICAgICAgICAgID0gNSwgICAgICAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBtYWNNYXhCRQorICAgIElFRUU4MDIxNTRfTUFDX01BWF9DU01BX0JBQ0tPRkZTICA9IDQsICAgICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNikgbWFjTWF4Q1NNQUJhY2tvZmZzCisgICAgSUVFRTgwMjE1NF9NQUNfTUFYX0ZSQU1FU19SRVRSSUVTID0gMywgICAgICAgLy8vPCAoSUVFRSA4MDIuMTUuNC0yMDA2KSBtYWNNYXhGcmFtZVJldHJpZXMKKyAgICBJRUVFODAyMTU0X0FfVUlOVF9CQUNLT0ZGX1BFUklPRCAgPSAyMCwgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNy40LjEpIE1BQyBjb25zdGFudHMKKyAgICBJRUVFODAyMTU0X0FfVFVSTkFST1VORF9USU1FICAgICAgPSAxMiwgICAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNi40LjEpIFBIWSBjb25zdGFudHMKKyAgICBJRUVFODAyMTU0X1BIWV9TSFJfRFVSQVRJT04gICAgICAgPSAxMCwKKyAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNi40LjIpIFBIWSBQSUIgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgdGhlIE8tUVBTSyBQSFkKKyAgICBJRUVFODAyMTU0X1BIWV9TWU1CT0xTX1BFUl9PQ1RFVCAgPSAyLAorICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNiA2LjQuMikgUEhZIFBJQiBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSB0aGUgTy1RUFNLIFBIWQorICAgIElFRUU4MDIxNTRfTUFDX0FDS19XQUlUX0RVUkFUSU9OICA9IChJRUVFODAyMTU0X0FfVUlOVF9CQUNLT0ZGX1BFUklPRCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFRUU4MDIxNTRfQV9UVVJOQVJPVU5EX1RJTUUgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjE1NF9QSFlfU0hSX0RVUkFUSU9OICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDYgKiBJRUVFODAyMTU0X1BIWV9TWU1CT0xTX1BFUl9PQ1RFVCkpLAorICAgIC8vLzwgKElFRUUgODAyLjE1LjQtMjAwNiA3LjQuMikgbWFjQWNrV2FpdER1cmF0aW9uIFBJQiBhdHRyaWJ1dGUKKyAgICBJRUVFODAyMTU0X1NZTUJPTFNfUEVSX1NFQyAgICAgICAgPSA2MjUwMCAgICAvLy88IChJRUVFIDgwMi4xNS40LTIwMDYgNi41LjMuMikgTy1RUFNLIHN5bWJvbCByYXRlCit9OworCitlbnVtCit7CisgICAgQ0MyNjUwX1JBVF9USUNLU19QRVJfU0VDICAgICAgICAgID0gNDAwMDAwMCwgLy8vPCA0TUh6IGNsb2NrCisgICAgQ0MyNjUwX0lOVkFMSURfUlNTSSAgICAgICAgICAgICAgID0gMTI3LAorICAgIENDMjY1MF9VTktOT1dOX0VVSTY0ICAgICAgICAgICAgICA9IDB4RkYsCisgICAgLy8vPCBJZiB0aGUgRVVJNjQgcmVhZCBmcm9tIHRoZSBjY2ZnIGlzIGFsbCBvbmVzIHRoZW4gdGhlIGN1c3RvbWVyIGRpZCBub3Qgc2V0IHRoZSBhZGRyZXNzCit9OworCisvKioKKyAqIFRYIFBvd2VyIGRCbSBsb29rdXAgdGFibGUgLSB2YWx1ZXMgZnJvbSBTbWFydFJGIFN0dWRpbworICovCit0eXBlZGVmIHN0cnVjdCBvdXRwdXRfY29uZmlnCit7CisgICAgaW50ICAgICAgZGJtOworICAgIHVpbnQxNl90IHZhbHVlOworfSBvdXRwdXRfY29uZmlnX3Q7CisKK3N0YXRpYyBjb25zdCBvdXRwdXRfY29uZmlnX3QgcmdPdXRwdXRQb3dlcltdID0KK3sKKyAgICB7ICAgNSwgMHg5MzMwfSwKKyAgICB7ICAgNCwgMHg5MzI0fSwKKyAgICB7ICAgMywgMHg1YTFjfSwKKyAgICB7ICAgMiwgMHg0ZTE4fSwKKyAgICB7ICAgMSwgMHg0MjE0fSwKKyAgICB7ICAgMCwgMHgzMTYxfSwKKyAgICB7ICAtMywgMHgyNTU4fSwKKyAgICB7ICAtNiwgMHgxZDUyfSwKKyAgICB7ICAtOSwgMHgxOTRlfSwKKyAgICB7IC0xMiwgMHgxNDRifSwKKyAgICB7IC0xNSwgMHgwY2NifSwKKyAgICB7IC0xOCwgMHgwY2M5fSwKKyAgICB7IC0yMSwgMHgwY2M3fSwKK307CisKKyNkZWZpbmUgT1VUUFVUX0NPTkZJR19DT1VOVCAoc2l6ZW9mKHJnT3V0cHV0UG93ZXIpIC8gc2l6ZW9mKHJnT3V0cHV0UG93ZXJbMF0pKQorCisvKiBNYXggYW5kIE1pbiBPdXRwdXQgUG93ZXIgaW4gZEJtICovCisjZGVmaW5lIE9VVFBVVF9QT1dFUl9NSU4gICAgIChyZ091dHB1dFBvd2VyW09VVFBVVF9DT05GSUdfQ09VTlQgLSAxXS5kYm0pCisjZGVmaW5lIE9VVFBVVF9QT1dFUl9NQVggICAgIChyZ091dHB1dFBvd2VyWzBdLmRibSkKKyNkZWZpbmUgT1VUUFVUX1BPV0VSX1VOS05PV04gMHhGRkZGCisKKy8qKgorICogcmV0dXJuIHZhbHVlIHVzZWQgd2hlbiBzZWFyY2hpbmcgdGhlIHNvdXJjZSBtYXRjaCBhcnJheQorICovCisjZGVmaW5lIENDMjY1MF9TUkNfTUFUQ0hfTk9ORSAweEZGCisKKy8qKgorICogbnVtYmVyIG9mIGV4dGVuZGVkIGFkZHJlc3NlcyB1c2VkIGZvciBzb3VyY2UgbWF0Y2hpbmcKKyAqLworI2RlZmluZSBDQzI2NTBfRVhUQUREX1NSQ19NQVRDSF9OVU0gMTAKKworLyoqCisgKiBzdHJ1Y3R1cmUgZm9yIHNvdXJjZSBtYXRjaGluZyBleHRlbmRlZCBhZGRyZXNzZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg0KSkpIGV4dF9zcmNfbWF0Y2hfZGF0YQoreworICAgIHVpbnQzMl90IHNyY01hdGNoRW5bKChDQzI2NTBfRVhUQUREX1NSQ19NQVRDSF9OVU0gKyAzMSkgLyAzMildOworICAgIHVpbnQzMl90IHNyY1BlbmRFblsoKENDMjY1MF9FWFRBRERfU1JDX01BVENIX05VTSArIDMxKSAvIDMyKV07CisgICAgdWludDY0X3QgZXh0QWRkckVudFtDQzI2NTBfRVhUQUREX1NSQ19NQVRDSF9OVU1dOworfSBleHRfc3JjX21hdGNoX2RhdGFfdDsKKworLyoqCisgKiBudW1iZXIgb2Ygc2hvcnQgYWRkcmVzc2VzIHVzZWQgZm9yIHNvdXJjZSBtYXRjaGluZworICovCisjZGVmaW5lIENDMjY1MF9TSE9SVEFERF9TUkNfTUFUQ0hfTlVNIDEwCisKKy8qKgorICogc3RydWN0dXJlIGZvciBzb3VyY2UgbWF0Y2hpbmcgc2hvcnQgYWRkcmVzc2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSBzaG9ydF9zcmNfbWF0Y2hfZGF0YQoreworICAgIHVpbnQzMl90IHNyY01hdGNoRW5bKChDQzI2NTBfU0hPUlRBRERfU1JDX01BVENIX05VTSArIDMxKSAvIDMyKV07CisgICAgdWludDMyX3Qgc3JjUGVuZEVuWygoQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU0gKyAzMSkgLyAzMildOworICAgIHJmY19zaG9ydEFkZHJFbnRyeV90IGV4dEFkZHJFbnRbQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU1dOworfSBzaG9ydF9zcmNfbWF0Y2hfZGF0YV90OworCisvKioKKyAqIHNpemUgb2YgbGVuZ3RoIGZpZWxkIGluIHJlY2VpdmUgc3RydWN0CisgKgorICogZGVmaW5lZCBpbiBUYWJsZSAyMy0xMCBvZiB0aGUgY2MyNnh4IFRSTQorICovCisjZGVmaW5lIERBVEFfRU5UUllfTEVOU1pfQllURSAxCisKKy8qKgorICogYWRkcmVzcyB0eXBlIGZvciBAcmVmIHJmQ29yZU1vZGlmeVNvdXJjZU1hdGNoRW50cnkoKQorICovCit0eXBlZGVmIGVudW0gY2MyNjUwX2FkZHJlc3MKK3sKKyAgICBTSE9SVF9BRERSRVNTID0gMSwKKyAgICBFWFRfQUREUkVTUyAgID0gMCwKK30gY2MyNjUwX2FkZHJlc3NfdDsKKworLyoqCisgKiBUaGlzIGVudW0gcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSByYWRpby4KKyAqIEluaXRpYWxseSwgYSByYWRpbyBpcyBpbiB0aGUgRGlzYWJsZWQgc3RhdGUuCisgKgorICogVGhlIGZvbGxvd2luZyBhcmUgdmFsaWQgcmFkaW8gc3RhdGUgdHJhbnNpdGlvbnMgZm9yIHRoZSBjYzI2NTA6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmFkaW8gT04pCisgKiAgKy0tLS0tLS0tLS0rICBFbmFibGUoKSAgKy0tLS0tLS0rICBSZWNlaXZlKCkgICArLS0tLS0tLS0tKyAgIFRyYW5zbWl0KCkgICstLS0tLS0tLS0tKworICogIHwgICAgICAgICAgfC0tLS0tLS0tLS0tPnwgICAgICAgfC0tLS0tLS0tLS0tLS0+fCAgICAgICAgIHwtLS0tLS0tLS0tLS0tLT58ICAgICAgICAgIHwKKyAqICB8IERpc2FibGVkIHwgICAgICAgICAgICB8IFNsZWVwIHwgICAgICAgICAgICAgIHwgUmVjZWl2ZSB8ICAgICAgICAgICAgICAgfCBUcmFuc21pdCB8CisgKiAgfCAgICAgICAgICB8PC0tLS0tLS0tLS0tfCAgICAgICB8PC0tLS0tLS0tLS0tLS18ICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLXwgICAgICAgICAgfAorICogICstLS0tLS0tLS0tKyAgRGlzYWJsZSgpIHwgICAgICAgfCAgIFNsZWVwKCkgICAgfCAgICAgICAgIHw8LS0gIFJlY2VpdmUoKSArLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKFJhZGlvIE9GRikgICstLS0tLS0tLS0rICAgXCAgICAgICAgICAgfCB0cmFuc21pdAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tXCAgICB8IGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8IEVuZXJneVNjYW4oKSArLS0tLS0tLS0rICAgICAgICAgICAgfCAgIFYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwtLS0tLS0tLS0tLS0tPnwgICAgICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgfCBFZFNjYW4gfCAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8PC0tLS0tLS0tLS0tLS18ICAgICAgICB8ICAgICAgfCBUcmFuc21pdENvbXBsZXRlIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgIHNpZ25hbCBFRCAgIHwgICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgc2NhbiBkb25lICAgKy0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogVGhlc2Ugc3RhdGVzIHNsaWdodGx5IGRpZmZlciBmcm9tIHRoZSBzdGF0ZXMgaW4gXHJlZiBpbmNsdWRlL3BsYXRmb3JtL3JhZGlvLmguCisgKiBUaGUgYWRkaXRpb25hbCBzdGF0ZXMgdGhlIHBoeSBjYW4gYmUgaW4gYXJlIGR1ZSB0byB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZQorICogb2YgdGhlIENNMCByYWRpbyBjb3JlLgorICoKKyAqIHwgc3RhdGUgICAgICAgICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAqIHwgRGlzYWJsZWQgICAgICAgICB8IFRoZSByZmNvcmUgcG93ZXJkb21haW4gaXMgb2ZmIGFuZCB0aGUgUkZDUEUgaXMgb2ZmIHwKKyAqIHwgU2xlZXAgICAgICAgICAgICB8IFRoZSBSRkNPUkUgUEQgaXMgb24sIGFuZCB0aGUgUkZDUEUgaXMgaW4gSUVFRSBtb2RlIHwKKyAqIHwgUmVjZWl2ZSAgICAgICAgICB8IFRoZSBSRkNQRSBpcyBydW5uaW5nIGEgQ01EX0lFRUVfUlggICAgICAgICAgICAgICAgIHwKKyAqIHwgVHJhbnNtaXQgICAgICAgICB8IFRoZSBSRkNQRSBpcyBydW5uaW5nIGEgdHJhbnNtaXQgY29tbWFuZCBzdHJpbmcgICAgIHwKKyAqIHwgVHJhbnNtaXRDb21wbGV0ZSB8IFRoZSB0cmFuc21pdCBjb21tYW5kIHN0cmluZyBoYXMgY29tcGxldGVkICAgICAgICAgIHwKKyAqIHwgRWRTY2FuICAgICAgICAgICB8IFRoZSBSRkNQRSBpcyBydW5uaW5nIGEgQ01EX0lFRUVfRURfU0NBTiAgICAgICAgICAgIHwKKyAqCisgKiBcbm90ZSBUaGUgUkFUIHN0YXJ0IGFuZCBSYWRpbyBTZXR1cCBjb21tYW5kcyBtYXkgYmUgbW92ZWQgdG8gdGhlIFJlY2VpdmUoKQorICogICAgICAgYW5kIEVuZXJneVNjYW4oKSB0cmFuc2l0aW9ucyBpbiB0aGUgZnV0dXJlLgorICovCit0eXBlZGVmIGVudW0gY2MyNjUwX1BoeVN0YXRlCit7CisgICAgY2MyNjUwX3N0YXRlRGlzYWJsZWQgPSAwLAorICAgIGNjMjY1MF9zdGF0ZVNsZWVwLAorICAgIGNjMjY1MF9zdGF0ZVJlY2VpdmUsCisgICAgY2MyNjUwX3N0YXRlRWRTY2FuLAorICAgIGNjMjY1MF9zdGF0ZVRyYW5zbWl0LAorICAgIGNjMjY1MF9zdGF0ZVRyYW5zbWl0Q29tcGxldGUsCit9IGNjMjY1MF9QaHlTdGF0ZTsKKworI2VuZGlmIC8qIENDMjY1MF9SQURJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jYzI2NTBfc3RhcnR1cC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jYzI2NTBfc3RhcnR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGI1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NjMjY1MF9zdGFydHVwLmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEluY2x1ZGUgdGhlIHN0YW5kYXJkIHN0YXJ0dXAgZmlsZXMgZm9yIHRoZSBnY2MgdG9vbGNoYWluCisgKi8KKyNpbmNsdWRlIDxzdGFydHVwX2ZpbGVzL3N0YXJ0dXBfZ2NjLmM+CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NyeXB0by9hZXNfYWx0LmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NyeXB0by9hZXNfYWx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5OTRjYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL2Flc19hbHQuYwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgImFlc19hbHQuaCIKKworI2lmZGVmIE1CRURUTFNfQUVTX0FMVAorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NyeXB0by5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjZGVmaW5lIENDMjY1MF9BRVNfS0VZX1VOVVNFRCAoLTEpCisjZGVmaW5lIENDMjY1MF9BRVNfQ1RYX01BR0lDICAoMHg3RSkKKworLyoqCisgKiBiaXRtYXAgb2Ygd2hpY2gga2V5IHN0b3JlcyBhcmUgY3VycmVudGx5IHVzZWQKKyAqLworc3RhdGljIHVpbnQ4X3Qgc1VzZWRLZXlzID0gMDsKKworLyoqCisgKiBudW1iZXIgb2YgYWN0aXZlIGNvbnRleHRzLCB1c2VkIGZvciBwb3dlciBvbi9vZmYgb2YgdGhlIGNyeXB0byBjb3JlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc1JlZk51bSA9IDA7CisKK3ZvaWQgbWJlZHRsc19hZXNfaW5pdChtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgpCit7CisgICAgaWYgKHNSZWZOdW0rKyA9PSAwKQorICAgIHsKKyAgICAgICAgLyogZW5hYmxlIHRoZSBjcnlwdG8gY29yZSAqLworICAgICAgICAvKiBUaGUgVFJORyBzaG91bGQgYWxyZWFkeSBiZSBydW5uaW5nIGJlZm9yZSB3ZSBldmVyIGFzayB0aGUgQUVTIGNvcmUKKyAgICAgICAgICogdG8gZG8gYW55dGhpbmcsIGlmIHRoZXJlIGlzIGFueSBzY2VuYXJpbyB0aGF0IHRoZSBUUk5HIHBvd2VycyBvZmYKKyAgICAgICAgICogdGhlIHBlcmlwaGVyYWwgcG93ZXIgZG9tYWluIHVzZSB0aGlzIGNvZGUgdG8gcmVwb3dlciBpdAorCisgICAgICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1BFUklQSCk7CisgICAgICAgIHdoaWxlIChQUkNNUG93ZXJEb21haW5TdGF0dXMoUFJDTV9ET01BSU5fUEVSSVBIKSAhPSBQUkNNX0RPTUFJTl9QT1dFUl9PTik7CisgICAgICAgICovCisgICAgICAgIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKFBSQ01fUEVSSVBIX0NSWVBUTyk7CisgICAgICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoUFJDTV9QRVJJUEhfQ1JZUFRPKTsKKyAgICAgICAgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUoUFJDTV9QRVJJUEhfQ1JZUFRPKTsKKyAgICAgICAgUFJDTUxvYWRTZXQoKTsKKworICAgICAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgfQorCisgICAgY3R4LT5tYWdpYyA9IENDMjY1MF9BRVNfQ1RYX01BR0lDOworICAgIGN0eC0+a2V5X2lkeCA9IENDMjY1MF9BRVNfS0VZX1VOVVNFRDsKK30KKwordm9pZCBtYmVkdGxzX2Flc19mcmVlKG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCkKK3sKKyAgICBvdEVYUEVDVChjdHgtPm1hZ2ljID09IENDMjY1MF9BRVNfQ1RYX01BR0lDKTsKKworICAgIGlmIChjdHgtPmtleV9pZHggIT0gQ0MyNjUwX0FFU19LRVlfVU5VU0VEKQorICAgIHsKKyAgICAgICAgc1VzZWRLZXlzICY9IH4oMSA8PCBjdHgtPmtleV9pZHgpOworICAgIH0KKworICAgIGlmICgtLXNSZWZOdW0gPT0gMCkKKyAgICB7CisgICAgICAgIC8qIGRpc2FibGUgdGhlIGNyeXB0byBjb3JlICovCisgICAgICAgIC8qIFRoZSBUUk5HIGNvcmUgbmVlZHMgdGhlIHBlcmlwaGVyYWwgcG93ZXIgZG9tYWluIHBvd2VyZWQgb24gdG8KKyAgICAgICAgICogZnVuY3Rpb24uIGlmIHRoZXJlIGlzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBwb3dlciBkb21haW4gbXVzdCBiZQorICAgICAgICAgKiBwb3dlcmVkIG9mZiwgdXNlIHRoaXMgY29kZSB0byBkbyBzby4KKworICAgICAgICBQUkNNUG93ZXJEb21haW5PZmYoUFJDTV9ET01BSU5fUEVSSVBIKTsKKyAgICAgICAgd2hpbGUgKFBSQ01Qb3dlckRvbWFpblN0YXR1cyhQUkNNX0RPTUFJTl9QRVJJUEgpICE9IFBSQ01fRE9NQUlOX1BPV0VSX09GRik7CisgICAgICAgICovCisgICAgICAgIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZShQUkNNX1BFUklQSF9DUllQVE8pOworICAgICAgICBQUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZShQUkNNX1BFUklQSF9DUllQVE8pOworICAgICAgICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUoUFJDTV9QRVJJUEhfQ1JZUFRPKTsKKyAgICAgICAgUFJDTUxvYWRTZXQoKTsKKworICAgICAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgfQorCisgICAgbWVtc2V0KCh2b2lkICopY3R4LCAweDAwLCBzaXplb2YoY3R4KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyhtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWJpdHMpCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfaWR4OworICAgIGludCByZXR2YWwgPSAwOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGN0eC0+bWFnaWMgPT0gQ0MyNjUwX0FFU19DVFhfTUFHSUMsIHJldHZhbCA9IC0xKTsKKworICAgIGlmIChjdHgtPmtleV9pZHggIT0gQ0MyNjUwX0FFU19LRVlfVU5VU0VEKQorICAgIHsKKyAgICAgICAgc1VzZWRLZXlzICY9IH4oMSA8PCBjdHgtPmtleV9pZHgpOworICAgIH0KKworICAgIC8qIG91ciBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIDEyOCBiaXQga2V5cyAqLworICAgIG90RVhQRUNUX0FDVElPTihrZXliaXRzID09IDEyOHUsIHJldHZhbCA9IE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgpOworCisgICAgZm9yIChrZXlfaWR4ID0gMDsgKChzVXNlZEtleXMgPj4ga2V5X2lkeCkgJiAweDAxKSAhPSAwICYmIGtleV9pZHggPCA4OyBrZXlfaWR4KyspOworCisgICAgLyogd2UgaGF2ZSBubyBtb3JlIHJvb20gZm9yIHRoaXMga2V5ICovCisgICAgb3RFWFBFQ1RfQUNUSU9OKGtleV9pZHggPCA4LCByZXR2YWwgPSAtMik7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oQ1JZUFRPQWVzTG9hZEtleSgodWludDMyX3QgKilrZXksIGtleV9pZHgpID09IEFFU19TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKworICAgIHNVc2VkS2V5cyB8PSAoMSA8PCBrZXlfaWR4KTsKKyAgICBjdHgtPmtleV9pZHggPSBrZXlfaWR4OworZXhpdDoKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2RlYyhtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWJpdHMpCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfaWR4OworICAgIGludCByZXR2YWwgPSAwOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGN0eC0+bWFnaWMgPT0gQ0MyNjUwX0FFU19DVFhfTUFHSUMsIHJldHZhbCA9IC0xKTsKKworICAgIGlmIChjdHgtPmtleV9pZHggIT0gQ0MyNjUwX0FFU19LRVlfVU5VU0VEKQorICAgIHsKKyAgICAgICAgc1VzZWRLZXlzICY9IH4oMSA8PCBjdHgtPmtleV9pZHgpOworICAgIH0KKworICAgIC8qIG91ciBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIDEyOCBiaXQga2V5cyAqLworICAgIG90RVhQRUNUX0FDVElPTihrZXliaXRzID09IDEyOHUsIHJldHZhbCA9IE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgpOworCisgICAgZm9yIChrZXlfaWR4ID0gMDsgKChzVXNlZEtleXMgPj4ga2V5X2lkeCkgJiAweDAxKSAhPSAwICYmIGtleV9pZHggPCA4OyBrZXlfaWR4KyspOworCisgICAgLyogd2UgaGF2ZSBubyBtb3JlIHJvb20gZm9yIHRoaXMga2V5ICovCisgICAgb3RFWFBFQ1RfQUNUSU9OKGtleV9pZHggPCA4LCByZXR2YWwgPSAtMik7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oQ1JZUFRPQWVzTG9hZEtleSgodWludDMyX3QgKilrZXksIGtleV9pZHgpID09IEFFU19TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKworICAgIHNVc2VkS2V5cyB8PSAoMSA8PCBrZXlfaWR4KTsKKyAgICBjdHgtPmtleV9pZHggPSBrZXlfaWR4OworZXhpdDoKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2VjYihtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdKQoreworICAgIGludCByZXR2YWwgPSAtMTsKKworICAgIHJldHZhbCA9IENSWVBUT0Flc0VjYigodWludDMyX3QgKilpbnB1dCwgKHVpbnQzMl90ICopb3V0cHV0LCBjdHgtPmtleV9pZHgsIG1vZGUgPT0gTUJFRFRMU19BRVNfRU5DUllQVCwgZmFsc2UpOworICAgIG90RVhQRUNUKHJldHZhbCA9PSBBRVNfU1VDQ0VTUyk7CisKKyAgICB3aGlsZSAoKHJldHZhbCA9IENSWVBUT0Flc0VjYlN0YXR1cygpKSA9PSAgQUVTX0RNQV9CU1kpOworCisgICAgQ1JZUFRPQWVzRWNiRmluaXNoKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0FMVCAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vYWVzX2FsdC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vYWVzX2FsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDljZDkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2NyeXB0by9hZXNfYWx0LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTUJFRFRMU19BRVNfQUxUX0gKKyNkZWZpbmUgTUJFRFRMU19BRVNfQUxUX0gKKworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19GSUxFCisjaW5jbHVkZSAiY2MyNjUwLW1iZWR0bHMtY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZmRlZiBNQkVEVExTX0FFU19BTFQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ4X3QgICAgIG1hZ2ljOworICAgIHNpZ25lZCBjaGFyIGtleV9pZHg7Cit9IG1iZWR0bHNfYWVzX2NvbnRleHQ7CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgQUVTIGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IEFFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfaW5pdChtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgpOworCisvKioKKyAqIEBicmllZiAgICAgICAgICBDbGVhciBBRVMgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfZnJlZShtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMga2V5IHNjaGVkdWxlIChlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGVuY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMga2V5IHNjaGVkdWxlIChkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIGRlY3J5cHRpb24ga2V5CisgKiBccGFyYW0ga2V5Yml0cyAgbXVzdCBiZSAxMjgsIDE5MiBvciAyNTYKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2VjYihtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0FMVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL2NjMjY1MC1tYmVkdGxzLWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vY2MyNjUwLW1iZWR0bHMtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwZjMyNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL2NjMjY1MC1tYmVkdGxzLWNvbmZpZy5oCkBAIC0wLDAgKzEsMjU0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX0gKKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IFN5c3RlbSBzdXBwb3J0CisgKgorICogVGhpcyBzZWN0aW9uIHNldHMgc3lzdGVtIHNwZWNpZmljIHNldHRpbmdzLgorICogXHsKKyAqLworCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX0FTTQorICoKKyAqIFRoZSBjb21waWxlciBoYXMgc3VwcG9ydCBmb3IgYXNtKCkuCisgKgorICogUmVxdWlyZXMgc3VwcG9ydCBmb3IgYXNtKCkgaW4gY29tcGlsZXIuCisgKgorICogVXNlZCBpbjoKKyAqICAgICAgbGlicmFyeS90aW1pbmcuYworICogICAgICBsaWJyYXJ5L3BhZGxvY2suYworICogICAgICBpbmNsdWRlL21iZWR0bHMvYm5fbXVsLmgKKyAqCisgKiBDb21tZW50IHRvIGRpc2FibGUgdGhlIHVzZSBvZiBhc3NlbWJseSBjb2RlLgorICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9TU0UyCisgKgorICogQ1BVIHN1cHBvcnRzIFNTRTIgaW5zdHJ1Y3Rpb24gc2V0LgorICoKKyAqIFVuY29tbWVudCBpZiB0aGUgQ1BVIHN1cHBvcnRzIFNTRTIgKElBLTMyIHNwZWNpZmljKS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRV9TU0UyCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfVElNRQorICoKKyAqIFN5c3RlbSBoYXMgdGltZS5oIGFuZCB0aW1lKCkuCisgKiBUaGUgdGltZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNvcnJlY3QsIG9ubHkgdGltZSBkaWZmZXJlbmNlcyBhcmUgdXNlZCwKKyAqIGJ5IGNvbnRyYXN0IHdpdGggTUJFRFRMU19IQVZFX1RJTUVfREFURQorICoKKyAqIENvbW1lbnQgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCB0aW1lIGZ1bmN0aW9ucworICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKyAqCisgKiBTeXN0ZW0gaGFzIHRpbWUuaCBhbmQgdGltZSgpLCBnbXRpbWUoKSBhbmQgdGhlIGNsb2NrIGlzIGNvcnJlY3QuCisgKiBUaGUgdGltZSBuZWVkcyB0byBiZSBjb3JyZWN0IChub3QgbmVjZXNhcmlseSB2ZXJ5IGFjY3VyYXRlLCBidXQgYXQgbGVhc3QKKyAqIHRoZSBkYXRlIHNob3VsZCBiZSBjb3JyZWN0KS4gVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgcGVyaW9kIG9mCisgKiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgKgorICogQ29tbWVudCBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgY29ycmVjdCBjbG9jay4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisgKgorICogRW5hYmxlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsYXllci4KKyAqCisgKiBCeSBkZWZhdWx0IG1iZWQgVExTIHVzZXMgdGhlIHN5c3RlbS1wcm92aWRlZCBjYWxsb2MoKSBhbmQgZnJlZSgpLgorICogVGhpcyBhbGxvd3MgZGlmZmVyZW50IGFsbG9jYXRvcnMgKHNlbGYtaW1wbGVtZW50ZWQgb3IgcHJvdmlkZWQpIHRvIGJlCisgKiBwcm92aWRlZCB0byB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgd2l0aG91dCB0aGUKKyAqIE1CRURUTFNfUExBVEZPUk1fe0ZSRUUsQ0FMTE9DfV9NQUNST3Mgd2lsbCBwcm92aWRlCisgKiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfY2FsbG9jX2ZyZWUoKSIgYWxsb3dpbmcgeW91IHRvIHNldCBhbiBhbHRlcm5hdGl2ZSBjYWxsb2MoKSBhbmQKKyAqIGZyZWUoKSBmdW5jdGlvbiBwb2ludGVyIGF0IHJ1bnRpbWUuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9NRU1PUlkgYW5kIHNwZWNpZnlpbmcKKyAqIE1CRURUTFNfUExBVEZPUk1fe0NBTExPQyxGUkVFfV9NQUNST3Mgd2lsbCBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUKKyAqIGFsdGVybmF0ZSBmdW5jdGlvbiBhdCBjb21waWxlIHRpbWUuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGlzIGxheWVyIHRvIGFsbG93IHVzZSBvZiBhbHRlcm5hdGl2ZSBtZW1vcnkgYWxsb2NhdG9ycy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisgKgorICogRG8gbm90IGFzc2lnbiBzdGFuZGFyZCBmdW5jdGlvbnMgaW4gdGhlIHBsYXRmb3JtIGxheWVyIChlLmcuIGNhbGxvYygpIHRvCisgKiBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgYW5kIHByaW50ZigpIHRvIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URikKKyAqCisgKiBUaGlzIG1ha2VzIHN1cmUgdGhlcmUgYXJlIG5vIGxpbmtpbmcgZXJyb3JzIG9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0CisgKiB0aGVzZSBmdW5jdGlvbnMuIFlvdSB3aWxsIEhBVkUgdG8gcHJvdmlkZSBhbHRlcm5hdGl2ZXMsIGVpdGhlciBhdCBydW50aW1lCisgKiB2aWEgdGhlIHBsYXRmb3JtX3NldF94eHgoKSBmdW5jdGlvbnMgb3IgYXQgY29tcGlsZSB0aW1lIGJ5IHNldHRpbmcKKyAqIHRoZSBNQkVEVExTX1BMQVRGT1JNX1NURF9YWFggZGVmaW5lcywgb3IgZW5hYmxpbmcgYQorICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8uCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIFVuY29tbWVudCB0byBwcmV2ZW50IGRlZmF1bHQgYXNzaWdubWVudCBvZiBzdGFuZGFyZCBmdW5jdGlvbnMgaW4gdGhlCisgKiBwbGF0Zm9ybSBsYXllci4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKKyAqCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyBzdXBwb3J0IHRoZQorICogZnVuY3Rpb24gaW4gdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQsIG1iZWQgVExTIHdpbGwKKyAqIHByb3ZpZGUgYSBmdW5jdGlvbiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfcHJpbnRmKCkiIHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgYW4KKyAqIGFsdGVybmF0aXZlIHByaW50ZiBmdW5jdGlvbiBwb2ludGVyLgorICoKKyAqIEFsbCB0aGVzZSBkZWZpbmUgcmVxdWlyZSBNQkVEVExTX1BMQVRGT1JNX0MgdG8gYmUgZGVmaW5lZCEKKyAqCisgKiBcbm90ZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBpcyByZXF1aXJlZCBvbiBXaW5kb3dzOworICogaXQgd2lsbCBiZSBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYnkgY2hlY2tfY29uZmlnLmgKKyAqCisgKiBcd2FybmluZyBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQgY2Fubm90IGJlIGRlZmluZWQgYXQgdGhlIHNhbWUgdGltZSBhcworICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8hCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBzcGVjaWZpYyBiYXNlCisgKiBwbGF0Zm9ybSBmdW5jdGlvbgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCisgKgorICogTWFyayBkZXByZWNhdGVkIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgb25seSB3b3JrcyB3aXRoIEdDQyBhbmQgQ2xhbmcuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB5b3UgbWF5IHdhbnQgdG8KKyAqIHVzZSBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorICoKKyAqIFVuY29tbWVudCB0byBnZXQgd2FybmluZ3Mgb24gdXNpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKyAqCisgKiBSZW1vdmUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgc28gdGhhdCB0aGV5IGdlbmVyYXRlIGFuIGVycm9yIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFVuY29tbWVudCB0byBnZXQgZXJyb3JzIG9uIHVzaW5nIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKworLyogXH0gbmFtZSBTRUNUSU9OOiBTeXN0ZW0gc3VwcG9ydCAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydAorICoKKyAqIFRoaXMgc2VjdGlvbiBzZXRzIHN1cHBvcnQgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIG9yIGFyZSBub3QgbmVlZGVkCisgKiB3aXRoaW4gdGhlIG1vZHVsZXMgdGhhdCBhcmUgZW5hYmxlZC4KKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfVElNSU5HX0FMVAorICoKKyAqIFVuY29tbWVudCB0byBwcm92aWRlIHlvdXIgb3duIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCksCisgKiBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoKSwgbWJlZHRsc19zZXRfYWxhcm0oKSwgbWJlZHRsc19zZXQvZ2V0X2RlbGF5KCkKKyAqCisgKiBPbmx5IHdvcmtzIGlmIHlvdSBoYXZlIE1CRURUTFNfVElNSU5HX0MgZW5hYmxlZC4KKyAqCisgKiBZb3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgYSBoZWFkZXIgInRpbWluZ19hbHQuaCIgYW5kIGFuIGltcGxlbWVudGF0aW9uIGF0CisgKiBjb21waWxlIHRpbWUuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RJTUlOR19BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0FMVAorICoKKyAqIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91cgorICogYWx0ZXJuYXRlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgYSBzeW1tZXRyaWMgY3J5cHRvIG9yIGhhc2ggbW9kdWxlIChlLmcuCisgKiBwbGF0Zm9ybSBzcGVjaWZpYyBhc3NlbWJseSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zKS4gS2VlcCBpbiBtaW5kIHRoYXQKKyAqIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgKgorICogVGhpcyByZXBsYWNlcyB0aGUgd2hvbGUgbW9kdWxlLiBJZiB5b3Ugb25seSB3YW50IHRvIHJlcGxhY2Ugb25lIG9mIHRoZQorICogZnVuY3Rpb25zLCB1c2Ugb25lIG9mIHRoZSBNQkVEVExTX19GVU5DVElPTl9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfQUVTX0FMVCwgbWJlZCBUTFMgd2lsbCBubyBsb25nZXIKKyAqIHByb3ZpZGUgdGhlICJzdHJ1Y3QgbWJlZHRsc19hZXNfY29udGV4dCIgZGVmaW5pdGlvbiBhbmQgb21pdCB0aGUgYmFzZSBmdW5jdGlvbgorICogZGVjbGFyYXRpb25zIGFuZCBpbXBsZW1lbnRhdGlvbnMuICJhZXNfYWx0LmgiIHdpbGwgYmUgaW5jbHVkZWQgZnJvbQorICogImFlcy5oIiB0byBpbmNsdWRlIHRoZSBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogbW9kdWxlLgorICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQVJDNF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19YVEVBX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQyX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ0X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ1X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMV9BTFQKKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorICoKKyAqIE1CRURUTFNfX0ZVTkNUSU9OX05BTUVfX0FMVDogVW5jb21tZW50IGEgbWFjcm8gdG8gbGV0IG1iZWQgVExTIHVzZSB5b3UKKyAqIGFsdGVybmF0ZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHN5bW1ldHJpYyBjcnlwdG8gb3IgaGFzaCBmdW5jdGlvbi4gS2VlcCBpbgorICogbWluZCB0aGF0IGZ1bmN0aW9uIHByb3RvdHlwZXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KKyAqCisgKiBUaGlzIHJlcGxhY2VzIG9ubHkgb25lIGZ1bmN0aW9uLiBUaGUgaGVhZGVyIGZpbGUgZnJvbSBtYmVkIFRMUyBpcyBzdGlsbAorICogdXNlZCwgaW4gY29udHJhc3QgdG8gdGhlIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxULCBtYmVkIFRMUyB3aWxsCisgKiBubyBsb25nZXIgcHJvdmlkZSB0aGUgbWJlZHRsc19zaGExX3Byb2Nlc3MoKSBmdW5jdGlvbiwgYnV0IGl0IHdpbGwgc3RpbGwgcHJvdmlkZQorICogdGhlIG90aGVyIGZ1bmN0aW9uICh1c2luZyB5b3VyIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCkgZnVuY3Rpb24pIGFuZCB0aGUgZGVmaW5pdGlvbgorICogb2YgbWJlZHRsc19zaGExX2NvbnRleHQsIHNvIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgbWJlZHRsc19zaGExX3Byb2Nlc3MgbXVzdCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIHRoaXMgZGVmaW5pdGlvbi4KKyAqCisgKiBOb3RlOiBpZiB5b3UgdXNlIHRoZSBBRVNfeHh4X0FMVCBtYWNyb3MsIHRoZW4gaXMgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyBzZXQKKyAqIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMgaW4gb3JkZXIgdG8gaGVscCB0aGUgbGlua2VyIGdhcmJhZ2UtY29sbGVjdCB0aGUgQUVTCisgKiB0YWJsZXMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogZnVuY3Rpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFU19TRVRLRVlfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQ1JZUFRfRUNCX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTM19DUllQVF9FQ0JfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX0VOQ1JZUFRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfREVDUllQVF9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBsZXQgbWJlZCBUTFMgdXNlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGEKKyAqIGhhcmR3YXJlIGVudHJvcHkgY29sbGVjdG9yLgorICoKKyAqIFlvdXIgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgXGMgbWJlZHRsc19oYXJkd2FyZV9wb2xsKCksIGhhdmUgdGhlIHNhbWUKKyAqIHByb3RvdHlwZSBhcyBkZWNsYXJlZCBpbiBlbnRyb3B5X3BvbGwuaCwgYW5kIGFjY2VwdCBOVUxMIGFzIGZpcnN0IGFyZ3VtZW50LgorICoKKyAqIFVuY29tbWVudCB0byB1c2UgeW91ciBvd24gaGFyZHdhcmUgZW50cm9weSBjb2xsZWN0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworICoKKyAqIFN0b3JlIHRoZSBBRVMgdGFibGVzIGluIFJPTS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBzdG9yZSB0aGUgQUVTIHRhYmxlcyBpbiBST00uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKyAqCisgKiBVc2UgbGVzcyBST00gZm9yIHRoZSBDYW1lbGxpYSBpbXBsZW1lbnRhdGlvbiAoc2F2ZXMgYWJvdXQgNzY4IGJ5dGVzKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byB1c2UgbGVzcyBtZW1vcnkgZm9yIENhbWVsbGlhLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisgKgorICogRW5hYmxlIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlIChDQkMpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorICoKKyAqIEVuYWJsZSBDaXBoZXIgRmVlZGJhY2sgbW9kZSAoQ0ZCKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKyAqCisgKiBFbmFibGUgQ291bnRlciBCbG9jayBDaXBoZXIgbW9kZSAoQ1RSKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKKyAqCisgKiBFbmFibGUgTlVMTCBjaXBoZXIuCisgKiBXYXJuaW5nOiBPbmx5IGRvIHNvIHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBUaGlzIGFsbG93cyBmb3IKKyAqIGVuY3J5cHRpb24gb3IgY2hhbm5lbHMgd2l0aG91dCBhbnkgc2VjdXJpdHkhCisgKgorICogUmVxdWlyZXMgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMgYXMgd2VsbCB0byBlbmFibGUKKyAqIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHRoZSBOVUxMIGNpcGhlciBhbmQgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworICoKKyAqIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWFhYOiBVbmNvbW1lbnQgb3IgY29tbWVudCBtYWNyb3MgdG8gYWRkIHN1cHBvcnQgZm9yCisgKiBzcGVjaWZpYyBwYWRkaW5nIG1vZGVzIGluIHRoZSBjaXBoZXIgbGF5ZXIgd2l0aCBjaXBoZXIgbW9kZXMgdGhhdCBzdXBwb3J0CisgKiBwYWRkaW5nIChlLmcuIENCQykKKyAqCisgKiBJZiB5b3UgZGlzYWJsZSBhbGwgcGFkZGluZyBtb2Rlcywgb25seSBmdWxsIGJsb2NrcyBjYW4gYmUgdXNlZCB3aXRoIENCQy4KKyAqCisgKiBFbmFibGUgcGFkZGluZyBtb2RlcyBpbiB0aGUgY2lwaGVyIGxheWVyLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisgKgorICogRW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzIGluIFNTTCAvIFRMUy4KKyAqIFdhcm5pbmc6IE9ubHkgZG8gc28gd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgYWxsb3dzIGZvcgorICogY2hhbm5lbHMgd2l0aCB2aXJ0dWFsbHkgbm8gc2VjdXJpdHkgYXQgYWxsIQorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlczoKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIHdlYWsgY2lwaGVyc3VpdGVzCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyAqCisgKiBSZW1vdmUgUkM0IGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0IGluIFNTTCAvIFRMUy4KKyAqIFRoaXMgZmxhZyByZW1vdmVzIHRoZSBjaXBoZXJzdWl0ZXMgYmFzZWQgb24gUkM0IGZyb20gdGhlIGRlZmF1bHQgbGlzdCBhcworICogcmV0dXJuZWQgYnkgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKS4gSG93ZXZlciwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8KKyAqIGVuYWJsZSAoc29tZSBvZikgdGhlbSB3aXRoIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCkgYnkgaW5jbHVkaW5nIHRoZW0KKyAqIGV4cGxpY2l0bHkuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVtb3ZlIFJDNCBjaXBoZXJzdWl0ZXMgYnkgZGVmYXVsdC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorICoKKyAqIE1CRURUTFNfRUNQX1hYWFhfRU5BQkxFRDogRW5hYmxlcyBzcGVjaWZpYyBjdXJ2ZXMgd2l0aGluIHRoZSBFbGxpcHRpYyBDdXJ2ZQorICogbW9kdWxlLiAgQnkgZGVmYXVsdCBhbGwgc3VwcG9ydGVkIGN1cnZlcyBhcmUgZW5hYmxlZC4KKyAqCisgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSBjdXJ2ZSBhbmQgZnVuY3Rpb25zIGZvciBpdAorICovCisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyAqCisgKiBFbmFibGUgc3BlY2lmaWMgJ21vZHVsbyBwJyByb3V0aW5lcyBmb3IgZWFjaCBOSVNUIHByaW1lLgorICogRGVwZW5kaW5nIG9uIHRoZSBwcmltZSBhbmQgYXJjaGl0ZWN0dXJlLCBtYWtlcyBvcGVyYXRpb25zIDQgdG8gOCB0aW1lcworICogZmFzdGVyIG9uIHRoZSBjb3JyZXNwb25kaW5nIGN1cnZlLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIE5JU1QgY3VydmVzIG9wdGltaXNhdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyAqCisgKiBFbmFibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQSAoUkZDIDY5NzkpLgorICogU3RhbmRhcmQgRUNEU0EgaXMgImZyYWdpbGUiIGluIHRoZSBzZW5zZSB0aGF0IGxhY2sgb2YgZW50cm9weSB3aGVuIHNpZ25pbmcKKyAqIG1heSByZXN1bHQgaW4gYSBjb21wcm9taXNlIG9mIHRoZSBsb25nLXRlcm0gc2lnbmluZyBrZXkuIFRoaXMgaXMgYXZvaWRlZCBieQorICogdGhlIGRldGVybWluaXN0aWMgdmFyaWFudC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ITUFDX0RSQkdfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIGRldGVybWluaXN0aWMgRUNEU0EuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBQU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIERIRS1QU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0RITV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUlNBLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIFJTQS1vbmx5IGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgREhFLVJTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfREhNX0MsIE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1SU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREhFLUVDRFNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfRUNEU0FfQywgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DLAorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESC1FQ0RTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREgtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNKUEFLRSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogXHdhcm5pbmcgVGhpcyBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBFQyBKLVBBS0Ugc3VwcG9ydCBpcyBiYXNlZCBvbiB0aGUKKyAqIFRocmVhZCB2MS4wLjAgc3BlY2lmaWNhdGlvbjsgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmljYXRpb24KKyAqIG1pZ2h0IHN0aWxsIGhhcHBlbi4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNKUEFLRV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEEyNTZfQworICogICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzgKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKyAqCisgKiBFbmhhbmNlIHN1cHBvcnQgZm9yIHJlYWRpbmcgRUMga2V5cyB1c2luZyB2YXJpYW50cyBvZiBTRUMxIG5vdCBhbGxvd2VkIGJ5CisgKiBSRkMgNTkxNSBhbmQgUkZDIDU0ODAuCisgKgorICogQ3VycmVudGx5IHRoaXMgbWVhbnMgcGFyc2luZyB0aGUgU3BlY2lmaWVkRUNEb21haW4gY2hvaWNlIG9mIEVDCisgKiBwYXJhbWV0ZXJzIChvbmx5IGtub3duIGdyb3VwcyBhcmUgc3VwcG9ydGVkLCBub3QgYXJiaXRyYXJ5IGRvbWFpbnMsIHRvCisgKiBhdm9pZCB2YWxpZGF0aW9uIGlzc3VlcykuCisgKgorICogRGlzYWJsZSBpZiB5b3Ugb25seSBuZWVkIHRvIHN1cHBvcnQgUkZDIDU5MTUgKyA1NDgwIGtleSBmb3JtYXRzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorICoKKyAqIEVuYWJsZSBhIGR1bW15IGVycm9yIGZ1bmN0aW9uIHRvIG1ha2UgdXNlIG9mIG1iZWR0bHNfc3RyZXJyb3IoKSBpbgorICogdGhpcmQgcGFydHkgbGlicmFyaWVzIGVhc2llciB3aGVuIE1CRURUTFNfRVJST1JfQyBpcyBkaXNhYmxlZAorICogKG5vIGVmZmVjdCB3aGVuIE1CRURUTFNfRVJST1JfQyBpcyBlbmFibGVkKS4KKyAqCisgKiBZb3UgY2FuIHNhZmVseSBkaXNhYmxlIHRoaXMgaWYgTUJFRFRMU19FUlJPUl9DIGlzIGVuYWJsZWQsIG9yIGlmIHlvdSdyZQorICogbm90IHVzaW5nIG1iZWR0bHNfc3RyZXJyb3IoKSBvciBlcnJvcl9zdHJlcnJvcigpIGluIHlvdXIgYXBwbGljYXRpb24uCisgKgorICogRGlzYWJsZSBpZiB5b3UgcnVuIGludG8gbmFtZSBjb25mbGljdHMgYW5kIHdhbnQgdG8gcmVhbGx5IHJlbW92ZSB0aGUKKyAqIG1iZWR0bHNfc3RyZXJyb3IoKQorICovCisvLyNkZWZpbmUgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19HRU5QUklNRQorICoKKyAqIEVuYWJsZSB0aGUgcHJpbWUtbnVtYmVyIGdlbmVyYXRpb24gY29kZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQworICovCisvLyNkZWZpbmUgTUJFRFRMU19HRU5QUklNRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19GU19JTworICoKKyAqIEVuYWJsZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIGZpbGVzeXN0ZW0uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0ZTX0lPCisKKy8qKgorICogXGRlZiBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisgKgorICogRG8gbm90IGFkZCBkZWZhdWx0IGVudHJvcHkgc291cmNlcy4gVGhlc2UgYXJlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYywKKyAqIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayBhbmQgSEFWRUdFIGJhc2VkIHBvbGwgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIGFkZGVkIGVudHJvcHkgc291cmNlcyBpbiBhbgorICogYXBwbGljYXRpb24uCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcHJldmVudCBsb2FkaW5nIG9mIGRlZmF1bHQgZW50cm9weSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisKKy8qKgorICogXGRlZiBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyAqCisgKiBEbyBub3QgdXNlIGJ1aWx0LWluIHBsYXRmb3JtIGVudHJvcHkgZnVuY3Rpb25zLgorICogVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0CisgKiBzdGFuZGFyZHMgbGlrZSB0aGUgL2Rldi91cmFuZG9tIG9yIFdpbmRvd3MgQ3J5cHRvQVBJLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgdGhlIGJ1aWx0LWluIHBsYXRmb3JtIGVudHJvcHkgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorICoKKyAqIEZvcmNlIHRoZSBlbnRyb3B5IGFjY3VtdWxhdG9yIHRvIHVzZSBhIFNIQS0yNTYgYWNjdW11bGF0b3IgaW5zdGVhZCBvZiB0aGUKKyAqIGRlZmF1bHQgU0hBLTUxMiBiYXNlZCBvbmUgKGlmIGJvdGggYXJlIGF2YWlsYWJsZSkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBPbiAzMi1iaXQgc3lzdGVtcyBTSEEtMjU2IGNhbiBiZSBtdWNoIGZhc3RlciB0aGFuIFNIQS01MTIuIFVzZSB0aGlzIG9wdGlvbgorICogaWYgeW91IGhhdmUgcGVyZm9ybWFuY2UgY29uY2VybnMuCisgKgorICogVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgYm90aCBNQkVEVExTX1NIQTI1Nl9DIGFuZAorICogTUJFRFRMU19TSEE1MTJfQyBhcmUgZGVmaW5lZC4gT3RoZXJ3aXNlIHRoZSBhdmFpbGFibGUgaGFzaCBtb2R1bGUgaXMgdXNlZC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0RFQlVHCisgKgorICogRW5hYmxlIGRlYnVnZ2luZyBvZiBidWZmZXIgYWxsb2NhdG9yIG1lbW9yeSBpc3N1ZXMuIEF1dG9tYXRpY2FsbHkgcHJpbnRzCisgKiAodG8gc3RkZXJyKSBhbGwgKGZhdGFsKSBtZXNzYWdlcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEVuYWJsZXMKKyAqIGZ1bmN0aW9uIGZvciAnZGVidWcgb3V0cHV0JyBvZiBhbGxvY2F0ZWQgbWVtb3J5LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGxldCB0aGUgYnVmZmVyIGFsbG9jYXRvciBwcmludCBvdXQgZXJyb3IgbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9ERUJVRworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisgKgorICogSW5jbHVkZSBiYWNrdHJhY2UgaW5mb3JtYXRpb24gd2l0aCBlYWNoIGFsbG9jYXRlZCBibG9jay4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAqICAgICAgICAgICBHTElCQy1jb21wYXRpYmxlIGJhY2t0cmFjZSgpIGFuIGJhY2t0cmFjZV9zeW1ib2xzKCkgc3VwcG9ydAorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGluY2x1ZGUgYmFja3RyYWNlIGluZm9ybWF0aW9uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisgKgorICogU3VwcG9ydCBleHRlcm5hbCBwcml2YXRlIFJTQSBrZXlzIChlZyBmcm9tIGEgSFNNKSBpbiB0aGUgUEsgbGF5ZXIuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgcHJpdmF0ZSBSU0Ega2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxX1YxNQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBlbmNvZGluZy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQworICoKKyAqIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBvcGVyYXRpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMTUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzFfVjIxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2Mi4xIGVuY29kaW5nLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MsIE1CRURUTFNfUlNBX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUlNBRVMtT0FFUCBhbmQgUlNBU1NBLVBTUyBvcGVyYXRpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMjEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUlNBX05PX0NSVAorICoKKyAqIERvIG5vdCB1c2UgdGhlIENoaW5lc2UgUmVtYWluZGVyIFRoZW9yZW0gZm9yIHRoZSBSU0EgcHJpdmF0ZSBvcGVyYXRpb24uCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSB0aGUgdXNlIG9mIENSVCBpbiBSU0EuCisgKgorICovCisvLyNkZWZpbmUgTUJFRFRMU19SU0FfTk9fQ1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NFTEZfVEVTVAorICoKKyAqIEVuYWJsZSB0aGUgY2hlY2t1cCBmdW5jdGlvbnMgKCpfc2VsZl90ZXN0KS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU0VMRl9URVNUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSCisgKgorICogRW5hYmxlIGFuIGltcGxlbWVudGF0aW9uIG9mIFNIQS0yNTYgdGhhdCBoYXMgbG93ZXIgUk9NIGZvb3RwcmludCBidXQgYWxzbworICogbG93ZXIgcGVyZm9ybWFuY2UuCisgKgorICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgbWVhbnQgdG8gYmUgYSByZWFzb25uYWJsZSBjb21wcm9taXNlIGJldHdlZW4KKyAqIHBlcmZvcm1hbmNlIGFuZCBzaXplLiBUaGlzIHZlcnNpb24gb3B0aW1pemVzIG1vcmUgYWdncmVzc2l2ZWx5IGZvciBzaXplIGF0CisgKiB0aGUgZXhwZW5zZSBvZiBwZXJmb3JtYW5jZS4gRWcgb24gQ29ydGV4LU00IGl0IHJlZHVjZXMgdGhlIHNpemUgb2YKKyAqIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MoKSBmcm9tIH4yS0IgdG8gfjAuNUtCIGZvciBhIHBlcmZvcm1hbmNlIGhpdCBvZiBhYm91dAorICogMzAlLgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIHNtYWxsZXIgaW1wbGVtZW50YXRpb24gb2YgU0hBMjU2LgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X1NNQUxMRVIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0FFQURfUkFORE9NX0lWCisgKgorICogR2VuZXJhdGUgYSByYW5kb20gSVYgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHJlY29yZCBzZXF1ZW5jZSBudW1iZXIgYXMgYQorICogbm9uY2UgZm9yIGNpcGhlcnN1aXRlcyB1c2luZyBhbmQgQUVBRCBhbGdvcml0aG0gKEdDTSBvciBDQ00pLgorICoKKyAqIFVzaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGFsd2F5cyB1c2UgcmFuZG9tIElWcyB3aXRoIEFFQUQgY2lwaGVyc3VpdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQUVBRF9SQU5ET01fSVYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworICoKKyAqIEVuYWJsZSBzZW5kaW5nIG9mIGFsZXJ0IG1lc3NhZ2VzIGluIGNhc2Ugb2YgZW5jb3VudGVyZWQgZXJyb3JzIGFzIHBlciBSRkMuCisgKiBJZiB5b3UgY2hvb3NlIG5vdCB0byBzZW5kIHRoZSBhbGVydCBtZXNzYWdlcywgbWJlZCBUTFMgY2FuIHN0aWxsIGNvbW11bmljYXRlCisgKiB3aXRoIG90aGVyIHNlcnZlcnMsIG9ubHkgZGVidWdnaW5nIG9mIGZhaWx1cmVzIGlzIGhhcmRlci4KKyAqCisgKiBUaGUgYWR2YW50YWdlIG9mIG5vdCBzZW5kaW5nIGFsZXJ0IG1lc3NhZ2VzLCBpcyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGdpdmVuCisgKiBhYm91dCByZWFzb25zIGZvciBmYWlsdXJlcyB0aHVzIHByZXZlbnRpbmcgYWR2ZXJzYXJpZXMgb2YgZ2FpbmluZyBpbnRlbC4KKyAqCisgKiBFbmFibGUgc2VuZGluZyBvZiBhbGwgYWxlcnQgbWVzc2FnZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfREVCVUdfQUxMCisgKgorICogRW5hYmxlIHRoZSBkZWJ1ZyBtZXNzYWdlcyBpbiBTU0wgbW9kdWxlIGZvciBhbGwgaXNzdWVzLgorICogRGVidWcgbWVzc2FnZXMgaGF2ZSBiZWVuIGRpc2FibGVkIGluIHNvbWUgcGxhY2VzIHRvIHByZXZlbnQgdGltaW5nCisgKiBhdHRhY2tzIGR1ZSB0byAodW5iYWxhbmNlZCkgZGVidWdnaW5nIGZ1bmN0aW9uIGNhbGxzLgorICoKKyAqIElmIHlvdSBuZWVkIGFsbCBlcnJvciByZXBvcnRpbmcgeW91IHNob3VsZCBlbmFibGUgdGhpcyBkdXJpbmcgZGVidWdnaW5nLAorICogYnV0IHJlbW92ZSB0aGlzIGZvciBwcm9kdWN0aW9uIHNlcnZlcnMgdGhhdCBzaG91bGQgbG9nIGFzIHdlbGwuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVwb3J0IGFsbCBkZWJ1ZyBtZXNzYWdlcyBvbiBlcnJvcnMgaW50cm9kdWNpbmcKKyAqIGEgdGltaW5nIHNpZGUtY2hhbm5lbC4KKyAqCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfREVCVUdfQUxMCisKKy8qKiBcZGVmIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRW5jcnlwdC10aGVuLU1BQywgUkZDIDczNjYuCisgKgorICogVGhpcyBhbGxvd3MgcGVlcnMgdGhhdCBib3RoIHN1cHBvcnQgaXQgdG8gdXNlIGEgbW9yZSByb2J1c3QgcHJvdGVjdGlvbiBmb3IKKyAqIGNpcGhlcnN1aXRlcyB1c2luZyBDQkMsIHByb3ZpZGluZyBkZWVwIHJlc2lzdGFuY2UgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcworICogb24gdGhlIHBhZGRpbmcgb3IgdW5kZXJseWluZyBjaXBoZXIuCisgKgorICogVGhpcyBvbmx5IGFmZmVjdHMgQ0JDIGNpcGhlcnN1aXRlcywgYW5kIGlzIHVzZWxlc3MgaWYgbm9uZSBpcyBkZWZpbmVkLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxICAgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIEVuY3J5cHQtdGhlbi1NQUMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKworLyoqIFxkZWYgTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0LCBha2EgU2Vzc2lvbiBIYXNoCisgKiAoZHJhZnQtaWV0Zi10bHMtc2Vzc2lvbi1oYXNoLTAyKS4KKyAqCisgKiBUaGlzIHdhcyBpbnRyb2R1Y2VkIGFzICJ0aGUgcHJvcGVyIGZpeCIgdG8gdGhlIFRyaXBsZSBIYW5kc2hha2UgZmFtaWxpeSBvZgorICogYXR0YWNrcywgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyB1c2UgaXQgKGV2ZW4gaWYgeW91IGRpc2FibGUKKyAqIHJlbmVnb3RpYXRpb24pLCBzaW5jZSBpdCBhY3R1YWxseSBmaXhlcyBhIG1vcmUgZnVuZGFtZW50YWwgaXNzdWUgaW4gdGhlCisgKiBvcmlnaW5hbCBTU0wvVExTIGRlc2lnbiwgYW5kIGhhcyBpbXBsaWNhdGlvbnMgYmV5b25kIFRyaXBsZSBIYW5kc2hha2UuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTViAoZHJhZnQtaWV0Zi10bHMtZG93bmdyYWRlLXNjc3YtMDApLgorICoKKyAqIEZvciBzZXJ2ZXJzLCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgZW5hYmxlIHRoaXMsIHVubGVzcyB5b3Ugc3VwcG9ydAorICogb25seSBvbmUgdmVyc2lvbiBvZiBUTFMsIG9yIGtub3cgZm9yIHN1cmUgdGhhdCBub25lIG9mIHlvdXIgY2xpZW50cworICogaW1wbGVtZW50cyBhIGZhbGxiYWNrIHN0cmF0ZWd5LgorICoKKyAqIEZvciBjbGllbnRzLCB5b3Ugb25seSBuZWVkIHRoaXMgaWYgeW91J3JlIHVzaW5nIGEgZmFsbGJhY2sgc3RyYXRlZ3ksIHdoaWNoCisgKiBpcyBub3QgcmVjb21tZW5kZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCB1bmxlc3MgeW91IGFic29sdXRlbHkgbmVlZCBpdCB0bworICogaW50ZXJvcGVyYXRlIHdpdGggYnVnZ3kgKHZlcnNpb24taW50b2xlcmFudCkgc2VydmVycy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBGQUxMQkFDS19TQ1NWCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKyAqCisgKiBFbmFibGUgaG9va2luZyBmdW5jdGlvbnMgaW4gU1NMIG1vZHVsZSBmb3IgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mCisgKiBpbmRpdmlkdWFsIHJlY29yZHMuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIGhvb2tpbmcgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworICoKKyAqIEVuYWJsZSAxL24tMSByZWNvcmQgc3BsaXR0aW5nIGZvciBDQkMgbW9kZSBpbiBTU0x2MyBhbmQgVExTIDEuMC4KKyAqCisgKiBUaGlzIGlzIGEgY291bnRlcm1lYXN1cmUgdG8gdGhlIEJFQVNUIGF0dGFjaywgd2hpY2ggYWxzbyBtaW5pbWl6ZXMgdGhlIHJpc2sKKyAqIG9mIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIGNvbXBhcmVkIHRvIHNlbmRpbmcgMC1sZW5ndGggcmVjb3Jkcy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSAxL24tMSByZWNvcmQgc3BsaXR0aW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KKyAqCisgKiBEaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyByZW5lZ290aWF0aW9uLgorICoKKyAqIFRoZSB0d28gbWFpbiB1c2VzIG9mIHJlbmVnb3RpYXRpb24gYXJlICgxKSByZWZyZXNoIGtleXMgb24gbG9uZy1saXZlZAorICogY29ubmVjdGlvbnMgYW5kICgyKSBjbGllbnQgYXV0aGVudGljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgaGFuZHNoYWtlLgorICogSWYgeW91IGRvbid0IG5lZWQgcmVuZWdvdGlhdGlvbiwgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZGlzYWJsZSBpdCwgc2luY2UKKyAqIGl0IGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIHBhc3QgYW5kIGlzIGVhc3kgdG8KKyAqIG1pc3VzZS9taXN1bmRlcnN0YW5kLgorICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHJlbmVnb3RpYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIGFuZCBwYXJzaW5nIFNTTHYyIENsaWVudCBIZWxsbyBtZXNzYWdlcyBmb3IgdGhlCisgKiBTU0wgU2VydmVyIG1vZHVsZSAoTUJFRFRMU19TU0xfU1JWX0MpLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBTU0x2MiBDbGllbnQgSGVsbG8gbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFCisgKgorICogUGljayB0aGUgY2lwaGVyc3VpdGUgYWNjb3JkaW5nIHRvIHRoZSBjbGllbnQncyBwcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBvdXJzCisgKiBpbiB0aGUgU1NMIFNlcnZlciBtb2R1bGUgKE1CRURUTFNfU1NMX1NSVl9DKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZXNwZWN0IGNsaWVudCdzIGNpcGhlcnN1aXRlIG9yZGVyCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdGhlIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19TU0wzCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUQ1X0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTFfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4xIChhbmQgRFRMUyAxLjAgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRDVfQworICogICAgICAgICAgIE1CRURUTFNfU0hBMV9DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgVExTIDEuMSAvIERUTFMgMS4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4yIChhbmQgRFRMUyAxLjIgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TSEExX0Mgb3IgTUJFRFRMU19TSEEyNTZfQyBvciBNQkVEVExTX1NIQTUxMl9DCisgKiAgICAgICAgICAgKERlcGVuZHMgb24gY2lwaGVyc3VpdGVzKQorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjIgLyBEVExTIDEuMgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBEVExTIChhbGwgYXZhaWxhYmxlIHZlcnNpb25zKS4KKyAqCisgKiBFbmFibGUgdGhpcyBhbmQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHRvIGVuYWJsZSBEVExTIDEuMCwKKyAqIGFuZC9vciB0aGlzIGFuZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgdG8gZW5hYmxlIERUTFMgMS4yLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKyAqICAgICAgICBvciBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBEVExTCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQUxQTgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNzMwMSBBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBOZWdvdGlhdGlvbi4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBBTFBOLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQUxQTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYW50aS1yZXBsYXkgbWVjaGFuaXNtIGluIERUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGlzIG9mdGVuIGEgc2VjdXJpdHkgcmlzayEKKyAqIFNlZSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkoKSBmb3IgZGV0YWlscy4KKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBhbnRpLXJlcGxheSBpbiBEVExTLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEhlbGxvVmVyaWZ5UmVxdWVzdCBvbiBEVExTIHNlcnZlcnMuCisgKgorICogVGhpcyBmZWF0dXJlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBwcmV2ZW50IERUTFMgc2VydmVycyBiZWluZyB1c2VkIGFzCisgKiBhbXBsaWZpZXJzIGluIERvUyBhdHRhY2tzIGFnYWluc3Qgb3RoZXIgaG9zdHMuIEl0IHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZAorICogdW5sZXNzIHlvdSBrbm93IGZvciBzdXJlIGFtcGxpZmljYXRpb24gY2Fubm90IGJlIGEgcHJvYmxlbSBpbiB0aGUKKyAqIGVudmlyb25tZW50IGluIHdoaWNoIHlvdXIgc2VydmVyIG9wZXJhdGVzLgorICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGNhbiBiYSBhIHNlY3VyaXR5IHJpc2shIChzZWUgYWJvdmUpCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBIZWxsb1ZlcmlmeVJlcXVlc3QuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKyAqCisgKiBFbmFibGUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgY2xpZW50cyB0aGF0IHJlY29ubmVjdCBmcm9tIHRoZSBzYW1lIHBvcnQuCisgKgorICogU29tZSBjbGllbnRzIHVuZXhwZWN0ZWRseSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgdHJ5IHRvIHJlY29ubmVjdCB1c2luZyB0aGUKKyAqIHNhbWUgc291cmNlIHBvcnQuIFRoaXMgbmVlZHMgc3BlY2lhbCBzdXBwb3J0IGZyb20gdGhlIHNlcnZlciB0byBoYW5kbGUgdGhlCisgKiBuZXcgY29ubmVjdGlvbiBzZWN1cmVseSwgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gNC4yLjggb2YgUkZDIDYzNDcuIFRoaXMKKyAqIGZsYWcgZW5hYmxlcyB0aGF0IHN1cHBvcnQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgY2xpZW50cyByZXVzaW5nIHRoZSBzb3VyY2UgcG9ydC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIGEgbGltaXQgb2YgcmVjb3JkcyB3aXRoIGJhZCBNQUMuCisgKgorICogU2VlIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQoKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNTA3NyBzZXNzaW9uIHRpY2tldHMgaW4gU1NMLgorICogQ2xpZW50LXNpZGUsIHByb3ZpZGVzIGZ1bGwgc3VwcG9ydCBmb3Igc2Vzc2lvbiB0aWNrZXRzIChtYWludGFpbmFuY2Ugb2YgYQorICogc2Vzc2lvbiBzdG9yZSByZW1haW5zIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24sIHRob3VnaCkuCisgKiBTZXJ2ZXItc2lkZSwgeW91IGFsc28gbmVlZCB0byBwcm92aWRlIGNhbGxiYWNrcyBmb3Igd3JpdGluZyBhbmQgcGFyc2luZworICogdGlja2V0cywgaW5jbHVkaW5nIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQuIEV4YW1wbGUKKyAqIGNhbGxiYWNrcyBhcmUgcHJvdmlkZWQgYnkgTUJFRFRMU19TU0xfVElDS0VUX0MuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgU1NMIHNlc3Npb24gdGlja2V0cworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBleHBvcnRpbmcga2V5IGJsb2NrIGFuZCBtYXN0ZXIgc2VjcmV0LgorICogVGhpcyBpcyByZXF1aXJlZCBmb3IgY2VydGFpbiB1c2VycyBvZiBUTFMsIGUuZy4gRUFQLVRMUy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBrZXkgZXhwb3J0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSBpbiBTU0wuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHNlcnZlciBuYW1lIGluZGljYXRpb24gaW4gU1NMCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiB0cnVuY2F0ZWQgSE1BQyBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdHJ1bmNhdGVkIEhNQUMgaW4gU1NMCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfQUxUCisgKgorICogUHJvdmlkZSB5b3VyIG93biBhbHRlcm5hdGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gYWxsb3cgeW91ciBvd24gYWx0ZXJuYXRlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorICoKKyAqIEVuYWJsZSB0aGUgcHRocmVhZCB3cmFwcGVyIGxheWVyIGZvciB0aGUgdGhyZWFkaW5nIGxheWVyLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHB0aHJlYWQgbXV0ZXhlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworICoKKyAqIEFsbG93IHJ1bi10aW1lIGNoZWNraW5nIG9mIGNvbXBpbGUtdGltZSBlbmFibGVkIGZlYXR1cmVzLiBUaHVzIGFsbG93aW5nIHVzZXJzCisgKiB0byBjaGVjayBhdCBydW4tdGltZSBpZiB0aGUgbGlicmFyeSBpcyBmb3IgaW5zdGFuY2UgY29tcGlsZWQgd2l0aCB0aHJlYWRpbmcKKyAqIHN1cHBvcnQgdmlhIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVkVSU0lPTl9DCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgcnVuLXRpbWUgY2hlY2tpbmcgYW5kIHNhdmUgUk9NIHNwYWNlCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiBleHRlbnNpb24gaW4gYSB2MSBvciB2MiBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBVbmNvbW1lbnQgdG8gcHJldmVudCBhbiBlcnJvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiB1bmtub3duIGNyaXRpY2FsIGV4dGVuc2lvbi4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBlbmFibGluZyB0aGlzIGNhbiBiZSBhIHNlY3VyaXR5IHJpc2shCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgYW4gZXJyb3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIChDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMpLgorICoKKyAqIERpc2FibGluZyB0aGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIG1pcy1pc3N1ZWQgYW5kL29yIG1pc3VzZWQKKyAqIChpbnRlcm1lZGlhdGUpIENBIGFuZCBsZWFmIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBrZXlVc2FnZSBjaGVja2luZyBmb3IgYm90aCBDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUgZXh0ZW5kZWRLZXlVc2FnZSBleHRlbnNpb24gKGxlYWYgY2VydGlmaWNhdGVzKS4KKyAqCisgKiBEaXNhYmxpbmcgdGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBtaXMtaXNzdWVkIGFuZC9vciBtaXN1c2VkIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBleHRlbmRlZEtleVVzYWdlIGNoZWNraW5nIGZvciBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisgKgorICogRW5hYmxlIHBhcnNpbmcgYW5kIHZlcmlmaWNhdGlvbiBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMsIENSTHMgYW5kIENTUlMKKyAqIHNpZ25lZCB3aXRoIFJTQVNTQS1QU1MgKGFrYSBQS0NTIzEgdjIuMSkuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FsbG93IHVzaW5nIFJTQVNTQS1QU1MgaW4gY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19aTElCX1NVUFBPUlQKKyAqCisgKiBJZiBzZXQsIHRoZSBTU0wvVExTIG1vZHVsZSB1c2VzIFpMSUIgdG8gc3VwcG9ydCBjb21wcmVzc2lvbiBhbmQKKyAqIGRlY29tcHJlc3Npb24gb2YgcGFja2V0IGRhdGEuCisgKgorICogXHdhcm5pbmcgVExTLWxldmVsIGNvbXByZXNzaW9uIE1BWSBSRURVQ0UgU0VDVVJJVFkhIFNlZSBmb3IgZXhhbXBsZSB0aGUKKyAqIENSSU1FIGF0dGFjay4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB5b3Ugc2hvdWxkIGV4YW1pbmUgd2l0aCBjYXJlIGlmCisgKiBDUklNRSBvciBzaW1pbGFyIGV4cGxvaXRzIG1heSBiZSBhIGFwcGxpY2FibGUgdG8geW91ciB1c2UgY2FzZS4KKyAqCisgKiBcbm90ZSBDdXJyZW50bHkgY29tcHJlc3Npb24gY2FuJ3QgYmUgdXNlZCB3aXRoIERUTFMuCisgKgorICogVXNlZCBpbjogbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgZmVhdHVyZSByZXF1aXJlcyB6bGliIGxpYnJhcnkgYW5kIGhlYWRlcnMgdG8gYmUgcHJlc2VudC4KKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHVzZSBvZiBaTElCCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1pMSUJfU1VQUE9SVAorLyogXH0gbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBtb2R1bGVzCisgKgorICogVGhpcyBzZWN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50aXJlIG1vZHVsZXMgaW4gbWJlZCBUTFMKKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTTklfQworICoKKyAqIEVuYWJsZSBBRVMtTkkgc3VwcG9ydCBvbiB4ODYtNjQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hZXNuaS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2Flcy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUVTLU5JIGluc3RydWN0aW9ucyBvbiB4ODYtNjQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQUVTTklfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfQworICoKKyAqIEVuYWJsZSB0aGUgQUVTIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Flcy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS9wZW0uYworICogICAgICAgICAgbGlicmFyeS9jdHJfZHJiZy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIEFFUyBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FSQzRfQworICoKKyAqIEVuYWJsZSB0aGUgQVJDRk9VUiBzdHJlYW0gY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYXJjNC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQVJDNF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FTTjFfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBBU04xIHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FzbjEuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczEyLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczUuYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqLworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BU04xX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgQVNOMSB3cml0ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICovCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogRW5hYmxlIHRoZSBCYXNlNjQgbW9kdWxlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYmFzZTY0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUEVNIHN1cHBvcnQgKHJlcXVpcmVkIGJ5IFguNTA5KS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQkFTRTY0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQklHTlVNX0MKKyAqCisgKiBFbmFibGUgdGhlIG11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9iaWdudW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9lY3AuYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3JzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBSU0EsIERITSBhbmQgRUNDIChFQ0RILCBFQ0RTQSkgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JMT1dGSVNIX0MKKyAqCisgKiBFbmFibGUgdGhlIEJsb3dmaXNoIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Jsb3dmaXNoLmMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogRW5hYmxlIHRoZSBDYW1lbGxpYSBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jYW1lbGxpYS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQ01fQworICoKKyAqIEVuYWJsZSB0aGUgQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkgbW9kZSBmb3IgMTI4LWJpdCBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jY20uYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIEFFUy1DQ00gY2lwaGVyc3VpdGVzLCBpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0VSVFNfQworICoKKyAqIEVuYWJsZSB0aGUgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jZXJ0cy5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBmb3IgdGVzdGluZyAoc3NsX2NsaWVudC9zZXJ2ZXIpLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DRVJUU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIGNpcGhlciBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NpcGhlci5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBjaXBoZXIgd3JhcHBlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DVFJfRFJCR19DCisgKgorICogRW5hYmxlIHRoZSBDVFJfRFJCRyBBRVMtMjU2LWJhc2VkIHJhbmRvbSBnZW5lcmF0b3IuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jdHJfZHJiZy5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgQ1RSX0RSQkcgQUVTLTI1NiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVCVUdfQworICoKKyAqIEVuYWJsZSB0aGUgZGVidWcgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVidWcuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlYnVnZ2luZyBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ERUJVR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFU19DCisgKgorICogRW5hYmxlIHRoZSBERVMgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVzLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIERFUy8zREVTIGZvciBkZWNyeXB0aW5nIGVuY3J5cHRlZCBrZXlzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ESE1fQworICoKKyAqIEVuYWJsZSB0aGUgRGlmZmllLUhlbGxtYW4tTWVya2xlIG1vZHVsZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2RobS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgREhFLVJTQSwgREhFLVBTSworICovCisvLyNkZWZpbmUgTUJFRFRMU19ESE1fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERpZmZpZS1IZWxsbWFuIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lY2RoLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQSwgRUNESEUtUlNBLCBESEUtUFNLCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNQX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNESF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERTQSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNkc2EuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDUF9DLCBNQkVEVExTX0FTTjFfV1JJVEVfQywgTUJFRFRMU19BU04xX1BBUlNFX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNEU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0pQQUtFX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIEotUEFLRSBsaWJyYXJ5LgorICoKKyAqIFx3YXJuaW5nIFRoaXMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gRUMgSi1QQUtFIHN1cHBvcnQgaXMgYmFzZWQgb24gdGhlCisgKiBUaHJlYWQgdjEuMC4wIHNwZWNpZmljYXRpb247IGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpY2F0aW9uCisgKiBtaWdodCBzdGlsbCBoYXBwZW4uIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNqcGFrZS5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIEVDSlBBS0UKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ1BfQywgTUJFRFRMU19NRF9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ0pQQUtFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIG92ZXIgR0YocCkgbGlicmFyeS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjcC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VjZGguYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjanBha2UuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DIGFuZCBhdCBsZWFzdCBvbmUgTUJFRFRMU19FQ1BfRFBfWFhYX0VOQUJMRUQKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZW50cm9weSBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZW50cm9weS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBNTEyX0Mgb3IgTUJFRFRMU19TSEEyNTZfQworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZ2VuZXJpYyBlbnRyb3B5IHBvb2wKKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9DCisgKgorICogRW5hYmxlIGVycm9yIGNvZGUgdG8gZXJyb3Igc3RyaW5nIGNvbnZlcnNpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lcnJvci5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBtYmVkdGxzX3N0cmVycm9yKCkuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VSUk9SX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfR0NNX0MKKyAqCisgKiBFbmFibGUgdGhlIEdhbG9pcy9Db3VudGVyIE1vZGUgKEdDTSkgZm9yIEFFUy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2djbS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgQUVTLUdDTSBhbmQgQ0FNRUxMSUEtR0NNIGNpcGhlcnN1aXRlcywgaWYgb3RoZXIKKyAqIHJlcXVpc2l0ZXMgYXJlIGVuYWJsZWQgYXMgd2VsbC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfR0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRUdFX0MKKyAqCisgKiBFbmFibGUgdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIFdhcm5pbmc6IHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvciBpcyBub3Qgc3VpdGFibGUgZm9yIHZpcnR1YWxpemVkCisgKiAgICAgICAgICBlbnZpcm9ubWVudHMKKyAqCisgKiBXYXJuaW5nOiB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IgaXMgZGVwZW5kZW50IG9uIHRpbWluZyBhbmQgc3BlY2lmaWMKKyAqICAgICAgICAgIHByb2Nlc3NvciB0cmFpdHMuIEl0IGlzIHRoZXJlZm9yZSBub3QgYWR2aXNlZCB0byB1c2UgSEFWRUdFIGFzCisgKiAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9ucyBwcmltYXJ5IHJhbmRvbSBnZW5lcmF0b3Igb3IgcHJpbWFyeSBlbnRyb3B5IHBvb2wKKyAqICAgICAgICAgIGlucHV0LiBBcyBhIHNlY29uZGFyeSBpbnB1dCB0byB5b3VyIGVudHJvcHkgcG9vbCwgaXQgSVMgYWJsZSBhZGQKKyAqICAgICAgICAgIHRoZSAobGltaXRlZCkgZXh0cmEgZW50cm9weSBpdCBwcm92aWRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2hhdmVnZS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVElNSU5HX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRUdFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSE1BQ19EUkJHX0MKKyAqCisgKiBFbmFibGUgdGhlIEhNQUNfRFJCRyByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvaG1hY19kcmJnLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRF9DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB0aGUgSE1BQ19EUkJHIHJhbmRvbSBudW1iZXIgZ2VlcmF0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRF9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGxheWVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfTURfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDJfQworICoKKyAqIEVuYWJsZSB0aGUgTUQyIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZDIuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgKHJhcmUpIE1EMi1zaWduZWQgWC41MDkgY2VydHMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01EMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01ENF9DCisgKgorICogRW5hYmxlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kNC5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciAocmFyZSkgTUQ0LXNpZ25lZCBYLjUwOSBjZXJ0cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQ0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQ1X0MKKyAqCisgKiBFbmFibGUgdGhlIE1ENSBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQ1LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BlbS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTIGFuZCBYLjUwOS4KKyAqIFBFTV9QQVJTRSB1c2VzIE1ENSBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQ1X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKgorICogRW5hYmxlIHRoZSBidWZmZXIgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9uIHRoYXQgbWFrZXMgdXNlIG9mIGEgKHN0YWNrKQorICogYmFzZWQgYnVmZmVyIHRvICdhbGxvY2F0ZScgZHluYW1pYyBtZW1vcnkuIChyZXBsYWNlcyBjYWxsb2MoKSBhbmQgZnJlZSgpCisgKiBjYWxscykKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21lbW9yeV9idWZmZXJfYWxsb2MuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BMQVRGT1JNX0MKKyAqICAgICAgICAgICBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSAodG8gdXNlIGl0IHdpdGhpbiBtYmVkIFRMUykKKyAqCisgKiBFbmFibGUgdGhpcyBtb2R1bGUgdG8gZW5hYmxlIHRoZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ORVRfQworICoKKyAqIEVuYWJsZSB0aGUgVENQIGFuZCBVRFAgb3ZlciBJUHY2L0lQdjQgbmV0d29ya2luZyByb3V0aW5lcy4KKyAqCisgKiBcbm90ZSBUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIG9uIFBPU0lYL1VuaXggKGluY2x1ZGluZyBMaW51eCwgQlNEIGFuZCBPUyBYKQorICogYW5kIFdpbmRvd3MuIEZvciBvdGhlciBwbGF0Zm9ybXMsIHlvdSdsbCB3YW50IHRvIGRpc2FibGUgaXQsIGFuZCB3cml0ZSB5b3VyCisgKiBvd24gbmV0d29ya2luZyBjYWxsYmFja3MgdG8gYmUgcGFzc2VkIHRvIFxjIG1iZWR0bHNfc3NsX3NldF9iaW8oKS4KKyAqCisgKiBcbm90ZSBTZWUgYWxzbyBvdXIgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZSBhYm91dCBwb3J0aW5nIHRvIGEgbmV3CisgKiBlbnZpcm9ubWVudDoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2hvdy10by9ob3ctZG8taS1wb3J0LW1iZWQtdGxzLXRvLWEtbmV3LWVudmlyb25tZW50LU9TCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9uZXQuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG5ldHdvcmtpbmcgcm91dGluZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX05FVF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX09JRF9DCisgKgorICogRW5hYmxlIHRoZSBPSUQgZGF0YWJhc2UuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9vaWQuYworICogQ2FsbGVyOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS9wa2NzNS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrcGFyc2UuYworICogICAgICAgICAgbGlicmFyeS9wa3dyaXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcnNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDlfY3JlYXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOXdyaXRlX2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOXdyaXRlX2Nzci5jCisgKgorICogVGhpcyBtb2R1bGVzIHRyYW5zbGF0ZXMgYmV0d2VlbiBPSURzIGFuZCBpbnRlcm5hbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QQURMT0NLX0MKKyAqCisgKiBFbmFibGUgVklBIFBhZGxvY2sgc3VwcG9ydCBvbiB4ODYuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wYWRsb2NrLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvYWVzLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19IQVZFX0FTTQorICoKKyAqIFRoaXMgbW9kdWxlcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBWSUEgUGFkTG9jayBvbiB4ODYuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fUEFSU0VfQworICoKKyAqIEVuYWJsZSBQRU0gZGVjb2RpbmcgLyBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQkFTRTY0X0MKKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciBkZWNvZGluZyAvIHBhcnNpbmcgUEVNIGZpbGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fV1JJVEVfQworICoKKyAqIEVuYWJsZSBQRU0gZW5jb2RpbmcgLyB3cml0aW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGt3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgZW5jb2RpbmcgLyB3cml0aW5nIFBFTSBmaWxlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEVNX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IGxheWVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGsuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DIG9yIE1CRURUTFNfRUNQX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSB3cmFwcGVycy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BrcGFyc2UuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHBhcnNlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfV1JJVEVfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBwdWJsaWMgKGFzeW1ldHJpYykga2V5IHdyaXRlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3Brd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5d3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BLX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSB3cml0ZSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzVfQworICoKKyAqIEVuYWJsZSBQS0NTIzUgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtjczUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQS0NTIzUgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTNV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxMV9DCisgKgorICogRW5hYmxlIHdyYXBwZXIgZm9yIFBLQ1MjMTEgc21hcnRjYXJkIHN1cHBvcnQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTEuYworICogQ2FsbGVyOiAgbGlicmFyeS9way5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgU1NML1RMUyBQS0NTICMxMSBzbWFydGNhcmQgc3VwcG9ydC4KKyAqIFJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgUEtDUyMxMSBoZWxwZXIgbGlicmFyeSAobGlicGtjczExLWhlbHBlcikKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzEyX0MKKyAqCisgKiBFbmFibGUgUEtDUyMxMiBQQkUgZnVuY3Rpb25zLgorICogQWRkcyBhbGdvcml0aG1zIGZvciBwYXJzaW5nIFBLQ1MjOCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlzCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9wa3BhcnNlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BU04xX1BBUlNFX0MsIE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogQ2FuIHVzZTogIE1CRURUTFNfQVJDNF9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBQS0NTIzEyIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzEyX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCBhbGxvd3MgeW91IHRvIHJlLWFzc2lnbgorICogZnVuY3Rpb25zIGxpa2UgY2FsbG9jKCksIGZyZWUoKSwgc25wcmludGYoKSwgcHJpbnRmKCksIGZwcmludGYoKSwgZXhpdCgpLgorICoKKyAqIEVuYWJsaW5nIE1CRURUTFNfUExBVEZPUk1fQyBlbmFibGVzIHRvIHVzZSBvZiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQKKyAqIG9yIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPIGRpcmVjdGl2ZXMsIGFsbG93aW5nIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkCisgKiBhYm92ZSB0byBiZSBzcGVjaWZpZWQgYXQgcnVudGltZSBvciBjb21waWxlIHRpbWUgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFxub3RlIFRoaXMgYWJzdHJhY3Rpb24gbGF5ZXIgbXVzdCBiZSBlbmFibGVkIG9uIFdpbmRvd3MgKGluY2x1ZGluZyBNU1lTMikKKyAqIGFzIG90aGVyIG1vZHVsZSByZWx5IG9uIGl0IGZvciBhIGZpeGVkIHNucHJpbnRmIGltcGxlbWVudGF0aW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGxhdGZvcm0uYworICogQ2FsbGVyOiAgTW9zdCBvdGhlciAuYyBmaWxlcworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgYWJzdHJhY3Rpb24gb2YgY29tbW9uIChsaWJjKSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JJUEVNRDE2MF9DCisgKgorICogRW5hYmxlIHRoZSBSSVBFTUQtMTYwIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19yaXBlbWQxNjAuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JTQV9DCisgKgorICogRW5hYmxlIHRoZSBSU0EgcHVibGljLWtleSBjcnlwdG9zeXN0ZW0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9yc2EuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgUlNBLCBESEUtUlNBLCBFQ0RIRS1SU0EsIFJTQS1QU0sKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19SU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEExX0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQTEgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhMS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBhbmQgU0hBMS1zaWduZWQgY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TSEExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQS0yMjQgYW5kIFNIQS0yNTYgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3NoYTI1Ni5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VudHJvcHkuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFNIQS0yMjQgYW5kIFNIQS0yNTYuCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFNTTC9UTFMgMS4yIFBSRiBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTUxMl9DCisgKgorICogRW5hYmxlIHRoZSBTSEEtMzg0IGFuZCBTSEEtNTEyIGNyeXB0b2dyYXBoaWMgaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19zaGE1MTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9lbnRyb3B5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFNIQS0zODQgYW5kIFNIQS01MTIuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NIQTUxMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKgorICogRW5hYmxlIHNpbXBsZSBTU0wgY2FjaGUgaW1wbGVtZW50YXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY2FjaGUuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9DQUNIRV9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DT09LSUVfQworICoKKyAqIEVuYWJsZSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBEVExTIGNvb2tpZXMgZm9yIGhlbGxvIHZlcmlmaWNhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jb29raWUuYworICogQ2FsbGVyOgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9USUNLRVRfQworICoKKyAqIEVuYWJsZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUTFMgc2VydmVyLXNpZGUgY2FsbGJhY2tzIGZvciBzZXNzaW9uIHRpY2tldHMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfdGlja2V0LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19DSVBIRVJfQworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfVElDS0VUX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NMSV9DCisgKgorICogRW5hYmxlIHRoZSBTU0wvVExTIGNsaWVudCBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgY2xpZW50IHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9DCisgKgorICogRW5hYmxlIHRoZSBTU0wvVExTIHNlcnZlciBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX3Nydi5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMgc2VydmVyIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1RMU19DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIFNTTC9UTFMgY29kZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF90bHMuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogICAgICAgICAgIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlIE1CRURUTFNfU1NMX1BST1RPX1hYWCBkZWZpbmVzCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFNTTC9UTFMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVEhSRUFESU5HX0MKKyAqCisgKiBFbmFibGUgdGhlIHRocmVhZGluZyBhYnN0cmFjdGlvbiBsYXllci4KKyAqIEJ5IGRlZmF1bHQgbWJlZCBUTFMgYXNzdW1lcyBpdCBpcyB1c2VkIGluIGEgbm9uLXRocmVhZGVkIGVudmlyb25tZW50IG9yIHRoYXQKKyAqIGNvbnRleHRzIGFyZSBub3Qgc2hhcmVkIGJldHdlZW4gdGhyZWFkcy4gSWYgeW91IGRvIGludGVuZCB0byB1c2UgY29udGV4dHMKKyAqIGJldHdlZW4gdGhyZWFkcywgeW91IHdpbGwgbmVlZCB0byBlbmFibGUgdGhpcyBsYXllciB0byBwcmV2ZW50IHJhY2UKKyAqIGNvbmRpdGlvbnMuIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHRocmVhZGluZzoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2RldmVsb3BtZW50L3RocmVhZC1zYWZldHktYW5kLW11bHRpLXRocmVhZGluZworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdGhyZWFkaW5nLmMKKyAqCisgKiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9ucyAoc2VsZi1pbXBsZW1lbnRlZCBvcgorICogcHJvdmlkZWQpLgorICoKKyAqIFlvdSB3aWxsIGhhdmUgdG8gZW5hYmxlIGVpdGhlciBNQkVEVExTX1RIUkVBRElOR19BTFQgb3IKKyAqIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQuCisgKgorICogRW5hYmxlIHRoaXMgbGF5ZXIgdG8gYWxsb3cgdXNlIG9mIG11dGV4ZXMgd2l0aGluIG1iZWQgVExTCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RJTUlOR19DCisgKgorICogRW5hYmxlIHRoZSBzZW1pLXBvcnRhYmxlIHRpbWluZyBpbnRlcmZhY2UuCisgKgorICogXG5vdGUgVGhlIHByb3ZpZGVkIGltcGxlbWVudGF0aW9uIG9ubHkgd29ya3Mgb24gUE9TSVgvVW5peCAoaW5jbHVkaW5nIExpbnV4LAorICogQlNEIGFuZCBPUyBYKSBhbmQgV2luZG93cy4gT24gb3RoZXIgcGxhdGZvcm1zLCB5b3UgY2FuIGVpdGhlciBkaXNhYmxlIHRoYXQKKyAqIG1vZHVsZSBhbmQgcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNhbGxiYWNrcyBuZWVkZWQgYnkKKyAqIFxjIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYigpIGZvciBEVExTLCBvciBsZWF2ZSBpdCBlbmFibGVkIGFuZCBwcm92aWRlCisgKiB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgd2hvbGUgbW9kdWxlIGJ5IHNldHRpbmcKKyAqIFxjIE1CRURUTFNfVElNSU5HX0FMVCBpbiB0aGUgY3VycmVudCBmaWxlLgorICoKKyAqIFxub3RlIFNlZSBhbHNvIG91ciBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGFib3V0IHBvcnRpbmcgdG8gYSBuZXcKKyAqIGVudmlyb25tZW50OgorICogaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvaG93LXRvL2hvdy1kby1pLXBvcnQtbWJlZC10bHMtdG8tYS1uZXctZW52aXJvbm1lbnQtT1MKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3RpbWluZy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2hhdmVnZS5jCisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgSEFWRUdFIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19WRVJTSU9OX0MKKyAqCisgKiBFbmFibGUgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3ZlcnNpb24uYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHJ1bi10aW1lIHZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNvcmUgZm9yIHVzaW5nIGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDkuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3JsLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FTTjFfUEFSU0VfQywgTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQywKKyAqICAgICAgICAgICBNQkVEVExTX1BLX1BBUlNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFguNTA5IHBhcnNpbmcgbW9kdWxlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9VU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBDUkwgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIFguNTA5IENSTCBwYXJzaW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqIENhbGxlcjogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGZvciByZWFkaW5nIFguNTA5IGNlcnRpZmljYXRlIHJlcXVlc3QuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUkVBVEVfQworICoKKyAqIEVuYWJsZSBYLjUwOSBjb3JlIGZvciBjcmVhdGluZyBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQklHTlVNX0MsIE1CRURUTFNfT0lEX0MsIE1CRURUTFNfUEtfV1JJVEVfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHRoZSBiYXNpcyBmb3IgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzIGFuZCBDU1JzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSRUFURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgY3JlYXRpbmcgWC41MDkgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgY3JlYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworICoKKyAqIEVuYWJsZSBjcmVhdGluZyBYLjUwOSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3RzIChDU1IpLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jc3Jfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgcmVxdWVzdCB3cml0aW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1hURUFfQworICoKKyAqIEVuYWJsZSB0aGUgWFRFQSBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94dGVhLmMKKyAqIENhbGxlcjoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWFRFQV9DCisKKy8qIFx9IG5hbWUgU0VDVElPTjogbWJlZCBUTFMgbW9kdWxlcyAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqCisgKiBUaGlzIHNlY3Rpb24gYWxsb3dzIGZvciB0aGUgc2V0dGluZyBvZiBtb2R1bGUgc3BlY2lmaWMgc2l6ZXMgYW5kCisgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZQorICogcmVsZXZhbnQgaGVhZGVyIGZpbGVzIGFuZCBzaG91bGQgc3VmZmljZSBmb3IgdGhlIHJlZ3VsYXIgdXNlIGNhc2VzLgorICoKKyAqIE91ciBhZHZpY2UgaXMgdG8gZW5hYmxlIG9wdGlvbnMgYW5kIGNoYW5nZSB0aGVpciB2YWx1ZXMgaGVyZQorICogb25seSBpZiB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIGFuZCBrbm93IHRoZSBjb25zZXF1ZW5jZXMuCisgKgorICogUGxlYXNlIGNoZWNrIHRoZSByZXNwZWN0aXZlIGhlYWRlciBmaWxlIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZXNlCisgKiBwYXJhbWV0ZXJzICh0byBwcmV2ZW50IGR1cGxpY2F0ZSBkb2N1bWVudGF0aW9uKS4KKyAqIFx7CisgKi8KKworLyogTVBJIC8gQklHTlVNIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUgICAgICAgICAgICAxIC8qKjwgTWF4aW11bSB3aW5kb3dzIHNpemUgdXNlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX1NJWkUgICAgICAgICAgICAzMiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGZvciB1c2FibGUgTVBJcy4gKi8KKworLyogQ1RSX0RSQkcgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gICAgICAgICAgICAgICA0OCAvKio8IEFtb3VudCBvZiBlbnRyb3B5IHVzZWQgcGVyIHNlZWQgYnkgZGVmYXVsdCAoNDggd2l0aCBTSEEtNTEyLCAzMiB3aXRoIFNIQS0yNTYpICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwgICAgICAgIDEwMDAwIC8qKjwgSW50ZXJ2YWwgYmVmb3JlIHJlc2VlZCBpcyBwZXJmb3JtZWQgYnkgZGVmYXVsdCAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAgICAgIDI1NiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUICAgICAgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICAgICAgICAgICAzODQgLyoqPCBNYXhpbXVtIHNpemUgb2YgKHJlKXNlZWQgYnVmZmVyICovCisKKy8qIEhNQUNfRFJCRyBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMICAgMTAwMDAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUICAgICAgICAgICAyNTYgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBhZGRpdGlvbmFsIGlucHV0IGJ5dGVzICovCisvLyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCAgICAgIDM4NCAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKworLyogRUNQIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfTUFYX0JJVFMgICAgICAgICAgICAgMjU2IC8qKjwgTWF4aW11bSBiaXQgc2l6ZSBvZiBncm91cHMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgICAgICAgICAyIC8qKjwgTWF4aW11bSB3aW5kb3cgc2l6ZSB1c2VkICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNICAgICAgMCAvKio8IEVuYWJsZSBmaXhlZC1wb2ludCBzcGVlZC11cCAqLworCisvKiBFbnRyb3B5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMgICAgICAgICAgICAgICAgMjAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHN1cHBvcnRlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfR0FUSEVSICAgICAgICAgICAgICAgIDEyOCAvKio8IE1heGltdW0gYW1vdW50IHJlcXVlc3RlZCBmcm9tIGVudHJvcHkgc291cmNlcyAqLworCisvKiBNZW1vcnkgYnVmZmVyIGFsbG9jYXRvciBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUgICAgICA0IC8qKjwgQWxpZ24gb24gbXVsdGlwbGVzIG9mIHRoaXMgdmFsdWUgKi8KKworLyogUGxhdGZvcm0gb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIgICA8c3RkbGliLmg+IC8qKjwgSGVhZGVyIHRvIGluY2x1ZGUgaWYgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TIGlzIGRlZmluZWQuIERvbid0IGRlZmluZSBpZiBubyBoZWFkZXIgaXMgbmVlZGVkLiAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyAgICAgICAgY2FsbG9jIC8qKjwgRGVmYXVsdCBhbGxvY2F0b3IgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSAgICAgICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCAgICAgICAgICAgIGV4aXQgLyoqPCBEZWZhdWx0IGV4aXQgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfVElNRSAgICAgICAgICAgIHRpbWUgLyoqPCBEZWZhdWx0IHRpbWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URiAgICAgIGZwcmludGYgLyoqPCBEZWZhdWx0IGZwcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGICAgICAgICBwcmludGYgLyoqPCBEZWZhdWx0IHByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8qIE5vdGU6IHlvdXIgc25wcmludGYgbXVzdCBjb3JyZWNsdHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlciEgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URiAgICBzbnByaW50ZiAvKio8IERlZmF1bHQgc25wcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9TVUNDRVNTICAgICAgIDAgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9GQUlMVVJFICAgICAgIDEgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisKKy8qIFRvIFVzZSBGdW5jdGlvbiBNYWNyb3MgTUJFRFRMU19QTEFURk9STV9DIG11c3QgYmUgZW5hYmxlZCAqLworLyogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVCBjYW5ub3QgYm90aCBiZSBkZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8gICAgICAgIGNhbGxvYyAvKio8IERlZmF1bHQgYWxsb2NhdG9yIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyAgICAgICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPICAgICAgICAgICAgZXhpdCAvKio8IERlZmF1bHQgZXhpdCBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8gICAgICAgICAgICB0aW1lIC8qKjwgRGVmYXVsdCB0aW1lIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPICAgICB1aW50MzJfdCAvKio8IERlZmF1bHQgdGltZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8gICAgICBmcHJpbnRmIC8qKjwgRGVmYXVsdCBmcHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPICAgICAgICBwcmludGYgLyoqPCBEZWZhdWx0IHByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8qIE5vdGU6IHlvdXIgc25wcmludGYgbXVzdCBjb3JyZWNsdHkgemVyby10ZXJtaW5hdGUgdGhlIGJ1ZmZlciEgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPICAgIHNucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKworLyogU1NMIENhY2hlIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQgICAgICAgODY0MDAgLyoqPCAxIGRheSAgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTICAgICAgNTAgLyoqPCBNYXhpbXVtIGVudHJpZXMgaW4gY2FjaGUgKi8KKworLyogU1NMIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICAgICAgICAgICAgIDc2OCAvKio8IE1heGl1bSBmcmFnbWVudCBsZW5ndGggaW4gYnl0ZXMsIGRldGVybWluZXMgdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGludGVybmFsIEkvTyBidWZmZXJzICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUgICAgIDg2NDAwIC8qKjwgTGlmZXRpbWUgb2Ygc2Vzc2lvbiB0aWNrZXRzIChpZiBlbmFibGVkKSAqLworLy8jZGVmaW5lIE1CRURUTFNfUFNLX01BWF9MRU4gICAgICAgICAgICAgICAzMiAvKio8IE1heCBzaXplIG9mIFRMUyBwcmUtc2hhcmVkIGtleXMsIGluIGJ5dGVzIChkZWZhdWx0IDI1NiBiaXRzKSAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUICAgICAgICA2MCAvKio8IERlZmF1bHQgZXhwaXJhdGlvbiBkZWxheSBvZiBEVExTIGNvb2tpZXMsIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLCBvciBpbiBudW1iZXIgb2YgY29va2llcyBpc3N1ZWQgKi8KKworLyoqCisgKiBDb21wbGV0ZSBsaXN0IG9mIGNpcGhlcnN1aXRlcyB0byB1c2UsIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCisgKgorICogXHdhcm5pbmcgTm8gZGVwZW5kZW5jeSBjaGVja2luZyBpcyBkb25lIG9uIHRoYXQgZmllbGQhIFRoaXMgb3B0aW9uIGNhbiBvbmx5CisgKiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNpcGhlcnN1aXRlcy4gSXQgaXMgeW91cgorICogcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoZSBuZWVkZWQgbW9kdWxlcyBhcmUgYWN0aXZlLgorICoKKyAqIFVzZSB0aGlzIHRvIHNhdmUgYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBST00gKGRlZmF1bHQgb3JkZXJpbmcgb2YgYWxsCisgKiBhdmFpbGFibGUgY2lwaGVyc3VpdGVzKSBhbmQgYSBmZXcgdG8gYSBmZXcgaHVuZHJlZCBieXRlcyBvZiBSQU0uCisgKgorICogVGhlIHZhbHVlIGJlbG93IGlzIG9ubHkgYW4gZXhhbXBsZSwgbm90IHRoZSBkZWZhdWx0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOAorCisvKiBYNTA5IG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSAgIDggICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGludGVybWVkaWF0ZSBDQXMgaW4gYSB2ZXJpZmljYXRpb24gY2hhaW4uICovCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9NQkVEKQorI2luY2x1ZGUgIm1iZWR0bHMvdGFyZ2V0X2NvbmZpZy5oIgorI2VuZGlmCisKKy8qCisgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIGFueSBwcmV2aW91cyBkZWZhdWx0LgorICoKKyAqIFVzZSB0d28gbWFjcm8gbmFtZXMgZm9yIHRoYXQsIGFzOgorICogLSB3aXRoIHlvdHRhIHRoZSBwcmVmaXggWU9UVEFfQ0ZHXyBpcyBmb3JjZWQKKyAqIC0gd2l0aG91dCB5b3R0YSBpcyBsb29rcyB3ZWlyZCB0byBoYXZlIGEgWU9UVEEgcHJlZml4LgorICovCisjaWYgZGVmaW5lZChZT1RUQV9DRkdfTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgWU9UVEFfQ0ZHX01CRURUTFNfVVNFUl9DT05GSUdfRklMRQorI2VsaWYgZGVmaW5lZChNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSBNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9jaGVja19jb25maWcuaCIKKworI2VuZGlmIC8qIE1CRURUTFNfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNlNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vc2hhMjU2X2FsdC5jCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAic2hhMjU2X2FsdC5oIgorCisjaWZkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2luaXQobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4KQoreworICAgIG1lbXNldCgodm9pZCAqKWN0eCwgMHgwMCwgc2l6ZW9mKGN0eCkpOworfQorCisvKioKKyAqIGRvY3VtZW50ZWQgaW4gc2hhMjU2X2FsdC5oCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZnJlZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgpCit7CisgICAgbWVtc2V0KCh2b2lkICopY3R4LCAweDAwLCBzaXplb2YoY3R4KSk7Cit9CisKKy8qKgorICogZG9jdW1lbnRlZCBpbiBzaGEyNTZfYWx0LmgKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9jbG9uZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpkc3QsIGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKnNyYykKK3sKKyAgICAqZHN0ID0gKnNyYzsKK30KKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyhtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGludCBpczIyNCkKK3sKKyAgICBTSEEyNTZfaW5pdGlhbGl6ZShjdHgpOworCisgICAgaWYgKGlzMjI0ICE9IDApCisgICAgeworICAgICAgICAvKiBTSEEtMjI0ICovCisgICAgICAgIGN0eC0+c3RhdGVbMF0gPSAweEMxMDU5RUQ4OworICAgICAgICBjdHgtPnN0YXRlWzFdID0gMHgzNjdDRDUwNzsKKyAgICAgICAgY3R4LT5zdGF0ZVsyXSA9IDB4MzA3MEREMTc7CisgICAgICAgIGN0eC0+c3RhdGVbM10gPSAweEY3MEU1OTM5OworICAgICAgICBjdHgtPnN0YXRlWzRdID0gMHhGRkMwMEIzMTsKKyAgICAgICAgY3R4LT5zdGF0ZVs1XSA9IDB4Njg1ODE1MTE7CisgICAgICAgIGN0eC0+c3RhdGVbNl0gPSAweDY0Rjk4RkE3OworICAgICAgICBjdHgtPnN0YXRlWzddID0gMHhCRUZBNEZBNDsKKyAgICB9Cit9CisKKy8qKgorICogZG9jdW1lbnRlZCBpbiBzaGEyNTZfYWx0LmgKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl91cGRhdGUobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4pCit7CisgICAgU0hBMjU2X2V4ZWN1dGUoY3R4LCAodWludDhfdCAqKWlucHV0LCAodWludDMyX3QpaWxlbik7Cit9CisKK2NoYXIgKndvcmthcm91bmRfY2MyNjUwX3JvbTsKKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXSkKK3sKKyAgICAvKiB3b3JrYXJvdW5kIGZvciBlcnJvciBpbiBjb3B5IHN1YnJvdXRpbmUgb2YgU0hBMjU2IFJPTSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKiBBbGxvY2F0ZSBhbiBleHRyYSA2NCBieXRlcyBvbiB0aGUgc3RhY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYnVmZmVyCisgICAgICogcm9vbS4gVGhpcyBjb3VsZCBiZSBvcHRvbWl6ZWQgb3V0IGlmIHlvdSBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aAorICAgICAqIGEgY2FsbCBzdGFjayBzaG9ydGVyIHRoYW4gMTYgd29yZHMsIGFwcHJveC4gOCBzdGFjayBmcmFtZXMuCisgICAgICoKKyAgICAgKiBUaGUgc2ltcGxlIGRlc2NyaXB0aW9uIGlzIHRoaXM6CisgICAgICogICAgSWYgdGhlIHN0YWNrIHBvaW50ZXIgaXMgd2l0aGluIDY0Ynl0ZXMgb2YgdGhlIGVuZCBvZiBSQU0KKyAgICAgKiAgICB0aGUgYnVnIGV4cG9zZXMgaXQgc2VsZi4KKyAgICAgKiAgICBJZiB0aGUgc3RhY2sgcG9pbnRlciBpcyBtb3JlIHRoZW4gNjRieXRlcyBmcm9tIGVuZCBvZiBSQU0KKyAgICAgKiAgICBUaGVyZSBpcyBubyBidWcuLi4KKyAgICAgKiBTb2x1dGlvbjoKKyAgICAgKiAgICBNYWtlIGEgNjRieXRlIGJ1ZmZlciBvbiB0aGUgc3RhY2suLgorICAgICAqICAgIEFuZCBmb3JjZSB0aGUgY29tcGlsZXIgdG8gdGhpbmsgaXQgcmVxdWlyZXMgdGhpcyBidWZmZXIuCisgICAgICovCisgICAgY2hhciBidWZmZXJbIDY0IF07CisgICAgd29ya2Fyb3VuZF9jYzI2NTBfcm9tID0gJmJ1ZmZlclswXTsKKyAgICBTSEEyNTZfb3V0cHV0KGN0eCwgKHVpbnQ4X3QgKilvdXRwdXQpOworICAgIHJldHVybjsKK30KKworLyoqCisgKiBkb2N1bWVudGVkIGluIHNoYTI1Nl9hbHQuaAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdKQoreworICAgIFNIQTI1Nl9leGVjdXRlKGN0eCwgKHVpbnQ4X3QgKilkYXRhLCBzaXplb2YodW5zaWduZWQgY2hhcikgKiA2NCk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9BTFQgKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvY3J5cHRvL3NoYTI1Nl9hbHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjc0ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9jcnlwdG8vc2hhMjU2X2FsdC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfU0hBMjU2X0FMVF9ICisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0FMVF9ICisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfRklMRQorI2luY2x1ZGUgImNjMjY1MC1tYmVkdGxzLWNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWZkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpbmNsdWRlICJkcml2ZXJsaWIvcm9tX2NyeXB0by5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGJyaWVmIHRyYW5zbGF0aW5nIHRoZSBtYmVkdGxzIFNIQTI1NiB3b3Jrc3BhY2UgdG8gdGhlIGNjMjY1MCBTSEEyNTYgd29ya3NwYWNlLgorICovCit0eXBlZGVmIFNIQTI1Nl9tZW1vcnlfdCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0OworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIFNIQS0yNTYgY29udGV4dAorICoKKyAqIEBwYXJhbSBbaW4sb3V0XSBjdHggU0hBLTI1NiBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfaW5pdChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgpOworCisvKioKKyAqIEBicmllZiBDbGVhciBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZnJlZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgpOworCisvKioKKyAqIEBicmllZiBDbG9uZSAodGhlIHN0YXRlIG9mKSBhIFNIQS0yNTYgY29udGV4dAorICoKKyAqIEBwYXJhbSBbb3V0XSBkc3QgVGhlIGRlc3RpbmF0aW9uIGNvbnRleHQKKyAqIEBwYXJhbSBbaW5dIHNyYyBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9jbG9uZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKnNyYyk7CisKKy8qKgorICogQGJyaWVmIFNIQS0yNTYgY29udGV4dCBzZXR1cAorICoKKyAqIEBwYXJhbSBbaW4sb3V0XSBjdHggY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogQHBhcmFtIFtpbl0gaXMyMjQgMCA9IHVzZSBTSEEyNTYsIDEgPSB1c2UgU0hBMjI0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfc3RhcnRzKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgaW50IGlzMjI0KTsKKworLyoqCisgKiBAYnJpZWYgU0hBLTI1NiBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBbaW4sb3V0XSBjdHggU0hBLTI1NiBjb250ZXh0CisgKiBAcGFyYW0gW2luXSBpbnB1dCBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIEBwYXJhbSBbaW5dIGlsZW4gbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfdXBkYXRlKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuKTsKKworLyoqCisgKiBAYnJpZWYgU0hBLTI1NiBmaW5hbCBkaWdlc3QKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dAorICogQHBhcmFtIFtvdXRdIG91dHB1dCBTSEEtMjI0LzI1NiBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9maW5pc2gobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl0pOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfcHJvY2VzcyhtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQUxUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9BTFRfSCAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9kaWFnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTkyODVmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9kaWFnLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorCisKKy8qKgorICogRGlhZ25vc3RpY3MgbW9kZSB2YXJpYWJsZXMuCisgKgorICovCitzdGF0aWMgYm9vbCBzRGlhZ01vZGUgPSBmYWxzZTsKKwordm9pZCBvdFBsYXREaWFnUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIC8vIEFkZCBtb3JlIHBsYXJmb3JtIHNwZWNpZmljIGRpYWdub3N0aWNzIGZlYXR1cmVzIGhlcmUuCisgICAgaWYgKGFyZ2MgPiAxKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgfQorCisgICAgKHZvaWQpIGFyZ2M7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KKwordm9pZCBvdFBsYXREaWFnTW9kZVNldChib29sIGFNb2RlKQoreworICAgIHNEaWFnTW9kZSA9IGFNb2RlOworfQorCitib29sIG90UGxhdERpYWdNb2RlR2V0KCkKK3sKKyAgICByZXR1cm4gc0RpYWdNb2RlOworfQorCit2b2lkIG90UGxhdERpYWdDaGFubmVsU2V0KHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgKHZvaWQpIGFDaGFubmVsOworfQorCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcikKK3sKKyAgICAodm9pZCkgYVR4UG93ZXI7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICAodm9pZCkgYUZyYW1lOworICAgICh2b2lkKSBhRXJyb3I7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0FsYXJtQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhYTEyMwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvZmxhc2guYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNjUwLmgiCisKKy8qKgorICogQHdhcm5pbmcgdGhpcyBmaWxlIG9ubHkgaW1wbGVtZW50cyBzdHVicyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGxzLiBUaGVyZSBpcworICogbm90IGVub3VnaCBzcGFjZSBvbiB0aGUgY2MyNjUwIHRvIHN1cHBvcnQgTlYgYXMgYW4gU29DLgorICovCisKK290RXJyb3IgdXRpbHNGbGFzaEluaXQodm9pZCkKK3sKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiAwOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hFcmFzZVBhZ2UodWludDMyX3QgYUFkZHJlc3MpCit7CisgICAgKHZvaWQpYUFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoU3RhdHVzV2FpdCh1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICAodm9pZClhVGltZW91dDsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgKHZvaWQpYUFkZHJlc3M7CisgICAgKHZvaWQpYURhdGE7CisgICAgKHZvaWQpYVNpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgKHZvaWQpYUFkZHJlc3M7CisgICAgKHZvaWQpYURhdGE7CisgICAgKHZvaWQpYVNpemU7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjA0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL21pc2MuYwpAQCAtMCwwICsxLDc2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zeXNfY3RybC5oPgorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vbWlzYy5oCisgKi8KK3ZvaWQgb3RQbGF0UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBTeXNDdHJsU3lzdGVtUmVzZXQoKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL21pc2MuaAorICovCitvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgc3dpdGNoIChTeXNDdHJsUmVzZXRTb3VyY2VHZXQoKSkKKyAgICB7CisgICAgY2FzZSBSU1RTUkNfUFdSX09OOgorICAgICAgICByZXR1cm4gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisKKyAgICBjYXNlIFJTVFNSQ19QSU5fUkVTRVQ6CisgICAgICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9FWFRFUk5BTDsKKworICAgIGNhc2UgUlNUU1JDX1ZERFNfTE9TUzoKKyAgICBjYXNlIFJTVFNSQ19WRERfTE9TUzoKKyAgICBjYXNlIFJTVFNSQ19WRERSX0xPU1M6CisgICAgY2FzZSBSU1RTUkNfQ0xLX0xPU1M6CisgICAgICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9DUkFTSDsKKworICAgIGNhc2UgUlNUU1JDX1dBUk1SRVNFVDoKKyAgICBjYXNlIFJTVFNSQ19TWVNSRVNFVDoKKyAgICBjYXNlIFJTVFNSQ19XQUtFVVBfRlJPTV9TSFVURE9XTjoKKyAgICAgICAgcmV0dXJuIE9UX1BMQVRfUkVTRVRfUkVBU09OX1NPRlRXQVJFOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE9UX1BMQVRfUkVTRVRfUkVBU09OX1VOS05PV047CisgICAgfQorfQorCit2b2lkIG90UGxhdFdha2VIb3N0KHZvaWQpCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50IGFuIG9wZXJhdGlvbiB0byB3YWtlIHRoZSBob3N0IGZyb20gc2xlZXAgc3RhdGUuCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL29wZW50aHJlYWQtY29yZS1jYzI2NTAtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL29wZW50aHJlYWQtY29yZS1jYzI2NTAtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZjdiOQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvb3BlbnRocmVhZC1jb3JlLWNjMjY1MC1jb25maWcuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9DQzI2NTBfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9DQzI2NTBfQ09ORklHX0hfCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTCisgKgorICogVGhlIG51bWJlciBvZiBtZXNzYWdlIGJ1ZmZlcnMgaW4gYnVmZmVyIHBvb2wKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTIDMyCisKKy8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHVzZSBsZWdhY3kgdHJhbnNtaXQgZG9uZS4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MRUdBQ1lfVFJBTlNNSVRfRE9ORSAxCisKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0NPUkVfQ0MyNjUwX0NPTkZJR19IXyAqLworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3BsYXRmb3JtLWNjMjY1MC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9wbGF0Zm9ybS1jYzI2NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI2NmVkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC9wbGF0Zm9ybS1jYzI2NTAuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBMQVRGT1JNX0hfCisjZGVmaW5lIFBMQVRGT1JNX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gR2xvYmFsIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlCitleHRlcm4gb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBhbGFybSBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgY2MyNjUwQWxhcm1Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIGFsYXJtIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBjYzI2NTBBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmFkaW8gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGNjMjY1MFJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyByYWRpbyBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKi8KK3ZvaWQgY2MyNjUwUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIHJhbmRvbSBudW1iZXIgc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGNjMjY1MFJhbmRvbUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBtZXRob2QgcGVyZm9ybXMgcmFkaW8gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGNjMjY1MFVhcnRQcm9jZXNzKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFBMQVRGT1JNX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3BsYXRmb3JtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4YmMzMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSAicGxhdGZvcm0tY2MyNjUwLmgiCisKK2V4dGVybiBjb25zdCBjaGFyIF9fY2NmZ1tdOworCitjb25zdCBjaGFyICpkdW1teV9jY2ZnX3JlZiA9ICgoY29uc3QgY2hhciAqKSgmKF9fY2NmZ1swXSkpKTsKKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtLWNjMjY1MC5oCisgKi8KK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgKHZvaWQpIGFyZ2M7CisgICAgKHZvaWQpIGFyZ3Y7CisKKyAgICB3aGlsZSAoZHVtbXlfY2NmZ19yZWYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAgKiBUaGlzIHByb3ZpZGVzIGEgY29kZSByZWZlcmVuY2UgdG8gdGhlIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAqIGFyZWEgb2YgdGhlIGZsYXNoLCBvdGhlcndpc2UgdGhlIGRhdGEgaXMgc2tpcHBlZCBieSB0aGUKKyAgICAgICAgICAqIGxpbmtlciBhbmQgbm90IHB1dCBpbnRvIHRoZSBmaW5hbCBmbGFzaCBpbWFnZS4KKyAgICAgICAgICAqLworICAgIH0KKworICAgIGNjMjY1MEFsYXJtSW5pdCgpOworICAgIGNjMjY1MFJhbmRvbUluaXQoKTsKKyAgICBjYzI2NTBSYWRpb0luaXQoKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtLWNjMjY1MC5oCisgKi8KK3ZvaWQgUGxhdGZvcm1Qcm9jZXNzRHJpdmVycyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgLy8gc2hvdWxkIHNsZWVwIGFuZCB3YWl0IGZvciBpbnRlcnJ1cHRzIGhlcmUKKworICAgIGNjMjY1MFVhcnRQcm9jZXNzKCk7CisgICAgY2MyNjUwUmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgY2MyNjUwQWxhcm1Qcm9jZXNzKGFJbnN0YW5jZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMzFiNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvcmFkaW8uYwpAQCAtMCwwICsxLDE4NjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisjaW5jbHVkZSAiY2MyNjUwX3JhZGlvLmgiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+IC8qIHRvIHNlZWQgdGhlIENTTUEtQ0EgZnVuY2l0b24gKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8aW5jL2h3X3ByY20uaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NjZmcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL29zYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9kYXRhX2VudHJ5Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX21haWxib3guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9pZWVlX21haWxib3guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfaWVlZV9jbWQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY2hpcGluZm8uaD4KKworZW51bQoreworICAgIENDMjY1MF9SRUNFSVZFX1NFTlNJVElWSVRZID0gLTEwMCwgIC8vIGRCbQorfTsKKworLyogcGh5IHN0YXRlIGFzIGRlZmluZWQgYnkgb3BlbnRocmVhZCAqLworc3RhdGljIHZvbGF0aWxlIGNjMjY1MF9QaHlTdGF0ZSBzU3RhdGU7CisKK3N0YXRpYyBvdXRwdXRfY29uZmlnX3QgY29uc3QgKnNDdXJyZW50T3V0cHV0UG93ZXIgPSAmKHJnT3V0cHV0UG93ZXJbT1VUUFVUX0NPTkZJR19DT1VOVCAtIDFdKTsKKworLyogT3ZlcnJpZGVzIGZvciBJRUVFIDgwMi4xNS40LCBkaWZmZXJlbnRpYWwgbW9kZSAqLworc3RhdGljIHVpbnQzMl90IHNJRUVFT3ZlcnJpZGVzW10gPQoreworICAgIDB4MDAzNTQwMzgsIC8qIFN5bnRoOiBTZXQgUlRSSU0gKFBPVEFJTFJFU1RSSU0pIHRvIDUgKi8KKyAgICAweDQwMDE0MDJELCAvKiBTeW50aDogQ29ycmVjdCBDS1ZEIGxhdGVuY3kgc2V0dGluZyAoYWRkcmVzcykgKi8KKyAgICAweDAwNjA4NDAyLCAvKiBTeW50aDogQ29ycmVjdCBDS1ZEIGxhdGVuY3kgc2V0dGluZyAodmFsdWUpICovCisgICAgMHgwMDA3ODRBMywgLyogU3ludGg6IFNldCBGUkVGID0gMy40MyBNSHogKDI0IE1IeiAvIDcpICovCisgICAgMHhBNDdFMDU4MywgLyogU3ludGg6IFNldCBsb29wIGJhbmR3aWR0aCBhZnRlciBsb2NrIHRvIDgwIGtIeiAoSzIpICovCisgICAgMHhFQUUwMDYwMywgLyogU3ludGg6IFNldCBsb29wIGJhbmR3aWR0aCBhZnRlciBsb2NrIHRvIDgwIGtIeiAoSzMsIExTQikgKi8KKyAgICAweDAwMDEwNjIzLCAvKiBTeW50aDogU2V0IGxvb3AgYmFuZHdpZHRoIGFmdGVyIGxvY2sgdG8gODAga0h6IChLMywgTVNCKSAqLworICAgIDB4MDAyQjUwREMsIC8qIEFkanVzdCBBR0MgREMgZmlsdGVyICovCisgICAgMHgwNTAwMDI0MywgLyogSW5jcmVhc2Ugc3ludGggcHJvZ3JhbW1pbmcgdGltZW91dCAqLworICAgIDB4MDAyMDgyQzMsIC8qIEluY3JlYXNlIHN5bnRoIHByb2dyYW1taW5nIHRpbWVvdXQgKi8KKyAgICAweEZGRkZGRkZGLCAvKiBFbmQgb2Ygb3ZlcnJpZGUgbGlzdCAqLworfTsKKworLyoKKyAqIHN0YXR1cyBvZiB0aGUgcGVuZGluZyBiaXQgb2YgdGhlIGxhc3QgYWNrIHBhY2tldCBmb3VuZCBieSB0aGUKKyAqIHNUcmFuc21pdFJ4QWNrQ21kIHJhZGlvIGNvbW1hbmQKKyAqCisgKiB1c2VkIHRvIHBhc3MgZGF0YSBmcm9tIHRoZSByYWRpbyBzdGF0ZSBJU1IgdG8gdGhlIHByb2Nlc3NpbmcgbG9vcAorICovCitzdGF0aWMgdm9sYXRpbGUgYm9vbCBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0ID0gZmFsc2U7CisKKy8qCisgKiBudW1iZXIgb2YgcmV0cnkgY291bnRzIGxlZnQgdG8gdGhlIGN1cnJlbnRseSB0cmFuc21pdHRpbmcgZnJhbWUKKyAqCisgKiBpbml0aWFsaXplZCB3aGVuIGEgZnJhbWUgaXMgcGFzc2VkIHRvIGJlIHNlbnQgb3ZlciB0aGUgYWlyLCBhbmQgZGVjcmVtZW50ZWQKKyAqIGJ5IHRoZSByYWRpbyBJU1IgZXZlcnkgdGltZSB0aGUgdHJhbnNtaXQgY29tbWFuZCBzdHJpbmcgZmFpbHMgdG8gcmVjZWl2ZSBhCisgKiBjb3JyZXNwb25kaW5nIGFjaworICovCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNUcmFuc21pdFJldHJ5Q291bnQgPSAwOworCisvKgorICogb2Zmc2V0IG9mIHRoZSByYWRpbyB0aW1lciBmcm9tIHRoZSBydGMKKyAqCisgKiB1c2VkIHdoZW4gd2Ugc3RhcnQgYW5kIHN0b3AgdGhlIFJBVAorICovCitzdGF0aWMgdWludDMyX3Qgc1JhdE9mZnNldCA9IDA7CisKKy8qCisgKiByYWRpbyBjb21tYW5kIHN0cnVjdHVyZXMgdGhhdCBydW4gb24gdGhlIENNMAorICovCitzdGF0aWMgdm9sYXRpbGUgcmZjX0NNRF9TWU5DX1NUQVJUX1JBVF90ICAgICBzU3RhcnRSYXRDbWQ7CitzdGF0aWMgdm9sYXRpbGUgcmZjX0NNRF9SQURJT19TRVRVUF90ICAgICAgICBzUmFkaW9TZXR1cENtZDsKKworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfRlNfUE9XRVJET1dOX3QgICAgICAgc0ZzUG93ZXJkb3duQ21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfU1lOQ19TVE9QX1JBVF90ICAgICAgc1N0b3BSYXRDbWQ7CisKK3N0YXRpYyB2b2xhdGlsZSByZmNfQ01EX0NMRUFSX1JYX3QgICAgICAgICAgIHNDbGVhclJlY2VpdmVRdWV1ZUNtZDsKK3N0YXRpYyB2b2xhdGlsZSByZmNfQ01EX0lFRUVfTU9EX0ZJTFRfdCAgICAgIHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9NT0RfU1JDX01BVENIX3Qgc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZDsKKworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9FRF9TQ0FOX3QgICAgICAgc0VkU2NhbkNtZDsKKworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9SWF90ICAgICAgICAgICAgc1JlY2VpdmVDbWQ7CisKK3N0YXRpYyB2b2xhdGlsZSByZmNfQ01EX0lFRUVfQ1NNQV90ICAgICAgICAgIHNDc21hY2FCYWNrb2ZmQ21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9UWF90ICAgICAgICAgICAgc1RyYW5zbWl0Q21kOworc3RhdGljIHZvbGF0aWxlIHJmY19DTURfSUVFRV9SWF9BQ0tfdCAgICAgICAgc1RyYW5zbWl0UnhBY2tDbWQ7CisKK3N0YXRpYyB2b2xhdGlsZSBleHRfc3JjX21hdGNoX2RhdGFfdCAgICAgICAgIHNTcmNNYXRjaEV4dERhdGE7CitzdGF0aWMgdm9sYXRpbGUgc2hvcnRfc3JjX21hdGNoX2RhdGFfdCAgICAgICBzU3JjTWF0Y2hTaG9ydERhdGE7CisKKy8qIHN0cnVjdCBjb250YWluaW5nIHJhZGlvIHN0YXRzICovCitzdGF0aWMgcmZjX2llZWVSeE91dHB1dF90IHNSZlN0YXRzOworCisjZGVmaW5lIFJYX0JVRl9TSVpFIDE0NAorLyogdHdvIHJlY2VpdmUgYnVmZmVycyBlbnRyaWVzIHdpdGggcm9vbSBmb3IgMSBtYXggSUVFRTgwMi4xNS40IGZyYW1lIGluIGVhY2ggKi8KK3N0YXRpYyB1aW50OF90IHNSeEJ1ZjBbUlhfQlVGX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKK3N0YXRpYyB1aW50OF90IHNSeEJ1ZjFbUlhfQlVGX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKKworLyogVGhlIFJYIERhdGEgUXVldWUgKi8KK3N0YXRpYyBkYXRhUXVldWVfdCBzUnhEYXRhUXVldWUgPSB7IDAgfTsKKworLyogb3BlbnRocmVhZCBkYXRhIHByaW1hdGl2ZXMgKi8KK3N0YXRpYyBvdFJhZGlvRnJhbWUgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RFcnJvciBzVHJhbnNtaXRFcnJvcjsKK3N0YXRpYyBvdEVycm9yIHNSZWNlaXZlRXJyb3I7CisKK3N0YXRpYyB1aW50OF90IHNUcmFuc21pdFBzZHVbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSA7CitzdGF0aWMgdWludDhfdCBzUmVjZWl2ZVBzZHVbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSA7CisKKy8qKgorICogSW50ZXJydXB0IGhhbmRsZXJzIGZvcndhcmQgZGVjbGFyZWQgZm9yIHJlZ2lzdGVyIGZ1bmN0aW9uCisgKi8KK3ZvaWQgUkZDQ1BFMEludEhhbmRsZXIodm9pZCk7Cit2b2lkIFJGQ0NQRTFJbnRIYW5kbGVyKHZvaWQpOworCisvKioKKyAqIEBicmllZiBpbml0aWFsaXplIHRoZSBSWC9UWCBidWZmZXJzCisgKgorICogWmVyb3Mgb3V0IHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBidWZmZXJzIGFuZCBzZXRzIHVwIHRoZSBkYXRhIHN0cnVjdHVyZXMKKyAqIG9mIHRoZSByZWNlaXZlIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCByZkNvcmVJbml0QnVmcyh2b2lkKQoreworICAgIHJmY19kYXRhRW50cnlfdCAqZW50cnk7CisgICAgbWVtc2V0KHNSeEJ1ZjAsIDB4MDAsIFJYX0JVRl9TSVpFKTsKKyAgICBtZW1zZXQoc1J4QnVmMSwgMHgwMCwgUlhfQlVGX1NJWkUpOworCisgICAgZW50cnkgPSAocmZjX2RhdGFFbnRyeV90ICopc1J4QnVmMDsKKyAgICBlbnRyeS0+cE5leHRFbnRyeSA9IHNSeEJ1ZjE7CisgICAgZW50cnktPmNvbmZpZy5sZW5TeiA9IERBVEFfRU5UUllfTEVOU1pfQllURTsKKyAgICBlbnRyeS0+bGVuZ3RoID0gc2l6ZW9mKHNSeEJ1ZjApIC0gc2l6ZW9mKHJmY19kYXRhRW50cnlfdCk7CisKKyAgICBlbnRyeSA9IChyZmNfZGF0YUVudHJ5X3QgKilzUnhCdWYxOworICAgIGVudHJ5LT5wTmV4dEVudHJ5ID0gc1J4QnVmMDsKKyAgICBlbnRyeS0+Y29uZmlnLmxlblN6ID0gREFUQV9FTlRSWV9MRU5TWl9CWVRFOworICAgIGVudHJ5LT5sZW5ndGggPSBzaXplb2Yoc1J4QnVmMCkgLSBzaXplb2YocmZjX2RhdGFFbnRyeV90KTsKKworICAgIHNUcmFuc21pdEZyYW1lLm1Qc2R1ID0gc1RyYW5zbWl0UHNkdTsKKyAgICBzVHJhbnNtaXRGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qc2R1ID0gc1JlY2VpdmVQc2R1OworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IDA7Cit9CisKKy8qKgorICogQGJyaWVmIGluaXRpYWxpemUgdGhlIFJYIGNvbW1hbmQgc3RydWN0dXJlCisgKgorICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSByZWNlaXZlIGNvbW1hbmQgc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCByZkNvcmVJbml0UmVjZWl2ZVBhcmFtcyh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX0lFRUVfUlhfdCBjUmVjZWl2ZUNtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfSUVFRV9SWCwKKyAgICAgICAgLnN0YXR1cyAgICAgICAgICAgICAgICAgICAgID0gSURMRSwKKyAgICAgICAgLnBOZXh0T3AgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAgICAgLnN0YXJ0VGltZSAgICAgICAgICAgICAgICAgID0gMHUsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9ORVZFUiwKKyAgICAgICAgfSwKKyAgICAgICAgLmNoYW5uZWwgICAgICAgICAgICAgICAgICAgID0gT1RfUkFESU9fQ0hBTk5FTF9NSU4sCisgICAgICAgIC5yeENvbmZpZyAgICAgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5iQXV0b0ZsdXNoQ3JjICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iQXV0b0ZsdXNoSWduICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iSW5jbHVkZVBoeUhkciAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iSW5jbHVkZUNyYyAgICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iQXBwZW5kUnNzaSAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iQXBwZW5kQ29yckNyYyAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iQXBwZW5kU3JjSW5kICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5iQXBwZW5kVGltZXN0YW1wICAgICAgID0gMCwKKyAgICAgICAgfSwKKyAgICAgICAgLmZyYW1lRmlsdE9wdCAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLmZyYW1lRmlsdEVuICAgICAgICAgICAgPSAxLAorICAgICAgICAgICAgLmZyYW1lRmlsdFN0b3AgICAgICAgICAgPSAxLAorICAgICAgICAgICAgLmF1dG9BY2tFbiAgICAgICAgICAgICAgPSAxLAorICAgICAgICAgICAgLnNsb3R0ZWRBY2tFbiAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLmF1dG9QZW5kRW4gICAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLmRlZmF1bHRQZW5kICAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLmJQZW5kRGF0YVJlcU9ubHkgICAgICAgPSAwLAorICAgICAgICAgICAgLmJQYW5Db29yZCAgICAgICAgICAgICAgPSAwLAorICAgICAgICAgICAgLm1heEZyYW1lVmVyc2lvbiAgICAgICAgPSAzLAorICAgICAgICAgICAgLmJTdHJpY3RMZW5GaWx0ZXIgICAgICAgPSAxLAorICAgICAgICB9LAorICAgICAgICAuZnJhbWVUeXBlcyAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAuYkFjY2VwdEZ0MEJlYWNvbiAgICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0MURhdGEgICAgICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0MkFjayAgICAgICAgICA9IDAsCisgICAgICAgICAgICAuYkFjY2VwdEZ0M01hY0NtZCAgICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0NFJlc2VydmVkICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0NVJlc2VydmVkICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0NlJlc2VydmVkICAgICA9IDEsCisgICAgICAgICAgICAuYkFjY2VwdEZ0N1Jlc2VydmVkICAgICA9IDEsCisgICAgICAgIH0sCisgICAgICAgIC5jY2FPcHQgICAgICAgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5jY2FFbkVuZXJneSAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FFbkNvcnIgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FFblN5bmMgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FDb3JyT3AgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5jY2FTeW5jT3AgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5jY2FDb3JyVGhyICAgICAgICAgICAgID0gMywKKyAgICAgICAgfSwKKyAgICAgICAgLmNjYVJzc2lUaHIgICAgICAgICAgICAgICAgID0gLTkwLAorICAgICAgICAuZW5kVHJpZ2dlciAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAudHJpZ2dlclR5cGUgICAgICAgICAgICA9IFRSSUdfTkVWRVIsCisgICAgICAgIH0sCisgICAgICAgIC5lbmRUaW1lICAgICAgICAgICAgICAgICAgICA9IDB1LAorICAgIH07CisgICAgc1JlY2VpdmVDbWQgPSBjUmVjZWl2ZUNtZDsKKworICAgIHNSZWNlaXZlQ21kLnBSeFEgICAgPSAmc1J4RGF0YVF1ZXVlOworICAgIHNSZWNlaXZlQ21kLnBPdXRwdXQgPSAmc1JmU3RhdHM7CisKKyAgICBzUmVjZWl2ZUNtZC5udW1TaG9ydEVudHJpZXMgPSBDQzI2NTBfU0hPUlRBRERfU1JDX01BVENIX05VTTsKKyAgICBzUmVjZWl2ZUNtZC5wU2hvcnRFbnRyeUxpc3QgPSAodm9pZCAqKSZzU3JjTWF0Y2hTaG9ydERhdGE7CisKKyAgICBzUmVjZWl2ZUNtZC5udW1FeHRFbnRyaWVzID0gQ0MyNjUwX0VYVEFERF9TUkNfTUFUQ0hfTlVNOworICAgIHNSZWNlaXZlQ21kLnBFeHRFbnRyeUxpc3QgPSAodWludDMyX3QgKikmc1NyY01hdGNoRXh0RGF0YTsKK30KKworLyoqCisgKiBAYnJpZWYgc2VuZHMgdGhlIGRpcmVjdCBhYm9ydCBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZUV4ZWN1dGVBYm9ydENtZCh2b2lkKQoreworICAgIHJldHVybiAoUkZDRG9vcmJlbGxTZW5kVG8oQ01EUl9ESVJfQ01EKENNRF9BQk9SVCkpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIHNlbmRzIHRoZSBkaXJlY3QgcGluZyBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogQ2hlY2sgdGhhdCB0aGUgUmFkaW8gY29yZSBpcyBhbGl2ZSBhbmQgYWJsZSB0byByZXNwb25kIHRvIGNvbW1hbmRzLgorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBjb3JyZWN0bHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDhfdCByZkNvcmVFeGVjdXRlUGluZ0NtZCh2b2lkKQoreworICAgIHJldHVybiAoUkZDRG9vcmJlbGxTZW5kVG8oQ01EUl9ESVJfQ01EKENNRF9QSU5HKSkgJiAweEZGKTsKK30KKworLyoqCisgKiBAYnJpZWYgc2VuZHMgdGhlIGltbWVkaWF0ZSBjbGVhciByeCBxdWV1ZSBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogVXNlcyB0aGUgcmFkaW8gY29yZSB0byBtYXJrIGFsbCBvZiB0aGUgZW50cmllcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBhcworICogcGVuZGluZy4gVGhpcyBpcyB1c2VkIGluc3RlYWQgb2YgY2xlYXJpbmcgdGhlIGVudHJpZXMgbWFudWFsbHkgdG8gYXZvaWQgcmFjZQorICogY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBtYWluIHByb2Nlc3NvciBhbmQgdGhlIHJhZGlvIGNvcmUuCisgKgorICogQHBhcmFtIFtpbl0gYVF1ZXVlIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBxdWV1ZSB0byBiZSBjbGVhcmVkCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZUNsZWFyUmVjZWl2ZVF1ZXVlKGRhdGFRdWV1ZV90ICphUXVldWUpCit7CisgICAgLyogbWVtc2V0IHNraXBwZWQgYmVjYXVzZSBzQ2xlYXJSZWNlaXZlUXVldWVDbWQgaGFzIG9ubHkgMiBtZW1iZXJzIGFuZCBwYWRkaW5nICovCisgICAgc0NsZWFyUmVjZWl2ZVF1ZXVlQ21kLmNvbW1hbmRObyA9IENNRF9DTEVBUl9SWDsKKyAgICBzQ2xlYXJSZWNlaXZlUXVldWVDbWQucFF1ZXVlID0gYVF1ZXVlOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNDbGVhclJlY2VpdmVRdWV1ZUNtZCkgJiAweEZGKTsKK30KKworLyoqCisgKiBAYnJpZWYgZW5hYmxlL2Rpc2FibGUgZmlsdGVyaW5nCisgKgorICogVXNlcyB0aGUgcmFkaW8gY29yZSB0byBhbHRlciB0aGUgY3VycmVudCBydW5uaW5nIFJYIGNvbW1hbmQgZmlsdGVyaW5nCisgKiBvcHRpb25zLiBUaGlzIGVuc3VyZXMgdGhlcmUgaXMgbm8gYWNjZXNzIGZhdWx0IGJldHdlZW4gdGhlIENNMyBhbmQgQ00wIGZvcgorICogdGhlIFJYIGNvbW1hbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIHR5cGUgb2YgZnJhbWVzIHRvIGJlIGZpbHRlcmVkIHRoZSBzYW1lIGFzIHRoZQorICogcmVjZWl2ZSBjb21tYW5kLgorICoKKyAqIEBub3RlIEFuIElFRUUgUlggY29tbWFuZCAqbXVzdCogYmUgcnVubmluZyB3aGlsZSB0aGlzIGNvbW1hbmQgZXhlY3V0ZXMuCisgKgorICogQHBhcmFtIFtpbl0gYUVuYWJsZSBUUlVFOiBlbmFibGUgZnJhbWUgZmlsdGVyaW5nLCBGQUxTRTogZGlzYWJsZSBmcmFtZSBmaWx0ZXJpbmcKKyAqCisgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIHRoZSBjb21tYW5kIHN0YXR1cyByZWdpc3RlcgorICogQHJldHZhbCBDTURTVEFfRG9uZSB0aGUgY29tbWFuZCBjb21wbGV0ZWQgY29ycmVjdGx5CisgKi8KK3N0YXRpYyB1aW50X2Zhc3Q4X3QgcmZDb3JlTW9kaWZ5UnhGcmFtZUZpbHRlcihib29sIGFFbmFibGUpCit7CisgICAgLyogbWVtc2V0IHNraXBwZWQgYmVjYXVzZSBzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZCBoYXMgb25seSAzIG1lbWJlcnMgKi8KKyAgICBzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5jb21tYW5kTm8gPSBDTURfSUVFRV9NT0RfRklMVDsKKyAgICAvKiBjb3B5IGN1cnJlbnQgZnJhbWUgZmlsdGVyaW5nIGFuZCBmcmFtZSB0eXBlcyBmcm9tIHJ1bm5pbmcgUlggY29tbWFuZCAqLworICAgIG1lbWNweSgodm9pZCAqKSZzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZUZpbHRPcHQsICh2b2lkICopJnNSZWNlaXZlQ21kLmZyYW1lRmlsdE9wdCwKKyAgICAgICAgICAgc2l6ZW9mKHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLm5ld0ZyYW1lRmlsdE9wdCkpOworICAgIG1lbWNweSgodm9pZCAqKSZzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZVR5cGVzLCAodm9pZCAqKSZzUmVjZWl2ZUNtZC5mcmFtZVR5cGVzLAorICAgICAgICAgICBzaXplb2Yoc01vZGlmeVJlY2VpdmVGaWx0ZXJDbWQubmV3RnJhbWVUeXBlcykpOworCisgICAgc01vZGlmeVJlY2VpdmVGaWx0ZXJDbWQubmV3RnJhbWVGaWx0T3B0LmZyYW1lRmlsdEVuID0gYUVuYWJsZSA/IDEgOiAwOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kKSAmIDB4RkYpOworfQorCisvKioKKyAqIEBicmllZiBlbmFibGUvZGlzYWJsZSBhdXRvUGVuZAorICoKKyAqIFVzZXMgdGhlIHJhZGlvIGNvcmUgdG8gYWx0ZXIgdGhlIGN1cnJlbnQgcnVubmluZyBSWCBjb21tYW5kIGZpbHRlcmluZworICogb3B0aW9ucy4gVGhpcyBlbnN1cmVzIHRoZXJlIGlzIG5vIGFjY2VzcyBmYXVsdCBiZXR3ZWVuIHRoZSBDTTMgYW5kIENNMCBmb3IKKyAqIHRoZSBSWCBjb21tYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSB0eXBlIG9mIGZyYW1lcyB0byBiZSBmaWx0ZXJlZCB0aGUgc2FtZSBhcyB0aGUKKyAqIHJlY2VpdmUgY29tbWFuZC4KKyAqCisgKiBAbm90ZSBBbiBJRUVFIFJYIGNvbW1hbmQgKm11c3QqIGJlIHJ1bm5pbmcgd2hpbGUgdGhpcyBjb21tYW5kIGV4ZWN1dGVzLgorICoKKyAqIEBwYXJhbSBbaW5dIGFFbmFibGUgVFJVRTogZW5hYmxlIGF1dG9QZW5kLCBGQUxTRTogZGlzYWJsZSBhdXRvUGVuZAorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBjb3JyZWN0bHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDhfdCByZkNvcmVNb2RpZnlSeEF1dG9QZW5kKGJvb2wgYUVuYWJsZSkKK3sKKyAgICAvKiBtZW1zZXQgc2tpcHBlZCBiZWNhdXNlIHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kIGhhcyBvbmx5IDMgbWVtYmVycyAqLworICAgIHNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLmNvbW1hbmRObyA9IENNRF9JRUVFX01PRF9GSUxUOworICAgIC8qIGNvcHkgY3VycmVudCBmcmFtZSBmaWx0ZXJpbmcgYW5kIGZyYW1lIHR5cGVzIGZyb20gcnVubmluZyBSWCBjb21tYW5kICovCisgICAgbWVtY3B5KCh2b2lkICopJnNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLm5ld0ZyYW1lRmlsdE9wdCwgKHZvaWQgKikmc1JlY2VpdmVDbWQuZnJhbWVGaWx0T3B0LAorICAgICAgICAgICBzaXplb2Yoc01vZGlmeVJlY2VpdmVGaWx0ZXJDbWQubmV3RnJhbWVGaWx0T3B0KSk7CisgICAgbWVtY3B5KCh2b2lkICopJnNNb2RpZnlSZWNlaXZlRmlsdGVyQ21kLm5ld0ZyYW1lVHlwZXMsICh2b2lkICopJnNSZWNlaXZlQ21kLmZyYW1lVHlwZXMsCisgICAgICAgICAgIHNpemVvZihzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZVR5cGVzKSk7CisKKyAgICBzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZC5uZXdGcmFtZUZpbHRPcHQuYXV0b1BlbmRFbiA9IGFFbmFibGUgPyAxIDogMDsKKworICAgIHJldHVybiAoUkZDRG9vcmJlbGxTZW5kVG8oKHVpbnQzMl90KSZzTW9kaWZ5UmVjZWl2ZUZpbHRlckNtZCkgJiAweEZGKTsKK30KKworLyoqCisgKiBAYnJpZWYgc2VuZHMgdGhlIGltbWVkaWF0ZSBtb2RpZnkgc291cmNlIG1hdGNoaW5nIGNvbW1hbmQgdG8gdGhlIHJhZGlvIGNvcmUKKyAqCisgKiBVc2VzIHRoZSByYWRpbyBjb3JlIHRvIGFsdGVyIHRoZSBjdXJyZW50IHNvdXJjZSBtYXRjaGluZyBwYXJhbWV0ZXJzIHVzZWQgYnkKKyAqIHRoZSBydW5uaW5nIFJYIGNvbW1hbmQuIFRoaXMgZW5zdXJlcyB0aGVyZSBpcyBubyBhY2Nlc3MgZmF1bHQgYmV0d2VlbiB0aGUKKyAqIENNMyBhbmQgQ00wLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBSWCBjb21tYW5kIGhhcyBjb2hlc2l2ZSB2aWV3IG9mIHRoZSBkYXRhLgorICogVGhlIENNMyBtYXkgbWFrZSBhbHRlcmF0aW9ucyB0byB0aGUgc291cmNlIG1hdGNoaW5nIGVudHJpZXMgaWYgdGhlIGVudHJ5IGlzCisgKiBtYXJrZWQgYXMgZGlzYWJsZWQuCisgKgorICogQG5vdGUgQW4gSUVFRSBSWCBjb21tYW5kICptdXN0KiBiZSBydW5uaW5nIHdoaWxlIHRoaXMgY29tbWFuZCBleGVjdXRlcy4KKyAqCisgKiBAcGFyYW0gW2luXSBhRW50cnlObyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHRvIGFsdGVyCisgKiBAcGFyYW0gW2luXSBhVHlwZSBUUlVFOiB0aGUgZW50cnkgaXMgYSBzaG9ydCBhZGRyZXNzLCBGQUxTRTogdGhlIGVudHJ5IGlzIGFuIGV4dGVuZGVkIGFkZHJlc3MKKyAqIEBwYXJhbSBbaW5dIGFFbmFibGUgd2hldGhlciB0aGUgZ2l2ZW4gZW50cnkgaXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZAorICoKKyAqIEByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSBjb21tYW5kIGNvbXBsZXRlZCBjb3JyZWN0bHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDhfdCByZkNvcmVNb2RpZnlTb3VyY2VNYXRjaEVudHJ5KHVpbnQ4X3QgYUVudHJ5Tm8sIGNjMjY1MF9hZGRyZXNzX3QgYVR5cGUsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAvKiBtZW1zZXQga2VwdCB0byBzYXZlIDYwIGJ5dGVzIG9mIHRleHQgc3BhY2UsIGdjYyBjYW4ndCBvcHRpbWl6ZSB0aGUKKyAgICAgKiBmb2xsb3dpbmcgYml0ZmllbGQgb3BlcmF0aW9uIGlmIGl0IGRvZXNuJ3Qga25vdyB0aGUgZmllbGRzIGFyZSB6ZXJvCisgICAgICogYWxyZWFkeS4KKyAgICAgKi8KKyAgICBtZW1zZXQoKHZvaWQgKikmc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZCwgMCwgc2l6ZW9mKHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQpKTsKKworICAgIHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQuY29tbWFuZE5vID0gQ01EX0lFRUVfTU9EX1NSQ19NQVRDSDsKKworICAgIC8qIHdlIG9ubHkgdXNlIHNvdXJjZSBtYXRjaGluZyBmb3IgcGVuZGluZyBkYXRhIGJpdCwgc28gZW5hYmxpbmcgYW5kCisgICAgICogcGVuZGluZyBhcmUgdGhlIHNhbWUgdG8gdXMuCisgICAgICovCisgICAgaWYgKGFFbmFibGUpCisgICAgeworICAgICAgICBzTW9kaWZ5UmVjZWl2ZVNyY01hdGNoQ21kLm9wdGlvbnMuYkVuYWJsZSA9IDE7CisgICAgICAgIHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQub3B0aW9ucy5zcmNQZW5kID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZC5vcHRpb25zLmJFbmFibGUgPSAwOworICAgICAgICBzTW9kaWZ5UmVjZWl2ZVNyY01hdGNoQ21kLm9wdGlvbnMuc3JjUGVuZCA9IDA7CisgICAgfQorCisgICAgc01vZGlmeVJlY2VpdmVTcmNNYXRjaENtZC5vcHRpb25zLmVudHJ5VHlwZSA9IGFUeXBlOworICAgIHNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQuZW50cnlObyA9IGFFbnRyeU5vOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNNb2RpZnlSZWNlaXZlU3JjTWF0Y2hDbWQpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIHdhbGtzIHRoZSBzaG9ydCBhZGRyZXNzIHNvdXJjZSBtYXRjaCBsaXN0IHRvIGZpbmQgYW4gYWRkcmVzcworICoKKyAqIEBwYXJhbSBbaW5dIGFkZHJlc3MgdGhlIHNob3J0IGFkZHJlc3MgdG8gc2VhcmNoIGZvcgorICoKKyAqIEByZXR1cm4gdGhlIGluZGV4IHdoZXJlIHRoZSBhZGRyZXNzIHdhcyBmb3VuZAorICogQHJldHZhbCBDQzI2NTBfU1JDX01BVENIX05PTkUgdGhlIGFkZHJlc3Mgd2FzIG5vdCBmb3VuZAorICovCitzdGF0aWMgdWludDhfdCByZkNvcmVGaW5kU2hvcnRTcmNNYXRjaElkeChjb25zdCB1aW50MTZfdCBhQWRkcmVzcykKK3sKKyAgICB1aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU07IGkrKykKKyAgICB7CisgICAgICAgIGlmIChzU3JjTWF0Y2hTaG9ydERhdGEuZXh0QWRkckVudFtpXS5zaG9ydEFkZHIgPT0gYUFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENDMjY1MF9TUkNfTUFUQ0hfTk9ORTsKK30KKworLyoqCisgKiBAYnJpZWYgd2Fsa3MgdGhlIHNob3J0IGFkZHJlc3Mgc291cmNlIG1hdGNoIGxpc3QgdG8gZmluZCBhbiBlbXB0eSBzbG90CisgKgorICogQHJldHVybiB0aGUgaW5kZXggb2YgYW4gdW51c2VkIGFkZHJlc3Mgc2xvdAorICogQHJldHZhbCBDQzI2NTBfU1JDX01BVENIX05PTkUgbm8gdW51c2VkIHNsb3RzIGF2YWlsYWJsZQorICovCitzdGF0aWMgdWludDhfdCByZkNvcmVGaW5kRW1wdHlTaG9ydFNyY01hdGNoSWR4KHZvaWQpCit7CisgICAgdWludDhfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IENDMjY1MF9TSE9SVEFERF9TUkNfTUFUQ0hfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHNTcmNNYXRjaFNob3J0RGF0YS5zcmNNYXRjaEVuW2kgLyAzMl0gJiAoMSA8PCAoaSAlIDMyKSkpID09IDB1KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDQzI2NTBfU1JDX01BVENIX05PTkU7Cit9CisKKy8qKgorICogQGJyaWVmIHdhbGtzIHRoZSBleHQgYWRkcmVzcyBzb3VyY2UgbWF0Y2ggbGlzdCB0byBmaW5kIGFuIGFkZHJlc3MKKyAqCisgKiBAcGFyYW0gW2luXSBhZGRyZXNzIHRoZSBleHQgYWRkcmVzcyB0byBzZWFyY2ggZm9yCisgKgorICogQHJldHVybiB0aGUgaW5kZXggd2hlcmUgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kCisgKiBAcmV0dmFsIENDMjY1MF9TUkNfTUFUQ0hfTk9ORSB0aGUgYWRkcmVzcyB3YXMgbm90IGZvdW5kCisgKi8KK3N0YXRpYyB1aW50OF90IHJmQ29yZUZpbmRFeHRTcmNNYXRjaElkeChjb25zdCB1aW50NjRfdCAqYUFkZHJlc3MpCit7CisgICAgdWludDhfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IENDMjY1MF9FWFRBRERfU1JDX01BVENIX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNTcmNNYXRjaEV4dERhdGEuZXh0QWRkckVudFtpXSA9PSAqYUFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENDMjY1MF9TUkNfTUFUQ0hfTk9ORTsKK30KKworLyoqCisgKiBAYnJpZWYgd2Fsa3MgdGhlIGV4dCBhZGRyZXNzIHNvdXJjZSBtYXRjaCBsaXN0IHRvIGZpbmQgYW4gZW1wdHkgc2xvdAorICoKKyAqIEByZXR1cm4gdGhlIGluZGV4IG9mIGFuIHVudXNlZCBhZGRyZXNzIHNsb3QKKyAqIEByZXR2YWwgQ0MyNjUwX1NSQ19NQVRDSF9OT05FIG5vIHVudXNlZCBzbG90cyBhdmFpbGFibGUKKyAqLworc3RhdGljIHVpbnQ4X3QgcmZDb3JlRmluZEVtcHR5RXh0U3JjTWF0Y2hJZHgodm9pZCkKK3sKKyAgICB1aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQ0MyNjUwX0VYVEFERF9TUkNfTUFUQ0hfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHNTcmNNYXRjaEV4dERhdGEuc3JjTWF0Y2hFbltpIC8gMzJdICYgKDEgPDwgKGkgJSAzMikpKSAhPSAwdSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQ0MyNjUwX1NSQ19NQVRDSF9OT05FOworfQorCisvKioKKyAqIEBicmllZiBzZW5kcyB0aGUgdHggY29tbWFuZCB0byB0aGUgcmFkaW8gY29yZQorICoKKyAqIFNlbmRzIHRoZSBwYWNrZXQgdG8gdGhlIHJhZGlvIGNvcmUgdG8gYmUgc2VudCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBAcGFyYW0gW2luXSBhUHNkdSBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgc2VudAorICogQG5vdGUgdGhpcyAqbXVzdCogYmUgNCBieXRlIGFsaWduZWQgYW5kIG5vdCBpbmNsdWRlIHRoZSBGQ1MsIHRoYXQgaXMKKyAqIGNhbGN1bGF0ZWQgaW4gaGFyZHdhcmUuCisgKiBAcGFyYW0gW2luXSBhTGVuIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgZGF0YSBwb2ludGVkIHRvIGJ5IHBzZHUuCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZVNlbmRUcmFuc21pdENtZCh1aW50OF90ICphUHNkdSwgdWludDhfdCBhTGVuKQoreworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX0lFRUVfQ1NNQV90IGNDc21hY2FCYWNrb2ZmQ21kID0KKyAgICB7CisgICAgICAgIC5jb21tYW5kTm8gICAgICAgICAgICAgICAgICA9IENNRF9JRUVFX0NTTUEsCisgICAgICAgIC5zdGF0dXMgICAgICAgICAgICAgICAgICAgICA9IElETEUsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9BTFdBWVMsCisgICAgICAgIH0sCisgICAgICAgIC5tYWNNYXhCRSAgICAgICAgICAgICAgICAgICA9IElFRUU4MDIxNTRfTUFDX01BWF9CRSwKKyAgICAgICAgLm1hY01heENTTUFCYWNrb2ZmcyAgICAgICAgID0gSUVFRTgwMjE1NF9NQUNfTUFYX0NTTUFfQkFDS09GRlMsCisgICAgICAgIC5jc21hQ29uZmlnICAgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC5pbml0Q1cgICAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5iU2xvdHRlZCAgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgICAgIC5yeE9mZk1vZGUgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgfSwKKyAgICAgICAgLk5CICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAgICAgLkJFICAgICAgICAgICAgICAgICAgICAgICAgID0gSUVFRTgwMjE1NF9NQUNfTUlOX0JFLAorICAgICAgICAucmVtYWluaW5nUGVyaW9kcyAgICAgICAgICAgPSAwLAorICAgICAgICAuZW5kVHJpZ2dlciAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAudHJpZ2dlclR5cGUgICAgICAgICAgICA9IFRSSUdfTkVWRVIsCisgICAgICAgIH0sCisgICAgICAgIC5lbmRUaW1lICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDAsCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9JRUVFX1RYX3QgY1RyYW5zbWl0Q21kID0KKyAgICB7CisgICAgICAgIC5jb21tYW5kTm8gICAgICAgICAgICAgICAgICA9IENNRF9JRUVFX1RYLAorICAgICAgICAuc3RhdHVzICAgICAgICAgICAgICAgICAgICAgPSBJRExFLAorICAgICAgICAuc3RhcnRUcmlnZ2VyICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAudHJpZ2dlclR5cGUgICAgICAgICAgICA9IFRSSUdfTk9XLAorICAgICAgICB9LAorICAgICAgICAuY29uZGl0aW9uICAgICAgICAgICAgICAgICAgPSB7CisgICAgICAgICAgICAucnVsZSAgICAgICAgICAgICAgICAgICA9IENPTkRfTkVWRVIsCisgICAgICAgIH0sCisgICAgICAgIC5wTmV4dE9wICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9JRUVFX1JYX0FDS190IGNUcmFuc21pdFJ4QWNrQ21kID0KKyAgICB7CisgICAgICAgIC5jb21tYW5kTm8gICAgICAgICAgICAgICAgICA9IENNRF9JRUVFX1JYX0FDSywKKyAgICAgICAgLnN0YXR1cyAgICAgICAgICAgICAgICAgICAgID0gSURMRSwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmVuZFRyaWdnZXIgICAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX1JFTF9TVEFSVCwKKyAgICAgICAgICAgIC5wYXN0VHJpZyAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX05FVkVSLAorICAgICAgICB9LAorICAgICAgICAucE5leHRPcCAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgICAgICAvKiBudW1iZXIgb2YgUkFUIHRpY2tzIHRvIHdhaXQgYmVmb3JlIGNsYWltaW5nIHdlIGhhdmVuJ3QgcmVjZWl2ZWQgYW4gYWNrICovCisgICAgICAgIC5lbmRUaW1lICAgICAgICAgICAgICAgICAgICA9ICgoSUVFRTgwMjE1NF9NQUNfQUNLX1dBSVRfRFVSQVRJT04gKiBDQzI2NTBfUkFUX1RJQ0tTX1BFUl9TRUMpIC8gSUVFRTgwMjE1NF9TWU1CT0xTX1BFUl9TRUMpLAorICAgIH07CisKKyAgICAvKiByZXNldCByZXRyeSBjb3VudCAqLworICAgIHNUcmFuc21pdFJldHJ5Q291bnQgPSAwOworCisgICAgc0NzbWFjYUJhY2tvZmZDbWQgICAgICAgICAgICAgICA9IGNDc21hY2FCYWNrb2ZmQ21kOworICAgIC8qIGluaXRpYWxpemUgdGhlIHJhbmRvbSBzdGF0ZSB3aXRoIGEgdHJ1ZSByYW5kb20gc2VlZCBmb3IgdGhlIHJhZGlvIGNvcmUncworICAgICAqIHBzdWRvIHJuZyAqLworICAgIHNDc21hY2FCYWNrb2ZmQ21kLnJhbmRvbVN0YXRlICAgPSBvdFBsYXRSYW5kb21HZXQoKTsKKyAgICBzQ3NtYWNhQmFja29mZkNtZC5wTmV4dE9wICAgICAgID0gKHJmY19yYWRpb09wX3QgKikgJnNUcmFuc21pdENtZDsKKworICAgIHNUcmFuc21pdENtZCA9IGNUcmFuc21pdENtZDsKKyAgICAvKiBubyBuZWVkIHRvIGxvb2sgZm9yIGFuIGFjayBpZiB0aGUgdHggb3BlcmF0aW9uIHdhcyBzdG9wcGVkICovCisgICAgc1RyYW5zbWl0Q21kLnBheWxvYWRMZW4gPSBhTGVuOworICAgIHNUcmFuc21pdENtZC5wUGF5bG9hZCA9IGFQc2R1OworCisgICAgaWYgKGFQc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkKKyAgICB7CisgICAgICAgIC8qIHNldHVwIHRoZSByZWNlaXZlIGFjayBjb21tYW5kIHRvIGZvbGxvdyB0aGUgdHggY29tbWFuZCAqLworICAgICAgICBzVHJhbnNtaXRDbWQuY29uZGl0aW9uLnJ1bGUgPSBDT05EX1NUT1BfT05fRkFMU0U7CisgICAgICAgIHNUcmFuc21pdENtZC5wTmV4dE9wID0gKHJmY19yYWRpb09wX3QgKikgJnNUcmFuc21pdFJ4QWNrQ21kOworCisgICAgICAgIHNUcmFuc21pdFJ4QWNrQ21kID0gY1RyYW5zbWl0UnhBY2tDbWQ7CisgICAgICAgIHNUcmFuc21pdFJ4QWNrQ21kLnNlcU5vID0gYVBzZHVbSUVFRTgwMjE1NF9EU05fT0ZGU0VUXTsKKyAgICB9CisKKyAgICByZXR1cm4gKFJGQ0Rvb3JiZWxsU2VuZFRvKCh1aW50MzJfdCkmc0NzbWFjYUJhY2tvZmZDbWQpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIHNlbmRzIHRoZSByeCBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKgorICogU2VuZHMgdGhlIHByZS1idWlsdCByZWNlaXZlIGNvbW1hbmQgdG8gdGhlIHJhZGlvIGNvcmUuIFRoaXMgc2V0cyB1cCB0aGUKKyAqIHJhZGlvIHRvIHJlY2VpdmUgcGFja2V0cyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGluIHRoZSBnbG9iYWwgcnggY29tbWFuZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsdGVyIGFueSBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgcnggY29tbWFuZC4KKyAqIEl0IGlzIG9ubHkgY29uY2VybmVkIHdpdGggc2VuZGluZyB0aGUgY29tbWFuZCB0byB0aGUgcmFkaW8gY29yZS4gU2VlIEByZWYKKyAqIG90UGxhdFJhZGlvU2V0UGFuSWQgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRoZSByeCBzZXR0aW5ncyBhcmUgc2V0IGNoYW5nZWQuCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIKKyAqIEByZXR2YWwgQ01EU1RBX0RvbmUgdGhlIGNvbW1hbmQgY29tcGxldGVkIGNvcnJlY3RseQorICovCitzdGF0aWMgdWludF9mYXN0OF90IHJmQ29yZVNlbmRSZWNlaXZlQ21kKHZvaWQpCit7CisgICAgc1JlY2VpdmVDbWQuc3RhdHVzID0gSURMRTsKKyAgICByZXR1cm4gKFJGQ0Rvb3JiZWxsU2VuZFRvKCh1aW50MzJfdCkmc1JlY2VpdmVDbWQpICYgMHhGRik7Cit9CisKK3N0YXRpYyB1aW50X2Zhc3Q4X3QgcmZDb3JlU2VuZEVkU2NhbkNtZCh1aW50OF90IGFDaGFubmVsLCB1aW50MTZfdCBhRHVycmF0aW9uKQoreworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX0lFRUVfRURfU0NBTl90IGNFZFNjYW5DbWQgPQorICAgIHsKKyAgICAgICAgLmNvbW1hbmRObyAgICAgICAgICAgICAgICAgID0gQ01EX0lFRUVfRURfU0NBTiwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX05FVkVSLAorICAgICAgICB9LAorICAgICAgICAuY2NhT3B0ICAgICAgICAgICAgICAgICAgICAgPQorICAgICAgICB7CisgICAgICAgICAgICAuY2NhRW5FbmVyZ3kgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhRW5Db3JyICAgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhRW5TeW5jICAgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhQ29yck9wICAgICAgICAgICAgICA9IDEsCisgICAgICAgICAgICAuY2NhU3luY09wICAgICAgICAgICAgICA9IDAsCisgICAgICAgICAgICAuY2NhQ29yclRociAgICAgICAgICAgICA9IDMsCisgICAgICAgIH0sCisgICAgICAgIC5jY2FSc3NpVGhyICAgICAgICAgICAgICAgICA9IC05MCwKKyAgICAgICAgLmVuZFRyaWdnZXIgICAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX1JFTF9TVEFSVCwKKyAgICAgICAgICAgIC5wYXN0VHJpZyAgICAgICAgICAgICAgID0gMSwKKyAgICAgICAgfSwKKyAgICB9OworICAgIHNFZFNjYW5DbWQgPSBjRWRTY2FuQ21kOworCisgICAgc0VkU2NhbkNtZC5jaGFubmVsID0gYUNoYW5uZWw7CisKKyAgICAvKiBkdXJyYXRpb24gaXMgaW4gbXMgKi8KKyAgICBzRWRTY2FuQ21kLmVuZFRpbWUgPSBhRHVycmF0aW9uICogKENDMjY1MF9SQVRfVElDS1NfUEVSX1NFQyAvIDEwMDApOworCisgICAgcmV0dXJuIChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNFZFNjYW5DbWQpICYgMHhGRik7Cit9CisKKy8qKgorICogQGJyaWVmIGVuYWJsZXMgdGhlIGNwZTAgYW5kIGNwZTEgcmFkaW8gaW50ZXJydXB0cworICoKKyAqIEVuYWJsZXMgdGhlIEByZWYgSVJRX0xBU1RfQ09NTUFORF9ET05FIGFuZCBAcmVmIElSUV9MQVNUX0ZHX0NPTU1BTkRfRE9ORSB0bworICogYmUgaGFuZGxlZCBieSB0aGUgQHJlZiBSRkNDUEUwSW50SGFuZGxlciBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIHZvaWQgcmZDb3JlU2V0dXBJbnQodm9pZCkKK3sKKyAgICBib29sIGludGVycnVwdHNXZXJlRGlzYWJsZWQ7CisKKyAgICAvKiBXZSBhcmUgYWxyZWFkeSB0dXJuZWQgb24gYnkgdGhlIGNhbGxlciwgc28gdGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworICAgIGlmICghUFJDTVJmUmVhZHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnRlcnJ1cHRzV2VyZURpc2FibGVkID0gSW50TWFzdGVyRGlzYWJsZSgpOworCisgICAgLyogU2V0IGFsbCBpbnRlcnJ1cHQgY2hhbm5lbHMgdG8gQ1BFMCBjaGFubmVsLCBlcnJvciB0byBDUEUxICovCisgICAgSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJU0wpID0gSVJRX0lOVEVSTkFMX0VSUk9SOworICAgIEhXUkVHKFJGQ19EQkVMTF9OT05CVUZfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUVOKSA9IElSUV9MQVNUX0NPTU1BTkRfRE9ORSB8IElSUV9MQVNUX0ZHX0NPTU1BTkRfRE9ORTsKKworICAgIEludFJlZ2lzdGVyKElOVF9SRkNfQ1BFXzAsIFJGQ0NQRTBJbnRIYW5kbGVyKTsKKyAgICBJbnRSZWdpc3RlcihJTlRfUkZDX0NQRV8xLCBSRkNDUEUxSW50SGFuZGxlcik7CisgICAgSW50UGVuZENsZWFyKElOVF9SRkNfQ1BFXzApOworICAgIEludFBlbmRDbGVhcihJTlRfUkZDX0NQRV8xKTsKKyAgICBJbnRFbmFibGUoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50RW5hYmxlKElOVF9SRkNfQ1BFXzEpOworCisgICAgaWYgKCFpbnRlcnJ1cHRzV2VyZURpc2FibGVkKQorICAgIHsKKyAgICAgICAgSW50TWFzdGVyRW5hYmxlKCk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBkaXNhYmxlcyBhbmQgY2xlYXJzIHRoZSBjcGUwIGFuZCBjcGUxIHJhZGlvIGludGVycnVwdHMKKyAqLworc3RhdGljIHZvaWQgcmZDb3JlU3RvcEludCh2b2lkKQoreworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKworICAgIGludGVycnVwdHNXZXJlRGlzYWJsZWQgPSBJbnRNYXN0ZXJEaXNhYmxlKCk7CisKKyAgICAvKiBjbGVhciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisgICAgSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpID0gMHgwOworICAgIEhXUkVHKFJGQ19EQkVMTF9OT05CVUZfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUVOKSA9IDB4MDsKKworICAgIEludFVucmVnaXN0ZXIoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50VW5yZWdpc3RlcihJTlRfUkZDX0NQRV8xKTsKKyAgICBJbnRQZW5kQ2xlYXIoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50UGVuZENsZWFyKElOVF9SRkNfQ1BFXzEpOworICAgIEludERpc2FibGUoSU5UX1JGQ19DUEVfMCk7CisgICAgSW50RGlzYWJsZShJTlRfUkZDX0NQRV8xKTsKKworICAgIGlmICghaW50ZXJydXB0c1dlcmVEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgU2V0cyB0aGUgbW9kZSBmb3IgdGhlIHJhZGlvIGNvcmUgdG8gSUVFRSA4MDIuMTUuNAorICovCitzdGF0aWMgdm9pZCByZkNvcmVTZXRNb2RlU2VsZWN0KHZvaWQpCit7CisgICAgc3dpdGNoIChDaGlwSW5mb19HZXRDaGlwVHlwZSgpKQorICAgIHsKKyAgICBjYXNlIENISVBfVFlQRV9DQzI2NTA6CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19SRkNNT0RFU0VMKSA9IFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREU1OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hJUF9UWVBFX0NDMjYzMDoKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1JGQ01PREVTRUwpID0gUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogVGhpcyBjb2RlIG11c3QgYmUgcnVuIG9uIGEgdmFsaWQgY2MyNnh4IGNoaXAgKi8KKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiB0dXJucyBvbiB0aGUgcmFkaW8gY29yZQorICoKKyAqIFNldHMgdXAgdGhlIHBvd2VyIGFuZCByZXNvdXJjZXMgZm9yIHRoZSByYWRpbyBjb3JlLgorICogLSBzd2l0Y2hlcyB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgdG8gdGhlIHhvc2MgY3J5c3RhbAorICogLSBzZXRzIHRoZSBtb2RlIGZvciB0aGUgcmFkaW8gY29yZSB0byBJRUVFIDgwMi4xNS40CisgKiAtIGluaXRpYWxpemVzIHRoZSByeCBidWZmZXJzIGFuZCBjb21tYW5kCisgKiAtIHBvd2VycyBvbiB0aGUgcmFkaW8gY29yZSBwb3dlciBkb21haW4KKyAqIC0gZW5hYmxlcyB0aGUgcmFkaW8gY29yZSBwb3dlciBkb21haW4KKyAqIC0gc2V0cyB1cCB0aGUgaW50ZXJydXB0cworICogLSBzZW5kcyB0aGUgcGluZyBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlIHRvIG1ha2Ugc3VyZSBpdCBpcyBydW5uaW5nCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgcGluZyBjb21tYW5kIHRvIHRoZSByYWRpbyBjb3JlCisgKiBAcmV0dmFsIENNRFNUQV9Eb25lIHRoZSByYWRpbyBjb3JlIGlzIGFsaXZlIGFuZCByZXNwb25kaW5nCisgKi8KK3N0YXRpYyB1aW50X2Zhc3Q4X3QgcmZDb3JlUG93ZXJPbih2b2lkKQoreworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKworICAgIC8qIFJlcXVlc3QgdGhlIEhGIFhPU0MgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIEhGIGNsb2NrLiBOZWVkZWQgYmVmb3JlIHdlIGNhbgorICAgICAqIHVzZSB0aGUgRlMuIFRoaXMgd2lsbCBvbmx5IHJlcXVlc3QsIGl0IHdpbGwgX25vdF8gcGVyZm9ybSB0aGUgc3dpdGNoLgorICAgICAqLworICAgIGlmIChPU0NDbG9ja1NvdXJjZUdldChPU0NfU1JDX0NMS19IRikgIT0gT1NDX1hPU0NfSEYpCisgICAgeworICAgICAgICAvKiBSZXF1ZXN0IHRvIHN3aXRjaCB0byB0aGUgY3J5c3RhbCB0byBlbmFibGUgcmFkaW8gb3BlcmF0aW9uLiBJdCB0YWtlcyBhCisgICAgICAgICAqIHdoaWxlIGZvciB0aGUgWFRBTCB0byBiZSByZWFkeSBzbyBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgdGhlIGFjdHVhbAorICAgICAgICAgKiBzd2l0Y2gsIHdlIGRvIG90aGVyIHN0dWZmIHdoaWxlIHRoZSBYT1NDIGlzIGdldHRpbmcgcmVhZHkuCisgICAgICAgICAqLworICAgICAgICBPU0NDbG9ja1NvdXJjZVNldChPU0NfU1JDX0NMS19NRiB8IE9TQ19TUkNfQ0xLX0hGLCBPU0NfWE9TQ19IRik7CisgICAgfQorCisgICAgcmZDb3JlU2V0TW9kZVNlbGVjdCgpOworCisgICAgLyogU2V0IG9mIFJGIENvcmUgZGF0YSBxdWV1ZS4gQ2lyY3VsYXIgYnVmZmVyLCBubyBsYXN0IGVudHJ5ICovCisgICAgc1J4RGF0YVF1ZXVlLnBDdXJyRW50cnkgPSBzUnhCdWYwOworICAgIHNSeERhdGFRdWV1ZS5wTGFzdEVudHJ5ID0gTlVMTDsKKworICAgIHJmQ29yZUluaXRCdWZzKCk7CisKKyAgICAvKgorICAgICAqIFRyaWdnZXIgYSBzd2l0Y2ggdG8gdGhlIFhPU0MsIHNvIHRoYXQgd2UgY2FuIHN1YnNlcXVlbnRseSB1c2UgdGhlIFJGIEZTCisgICAgICogVGhpcyB3aWxsIGJsb2NrIHVudGlsIHRoZSBYT1NDIGlzIGFjdHVhbGx5IHJlYWR5LCBidXQgZ2l2ZSBob3cgd2UKKyAgICAgKiByZXF1ZXN0ZWQgaXQgZWFybHkgb24sIHRoaXMgd29uJ3QgYmUgdG9vIGxvbmcgYSB3YWl0LgorICAgICAqIFRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBSQVQuCisgICAgICovCisgICAgaWYgKE9TQ0Nsb2NrU291cmNlR2V0KE9TQ19TUkNfQ0xLX0hGKSAhPSBPU0NfWE9TQ19IRikKKyAgICB7CisgICAgICAgIC8qIFN3aXRjaCB0aGUgSEYgY2xvY2sgc291cmNlIChjYzI2eHh3YXJlIGV4ZWN1dGVzIHRoaXMgZnJvbSBST00pICovCisgICAgICAgIE9TQ0hmU291cmNlU3dpdGNoKCk7CisgICAgfQorCisgICAgaW50ZXJydXB0c1dlcmVEaXNhYmxlZCA9IEludE1hc3RlckRpc2FibGUoKTsKKworICAgIC8qIEVuYWJsZSBSRiBDb3JlIHBvd2VyIGRvbWFpbiAqLworICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1JGQ09SRSk7CisKKyAgICB3aGlsZSAoUFJDTVBvd2VyRG9tYWluU3RhdHVzKFBSQ01fRE9NQUlOX1JGQ09SRSkgIT0gUFJDTV9ET01BSU5fUE9XRVJfT04pOworCisgICAgUFJDTURvbWFpbkVuYWJsZShQUkNNX0RPTUFJTl9SRkNPUkUpOworICAgIFBSQ01Mb2FkU2V0KCk7CisKKyAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgcmZDb3JlU2V0dXBJbnQoKTsKKworICAgIGlmICghaW50ZXJydXB0c1dlcmVEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgIH0KKworICAgIC8qIExldCBDUEUgYm9vdCAqLworICAgIEhXUkVHKFJGQ19QV1JfTk9OQlVGX0JBU0UgKyBSRkNfUFdSX09fUFdNQ0xLRU4pID0gKFJGQ19QV1JfUFdNQ0xLRU5fUkZDX00gfCBSRkNfUFdSX1BXTUNMS0VOX0NQRV9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX0NQRVJBTV9NKTsKKworICAgIC8qIFNlbmQgcGluZyAodG8gdmVyaWZ5IFJGQ29yZSBpcyByZWFkeSBhbmQgYWxpdmUpICovCisgICAgcmV0dXJuIHJmQ29yZUV4ZWN1dGVQaW5nQ21kKCk7Cit9CisKKy8qKgorICogQGJyaWVmIHR1cm5zIG9mZiB0aGUgcmFkaW8gY29yZQorICoKKyAqIFN3aXRjaGVzIG9mZiB0aGUgcG93ZXIgYW5kIHJlc291cmNlcyBmb3IgdGhlIHJhZGlvIGNvcmUuCisgKiAtIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHRzCisgKiAtIGRpc2FibGVzIHRoZSByYWRpbyBjb3JlIHBvd2VyIGRvbWFpbgorICogLSBwb3dlcnMgb2ZmIHRoZSByYWRpbyBjb3JlIHBvd2VyIGRvbWFpbgorICogLSBzd2l0Y2hlcyB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgdG8gdGhlIHJjb3NjIHRvIHNhdmUgcG93ZXIKKyAqLworc3RhdGljIHZvaWQgcmZDb3JlUG93ZXJPZmYodm9pZCkKK3sKKyAgICByZkNvcmVTdG9wSW50KCk7CisKKyAgICBQUkNNRG9tYWluRGlzYWJsZShQUkNNX0RPTUFJTl9SRkNPUkUpOworICAgIFBSQ01Mb2FkU2V0KCk7CisKKyAgICB3aGlsZSAoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgUFJDTVBvd2VyRG9tYWluT2ZmKFBSQ01fRE9NQUlOX1JGQ09SRSk7CisKKyAgICB3aGlsZSAoUFJDTVBvd2VyRG9tYWluU3RhdHVzKFBSQ01fRE9NQUlOX1JGQ09SRSkgIT0gUFJDTV9ET01BSU5fUE9XRVJfT0ZGKTsKKworICAgIGlmIChPU0NDbG9ja1NvdXJjZUdldChPU0NfU1JDX0NMS19IRikgIT0gT1NDX1JDT1NDX0hGKQorICAgIHsKKyAgICAgICAgLyogUmVxdWVzdCB0byBzd2l0Y2ggdG8gdGhlIFJDIG9zYyBmb3IgbG93IHBvd2VyIG1vZGUuICovCisgICAgICAgIE9TQ0Nsb2NrU291cmNlU2V0KE9TQ19TUkNfQ0xLX01GIHwgT1NDX1NSQ19DTEtfSEYsIE9TQ19SQ09TQ19IRik7CisgICAgICAgIC8qIFN3aXRjaCB0aGUgSEYgY2xvY2sgc291cmNlIChjYzI2eHh3YXJlIGV4ZWN1dGVzIHRoaXMgZnJvbSBST00pICovCisgICAgICAgIE9TQ0hmU291cmNlU3dpdGNoKCk7CisgICAgfQorfQorCisvKioKKyAqIEBicmllZiBzZW5kcyB0aGUgc2V0dXAgY29tbWFuZCBzdHJpbmcgdG8gdGhlIHJhZGlvIGNvcmUKKyAqCisgKiBFbmFibGVzIHRoZSBjbG9jayBsaW5lIGZyb20gdGhlIFJUQyB0byB0aGUgUkYgY29yZSBSQVQuIEVuYWJsZXMgdGhlIFJBVAorICogdGltZXIgYW5kIHNldHMgdXAgdGhlIHJhZGlvIGluIElFRUUgbW9kZS4KKyAqCisgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIHRoZSBjb21tYW5kIHN0YXR1cyByZWdpc3RlcgorICogQHJldHZhbCBDTURTVEFfRG9uZSB0aGUgY29tbWFuZCB3YXMgcmVjZWl2ZWQKKyAqLworc3RhdGljIHVpbnRfZmFzdDE2X3QgcmZDb3JlU2VuZEVuYWJsZUNtZCh2b2lkKQoreworICAgIHVpbnQ4X3QgcmV0OworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9TWU5DX1NUQVJUX1JBVF90IGNTdGFydFJhdENtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfU1lOQ19TVEFSVF9SQVQsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9TVE9QX09OX0ZBTFNFLAorICAgICAgICB9LAorICAgIH07CisgICAgc3RhdGljIGNvbnN0IHJmY19DTURfUkFESU9fU0VUVVBfdCBjUmFkaW9TZXR1cENtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfUkFESU9fU0VUVVAsCisgICAgICAgIC5zdGFydFRyaWdnZXIgICAgICAgICAgICAgICA9CisgICAgICAgIHsKKyAgICAgICAgICAgIC50cmlnZ2VyVHlwZSAgICAgICAgICAgID0gVFJJR19OT1csCisgICAgICAgIH0sCisgICAgICAgIC5jb25kaXRpb24gICAgICAgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgIC5ydWxlICAgICAgICAgICAgICAgICAgID0gQ09ORF9ORVZFUiwKKyAgICAgICAgfSwKKyAgICAgICAgLm1vZGUgICAgICAgICAgICAgICAgICAgICAgID0gMSwgLy8gSUVFRSA4MDIuMTUuNCBtb2RlCisgICAgfTsKKyAgICAvKiB0dXJuIG9uIHRoZSBjbG9jayBsaW5lIHRvIHRoZSByYWRpbyBjb3JlICovCisgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwsIEFPTl9SVENfQ1RMX1JUQ19VUERfRU5fQklUTikgPSAxOworCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgcmF0IHN0YXJ0IGNvbW1hbmQgKi8KKyAgICBzU3RhcnRSYXRDbWQgICAgICAgICA9IGNTdGFydFJhdENtZDsKKyAgICBzU3RhcnRSYXRDbWQucE5leHRPcCA9IChyZmNfcmFkaW9PcF90ICopICZzUmFkaW9TZXR1cENtZDsKKyAgICBzU3RhcnRSYXRDbWQucmF0MCAgICA9IHNSYXRPZmZzZXQ7CisKKyAgICAvKiBpbml0aWFsaXplIHJhZGlvIHNldHVwIGNvbW1hbmQgKi8KKyAgICBzUmFkaW9TZXR1cENtZCAgICAgICAgICAgICAgPSBjUmFkaW9TZXR1cENtZDsKKyAgICAvKiBpbml0YWxseSBzZXQgdGhlIHJhZGlvIHR4IHBvd2VyIHRvIHRoZSBtYXggKi8KKyAgICBzUmFkaW9TZXR1cENtZC50eFBvd2VyICAgICAgPSBzQ3VycmVudE91dHB1dFBvd2VyLT52YWx1ZTsKKyAgICBzUmFkaW9TZXR1cENtZC5wUmVnT3ZlcnJpZGUgPSBzSUVFRU92ZXJyaWRlczsKKworICAgIGludGVycnVwdHNXZXJlRGlzYWJsZWQgPSBJbnRNYXN0ZXJEaXNhYmxlKCk7CisKKyAgICBpZiAoKHJldCA9IChSRkNEb29yYmVsbFNlbmRUbygodWludDMyX3QpJnNTdGFydFJhdENtZCkgJiAweEZGKSkgIT0gQ01EU1RBX0RvbmUpCisgICAgeworICAgICAgICBpZiAoIWludGVycnVwdHNXZXJlRGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvKiBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBDTTAgdG8gc3RvcCBleGVjdXRpbmcgKi8KKyAgICB3aGlsZSAoKEhXUkVHKFJGQ19EQkVMTF9OT05CVUZfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUZHKSAmIElSUV9MQVNUX0NPTU1BTkRfRE9ORSkgPT0gMHgwMCk7CisKKyAgICBpZiAoIWludGVycnVwdHNXZXJlRGlzYWJsZWQpCisgICAgeworICAgICAgICBJbnRNYXN0ZXJFbmFibGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc1JhZGlvU2V0dXBDbWQuc3RhdHVzOworfQorCisvKioKKyAqIEBicmllZiBzZW5kcyB0aGUgc2h1dGRvd24gY29tbWFuZCBzdHJpbmcgdG8gdGhlIHJhZGlvIGNvcmUKKyAqCisgKiBQb3dlcnMgZG93biB0aGUgZnJlcXVlbmN5IHN5bnRoZXNpemVyIGFuZCBzdG9wcyB0aGUgUkFULgorICoKKyAqIEBub3RlIHN5bmNocm9ub3VzbHkgd2FpdHMgdW50aWwgdGhlIGNvbW1hbmQgc3RyaW5nIGNvbXBsZXRlcy4KKyAqCisgKiBAcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIFJBVCBzdG9wIGNvbW1hbmQKKyAqIEByZXR2YWwgRE9ORV9PSyB0aGUgY29tbWFuZCBzdHJpbmcgZXhlY3V0ZWQgcHJvcGVybHkKKyAqLworc3RhdGljIHVpbnRfZmFzdDE2X3QgcmZDb3JlU2VuZERpc2FibGVDbWQodm9pZCkKK3sKKyAgICB1aW50OF90IGRvb3JiZWxsUmV0OworICAgIGJvb2wgaW50ZXJydXB0c1dlcmVEaXNhYmxlZDsKKyAgICBzdGF0aWMgY29uc3QgcmZjX0NNRF9GU19QT1dFUkRPV05fdCBjRnNQb3dlcmRvd25DbWQgPQorICAgIHsKKyAgICAgICAgLmNvbW1hbmRObyAgICAgICAgICAgICAgICAgID0gQ01EX0ZTX1BPV0VSRE9XTiwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX0FMV0FZUywKKyAgICAgICAgfSwKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCByZmNfQ01EX1NZTkNfU1RPUF9SQVRfdCBjU3RvcFJhdENtZCA9CisgICAgeworICAgICAgICAuY29tbWFuZE5vICAgICAgICAgICAgICAgICAgPSBDTURfU1lOQ19TVE9QX1JBVCwKKyAgICAgICAgLnN0YXJ0VHJpZ2dlciAgICAgICAgICAgICAgID0KKyAgICAgICAgeworICAgICAgICAgICAgLnRyaWdnZXJUeXBlICAgICAgICAgICAgPSBUUklHX05PVywKKyAgICAgICAgfSwKKyAgICAgICAgLmNvbmRpdGlvbiAgICAgICAgICAgICAgICAgID0geworICAgICAgICAgICAgLnJ1bGUgICAgICAgICAgICAgICAgICAgPSBDT05EX05FVkVSLAorICAgICAgICB9LAorICAgIH07CisKKyAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NUTCwgQU9OX1JUQ19DVExfUlRDX1VQRF9FTl9CSVROKSA9IDE7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBjb21tYW5kIHRvIHBvd2VyIGRvd24gdGhlIGZyZXF1ZW5jeSBzeW50aCAqLworICAgIHNGc1Bvd2VyZG93bkNtZCA9IGNGc1Bvd2VyZG93bkNtZDsKKyAgICBzRnNQb3dlcmRvd25DbWQucE5leHRPcCA9IChyZmNfcmFkaW9PcF90ICopJnNTdG9wUmF0Q21kOworCisgICAgc1N0b3BSYXRDbWQgPSBjU3RvcFJhdENtZDsKKworICAgIGludGVycnVwdHNXZXJlRGlzYWJsZWQgPSBJbnRNYXN0ZXJEaXNhYmxlKCk7CisKKyAgICBIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSB+SVJRX0xBU1RfQ09NTUFORF9ET05FOworCisgICAgZG9vcmJlbGxSZXQgPSAoUkZDRG9vcmJlbGxTZW5kVG8oKHVpbnQzMl90KSZzRnNQb3dlcmRvd25DbWQpICYgMHhGRik7CisKKyAgICBpZiAoZG9vcmJlbGxSZXQgIT0gQ01EU1RBX0RvbmUpCisgICAgeworICAgICAgICBpZiAoIWludGVycnVwdHNXZXJlRGlzYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludE1hc3RlckVuYWJsZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRvb3JiZWxsUmV0OworICAgIH0KKworICAgIC8qIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgdGhlIENNMCB0byBzdG9wICovCisgICAgd2hpbGUgKChIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgJiBJUlFfTEFTVF9DT01NQU5EX0RPTkUpID09IDB4MDApOworCisgICAgaWYgKCFpbnRlcnJ1cHRzV2VyZURpc2FibGVkKQorICAgIHsKKyAgICAgICAgSW50TWFzdGVyRW5hYmxlKCk7CisgICAgfQorCisgICAgaWYgKHNTdG9wUmF0Q21kLnN0YXR1cyA9PSBET05FX09LKQorICAgIHsKKyAgICAgICAgc1JhdE9mZnNldCA9IHNTdG9wUmF0Q21kLnJhdDA7CisgICAgfQorCisgICAgcmV0dXJuIHNTdG9wUmF0Q21kLnN0YXR1czsKK30KKworLyoqCisgKiBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcgorICovCit2b2lkIFJGQ0NQRTFJbnRIYW5kbGVyKHZvaWQpCit7CisgICAgLyogQ2xlYXIgSU5URVJOQUxfRVJST1IgaW50ZXJydXB0IGZsYWcgKi8KKyAgICBIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSAweDdGRkZGRkZGOworfQorCisvKioKKyAqIGNvbW1hbmQgZG9uZSBoYW5kbGVyCisgKi8KK3ZvaWQgUkZDQ1BFMEludEhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpICYgSVJRX0xBU1RfQ09NTUFORF9ET05FKQorICAgIHsKKyAgICAgICAgSFdSRUcoUkZDX0RCRUxMX05PTkJVRl9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpID0gfklSUV9MQVNUX0NPTU1BTkRfRE9ORTsKKworICAgICAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUgJiYKKyAgICAgICAgICAgIHNSZWNlaXZlQ21kLnN0YXR1cyAhPSBBQ1RJVkUgJiYKKyAgICAgICAgICAgIHNSZWNlaXZlQ21kLnN0YXR1cyAhPSBJRUVFX1NVU1BFTkRFRCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogdGhlIHJ4IGNvbW1hbmQgd2FzIHByb2JhYmx5IGFib3J0ZWQgdG8gY2hhbmdlIHRoZSBjaGFubmVsICovCisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVTbGVlcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlRWRTY2FuKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVTbGVlcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgJiBJUlFfTEFTVF9GR19DT01NQU5EX0RPTkUpCisgICAgeworICAgICAgICBIV1JFRyhSRkNfREJFTExfTk9OQlVGX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlGRykgPSB+SVJRX0xBU1RfRkdfQ09NTUFORF9ET05FOworCisgICAgICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlVHJhbnNtaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzVHJhbnNtaXRDbWQucFBheWxvYWRbMF0gJiBJRUVFODAyMTU0X0FDS19SRVFVRVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdlIGFyZSBsb29raW5nIGZvciBhbiBhY2sgKi8KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNUcmFuc21pdFJ4QWNrQ21kLnN0YXR1cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0RPTkVfVElNRU9VVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNUcmFuc21pdFJldHJ5Q291bnQgPCBJRUVFODAyMTU0X01BQ19NQVhfRlJBTUVTX1JFVFJJRVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlLXN1Ym1pdCB0aGUgdHggY29tbWFuZCBjaGFpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0UmV0cnlDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgUkZDRG9vcmJlbGxTZW5kVG8oKHVpbnQzMl90KSZzQ3NtYWNhQmFja29mZkNtZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PX0FDSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25hbCBwb2xsaW5nIGZ1bmN0aW9uIHdlIGFyZSBkb25lIHRyYW5zbWl0dGluZywgd2UgZmFpbGVkIHRvIHNlbmQgdGhlIHBhY2tldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlVHJhbnNtaXRDb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0RPTkVfQUNLOgorICAgICAgICAgICAgICAgICAgICBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgLyogc2lnbmFsIHBvbGxpbmcgZnVuY3Rpb24gd2UgYXJlIGRvbmUgdHJhbnNtaXR0aW5nICovCisgICAgICAgICAgICAgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0Q29tcGxldGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0RPTkVfQUNLUEVORDoKKyAgICAgICAgICAgICAgICAgICAgc1JlY2VpdmVkQWNrUGVuZGluZ0JpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgLyogc2lnbmFsIHBvbGxpbmcgZnVuY3Rpb24gd2UgYXJlIGRvbmUgdHJhbnNtaXR0aW5nICovCisgICAgICAgICAgICAgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0Q29tcGxldGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQ7CisgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25hbCBwb2xsaW5nIGZ1bmN0aW9uIHdlIGFyZSBkb25lIHRyYW5zbWl0dGluZyAqLworICAgICAgICAgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVUcmFuc21pdENvbXBsZXRlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhlIFRYIGNvbW1hbmQgd2FzIGVpdGhlciBzdG9wcGVkIG9yIHdlIGFyZSBub3QgbG9va2luZyBmb3IKKyAgICAgICAgICAgICAgICAgKiBhbiBhY2sgKi8KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNUcmFuc21pdENtZC5zdGF0dXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgSUVFRV9ET05FX09LOgorICAgICAgICAgICAgICAgICAgICBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIElFRUVfRE9ORV9USU1FT1VUOgorICAgICAgICAgICAgICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRUVFX0VSUk9SX05PX1NFVFVQOgorICAgICAgICAgICAgICAgIGNhc2UgSUVFRV9FUlJPUl9OT19GUzoKKyAgICAgICAgICAgICAgICBjYXNlIElFRUVfRVJST1JfU1lOVEhfUFJPRzoKKyAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSUVFRV9FUlJPUl9UWFVORjoKKyAgICAgICAgICAgICAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfR0VORVJJQzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogc2lnbmFsIHBvbGxpbmcgZnVuY3Rpb24gd2UgYXJlIGRvbmUgdHJhbnNtaXR0aW5nICovCisgICAgICAgICAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlVHJhbnNtaXRDb21wbGV0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtLWNjMjY1MC5oCisgKi8KK3ZvaWQgY2MyNjUwUmFkaW9Jbml0KHZvaWQpCit7CisgICAgLyogUG9wdWxhdGUgdGhlIFJYIHBhcmFtZXRlcnMgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyAqLworICAgIHJmQ29yZUluaXRSZWNlaXZlUGFyYW1zKCk7CisKKyAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVEaXNhYmxlZDsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZURpc2FibGVkKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZVBvd2VyT24oKSA9PSBDTURTVEFfRG9uZSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlU2VuZEVuYWJsZUNtZCgpID09IERPTkVfT0ssIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlU2xlZXA7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX0ZBSUxFRCkKKyAgICB7CisgICAgICAgIHJmQ29yZVBvd2VyT2ZmKCk7CisgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZURpc2FibGVkOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAoc1N0YXRlICE9IGNjMjY1MF9zdGF0ZURpc2FibGVkKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0Rpc2FibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9CVVNZOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlRGlzYWJsZWQpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorICAgIGVsc2UgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIHJmQ29yZVNlbmREaXNhYmxlQ21kKCk7CisgICAgICAgIC8qIHdlIGRvbid0IHdhbnQgdG8gZmFpbCBpZiB0aGlzIGNvbW1hbmQgc3RyaW5nIGRvZXNuJ3Qgd29yaywganVzdCB0dXJuCisgICAgICAgICAqIG9mZiB0aGUgd2hvbGUgY29yZQorICAgICAgICAgKi8KKyAgICAgICAgcmZDb3JlUG93ZXJPZmYoKTsKKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlRGlzYWJsZWQ7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZUVkU2NhbjsKKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZVNlbmRFZFNjYW5DbWQoYVNjYW5DaGFubmVsLCBhU2NhbkR1cmF0aW9uKSA9PSBDTURTVEFfRG9uZSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLwordm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBvdXRwdXRfY29uZmlnX3QgY29uc3QgKnBvd2VyQ2ZnID0gJihyZ091dHB1dFBvd2VyWzBdKTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBmb3IgKGkgPSAxOyBpIDwgT1VUUFVUX0NPTkZJR19DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHJnT3V0cHV0UG93ZXJbaV0uZGJtID49IGFQb3dlcikKKyAgICAgICAgeworICAgICAgICAgICAgcG93ZXJDZmcgPSAmKHJnT3V0cHV0UG93ZXJbaV0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzQ3VycmVudE91dHB1dFBvd2VyID0gcG93ZXJDZmc7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9SZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfQlVTWTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVNsZWVwKQorICAgIHsKKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKworICAgICAgICAvKiBpbml0aWFsaXplIHRoZSByZWNlaXZlIGNvbW1hbmQKKyAgICAgICAgICogWFhYOiBubyBtZW1zZXQgaGVyZSBiZWNhdXNlIHdlIGFzc3VtZSBpbml0IGhhcyBiZWVuIGNhbGxlZCBhbmQgd2UKKyAgICAgICAgICogICAgICBtYXkgaGF2ZSBjaGFuZ2VkIHNvbWUgdmFsdWVzIGluIHRoZSByeCBjb21tYW5kCisgICAgICAgICAqLworICAgICAgICBzUmVjZWl2ZUNtZC5jaGFubmVsID0gYUNoYW5uZWw7CisgICAgICAgIG90RVhQRUNUX0FDVElPTihyZkNvcmVTZW5kUmVjZWl2ZUNtZCgpID09IENNRFNUQV9Eb25lLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUpCisgICAgeworICAgICAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSAmJiBzUmVjZWl2ZUNtZC5jaGFubmVsID09IGFDaGFubmVsKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBhcmUgYWxyZWFkeSBydW5uaW5nIG9uIHRoZSByaWdodCBjaGFubmVsICovCisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVSZWNlaXZlOworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgaGF2ZSBlaXRoZXIgbm90IGZhbGxlbiBiYWNrIGludG8gb3VyIHJlY2VpdmUgY29tbWFuZCBvcgorICAgICAgICAgICAgICogd2UgYXJlIHJ1bm5pbmcgb24gdGhlIHdyb25nIGNoYW5uZWwuIEVpdGhlciB3YXkgYXNzdW1lIHRoZQorICAgICAgICAgICAgICogY2FsbGVyIGNvcnJlY3RseSBjYWxsZWQgdXMgYW5kIGFib3J0IGFsbCBydW5uaW5nIGNvbW1hbmRzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgPT0gQ01EU1RBX0RvbmUsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgICAgICAgICAgLyogYW55IGZyYW1lcyBpbiB0aGUgcXVldWUgd2lsbCBiZSBmb3IgdGhlIG9sZCBjaGFubmVsICovCisgICAgICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlQ2xlYXJSZWNlaXZlUXVldWUoJnNSeERhdGFRdWV1ZSkgPT0gQ01EU1RBX0RvbmUsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgICAgICAgICAgc1JlY2VpdmVDbWQuY2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZVNlbmRSZWNlaXZlQ21kKCkgPT0gQ01EU1RBX0RvbmUsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgICAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVTbGVlcCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUpCisgICAgeworICAgICAgICBpZiAocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgIT0gQ01EU1RBX0RvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIHNTdGF0ZSA9IGNjMjY1MF9zdGF0ZVNsZWVwOworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gJnNUcmFuc21pdEZyYW1lOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfQlVTWTsKKworICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlUmVjZWl2ZSkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIHNldHVwIHRoZSBmcmVxdWVuY3kgc3ludGhlc2l6ZXIuCisgICAgICAgICAqIEFuZCB3ZSBhcmUgc3VwcG9zZWQgdG8gZmFsbCBpbnRvIHRoZSByZWNlaXZlIHN0YXRlIGFmdGVyd2FyZHMuCisgICAgICAgICAqLworICAgICAgICBlcnJvciA9IG90UGxhdFJhZGlvUmVjZWl2ZShhSW5zdGFuY2UsIGFGcmFtZS0+bUNoYW5uZWwpOworCisgICAgICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVUcmFuc21pdDsKKworICAgICAgICAgICAgLyogcmVtb3ZpbmcgMiBieXRlcyBvZiBDUkMgcGxhY2Vob2xkZXIgYmVjYXVzZSB3ZSBnZW5lcmF0ZSB0aGF0IGluIGhhcmR3YXJlICovCisgICAgICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlU2VuZFRyYW5zbWl0Q21kKGFGcmFtZS0+bVBzZHUsIGFGcmFtZS0+bUxlbmd0aCAtIDIpID09IENNRFNUQV9Eb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBzVHJhbnNtaXRFcnJvciA9IGVycm9yOworICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBzUmZTdGF0cy5tYXhSc3NpOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVCB8IE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU4gfCBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVM7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICByZkNvcmVNb2RpZnlSeEF1dG9QZW5kKGFFbmFibGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBpZiB3ZSBhcmUgcHJvbWlzY3VvdXMsIHRoZW4gZnJhbWUgZmlsdGVyaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworICAgICAgICBzUmVjZWl2ZUNtZC5mcmFtZUZpbHRPcHQuYXV0b1BlbmRFbiA9IGFFbmFibGUgPyAxIDogMDsKKyAgICB9Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB1aW50OF90IGlkeCA9IHJmQ29yZUZpbmRTaG9ydFNyY01hdGNoSWR4KGFTaG9ydEFkZHJlc3MpOworCisgICAgaWYgKGlkeCA9PSBDQzI2NTBfU1JDX01BVENIX05PTkUpCisgICAgeworICAgICAgICAvKiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QgYWxyZWFkeSwgYWRkIGl0ICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTigoaWR4ID0gcmZDb3JlRmluZEVtcHR5U2hvcnRTcmNNYXRjaElkeCgpKSAhPSBDQzI2NTBfU1JDX01BVENIX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICBzU3JjTWF0Y2hTaG9ydERhdGEuZXh0QWRkckVudFtpZHhdLnNob3J0QWRkciA9IGFTaG9ydEFkZHJlc3M7CisgICAgICAgIHNTcmNNYXRjaFNob3J0RGF0YS5leHRBZGRyRW50W2lkeF0ucGFuSWQgPSBzUmVjZWl2ZUNtZC5sb2NhbFBhbklEOworICAgIH0KKworICAgIGlmIChzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gQUNUSVZFIHx8IHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBJRUVFX1NVU1BFTkRFRCkKKyAgICB7CisgICAgICAgIC8qIHdlIGhhdmUgYSBydW5uaW5nIG9yIGJhY2tncm91bmRlZCByeCBjb21tYW5kICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTihyZkNvcmVNb2RpZnlTb3VyY2VNYXRjaEVudHJ5KGlkeCwgU0hPUlRfQUREUkVTUywgdHJ1ZSkgPT0gQ01EU1RBX0RvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHdlIGFyZSBub3QgcnVubmluZywgc28gd2UgbXVzdCB1cGRhdGUgdGhlIHZhbHVlcyBvdXJzZWx2ZXMgKi8KKyAgICAgICAgc1NyY01hdGNoU2hvcnREYXRhLnNyY1BlbmRFbltpZHggLyAzMl0gfD0gKDEgPDwgKGlkeCAlIDMyKSk7CisgICAgICAgIHNTcmNNYXRjaFNob3J0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSB8PSAoMSA8PCAoaWR4ICUgMzIpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB1aW50OF90IGlkeDsKKyAgICBvdEVYUEVDVF9BQ1RJT04oKGlkeCA9IHJmQ29yZUZpbmRTaG9ydFNyY01hdGNoSWR4KGFTaG9ydEFkZHJlc3MpKSAhPSBDQzI2NTBfU1JDX01BVENIX05PTkUsCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICBvdEVYUEVDVF9BQ1RJT04ocmZDb3JlTW9kaWZ5U291cmNlTWF0Y2hFbnRyeShpZHgsIFNIT1JUX0FERFJFU1MsIGZhbHNlKSA9PSBDTURTVEFfRG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogd2UgYXJlIG5vdCBydW5uaW5nLCBzbyB3ZSBtdXN0IHVwZGF0ZSB0aGUgdmFsdWVzIG91cnNlbHZlcyAqLworICAgICAgICBzU3JjTWF0Y2hTaG9ydERhdGEuc3JjUGVuZEVuW2lkeCAvIDMyXSAmPSB+KDEgPDwgKGlkeCAlIDMyKSk7CisgICAgICAgIHNTcmNNYXRjaFNob3J0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSAmPSB+KDEgPDwgKGlkeCAlIDMyKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDhfdCBpZHggPSByZkNvcmVGaW5kRXh0U3JjTWF0Y2hJZHgoKHVpbnQ2NF90ICopYUV4dEFkZHJlc3MpOworCisgICAgaWYgKGlkeCA9PSBDQzI2NTBfU1JDX01BVENIX05PTkUpCisgICAgeworICAgICAgICAvKiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QgYWxyZWFkeSwgYWRkIGl0ICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTigoaWR4ID0gcmZDb3JlRmluZEVtcHR5RXh0U3JjTWF0Y2hJZHgoKSkgIT0gQ0MyNjUwX1NSQ19NQVRDSF9OT05FLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICBzU3JjTWF0Y2hFeHREYXRhLmV4dEFkZHJFbnRbaWR4XSA9ICooKHVpbnQ2NF90ICopYUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIGlmIChzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gQUNUSVZFIHx8IHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBJRUVFX1NVU1BFTkRFRCkKKyAgICB7CisgICAgICAgIC8qIHdlIGhhdmUgYSBydW5uaW5nIG9yIGJhY2tncm91bmRlZCByeCBjb21tYW5kICovCisgICAgICAgIG90RVhQRUNUX0FDVElPTihyZkNvcmVNb2RpZnlTb3VyY2VNYXRjaEVudHJ5KGlkeCwgRVhUX0FERFJFU1MsIHRydWUpID09IENNRFNUQV9Eb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIG11c3QgdXBkYXRlIHRoZSB2YWx1ZXMgb3Vyc2VsdmVzICovCisgICAgICAgIHNTcmNNYXRjaEV4dERhdGEuc3JjUGVuZEVuW2lkeCAvIDMyXSB8PSAoMSA8PCAoaWR4ICUgMzIpKTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSB8PSAoMSA8PCAoaWR4ICUgMzIpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQ4X3QgaWR4OworICAgIG90RVhQRUNUX0FDVElPTigoaWR4ID0gcmZDb3JlRmluZEV4dFNyY01hdGNoSWR4KCh1aW50NjRfdCAqKWFFeHRBZGRyZXNzKSkgIT0gQ0MyNjUwX1NSQ19NQVRDSF9OT05FLAorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgaWYgKHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBBQ1RJVkUgfHwgc1JlY2VpdmVDbWQuc3RhdHVzID09IElFRUVfU1VTUEVOREVEKQorICAgIHsKKyAgICAgICAgLyogd2UgaGF2ZSBhIHJ1bm5pbmcgb3IgYmFja2dyb3VuZGVkIHJ4IGNvbW1hbmQgKi8KKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJmQ29yZU1vZGlmeVNvdXJjZU1hdGNoRW50cnkoaWR4LCBFWFRfQUREUkVTUywgZmFsc2UpID09IENNRFNUQV9Eb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIG11c3QgdXBkYXRlIHRoZSB2YWx1ZXMgb3Vyc2VsdmVzICovCisgICAgICAgIHNTcmNNYXRjaEV4dERhdGEuc3JjUGVuZEVuW2lkeF0gPSAwdTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNNYXRjaEVuW2lkeF0gPSAwdTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNQZW5kRW5baWR4IC8gMzJdICY9IH4oMSA8PCAoaWR4ICUgMzIpKTsKKyAgICAgICAgc1NyY01hdGNoRXh0RGF0YS5zcmNNYXRjaEVuW2lkeCAvIDMyXSAmPSB+KDEgPDwgKGlkeCAlIDMyKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQ0MyNjUwX1NIT1JUQUREX1NSQ19NQVRDSF9OVU07IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgaGF2ZSBhIHJ1bm5pbmcgb3IgYmFja2dyb3VuZGVkIHJ4IGNvbW1hbmQgKi8KKyAgICAgICAgICAgIG90RVhQRUNUKHJmQ29yZU1vZGlmeVNvdXJjZU1hdGNoRW50cnkoaSwgU0hPUlRfQUREUkVTUywgZmFsc2UpID09IENNRFNUQV9Eb25lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIGNhbiBlcmFzZSB0aGVtIG91cnNlbHZlcyAqLworICAgICAgICBtZW1zZXQoKHZvaWQgKikmc1NyY01hdGNoU2hvcnREYXRhLCAwLCBzaXplb2Yoc1NyY01hdGNoU2hvcnREYXRhKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworLyoqCisqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNSZWNlaXZlQ21kLnN0YXR1cyA9PSBBQ1RJVkUgfHwgc1JlY2VpdmVDbWQuc3RhdHVzID09IElFRUVfU1VTUEVOREVEKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IENDMjY1MF9FWFRBRERfU1JDX01BVENIX05VTTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICAgICAgb3RFWFBFQ1QocmZDb3JlTW9kaWZ5U291cmNlTWF0Y2hFbnRyeShpLCBFWFRfQUREUkVTUywgZmFsc2UpID09IENNRFNUQV9Eb25lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiB3ZSBhcmUgbm90IHJ1bm5pbmcsIHNvIHdlIGNhbiBlcmFzZSB0aGVtIG91cnNlbHZlcyAqLworICAgICAgICBtZW1zZXQoKHZvaWQgKikmc1NyY01hdGNoRXh0RGF0YSwgMCwgc2l6ZW9mKHNTcmNNYXRjaEV4dERhdGEpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAvKiB3ZSBhcmUgcHJvbWlzY3VvdXMgaWYgd2UgYXJlIG5vdCBmaWx0ZXJpbmcgKi8KKyAgICByZXR1cm4gc1JlY2VpdmVDbWQuZnJhbWVGaWx0T3B0LmZyYW1lRmlsdEVuID09IDA7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS9yYWRpby5oCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1JlY2VpdmVDbWQuc3RhdHVzID09IEFDVElWRSB8fCBzUmVjZWl2ZUNtZC5zdGF0dXMgPT0gSUVFRV9TVVNQRU5ERUQpCisgICAgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcnVubmluZyBvciBiYWNrZ3JvdW5kZWQgcnggY29tbWFuZCAqLworICAgICAgICAvKiBpZiB3ZSBhcmUgcHJvbWlzY3VvdXMsIHRoZW4gZnJhbWUgZmlsdGVyaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworICAgICAgICByZkNvcmVNb2RpZnlSeEZyYW1lRmlsdGVyKCFhRW5hYmxlKTsKKyAgICAgICAgLyogWFhYIHNob3VsZCB3ZSBkdW1wIGFueSBxdWV1ZWQgbWVzc2FnZXMgPyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBpZiB3ZSBhcmUgcHJvbWlzY3VvdXMsIHRoZW4gZnJhbWUgZmlsdGVyaW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworICAgICAgICBzUmVjZWl2ZUNtZC5mcmFtZUZpbHRPcHQuZnJhbWVGaWx0RW4gPSBhRW5hYmxlID8gMCA6IDE7CisgICAgfQorfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICovCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUllZWVFdWk2NCkKK3sKKyAgICB1aW50OF90ICpldWk2NDsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICAvKiBUaGUgSUVFRSBNQUMgYWRkcmVzcyBjYW4gYmUgc3RvcmVkIHR3byBwbGFjZXMuIFdlIGNoZWNrIHRoZSBDdXN0b21lcgorICAgICAqIENvbmZpZ3VyYXRpb24gd2FzIG5vdCBzZXQgYmVmb3JlIGRlZmF1bHRpbmcgdG8gdGhlIEZhY3RvcnkKKyAgICAgKiBDb25maWd1cmF0aW9uLgorICAgICAqLworICAgIGV1aTY0ID0gKHVpbnQ4X3QgKikoQ0NGR19CQVNFICsgQ0NGR19PX0lFRUVfTUFDXzApOworCisgICAgZm9yIChpID0gMDsgaSA8IE9UX0VYVF9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChldWk2NFtpXSAhPSBDQzI2NTBfVU5LTk9XTl9FVUk2NCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA+PSBPVF9FWFRfQUREUkVTU19TSVpFKQorICAgIHsKKyAgICAgICAgLyogVGhlIGNjZmcgYWRkcmVzcyB3YXMgYWxsIDB4RkYsIHN3aXRjaCB0byB0aGUgZmNmZyAqLworICAgICAgICBldWk2NCA9ICh1aW50OF90ICopKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX01BQ18xNV80XzApOworICAgIH0KKworICAgIC8qIFRoZSBJRUVFIE1BQyBhZGRyZXNzIGlzIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZyBlbmRpYW4pLgorICAgICAqIFRoZSBjYWxsZXIgc2VlbXMgdG8gd2FudCB0aGUgYWRkcmVzcyBzdG9yZWQgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsCisgICAgICogd2hpY2ggaXMgYmFja3dhcmRzIG9mIHRoZSBjb252ZW50aW9ucyBzZXR1cCBieSBAcmVmCisgICAgICogb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MuIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzIGFzc3VtZXMKKyAgICAgKiB0aGF0IHRoZSBhZGRyZXNzIGJlaW5nIHBhc3NlZCB0byBpdCBpcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZworICAgICAqIGVuZGlhbiksIHNvIHRoZSBjYWxsZXIgb2Ygb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MgbXVzdCBzd2FwIHRoZQorICAgICAqIGVuZGlhbm5lc3MgYmVmb3JlIGNhbGxpbmcuCisgICAgICoKKyAgICAgKiBJdCBtYXkgYmUgZWFzaWVyIHRvIGhhdmUgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHN0b3JlIHRoZSBJRUVFCisgICAgICogYWRkcmVzcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZyBlbmRpYW4pLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBPVF9FWFRfQUREUkVTU19TSVpFOyBpKyspCisgICAgeworICAgICAgICBhSWVlZUV1aTY0W2ldID0gZXVpNjRbKE9UX0VYVF9BRERSRVNTX1NJWkUgLSAxKSAtIGldOworICAgIH0KK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhZGlvLmgKKyAqCisgKiBAbm90ZSBpdCBpcyBlbnRpcmVseSBwb3NzaWJsZSBmb3IgdGhpcyBmdW5jdGlvbiB0byBmYWlsLCBidXQgdGhlcmUgaXMgbm8KKyAqIHZhbGlkIHdheSB0byByZXR1cm4gdGhhdCBlcnJvciBzaW5jZSB0aGUgZnVuY2l0b24gcHJvdG90eXBlIHdhcyBjaGFuZ2VkLgorICovCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUGFuaWQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgLyogWFhYOiBpZiB0aGUgcGFuIGlkIGlzIHRoZSBicm9hZGNhc3QgcGFuIGlkICgweEZGRkYpIHRoZSBhdXRvIGFjayB3aWxsCisgICAgICogbm90IHdvcmsuIFRoaXMgaXMgZHVlIHRvIHRoZSBkZXNpZ24gb2YgdGhlIENNMCBhbmQgZm9sbG93cyBJRUVFIDgwMi4xNS40CisgICAgICovCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVSZWNlaXZlKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1QocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICBzUmVjZWl2ZUNtZC5sb2NhbFBhbklEID0gYVBhbmlkOworICAgICAgICBvdEVYUEVDVChyZkNvcmVDbGVhclJlY2VpdmVRdWV1ZSgmc1J4RGF0YVF1ZXVlKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIG90RVhQRUNUKHJmQ29yZVNlbmRSZWNlaXZlQ21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICAvKiB0aGUgaW50ZXJydXB0IGZyb20gYWJvcnQgY2hhbmdlZCBvdXIgc3RhdGUgdG8gc2xlZXAgKi8KKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlICE9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0KQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVDbWQubG9jYWxQYW5JRCA9IGFQYW5pZDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICoKKyAqIEBub3RlIGl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGZhaWwsIGJ1dCB0aGVyZSBpcyBubworICogdmFsaWQgd2F5IHRvIHJldHVybiB0aGF0IGVycm9yIHNpbmNlIHRoZSBmdW5jaXRvbiBwcm90b3R5cGUgd2FzIGNoYW5nZWQuCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphQWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICAvKiBYWFg6IGFzc3VtaW5nIGxpdHRsZSBlbmRpYW4gZm9ybWF0ICovCisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVSZWNlaXZlKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1QocmZDb3JlRXhlY3V0ZUFib3J0Q21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICBzUmVjZWl2ZUNtZC5sb2NhbEV4dEFkZHIgPSAqKCh1aW50NjRfdCAqKShhQWRkcmVzcykpOworICAgICAgICBvdEVYUEVDVChyZkNvcmVDbGVhclJlY2VpdmVRdWV1ZSgmc1J4RGF0YVF1ZXVlKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIG90RVhQRUNUKHJmQ29yZVNlbmRSZWNlaXZlQ21kKCkgPT0gQ01EU1RBX0RvbmUpOworICAgICAgICAvKiB0aGUgaW50ZXJydXB0IGZyb20gYWJvcnQgY2hhbmdlZCBvdXIgc3RhdGUgdG8gc2xlZXAgKi8KKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1N0YXRlICE9IGNjMjY1MF9zdGF0ZVRyYW5zbWl0KQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVDbWQubG9jYWxFeHRBZGRyID0gKigodWludDY0X3QgKikoYUFkZHJlc3MpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vcmFkaW8uaAorICoKKyAqIEBub3RlIGl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGZhaWwsIGJ1dCB0aGVyZSBpcyBubworICogdmFsaWQgd2F5IHRvIHJldHVybiB0aGF0IGVycm9yIHNpbmNlIHRoZSBmdW5jaXRvbiBwcm90b3R5cGUgd2FzIGNoYW5nZWQuCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhQWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUpCisgICAgeworICAgICAgICBvdEVYUEVDVChyZkNvcmVFeGVjdXRlQWJvcnRDbWQoKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIHNSZWNlaXZlQ21kLmxvY2FsU2hvcnRBZGRyID0gYUFkZHJlc3M7CisgICAgICAgIG90RVhQRUNUKHJmQ29yZUNsZWFyUmVjZWl2ZVF1ZXVlKCZzUnhEYXRhUXVldWUpID09IENNRFNUQV9Eb25lKTsKKyAgICAgICAgb3RFWFBFQ1QocmZDb3JlU2VuZFJlY2VpdmVDbWQoKSA9PSBDTURTVEFfRG9uZSk7CisgICAgICAgIC8qIHRoZSBpbnRlcnJ1cHQgZnJvbSBhYm9ydCBjaGFuZ2VkIG91ciBzdGF0ZSB0byBzbGVlcCAqLworICAgICAgICBzU3RhdGUgPSBjYzI2NTBfc3RhdGVSZWNlaXZlOworICAgIH0KKyAgICBlbHNlIGlmIChzU3RhdGUgIT0gY2MyNjUwX3N0YXRlVHJhbnNtaXQpCisgICAgeworICAgICAgICBzUmVjZWl2ZUNtZC5sb2NhbFNob3J0QWRkciA9IGFBZGRyZXNzOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogQGJyaWVmIHNlYXJjaCB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgdW5wcm9jZXNzZWQgbWVzc2FnZXMKKyAqCisgKiBMb29wIHRocm91Z2ggdGhlIHJlY2VpdmUgcXVldWUgc3RydWN0dXJlIGxvb2tpbmcgZm9yIGRhdGEgZW50cmllcyB0aGF0IHRoZQorICogcmFkaW8gY29yZSBoYXMgbWFya2VkIGFzIGZpbmlzaGVkLiBUaGVuIHBsYWNlIHRob3NlIGluIEByZWYgc1JlY2VpdmVGcmFtZQorICogYW5kIG1hcmsgYW55IGVycm9ycyBpbiBAcmVmIHNSZWNlaXZlRXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRGcmFtZSh2b2lkKQoreworICAgIHJmY19pZWVlUnhDb3JyQ3JjX3QgKmNyY0NvcnI7CisgICAgdWludDhfdCByc3NpOworICAgIHJmY19kYXRhRW50cnlHZW5lcmFsX3QgKnN0YXJ0RW50cnkgPSAocmZjX2RhdGFFbnRyeUdlbmVyYWxfdCAqKXNSeERhdGFRdWV1ZS5wQ3VyckVudHJ5OworICAgIHJmY19kYXRhRW50cnlHZW5lcmFsX3QgKmN1ckVudHJ5ID0gc3RhcnRFbnRyeTsKKworICAgIC8qIGxvb3AgdGhyb3VnaCByZWNlaXZlIHF1ZXVlICovCisgICAgZG8KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgKnBheWxvYWQgPSAmKGN1ckVudHJ5LT5kYXRhKTsKKworICAgICAgICBpZiAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID09IDAgJiYgY3VyRW50cnktPnN0YXR1cyA9PSBEQVRBX0VOVFJZX0ZJTklTSEVEKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50OF90IGxlbiA9IHBheWxvYWRbMF07CisgICAgICAgICAgICAvKiBnZXQgdGhlIGluZm9ybWF0aW9uIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGZyYW1lLgorICAgICAgICAgICAgICogVGhpcyBhcnJheSBhY2Nlc3MgbG9va3MgbGlrZSBpdCBpcyBhIGZlbmNlcG9zdCBlcnJvciwgYnV0IHRoZQorICAgICAgICAgICAgICogZmlyc3QgYnl0ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgZm9sbG93LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjcmNDb3JyID0gKHJmY19pZWVlUnhDb3JyQ3JjX3QgKikmcGF5bG9hZFtsZW5dOworICAgICAgICAgICAgcnNzaSA9IHBheWxvYWRbbGVuIC0gMV07CisKKyAgICAgICAgICAgIGlmIChjcmNDb3JyLT5zdGF0dXMuYkNyY0VyciA9PSAwICYmIChsZW4gLSAyKSA8IE9UX1JBRElPX0ZSQU1FX01BWF9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA9IGxlbjsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc1JlY2VpdmVGcmFtZS5tUHNkdSwgJihwYXlsb2FkWzFdKSwgbGVuIC0gMik7CisgICAgICAgICAgICAgICAgc1JlY2VpdmVGcmFtZS5tQ2hhbm5lbCA9IHNSZWNlaXZlQ21kLmNoYW5uZWw7CisgICAgICAgICAgICAgICAgc1JlY2VpdmVGcmFtZS5tUG93ZXIgPSByc3NpOworICAgICAgICAgICAgICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IGNyY0NvcnItPnN0YXR1cy5jb3JyOworICAgICAgICAgICAgICAgIHNSZWNlaXZlRXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZWNlaXZlRXJyb3IgPSBPVF9FUlJPUl9GQ1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1ckVudHJ5LT5zdGF0dXMgPSBEQVRBX0VOVFJZX1BFTkRJTkc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjdXJFbnRyeS0+c3RhdHVzID09IERBVEFfRU5UUllfVU5GSU5JU0hFRCkKKyAgICAgICAgeworICAgICAgICAgICAgY3VyRW50cnktPnN0YXR1cyA9IERBVEFfRU5UUllfUEVORElORzsKKyAgICAgICAgfQorCisgICAgICAgIGN1ckVudHJ5ID0gKHJmY19kYXRhRW50cnlHZW5lcmFsX3QgKikoY3VyRW50cnktPnBOZXh0RW50cnkpOworICAgIH0KKyAgICB3aGlsZSAoY3VyRW50cnkgIT0gc3RhcnRFbnRyeSk7CisKKyAgICByZXR1cm47Cit9CisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS1jYzI2NTAuaAorICovCit2b2lkIGNjMjY1MFJhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKHNTdGF0ZSA9PSBjYzI2NTBfc3RhdGVFZFNjYW4pCisgICAgeworICAgICAgICBpZiAoc0VkU2NhbkNtZC5zdGF0dXMgPT0gSUVFRV9ET05FX09LKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRSYWRpb0VuZXJneVNjYW5Eb25lKGFJbnN0YW5jZSwgc0VkU2NhbkNtZC5tYXhSc3NpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzRWRTY2FuQ21kLnN0YXR1cyA9PSBBQ1RJVkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvRW5lcmd5U2NhbkRvbmUoYUluc3RhbmNlLCBDQzI2NTBfSU5WQUxJRF9SU1NJKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzU3RhdGUgPT0gY2MyNjUwX3N0YXRlVHJhbnNtaXRDb21wbGV0ZSB8fCBzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgLyogd2UgYXJlIG5vdCBsb29raW5nIGZvciBhbiBBQ0sgcGFja2V0LCBvciBmYWlsZWQgKi8KKyAgICAgICAgc1N0YXRlID0gY2MyNjUwX3N0YXRlUmVjZWl2ZTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHICovCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHJhbnNtaXREb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBzUmVjZWl2ZWRBY2tQZW5kaW5nQml0LCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc1N0YXRlID09IGNjMjY1MF9zdGF0ZVJlY2VpdmUgfHwgc1N0YXRlID09IGNjMjY1MF9zdGF0ZVRyYW5zbWl0KQorICAgIHsKKyAgICAgICAgcmVhZEZyYW1lKCk7CisKKyAgICAgICAgaWYgKHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IDApCisgICAgICAgIHsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE9QRU5USFJFQURfRU5BQkxFX0RJQUcgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICB9Cit9CisKK2ludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBDQzI2NTBfUkVDRUlWRV9TRU5TSVRJVklUWTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMWQ5MzAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvY2MyNjUwL3JhbmRvbS5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3RybmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlIDxtYmVkdGxzL2VudHJvcHlfcG9sbC5oPgorCitlbnVtCit7CisgICAgQ0MyNjUwX1RSTkdfTUlOX1NBTVBMRVNfUEVSX0NZQ0xFID0gKDEgPDwgNiksCisgICAgQ0MyNjUwX1RSTkdfTUFYX1NBTVBMRVNfUEVSX0NZQ0xFID0gKDEgPDwgMjQpLAorICAgIENDMjY1MF9UUk5HX0NMT0NLU19QRVJfU0FNUExFICAgICA9IDAsCit9OworCisvKioKKyAqIFxub3RlIGlmIG1vcmUgdGhhbiAzMiBiaXRzIG9mIGVudHJvcHkgYXJlIG5lZWRlZCwgdGhlIFRSTkcgY29yZSBwcm9kdWNlcworICogNjQgYnl0ZXMgb2YgcmFuZG9tIGRhdGEsIHdlIGp1c3QgaWdub3JlIHRoZSB1cHBlciAzMiBieXRlcworICovCisKKy8qKgorICogRnVuY3Rpb24gZG9jdW1lbnRlZCBpbiBwbGF0Zm9ybS1jYzI2NTAuaAorICovCit2b2lkIGNjMjY1MFJhbmRvbUluaXQodm9pZCkKK3sKKyAgICBQUkNNUG93ZXJEb21haW5PbihQUkNNX0RPTUFJTl9QRVJJUEgpOworCisgICAgd2hpbGUgKFBSQ01Qb3dlckRvbWFpblN0YXR1cyhQUkNNX0RPTUFJTl9QRVJJUEgpICE9IFBSQ01fRE9NQUlOX1BPV0VSX09OKTsKKworICAgIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKFBSQ01fUEVSSVBIX1RSTkcpOworICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoUFJDTV9ET01BSU5fUEVSSVBIKTsKKyAgICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZShQUkNNX0RPTUFJTl9QRVJJUEgpOworICAgIFBSQ01Mb2FkU2V0KCk7CisgICAgVFJOR0NvbmZpZ3VyZShDQzI2NTBfVFJOR19NSU5fU0FNUExFU19QRVJfQ1lDTEUsIENDMjY1MF9UUk5HX01BWF9TQU1QTEVTX1BFUl9DWUNMRSwgQ0MyNjUwX1RSTkdfQ0xPQ0tTX1BFUl9TQU1QTEUpOworICAgIFRSTkdFbmFibGUoKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhbmRvbS5oCisgKi8KK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworICAgIHdoaWxlICghKFRSTkdTdGF0dXNHZXQoKSAmIFRSTkdfTlVNQkVSX1JFQURZKSk7CisKKyAgICByZXR1cm4gVFJOR051bWJlckdldChUUk5HX0xPV19XT1JEKTsKK30KKworLyoqCisgKiBGaWxsIGFuIGFyYml0cmFyeSBhcmVhIHdpdGggcmFuZG9tIGRhdGEKKyAqCisgKiBAcGFyYW0gW291dF0gYU91dHB1dCBhcmVhIHRvIHBsYWNlIHRoZSByYW5kb20gZGF0YQorICogQHBhcmFtIFtpbl0gYUxlbiBzaXplIG9mIHRoZSBhcmVhIHRvIHBsYWNlIHJhbmRvbSBkYXRhCisgKiBAcGFyYW0gW291dF0gb0xlbiBob3cgbXVjaCBvZiB0aGUgb3V0cHV0IHdhcyB3cml0dGVuIHRvCisgKgorICogQHJldHVybiBpbmRpY2F0aW9uIG9mIGVycm9yCisgKiBAcmV0dmFsIDAgbm8gZXJyb3Igb2NjdXJlZAorICovCitzdGF0aWMgaW50IFRSTkdQb2xsKHVuc2lnbmVkIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhTGVuKQoreworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIHVuaW9uCisgICAgeworICAgICAgICB1aW50MzJfdCB1MzJbMl07CisgICAgICAgIHVpbnQ4X3QgdThbOF07CisgICAgfSBidWZmZXI7CisKKyAgICB3aGlsZSAobGVuZ3RoIDwgYUxlbikKKyAgICB7CisgICAgICAgIGlmIChsZW5ndGggJSA4ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlJ3ZlIHJ1biB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgIHdoaWxlICghKFRSTkdTdGF0dXNHZXQoKSAmIFRSTkdfTlVNQkVSX1JFQURZKSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkb24ndCB1c2UgVFJOR051bWJlckdldCBoZXJlIGJlY2F1c2UgaXQgd2lsbCB0ZWxsIHRoZSBUUk5HIHRvCisgICAgICAgICAgICAgKiByZWZpbCB0aGUgZW50cm9weSBwb29sLCBpbnN0YWQgd2UgZG8gaXQgb3Vyc2VsZi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgYnVmZmVyLnUzMlswXSA9IEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19PVVQwKTsKKyAgICAgICAgICAgIGJ1ZmZlci51MzJbMV0gPSBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fT1VUMSk7CisgICAgICAgICAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR0NMUikgPSAweDE7CisgICAgICAgIH0KKworICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSBidWZmZXIudThbbGVuZ3RoICUgOF07CisKKyAgICAgICAgbGVuZ3RoKys7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3JhbmRvbS5oCisgKi8KK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNpemVfdCBsZW5ndGggPSBhT3V0cHV0TGVuZ3RoOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGFPdXRwdXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG90RVhQRUNUX0FDVElPTihUUk5HUG9sbCgodW5zaWduZWQgY2hhciAqKWFPdXRwdXQsIGxlbmd0aCkgIT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2NjMjY1MC91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxMDRiZgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9jYzI2NTAvdWFydC5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvdWFydC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2lvYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zeXNfY3RybC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworLyoqCisgKiBcbm90ZSB0aGlzIHdpbGwgY29uZmlndXJlIHRoZSB1YXJ0IGZvciAxMTUyMDAgYmF1ZCA4LU4tMSwgbm8gSFcgZmxvdyBjb250cm9sCisgKiBSWCBwaW4gSU9JRF8yIFRYIHBpbiBJT0lEXzMKKyAqCisgKiBcbm90ZSBtYWtlIHN1cmUgdGhhdCBkYXRhIGJlaW5nIHNlbnQgaXMgbm90IGluIGEgdm9sYXRpbGUgYXJlYQorICovCisKK2VudW0KK3sKKyAgICBDQzI2NTBfUkVDVl9DSVJDX0JVRkZfU0laRSA9IDI1NiwKK307CisKK3N0YXRpYyB1aW50OF90IGNvbnN0ICpzU2VuZEJ1ZmZlciA9IE5VTEw7CitzdGF0aWMgdWludDE2X3QgICAgICAgc1NlbmRMZW4gICAgPSAwOworCitzdGF0aWMgdWludDhfdCAgICAgICAgc1JlY2VpdmVCdWZmZXJbQ0MyNjUwX1JFQ1ZfQ0lSQ19CVUZGX1NJWkVdOworc3RhdGljIHVpbnQxNl90ICAgICAgIHNSZWNlaXZlSGVhZElkeCA9IDA7CitzdGF0aWMgdWludDE2X3QgICAgICAgc1JlY2VpdmVUYWlsSWR4ID0gMDsKKwordm9pZCBVQVJUMF9pbnRIYW5kbGVyKHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0vdWFydC5oCisgKi8KK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIFBSQ01Qb3dlckRvbWFpbk9uKFBSQ01fRE9NQUlOX1NFUklBTCk7CisKKyAgICB3aGlsZSAoUFJDTVBvd2VyRG9tYWluU3RhdHVzKFBSQ01fRE9NQUlOX1NFUklBTCkgIT0gUFJDTV9ET01BSU5fUE9XRVJfT04pOworCisgICAgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUoUFJDTV9QRVJJUEhfVUFSVDApOworICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoUFJDTV9QRVJJUEhfVUFSVDApOworICAgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKFBSQ01fUEVSSVBIX1VBUlQwKTsKKyAgICBQUkNNTG9hZFNldCgpOworCisgICAgd2hpbGUgKCFQUkNNTG9hZEdldCgpKTsKKworICAgIElPQ1BpblR5cGVVYXJ0KFVBUlQwX0JBU0UsIElPSURfMiwgSU9JRF8zLCBJT0lEX1VOVVNFRCwgSU9JRF9VTlVTRUQpOworCisgICAgVUFSVENvbmZpZ1NldEV4cENsayhVQVJUMF9CQVNFLCBTeXNDdHJsQ2xvY2tHZXQoKSwgMTE1MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9DT05GSUdfV0xFTl84IHwgVUFSVF9DT05GSUdfU1RPUF9PTkUgfCBVQVJUX0NPTkZJR19QQVJfTk9ORSk7CisgICAgVUFSVEludEVuYWJsZShVQVJUMF9CQVNFLCBVQVJUX0lOVF9SWCB8IFVBUlRfSU5UX1JUKTsKKyAgICBVQVJUSW50UmVnaXN0ZXIoVUFSVDBfQkFTRSwgVUFSVDBfaW50SGFuZGxlcik7CisgICAgVUFSVEVuYWJsZShVQVJUMF9CQVNFKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3VhcnQuaAorICovCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgVUFSVERpc2FibGUoVUFSVDBfQkFTRSk7CisgICAgVUFSVEludFVucmVnaXN0ZXIoVUFSVDBfQkFTRSk7CisgICAgVUFSVEludERpc2FibGUoVUFSVDBfQkFTRSwgVUFSVF9JTlRfUlggfCBVQVJUX0lOVF9SVCk7CisgICAgSU9DUG9ydENvbmZpZ3VyZVNldChJT0lEXzIsIElPQ19QT1JUX0dQSU8sIElPQ19TVERfSU5QVVQpOworICAgIElPQ1BvcnRDb25maWd1cmVTZXQoSU9JRF8zLCBJT0NfUE9SVF9HUElPLCBJT0NfU1REX0lOUFVUKTsKKworICAgIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZShQUkNNX1BFUklQSF9VQVJUMCk7CisgICAgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUoUFJDTV9QRVJJUEhfVUFSVDApOworICAgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZShQUkNNX1BFUklQSF9VQVJUMCk7CisgICAgUFJDTUxvYWRTZXQoKTsKKyAgICAvKioKKyAgICAgKiBcd2FybiB0aGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgZGV2aWNlcyBiZWluZyB1c2VkIGluIHRoZQorICAgICAqIHNlcmlhbCBwb3dlciBkb21haW4KKyAgICAgKi8KKyAgICBQUkNNUG93ZXJEb21haW5PZmYoUFJDTV9ET01BSU5fU0VSSUFMKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBkb2N1bWVudGVkIGluIHBsYXRmb3JtL3VhcnQuaAorICovCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHNTZW5kQnVmZmVyID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBzU2VuZEJ1ZmZlciA9IGFCdWY7CisgICAgc1NlbmRMZW4gPSBhQnVmTGVuZ3RoOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBAYnJpZWYgcHJvY2VzcyB0aGUgcmVjZWl2ZSBzaWRlIG9mIHRoZSBidWZmZXJzCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgd2hpbGUgKHNSZWNlaXZlSGVhZElkeCAhPSBzUmVjZWl2ZVRhaWxJZHgpCisgICAgeworICAgICAgICB1aW50MTZfdCB0YWlsSWR4OworCisgICAgICAgIGlmIChzUmVjZWl2ZUhlYWRJZHggPCBzUmVjZWl2ZVRhaWxJZHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhaWxJZHggPSBzUmVjZWl2ZVRhaWxJZHg7CisgICAgICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoJihzUmVjZWl2ZUJ1ZmZlcltzUmVjZWl2ZUhlYWRJZHhdKSwgdGFpbElkeCAtIHNSZWNlaXZlSGVhZElkeCk7CisgICAgICAgICAgICBzUmVjZWl2ZUhlYWRJZHggPSB0YWlsSWR4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGFpbElkeCA9IENDMjY1MF9SRUNWX0NJUkNfQlVGRl9TSVpFOworICAgICAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKCYoc1JlY2VpdmVCdWZmZXJbc1JlY2VpdmVIZWFkSWR4XSksIHRhaWxJZHggLSBzUmVjZWl2ZUhlYWRJZHgpOworICAgICAgICAgICAgc1JlY2VpdmVIZWFkSWR4ID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBAYnJpZWYgcHJvY2VzcyB0aGUgdHJhbnNtaXQgc2lkZSBvZiB0aGUgYnVmZmVycworICovCitzdGF0aWMgdm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCkKK3sKKyAgICBvdEVYUEVDVChzU2VuZEJ1ZmZlciAhPSBOVUxMKTsKKworICAgIGZvciAoOyBzU2VuZExlbiA+IDA7IHNTZW5kTGVuLS0pCisgICAgeworICAgICAgICBVQVJUQ2hhclB1dChVQVJUMF9CQVNFLCAqc1NlbmRCdWZmZXIpOworICAgICAgICBzU2VuZEJ1ZmZlcisrOworICAgIH0KKworICAgIHNTZW5kQnVmZmVyID0gTlVMTDsKKyAgICBzU2VuZExlbiA9IDA7CisgICAgb3RQbGF0VWFydFNlbmREb25lKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGRvY3VtZW50ZWQgaW4gcGxhdGZvcm0tY2MyNjUwLmgKKyAqLwordm9pZCBjYzI2NTBVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CisKKy8qKgorICogQGJyaWVmIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHVhcnQgaW50ZXJydXB0IHZlY3RvcgorICovCit2b2lkIFVBUlQwX2ludEhhbmRsZXIodm9pZCkKK3sKKyAgICB3aGlsZSAoVUFSVENoYXJzQXZhaWwoVUFSVDBfQkFTRSkpCisgICAgeworICAgICAgICB1aW50MzJfdCBjID0gVUFSVENoYXJHZXQoVUFSVDBfQkFTRSk7CisgICAgICAgIC8qIFhYWCBwcm9jZXNzIGVycm9yIGZsYWdzIGZvciB0aGlzIGNoYXJhY3RlciA/PyAqLworICAgICAgICBzUmVjZWl2ZUJ1ZmZlcltzUmVjZWl2ZVRhaWxJZHhdID0gKHVpbnQ4X3QpYzsKKyAgICAgICAgc1JlY2VpdmVUYWlsSWR4Kys7CisKKyAgICAgICAgaWYgKHNSZWNlaXZlVGFpbElkeCA+PSBDQzI2NTBfUkVDVl9DSVJDX0JVRkZfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgc1JlY2VpdmVUYWlsSWR4ID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NzBjMTMxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMTUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1kYTE1MDAwLmEKKworbGlib3BlbnRocmVhZF9kYTE1MDAwX2FfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9hZGFwdGVycy9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1pbmNsdWRlJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jdXN0b21fY29uZmlnX3FzcGkuaCAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW5rbm93bi1wcmFnbWFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLWZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tc2hhZG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdHlwZS1saW1pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLXZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1mbm8tc3RyaWN0LWFsaWFzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGFsYXJtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvZ2dpbmcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmRvbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZlY3Rvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNzdGFydHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVhcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcnRleC1tX2NzdGFydHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXJ0dXAtZ2NjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsb2NrLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRElBTE9HX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9zcmMvcXNwaV9hdXRvbW9kZS5jICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19xc3BpLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190aW1lcjAuYyAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19ncGlvLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19jcG0uYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190cm5nLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19yZi5jICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19oYXJkX2ZhdWx0LmMgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od193YXRjaGRvZy5jICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9zeXNfdGNzLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od191YXJ0LmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19vdHBjLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19mZW1fc2t5NjYxMTItMTEuYyAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19kbWEuYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9jb21tb24uYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9wb3dlci5jICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9kYXRhLmMgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmX3BoeV9hcGkuYyAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9tYWluLmMgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9kYTE1MDAwX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoRElBTE9HX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGN1c3RvbV9jb25maWdfcXNwaS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLWRhMTUwMDAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQobm9pbnN0X0hFQURFUlMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworRGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9kYTE1MDAwX2FfTElCQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzICQoRGFzaCl0eXBlIGYgJChEYXNoKW5hbWUgIioubyIpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmMGFlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9SRUFETUUubWQKQEAgLTAsMCArMSwxMzEgQEAKKyMgRGlhbG9nIE9wZW5UaHJlYWQgREExNTAwMCBFeGFtcGxlCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YW1wbGUgcGxhdGZvcm0gZHJpdmVycyBmb3IgdGhlIFtEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTE1MDAwXVtkYTE1MDAwXQorCitbZGExNTAwMF06IGh0dHBzOi8vc3VwcG9ydC5kaWFsb2ctc2VtaWNvbmR1Y3Rvci5jb20vY29ubmVjdGl2aXR5L3Byb2R1Y3Qvb3BlbnRocmVhZC1zYW5kYm94CisKKyoqTk9URToqKiBFYWNoIFRocmVhZCBub2RlIHJlcXVpcmVzIGEgdW5pcXVlIEVVSS02NC4gIAorUGxlYXNlIG1ha2Ugc3VyZSBhbGwgVGhyZWFkIG5vZGVzIGluIHlvdXIgbmV0d29yayBoYXZlIGEgdW5pcXVlIEVVSS02NCBieSBzZXR0aW5nIEhBUkRDT0RFRF9OT0RFX0lEIGluIHJhZGlvLmMgdG8gYSB1bmlxdWUgdmFsdWUuCisKKyoqTk9URToqKiBDdXJyZW50IHZlcnNpb24gd29ya3Mgb25seSB3aXRoIERBMTUwMDAgcmV2LiBCQQorCisjIyBCdWlsZCBFeGFtcGxlcyAoSG93IHRvIGJ1aWxkIGFuZCBmbGFzaCk6CitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtZGExNTAwMCBjbGVhbgorJCBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWRhMTUwMDAKK2BgYAorCitFeGVjdXRlIHNjcmlwdCB0byBwcmVwYXJlIGltYWdlIGZvciBmbGFzaGluZzoKKworKipOT1RFOioqIFNjcmlwdCBpcyBiYXNlZCBvbiBEaWFsb2cgVG9vbHMgYmluYXJpZXMgY29tcGlsZWQgZm9yIHg4NiBMaW51eC4KKworYGBgYmFzaAorJCBjZCAuL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dUb29scworJCAuL2ltZ3ByZXAuc2gKK2BgYAorCitGbGFzaCBCaW5hcmllczoKKworKipOT1RFOioqIEZsYXNoaW5nIHByb2Nlc3MgcmVxdWlyZXMgSkxpbmtHREJTZXJ2ZXIuIFBsZWFzZSB2aXNpdCBodHRwczovL3d3dy5zZWdnZXIuY29tL2psaW5rLWdkYi1zZXJ2ZXIuaHRtbCBmb3IgZGV0YWlscy4KKworMS4gT3BlbiBhbm90aGVyIHRlcm1pbmFsIHdpbmRvdyBpbiBvcmRlciB0byBzdGFydCBnZGIgc2VydmVyLiBXcml0ZSB0aGUgY29tbWFuZCAoTGludXgpOgorCisgICBgYGBiYXNoCisgICAkIEpMaW5rR0RCU2VydmVyIC1pciAtaWYgc3dkIC1zcGVlZCBhdXRvIC1kZXZpY2UgQ29ydGV4LU0wIC1sb2d0b2ZpbGUgb24gLWxvY2FsaG9zdG9ubHkKKyAgIGBgYAorMi4gUmV0dXJuIHRvIHByZXZpb3VzIHRlcm1pbmFsIHdpbmRvdyBhbmQgZXhlY3V0ZSBhIGNvbW1hbmQgaW4gb3JkZXIgdG8gZmxhc2ggdGhlIGJvYXJkOgorCisgICBgYGBiYXNoCisgICAkIC4vY2xpX3Byb2dyYW1tZXIgZ2Ric2VydmVyIHdyaXRlX3FzcGlfZXhlYyAuLi8uLi8uLi9vdXRwdXQvZGExNTAwMC9iaW4vb3QtY2xpLWZ0ZC5iaW4KKyAgIGBgYAorCisjIyBJbnRlcmFjdDoKKworQm9hcmQgd2lsbCBpbmRpY2F0ZSBzdGF0ZSBvZiBkZXZpY2UgYWNjb3JkaW5nIHRvIExFRCBibGluayBzcGVlZC4KKworfCBGcmVxdWVuY3kgfCBSb2xlIHwKK3wgLS0tIHwgLS0tIHwKK3wgNUh6IHwgTGVhZGVyIHwKK3wgMkh6IHwgUm91dGVyIHwKK3wgMC41SHogfCBFbmQgRGV2aWNlIHwKKworCisxLiBPcGVuIHRlcm1pbmFsIHRvIC9kZXYvdHR5QUNNMCAoc2VyaWFsIHBvcnQgc2V0dGluZ3M6IDExNTIwMCA4LU4tMSkuCisyLiBUeXBlIGhlbHAgZm9yIGxpc3Qgb2YgY29tbWFuZHMKKworIyMgRXhhbXBsZXM6CisxLiBDcmVhdGUgVG9wb2xvZ3kgYW5kIGJlY29tZSBMZWFkZXIgb24gY2hhbm5lbCAxMy4KKyAgIGBgYAorICAgPiBjaGFubmVsIDEzCisgICBEb25lCisgICA+IHBhbmlkIDB4ZmFjZQorICAgRG9uZQorICAgPiBpZmNvbmZpZyB1cAorICAgRG9uZQorICAgPiB0aHJlYWQgc3RhcnQKKyAgIERvbmUKKyAgIGBgYAorICAgV2FpdCBhbmQgc2VlIHRoYXQgTEVEIHN0YXJ0ZWQgdG8gYmxpbmsgd2l0aCA1SHouCisgICAKKyAgIENoZWNrIG5vZGUgc3RhdGU6CisgICBgYGAKKyAgID4gc3RhdGUKKyAgIExlYWRlcgorICAgYGBgCisyLiBBdHRhY2ggUm91dGVyIGFuZCBwaW5nIExlYWRlciBNZXNoIExvY2FsIGFkZHJlc3MuCisKKyAgIE9wZW4gdGVybWluYWwgZm9yIHNlY29uZCBkZXZpY2UgL2Rldi90dHlBQ00xIGFuZCBpc3N1ZSBjb21tYW5kczoKKyAgIGBgYAorICAgPiBjaGFubmVsIDEzCisgICBEb25lCisgICA+IHBhbmlkIDB4ZmFjZQorICAgRG9uZQorICAgPiBpZmNvbmZpZyB1cAorICAgRG9uZQorICAgPiB0aHJlYWQgc3RhcnQKKyAgIGBgYAorCisgICBXYWl0IHVudGlsIExFRCBzdGFydCB0byBibGluay4gU2hvdWxkIGJsaW5rIHNsb3dlci4KKworICAgQ2hlY2sgbm9kZSBzdGF0ZToKKworICAgYGBgCisgICA+IHN0YXRlCisgICBSb3V0ZXIKKyAgIGBgYAorCisgICBMaXN0IGFkZHJlc3NlcyBvbiB0ZXJtaW5hbCB3aXRoIExlYWRlcjoKKworICAgYGBgICAKKyAgID4gaXBhZGRyCisgICBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDo0NDAwCisgICBmZGRlOmFkMDA6YmVlZjowOjkyZjU6OTg0NDo2N2FkOmEwYzkKKyAgIGZlODA6MDowOjA6MmMxMTphYmExOmVjYzE6OTZkYQorICAgYGBgCisKKyAgIFBpbmcgTGVhZGVyIGZyb20gUm91dGVyIHRlcm1pbmFsOgorCisgICBgYGAKKyAgID4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjkyZjU6OTg0NDo2N2FkOmEwYzkKKyAgIDE2IGJ5dGVzIGZyb20gZmRkZTphZDAwOmJlZWY6MDo5MmY1Ojk4NDQ6NjdhZDphMGM5OiBpY21wX3NlcT0yIGhsaW09NjQgdGltZT0zNTltcworICAgYGBgCisKKyMjIFJlbWFya3MKKyogVmFsaWRhdGlvbgorCisgICBUaGUgREExNTAwMCBleGFtcGxlIGhhcyBiZWVuIHZhbGlkYXRlZCBieSBEaWFsb2cgU2VtaWNvbmR1Y3RvciB3aXRoIGNvbW1pdCBkMjUwMTA1IGluY2x1ZGVkLgorICAKKyogQnVpbGQgZW52aXJvbm1lbnQKKworICAgVGhlIERBMTUwMDAgZXhhbXBsZSBjb2RlIGFuZCBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBjb21wbGllZCB3aXRoIGdjYyB2ZXJzaW9uIDUuNC4wICgyMDE2MDYwOSkuCisgICAKKyMjIFRyb3VibGVzaG9vdGluZyAKKyogV2h5IGNhbuKAmXQgSSBzZWUgdGhlIFZDT00gcG9ydD8KKyAgIAorICAgVGhlIFNlZ2dlciBWaXJ0dWFsIENPTSBwb3J0IGNhbiBiZSBkaXNhYmxlZCBieSBzb2Z0d2FyZSBjb25maWd1cmF0aW9uLiBJZiB5b3UgY2FuIHNlZSB0aGUgU2VnZ2VyIAorICAgZHJpdmVyIHByb3Blcmx5IGluc3RhbGxlZCBidXQgdGhlIFZDT00gbm90IHNob3dpbmcgdXAgaW4gdGhlIGRldmljZSBtYW5hZ2VyLCBpdOKAmXMgcHJvYmFibHkgZGlzYWJsZWQKKyAgIGJ5IHNvZnR3YXJlLiBUbyByZS1lbmFibGUgaXQgeW91IGhhdmUgdG8gcnVuIEpMaW5rRXhlIGFuZCBpc3N1ZSB0aGUgY29tbWFuZCBgIHZjb20gZW5hYmxlYC5JdCBpcworICAgcmVxdWlyZWQgdG8gcG93ZXIgY3ljbGUgdGhlIGRldmljZSB0byBhcHBseSB0aGUgY2hhbmdlLiAKKyAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9hbGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzM4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9hbGFybS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyogQGZpbGUgYWxhcm0uYworKiBQbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIGFsYXJtCisqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKworI2luY2x1ZGUgImh3X3RpbWVyMC5oIgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS1kYTE1MDAwLmgiCisKK3N0YXRpYyBib29sIHNJc1J1bm5pbmcgPSBmYWxzZTsKK3N0YXRpYyB1aW50MzJfdCBzQWxhcm0gPSAwOworc3RhdGljIHVpbnQzMl90IHNDb3VudGVyOwordm9sYXRpbGUgYm9vbCBzQWxhcm1GaXJlZCA9IGZhbHNlOworCitzdGF0aWMgdm9pZCB0aW1lcjBfaW50ZXJydXB0X2NiKHZvaWQpCit7CisgICAgc0NvdW50ZXIrKzsKK30KKwordm9pZCBkYTE1MDAwQWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoKHNJc1J1bm5pbmcpICYmIChzQWxhcm0gPD0gc0NvdW50ZXIpKQorICAgIHsKKyAgICAgICAgc0lzUnVubmluZyA9IGZhbHNlOworICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgfQorfQorCit2b2lkIGRhMTUwMDBBbGFybUluaXQodm9pZCkKK3sKKyAgICBod190aW1lcjBfaW5pdChOVUxMKTsKKyAgICBod190aW1lcjBfc2V0X2Nsb2NrX3NvdXJjZShIV19USU1FUjBfQ0xLX1NSQ19GQVNUKTsKKyAgICBod190aW1lcjBfc2V0X3B3bV9tb2RlKEhXX1RJTUVSMF9NT0RFX1BXTSk7CisgICAgaHdfdGltZXIwX3NldF9mYXN0X2Nsb2NrX2RpdihIV19USU1FUjBfRkFTVF9DTEtfRElWXzQpOworICAgIGh3X3RpbWVyMF9zZXRfdDBfcmVsb2FkKDB4MDdEMCwgMHgwN0QwKTsKKyAgICBod190aW1lcjBfcmVnaXN0ZXJfaW50KHRpbWVyMF9pbnRlcnJ1cHRfY2IpOworICAgIGh3X3RpbWVyMF9zZXRfb25fY2xvY2tfZGl2KGZhbHNlKTsKK30KKwordWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKK3sKKyAgICByZXR1cm4gc0NvdW50ZXI7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgdDAsIHVpbnQzMl90IGR0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzQWxhcm0gPSB0MCArIGR0OworICAgIHNJc1J1bm5pbmcgPSB0cnVlOworCisgICAgaWYgKHNDb3VudGVyID09IDApCisgICAgeworICAgICAgICBod190aW1lcjBfZW5hYmxlKCk7CisgICAgfQorCisKKyAgICBpZiAoc0lzUnVubmluZyA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIHNJc1J1bm5pbmcgPSB0cnVlOworICAgIH0KKworICAgIGh3X3RpbWVyMF91bmZyZWV6ZSgpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHNJc1J1bm5pbmcgPSBmYWxzZTsKKyAgICBod190aW1lcjBfZnJlZXplKCk7Cit9CisKKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jbG9jay5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmNlMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY2xvY2suYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgICBjbG9jay5jCisgKiBDbG9jayBpbml0IGZvciBEaWFsb2cgZGExNTAwMC4KKyAqCisgKi8KKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImh3X2NwbS5oIgorI2luY2x1ZGUgImh3X3dhdGNoZG9nLmgiCisKK3ZvbGF0aWxlIHVpbnQ4X3QgeHRhbDE2X3NldHRsZWQgPSAwOworCitleHRlcm4gdm9pZCBYVEFMMTZSRFlfSGFuZGxlcih2b2lkKTsKKworLyogVGhlIGhpZ2hlc3QgaW50ZXJydXB0IHByaW9yaXR5IHRoYXQgY2FuIGJlIHVzZWQgYnkgYW55IGludGVycnVwdCBzZXJ2aWNlCisgICByb3V0aW5lIHRoYXQgbWFrZXMgY2FsbHMgdG8gaW50ZXJydXB0IHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4KKyAgIERPIE5PVCBDQUxMIElOVEVSUlVQVCBTQUZFIEZSRUVSVE9TIEFQSSBGVU5DVElPTlMgRlJPTSBBTlkgSU5URVJSVVBUCisgICBUSEFUIEhBUyBBIEhJR0hFUiBQUklPUklUWSBUSEFOIFRISVMhIChoaWdoZXIgcHJpb3JpdGllcyBhcmUgbG93ZXIKKyAgIG51bWVyaWMgdmFsdWVzIG9uIGFuIEFSTSBDb3J0ZXgtTSkuICovCisjZGVmaW5lIGNvbmZpZ0xJQlJBUllfTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDEKKwordm9pZCBzd2l0Y2hfdG9fcmMxNih2b2lkKQoreworICAgIGlmICghaHdfY3BtX2NoZWNrX3JjMTZfc3RhdHVzKCkpICAgICAgICAgICAgLy8gUkMxNiBpcyBkaXNhYmxlZAorICAgIHsKKyAgICAgICAgaHdfY3BtX2VuYWJsZV9yYzE2KCk7ICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBSQzE2CisgICAgICAgIGh3X2NwbV9zaG9ydF9kZWxheSgpOyAgICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGl0IGlzIHN0YWJsZQorICAgIH0KKworICAgIC8vIGZhc3QgLS0+IHNsb3cgY2xvY2sgc3dpdGNoCisgICAgaHdfY3BtX3NldF9zeXNjbGsoU1lTX0NMS19JU19SQzE2KTsgICAgICAgICAvLyBTZXQgUkMxNiBhcyBzeXNfY2xrCisgICAgLy9jbV9hZGp1c3Rfb3RwX2FjY2Vzc190aW1pbmdzKCk7ICAgICAgICAgICAvLyBBZGp1c3QgT1RQIHRpbWluZ3MKK30KKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jb3J0ZXgtbV9jc3RhcnR1cC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY29ydGV4LW1fY3N0YXJ0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYTI2ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY29ydGV4LW1fY3N0YXJ0dXAuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisqIEBmaWxlICAgICBjb3J0ZXgtbV9jc3RhcnR1cC5jCisqIEFSTSBDb3J0ZXgtTSBnZW5lcmljIGNzdGFydHVwLgorKgorKiBTZXR1cCBSQU0gYXMgbmVlZGVkIGJhc2VkIG9uIEdDQyBsaW5rZXIgc2NyaXB0IHNlY3Rpb25zLgorKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorLy8jaW5jbHVkZSA8dG9vbC5oPgorI2RlZmluZSBfX05BS0VEICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCisjZGVmaW5lIF9fVVNFRCAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKQorI2RlZmluZSBfX05PX1JFVFVSTiAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisvLyBmb3J3YXJkIGRlY2xhcmF0aW9uCitleHRlcm4gdm9pZCBtYWluKHZvaWQpOworZXh0ZXJuIHZvaWQgX19jcHVfc3RhcnR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZ2NjX3Byb2dyYW1fc3RhcnQodm9pZCk7CisKK2V4dGVybiB1aW50MzJfdCBfc2RhdGE7ICAgICAgICAgICAgLy8gU3RhcnQgb2YgLmRhdGEgcmVnaW9uIGluIFJBTQorZXh0ZXJuIHVpbnQzMl90IF9lZGF0YTsgICAgICAgICAgICAvLyBFbmQgb2YgLmRhdGEgcmVnaW9uIGluIFJBTQorZXh0ZXJuIHVpbnQzMl90IF9fYnNzX3N0YXJ0X187CitleHRlcm4gdWludDMyX3QgX19ic3NfZW5kX187CitleHRlcm4gdWludDMyX3QgX19pbml0X2FycmF5X3N0YXJ0OworZXh0ZXJuIHVpbnQzMl90IF9faW5pdF9hcnJheV9lbmQ7CitleHRlcm4gdWludDMyX3QgX19yd2RhdGFfc3RhcnRfXzsgIC8vIEVuZCBvZiAudGV4dCByZWdpb24gaW4gRkxBU0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjc3RhcnR1cF9yd2RhdGEoKQoreworCisgICAgLy8gR2V0IHRoZSBhZGRyZXNzZXMgZm9yIHRoZSAuZGF0YSBzZWN0aW9uIChpbml0aWFsaXplZCBkYXRhIHNlY3Rpb24pCisgICAgdWludDMyX3QgKmRhdGFfcm9tID0gKHVpbnQzMl90ICopICZfX3J3ZGF0YV9zdGFydF9fOworICAgIHVpbnQzMl90ICpkYXRhX3JhbSA9ICh1aW50MzJfdCAqKSAmX3NkYXRhOworICAgIHVpbnQzMl90ICpkYXRhX3JhbV9lbmQgPSAodWludDMyX3QgKikgJl9lZGF0YTsKKworICAgIC8vIENvcHkgaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIFJPTSB0byBSQU0KKyAgICB3aGlsZSAoZGF0YV9yYW0gPCBkYXRhX3JhbV9lbmQpCisgICAgeworICAgICAgICAqZGF0YV9yYW0rKyA9ICpkYXRhX3JvbSsrOworICAgIH0KK30KKwordm9pZCBjc3RhcnR1cF9ic3MoKQoreworCisgICAgLyogQ2xlYXIgdGhlIHplcm8taW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovCisgICAgdWludDMyX3QgKmJzc19zdGFydCA9ICh1aW50MzJfdCAqKSAmX19ic3Nfc3RhcnRfXzsKKyAgICB1aW50MzJfdCAqYnNzX2VuZCAgID0gKHVpbnQzMl90ICopICZfX2Jzc19lbmRfXzsKKworICAgIHdoaWxlIChic3Nfc3RhcnQgPCBic3NfZW5kKQorICAgIHsKKyAgICAgICAgKmJzc19zdGFydCsrID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgY3N0YXJ0dXAodm9pZCkKK3sKKyAgICBjc3RhcnR1cF9yd2RhdGEoKTsKKyAgICBjc3RhcnR1cF9ic3MoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFSTSBDb3J0ZXgtTSBTdGFydAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgYWxsIG9mIHRoZSBuZWVkZWQgc3RhcnR1cCByb3V0aW5lcyBhbmQgdGhlbgorICogYnJhbmNoZXMgdG8gdGhlIG1haW4gcHJvY2Vzcy4KKyAqCisgKiBUaGlzIGNvbnRhaW5zIHRoZSB2ZXJ5IGZpcnN0IGluc3RydWN0aW9ucyB0aGF0IGFyZSBydW4gb24gYm9vdC4KKyAqLwordm9pZCBfX1VTRUQgX19OQUtFRCBfX05PX1JFVFVSTiBfX2djY19wcm9ncmFtX3N0YXJ0KHZvaWQpCit7CisgICAgLy8gZWFybHkgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24gLSBjb25maWd1cmUgY2xvY2tzLCBldGMuCisgICAgX19jcHVfc3RhcnR1cCgpOworCisgICAgLy8gQy9DKysgcnVudGltZSBpbml0aWFsaXphdGlvbiAoQlNTLCBEYXRhLCByZWxvY2F0aW9uLCBldGMuKQorICAgIGNzdGFydHVwKCk7CisKKyAgICAvLyBUQkQgd2Ugc2hvdWxkIHBhc3MgcGFyYW1ldGVycyBoZXJlLgorICAgIG1haW4oKTsKKworICAgIC8vIE5vIGFjdGlvbnMgdG8gcGVyZm9ybSBhZnRlciB0aGlzIHNvIHdhaXQgZm9yZXZlcgorICAgIHdoaWxlICgxKTsKK30KKworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9jc3RhcnR1cC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY3N0YXJ0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWQwZDkwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY3N0YXJ0dXAuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgICBjc3RhcnR1cC5jCisgKiBjc3RhcnR1cCBmb3IgRGlhbG9nIGRhMTUwMDAuCisgKiBDYWxsZWQgYnkgX19CT09UX1NUQVJUVVAgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvY2Vzc29yIG9uIGJvb3QuCisgKiBUaGUgY2FsbGVyIGlzIGFsaWFzZWQgaW4gdG9vbC5oIHRvIGEgY29tcGlsZXIgZGVwZW5kYW50IHZhbHVlOgorICogICBJQVI6IF9fbG93X2xldmVsX2luaXQKKyAqICAgR0NDOiBfX2djY19wcm9ncmFtX3N0YXJ0CisgKgorICogRm9yIENvcnRleC1NIGNvcmVzLCBjYWxsZWQgZnJvbSBjcHUvYXJtL2NvcnRleC1tL2Jvb3QvY3N0YXJ0dXAuYy4KKyAqLworCisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKyNpbmNsdWRlICJic3AvaW5jbHVkZS9jb3JlX2NtMC5oIgorCit2b2lkIF9fY3B1X3N0YXJ0dXAodm9pZCkKK3sKKyAgICAvLyBTZXRXb3JkMTYoQ0xLX0FNQkFfUkVHLCAweDAwKTsgICAgICAgICAgICAgIC8vIHNldCBjbG9ja3MgKGhjbGsgYW5kIHBjbGsgKSAxNk1IegorICAgIC8vIFNldFdvcmQxNihTRVRfRlJFRVpFX1JFRyxGUlpfV0RPRyk7ICAgICAgICAgLy8gc3RvcCB3YXRjaGRvZworICAgIC8vIFNldEJpdHMxNihTWVNfQ1RSTF9SRUcsUEFEX0xBVENIX0VOLDEpOyAgICAgLy8gZW5hYmxlIHBhZHMKKyAgICBFTkFCTEVfREVCVUdHRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBkZWJ1Z2dlcgorICAgIC8vIFNldEJpdHMxNihQTVVfQ1RSTF9SRUcsIFBFUklQSF9TTEVFUCwwKTsgICAgLy8gZXhpdCBwZXJpcGhlcmFsIHBvd2VyIGRvd24KKyAgICAvLyBTZXRCaXRzMTYoUE1VX0NUUkxfUkVHLCBSRVRBSU5fUkFNLCBkZ19jb25maWdNRU1fUkVURU5USU9OX01PREUpOworICAgIC8vIFNldEJpdHMxNihBT05fU1BBUkVfUkVHLCBFTl9CQVRTWVNfUkVULCAxKTsgLy8gUG93ZXIgR1BJT3MgZHVyaW5nIHNsZWVwCit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2N1c3RvbV9jb25maWdfcXNwaS5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvY3VzdG9tX2NvbmZpZ19xc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjE4MWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2N1c3RvbV9jb25maWdfcXNwaS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIGN1c3RvbV9jb25maWdfcXNwaS5oCisgKiBDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIGZvciBGcmVlUlRPUyBhcHBsaWNhdGlvbnMgZXhlY3V0aW5nIGZyb20gUVNQSS4KKyAqLworCisjaWZuZGVmIENVU1RPTV9DT05GSUdfUVNQSV9IXworI2RlZmluZSBDVVNUT01fQ09ORklHX1FTUElfSF8KKworI2luY2x1ZGUgImJzcF9kZWZpbml0aW9ucy5oIgorCisjZGVmaW5lIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICAgICAgICAgICAgICAgICAgICAgQkxBQ0tfT1JDQV9JQ19SRVZfQgorI2RlZmluZSBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAgICAgICAgICAgICAgICAgICAgIEJMQUNLX09SQ0FfSUNfU1RFUF9BCisKKyN1bmRlZiBDT05GSUdfVVNFX0JMRQorI2RlZmluZSBDT05GSUdfVVNFX0ZUREYKKworI2RlZmluZSBfX0hFQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMAorI2RlZmluZSBfX1NUQUNLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorCisjZGVmaW5lIENPTkZJR19SRVRBUkdFVAorI2RlZmluZSBDT05GSUdfUkVUQVJHRVRfVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1VBUlQxCisKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0xQX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUF9DTEtfMzI3NjgKKyNkZWZpbmUgZGdfY29uZmlnRVhFQ19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX0lTX0NBQ0hFRAorI2RlZmluZSBkZ19jb25maWdDT0RFX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9WT0xBVElMRV9JU19GTEFTSAorI2RlZmluZSBkZ19jb25maWdFWFRfQ1JZU1RBTF9GUkVRICAgICAgICAgICAgICAgICAgICAgIEVYVF9DUllTVEFMX0lTXzE2TQorCisjZGVmaW5lIGRnX2NvbmZpZ0lNQUdFX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxPUE1FTlRfTU9ERQorI2RlZmluZSBkZ19jb25maWdFTVVMQVRFX09UUF9DT1BZICAgICAgICAgICAgICAgICAgICAgICgwKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRVJfQ0FOX1VTRV9USU1FUjEgICAgICAgICAgICAgICAgICAgKDApCisKKyNkZWZpbmUgZGdfY29uZmlnTUVNX1JFVEVOVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAoMHgxRikKKyNkZWZpbmUgZGdfY29uZmlnU0hVRkZMSU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgICAoMHgzKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9XRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfQ09OTkVDVEVEX1RPICAgICAgICAgICAgICAgICAgICAoRkxBU0hfQ09OTkVDVEVEX1RPXzFWOCkKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgKEJBVFRFUllfVFlQRV9MSU1OMk80KQorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0NIQVJHRV9DVVJSRU5UICAgICAgICAgICAgICAgIDIgICAgICAgLy8gMzBtQQorI2RlZmluZSBkZ19jb25maWdCQVRURVJZX1BSRUNIQVJHRV9DVVJSRU5UICAgICAgICAgICAgIDIwICAgICAgLy8gMi4xbUEKKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfTlRDICAgICAgICAgICAgICAgICAgICAxICAgICAgIC8vIGRpc2FibGVkCisKKyNkZWZpbmUgZGdfY29uZmlnVVNFX1VTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9VU0JfQ0hBUkdFUiAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZ19jb25maWdBTExPV19DSEFSR0lOR19OT1RfRU5VTSAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBkZ19jb25maWdVU0VfUHJvREsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9TV19DVVJTT1IgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisKKyNkZWZpbmUgZGdfY29uZmlnQ0FDSEVBQkxFX1FTUElfQVJFQV9MRU4gICAgICAgICAgICAgICBOVk1TX1BBUkFNX1BBUlRfc3RhcnQKKworI2RlZmluZSBkZ19jb25maWdGRU1fRExHX1JFRl9CT0FSRCAgICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19UUk5HICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1RJTUVSMCAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqIE9TIHNwZWNpZmljIGNvbmZpZworICovCisjZGVmaW5lIE9TX0JBUkVNRVRBTAorI2RlZmluZSBDUFVfREExNTAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqIFBlcmlwaGVyYWwgc3BlY2lmaWMgY29uZmlnCisgKi8KKyNkZWZpbmUgRlRERl9QSFlfQVBJCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19SRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisjZGVmaW5lIGRnX2NvbmZpZ1JGX0VOQUJMRV9SRUNBTElCUkFUSU9OICAgICAgICAgICAgICAgKDApCisjZGVmaW5lIEZUREZfTk9fQ1NMCisjZGVmaW5lIEZUREZfTk9fVFNDSAorI2RlZmluZSBGVERGX0xJVEUKKworI2RlZmluZSBkZ19jb25maWdGTEFTSF9BREFQVEVSICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBkZ19jb25maWdOVk1TX0FEQVBURVIgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBkZ19jb25maWdOVk1TX1ZFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBkZ19jb25maWdVU0VfV0RPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKQorLyogSW5jbHVkZSBic3AgZGVmYXVsdCB2YWx1ZXMgKi8KKyNpbmNsdWRlICJic3BfZGVmYXVsdHMuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqIE9wZW4gVGhyZWFkIHNwZWNpZmljIGNvbmZpZworICovCisKKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAoMHg3QjAwMCkKKworI2VuZGlmIC8qIENVU1RPTV9DT05GSUdfUVNQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvZGExNTAwMC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2RhMTUwMDAubGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTVjMWUyOAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2RhMTUwMDAubGQKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgUGVyaXBoZXJhbCBtZW1vcnkgbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK19CT09UTE9BREVSX1NJWkUgPSAwIDsKK19RU1BJX1NJWkUgPSAyMDQ4SyA7ICAgLyogbGQgZG9lc24ndCBhbGxvdyBkZWZpbmVzIHRvIGJlIHVzZWQgZm9yIE1FTU9SWSAqLworX0VYRV9TSVpFID0gMTA4SyA7ICAgICAvKiBJbiBSQU0gY29uZmlnLCByZXNlcnZlIHNwYWNlIGZvciB0aGUgZXhlY3V0YWJsZS4uLiAqLworX1RFWFRfU1RBUlQgPSAweDE0MCA7IAorCitNRU1PUlkKK3sKKyAgdmVjdG9yIChyeCkgOiAgICAgICAgT1JJR0lOID0gMHgwMDAwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAweDBDMCAKKyAgbWFnaWMgKHIpIDogICAgICAgICAgT1JJR0lOID0gMHgwMDAwMDBDMCwgICAgICAgICAgICBMRU5HVEggPSAweDA4MCAgIC8qIHBhdGNoIHRhYmxlICovCisgIGZsYXNoIChyeCkgOiAgICAgICAgIE9SSUdJTiA9IDB4MDAwMDAxNDAsICAgICAgICAgICAgTEVOR1RIID0gMjA0OEsKKyAgcm9tIChyeCkgOiAgICAgICAgICAgT1JJR0lOID0gMHgwN0YwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAyNTZLCisgIG90cCAocngpIDogICAgICAgICAgIE9SSUdJTiA9IDB4MDdGODAwMDAsICAgICAgICAgICAgTEVOR1RIID0gMjU2SworICByYW0gKHJ3eCkgOiAgICAgICAgICBPUklHSU4gPSAweDA3RkMwMDAwKzB4MTQwLCAgICAgIExFTkdUSCA9IDEyOEstMHgxNDAKKyAgY2FjaGVyYW0gKHJ3eCkgOiAgICAgT1JJR0lOID0gMHgwN0ZFMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAxNksKKyAgcXNwaSAocngpIDogICAgICAgICAgT1JJR0lOID0gMHgwODAwMDAwMCwgICAgICAgICAgICBMRU5HVEggPSAyMDQ4SworfQorCisvKioKKyAqIEdDQyBsaW5rZXIgc2NyaXB0IGZvciBBUk0gQ29ydGV4LU0gbWljcm9jb250cm9sbGVycy4KKyAqLworCisvKgorRU5UUlkoX3N0YXJ0KQorKi8KK0VOVFJZKF9fZ2NjX3Byb2dyYW1fc3RhcnQpCisKKy8qCisgKiBSZXNlcnZlIG1lbW9yeSBmb3IgaGVhcCBhbmQgc3RhY2suIFRoZSBsaW5rZXIgd2lsbCBpc3N1ZSBhbiBlcnJvciBpZiB0aGVyZQorICogaXMgbm90IGVub3VnaCBtZW1vcnkuCisgKgorICogTk9URTogVGhlIHJlc2VydmVkIGhlYXAgYW5kIHN0YWNrIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJzcyBjb2x1bW4gb2YgdGhlCisgKiBiaW51dGlscyBzaXplIGNvbW1hbmQuCisgKi8KK19oZWFwX3NpemUgPSAweDA7ICAgIC8qIHJlcXVpcmVkIGFtb3VudCBvZiBoZWFwICAqLworX3N0YWNrX3NpemUgPSAweDA7ICAgLyogcmVxdWlyZWQgYW1vdW50IG9mIHN0YWNrICovCisKKy8qCisgKiBUaGUgc3RhY2sgc3RhcnRzIGF0IHRoZSBlbmQgb2YgUkFNIGFuZCBncm93cyBkb3dud2FyZHMuIEZ1bGwtZGVzY2VuZGluZworICogc3RhY2s7IGRlY3JlbWVudCBmaXJzdCwgdGhlbiBzdG9yZS4KKyAqLworX19zdGFja19zdGFydF9fID0gT1JJR0lOKHJhbSkgKyBMRU5HVEgocmFtKTsKK19fc3RhY2tfZW5kX18gPSBfX3N0YWNrX3N0YXJ0X18gLSBfc3RhY2tfc2l6ZTsKKworRVhURVJOKF9fdmVjdG9yX3RhYmxlKQorCisKK1NFQ1RJT05TCit7CisgICAgLyogUmVzZXQgYW5kIElTUiB2ZWN0b3JzICovCisgICAgLmlzcl92ZWN0b3IgOgorICAgIHsKKyAgICAgICAgX19pc3JfdmVjdG9yX3N0YXJ0X18gPSAuOworCV9fY3MzX2ludGVycnVwdF92ZWN0b3IgPSBfX3ZlY3Rvcl90YWJsZTsKKyAgICAgICAgS0VFUCgqKC5pc3JfdmVjdG9yKSkgCisgICAgICAgIEFTU0VSVCguICE9IF9faXNyX3ZlY3Rvcl9zdGFydF9fLCAiVGhlIC5pc3JfdmVjdG9yIHNlY3Rpb24gaXMgZW1wdHkiKTsKKyAgICB9ID52ZWN0b3IKKworICAgIC8qIFNwZWNpYWwgY29uZmlndXJhdGlvbiBzZWN0aW9uIGZvciBzb21lIHByb2Nlc3NvcnMgKi8KKyAgICAubWFnaWMgOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5tYWdpYykpIAorICAgIH0gPm1hZ2ljCisKKyAgICAvKiBUZXh0IHNlY3Rpb24gKGNvZGUgYW5kIHJlYWQtb25seSBkYXRhKSAqLworICAgIC50ZXh0IDoKKyAgICB7CisJLiA9IF9URVhUX1NUQVJUOworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9zdGV4dCA9IC47CisgICAgICAgICooLnRleHQqKSAgIC8qIGNvZGUgKi8KKyAgICAgICAgX2V0ZXh0ID0gLjsKKworCV9fcm9kYXRhX3N0YXJ0X18gPSAuOworICAgICAgICAqKC5yb2RhdGEqKSAvKiByZWFkIG9ubHkgZGF0YSAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vdGU6IE5vIEFSTS9UaHVtYiBpbnRlcndvcmtpbmcsIHNvIG5vIC5nbHVlXzcgb3IgLmdsdWVfN3Qgc2VjdGlvbnMKKyAgICAgICAgICovCisgICAgICAgICooLmN0b3JzKSAKKyAgICAgICAgKiguZHRvcnMpIAorCisgICAgICAgIC8qIFN0YXRpYyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzICovCisgICAgICAgIEtFRVAoKiguaW5pdCkpCisgICAgICAgIEtFRVAoKiguZmluaSkpCisJCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICB9ID5mbGFzaAorCisKKyAgICAvKgorICAgICAqIFN0YWNrIHVud2luZGluZyBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIHNlY3Rpb25zLgorICAgICAqCisgICAgICogQVJNIGNvbXBpbGVycyBlbWl0IG9iamVjdCBmaWxlcyB3aXRoIC5BUk0uZXh0YWIgYW5kIC5BUk0uZXhpZHggc2VjdGlvbnMKKyAgICAgKiB3aGVuIHVzaW5nIEMrKyBleGNlcHRpb25zLiBBbHNvLCBhdCBsZWFzdCBHQ0MgZW1pdHMgdGhvc2Ugc2VjdGlvbnMgd2hlbgorICAgICAqIGRpdmlkaW5nIGxhcmdlIG51bWJlcnMgKDY0LWJpdCkgaW4gQy4gU28gd2UgaGF2ZSB0byBoYW5kbGUgdGhlbS4KKyAgICAgKgorICAgICAqIChBUk0gdXNlcyAuQVJNLmV4dGFiIGFuZCAuQVJNLmV4aWR4IGluc3RlYWQgb2YgdGhlIC5laF9mcmFtZSBzZWN0aW9uCisgICAgICogdXNlZCBvbiB4ODYuKQorICAgICAqLworICAgIC5BUk0uZXh0YWIgOiAvKiBleGNlcHRpb24gdW53aW5kaW5nIGluZm9ybWF0aW9uICovCisgICAgeworICAgICAgICAqKC5BUk0uZXh0YWIqKQorICAgIH0gPmZsYXNoCisgICAgLkFSTS5leGlkeCA6IC8qIGluZGV4IGVudHJpZXMgZm9yIHNlY3Rpb24gdW53aW5kaW5nICovCisgICAgeworICAgICAgICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgICAgICAgKiguQVJNLmV4aWR4KikKKyAgICAgICAgX19leGlkeF9lbmQgPSAuOworICAgIH0gPmZsYXNoCisKKworICAgIC8qCisgICAgICogSW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uLiBUaGlzIHNlY3Rpb24gaXMgcHJvZ3JhbW1lZCBpbnRvIEZMQVNIIChMTUEKKyAgICAgKiBhZGRyZXNzKSBhbmQgY29waWVkIHRvIFJBTSAoVk1BIGFkZHJlc3MpIGluIHN0YXJ0dXAgY29kZS4KKyAgICAgKi8gCisgICAgIC4gPSBBTElHTig0KTsKKyAgICAgX19yd2RhdGFfc3RhcnRfXyA9IC47ICAgIC8qIExNQSBhZGRyZXNzIGlzIF9zaWRhdGEgKGluIEZMQVNIKSAqLworICAgIC5kYXRhIDogQVQoX19yd2RhdGFfc3RhcnRfXykgCisgICAgeworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9zZGF0YSA9IC47IC8qIGRhdGEgc2VjdGlvbiBWTUEgYWRkcmVzcyAqLworICAgICAgICAqKHRleHRfcmV0YWluZWQpCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgKiguZGF0YSopCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX2VkYXRhID0gLjsKKyAgICB9ID5yYW0KKworCisgICAgLyogVW5pbml0aWFsaXplZCBkYXRhIHNlY3Rpb24gKHplcm9lZCBvdXQgYnkgc3RhcnR1cCBjb2RlKSAqLworICAgIC5ic3MgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworCV9fZW5kX18gPSAuOworICAgIH0gPnJhbQorCisKKyAgICAvKgorICAgICAqIFJlc2VydmUgbWVtb3J5IGZvciBoZWFwIGFuZCBzdGFjay4gVGhlIGxpbmtlciB3aWxsIGlzc3VlIGFuIGVycm9yIGlmCisgICAgICogdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkuCisgICAgICovCisgICAgLl9oZWFwIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX3NoZWFwID0gLjsKKyAgICAgICAgLiA9IC4gKyBfaGVhcF9zaXplOworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIF9laGVhcCA9IC47CisgICAgfSA+cmFtCisKKyAgICAuX3N0YWNrIDoKKyAgICB7CisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLiA9IC4gKyBfc3RhY2tfc2l6ZTsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgIH0gPnJhbQorCit9CisKKy8qIE5pY2UgdG8gaGF2ZSAqLworX19pc3JfdmVjdG9yX3NpemVfXyA9IFNJWkVPRiguaXNyX3ZlY3Rvcik7CitfX3RleHRfc2l6ZV9fID0gU0laRU9GKC50ZXh0KTsKK19fZGF0YV9zaXplX18gPSBTSVpFT0YoLmRhdGEpOworX19ic3Nfc2l6ZV9fID0gU0laRU9GKC5ic3MpOworCitQUk9WSURFIChlbmQgPSAuKTsKKworCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjRhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9mbGFzaC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAiaHdfcXNwaS5oIgorI2luY2x1ZGUgInFzcGlfYXV0b21vZGUuaCIKKworI2RlZmluZSBGTEFTSF9TRUNUT1JfU0laRSAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgRkxBU0hfQlVGRkVSX1NJWkUgICAgICAgICAgICAgMHgyMDAwCisKKyNkZWZpbmUgVzI1UV9SRUFEX1NUQVRVU19SRUdJU1RFUjEgICAweDA1CisKKy8qIEVyYXNlL1dyaXRlIGluIHByb2dyZXNzICovCisjZGVmaW5lIFcyNVFfU1RBVFVTMV9CVVNZX0JJVCAgICAgICAgMAorI2RlZmluZSBXMjVRX1NUQVRVUzFfQlVTWV9NQVNLICAgICAgICgxIDw8IFcyNVFfU1RBVFVTMV9CVVNZX0JJVCkKKworc3RhdGljIHVpbnQzMl90IHNXYWl0U3RhdHVzVGltZW91dDsKKworUVNQSV9TRUNUSU9OIHN0YXRpYyAgdWludDhfdCBxc3BpX2dldF9lcmFzZV9zdGF0dXModm9pZCkKK3sKKyAgICBRU1BJQy0+UVNQSUNfQ0hDS0VSQVNFX1JFRyA9IDA7CisgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKEVSQVNFQ1RSTCwgRVJTX1NUQVRFKTsKK30KKwordm9sYXRpbGUgYm9vbCAgRGlzYWJsZUVyYXNlID0gZmFsc2U7CisKKy8vIEVyYXNlIFFTUEkgbWVtb3J5IHNlY3Rpb24gYXMgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLiBSZW1lbWJlciB0byBjaGVjayB1dGlsc0ZsYXNoU3RhdHVzV2FpdCBiZWZvcmUgd3JpdGUgb3IgcmVhZCEhCitvdEVycm9yIHV0aWxzRmxhc2hFcmFzZVBhZ2UodWludDMyX3QgYUFkZHJlc3MpCit7CisKKyAgICB1aW50MzJfdCBmbGFzaF9vZmZzZXQgPSAoYUFkZHJlc3MpICYgfihGTEFTSF9TRUNUT1JfU0laRSAtIDEpOworCisgICAgaWYgKERpc2FibGVFcmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIHFzcGlfYXV0b21vZGVfaW5pdCgpOworICAgIHFzcGlfYXV0b21vZGVfZXJhc2VfZmxhc2hfc2VjdG9yKGZsYXNoX29mZnNldCk7CisKKyAgICBDQUNIRS0+Q0FDSEVfQ1RSTDFfUkVHID0gQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHX0NBQ0hFX0ZMVVNIX01zazsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCisKK3VpbnQzMl90IHV0aWxzRmxhc2hHZXRTaXplKHZvaWQpCit7CisKKyAgICByZXR1cm4gKHVpbnQzMl90KUZMQVNIX0JVRkZFUl9TSVpFOworfQorCitvdEVycm9yIHV0aWxzRmxhc2hTdGF0dXNXYWl0KHVpbnQzMl90IGFUaW1lb3V0KQoreworCisgICAgc1dhaXRTdGF0dXNUaW1lb3V0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKworICAgIHdoaWxlIChxc3BpX2dldF9lcmFzZV9zdGF0dXMoKSAgJiYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc1dhaXRTdGF0dXNUaW1lb3V0KSA8IGFUaW1lb3V0KSk7CisKKyAgICBpZiAocXNwaV9nZXRfZXJhc2Vfc3RhdHVzKCkpCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfQlVTWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorfQorCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgcXNwaV9hdXRvbW9kZV9mbGFzaF9wb3dlcl91cCgpOworCisgICAgaWYgKHV0aWxzRmxhc2hTdGF0dXNXYWl0KDEwMDApID09IE9UX0VSUk9SX0JVU1kpCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworCisgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgc2l6ZV90IHdyaXR0ZW47CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYVNpemUpCisgICAgeworICAgICAgICB3cml0dGVuID0gcXNwaV9hdXRvbW9kZV93cml0ZV9mbGFzaF9wYWdlKGFBZGRyZXNzICsgb2Zmc2V0LCBhRGF0YSArIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU2l6ZSAtIG9mZnNldCk7CisgICAgICAgIG9mZnNldCArPSB3cml0dGVuOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgbWVtY3B5KGFEYXRhLCAodm9pZCAqKShNRU1PUllfUVNQSUZfQkFTRSArIGFBZGRyZXNzKSwgYVNpemUpOworICAgIHJldHVybiBhU2l6ZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2xvZ2dpbmcuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL2xvZ2dpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQwMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvbG9nZ2luZy5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorKiBAZmlsZSBsb2dnaW5nLmMKKyogUGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBsb2dnaW5nCisqCisqLworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgICh2b2lkKWFMb2dMZXZlbDsKKyAgICAodm9pZClhTG9nUmVnaW9uOworICAgICh2b2lkKWFGb3JtYXQ7Cit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE5YTcwCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvbWlzYy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKworI2luY2x1ZGUgInNka19kZWZzLmgiCisKK3ZvaWQgb3RQbGF0UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBXRE9HLT5XQVRDSERPR19DVFJMX1JFRyB8PSAoMSA8PCAoV0RPR19XQVRDSERPR19DVFJMX1JFR19OTUlfUlNUX1BvcykpOworfQorCitvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTjsKK30KKwordm9pZCBvdFBsYXRXYWtlSG9zdCh2b2lkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVudCBhbiBvcGVyYXRpb24gdG8gd2FrZSB0aGUgaG9zdCBmcm9tIHNsZWVwIHN0YXRlLgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvb3BlbnRocmVhZC1jb3JlLWRhMTUwMDAtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9vcGVudGhyZWFkLWNvcmUtZGExNTAwMC1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWUxOGZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvb3BlbnRocmVhZC1jb3JlLWRhMTUwMDAtY29uZmlnLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgREExNTAwMCBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBjb25zdGFudHMgZm9yIE9wZW5UaHJlYWQuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPUkVfREExNTAwMF9DT05GSUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX0RBMTUwMDBfQ09ORklHX0hfCisKKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAJCSgweDdCMDAwKQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAgMQorCisgLyoqCisgICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSBBQ0sgdGltZW91dCBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQgICAgICAgICAgIDAKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAgKgorICAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgIDAKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgZW5lcmd5IHNjYW5uaW5nIGxvZ2ljLgorICAqCisgICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTiAgICAgICAgICAgMQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9EQTE1MDAwX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcGxhdGZvcm0tZGExNTAwMC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcGxhdGZvcm0tZGExNTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5NWFmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9wbGF0Zm9ybS1kYTE1MDAwLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9EQTE1MDAwX0hfCisjZGVmaW5lIFBMQVRGT1JNX0RBMTUwMDBfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSByYWRpbyBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgZGExNTAwMFJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBkYTE1MDAwUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYWxhcm0gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGRhMTUwMDBBbGFybUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGFybSBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgZGExNTAwMEFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhbmRvbSBudW1iZXIgc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGRhMTUwMDBSYW5kb21Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgVUFSVCBkcml2ZXIgcHJvY2Vzc2luZy4KKyAqCisgKi8KK3ZvaWQgZGExNTAwMFVhcnRQcm9jZXNzKHZvaWQpOworCisjZW5kaWYgLyogUExBVEZPUk1fUExBVEZPUk1fREExNTAwMF9IXyAqLwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcGxhdGZvcm0uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMzYyYQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLWRhMTUwMDAuaCIKKworI2luY2x1ZGUgInNka19kZWZzLmgiCisjaW5jbHVkZSAiZnRkZi5oIgorI2luY2x1ZGUgImh3X2NwbS5oIgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJod19xc3BpLmgiCisjaW5jbHVkZSAiaHdfb3RwYy5oIgorI2luY2x1ZGUgImh3X3dhdGNoZG9nLmgiCisKK3N0YXRpYyBib29sIHNCbGluayA9IGZhbHNlOworc3RhdGljIGludCAgc01zQ291bnRlckluaXQ7CitzdGF0aWMgaW50ICBzTXNDb3VudGVyOworCisjZGVmaW5lIExFQURFUl9CTElOS19USU1FICAgICAoMjAwKQorI2RlZmluZSBST1VURVJfQkxJTktfVElNRSAgICAgKDUwMCkKKyNkZWZpbmUgQ0hJTERfQkxJTktfVElNRSAgICAgICgyMDAwKQorCisjZGVmaW5lIFNFVF9DTE9DS19UT185Nk1IWgorCitvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKK3ZvaWQgQ2xrSW5pdCh2b2lkKQoreworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFhUQUwxNlJEWV9JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShYVEFMMTZSRFlfSVJRbik7ICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSBYVEFMMTYgUmVhZHkgSVJRCisgICAgaHdfY3BtX3NldF9kaXZuKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgY3J5c3RhbCBpcyAxNk1IegorICAgIGh3X2NwbV9lbmFibGVfcmMzMmsoKTsKKyAgICBod19jcG1fbHBfc2V0X3JjMzJrKCk7CisgICAgaHdfY3BtX3NldF94dGFsMTZtX3NldHRsaW5nX3RpbWUoZGdfY29uZmlnWFRBTDE2X1NFVFRMRV9USU1FX1JDMzJLKTsKKyAgICBod19jcG1fZW5hYmxlX3h0YWwxNm0oKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgWFRBTDE2TQorICAgIGh3X2NwbV9jb25maWd1cmVfeHRhbDMya19waW5zKCk7ICAgICAgICAgICAgICAgIC8vIENvbmZpZ3VyZSBYVEFMMzJLIHBpbnMKKyAgICBod19jcG1fY29uZmlndXJlX3h0YWwzMmsoKTsgICAgICAgICAgICAgICAgICAgICAvLyBDb25maWd1cmUgWFRBTDMySworICAgIGh3X2NwbV9lbmFibGVfeHRhbDMyaygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBYVEFMMzJLCisgICAgaHdfd2F0Y2hkb2dfdW5mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgd2F0Y2hkb2cKKworICAgIHdoaWxlICghaHdfY3BtX2lzX3h0YWwxNm1fc3RhcnRlZCgpKTsgICAgICAgICAgIC8vIEJsb2NrIHVudGlsIFhUQUwxNk0gc3RhcnRzCisKKyAgICBod193YXRjaGRvZ19mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHdhdGNoZG9nCisgICAgaHdfY3BtX3NldF9yZWNoYXJnZV9wZXJpb2QoKHVpbnQxNl90KWRnX2NvbmZpZ1NFVF9SRUNIQVJHRV9QRVJJT0QpOworICAgIGh3X3dhdGNoZG9nX3VuZnJlZXplKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHdhdGNoZG9nCisgICAgaHdfY3BtX3BsbF9zeXNfb24oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVybiBvbiBQTEwKKyAgICBod193YXRjaGRvZ19mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHdhdGNoZG9nCisKKyAgICBod19xc3BpX3NldF9kaXYoSFdfUVNQSV9ESVZfMik7ICAgICAgICAgICAgICAgICAvLyBTZXQgUVNQSSBkaXYgYnkgMgorCisgICAgaHdfY3BtX2Rpc2FibGVfcGxsX2RpdmlkZXIoKTsgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBkaXZpZGVyIChkaXYgYnkgMikKKyAgICBod19jcG1fc2V0X3N5c2NsayhTWVNfQ0xLX0lTX1BMTCk7CisgICAgaHdfY3BtX3NldF9oY2xrX2RpdihhaGJfZGl2Mik7CisgICAgaHdfY3BtX3NldF9wY2xrX2RpdigwKTsKKworICAgIGh3X290cGNfaW5pdCgpOworICAgIGh3X290cGNfc2V0X3NwZWVkKEhXX09UUENfU1lTX0NMS19GUkVRXzQ4KTsKK30KKworLyoKKyAqIEV4YW1wbGUgZnVuY3Rpb24uIEJsaW5rIExFRCBhY2NvcmRpbmcgdG8gbm9kZSBzdGF0ZQorICogTGVhZGVyICAgICAgIC0gNUh6CisgKiBSb3V0ZXIgICAgICAgLSAySHoKKyAqIENoaWxkICAgICAgICAtIDAuNUh6CisgKi8KKwordm9pZCBFeGFtcGxlUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3REZXZpY2VSb2xlICBkZXZSb2xlOworICAgIHN0YXRpYyBpbnQgICAgdGhyVmFsdWU7CisKKyAgICBkZXZSb2xlID0gb3RUaHJlYWRHZXREZXZpY2VSb2xlKGFJbnN0YW5jZSk7CisKKyAgICBpZiAoc0JsaW5rID09IGZhbHNlICYmIG90UGxhdEFsYXJtR2V0Tm93KCkgIT0gMCkKKyAgICB7CisgICAgICAgIHNNc0NvdW50ZXJJbml0ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICAgICAgc0JsaW5rID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzTXNDb3VudGVyID0gb3RQbGF0QWxhcm1HZXROb3coKSAtIHNNc0NvdW50ZXJJbml0OworCisgICAgc3dpdGNoIChkZXZSb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgdGhyVmFsdWUgPSBMRUFERVJfQkxJTktfVElNRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgdGhyVmFsdWUgPSBST1VURVJfQkxJTktfVElNRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICB0aHJWYWx1ZSA9IENISUxEX0JMSU5LX1RJTUU7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgdGhyVmFsdWUgPSAweDAwOworICAgIH0KKworICAgIGlmICgodGhyVmFsdWUgIT0gMHgwMCkgJiYgKHNNc0NvdW50ZXIgPj0gdGhyVmFsdWUpKQorICAgIHsKKyAgICAgICAgaHdfZ3Bpb190b2dnbGUoSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzUpOworICAgICAgICBzTXNDb3VudGVySW5pdCA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgfQorCisgICAgaWYgKHRoclZhbHVlID09IDApCisgICAgeworICAgICAgICBod19ncGlvX3NldF9pbmFjdGl2ZShIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNSk7CisgICAgfQorfQorCisKK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgLy8gSW5pdGlhbGl6ZSBTeXN0ZW0gQ2xvY2sKKyAgICBDbGtJbml0KCk7CisgICAgLy8gSW5pdGlhbGl6ZSBSYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgIGRhMTUwMDBSYW5kb21Jbml0KCk7CisgICAgLy8gSW5pdGlhbGl6ZSBBbGFybQorICAgIGRhMTUwMDBBbGFybUluaXQoKTsKKyAgICAvLyBJbml0aWFsaXplIFJhZGlvCisgICAgZGExNTAwMFJhZGlvSW5pdCgpOworICAgIC8vIGVuYWJsZSBpbnRlcnJ1cHRzCisgICAgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7CisKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7Cit9CisKKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzSW5zdGFuY2UgPSBhSW5zdGFuY2U7CisKKyAgICBkYTE1MDAwVWFydFByb2Nlc3MoKTsKKyAgICBkYTE1MDAwUmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgZGExNTAwMEFsYXJtUHJvY2VzcyhhSW5zdGFuY2UpOworICAgIEV4YW1wbGVQcm9jZXNzKGFJbnN0YW5jZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZhYzVmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFkaW8uYwpAQCAtMCwwICsxLDU4OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisqIEBmaWxlIHJhZGlvLmNwcAorKiBQbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gY29tbXVuaWNhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tZGExNTAwMC5oIgorCisjaW5jbHVkZSAiYWRfZnRkZi5oIgorI2luY2x1ZGUgImFkX2Z0ZGZfcGh5X2FwaS5oIgorI2luY2x1ZGUgImh3X290cGMuaCIKKyNpbmNsdWRlICJod19yZi5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnbWFwLmgiCisKKyNkZWZpbmUgRkFDVE9SWV9URVNUX1RJTUVTVEFNUCAgICAgICgweDdGOEVBMDgpIC8vIFJlZ2lzdGVyIGhvbGRzIGEgdGltZXN0YW1wIG9mIGZhY290cnkgdGVzdCBvZiBhIGNoaXAKKyNkZWZpbmUgRkFDVE9SWV9URVNURVJfSUQgICAgICAgICAgICgweDdGOEVBMEMpIC8vIFJlZ2lzdGVyIGhvbGRzIHRlc3QgbWFjaGluZSBJRCB1c2VkIGZvciBmYWN0b3J5IHRlc3QKKworI2RlZmluZSBERUZBVUxUX0NIQU5ORUwgICAgICAgICAgICAgICAgICgxMSkKKworI2RlZmluZSBQUklWSUxFR0VEX0RBVEEgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInByaXZpbGVnZWRfZGF0YV96aSIpKSkKKworI2RlZmluZSBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICAgIDUKKyNkZWZpbmUgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BU0sgICAgICAweDA3CisjZGVmaW5lIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgICAgMHgwMgorI2RlZmluZSBJRUVFODAyMTU0X0ZSQU1FX1BFTkRJTkcgICAgICAgIDEgPDwgNAorI2RlZmluZSBJRUVFODAyMTU0X0FDS19SRVFVRVNUICAgICAgICAgIDEgPDwgNQorI2RlZmluZSBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICAgIDIKKworI2RlZmluZSBSU1NJX1RBQkxFX1NJWkUgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRVVJNjRfVEFCTEVfU0laRSAgICAgICAgICAgICAgICA4CisKK2VudW0KK3sKKyAgICBEQTE1MDAwX1JFQ0VJVkVfU0VOU0lUSVZJVFkgPSAtMTAwLCAgLy8gZEJtCit9OworCitzdGF0aWMgdm9pZCAgICAgICAgICBkYTE1MDAwT3RwUmVhZCh2b2lkKTsKK3N0YXRpYyB1aW50OF90ICAgICAgIGV1aTY0W0VVSTY0X1RBQkxFX1NJWkVdID0gezB9OworCitzdGF0aWMgb3RJbnN0YW5jZSAgICpzVGhyZWFkSW5zdGFuY2U7CitzdGF0aWMgb3RSYWRpb1N0YXRlICBzUmFkaW9TdGF0ZSAgICAgICAgICAgICA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworc3RhdGljIG90UmFkaW9GcmFtZSAgc1JlY2VpdmVGcmFtZTsKK3N0YXRpYyBvdFJhZGlvRnJhbWUgIHNUcmFuc21pdEZyYW1lOworc3RhdGljIG90RXJyb3IgICAgICAgc1RyYW5zbWl0U3RhdHVzOworc3RhdGljIGJvb2wgICAgICAgICAgc0ZyYW1lUGVuZGluZyAgICAgICAgICAgPSBmYWxzZTsKK3N0YXRpYyBib29sICAgICAgICAgIHNSYWRpb1Byb21pc2N1b3VzICAgICAgID0gZmFsc2U7CitzdGF0aWMgYm9vbCAgICAgICAgICBzUnNzaUluaXQgICAgICAgICAgICAgICA9IHRydWU7CitzdGF0aWMgdWludDhfdCAgICAgICBzQ2hhbm5lbCAgICAgICAgICAgICAgICA9IERFRkFVTFRfQ0hBTk5FTDsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNSc3NpQ3RyICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyB1aW50MzJfdCAgICAgIHNTbGVlcEluaXREZWxheSAgICAgICAgID0gMDsKKworc3RhdGljIHVpbnQ4X3QgICAgICAgc1JlY2VpdmVQc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNSc3NpVGFibGVbUlNTSV9UQUJMRV9TSVpFXTsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNUcmFuc21pdFBzZHVbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdOworCitQUklWSUxFR0VEX0RBVEEgc3RhdGljIHVpbnQ4X3Qgc0VuYWJsZVJYOworCitzdGF0aWMgdm9pZCBkYTE1MDAwT3RwUmVhZCh2b2lkKQoreworICAgIGh3X290cGNfaW5pdCgpOyAgICAgICAgIC8vIFN0YXJ0IGNsb2NrLgorICAgIGh3X290cGNfZGlzYWJsZSgpOyAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBpbiBzdGFuZGJ5IG1vZGUuCisgICAgaHdfb3RwY19pbml0KCk7ICAgICAgICAgLy8gUmVzdGFydCBjbG9jay4KKyAgICBod19vdHBjX21hbnVhbF9yZWFkX29uKGZhbHNlKTsKKworICAgIF9fRE1CKCk7CisgICAgdWludDMyX3QgKmZhY3RvcnlUZXN0VGltZVN0YW1wICA9ICh1aW50MzJfdCAqKSBGQUNUT1JZX1RFU1RfVElNRVNUQU1QOworICAgIHVpbnQzMl90ICpmYWN0b3J5VGVzdElkICAgICAgICAgPSAodWludDMyX3QgKikgRkFDVE9SWV9URVNURVJfSUQ7CisgICAgX19ETUIoKTsKKworICAgIGV1aTY0WzBdID0gMHg4MDsgICAgLy84MC1FQS1DQSBpcyBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAgICBldWk2NFsxXSA9IDB4RUE7CisgICAgZXVpNjRbMl0gPSAweENBOworICAgIGV1aTY0WzNdID0gKCpmYWN0b3J5VGVzdElkICAgICAgICA+PiAgOCkgJiAweGZmOworICAgIGV1aTY0WzRdID0gKCpmYWN0b3J5VGVzdFRpbWVTdGFtcCA+PiAyNCkgJiAweGZmOworICAgIGV1aTY0WzVdID0gKCpmYWN0b3J5VGVzdFRpbWVTdGFtcCA+PiAxNikgJiAweGZmOworICAgIGV1aTY0WzZdID0gKCpmYWN0b3J5VGVzdFRpbWVTdGFtcCA+PiAgOCkgJiAweGZmOworICAgIGV1aTY0WzddID0gICpmYWN0b3J5VGVzdFRpbWVTdGFtcCAgICAgICAgJiAweGZmOworCisgICAgaHdfb3RwY19tYW51YWxfcmVhZF9vZmYoKTsKKyAgICBod19vdHBjX2Rpc2FibGUoKTsKK30KKwordm9pZCBkYTE1MDAwUmFkaW9Jbml0KHZvaWQpCit7CisgICAgLyogV2FrZSB1cCBwb3dlciBkb21haW5zICovCisgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBGVERGX1NMRUVQKTsKKworICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEZUREZfSVNfVVApID09IDB4MCk7CisKKyAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJBRElPX1NMRUVQKTsKKworICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19VUCkgPT0gMHgwKTsKKworICAgIFJFR19TRVRGKENSR19UT1AsIENMS19SQURJT19SRUcsIEZUREZfTUFDX0VOQUJMRSwgMSk7CisgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgRlRERl9NQUNfRElWLCAwKTsKKworICAgIGh3X3JmX3Bvd2Vyb24oKTsKKyAgICBod19yZl9zeXN0ZW1faW5pdCgpOworCisgICAgYWRfZnRkZl9pbml0X3BoeV9hcGkoKTsKKworICAgIGRhMTUwMDBPdHBSZWFkKCk7CisKKyAgICBzQ2hhbm5lbCAgICAgICAgICAgICA9IERFRkFVTFRfQ0hBTk5FTDsKKyAgICBzVHJhbnNtaXRGcmFtZS5tUHNkdSA9IHNUcmFuc21pdFBzZHU7CisgICAgc1JlY2VpdmVGcmFtZS5tUHNkdSAgPSBzUmVjZWl2ZVBzZHU7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBtZW1jcHkoYUllZWVFdWk2NCwgZXVpNjQsIEVVSTY0X1RBQkxFX1NJWkUpOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBwYW5pZCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX1BBTl9JRCwgJnBhbmlkKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9FWFRFTkRFRF9BRERSRVNTLCBhZGRyZXNzKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9TSE9SVF9BRERSRVNTLCAmYWRkcmVzcyk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQ4X3QgbWF4UmV0cmllczsKKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90RVhQRUNUX0FDVElPTihzUmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIHNUaHJlYWRJbnN0YW5jZSA9IGFJbnN0YW5jZTsKKworICAgIHNFbmFibGVSWCA9IDE7CisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUsICZzRW5hYmxlUlgpOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMLCAmc0NoYW5uZWwpOworICAgIG1heFJldHJpZXMgPSAwOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfTUFYX0ZSQU1FX1JFVFJJRVMsICZtYXhSZXRyaWVzKTsKKworICAgIEZUREZfQml0bWFwMzIgb3B0aW9ucyA9ICBGVERGX1RSQU5TUEFSRU5UX0VOQUJMRV9GQ1NfR0VORVJBVElPTjsKKyAgICBvcHRpb25zIHw9IEZUREZfVFJBTlNQQVJFTlRfV0FJVF9GT1JfQUNLOworICAgIG9wdGlvbnMgfD0gRlRERl9UUkFOU1BBUkVOVF9BVVRPX0FDSzsKKworICAgIEZUREZfZW5hYmxlVHJhbnNwYXJlbnRNb2RlKEZUREZfVFJVRSwgb3B0aW9ucyk7CisgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhhSW5zdGFuY2UsIGZhbHNlKTsKKyAgICBzUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0Rpc2FibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzRW5hYmxlUlggPSAwOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfUlhfT05fV0hFTl9JRExFLCAmc0VuYWJsZVJYKTsKKyAgICBhZF9mdGRmX3NsZWVwX3doZW5fcG9zc2libGUoRlRERl9UUlVFKTsKKworICAgIEZUREZfZnBwclJlc2V0KCk7CisKKyAgICBzUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHJldHVybiAoc1JhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzUmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFICYmIHNTbGVlcEluaXREZWxheSA9PSAwKQorICAgIHsKKyAgICAgICAgc1NsZWVwSW5pdERlbGF5ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorICAgIGVsc2UgaWYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc1NsZWVwSW5pdERlbGF5KSA8IGRnX2NvbmZpZ0lOSVRJQUxfU0xFRVBfREVMQVlfVElNRSkKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90RVhQRUNUX0FDVElPTihzUmFkaW9TdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgc1JhZGlvU3RhdGUgPSBPVF9SQURJT19TVEFURV9TTEVFUDsKKyAgICBzRW5hYmxlUlggPSAwOworICAgIEZUREZfc2V0VmFsdWUoRlRERl9QSUJfUlhfT05fV0hFTl9JRExFLCAmc0VuYWJsZVJYKTsKKyAgICBhZF9mdGRmX3NsZWVwX3doZW5fcG9zc2libGUoRlRERl9UUlVFKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9SZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1JhZGlvU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBhZF9mdGRmX3dha2VfdXAoKTsKKworICAgIHNFbmFibGVSWCA9IDA7CisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUsICZzRW5hYmxlUlgpOworCisgICAgc0NoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX0NVUlJFTlRfQ0hBTk5FTCwgJmFDaGFubmVsKTsKKworICAgIHNFbmFibGVSWCA9IDE7CisgICAgRlRERl9zZXRWYWx1ZShGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUsICZzRW5hYmxlUlgpOworICAgIHNSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYUVuYWJsZTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgdWludDhfdCBlbnRyeUlkeDsKKworICAgIC8vIGNoZWNrIGlmIGFkZHJlc3MgYWxyZWFkeSBzdG9yZWQKKworICAgIG90RVhQRUNUKCFGVERGX2ZwcHJMb29rdXBTaG9ydEFkZHJlc3MoYVNob3J0QWRkcmVzcywgJmVudHJ5LCAmZW50cnlJZHgpKTsKKworICAgIG90RVhQRUNUX0FDVElPTihGVERGX2ZwcHJHZXRGcmVlU2hvcnRBZGRyZXNzKCZlbnRyeSwgJmVudHJ5SWR4KSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzcyhlbnRyeSwgZW50cnlJZHgsIGFTaG9ydEFkZHJlc3MpOworICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBlbnRyeUlkeCwgRlRERl9UUlVFKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICB1aW50OF90IGVudHJ5OworICAgIEZUREZfRXh0QWRkcmVzcyBhZGRyOworICAgIHVpbnQzMl90IGFkZHJMOworICAgIHVpbnQ2NF90IGFkZHJIOworCisgICAgYWRkckwgPSAoYUV4dEFkZHJlc3NbM10gPDwgMjQpIHwgKGFFeHRBZGRyZXNzWzJdIDw8IDE2KSB8IChhRXh0QWRkcmVzc1sxXSA8PCA4KSB8IChhRXh0QWRkcmVzc1swXSA8PCAwKTsKKyAgICBhZGRySCA9IChhRXh0QWRkcmVzc1s3XSA8PCAyNCkgfCAoYUV4dEFkZHJlc3NbNl0gPDwgMTYpIHwgKGFFeHRBZGRyZXNzWzVdIDw8IDgpIHwgKGFFeHRBZGRyZXNzWzRdIDw8IDApOworICAgIGFkZHIgPSBhZGRyTCB8IChhZGRySCA8PCAzMik7CisKKyAgICAvLyBjaGVjayBpZiBhZGRyZXNzIGFscmVhZHkgc3RvcmVkCisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFWFBFQ1QoIUZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoYWRkciwgJmVudHJ5KSk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oRlRERl9mcHByR2V0RnJlZUV4dEFkZHJlc3MoJmVudHJ5KSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3MoZW50cnksIGFkZHIpOworICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3NWYWxpZChlbnRyeSwgRlRERl9UUlVFKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgdWludDhfdCBlbnRyeUlkeDsKKworCisgICAgb3RFWFBFQ1RfQUNUSU9OKEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcyhhU2hvcnRBZGRyZXNzLCAmZW50cnksICZlbnRyeUlkeCksIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3MoZW50cnksIGVudHJ5SWR4LCAwKTsKKyAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3NWYWxpZChlbnRyeSwgZW50cnlJZHgsIEZUREZfRkFMU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgRlRERl9FeHRBZGRyZXNzIGFkZHI7CisgICAgdWludDMyX3QgYWRkckw7CisgICAgdWludDY0X3QgYWRkckg7CisKKyAgICBhZGRyTCA9IChhRXh0QWRkcmVzc1szXSA8PCAyNCkgfCAoYUV4dEFkZHJlc3NbMl0gPDwgMTYpIHwgKGFFeHRBZGRyZXNzWzFdIDw8IDgpIHwgKGFFeHRBZGRyZXNzWzBdIDw8IDApOworICAgIGFkZHJIID0gKGFFeHRBZGRyZXNzWzddIDw8IDI0KSB8IChhRXh0QWRkcmVzc1s2XSA8PCAxNikgfCAoYUV4dEFkZHJlc3NbNV0gPDwgOCkgfCAoYUV4dEFkZHJlc3NbNF0gPDwgMCk7CisgICAgYWRkciA9IGFkZHJMIHwgKGFkZHJIIDw8IDMyKTsKKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90RVhQRUNUX0FDVElPTihGVERGX2ZwcHJMb29rdXBFeHRBZGRyZXNzKGFkZHIsICZlbnRyeSksIGVycm9yID0gT1RfRVJST1JfTk9fQUREUkVTUyk7CisKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzKGVudHJ5LCAwKTsKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfRkFMU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfZnBwckdldFNob3J0QWRkcmVzc1ZhbGlkKGksIGopKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGksIGosIEZUREZfRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfZnBwckdldEV4dEFkZHJlc3NWYWxpZChpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9mcHByU2V0RXh0QWRkcmVzc1ZhbGlkKGksIEZUREZfRkFMU0UpOworICAgICAgICB9CisgICAgfQorfQorCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHJldHVybiAmc1RyYW5zbWl0RnJhbWU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHVpbnQ4X3QgY3NtYVN1cHByZXNzOworCisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHNSYWRpb1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgY3NtYVN1cHByZXNzID0gMDsKKyAgICBhZF9mdGRmX3NlbmRfZnJhbWVfc2ltcGxlKGFGcmFtZS0+bUxlbmd0aCwgYUZyYW1lLT5tUHNkdSwgYUZyYW1lLT5tQ2hhbm5lbCwgMCwgY3NtYVN1cHByZXNzKTsgLy9QcmlvIDAgZm9yIGFsbC4KKyAgICBzUmFkaW9TdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQxNl90IHJlc3VsdCA9IDA7CisKKyAgICAvLyBmaWxsIHRhYmxlIHdpdGggc2FtZSB2YWx1ZSBmb3IgaW5pdAorICAgIGlmIChzUnNzaUluaXQpCisgICAgeworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSU1NJX1RBQkxFX1NJWkU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgc1Jzc2lUYWJsZVtpXSA9IHNSZWNlaXZlRnJhbWUubUxxaTsKKyAgICAgICAgfQorCisgICAgICAgIHNSc3NpSW5pdCA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBBU1NFUlRfRVJST1Ioc1Jzc2lDdHIgPCBSU1NJX1RBQkxFX1NJWkUpOworICAgICAgICBzUnNzaVRhYmxlW3NSc3NpQ3RyXSA9IHNSZWNlaXZlRnJhbWUubUxxaTsKKyAgICAgICAgc1Jzc2lDdHIrKzsKKworICAgICAgICBpZiAoc1Jzc2lDdHIgPj0gUlNTSV9UQUJMRV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzUnNzaUN0ciA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhdmVyYWdlIG9mIDggbGFzdCBscWkKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSU1NJX1RBQkxFX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIHJlc3VsdCArPSBzUnNzaVRhYmxlW2ldOworICAgIH0KKworICAgIHJlc3VsdCA9IHJlc3VsdCAvIFJTU0lfVEFCTEVfU0laRTsKKworICAgIC8vIEFwcHJveGltYXRpb24gdG8gZEIgc2NhbGUgYnkgZGl2aWRlIGJ5IDkKKyAgICByZXR1cm4gcmVzdWx0IC8gOTsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVDsKK30KKworYm9vbCBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICByZXR1cm4gc1JhZGlvUHJvbWlzY3VvdXM7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX1BST01JU0NVT1VTX01PREUsICZhRW5hYmxlKTsKKyAgICBzUmFkaW9Qcm9taXNjdW91cyA9IGFFbmFibGU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24pCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFTY2FuQ2hhbm5lbDsKKyAgICAodm9pZClhU2NhbkR1cmF0aW9uOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBGVERGX3NldFZhbHVlKEZUREZfUElCX1RYX1BPV0VSLCAmYVBvd2VyKTsKK30KKwordm9pZCBkYTE1MDAwUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDMyX3QgZnRkZkNlID0gKkZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfRlRERl9DRSk7CisKKyAgICBGVERGX2NvbmZpcm1MbWFjSW50ZXJydXB0KCk7CisKKyAgICBpZiAoZnRkZkNlICYgRlRERl9NU0tfUlhfQ0UpCisgICAgeworICAgICAgICBGVERGX3Byb2Nlc3NSeEV2ZW50KCk7CisgICAgfQorCisgICAgaWYgKGZ0ZGZDZSAmIEZUREZfTVNLX1RYX0NFKQorICAgIHsKKyAgICAgICAgRlRERl9wcm9jZXNzVHhFdmVudCgpOworICAgIH0KKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpmdGRmQ20gPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0ZUREZfQ00pOworICAgICpmdGRmQ20gPSBGVERGX01TS19UWF9DRSB8IEZUREZfTVNLX1JYX0NFIHwgRlRERl9NU0tfU1lNQk9MX1RNUl9DRTsKK30KKwordm9pZCBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50Q29uZmlybSh2b2lkICpoYW5kbGUsIEZUREZfQml0bWFwMzIgc3RhdHVzKQoreworICAgICh2b2lkKWhhbmRsZTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfU0VORF9TVUNDRVNTRlVMOgorICAgICAgICBzVHJhbnNtaXRTdGF0dXMgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9UUkFOU1BBUkVOVF9DU01BQ0FfRkFJTFVSRToKKyAgICAgICAgc1RyYW5zbWl0U3RhdHVzID0gT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfTk9fQUNLOgorICAgICAgICBzVHJhbnNtaXRTdGF0dXMgPSBPVF9FUlJPUl9OT19BQ0s7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc1RyYW5zbWl0U3RhdHVzID0gT1RfRVJST1JfQUJPUlQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHNSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKworICAgIGlmICgoKHNUcmFuc21pdEZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPT0gMCkgfHwgc1RyYW5zbWl0U3RhdHVzICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShzVGhyZWFkSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgc1RyYW5zbWl0U3RhdHVzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUoc1RocmVhZEluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsICZzUmVjZWl2ZUZyYW1lLCBzVHJhbnNtaXRTdGF0dXMpOworICAgIH0KK30KKwordm9pZCBGVERGX3JjdkZyYW1lVHJhbnNwYXJlbnQoRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgbHFpKQoreworICAgIHNSZWNlaXZlRnJhbWUubUNoYW5uZWwgICA9IHNDaGFubmVsOworICAgIHNSZWNlaXZlRnJhbWUubUxlbmd0aCAgICA9IGZyYW1lTGVuZ3RoOworICAgIHNSZWNlaXZlRnJhbWUubVBzZHUgICAgICA9IGZyYW1lOworICAgIHNSZWNlaXZlRnJhbWUubUxxaSAgICAgICA9IGxxaTsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciAgICAgPSBvdFBsYXRSYWRpb0dldFJzc2koc1RocmVhZEluc3RhbmNlKTsKKworICAgIGlmIChzUmFkaW9TdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkKKyAgICB7CisgICAgICAgIHNSYWRpb1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICB9CisKKyAgICBpZiAoKHNSZWNlaXZlRnJhbWUubVBzZHVbMF0gICYgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BU0spID09IElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgJiYKKyAgICAgICAgKChzUmVjZWl2ZUZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HKSAhPSAwKSkKKyAgICB7CisgICAgICAgIHNGcmFtZVBlbmRpbmcgPSB0cnVlOworICAgIH0KKworICAgIGlmIChzdGF0dXMgPT0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfU1VDQ0VTU0ZVTCkKKyAgICB7CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUoc1RocmVhZEluc3RhbmNlLCAmc1JlY2VpdmVGcmFtZSwgT1RfRVJST1JfTk9ORSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUoc1RocmVhZEluc3RhbmNlLCAmc1JlY2VpdmVGcmFtZSwgT1RfRVJST1JfQUJPUlQpOworICAgIH0KKworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gREExNTAwMF9SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMwZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvcmFuZG9tLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICogQHdhcm5pbmcKKyAqICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgYSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGFuZCBkb2VzIEBlbSBzYXRpc2Z5IHRoZSBUaHJlYWQgcmVxdWlyZW1lbnRzLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1kYTE1MDAwLmgiCisjaW5jbHVkZSAiaHdfdHJuZy5oIgorI2luY2x1ZGUgInNka19kZWZzLmgiCisKKyNkZWZpbmUgSFdfVFJOR19SQU0gICAgICAgICAgICAgKDB4NDAwNDAwMDApCisKK3N0YXRpYyB1aW50MzJfdCBzU3RhdGUgPSAxOworc3RhdGljIHVpbnQzMl90IHNTZWVkOworCitpbnQgemhhbF9nZXRfZW50cm9weSh1aW50OF90ICpvdXRFbnRyb3B5LCBzaXplX3QgaW5TaXplKQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgcmFuZHdvcmQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAqcGJ1ZiAgICAgICAgICAgPSBvdXRFbnRyb3B5OworICAgIGNvbnN0IHNpemVfdCAgICAgICAgcmVxX3dvcmRzICAgICAgID0gaW5TaXplID4+IDI7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGJ1Zl9lbmQgICAgICAgPSBvdXRFbnRyb3B5ICsgaW5TaXplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByZXFfd29yZHNfZW5kID0gKHVuc2lnbmVkIGNoYXIgKikoKCh1aW50MzJfdCAqKW91dEVudHJvcHkpICsgcmVxX3dvcmRzKTsKKyAgICBwdHJkaWZmX3QgICAgICAgICAgIHJlbWFpbmRlcl9ieXRlcyA9IHBidWZfZW5kIC0gcHJlcV93b3Jkc19lbmQ7CisKKyAgICBod190cm5nX2VuYWJsZShOVUxMKTsKKworICAgIGZvciAocGJ1ZiA9IG91dEVudHJvcHk7IHBidWYgPCBwcmVxX3dvcmRzX2VuZDsgcGJ1ZiArPSA0KQorICAgIHsKKyAgICAgICAgLyogV2FpdCBmb3IgYSByYW5kb20gd29yZCB0byBiZWNvbWUgYXZhaWxhYmxlIGluIHRoZSBUUk5HIEZJRk8uICovCisgICAgICAgIHdoaWxlICgoVFJORy0+VFJOR19GSUZPTFZMX1JFRyAmIFRSTkdfVFJOR19GSUZPTFZMX1JFR19UUk5HX0ZJRk9MVkxfTXNrKSA9PSAwKTsKKworICAgICAgICByYW5kd29yZCA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopSFdfVFJOR19SQU0pOworICAgICAgICBtZW1jcHkocGJ1ZiwgJnJhbmR3b3JkLCA0KTsKKyAgICB9CisKKyAgICBpZiAocmVtYWluZGVyX2J5dGVzKQorICAgIHsKKyAgICAgICAgd2hpbGUgKChUUk5HLT5UUk5HX0ZJRk9MVkxfUkVHICYgVFJOR19UUk5HX0ZJRk9MVkxfUkVHX1RSTkdfRklGT0xWTF9Nc2spID09IDApOworCisgICAgICAgIHJhbmR3b3JkID0gKigodm9sYXRpbGUgdWludDMyX3QgKilIV19UUk5HX1JBTSk7CisgICAgICAgIG1lbWNweShwYnVmLCAmcmFuZHdvcmQsIHJlbWFpbmRlcl9ieXRlcyk7CisgICAgfQorCisgICAgaHdfdHJuZ19kaXNhYmxlKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBkYTE1MDAwUmFuZG9tSW5pdCh2b2lkKQoreworICAgIHpoYWxfZ2V0X2VudHJvcHkoKHVpbnQ4X3QgKikmc1NlZWQsIHNpemVvZihzU2VlZCkpOworICAgIHNTdGF0ZSA9IHNTZWVkOworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBtbGNnOworICAgIHpoYWxfZ2V0X2VudHJvcHkoKHVpbnQ4X3QgKikmbWxjZywgc2l6ZW9mKG1sY2cpKTsKKyAgICByZXR1cm4gbWxjZzsKK30KKworb3RFcnJvciBvdFBsYXRSYW5kb21HZXRUcnVlKHVpbnQ4X3QgKmFPdXRwdXQsIHVpbnQxNl90IGFPdXRwdXRMZW5ndGgpCit7CisKKyAgICBmb3IgKHVpbnQxNl90IGxlbmd0aCA9IDA7IGxlbmd0aCA8IGFPdXRwdXRMZW5ndGg7IGxlbmd0aCsrKQorICAgIHsKKyAgICAgICAgYU91dHB1dFtsZW5ndGhdID0gKHVpbnQ4X3Qpb3RQbGF0UmFuZG9tR2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZGExNTAwMC9zdGFydHVwLWdjYy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvc3RhcnR1cC1nY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjBjNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvc3RhcnR1cC1nY2MuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyogU3R1YnMgb3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgZ2VuZXJhbCBDKysgYmxvYXQKKyogZm9yIHN1aXRhYmlsaXR5IGZvciBlbWJlZGRlZCBlbnZpcm9ubWVudHMuCisqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK19fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlKF9fRElfXykpKTsKK2V4dGVybiBpbnQgX19jeGFfZ3VhcmRfYWNxdWlyZShfX2d1YXJkICpnKTsKK2V4dGVybiB2b2lkIF9fY3hhX2d1YXJkX3JlbGVhc2UoX19ndWFyZCAqZyk7CitleHRlcm4gdm9pZCBfX2N4YV9ndWFyZF9hYm9ydChfX2d1YXJkICpnKTsKK2V4dGVybiB2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCh2b2lkKTsKKworaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCAqZykKK3sKKyAgICByZXR1cm4gISooY2hhciAqKShnKTsKK30KK3ZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkICpnKQoreworICAgICooY2hhciAqKWcgPSAxOworfQordm9pZCBfX2N4YV9ndWFyZF9hYm9ydChfX2d1YXJkICpnKQoreworICAgICh2b2lkKSBnOworfQordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkKK3sKKyAgICB3aGlsZSAoMSk7Cit9CisKK3ZvaWQgKl9fZHNvX2hhbmRsZTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3VhcnQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I5YjgzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvdWFydC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworI2luY2x1ZGUgImh3X2dwaW8uaCIKKyNpbmNsdWRlICJod191YXJ0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZGExNTAwMC5oIgorCitzdGF0aWMgaW50IHNJbkZkOworc3RhdGljIGludCBzT3V0RmQ7Cit2b2lkIFVhcnRCdWZmQ2xlYXIodm9pZCk7CisKK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVhcnRfY29uZmlnIHVhcnRfaW5pdCA9CisgICAgeworICAgICAgICAuYmF1ZF9yYXRlID0gSFdfVUFSVF9CQVVEUkFURV8xMTUyMDAsCisgICAgICAgIC5kYXRhICAgICAgPSBIV19VQVJUX0RBVEFCSVRTXzgsCisgICAgICAgIC5zdG9wICAgICAgPSBIV19VQVJUX1NUT1BCSVRTXzEsCisgICAgICAgIC5wYXJpdHkgICAgPSBIV19VQVJUX1BBUklUWV9OT05FLAorICAgICAgICAudXNlX2RtYSAgID0gMCwKKyAgICAgICAgLnVzZV9maWZvICA9IDEsCisgICAgICAgIC5yeF9kbWFfY2hhbm5lbCA9IEhXX0RNQV9DSEFOTkVMXzAsCisgICAgICAgIC50eF9kbWFfY2hhbm5lbCA9IEhXX0RNQV9DSEFOTkVMXzEsCisgICAgfTsKKworICAgIGh3X3VhcnRfaW5pdChDT05GSUdfUkVUQVJHRVRfVUFSVCwgJnVhcnRfaW5pdCk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfVUFSVF9UWCk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8yLCBIV19HUElPX1BJTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfVUFSVF9SWCk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl81LCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfR1BJTyk7CisgICAgVWFydEJ1ZmZDbGVhcigpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBjbG9zZShzSW5GZCk7CisgICAgY2xvc2Uoc091dEZkKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworCit2b2lkIGRhMTUwMDBVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHVpbnQ4X3QgYUJ1ZjsKKworICAgIC8vIFdhaXQgdW50aWwgcmVjZWl2ZWQgZGF0YSBhcmUgYXZhaWxhYmxlCisgICAgaWYgKGh3X3VhcnRfcmVhZF9idWZfZW1wdHkoSFdfVUFSVDEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlYWQgZWxlbWVudCBmcm9tIHRoZSByZWNlaXZlIEZJRk8KKyAgICBhQnVmID0gVUJBKEhXX1VBUlQxKS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgIG90UGxhdFVhcnRSZWNlaXZlZCgmYUJ1ZiwgMSk7Cit9CisKKwordm9pZCBVYXJ0QnVmZkNsZWFyKHZvaWQpCit7CisKKyAgICB2b2xhdGlsZSB1aW50OF90IGFCdWY7CisKKyAgICB3aGlsZSAoaHdfdWFydF9yZWFkX2J1Zl9lbXB0eShIV19VQVJUMSkgPT0gMCkKKyAgICB7CisgICAgICAgIGFCdWYgKz0gVUJBKEhXX1VBUlQxKS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHOworICAgIH0KKworCit9CisKKworb3RFcnJvciBvdFBsYXRVYXJ0U2VuZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGh3X3VhcnRfd3JpdGVfYnVmZmVyKEhXX1VBUlQxLCBhQnVmLCBhQnVmTGVuZ3RoKTsKKworICAgIG90UGxhdFVhcnRTZW5kRG9uZSgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3ZlY3Rvci5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2RhMTUwMDAvdmVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZGNjZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9kYTE1MDAwL3ZlY3Rvci5jCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyogQGZpbGUgICAgIGNwdS9kaWFsb2cvZGExNTAwMC9ib290L3ZlY3Rvci5jCisqIENwdUlycV9kYTE1eCAtLSBJUlEgZHJpdmVyIGZvciBBUk0gQ29ydGV4LU0gc2VyaWVzIGNvcmVzLgorKgorKi8KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRpYyIKKyNwcmFnbWEgbG9jYXRpb249Ii5pc3JfdmVjdG9yIgorCisjZGVmaW5lIF9fV0VBSyAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHdlYWspKQorI2RlZmluZSBfX1VTRUQgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKKyNkZWZpbmUgX19CT09UX1ZFQ1RPUiAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5pc3JfdmVjdG9yIikpKQorI2RlZmluZSBfX0JPT1RfU1RBQ0sgICAgICAgICAgICAgICAmX19zdGFja19zdGFydF9fCisjZGVmaW5lIF9fQk9PVF9TVEFSVFVQICAgICAgICAgICAgIF9fZ2NjX3Byb2dyYW1fc3RhcnQKKwordHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhY2tfc3RhcnRfX1tdOworZXh0ZXJuIHZvaWQgICAgICAgICBfX2djY19wcm9ncmFtX3N0YXJ0KHZvaWQpOworCisvLy8gRGVjbGFyYXRpb24gb2YgZGVmYXVsdCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCitzdGF0aWMgdm9pZCBoYWx0X2lzcih2b2lkKQoreworICAgIF9fYXNtKCJCS1BUIDI1NSIpOworCisgICAgd2hpbGUgKDEpOworfQorc3RhdGljIHZvaWQgZGVmYXVsdF9pc3Iodm9pZCkKK3sKKyAgICB3aGlsZSAoMSk7Cit9CisKKy8qIFRoZSBrZXJuZWwgaW50ZXJydXB0cyAtIGluIHRoZWlyIENNU0lTIGZvcm0uCisgICBUaGVzZSBtdXN0IGJlIGltcGxlbWVudGVkIGxvY2FsbHksIG9yIGNvbXBpbGVyIHdpbGwKKyAgIGdpdmUgY29uZmxpY3RpbmcgZGVmaW5pdGlvbiBmb3IgX192ZWN0b3JfdGFibGUuCisgKi8KK19fV0VBSyB2b2lkIE5NSV9IYW5kbGVyKCkgICAgICAgICAgICB7IH0KK19fV0VBSyB2b2lkIEhhcmRGYXVsdF9IYW5kbGVyKCkKK3sKKyAgICBoYWx0X2lzcigpOworfQorX19XRUFLIHZvaWQgU1ZDX0hhbmRsZXIoKQoreworICAgIGhhbHRfaXNyKCk7Cit9CitfX1dFQUsgdm9pZCBQZW5kU1ZfSGFuZGxlcigpCit7CisgICAgaGFsdF9pc3IoKTsKK30KK19fV0VBSyB2b2lkIFN5c1RpY2tfSGFuZGxlcigpCit7CisgICAgaGFsdF9pc3IoKTsKK30KKworX19XRUFLIHZvaWQgTWVtTWFuYWdlX0hhbmRsZXIoKQoreworICAgIGhhbHRfaXNyKCk7Cit9CitfX1dFQUsgdm9pZCBEZWJ1Z01vbl9IYW5kbGVyKCkKK3sKKyAgICBoYWx0X2lzcigpOworfQorX19XRUFLIHZvaWQgQnVzRmF1bHRfSGFuZGxlcigpCit7CisgICAgaGFsdF9pc3IoKTsKK30KKworLyogRGVmYXVsdCBoYW5kbGVycyBmb3Igb3RoZXIgREExNVggcGVyaXBoZXJhbCBpbnRlcnJ1cHRzLiAqLworX19XRUFLIHZvaWQgREVCVUdfSVJRSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsKK30KKworCitfX1dFQUsgdm9pZCBCTEVfV0FLRVVQX0xQX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICAwICovCit9CitfX1dFQUsgdm9pZCBCTEVfR0VOX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICAxICovCit9CitfX1dFQUsgdm9pZCBGVERGX1dBS0VVUF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAgMiAqLworfQorX19XRUFLIHZvaWQgRlRERl9HRU5fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogIDMgKi8KK30KK19fV0VBSyB2b2lkIFJGQ0FMX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICA0ICovCit9CitfX1dFQUsgdm9pZCBDT0VYX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qICA1ICovCit9CitfX1dFQUsgdm9pZCBDUllQVE9fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogIDYgKi8KK30KK19fV0VBSyB2b2lkIE1STV9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAgNyAqLworfQorX19XRUFLIHZvaWQgVUFSVF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAgOCAqLworfQorX19XRUFLIHZvaWQgVUFSVDJfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogIDkgKi8KK30KK19fV0VBSyB2b2lkIEkyQ19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxMCAqLworfQorX19XRUFLIHZvaWQgSTJDMl9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxMSAqLworfQorX19XRUFLIHZvaWQgU1BJX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDEyICovCit9CitfX1dFQUsgdm9pZCBTUEkyX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDEzICovCit9CitfX1dFQUsgdm9pZCBBRENfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMTQgKi8KK30KK19fV0VBSyB2b2lkIEtFWUJSRF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxNSAqLworfQorX19XRUFLIHZvaWQgSVJHRU5fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMTYgKi8KK30KK19fV0VBSyB2b2lkIFdLVVBfR1BJT19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAxNyAqLworfQorX19XRUFLIHZvaWQgU1dUSU0wX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDE4ICovCit9CitfX1dFQUsgdm9pZCBTV1RJTTFfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMTkgKi8KK30KK19fV0VBSyB2b2lkIFFVQURFQ19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyMCAqLworfQorX19XRUFLIHZvaWQgVVNCX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDIxICovCit9CitfX1dFQUsgdm9pZCBQQ01fSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMjIgKi8KK30KK19fV0VBSyB2b2lkIFNSQ19JTl9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyMyAqLworfQorX19XRUFLIHZvaWQgU1JDX09VVF9IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyNCAqLworfQorX19XRUFLIHZvaWQgVkJVU19IYW5kbGVyKCkKK3sKKyAgICBkZWZhdWx0X2lzcigpOyAgICAvKiAyNSAqLworfQorX19XRUFLIHZvaWQgRE1BX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI2ICovCit9CitfX1dFQUsgdm9pZCBSRl9ESUFHX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI3ICovCit9CitfX1dFQUsgdm9pZCBUUk5HX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI4ICovCit9CitfX1dFQUsgdm9pZCBEQ0RDX0hhbmRsZXIoKQoreworICAgIGRlZmF1bHRfaXNyKCk7ICAgIC8qIDI5ICovCit9CitfX1dFQUsgdm9pZCBYVEFMMTZSRFlfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMzAgKi8KK30KK19fV0VBSyB2b2lkIFJFU0VSVkVEMzFfSGFuZGxlcigpCit7CisgICAgZGVmYXVsdF9pc3IoKTsgICAgLyogMzEgKi8KK30KKworCisKKworX19CT09UX1ZFQ1RPUiBfX1VTRUQKK2NvbnN0IGlycV9oYW5kbGVyX3QgX192ZWN0b3JfdGFibGVbXSA9Cit7CisgICAgLy8gQ29ydGV4LU0gdmVjdG9yIHRhYmxlCisgICAgKGlycV9oYW5kbGVyX3QpX19CT09UX1NUQUNLLCAgICAgICAgICAvL0lOVF9Jbml0aWFsX1N0YWNrX1BvaW50ZXIgICAgPSAwLCAgLy8gSW5pdGlhbCBTdGFjayBQb2ludGVyCisgICAgKGlycV9oYW5kbGVyX3QpX19CT09UX1NUQVJUVVAsICAgICAgICAvL0lOVF9Jbml0aWFsX1Byb2dyYW1fQ291bnRlciAgPSAxLCAgLy8gSW5pdGlhbCBQcm9ncmFtIENvdW50ZXIKKyAgICBOTUlfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSU5UX05NSSAgICAgICAgICAgICAgICAgICAgICA9IDIsICAvLyBOb24tbWFza2FibGUgSW50ZXJydXB0IChOTUkpCisgICAgSGFyZEZhdWx0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAvL0lOVF9IYXJkX0ZhdWx0ICAgICAgICAgICAgICAgPSAzLCAgLy8gSGFyZCBGYXVsdAorICAgIE1lbU1hbmFnZV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy9JTlRfTWVtX01hbmFnZV9GYXVsdCAgICAgICAgID0gNCwgIC8vIE1lbU1hbmFnZSBGYXVsdAorICAgIEJ1c0ZhdWx0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy9JTlRfQnVzX0ZhdWx0ICAgICAgICAgICAgICAgID0gNSwgIC8vIEJ1cyBGYXVsdAorICAgIGRlZmF1bHRfaXNyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfVXNhZ2VfRmF1bHQgICAgICAgICAgICAgID0gNiwgIC8vIFVzYWdlIEZhdWx0CisgICAgZGVmYXVsdF9pc3IsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lOVF9SZXNlcnZlZDcgICAgICAgICAgICAgICAgPSA3LCAgLy8gUmVzZXJ2ZWQgaW50ZXJydXB0IDcKKyAgICBkZWZhdWx0X2lzciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSU5UX1Jlc2VydmVkOCAgICAgICAgICAgICAgICA9IDgsICAvLyBSZXNlcnZlZCBpbnRlcnJ1cHQgOAorICAgIGRlZmF1bHRfaXNyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfUmVzZXJ2ZWQ5ICAgICAgICAgICAgICAgID0gOSwgIC8vIFJlc2VydmVkIGludGVycnVwdCA5CisgICAgZGVmYXVsdF9pc3IsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lOVF9SZXNlcnZlZDEwICAgICAgICAgICAgICAgPSAxMCwgLy8gUmVzZXJ2ZWQgaW50ZXJydXB0IDEwCisgICAgU1ZDX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lOVF9TVkNhbGwgICAgICAgICAgICAgICAgICAgPSAxMSwgLy8gU3VwZXJ2aXNvciBjYWxsIChTVkNhbGwpCisgICAgRGVidWdNb25fSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvL0lOVF9EZWJ1Z01vbml0b3IgICAgICAgICAgICAgPSAxMiwgLy8gRGVidWcgTW9uaXRvcgorICAgIGRlZmF1bHRfaXNyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfUmVzZXJ2ZWQxMyAgICAgICAgICAgICAgID0gMTMsIC8vIFJlc2VydmVkIGludGVycnVwdCAxMworICAgIFBlbmRTVl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy9JTlRfUGVuZGFibGVTcnZSZXEgICAgICAgICAgID0gMTQsIC8vIFBlbmRhYmxlIHJlcXVlc3QgZm9yIHN5c3RlbSBzZXJ2aWNlIChQZW5kYWJsZVNydlJlcSkKKyAgICBTeXNUaWNrX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vSU5UX1N5c1RpY2sgICAgICAgICAgICAgICAgICA9IDE1LCAvLyBTeXNUaWNrIEludGVycnVwdAorCisgICAgLy8gRGlhbG9nIERBMTUwMDAgdmVjdG9yIHRhYmxlCisgICAgQkxFX1dBS0VVUF9MUF9IYW5kbGVyLCAgICAgICAgICAgICAgICAvL0JMRV9XQUtFVVBfTFBfSVJRbiAgICAgICAgICAgPSAgIDAsIC8vIFdha2V1cCBmcm9tIFNsZWVwIGJ5IEJMRSBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBCTEVfR0VOX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vQkxFX0dFTl9JUlFuICAgICAgICAgICAgICAgICA9ICAgMSwgLy8gQkxFIEludGVycnVwdCByZXF1ZXN0LiBTb3VyY2VzOgorICAgIEZUREZfV0FLRVVQX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgLy9GVERGX1dBS0VVUF9JUlFuICAgICAgICAgICAgID0gICAyLCAvLyBXYWtldXAgZnJvbSBTbGVlcCBieSBGVERGIEludGVycnVwdCByZXF1ZXN0LgorICAgIEZUREZfR0VOX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy9GVERGX0dFTl9JUlFuICAgICAgICAgICAgICAgID0gICAzLCAvLyBGVERGIEludGVycnVwdCByZXF1ZXN0LiBTb3VyY2VzOgorICAgIFJGQ0FMX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy9SRkNBTF9JUlFuICAgICAgICAgICAgICAgICAgID0gICA0LCAvLyBSRiBDYWxpYnJhdGlvbiBJbnRlcnJ1cHQgcmVxdWVzdC4gR2VuZXJhdGVkIGJ5IHRoZSBEUEhZLgorICAgIENPRVhfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy9DT0VYX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICA1LCAvLyBDb2V4IEludGVycnVwdCByZXF1ZXN0LgorICAgIENSWVBUT19IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy9DUllQVE9fSVJRbiAgICAgICAgICAgICAgICAgID0gICA2LCAvLyBDcnlwdG8gSW50ZXJydXB0IHJlcXVlc3QuIFNvdXJjZXM6CisgICAgTVJNX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvL01STV9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgIDcsIC8vIENhY2hlIE1pc3MgUmF0ZSBNb25pdG9yIEludGVycnVwdCByZXF1ZXN0LgorICAgIFVBUlRfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy9VQVJUX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICA4LCAvLyBVQVJUIEludGVycnVwdCByZXF1ZXN0LgorICAgIFVBUlQyX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy9VQVJUMl9JUlFuICAgICAgICAgICAgICAgICAgID0gICA5LCAvLyBVQVJUMiBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBJMkNfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSTJDX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAxMCwgLy8gSTJDIEludGVycnVwdCByZXF1ZXN0LgorICAgIEkyQzJfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLy9JMkMyX0lSUW4gICAgICAgICAgICAgICAgICAgID0gIDExLCAvLyBJMkMyIEludGVycnVwdCByZXF1ZXN0LgorICAgIFNQSV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TUElfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDEyLCAvLyBTUEkgSW50ZXJydXB0IHJlcXVlc3QuCisgICAgU1BJMl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvL1NQSTJfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAgMTMsIC8vIFNQSTIgSW50ZXJydXB0IHJlcXVlc3QuCisgICAgQURDX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvL0FEQ19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgMTQsIC8vIEFuYWxvZy1EaWdpdGFsIENvbnZlcnRlciBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBLRVlCUkRfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vS0VZQlJEX0lSUW4gICAgICAgICAgICAgICAgICA9ICAxNSwgLy8gS2V5Ym9hcmQgc2Nhbm5lciBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBJUkdFTl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vSVJHRU5fSVJRbiAgICAgICAgICAgICAgICAgICA9ICAxNiwgLy8gSW5mcmFSZWQgR2VuZXJhdG9yIEludGVycnVwdCByZXF1ZXN0LgorICAgIFdLVVBfR1BJT19IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgLy9XS1VQX0dQSU9fSVJRbiAgICAgICAgICAgICAgID0gIDE3LCAvLyBXYWtldXAgd2l0aC93aXRob3V0IGRlYm91bmNpbmcgSW50ZXJydXB0IHJlcXVlc3QgKHdoZW4gc3lzdGVtCisgICAgU1dUSU0wX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvL1NXVElNMF9JUlFuICAgICAgICAgICAgICAgICAgPSAgMTgsIC8vIFNXIFRpbWVyIEludGVycnVwdCByZXF1ZXN0IChUaW1lcjApLgorICAgIFNXVElNMV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy9TV1RJTTFfSVJRbiAgICAgICAgICAgICAgICAgID0gIDE5LCAvLyBTVyBUaW1lciBJbnRlcnJ1cHQgcmVxdWVzdCAoVGltZXIxKS4KKyAgICBRVUFERUNfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBREVDX0lSUW4gICAgICAgICAgICAgICAgICA9ICAyMCwgLy8gUXVhZHJhdHVyZSBEZWNvZGVyIEludGVycnVwdCByZXF1ZXN0LgorICAgIFVTQl9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9VU0JfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDIxLCAvLyBVU0IgZGV2aWNlIEZTIEludGVycnVwdCByZXF1ZXN0LgorICAgIFBDTV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy9QQ01fSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDIyLCAvLyBQQ00gSW50ZXJydXB0IHJlcXVlc3QuCisgICAgU1JDX0lOX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvL1NSQ19JTl9JUlFuICAgICAgICAgICAgICAgICAgPSAgMjMsIC8vIFNhbXBsZSBSYXRlIENvbnZlcnRlciBJbnB1dCBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBTUkNfT1VUX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vU1JDX09VVF9JUlFuICAgICAgICAgICAgICAgICA9ICAyNCwgLy8gU2FtcGxlIFJhdGUgQ29udmVydGVyIE91dHB1dCBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBWQlVTX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vVkJVU19JUlFuICAgICAgICAgICAgICAgICAgICA9ICAyNSwgLy8gVkJVUyBwcmVzZW5jZSBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBETUFfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRE1BX0lSUW4gICAgICAgICAgICAgICAgICAgICA9ICAyNiwgLy8gRE1BIEludGVycnVwdCByZXF1ZXN0LgorICAgIFJGX0RJQUdfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy9SRl9ESUFHX0lSUW4gICAgICAgICAgICAgICAgID0gIDI3LCAvLyBCYXNlYmFuZCBvciBSYWRpbyBEaWFnbm9zdGljcyBJbnRlcnJ1cHQgcmVxdWVzdC4KKyAgICBUUk5HX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vVFJOR19JUlFuICAgICAgICAgICAgICAgICAgICA9ICAyOCwgLy8gVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24gSW50ZXJydXB0IHJlcXVlc3QuCisgICAgRENEQ19IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvL0RDRENfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAgMjksIC8vIERDREMgSW50ZXJydXB0IHJlcXVlc3QuIEdlbmVyYXRlZCB1cG9uIHRpbWUgb3V0IHRocmVzaG9sZCByZWFjaC4KKyAgICBYVEFMMTZSRFlfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgIC8vWFRBTDE2UkRZX0lSUW4gICAgICAgICAgICAgICA9ICAzMCwgLy8gSW5kaWNhdGVzIHRoYXQgWFRBTDE2IG9zY2lsbGF0b3IgaXMgdHJpbW1lZCBhbmQgc2V0dGxlZCBhbmQgY2FuCisgICAgREVCVUdfSVJRSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvL1JFU0VSVkVEMzFfSVJRbiAgICAgICAgICAgICAgPSAgMzEsIC8vIFJFU0VSVkVEMzEgSW50ZXJydXB0IHJlcXVlc3QuCit9OworCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4NDA3MQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDEyMyBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitsaWJfTElCUkFSSUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBsaWJvcGVudGhyZWFkLWVmcjMyLmEKKworIyBEbyBub3QgZW5hYmxlIC1XY29udmVyc2lvbiBmb3IgcmFpbAorb3ZlcnJpZGUgQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XY29udmVyc2lvbiwkKENGTEFHUykpCitvdmVycmlkZSBDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdjb252ZXJzaW9uLCQoQ1hYRkxBR1MpKQorCisjIERvIG5vdCBlbmFibGUgLXBlZGFudGljLWVycm9ycyBmb3IgcmFpbAorb3ZlcnJpZGUgQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1wZWRhbnRpYy1lcnJvcnMsJChDRkxBR1MpKQorb3ZlcnJpZGUgQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1wZWRhbnRpYy1lcnJvcnMsJChDWFhGTEFHUykpCisKK0VGUjMyTUdfU0RLX1NSQ0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xCisKK2xpYm9wZW50aHJlYWRfZWZyMzJfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1ERUZSMzJNRzEyUDQzMkYxMDI0R0wxMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURfX1NUQVJUPW1haW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRF9fU1RBUlRVUF9DTEVBUl9CU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL3JhZGlvL3JhaWxfbGliL2NvbW1vbiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vcmFkaW8vcmFpbF9saWIvY2hpcC9lZnIzMiAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9yYWRpby9yYWlsX2xpYi9wcm90b2NvbC9pZWVlODAyMTU0ICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL3JhZGlvL3JhaWxfbGliL2NoaXAvZWZyMzIvcmYvY29tbW9uL2NvcnRleCBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vcmFkaW8vcmFpbF9saWIvaGFsL2VmcjMyICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9oYXJkd2FyZS9raXQvY29tbW9uL2JzcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL2hhcmR3YXJlL2tpdC9FRlIzMk1HMTJfQlJENDE2MUEvY29uZmlnICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vQ01TSVMvSW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9EZXZpY2UvU2lsaWNvbkxhYnMvRUZSMzJNRzEyUC9JbmNsdWRlICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL2VtZHJ2L2NvbW1vbi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vZW1kcnYvdWFydGRydi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9lbWRydi91c3RpbWVyL2luYyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJChFRlIzMk1HX1NES19TUkNESVIpL3BsYXRmb3JtL2VtZHJ2L2RtYWRydi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKEVGUjMyTUdfU0RLX1NSQ0RJUikvcGxhdGZvcm0vZW1kcnYvcnRjZHJ2L2luYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQoRUZSMzJNR19TREtfU1JDRElSKS9wbGF0Zm9ybS9lbWxpYi9pbmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQTEFURk9STV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXJ0dXAtZ2NjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWFydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK1BMQVRGT1JNX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIGRpYWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworbm9kaXN0X2xpYm9wZW50aHJlYWRfZWZyMzJfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvaGFyZHdhcmUva2l0L2NvbW1vbi9ic3AvYnNwX2JjYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL2hhcmR3YXJlL2tpdC9jb21tb24vYnNwL2JzcF9zdGsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9EZXZpY2UvU2lsaWNvbkxhYnMvRUZSMzJNRzEyUC9Tb3VyY2Uvc3lzdGVtX2VmcjMybWcxMnAuYyAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vRGV2aWNlL1NpbGljb25MYWJzL0VGUjMyTUcxMlAvU291cmNlL0dDQy9zdGFydHVwX2VmcjMybWcxMnAuYyBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtZHJ2L3J0Y2Rydi9zcmMvcnRjZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWRydi91c3RpbWVyL3NyYy91c3RpbWVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX2FkYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9jbXUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX2VtdS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9ncGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fcm11LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX3J0Y2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9zeXN0ZW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fdGltZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvcGxhdGZvcm0vZW1saWIvc3JjL2VtX3VzYXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3BsYXRmb3JtL2VtbGliL3NyYy9lbV9tc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3NpbGFicy9nZWNrb19zZGtfc3VpdGUvdjEuMS9wbGF0Zm9ybS9lbWxpYi9zcmMvZW1fY3J5cHRvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK25vaW5zdF9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHBsYXRmb3JtLWVmcjMyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2VmcjMyX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9lZnIzMl9hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y4NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL1JFQURNRS5tZApAQCAtMCwwICsxLDE4OSBAQAorIyBPcGVuVGhyZWFkIG9uIEVGUjMyIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciB0aGUgW1NpbGljb24gTGFicyBFRlIzMl1bZWZyMzJtZ10KK2Jhc2VkIG9uIFtFRlIzMuKEoiBNaWdodHkgR2Vja28gV2lyZWxlc3MgU3RhcnRlciBLaXRdW1NMV1NUSzYwMDBCXS4KKworW2VmcjMybWddOiBodHRwOi8vd3d3LnNpbGFicy5jb20vcHJvZHVjdHMvd2lyZWxlc3MvbWVzaC1uZXR3b3JraW5nL2VmcjMybWctbWlnaHR5LWdlY2tvLXppZ2JlZS10aHJlYWQtc29jCitbU0xXU1RLNjAwMEJdOiBodHRwOi8vd3d3LnNpbGFicy5jb20vcHJvZHVjdHMvZGV2ZWxvcG1lbnQtdG9vbHMvd2lyZWxlc3MvbWVzaC1uZXR3b3JraW5nL21pZ2h0eS1nZWNrby1zdGFydGVyLWtpdAorCitUaGUgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSBpbnRlbmRlZCB0byBwcmVzZW50IHRoZSBtaW5pbWFsIGNvZGUKK25lY2Vzc2FyeSB0byBzdXBwb3J0IE9wZW5UaHJlYWQuIFtFRlIzMk1HMTJQIFNvQ11bZWZyMzJtZzEycF0KK2hhcyByaWNoIG1lbW9yeSBhbmQgcGVyaXBoZXJhbCByZXNvdXJjZXMgd2hpY2ggY2FuIHN1cHBvcnQgYWxsIE9wZW5UaHJlYWQKK2NhcGFiaWxpdGllcy4gU2VlIHRoZSAiUnVuIHRoZSBleGFtcGxlIHdpdGggRUZSMzIgYm9hcmRzIiBzZWN0aW9uIGJlbG93Citmb3IgYW4gZXhhbXBsZSB1c2luZyBiYXNpYyBPcGVuVGhyZWFkIGNhcGFiaWxpdGllcy4KKworW2VmcjMybWcxMnBdOiBodHRwOi8vd3d3LnNpbGFicy5jb20vcHJvZHVjdHMvd2lyZWxlc3MvbWVzaC1uZXR3b3JraW5nL2VmcjMybWctbWlnaHR5LWdlY2tvLXppZ2JlZS10aHJlYWQtc29jL2RldmljZS5FRlIzMk1HMTJQNDMyRjEwMjRHTDEyNQorCisjIyBUb29sY2hhaW4KKworRG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIFtHTlUgdG9vbGNoYWluIGZvciBBUk0gQ29ydGV4LU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkCisKKyMjIEJ1aWxkIEV4YW1wbGVzCisKKzEuIERvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBbU2ltcGxpY2l0eSBTdHVkaW9dW3NpbXBsaWNpdHlfc3R1ZGlvXS4KKworW3NpbXBsaWNpdHlfc3R1ZGlvXTogaHR0cDovL3d3dy5zaWxhYnMuY29tL3Byb2R1Y3RzL2RldmVsb3BtZW50LXRvb2xzL3NvZnR3YXJlL3NpbXBsaWNpdHktc3R1ZGlvCisKKzIuIEluc3RhbGwgRmxleCAoR2Vja28pIFNESyBpbmNsdWRpbmcgUkFJTCBMaWJyYXJ5IGZyb20gU2ltcGxpY2l0eSBTdHVkaW8uCisgICAtIENvbm5lY3QgRUZSMzJNRzEyUCBXaXJlbGVzcyBTdGFydGVyIEtpdCB0byBTaW1wbGljaXR5IFN0dWRpby4KKyAgIC0gRmluZCB0aGUgbGF0ZXN0IEZsZXggU0RLIGluIHRoZSBTb2Z0d2FyZSBVcGRhdGUgcGFnZSBhbmQgY2xpY2sgSW5zdGFsbC4KKyAgIC0gRmxleCBTREsgd2lsbCBiZSBpbnN0YWxsZWQgaW4gdGhlIHBhdGg6IGAvU2ltcGxpY2l0eVN0dWRpb192NC9kZXZlbG9wZXIvc2Rrcy9nZWNrb19zZGtfc3VpdGVgLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZywgYnVpbGRpbmcsIGFuZCBpbnN0YWxsaW5nIGFwcGxpY2F0aW9ucyBmb3IgdGhlIFdpcmVsZXNzIEdlY2tvIChFRlIzMikKK3BvcnRmb2xpbyB1c2luZyBSQUlMLCBzZWUgW0dldHRpbmcgU3RhcnRlZCB3aXRoIFJBSUwgTGlicmFyeSBxdWljayBzdGFydCBndWlkZV1bUVNHMTIxXS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KK29uIFJBSUwsIHNlZSBbUmFkaW8gQWJzdHJhY3Rpb24gSW50ZXJmYWNlIExheWVyXVtyYWlsXS4KKworW1FTRzEyMV06IGh0dHA6Ly93d3cuc2lsYWJzLmNvbS9kb2N1bWVudHMvcHVibGljL3F1aWNrLXN0YXJ0LWd1aWRlcy9RU0cxMjEtRUZSMzItUkFJTC5wZGYKK1tyYWlsXTogaHR0cDovL3d3dy5zaWxhYnMuY29tL3Byb2R1Y3RzL2RldmVsb3BtZW50LXRvb2xzL3NvZnR3YXJlL3JhZGlvLWFic3RyYWN0aW9uLWludGVyZmFjZS1sYXllci1zZGsKKworMy4gQ29uZmlndXJlIHRoZSBwYXRoIHRvIEZsZXggU0RLIHNvdXJjZSBjb2RlLgorYGBgYmFzaAorJCBjZCA8cGF0aC10by1vcGVudGhyZWFkPi90aGlyZF9wYXJ0eQorJCBta2RpciBzaWxhYnMKKyQgY2QgPHBhdGgtdG8tU2ltcGxpY2l0eS1TdHVkaW8+L2RldmVsb3Blci9zZGtzCiskIGNwIC1yZiBnZWNrb19zZGtfc3VpdGUgPHBhdGgtdG8tb3BlbnRocmVhZD4vdGhpcmRfcGFydHkvc2lsYWJzLworYGBgCisKKzQuIEJ1aWxkIE9wZW5UaHJlYWQgRmlybXdhcmUgKENMSSBleGFtcGxlKSBvbiBFRlIzMiBwbGF0Zm9ybS4KK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1lZnIzMgorYGBgCisKK0FmdGVyIGEgc3VjY2Vzc2Z1bCBidWlsZCwgdGhlIGBlbGZgIGZpbGVzIGFyZSBmb3VuZCBpbgorYDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC9lZnIzMi9iaW5gLgorCisjIyBGbGFzaCBCaW5hcmllcworCitDb21waWxlZCBiaW5hcmllcyBtYXkgYmUgZmxhc2hlZCBvbnRvIHRoZSBFRlIzMiB1c2luZyBbSkxpbmtHREJTZXJ2ZXJdW2psaW5rZ2Ric2VydmVyXS4KK0VGUjMyIFN0YXJ0ZXIga2l0IG1haW5ib2FyZCBpbnRlZ3JhdGVzIGFuIG9uLWJvYXJkIFNFR0dFUiBKLUxpbmsgZGVidWdnZXIuCisKK1tqbGlua2dkYnNlcnZlcl06IGh0dHBzOi8vd3d3LnNlZ2dlci5jb20vamxpbmstZ2RiLXNlcnZlci5odG1sCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tSkxpbmtHREJTZXJ2ZXI+CiskIHN1ZG8gLi9KTGlua0dEQlNlcnZlciAtaWYgc3dkIC1kZXZpY2UgRUZSMzJNRzEyUHh4eEYxMDI0CiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC9lZnIzMi9iaW4KKyQgYXJtLW5vbmUtZWFiaS1nZGIgb3QtY2xpLWZ0ZAorJCAoZ2RiKSB0YXJnZXQgcmVtb3RlIDEyNy4wLjAuMToyMzMxCiskIChnZGIpIGxvYWQKKyQgKGdkYikgbW9uaXRvciByZXNldAorJCAoZ2RiKSBjCitgYGAKKworTm90ZTogU3VwcG9ydCBmb3IgdGhlICJFRlIzMk1HMTJQeHh4RjEwMjQiIGRldmljZSB3YXMgYWRkZWQgdG8gSkxpbmtHREJTZXJ2ZXIgVjYuMTRkLgorCisjIyBSdW4gdGhlIGV4YW1wbGUgd2l0aCBFRlIzMiBib2FyZHMKKzEuIEZsYXNoIHR3byBFRlIzMiBib2FyZHMgd2l0aCB0aGUgYENMSSBleGFtcGxlYCBmaXJtd2FyZSAoYXMgc2hvd24gYWJvdmUpLgorMi4gT3BlbiB0ZXJtaW5hbCB0byBmaXJzdCBkZXZpY2UgYC9kZXYvdHR5QUNNMGAgKHNlcmlhbCBwb3J0IHNldHRpbmdzOiAxMTUyMDAgOC1OLTEpLgorICAgVHlwZSBgaGVscGAgZm9yIGEgbGlzdCBvZiBjb21tYW5kcy4KKworYGBgYmFzaAorPiBoZWxwCitoZWxwCitjaGFubmVsCitjaGlsZHRpbWVvdXQKK2NvbnRleHRyZXVzZWRlbGF5CitleHRhZGRyCitleHRwYW5pZAoraXBhZGRyCitrZXlzZXF1ZW5jZQorbGVhZGVyd2VpZ2h0CittYXN0ZXJrZXkKK21vZGUKK25ldGRhdGFyZWdpc3RlcgorbmV0d29ya2lkdGltZW91dAorbmV0d29ya25hbWUKK3BhbmlkCitwaW5nCitwcmVmaXgKK3JlbGVhc2Vyb3V0ZXJpZAorcmxvYzE2Cityb3V0ZQorcm91dGVydXBncmFkZXRocmVzaG9sZAorc2Nhbgorc3RhcnQKK3N0YXRlCitzdG9wCit3aGl0ZWxpc3QKK2BgYAorCiszLiBTdGFydCBhIFRocmVhZCBuZXR3b3JrIGFzIExlYWRlci4KKworYGBgYmFzaAorPiBwYW5pZCAweGZhY2UKK0RvbmUKKz4gaWZjb25maWcgdXAKK0RvbmUKKz4gdGhyZWFkIHN0YXJ0CitEb25lCisKK3dhaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcy4uLgorCis+IHN0YXRlCitsZWFkZXIKK0RvbmUKK2BgYAorCis0LiBPcGVuIHRlcm1pbmFsIHRvIHNlY29uZCBkZXZpY2UgYC9kZXYvdHR5QUNNMWAgKHNlcmlhbCBwb3J0IHNldHRpbmdzOiAxMTUyMDAgOC1OLTEpCisgICBhbmQgYXR0YWNoIGl0IHRvIHRoZSBUaHJlYWQgbmV0d29yayBhcyBhIFJvdXRlci4KKworYGBgYmFzaAorPiBwYW5pZCAweGZhY2UKK0RvbmUKKz4gcm91dGVyc2VsZWN0aW9uaml0dGVyIDEKK0RvbmUKKz4gaWZjb25maWcgdXAKK0RvbmUKKz4gdGhyZWFkIHN0YXJ0CitEb25lCisKK3dhaXQgYSBjb3VwbGUgb2Ygc2Vjb25kcy4uLgorCis+IHN0YXRlCityb3V0ZXIKK0RvbmUKK2BgYAorCis1LiBMaXN0IGFsbCBJUHY2IGFkZHJlc3NlcyBvZiBMZWFkZXIuCisKK2BgYGJhc2gKKz4gaXBhZGRyCitmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCitmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDo4MDAKK2ZkZGU6YWQwMDpiZWVmOjA6NWI6M2JjZDpkZWZmOjc3ODYKK2ZlODA6MDowOjA6NjQ0Nzo2ZTEwOmNmNzplZTI5CitEb25lCitgYGAKKworNi4gU2VuZCBhbiBJQ01QdjYgcGluZyB0byBMZWFkZXIncyBNZXNoLUVJRCBJUHY2IGFkZHJlc3MuCisKK2BgYGJhc2gKKz4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjViOjNiY2Q6ZGVmZjo3Nzg2Cis4IGJ5dGVzIGZyb20gZmRkZTphZDAwOmJlZWY6MDo1YjozYmNkOmRlZmY6Nzc4NjogaWNtcF9zZXE9MSBobGltPTY0IHRpbWU9MjRtcworYGBgCisKK1RoZSBhYm92ZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBiYXNpYyBPcGVuVGhyZWFkIGNhcGFiaWxpdGllcy4gRW5hYmxlIG1vcmUgZmVhdHVyZXMvcm9sZXMgKGUuZy4gY29tbWlzc2lvbmVyLAoram9pbmVyLCBESENQdjYgU2VydmVyL0NsaWVudCwgZXRjLikgYnkgYXNzaWduaW5nIGNvbXBpbGUtb3B0aW9ucyBiZWZvcmUgY29tcGlsaW5nLgorCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtZWZyMzIgQ09NTUlTU0lPTkVSPTEgSk9JTkVSPTEgREhDUDZfQ0xJRU5UPTEgREhDUDZfU0VSVkVSPTEKK2BgYAorCitGb3IgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgY29tbWFuZHMsIHZpc2l0IFtPcGVuVGhyZWFkIENMSSBSZWZlcmVuY2UgUkVBRE1FLm1kXVtDTEldLgorIAorW0NMSV06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvc3JjL2NsaS9SRUFETUUubWQKKworIyMgVmVyaWZpY2F0aW9uCisKK1RoZSBmb2xsb3dpbmcgdG9vbGNoYWluIGhhcyBiZWVuIHVzZWQgZm9yIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbjoKKyAgIC0gZ2NjIHZlcnNpb24gNC45LjMKKworVGhlIEVGUjMyIGV4YW1wbGUgaGFzIGJlZW4gdmVyaWZpZWQgd2l0aCBmb2xsb3dpbmcgRmxleCBTREsvUkFJTCBMaWJyYXJ5IHZlcnNpb246CisgICAtIEZsZXggU0RLIHZlcnNpb24gMS4xLjEuMCwgUkFJTCBMaWJyYXJ5IHZlcnNpb24gMS41LjIKKyAgIC0gRmxleCBTREsgdmVyc2lvbiAxLjIuMC4wLCBSQUlMIExpYnJhcnkgdmVyc2lvbiAxLjYuMApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDA2YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2FsYXJtLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBhbGFybS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworI2luY2x1ZGUgInJhaWwuaCIKKworc3RhdGljIHVpbnQzMl90IHNUaW1lckhpID0gMDsKK3N0YXRpYyB1aW50MzJfdCBzVGltZXJMbyA9IDA7CitzdGF0aWMgdWludDMyX3Qgc0FsYXJtVDAgPSAwOworc3RhdGljIHVpbnQzMl90IHNBbGFybUR0ID0gMDsKK3N0YXRpYyBib29sIHNJc1J1bm5pbmcgICA9IGZhbHNlOworCit2b2lkIGVmcjMyQWxhcm1Jbml0KHZvaWQpCit7Cit9CisKK3VpbnQzMl90IG90UGxhdEFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgdWludDMyX3QgdGltZXJfbG87CisKKyAgICB0aW1lcl9sbyA9IFJBSUxfR2V0VGltZSgpOworCisgICAgaWYgKHRpbWVyX2xvIDwgc1RpbWVyTG8pCisgICAgeworICAgICAgICBzVGltZXJIaSsrOworICAgIH0KKworICAgIHNUaW1lckxvID0gdGltZXJfbG87CisKKyAgICByZXR1cm4gKCgodWludDY0X3Qpc1RpbWVySGkgPDwgMzIpIHwgc1RpbWVyTG8pIC8gMTAwMDsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCB0MCwgdWludDMyX3QgZHQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHNBbGFybVQwID0gdDA7CisgICAgc0FsYXJtRHQgPSBkdDsKKyAgICBzSXNSdW5uaW5nID0gdHJ1ZTsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzSXNSdW5uaW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgZWZyMzJBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgdWludDMyX3QgZXhwaXJlczsKKyAgICBib29sIGZpcmUgPSBmYWxzZTsKKworICAgIG90RVhQRUNUKHNJc1J1bm5pbmcpOworCisgICAgZXhwaXJlcyA9IHNBbGFybVQwICsgc0FsYXJtRHQ7CisKKyAgICBpZiAoc0FsYXJtVDAgPD0gbm93KQorICAgIHsKKyAgICAgICAgZmlyZSA9IChleHBpcmVzID49IHNBbGFybVQwICYmIGV4cGlyZXMgPD0gbm93KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmlyZSA9IChleHBpcmVzID49IHNBbGFybVQwIHx8IGV4cGlyZXMgPD0gbm93KTsKKyAgICB9CisKKyAgICBpZiAoZmlyZSkKKyAgICB7CisgICAgICAgIHNJc1J1bm5pbmcgPSBmYWxzZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICBpZiAob3RQbGF0RGlhZ01vZGVHZXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0RGlhZ0FsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0QWxhcm1GaXJlZChhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBSQUlMQ2JfVGltZXJFeHBpcmVkKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvY3J5cHRvL2VmcjMyLW1iZWR0bHMtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvY3J5cHRvL2VmcjMyLW1iZWR0bHMtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwOTNhMAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9jcnlwdG8vZWZyMzItbWJlZHRscy1jb25maWcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgRUZSMzJfTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBFRlIzMl9NQkVEVExTX0NPTkZJR19ICisKKyNpbmNsdWRlICJlbV9kZXZpY2UuaCIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0FMVAorICoKKyAqIEVuYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIHRoZSBBRVMgYmxvY2sgY2lwaGVyCisgKgorICogTW9kdWxlOiAgc2xfY3J5cHRvL3NyYy9zbF9hZXMuYworICogICAgICAgICAgb3IKKyAqICAgICAgICAgIHNsX2NyeXB0by9zcmMvc2xjbF9hZXMuYyBpZiBNQkVEVExTX1NMQ0xfUExVR0lOUyBpcyBkZWZpbmVkLgorICoKKyAqIFNlZSBNQkVEVExTX0FFU19DIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ1BfREVWSUNFX0FMVAorICogXGRlZiBNQkVEVExTX0VDUF9ERVZJQ0VfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX0RPVUJMRV9KQUNfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX0RFVklDRV9BRERfTUlYRURfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfQUxUCisgKiBcZGVmIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfTUFOWV9BTFQKKyAqIFxkZWYgTUJFRFRMU19NUElfTU9EVUxBUl9ESVZJU0lPTl9BTFQKKyAqCisgKiBFbmFibGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciB0aGUgZWxsaXB0aWMgY3VydmUgb3ZlciBHRihwKSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIHNsX2NyeXB0by9zcmMvc2xfZWNwLmMKKyAqICAgICAgICAgIG9yCisgKiAgICAgICAgICBzbF9jcnlwdG8vc3JjL3NsY2xfZWNwLmMgaWYgTUJFRFRMU19TTENMX1BMVUdJTlMgaXMgZGVmaW5lZC4KKyAqIENhbGxlcjogIGxpYnJhcnkvZWNwLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNkaC5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjZHNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNqcGFrZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQklHTlVNX0MsIE1CRURUTFNfRUNQX0MgYW5kIGF0IGxlYXN0IG9uZQorICogTUJFRFRMU19FQ1BfRFBfWFhYX0VOQUJMRUQgYW5kIChDUllQVE9fQ09VTlQgPiAwKQorICovCisjaWYgZGVmaW5lZChDUllQVE9fQ09VTlQpICYmIChDUllQVE9fQ09VTlQgPiAwKQorI2RlZmluZSBNQkVEVExTX0VDUF9ERVZJQ0VfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX0RPVUJMRV9KQUNfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX0RFVklDRV9BRERfTUlYRURfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfQUxUCisjZGVmaW5lIE1CRURUTFNfRUNQX05PUk1BTElaRV9KQUNfTUFOWV9BTFQKKyNkZWZpbmUgTUJFRFRMU19NUElfTU9EVUxBUl9ESVZJU0lPTl9BTFQKKyNlbmRpZgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisgKgorICogRW5hYmxlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgdGhlIFNIQS0yMjQgYW5kIFNIQS0yNTYgY3J5cHRvZ3JhcGhpYworICogaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIE1vZHVsZTogIHNsX2NyeXB0by9zcmMvc2xfc2hhMjU2LmMKKyAqICAgICAgICAgIG9yCisgKiAgICAgICAgICBzbF9jcnlwdG8vc3JjL3NsY2xfc2hhMjU2LmMgaWYgTUJFRFRMU19TTENMX1BMVUdJTlMgaXMgZGVmaW5lZC4KKyAqIENhbGxlcjogIGxpYnJhcnkvZW50cm9weS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NIQTI1Nl9DIGFuZCAoQ1JZUFRPX0NPVU5UID4gMCkKKyAqIFNlZSBNQkVEVExTX1NIQTI1Nl9DIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjaWYgZGVmaW5lZChDUllQVE9fQ09VTlQpICYmIChDUllQVE9fQ09VTlQgPiAwKQorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X0FMVAorI2VuZGlmCisKKyNlbmRpZiAvLyBFRlIzMl9NQkVEVExTX0NPTkZJR19ICmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvZGlhZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzJkYjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2RpYWcuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgZGlhZ25vc3RpY3MuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tZWZyMzIuaCIKKworLyoqCisgKiBEaWFnbm9zdGljcyBtb2RlIHZhcmlhYmxlcy4KKyAqCisgKi8KK3N0YXRpYyBib29sIHNEaWFnTW9kZSA9IGZhbHNlOworCit2b2lkIG90UGxhdERpYWdQcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgLy8gQWRkIG1vcmUgcGxhcmZvcm0gc3BlY2lmaWMgZGlhZ25vc3RpY3MgZmVhdHVyZXMgaGVyZS4KKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiZGlhZyBmZWF0dXJlICclcycgaXMgbm90IHN1cHBvcnRlZFxyXG4iLCBhcmd2WzBdKTsKKyAgICAodm9pZCkgYXJnYzsKKyAgICAodm9pZCkgYUluc3RhbmNlOworfQorCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCit7CisgICAgc0RpYWdNb2RlID0gYU1vZGU7Cit9CisKK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQoKQoreworICAgIHJldHVybiBzRGlhZ01vZGU7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICAodm9pZCkgYUNoYW5uZWw7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1R4UG93ZXJTZXQoaW50OF90IGFUeFBvd2VyKQoreworICAgICh2b2lkKSBhVHhQb3dlcjsKK30KKwordm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgICh2b2lkKSBhRnJhbWU7CisgICAgKHZvaWQpIGFFcnJvcjsKK30KKwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9mbGFzaC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiZDUyMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9mbGFzaC5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgbm9uLXZvbGF0aWxlIHN0b3JhZ2UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL2ZsYXNoLmgiCisKKyNpbmNsdWRlICJlbV9tc2MuaCIKKworI2RlZmluZSBGTEFTSF9EQVRBX1VTRURfUEFHRVMgICAxMAorI2RlZmluZSBGTEFTSF9EQVRBX0VORF9BRERSICAgICAoRkxBU0hfQkFTRSArIEZMQVNIX1NJWkUpCisjZGVmaW5lIEZMQVNIX0RBVEFfU1RBUlRfQUREUiAgIChGTEFTSF9EQVRBX0VORF9BRERSIC0gKEZMQVNIX1BBR0VfU0laRSAqIEZMQVNIX0RBVEFfVVNFRF9QQUdFUykpCisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbWFwQWRkcmVzcyh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUFkZHJlc3MgKyBGTEFTSF9EQVRBX1NUQVJUX0FERFI7Cit9CisKK3N0YXRpYyBvdEVycm9yIHJldHVyblR5cGVDb252ZXJ0KGludDMyX3QgYVN0YXR1cykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHN3aXRjaCAoYVN0YXR1cykKKyAgICB7CisgICAgY2FzZSBtc2NSZXR1cm5PazoKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgbXNjUmV0dXJuSW52YWxpZEFkZHI6CisgICAgY2FzZSBtc2NSZXR1cm5VbmFsaWduZWQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIE1TQ19Jbml0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hHZXRTaXplKHZvaWQpCit7CisgICAgcmV0dXJuIEZMQVNIX0RBVEFfRU5EX0FERFIgLSBGTEFTSF9EQVRBX1NUQVJUX0FERFI7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaEVyYXNlUGFnZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKworICAgIHN0YXR1cyA9IE1TQ19FcmFzZVBhZ2UoKHVpbnQzMl90ICopbWFwQWRkcmVzcyhhQWRkcmVzcykpOworCisgICAgcmV0dXJuIHJldHVyblR5cGVDb252ZXJ0KHN0YXR1cyk7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgdWludDMyX3Qgc3RhcnQgPSBvdFBsYXRBbGFybUdldE5vdygpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChNU0MtPlNUQVRVUyAmIE1TQ19TVEFUVVNfV0RBVEFSRUFEWSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGFUaW1lb3V0ICYmICgob3RQbGF0QWxhcm1HZXROb3coKSAtIHN0YXJ0KSA8IGFUaW1lb3V0KSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJ2YWwgPSBhU2l6ZTsKKyAgICBpbnQzMl90IHN0YXR1czsKKworICAgIG90RVhQRUNUX0FDVElPTihhRGF0YSwgcnZhbCA9IDApOworICAgIG90RVhQRUNUX0FDVElPTigoKGFBZGRyZXNzICsgYVNpemUpIDwgdXRpbHNGbGFzaEdldFNpemUoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCEoYUFkZHJlc3MgJiAzKSkgJiYgKCEoYVNpemUgJiAzKSksIHJ2YWwgPSAwKTsKKworICAgIHN0YXR1cyA9IE1TQ19Xcml0ZVdvcmQoKHVpbnQzMl90ICopbWFwQWRkcmVzcyhhQWRkcmVzcyksIGFEYXRhLCBhU2l6ZSk7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHJldHVyblR5cGVDb252ZXJ0KHN0YXR1cykgPT0gT1RfRVJST1JfTk9ORSwgcnZhbCA9IDApOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJ2YWwgPSBhU2l6ZTsKKyAgICB1aW50MzJfdCBwQWRkcmVzcyA9IG1hcEFkZHJlc3MoYUFkZHJlc3MpOworICAgIHVpbnQ4X3QgKmJ5dGUgPSBhRGF0YTsKKworICAgIG90RVhQRUNUX0FDVElPTihhRGF0YSwgcnZhbCA9IDApOworICAgIG90RVhQRUNUX0FDVElPTigoYUFkZHJlc3MgKyBhU2l6ZSkgPCB1dGlsc0ZsYXNoR2V0U2l6ZSgpLCBydmFsID0gMCk7CisKKyAgICB3aGlsZSAoYVNpemUtLSkKKyAgICB7CisgICAgICAgICpieXRlKysgPSAoKih1aW50OF90ICopKHBBZGRyZXNzKyspKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbG9nZ2luZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2xvZ2dpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk3MWVlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL2xvZ2dpbmcuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBsb2dnaW5nLgorICoKKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY2xpLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJ1dGlscy9jb2RlX3V0aWxzLmgiCisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0xPR0dJTkcKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgYUZvcm1hdCk7CisgICAgb3RDbGlMb2coYUxvZ0xldmVsLCBhTG9nUmVnaW9uLCBhRm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisjZWxzZQorICAgICh2b2lkKWFMb2dMZXZlbDsKKyAgICAodm9pZClhTG9nUmVnaW9uOworICAgICh2b2lkKWFGb3JtYXQ7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0xJX0xPR0dJTkcKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9taXNjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjMyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvbWlzYy5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBtaXNjZWxsYW5lb3VzIGJlaGF2aW9ycy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tZWZyMzIuaCIKKyNpbmNsdWRlICJlbV9ybXUuaCIKKworc3RhdGljIHVpbnQzMl90IHNSZXNldENhdXNlOworCit2b2lkIGVmcjMyTWlzY0luaXQodm9pZCkKK3sKKyAgICAvLyBSZWFkIHRoZSBjYXVzZSBvZiBsYXN0IHJlc2V0LgorICAgIHNSZXNldENhdXNlID0gUk1VX1Jlc2V0Q2F1c2VHZXQoKTsKKworICAgIC8vIENsZWFyIHRoZSByZWdpc3RlciwgYXMgdGhlIGNhdXNlcyBjdW11bGF0ZSBvdmVyIHJlc2V0cy4KKyAgICBSTVVfUmVzZXRDYXVzZUNsZWFyKCk7Cit9CisKK3ZvaWQgb3RQbGF0UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBOVklDX1N5c3RlbVJlc2V0KCk7Cit9CisKK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RQbGF0UmVzZXRSZWFzb24gcmVhc29uOworCisgICAgaWYgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX1BPUlNUKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisgICAgfQorICAgIGVsc2UgaWYgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX1NZU1JFUVJTVCkKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1NPRlRXQVJFOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRDYXVzZSAmIFJNVV9SU1RDQVVTRV9XRE9HUlNUKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fV0FUQ0hET0c7CisgICAgfQorICAgIGVsc2UgaWYgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0VYVFJTVCkKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX0VYVEVSTkFMOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRDYXVzZSAmIFJNVV9SU1RDQVVTRV9MT0NLVVBSU1QpCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVDsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0FWRERCT0QpIHx8CisgICAgICAgICAgICAgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0RFQ0JPRCkgIHx8CisgICAgICAgICAgICAgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0RWRERCT0QpIHx8CisgICAgICAgICAgICAgKHNSZXNldENhdXNlICYgUk1VX1JTVENBVVNFX0VNNFJTVCkpCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9BU1NFUlQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1VOS05PV047CisgICAgfQorCisgICAgcmV0dXJuIHJlYXNvbjsKK30KKwordm9pZCBvdFBsYXRXYWtlSG9zdCh2b2lkKQoreworICAgIC8vIFRPRE86IGltcGxlbWVudCBhbiBvcGVyYXRpb24gdG8gd2FrZSB0aGUgaG9zdCBmcm9tIHNsZWVwIHN0YXRlLgorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL29wZW50aHJlYWQtY29yZS1lZnIzMi1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9vcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmY2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9vcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGVmcjMyIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9FRlIzMl9DT05GSUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX0VGUjMyX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAxCisKKy8qCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgMQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIGVuZXJneSBzY2FubmluZyBsb2dpYy4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOICAgICAgICAgIDEKKworLyoqCisgKiBAZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyAqCisgKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKioKKyAqIEBkZWYgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRQorICoKKyAqIFRoZSBwYWdlIHNpemUgb2Ygc2V0dGluZ3MuCisgKgorICovCisjZGVmaW5lIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMAorCisvKioKKyAqIEBkZWYgU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNCisgKgorICogVGhlIHBhZ2UgbnVtYmVyIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvKioKKyAqIEBkZWYgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU0KKyAqCisgKiBUaGUgbnVtYmVyIG9mIHNob3J0IHNvdXJjZSBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfU0hPUlRfRU5UUllfTlVNICAgICAgICAgICAgICAgICA2CisKKy8qKgorICogQGRlZiBSQURJT19DT05GSUdfU1JDX01BVENIX0VYVF9FTlRSWV9OVU0KKyAqCisgKiBUaGUgbnVtYmVyIG9mIGV4dGVuZGVkIHNvdXJjZSBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRVhUX0VOVFJZX05VTSAgICAgICAgICAgICAgICAgICA2CisKKy8qKgorICogQGRlZiBSQURJT19DT05GSUdfWFhYCisgKgorICogVGhlIFJhZGlvIGNvbmZpZ3VyYXRpb24gQXV0by1nZW5lcmF0ZWQgYnkgU2ltcGxpY2l0eSBTdHVkaW8gKHJhaWxfY29uZmlnLmgpLgorICoKKyAqLworI2RlZmluZSBSQURJT19DT05GSUdfQkFTRV9GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ1MDAwMDAwMFVMCisjZGVmaW5lIFJBRElPX0NPTkZJR19YVEFMX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODQwMDAwMFVMCisjZGVmaW5lIFJBRElPX0NPTkZJR19CSVRSQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMi40a2JwcyIKKyNkZWZpbmUgUkFESU9fQ09ORklHX01PRFVMQVRJT05fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICJGU0syIgorI2RlZmluZSBSQURJT19DT05GSUdfREVWSUFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEuMmtIeiIKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfRUZSMzJfQ09ORklHX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvcGxhdGZvcm0tZWZyMzIuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9wbGF0Zm9ybS1lZnIzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNmQ1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvcGxhdGZvcm0tZWZyMzIuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICoKKyAqLworCisjaWZuZGVmIFBMQVRGT1JNX0VGUjMyX0hfCisjZGVmaW5lIFBMQVRGT1JNX0VGUjMyX0hfCisKKyNpbmNsdWRlICJlbV9kZXZpY2UuaCIKKyNpbmNsdWRlICJlbV9zeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3JlX2NtNC5oIgorCisvLyBHbG9iYWwgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUKK2V4dGVybiBvdEluc3RhbmNlICpzSW5zdGFuY2U7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYWxhcm0gc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGVmcjMyQWxhcm1Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxhcm0gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIGVmcjMyQWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFkaW8gc2VydmljZSB1c2VkIGJ5IE9wZW5UaGVhZC4KKyAqCisgKi8KK3ZvaWQgZWZyMzJSYWRpb0luaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkZWluaXRpYWxpemVzIHRoZSByYWRpbyBzZXJ2aWNlIHVzZWQgYnkgT3BlblRoZWFkLgorICoKKyAqLwordm9pZCBlZnIzMlJhZGlvRGVpbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgcmFkaW8gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIGVmcjMyUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBVQVJUIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBlZnIzMlVhcnRQcm9jZXNzKHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIE1pc2MgbW9kdWxlLgorICoKKyAqLwordm9pZCBlZnIzMk1pc2NJbml0KHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIEFEQyBtb2R1bGUgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICoKKyAqLwordm9pZCBlZnIzMlJhbmRvbUluaXQodm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fRUZSMzJfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9wbGF0Zm9ybS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViMzM5NwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisKKyNpbmNsdWRlICJwYS5oIgorI2luY2x1ZGUgInB0aS5oIgorI2luY2x1ZGUgImJzcC5oIgorI2luY2x1ZGUgImVtX2VtdS5oIgorI2luY2x1ZGUgImVtX2NtdS5oIgorI2luY2x1ZGUgImVtX2NoaXAuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS1lZnIzMi5oIgorI2luY2x1ZGUgInJhaWwuaCIKKyNpbmNsdWRlICJyYWlsX2llZWU4MDIxNTQuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgiCisKK290SW5zdGFuY2UgKnNJbnN0YW5jZTsKKwordm9pZCBIQUxfSW5pdCh2b2lkKTsKKwordm9pZCBQbGF0Zm9ybUluaXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7CisKKyAgICBDSElQX0luaXQoKTsKKyAgICBIQUxfSW5pdCgpOworICAgIEJTUF9Jbml0KEJTUF9JTklUX0JDQyk7CisKKyAgICBvdFBsYXRVYXJ0RW5hYmxlKCk7CisKKyAgICBSQUlMX0luaXRfdCByYWlsSW5pdFBhcmFtcyA9CisgICAgeworICAgICAgICAxMjgsIC8vIG1heFBhY2tldExlbmd0aDogVU5VU0VECisgICAgICAgIFJBRElPX0NPTkZJR19YVEFMX0ZSRVFVRU5DWSwKKyAgICAgICAgMAorICAgIH07CisgICAgUkFJTF9SZkluaXQoJnJhaWxJbml0UGFyYW1zKTsKKyAgICBSQUlMX1JmSWRsZSgpOworCisgICAgZWZyMzJBbGFybUluaXQoKTsKKyAgICBlZnIzMlJhZGlvSW5pdCgpOworICAgIGVmcjMyTWlzY0luaXQoKTsKKyAgICBlZnIzMlJhbmRvbUluaXQoKTsKK30KKwordm9pZCBQbGF0Zm9ybURlaW5pdCh2b2lkKQoreworICAgIGVmcjMyUmFkaW9EZWluaXQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzSW5zdGFuY2UgPSBhSW5zdGFuY2U7CisKKyAgICAvLyBzaG91bGQgc2xlZXAgYW5kIHdhaXQgZm9yIGludGVycnVwdHMgaGVyZQorCisgICAgZWZyMzJVYXJ0UHJvY2VzcygpOworICAgIGVmcjMyUmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgZWZyMzJBbGFybVByb2Nlc3MoYUluc3RhbmNlKTsKK30KKwordm9pZCBoYWxJbml0Q2hpcFNwZWNpZmljKHZvaWQpCit7CisgICAgQ01VX0hGWE9Jbml0X1R5cGVEZWYgaGZ4b0luaXQgPSBDTVVfSEZYT0lOSVRfV1NUS19ERUZBVUxUOworICAgIFJBRElPX1BUSUluaXRfdCBwdGlJbml0ID0gUkFESU9fUFRJX0lOSVQ7CisgICAgUkFESU9fUEFJbml0X3QgcGFJbml0OworCisgICAgU1lTVEVNX0NoaXBSZXZpc2lvbl9UeXBlRGVmIGNoaXBSZXY7CisgICAgU1lTVEVNX0NoaXBSZXZpc2lvbkdldCgmY2hpcFJldik7CisKKyAgICAvLyBJbml0IERDREMgcmVndWxhdG9yIGFuZCBIRlhPIHdpdGggV1NUSyByYWRpbyBib2FyZCBzcGVjaWZpYyBwYXJhbWV0ZXJzCisgICAgLy8gZnJvbSBzMDI1X3N3XGtpdHNcU0xXU1RLNjEwMEFfRUZSMzJNR1xjb25maWdcYnNwY29uZmlnLmgKKyNpZmRlZiBFTVVfRENEQ0lOSVRfV1NUS19ERUZBVUxUCisgICAgRU1VX0RDRENJbml0X1R5cGVEZWYgZGNkY0luaXQgPSBFTVVfRENEQ0lOSVRfV1NUS19ERUZBVUxUOworICAgIEVNVV9EQ0RDSW5pdCgmZGNkY0luaXQpOworI2Vsc2UKKyAgICBFTVVfRENEQ1Bvd2VyT2ZmKCk7CisjZW5kaWYKKyAgICBDTVVfSEZYT0luaXQoJmhmeG9Jbml0KTsKKyAgICBTeXN0ZW1IRlhPQ2xvY2tTZXQoUkFESU9fQ09ORklHX1hUQUxfRlJFUVVFTkNZKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIFBhY2tldCBUcmFjZSBJbnRlcmZhY2UgKFBUSSkgdG8gbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gaW4KKyAgICAvLyB0aGUgYm9hcmQgaGVhZGVyCisgICAgUkFESU9fUFRJX0luaXQoJnB0aUluaXQpOworCisgICAgLyogU3dpdGNoIEhGQ0xLIHRvIEhGWE8gYW5kIGRpc2FibGUgSEZSQ08gKi8KKyAgICBDTVVfQ2xvY2tTZWxlY3RTZXQoY211Q2xvY2tfSEYsIGNtdVNlbGVjdF9IRlhPKTsKKyAgICBDTVVfT3NjaWxsYXRvckVuYWJsZShjbXVPc2NfSEZSQ08sIGZhbHNlLCBmYWxzZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBQQSBub3cgdGhhdCB0aGUgSEZYTyBpcyB1cCBhbmQgdGhlIHRpbWluZyBpcyBjb3JyZWN0CisjaWYgKFJBRElPX0NPTkZJR19CQVNFX0ZSRVFVRU5DWSA8IDEwMDAwMDAwMDBVTCkKKyAgICBwYUluaXQgPSAoUkFESU9fUEFJbml0X3QpIFJBRElPX1BBX1NVQkdJR19JTklUOworI2Vsc2UKKyAgICBwYUluaXQgPSAoUkFESU9fUEFJbml0X3QpIFJBRElPX1BBXzJQNF9JTklUOworI2VuZGlmCisKKyAgICBpZiAoIVJBRElPX1BBX0luaXQoJnBhSW5pdCkpCisgICAgeworICAgICAgICAvLyBFcnJvcjogVGhlIFBBIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBkdWUgdG8gYW4gaW1wcm9wZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgLy8gUGxlYXNlIGVuc3VyZSB5b3VyIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQgZm9yIHRoZSBzZWxlY3RlZCBwYXJ0LgorICAgICAgICB3aGlsZSAoMSk7CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSBvdGhlciBjaGlwIGNsb2NrcworICAgIENNVV9Pc2NpbGxhdG9yRW5hYmxlKGNtdU9zY19MRlJDTywgdHJ1ZSwgdHJ1ZSk7CisgICAgQ01VX0Nsb2NrU2VsZWN0U2V0KGNtdUNsb2NrX0xGQSwgY211U2VsZWN0X0xGUkNPKTsKKyAgICBDTVVfQ2xvY2tTZWxlY3RTZXQoY211Q2xvY2tfTEZCLCBjbXVTZWxlY3RfTEZSQ08pOworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19DT1JFTEUsIHRydWUpOworfQorCit2b2lkIEhBTF9Jbml0KHZvaWQpCit7CisgICAgaGFsSW5pdENoaXBTcGVjaWZpYygpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgyZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3JhZGlvLmMKQEAgLTAsMCArMSw4NDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCisjaW5jbHVkZSAiZW1fY29yZS5oIgorI2luY2x1ZGUgImVtX3N5c3RlbS5oIgorI2luY2x1ZGUgInJhaWwuaCIKKyNpbmNsdWRlICJyYWlsX2llZWU4MDIxNTQuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtZWZyMzItY29uZmlnLmgiCisKK2VudW0KK3sKKyAgICBJRUVFODAyMTU0X01JTl9MRU5HVEggICAgICAgICAgICAgICAgPSA1LAorICAgIElFRUU4MDIxNTRfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDEyNywKKyAgICBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICAgICAgICAgPSA1LAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLICAgICAgICAgICA9IDB4NywKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLICAgICAgICAgICAgPSAweDIsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgICAgICAgID0gMSA8PCA0LAorICAgIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICAgICAgICAgPSAyLAorfTsKKworZW51bQoreworICAgIEVGUjMyX1JFQ0VJVkVfU0VOU0lUSVZJVFkgPSAtMTAwLCAgLy8gZEJtCit9OworCitzdGF0aWMgdWludDE2X3QgICAgICAgc1BhbklkICAgICAgICAgICAgID0gMDsKK3N0YXRpYyB1aW50OF90ICAgICAgICBzQ2hhbm5lbCAgICAgICAgICAgPSAwOworc3RhdGljIGJvb2wgICAgICAgICAgIHNUcmFuc21pdEJ1c3kgICAgICA9IGZhbHNlOworc3RhdGljIGJvb2wgICAgICAgICAgIHNQcm9taXNjdW91cyAgICAgICA9IGZhbHNlOworc3RhdGljIGJvb2wgICAgICAgICAgIHNJc1JlY2VpdmVyRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIGJvb2wgICAgICAgICAgIHNJc1NyY01hdGNoRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIG90UmFkaW9TdGF0ZSAgIHNTdGF0ZSAgICAgICAgICAgICA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworCitzdGF0aWMgdWludDhfdCAgICAgICAgc1JlY2VpdmVCdWZmZXJbSUVFRTgwMjE1NF9NQVhfTEVOR1RIICsgMSArIHNpemVvZihSQUlMX1J4UGFja2V0SW5mb190KV07CitzdGF0aWMgdWludDhfdCAgICAgICAgc1JlY2VpdmVQc2R1W0lFRUU4MDIxNTRfTUFYX0xFTkdUSF07CitzdGF0aWMgb3RSYWRpb0ZyYW1lICAgc1JlY2VpdmVGcmFtZTsKK3N0YXRpYyBvdEVycm9yICAgICAgICBzUmVjZWl2ZUVycm9yOworCitzdGF0aWMgb3RSYWRpb0ZyYW1lICAgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgdWludDhfdCAgICAgICAgc1RyYW5zbWl0UHNkdVtJRUVFODAyMTU0X01BWF9MRU5HVEhdOworc3RhdGljIG90RXJyb3IgICAgICAgIHNUcmFuc21pdEVycm9yOworCit0eXBlZGVmIHN0cnVjdCAgICAgICAgc3JjTWF0Y2hFbnRyeQoreworICAgIHVpbnQxNl90IGNoZWNrc3VtOworICAgIGJvb2wgICAgIGFsbG9jYXRlZDsKK30gc1NyY01hdGNoRW50cnk7CisKK3N0YXRpYyBzU3JjTWF0Y2hFbnRyeSBzcmNNYXRjaFNob3J0RW50cnlbUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU1dOworc3RhdGljIHNTcmNNYXRjaEVudHJ5IHNyY01hdGNoRXh0RW50cnlbUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FWFRfRU5UUllfTlVNXTsKKwordm9pZCBlZnIzMlJhZGlvSW5pdCh2b2lkKQoreworICAgIC8vIERhdGEgTWFuYWdlbWVudAorICAgIFJBSUxfRGF0YUNvbmZpZ190IHJhaWxEYXRhQ29uZmlnID0KKyAgICB7CisgICAgICAgIFRYX1BBQ0tFVF9EQVRBLAorICAgICAgICBSWF9QQUNLRVRfREFUQSwKKyAgICAgICAgUEFDS0VUX01PREUsCisgICAgICAgIFBBQ0tFVF9NT0RFLAorICAgIH07CisKKyAgICBSQUlMX0RhdGFDb25maWcoJnJhaWxEYXRhQ29uZmlnKTsKKworICAgIC8vIDgwMi4xNS40IGNvbmZpZ3VyYXRpb24KKyAgICBSQUlMX0lFRUU4MDIxNTRfQ29uZmlnX3QgY29uZmlnID0KKyAgICB7CisgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvbWlzY3VvdXNNb2RlCisgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNQYW5Db29yZGluYXRvcgorICAgICAgICBSQUlMX0lFRUU4MDIxNTRfQUNDRVBUX1NUQU5EQVJEX0ZSQU1FUywgIC8vIGZyYW1lc01hc2sKKyAgICAgICAgUkFJTF9SRl9TVEFURV9SWCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0U3RhdGUKKyAgICAgICAgMTAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZGxlVGltZQorICAgICAgICAxOTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR1cm5hcm91bmRUaW1lCisgICAgICAgIDg5NCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNrVGltZW91dAorICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZHJlc3NlcworICAgIH07CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggID0gMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qc2R1ICAgID0gc1JlY2VpdmVQc2R1OworICAgIHNUcmFuc21pdEZyYW1lLm1MZW5ndGggPSAwOworICAgIHNUcmFuc21pdEZyYW1lLm1Qc2R1ICAgPSBzVHJhbnNtaXRQc2R1OworCisgICAgaWYgKFJBSUxfSUVFRTgwMjE1NF8ycDRHSHpSYWRpb0NvbmZpZygpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoUkFJTF9JRUVFODAyMTU0X0luaXQoJmNvbmZpZykpCisgICAgeworICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KKworICAgIFJBSUxfVHhQb3dlclNldChPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUik7CisKKyAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIkluaXRpYWxpemVkIiwgTlVMTCk7Cit9CisKK3ZvaWQgZWZyMzJSYWRpb0RlaW5pdCh2b2lkKQoreworICAgIFJBSUxfUmZJZGxlKCk7CisgICAgUkFJTF9JRUVFODAyMTU0X0RlaW5pdCgpOworfQorCit2b2lkIHNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKworICAgIG90RVhQRUNUKHNDaGFubmVsICE9IGFDaGFubmVsKTsKKworICAgIGlmIChzSXNSZWNlaXZlckVuYWJsZWQpCisgICAgeworICAgICAgICBSQUlMX1JmSWRsZSgpOworICAgICAgICBlbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gZmFsc2U7CisgICAgfQorCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJDaGFubmVsPSVkIiwgYUNoYW5uZWwpOworCisgICAgc0NoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgIGlmIChlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKFJBSUxfUnhTdGFydChhQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBzSXNSZWNlaXZlckVuYWJsZWQgPSB0cnVlOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphSWVlZUV1aTY0KQoreworICAgIHVpbnQ2NF90IGV1aTY0OworICAgIHVpbnQ4X3QgKmV1aTY0UHRyID0gTlVMTDsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBldWk2NCA9IFNZU1RFTV9HZXRVbmlxdWUoKTsKKyAgICBldWk2NFB0ciA9ICh1aW50OF90ICopJmV1aTY0OworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1RfRVhUX0FERFJFU1NfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgYUllZWVFdWk2NFtpXSA9IGV1aTY0UHRyWyhPVF9FWFRfQUREUkVTU19TSVpFIC0gMSkgLSBpXTsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIlBBTklEPSVYIiwgYVBhbklkKTsKKworICAgIHNQYW5JZCA9IGFQYW5JZDsKKyAgICBSQUlMX0lFRUU4MDIxNTRfU2V0UGFuSWQoYVBhbklkKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiRXh0QWRkcj0lWCVYJVglWCVYJVglWCVYIiwKKyAgICAgICAgICAgICAgICAgIGFBZGRyZXNzWzddLCBhQWRkcmVzc1s2XSwgYUFkZHJlc3NbNV0sIGFBZGRyZXNzWzRdLAorICAgICAgICAgICAgICAgICAgYUFkZHJlc3NbM10sIGFBZGRyZXNzWzJdLCBhQWRkcmVzc1sxXSwgYUFkZHJlc3NbMF0pOworCisgICAgUkFJTF9JRUVFODAyMTU0X1NldExvbmdBZGRyZXNzKGFBZGRyZXNzKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU2hvcnRBZGRyPSVYIiwgYUFkZHJlc3MpOworCisgICAgUkFJTF9JRUVFODAyMTU0X1NldFNob3J0QWRkcmVzcyhhQWRkcmVzcyk7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgb3RFWFBFQ1QoIW90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJTdGF0ZT1PVF9SQURJT19TVEFURV9TTEVFUCIsIE5VTEwpOworICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBvdEVYUEVDVChvdFBsYXRSYWRpb0lzRW5hYmxlZChhSW5zdGFuY2UpKTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU3RhdGU9T1RfUkFESU9fU1RBVEVfRElTQUJMRUQiLCBOVUxMKTsKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBDT1JFX0RFQ0xBUkVfSVJRX1NUQVRFOworICAgIENPUkVfRU5URVJfQ1JJVElDQUwoKTsKKworICAgIG90RVhQRUNUX0FDVElPTigoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUKSAmJiAoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKSwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiU3RhdGU9T1RfUkFESU9fU1RBVEVfU0xFRVAiLCBOVUxMKTsKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9TTEVFUDsKKworICAgIGlmIChzSXNSZWNlaXZlckVuYWJsZWQpCisgICAgeworICAgICAgICBSQUlMX1JmSWRsZUV4dChSQUlMX0lETEUsIHRydWUpOworICAgICAgICBzSXNSZWNlaXZlckVuYWJsZWQgPSBmYWxzZTsKKyAgICB9CisKK2V4aXQ6CisgICAgQ09SRV9FWElUX0NSSVRJQ0FMKCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJTdGF0ZT1PVF9SQURJT19TVEFURV9SRUNFSVZFIiwgTlVMTCk7CisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICBzZXRDaGFubmVsKGFDaGFubmVsKTsKKyAgICBzUmVjZWl2ZUZyYW1lLm1DaGFubmVsID0gYUNoYW5uZWw7CisKKyAgICBpZiAoIXNJc1JlY2VpdmVyRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG90RVhQRUNUX0FDVElPTihSQUlMX1J4U3RhcnQoYUNoYW5uZWwpID09IFJBSUxfU1RBVFVTX05PX0VSUk9SLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKK2V4aXQ6CisgICAgQ09SRV9FWElUX0NSSVRJQ0FMKCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvVHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSQUlMX0NzbWFDb25maWdfdCBjc21hQ29uZmlnID0gUkFJTF9DU01BX0NPTkZJR184MDJfMTVfNF8yMDAzXzJwNF9HSHpfT1FQU0tfQ1NNQTsKKyAgICBSQUlMX1R4RGF0YV90IHR4RGF0YTsKKyAgICBSQUlMX1R4T3B0aW9uc190IHR4T3B0aW9uOworICAgIHVpbnQ4X3QgZnJhbWVbSUVFRTgwMjE1NF9NQVhfTEVOR1RIICsgMV07CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkgJiYgKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCksCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9UUkFOU01JVDsKKyAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc1RyYW5zbWl0QnVzeSA9IHRydWU7CisKKyAgICBmcmFtZVswXSA9IGFGcmFtZS0+bUxlbmd0aDsKKyAgICBtZW1jcHkoZnJhbWUgKyAxLCBhRnJhbWUtPm1Qc2R1LCBhRnJhbWUtPm1MZW5ndGgpOworICAgIHR4RGF0YS5kYXRhUHRyID0gZnJhbWU7CisgICAgdHhEYXRhLmRhdGFMZW5ndGggPSBhRnJhbWUtPm1MZW5ndGggLSAxOworCisgICAgdHhPcHRpb24ud2FpdEZvckFjayA9IChhRnJhbWUtPm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPyB0cnVlIDogZmFsc2U7CisgICAgdHhPcHRpb24ucmVtb3ZlQ3JjICA9IGZhbHNlOworICAgIHR4T3B0aW9uLnN5bmNXb3JkSWQgPSAwOworCisgICAgUkFJTF9UeFBvd2VyU2V0KGFGcmFtZS0+bVBvd2VyKTsKKyAgICBzZXRDaGFubmVsKGFGcmFtZS0+bUNoYW5uZWwpOworICAgIFJBSUxfUmZJZGxlRXh0KFJBSUxfSURMRSwgdHJ1ZSk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oUkFJTF9UeERhdGFMb2FkKCZ0eERhdGEpID09IFJBSUxfU1RBVFVTX05PX0VSUk9SLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oUkFJTF9UeFN0YXJ0V2l0aE9wdGlvbnMoYUZyYW1lLT5tQ2hhbm5lbCwgJnR4T3B0aW9uLCBSQUlMX0NjYUNzbWEsICZjc21hQ29uZmlnKSA9PSBSQUlMX1NUQVRVU19OT19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAodWludDhfdCkoUkFJTF9SeEdldFJTU0koKSA+PiAyKTsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQ7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBzUHJvbWlzY3VvdXM7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBzUHJvbWlzY3VvdXMgPSBhRW5hYmxlOworICAgIFJBSUxfSUVFRTgwMjE1NF9TZXRQcm9taXNjdW91c01vZGUoYUVuYWJsZSk7Cit9CisKK2ludDhfdCBmaW5kU3JjTWF0Y2hBdmFpbEVudHJ5KGJvb2wgYVNob3J0QWRkcmVzcykKK3sKKyAgICBpbnQ4X3QgZW50cnkgPSAtMTsKKworICAgIGlmIChhU2hvcnRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU07IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFzcmNNYXRjaFNob3J0RW50cnlbaV0uYWxsb2NhdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX0VYVF9FTlRSWV9OVU07IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFzcmNNYXRjaEV4dEVudHJ5W2ldLmFsbG9jYXRlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK2ludDhfdCBmaW5kU3JjTWF0Y2hTaG9ydEVudHJ5KGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBhU2hvcnRBZGRyZXNzICsgc1BhbklkOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9TSE9SVF9FTlRSWV9OVU07IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjaGVja3N1bSA9PSBzcmNNYXRjaFNob3J0RW50cnlbaV0uY2hlY2tzdW0gJiYKKyAgICAgICAgICAgIHNyY01hdGNoU2hvcnRFbnRyeVtpXS5hbGxvY2F0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCitpbnQ4X3QgZmluZFNyY01hdGNoRXh0RW50cnkoY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBzUGFuSWQ7CisKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbMF0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzFdIDw8IDgpOworICAgIGNoZWNrc3VtICs9ICh1aW50MTZfdClhRXh0QWRkcmVzc1syXSB8ICh1aW50MTZfdCkoYUV4dEFkZHJlc3NbM10gPDwgOCk7CisgICAgY2hlY2tzdW0gKz0gKHVpbnQxNl90KWFFeHRBZGRyZXNzWzRdIHwgKHVpbnQxNl90KShhRXh0QWRkcmVzc1s1XSA8PCA4KTsKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbNl0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzddIDw8IDgpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FWFRfRU5UUllfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2hlY2tzdW0gPT0gc3JjTWF0Y2hFeHRFbnRyeVtpXS5jaGVja3N1bSAmJgorICAgICAgICAgICAgc3JjTWF0Y2hFeHRFbnRyeVtpXS5hbGxvY2F0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCit2b2lkIGFkZFRvU3JjTWF0Y2hTaG9ydEluZGlyZWN0KHVpbnQ4X3QgZW50cnksIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBhU2hvcnRBZGRyZXNzICsgc1BhbklkOworCisgICAgc3JjTWF0Y2hTaG9ydEVudHJ5W2VudHJ5XS5jaGVja3N1bSA9IGNoZWNrc3VtOworICAgIHNyY01hdGNoU2hvcnRFbnRyeVtlbnRyeV0uYWxsb2NhdGVkID0gdHJ1ZTsKK30KKwordm9pZCBhZGRUb1NyY01hdGNoRXh0SW5kaXJlY3QodWludDhfdCBlbnRyeSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSBzUGFuSWQ7CisKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbMF0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzFdIDw8IDgpOworICAgIGNoZWNrc3VtICs9ICh1aW50MTZfdClhRXh0QWRkcmVzc1syXSB8ICh1aW50MTZfdCkoYUV4dEFkZHJlc3NbM10gPDwgOCk7CisgICAgY2hlY2tzdW0gKz0gKHVpbnQxNl90KWFFeHRBZGRyZXNzWzRdIHwgKHVpbnQxNl90KShhRXh0QWRkcmVzc1s1XSA8PCA4KTsKKyAgICBjaGVja3N1bSArPSAodWludDE2X3QpYUV4dEFkZHJlc3NbNl0gfCAodWludDE2X3QpKGFFeHRBZGRyZXNzWzddIDw8IDgpOworCisgICAgc3JjTWF0Y2hFeHRFbnRyeVtlbnRyeV0uY2hlY2tzdW0gPSBjaGVja3N1bTsKKyAgICBzcmNNYXRjaEV4dEVudHJ5W2VudHJ5XS5hbGxvY2F0ZWQgPSB0cnVlOworfQorCit2b2lkIHJlbW92ZUZyb21TcmNNYXRjaFNob3J0SW5kaXJlY3QodWludDhfdCBlbnRyeSkKK3sKKyAgICBzcmNNYXRjaFNob3J0RW50cnlbZW50cnldLmFsbG9jYXRlZCA9IGZhbHNlOworICAgIG1lbXNldCgmc3JjTWF0Y2hTaG9ydEVudHJ5W2VudHJ5XS5jaGVja3N1bSwgMCwgc2l6ZW9mKHVpbnQxNl90KSk7Cit9CisKK3ZvaWQgcmVtb3ZlRnJvbVNyY01hdGNoRXh0SW5kaXJlY3QodWludDhfdCBlbnRyeSkKK3sKKyAgICBzcmNNYXRjaEV4dEVudHJ5W2VudHJ5XS5hbGxvY2F0ZWQgPSBmYWxzZTsKKyAgICBtZW1zZXQoJnNyY01hdGNoRXh0RW50cnlbZW50cnldLmNoZWNrc3VtLCAwLCBzaXplb2YodWludDE2X3QpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgLy8gc2V0IEZyYW1lIFBlbmRpbmcgYml0IGZvciBhbGwgb3V0Z29pbmcgQUNLcyBpZiBhRW5hYmxlIGlzIGZhbHNlCisgICAgc0lzU3JjTWF0Y2hFbmFibGVkID0gYUVuYWJsZTsKKworICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisKKyAgICBDT1JFX0RFQ0xBUkVfSVJRX1NUQVRFOworICAgIENPUkVfRU5URVJfQ1JJVElDQUwoKTsKKworICAgIGVudHJ5ID0gZmluZFNyY01hdGNoQXZhaWxFbnRyeSh0cnVlKTsKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkFkZCBTaG9ydEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAgJiYgZW50cnkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX1NIT1JUX0VOVFJZX05VTSwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGFkZFRvU3JjTWF0Y2hTaG9ydEluZGlyZWN0KGVudHJ5LCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBlbnRyeSA9IGZpbmRTcmNNYXRjaEF2YWlsRW50cnkoZmFsc2UpOworICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiQWRkIEV4dEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAgJiYgZW50cnkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX0VYVF9FTlRSWV9OVU0sCisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBhZGRUb1NyY01hdGNoRXh0SW5kaXJlY3QoZW50cnksIGFFeHRBZGRyZXNzKTsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50OF90IGVudHJ5ID0gLTE7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgQ09SRV9ERUNMQVJFX0lSUV9TVEFURTsKKyAgICBDT1JFX0VOVEVSX0NSSVRJQ0FMKCk7CisKKyAgICBlbnRyeSA9IGZpbmRTcmNNYXRjaFNob3J0RW50cnkoYVNob3J0QWRkcmVzcyk7CisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBTaG9ydEFkZHIgZW50cnk6ICVkIiwgZW50cnkpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGVudHJ5ID49IDAgJiYgZW50cnkgPCBSQURJT19DT05GSUdfU1JDX01BVENIX1NIT1JUX0VOVFJZX05VTSwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19BRERSRVNTKTsKKworICAgIHJlbW92ZUZyb21TcmNNYXRjaFNob3J0SW5kaXJlY3QoZW50cnkpOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludDhfdCBlbnRyeSA9IC0xOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgZW50cnkgPSBmaW5kU3JjTWF0Y2hFeHRFbnRyeShhRXh0QWRkcmVzcyk7CisgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJDbGVhciBFeHRBZGRyIGVudHJ5OiAlZCIsIGVudHJ5KTsKKworICAgIG90RVhQRUNUX0FDVElPTihlbnRyeSA+PSAwICYmIGVudHJ5IDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FWFRfRU5UUllfTlVNLAorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgcmVtb3ZlRnJvbVNyY01hdGNoRXh0SW5kaXJlY3QoZW50cnkpOworCitleGl0OgorICAgIENPUkVfRVhJVF9DUklUSUNBTCgpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG90TG9nRGViZ1BsYXQoc0luc3RhbmNlLCAiQ2xlYXIgU2hvcnRBZGRyIGVudHJpZXMiLCBOVUxMKTsKKworICAgIG1lbXNldChzcmNNYXRjaFNob3J0RW50cnksIDAsIHNpemVvZihzcmNNYXRjaFNob3J0RW50cnkpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdExvZ0RlYmdQbGF0KHNJbnN0YW5jZSwgIkNsZWFyIEV4dEFkZHIgZW50cmllcyIsIE5VTEwpOworCisgICAgbWVtc2V0KHNyY01hdGNoRXh0RW50cnksIDAsIHNpemVvZihzcmNNYXRjaEV4dEVudHJ5KSk7Cit9CisKK3ZvaWQgUkFJTENiX0lFRUU4MDIxNTRfRGF0YVJlcXVlc3RDb21tYW5kKFJBSUxfSUVFRTgwMjE1NF9BZGRyZXNzX3QgKmFBZGRyZXNzKQoreworICAgIGlmIChzSXNTcmNNYXRjaEVuYWJsZWQpCisgICAgeworICAgICAgICBpZiAoKGFBZGRyZXNzLT5sZW5ndGggPT0gUkFJTF9JRUVFODAyMTU0X0xvbmdBZGRyZXNzICYmCisgICAgICAgICAgICAgZmluZFNyY01hdGNoRXh0RW50cnkoYUFkZHJlc3MtPmxvbmdBZGRyZXNzKSA+PSAwKSB8fAorICAgICAgICAgICAgKGFBZGRyZXNzLT5sZW5ndGggPT0gUkFJTF9JRUVFODAyMTU0X1Nob3J0QWRkcmVzcyAmJgorICAgICAgICAgICAgIGZpbmRTcmNNYXRjaFNob3J0RW50cnkoYUFkZHJlc3MtPnNob3J0QWRkcmVzcykgPj0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJBSUxfSUVFRTgwMjE1NF9TZXRGcmFtZVBlbmRpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAodm9pZClhQWRkcmVzczsKKyAgICAgICAgUkFJTF9JRUVFODAyMTU0X1NldEZyYW1lUGVuZGluZygpOworICAgIH0KK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuZXJneVNjYW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFTY2FuQ2hhbm5lbCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbikKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVNjYW5DaGFubmVsOworICAgICh2b2lkKWFTY2FuRHVyYXRpb247CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKwordm9pZCBSQUlMQ2JfVHhSYWRpb1N0YXR1cyh1aW50OF90IGFTdGF0dXMpCit7CisgICAgc3dpdGNoIChhU3RhdHVzKQorICAgIHsKKyAgICBjYXNlIFJBSUxfVFhfQ09ORklHX0NIQU5ORUxfQlVTWToKKyAgICAgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOworICAgICAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSQUlMX1RYX0NPTkZJR19UWF9BQk9SVEVEOgorICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgICAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSQUlMX1RYX0NPTkZJR19CVUZGRVJfVU5ERVJGTE9XOgorICAgICAgICBzVHJhbnNtaXRFcnJvciA9IE9UX0VSUk9SX0FCT1JUOworICAgICAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFJBSUxDYl9UeFBhY2tldFNlbnQoUkFJTF9UeFBhY2tldEluZm9fdCAqYVR4UGFja2V0SW5mbykKK3sKKyAgICAodm9pZClhVHhQYWNrZXRJbmZvOworICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzVHJhbnNtaXRCdXN5ID0gZmFsc2U7Cit9CisKK3ZvaWQgUkFJTENiX1J4UGFja2V0UmVjZWl2ZWQodm9pZCAqYVJ4UGFja2V0SGFuZGxlKQoreworICAgIFJBSUxfUnhQYWNrZXRJbmZvX3QgKnJ4UGFja2V0SW5mbzsKKyAgICB1aW50OF90IGxlbmd0aDsKKworICAgIHJ4UGFja2V0SW5mbyA9IChSQUlMX1J4UGFja2V0SW5mb190ICopYVJ4UGFja2V0SGFuZGxlOworCisgICAgLy8gY2hlY2sgcmVjdiBwYWNrZXQgYXBwZW5kZWQgaW5mbworICAgIG90RVhQRUNUKHJ4UGFja2V0SW5mbyAhPSBOVUxMICYmCisgICAgICAgICAgICAgcnhQYWNrZXRJbmZvLT5hcHBlbmRlZEluZm8uY3JjU3RhdHVzICYmCisgICAgICAgICAgICAgcnhQYWNrZXRJbmZvLT5hcHBlbmRlZEluZm8uZnJhbWVDb2RpbmdTdGF0dXMpOworCisgICAgbGVuZ3RoID0gcnhQYWNrZXRJbmZvLT5kYXRhTGVuZ3RoICsgMTsKKworICAgIC8vIGNoZWNrIHRoZSBsZW5ndGggaW4gcmVjdiBwYWNrZXQgaW5mbyBzdHJ1Y3R1cmUKKyAgICBvdEVYUEVDVChsZW5ndGggPT0gcnhQYWNrZXRJbmZvLT5kYXRhUHRyWzBdKTsKKworICAgIC8vIGNoZWNrIHRoZSBsZW5naHQgdmFsaWRpdHkgb2YgcmVjdiBwYWNrZXQKKyAgICBvdEVYUEVDVChsZW5ndGggPj0gSUVFRTgwMjE1NF9NSU5fTEVOR1RIICYmIGxlbmd0aCA8PSBJRUVFODAyMTU0X01BWF9MRU5HVEgpOworCisgICAgb3RMb2dJbmZvUGxhdChzSW5zdGFuY2UsICJSZWNlaXZlZCBkYXRhOiVkIiwgcnhQYWNrZXRJbmZvLT5kYXRhTGVuZ3RoKTsKKworICAgIG1lbWNweShzUmVjZWl2ZUZyYW1lLm1Qc2R1LCByeFBhY2tldEluZm8tPmRhdGFQdHIgKyAxLCByeFBhY2tldEluZm8tPmRhdGFMZW5ndGgpOworICAgIHNSZWNlaXZlRnJhbWUubVBvd2VyID0gcnhQYWNrZXRJbmZvLT5hcHBlbmRlZEluZm8ucnNzaUxhdGNoOworICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IHJ4UGFja2V0SW5mby0+YXBwZW5kZWRJbmZvLmxxaTsKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSBsZW5ndGg7CisgICAgc1JlY2VpdmVFcnJvciA9IE9UX0VSUk9SX05PTkU7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIGVmcjMyUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAvLyBlbnN1cmUgcHJvY2VzcyB3b3VsZCBub3QgYmUgYnJva2VuIGJ5CisgICAgLy8gdGhlIGluY29taW5nIGludGVycnVwdCB3aXRoIGhpZ2hlciBwcmlvcml0eQorICAgIENPUkVfREVDTEFSRV9JUlFfU1RBVEU7CisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgaWYgKChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRSAmJiBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPiAwKSB8fAorICAgICAgICAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUICYmIHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IElFRUU4MDIxNTRfQUNLX0xFTkdUSCkpCisgICAgeworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICBpZiAob3RQbGF0RGlhZ01vZGVHZXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZURvbmUoYUluc3RhbmNlLCAmc1JlY2VpdmVGcmFtZSwgc1JlY2VpdmVFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHNpZ25hbCBNQUMgbGF5ZXIgZm9yIGVhY2ggcmVjZWl2ZWQgZnJhbWUgaWYgcHJvbWlzY291cyBpcyBlbmFibGVkCisgICAgICAgICAgICAvLyBvdGhlcndpc2Ugb25seSBzaWduYWwgTUFDIGxheWVyIGZvciBub24tQUNLIGZyYW1lCisgICAgICAgICAgICBpZiAoc1Byb21pc2N1b3VzIHx8IHNSZWNlaXZlRnJhbWUubUxlbmd0aCA+IElFRUU4MDIxNTRfQUNLX0xFTkdUSCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0luZm9QbGF0KHNJbnN0YW5jZSwgIlJlY2VpdmVkICVkIGJ5dGVzIiwgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCAmJiBzVHJhbnNtaXRCdXN5ID09IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKHNUcmFuc21pdEVycm9yICE9IE9UX0VSUk9SX05PTkUgfHwgKHNUcmFuc21pdEZyYW1lLm1Qc2R1WzBdICYgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNUcmFuc21pdEVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RMb2dEZWJnUGxhdChzSW5zdGFuY2UsICJUcmFuc21pdCBmYWlsZWQgRXJyb3JDb2RlPSVkIiwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgICAgICBpZiAob3RQbGF0RGlhZ01vZGVHZXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsIHNUcmFuc21pdEVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBOVUxMLCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID09IElFRUU4MDIxNTRfQUNLX0xFTkdUSCAmJgorICAgICAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tUHNkdVswXSAmIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLKSA9PSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLICYmCisgICAgICAgICAgICAgICAgIChzUmVjZWl2ZUZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRFNOX09GRlNFVF0gPT0gc1RyYW5zbWl0RnJhbWUubVBzZHVbSUVFRTgwMjE1NF9EU05fT0ZGU0VUXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisKKyAgICAgICAgICAgIG90TG9nSW5mb1BsYXQoc0luc3RhbmNlLCAiUmVjZWl2ZWQgQUNLOiVkIiwgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoKTsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCAmc1JlY2VpdmVGcmFtZSwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgfQorCisgICAgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKK30KKwordm9pZCBSQUlMQ2JfUnhBY2tUaW1lb3V0KHZvaWQpCit7CisgICAgc1RyYW5zbWl0RXJyb3IgPSBPVF9FUlJPUl9OT19BQ0s7Cit9CisKK3ZvaWQgUkFJTENiX1JmUmVhZHkodm9pZCkKK3sKK30KKwordm9pZCBSQUlMQ2JfQ2FsTmVlZGVkKHZvaWQpCit7Cit9CisKK3ZvaWQgUkFJTENiX1J4UmFkaW9TdGF0dXModWludDhfdCBhU3RhdHVzKQoreworICAgICh2b2lkKWFTdGF0dXM7Cit9CisKK3ZvaWQgUkFJTENiX1JhZGlvU3RhdGVDaGFuZ2VkKHVpbnQ4X3QgYVN0YXRlKQoreworICAgICh2b2lkKWFTdGF0ZTsKK30KKwordm9pZCBSQUlMQ2JfUnNzaUF2ZXJhZ2VEb25lKGludDE2X3QgYXZnUnNzaSkKK3sKKyAgICAodm9pZClhdmdSc3NpOworfQorCit2b2lkIFJBSUxDYl9SeEZpZm9BbG1vc3RGdWxsKHVpbnQxNl90IGFCeXRlc0F2YWlsYWJsZSkKK3sKKyAgICAodm9pZClhQnl0ZXNBdmFpbGFibGU7Cit9CisKK3ZvaWQgUkFJTENiX1R4Rmlmb0FsbW9zdEVtcHR5KHVpbnQxNl90IGFTcGFjZUF2YWlsYWJsZSkKK3sKKyAgICAodm9pZClhU3BhY2VBdmFpbGFibGU7Cit9CisKK3ZvaWQgKlJBSUxDYl9BbGxvY2F0ZU1lbW9yeSh1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICB1aW50OF90ICpwb2ludGVyID0gTlVMTDsKKyAgICBDT1JFX0RFQ0xBUkVfSVJRX1NUQVRFOworCisgICAgQ09SRV9FTlRFUl9DUklUSUNBTCgpOworCisgICAgb3RFWFBFQ1QoYVNpemUgPD0gKElFRUU4MDIxNTRfTUFYX0xFTkdUSCArIDEgKyBzaXplb2YoUkFJTF9SeFBhY2tldEluZm9fdCkpKTsKKworICAgIHBvaW50ZXIgPSBzUmVjZWl2ZUJ1ZmZlcjsKKworZXhpdDoKKyAgICBDT1JFX0VYSVRfQ1JJVElDQUwoKTsKKyAgICByZXR1cm4gcG9pbnRlcjsKK30KKwordm9pZCAqUkFJTENiX0JlZ2luV3JpdGVNZW1vcnkodm9pZCAqYUhhbmRsZSwgdWludDMyX3QgYU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICphdmFpbGFibGUpCit7CisgICAgKHZvaWQpYXZhaWxhYmxlOworICAgIHJldHVybiAoKHVpbnQ4X3QgKilhSGFuZGxlKSArIGFPZmZzZXQ7Cit9CisKK3ZvaWQgUkFJTENiX0VuZFdyaXRlTWVtb3J5KHZvaWQgKmFIYW5kbGUsIHVpbnQzMl90IGFPZmZzZXQsIHVpbnQzMl90IGFTaXplKQoreworICAgICh2b2lkKWFIYW5kbGU7CisgICAgKHZvaWQpYU9mZnNldDsKKyAgICAodm9pZClhU2l6ZTsKK30KKwordm9pZCBSQUlMQ2JfRnJlZU1lbW9yeSh2b2lkICphSGFuZGxlKQoreworICAgICh2b2lkKWFIYW5kbGU7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXREZWZhdWx0VHhQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIFJBSUxfVHhQb3dlclNldChhUG93ZXIpOworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gRUZSMzJfUkVDRUlWRV9TRU5TSVRJVklUWTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9yYW5kb20uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdiMzNmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3JhbmRvbS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCisjaW5jbHVkZSAiZW1fYWRjLmgiCisjaW5jbHVkZSAiZW1fY211LmgiCisKK2VudW0KK3sKKyAgICBFRlIzMl9BRENfUkVGX0NMT0NLID0gNzAwMDAwMCwKK307CisKK3ZvaWQgZWZyMzJSYW5kb21Jbml0KHZvaWQpCit7CisgICAgLyogRW5hYmxlIEFEQyBDbG9jayAqLworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19BREMwLCB0cnVlKTsKKyAgICBBRENfSW5pdF9UeXBlRGVmIGluaXQgPSBBRENfSU5JVF9ERUZBVUxUOworICAgIEFEQ19Jbml0U2luZ2xlX1R5cGVEZWYgc2luZ2xlSW5pdCA9IEFEQ19JTklUU0lOR0xFX0RFRkFVTFQ7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBBREMgd2l0aCB0aGUgcmVxdWlyZWQgdmFsdWVzICovCisgICAgaW5pdC50aW1lYmFzZSA9IEFEQ19UaW1lYmFzZUNhbGMoMCk7CisgICAgaW5pdC5wcmVzY2FsZSA9IEFEQ19QcmVzY2FsZUNhbGMoRUZSMzJfQURDX1JFRl9DTE9DSywgMCk7CisgICAgQURDX0luaXQoQURDMCwgJmluaXQpOworCisgICAgLyogSW5pdGlhbGl6ZSBmb3Igc2luZ2xlIGNvbnZlcnNpb24gc3BlY2lmaWMgdG8gUk5HICovCisgICAgc2luZ2xlSW5pdC5yZWZlcmVuY2UgPSBhZGNSZWZWRW50cm9weTsKKyAgICBzaW5nbGVJbml0LmRpZmYgPSB0cnVlOworICAgIHNpbmdsZUluaXQucG9zU2VsID0gYWRjUG9zU2VsVlNTOworICAgIHNpbmdsZUluaXQubmVnU2VsID0gYWRjTmVnU2VsVlNTOworICAgIEFEQ19Jbml0U2luZ2xlKEFEQzAsICZzaW5nbGVJbml0KTsKKworICAgIC8qIFNldCBWSU5BVFQgdG8gbWF4aW11bSB2YWx1ZSBhbmQgY2xlYXIgRklGTyAqLworICAgIEFEQzAtPlNJTkdMRUNUUkxYIHw9IF9BRENfU0lOR0xFQ1RSTFhfVklOQVRUX01BU0s7CisgICAgQURDMC0+U0lOR0xFRklGT0NMRUFSID0gQURDX1NJTkdMRUZJRk9DTEVBUl9TSU5HTEVGSUZPQ0xFQVI7Cit9CisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworICAgIHVpbnQ4X3QgdG1wID0gMDsKKyAgICB1aW50MzJfdCByYW5kb20gPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgQURDX1N0YXJ0KEFEQzAsIGFkY1N0YXJ0U2luZ2xlKTsKKworICAgICAgICAgICAgd2hpbGUgKChBREMwLT5JRiAmIEFEQ19JRl9TSU5HTEUpID09IDApOworCisgICAgICAgICAgICB0bXAgfD0gKChBRENfRGF0YVNpbmdsZUdldChBREMwKSAmIDB4MDcpIDw8IChqICogMykpOworICAgICAgICB9CisKKyAgICAgICAgcmFuZG9tIHw9ICh0bXAgJiAweGZmKSA8PCAoaSAqIDgpOworICAgIH0KKworICAgIHJldHVybiByYW5kb207Cit9CisKK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGFPdXRwdXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGZvciAodWludDE2X3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgYU91dHB1dExlbmd0aDsgbGVuZ3RoKyspCisgICAgeworICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSAodWludDhfdClvdFBsYXRSYW5kb21HZXQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3N0YXJ0dXAtZ2NjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZWZyMzIvc3RhcnR1cC1nY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzYwNzNiCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3N0YXJ0dXAtZ2NjLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBnY2Mtc3BlY2lmaWMgc3RhcnR1cCBjb2RlIGZvciB0aGUgZWZyMzIuCisgKi8KKworX19leHRlbnNpb25fXyB0eXBlZGVmIGludCBfX2d1YXJkIF9fYXR0cmlidXRlX18oKG1vZGUoX19ESV9fKSkpOworaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCAqZykgeyByZXR1cm4gISooY2hhciAqKShnKTsgfQordm9pZCBfX2N4YV9ndWFyZF9yZWxlYXNlKF9fZ3VhcmQgKmcpIHsgKihjaGFyICopZyA9IDE7IH0KK3ZvaWQgX19jeGFfZ3VhcmRfYWJvcnQoX19ndWFyZCAqZykgeyAodm9pZClnOyB9Cit2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCh2b2lkKSB7IHdoaWxlICgxKTsgfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2VmcjMyL3VhcnQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2NDI1NQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lZnIzMi91YXJ0LmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIFVBUlQgY29tbXVuaWNhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCisjaW5jbHVkZSAiYnNwY29uZmlnLmgiCisjaW5jbHVkZSAiZW1fY211LmgiCisjaW5jbHVkZSAiZW1fZ3Bpby5oIgorI2luY2x1ZGUgImVtX3VzYXJ0LmgiCisKK2VudW0KK3sKKyAgICBrUGxhdGZvcm1DbG9jayAgICAgPSAzMjAwMDAwMCwKKyAgICBrQmF1ZFJhdGUgICAgICAgICAgPSAxMTUyMDAsCisgICAga1JlY2VpdmVCdWZmZXJTaXplID0gMTI4LAorfTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCk7CisKK3N0YXRpYyBjb25zdCB1aW50OF90ICpzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworc3RhdGljIHVpbnQxNl90ICAgICAgIHNUcmFuc21pdExlbmd0aCA9IDA7CisKK3R5cGVkZWYgc3RydWN0IFJlY3ZCdWZmZXIKK3sKKyAgICAvLyBUaGUgZGF0YSBidWZmZXIKKyAgICB1aW50OF90IG1CdWZmZXJba1JlY2VpdmVCdWZmZXJTaXplXTsKKyAgICAvLyBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbUhlYWQ7CisgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgbmV4dCBpdGVtIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGxpc3QuCisgICAgdWludDE2X3QgbVRhaWw7Cit9IFJlY3ZCdWZmZXI7CisKK3N0YXRpYyBSZWN2QnVmZmVyICAgICBzUmVjZWl2ZTsKKworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgVVNBUlRfVHlwZURlZiAgICAgICAgICAgKnVzYXJ0ID0gVVNBUlQwOworICAgIFVTQVJUX0luaXRBc3luY19UeXBlRGVmIGluaXQgICA9IFVTQVJUX0lOSVRBU1lOQ19ERUZBVUxUOworCisgICAgc1JlY2VpdmUubUhlYWQgPSAwOworICAgIHNSZWNlaXZlLm1UYWlsID0gMDsKKworICAgIC8qIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrcyAqLworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19IRlBFUiwgdHJ1ZSk7CisgICAgLyogQ29uZmlndXJlIEdQSU8gcGlucyAqLworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19HUElPLCB0cnVlKTsKKworICAgIC8qIENvbmZpZ3VyZSBHUElPIHBpbiBmb3IgVUFSVCBUWCAqLworICAgIC8qIFRvIGF2b2lkIGZhbHNlIHN0YXJ0LCBjb25maWd1cmUgb3V0cHV0IGFzIGhpZ2guICovCisgICAgR1BJT19QaW5Nb2RlU2V0KEJTUF9CQ0NfVFhQT1JULCBCU1BfQkNDX1RYUElOLCBncGlvTW9kZVB1c2hQdWxsLCAxdSk7CisgICAgLyogQ29uZmlndXJlIEdQSU8gcGluIGZvciBVQVJUIFJYICovCisgICAgR1BJT19QaW5Nb2RlU2V0KEJTUF9CQ0NfUlhQT1JULCBCU1BfQkNDX1JYUElOLCBncGlvTW9kZUlucHV0LCAxdSk7CisKKyAgICAvKiBFbmFibGUgdGhlIHN3aXRjaCB0aGF0IGVuYWJsZXMgVUFSVCBjb21tdW5pY2F0aW9uLiAqLworICAgIEdQSU9fUGluTW9kZVNldChCU1BfQkNDX0VOQUJMRV9QT1JULCBCU1BfQkNDX0VOQUJMRV9QSU4sIGdwaW9Nb2RlUHVzaFB1bGwsIDF1KTsKKworICAgIENNVV9DbG9ja0VuYWJsZShjbXVDbG9ja19VU0FSVDAsIHRydWUpOworCisgICAgLyogQ29uZmlndXJlIFVTQVJUIGZvciBiYXNpYyBhc3luYyBvcGVyYXRpb24gKi8KKyAgICBpbml0LmVuYWJsZSA9IHVzYXJ0RGlzYWJsZTsKKyAgICBVU0FSVF9Jbml0QXN5bmModXNhcnQsICZpbml0KTsKKworICAgIC8qIEVuYWJsZSBwaW5zIGF0IGNvcnJlY3QgVUFSVC9VU0FSVCBsb2NhdGlvbi4gKi8KKyAgICB1c2FydC0+Uk9VVEVQRU4gPSBVU0FSVF9ST1VURVBFTl9SWFBFTiB8IFVTQVJUX1JPVVRFUEVOX1RYUEVOOworICAgIHVzYXJ0LT5ST1VURUxPQzAgPSAodXNhcnQtPlJPVVRFTE9DMCAmIH4oX1VTQVJUX1JPVVRFTE9DMF9UWExPQ19NQVNLIHwgX1VTQVJUX1JPVVRFTE9DMF9SWExPQ19NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgICAgfCAoX1VTQVJUX1JPVVRFTE9DMF9UWExPQ19MT0MwIDw8IF9VU0FSVF9ST1VURUxPQzBfVFhMT0NfU0hJRlQpCisgICAgICAgICAgICAgICAgICAgICAgIHwgKF9VU0FSVF9ST1VURUxPQzBfUlhMT0NfTE9DMCA8PCBfVVNBUlRfUk9VVEVMT0MwX1JYTE9DX1NISUZUKTsKKworICAgIC8qIENsZWFyIHByZXZpb3VzIFJYIGludGVycnVwdHMgKi8KKyAgICBVU0FSVF9JbnRDbGVhcih1c2FydCwgVVNBUlRfSUZfUlhEQVRBVik7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoVVNBUlQwX1JYX0lSUW4pOworCisgICAgLyogRW5hYmxlIFJYIGludGVycnVwdHMgKi8KKyAgICBVU0FSVF9JbnRFbmFibGUodXNhcnQsIFVTQVJUX0lGX1JYREFUQVYpOworICAgIE5WSUNfRW5hYmxlSVJRKFVTQVJUMF9SWF9JUlFuKTsKKworICAgIC8qIEZpbmFsbHkgZW5hYmxlIGl0ICovCisgICAgVVNBUlRfRW5hYmxlKHVzYXJ0LCB1c2FydEVuYWJsZSk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBVU0FSVDBfUlhfSVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmIChVU0FSVDAtPlNUQVRVUyAmIFVTQVJUX1NUQVRVU19SWERBVEFWKQorICAgIHsKKyAgICAgICAgdWludDhfdCBieXRlID0gVVNBUlRfUngoVVNBUlQwKTsKKworICAgICAgICAvLyBXZSBjYW4gb25seSB3cml0ZSBpZiBpbmNyZW1lbnRpbmcgbVRhaWwgZG9lc24ndCBlcXVhbCBtSGVhZAorICAgICAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1CdWZmZXJbc1JlY2VpdmUubVRhaWxdID0gYnl0ZTsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1UYWlsID0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290RXJyb3Igb3RQbGF0VWFydERpc2FibGUodm9pZCkKK3sKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1RyYW5zbWl0QnVmZmVyID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBhQnVmOworICAgIHNUcmFuc21pdExlbmd0aCA9IGFCdWZMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgLy8gQ29weSB0YWlsIHRvIHByZXZlbnQgbXVsdGlwbGUgcmVhZHMKKyAgICB1aW50MTZfdCB0YWlsID0gc1JlY2VpdmUubVRhaWw7CisKKyAgICAvLyBJZiB0aGUgZGF0YSB3cmFwcyBhcm91bmQsIHByb2Nlc3MgdGhlIGZpcnN0IHBhcnQKKyAgICBpZiAoc1JlY2VpdmUubUhlYWQgPiB0YWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlLm1CdWZmZXIgKyBzUmVjZWl2ZS5tSGVhZCwga1JlY2VpdmVCdWZmZXJTaXplIC0gc1JlY2VpdmUubUhlYWQpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBidWZmZXIgbUhlYWQgYmFjayB0byB6ZXJvLgorICAgICAgICBzUmVjZWl2ZS5tSGVhZCA9IDA7CisgICAgfQorCisgICAgLy8gRm9yIGFueSBkYXRhIHJlbWFpbmluZywgcHJvY2VzcyBpdAorICAgIGlmIChzUmVjZWl2ZS5tSGVhZCAhPSB0YWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlLm1CdWZmZXIgKyBzUmVjZWl2ZS5tSGVhZCwgdGFpbCAtIHNSZWNlaXZlLm1IZWFkKTsKKworICAgICAgICAvLyBTZXQgbUhlYWQgdG8gdGhlIGxvY2FsIHRhaWwgd2UgaGF2ZSBjYWNoZWQKKyAgICAgICAgc1JlY2VpdmUubUhlYWQgPSB0YWlsOworICAgIH0KK30KKwordm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCkKK3sKKyAgICBvdEVYUEVDVChzVHJhbnNtaXRCdWZmZXIgIT0gTlVMTCk7CisKKyAgICBmb3IgKDsgc1RyYW5zbWl0TGVuZ3RoID4gMDsgc1RyYW5zbWl0TGVuZ3RoLS0pCisgICAgeworICAgICAgICBVU0FSVF9UeChVU0FSVDAsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgfQorCisgICAgc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKKyAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgZWZyMzJVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmYwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE3MyBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitsaWJfTElCUkFSSUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpYm9wZW50aHJlYWQtZW1zay5hCisKKyMgRG8gbm90IGVuYWJsZSAtV2NvbnZlcnNpb24gZm9yIGVtc2sKK292ZXJyaWRlIENGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XY29udmVyc2lvbiwkKENGTEFHUykpCitvdmVycmlkZSBDWFhGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtV2NvbnZlcnNpb24sJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtcGVkYW50aWMtZXJyb3JzIGZvciBlbXNrCitvdmVycmlkZSBDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtcGVkYW50aWMtZXJyb3JzLCQoQ0ZMQUdTKSkKK292ZXJyaWRlIENYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1wZWRhbnRpYy1lcnJvcnMsJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtV2Vycm9yIGZvciBlbXNrCitvdmVycmlkZSBDRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtV2Vycm9yLCQoQ0ZMQUdTKSkKK292ZXJyaWRlIENYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XZXJyb3IsJChDWFhGTEFHUykpCisKKyMgRG8gbm90IGVuYWJsZSAtV2Zvcm1hdCBmb3IgZW1zaworb3ZlcnJpZGUgQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdmb3JtYXQsJChDRkxBR1MpKQorb3ZlcnJpZGUgQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PSAkKGZpbHRlci1vdXQgLVdmb3JtYXQsJChDWFhGTEFHUykpCisKK0NPTU1PTkNQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bmtub3duLXByYWdtYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdW51c2VkLWZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVudXNlZC12YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tdHlwZS1saW1pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXNpZ24tY29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtbGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhc2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmRvbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcGxhdGZvcm0tZW1zay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworU1lOT1BTWVNfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL3N0YXJ0dXAvYXJjX2N4eF9zdXBwb3J0LmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19zdGFydHVwLlMgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2NhY2hlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19leGNfYXNtLlMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfZXhjZXB0aW9uLmMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX3RpbWVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za19pbml0LmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuYyAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguYyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uYyAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuYyAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL3BtcmYuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpL2R3X3NwaV9vYmouYyAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmMgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmMgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2JvYXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmMgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL2NvbnNvbGVfaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5jICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpLmMgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0LmMgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfbWlzYy5jICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3NicmsuYyAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zeXNjYWxscy5jICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfdGFyZ2V0LmMgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZmF0ZnNfZGlyZW50LmMgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL21hbGxvYy5jICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi95YV9nZXRvcHQuYyAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9lbXNrX2FfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENPTU1PTkNQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2Vtc2tfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKFNZTk9QU1lTX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaCAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguaCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4X2hhbC5oICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9kd19ncGlvX29iai5oICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZW1za19ncGlvLmggICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL21yZjI0ajQwLmggICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9wbXJmLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmggICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGlmbGFzaC9zcGlmbGFzaC5oICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svdWFydC9kd191YXJ0X29iai5oICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2Vtc2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9lbXNrX2hhcmR3YXJlLmggICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi94cHJpbnRmL3hwcmludGYuaCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24vY29uc29sZV9pby5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmggICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaCAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbC5oICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWxfY2ZnLmggICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnRfaGFsLmggICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9jb21tb24uaCAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfZ3Bpby5oICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3NwaS5oICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl91YXJ0LmggICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19hc21fY29tbW9uLmggICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfYnVpbHRpbi5oICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2NhY2hlLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19lbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmggICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2ZlYXR1cmVfY29uZmlnLmggICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY190aW1lci5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2VtYkFSQ19lcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfdG9vbGNoYWluLmggICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmNfY29yZV9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZW1iQVJDX0JTUF9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9kaXJlbnQuaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmggICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuaCAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9mYXRmc19kaXJlbnQuaCAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIveWFfZ2V0b3B0LmggICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQUkVUVFlfRklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoUExBVEZPUk1fU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAtCisKK2xpYm9wZW50aHJlYWRfZW1za19hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9SRUFETUUubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhMzc4MgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL1JFQURNRS5tZApAQCAtMCwwICsxLDE1OCBAQAorIyBPcGVuVGhyZWFkIG9uIEVNU0sgRXhhbXBsZQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFN5bm9wc3lzIFtEZXNpZ25XYXJlwq4gQVJDwq4gRU1dW2FyY2VtXSBTdGFydGVyIEtpdCAyLjNbKEVNU0syLjMpXVtlbXNrMjNdIGFuZCBEaWdpbGVudCBbUG1vZCBSRjJdW3Btb2RyZjJdIGVxdWlwcGVkIHdpdGggdGhlIE1pY3JvY2hpcCBbTVJGMjRKNDBdW21yZjI0ajQwXSBJRUVFIDgwMi4xNS404oSiIDIuNEdIeiBSRiB0cmFuc2NlaXZlci4KKworW2FyY2VtXTogaHR0cHM6Ly93d3cuc3lub3BzeXMuY29tL2Rlc2lnbndhcmUtaXAvcHJvY2Vzc29yLXNvbHV0aW9ucy9hcmMtcHJvY2Vzc29ycy9hcmMtZW0tZmFtaWx5Lmh0bWwKKworW2Vtc2syM106IGh0dHBzOi8vd3d3LnN5bm9wc3lzLmNvbS9kdy9pcGRpci5waHA/ZHM9YXJjX2VtX3N0YXJ0ZXJfa2l0CisKK1twbW9kcmYyXTogaHR0cHM6Ly9yZWZlcmVuY2UuZGlnaWxlbnRpbmMuY29tL3JlZmVyZW5jZS9wbW9kL3Btb2RyZjIvc3RhcnQKKworW21yZjI0ajQwXTogaHR0cDovL3d3dy5taWNyb2NoaXAuY29tL3d3d3Byb2R1Y3RzL2VuL2VuMDI3NzUyCisKKyMjIE5vdGUKKworVGhlIEVNU0sgcGxhdGZvcm0gaXMgYSBjb25maWd1cmFibGUsIEZQR0EtYmFzZWQgc29mdHdhcmUgZGV2ZWxvcG1lbnQgcGxhdGZvcm0gZm9yIHRoZSBBUkMgRU0gUHJvY2Vzc29yIEZhbWlseS4gUGxlYXNlIG5vdGUgdGhhdDoKKworKiBUaGUgcGxhdGZvcm0gZG9lcyBub3QgY3VycmVudGx5IGZlYXR1cmUgYSBUcnVlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChUUk5HKSwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIGNlcnRpZmljYXRpb24gdG8gdGhlIFRocmVhZCBTcGVjaWZpY2F0aW9uLiBVc2VycyBsb29raW5nIHRvIGNlcnRpZnkgdGhlIE9wZW5UaHJlYWQgaW1wbGVtZW50YXRpb24gZm9yIHRoZWlyIG93biBBUkMtYmFzZWQgcGxhdGZvcm1zIHdpbGwgbmVlZCB0byBhZGQgYSBUUk5HIHRvIHRoZWlyIHBsYXRmb3JtIGFuZCBtb2RpZnkgb3VyIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBFTVNLIGFjY29yZGluZ2x5IGluIG9yZGVyIHRvIGFjaGlldmUgY2VydGlmaWNhdGlvbiBmb3IgdGhlaXIgcGxhdGZvcm0uCisqIFRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBjdXJyZW50bHkgY29udGFpbiBhIG9uLWNoaXAgRVVJNjQsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBhIG5ldHdvcmsgZGV2aWNlLiBVc2VycyB3aWxsIG5lZWQgdG8gYWRkIGEgdW5pcXVlIG51bWJlciBhcyBFVUk2NCBmb3IgdGhlaXIgb3duIEFSQy1iYXNlZCBwbGF0Zm9ybSBpbiBgPHBhdGgtdG8tb3BlbnRocmVhZD4vZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFkaW8uY2AuIEl0IGNhbiBiZSBzZXQgbWFudWFsbHkgb3IgbG9hZGVkIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKworIyMgVG9vbGNoYWluCisKK0Rvd25sb2FkIGFuZCBpbnN0YWxsIFtHTlUgdG9vbGNoYWluIGZvciBBUkMgRU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mb3NzLWZvci1zeW5vcHN5cy1kd2MtYXJjLXByb2Nlc3NvcnMvdG9vbGNoYWluL3RhZ3MKKworRG93bmxvYWQgYW5kIGluc3RhbGwgW0RpZ2lsZW50IEFkZXB0IFNvZnR3YXJlXVtkaWdpbGVudC1hZGVwdF0gZm9yIHRoZSBEaWdpbGVudCBKVEFHLVVTQiBjYWJsZS4KKworW2RpZ2lsZW50LWFkZXB0XTogaHR0cHM6Ly9zdG9yZS5kaWdpbGVudGluYy5jb20vZGlnaWxlbnQtYWRlcHQtMi1kb3dubG9hZC1vbmx5CisKKyMjIEJ1aWxkaW5nIHRoZSBleGFtcGxlcworCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtZW1zayBjbGVhbgorJCBtYWtlIC1mIGV4YW1wbGVzL01ha2VmaWxlLWVtc2sKK2BgYAorCitBZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHRoZSBgZWxmYCBmaWxlcyBjYW4gYmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvYXJjLWVsZjMyL2JpbmAuICBZb3UgY2FuIGNvbnZlcnQgdGhlbSB0byBgYmluYAorZmlsZXMgdXNpbmcgYGFyYy1lbGYzMi1vYmpjb3B5YDoKK2BgYGJhc2gKKyQgYXJjLWVsZjMyLW9iamNvcHkgLU8gYmluYXJ5IG90LWNsaS1mdGQgb3QtY2xpLWZ0ZC5iaW4KK2BgYAorCisjIyBCb290aW5nIHRoZSBiaW5hcmllcyBmcm9tIFNEIGNhcmQKKworZW1iQVJDIFtlbWJhcmNdIGlzIGFuIG9wZW4gc29mdHdhcmUgcGxhdGZvcm0gdG8gZmFjaWxpdGF0ZSB0aGUgZGV2ZWxvcG1lbnQgb2YgZW1iZWRkZWQgc3lzdGVtcyBiYXNlZCBvbiBBUkN2MiBwcm9jZXNzb3JzLiBEb3dubG9hZCBlbWJBUkMgW2VtYmFyY10gdG8gZ2VuZXJhdGUgYW5kIGZsYXNoIHRoZSBFTVNLIGJvb3Rsb2FkZXIgZnJvbSBzb3VyY2UgY29kZS4gU2VlIHRoZSBhcHBsaWNhdGlvbiBub3RlIFtVc2luZyBhIHNlY29uZGFyeSBib290bG9hZGVyIG9uIHRoZSBFTVNLXVtib290bG9hZGVyLWFwcG5vdGVdIGZvciBkZXRhaWxzLgorCitbZW1iYXJjXTogaHR0cHM6Ly9lbWJhcmMub3JnL2luZGV4Lmh0bWwKKworW2Jvb3Rsb2FkZXItYXBwbm90ZV06IGh0dHBzOi8vZW1iYXJjLm9yZy9wZGYvMjAxNTA3MTBfZW1iQVJDX2FwcGxpY2F0aW9uX25vdGVfc2Vjb25kYXJ5X2Jvb3Rsb2FkZXIucGRmCisKK01vZGlmeSB0aGUgZmlsZSBuYW1lIGBhcmMtZWxmMzItb3QtY2xpLWZ0ZC5iaW5gIHRvIGBib290LmJpbmAuIENvcHkgYGJvb3QuYmluYCB0byB0aGUgU0QgY2FyZC4gVGhlIEVNU0syLjMgaW5jbHVkZXMgYW4gU1BJIGZsYXNoIHN0b3JhZ2UgZGV2aWNlIHByZS1wcm9ncmFtbWVkIHdpdGggRlBHQSBpbWFnZXMgY29udGFpbmluZyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgb2YgRGVzaWduV2FyZcKuIEFSQyBFTSBjb3Jlcy4gU2V0IHBpbnMgMSBhbmQgNCBvZiBgU1cxYCBESVAgc3dpdGNoIGFuZCBwcmVzcyBgRlBHQSBjb25maWd1cmVgIGJ1dHRvbiB0byBjb25maWd1cmUgdGhlIEFSQyBFTTExRCBhbmQgc2Vjb25kYXJ5IGJvb3Rsb2FkZXIuCisKKyMjIFJ1bm5pbmcgdGhlIGV4YW1wbGUKKworMS4gUHJlcGFyZSB0d28gRU1TSzIuMyBib2FyZHMgYW5kIGNvcHkgdGhlIGBib290LmJpbmAgKENMSSBleGFtcGxlKSB0byB0aGUgRU1TSzIuMyBTRCBjYXJkIChhcyBzaG93biBhYm92ZSkuCisKKzIuIFRoZSBDTEkgZXhhbXBsZSB1c2VzIFVBUlQgY29ubmVjdGlvbi4gVG8gdmlldyByYXcgVUFSVCBvdXRwdXQsIHN0YXJ0IGEgdGVybWluYWwgZW11bGF0b3IgbGlrZSBUZXJhIFRlcm0gYW5kIFB1VFRZLiBDb25uZWN0IEVNU0sgSjcgdG8gdGhlIENPTSBwb3J0IHdpdGggdGhlIGZvbGxvd2luZyBzZXJpYWwgcG9ydCBzZXR0aW5nczoKKyAgICAtIEJhdWQgcmF0ZTogMTE1MjAwCisgICAgLSA4IGRhdGEgYml0cworICAgIC0gMSBzdG9wIGJpdAorICAgIC0gTm8gcGFyaXR5CisgICAgLSBObyBmbG93IGNvbnRyb2wKKworMy4gT3BlbiBhIHRlcm1pbmFsIGNvbm5lY3Rpb24gb24gdGhlIGZpcnN0IGJvYXJkLiBUaGUgYGJvb3QuYmluYCBpbiB0aGUgU0QgY2FyZCB3aWxsIGJlIGxvYWRlZCB0byB0aGUgRU1TSyBhZnRlciBhIGZldyBzZWNvbmRzLgorCisgYGBgYmFzaAorIE1SRjI0SjQwIEluaXQgc3RhcnRlZC4KKyBNUkYyNEo0MCBJbml0IGZpbmlzaGVkLgorIE5vZGUgTm8uIDoKKyBgYGAKKworNC4gU2V0IHRoZSBub2RlIG51bWJlciBtYW51YWxseS4gSW5wdXQgYDFgIGFuZCBwcmVzcyB0aGUgYEVudGVyYCBrZXkgaW4gdGhlIHRlcm1pbmFsIGVtdWxhdG9yLgorCisgYGBgYmFzaAorIE5vZGUgTm8uIDoxCisgT3BlblRocmVhZCBJbml0IEZpbmlzaGVkCisgYGBgCisKKzQuIFN0YXJ0IGEgbmV3IFRocmVhZCBuZXR3b3JrLgorCisgYGBgYmFzaAorID4gcGFuaWQgMHgxMjM0CisgRG9uZQorID4gaWZjb25maWcgdXAKKyBEb25lCisgPiB0aHJlYWQgc3RhcnQKKyBEb25lCisgYGBgCisKKzQuIEFmdGVyIGEgY291cGxlIG9mIHNlY29uZHMgdGhlIG5vZGUgd2lsbCBiZWNvbWUgYSBMZWFkZXIgb2YgdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBzdGF0ZQorIExlYWRlcgorIGBgYAorCis1LiBPcGVuIGEgdGVybWluYWwgY29ubmVjdGlvbiBhbmQgcmVzZXQgdGhlIHNlY29uZCBib2FyZC4gQWZ0ZXIgYSBmZXcgc2Vjb25kcywgaW5wdXQgYDJgIGFuZCBwcmVzcyB0aGUgYEVudGVyYCBrZXkgaW4gdGhlIHRlcm1pbmFsIGVtdWxhdG9yLgorCisgYGBgYmFzaAorIE1SRjI0SjQwIEluaXQgc3RhcnRlZC4KKyBNUkYyNEo0MCBJbml0IGZpbmlzaGVkLgorIE5vZGUgTm8uIDoyCisgT3BlblRocmVhZCBJbml0IEZpbmlzaGVkCisgYGBgCisKKzYuIEF0dGFjaCB0aGUgc2Vjb25kIG5vZGUgdG8gdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBwYW5pZCAweDEyMzQKKyBEb25lCisgPiBpZmNvbmZpZyB1cAorIERvbmUKKyA+IHRocmVhZCBzdGFydAorIERvbmUKKyBgYGAKKworNi4gQWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0aGUgc2Vjb25kIG5vZGUgd2lsbCBhdHRhY2ggYW5kIGJlY29tZSBhIENoaWxkLgorCisgYGBgYmFzaAorID4gc3RhdGUKKyBDaGlsZAorIGBgYAorCis3LiBMaXN0IGFsbCBJUHY2IGFkZHJlc3NlcyBvZiB0aGUgZmlyc3QgYm9hcmQuCisKKyBgYGBiYXNoCisgPiBpcGFkZHIKKyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCisgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6ZWMwMAorIGZkZGU6YWQwMDpiZWVmOjA6NGY2ZTo3ZTUzOjY3Yzg6ZjViMAorIGZlODA6MDowOjA6YzQ2MjpmMTY1OjQ0ZWI6ZWY5ZgorIGBgYAorCis4LiBDaG9vc2Ugb25lIG9mIHRoZW0gYW5kIHNlbmQgYW4gSUNNUHY2IHBpbmcgZnJvbSB0aGUgc2Vjb25kIGJvYXJkLgorCisgYGBgYmFzaAorID4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDplYzAwCisgOCBieXRlcyBmcm9tIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOmVjMDA6IGljbXBfc2VxPTEgaGxpbT02NCB0aW1lPTMwbXMKKyBgYGAKKworRm9yIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzLCB2aXNpdCBbT3BlblRocmVhZCBDTEkgUmVmZXJlbmNlIFJFQURNRS5tZF1bQ0xJXS4KKworW0NMSV06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQvYmxvYi9tYXN0ZXIvc3JjL2NsaS9SRUFETUUubWQKKworIyMgVmVyaWZpY2F0aW9uCisKK1RoZSBmb2xsb3dpbmcgaGFyZHdhcmUgaGF2ZSBiZWVuIHVzZWQgZm9yIHRlc3RpbiBhbmQgdmVyaWZpY2F0aW9uOgorICAtIEFSQyBFTTExRCBvbiBFTVNLMi4zCisgIC0gUG1vZCBSRjIKKworVGhlIGZvbGxvd2luZyB0b29sY2hhaW5zIGFuZCBzb2Z0d2FyZSBoYXZlIGJlZW4gdXNlZCBmb3IgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uOgorICAtIGFyYy0yMDE2LjA5LXJlbGVhc2UKKyAgLSBlbWJBUkMgMjAxNi4wNQorCitUaGUgRU1TSyBleGFtcGxlIGhhcyBiZWVuIHZlcmlmaWVkIGJ5IFN5bm9wc3lzIHdpdGggY29tbWl0IGAwNjRhYmEyYC4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9hbGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzZTBkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9hbGFybS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgYWxhcm0uCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oIgorI2luY2x1ZGUgInBsYXRmb3JtLWVtc2suaCIKKworc3RhdGljIHVpbnQzMl90IHNDb3VudGVyID0gMDsKK3N0YXRpYyB1aW50MzJfdCBleHBpcmVzOworc3RhdGljIGJvb2wgc0lzUnVubmluZyA9IGZhbHNlOworCit2b2lkIGVtc2tBbGFybUluaXQodm9pZCkKK3sKKyAgICBzQ291bnRlciA9IE9TUF9HRVRfQ1VSX01TKCk7Cit9CisKK3VpbnQzMl90IG90UGxhdEFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgcmV0dXJuIChPU1BfR0VUX0NVUl9NUygpIC0gc0NvdW50ZXIpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IHQwLCB1aW50MzJfdCBkdCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgZXhwaXJlcyA9IHQwICsgZHQ7CisgICAgc0lzUnVubmluZyA9IHRydWU7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0lzUnVubmluZyA9IGZhbHNlOworfQorCit2b2lkIGVtc2tBbGFybVVwZGF0ZVRpbWVvdXQoaW50MzJfdCAqYVRpbWVvdXQpCit7CisgICAgaW50MzJfdCByZW1haW5pbmc7CisKKyAgICBvdEVYUEVDVChhVGltZW91dCAhPSBOVUxMKTsKKworICAgIGlmIChzSXNSdW5uaW5nKQorICAgIHsKKyAgICAgICAgcmVtYWluaW5nID0gKGludDMyX3QpKGV4cGlyZXMgLSBvdFBsYXRBbGFybUdldE5vdygpKTsKKworICAgICAgICBpZiAocmVtYWluaW5nID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFUaW1lb3V0ID0gcmVtYWluaW5nOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKmFUaW1lb3V0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqYVRpbWVvdXQgPSAxMDAwMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworCit9CisKK3ZvaWQgZW1za0FsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaW50MzJfdCByZW1haW5pbmc7CisKKyAgICBpZiAoc0lzUnVubmluZykKKyAgICB7CisgICAgICAgIHJlbWFpbmluZyA9IChpbnQzMl90KShleHBpcmVzIC0gb3RQbGF0QWxhcm1HZXROb3coKSk7CisKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzSXNSdW5uaW5nID0gZmFsc2U7CisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svZW1zay5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2Vtc2subGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTQwOTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2Vtc2subGQKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1NFQVJDSF9ESVIoLikKK0dST1VQKC4uLy4uLy4uL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2xpYm9wZW50aHJlYWQtZW1zay5hIGxpYmdjYy5hIGxpYmMuYSBsaWJub3N5cy5hKQorCitNRU1PUlkKK3sKKyBJQ0NNIDogT1JJR0lOID0gMHgwMDAwMDAwMCwgTEVOR1RIID0gMHgxMDAwMAorIERDQ00gOiBPUklHSU4gPSAweDgwMDAwMDAwLCBMRU5HVEggPSAweDEwMDAwCisgRVhUX1JBTSA6IE9SSUdJTiA9IDB4MTAwMDAwMDAsIExFTkdUSCA9IDB4ODAwMDAwMAorfQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAuaW5pdCA6CisgeworICBfZl9pbml0ID0gLjsKKyAgS0VFUCAoKiguaW5pdF92ZWN0b3IpKQorICBLRUVQICgqKC5pbml0X2Jvb3RzdHJhcCkpCisgIF9lX2luaXQgPSAuOworIH0gPiBFWFRfUkFNCisgLnZlY3RvciA6IEFMSUdOKDEwMjQpCisgeworICBfZl92ZWN0b3IgPSAuOworICAqKC52ZWN0b3IpCisgIF9lX3ZlY3RvciA9IC47CisgfSA+IEVYVF9SQU0KKyAudGV4dCA6IEFMSUdOKDQpCisgeworICBfZl90ZXh0ID0gLjsKKyAgKigudGV4dCAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICBfZV90ZXh0ID0gLjsKKyB9ID4gRVhUX1JBTQorIC5yb2RhdGEgOiBBTElHTig0KQorIHsKKyAgX2Zfcm9kYXRhID0gLjsKKyAgLiA9IEFMSUdOKDQpOworICBfX0NUT1JfTElTVF9fID0gLjsKKyAgTE9ORygoX19DVE9SX0VORF9fIC0gX19DVE9SX0xJU1RfXykgLyA0IC0gMikKKyAgS0VFUCgqKFNPUlRfQllfTkFNRSgiLmN0b3JzKiIpKSkKKyAgTE9ORygwKQorICBfX0NUT1JfRU5EX18gPSAuOworICAuID0gQUxJR04oNCk7CisgIF9faW5pdF9hcnJheV9zdGFydCA9IC47CisgIEtFRVAoKihTT1JUX0JZX05BTUUoIi5pbml0X2FycmF5KiIpKSkKKyAgX19pbml0X2FycmF5X2VuZCA9IC47CisgIC4gPSBBTElHTig0KTsKKyAgX19EVE9SX0xJU1RfXyA9IC47CisgIExPTkcoKF9fRFRPUl9FTkRfXyAtIF9fRFRPUl9MSVNUX18pIC8gNCAtIDIpCisgIEtFRVAoKihTT1JUX0JZX05BTUUoIi5kdG9ycyoiKSkpCisgIExPTkcoMCkKKyAgX19EVE9SX0VORF9fID0gLjsKKyAgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikKKyAgX2Vfcm9kYXRhID0gLjsKKyB9ID4gRVhUX1JBTQorIC5kYXRhIDogQUxJR04oNCkKKyB7CisgIF9mX2RhdGEgPSAuOworICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgIF9mX3NkYXRhID0gLjsKKyAgX19TREFUQV9CRUdJTl9fID0gLjsKKyAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgIF9lX3NkYXRhID0gLjsKKyAgX2VfZGF0YSA9IC47CisgfSA+IEVYVF9SQU0gQVQgPiBFWFRfUkFNCisgLmJzcyAoTk9MT0FEKSA6IEFMSUdOKDgpCisgeworICBQUk9WSURFIChfX3Nic3Nfc3RhcnQgPSAuKTsKKyAgUFJPVklERSAoX19fc2Jzc19zdGFydCA9IC4pOworICBfZl9ic3MgPSAuOworICBfZl9zYnNzID0gLjsKKyAgKiguZHluc2JzcykKKyAgKiguc2JzcyAuc2Jzcy4qIC5nbnUubGlua29uY2Uuc2IuKikKKyAgKiguc2NvbW1vbikKKyAgX2Vfc2JzcyA9IC47CisgIFBST1ZJREUgKF9fc2Jzc19lbmQgPSAuKTsKKyAgUFJPVklERSAoX19fc2Jzc19lbmQgPSAuKTsKKyAgKiguZHluYnNzKQorICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAqKENPTU1PTikKKyAgX2VfYnNzID0gLjsKKyB9ID4gRVhUX1JBTQorIC5zdGFjayAoTk9MT0FEKSA6CisgeworICAuID0gQUxJR04oNCk7CisgIF9mX3N0YWNrID0gLjsKKyAgLiA9IC4gKyA1MjQyODg7CisgIF9lX3N0YWNrID0gLjsKKyB9ID4gRVhUX1JBTQorIC5oZWFwIChOT0xPQUQpIDoKKyB7CisgIC4gPSBBTElHTig0KTsKKyAgX19zdGFydF9oZWFwID0gLiA7CisgIF9mX2hlYXAgPSAuOworICAuID0gLiArIDUyNDI4ODsKKyAgX2VfaGVhcCA9IC47CisgIF9fZW5kX2hlYXAgPSAuIDsKKyB9ID4gRVhUX1JBTQorIF9sb2FkX2FkZHJfdGV4dCA9IExPQURBRERSKC50ZXh0KTsKKyBfbG9hZF9hZGRyX3JvZGF0YSA9IExPQURBRERSKC5yb2RhdGEpOworIF9sb2FkX2FkZHJfZGF0YSA9IExPQURBRERSKC5kYXRhKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MGVkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9mbGFzaC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBmbGFzaC4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oIgorI2luY2x1ZGUgPHV0aWxzL2ZsYXNoLmg+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorI2luY2x1ZGUgInBsYXRmb3JtLWVtc2suaCIKKworLyoqCisgKiBFTVNLIEhBUyAxMjggTWJpdCAoMTYgTUIpIFNQSSBmbGFzaCBtZW1vcnkgKFdpbmJvbmQgVzI1UTEyOEJWKS4KKyAqIFRoZSBXaW5ib25kIFcyNVExMjhCViBhcnJheSBpcyBvcmdhbml6ZWQgaW50byA2NTUzNiBwcm9ncmFtbWFibGUgcGFnZXMgb2YKKyAqIDI1Ni1ieXRlIGVhY2guIFVwIHRvIDI1NiBieXRlcyBjYW4gYmUgcHJvZ3JhbW1lZCBhdCBhIHRpbWUuIFBhZ2VzIGNhbiBiZQorICogZXJhc2VkIGluIGdyb3VwcyBvZiAxNiAoNEtCIHNlY3RvciBlcmFzZSkuCisgKi8KKworLyoqCisgKiBFTVNLIFNQSWZsYXNoIG1lbW9yeSBtYXAgd2l0aCB1c2luZyBlbWJBUkMKKyAqIEZQR0EgaW1hZ2U6IGZyb20gMHgwMDAwIDAwMDAKKyAqIFNlY29uZGFyeSBib290bG9hZGVyOiBmcm9tIDB4MDA3OCAwMDAwCisgKiBBdmFpbGFibGUgZm9yIE9wZW5UaHJlYWQ6IGZyb20gMHgwMEZGIEQwMDAgdG8gMHgwMEZGIEVGRkYKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0ZMQVNIX0JBU0UgICAgICAgMHgwMGZmZDAwMAorI2RlZmluZSBPUEVOVEhSRUFEX0ZMQVNIX1NJWkUgICAgICAgMHgwMDAwMjAwMAorCisvKioKKyAqIERlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTLAorICogICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSwgYW5kCisgKiAgICBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gZm9yIEVNU0sKKyAqLworI2lmZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyN1bmRlZiBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTCisjZW5kaWYgLy8gU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTICAgIDB4MDBmZmUwMDAKKworI2lmZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkUKKyN1bmRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisjZW5kaWYgLy8gU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICAgRkxBU0hfU0VDVE9SX1NJWkUKKworI2lmZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI3VuZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI2VuZGlmIC8vIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gICAgMQorCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgZmxhc2hfaW5pdCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiAodWludDMyX3QpRkxBU0hfU0VDVE9SX1NJWkU7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaEVyYXNlUGFnZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBpbnQzMl90IHN0YXR1czsKKworICAgIG90RVhQRUNUX0FDVElPTigoYUFkZHJlc3MgPj0gT1BFTlRIUkVBRF9GTEFTSF9CQVNFKSAmJiAoYUFkZHJlc3MgPCAoT1BFTlRIUkVBRF9GTEFTSF9CQVNFICsgT1BFTlRIUkVBRF9GTEFTSF9TSVpFIC0gMSkpLAorICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvKiBVc2UgMiBzZWN0b3JzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiwgY2Fubm90IGVyYXNlIHRoZSBhZGRyZXNzIG92ZXIgdGhlIGJvdW5kcnkgKi8KKyAgICBzdGF0dXMgPSBmbGFzaF9lcmFzZShhQWRkcmVzcywgRkxBU0hfU0VDVE9SX1NJWkUpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKHN0YXR1cyAhPSAtMSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoU3RhdHVzV2FpdCh1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCBzdGFydCA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgYm9vbCBidXN5ID0gdHJ1ZTsKKyAgICB1aW50MzJfdCBzdGF0dXMgPSAweDAxOworCisgICAgd2hpbGUgKGJ1c3kgJiYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc3RhcnQpIDwgYVRpbWVvdXQpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gZmxhc2hfcmVhZF9zdGF0dXMoKTsKKyAgICAgICAgYnVzeSA9ICBzdGF0dXMgJiAweDAxOworICAgIH0KKworICAgIG90RVhQRUNUX0FDVElPTighYnVzeSwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIGludDMyX3Qgd3JpdHRlbl9zaXplID0gMDsKKyAgICB1aW50MzJfdCBzaXplID0gMDsKKworICAgIG90RVhQRUNUX0FDVElPTigoYUFkZHJlc3MgPj0gT1BFTlRIUkVBRF9GTEFTSF9CQVNFKSAmJgorICAgICAgICAgICAgICAgICAgICAoKGFBZGRyZXNzICsgYVNpemUpIDw9IE9QRU5USFJFQURfRkxBU0hfQkFTRSArIE9QRU5USFJFQURfRkxBU0hfU0laRSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCEoYUFkZHJlc3MgJiAzKSkgJiYgKCEoYVNpemUgJiAzKSksIDspOworCisgICAgd3JpdHRlbl9zaXplID0gZmxhc2hfd3JpdGUoYUFkZHJlc3MsIGFTaXplLCBhRGF0YSk7CisKKyAgICBpZiAod3JpdHRlbl9zaXplIDwgMCkKKyAgICB7CisgICAgICAgIHNpemUgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplID0gKHVpbnQzMl90KXdyaXR0ZW5fc2l6ZTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHNpemU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgaW50MzJfdCByZWFkX3NpemUgPSAwOworICAgIHVpbnQzMl90IHNpemUgPSAwOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKChhQWRkcmVzcyA+PSBPUEVOVEhSRUFEX0ZMQVNIX0JBU0UpICYmCisgICAgICAgICAgICAgICAgICAgICgoYUFkZHJlc3MgKyBhU2l6ZSkgPD0gT1BFTlRIUkVBRF9GTEFTSF9CQVNFICsgT1BFTlRIUkVBRF9GTEFTSF9TSVpFKSwgOyk7CisKKyAgICByZWFkX3NpemUgPSBmbGFzaF9yZWFkKGFBZGRyZXNzLCBhU2l6ZSwgYURhdGEpOworCisgICAgaWYgKHJlYWRfc2l6ZSA8IDApCisgICAgeworICAgICAgICBzaXplID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZSA9ICh1aW50MzJfdClyZWFkX3NpemU7CisgICAgfQorCisKK2V4aXQ6CisgICAgcmV0dXJuIHNpemU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9sb2dnaW5nLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9sb2dnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQzNmE0MAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL2xvZ2dpbmcuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBsb2dnaW5nLgorICoKKyAqLworCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmgiCisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisgICAgKHZvaWQpYUxvZ0xldmVsOworICAgICh2b2lkKWFMb2dSZWdpb247CisgICAgKHZvaWQpYUZvcm1hdDsKK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svbWlzYy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyOGYwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9taXNjLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oIgorI2luY2x1ZGUgInBsYXRmb3JtLWVtc2suaCIKKwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgLy8gRGVmYXVsdAorICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBtcmYyNGo0MF9oYXJkX3Jlc2V0KCk7Cit9CisKK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgLy8gVE9ETzogV3JpdGUgbWUhCisgICAgcmV0dXJuIE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOworfQorCit2b2lkIG90UGxhdFdha2VIb3N0KHZvaWQpCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50IGFuIG9wZXJhdGlvbiB0byB3YWtlIHRoZSBob3N0IGZyb20gc2xlZXAgc3RhdGUuCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9vcGVudGhyZWFkLWNvcmUtZW1zay1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL29wZW50aHJlYWQtY29yZS1lbXNrLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGJkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9vcGVudGhyZWFkLWNvcmUtZW1zay1jb25maWcuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBFTVNLIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cyBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9FTVNLX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfRU1TS19DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyAqCisgKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUICAgICAgICAgICAgIDEKKworIC8qKgorICAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgQUNLIHRpbWVvdXQgbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUICAgICAgICAgICAwCisKKyAvKioKKyAgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgICoKKyAgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgcmV0cmFuc21pc3Npb24gbG9naWMuCisgICoKKyAgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQgICAgICAgICAgICAwCisKKyAvKioKKyAgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorICAqCisgICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIGVuZXJneSBzY2FubmluZyBsb2dpYy4KKyAgKgorICAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4gICAgICAgICAgIDAKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfRU1TS19DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLWVtc2suaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLWVtc2suaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTdkODRlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcGxhdGZvcm0tZW1zay5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKgorICovCisKKyNpZm5kZWYgUExBVEZPUk1fRU1TS19IXworI2RlZmluZSBQTEFURk9STV9FTVNLX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorCisjaW5jbHVkZSAiYm9hcmQvYm9hcmQuaCIKKworLy8gR2xvYmFsIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlCitleHRlcm4gb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBlbXNrQWxhcm1Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB0aW1lIHJlbWFpbmluZyB1bnRpbCB0aGUgYWxhcm0gZmlyZXMuCisgKgorICogQHBhcmFtW291dF0gIGFUaW1ldmFsICBBIHBvaW50ZXIgdG8gdGltZXIgdmFsdWUuCisgKgorICovCit2b2lkIGVtc2tBbGFybVVwZGF0ZVRpbWVvdXQoaW50MzJfdCAqYVRpbWVvdXQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxhcm0gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGVtc2tBbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSByYWRpbyBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgZW1za1JhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBlbXNrUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFuZG9tIG51bWJlciBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgZW1za1JhbmRvbUluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBVQVJUIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBlbXNrVWFydFByb2Nlc3Modm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fRU1TS19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcGxhdGZvcm0uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWM3OWU0MAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICoKKyAqLworCisjaW5jbHVkZSAib3BlbnRocmVhZC9vcGVudGhyZWFkLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgREJHKGZtdCwgLi4uKSAgIHByaW50ZihmbXQsICMjX19WQV9BUkdTX18pCisKK3ZvaWQgUGxhdGZvcm1Jbml0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgZW1za0FsYXJtSW5pdCgpOworICAgIGVtc2tSYWRpb0luaXQoKTsKKyAgICBlbXNrUmFuZG9tSW5pdCgpOworICAgIG90UGxhdFVhcnRFbmFibGUoKTsKKworICAgIERCRygiT3BlblRocmVhZCBJbml0IEZpbmlzaGVkXHJcbiIpOworCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworfQorCit2b2lkIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIC8vIHNJbnN0YW5jZSA9IGFJbnN0YW5jZTsKKworICAgIGVtc2tVYXJ0UHJvY2VzcygpOworICAgIGVtc2tSYWRpb1Byb2Nlc3MoYUluc3RhbmNlKTsKKyAgICBlbXNrQWxhcm1Qcm9jZXNzKGFJbnN0YW5jZSk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI3NzViCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFkaW8uYwpAQCAtMCwwICsxLDY3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gY29tbXVuaWNhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKworI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9ncGlvLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBEQkcoZm10LCAuLi4pICAgcHJpbnRmKGZtdCwgIyNfX1ZBX0FSR1NfXykKKworZW51bQoreworICAgIElFRUU4MDIxNTRfTUlOX0xFTkdUSCAgICAgICAgID0gNSwKKyAgICBJRUVFODAyMTU0X01BWF9MRU5HVEggICAgICAgICA9IDEyNywKKyAgICBJRUVFODAyMTU0X0FDS19MRU5HVEggICAgICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X0JST0FEQ0FTVCAgICAgICAgICA9IDB4ZmZmZiwKKworICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9BQ0sgICAgID0gMiA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQUNDTUQgID0gMyA8PCAwLAorICAgIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLICAgID0gNyA8PCAwLAorCisgICAgSUVFRTgwMjE1NF9TRUNVUklUWV9FTkFCTEVEICAgPSAxIDw8IDMsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9QRU5ESU5HICAgICAgPSAxIDw8IDQsCisgICAgSUVFRTgwMjE1NF9BQ0tfUkVRVUVTVCAgICAgICAgPSAxIDw8IDUsCisgICAgSUVFRTgwMjE1NF9QQU5JRF9DT01QUkVTU0lPTiAgPSAxIDw8IDYsCisKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX05PTkUgICAgICA9IDAgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX1NIT1JUICAgICA9IDIgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX0VYVCAgICAgICA9IDMgPDwgMiwKKyAgICBJRUVFODAyMTU0X0RTVF9BRERSX01BU0sgICAgICA9IDMgPDwgMiwKKworICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTk9ORSAgICAgID0gMCA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQgICAgID0gMiA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfRVhUICAgICAgID0gMyA8PCA2LAorICAgIElFRUU4MDIxNTRfU1JDX0FERFJfTUFTSyAgICAgID0gMyA8PCA2LAorCisgICAgSUVFRTgwMjE1NF9EU05fT0ZGU0VUICAgICAgICAgPSAyLAorICAgIElFRUU4MDIxNTRfRFNUUEFOX09GRlNFVCAgICAgID0gMywKKyAgICBJRUVFODAyMTU0X0RTVEFERFJfT0ZGU0VUICAgICA9IDUsCisKKyAgICBJRUVFODAyMTU0X1NFQ19MRVZFTF9NQVNLICAgICA9IDcgPDwgMCwKKworICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMCAgICAgID0gMCA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMSAgICAgID0gMSA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMiAgICAgID0gMiA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMyAgICAgID0gMyA8PCAzLAorICAgIElFRUU4MDIxNTRfS0VZX0lEX01PREVfTUFTSyAgID0gMyA8PCAzLAorCisgICAgSUVFRTgwMjE1NF9NQUNDTURfREFUQV9SRVEgICAgPSA0Cit9OworCitlbnVtCit7CisgICAgRU1TS19SRUNFSVZFX1NFTlNJVElWSVRZID0gLTEwMCwgIC8vIGRCbQorfTsKKworZW51bQoreworICAgIE1SRjI0SjQwX1JTU0lfT0ZGU0VUID0gOTAsCisgICAgTVJGMjRKNDBfUlNTSV9TTE9QRSA9IDUKK307CisKK3N0YXRpYyB2b2lkIHJhZGlvVHJhbnNtaXRNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKK3N0YXRpYyBvdFJhZGlvRnJhbWUgc1RyYW5zbWl0RnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNBY2tGcmFtZTsKKworc3RhdGljIG90RXJyb3Igc1RyYW5zbWl0RXJyb3I7CitzdGF0aWMgb3RFcnJvciBzUmVjZWl2ZUVycm9yOworCitzdGF0aWMgdWludDhfdCBzVHJhbnNtaXRQc2R1W0lFRUU4MDIxNTRfTUFYX0xFTkdUSF07CitzdGF0aWMgdWludDhfdCBzUmVjZWl2ZVBzZHVbSUVFRTgwMjE1NF9NQVhfTEVOR1RIXTsKK3N0YXRpYyB1aW50OF90IHNBY2tQc2R1W0lFRUU4MDIxNTRfTUFYX0xFTkdUSF07CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CitzdGF0aWMgYm9vbCBzSXNSZWNlaXZlckVuYWJsZWQgPSBmYWxzZTsKKworc3RhdGljIHZvbGF0aWxlIHVpbnQ4X3QgTXJmMjRTdGF0dXNUeCA9IDA7CitzdGF0aWMgdm9sYXRpbGUgdWludDhfdCBNcmYyNFN0YXR1c1J4ID0gMDsKK3N0YXRpYyB2b2xhdGlsZSB1aW50OF90IE1yZjI0U3RhdHVzU2VjID0gMDsKKworc3RhdGljIERFVl9TUElfUFRSIHBtcmZfc3BpX3B0cjsKK3N0YXRpYyBERVZfR1BJT19QVFIgcG1yZl9ncGlvX3B0cjsKK3N0YXRpYyB2b2lkIFJhZGlvSXNyKHZvaWQgKnB0cik7CisKKy8qIFZhcmlhYmxlcyBmb3IgdGVzdCAqLworc3RhdGljIHVpbnQzMl90IG51bUludGVycnVwdFJldiA9IDA7CitzdGF0aWMgdWludDMyX3QgbnVtSW50ZXJydXB0VHJhbnMgPSAwOworc3RhdGljIHVpbnQzMl90IG51bVJhZGlvUHJvY2VzcyA9IDA7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NlY3VyaXR5RW5hYmxlZChjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKGZyYW1lWzBdICYgSUVFRTgwMjE1NF9TRUNVUklUWV9FTkFCTEVEKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBY2tSZXF1ZXN0ZWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1BhbklkQ29tcHJlc3NlZChjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKGZyYW1lWzBdICYgSUVFRTgwMjE1NF9QQU5JRF9DT01QUkVTU0lPTikgIT0gMDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IGdldEhlYWRMZW5ndGgoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgIC8qIEZyYW1lIENvbnRyb2wtMiArIFNlcXVlbmNlIE51bWJlci0xICovCisgICAgbGVuZ3RoICs9IDIgKyAxOworCisgICAgLyogRGVzdGluYXRpb24gUEFOICsgQWRkcmVzcyAqLworICAgIHN3aXRjaCAoZnJhbWVbMV0gJiBJRUVFODAyMTU0X0RTVF9BRERSX01BU0spCisgICAgeworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9TSE9SVDoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihvdFBhbklkKSArIHNpemVvZihvdFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX0VYVDoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihvdFBhbklkKSArIHNpemVvZihvdEV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBTb3VyY2UgUEFOICsgQWRkcmVzcyAqLworICAgIHN3aXRjaCAoZnJhbWVbMV0gJiBJRUVFODAyMTU0X1NSQ19BRERSX01BU0spCisgICAgeworICAgIGNhc2UgSUVFRTgwMjE1NF9TUkNfQUREUl9TSE9SVDoKKyAgICAgICAgaWYgKCFpc1BhbklkQ29tcHJlc3NlZChmcmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCArPSBzaXplb2Yob3RQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKG90U2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElFRUU4MDIxNTRfU1JDX0FERFJfRVhUOgorICAgICAgICBpZiAoIWlzUGFuSWRDb21wcmVzc2VkKGZyYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoICs9IHNpemVvZihvdFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aCArPSBzaXplb2Yob3RFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3ZvaWQgZW5hYmxlUmVjZWl2ZXIodm9pZCkKK3sKKyAgICBpZiAoIXNJc1JlY2VpdmVyRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1yZjI0ajQwX3J4Zmlmb19mbHVzaCgpOworICAgICAgICAvKiBhZGQgY29kZSB0byBlbmFibGUgcmVjZWl2ZXIgKHdha2V1cCkgKi8KKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgZGlzYWJsZVJlY2VpdmVyKHZvaWQpCit7CisgICAgaWYgKHNJc1JlY2VpdmVyRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1yZjI0ajQwX3J4Zmlmb19mbHVzaCgpOworICAgICAgICAvKiBhZGQgY29kZSB0byBkaXNhYmxlIHJlY2VpdmVyIChzbGVlcCkgKi8KKyAgICAgICAgc0lzUmVjZWl2ZXJFbmFibGVkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIHNldENoYW5uZWwodWludDhfdCBjaGFubmVsKQoreworICAgIG1yZjI0ajQwX3NldF9jaGFubmVsKChpbnQxNl90KShjaGFubmVsIC0gMTEpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFJZWVlRXVpNjQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIC8qIHNob3VsZCBzZXQgaXQgbWFudWFsbHkgb3IgcHJlc2V0IGl0IGluIG1lbW9yeSAqLworICAgIGFJZWVlRXVpNjRbMF0gPSAweDAwOworICAgIGFJZWVlRXVpNjRbMV0gPSAweDUwOworICAgIGFJZWVlRXVpNjRbMl0gPSAweEMyOworICAgIGFJZWVlRXVpNjRbM10gPSAweEZGOworICAgIGFJZWVlRXVpNjRbNF0gPSAwWEZFOworICAgIGFJZWVlRXVpNjRbNV0gPSAwWDFEOworICAgIGFJZWVlRXVpNjRbNl0gPSAwWDMwOworICAgIGFJZWVlRXVpNjRbN10gPSAweDAwOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBwYW5pZCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDhfdCBwYW5bMl07CisKKyAgICBwYW5bMF0gPSAodWludDhfdCkocGFuaWQgJiAweEZGKTsKKyAgICBwYW5bMV0gPSAodWludDhfdCkocGFuaWQgPj4gOCk7CisgICAgbXJmMjRqNDBfc2V0X3BhbihwYW4pOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgbXJmMjRqNDBfc2V0X2V1aShhZGRyZXNzKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQ4X3QgYWRkclsyXTsKKworICAgIGFkZHJbMF0gPSAodWludDhfdCkoYWRkcmVzcyAmIDB4RkYpOworICAgIGFkZHJbMV0gPSAodWludDhfdCkoYWRkcmVzcyA+PiA4KTsKKyAgICBtcmYyNGo0MF9zZXRfc2hvcnRfYWRkcihhZGRyKTsKK30KKwordm9pZCBlbXNrUmFkaW9Jbml0KHZvaWQpCit7CisgICAgREVWX0dQSU9fQklUX0lTUiBpc3I7CisgICAgREVWX0dQSU9fSU5UX0NGRyBpbnRfY2ZnOworCisgICAgaW50MzJfdCBlcmNkOworICAgIHVpbnQzMl90IHRlbXA7CisKKyAgICBzVHJhbnNtaXRGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzVHJhbnNtaXRGcmFtZS5tUHNkdSA9IHNUcmFuc21pdFBzZHU7CisgICAgc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qc2R1ID0gc1JlY2VpdmVQc2R1OworICAgIHNBY2tGcmFtZS5tTGVuZ3RoID0gMDsKKyAgICBzQWNrRnJhbWUubVBzZHUgPSBzQWNrUHNkdTsKKworICAgIHBtcmZfc3BpX3B0ciA9IHNwaV9nZXRfZGV2KEVNU0tfUE1SRl8wX1NQSV9JRCk7CisgICAgZXJjZCA9IHBtcmZfc3BpX3B0ci0+c3BpX29wZW4oREVWX01BU1RFUl9NT0RFLCBFTVNLX1BNUkZfMF9TUElGUkVRKTsKKworICAgIGlmICgoZXJjZCAhPSBFX09LKSAmJiAoZXJjZCAhPSBFX09QTkVEKSkKKyAgICB7CisgICAgICAgIERCRygiUG1vZFJGMiBTUEkgb3BlbiBlcnJvclxyXG4iKTsKKyAgICB9CisKKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfU0VUX0NMS19NT0RFLCBDT05WMlZPSUQoRU1TS19QTVJGXzBfU1BJQ0xLTU9ERSkpOworCisgICAgLypNUkYyNEo0MCB3YWtlcGluOm91dHB1dCwgcnN0cGluOm91dHB1dCwgSU5UX1BJTjppbnB1dCwgaW50ZXJydXB0ICovCisgICAgcG1yZl9ncGlvX3B0ciA9IGdwaW9fZ2V0X2RldihFTVNLX1BNUkZfMF9HUElPX0lEKTsKKyAgICBlcmNkID0gcG1yZl9ncGlvX3B0ci0+Z3Bpb19vcGVuKE1SRjI0SjQwX1dBS0VfUElOIHwgTVJGMjRKNDBfUlNUX1BJTik7CisKKyAgICBpZiAoKGVyY2QgIT0gRV9PSykgJiYgKGVyY2QgIT0gRV9PUE5FRCkpCisgICAgeworICAgICAgICBEQkcoIlBtb2RSRjIgQ1JUTCBwb3J0IG9wZW4gZXJyb3IiKTsKKyAgICB9CisKKyAgICBpZiAoZXJjZCA9PSBFX09QTkVEKQorICAgIHsKKyAgICAgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX1NFVF9CSVRfRElSX09VVFBVVCwgKHZvaWQgKikoTVJGMjRKNDBfV0FLRV9QSU4gfCBNUkYyNEo0MF9SU1RfUElOKSk7CisgICAgICAgIHBtcmZfZ3Bpb19wdHItPmdwaW9fY29udHJvbChHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVCwgKHZvaWQgKilNUkYyNEo0MF9JTlRfUElOKTsKKyAgICB9CisKKyAgICBwbXJmX2dwaW9fcHRyLT5ncGlvX2NvbnRyb2woR1BJT19DTURfRElTX0JJVF9JTlQsICh2b2lkICopTVJGMjRKNDBfSU5UX1BJTik7CisKKyAgICB0ZW1wID0gTVJGMjRKNDBfSU5UX1BJTjsKKyAgICBpbnRfY2ZnLmludF9iaXRfbWFzayA9IHRlbXA7CisgICAgaW50X2NmZy5pbnRfYml0X3R5cGUgPSBHUElPX0lOVF9CSVRTX0VER0VfVFJJRyh0ZW1wKTsKKyAgICBpbnRfY2ZnLmludF9iaXRfcG9sYXJpdHkgPSBHUElPX0lOVF9CSVRTX1BPTF9GQUxMX0VER0UodGVtcCk7CisgICAgaW50X2NmZy5pbnRfYml0X2RlYm91bmNlID0gR1BJT19JTlRfQklUU19ESVNfREVCT1VOQ0UodGVtcCk7CisgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX1NFVF9CSVRfSU5UX0NGRywgKHZvaWQgKikoJmludF9jZmcpKTsKKworICAgIGlzci5pbnRfYml0X29mcyA9IE1SRjI0SjQwX0lOVF9QSU5fT0ZTOworICAgIGlzci5pbnRfYml0X2hhbmRsZXIgPSBSYWRpb0lzcjsKKyAgICBwbXJmX2dwaW9fcHRyLT5ncGlvX2NvbnRyb2woR1BJT19DTURfU0VUX0JJVF9JU1IsICh2b2lkICopKCZpc3IpKTsKKworICAgIC8qIGludGVycnVwdCBmb3IgbXJmMjRqNDAgaXMgZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbml0IHByb2Nlc3MgKi8KKyAgICBEQkcoIk1SRjI0SjQwIEluaXQgU3RhcnRlZFxyXG4iKTsKKyAgICBtcmYyNGo0MF9pbml0aWFsaXplKCk7CisgICAgREJHKCJNUkYyNEo0MCBJbml0IEZpbmlzaGVkXHJcbiIpOworCisgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX0VOQV9CSVRfSU5ULCAodm9pZCAqKU1SRjI0SjQwX0lOVF9QSU4pOworCit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmFibGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGlmICghb3RQbGF0UmFkaW9Jc0VuYWJsZWQoYUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKG90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1NMRUVQIHx8IHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9TTEVFUDsKKyAgICAgICAgZGlzYWJsZVJlY2VpdmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgaWYgKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICAgICAgc2V0Q2hhbm5lbChhQ2hhbm5lbCk7CisgICAgICAgIHNSZWNlaXZlRnJhbWUubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICAgICAgZW5hYmxlUmVjZWl2ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRnJhbWU7CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKKworfQorCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gJnNUcmFuc21pdEZyYW1lOworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSc3NpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIDA7Cit9CisKK290UmFkaW9DYXBzIG90UGxhdFJhZGlvR2V0Q2FwcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBPVF9SQURJT19DQVBTX05PTkU7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAoYm9vbCkobXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUikgJiBNUkYyNEo0MF9QUk9NSSk7Cit9CisKKy8vIHNob3VsZCBiZSBjaGVja2VkIGFnYWluIHdpdGggQ0MyNTM4Cit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIG1yZjI0ajQwX3NldF9wcm9taXNjdW91cyh+YUVuYWJsZSk7Cit9CisKK3ZvaWQgcmVhZEZyYW1lKHZvaWQpCit7CisKKyAgICAvKiByZWFkQnVmZmVyCisgICAgICogMSBiaXQgLS0gNSB0byAxMjcgYml0cyAtLSAxIGJpdCAtLSAxYml0CisgICAgICogRnJhbWUgTGVuZ3RoIC0tIFBTRFUgKEhlYWRlciArIERhdGEgUGF5bG9hZCArIEZDUykgLS0gTFFJIC0tIFJTU0kKKyAgICAgKi8KKyAgICB1aW50OF90IHJlYWRCdWZmZXJbTVJGMjRKNDBfUlhGSUZPX1NJWkVdOworICAgIHVpbnQ4X3QgcmVhZFBscWkgPSAwOworICAgIHVpbnQ4X3QgcmVhZFJzc2kgPSAwOworCisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGludDE2X3QgaTsKKworICAgIG1lbXNldChyZWFkQnVmZmVyLCAwLCBNUkYyNEo0MF9SWEZJRk9fU0laRSk7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUgfHwgc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlULCA7KTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oTXJmMjRTdGF0dXNSeCwgOyk7CisKKyAgICBpZiAoTXJmMjRTdGF0dXNSeCA9PSAxKQorICAgIHsKKyAgICAgICAgTXJmMjRTdGF0dXNSeCA9IDA7CisgICAgfQorCisgICAgaWYgKE1yZjI0U3RhdHVzU2VjID09IDEpCisgICAgeworICAgICAgICBNcmYyNFN0YXR1c1NlYyA9IDA7CisgICAgfQorCisgICAgLyogUmVhZCBsZW5ndGggKi8KKyAgICBsZW5ndGggPSAodWludDE2X3QpbXJmMjRqNDBfcnhwa3RfaW50Y2IocmVhZEJ1ZmZlciwgJnJlYWRQbHFpLCAmcmVhZFJzc2kpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKElFRUU4MDIxNTRfTUlOX0xFTkdUSCA8PSBsZW5ndGggJiYgbGVuZ3RoIDw9IElFRUU4MDIxNTRfTUFYX0xFTkdUSCwgOyk7CisKKyAgICAvKiBSZWFkIFBTRFUgKi8KKyAgICBtZW1jcHkoc1JlY2VpdmVGcmFtZS5tUHNkdSwgcmVhZEJ1ZmZlciwgbGVuZ3RoIC0gMik7CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciA9IChpbnQ4X3QpKHJlYWRSc3NpIC8gTVJGMjRKNDBfUlNTSV9TTE9QRSkgLSBNUkYyNEo0MF9SU1NJX09GRlNFVDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSAodWludDhfdCkgbGVuZ3RoOworICAgIHNSZWNlaXZlRnJhbWUubUxxaSA9IHJlYWRQbHFpOworCitleGl0OgorICAgIHJldHVybjsKKworfQorCit2b2lkIHJhZGlvVHJhbnNtaXRNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDhfdCBoZWFkZXJfbGVuID0gMDsKKworICAgIHNUcmFuc21pdEVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzZXRDaGFubmVsKHNUcmFuc21pdEZyYW1lLm1DaGFubmVsKTsKKworICAgIHVpbnQ4X3QgcmVnID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE5DT04pOworCisgICAgaGVhZGVyX2xlbiA9IGdldEhlYWRMZW5ndGgoc1RyYW5zbWl0RnJhbWUubVBzZHUpOworCisgICAgaWYgKGlzQWNrUmVxdWVzdGVkKHNUcmFuc21pdEZyYW1lLm1Qc2R1KSkKKyAgICB7CisgICAgICAgIHJlZyB8PSBNUkYyNEo0MF9UWE5BQ0tSRVE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlZyAmPSB+KE1SRjI0SjQwX1RYTkFDS1JFUSk7CisgICAgfQorCisgICAgaWYgKGlzU2VjdXJpdHlFbmFibGVkKHNUcmFuc21pdEZyYW1lLm1Qc2R1KSkKKyAgICB7CisgICAgICAgIHJlZyB8PSBNUkYyNEo0MF9UWE5TRUNFTjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVnICY9IH4oTVJGMjRKNDBfVFhOU0VDRU4pOworICAgICAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE5DT04sIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OKSAmICh+TVJGMjRKNDBfVFhOU0VDRU4pKTsKKyAgICB9CisKKyAgICBtcmYyNGo0MF90eGZpZm9fd3JpdGUoTVJGMjRKNDBfVFhORklGTywgc1RyYW5zbWl0RnJhbWUubVBzZHUsIGhlYWRlcl9sZW4sIChzVHJhbnNtaXRGcmFtZS5tTGVuZ3RoIC0gMikpOworCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OLCByZWcgfCBNUkYyNEo0MF9UWE5UUklHKTsKKworICAgIGludDE2X3QgdHhfdGltZW91dCA9IDUwMDsKKyAgICBNcmYyNFN0YXR1c1R4ID0gMDsKKworICAgIHdoaWxlICgodHhfdGltZW91dCA+IDApICYmIChNcmYyNFN0YXR1c1R4ICE9IDEpKQorICAgIHsKKyAgICAgICAgbXJmMjRqNDBfZGVsYXlfbXMoMSk7CisgICAgICAgIHR4X3RpbWVvdXQtLTsKKworICAgICAgICBpZiAodHhfdGltZW91dCA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBEQkcoIlJhZGlvIFRyYW5zbWl0IFRpbWVvdXQhISEhISEhISEhISFcclxuIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZW1za1JhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgbnVtUmFkaW9Qcm9jZXNzKys7CisKKyAgICByZWFkRnJhbWUoKTsKKyAgICB1aW50OF90IHJlZyA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhTVEFUKTsKKworICAgIGlmIChyZWcgJiBNUkYyNEo0MF9UWE5TVEFUKQorICAgIHsKKyAgICAgICAgREJHKCJUWCBNQUMgVGltZW91dCEhISEhIVxyXG4iKTsKKworICAgICAgICBpZiAocmVnICYgTVJGMjRKNDBfQ0NBRkFJTCkKKyAgICAgICAgeworICAgICAgICAgICAgREJHKCJDaGFubmVsIGJ1c3khISEhISFcclxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKSAmJiAoc1JlY2VpdmVGcmFtZS5tTGVuZ3RoID4gMCkpCisgICAgeworICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlRnJhbWUsIHNSZWNlaXZlRXJyb3IpOworICAgIH0KKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpCisgICAgeworICAgICAgICByYWRpb1RyYW5zbWl0TWVzc2FnZShhSW5zdGFuY2UpOworCisgICAgICAgIGlmIChzVHJhbnNtaXRFcnJvciAhPSBPVF9FUlJPUl9OT05FIHx8IChzVHJhbnNtaXRGcmFtZS5tUHNkdVswXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgc1RyYW5zbWl0RXJyb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKE1yZjI0U3RhdHVzVHggPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgTXJmMjRTdGF0dXNUeCA9IDA7CisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworICAgICAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsICZzUmVjZWl2ZUZyYW1lLCBzVHJhbnNtaXRFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSAwOworCit9CisKKy8qKgorICogXGJyaWVmIGlzciByb3V0aW5lIG9mIG1yZjI0ajQwCisgKiBccGFyYW1baW5dIHB0ciBwb2ludGVyIHRyYW5zZmVycmVkIGZyb21lIGludGVycnVwdCBlbnRyeQorICovCitzdGF0aWMgdm9pZCBSYWRpb0lzcih2b2lkICpwdHIpCit7CisgICAgdWludDhfdCBpbnRfc3RhdHVzID0gMDsKKworICAgIGludF9zdGF0dXMgPSBwbXJmX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfSU5UU1RBVCk7CisKKyAgICAvKiBhIGZyYW1lIGlzIHJlY2VpdmVkICovCisgICAgaWYgKGludF9zdGF0dXMgJiBNUkYyNEo0MF9SWElGKQorICAgIHsKKyAgICAgICAgbnVtSW50ZXJydXB0UmV2Kys7CisgICAgICAgIE1yZjI0U3RhdHVzUnggPSAxOworICAgIH0KKworICAgIC8qIGEgZnJhbWUgaXMgdHJhbnNtaXR0ZWQgKi8KKyAgICBpZiAoaW50X3N0YXR1cyAmIE1SRjI0SjQwX1RYTklGKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtcmYyNGo0MF90eHBrdF9pbnRjYigpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTVJGMjRKNDBfRUJVU1k6CisgICAgICAgICAgICAvKiBDaGFubmVsIGJ1c3kgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTVJGMjRKNDBfRUlPOgorICAgICAgICAgICAgLyogQ2hhbm5lbCBpZGxlICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBudW1JbnRlcnJ1cHRUcmFucysrOworICAgICAgICAgICAgTXJmMjRTdGF0dXNUeCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGEgZnJhbWUgd2l0aCBzZWN1cml0eSBrZXkgcmVxdWVzdCBpcyByZWNlaXZlZCAqLworICAgIGlmIChpbnRfc3RhdHVzICYgTVJGMjRKNDBfU0VDSUYpCisgICAgeworICAgICAgICBNcmYyNFN0YXR1c1NlYyA9IDE7CisgICAgICAgIG1yZjI0ajQwX3NlY19pbnRjYihmYWxzZSk7CisgICAgfQorCit9CisKKy8qIENDMjUzOCBzdXBwb3J0cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBmb3IgbG93IHBvd2VyIGNvbnN1bXB0aW9uCisgICBhbmQgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIE1SRjI0SjQwICovCit2b2lkIG90UGxhdFJhZGlvRW5hYmxlU3JjTWF0Y2gob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFFbmFibGU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhU2hvcnRBZGRyZXNzOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRXh0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVNob3J0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRXh0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24pCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFTY2FuQ2hhbm5lbDsKKyAgICAodm9pZClhU2NhbkR1cmF0aW9uOworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXREZWZhdWx0VHhQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpCit7CisgICAgLy8gVE9ETzogQ3JlYXRlIGEgcHJvcGVyIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIGRyaXZlci4KKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVBvd2VyOworfQorCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gRU1TS19SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjA5MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svcmFuZG9tLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICogQHdhcm5pbmcKKyAqICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgYSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGFuZCBkb2VzIEBlbSBzYXRpc2Z5IHRoZSBUaHJlYWQgcmVxdWlyZW1lbnRzLgorICoKKyAqLworCisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNlZWQ7CisKK3ZvaWQgZW1za1JhbmRvbUluaXQodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHByaW50ZigiTm9kZSBOby46Iik7CisgICAgc2NhbmYoIiVkIiwgJmkpOworICAgIHByaW50ZigiJWRcbiIsIGkpOworICAgIHNlZWQgPSAxMCArIGk7CisgICAgc3JhbmQoc2VlZCk7Cit9CisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworCisgICAgcmV0dXJuICh1aW50MzJfdClyYW5kKCk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFuZG9tR2V0VHJ1ZSh1aW50OF90ICphT3V0cHV0LCB1aW50MTZfdCBhT3V0cHV0TGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY2hhbm5lbCA9IDA7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oYU91dHB1dCAmJiBhT3V0cHV0TGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvKiBkaXNhYmxlIHJhZGlvKi8KKyAgICBpZiAob3RQbGF0UmFkaW9Jc0VuYWJsZWQoc0luc3RhbmNlKSkKKyAgICB7CisgICAgICAgIGNoYW5uZWwgPSAobXJmMjRqNDBfcmVhZF9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMCkgPj4gNCkgKyAxMTsKKyAgICAgICAgb3RQbGF0UmFkaW9TbGVlcChzSW5zdGFuY2UpOworICAgICAgICBvdFBsYXRSYWRpb0Rpc2FibGUoc0luc3RhbmNlKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRIRSBJTVBMRU1FTlRBVElPTiBCRUxPVyBJUyBOT1QgQ09NUExJQU5UIFdJVEggVEhFIFRIUkVBRCBTUEVDSUZJQ0FUSU9OLgorICAgICAqCisgICAgICogUGxlYXNlIHNlZSBOb3RlIGluIGA8cGF0aC10by1vcGVudGhyZWFkPi9leGFtcGxlcy9wbGF0Zm9ybXMvZW1zay9SRUFETUUubWRgCisgICAgICogZm9yIFRSTkcgZmVhdHVyZXMgb24gRU1TSy4KKyAgICAgKi8KKyAgICBvdEVYUEVDVF9BQ1RJT04oYU91dHB1dCAmJiBhT3V0cHV0TGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBmb3IgKHVpbnQxNl90IGxlbmd0aCA9IDA7IGxlbmd0aCA8IGFPdXRwdXRMZW5ndGg7IGxlbmd0aCsrKQorICAgIHsKKyAgICAgICAgLyogR2V0IHJhbmRvbSBudW1iZXIgKi8KKyAgICAgICAgYU91dHB1dFtsZW5ndGhdID0gKHVpbnQ4X3Qpb3RQbGF0UmFuZG9tR2V0KCk7CisgICAgfQorCisgICAgLyogRW5hYmxlIHJhZGlvKi8KKyAgICBpZiAoY2hhbm5lbCkKKyAgICB7CisgICAgICAgIGVtc2tSYWRpb0luaXQoKTsKKyAgICAgICAgb3RQbGF0UmFkaW9FbmFibGUoc0luc3RhbmNlKTsKKyAgICAgICAgb3RQbGF0UmFkaW9SZWNlaXZlKHNJbnN0YW5jZSwgY2hhbm5lbCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3VhcnQuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9lbXNrL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFkNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2Vtc2svdWFydC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBVQVJUIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0tZW1zay5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgREJHKGZtdCwgLi4uKSAgIHByaW50ZihmbXQsICMjX19WQV9BUkdTX18pCisKK2VudW0KK3sKKyAgICBrVWFydElkID0gQk9BUkRfQ09OU09MRV9VQVJUX0lELAorICAgIGtCYXVkUmF0ZSA9IEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVELAorICAgIGtSZWNlaXZlQnVmZmVyU2l6ZSA9IDEyOCwKK307CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpOworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KHZvaWQpOworCitzdGF0aWMgY29uc3QgdWludDhfdCAqc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKK3N0YXRpYyB1aW50MTZfdCBzVHJhbnNtaXRMZW5ndGggPSAwOworCitzdGF0aWMgdWludDhfdCBzUmVjZWl2ZUJ1ZmZlcltrUmVjZWl2ZUJ1ZmZlclNpemVdOworc3RhdGljIHVpbnQxNl90IHNSZWNlaXZlSGVhZCA9IDA7CisKK3N0YXRpYyBERVZfVUFSVCAqY29uc29sZVVhcnQ7CisKK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIGludDMyX3Qgc3RhdGVVYXJ0ID0gMDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfRFJPUDsKKworICAgIC8qIFVBUlQgaW4gZW1iQVJDICovCisgICAgY29uc29sZVVhcnQgPSB1YXJ0X2dldF9kZXYoQk9BUkRfQ09OU09MRV9VQVJUX0lEKTsKKworICAgIG90RVhQRUNUX0FDVElPTighKGNvbnNvbGVVYXJ0ID09IE5VTEwpLCBEQkcoIkNvbnNvbGUgVUFSVCBpcyBtaXNzaW5nLlxyXG4iKSk7CisKKyAgICBzdGF0ZVVhcnQgPSBjb25zb2xlVWFydC0+dWFydF9vcGVuKEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEKTsKKworICAgIGlmIChzdGF0ZVVhcnQgPT0gRV9PUE5FRCkKKyAgICB7CisgICAgICAgIGNvbnNvbGVVYXJ0LT51YXJ0X2NvbnRyb2woVUFSVF9DTURfU0VUX0JBVUQsICh2b2lkICopKEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEKSk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgREJHKCJTZXQgQ29uc29sZSBVQVJUIEJhdWRyYXRlIHRvICVkLlxyXG4iLCBCT0FSRF9DT05TT0xFX1VBUlRfQkFVRCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlVWFydCA9PSBFX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBEQkcoIk9wZW4gQ29uc29sZSBVQVJUIFN1Y2Nlc3NmdWxseS5cclxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCRygiT3BlbiBDb25zb2xlIFVBUlQgRXJyb3IuXHJcbiIpOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiBlcnJvcjsKKworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydFNlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90RVhQRUNUX0FDVElPTihzVHJhbnNtaXRCdWZmZXIgPT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIHNUcmFuc21pdEJ1ZmZlciA9IGFCdWY7CisgICAgc1RyYW5zbWl0TGVuZ3RoID0gYUJ1Zkxlbmd0aDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgcHJvY2Vzc1JlY2VpdmUodm9pZCkKK3sKKworICAgIGludDMyX3QgcmRBdmFpbCA9IDA7CisgICAgdWludDE2X3QgcmVtYWluaW5nOworCisgICAgY29uc29sZVVhcnQtPnVhcnRfY29udHJvbChVQVJUX0NNRF9HRVRfUlhBVkFJTCwgKHZvaWQgKikoJnJkQXZhaWwpKTsKKyAgICBvdEVYUEVDVF9BQ1RJT04ocmRBdmFpbCA+IDAsIDspOworCisgICAgcmVtYWluaW5nID0ga1JlY2VpdmVCdWZmZXJTaXplIC0gc1JlY2VpdmVIZWFkOworCisgICAgaWYgKHJkQXZhaWwgPj0gcmVtYWluaW5nKQorICAgIHsKKyAgICAgICAgY29uc29sZVVhcnQtPnVhcnRfcmVhZCgodm9pZCAqKShzUmVjZWl2ZUJ1ZmZlciArIHNSZWNlaXZlSGVhZCksICh1aW50MzJfdClyZW1haW5pbmcpOworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmVCdWZmZXIgKyBzUmVjZWl2ZUhlYWQsIHJlbWFpbmluZyk7CisgICAgICAgIHNSZWNlaXZlSGVhZCA9IDA7CisgICAgICAgIHJkQXZhaWwgLT0gKGludDMyX3QpcmVtYWluaW5nOworICAgIH0KKworICAgIHdoaWxlIChyZEF2YWlsID49IGtSZWNlaXZlQnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGVVYXJ0LT51YXJ0X3JlYWQoKHZvaWQgKikoc1JlY2VpdmVCdWZmZXIgKyBzUmVjZWl2ZUhlYWQpLCAodWludDMyX3Qpa1JlY2VpdmVCdWZmZXJTaXplKTsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlQnVmZmVyICsgc1JlY2VpdmVIZWFkLCBrUmVjZWl2ZUJ1ZmZlclNpemUpOworICAgICAgICByZEF2YWlsIC09IGtSZWNlaXZlQnVmZmVyU2l6ZTsKKyAgICB9CisKKyAgICBpZiAocmRBdmFpbCA+IDApCisgICAgeworICAgICAgICBjb25zb2xlVWFydC0+dWFydF9yZWFkKCh2b2lkICopKHNSZWNlaXZlQnVmZmVyICsgc1JlY2VpdmVIZWFkKSwgKHVpbnQzMl90KXJkQXZhaWwpOworICAgICAgICBvdFBsYXRVYXJ0UmVjZWl2ZWQoc1JlY2VpdmVCdWZmZXIgKyBzUmVjZWl2ZUhlYWQsIHJkQXZhaWwpOworICAgICAgICBzUmVjZWl2ZUhlYWQgKz0gKHVpbnQxNl90KXJkQXZhaWw7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBwcm9jZXNzVHJhbnNtaXQodm9pZCkKK3sKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1RyYW5zbWl0QnVmZmVyICE9IE5VTEwsIDspOworCisgICAgY29uc29sZVVhcnQtPnVhcnRfd3JpdGUoKHZvaWQgKilzVHJhbnNtaXRCdWZmZXIsIChpbnQzMl90KXNUcmFuc21pdExlbmd0aCk7CisKKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworICAgIG90UGxhdFVhcnRTZW5kRG9uZSgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBlbXNrVWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICBwcm9jZXNzUmVjZWl2ZSgpOworICAgIHByb2Nlc3NUcmFuc21pdCgpOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovTUtXNDFaNTEyeHh4NC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NS1c0MVo1MTJ4eHg0LmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2NiODAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovTUtXNDFaNTEyeHh4NC5sZApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBHQ0MgbGlua2VyIHNjcmlwdCBmb3IgTUtXNDFaNTEyeHh4NC4KKyAqLworIAorR1JPVVAgKAorICBsaWJtLmEKKykKKworLyogRW50cnkgUG9pbnQgKi8KK0VOVFJZKFJlc2V0X0hhbmRsZXIpCisKK0hFQVBfU0laRSAgPSBERUZJTkVEKF9faGVhcF9zaXplX18pICA/IF9faGVhcF9zaXplX18gIDogMHgwNDAwOworU1RBQ0tfU0laRSA9IERFRklORUQoX19zdGFja19zaXplX18pID8gX19zdGFja19zaXplX18gOiAweDA0MDA7CitNX1ZFQ1RPUl9SQU1fU0laRSA9IERFRklORUQoX19yYW1fdmVjdG9yX3RhYmxlX18pID8gMHgwMjAwIDogMHgwOworCisvKiBTcGVjaWZ5IHRoZSBtZW1vcnkgYXJlYXMgKi8KK01FTU9SWQoreworICBtX2ludGVycnVwdHMgICAgICAgICAgKFJYKSAgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSAweDAwMDAwMjAwCisgIG1fZmxhc2hfY29uZmlnICAgICAgICAoUlgpICA6IE9SSUdJTiA9IDB4MDAwMDA0MDAsIExFTkdUSCA9IDB4MDAwMDAwMTAKKyAgbV90ZXh0ICAgICAgICAgICAgICAgIChSWCkgIDogT1JJR0lOID0gMHgwMDAwMDQxMCwgTEVOR1RIID0gMHgwMDA3RkJGMAorICBtX2RhdGEgICAgICAgICAgICAgICAgKFJXKSAgOiBPUklHSU4gPSAweDFGRkY4MDAwLCBMRU5HVEggPSAweDAwMDIwMDAwCit9CisKKy8qIERlZmluZSBvdXRwdXQgc2VjdGlvbnMgKi8KK1NFQ1RJT05TCit7CisgIC8qIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBmaXJzdCBpbnRvIGludGVybmFsIGZsYXNoICovCisgIC5pbnRlcnJ1cHRzIDoKKyAgeworICAgIF9fVkVDVE9SX1RBQkxFID0gLjsKKyAgICAuID0gQUxJR04oNCk7CisgICAgS0VFUCgqKC5pc3JfdmVjdG9yKSkgICAgIC8qIFN0YXJ0dXAgY29kZSAqLworICAgIC4gPSBBTElHTig0KTsKKyAgfSA+IG1faW50ZXJydXB0cworCisgIC5mbGFzaF9jb25maWcgOgorICB7CisgICAgLiA9IEFMSUdOKDQpOworICAgIEtFRVAoKiguRmxhc2hDb25maWcpKSAgICAvKiBGbGFzaCBDb25maWd1cmF0aW9uIEZpZWxkIChGQ0YpICovCisgICAgLiA9IEFMSUdOKDQpOworICB9ID4gbV9mbGFzaF9jb25maWcKKworICAvKiBUaGUgcHJvZ3JhbSBjb2RlIGFuZCBvdGhlciBkYXRhIGdvZXMgaW50byBpbnRlcm5hbCBmbGFzaCAqLworICAudGV4dCA6CisgIHsKKyAgICAuID0gQUxJR04oNCk7CisgICAgKigudGV4dCkgICAgICAgICAgICAgICAgIC8qIC50ZXh0IHNlY3Rpb25zIChjb2RlKSAqLworICAgICooLnRleHQqKSAgICAgICAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovCisgICAgKigucm9kYXRhKSAgICAgICAgICAgICAgIC8qIC5yb2RhdGEgc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8KKyAgICAqKC5yb2RhdGEqKSAgICAgICAgICAgICAgLyogLnJvZGF0YSogc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8KKyAgICAqKC5nbHVlXzcpICAgICAgICAgICAgICAgLyogZ2x1ZSBhcm0gdG8gdGh1bWIgY29kZSAqLworICAgICooLmdsdWVfN3QpICAgICAgICAgICAgICAvKiBnbHVlIHRodW1iIHRvIGFybSBjb2RlICovCisgICAgKiguZWhfZnJhbWUpCisgICAgS0VFUCAoKiguaW5pdCkpCisgICAgS0VFUCAoKiguZmluaSkpCisgICAgLiA9IEFMSUdOKDQpOworICB9ID4gbV90ZXh0CisKKyAgLkFSTS5leHRhYiA6CisgIHsKKyAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKKyAgfSA+IG1fdGV4dAorCisgIC5BUk0gOgorICB7CisgICAgX19leGlkeF9zdGFydCA9IC47CisgICAgKiguQVJNLmV4aWR4KikKKyAgICBfX2V4aWR4X2VuZCA9IC47CisgIH0gPiBtX3RleHQKKworIC5jdG9ycyA6CisgIHsKKyAgICBfX0NUT1JfTElTVF9fID0gLjsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgZnJvbSB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgICBfX0NUT1JfRU5EX18gPSAuOworICB9ID4gbV90ZXh0CisKKyAgLmR0b3JzIDoKKyAgeworICAgIF9fRFRPUl9MSVNUX18gPSAuOworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUoKmNydGVuZD8ubyAqY3J0ZW5kLm8pIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICAgIF9fRFRPUl9FTkRfXyA9IC47CisgIH0gPiBtX3RleHQKKworICAucHJlaW5pdF9hcnJheSA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSopKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0gPiBtX3RleHQKKworICAuaW5pdF9hcnJheSA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KikpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfSA+IG1fdGV4dAorCisgIC5maW5pX2FycmF5IDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkqKSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9ID4gbV90ZXh0CisKKyAgX19ldGV4dCA9IC47ICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZW5kIG9mIGNvZGUgKi8KKyAgX19EQVRBX1JPTSA9IC47IC8qIFN5bWJvbCBpcyB1c2VkIGJ5IHN0YXJ0dXAgZm9yIGRhdGEgaW5pdGlhbGl6YXRpb24gKi8KKworICAvKiByZXNlcnZlIE1UQiBtZW1vcnkgYXQgdGhlIGJlZ2lubmluZyBvZiBtX2RhdGEgKi8KKyAgLm10YiA6IC8qIE1UQiBidWZmZXIgYWRkcmVzcyBhcyBkZWZpbmVkIGJ5IHRoZSBoYXJkd2FyZSAqLworICB7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9tdGJfc3RhcnQgPSAuOworICAgIEtFRVAoKigubXRiX2J1ZikpIC8qIG5lZWQgdG8gS0VFUCBNaWNybyBUcmFjZSBCdWZmZXIgYXMgbm90IHJlZmVyZW5jZWQgYnkgYXBwbGljYXRpb24gKi8KKyAgICAuID0gQUxJR04oOCk7CisgICAgX210Yl9lbmQgPSAuOworICB9ID4gbV9kYXRhCisKKyAgLmludGVycnVwdHNfcmFtIDoKKyAgeworICAgIC4gPSBBTElHTig0KTsKKyAgICBfX1ZFQ1RPUl9SQU1fXyA9IC47CisgICAgX19pbnRlcnJ1cHRzX3JhbV9zdGFydF9fID0gLjsgLyogQ3JlYXRlIGEgZ2xvYmFsIHN5bWJvbCBhdCBkYXRhIHN0YXJ0ICovCisgICAgKigubV9pbnRlcnJ1cHRzX3JhbSkgICAgIC8qIFRoaXMgaXMgYSB1c2VyIGRlZmluZWQgc2VjdGlvbiAqLworICAgIC4gKz0gTV9WRUNUT1JfUkFNX1NJWkU7CisgICAgLiA9IEFMSUdOKDQpOworICAgIF9faW50ZXJydXB0c19yYW1fZW5kX18gPSAuOyAvKiBEZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgZW5kICovCisgIH0gPiBtX2RhdGEKKworICBfX1ZFQ1RPUl9SQU0gPSBERUZJTkVEKF9fcmFtX3ZlY3Rvcl90YWJsZV9fKSA/IF9fVkVDVE9SX1JBTV9fIDogT1JJR0lOKG1faW50ZXJydXB0cyk7CisgIF9fUkFNX1ZFQ1RPUl9UQUJMRV9TSVpFX0JZVEVTID0gREVGSU5FRChfX3JhbV92ZWN0b3JfdGFibGVfXykgPyAoX19pbnRlcnJ1cHRzX3JhbV9lbmRfXyAtIF9faW50ZXJydXB0c19yYW1fc3RhcnRfXykgOiAweDA7CisKKyAgLmRhdGEgOiBBVChfX0RBVEFfUk9NKQorICB7CisgICAgLiA9IEFMSUdOKDQpOworICAgIF9fREFUQV9SQU0gPSAuOworICAgIF9fZGF0YV9zdGFydF9fID0gLjsgICAgICAvKiBjcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgc3RhcnQgKi8KKyAgICAqKC5kYXRhKSAgICAgICAgICAgICAgICAgLyogLmRhdGEgc2VjdGlvbnMgKi8KKyAgICAqKC5kYXRhKikgICAgICAgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovCisgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAuID0gQUxJR04oNCk7CisgICAgX19kYXRhX2VuZF9fID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBlbmQgKi8KKyAgfSA+IG1fZGF0YQorCisgIF9fREFUQV9FTkQgPSBfX0RBVEFfUk9NICsgKF9fZGF0YV9lbmRfXyAtIF9fZGF0YV9zdGFydF9fKTsKKyAgdGV4dF9lbmQgPSBPUklHSU4obV90ZXh0KSArIExFTkdUSChtX3RleHQpOworICBBU1NFUlQoX19EQVRBX0VORCA8PSB0ZXh0X2VuZCwgInJlZ2lvbiBtX3RleHQgb3ZlcmZsb3dlZCB3aXRoIHRleHQgYW5kIGRhdGEiKQorCisgIC8qIFVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovCisgIC5ic3MgOgorICB7CisgICAgLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBzdGFydHVwIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIC5ic3Mgc2VjdGlvbiAqLworICAgIC4gPSBBTElHTig0KTsKKyAgICBfX1NUQVJUX0JTUyA9IC47CisgICAgX19ic3Nfc3RhcnRfXyA9IC47CisgICAgKiguYnNzKQorICAgICooLmJzcyopCisgICAgKihDT01NT04pCisgICAgLiA9IEFMSUdOKDQpOworICAgIF9fYnNzX2VuZF9fID0gLjsKKyAgICBfX0VORF9CU1MgPSAuOworICB9ID4gbV9kYXRhCisKKyAgLmhlYXAgOgorICB7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9fZW5kX18gPSAuOworICAgIFBST1ZJREUoZW5kID0gLik7CisgICAgX19IZWFwQmFzZSA9IC47CisgICAgLiArPSBIRUFQX1NJWkU7CisgICAgX19IZWFwTGltaXQgPSAuOworICAgIF9faGVhcF9saW1pdCA9IC47IC8qIEFkZCBmb3IgX3NicmsgKi8KKyAgfSA+IG1fZGF0YQorCisgIC5zdGFjayA6CisgIHsKKyAgICAuID0gQUxJR04oOCk7CisgICAgLiArPSBTVEFDS19TSVpFOworICB9ID4gbV9kYXRhCisKKyAgLyogSW5pdGlhbGl6ZXMgc3RhY2sgb24gdGhlIGVuZCBvZiBibG9jayAqLworICBfX1N0YWNrVG9wICAgPSBPUklHSU4obV9kYXRhKSArIExFTkdUSChtX2RhdGEpOworICBfX1N0YWNrTGltaXQgPSBfX1N0YWNrVG9wIC0gU1RBQ0tfU0laRTsKKyAgUFJPVklERShfX3N0YWNrID0gX19TdGFja1RvcCk7CisKKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7ICooLkFSTS5hdHRyaWJ1dGVzKSB9CisKKyAgQVNTRVJUKF9fU3RhY2tMaW1pdCA+PSBfX0hlYXBMaW1pdCwgInJlZ2lvbiBtX2RhdGEgb3ZlcmZsb3dlZCB3aXRoIHN0YWNrIGFuZCBoZWFwIikKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjllNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTEzIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgPSBsaWJvcGVudGhyZWFkLWt3NDF6LmEKKworbGlib3BlbnRocmVhZF9rdzQxel9hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURDUFVfTUtXNDFaNTEyVkhUNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbnhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVua25vd24tcHJhZ21hcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLVduby11bnVzZWQtZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1Xbm8tZW1wdHktYm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQTEFURk9STV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVhcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2t3NDF6X2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zdGFydHVwX01LVzQxWjQuUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Nsb2NrX2NvbmZpZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbG9jay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2ZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ncGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHJuZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2lmcl9yYWRpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2FudF9jb25maWcuYyAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYmxlX2NvbmZpZy5jICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9jb21tb25fY29uZmlnLmMgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHAzX2hfMHA1X2NvbmZpZy5jICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDMyX2NvbmZpZy5jIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwNV9jb25maWcuYyAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA3X2NvbmZpZy5jICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8xcDBfY29uZmlnLmMgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwN19oXzBwNV9jb25maWcuYyAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnLmMgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfbXNrX2NvbmZpZy5jICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl96Z2JlX2NvbmZpZy5jICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgZGlhZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorCitsaWJvcGVudGhyZWFkX2t3NDF6X2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0ta3c0MXouaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9rdzQxel9hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFiNTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L1JFQURNRS5tZApAQCAtMCwwICsxLDExMCBAQAorIyBPcGVuVGhyZWFkIG9uIE5YUChGcmVlc2NhbGUpIEtpbmV0aXMgTUtXNDFaNTEyIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciB0aGUgW05YUChGcmVlc2NhbGUpIEtpbmV0aXMgTUtXNDFaNTEyXVtta3c0MXo1MTJdCitiYXNlZCBvbiBbRlJETS1LVzQxWl1bZnJkbS1rdzQxel0gaGFyZHdhcmUgcGxhdGZvcm0uCisKK1tta3c0MXo1MTJdOiBodHRwOi8vd3d3Lm54cC5jb20vcHJvZHVjdHMvbWljcm9jb250cm9sbGVycy1hbmQtcHJvY2Vzc29ycy9hcm0tcHJvY2Vzc29ycy9raW5ldGlzLWNvcnRleC1tLW1jdXMvdy1zZXJpZXMtd2lyZWxlc3MtbTAtcGx1cy1tNC9raW5ldGlzLWt3NDF6LTIuNC1naHotZHVhbC1tb2RlLWJsZS1hbmQtODAyLjE1LjQtd2lyZWxlc3MtcmFkaW8tbWljcm9jb250cm9sbGVyLW1jdS1iYXNlZC1vbi1hcm0tY29ydGV4LW0wLXBsdXMtY29yZTpLVzQxWgorW2ZyZG0ta3c0MXpdOiBodHRwOi8vd3d3Lm54cC5jb20vcHJvZHVjdHMvc29mdHdhcmUtYW5kLXRvb2xzL2hhcmR3YXJlLWRldmVsb3BtZW50LXRvb2xzL2ZyZWVkb20tZGV2ZWxvcG1lbnQtYm9hcmRzL254cC1mcmVlZG9tLWRldmVsb3BtZW50LWtpdC1mb3Ita2luZXRpcy1rdzQxei0zMXotMjF6LW1jdXM6RlJETS1LVzQxWgorCitUaGUgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSBpbnRlbmRlZCB0byBwcmVzZW50IHRoZSBtaW5pbWFsIGNvZGUKK25lY2Vzc2FyeSB0byBzdXBwb3J0IE9wZW5UaHJlYWQuICBBcyBhIHJlc3VsdCwgdGhlIGV4YW1wbGUgcGxhdGZvcm0KK2RyaXZlcnMgZG8gbm90IG5lY2Vzc2FyaWx5IGhpZ2hsaWdodCB0aGUgcGxhdGZvcm0ncyBmdWxsIGNhcGFiaWxpdGllcy4KKworIyMgVG9vbGNoYWluCisKK0Rvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBbR05VIHRvb2xjaGFpbiBmb3IgQVJNIENvcnRleC1NXVtnbnUtdG9vbGNoYWluXS4KKworW2dudS10b29sY2hhaW5dOiBodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZAorCisjIyBCdWlsZCBFeGFtcGxlcworCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUta3c0MXoKK2BgYAorCitBZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHRoZSBgZWxmYCBmaWxlcyBhcmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQva3c0MXovYmluYC4gIFlvdSBjYW4gY29udmVydCB0aGVtIHRvIGBiaW5gCitmaWxlcyB1c2luZyBgYXJtLW5vbmUtZWFiaS1vYmpjb3B5YDoKK2BgYGJhc2gKKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGJpbmFyeSBvdC1jbGktZnRkIG90LWNsaS1mdGQuYmluCitgYGAKKworIyMgRmxhc2ggQmluYXJpZXMKKworQ29tcGlsZWQgYmluYXJpZXMgbWF5IGJlIGZsYXNoZWQgb250byB0aGUgTUtXNDFaNTEyIHVzaW5nIGRyYWctYW5kLWRyb3AgaW50byB0aGUgYm9hcmQncyBNU0QgQm9vdGxvYWRlcgorIG9yIHRoZSBbTlhQKEZyZWVzY2FsZSkgVGVzdCBUb29sXVt0ZXN0LXRvb2xdIG9yIFtKVEFHIGludGVyZmFjZV1banRhZ10uIAorVGhlIFtOWFAoRnJlZXNjYWxlKSBUZXN0IFRvb2xdW3Rlc3QtdG9vbF0gcHJvdmlkZXMgYSBjb252ZW5pZW50IG1ldGhvZCBmb3IgZmxhc2hpbmcgYSBNS1c0MVo1MTIgdmlhIHRoZSBbSi1MaW5rXVtqbGlua10uCisKK1t0ZXN0LXRvb2xdOiBodHRwOi8vd3d3Lm54cC5jb20vd2ViYXBwL3Nwcy9kb3dubG9hZC9saWNlbnNlLmpzcD9jb2xDb2RlPVRFU1RUT09MX1NFVFVQCitbanRhZ106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pUQUcKK1tqbGlua106IGh0dHBzOi8vd3d3LnNlZ2dlci5jb20vamxpbmstc29mdHdhcmUuaHRtbAorCisjIyBSdW5uaW5nIHRoZSBleGFtcGxlCisKKzEuIFByZXBhcmUgdHdvIGJvYXJkcyB3aXRoIHRoZSBmbGFzaGVkIGBDTEkgRXhhbXBsZWAgKGFzIHNob3duIGFib3ZlKS4KKzIuIFRoZSBDTEkgZXhhbXBsZSB1c2VzIFVBUlQgY29ubmVjdGlvbi4gVG8gdmlldyByYXcgVUFSVCBvdXRwdXQsIHN0YXJ0IGEgdGVybWluYWwKKyAgIGVtdWxhdG9yIGxpa2UgUHVUVFkgYW5kIGNvbm5lY3QgdG8gdGhlIHVzZWQgQ09NIHBvcnQgd2l0aCB0aGUgZm9sbG93aW5nIFVBUlQgc2V0dGluZ3M6CisgICAgLSBCYXVkIHJhdGU6IDExNTIwMAorICAgIC0gOCBkYXRhIGJpdHMKKyAgICAtIDEgc3RvcCBiaXQKKyAgICAtIE5vIHBhcml0eQorICAgIC0gTm8gZmxvdyBjb250cm9sCisKKzMuIE9wZW4gYSB0ZXJtaW5hbCBjb25uZWN0aW9uIG9uIHRoZSBmaXJzdCBib2FyZCBhbmQgc3RhcnQgYSBuZXcgVGhyZWFkIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBwYW5pZCAweGFiY2QKKyBEb25lCisgPiBpZmNvbmZpZyB1cAorIERvbmUKKyA+IHRocmVhZCBzdGFydAorIERvbmUKKyBgYGAKKworNC4gQWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0aGUgbm9kZSB3aWxsIGJlY29tZSBhIExlYWRlciBvZiB0aGUgbmV0d29yay4KKworIGBgYGJhc2gKKyA+IHN0YXRlCisgTGVhZGVyCisgYGBgCisKKzUuIE9wZW4gYSB0ZXJtaW5hbCBjb25uZWN0aW9uIG9uIHRoZSBzZWNvbmQgYm9hcmQgYW5kIGF0dGFjaCBhIG5vZGUgdG8gdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBwYW5pZCAweGFiY2QKKyBEb25lCisgPiBpZmNvbmZpZyB1cAorIERvbmUKKyA+IHRocmVhZCBzdGFydAorIERvbmUKKyBgYGAKKworNi4gQWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyB0aGUgc2Vjb25kIG5vZGUgd2lsbCBhdHRhY2ggYW5kIGJlY29tZSBhIENoaWxkLgorCisgYGBgYmFzaAorID4gc3RhdGUKKyBDaGlsZAorIGBgYAorCis3LiBMaXN0IGFsbCBJUHY2IGFkZHJlc3NlcyBvZiB0aGUgZmlyc3QgYm9hcmQuCisKKyBgYGBiYXNoCisgPiBpcGFkZHIKKyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCisgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6OWMwMAorIGZkZGU6YWQwMDpiZWVmOjA6NGJjYjo3M2E1OjdjMjg6MzE4ZQorIGZlODA6MDowOjA6NWM5MTpjNjE6YjY3YzoyNzFjCisgYGBgCisKKzguIENob29zZSBvbmUgb2YgdGhlbSBhbmQgc2VuZCBhbiBJQ01QdjYgcGluZyBmcm9tIHRoZSBzZWNvbmQgYm9hcmQuCisKKyBgYGBiYXNoCisgPiBwaW5nIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOmZjMDAKKyAxNiBieXRlcyBmcm9tIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOmZjMDA6IGljbXBfc2VxPTEgaGxpbT02NCB0aW1lPThtcworIGBgYAorCitGb3IgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgY29tbWFuZHMsIHZpc2l0IFtPcGVuVGhyZWFkIENMSSBSZWZlcmVuY2UgUkVBRE1FLm1kXVtDTEldLgorCitbQ0xJXTogaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC9ibG9iL21hc3Rlci9zcmMvY2xpL1JFQURNRS5tZApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY2MGJmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2FsYXJtLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBhbGFybS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiZnNsX2Nsb2NrLmgiCisjaW5jbHVkZSAiZnNsX3BpdC5oIgorCisjaW5jbHVkZSAib3BlbnRocmVhZC9vcGVudGhyZWFkLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL2RpYWcuaCIKKworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNUaW1lICAgICAgPSAwOworc3RhdGljIHVpbnQzMl90ICAgICAgICAgIHNBbGFybVRpbWUgPSAwOworCit2b2lkIGt3NDF6QWxhcm1Jbml0KHZvaWQpCit7CisgICAgcGl0X2NvbmZpZ190IGNvbmZpZzsKKyAgICB1aW50MzJfdCBjb3VudCA9IChDTE9DS19HZXRCdXNDbGtGcmVxKCkgLyAxMDAwKSAtIDE7CisKKyAgICBQSVRfR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAgICBQSVRfSW5pdChQSVQsICZjb25maWcpOworICAgIFBJVF9TZXRUaW1lclBlcmlvZChQSVQsIGtQSVRfQ2hubF8wLCBjb3VudCk7CisgICAgUElUX1N0YXJ0VGltZXIoUElULCBrUElUX0NobmxfMCk7CisKKyAgICBQSVRfRW5hYmxlSW50ZXJydXB0cyhQSVQsIGtQSVRfQ2hubF8wLCBrUElUX1RpbWVySW50ZXJydXB0RW5hYmxlKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShQSVRfSVJRbik7CisgICAgTlZJQ19FbmFibGVJUlEoUElUX0lSUW4pOworfQorCit2b2lkIGt3NDF6QWxhcm1Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoKHNBbGFybVRpbWUgIT0gMCkgJiYgKHNUaW1lID49IHNBbGFybVRpbWUpKQorICAgIHsKKyAgICAgICAgc0FsYXJtVGltZSA9IDA7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnQWxhcm1GaXJlZChhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVQwLCB1aW50MzJfdCBhRHQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHNBbGFybVRpbWUgPSBhVDAgKyBhRHQ7Cit9CisKK3ZvaWQgb3RQbGF0QWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc0FsYXJtVGltZSA9IDA7Cit9CisKK3VpbnQzMl90IG90UGxhdEFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgcmV0dXJuIHNUaW1lOworfQorCit2b2lkIFBJVF9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgUElUX0NsZWFyU3RhdHVzRmxhZ3MoUElULCBrUElUX0NobmxfMCwga1BJVF9UaW1lckZsYWcpOworICAgIHNUaW1lKys7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovZGlhZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2RpYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODY0OGVmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2RpYWcuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgZGlhZ25vc3RpY3MuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9vcGVudGhyZWFkLmgiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oIgorCisvKioKKyAqIERpYWdub3N0aWNzIG1vZGUgdmFyaWFibGVzLgorICoKKyAqLworc3RhdGljIGJvb2wgc0RpYWdNb2RlID0gZmFsc2U7CisKK3ZvaWQgb3RQbGF0RGlhZ1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICAvLyBBZGQgbW9yZSBwbGFyZm9ybSBzcGVjaWZpYyBkaWFnbm9zdGljcyBmZWF0dXJlcyBoZXJlLgorICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJkaWFnIGZlYXR1cmUgJyVzJyBpcyBub3Qgc3VwcG9ydGVkXHJcbiIsIGFyZ3ZbMF0pOworICAgICh2b2lkKSBhcmdjOworICAgICh2b2lkKSBhSW5zdGFuY2U7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ01vZGVTZXQoYm9vbCBhTW9kZSkKK3sKKyAgICBzRGlhZ01vZGUgPSBhTW9kZTsKK30KKworYm9vbCBvdFBsYXREaWFnTW9kZUdldCgpCit7CisgICAgcmV0dXJuIHNEaWFnTW9kZTsKK30KKwordm9pZCBvdFBsYXREaWFnQ2hhbm5lbFNldCh1aW50OF90IGFDaGFubmVsKQoreworICAgICh2b2lkKSBhQ2hhbm5lbDsKK30KKwordm9pZCBvdFBsYXREaWFnVHhQb3dlclNldChpbnQ4X3QgYVR4UG93ZXIpCit7CisgICAgKHZvaWQpIGFUeFBvd2VyOworfQorCit2b2lkIG90UGxhdERpYWdSYWRpb1JlY2VpdmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgKHZvaWQpIGFGcmFtZTsKKyAgICAodm9pZCkgYUVycm9yOworfQorCit2b2lkIG90UGxhdERpYWdBbGFybUNhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWU4ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L2ZsYXNoLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF9mbGFzaC5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaCIKKyNpbmNsdWRlIDx1dGlscy9mbGFzaC5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKworc3RhdGljIGZsYXNoX2NvbmZpZ190IHNGbGFzaENvbmZpZzsKKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKEZMQVNIX0luaXQoJnNGbGFzaENvbmZpZykgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQ7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRTsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgc3RhdHVzID0gRkxBU0hfRXJhc2UoJnNGbGFzaENvbmZpZywgYUFkZHJlc3MsIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19TRUNUT1JfU0laRSwga0ZMQVNIX0FwaUVyYXNlS2V5KTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0dXMgPT0ga1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvcikKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisgICAgdWludDMyX3Qgc3RhcnQgPSBvdFBsYXRBbGFybUdldE5vdygpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChGVEZBLT5GU1RBVCAmIEZURkFfRlNUQVRfQ0NJRl9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoYVRpbWVvdXQgJiYgKChvdFBsYXRBbGFybUdldE5vdygpIC0gc3RhcnQpIDwgYVRpbWVvdXQpKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgaWYgKEZMQVNIX1Byb2dyYW0oJnNGbGFzaENvbmZpZywgYUFkZHJlc3MsICh1aW50MzJfdCAqKWFEYXRhLCBhU2l6ZSkgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgYVNpemUgPSAwOworICAgIH0KKworICAgIHJldHVybiBhU2l6ZTsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFJlYWQodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICBtZW1jcHkoYURhdGEsICh1aW50OF90ICopYUFkZHJlc3MsIGFTaXplKTsKKworICAgIHJldHVybiBhU2l6ZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9sb2dnaW5nLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovbG9nZ2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlN2MzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovbG9nZ2luZy5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIGxvZ2dpbmcuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oIgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSV9MT0dHSU5HCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisjaW5jbHVkZSA8Y2xpL2NsaS11YXJ0Lmg+CisjZW5kaWYKKwordm9pZCBvdFBsYXRMb2cob3RMb2dMZXZlbCBhTG9nTGV2ZWwsIG90TG9nUmVnaW9uIGFMb2dSZWdpb24sIGNvbnN0IGNoYXIgKmFGb3JtYXQsIC4uLikKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DTElfTE9HR0lORworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKyAgICBvdENsaUxvZyhhTG9nTGV2ZWwsIGFMb2dSZWdpb24sIGFGb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyNlbHNlCisgICAgKHZvaWQpYUxvZ0xldmVsOworICAgICh2b2lkKWFMb2dSZWdpb247CisgICAgKHZvaWQpYUZvcm1hdDsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DTElfTE9HR0lORworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1MTkyZQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9taXNjLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oIgorCit2b2lkIG90UGxhdFJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgTlZJQ19TeXN0ZW1SZXNldCgpOworCisgICAgd2hpbGUgKDEpIHt9Cit9CisKK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgb3RQbGF0UmVzZXRSZWFzb24gcmVhc29uOworCisgICAgaWYgKFJDTS0+U1JTMCAmIFJDTV9TUlMwX1BPUl9NQVNLKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047CisgICAgfQorICAgIGVsc2UgaWYgKFJDTS0+U1JTMSAmIFJDTV9TUlMxX1NXX01BU0spCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9TT0ZUV0FSRTsKKyAgICB9CisgICAgZWxzZSBpZiAoUkNNLT5TUlMwICYgUkNNX1NSUzBfV0RPR19NQVNLKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fV0FUQ0hET0c7CisgICAgfQorICAgIGVsc2UgaWYgKFJDTS0+U1JTMCAmIFJDTV9TUlMwX1BJTl9NQVNLKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fRVhURVJOQUw7CisgICAgfQorICAgIGVsc2UgaWYgKChSQ00tPlNSUzAgJiBSQ01fU1JTMF9MT0NfTUFTSykgICAgIHx8CisgICAgICAgICAgICAgKFJDTS0+U1JTMSAmIFJDTV9TUlMxX1NBQ0tFUlJfTUFTSykgfHwKKyAgICAgICAgICAgICAoUkNNLT5TUlMxICYgUkNNX1NSUzFfTE9DS1VQX01BU0spKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fRkFVTFQ7CisgICAgfQorICAgIGVsc2UgaWYgKChSQ00tPlNSUzAgJiBSQ01fU1JTMF9XQUtFVVBfTUFTSykgIHx8CisgICAgICAgICAgICAgKFJDTS0+U1JTMCAmIFJDTV9TUlMwX0xWRF9NQVNLKSAgICAgfHwKKyAgICAgICAgICAgICAoUkNNLT5TUlMxICYgUkNNX1NSUzFfTURNX0FQX01BU0spKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fQVNTRVJUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9PVEhFUjsKKyAgICB9CisKKyAgICByZXR1cm4gcmVhc29uOworfQorCit2b2lkIG90UGxhdEFzc2VydEZhaWwoY29uc3QgY2hhciAqYUZpbGVuYW1lLCBpbnQgYUxpbmVOdW1iZXIpCit7CisgICAgKHZvaWQpYUZpbGVuYW1lOworICAgICh2b2lkKWFMaW5lTnVtYmVyOworfQorCit2b2lkIG90UGxhdFdha2VIb3N0KHZvaWQpCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50IGFuIG9wZXJhdGlvbiB0byB3YWtlIHRoZSBob3N0IGZyb20gc2xlZXAgc3RhdGUuCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovb3BlbnRocmVhZC1jb3JlLWt3NDF6LWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L29wZW50aHJlYWQtY29yZS1rdzQxei1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODAxYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L29wZW50aHJlYWQtY29yZS1rdzQxei1jb25maWcuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBrdzQxeiBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBjb25zdGFudHMKKyAqICAgZm9yIE9wZW5UaHJlYWQuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPUkVfS1c0MVpfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9LVzQxWl9DT05GSUdfSF8KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyAqCisgKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUICAgICAgICAgICAgIDEKKworLyoqCisgKiBAZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyAqCisgKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAKKworLyoqCisgKiBAZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkUKKyAqCisgKiBUaGUgcGFnZSBzaXplIG9mIHNldHRpbmdzLgorICoKKyAqLworI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0KKyAqCisgKiBUaGUgcGFnZSBudW1iZXIgb2Ygc2V0dGluZ3MuCisgKgorICovCisjZGVmaW5lIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvKioKKyAqIEBkZWYgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FTlRSWV9OVU0KKyAqCisgKiBUaGUgbnVtYmVyIG9mIHNvdXJjZSBhZGRyZXNzIHRhYmxlIGVudHJpZXMuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNICAgICAgICAgICAgICAgICAgICAgICAgMTI4CisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4KKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQgICAgICAgICAgICAxCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT1JFX0tXNDFaX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3BsYXRmb3JtLWt3NDF6LmggYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovcGxhdGZvcm0ta3c0MXouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU2ODI1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3BsYXRmb3JtLWt3NDF6LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9LVzQxWl9IXworI2RlZmluZSBQTEFURk9STV9LVzQxWl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBrdzQxekFsYXJtSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFsYXJtIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBrdzQxekFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhZGlvIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBrdzQxelJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBrdzQxelJhZGlvUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhbmRvbSBudW1iZXIgc2VydmljZSB1c2VkIGJ5IE9wZW5UaHJlYWQuCisgKgorICovCit2b2lkIGt3NDF6UmFuZG9tSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIFVBUlQgZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIGt3NDF6VWFydFByb2Nlc3Modm9pZCk7CisjZW5kaWYgIC8vIFBMQVRGT1JNX0tXNDFaX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovcGxhdGZvcm0uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDc5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovcGxhdGZvcm0uYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oIgorI2luY2x1ZGUgInBsYXRmb3JtLWt3NDF6LmgiCisjaW5jbHVkZSAiZnNsX2Nsb2NrLmgiCisjaW5jbHVkZSAiZnNsX3BvcnQuaCIKKyNpbmNsdWRlICJjbG9ja19jb25maWcuaCIKKworb3RJbnN0YW5jZSAqc0luc3RhbmNlOworCit2b2lkIFBsYXRmb3JtSW5pdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHVpbnQzMl90IHRlbXAsIHRlbXBUcmltOworICAgIHVpbnQ4X3QgcmV2SWQ7CisKKyAgICAvKiBlbmFibGUgY2xvY2sgZm9yIFBPUlRzICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soa0NMT0NLX1BvcnRBKTsKKyAgICBDTE9DS19FbmFibGVDbG9jayhrQ0xPQ0tfUG9ydEIpOworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19Qb3J0Qyk7CisKKyAgICBTSU0tPlNDR0M2IHw9IChTSU1fU0NHQzZfRE1BTVVYX01BU0spOyAvKiBFbmFibGUgY2xvY2sgdG8gRE1BX01VWCAoU0lNIG1vZHVsZSkgKi8KKyAgICBTSU0tPlNDR0M3IHw9IChTSU1fU0NHQzdfRE1BX01BU0spOworCisgICAgLyogT2J0YWluIFJFViBJRCBmcm9tIFNJTSAqLworICAgIHJldklkID0gKHVpbnQ4X3QpKChTSU0tPlNESUQgJiBTSU1fU0RJRF9SRVZJRF9NQVNLKSA+PiBTSU1fU0RJRF9SRVZJRF9TSElGVCk7CisKKyAgICBpZiAocmV2SWQgPT0gMCkKKyAgICB7CisgICAgICAgIHRlbXBUcmltID0gUlNJTS0+QU5BX1RSSU07CisgICAgICAgIFJTSU0tPkFOQV9UUklNIHw9IFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU1fTUFTSzsgLyogbWF4IHRyaW0gZm9yIEJCIExETyBmb3IgWE8gKi8KKyAgICB9CisKKyAgICAvKiBUdXJuIG9uIGNsb2NrcyBmb3IgdGhlIFhDVlIgKi8KKyAgICAvKiBFbmFibGUgUkYgT1NDIGluIFJTSU0gYW5kIHdhaXQgZm9yIHJlYWR5ICovCisgICAgdGVtcCA9IFJTSU0tPkNPTlRST0w7CisgICAgdGVtcCAmPSB+UlNJTV9DT05UUk9MX1JGX09TQ19FTl9NQVNLOworICAgIFJTSU0tPkNPTlRST0wgPSB0ZW1wIHwgUlNJTV9DT05UUk9MX1JGX09TQ19FTigxKTsKKyAgICAvKiBQcmV2ZW50IFhUQUxfT1VUX0VOIGZyb20gZ2VuZXJhdGluZyBYVEFMX09VVCByZXF1ZXN0ICovCisgICAgUlNJTS0+UkZfT1NDX0NUUkwgfD0gUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfRU5fTUFTSzsKKworICAgIC8qIHdhaXQgZm9yIFJGX09TQ19SRUFEWSAqLworICAgIHdoaWxlICgoUlNJTS0+Q09OVFJPTCAmIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfTUFTSykgPT0gMCkge30KKworICAgIGlmIChyZXZJZCA9PSAwKQorICAgIHsKKyAgICAgICAgU0lNLT5TQ0dDNSB8PSBTSU1fU0NHQzVfUEhZRElHX01BU0s7CisgICAgICAgIFhDVlJfVFNNLT5PVlJEMCB8PSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfRU5fTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfTUFTSzsgLyogRm9yY2UgQURDIERBQyBMRE8gb24gdG8gcHJldmVudCBCR0FQIGZhaWx1cmUgKi8KKyAgICAgICAgLyogUmVzZXQgTERPIHRyaW0gc2V0dGluZ3MgKi8KKyAgICAgICAgUlNJTS0+QU5BX1RSSU0gPSB0ZW1wVHJpbTsKKyAgICB9LyogV29ya2Fyb3VuZCBmb3IgUmV2IDEuMCBYVEFMIHN0YXJ0dXAgYW5kIEFEQyBhbmFsb2cgZGlhZ25vc3RpY3MgY2lyY3VpdHJ5ICovCisKKyAgICAvKiBJbml0IGJvYXJkIGNsb2NrICovCisgICAgQk9BUkRfQm9vdENsb2NrUlVOKCk7CisKKyAgICBrdzQxekFsYXJtSW5pdCgpOworICAgIGt3NDF6UmFuZG9tSW5pdCgpOworICAgIGt3NDF6UmFkaW9Jbml0KCk7CisKKyAgICBvdFBsYXRVYXJ0RW5hYmxlKCk7CisKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7Cit9CisKK3ZvaWQgUGxhdGZvcm1EZWluaXQodm9pZCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzSW5zdGFuY2UgPSBhSW5zdGFuY2U7CisgICAga3c0MXpVYXJ0UHJvY2VzcygpOworICAgIGt3NDF6UmFkaW9Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAga3c0MXpBbGFybVByb2Nlc3MoYUluc3RhbmNlKTsKK30KKwordm9pZCBOTUlfSGFuZGxlcih2b2lkKQoreworICAgIC8qIENoYW5nZSBOTUkgUGluIE1VWCAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19Qb3J0Qik7CisgICAgUE9SVF9TZXRQaW5NdXgoUE9SVEIsIDE4LCBrUE9SVF9NdXhBbHQyKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYWRpby5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3JhZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNhMTU2MwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYWRpby5jCkBAIC0wLDAgKzEsOTUwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciByYWRpbyBjb21tdW5pY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUta3c0MXotY29uZmlnLmgiCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmgiCisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjZGVmaW5lIERPVUJMRV9CVUZGRVJJTkcgICAgICAgICAgICAgKDEpCisjZGVmaW5lIERFRkFVTFRfQ0hBTk5FTCAgICAgICAgICAgICAgKDExKQorI2RlZmluZSBERUZBVUxUX0NDQV9NT0RFICAgICAgICAgICAgIChYQ1ZSX0NDQV9NT0RFMV9jKQorI2RlZmluZSBJRUVFODAyMTU0X0FDS19SRVFVRVNUICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElFRUU4MDIxNTRfTUFYX0xFTkdUSCAgICAgICAgKDEyNykKKyNkZWZpbmUgSUVFRTgwMjE1NF9NSU5fTEVOR1RIICAgICAgICAoNSkKKyNkZWZpbmUgSUVFRTgwMjE1NF9BQ0tfTEVOR1RIICAgICAgICAoSUVFRTgwMjE1NF9NSU5fTEVOR1RIKQorI2RlZmluZSBJRUVFODAyMTU0X0ZSTV9DVExfTE9fT0ZGU0VUICgwKQorI2RlZmluZSBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICgyKQorI2RlZmluZSBJRUVFODAyMTU0X0ZSTV9UWVBFX01BU0sgICAgICgweDcpCisjZGVmaW5lIElFRUU4MDIxNTRfRlJNX1RZUEVfQUNLICAgICAgKDB4MikKKyNkZWZpbmUgSUVFRTgwMjE1NF9UVVJOQVJPVU5EX0xFTiAgICAoMTIpCisjZGVmaW5lIElFRUU4MDIxNTRfQ0NBX0xFTiAgICAgICAgICAgKDgpCisjZGVmaW5lIElFRUU4MDIxNTRfUEhZX1NIUl9MRU4gICAgICAgKDEwKQorI2RlZmluZSBJRUVFODAyMTU0X0FDS19XQUlUICAgICAgICAgICg1NCkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVJfQUxMX01TS19NQVNLICAoWkxMX0lSUVNUU19UTVIxTVNLX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9JUlFTVFNfVE1SMk1TS19NQVNLIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTExfSVJRU1RTX1RNUjNNU0tfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX0lSUVNUU19UTVI0TVNLX01BU0sgKQorCit0eXBlZGVmIGVudW0geGN2cl9zdGF0ZV90YWcKK3sKKyAgICBYQ1ZSX0lkbGVfYywKKyAgICBYQ1ZSX1JYX2MsCisgICAgWENWUl9UWF9jLAorICAgIFhDVlJfQ0NBX2MsCisgICAgWENWUl9UUl9jLAorICAgIFhDVlJfQ0NDQV9jLAorfSB4Y3ZyX3N0YXRlX3Q7CisKK3R5cGVkZWYgZW51bSB4Y3ZyX2NjYV90eXBlX3RhZworeworICAgIFhDVlJfRURfYywgICAgICAgICAgICAvKiBlbmVyZ3kgZGV0ZWN0IC0gQ0NBIGJpdCBub3QgYWN0aXZlLCBub3QgdG8gYmUgdXNlZCBmb3IgVCBhbmQgQ0NDQSBzZXF1ZW5jZXMgKi8KKyAgICBYQ1ZSX0NDQV9NT0RFMV9jLCAgICAgLyogZW5lcmd5IGRldGVjdCAtIENDQSBiaXQgQUNUSVZFICovCisgICAgU0NWUl9DQ0FfTU9ERTJfYywgICAgIC8qIDgwMi4xNS40IGNvbXBsaWFudCBzaWduYWwgZGV0ZWN0IC0gQ0NBIGJpdCBBQ1RJVkUgKi8KKyAgICBYQ1ZSX0NDQV9NT0RFM19jICAgICAgLyogODAyLjE1LjQgY29tcGxpYW50IHNpZ25hbCBkZXRlY3QgYW5kIGVuZXJneSBkZXRlY3QgLSBDQ0EgYml0IEFDVElWRSAqLworfSB4Y3ZyX2NjYV90eXBlX3Q7CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworc3RhdGljIHVpbnQxNl90ICAgICAgc1BhbklkOworc3RhdGljIHVpbnQ4X3QgICAgICAgc0V4dFNyY0FkZHJCaXRtYXBbKFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNICsgNykgLyA4XTsKK3N0YXRpYyB1aW50OF90ICAgICAgIHNDaGFubmVsOworc3RhdGljIGludDhfdCAgICAgICAgc01heEVEOworc3RhdGljIGludDhfdCAgICAgICAgc0F1dG9UeFB3ckxldmVsID0gMDsKKworLyogSVNSIFNpZ25hbGluZyBGbGFncyAqLworc3RhdGljIGJvb2wgICAgICAgICAgc1R4RG9uZSAgICAgPSBmYWxzZTsKK3N0YXRpYyBib29sICAgICAgICAgIHNSeERvbmUgICAgID0gZmFsc2U7CitzdGF0aWMgYm9vbCAgICAgICAgICBzRWRTY2FuRG9uZSA9IGZhbHNlOworc3RhdGljIG90RXJyb3IgICAgICAgc1R4U3RhdHVzOworCitzdGF0aWMgb3RSYWRpb0ZyYW1lICBzVHhGcmFtZTsKK3N0YXRpYyBvdFJhZGlvRnJhbWUgIHNSeEZyYW1lOworI2lmIERPVUJMRV9CVUZGRVJJTkcKK3N0YXRpYyB1aW50OF90ICAgICAgIHNSeERhdGFbT1RfUkFESU9fRlJBTUVfTUFYX1NJWkVdOworI2VuZGlmCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCAgICAgICAgIHJmX2Fib3J0KHZvaWQpOworc3RhdGljIHhjdnJfc3RhdGVfdCByZl9nZXRfc3RhdGUodm9pZCk7CitzdGF0aWMgdm9pZCAgICAgICAgIHJmX3NldF9jaGFubmVsKHVpbnQ4X3QgY2hhbm5lbCk7CitzdGF0aWMgdm9pZCAgICAgICAgIHJmX3NldF90eF9wb3dlcihpbnQ4X3QgdHhfcG93ZXIpOworc3RhdGljIHVpbnQ4X3QgICAgICByZl9scWlfYWRqdXN0KHVpbnQ4X3QgaHdMcWkpOworc3RhdGljIGludDhfdCAgICAgICByZl9scWlfdG9fcnNzaSh1aW50OF90IGxxaSk7CitzdGF0aWMgdWludDMyX3QgICAgIHJmX2dldF90aW1lc3RhbXAodm9pZCk7CitzdGF0aWMgdm9pZCAgICAgICAgIHJmX3NldF90aW1lb3V0KHVpbnQzMl90IGFic190aW1lb3V0KTsKK3N0YXRpYyB1aW50MTZfdCAgICAgcmZfZ2V0X2FkZHJfY2hlY2tzdW0odWludDhfdCAqcEFkZHIsIGJvb2wgRXh0ZW5kZWRBZGRyLCB1aW50MTZfdCBQYW5JZCk7CitzdGF0aWMgb3RFcnJvciAgICAgIHJmX2FkZF9hZGRyX3RhYmxlX2VudHJ5KHVpbnQxNl90IGNoZWNrc3VtLCBib29sIGV4dGVuZGVkQWRkcik7CitzdGF0aWMgb3RFcnJvciAgICAgIHJmX3JlbW92ZV9hZGRyX3RhYmxlX2VudHJ5KHVpbnQxNl90IGNoZWNrc3VtKTsKK3N0YXRpYyBvdEVycm9yICAgICAgcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgodWludDhfdCBpbmRleCk7CitzdGF0aWMgYm9vbCAgICAgICAgIHJmX3Byb2Nlc3NfcnhfZnJhbWUodm9pZCk7CisKK290UmFkaW9TdGF0ZSBvdFBsYXRSYWRpb0dldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIHNTdGF0ZTsKK30KKwordm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFJZWVlRXVpNjQpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHVpbnQzMl90IGFkZHJMbzsKKyAgICB1aW50MzJfdCBhZGRySGk7CisKKyAgICBpZiAoKFJTSU0tPk1BQ19MU0IgPT0gMHhmZmZmZmZmZikgJiYgKFJTSU0tPk1BQ19NU0IgPT0gMHhmZikpCisgICAgeworICAgICAgICBhZGRyTG8gPSBTSU0tPlVJREw7CisgICAgICAgIGFkZHJIaSA9IFNJTS0+VUlETUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFkZHJMbyA9IFJTSU0tPk1BQ19MU0I7CisgICAgICAgIGFkZHJIaSA9IFJTSU0tPk1BQ19NU0I7CisgICAgfQorCisgICAgbWVtY3B5KGFJZWVlRXVpNjQsICZhZGRyTG8sIHNpemVvZihhZGRyTG8pKTsKKyAgICBtZW1jcHkoYUllZWVFdWk2NCArIHNpemVvZihhZGRyTG8pLCAmYWRkckhpLCBzaXplb2YoYWRkckhpKSk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgc1BhbklkID0gYVBhbklkOworICAgIFpMTC0+TUFDU0hPUlRBRERSUzAgJj0gflpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDBfTUFTSzsKKyAgICBaTEwtPk1BQ1NIT1JUQUREUlMwIHw9IFpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDAoYVBhbklkKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFFeHRlbmRlZEFkZHJlc3MpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCBhZGRyTG87CisgICAgdWludDMyX3QgYWRkckhpOworCisgICAgbWVtY3B5KCZhZGRyTG8sIGFFeHRlbmRlZEFkZHJlc3MsIHNpemVvZihhZGRyTG8pKTsKKyAgICBtZW1jcHkoJmFkZHJIaSwgYUV4dGVuZGVkQWRkcmVzcyArIHNpemVvZihhZGRyTG8pLCBzaXplb2YoYWRkckhpKSk7CisKKyAgICBaTEwtPk1BQ0xPTkdBRERSUzBfTFNCID0gYWRkckxvOworICAgIFpMTC0+TUFDTE9OR0FERFJTMF9NU0IgPSBhZGRySGk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBaTEwtPk1BQ1NIT1JUQUREUlMwICY9IH5aTExfTUFDU0hPUlRBRERSUzBfTUFDU0hPUlRBRERSUzBfTUFTSzsKKyAgICBaTEwtPk1BQ1NIT1JUQUREUlMwIHw9IFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMChhU2hvcnRBZGRyZXNzKTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFWFBFQ1QoIW90UGxhdFJhZGlvSXNFbmFibGVkKGFJbnN0YW5jZSkpOworCisgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1RSQ1ZfTVNLX01BU0s7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUmFkaW9fMV9JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShSYWRpb18xX0lSUW4pOworCisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisKK2V4aXQ6CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9EaXNhYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVYUEVDVChvdFBsYXRSYWRpb0lzRW5hYmxlZChhSW5zdGFuY2UpKTsKKworICAgIE5WSUNfRGlzYWJsZUlSUShSYWRpb18xX0lSUW4pOworICAgIHJmX2Fib3J0KCk7CisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9Jc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgcmV0dXJuIHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9ESVNBQkxFRDsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIHN0YXR1cyA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RVhQRUNUX0FDVElPTigoKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpKSwgc3RhdHVzID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICByZl9hYm9ydCgpOworICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworCitleGl0OgorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9SZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdEVycm9yIHN0YXR1cyA9IE9UX0VSUk9SX05PTkU7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RVhQRUNUX0FDVElPTigoKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpKSwgc3RhdHVzID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworCisgICAgb3RFWFBFQ1QocmZfZ2V0X3N0YXRlKCkgIT0gWENWUl9SWF9jKTsKKworICAgIHJmX2Fib3J0KCk7CisKKyAgICAvKiBTZXQgUG93ZXIgbGV2ZWwgZm9yIGF1dG8gVFggKi8KKyAgICByZl9zZXRfdHhfcG93ZXIoc0F1dG9UeFB3ckxldmVsKTsKKyAgICByZl9zZXRfY2hhbm5lbChhQ2hhbm5lbCk7CisgICAgc1J4RnJhbWUubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgIC8qIENsZWFyIGFsbCBJUlEgZmxhZ3MgKi8KKyAgICBaTEwtPklSUVNUUyA9IFpMTC0+SVJRU1RTOworICAgIC8qIFN0YXJ0IHRoZSBSWCBzZXF1ZW5jZSAqLworICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9SWF9jIDsKKworICAgIC8qIFVubWFzayBTRVEgaW50ZXJydXB0ICovCisgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworCitleGl0OgorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgaWYgKGFFbmFibGUpCisgICAgeworICAgICAgICBaTEwtPlNBTV9DVFJMIHw9IFpMTF9TQU1fQ1RSTF9TQVAwX0VOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFpMTC0+U0FNX0NUUkwgJj0gflpMTF9TQU1fQ1RSTF9TQVAwX0VOX01BU0s7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gc1BhbklkICsgYVNob3J0QWRkcmVzczsKKworICAgIHJldHVybiByZl9hZGRfYWRkcl90YWJsZV9lbnRyeShjaGVja3N1bSwgZmFsc2UpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSByZl9nZXRfYWRkcl9jaGVja3N1bSgodWludDhfdCAqKWFFeHRBZGRyZXNzLCB0cnVlLCBzUGFuSWQpOworCisgICAgcmV0dXJuIHJmX2FkZF9hZGRyX3RhYmxlX2VudHJ5KGNoZWNrc3VtLCB0cnVlKTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gc1BhbklkICsgYVNob3J0QWRkcmVzczsKKworICAgIHJldHVybiByZl9yZW1vdmVfYWRkcl90YWJsZV9lbnRyeShjaGVja3N1bSk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQxNl90IGNoZWNrc3VtID0gcmZfZ2V0X2FkZHJfY2hlY2tzdW0oKHVpbnQ4X3QgKilhRXh0QWRkcmVzcywgdHJ1ZSwgc1BhbklkKTsKKworICAgIHJldHVybiByZl9yZW1vdmVfYWRkcl90YWJsZV9lbnRyeShjaGVja3N1bSk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FTlRSWV9OVU07IGkrKykKKyAgICB7CisgICAgICAgIC8qIE9wdGltaXphdGlvbjogc0V4dFNyY0FkZHJCaXRtYXBbaSAvIDhdICYgKDEgPDwgKGkgJSA4KSkgKi8KKyAgICAgICAgaWYgKCEoc0V4dFNyY0FkZHJCaXRtYXBbaSA+PiAzXSAmICgxIDw8IChpICYgNykpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNOyBpKyspCisgICAgeworICAgICAgICAvKiBPcHRpbWl6YXRpb246IHNFeHRTcmNBZGRyQml0bWFwW2kgLyA4XSAmICgxIDw8IChpICUgOCkpKi8KKyAgICAgICAgaWYgKHNFeHRTcmNBZGRyQml0bWFwW2kgPj4gM10gJiAoMSA8PCAoaSAmIDcpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290UmFkaW9GcmFtZSAqb3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAmc1R4RnJhbWU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIG90RXJyb3Igc3RhdHVzID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCB0aW1lb3V0OworCisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RVhQRUNUX0FDVElPTigoKHNTdGF0ZSAhPSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpKSwgc3RhdHVzID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAocmZfZ2V0X3N0YXRlKCkgIT0gWENWUl9JZGxlX2MpCisgICAgeworICAgICAgICByZl9hYm9ydCgpOworICAgIH0KKworICAgIHJmX3NldF9jaGFubmVsKGFGcmFtZS0+bUNoYW5uZWwpOworICAgIHJmX3NldF90eF9wb3dlcihhRnJhbWUtPm1Qb3dlcik7CisKKyAgICAqKHVpbnQ4X3QgKilaTEwtPlBLVF9CVUZGRVJfVFggPSBhRnJhbWUtPm1MZW5ndGg7CisKKyAgICAvKiBTZXQgQ0NBIG1vZGUgKi8KKyAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfQ0NBVFlQRV9NQVNLOworICAgIFpMTC0+UEhZX0NUUkwgfD0gWkxMX1BIWV9DVFJMX0NDQVRZUEUoREVGQVVMVF9DQ0FfTU9ERSk7CisKKyAgICAvKiBDbGVhciBhbGwgSVJRIGZsYWdzICovCisgICAgWkxMLT5JUlFTVFMgPSBaTEwtPklSUVNUUzsKKworICAgIC8qIFBlcmZvcm0gYXV0b21hdGljIHJlY2VwdGlvbiBvZiBBQ0sgZnJhbWUsIGlmIHJlcXVpcmVkICovCisgICAgaWYgKGFGcmFtZS0+bVBzZHVbSUVFRTgwMjE1NF9GUk1fQ1RMX0xPX09GRlNFVF0gJiBJRUVFODAyMTU0X0FDS19SRVFVRVNUKQorICAgIHsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCB8PSBYQ1ZSX1RSX2M7CisgICAgICAgIC8qIFNldCBBQ0sgd2FpdCB0aW1lLW91dCAqLworICAgICAgICB0aW1lb3V0ICA9IHJmX2dldF90aW1lc3RhbXAoKTsKKyAgICAgICAgdGltZW91dCArPSAoKChYQ1ZSX1RTTS0+RU5EX09GX1NFUSAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVX01BU0spID4+CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9TSElGVCkgPj4gNCk7CisgICAgICAgIHRpbWVvdXQgKz0gSUVFRTgwMjE1NF9DQ0FfTEVOICsgSUVFRTgwMjE1NF9UVVJOQVJPVU5EX0xFTiArIElFRUU4MDIxNTRfUEhZX1NIUl9MRU4gKworICAgICAgICAgICAgICAgICAgICgxICsgYUZyYW1lLT5tTGVuZ3RoKSAqIE9UX1JBRElPX1NZTUJPTFNfUEVSX09DVEVUICsgSUVFRTgwMjE1NF9BQ0tfV0FJVDsKKyAgICAgICAgcmZfc2V0X3RpbWVvdXQodGltZW91dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9UWF9jOworICAgIH0KKworICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX05PTkU7CisgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQ7CisgICAgLyogVW5tYXNrIFNFUSBpbnRlcnJ1cHQgKi8KKyAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfU0VRTVNLX01BU0s7CisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKyAgICByZXR1cm4gKFpMTC0+TFFJX0FORF9SU1NJICYgWkxMX0xRSV9BTkRfUlNTSV9SU1NJX01BU0spID4+IFpMTF9MUUlfQU5EX1JTU0lfUlNTSV9TSElGVDsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQgfCBPVF9SQURJT19DQVBTX0VORVJHWV9TQ0FOOworfQorCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisgICAgcmV0dXJuIChaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1BST01JU0NVT1VTX01BU0spID09IFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19NQVNLOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIGlmIChhRW5hYmxlKQorICAgIHsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCB8PSBaTExfUEhZX0NUUkxfUFJPTUlTQ1VPVVNfTUFTSzsKKyAgICAgICAgLyogRlJNX1ZFUlsxMTo4XSA9IGIxMTExLiBBbnkgRnJhbWVWZXJzaW9uIGFjY2VwdGVkICovCisgICAgICAgIFpMTC0+UlhfRlJBTUVfRklMVEVSIHw9IChaTExfUlhfRlJBTUVfRklMVEVSX0ZSTV9WRVJfRklMVEVSX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ0tfRlRfTUFTSyAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9SWF9GUkFNRV9GSUxURVJfTlNfRlRfTUFTSyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19NQVNLOworICAgICAgICAvKiBGUk1fVkVSWzExOjhdID0gYjAwMTEuIEFjY2VwdCBGcmFtZVZlcnNpb24gMCBhbmQgMSBwYWNrZXRzLCByZWplY3QgYWxsIG90aGVycyAqLworICAgICAgICAvKiBCZWFjb24sIERhdGEgYW5kIE1BQyBjb21tYW5kIGZyYW1lIHR5cGVzIGFjY2VwdGVkICovCisgICAgICAgIFpMTC0+UlhfRlJBTUVfRklMVEVSICY9IH4oWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GUk1fVkVSX0ZJTFRFUl9NQVNLICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTExfUlhfRlJBTUVfRklMVEVSX0FDS19GVF9NQVNLICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9SWF9GUkFNRV9GSUxURVJfTlNfRlRfTUFTSyAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVNfTUFTSyk7CisgICAgICAgIFpMTC0+UlhfRlJBTUVfRklMVEVSIHw9IFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVIoMyk7CisgICAgfQorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgIG90RXJyb3Igc3RhdHVzID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCB0aW1lb3V0OworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oKChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQpICYmCisgICAgICAgICAgICAgICAgICAgICAoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKSksIHN0YXR1cyA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgaWYgKHJmX2dldF9zdGF0ZSgpICE9IFhDVlJfSWRsZV9jKQorICAgIHsKKyAgICAgICAgcmZfYWJvcnQoKTsKKyAgICB9CisKKyAgICBzTWF4RUQgPSAtMTI4OworICAgIHJmX3NldF9jaGFubmVsKGFTY2FuQ2hhbm5lbCk7CisgICAgLyogU2V0IENDQSB0eXBlIHRvIEVEIC0gRW5lcmd5IERldGVjdCAqLworICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9DQ0FUWVBFX01BU0s7CisgICAgWkxMLT5QSFlfQ1RSTCB8PSBaTExfUEhZX0NUUkxfQ0NBVFlQRShYQ1ZSX0VEX2MpOworICAgIC8qIENsZWFyIGFsbCBJUlEgZmxhZ3MgKi8KKyAgICBaTEwtPklSUVNUUyA9IFpMTC0+SVJRU1RTOworICAgIC8qIFN0YXJ0IEVEIHNlcXVlbmNlICovCisgICAgWkxMLT5QSFlfQ1RSTCB8PSBYQ1ZSX0NDQV9jOworICAgIC8qIFVubWFzayBTRVEgaW50ZXJydXB0ICovCisgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworICAgIC8qIFNldCBTY2FuIHRpbWUtb3V0ICovCisgICAgdGltZW91dCAgPSByZl9nZXRfdGltZXN0YW1wKCk7CisgICAgdGltZW91dCArPSAoYVNjYW5EdXJhdGlvbiAqIDEwMDApIC8gT1RfUkFESU9fU1lNQk9MX1RJTUU7CisgICAgcmZfc2V0X3RpbWVvdXQodGltZW91dCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldERlZmF1bHRUeFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQb3dlcikKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBzQXV0b1R4UHdyTGV2ZWwgPSBhUG93ZXI7Cit9CisKK2ludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgcmV0dXJuIC0xMDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCByZl9hYm9ydCh2b2lkKQoreworICAgIC8qIE1hc2sgU0VRIGludGVycnVwdCAqLworICAgIFpMTC0+UEhZX0NUUkwgfD0gWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworCisgICAgLyogRGlzYWJsZSB0aW1lciB0cmlnZ2VyIChmb3Igc2NoZWR1bGVkIFhDVlNFUSkgKi8KKyAgICBpZiAoWkxMLT5QSFlfQ1RSTCAmIFpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fTUFTSykKKyAgICB7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fTUFTSzsKKworICAgICAgICAvKiBnaXZlIHRoZSBGU00gZW5vdWdoIHRpbWUgdG8gc3RhcnQgaWYgaXQgd2FzIHRyaWdnZXJlZCAqLworICAgICAgICB3aGlsZSAoKFhDVlJfTUlTQy0+WENWUl9DVFJMICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9NQVNLKSA9PSAwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZiBYQ1ZSIGlzIG5vdCBpZGxlLCBhYm9ydCBjdXJyZW50IFNFUSAqLworICAgIGlmIChaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLKQorICAgIHsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLOworCisgICAgICAgIC8qIHdhaXQgZm9yIFNlcXVlbmNlIElkbGUgKGlmIG5vdCBhbHJlYWR5KSAqLworICAgICAgICB3aGlsZSAoWkxMLT5TRVFfU1RBVEUgJiBaTExfU0VRX1NUQVRFX1NFUV9TVEFURV9NQVNLKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTdG9wIHRpbWVycyAqLworICAgIFpMTC0+UEhZX0NUUkwgJj0gfihaTExfUEhZX0NUUkxfVE1SMkNNUF9FTl9NQVNLIHwgWkxMX1BIWV9DVFJMX1RNUjNDTVBfRU5fTUFTSyk7CisgICAgLyogQ2xlYXIgYWxsIFBQIElSUSBiaXRzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgaW50ZXJydXB0cyggZG8gbm90IGNoYW5nZSBUTVIxIGFuZCBUTVI0IElSUSBzdGF0dXMgKSAqLworICAgIFpMTC0+SVJRU1RTICY9IH4oWkxMX0lSUVNUU19UTVIxSVJRX01BU0sgfCBaTExfSVJRU1RTX1RNUjRJUlFfTUFTSyk7Cit9CisKK3N0YXRpYyB4Y3ZyX3N0YXRlX3QgcmZfZ2V0X3N0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuICh4Y3ZyX3N0YXRlX3QpKChaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLKSA+PiBaTExfUEhZX0NUUkxfWENWU0VRX1NISUZUKTsKK30KKworc3RhdGljIHZvaWQgcmZfc2V0X2NoYW5uZWwodWludDhfdCBjaGFubmVsKQoreworICAgIGlmIChzQ2hhbm5lbCAhPSBjaGFubmVsKQorICAgIHsKKyAgICAgICAgWkxMLT5DSEFOTkVMX05VTTAgPSBjaGFubmVsOworICAgICAgICBzQ2hhbm5lbCA9IGNoYW5uZWw7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZl9zZXRfdHhfcG93ZXIoaW50OF90IHR4X3Bvd2VyKQoreworICAgIGlmICh0eF9wb3dlciA+IDIpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDMwOworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IDEpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDI0OworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IC0xKQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSAxODsKKyAgICB9CisgICAgZWxzZSBpZiAodHhfcG93ZXIgPiAtMykKKyAgICB7CisgICAgICAgIFpMTC0+UEFfUFdSID0gMTQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR4X3Bvd2VyID4gLTQpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDEyOworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IC02KQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSAxMDsKKyAgICB9CisgICAgZWxzZSBpZiAodHhfcG93ZXIgPiAtOCkKKyAgICB7CisgICAgICAgIFpMTC0+UEFfUFdSID0gODsKKyAgICB9CisgICAgZWxzZSBpZiAodHhfcG93ZXIgPiAtMTEpCisgICAgeworICAgICAgICBaTEwtPlBBX1BXUiA9IDY7CisgICAgfQorICAgIGVsc2UgaWYgKHR4X3Bvd2VyID4gLTE0KQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSA0OworICAgIH0KKyAgICBlbHNlIGlmICh0eF9wb3dlciA+IC0yMCkKKyAgICB7CisgICAgICAgIFpMTC0+UEFfUFdSID0gMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWkxMLT5QQV9QV1IgPSAwOworICAgIH0KK30KKworc3RhdGljIHVpbnQxNl90IHJmX2dldF9hZGRyX2NoZWNrc3VtKHVpbnQ4X3QgKnBBZGRyLCBib29sIEV4dGVuZGVkQWRkciwgdWludDE2X3QgUGFuSWQpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW07CisKKyAgICAvKiBTaG9ydCBhZGRyZXNzICovCisgICAgY2hlY2tzdW0gID0gUGFuSWQ7CisgICAgY2hlY2tzdW0gKz0gKnBBZGRyKys7CisgICAgY2hlY2tzdW0gKz0gKHVpbnQxNl90KSgqcEFkZHIrKykgPDwgODsKKworICAgIGlmIChFeHRlbmRlZEFkZHIpCisgICAgeworICAgICAgICAvKiBFeHRlbmRlZCBhZGRyZXNzICovCisgICAgICAgIGNoZWNrc3VtICs9ICpwQWRkcisrOworICAgICAgICBjaGVja3N1bSArPSAoKHVpbnQxNl90KSgqcEFkZHIrKykpIDw8IDg7CisgICAgICAgIGNoZWNrc3VtICs9ICpwQWRkcisrOworICAgICAgICBjaGVja3N1bSArPSAoKHVpbnQxNl90KSgqcEFkZHIrKykpIDw8IDg7CisgICAgICAgIGNoZWNrc3VtICs9ICpwQWRkcisrOworICAgICAgICBjaGVja3N1bSArPSAoKHVpbnQxNl90KSgqcEFkZHIrKykpIDw8IDg7CisgICAgfQorCisgICAgcmV0dXJuIGNoZWNrc3VtOworfQorCitzdGF0aWMgb3RFcnJvciByZl9hZGRfYWRkcl90YWJsZV9lbnRyeSh1aW50MTZfdCBjaGVja3N1bSwgYm9vbCBleHRlbmRlZEFkZHIpCit7CisgICAgdWludDhfdCBpbmRleDsKKyAgICBvdEVycm9yIHN0YXR1czsKKworICAgIC8qIEZpbmQgZmlyc3QgZnJlZSBpbmRleCAqLworICAgIFpMTC0+U0FNX1RBQkxFID0gWkxMX1NBTV9UQUJMRV9GSU5EX0ZSRUVfSURYX01BU0s7CisKKyAgICB3aGlsZSAoWkxMLT5TQU1fVEFCTEUgJiBaTExfU0FNX1RBQkxFX1NBTV9CVVNZX01BU0spCisgICAgeworICAgIH0KKworICAgIGluZGV4ID0gKFpMTC0+U0FNX0ZSRUVfSURYICYgWkxMX1NBTV9GUkVFX0lEWF9TQVAwXzFTVF9GUkVFX0lEWF9NQVNLKSA+PiBaTExfU0FNX0ZSRUVfSURYX1NBUDBfMVNUX0ZSRUVfSURYX1NISUZUOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKChpbmRleCA8IFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNKSwgc3RhdHVzID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvKiBJbnNlcnQgdGhlIGNoZWNrc3VtIGF0IHRoZSBpbmRleCBmb3VuZCAqLworICAgIFpMTC0+U0FNX1RBQkxFID0gKCh1aW50MzJfdClpbmRleCA8PCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9TSElGVCkgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljaGVja3N1bSA8PCBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfV1JfTUFTSyB8IFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0VOX01BU0s7CisKKyAgICBpZiAoZXh0ZW5kZWRBZGRyKQorICAgIHsKKyAgICAgICAgLyogT3B0aW1pemF0aW9uOiBzRXh0U3JjQWRkckJpdG1hcFtpbmRleCAvIDhdIHw9IDEgPDwgKGluZGV4ICUgOCk7ICovCisgICAgICAgIHNFeHRTcmNBZGRyQml0bWFwW2luZGV4ID4+IDNdIHw9IDEgPDwgKGluZGV4ICYgNyk7CisgICAgfQorCisgICAgc3RhdHVzID0gT1RfRVJST1JfTk9ORTsKKworZXhpdDoKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgb3RFcnJvciByZl9yZW1vdmVfYWRkcl90YWJsZV9lbnRyeSh1aW50MTZfdCBjaGVja3N1bSkKK3sKKyAgICBvdEVycm9yIHN0YXR1cyA9IE9UX0VSUk9SX05PX0FERFJFU1M7CisgICAgdWludDMyX3QgaSwgdGVtcDsKKworICAgIC8qIFNlYXJjaCBmb3IgYW4gZW50cnkgdG8gbWF0Y2ggdGhlIHByb3ZpZGVkIGNoZWNrc3VtICovCisgICAgZm9yIChpID0gMDsgaSA8IFJBRElPX0NPTkZJR19TUkNfTUFUQ0hfRU5UUllfTlVNOyBpKyspCisgICAgeworICAgICAgICBaTEwtPlNBTV9UQUJMRSA9IGkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfU0hJRlQ7CisgICAgICAgIC8qIFJlYWQgY2hlY2tzdW0gbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ICovCisgICAgICAgIHRlbXAgPSAoWkxMLT5TQU1fVEFCTEUgJiBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9NQVNLKSA+PiBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVDsKKworICAgICAgICBpZiAodGVtcCA9PSBjaGVja3N1bSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJsZSAqLworICAgICAgICAgICAgc3RhdHVzID0gcmZfcmVtb3ZlX2FkZHJfdGFibGVfZW50cnlfaW5kZXgoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBvdEVycm9yIHJmX3JlbW92ZV9hZGRyX3RhYmxlX2VudHJ5X2luZGV4KHVpbnQ4X3QgaW5kZXgpCit7CisgICAgb3RFcnJvciBzdGF0dXMgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGluZGV4IDwgUkFESU9fQ09ORklHX1NSQ19NQVRDSF9FTlRSWV9OVU0sIHN0YXR1cyA9IE9UX0VSUk9SX05PX0FERFJFU1MpOworCisgICAgWkxMLT5TQU1fVEFCTEUgPSAoKHVpbnQzMl90KTB4RkZGRiA8PCBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClpbmRleCA8PCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9TSElGVCkgfAorICAgICAgICAgICAgICAgICAgICAgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WX01BU0sgfCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9XUl9NQVNLOworCisgICAgLyogQ2xlYXIgYml0bWFwICovCisgICAgLyogT3B0aW1pemF0aW9uOiBzRXh0U3JjQWRkckJpdG1hcFtpbmRleCAvIDhdICY9IH4oMSA8PCAoaW5kZXggJSA4KSk7ICovCisgICAgc0V4dFNyY0FkZHJCaXRtYXBbaW5kZXggPj4gM10gJj0gfigxIDw8IChpbmRleCAmIDcpKTsKKworZXhpdDoKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdWludDhfdCByZl9scWlfYWRqdXN0KHVpbnQ4X3QgaHdMcWkpCit7CisgICAgaWYgKGh3THFpID49IDIyMCkKKyAgICB7CisgICAgICAgIGh3THFpID0gMjU1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBod0xxaSA9ICg1MSAqIGh3THFpKSAvIDQ0OworICAgIH0KKworICAgIHJldHVybiBod0xxaTsKK30KKworc3RhdGljIGludDhfdCByZl9scWlfdG9fcnNzaSh1aW50OF90IGxxaSkKK3sKKyAgICBpbnQzMl90IHJzc2kgPSAoMzYgKiBscWkgLSA5ODM2KSAvIDEwOTsKKworICAgIHJldHVybiAoaW50OF90KXJzc2k7Cit9CisKK3N0YXRpYyB1aW50MzJfdCByZl9nZXRfdGltZXN0YW1wKHZvaWQpCit7CisgICAgcmV0dXJuIFpMTC0+RVZFTlRfVE1SID4+IFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX1NISUZUOworfQorCitzdGF0aWMgdm9pZCByZl9zZXRfdGltZW91dCh1aW50MzJfdCBhYnNfdGltZW91dCkKK3sKKyAgICB1aW50MzJfdCBpcnFTdHM7CisKKyAgICAvKiBEaXNhYmxlIFRNUjMgY29tcGFyZSAqLworICAgIFpMTC0+UEhZX0NUUkwgJj0gflpMTF9QSFlfQ1RSTF9UTVIzQ01QX0VOX01BU0s7CisgICAgLyogU2V0IHRpbWUtb3V0IHZhbHVlICovCisgICAgWkxMLT5UM0NNUCA9IGFic190aW1lb3V0OworICAgIC8qIEFrbm93bGVkZ2UgYW5kIHVubWFzayBUTVIzIElSUSAqLworICAgIGlycVN0cyAgPSBaTEwtPklSUVNUUyAmIFpMTF9JUlFTVFNfVE1SX0FMTF9NU0tfTUFTSzsKKyAgICBpcnFTdHMgJj0gflpMTF9JUlFTVFNfVE1SM01TS19NQVNLOworICAgIGlycVN0cyB8PSBaTExfSVJRU1RTX1RNUjNJUlFfTUFTSzsKKyAgICBaTEwtPklSUVNUUyA9IGlycVN0czsKKyAgICAvKiBFbmFibGUgVE1SMyBjb21wYXJlICovCisgICAgWkxMLT5QSFlfQ1RSTCB8PSBaTExfUEhZX0NUUkxfVE1SM0NNUF9FTl9NQVNLOworfQorCitzdGF0aWMgYm9vbCByZl9wcm9jZXNzX3J4X2ZyYW1lKHZvaWQpCit7CisgICAgdWludDhfdCB0ZW1wOworICAgIGJvb2wgc3RhdHVzID0gdHJ1ZTsKKworICAgIC8qIEdldCBSeCBsZW5ndGggKi8KKyAgICB0ZW1wID0gKFpMTC0+SVJRU1RTICYgWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfTUFTSykgPj4gWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfU0hJRlQ7CisKKyAgICAvKiBDaGVjayBpZiBmcmFtZSBpcyB2YWxpZCAqLworICAgIG90RVhQRUNUX0FDVElPTigoSUVFRTgwMjE1NF9NSU5fTEVOR1RIIDw9IHRlbXApICYmICh0ZW1wIDw9IElFRUU4MDIxNTRfTUFYX0xFTkdUSCksIHN0YXR1cyA9IGZhbHNlKTsKKworICAgIHNSeEZyYW1lLm1MZW5ndGggPSB0ZW1wOworICAgIHRlbXAgPSAoWkxMLT5MUUlfQU5EX1JTU0kgJiBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRV9NQVNLKSA+PiBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRV9TSElGVDsKKyAgICBzUnhGcmFtZS5tTHFpID0gcmZfbHFpX2FkanVzdCh0ZW1wKTsKKyAgICBzUnhGcmFtZS5tUG93ZXIgPSByZl9scWlfdG9fcnNzaShzUnhGcmFtZS5tTHFpKTsKKyNpZiBET1VCTEVfQlVGRkVSSU5HCisKKyAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgc1J4RnJhbWUubUxlbmd0aCAtIDI7IHRlbXArKykKKyAgICB7CisgICAgICAgIHNSeERhdGFbdGVtcF0gPSAoKHVpbnQ4X3QgKilaTEwtPlBLVF9CVUZGRVJfUlgpW3RlbXBdOworICAgIH0KKworI2VuZGlmCisKK2V4aXQ6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBSYWRpb18xX0lSUUhhbmRsZXIodm9pZCkKK3sKKyAgICB4Y3ZyX3N0YXRlX3Qgc3RhdGUgPSByZl9nZXRfc3RhdGUoKTsKKyAgICB1aW50MzJfdCBpcnFTdGF0dXMgPSBaTEwtPklSUVNUUzsKKyAgICBpbnQ4X3QgdGVtcDsKKworICAgIFpMTC0+SVJRU1RTID0gaXJxU3RhdHVzOworCisgICAgLyogVE1SMyBJUlEgLSB0aW1lLW91dCAqLworICAgIGlmICgoaXJxU3RhdHVzICYgWkxMX0lSUVNUU19UTVIzSVJRX01BU0spICYmICghKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfVE1SM01TS19NQVNLKSkpCisgICAgeworICAgICAgICAvKiBTdG9wIFRNUjMgKi8KKyAgICAgICAgWkxMLT5JUlFTVFMgPSBpcnFTdGF0dXMgfCBaTExfSVJRU1RTX1RNUjNNU0tfTUFTSzsKKyAgICAgICAgWkxMLT5QSFlfQ1RSTCAmPSB+WkxMX1BIWV9DVFJMX1RNUjNDTVBfRU5fTUFTSzsKKworICAgICAgICBpZiAoc3RhdGUgPT0gWENWUl9DQ0FfYykKKyAgICAgICAgeworICAgICAgICAgICAgcmZfYWJvcnQoKTsKKyAgICAgICAgICAgIHNFZFNjYW5Eb25lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc3RhdGUgPT0gWENWUl9UUl9jKSAmJiAhKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfUlhJUlFfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJmX2Fib3J0KCk7CisgICAgICAgICAgICBzU3RhdGUgPSBPVF9SQURJT19TVEFURV9SRUNFSVZFOworICAgICAgICAgICAgc1R4U3RhdHVzID0gT1RfRVJST1JfTk9fQUNLOworICAgICAgICAgICAgc1R4RG9uZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXF1ZW5jZSBkb25lIElSUSAqLworICAgIGlmICgoIShaTEwtPlBIWV9DVFJMICYgWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLKSkgJiYgKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfU0VRSVJRX01BU0spKQorICAgIHsKKyAgICAgICAgLyogQ2xlYW51cCAqLworICAgICAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfWENWU0VRX01BU0s7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLOworCisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBYQ1ZSX1JYX2M6CisgICAgICAgICAgICBzUnhEb25lID0gcmZfcHJvY2Vzc19yeF9mcmFtZSgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYQ1ZSX1RSX2M6CisgICAgICAgICAgICBpZiAoKFpMTC0+UEhZX0NUUkwgJiBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSykgJiYgKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfQ0NBX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfUlhJUlFfTUFTSykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChyZl9wcm9jZXNzX3J4X2ZyYW1lKCkgPT0gZmFsc2UpIHx8CisgICAgICAgICAgICAgICAgICAgICAoc1J4RnJhbWUubUxlbmd0aCAhPSBJRUVFODAyMTU0X0FDS19MRU5HVEgpIHx8CisgICAgICAgICAgICAgICAgICAgICAoKHNSeEZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRlJNX0NUTF9MT19PRkZTRVRdICYgSUVFRTgwMjE1NF9GUk1fVFlQRV9NQVNLKSAhPSBJRUVFODAyMTU0X0ZSTV9UWVBFX0FDSykgfHwKKyAgICAgICAgICAgICAgICAgICAgIChzUnhGcmFtZS5tUHNkdVtJRUVFODAyMTU0X0RTTl9PRkZTRVRdICE9IHNUeEZyYW1lLm1Qc2R1W0lFRUU4MDIxNTRfRFNOX09GRlNFVF0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX05PX0FDSzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfUkVDRUlWRTsKKyAgICAgICAgICAgIHNUeERvbmUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYQ1ZSX1RYX2M6CisgICAgICAgICAgICBpZiAoKFpMTC0+UEhZX0NUUkwgJiBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSykgJiYgKGlycVN0YXR1cyAmIFpMTF9JUlFTVFNfQ0NBX01BU0spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeFN0YXR1cyA9IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgICAgICBzVHhEb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWENWUl9DQ0FfYzoKKyAgICAgICAgICAgIHRlbXAgPSAoWkxMLT5MUUlfQU5EX1JTU0kgJiBaTExfTFFJX0FORF9SU1NJX0NDQTFfRURfRk5MX01BU0spID4+IFpMTF9MUUlfQU5EX1JTU0lfQ0NBMV9FRF9GTkxfU0hJRlQ7CisKKyAgICAgICAgICAgIGlmICh0ZW1wID4gc01heEVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNNYXhFRCA9IHRlbXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc0VkU2NhbkRvbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogUmVzdGFydCBFRCAqLworICAgICAgICAgICAgICAgIHdoaWxlIChaTEwtPlNFUV9TVEFURSAmIFpMTF9TRVFfU1RBVEVfU0VRX1NUQVRFX01BU0spIHt9CisKKyAgICAgICAgICAgICAgICBaTEwtPklSUVNUUyA9IChaTEwtPklSUVNUUyAmIFpMTF9JUlFTVFNfVE1SX0FMTF9NU0tfTUFTSykgfCBaTExfSVJRU1RTX1NFUUlSUV9NQVNLOworICAgICAgICAgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9DQ0FfYzsKKyAgICAgICAgICAgICAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfU0VRTVNLX01BU0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZl9hYm9ydCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFKSAmJiAocmZfZ2V0X3N0YXRlKCkgPT0gWENWUl9JZGxlX2MpKQorICAgIHsKKyAgICAgICAgLyogUmVzdGFydCBSWCAqLworICAgICAgICB3aGlsZSAoWkxMLT5TRVFfU1RBVEUgJiBaTExfU0VRX1NUQVRFX1NFUV9TVEFURV9NQVNLKSB7fQorCisgICAgICAgIFpMTC0+SVJRU1RTID0gWkxMLT5JUlFTVFM7CisgICAgICAgIFpMTC0+UEhZX0NUUkwgfD0gWENWUl9SWF9jOworICAgICAgICBaTEwtPlBIWV9DVFJMICY9IH5aTExfUEhZX0NUUkxfU0VRTVNLX01BU0s7CisgICAgfQorfQorCit2b2lkIGt3NDF6UmFkaW9Jbml0KHZvaWQpCit7CisgICAgWENWUl9Jbml0KFpJR0JFRV9NT0RFLCBEUl81MDBLQlBTKTsKKworICAgIC8qIERpc2FibGUgYWxsIHRpbWVycywgZW5hYmxlIEFVVE9BQ0sgYW5kIENDQSBiZWZvcmUgVFgsIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKyAgICBaTEwtPlBIWV9DVFJMID0gWkxMX1BIWV9DVFJMX0NDQVRZUEUoREVGQVVMVF9DQ0FfTU9ERSkgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSyAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9UU01fTVNLX01BU0sgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX1dBS0VfTVNLX01BU0sgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfQ1JDX01TS19NQVNLICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9QTExfVU5MT0NLX01TS19NQVNLICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLX01BU0sgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfUlhfV01SS19NU0tfTUFTSyAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9DQ0FNU0tfTUFTSyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX1JYTVNLX01BU0sgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfVFhNU0tfTUFTSyAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIFpMTF9QSFlfQ1RSTF9TRVFNU0tfTUFTSyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgWkxMX1BIWV9DVFJMX0FVVE9BQ0tfTUFTSyAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBaTExfUEhZX0NUUkxfVFJDVl9NU0tfTUFTSzsKKworICAgIC8qIENsZWFyIGFsbCBJUlEgZmxhZ3MgYW5kIGRpc2FibGUgYWxsIHRpbWVyIGludGVycnVwdHMgKi8KKyAgICBaTEwtPklSUVNUUyA9IFpMTC0+SVJRU1RTOworCisgICAgLyogIEZyYW1lIEZpbHRlcmluZworICAgIEZSTV9WRVJbNzo2XSA9IGIxMS4gQWNjZXB0IEZyYW1lVmVyc2lvbiAwIGFuZCAxIHBhY2tldHMsIHJlamVjdCBhbGwgb3RoZXJzICovCisgICAgWkxMLT5SWF9GUkFNRV9GSUxURVIgJj0gflpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVJfTUFTSzsKKyAgICBaTEwtPlJYX0ZSQU1FX0ZJTFRFUiA9IFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVIoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9DTURfRlRfTUFTSyAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBaTExfUlhfRlJBTUVfRklMVEVSX0RBVEFfRlRfTUFTSyAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNLX0ZUX01BU0sgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9CRUFDT05fRlRfTUFTSzsKKworICAgIC8qIFNldCBwcmVzY2FsbGVyIHRvIG9idGFpbiAxIHN5bWJvbCAoMTZ1cykgdGltZWJhc2UgKi8KKyAgICBaTEwtPlRNUl9QUkVTQ0FMRSA9IDB4MDU7CisKKyAgICAvKiBTZXQgQ0NBIHRocmVzaG9sZCB0byAtNzUgZEJtICovCisgICAgWkxMLT5DQ0FfTFFJX0NUUkwgJj0gflpMTF9DQ0FfTFFJX0NUUkxfQ0NBMV9USFJFU0hfTUFTSzsKKyAgICBaTEwtPkNDQV9MUUlfQ1RSTCB8PSBaTExfQ0NBX0xRSV9DVFJMX0NDQTFfVEhSRVNIKC03NSk7CisKKyAgICAvKiBBZGp1c3QgTFFJIGNvbXBlbnNhdGlvbiAqLworICAgIFpMTC0+Q0NBX0xRSV9DVFJMICY9IH5aTExfQ0NBX0xRSV9DVFJMX0xRSV9PRkZTRVRfQ09NUF9NQVNLOworICAgIFpMTC0+Q0NBX0xRSV9DVFJMIHw9IFpMTF9DQ0FfTFFJX0NUUkxfTFFJX09GRlNFVF9DT01QKDk2KTsKKworICAgIC8qIEFkanVzdCBBQ0sgZGVsYXkgdG8gZnVsZmlsbCB0aGUgODAyLjE1LjQgdHVybmFyb3VuZCByZXF1aXJlbWVudHMgKi8KKyAgICBaTEwtPkFDS0RFTEFZICY9IH5aTExfQUNLREVMQVlfQUNLREVMQVlfTUFTSzsKKyAgICBaTEwtPkFDS0RFTEFZIHw9IFpMTF9BQ0tERUxBWV9BQ0tERUxBWSgtOCk7CisKKyAgICAvKiBDbGVhciBIVyBpbmRpcmVjdCBxdWV1ZSAqLworICAgIFpMTC0+U0FNX1RBQkxFIHw9IFpMTF9TQU1fVEFCTEVfSU5WQUxJREFURV9BTExfTUFTSzsKKworICAgIHJmX3NldF9jaGFubmVsKERFRkFVTFRfQ0hBTk5FTCk7CisgICAgcmZfc2V0X3R4X3Bvd2VyKDApOworCisgICAgc1R4RnJhbWUubUxlbmd0aCA9IDA7CisgICAgc1R4RnJhbWUubVBzZHUgPSAodWludDhfdCAqKVpMTC0+UEtUX0JVRkZFUl9UWCArIDE7CisgICAgc1J4RnJhbWUubUxlbmd0aCA9IDA7CisjaWYgRE9VQkxFX0JVRkZFUklORworICAgIHNSeEZyYW1lLm1Qc2R1ID0gc1J4RGF0YTsKKyNlbHNlCisgICAgc1J4RnJhbWUubVBzZHUgPSAodWludDhfdCAqKVpMTC0+UEtUX0JVRkZFUl9SWDsKKyNlbmRpZgorfQorCit2b2lkIGt3NDF6UmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAoc1R4RG9uZSkKKyAgICB7CisgICAgICAgIGlmIChzVHhGcmFtZS5tUHNkdVtJRUVFODAyMTU0X0ZSTV9DVExfTE9fT0ZGU0VUXSAmIElFRUU4MDIxNTRfQUNLX1JFUVVFU1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUeEZyYW1lLCAmc1J4RnJhbWUsIHNUeFN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHhGcmFtZSwgTlVMTCwgc1R4U3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHNUeERvbmUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc1J4RG9uZSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsICZzUnhGcmFtZSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUoYUluc3RhbmNlLCAmc1J4RnJhbWUsIE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgc1J4RG9uZSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChzRWRTY2FuRG9uZSkKKyAgICB7CisgICAgICAgIG90UGxhdFJhZGlvRW5lcmd5U2NhbkRvbmUoYUluc3RhbmNlLCBzTWF4RUQpOworICAgICAgICBzRWRTY2FuRG9uZSA9IGZhbHNlOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYW5kb20uYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9rdzQxei9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmVhMjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3JhbmRvbS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiZnNsX3RybmcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaCIKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKK3ZvaWQga3c0MXpSYW5kb21Jbml0KHZvaWQpCit7CisgICAgdHJuZ19jb25maWdfdCBjb25maWc7CisgICAgdWludDMyX3Qgc2VlZDsKKworICAgIFRSTkdfR2V0RGVmYXVsdENvbmZpZygmY29uZmlnKTsKKyAgICBjb25maWcuZnJlcXVlbmN5Q291bnRMaW1pdC5taW5pbXVtID0gMHgwMDAwMDEwMDsKKyAgICBjb25maWcuZnJlcXVlbmN5Q291bnRMaW1pdC5tYXhpbXVtID0gMHgwMDBGMDAwMDsKKyAgICBjb25maWcucmluZ09zY0RpdiA9IGtUUk5HX1JpbmdPc2NEaXYwOworICAgIGNvbmZpZy5lbnRyb3B5RGVsYXkgPSAxMjAwOworCisgICAgb3RFWFBFQ1QoVFJOR19Jbml0KFRSTkcwLCAmY29uZmlnKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpOworCisgICAgb3RFWFBFQ1QoVFJOR19HZXRSYW5kb21EYXRhKFRSTkcwLCAmc2VlZCwgc2l6ZW9mKHNlZWQpKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpOworCisgICAgc3JhbmQoc2VlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KXJhbmQoKTsKK30KKworb3RFcnJvciBvdFBsYXRSYW5kb21HZXRUcnVlKHVpbnQ4X3QgKmFPdXRwdXQsIHVpbnQxNl90IGFPdXRwdXRMZW5ndGgpCit7CisgICAgb3RFcnJvciBzdGF0dXMgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKChhT3V0cHV0ICE9IE5VTEwpLCBzdGF0dXMgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKFRSTkdfR2V0UmFuZG9tRGF0YShUUk5HMCwgYU91dHB1dCwgYU91dHB1dExlbmd0aCkgPT0ga1N0YXR1c19TdWNjZXNzLCBzdGF0dXMgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMva3c0MXovdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAwZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL2t3NDF6L3VhcnQuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgVUFSVCBjb21tdW5pY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0LmgiCisKKyNpbmNsdWRlICJmc2xfY2xvY2suaCIKKyNpbmNsdWRlICJmc2xfcG9ydC5oIgorI2luY2x1ZGUgImZzbF9scHVhcnQuaCIKKworZW51bQoreworICAgIGtQbGF0Zm9ybUNsb2NrICAgICA9IDMyMDAwMDAwLAorICAgIGtCYXVkUmF0ZSAgICAgICAgICA9IDExNTIwMCwKKyAgICBrUmVjZWl2ZUJ1ZmZlclNpemUgPSAyNTYsCit9OworCitzdGF0aWMgdm9pZCBwcm9jZXNzUmVjZWl2ZSgpOworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KCk7CisKK3N0YXRpYyBjb25zdCB1aW50OF90ICpzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworc3RhdGljIHVpbnQxNl90ICAgICAgIHNUcmFuc21pdExlbmd0aCA9IDA7CitzdGF0aWMgYm9vbCAgICAgICAgICAgc1RyYW5zbWl0RG9uZSAgID0gZmFsc2U7CisKK3R5cGVkZWYgc3RydWN0IFJlY3ZCdWZmZXIKK3sKKyAgICAvLyBUaGUgZGF0YSBidWZmZXIKKyAgICB1aW50OF90ICBtQnVmZmVyW2tSZWNlaXZlQnVmZmVyU2l6ZV07CisgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgaXRlbSB3cml0dGVuIHRvIHRoZSBsaXN0LgorICAgIHVpbnQxNl90IG1IZWFkOworICAgIC8vIFRoZSBvZmZzZXQgb2YgdGhlIG5leHQgaXRlbSB0byBiZSB3cml0dGVuIHRvIHRoZSBsaXN0LgorICAgIHVpbnQxNl90IG1UYWlsOworfSBSZWN2QnVmZmVyOworCitzdGF0aWMgUmVjdkJ1ZmZlciBzUmVjZWl2ZTsKKworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgbHB1YXJ0X2NvbmZpZ190IGNvbmZpZzsKKworICAgIHNSZWNlaXZlLm1IZWFkID0gMDsKKyAgICBzUmVjZWl2ZS5tVGFpbCA9IDA7CisKKyAgICAvKiBQaW4gTVVYICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soa0NMT0NLX1BvcnRDKTsKKyAgICBQT1JUX1NldFBpbk11eChQT1JUQywgNiwga1BPUlRfTXV4QWx0NCk7CisgICAgUE9SVF9TZXRQaW5NdXgoUE9SVEMsIDcsIGtQT1JUX011eEFsdDQpOworCisgICAgLyogU2V0IE9TQ0VSQ0xLIGFzIExQVUFSVCBSeC9UeCBjbG9jayAqLworICAgIENMT0NLX1NldExwdWFydENsb2NrKDIpOworCisgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmNvbmZpZyk7CisgICAgY29uZmlnLmVuYWJsZVJ4ID0gMTsKKyAgICBjb25maWcuZW5hYmxlVHggPSAxOworICAgIGNvbmZpZy5iYXVkUmF0ZV9CcHMgPSBrQmF1ZFJhdGU7CisgICAgTFBVQVJUX0luaXQoTFBVQVJUMCwgJmNvbmZpZywga1BsYXRmb3JtQ2xvY2spOworICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDAsIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSk7CisKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShMUFVBUlQwX0lSUW4pOworICAgIE5WSUNfRW5hYmxlSVJRKExQVUFSVDBfSVJRbik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0RGlzYWJsZSh2b2lkKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShMUFVBUlQwX0lSUW4pOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc1RyYW5zbWl0QnVmZmVyID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBhQnVmICsgMTsKKyAgICBzVHJhbnNtaXRMZW5ndGggPSBhQnVmTGVuZ3RoIC0gMTsKKyAgICBzVHJhbnNtaXREb25lID0gZmFsc2U7CisgICAgTFBVQVJUX1dyaXRlQnl0ZShMUFVBUlQwLCAqYUJ1Zik7CisgICAgTFBVQVJUX0NsZWFyU3RhdHVzRmxhZ3MoTFBVQVJUMCwga0xQVUFSVF9UeERhdGFSZWdFbXB0eUZsYWcpOworICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDAsIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KHZvaWQpCit7CisgICAgaWYgKHNUcmFuc21pdEJ1ZmZlciAmJiBzVHJhbnNtaXREb25lKQorICAgIHsKKyAgICAgICAgc1RyYW5zbWl0RG9uZSA9IGZhbHNlOworICAgICAgICBzVHJhbnNtaXRCdWZmZXIgPSBOVUxMOworICAgICAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQga3c0MXpVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgLy8gQ29weSB0YWlsIHRvIHByZXZlbnQgbXVsdGlwbGUgcmVhZHMKKyAgICB1aW50MTZfdCB0YWlsID0gc1JlY2VpdmUubVRhaWw7CisKKyAgICBpZiAoc1JlY2VpdmUubUhlYWQgPiB0YWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKHNSZWNlaXZlLm1CdWZmZXIgKyBzUmVjZWl2ZS5tSGVhZCwga1JlY2VpdmVCdWZmZXJTaXplIC0gc1JlY2VpdmUubUhlYWQpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBidWZmZXIgbUhlYWQgYmFjayB0byB6ZXJvCisgICAgICAgIHNSZWNlaXZlLm1IZWFkID0gMDsKKyAgICB9CisKKyAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gdGFpbCkKKyAgICB7CisgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZChzUmVjZWl2ZS5tQnVmZmVyICsgc1JlY2VpdmUubUhlYWQsIHRhaWwgLSBzUmVjZWl2ZS5tSGVhZCk7CisKKyAgICAgICAgLy8gU2V0IG1IZWFkIHRvIHRoZSBsb2NhbCB0YWlsIHdlIGhhdmUgY2FjaGVkCisgICAgICAgIHNSZWNlaXZlLm1IZWFkID0gdGFpbDsKKyAgICB9Cit9CisKK3ZvaWQgTFBVQVJUMF9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgdWludDMyX3QgaW50ZXJydXB0cyA9IExQVUFSVF9HZXRFbmFibGVkSW50ZXJydXB0cyhMUFVBUlQwKTsKKyAgICB1aW50OF90IHJ4X2RhdGE7CisKKyAgICAvKiBDaGVjayBpZiBkYXRhIHdhcyByZWNlaXZlZCAqLworICAgIHdoaWxlIChMUFVBUlRfR2V0U3RhdHVzRmxhZ3MoTFBVQVJUMCkgJiAoa0xQVUFSVF9SeERhdGFSZWdGdWxsRmxhZykpCisgICAgeworICAgICAgICByeF9kYXRhID0gTFBVQVJUX1JlYWRCeXRlKExQVUFSVDApOworICAgICAgICBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhMUFVBUlQwLCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxGbGFnKTsKKworICAgICAgICBpZiAoc1JlY2VpdmUubUhlYWQgIT0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1CdWZmZXJbc1JlY2VpdmUubVRhaWxdID0gcnhfZGF0YTsKKyAgICAgICAgICAgIHNSZWNlaXZlLm1UYWlsID0gKHNSZWNlaXZlLm1UYWlsICsgMSkgJSBrUmVjZWl2ZUJ1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiBkYXRhIFR4IGhhcyBlbmQgKi8KKyAgICBpZiAoKExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlQwKSAmIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlGbGFnKSAmJgorICAgICAgICAoaW50ZXJydXB0cyAmIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUpKQorICAgIHsKKyAgICAgICAgaWYgKHNUcmFuc21pdExlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc1RyYW5zbWl0TGVuZ3RoLS07CisgICAgICAgICAgICBMUFVBUlRfV3JpdGVCeXRlKExQVUFSVDAsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIXNUcmFuc21pdERvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNUcmFuc21pdERvbmUgPSB0cnVlOworICAgICAgICAgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKExQVUFSVDAsIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlQwKSAmIGtMUFVBUlRfUnhPdmVycnVuRmxhZykKKyAgICB7CisgICAgICAgIExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKExQVUFSVDAsIGtMUFVBUlRfUnhPdmVycnVuRmxhZyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL0RJQUcubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvRElBRy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Y2NzBlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL0RJQUcubWQKQEAgLTAsMCArMSw4OSBAQAorIyMgRGlhZ25vc3RpYyBtb2R1bGUKKworblJGNTI4NDAgcG9ydCBleHRlbmRzIFtPcGVuVGhyZWFkIERpYWdub3N0aWNzIE1vZHVsZV1bRElBR10uCisKK05ldyBjb21tYW5kcyBhbGxvdyBmb3IgbW9yZSBhY2N1cmF0ZSBsb3cgbGV2ZWwgcmFkaW8gdGVzdGluZy4KKworIyMjIE5ldyBjb21tYW5kcworICogW2RpYWcgaWRdKCNkaWFnLWlkKQorICogW2RpYWcgbGlzdGVuXSgjZGlhZy1saXN0ZW4pCisgKiBbZGlhZyB0cmFuc21pdF0oI2RpYWctdHJhbnNtaXQpCisKKyMjIyBEaWFnbm9zdGljIHJhZGlvIHBhY2tldAorW2RpYWcgbGlzdGVuXSgjZGlhZy1saXN0ZW4pIGFuZCBbZGlhZyB0cmFuc21pdF0oI2RpYWctdHJhbnNtaXQpIHVzZSByYWRpbyBmcmFtZSBwYXlsb2FkIHNwZWNpZmllZCBiZWxvdy4KKworIGBgYGMKKyBzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZQorIHsKKyAgICAgY29uc3QgY2hhciBtTWVzc2FnZURlc2NyaXB0b3JbMTFdOworICAgICB1aW50OF90IG1DaGFubmVsOworICAgICBpbnQxNl90IG1JRDsKKyAgICAgdWludDMyX3QgbUNudDsKKyB9OworIGBgYAorCitgbU1lc3NhZ2VEZXNjcmlwdG9yYCBpcyBjb25zdGFudCBzdHJpbmcgYCJEaWFnTWVzc2FnZSJgLjxiciAvPgorYG1DaGFubmVsYCBjb250YWlucyBjaGFubmVsIG51bWJlciBvbiB3aGljaCBwYWNrZXQgd2FzIHRyYW5zbWl0dGVkLjxiciAvPgorYG1JRGAgY29udGFpbnMgYm9hcmQgSUQgc2V0IHdpdGggW2RpYWcgaWRdKCNkaWFnLWlkKSBjb21tYW5kLjxiciAvPgorYG1DbnRgIGlzIGEgY291bnRlciBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGJvYXJkIHRyYW5zbWl0cyBkaWFnbm9zdGljIHJhZGlvIHBhY2tldC4KKworSWYgW2xpc3Rlbl0oI2RpYWctbGlzdGVuKSBtb2RlIGlzIGVuYWJsZWQgYW5kIE9wZW5UaHJlYWQgd2FzIGJ1aWx0IHdpdGggYERFRkFVTFRfTE9HR0lOR2AgZmxhZywgSlNPTiBzdHJpbmcgaXMgcHJpbnRlZCBldmVyeSB0aW1lIGRpYWdub3N0aWMgcmFkaW8gcGFja2V0IGlzIHJlY2VpdmVkLgorCitgYGBKU09OCisgeyJGcmFtZSI6eworICAgIkxvY2FsQ2hhbm5lbCI6IjxsaXN0ZW5pbmcgYm9hcmQgY2hhbm5lbD4iLAorICAgIlJlbW90ZUNoYW5uZWwiOiI8bUNoYW5uZWw+IiwKKyAgICJDTlQiOiI8bUNudD4iLAorICAgIkxvY2FsSUQiOiI8bGlzdGVuaW5nIGJvYXJkIElEPiIsCisgICAiUmVtb3RlSUQiOiI8bUlEPiIsCisgICAiUlNTSSI6IjxwYWNrZXQgUlNTST4iCisgfX0KK2BgYAorCisjIyMgZGlhZyBpZAorR2V0IGJvYXJkIElELgorCisjIyMgZGlhZyBpZCBcPGlkXD4KK1NldCBib2FyZCBJRC4KKworVmFsdWUgcmFuZ2UgMCB0byAzMjc2Ny4KKworRGVmYXVsdDogYC0xYC4KKworIyMjIGRpYWcgbGlzdGVuCitHZXQgbGlzdGVuIHN0YXRlLgorCisjIyMgZGlhZyBsaXN0ZW4gXDxsaXN0ZW5cPgorU2V0IGxpc3RlbiBzdGF0ZS4KKworYDBgIGRpc2FibGUgbGlzdGVuIHN0YXRlLjxiciAvPgorYDFgIGVuYWJsZSBsaXN0ZW4gc3RhdGUuCisKK0RlZmF1bHQ6IGxpc3RlbiBkaXNhYmxlZC4KKworIyMjIGRpYWcgdHJhbnNtaXQKK0dldCBtZXNzYWdlcyBjb3VudCBhbmQgaW50ZXJ2YWwgYmV0d2VlbiB0aGVtIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCBhZnRlciBgZGlhZyB0cmFuc21pdCBzdGFydGAuCisKKyMjIyBkaWFnIHRyYW5zbWl0IGludGVydmFsIFw8aW50ZXJ2YWxcPgorU2V0IGludGVydmFsIGluIG1zIGJldHdlZW4gdHJhbnNtaXR0ZWQgbWVzc2FnZXMuCisKK1ZhbHVlIHJhbmdlIDEgdG8gNDI5NDk2NzI5NS4KKworRGVmYXVsdDogYDFgLgorCisjIyMgZGlhZyB0cmFuc21pdCBjb3VudCBcPGNvdW50XD4KK1NldCBudW1iZXIgb2YgbWVzc2FnZXMgdG8gYmUgdHJhbnNtaXR0ZWQuCisKK1ZhbHVlIHJhbmdlIDEgdG8gMjE0NzQ4MzY0NzxiciAvPgorb3I8YnIgLz4KK2AtMWAgY29udGludW91cyB0cmFuc21pc3Npb24uCisKK0RlZmF1bHQ6IGAxYAorCisjIyMgZGlhZyB0cmFuc21pdCBzdG9wCitTdG9wIG9uZ29pbmcgdHJhbnNtaXNzaW9uIHJlZ2FyZGxlc3Mgb2YgcmVtYWluaW5nIG51bWJlciBvZiBtZXNzYWdlcyB0byBiZSBzZW50LgorCisjIyMgZGlhZyB0cmFuc21pdCBzdGFydAorU3RhcnQgdHJhbnNtaXRpbmcgbWVzc2FnZXMgd2l0aCBzcGVjaWZpZWQgaW50ZXJ2YWwuCisKK1tESUFHXTogLi8uLi8uLi8uLi9zcmMvZGlhZy9SRUFETUUubWQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5ODY0NgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIzNCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbGlib3BlbnRocmVhZC1ucmY1Mjg0MC5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpYm9wZW50aHJlYWQtbnJmNTI4NDAtc2RrLmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsaWJvcGVudGhyZWFkLW5yZjUyODQwLXNvZnRkZXZpY2Utc2RrLmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDT01NT05DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1EQ09ORklHX0dQSU9fQVNfUElOUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRE5SRjUyODQwX1hYQUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHNyY2RpcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQTEFURk9STV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGFsYXJtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmbGFzaC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWFydC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBsYXRmb3JtLWNvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS1ucmY1LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhbmRvbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1NJTkdMRVBIWV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZmxhc2hfbm9zZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9kaXJlY3QuYyAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX2RpcmVjdC5jICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9kaXJlY3QuYyAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NpbmdsZV9waHkvc2luZ2xlX3BoeS5jICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1NJTkdMRVBIWV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURSQUFMX1NJTkdMRV9QSFk9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworU09GVERFVklDRV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBmbGFzaF9zZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc29mdGRldmljZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNvZnRkZXZpY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25fc3dpLmMgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9zd2kuYyAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc3dpLmMgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuYyAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZS9ucmZfcmFhbF9zb2Z0ZGV2aWNlLmMgICAgICAgXAorICAgICQoTlVMTCkKKworU09GVERFVklDRV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc29mdGRldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EU09GVERFVklDRV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRFMxNDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURSQUFMX1NPRlRERVZJQ0U9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworUExBVEZPUk1fU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICBkaWFnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworTk9SRElDU0VNSV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0LmMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuYyAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5jICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmMgICAgICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uYyAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmMgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5jICAgICAgICAgICAgIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFRfQ29uZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEB0b3BfYnVpbGRkaXJAL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL2djY19zdGFydHVwX25yZjUyODQwLlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDT01NT05DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoU0lOR0xFUEhZX0NQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTk9SRElDU0VNSV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKFNJTkdMRVBIWV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9ucmY1Mjg0MF9zZGtfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENPTU1PTkNQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChTSU5HTEVQSFlfQ1BQRkxBR1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9ucmY1Mjg0MF9zZGtfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOT1JESUNTRU1JX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoU0lOR0xFUEhZX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfc29mdGRldmljZV9zZGtfYV9DUFBGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChDT01NT05DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoU09GVERFVklDRV9DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfc29mdGRldmljZV9zZGtfYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChQTEFURk9STV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTk9SRElDU0VNSV9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKFNPRlRERVZJQ0VfU09VUkNFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9hcm1fbWF0aC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfYXJtY2NfVjYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jbXNpc19nY2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbTQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21GdW5jLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtSW5zdHIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbVNpbWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9jb21waWxlcl9hYnN0cmFjdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUxX3RvX25yZjUyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mjg0MC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTJfdG9fbnJmNTI4NDAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX2JpdGZpZWxkcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MF9wZXJpcGhlcmFscy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5oICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmggICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmggICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uLmggICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5oICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmggICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJvY2VkdXJlc19kdXJhdGlvbi5oICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3QuaCAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvbnJmX3JhYWxfYXBpLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL25yZl9yYWFsX2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuaCAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Fzc2VydC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9jbG9jay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZ3Bpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW90ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9lZ3UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BlcmlwaGVyYWxzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9wcGkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcmFkaW8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3JuZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl91YXJ0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2Vyci5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dC5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHRjLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0cy5oICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfaGNpLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2wyY2FwLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9yYW5nZXMuaCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zZG0uaCAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfZXJyb3Jfc29jLmggICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX252aWMuaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9zZG0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc29jLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3N2Yy5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZjUyL25yZl9tYnIuaCAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworUFJFVFRZX0ZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFBMQVRGT1JNX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorCitsaWJvcGVudGhyZWFkX25yZjUyODQwX2FfTElCQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzICQoRGFzaCl0eXBlIGYgJChEYXNoKW5hbWUgIioubyIpCisKK2xpYm9wZW50aHJlYWRfbnJmNTI4NDBfc2RrX2FfTElCQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworbGlib3BlbnRocmVhZF9ucmY1Mjg0MF9zb2Z0ZGV2aWNlX3Nka19hX0xJQkFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKHNoZWxsIGZpbmQgJCh0b3BfYnVpbGRkaXIpL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscyAkKERhc2gpdHlwZSBmICQoRGFzaCluYW1lICIqLm8iKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9SRUFETUUubWQgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDRlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTgxIEBACisjIE9wZW5UaHJlYWQgb24gblJGNTI4NDAgRXhhbXBsZQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBleGFtcGxlIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFtOb3JkaWMgU2VtaWNvbmR1Y3RvciBuUkY1Mjg0MCBTb0NdW25SRjUyODQwXS4KKworW25SRjUyODQwXTogaHR0cHM6Ly93d3cubm9yZGljc2VtaS5jb20vZW5nL1Byb2R1Y3RzL25SRjUyODQwCisKK1RvIGZhY2lsaXRhdGUgVGhyZWFkIHByb2R1Y3RzIGRldmVsb3BtZW50IHdpdGggdGhlIG5SRjUyODQwIHBsYXRmb3JtLCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBwcm92aWRlcyA8aT5uUkY1IFNESyBmb3IgVGhyZWFkPC9pPi4gU2VlIFtOb3JkaWMgU2VtaWNvbmR1Y3RvcidzIG5SRjUgU0RLIGZvciBUaHJlYWRdW25SRjUtU0RLLXNlY3Rpb25dIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworW25SRjUtU0RLLXNlY3Rpb25dOiAjbm9yZGljLXNlbWljb25kdWN0b3JzLW5yZjUtc2RrLWZvci10aHJlYWQKKworIyMgVG9vbGNoYWluCisKK0Rvd25sb2FkIGFuZCBpbnN0YWxsIFtHTlUgdG9vbGNoYWluIGZvciBBUk0gQ29ydGV4LU1dW2dudS10b29sY2hhaW5dLgorCitbZ251LXRvb2xjaGFpbl06IGh0dHBzOi8vbGF1bmNocGFkLm5ldC9nY2MtYXJtLWVtYmVkZGVkCisKKyMjIEJ1aWxkaW5nIHRoZSBleGFtcGxlcworCitgYGBiYXNoCiskIGNkIDxwYXRoLXRvLW9wZW50aHJlYWQ+CiskIC4vYm9vdHN0cmFwCiskIG1ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtbnJmNTI4NDAKK2BgYAorCitBZnRlciBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHRoZSBgZWxmYCBmaWxlcyBjYW4gYmUgZm91bmQgaW4KK2A8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvbnJmNTI4NDAvYmluYC4gIFlvdSBjYW4gY29udmVydCB0aGVtIHRvIGBoZXhgCitmaWxlcyB1c2luZyBgYXJtLW5vbmUtZWFiaS1vYmpjb3B5YDoKK2BgYGJhc2gKKyQgYXJtLW5vbmUtZWFiaS1vYmpjb3B5IC1PIGloZXggb3QtY2xpLWZ0ZCBvdC1jbGktZnRkLmhleAorYGBgCisKKyMjIEZsYXNoaW5nIHRoZSBiaW5hcmllcworCitGbGFzaCB0aGUgY29tcGlsZWQgYmluYXJpZXMgb250byBuUkY1Mjg0MCB1c2luZyBgbnJmanByb2dgIHdoaWNoIGlzCitwYXJ0IG9mIHRoZSBbblJGNXggQ29tbWFuZCBMaW5lIFRvb2xzXVtuUkY1eC1Db21tYW5kLUxpbmUtVG9vbHNdLgorCitbblJGNXgtQ29tbWFuZC1MaW5lLVRvb2xzXTogaHR0cHM6Ly93d3cubm9yZGljc2VtaS5jb20vZW5nL1Byb2R1Y3RzL25SRjUyODQwI0Rvd25sb2FkcworCitgYGBiYXNoCiskIG5yZmpwcm9nIC1mIG5yZjUyIC0tY2hpcGVyYXNlIC0tcHJvZ3JhbSBvdXRwdXQvbnJmNTI4NDAvYmluL290LWNsaS1mdGQuaGV4IC0tcmVzZXQKK2BgYAorCisjIyBSdW5uaW5nIHRoZSBleGFtcGxlCisKKzEuIFByZXBhcmUgdHdvIGJvYXJkcyB3aXRoIHRoZSBmbGFzaGVkIGBDTEkgRXhhbXBsZWAgKGFzIHNob3duIGFib3ZlKS4KKzIuIFRoZSBDTEkgZXhhbXBsZSB1c2VzIFVBUlQgY29ubmVjdGlvbi4gVG8gdmlldyByYXcgVUFSVCBvdXRwdXQsIHN0YXJ0IGEgdGVybWluYWwKKyAgIGVtdWxhdG9yIGxpa2UgUHVUVFkgYW5kIGNvbm5lY3QgdG8gdGhlIHVzZWQgQ09NIHBvcnQgd2l0aCB0aGUgZm9sbG93aW5nIFVBUlQgc2V0dGluZ3M6CisgICAgLSBCYXVkIHJhdGU6IDExNTIwMAorICAgIC0gOCBkYXRhIGJpdHMKKyAgICAtIDEgc3RvcCBiaXQKKyAgICAtIE5vIHBhcml0eQorICAgIC0gSFcgZmxvdyBjb250cm9sOiBSVFMvQ1RTCisKKyAgIE9uIExpbnV4IHN5c3RlbSBhIHBvcnQgbmFtZSBzaG91bGQgYmUgY2FsbGVkIGUuZy4gYC9kZXYvdHR5QUNNMGAgb3IgYC9kZXYvdHR5QUNNMWAuCiszLiBPcGVuIGEgdGVybWluYWwgY29ubmVjdGlvbiBvbiB0aGUgZmlyc3QgYm9hcmQgYW5kIHN0YXJ0IGEgbmV3IFRocmVhZCBuZXR3b3JrLgorCisgYGBgYmFzaAorID4gcGFuaWQgMHhhYmNkCisgRG9uZQorID4gaWZjb25maWcgdXAKKyBEb25lCisgPiB0aHJlYWQgc3RhcnQKKyBEb25lCisgYGBgCisKKzQuIEFmdGVyIGEgY291cGxlIG9mIHNlY29uZHMgdGhlIG5vZGUgd2lsbCBiZWNvbWUgYSBMZWFkZXIgb2YgdGhlIG5ldHdvcmsuCisKKyBgYGBiYXNoCisgPiBzdGF0ZQorIExlYWRlcgorIGBgYAorCis1LiBPcGVuIGEgdGVybWluYWwgY29ubmVjdGlvbiBvbiB0aGUgc2Vjb25kIGJvYXJkIGFuZCBhdHRhY2ggYSBub2RlIHRvIHRoZSBuZXR3b3JrLgorCisgYGBgYmFzaAorID4gcGFuaWQgMHhhYmNkCisgRG9uZQorID4gaWZjb25maWcgdXAKKyBEb25lCisgPiB0aHJlYWQgc3RhcnQKKyBEb25lCisgYGBgCisKKzYuIEFmdGVyIGEgY291cGxlIG9mIHNlY29uZHMgdGhlIHNlY29uZCBub2RlIHdpbGwgYXR0YWNoIGFuZCBiZWNvbWUgYSBDaGlsZC4KKworIGBgYGJhc2gKKyA+IHN0YXRlCisgQ2hpbGQKKyBgYGAKKworNy4gTGlzdCBhbGwgSVB2NiBhZGRyZXNzZXMgb2YgdGhlIGZpcnN0IGJvYXJkLgorCisgYGBgYmFzaAorID4gaXBhZGRyCisgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6ZmMwMAorIGZkZGU6YWQwMDpiZWVmOjA6MDpmZjpmZTAwOjljMDAKKyBmZGRlOmFkMDA6YmVlZjowOjRiY2I6NzNhNTo3YzI4OjMxOGUKKyBmZTgwOjA6MDowOjVjOTE6YzYxOmI2N2M6MjcxYworIGBgYAorCis4LiBDaG9vc2Ugb25lIG9mIHRoZW0gYW5kIHNlbmQgYW4gSUNNUHY2IHBpbmcgZnJvbSB0aGUgc2Vjb25kIGJvYXJkLgorCisgYGBgYmFzaAorID4gcGluZyBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwCisgMTYgYnl0ZXMgZnJvbSBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpmYzAwOiBpY21wX3NlcT0xIGhsaW09NjQgdGltZT04bXMKKyBgYGAKKworRm9yIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzLCB2aXNpdCBbT3BlblRocmVhZCBDTEkgUmVmZXJlbmNlIFJFQURNRS5tZF1bQ0xJXS4KKworW0NMSV06IC4vLi4vLi4vLi4vc3JjL2NsaS9SRUFETUUubWQKKworIyMgTG9nZ2luZyBtb2R1bGUKKworQnkgZGVmYXVsdCwgdGhlIE9wZW5UaHJlYWQncyBsb2dnaW5nIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gb3V0cHV0IGxvZ2dpbmcKK2luZm9ybWF0aW9uIG92ZXIgU0VHR0VSJ3MgUmVhbCBUaW1lIFRyYW5zZmVyIChSVFQpLgorCitSVFQgb3V0cHV0IGNhbiBiZSB2aWV3ZWQgaW4gdGhlIEotTGluayBSVFQgVmlld2VyLCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSBTRUdHRVIuCitUaGUgdmlld2VyIGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIG5SRiBUb29scy4gVG8gcmVhZCBvciB3cml0ZSBtZXNzYWdlcyBvdmVyIFJUVCwKK2Nvbm5lY3QgYW4gblJGNSBkZXZlbG9wbWVudCBib2FyZCB2aWEgVVNCIGFuZCBydW4gdGhlIEotTGluayBSVFQgVmlld2VyLgorCitTZWxlY3QgdGhlIGNvcnJlY3QgdGFyZ2V0IGRldmljZSAoblJGNTIpIGFuZCB0aGUgdGFyZ2V0IGludGVyZmFjZSAiU1dEIi4KKworVGhlIGludGVuZGVkIGxvZyBsZXZlbCBjYW4gYmUgc2V0IHVzaW5nIGBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUxgIGRlZmluZS4KKworIyMgRGlzYWJsaW5nIHRoZSBNYXNzIFN0b3JhZ2UgRGV2aWNlCisKK0R1ZSB0byBhIGtub3duIGlzc3VlIGluIFNlZ2dlcuKAmXMgSi1MaW5rIGZpcm13YXJlLCBkZXBlbmRpbmcgb24geW91ciB2ZXJzaW9uLCB5b3UgbWlnaHQgZXhwZXJpZW5jZSBkYXRhIGNvcnJ1cHRpb24gb3IgZHJvcHMgaWYgeW91IHVzZSB0aGUgc2VyaWFsIHBvcnQuIFlvdSBjYW4gYXZvaWQgdGhpcyBpc3N1ZSBieSBkaXNhYmxpbmcgdGhlIE1hc3MgU3RvcmFnZSBEZXZpY2U6CisKKyAtIE9uIExpbnV4IG9yIG1hY09TIChPUyBYKSwgb3BlbiBKTGlua0V4ZSBmcm9tIHRoZSB0ZXJtaW5hbC4KKyAtIE9uIE1pY3Jvc29mdCBXaW5kb3dzLCBvcGVuIHRoZSBKLUxpbmsgQ29tbWFuZGVyIGFwcGxpY2F0aW9uLgorCitSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgTVNERGlzYWJsZWAKKworIyMgRGlhZ25vc3RpYyBtb2R1bGUKKworblJGNTI4NDAgcG9ydCBleHRlbmRzIFtPcGVuVGhyZWFkIERpYWdub3N0aWNzIE1vZHVsZV1bRElBR10uCisKK1lvdSBjYW4gcmVhZCBhYm91dCBhbGwgdGhlIGZlYXR1cmVzIFtoZXJlXVtuUkZESUFHXS4KKworW0RJQUddOiAuLy4uLy4uLy4uL3NyYy9kaWFnL1JFQURNRS5tZAorW25SRkRJQUddOiBESUFHLm1kCisKKyMjIFJhZGlvIGRyaXZlciBkb2N1bWVudGF0aW9uCisKK1RoZSByYWRpbyBkcml2ZXIgY29tZXMgd2l0aCBkb2N1bWVudGF0aW9uIHRoYXQgZGVzY3JpYmVzIHRoZSBvcGVyYXRpb24gb2Ygc3RhdGUKK21hY2hpbmVzIGluIHRoaXMgbW9kdWxlLiBUbyBvcGVuIHRoZSBgKi51bWxgIHNlcXVlbmNlIGRpYWdyYW1zLCB1c2UgW1BsYW50VU1MXVtQbGFudFVNTC11cmxdLgorCitbUGxhbnRVTUwtdXJsXTogaHR0cDovL3BsYW50dW1sLmNvbS8KKworIyMgVmVyaWZpY2F0aW9uCisKK1RoZSBmb2xsb3dpbmcgdG9vbGNoYWlucyBoYXZlIGJlZW4gdXNlZCBmb3IgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uOgorICAtIGdjYyB2ZXJzaW9uIDQuOS4zCisgIC0gZ2NjIHZlcnNpb24gNi4yLjAKKworVGhlIG5SRjUyODQwIGV4YW1wbGUgaGFzIGJlZW4gdmVyaWZpZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3Igd2l0aCBmb2xsb3dpbmcgY29tbWl0czoKKyAgLSBgMDMwZWZiYWAgLSAyMi4wNC4yMDE3ICh0aGUgbmV3ZXN0IGNoZWNrZWQpCisgIC0gYGRlNDhhY2ZgIC0gMDIuMDMuMjAxNworICAtIGA1MGRiNThkYCAtIDIzLjAxLjIwMTcKKworIyBOb3JkaWMgU2VtaWNvbmR1Y3RvcidzIG5SRjUgU0RLIGZvciBUaHJlYWQKKworVGhlIFtuUkY1IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBmb3IgVGhyZWFkXVtuUkY1LVNESy1UaHJlYWRdIGhlbHBzIHlvdSB3aGVuIGRldmVsb3BpbmcgVGhyZWFkIHByb2R1Y3RzIHdpdGggTm9yZGljIFNlbWljb25kdWN0b3IncyBhZHZhbmNlZCBuUkY1Mjg0MCBTeXN0ZW0gb24gQ2hpcCAoU29DKS4KKworVGhlIDxpPm5SRjUgU0RLIGZvciBUaHJlYWQ8L2k+IGluY2x1ZGVzOgorIC0gYSBwcmUtYnVpbHQgT3BlblRocmVhZCBzdGFjayBmb3IgdGhlIE5vcmRpYyBuUkY1Mjg0MCBTb0Mgd2l0aCBBUk3CriBDcnlwdG9DZWxsLTMxMCBzdXBwb3J0LAorIC0gdW5pcXVlIHN1cHBvcnQgZm9yIERGVS1vdmVyLVRocmVhZCAoRGV2aWNlIEZpcm13YXJlIFVwZ3JhZGUpLAorIC0gZXhhbXBsZXMgdG8gZGVtb25zdHJhdGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gbm9kZXMgcGVyZm9ybWluZyBkaWZmZXJlbnQgVGhyZWFkIHJvbGVzIHdpdGggdGhlIHVzZSBvZiBPcGVuVGhyZWFkIGFuZCBidWlsdC1pbiBDb0FQIHByb3RvY29sLAorIC0gZXhhbXBsZXMgdG8gZGVtb25zdHJhdGUgbXVsdGlwcm90b2NvbCBzdXBwb3J0IGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiBCTEUgcGVyaXBoZXJhbAorICBhbmQgVGhyZWFkIEZURCBhbmQgTVREIHJvbGVzLAorIC0gc3VwcG9ydCBmb3IgYW4gT3BlblRocmVhZCBOZXR3b3JrIENvLVByb2Nlc3NvciAoTkNQKSwKKyAtIEJvcmRlciBSb3V0ZXIgYW5kIGNsb3VkIGNvbm5lY3Rpdml0eSBleGFtcGxlLAorIC0gVGhyZWFkIG5hdGl2ZSBjb21taXNzaW9uaW5nIHdpdGggTkZDIGV4YW1wbGUsCisgLSByYW5nZSBvZiBQQyB0b29scyBpbmNsdWRpbmcgYSBUaHJlYWQgVG9wb2xvZ3kgTW9uaXRvciwKKyAtIHNvZnR3YXJlIG1vZHVsZXMgaW5oZXJpdGVkIGZyb20gdGhlIG5SRjUgU0RLIGUuZy4gcGVyaXBoZXJhbCBkcml2ZXJzLCBORkMgbGlicmFyaWVzIGV0Yy4KKworIyMjIyBJbXBvcnRhbnQgbm90aWNlCisKK0R1ZSB0byBsZWdhbCByZXN0cmljdGlvbnMgc3VwcG9ydCBmb3IgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgY3J5cHRvZ3JhcGh5IHV0aWxpemluZyBBUk0gQ3J5cHRvQ2VsbC0zMTAgaXMgb25seSBhdmFpbGFibGUgaW4gbWJlZFRMUyBsaWJyYXJ5IChsaWJtYmVkY3J5cHRvLmEpIHByb3ZpZGVkIHdpdGggdGhlwqA8aT5uUkY1IFNESyBmb3IgVGhyZWFkPC9pPi4gVGhlIGxpYnJhcnkgYXZhaWxhYmxlIGluIE9wZW5UaHJlYWQgcmVwb3NpdG9yeSBkb2VzIG5vdCBzdXBwb3J0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4gWW91IGNhbiBzdGlsbCB1c2UgaXQsIGJ1dCB0aGUgY29tbWlzc2lvbmluZyBwcm9jZWR1cmUgdGFrZXMgbXVjaCBtb3JlIHRpbWUgaW4gc3VjaCBjYXNlLiBGb3IgdGhlIGJlc3QgcGVyZm9ybWFuY2UgYW5kIHVzZXIgZXhwZXJpZW5jZSwgdXNlIHRoZSBsaWJyYXJ5IHByb3ZpZGVkIHdpdGggdGhlIFNESy4KKworW25SRjUtU0RLLVRocmVhZF06IGh0dHA6Ly93d3cubm9yZGljc2VtaS5jb20vZW5nL1Byb2R1Y3RzL25SRjUtU0RLLWZvci1UaHJlYWQKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9hbGFybS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwMzNhNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9hbGFybS5jCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgYWxhcm0uCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91c2VjLWFsYXJtLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1jb25maWcuaCIKKyNpbmNsdWRlICJjbXNpcy9jb3JlX2NtRnVuYy5oIgorCisjaW5jbHVkZSA8ZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmg+CisjaW5jbHVkZSA8aGFsL25yZl9ydGMuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjZGVmaW5lIFJUQ19GUkVRVUVOQ1kgICAgICAgMzI3NjhVTEwKKworI2RlZmluZSBDRUlMX0RJVihBLCBCKSAgICAgICgoKEEpICsgKEIpIC0gMVVMTCkgLyAoQikpCisKKyNkZWZpbmUgVVNfUEVSX01TICAgICAgICAgICAxMDAwVUxMCisjZGVmaW5lIFVTX1BFUl9TICAgICAgICAgICAgMTAwMDAwMFVMTAorI2RlZmluZSBVU19QRVJfVElDSyAgICAgICAgIENFSUxfRElWKFVTX1BFUl9TLCBSVENfRlJFUVVFTkNZKQorCisjZGVmaW5lIE1TX1BFUl9TICAgICAgICAgICAgMTAwMFVMCisjZGVmaW5lIE1TX1BFUl9PVkVSRkxPVyAgICAgKDUxMlVMICogTVNfUEVSX1MpICAvLy88IFRpbWUgdGhhdCBoYXMgcGFzc2VkIGJldHdlZW4gb3ZlcmZsb3cgZXZlbnRzLiBPbiBmdWxsIFJUQyBzcGVlZCwgaXQgb2NjdXJzIGV2ZXJ5IDUxMiBzLgorCit0eXBlZGVmIGVudW0KK3sKKyAgICBrTXNUaW1lciwKKyAgICBrVXNUaW1lciwKKyAgICBrTnVtVGltZXJzCit9IEFsYXJtSW5kZXg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9sYXRpbGUgYm9vbCBtRmlyZUFsYXJtOyAgIC8vLzwgSW5mb3JtYXRpb24gZm9yIHByb2Nlc3NpbmcgZnVuY3Rpb24sIHRoYXQgYWxhcm0gc2hvdWxkIGZpcmUuCisgICAgdWludDMyX3QgICAgICBtVGFyZ2V0VGltZTsgIC8vLzwgQWxhcm0gZmlyZSB0aW1lIChpbiBtaWxsaXNlY29uZCBmb3IgTXNUaW1lciwgaW4gbWljcm9zZWNvbmQgZm9yIFVzVGltZXIpCit9IEFsYXJtRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCAgICAgICAgbUNoYW5uZWxOdW1iZXI7CisgICAgdWludDMyX3QgICAgICAgIG1Db21wYXJlRXZlbnRNYXNrOworICAgIG5yZl9ydGNfZXZlbnRfdCBtQ29tcGFyZUV2ZW50OworICAgIG5yZl9ydGNfaW50X3QgICBtQ29tcGFyZUludDsKK30gQWxhcm1DaGFubmVsRGF0YTsKKworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNUaW1lT2Zmc2V0ID0gMDsgIC8vLzwgVGltZSBvZmZzZXQgdG8ga2VlcCB0cmFjayBvZiBjdXJyZW50IHRpbWUgKGluIG1pbGxpc2Vjb25kKS4KK3N0YXRpYyBBbGFybURhdGEgc1RpbWVyRGF0YVtrTnVtVGltZXJzXTsgICAvLy88IERhdGEgb2YgdGhlIHRpbWVycy4KK3N0YXRpYyBjb25zdCBBbGFybUNoYW5uZWxEYXRhIHNDaGFubmVsRGF0YVtrTnVtVGltZXJzXSA9Cit7CisgICAgW2tNc1RpbWVyXSA9IHsKKyAgICAgICAgLm1DaGFubmVsTnVtYmVyICAgID0gMCwKKyAgICAgICAgLm1Db21wYXJlRXZlbnRNYXNrID0gUlRDX0VWVEVOX0NPTVBBUkUwX01zaywKKyAgICAgICAgLm1Db21wYXJlRXZlbnQgICAgID0gTlJGX1JUQ19FVkVOVF9DT01QQVJFXzAsCisgICAgICAgIC5tQ29tcGFyZUludCAgICAgICA9IE5SRl9SVENfSU5UX0NPTVBBUkUwX01BU0ssCisgICAgfSwKKyAgICBba1VzVGltZXJdID0geworICAgICAgICAubUNoYW5uZWxOdW1iZXIgICAgPSAxLAorICAgICAgICAubUNvbXBhcmVFdmVudE1hc2sgPSBSVENfRVZURU5fQ09NUEFSRTFfTXNrLAorICAgICAgICAubUNvbXBhcmVFdmVudCAgICAgPSBOUkZfUlRDX0VWRU5UX0NPTVBBUkVfMSwKKyAgICAgICAgLm1Db21wYXJlSW50ICAgICAgID0gTlJGX1JUQ19JTlRfQ09NUEFSRTFfTUFTSywKKyAgICB9Cit9OworCitzdGF0aWMgb3RQbGF0VXNlY0FsYXJtSGFuZGxlciBzVXNlY0hhbmRsZXIgPSBOVUxMOyAgLy8vPCBIYW5kbGVyIGNhbGxlZCB3aGVuIHVzZWMgYWxhcm0gZmlyZXMuCitzdGF0aWMgdm9pZCAqc1VzZWNDb250ZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLy8vPCBUaGUgY29udGV4dCBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gdGhlIHVzZWMgaGFuZGxlciBjYWxsYmFjay4KKworc3RhdGljIHZvaWQgSGFuZGxlT3ZlcmZsb3codm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgVGltZVRvVGlja3ModWludDMyX3QgYVRpbWUsIEFsYXJtSW5kZXggYUluZGV4KQoreworICAgIHVpbnQzMl90IHRpY2tzOworCisgICAgaWYgKGFJbmRleCA9PSBrTXNUaW1lcikKKyAgICB7CisgICAgICAgIHRpY2tzID0gKHVpbnQzMl90KUNFSUxfRElWKChhVGltZSAqIFVTX1BFUl9NUyAqIFJUQ19GUkVRVUVOQ1kpLCBVU19QRVJfUykgJiBSVENfQ0NfQ09NUEFSRV9Nc2s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRpY2tzID0gKHVpbnQzMl90KUNFSUxfRElWKChhVGltZSAqICBSVENfRlJFUVVFTkNZKSwgVVNfUEVSX1MpICYgUlRDX0NDX0NPTVBBUkVfTXNrOworICAgIH0KKworICAgIHJldHVybiB0aWNrczsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBUaWNrc1RvVGltZSh1aW50MzJfdCBhVGlja3MpCit7CisgICAgcmV0dXJuIENFSUxfRElWKChVU19QRVJfUyAqICh1aW50NjRfdClhVGlja3MpLCBSVENfRlJFUVVFTkNZKTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBBbGFybUdldEN1cnJlbnRUaW1lKCkKK3sKKyAgICB1aW50MzJfdCBydGNWYWx1ZTE7CisgICAgdWludDMyX3QgcnRjVmFsdWUyOworICAgIHVpbnQzMl90IG9mZnNldDsKKworICAgIHJ0Y1ZhbHVlMSA9IG5yZl9ydGNfY291bnRlcl9nZXQoUlRDX0lOU1RBTkNFKTsKKworICAgIF9fRE1CKCk7CisKKyAgICBvZmZzZXQgPSBzVGltZU9mZnNldDsKKworICAgIF9fRE1CKCk7CisKKyAgICBydGNWYWx1ZTIgPSBucmZfcnRjX2NvdW50ZXJfZ2V0KFJUQ19JTlNUQU5DRSk7CisKKyAgICBpZiAoKHJ0Y1ZhbHVlMiA8IHJ0Y1ZhbHVlMSkgfHwgKHJ0Y1ZhbHVlMSA9PSAwKSkKKyAgICB7CisgICAgICAgIC8vIE92ZXJmbG93IGRldGVjdGVkLiBBZGRpdGlvbmFsIGNvbmRpdGlvbiAocnRjVmFsdWUxID09IDApIGNvdmVycyBzaXR1YXRpb24gd2hlbiBvdmVyZmxvdyBvY2N1cnJlZCBpbgorICAgICAgICAvLyBpbnRlcnJ1cHQgc3RhdGUsIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdhcyBlbnRlcmVkLiBCdXQgaW4gZ2VuZXJhbCwgdGhpcyBmdW5jdGlvbiBzaGFsbCBub3QgYmUgY2FsbGVkCisgICAgICAgIC8vIGZyb20gaW50ZXJydXB0IG90aGVyIHRoYW4gYWxhcm0gaW50ZXJydXB0LgorCisgICAgICAgIC8vIFdhaXQgYXQgbGVhc3QgMjAgY3ljbGVzLCB0byBlbnN1cmUgdGhhdCBpZiBpbnRlcnJ1cHQgaXMgZ29pbmcgdG8gYmUgY2FsbGVkLCBpdCB3aWxsIGJlIGNhbGxlZCBub3cuCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fTk9QKCk7CisgICAgICAgICAgICBfX05PUCgpOworICAgICAgICAgICAgX19OT1AoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBldmVudCBmbGFnIGlzIHN0aWxsIG9uLCBpdCBtZWFucyB0aGF0IHRoZSBpbnRlcnJ1cHQgd2FzIG5vdCBjYWxsZWQsIGFzIHdlIGFyZSBpbiBpbnRlcnJ1cHQgc3RhdGUuCisgICAgICAgIGlmIChucmZfcnRjX2V2ZW50X3BlbmRpbmcoUlRDX0lOU1RBTkNFLCBOUkZfUlRDX0VWRU5UX09WRVJGTE9XKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlT3ZlcmZsb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCA9IHNUaW1lT2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBVU19QRVJfTVMgKiAodWludDY0X3Qpb2Zmc2V0ICsgVGlja3NUb1RpbWUocnRjVmFsdWUyKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBBbGFybUdldEN1cnJlbnRUaW1lUnRjUHJvdGVjdGVkKEFsYXJtSW5kZXggYUluZGV4KQoreworICAgIHVpbnQ2NF90IHVzZWNUaW1lID0gQWxhcm1HZXRDdXJyZW50VGltZSgpICsgMiAqIFVTX1BFUl9USUNLOworICAgIHVpbnQzMl90IGN1cnJlbnRUaW1lOworCisgICAgaWYgKGFJbmRleCA9PSBrTXNUaW1lcikKKyAgICB7CisgICAgICAgIGN1cnJlbnRUaW1lID0gKHVpbnQzMl90KSh1c2VjVGltZSAvIFVTX1BFUl9NUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGN1cnJlbnRUaW1lID0gKHVpbnQzMl90KXVzZWNUaW1lOworICAgIH0KKworICAgIHJldHVybiBjdXJyZW50VGltZTsKK30KKworc3RhdGljIGlubGluZSBib29sIEFsYXJtU2hhbGxTdHJpa2UodWludDMyX3QgYU5vdywgQWxhcm1JbmRleCBhSW5kZXgpCit7CisgICAgdWludDMyX3QgZGlmZiA9IGFOb3cgLSBzVGltZXJEYXRhW2FJbmRleF0ubVRhcmdldFRpbWU7CisKKyAgICAvLyBUaHJlZSBjYXNlczoKKyAgICAvLyAxKSBhTm93IGlzIGJlZm9yZSBtVGFyZ2V0VGltZSAgPT4gIERpZmZlcmVuY2UgaXMgbmVnYXRpdmUgKGxhc3QgYml0IG9mIGRpZmZlcmVuY2UgaXMgc2V0KSAgID0+IFJldHVybmluZyBmYWxzZS4KKyAgICAvLyAyKSBhTm93IGlzIHNhbWUgYXMgbVRhcmdldFRpbWUgPT4gIERpZmZlcmVuY2UgaXMgemVybyAgICAgKGxhc3QgYml0IG9mIGRpZmZlcmVuY2UgaXMgY2xlYXIpID0+IFJldHVybmluZyB0cnVlLgorICAgIC8vIDMpIGFOb3cgaXMgYWZ0ZXIgbVRhcmdldFRpbWUgICA9PiAgRGlmZmVyZW5jZSBpcyBwb3NpdGl2ZSAobGFzdCBiaXQgb2YgZGlmZmVyZW5jZSBpcyBjbGVhcikgPT4gUmV0dXJuaW5nIHRydWUuCisKKyAgICByZXR1cm4gISgoZGlmZiAmICgxVUwgPDwgMzEpKSAhPSAwKTsKK30KKworc3RhdGljIHZvaWQgSGFuZGxlQ29tcGFyZU1hdGNoKEFsYXJtSW5kZXggYUluZGV4LCBib29sIGFTa2lwQ2hlY2spCit7CisgICAgbnJmX3J0Y19ldmVudF9jbGVhcihSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlRXZlbnQpOworCisgICAgdWludDY0X3QgdXNlY1RpbWUgPSBBbGFybUdldEN1cnJlbnRUaW1lKCk7CisgICAgdWludDMyX3Qgbm93OworCisgICAgaWYgKGFJbmRleCA9PSBrTXNUaW1lcikKKyAgICB7CisgICAgICAgIG5vdyA9ICh1aW50MzJfdCkodXNlY1RpbWUgLyBVU19QRVJfTVMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBub3cgPSAodWludDMyX3QpdXNlY1RpbWU7CisgICAgfQorCisgICAgLy8gSW4gY2FzZSB0aGUgdGFyZ2V0IHRpbWUgd2FzIGxhcmdlciB0aGFuIHNpbmdsZSBvdmVyZmxvdywKKyAgICAvLyB3ZSBzaG91bGQgb25seSBzdHJpa2UgdGhlIHRpbWVyIG9uIGZpbmFsIGNvbXBhcmUgZXZlbnQuCisgICAgaWYgKGFTa2lwQ2hlY2sgfHwgQWxhcm1TaGFsbFN0cmlrZShub3csIGFJbmRleCkpCisgICAgeworICAgICAgICBucmZfcnRjX2V2ZW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbYUluZGV4XS5tQ29tcGFyZUV2ZW50TWFzayk7CisgICAgICAgIG5yZl9ydGNfaW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbYUluZGV4XS5tQ29tcGFyZUludCk7CisKKyAgICAgICAgc1RpbWVyRGF0YVthSW5kZXhdLm1GaXJlQWxhcm0gPSB0cnVlOworICAgIH0KK30KKworc3RhdGljIHZvaWQgSGFuZGxlT3ZlcmZsb3codm9pZCkKK3sKKyAgICBucmZfcnRjX2V2ZW50X2NsZWFyKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19FVkVOVF9PVkVSRkxPVyk7CisKKyAgICAvLyBJbmNyZW1lbnQgY291bnRlciBvbiBvdmVyZmxvdy4KKyAgICBzVGltZU9mZnNldCA9IHNUaW1lT2Zmc2V0ICsgTVNfUEVSX09WRVJGTE9XOworfQorCitzdGF0aWMgdm9pZCBBbGFybVN0YXJ0QXQodWludDMyX3QgYVRhcmdldFRpbWUsIEFsYXJtSW5kZXggYUluZGV4KQoreworICAgIHVpbnQzMl90IHRhcmdldENvdW50ZXI7CisgICAgdWludDMyX3Qgbm93OworCisgICAgbnJmX3J0Y19pbnRfZGlzYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlSW50KTsKKyAgICBucmZfcnRjX2V2ZW50X2VuYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlRXZlbnRNYXNrKTsKKworICAgIHNUaW1lckRhdGFbYUluZGV4XS5tVGFyZ2V0VGltZSA9IGFUYXJnZXRUaW1lOworCisgICAgdGFyZ2V0Q291bnRlciA9IFRpbWVUb1RpY2tzKHNUaW1lckRhdGFbYUluZGV4XS5tVGFyZ2V0VGltZSwgYUluZGV4KTsKKworICAgIG5yZl9ydGNfY2Nfc2V0KFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2FJbmRleF0ubUNoYW5uZWxOdW1iZXIsIHRhcmdldENvdW50ZXIpOworCisgICAgbm93ID0gQWxhcm1HZXRDdXJyZW50VGltZVJ0Y1Byb3RlY3RlZChhSW5kZXgpOworCisgICAgaWYgKEFsYXJtU2hhbGxTdHJpa2Uobm93LCBhSW5kZXgpKQorICAgIHsKKyAgICAgICAgSGFuZGxlQ29tcGFyZU1hdGNoKGFJbmRleCwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9ydGNfaW50X2VuYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlSW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEFsYXJtU3RvcChBbGFybUluZGV4IGFJbmRleCkKK3sKKyAgICBucmZfcnRjX2V2ZW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbYUluZGV4XS5tQ29tcGFyZUV2ZW50TWFzayk7CisgICAgbnJmX3J0Y19pbnRfZGlzYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVthSW5kZXhdLm1Db21wYXJlSW50KTsKKyAgICBucmZfcnRjX2V2ZW50X2NsZWFyKFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2FJbmRleF0ubUNvbXBhcmVFdmVudCk7CisKKyAgICBzVGltZXJEYXRhW2FJbmRleF0ubUZpcmVBbGFybSA9IGZhbHNlOworfQorCit2b2lkIG5yZjVBbGFybUluaXQodm9pZCkKK3sKKyAgICBzVGltZU9mZnNldCA9IDA7CisgICAgbWVtc2V0KHNUaW1lckRhdGEsIDAsIHNpemVvZihzVGltZXJEYXRhKSk7CisKKyAgICAvLyBTZXR1cCBsb3cgZnJlcXVlbmN5IGNsb2NrLgorICAgIG5yZl9kcnZfY2xvY2tfbGZjbGtfcmVxdWVzdChOVUxMKTsKKworICAgIHdoaWxlICghbnJmX2Rydl9jbG9ja19sZmNsa19pc19ydW5uaW5nKCkpIHt9CisKKyAgICAvLyBTZXR1cCBSVEMgdGltZXIuCisgICAgTlZJQ19TZXRQcmlvcml0eShSVENfSVJRTiwgUlRDX0lSUV9QUklPUklUWSk7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUlRDX0lSUU4pOworICAgIE5WSUNfRW5hYmxlSVJRKFJUQ19JUlFOKTsKKworICAgIG5yZl9ydGNfcHJlc2NhbGVyX3NldChSVENfSU5TVEFOQ0UsIDApOworCisgICAgbnJmX3J0Y19ldmVudF9jbGVhcihSVENfSU5TVEFOQ0UsIE5SRl9SVENfRVZFTlRfT1ZFUkZMT1cpOworICAgIG5yZl9ydGNfZXZlbnRfZW5hYmxlKFJUQ19JTlNUQU5DRSwgUlRDX0VWVEVOX09WUkZMV19Nc2spOworICAgIG5yZl9ydGNfaW50X2VuYWJsZShSVENfSU5TVEFOQ0UsIE5SRl9SVENfSU5UX09WRVJGTE9XX01BU0spOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGtOdW1UaW1lcnM7IGkrKykKKyAgICB7CisgICAgICAgIG5yZl9ydGNfZXZlbnRfY2xlYXIoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbaV0ubUNvbXBhcmVFdmVudCk7CisgICAgICAgIG5yZl9ydGNfZXZlbnRfZGlzYWJsZShSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVtpXS5tQ29tcGFyZUV2ZW50TWFzayk7CisgICAgICAgIG5yZl9ydGNfaW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbaV0ubUNvbXBhcmVJbnQpOworICAgIH0KKworICAgIG5yZl9ydGNfdGFza190cmlnZ2VyKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19UQVNLX1NUQVJUKTsKK30KKwordm9pZCBucmY1QWxhcm1EZWluaXQodm9pZCkKK3sKKyAgICBucmZfcnRjX3Rhc2tfdHJpZ2dlcihSVENfSU5TVEFOQ0UsIE5SRl9SVENfVEFTS19TVE9QKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrTnVtVGltZXJzOyBpKyspCisgICAgeworICAgICAgICBucmZfcnRjX2V2ZW50X2NsZWFyKFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2ldLm1Db21wYXJlRXZlbnQpOworICAgICAgICBucmZfcnRjX2V2ZW50X2Rpc2FibGUoUlRDX0lOU1RBTkNFLCBzQ2hhbm5lbERhdGFbaV0ubUNvbXBhcmVFdmVudE1hc2spOworICAgICAgICBucmZfcnRjX2ludF9kaXNhYmxlKFJUQ19JTlNUQU5DRSwgc0NoYW5uZWxEYXRhW2ldLm1Db21wYXJlSW50KTsKKyAgICB9CisKKyAgICBucmZfcnRjX2ludF9kaXNhYmxlKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19JTlRfT1ZFUkZMT1dfTUFTSyk7CisgICAgbnJmX3J0Y19ldmVudF9kaXNhYmxlKFJUQ19JTlNUQU5DRSwgUlRDX0VWVEVOX09WUkZMV19Nc2spOworICAgIG5yZl9ydGNfZXZlbnRfY2xlYXIoUlRDX0lOU1RBTkNFLCBOUkZfUlRDX0VWRU5UX09WRVJGTE9XKTsKKworICAgIE5WSUNfRGlzYWJsZUlSUShSVENfSVJRTik7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUlRDX0lSUU4pOworICAgIE5WSUNfU2V0UHJpb3JpdHkoUlRDX0lSUU4sIDApOworCisgICAgbnJmX2Rydl9jbG9ja19sZmNsa19yZWxlYXNlKCk7Cit9CisKK3ZvaWQgbnJmNUFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKHNUaW1lckRhdGFba01zVGltZXJdLm1GaXJlQWxhcm0pCisgICAgeworICAgICAgICBzVGltZXJEYXRhW2tNc1RpbWVyXS5tRmlyZUFsYXJtID0gZmFsc2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdBbGFybUZpcmVkKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdEFsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzVGltZXJEYXRhW2tVc1RpbWVyXS5tRmlyZUFsYXJtKQorICAgIHsKKyAgICAgICAgc1RpbWVyRGF0YVtrVXNUaW1lcl0ubUZpcmVBbGFybSA9IGZhbHNlOworCisgICAgICAgIHNVc2VjSGFuZGxlcihzVXNlY0NvbnRleHQpOworICAgIH0KK30KKwordWludDMyX3Qgb3RQbGF0QWxhcm1HZXROb3codm9pZCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KShBbGFybUdldEN1cnJlbnRUaW1lKCkgLyBVU19QRVJfTVMpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFUMCwgdWludDMyX3QgYUR0KQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCB0YXJnZXRUaW1lID0gYVQwICsgYUR0OworCisgICAgQWxhcm1TdGFydEF0KHRhcmdldFRpbWUsIGtNc1RpbWVyKTsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIEFsYXJtU3RvcChrTXNUaW1lcik7Cit9CisKK3VpbnQzMl90IG90UGxhdFVzZWNBbGFybUdldE5vdyh2b2lkKQoreworICAgIHJldHVybiAodWludDMyX3QpQWxhcm1HZXRDdXJyZW50VGltZSgpOworfQorCit2b2lkIG90UGxhdFVzZWNBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdFBsYXRVc2VjQWxhcm1IYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgdWludDMyX3QgdGFyZ2V0VGltZSA9IGFUMCArIGFEdDsKKworICAgIEFsYXJtU3RhcnRBdCh0YXJnZXRUaW1lLCBrVXNUaW1lcik7CisKKyAgICBzVXNlY0hhbmRsZXIgPSBhSGFuZGxlcjsKKyAgICBzVXNlY0NvbnRleHQgPSBhQ29udGV4dDsKK30KKwordm9pZCBvdFBsYXRVc2VjQWxhcm1TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBBbGFybVN0b3Aoa1VzVGltZXIpOworfQorCit2b2lkIFJUQ19JUlFfSEFORExFUih2b2lkKQoreworICAgIC8vIEhhbmRsZSBvdmVyZmxvdy4KKyAgICBpZiAobnJmX3J0Y19ldmVudF9wZW5kaW5nKFJUQ19JTlNUQU5DRSwgTlJGX1JUQ19FVkVOVF9PVkVSRkxPVykpCisgICAgeworICAgICAgICBIYW5kbGVPdmVyZmxvdygpOworICAgIH0KKworICAgIC8vIEhhbmRsZSBjb21wYXJlIG1hdGNoLgorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrTnVtVGltZXJzOyBpKyspCisgICAgeworICAgICAgICBpZiAobnJmX3J0Y19pbnRfaXNfZW5hYmxlZChSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVtpXS5tQ29tcGFyZUludCkgJiYKKyAgICAgICAgICAgIG5yZl9ydGNfZXZlbnRfcGVuZGluZyhSVENfSU5TVEFOQ0UsIHNDaGFubmVsRGF0YVtpXS5tQ29tcGFyZUV2ZW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlQ29tcGFyZU1hdGNoKChBbGFybUluZGV4KWksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9jcnlwdG8vbnJmNTI4NDAtbWJlZHRscy1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9jcnlwdG8vbnJmNTI4NDAtbWJlZHRscy1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJiOGRkCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2NyeXB0by9ucmY1Mjg0MC1tYmVkdGxzLWNvbmZpZy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpZiBkZWZpbmVkKF9fSUNDQVJNX18pCisgICAgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcz1QZTU0OSIpCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvY3J5cHRvL3NoYTI1Nl9hbHQuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9jcnlwdG8vc2hhMjU2X2FsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjMzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvY3J5cHRvL3NoYTI1Nl9hbHQuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNQkVEVExTX1NIQTI1Nl9BTFRfSAorI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9BTFRfSAorCisjaWZkZWYgTUJFRFRMU19TSEEyNTZfQUxUCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTI1NiBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHVuaW9uCit7CisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLworICAgICAgICB1aW50MzJfdCBzdGF0ZVs4XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworICAgICAgICBpbnQgaXMyMjQ7ICAgICAgICAgICAgICAgICAgLyohPCAwID0+IFNIQS0yNTYsIGVsc2UgU0hBLTIyNCAqLworICAgIH07CisgICAgdWludDhfdCByZXNlcnZlZFsyNTZdOworfQorbWJlZHRsc19zaGEyNTZfY29udGV4dDsKKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2luaXQobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4KTsKKworLyoqCisgKiBAYnJpZWYgQ2xlYXIgU0hBLTI1NiBjb250ZXh0CisgKgorICogQHBhcmFtIFtpbixvdXRdIGN0eCBTSEEtMjU2IGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZyZWUobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4KTsKKworLyoqCisgKiBAYnJpZWYgQ2xvbmUgKHRoZSBzdGF0ZSBvZikgYSBTSEEtMjU2IGNvbnRleHQKKyAqCisgKiBAcGFyYW0gW291dF0gZHN0IFRoZSBkZXN0aW5hdGlvbiBjb250ZXh0CisgKiBAcGFyYW0gW2luXSBzcmMgVGhlIGNvbnRleHQgdG8gYmUgY2xvbmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfY2xvbmUobWJlZHRsc19zaGEyNTZfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpzcmMpOworCisvKioKKyAqIEBicmllZiBTSEEtMjU2IGNvbnRleHQgc2V0dXAKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBwYXJhbSBbaW5dIGlzMjI0IDAgPSB1c2UgU0hBMjU2LCAxID0gdXNlIFNIQTIyNAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyhtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGludCBpczIyNCk7CisKKy8qKgorICogQGJyaWVmIFNIQS0yNTYgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBAcGFyYW0gW2luLG91dF0gY3R4IFNIQS0yNTYgY29udGV4dAorICogQHBhcmFtIFtpbl0gaW5wdXQgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBAcGFyYW0gW2luXSBpbGVuIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZShtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbik7CisKKy8qKgorICogQGJyaWVmIFNIQS0yNTYgZmluYWwgZGlnZXN0CisgKgorICogQHBhcmFtIFtpbixvdXRdIGN0eCBTSEEtMjU2IGNvbnRleHQKKyAqIEBwYXJhbSBbb3V0XSBvdXRwdXQgU0hBLTIyNC8yNTYgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZmluaXNoKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMzJdKTsKKworLyogSW50ZXJuYWwgdXNlICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MobWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0FMVCAqLworCisvKiBNQkVEVExTX1NIQTI1Nl9BTFQgd2FzIHVzZWQgdG8gcmVkaWZpbmUgY29udGV4dCBzdHJ1Y3R1cmUuIFVuZGVmaW5lIGl0IG5vdyB0byBlbmFibGUgZGVmYXVsdCBtYmVkVExTIGltcGxlbWVudGF0aW9uLiAqLworI3VuZGVmIE1CRURUTFNfU0hBMjU2X0FMVAorCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9kaWFnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZGlhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmYzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZGlhZy5jCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlIDxjb21tb24vbG9nZ2luZy5ocHA+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCitzdHJ1Y3QgUGxhdGZvcm1EaWFnQ29tbWFuZAoreworICAgIGNvbnN0IGNoYXIgKm1OYW1lOworICAgIHZvaWQgKCptQ29tbWFuZCkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZQoreworICAgIGNvbnN0IGNoYXIgbU1lc3NhZ2VEZXNjcmlwdG9yWzExXTsKKyAgICB1aW50OF90IG1DaGFubmVsOworICAgIGludDE2X3QgbUlEOworICAgIHVpbnQzMl90IG1DbnQ7Cit9OworCisvKioKKyAqIERpYWdub3N0aWNzIG1vZGUgdmFyaWFibGVzLgorICoKKyAqLworc3RhdGljIGJvb2wgc0RpYWdNb2RlID0gZmFsc2U7CitzdGF0aWMgYm9vbCBzTGlzdGVuID0gZmFsc2U7CitzdGF0aWMgYm9vbCBzVHJhbnNtaXRBY3RpdmUgPSBmYWxzZTsKK3N0YXRpYyB1aW50OF90IHNDaGFubmVsID0gMjA7CitzdGF0aWMgaW50OF90IHNUeFBvd2VyID0gMDsKK3N0YXRpYyB1aW50MzJfdCBzVHhQZXJpb2QgPSAxOworc3RhdGljIGludDMyX3Qgc1R4Q291bnQgPSAwOworc3RhdGljIGludDMyX3Qgc1R4UmVxdWVzdGVkQ291bnQgPSAxOworc3RhdGljIGludDE2X3Qgc0lEID0gLTE7CitzdGF0aWMgc3RydWN0IFBsYXRmb3JtRGlhZ01lc3NhZ2Ugc0RpYWdNZXNzYWdlID0gey5tTWVzc2FnZURlc2NyaXB0b3IgPSAiRGlhZ01lc3NhZ2UiLCAubUNoYW5uZWwgPSAwLCAubUlEID0gMCwgLm1DbnQgPSAwfTsKKworc3RhdGljIG90RXJyb3IgcGFyc2VMb25nKGNoYXIgKmFyZ3YsIGxvbmcgKmFWYWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgKmFWYWx1ZSA9IHN0cnRvbChhcmd2LCAmZW5kcHRyLCAwKTsKKyAgICByZXR1cm4gKCplbmRwdHIgPT0gJ1wwJykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfUEFSU0U7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZEVycm9yUmVzdWx0KG90RXJyb3IgYUVycm9yLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBpZiAoYUVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiZmFpbGVkXHJcbnN0YXR1cyAlI3hcclxuIiwgYUVycm9yKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NMaXN0ZW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImxpc3RlbjogJXNcclxuIiwgc0xpc3RlbiA9PSB0cnVlID8gInllcyIgOiAibm8iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBlcnJvciA9IHBhcnNlTG9uZyhhcmd2WzBdLCAmdmFsdWUpOworICAgICAgICBvdEVYUEVDVChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgc0xpc3RlbiA9IChib29sKSh2YWx1ZSk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZXQgbGlzdGVuIHRvICVzXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc0xpc3RlbiA9PSB0cnVlID8gInllcyIgOiAibm8iLCBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIGFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc0lEKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgIklEOiAlIiBQUklkMTYgIlxyXG4iLCBzSUQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIGVycm9yID0gcGFyc2VMb25nKGFyZ3ZbMF0sICZ2YWx1ZSk7CisgICAgICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04odmFsdWUgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzSUQgPSAoaW50MTZfdCkodmFsdWUpOworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAic2V0IElEIHRvICUiIFBSSWQxNiAiXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc0lELCBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIGFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc1RyYW5zbWl0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90RVhQRUNUX0FDVElPTihvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJ0cmFuc21pdCB3aWxsIHNlbmQgJSIgUFJJZDMyICIgZGlhZ25vc3RpYyBtZXNzYWdlcyB3aXRoICUiIFBSSXUzMgorICAgICAgICAgICAgICAgICAiIG1zIGludGVydmFsXHJcbnN0YXR1cyAweCUwMnhcclxuIiwKKyAgICAgICAgICAgICAgICAgc1R4UmVxdWVzdGVkQ291bnQsIHNUeFBlcmlvZCwgZXJyb3IpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RQbGF0QWxhcm1TdG9wKGFJbnN0YW5jZSk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJkaWFnbm9zdGljIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIGlzIHN0b3BwZWRcclxuc3RhdHVzIDB4JTAyeFxyXG4iLCBlcnJvcik7CisgICAgICAgIHNUcmFuc21pdEFjdGl2ZSA9IGZhbHNlOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0YXJ0IikgPT0gMCkKKyAgICB7CisgICAgICAgIG90UGxhdEFsYXJtU3RvcChhSW5zdGFuY2UpOworICAgICAgICBzVHJhbnNtaXRBY3RpdmUgPSB0cnVlOworICAgICAgICBzVHhDb3VudCA9IHNUeFJlcXVlc3RlZENvdW50OworICAgICAgICB1aW50MzJfdCBub3cgPSBvdFBsYXRBbGFybUdldE5vdygpOworICAgICAgICBvdFBsYXRBbGFybVN0YXJ0QXQoYUluc3RhbmNlLCBub3csIHNUeFBlcmlvZCk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZW5kaW5nICUiIFBSSWQzMiAiIGRpYWdub3N0aWMgbWVzc2FnZXMgd2l0aCAlIiBQUkl1MzIKKyAgICAgICAgICAgICAgICAgIiBtcyBpbnRlcnZhbFxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsCisgICAgICAgICAgICAgICAgIHNUeFJlcXVlc3RlZENvdW50LCBzVHhQZXJpb2QsIGVycm9yKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJpbnRlcnZhbCIpID09IDApCisgICAgeworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIG90RVhQRUNUX0FDVElPTihhcmdjID09IDIsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBlcnJvciA9IHBhcnNlTG9uZyhhcmd2WzFdLCAmdmFsdWUpOworICAgICAgICBvdEVYUEVDVChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHZhbHVlID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzVHhQZXJpb2QgPSAodWludDMyX3QpKHZhbHVlKTsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInNldCBkaWFnbm9zdGljIG1lc3NhZ2VzIGludGVydmFsIHRvICUiIFBSSXUzMiAiIG1zXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc1R4UGVyaW9kLAorICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiY291bnQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oYXJnYyA9PSAyLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAgICAgZXJyb3IgPSBwYXJzZUxvbmcoYXJndlsxXSwgJnZhbHVlKTsKKyAgICAgICAgb3RFWFBFQ1QoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgIG90RVhQRUNUX0FDVElPTigodmFsdWUgPiAwKSB8fCAodmFsdWUgPT0gLTEpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIHNUeFJlcXVlc3RlZENvdW50ID0gKHVpbnQzMl90KSh2YWx1ZSk7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzZXQgZGlhZ25vc3RpYyBtZXNzYWdlcyBjb3VudCB0byAlIiBQUklkMzIgIlxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsIHNUeFJlcXVlc3RlZENvdW50LAorICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIGFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKworY29uc3Qgc3RydWN0IFBsYXRmb3JtRGlhZ0NvbW1hbmQgc0NvbW1hbmRzW10gPQoreworICAgIHsibGlzdGVuIiwgJnByb2Nlc3NMaXN0ZW4gfSwKKyAgICB7InRyYW5zbWl0IiwgJnByb2Nlc3NUcmFuc21pdCB9LAorICAgIHsiaWQiLCAmcHJvY2Vzc0lEIH0KK307CisKK3ZvaWQgb3RQbGF0RGlhZ1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICB1aW50MzJfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoYXJndlswXSwgc0NvbW1hbmRzW2ldLm1OYW1lKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzQ29tbWFuZHNbaV0ubUNvbW1hbmQoYUluc3RhbmNlLCBhcmdjIC0gMSwgYXJnYyA+IDEgPyAmYXJndlsxXSA6IE5VTEwsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA9PSBzaXplb2Yoc0NvbW1hbmRzKSAvIHNpemVvZihzQ29tbWFuZHNbMF0pKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImRpYWcgZmVhdHVyZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWRcclxuIiwgYXJndlswXSk7CisgICAgfQorfQorCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCit7CisgICAgc0RpYWdNb2RlID0gYU1vZGU7Cit9CisKK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQoKQoreworICAgIHJldHVybiBzRGlhZ01vZGU7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBzQ2hhbm5lbCA9IGFDaGFubmVsOworfQorCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcikKK3sKKyAgICBzVHhQb3dlciA9IGFUeFBvd2VyOworfQorCit2b2lkIG90UGxhdERpYWdSYWRpb1JlY2VpdmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBpZiAoc0xpc3RlbiAmJiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpKQorICAgIHsKKyAgICAgICAgaWYgKGFGcmFtZS0+bUxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IFBsYXRmb3JtRGlhZ01lc3NhZ2UpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZSAqbWVzc2FnZSA9IChzdHJ1Y3QgUGxhdGZvcm1EaWFnTWVzc2FnZSAqKWFGcmFtZS0+bVBzZHU7CisKKyAgICAgICAgICAgIGlmIChzdHJuY21wKG1lc3NhZ2UtPm1NZXNzYWdlRGVzY3JpcHRvciwgIkRpYWdNZXNzYWdlIiwgMTEpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0TG9nKE9UX0xPR19MRVZFTF9ERUJHLCBPVF9MT0dfUkVHSU9OX1BMQVRGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAie1wiRnJhbWVcIjp7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJMb2NhbENoYW5uZWxcIjoldSAsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJSZW1vdGVDaGFubmVsXCI6JXUsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJDTlRcIjolIiBQUkl1MzIgIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIkxvY2FsSURcIjolIiBQUklkMTYgIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIlJlbW90ZUlEXCI6JSIgUFJJZDE2ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJSU1NJXCI6JWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ9fVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhRnJhbWUtPm1DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5tQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+bUNudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5tSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZS0+bVBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKHNUcmFuc21pdEFjdGl2ZSkKKyAgICB7CisgICAgICAgIGlmICgoc1R4Q291bnQgPiAwKSB8fCAoc1R4Q291bnQgPT0gLTEpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFJhZGlvRnJhbWUgKnNUeFBhY2tldCA9IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoYUluc3RhbmNlKTsKKworICAgICAgICAgICAgc1R4UGFja2V0LT5tTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBQbGF0Zm9ybURpYWdNZXNzYWdlKTsKKyAgICAgICAgICAgIHNUeFBhY2tldC0+bUNoYW5uZWwgPSBzQ2hhbm5lbDsKKyAgICAgICAgICAgIHNUeFBhY2tldC0+bVBvd2VyID0gc1R4UG93ZXI7CisKKyAgICAgICAgICAgIHNEaWFnTWVzc2FnZS5tQ2hhbm5lbCA9IHNUeFBhY2tldC0+bUNoYW5uZWw7CisgICAgICAgICAgICBzRGlhZ01lc3NhZ2UubUlEID0gc0lEOworCisgICAgICAgICAgICBtZW1jcHkoc1R4UGFja2V0LT5tUHNkdSwgJnNEaWFnTWVzc2FnZSwgc2l6ZW9mKHN0cnVjdCBQbGF0Zm9ybURpYWdNZXNzYWdlKSk7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1RyYW5zbWl0KGFJbnN0YW5jZSwgc1R4UGFja2V0KTsKKworICAgICAgICAgICAgc0RpYWdNZXNzYWdlLm1DbnQrKzsKKworICAgICAgICAgICAgaWYgKHNUeENvdW50ICE9IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNUeENvdW50LS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgICAgICBvdFBsYXRBbGFybVN0YXJ0QXQoYUluc3RhbmNlLCBub3csIHNUeFBlcmlvZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzVHJhbnNtaXRBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG90UGxhdEFsYXJtU3RvcChhSW5zdGFuY2UpOworICAgICAgICAgICAgb3RQbGF0TG9nKE9UX0xPR19MRVZFTF9ERUJHLCBPVF9MT0dfUkVHSU9OX1BMQVRGT1JNLCAiVHJhbnNtaXQgZG9uZSIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTgyYTJlCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2ZsYXNoLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8dXRpbHMvZmxhc2guaD4KKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1ucmY1LmgiCisKK2V4dGVybiB1aW50MzJfdCBfX2ZsYXNoX2RhdGFfc3RhcnQ7CitleHRlcm4gdWludDMyX3QgX19mbGFzaF9kYXRhX2VuZDsKKworI2RlZmluZSBGTEFTSF9QQUdFX0FERFJfTUFTSyAweEZGRkZGMDAwCisjZGVmaW5lIEZMQVNIX1BBR0VfU0laRSAgICAgIDQwOTYKKyNkZWZpbmUgRkxBU0hfU1RBUlRfQUREUiAgICAgKCh1aW50MzJfdCkmX19mbGFzaF9kYXRhX3N0YXJ0KQorI2RlZmluZSBGTEFTSF9FTkRfQUREUiAgICAgICAoKHVpbnQzMl90KSZfX2ZsYXNoX2RhdGFfZW5kKQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG1hcEFkZHJlc3ModWludDMyX3QgYUFkZHJlc3MpCit7CisgICAgcmV0dXJuIGFBZGRyZXNzICsgRkxBU0hfU1RBUlRfQUREUjsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKQoreworICAgIC8vIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQuCisgICAgYXNzZXJ0KChGTEFTSF9TVEFSVF9BRERSICUgRkxBU0hfUEFHRV9TSVpFKSA9PSAwKTsKKyAgICBhc3NlcnQoKEZMQVNIX0VORF9BRERSICUgRkxBU0hfUEFHRV9TSVpFKSA9PSAwKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoR2V0U2l6ZSh2b2lkKQoreworICAgIHJldHVybiBGTEFTSF9FTkRfQUREUiAtIEZMQVNIX1NUQVJUX0FERFI7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaEVyYXNlUGFnZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oYUFkZHJlc3MgPCB1dGlsc0ZsYXNoR2V0U2l6ZSgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IG5yZjVGbGFzaFBhZ2VFcmFzZShtYXBBZGRyZXNzKGFBZGRyZXNzICYgRkxBU0hfUEFHRV9BRERSX01BU0spKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0JVU1k7CisKKyAgICBpZiAoYVRpbWVvdXQgPT0gMCkKKyAgICB7CisgICAgICAgIGlmICghbnJmNUZsYXNoSXNCdXN5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50MzJfdCBzdGFydFRpbWUgPSBvdFBsYXRBbGFybUdldE5vdygpOworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbnJmNUZsYXNoSXNCdXN5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChvdFBsYXRBbGFybUdldE5vdygpIC0gc3RhcnRUaW1lIDwgYVRpbWVvdXQpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICBvdEVYUEVDVChhRGF0YSk7CisgICAgb3RFWFBFQ1QoYUFkZHJlc3MgPCB1dGlsc0ZsYXNoR2V0U2l6ZSgpKTsKKyAgICBvdEVYUEVDVChhU2l6ZSk7CisKKyAgICByZXN1bHQgPSBucmY1Rmxhc2hXcml0ZShtYXBBZGRyZXNzKGFBZGRyZXNzKSwgYURhdGEsIGFTaXplKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgICAgb3RFWFBFQ1QoYURhdGEpOworICAgIG90RVhQRUNUKGFBZGRyZXNzIDwgdXRpbHNGbGFzaEdldFNpemUoKSk7CisKKyAgICBtZW1jcHkoYURhdGEsICh1aW50OF90ICopbWFwQWRkcmVzcyhhQWRkcmVzcyksIGFTaXplKTsKKyAgICByZXN1bHQgPSBhU2l6ZTsKKworZXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2ZsYXNoX25vc2QuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9mbGFzaF9ub3NkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4YThkNwotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9mbGFzaF9ub3NkLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlIDx1dGlscy9mbGFzaC5oPgorCisjaW5jbHVkZSAiaGFsL25yZl9udm1jLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorCitvdEVycm9yIG5yZjVGbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICBucmZfbnZtY19wYWdlX2VyYXNlKGFBZGRyZXNzKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitib29sIG5yZjVGbGFzaElzQnVzeSh2b2lkKQoreworICAgIHJldHVybiBOUkZfTlZNQy0+UkVBRFkgIT0gTlZNQ19SRUFEWV9SRUFEWV9SZWFkeTsKK30KKwordWludDMyX3QgbnJmNUZsYXNoV3JpdGUodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICBucmZfbnZtY193cml0ZV9ieXRlcyhhQWRkcmVzcywgYURhdGEsIGFTaXplKTsKKyAgICByZXR1cm4gYVNpemU7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZmxhc2hfc2QuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9mbGFzaF9zZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWQzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvZmxhc2hfc2QuYwpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKworI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKyNpbmNsdWRlIDx1dGlscy9mbGFzaC5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorI2luY2x1ZGUgInNvZnRkZXZpY2UuaCIKKworI2RlZmluZSBNSU4oYSwgYikgICAgICAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgRkxBU0hfUEFHRV9TSVpFICA0MDk2CisjZGVmaW5lIEZMQVNIX1RJTUVPVVQgICAgMTAwMAorCit0eXBlZGVmIGVudW0geworICAgIEZMQVNIX1NUQVRVU19JRExFLAorICAgIEZMQVNIX1NUQVRVU19QRU5ESU5HLAorICAgIEZMQVNIX1NUQVRVU19TVUNDRVNTLAorICAgIEZMQVNIX1NUQVRVU19GQUlMRUQKK30gU2RGbGFzaFN0YXR1czsKKworc3RhdGljIHZvbGF0aWxlIFNkRmxhc2hTdGF0dXMgc0ZsYXNoU3RhdHVzOworCit2b2lkIG5yZjVTZFNvY0ZsYXNoUHJvY2Vzcyh1aW50MzJfdCBhRXZ0SWQpCit7CisgICAgc3dpdGNoIChhRXZ0SWQpCisgICAgeworICAgIGNhc2UgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fU1VDQ0VTUzoKKyAgICAgICAgaWYgKHNGbGFzaFN0YXR1cyA9PSBGTEFTSF9TVEFUVVNfUEVORElORykKKyAgICAgICAgeworICAgICAgICAgICAgc0ZsYXNoU3RhdHVzID0gRkxBU0hfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fRVJST1I6CisgICAgICAgIGlmIChzRmxhc2hTdGF0dXMgPT0gRkxBU0hfU1RBVFVTX1BFTkRJTkcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNGbGFzaFN0YXR1cyA9IEZMQVNIX1NUQVRVU19GQUlMRUQ7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIG90RXJyb3Igc2RGbGFzaFNpbmdsZVdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgdWludDMyX3QgcmV0dmFsOworICAgIHVpbnQzMl90IHN0YXJ0VGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisKKyAgICAvLyBFeHBlY3QgU290ZkRldmljZSBGbGFzaCBDb21wbGV0ZSBldmVudC4KKyAgICBzRmxhc2hTdGF0dXMgPSBGTEFTSF9TVEFUVVNfUEVORElORzsKKworICAgIHJldHZhbCA9IHNkX2ZsYXNoX3dyaXRlKCh1aW50MzJfdCAqKWFBZGRyZXNzLCAodWludDMyX3QgKilhRGF0YSwgYVNpemUpOworCisgICAgaWYgKHJldHZhbCA9PSBOUkZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIC8vIFdhaXQgZm9yIFNvZnREZXZpY2UgRmxhc2ggQ29tcGxldGUgZXZlbnQuCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzRmxhc2hTdGF0dXMgIT0gRkxBU0hfU1RBVFVTX1BFTkRJTkcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG90UGxhdEFsYXJtR2V0Tm93KCkgLSBzdGFydFRpbWUgPCBGTEFTSF9USU1FT1VUKTsKKworICAgICAgICBpZiAoc0ZsYXNoU3RhdHVzICE9IEZMQVNIX1NUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR2YWwgPSBOUkZfRVJST1JfSU5URVJOQUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzRmxhc2hTdGF0dXMgPSBGTEFTSF9TVEFUVVNfSURMRTsKKworICAgIHJldHVybiBucmY1U2RFcnJvclRvT3RFcnJvcihyZXR2YWwpOworfQorCitvdEVycm9yIG5yZjVGbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCBhQWRkcmVzcykKK3sKKyAgICB1aW50MzJfdCByZXR2YWw7CisgICAgdWludDMyX3Qgc3RhcnRUaW1lID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKworICAgIC8vIEV4cGVjdCBTb3RmRGV2aWNlIEZsYXNoIENvbXBsZXRlIGV2ZW50LgorICAgIHNGbGFzaFN0YXR1cyA9IEZMQVNIX1NUQVRVU19QRU5ESU5HOworCisgICAgcmV0dmFsID0gc2RfZmxhc2hfcGFnZV9lcmFzZShhQWRkcmVzcyAvIEZMQVNIX1BBR0VfU0laRSk7CisKKyAgICBpZiAocmV0dmFsID09IE5SRl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgU29mdERldmljZSBGbGFzaCBDb21wbGV0ZSBldmVudC4KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNGbGFzaFN0YXR1cyAhPSBGTEFTSF9TVEFUVVNfUEVORElORykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAob3RQbGF0QWxhcm1HZXROb3coKSAtIHN0YXJ0VGltZSA8IEZMQVNIX1RJTUVPVVQpOworCisgICAgICAgIGlmIChzRmxhc2hTdGF0dXMgIT0gRkxBU0hfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IE5SRl9FUlJPUl9JTlRFUk5BTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNGbGFzaFN0YXR1cyA9IEZMQVNIX1NUQVRVU19JRExFOworCisgICAgcmV0dXJuIG5yZjVTZEVycm9yVG9PdEVycm9yKHJldHZhbCk7Cit9CisKK2Jvb2wgbnJmNUZsYXNoSXNCdXN5KHZvaWQpCit7CisgICAgcmV0dXJuIHNGbGFzaFN0YXR1cyAhPSBGTEFTSF9TVEFUVVNfSURMRTsKK30KKwordWludDMyX3QgbnJmNUZsYXNoV3JpdGUodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSkKK3sKKyAgICBvdEVycm9yICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICB1aW50MzJfdCByZW1haW5kZXIgPSAoYUFkZHJlc3MgJSBzaXplb2YodWludDMyX3QpKTsKKyAgICB1aW50MzJfdCBibG9ja1NpemU7CisgICAgdWludDMyX3QgYmxvY2tWYWx1ZTsKKworICAgIG90RVhQRUNUKHNGbGFzaFN0YXR1cyA9PSBGTEFTSF9TVEFUVVNfSURMRSk7CisKKyAgICAvLyBDaGVjayBpZiBAcCBhQWRkcmVzcyBpcyBhbGlnbmVkIHRvIGZ1bGwgd29yZCBzaXplLiBJZiBub3QsIG1ha2UgYWRkaXRpb25hbAorICAgIC8vIGZsYXNoIHdyaXRlIGF0IHRoZSBiZWdpbm5pbmcuCisgICAgaWYgKHJlbWFpbmRlcikKKyAgICB7CisgICAgICAgIGJsb2NrU2l6ZSAgPSBNSU4oKHNpemVvZih1aW50MzJfdCkgLSByZW1haW5kZXIpLCBhU2l6ZSk7CisgICAgICAgIGJsb2NrVmFsdWUgPSAweGZmZmZmZmZmOworCisgICAgICAgIG1lbWNweSgodWludDhfdCAqKSZibG9ja1ZhbHVlICsgcmVtYWluZGVyLCBhRGF0YSwgYmxvY2tTaXplKTsKKworICAgICAgICBlcnJvciA9IHNkRmxhc2hTaW5nbGVXcml0ZShhQWRkcmVzcyAtIHJlbWFpbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmYmxvY2tWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJsb2NrVmFsdWUpIC8gc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgb3RFWFBFQ1QoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICAgICAgYUFkZHJlc3MgKz0gYmxvY2tTaXplOworICAgICAgICBhRGF0YSAgICArPSBibG9ja1NpemU7CisgICAgICAgIGFTaXplICAgIC09IGJsb2NrU2l6ZTsKKyAgICAgICAgcmVzdWx0ICAgKz0gYmxvY2tTaXplOworICAgIH0KKworICAgIG90RVhQRUNUKGFTaXplKTsKKworICAgIC8vIFN0b3JlIHRoZSBtaWRkbGUgYmxvY2sgb2YgZGF0YS4KKyAgICByZW1haW5kZXIgPSBhU2l6ZSAlIHNpemVvZih1aW50MzJfdCk7CisgICAgYmxvY2tTaXplID0gYVNpemUgLSByZW1haW5kZXI7CisKKyAgICBlcnJvciA9IHNkRmxhc2hTaW5nbGVXcml0ZShhQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1NpemUgLyBzaXplb2YodWludDMyX3QpKTsKKworICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworCisgICAgYUFkZHJlc3MgKz0gYmxvY2tTaXplOworICAgIGFEYXRhICAgICs9IGJsb2NrU2l6ZTsKKyAgICBhU2l6ZSAgICAtPSBibG9ja1NpemU7CisgICAgcmVzdWx0ICAgKz0gYmxvY2tTaXplOworCisgICAgLy8gU3RvcmUgYW55IGFkZGl0aW9uYWwgYnl0ZXMgdGhhdCBkaWRuJ3QgZml0IGludG8gbWlkZGxlIGJsb2NrLgorICAgIGlmIChyZW1haW5kZXIpCisgICAgeworICAgICAgICBibG9ja1ZhbHVlID0gMHhmZmZmZmZmZjsKKworICAgICAgICBtZW1jcHkoKHVpbnQ4X3QgKikmYmxvY2tWYWx1ZSwgYURhdGEsIHJlbWFpbmRlcik7CisKKyAgICAgICAgZXJyb3IgPSBzZEZsYXNoU2luZ2xlV3JpdGUoYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopJmJsb2NrVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihibG9ja1ZhbHVlKSAvIHNpemVvZih1aW50MzJfdCkpOworCisgICAgICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworCisgICAgICAgIHJlc3VsdCArPSByZW1haW5kZXI7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvbG9nZ2luZy5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2xvZ2dpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFkMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL2xvZ2dpbmcuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgbG9nZ2luZy4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8dXRpbHMvY29kZV91dGlscy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWYgKE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgPT0gMCkKKyNpbmNsdWRlIDxzZWdnZXJfcnR0L1NFR0dFUl9SVFQuaD4KKworI2lmIChMT0dfUlRUX0NPTE9SX0VOQUJMRSA9PSAxKQorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ERUZBVUxUICJceDFCWzBtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9SRUQgICAgICJceDFCWzE7MzFtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9HUkVFTiAgICJceDFCWzE7MzJtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ZRUxMT1cgICJceDFCWzE7MzNtIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9DWUFOICAgICJceDFCWzE7MzZtIgorI2Vsc2UgLy8gTE9HX1JUVF9DT0xPUl9FTkFCTEUgPT0gMQorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ERUZBVUxUICIiCisjZGVmaW5lIFJUVF9DT0xPUl9DT0RFX1JFRCAgICAgIiIKKyNkZWZpbmUgUlRUX0NPTE9SX0NPREVfR1JFRU4gICAiIgorI2RlZmluZSBSVFRfQ09MT1JfQ09ERV9ZRUxMT1cgICIiCisjZGVmaW5lIFJUVF9DT0xPUl9DT0RFX0NZQU4gICAgIiIKKyNlbmRpZiAvLyBMT0dfUlRUX0NPTE9SX0VOQUJMRSA9PSAxCisKK3N0YXRpYyBib29sIHNMb2dJbml0aWFsaXplZCA9IGZhbHNlOworc3RhdGljIHVpbnQ4X3Qgc0xvZ0J1ZmZlcltMT0dfUlRUX0JVRkZFUl9TSVpFXTsKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBjb2xvciBvZiBhIGdpdmVuIGxldmVsIGxvZy4KKyAqCisgKiBAcGFyYW1baW5dICBhTG9nTGV2ZWwgVGhlIGxvZyBsZXZlbC4KKyAqCisgKiBAcmV0dXJucyAgU3RyaW5nIHdpdGggYSBsb2cgbGV2ZWwgY29sb3IgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbGV2ZWxUb1N0cmluZyhvdExvZ0xldmVsIGFMb2dMZXZlbCkKK3sKKyAgICBzd2l0Y2ggKGFMb2dMZXZlbCkKKyAgICB7CisgICAgY2FzZSBPVF9MT0dfTEVWRUxfQ1JJVDoKKyAgICAgICAgcmV0dXJuIFJUVF9DT0xPUl9DT0RFX1JFRDsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX1dBUk46CisgICAgICAgIHJldHVybiBSVFRfQ09MT1JfQ09ERV9ZRUxMT1c7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9JTkZPOgorICAgICAgICByZXR1cm4gUlRUX0NPTE9SX0NPREVfR1JFRU47CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9ERUJHOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBSVFRfQ09MT1JfQ09ERV9ERUZBVUxUOworICAgIH0KK30KKworI2lmIChMT0dfVElNRVNUQU1QX0VOQUJMRSA9PSAxKQorLyoqCisgKiBGdW5jdGlvbiBmb3IgcHJpbnRpbmcgYWN0dWFsIHRpbWVzdGFtcC4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhTG9nU3RyaW5nIFBvaW50ZXIgdG8gdGhlIGxvZyBidWZmZXIuCisgKiBAcGFyYW1baW5dICAgICBhTWF4U2l6ZSAgIE1heGltdW0gc2l6ZSBvZiB0aGUgbG9nIGJ1ZmZlci4KKyAqCisgKiBAcmV0dXJucyAgTnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRoZSBsb2cgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGxvZ1RpbWVzdGFtcChjaGFyICphTG9nU3RyaW5nLCB1aW50MTZfdCBhTWF4U2l6ZSkKK3sKKyAgICByZXR1cm4gc25wcmludGYoYUxvZ1N0cmluZywgYU1heFNpemUsICIlc1slMDEwbGRdIiwgUlRUX0NPTE9SX0NPREVfQ1lBTiwKKyAgICAgICAgICAgICAgICAgICAgb3RQbGF0QWxhcm1HZXROb3coKSk7Cit9CisjZW5kaWYKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgcHJpbnRpbmcgbG9nIGxldmVsLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFMb2dTdHJpbmcgIFBvaW50ZXIgdG8gbG9nIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFNYXhTaXplICAgIE1heGltdW0gc2l6ZSBvZiBsb2cgYnVmZmVyLgorICogQHBhcmFtW2luXSAgICAgYUxvZ0xldmVsICAgTG9nIGxldmVsLgorICoKKyAqIEByZXR1cm5zICBOdW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlIGxvZyBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgbG9nTGV2ZWwoY2hhciAqYUxvZ1N0cmluZywgdWludDE2X3QgYU1heFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TG9nTGV2ZWwgYUxvZ0xldmVsKQoreworICAgIHJldHVybiBzbnByaW50ZihhTG9nU3RyaW5nLCBhTWF4U2l6ZSwgIiVzICIsIGxldmVsVG9TdHJpbmcoYUxvZ0xldmVsKSk7Cit9CisKK3ZvaWQgbnJmNUxvZ0luaXQoKQoreworICAgIGludCByZXMgPSBTRUdHRVJfUlRUX0NvbmZpZ1VwQnVmZmVyKExPR19SVFRfQlVGRkVSX0lOREVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPR19SVFRfQlVGRkVSX05BTUUsIHNMb2dCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9HX1JUVF9CVUZGRVJfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUdHRVJfUlRUX01PREVfTk9fQkxPQ0tfVFJJTSk7CisgICAgb3RFWFBFQ1QocmVzID49IDApOworCisgICAgc0xvZ0luaXRpYWxpemVkID0gdHJ1ZTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgbnJmNUxvZ0RlaW5pdCgpCit7CisgICAgc0xvZ0luaXRpYWxpemVkID0gZmFsc2U7Cit9CisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgICh2b2lkKSBhTG9nUmVnaW9uOworCisgICAgdWludDE2X3QgbGVuZ3RoID0gMDsKKyAgICBjaGFyIGxvZ1N0cmluZ1tMT0dfUEFSU0VfQlVGRkVSX1NJWkUgKyAxXTsKKworICAgIG90RVhQRUNUKHNMb2dJbml0aWFsaXplZCA9PSB0cnVlKTsKKworI2lmIChMT0dfVElNRVNUQU1QX0VOQUJMRSA9PSAxKQorICAgIGxlbmd0aCArPSBsb2dUaW1lc3RhbXAobG9nU3RyaW5nLCBMT0dfUEFSU0VfQlVGRkVSX1NJWkUpOworI2VuZGlmCisKKyAgICAvLyBBZGQgbGV2ZWwgaW5mb3JtYXRpb24uCisgICAgbGVuZ3RoICs9IGxvZ0xldmVsKCZsb2dTdHJpbmdbbGVuZ3RoXSwgKExPR19QQVJTRV9CVUZGRVJfU0laRSAtIGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgIGFMb2dMZXZlbCk7CisKKyAgICAvLyBQYXJzZSB1c2VyIHN0cmluZy4KKyAgICB2YV9saXN0IHBhcmFtTGlzdDsKKyAgICB2YV9zdGFydChwYXJhbUxpc3QsIGFGb3JtYXQpOworICAgIGxlbmd0aCArPSB2c25wcmludGYoJmxvZ1N0cmluZ1tsZW5ndGhdLCAoTE9HX1BBUlNFX0JVRkZFUl9TSVpFIC0gbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFGb3JtYXQsIHBhcmFtTGlzdCk7CisgICAgbG9nU3RyaW5nW2xlbmd0aCsrXSA9ICdcbic7CisgICAgdmFfZW5kKHBhcmFtTGlzdCk7CisKKyAgICAvLyBXcml0ZSB1c2VyIGxvZyB0byB0aGUgUlRUIG1lbW9yeSBibG9jay4KKyAgICBTRUdHRVJfUlRUX1dyaXRlTm9Mb2NrKDAsIGxvZ1N0cmluZywgbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKyNlbmRpZiAvLyAoT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVCA9PSAwKQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL21pc2MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNzQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9taXNjLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisKKyNpbmNsdWRlIDxkZXZpY2UvbnJmLmg+CisKKyNpbmNsdWRlICJwbGF0Zm9ybS1ucmY1LmgiCisKKyNpZiBTT0ZUREVWSUNFX1BSRVNFTlQKKyNpbmNsdWRlICJzb2Z0ZGV2aWNlLmgiCisjZW5kaWYKKworc3RhdGljIHVpbnQzMl90IHNSZXNldFJlYXNvbjsKKworX19XRUFLIHZvaWQgbnJmNUNyeXB0b0luaXQodm9pZCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgd2VhayBzbyBpdCBjb3VsZCBiZSBvdmVycmlkZGVuIHdpdGggZXh0ZXJuYWwgaW1wbGVtZW50YXRpb24uCit9CisKK19fV0VBSyB2b2lkIG5yZjVDcnlwdG9EZWluaXQodm9pZCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgd2VhayBzbyBpdCBjb3VsZCBiZSBvdmVycmlkZGVuIHdpdGggZXh0ZXJuYWwgaW1wbGVtZW50YXRpb24uCit9CisKK3ZvaWQgbnJmNU1pc2NJbml0KHZvaWQpCit7CisjaWYgU09GVERFVklDRV9QUkVTRU5UCisgICAgc2RfcG93ZXJfcmVzZXRfcmVhc29uX2dldCgmc1Jlc2V0UmVhc29uKTsKKyAgICBzZF9wb3dlcl9yZXNldF9yZWFzb25fY2xyKDB4RkZGRkZGRkYpOworI2Vsc2UKKyAgICBzUmVzZXRSZWFzb24gPSBOUkZfUE9XRVItPlJFU0VUUkVBUzsKKyAgICBOUkZfUE9XRVItPlJFU0VUUkVBUyA9IDB4RkZGRkZGRkY7CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UIAorfQorCit2b2lkIG5yZjVNaXNjRGVpbml0KHZvaWQpCit7CisgICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eS4KK30KKwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIE5WSUNfU3lzdGVtUmVzZXQoKTsKK30KKworb3RQbGF0UmVzZXRSZWFzb24gb3RQbGF0R2V0UmVzZXRSZWFzb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBvdFBsYXRSZXNldFJlYXNvbiByZWFzb247CisKKyAgICBpZiAoc1Jlc2V0UmVhc29uICYgUE9XRVJfUkVTRVRSRUFTX1JFU0VUUElOX01zaykKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX0VYVEVSTkFMOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfRE9HX01zaykKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1dBVENIRE9HOworICAgIH0KKyAgICBlbHNlIGlmIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfU1JFUV9Nc2spCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9TT0ZUV0FSRTsKKyAgICB9CisgICAgZWxzZSBpZiAoc1Jlc2V0UmVhc29uICYgUE9XRVJfUkVTRVRSRUFTX0xPQ0tVUF9Nc2spCisgICAgeworICAgICAgICByZWFzb24gPSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVDsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNSZXNldFJlYXNvbiAmIFBPV0VSX1JFU0VUUkVBU19PRkZfTXNrKSAgICB8fAorICAgICAgICAgICAgIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfTFBDT01QX01zaykgfHwKKyAgICAgICAgICAgICAoc1Jlc2V0UmVhc29uICYgUE9XRVJfUkVTRVRSRUFTX0RJRl9Nc2spICAgIHx8CisgICAgICAgICAgICAgKHNSZXNldFJlYXNvbiAmIFBPV0VSX1JFU0VUUkVBU19ORkNfTXNrKSAgICB8fAorICAgICAgICAgICAgIChzUmVzZXRSZWFzb24gJiBQT1dFUl9SRVNFVFJFQVNfVkJVU19Nc2spKQorICAgIHsKKyAgICAgICAgcmVhc29uID0gT1RfUExBVF9SRVNFVF9SRUFTT05fT1RIRVI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlYXNvbiA9IE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOworICAgIH0KKworICAgIHJldHVybiByZWFzb247Cit9CisKK3ZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCkKK3sKKyAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYW4gb3BlcmF0aW9uIHRvIHdha2UgdGhlIGhvc3QgZnJvbSBzbGVlcCBzdGF0ZS4KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9ucmY1Mjg0MC5sZCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9ucmY1Mjg0MC5sZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBmZmZmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL25yZjUyODQwLmxkCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIEdDQyBsaW5rZXIgc2NyaXB0IGZvciBuUkY1Mjg0MC4KKyAqLworCitTRUFSQ0hfRElSKC4pCitHUk9VUCgtbGdjYyAtbGMgLWxub3N5cykKKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgOiBPUklHSU4gPSAweDAwMDAwMDAwLCBMRU5HVEggPSAweDEwMDAwMAorICBSQU0gKHJ3eCkgOiAgT1JJR0lOID0gMHgyMDAwMDAwMCwgTEVOR1RIID0gMHg0MDAwMAorfQorCitPVVRQVVRfRk9STUFUICgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWJpZ2FybSIsICJlbGYzMi1saXR0bGVhcm0iKQorCitFTlRSWShSZXNldF9IYW5kbGVyKQorCitGTEFTSF9QQUdFX1NJWkUgICAgICAgPSA0MDk2OworRkxBU0hfREFUQV9QQUdFU19VU0VEID0gNDsKKworU0VDVElPTlMKK3sKKyAgICAudGV4dCA6CisgICAgeworICAgICAgICBLRUVQKCooLmlzcl92ZWN0b3IpKQorICAgICAgICAqKC50ZXh0KikKKworICAgICAgICBLRUVQKCooLmluaXQpKQorICAgICAgICBLRUVQKCooLmZpbmkpKQorCisgICAgICAgIC8qIC5jdG9ycyAqLworICAgICAgICAqY3J0YmVnaW4ubyguY3RvcnMpCisgICAgICAgICpjcnRiZWdpbj8ubyguY3RvcnMpCisgICAgICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuY3RvcnMpCisgICAgICAgICooU09SVCguY3RvcnMuKikpCisgICAgICAgICooLmN0b3JzKQorCisgICAgICAgIC8qIC5kdG9ycyAqLworICAgICAgICAqY3J0YmVnaW4ubyguZHRvcnMpCisgICAgICAgICpjcnRiZWdpbj8ubyguZHRvcnMpCisgICAgICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuZHRvcnMpCisgICAgICAgICooU09SVCguZHRvcnMuKikpCisgICAgICAgICooLmR0b3JzKQorCisgICAgICAgICooLnJvZGF0YSopCisKKyAgICAgICAgS0VFUCgqKC5laF9mcmFtZSopKQorICAgIH0gPiBGTEFTSAorCisgICAgLkFSTS5leHRhYiA6CisgICAgeworICAgICAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKKyAgICB9ID4gRkxBU0gKKworICAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAgIC5BUk0uZXhpZHggOgorICAgIHsKKyAgICAgICAgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopCisgICAgfSA+IEZMQVNICisgICAgX19leGlkeF9lbmQgPSAuOworCisgICAgX19ldGV4dCA9IC47CisKKyAgICBucmZfcmFkaW9fYnVmZmVyIChOT0xPQUQpOgorICAgIHsKKyAgICAgICAgX19ucmZfcmFkaW9fYnVmZmVyX3N0YXJ0X18gPSAuOworICAgICAgICAqKG5yZl9yYWRpb19idWZmZXIqKQorICAgICAgICBfX25yZl9yYWRpb19idWZmZXJfZW5kX18gPSAuOworICAgIH0gPiBSQU0KKworICAgIC5kYXRhIDogQVQgKF9fZXRleHQpCisgICAgeworICAgICAgICBfX2RhdGFfc3RhcnRfXyA9IC47CisgICAgICAgICoodnRhYmxlKQorICAgICAgICAqKC5kYXRhKikKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIHByZWluaXQgZGF0YSAqLworICAgICAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgICAgIEtFRVAoKigucHJlaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguaW5pdF9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisKKworICAgICAgICAuID0gQUxJR04oNCk7CisgICAgICAgIC8qIGZpbml0IGRhdGEgKi8KKyAgICAgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgICAgICBLRUVQKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgICAgIEtFRVAoKiguZmluaV9hcnJheSkpCisgICAgICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisKKyAgICAgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICAvKiBBbGwgZGF0YSBlbmQgKi8KKyAgICAgICAgX19kYXRhX2VuZF9fID0gLjsKKworICAgIH0gPiBSQU0KKworICAgIC5ic3MgOgorICAgIHsKKyAgICAgICAgLiA9IEFMSUdOKDQpOworICAgICAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworICAgIH0gPiBSQU0KKworICAgIC5oZWFwIChDT1BZKToKKyAgICB7CisgICAgICAgIF9fSGVhcEJhc2UgPSAuOworICAgICAgICBfX2VuZF9fID0gLjsKKyAgICAgICAgUFJPVklERShlbmQgPSAuKTsKKyAgICAgICAgS0VFUCgqKC5oZWFwKikpCisgICAgICAgIF9fSGVhcExpbWl0ID0gLjsKKyAgICB9ID4gUkFNCisKKyAgICAvKiAuc3RhY2tfZHVtbXkgc2VjdGlvbiBkb2Vzbid0IGNvbnRhaW5zIGFueSBzeW1ib2xzLiBJdCBpcyBvbmx5CisgICAgICogdXNlZCBmb3IgbGlua2VyIHRvIGNhbGN1bGF0ZSBzaXplIG9mIHN0YWNrIHNlY3Rpb25zLCBhbmQgYXNzaWduCisgICAgICogdmFsdWVzIHRvIHN0YWNrIHN5bWJvbHMgbGF0ZXIgKi8KKyAgICAuc3RhY2tfZHVtbXkgKENPUFkpOgorICAgIHsKKyAgICAgICAgS0VFUCgqKC5zdGFjayopKQorICAgIH0gPiBSQU0KKworICAgIF9fZmxhc2hfZGF0YV9lbmQgPSAoT1JJR0lOKEZMQVNIKSArIExFTkdUSChGTEFTSCkpOworICAgIF9fZmxhc2hfZGF0YV9zdGFydCA9IChfX2ZsYXNoX2RhdGFfZW5kIC0gKEZMQVNIX1BBR0VfU0laRSAqIEZMQVNIX0RBVEFfUEFHRVNfVVNFRCkpOworCisgICAgLyogQXNzdXJlIHRoYXQgY29kZSBkb2VzIG5vdCBvdmVybGFwIGZsYXNoIGRhdGEgYXJlYS4qLworICAgIEFTU0VSVCgoX19mbGFzaF9kYXRhX3N0YXJ0ID49IF9fZXRleHQgKyBTSVpFT0YoLmRhdGEpKSwgIkVycm9yOiBDb2RlIG92ZXJsYXBzIGZsYXNoIGRhdGEgYXJlYS4iKQorCisgICAgLyogU2V0IHN0YWNrIHRvcCB0byBlbmQgb2YgUkFNLCBhbmQgc3RhY2sgbGltaXQgbW92ZSBkb3duIGJ5CisgICAgICogc2l6ZSBvZiBzdGFja19kdW1teSBzZWN0aW9uICovCisgICAgX19TdGFja1RvcCA9IE9SSUdJTihSQU0pICsgTEVOR1RIKFJBTSk7CisgICAgX19TdGFja0xpbWl0ID0gX19TdGFja1RvcCAtIFNJWkVPRiguc3RhY2tfZHVtbXkpOworICAgIFBST1ZJREUoX19zdGFjayA9IF9fU3RhY2tUb3ApOworCisgICAgLyogQ2hlY2sgaWYgZGF0YSArIGhlYXAgKyBzdGFjayBleGNlZWRzIFJBTSBsaW1pdCAqLworICAgIEFTU0VSVChfX1N0YWNrTGltaXQgPj0gX19IZWFwTGltaXQsICJyZWdpb24gUkFNIG92ZXJmbG93ZWQgd2l0aCBzdGFjayIpCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvb3BlbnRocmVhZC1jb3JlLW5yZjUyODQwLWNvbmZpZy5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL29wZW50aHJlYWQtY29yZS1ucmY1Mjg0MC1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzMwNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL29wZW50aHJlYWQtY29yZS1ucmY1Mjg0MC1jb25maWcuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgbnJmNTI4NDAgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzCisgKiAgIGZvciBPcGVuVGhyZWFkLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9DT1JFX05SRjUyODQwX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfTlJGNTI4NDBfQ09ORklHX0hfCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTCisgKgorICogVGhlIG51bWJlciBvZiBtZXNzYWdlIGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlciBwb29sLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTICAgICAgICAgICAgICAgICAgIDEyOAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1NUQVRFQ0hBTkdFX0hBTkRMRVJTCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YXRlLWNoYW5nZWQgY2FsbGJhY2sgaGFuZGxlcnMgKHNldCB1c2luZyBgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjaygpYCkuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9TVEFURUNIQU5HRV9IQU5ETEVSUyAgICAgICAgICAgICAgMworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQUREUkVTU19DQUNIRV9FTlRSSUVTCisgKgorICogVGhlIG51bWJlciBvZiBFSUQtdG8tUkxPQyBjYWNoZSBlbnRyaWVzLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19BRERSRVNTX0NBQ0hFX0VOVFJJRVMgICAgICAgICAgICAgICAgIDIwCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUFJFTkRfTEVWRUwKKyAqCisgKiBEZWZpbmUgdG8gcHJlcGVuZCB0aGUgbG9nIGxldmVsIHRvIGFsbCBsb2cgbWVzc2FnZXMKKyAqCisgKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwgICAgICAgICAgICAgICAgICAgICAwCisKKyAvKioKKyAgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorICAqCisgICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIEFDSyB0aW1lb3V0IGxvZ2ljLgorICAqCisgICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVCAgICAgICAgICAgMQorCisgLyoqCisgICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorICAqCisgICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLgorICAqCisgICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUICAgICAgICAgICAgMQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBtaWNyb3NlY29uZCBiYWNrb2ZmIHRpbWVyIGltcGxlbWVudGVkIGluIHBsYXRmb3JtLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSICAgICAxCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTCisgKgorICogVGhlIGJhc2UgYWRkcmVzcyBvZiBzZXR0aW5ncy4KKyAqCisgKi8KKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisgKgorICogVGhlIHBhZ2Ugc2l6ZSBvZiBzZXR0aW5ncy4KKyAqCisgKi8KKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDk2CisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0KKyAqCisgKiBUaGUgcGFnZSBudW1iZXIgb2Ygc2V0dGluZ3MuCisgKgorICovCisjZGVmaW5lIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkUKKyAqCisgKiBUaGUgc2l6ZSBvZiBtYmVkVExTIGhlYXAgYnVmZmVyIHdoZW4gRFRMUyBpcyBlbmFibGVkLgorICoKKyAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRSAgICAgICAgICAgICAgICAgICAgICg0MDk2ICogc2l6ZW9mKHZvaWQgKikpCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRV9OT19EVExTCisgKgorICogVGhlIHNpemUgb2YgbWJlZFRMUyBoZWFwIGJ1ZmZlciB3aGVuIERUTFMgaXMgZGlzYWJsZWQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01CRURUTFNfSEVBUF9TSVpFX05PX0RUTFMgICAgICAgICAgICAgMjA0OAorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9OUkY1Mjg0MF9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9wbGF0Zm9ybS1jb25maWcuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9wbGF0Zm9ybS1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjY4MjQxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLWNvbmZpZy5oCkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9DT05GSUdfSF8KKyNkZWZpbmUgUExBVEZPUk1fQ09ORklHX0hfCisKKyNpbmNsdWRlICJkZXZpY2UvbnJmLmgiCisjaW5jbHVkZSAiaGFsL25yZl91YXJ0LmgiCisjaW5jbHVkZSAiaGFsL25yZl9wZXJpcGhlcmFscy5oIgorI2luY2x1ZGUgImhhbC9ucmZfcmFkaW8uaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBVQVJUIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFVBUlRfSU5TVEFOQ0UKKyAqCisgKiBVQVJUIEluc3RhbmNlLgorICoKKyAqLworI2RlZmluZSBVQVJUX0lOU1RBTkNFICBOUkZfVUFSVDAKKworLyoqCisgKiBAZGVmIFVBUlRfUEFSSVRZCisgKgorICogVUFSVCBQYXJpdHkgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAYnJpZWYgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICBccmVmIE5SRl9VQVJUX1BBUklUWV9FWENMVURFRCAtIFBhcml0eSBiaXQgaXMgbm90IHByZXNlbnQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfUEFSSVRZX0lOQ0xVREVEIC0gUGFyaXR5IGJpdCBpcyBwcmVzZW50LgorICoKKyAqLworI2RlZmluZSBVQVJUX1BBUklUWSAgTlJGX1VBUlRfUEFSSVRZX0VYQ0xVREVECisKKy8qKgorICogQGRlZiBVQVJUX0hXRkMKKyAqCisgKiBVQVJUIEhhcmR3YXJlIEZsb3cgQ29udHJvbC4KKyAqCisgKiBAYnJpZWYgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0hXRkNfRU5BQkxFRCAtIEhXIEZsb3cgY29udHJvbCBlbmFibGVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0hXRkNfRElTQUJMRUQgLSBIVyBGbG93IGNvbnRyb2wgZGlzYWJsZWQuCisgKgorICovCisjZGVmaW5lIFVBUlRfSFdGQyAgTlJGX1VBUlRfSFdGQ19FTkFCTEVECisKKy8qKgorICogQGRlZiBVQVJUX0JBVURSQVRFCisgKgorICogVUFSVCBCYXVkcmF0ZS4KKyAqCisgKiBAYnJpZWYgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzEyMDAgLSAxMjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMjQwMCAtIDI0MDAgYmF1ZC4KKyAqICAgICAgICAgXHJlZiBOUkZfVUFSVF9CQVVEUkFURV80ODAwIC0gNDgwMCBiYXVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzk2MDAgLSA5NjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMTQ0MDAgLSAxNDQwMCBiYXVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzE5MjAwIC0gMTkyMDAgYmF1ZC4KKyAqICAgICAgICAgXHJlZiBOUkZfVUFSVF9CQVVEUkFURV8yODgwMCAtIDI4ODAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMzg0MDAgLSAzODQwMCBiYXVkLgorICogICAgICAgICBccmVmIE5SRl9VQVJUX0JBVURSQVRFXzU3NjAwIC0gNTc2MDAgYmF1ZC4KKyAqICAgICAgICAgXHJlZiBOUkZfVUFSVF9CQVVEUkFURV83NjgwMCAtIDc2ODAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMTE1MjAwIC0gMTE1MjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMjMwNDAwIC0gMjMwNDAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMjUwMDAwIC0gMjUwMDAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfNDYwODAwIC0gNDYwODAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfOTIxNjAwIC0gOTIxNjAwIGJhdWQuCisgKiAgICAgICAgIFxyZWYgTlJGX1VBUlRfQkFVRFJBVEVfMTAwMDAwMCAtIDEwMDAwMDAgYmF1ZC4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9CQVVEUkFURSAgTlJGX1VBUlRfQkFVRFJBVEVfMTE1MjAwCisKKy8qKgorICogIEBkZWYgVUFSVF9JUlFOCisgKgorICogVUFSVCBJbnRlcnJ1cHQgbnVtYmVyLgorICoKKyAqLworI2RlZmluZSBVQVJUX0lSUU4gIFVBUlRFMF9VQVJUMF9JUlFuCisKKy8qKgorICogQGRlZiBVQVJUX0lSUV9QUklPUklUWQorICoKKyAqIFVBUlQgSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBVQVJUX0lSUV9QUklPUklUWSAgNgorCisvKioKKyAqIEBkZWYgVUFSVF9SWF9CVUZGRVJfU0laRQorICoKKyAqIFVBUlQgUmVjZWl2ZSBidWZmZXIgc2l6ZS4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9SWF9CVUZGRVJfU0laRSAgMjU2CisKKy8qKgorICogQGRlZiBVQVJUX1BJTl9UWAorICoKKyAqIFVBUlQgVFggUGluLgorICoKKyAqLworI2RlZmluZSBVQVJUX1BJTl9UWCAgNgorCisvKioKKyAqIEBkZWYgVUFSVF9QSU5fUlgKKyAqCisgKiBVQVJUIFJYIFBpbi4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9QSU5fUlggIDgKKworLyoqCisgKiBAZGVmIFVBUlRfUElOX0NUUworICoKKyAqIFVBUlQgQ1RTIFBpbi4KKyAqCisgKi8KKyNkZWZpbmUgVUFSVF9QSU5fQ1RTICA3CisKKy8qKgorICogQGRlZiBVQVJUX1BJTl9SVFMKKyAqCisgKiBVQVJUIFJUUyBQaW4uCisgKgorICovCisjZGVmaW5lIFVBUlRfUElOX1JUUyAgNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gQWxhcm0gRHJpdmVyIENvbmZpZ3VyYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEBkZWYgUlRDX0lOU1RBTkNFCisgKgorICogUlRDIEluc3RhbmNlLgorICoKKyAqLworI2RlZmluZSBSVENfSU5TVEFOQ0UgIE5SRl9SVEMyCisKKy8qKgorICogQGRlZiBSVENfSVJRX0hBTkRMRVIKKyAqCisgKiBSVEMgaW50ZXJydXB0IGhhbmRsZXIgbmFtZQorICoKKyAqLworI2RlZmluZSBSVENfSVJRX0hBTkRMRVIgIFJUQzJfSVJRSGFuZGxlcgorCisvKioKKyAqIEBkZWYgUlRDX0lSUU4KKyAqCisgKiBSVEMgSW50ZXJydXB0IG51bWJlci4KKyAqCisgKi8KKyNkZWZpbmUgUlRDX0lSUU4gIFJUQzJfSVJRbgorCisvKioKKyAqIEBkZWYgUlRDX0lSUV9QUklPUklUWQorICoKKyAqIFJUQyBJbnRlcnJ1cHQgcHJpb3JpdHkuCisgKgorICovCisjZGVmaW5lIFJUQ19JUlFfUFJJT1JJVFkgIDYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFJOR19CVUZGRVJfU0laRQorICoKKyAqIFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgYnVmZmVyIHNpemUuCisgKgorICovCisjZGVmaW5lIFJOR19CVUZGRVJfU0laRSAgNjQKKworLyoqCisgKiBAZGVmIFJOR19JUlFfUFJJT1JJVFkKKyAqCisgKiBSTkcgSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBSTkdfSVJRX1BSSU9SSVRZICA2CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBMb2cgbW9kdWxlIGNvbmZpZ3VyYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEBkZWYgTE9HX1JUVF9CVUZGRVJfSU5ERVgKKyAqCisgKiBSVFQncyBidWZmZXIgaW5kZXguCisgKgorICovCisjZGVmaW5lIExPR19SVFRfQlVGRkVSX0lOREVYICAwCisKKy8qKgorICogQGRlZiBMT0dfUlRUX0JVRkZFUl9OQU1FCisgKgorICogUlRUJ3MgbmFtZS4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1JUVF9CVUZGRVJfTkFNRSAgIlRlcm1pbmFsIgorCisvKioKKyAqIEBkZWYgTE9HX1JUVF9CVUZGRVJfU0laRQorICoKKyAqIExPRyBSVFQncyBidWZmZXIgc2l6ZS4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1JUVF9CVUZGRVJfU0laRSAgMjU2CisKKy8qKgorICogQGRlZiBMT0dfUlRUX0NPTE9SX0VOQUJMRQorICoKKyAqIEVuYWJsZSBjb2xvcnMgb24gUlRUIFZpZXdlci4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1JUVF9DT0xPUl9FTkFCTEUgIDEKKworLyoqCisgKiBAZGVmIExPR19QQVJTRV9CVUZGRVJfU0laRQorICoKKyAqIExPRyBidWZmZXIgdXNlZCB0byBwYXJzZSBwcmludCBmb3JtYXQuIEl0IHdpbGwgYmUgbG9jYWxseSBhbGxvY2F0ZWQgb24gdGhlCisgKiBzdGFjay4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1BBUlNFX0JVRkZFUl9TSVpFICAxMjgKKworLyoqCisgKiBAZGVmIExPR19USU1FU1RBTVBfRU5BQkxFCisgKgorICogRW5hYmxlIHRpbWVzdGFtcCBpbiB0aGUgbG9ncy4KKyAqCisgKi8KKyNkZWZpbmUgTE9HX1RJTUVTVEFNUF9FTkFCTEUgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJhZGlvIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9NT0RFCisgKgorICogUkFESU8gQ0NBIE1vZGUuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9NT0RFICBOUkZfUkFESU9fQ0NBX01PREVfRUQKKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9FRF9USFJFU0hPTEQKKyAqCisgKiBSQURJTyBFbmVyZ3kgRGV0ZWN0aW9uIFRocmVzaG9sZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fQ0NBX0VEX1RIUkVTSE9MRCAgMHgyRAorCisvKioKKyAqIEBkZWYgUkFESU9fQ0NBX0NPUlJfVEhSRVNIT0xECisgKgorICogUkFESU8gQ29ycmVsYXRvciBUaHJlc2hvbGQuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9DT1JSX1RIUkVTSE9MRCAgMHgyRAorCisvKioKKyAqIEBkZWYgUkFESU9fQ0NBX0NPUlJfTElNSVQKKyAqCisgKiBSQURJTyBDb3JyZWxhdG9yIGxpbWl0LgorICoKKyAqLworI2RlZmluZSBSQURJT19DQ0FfQ09SUl9MSU1JVCAgMHgwMgorCisvKioKKyAqIEBkZWYgUkFESU9fSVJRX1BSSU9SSVRZCisgKgorICogUkFESU8gSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBSQURJT19JUlFfUFJJT1JJVFkgIDAKKworLyoqCisgKiBAZGVmIFJBRElPX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTCisgKgorICogUkFESU8gTnVtYmVyIG9mIHNsb3RzIGNvbnRhaW5pbmcgc2hvcnQgYWRkcmVzc2VzIG9mIG5vZGVzIGZvciB3aGljaCBwZW5kaW5nIGRhdGEgaXMgc3RvcmVkLgorICoKKyAqLworI2RlZmluZSBSQURJT19QRU5ESU5HX1NIT1JUX0FERFJFU1NFUyAgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0NISUxEUkVOCisKKy8qKgorICogQGRlZiBSQURJT19QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUworICoKKyAqIFJBRElPIE51bWJlciBvZiBzbG90cyBjb250YWluaW5nIGV4dGVuZGVkIGFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggcGVuZGluZyBkYXRhIGlzIHN0b3JlZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVMgIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTgorCisvKioKKyAqIEBkZWYgUkFESU9fUlhfQlVGRkVSUworICoKKyAqIFJBRElPIE51bWJlciBvZiBidWZmZXJzIGluIHJlY2VpdmUgcXVldWUuCisgKgorICovCisjZGVmaW5lIFJBRElPX1JYX0JVRkZFUlMgIDE2CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fQ09ORklHX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0tbnJmNS5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLW5yZjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjZmZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLW5yZjUuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9OUkY1X0hfCisjZGVmaW5lIFBMQVRGT1JNX05SRjVfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tY29uZmlnLmgiCisKKy8qKgorICogSW5pdGlhbGl6YXRpb24gb2YgVUFSVCBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVVYXJ0SW5pdCh2b2lkKTsKKworLyoqCisgKiBEZWluaXRpYWxpemF0aW9uIG9mIFVBUlQgZHJpdmVyLgorICoKKyAqLwordm9pZCBucmY1VWFydERlaW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIFVBUlQgZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICovCit2b2lkIG5yZjVVYXJ0UHJvY2Vzcyh2b2lkKTsKKworLyoqCisgKiBJbml0aWFsaXphdGlvbiBvZiBBbGFybSBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVBbGFybUluaXQodm9pZCk7CisKKy8qKgorICogRGVpbml0aWFsaXphdGlvbiBvZiBBbGFybSBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVBbGFybURlaW5pdCh2b2lkKTsKKworLyoqCisgKiBGdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBBbGFybS4KKyAqCisgKi8KK3ZvaWQgbnJmNUFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLgorICoKKyAqLwordm9pZCBucmY1UmFuZG9tSW5pdCh2b2lkKTsKKworLyoqCisgKiBEZWluaXRpYWxpemF0aW9uIG9mIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLgorICoKKyAqLwordm9pZCBucmY1UmFuZG9tRGVpbml0KHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIExvZ2dlciBkcml2ZXIuCisgKgorICovCit2b2lkIG5yZjVMb2dJbml0KHZvaWQpOworCisvKioKKyAqIERlaW5pdGlhbGl6YXRpb24gb2YgTG9nZ2VyIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmNUxvZ0RlaW5pdCh2b2lkKTsKKworLyoqCisgKiBJbml0aWFsaXphdGlvbiBvZiBNaXNjIG1vZHVsZS4KKyAqCisgKi8KK3ZvaWQgbnJmNU1pc2NJbml0KHZvaWQpOworCisvKioKKyAqIERlaW5pdGlhbGl6YXRpb24gb2YgTWlzYyBtb2R1bGUuCisgKgorICovCit2b2lkIG5yZjVNaXNjRGVpbml0KHZvaWQpOworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIG9mIFJhZGlvIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmNVJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBEZWluaXRpYWxpemF0aW9uIG9mIFJhZGlvIGRyaXZlci4KKyAqCisgKi8KK3ZvaWQgbnJmNVJhZGlvRGVpbml0KHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIFJhZGlvLgorICoKKyAqLwordm9pZCBucmY1UmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogSW5pdGlhbGl6YXRpb24gb2YgaGFyZHdhcmUgY3J5cHRvIGVuZ2luZS4KKyAqCisgKi8KK3ZvaWQgbnJmNUNyeXB0b0luaXQodm9pZCk7CisKKy8qKgorICogRGVpbml0aWFsaXphdGlvbiBvZiBoYXJkd2FyZSBjcnlwdG8gZW5naW5lLgorICoKKyAqLwordm9pZCBucmY1Q3J5cHRvRGVpbml0KHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBlcmFzaW5nIHBhZ2UgaW4gZmxhc2guCisgKgorICovCitvdEVycm9yIG5yZjVGbGFzaFBhZ2VFcmFzZSh1aW50MzJfdCBhQWRkcmVzcyk7CisKKy8qKgorICogRnVuY3Rpb24gZm9yIGNoZWNraW5nIHN0YXRlIG9mIGZsYXNoIGRyaXZlci4KKyAqCisgKi8KK2Jvb2wgbnJmNUZsYXNoSXNCdXN5KHZvaWQpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciB3cml0aW5nIGRhdGEgaW50byBmbGFzaC4KKyAqCisgKi8KK3VpbnQzMl90IG5yZjVGbGFzaFdyaXRlKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpOworCisjaWYgU09GVERFVklDRV9QUkVTRU5UCisvKioKKyAqIEZ1bmN0aW9uIGZvciB0cmFuc2xhdGluZyBTb2Z0RGV2aWNlIGVycm9yIGludG8gT3BlblRocmVhZCdzIG9uZS4KKyAqCisgKi8KK290RXJyb3IgbnJmNVNkRXJyb3JUb090RXJyb3IodWludDMyX3QgYVNkRXJyb3IpOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIFNvZnREZXZpY2UgU29DIGV2ZW50cyBpbiBmbGFzaCBtb2R1bGUuCisgKgorICovCit2b2lkIG5yZjVTZFNvY0ZsYXNoUHJvY2Vzcyh1aW50MzJfdCBhRXZ0SWQpOworI2VuZGlmIC8vIFNPRlRERVZJQ0VfUFJFU0VOVAorCisjZW5kaWYgIC8vIFBMQVRGT1JNX05SRjVfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9wbGF0Zm9ybS1zb2Z0ZGV2aWNlLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0tc29mdGRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDE3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0tc29mdGRldmljZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBTb2Z0RGV2aWNlIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucy4KKyAqCisgKi8KKworI2lmbmRlZiBQTEFURk9STV9TT0ZUREVWSUNFX0hfCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiogQGJyaWVmIFJBQUwgU29mdGRldmljZSBkZWZhdWx0IHBhcmFtZXRlcnMuICovCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX0xFTkdUSCAgICAgICA2NDAwCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX0FMTE9DX0lURVJTICA1CisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX1NBRkVfTUFSR0lOICA5MQorI2RlZmluZSBQTEFURk9STV9TT0ZUREVWSUNFX1JBQUxfVElNRVNMT1RfREVGQVVMVF9USU1FT1VUICAgICAgMTAwMDAwCisjZGVmaW5lIFBMQVRGT1JNX1NPRlRERVZJQ0VfUkFBTF9USU1FU0xPVF9ERUZBVUxUX01BWF9MRU5HVEggICAxMjAwMDAwMDAKKyNkZWZpbmUgUExBVEZPUk1fU09GVERFVklDRV9SQUFMX0RFRkFVTFRfTEZfQ0xLX0FDQ1VSQUNZX1BQTSAgIDI1CisKKy8qKiBAYnJpZWYgUkFBTCBTb2Z0ZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdGltZXNsb3RMZW5ndGg7ICAgICAvKio8IFRpbWVzbG90IGxlbmd0aCByZXF1ZXN0ZWQgYnkgdGhlIG1vZHVsZSBpbiBtaWNyb3NlY29uZHMuICovCisgICAgdWludDMyX3QgdGltZXNsb3RUaW1lb3V0OyAgICAvKio8IExvbmdlc3QgYWNjZXB0YWJsZSBkZWxheSB1bnRpbCB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3RlZCB0aW1lc2xvdCBpbiBtaWNyb3NlY29uZHMuICovCisgICAgdWludDMyX3QgdGltZXNsb3RNYXhMZW5ndGg7ICAvKio8IE1heGltdW0gc2luZ2xlIHRpbWVzbG90IGxlbmd0aCBjcmVhdGVkIGJ5IGV4dGVuc2lvbiBwcm9jZXNzaW5nIGluIG1pY3Jvc2Vjb25kcy4gKi8KKyAgICB1aW50MTZfdCB0aW1lc2xvdEFsbG9jSXRlcnM7IC8qKjwgTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9uIG9mIGRpdmlkaW5nIHRpbWVzbG90X2xlbmd0aCBieSBmYWN0b3Igb2YgMiBwZXJmb3JtZWQgYnkgYXJiaXRlci4gKi8KKyAgICB1aW50MTZfdCB0aW1lc2xvdFNhZmVNYXJnaW47IC8qKjwgU2FmZSBtYXJnaW4gYmVmb3JlIHRpbWVzbG90IGlzIGZpbmlzaGVkIGFuZCBucmZfcmFhbF90aW1lc2xvdF9lbmRlZCBzaG91bGQgYmUgY2FsbGVkIGluIG1pY3Jvc2Vjb25kcy4gKi8KKyAgICB1aW50MTZfdCBsZkNsa0FjY3VyYWN5UHBtOyAgIC8qKjwgQ2xvY2sgYWNjdXJhY3kgaW4gcHBtIHVuaXQuICovCit9IFBsYXRmb3JtU29mdGRldmljZVJhYWxDb25maWdQYXJhbXM7CisKKy8qKgorICogRnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgU29mdERldmljZSBTb0MgZXZlbnRzLgorICoKKyAqLwordm9pZCBQbGF0Zm9ybVNvZnRkZXZpY2VTb2NFdnRIYW5kbGVyKHVpbnQzMl90IGFFdnRJZCk7CisKKy8qKgorICogRnVuY3Rpb24gdXNlZCB0byBzZXQgbm9uLWRlZmF1bHQgcGFyYW1ldGVycyBvZiBTb2Z0ZGV2aWNlIFJBQUwuCisgKgorICovCit2b2lkIFBsYXRmb3JtU29mdGRldmljZVJhYWxDb25maWcoY29uc3QgUGxhdGZvcm1Tb2Z0ZGV2aWNlUmFhbENvbmZpZ1BhcmFtcyAqYUNvbmZpZyk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fU09GVERFVklDRV9IXwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjViYTQxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemVycy4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCisjaW5jbHVkZSA8ZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmg+CisjaW5jbHVkZSAicGxhdGZvcm0tbnJmNS5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKwordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkgeyB3aGlsZSAoMSk7IH0KKwordm9pZCBQbGF0Zm9ybUluaXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7CisKKyAgICBucmZfZHJ2X2Nsb2NrX2luaXQoKTsKKworI2lmIChPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUID09IDApCisgICAgbnJmNUxvZ0luaXQoKTsKKyNlbmRpZgorICAgIG5yZjVBbGFybUluaXQoKTsKKyAgICBucmY1UmFuZG9tSW5pdCgpOworICAgIG5yZjVVYXJ0SW5pdCgpOworICAgIG5yZjVNaXNjSW5pdCgpOworICAgIG5yZjVDcnlwdG9Jbml0KCk7CisgICAgbnJmNVJhZGlvSW5pdCgpOworfQorCit2b2lkIFBsYXRmb3JtRGVpbml0KHZvaWQpCit7CisgICAgbnJmNVJhZGlvRGVpbml0KCk7CisgICAgbnJmNUNyeXB0b0RlaW5pdCgpOworICAgIG5yZjVNaXNjRGVpbml0KCk7CisgICAgbnJmNVVhcnREZWluaXQoKTsKKyAgICBucmY1UmFuZG9tRGVpbml0KCk7CisgICAgbnJmNUFsYXJtRGVpbml0KCk7CisjaWYgKE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgPT0gMCkKKyAgICBucmY1TG9nRGVpbml0KCk7CisjZW5kaWYKK30KKwordm9pZCBQbGF0Zm9ybVByb2Nlc3NEcml2ZXJzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBucmY1QWxhcm1Qcm9jZXNzKGFJbnN0YW5jZSk7CisgICAgbnJmNVJhZGlvUHJvY2VzcyhhSW5zdGFuY2UpOworICAgIG5yZjVVYXJ0UHJvY2VzcygpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMxMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3JhZGlvLmMKQEAgLTAsMCArMSw2NTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhZGlvIGNvbW11bmljYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorLy8gTlJGIHRvb2xzIHVzZSAjZGVmaW5lIFBBQ0tBR0UgLSBmb3Igb3RoZXIgcHVycG9zZXMKKy8vIGllOiB0aGUgcGh5c2ljYWwgcGFja2FnZSB0aGUgY2hpcCBjb21lcyBpbgorLy8gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgR05VIEF1dG9jb25mICJQQUNBS0dFIiBkZWZpbmUKKyN1bmRlZiBQQUNLQUdFCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjb21tb24vY29kZV91dGlscy5ocHA+CisjaW5jbHVkZSA8cGxhdGZvcm0tY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oPgorCisjaW5jbHVkZSA8ZGV2aWNlL25yZi5oPgorI2luY2x1ZGUgPG5yZl9kcnZfcmFkaW84MDIxNTQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQtY29yZS1jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2RlZmluZSBTSE9SVF9BRERSRVNTX1NJWkUgICAgMgorI2RlZmluZSBFWFRFTkRFRF9BRERSRVNTX1NJWkUgOAorI2RlZmluZSBQRU5ESU5HX0JJVCAgICAgICAgICAgMHgxMAorCitlbnVtCit7CisgICAgTlJGNTI4NDBfUkVDRUlWRV9TRU5TSVRJVklUWSA9IC0xMDAsICAvLyBkQm0KK307CisKK3N0YXRpYyBib29sIHNEaXNhYmxlZDsKKworc3RhdGljIG90UmFkaW9GcmFtZSBzUmVjZWl2ZWRGcmFtZXNbUkFESU9fUlhfQlVGRkVSU107CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNUcmFuc21pdEZyYW1lOworCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKworc3RhdGljIHVpbnQ4X3QgICAgICBzVHJhbnNtaXRQc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFICsgMV0KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIm5yZl9yYWRpb19idWZmZXIuc1RyYW5zbWlQc2R1IikpKTsKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorCisjcHJhZ21hIGxvY2F0aW9uPSJOUkZfUkFESU9fQlVGRkVSIgorc3RhdGljIHVpbnQ4X3QgICAgICBzVHJhbnNtaXRQc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFICsgMV07CisKKyNlbmRpZgorCitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNBY2tGcmFtZTsKKworc3RhdGljIHVpbnQzMl90ICAgICBzRW5lcmd5RGV0ZWN0aW9uVGltZTsKK3N0YXRpYyB1aW50OF90ICAgICAgc0VuZXJneURldGVjdGlvbkNoYW5uZWw7CitzdGF0aWMgaW50OF90ICAgICAgIHNFbmVyZ3lEZXRlY3RlZDsKKwordHlwZWRlZiBlbnVtCit7CisgICAga1BlbmRpbmdFdmVudFNsZWVwLCAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0ZWQgdG8gZW50ZXIgU2xlZXAgc3RhdGUuCisgICAga1BlbmRpbmdFdmVudEZyYW1lVHJhbnNtaXR0ZWQsICAgICAvLyBUcmFuc21pdHRlZCBmcmFtZSBhbmQgcmVjZWl2ZWQgQUNLIChpZiByZXF1ZXN0ZWQpLgorICAgIGtQZW5kaW5nRXZlbnRDaGFubmVsQWNjZXNzRmFpbHVyZSwgLy8gRmFpbGVkIHRvIHRyYW5zbWl0IGZyYW1lIChjaGFubmVsIGJ1c3kpLgorICAgIGtQZW5kaW5nRXZlbnRFbmVyZ3lEZXRlY3Rpb25TdGFydCwgLy8gUmVxdWVzdGVkIHRvIHN0YXJ0IEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlLgorICAgIGtQZW5kaW5nRXZlbnRFbmVyZ3lEZXRlY3RlZCwgICAgICAgLy8gRW5lcmd5IERldGVjdGlvbiBmaW5pc2hlZC4KK30gUmFkaW9QZW5kaW5nRXZlbnRzOworCitzdGF0aWMgdWludDMyX3Qgc1BlbmRpbmdFdmVudHM7CisKK3N0YXRpYyB2b2lkIGRhdGFJbml0KHZvaWQpCit7CisgICAgc0Rpc2FibGVkID0gdHJ1ZTsKKworICAgIHNUcmFuc21pdEZyYW1lLm1Qc2R1ID0gc1RyYW5zbWl0UHNkdSArIDE7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUkFESU9fUlhfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgc1JlY2VpdmVkRnJhbWVzW2ldLm1Qc2R1ID0gTlVMTDsKKyAgICB9CisKKyAgICBtZW1zZXQoJnNBY2tGcmFtZSwgMCwgc2l6ZW9mKHNBY2tGcmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBjb252ZXJ0U2hvcnRBZGRyZXNzKHVpbnQ4X3QgKmFUbywgdWludDE2X3QgYUZyb20pCit7CisgICAgYVRvWzBdID0gKHVpbnQ4X3QpIGFGcm9tOworICAgIGFUb1sxXSA9ICh1aW50OF90KShhRnJvbSA+PiA4KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzUGVuZGluZ0V2ZW50U2V0KFJhZGlvUGVuZGluZ0V2ZW50cyBhRXZlbnQpCit7CisgICAgcmV0dXJuIHNQZW5kaW5nRXZlbnRzICYgKDFVTCA8PCBhRXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBzZXRQZW5kaW5nRXZlbnQoUmFkaW9QZW5kaW5nRXZlbnRzIGFFdmVudCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBwZW5kaW5nRXZlbnRzOworICAgIHVpbnQzMl90ICAgICAgICAgIGJpdFRvU2V0ID0gMVVMIDw8IGFFdmVudDsKKworICAgIGRvCisgICAgeworICAgICAgICBwZW5kaW5nRXZlbnRzID0gX19MRFJFWFcoKHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgKikmc1BlbmRpbmdFdmVudHMpOworICAgICAgICBwZW5kaW5nRXZlbnRzIHw9IGJpdFRvU2V0OworICAgIH0KKyAgICB3aGlsZSAoX19TVFJFWFcocGVuZGluZ0V2ZW50cywgKHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgKikmc1BlbmRpbmdFdmVudHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRQZW5kaW5nRXZlbnQoUmFkaW9QZW5kaW5nRXZlbnRzIGFFdmVudCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBwZW5kaW5nRXZlbnRzOworICAgIHVpbnQzMl90ICAgICAgICAgIGJpdHNUb1JlbWFpbiA9IH4oMVVMIDw8IGFFdmVudCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyA9IF9fTERSRVhXKCh1bnNpZ25lZCBsb25nIHZvbGF0aWxlICopJnNQZW5kaW5nRXZlbnRzKTsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyAmPSBiaXRzVG9SZW1haW47CisgICAgfQorICAgIHdoaWxlIChfX1NUUkVYVyhwZW5kaW5nRXZlbnRzLCAodW5zaWduZWQgbG9uZyB2b2xhdGlsZSAqKSZzUGVuZGluZ0V2ZW50cykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJQZW5kaW5nRXZlbnRzKHZvaWQpCit7CisgICAgLy8gQ2xlYXIgcGVuZGluZyBldmVudHMgdGhhdCBjb3VsZCBjYXVzZSByYWNlIGluIHRoZSBNQUMgbGF5ZXIuCisgICAgdm9sYXRpbGUgdWludDMyX3QgcGVuZGluZ0V2ZW50czsKKyAgICB1aW50MzJfdCAgICAgICAgICBiaXRzVG9SZW1haW4gPSB+KDBVTCk7CisKKyAgICBiaXRzVG9SZW1haW4gJj0gfigxVUwgPDwga1BlbmRpbmdFdmVudEZyYW1lVHJhbnNtaXR0ZWQpOworICAgIGJpdHNUb1JlbWFpbiAmPSB+KDFVTCA8PCBrUGVuZGluZ0V2ZW50Q2hhbm5lbEFjY2Vzc0ZhaWx1cmUpOworCisgICAgYml0c1RvUmVtYWluICY9IH4oMVVMIDw8IGtQZW5kaW5nRXZlbnRTbGVlcCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyA9IF9fTERSRVhXKCh1bnNpZ25lZCBsb25nIHZvbGF0aWxlICopJnNQZW5kaW5nRXZlbnRzKTsKKyAgICAgICAgcGVuZGluZ0V2ZW50cyAmPSBiaXRzVG9SZW1haW47CisgICAgfQorICAgIHdoaWxlIChfX1NUUkVYVyhwZW5kaW5nRXZlbnRzLCAodW5zaWduZWQgbG9uZyB2b2xhdGlsZSAqKSZzUGVuZGluZ0V2ZW50cykpOworfQorCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUllZWVFdWk2NCkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgdWludDY0X3QgZmFjdG9yeUFkZHJlc3MgPSAodWludDY0X3QpTlJGX0ZJQ1ItPkRFVklDRUlEWzBdIDw8IDMyOworICAgIGZhY3RvcnlBZGRyZXNzIHw9ICBOUkZfRklDUi0+REVWSUNFSURbMV07CisKKyAgICBtZW1jcHkoYUllZWVFdWk2NCwgJmZhY3RvcnlBZGRyZXNzLCBzaXplb2YoZmFjdG9yeUFkZHJlc3MpKTsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICB1aW50OF90IGFkZHJlc3NbU0hPUlRfQUREUkVTU19TSVpFXTsKKyAgICBjb252ZXJ0U2hvcnRBZGRyZXNzKGFkZHJlc3MsIGFQYW5JZCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bhbl9pZF9zZXQoYWRkcmVzcyk7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphRXh0ZW5kZWRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2V4dGVuZGVkX2FkZHJlc3Nfc2V0KGFFeHRlbmRlZEFkZHJlc3MpOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgdWludDhfdCBhZGRyZXNzW1NIT1JUX0FERFJFU1NfU0laRV07CisgICAgY29udmVydFNob3J0QWRkcmVzcyhhZGRyZXNzLCBhU2hvcnRBZGRyZXNzKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc2hvcnRfYWRkcmVzc19zZXQoYWRkcmVzcyk7Cit9CisKK3ZvaWQgbnJmNVJhZGlvSW5pdCh2b2lkKQoreworICAgIGRhdGFJbml0KCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9pbml0KCk7Cit9CisKK3ZvaWQgbnJmNVJhZGlvRGVpbml0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWluaXQoKTsKK30KKworb3RSYWRpb1N0YXRlIG90UGxhdFJhZGlvR2V0U3RhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBpZiAoc0Rpc2FibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworICAgIH0KKworICAgIHN3aXRjaCAobnJmX2Rydl9yYWRpbzgwMjE1NF9zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgY2FzZSBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1NMRUVQOgorICAgICAgICByZXR1cm4gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisKKyAgICBjYXNlIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfUkVDRUlWRToKKyAgICBjYXNlIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfRU5FUkdZX0RFVEVDVElPTjoKKyAgICAgICAgcmV0dXJuIE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisKKyAgICBjYXNlIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfVFJBTlNNSVQ6CisgICAgICAgIHJldHVybiBPVF9SQURJT19TVEFURV9UUkFOU01JVDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7IC8vIE1ha2Ugc3VyZSBkcml2ZXIgcmV0dXJuZWQgdmFsaWQgc3RhdGUuCisgICAgfQorCisgICAgcmV0dXJuIE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7IC8vIEl0IGlzIHRoZSBkZWZhdWx0IHN0YXRlLiBSZXR1cm4gaXQgaW4gY2FzZSBvZiB1bmtub3duLgorfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5hYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGlmIChzRGlzYWJsZWQpCisgICAgeworICAgICAgICBzRGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBpZiAoIXNEaXNhYmxlZCkKKyAgICB7CisgICAgICAgIHNEaXNhYmxlZCA9IHRydWU7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIHJldHVybiAhc0Rpc2FibGVkOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9zbGVlcCgpKQorICAgIHsKKyAgICAgICAgY2xlYXJQZW5kaW5nRXZlbnRzKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworICAgICAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudFNsZWVwKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmUoYUNoYW5uZWwpOworICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBhRnJhbWUtPm1Qc2R1Wy0xXSA9IGFGcmFtZS0+bUxlbmd0aDsKKworICAgIGlmIChucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0KCZhRnJhbWUtPm1Qc2R1Wy0xXSwgYUZyYW1lLT5tQ2hhbm5lbCwgYUZyYW1lLT5tUG93ZXIsIHRydWUpKQorICAgIHsKKyAgICAgICAgY2xlYXJQZW5kaW5nRXZlbnRzKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworICAgICAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudENoYW5uZWxBY2Nlc3NGYWlsdXJlKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X3Jzc2lfbGFzdF9nZXQoKTsKK30KKworb3RSYWRpb0NhcHMgb3RQbGF0UmFkaW9HZXRDYXBzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworCisgICAgcmV0dXJuIE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU47Cit9CisKK2Jvb2wgb3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X3Byb21pc2N1b3VzX2dldCgpOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJvbWlzY3VvdXNfc2V0KGFFbmFibGUpOworfQorCit2b2lkIG90UGxhdFJhZGlvRW5hYmxlU3JjTWF0Y2gob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19wZW5kaW5nX2JpdF9zZXQoYUVuYWJsZSk7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgdWludDhfdCBzaG9ydEFkZHJlc3NbU0hPUlRfQUREUkVTU19TSVpFXTsKKyAgICBjb252ZXJ0U2hvcnRBZGRyZXNzKHNob3J0QWRkcmVzcywgYVNob3J0QWRkcmVzcyk7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQoc2hvcnRBZGRyZXNzLCBmYWxzZSkpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQoYUV4dEFkZHJlc3MsIHRydWUpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgdWludDhfdCBzaG9ydEFkZHJlc3NbU0hPUlRfQUREUkVTU19TSVpFXTsKKyAgICBjb252ZXJ0U2hvcnRBZGRyZXNzKHNob3J0QWRkcmVzcywgYVNob3J0QWRkcmVzcyk7CisKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9jbGVhcihzaG9ydEFkZHJlc3MsIGZhbHNlKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19BRERSRVNTOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfY2xlYXIoYUV4dEFkZHJlc3MsIHRydWUpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0FERFJFU1M7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoZmFsc2UpOworfQorCit2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BlbmRpbmdfYml0X2Zvcl9hZGRyX3Jlc2V0KHRydWUpOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgICh2b2lkKSBhSW5zdGFuY2U7CisKKyAgICBzRW5lcmd5RGV0ZWN0aW9uVGltZSAgICA9ICh1aW50MzJfdCkgYVNjYW5EdXJhdGlvbiAqIDEwMDBVTDsKKyAgICBzRW5lcmd5RGV0ZWN0aW9uQ2hhbm5lbCA9IGFTY2FuQ2hhbm5lbDsKKworICAgIGNsZWFyUGVuZGluZ0V2ZW50cygpOworCisgICAgaWYgKG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGlvbihhU2NhbkNoYW5uZWwsIHNFbmVyZ3lEZXRlY3Rpb25UaW1lKSkKKyAgICB7CisgICAgICAgIHJlc2V0UGVuZGluZ0V2ZW50KGtQZW5kaW5nRXZlbnRFbmVyZ3lEZXRlY3Rpb25TdGFydCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNldFBlbmRpbmdFdmVudChrUGVuZGluZ0V2ZW50RW5lcmd5RGV0ZWN0aW9uU3RhcnQpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3R4X3Bvd2VyX3NldChhUG93ZXIpOworfQorCit2b2lkIG5yZjVSYWRpb1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSQURJT19SWF9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBpZiAoc1JlY2VpdmVkRnJhbWVzW2ldLm1Qc2R1ICE9IE5VTEwpCisgICAgICAgIHsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlZEZyYW1lc1tpXSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJnNSZWNlaXZlZEZyYW1lc1tpXSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZmZlckFkZHJlc3MgPSAmc1JlY2VpdmVkRnJhbWVzW2ldLm1Qc2R1Wy0xXTsKKyAgICAgICAgICAgIHNSZWNlaXZlZEZyYW1lc1tpXS5tUHNkdSA9IE5VTEw7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKGJ1ZmZlckFkZHJlc3MpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzUGVuZGluZ0V2ZW50U2V0KGtQZW5kaW5nRXZlbnRGcmFtZVRyYW5zbWl0dGVkKSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsIE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBvdFJhZGlvRnJhbWUgKmFja1B0ciA9IChzQWNrRnJhbWUubVBzZHUgPT0gTlVMTCkgPyBOVUxMIDogJnNBY2tGcmFtZTsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBhY2tQdHIsIE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNBY2tGcmFtZS5tUHNkdSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKHNBY2tGcmFtZS5tUHNkdSAtIDEpOworICAgICAgICAgICAgc0Fja0ZyYW1lLm1Qc2R1ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJlc2V0UGVuZGluZ0V2ZW50KGtQZW5kaW5nRXZlbnRGcmFtZVRyYW5zbWl0dGVkKTsKKyAgICB9CisKKyAgICBpZiAoaXNQZW5kaW5nRXZlbnRTZXQoa1BlbmRpbmdFdmVudENoYW5uZWxBY2Nlc3NGYWlsdXJlKSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgICAgIGlmIChvdFBsYXREaWFnTW9kZUdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXREaWFnUmFkaW9UcmFuc21pdERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBvdFBsYXRSYWRpb1R4RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgTlVMTCwgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICByZXNldFBlbmRpbmdFdmVudChrUGVuZGluZ0V2ZW50Q2hhbm5lbEFjY2Vzc0ZhaWx1cmUpOworICAgIH0KKworICAgIGlmIChpc1BlbmRpbmdFdmVudFNldChrUGVuZGluZ0V2ZW50RW5lcmd5RGV0ZWN0ZWQpKQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9FbmVyZ3lTY2FuRG9uZShhSW5zdGFuY2UsIHNFbmVyZ3lEZXRlY3RlZCk7CisKKyAgICAgICAgcmVzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGVkKTsKKyAgICB9CisKKyAgICBpZiAoaXNQZW5kaW5nRXZlbnRTZXQoa1BlbmRpbmdFdmVudFNsZWVwKSkKKyAgICB7CisgICAgICAgIGlmIChucmZfZHJ2X3JhZGlvODAyMTU0X3NsZWVwKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0UGVuZGluZ0V2ZW50KGtQZW5kaW5nRXZlbnRTbGVlcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNQZW5kaW5nRXZlbnRTZXQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGlvblN0YXJ0KSkKKyAgICB7CisgICAgICAgIGlmIChucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3Rpb24oc0VuZXJneURldGVjdGlvbkNoYW5uZWwsIHNFbmVyZ3lEZXRlY3Rpb25UaW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGlvblN0YXJ0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmVkKHVpbnQ4X3QgKnBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgIG90UmFkaW9GcmFtZSAqcmVjZWl2ZWRGcmFtZSA9IE5VTEw7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUkFESU9fUlhfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNSZWNlaXZlZEZyYW1lc1tpXS5tUHNkdSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZWNlaXZlZEZyYW1lID0gJnNSZWNlaXZlZEZyYW1lc1tpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KHJlY2VpdmVkRnJhbWUgIT0gTlVMTCk7CisKKyAgICBtZW1zZXQocmVjZWl2ZWRGcmFtZSwgMCwgc2l6ZW9mKCpyZWNlaXZlZEZyYW1lKSk7CisKKyAgICByZWNlaXZlZEZyYW1lLT5tUHNkdSAgICA9ICZwX2RhdGFbMV07CisgICAgcmVjZWl2ZWRGcmFtZS0+bUxlbmd0aCAgPSBwX2RhdGFbMF07CisgICAgcmVjZWl2ZWRGcmFtZS0+bVBvd2VyICAgPSBwb3dlcjsKKyAgICByZWNlaXZlZEZyYW1lLT5tTHFpICAgICA9IGxxaTsKKyAgICByZWNlaXZlZEZyYW1lLT5tQ2hhbm5lbCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfY2hhbm5lbF9nZXQoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0dGVkKHVpbnQ4X3QgKmFBY2tQc2R1LCBpbnQ4X3QgYVBvd2VyLCBpbnQ4X3QgYUxxaSkKK3sKKyAgICBpZiAoYUFja1BzZHUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHNBY2tGcmFtZS5tUHNkdSA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNBY2tGcmFtZS5tUHNkdSAgICA9ICZhQWNrUHNkdVsxXTsKKyAgICAgICAgc0Fja0ZyYW1lLm1MZW5ndGggID0gYUFja1BzZHVbMF07CisgICAgICAgIHNBY2tGcmFtZS5tUG93ZXIgICA9IGFQb3dlcjsKKyAgICAgICAgc0Fja0ZyYW1lLm1McWkgICAgID0gYUxxaTsKKyAgICAgICAgc0Fja0ZyYW1lLm1DaGFubmVsID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9jaGFubmVsX2dldCgpOworICAgIH0KKworICAgIHNldFBlbmRpbmdFdmVudChrUGVuZGluZ0V2ZW50RnJhbWVUcmFuc21pdHRlZCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9idXN5X2NoYW5uZWwodm9pZCkKK3sKKyAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudENoYW5uZWxBY2Nlc3NGYWlsdXJlKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3RlZChpbnQ4X3QgcmVzdWx0KQoreworICAgIC8vIFRPRE86IENvcnJlY3QgUlNTSSBjYWxjdWxhdGlvbiBhZnRlciBsYWIgdGVzdHMuCisgICAgc0VuZXJneURldGVjdGVkID0gOTQgLSByZXN1bHQ7CisKKyAgICBzZXRQZW5kaW5nRXZlbnQoa1BlbmRpbmdFdmVudEVuZXJneURldGVjdGVkKTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UmVjZWl2ZVNlbnNpdGl2aXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE5SRjUyODQwX1JFQ0VJVkVfU0VOU0lUSVZJVFk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcmFuZG9tLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyZDZmYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9yYW5kb20uYwpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPHV0aWxzL2NvZGVfdXRpbHMuaD4KKworI2luY2x1ZGUgInBsYXRmb3JtLW5yZjUuaCIKKworI2lmIFNPRlRERVZJQ0VfUFJFU0VOVAorI2luY2x1ZGUgInNvZnRkZXZpY2UuaCIKKyNlbHNlCisjaW5jbHVkZSA8aGFsL25yZl9ybmcuaD4KKworc3RhdGljIHVpbnQ4X3Qgc0J1ZmZlcltSTkdfQlVGRkVSX1NJWkVdOworc3RhdGljIHZvbGF0aWxlIHVpbnQzMl90IHNSZWFkUG9zaXRpb247CitzdGF0aWMgdm9sYXRpbGUgdWludDMyX3Qgc1dyaXRlUG9zaXRpb247CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgYnVmZmVyQ291bnQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB3cml0ZVBvcyA9IHNXcml0ZVBvc2l0aW9uOworICAgIHJldHVybiB3cml0ZVBvcyAtIHNSZWFkUG9zaXRpb247Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBidWZmZXJJc0VtcHR5KHZvaWQpCit7CisgICAgcmV0dXJuIChidWZmZXJDb3VudCgpID09IDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYnVmZmVySXNVaW50MzJSZWFkeSh2b2lkKQoreworICAgIHJldHVybiAoYnVmZmVyQ291bnQoKSA+PSA0KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGJ1ZmZlcklzRnVsbCh2b2lkKQoreworICAgIHJldHVybiAoYnVmZmVyQ291bnQoKSA+PSBSTkdfQlVGRkVSX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyUHV0KHVpbnQ4X3QgdmFsKQoreworICAgIGlmICghYnVmZmVySXNGdWxsKCkpCisgICAgeworICAgICAgICBzQnVmZmVyWyhzV3JpdGVQb3NpdGlvbisrKSAlIFJOR19CVUZGRVJfU0laRV0gPSB2YWw7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgYnVmZmVyR2V0KCkKK3sKKyAgICB1aW50OF90IHJldFZhbCA9IDA7CisKKyAgICBpZiAoIWJ1ZmZlcklzRW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHNCdWZmZXJbc1JlYWRQb3NpdGlvbisrICUgUk5HX0JVRkZFUl9TSVpFXTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGJ1ZmZlckdldFVpbnQzMigpCit7CisgICAgdWludDMyX3QgcmV0VmFsID0gMDsKKworICAgIGlmIChidWZmZXJJc1VpbnQzMlJlYWR5KCkpCisgICAgeworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICByZXRWYWwgPDw9IDg7CisgICAgICAgICAgICByZXRWYWwgfD0gYnVmZmVyR2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0b3JTdGFydCh2b2lkKQoreworICAgIG5yZl9ybmdfZXZlbnRfY2xlYXIoTlJGX1JOR19FVkVOVF9WQUxSRFkpOworICAgIG5yZl9ybmdfaW50X2VuYWJsZShOUkZfUk5HX0lOVF9WQUxSRFlfTUFTSyk7CisgICAgbnJmX3JuZ190YXNrX3RyaWdnZXIoTlJGX1JOR19UQVNLX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdG9yU3RvcCh2b2lkKQoreworICAgIG5yZl9ybmdfaW50X2Rpc2FibGUoTlJGX1JOR19JTlRfVkFMUkRZX01BU0spOworICAgIG5yZl9ybmdfdGFza190cmlnZ2VyKE5SRl9STkdfVEFTS19TVE9QKTsKK30KKwordm9pZCBSTkdfSVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmIChucmZfcm5nX2V2ZW50X2dldChOUkZfUk5HX0VWRU5UX1ZBTFJEWSkgJiYKKyAgICAgICAgbnJmX3JuZ19pbnRfZ2V0KE5SRl9STkdfSU5UX1ZBTFJEWV9NQVNLKSkKKyAgICB7CisgICAgICAgIG5yZl9ybmdfZXZlbnRfY2xlYXIoTlJGX1JOR19FVkVOVF9WQUxSRFkpOworCisgICAgICAgIGJ1ZmZlclB1dChucmZfcm5nX3JhbmRvbV92YWx1ZV9nZXQoKSk7CisKKyAgICAgICAgaWYgKGJ1ZmZlcklzRnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBnZW5lcmF0b3JTdG9wKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UCisKK3ZvaWQgbnJmNVJhbmRvbUluaXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBzZWVkID0gMDsKKworI2lmIFNPRlRERVZJQ0VfUFJFU0VOVAorICAgIHVpbnQzMl90IHJldHZhbDsKKworICAgIGRvCisgICAgeworICAgICAgICAvLyBXYWl0IGZvciB0aGUgZmlyc3QgcmFuZG9taXplZCA0IGJ5dGVzLCB0byByYW5kb21pemUgc29mdHdhcmUgZ2VuZXJhdG9yIHNlZWQuCisgICAgICAgIHJldHZhbCA9IHNkX3JhbmRfYXBwbGljYXRpb25fdmVjdG9yX2dldCgodWludDhfdCAqKSZzZWVkLCBzaXplb2Yoc2VlZCkpOworICAgIH0KKyAgICB3aGlsZSAocmV0dmFsICE9IE5SRl9TVUNDRVNTICYmIHNlZWQgPT0gMCk7CisKKyNlbHNlIC8vIFNPRlRERVZJQ0VfUFJFU0VOVAorICAgIG1lbXNldChzQnVmZmVyLCAwLCBzaXplb2Yoc0J1ZmZlcikpOworICAgIHNSZWFkUG9zaXRpb24gPSAwOworICAgIHNXcml0ZVBvc2l0aW9uID0gMDsKKworICAgIE5WSUNfU2V0UHJpb3JpdHkoUk5HX0lSUW4sIFJOR19JUlFfUFJJT1JJVFkpOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFJOR19JUlFuKTsKKyAgICBOVklDX0VuYWJsZUlSUShSTkdfSVJRbik7CisKKyAgICBucmZfcm5nX2Vycm9yX2NvcnJlY3Rpb25fZW5hYmxlKCk7CisgICAgbnJmX3JuZ19zaG9ydHNfZGlzYWJsZShOUkZfUk5HX1NIT1JUX1ZBTFJEWV9TVE9QX01BU0spOworICAgIGdlbmVyYXRvclN0YXJ0KCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgZmlyc3QgcmFuZG9taXplZCA0IGJ5dGVzLCB0byByYW5kb21pemUgc29mdHdhcmUgZ2VuZXJhdG9yIHNlZWQuCisgICAgd2hpbGUgKCFidWZmZXJJc1VpbnQzMlJlYWR5KCkpIDsKKworICAgIHNlZWQgPSBidWZmZXJHZXRVaW50MzIoKTsKKyNlbmRpZiAvLyBTT0ZUREVWSUNFX1BSRVNFTlQKKworICAgIHNyYW5kKHNlZWQpOworfQorCit2b2lkIG5yZjVSYW5kb21EZWluaXQodm9pZCkKK3sKKyNpZm5kZWYgU09GVERFVklDRV9QUkVTRU5UCisgICAgZ2VuZXJhdG9yU3RvcCgpOworCisgICAgTlZJQ19EaXNhYmxlSVJRKFJOR19JUlFuKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShSTkdfSVJRbik7CisgICAgTlZJQ19TZXRQcmlvcml0eShSTkdfSVJRbiwgMCk7CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UCit9CisKK3VpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQoreworICAgIHJldHVybiAodWludDMyX3QpcmFuZCgpOworfQorCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICBjb3B5TGVuZ3RoOworICAgIHVpbnQxNl90IGluZGV4ID0gMDsKKworICAgIG90RVhQRUNUX0FDVElPTihhT3V0cHV0ICYmIGFPdXRwdXRMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGRvCisgICAgeworI2lmIFNPRlRERVZJQ0VfUFJFU0VOVAorICAgICAgICBzZF9yYW5kX2FwcGxpY2F0aW9uX2J5dGVzX2F2YWlsYWJsZV9nZXQoJmNvcHlMZW5ndGgpOworI2Vsc2UgLy8gU09GVERFVklDRV9QUkVTRU5UCisgICAgICAgIGNvcHlMZW5ndGggPSAodWludDhfdClidWZmZXJDb3VudCgpOworI2VuZGlmIC8vIFNPRlRERVZJQ0VfUFJFU0VOVAorCisgICAgICAgIGlmIChjb3B5TGVuZ3RoID4gYU91dHB1dExlbmd0aCAtIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBjb3B5TGVuZ3RoID0gYU91dHB1dExlbmd0aCAtIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvcHlMZW5ndGggPiAwKQorICAgICAgICB7CisKKyNpZiBTT0ZUREVWSUNFX1BSRVNFTlQKKyAgICAgICAgICAgIHVpbnQzMl90IHJldHZhbCA9IHNkX3JhbmRfYXBwbGljYXRpb25fdmVjdG9yX2dldChhT3V0cHV0ICsgaW5kZXgsIGNvcHlMZW5ndGgpOworICAgICAgICAgICAgb3RFWFBFQ1RfQUNUSU9OKHJldHZhbCA9PSBOUkZfU1VDQ0VTUywgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworI2Vsc2UgLy8gU09GVERFVklDRV9QUkVTRU5UCisKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3B5TGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYU91dHB1dFtpICsgaW5kZXhdID0gYnVmZmVyR2V0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdlbmVyYXRvclN0YXJ0KCk7CisjZW5kaWYgLy8gU09GVERFVklDRV9QUkVTRU5UCisKKyAgICAgICAgICAgIGluZGV4ICs9IGNvcHlMZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGluZGV4IDwgYU91dHB1dExlbmd0aCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3NvZnRkZXZpY2UuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNzdlNQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgc29mdGRldmljZSBoZWxwZXIgZnVuY3Rpb25zLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzb2Z0ZGV2aWNlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0tc29mdGRldmljZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtLW5yZjUuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxucmZfcmFhbF9zb2Z0ZGV2aWNlLmg+CisKK290RXJyb3IgbnJmNVNkRXJyb3JUb090RXJyb3IodWludDMyX3QgYVNkRXJyb3IpCit7CisgICAgc3dpdGNoIChhU2RFcnJvcikKKyAgICB7CisgICAgY2FzZSBOUkZfU1VDQ0VTUzoKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOUkZfRVJST1JfSU5WQUxJRF9TVEFURToKKyAgICBjYXNlIE5SRl9FUlJPUl9CVVNZOgorICAgICAgICByZXR1cm4gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FUlJPUl9JTlZBTElEX1BBUkFNOgorICAgIGNhc2UgTlJGX0VSUk9SX0lOVkFMSURfQUREUjoKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FUlJPUl9OT19NRU06CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT19CVUZTOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX0VSUk9SX05PVF9GT1VORDoKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEOgorICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9GQUlMRUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBQbGF0Zm9ybVNvZnRkZXZpY2VTb2NFdnRIYW5kbGVyKHVpbnQzMl90IGFFdnRJZCkKK3sKKyAgICBucmY1U2RTb2NGbGFzaFByb2Nlc3MoYUV2dElkKTsKKyAgICBucmZfcmFhbF9zb2Z0ZGV2aWNlX3NvY19ldnRfaGFuZGxlcihhRXZ0SWQpOworfQorCit2b2lkIFBsYXRmb3JtU29mdGRldmljZVJhYWxDb25maWcoY29uc3QgUGxhdGZvcm1Tb2Z0ZGV2aWNlUmFhbENvbmZpZ1BhcmFtcyAqYUNvbmZpZykKK3sKKyAgICBucmZfcmFhbF9zb2Z0ZGV2aWNlX2NmZ190IGNmZzsKKyAgICBtZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOworCisgICAgY2ZnLnRpbWVzbG90X2xlbmd0aCAgICAgID0gYUNvbmZpZy0+dGltZXNsb3RMZW5ndGg7CisgICAgY2ZnLnRpbWVzbG90X3RpbWVvdXQgICAgID0gYUNvbmZpZy0+dGltZXNsb3RUaW1lb3V0OworICAgIGNmZy50aW1lc2xvdF9tYXhfbGVuZ3RoICA9IGFDb25maWctPnRpbWVzbG90TWF4TGVuZ3RoOworICAgIGNmZy50aW1lc2xvdF9hbGxvY19pdGVycyA9IGFDb25maWctPnRpbWVzbG90QWxsb2NJdGVyczsKKyAgICBjZmcudGltZXNsb3Rfc2FmZV9tYXJnaW4gPSBhQ29uZmlnLT50aW1lc2xvdFNhZmVNYXJnaW47CisgICAgY2ZnLmxmX2Nsa19hY2N1cmFjeV9wcG0gID0gYUNvbmZpZy0+bGZDbGtBY2N1cmFjeVBwbTsKKworICAgIG5yZl9yYWFsX3NvZnRkZXZpY2VfY29uZmlnKCZjZmcpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3NvZnRkZXZpY2UuaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhYWY1NQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9ucmY1Mjg0MC9zb2Z0ZGV2aWNlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIGNvbW1vbiBTb2Z0RGV2aWNlIGhlYWRlcnMuCisgKgorICovCisKKyNpZm5kZWYgU09GVERFVklDRV9IXworI2RlZmluZSBTT0ZUREVWSUNFX0hfCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3JldHVybi10eXBlXCIiKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC1wYXJhbWV0ZXJcIiIpCisgICAgX1ByYWdtYSgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XcGVkYW50aWNcIiIpCisjZW5kaWYKKworI2luY2x1ZGUgPG5yZl9zdmMuaD4KKyNpbmNsdWRlIDxucmZfc2RtLmg+CisjaW5jbHVkZSA8bnJmX3NvYy5oPgorI2luY2x1ZGUgPG5yZl9udmljLmg+CisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisjZW5kaWYKKworI2VuZGlmICAvLyBTT0ZUREVWSUNFX0hfCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvbnJmNTI4NDAvdWFydC5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk1MzlmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL25yZjUyODQwL3VhcnQuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgVUFSVCBjb21tdW5pY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKKyNpbmNsdWRlIDxkcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suaD4KKyNpbmNsdWRlIDxoYWwvbnJmX3VhcnQuaD4KKyNpbmNsdWRlIDxoYWwvbnJmX2dwaW8uaD4KKyNpbmNsdWRlICJwbGF0Zm9ybS1ucmY1LmgiCisKKy8qKgorICogIFVBUlQgVFggYnVmZmVyIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3QgKnNUcmFuc21pdEJ1ZmZlciA9IE5VTEw7CitzdGF0aWMgdWludDE2X3Qgc1RyYW5zbWl0TGVuZ3RoID0gMDsKK3N0YXRpYyBib29sIHNUcmFuc21pdERvbmUgPSAwOworCisvKioKKyAqICBVQVJUIFJYIHJpbmcgYnVmZmVyIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIHVpbnQ4X3Qgc1JlY2VpdmVCdWZmZXJbVUFSVF9SWF9CVUZGRVJfU0laRV07CitzdGF0aWMgdWludDE2X3Qgc1JlY2VpdmVIZWFkID0gMDsKK3N0YXRpYyB1aW50MTZfdCBzUmVjZWl2ZVRhaWwgPSAwOworCisvKioKKyAqIEZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBSWCBidWZmZXIgaXMgZnVsbC4KKyAqCisgKiBAcmV0dmFsIHRydWUgIFJYIGJ1ZmZlciBpcyBmdWxsLgorICogQHJldHZhbCBmYWxzZSBSWCBidWZmZXIgaXMgbm90IGZ1bGwuCisgKi8KK3N0YXRpYyBfX0lOTElORSBib29sIGlzUnhCdWZmZXJGdWxsKCkKK3sKKyAgICB1aW50MTZfdCBuZXh0ID0gKHNSZWNlaXZlSGVhZCArIDEpICUgVUFSVF9SWF9CVUZGRVJfU0laRTsKKyAgICByZXR1cm4gKG5leHQgPT0gc1JlY2VpdmVUYWlsKTsKK30KKworLyoqCisgKiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgUlggYnVmZmVyIGlzIGVtcHR5LgorICoKKyAqIEByZXR2YWwgdHJ1ZSAgUlggYnVmZmVyIGlzIGVtcHR5LgorICogQHJldHZhbCBmYWxzZSBSWCBidWZmZXIgaXMgbm90IGVtcHR5LgorICovCitzdGF0aWMgX19JTkxJTkUgYm9vbCBpc1J4QnVmZmVyRW1wdHkoKQoreworICAgIHJldHVybiAoc1JlY2VpdmVIZWFkID09IHNSZWNlaXZlVGFpbCk7Cit9CisKKy8qKgorICogRnVuY3Rpb24gZm9yIG5vdGlmeWluZyBhcHBsaWNhdGlvbiBhYm91dCBuZXcgYnl0ZXMgcmVjZWl2ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NSZWNlaXZlKHZvaWQpCit7CisgICAgLy8gU2V0IGhlYWQgcG9zaXRpb24gdG8gbm90IGJlIGNoYW5nZWQgZHVyaW5nIHJlYWQgcHJvY2VkdXJlLgorICAgIHVpbnQxNl90IGhlYWQgPSBzUmVjZWl2ZUhlYWQ7CisKKyAgICBvdEVYUEVDVChpc1J4QnVmZmVyRW1wdHkoKSA9PSBmYWxzZSk7CisKKyAgICAvLyBJbiBjYXNlIGhlYWQgcm9sbCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgbm90aWZ5IGFib3V0IGxlZnQKKyAgICAvLyBieXRlcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKyAgICBpZiAoaGVhZCA8IHNSZWNlaXZlVGFpbCkKKyAgICB7CisgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZCgmc1JlY2VpdmVCdWZmZXJbc1JlY2VpdmVUYWlsXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChVQVJUX1JYX0JVRkZFUl9TSVpFIC0gc1JlY2VpdmVUYWlsKSk7CisgICAgICAgIHNSZWNlaXZlVGFpbCA9IDA7CisgICAgfQorCisgICAgLy8gTm90aWZ5IGFib3V0IHJlY2VpdmVkIGJ5dGVzLgorICAgIGlmIChoZWFkID4gc1JlY2VpdmVUYWlsKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFJlY2VpdmVkKCZzUmVjZWl2ZUJ1ZmZlcltzUmVjZWl2ZVRhaWxdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhlYWQgLSBzUmVjZWl2ZVRhaWwpKTsKKyAgICAgICAgc1JlY2VpdmVUYWlsID0gaGVhZDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisvKioKKyAqIEZ1bmN0aW9uIGZvciBub3RpZnlpbmcgYXBwbGljYXRpb24gYWJvdXQgdHJhbnNtaXNzaW9uIGJlaW5nIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NUcmFuc21pdCh2b2lkKQoreworICAgIG90RVhQRUNUKHNUcmFuc21pdEJ1ZmZlciAhPSBOVUxMKTsKKworICAgIGlmIChzVHJhbnNtaXREb25lKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgVHJhbnNtaXRpb24gdHJhbnNhY3Rpb24gYW5kIG5vdGlmeSBhcHBsaWNhdGlvbi4KKyAgICAgICAgc1RyYW5zbWl0QnVmZmVyID0gTlVMTDsKKyAgICAgICAgc1RyYW5zbWl0TGVuZ3RoID0gMDsKKyAgICAgICAgc1RyYW5zbWl0RG9uZSA9IGZhbHNlOworICAgICAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIG5yZjVVYXJ0UHJvY2Vzcyh2b2lkKQoreworICAgIHByb2Nlc3NSZWNlaXZlKCk7CisgICAgcHJvY2Vzc1RyYW5zbWl0KCk7Cit9CisKK3ZvaWQgbnJmNVVhcnRJbml0KHZvaWQpCit7CisgICAgLy8gU2V0IHVwIFRYIGFuZCBSWCBwaW5zLgorICAgIG5yZl9ncGlvX3Bpbl9zZXQoVUFSVF9QSU5fVFgpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoVUFSVF9QSU5fVFgpOworICAgIG5yZl9ncGlvX2NmZ19pbnB1dChVQVJUX1BJTl9SWCwgTlJGX0dQSU9fUElOX05PUFVMTCk7CisgICAgbnJmX3VhcnRfdHhyeF9waW5zX3NldChVQVJUX0lOU1RBTkNFLCBVQVJUX1BJTl9UWCwgVUFSVF9QSU5fUlgpOworCisjaWYgKFVBUlRfSFdGQyA9PSBOUkZfVUFSVF9IV0ZDX0VOQUJMRUQpCisgICAgLy8gU2V0IHVwIENUUyBhbmQgUlRTIHBpbnMuCisgICAgbnJmX2dwaW9fY2ZnX2lucHV0KFVBUlRfUElOX0NUUywgTlJGX0dQSU9fUElOX05PUFVMTCk7CisgICAgbnJmX2dwaW9fcGluX3NldChVQVJUX1BJTl9SVFMpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoVUFSVF9QSU5fUlRTKTsKKyAgICBucmZfdWFydF9od2ZjX3BpbnNfc2V0KFVBUlRfSU5TVEFOQ0UsIFVBUlRfUElOX1JUUywgVUFSVF9QSU5fQ1RTKTsKKyNlbmRpZgorCisgICAgLy8gQ29uZmlndXJlIGJhdWRyYXRlLgorICAgIG5yZl91YXJ0X2JhdWRyYXRlX3NldChVQVJUX0lOU1RBTkNFLCBVQVJUX0JBVURSQVRFKTsKKworICAgIC8vIENvbmZpZ3VyZSBwYXJpdHkgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbC4KKyAgICBucmZfdWFydF9jb25maWd1cmUoVUFSVF9JTlNUQU5DRSwgVUFSVF9QQVJJVFksIFVBUlRfSFdGQyk7CisKKyAgICAvLyBDbGVhciBVQVJUIHNwZWNpZmljIGV2ZW50cy4KKyAgICBucmZfdWFydF9ldmVudF9jbGVhcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9UWERSRFkpOworICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX0VSUk9SKTsKKyAgICBucmZfdWFydF9ldmVudF9jbGVhcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9SWERSRFkpOworCisgICAgLy8gRW5hYmxlIGludGVycnVwdHMgZm9yIFRYLgorICAgIG5yZl91YXJ0X2ludF9lbmFibGUoVUFSVF9JTlNUQU5DRSwgTlJGX1VBUlRfSU5UX01BU0tfVFhEUkRZKTsKKworICAgIC8vIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBSWC4KKyAgICBucmZfdWFydF9pbnRfZW5hYmxlKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0lOVF9NQVNLX1JYRFJEWSB8IE5SRl9VQVJUX0lOVF9NQVNLX0VSUk9SKTsKKworICAgIC8vIENvbmZpZ3VyZSBOVklDIHRvIGhhbmRsZSBVQVJUIGludGVycnVwdHMuCisgICAgTlZJQ19TZXRQcmlvcml0eShVQVJUX0lSUU4sIFVBUlRfSVJRX1BSSU9SSVRZKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShVQVJUX0lSUU4pOworICAgIE5WSUNfRW5hYmxlSVJRKFVBUlRfSVJRTik7Cit9CisKK3ZvaWQgbnJmNVVhcnREZWluaXQodm9pZCkKK3sKKyAgICAvLyBEaXNhYmxlIE5WSUMgaW50ZXJydXB0LgorICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUX0lSUU4pOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFVBUlRfSVJRTik7CisgICAgTlZJQ19TZXRQcmlvcml0eShVQVJUX0lSUU4sIDApOworCisgICAgLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBUWC4KKyAgICBucmZfdWFydF9pbnRfZGlzYWJsZShVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9JTlRfTUFTS19UWERSRFkpOworCisgICAgLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBSWC4KKyAgICBucmZfdWFydF9pbnRfZGlzYWJsZShVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9JTlRfTUFTS19SWERSRFkgfCBOUkZfVUFSVF9JTlRfTUFTS19FUlJPUik7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydEVuYWJsZSh2b2lkKQoreworICAgIC8vIFN0YXJ0IEhGQ0xLCisgICAgbnJmX2Rydl9jbG9ja19oZmNsa19yZXF1ZXN0KE5VTEwpOworCisgICAgd2hpbGUgKCFucmZfZHJ2X2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcoKSkge30KKworICAgIC8vIEVuYWJsZSBVQVJUIGluc3RhbmNlLCBhbmQgc3RhcnQgUlggb24gaXQuCisgICAgbnJmX3VhcnRfZW5hYmxlKFVBUlRfSU5TVEFOQ0UpOworICAgIG5yZl91YXJ0X3Rhc2tfdHJpZ2dlcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9UQVNLX1NUQVJUUlgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0VWFydERpc2FibGUodm9pZCkKK3sKKyAgICAvLyBEaXNhYmxlIFVBUlQgaW5zdGFuY2UuCisgICAgbnJmX3VhcnRfZGlzYWJsZShVQVJUX0lOU1RBTkNFKTsKKworICAgIC8vIFJlbGVhc2UgSEYgY2xvY2suCisgICAgbnJmX2Rydl9jbG9ja19oZmNsa19yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0U2VuZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKHNUcmFuc21pdEJ1ZmZlciA9PSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCisgICAgLy8gU2V0IHVwIHRyYW5zbWl0IGJ1ZmZlciBhbmQgaXRzIHNpemUgd2l0aG91dCBjb3VudGluZyBmaXJzdCB0cmlnZ2VyZWQgYnl0ZS4KKyAgICBzVHJhbnNtaXRCdWZmZXIgPSBhQnVmOworICAgIHNUcmFuc21pdExlbmd0aCA9IGFCdWZMZW5ndGggLSAxOworCisgICAgLy8gSW5pdGlhdGUgVHJhbnNtaXNzaW9uIHByb2Nlc3MuCisgICAgbnJmX3VhcnRfZXZlbnRfY2xlYXIoVUFSVF9JTlNUQU5DRSwgTlJGX1VBUlRfRVZFTlRfVFhEUkRZKTsKKyAgICBucmZfdWFydF90eGRfc2V0KFVBUlRfSU5TVEFOQ0UsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgbnJmX3VhcnRfdGFza190cmlnZ2VyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX1RBU0tfU1RBUlRUWCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIEludGVycnVwdCBoYW5kbGVyIG9mIFVBUlQwIHBlcmlwaGVyaWFsLgorICovCit2b2lkIFVBUlRFMF9VQVJUMF9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgLy8gQ2hlY2sgaWYgYW55IGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLgorICAgIGlmIChucmZfdWFydF9ldmVudF9jaGVjayhVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9FUlJPUikpCisgICAgeworICAgICAgICAvLyBDbGVhciBlcnJvciBldmVudCBhbmQgaWdub3JlIGVycm9ub3VzIGJ5dGUgaW4gUlhEIHJlZ2lzdGVyLgorICAgICAgICBucmZfdWFydF9ldmVudF9jbGVhcihVQVJUX0lOU1RBTkNFLCBOUkZfVUFSVF9FVkVOVF9FUlJPUik7CisgICAgICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSk7CisgICAgfQorICAgIGVsc2UgaWYgKG5yZl91YXJ0X2V2ZW50X2NoZWNrKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSkpCisgICAgeworICAgICAgICAvLyBDbGVhciBSWERSRFkgZXZlbnQuCisgICAgICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSk7CisKKyAgICAgICAgLy8gUmVhZCBieXRlIGZyb20gdGhlIFVBUlQgYnVmZmVyLgorICAgICAgICB1aW50OF90IGJ5dGUgPSBucmZfdWFydF9yeGRfZ2V0KFVBUlRfSU5TVEFOQ0UpOworCisgICAgICAgIGlmICghaXNSeEJ1ZmZlckZ1bGwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc1JlY2VpdmVCdWZmZXJbc1JlY2VpdmVIZWFkXSA9IGJ5dGU7CisgICAgICAgICAgICBzUmVjZWl2ZUhlYWQgPSAoc1JlY2VpdmVIZWFkICsgMSkgJSBVQVJUX1JYX0JVRkZFUl9TSVpFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5yZl91YXJ0X2V2ZW50X2NoZWNrKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1RYRFJEWSkpCisgICAgeworICAgICAgICAvLyBDbGVhciBUWERSRFkgZXZlbnQuCisgICAgICAgIG5yZl91YXJ0X2V2ZW50X2NsZWFyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX0VWRU5UX1RYRFJEWSk7CisKKyAgICAgICAgLy8gU2VuZCBhbnkgbW9yZSBieXRlcyBpZiBhdmFpbGFibGUgb3IgY2FsbCBhcHBsaWNhdGlvbiBhYm91dCBUWCBkb25lLgorICAgICAgICBpZiAoc1RyYW5zbWl0TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfdWFydF90eGRfc2V0KFVBUlRfSU5TVEFOQ0UsICpzVHJhbnNtaXRCdWZmZXIrKyk7CisgICAgICAgICAgICBzVHJhbnNtaXRMZW5ndGgtLTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNUcmFuc21pdERvbmUgPSB0cnVlOworICAgICAgICAgICAgbnJmX3VhcnRfdGFza190cmlnZ2VyKFVBUlRfSU5TVEFOQ0UsIE5SRl9VQVJUX1RBU0tfU1RPUFRYKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBUaGUgVUFSVCBkcml2ZXIgd2VhayBmdW5jdGlvbnMgZGVmaW5pdGlvbi4KKyAqCisgKi8KK09UX1RPT0xfV0VBSyB2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworfQorCitPVF9UT09MX1dFQUsgdm9pZCBvdFBsYXRVYXJ0UmVjZWl2ZWQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICAodm9pZClhQnVmOworICAgICh2b2lkKWFCdWZMZW5ndGg7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkNGI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDc1IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlib3BlbnRocmVhZC1wb3NpeC5hCisKK2xpYm9wZW50aHJlYWRfcG9zaXhfYV9DUFBGTEFHUyAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3JtcyAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgXAorICAgIC1EX0dOVV9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX3Bvc2l4X2FfU09VUkNFUyAgICAgICAgICAgICA9IFwKKyAgICBhbGFybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9nZ2luZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJhZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmFuZG9tLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LXBvc2l4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZsYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCitsaWJvcGVudGhyZWFkX3Bvc2l4X2FfU09VUkNFUyAgICAgICAgICAgICs9IFwKKyAgICBkaWFnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX05DUF9TUEkKK2xpYm9wZW50aHJlYWRfcG9zaXhfYV9TT1VSQ0VTICAgICAgICAgICAgKz0gXAorICAgIHNwaS1zdHVicy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0tcG9zaXguaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLQorbGlib3BlbnRocmVhZF9wb3NpeF9hX0xJQkFERCAgICAgICAgICAgICAgPSBcCisgICAgJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMgJChEYXNoKXR5cGUgZiAkKERhc2gpbmFtZSAiKi5vIikKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHdpbGRjYXJkICouZ2NkYSAqLmdjbm8pCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvUkVBRE1FLm1kIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGM2ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L1JFQURNRS5tZApAQCAtMCwwICsxLDU3IEBACisjIE9wZW5UaHJlYWQgb24gUE9TSVggRW11bGF0aW9uIEV4YW1wbGUKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBQT1NJWCBlbXVsYXRpb24uCisKKyMjIEJ1aWxkIEV4YW1wbGVzCisKK2BgYGJhc2gKKyQgY2QgPHBhdGgtdG8tb3BlbnRocmVhZD4KKyQgLi9ib290c3RyYXAKKyQgbWFrZSAtZiBleGFtcGxlcy9NYWtlZmlsZS1wb3NpeAorYGBgCisKK0FmdGVyIGEgc3VjY2Vzc2Z1bCBidWlsZCwgdGhlIGBlbGZgIGZpbGVzIGFyZSBmb3VuZCBpbgorYDxwYXRoLXRvLW9wZW50aHJlYWQ+L291dHB1dC88cGxhdGZvcm0+L2JpbmAuCisKKyMjIAorCisjIyBJbnRlcmFjdAorCisxLiBTcGF3biB0aGUgcHJvY2VzczoKKworYGBgYmFzaAorJCBjZCA8cGF0aC10by1vcGVudGhyZWFkPi9vdXRwdXQvPHBsYXRmb3JtPi9iaW4KKyQgLi9vdC1jbGktZnRkIDEKK2BgYAorCisyLiBUeXBlIGBoZWxwYCBmb3IgbGlzdCBvZiBjb21tYW5kcy4KKworYGBgYmFzaAorPiBoZWxwCitoZWxwCitjaGFubmVsCitjaGlsZHRpbWVvdXQKK2NvbnRleHRyZXVzZWRlbGF5CitleHRhZGRyCitleHRwYW5pZAoraXBhZGRyCitrZXlzZXF1ZW5jZQorbGVhZGVyd2VpZ2h0CittYXN0ZXJrZXkKK21vZGUKK25ldGRhdGFyZWdpc3RlcgorbmV0d29ya2lkdGltZW91dAorbmV0d29ya25hbWUKK3BhbmlkCitwaW5nCitwcmVmaXgKK3JlbGVhc2Vyb3V0ZXJpZAorcmxvYzE2Cityb3V0ZQorcm91dGVydXBncmFkZXRocmVzaG9sZAorc2Nhbgorc3RhcnQKK3N0YXRlCitzdG9wCit3aGl0ZWxpc3QKK2BgYApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2FsYXJtLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhkNDUxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2FsYXJtLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisKK3N0YXRpYyBib29sIHNfaXNfcnVubmluZyA9IGZhbHNlOworc3RhdGljIHVpbnQzMl90IHNfYWxhcm0gPSAwOworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHNfc3RhcnQ7CisKK3ZvaWQgcGxhdGZvcm1BbGFybUluaXQodm9pZCkKK3sKKyAgICBnZXR0aW1lb2ZkYXkoJnNfc3RhcnQsIE5VTEwpOworfQorCit1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgdGltZXJzdWIoJnR2LCAmc19zdGFydCwgJnR2KTsKKworICAgIHJldHVybiAodWludDMyX3QpKCh0di50dl9zZWMgKiAxMDAwKSArICh0di50dl91c2VjIC8gMTAwMCkpOworfQorCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IHQwLCB1aW50MzJfdCBkdCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgc19hbGFybSA9IHQwICsgZHQ7CisgICAgc19pc19ydW5uaW5nID0gdHJ1ZTsKK30KKwordm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzX2lzX3J1bm5pbmcgPSBmYWxzZTsKK30KKwordm9pZCBwbGF0Zm9ybUFsYXJtVXBkYXRlVGltZW91dChzdHJ1Y3QgdGltZXZhbCAqYVRpbWVvdXQpCit7CisgICAgaW50MzJfdCByZW1haW5pbmc7CisKKyAgICBpZiAoYVRpbWVvdXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc19pc19ydW5uaW5nKQorICAgIHsKKyAgICAgICAgcmVtYWluaW5nID0gKGludDMyX3QpKHNfYWxhcm0gLSBvdFBsYXRBbGFybUdldE5vdygpKTsKKworICAgICAgICBpZiAocmVtYWluaW5nID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYVRpbWVvdXQtPnR2X3NlYyA9IHJlbWFpbmluZyAvIDEwMDA7CisgICAgICAgICAgICBhVGltZW91dC0+dHZfdXNlYyA9IChyZW1haW5pbmcgJSAxMDAwKSAqIDEwMDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhVGltZW91dC0+dHZfc2VjID0gMDsKKyAgICAgICAgICAgIGFUaW1lb3V0LT50dl91c2VjID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhVGltZW91dC0+dHZfc2VjID0gMTA7CisgICAgICAgIGFUaW1lb3V0LT50dl91c2VjID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgcGxhdGZvcm1BbGFybVByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGludDMyX3QgcmVtYWluaW5nOworCisgICAgaWYgKHNfaXNfcnVubmluZykKKyAgICB7CisgICAgICAgIHJlbWFpbmluZyA9IChpbnQzMl90KShzX2FsYXJtIC0gb3RQbGF0QWxhcm1HZXROb3coKSk7CisKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzX2lzX3J1bm5pbmcgPSBmYWxzZTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworICAgICAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RQbGF0RGlhZ0FsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90UGxhdEFsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9kaWFnLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZGlhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWM1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZGlhZy5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworLyoqCisgKiBEaWFnbm9zdGljcyBtb2RlIHZhcmlhYmxlcy4KKyAqCisgKi8KK3N0YXRpYyBib29sIHNEaWFnTW9kZSA9IGZhbHNlOworCit2b2lkIG90UGxhdERpYWdQcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgLy8gQWRkIG1vcmUgcGxhcmZvcm0gc3BlY2lmaWMgZGlhZ25vc3RpY3MgZmVhdHVyZXMgaGVyZS4KKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiZGlhZyBmZWF0dXJlICclcycgaXMgbm90IHN1cHBvcnRlZFxyXG4iLCBhcmd2WzBdKTsKKyAgICAodm9pZCkgYXJnYzsKKyAgICAodm9pZCkgYUluc3RhbmNlOworfQorCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCit7CisgICAgc0RpYWdNb2RlID0gYU1vZGU7Cit9CisKK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQoKQoreworICAgIHJldHVybiBzRGlhZ01vZGU7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICAodm9pZCkgYUNoYW5uZWw7Cit9CisKK3ZvaWQgb3RQbGF0RGlhZ1R4UG93ZXJTZXQoaW50OF90IGFUeFBvd2VyKQoreworICAgICh2b2lkKSBhVHhQb3dlcjsKK30KKwordm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICAodm9pZCkgYUluc3RhbmNlOworICAgICh2b2lkKSBhRnJhbWU7CisgICAgKHZvaWQpIGFFcnJvcjsKK30KKwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpIGFJbnN0YW5jZTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9mbGFzaC13aW5kb3dzLXN0dWJzLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZmxhc2gtd2luZG93cy1zdHVicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZmxhc2gtd2luZG93cy1zdHVicy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaEdldFNpemUodm9pZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKQoreworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHJldHVybiAwOworfQorCit1aW50MzJfdCB1dGlsc0ZsYXNoUmVhZCh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2ZsYXNoLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE2MmFjCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2ZsYXNoLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL2ZsYXNoLmgiCisKK3N0YXRpYyBpbnQgc0ZsYXNoRmQ7Cit1aW50MzJfdCBzRXJhc2VBZGRyZXNzOworCitlbnVtCit7CisgICAgRkxBU0hfU0laRSA9IDB4NDAwMDAsCisgICAgRkxBU0hfUEFHRV9TSVpFID0gMHg4MDAsCisgICAgRkxBU0hfUEFHRV9OVU0gPSAxMjgsCit9OworCitvdEVycm9yIHV0aWxzRmxhc2hJbml0KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY2hhciBmaWxlTmFtZVsyMF07CisgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgYm9vbCBjcmVhdGUgPSBmYWxzZTsKKyAgICBjb25zdCBjaGFyICpvZmZzZXQgPSBnZXRlbnYoIlBPUlRfT0ZGU0VUIik7CisKKyAgICBtZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKKworICAgIGlmIChzdGF0KCJ0bXAiLCAmc3QpID09IC0xKQorICAgIHsKKyAgICAgICAgbWtkaXIoInRtcCIsIDA3NzcpOworICAgIH0KKworICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG9mZnNldCA9ICIwIjsKKyAgICB9CisKKyAgICBzbnByaW50ZihmaWxlTmFtZSwgc2l6ZW9mKGZpbGVOYW1lKSwgInRtcC8lc18lZC5mbGFzaCIsIG9mZnNldCwgTk9ERV9JRCk7CisKKyAgICBpZiAoYWNjZXNzKGZpbGVOYW1lLCAwKSkKKyAgICB7CisgICAgICAgIGNyZWF0ZSA9IHRydWU7CisgICAgfQorCisgICAgc0ZsYXNoRmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JEV1IgfCBPX0NSRUFULCAwNjY2KTsKKyAgICBsc2VlayhzRmxhc2hGZCwgMCwgU0VFS19TRVQpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKHNGbGFzaEZkID49IDAsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworICAgIGlmIChjcmVhdGUpCisgICAgeworICAgICAgICBmb3IgKHVpbnQxNl90IGluZGV4ID0gMDsgaW5kZXggPCBGTEFTSF9QQUdFX05VTTsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSB1dGlsc0ZsYXNoRXJhc2VQYWdlKGluZGV4ICogRkxBU0hfUEFHRV9TSVpFKTsKKyAgICAgICAgICAgIG90RVhQRUNUKGVycm9yID09IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDMyX3QgdXRpbHNGbGFzaEdldFNpemUodm9pZCkKK3sKKyAgICByZXR1cm4gRkxBU0hfU0laRTsKK30KKworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IGFkZHJlc3M7CisgICAgdWludDhfdCBkdW1teVBhZ2VbIEZMQVNIX1NJWkUgXTsKKworICAgIG90RVhQRUNUX0FDVElPTihzRmxhc2hGZCA+PSAwLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgb3RFWFBFQ1RfQUNUSU9OKGFBZGRyZXNzIDwgRkxBU0hfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgLy8gR2V0IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGZsYXNoIHBhZ2UgdGhhdCBpbmNsdWRlcyBhQWRkcmVzcworICAgIGFkZHJlc3MgPSBhQWRkcmVzcyAmICh+KHVpbnQzMl90KShGTEFTSF9QQUdFX1NJWkUgLSAxKSk7CisKKyAgICAvLyBzZXQgdGhlIHBhZ2UgdG8gdGhlIGVyYXNlZCBzdGF0ZS4KKyAgICBtZW1zZXQoKHZvaWQgKikoJmR1bW15UGFnZVswXSksIDB4ZmYsIEZMQVNIX1BBR0VfU0laRSk7CisKKyAgICAvLyBXcml0ZSB0aGUgcGFnZQorICAgIHNzaXplX3QgcjsKKyAgICByID0gIHB3cml0ZShzRmxhc2hGZCwgJihkdW1teVBhZ2VbMF0pLCBGTEFTSF9QQUdFX1NJWkUsIChvZmZfdClhZGRyZXNzKTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oKChpbnQpcikgPT0gKChpbnQpKEZMQVNIX1BBR0VfU0laRSkpLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgdXRpbHNGbGFzaFN0YXR1c1dhaXQodWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgKHZvaWQpYVRpbWVvdXQ7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKQoreworICAgIHVpbnQzMl90IHJldCA9IDA7CisgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgIHVpbnQ4X3QgYnl0ZTsKKworICAgIG90RVhQRUNUKHNGbGFzaEZkID49IDAgJiYgYUFkZHJlc3MgPCBGTEFTSF9TSVpFKTsKKworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFTaXplOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgb3RFWFBFQ1QoKHJldCA9IHV0aWxzRmxhc2hSZWFkKGFBZGRyZXNzICsgaW5kZXgsICZieXRlLCAxKSkgPT0gMSk7CisgICAgICAgIC8vIFVzZSBiaXR3aXNlIEFORCB0byBlbXVsYXRlIHRoZSBiZWhhdmlvciBvZiBmbGFzaCBtZW1vcnkKKyAgICAgICAgYnl0ZSAmPSBhRGF0YVtpbmRleF07CisgICAgICAgIG90RVhQRUNUKChyZXQgPSAodWludDMyX3QpcHdyaXRlKHNGbGFzaEZkLCAmYnl0ZSwgMSwgKG9mZl90KShhQWRkcmVzcyArIGluZGV4KSkpID09IDEpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3VpbnQzMl90IHV0aWxzRmxhc2hSZWFkKHVpbnQzMl90IGFBZGRyZXNzLCB1aW50OF90ICphRGF0YSwgdWludDMyX3QgYVNpemUpCit7CisgICAgdWludDMyX3QgcmV0ID0gMDsKKworICAgIG90RVhQRUNUKHNGbGFzaEZkID49IDAgJiYgYUFkZHJlc3MgPCBGTEFTSF9TSVpFKTsKKyAgICByZXQgPSAodWludDMyX3QpcHJlYWQoc0ZsYXNoRmQsIGFEYXRhLCBhU2l6ZSwgKG9mZl90KWFBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L2xvZ2dpbmcuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9sb2dnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxYzFkNAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9sb2dnaW5nLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtLXBvc2l4LmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJ1dGlscy9jb2RlX3V0aWxzLmgiCisKKy8vIE1hY3JvIHRvIGFwcGVuZCBjb250ZW50IHRvIGVuZCBvZiB0aGUgbG9nIHN0cmluZy4KKworI2RlZmluZSBMT0dfUFJJTlRGKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2hhcnNXcml0dGVuID0gc25wcmludGYoJmxvZ1N0cmluZ1tvZmZzZXRdLCBzaXplb2YobG9nU3RyaW5nKSAtIG9mZnNldCAsIF9fVkFfQVJHU19fKTsgIFwKKyAgICBvdEVYUEVDVF9BQ1RJT04oY2hhcnNXcml0dGVuID49IDAsIGxvZ1N0cmluZ1tvZmZzZXRdID0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG9mZnNldCArPSAodW5zaWduZWQgaW50KWNoYXJzV3JpdHRlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgb3RFWFBFQ1RfQUNUSU9OKG9mZnNldCA8IHNpemVvZihsb2dTdHJpbmcpLCBsb2dTdHJpbmdbc2l6ZW9mKGxvZ1N0cmluZykgLTEgXSA9IDApCisKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisgICAgY2hhciBsb2dTdHJpbmdbNTEyXTsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgIGludCBjaGFyc1dyaXR0ZW47CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgb2Zmc2V0ID0gMDsKKworICAgIExPR19QUklOVEYoIlslZF0gIiwgTk9ERV9JRCk7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKyAgICBjaGFyc1dyaXR0ZW4gPSB2c25wcmludGYoJmxvZ1N0cmluZ1tvZmZzZXRdLCBzaXplb2YobG9nU3RyaW5nKSAtIG9mZnNldCwgYUZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGNoYXJzV3JpdHRlbiA+PSAwLCBsb2dTdHJpbmdbb2Zmc2V0XSA9IDApOworCitleGl0OgorI2lmbmRlZiBfV0lOMzIKKyAgICBzeXNsb2coTE9HX0NSSVQsICIlcyIsIGxvZ1N0cmluZyk7CisjZWxzZQorICAgIHByaW50ZigiJXNcclxuIiwgbG9nU3RyaW5nKTsKKyNlbmRpZgorCisgICAgKHZvaWQpYUxvZ0xldmVsOworICAgICh2b2lkKWFMb2dSZWdpb247Cit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9taXNjLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDQxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbWlzYy5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisKKyNpZm5kZWYgX1dJTjMyCitleHRlcm4gaW50ICAgICAgZ0FyZ3VtZW50c0NvdW50OworZXh0ZXJuIGNoYXIgICAqKmdBcmd1bWVudHM7CisjZW5kaWYKKwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisjaWZuZGVmIF9XSU4zMgorICAgIGNoYXIgKmFyZ3ZbZ0FyZ3VtZW50c0NvdW50ICsgMV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdBcmd1bWVudHNDb3VudDsgKytpKQorICAgIHsKKyAgICAgICAgYXJndltpXSA9IGdBcmd1bWVudHNbaV07CisgICAgfQorCisgICAgYXJndltnQXJndW1lbnRzQ291bnRdID0gTlVMTDsKKworICAgIHBsYXRmb3JtUmFkaW9EZWluaXQoKTsKKyAgICBwbGF0Zm9ybVVhcnRSZXN0b3JlKCk7CisKKyAgICBleGVjdnAoYXJndlswXSwgYXJndik7CisgICAgcGVycm9yKCJyZXNldCBmYWlsZWQiKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZWxzZQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtLgorI2VuZGlmIC8vIF9XSU4zMgorICAgICh2b2lkKWFJbnN0YW5jZTsKK30KKworb3RQbGF0UmVzZXRSZWFzb24gb3RQbGF0R2V0UmVzZXRSZWFzb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUExBVF9SRVNFVF9SRUFTT05fUE9XRVJfT047Cit9CisKK3ZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCkKK3sKKyAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYW4gb3BlcmF0aW9uIHRvIHdha2UgdGhlIGhvc3QgZnJvbSBzbGVlcCBzdGF0ZS4KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9vcGVudGhyZWFkLWNvcmUtcG9zaXgtY29uZmlnLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvb3BlbnRocmVhZC1jb3JlLXBvc2l4LWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDVkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvb3BlbnRocmVhZC1jb3JlLXBvc2l4LWNvbmZpZy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHBvc2l4IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIGNvbnN0YW50cworICogICBmb3IgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09SRV9QT1NJWF9DT05GSUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT1JFX1BPU0lYX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICovCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQgICAgICAgICAgICAgMQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9QT1NJWF9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS1wb3NpeC5oIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3BsYXRmb3JtLXBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0MDQyNAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS1wb3NpeC5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSAocG9zaXggb3Igd2luZG93cykgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICovCisKKyNpZm5kZWYgUExBVEZPUk1fUE9TSVhfSF8KKyNkZWZpbmUgUExBVEZPUk1fUE9TSVhfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmIF9XSU4zMgorI2luY2x1ZGUgPFdpblNvY2syLmg+CisjaW5jbHVkZSA8V1MydGNwaXAuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIFBPTEwgV1NBUG9sbAorI2RlZmluZSBzc2l6ZV90IGludAorI2luY2x1ZGUgPHRpbWUuaD4KKyNkZWZpbmUgbG9jYWx0aW1lIF9sb2NhbHRpbWUzMgorLy8gSW4gdXNlciBtb2RlLCBkZWZpbmUgc29tZSBMaW51eCBmdW5jdGlvbnMKK19fZm9yY2VpbmxpbmUgaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopCit7CisgICAgKHZvaWQpdHo7CisgICAgdHYtPnR2X3NlYyA9IF90aW1lMzIoTlVMTCk7CisgICAgdHYtPnR2X3VzZWMgPSAwOworICAgIHJldHVybiAwOworfQorX19mb3JjZWlubGluZSB2b2lkIHRpbWVyc3ViKHN0cnVjdCB0aW1ldmFsICphLCBzdHJ1Y3QgdGltZXZhbCAqYiwgc3RydWN0IHRpbWV2YWwgKnJlcykKK3sKKyAgICByZXMtPnR2X3NlYyA9IChsb25nKV9kaWZmdGltZTMyKGEtPnR2X3NlYywgYi0+dHZfc2VjKTsKKyAgICByZXMtPnR2X3VzZWMgPSAwOworfQorI2Vsc2UKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZGVmaW5lIFBPTEwgcG9sbAorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworLyoqCisgKiBVbmlxdWUgbm9kZSBJRC4KKyAqCisgKi8KK2V4dGVybiB1aW50MzJfdCBOT0RFX0lEOworCisvKioKKyAqIFdlbGwta25vd24gVW5pcXVlIElEIHVzZWQgYnkgYSBzaW11bGF0ZWQgcmFkaW8gdGhhdCBzdXBwb3J0cyBwcm9taXNjdW91cyBtb2RlLgorICoKKyAqLworZXh0ZXJuIHVpbnQzMl90IFdFTExLTk9XTl9OT0RFX0lEOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFsYXJtIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybUFsYXJtSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdGltZSByZW1haW5pbmcgdW50aWwgdGhlIGFsYXJtIGZpcmVzLgorICoKKyAqIEBwYXJhbVtvdXRdICBhVGltZXZhbCAgQSBwb2ludGVyIHRvIHRoZSB0aW1ldmFsIHN0cnVjdC4KKyAqCisgKi8KK3ZvaWQgcGxhdGZvcm1BbGFybVVwZGF0ZVRpbWVvdXQoc3RydWN0IHRpbWV2YWwgKnR2KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFsYXJtIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybUFsYXJtUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHJhZGlvIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVJhZGlvSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGRlaW5pdGlhbGl6ZXMgdGhlIHJhZGlvIHNlcnZpY2UgdXNlZCBieSBPcGVuVGhyZWFkLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVJhZGlvRGVpbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIHVzZWQgYnkgdGhlIHJhZGlvIGRyaXZlci4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhUmVhZEZkU2V0ICAgQSBwb2ludGVyIHRvIHRoZSByZWFkIGZpbGUgZGVzY3JpcHRvcnMuCisgKiBAcGFyYW1baW5vdXRdICBhV3JpdGVGZFNldCAgQSBwb2ludGVyIHRvIHRoZSB3cml0ZSBmaWxlIGRlc2NyaXB0b3JzLgorICogQHBhcmFtW2lub3V0XSAgYU1heEZkICAgICAgIEEgcG9pbnRlciB0byB0aGUgbWF4IGZpbGUgZGVzY3JpcHRvci4KKyAqCisgKi8KK3ZvaWQgcGxhdGZvcm1SYWRpb1VwZGF0ZUZkU2V0KGZkX3NldCAqYVJlYWRGZFNldCwgZmRfc2V0ICphV3JpdGVGZFNldCwgaW50ICphTWF4RmQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgcmFkaW8gZHJpdmVyIHByb2Nlc3NpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIHBsYXRmb3JtUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcmFuZG9tIG51bWJlciBzZXJ2aWNlIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqCisgKi8KK3ZvaWQgcGxhdGZvcm1SYW5kb21Jbml0KHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldHMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIHVzZWQgYnkgdGhlIFVBUlQgZHJpdmVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFSZWFkRmRTZXQgICBBIHBvaW50ZXIgdG8gdGhlIHJlYWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAqIEBwYXJhbVtpbm91dF0gIGFXcml0ZUZkU2V0ICBBIHBvaW50ZXIgdG8gdGhlIHdyaXRlIGZpbGUgZGVzY3JpcHRvcnMuCisgKiBAcGFyYW1baW5vdXRdICBhTWF4RmQgICAgICAgQSBwb2ludGVyIHRvIHRoZSBtYXggZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVVhcnRVcGRhdGVGZFNldChmZF9zZXQgKmFSZWFkRmRTZXQsIGZkX3NldCAqYVdyaXRlRmRTZXQsIGZkX3NldCAqYUVycm9yRmRTZXQsIGludCAqYU1heEZkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHJhZGlvIGRyaXZlciBwcm9jZXNzaW5nLgorICoKKyAqLwordm9pZCBwbGF0Zm9ybVVhcnRQcm9jZXNzKHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgdGhlIFVhcnQuCisgKgorICovCit2b2lkIHBsYXRmb3JtVWFydFJlc3RvcmUodm9pZCk7CisKKyNlbmRpZiAgLy8gUExBVEZPUk1fUE9TSVhfSF8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmMTQzNgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBpbml0aWFsaXplcnMuCisgKi8KKworI2luY2x1ZGUgInBsYXRmb3JtLXBvc2l4LmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGFza2xldC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKwordWludDMyX3QgTk9ERV9JRCA9IDE7Cit1aW50MzJfdCBXRUxMS05PV05fTk9ERV9JRCA9IDM0OworCisjaWZuZGVmIF9XSU4zMgoraW50ICAgICBnQXJndW1lbnRzQ291bnQgPSAwOworY2hhciAgKipnQXJndW1lbnRzID0gTlVMTDsKKyNlbmRpZgorCit2b2lkIFBsYXRmb3JtSW5pdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNoYXIgKmVuZHB0cjsKKworICAgIGlmIChhcmdjICE9IDIpCisgICAgeworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisjaWZuZGVmIF9XSU4zMgorICAgIG9wZW5sb2coYmFzZW5hbWUoYXJndlswXSksIExPR19QSUQsIExPR19VU0VSKTsKKyAgICBzZXRsb2dtYXNrKHNldGxvZ21hc2soMCkgJiBMT0dfVVBUTyhMT0dfTk9USUNFKSk7CisKKyAgICBnQXJndW1lbnRzQ291bnQgPSBhcmdjOworICAgIGdBcmd1bWVudHMgPSBhcmd2OworI2VuZGlmCisKKyAgICBOT0RFX0lEID0gKHVpbnQzMl90KXN0cnRvbChhcmd2WzFdLCAmZW5kcHRyLCAwKTsKKworICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTk9ERV9JRDogJXNcbiIsIGFyZ3ZbMV0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgcGxhdGZvcm1BbGFybUluaXQoKTsKKyAgICBwbGF0Zm9ybVJhZGlvSW5pdCgpOworICAgIHBsYXRmb3JtUmFuZG9tSW5pdCgpOworfQorCit2b2lkIFBsYXRmb3JtUHJvY2Vzc0RyaXZlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGZkX3NldCByZWFkX2ZkczsKKyAgICBmZF9zZXQgd3JpdGVfZmRzOworICAgIGZkX3NldCBlcnJvcl9mZHM7CisgICAgaW50IG1heF9mZCA9IC0xOworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgaW50IHJ2YWw7CisKKyAgICBGRF9aRVJPKCZyZWFkX2Zkcyk7CisgICAgRkRfWkVSTygmd3JpdGVfZmRzKTsKKyAgICBGRF9aRVJPKCZlcnJvcl9mZHMpOworCisgICAgcGxhdGZvcm1VYXJ0VXBkYXRlRmRTZXQoJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCAmZXJyb3JfZmRzLCAmbWF4X2ZkKTsKKyAgICBwbGF0Zm9ybVJhZGlvVXBkYXRlRmRTZXQoJnJlYWRfZmRzLCAmd3JpdGVfZmRzLCAmbWF4X2ZkKTsKKyAgICBwbGF0Zm9ybUFsYXJtVXBkYXRlVGltZW91dCgmdGltZW91dCk7CisKKyAgICBpZiAoIW90VGFza2xldHNBcmVQZW5kaW5nKGFJbnN0YW5jZSkpCisgICAgeworICAgICAgICBydmFsID0gc2VsZWN0KG1heF9mZCArIDEsICZyZWFkX2ZkcywgJndyaXRlX2ZkcywgJmVycm9yX2ZkcywgJnRpbWVvdXQpOworCisgICAgICAgIGlmICgocnZhbCA8IDApICYmIChlcnJubyAhPSBFSU5UUikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigic2VsZWN0Iik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwbGF0Zm9ybVVhcnRQcm9jZXNzKCk7CisgICAgcGxhdGZvcm1SYWRpb1Byb2Nlc3MoYUluc3RhbmNlKTsKKyAgICBwbGF0Zm9ybUFsYXJtUHJvY2VzcyhhSW5zdGFuY2UpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhZGlvLmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDdkMTdjCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhZGlvLmMKQEAgLTAsMCArMSw3NTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCitlbnVtCit7CisgICAgSUVFRTgwMjE1NF9NSU5fTEVOR1RIICAgICAgICAgPSA1LAorICAgIElFRUU4MDIxNTRfTUFYX0xFTkdUSCAgICAgICAgID0gMTI3LAorICAgIElFRUU4MDIxNTRfQUNLX0xFTkdUSCAgICAgICAgID0gNSwKKworICAgIElFRUU4MDIxNTRfQlJPQURDQVNUICAgICAgICAgID0gMHhmZmZmLAorCisgICAgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX0FDSyAgICAgPSAyIDw8IDAsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BQ0NNRCAgPSAzIDw8IDAsCisgICAgSUVFRTgwMjE1NF9GUkFNRV9UWVBFX01BU0sgICAgPSA3IDw8IDAsCisKKyAgICBJRUVFODAyMTU0X1NFQ1VSSVRZX0VOQUJMRUQgICA9IDEgPDwgMywKKyAgICBJRUVFODAyMTU0X0ZSQU1FX1BFTkRJTkcgICAgICA9IDEgPDwgNCwKKyAgICBJRUVFODAyMTU0X0FDS19SRVFVRVNUICAgICAgICA9IDEgPDwgNSwKKyAgICBJRUVFODAyMTU0X1BBTklEX0NPTVBSRVNTSU9OICA9IDEgPDwgNiwKKworICAgIElFRUU4MDIxNTRfRFNUX0FERFJfTk9ORSAgICAgID0gMCA8PCAyLAorICAgIElFRUU4MDIxNTRfRFNUX0FERFJfU0hPUlQgICAgID0gMiA8PCAyLAorICAgIElFRUU4MDIxNTRfRFNUX0FERFJfRVhUICAgICAgID0gMyA8PCAyLAorICAgIElFRUU4MDIxNTRfRFNUX0FERFJfTUFTSyAgICAgID0gMyA8PCAyLAorCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9OT05FICAgICAgPSAwIDw8IDYsCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9TSE9SVCAgICAgPSAyIDw8IDYsCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9FWFQgICAgICAgPSAzIDw8IDYsCisgICAgSUVFRTgwMjE1NF9TUkNfQUREUl9NQVNLICAgICAgPSAzIDw8IDYsCisKKyAgICBJRUVFODAyMTU0X0RTTl9PRkZTRVQgICAgICAgICA9IDIsCisgICAgSUVFRTgwMjE1NF9EU1RQQU5fT0ZGU0VUICAgICAgPSAzLAorICAgIElFRUU4MDIxNTRfRFNUQUREUl9PRkZTRVQgICAgID0gNSwKKworICAgIElFRUU4MDIxNTRfU0VDX0xFVkVMX01BU0sgICAgID0gNyA8PCAwLAorCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8wICAgICAgPSAwIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8xICAgICAgPSAxIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8yICAgICAgPSAyIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8zICAgICAgPSAzIDw8IDMsCisgICAgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV9NQVNLICAgPSAzIDw8IDMsCisKKyAgICBJRUVFODAyMTU0X01BQ0NNRF9EQVRBX1JFUSAgICA9IDQsCit9OworCitlbnVtCit7CisgICAgUE9TSVhfUkVDRUlWRV9TRU5TSVRJVklUWSA9IC0xMDAsICAvLyBkQm0KK307CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitzdHJ1Y3QgUmFkaW9NZXNzYWdlCit7CisgICAgdWludDhfdCBtQ2hhbm5lbDsKKyAgICB1aW50OF90IG1Qc2R1W09UX1JBRElPX0ZSQU1FX01BWF9TSVpFXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCitzdGF0aWMgdm9pZCByYWRpb1RyYW5zbWl0KHN0cnVjdCBSYWRpb01lc3NhZ2UgKm1zZywgY29uc3Qgc3RydWN0IG90UmFkaW9GcmFtZSAqcGt0KTsKK3N0YXRpYyB2b2lkIHJhZGlvU2VuZE1lc3NhZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKK3N0YXRpYyB2b2lkIHJhZGlvU2VuZEFjayh2b2lkKTsKK3N0YXRpYyB2b2lkIHJhZGlvUHJvY2Vzc0ZyYW1lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKK3N0YXRpYyBvdFJhZGlvU3RhdGUgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQ7CitzdGF0aWMgc3RydWN0IFJhZGlvTWVzc2FnZSBzUmVjZWl2ZU1lc3NhZ2U7CitzdGF0aWMgc3RydWN0IFJhZGlvTWVzc2FnZSBzVHJhbnNtaXRNZXNzYWdlOworc3RhdGljIHN0cnVjdCBSYWRpb01lc3NhZ2Ugc0Fja01lc3NhZ2U7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNSZWNlaXZlRnJhbWU7CitzdGF0aWMgb3RSYWRpb0ZyYW1lIHNUcmFuc21pdEZyYW1lOworc3RhdGljIG90UmFkaW9GcmFtZSBzQWNrRnJhbWU7CisKK3N0YXRpYyB1aW50OF90IHNFeHRlbmRlZEFkZHJlc3NbT1RfRVhUX0FERFJFU1NfU0laRV07CitzdGF0aWMgdWludDE2X3Qgc1Nob3J0QWRkcmVzczsKK3N0YXRpYyB1aW50MTZfdCBzUGFuaWQ7CitzdGF0aWMgaW50IHNTb2NrRmQ7CitzdGF0aWMgYm9vbCBzUHJvbWlzY3VvdXMgPSBmYWxzZTsKK3N0YXRpYyBib29sIHNBY2tXYWl0ID0gZmFsc2U7CitzdGF0aWMgdWludDE2X3Qgc1BvcnRPZmZzZXQgPSAwOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGcmFtZVR5cGVBY2soY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLKSA9PSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGcmFtZVR5cGVNYWNDbWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfRlJBTUVfVFlQRV9NQVNLKSA9PSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfTUFDQ01EOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTZWN1cml0eUVuYWJsZWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfU0VDVVJJVFlfRU5BQkxFRCkgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzQWNrUmVxdWVzdGVkKGNvbnN0IHVpbnQ4X3QgKmZyYW1lKQoreworICAgIHJldHVybiAoZnJhbWVbMF0gJiBJRUVFODAyMTU0X0FDS19SRVFVRVNUKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNQYW5JZENvbXByZXNzZWQoY29uc3QgdWludDhfdCAqZnJhbWUpCit7CisgICAgcmV0dXJuIChmcmFtZVswXSAmIElFRUU4MDIxNTRfUEFOSURfQ09NUFJFU1NJT04pICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0RhdGFSZXF1ZXN0KGNvbnN0IHVpbnQ4X3QgKmZyYW1lKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IGZyYW1lOworICAgIHVpbnQ4X3Qgc2VjdXJpdHlDb250cm9sOworICAgIGJvb2wgcnZhbDsKKworICAgIC8vIEZDRiArIERTTgorICAgIGN1ciArPSAyICsgMTsKKworICAgIG90RVhQRUNUX0FDVElPTihpc0ZyYW1lVHlwZU1hY0NtZChmcmFtZSksIHJ2YWwgPSBmYWxzZSk7CisKKyAgICAvLyBEZXN0aW5hdGlvbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmcmFtZVsxXSAmIElFRUU4MDIxNTRfRFNUX0FERFJfTUFTSykKKyAgICB7CisgICAgY2FzZSBJRUVFODAyMTU0X0RTVF9BRERSX1NIT1JUOgorICAgICAgICBjdXIgKz0gc2l6ZW9mKG90UGFuSWQpICsgc2l6ZW9mKG90U2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElFRUU4MDIxNTRfRFNUX0FERFJfRVhUOgorICAgICAgICBjdXIgKz0gc2l6ZW9mKG90UGFuSWQpICsgc2l6ZW9mKG90RXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcnZhbCA9IGZhbHNlOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGZyYW1lWzFdICYgSUVFRTgwMjE1NF9TUkNfQUREUl9NQVNLKQorICAgIHsKKyAgICBjYXNlIElFRUU4MDIxNTRfU1JDX0FERFJfU0hPUlQ6CisgICAgICAgIGlmICghaXNQYW5JZENvbXByZXNzZWQoZnJhbWUpKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKG90UGFuSWQpOworICAgICAgICB9CisKKyAgICAgICAgY3VyICs9IHNpemVvZihvdFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJRUVFODAyMTU0X1NSQ19BRERSX0VYVDoKKyAgICAgICAgaWYgKCFpc1BhbklkQ29tcHJlc3NlZChmcmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2Yob3RQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgKz0gc2l6ZW9mKG90RXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcnZhbCA9IGZhbHNlOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gU2VjdXJpdHkgQ29udHJvbCArIEZyYW1lIENvdW50ZXIgKyBLZXkgSWRlbnRpZmllcgorICAgIGlmIChpc1NlY3VyaXR5RW5hYmxlZChmcmFtZSkpCisgICAgeworICAgICAgICBzZWN1cml0eUNvbnRyb2wgPSAqY3VyOworCisgICAgICAgIGlmIChzZWN1cml0eUNvbnRyb2wgJiBJRUVFODAyMTU0X1NFQ19MRVZFTF9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gMSArIDQ7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHNlY3VyaXR5Q29udHJvbCAmIElFRUU4MDIxNTRfS0VZX0lEX01PREVfTUFTSykKKyAgICAgICAgeworICAgICAgICBjYXNlIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMDoKKyAgICAgICAgICAgIGN1ciArPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJRUVFODAyMTU0X0tFWV9JRF9NT0RFXzE6CisgICAgICAgICAgICBjdXIgKz0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSUVFRTgwMjE1NF9LRVlfSURfTU9ERV8yOgorICAgICAgICAgICAgY3VyICs9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElFRUU4MDIxNTRfS0VZX0lEX01PREVfMzoKKyAgICAgICAgICAgIGN1ciArPSA5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21tYW5kIElECisgICAgcnZhbCA9IGN1clswXSA9PSBJRUVFODAyMTU0X01BQ0NNRF9EQVRBX1JFUTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IGdldERzbihjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gZnJhbWVbSUVFRTgwMjE1NF9EU05fT0ZGU0VUXTsKK30KKworc3RhdGljIGlubGluZSBvdFBhbklkIGdldERzdFBhbihjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKG90UGFuSWQpKChmcmFtZVtJRUVFODAyMTU0X0RTVFBBTl9PRkZTRVQgKyAxXSA8PCA4KSB8IGZyYW1lW0lFRUU4MDIxNTRfRFNUUEFOX09GRlNFVF0pOworfQorCitzdGF0aWMgaW5saW5lIG90U2hvcnRBZGRyZXNzIGdldFNob3J0QWRkcmVzcyhjb25zdCB1aW50OF90ICpmcmFtZSkKK3sKKyAgICByZXR1cm4gKG90U2hvcnRBZGRyZXNzKSgoZnJhbWVbSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVCArIDFdIDw8IDgpIHwgZnJhbWVbSUVFRTgwMjE1NF9EU1RBRERSX09GRlNFVF0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0RXh0QWRkcmVzcyhjb25zdCB1aW50OF90ICpmcmFtZSwgb3RFeHRBZGRyZXNzICphZGRyZXNzKQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihvdEV4dEFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBhZGRyZXNzLT5tOFtpXSA9IGZyYW1lW0lFRUU4MDIxNTRfRFNUQUREUl9PRkZTRVQgKyAoc2l6ZW9mKG90RXh0QWRkcmVzcykgLSAxIC0gaSldOworICAgIH0KK30KKworc3RhdGljIHVpbnQxNl90IGNyYzE2X2NpdHQodWludDE2X3QgYUZjcywgdWludDhfdCBhQnl0ZSkKK3sKKyAgICAvLyBDUkMtMTYvQ0NJVFQsIENSQy0xNi9DQ0lUVC1UUlVFLCBDUkMtQ0NJVFQKKyAgICAvLyB3aWR0aD0xNiBwb2x5PTB4MTAyMSBpbml0PTB4MDAwMCByZWZpbj10cnVlIHJlZm91dD10cnVlIHhvcm91dD0weDAwMDAgY2hlY2s9MHgyMTg5IG5hbWU9IktFUk1JVCIKKyAgICAvLyBodHRwOi8vcmV2ZW5nLnNvdXJjZWZvcmdlLm5ldC9jcmMtY2F0YWxvZ3VlLzE2Lmh0bSNjcmMuY2F0Lmtlcm1pdAorICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzRmNzVGFibGVbMjU2XSA9CisgICAgeworICAgICAgICAweDAwMDAsIDB4MTE4OSwgMHgyMzEyLCAweDMyOWIsIDB4NDYyNCwgMHg1N2FkLCAweDY1MzYsIDB4NzRiZiwKKyAgICAgICAgMHg4YzQ4LCAweDlkYzEsIDB4YWY1YSwgMHhiZWQzLCAweGNhNmMsIDB4ZGJlNSwgMHhlOTdlLCAweGY4ZjcsCisgICAgICAgIDB4MTA4MSwgMHgwMTA4LCAweDMzOTMsIDB4MjIxYSwgMHg1NmE1LCAweDQ3MmMsIDB4NzViNywgMHg2NDNlLAorICAgICAgICAweDljYzksIDB4OGQ0MCwgMHhiZmRiLCAweGFlNTIsIDB4ZGFlZCwgMHhjYjY0LCAweGY5ZmYsIDB4ZTg3NiwKKyAgICAgICAgMHgyMTAyLCAweDMwOGIsIDB4MDIxMCwgMHgxMzk5LCAweDY3MjYsIDB4NzZhZiwgMHg0NDM0LCAweDU1YmQsCisgICAgICAgIDB4YWQ0YSwgMHhiY2MzLCAweDhlNTgsIDB4OWZkMSwgMHhlYjZlLCAweGZhZTcsIDB4Yzg3YywgMHhkOWY1LAorICAgICAgICAweDMxODMsIDB4MjAwYSwgMHgxMjkxLCAweDAzMTgsIDB4NzdhNywgMHg2NjJlLCAweDU0YjUsIDB4NDUzYywKKyAgICAgICAgMHhiZGNiLCAweGFjNDIsIDB4OWVkOSwgMHg4ZjUwLCAweGZiZWYsIDB4ZWE2NiwgMHhkOGZkLCAweGM5NzQsCisgICAgICAgIDB4NDIwNCwgMHg1MzhkLCAweDYxMTYsIDB4NzA5ZiwgMHgwNDIwLCAweDE1YTksIDB4MjczMiwgMHgzNmJiLAorICAgICAgICAweGNlNGMsIDB4ZGZjNSwgMHhlZDVlLCAweGZjZDcsIDB4ODg2OCwgMHg5OWUxLCAweGFiN2EsIDB4YmFmMywKKyAgICAgICAgMHg1Mjg1LCAweDQzMGMsIDB4NzE5NywgMHg2MDFlLCAweDE0YTEsIDB4MDUyOCwgMHgzN2IzLCAweDI2M2EsCisgICAgICAgIDB4ZGVjZCwgMHhjZjQ0LCAweGZkZGYsIDB4ZWM1NiwgMHg5OGU5LCAweDg5NjAsIDB4YmJmYiwgMHhhYTcyLAorICAgICAgICAweDYzMDYsIDB4NzI4ZiwgMHg0MDE0LCAweDUxOWQsIDB4MjUyMiwgMHgzNGFiLCAweDA2MzAsIDB4MTdiOSwKKyAgICAgICAgMHhlZjRlLCAweGZlYzcsIDB4Y2M1YywgMHhkZGQ1LCAweGE5NmEsIDB4YjhlMywgMHg4YTc4LCAweDliZjEsCisgICAgICAgIDB4NzM4NywgMHg2MjBlLCAweDUwOTUsIDB4NDExYywgMHgzNWEzLCAweDI0MmEsIDB4MTZiMSwgMHgwNzM4LAorICAgICAgICAweGZmY2YsIDB4ZWU0NiwgMHhkY2RkLCAweGNkNTQsIDB4YjllYiwgMHhhODYyLCAweDlhZjksIDB4OGI3MCwKKyAgICAgICAgMHg4NDA4LCAweDk1ODEsIDB4YTcxYSwgMHhiNjkzLCAweGMyMmMsIDB4ZDNhNSwgMHhlMTNlLCAweGYwYjcsCisgICAgICAgIDB4MDg0MCwgMHgxOWM5LCAweDJiNTIsIDB4M2FkYiwgMHg0ZTY0LCAweDVmZWQsIDB4NmQ3NiwgMHg3Y2ZmLAorICAgICAgICAweDk0ODksIDB4ODUwMCwgMHhiNzliLCAweGE2MTIsIDB4ZDJhZCwgMHhjMzI0LCAweGYxYmYsIDB4ZTAzNiwKKyAgICAgICAgMHgxOGMxLCAweDA5NDgsIDB4M2JkMywgMHgyYTVhLCAweDVlZTUsIDB4NGY2YywgMHg3ZGY3LCAweDZjN2UsCisgICAgICAgIDB4YTUwYSwgMHhiNDgzLCAweDg2MTgsIDB4OTc5MSwgMHhlMzJlLCAweGYyYTcsIDB4YzAzYywgMHhkMWI1LAorICAgICAgICAweDI5NDIsIDB4MzhjYiwgMHgwYTUwLCAweDFiZDksIDB4NmY2NiwgMHg3ZWVmLCAweDRjNzQsIDB4NWRmZCwKKyAgICAgICAgMHhiNThiLCAweGE0MDIsIDB4OTY5OSwgMHg4NzEwLCAweGYzYWYsIDB4ZTIyNiwgMHhkMGJkLCAweGMxMzQsCisgICAgICAgIDB4MzljMywgMHgyODRhLCAweDFhZDEsIDB4MGI1OCwgMHg3ZmU3LCAweDZlNmUsIDB4NWNmNSwgMHg0ZDdjLAorICAgICAgICAweGM2MGMsIDB4ZDc4NSwgMHhlNTFlLCAweGY0OTcsIDB4ODAyOCwgMHg5MWExLCAweGEzM2EsIDB4YjJiMywKKyAgICAgICAgMHg0YTQ0LCAweDViY2QsIDB4Njk1NiwgMHg3OGRmLCAweDBjNjAsIDB4MWRlOSwgMHgyZjcyLCAweDNlZmIsCisgICAgICAgIDB4ZDY4ZCwgMHhjNzA0LCAweGY1OWYsIDB4ZTQxNiwgMHg5MGE5LCAweDgxMjAsIDB4YjNiYiwgMHhhMjMyLAorICAgICAgICAweDVhYzUsIDB4NGI0YywgMHg3OWQ3LCAweDY4NWUsIDB4MWNlMSwgMHgwZDY4LCAweDNmZjMsIDB4MmU3YSwKKyAgICAgICAgMHhlNzBlLCAweGY2ODcsIDB4YzQxYywgMHhkNTk1LCAweGExMmEsIDB4YjBhMywgMHg4MjM4LCAweDkzYjEsCisgICAgICAgIDB4NmI0NiwgMHg3YWNmLCAweDQ4NTQsIDB4NTlkZCwgMHgyZDYyLCAweDNjZWIsIDB4MGU3MCwgMHgxZmY5LAorICAgICAgICAweGY3OGYsIDB4ZTYwNiwgMHhkNDlkLCAweGM1MTQsIDB4YjFhYiwgMHhhMDIyLCAweDkyYjksIDB4ODMzMCwKKyAgICAgICAgMHg3YmM3LCAweDZhNGUsIDB4NThkNSwgMHg0OTVjLCAweDNkZTMsIDB4MmM2YSwgMHgxZWYxLCAweDBmNzgKKyAgICB9OworICAgIHJldHVybiAoYUZjcyA+PiA4KSBeIHNGY3NUYWJsZVsoYUZjcyBeIGFCeXRlKSAmIDB4ZmZdOworfQorCit2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUllZWVFdWk2NCkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgYUllZWVFdWk2NFswXSA9IDB4MTg7CisgICAgYUllZWVFdWk2NFsxXSA9IDB4YjQ7CisgICAgYUllZWVFdWk2NFsyXSA9IDB4MzA7CisgICAgYUllZWVFdWk2NFszXSA9IDB4MDA7CisgICAgYUllZWVFdWk2NFs0XSA9IChOT0RFX0lEID4+IDI0KSAmIDB4ZmY7CisgICAgYUllZWVFdWk2NFs1XSA9IChOT0RFX0lEID4+IDE2KSAmIDB4ZmY7CisgICAgYUllZWVFdWk2NFs2XSA9IChOT0RFX0lEID4+IDgpICYgMHhmZjsKKyAgICBhSWVlZUV1aTY0WzddID0gTk9ERV9JRCAmIDB4ZmY7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IHBhbmlkKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzUGFuaWQgPSBwYW5pZDsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoc0V4dGVuZGVkQWRkcmVzcyk7IGkrKykKKyAgICB7CisgICAgICAgIHNFeHRlbmRlZEFkZHJlc3NbaV0gPSBhZGRyZXNzW3NpemVvZihzRXh0ZW5kZWRBZGRyZXNzKSAtIDEgLSBpXTsKKyAgICB9Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhZGRyZXNzKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzU2hvcnRBZGRyZXNzID0gYWRkcmVzczsKK30KKwordm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICBzUHJvbWlzY3VvdXMgPSBhRW5hYmxlOworfQorCit2b2lkIHBsYXRmb3JtUmFkaW9Jbml0KHZvaWQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNvY2thZGRyOworICAgIGNoYXIgKm9mZnNldDsKKyAgICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yoc29ja2FkZHIpKTsKKyAgICBzb2NrYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIG9mZnNldCA9IGdldGVudigiUE9SVF9PRkZTRVQiKTsKKworICAgIGlmIChvZmZzZXQpCisgICAgeworICAgICAgICBjaGFyICplbmRwdHI7CisKKyAgICAgICAgc1BvcnRPZmZzZXQgPSAodWludDE2X3Qpc3RydG9sKG9mZnNldCwgJmVuZHB0ciwgMCk7CisKKyAgICAgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFBPUlRfT0ZGU0VUOiAlc1xuIiwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBzUG9ydE9mZnNldCAqPSBXRUxMS05PV05fTk9ERV9JRDsKKyAgICB9CisKKyAgICBpZiAoc1Byb21pc2N1b3VzKQorICAgIHsKKyAgICAgICAgc29ja2FkZHIuc2luX3BvcnQgPSBodG9ucyg5MDAwICsgc1BvcnRPZmZzZXQgKyBXRUxMS05PV05fTk9ERV9JRCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvY2thZGRyLnNpbl9wb3J0ID0gaHRvbnMoOTAwMCArIHNQb3J0T2Zmc2V0ICsgTk9ERV9JRCk7CisgICAgfQorCisgICAgc29ja2FkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKworICAgIHNTb2NrRmQgPSAoaW50KXNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisgICAgYmluZChzU29ja0ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNvY2thZGRyLCBzaXplb2Yoc29ja2FkZHIpKTsKKworICAgIHNSZWNlaXZlRnJhbWUubVBzZHUgPSBzUmVjZWl2ZU1lc3NhZ2UubVBzZHU7CisgICAgc1RyYW5zbWl0RnJhbWUubVBzZHUgPSBzVHJhbnNtaXRNZXNzYWdlLm1Qc2R1OworICAgIHNBY2tGcmFtZS5tUHNkdSA9IHNBY2tNZXNzYWdlLm1Qc2R1OworfQorCit2b2lkIHBsYXRmb3JtUmFkaW9EZWluaXQodm9pZCkKK3sKKyAgICBjbG9zZShzU29ja0ZkKTsKK30KKworYm9vbCBvdFBsYXRSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAoc1N0YXRlICE9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEKSA/IHRydWUgOiBmYWxzZTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaWYgKCFvdFBsYXRSYWRpb0lzRW5hYmxlZChhSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgc1N0YXRlID0gT1RfUkFESU9fU1RBVEVfU0xFRVA7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9EaXNhYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZiAob3RQbGF0UmFkaW9Jc0VuYWJsZWQoYUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX0RJU0FCTEVEOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvU2xlZXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfU0xFRVAgfHwgc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1NMRUVQOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb1JlY2VpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIGlmIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfRElTQUJMRUQpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIHNBY2tXYWl0ID0gZmFsc2U7CisgICAgICAgIHNSZWNlaXZlRnJhbWUubUNoYW5uZWwgPSBhQ2hhbm5lbDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYVJhZGlvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhUmFkaW87CisKKyAgICBpZiAoc1N0YXRlID09IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUpCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1RSQU5TTUlUOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RSYWRpb0ZyYW1lICpvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuICZzVHJhbnNtaXRGcmFtZTsKK30KKworaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiAwOworfQorCitvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfUkFESU9fQ0FQU19OT05FOworfQorCitib29sIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gc1Byb21pc2N1b3VzOworfQorCit2b2lkIHJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgc3NpemVfdCBydmFsID0gcmVjdmZyb20oc1NvY2tGZCwgKGNoYXIgKikmc1JlY2VpdmVNZXNzYWdlLCBzaXplb2Yoc1JlY2VpdmVNZXNzYWdlKSwgMCwgTlVMTCwgTlVMTCk7CisKKyAgICBpZiAocnZhbCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoInJlY3Zmcm9tIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1MZW5ndGggPSAodWludDhfdCkocnZhbCAtIDEpOworCisgICAgaWYgKHNBY2tXYWl0ICYmCisgICAgICAgIHNUcmFuc21pdEZyYW1lLm1DaGFubmVsID09IHNSZWNlaXZlTWVzc2FnZS5tQ2hhbm5lbCAmJgorICAgICAgICBpc0ZyYW1lVHlwZUFjayhzUmVjZWl2ZUZyYW1lLm1Qc2R1KSAmJgorICAgICAgICBnZXREc24oc1JlY2VpdmVGcmFtZS5tUHNkdSkgPT0gZ2V0RHNuKHNUcmFuc21pdEZyYW1lLm1Qc2R1KSkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisgICAgICAgIHNBY2tXYWl0ID0gZmFsc2U7CisKKyAgICAgICAgb3RQbGF0UmFkaW9UeERvbmUoYUluc3RhbmNlLCAmc1RyYW5zbWl0RnJhbWUsICZzUmVjZWl2ZUZyYW1lLCBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisgICAgZWxzZSBpZiAoKHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9SRUNFSVZFIHx8IHNTdGF0ZSA9PSBPVF9SQURJT19TVEFURV9UUkFOU01JVCkgJiYKKyAgICAgICAgICAgICAoc1JlY2VpdmVGcmFtZS5tQ2hhbm5lbCA9PSBzUmVjZWl2ZU1lc3NhZ2UubUNoYW5uZWwpKQorICAgIHsKKyAgICAgICAgcmFkaW9Qcm9jZXNzRnJhbWUoYUluc3RhbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgcmFkaW9TZW5kTWVzc2FnZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgc1RyYW5zbWl0TWVzc2FnZS5tQ2hhbm5lbCA9IHNUcmFuc21pdEZyYW1lLm1DaGFubmVsOworCisgICAgcmFkaW9UcmFuc21pdCgmc1RyYW5zbWl0TWVzc2FnZSwgJnNUcmFuc21pdEZyYW1lKTsKKworICAgIHNBY2tXYWl0ID0gaXNBY2tSZXF1ZXN0ZWQoc1RyYW5zbWl0RnJhbWUubVBzZHUpOworCisgICAgaWYgKCFzQWNrV2FpdCkKKyAgICB7CisgICAgICAgIHNTdGF0ZSA9IE9UX1JBRElPX1NUQVRFX1JFQ0VJVkU7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKKyAgICAgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShhSW5zdGFuY2UsICZzVHJhbnNtaXRGcmFtZSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJnNUcmFuc21pdEZyYW1lLCBOVUxMLCBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBwbGF0Zm9ybVJhZGlvVXBkYXRlRmRTZXQoZmRfc2V0ICphUmVhZEZkU2V0LCBmZF9zZXQgKmFXcml0ZUZkU2V0LCBpbnQgKmFNYXhGZCkKK3sKKyAgICBpZiAoYVJlYWRGZFNldCAhPSBOVUxMICYmIChzU3RhdGUgIT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgfHwgc0Fja1dhaXQpKQorICAgIHsKKyAgICAgICAgRkRfU0VUKHNTb2NrRmQsIGFSZWFkRmRTZXQpOworCisgICAgICAgIGlmIChhTWF4RmQgIT0gTlVMTCAmJiAqYU1heEZkIDwgc1NvY2tGZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFNYXhGZCA9IHNTb2NrRmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYVdyaXRlRmRTZXQgIT0gTlVMTCAmJiBzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgIXNBY2tXYWl0KQorICAgIHsKKyAgICAgICAgRkRfU0VUKHNTb2NrRmQsIGFXcml0ZUZkU2V0KTsKKworICAgICAgICBpZiAoYU1heEZkICE9IE5VTEwgJiYgKmFNYXhGZCA8IHNTb2NrRmQpCisgICAgICAgIHsKKyAgICAgICAgICAgICphTWF4RmQgPSBzU29ja0ZkOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHBsYXRmb3JtUmFkaW9Qcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBjb25zdCBpbnQgZmxhZ3MgPSBQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTEVSUiB8IFBPTExOVkFMIHwgUE9MTEhVUDsKKyAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZCA9IHsgc1NvY2tGZCwgZmxhZ3MsIDAgfTsKKworICAgIGlmIChQT0xMKCZwb2xsZmQsIDEsIDApID4gMCAmJiAocG9sbGZkLnJldmVudHMgJiBmbGFncykgIT0gMCkKKyAgICB7CisgICAgICAgIHJhZGlvUmVjZWl2ZShhSW5zdGFuY2UpOworICAgIH0KKworICAgIGlmIChzU3RhdGUgPT0gT1RfUkFESU9fU1RBVEVfVFJBTlNNSVQgJiYgIXNBY2tXYWl0KQorICAgIHsKKyAgICAgICAgcmFkaW9TZW5kTWVzc2FnZShhSW5zdGFuY2UpOworICAgIH0KK30KKwordm9pZCByYWRpb1RyYW5zbWl0KHN0cnVjdCBSYWRpb01lc3NhZ2UgKm1zZywgY29uc3Qgc3RydWN0IG90UmFkaW9GcmFtZSAqcGt0KQoreworICAgIHVpbnQzMl90IGk7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNvY2thZGRyOworCisgICAgdWludDE2X3QgY3JjID0gMDsKKyAgICB1aW50MTZfdCBjcmNfb2Zmc2V0ID0gcGt0LT5tTGVuZ3RoIC0gc2l6ZW9mKHVpbnQxNl90KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjcmNfb2Zmc2V0OyBpKyspCisgICAgeworICAgICAgICBjcmMgPSBjcmMxNl9jaXR0KGNyYywgbXNnLT5tUHNkdVtpXSk7CisgICAgfQorCisgICAgbXNnLT5tUHNkdVtjcmNfb2Zmc2V0XSA9IGNyYyAmIDB4ZmY7CisgICAgbXNnLT5tUHNkdVtjcmNfb2Zmc2V0ICsgMV0gPSBjcmMgPj4gODsKKworICAgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICAgIHNvY2thZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGluZXRfcHRvbihBRl9JTkVULCAiMTI3LjAuMC4xIiwgJnNvY2thZGRyLnNpbl9hZGRyKTsKKworICAgIGZvciAoaSA9IDE7IGkgPD0gV0VMTEtOT1dOX05PREVfSUQ7IGkrKykKKyAgICB7CisgICAgICAgIHNzaXplX3QgcnZhbDsKKworICAgICAgICBpZiAoTk9ERV9JRCA9PSBpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNvY2thZGRyLnNpbl9wb3J0ID0gaHRvbnMoOTAwMCArIHNQb3J0T2Zmc2V0ICsgaSk7CisgICAgICAgIHJ2YWwgPSBzZW5kdG8oc1NvY2tGZCwgKGNvbnN0IGNoYXIgKiltc2csIDEgKyBwa3QtPm1MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSk7CisKKyAgICAgICAgaWYgKHJ2YWwgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoInJlY3Zmcm9tIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgcmFkaW9TZW5kQWNrKHZvaWQpCit7CisgICAgc0Fja0ZyYW1lLm1MZW5ndGggPSBJRUVFODAyMTU0X0FDS19MRU5HVEg7CisgICAgc0Fja01lc3NhZ2UubVBzZHVbMF0gPSBJRUVFODAyMTU0X0ZSQU1FX1RZUEVfQUNLOworCisgICAgaWYgKGlzRGF0YVJlcXVlc3Qoc1JlY2VpdmVGcmFtZS5tUHNkdSkpCisgICAgeworICAgICAgICBzQWNrTWVzc2FnZS5tUHNkdVswXSB8PSBJRUVFODAyMTU0X0ZSQU1FX1BFTkRJTkc7CisgICAgfQorCisgICAgc0Fja01lc3NhZ2UubVBzZHVbMV0gPSAwOworICAgIHNBY2tNZXNzYWdlLm1Qc2R1WzJdID0gZ2V0RHNuKHNSZWNlaXZlRnJhbWUubVBzZHUpOworCisgICAgc0Fja01lc3NhZ2UubUNoYW5uZWwgPSBzUmVjZWl2ZUZyYW1lLm1DaGFubmVsOworCisgICAgcmFkaW9UcmFuc21pdCgmc0Fja01lc3NhZ2UsICZzQWNrRnJhbWUpOworfQorCit2b2lkIHJhZGlvUHJvY2Vzc0ZyYW1lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdFBhbklkIGRzdHBhbjsKKyAgICBvdFNob3J0QWRkcmVzcyBzaG9ydF9hZGRyZXNzOworICAgIG90RXh0QWRkcmVzcyBleHRfYWRkcmVzczsKKworICAgIG90RVhQRUNUX0FDVElPTihzUHJvbWlzY3VvdXMgPT0gZmFsc2UsIGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBzd2l0Y2ggKHNSZWNlaXZlRnJhbWUubVBzZHVbMV0gJiBJRUVFODAyMTU0X0RTVF9BRERSX01BU0spCisgICAgeworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9OT05FOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9TSE9SVDoKKyAgICAgICAgZHN0cGFuID0gZ2V0RHN0UGFuKHNSZWNlaXZlRnJhbWUubVBzZHUpOworICAgICAgICBzaG9ydF9hZGRyZXNzID0gZ2V0U2hvcnRBZGRyZXNzKHNSZWNlaXZlRnJhbWUubVBzZHUpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oKGRzdHBhbiA9PSBJRUVFODAyMTU0X0JST0FEQ0FTVCB8fCBkc3RwYW4gPT0gc1BhbmlkKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHNob3J0X2FkZHJlc3MgPT0gSUVFRTgwMjE1NF9CUk9BRENBU1QgfHwgc2hvcnRfYWRkcmVzcyA9PSBzU2hvcnRBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUJPUlQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSUVFRTgwMjE1NF9EU1RfQUREUl9FWFQ6CisgICAgICAgIGRzdHBhbiA9IGdldERzdFBhbihzUmVjZWl2ZUZyYW1lLm1Qc2R1KTsKKyAgICAgICAgZ2V0RXh0QWRkcmVzcyhzUmVjZWl2ZUZyYW1lLm1Qc2R1LCAmZXh0X2FkZHJlc3MpOworICAgICAgICBvdEVYUEVDVF9BQ1RJT04oKGRzdHBhbiA9PSBJRUVFODAyMTU0X0JST0FEQ0FTVCB8fCBkc3RwYW4gPT0gc1BhbmlkKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKCZleHRfYWRkcmVzcywgc0V4dGVuZGVkQWRkcmVzcywgc2l6ZW9mKGV4dF9hZGRyZXNzKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUJPUlQpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUJPUlQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBzUmVjZWl2ZUZyYW1lLm1Qb3dlciA9IC0yMDsKKyAgICBzUmVjZWl2ZUZyYW1lLm1McWkgPSBPVF9SQURJT19MUUlfTk9ORTsKKworICAgIC8vIGdlbmVyYXRlIGFja25vd2xlZGdtZW50CisgICAgaWYgKGlzQWNrUmVxdWVzdGVkKHNSZWNlaXZlRnJhbWUubVBzZHUpKQorICAgIHsKKyAgICAgICAgcmFkaW9TZW5kQWNrKCk7CisgICAgfQorCitleGl0OgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisgICAgaWYgKG90UGxhdERpYWdNb2RlR2V0KCkpCisgICAgeworICAgICAgICBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShhSW5zdGFuY2UsIGVycm9yID09IE9UX0VSUk9SX05PTkUgPyAmc1JlY2VpdmVGcmFtZSA6IE5VTEwsIGVycm9yKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgZXJyb3IgPT0gT1RfRVJST1JfTk9ORSA/ICZzUmVjZWl2ZUZyYW1lIDogTlVMTCwgZXJyb3IpOworICAgIH0KK30KKwordm9pZCBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhRW5hYmxlOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYVNob3J0QWRkcmVzczsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYUV4dEFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgICh2b2lkKWFTaG9ydEFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcykKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgKHZvaWQpYUV4dEFkZHJlc3M7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7Cit9CisKK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworfQorCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhU2NhbkNoYW5uZWw7CisgICAgKHZvaWQpYVNjYW5EdXJhdGlvbjsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAodm9pZClhUG93ZXI7Cit9CisKK2ludDhfdCBvdFBsYXRSYWRpb0dldFJlY2VpdmVTZW5zaXRpdml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgKHZvaWQpYUluc3RhbmNlOworICAgIHJldHVybiBQT1NJWF9SRUNFSVZFX1NFTlNJVElWSVRZOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhbmRvbS5jIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3JhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTIwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvcmFuZG9tLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAicGxhdGZvcm0tcG9zaXguaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAidXRpbHMvY29kZV91dGlscy5oIgorCitzdGF0aWMgdWludDMyX3Qgc1N0YXRlID0gMTsKKwordm9pZCBwbGF0Zm9ybVJhbmRvbUluaXQodm9pZCkKK3sKKyNpZiBfX1NBTklUSVpFX0FERFJFU1NfXyA9PSAwCisKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgZXJyb3IgPSBvdFBsYXRSYW5kb21HZXRUcnVlKCh1aW50OF90ICopJnNTdGF0ZSwgc2l6ZW9mKHNTdGF0ZSkpOworICAgIGFzc2VydChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKworI2Vsc2UgIC8vIF9fU0FOSVRJWkVfQUREUkVTU19fCisKKyAgICAvLyBNdWx0aXBseWluZyBOT0RFX0lEIGFzc3VyZXMgdGhhdCBubyB0d28gbm9kZXMgZ2V0cyB0aGUgc2FtZSBzZWVkIHdpdGhpbiBhbiBob3VyLgorICAgIHNTdGF0ZSA9ICh1aW50MzJfdCl0aW1lKE5VTEwpICsgKDM2MDAgKiBOT0RFX0lEKTsKKworI2VuZGlmICAvLyBfX1NBTklUSVpFX0FERFJFU1NfXworfQorCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCBtbGNnLCBwLCBxOworICAgIHVpbnQ2NF90IHRtcHN0YXRlOworCisgICAgdG1wc3RhdGUgPSAodWludDY0X3QpMzM2MTQgKiAodWludDY0X3Qpc1N0YXRlOworICAgIHEgPSB0bXBzdGF0ZSAmIDB4ZmZmZmZmZmY7CisgICAgcSA9IHEgPj4gMTsKKyAgICBwID0gdG1wc3RhdGUgPj4gMzI7CisgICAgbWxjZyA9IHAgKyBxOworCisgICAgaWYgKG1sY2cgJiAweDgwMDAwMDAwKQorICAgIHsKKyAgICAgICAgbWxjZyAmPSAweDdmZmZmZmZmOworICAgICAgICBtbGNnKys7CisgICAgfQorCisgICAgc1N0YXRlID0gbWxjZzsKKworICAgIHJldHVybiBtbGNnOworfQorCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworI2lmIF9fU0FOSVRJWkVfQUREUkVTU19fID09IDAKKworICAgIEZJTEUgKmZpbGUgPSBOVUxMOworICAgIHNpemVfdCByZWFkTGVuZ3RoOworCisgICAgb3RFWFBFQ1RfQUNUSU9OKGFPdXRwdXQgJiYgYU91dHB1dExlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZmlsZSA9IGZvcGVuKCIvZGV2L3VyYW5kb20iLCAicmIiKTsKKyAgICBvdEVYUEVDVF9BQ1RJT04oZmlsZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKKyAgICByZWFkTGVuZ3RoID0gZnJlYWQoYU91dHB1dCwgMSwgYU91dHB1dExlbmd0aCwgZmlsZSk7CisgICAgb3RFWFBFQ1RfQUNUSU9OKHJlYWRMZW5ndGggPT0gYU91dHB1dExlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworCitleGl0OgorCisgICAgaWYgKGZpbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICB9CisKKyNlbHNlICAvLyBfX1NBTklUSVpFX0FERFJFU1NfXworCisgICAgLyoKKyAgICAgKiBUSEUgSU1QTEVNRU5UQVRJT04gQkVMT1cgSVMgTk9UIENPTVBMSUFOVCBXSVRIIFRIRSBUSFJFQUQgU1BFQ0lGSUNBVElPTi4KKyAgICAgKgorICAgICAqIEFkZHJlc3MgU2FuaXRpemVyIHRyaWdnZXJzIHRlc3QgZmFpbHVyZXMgd2hlbiByZWFkaW5nIHJhbmRvbQorICAgICAqIHZhbHVlcyBmcm9tIC9kZXYvdXJhbmRvbS4gIFRoZSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgKiBpbXBsZW1lbnRhdGlvbiBiZWxvdyBpcyBvbmx5IHVzZWQgdG8gZW5hYmxlIGNvbnRpbnVvdXMKKyAgICAgKiBpbnRlZ3JhdGlvbiBjaGVja3Mgd2l0aCBBZGRyZXNzIFNhbml0aXplciBlbmFibGVkLgorICAgICAqLworICAgIG90RVhQRUNUX0FDVElPTihhT3V0cHV0ICYmIGFPdXRwdXRMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGZvciAodWludDE2X3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgYU91dHB1dExlbmd0aDsgbGVuZ3RoKyspCisgICAgeworICAgICAgICBhT3V0cHV0W2xlbmd0aF0gPSAodWludDhfdClvdFBsYXRSYW5kb21HZXQoKTsKKyAgICB9CisKK2V4aXQ6CisKKyNlbmRpZiAgLy8gX19TQU5JVElaRV9BRERSRVNTX18KKworICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9zcGktc3R1YnMuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC9zcGktc3R1YnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGRiOWYxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3NwaS1zdHVicy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS1wb3NpeC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vc3BpLXNsYXZlLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisKKy8vIFNwaS1zbGF2ZSBzdHVicworCitvdEVycm9yIG90UGxhdFNwaVNsYXZlRW5hYmxlKG90UGxhdFNwaVNsYXZlVHJhbnNhY3Rpb25Db21wbGV0ZUNhbGxiYWNrIGFDb21wbGV0ZUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdFBsYXRTcGlTbGF2ZVRyYW5zYWN0aW9uUHJvY2Vzc0NhbGxiYWNrIGFQcm9jZXNzQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgICh2b2lkKWFDb21wbGV0ZUNhbGxiYWNrOworICAgICh2b2lkKWFQcm9jZXNzQ2FsbGJhY2s7CisgICAgKHZvaWQpYUNvbnRleHQ7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuTm8gU1BJIHN1cHBvcnQgZm9yIHBvc2l4IHBsYXRmb3JtLiIpOworICAgIGV4aXQoMCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCit2b2lkIG90UGxhdFNwaVNsYXZlRGlzYWJsZSh2b2lkKQoreworfQorCitvdEVycm9yIG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlucHV0QnVmTGVuLCBib29sIGFSZXF1ZXN0VHJhbnNhY3Rpb25GbGFnKQoreworICAgICh2b2lkKWFPdXRwdXRCdWY7CisgICAgKHZvaWQpYU91dHB1dEJ1ZkxlbjsKKyAgICAodm9pZClhSW5wdXRCdWY7CisgICAgKHZvaWQpYUlucHV0QnVmTGVuOworICAgICh2b2lkKWFSZXF1ZXN0VHJhbnNhY3Rpb25GbGFnOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworLy8gVWFydAorCit2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworfQorCit2b2lkIG90UGxhdFVhcnRSZWNlaXZlZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgICh2b2lkKWFCdWY7CisgICAgKHZvaWQpYUJ1Zkxlbmd0aDsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC91YXJ0LXBvc2l4LmMgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvdWFydC1wb3NpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjI1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvdWFydC1wb3NpeC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGxhdGZvcm0tcG9zaXguaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworI2lmZGVmIE9QRU5USFJFQURfVEFSR0VUX0xJTlVYCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CitpbnQgcG9zaXhfb3BlbnB0KGludCBvZmxhZyk7CitpbnQgZ3JhbnRwdChpbnQgZmlsZGVzKTsKK2ludCB1bmxvY2twdChpbnQgZmQpOworY2hhciAqcHRzbmFtZShpbnQgZmQpOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX1RBUkdFVF9MSU5VWAorCitzdGF0aWMgdWludDhfdCBzX3JlY2VpdmVfYnVmZmVyWzEyOF07CitzdGF0aWMgY29uc3QgdWludDhfdCAqc193cml0ZV9idWZmZXI7CitzdGF0aWMgdWludDE2X3Qgc193cml0ZV9sZW5ndGg7CitzdGF0aWMgaW50IHNfaW5fZmQ7CitzdGF0aWMgaW50IHNfb3V0X2ZkOworCitzdGF0aWMgc3RydWN0IHRlcm1pb3Mgb3JpZ2luYWxfc3RkaW5fdGVybWlvczsKK3N0YXRpYyBzdHJ1Y3QgdGVybWlvcyBvcmlnaW5hbF9zdGRvdXRfdGVybWlvczsKKworc3RhdGljIHZvaWQgcmVzdG9yZV9zdGRpbl90ZXJtaW9zKHZvaWQpCit7CisgICAgdGNzZXRhdHRyKHNfaW5fZmQsIFRDU0FGTFVTSCwgJm9yaWdpbmFsX3N0ZGluX3Rlcm1pb3MpOworfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3N0ZG91dF90ZXJtaW9zKHZvaWQpCit7CisgICAgdGNzZXRhdHRyKHNfb3V0X2ZkLCBUQ1NBRkxVU0gsICZvcmlnaW5hbF9zdGRvdXRfdGVybWlvcyk7Cit9CisKK3ZvaWQgcGxhdGZvcm1VYXJ0UmVzdG9yZSh2b2lkKQoreworICAgIHJlc3RvcmVfc3RkaW5fdGVybWlvcygpOworICAgIHJlc3RvcmVfc3Rkb3V0X3Rlcm1pb3MoKTsKKyAgICBkdXAyKHNfb3V0X2ZkLCBTVERPVVRfRklMRU5PKTsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3RydWN0IHRlcm1pb3MgdGVybWlvczsKKworI2lmZGVmIE9QRU5USFJFQURfVEFSR0VUX0xJTlVYCisgICAgLy8gRW5zdXJlIHdlIHRlcm1pbmF0ZSB0aGlzIHByb2Nlc3MgaWYgdGhlCisgICAgLy8gcGFyZW50IHByb2Nlc3MgZGllcy4KKyAgICBwcmN0bChQUl9TRVRfUERFQVRIU0lHLCBTSUdIVVApOworI2VuZGlmCisKKyAgICBzX2luX2ZkID0gZHVwKFNURElOX0ZJTEVOTyk7CisgICAgc19vdXRfZmQgPSBkdXAoU1RET1VUX0ZJTEVOTyk7CisgICAgZHVwMihTVERFUlJfRklMRU5PLCBTVERPVVRfRklMRU5PKTsKKworICAgIC8vIFdlIG5lZWQgdGhpcyBzaWduYWwgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcworICAgIC8vIHByb2Nlc3MgdGVybWluYXRlcyBwcm9wZXJseS4KKyAgICBzaWduYWwoU0lHUElQRSwgU0lHX0RGTCk7CisKKyAgICBpZiAoaXNhdHR5KHNfaW5fZmQpKQorICAgIHsKKyAgICAgICAgdGNnZXRhdHRyKHNfaW5fZmQsICZvcmlnaW5hbF9zdGRpbl90ZXJtaW9zKTsKKyAgICAgICAgYXRleGl0KCZyZXN0b3JlX3N0ZGluX3Rlcm1pb3MpOworICAgIH0KKworICAgIGlmIChpc2F0dHkoc19vdXRfZmQpKQorICAgIHsKKyAgICAgICAgdGNnZXRhdHRyKHNfb3V0X2ZkLCAmb3JpZ2luYWxfc3Rkb3V0X3Rlcm1pb3MpOworICAgICAgICBhdGV4aXQoJnJlc3RvcmVfc3Rkb3V0X3Rlcm1pb3MpOworICAgIH0KKworICAgIGlmIChpc2F0dHkoc19pbl9mZCkpCisgICAgeworICAgICAgICAvLyBnZXQgY3VycmVudCBjb25maWd1cmF0aW9uCisgICAgICAgIG90RVhQRUNUX0FDVElPTih0Y2dldGF0dHIoc19pbl9mZCwgJnRlcm1pb3MpID09IDAsIHBlcnJvcigidGNnZXRhdHRyIik7IGVycm9yID0gT1RfRVJST1JfR0VORVJJQyk7CisKKyAgICAgICAgLy8gU2V0IHVwIHRoZSB0ZXJtaW9zIHNldHRpbmdzIGZvciByYXcgbW9kZS4gVGhpcyB0dXJucworICAgICAgICAvLyBvZmYgaW5wdXQvb3V0cHV0IHByb2Nlc3NpbmcsIGxpbmUgcHJvY2Vzc2luZywgYW5kIGNoYXJhY3RlciBwcm9jZXNzaW5nLgorICAgICAgICBjZm1ha2VyYXcoJnRlcm1pb3MpOworCisgICAgICAgIC8vIFNldCB1cCBvdXIgY2ZsYWdzIGZvciBsb2NhbCB1c2UuIFR1cm4gb24gaGFuZ3VwLW9uLWNsb3NlLgorICAgICAgICB0ZXJtaW9zLmNfY2ZsYWcgfD0gSFVQQ0wgfCBDUkVBRCB8IENMT0NBTDsKKworICAgICAgICAvLyAiTWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBmb3Igbm9uY2Fub25pY2FsIHJlYWQiCisgICAgICAgIHRlcm1pb3MuY19jY1tWTUlOXSAgPSAxOworCisgICAgICAgIC8vICJUaW1lb3V0IGluIGRlY2lzZWNvbmRzIGZvciBub25jYW5vbmljYWwgcmVhZCIKKyAgICAgICAgdGVybWlvcy5jX2NjW1ZUSU1FXSA9IDA7CisKKyAgICAgICAgLy8gY29uZmlndXJlIGJhdWQgcmF0ZQorICAgICAgICBvdEVYUEVDVF9BQ1RJT04oY2ZzZXRpc3BlZWQoJnRlcm1pb3MsIEIxMTUyMDApID09IDAsIHBlcnJvcigiY2ZzZXRpc3BlZWQiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvbgorICAgICAgICBvdEVYUEVDVF9BQ1RJT04odGNzZXRhdHRyKHNfaW5fZmQsIFRDU0FOT1csICZ0ZXJtaW9zKSA9PSAwLCBwZXJyb3IoInRjc2V0YXR0ciIpOyBlcnJvciA9IE9UX0VSUk9SX0dFTkVSSUMpOworICAgIH0KKworICAgIGlmIChpc2F0dHkoc19vdXRfZmQpKQorICAgIHsKKyAgICAgICAgLy8gZ2V0IGN1cnJlbnQgY29uZmlndXJhdGlvbgorICAgICAgICBvdEVYUEVDVF9BQ1RJT04odGNnZXRhdHRyKHNfb3V0X2ZkLCAmdGVybWlvcykgPT0gMCwgcGVycm9yKCJ0Y2dldGF0dHIiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgICAgICAvLyBTZXQgdXAgdGhlIHRlcm1pb3Mgc2V0dGluZ3MgZm9yIHJhdyBtb2RlLiBUaGlzIHR1cm5zCisgICAgICAgIC8vIG9mZiBpbnB1dC9vdXRwdXQgcHJvY2Vzc2luZywgbGluZSBwcm9jZXNzaW5nLCBhbmQgY2hhcmFjdGVyIHByb2Nlc3NpbmcuCisgICAgICAgIGNmbWFrZXJhdygmdGVybWlvcyk7CisKKyAgICAgICAgLy8gQWJzb2x1dGVseSBvYmxpdGVyYXRlIGFsbCBvdXRwdXQgcHJvY2Vzc2luZy4KKyAgICAgICAgdGVybWlvcy5jX29mbGFnID0gMDsKKworICAgICAgICAvLyBTZXQgdXAgb3VyIGNmbGFncyBmb3IgbG9jYWwgdXNlLiBUdXJuIG9uIGhhbmd1cC1vbi1jbG9zZS4KKyAgICAgICAgdGVybWlvcy5jX2NmbGFnIHw9IEhVUENMIHwgQ1JFQUQgfCBDTE9DQUw7CisKKyAgICAgICAgLy8gY29uZmlndXJlIGJhdWQgcmF0ZQorICAgICAgICBvdEVYUEVDVF9BQ1RJT04oY2ZzZXRvc3BlZWQoJnRlcm1pb3MsIEIxMTUyMDApID09IDAsIHBlcnJvcigiY2ZzZXRvc3BlZWQiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvbgorICAgICAgICBvdEVYUEVDVF9BQ1RJT04odGNzZXRhdHRyKHNfb3V0X2ZkLCBUQ1NBTk9XLCAmdGVybWlvcykgPT0gMCwgcGVycm9yKCJ0Y3NldGF0dHIiKTsgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisKK2V4aXQ6CisgICAgY2xvc2Uoc19pbl9mZCk7CisgICAgY2xvc2Uoc19vdXRfZmQpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0RGlzYWJsZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgY2xvc2Uoc19pbl9mZCk7CisgICAgY2xvc2Uoc19vdXRfZmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdEVYUEVDVF9BQ1RJT04oc193cml0ZV9sZW5ndGggPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIHNfd3JpdGVfYnVmZmVyID0gYUJ1ZjsKKyAgICBzX3dyaXRlX2xlbmd0aCA9IGFCdWZMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIHBsYXRmb3JtVWFydFVwZGF0ZUZkU2V0KGZkX3NldCAqYVJlYWRGZFNldCwgZmRfc2V0ICphV3JpdGVGZFNldCwgZmRfc2V0ICphRXJyb3JGZFNldCwgaW50ICphTWF4RmQpCit7CisgICAgaWYgKGFSZWFkRmRTZXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEZEX1NFVChzX2luX2ZkLCBhUmVhZEZkU2V0KTsKKworICAgICAgICBpZiAoYUVycm9yRmRTZXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgRkRfU0VUKHNfaW5fZmQsIGFFcnJvckZkU2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhTWF4RmQgIT0gTlVMTCAmJiAqYU1heEZkIDwgc19pbl9mZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFNYXhGZCA9IHNfaW5fZmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGFXcml0ZUZkU2V0ICE9IE5VTEwpICYmIChzX3dyaXRlX2xlbmd0aCA+IDApKQorICAgIHsKKyAgICAgICAgRkRfU0VUKHNfb3V0X2ZkLCBhV3JpdGVGZFNldCk7CisKKyAgICAgICAgaWYgKGFFcnJvckZkU2V0ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZEX1NFVChzX291dF9mZCwgYUVycm9yRmRTZXQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFNYXhGZCAhPSBOVUxMICYmICphTWF4RmQgPCBzX291dF9mZCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFNYXhGZCA9IHNfb3V0X2ZkOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHBsYXRmb3JtVWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICBzc2l6ZV90IHJ2YWw7CisgICAgY29uc3QgaW50IGVycm9yX2ZsYWdzID0gUE9MTEVSUiB8IFBPTExOVkFMIHwgUE9MTEhVUDsKKyAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZFtdID0KKyAgICB7CisgICAgICAgIHsgc19pbl9mZCwgIFBPTExJTiAgfCBlcnJvcl9mbGFncywgMCB9LAorICAgICAgICB7IHNfb3V0X2ZkLCBQT0xMT1VUIHwgZXJyb3JfZmxhZ3MsIDAgfSwKKyAgICB9OworCisgICAgZXJybm8gPSAwOworCisgICAgcnZhbCA9IHBvbGwocG9sbGZkLCBzaXplb2YocG9sbGZkKSAvIHNpemVvZigqcG9sbGZkKSwgMCk7CisKKyAgICBpZiAocnZhbCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoInBvbGwiKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGlmIChydmFsID4gMCkKKyAgICB7CisgICAgICAgIGlmICgocG9sbGZkWzBdLnJldmVudHMgJiBlcnJvcl9mbGFncykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJzX2luX2ZkIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHBvbGxmZFsxXS5yZXZlbnRzICYgZXJyb3JfZmxhZ3MpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigic19vdXRfZmQiKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xsZmRbMF0ucmV2ZW50cyAmIFBPTExJTikKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9IHJlYWQoc19pbl9mZCwgc19yZWNlaXZlX2J1ZmZlciwgc2l6ZW9mKHNfcmVjZWl2ZV9idWZmZXIpKTsKKworICAgICAgICAgICAgaWYgKHJ2YWwgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoInJlYWQiKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZChzX3JlY2VpdmVfYnVmZmVyLCAodWludDE2X3QpcnZhbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHNfd3JpdGVfbGVuZ3RoID4gMCkgJiYgKHBvbGxmZFsxXS5yZXZlbnRzICYgUE9MTE9VVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ2YWwgPSB3cml0ZShzX291dF9mZCwgc193cml0ZV9idWZmZXIsIHNfd3JpdGVfbGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKHJ2YWwgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIndyaXRlIik7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzX3dyaXRlX2J1ZmZlciArPSAodWludDE2X3QpcnZhbDsKKyAgICAgICAgICAgIHNfd3JpdGVfbGVuZ3RoIC09ICh1aW50MTZfdClydmFsOworCisgICAgICAgICAgICBpZiAoc193cml0ZV9sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRVYXJ0U2VuZERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC91YXJ0LXdpbmRvd3MuYyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy9wb3NpeC91YXJ0LXdpbmRvd3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJiYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcGxhdGZvcm1zL3Bvc2l4L3VhcnQtd2luZG93cy5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicGxhdGZvcm0tcG9zaXguaCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oIgorI2luY2x1ZGUgInV0aWxzL2NvZGVfdXRpbHMuaCIKKworc3RhdGljIEhBTkRMRSBzX1dvcmtlclRocmVhZDsKK3N0YXRpYyBIQU5ETEUgc19TdG9wV29ya2VyRXZlbnQ7CisKK0RXT1JEIFdJTkFQSSAKK3dpbmRvd3NVYXJ0V29ya2VyVGhyZWFkKAorICAgIF9Jbl8gTFBWT0lEIGxwVGhyZWFkUGFyYW1ldGVyCisgICAgKQoreworICAgIERXT1JEIG9yaWdpbmFsQ29uc29sZU1vZGU7CisgICAgSEFORExFIHdhaXRIYW5kbGVzW10gPSB7IHNfU3RvcFdvcmtlckV2ZW50LCBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSkgfTsKKyAgICB1aW50OF90IGNoOworICAgIAorICAgIC8vIENhY2hlIHRoZSBvcmlnaW5hbCBjb25zb2xlIG1vZGUKKyAgICBHZXRDb25zb2xlTW9kZSh3YWl0SGFuZGxlc1sxXSwgJm9yaWdpbmFsQ29uc29sZU1vZGUpOworCisgICAgLy8gRmFrZSB0aGUgZmlyc3QgbmV3IGxpbmUKKyAgICBjaCA9ICdcbic7CisgICAgb3RQbGF0VWFydFJlY2VpdmVkKCZjaCwgMSk7CisKKyAgICAvLyBXYWl0IGZvciBjb25zb2xlIGV2ZW50cworICAgIHdoaWxlIChXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKEFSUkFZU0laRSh3YWl0SGFuZGxlcyksIHdhaXRIYW5kbGVzLCBGQUxTRSwgSU5GSU5JVEUpID09IFdBSVRfT0JKRUNUXzAgKyAxKQorICAgIHsKKyAgICAgICAgRFdPUkQgbnVtYmVyT2ZFdmVudCA9IDA7CisgICAgICAgIGlmIChHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyh3YWl0SGFuZGxlc1sxXSwgJm51bWJlck9mRXZlbnQpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKDsgbnVtYmVyT2ZFdmVudCA+IDA7IG51bWJlck9mRXZlbnQtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJTlBVVF9SRUNPUkQgcmVjb3JkOworICAgICAgICAgICAgICAgIERXT1JEIG51bVJlYWQ7CisgICAgICAgICAgICAgICAgaWYgKCFSZWFkQ29uc29sZUlucHV0KHdhaXRIYW5kbGVzWzFdLCAmcmVjb3JkLCAxLCAmbnVtUmVhZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkLkV2ZW50VHlwZSAhPSBLRVlfRVZFTlQgfHwKKyAgICAgICAgICAgICAgICAgICAgIXJlY29yZC5FdmVudC5LZXlFdmVudC5iS2V5RG93bikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2ggPSAodWludDhfdClyZWNvcmQuRXZlbnQuS2V5RXZlbnQudUNoYXIuQXNjaWlDaGFyOworICAgICAgICAgICAgICAgIG90UGxhdFVhcnRSZWNlaXZlZCgmY2gsIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5PX0VSUk9SOworfQorCitvdEVycm9yIG90UGxhdFVhcnRFbmFibGUodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIENyZWF0ZSB0aGUgd29ya2VyIHRocmVhZCBzdG9wIGV2ZW50CisgICAgb3RFWFBFQ1RfQUNUSU9OKChzX1N0b3BXb3JrZXJFdmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9HRU5FUklDKTsKKworICAgIC8vIFN0YXJ0IHRoZSB3b3JrZXIgdGhyZWFkCisgICAgb3RFWFBFQ1RfQUNUSU9OKChzX1dvcmtlclRocmVhZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCB3aW5kb3dzVWFydFdvcmtlclRocmVhZCwgTlVMTCwgMCwgTlVMTCkpICE9IE5VTEwsCisJCSAgICBlcnJvciA9IE9UX0VSUk9SX0dFTkVSSUMpOworCisgICAgcmV0dXJuIGVycm9yOworCitleGl0OgorICAgIENsb3NlSGFuZGxlKHNfU3RvcFdvcmtlckV2ZW50KTsKKyAgICBzX1N0b3BXb3JrZXJFdmVudCA9IE5VTEw7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFVhcnREaXNhYmxlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBTZXQgdGhlIHNodXRkb3duIGV2ZW50CisgICAgU2V0RXZlbnQoc19TdG9wV29ya2VyRXZlbnQpOworCisgICAgLy8gV2FpdCBmb3IgdGhlIHdvcmtlciB0byBjb21wZWx0ZQorICAgIFdhaXRGb3JTaW5nbGVPYmplY3Qoc19Xb3JrZXJUaHJlYWQsIElORklOSVRFKTsKKyAgICAKKyAgICBDbG9zZUhhbmRsZShzX1dvcmtlclRocmVhZCk7CisgICAgc19Xb3JrZXJUaHJlYWQgPSBOVUxMOworCisgICAgQ2xvc2VIYW5kbGUoc19TdG9wV29ya2VyRXZlbnQpOworICAgIHNfU3RvcFdvcmtlckV2ZW50ID0gTlVMTDsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdFBsYXRVYXJ0U2VuZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgRFdPUkQgZHdOdW1DaGFyc1dyaXR0ZW4gPSAwOworICAgIG90RVhQRUNUX0FDVElPTihXcml0ZUNvbnNvbGVBKEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSksIGFCdWYsIGFCdWZMZW5ndGgsICZkd051bUNoYXJzV3JpdHRlbiwgTlVMTCksCisJCSAgICBlcnJvciA9IE9UX0VSUk9SX0dFTkVSSUMpOworCisgICAgb3RQbGF0VWFydFNlbmREb25lKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIHBsYXRmb3JtVWFydFVwZGF0ZUZkU2V0KGZkX3NldCAqYVJlYWRGZFNldCwgZmRfc2V0ICphV3JpdGVGZFNldCwgZmRfc2V0ICphRXJyb3JGZFNldCwgaW50ICphTWF4RmQpCit7CisgICAgLy8gTm8tb3Agb24gV2luZG93cworICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoYVJlYWRGZFNldCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhV3JpdGVGZFNldCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhRXJyb3JGZFNldCk7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihhTWF4RmQpOworfQorCit2b2lkIHBsYXRmb3JtVWFydFByb2Nlc3Modm9pZCkKK3sKKyAgICAvLyBOby1vcCBvbiBXaW5kb3dzCit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlZGI4MAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQ4IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK2xpYl9MSUJSQVJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxpYm9wZW50aHJlYWQtcGxhdGZvcm0tdXRpbHMuYQorCitsaWJvcGVudGhyZWFkX3BsYXRmb3JtX3V0aWxzX2FfQ1BQRkxBR1MgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3BsYXRmb3JtcyAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX3BsYXRmb3JtX3V0aWxzX2FfU09VUkNFUyAgPSBcCisgICAgc2V0dGluZ3MuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY29kZV91dGlscy5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmxhc2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9jb2RlX3V0aWxzLmggYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvY29kZV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWU4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvY29kZV91dGlscy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIG1hY3JvcyBmb3IgdmFsaWRhdGluZyBydW50aW1lIGNvbmRpdGlvbnMuCisgKi8KKworI2lmbmRlZiBDT0RFX1VUSUxTX0gKKyNkZWZpbmUgQ09ERV9VVElMU19ICisKKy8qKgorICogIFRoaXMgY2hlY2tzIGZvciB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8KKyAqICBjb21tb25seSBiZSB0cnVlLCBhbmQgYnJhbmNoZXMgdG8gdGhlIGxvY2FsIGxhYmVsICdleGl0JyBpZiB0aGUKKyAqICBjb25kaXRpb24gaXMgZmFsc2UuCisgKgorICogIEBwYXJhbVtpbl0gIGFDb25kaXRpb24gIEEgQm9vbGVhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZC4KKyAqCisgKi8KKyNkZWZpbmUgb3RFWFBFQ1QoYUNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoYUNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisvKioKKyAqICBUaGlzIGNoZWNrcyBmb3IgdGhlIHNwZWNpZmllZCBjb25kaXRpb24sIHdoaWNoIGlzIGV4cGVjdGVkIHRvCisgKiAgY29tbW9ubHkgYmUgdHJ1ZSwgYW5kIGJvdGggZXhlY3V0ZXMgQHAgYW5BY3Rpb24gYW5kIGJyYW5jaGVzIHRvCisgKiAgdGhlIGxvY2FsIGxhYmVsICdleGl0JyBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLgorICoKKyAqICBAcGFyYW1baW5dICBhQ29uZGl0aW9uICBBIEJvb2xlYW4gZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQuCisgKiAgQHBhcmFtW2luXSAgYUFjdGlvbiAgICAgQW4gZXhwcmVzc2lvbiBvciBibG9jayB0byBleGVjdXRlIHdoZW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uIGZhaWxzLgorICoKKyAqLworI2RlZmluZSBvdEVYUEVDVF9BQ1RJT04oYUNvbmRpdGlvbiwgYUFjdGlvbikgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShhQ29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYUFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNlbmRpZiAgLy8gQ09ERV9VVElMU19ICmRpZmYgLS1naXQgYS9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvZmxhc2guaCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTc0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9wbGF0Zm9ybXMvdXRpbHMvZmxhc2guaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmbGFzaCBpbnRlcmZhY2UgdXNlZCBieSBzZXR0aW5ncy5jcHAuCisgKi8KKworI2lmbmRlZiBVVElMU19GTEFTSF9ICisjZGVmaW5lIFVUSUxTX0ZMQVNIX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogUGVyZm9ybSBhbnkgaW5pdGlhbGl6YXRpb24gZm9yIGZsYXNoIGRyaXZlci4KKyAqCisgKiBAcmV0dmFsIDo6T1RfRVJST1JfTk9ORSAgICBJbml0aWFsaXplIGZsYXNoIGRyaXZlciBzdWNjZXNzLgorICogQHJldHZhbCA6Ok9UX0VSUk9SX0ZBSUxFRCAgSW5pdGlhbGl6ZSBmbGFzaCBkcml2ZXIgZmFpbC4KKyAqLworb3RFcnJvciB1dGlsc0ZsYXNoSW5pdCh2b2lkKTsKKworLyoqCisgKiBHZXQgdGhlIHNpemUgb2YgZmxhc2ggdGhhdCBjYW4gYmUgcmVhZC93cml0ZSBieSB0aGUgY2FsbGVyLgorICogVGhlIHVzYWJsZSBmbGFzaCBzaXplIGlzIGFsd2F5cyB0aGUgbXVsdGlwbGUgb2YgZmxhc2ggcGFnZSBzaXplLgorICoKKyAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBmbGFzaC4KKyAqLwordWludDMyX3QgdXRpbHNGbGFzaEdldFNpemUodm9pZCk7CisKKy8qKgorICogRXJhc2Ugb25lIGZsYXNoIHBhZ2UgdGhhdCBpbmNsdWRlIHRoZSBpbnB1dCBhZGRyZXNzLgorICogVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbi4gSXQgY2FuIHdvcmsgd2l0aCB1dGlsc0ZsYXNoU3RhdHVzV2FpdCB0byBjaGVjayB3aGVuIGVyYXNlIGlzIGRvbmUuCisgKgorICogVGhlIGZsYXNoIGFkZHJlc3Mgc3RhcnRzIGZyb20gMCwgYW5kIHRoaXMgZnVuY3Rpb24gbWFwcyB0aGUgaW5wdXQgYWRkcmVzcyB0byB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBmbGFzaCBmb3IgZXJhc2luZy4KKyAqIDAgaXMgYWx3YXlzIG1hcHBlZCB0byB0aGUgYmVnaW5uaW5nIG9mIG9uZSBmbGFzaCBwYWdlLgorICogVGhlIGlucHV0IGFkZHJlc3Mgc2hvdWxkIG5ldmVyIGJlIG1hcHBlZCB0byB0aGUgZmlybXdhcmUgc3BhY2Ugb3IgYW55IG90aGVyIHByb3RlY3RlZCBmbGFzaCBzcGFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGZsYXNoIHRvIGVyYXNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgRXJhc2UgZmxhc2ggb3BlcmF0aW9uIGlzIHN0YXJ0ZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgIEVyYXNlIGZsYXNoIG9wZXJhdGlvbiBpcyBub3Qgc3RhcnRlZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgIGFBZGRyZXNzIGlzIG91dCBvZiByYW5nZSBvZiBmbGFzaCBvciBub3QgYWxpZ2VuZC4KKyAqLworb3RFcnJvciB1dGlsc0ZsYXNoRXJhc2VQYWdlKHVpbnQzMl90IGFBZGRyZXNzKTsKKworLyoqCisgICogQ2hlY2sgd2hldGhlciBmbGFzaCBpcyByZWFkeSBvciBidXN5LgorICAqCisgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgd2FpdGluZyBmb3IgdGhlIGZsYXNoIG9wZXJhdGlvbiB0byBiZSBkb25lIGFuZCBiZWNvbWUgcmVhZHkgYWdhaW4uCisgICogICAgICAgICAgICAgICAgICAgICAgIHplcm8gaW5kaWNhdGVzIHRoYXQgaXQgaXMgYSBwb2xsaW5nIGZ1bmN0aW9uLCBhbmQgcmV0dXJucyBjdXJyZW50IHN0YXR1cyBvZiBmbGFzaCBpbW1lZGlhdGVseS4KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgbm9uLXplcm8gaW5kaWNhdGVzIHRoYXQgaXQgaXMgYmxvY2tpbmcgdGhlcmUgdW50aWwgdGhlIG9wZXJhdGlvbiBpcyBkb25lIGFuZCBiZWNvbWUgcmVhZHksIG9yIHRpbWVvdXQgZXhwaXJlcy4KKyAgKgorICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgRmxhc2ggaXMgcmVhZHkgZm9yIGFueSBvcGVyYXRpb24uCisgICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgICBGbGFzaCBpcyBidXN5LgorICAqLworb3RFcnJvciB1dGlsc0ZsYXNoU3RhdHVzV2FpdCh1aW50MzJfdCBhVGltZW91dCk7CisKKy8qKgorICogV3JpdGUgZmxhc2guIFRoZSB3cml0ZSBvcGVyYXRpb24gb25seSBjbGVhcnMgYml0cywgYnV0IG5ldmVyIHNldCBiaXRzLgorICoKKyAqIFRoZSBmbGFzaCBhZGRyZXNzIHN0YXJ0cyBmcm9tIDAsIGFuZCB0aGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGlucHV0IGFkZHJlc3MgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZmxhc2ggZm9yIHdyaXRpbmcuCisgKiAwIGlzIGFsd2F5cyBtYXBwZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBvbmUgZmxhc2ggcGFnZS4KKyAqIFRoZSBpbnB1dCBhZGRyZXNzIHNob3VsZCBuZXZlciBiZSBtYXBwZWQgdG8gdGhlIGZpcm13YXJlIHNwYWNlIG9yIGFueSBvdGhlciBwcm90ZWN0ZWQgZmxhc2ggc3BhY2UuCisgKgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBmbGFzaCB0byB3cml0ZS4KKyAqIEBwYXJhbVtpbl0gIGFEYXRhICAgICBUaGUgcG9pbnRlciBvZiB0aGUgZGF0YSB0byB3cml0ZS4KKyAqIEBwYXJhbVtpbl0gIGFTaXplICAgICBUaGUgc2l6ZSBvZiB0aGUgZGF0YSB0byB3cml0ZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgYWN0dWFsIHNpemUgb2Ygb2N0ZXRzIHdyaXRlIHRvIGZsYXNoLgorICogICAgICAgICAgSXQgaXMgZXhwZWN0ZWQgdGhlIHNhbWUgYXMgYVNpemUsIGFuZCBtYXkgYmUgbGVzcyB0aGFuIGFTaXplLgorICogICAgICAgICAgMCBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgd3JvbmcgaGFwcGVucyB3aGVuIHdyaXRpbmcuCisgKi8KK3VpbnQzMl90IHV0aWxzRmxhc2hXcml0ZSh1aW50MzJfdCBhQWRkcmVzcywgdWludDhfdCAqYURhdGEsIHVpbnQzMl90IGFTaXplKTsKKworLyoqCisgKiBSZWFkIGZsYXNoLgorICoKKyAqIFRoZSBmbGFzaCBhZGRyZXNzIHN0YXJ0cyBmcm9tIDAsIGFuZCB0aGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGlucHV0IGFkZHJlc3MgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZmxhc2ggZm9yIHJlYWRpbmcuCisgKiAwIGlzIGFsd2F5cyBtYXBwZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBvbmUgZmxhc2ggcGFnZS4KKyAqIFRoZSBpbnB1dCBhZGRyZXNzIHNob3VsZCBuZXZlciBiZSBtYXBwZWQgdG8gdGhlIGZpcm13YXJlIHNwYWNlIG9yIGFueSBvdGhlciBwcm90ZWN0ZWQgZmxhc2ggc3BhY2UuCisgKgorICogQHBhcmFtW2luXSAgIGFBZGRyZXNzICBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmxhc2ggdG8gcmVhZC4KKyAqIEBwYXJhbVtPdXRdICBhRGF0YSAgICAgVGhlIHBvaW50ZXIgb2YgYnVmZmVyIGZvciByZWFkaW5nLgorICogQHBhcmFtW2luXSAgIGFTaXplICAgICBUaGUgc2l6ZSBvZiB0aGUgZGF0YSB0byByZWFkLgorICoKKyAqIEByZXR1cm5zIFRoZSBhY3R1YWwgc2l6ZSBvZiBvY3RldHMgcmVhZCB0byBidWZmZXIuCisgKiAgICAgICAgICBJdCBpcyBleHBlY3RlZCB0aGUgc2FtZSBhcyBhU2l6ZSwgYW5kIG1heSBiZSBsZXNzIHRoYW4gYVNpemUuCisgKiAgICAgICAgICAwIGluZGljYXRlcyB0aGF0IHNvbWV0aGluZyB3cm9uZyBoYXBwZW5zIHdoZW4gcmVhZGluZy4KKyAqLwordWludDMyX3QgdXRpbHNGbGFzaFJlYWQodWludDMyX3QgYUFkZHJlc3MsIHVpbnQ4X3QgKmFEYXRhLCB1aW50MzJfdCBhU2l6ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVVRJTFNfRkxBU0hfSApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcGxhdGZvcm1zL3V0aWxzL3NldHRpbmdzLmNwcCBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9zZXR0aW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExYzIyNQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL3BsYXRmb3Jtcy91dGlscy9zZXR0aW5ncy5jcHAKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9mIHNldHRpbmdzLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQtY29yZS1jb25maWcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQvdHlwZXMuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL3NldHRpbmdzLmgiCisKKyNpbmNsdWRlIDx1dGlscy9jb2RlX3V0aWxzLmg+CisKKyNpbmNsdWRlICJmbGFzaC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0KK3sKKyAgICBrQmxvY2tBZGRCZWdpbkZsYWcgPSAweDEsCisgICAga0Jsb2NrQWRkQ29tcGxldGVGbGFnID0gMHgwMiwKKyAgICBrQmxvY2tEZWxldGVGbGFnID0gMHgwNCwKKyAgICBrQmxvY2tJbmRleDBGbGFnID0gMHgwOCwKK307CisKK2VudW0KK3sKKyAgICBrU2V0dGluZ3NGbGFnU2l6ZSA9IDQsCisgICAga1NldHRpbmdzQmxvY2tEYXRhU2l6ZSA9IDI1NSwKKworICAgIGtTZXR0aW5nc0luU3dhcCA9IDB4YmU1Y2M1ZWYsCisgICAga1NldHRpbmdzSW5Vc2UgPSAweGJlNWNjNWVlLAorICAgIGtTZXR0aW5nc05vdFVzZSA9IDB4YmU1Y2M1ZWMsCit9OworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorc3RydWN0IHNldHRpbmdzQmxvY2sKK3sKKyAgICB1aW50MTZfdCBrZXk7CisgICAgdWludDE2X3QgZmxhZzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgcmVzZXJ2ZWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIEBkZWYgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUworICoKKyAqIFRoZSBiYXNlIGFkZHJlc3Mgb2Ygc2V0dGluZ3MuCisgKgorICovCisjaWZuZGVmIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1MKKyNkZWZpbmUgU0VUVElOR1NfQ09ORklHX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgzOTAwMAorI2VuZGlmICAvLyBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisgKgorICogVGhlIHBhZ2Ugc2l6ZSBvZiBzZXR0aW5ncy4KKyAqCisgKi8KKyNpZm5kZWYgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICAgICAgICAgICAgICAgICAgICAweDgwMAorI2VuZGlmICAvLyBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFCisKKy8qKgorICogQGRlZiBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0KKyAqCisgKiBUaGUgcGFnZSBudW1iZXIgb2Ygc2V0dGluZ3MuCisgKgorICovCisjaWZuZGVmIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorI2RlZmluZSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gICAgICAgICAgICAgICAgICAgICAyCisjZW5kaWYgIC8vIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTQorCitzdGF0aWMgdWludDMyX3Qgc1NldHRpbmdzQmFzZUFkZHJlc3M7CitzdGF0aWMgdWludDMyX3Qgc1NldHRpbmdzVXNlZFNpemU7CisKK3N0YXRpYyB1aW50MTZfdCBnZXRBbGlnbkxlbmd0aCh1aW50MTZfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIChsZW5ndGggKyAzKSAmIDB4ZmZmYzsKK30KKworc3RhdGljIHZvaWQgc2V0U2V0dGluZ3NGbGFnKHVpbnQzMl90IGFCYXNlLCB1aW50MzJfdCBhRmxhZykKK3sKKyAgICB1dGlsc0ZsYXNoV3JpdGUoYUJhc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmYUZsYWcpLCBzaXplb2YoYUZsYWcpKTsKK30KKworc3RhdGljIHZvaWQgaW5pdFNldHRpbmdzKHVpbnQzMl90IGFCYXNlLCB1aW50MzJfdCBhRmxhZykKK3sKKyAgICB1aW50MzJfdCBhZGRyZXNzID0gYUJhc2U7CisgICAgdWludDMyX3Qgc2V0dGluZ3NTaXplID0gU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNID4gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSAqIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAvIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkU7CisKKyAgICB3aGlsZSAoYWRkcmVzcyA8IChhQmFzZSArIHNldHRpbmdzU2l6ZSkpCisgICAgeworICAgICAgICB1dGlsc0ZsYXNoRXJhc2VQYWdlKGFkZHJlc3MpOworICAgICAgICB1dGlsc0ZsYXNoU3RhdHVzV2FpdCgxMDAwKTsKKyAgICAgICAgYWRkcmVzcyArPSBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFOworICAgIH0KKworICAgIHNldFNldHRpbmdzRmxhZyhhQmFzZSwgYUZsYWcpOworfQorCitzdGF0aWMgdWludDMyX3Qgc3dhcFNldHRpbmdzQmxvY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQzMl90IG9sZEJhc2UgPSBzU2V0dGluZ3NCYXNlQWRkcmVzczsKKyAgICB1aW50MzJfdCBzd2FwQWRkcmVzcyA9IG9sZEJhc2U7CisgICAgdWludDMyX3QgdXNlZFNpemUgPSBzU2V0dGluZ3NVc2VkU2l6ZTsKKyAgICB1aW50OF90IHBhZ2VOdW0gPSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU07CisgICAgdWludDMyX3Qgc2V0dGluZ3NTaXplID0gcGFnZU51bSA+IDEgPyBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICogcGFnZU51bSAvIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkU7CisKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBvdEVYUEVDVChwYWdlTnVtID4gMSk7CisKKyAgICBzU2V0dGluZ3NCYXNlQWRkcmVzcyA9IChzd2FwQWRkcmVzcyA9PSBTRVRUSU5HU19DT05GSUdfQkFTRV9BRERSRVNTKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3dhcEFkZHJlc3MgKyBzZXR0aW5nc1NpemUpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1M7CisKKyAgICBpbml0U2V0dGluZ3Moc1NldHRpbmdzQmFzZUFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQzMl90PihrU2V0dGluZ3NJblN3YXApKTsKKyAgICBzU2V0dGluZ3NVc2VkU2l6ZSA9IGtTZXR0aW5nc0ZsYWdTaXplOworICAgIHN3YXBBZGRyZXNzICs9IGtTZXR0aW5nc0ZsYWdTaXplOworCisgICAgd2hpbGUgKHN3YXBBZGRyZXNzIDwgKG9sZEJhc2UgKyB1c2VkU2l6ZSkpCisgICAgeworICAgICAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgICAgICBzdHJ1Y3QgYWRkU2V0dGluZ3NCbG9jaworICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKyAgICAgICAgICAgIHVpbnQ4X3QgZGF0YVtrU2V0dGluZ3NCbG9ja0RhdGFTaXplXTsKKyAgICAgICAgfSBPVF9UT09MX1BBQ0tFRF9FTkQgYWRkQmxvY2s7CisgICAgICAgIGJvb2wgdmFsaWQgPSB0cnVlOworCisgICAgICAgIHV0aWxzRmxhc2hSZWFkKHN3YXBBZGRyZXNzLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrLmJsb2NrKSwgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgICAgIHN3YXBBZGRyZXNzICs9IHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jayk7CisKKyAgICAgICAgaWYgKCEoYWRkQmxvY2suYmxvY2suZmxhZyAmIGtCbG9ja0FkZENvbXBsZXRlRmxhZykgJiYgKGFkZEJsb2NrLmJsb2NrLmZsYWcgJiBrQmxvY2tEZWxldGVGbGFnKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgYWRkcmVzcyA9IHN3YXBBZGRyZXNzICsgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKTsKKworICAgICAgICAgICAgd2hpbGUgKGFkZHJlc3MgPCAob2xkQmFzZSArIHVzZWRTaXplKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKworICAgICAgICAgICAgICAgIHV0aWxzRmxhc2hSZWFkKGFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmYmxvY2spLCBzaXplb2YoYmxvY2spKTsKKworICAgICAgICAgICAgICAgIGlmICghKGJsb2NrLmZsYWcgJiBrQmxvY2tBZGRDb21wbGV0ZUZsYWcpICYmIChibG9jay5mbGFnICYga0Jsb2NrRGVsZXRlRmxhZykgJiYKKyAgICAgICAgICAgICAgICAgICAgIShibG9jay5mbGFnICYga0Jsb2NrSW5kZXgwRmxhZykgJiYgKGJsb2NrLmtleSA9PSBhZGRCbG9jay5ibG9jay5rZXkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYWRkcmVzcyArPSAoZ2V0QWxpZ25MZW5ndGgoYmxvY2subGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXRpbHNGbGFzaFJlYWQoc3dhcEFkZHJlc3MsIGFkZEJsb2NrLmRhdGEsIGdldEFsaWduTGVuZ3RoKGFkZEJsb2NrLmJsb2NrLmxlbmd0aCkpOworICAgICAgICAgICAgICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykpOworICAgICAgICAgICAgICAgIHNTZXR0aW5nc1VzZWRTaXplICs9IChzaXplb2Yoc3RydWN0IHNldHRpbmdzQmxvY2spICsgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWRkQmxvY2suYmxvY2suZmxhZyA9PSAweGZmKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3YXBBZGRyZXNzICs9IGdldEFsaWduTGVuZ3RoKGFkZEJsb2NrLmJsb2NrLmxlbmd0aCk7CisgICAgfQorCisgICAgc2V0U2V0dGluZ3NGbGFnKHNTZXR0aW5nc0Jhc2VBZGRyZXNzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1NldHRpbmdzSW5Vc2UpKTsKKyAgICBzZXRTZXR0aW5nc0ZsYWcob2xkQmFzZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtTZXR0aW5nc05vdFVzZSkpOworCitleGl0OgorICAgIHJldHVybiBzZXR0aW5nc1NpemUgLSBzU2V0dGluZ3NVc2VkU2l6ZTsKK30KKworc3RhdGljIG90RXJyb3IgYWRkU2V0dGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGJvb2wgYUluZGV4MCwgY29uc3QgdWludDhfdCAqYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyAgICBzdHJ1Y3QgYWRkU2V0dGluZ3NCbG9jaworICAgIHsKKyAgICAgICAgc3RydWN0IHNldHRpbmdzQmxvY2sgYmxvY2s7CisgICAgICAgIHVpbnQ4X3QgZGF0YVtrU2V0dGluZ3NCbG9ja0RhdGFTaXplXTsKKyAgICB9IE9UX1RPT0xfUEFDS0VEX0VORCBhZGRCbG9jazsKKyAgICB1aW50MzJfdCBzZXR0aW5nc1NpemUgPSBTRVRUSU5HU19DT05GSUdfUEFHRV9OVU0gPiAxID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRUSU5HU19DT05GSUdfUEFHRV9TSVpFICogU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNIC8gMiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRTsKKworICAgIGFkZEJsb2NrLmJsb2NrLmZsYWcgPSAweGZmOworICAgIGFkZEJsb2NrLmJsb2NrLmtleSA9IGFLZXk7CisKKyAgICBpZiAoYUluZGV4MCkKKyAgICB7CisgICAgICAgIGFkZEJsb2NrLmJsb2NrLmZsYWcgJj0gKH5rQmxvY2tJbmRleDBGbGFnKTsKKyAgICB9CisKKyAgICBhZGRCbG9jay5ibG9jay5mbGFnICY9ICh+a0Jsb2NrQWRkQmVnaW5GbGFnKTsKKyAgICBhZGRCbG9jay5ibG9jay5sZW5ndGggPSBhVmFsdWVMZW5ndGg7CisKKyAgICBpZiAoKHNTZXR0aW5nc1VzZWRTaXplICsgZ2V0QWxpZ25MZW5ndGgoYWRkQmxvY2suYmxvY2subGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykpID49CisgICAgICAgIHNldHRpbmdzU2l6ZSkKKyAgICB7CisgICAgICAgIG90RVhQRUNUX0FDVElPTihzd2FwU2V0dGluZ3NCbG9jayhhSW5zdGFuY2UpID49IChnZXRBbGlnbkxlbmd0aChhZGRCbG9jay5ibG9jay5sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSksCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIH0KKworICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisKKyAgICBtZW1zZXQoYWRkQmxvY2suZGF0YSwgMHhmZiwga1NldHRpbmdzQmxvY2tEYXRhU2l6ZSk7CisgICAgbWVtY3B5KGFkZEJsb2NrLmRhdGEsIGFWYWx1ZSwgYWRkQmxvY2suYmxvY2subGVuZ3RoKTsKKworICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGFkZEJsb2NrLmRhdGEpLCBnZXRBbGlnbkxlbmd0aChhZGRCbG9jay5ibG9jay5sZW5ndGgpKTsKKworICAgIGFkZEJsb2NrLmJsb2NrLmZsYWcgJj0gKH5rQmxvY2tBZGRDb21wbGV0ZUZsYWcpOworICAgIHV0aWxzRmxhc2hXcml0ZShzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFkZEJsb2NrLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgc1NldHRpbmdzVXNlZFNpemUgKz0gKHNpemVvZihzdHJ1Y3Qgc2V0dGluZ3NCbG9jaykgKyBnZXRBbGlnbkxlbmd0aChhZGRCbG9jay5ibG9jay5sZW5ndGgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIHNldHRpbmdzIEFQSQordm9pZCBvdFBsYXRTZXR0aW5nc0luaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHVpbnQ4X3QgaW5kZXg7CisgICAgdWludDMyX3Qgc2V0dGluZ3NTaXplID0gU0VUVElOR1NfQ09ORklHX1BBR0VfTlVNID4gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUVElOR1NfQ09ORklHX1BBR0VfU0laRSAqIFNFVFRJTkdTX0NPTkZJR19QQUdFX05VTSAvIDIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFRJTkdTX0NPTkZJR19QQUdFX1NJWkU7CisKKyAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICBzU2V0dGluZ3NCYXNlQWRkcmVzcyA9IFNFVFRJTkdTX0NPTkZJR19CQVNFX0FERFJFU1M7CisKKyAgICB1dGlsc0ZsYXNoSW5pdCgpOworCisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGJsb2NrRmxhZzsKKworICAgICAgICBzU2V0dGluZ3NCYXNlQWRkcmVzcyArPSBzZXR0aW5nc1NpemUgKiBpbmRleDsKKyAgICAgICAgdXRpbHNGbGFzaFJlYWQoc1NldHRpbmdzQmFzZUFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmYmxvY2tGbGFnKSwgc2l6ZW9mKGJsb2NrRmxhZykpOworCisgICAgICAgIGlmIChibG9ja0ZsYWcgPT0ga1NldHRpbmdzSW5Vc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4ID09IDIpCisgICAgeworICAgICAgICBpbml0U2V0dGluZ3Moc1NldHRpbmdzQmFzZUFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQzMl90PihrU2V0dGluZ3NJblVzZSkpOworICAgIH0KKworICAgIHNTZXR0aW5nc1VzZWRTaXplID0ga1NldHRpbmdzRmxhZ1NpemU7CisKKyAgICB3aGlsZSAoc1NldHRpbmdzVXNlZFNpemUgPCBzZXR0aW5nc1NpemUpCisgICAgeworICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKworICAgICAgICB1dGlsc0ZsYXNoUmVhZChzU2V0dGluZ3NCYXNlQWRkcmVzcyArIHNTZXR0aW5nc1VzZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmJsb2NrKSwgc2l6ZW9mKGJsb2NrKSk7CisKKyAgICAgICAgaWYgKCEoYmxvY2suZmxhZyAmIGtCbG9ja0FkZEJlZ2luRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTZXR0aW5nc1VzZWRTaXplICs9IChnZXRBbGlnbkxlbmd0aChibG9jay5sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAodm9pZClhSW5zdGFuY2U7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0FiYW5kb25DaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0dldChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGludCBhSW5kZXgsIHVpbnQ4X3QgKmFWYWx1ZSwgdWludDE2X3QgKmFWYWx1ZUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIHVpbnQzMl90IGFkZHJlc3MgPSBzU2V0dGluZ3NCYXNlQWRkcmVzcyArIGtTZXR0aW5nc0ZsYWdTaXplOworICAgIHVpbnQxNl90IHZhbHVlTGVuZ3RoID0gMDsKKyAgICBpbnQgaW5kZXggPSAwOworCisgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgd2hpbGUgKGFkZHJlc3MgPCAoc1NldHRpbmdzQmFzZUFkZHJlc3MgKyBzU2V0dGluZ3NVc2VkU2l6ZSkpCisgICAgeworICAgICAgICBzdHJ1Y3Qgc2V0dGluZ3NCbG9jayBibG9jazsKKworICAgICAgICB1dGlsc0ZsYXNoUmVhZChhZGRyZXNzLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmJsb2NrKSwgc2l6ZW9mKGJsb2NrKSk7CisKKyAgICAgICAgaWYgKGJsb2NrLmtleSA9PSBhS2V5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShibG9jay5mbGFnICYga0Jsb2NrSW5kZXgwRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShibG9jay5mbGFnICYga0Jsb2NrQWRkQ29tcGxldGVGbGFnKSAmJiAoYmxvY2suZmxhZyAmIGtCbG9ja0RlbGV0ZUZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBhSW5kZXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCByZWFkTGVuZ3RoID0gYmxvY2subGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcGVyZm9ybSByZWFkIGlmIGFuIGlucHV0IGJ1ZmZlciB3YXMgcGFzc2VkIGluCisgICAgICAgICAgICAgICAgICAgIGlmIChhVmFsdWUgIT0gTlVMTCAmJiBhVmFsdWVMZW5ndGggIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRqdXN0IHJlYWQgbGVuZ3RoIGlmIGlucHV0IGJ1ZmZlciBsZW5ndGggaXMgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRMZW5ndGggPiAqYVZhbHVlTGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRMZW5ndGggPSAqYVZhbHVlTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsc0ZsYXNoUmVhZChhZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSwgYVZhbHVlLCByZWFkTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoID0gYmxvY2subGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFkZHJlc3MgKz0gKGdldEFsaWduTGVuZ3RoKGJsb2NrLmxlbmd0aCkgKyBzaXplb2Yoc3RydWN0IHNldHRpbmdzQmxvY2spKTsKKyAgICB9CisKKyAgICBpZiAoYVZhbHVlTGVuZ3RoICE9IE5VTEwpCisgICAgeworICAgICAgICAqYVZhbHVlTGVuZ3RoID0gdmFsdWVMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90UGxhdFNldHRpbmdzU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgcmV0dXJuIGFkZFNldHRpbmcoYUluc3RhbmNlLCBhS2V5LCB0cnVlLCBhVmFsdWUsIGFWYWx1ZUxlbmd0aCk7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NBZGQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCkKK3sKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgYm9vbCBpbmRleDA7CisKKyAgICBpbmRleDAgPSAob3RQbGF0U2V0dGluZ3NHZXQoYUluc3RhbmNlLCBhS2V5LCAwLCBOVUxMLCAmbGVuZ3RoKSA9PSBPVF9FUlJPUl9OT1RfRk9VTkQgPyB0cnVlIDogZmFsc2UpOworICAgIHJldHVybiBhZGRTZXR0aW5nKGFJbnN0YW5jZSwgYUtleSwgaW5kZXgwLCBhVmFsdWUsIGFWYWx1ZUxlbmd0aCk7Cit9CisKK290RXJyb3Igb3RQbGF0U2V0dGluZ3NEZWxldGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgdWludDMyX3QgYWRkcmVzcyA9IHNTZXR0aW5nc0Jhc2VBZGRyZXNzICsga1NldHRpbmdzRmxhZ1NpemU7CisgICAgaW50IGluZGV4ID0gMDsKKworICAgICh2b2lkKWFJbnN0YW5jZTsKKworICAgIHdoaWxlIChhZGRyZXNzIDwgKHNTZXR0aW5nc0Jhc2VBZGRyZXNzICsgc1NldHRpbmdzVXNlZFNpemUpKQorICAgIHsKKyAgICAgICAgc3RydWN0IHNldHRpbmdzQmxvY2sgYmxvY2s7CisKKyAgICAgICAgdXRpbHNGbGFzaFJlYWQoYWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZibG9jayksIHNpemVvZihibG9jaykpOworCisgICAgICAgIGlmIChibG9jay5rZXkgPT0gYUtleSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEoYmxvY2suZmxhZyAmIGtCbG9ja0luZGV4MEZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCEoYmxvY2suZmxhZyAmIGtCbG9ja0FkZENvbXBsZXRlRmxhZykgJiYgKGJsb2NrLmZsYWcgJiBrQmxvY2tEZWxldGVGbGFnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYUluZGV4ID09IGluZGV4IHx8IGFJbmRleCA9PSAtMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suZmxhZyAmPSAofmtCbG9ja0RlbGV0ZUZsYWcpOworICAgICAgICAgICAgICAgICAgICB1dGlsc0ZsYXNoV3JpdGUoYWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZibG9jayksIHNpemVvZihibG9jaykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAxICYmIGFJbmRleCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suZmxhZyAmPSAofmtCbG9ja0luZGV4MEZsYWcpOworICAgICAgICAgICAgICAgICAgICB1dGlsc0ZsYXNoV3JpdGUoYWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZibG9jayksIHNpemVvZihibG9jaykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhZGRyZXNzICs9IChnZXRBbGlnbkxlbmd0aChibG9jay5sZW5ndGgpICsgc2l6ZW9mKHN0cnVjdCBzZXR0aW5nc0Jsb2NrKSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90UGxhdFNldHRpbmdzV2lwZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgaW5pdFNldHRpbmdzKHNTZXR0aW5nc0Jhc2VBZGRyZXNzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1NldHRpbmdzSW5Vc2UpKTsKKyAgICBvdFBsYXRTZXR0aW5nc0luaXQoYUluc3RhbmNlKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL01ha2VmaWxlLmFtIGIvaW5jbHVkZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTYzYmViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIG9wZW50aHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQtd2luZG93cy1jb25maWcuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC13aW5kb3dzLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OWI5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQtd2luZG93cy1jb25maWcuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBOQ1AgVUFSVCBpbnRlcmZhY2UuICovCisvLyBPbiB0aGUgY29tbWFuZCBsaW5lOiAjZGVmaW5lIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUIDAKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBOQ1AgU1BJIGludGVyZmFjZS4gKi8KKy8vIE9uIHRoZSBjb21tYW5kIGxpbmU6ICNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSSAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgT3BlblRocmVhZAorICAgaW5zdGFuY2VzLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZGVmYXVsdCBsb2cgb3V0cHV0LiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUIDEKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBjb21taXNzaW9uZXIgcm9sZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gdXNlIGRpYWdub3N0aWNzIG1vZHVsZSAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHIDAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGxlZ2FjeSBuZXR3b3JrLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kgMAorCisvKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZHRscyBzdXBwb3J0LiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9EVExTIDEKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBqb2luZXIgcm9sZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSIDEKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHRoZSBqYW0gZGV0ZWN0aW9uLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OIDAKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIERIQ1B2NiBDbGllbnQuICovCisjZGVmaW5lIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVCAxCisKKy8qIERlZmluZSB0byAxIHRvIGVuYWJsZSBESENQdjYgU0VSVkVSLiAqLworI2RlZmluZSBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIgMQorCisvKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgTUFDIHdoaXRlbGlzdC9ibGFja2xpc3QgZmVhdHVyZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVCAxCisKKy8qIERlZmluZSB0byAxIHRvIGVuYWJsZSBUTUYgcHJveHkgZmVhdHVyZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZIDAKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHJhdyBsaW5rLWxheWVyIEFQSS4gKi8KKyNpZmRlZiBfS0VSTkVMX01PREUKKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJIDAKKyNlbHNlCisjZGVmaW5lIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSSAxCisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIEJvcmRlciBSb3V0ZXIgZmVhdHVyZS4gKi8KKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUiAxCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJvcGVudGhyZWFkIgorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIm9wZW50aHJlYWQtZGV2ZWxAZ29vZ2xlZ3JvdXBzLmNvbSIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgIk9QRU5USFJFQUQiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIk9QRU5USFJFQUQgMC4wMS4wMCIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIm9wZW50aHJlYWQiCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVVJMICJodHRwOi8vZ2l0aHViLmNvbS9vcGVudGhyZWFkL29wZW50aHJlYWQiCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMC4wMS4wMCIKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI2RlZmluZSBWRVJTSU9OICIwLjAxLjAwIgorCisvKiBQbGF0Zm9ybSB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBMQVRGT1JNX0lORk8gIldpbmRvd3MiCisKKy8vIFdpbmRvd3MgS2VybmVsIG9ubHkgaGFzIHNwcmludGZfcworI2lmZGVmIF9LRVJORUxfTU9ERQorI2RlZmluZSBzbnByaW50ZiBzcHJpbnRmX3MKKyNlbmRpZiAvLyBfS0VSTkVMX01PREUKKworLy8gUmVkZWZpbmUgcmFuZCB0byByYW5kb20gZm9yIHRlc3QgY29kZQorI2RlZmluZSByYW5kb20gcmFuZAorCisvLyBEaXNhYmxlIGEgZmV3IHdhcm5pbmdzIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMCkgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkOiB6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMSkgIC8vIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkIDogbmFtZWxlc3Mgc3RydWN0L3VuaW9uCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjkxKSAgLy8gbm8gbWF0Y2hpbmcgb3BlcmF0b3IgZGVsZXRlIGZvdW5kCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0ODE1KSAgLy8gemVyby1zaXplZCBhcnJheSBpbiBzdGFjayBvYmplY3Qgd2lsbCBoYXZlIG5vIGVsZW1lbnRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvTWFrZWZpbGUuYW0gYi9pbmNsdWRlL29wZW50aHJlYWQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjN2I5MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDkwIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvcGVudGhyZWFkX2hlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2hpbGRfc3VwZXJ2aXNpb24uaCAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbWlzc2lvbmVyLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY3J5cHRvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYm9yZGVyX3JvdXRlci5oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGF0YXNldC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGF0YXNldF9mdGQuaCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGlhZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGhjcDZfY2xpZW50LmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGhjcDZfc2VydmVyLmggICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG5zLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWNtcDYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5zdGFuY2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaXA2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgamFtX2RldGVjdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgam9pbmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbGluay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbGlua19yYXcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWVzc2FnZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0ZGF0YS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgb3BlbnRocmVhZC5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGFza2xldC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkX2Z0ZC5oICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdG1mX3Byb3h5LmggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWRwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitvcGVudGhyZWFkZGlyID0gJChpbmNsdWRlZGlyKS9vcGVudGhyZWFkCitkaXN0X29wZW50aHJlYWRfSEVBREVSUyA9ICQob3BlbnRocmVhZF9oZWFkZXJzKQorCitpbmNsdWRlX0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg3MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBCb3JkZXIgUm91dGVyIEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQk9SREVSX1JPVVRFUl9IXworI2RlZmluZSBPUEVOVEhSRUFEX0JPUkRFUl9ST1VURVJfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1ib3JkZXItcm91dGVyCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGZ1bGwgb3Igc3RhYmxlIGNvcHkgb2YgdGhlIGxvY2FsIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgICAgYVN0YWJsZSAgICAgIFRSVUUgd2hlbiBjb3B5aW5nIHRoZSBzdGFibGUgdmVyc2lvbiwgRkFMU0Ugd2hlbiBjb3B5aW5nIHRoZSBmdWxsIHZlcnNpb24uCisgKiBAcGFyYW1bb3V0XSAgICBhRGF0YSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbm91dF0gIGFEYXRhTGVuZ3RoICBPbiBlbnRyeSwgc2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0byBieSBAcCBhRGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBleGl0LCBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlckdldE5ldERhdGEob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFTdGFibGUsIHVpbnQ4X3QgKmFEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFEYXRhTGVuZ3RoKTsKKworLyoqCisgKiBBZGQgYSBib3JkZXIgcm91dGVyIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ29uZmlnICAgQSBwb2ludGVyIHRvIHRoZSBib3JkZXIgcm91dGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgY29uZmlndXJhdGlvbiB0byB0aGUgbG9jYWwgbmV0d29yayBkYXRhLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIE9uZSBvciBtb3JlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZXJlIGludmFsaWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgTm90IGVub3VnaCByb29tIGlzIGF2YWlsYWJsZSB0byBhZGQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgKKyAqIEBzYSBvdEJvcmRlclJvdXRlclJlZ2lzdGVyCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Qm9yZGVyUm91dGVyQWRkT25NZXNoUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIFJlbW92ZSBhIGJvcmRlciByb3V0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVByZWZpeCAgIEEgcG9pbnRlciB0byBhbiBJUHY2IHByZWZpeC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJBZGRPbk1lc2hQcmVmaXgKKyAqIEBzYSBvdEJvcmRlclJvdXRlclJlZ2lzdGVyCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Qm9yZGVyUm91dGVyUmVtb3ZlT25NZXNoUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBPbiBNZXNoIFByZWZpeCBpbiB0aGUgbG9jYWwgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3Qgb24tbWVzaCBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgYmUgc2V0IHRvIE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklULgorICogQHBhcmFtW291dF0gICAgYUNvbmZpZyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIE9uIE1lc2ggUHJlZml4IGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgT24gTWVzaCBwcmVmaXguCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTm8gc3Vic2VxdWVudCBPbiBNZXNoIHByZWZpeCBleGlzdHMgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlckdldE5leHRPbk1lc2hQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZyk7CisKKy8qKgorICogQWRkIGFuIGV4dGVybmFsIHJvdXRlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ29uZmlnICAgQSBwb2ludGVyIHRvIHRoZSBleHRlcm5hbCByb3V0ZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBPbmUgb3IgbW9yZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2VyZSBpbnZhbGlkLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIE5vdCBlbm91Z2ggcm9vbSBpcyBhdmFpbGFibGUgdG8gYWRkIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoZSBsb2NhbCBuZXR3b3JrIGRhdGEuCisgKgorICogQHNhIG90Qm9yZGVyUm91dGVyUmVtb3ZlUm91dGUKKyAqIEBzYSBvdEJvcmRlclJvdXRlclJlZ2lzdGVyCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Qm9yZGVyUm91dGVyQWRkUm91dGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIFJlbW92ZSBhbiBleHRlcm5hbCByb3V0ZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIGxvY2FsIG5ldHdvcmsgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUHJlZml4ICAgQSBwb2ludGVyIHRvIGFuIElQdjYgcHJlZml4LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbG9jYWwgbmV0d29yayBkYXRhLgorICoKKyAqIEBzYSBvdEJvcmRlclJvdXRlckFkZFJvdXRlCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlclJlbW92ZVJvdXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZQcmVmaXggKmFQcmVmaXgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZSBpbiB0aGUgbG9jYWwgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3QgZXh0ZXJuYWwgcm91dGUgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHNldCB0byBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVC4KKyAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFeHRlcm5hbCBSb3V0ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBuZXh0IEV4dGVybmFsIFJvdXRlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgZXh0ZXJuYWwgcm91dGUgZW50cnkgZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqLworb3RFcnJvciBvdEJvcmRlclJvdXRlckdldE5leHRSb3V0ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIEltbWVkaWF0ZWx5IHJlZ2lzdGVyIHRoZSBsb2NhbCBuZXR3b3JrIGRhdGEgd2l0aCB0aGUgTGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHF1ZXVlZCBhIFNlcnZlciBEYXRhIFJlcXVlc3QgbWVzc2FnZSBmb3IgZGVsaXZlcnkuCisgKgorICogQHNhIG90Qm9yZGVyUm91dGVyQWRkT25NZXNoUHJlZml4CisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgKKyAqIEBzYSBvdEJvcmRlclJvdXRlckFkZFJvdXRlCisgKiBAc2Egb3RCb3JkZXJSb3V0ZXJSZW1vdmVSb3V0ZQorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEJvcmRlclJvdXRlclJlZ2lzdGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0JPUkRFUl9ST1VURVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jaGlsZF9zdXBlcnZpc2lvbi5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2NoaWxkX3N1cGVydmlzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3YzUzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9jaGlsZF9zdXBlcnZpc2lvbi5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBPZW5UaHJlYWQgQVBJIGZvciBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NISUxEX1NVUEVSVklTSU9OX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ0hJTERfU1VQRVJWSVNJT05fSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLWNoaWxkLXN1cGVydmlzaW9uCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgY2hpbGQgc3VwZXJ2aXNpb24gZmVhdHVyZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCB0aGUgY2hpbGQgc3VwZXJ2aXNpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpLgorICoKKyAqIENoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHBhcmVudCB0byBlbnN1cmUgdGhhdCBhIG1lc3NhZ2UgaXMgc2VudCB0byBlYWNoIHNsZWVweSBjaGlsZAorICogd2l0aGluIHRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbC4gSWYgdGhlcmUgaXMgbm8gdHJhbnNtaXNzaW9uIHRvIHRoZSBjaGlsZCB3aXRoaW4gdGhlIHN1cGVydmlzaW9uIGludGVydmFsLAorICogT3BlblRocmVhZCB3aWxsIGVucXVldWUgYW5kIHNlbmQgYSBzdXBlcnZpc2lvbiBtZXNzYWdlIChhIGRhdGEgbWVzc2FnZSB3aXRoIGVtcHR5IHBheWxvYWQpIHRvIHRoZSBjaGlsZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgIFRoZSBjaGlsZCBzdXBlcnZpc2lvbiBpbnRlcnZhbC4gWmVybyBpbmRpY2F0ZXMgdGhhdCBjaGlsZCBzdXBlcnZpc2lvbiBpcyBkaXNhYmxlZC4KKyAqCisgKi8KK3VpbnQxNl90IG90Q2hpbGRTdXBlcnZpc2lvbkdldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBjaGlsZCBzdXBlcnZpc2lvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUludGVydmFsICAgICAgIFRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykuIFplcm8gdG8gZGlzYWJsZSBzdXBlcnZpc2lvbiBvbiBwYXJlbnQuCisgKgorICovCit2b2lkIG90Q2hpbGRTdXBlcnZpc2lvblNldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUludGVydmFsKTsKKworLyoqCisgKiBHZXQgdGhlIHN1cGVydmlzaW9uIGNoZWNrIHRpbWVvdXQgaW50ZXJ2YWwgKGluIHNlY29uZHMpLgorICoKKyAqIElmIHRoZSBkZXZpY2UgaXMgYSBzbGVlcHkgY2hpbGQgYW5kIGl0IGRvZXMgbm90IGhlYXIgZnJvbSBpdHMgcGFyZW50IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNoZWNrIHRpbWVvdXQsIGl0IGluaXRpYXRlcworICogdGhlIHJlLWF0dGFjaCBwcm9jZXNzIChNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2Ugd2l0aCBpdHMgcGFyZW50KS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgIFRoZSBzdXBlcnZpc2lvbiBjaGVjayB0aW1lb3V0LiBaZXJvIGluZGljYXRlcyB0aGF0IHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZCBpcyBkaXNhYmxlZC4KKyAqCisgKi8KK3VpbnQxNl90IG90Q2hpbGRTdXBlcnZpc2lvbkdldENoZWNrVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgc3VwZXJ2aXNpb24gY2hlY2sgdGltZW91dCBpbnRlcnZhbCAoaW4gc2Vjb25kcykuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVRpbWVvdXQgICAgICAgIFRoZSBjaGVjayB0aW1lb3V0IChpbiBzZWNvbmRzKS4gWmVybyB0byBkaXNhYmxlIHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZC4KKyAqCisgKi8KK3ZvaWQgb3RDaGlsZFN1cGVydmlzaW9uU2V0Q2hlY2tUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVRpbWVvdXQpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NISUxEX1NVUEVSVklTSU9OX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvY2xpLmggYi9pbmNsdWRlL29wZW50aHJlYWQvY2xpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkMGE0NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9jbGkuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBmdW5jdGlvbnMgZm9yIHRoZSBPcGVuVGhyZWFkIENMSSBzZXJ2ZXIuCisgKi8KKworI2lmbmRlZiBDTElfSF8KKyNkZWZpbmUgQ0xJX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1jbGkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29udHJvbCB0aGUgVGhyZWFkIHN0YWNrJ3MgZXhlY3V0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB0byBub3RpZnkgYWJvdXQgQ29uc29sZSBvdXRwdXQuCisgKgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHdpdGggYW4gb3V0cHV0LgorICogQHBhcmFtW2luXSAgYUJ1Zkxlbmd0aCAgQSBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyLgorICogQHBhcmFtW291dF0gYUNvbnRleHQgICAgQSB1c2VyIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKiBAcmV0dXJucyAgICAgICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkIGJ5IHRoZSBjYWxsYmFjay4KKyAqCisgKi8KK3R5cGVkZWYgaW50ICgqb3RDbGlDb25zb2xlT3V0cHV0Q2FsbGJhY2spKGNvbnN0IGNoYXIgKmFCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQnVmTGVuZ3RoLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgQ0xJIENPTlNPTEUgbW9kdWxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgIEEgY2FsbGJhY2sgbWV0aG9kIGNhbGxlZCB0byBwcm9jZXNzIGNvbnNvbGUgb3V0cHV0LgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgQSB1c2VyIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKi8KK3ZvaWQgb3RDbGlDb25zb2xlSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90Q2xpQ29uc29sZU91dHB1dENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBmZWVkIGluIGEgY29uc29sZSBpbnB1dCBsaW5lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB3aXRoIGFuIGlucHV0LgorICogQHBhcmFtW2luXSAgYUJ1Zkxlbmd0aCAgQSBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIuCisgKgorICovCit2b2lkIG90Q2xpQ29uc29sZUlucHV0TGluZShjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBDTEkgVUFSVCBtb2R1bGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIG90Q2xpVWFydEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jb2FwLmggYi9pbmNsdWRlL29wZW50aHJlYWQvY29hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOWRjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvY29hcC5oCkBAIC0wLDAgKzEsNTUyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdG9wLWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5UaHJlYWQgQ29BUCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09BUF9IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPQVBfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1jb2FwCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgQ29BUCBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKyNkZWZpbmUgT1RfREVGQVVMVF9DT0FQX1BPUlQgIDU2ODMgIC8vLzwgRGVmYXVsdCBDb0FQIHBvcnQsIGFzIHNwZWNpZmllZCBpbiBSRkMgNzI1MgorCisvKioKKyAqIENvQVAgVHlwZSB2YWx1ZXMuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RDb2FwVHlwZQoreworICAgIE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSAgICAgPSAweDAwLCAgLy8vPCBDb25maXJtYWJsZQorICAgIE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUgPSAweDEwLCAgLy8vPCBOb24tY29uZmlybWFibGUKKyAgICBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQgID0gMHgyMCwgIC8vLzwgQWNrbm93bGVkZ21lbnQKKyAgICBPVF9DT0FQX1RZUEVfUkVTRVQgICAgICAgICAgID0gMHgzMCwgIC8vLzwgUmVzZXQKK30gb3RDb2FwVHlwZTsKKworLyoqCisgKiBIZWxwZXIgbWFjcm8gdG8gZGVmaW5lIENvQVAgQ29kZSB2YWx1ZXMuCisgKgorICovCisjZGVmaW5lIE9UX0NPQVBfQ09ERShjLCBkKSAoKCgoYykgJiAweDcpIDw8IDUpIHwgKChkKSAmIDB4MWYpKQorCisvKioKKyAqIENvQVAgQ29kZSB2YWx1ZXMuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RDb2FwQ29kZQoreworICAgIE9UX0NPQVBfQ09ERV9FTVBUWSAgICAgICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDAsIDApLCAgLy8vPCBFbXB0eSBtZXNzYWdlIGNvZGUKKyAgICBPVF9DT0FQX0NPREVfR0VUICAgICAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgwLCAxKSwgIC8vLzwgR2V0CisgICAgT1RfQ09BUF9DT0RFX1BPU1QgICAgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMCwgMiksICAvLy88IFBvc3QKKyAgICBPVF9DT0FQX0NPREVfUFVUICAgICAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgwLCAzKSwgIC8vLzwgUHV0CisgICAgT1RfQ09BUF9DT0RFX0RFTEVURSAgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMCwgNCksICAvLy88IERlbGV0ZQorCisgICAgT1RfQ09BUF9DT0RFX1JFU1BPTlNFX01JTiAgICAgICAgPSBPVF9DT0FQX0NPREUoMiwgMCksICAvLy88IDIuMDAKKyAgICBPVF9DT0FQX0NPREVfQ1JFQVRFRCAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgyLCAxKSwgIC8vLzwgQ3JlYXRlZAorICAgIE9UX0NPQVBfQ09ERV9ERUxFVEVEICAgICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDIsIDIpLCAgLy8vPCBEZWxldGVkCisgICAgT1RfQ09BUF9DT0RFX1ZBTElEICAgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMiwgMyksICAvLy88IFZhbGlkCisgICAgT1RfQ09BUF9DT0RFX0NIQU5HRUQgICAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoMiwgNCksICAvLy88IENoYW5nZWQKKyAgICBPVF9DT0FQX0NPREVfQ09OVEVOVCAgICAgICAgICAgICA9IE9UX0NPQVBfQ09ERSgyLCA1KSwgIC8vLzwgQ29udGVudAorCisgICAgT1RfQ09BUF9DT0RFX0JBRF9SRVFVRVNUICAgICAgICAgPSBPVF9DT0FQX0NPREUoNCwgMCksICAvLy88IEJhZCBSZXF1ZXN0CisgICAgT1RfQ09BUF9DT0RFX1VOQVVUSE9SSVpFRCAgICAgICAgPSBPVF9DT0FQX0NPREUoNCwgMSksICAvLy88IFVuYXV0aG9yaXplZAorICAgIE9UX0NPQVBfQ09ERV9CQURfT1BUSU9OICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDQsIDIpLCAgLy8vPCBCYWQgT3B0aW9uCisgICAgT1RfQ09BUF9DT0RFX0ZPUkJJRERFTiAgICAgICAgICAgPSBPVF9DT0FQX0NPREUoNCwgMyksICAvLy88IEZvcmJpZGRlbgorICAgIE9UX0NPQVBfQ09ERV9OT1RfRk9VTkQgICAgICAgICAgID0gT1RfQ09BUF9DT0RFKDQsIDQpLCAgLy8vPCBOb3QgRm91bmQKKyAgICBPVF9DT0FQX0NPREVfTUVUSE9EX05PVF9BTExPV0VEICA9IE9UX0NPQVBfQ09ERSg0LCA1KSwgIC8vLzwgTWV0aG9kIE5vdCBBbGxvd2VkCisgICAgT1RfQ09BUF9DT0RFX05PVF9BQ0NFUFRBQkxFICAgICAgPSBPVF9DT0FQX0NPREUoNCwgNiksICAvLy88IE5vdCBBY2NlcHRhYmxlCisgICAgT1RfQ09BUF9DT0RFX1BSRUNPTkRJVElPTl9GQUlMRUQgPSBPVF9DT0FQX0NPREUoNCwgMTIpLCAvLy88IFByZWNvbmRpdGlvbiBGYWlsZWQKKyAgICBPVF9DT0FQX0NPREVfUkVRVUVTVF9UT09fTEFSR0UgICA9IE9UX0NPQVBfQ09ERSg0LCAxMyksIC8vLzwgUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlCisgICAgT1RfQ09BUF9DT0RFX1VOU1VQUE9SVEVEX0ZPUk1BVCAgPSBPVF9DT0FQX0NPREUoNCwgMTUpLCAvLy88IFVuc3VwcG9ydGVkIENvbnRlbnQtRm9ybWF0CisKKyAgICBPVF9DT0FQX0NPREVfSU5URVJOQUxfRVJST1IgICAgICA9IE9UX0NPQVBfQ09ERSg1LCAwKSwgIC8vLzwgSW50ZXJuYWwgU2VydmVyIEVycm9yCisgICAgT1RfQ09BUF9DT0RFX05PVF9JTVBMRU1FTlRFRCAgICAgPSBPVF9DT0FQX0NPREUoNSwgMSksICAvLy88IE5vdCBJbXBsZW1lbnRlZAorICAgIE9UX0NPQVBfQ09ERV9CQURfR0FURVdBWSAgICAgICAgID0gT1RfQ09BUF9DT0RFKDUsIDIpLCAgLy8vPCBCYWQgR2F0ZXdheQorICAgIE9UX0NPQVBfQ09ERV9TRVJWSUNFX1VOQVZBSUxBQkxFID0gT1RfQ09BUF9DT0RFKDUsIDMpLCAgLy8vPCBTZXJ2aWNlIFVuYXZhaWxhYmxlCisgICAgT1RfQ09BUF9DT0RFX0dBVEVXQVlfVElNRU9VVCAgICAgPSBPVF9DT0FQX0NPREUoNSwgNCksICAvLy88IEdhdGV3YXkgVGltZW91dAorICAgIE9UX0NPQVBfQ09ERV9QUk9YWV9OT1RfU1VQUE9SVEVEID0gT1RfQ09BUF9DT0RFKDUsIDUpLCAgLy8vPCBQcm94eWluZyBOb3QgU3VwcG9ydGVkCit9IG90Q29hcENvZGU7CisKKy8qKgorICogQ29BUCBPcHRpb24gTnVtYmVycworICovCit0eXBlZGVmIGVudW0gb3RDb2FwT3B0aW9uVHlwZQoreworICAgIE9UX0NPQVBfT1BUSU9OX0lGX01BVENIICAgICAgID0gMSwgICAgLy8vPCBJZi1NYXRjaAorICAgIE9UX0NPQVBfT1BUSU9OX1VSSV9IT1NUICAgICAgID0gMywgICAgLy8vPCBVcmktSG9zdAorICAgIE9UX0NPQVBfT1BUSU9OX0VfVEFHICAgICAgICAgID0gNCwgICAgLy8vPCBFVGFnCisgICAgT1RfQ09BUF9PUFRJT05fSUZfTk9ORV9NQVRDSCAgPSA1LCAgICAvLy88IElmLU5vbmUtTWF0Y2gKKyAgICBPVF9DT0FQX09QVElPTl9PQlNFUlZFICAgICAgICA9IDYsICAgIC8vLzwgT2JzZXJ2ZQorICAgIE9UX0NPQVBfT1BUSU9OX1VSSV9QT1JUICAgICAgID0gNywgICAgLy8vPCBVcmktUG9ydAorICAgIE9UX0NPQVBfT1BUSU9OX0xPQ0FUSU9OX1BBVEggID0gOCwgICAgLy8vPCBMb2NhdGlvbi1QYXRoCisgICAgT1RfQ09BUF9PUFRJT05fVVJJX1BBVEggICAgICAgPSAxMSwgICAvLy88IFVyaS1QYXRoCisgICAgT1RfQ09BUF9PUFRJT05fQ09OVEVOVF9GT1JNQVQgPSAxMiwgICAvLy88IENvbnRlbnQtRm9ybWF0CisgICAgT1RfQ09BUF9PUFRJT05fTUFYX0FHRSAgICAgICAgPSAxNCwgICAvLy88IE1heC1BZ2UKKyAgICBPVF9DT0FQX09QVElPTl9VUklfUVVFUlkgICAgICA9IDE1LCAgIC8vLzwgVXJpLVF1ZXJ5CisgICAgT1RfQ09BUF9PUFRJT05fQUNDRVBUICAgICAgICAgPSAxNywgICAvLy88IEFjY2VwdAorICAgIE9UX0NPQVBfT1BUSU9OX0xPQ0FUSU9OX1FVRVJZID0gMjAsICAgLy8vPCBMb2NhdGlvbi1RdWVyeQorICAgIE9UX0NPQVBfT1BUSU9OX1BST1hZX1VSSSAgICAgID0gMzUsICAgLy8vPCBQcm94eS1VcmkKKyAgICBPVF9DT0FQX09QVElPTl9QUk9YWV9TQ0hFTUUgICA9IDM5LCAgIC8vLzwgUHJveHktU2NoZW1lCisgICAgT1RfQ09BUF9PUFRJT05fU0laRTEgICAgICAgICAgPSA2MCwgICAvLy88IFNpemUxCit9IG90Q29hcE9wdGlvblR5cGU7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENvQVAgb3B0aW9uLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RDb2FwT3B0aW9uCit7CisgICAgdWludDE2X3QgICAgICAgbU51bWJlcjsgIC8vLzwgT3B0aW9uIE51bWJlcgorICAgIHVpbnQxNl90ICAgICAgIG1MZW5ndGg7ICAvLy88IE9wdGlvbiBMZW5ndGgKKyAgICBjb25zdCB1aW50OF90ICptVmFsdWU7ICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIE9wdGlvbiBWYWx1ZQorfSBvdENvYXBPcHRpb247CisKKy8qKgorICogQ29BUCBDb250ZW50IEZvcm1hdCBjb2Rlcy4gIFRoZSBmdWxsIGxpc3QgaXMgZG9jdW1lbnRlZCBhdAorICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyNTIjcGFnZS05MgorICovCit0eXBlZGVmIGVudW0gb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdAoreworICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX1RFWFRfUExBSU4gICAgPSAwLCAgICAvLy88IHRleHQvcGxhaW4KKyAgICBPVF9DT0FQX09QVElPTl9DT05URU5UX0ZPUk1BVF9MSU5LX0ZPUk1BVCAgID0gNDAsICAgLy8vPCBhcHBsaWNhdGlvbi9saW5rLWZvcm1hdAorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX1hNTCAgICAgICAgICAgPSA0MSwgICAvLy88IGFwcGxpY2F0aW9uL3htbAorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX09DVEVUX1NUUkVBTSAgPSA0MiwgICAvLy88IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX0VYSSAgICAgICAgICAgPSA0NywgICAvLy88IGFwcGxpY2F0aW9uL2V4aQorICAgIE9UX0NPQVBfT1BUSU9OX0NPTlRFTlRfRk9STUFUX0pTT04gICAgICAgICAgPSA1MCwgICAvLy88IGFwcGxpY2F0aW9uL2pzb24KK30gb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdDsKKworI2RlZmluZSBPVF9DT0FQX0hFQURFUl9NQVhfTEVOR1RIICAgICAgIDEyOCAgLy8vPCBNYXggQ29BUCBoZWFkZXIgbGVuZ3RoIChieXRlcykKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgQ29BUCBoZWFkZXIuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdENvYXBIZWFkZXIKK3sKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgbVZlcnNpb25UeXBlVG9rZW47ICAgICAgICAgICAgICAvLy88IFRoZSBDb0FQIFZlcnNpb24sIFR5cGUsIGFuZCBUb2tlbiBMZW5ndGgKKyAgICAgICAgICAgIHVpbnQ4X3QgbUNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBDb0FQIENvZGUKKyAgICAgICAgICAgIHVpbnQxNl90IG1NZXNzYWdlSWQ7ICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBDb0FQIE1lc3NhZ2UgSUQKKyAgICAgICAgfSBtRmllbGRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBDb0FQIGJhc2UgaGVhZGVyCisgICAgICAgIHVpbnQ4X3QgbUJ5dGVzW09UX0NPQVBfSEVBREVSX01BWF9MRU5HVEhdOyAgLy8vPCBUaGUgcmF3IGJ5dGUgZW5jb2RpbmcgZm9yIHRoZSBDb0FQIGhlYWRlcgorICAgIH0gbUhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVGhlIENvQVAgaGVhZGVyIGVuY29kaW5nCisgICAgdWludDhfdCBtSGVhZGVyTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUaGUgQ29BUCBoZWFkZXIgbGVuZ3RoIChieXRlcykKKyAgICB1aW50MTZfdCBtT3B0aW9uTGFzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBsYXN0IENvQVAgT3B0aW9uIE51bWJlciB2YWx1ZQorICAgIHVpbnQxNl90IG1GaXJzdE9wdGlvbk9mZnNldDsgICAgICAgICAgICAgICAgICAgIC8vLzwgVGhlIGJ5dGUgb2Zmc2V0IGZvciB0aGUgZmlyc3QgQ29BUCBPcHRpb24KKyAgICB1aW50MTZfdCBtTmV4dE9wdGlvbk9mZnNldDsgICAgICAgICAgICAgICAgICAgICAvLy88IFRoZSBieXRlIG9mZnNldCBmb3IgdGhlIG5leHQgQ29BUCBPcHRpb24KKyAgICBvdENvYXBPcHRpb24gbU9wdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBDb0FQIE9wdGlvbi4KK30gb3RDb2FwSGVhZGVyOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhIENvQVAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgb3Igb24gdGhlIHJlcXVlc3QgdGltZW91dC4KKyAqCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICogQHBhcmFtW2luXSAgYUhlYWRlciAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIENvQVAgaGVhZGVyLiBOVUxMIGlmIG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIHRoZSByZXNwb25zZS4gTlVMTCBpZiBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWQuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBpbmZvIGZvciBAcCBhTWVzc2FnZS4gTlVMTCBpZiBubyByZXNwb25zZSB3YXMgcmVjZWl2ZWQuCisgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgICAgIEEgcmVzdWx0IG9mIHRoZSBDb0FQIHRyYW5zYWN0aW9uLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgIEEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0FCT1JUICAgICAgICAgICAgIEEgQ29BUCB0cmFuc2FjdGlvbiB3YXMgcmVzZXRlZCBieSBwZWVyLgorICogQHJldHZhbCAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCAgTm8gcmVzcG9uc2Ugb3IgYWNrbm93bGVkZ21lbnQgcmVjZWl2ZWQgZHVyaW5nIHRpbWVvdXQgcGVyaW9kLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3RDb2FwUmVzcG9uc2VIYW5kbGVyKSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGEgQ29BUCByZXF1ZXN0IHdpdGggYSBnaXZlbiBVcmktUGF0aCBpcyByZWNlaXZlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgICAgICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgaW5mbyBmb3IgQHAgYU1lc3NhZ2UuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdENvYXBSZXF1ZXN0SGFuZGxlcikodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBDb0FQIHJlc291cmNlLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RDb2FwUmVzb3VyY2UKK3sKKyAgICBjb25zdCBjaGFyICptVXJpUGF0aDsgICAgICAgICAgIC8vLzwgVGhlIFVSSSBQYXRoIHN0cmluZworICAgIG90Q29hcFJlcXVlc3RIYW5kbGVyIG1IYW5kbGVyOyAgLy8vPCBUaGUgY2FsbGJhY2sgZm9yIGhhbmRsaW5nIGEgcmVjZWl2ZWQgcmVxdWVzdAorICAgIHZvaWQgKm1Db250ZXh0OyAgICAgICAgICAgICAgICAgLy8vPCBBcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0CisgICAgc3RydWN0IG90Q29hcFJlc291cmNlICptTmV4dDsgICAvLy88IFRoZSBuZXh0IENvQVAgcmVzb3VyY2UgaW4gdGhlIGxpc3QKK30gb3RDb2FwUmVzb3VyY2U7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlciB0byBpbml0aWFsaXplLgorICogQHBhcmFtW2luXSAgICBhVHlwZSAgICBDb0FQIG1lc3NhZ2UgdHlwZS4KKyAqIEBwYXJhbVtpbl0gICAgYUNvZGUgICAgQ29BUCBtZXNzYWdlIGNvZGUuCisgKgorICovCit2b2lkIG90Q29hcEhlYWRlckluaXQob3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdENvYXBUeXBlIGFUeXBlLCBvdENvYXBDb2RlIGFDb2RlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFRva2VuIHZhbHVlIGFuZCBsZW5ndGggaW4gYSBoZWFkZXIuCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYVRva2VuICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICogQHBhcmFtW2luXSAgICAgYVRva2VuTGVuZ3RoICBUaGUgTGVuZ3RoIG9mIEBwIGFUb2tlbi4KKyAqCisgKi8KK3ZvaWQgb3RDb2FwSGVhZGVyU2V0VG9rZW4ob3RDb2FwSGVhZGVyICphSGVhZGVyLCBjb25zdCB1aW50OF90ICphVG9rZW4sIHVpbnQ4X3QgYVRva2VuTGVuZ3RoKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFRva2VuIGxlbmd0aCBhbmQgcmFuZG9taXplcyBpdHMgdmFsdWUuCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYVRva2VuTGVuZ3RoICBUaGUgTGVuZ3RoIG9mIGEgVG9rZW4gdG8gc2V0LgorICoKKyAqLwordm9pZCBvdENvYXBIZWFkZXJHZW5lcmF0ZVRva2VuKG90Q29hcEhlYWRlciAqYUhlYWRlciwgdWludDhfdCBhVG9rZW5MZW5ndGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyB0aGUgQ29udGVudCBGb3JtYXQgQ29BUCBvcHRpb24gYXMgc3BlY2lmaWVkIGluCisgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzI1MiNwYWdlLTkyLiAgVGhpcyAqbXVzdCogYmUgY2FsbGVkIGJlZm9yZQorICogc2V0dGluZyBvdENvYXBIZWFkZXJTZXRQYXlsb2FkTWFya2VyIGlmIGEgcGF5bG9hZCBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUKKyAqIG1lc3NhZ2UuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgb3RDb2FwSGVhZGVyQXBwZW5kVWludE9wdGlvbiwKKyAqIGFuZCBpZiB0aGUgZGVzaXJlZCBmb3JtYXQgdHlwZSBjb2RlIGlzbid0IGxpc3RlZCBpbiBvdENvYXBPcHRpb25Db250ZW50Rm9ybWF0LAorICogdGhpcyBiYXNlIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFDb250ZW50Rm9ybWF0ICAgIE9uZSBvZiB0aGUgY29udGVudCBmb3JtYXRzIGxpc3RlZCBpbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdCBhYm92ZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgKi8KK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kQ29udGVudEZvcm1hdE9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90Q29hcE9wdGlvbkNvbnRlbnRGb3JtYXQgYUNvbnRlbnRGb3JtYXQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIENvQVAgb3B0aW9uIGluIGEgaGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKiBAcGFyYW1baW5dICAgICBhT3B0aW9uICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgb3B0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqCisgKi8KK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kT3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3Qgb3RDb2FwT3B0aW9uICphT3B0aW9uKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgYW4gdW5zaWduZWQgaW50ZWdlciBDb0FQIG9wdGlvbiBhcyBzcGVjaWZpZWQgaW4KKyAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjUyI3NlY3Rpb24tMy4yCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFOdW1iZXIgIFRoZSBDb0FQIE9wdGlvbiBudW1iZXIuCisgKiBAcGFyYW1baW5dICAgICBhVmFsdWUgICBUaGUgQ29BUCBPcHRpb24gdW5zaWduZWQgaW50ZWdlciB2YWx1ZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgKgorICovCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVpbnRPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyLCB1aW50MTZfdCBhTnVtYmVyLCB1aW50MzJfdCBhVmFsdWUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhbiBPYnNlcnZlIG9wdGlvbi4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhSGVhZGVyICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFPYnNlcnZlICBPYnNlcnZlIGZpZWxkIHZhbHVlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqLworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRPYnNlcnZlT3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgdWludDMyX3QgYU9ic2VydmUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhbiBVcmktUGF0aCBvcHRpb24uCisgKgorICogQHBhcmFtW2lub3V0XSAgYUhlYWRlciAgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKiBAcGFyYW1baW5dICAgICBhVXJpUGF0aCAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgKgorICovCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVBhdGhPcHRpb25zKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVBhdGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIE1heC1BZ2Ugb3B0aW9uLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFIZWFkZXIgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYU1heEFnZSAgIFRoZSBNYXgtQWdlIHZhbHVlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqLworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRNYXhBZ2VPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyLCB1aW50MzJfdCBhTWF4QWdlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgYSBzaW5nbGUgVXJpLVF1ZXJ5IG9wdGlvbi4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhSGVhZGVyICAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqIEBwYXJhbVtpbl0gICAgIGFVcmlRdWVyeSBBIHBvaW50ZXIgdG8gTlVMTC10ZXJtaW5hdGVkIHN0cmluZywgd2hpY2ggc2hvdWxkIGNvbnRhaW4gYSBzaW5nbGUga2V5PXZhbHVlIHBhaXIuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgb3B0aW9uLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBvcHRpb24gbGVuZ3RoIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICovCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVF1ZXJ5T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVF1ZXJ5KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgUGF5bG9hZCBNYXJrZXIgaW5kaWNhdGluZyBiZWdpbm5pbmcgb2YgdGhlIHBheWxvYWQgdG8gdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEBwYXJhbVtpbm91dF0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBQYXlsb2FkIE1hcmtlciBzdWNjZXNzZnVsbHkgYWRkZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEhlYWRlciBQYXlsb2FkIE1hcmtlciBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqCisgKi8KK3ZvaWQgb3RDb2FwSGVhZGVyU2V0UGF5bG9hZE1hcmtlcihvdENvYXBIZWFkZXIgKmFIZWFkZXIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSGVhZGVyICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJZCAgVGhlIE1lc3NhZ2UgSUQgdmFsdWUuCisgKgorICovCit2b2lkIG90Q29hcEhlYWRlclNldE1lc3NhZ2VJZChvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQxNl90IGFNZXNzYWdlSWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSGVhZGVyICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICoKKyAqLworb3RDb2FwVHlwZSBvdENvYXBIZWFkZXJHZXRUeXBlKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBDb2RlIHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHVybnMgVGhlIENvZGUgdmFsdWUuCisgKgorICovCitvdENvYXBDb2RlIG90Q29hcEhlYWRlckdldENvZGUoY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKTsKKworLyoqCisqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyoKKyogQHBhcmFtW2luXSAgYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyoKKyogQHJldHVybnMgVGhlIE1lc3NhZ2UgSUQgdmFsdWUuCisqCisqLwordWludDE2X3Qgb3RDb2FwSGVhZGVyR2V0TWVzc2FnZUlkKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUb2tlbiBsZW5ndGguCisgKgorICogQHBhcmFtW2luXSAgYUhlYWRlciAgQSBwb2ludGVyIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAqCisgKiBAcmV0dXJucyBUaGUgVG9rZW4gbGVuZ3RoLgorICoKKyAqLwordWludDhfdCBvdENvYXBIZWFkZXJHZXRUb2tlbkxlbmd0aChjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUb2tlbiB2YWx1ZS4KKyAqCisgKi8KK2NvbnN0IHVpbnQ4X3QgKm90Q29hcEhlYWRlckdldFRva2VuKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb3B0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBoZWFkZXIuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvcHRpb24uIElmIG5vIG9wdGlvbiBpcyBwcmVzZW50IE5VTEwgcG9pbnRlciBpcyByZXR1cm5lZC4KKyAqCisgKi8KK2NvbnN0IG90Q29hcE9wdGlvbiAqb3RDb2FwSGVhZGVyR2V0Rmlyc3RPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9wdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSGVhZGVyICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgaGVhZGVyLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBvcHRpb24uIElmIG5vIG1vcmUgb3B0aW9ucyBhcmUgcHJlc2VudCBOVUxMIHBvaW50ZXIgaXMgcmV0dXJuZWQuCisgKgorICovCitjb25zdCBvdENvYXBPcHRpb24gKm90Q29hcEhlYWRlckdldE5leHRPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgbWVzc2FnZSB3aXRoIGEgQ29BUCBoZWFkZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgcG9pbnRlciB0byBhIENvQVAgaGVhZGVyIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgdGhlIG1lc3NhZ2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgZmFpbGVkIHRvIGFsbG9jYXRlIG1lc3NhZ2UuCisgKgorICovCitvdE1lc3NhZ2UgKm90Q29hcE5ld01lc3NhZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBDb0FQIHJlcXVlc3QuCisgKgorICogSWYgYSByZXNwb25zZSBmb3IgYSByZXF1ZXN0IGlzIGV4cGVjdGVkLCByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4KKyAqIElmIG5vIHJlc3BvbnNlIGlzIGV4cGVjdGVkLCB0aGVzZSBhcmd1bWVudHMgc2hvdWxkIGJlIE5VTEwgcG9pbnRlcnMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgQSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hhbGwgYmUgY2FsbGVkIG9uIHJlc3BvbnNlIHJlY2VwdGlvbiBvciB0aW1lb3V0LgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uIE1heSBiZSBOVUxMIGlmIG5vdCB1c2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgc2VudCBDb0FQIG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgRmFpbGVkIHRvIGFsbG9jYXRlIHJldHJhbnNtaXNzaW9uIGRhdGEuCisgKgorICovCitvdEVycm9yIG90Q29hcFNlbmRSZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQb3J0ICAgICAgVGhlIGxvY2FsIFVEUCBwb3J0IHRvIGJpbmQgdG8uCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICovCitvdEVycm9yIG90Q29hcFN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBvcnQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgdGhlIENvQVAgc2VydmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICovCitvdEVycm9yIG90Q29hcFN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSByZXNvdXJjZSB0byB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFSZXNvdXJjZSAgQSBwb2ludGVyIHRvIHRoZSByZXNvdXJjZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCBAcCBhUmVzb3VyY2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBAcCBhUmVzb3VyY2Ugd2FzIGFscmVhZHkgYWRkZWQuCisgKgorICovCitvdEVycm9yIG90Q29hcEFkZFJlc291cmNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RDb2FwUmVzb3VyY2UgKmFSZXNvdXJjZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgcmVzb3VyY2UgZnJvbSB0aGUgQ29BUCBzZXJ2ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFSZXNvdXJjZSAgQSBwb2ludGVyIHRvIHRoZSByZXNvdXJjZS4KKyAqCisgKi8KK3ZvaWQgb3RDb2FwUmVtb3ZlUmVzb3VyY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENvYXBSZXNvdXJjZSAqYVJlc291cmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgdW5oYW5kbGVkIENvQVAgcmVxdWVzdHMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgQSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hhbGwgYmUgY2FsbGVkIHdoZW4gYW4gdW5oYW5kbGVkIHJlcXVlc3QgYXJyaXZlcy4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLiBNYXkgYmUgTlVMTCBpZiBub3QgdXNlZC4KKyAqLwordm9pZCBvdENvYXBTZXREZWZhdWx0SGFuZGxlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIG90Q29hcFJlcXVlc3RIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIENvQVAgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byB0aGUgQ29BUCByZXNwb25zZSB0byBzZW5kLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIENvQVAgcmVzcG9uc2UgbWVzc2FnZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIHNlbmQgdGhlIENvQVAgcmVzcG9uc2UuCisgKgorICovCitvdEVycm9yIG90Q29hcFNlbmRSZXNwb25zZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAvKiBPUEVOVEhSRUFEX0NPQVBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jb21taXNzaW9uZXIuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9jb21taXNzaW9uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI0ZTJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2NvbW1pc3Npb25lci5oCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIFRocmVhZCBDb21taXNzaW9uZXIgcm9sZS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ09NTUlTU0lPTkVSX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09NTUlTU0lPTkVSX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1jb21taXNzaW9uZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciB0aGUgVGhyZWFkIENvbW1pc3Npb25lciByb2xlLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBDb21taXNzaW9uZXIgU3RhdGUuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RDb21taXNzaW9uZXJTdGF0ZQoreworICAgIE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCA9IDAsIC8vLzwgQ29tbWlzc2lvbmVyIHJvbGUgaXMgZGlzYWJsZWQuCisgICAgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OID0gMSwgLy8vPCBDdXJyZW50bHkgcGV0aXRpb25pbmcgdG8gYmVjb21lIGEgQ29tbWlzc2lvbmVyLgorICAgIE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUgICA9IDIsIC8vLzwgQ29tbWlzc2lvbmVyIHJvbGUgaXMgYWN0aXZlLgorfSBvdENvbW1pc3Npb25lclN0YXRlOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgVGhyZWFkIENvbW1pc3Npb25lciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RDb21taXNzaW9uZXJTdGFydChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIFRocmVhZCBDb21taXNzaW9uZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIEpvaW5lciBlbnRyeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBKb2luZXIncyBleHRlbmRlZCBhZGRyZXNzIG9yIE5VTEwgZm9yIGFueSBKb2luZXIuCisgKiBAcGFyYW1baW5dICBhUFNLZCAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBQU0tkLgorICogQHBhcmFtW2luXSAgYVRpbWVvdXQgICAgICAgICAgICAgIEEgdGltZSBhZnRlciB3aGljaCBhIEpvaW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQsIGluIHNlY29uZHMuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSm9pbmVyLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIE5vIGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFkZCB0aGUgSm9pbmVyLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFFeHRBZGRyZXNzIG9yIEBwIGFQU0tkIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFQU0tkLCB1aW50MzJfdCBhVGltZW91dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgSm9pbmVyIGVudHJ5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyZXNzICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lcidzIGV4dGVuZGVkIGFkZHJlc3Mgb3IgTlVMTCBmb3IgYW55IEpvaW5lci4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIEpvaW5lci4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBUaGUgSm9pbmVyIHNwZWNpZmllZCBieSBAcCBhRXh0QWRkcmVzcyB3YXMgbm90IGZvdW5kLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFFeHRBZGRyZXNzIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyUmVtb3ZlSm9pbmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBQcm92aXNpb25pbmcgVVJMLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQcm92aXNpb25pbmdVcmwgICAgICBBIHBvaW50ZXIgdG8gdGhlIFByb3Zpc2lvbmluZyBVUkwgKG1heSBiZSBOVUxMKS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUHJvdmlzaW9uaW5nIFVSTC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhUHJvdmlzaW9uaW5nVXJsIGlzIGludmFsaWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdENvbW1pc3Npb25lclNldFByb3Zpc2lvbmluZ1VybChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gQW5ub3VuY2UgQmVnaW4gbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICAgICAgICAgVGhlIGNoYW5uZWwgbWFzayB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gIGFDb3VudCAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVuZXJneSBtZWFzdXJlbWVudHMgcGVyIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dICBhUGVyaW9kICAgICAgICAgICAgICAgVGhlIHRpbWUgYmV0d2VlbiBlbmVyZ3kgbWVhc3VyZW1lbnRzIChtaWxsaXNlY29uZHMpLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbi4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBBbm5vdW5jZSBCZWdpbiBtZXNzYWdlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIGFuIEFubm91bmNlIEJlZ2luIG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gdGhlIENvbW1pc3Npb25lciByZWNlaXZlcyBhbiBFbmVyZ3kgUmVwb3J0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgICAgICBUaGUgY2hhbm5lbCBtYXNrIHZhbHVlLgorICogQHBhcmFtW2luXSAgYUVuZXJneUxpc3QgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZW5lcmd5IG1lYXN1cmVtZW50IGxpc3QuCisgKiBAcGFyYW1baW5dICBhRW5lcmd5TGlzdExlbmd0aCAgTnVtYmVyIG9mIGVudHJpZXMgaW4gQHAgYUVuZXJneUxpc3RMZW5ndGguCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjaykodWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCB1aW50OF90ICphRW5lcmd5TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBFbmVyZ3kgU2NhbiBRdWVyeSBtZXNzYWdlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgICAgICAgICBUaGUgY2hhbm5lbCBtYXNrIHZhbHVlLgorICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZW5lcmd5IG1lYXN1cmVtZW50cyBwZXIgY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgICAgICAgICBUaGUgdGltZSBiZXR3ZWVuIGVuZXJneSBtZWFzdXJlbWVudHMgKG1pbGxpc2Vjb25kcykuCisgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICAgICAgICAgVGhlIHNjYW4gZHVyYXRpb24gZm9yIGVhY2ggZW5lcmd5IG1lYXN1cmVtZW50IChtaWxsaXNlY29uZHMpLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbi4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgb24gcmVjZWl2aW5nIGFuIEVuZXJneSBSZXBvcnQgbWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBFbmVyZ3kgU2NhbiBRdWVyeSBtZXNzYWdlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIGFuIEVuZXJneSBTY2FuIFF1ZXJ5IG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIGNvbW1pc3Npb25lciBpcyBub3QgYWN0aXZlLgorICoKKyAqIEBub3RlIE9ubHkgdXNlIHRoaXMgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIENvbW1pc3Npb25lciByb2xlIGJ5IG90Q29tbWlzc2lvbmVyU3RhcnQoKS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVBlcmlvZCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiB0aGUgQ29tbWlzc2lvbmVyIHJlY2VpdmVzIGEgUEFOIElEIENvbmZsaWN0IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYVBhbklkICAgICAgICAgICAgIFRoZSBQQU4gSUQgdmFsdWUuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICAgICAgVGhlIGNoYW5uZWwgbWFzayB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoT1RDQUxMICpvdENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjaykodWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgUEFOIElEIFF1ZXJ5IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVBhbklkICAgICAgICAgICAgICAgIFRoZSBQQU4gSUQgdG8gcXVlcnkuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbE1hc2sgICAgICAgICAgVGhlIGNoYW5uZWwgbWFzayB2YWx1ZS4KKyAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIElQdjYgZGVzdGluYXRpb24uCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkIG9uIHJlY2VpdmluZyBhbiBFbmVyZ3kgUmVwb3J0IG1lc3NhZ2UuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgUEFOIElEIFF1ZXJ5IG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgYSBQQU4gSUQgUXVlcnkgbWVzc2FnZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSBUaGUgY29tbWlzc2lvbmVyIGlzIG5vdCBhY3RpdmUuCisgKgorICogQG5vdGUgT25seSB1c2UgdGhpcyBhZnRlciBzdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29tbWlzc2lvbmVyIHJvbGUgYnkgb3RDb21taXNzaW9uZXJTdGFydCgpLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RDb21taXNzaW9uZXJQYW5JZFF1ZXJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIE1HTVRfQ09NTUlTU0lPTkVSX0dFVC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVRsdnMgICAgICBBIHBvaW50ZXIgdG8gVExWcy4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBUTFZzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzaGNvcCBkYXRhc2V0IGNvbW1hbmQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZW5kLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgTUdNVF9DT01NSVNTSU9ORVJfU0VULgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgIEEgcG9pbnRlciB0byBjb21taXNzaW9uaW5nIGRhdGFzZXQuCisgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgIEEgcG9pbnRlciB0byBUTFZzLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIFRMVnMuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZW5kIHRoZSBtZXNoY29wIGRhdGFzZXQgY29tbWFuZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIHRvIHNlbmQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdENvbW1pc3Npb25lclNlbmRNZ210U2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RDb21taXNzaW9uaW5nRGF0YXNldCAqYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ29tbWlzc2lvbmVyIFNlc3Npb24gSUQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb21taXNzaW9uZXIgc2Vzc2lvbiBpZC4KKyAqCisgKi8KK09UQVBJIHVpbnQxNl90IE9UQ0FMTCBvdENvbW1pc3Npb25lckdldFNlc3Npb25JZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ29tbWlzc2lvbmVyIFN0YXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQgIENvbW1pc3Npb25lciBkaXNhYmxlZC4KKyAqIEByZXR2YWwgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OICBCZWNvbWluZyB0aGUgY29tbWlzc2lvbmVyLgorICogQHJldHZhbCBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFICAgIENvbW1pc3Npb25lciBlbmFibGVkLgorICoKKyAqLworT1RBUEkgb3RDb21taXNzaW9uZXJTdGF0ZSBPVENBTEwgb3RDb21taXNzaW9uZXJHZXRTdGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBQU0tjLgorICoKKyAqIFBTS2MgaXMgdXNlZCB0byBlc3RhYmxpc2ggdGhlIENvbW1pc3Npb25lciBTZXNzaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUGFzc1BocmFzZSAgIFRoZSBjb21taXNzaW9uaW5nIHBhc3NwaHJhc2UuCisgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIFRoZSBuZXR3b3JrIG5hbWUgZm9yIFBTS2MgY29tcHV0YXRpb24uCisgKiBAcGFyYW1baW5dICBhRXh0UGFuSWQgICAgIFRoZSBleHRlbmRlZCBwYW4gaWQgZm9yIFBTS2MgY29tcHV0YXRpb24uCisgKiBAcGFyYW1bb3V0XSBhUFNLYyAgICAgICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgZ2VuZXJhdGVkIFBTS2Mgd2lsbCBiZSBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBnZW5lcmF0ZSBQU0tjLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIElmIGFueSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzIGlzIGludmFsaWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdENvbW1pc3Npb25lckdlbmVyYXRlUFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFQYXNzUGhyYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lLCBjb25zdCB1aW50OF90ICphRXh0UGFuSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphUFNLYyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBlbmQgb2YgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT01NSVNTSU9ORVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9jb25maWcuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjY3ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2NvbmZpZy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBpbmNsdWRlcyByZXF1aXJlZCBkZWZpbmVzIGNvbmZpZyBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19IXworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRklMRQorICoKKyAqIFRoZSBPcGVuVGhyZWFkIGZlYXR1cmUgY29uZmlndXJhdGlvbiBmaWxlLgorICoKKyAqLworI2lmICFkZWZpbmVkKE9QRU5USFJFQURfQ09ORklHX0ZJTEUpCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0ZJTEUgPG9wZW50aHJlYWQtY29uZmlnLWdlbmVyaWMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSBPUEVOVEhSRUFEX0NPTkZJR19GSUxFCisKKyNlbmRpZiAvL09QRU5USFJFQURfQ09ORklHX0hfCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvY3J5cHRvLmggYi9pbmNsdWRlL29wZW50aHJlYWQvY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwYTQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9jcnlwdG8uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgY3J5cHRvIEMgQVBJcy4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfQ1JZUFRPX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ1JZUFRPX0hfCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktY3J5cHRvCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgZnVuY3Rpb25zLgorICoKKyAqIEB7CisgKgorICovCisKKyNkZWZpbmUgT1RfQ1JZUFRPX0hNQUNfU0hBX0hBU0hfU0laRSAgIDMyICAgLy8vPCBMZW5ndGggb2YgSE1BQyBTSEEgKGluIGJ5dGVzKS4KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIEhNQUMgY29tcHV0YXRpb24uCisgKgorICogQHBhcmFtW2luXSAgICAgYUtleSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBrZXkuCisgKiBAcGFyYW1baW5dICAgICBhS2V5TGVuZ3RoICAgICBUaGUga2V5IGxlbmd0aCBpbiBieXRlcy4KKyAqIEBwYXJhbVtpbl0gICAgIGFCdWYgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtW2luXSAgICAgYUJ1Zkxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiBAcCBhQnVmIGluIGJ5dGVzLgorICogQHBhcmFtW291dF0gICAgYUhhc2ggICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgaGFzaCBidWZmZXIuCisgKgorICovCit2b2lkIG90Q3J5cHRvSG1hY1NoYTI1NigKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsCisgICAgdWludDhfdCAqYUhhc2gpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIEFFUyBDQ00gY29tcHV0YXRpb24uCisgKgorICogQHBhcmFtW2luXSAgICAgYUtleSAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBrZXkuCisgKiBAcGFyYW1baW5dICAgICBhS2V5TGVuZ3RoICAgICBMZW5ndGggb2YgdGhlIGtleSBpbiBieXRlcy4KKyAqIEBwYXJhbVtpbl0gICAgIGFUYWdMZW5ndGggICAgIExlbmd0aCBvZiB0YWcgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICAgICBhTm9uY2UgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIG5vbmNlLgorICogQHBhcmFtW2luXSAgICAgYU5vbmNlTGVuZ3RoICAgTGVuZ3RoIG9mIG5vbmNlIGluIGJ5dGVzLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFIZWFkZXIgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaGVhZGVyLgorICogQHBhcmFtW2luXSAgICAgYUhlYWRlckxlbmd0aCAgTGVuZ3RoIG9mIGhlYWRlciBpbiBieXRlcy4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBhUGxhaW5UZXh0ICAgICBBIHBvaW50ZXIgdG8gdGhlIHBsYWludGV4dC4KKyAqIEBwYXJhbVtpbm91dF0gIGFDaXBoZXJUZXh0ICAgIEEgcG9pbnRlciB0byB0aGUgY2lwaGVydGV4dC4KKyAqIEBwYXJhbVtpbl0gICAgIGFMZW5ndGggICAgICAgIFBsYWludGV4dCBsZW5ndGggaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICAgICBhRW5jcnlwdCAgICAgICBgdHJ1ZWAgb24gZW5jcnlwdCBhbmQgYGZhbHNlYCBvbiBkZWNyeXB0LgorICoKKyAqIEBwYXJhbVtvdXRdICAgIGFUYWcgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdGFnLgorICoKKyAqLwordm9pZCBvdENyeXB0b0Flc0NjbSgKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIHVpbnQ4X3QgYVRhZ0xlbmd0aCwKKyAgICBjb25zdCB2b2lkICphTm9uY2UsIHVpbnQ4X3QgYU5vbmNlTGVuZ3RoLAorICAgIGNvbnN0IHZvaWQgKmFIZWFkZXIsIHVpbnQzMl90IGFIZWFkZXJMZW5ndGgsCisgICAgdm9pZCAqYVBsYWluVGV4dCwgdm9pZCAqYUNpcGhlclRleHQsIHVpbnQzMl90IGFMZW5ndGgsIGJvb2wgYUVuY3J5cHQsCisgICAgdm9pZCAqYVRhZyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NSWVBUT19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL2RhdGFzZXQuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjYjA4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgT3BlcmF0aW9uYWwgRGF0YXNldCBBUEkgKGZvciBib3RoIEZURCBhbmQgTVREKS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfREFUQVNFVF9IXworI2RlZmluZSBPUEVOVEhSRUFEX0RBVEFTRVRfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBhIHZhbGlkIG5ldHdvcmsgaXMgcHJlc2VudCBpbiB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgb3Igbm90LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUUlVFIGlmIGEgdmFsaWQgbmV0d29yayBpcyBwcmVzZW50IGluIHRoZSBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3REYXRhc2V0SXNDb21taXNzaW9uZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1bb3V0XSAgYURhdGFzZXQgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgd2lsbCBiZSBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFEYXRhc2V0IHdhcyBOVUxMLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0R2V0QWN0aXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFEYXRhc2V0ICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldCB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFEYXRhc2V0IHdhcyBOVUxMLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0R2V0UGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0RBVEFTRVRfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RhdGFzZXRfZnRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5YTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBPcGVuVGhyZWFkIE9wZXJhdGlvbmFsIERhdGFzZXQgQVBJIChGVEQgb25seSkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0RBVEFTRVRfRlREX0hfCisjZGVmaW5lIE9QRU5USFJFQURfREFUQVNFVF9GVERfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgQSBwb2ludGVyIHRvIHRoZSBBY3RpdmUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZXQgdGhlIEFjdGl2ZSBPcGVyYXRpb25hbCBEYXRzZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYURhdGFzZXQgd2FzIE5VTEwuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdERhdGFzZXRTZXRBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFEYXRhc2V0ICBBIHBvaW50ZXIgdG8gdGhlIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gc2V0IHRoZSBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYURhdGFzZXQgd2FzIE5VTEwuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdERhdGFzZXRTZXRQZW5kaW5nKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIE1HTVRfQUNUSVZFX0dFVC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVRsdlR5cGVzICBBIHBvaW50ZXIgdG8gdGhlIFRMViBUeXBlcy4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBUTFYgVHlwZXMuCisgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgIEEgcG9pbnRlciB0byB0aGUgSVB2NiBkZXN0aW5hdGlvbiwgaWYgaXQgaXMgTlVMTCwgd2lsbCB1c2UgTGVhZGVyIEFMT0MgYXMgZGVmYXVsdC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIG1lc2hjb3AgZGF0YXNldCBjb21tYW5kLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gc2VuZC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90RGF0YXNldFNlbmRNZ210QWN0aXZlR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIE1HTVRfQUNUSVZFX1NFVC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYURhdGFzZXQgICBBIHBvaW50ZXIgdG8gb3BlcmF0aW9uYWwgZGF0YXNldC4KKyAqIEBwYXJhbVtpbl0gIGFUbHZzICAgICAgQSBwb2ludGVyIHRvIFRMVnMuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIFRoZSBsZW5ndGggb2YgVExWcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIG1lc2hjb3AgZGF0YXNldCBjb21tYW5kLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgdG8gc2VuZC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90RGF0YXNldFNlbmRNZ210QWN0aXZlU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBNR01UX1BFTkRJTkdfR0VULgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGx2VHlwZXMgIEEgcG9pbnRlciB0byB0aGUgVExWIFR5cGVzLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIFRMViBUeXBlcy4KKyAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uLCBpZiBpdCBpcyBOVUxMLCB3aWxsIHVzZSBMZWFkZXIgQUxPQyBhcyBkZWZhdWx0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzaGNvcCBkYXRhc2V0IGNvbW1hbmQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZW5kLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBNR01UX1BFTkRJTkdfU0VULgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgIEEgcG9pbnRlciB0byBvcGVyYXRpb25hbCBkYXRhc2V0LgorICogQHBhcmFtW2luXSAgYVRsdnMgICAgICBBIHBvaW50ZXIgdG8gVExWcy4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIGxlbmd0aCBvZiBUTFZzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzaGNvcCBkYXRhc2V0IGNvbW1hbmQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byBzZW5kLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisvKioKKyAqIEdldCBtaW5pbWFsIGRlbGF5IHRpbWVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIHRoZSB2YWx1ZSBvZiBtaW5pbWFsIGRlbGF5IHRpbWVyIChpbiBtcykuCisgKgorICovCitPVEFQSSB1aW50MzJfdCBPVENBTEwgb3REYXRhc2V0R2V0RGVsYXlUaW1lck1pbmltYWwob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgbWluaW1hbCBkZWxheSB0aW1lci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYURlbGF5VGltZXJNaW5pbWFsICBUaGUgdmFsdWUgb2YgbWluaW1hbCBkZWxheSB0aW1lciAoaW4gbXMpLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCBtaW5pbWFsIGRlbGF5IHRpbWVyLgorICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBJZiBAcCBhRGVsYXlUaW1lck1pbmltYWwgaXMgbm90IHZhbGlkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3REYXRhc2V0U2V0RGVsYXlUaW1lck1pbmltYWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhRGVsYXlUaW1lck1pbmltYWwpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9EQVRBU0VUX0ZURF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGZhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvZGhjcDZfY2xpZW50LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBUaHJlYWQgREhDUHY2IGNsaWVudC4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfREhDUDZfQ0xJRU5UX0hfCisjZGVmaW5lIE9QRU5USFJFQURfREhDUDZfQ0xJRU5UX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktZGhjcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBESENQdjYgYWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90RGhjcEFkZHJlc3MKK3sKKyAgICBvdE5ldGlmQWRkcmVzcyBtQWRkcmVzczsgICAgICAgICAgICAvLy88IFRoZSBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzLgorICAgIHVpbnQzMl90ICAgICAgIG1QcmVmZXJyZWRMaWZldGltZTsgIC8vLzwgVGhlIHByZWZlcnJlZCBsaWZldGltZS4KKyAgICB1aW50MzJfdCAgICAgICBtVmFsaWRMaWZldGltZTsgICAgICAvLy88IFRoZSB2YWxpZCBsaWZldGltZS4KK30gb3REaGNwQWRkcmVzczsKKworLyoqCisgKiBVcGRhdGUgYWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBJUHY2IGFkZHJlc3NlcyBmb3IgcHJlZml4ZXMgZnJvbSBjdXJyZW50IE5ldHdvcmsgRGF0YSB3aXRoIERIQ1AgcHJvY2VkdXJlLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBJUHY2IGFkZHJlc3Nlcy4KKyAqIEBwYXJhbVtpbl0gICAgIGFOdW1BZGRyZXNzZXMgIFRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gYUFkZHJlc3NlcyBhcnJheS4KKyAqIEBwYXJhbVtpbl0gICAgIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBkYXRhIHBhc3NlZCB0byBhSWlkQ3JlYXRlIGZ1bmN0aW9uLgorICoKKyAqLwordm9pZCBvdERoY3A2Q2xpZW50VXBkYXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3REaGNwQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3Nlcywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfREhDUDZfQ0xJRU5UX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvZGhjcDZfc2VydmVyLmggYi9pbmNsdWRlL29wZW50aHJlYWQvZGhjcDZfc2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5ZmVmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIFRocmVhZCBESENQdjYgc2VydmVyLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9ESENQNl9TRVJWRVJfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9ESENQNl9TRVJWRVJfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1kaGNwNgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVXBkYXRlcyBESENQIEFnZW50cyBhbmQgREhDUCBBbG9jcy4KKyAqCisgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKi8KK3ZvaWQgb3REaGNwNlNlcnZlclVwZGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfREhDUDZfU0VSVkVSX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvZGlhZy5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RpYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk4NDRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2RpYWcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBmdW5jdGlvbnMgZm9yIHRoZSBPcGVuVGhyZWFkIGRpYWdub3N0aWNzIGxpYnJhcnkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0RJQUdfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9ESUFHX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktZmFjdG9yeS1kaWFnbm9zdGljcworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIHRoZSBUaHJlYWQgc3RhY2sncyBleGVjdXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBkaWFnbm9zdGljcyBtb2R1bGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICovCit2b2lkIG90RGlhZ0luaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBhIGZhY3RvcnkgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFyZ2MgIFRoZSBhcmd1bWVudCBjb3VudGVyIG9mIGRpYWdub3N0aWNzIGNvbW1hbmQgbGluZS4KKyAqIEBwYXJhbVtpbl0gIGFyZ3YgIFRoZSBhcmd1bWVudCB2ZWN0b3Igb2YgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgb3V0cHV0IHN0cmluZy4KKyAqCisgKi8KK2NoYXIgKm90RGlhZ1Byb2Nlc3NDbWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYSBmYWN0b3J5IGRpYWdub3N0aWNzIGNvbW1hbmQgbGluZS4KKyAqCisgKiBAcGFyYW1baW5dICBhU3RyaW5nICBBIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgc3RyaW5nLgorICoKKyAqLworY2hhciAqb3REaWFnUHJvY2Vzc0NtZExpbmUoY2hhciAqYVN0cmluZyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGZhY3RvcnkgZGlhZ25vc3RpY3MgbW9kZSBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgZmFjdG9yeSBkaWFnbm9zdGljcyBtb2RlIGlzIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK2Jvb2wgb3REaWFnSXNFbmFibGVkKHZvaWQpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9ESUFHX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvZG5zLmggYi9pbmNsdWRlL29wZW50aHJlYWQvZG5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1Y2NmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9kbnMuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBkbnMgZnVuY3Rpb25zIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9ETlNfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9ETlNfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktZG5zCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgRE5TIGNvbW11bmljYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworI2RlZmluZSBPVF9ETlNfTUFYX0hPU1ROQU1FX0xFTkdUSCA2MiAgLy8vPCBNYXhpbXVtIGFsbG93ZWQgaG9zdG5hbWUgbGVuZ3RoIChtYXhpbXVtIGxhYmVsIHNpemUgLSAxIGZvciBjb21wcmVzc2lvbikuCisKKyNkZWZpbmUgT1RfRE5TX0RFRkFVTFRfRE5TX1NFUlZFUl9JUCAgIjIwMDE6NDg2MDo0ODYwOjo4ODg4IiAvLy88IERlZmluZXMgZGVmYXVsdCBETlMgU2VydmVyIGFkZHJlc3MgLSBHb29nbGUgRE5TLgorI2RlZmluZSBPVF9ETlNfREVGQVVMVF9ETlNfU0VSVkVSX1BPUlQgNTMgICAgICAgICAgICAgICAgICAgIC8vLzwgRGVmaW5lcyBkZWZhdWx0IEROUyBTZXJ2ZXIgcG9ydC4KKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBpbXBsZW1lbnRzIEROUyBRdWVyeSBwYXJhbWV0ZXJzLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3REbnNRdWVyeQoreworICAgIGNvbnN0IGNoYXIgICAgICAgICAgKm1Ib3N0bmFtZTsgICAgIC8vLzwgSWRlbnRpZmllcyBob3N0bmFtZSB0byBiZSBmb3VuZC4gSXQgc2hhbGwgbm90IGNoYW5nZSBkdXJpbmcgcmVzb2x2aW5nLgorICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKm1NZXNzYWdlSW5mbzsgIC8vLzwgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyByZWxhdGVkIHdpdGggRE5TIFNlcnZlci4KKyAgICBib29sICAgICAgICAgICAgICAgICBtTm9SZWN1cnNpb247ICAvLy88IElmIGNsZWFyZWQsIGl0IGRpcmVjdHMgbmFtZSBzZXJ2ZXIgdG8gcHVyc3VlIHRoZSBxdWVyeSByZWN1cnNpdmVseS4KK30gb3REbnNRdWVyeTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYSBETlMgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqIEBwYXJhbVtpbl0gIGFIb3N0bmFtZSAgSWRlbnRpZmllcyBob3N0bmFtZSByZWxhdGVkIHdpdGggRE5TIHJlc3BvbnNlLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICBBIHBvaW50ZXIgdG8gdGhlIElQdjYgYWRkcmVzcyByZWNlaXZlZCBpbiBETlMgcmVzcG9uc2UuIE1heSBiZSBudWxsLgorICogQHBhcmFtW2luXSAgYVR0bCAgICAgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgdGhlIHJlc291cmNlIHJlY29yZCBtYXkgYmUgY2FjaGVkLgorICogQHBhcmFtW2luXSAgYVJlc3VsdCAgICBBIHJlc3VsdCBvZiB0aGUgRE5TIHRyYW5zYWN0aW9uLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgIEEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSBhbmQgSVB2NiBhZGRyZXNzIGlzIHByb3ZpZGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBAcCBhQWRkcmVzcy4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0FCT1JUICAgICAgICAgICAgIEEgRE5TIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGJ5IHN0YWNrLgorICogQHJldHZhbCAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCAgTm8gRE5TIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkIHdpdGhpbiB0aW1lb3V0LgorICogQHJldHZhbCAgT1RfRVJST1JfTk9UX0ZPVU5EICAgICAgICAgQSByZXNwb25zZSB3YXMgcmVjZWl2ZWQgYnV0IG5vIElQdjYgYWRkcmVzcyBoYXMgYmVlbiBmb3VuZC4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgICAgIEEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGJ1dCBzdGF0dXMgY29kZSBpcyBkaWZmZXJlbnQgdGhhbiBzdWNjZXNzLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3REbnNSZXNwb25zZUhhbmRsZXIpKHZvaWQgKmFDb250ZXh0LCBjb25zdCBjaGFyICphSG9zdG5hbWUsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYVR0bCwgb3RFcnJvciBhUmVzdWx0KTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIEROUyBxdWVyeSBmb3IgQUFBQSAoSVB2NikgcmVjb3JkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVF1ZXJ5ICAgICAgQSBwb2ludGVyIHRvIHNwZWNpZnkgRE5TIHF1ZXJ5IHBhcmFtZXRlcnMuCisgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICoKKyAqLworb3RFcnJvciBvdERuc0NsaWVudFF1ZXJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3REbnNRdWVyeSAqYVF1ZXJ5LCBvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisjZW5kaWYKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRE5TX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvaWNtcDYuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9pY21wNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MjdhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvaWNtcDYuaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBpY21wNiBmdW5jdGlvbnMgZm9yIHRoZSBPcGVuVGhyZWFkIGxpYnJhcnkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0lDTVA2X0hfCisjZGVmaW5lIE9QRU5USFJFQURfSUNNUDZfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1pY21wNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIElDTVB2NiBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogSUNNUHY2IE1lc3NhZ2UgVHlwZXMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBvdEljbXA2VHlwZQoreworICAgIE9UX0lDTVA2X1RZUEVfRFNUX1VOUkVBQ0ggID0gMSwgICAgIC8vLzwgRGVzdGluYXRpb24gVW5yZWFjaGFibGUKKyAgICBPVF9JQ01QNl9UWVBFX0VDSE9fUkVRVUVTVCA9IDEyOCwgICAvLy88IEVjaG8gUmVxdWVzdAorICAgIE9UX0lDTVA2X1RZUEVfRUNIT19SRVBMWSAgID0gMTI5LCAgIC8vLzwgRWNobyBSZXBseQorfSBvdEljbXA2VHlwZTsKKworLyoqCisgKiBJQ01QdjYgTWVzc2FnZSBDb2RlcworICoKKyAqLwordHlwZWRlZiBlbnVtIG90SWNtcDZDb2RlCit7CisgICAgT1RfSUNNUDZfQ09ERV9EU1RfVU5SRUFDSF9OT19ST1VURSA9IDAsICAvLy88IERlc3RpbmF0aW9uIFVucmVhY2hhYmxlIE5vIFJvdXRlCit9IG90SWNtcDZDb2RlOworCisjZGVmaW5lIE9UX0lDTVA2X0hFQURFUl9EQVRBX1NJWkUgIDQgICAvLy88IFNpemUgb2YgYW4gbWVzc2FnZSBzcGVjaWZpYyBkYXRhIG9mIElDTVB2NiBIZWFkZXIuCisKKy8qKgorICogQHN0cnVjdCBvdEljbXA2SGVhZGVyCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhbiBJQ01QdjYgaGVhZGVyLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK3N0cnVjdCBvdEljbXA2SGVhZGVyCit7CisgICAgdWludDhfdCAgICAgIG1UeXBlOyAgICAgIC8vLzwgVHlwZQorICAgIHVpbnQ4X3QgICAgICBtQ29kZTsgICAgICAvLy88IENvZGUKKyAgICB1aW50MTZfdCAgICAgbUNoZWNrc3VtOyAgLy8vPCBDaGVja3N1bQorICAgIHVuaW9uCisgICAgeworICAgICAgICB1aW50OF90ICBtOFtPVF9JQ01QNl9IRUFERVJfREFUQV9TSVpFIC8gc2l6ZW9mKHVpbnQ4X3QpXTsKKyAgICAgICAgdWludDE2X3QgbTE2W09UX0lDTVA2X0hFQURFUl9EQVRBX1NJWkUgLyBzaXplb2YodWludDE2X3QpXTsKKyAgICAgICAgdWludDMyX3QgbTMyW09UX0lDTVA2X0hFQURFUl9EQVRBX1NJWkUgLyBzaXplb2YodWludDMyX3QpXTsKKyAgICB9IG1EYXRhOyAgICAgICAgICAgICAgICAgLy8vPCBNZXNzYWdlLXNwZWNpZmljIGRhdGEKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIElDTVB2NiBoZWFkZXIuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEljbXA2SGVhZGVyIG90SWNtcDZIZWFkZXI7CisKKy8qKgorICogVGhpcyBjYWxsYmFjayBhbGxvd3MgT3BlblRocmVhZCB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIG9mIGEgcmVjZWl2ZWQgSUNNUHY2IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgbWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSBwb2ludGVyIHRvIG1lc3NhZ2UgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIEBwIGFNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUljbXBIZWFkZXIgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIElDTVB2NiBoZWFkZXIuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdEljbXA2UmVjZWl2ZUNhbGxiYWNrKSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJY21wNkhlYWRlciAqYUljbXBIZWFkZXIpOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGltcGxlbWVudHMgSUNNUHY2IG1lc3NhZ2UgaGFuZGxlci4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SWNtcDZIYW5kbGVyCit7CisgICAgb3RJY21wNlJlY2VpdmVDYWxsYmFjayAgbVJlY2VpdmVDYWxsYmFjazsgIC8vLzwgVGhlIElDTVB2NiByZWNlaXZlZCBjYWxsYmFjaworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgKm1Db250ZXh0OyAgICAgICAgICAvLy88IEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICBzdHJ1Y3Qgb3RJY21wNkhhbmRsZXIgICptTmV4dDsgICAgICAgICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgbGlzdC4KK30gb3RJY21wNkhhbmRsZXI7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgSUNNUHY2IEVjaG8gcHJvY2Vzc2luZyBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIFRSVUUgICBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIEZBTFNFICBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGRpc2FibGVkLgorICoKKyAqLworYm9vbCBvdEljbXA2SXNFY2hvRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB3aGV0aGVyIG9yIG5vdCBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgdG8gZW5hYmxlIElDTVB2NiBFY2hvIHByb2Nlc3NpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK3ZvaWQgb3RJY21wNlNldEVjaG9FbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBoYW5kbGVyIHRvIHByb3ZpZGUgcmVjZWl2ZWQgSUNNUHY2IG1lc3NhZ2VzLgorICoKKyAqIEBub3RlIEEgaGFuZGxlciBzdHJ1Y3R1cmUgQHAgYUhhbmRsZXIgaGFzIHRvIGJlIHN0b3JlZCBpbiBwZXJzaXN0YW50IChzdGF0aWMpIG1lbW9yeS4KKyAqICAgICAgIE9wZW5UaHJlYWQgZG9lcyBub3QgbWFrZSBhIGNvcHkgb2YgaGFuZGxlciBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUhhbmRsZXIgIEEgcG9pbnRlciB0byBhIGhhbmRsZXIgY29uaXRhaW5pbmcgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbgorICogICAgICAgICAgICAgICAgICAgICAgIGFuIElDTVB2NiBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICoKKyAqLworb3RFcnJvciBvdEljbXA2UmVnaXN0ZXJIYW5kbGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RJY21wNkhhbmRsZXIgKmFIYW5kbGVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIElDTVB2NiBFY2hvIFJlcXVlc3QgdmlhIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgY29udGFpbmluZyB0aGUgSUNNUHY2IHBheWxvYWQuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIEEgcmVmZXJlbmNlIHRvIG1lc3NhZ2UgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIEBwIGFNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUlkZW50aWZpZXIgICBBbiBpZGVudGlmaWVyIHRvIGFpZCBpbiBtYXRjaGluZyBFY2hvIFJlcGxpZXMgdG8gdGhpcyBFY2hvIFJlcXVlc3QuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSB6ZXJvLgorICoKKyAqLworb3RFcnJvciBvdEljbXA2U2VuZEVjaG9SZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIHVpbnQxNl90IGFJZGVudGlmaWVyKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfSUNNUDZfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9pbnN0YW5jZS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2luc3RhbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0NmFkNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9pbnN0YW5jZS5oCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBJbnN0YW5jZSBBUEkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0lOU1RBTkNFX0hfCisjZGVmaW5lIE9QRU5USFJFQURfSU5TVEFOQ0VfSF8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLWluc3RhbmNlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIE9wZW5UaHJlYWQgSW5zdGFuY2UuCisgKgorICogQHsKKyAqCisgKi8KKworI2lmZGVmIE9URExMCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICoKKyAqIEByZXR2YWwgb3RBcGlJbnN0YW5jZSogIFRoZSBuZXcgT3BlblRocmVhZCBjb250ZXh0IHN0cnVjdHVyZS4KKyAqCisgKiBAc2Egb3RBcGlGaW5hbGl6ZQorICoKKyAqLworT1RBUEkgb3RBcGlJbnN0YW5jZSAqT1RDQUxMIG90QXBpSW5pdCh2b2lkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHVuaW5pdGlhbGl6ZXMgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBPcGVuVGhyZWFkIGlzIG5vIGxvbmdlciBpbiB1c2UuCisgKgorICogQHBhcmFtW2luXSAgYUFwaUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBhcGkgaW5zdGFuY2UuCisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdEFwaUZpbmFsaXplKG90QXBpSW5zdGFuY2UgKmFBcGlJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbnkgbWVtb3J5IHJldHVybmVkL2FsbG9jYXRlZCBieSB0aGUgbGlicmFyeS4KKyAqCisgKiBAcGFyYW1baW5dIGFNZW0gIFRoZSBtZW1vcnkgdG8gZnJlZS4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90RnJlZU1lbW9yeShjb25zdCB2b2lkICphTWVtKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHRvIG5vdGlmeSBhZGRpdGlvbiBhbmQgcmVtb3ZhbCBvZiBPcGVuVGhyZWFkIGRldmljZXMuCisgKgorICogQHBhcmFtW2luXSAgYUFkZGVkICAgICAgIEEgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkZXZpY2Ugd2FzIGFkZGVkIG9yIHJlbW92ZWQuCisgKiBAcGFyYW1baW5dICBhRGV2aWNlR3VpZCAgQSBHVUlEIGluZGljYXRpbmcgd2hpY2ggZGV2aWNlIHN0YXRlIGNoYW5nZWQuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3REZXZpY2VBdmFpbGFiaWxpdHlDaGFuZ2VkQ2FsbGJhY2spKGJvb2wgYUFkZGVkLCBjb25zdCBHVUlEICphRGV2aWNlR3VpZCwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gaW5kaWNhdGUgT3BlblRocmVhZCBkZXZpY2VzIGNvbWUgYW5kIGdvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFBcGlJbnN0YW5jZSAgICAgVGhlIE9wZW5UaHJlYWQgYXBpIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIHRoZSBzdGF0ZSBjaGFuZ2VzLgorICogQHBhcmFtW2luXSAgYUNvbnRleHRDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90U2V0RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKG90QXBpSW5zdGFuY2UgKmFBcGlJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBxdWVyeXMgdGhlIGxpc3Qgb2YgT3BlblRocmVhZCBkZXZpY2UgY29udGV4dHMgb24gdGhlIHN5c3RlbS4KKyAqCisgKiBAcGFyYW1baW5dICBhQXBpSW5zdGFuY2UgICAgIFRoZSBPcGVuVGhyZWFkIGFwaSBpbnN0YW5jZS4KKyAqCisgKiBAc2Egb3RGcmVlTWVtb3J5CisgKi8KK09UQVBJIG90RGV2aWNlTGlzdCAqT1RDQUxMIG90RW51bWVyYXRlRGV2aWNlcyhvdEFwaUluc3RhbmNlICphQXBpSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gT3BlblRocmVhZCBjb250ZXh0IGZvciBhIGRldmljZS4KKyAqCisgKiBAcGFyYW1baW5dICBhQXBpSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGFwaSBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFEZXZpY2VHdWlkICAgVGhlIGRldmljZSBndWlkIHRvIGNyZWF0ZSBhbiBPcGVuVGhyZWFkIGNvbnRleHQgZm9yLgorICoKKyAqIEByZXR2YWwgb3RJbnN0YW5jZSogIFRoZSBuZXcgT3BlblRocmVhZCBkZXZpY2UgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlLgorICoKKyAqIEBzYSBvdEZyZWVNZW1vcnkKKyAqCisgKi8KK09UQVBJIG90SW5zdGFuY2UgKk9UQ0FMTCBvdEluc3RhbmNlSW5pdChvdEFwaUluc3RhbmNlICphQXBpSW5zdGFuY2UsIGNvbnN0IEdVSUQgKmFEZXZpY2VHdWlkKTsKKworLyoqCisgKiBUaGlzIHF1ZXJpZXMgdGhlIFdpbmRvd3MgZGV2aWNlL2ludGVyZmFjZSBHVUlEIGZvciB0aGUgb3RDb250ZXh0LgorICoKKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgIFRoZSBPcGVuVGhyZWFkIGNvbnRleHQgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgR1VJRCAgVGhlIGRldmljZSBHVUlELgorICoKKyAqLworT1RBUEkgR1VJRCBPVENBTEwgb3RHZXREZXZpY2VHdWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBxdWVyaWVzIHRoZSBXaW5kb3dzIGRldmljZS9pbnRlcmZhY2UgSWZJbmRleCBmb3IgdGhlIG90Q29udGV4dC4KKyAqCisgKiBAcGFyYW1baW5dIGFDb250ZXh0ICBUaGUgT3BlblRocmVhZCBjb250ZXh0IHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dmFsIHVpbnQzMl90ICBUaGUgZGV2aWNlIElmSW5kZXguCisgKgorICovCitPVEFQSSB1aW50MzJfdCBPVENBTEwgb3RHZXREZXZpY2VJZkluZGV4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBxdWVyaWVzIHRoZSBXaW5kb3dzIENvbXBhcnRtZW50IElEIGZvciB0aGUgb3RDb250ZXh0LgorICoKKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgIFRoZSBPcGVuVGhyZWFkIGNvbnRleHQgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgdWludDMyX3QgIFRoZSBjb21wYXJ0bWVudCBJRC4KKyAqCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdEdldENvbXBhcnRtZW50SWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworI2Vsc2UgLy8gT1RETEwKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBPcGVuVGhyZWFkIGxpYnJhcnkuCisgKgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgT3BlblRocmVhZCBhbmQgcHJlcGFyZXMgaXQgZm9yIHN1YnNlcXVlbnQgT3BlblRocmVhZCBBUEkgY2FsbHMuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUKKyAqIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRvIE9wZW5UaHJlYWQuIEJ5IGRlZmF1bHQsIE9wZW5UaHJlYWQgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlICdlbmFibGVkJyBzdGF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBhbmQgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIHN1cHBvcnQgZm9yIG11bHRpcGxlIE9wZW5UaHJlYWQgaW5zdGFuY2VzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgICBhSW5zdGFuY2VCdWZmZXIgICAgICBUaGUgYnVmZmVyIGZvciBPcGVuVGhyZWFkIHRvIHVzZSBmb3IgYWxsb2NhdGluZyB0aGUgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5vdXRdIGFJbnN0YW5jZUJ1ZmZlclNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBhSW5zdGFuY2VCdWZmZXIuIE9uIG91dHB1dCwgaWYgbm90IGVub3VnaCBzcGFjZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RJbnN0YW5jZSwgdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBmb3Igb3RJbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIG90SW5zdGFuY2UqICBUaGUgbmV3IE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIEBzYSBvdENvbnRleHRGaW5hbGl6ZQorICoKKyAqLworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXQodm9pZCAqYUluc3RhbmNlQnVmZmVyLCBzaXplX3QgKmFJbnN0YW5jZUJ1ZmZlclNpemUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIE9wZW5UaHJlYWQgbGlicmFyeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIE9wZW5UaHJlYWQgYW5kIHByZXBhcmVzIGl0IGZvciBzdWJzZXF1ZW50IE9wZW5UaHJlYWQgQVBJIGNhbGxzLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlCisgKiBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBjYWxscyB0byBPcGVuVGhyZWFkLiBCeSBkZWZhdWx0LCBPcGVuVGhyZWFkIGlzIGluaXRpYWxpemVkIGluIHRoZSAnZW5hYmxlZCcgc3RhdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBzdXBwb3J0IGZvciBtdWx0aXBsZSBPcGVuVGhyZWFkIGluc3RhbmNlcyBpcyBkaXNhYmxlZC4KKyAqCisgKiBAcmV0dmFsIFRoZSBuZXcgc2luZ2xlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXRTaW5nbGUodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIE9wZW5UaHJlYWQgaXMgbm8gbG9uZ2VyIGluIHVzZS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKi8KK3ZvaWQgb3RJbnN0YW5jZUZpbmFsaXplKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKyNlbmRpZiAvLyBPVERMTAorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgdG8gbm90aWZ5IGNlcnRhaW4gY29uZmlndXJhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiBPcGVuVGhyZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGbGFncyAgICBBIGJpdC1maWVsZCBpbmRpY2F0aW5nIHNwZWNpZmljIHN0YXRlIHRoYXQgaGFzIGNoYW5nZWQuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RTdGF0ZUNoYW5nZWRDYWxsYmFjaykodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBpbmRpY2F0ZSB3aGVuIGNlcnRhaW4gY29uZmlndXJhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiBPcGVuVGhyZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIGNoYW5nZXMuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgQWRkZWQgdGhlIGNhbGxiYWNrIHRvIHRoZSBsaXN0IG9mIGNhbGxiYWNrcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgQ291bGQgbm90IGFkZCB0aGUgY2FsbGJhY2sgZHVlIHRvIHJlc291cmNlIGNvbnN0cmFpbnRzLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgY2FsbGJhY2sgdG8gaW5kaWNhdGUgd2hlbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgY2hhbmdlcyB3aXRoaW4gT3BlblRocmVhZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggY2VydGFpbiBjb25maWd1cmF0aW9uIG9yIHN0YXRlIGNoYW5nZXMuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90UmVtb3ZlU3RhdGVDaGFuZ2VDYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgcGxhdGZvcm0gcmVzZXQuCisgKgorICogVGhlIHJlc2V0IHByb2Nlc3MgZW5zdXJlcyB0aGF0IGFsbCB0aGUgT3BlblRocmVhZCBzdGF0ZS9pbmZvIChzdG9yZWQgaW4gdm9sYXRpbGUgbWVtb3J5KSBpcyBlcmFzZWQuIE5vdGUgdGhhdCB0aGUKKyAqIGBvdFBsYXRmb3JtUmVzZXRgIGRvZXMgbm90IGVyYXNlIGFueSBwZXJzaXN0ZW50IHN0YXRlL2luZm8gc2F2ZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90SW5zdGFuY2VSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGRlbGV0ZXMgYWxsIHRoZSBzZXR0aW5ncyBzdG9yZWQgb24gbm9uLXZvbGF0aWxlIG1lbW9yeSwgYW5kIHRoZW4gdHJpZ2dlcnMgcGxhdGZvcm0gcmVzZXQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdEluc3RhbmNlRmFjdG9yeVJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlcmFzZXMgYWxsIHRoZSBPcGVuVGhyZWFkIHBlcnNpc3RlbnQgaW5mbyAobmV0d29yayBzZXR0aW5ncykgc3RvcmVkIG9uIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgKiBFcmFzZSBpcyBzdWNjZXNzZnVsIG9ubHkgaWYgdGhlIGRldmljZSBpcyBpbiBgZGlzYWJsZWRgIHN0YXRlL3JvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgQWxsIHBlcnNpc3RlbnQgaW5mby9zdGF0ZSB3YXMgZXJhc2VkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgRGV2aWNlIGlzIG5vdCBpbiBgZGlzYWJsZWRgIHN0YXRlL3JvbGUuCisgKgorICovCitvdEVycm9yIG90SW5zdGFuY2VFcmFzZVBlcnNpc3RlbnRJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IGR5bmFtaWMgbG9nIGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyB0aGUgY3VycmVudGx5IHNldCBkeW5hbWljIGxvZyBsZXZlbC4KKyAqCisgKi8KK290TG9nTGV2ZWwgb3RHZXREeW5hbWljTG9nTGV2ZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGR5bmFtaWMgbG9nIGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFMb2dMZXZlbCBUaGUgZHluYW1pYyBsb2cgbGV2ZWwuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICAgVGhlIGxvZyBsZXZlbCB3YXMgY2hhbmdlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkUgICBUaGUgZHluYW1pYyBsb2cgbGV2ZWwgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChAc2EgYE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTGAgY29uZmlndXJhdGlvbiBvcHRpb24pLgorICoKKyAqLworb3RFcnJvciBvdFNldER5bmFtaWNMb2dMZXZlbChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TG9nTGV2ZWwgYUxvZ0xldmVsKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfSU5TVEFOQ0VfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9pcDYuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9pcDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDY0ZDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2lwNi5oCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBJUHY2IEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfSVA2X0hfCisjZGVmaW5lIE9QRU5USFJFQURfSVA2X0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktaXA2CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgSVB2NiBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBicmluZ3MgdXAgdGhlIElQdjYgaW50ZXJmYWNlLgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUvZGlzYWJsZSBJUHY2IGNvbW11bmljYXRpb24uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dIGFFbmFibGVkICBUUlVFIHRvIGVuYWJsZSBJUHY2LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBJUHY2IGludGVyZmFjZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGVuYWJsZWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdElwNlNldEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBpbnRlcmZhY2UgaXMgdXAuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBUUlVFICAgVGhlIElQdjYgaW50ZXJmYWNlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIEZBTFNFICBUaGUgSVB2NiBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdElwNklzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEFkZCBhIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgKgorICogVGhlIHBhc3NlZCBpbiBpbnN0YW5jZSBAcCBhQWRkcmVzcyB3aWxsIGJlIGNvcGllZCBieSB0aGUgVGhyZWFkIGludGVyZmFjZS4gVGhlIFRocmVhZCBpbnRlcmZhY2Ugb25seQorICogc3VwcG9ydHMgYSBmaXhlZCBudW1iZXIgb2YgZXh0ZXJuYWxseSBhZGRlZCB1bmljYXN0IGFkZHJlc3Nlcy4gU2VlIE9QRU5USFJFQURfQ09ORklHX01BWF9FWFRfSVBfQUREUlMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcG9pbnRlciB0byBhIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCAob3IgdXBkYXRlZCkgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIElQIEFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIE5ldHdvcmsgSW50ZXJmYWNlIGlzIGFscmVhZHkgc3RvcmluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGV4dGVybmFsIGFkZHJlc3Nlcy4KKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RJcDZBZGRVbmljYXN0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90TmV0aWZBZGRyZXNzICphQWRkcmVzcyk7CisKKy8qKgorICogUmVtb3ZlIGEgTmV0d29yayBJbnRlcmZhY2UgQWRkcmVzcyBmcm9tIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHBvaW50ZXIgdG8gYW4gSVAgQWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIElQIEFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgVGhlIElQIEFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIHdhcyBub3QgZm91bmQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90SXA2UmVtb3ZlVW5pY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKTsKKworLyoqCisgKiBHZXQgdGhlIGxpc3Qgb2YgSVB2NiBhZGRyZXNzZXMgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgTmV0d29yayBJbnRlcmZhY2UgQWRkcmVzcy4KKyAqLworT1RBUEkgY29uc3Qgb3ROZXRpZkFkZHJlc3MgKk9UQ0FMTCBvdElwNkdldFVuaWNhc3RBZGRyZXNzZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTdWJzY3JpYmUgdGhlIFRocmVhZCBpbnRlcmZhY2UgdG8gYSBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqCisgKiBUaGUgcGFzc2VkIGluIGluc3RhbmNlIEBwIGFBZGRyZXNzIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBUaHJlYWQgaW50ZXJmYWNlLiBUaGUgVGhyZWFkIGludGVyZmFjZSBvbmx5CisgKiBzdXBwb3J0cyBhIGZpeGVkIG51bWJlciBvZiBleHRlcm5hbGx5IGFkZGVkIG11bHRpY2FzdCBhZGRyZXNzZXMuIFNlZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX01VTFRJQ0FTVF9JUF9BRERSUy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSBwb2ludGVyIHRvIGFuIElQIEFkZHJlc3MuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdWJzY3JpYmVkIHRvIHRoZSBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgSVAgQWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3MgaXMgaW52YWxpZCBhZGRyZXNzLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBOZXR3b3JrIEludGVyZmFjZSBpcyBhbHJlYWR5IHN0b3JpbmcgdGhlIG1heGltdW0gYWxsb3dlZCBleHRlcm5hbCBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICovCitvdEVycm9yIG90SXA2U3Vic2NyaWJlTXVsdGljYXN0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpOworCisvKioKKyAqIFVuc3Vic2NyaWJlIHRoZSBUaHJlYWQgaW50ZXJmYWNlIHRvIGEgTmV0d29yayBJbnRlcmZhY2UgTXVsdGljYXN0IEFkZHJlc3MuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcG9pbnRlciB0byBhbiBJUCBBZGRyZXNzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIHRvIHRoZSBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgSVAgQWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3MgaXMgYW4gaW50ZXJuYWwgYWRkcmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBUaGUgSVAgQWRkcmVzcyBpbmRpY2F0ZWQgYnkgQHAgYUFkZHJlc3Mgd2FzIG5vdCBmb3VuZC4KKyAqLworb3RFcnJvciBvdElwNlVuc3Vic2NyaWJlTXVsdGljYXN0QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpOworCisvKioKKyAqIEdldCB0aGUgbGlzdCBvZiBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgc3Vic2NyaWJlZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBOZXR3b3JrIEludGVyZmFjZSBNdWx0aWNhc3QgQWRkcmVzcy4KKyAqLworY29uc3Qgb3ROZXRpZk11bHRpY2FzdEFkZHJlc3MgKm90SXA2R2V0TXVsdGljYXN0QWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQ2hlY2sgaWYgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZCBvbiB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHNhIG90SXA2U2V0TXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkCisgKi8KK2Jvb2wgb3RJcDZJc011bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEVuYWJsZSBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSBvbiB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZWQgICBUUlVFIHRvIGVuYWJsZSBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgbW9kZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzYSBvdElwNklzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkCisgKi8KK3ZvaWQgb3RJcDZTZXRNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHRvIGNyZWF0ZSBJUHY2IElJRCBkdXJpbmcgU0xBQUMgcHJvY2VkdXJlLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhQWRkcmVzcyAgIEEgcG9pbnRlciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBJUHY2IGFkZHJlc3MgZm9yIHdoaWNoIElJRCBpcyBiZWluZyBjcmVhdGVkLgorICogQHBhcmFtW2lub3V0XSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gY3JlYXRvci1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgdmFsaWQgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgIENyZWF0aW9uIG9mIHZhbGlkIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzIGZhaWxlZC4KKyAqCisgKi8KK3R5cGVkZWYgb3RFcnJvcigqb3RJcDZTbGFhY0lpZENyZWF0ZSkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBVcGRhdGUgYWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBJUHY2IGFkZHJlc3NlcyBmb3IgcHJlZml4ZXMgZnJvbSBjdXJyZW50IE5ldHdvcmsgRGF0YSB3aXRoIFNMQUFDIHByb2NlZHVyZS4KKyAqCisgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbm91dF0gIGFBZGRyZXNzZXMgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgSVB2NiBhZGRyZXNzZXMuCisgKiBAcGFyYW1baW5dICAgICBhTnVtQWRkcmVzc2VzICBUaGUgbnVtYmVyIG9mIHNsb3RzIGluIGFBZGRyZXNzZXMgYXJyYXkuCisgKiBAcGFyYW1baW5dICAgICBhSWlkQ3JlYXRlICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBjcmVhdGUgSVB2NiBJSURzLgorICogQHBhcmFtW2luXSAgICAgYUNvbnRleHQgICAgICAgQSBwb2ludGVyIHRvIGRhdGEgcGFzc2VkIHRvIGFJaWRDcmVhdGUgZnVuY3Rpb24uCisgKgorICovCit2b2lkIG90SXA2U2xhYWNVcGRhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICBvdElwNlNsYWFjSWlkQ3JlYXRlIGFJaWRDcmVhdGUsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBDcmVhdGUgcmFuZG9tIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgICBBIHBvaW50ZXIgdG8gdW51c2VkIGRhdGEuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBDcmVhdGVkIHZhbGlkIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICoKKyAqLworb3RFcnJvciBvdElwNkNyZWF0ZVJhbmRvbUlpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzc2VzLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogQ3JlYXRlIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzIHVzaW5nIGV4dGVuZGVkIE1BQyBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgQSBwb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIElQdjYgYWRkcmVzcyBmb3Igd2hpY2ggSUlEIGlzIGJlaW5nIGNyZWF0ZWQuCisgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgICBBIHBvaW50ZXIgdG8gdW51c2VkIGRhdGEuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBDcmVhdGVkIHZhbGlkIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICoKKyAqLworb3RFcnJvciBvdElwNkNyZWF0ZU1hY0lpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzc2VzLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogQ3JlYXRlIHNlbWFudGljYWxseSBvcGFxdWUgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhQWRkcmVzc2VzICBBIHBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzIGZvciB3aGljaCBJSUQgaXMgYmVpbmcgY3JlYXRlZC4KKyAqIEBwYXJhbVtpbm91dF0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhIG90U2VtYW50aWNhbGx5T3BhcXVlSWlkR2VuZXJhdG9yRGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgdmFsaWQgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgIENvdWxkIG5vdCBjcmVhdGUgdmFsaWQgSUlEIGZvciBnaXZlbiBJUHY2IGFkZHJlc3MuCisgKgorICovCitvdEVycm9yIG90SXA2Q3JlYXRlU2VtYW50aWNhbGx5T3BhcXVlSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzZXMsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBBbGxvY2F0ZSBhIG5ldyBtZXNzYWdlIGJ1ZmZlciBmb3Igc2VuZGluZyBhbiBJUHY2IG1lc3NhZ2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUxpbmtTZWN1cml0eUVuYWJsZWQgIFRSVUUgaWYgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlY3VyZWQgYXQgTGF5ZXIgMgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgb3IgTlVMTCBpZiBubyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBAc2Egb3RGcmVlTWVzc2FnZQorICovCitvdE1lc3NhZ2UgKm90SXA2TmV3TWVzc2FnZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUxpbmtTZWN1cml0eUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhbiBJUHY2IGRhdGFncmFtIGlzIHJlY2VpdmVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIElQdjYgZGF0YWdyYW0uCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdElwNlJlY2VpdmVDYWxsYmFjaykob3RNZXNzYWdlICphTWVzc2FnZSwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gcHJvdmlkZSByZWNlaXZlZCBJUHY2IGRhdGFncmFtcy4KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGlzIGNhbGxiYWNrIGRvZXMgbm90IHBhc3MgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYy4gIFNlZSBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkKCkgdG8KKyAqIGNoYW5nZSB0aGUgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBmaWx0ZXIgc2V0dGluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW4gSVB2NiBkYXRhZ3JhbSBpcyByZWNlaXZlZCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEBzYSBvdElwNklzUmVjZWl2ZUZpbHRlckVuYWJsZWQKKyAqIEBzYSBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkCisgKgorICovCit2b2lkIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RJcDZSZWNlaXZlQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBUaHJlYWQgY29udHJvbCB0cmFmZmljIGlzIGZpbHRlcmVkIG91dCB3aGVuIGRlbGl2ZXJpbmcgSVB2NiBkYXRhZ3JhbXMKKyAqIHZpYSB0aGUgY2FsbGJhY2sgc3BlY2lmaWVkIGluIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrKCkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zICBUUlVFIGlmIFRocmVhZCBjb250cm9sIHRyYWZmaWMgaXMgZmlsdGVyZWQgb3V0LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNhIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrCisgKiBAc2Egb3RJcDZTZXRSZWNlaXZlRmlsdGVyRW5hYmxlZAorICoKKyAqLworYm9vbCBvdElwNklzUmVjZWl2ZUZpbHRlckVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgd2hldGhlciBvciBub3QgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBpcyBmaWx0ZXJlZCBvdXQgd2hlbiBkZWxpdmVyaW5nIElQdjYgZGF0YWdyYW1zCisgKiB2aWEgdGhlIGNhbGxiYWNrIHNwZWNpZmllZCBpbiBvdElwNlNldFJlY2VpdmVDYWxsYmFjaygpLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIGlmIFRocmVhZCBjb250cm9sIHRyYWZmaWMgaXMgZmlsdGVyZWQgb3V0LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNhIG90SXA2U2V0UmVjZWl2ZUNhbGxiYWNrCisgKiBAc2Egb3RJc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgKgorICovCit2b2lkIG90SXA2U2V0UmVjZWl2ZUZpbHRlckVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIElQdjYgZGF0YWdyYW0gdmlhIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIElQdjYgZGF0YWdyYW0uCisgKgorICovCitvdEVycm9yIG90SXA2U2VuZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIHBvcnQgdG8gdGhlIGFsbG93ZWQgdW5zZWN1cmVkIHBvcnQgbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUG9ydCAgICAgVGhlIHBvcnQgdmFsdWUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBUaGUgcG9ydCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhbGxvd2VkIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgVGhlIHVuc2VjdXJlIHBvcnQgbGlzdCBpcyBmdWxsLgorICoKKyAqLworb3RFcnJvciBvdElwNkFkZFVuc2VjdXJlUG9ydChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQb3J0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBwb3J0IGZyb20gdGhlIGFsbG93ZWQgdW5zZWN1cmUgcG9ydCBsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQb3J0ICAgICBUaGUgcG9ydCB2YWx1ZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgVGhlIHBvcnQgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIGFsbG93ZWQgdW5zZWN1cmUgcG9ydCBsaXN0LgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZSBwb3J0IHdhcyBub3QgZm91bmQgaW4gdGhlIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAqCisgKi8KK290RXJyb3Igb3RJcDZSZW1vdmVVbnNlY3VyZVBvcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUG9ydCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICoKKyAqIEBub3RlIFBvcnQgdmFsdWUgMCBpcyB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWQgZW50cnkuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtvdXRdICBhTnVtRW50cmllcyAgVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBsaXN0LgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICoKKyAqLworY29uc3QgdWludDE2X3QgKm90SXA2R2V0VW5zZWN1cmVQb3J0cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFOdW1FbnRyaWVzKTsKKworLyoqCisgKiBUZXN0IGlmIHR3byBJUHY2IGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUuCisgKgorICogQHBhcmFtW2luXSAgYSAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBJUHY2IGFkZHJlc3MgdG8gY29tcGFyZS4KKyAqIEBwYXJhbVtpbl0gIGIgIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIElQdjYgYWRkcmVzcyB0byBjb21wYXJlLgorICoKKyAqIEByZXR2YWwgVFJVRSAgIFRoZSB0d28gSVB2NiBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lLgorICogQHJldHZhbCBGQUxTRSAgVGhlIHR3byBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IHRoZSBzYW1lLgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdElwNklzQWRkcmVzc0VxdWFsKGNvbnN0IG90SXA2QWRkcmVzcyAqYSwgY29uc3Qgb3RJcDZBZGRyZXNzICpiKTsKKworLyoqCisgKiBDb252ZXJ0IGEgaHVtYW4tcmVhZGFibGUgSVB2NiBhZGRyZXNzIHN0cmluZyBpbnRvIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gICBhU3RyaW5nICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgQSBwb2ludGVyIHRvIGFuIElQdjYgYWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHBhcnNlZCB0aGUgc3RyaW5nLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEZhaWxlZCB0byBwYXJzZSB0aGUgc3RyaW5nLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKmFTdHJpbmcsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJlZml4IG1hdGNoIGxlbmd0aCAoYml0cykgZm9yIHR3byBJUHY2IGFkZHJlc3Nlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhRmlyc3QgICBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IElQdjYgYWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFTZWNvbmQgIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIElQdjYgYWRkcmVzcy4KKyAqCisgKiBAcmV0dXJucyAgVGhlIHByZWZpeCBtYXRjaCBsZW5ndGggaW4gYml0cy4KKyAqCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90SXA2UHJlZml4TWF0Y2goY29uc3Qgb3RJcDZBZGRyZXNzICphRmlyc3QsIGNvbnN0IG90SXA2QWRkcmVzcyAqYVNlY29uZCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0lQNl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL2phbV9kZXRlY3Rpb24uaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9qYW1fZGV0ZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4ZjU5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9qYW1fZGV0ZWN0aW9uLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIE9wZW5UaHJlYWQgQVBJIGZvciBqYW0gZGV0ZWN0aW9uIGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0pBTV9ERVRFQ1RJT05fSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9KQU1fREVURUNUSU9OX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLWphbS1kZXRlY3Rpb24KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBzaWduYWwgamFtbWluZyBkZXRlY3Rpb24gZmVhdHVyZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgaWYgc2lnbmFsIGphbSBkZXRlY3Rpb24gaXMgZW5hYmxlZCBhbmQgYSBqYW0gaXMgZGV0ZWN0ZWQuCisgKgorICogQHBhcmFtW2luXSAgYUphbVN0YXRlIEN1cnJlbnQgamFtIHN0YXRlIChgdHJ1ZWAgaWYgamFtIGlzIGRldGVjdGVkLCBgZmFsc2VgIG90aGVyd2lzZSkuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdEphbURldGVjdGlvbkNhbGxiYWNrKShib29sIGFKYW1TdGF0ZSwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFNldCB0aGUgSmFtIERldGVjdGlvbiBSU1NJIFRocmVzaG9sZCAoaW4gZEJtKS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUnNzaVRocmVzaG9sZCAgVGhlIFJTU0kgdGhyZXNob2xkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSB0aHJlc2hvbGQuCisgKgorICovCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUnNzaVRocmVzaG9sZCk7CisKKy8qKgorICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFJTU0kgVGhyZXNob2xkIChpbiBkQm0pLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBSU1NJIFRocmVzaG9sZC4KKyAqLworaW50OF90IG90SmFtRGV0ZWN0aW9uR2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgSmFtIERldGVjdGlvbiBEZXRlY3Rpb24gV2luZG93IChpbiBzZWNvbmRzKS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFXaW5kb3cgICAgICAgICAgICAgIFRoZSBKYW0gRGV0ZWN0aW9uIHdpbmRvdyAodmFsaWQgcmFuZ2UgaXMgMSB0byA2MykKKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgd2luZG93LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBnaXZlbiBpbnB1dCBwYXJhbWV0ZXIgbm90IHdpdGhpbiB2YWxpZCByYW5nZSAoMS02MykKKyAqCisgKi8KK290RXJyb3Igb3RKYW1EZXRlY3Rpb25TZXRXaW5kb3cob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFXaW5kb3cpOworCisvKioKKyAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBEZXRlY3Rpb24gV2luZG93IChpbiBzZWNvbmRzKS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBXaW5kb3cuCisgKi8KK3VpbnQ4X3Qgb3RKYW1EZXRlY3Rpb25HZXRXaW5kb3cob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIEphbSBEZXRlY3Rpb24gQnVzeSBQZXJpb2QgKGluIHNlY29uZHMpLgorICoKKyAqIFRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluIHRoZSBkZXRlY3Rpb24gd2luZG93IHdoZXJlIHRoZSBSU1NJIG11c3QgYmUgYWJvdmUKKyAqIHRocmVzaG9sZCB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFCdXN5UGVyaW9kICAgICAgICAgIFRoZSBKYW0gRGV0ZWN0aW9uIGJ1c3kgcGVyaW9kIChzaG91bGQgYmUgbm9uLXplcm8gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gSmFtIERldGVjdGlvbiBXaW5kb3cpCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHdpbmRvdy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgZ2l2ZW4gaW5wdXQgaXMgbm90IHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuCisgKgorICovCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0QnVzeVBlcmlvZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUJ1c3lQZXJpb2QpOworCisvKioKKyAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBCdXN5IFBlcmlvZCAoaW4gc2Vjb25kcykKKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBCdXN5IFBlcmlvZAorICovCit1aW50OF90IG90SmFtRGV0ZWN0aW9uR2V0QnVzeVBlcmlvZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFN0YXJ0IHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBub3RpZnkgb2YgamFtbWluZyBzdGF0ZSBjaGFuZ2UuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgamFtbWluZyBkZXRlY3Rpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICBKYW0gZGV0ZWN0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLgorICoKKyAqLworb3RFcnJvciBvdEphbURldGVjdGlvblN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RKYW1EZXRlY3Rpb25DYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBTdG9wIHRoZSBqYW1taW5nIGRldGVjdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgamFtbWluZyBkZXRlY3Rpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICBKYW0gZGV0ZWN0aW9uIGlzIGFscmVhZHkgc3RvcHBlZC4KKyAqCisgKi8KK290RXJyb3Igb3RKYW1EZXRlY3Rpb25TdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZCkKKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBzdGF0dXMgKHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlKS4KKyAqLworYm9vbCBvdEphbURldGVjdGlvbklzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgSmFtIERldGVjdGlvbiBTdGF0ZQorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBKYW0gRGV0ZWN0aW9uIHN0YXRlIChgdHJ1ZWAgamFtIGlzIGRldGVjdGVkLCBgZmFsc2UnIG90aGVyd2lzZSkuCisgKi8KK2Jvb2wgb3RKYW1EZXRlY3Rpb25HZXRTdGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCBoaXN0b3J5IGJpdG1hcC4KKyAqCisgKiBUaGlzIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgc3RhdGUgb2YgamFtbWluZyBkZXRlY3Rpb24KKyAqIG1vZHVsZSBmb3IgbW9uaXRvcmluZy9kZWJ1Z2dpbmcgcHVycG9zZS4gSXQgcmV0dXJucyBhIDY0LWJpdCB2YWx1ZSB3aGVyZQorICogZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lIHNlY29uZCBpbnRlcnZhbCBzdGFydGluZyB3aXRoIGJpdCAwIGZvciB0aGUKKyAqIG1vc3QgcmVjZW50IGludGVydmFsIGFuZCBiaXQgNjMgZm9yIHRoZSBvbGRlc3QgaW50ZXJ2YWxzICg2MyBzZWMgZWFybGllcikuCisgKiBUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZSBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgb2JzZXJ2ZWQvZGV0ZWN0ZWQKKyAqIGhpZ2ggc2lnbmFsIGxldmVsIGR1cmluZyB0aGUgY29ycmVzcG9uZGluZyBvbmUgc2Vjb25kIGludGVydmFsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGhpc3RvcnkgYml0bWFwLgorICovCit1aW50NjRfdCBvdEphbURldGVjdGlvbkdldEhpc3RvcnlCaXRtYXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0pBTV9ERVRFQ1RJT05fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9qb2luZXIuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9qb2luZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZkMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL2pvaW5lci5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIFRocmVhZCBKb2luZXIgcm9sZS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfSk9JTkVSX0hfCisjZGVmaW5lIE9QRU5USFJFQURfSk9JTkVSX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1qb2luZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciB0aGUgVGhyZWFkIEpvaW5lciByb2xlLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB0byBub3RpZnkgdGhlIGNvbXBsZXRpb24gb2YgYSBqb2luIG9wZXJhdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgT1RfRVJST1JfTk9ORSBpZiB0aGUgam9pbiBwcm9jZXNzIHN1Y2NlZWRlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICBPVF9FUlJPUl9TRUNVUklUWSBpZiB0aGUgam9pbiBwcm9jZXNzIGZhaWxlZCBkdWUgdG8gc2VjdXJpdHkgY3JlZGVudGlhbHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgT1RfRVJST1JfTk9UX0ZPVU5EIGlmIG5vIGpvaW5hYmxlIG5ldHdvcmsgd2FzIGRpc2NvdmVyZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCBpZiBhIHJlc3BvbnNlIHRpbWVkIG91dC4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoT1RDQUxMICpvdEpvaW5lckNhbGxiYWNrKShvdEVycm9yIGFFcnJvciwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgVGhyZWFkIEpvaW5lciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVBTS2QgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBQU0tkLgorICogQHBhcmFtW2luXSAgYVByb3Zpc2lvbmluZ1VybCAgQSBwb2ludGVyIHRvIHRoZSBQcm92aXNpb25pbmcgVVJMIChtYXkgYmUgTlVMTCkuCisgKiBAcGFyYW1baW5dICBhVmVuZG9yTmFtZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFZlbmRvciBOYW1lIChtdXN0IGJlIHN0YXRpYykuCisgKiBAcGFyYW1baW5dICBhVmVuZG9yTW9kZWwgICAgICBBIHBvaW50ZXIgdG8gdGhlIFZlbmRvciBNb2RlbCAobXVzdCBiZSBzdGF0aWMpLgorICogQHBhcmFtW2luXSAgYVZlbmRvclN3VmVyc2lvbiAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgU1cgVmVyc2lvbiAobXVzdCBiZSBzdGF0aWMpLgorICogQHBhcmFtW2luXSAgYVZlbmRvckRhdGEgICAgICAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgRGF0YSAobXVzdCBiZSBzdGF0aWMpLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgam9pbiBvcGVyYXRpb24gY29tcGxldGVzLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhUFNLZCBvciBAcCBhUHJvdmlzaW9uaW5nVXJsIGlzIGludmFsaWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdEpvaW5lclN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgY2hhciAqYVBTS2QsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFWZW5kb3JOYW1lLCBjb25zdCBjaGFyICphVmVuZG9yTW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFWZW5kb3JTd1ZlcnNpb24sIGNvbnN0IGNoYXIgKmFWZW5kb3JEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIFRocmVhZCBKb2luZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RKb2luZXJTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBlbmQgb2YgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9KT0lORVJfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9saW5rLmggYi9pbmNsdWRlL29wZW50aHJlYWQvbGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMWRjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvbGluay5oCkBAIC0wLDAgKzEsNTk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBJRUVFIDgwMi4xNS40IExpbmsgTGF5ZXIgQVBJLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9MSU5LX0hfCisjZGVmaW5lIE9QRU5USFJFQURfTElOS19IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1saW5rLWxpbmsKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29udHJvbCBsaW5rLWxheWVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIGR1cmluZyBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuIHdoZW4gYW4gSUVFRSA4MDIuMTUuNCBCZWFjb24gaXMgcmVjZWl2ZWQgb3IKKyAqIHRoZSBzY2FuIGNvbXBsZXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgQSB2YWxpZCBwb2ludGVyIHRvIHRoZSBiZWFjb24gaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIHRoZSBhY3RpdmUgc2NhbiBjb21wbGV0ZXMuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RIYW5kbGVBY3RpdmVTY2FuUmVzdWx0KShvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWxzICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuIChlLmcuIE9UX0NIQU5ORUxfMTFfTUFTSykuCisgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICAgICBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgc2Nhbm5pbmcgZWFjaCBjaGFubmVsLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkIG9uIHJlY2VpdmluZyBhIGJlYWNvbiBvciBzY2FuIGNvbXBsZXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQWNjZXB0ZWQgdGhlIEFjdGl2ZSBTY2FuIHJlcXVlc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgIEFscmVhZHkgcGVyZm9ybWluZyBhbiBBY3RpdmUgU2Nhbi4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TGlua0FjdGl2ZVNjYW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyB0cnVlIGlmIGFuIElFRUUgODAyLjE1LjQgQWN0aXZlIFNjYW4gaXMgaW4gcHJvZ3Jlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RMaW5rSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgZHVyaW5nIGFuIElFRUUgODAyLjE1LjQgRW5lcmd5IFNjYW4gd2hlbiB0aGUgcmVzdWx0IGZvciBhIGNoYW5uZWwgaXMgcmVhZHkgb3IgdGhlCisgKiBzY2FuIGNvbXBsZXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgQSB2YWxpZCBwb2ludGVyIHRvIHRoZSBlbmVyZ3kgc2NhbiByZXN1bHQgaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIHRoZSBlbmVyZ3kgc2NhbiBjb21wbGV0ZXMuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKE9UQ0FMTCAqb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0KShvdEVuZXJneVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhbiBJRUVFIDgwMi4xNS40IEVuZXJneSBTY2FuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWxzICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBvbiB3aGljaCBjaGFubmVscyB0byBwZXJmb3JtIGVuZXJneSBzY2FuLgorICogQHBhcmFtW2luXSAgYVNjYW5EdXJhdGlvbiAgICAgVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwZW5kIHNjYW5uaW5nIGVhY2ggY2hhbm5lbC4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBwYXNzIG9uIHNjYW4gcmVzdWx0IG9uIGluZGljYXRlIHNjYW4gY29tcGxldGlvbi4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQWNjZXB0ZWQgdGhlIEVuZXJneSBTY2FuIHJlcXVlc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgIENvdWxkIG5vdCBzdGFydCB0aGUgZW5lcmd5IHNjYW4uCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtFbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0IGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gSUVFRSA4MDIuMTUuNCBFbmVyZ3kgU2NhbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgdHJ1ZSBpZiBhbiBJRUVFIDgwMi4xNS40IEVuZXJneSBTY2FuIGlzIGluIHByb2dyZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdExpbmtJc0VuZXJneVNjYW5JblByb2dyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbnF1ZXVlcyBhbiBJRUVFIDgwMi4xNS40IERhdGEgUmVxdWVzdCBtZXNzYWdlIGZvciB0cmFuc21pc3Npb24uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIGFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICAgIEFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UgaXMgYWxyZWFkeSBlbnF1ZXVlZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgRGV2aWNlIGlzIG5vdCBpbiByeC1vZmYtd2hlbi1pZGxlIG1vZGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgIEluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgYXZhaWxhYmxlLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2VuZERhdGFSZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gSUVFRSA4MDIuMTUuNCBNQUMgaXMgaW4gdGhlIHRyYW5zbWl0IHN0YXRlLgorICoKKyAqIE1BQyBtb2R1bGUgaXMgaW4gdGhlIHRyYW5zbWl0IHN0YXRlIGR1cmluZyBDU01BL0NBIHByb2NlZHVyZSwgQ0NBLCBEYXRhLCBCZWFjb24gb3IgRGF0YSBSZXF1ZXN0IGZyYW1lIHRyYW5zbWlzc2lvbgorICogYW5kIHJlY2VpdmluZyBhbiBBQ0sgb2YgYSB0cmFuc21pdHRlZCBmcmFtZS4gTUFDIG1vZHVsZSBpcyBub3QgaW4gdGhlIHRyYW5zbWl0IHN0YXRlIGR1cmluZyB0cmFuc21pc3Npb24gb2YgYW4gQUNLCisgKiBmcmFtZSBvciBhIEJlYWNvbiBSZXF1ZXN0IGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIHRydWUgaWYgYW4gSUVFRSA4MDIuMTUuNCBNQUMgaXMgaW4gdGhlIHRyYW5zbWl0IHN0YXRlLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdExpbmtJc0luVHJhbnNtaXRTdGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgSUVFRSA4MDIuMTUuNCBjaGFubmVsLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IGNoYW5uZWwuCisgKgorICogQHNhIG90TGlua1NldENoYW5uZWwKKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RMaW5rR2V0Q2hhbm5lbChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgSUVFRSA4MDIuMTUuNCBjaGFubmVsCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIElFRUUgODAyLjE1LjQgY2hhbm5lbC4KKyAqCisgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBjaGFubmVsLgorICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgSWYgQHAgYUNobmFuZWwgaXMgbm90IGluIHRoZSByYW5nZSBbMTEsIDI2XS4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRocmVhZCBwcm90b2NvbHMgYXJlIGVuYWJsZWQuCisgKgorICogQHNhIG90TGlua0dldENoYW5uZWwKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2V0Q2hhbm5lbChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpOworCisvKioKKyAqIEdldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqLworT1RBUEkgY29uc3QgdWludDhfdCAqT1RDQUxMIG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHN1Y2NlZWQgd2hlbiBUaHJlYWQgcHJvdG9jb2xzIGFyZSBkaXNhYmxlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZEFkZHJlc3MgIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICBAcCBhRXh0ZW5kZWRBZGRyZXNzIHdhcyBOVUxMLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgcHJvdG9jb2xzIGFyZSBlbmFibGVkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0ZW5kZWRBZGRyZXNzKTsKKworLyoqCisgKiBHZXQgdGhlIGZhY3RvcnktYXNzaWduZWQgSUVFRSBFVUktNjQuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFFdWk2NCAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmYWN0b3J5LWFzc2lnbmVkIElFRUUgRVVJLTY0IGlzIHBsYWNlZC4KKyAqCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RXh0QWRkcmVzcyAqYUV1aTY0KTsKKworLyoqCisgKiBHZXQgdGhlIEpvaW5lciBJRC4KKyAqCisgKiBKb2luZXIgSUQgaXMgdGhlIGZpcnN0IDY0IGJpdHMgb2YgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgU0hBLTI1NiBvdmVyIGZhY3RvcnktYXNzaWduZWQKKyAqIElFRUUgRVVJLTY0LCB3aGljaCBpcyB1c2VkIGFzIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBkdXJpbmcgY29tbWlzc2lvbmluZyBwcm9jZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFIYXNoTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIEhhc2ggTWFjIEFkZHJlc3MgaXMgcGxhY2VkLgorICoKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rR2V0Sm9pbmVySWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdEV4dEFkZHJlc3MgKmFIYXNoTWFjQWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIHNldHRpbmcgaW4gZEJtLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zICBUaGUgbWF4aW11bSB0cmFuc21pdCBwb3dlciBzZXR0aW5nLgorICoKKyAqLworT1RBUEkgaW50OF90IE9UQ0FMTCBvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIGluIGRCbS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUG93ZXIgICAgVGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIgaW4gZEJtLgorICoKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpOworCisvKioKKyAqIEdldCB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKiBAc2Egb3RMaW5rU2V0UGFuSWQKKyAqLworT1RBUEkgb3RQYW5JZCBPVENBTEwgb3RMaW5rR2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHN1Y2NlZWQgd2hlbiBUaHJlYWQgcHJvdG9jb2xzIGFyZSBkaXNhYmxlZC4gIEEgc3VjY2Vzc2Z1bAorICogY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBpbnZhbGlkYXRlIHRoZSBBY3RpdmUgYW5kIFBlbmRpbmcgT3BlcmF0aW9uYWwgRGF0YXNldHMgaW4KKyAqIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVBhbklkICAgIFRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIFBBTiBJRC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgSWYgYVBhbklkIGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAsIDY1NTM0XS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIHByb3RvY29scyBhcmUgZW5hYmxlZC4KKyAqCisgKiBAc2Egb3RMaW5rR2V0UGFuSWQKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFBhbklkIGFQYW5JZCk7CisKKy8qKgorICogR2V0IHRoZSBkYXRhIHBvbGwgcGVyaW9kIG9mIHNsZWVweSBlbmQgZGV2aWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyAgVGhlIGRhdGEgcG9sbCBwZXJpb2Qgb2Ygc2xlZXB5IGVuZCBkZXZpY2UgaW4gbWlsbGlzZWNvbmRzLgorICoKKyAqIEBzYSBvdExpbmtTZXRQb2xsUGVyaW9kCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdExpbmtHZXRQb2xsUGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBkYXRhIHBvbGwgcGVyaW9kIGZvciBzbGVlcHkgZW5kIGRldmljZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgb25seSBwb2xsIHBlcmlvZCBvZiBzbGVlcHkgZW5kIGRldmljZS4gVG8gdXBkYXRlIGNoaWxkIHRpbWVvdXQgdGhlIGZ1bmN0aW9uCisgKiAgICAgICBvdFNldENoaWxkVGltZW91dCgpIHNoYWxsIGJlIGNhbGxlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUG9sbFBlcmlvZCAgZGF0YSBwb2xsIHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuCisgKgorICogQHNhIG90TGlua0dldFBvbGxQZXJpb2QKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0UG9sbFBlcmlvZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFQb2xsUGVyaW9kKTsKKworLyoqCisgKiBHZXQgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IFNob3J0IEFkZHJlc3MuCisgKi8KK09UQVBJIG90U2hvcnRBZGRyZXNzIE9UQ0FMTCBvdExpbmtHZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBBZGQgYW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSBNQUMgd2hpdGVsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgTUFDIHdoaXRlbGlzdC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm8gYnVmZmVycyBhdmFpbGFibGUgZm9yIGEgbmV3IE1BQyB3aGl0ZWxpc3QgZW50cnkuCisgKgorICogQHNhIG90TGlua0FkZFdoaXRlbGlzdFJzc2kKKyAqIEBzYSBvdExpbmtSZW1vdmVXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtDbGVhcldoaXRlbGlzdAorICogQHNhIG90TGlua0dldFdoaXRlbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZAorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtBZGRXaGl0ZWxpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcik7CisKKy8qKgorICogQWRkIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgTUFDIHdoaXRlbGlzdCBhbmQgZml4IHRoZSBSU1NJIHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFSc3NpICAgICBUaGUgUlNTSSBpbiBkQm0gdG8gdXNlIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2VzIGZyb20gYUV4dEFkZHIuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIE1BQyB3aGl0ZWxpc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBhIG5ldyBNQUMgd2hpdGVsaXN0IGVudHJ5LgorICoKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpCisgKiBAc2Egb3RMaW5rUmVtb3ZlV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rQ2xlYXJXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeQorICogQHNhIG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZAorICogQHNhIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RMaW5rQWRkV2hpdGVsaXN0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCBpbnQ4X3QgYVJzc2kpOworCisvKioKKyAqIFJlbW92ZSBhbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgZnJvbSB0aGUgTUFDIHdoaXRlbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkciAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICogQHNhIG90TGlua0FkZFdoaXRlbGlzdAorICogQHNhIG90TGlua0FkZFdoaXRlbGlzdFJzc2kKKyAqIEBzYSBvdExpbmtDbGVhcldoaXRlbGlzdAorICogQHNhIG90TGlua0dldFdoaXRlbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkCisgKiBAc2Egb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZAorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdExpbmtSZW1vdmVXaGl0ZWxpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgTUFDIHdoaXRlbGlzdCBlbnRyeS4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgIGFJbmRleCAgICBBbiBpbmRleCBpbnRvIHRoZSBNQUMgd2hpdGVsaXN0IHRhYmxlLgorICogQHBhcmFtW291dF0gIGFFbnRyeSAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgTUFDIHdoaXRlbGlzdCBlbnRyeS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhSW5kZXggaXMgb3V0IG9mIGJvdW5kcyBvciBAcCBhRW50cnkgaXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TGlua0dldFdoaXRlbGlzdEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhSW5kZXgsIG90TWFjV2hpdGVsaXN0RW50cnkgKmFFbnRyeSk7CisKKy8qKgorICogUmVtb3ZlIGFsbCBlbnRyaWVzIGZyb20gdGhlIE1BQyB3aGl0ZWxpc3QuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpCisgKiBAc2Egb3RMaW5rUmVtb3ZlV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rR2V0V2hpdGVsaXN0RW50cnkKKyAqIEBzYSBvdExpbmtJc1doaXRlbGlzdEVuYWJsZWQKKyAqIEBzYSBvdExpbmtTZXRXaGl0ZWxpc3RFbmFibGVkCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90TGlua0NsZWFyV2hpdGVsaXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogRW5hYmxlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgIFRSVUUgdG8gZW5hYmxlIHRoZSB3aGl0ZWxpc3QsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2Egb3RMaW5rQWRkV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rQWRkV2hpdGVsaXN0UnNzaQorICogQHNhIG90TGlua1JlbW92ZVdoaXRlbGlzdAorICogQHNhIG90TGlua0NsZWFyV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rR2V0V2hpdGVsaXN0RW50cnkKKyAqIEBzYSBvdExpbmtJc1doaXRlbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBNQUMgd2hpdGVsaXN0IGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIE1BQyB3aGl0ZWxpc3QgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpCisgKiBAc2Egb3RMaW5rUmVtb3ZlV2hpdGVsaXN0CisgKiBAc2Egb3RMaW5rQ2xlYXJXaGl0ZWxpc3QKKyAqIEBzYSBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeQorICogQHNhIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQWRkIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgTUFDIGJsYWNrbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkciAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIE1BQyBibGFja2xpc3QuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBhIG5ldyBNQUMgYmxhY2tsaXN0IGVudHJ5LgorICoKKyAqIEBzYSBvdExpbmtSZW1vdmVCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtDbGVhckJsYWNrbGlzdAorICogQHNhIG90TGlua0dldEJsYWNrbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkCisgKiBAc2Egb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZAorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtBZGRCbGFja2xpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcik7CisKKy8qKgorICogUmVtb3ZlIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBmcm9tIHRoZSBNQUMgYmxhY2tsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKiBAc2Egb3RMaW5rQWRkQmxhY2tsaXN0CisgKiBAc2Egb3RMaW5rQ2xlYXJCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtHZXRCbGFja2xpc3RFbnRyeQorICogQHNhIG90TGlua0lzQmxhY2tsaXN0RW5hYmxlZAorICogQHNhIG90TGlua1NldEJsYWNrbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rUmVtb3ZlQmxhY2tsaXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHIpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIE1BQyBCbGFja2xpc3QgZW50cnkuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gICBhSW5kZXggICAgQW4gaW5kZXggaW50byB0aGUgTUFDIEJsYWNrbGlzdCB0YWJsZS4KKyAqIEBwYXJhbVtvdXRdICBhRW50cnkgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBpcyBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIE1BQyBCbGFja2xpc3QgZW50cnkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUluZGV4IGlzIG91dCBvZiBib3VuZHMgb3IgQHAgYUVudHJ5IGlzIE5VTEwuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdExpbmtHZXRCbGFja2xpc3RFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUluZGV4LCBvdE1hY0JsYWNrbGlzdEVudHJ5ICphRW50cnkpOworCisvKioKKyAqICBSZW1vdmUgYWxsIGVudHJpZXMgZnJvbSB0aGUgTUFDIEJsYWNrbGlzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHNhIG90TGlua0FkZEJsYWNrbGlzdAorICogQHNhIG90TGlua1JlbW92ZUJsYWNrbGlzdAorICogQHNhIG90TGlua0dldEJsYWNrbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkCisgKiBAc2Egb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZAorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdExpbmtDbGVhckJsYWNrbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEVuYWJsZSBNQUMgQmxhY2tsaXN0IGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZWQgICBUUlVFIHRvIGVuYWJsZSB0aGUgYmxhY2tsaXN0LCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNhIG90TGlua0FkZEJsYWNrbGlzdAorICogQHNhIG90TGlua1JlbW92ZUJsYWNrbGlzdAorICogQHNhIG90TGlua0NsZWFyQmxhY2tsaXN0CisgKiBAc2Egb3RMaW5rR2V0QmxhY2tsaXN0RW50cnkKKyAqIEBzYSBvdExpbmtJc0JsYWNrbGlzdEVuYWJsZWQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBNQUMgQmxhY2tsaXN0IGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIE1BQyBCbGFja2xpc3QgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzYSBvdExpbmtBZGRCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtSZW1vdmVCbGFja2xpc3QKKyAqIEBzYSBvdExpbmtDbGVhckJsYWNrbGlzdAorICogQHNhIG90TGlua0dldEJsYWNrbGlzdEVudHJ5CisgKiBAc2Egb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZAorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBhc3NpZ25lZCBsaW5rIHF1YWxpdHkgd2hpY2ggaXMgb24gdGhlIGxpbmsgdG8gYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSBBIHBvaW50ZXIgdG8gdGhlIGFzc2lnbmVkIGxpbmsgcXVhbGl0eS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGxpbmsgcXVhbGl0eSB0byBhTGlua1F1YWxpdHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIE5vIGF0dGFjaGVkIGNoaWxkIG1hdGNoZXMgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MuCisgKgorICogQHNhIG90TGlua1NldEFzc2lnbkxpbmtRdWFsaXR5CisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TGlua0dldEFzc2lnbkxpbmtRdWFsaXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphTGlua1F1YWxpdHkpOworCisvKioKKyAqIFNldCB0aGUgbGluayBxdWFsaXR5IHdoaWNoIGlzIG9uIHRoZSBsaW5rIHRvIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkciAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBsaW5rIHF1YWxpdHkgdG8gYmUgc2V0IG9uIHRoZSBsaW5rLgorICoKKyAqIEBzYSBvdExpbmtHZXRBc3NpZ25MaW5rUXVhbGl0eQorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdExpbmtTZXRBc3NpZ25MaW5rUXVhbGl0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCB1aW50OF90IGFMaW5rUXVhbGl0eSk7CisKKy8qKgorICogR2V0IHRoZSBNQUMgbGF5ZXIgY291bnRlcnMuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTUFDIGxheWVyIGNvdW50ZXJzLgorICovCitPVEFQSSBjb25zdCBvdE1hY0NvdW50ZXJzICpPVENBTEwgb3RMaW5rR2V0Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYW4gSUVFRSA4MDIuMTUuNCBmcmFtZSBpcyByZWNlaXZlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBGQ1MgcHJvY2Vzc2luZyBhbmQgQHAgYUZyYW1lIG1heSBub3QgY29udGFpbiB0aGUgYWN0dWFsIEZDUyB0aGF0IHdhcyByZWNlaXZlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUgSUVFRSA4MDIuMTUuNCBzZWN1cml0eSBwcm9jZXNzaW5nIGFuZCBtU2VjdXJpdHlWYWxpZCBpbiBAcCBhRnJhbWUgd2lsbAorICogYWx3YXlzIGJlIGZhbHNlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIElFRUUgODAyLjE1LjQgZnJhbWUuCisgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdExpbmtQY2FwQ2FsbGJhY2spKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBwcm92aWRlIHJlY2VpdmVkIHJhdyBJRUVFIDgwMi4xNS40IGZyYW1lcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQY2FwQ2FsbGJhY2sgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gcmVjZWl2aW5nIGFuIElFRUUgODAyLjE1LjQgbGluayBmcmFtZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqLwordm9pZCBvdExpbmtTZXRQY2FwQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExpbmtQY2FwQ2FsbGJhY2sgYVBjYXBDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkIGF0IHRoZSBsaW5rIGxheWVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIHRydWUgICBQcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIGZhbHNlICBQcm9taXNjdW91cyBtb2RlIGlzIG5vdCBlbmFibGVkLgorICoKKyAqLworYm9vbCBvdExpbmtJc1Byb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW5rIGxheWVyIHByb21pc2N1b3VzIG1vZGUuCisgKgorICogQG5vdGUgUHJvbWlzY3VvdXMgbW9kZSBtYXkgb25seSBiZSBlbmFibGVkIHdoZW4gdGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQcm9taXNjdW91cyAgdHJ1ZSB0byBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSwgb3IgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgcHJvbWlzY3VvdXMgbW9kZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgQ291bGQgbm90IGVuYWJsZSBwcm9taXNjdW91cyBtb2RlIGJlY2F1c2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFQcm9taXNjdW91cyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0xJTktfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9saW5rX3Jhdy5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL2xpbmtfcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzMWViZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9saW5rX3Jhdy5oCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHJhdyBPcGVuVGhyZWFkIElFRUUgODAyLjE1LjQgTGluayBMYXllciBBUEkuCisgKi8KKworI2lmbmRlZiBMSU5LX1JBV19IXworI2RlZmluZSBMSU5LX1JBV19IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1saW5rLXJhdworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIHRoZSByYXcgbGluay1sYXllciBjb25maWd1cmF0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSByYXcgbGluay1sYXllci4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dIGFFbmFibGVkICAgICAgVFJVRSB0byBlbmFibGUgcmF3IGxpbmstbGF5ZXIsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBJZiB0aGUgZW5hYmxlIHN0YXRlIHdhcyBzdWNjZXNzZnVsbHkgc2V0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgSWYgdGhlIE9wZW5UaHJlYWQgSXA2IGludGVyZmFjZSBpcyBhbHJlYWR5IGVuYWJsZWQuCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NldEVuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSByYXcgbGluay1sYXllciBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIHRydWUgICAgIFRoZSByYXcgbGluay1sYXllciBpcyBlbmFibGVkLgorICogQHJldHZhbCBmYWxzZSAgICBUaGUgcmF3IGxpbmstbGF5ZXIgaXMgZGlzYWJsZWQuCisgKgorICovCitib29sIG90TGlua1Jhd0lzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSBhUGFuSWQgICAgICAgICBUaGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIElmIHN1Y2Nlc3NmdWwuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgICAgSWYgdGhlIHJhdyBsaW5rLWxheWVyIGlzbid0IGVuYWJsZWQuCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZEFkZHJlc3MgIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBJZiBzdWNjZXNzZnVsLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIElmIHRoZSByYXcgbGluay1sYXllciBpc24ndCBlbmFibGVkLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdTZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRlbmRlZEFkZHJlc3MpOworCisvKioKKyAqIFNldCB0aGUgU2hvcnQgQWRkcmVzcyBmb3IgYWRkcmVzcyBmaWx0ZXJpbmcuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gYVNob3J0QWRkcmVzcyAgVGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcmVzcyk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdGF0dXMgb2YgcHJvbWlzY3VvdXMgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCB0cnVlICAgICBQcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsIGZhbHNlICAgIFByb21pc2N1b3VzIG1vZGUgaXMgZGlzYWJsZWQuCisgKgorICovCitib29sIG90TGlua1Jhd0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHByb21pc2N1b3VzIG1vZGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZSAgICAgIEEgdmFsdWUgdG8gZW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpOworCisvKioKKyAqIFRyYW5zaXRpb24gdGhlIHJhZGlvIGZyb20gUmVjZWl2ZSB0byBTbGVlcC4KKyAqIFR1cm4gb2ZmIHRoZSByYWRpby4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gU2xlZXAuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgICAgICAgICAgICAgVGhlIHJhZGlvIHdhcyB0cmFuc21pdHRpbmcKKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBUaGUgcmFkaW8gd2FzIGRpc2FibGVkCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIG9uIHJlY2VpcHQgb2YgYSBJRUVFIDgwMi4xNS40IGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIGZyYW1lIG9yIE5VTEwgaWYgdGhlIHJlY2VpdmUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBPVF9FUlJPUl9BQk9SVCB3aGVuIHJlY2VwdGlvbiB3YXMgYWJvcnRlZCBhbmQgYSBmcmFtZSB3YXMgbm90IHJlY2VpdmVkLgorICoKKyAqLwordHlwZWRlZiB2b2lkIChPVENBTEwgKm90TGlua1Jhd1JlY2VpdmVEb25lKShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVHJhbnNpdGlvbmluZyB0aGUgcmFkaW8gZnJvbSBTbGVlcCB0byBSZWNlaXZlLgorICogVHVybiBvbiB0aGUgcmFkaW8uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUNoYW5uZWwgICAgIFRoZSBjaGFubmVsIHRvIHVzZSBmb3IgcmVjZWl2aW5nLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXB0IG9mIGEgSUVFRSA4MDIuMTUuNCBmcmFtZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRyYW5zaXRpb25lZCB0byBSZWNlaXZlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIFRoZSByYWRpbyB3YXMgZGlzYWJsZWQgb3IgdHJhbnNtaXR0aW5nLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdSZWNlaXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hhbm5lbCwgb3RMaW5rUmF3UmVjZWl2ZURvbmUgYUNhbGxiYWNrKTsKKworLyoqCisgKiBUaGUgcmFkaW8gdHJhbnNpdGlvbnMgZnJvbSBUcmFuc21pdCB0byBSZWNlaXZlLgorICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHRyYW5zbWl0IGJ1ZmZlci4KKyAqCisgKiBUaGUgY2FsbGVyIGZvcm1zIHRoZSBJRUVFIDgwMi4xNS40IGZyYW1lIGluIHRoaXMgYnVmZmVyIHRoZW4gY2FsbHMgb3RMaW5rUmF3VHJhbnNtaXQoKQorICogdG8gcmVxdWVzdCB0cmFuc21pc3Npb24uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdHJhbnNtaXQgYnVmZmVyIG9yIE5VTEwgaWYgdGhlIHJhdyBsaW5rLWxheWVyIGlzbid0IGVuYWJsZWQuCisgKgorICovCitvdFJhZGlvRnJhbWUgKm90TGlua1Jhd0dldFRyYW5zbWl0QnVmZmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIG9uIHJlY2VpcHQgb2YgYSBJRUVFIDgwMi4xNS40IGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCB3YXMgdHJhbnNtaXR0ZWQuCisgKiBAcGFyYW1baW5dICBhRnJhbWVQZW5kaW5nICAgIFRSVUUgaWYgYW4gQUNLIGZyYW1lIHdhcyByZWNlaXZlZCBhbmQgdGhlIEZyYW1lIFBlbmRpbmcgYml0IHdhcyBzZXQuCisgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgICAgICAgIE9UX0VSUk9SX05PTkUgd2hlbiB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVF9FUlJPUl9OT19BQ0sgd2hlbiB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkIGJ1dCBubyBBQ0sgd2FzIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUgdHJhbnNtaXNzaW9uIGNvdWxkIG5vdCB0YWtlIHBsYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UX0VSUk9SX0FCT1JUIHdoZW4gdHJhbnNtaXNzaW9uIHdhcyBhYm9ydGVkIGZvciBvdGhlciByZWFzb25zLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3RMaW5rUmF3VHJhbnNtaXREb25lKShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBiZWdpbnMgdGhlIHRyYW5zbWl0IHNlcXVlbmNlIG9uIHRoZSByYWRpby4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgZm9ybSB0aGUgSUVFRSA4MDIuMTUuNCBmcmFtZSBpbiB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IG90TGlua1Jhd0dldFRyYW5zbWl0QnVmZmVyKCkgYmVmb3JlCisgKiByZXF1ZXN0aW5nIHRyYW5zbWlzc2lvbi4gIFRoZSBjaGFubmVsIGFuZCB0cmFuc21pdCBwb3dlciBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgb3RSYWRpb0ZyYW1lIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgdHJhbnNtaXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6CisgKiAxLiBUcmFuc2l0aW9uaW5nIHRoZSByYWRpbyB0byBUcmFuc21pdCBmcm9tIFJlY2VpdmUuCisgKiAyLiBUcmFuc21pdHMgdGhlIHBzZHUgb24gdGhlIGdpdmVuIGNoYW5uZWwgYW5kIGF0IHRoZSBnaXZlbiB0cmFuc21pdCBwb3dlci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdhcyB0cmFuc21pdHRlZC4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgb24gY29tcGxldGlvbiBvZiB0aGUgdHJhbnNtaXNzaW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgdHJhbnNpdGlvbmVkIHRvIFRyYW5zbWl0LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFIFRoZSByYWRpbyB3YXMgbm90IGluIHRoZSBSZWNlaXZlIHN0YXRlLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdUcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdExpbmtSYXdUcmFuc21pdERvbmUgYUNhbGxiYWNrKTsKKworLyoqCisgKiBHZXQgdGhlIG1vc3QgcmVjZW50IFJTU0kgbWVhc3VyZW1lbnQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBSU1NJIGluIGRCbSB3aGVuIGl0IGlzIHZhbGlkLiAxMjcgd2hlbiBSU1NJIGlzIGludmFsaWQuCisgKgorICovCitpbnQ4X3Qgb3RMaW5rUmF3R2V0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgcmFkaW8gY2FwYWJpbGl0aWVzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgcmFkaW8gY2FwYWJpbGl0eSBiaXQgdmVjdG9yLiBUaGUgc3RhY2sgZW5hYmxlcyBvciBkaXNhYmxlcyBzb21lIGZ1bmN0aW9ucyBiYXNlZCBvbiB0aGlzIHZhbHVlLgorICoKKyAqLworb3RSYWRpb0NhcHMgb3RMaW5rUmF3R2V0Q2FwcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBvbiByZWNlaXB0IG9mIGEgSUVFRSA4MDIuMTUuNCBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmVyZ3lTY2FuTWF4UnNzaSAgIFRoZSBtYXhpbXVtIFJTU0kgZW5jb3VudGVyZWQgb24gdGhlIHNjYW5uZWQgY2hhbm5lbC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90TGlua1Jhd0VuZXJneVNjYW5Eb25lKShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhRW5lcmd5U2Nhbk1heFJzc2kpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIGJlZ2lucyB0aGUgZW5lcmd5IHNjYW4gc2VxdWVuY2Ugb24gdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWwgICAgIFRoZSBjaGFubmVsIHRvIHBlcmZvcm0gdGhlIGVuZXJneSBzY2FuIG9uLgorICogQHBhcmFtW2luXSAgYVNjYW5EdXJhdGlvbiAgICBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoZSBjaGFubmVsIHRvIGJlIHNjYW5uZWQuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiBjb21wbGV0aW9uIG9mIGEgc2Nhbm5lZCBjaGFubmVsLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBzY2FubmluZyB0aGUgY2hhbm5lbC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEICBUaGUgcmFkaW8gZG9lc24ndCBzdXBwb3J0IGVuZXJneSBzY2FubmluZy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3RW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TGlua1Jhd0VuZXJneVNjYW5Eb25lIGFDYWxsYmFjayk7CisKKy8qKgorICogRW5hYmxlL0Rpc2FibGUgc291cmNlIG1hdGNoIGZvciBBdXRvUGVuZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRW5hYmxlICAgICAgRW5hYmxlL2Rpc2FibGUgc291cmNlIG1hdGNoIGZvciBhdXRvbWF0aWNhbCBwZW5kaW5nLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBJZiBzdWNjZXNzZnVsLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIElmIHRoZSByYXcgbGluay1sYXllciBpc24ndCBlbmFibGVkLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdTcmNNYXRjaEVuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSk7CisKKy8qKgorICogQWRkaW5nIHNob3J0IGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVNob3J0QWRkcmVzcyAgICBUaGUgc2hvcnQgYWRkcmVzcyB0byBiZSBhZGRlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHNob3J0IGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICAgICBObyBhdmFpbGFibGUgZW50cnkgaW4gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hBZGRTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcyk7CisKKy8qKgorICogQWRkaW5nIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgICAgICBUaGUgZXh0ZW5kZWQgYWRkcmVzcyB0byBiZSBhZGRlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICAgICBObyBhdmFpbGFibGUgZW50cnkgaW4gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hBZGRFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmluZyBzaG9ydCBhZGRyZXNzIHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgICAgVGhlIHNob3J0IGFkZHJlc3MgdG8gYmUgcmVtb3ZlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgc2hvcnQgYWRkcmVzcyBmcm9tIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0FERFJFU1MgICAgICAgVGhlIHNob3J0IGFkZHJlc3MgaXMgbm90IGluIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmluZyBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUgb2YgdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgICAgIFRoZSBleHRlbmRlZCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBleHRlbmRlZCBhZGRyZXNzIGZyb20gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQUREUkVTUyAgICAgICBUaGUgZXh0ZW5kZWQgYWRkcmVzcyBpcyBub3QgaW4gc291cmNlIG1hdGNoIHRhYmxlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIElmIHRoZSByYXcgbGluay1sYXllciBpc24ndCBlbmFibGVkLgorICoKKyAqLworb3RFcnJvciBvdExpbmtSYXdTcmNNYXRjaENsZWFyRXh0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcmVzcyk7CisKKy8qKgorICogUmVtb3ZpbmcgYWxsIHRoZSBzaG9ydCBhZGRyZXNzZXMgZnJvbSB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBJZiB0aGUgcmF3IGxpbmstbGF5ZXIgaXNuJ3QgZW5hYmxlZC4KKyAqCisgKi8KK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFJlbW92aW5nIGFsbCB0aGUgZXh0ZW5kZWQgYWRkcmVzc2VzIGZyb20gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIElmIHN1Y2Nlc3NmdWwuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgICAgSWYgdGhlIHJhdyBsaW5rLWxheWVyIGlzbid0IGVuYWJsZWQuCisgKgorICovCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoQ2xlYXJFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBMSU5LX1JBV19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL21lc3NhZ2UuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9tZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2NmI5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9tZXNzYWdlLmgKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0b3AtbGV2ZWwgT3BlblRocmVhZCBBUElzIHJlbGF0ZWQgdG8gbWVzc2FnZSBidWZmZXIgYW5kIHF1ZXVlcy4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfTUVTU0FHRV9IXworI2RlZmluZSBPUEVOVEhSRUFEX01FU1NBR0VfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1tZXNzYWdlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgT3BlblRocmVhZCBtZXNzYWdlIGJ1ZmZlcnMKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEZyZWUgYW4gYWxsb2NhdGVkIG1lc3NhZ2UgYnVmZmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJ1ZmZlci4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBmcmVlZCB0aGUgbWVzc2FnZSBidWZmZXIuCisgKgorICogQHNhIG90TWVzc2FnZUFwcGVuZAorICogQHNhIG90TWVzc2FnZUdldExlbmd0aAorICogQHNhIG90TWVzc2FnZVNldExlbmd0aAorICogQHNhIG90TWVzc2FnZUdldE9mZnNldAorICogQHNhIG90TWVzc2FnZVNldE9mZnNldAorICogQHNhIG90TWVzc2FnZVJlYWQKKyAqIEBzYSBvdE1lc3NhZ2VXcml0ZQorICovCitvdEVycm9yIG90TWVzc2FnZUZyZWUob3RNZXNzYWdlICphTWVzc2FnZSk7CisKKy8qKgorICogR2V0IHRoZSBtZXNzYWdlIGxlbmd0aCBpbiBieXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKgorICogQHJldHVybnMgVGhlIG1lc3NhZ2UgbGVuZ3RoIGluIGJ5dGVzLgorICoKKyAqIEBzYSBvdE1lc3NhZ2VGcmVlCisgKiBAc2Egb3RNZXNzYWdlQXBwZW5kCisgKiBAc2Egb3RNZXNzYWdlU2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlR2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlU2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlUmVhZAorICogQHNhIG90TWVzc2FnZVdyaXRlCisgKiBAc2Egb3RNZXNzYWdlU2V0TGVuZ3RoCisgKi8KK3VpbnQxNl90IG90TWVzc2FnZUdldExlbmd0aChvdE1lc3NhZ2UgKmFNZXNzYWdlKTsKKworLyoqCisgKiBTZXQgdGhlIG1lc3NhZ2UgbGVuZ3RoIGluIGJ5dGVzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBBIGxlbmd0aCBpbiBieXRlcy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIG1lc3NhZ2UgbGVuZ3RoLgorICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBObyBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICoKKyAqIEBzYSBvdE1lc3NhZ2VGcmVlCisgKiBAc2Egb3RNZXNzYWdlQXBwZW5kCisgKiBAc2Egb3RNZXNzYWdlR2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlR2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlU2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlUmVhZAorICogQHNhIG90TWVzc2FnZVdyaXRlCisgKi8KK290RXJyb3Igb3RNZXNzYWdlU2V0TGVuZ3RoKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHVpbnQxNl90IGFMZW5ndGgpOworCisvKioKKyAqIEdldCB0aGUgbWVzc2FnZSBvZmZzZXQgaW4gYnl0ZXMuCisgKgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcG9pbnRlciB0byBhIG1lc3NhZ2UgYnVmZmVyLgorICoKKyAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIG9mZnNldCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RNZXNzYWdlRnJlZQorICogQHNhIG90TWVzc2FnZUFwcGVuZAorICogQHNhIG90TWVzc2FnZUdldExlbmd0aAorICogQHNhIG90TWVzc2FnZVNldExlbmd0aAorICogQHNhIG90TWVzc2FnZVNldE9mZnNldAorICogQHNhIG90TWVzc2FnZVJlYWQKKyAqIEBzYSBvdE1lc3NhZ2VXcml0ZQorICovCit1aW50MTZfdCBvdE1lc3NhZ2VHZXRPZmZzZXQob3RNZXNzYWdlICphTWVzc2FnZSk7CisKKy8qKgorICogU2V0IHRoZSBtZXNzYWdlIG9mZnNldCBpbiBieXRlcy4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICAgQW4gb2Zmc2V0IGluIGJ5dGVzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBtZXNzYWdlIG9mZnNldC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb2Zmc2V0IGlzIGJleW9uZCB0aGUgbWVzc2FnZSBsZW5ndGguCisgKgorICogQHNhIG90TWVzc2FnZUZyZWUKKyAqIEBzYSBvdE1lc3NhZ2VBcHBlbmQKKyAqIEBzYSBvdE1lc3NhZ2VHZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VTZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VHZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VSZWFkCisgKiBAc2Egb3RNZXNzYWdlV3JpdGUKKyAqLworb3RFcnJvciBvdE1lc3NhZ2VTZXRPZmZzZXQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgbGluayBzZWN1cml0eSBpcyBlbmFibGVkIGZvciB0aGUgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKgorICogQHJldHZhbCBUUlVFICAgSWYgbGluayBzZWN1cml0eSBpcyBlbmFibGVkLgorICogQHJldHZhbCBGQUxTRSAgSWYgbGluayBzZWN1cml0eSBpcyBub3QgZW5hYmxlZC4KKyAqCisgKi8KK2Jvb2wgb3RNZXNzYWdlSXNMaW5rU2VjdXJpdHlFbmFibGVkKG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cy9mb3JjZXMgdGhlIG1lc3NhZ2UgdG8gYmUgZm9yd2FyZGVkIHVzaW5nIGRpcmVjdCB0cmFuc21pc3Npb24uCisgKiBEZWZhdWx0IHNldHRpbmcgZm9yIGEgbmV3IG1lc3NhZ2UgaXMgYGZhbHNlYC4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgSWYgYHRydWVgIG1lc3NhZ2Ugd2lsbCBiZSBmb3JjZWQgdG8gdXNlIGRpcmVjdCB0cmFuc21pc3Npb24uIElmIGBmYWxzZWAgbWVzc2FnZSB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93IHRoZSBub3JtYWwgcHJvY2VkdXJlLgorICoKKyAqLwordm9pZCBvdE1lc3NhZ2VTZXREaXJlY3RUcmFuc21pc3Npb24ob3RNZXNzYWdlICphTWVzc2FnZSwgYm9vbCBhRW5hYmxlZCk7CisKKy8qKgorICogQXBwZW5kIGJ5dGVzIHRvIGEgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGFwcGVuZC4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBOdW1iZXIgb2YgYnl0ZXMgdG8gYXBwZW5kLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRvIHRoZSBtZXNzYWdlCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIE5vIGF2YWlsYWJsZSBidWZmZXJzIHRvIGdyb3cgdGhlIG1lc3NhZ2UuCisgKgorICogQHNhIG90TWVzc2FnZUZyZWUKKyAqIEBzYSBvdE1lc3NhZ2VHZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VTZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VHZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VTZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VSZWFkCisgKiBAc2Egb3RNZXNzYWdlV3JpdGUKKyAqLworb3RFcnJvciBvdE1lc3NhZ2VBcHBlbmQob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKy8qKgorICogUmVhZCBieXRlcyBmcm9tIGEgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICAgQW4gb2Zmc2V0IGluIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IG1lc3NhZ2UgYnl0ZXMgYXJlIHJlYWQgdG8uCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKgorICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorICoKKyAqIEBzYSBvdE1lc3NhZ2VGcmVlCisgKiBAc2Egb3RNZXNzYWdlQXBwZW5kCisgKiBAc2Egb3RNZXNzYWdlR2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlU2V0TGVuZ3RoCisgKiBAc2Egb3RNZXNzYWdlR2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlU2V0T2Zmc2V0CisgKiBAc2Egb3RNZXNzYWdlV3JpdGUKKyAqLworaW50IG90TWVzc2FnZVJlYWQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKy8qKgorICogV3JpdGUgYnl0ZXMgdG8gYSBtZXNzYWdlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFPZmZzZXQgICBBbiBvZmZzZXQgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRoYXQgbWVzc2FnZSBieXRlcyBhcmUgd3JpdHRlbiBmcm9tLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgIE51bWJlciBvZiBieXRlcyB0byB3cml0ZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogQHNhIG90TWVzc2FnZUZyZWUKKyAqIEBzYSBvdE1lc3NhZ2VBcHBlbmQKKyAqIEBzYSBvdE1lc3NhZ2VHZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VTZXRMZW5ndGgKKyAqIEBzYSBvdE1lc3NhZ2VHZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VTZXRPZmZzZXQKKyAqIEBzYSBvdE1lc3NhZ2VSZWFkCisgKi8KK2ludCBvdE1lc3NhZ2VXcml0ZShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCBjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIE9wZW5UaHJlYWQgbWVzc2FnZSBxdWV1ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2b2lkICptRGF0YTsgICAgICAgICAgICAvLy88IE9wYXF1ZSBkYXRhIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLgorfSBvdE1lc3NhZ2VRdWV1ZTsKKworLyoqCisgKgorICogSW5pdGlhbGl6ZSB0aGUgbWVzc2FnZSBxdWV1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBmb3IgYSBgb3RNZXNzYWdlUXVldWVgIGluc3RhbmNlIGJlZm9yZSBhbnkgb3RoZXIgYG90TWVzc2FnZVF1ZXVlYAorICogZnVuY3Rpb25zLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIG90aGVyIHF1ZXVlIEFQSXMgYXJlIHVzZWQgd2l0aCBhbiBgb3RNZXNzYWdlUXVldWVgIGJlZm9yZSBpdCBiZWluZworICogaW5pdGlhbGl6ZWQgb3IgaWYgaXQgaXMgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UuCisgKgorICogQHBhcmFtW2luXSAgYVF1ZXVlICAgICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIHF1ZXVlLgorICoKKyAqLwordm9pZCBvdE1lc3NhZ2VRdWV1ZUluaXQob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgbWVzc2FnZSB0byB0aGUgZW5kIG9mIHRoZSBnaXZlbiBtZXNzYWdlIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFRdWV1ZSAgICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBxdWV1ZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG1lc3NhZ2UgaXMgYWxyZWFkeSBlbnF1ZXVlZCBpbiBhIHF1ZXVlLgorICoKKyAqLworb3RFcnJvciBvdE1lc3NhZ2VRdWV1ZUVucXVldWUob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSwgb3RNZXNzYWdlICphTWVzc2FnZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBtZXNzYWdlIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFRdWV1ZSAgICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gcmVtb3ZlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgbWVzc2FnZSBpcyBub3QgZW5xdWV1ZWQgaW4gdGhpcyBxdWV1ZS4KKyAqCisgKi8KK290RXJyb3Igb3RNZXNzYWdlUXVldWVEZXF1ZXVlKG90TWVzc2FnZVF1ZXVlICphUXVldWUsIG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFRdWV1ZSAgICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIHF1ZXVlLgorICoKKyAqIEByZXR1cm5zICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYXQgdGhlIGhlYWQgb2YgcXVldWUgb3IgTlVMTCBpZiBxdWV1ZSBpcyBlbXB0eS4KKyAqCisgKi8KK290TWVzc2FnZSAqb3RNZXNzYWdlUXVldWVHZXRIZWFkKG90TWVzc2FnZVF1ZXVlICphUXVldWUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUgcXVldWUgYnkgaXRlcmF0aW5nIGZvcndhcmQgKGZyb20gaGVhZCB0byB0YWlsKS4KKyAqCisgKiBAcGFyYW1baW5dICBhUXVldWUgICAgQSBwb2ludGVyIHRvIGEgbWVzc2FnZSBxdWV1ZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gY3VycmVudCBtZXNzYWdlIGJ1ZmZlci4KKyAqCisgKiBAcmV0dXJucyAgQSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgaW4gdGhlIHF1ZXVlIGFmdGVyIGBhTWVzc2FnZWAgb3IgTlVMTCBpZiBgYU1lc3NhZ2UgaXMgdGhlIHRhaWwgb2YgcXVldWUuCisgKiAgICAgICAgICAgTlVMTCBpcyByZXR1cm5lZCBpZiBgYU1lc3NhZ2VgIGlzIG5vdCBpbiB0aGUgcXVldWUgYGFRdWV1ZWAuCisgKgorICovCitvdE1lc3NhZ2UgKm90TWVzc2FnZVF1ZXVlR2V0TmV4dChvdE1lc3NhZ2VRdWV1ZSAqYVF1ZXVlLCBjb25zdCBvdE1lc3NhZ2UgKmFNZXNzYWdlKTsKKworLyoqCisgKiBHZXQgdGhlIE1lc3NhZ2UgQnVmZmVyIGluZm9ybWF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFCdWZmZXJJbmZvICBBIHBvaW50ZXIgd2hlcmUgdGhlIG1lc3NhZ2UgYnVmZmVyIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4uCisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdE1lc3NhZ2VHZXRCdWZmZXJJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RCdWZmZXJJbmZvICphQnVmZmVySW5mbyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX01FU1NBR0VfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9uY3AuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9uY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2QxZDRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL25jcC5oCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdG9wLWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIE9wZW5UaHJlYWQgTkNQIG1vZHVsZS4KKyAqLworCisjaWZuZGVmIE5DUF9IXworI2RlZmluZSBOQ1BfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS1uY3AKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY29udHJvbCB0aGUgVGhyZWFkIHN0YWNrJ3MgZXhlY3V0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgTkNQLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBvdE5jcEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAYnJpZWYgU2VuZCBkYXRhIHRvIHRoZSBob3N0IHZpYSBhIHNwZWNpZmljIHN0cmVhbS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHNlbmQgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIGhvc3QKKyAqIHVzaW5nIHRoZSBnaXZlbiBhU3RyZWFtSWQuIFRoaXMgaXMgdXNlZnVsIGZvciByZXBvcnRpbmcKKyAqIGVycm9yIG1lc3NhZ2VzLCBpbXBsZW1lbnRpbmcgZGVidWcvZGlhZ25vc3RpYyBjb25zb2xlcywKKyAqIGFuZCBwb3RlbnRpYWxseSBvdGhlciB0eXBlcyBvZiBkYXRhc3RyZWFtcy4KKyAqCisgKiBUaGUgd3JpdGUgZWl0aGVyIGlzIGFjY2VwdGVkIGluIGl0cyBlbnRpcmV0eSBvciByZWplY3RlZC4KKyAqIFBhcnRpYWwgd3JpdGVzIGFyZSBub3QgYXR0ZW1wdGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFTdHJlYW1JZCAgQSBudW1lcmljIGlkZW50aWZpZXIgZm9yIHRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uCisgKiAgICAgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAnMCcsIHdpbGwgZGVmYXVsdCB0byB0aGUgZGVidWcgc3RyZWFtLgorICogQHBhcmFtW2luXSAgYURhdGFQdHIgICBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZCBvbiB0aGUgc3RyZWFtLgorICogICAgICAgICAgICAgICAgICAgICAgICBJZiBhRGF0YUxlbiBpcyBub24temVybywgdGhpcyBwYXJhbSBNVVNUIE5PVCBiZSBOVUxMLgorICogQHBhcmFtW2luXSAgYURhdGFMZW4gICBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgZnJvbSBhRGF0YVB0ciB0byBzZW5kLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgIFRoZSBkYXRhIHdhcyBxdWV1ZWQgZm9yIGRlbGl2ZXJ5IHRvIHRoZSBob3N0LgorICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIGNvbXBsZXRlIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuIFRoaXMgaXMgdXN1YWxseSBhIHRlbXBvcmFyeSBjb25kaXRpb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyBUaGUgZ2l2ZW4gYVN0cmVhbUlkIHdhcyBpbnZhbGlkLgorKi8KK290RXJyb3Igb3ROY3BTdHJlYW1Xcml0ZShpbnQgYVN0cmVhbUlkLCBjb25zdCB1aW50OF90ICphRGF0YVB0ciwgaW50IGFEYXRhTGVuKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGVlay9Qb2tlIG1lbW9yeSBhY2Nlc3MgY29udHJvbCBkZWxlZ2F0ZXMKKworLyoqCisgKiBEZWZpbmVzIGRlbGVnYXRlIChmdW5jdGlvbiBwb2ludGVyKSB0eXBlIHRvIGNvbnRyb2wgYmVoYXZpb3Igb2YgcGVlay9wb2tlIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGRlbGVnYXRlIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxvdyBwZWVrIG9yIHBva2Ugb2YgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLiBJdCBpcyB1c2VkCisgKiBpZiBOQ1Agc3VwcG9ydCBmb3IgcGVlay9wb2tlIGNvbW1hbmRzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSBhQWRkcmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIG1lbW9yeSByZWdpb24uCisgKiBAcGFyYW1baW5dIGFDb3VudCAgICAgIE51bWJlciBvZiBieXRlcyB0byBwZWVrIG9yIHBva2UuCisgKgorICogQHJldHVybnMgIFRSVUUgdG8gYWxsb3cgcGVlay9wb2tlIG9mIHRoZSBnaXZlbiBtZW1vcnkgcmVnaW9uLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCit0eXBlZGVmIGJvb2wgKCpvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSkodWludDMyX3QgYUFkZHJlc3MsIHVpbnQxNl90IGFDb3VudCk7CisKKy8qKgorICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIHBlZWsvcG9rZSBkZWxlZ2F0ZSBmdW5jdGlvbnMgd2l0aCBOQ1AgbW9kdWxlLgorICoKKyAqIFRoZSBkZWxlZ2F0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBOQ1AgbW9kdWxlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGFsbG93IHBlZWsgb3IgcG9rZSBvZiBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uCisgKiBJZiB0aGUgZGVsZWdhdGUgcG9pbnRlciBpcyBzZXQgdG8gTlVMTCwgaXQgYWxsb3dzIHBlZWsvcG9rZSBvcGVyYXRpb24gZm9yIGFueSBhZGRyZXNzLgorICoKKyAqIEBwYXJhbVtpbl0gYUFsbG93UGVla0RlbGVnYXRlICAgICAgRGVsZWdhdGUgZnVuY3Rpb24gcG9pbnRlciBmb3IgcGVlayBvcGVyYXRpb24uCisgKiBAcGFyYW1baW5dIGFBbGxvd1Bva2VEZWxlZ2F0ZSAgICAgIERlbGVnYXRlIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIHBva2Ugb3BlcmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgZGVsZWdhdGUgZnVuY3Rpb25zLgorICogQHJldHZhbCBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFICBQZWVrL1Bva2UgZmVhdHVyZSBpcyBkaXNhYmxlZCAoYnkgYSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9uKS4KKyAqCisgKi8KK290RXJyb3Igb3ROY3BSZWdpc3RlclBlZWtQb2tlRGVsYWdhdGVzKG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1BlZWtEZWxlZ2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1Bva2VEZWxlZ2F0ZSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExlZ2FjeSBuZXR3b3JrIEFQSXMKKworI2RlZmluZSBPVF9OQ1BfTEVHQUNZX1VMQV9QUkVGSVhfTEVOR1RIICAgIDggICAvLy88IExlZ2FjeSBVTEEgc2l6ZSAoaW4gYnl0ZXMpCisKKy8qKgorICogRGVmaW5lcyBoYW5kbGVyIChmdW5jdGlvbiBwb2ludGVyKSB0eXBlIGZvciBzdGFydGluZyBsZWdhY3kgbmV0d29yaworICoKKyAqIEludm9rZWQgdG8gc3RhcnQgdGhlIGxlZ2FjeSBuZXR3b3JrLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3ROY3BIYW5kbGVyU3RhcnRMZWdhY3kpKHZvaWQpOworCisvKioKKyAqIERlZmluZXMgaGFuZGxlciAoZnVuY3Rpb24gcG9pbnRlcikgdHlwZSBmb3Igc3RvcHBpbmcgbGVnYWN5IG5ldHdvcmsKKyAqCisgKiBJbnZva2VkIHRvIHN0b3AgdGhlIGxlZ2FjeSBuZXR3b3JrLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3ROY3BIYW5kbGVyU3RvcExlZ2FjeSkodm9pZCk7CisKKy8qKgorICogRGVmaW5lcyBoYW5kbGVyIChmdW5jdGlvbiBwb2ludGVyKSB0eXBlIGZvciBpbml0aWF0aW5nIGpvaW5pbmcgcHJvY2Vzcy4KKyAqCisgKiBAcGFyYW1baW5dIGFFeHRBZGRyZXNzICAgQSBwb2ludGVyIHRvIHRoZSBleHRlbmRlZCBhZGRyZXNzIGZvciB0aGUgbm9kZSB0byBqb2luCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCBpZiBkZXNpcmVkIHRvIGpvaW4gYW55IG5laWdoYm9yaW5nIG5vZGUuCisgKgorICogSW52b2tlZCB0byBpbml0aWF0ZSBhIGxlZ2FjeSBqb2luIHByb2NlZHVyZSB0byBhbnkgb3IgYSBzcGVjaWZpYyBub2RlLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3ROY3BIYW5kbGVySm9pbkxlZ2FjeU5vZGUpKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpOworCisvKioKKyAqIERlZmluZXMgaGFuZGxlciAoZnVuY3Rpb24gcG9pbnRlcikgdHlwZSBmb3Igc2V0dGluZyB0aGUgbGVnYWN5IFVMQSBwcmVmaXguCisgKgorICogQHBhcmFtW2luXSBhVWxhUHJlZml4ICAgQSBwb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIHRoZSBsZWdhY3kgVUxBIHByZWZpeC4KKyAqCisgKiBJbnZva2VkIHRvIHNldCB0aGUgbGVnYWN5IFVMQSBwcmVmaXguCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdE5jcEhhbmRsZXJTZXRMZWdhY3lVbGFQcmVmaXgpKGNvbnN0IHVpbnQ4X3QgKmFVbGFQcmVmaXgpOworCisvKioKKyAqIERlZmluZXMgYSBzdHJ1Y3QgY29udGFpbmluZyBhbGwgdGhlIGxlZ2FjeSBoYW5kbGVycyAoZnVuY3Rpb24gcG9pbnRlcnMpLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3ROY3BMZWdhY3lIYW5kbGVycworeworICAgIG90TmNwSGFuZGxlclN0YXJ0TGVnYWN5ICAgICAgICAgbVN0YXJ0TGVnYWN5OyAgICAgICAgIC8vLzwgU3RhcnQgaGFuZGxlcgorICAgIG90TmNwSGFuZGxlclN0b3BMZWdhY3kgICAgICAgICAgbVN0b3BMZWdhY3k7ICAgICAgICAgIC8vLzwgU3RvcCBoYW5kbGVyCisgICAgb3ROY3BIYW5kbGVySm9pbkxlZ2FjeU5vZGUgICAgICBtSm9pbkxlZ2FjeU5vZGU7ICAgICAgLy8vPCBKb2luIGhhbmRsZXIKKyAgICBvdE5jcEhhbmRsZXJTZXRMZWdhY3lVbGFQcmVmaXggIG1TZXRMZWdhY3lVbGFQcmVmaXg7ICAvLy88IFNldCBVTEEgaGFuZGxlcgorfSBvdE5jcExlZ2FjeUhhbmRsZXJzOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBieSB0aGUgbGVnYWN5IHN0YWNrIHRvIG5vdGlmeSB0aGF0IGEgbmV3CisgKiBsZWdhY3kgbm9kZSBkaWQgam9pbiB0aGUgbmV0d29yay4KKyAqLwordm9pZCBvdE5jcEhhbmRsZUxlZ2FjeU5vZGVEaWRKb2luKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHIpOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBieSB0aGUgbGVnYWN5IHN0YWNrIHRvIG5vdGlmeSB0aGF0IHRoZQorICogbGVnYWN5IFVMQSBwcmVmaXggaGFzIGNoYW5nZWQuCisgKi8KK3ZvaWQgb3ROY3BIYW5kbGVEaWRSZWNlaXZlTmV3TGVnYWN5VWxhUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFVbGFQcmVmaXgpOworCisvKioKKyAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIHNldCBvZiBsZWdhY3kgaGFuZGxlcnMgd2l0aCBOQ1AuCisgKgorICogVGhlIHNldCBvZiBoYW5kbGVycyBwcm92aWRlZCBieSB0aGUgc3RydWN0IEBwIGFIYW5kbGVycyBhcmUgdXNlZCBieQorICogTkNQIGNvZGUgdG8gc3RhcnQvc3RvcCBsZWdhY3kgbmV0d29yay4KKyAqIFRoZSBAcCBhSGFuZGxlcnMgY2FuIGJlIE5VTEwgdG8gZGlzYWJsZSBsZWdhY3kgc3VwcG9ydCBvbiBOQ1AuCisgKiBJbmRpdmlkdWFsIGhhbmRsZXJzIGluIHRoZSBnaXZlbiBoYW5kbGVycyBzdHJ1Y3QgY2FuIGFsc28gYmUgTlVMTC4KKyAqCisgKiBAcGFyYW1baW5dIGFIYW5kbGVycyAgICBBIHBvaW50ZXIgdG8gYSBoYW5kbGVyIHN0cnVjdC4KKyAqCisgKi8KK3ZvaWQgb3ROY3BSZWdpc3RlckxlZ2FjeUhhbmRsZXJzKGNvbnN0IG90TmNwTGVnYWN5SGFuZGxlcnMgKmFIYW5kbGVycyk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvbmV0ZGF0YS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL25ldGRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBkNDllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL25ldGRhdGEuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgTmV0d29yayBEYXRhIEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfTkVUREFUQV9IXworI2RlZmluZSBPUEVOVEhSRUFEX05FVERBVEFfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBmdWxsIG9yIHN0YWJsZSBjb3B5IG9mIHRoZSBMZWFkZXIncyBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gICAgIGFTdGFibGUgICAgICBUUlVFIHdoZW4gY29weWluZyB0aGUgc3RhYmxlIHZlcnNpb24sIEZBTFNFIHdoZW4gY29weWluZyB0aGUgZnVsbCB2ZXJzaW9uLgorICogQHBhcmFtW291dF0gICAgYURhdGEgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIuCisgKiBAcGFyYW1baW5vdXRdICBhRGF0YUxlbmd0aCAgT24gZW50cnksIHNpemUgb2YgdGhlIGRhdGEgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQHAgYURhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3ROZXREYXRhR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhU3RhYmxlLCB1aW50OF90ICphRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphRGF0YUxlbmd0aCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBuZXh0IE9uIE1lc2ggUHJlZml4IGluIHRoZSBwYXJ0aXRpb24ncyBOZXR3b3JrIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbm91dF0gIGFJdGVyYXRvciAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgaXRlcmF0b3IgY29udGV4dC4gVG8gZ2V0IHRoZSBmaXJzdCBvbi1tZXNoIGVudHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSBzZXQgdG8gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQuCisgKiBAcGFyYW1bb3V0XSAgICBhQ29uZmlnICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgT24gTWVzaCBQcmVmaXggaW5mb3JtYXRpb24gd2lsbCBiZSBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBPbiBNZXNoIHByZWZpeC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBObyBzdWJzZXF1ZW50IE9uIE1lc2ggcHJlZml4IGV4aXN0cyBpbiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZSBpbiB0aGUgcGFydGl0aW9uJ3MgTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3QgZXh0ZXJuYWwgcm91dGUgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHNldCB0byBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVC4KKyAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFeHRlcm5hbCBSb3V0ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBuZXh0IEV4dGVybmFsIFJvdXRlLgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgZXh0ZXJuYWwgcm91dGUgZW50cnkgZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqLworb3RFcnJvciBvdE5ldERhdGFHZXROZXh0Um91dGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZyk7CisKKy8qKgorICogR2V0IHRoZSBOZXR3b3JrIERhdGEgVmVyc2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIE5ldHdvcmsgRGF0YSBWZXJzaW9uLgorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdE5ldERhdGFHZXRWZXJzaW9uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBTdGFibGUgTmV0d29yayBEYXRhIFZlcnNpb24uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBTdGFibGUgTmV0d29yayBEYXRhIFZlcnNpb24uCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfTkVUREFUQV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL29wZW50aHJlYWQuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9vcGVudGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwZThlYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9vcGVudGhyZWFkLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIGZvciB0aGUgT3BlblRocmVhZCBsaWJyYXJ5LgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9IXworI2RlZmluZSBPUEVOVEhSRUFEX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NyeXB0by5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGF0YXNldC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2lwNi5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbGluay5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbmV0ZGF0YS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGFza2xldC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIGFwaSAgQVBJCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBhcGktZXhlY3V0aW9uIEV4ZWN1dGlvbgorICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGFwaS1pbnN0YW5jZSBJbnN0YW5jZQorICogQGRlZmdyb3VwIGFwaS10YXNrbGV0cyBUYXNrbGV0cworICoKKyAqIEB9CisgKgorICogQGRlZmdyb3VwIGFwaS1uZXQgSVB2NiBOZXR3b3JraW5nCisgKiBAeworICoKKyAqIEBkZWZncm91cCBhcGktZGhjcDYgREhDUHY2CisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBESENQdjYgQ2xpZW50IGFuZCBTZXJ2ZXIuCisgKiBAZGVmZ3JvdXAgYXBpLWRucyAgIEROU3Y2CisgKiBAZGVmZ3JvdXAgYXBpLWljbXA2IElDTVB2NgorICogQGRlZmdyb3VwIGFwaS1pcDYgICBJUHY2CisgKiBAZGVmZ3JvdXAgYXBpLXVkcCAgIFVEUAorICoKKyAqIEB9CisgKgorICogQGRlZmdyb3VwIGFwaS1saW5rIExpbmsKKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBhcGktbGluay1saW5rIExpbmsKKyAqIEBkZWZncm91cCBhcGktbGluay1yYXcgIFJhdyBMaW5rCisgKgorICogQH0KKyAqCisgKiBAZGVmZ3JvdXAgYXBpLW1lc3NhZ2UgTWVzc2FnZQorICoKKyAqIEBkZWZncm91cCBhcGktdGhyZWFkIFRocmVhZAorICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGFwaS1ib3JkZXItcm91dGVyICBCb3JkZXIgUm91dGVyCisgKiBAZGVmZ3JvdXAgYXBpLWNvbW1pc3Npb25lciAgIENvbW1pc3Npb25lcgorICogQGRlZmdyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbCBHZW5lcmFsCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBhbGwgVGhyZWFkIHJvbGVzLgorICogQGRlZmdyb3VwIGFwaS1qb2luZXIgICAgICAgICBKb2luZXIKKyAqIEBkZWZncm91cCBhcGktdGhyZWFkLXJvdXRlciAgUm91dGVyL0xlYWRlcgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgVGhyZWFkIFJvdXRlcnMgYW5kIExlYWRlcnMuCisgKiBAZGVmZ3JvdXAgYXBpLXRtZi1wcm94eSAgICAgIFRNRiBQcm94eQorICoKKyAqIEB9CisgKgorICogQGRlZmdyb3VwIGFwaS1hZGRvbnMgQWRkLU9ucworICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGFwaS1jaGlsZC1zdXBlcnZpc2lvbiAgIENoaWxkIFN1cGVydmlzaW9uCisgKiBAZGVmZ3JvdXAgYXBpLWNvYXAgICAgICAgICAgICAgICAgQ29BUAorICogQGRlZmdyb3VwIGFwaS1jbGkgICAgICAgICAgICAgICAgIENvbW1hbmQgTGluZSBJbnRlcmZhY2UKKyAqIEBkZWZncm91cCBhcGktY3J5cHRvICAgICAgICAgICAgICBDcnlwdG8KKyAqIEBkZWZncm91cCBhcGktZmFjdG9yeS1kaWFnbm9zdGljcyBGYWN0b3J5IERpYWdub3N0aWNzCisgKiBAZGVmZ3JvdXAgYXBpLWphbS1kZXRlY3Rpb24gICAgICAgSmFtIERldGVjdGlvbgorICogQGRlZmdyb3VwIGFwaS1uY3AgICAgICAgICAgICAgICAgIE5ldHdvcmsgQ28tUHJvY2Vzc29yCisgKgorICogQH0KKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBkZWZncm91cCBwbGF0Zm9ybSAgUGxhdGZvcm0gQWJzdHJhY3Rpb24KKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gdXNlZCBieSB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBwbGF0LWFsYXJtICAgICAgICAgICAgICAgQWxhcm0KKyAqIEBkZWZncm91cCBwbGF0LWZhY3RvcnktZGlhZ25vc3RpY3MgRmFjdG9yeSBEaWFnbm9zdGljcworICogQGRlZmdyb3VwIHBsYXQtbG9nZ2luZyAgICAgICAgICAgICBMb2dnaW5nCisgKiBAZGVmZ3JvdXAgcGxhdC1tZW1vcnkgICAgICAgICAgICAgIE1lbW9yeQorICogQGRlZmdyb3VwIHBsYXQtbWVzc2FnZXBvb2wgICAgICAgICBNZXNzYWdlIFBvb2wKKyAqIEBkZWZncm91cCBwbGF0LW1pc2MgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cworICogQGRlZmdyb3VwIHBsYXQtcmFkaW8gICAgICAgICAgICAgICBSYWRpbworICogQGRlZmdyb3VwIHBsYXQtcmFuZG9tICAgICAgICAgICAgICBSYW5kb20KKyAqIEBkZWZncm91cCBwbGF0LXNldHRpbmdzICAgICAgICAgICAgU2V0dGluZ3MKKyAqIEBkZWZncm91cCBwbGF0LXNwaS1zbGF2ZSAgICAgICAgICAgU1BJIFNsYXZlCisgKiBAZGVmZ3JvdXAgcGxhdC10b29sY2hhaW4gICAgICAgICAgIFRvb2xjaGFpbgorICogQGRlZmdyb3VwIHBsYXQtdWFydCAgICAgICAgICAgICAgICBVQVJUCisgKgorICogQH0KKyAqCisgKi8KKworLyoqCisgKiBHZXQgdGhlIE9wZW5UaHJlYWQgdmVyc2lvbiBzdHJpbmcuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBPcGVuVGhyZWFkIHZlcnNpb24uCisgKgorICovCitPVEFQSSBjb25zdCBjaGFyICpPVENBTEwgb3RHZXRWZXJzaW9uU3RyaW5nKHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYW4gb3RFcnJvciBlbnVtIGludG8gYSBzdHJpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICBBbiBvdEVycm9yIGVudW0uCisgKgorICogQHJldHVybnMgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG90RXJyb3IuCisgKgorICovCitPVEFQSSBjb25zdCBjaGFyICpPVENBTEwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKG90RXJyb3IgYUVycm9yKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vTWFrZWZpbGUuYW0gYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNzk2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUzIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK290X3BsYXRmb3JtX2hlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgPVwKKyAgICBhbGFybS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkaWFnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1vcnkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtaXNjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2dnaW5nLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwbGF0Zm9ybS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYWRpby5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByYW5kb20uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1YXJ0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGktc2xhdmUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXR0aW5ncy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZXNzYWdlcG9vbC5oICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0b29sY2hhaW4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2VjLWFsYXJtLmggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK290X3BsYXRmb3JtZGlyID0gJChpbmNsdWRlZGlyKS9vcGVudGhyZWFkL3BsYXRmb3JtCitkaXN0X290X3BsYXRmb3JtX0hFQURFUlMgPSAkKG90X3BsYXRmb3JtX2hlYWRlcnMpCisKK2luc3RhbGwtaGVhZGVyczogaW5zdGFsbC1pbmNsdWRlSEVBREVSUworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwZWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIG1pbGxpc2Vjb25kIGFsYXJtIHNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBBTEFSTV9IXworI2RlZmluZSBBTEFSTV9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LWFsYXJtCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgdGhlIGFsYXJtIHNlcnZpY2UuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBTZXQgdGhlIGFsYXJtIHRvIGZpcmUgYXQgQHAgYUR0IG1pbGxpc2Vjb25kcyBhZnRlciBAcCBhVDAuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gYVQwICAgICAgICBUaGUgcmVmZXJlbmNlIHRpbWUuCisgKiBAcGFyYW1baW5dIGFEdCAgICAgICAgVGhlIHRpbWUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGZyb20gQHAgYVQwLgorICovCit2b2lkIG90UGxhdEFsYXJtU3RhcnRBdChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFUMCwgdWludDMyX3QgYUR0KTsKKworLyoqCisgKiBTdG9wIHRoZSBhbGFybS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICovCit2b2lkIG90UGxhdEFsYXJtU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCB0aW1lLgorICoKKyAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRpbWUgaW4gbWlsbGlzZWNvbmRzLgorICovCit1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKTsKKworLyoqCisgKiBTaWduYWwgdGhhdCB0aGUgYWxhcm0gaGFzIGZpcmVkLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKi8KK2V4dGVybiB2b2lkIG90UGxhdEFsYXJtRmlyZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTaWduYWwgZGlhZ25vc3RpY3MgbW9kdWxlIHRoYXQgdGhlIGFsYXJtIGhhcyBmaXJlZC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICovCitleHRlcm4gdm9pZCBvdFBsYXREaWFnQWxhcm1GaXJlZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gQUxBUk1fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vZGlhZy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHBsYXRmb3JtIGRpYWcgaW50ZXJmYWNlLgorICoKKyAqLworCisjaWZuZGVmIERJQUdfSF8KKyNkZWZpbmUgRElBR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC1mYWN0b3J5LWRpYWdub3N0aWNzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgZGlhZ25vc3RpY3MgZmVhdHVyZXMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBhIGZhY3RvcnkgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2UgZm9yIGN1cnJlbnQgcmVxdWVzdC4KKyAqIEBwYXJhbVtpbl0gICBhcmdjICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGNvdW50ZXIgb2YgZGlhZ25vc3RpY3MgY29tbWFuZCBsaW5lLgorICogQHBhcmFtW2luXSAgIGFyZ3YgICAgICAgICAgICBUaGUgYXJndW1lbnQgdmVjdG9yIG9mIGRpYWdub3N0aWNzIGNvbW1hbmQgbGluZS4KKyAqIEBwYXJhbVtvdXRdICBhT3V0cHV0ICAgICAgICAgVGhlIGRpYWdub3N0aWNzIGV4ZWN1dGlvbiByZXN1bHQuCisgKiBAcGFyYW1baW5dICAgYU91dHB1dE1heExlbiAgIFRoZSBvdXRwdXQgYnVmZmVyIHNpemUuCisgKgorICovCit2b2lkIG90UGxhdERpYWdQcm9jZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZmFjdG9yeSBkaWFnbm9zdGljcyBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFNb2RlICBUUlVFIHRvIGVuYWJsZSBkaWFnbm9zdGljcyBtb2RlLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCit2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGZhY3RvcnkgZGlhZ25vc3RpY3MgbW9kZSBpcyBlbmFibGVkLgorICoKKyAqIEByZXR1cm5zIFRSVUUgaWYgZmFjdG9yeSBkaWFnbm9zdGljcyBtb2RlIGlzIGVuYWJsZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKi8KK2Jvb2wgb3RQbGF0RGlhZ01vZGVHZXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjaGFubmVsIHRvIHVzZSBmb3IgZmFjdG9yeSBkaWFnbm9zdGljcy4KKyAqCisgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIGNoYW5uZWwgdmFsdWUuCisgKgorICovCit2b2lkIG90UGxhdERpYWdDaGFubmVsU2V0KHVpbnQ4X3QgYUNoYW5uZWwpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHJhbnNtaXQgcG93ZXIgdG8gdXNlIGZvciBmYWN0b3J5IGRpYWdub3N0aWNzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFUeFBvd2VyICBUaGUgdHJhbnNtaXQgcG93ZXIgdmFsdWUuCisgKgorICovCit2b2lkIG90UGxhdERpYWdUeFBvd2VyU2V0KGludDhfdCBhVHhQb3dlcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlY2VpdmVkIHJhZGlvIGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBmb3IgY3VycmVudCByZXF1ZXN0LgorICogQHBhcmFtW2luXSAgIGFGcmFtZSAgICAgIFRoZSByZWNlaXZlZCByYWRpbyBmcmFtZS4KKyAqIEBwYXJhbVtpbl0gICBhRXJyb3IgICAgICBUaGUgcmVjZWl2ZWQgcmFkaW8gZnJhbWUgc3RhdHVzLgorICoKKyAqLwordm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGFsYXJtIGV2ZW50LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBmb3IgY3VycmVudCByZXF1ZXN0LgorICoKKyAqLwordm9pZCBvdFBsYXREaWFnQWxhcm1DYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLXdpbmRvd3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU1ZjBhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmctd2luZG93cy5oCkBAIC0wLDAgKzEsNTAwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgV1BQIFRyYWNpbmcgRGVmaW5pdGlvbnMuCisgKi8KKworI2lmbmRlZiBfTE9HR0lOR19XSU5ET1dTX0gKKyNkZWZpbmUgX0xPR0dJTkdfV0lORE9XU19ICisKKyNkZWZpbmUgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cgMQorCisvLworLy8gVHJhY2luZyBEZWZpbml0aW9uczogezFBQTk4OTI2LTJFNDAtNDNEMS05RDgzLTM0QzZCRTgxNjM2NX0KKy8vCisKKyNkZWZpbmUgV1BQX0NPTlRST0xfR1VJRFMgXAorICAgIFdQUF9ERUZJTkVfQ09OVFJPTF9HVUlEKCBcCisgICAgICAgIE9wZW5UaHJlYWRHVUlELCAoMUFBOTg5MjYsMkU0MCw0M0QxLDlEODMsMzRDNkJFODE2MzY1KSwgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChEUklWRVJfREVGQVVMVCkgICAgICAvKiAweDAwMDAwMDAxICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoRFJJVkVSX0lPQ1RMKSAgICAgICAgLyogMHgwMDAwMDAwMiAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKERSSVZFUl9PSUQpICAgICAgICAgIC8qIDB4MDAwMDAwMDQgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChEUklWRVJfREFUQV9QQVRIKSAgICAvKiAweDAwMDAwMDA4ICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfQVBJKSAgICAgICAgICAgICAgLyogMHgwMDAwMDAxMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX01MRSkgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMjAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9BUlApICAgICAgICAgICAgICAvKiAweDAwMDAwMDQwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfTkVURCkgICAgICAgICAgICAgLyogMHgwMDAwMDA4MCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX0lDTVApICAgICAgICAgICAgIC8qIDB4MDAwMDAxMDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9JUFY2KSAgICAgICAgICAgICAvKiAweDAwMDAwMjAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfTUFDKSAgICAgICAgICAgICAgLyogMHgwMDAwMDQwMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX01FTSkgICAgICAgICAgICAgIC8qIDB4MDAwMDA4MDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9OQ1ApICAgICAgICAgICAgICAvKiAweDAwMDAxMDAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfTUVTSENPUCkgICAgICAgICAgLyogMHgwMDAwMjAwMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX0RFRkFVTFQpICAgICAgICAgIC8qIDB4MDAwMDQwMDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9NQkVEVExTKSAgICAgICAgICAvKiAweDAwMDA4MDAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoT1RfRFVNUCkgICAgICAgICAgICAgLyogMHgwMDAxMDAwMCAqLyAgICBcCisgICAgICAgIFdQUF9ERUZJTkVfQklUKE9UX05ESUFHKSAgICAgICAgICAgIC8qIDB4MDAwMjAwMDAgKi8gICAgXAorICAgICAgICBXUFBfREVGSU5FX0JJVChPVF9DT0FQKSAgICAgICAgICAgICAvKiAweDAwMDQwMDAwICovICAgIFwKKyAgICAgICAgV1BQX0RFRklORV9CSVQoQVBJX0RFRkFVTFQpICAgICAgICAgLyogMHgwMDA4MDAwMCAqLyAgICBcCisgICAgICAgICkKKworI2RlZmluZSBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSKGx2bCxmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgIFdQUF9GTEFHX0xPR0dFUihmbGFnKQorI2RlZmluZSBXUFBfTEVWRUxfRkxBR1NfRVhQX0VOQUJMRUQoTEVWRUwsRkxBR1MsRVhQKSAgICAgICAgICAgIFdQUF9MRVZFTF9GTEFHU19FTkFCTEVEIChMRVZFTCxGTEFHUykKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0NUWF9FTkFCTEVEKExFVkVMLEZMQUdTLENUWCkgICAgICAgICAgICBXUFBfTEVWRUxfRkxBR1NfRU5BQkxFRCAoTEVWRUwsRkxBR1MpCisjZGVmaW5lIFdQUF9MRVZFTF9GTEFHU19DVFhfRVhQX0VOQUJMRUQoTEVWRUwsRkxBR1MsQ1RYLEVYUCkgICAgV1BQX0xFVkVMX0ZMQUdTX0VOQUJMRUQgKExFVkVMLEZMQUdTKQorCisjZGVmaW5lIFdQUF9MRVZFTF9GTEFHU19FTkFCTEVEKGx2bCwgZmxhZykgXAorICAgIChXUFBfRkxBR19FTkFCTEVEKGZsYWcpICYmIFdQUF9DT05UUk9MKFdQUF9CSVRfICMjIGZsYWcpLkxldmVsID49IGx2bCkKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0VYUF9MT0dHRVIoTEVWRUwsRkxBR1MsRVhQKSAgICAgICAgICAgICBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSIChMRVZFTCxGTEFHUykKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0NUWF9MT0dHRVIoTEVWRUwsRkxBR1MsQ1RYKSAgICAgICAgICAgICBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSIChMRVZFTCxGTEFHUykKKyNkZWZpbmUgV1BQX0xFVkVMX0ZMQUdTX0NUWF9FWFBfTE9HR0VSKExFVkVMLEZMQUdTLENUWCxFWFApICAgICBXUFBfTEVWRUxfRkxBR1NfTE9HR0VSIChMRVZFTCxGTEFHUykKKworI2RlZmluZSBXUFBfTE9HSVBWNih4KSBXUFBfTE9HUEFJUigxNiwgKHgpKQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBERUZJTkVfQ1BMWF9UWVBFKElQVjZBRERSLCBXUFBfTE9HSVBWNiwgSU42X0FERFIgKiwgSXRlbUlQVjZBZGRyLCAicyIsIF9JUFY2XywgMCk7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWChMb2dGdW5jRW50cnksICItLS0+ICUhRlVOQyEiKTsKKy8vIEZVTkMgTG9nRnVuY0VudHJ5e0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0V9KEZMQUdTKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKExvZ0Z1bmNFbnRyeU1zZywgIi0tLT4gJSFGVU5DISUhU1BBQ0UhIik7CisvLyBGVU5DIExvZ0Z1bmNFbnRyeU1zZ3tMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFfShGTEFHUywgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgoTG9nRnVuY0V4aXQsICI8LS0tICUhRlVOQyEiKTsKKy8vIEZVTkMgTG9nRnVuY0V4aXR7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRX0oRkxBR1MpOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgoTG9nRnVuY0V4aXRNc2csICI8LS0tICUhRlVOQyElIVNQQUNFISIpOworLy8gRlVOQyBMb2dGdW5jRXhpdE1zZ3tMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFfShGTEFHUywgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgoTG9nRnVuY0V4aXROVCwgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBMb2dGdW5jRXhpdE5Ue0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0V9KEZMQUdTLCBFWFApOworLy8gVVNFU1VGRklYKExvZ0Z1bmNFeGl0TlQsICIgJSFTVEFUVVMhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKExvZ0Z1bmNFeGl0TkRJUywgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBMb2dGdW5jRXhpdE5ESVN7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRX0oRkxBR1MsIEVYUCk7CisvLyBVU0VTVUZGSVgoTG9nRnVuY0V4aXRORElTLCAiICUhTkRJU19TVEFUVVMhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKExvZ0Z1bmNFeGl0V0lOLCAiPC0tLSAlIUZVTkMhIik7CisvLyBGVU5DIExvZ0Z1bmNFeGl0V0lOe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0V9KEZMQUdTLCBFWFApOworLy8gVVNFU1VGRklYKExvZ0Z1bmNFeGl0V0lOLCAiICUhV0lORVJST1IhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChMb2dFcnJvciwgIiAiKTsKKy8vIExvZ0Vycm9ye0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SfShGTEFHUywgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKExvZ1dhcm5pbmcsICIgIik7CisvLyBMb2dXYXJuaW5ne0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkd9KEZMQUdTLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAoTG9nSW5mbywgIiAiKTsKKy8vIExvZ0luZm97TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT059KEZMQUdTLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAoTG9nVmVyYm9zZSwgIiAiKTsKKy8vIExvZ1ZlcmJvc2V7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRX0oRkxBR1MsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8KKy8vIEN1c3RvbSB0eXBlcworLy8KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gQ1VTVE9NX1RZUEUob3RFcnJvciwgSXRlbUVudW0oVGhyZWFkRXJyb3IpKTsKKy8vIENVU1RPTV9UWVBFKG90RGV2aWNlUm9sZSwgSXRlbUVudW0ob3REZXZpY2VSb2xlKSk7CisvLyBlbmRfd3BwCisKKy8vCisvLyBvdENvcmUgRGVmaW5pdGlvbnMKKy8vCisKKy8vID09QVBJPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRBcGksICJbJXBdQVBJJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0QXBpe0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX0FQSX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuQXBpLCAiWyVwXUFQSSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2FybkFwaXtMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX0FQSX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvQXBpLCAiWyVwXUFQSSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb0FwaXtMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9BUEl9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ0FwaSwgIlslcF1BUEklIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdBcGl7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9BUEl9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyA9PU5DUD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0TmNwLCAiWyVwXU5DUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nQ3JpdE5jcHtMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9OQ1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2Fybk5jcCwgIlslcF1OQ1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5OY3B7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9OQ1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nSW5mb05jcCwgIlslcF1OQ1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9OY3B7TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT04sRkxBR1M9T1RfTkNQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdOY3AsICJbJXBdTkNQJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnTmNwe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTkNQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1NRVNIQ09QPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRNZXNoQ29QLCAiWyVwXU1FU0hDT1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRNZXNoQ29Qe0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX01FU0hDT1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2Fybk1lc2hDb1AsICJbJXBdTUVTSENPUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1lc2hDb1B7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9NRVNIQ09QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9NZXNoQ29QLCAiWyVwXU1FU0hDT1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9NZXNoQ29Qe0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX01FU0hDT1B9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ01lc2hDb1AsICJbJXBdTUVTSENPUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nRGViZ01lc2hDb1B7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9NRVNIQ09QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NlcnRNZXNoQ29QLCAiWyVwXU1FU0hDT1AlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NlcnRNZXNoQ29Qe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTUVTSENPUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TUJFRFRMUz09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0TWJlZFRscywgIlslcF1NQkVEJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TWJlZFRsc3tMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9NQkVEVExTfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5NYmVkVGxzLCAiWyVwXU1CRUQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5NYmVkVGxze0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfTUJFRFRMU30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTWJlZFRscywgIlslcF1NQkVEJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTWJlZFRsc3tMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9NQkVEVExTfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdNYmVkVGxzLCAiWyVwXU1CRUQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdNYmVkVGxze0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTUJFRFRMU30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TUxFPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRNbGUsICJbJXBdTUxFJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TWxle0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX01MRX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuTWxlLCAiWyVwXU1MRSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1sZXtMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX01MRX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuTWxlRXJyLCAiWyVwXU1MRSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1sZUVycntMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX01MRX0oQ1RYLCBFWFAsIE1TRywgLi4uKTsKKy8vIFVTRVNVRkZJWChvdExvZ1dhcm5NbGVFcnIsICIsICUhb3RFcnJvciEiLCBFWFApOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nSW5mb01sZSwgIlslcF1NTEUlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9NbGV7TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT04sRkxBR1M9T1RfTUxFfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdNbGUsICJbJXBdTUxFJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnTWxle0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTUxFfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1BUlA9PQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nQ3JpdEFycCwgIlslcF1BUlAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRBcnB7TEVWRUw9VFJBQ0VfTEVWRUxfRVJST1IsRkxBR1M9T1RfQVJQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5BcnAsICJbJXBdQVJQJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dXYXJuQXJwe0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfQVJQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9BcnAsICJbJXBdQVJQJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvQXJwe0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX0FSUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dEZWJnQXJwLCAiWyVwXUFSUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nRGViZ0FycHtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX0FSUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TkVURD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0TmV0RGF0YSwgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TmV0RGF0YXtMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9ORVREfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5OZXREYXRhLCAiWyVwXU5FVEQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5OZXREYXRhe0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfTkVURH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTmV0RGF0YSwgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTmV0RGF0YXtMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9ORVREfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdOZXREYXRhLCAiWyVwXU5FVEQlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdOZXREYXRhe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfTkVURH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09SUNNUD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0SWNtcCwgIlslcF1JQ01QJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0SWNtcHtMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9JQ01QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5JY21wLCAiWyVwXUlDTVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ1dhcm5JY21we0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfSUNNUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvSWNtcCwgIlslcF1JQ01QJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvSWNtcHtMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9JQ01QfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdJY21wLCAiWyVwXUlDTVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdJY21we0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfSUNNUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09SVBWNj09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dDcml0SXA2LCAiWyVwXUlQNiUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nQ3JpdElwNntMRVZFTD1UUkFDRV9MRVZFTF9FUlJPUixGTEFHUz1PVF9JUFY2fShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5JcDYsICJbJXBdSVA2JSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dXYXJuSXA2e0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfSVBWNn0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvSXA2LCAiWyVwXUlQNiUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb0lwNntMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9JUFY2fShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdJcDYsICJbJXBdSVA2JSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnSXA2e0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfSVBWNn0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09TUFDPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRNYWMsICJbJXBdTUFDJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dDcml0TWFje0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX01BQ30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dXYXJuTWFjLCAiWyVwXU1BQyUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk1hY3tMRVZFTD1UUkFDRV9MRVZFTF9XQVJOSU5HLEZMQUdTPU9UX01BQ30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTWFjLCAiWyVwXU1BQyUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb01hY3tMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9NQUN9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ01hYywgIlslcF1NQUMlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdNYWN7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9NQUN9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nRGViZ01hY0VyciwgIlslcF1NQUMlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdNYWNFcnJ7TEVWRUw9VFJBQ0VfTEVWRUxfVkVSQk9TRSxGTEFHUz1PVF9NQUN9KENUWCwgRVhQLCBNU0csIC4uLik7CisvLyBVU0VTVUZGSVgob3RMb2dEZWJnTWFjRXJyLCAiLCAlIW90RXJyb3IhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gPT1NRU09PQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nQ3JpdE1lbSwgIlslcF1NRU0lIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRNZW17TEVWRUw9VFJBQ0VfTEVWRUxfRVJST1IsRkxBR1M9T1RfTUVNfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ1dhcm5NZW0sICJbJXBdTUVNJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dXYXJuTWVte0xFVkVMPVRSQUNFX0xFVkVMX1dBUk5JTkcsRkxBR1M9T1RfTUVNfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9NZW0sICJbJXBdTUVNJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTWVte0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX01FTX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dEZWJnTWVtLCAiWyVwXU1FTSUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nRGViZ01lbXtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX01FTX0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09RFVNUD09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIG90TG9nRHVtcHtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX0RVTVB9KE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1NRU09PQorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nQ3JpdE5ldERpYWcsICJbJXBdTkVURCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nQ3JpdE5ldERpYWd7TEVWRUw9VFJBQ0VfTEVWRUxfRVJST1IsRkxBR1M9T1RfTkRJQUd9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2Fybk5ldERpYWcsICJbJXBdTkVURCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2Fybk5ldERpYWd7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9ORElBR30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dJbmZvTmV0RGlhZywgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dJbmZvTmV0RGlhZ3tMRVZFTD1UUkFDRV9MRVZFTF9JTkZPUk1BVElPTixGTEFHUz1PVF9ORElBR30oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWCAob3RMb2dEZWJnTmV0RGlhZywgIlslcF1ORVREJSFTUEFDRSEiLCBDVFgpOworLy8gb3RMb2dEZWJnTmV0RGlhZ3tMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX05ESUFHfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gPT1DT0FQPT0KKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0NyaXRDb2FwLCAiWyVwXUNPQVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0NyaXRDb2Fwe0xFVkVMPVRSQUNFX0xFVkVMX0VSUk9SLEZMQUdTPU9UX0NPQVB9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nV2FybkNvYXAsICJbJXBdQ09BUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nV2FybkNvYXB7TEVWRUw9VFJBQ0VfTEVWRUxfV0FSTklORyxGTEFHUz1PVF9DT0FQfShDVFgsIE1TRywgLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0luZm9Db2FwLCAiWyVwXUNPQVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0luZm9Db2Fwe0xFVkVMPVRSQUNFX0xFVkVMX0lORk9STUFUSU9OLEZMQUdTPU9UX0NPQVB9KENUWCwgTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVggKG90TG9nSW5mb0NvYXBFcnIsICJbJXBdQ09BUCUhU1BBQ0UhIiwgQ1RYKTsKKy8vIG90TG9nSW5mb0NvYXBFcnJ7TEVWRUw9VFJBQ0VfTEVWRUxfSU5GT1JNQVRJT04sRkxBR1M9T1RfQ09BUH0oQ1RYLCBFWFAsIE1TRywgLi4uKTsKKy8vIFVTRVNVRkZJWChvdExvZ0luZm9Db2FwRXJyLCAiLCAlIW90RXJyb3IhIiwgRVhQKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYIChvdExvZ0RlYmdDb2FwLCAiWyVwXUNPQVAlIVNQQUNFISIsIENUWCk7CisvLyBvdExvZ0RlYmdDb2Fwe0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfQ09BUH0oQ1RYLCBNU0csIC4uLik7CisvLyBlbmRfd3BwCisKKy8vID09RlVOQz09CisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWChvdExvZ0Z1bmNFbnRyeSwgIi0tLT4gJSFGVU5DISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFbnRyeXtMRVZFTD1UUkFDRV9MRVZFTF9WRVJCT1NFLEZMQUdTPU9UX0RFRkFVTFR9KC4uLik7CisvLyBlbmRfd3BwCisKKy8vIGJlZ2luX3dwcCBjb25maWcKKy8vIFVTRVBSRUZJWChvdExvZ0Z1bmNFbnRyeU1zZywgIi0tLT4gJSFGVU5DISUhU1BBQ0UhIik7CisvLyBGVU5DIG90TG9nRnVuY0VudHJ5TXNne0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgob3RMb2dGdW5jRXhpdCwgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFeGl0e0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oLi4uKTsKKy8vIGVuZF93cHAKKworLy8gYmVnaW5fd3BwIGNvbmZpZworLy8gVVNFUFJFRklYKG90TG9nRnVuY0V4aXRNc2csICI8LS0tICUhRlVOQyElIVNQQUNFISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFeGl0TXNne0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oTVNHLCAuLi4pOworLy8gZW5kX3dwcAorCisvLyBiZWdpbl93cHAgY29uZmlnCisvLyBVU0VQUkVGSVgob3RMb2dGdW5jRXhpdEVyciwgIjwtLS0gJSFGVU5DISIpOworLy8gRlVOQyBvdExvZ0Z1bmNFeGl0RXJye0xFVkVMPVRSQUNFX0xFVkVMX1ZFUkJPU0UsRkxBR1M9T1RfREVGQVVMVH0oRVhQKTsKKy8vIFVTRVNVRkZJWChvdExvZ0Z1bmNFeGl0RXJyLCAiICUhb3RFcnJvciEiLCBFWFApOworLy8gZW5kX3dwcAorCisjZW5kaWYgLy8gX0xPR0dJTkdfV0lORE9XU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDlhYjRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBkZWJ1ZyBsb2cgc2VydmljZS4KKyAqLworCisjaWZuZGVmIExPR0dJTkdfSF8KKyNkZWZpbmUgTE9HR0lOR19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LWxvZ2dpbmcKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciB0aGUgZGVidWcgbG9nIHNlcnZpY2UuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBMb2cgbGV2ZWxzLgorICovCisjZGVmaW5lIE9UX0xPR19MRVZFTF9OT05FICAwICAvLy88IE5vbmUKKyNkZWZpbmUgT1RfTE9HX0xFVkVMX0NSSVQgIDEgIC8vLzwgQ3JpdGljYWwKKyNkZWZpbmUgT1RfTE9HX0xFVkVMX1dBUk4gIDIgIC8vLzwgV2FybmluZworI2RlZmluZSBPVF9MT0dfTEVWRUxfSU5GTyAgMyAgLy8vPCBJbmZvCisjZGVmaW5lIE9UX0xPR19MRVZFTF9ERUJHICA0ICAvLy88IERlYnVnCisKK3R5cGVkZWYgdWludDhfdCBvdExvZ0xldmVsOworCisvKioKKyAqIFRoaXMgZW51bSByZXByZXNlbnRzIGxvZyByZWdpb25zLgorICoKKyAqLwordHlwZWRlZiBlbnVtIG90TG9nUmVnaW9uCit7CisgICAgT1RfTE9HX1JFR0lPTl9BUEkgICAgICA9IDEsICAvLy88IE9wZW5UaHJlYWQgQVBJCisgICAgT1RfTE9HX1JFR0lPTl9NTEUgICAgICA9IDIsICAvLy88IE1MRQorICAgIE9UX0xPR19SRUdJT05fQVJQICAgICAgPSAzLCAgLy8vPCBFSUQtdG8tUkxPQyBtYXBwaW5nLgorICAgIE9UX0xPR19SRUdJT05fTkVUX0RBVEEgPSA0LCAgLy8vPCBOZXR3b3JrIERhdGEKKyAgICBPVF9MT0dfUkVHSU9OX0lDTVAgICAgID0gNSwgIC8vLzwgSUNNUHY2CisgICAgT1RfTE9HX1JFR0lPTl9JUDYgICAgICA9IDYsICAvLy88IElQdjYKKyAgICBPVF9MT0dfUkVHSU9OX01BQyAgICAgID0gNywgIC8vLzwgSUVFRSA4MDIuMTUuNCBNQUMKKyAgICBPVF9MT0dfUkVHSU9OX01FTSAgICAgID0gOCwgIC8vLzwgTWVtb3J5CisgICAgT1RfTE9HX1JFR0lPTl9OQ1AgICAgICA9IDksICAvLy88IE5DUAorICAgIE9UX0xPR19SRUdJT05fTUVTSF9DT1AgPSAxMCwgLy8vPCBNZXNoIENvbW1pc3Npb25pbmcgUHJvdG9jb2wKKyAgICBPVF9MT0dfUkVHSU9OX05FVF9ESUFHID0gMTEsIC8vLzwgTmV0d29yayBEaWFnbm9zdGljCisgICAgT1RfTE9HX1JFR0lPTl9QTEFURk9STSA9IDEyLCAvLy88IFBsYXRmb3JtCisgICAgT1RfTE9HX1JFR0lPTl9DT0FQICAgICA9IDEzLCAvLy88IENvQVAKK30gb3RMb2dSZWdpb247CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBvdXRwdXRzIGxvZ3MuCisgKgorICogQHBhcmFtW2luXSAgYUxvZ0xldmVsICAgVGhlIGxvZyBsZXZlbC4KKyAqIEBwYXJhbVtpbl0gIGFMb2dSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgICAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIERFQlVHX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVtb3J5LmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZGE1OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9tZW1vcnkuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAqLworCisjaWZuZGVmIE1FTU9SWV9IXworI2RlZmluZSBNRU1PUllfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtbWVtb3J5CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKgorICogT3BlblRocmVhZCBvbmx5IHJlcXVpcmVzIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiBzdXBwb3J0aW5nIG11bHRpcGxlIHNpbXVsdGFuZW91cyBpbnN0YW5jZXMsIGZvciBNYmVkVGxzLgorICovCisKKy8qKgorICogRHluYW1pY2FsbHkgYWxsb2NhdGVzIG5ldyBtZW1vcnkuIE9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQsIHNob3VsZCBqdXN0IHJlZGlyZWN0IHRvIGNhbGxvYy4gRm9yCisgKiB0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgY2FsbG9jLCBzaG91bGQgc3VwcG9ydCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5OgorICoKKyAqICAgIlRoZSBjYWxsb2MoKSBmdW5jdGlvbiBjb250aWd1b3VzbHkgYWxsb2NhdGVzIGVub3VnaCBzcGFjZSBmb3IgY291bnQgb2JqZWN0cyB0aGF0IGFyZSBzaXplIGJ5dGVzIG9mCisgKiAgIG1lbW9yeSBlYWNoIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggYnl0ZXMKKyAqICAgb2YgdmFsdWUgemVyby4iCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGNhbiBPTkxZIGJlIHVzZWQgb25seSB3aGVuIHN1cHBvcnQgZm9yIG11bHRpcGxlIE9wZW5UaHJlYWQgaW5zdGFuY2VzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSBhTnVtICAgVGhlIG51bWJlciBvZiBibG9ja3MgdG8gYWxsb2NhdGUKKyAqIEBwYXJhbVtpbl0gYVNpemUgIFRoZSBzaXplIG9mIGVhY2ggYmxvY2sgdG8gYWxsb2NhdGUKKyAqCisgKiBAcmV0dmFsIHZvaWQqICBUaGUgcG9pbnRlciB0byB0aGUgZnJvbnQgb2YgdGhlIG1lbW9yeSBhbGxvY2F0ZWQKKyAqIEByZXR2YWwgTlVMTCAgIEZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5IHJlcXVlc3RlZC4KKyAqLwordm9pZCAqb3RQbGF0Q0FsbG9jKHNpemVfdCBhTnVtLCBzaXplX3QgYVNpemUpOworCisvKioKKyAqIEZyZWVzIG1lbW9yeSB0aGF0IHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgYW5kIGNhbiBPTkxZIGJlIHVzZWQgb25seSB3aGVuIHN1cHBvcnQgZm9yIG11bHRpcGxlIE9wZW5UaHJlYWQgaW5zdGFuY2VzIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSBhUHRyICBBIHBvaW50ZXIgdGhlIG1lbW9yeSBibG9ja3MgdG8gZnJlZS4gVGhlIHBvaW50ZXIgbWF5IGJlIE5VTEwuCisgKi8KK3ZvaWQgb3RQbGF0RnJlZSh2b2lkICphUHRyKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIERFQlVHX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9tZXNzYWdlcG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YTdlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBtZXNzYWdlIHBvb2wuCisgKi8KKworI2lmbmRlZiBNRVNTQUdFUE9PTF9IXworI2RlZmluZSBNRVNTQUdFUE9PTF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC1tZXNzYWdlcG9vbAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBtZXNzYWdlIHBvb2wuCisgKgorICogQHsKKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHBsYXRmb3JtIGltcGxlbWVudGVkIG1lc3NhZ2UgcG9vbC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gYU1pbk51bUZyZWVCdWZmZXJzICAgQW4gdWludDE2IGNvbnRhaW5pbmcgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgYnVmZmVycyBkZXNpcmVkIGJ5IE9wZW5UaHJlYWQuCisgKiBAcGFyYW1baW5dIGFCdWZmZXJTaXplICAgICAgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIGEgQnVmZmVyIG9iamVjdC4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0TWVzc2FnZVBvb2xJbml0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYU1pbk51bUZyZWVCdWZmZXJzLCBzaXplX3QgYUJ1ZmZlclNpemUpOworCisvKioKKyAqIEFsbG9jYXRlIGEgYnVmZmVyIGZyb20gdGhlIHBsYXRmb3JtIG1hbmFnZWQgYnVmZmVyIHBvb2wuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBCdWZmZXIgb3IgTlVMTCBpZiBubyBCdWZmZXJzIGFyZSBhdmFpbGFibGUuCisgKgorICovCitvdE1lc3NhZ2UgKm90UGxhdE1lc3NhZ2VQb29sTmV3KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZyZWUgYSBCdWZmZXIgYmFjayB0byB0aGUgcGxhdGZvcm0gbWFuYWdlZCBidWZmZXIgcG9vbC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFCdWZmZXIgICAgVGhlIEJ1ZmZlciB0byBmcmVlLgorICoKKyAqLwordm9pZCBvdFBsYXRNZXNzYWdlUG9vbEZyZWUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE1lc3NhZ2UgKmFCdWZmZXIpOworCisvKioKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGZyZWUgYnVmZmVycy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgY3VycmVudGx5IGZyZWUgYW5kIGF2YWlsYWJsZSB0byBPcGVuVGhyZWFkLgorICoKKyAqLwordWludDE2X3Qgb3RQbGF0TWVzc2FnZVBvb2xOdW1GcmVlQnVmZmVycyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisvKioKKyAqIEB9CisgKgorICovCisKKworI2VuZGlmICAvLyBNRVNTQUdFUE9PTF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgcGxhdGZvcm0gYWJzdHJhY3Rpb25zIGZvciBtaXNjZWxsYW5lb3VzIGJlaGF2aW9ycy4KKyAqLworCisjaWZuZGVmIE9UX1BMQVRGT1JNX01JU0NfSAorI2RlZmluZSBPVF9QTEFURk9STV9NSVNDX0ggMQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LW1pc2MKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgcGxhdGZvcm0gYWJzdHJhY3Rpb25zIGZvciBtaXNjZWxsYW5lb3VzIGJlaGF2aW9ycy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBzb2Z0d2FyZSByZXNldCBvbiB0aGUgcGxhdGZvcm0sIGlmIHN1cHBvcnRlZC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqLwordm9pZCBvdFBsYXRSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlc2V0IHJlYXNvbiBjb2Rlcy4KKyAqCisgKiBUaGVzZSBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFNwaW5lbCByZXNldCByZWFzb24gY29kZXMuCisgKgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTiAgICAgICA9IDAsCisgICAgT1RfUExBVF9SRVNFVF9SRUFTT05fRVhURVJOQUwgICAgICAgPSAxLAorICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX1NPRlRXQVJFICAgICAgID0gMiwKKyAgICBPVF9QTEFUX1JFU0VUX1JFQVNPTl9GQVVMVCAgICAgICAgICA9IDMsCisgICAgT1RfUExBVF9SRVNFVF9SRUFTT05fQ1JBU0ggICAgICAgICAgPSA0LAorICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX0FTU0VSVCAgICAgICAgID0gNSwKKyAgICBPVF9QTEFUX1JFU0VUX1JFQVNPTl9PVEhFUiAgICAgICAgICA9IDYsCisgICAgT1RfUExBVF9SRVNFVF9SRUFTT05fVU5LTk9XTiAgICAgICAgPSA3LAorICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX1dBVENIRE9HICAgICAgID0gOCwKKworICAgIE9UX1BMQVRfUkVTRVRfUkVBU09OX0NPVU5ULAorfSBvdFBsYXRSZXNldFJlYXNvbjsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlYXNvbiBmb3IgdGhlIGxhc3QgcGxhdGZvcm0gcmVzZXQuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK290UGxhdFJlc2V0UmVhc29uIG90UGxhdEdldFJlc2V0UmVhc29uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHBsYXRmb3JtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBhc3NlcnQuCisgKgorICogQHBhcmFtW2luXSBhRmlsZW5hbWUgICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgdGhlIGFzc2VydCBvY2N1cnJlZC4KKyAqIEBwYXJhbVtpbl0gYUxpbmVOdW1iZXIgIFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSB3aGVyZSB0aGUgYXNzZXJ0IG9jY3VycmVkLgorICoKKyAqLwordm9pZCBvdFBsYXRBc3NlcnRGYWlsKGNvbnN0IGNoYXIgKmFGaWxlbmFtZSwgaW50IGFMaW5lTnVtYmVyKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgcGxhdGZvcm0gc3BlY2lmaWMgb3BlcmF0aW9uIHRvIHdha2UgdGhlIGhvc3QgTUNVLgorICogVGhpcyBpcyB1c2VkIG9ubHkgZm9yIE5DUCBjb25maWd1cmF0aW9ucy4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0V2FrZUhvc3Qodm9pZCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPVF9QTEFURk9STV9NSVNDX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1MTE0MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5pdGlhbGl6ZXJzLgorICovCisKKyNpZm5kZWYgUExBVEZPUk1fSF8KKyNkZWZpbmUgUExBVEZPUk1fSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYWxsIHBsYXRmb3JtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICoKKyAqLwordm9pZCBQbGF0Zm9ybUluaXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGwgcGxhdGZvcm0tc3BlY2lmaWMgZGVpbml0aWFsaXphdGlvbi4KKyAqCisgKi8KK3ZvaWQgUGxhdGZvcm1EZWluaXQodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbGwgcGxhdGZvcm0tc3BlY2lmaWMgcHJvY2Vzc2luZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgUGxhdGZvcm1Qcm9jZXNzRHJpdmVycyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGVuZCBvZiBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBQTEFURk9STV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFjZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmgKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgcmFkaW8gaW50ZXJmYWNlIGZvciBPcGVuVGhyZWFkLgorICoKKyAqLworCisjaWZuZGVmIFJBRElPX0hfCisjZGVmaW5lIFJBRElPX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtcmFkaW8KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciByYWRpbyBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogQGRlZmdyb3VwIHJhZGlvLXR5cGVzIFR5cGVzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgYSByYWRpbyBmcmFtZS4KKyAqCisgKiBAeworICoKKyAqLworCitlbnVtCit7CisgICAgT1RfUkFESU9fRlJBTUVfTUFYX1NJWkUgICAgICA9IDEyNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgYU1heFBIWVBhY2tldFNpemUgKElFRUUgODAyLjE1LjQtMjAwNikKKyAgICBPVF9SQURJT19DSEFOTkVMX01JTiAgICAgICAgID0gMTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCAyLjQgR0h6IElFRUUgODAyLjE1LjQtMjAwNgorICAgIE9UX1JBRElPX0NIQU5ORUxfTUFYICAgICAgICAgPSAyNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IDIuNCBHSHogSUVFRSA4MDIuMTUuNC0yMDA2CisgICAgT1RfUkFESU9fU1VQUE9SVEVEX0NIQU5ORUxTICA9IDB4ZmZmZiA8PCBPVF9SQURJT19DSEFOTkVMX01JTiwgIC8vLzwgMi40IEdIeiBJRUVFIDgwMi4xNS40LTIwMDYKKyAgICBPVF9SQURJT19TWU1CT0xTX1BFUl9PQ1RFVCAgID0gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCAyLjQgR0h6IElFRUUgODAyLjE1LjQtMjAwNgorICAgIE9UX1JBRElPX0JJVF9SQVRFICAgICAgICAgICAgPSAyNTAwMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IDIuNCBHSHogSUVFRSA4MDIuMTUuNCAoa2lsb2JpdHMgcGVyIHNlY29uZCkKKworICAgIE9UX1JBRElPX0JJVFNfUEVSX09DVEVUICA9IDgsICAgICAgLy8vPCBOdW1iZXIgb2YgYml0cyBwZXIgb2N0ZXQKKyAgICBPVF9SQURJT19TWU1CT0xfVElNRSAgICAgPSAoKE9UX1JBRElPX0JJVFNfUEVSX09DVEVUIC8gT1RfUkFESU9fU1lNQk9MU19QRVJfT0NURVQpICogMTAwMDAwMCkgLyBPVF9SQURJT19CSVRfUkFURSwKKworICAgIE9UX1JBRElPX0xRSV9OT05FICAgICAgICA9IDAsICAgICAgLy8vPCBMUUkgbWVhc3VyZW1lbnQgbm90IHN1cHBvcnRlZAorICAgIE9UX1JBRElPX1JTU0lfSU5WQUxJRCAgICA9IDEyNywgICAgLy8vPCBJbnZhbGlkIG9yIHVua25vd24gUlNTSSB2YWx1ZQorfTsKKworLyoqCisgKiBUaGlzIGVudW0gcmVwcmVzZW50cyByYWRpbyBjYXBhYmlsaXRpZXMuCisgKgorICovCit0eXBlZGVmIGVudW0gb3RSYWRpb0NhcHMKK3sKKyAgICBPVF9SQURJT19DQVBTX05PTkUgICAgICAgICAgICAgID0gMCwgIC8vLzwgTm9uZQorICAgIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQgICAgICAgPSAxLCAgLy8vPCBSYWRpbyBzdXBwb3J0cyBBY2tUaW1lIGV2ZW50CisgICAgT1RfUkFESU9fQ0FQU19FTkVSR1lfU0NBTiAgICAgICA9IDIsICAvLy88IFJhZGlvIHN1cHBvcnRzIEVuZXJneSBTY2FucworICAgIE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFUyAgPSA0LCAgLy8vPCBSYWRpbyBzdXBwb3J0cyB0cmFuc21pc3Npb24gcmV0cnkgbG9naWMgd2l0aCBjb2xsaXNpb24gYXZvaWRhbmNlIChDU01BKS4KKyAgICBPVF9SQURJT19DQVBTX0NTTUFfQkFDS09GRiAgICAgID0gOCwgIC8vLzwgUmFkaW8gc3VwcG9ydHMgQ1NNQSBiYWNrb2ZmIGZvciBmcmFtZSB0cmFuc21pc3Npb24gKGJ1dCBubyByZXRyeSkuCit9IG90UmFkaW9DYXBzOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSUVFRSA4MDIuMTUuNCByYWRpbyBmcmFtZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RSYWRpb0ZyYW1lCit7CisgICAgdWludDhfdCAgKm1Qc2R1OyAgICAgICAgICAgIC8vLzwgVGhlIFBTRFUuCisgICAgdWludDhfdCAgbUxlbmd0aDsgICAgICAgICAgIC8vLzwgTGVuZ3RoIG9mIHRoZSBQU0RVLgorICAgIHVpbnQ4X3QgIG1DaGFubmVsOyAgICAgICAgICAvLy88IENoYW5uZWwgdXNlZCB0byB0cmFuc21pdC9yZWNlaXZlIHRoZSBmcmFtZS4KKyAgICBpbnQ4X3QgICBtUG93ZXI7ICAgICAgICAgICAgLy8vPCBUcmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbS4KKyAgICB1aW50OF90ICBtTHFpOyAgICAgICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW5kaWNhdG9yIGZvciByZWNlaXZlZCBmcmFtZXMuCisgICAgdWludDhfdCAgbU1heFR4QXR0ZW1wdHM7ICAgIC8vLzwgTWF4IG51bWJlciBvZiB0cmFuc21pdCBhdHRlbXB0cyBmb3IgYW4gb3V0Ym91bmQgZnJhbWUuCisgICAgYm9vbCAgICAgbVNlY3VyaXR5VmFsaWQ6IDE7IC8vLzwgU2VjdXJpdHkgRW5hYmxlZCBmbGFnIGlzIHNldCBhbmQgZnJhbWUgcGFzc2VzIHNlY3VyaXR5IGNoZWNrcy4KKyAgICBib29sICAgICBtRGlkVFg6IDE7ICAgICAgICAgLy8vPCBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGZyYW1lIHNlbnQgZnJvbSB0aGUgcmFkaW8uIElnbm9yZWQgYnkgcmFkaW8gZHJpdmVyLgorICAgIGJvb2wgICAgIG1Jc0FSZXR4OiAxOyAgICAgICAvLy88IFNldCB0byB0cnVlIGlmIHRoaXMgZnJhbWUgaXMgYSByZXRyYW5zbWlzc2lvbi4gU2hvdWxkIGJlIGlnbm9yZWQgYnkgcmFkaW8gZHJpdmVyLgorfSBvdFJhZGlvRnJhbWU7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSByYWRpby4KKyAqIEluaXRpYWxseSwgYSByYWRpbyBpcyBpbiB0aGUgRGlzYWJsZWQgc3RhdGUuCisgKi8KK3R5cGVkZWYgZW51bSBvdFJhZGlvU3RhdGUKK3sKKyAgICBPVF9SQURJT19TVEFURV9ESVNBQkxFRCA9IDAsCisgICAgT1RfUkFESU9fU1RBVEVfU0xFRVAgICAgPSAxLAorICAgIE9UX1JBRElPX1NUQVRFX1JFQ0VJVkUgID0gMiwKKyAgICBPVF9SQURJT19TVEFURV9UUkFOU01JVCA9IDMsCit9IG90UmFkaW9TdGF0ZTsKKworLyoqCisgKiBUaGUgZm9sbG93aW5nIGFyZSB2YWxpZCByYWRpbyBzdGF0ZSB0cmFuc2l0aW9uczoKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSYWRpbyBPTikKKyAqICArLS0tLS0tLS0tLSsgIEVuYWJsZSgpICArLS0tLS0tLSsgIFJlY2VpdmUoKSArLS0tLS0tLS0tKyAgIFRyYW5zbWl0KCkgICstLS0tLS0tLS0tKworICogIHwgICAgICAgICAgfC0tLS0tLS0tLS0tPnwgICAgICAgfC0tLS0tLS0tLS0tPnwgICAgICAgICB8LS0tLS0tLS0tLS0tLS0+fCAgICAgICAgICB8CisgKiAgfCBEaXNhYmxlZCB8ICAgICAgICAgICAgfCBTbGVlcCB8ICAgICAgICAgICAgfCBSZWNlaXZlIHwgICAgICAgICAgICAgICB8IFRyYW5zbWl0IHwKKyAqICB8ICAgICAgICAgIHw8LS0tLS0tLS0tLS18ICAgICAgIHw8LS0tLS0tLS0tLS18ICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLXwgICAgICAgICAgfAorICogICstLS0tLS0tLS0tKyAgRGlzYWJsZSgpICstLS0tLS0tKyAgIFNsZWVwKCkgICstLS0tLS0tLS0rICAgUmVjZWl2ZSgpICAgKy0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSYWRpbyBPRkYpICAgICAgICAgICAgICAgICBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBUcmFuc21pdERvbmUKKyAqLworCisvKioKKyAqIEB9CisgKgorICovCisKKy8qKgorICogQGRlZmdyb3VwIHJhZGlvLWNvbmZpZyBDb25maWd1cmF0aW9uCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gY29uZmlndXJhdGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCB0aGUgZmFjdG9yeS1hc3NpZ25lZCBJRUVFIEVVSS02NCBmb3IgdGhpcyBpbnRlcmZhY2UuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW291dF0gYUllZWVFdWk2NCAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmYWN0b3J5LWFzc2lnbmVkIElFRUUgRVVJLTY0IHdpbGwgYmUgcGxhY2VkLgorICoKKyAqLwordm9pZCBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgKmFJZWVlRXVpNjQpOworCisvKioKKyAqIFNldCB0aGUgUEFOIElEIGZvciBhZGRyZXNzIGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSBhUGFuSWQgICAgIFRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCk7CisKKy8qKgorICogU2V0IHRoZSBFeHRlbmRlZCBBZGRyZXNzIGZvciBhZGRyZXNzIGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gYUV4dGVuZGVkQWRkcmVzcyAgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICovCit2b2lkIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCAqYUV4dGVuZGVkQWRkcmVzcyk7CisKKy8qKgorICogU2V0IHRoZSBTaG9ydCBBZGRyZXNzIGZvciBhZGRyZXNzIGZpbHRlcmluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gYVNob3J0QWRkcmVzcyAgVGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBkZWZncm91cCByYWRpby1vcGVyYXRpb24gT3BlcmF0aW9uCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFkaW8gb3BlcmF0aW9ucy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCBjdXJyZW50IHN0YXRlIG9mIHRoZSByYWRpby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBieSBPcGVuVGhyZWFkLiBJdCBtYXkgYmUgdXNlZCBmb3IgZGVidWdnaW5nIGFuZC9vciBhcHBsaWNhdGlvbi1zcGVjaWZpYyBwdXJwb3Nlcy4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBiZSBub3QgaW1wbGVtZW50ZWQuIEl0IGRvZXMgbm90IGFmZmVjdCBPcGVuVGhyZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiAgQ3VycmVudCBzdGF0ZSBvZiB0aGUgcmFkaW8uCisgKi8KK290UmFkaW9TdGF0ZSBvdFBsYXRSYWRpb0dldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogRW5hYmxlIHRoZSByYWRpby4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgIFRoZSByYWRpbyBjb3VsZCBub3QgYmUgZW5hYmxlZC4KKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIERpc2FibGUgdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgdHJhbnNpdGlvbmVkIHRvIERpc2FibGVkLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvRGlzYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIENoZWNrIHdoZXRoZXIgcmFkaW8gaXMgZW5hYmxlZCBvciBub3QuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJucyBUUlVFIGlmIHRoZSByYWRpbyBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCitib29sIG90UGxhdFJhZGlvSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVHJhbnNpdGlvbiB0aGUgcmFkaW8gZnJvbSBSZWNlaXZlIHRvIFNsZWVwLgorICogVHVybiBvZmYgdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gU2xlZXAuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgICAgICAgICAgVGhlIHJhZGlvIHdhcyB0cmFuc21pdHRpbmcKKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSBUaGUgcmFkaW8gd2FzIGRpc2FibGVkCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRyYW5zaXRpb25pbmcgdGhlIHJhZGlvIGZyb20gU2xlZXAgdG8gUmVjZWl2ZS4KKyAqIFR1cm4gb24gdGhlIHJhZGlvLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUNoYW5uZWwgICBUaGUgY2hhbm5lbCB0byB1c2UgZm9yIHJlY2VpdmluZy4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRyYW5zaXRpb25lZCB0byBSZWNlaXZlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFIFRoZSByYWRpbyB3YXMgZGlzYWJsZWQgb3IgdHJhbnNtaXR0aW5nLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpOworCisvKioKKyAqIEVuYWJsZS9EaXNhYmxlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUuCisgKgorICogVGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUgY29udHJvbHMgaG93IHRoZSByYWRpbyBsYXllciBkZWNpZGVzIHRoZSAiZnJhbWUgcGVuZGluZyIgYml0IGZvciBhY2tzIHNlbnQgaW4KKyAqIHJlc3BvbnNlIHRvIGRhdGEgcmVxdWVzdCBjb21tYW5kcyBmcm9tIGNoaWxkcmVuLgorICoKKyAqIElmIGRpc2FibGVkLCB0aGUgcmFkaW8gbGF5ZXIgbXVzdCBzZXQgdGhlICJmcmFtZSBwZW5kaW5nIiBvbiBhbGwgYWNrcyB0byBkYXRhIHJlcXVlc3QgY29tbWFuZHMuCisgKgorICogSWYgZW5hYmxlZCwgdGhlIHJhZGlvIGxheWVyIHVzZXMgdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNldCBvciBjbGVhciB0aGUgImZyYW1lCisgKiBwZW5kaW5nIiBiaXQgaW4gYW4gYWNrIHRvIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQuCisgKgorICogVGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlIHByb3ZpZGVzIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGZvciB3aGljaCB0aGVyZSBpcyBhIHBlbmRpbmcgZnJhbWUuIEVpdGhlciBhIHNob3J0CisgKiBhZGRyZXNzIG9yIGFuIGV4dGVuZGVkL2xvbmcgYWRkcmVzcyBjYW4gYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmFibGUgICAgIEVuYWJsZS9kaXNhYmxlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUuCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9FbmFibGVTcmNNYXRjaChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZSk7CisKKy8qKgorICogQWRkIGEgc2hvcnQgYWRkcmVzcyB0byB0aGUgc291cmNlIGFkZHJlc3MgbWF0Y2ggdGFibGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYVNob3J0QWRkcmVzcyAgVGhlIHNob3J0IGFkZHJlc3MgdG8gYmUgYWRkZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHNob3J0IGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgIE5vIGF2YWlsYWJsZSBlbnRyeSBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDE2X3QgYVNob3J0QWRkcmVzcyk7CisKKy8qKgorICogQWRkIGFuIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVGhlIGV4dGVuZGVkIGFkZHJlc3MgdG8gYmUgYWRkZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgIE5vIGF2YWlsYWJsZSBlbnRyeSBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmUgYSBzaG9ydCBhZGRyZXNzIGZyb20gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBzaG9ydCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCBzaG9ydCBhZGRyZXNzIGZyb20gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9fQUREUkVTUyAgVGhlIHNob3J0IGFkZHJlc3MgaXMgbm90IGluIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBSZW1vdmUgYW4gZXh0ZW5kZWQgYWRkcmVzcyBmcm9tIHRoZSBzb3VyY2UgYWRkcmVzcyBtYXRjaCB0YWJsZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIFRoZSBleHRlbmRlZCBhZGRyZXNzIHRvIGJlIHJlbW92ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBmcm9tIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0FERFJFU1MgIFRoZSBleHRlbmRlZCBhZGRyZXNzIGlzIG5vdCBpbiBzb3VyY2UgYWRkcmVzcyBtYXRjaCB0YWJsZS4KKyAqLworb3RFcnJvciBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKTsKKworLyoqCisgKiBDbGVhciBhbGwgc2hvcnQgYWRkcmVzc2VzIGZyb20gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQ2xlYXIgYWxsIHRoZSBleHRlbmRlZC9sb25nIGFkZHJlc3NlcyBmcm9tIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoZSByYWRpbyBkcml2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gbm90aWZ5IE9wZW5UaHJlYWQgb2YgYSByZWNlaXZlZCBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUZyYW1lICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgZnJhbWUgb3IgTlVMTCBpZiB0aGUgcmVjZWl2ZSBvcGVyYXRpb24gZmFpbGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZSwgT1RfRVJST1JfQUJPUlQgd2hlbiByZWNlcHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB3YXMgYWJvcnRlZCBhbmQgYSBmcmFtZSB3YXMgbm90IHJlY2VpdmVkLCBPVF9FUlJPUl9OT19CVUZTIHdoZW4gYSBmcmFtZSBjb3VsZCBub3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBkdWUgdG8gbGFjayBvZiByeCBidWZmZXIgc3BhY2UuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKworLyoqCisgKiBUaGUgcmFkaW8gdHJhbnNpdGlvbnMgZnJvbSBUcmFuc21pdCB0byBSZWNlaXZlLgorICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHRyYW5zbWl0IGJ1ZmZlci4KKyAqCisgKiBUaGUgY2FsbGVyIGZvcm1zIHRoZSBJRUVFIDgwMi4xNS40IGZyYW1lIGluIHRoaXMgYnVmZmVyIHRoZW4gY2FsbHMgb3RQbGF0UmFkaW9UcmFuc21pdCgpIHRvIHJlcXVlc3QgdHJhbnNtaXNzaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBidWZmZXIuCisgKgorICovCitvdFJhZGlvRnJhbWUgKm90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBiZWdpbnMgdGhlIHRyYW5zbWl0IHNlcXVlbmNlIG9uIHRoZSByYWRpby4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgZm9ybSB0aGUgSUVFRSA4MDIuMTUuNCBmcmFtZSBpbiB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoKSBiZWZvcmUKKyAqIHJlcXVlc3RpbmcgdHJhbnNtaXNzaW9uLiAgVGhlIGNoYW5uZWwgYW5kIHRyYW5zbWl0IHBvd2VyIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBvdFJhZGlvRnJhbWUgc3RydWN0dXJlLgorICoKKyAqIFRoZSB0cmFuc21pdCBzZXF1ZW5jZSBjb25zaXN0cyBvZjoKKyAqIDEuIFRyYW5zaXRpb25pbmcgdGhlIHJhZGlvIHRvIFRyYW5zbWl0IGZyb20gUmVjZWl2ZS4KKyAqIDIuIFRyYW5zbWl0cyB0aGUgcHNkdSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBhbmQgYXQgdGhlIGdpdmVuIHRyYW5zbWl0IHBvd2VyLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dIGFGcmFtZSAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0cmFuc2l0aW9uZWQgdG8gVHJhbnNtaXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIHJhZGlvIHdhcyBub3QgaW4gdGhlIFJlY2VpdmUgc3RhdGUuCisgKi8KK290RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgdGhlIHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLAorICogdGhpcyBjYWxsYmFjayBwYXNzIHVwIHRoZSBBQ0sgZnJhbWUsIG5ldyBhZGQgcGxhdGZvcm1zIHNob3VsZCB1c2UgdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdhcyB0cmFuc21pdHRlZC4KKyAqIEBwYXJhbVtpbl0gIGFBY2tGcmFtZSAgQSBwb2ludGVyIHRvIHRoZSBBQ0sgZnJhbWUsIE5VTEwgaWYgbm8gQUNLIHdhcyByZWNlaXZlZC4KKyAqIEBwYXJhbVtpbl0gIGFFcnJvciAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX05PX0FDSyB3aGVuIHRoZSBmcmFtZSB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgYnV0IG5vIEFDSyB3YXMgcmVjZWl2ZWQsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUgdHJhbnNtaXNzaW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIG5vdCB0YWtlIHBsYWNlIGR1ZSB0byBhY3Rpdml0eSBvbiB0aGUgY2hhbm5lbCwgT1RfRVJST1JfQUJPUlQgd2hlbiB0cmFuc21pc3Npb24gd2FzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgZm9yIG90aGVyIHJlYXNvbnMuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb1R4RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdFJhZGlvRnJhbWUgKmFBY2tGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgdGhlIHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLAorICogdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkLCBuZXcgYWRkIHBsYXRmcm9tcyBzaG91bGQgbm90IHVzZSB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCB3YXMgdHJhbnNtaXR0ZWQuCisgKiBAcGFyYW1baW5dICBhRnJhbWVQZW5kaW5nICBUUlVFIGlmIGFuIEFDSyBmcmFtZSB3YXMgcmVjZWl2ZWQgYW5kIHRoZSBGcmFtZSBQZW5kaW5nIGJpdCB3YXMgc2V0LgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX05PX0FDSyB3aGVuIHRoZSBmcmFtZSB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGVkIGJ1dCBubyBBQ0sgd2FzIHJlY2VpdmVkLCBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFIHdoZW4gdGhlIHRyYW5zbWlzc2lvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgbm90IHRha2UgcGxhY2UgZHVlIHRvIGFjdGl2aXR5IG9uIHRoZSBjaGFubmVsLCBPVF9FUlJPUl9BQk9SVCB3aGVuIHRyYW5zbWlzc2lvbiB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgZm9yIG90aGVyIHJlYXNvbnMuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogR2V0IHRoZSBtb3N0IHJlY2VudCBSU1NJIG1lYXN1cmVtZW50LgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybnMgVGhlIFJTU0kgaW4gZEJtIHdoZW4gaXQgaXMgdmFsaWQuICAxMjcgd2hlbiBSU1NJIGlzIGludmFsaWQuCisgKi8KK2ludDhfdCBvdFBsYXRSYWRpb0dldFJzc2kob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBHZXQgdGhlIHJhZGlvIGNhcGFiaWxpdGllcy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm5zIFRoZSByYWRpbyBjYXBhYmlsaXR5IGJpdCB2ZWN0b3IuIFRoZSBzdGFjayBlbmFibGVzIG9yIGRpc2FibGVzIHNvbWUgZnVuY3Rpb25zIGJhc2VkIG9uIHRoaXMgdmFsdWUuCisgKi8KK290UmFkaW9DYXBzIG90UGxhdFJhZGlvR2V0Q2FwcyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgcmFkaW8gVHggcG93ZXIgdXNlZCBmb3IgYXV0by1nZW5lcmF0ZWQgZnJhbWVzLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dIGFQb3dlciAgICAgVGhlIFR4IHBvd2VyIHRvIHVzZSBpbiBkQm0uCisgKgorICovCit2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKTsKKworLyoqCisgKiBHZXQgdGhlIHN0YXR1cyBvZiBwcm9taXNjdW91cyBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHZhbCB0cnVlICAgUHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLgorICogQHJldHZhbCBmYWxzZSAgUHJvbWlzY3VvdXMgbW9kZSBpcyBkaXNhYmxlZC4KKyAqLworYm9vbCBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogRW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUVuYWJsZSAgIEEgdmFsdWUgdG8gZW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZS4KKyAqLwordm9pZCBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIGRpYWdub3N0aWNzIG1vZHVsZSB0aGF0IHRoZSB0cmFuc21pc3Npb24gaGFzIGNvbXBsZXRlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgd2FzIHRyYW5zbWl0dGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBjb3VsZCBub3QgdGFrZSBwbGFjZSBkdWUgdG8gYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwsIE9UX0VSUk9SX0FCT1JUIHdoZW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiB3YXMgYWJvcnRlZCBmb3Igb3RoZXIgcmVhc29ucy4KKyAqCisgKi8KK2V4dGVybiB2b2lkIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVGhlIHJhZGlvIGRyaXZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBub3RpZnkgT3BlblRocmVhZCBkaWFnbm9zdGljcyBtb2R1bGUgb2YgYSByZWNlaXZlZCBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUZyYW1lICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgZnJhbWUgb3IgTlVMTCBpZiB0aGUgcmVjZWl2ZSBvcGVyYXRpb24gZmFpbGVkLgorICogQHBhcmFtW2luXSAgYUVycm9yICAgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZSwgT1RfRVJST1JfQUJPUlQgd2hlbiByZWNlcHRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB3YXMgYWJvcnRlZCBhbmQgYSBmcmFtZSB3YXMgbm90IHJlY2VpdmVkLCBPVF9FUlJPUl9OT19CVUZTIHdoZW4gYSBmcmFtZSBjb3VsZCBub3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBkdWUgdG8gbGFjayBvZiByeCBidWZmZXIgc3BhY2UuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXREaWFnUmFkaW9SZWNlaXZlRG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKy8qKgorICogVGhpcyBtZXRob2QgYmVnaW5zIHRoZSBlbmVyZ3kgc2NhbiBzZXF1ZW5jZSBvbiB0aGUgcmFkaW8uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dIGFTY2FuQ2hhbm5lbCAgIFRoZSBjaGFubmVsIHRvIHBlcmZvcm0gdGhlIGVuZXJneSBzY2FuIG9uLgorICogQHBhcmFtW2luXSBhU2NhbkR1cmF0aW9uICBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoZSBjaGFubmVsIHRvIGJlIHNjYW5uZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHNjYW5uaW5nIHRoZSBjaGFubmVsLgorICogQHJldHZhbCBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQgIFRoZSByYWRpbyBkb2Vzbid0IHN1cHBvcnQgZW5lcmd5IHNjYW5uaW5nLgorICovCitvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVNjYW5DaGFubmVsLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uKTsKKworLyoqCisgKiBUaGUgcmFkaW8gZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgdGhlIGVuZXJneSBzY2FuIGlzIGNvbXBsZXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUVuZXJneVNjYW5NYXhSc3NpICBUaGUgbWF4aW11bSBSU1NJIGVuY291bnRlcmVkIG9uIHRoZSBzY2FubmVkIGNoYW5uZWwuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRSYWRpb0VuZXJneVNjYW5Eb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisKKy8qKgorICogR2V0IHRoZSByYWRpbyByZWNlaXZlIHNlbnNpdGl2aXR5IHZhbHVlLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybnMgVGhlIHJhZGlvIHJlY2VpdmUgc2Vuc2l0aXZpdHkgdmFsdWUgaW4gZEJtLgorICovCitpbnQ4X3Qgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZW5kIG9mIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFJBRElPX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmggYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiZjg5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLgorICovCisKKyNpZm5kZWYgUkFORE9NX0hfCisjZGVmaW5lIFJBTkRPTV9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LXJhbmRvbQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIEdldCBhIDMyLWJpdCByYW5kb20gdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW1wbGVtZW50ZWQgdXNpbmcgYSBwc3VlZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKgorICogQHJldHVybnMgQSAzMi1iaXQgcmFuZG9tIHZhbHVlLgorICoKKyAqLwordWludDMyX3Qgb3RQbGF0UmFuZG9tR2V0KHZvaWQpOworCisvKioKKyAqIEdldCB0cnVlIHJhbmRvbSB2YWx1ZSBzZXF1ZW5jZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChUUk5HKS4KKyAqCisgKiBAcGFyYW1bb3V0XSAgYU91dHB1dCAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSB0cnVlIHJhbmRvbSB2YWx1ZXMgYXJlIHBsYWNlZC4gIE11c3Qgbm90IGJlIE5VTEwuCisgKiBAcGFyYW1baW5dICAgYU91dHB1dExlbmd0aCAgICAgICAgU2l6ZSBvZiBAcCBhQnVmZmVyLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZmlsbGVkIEBwIGFCdWZmZXIgd2l0aCB0cnVlIHJhbmRvbSB2YWx1ZXMuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgIEZhaWxlZCB0byBmaWxsIEBwIGFCdWZmZXIgd2l0aCB0cnVlIHJhbmRvbSB2YWx1ZXMuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUJ1ZmZlciB3YXMgc2V0IHRvIE5VTEwuCisgKgorICovCitvdEVycm9yIG90UGxhdFJhbmRvbUdldFRydWUodWludDhfdCAqYU91dHB1dCwgdWludDE2X3QgYU91dHB1dExlbmd0aCk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBlbmQgb2YgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gUkFORE9NX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTI4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3Igbm9uLXZvbGF0aWxlIHN0b3JhZ2Ugb2Ygc2V0dGluZ3MuCisgKi8KKworI2lmbmRlZiBPVF9QTEFURk9STV9TRVRUSU5HU19ICisjZGVmaW5lIE9UX1BMQVRGT1JNX1NFVFRJTkdTX0ggMQorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC1zZXR0aW5ncworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9mIHNldHRpbmdzLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogUGVyZm9ybXMgYW55IGluaXRpYWxpemF0aW9uIGZvciB0aGUgc2V0dGluZ3Mgc3Vic3lzdGVtLCBpZiBuZWNlc3NhcnkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlCisgKiAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICovCit2b2lkIG90UGxhdFNldHRpbmdzSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvLy8gQmVnaW4gYXRvbWljIGNoYW5nZSBzZXQKKy8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgYSBzZXF1ZW5jZSBvZiBjaGFuZ2VzCisgKiAgdGhhdCBzaG91bGQgYmUgbWFkZSBhdG9taWNhbGx5LgorICoKKyAqICBUaGlzIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIGBvdFBsYXRTZXR0aW5nc0NvbW1pdENoYW5nZSgpYCBhcmUgZGVzaWduZWQKKyAqICB0byBlbnN1cmUgYXRvbWljaXR5IG9mIGNoYW5nZXMgdG8gbXVsdGlwbGUgc2V0dGluZ3MuIE9uY2UKKyAqICB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCwgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgc2V0dGluZ3MKKyAqICBzdG9yZSBhcmUgb25seSBjb21taXR0ZWQgd2hlbiBgb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2UoKWAgaXMKKyAqICBjYWxsZWQuCisgKgorICogIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiBJZiBub3QKKyAqICBpbXBsZW1lbnRlZCwgaXQgc2hvdWxkIHJldHVybiBPVF9FUlJPUl9OT05FLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZQorICogICAgICAgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgVGhlIHNldHRpbmdzIGNvbW1pdCBsb2NrIGhhcyBiZWVuIHNldC4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgVGhlIGNvbW1pdCBsb2NrIGlzIGFscmVhZHkgc2V0LgorICoKKyAqICBAc2Egb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2UoKSwgb3RQbGF0U2V0dGluZ3NBYmFuZG9uQ2hhbmdlKCkKKyAqLworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8vLyBDb21taXQgYWxsIHNldHRpbmdzIGNoYW5nZXMgc2luY2UgcHJldmlvdXMgY2FsbCB0byBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkKKy8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc2VxdWVuY2Ugb2YgY2hhbmdlcy4KKyAqICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4gSWYgbm90CisgKiAgaW1wbGVtZW50ZWQsIGl0IHNob3VsZCByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVELgorICoKKyAqICBAcGFyYW1baW5dICBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisgKiAgICAgICAgICBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICogICAgICAgICAgY29tbWl0dGVkLgorICogIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURQorICogICAgICAgICAgb3RQbGF0U2V0dGluZ3NCZWdpbkNoYW5nZSgpIGhhcyBub3QgYmVlbiBjYWxsZWQuCisgKiAgQHJldHZhbCBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQKKyAqICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCisgKgorICogIEBzYSBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCksIG90UGxhdFNldHRpbmdzQWJhbmRvbkNoYW5nZSgpCisgKi8KK290RXJyb3Igb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLy8vIEFiYW5kb24gYWxsIHNldHRpbmdzIGNoYW5nZXMgc2luY2UgcHJldmlvdXMgY2FsbCB0byBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkKKy8qKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIHNlcXVlbmNlIG9mIGNoYW5nZXMuCisgKiAgaW5zdGVhZCBvZiBvdFBsYXRTZXR0aW5nc0NvbW1pdENoYW5nZSgpLiBJZiBpbXBsZW1lbnRlZCwgaXQKKyAqICBjYXVzZXMgYWxsIGNoYW5nZXMgbWFkZSBzaW5jZSBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgdG8gYmUKKyAqICByb2xsZWQgYmFjayBhbmQgYWJhbmRvbmVkLgorICoKKyAqICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4gSWYgbm90CisgKiAgaW1wbGVtZW50ZWQsIGl0IHNob3VsZCByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVELgorICoKKyAqICBAcGFyYW1baW5dICBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisgKiAgICAgICAgICBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICogICAgICAgICAgcm9sbGVkIGJhY2suCisgKiAgQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFCisgKiAgICAgICAgICBvdFBsYXRTZXR0aW5nc0JlZ2luQ2hhbmdlKCkgaGFzIG5vdCBiZWVuIGNhbGxlZC4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICogICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4KKyAqCisgKiAgQHNhIG90UGxhdFNldHRpbmdzQmVnaW5DaGFuZ2UoKSwgb3RQbGF0U2V0dGluZ3NDb21taXRDaGFuZ2UoKQorICovCitvdEVycm9yIG90UGxhdFNldHRpbmdzQWJhbmRvbkNoYW5nZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvLy8gRmV0Y2hlcyB0aGUgdmFsdWUgb2YgYSBzZXR0aW5nCisvKiogVGhpcyBmdW5jdGlvbiBmZXRjaGVzIHRoZSB2YWx1ZSBvZiB0aGUgc2V0dGluZyBpZGVudGlmaWVkCisgKiAgYnkgYUtleSBhbmQgd3JpdGUgaXQgdG8gdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGFWYWx1ZS4KKyAqICBJdCB0aGVuIHdyaXRlcyB0aGUgbGVuZ3RoIHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkKKyAqICBhVmFsdWVMZW5ndGguIFRoZSBpbml0aWFsIHZhbHVlIG9mIGFWYWx1ZUxlbmd0aCBpcyB0aGUKKyAqICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIGFWYWx1ZS4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZgorICogIGEga2V5IHdpdGhvdXQgZmV0Y2hpbmcgdGhlIHZhbHVlIGJ5IHNldHRpbmcgYVZhbHVlIGFuZAorICogIGFWYWx1ZUxlbmd0aCB0byBOVUxMLiBZb3UgY2FuIGFsc28gY2hlY2sgdGhlIGxlbmd0aCBvZgorICogIHRoZSBzZXR0aW5nIHdpdGhvdXQgZmV0Y2hpbmcgaXQgYnkgc2V0dGluZyBvbmx5IGFWYWx1ZQorICogIHRvIE5VTEwuCisgKgorICogIE5vdGUgdGhhdCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGltcGxlbWVudGF0aW9uIGlzIG5vdAorICogIHJlcXVpcmVkIHRvIG1haW50YWluIHRoZSBvcmRlciBvZiBzZXR0aW5ncyB3aXRoIG11bHRpcGxlCisgKiAgdmFsdWVzLiBUaGUgb3JkZXIgb2Ygc3VjaCB2YWx1ZXMgTUFZIGNoYW5nZSBhZnRlciBBTlkKKyAqICB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIHN0b3JlLgorICoKKyAqICBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiAgQHBhcmFtW2luXSAgICAgYUtleQorICogICAgICAgICAgICAgICAgIFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0ZWQgc2V0dGluZy4KKyAqICBAcGFyYW1baW5dICAgICBhSW5kZXgKKyAqICAgICAgICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNwZWNpZmljIGl0ZW0gdG8gZ2V0LgorICogIEBwYXJhbVtvdXRdICAgIGFWYWx1ZQorICogICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgdmFsdWUgb2YgdGhlIHNldHRpbmcKKyAqICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbi4gTWF5IGJlIHNldCB0byBOVUxMIGlmIGp1c3QKKyAqICAgICAgICAgICAgICAgICB0ZXN0aW5nIGZvciB0aGUgcHJlc2VuY2Ugb3IgbGVuZ3RoIG9mIGEgc2V0dGluZy4KKyAqICBAcGFyYW1baW5vdXRdICBhVmFsdWVMZW5ndGgKKyAqICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUuIFdoZW4KKyAqICAgICAgICAgICAgICAgICBjYWxsZWQsIHRoaXMgcG9pbnRlciBzaG91bGQgcG9pbnQgdG8gYW4KKyAqICAgICAgICAgICAgICAgICBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG1heGltdW0gdmFsdWUgc2l6ZSB0aGF0CisgKiAgICAgICAgICAgICAgICAgY2FuIGJlIHdyaXR0ZW4gdG8gYVZhbHVlLiBBdCByZXR1cm4sIHRoZSBhY3R1YWwKKyAqICAgICAgICAgICAgICAgICBsZW5ndGggb2YgdGhlIHNldHRpbmcgaXMgd3JpdHRlbi4gVGhpcyBtYXkgYmUKKyAqICAgICAgICAgICAgICAgICBzZXQgdG8gTlVMTCBpZiBwZXJmb3JtaW5nIGEgcHJlc2VuY2UgY2hlY2suCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIGZvdW5kIGFuZCBmZXRjaGVkIHN1Y2Nlc3NmdWxseS4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORAorICogICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc2V0dGluZyBzdG9yZS4KKyAqICBAcmV0dmFsIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICogICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4KKyAqLworb3RFcnJvciBvdFBsYXRTZXR0aW5nc0dldChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGludCBhSW5kZXgsIHVpbnQ4X3QgKmFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmFWYWx1ZUxlbmd0aCk7CisKKy8vLyBTZXRzIG9yIHJlcGxhY2VzIHRoZSB2YWx1ZSBvZiBhIHNldHRpbmcKKy8qKiBUaGlzIGZ1bmN0aW9uIHNldHMgb3IgcmVwbGFjZXMgdGhlIHZhbHVlIG9mIGEgc2V0dGluZworICogIGlkZW50aWZpZWQgYnkgYUtleS4gSWYgdGhlcmUgd2FzIG1vcmUgdGhhbiBvbmUKKyAqICB2YWx1ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgd2l0aCBhS2V5LCB0aGVuIHRoZXkgYXJlCisgKiAgYWxsIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhpcyBzaW5nbGUgZW50cnkuCisgKgorICogIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgbWF5IGNhdXNlIHVucmVsYXRlZAorICogIHNldHRpbmdzIHdpdGggbXVsdGlwbGUgdmFsdWVzIHRvIGJlIHJlb3JkZXJlZC4KKyAqCisgKiAgQHBhcmFtW2luXSAgYUluc3RhbmNlCisgKiAgICAgICAgICAgICAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICogIEBwYXJhbVtpbl0gIGFLZXkKKyAqICAgICAgICAgICAgICBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGluZyB0byBjaGFuZ2UuCisgKiAgQHBhcmFtW291dF0gYVZhbHVlCisgKiAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNldHRpbmcKKyAqICAgICAgICAgICAgICBzaG91bGQgYmUgcmVhZCBmcm9tLiBNVVNUIE5PVCBiZSBOVUxMIGlmIGFWYWx1ZUxlbmd0aAorICogICAgICAgICAgICAgIGlzIG5vbi16ZXJvLgorICogIEBwYXJhbVtpbl0gIGFWYWx1ZUxlbmd0aAorICogICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBhVmFsdWUuCisgKiAgICAgICAgICAgICAgTWF5IGJlIHplcm8uCisgKgorICogIEByZXR2YWwgT1RfRVJST1JfTk9ORQorICogICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIGNoYW5nZWQgb3Igc3RhZ2VkLgorICogIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVECisgKiAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLgorICovCitvdEVycm9yIG90UGxhdFNldHRpbmdzU2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpOworCisvLy8gQWRkcyBhIHZhbHVlIHRvIGEgc2V0dGluZworLyoqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgdmFsdWUgdG8gYSBzZXR0aW5nCisgKiAgaWRlbnRpZmllZCBieSBhS2V5LCB3aXRob3V0IHJlcGxhY2luZyBhbnkgZXhpc3RpbmcKKyAqICB2YWx1ZXMuCisgKgorICogIE5vdGUgdGhhdCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcmVxdWlyZWQKKyAqICB0byBtYWludGFpbiB0aGUgb3JkZXIgb2YgdGhlIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCBhCisgKiAgc3BlY2lmaWMga2V5LiBUaGUgYWRkZWQgdmFsdWUgbWF5IGJlIGFkZGVkIHRvIHRoZSBlbmQsCisgKiAgdGhlIGJlZ2lubmluZywgb3IgZXZlbiBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZS4gVGhlIG9yZGVyCisgKiAgb2YgYW55IHByZS1leGlzdGluZyB2YWx1ZXMgbWF5IGFsc28gY2hhbmdlLgorICoKKyAqICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IG1heSBjYXVzZSB1bnJlbGF0ZWQKKyAqICBzZXR0aW5ncyB3aXRoIG11bHRpcGxlIHZhbHVlcyB0byBiZSByZW9yZGVyZWQuCisgKgorICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlCisgKiAgICAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICAgICBhS2V5CisgKiAgICAgICAgICAgICAgICBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2V0dGluZyB0byBjaGFuZ2UuCisgKiBAcGFyYW1bb3V0XSAgICBhVmFsdWUKKyAqICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzZXR0aW5nCisgKiAgICAgICAgICAgICAgICBzaG91bGQgYmUgcmVhZCBmcm9tLiBNVVNUIE5PVCBiZSBOVUxMIGlmIGFWYWx1ZUxlbmd0aAorICogICAgICAgICAgICAgICAgaXMgbm9uLXplcm8uCisgKiBAcGFyYW1baW5vdXRdICBhVmFsdWVMZW5ndGgKKyAqICAgICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBhVmFsdWUuCisgKiAgICAgICAgICAgICAgICBNYXkgYmUgemVyby4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUKKyAqICAgICAgICAgVGhlIGdpdmVuIHNldHRpbmcgd2FzIGFkZGVkIG9yIHN0YWdlZCB0byBiZSBhZGRlZC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVECisgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCisgKi8KK290RXJyb3Igb3RQbGF0U2V0dGluZ3NBZGQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQxNl90IGFWYWx1ZUxlbmd0aCk7CisKKy8vLyBSZW1vdmVzIGEgc2V0dGluZyBmcm9tIHRoZSBzZXR0aW5nIHN0b3JlCisvKiogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSB0aGUKKyAqICBzZXR0aW5nIGlkZW50aWZpZWQgYnkgYUtleSBmcm9tIHRoZSBzZXR0aW5ncyBzdG9yZS4KKyAqCisgKiAgTm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIG5vdCByZXF1aXJlZAorICogIHRvIG1haW50YWluIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIGEKKyAqICBzcGVjaWZpYyBrZXkuCisgKgorICogIEBwYXJhbVtpbl0gYUluc3RhbmNlCisgKiAgICAgICAgICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiAgQHBhcmFtW2luXSBhS2V5CisgKiAgICAgICAgICAgICBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdGVkIHNldHRpbmcuCisgKiAgQHBhcmFtW2luXSBhSW5kZXgKKyAqICAgICAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC4gSWYgc2V0IHRvCisgKiAgICAgICAgICAgICAtMSwgYWxsIHZhbHVlcyBmb3IgdGhpcyBhS2V5IHdpbGwgYmUgcmVtb3ZlZC4KKyAqCisgKiAgQHJldHZhbCBPVF9FUlJPUl9OT05FCisgKiAgICAgICAgICBUaGUgZ2l2ZW4ga2V5IGFuZCBpbmRleCB3YXMgZm91bmQgYW5kIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LgorICogIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5ECisgKiAgICAgICAgICBUaGUgZ2l2ZW4ga2V5IG9yIGluZGV4ICB3YXMgbm90IGZvdW5kIGluIHRoZSBzZXR0aW5nIHN0b3JlLgorICogIEByZXR2YWwgT1RfRVJST1JfTk9UX0lNUExFTUVOVEVECisgKiAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLgorICovCitvdEVycm9yIG90UGxhdFNldHRpbmdzRGVsZXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgaW50IGFJbmRleCk7CisKKy8vLyBSZW1vdmVzIGFsbCBzZXR0aW5ncyBmcm9tIHRoZSBzZXR0aW5nIHN0b3JlCisvKiogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGFsbCBzZXR0aW5ncyBmcm9tIHRoZSBzZXR0aW5ncworICogIHN0b3JlLCByZXNldHRpbmcgaXQgdG8gaXRzIGluaXRpYWwgZmFjdG9yeSBzdGF0ZS4KKyAqCisgKiAgQHBhcmFtW2luXSBhSW5zdGFuY2UKKyAqICAgICAgICAgICAgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqLwordm9pZCBvdFBsYXRTZXR0aW5nc1dpcGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9UX1BMQVRGT1JNX1NFVFRJTkdTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9zcGktc2xhdmUuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS9zcGktc2xhdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjFiNDNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3NwaS1zbGF2ZS5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlIHNwaS1zbGF2ZS5oCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgU1BJIHNsYXZlIGNvbW11bmljYXRpb24uCisgKi8KKworI2lmbmRlZiBTUElfU0xBVkVfSF8KKyNkZWZpbmUgU1BJX1NMQVZFX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtc3BpLXNsYXZlCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBmb3IgU1BJIHNsYXZlIGNvbW11bmljYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBJbmRpY2F0ZXMgdGhhdCBhIFNQSSB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkIHdpdGggdGhlIGdpdmVuIGxlbmd0aC4gVGhlIGRhdGEgd3JpdHRlbiB0byB0aGUgc2xhdmUgaGFzIGJlZW4gd3JpdHRlbgorICogdG8gdGhlIHBvaW50ZXIgaW5kaWNhdGVkIGJ5IHRoZSBgYUlucHV0QnVmYCBhcmd1bWVudCB0byB0aGUgcHJldmlvdXMgY2FsbCB0byBgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24oKWAuCisgKgorICogT25jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgIGlzIGludmFsaWQgYW5kIG11c3QgYmUgY2FsbGVkIGFnYWluIGZvciB0aGUgbmV4dAorICogdHJhbnNhY3Rpb24gdG8gYmUgdmFsaWQuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgdHJhbnNhY3Rpb24sIGV2ZW4gaWYgYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgCisgKiBoYXMgbm90IHlldCBiZWVuIGNhbGxlZC4gSW4gc3VjaCBjYXNlcywgYGFPdXRwdXRCdWZMZW5gIGFuZCBgYUlucHV0QnVmTGVuYCB3aWxsIGJlIHplcm8uCisgKgorICogVGhpcyBjYWxsYmFjayBjYW4gYmUgY2FsbGVkIGZyb20gSVNSIGNvbnRleHQuIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIGluZGljYXRlcyBpZiBhbnkgZnVydGhlcgorICogcHJvY2Vzc2luZyBpcyByZXF1aXJlZC4gSWYgYFRSVUVgIGlzIHJldHVybmVkIHRoZSBwbGF0Zm9ybSBzcGktc2xhdmUgZHJpdmVyIGltcGxlbWVudGF0aW9uIG11c3QgaW52b2tlIHRoZQorICogdHJhbnNhY3Rpb24gcHJvY2VzcyBjYWxsYmFjayAoYGFQcm9jZXNzQ2FsbGJhY2tgIHNldCBpbiBgb3RQbGF0U3BpU2xhdmVFbmFibGUoKWApIHdoaWNoIHVubGlrZSB0aGlzIGNhbGxiYWNrIG11c3QgYmUKKyAqIGNhbGxlZCBmcm9tIHRoZSBzYW1lIE9TIGNvbnRleHQgdGhhdCBhbnkgb3RoZXIgT3BlblRocmVhZCBBUEkvY2FsbGJhY2sgaXMgY2FsbGVkLgorICoKKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgICAgICAgICAgIENvbnRleHQgcG9pbnRlciBwYXNzZWQgaW50byBgb3RQbGF0U3BpU2xhdmVFbmFibGUoKWAuCisgKiBAcGFyYW1baW5dIGFPdXRwdXRCdWYgICAgICAgICBWYWx1ZSBvZiBgYU91dHB1dEJ1ZmAgZnJvbSBsYXN0IGNhbGwgdG8gYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgLgorICogQHBhcmFtW2luXSBhT3V0cHV0QnVmTGVuICAgICAgVmFsdWUgb2YgYGFPdXRwdXRCdWZMZW5gIGZyb20gbGFzdCBjYWxsIHRvIGBvdFBsYXRTcGlTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbigpYC4KKyAqIEBwYXJhbVtpbl0gYUlucHV0QnVmICAgICAgICAgIFZhbHVlIG9mIGFJbnB1dEJ1ZiBmcm9tIGxhc3QgY2FsbCB0byBgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24oKWAuCisgKiBAcGFyYW1baW5dIGFJbnB1dEJ1ZkxlbiAgICAgICBWYWx1ZSBvZiBhSW5wdXRCdWZMZW4gZnJvbSBsYXN0IGNhbGwgdG8gYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgCisgKiBAcGFyYW1baW5dIGFUcmFuc2FjdGlvbkxlbmd0aCBMZW5ndGggb2YgdGhlIGNvbXBsZXRlZCB0cmFuc2FjdGlvbiwgaW4gYnl0ZXMuCisgKgorICogQHJldHVybnMgIFRSVUUgaWYgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMgdGhlIHBsYXRmb3JtIHNob3VsZCBpbnZva2UgdGhlIHRoZSBwcm9jZXNzIGNhbGxiYWNrIGBhUHJvY2Vzc0NhbGxiYWNrYCwKKyAqICAgICAgICAgICBGQUxTRSBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHByb2Nlc3MgYW5kIG5vIG5lZWQgdG8gaW52b2tlIHRoZSBwcm9jZXNzIGNhbGxiYWNrLgorICovCit0eXBlZGVmIGJvb2wgKCpvdFBsYXRTcGlTbGF2ZVRyYW5zYWN0aW9uQ29tcGxldGVDYWxsYmFjaykodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYUlucHV0QnVmLCB1aW50MTZfdCBhSW5wdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVRyYW5zYWN0aW9uTGVuZ3RoKTsKKworCisvKioKKyAqIEludm9rZWQgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBjb21wbGV0ZSBjYWxsYmFjayBpcyBjYWxsZWQgYW5kIHJldHVybnMgYFRSVUVgIHRvIGRvIGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcgcmVxdWlyZWQuCisgKiBVbmxpa2UgYG90UGxhdFNwaVNsYXZlVHJhbnNhY3Rpb25Db21wbGV0ZUNhbGxiYWNrYCB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IE9TIGNvbnRleHQgKGUuZy4sIElTUiksIHRoaXMKKyAqIGNhbGxiYWNrIE1VU1QgYmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgT1MgY29udGV4dCBhcyBhbnkgb3RoZXIgT3BlblRocmVhZCBBUEkvY2FsbGJhY2suCisgKgorICogQHBhcmFtW2luXSBhQ29udGV4dCAgICAgICAgICAgQ29udGV4dCBwb2ludGVyIHBhc3NlZCBpbnRvIGBvdFBsYXRTcGlTbGF2ZUVuYWJsZSgpYC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90UGxhdFNwaVNsYXZlVHJhbnNhY3Rpb25Qcm9jZXNzQ2FsbGJhY2spKHZvaWQgKmFDb250ZXh0KTsKKworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIFNQSSBzbGF2ZSBpbnRlcmZhY2UuCisKKyAqIE5vdGUgdGhhdCBTUEkgc2xhdmUgaXMgbm90IGZ1bGx5IHJlYWR5IHVudGlsIGEgdHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgdXNpbmcgYG90UGxhdFNQSVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKClgLgorICoKKyAqIElmIGBvdFBsYXRTUElTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbigpIGlzIG5vdCBjYWxsZWQgYmVmb3JlIHRoZSBtYXN0ZXIgYmVnaW5zIGEgdHJhbnNhY3Rpb24sIHRoZSByZXN1bHRpbmcgU1BJCisgKiB0cmFuc2FjdGlvbiB3aWxsIHNlbmQgYWxsIGAweEZGYCBieXRlcyBhbmQgZGlzY2FyZCBhbGwgcmVjZWl2ZWQgYnl0ZXMuCisgKgorICogQHBhcmFtW2luXSBhQ29tcGxldGVDYWxsYmFjayAgUG9pbnRlciB0byB0cmFuc2FjdGlvbiBjb21wbGV0ZSBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gYVByb2Nlc3NDYWxsYmFjayAgIFBvaW50ZXIgdG8gcHJvY2VzcyBjYWxsYmFjay4KKyAqIEBwYXJhbVtpbl0gYUNvbnRleHQgICAgICAgICAgIENvbnRleHQgcG9pbnRlciB0byBiZSBwYXNzZWQgdG8gY2FsbGJhY2tzLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgdGhlIFNQSSBTbGF2ZSBpbnRlcmZhY2UuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFNQSSBTbGF2ZSBpbnRlcmZhY2UgaXMgYWxyZWFkeSBlbmFibGVkLgorICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBGYWlsZWQgdG8gZW5hYmxlIHRoZSBTUEkgU2xhdmUgaW50ZXJmYWNlLgorICoKKyAqLworb3RFcnJvciBvdFBsYXRTcGlTbGF2ZUVuYWJsZShvdFBsYXRTcGlTbGF2ZVRyYW5zYWN0aW9uQ29tcGxldGVDYWxsYmFjayBhQ29tcGxldGVDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RQbGF0U3BpU2xhdmVUcmFuc2FjdGlvblByb2Nlc3NDYWxsYmFjayBhUHJvY2Vzc0NhbGxiYWNrLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogU2h1dGRvd24gYW5kIGRpc2FibGUgdGhlIFNQSSBzbGF2ZSBpbnRlcmZhY2UuCisgKi8KK3ZvaWQgb3RQbGF0U3BpU2xhdmVEaXNhYmxlKHZvaWQpOworCisvKioKKyAqIFByZXBhcmUgZGF0YSBmb3IgdGhlIG5leHQgU1BJIHRyYW5zYWN0aW9uLiBEYXRhIHBvaW50ZXJzIE1VU1QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0ZSBjYWxsYmFjaworICogaXMgY2FsbGVkIGJ5IHRoZSBTUEkgc2xhdmUgZHJpdmVyLCBvciB1bnRpbCBhZnRlciB0aGUgbmV4dCBjYWxsIHRvIGBvdFBsYXRTcGlTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbigpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlIHRoZSBTUEkgbWFzdGVyIGluaXRpYXRlcyB0aGUgdHJhbnNhY3Rpb24uIEVhY2ggKnN1Y2Nlc3NmdWwqIGNhbGwKKyAqIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSB0aGUgcHJldmlvdXMgdmFsdWVzIGZyb20gZWFybGllciBjYWxscyB0byBiZSBkaXNjYXJkZWQuCisgKgorICogTm90IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhZnRlciBhIGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBpcyB0aGUgc2FtZSBhcyBpZiB0aGlzIGZ1bmN0aW9uIHdhcyBwcmV2aW91c2x5IGNhbGxlZCB3aXRoCisgKiBib3RoIGJ1ZmZlciBsZW5ndGhzIHNldCB0byB6ZXJvIGFuZCBgYVJlcXVlc3RUcmFuc2FjdGlvbkZsYWdgIHNldCB0byBgZmFsc2VgLgorICoKKyAqIE9uY2UgYGFPdXRwdXRCdWZMZW5gIGJ5dGVzIG9mIGBhT3V0cHV0QnVmYCBoYXMgYmVlbiBjbG9ja2VkIG91dCwgdGhlIE1JU08gcGluIHNoYWxsIGJlIHNldCBoaWdoIHVudGlsIHRoZSBtYXN0ZXIKKyAqIGZpbmlzaGVzIHRoZSBTUEkgdHJhbnNhY3Rpb24uIFRoaXMgaXMgdGhlIGZ1bmN0aW9uYWwgZXF1aXZhbGVudCBvZiBwYWRkaW5nIHRoZSBlbmQgb2YgYGFPdXRwdXRCdWZgIHdpdGggYDB4RkZgIGJ5dGVzCisgKiBvdXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogT25jZSBgYUlucHV0QnVmTGVuYCBieXRlcyBvZiBhSW5wdXRCdWYgaGF2ZSBiZWVuIGNsb2NrZWQgaW4gZnJvbSBNT1NJLCBhbGwgc3Vic2VxdWVudCB2YWx1ZXMgZnJvbSB0aGUgTU9TSSBwaW4gYXJlCisgKiBpZ25vcmVkIHVudGlsIHRoZSBTUEkgbWFzdGVyIGZpbmlzaGVzIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgZXZlbiBpZiBgYUlucHV0QnVmTGVuYCBvciBgYU91dHB1dEJ1ZkxlbmAgKG9yIGJvdGgpIGFyZSBleGhhdXN0ZWQgYmVmb3JlIHRoZSBTUEkgbWFzdGVyIGZpbmlzaGVzIGEKKyAqIHRyYW5zYWN0aW9uLCB0aGUgb25nb2luZyBzaXplIG9mIHRoZSB0cmFuc2FjdGlvbiBtdXN0IHN0aWxsIGJlIGtlcHQgdHJhY2sgb2YgdG8gYmUgcGFzc2VkIHRvIHRoZSB0cmFuc2FjdGlvbgorICogY29tcGxldGUgY2FsbGJhY2suIEZvciBleGFtcGxlLCBpZiBgYUlucHV0QnVmTGVuYCBpcyBlcXVhbCB0byAxMCBhbmQgYGFPdXRwdXRCdWZMZW5gIGVxdWFsIHRvIDIwIGFuZCB0aGUgU1BJIG1hc3RlcgorICogY2xvY2tzIG91dCAzMCBieXRlcywgdGhlIHZhbHVlIDMwIGlzIHBhc3NlZCB0byB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGUgY2FsbGJhY2suCisgKgorICogSWYgYSBgTlVMTGAgcG9pbnRlciBpcyBwYXNzZWQgaW4gYXMgYGFPdXRwdXRCdWZgIG9yIGBhSW5wdXRCdWZgIGl0IG1lYW5zIHRoYXQgdGhhdCBidWZmZXIgcG9pbnRlciBzaG91bGQgbm90IGNoYW5nZQorICogZnJvbSBpdHMgcHJldmlvdXMvY3VycmVudCB2YWx1ZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29ycmVzcG9uZGluZyBsZW5ndGggYXJndW1lbnQgc2hvdWxkIGJlIGlnbm9yZWQuIEZvciBleGFtcGxlLAorICogYG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKE5VTEwsIDAsIGFJbnB1dEJ1ZiwgYUlucHV0TGVuLCBmYWxzZSlgIGNoYW5nZXMgdGhlIGlucHV0IGJ1ZmZlciBwb2ludGVyIGFuZCBpdHMKKyAqIGxlbmd0aCBidXQga2VlcHMgdGhlIG91dHB1dCBidWZmZXIgcG9pbnRlciBzYW1lIGFzIGJlZm9yZS4KKyAqCisgKiBBbnkgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3Mgd2lsbCBjYXVzZSBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBiZSBpZ25vcmVkIGFuZCB0aGUKKyAqIHJldHVybiB2YWx1ZSB0byBiZSBgT1RfRVJST1JfQlVTWWAuCisgKgorICogQHBhcmFtW2luXSBhT3V0cHV0QnVmICAgICAgICAgICAgICBEYXRhIHRvIGJlIHdyaXR0ZW4gdG8gTUlTTyBwaW4KKyAqIEBwYXJhbVtpbl0gYU91dHB1dEJ1ZkxlbiAgICAgICAgICAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciwgaW4gYnl0ZXMKKyAqIEBwYXJhbVtpbl0gYUlucHV0QnVmICAgICAgICAgICAgICAgRGF0YSB0byBiZSByZWFkIGZyb20gTU9TSSBwaW4KKyAqIEBwYXJhbVtpbl0gYUlucHV0QnVmTGVuICAgICAgICAgICAgU2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyLCBpbiBieXRlcworICogQHBhcmFtW2luXSBhUmVxdWVzdFRyYW5zYWN0aW9uRmxhZyBTZXQgdG8gdHJ1ZSBpZiBob3N0IGludGVycnVwdCBzaG91bGQgYmUgc2V0CisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBUcmFuc2FjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkLgorICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgICBBIHRyYW5zYWN0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgb3RQbGF0U3BpU2xhdmVFbmFibGUoKSBoYXNuJ3QgYmVlbiBjYWxsZWQuCisgKgorICovCitvdEVycm9yIG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlucHV0QnVmTGVuLCBib29sIGFSZXF1ZXN0VHJhbnNhY3Rpb25GbGFnKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFNQSV9TTEFWRV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDZlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vdG9vbGNoYWluLmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgcGxhdC10b29sY2hhaW4KKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgZGVmaW5lcyBhIHRvb2xjaGFpbiBhYnN0cmFjdGlvbiBsYXllciB0aHJvdWdoIG1hY3Jvcy4KKyAqCisgKiBVc2FnZToKKyAqCisgKiAgICBAY29kZQorICoKKyAqICAgIHR5cGVkZWYKKyAqICAgIE9UX1RPT0xfUEFDS0VEX0JFR0lOCisgKiAgICBzdHJ1Y3QKKyAqICAgIHsKKyAqICAgICAgICBjaGFyIG1GaWVsZDE7CisgKiAgICAgICAgdW5pb24KKyAqICAgICAgICB7CisgKiAgICAgICAgICAgIGNoYXIgbUZpZWxkMjsKKyAqICAgICAgICAgICAgbG9uZyBtRmllbGQzOworICogICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRklFTEQ7CisgKiAgICB9IE9UX1RPT0xfUEFDS0VEX0VORCBwYWNrZWRfc3RydWN0X3Q7CisgKgorICogICAgQGVuZGNvZGUKKyAqCisgKiBAeworICoKKyAqLworCisjaWZuZGVmIFRPT0xDSEFJTl9IXworI2RlZmluZSBUT09MQ0hBSU5fSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKgorICogQGRlZiBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICoKKyAqIENvbXBpbGVyLXNwZWNpZmljIGluZGljYXRpb24gdGhhdCBhIGNsYXNzIG9yIHN0cnVjdCBtdXN0IGJlIGJ5dGUgcGFja2VkLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgT1RfVE9PTF9QQUNLRURfRklFTEQKKyAqCisgKiBJbmRpY2F0ZSB0byB0aGUgY29tcGlsZXIgYSBuZXN0ZWQgc3RydWN0IG9yIHVuaW9uIHRvIGJlIHBhY2tlZAorICogd2l0aGluIGJ5dGUgcGFja2VkIGNsYXNzIG9yIHN0cnVjdC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIE9UX1RPT0xfUEFDS0VEX0VORAorICoKKyAqIENvbXBpbGVyLXNwZWNpZmljIGluZGljYXRpb24gYXQgdGhlIGVuZCBvZiBhIGJ5dGUgcGFja2VkIGNsYXNzIG9yIHN0cnVjdC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIE9UX1RPT0xfQUxJR04KKyAqCisgKiBDb21waWxlci1zcGVjaWZpYyBhbGlnbm1lbnQgbW9kaWZpZXIuCisgKgorICovCisKKy8vID09PT09PT09PT09IFRPT0xDSEFJTiBTRUxFQ1RJT04gOiBTVEFSVCA9PT09PT09PT09PQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19USV9BUk1fXykKKworLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9Db21tb24tVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCisvLyBodHRwOi8vd3d3LmtlaWwuY29tL3N1cHBvcnQvbWFuL2RvY3MvYXJtY2MvYXJtY2NfY2hyMTM1OTEyNDk3MzQ4MC5odG0KKworI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9CRUdJTgorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9GSUVMRCAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9FTkQgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBPVF9UT09MX1dFQUsgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKworI2RlZmluZSBPVF9UT09MX0FMSUdOKFgpCisKKyNlbGlmIGRlZmluZWQoX19JQ0NBUk1fXykgfHwgZGVmaW5lZChfX0lDQzgwNTFfXykKKworLy8gaHR0cDovL3N1cHAuaWFyLmNvbS9GaWxlc1B1YmxpYy9VUERJTkZPLzAwNDkxNi9hcm0vZG9jL0VXQVJNX0RldmVsb3BtZW50R3VpZGUuRU5VLnBkZgorCisjaW5jbHVkZSAiaW50cmluc2ljcy5oIgorCisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0JFR0lOICAgICAgICAgICAgICAgIF9fcGFja2VkCisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0ZJRUxECisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0VORAorI2RlZmluZSBPVF9UT09MX1dFQUsgICAgICAgICAgICAgICAgICAgICAgICBfX3dlYWsKKworCisjZGVmaW5lIE9UX1RPT0xfQUxJR04oWCkKKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKworI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9CRUdJTiAgICAgICAgICAgICAgICBfX3ByYWdtYShwYWNrKHB1c2gsMSkpCisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0ZJRUxECisjZGVmaW5lIE9UX1RPT0xfUEFDS0VEX0VORCAgICAgICAgICAgICAgICAgIF9fcHJhZ21hKHBhY2socG9wKSkKKyNkZWZpbmUgT1RfVE9PTF9XRUFLCisKKworI2RlZmluZSBPVF9UT09MX0FMSUdOKFgpICAgICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKGFsaWduKDQpKQorCisjZWxpZiBkZWZpbmVkKF9fU0RDQykKKworLy8gU3RydWN0dXJlcyBhcmUgcGFja2VkIGJ5IGRlZmF1bHQgaW4gc2RjYywgYXMgaXQgcHJpbWFyaWx5IHRhcmdldHMgOC1iaXQgTUNVcy4KKworI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9CRUdJTgorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9GSUVMRAorI2RlZmluZSBPVF9UT09MX1BBQ0tFRF9FTkQKKyNkZWZpbmUgT1RfVE9PTF9XRUFLCisKKyNkZWZpbmUgT1RfVE9PTF9BTElHTihYKQorCisjZWxzZQorCisjZXJyb3IgIkVycm9yOiBObyB2YWxpZCBUb29sY2hhaW4gc3BlY2lmaWVkIgorCisvLyBTeW1ib2xzIGZvciBEb3h5Z2VuCisKKyNkZWZpbmUgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyNkZWZpbmUgT1RfVE9PTF9QQUNLRURfRklFTEQKKyNkZWZpbmUgT1RfVE9PTF9QQUNLRURfRU5ECisjZGVmaW5lIE9UX1RPT0xfV0VBSworCisjZGVmaW5lIE9UX1RPT0xfQUxJR04oWCkKKworI2VuZGlmCisKKy8vID09PT09PT09PT09IFRPT0xDSEFJTiBTRUxFQ1RJT04gOiBFTkQgPT09PT09PT09PT0KKworLyoqCisgKiBAZGVmIE9UQVBJCisgKgorICogQ29tcGlsZXItc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHB1YmxpYyBBUEkgZGVjbGFyYXRpb25zLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgT1RDQUxMCisgKgorICogQ29tcGlsZXItc3BlY2lmaWMgbW9kaWZpZXIgdG8gZXhwb3J0IGZ1bmN0aW9ucyBpbiBhIERMTC4KKyAqCisgKi8KKworI2lmZGVmIF9NU0NfVkVSCisKKyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgT1RfQ0RFQ0wKKyNlbHNlCisjZGVmaW5lIE9UX0NERUNMIF9fY2RlY2wKKyNlbmRpZgorCisjZWxzZQorCisjZGVmaW5lIE9UX0NBTEwKKyNkZWZpbmUgT1RfQ0RFQ0wKKworI2VuZGlmCisKKyNpZmRlZiBPVERMTAorI2lmbmRlZiBPVEFQSQorI2RlZmluZSBPVEFQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorI2RlZmluZSBPVENBTEwgV0lOQVBJCisjZWxzZQorI2RlZmluZSBPVEFQSQorI2RlZmluZSBPVENBTEwKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1RfVU5VU0VEX1ZBUklBQkxFCisgKgorICogU3VwcHJlc3MgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgaW4gc3BlY2lmaWMgdG9vbGNoYWlucy4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIE9UX1VOUkVBQ0hBQkxFX0NPREUKKyAqCisgKiBTdXBwcmVzcyBVbnJlYWNoYWJsZSBjb2RlIHdhcm5pbmcgaW4gc3BlY2lmaWMgdG9vbGNoYWlucy4KKyAqCisgKi8KKworI2lmIGRlZmluZWQoX19JQ0NBUk1fXykKKworI2RlZmluZSBPVF9VTlVTRURfVkFSSUFCTEUoVkFSSUFCTEUpICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoJlZBUklBQkxFID09IE5VTEwpIHt9ICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBPVF9VTlJFQUNIQUJMRV9DT0RFKENPREUpICAgICAgIFwKKyAgICBfUHJhZ21hKCJkaWFnX3N1cHByZXNzPVBlMTExIikgICAgICBcCisgICAgQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9QcmFnbWEoImRpYWdfZGVmYXVsdD1QZTExMSIpCisKKyNlbHNlCisKKyNkZWZpbmUgT1RfVU5VU0VEX1ZBUklBQkxFKFZBUklBQkxFKSAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHZvaWQpKFZBUklBQkxFKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyNkZWZpbmUgT1RfVU5SRUFDSEFCTEVfQ09ERShDT0RFKSAgQ09ERQorCisjZW5kaWYKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgLy8gVE9PTENIQUlOX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvcGxhdGZvcm0vdWFydC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTZiZGIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIFVBUlQgY29tbXVuaWNhdGlvbi4KKyAqLworCisjaWZuZGVmIFVBUlRfSF8KKyNkZWZpbmUgVUFSVF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBwbGF0LXVhcnQKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBVQVJUIGNvbW11bmljYXRpb24uCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBFbmFibGUgdGhlIFVBUlQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBVQVJULgorICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgIEZhaWxlZCB0byBlbmFibGVkIHRoZSBVQVJULgorICoKKyAqLworb3RFcnJvciBvdFBsYXRVYXJ0RW5hYmxlKHZvaWQpOworCisvKioKKyAqIERpc2FibGUgdGhlIFVBUlQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBkaXNhYmxlZCB0aGUgVUFSVC4KKyAqIEByZXR2YWwgT1RfRVJST1JfRkFJTEVEICBGYWlsZWQgdG8gZGlzYWJsZSB0aGUgVUFSVC4KKyAqCisgKi8KK290RXJyb3Igb3RQbGF0VWFydERpc2FibGUodm9pZCk7CisKKy8qKgorICogU2VuZCBieXRlcyBvdmVyIHRoZSBVQVJULgorICoKKyAqIEBwYXJhbVtpbl0gYUJ1ZiAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gYUJ1Zkxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zbWl0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgRmFpbGVkIHRvIHN0YXJ0IHRoZSB0cmFuc21pc3Npb24uCisgKgorICovCitvdEVycm9yIG90UGxhdFVhcnRTZW5kKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisvKioKKyAqIFRoZSBVQVJUIGRyaXZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBub3RpZnkgT3BlblRocmVhZCB0aGF0IHRoZSByZXF1ZXN0ZWQgYnl0ZXMgaGF2ZSBiZWVuIHNlbnQuCisgKgorICovCitleHRlcm4gdm9pZCBvdFBsYXRVYXJ0U2VuZERvbmUodm9pZCk7CisKKy8qKgorICogVGhlIFVBUlQgZHJpdmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG5vdGlmeSBPcGVuVGhyZWFkIHRoYXQgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLgorICoKKyAqLworZXh0ZXJuIHZvaWQgb3RQbGF0VWFydFJlY2VpdmVkKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVUFSVF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3BsYXRmb3JtL3VzZWMtYWxhcm0uaCBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS91c2VjLWFsYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3ZGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC9wbGF0Zm9ybS91c2VjLWFsYXJtLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gZm9yIHRoZSBtaWNyb3NlY29uZCBhbGFybSBzZXJ2aWNlLgorICovCisKKyNpZm5kZWYgVVNFQ19BTEFSTV9IXworI2RlZmluZSBVU0VDX0FMQVJNX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIHBsYXQtYWxhcm0KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZGVmaW5lcyB0aGUgY2FsbGJhY2sgZm9yIGluZGljYXRpbmcgd2hlbiB0aGUgYWxhcm0gaGFzIGV4cGlyZWQuCisgKgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90UGxhdFVzZWNBbGFybUhhbmRsZXIpKHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBTZXQgdGhlIGFsYXJtIHRvIGZpcmUgYXQgQHAgYUR0IG1pY3Jvc2Vjb25kcyBhZnRlciBAcCBhVDAuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhVDAgICAgICAgIFRoZSByZWZlcmVuY2UgdGltZS4KKyAqIEBwYXJhbVtpbl0gIGFEdCAgICAgICAgVGhlIHRpbWUgZGVsYXkgaW4gbWljcm9zZWNvbmRzIGZyb20gQHAgYVQwLgorICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgKgorICovCit2b2lkIG90UGxhdFVzZWNBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdFBsYXRVc2VjQWxhcm1IYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogU3RvcCB0aGUgYWxhcm0uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgb3RQbGF0VXNlY0FsYXJtU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEdldCB0aGUgY3VycmVudCB0aW1lLgorICoKKyAqIEBwYXJhbVtvdXRdICBhTm93ICBUaGUgY3VycmVudCB0aW1lIGluIG1pY3Jvc2Vjb25kcy4KKyAqCisgKi8KK3VpbnQzMl90IG90UGxhdFVzZWNBbGFybUdldE5vdyh2b2lkKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFVTRUNfQUxBUk1fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC90YXNrbGV0LmggYi9pbmNsdWRlL29wZW50aHJlYWQvdGFza2xldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTE1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvdGFza2xldC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBBUEkgZm9yIFRhc2tsZXRzLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9UQVNLTEVUX0hfCisjZGVmaW5lIE9QRU5USFJFQURfVEFTS0xFVF9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLXRhc2tsZXRzCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIFRocmVhZCBzdGFjaydzIGV4ZWN1dGlvbi4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFJ1biBhbGwgcXVldWVkIE9wZW5UaHJlYWQgdGFza2xldHMgYXQgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKi8KK3ZvaWQgb3RUYXNrbGV0c1Byb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgT3BlblRocmVhZCBoYXMgdGFza2xldHMgcGVuZGluZy4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGVyZSBhcmUgdGFza2xldHMgcGVuZGluZy4KKyAqIEByZXR2YWwgRkFMU0UgIElmIHRoZXJlIGFyZSBubyB0YXNrbGV0cyBwZW5kaW5nLgorICovCitib29sIG90VGFza2xldHNBcmVQZW5kaW5nKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogT3BlblRocmVhZCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIHRhc2tsZXQgcXVldWUgdHJhbnNpdGlvbnMgZnJvbSBlbXB0eSB0byBub24tZW1wdHkuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICovCitleHRlcm4gdm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEB9CisgKgorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9UQVNLTEVUX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvdGhyZWFkLmggYi9pbmNsdWRlL29wZW50aHJlYWQvdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2OWM3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvb3BlbnRocmVhZC90aHJlYWQuaApAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIE9wZW5UaHJlYWQgVGhyZWFkIEFQSSAoZm9yIGJvdGggRlREIGFuZCBNVEQpLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9USFJFQURfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9USFJFQURfSF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbGluay5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10aHJlYWQtZ2VuZXJhbAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgVGhyZWFkIHByb3RvY29sIG9wZXJhdGlvbi4KKyAqCisgKiBUaGUgaW50ZXJmYWNlIG11c3QgYmUgdXAgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dIGFFbmFibGVkICBUUlVFIGlmIFRocmVhZCBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBUaHJlYWQgcHJvdG9jb2wgb3BlcmF0aW9uLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaGUgbmV0d29yayBpbnRlcmZhY2Ugd2FzIG5vdCBub3QgdXAuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHF1ZXJpZXMgaWYgdGhlIFRocmVhZCBzdGFjayBpcyBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgb24gcmVpbml0aWFsaXphdGlvbi4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIFRSVUUgICBJdCBpcyBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQuCisgKiBAcmV0dmFsIEZBTFNFICBJdCBpcyBub3QgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0LgorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RUaHJlYWRHZXRBdXRvU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFRocmVhZCBzdGFjayB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IG9uIHJlaW5pdGlhbGl6YXRpb24uCisgKiBJdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBjdXJyZW50IFRocmVhZCBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gYVN0YXJ0QXV0b21hdGljYWxseSAgIFRSVUUgdG8gYXV0b21hdGljYWxseSBzdGFydDsgRkFMU0UgdG8gbm90IGF1dG9tYXRpY2FsbHkgc3RhcnQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldEF1dG9TdGFydChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVN0YXJ0QXV0b21hdGljYWxseSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBhIG5vZGUgaXMgdGhlIG9ubHkgcm91dGVyIG9uIHRoZSBuZXR3b3JrLgorICoKKyAqIEBwYXJhbVtpbl0gYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgVFJVRSAgIEl0IGlzIHRoZSBvbmx5IHJvdXRlciBpbiB0aGUgbmV0d29yay4KKyAqIEByZXR2YWwgRkFMU0UgIEl0IGlzIGEgY2hpbGQgb3IgaXMgbm90IGEgc2luZ2xlIHJvdXRlciBpbiB0aGUgbmV0d29yay4KKyAqCisgKi8KK09UQVBJIGJvb2wgT1RDQUxMIG90VGhyZWFkSXNTaW5nbGV0b24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhIFRocmVhZCBEaXNjb3Zlcnkgc2Nhbi4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVNjYW5DaGFubmVscyAgICAgICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuIChlLmcuIE9UX0NIQU5ORUxfMTFfTUFTSykuCisgKiBAcGFyYW1baW5dICBhUGFuSWQgICAgICAgICAgICAgICAgIFRoZSBQQU4gSUQgZmlsdGVyIChzZXQgdG8gQnJvYWRjYXN0IFBBTiB0byBkaXNhYmxlIGZpbHRlcikuCisgKiBAcGFyYW1baW5dICBhSm9pbmVyICAgICAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBKb2luZXIgRmxhZyBpbiB0aGUgRGlzY292ZXJ5IFJlcXVlc3QgVExWLgorICogQHBhcmFtW2luXSAgYUVuYWJsZUV1aTY0RmlsdGVyaW5nICBUUlVFIHRvIGZpbHRlciByZXNwb25zZXMgb24gRVVJLTY0LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gTUxFIERpc2NvdmVyeSBSZXNwb25zZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuIGNvbXBsZXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFDYWxsYmFja0NvbnRleHQgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBBY2NlcHRlZCB0aGUgVGhyZWFkIERpc2NvdmVyeSByZXF1ZXN0LgorICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICBBbHJlYWR5IHBlcmZvcm1pbmcgYW4gVGhyZWFkIERpc2NvdmVyeS4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkRGlzY292ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhUGFuSWQsIGJvb2wgYUpvaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcsIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBhQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBNTEUgVGhyZWFkIERpc2NvdmVyeSBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisgKgorICogQHBhcmFtW2luXSBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICovCitPVEFQSSBib29sIE9UQ0FMTCBvdFRocmVhZElzRGlzY292ZXJJblByb2dyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBUaHJlYWQgQ2hpbGQgVGltZW91dCB1c2VkIHdoZW4gb3BlcmF0aW5nIGluIHRoZSBDaGlsZCByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgVGhyZWFkIENoaWxkIFRpbWVvdXQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0CisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldENoaWxkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIENoaWxkIFRpbWVvdXQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgQ2hpbGQgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIHRpbWVvdXQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0CisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldENoaWxkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFUaW1lb3V0KTsKKworLyoqCisgKiBHZXQgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICoKKyAqIEBzYSBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQKKyAqLworT1RBUEkgY29uc3QgdWludDhfdCAqT1RDQUxMIG90VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBQQU4gSUQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgd2hpbGUgVGhyZWFkIHByb3RvY29scyBhcmUgZGlzYWJsZWQuICBBIHN1Y2Nlc3NmdWwKKyAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gaW52YWxpZGF0ZSB0aGUgQWN0aXZlIGFuZCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXRzIGluCisgKiBub24tdm9sYXRpbGUgbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZFBhbklkICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgRXh0ZW5kZWQgUEFOIElELgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgcHJvdG9jb2xzIGFyZSBlbmFibGVkLgorICoKKyAqIEBzYSBvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZXRFeHRlbmRlZFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dGVuZGVkUGFuSWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIExlYWRlcidzIFJMT0MuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtvdXRdICBhTGVhZGVyUmxvYyAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBMZWFkZXIncyBSTE9DIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgVGhlIExlYWRlcidzIFJMT0Mgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIEBwIGFMZWFkZXJSbG9jLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFMZWFkZXJSbG9jIHdhcyBOVUxMLgorICogQHJldHZhbCBPVF9FUlJPUl9ERVRBQ0hFRCAgICAgIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQgdG8gYSBUaHJlYWQgUGFydGl0aW9uLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRMZWFkZXJSbG9jKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RJcDZBZGRyZXNzICphTGVhZGVyUmxvYyk7CisKKy8qKgorICogR2V0IHRoZSBNTEUgTGluayBNb2RlIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBNTEUgTGluayBNb2RlIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHNhIG90VGhyZWFkU2V0TGlua01vZGUKKyAqLworT1RBUEkgb3RMaW5rTW9kZUNvbmZpZyBPVENBTEwgb3RUaHJlYWRHZXRMaW5rTW9kZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgTUxFIExpbmsgTW9kZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFDb25maWcgICBBIHBvaW50ZXIgdG8gdGhlIExpbmsgTW9kZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgTUxFIExpbmsgTW9kZSBjb25maWd1cmF0aW9uLgorICoKKyAqIEBzYSBvdFRocmVhZEdldExpbmtNb2RlCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0TGlua01vZGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExpbmtNb2RlQ29uZmlnIGFDb25maWcpOworCisvKioKKyAqIEdldCB0aGUgdGhyTWFzdGVyS2V5LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgdGhyTWFzdGVyS2V5LgorICoKKyAqIEBzYSBvdFRocmVhZFNldE1hc3RlcktleQorICovCitPVEFQSSBjb25zdCBvdE1hc3RlcktleSAqT1RDQUxMIG90VGhyZWFkR2V0TWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSB0aHJNYXN0ZXJLZXkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0aHJNYXN0ZXJLZXkuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgdGhyTWFzdGVyS2V5LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICAgSWYgYUtleUxlbmd0aCBpcyBsYXJnZXIgdGhhbiAxNi4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgIFRocmVhZCBwcm90b2NvbHMgYXJlIGVuYWJsZWQuCisgKgorICogQHNhIG90VGhyZWFkR2V0TWFzdGVyS2V5CisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0TWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RNYXN0ZXJLZXkgKmFLZXkpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgRUlELgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgRUlELgorICoKKyAqLworT1RBUEkgY29uc3Qgb3RJcDZBZGRyZXNzICpPVENBTEwgb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAqCisgKi8KK09UQVBJIGNvbnN0IHVpbnQ4X3QgKk9UQ0FMTCBvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFNZXNoTG9jYWxQcmVmaXggIEEgcG9pbnRlciB0byB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIHByb3RvY29scyBhcmUgZW5hYmxlZC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0TWVzaExvY2FsUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaHJlYWQgbGluay1sb2NhbCBJUHY2IGFkZHJlc3MuCisgKgorICogVGhlIFRocmVhZCBsaW5rIGxvY2FsIGFkZHJlc3MgaXMgZGVyaXZlZCB1c2luZyBJRUVFODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBhcyBJbnRlcmZhY2UgSWRlbnRpZmllci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIFRocmVhZCBsaW5rLWxvY2FsIElQdjYgYWRkcmVzcy4KKyAqLworY29uc3Qgb3RJcDZBZGRyZXNzICpvdFRocmVhZEdldExpbmtMb2NhbElwNkFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBHZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgVGhyZWFkIE5ldHdvcmsgTmFtZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXROZXR3b3JrTmFtZQorICovCitPVEFQSSBjb25zdCBjaGFyICpPVENBTEwgb3RUaHJlYWRHZXROZXR3b3JrTmFtZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIE5ldHdvcmsgTmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzdWNjZWVkIHdoZW4gVGhyZWFkIHByb3RvY29scyBhcmUgZGlzYWJsZWQuICBBIHN1Y2Nlc3NmdWwKKyAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gaW52YWxpZGF0ZSB0aGUgQWN0aXZlIGFuZCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXRzIGluCisgKiBub24tdm9sYXRpbGUgbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIEEgcG9pbnRlciB0byB0aGUgVGhyZWFkIE5ldHdvcmsgTmFtZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRocmVhZCBwcm90b2NvbHMgYXJlIGVuYWJsZWQuCisgKgorICogQHNhIG90VGhyZWFkR2V0TmV0d29ya05hbWUKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZXROZXR3b3JrTmFtZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFOZXR3b3JrTmFtZSk7CisKKy8qKgorICogR2V0IHRoZSB0aHJLZXlTZXF1ZW5jZUNvdW50ZXIuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSB0aHJLZXlTZXF1ZW5jZUNvdW50ZXIgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgdGhyS2V5U2VxdWVuY2VDb3VudGVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYUtleVNlcXVlbmNlQ291bnRlciAgVGhlIHRocktleVNlcXVlbmNlQ291bnRlciB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRLZXlTZXF1ZW5jZUNvdW50ZXIKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRLZXlTZXF1ZW5jZUNvdW50ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhS2V5U2VxdWVuY2VDb3VudGVyKTsKKworLyoqCisgKiBHZXQgdGhlIHRocktleVN3aXRjaEd1YXJkVGltZQorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgdGhyS2V5U3dpdGNoR3VhcmRUaW1lIHZhbHVlIChpbiBob3VycykuCisgKgorICogQHNhIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgdGhyS2V5U3dpdGNoR3VhcmRUaW1lCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhS2V5U3dpdGNoR3VhcmRUaW1lICBUaGUgdGhyS2V5U3dpdGNoR3VhcmRUaW1lIHZhbHVlIChpbiBob3VycykuCisgKgorICogQHNhIG90VGhyZWFkR2V0S2V5U3dpdGNoR3VhcmRUaW1lCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYUtleVN3aXRjaEd1YXJkVGltZSk7CisKKy8qKgorICogRGV0YWNoIGZyb20gdGhlIFRocmVhZCBuZXR3b3JrLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBUaHJlYWQgbmV0d29yay4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIGlzIGRpc2FibGVkLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZEJlY29tZURldGFjaGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQXR0ZW1wdCB0byByZWF0dGFjaCBhcyBhIGNoaWxkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWdpbiBhdHRlbXB0IHRvIGJlY29tZSBhIGNoaWxkLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgaXMgZGlzYWJsZWQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkQmVjb21lQ2hpbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIG5leHQgbmVpZ2hib3IgaW5mb3JtYXRpb24uIEl0IGlzIHVzZWQgdG8gZ28gdGhyb3VnaCB0aGUgZW50cmllcyBvZgorICogdGhlIG5laWdoYm9yIHRhYmxlLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IgY29udGV4dC4gVG8gZ2V0IHRoZSBmaXJzdCBuZWlnaGJvciBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgYmUgc2V0IHRvIE9UX05FSUdIQk9SX0lORk9fSVRFUkFUT1JfSU5JVC4KKyAqIEBwYXJhbVtvdXRdICAgIGFJbmZvICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBuZWlnaGJvciBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgbmVpZ2hib3IgZW50cnkgaW4gdGFibGUuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgTm8gc3Vic2VxdWVudCBuZWlnaGJvciBlbnRyeSBleGlzdHMgaW4gdGhlIHRhYmxlLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFJdGVyYXRvciBvciBAcCBhSW5mbyB3YXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0TmV4dE5laWdoYm9ySW5mbyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmVpZ2hib3JJbmZvSXRlcmF0b3IgKmFJdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdE5laWdoYm9ySW5mbyAqYUluZm8pOworCisvKioKKyAqIEdldCB0aGUgZGV2aWNlIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQgIFRoZSBUaHJlYWQgc3RhY2sgaXMgZGlzYWJsZWQuCisgKiBAcmV0dmFsIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEICBUaGUgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgcGFydGljaXBhdGluZyBpbiBhIFRocmVhZCBuZXR3b3JrL3BhcnRpdGlvbi4KKyAqIEByZXR2YWwgT1RfREVWSUNFX1JPTEVfQ0hJTEQgICAgIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IG9wZXJhdGluZyBhcyBhIFRocmVhZCBDaGlsZC4KKyAqIEByZXR2YWwgT1RfREVWSUNFX1JPTEVfUk9VVEVSICAgIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IG9wZXJhdGluZyBhcyBhIFRocmVhZCBSb3V0ZXIuCisgKiBAcmV0dmFsIE9UX0RFVklDRV9ST0xFX0xFQURFUiAgICBUaGUgZGV2aWNlIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgYXMgYSBUaHJlYWQgTGVhZGVyLgorICovCitPVEFQSSBvdERldmljZVJvbGUgT1RDQUxMIG90VGhyZWFkR2V0RGV2aWNlUm9sZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBUaHJlYWQgTGVhZGVyIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgIGFJbnN0YW5jZSAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtvdXRdICBhTGVhZGVyRGF0YSAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBsZWFkZXIgZGF0YSBpcyBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGxlYWRlciBkYXRhLgorICogQHJldHZhbCBPVF9FUlJPUl9ERVRBQ0hFRCAgICAgIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUxlYWRlckRhdGEgaXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0TGVhZGVyRGF0YShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TGVhZGVyRGF0YSAqYUxlYWRlckRhdGEpOworCisvKioKKyAqIEdldCB0aGUgTGVhZGVyJ3MgUm91dGVyIElELgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgTGVhZGVyJ3MgUm91dGVyIElELgorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdFRocmVhZEdldExlYWRlclJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBMZWFkZXIncyBXZWlnaHQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBMZWFkZXIncyBXZWlnaHQuCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBQYXJ0aXRpb24gSUQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBQYXJ0aXRpb24gSUQuCisgKi8KK09UQVBJIHVpbnQzMl90IE9UQ0FMTCBvdFRocmVhZEdldFBhcnRpdGlvbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBSTE9DMTYuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBSTE9DMTYuCisgKi8KK09UQVBJIHVpbnQxNl90IE9UQ0FMTCBvdFRocmVhZEdldFJsb2MxNihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyIGFzIHBhcmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFQYXJlbnRJbmZvICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHBhcmVudCByb3V0ZXIgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRQYXJlbnRJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSb3V0ZXJJbmZvICphUGFyZW50SW5mbyk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgYXZlcmFnZSBSU1NJIGZvciB0aGUgVGhyZWFkIFBhcmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFQYXJlbnRSc3NpICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHBhcmVudCByc3NpIHNob3VsZCBiZSBwbGFjZWQuCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZEdldFBhcmVudEF2ZXJhZ2VSc3NpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90ICphUGFyZW50UnNzaSk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgUlNTSSBvZiB0aGUgbGFzdCBwYWNrZXQgZnJvbSB0aGUgVGhyZWFkIFBhcmVudC4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW291dF0gIGFMYXN0UnNzaSAgICBBIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGxhc3QgcnNzaSBzaG91bGQgYmUgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBSU1NJIGRhdGEuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgICAgICAgVW5hYmxlIHRvIGdldCBSU1NJIGRhdGEuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUxhc3RSc3NpIGlzIE5VTEwuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0UGFyZW50TGFzdFJzc2kob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgKmFMYXN0UnNzaSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIE5ldHdvcmsgRGlhZ25vc3RpYyBHZXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIE5ldHdvcmsgRGlhZ25vc3RpYworICogICAgICAgICAgICAgICAgICAgICAgICAgICBHZXQgcmVzcG9uc2UgcGF5bG9hZC4KKyAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIGluZm8gZm9yIEBwIGFNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKm90UmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjaykob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBwcm92aWRlIHJlY2VpdmVkIHJhdyBOZXR3b3JrIERpYWdub3N0aWMgR2V0IHJlc3BvbnNlIHBheWxvYWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIE5ldHdvcmsgRGlhZ25vc3RpYyBHZXQgcmVzcG9uc2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlY2VpdmVkIG9yIE5VTEwgdG8gZGlzYWJsZSB0aGUgY2FsbGJhY2suCisgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKi8KK3ZvaWQgb3RUaHJlYWRTZXRSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrIGFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpOworCisvKioKKyAqIFNlbmQgYSBOZXR3b3JrIERpYWdub3N0aWMgR2V0IHJlcXVlc3QuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gICBBIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFUbHZUeXBlcyAgICAgIEFuIGFycmF5IG9mIE5ldHdvcmsgRGlhZ25vc3RpYyBUTFYgdHlwZXMuCisgKiBAcGFyYW1baW5dICBhQ291bnQgICAgICAgICBOdW1iZXIgb2YgdHlwZXMgaW4gYVRsdlR5cGVzCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sIHVpbnQ4X3QgYUNvdW50KTsKKworLyoqCisgKiBTZW5kIGEgTmV0d29yayBEaWFnbm9zdGljIFJlc2V0IHJlcXVlc3QuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gICBBIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYWRkcmVzcy4KKyAqIEBwYXJhbVtpbl0gIGFUbHZUeXBlcyAgICAgIEFuIGFycmF5IG9mIE5ldHdvcmsgRGlhZ25vc3RpYyBUTFYgdHlwZXMuIEN1cnJlbnRseSBvbmx5IFR5cGUgOSBpcyBhbGxvd2VkLgorICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgTnVtYmVyIG9mIHR5cGVzIGluIGFUbHZUeXBlcworICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZW5kRGlhZ25vc3RpY1Jlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpOworCisvKioKKyAqIEdldCB0aGUgSVB2NiBjb3VudGVycy4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSVB2NiBjb3VudGVycy4KKyAqCisgKi8KK09UQVBJIGNvbnN0IG90SXBDb3VudGVycyAqT1RDQUxMIG90VGhyZWFkR2V0SXA2Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfVEhSRUFEX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3RocmVhZF9mdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWZmZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3RocmVhZF9mdGQuaApAQCAtMCwwICsxLDQ2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgT3BlblRocmVhZCBUaHJlYWQgQVBJIChGVEQgb25seSkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX1RIUkVBRF9GVERfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9USFJFQURfRlREX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2xpbmsuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYWRkdG9ncm91cCBhcGktdGhyZWFkLXJvdXRlcgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbiBjdXJyZW50bHkgYWxsb3dlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoaWxkcmVuIGN1cnJlbnRseSBhbGxvd2VkLgorICoKKyAqIEBzYSBvdFRocmVhZFNldE1heEFsbG93ZWRDaGlsZHJlbgorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGRyZW4gY3VycmVudGx5IGFsbG93ZWQuCisgKgorICogVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IHdoZW4gVGhyZWFkIHByb3RvY29sIG9wZXJhdGlvbgorICogaGFzIGJlZW4gc3RvcHBlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYU1heENoaWxkcmVuICBUaGUgbWF4aW11bSBhbGxvd2VkIGNoaWxkcmVuLgorICoKKyAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIG1heC4KKyAqIEByZXR2YWwgIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgIElmIEBwIGFNYXhDaGlsZHJlbiBpcyBub3QgaW4gdGhlIHJhbmdlIFsxLCBPUEVOVEhSRUFEX0NPTkZJR19NQVhfQ0hJTERSRU5dLgorICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgSWYgVGhyZWFkIGlzbid0IHN0b3BwZWQuCisgKgorICogQHNhIG90VGhyZWFkR2V0TWF4QWxsb3dlZENoaWxkcmVuLCBvdFRocmVhZFN0b3AKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFNYXhDaGlsZHJlbik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFJvdXRlciBSb2xlIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLgorICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFJvdXRlciBSb2xlIGlzIG5vdCBlbmFibGVkLgorICoKKyAqLworT1RBUEkgYm9vbCBPVENBTEwgb3RUaHJlYWRJc1JvdXRlclJvbGVFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIGlmIHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCk7CisKKy8qKgorICogU2V0IHRoZSBwcmVmZXJyZWQgUm91dGVyIElkLgorICoKKyAqIFVwb24gYmVjb21pbmcgYSByb3V0ZXIvbGVhZGVyIHRoZSBub2RlIGF0dGVtcHRzIHRvIHVzZSB0aGlzIFJvdXRlciBJZC4gSWYgdGhlCisgKiBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IgaWYgaXQgY2FuIG5vdCBiZSB1c2VkLCBhIHJhbmRvbWx5IGdlbmVyYXRlZAorICogcm91dGVyIGlkIGlzIHBpY2tlZC4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IG9ubHkgd2hlbiB0aGUgZGV2aWNlIHJvbGUgaXMKKyAqIGVpdGhlciBkZXRhY2hlZCBvciBkaXNhYmxlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUm91dGVySWQgICAgVGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgQ291bGQgbm90IHNldCAocm9sZSBpcyBub3QgZGV0YWNoZWQgb3IgZGlzYWJsZWQpCisgKgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldFByZWZlcnJlZFJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhUm91dGVySWQpOworCisvKioKKyAqIEdldCB0aGUgVGhyZWFkIExlYWRlciBXZWlnaHQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBUaHJlYWQgTGVhZGVyIFdlaWdodCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRMZWFkZXJXZWlnaHQKKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIExlYWRlciBXZWlnaHQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVdlaWdodCAgIFRoZSBUaHJlYWQgTGVhZGVyIFdlaWdodCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRMb2NhbExlYWRlcldlaWdodChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVdlaWdodCk7CisKKy8qKgorICogR2V0IHRoZSBUaHJlYWQgTGVhZGVyIFBhcnRpdGlvbiBJZCB1c2VkIHdoZW4gb3BlcmF0aW5nIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIFRocmVhZCBMZWFkZXIgUGFydGl0aW9uIElkIHZhbHVlLgorICoKKyAqLworT1RBUEkgdWludDMyX3QgT1RDQUxMIG90VGhyZWFkR2V0TG9jYWxMZWFkZXJQYXJ0aXRpb25JZChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgVGhyZWFkIExlYWRlciBQYXJ0aXRpb24gSWQgdXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQYXJ0aXRpb25JZCAgVGhlIFRocmVhZCBMZWFkZXIgUGFydGl0aW9uIElkIHZhbHVlLgorICoKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRMb2NhbExlYWRlclBhcnRpdGlvbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVBhcnRpdGlvbklkKTsKKworLyoqCisgKiBHZXQgdGhlIEpvaW5lciBVRFAgUG9ydC4KKyAqCisgKiBAcGFyYW1baW5dIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgSm9pbmVyIFVEUCBQb3J0IG51bWJlci4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRKb2luZXJVZHBQb3J0CisgKi8KK09UQVBJIHVpbnQxNl90IE9UQ0FMTCBvdFRocmVhZEdldEpvaW5lclVkcFBvcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIEpvaW5lciBVRFAgUG9ydAorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFKb2luZXJVZHBQb3J0ICBUaGUgSm9pbmVyIFVEUCBQb3J0IG51bWJlci4KKyAqCisgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBKb2luZXIgVURQIFBvcnQuCisgKgorICogQHNhIG90VGhyZWFkR2V0Sm9pbmVyVWRwUG9ydAorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldEpvaW5lclVkcFBvcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhSm9pbmVyVWRwUG9ydCk7CisKKy8qKgorICogU2V0IFN0ZWVyaW5nIGRhdGEgb3V0IG9mIGJhbmQKKyAqCisgKiBDb25maWd1cmF0aW9uIG9wdGlvbiBgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQmAgc2hvdWxkIGJlIHNldCB0byBlbmFibGUgc2V0dGluZyBvZiBzdGVlcmluZworICogZGF0YSBvdXQgb2YgYmFuZC4gT3RoZXJ3aXNlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYW5kIGl0IHJldHVybnMgYE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkVgCisgKiBlcnJvci4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgICAgQWRkcmVzcyB1c2VkIHRvIHVwZGF0ZSB0aGUgc3RlZXJpbmcgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgemVyb3MgdG8gY2xlYXIgdGhlIHN0ZWVyaW5nIGRhdGEgKG5vIHN0ZWVyaW5nIGRhdGEpLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCAweEZGcyB0byBzZXQgc3RlZXJpbmcgZGF0YS9ibG9vbSBmaWx0ZXIgdG8gYWNjZXB0L2FsbG93IGFsbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpZmljIEVVSTY0IHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gY3VycmVudCBzdGVlcmluZyBkYXRhL2Jsb29tIGZpbHRlci4KKyAqCisgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0L3VwZGF0ZWQgdGhlIHN0ZWVyaW5nIGRhdGEuCisgKiBAcmV0dmFsICBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFICBGZWF0dXJlIGlzIGRpc2FibGVkLCBub3QgY2FwYWJsZSBvZiBzZXR0aW5nIHN0ZWVyaW5nIGRhdGEgb3V0IG9mIGJhbmQuCisgKgorICovCitvdEVycm9yIG90VGhyZWFkU2V0U3RlZXJpbmdEYXRhKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyk7CisKKy8qKgorICogR2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHBhcmFtZXRlciB1c2VkIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIENPTlRFWFRfSURfUkVVU0VfREVMQVkgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Q29udGV4dElkUmV1c2VEZWxheQorICovCitPVEFQSSB1aW50MzJfdCBPVENBTEwgb3RUaHJlYWRHZXRDb250ZXh0SWRSZXVzZURlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHBhcmFtZXRlciB1c2VkIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhRGVsYXkgICAgVGhlIENPTlRFWFRfSURfUkVVU0VfREVMQVkgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkR2V0Q29udGV4dElkUmV1c2VEZWxheQorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldENvbnRleHRJZFJldXNlRGVsYXkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhRGVsYXkpOworCisvKioKKyAqIEdldCB0aGUgTkVUV09SS19JRF9USU1FT1VUIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSb3V0ZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0CisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgTkVUV09SS19JRF9USU1FT1VUIHBhcmFtZXRlciB1c2VkIGluIHRoZSBMZWFkZXIgcm9sZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXROZXR3b3JrSWRUaW1lb3V0CisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90VGhyZWFkU2V0TmV0d29ya0lkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVRpbWVvdXQpOworCisvKioKKyAqIEdldCB0aGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSRUVEIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZAorICovCitPVEFQSSB1aW50OF90IE9UQ0FMTCBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGhyZXNob2xkICBUaGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorICoKKyAqIEBzYSBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQKKyAqLworT1RBUEkgdm9pZCBPVENBTEwgb3RUaHJlYWRTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhVGhyZXNob2xkKTsKKworLyoqCisgKiBSZWxlYXNlIGEgUm91dGVyIElEIHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlIExlYWRlciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQgdG8gcmVsZWFzZS4gVmFsaWQgcmFuZ2UgaXMgWzAsIDYyXS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZWxlYXNlZCB0aGUgUm91dGVyIElEIHNwZWNpZmllZCBieSBhUm91dGVySWQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkUmVsZWFzZVJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhUm91dGVySWQpOworCisvKioKKyAqIEF0dGVtcHQgdG8gYmVjb21lIGEgcm91dGVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWdpbiBhdHRlbXB0IHRvIGJlY29tZSBhIHJvdXRlci4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIGlzIGRpc2FibGVkLgorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZEJlY29tZVJvdXRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIEJlY29tZSBhIGxlYWRlciBhbmQgc3RhcnQgYSBuZXcgcGFydGl0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWNhbWUgYSBsZWFkZXIgYW5kIHN0YXJ0ZWQgYSBuZXcgcGFydGl0aW9uLgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgaXMgZGlzYWJsZWQuCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkQmVjb21lTGVhZGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogR2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgUm91dGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkCisgKi8KK09UQVBJIHVpbnQ4X3QgT1RDQUxMIG90VGhyZWFkR2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgTGVhZGVyIHJvbGUuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhVGhyZXNob2xkICBUaGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgKgorICogQHNhIG90VGhyZWFkR2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkCisgKi8KK09UQVBJIHZvaWQgT1RDQUxMIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhVGhyZXNob2xkKTsKKworLyoqCisgKiBHZXQgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSRUVEL1JvdXRlciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIFRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiB2YWx1ZS4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIKKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHBhcmFtZXRlciB1c2VkIGluIHRoZSBSRUVEL1JvdXRlciByb2xlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgIEEgcG9pbnRlciB0byBhbiBPcGVuVGhyZWFkIGluc3RhbmNlLgorICogQHBhcmFtW2luXSAgYVJvdXRlckppdHRlciAgVGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHZhbHVlLgorICoKKyAqIEBzYSBvdFRocmVhZEdldFJvdXRlclNlbGVjdGlvbkppdHRlcgorICovCitPVEFQSSB2b2lkIE9UQ0FMTCBvdFRocmVhZFNldFJvdXRlclNlbGVjdGlvbkppdHRlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVJvdXRlckppdHRlcik7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldGFpbnMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYW4gYXR0YWNoZWQgQ2hpbGQgYnkgaXRzIENoaWxkIElEIG9yIFJMT0MxNi4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYUNoaWxkSWQgICAgVGhlIENoaWxkIElEIG9yIFJMT0MxNiBmb3IgdGhlIGF0dGFjaGVkIGNoaWxkLgorICogQHBhcmFtW291dF0gIGFDaGlsZEluZm8gIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgY2hpbGQgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBAcCBhQ2hpbGRJbmZvIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZCB3aXRoIHRoZSBpbmZvIGZvciB0aGUgZ2l2ZW4gSUQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgTm8gdmFsaWQgY2hpbGQgd2l0aCB0aGlzIENoaWxkIElELgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIElmIEBwIGFDaGlsZEluZm8gaXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFDaGlsZElkLCBvdENoaWxkSW5mbyAqYUNoaWxkSW5mbyk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldGFpbnMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYW4gYXR0YWNoZWQgQ2hpbGQgYnkgdGhlIGludGVybmFsIHRhYmxlIGluZGV4LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYUNoaWxkSW5kZXggIFRoZSB0YWJsZSBpbmRleC4KKyAqIEBwYXJhbVtvdXRdICBhQ2hpbGRJbmZvICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjaGlsZCBpbmZvcm1hdGlvbiBpcyBwbGFjZWQuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgIEBwIGFDaGlsZEluZm8gd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIHdpdGggdGhlIGluZm8gZm9yIHRoZSBnaXZlbiBpbmRleC4KKyAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICAgICBObyB2YWxpZCBjaGlsZCBhdCB0aGlzIGluZGV4LgorICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICAgIEVpdGhlciBAcCBhQ2hpbGRJbmZvIGlzIE5VTEwsIG9yIEBwIGFDaGlsZEluZGV4IGlzIG91dCBvZiByYW5nZSAoaGlnaGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBtYXggdGFibGUgaW5kZXgpLgorICoKKyAqIEBzYSBvdEdldE1heEFsbG93ZWRDaGlsZHJlbgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQ2hpbGRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENoaWxkSW5mbyAqYUNoaWxkSW5mbyk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IFJvdXRlciBJRCBTZXF1ZW5jZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIFJvdXRlciBJRCBTZXF1ZW5jZS4KKyAqLworT1RBUEkgdWludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRSb3V0ZXJJZFNlcXVlbmNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogVGhlIGZ1bmN0aW9uIHJldGFpbnMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBUaHJlYWQgUm91dGVyLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYVJvdXRlcklkICAgIFRoZSByb3V0ZXIgSUQgb3IgUkxPQzE2IGZvciBhIGdpdmVuIHJvdXRlci4KKyAqIEBwYXJhbVtvdXRdICBhUm91dGVySW5mbyAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSByb3V0ZXIgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqLworT1RBUEkgb3RFcnJvciBPVENBTEwgb3RUaHJlYWRHZXRSb3V0ZXJJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVJvdXRlcklkLCBvdFJvdXRlckluZm8gKmFSb3V0ZXJJbmZvKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gRUlEIGNhY2hlIGVudHJ5LgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICAgYUluZGV4ICAgIEFuIGluZGV4IGludG8gdGhlIEVJRCBjYWNoZSB0YWJsZS4KKyAqIEBwYXJhbVtvdXRdICBhRW50cnkgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBFSUQgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBFSUQgY2FjaGUgZW50cnkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYUluZGV4IHdhcyBvdXQgb2YgYm91bmRzIG9yIEBwIGFFbnRyeSB3YXMgTlVMTC4KKyAqCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkR2V0RWlkQ2FjaGVFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUluZGV4LCBvdEVpZENhY2hlRW50cnkgKmFFbnRyeSk7CisKKy8qKgorICogR2V0IHRoZSB0aHJQU0tjLgorICoKKyAqIEBwYXJhbVtpbl0gICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgdGhyUFNLYy4KKyAqCisgKiBAc2Egb3RUaHJlYWRTZXRQU0tjCisgKi8KK09UQVBJIGNvbnN0IHVpbnQ4X3QgKk9UQ0FMTCBvdFRocmVhZEdldFBTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworLyoqCisgKiBTZXQgdGhlIHRoclBTS2MuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc3VjY2VlZCB3aGVuIFRocmVhZCBwcm90b2NvbHMgYXJlIGRpc2FibGVkLiAgQSBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGludmFsaWRhdGUgdGhlIEFjdGl2ZSBhbmQgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0cyBpbgorICogbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFQU0tjICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0aHJQU0tjLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgdGhyUFNLYy4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgVGhyZWFkIHByb3RvY29scyBhcmUgZW5hYmxlZC4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRQU0tjCisgKi8KK09UQVBJIG90RXJyb3IgT1RDQUxMIG90VGhyZWFkU2V0UFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFQU0tjKTsKKworLyoqCisgKiBHZXQgdGhlIGFzc2lnbmVkIHBhcmVudCBwcmlvcml0eS4KKyAqCisgKiBAcGFyYW1baW5dICAgYUluc3RhbmNlICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIGFzc2lnbmVkIHBhcmVudCBwcmlvcml0eSB2YWx1ZSwgLTIgbWVhbnMgbm90IGFzc2lnbmVkLgorICoKKyAqIEBzYSBvdFRocmVhZFNldFBhcmVudFByaW9yaXR5CisgKi8KK09UQVBJIGludDhfdCBPVENBTEwgb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvKioKKyAqIFNldCB0aGUgcGFyZW50IHByaW9yaXR5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhUGFyZW50UHJpb3JpdHkgIFRoZSBwYXJlbnQgcHJpb3JpdHkgdmFsdWUuCisgKgorICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBwYXJlbnQgcHJpb3JpdHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgIElmIHRoZSBwYXJlbnQgcHJpb3JpdHkgdmFsdWUgaXMgbm90IGFtb25nIDEsIDAsIC0xIGFuZCAtMi4KKyAqCisgKiBAc2Egb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eQorICovCitPVEFQSSBvdEVycm9yIE9UQ0FMTCBvdFRocmVhZFNldFBhcmVudFByaW9yaXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50OF90IGFQYXJlbnRQcmlvcml0eSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX1RIUkVBRF9GVERfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnRocmVhZC90bWZfcHJveHkuaCBiL2luY2x1ZGUvb3BlbnRocmVhZC90bWZfcHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZhMjlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3RtZl9wcm94eS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBPcGVuVGhyZWFkIEFQSSBmb3IgVE1GIFByb3h5IGZlYXR1cmUuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX1RNRl9QUk9YWV9IXworI2RlZmluZSBPUEVOVEhSRUFEX1RNRl9QUk9YWV9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGFwaS10bWYtcHJveHkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBUTUYgcHJveHkgZmVhdHVyZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBhIFRNRiBwYWNrZXQgZm9yIGhvc3QgaXMgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcG9pbnRlciB0byB0aGUgQ29BUCBNZXNzYWdlLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqb3RUbWZQcm94eVN0cmVhbUhhbmRsZXIpKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHVpbnQxNl90IGFMb2NhdG9yLCB1aW50MTZfdCBhUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKy8qKgorICogU3RhcnQgdGhlIFRNRiBwcm94eS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCB0byBkZWxpdmVyIFRNRiBwYWNrZXQgdG8gaG9zdC4KKyAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIFRNRiBwcm94eS4KKyAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgQm9yZGVyIGFnZW50IHByb3h5IGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLgorICoKKyAqLworb3RFcnJvciBvdFRtZlByb3h5U3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFRtZlByb3h5U3RyZWFtSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisvKioKKyAqIFN0b3AgdGhlIFRNRiBwcm94eS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBUTUYgcHJveHkuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgIEJvcmRlciBhZ2VudCBwcm94eSBpcyBhbHJlYWR5IHN0b3BwZWQuCisgKgorICovCitvdEVycm9yIG90VG1mUHJveHlTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogU2VuZCBwYWNrZXQgdGhyb3VnaCBUTUYgcHJveHkuCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvQVAgTWVzc2FnZS4KKyAqIEBwYXJhbVtpbl0gIGFMb2NhdG9yICAgICAgICAgICAgIFJsb2Mgb2YgZGVzdGluYXRpb24uCisgKiBAcGFyYW1baW5dICBhUG9ydCAgICAgICAgICAgICAgICBQb3J0IG9mIGRlc3RpbmF0aW9uLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgbWVzc2FnZS4KKyAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgICBCb3JkZXIgYWdlbnQgcHJveHkgaXMgbm90IHN0YXJ0ZWQuCisgKgorICogQHdhcm5pbmcgTm8gbWF0dGVyIHRoZSBjYWxsIHN1Y2Nlc3Mgb3IgZmFpbCwgdGhlIG1lc3NhZ2UgaXMgZnJlZWQuCisgKgorICovCitvdEVycm9yIG90VG1mUHJveHlTZW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KTsKKworLyoqCisgKiBHZXQgdGhlIFRNRiBwcm94eSBzdGF0dXMgKGVuYWJsZWQvZGlzYWJsZWQpCisgKgorICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgVGhlIFRNRiBwcm94eSBzdGF0dXMgKHRydWUgaWYgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlKS4KKyAqLworYm9vbCBvdFRtZlByb3h5SXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX1RNRl9QUk9YWV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3R5cGVzLmggYi9pbmNsdWRlL29wZW50aHJlYWQvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQ5NzVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVudGhyZWFkL3R5cGVzLmgKQEAgLTAsMCArMSwxMDQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdHlwZXMgYW5kIHN0cnVjdHVyZXMgdXNlZCBpbiB0aGUgT3BlblRocmVhZCBsaWJyYXJ5IEFQSS4KKyAqLworCisjaWZuZGVmIE9QRU5USFJFQURfVFlQRVNfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRF9UWVBFU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2lmZGVmIE9URExMCisjaW5jbHVkZSA8Z3VpZGRlZi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyMTQpICAvLyBub25zdGFuZGFyZCBleHRlbnNpb24gdXNlZDogYml0IGZpZWxkIHR5cGVzIG90aGVyIHRoYW4gaW50CisjaWZkZWYgX0tFUk5FTF9NT0RFCisjaW5jbHVkZSA8bnRkZWYuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisjZWxzZQorI2lmbmRlZiBDT05UQUlOSU5HX1JFQ09SRAorLyojcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdpbnZhbGlkLW9mZnNldG9mIgorI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkgXAorICAgICgodHlwZSAqKSgodWludDhfdCopKGFkZHJlc3MpIC0gb2Zmc2V0b2YodHlwZSwgZmllbGQpKSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wKi8KKyNkZWZpbmUgQkFTRSAweDEKKyNkZWZpbmUgbXlvZmZzZXRvZihzLG0pICgoKHNpemVfdCkmKCgocyopQkFTRSktPm0pKS1CQVNFKQorI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkgXAorICAgICgodHlwZSAqKSgodWludDhfdCopKGFkZHJlc3MpIC0gbXlvZmZzZXRvZih0eXBlLCBmaWVsZCkpKQorI2VuZGlmIC8qIENPTlRBSU5JTkdfUkVDT1JEICovCisjZW5kaWYgLyogX1dJTjMyICovCisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBvdEluc3RhbmNlIG90SW5zdGFuY2U7CisKKyNpZmRlZiBPVERMTAorCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBoYW5kbGUgdG8gdGhlIE9wZW5UaHJlYWQgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBvdEFwaUluc3RhbmNlIG90QXBpSW5zdGFuY2U7CisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgYSBsaXN0IG9mIGRldmljZSBHVUlEcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3REZXZpY2VMaXN0Cit7CisgICAgdWludDE2X3QgYURldmljZXNMZW5ndGg7CisgICAgR1VJRCAgICAgYURldmljZXNbMV07Cit9IG90RGV2aWNlTGlzdDsKKworI2VuZGlmCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiByZXByZXNlbnRzIGVycm9yIGNvZGVzIHVzZWQgdGhyb3VnaG91dCBPcGVuVGhyZWFkLgorICovCit0eXBlZGVmIGVudW0gb3RFcnJvcgoreworICAgIC8qKgorICAgICAqIE5vIGVycm9yLgorICAgICAqLworICAgIE9UX0VSUk9SX05PTkUgPSAwLAorCisgICAgLyoqCisgICAgICogT3BlcmF0aW9uYWwgZmFpbGVkLgorICAgICAqLworICAgIE9UX0VSUk9SX0ZBSUxFRCA9IDEsCisKKyAgICAvKioKKyAgICAgKiBNZXNzYWdlIHdhcyBkcm9wcGVkLgorICAgICAqLworICAgIE9UX0VSUk9SX0RST1AgPSAyLAorCisgICAgLyoqCisgICAgICogSW5zdWZmaWNpZW50IGJ1ZmZlcnMuCisgICAgICovCisgICAgT1RfRVJST1JfTk9fQlVGUyA9IDMsCisKKyAgICAvKioKKyAgICAgKiBObyByb3V0ZSBhdmFpbGFibGUuCisgICAgICovCisgICAgT1RfRVJST1JfTk9fUk9VVEUgPSA0LAorCisgICAgLyoqCisgICAgICogU2VydmljZSBpcyBidXN5IGFuZCBjb3VsZCBub3Qgc2VydmljZSB0aGUgb3BlcmF0aW9uLgorICAgICAqLworICAgIE9UX0VSUk9SX0JVU1kgPSA1LAorCisgICAgLyoqCisgICAgICogRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2Ugb3IgYXJndW1lbnRzLgorICAgICAqLworICAgIE9UX0VSUk9SX1BBUlNFID0gNiwKKworICAgIC8qKgorICAgICAqIElucHV0IGFyZ3VtZW50cyBhcmUgaW52YWxpZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9JTlZBTElEX0FSR1MgPSA3LAorCisgICAgLyoqCisgICAgICogU2VjdXJpdHkgY2hlY2tzIGZhaWxlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9TRUNVUklUWSA9IDgsCisKKyAgICAvKioKKyAgICAgKiBBZGRyZXNzIHJlc29sdXRpb24gcmVxdWlyZXMgYW4gYWRkcmVzcyBxdWVyeSBvcGVyYXRpb24uCisgICAgICovCisgICAgT1RfRVJST1JfQUREUkVTU19RVUVSWSA9IDksCisKKyAgICAvKioKKyAgICAgKiBBZGRyZXNzIGlzIG5vdCBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqLworICAgIE9UX0VSUk9SX05PX0FERFJFU1MgPSAxMCwKKworICAgIC8qKgorICAgICAqIE9wZXJhdGlvbiB3YXMgYWJvcnRlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9BQk9SVCA9IDExLAorCisgICAgLyoqCisgICAgICogRnVuY3Rpb24gb3IgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQgPSAxMiwKKworICAgIC8qKgorICAgICAqIENhbm5vdCBjb21wbGV0ZSBkdWUgdG8gaW52YWxpZCBzdGF0ZS4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9JTlZBTElEX1NUQVRFID0gMTMsCisKKyAgICAvKioKKyAgICAgKiBObyBhY2tub3dsZWRnbWVudCB3YXMgcmVjZWl2ZWQgYWZ0ZXIgbWFjTWF4RnJhbWVSZXRyaWVzIChJRUVFIDgwMi4xNS40LTIwMDYpLgorICAgICAqLworICAgIE9UX0VSUk9SX05PX0FDSyA9IDE0LAorCisgICAgLyoqCisgICAgICogQSB0cmFuc21pc3Npb24gY291bGQgbm90IHRha2UgcGxhY2UgZHVlIHRvIGFjdGl2aXR5IG9uIHRoZSBjaGFubmVsLCBpLmUuLCB0aGUgQ1NNQS1DQSBtZWNoYW5pc20gaGFzIGZhaWxlZAorICAgICAqIChJRUVFIDgwMi4xNS40LTIwMDYpLgorICAgICAqLworICAgIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgPSAxNSwKKworICAgIC8qKgorICAgICAqIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQgdG8gYSBUaHJlYWQgUGFydGl0aW9uLgorICAgICAqLworICAgIE9UX0VSUk9SX0RFVEFDSEVEID0gMTYsCisKKyAgICAvKioKKyAgICAgKiBGQ1MgY2hlY2sgZmFpbHVyZSB3aGlsZSByZWNlaXZpbmcuCisgICAgICovCisgICAgT1RfRVJST1JfRkNTID0gMTcsCisKKyAgICAvKioKKyAgICAgKiBObyBmcmFtZSByZWNlaXZlZC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9OT19GUkFNRV9SRUNFSVZFRCA9IDE4LAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmcm9tIGFuIHVua25vd24gbmVpZ2hib3IuCisgICAgICovCisgICAgT1RfRVJST1JfVU5LTk9XTl9ORUlHSEJPUiA9IDE5LAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmcm9tIGFuIGludmFsaWQgc291cmNlIGFkZHJlc3MuCisgICAgICovCisgICAgT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUyA9IDIwLAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmaWx0ZXJlZCBieSB0aGUgd2hpdGVsaXN0LgorICAgICAqLworICAgIE9UX0VSUk9SX1dISVRFTElTVF9GSUxURVJFRCA9IDIxLAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBmcmFtZSBmaWx0ZXJlZCBieSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBjaGVjay4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9ERVNUSU5BVElPTl9BRERSRVNTX0ZJTFRFUkVEID0gMjIsCisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kLgorICAgICAqLworICAgIE9UX0VSUk9SX05PVF9GT1VORCA9IDIzLAorCisgICAgLyoqCisgICAgICogVGhlIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgorICAgICAqLworICAgIE9UX0VSUk9SX0FMUkVBRFkgPSAyNCwKKworICAgIC8qKgorICAgICAqIFJlY2VpdmVkIGEgZnJhbWUgZmlsdGVyZWQgYnkgdGhlIGJsYWNrbGlzdC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9CTEFDS0xJU1RfRklMVEVSRUQgPSAyNSwKKworICAgIC8qKgorICAgICAqIFRoZSBjcmVhdGlvbiBvZiBJUHY2IGFkZHJlc3MgZmFpbGVkLgorICAgICAqLworICAgIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgPSAyNiwKKworICAgIC8qKgorICAgICAqIE9wZXJhdGlvbiBwcmV2ZW50ZWQgYnkgbW9kZSBmbGFncworICAgICAqLworICAgIE9UX0VSUk9SX05PVF9DQVBBQkxFID0gMjcsCisKKyAgICAvKioKKyAgICAgKiBDb2FwIHJlc3BvbnNlIG9yIGFja25vd2xlZGdtZW50IG9yIEROUyByZXNwb25zZSBub3QgcmVjZWl2ZWQuCisgICAgICovCisgICAgT1RfRVJST1JfUkVTUE9OU0VfVElNRU9VVCA9IDI4LAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBkdXBsaWNhdGVkIGZyYW1lLgorICAgICAqLworICAgIE9UX0VSUk9SX0RVUExJQ0FURUQgPSAyOSwKKworICAgIC8qKgorICAgICAqIE1lc3NhZ2UgaXMgYmVpbmcgZHJvcHBlZCBmcm9tIHJlYXNzZW1ibHkgbGlzdCBkdWUgdG8gdGltZW91dC4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9SRUFTU0VNQkxZX1RJTUVPVVQgPSAzMCwKKworICAgIC8qKgorICAgICAqIE1lc3NhZ2UgaXMgbm90IGEgVE1GIE1lc3NhZ2UuCisgICAgICovCisgICAgT1RfRVJST1JfTk9UX1RNRiA9IDMxLAorCisgICAgLyoqCisgICAgICogUmVjZWl2ZWQgYSBub24tbG93cGFuIGRhdGEgZnJhbWUuCisgICAgICovCisgICAgT1RfRVJST1JfTk9UX0xPV1BBTl9EQVRBX0ZSQU1FID0gMzIsCisKKyAgICAvKioKKyAgICAgKiBBIGZlYXR1cmUvZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBieSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgKi8KKyAgICBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFID0gMzMsCisKKyAgICAvKioKKyAgICAgKiBHZW5lcmljIGVycm9yIChzaG91bGQgbm90IHVzZSkuCisgICAgICovCisgICAgT1RfRVJST1JfR0VORVJJQyA9IDI1NSwKK30gb3RFcnJvcjsKKworI2RlZmluZSBPVF9JUDZfSUlEX1NJWkUgICAgICAgICAgICA4ICAgLy8vPCBTaXplIG9mIGFuIElQdjYgSW50ZXJmYWNlIElkZW50aWZpZXIgKGJ5dGVzKQorCisjZGVmaW5lIE9UX01BU1RFUl9LRVlfU0laRSAgICAgICAgIDE2ICAvLy88IFNpemUgb2YgdGhlIFRocmVhZCBNYXN0ZXIgS2V5IChieXRlcykKKworLyoqCisgKiBDb25jYXRlbmF0ZWQgTGlzdCBvZiBUeXBlIElkZW50aWZpZXJzIG9mIE90aGVyIERpYWdub3N0aWNzIFRMVnMgVXNlZCB0byBSZXF1ZXN0IG9yIFJlc2V0IE11bHRpcGxlIERpYWdub3N0aWMgVmFsdWVzLgorICovCisjZGVmaW5lIE9UX05FVFdPUktfRElBR05PU1RJQ19UWVBFTElTVF9UWVBFICAgICAgICAgIDE4CisKKyNkZWZpbmUgT1RfTkVUV09SS19ESUFHTk9TVElDX1RZUEVMSVNUX01BWF9FTlRSSUVTICAgMTkgIC8vLzwgTWF4aW11bSBOdW1iZXIgb2YgT3RoZXIgTmV0d29yayBEaWFnbm9zdGljIFRMViBUeXBlcworCisvKioKKyAqIEBzdHJ1Y3Qgb3RNYXN0ZXJLZXkKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgVGhyZWFkIE1hc3RlciBLZXkuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorc3RydWN0IG90TWFzdGVyS2V5Cit7CisgICAgdWludDhfdCBtOFtPVF9NQVNURVJfS0VZX1NJWkVdOyAgICAvLy88IEJ5dGUgdmFsdWVzCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBhIFRocmVhZCBNYXN0ZXIgS2V5LgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RNYXN0ZXJLZXkgb3RNYXN0ZXJLZXk7CisKKyNkZWZpbmUgT1RfTkVUV09SS19OQU1FX01BWF9TSVpFICAgMTYgIC8vLzwgTWF4aW11bSBzaXplIG9mIHRoZSBUaHJlYWQgTmV0d29yayBOYW1lIGZpZWxkIChieXRlcykKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgTmV0d29yayBOYW1lLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3ROZXR3b3JrTmFtZQoreworICAgIGNoYXIgbThbT1RfTkVUV09SS19OQU1FX01BWF9TSVpFICsgMV07ICAvLy88IEJ5dGUgdmFsdWVzCit9IG90TmV0d29ya05hbWU7CisKKyNkZWZpbmUgT1RfRVhUX1BBTl9JRF9TSVpFICAgICAgICAgOCAgIC8vLzwgU2l6ZSBvZiBhIFRocmVhZCBQQU4gSUQgKGJ5dGVzKQorCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gRXh0ZW5kZWQgUEFOIElELgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RFeHRlbmRlZFBhbklkCit7CisgICAgdWludDhfdCBtOFtPVF9FWFRfUEFOX0lEX1NJWkVdOyAgIC8vLzwgQnl0ZSB2YWx1ZXMKK30gb3RFeHRlbmRlZFBhbklkOworCisjZGVmaW5lIE9UX01FU0hfTE9DQUxfUFJFRklYX1NJWkUgIDggIC8vLzwgU2l6ZSBvZiB0aGUgTWVzaCBMb2NhbCBQcmVmaXggKGJ5dGVzKQorCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBNZXNoIExvY2FsIFByZWZpeC4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TWVzaExvY2FsUHJlZml4Cit7CisgICAgdWludDhfdCBtOFtPVF9NRVNIX0xPQ0FMX1BSRUZJWF9TSVpFXTsgIC8vLzwgQnl0ZSB2YWx1ZXMKK30gb3RNZXNoTG9jYWxQcmVmaXg7CisKKyNkZWZpbmUgT1RfUFNLQ19NQVhfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8vLzwgTWF4aW11bSBzaXplIG9mIHRoZSBQU0tjIChieXRlcykKKworI2RlZmluZSBPVF9DT01NSVNTSU9OSU5HX1BBU1NQSFJBU0VfTUlOX1NJWkUgICAgICAgICA2ICAgLy8vPCBNaW5pbXVtIHNpemUgb2YgdGhlIENvbW1pc3Npb25pbmcgUGFzc3BocmFzZQorI2RlZmluZSBPVF9DT01NSVNTSU9OSU5HX1BBU1NQSFJBU0VfTUFYX1NJWkUgICAgICAgICAyNTUgLy8vPCBNYXhpbXVtIHNpemUgb2YgdGhlIENvbW1pc3Npb25pbmcgUGFzc3BocmFzZQorCisvKioKKyAgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIFBTS2MuCisgICoKKyAgKi8KK3R5cGVkZWYgc3RydWN0IG90UFNLYworeworICAgIHVpbnQ4X3QgbThbT1RfUFNLQ19NQVhfU0laRV07ICAvLy88IEJ5dGUgdmFsdWVzCit9IG90UFNLYzsKKworLyoqCisgICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50IFNlY3VyaXR5IFBvbGljeS4KKyAgKgorICAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RTZWN1cml0eVBvbGljeQoreworICAgIHVpbnQxNl90IG1Sb3RhdGlvblRpbWU7ICAvLy88IFRoZSB2YWx1ZSBmb3IgdGhyS2V5Um90YXRpb24gaW4gdW5pdHMgb2YgaG91cnMKKyAgICB1aW50OF90IG1GbGFnczsgICAgICAgICAgLy8vPCBGbGFncyBhcyBkZWZpbmVkIGluIFRocmVhZCAxLjEgU2VjdGlvbiA4LjEwLjEuMTUKK30gb3RTZWN1cml0eVBvbGljeTsKKworLyoqCisgKiBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIFNlY3VyaXR5IFBvbGljeSBUTFYgZmxhZ3MuCisgKgorICovCitlbnVtCit7CisgICAgT1RfU0VDVVJJVFlfUE9MSUNZX09CVEFJTl9NQVNURVJfS0VZICAgICAgPSAxIDw8IDcsICAvLy88IE9idGFpbmluZyB0aGUgTWFzdGVyIEtleQorICAgIE9UX1NFQ1VSSVRZX1BPTElDWV9OQVRJVkVfQ09NTUlTU0lPTklORyAgID0gMSA8PCA2LCAgLy8vPCBOYXRpdmUgQ29tbWlzc2lvbmluZworICAgIE9UX1NFQ1VSSVRZX1BPTElDWV9ST1VURVJTICAgICAgICAgICAgICAgID0gMSA8PCA1LCAgLy8vPCBSb3V0ZXJzIGVuYWJsZWQKKyAgICBPVF9TRUNVUklUWV9QT0xJQ1lfRVhURVJOQUxfQ09NTUlTU0lPTkVSICA9IDEgPDwgNCwgIC8vLzwgRXh0ZXJuYWwgQ29tbWlzc2lvbmVyIGFsbG93ZWQKKyAgICBPVF9TRUNVUklUWV9QT0xJQ1lfQkVBQ09OUyAgICAgICAgICAgICAgICA9IDEgPDwgMywgIC8vLzwgQmVhY29ucyBlbmFibGVkCit9OworCisvKioKKyAgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBDaGFubmVsIE1hc2sgUGFnZSAwLgorICAqCisgICovCit0eXBlZGVmIHVpbnQzMl90IG90Q2hhbm5lbE1hc2tQYWdlMDsKKworLyoqCisgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQuCisgKgorICovCit0eXBlZGVmIHVpbnQxNl90IG90UGFuSWQ7CisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgdWludDE2X3Qgb3RTaG9ydEFkZHJlc3M7CisKKyNkZWZpbmUgT1RfRVhUX0FERFJFU1NfU0laRSAgICAgICAgOCAgIC8vLzwgU2l6ZSBvZiBhbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgKGJ5dGVzKQorCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEV4dEFkZHJlc3MKK3sKKyAgICB1aW50OF90IG04W09UX0VYVF9BRERSRVNTX1NJWkVdOyAgLy8vPCBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgYnl0ZXMKK30gb3RFeHRBZGRyZXNzOworCisjZGVmaW5lIE9UX0lQNl9QUkVGSVhfU0laRSAgICAgICAgIDggICAvLy88IFNpemUgb2YgYW4gSVB2NiBwcmVmaXggKGJ5dGVzKQorI2RlZmluZSBPVF9JUDZfQUREUkVTU19TSVpFICAgICAgICAxNiAgLy8vPCBTaXplIG9mIGFuIElQdjYgYWRkcmVzcyAoYnl0ZXMpCisKKy8qKgorICogQHN0cnVjdCBvdElwNkFkZHJlc3MKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElQdjYgYWRkcmVzcy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitzdHJ1Y3Qgb3RJcDZBZGRyZXNzCit7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgIG04W09UX0lQNl9BRERSRVNTX1NJWkVdOyAgICAgICAgICAgICAgICAgICAgICAvLy88IDgtYml0IGZpZWxkcworICAgICAgICB1aW50MTZfdCBtMTZbT1RfSVA2X0FERFJFU1NfU0laRSAvIHNpemVvZih1aW50MTZfdCldOyAgLy8vPCAxNi1iaXQgZmllbGRzCisgICAgICAgIHVpbnQzMl90IG0zMltPVF9JUDZfQUREUkVTU19TSVpFIC8gc2l6ZW9mKHVpbnQzMl90KV07ICAvLy88IDMyLWJpdCBmaWVsZHMKKyAgICB9IG1GaWVsZHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgSVB2NiBhY2Nlc3NvciBmaWVsZHMKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIElQdjYgYWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SXA2QWRkcmVzcyBvdElwNkFkZHJlc3M7CisKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBsb2NhbCBhbmQgcGVlciBJUHY2IHNvY2tldCBhZGRyZXNzZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TWVzc2FnZUluZm8KK3sKKyAgICBvdElwNkFkZHJlc3MgbVNvY2tBZGRyOyAgICAgLy8vPCBUaGUgbG9jYWwgSVB2NiBhZGRyZXNzLgorICAgIG90SXA2QWRkcmVzcyBtUGVlckFkZHI7ICAgICAvLy88IFRoZSBwZWVyIElQdjYgYWRkcmVzcy4KKyAgICB1aW50MTZfdCAgICAgbVNvY2tQb3J0OyAgICAgLy8vPCBUaGUgbG9jYWwgdHJhbnNwb3J0LWxheWVyIHBvcnQuCisgICAgdWludDE2X3QgICAgIG1QZWVyUG9ydDsgICAgIC8vLzwgVGhlIHBlZXIgdHJhbnNwb3J0LWxheWVyIHBvcnQuCisgICAgaW50OF90ICAgICAgIG1JbnRlcmZhY2VJZDsgIC8vLzwgQW4gSVB2NiBpbnRlcmZhY2UgaWRlbnRpZmllci4KKyAgICB1aW50OF90ICAgICAgbUhvcExpbWl0OyAgICAgLy8vPCBUaGUgSVB2NiBIb3AgTGltaXQuCisgICAgY29uc3Qgdm9pZCAgKm1MaW5rSW5mbzsgICAgIC8vLzwgQSBwb2ludGVyIHRvIGxpbmstc3BlY2lmaWMgaW5mb3JtYXRpb24uCit9IG90TWVzc2FnZUluZm87CisKKy8qKgorICogVGhpcyB0eXBlIHBvaW50cyB0byBhbiBPcGVuVGhyZWFkIG1lc3NhZ2UgYnVmZmVyLgorICovCit0eXBlZGVmIHN0cnVjdCBvdE1lc3NhZ2UKK3sKKyAgICBzdHJ1Y3Qgb3RNZXNzYWdlICptTmV4dDsgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IE1lc3NhZ2UgYnVmZmVyLgorfSBvdE1lc3NhZ2U7CisKKworI2RlZmluZSBPVF9QQU5JRF9CUk9BRENBU1QgICAweGZmZmYgICAgICAvLy88IElFRUUgODAyLjE1LjQgQnJvYWRjYXN0IFBBTiBJRAorCisjZGVmaW5lIE9UX0NIQU5ORUxfMTFfTUFTSyAgICgxIDw8IDExKSAgIC8vLzwgQ2hhbm5lbCAxMQorI2RlZmluZSBPVF9DSEFOTkVMXzEyX01BU0sgICAoMSA8PCAxMikgICAvLy88IENoYW5uZWwgMTIKKyNkZWZpbmUgT1RfQ0hBTk5FTF8xM19NQVNLICAgKDEgPDwgMTMpICAgLy8vPCBDaGFubmVsIDEzCisjZGVmaW5lIE9UX0NIQU5ORUxfMTRfTUFTSyAgICgxIDw8IDE0KSAgIC8vLzwgQ2hhbm5lbCAxNAorI2RlZmluZSBPVF9DSEFOTkVMXzE1X01BU0sgICAoMSA8PCAxNSkgICAvLy88IENoYW5uZWwgMTUKKyNkZWZpbmUgT1RfQ0hBTk5FTF8xNl9NQVNLICAgKDEgPDwgMTYpICAgLy8vPCBDaGFubmVsIDE2CisjZGVmaW5lIE9UX0NIQU5ORUxfMTdfTUFTSyAgICgxIDw8IDE3KSAgIC8vLzwgQ2hhbm5lbCAxNworI2RlZmluZSBPVF9DSEFOTkVMXzE4X01BU0sgICAoMSA8PCAxOCkgICAvLy88IENoYW5uZWwgMTgKKyNkZWZpbmUgT1RfQ0hBTk5FTF8xOV9NQVNLICAgKDEgPDwgMTkpICAgLy8vPCBDaGFubmVsIDE5CisjZGVmaW5lIE9UX0NIQU5ORUxfMjBfTUFTSyAgICgxIDw8IDIwKSAgIC8vLzwgQ2hhbm5lbCAyMAorI2RlZmluZSBPVF9DSEFOTkVMXzIxX01BU0sgICAoMSA8PCAyMSkgICAvLy88IENoYW5uZWwgMjEKKyNkZWZpbmUgT1RfQ0hBTk5FTF8yMl9NQVNLICAgKDEgPDwgMjIpICAgLy8vPCBDaGFubmVsIDIyCisjZGVmaW5lIE9UX0NIQU5ORUxfMjNfTUFTSyAgICgxIDw8IDIzKSAgIC8vLzwgQ2hhbm5lbCAyMworI2RlZmluZSBPVF9DSEFOTkVMXzI0X01BU0sgICAoMSA8PCAyNCkgICAvLy88IENoYW5uZWwgMjQKKyNkZWZpbmUgT1RfQ0hBTk5FTF8yNV9NQVNLICAgKDEgPDwgMjUpICAgLy8vPCBDaGFubmVsIDI1CisjZGVmaW5lIE9UX0NIQU5ORUxfMjZfTUFTSyAgICgxIDw8IDI2KSAgIC8vLzwgQ2hhbm5lbCAyNgorCisjZGVmaW5lIE9UX0NIQU5ORUxfQUxMICAgICAgIDB4ZmZmZmZmZmYgIC8vLzwgQWxsIGNoYW5uZWxzCisKKyNkZWZpbmUgT1RfU1RFRVJJTkdfREFUQV9NQVhfTEVOR1RIICAgICAgIDE2ICAvLy88IE1heCBzdGVlcmluZyBkYXRhIGxlbmd0aCAoYnl0ZXMpCisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgc3RlZXJpbmcgZGF0YS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90U3RlZXJpbmdEYXRhCit7CisgICAgdWludDhfdCBtTGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBMZW5ndGggb2Ygc3RlZXJpbmcgZGF0YSAoYnl0ZXMpCisgICAgdWludDhfdCBtOFtPVF9TVEVFUklOR19EQVRBX01BWF9MRU5HVEhdOyAgLy8vPCBCeXRlIHZhbHVlcworfSBvdFN0ZWVyaW5nRGF0YTsKKworLyoqCisgKiBUaGlzIHN0cnVjdCByZXByZXNlbnRzIGEgcmVjZWl2ZWQgSUVFRSA4MDIuMTUuNCBCZWFjb24uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEFjdGl2ZVNjYW5SZXN1bHQKK3sKKyAgICBvdEV4dEFkZHJlc3MgICAgbUV4dEFkZHJlc3M7ICAgICAgLy8vPCBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MKKyAgICBvdE5ldHdvcmtOYW1lICAgbU5ldHdvcmtOYW1lOyAgICAgLy8vPCBUaHJlYWQgTmV0d29yayBOYW1lCisgICAgb3RFeHRlbmRlZFBhbklkIG1FeHRlbmRlZFBhbklkOyAgIC8vLzwgVGhyZWFkIEV4dGVuZGVkIFBBTiBJRAorICAgIG90U3RlZXJpbmdEYXRhICBtU3RlZXJpbmdEYXRhOyAgICAvLy88IFN0ZWVyaW5nIERhdGEKKyAgICB1aW50MTZfdCAgICAgICAgbVBhbklkOyAgICAgICAgICAgLy8vPCBJRUVFIDgwMi4xNS40IFBBTiBJRAorICAgIHVpbnQxNl90ICAgICAgICBtSm9pbmVyVWRwUG9ydDsgICAvLy88IEpvaW5lciBVRFAgUG9ydAorICAgIHVpbnQ4X3QgICAgICAgICBtQ2hhbm5lbDsgICAgICAgICAvLy88IElFRUUgODAyLjE1LjQgQ2hhbm5lbAorICAgIGludDhfdCAgICAgICAgICBtUnNzaTsgICAgICAgICAgICAvLy88IFJTU0kgKGRCbSkKKyAgICB1aW50OF90ICAgICAgICAgbUxxaTsgICAgICAgICAgICAgLy8vPCBMUUkKKyAgICB1bnNpZ25lZCBpbnQgICAgbVZlcnNpb24gOiA0OyAgICAgLy8vPCBWZXJzaW9uCisgICAgYm9vbCAgICAgICAgICAgIG1Jc05hdGl2ZSA6IDE7ICAgIC8vLzwgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnCisgICAgYm9vbCAgICAgICAgICAgIG1Jc0pvaW5hYmxlIDogMTsgIC8vLzwgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZworfSBvdEFjdGl2ZVNjYW5SZXN1bHQ7CisKKy8qKgorICogVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhbiBlbmVyZ3kgc2NhbiByZXN1bHQuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdEVuZXJneVNjYW5SZXN1bHQKK3sKKyAgICB1aW50OF90IG1DaGFubmVsOyAgICAgICAgICAgICAgICAvLy88IElFRUUgODAyLjE1LjQgQ2hhbm5lbAorICAgIGludDhfdCAgbU1heFJzc2k7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIG1heCBSU1NJIChkQm0pCit9IG90RW5lcmd5U2NhblJlc3VsdDsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIEFjdGl2ZSBvciBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBvdE9wZXJhdGlvbmFsRGF0YXNldAoreworICAgIHVpbnQ2NF90ICAgICAgICAgICAgIG1BY3RpdmVUaW1lc3RhbXA7ICAgICAgICAgICAgLy8vPCBBY3RpdmUgVGltZXN0YW1wCisgICAgdWludDY0X3QgICAgICAgICAgICAgbVBlbmRpbmdUaW1lc3RhbXA7ICAgICAgICAgICAvLy88IFBlbmRpbmcgVGltZXN0YW1wCisgICAgb3RNYXN0ZXJLZXkgICAgICAgICAgbU1hc3RlcktleTsgICAgICAgICAgICAgICAgICAvLy88IE5ldHdvcmsgTWFzdGVyIEtleQorICAgIG90TmV0d29ya05hbWUgICAgICAgIG1OZXR3b3JrTmFtZTsgICAgICAgICAgICAgICAgLy8vPCBOZXR3b3JrIE5hbWUKKyAgICBvdEV4dGVuZGVkUGFuSWQgICAgICBtRXh0ZW5kZWRQYW5JZDsgICAgICAgICAgICAgIC8vLzwgRXh0ZW5kZWQgUEFOIElECisgICAgb3RNZXNoTG9jYWxQcmVmaXggICAgbU1lc2hMb2NhbFByZWZpeDsgICAgICAgICAgICAvLy88IE1lc2ggTG9jYWwgUHJlZml4CisgICAgdWludDMyX3QgICAgICAgICAgICAgbURlbGF5OyAgICAgICAgICAgICAgICAgICAgICAvLy88IERlbGF5IFRpbWVyCisgICAgb3RQYW5JZCAgICAgICAgICAgICAgbVBhbklkOyAgICAgICAgICAgICAgICAgICAgICAvLy88IFBBTiBJRAorICAgIHVpbnQxNl90ICAgICAgICAgICAgIG1DaGFubmVsOyAgICAgICAgICAgICAgICAgICAgLy8vPCBDaGFubmVsCisgICAgb3RQU0tjICAgICAgICAgICAgICAgbVBTS2M7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFBTS2MKKyAgICBvdFNlY3VyaXR5UG9saWN5ICAgICBtU2VjdXJpdHlQb2xpY3k7ICAgICAgICAgICAgIC8vLzwgU2VjdXJpdHkgUG9saWN5CisgICAgb3RDaGFubmVsTWFza1BhZ2UwICAgbUNoYW5uZWxNYXNrUGFnZTA7ICAgICAgICAgICAvLy88IENoYW5uZWwgTWFzayBQYWdlIDAKKworICAgIGJvb2wgICAgICAgICAgICAgICAgIG1Jc0FjdGl2ZVRpbWVzdGFtcFNldCA6IDE7ICAgLy8vPCBUUlVFIGlmIEFjdGl2ZSBUaW1lc3RhbXAgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzUGVuZGluZ1RpbWVzdGFtcFNldCA6IDE7ICAvLy88IFRSVUUgaWYgUGVuZGluZyBUaW1lc3RhbXAgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzTWFzdGVyS2V5U2V0IDogMTsgICAgICAgICAvLy88IFRSVUUgaWYgTmV0d29yayBNYXN0ZXIgS2V5IGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgIG1Jc05ldHdvcmtOYW1lU2V0IDogMTsgICAgICAgLy8vPCBUUlVFIGlmIE5ldHdvcmsgTmFtZSBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICBib29sICAgICAgICAgICAgICAgICBtSXNFeHRlbmRlZFBhbklkU2V0IDogMTsgICAgIC8vLzwgVFJVRSBpZiBFeHRlbmRlZCBQQU4gSUQgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzTWVzaExvY2FsUHJlZml4U2V0IDogMTsgICAvLy88IFRSVUUgaWYgTWVzaCBMb2NhbCBQcmVmaXggaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzRGVsYXlTZXQgOiAxOyAgICAgICAgICAgICAvLy88IFRSVUUgaWYgRGVsYXkgVGltZXIgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzUGFuSWRTZXQgOiAxOyAgICAgICAgICAgICAvLy88IFRSVUUgaWYgUEFOIElEIGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgIG1Jc0NoYW5uZWxTZXQgOiAxOyAgICAgICAgICAgLy8vPCBUUlVFIGlmIENoYW5uZWwgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzUFNLY1NldCA6IDE7ICAgICAgICAgICAgICAvLy88IFRSVUUgaWYgUFNLYyBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICBib29sICAgICAgICAgICAgICAgICBtSXNTZWN1cml0eVBvbGljeVNldCA6IDE7ICAgIC8vLzwgVFJVRSBpZiBTZWN1cml0eSBQb2xpY3kgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgbUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA6IDE7ICAvLy88IFRSVUUgaWYgQ2hhbm5lbCBNYXNrIFBhZ2UgMCBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KK30gb3RPcGVyYXRpb25hbERhdGFzZXQ7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENvbW1pc3Npb25pbmcgRGF0YXNldC4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90Q29tbWlzc2lvbmluZ0RhdGFzZXQKK3sKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbUxvY2F0b3I7ICAgICAgICAgICAgICAgICAgIC8vLzwgQm9yZGVyIFJvdXRlciBSTE9DMTYKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbVNlc3Npb25JZDsgICAgICAgICAgICAgICAgIC8vLzwgQ29tbWlzc2lvbmVyIFNlc3Npb24gSWQKKyAgICBvdFN0ZWVyaW5nRGF0YSAgICAgICAgbVN0ZWVyaW5nRGF0YTsgICAgICAgICAgICAgIC8vLzwgU3RlZXJpbmcgRGF0YQorICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtSm9pbmVyVWRwUG9ydDsgICAgICAgICAgICAgLy8vPCBKb2luZXIgVURQIFBvcnQKKworICAgIGJvb2wgICAgICAgICAgICAgICAgICBtSXNMb2NhdG9yU2V0IDogMTsgICAgICAgICAgLy8vPCBUUlVFIGlmIEJvcmRlciBSb3V0ZXIgUkxPQzE2IGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgICBtSXNTZXNzaW9uSWRTZXQ6IDE7ICAgICAgICAgLy8vPCBUUlVFIGlmIENvbW1pc3Npb25lciBTZXNzaW9uIElkIGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgICAgICAgICAgICAgICAgICBtSXNTdGVlcmluZ0RhdGFTZXQgOiAxOyAgICAgLy8vPCBUUlVFIGlmIFN0ZWVyaW5nIERhdGEgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgIG1Jc0pvaW5lclVkcFBvcnRTZXQgOiAxOyAgICAvLy88IFRSVUUgaWYgSm9pbmVyIFVEUCBQb3J0IGlzIHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorfSBvdENvbW1pc3Npb25pbmdEYXRhc2V0OworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyBtZXNoY29wIFRMViB0eXBlcy4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSBvdE1lc2hjb3BUbHZUeXBlCit7CisgICAgT1RfTUVTSENPUF9UTFZfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICA9IDAsICAgIC8vLzwgbWVzaGNvcCBDaGFubmVsIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1BBTklEICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAvLy88IG1lc2hjb3AgUGFuIElkIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0VYVFBBTklEICAgICAgICAgICAgICAgICAgPSAyLCAgICAvLy88IG1lc2hjb3AgRXh0ZW5kZWQgUGFuIElkIFRMVgorICAgIE9UX01FU0hDT1BfVExWX05FVFdPUktOQU1FICAgICAgICAgICAgICAgPSAzLCAgICAvLy88IG1lc2hjb3AgTmV0d29yayBOYW1lIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1BTS0MgICAgICAgICAgICAgICAgICAgICAgPSA0LCAgICAvLy88IG1lc2hjb3AgUFNLYyBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9NQVNURVJLRVkgICAgICAgICAgICAgICAgID0gNSwgICAgLy8vPCBtZXNoY29wIE5ldHdvcmsgTWFzdGVyIEtleSBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9ORVRXT1JLX0tFWV9TRVFVRU5DRSAgICAgID0gNiwgICAgLy8vPCBtZXNoY29wIE5ldHdvcmsgS2V5IFNlcXVlbmNlIFRMVgorICAgIE9UX01FU0hDT1BfVExWX01FU0hMT0NBTFBSRUZJWCAgICAgICAgICAgPSA3LCAgICAvLy88IG1lc2hjb3AgTWVzaCBMb2NhbCBQcmVmaXggVExWCisgICAgT1RfTUVTSENPUF9UTFZfU1RFRVJJTkdfREFUQSAgICAgICAgICAgICA9IDgsICAgIC8vLzwgbWVzaGNvcCBTdGVlcmluZyBEYXRhIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0JPUkRFUl9BR0VOVF9STE9DICAgICAgICAgPSA5LCAgICAvLy88IG1lc2hjb3AgQm9yZGVyIEFnZW50IExvY2F0b3IgVExWCisgICAgT1RfTUVTSENPUF9UTFZfQ09NTUlTU0lPTkVSX0lEICAgICAgICAgICA9IDEwLCAgIC8vLzwgbWVzaGNvcCBDb21taXNzaW9uZXIgSUQgVExWCisgICAgT1RfTUVTSENPUF9UTFZfQ09NTV9TRVNTSU9OX0lEICAgICAgICAgICA9IDExLCAgIC8vLzwgbWVzaGNvcCBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9TRUNVUklUWVBPTElDWSAgICAgICAgICAgID0gMTIsICAgLy8vPCBtZXNoY29wIFNlY3VyaXR5IFBvbGljeSBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9HRVQgICAgICAgICAgICAgICAgICAgICAgID0gMTMsICAgLy8vPCBtZXNoY29wIEdldCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9BQ1RJVkVUSU1FU1RBTVAgICAgICAgICAgID0gMTQsICAgLy8vPCBtZXNoY29wIEFjdGl2ZSBUaW1lc3RhbXAgVExWCisgICAgT1RfTUVTSENPUF9UTFZfU1RBVEUgICAgICAgICAgICAgICAgICAgICA9IDE2LCAgIC8vLzwgbWVzaGNvcCBTdGF0ZSBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9KT0lORVJfRFRMUyAgICAgICAgICAgICAgID0gMTcsICAgLy8vPCBtZXNoY29wIEpvaW5lciBEVExTIEVuY2Fwc3VsYXRpb24gVExWCisgICAgT1RfTUVTSENPUF9UTFZfSk9JTkVSX1VEUF9QT1JUICAgICAgICAgICA9IDE4LCAgIC8vLzwgbWVzaGNvcCBKb2luZXIgVURQIFBvcnQgVExWCisgICAgT1RfTUVTSENPUF9UTFZfSk9JTkVSX0lJRCAgICAgICAgICAgICAgICA9IDE5LCAgIC8vLzwgbWVzaGNvcCBKb2luZXIgSUlEIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0pPSU5FUl9STE9DICAgICAgICAgICAgICAgPSAyMCwgICAvLy88IG1lc2hjb3AgSm9pbmVyIFJvdXRlciBMb2NhdG9yIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0pPSU5FUl9ST1VURVJfS0VLICAgICAgICAgPSAyMSwgICAvLy88IG1lc2hjb3AgSm9pbmVyIFJvdXRlciBLRUsgVExWCisgICAgT1RfTUVTSENPUF9UTFZfUFJPVklTSU9OSU5HX1VSTCAgICAgICAgICA9IDMyLCAgIC8vLzwgbWVzaGNvcCBQcm92aXNpb25pbmcgVVJMIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1ZFTkRPUl9OQU1FX1RMViAgICAgICAgICAgPSAzMywgICAvLy88IG1lc2hjb3AgVmVuZG9yIE5hbWUgVExWCisgICAgT1RfTUVTSENPUF9UTFZfVkVORE9SX01PREVMX1RMViAgICAgICAgICA9IDM0LCAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgTW9kZWwgVExWCisgICAgT1RfTUVTSENPUF9UTFZfVkVORE9SX1NXX1ZFUlNJT05fVExWICAgICA9IDM1LCAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgU1cgVmVyc2lvbiBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9WRU5ET1JfREFUQV9UTFYgICAgICAgICAgID0gMzYsICAgLy8vPCBtZXNoY29wIFZlbmRvciBEYXRhIFRMVgorICAgIE9UX01FU0hDT1BfVExWX1ZFTkRPUl9TVEFDS19WRVJTSU9OX1RMViAgPSAzNywgICAvLy88IG1lc2hjb3AgVmVuZG9yIFN0YWNrIFZlcnNpb24gVExWCisgICAgT1RfTUVTSENPUF9UTFZfUEVORElOR1RJTUVTVEFNUCAgICAgICAgICA9IDUxLCAgIC8vLzwgbWVzaGNvcCBQZW5kaW5nIFRpbWVzdGFtcCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9ERUxBWVRJTUVSICAgICAgICAgICAgICAgID0gNTIsICAgLy8vPCBtZXNoY29wIERlbGF5IFRpbWVyIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0NIQU5ORUxNQVNLICAgICAgICAgICAgICAgPSA1MywgICAvLy88IG1lc2hjb3AgQ2hhbm5lbCBNYXNrIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0NPVU5UICAgICAgICAgICAgICAgICAgICAgPSA1NCwgICAvLy88IG1lc2hjb3AgQ291bnQgVExWCisgICAgT1RfTUVTSENPUF9UTFZfUEVSSU9EICAgICAgICAgICAgICAgICAgICA9IDU1LCAgIC8vLzwgbWVzaGNvcCBQZXJpb2QgVExWCisgICAgT1RfTUVTSENPUF9UTFZfU0NBTl9EVVJBVElPTiAgICAgICAgICAgICA9IDU2LCAgIC8vLzwgbWVzaGNvcCBTY2FuIER1cmF0aW9uIFRMVgorICAgIE9UX01FU0hDT1BfVExWX0VORVJHWV9MSVNUICAgICAgICAgICAgICAgPSA1NywgICAvLy88IG1lc2hjb3AgRW5lcmd5IExpc3QgVExWCisgICAgT1RfTUVTSENPUF9UTFZfRElTQ09WRVJZUkVRVUVTVCAgICAgICAgICA9IDEyOCwgIC8vLzwgbWVzaGNvcCBEaXNjb3ZlcnkgUmVxdWVzdCBUTFYKKyAgICBPVF9NRVNIQ09QX1RMVl9ESVNDT1ZFUllSRVNQT05TRSAgICAgICAgID0gMTI5LCAgLy8vPCBtZXNoY29wIERpc2NvdmVyeSBSZXNwb25zZSBUTFYKK30gb3RNZXNoY29wVGx2VHlwZTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIE1MRSBMaW5rIE1vZGUgY29uZmlndXJhdGlvbi4KKyAqLworT1RfVE9PTF9BTElHTig0KQordHlwZWRlZiBzdHJ1Y3Qgb3RMaW5rTW9kZUNvbmZpZworeworICAgIC8qKgorICAgICAqIDEsIGlmIHRoZSBzZW5kZXIgaGFzIGl0cyByZWNlaXZlciBvbiB3aGVuIG5vdCB0cmFuc21pdHRpbmcuICAwLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtUnhPbldoZW5JZGxlIDogMTsKKworICAgIC8qKgorICAgICAqIDEsIGlmIHRoZSBzZW5kZXIgd2lsbCB1c2UgSUVFRSA4MDIuMTUuNCB0byBzZWN1cmUgYWxsIGRhdGEgcmVxdWVzdHMuICAwLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtU2VjdXJlRGF0YVJlcXVlc3RzIDogMTsKKworICAgIC8qKgorICAgICAqIDEsIGlmIHRoZSBzZW5kZXIgaXMgYW4gRkZELiAgMCwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbURldmljZVR5cGUgOiAxOworCisgICAgLyoqCisgICAgICogMSwgaWYgdGhlIHNlbmRlciByZXF1aXJlcyB0aGUgZnVsbCBOZXR3b3JrIERhdGEuICAwLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtTmV0d29ya0RhdGEgOiAxOworfSBvdExpbmtNb2RlQ29uZmlnOworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyBmbGFncyB0aGF0IGluZGljYXRlIHdoYXQgY29uZmlndXJhdGlvbiBvciBzdGF0ZSBoYXMgY2hhbmdlZCB3aXRoaW4gT3BlblRocmVhZC4KKyAqCisgKi8KK2VudW0KK3sKKyAgICBPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEICAgICAgICAgICAgPSAxIDw8IDAsICAgLy8vPCBJUHY2IGFkZHJlc3Mgd2FzIGFkZGVkCisgICAgT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19SRU1PVkVEICAgICAgICAgID0gMSA8PCAxLCAgIC8vLzwgSVB2NiBhZGRyZXNzIHdhcyByZW1vdmVkCisgICAgT1RfQ0hBTkdFRF9USFJFQURfUk9MRSAgICAgICAgICAgICAgICAgID0gMSA8PCAyLCAgIC8vLzwgUm9sZSAoZGlzYWJsZWQsIGRldGFjaGVkLCBjaGlsZCwgcm91dGVyLCBsZWFkZXIpIGNoYW5nZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSICAgICAgICAgICAgICAgPSAxIDw8IDMsICAgLy8vPCBUaGUgbGluay1sb2NhbCBhZGRyZXNzIGNoYW5nZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSICAgICAgICAgICAgICAgPSAxIDw8IDQsICAgLy8vPCBUaGUgbWVzaC1sb2NhbCBhZGRyZXNzIGNoYW5nZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEICAgICAgICAgICAgPSAxIDw8IDUsICAgLy8vPCBSTE9DIHdhcyBhZGRlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCAgICAgICAgICA9IDEgPDwgNiwgICAvLy88IFJMT0Mgd2FzIHJlbW92ZWQKKyAgICBPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQgICAgICAgICAgPSAxIDw8IDcsICAgLy8vPCBQYXJ0aXRpb24gSUQgY2hhbmdlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSICA9IDEgPDwgOCwgICAvLy88IFRocmVhZCBLZXkgU2VxdWVuY2UgY2hhbmdlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEgICAgICAgICAgICAgICA9IDEgPDwgOSwgICAvLy88IFRocmVhZCBOZXR3b3JrIERhdGEgY2hhbmdlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEICAgICAgICAgICA9IDEgPDwgMTAsICAvLy88IENoaWxkIHdhcyBhZGRlZAorICAgIE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX1JFTU9WRUQgICAgICAgICA9IDEgPDwgMTEsICAvLy88IENoaWxkIHdhcyByZW1vdmVkCit9OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiBwcmVmaXguCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SXA2UHJlZml4Cit7CisgICAgb3RJcDZBZGRyZXNzICBtUHJlZml4OyAgLy8vPCBUaGUgSVB2NiBwcmVmaXguCisgICAgdWludDhfdCAgICAgICBtTGVuZ3RoOyAgLy8vPCBUaGUgSVB2NiBwcmVmaXggbGVuZ3RoLgorfSBvdElwNlByZWZpeDsKKworI2RlZmluZSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVCAgMCAgLy8vPCBJbml0aWFsaXplciBmb3Igb3ROZXR3b3JrRGF0YUl0ZXJhdG9yLgorCit0eXBlZGVmIHVpbnQ4X3Qgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yOyAgLy8vPCBVc2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBOZXR3b3JrIERhdGEgaW5mb3JtYXRpb24uCisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIEJvcmRlciBSb3V0ZXIgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcKK3sKKyAgICAvKioKKyAgICAgKiBUaGUgSVB2NiBwcmVmaXguCisgICAgICovCisgICAgb3RJcDZQcmVmaXggbVByZWZpeDsKKworICAgIC8qKgorICAgICAqIEEgMi1iaXQgc2lnbmVkIGludGVnZXIgaW5kaWNhdGluZyByb3V0ZXIgcHJlZmVyZW5jZSBhcyBkZWZpbmVkIGluIFJGQyA0MjkxLgorICAgICAqLworICAgIGludCBtUHJlZmVyZW5jZSA6IDI7CisKKyAgICAvKioKKyAgICAgKiBUUlVFLCBpZiBAcCBtUHJlZml4IGlzIHByZWZlcnJlZC4gIEZBTFNFLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtUHJlZmVycmVkIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIEBwIG1QcmVmaXggc2hvdWxkIGJlIHVzZWQgZm9yIGFkZHJlc3MgYXV0b2NvbmZpZ3VyYXRpb24uICBGQUxTRSwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbVNsYWFjIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIHRoaXMgYm9yZGVyIHJvdXRlciBpcyBhIERIQ1B2NiBBZ2VudCB0aGF0IHN1cHBsaWVzIElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uLiAgRkFMU0UsIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIG1EaGNwIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIHRoaXMgYm9yZGVyIHJvdXRlciBpcyBhIERIQ1B2NiBBZ2VudCB0aGF0IHN1cHBsaWVzIG90aGVyIGNvbmZpZ3VyYXRpb24gZGF0YS4gIEZBTFNFLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtQ29uZmlndXJlIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUsIGlmIHRoaXMgYm9yZGVyIHJvdXRlciBpcyBhIGRlZmF1bHQgcm91dGUgZm9yIEBwIG1QcmVmaXguICBGQUxTRSwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbURlZmF1bHRSb3V0ZSA6IDE7CisKKyAgICAvKioKKyAgICAgKiBUUlVFLCBpZiB0aGlzIHByZWZpeCBpcyBjb25zaWRlcmVkIG9uLW1lc2guICBGQUxTRSwgb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgbU9uTWVzaCA6IDE7CisKKyAgICAvKioKKyAgICAgKiBUUlVFLCBpZiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgY29uc2lkZXJlZCBTdGFibGUgTmV0d29yayBEYXRhLiAgRkFMU0UsIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIG1TdGFibGUgOiAxOworCisgICAgLyoqCisgICAgICogVGhlIEJvcmRlciBBZ2VudCBSbG9jLgorICAgICAqLworICAgIHVpbnQxNl90IG1SbG9jMTY7Cit9IG90Qm9yZGVyUm91dGVyQ29uZmlnOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gRXh0ZXJuYWwgUm91dGUgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RFeHRlcm5hbFJvdXRlQ29uZmlnCit7CisgICAgLyoqCisgICAgICogVGhlIHByZWZpeCBmb3IgdGhlIG9mZi1tZXNoIHJvdXRlLgorICAgICAqLworICAgIG90SXA2UHJlZml4IG1QcmVmaXg7CisKKyAgICAvKioKKyAgICAgKiBBIDItYml0IHNpZ25lZCBpbnRlZ2VyIGluZGljYXRpbmcgcm91dGVyIHByZWZlcmVuY2UgYXMgZGVmaW5lZCBpbiBSRkMgNDI5MS4KKyAgICAgKi8KKyAgICBpbnQgbVByZWZlcmVuY2UgOiAyOworCisgICAgLyoqCisgICAgICogVFJVRSwgaWYgdGhpcyBjb25maWd1cmF0aW9uIGlzIGNvbnNpZGVyZWQgU3RhYmxlIE5ldHdvcmsgRGF0YS4gIEZBTFNFLCBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBtU3RhYmxlIDogMTsKKworICAgIC8qKgorICAgICAqIFRSVUUgaWYgdGhlIGV4dGVybmFsIHJvdXRlIGVudHJ5J3MgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UgaXRzZWxmIChpLmUuLCB0aGUgcm91dGUgd2FzIGFkZGVkIGVhcmxpZXIgYnkgdGhpcworICAgICAqIGRldmljZSkuIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIGFkZGluZyBhbiBleHRlcm5hbCByb3V0ZS4gRm9yIGFueSBhZGRlZCByb3V0ZSB0aGUgbmV4dCBob3AgaXMgdGhpcyBkZXZpY2UuCisgICAgICovCisgICAgYm9vbCBtTmV4dEhvcElzVGhpc0RldmljZSA6IDE7CisKK30gb3RFeHRlcm5hbFJvdXRlQ29uZmlnOworCisvKioKKyAqIERlZmluZXMgdmFsaWQgdmFsdWVzIGZvciBtZW1iZXIgbVByZWZlcmVuY2UgaW4gb3RFeHRlcm5hbFJvdXRlQ29uZmlnIGFuZCBvdEJvcmRlclJvdXRlckNvbmZpZy4KKyAqLwordHlwZWRlZiBlbnVtIG90Um91dGVQcmVmZXJlbmNlCit7CisgICAgT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1cgID0gLTEsICAvLy88IExvdyByb3V0ZSBwcmVmZXJlbmNlLgorICAgIE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEICA9IDAsICAgLy8vPCBNZWRpdW0gcm91dGUgcHJlZmVyZW5jZS4KKyAgICBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0ggPSAxLCAgIC8vLzwgSGlnaCByb3V0ZSBwcmVmZXJlbmNlLgorfSBvdFJvdXRlUHJlZmVyZW5jZTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgd2hpdGVsaXN0IGVudHJ5LgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RNYWNXaGl0ZWxpc3RFbnRyeQoreworICAgIG90RXh0QWRkcmVzcyBtRXh0QWRkcmVzczsgICAgICAgLy8vPCBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MKKyAgICBpbnQ4X3QgICAgICAgbVJzc2k7ICAgICAgICAgICAgIC8vLzwgUlNTSSB2YWx1ZQorICAgIGJvb2wgICAgICAgICBtVmFsaWQgOiAxOyAgICAgICAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHdoaXRlbGlzdCBlbnRyeSBpcyB2YWxpZAorICAgIGJvb2wgICAgICAgICBtRml4ZWRSc3NpIDogMTsgICAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFJTU0kgdmFsdWUgaXMgZml4ZWQuCit9IG90TWFjV2hpdGVsaXN0RW50cnk7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGJsYWNrbGlzdCBlbnRyeS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TWFjQmxhY2tsaXN0RW50cnkKK3sKKyAgICBvdEV4dEFkZHJlc3MgbUV4dEFkZHJlc3M7ICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgYm9vbCAgICAgICAgIG1WYWxpZDsgICAgICAgICAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxhY2tsaXN0IGVudHJ5IGlzIHZhbGlkCit9IG90TWFjQmxhY2tsaXN0RW50cnk7CisKKy8qKgorICogUmVwcmVzZW50cyBhIFRocmVhZCBkZXZpY2Ugcm9sZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQgPSAwLCAgLy8vPCBUaGUgVGhyZWFkIHN0YWNrIGlzIGRpc2FibGVkLgorICAgIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEID0gMSwgIC8vLzwgTm90IGN1cnJlbnRseSBwYXJ0aWNpcGF0aW5nIGluIGEgVGhyZWFkIG5ldHdvcmsvcGFydGl0aW9uLgorICAgIE9UX0RFVklDRV9ST0xFX0NISUxEICAgID0gMiwgIC8vLzwgVGhlIFRocmVhZCBDaGlsZCByb2xlLgorICAgIE9UX0RFVklDRV9ST0xFX1JPVVRFUiAgID0gMywgIC8vLzwgVGhlIFRocmVhZCBSb3V0ZXIgcm9sZS4KKyAgICBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgICA9IDQsICAvLy88IFRoZSBUaHJlYWQgTGVhZGVyIHJvbGUuCit9IG90RGV2aWNlUm9sZTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZvciBhIG5laWdoYm9yaW5nIFRocmVhZCBub2RlCisgKgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG90RXh0QWRkcmVzcyAgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgbUFnZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lIGxhc3QgaGVhcmQKKyAgICB1aW50MTZfdCAgICAgICBtUmxvYzE2OyAgICAgICAgICAgICAgICAvLy88IFJMT0MxNgorICAgIHVpbnQzMl90ICAgICAgIG1MaW5rRnJhbWVDb3VudGVyOyAgICAgIC8vLzwgTGluayBGcmFtZSBDb3VudGVyCisgICAgdWludDMyX3QgICAgICAgbU1sZUZyYW1lQ291bnRlcjsgICAgICAgLy8vPCBNTEUgRnJhbWUgQ291bnRlcgorICAgIHVpbnQ4X3QgICAgICAgIG1MaW5rUXVhbGl0eUluOyAgICAgICAgIC8vLzwgTGluayBRdWFsaXR5IEluCisgICAgaW50OF90ICAgICAgICAgbUF2ZXJhZ2VSc3NpOyAgICAgICAgICAgLy8vPCBBdmVyYWdlIFJTU0kKKyAgICBpbnQ4X3QgICAgICAgICBtTGFzdFJzc2k7ICAgICAgICAgICAgICAvLy88IExhc3Qgb2JzZXJ2ZWQgUlNTSQorICAgIGJvb2wgICAgICAgICAgIG1SeE9uV2hlbklkbGUgOiAxOyAgICAgIC8vLzwgcngtb24td2hlbi1pZGxlCisgICAgYm9vbCAgICAgICAgICAgbVNlY3VyZURhdGFSZXF1ZXN0IDogMTsgLy8vPCBTZWN1cmUgRGF0YSBSZXF1ZXN0cworICAgIGJvb2wgICAgICAgICAgIG1GdWxsRnVuY3Rpb24gOiAxOyAgICAgIC8vLzwgRnVsbCBGdW5jdGlvbiBEZXZpY2UKKyAgICBib29sICAgICAgICAgICBtRnVsbE5ldHdvcmtEYXRhIDogMTsgICAvLy88IEZ1bGwgTmV0d29yayBEYXRhCisgICAgYm9vbCAgICAgICAgICAgbUlzQ2hpbGQgOiAxOyAgICAgICAgICAgLy8vPCBJcyB0aGUgbmVpZ2hib3IgYSBjaGlsZAorfSBvdE5laWdoYm9ySW5mbzsKKworI2RlZmluZSBPVF9ORUlHSEJPUl9JTkZPX0lURVJBVE9SX0lOSVQgIDAgIC8vLzwgSW5pdGlhbGl6ZXIgZm9yIG90TmVpZ2hib3JJbmZvSXRlcmF0b3IuCisKK3R5cGVkZWYgaW50MTZfdCBvdE5laWdoYm9ySW5mb0l0ZXJhdG9yOyAgICAvLy88IFVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIG5laWdoYm9yIHRhYmxlLgorCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGEgVGhyZWFkIENoaWxkCisgKgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG90RXh0QWRkcmVzcyAgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgbVRpbWVvdXQ7ICAgICAgICAgICAgICAgLy8vPCBUaW1lb3V0CisgICAgdWludDMyX3QgICAgICAgbUFnZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lIGxhc3QgaGVhcmQKKyAgICB1aW50MTZfdCAgICAgICBtUmxvYzE2OyAgICAgICAgICAgICAgICAvLy88IFJMT0MxNgorICAgIHVpbnQxNl90ICAgICAgIG1DaGlsZElkOyAgICAgICAgICAgICAgIC8vLzwgQ2hpbGQgSUQKKyAgICB1aW50OF90ICAgICAgICBtTmV0d29ya0RhdGFWZXJzaW9uOyAgICAvLy88IE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgdWludDhfdCAgICAgICAgbUxpbmtRdWFsaXR5SW47ICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW4KKyAgICBpbnQ4X3QgICAgICAgICBtQXZlcmFnZVJzc2k7ICAgICAgICAgICAvLy88IEF2ZXJhZ2UgUlNTSQorICAgIGludDhfdCAgICAgICAgIG1MYXN0UnNzaTsgICAgICAgICAgICAgIC8vLzwgTGFzdCBvYnNlcnZlZCBSU1NJCisgICAgYm9vbCAgICAgICAgICAgbVJ4T25XaGVuSWRsZSA6IDE7ICAgICAgLy8vPCByeC1vbi13aGVuLWlkbGUKKyAgICBib29sICAgICAgICAgICBtU2VjdXJlRGF0YVJlcXVlc3QgOiAxOyAvLy88IFNlY3VyZSBEYXRhIFJlcXVlc3RzCisgICAgYm9vbCAgICAgICAgICAgbUZ1bGxGdW5jdGlvbiA6IDE7ICAgICAgLy8vPCBGdWxsIEZ1bmN0aW9uIERldmljZQorICAgIGJvb2wgICAgICAgICAgIG1GdWxsTmV0d29ya0RhdGEgOiAxOyAgIC8vLzwgRnVsbCBOZXR3b3JrIERhdGEKK30gb3RDaGlsZEluZm87CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyCisgKgorICovCitPVF9UT09MX0FMSUdOKDQpCit0eXBlZGVmIHN0cnVjdAoreworICAgIG90RXh0QWRkcmVzcyAgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgIC8vLzwgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDE2X3QgICAgICAgbVJsb2MxNjsgICAgICAgICAgICAgICAgLy8vPCBSTE9DMTYKKyAgICB1aW50OF90ICAgICAgICBtUm91dGVySWQ7ICAgICAgICAgICAgICAvLy88IFJvdXRlciBJRAorICAgIHVpbnQ4X3QgICAgICAgIG1OZXh0SG9wOyAgICAgICAgICAgICAgIC8vLzwgTmV4dCBob3AgdG8gcm91dGVyCisgICAgdWludDhfdCAgICAgICAgbVBhdGhDb3N0OyAgICAgICAgICAgICAgLy8vPCBQYXRoIGNvc3QgdG8gcm91dGVyCisgICAgdWludDhfdCAgICAgICAgbUxpbmtRdWFsaXR5SW47ICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW4KKyAgICB1aW50OF90ICAgICAgICBtTGlua1F1YWxpdHlPdXQ7ICAgICAgICAvLy88IExpbmsgUXVhbGl0eSBPdXQKKyAgICB1aW50OF90ICAgICAgICBtQWdlOyAgICAgICAgICAgICAgICAgICAvLy88IFRpbWUgbGFzdCBoZWFyZAorICAgIGJvb2wgICAgICAgICAgIG1BbGxvY2F0ZWQgOiAxOyAgICAgICAgIC8vLzwgUm91dGVyIElEIGFsbG9jYXRlZCBvciBub3QKKyAgICBib29sICAgICAgICAgICBtTGlua0VzdGFibGlzaGVkIDogMTsgICAvLy88IExpbmsgZXN0YWJsaXNoZWQgd2l0aCBSb3V0ZXIgSUQgb3Igbm90Cit9IG90Um91dGVySW5mbzsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIEVJRCBjYWNoZSBlbnRyeS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90RWlkQ2FjaGVFbnRyeQoreworICAgIG90SXA2QWRkcmVzcyAgICBtVGFyZ2V0OyAgICAgICAgICAvLy88IFRhcmdldAorICAgIG90U2hvcnRBZGRyZXNzICBtUmxvYzE2OyAgICAgICAgICAvLy88IFJMT0MxNgorICAgIGJvb2wgICAgICAgICAgICBtVmFsaWQgOiAxOyAgICAgICAvLy88IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgZW50cnkgaXMgdmFsaWQKK30gb3RFaWRDYWNoZUVudHJ5OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIFRocmVhZCBMZWFkZXIgRGF0YS4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TGVhZGVyRGF0YQoreworICAgIHVpbnQzMl90IG1QYXJ0aXRpb25JZDsgICAgICAgICAgICAvLy88IFBhcnRpdGlvbiBJRAorICAgIHVpbnQ4X3QgbVdlaWdodGluZzsgICAgICAgICAgICAgICAvLy88IExlYWRlciBXZWlnaHQKKyAgICB1aW50OF90IG1EYXRhVmVyc2lvbjsgICAgICAgICAgICAgLy8vPCBGdWxsIE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgdWludDhfdCBtU3RhYmxlRGF0YVZlcnNpb247ICAgICAgIC8vLzwgU3RhYmxlIE5ldHdvcmsgRGF0YSBWZXJzaW9uCisgICAgdWludDhfdCBtTGVhZGVyUm91dGVySWQ7ICAgICAgICAgIC8vLzwgTGVhZGVyIFJvdXRlciBJRAorfSBvdExlYWRlckRhdGE7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgTUFDIGxheWVyIGNvdW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBvdE1hY0NvdW50ZXJzCit7CisgICAgdWludDMyX3QgbVR4VG90YWw7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIHRvdGFsIG51bWJlciBvZiB0cmFuc21pc3Npb25zLgorICAgIHVpbnQzMl90IG1UeFVuaWNhc3Q7ICAgICAgICAgICAgICAvLy88IFRoZSB0b3RhbCBudW1iZXIgb2YgdW5pY2FzdCB0cmFuc21pc3Npb25zLgorICAgIHVpbnQzMl90IG1UeEJyb2FkY2FzdDsgICAgICAgICAgICAvLy88IFRoZSB0b3RhbCBudW1iZXIgb2YgYnJvYWRjYXN0IHRyYW5zbWlzc2lvbnMuCisgICAgdWludDMyX3QgbVR4QWNrUmVxdWVzdGVkOyAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHdpdGggYWNrIHJlcXVlc3QuCisgICAgdWludDMyX3QgbVR4QWNrZWQ7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHRoYXQgd2VyZSBhY2tlZC4KKyAgICB1aW50MzJfdCBtVHhOb0Fja1JlcXVlc3RlZDsgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgd2l0aG91dCBhY2sgcmVxdWVzdC4KKyAgICB1aW50MzJfdCBtVHhEYXRhOyAgICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGRhdGEuCisgICAgdWludDMyX3QgbVR4RGF0YVBvbGw7ICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBkYXRhIHBvbGwuCisgICAgdWludDMyX3QgbVR4QmVhY29uOyAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBiZWFjb24uCisgICAgdWludDMyX3QgbVR4QmVhY29uUmVxdWVzdDsgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBiZWFjb24gcmVxdWVzdC4KKyAgICB1aW50MzJfdCBtVHhPdGhlcjsgICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIG90aGVyIHR5cGVzIG9mIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtVHhSZXRyeTsgICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHRpbWVzLgorICAgIHVpbnQzMl90IG1UeEVyckNjYTsgICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgQ0NBIGZhaWx1cmUgdGltZXMuCisgICAgdWludDMyX3QgbVR4RXJyQWJvcnQ7ICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBmcmFtZSB0cmFuc21pc3Npb24gZmFpbHVyZXMgZHVlIHRvIGFib3J0IGVycm9yLgorICAgIHVpbnQzMl90IG1SeFRvdGFsOyAgICAgICAgICAgICAgICAvLy88IFRoZSB0b3RhbCBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cy4KKyAgICB1aW50MzJfdCBtUnhVbmljYXN0OyAgICAgICAgICAgICAgLy8vPCBUaGUgdG90YWwgbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyByZWNlaXZlZC4KKyAgICB1aW50MzJfdCBtUnhCcm9hZGNhc3Q7ICAgICAgICAgICAgLy8vPCBUaGUgdG90YWwgbnVtYmVyIG9mIGJyb2FkY2FzdCBwYWNrZXRzIHJlY2VpdmVkLgorICAgIHVpbnQzMl90IG1SeERhdGE7ICAgICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZGF0YS4KKyAgICB1aW50MzJfdCBtUnhEYXRhUG9sbDsgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEgcG9sbC4KKyAgICB1aW50MzJfdCBtUnhCZWFjb247ICAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJlYWNvbi4KKyAgICB1aW50MzJfdCBtUnhCZWFjb25SZXF1ZXN0OyAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJlYWNvbiByZXF1ZXN0LgorICAgIHVpbnQzMl90IG1SeE90aGVyOyAgICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgb3RoZXIgdHlwZXMgb2YgZnJhbWVzLgorICAgIHVpbnQzMl90IG1SeFdoaXRlbGlzdEZpbHRlcmVkOyAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBmaWx0ZXJlZCBieSB3aGl0ZWxpc3QuCisgICAgdWludDMyX3QgbVJ4RGVzdEFkZHJGaWx0ZXJlZDsgICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIGZpbHRlcmVkIGJ5IGRlc3RpbmF0aW9uIGNoZWNrLgorICAgIHVpbnQzMl90IG1SeER1cGxpY2F0ZWQ7ICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZHVwbGljYXRlZCBwYWNrZXRzLgorICAgIHVpbnQzMl90IG1SeEVyck5vRnJhbWU7ICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB0aGF0IGRvIG5vdCBjb250YWluIGNvbnRlbnRzLgorICAgIHVpbnQzMl90IG1SeEVyclVua25vd25OZWlnaGJvcjsgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIHVua25vd24gbmVpZ2hib3IuCisgICAgdWludDMyX3QgbVJ4RXJySW52YWxpZFNyY0FkZHI7ICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdob3NlIHNvdXJjZSBhZGRyZXNzIGlzIGludmFsaWQuCisgICAgdWludDMyX3QgbVJ4RXJyU2VjOyAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdpdGggc2VjdXJpdHkgZXJyb3IuCisgICAgdWludDMyX3QgbVJ4RXJyRmNzOyAgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdpdGggRkNTIGVycm9yLgorICAgIHVpbnQzMl90IG1SeEVyck90aGVyOyAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB3aXRoIG90aGVyIGVycm9yLgorfSBvdE1hY0NvdW50ZXJzOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIElQIGxldmVsIGNvdW50ZXJzCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SXBDb3VudGVycworeworICAgIHVpbnQzMl90IG1UeFN1Y2Nlc3M7ICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgSVB2NiBwYWNrZXRzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4KKyAgICB1aW50MzJfdCBtUnhTdWNjZXNzOyAgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIElQdjYgcGFja2V0cyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQuCisgICAgdWludDMyX3QgbVR4RmFpbHVyZTsgICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBJUHY2IHBhY2tldHMgZmFpbGVkIHRvIHRyYW5zbWl0LgorICAgIHVpbnQzMl90IG1SeEZhaWx1cmU7ICAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgSVB2NiBwYWNrZXRzIGZhaWxlZCB0byByZWNlaXZlLgorfSBvdElwQ291bnRlcnM7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgbWVzc2FnZSBidWZmZXIgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IG90QnVmZmVySW5mbworeworICAgIHVpbnQxNl90IG1Ub3RhbEJ1ZmZlcnM7ICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcG9vbC4KKyAgICB1aW50MTZfdCBtRnJlZUJ1ZmZlcnM7ICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGZyZWUgbWVzc2FnZSBidWZmZXJzLgorICAgIHVpbnQxNl90IG02bG9TZW5kTWVzc2FnZXM7ICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIDZsbyBzZW5kIHF1ZXVlLgorICAgIHVpbnQxNl90IG02bG9TZW5kQnVmZmVyczsgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgNmxvIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbTZsb1JlYXNzZW1ibHlNZXNzYWdlczsgIC8vLzwgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgNkxvV1BBTiByZWFzc2VtYmx5IHF1ZXVlLgorICAgIHVpbnQxNl90IG02bG9SZWFzc2VtYmx5QnVmZmVyczsgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgNkxvV1BBTiByZWFzc2VtYmx5IHF1ZXVlLgorICAgIHVpbnQxNl90IG1JcDZNZXNzYWdlczsgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIElQdjYgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtSXA2QnVmZmVyczsgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIElQdjYgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtTXBsTWVzc2FnZXM7ICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBNUEwgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtTXBsQnVmZmVyczsgICAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIE1QTCBzZW5kIHF1ZXVlLgorICAgIHVpbnQxNl90IG1NbGVNZXNzYWdlczsgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIE1MRSBzZW5kIHF1ZXVlLgorICAgIHVpbnQxNl90IG1NbGVCdWZmZXJzOyAgICAgICAgICAgICAvLy88IFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgTUxFIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUFycE1lc3NhZ2VzOyAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgQVJQIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUFycEJ1ZmZlcnM7ICAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBBUlAgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtQ29hcE1lc3NhZ2VzOyAgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBDb0FQIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUNvYXBCdWZmZXJzOyAgICAgICAgICAgIC8vLzwgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBDb0FQIHNlbmQgcXVldWUuCisgICAgdWludDE2X3QgbUNvYXBTZWN1cmVNZXNzYWdlczsgICAgIC8vLzwgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgQ29BUCBzZWN1cmUgc2VuZCBxdWV1ZS4KKyAgICB1aW50MTZfdCBtQ29hcFNlY3VyZUJ1ZmZlcnM7ICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIENvQVAgc2VjdXJlIHNlbmQgcXVldWUuCit9IG90QnVmZmVySW5mbzsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElQdjYgbmV0d29yayBpbnRlcmZhY2UgdW5pY2FzdCBhZGRyZXNzLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3ROZXRpZkFkZHJlc3MKK3sKKyAgICBvdElwNkFkZHJlc3MgICAgICAgICAgIG1BZGRyZXNzOyAgICAgICAgICAgICAgICAgLy8vPCBUaGUgSVB2NiB1bmljYXN0IGFkZHJlc3MuCisgICAgdWludDhfdCAgICAgICAgICAgICAgICBtUHJlZml4TGVuZ3RoOyAgICAgICAgICAgIC8vLzwgVGhlIFByZWZpeCBsZW5ndGguCisgICAgYm9vbCAgICAgICAgICAgICAgICAgICBtUHJlZmVycmVkIDogMTsgICAgICAgICAgIC8vLzwgVFJVRSBpZiB0aGUgYWRkcmVzcyBpcyBwcmVmZXJyZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICBib29sICAgICAgICAgICAgICAgICAgIG1WYWxpZCA6IDE7ICAgICAgICAgICAgICAgLy8vPCBUUlVFIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgICBtU2NvcGVPdmVycmlkZVZhbGlkIDogMTsgIC8vLzwgVFJVRSBpZiB0aGUgbVNjb3BlT3ZlcnJpZGUgdmFsdWUgaXMgdmFsaWQsIEZBTFNFIG90aGV3cmlzZS4KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIG1TY29wZU92ZXJyaWRlIDogNDsgICAgICAgLy8vPCBUaGUgSVB2NiBzY29wZSBvZiB0aGlzIGFkZHJlc3MuCisgICAgYm9vbCAgICAgICAgICAgICAgICAgICBtUmxvYyA6IDE7ICAgICAgICAgICAgICAgIC8vLzwgVFJVRSBpZiB0aGUgYWRkcmVzcyBpcyBhbiBSTE9DLCBGQUxTRSBvdGhlcndpc2UuCisgICAgc3RydWN0IG90TmV0aWZBZGRyZXNzICptTmV4dDsgICAgICAgICAgICAgICAgICAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IG5ldHdvcmsgaW50ZXJmYWNlIGFkZHJlc3MuCit9IG90TmV0aWZBZGRyZXNzOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiBuZXR3b3JrIGludGVyZmFjZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IG90TmV0aWZNdWx0aWNhc3RBZGRyZXNzCit7CisgICAgb3RJcDZBZGRyZXNzICAgICAgICAgICAgICAgICAgICBtQWRkcmVzczsgICAvLy88IFRoZSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzLgorICAgIHN0cnVjdCBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqbU5leHQ7ICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbmV0d29yayBpbnRlcmZhY2UgbXVsdGljYXN0IGFkZHJlc3MuCit9IG90TmV0aWZNdWx0aWNhc3RBZGRyZXNzOworCisvKioKKyAqIFRoaXMgZW51bWVyYXRpb24gcmVwcmVzZW50cyB0aGUgbGlzdCBvZiBhbGxvd2FibGUgdmFsdWVzIGZvciBhbiBJbnRlcmZhY2VJZC4KKyAqLwordHlwZWRlZiBlbnVtIG90TmV0aWZJbnRlcmZhY2VJZAoreworICAgIE9UX05FVElGX0lOVEVSRkFDRV9JRF9USFJFQUQgPSAxLCAgLy8vPCBUaGUgVGhyZWFkIE5ldHdvcmsgaW50ZXJmYWNlIElELgorfSBvdE5ldGlmSW50ZXJmYWNlSWQ7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBkYXRhIHVzZWQgYnkgU2VtYW50aWNhbGx5IE9wYXF1ZSBJSUQgR2VuZXJhdG9yLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90ICAgICAgICAqbUludGVyZmFjZUlkOyAgICAgICAgLy8vPCBTdHJpbmcgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIGludGVyZmFjZSBJRC4gTGlrZSAiZXRoMCIgb3IgIndsYW4wIi4KKyAgICB1aW50OF90ICAgICAgICAgbUludGVyZmFjZUlkTGVuZ3RoOyAgLy8vPCBMZW5ndGggb2YgaW50ZXJmYWNlIElEIHN0cmluZy4KKworICAgIHVpbnQ4X3QgICAgICAgICptTmV0d29ya0lkOyAgICAgICAgICAvLy88IE5ldHdvcmsgSUQgKG9yIG5hbWUpLiBDYW4gYmUgbnVsbCBpZiBtTmV0d29ya0lkTGVuZ3RoIGlzIDAuCisgICAgdWludDhfdCAgICAgICAgIG1OZXR3b3JrSWRMZW5ndGg7ICAgIC8vLzwgTGVuZ3RoIG9mIE5ldHdvcmsgSUQgc3RyaW5nLgorCisgICAgdWludDhfdCAgICAgICAgIG1EYWRDb3VudGVyOyAgICAgICAgIC8vLzwgRHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIGNvdW50ZXIuCisKKyAgICB1aW50OF90ICAgICAgICAqbVNlY3JldEtleTsgICAgICAgICAgLy8vPCBTZWNyZXQga2V5IHVzZWQgdG8gY3JlYXRlIElJRC4gQ2Fubm90IGJlIG51bGwuCisgICAgdWludDE2X3QgICAgICAgIG1TZWNyZXRLZXlMZW5ndGg7ICAgIC8vLzwgU2VjcmV0IGtleSBsZW5ndGggaW4gYnl0ZXMuIFNob3VsZCBiZSBhdCBsZWFzdCAxNiBieXRlcyA9PSAxMjggYml0cy4KK30gb3RTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3JEYXRhOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiBzb2NrZXQgYWRkcmVzcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RTb2NrQWRkcgoreworICAgIG90SXA2QWRkcmVzcyBtQWRkcmVzczsgIC8vLzwgQW4gSVB2NiBhZGRyZXNzLgorICAgIHVpbnQxNl90ICAgICBtUG9ydDsgICAgIC8vLzwgQSB0cmFuc3BvcnQtbGF5ZXIgcG9ydC4KKyAgICBpbnQ4X3QgICAgICAgbVNjb3BlSWQ7ICAvLy88IEFuIElQdjYgc2NvcGUgaWRlbnRpZmllci4KK30gb3RTb2NrQWRkcjsKKworI2lmZGVmIE9URExMCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB0byBub3RpZnkgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgT3BlblRocmVhZCBkZXZpY2VzLgorICoKKyAqIEBwYXJhbVtpbl0gIGFBZGRlZCAgICAgICBBIGZsYWcgaW5kaWNhdGluZyBpZiB0aGUgZGV2aWNlIHdhcyBhZGRlZCBvciByZW1vdmVkLgorICogQHBhcmFtW2luXSAgYURldmljZUd1aWQgIEEgR1VJRCBpbmRpY2F0aW5nIHdoaWNoIGRldmljZSBzdGF0ZSBjaGFuZ2VkLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICoKKyAqLwordHlwZWRlZiB2b2lkIChPVENBTEwgKm90RGV2aWNlQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKShib29sIGFBZGRlZCwgY29uc3QgR1VJRCAqYURldmljZUd1aWQsIHZvaWQgKmFDb250ZXh0KTsKKworI2VuZGlmIC8vIE9URExMCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9UWVBFU19IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVudGhyZWFkL3VkcC5oIGIvaW5jbHVkZS9vcGVudGhyZWFkL3VkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGM4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL29wZW50aHJlYWQvdWRwLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBPcGVuVGhyZWFkIFVEUCBBUEkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX1VEUF9IXworI2RlZmluZSBPUEVOVEhSRUFEX1VEUF9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9tZXNzYWdlLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGFkZHRvZ3JvdXAgYXBpLXVkcAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb250cm9sIFVEUCBjb21tdW5pY2F0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjYWxsYmFjayBhbGxvd3MgT3BlblRocmVhZCB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIG9mIGEgcmVjZWl2ZWQgVURQIG1lc3NhZ2UuCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpvdFVkcFJlY2VpdmUpKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBVRFAgc29ja2V0LgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb3RVZHBTb2NrZXQKK3sKKyAgICBvdFNvY2tBZGRyICAgICAgICAgICBtU29ja05hbWU7ICAvLy88IFRoZSBsb2NhbCBJUHY2IHNvY2tldCBhZGRyZXNzLgorICAgIG90U29ja0FkZHIgICAgICAgICAgIG1QZWVyTmFtZTsgIC8vLzwgVGhlIHBlZXIgSVB2NiBzb2NrZXQgYWRkcmVzcy4KKyAgICBvdFVkcFJlY2VpdmUgICAgICAgICBtSGFuZGxlcjsgICAvLy88IEEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgYXBwbGljYXRpb24gY2FsbGJhY2suCisgICAgdm9pZCAgICAgICAgICAgICAgICAqbUNvbnRleHQ7ICAgLy8vPCBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICB2b2lkICAgICAgICAgICAgICAgICptVHJhbnNwb3J0OyAvLy88IEEgcG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IG9iamVjdCAoaW50ZXJuYWwgdXNlIG9ubHkpLgorICAgIHN0cnVjdCBvdFVkcFNvY2tldCAgKm1OZXh0OyAgICAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IFVEUCBzb2NrZXQgKGludGVybmFsIHVzZSBvbmx5KS4KK30gb3RVZHBTb2NrZXQ7CisKKy8qKgorICogQWxsb2NhdGUgYSBuZXcgbWVzc2FnZSBidWZmZXIgZm9yIHNlbmRpbmcgYSBVRFAgbWVzc2FnZS4KKyAqCisgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhTGlua1NlY3VyaXR5RW5hYmxlZCAgVFJVRSBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgc2VjdXJlZCBhdCBMYXllciAyLgorICoKKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBidWZmZXIgb3IgTlVMTCBpZiBubyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBAc2Egb3RGcmVlTWVzc2FnZQorICoKKyAqLworb3RNZXNzYWdlICpvdFVkcE5ld01lc3NhZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFMaW5rU2VjdXJpdHlFbmFibGVkKTsKKworLyoqCisgKiBPcGVuIGEgVURQL0lQdjYgc29ja2V0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgKiBAcGFyYW1baW5dICBhU29ja2V0ICAgIEEgcG9pbnRlciB0byBhIFVEUCBzb2NrZXQgc3RydWN0dXJlLgorICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICBBIHBvaW50ZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgb3BlbmVkIHRoZSBzb2NrZXQuCisgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgR2l2ZW4gc29ja2V0IHN0cnVjdHVyZSB3YXMgYWxyZWFkeSBvcGVuZWQuCisgKgorICogQHNhIG90VWRwTmV3TWVzc2FnZQorICogQHNhIG90VWRwQ2xvc2UKKyAqIEBzYSBvdFVkcEJpbmQKKyAqIEBzYSBvdFVkcENvbm5lY3QKKyAqIEBzYSBvdFVkcFNlbmQKKyAqCisgKi8KK290RXJyb3Igb3RVZHBPcGVuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RVZHBTb2NrZXQgKmFTb2NrZXQsIG90VWRwUmVjZWl2ZSBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KTsKKworLyoqCisgKiBDbG9zZSBhIFVEUC9JUHY2IHNvY2tldC4KKyAqCisgKiBAcGFyYW1baW5dICBhU29ja2V0ICBBIHBvaW50ZXIgdG8gYSBVRFAgc29ja2V0IHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBjbG9zZWQgdGhlIHNvY2tldC4KKyAqCisgKiBAc2Egb3RVZHBOZXdNZXNzYWdlCisgKiBAc2Egb3RVZHBPcGVuCisgKiBAc2Egb3RVZHBCaW5kCisgKiBAc2Egb3RVZHBDb25uZWN0CisgKiBAc2Egb3RVZHBTZW5kCisgKgorICovCitvdEVycm9yIG90VWRwQ2xvc2Uob3RVZHBTb2NrZXQgKmFTb2NrZXQpOworCisvKioKKyAqIEJpbmQgYSBVRFAvSVB2NiBzb2NrZXQuCisgKgorICogQHBhcmFtW2luXSAgYVNvY2tldCAgICBBIHBvaW50ZXIgdG8gYSBVRFAgc29ja2V0IHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFTb2NrTmFtZSAgQSBwb2ludGVyIHRvIGFuIElQdjYgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQmluZCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogQHNhIG90VWRwTmV3TWVzc2FnZQorICogQHNhIG90VWRwT3BlbgorICogQHNhIG90VWRwQ29ubmVjdAorICogQHNhIG90VWRwQ2xvc2UKKyAqIEBzYSBvdFVkcFNlbmQKKyAqCisgKi8KK290RXJyb3Igb3RVZHBCaW5kKG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpOworCisvKioKKyAqIENvbm5lY3QgYSBVRFAvSVB2NiBzb2NrZXQuCisgKgorICogQHBhcmFtW2luXSAgYVNvY2tldCAgICBBIHBvaW50ZXIgdG8gYSBVRFAgc29ja2V0IHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gIGFTb2NrTmFtZSAgQSBwb2ludGVyIHRvIGFuIElQdjYgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlLgorICoKKyAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgQ29ubmVjdCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogQHNhIG90VWRwTmV3TWVzc2FnZQorICogQHNhIG90VWRwT3BlbgorICogQHNhIG90VWRwQmluZAorICogQHNhIG90VWRwQ2xvc2UKKyAqIEBzYSBvdFVkcFNlbmQKKyAqCisgKi8KK290RXJyb3Igb3RVZHBDb25uZWN0KG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpOworCisvKioKKyAqIFNlbmQgYSBVRFAvSVB2NiBtZXNzYWdlLgorICoKKyAqIEBwYXJhbVtpbl0gIGFTb2NrZXQgICAgICAgQSBwb2ludGVyIHRvIGEgVURQIHNvY2tldCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcG9pbnRlciB0byBhIG1lc3NhZ2UgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHBvaW50ZXIgdG8gYSBtZXNzYWdlIGluZm8gc3RydWN0dXJlLgorICoKKyAqIEBzYSBvdFVkcE5ld01lc3NhZ2UKKyAqIEBzYSBvdFVkcE9wZW4KKyAqIEBzYSBvdFVkcENsb3NlCisgKiBAc2Egb3RVZHBCaW5kCisgKiBAc2Egb3RVZHBDb25uZWN0CisgKiBAc2Egb3RVZHBTZW5kCisgKgorICovCitvdEVycm9yIG90VWRwU2VuZChvdFVkcFNvY2tldCAqYVNvY2tldCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworLyoqCisgKiBAfQorICoKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfVURQX0hfCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyYjU4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY1IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRpYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9DTEkKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGNsaQorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBuY3AKK2VuZGlmCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGRpYWcKK2VuZGlmCisKKyMgQWx3YXlzIHByZXR0eSAoZS5nLiBmb3IgJ21ha2UgcHJldHR5JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK1BSRVRUWV9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBjbGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvc3JjL2NsaS9NYWtlZmlsZS5hbSBiL3NyYy9jbGkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMWU0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNjUgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBsaWJyYXJ5IG9uIHRoZSBmYWNlIG9mIGl0LCBhcHBlYXJzIHRvIGJlIGlkZW50aWNhbAorIyBmb3IgYm90aCB0aGUgTVREIGFuZCBGVEQgdmFyaWVudHMsIGhvd2V2ZXIgLi4uCisjCisjIFRoZSBzb3VyY2UgY29kZSBoZXJlIGluY2x1ZGVzIG51bWVyb3VzIE9wZW5UaHJlYWQgaW50ZXJuYWwgaGVhZGVycy4KKyMgRHVlIHRvIHRoZSAiZG9taW5vLWVmZmVjdCIgb3RoZXIgaW50ZXJuYWwgaGVhZGVycyBhcmUgaW5jbHVkZWQuCisjCisjIEZvciBleGFtcGxlOgorIyAgICAgY2xpLmNwcCBpbmNsdWRlczogCisjICAgICAgICAgICAgc3JjL2NvcmUvb3BlbnRocmVhZC1pbnN0YW5jZS5oCisjIFdoaWNoIEluY2x1ZGVzOgorIyAgICAgICAgICAgIHNyYy9jb3JlL3RoZXJhZC90aHJlYWRfbmV0aWYuaHBwCisjIFdoaWNoIEluY2x1ZGVzOgorIyAgICAgICAgICAgIHNyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmhwcAorIyBXaGljaCBJbmNsdWRlczoKKyMgICAgICAgICAgICBzcmMvY29yZS90aHJlYWRuZXR3b3JrX2RhdGFfbGVhZGVyLmhwcAorIworIyBUaGF0IGhlYWRlciAoYW5kIG90aGVycykgaXMgZWl0aGVyIGFuIE1URCBvciBGVEQgY2xhc3MgZmxhdm9yLgorIworIyBUaGUgRlREIGZsYXZvciBoYXMgbWFueSBwcml2YXRlIGNvbXBvbmVudHMgKGNsYXNzIHZhcmlhYmxlcykuCisjIFRoZSBNVEQgZmxhdm9yIGhhcyBubyBwcml2YXRlIGNvbXBvbmVudHMuCisjCisjIEJvdHRvbSBsaW5lOiBUaGUgQ2xhc3Moc3RydWN0cykgYXJlIHRodXMgZGlmZmVyZW50IGluIHRoZSBkb3duc3RyZWFtIAorIyBsaWJzLiBBdCB0aGlzIGxldmVsIChpbiB0aGUgQ0xJLCBhbmQgbGlrZXdpc2UgaW4gdGhlIE5DUCkgdGhleSBhcmUgCisjIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuCisjCisjIE9SSUdJTkFMTFkgKGhpc3RvcmljYWwgbm90ZSBhYm91dCBob3cgdGhpbmdzIGFyZS93aGVyZSBidWlsdCk6CisjCisjICAgICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIE1URCBhbmQgRlREIHdhcyBhIGRlZmluZS4uICAtRE9QRU5USFJFQURfTVRECisjICAgICBUaGVyZSB3YXMgbm8gIkZURCIgZGVmaW5lLCBpdCBpcy93YXMgYXNzdW1lZCB0aGF0IEZURCBpcyB0aGUgZGVmYXVsdC4KKyMKKyMgICAgIEhpc3RvcmljYWxseSB0aGlzIGxpYnJhcnkgLURPUEVOVEhSRUFEX01URCB3YXMgbm90IGRlZmluZWQvc2V0LgorIyAgICAgKGl0IGlzIHNldCB2aWEgYSBjb21tYW5kbGluZSBkZWZpbmUgaW4gJ2xpYi1vcGVudGhyZWFkJykKKyMKKyMgICAgIFRodXMsIHRoZSBleGlzdGluZyhwcmV2aW91cykgd2F5ICpUSElTKiBsaWJyYXJ5IHdhcyBjb21waWxlZCBpcworIyAgICAgZXhhY3RseSB0aGUgRlREIHBhdGguIE1lYW5pbmcgdGhlICJjbGkiIGxpYnJhcnkgYWx3YXlzIHNlZXMKKyMgICAgIHRoZSBGVEQgdmFyaWVudHMgb2YgdmFyaW91cyBoZWFkZXJzL2NsYXNzZXMuCisjCisjICAgICBUaGUgc2FtZSBpcyB0cnVlIG9mIHRoZSAibmNwIiBsaWJyYXJ5LgorIworIyBIT1dFVkVSIHRoZXJlIGFyZSB0d28gdmFyaWVudHMgb2YgdGhlIENMSSBhcHBsaWNhdGlvbiwgQ0xJLU1URAorIyBhbmQgQ0xJLUZURCAoYW5kIGxpa2V3aXNlLCB0d28gdmFyaWVudHMgb2YgdGhlIG5jcCBhcHBsaWNhdGlvbikKKyMgVGhlc2UgYXBwbGljYXRpb25zIGxpbmsgYWdhaW5zdCB0d28gZGlmZmVyZW50IE9wZW5UaHJlYWQgbGlicmFyaWVzLgorIworIyBXaGljaCBmbGF2b3IsIHlvdSBnZXQgZGVwZW5kcyB1cG9uIHdoaWNoIGxpYnJhcnk6ICJtdGQiIG9yICJmdGQiIGlzIGxpbmtlZC4KKyMKKyMgV2hpY2ggb24gdGhlIHN1cmZhY2UgYXBwZWFyIHRvIGxpbmsgZmluZSBhZ2FpbnN0IHRoZSBNVEQvRlREIGxpYnJhcnkuCisjCisjIEluIHRoaXMgZGVzY3JpcHRpb24vZXhhbXBsZSB3ZSBmb2N1cyBvbiB0aGUgICJuZXdvcmtfZGF0YV9sZWFkZXIiCisjIGhlYWRlciBmaWxlLiBUaGUgRlREIHZhcmllbnQgaGFzIG1hbnkgcHJpdmF0ZSB2YXJpYWJsZXMsIGZ1bmN0aW9ucworIyBhbmQgb3RoZXIgdGhpbmdzIG9mICJGVEQiIChpZTogZnVsbCkgaW1wbGVtZW50YXRpb24gaXRlbXMuCisjCisjIEluIGNvbnRyYXN0IHRoZSBNVEQgaXMgZ2VuZXJhbHkgc3R1YmJlZCBvdXQgd2l0aCBzdHViLWZ1bmN0aW9ucworIyBpbmxpbmVkIGluIHRoZSBoZWFkZXIgdGhhdCByZXR1cm4gImVycm9yIG5vdCBpbXBsZW1lbnRlZCIgb3Igc2ltaWxhci4KKyMKKyMgVGh1cyBpdCB3b3Jrcy4uLiBoZXJlIC4uLiBXaXRoIHRoaXMgZmlsZSBhbmQgdGhpcyBleGFtcGxlLgorIworIyBUaGUgdW5rbm93bjoKKyMgICAgV2hhdCBhYm91dCB0aGUgb3RoZXIgZmlsZXM/CisjICAgIFdoYXQgYWJvdXQgdGhlIG90aGVyIGMrKyBjbGFzc2VzPworIyAgICBJcyB0aGlzIHRydWUgYWx3YXlzPyBJcyB0aGlzIHJvYnVzdD8KKyMgICAgT3IgaXMgdGhlcmUgYSBoaWRkZW4gImdvdC15YSIgdGhhdCB3aWxsIHNuYWcgdGhlIG5leHQgcGVyc29uPworIworIyBUaGlzIGFsc28gZmFpbHMgc3RhdGljIGFuYWxpc3lzLCBjaGVja3MuCisjICAgIEFwcGxpY2F0aW9uIC0gd2l0aCBNVEQgdnJzIEZURCBjbGFzcy4KKyMgICAgTGlicmFyeSAjMSAgKGNsaS1saWIpIHdpdGggRlREIHNlbGVjdGVkLgorIyAgICBMaWJyYXJ5ICMyICAob3BlbnRocmVhZCkgd2l0aCB0d28gZGlmZmVyZW50IGNsYXNzIGZsYXZvcnMuCisjCisjIFRoZSBzdGF0aWMgYW5hbGlzeXMgdG9vbHMgd2lsbCBzYXk6ICJOT1BFIiBkaWZmZXJlbnQgY2xhc3NlcyEKKyMgUGVyaGFwcyB0aGlzIHdpbGwgY2hhbmdlIGlmL3doZW4gbm90aGluZyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgJ210ZC1oZWFkZXInCisjCisjIEFkZGl0aW9uYWxseSwgdG9vbHMgdGhhdCBwZXJmb3JtICJ3aG9sZSBwcm9ncmFtIG9wdGltaXphdGlvbiIgd2lsbAorIyB0aHJvdyBlcnJvcnMgYmVjdWFzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGRpZmZlciBncmVhdGx5LgorIworIyBIZW5jZSwgQ0xJIGxpYnJhcnkgKGFuZCBOQ1ApIG11c3QgZXhpc3QgaW4gdHdvIGZsYXZvcnMuCisjCisjIFVubGVzcyBhbmQgdW50aWwgdGhlc2UgbGlicmFyaWVzIGRvIG5vdCAiYWNjaWRlbnRseSIgc3VjayBpbgorIyBhICJmbGF2b3JlZCIgaGVhZGVyIGZpbGUgc29tZXdoZXJlLgorCitsaWJfTElCUkFSSUVTID0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsaWJvcGVudGhyZWFkLWNsaS1tdGQuYSAgICAgICAgICAgXAorICAgIGxpYm9wZW50aHJlYWQtY2xpLWZ0ZC5hICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDUFBGTEFHU19DT01NT04gPSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgIFwKKyAgICAkKE9QRU5USFJFQURfVEFSR0VUX0RFRklORVMpICAgICAgXAorICAgICQoTlVMTCkKKworCitsaWJvcGVudGhyZWFkX2NsaV9tdGRfYV9DUFBGTEFHUyA9ICAgIFwKKyAgICAtRE9QRU5USFJFQURfTVREPTEgICAgICAgICAgICAgICAgXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NsaV9mdGRfYV9DUFBGTEFHUyA9ICAgIFwKKyAgICAtRE9QRU5USFJFQURfRlREPTEgICAgICAgICAgICAgICAgXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitTT1VSQ0VTX0NPTU1PTiA9ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGkuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9jb25zb2xlLmNwcCAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX2RhdGFzZXQuY3BwICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGlfdWFydC5jcHAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9jb2FwLmNwcCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX3VkcC5jcHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfY2xpX2Z0ZF9hX1NPVVJDRVMgPSAgICAgXAorICAgICQoU09VUkNFU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2NsaV9tdGRfYV9TT1VSQ0VTID0gICAgIFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgY2xpLmhwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGlfY29uc29sZS5ocHAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9kYXRhc2V0LmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX3VhcnQuaHBwICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGlfc2VydmVyLmhwcCAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsaV9jb2FwLmhwcCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xpX3VkcC5ocHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh3aWxkY2FyZCAqLmdjZGEgKi5nY25vKQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvc3JjL2NsaS9SRUFETUUubWQgYi9zcmMvY2xpL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQ0MGEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9SRUFETUUubWQKQEAgLTAsMCArMSwxNjk2IEBACisjIE9wZW5UaHJlYWQgQ0xJIFJlZmVyZW5jZQorCitUaGUgT3BlblRocmVhZCBDTEkgZXhwb3NlcyBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IEFQSXMgdmlhIGEKK2NvbW1hbmQgbGluZSBpbnRlcmZhY2UuIFVzZSB0aGUgQ0xJIHRvIHBsYXkgd2l0aCBPcGVuVGhyZWFkLCB3aGljaAorY2FuIGFsc28gYmUgdXNlZCB3aXRoIGFkZGl0aW9uYWwgYXBwbGljYXRpb24gY29kZS4gVGhlCitPcGVuVGhyZWFkIHRlc3Qgc2NyaXB0cyB1c2UgdGhlIENMSSB0byBleGVjdXRlIHRlc3QgY2FzZXMuCisKKyMjIE9wZW5UaHJlYWQgQ29tbWFuZCBMaXN0CisKKyogW2F1dG9zdGFydF0oI2F1dG9zdGFydCkKKyogW2JsYWNrbGlzdF0oI2JsYWNrbGlzdCkKKyogW2J1ZmZlcmluZm9dKCNidWZmZXJpbmZvKQorKiBbY2hhbm5lbF0oI2NoYW5uZWwpCisqIFtjaGlsZF0oI2NoaWxkLWxpc3QpCisqIFtjaGlsZG1heF0oI2NoaWxkbWF4KQorKiBbY2hpbGR0aW1lb3V0XSgjY2hpbGR0aW1lb3V0KQorKiBbY29hcF0oI2NvYXAtc3RhcnQpCisqIFtjb21taXNzaW9uZXJdKCNjb21taXNzaW9uZXItc3RhcnQtcHJvdmlzaW9uaW5ndXJsKQorKiBbY29udGV4dHJldXNlZGVsYXldKCNjb250ZXh0cmV1c2VkZWxheSkKKyogW2NvdW50ZXJdKCNjb3VudGVyKQorKiBbZGF0YXNldF0oI2RhdGFzZXQtaGVscCkKKyogW2RlbGF5dGltZXJtaW5dKCNkZWxheXRpbWVybWluKQorKiBbZGlzY292ZXJdKCNkaXNjb3Zlci1jaGFubmVsKQorKiBbZG5zXSgjZG5zLXJlc29sdmUtaG9zdG5hbWUtZG5zLXNlcnZlci1pcC1kbnMtc2VydmVyLXBvcnQpCisqIFtlaWRjYWNoZV0oI2VpZGNhY2hlKQorKiBbZXVpNjRdKCNldWk2NCkKKyogW2V4dGFkZHJdKCNleHRhZGRyKQorKiBbZXh0cGFuaWRdKCNleHRwYW5pZCkKKyogW2ZhY3RvcnlyZXNldF0oI2ZhY3RvcnlyZXNldCkKKyogW2hhc2htYWNhZGRyXSgjaGFzaG1hY2FkZHIpCisqIFtpZmNvbmZpZ10oI2lmY29uZmlnKQorKiBbaXBhZGRyXSgjaXBhZGRyKQorKiBbaXBtYWRkcl0oI2lwbWFkZHIpCisqIFtqb2luZXJdKCNqb2luZXItc3RhcnQtcHNrZC1wcm92aXNpb25pbmd1cmwpCisqIFtqb2luZXJwb3J0XSgjam9pbmVycG9ydC1wb3J0KQorKiBba2V5c2VxdWVuY2VdKCNrZXlzZXF1ZW5jZS1jb3VudGVyKQorKiBbbGVhZGVyZGF0YV0oI2xlYWRlcmRhdGEpCisqIFtsZWFkZXJwYXJ0aXRpb25pZF0oI2xlYWRlcnBhcnRpdGlvbmlkKQorKiBbbGVhZGVyd2VpZ2h0XSgjbGVhZGVyd2VpZ2h0KQorKiBbbGlua3F1YWxpdHldKCNsaW5rcXVhbGl0eS1leHRhZGRyKQorKiBbbWFzdGVya2V5XSgjbWFzdGVya2V5KQorKiBbbW9kZV0oI21vZGUpCisqIFtuZXRkYXRhcmVnaXN0ZXJdKCNuZXRkYXRhcmVnaXN0ZXIpCisqIFtuZXR3b3JrZGlhZ25vc3RpY10oI25ldHdvcmtkaWFnbm9zdGljLWdldC1hZGRyLXR5cGUtKQorKiBbbmV0d29ya2lkdGltZW91dF0oI25ldHdvcmtpZHRpbWVvdXQpCisqIFtuZXR3b3JrbmFtZV0oI25ldHdvcmtuYW1lKQorKiBbcGFuaWRdKCNwYW5pZCkKKyogW3BhcmVudF0oI3BhcmVudCkKKyogW3BhcmVudHByaW9yaXR5XSgjcGFyZW50cHJpb3JpdHkpCisqIFtwaW5nXSgjcGluZy1pcGFkZHItc2l6ZS1jb3VudC1pbnRlcnZhbCkKKyogW3BvbGxwZXJpb2RdKCNwb2xscGVyaW9kLXBvbGxwZXJpb2QpCisqIFtwcmVmaXhdKCNwcmVmaXgtYWRkLXByZWZpeC1wdmRjc3ItcHJmKQorKiBbcHJvbWlzY3VvdXNdKCNwcm9taXNjdW91cykKKyogW3JlbGVhc2Vyb3V0ZXJpZF0oI3JlbGVhc2Vyb3V0ZXJpZC1yb3V0ZXJpZCkKKyogW3Jlc2V0XSgjcmVzZXQpCisqIFtybG9jMTZdKCNybG9jMTYpCisqIFtyb3V0ZV0oI3JvdXRlLWFkZC1wcmVmaXgtcy1wcmYpCisqIFtyb3V0ZXJdKCNyb3V0ZXItbGlzdCkKKyogW3JvdXRlcmRvd25ncmFkZXRocmVzaG9sZF0oI3JvdXRlcmRvd25ncmFkZXRocmVzaG9sZCkKKyogW3JvdXRlcnJvbGVdKCNyb3V0ZXJyb2xlKQorKiBbcm91dGVyc2VsZWN0aW9uaml0dGVyXSgjcm91dGVyc2VsZWN0aW9uaml0dGVyKQorKiBbcm91dGVydXBncmFkZXRocmVzaG9sZF0oI3JvdXRlcnVwZ3JhZGV0aHJlc2hvbGQpCisqIFtzY2FuXSgjc2Nhbi1jaGFubmVsKQorKiBbc2luZ2xldG9uXSgjc2luZ2xldG9uKQorKiBbc3RhdGVdKCNzdGF0ZSkKKyogW3RocmVhZF0oI3RocmVhZC1zdGFydCkKKyogW3R4cG93ZXJtYXhdKCN0eHBvd2VybWF4KQorKiBbdmVyc2lvbl0oI3ZlcnNpb24pCisqIFt3aGl0ZWxpc3RdKCN3aGl0ZWxpc3QpCisqIFtkaWFnXSgjZGlhZykKKworIyMgT3BlblRocmVhZCBDb21tYW5kIERldGFpbHMKKworIyMjIGF1dG9zdGFydCB0cnVlCisKK0F1dG9tYXRpY2FsbHkgc3RhcnQgVGhyZWFkIG9uIGluaXRpYWxpemF0aW9uLgorCitgYGBiYXNoCis+IGF1dG9zdGFydCB0cnVlCitEb25lCitgYGAKKworIyMjIGF1dG9zdGFydCBmYWxzZQorCitEb24ndCBhdXRvbWF0aWNhbGx5IHN0YXJ0IFRocmVhZCBvbiBpbml0aWFsaXphdGlvbi4KKworYGBgYmFzaAorPiBhdXRvc3RhcnQgZmFsc2UKK0RvbmUKK2BgYAorCisjIyMgYXV0b3N0YXJ0CisKK1Nob3cgdGhlIHN0YXR1cyBvZiBhdXRvbWF0aWNhbGx5IHN0YXJ0aW5nIFRocmVhZCBvbiBpbml0aWFsaXphdGlvbi4KKworYGBgYmFzaAorPiBhdXRvc3RhcnQKK2ZhbHNlCitEb25lCitgYGAKKworIyMjIGJsYWNrbGlzdAorCitMaXN0IHRoZSBibGFja2xpc3QgZW50cmllcy4KKworYGBgYmFzaAorPiBibGFja2xpc3QKK0VuYWJsZWQKKzE2NmUwYTAwMDAwMDAwMDIKKzE2NmUwYTAwMDAwMDAwMDMKK0RvbmUKK2BgYAorCisjIyMgYmxhY2tsaXN0IGFkZCBcPGV4dGFkZHJcPgorCitBZGQgYW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSBibGFja2xpc3QuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGFkZCAxNjZlMGEwMDAwMDAwMDAyCitEb25lCitgYGAKKworIyMjIGJsYWNrbGlzdCBjbGVhcgorCitDbGVhciBhbGwgZW50cmllcyBmcm9tIHRoZSBibGFja2xpc3QuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGNsZWFyCitEb25lCitgYGAKKworIyMjIGJsYWNrbGlzdCBkaXNhYmxlCisKK0Rpc2FibGUgTUFDIGJsYWNrbGlzdCBmaWx0ZXJpbmcuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGRpc2FibGUKK0RvbmUKK2BgYAorCisjIyMgYmxhY2tsaXN0IGVuYWJsZQorCitFbmFibGUgTUFDIGJsYWNrbGlzdCBmaWx0ZXJpbmcuCisKK2BgYGJhc2gKKz4gYmxhY2tsaXN0IGVuYWJsZQorRG9uZQorYGBgCisKKyMjIyBibGFja2xpc3QgcmVtb3ZlIFw8ZXh0YWRkclw+CisKK1JlbW92ZSBhbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgZnJvbSB0aGUgYmxhY2tsaXN0LgorCitgYGBiYXNoCis+IGJsYWNrbGlzdCByZW1vdmUgMTY2ZTBhMDAwMDAwMDAwMgorRG9uZQorYGBgCisKKyMjIyBidWZmZXJpbmZvCisKK1Nob3cgdGhlIGN1cnJlbnQgbWVzc2FnZSBidWZmZXIgaW5mb3JtYXRpb24uCisKK2BgYGJhc2gKKz4gYnVmZmVyaW5mbwordG90YWw6IDQwCitmcmVlOiA0MAorNmxvIHNlbmQ6IDAgMAorNmxvIHJlYXM6IDAgMAoraXA2OiAwIDAKK21wbDogMCAwCittbGU6IDAgMAorYXJwOiAwIDAKK2NvYXA6IDAgMAorRG9uZQorYGBgCisKKyMjIyBjaGFubmVsCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsIHZhbHVlLgorCitgYGBiYXNoCis+IGNoYW5uZWwKKzExCitEb25lCitgYGAKKworIyMjIGNoYW5uZWwgXDxjaGFubmVsXD4KKworU2V0IHRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdmFsdWUuCisKK2BgYGJhc2gKKz4gY2hhbm5lbCAxMQorRG9uZQorYGBgCisKKyMjIyBjaGlsZCBsaXN0CisKK0xpc3QgYXR0YWNoZWQgQ2hpbGQgSURzLgorCitgYGBiYXNoCis+IGNoaWxkIGxpc3QKKzEgMiAzIDYgNyA4CitEb25lCitgYGAKKworIyMjIGNoaWxkIHRhYmxlCisKK1ByaW50IHRhYmxlIG9mIGF0dGFjaGVkIGNoaWxkcmVuLgorCitgYGBiYXNoCis+IGNoaWxkIHRhYmxlCit8IElEICB8IFJMT0MxNiB8IFRpbWVvdXQgICAgfCBBZ2UgICAgICAgIHwgTFEgSW4gfCBDX1ZOIHxSfFN8RHxOfCBFeHRlbmRlZCBNQUMgICAgIHwKKystLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tKy0rLSstKy0rLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgIDEgfCAweGUwMDEgfCAgICAgICAgMjQwIHwgICAgICAgICA0NCB8ICAgICAzIHwgIDIzNyB8MXwxfDF8MXwgZDI4ZDdmODc1ODg4ZmNjYiB8Cit8ICAgMiB8IDB4ZTAwMiB8ICAgICAgICAyNDAgfCAgICAgICAgIDI3IHwgICAgIDMgfCAgMjM3IHwwfDF8MHwxfCBlMmIzNTQwNTkwYjBmZDg3IHwKK0RvbmUKK2BgYAorCisjIyMgY2hpbGQgXDxpZFw+CisKK1ByaW50IGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZm9yIGFuIGF0dGFjaGVkIFRocmVhZCBDaGlsZC4gIFRoZSBgaWRgIG1heSBiZSBhIENoaWxkIElEIG9yIGFuIFJMT0MxNi4KKworYGBgYmFzaAorPiBjaGlsZCAxCitDaGlsZCBJRDogMQorUmxvYzogOWMwMQorRXh0IEFkZHI6IGUyYjM1NDA1OTBiMGZkODcKK01vZGU6IHJzbgorTmV0IERhdGE6IDE4NAorVGltZW91dDogMTAwCitBZ2U6IDAKK0xpbmsgUXVhbGl0eSBJbjogMworUlNTSTogLTIwCitEb25lCitgYGAKKworIyMjIGNoaWxkbWF4CisKK0dldCB0aGUgVGhyZWFkIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgY2hpbGRyZW4uCisKK2BgYGJhc2gKKz4gY2hpbGRtYXgKKzUKK0RvbmUKK2BgYAorCisjIyMgY2hpbGRtYXggXDxjb3VudFw+CisKK1NldCB0aGUgVGhyZWFkIG1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgY2hpbGRyZW4uCisKK2BgYGJhc2gKKz4gY2hpbGRtYXggMgorRG9uZQorYGBgCisKKyMjIyBjaGlsZHRpbWVvdXQKKworR2V0IHRoZSBUaHJlYWQgQ2hpbGQgVGltZW91dCB2YWx1ZS4KKworYGBgYmFzaAorPiBjaGlsZHRpbWVvdXQKKzMwMAorRG9uZQorYGBgCisKKyMjIyBjaGlsZHRpbWVvdXQgXDx0aW1lb3V0XD4KKworU2V0IHRoZSBUaHJlYWQgQ2hpbGQgVGltZW91dCB2YWx1ZS4KKworYGBgYmFzaAorPiBjaGlsZHRpbWVvdXQgMzAwCitEb25lCitgYGAKKworIyMjIGNvYXAgc3RhcnQKKworU3RhcnRzIHRoZSBhcHBsaWNhdGlvbiBjb2FwIHNlcnZpY2UuCisKK2BgYGJhc2gKKz4gY29hcCBzdGFydAorQ29hcCBzZXJ2aWNlIHN0YXJ0ZWQ6IERvbmUKK2BgYAorCisjIyMgY29hcCBzdG9wCisKK1N0b3BzIHRoZSBhcHBsaWNhdGlvbiBjb2FwIHNlcnZpY2UuCisKK2BgYGJhc2gKKz4gY29hcCBzdGFydAorQ29hcCBzZXJ2aWNlIHN0b3BwZWQ6IERvbmUKK2BgYAorCisjIyMgY29hcCByZXNvdXJjZSBcW3VyaS1wYXRoXF0KKworU2V0cyB0aGUgVVJJLVBhdGggZm9yIHRoZSB0ZXN0IHJlc291cmNlLgorCitgYGBiYXNoCis+IGNvYXAgcmVzb3VyY2UgdGVzdAorUmVzb3VyY2UgbmFtZSBpcyAndGVzdCc6IERvbmUKKz4gY29hcCByZXNvdXJjZQorUmVzb3VyY2UgbmFtZSBpcyAndGVzdCc6IERvbmUKK2BgYAorCisjIyMgY29hcCBcPG1ldGhvZFw+IFw8YWRkcmVzc1w+IFw8dXJpXD4gXFtwYXlsb2FkXF0gXFt0eXBlXF0KKworKiBtZXRob2Q6IENvQVAgbWV0aG9kIHRvIGJlIHVzZWQgKEdFVC9QVVQvUE9TVC9ERUxFVEUpLgorKiBhZGRyZXNzOiBJUCBhZGRyZXNzIG9mIHRoZSBDb0FQIHNlcnZlciB0byBxdWVyeS4KKyogdXJpOiBVUkkgU3RyaW5nIG9mIHRoZSByZXNvdXJjZSBvbiB0aGUgQ29BUCBzZXJ2ZXIuCisqIHBheWxvYWQ6IEluIGNhc2Ugb2YgUFVUL1BPU1QvREVMRVRFIGEgcGF5bG9hZCBjYW4gYmUgZW5jYXBzdWxhdGVkLgorKiB0eXBlOiBTd2l0Y2ggYmV0d2VlbiBjb25maXJtYWJsZSAoImNvbiIpIGFuZCBub24tY29uZmlybWFibGUgKGRlZmF1bHQpLgorCitgYGBiYXNoCis+IGNvYXAgZ2V0IGZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkYyB0ZXN0CitTZW5kaW5nIGNvYXAgbWVzc2FnZTogRG9uZQorUmVjZWl2ZWQgY29hcCByZXF1ZXN0IGZyb20gW2ZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkY106IEdFVAorY29hcCByZXNwb25zZSBzZW50IHN1Y2Nlc3NmdWxseSEKK1JlY2VpdmVkIGNvYXAgcmVzcG9uc2Ugd2l0aCBwYXlsb2FkOiAzMAorPiBjb2FwIHB1dCBmZGRlOmFkMDA6YmVlZjowOmRiYWE6ZjFkMDo4YWZiOjMwZGMgdGVzdCBub24tY29uIHNvbWVQYXlsb2FkCitTZW5kaW5nIGNvYXAgbWVzc2FnZTogRG9uZQorUmVjZWl2ZWQgY29hcCByZXF1ZXN0IGZyb20gW2ZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkY106IFBVVCB3aXRoIHBheWxvYWQ6IDczIDZmIDZkIDY1IDUwIDYxIDc5IDZjIDZmIDYxIDY0Cis+IGNvYXAgcHV0IGZkZGU6YWQwMDpiZWVmOjA6ZGJhYTpmMWQwOjhhZmI6MzBkYyB0ZXN0IGNvbiAxMjMKK1NlbmRpbmcgY29hcCBtZXNzYWdlOiBEb25lCitSZWNlaXZlZCBjb2FwIHJlcXVlc3QgZnJvbSBbZmRkZTphZDAwOmJlZWY6MDpkYmFhOmYxZDA6OGFmYjozMGRjXTogUFVUIHdpdGggcGF5bG9hZDogMzEgMzIgMzMKK2NvYXAgcmVzcG9uc2Ugc2VudCBzdWNjZXNzZnVsbHkhCitSZWNlaXZlZCBjb2FwIHJlc3BvbnNlCitgYGAKKworIyMjIGNvbW1pc3Npb25lciBzdGFydCBcPHByb3Zpc2lvbmluZ1VybFw+CisKK1N0YXJ0IHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKworKiBwcm92aXNpb25pbmdVcmw6IFByb3Zpc2lvbmluZyBVUkwgZm9yIHRoZSBKb2luZXIgKG9wdGlvbmFsKS4KKworVGhpcyBjb21tYW5kIHdpbGwgY2F1c2UgdGhlIGRldmljZSB0byBzZW5kIExFQURfUEVUIGFuZCBMRUFEX0tBIG1lc3NhZ2VzLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBzdGFydAorRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgc3RvcAorCitTdG9wIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKworVGhpcyBjb21tYW5kIHdpbGwgY2F1c2UgdGhlIGRldmljZSB0byBzZW5kIExFQURfS0FbUmVqZWN0XSBtZXNzYWdlcy4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgc3RvcAorRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgam9pbmVyIGFkZCBcPGhhc2htYWNhZGRyXD4gXDxwc2RrXD4KKworQWRkIGEgSm9pbmVyIGVudHJ5LgorCisqIGhhc2htYWNhZGRyOiBUaGUgRXh0ZW5kZWQgQWRkcmVzcyBvZiB0aGUgSm9pbmVyIG9yICcqJyB0byBtYXRjaCBhbnkgSm9pbmVyLgorKiBwc2tkOiBQcmUtU2hhcmVkIEtleSBmb3IgdGhlIEpvaW5lci4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgam9pbmVyIGFkZCBkNDVlNjRmYTgzZjgxY2Y3IFBTSworRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgam9pbmVyIHJlbW92ZSBcPGhhc2htYWNhZGRyXD4KKworUmVtb3ZlIGEgSm9pbmVyIGVudHJ5LgorCisqIGhhc2htYWNhZGRyOiBUaGUgRXh0ZW5kZWQgQWRkcmVzcyBvZiB0aGUgSm9pbmVyIG9yICcqJyB0byBtYXRjaCBhbnkgSm9pbmVyLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBqb2luZXIgcmVtb3ZlIGQ0NWU2NGZhODNmODFjZjcKK0RvbmUKK2BgYAorCisjIyMgY29tbWlzc2lvbmVyIHByb3Zpc2lvbmluZ3VybCBcPHByb3Zpc2lvbmluZ1VybFw+CisKK1NldCB0aGUgUHJvdmlzaW9uaW5nIFVSTC4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgcHJvdmlzaW9uaW5ndXJsIGh0dHA6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZAorRG9uZQorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgZW5lcmd5IFw8bWFza1w+IFw8Y291bnRcPiBcPHBlcmlvZFw+IFw8c2NhbkR1cmF0aW9uXD4gXDxkZXN0aW5hdGlvblw+CisKK1NlbmQgYSBNR01UX0VEX1NDQU4gbWVzc2FnZS4KKworKiBtYXNrOiBCaXRtYXNrIGlkZW50aWZ5aW5nIGNoYW5uc2wgdG8gcGVyZm9ybSBJRUVFIDgwMi4xNS40IEVEIFNjYW5zLgorKiBjb3VudDogTnVtYmVyIG9mIElFRUUgODAyLjE1LjQgRUQgU2NhbnMgcGVyIGNoYW5uZWwuCisqIHBlcmlvZDogUGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBJRUVFIDgwMi4xNS40IEVEIFNjYW5zIChtaWxsaXNlY29uZHMpLgorKiBzY2FuRHVyYXRpb246IElFRUUgODAyLjE1LjQgU2NhbkR1cmF0aW9uIHRvIHVzZSB3aGVuIHBlcmZvcm1pbmcgYW4gSUVFRSA4MDIuMTUuNCBFRCBTY2FuIChtaWxsaXNlY29uZHMpLgorKiBkZXN0aW5hdGlvbjogSVB2NiBkZXN0aW5hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKG1heSBiZSBtdWx0aWNhc3QpLgorCitUaGUgY29udGVudHMgb2YgTUdNVF9FRF9SRVBPUlQgbWVzc2FnZXMgKGkuZS4gQ2hhbm5lbCBNYXNrIGFuZCBFbmVyZ3kKK0xpc3QpIGFyZSBwcmludGVkIGFzIHRoZXkgYXJlIHJlY2VpdmVkLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBlbmVyZ3kgMHgwMDA1MDAwMCAyIDMyIDEwMDAgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6YzAwCitEb25lCitFbmVyZ3k6IDAwMDUwMDAwIDAgMCAwIDAKK2BgYAorCisjIyMgY29tbWlzc2lvbmVyIHBhbmlkIFw8cGFuaWRcPiBcPG1hc2tcPiBcPGRlc3RpbmF0aW9uXD4KKworU2VuZCBhIE1HTVRfUEFOSURfUVVFUlkgbWVzc2FnZS4KKworKiBwYW5pZDogUEFOIElEIHRvIGNoZWNrIGZvciBjb25mbGljdHMuCisqIG1hc2s6IEJpdG1hc2sgaWRlbnRpZnlpbmcgY2hhbm5lbHMgdG8gcGVyZm9ybSBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2Fucy4KKyogZGVzdGluYXRpb246IElQdjYgZGVzdGluYXRpb24gZm9yIHRoZSBtZXNzYWdlIChtYXkgYmUgbXVsdGljYXN0KS4KKworVGhlIGNvbnRlbnRzIG9mIE1HTVRfUEFOSURfQ09ORkxJQ1QgbWVzc2FnZXMgKGkuZS4gUEFOIElEIGFuZCBDaGFubmVsCitNYXNrKSBhcmUgcHJpbnRlZCBhcyB0aGV5IGFyZSByZWNlaXZlZC4KKworYGBgYmFzaAorPiBjb21taXNzaW9uZXIgcGFuaWQgMHhkZWFkIDB4N2ZmZjgwMCBmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDpjMDAKK0RvbmUKK0NvbmZsaWN0OiBkZWFkLCAwMDAwMDgwMAorYGBgCisKKyMjIyBjb21taXNzaW9uZXIgc2Vzc2lvbmlkCisKK0dldCBjdXJyZW50IGNvbW1pc3Npb25lciBzZXNzaW9uIGlkLgorCitgYGBiYXNoCis+IGNvbW1pc3Npb25lciBzZXNzaW9uaWQKKzAKK0RvbmUKK2BgYAorCisjIyMgY29udGV4dHJldXNlZGVsYXkKKworR2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHZhbHVlLgorCitgYGBiYXNoCis+IGNvbnRleHRyZXVzZWRlbGF5CisxMQorRG9uZQorYGBgCisKKyMjIyBjb250ZXh0cmV1c2VkZWxheSBcPGRlbGF5XD4KKworU2V0IHRoZSBDT05URVhUX0lEX1JFVVNFX0RFTEFZIHZhbHVlLgorCitgYGBiYXNoCis+IGNvbnRleHRyZXVzZWRlbGF5IDExCitEb25lCitgYGAKKworIyMjIGNvdW50ZXIKKworR2V0IHRoZSBzdXBwb3J0ZWQgY291bnRlciBuYW1lcy4KKworYGBgYmFzaAorPmNvdW50ZXIKK21hYworRG9uZQorYGBgCisKKyMjIyBjb3VudGVyIFw8Y291bnRlcm5hbWVcPgorCitHZXQgdGhlIGNvdW50ZXIgdmFsdWUuCisKK2BgYGJhc2gKKz5jb3VudGVyIG1hYworVHhUb3RhbDogMTAKKyAgICBUeFVuaWNhc3Q6IDMKKyAgICBUeEJyb2FkY2FzdDogNworICAgIFR4QWNrUmVxdWVzdGVkOiAzCisgICAgVHhBY2tlZDogMworICAgIFR4Tm9BY2tSZXF1ZXN0ZWQ6IDcKKyAgICBUeERhdGE6IDEwCisgICAgVHhEYXRhUG9sbDogMAorICAgIFR4QmVhY29uOiAwCisgICAgVHhCZWFjb25SZXF1ZXN0OiAwCisgICAgVHhPdGhlcjogMAorICAgIFR4UmV0cnk6IDAKKyAgICBUeEVyckNjYTogMAorUnhUb3RhbDogMgorICAgIFJ4VW5pY2FzdDogMQorICAgIFJ4QnJvYWRjYXN0OiAxCisgICAgUnhEYXRhOiAyCisgICAgUnhEYXRhUG9sbDogMAorICAgIFJ4QmVhY29uOiAwCisgICAgUnhCZWFjb25SZXF1ZXN0OiAwCisgICAgUnhPdGhlcjogMAorICAgIFJ4V2hpdGVsaXN0RmlsdGVyZWQ6IDAKKyAgICBSeERlc3RBZGRyRmlsdGVyZWQ6IDAKKyAgICBSeER1cGxpY2F0ZWQ6IDAKKyAgICBSeEVyck5vRnJhbWU6IDAKKyAgICBSeEVyck5vVW5rbm93bk5laWdoYm9yOiAwCisgICAgUnhFcnJJbnZhbGlkU3JjQWRkcjogMAorICAgIFJ4RXJyU2VjOiAwCisgICAgUnhFcnJGY3M6IDAKKyAgICBSeEVyck90aGVyOiAwCitgYGAKKworIyMjIGRhdGFzZXQgaGVscAorCitQcmludCBtZXNoY29wIGRhdGFzZXQgaGVscCBtZW51LgorCitgYGBiYXNoCis+IGRhdGFzZXQgaGVscAoraGVscAorYWN0aXZlCithY3RpdmV0aW1lc3RhbXAKK2NoYW5uZWwKK2NoYW5uZWxtYXNrCitjbGVhcgorY29tbWl0CitkZWxheQorZXh0cGFuaWQKK21hc3RlcmtleQorbWVzaGxvY2FscHJlZml4CittZ210Z2V0Y29tbWFuZAorbWdtdHNldGNvbW1hbmQKK25ldHdvcmtuYW1lCitwYW5pZAorcGVuZGluZworcGVuZGluZ3RpbWVzdGFtcAorcHNrYworc2VjdXJpdHlwb2xpY3kKK0RvbmUKKz4KK2BgYAorCisjIyMgZGF0YXNldCBhY3RpdmUKKworUHJpbnQgbWVzaGNvcCBhY3RpdmUgb3BlcmF0aW9uYWwgZGF0YXNldC4KKworYGBgYmFzaAorPiBkYXRhc2V0IGFjdGl2ZQorQWN0aXZlIFRpbWVzdGFtcDogMAorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IGFjdGl2ZXRpbWVzdGFtcCBcPGFjdGl2ZXRpbWVzdGFtcFw+CisKK1NldCBhY3RpdmUgdGltZXN0YW1wLgorCitgYGBiYXNoCis+IGRhdGFzZXQgYWN0aXZlc3RhbXAgMTIzNDU2Nzg5CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgY2hhbm5lbCBcPGNoYW5uZWxcPgorCitTZXQgY2hhbm5lbC4KKworYGBgYmFzaAorPiBkYXRhc2V0IGNoYW5uZWwgMTIKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBjaGFubmVsbWFzayBcPGNoYW5uZWxtYXNrXD4KKworU2V0IGNoYW5uZWwgbWFzay4KKworYGBgYmFzaAorPiBkYXRhc2V0IGNoYW5uZWxtYXNrIGUwZmYxZjAwCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgY2xlYXIKKworUmVzZXQgb3BlcmF0aW9uYWwgZGF0YXNldCBidWZmZXIuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBjbGVhcgorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IGNvbW1pdCBcPGRhdGFzZXRcPgorCitDb21taXQgb3BlcmF0aW9uYWwgZGF0YXNldCBidWZmZXIgdG8gYWN0aXZlL3BlbmRpbmcgb3BlcmF0aW9uYWwgZGF0YXNldC4KKworYGBgYmFzaAorPiBkYXRhc2V0IGNvbW1pdCBhY3RpdmUKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBkZWxheSBcPGRlbGF5XD4KKworU2V0IGRlbGF5IHRpbWVyIHZhbHVlLgorCitgYGBiYXNoCis+IGRhdGFzZXQgZGVsYXkgMTAwMAorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IGV4dHBhbmlkIFw8ZXh0cGFuaWRcPgorCitTZXQgZXh0ZW5kZWQgcGFuaWQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBleHRwYW5pZCAwMDBkYjgwMTIzNDU2Nzg5CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbWFzdGVya2V5IFw8bWFzdGVya2V5XD4KKworU2V0IG1hc3RlciBrZXkuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtYXN0ZXIgMTIzNDU2Nzg5MDEyMzQ1NgorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IG1lc2hsb2NhbHByZWZpeCBcPG1lc2hsb2NhbHByZWZpeFw+CisKK1NldCBtZXNoIGxvY2FsIHByZWZpeC4KKworYGBgYmFzaAorPiBkYXRhc2V0IG1lc2hsb2NhbHByZWZpeCBmZDAwOmRiODo6CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbWdtdGdldGNvbW1hbmQgYWN0aXZlIFxbYWRkcmVzcyBcPGRlc3RpbmF0aW9uXD5cXSBcW1RMVnMgbGlzdFxdIFxbYmluYXJ5XF0KKworU2VuZCBNR01UX0FDVElWRV9HRVQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtZ210Z2V0Y29tbWFuZCBhY3RpdmUgYWRkcmVzcyBmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5IGFjdGl2ZXRpbWVzdGFtcCAxMjMgYmluYXJ5IDAwMDEKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBtZ210c2V0Y29tbWFuZCBhY3RpdmUgXFtUTFYgVHlwZXMgbGlzdFxdIFxbYmluYXJ5XF0KKworU2VuZCBNR01UX0FDVElWRV9TRVQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtZ210c2V0Y29tbWFuZCBhY3RpdmUgYWN0aXZldGltZXN0YW1wIGJpbmFyeSA4MjAxNTUKK0RvbmUKK2BgYAorCisjIyMgZGF0YXNldCBtZ210Z2V0Y29tbWFuZCBwZW5kaW5nIFxbYWRkcmVzcyBcPGRlc3RpbmF0aW9uXD5cXSBcW1RMVnMgbGlzdFxdIFxbYmluYXJ5XF0KKworU2VuZCBNR01UX1BFTkRJTkdfR0VULgorCitgYGBiYXNoCis+IGRhdGFzZXQgbWdtdGdldGNvbW1hbmQgcGVuZGluZyBhZGRyZXNzIGZkZGU6YWQwMDpiZWVmOjA6NTU4OmY1NmI6ZDY4ODo3OTkgYWN0aXZldGltZXN0YW1wIGJpbmFyeSAwMDAxCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbWdtdHNldGNvbW1hbmQgcGVuZGluZyBcW1RMViBUeXBlcyBsaXN0XF0gXFtiaW5hcnlcXQorCitTZW5kIE1HTVRfUEVORElOR19TRVQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBtZ210c2V0Y29tbWFuZCBwZW5kaW5nIGFjdGl2ZXRpbWVzdGFtcCBiaW5hcnkgODIwMTU1CitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgbmV0d29ya25hbWUgXDxuZXR3b3JrbmFtZVw+CisKK1NldCBuZXR3b3JrIG5hbWUuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBuZXR3b3JrbmFtZSBvcGVudGhyZWFkCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgcGFuaWQgXDxwYW5pZFw+CisKK1NldCBwYW5pZC4KKworYGBgYmFzaAorPiBkYXRhc2V0IHBhbmlkIDB4MTIzNAorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IHBlbmRpbmcKKworUHJpbnQgbWVzaGNvcCBwZW5kaW5nIG9wZXJhdGlvbmFsIGRhdGFzZXQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBwZW5kaW5nCitEb25lCitgYGAKKworIyMjIGRhdGFzZXQgcGVuZGluZ3RpbWVzdGFtcCBcPHBlbmRpbmd0aW1lc3RhbXBcPgorCitTZXQgcGVuZGluZyB0aW1lc3RhbXAuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBwZW5kaW5ndGltZXN0YW1wIDEyMzQ1Njc4OQorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IHBza2MgXDxwc2tjXD4KKworU2V0IHBza2Mgd2l0aCBoZXggZm9ybWF0LgorCitgYGBiYXNoCis+IGRhdGFzZXQgcHNrYyA2N2MwYzIwM2FhMGIwNDJiZmI1MzgxYzQ3YWVmNGQ5ZQorRG9uZQorYGBgCisKKyMjIyBkYXRhc2V0IHNlY3VyaXR5cG9saWN5IFw8cm90YXRpb250aW1lXD4gXFtvbnJjYlxdCisKK1NldCBzZWN1cml0eSBwb2xpY3kuCisKKyogbzogT2J0YWluaW5nIHRoZSBNYXN0ZXIgS2V5IGZvciBvdXQtb2YtYmFuZCBjb21taXNzaW9uaW5nIGlzIGVuYWJsZWQuCisqIG46IE5hdGl2ZSBDb21taXNzaW9uaW5nIHVzaW5nIFBTS2MgaXMgYWxsb3dlZC4KKyogcjogVGhyZWFkIDEueCBSb3V0ZXJzIGFyZSBlbmFibGVkLgorKiBjOiBFeHRlcm5hbCBDb21taXNzaW9uZXIgYXV0aGVudGljYXRpb24gaXMgYWxsb3dlZCB1c2luZyBQU0tjLgorKiBiOiBUaHJlYWQgMS54IEJlYWNvbnMgYXJlIGVuYWJsZWQuCisKK2BgYGJhc2gKKz4gZGF0YXNldCBzZWN1cml0eXBvbGljeSA2NzIgb25yY2IKK0RvbmUKK2BgYAorCisjIyMgZGVsYXl0aW1lcm1pbgorCitHZXQgdGhlIG1pbmltYWwgZGVsYXkgdGltZXIgKGluIHNlY29uZHMpLgorCitgYGBiYXNoCis+IGRlbGF5dGltZXJtaW4KKzMwCitEb25lCitgYGAKKworIyMjIGRlbGF5dGltZXJtaW4gXDxkZWxheXRpbWVybWluXD4KKworU2V0IHRoZSBtaW5pbWFsIGRlbGF5IHRpbWVyIChpbiBzZWNvbmRzKS4KKworYGBgYmFzaAorPiBkZWxheXRpbWVybWluIDYwCitEb25lCitgYGAKKworIyMjIGRpc2NvdmVyIFxbY2hhbm5lbFxdCisKK1BlcmZvcm0gYW4gTUxFIERpc2NvdmVyeSBvcGVyYXRpb24uCisKKyogY2hhbm5lbDogVGhlIGNoYW5uZWwgdG8gZGlzY292ZXIgb24uICBJZiBubyBjaGFubmVsIGlzIHByb3ZpZGVkLCB0aGUgZGlzY292ZXJ5IHdpbGwgY292ZXIgYWxsIHZhbGlkIGNoYW5uZWxzLgorCitgYGBiYXNoCis+IGRpc2NvdmVyCit8IEogfCBOZXR3b3JrIE5hbWUgICAgIHwgRXh0ZW5kZWQgUEFOICAgICB8IFBBTiAgfCBNQUMgQWRkcmVzcyAgICAgIHwgQ2ggfCBkQm0gfCBMUUkgfAorKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLSsKK3wgMCB8IE9wZW5UaHJlYWQgICAgICAgfCBkZWFkMDBiZWVmMDBjYWZlIHwgZmZmZiB8IGYxZDkyYTgyYzhkOGZlNDMgfCAxMSB8IC0yMCB8ICAgMCB8CitEb25lCitgYGAKKworIyMjIGRucyByZXNvbHZlIFw8aG9zdG5hbWVcPiBcW0ROUyBzZXJ2ZXIgSVBcXSBcW0ROUyBzZXJ2ZXIgcG9ydFxdCisKK1NlbmQgRE5TIFF1ZXJ5IHRvIG9idGFpbiBJUHY2IGFkZHJlc3MgZm9yIGdpdmVuIGhvc3RuYW1lLgorVGhlIGxhdHRlciB0d28gcGFyYW1ldGVycyBoYXZlIGZvbGxvd2luZyBkZWZhdWx0IHZhbHVlczoKKyAqIEROUyBzZXJ2ZXIgSVA6IDIwMDE6NDg2MDo0ODYwOjo4ODg4IChHb29nbGUgRE5TIFNlcnZlcikKKyAqIEROUyBzZXJ2ZXIgcG9ydDogNTMKKworYGBgYmFzaAorPiBkbnMgcmVzb2x2ZSBpcHY2Lmdvb2dsZS5jb20KKz4gRE5TIHJlc3BvbnNlIGZvciBpcHY2Lmdvb2dsZS5jb20gLSBbMmEwMDoxNDUwOjQwMWI6ODAxOjA6MDowOjIwMGVdIFRUTDogMzAwCitgYGAKKworIyMjIGVpZGNhY2hlCisKK1ByaW50IHRoZSBFSUQtdG8tUkxPQyBjYWNoZSBlbnRyaWVzLgorCitgYGBiYXNoCis+IGVpZGNhY2hlCitmZGRlOmFkMDA6YmVlZjowOmJiMTplYmQ2OmFkMTA6ZjMzIGFjMDAKK2ZkZGU6YWQwMDpiZWVmOjA6MTEwYTplMDQxOjgzOTk6MTdjZCA2MDAwCitEb25lCitgYGAKKworIyMjIGV1aTY0CisKK0dldCB0aGUgZmFjdG9yeS1hc3NpZ25lZCBJRUVFIEVVSS02NC4KKworYGBgYmFzaAorPiBldWk2NAorMDYxNWFhZTkwMDEyNGIwMAorRG9uZQorYGBgCisKKyMjIyBleHRhZGRyCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorCitgYGBiYXNoCis+IGV4dGFkZHIKK2RlYWQwMGJlZWYwMGNhZmUKK0RvbmUKK2BgYAorCisjIyMgZXh0YWRkciBcPGV4dGFkZHJcPgorCitTZXQgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKworYGBgYmFzaAorPiBleHRhZGRyIGRlYWQwMGJlZWYwMGNhZmUKK2RlYWQwMGJlZWYwMGNhZmUKK0RvbmUKK2BgYAorCisjIyMgZXh0cGFuaWQKKworR2V0IHRoZSBUaHJlYWQgRXh0ZW5kZWQgUEFOIElEIHZhbHVlLgorCitgYGBiYXNoCis+IGV4dHBhbmlkCitkZWFkMDBiZWVmMDBjYWZlCitEb25lCitgYGAKKworIyMjIGV4dHBhbmlkIFw8ZXh0cGFuaWRcPgorCitTZXQgdGhlIFRocmVhZCBFeHRlbmRlZCBQQU4gSUQgdmFsdWUuCisKK2BgYGJhc2gKKz4gZXh0cGFuaWQgZGVhZDAwYmVlZjAwY2FmZQorRG9uZQorYGBgCisKKyMjIyBmYWN0b3J5cmVzZXQKK0RlbGV0ZSBhbGwgc3RvcmVkIHNldHRpbmdzLCBhbmQgc2lnbmFsIGEgcGxhdGZvcm0gcmVzZXQuCisKK2BgYGJhc2gKKz4gZmFjdG9yeXJlc2V0CitgYGAKKworIyMjIGhhc2htYWNhZGRyCisKK0dldCB0aGUgSGFzaE1hYyBhZGRyZXNzLgorCitgYGBiYXNoCis+IGhhc2htYWNhZGRyCitlMGIyMjBlYjdkOGRkYTdlCitEb25lCitgYGAKKworIyMjIGlmY29uZmlnCisKK1Nob3cgdGhlIHN0YXR1cyBvZiB0aGUgSVB2NiBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaWZjb25maWcKK2Rvd24KK0RvbmUKK2BgYAorCisjIyMgaWZjb25maWcgdXAKKworQnJpbmcgdXAgdGhlIElQdjYgaW50ZXJmYWNlLgorCitgYGBiYXNoCis+IGlmY29uZmlnIHVwCitEb25lCitgYGAKKworIyMjIGlmY29uZmlnIGRvd24KKworQnJpbmcgZG93biB0aGUgSVB2NiBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaWZjb25maWcgZG93bgorRG9uZQorYGBgCisKKyMjIyBpcGFkZHIKKworTGlzdCBhbGwgSVB2NiBhZGRyZXNzZXMgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaXBhZGRyCitmZGRlOmFkMDA6YmVlZjowOjA6ZmY6ZmUwMDowCitmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5CitmZTgwOjA6MDowOmYzZDk6MmE4MjpjOGQ4OmZlNDMKK0RvbmUKK2BgYAorCisjIyMgaXBhZGRyIGFkZCBcPGlwYWRkclw+CisKK0FkZCBhbiBJUHY2IGFkZHJlc3MgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisKK2BgYGJhc2gKKz4gaXBhZGRyIGFkZCAyMDAxOjpkZWFkOmJlZWY6Y2FmZQorRG9uZQorYGBgCisKKyMjIyBpcGFkZHIgZGVsIFw8aXBhZGRyXD4KKworRGVsZXRlIGFuIElQdjYgYWRkcmVzcyBmcm9tIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorCitgYGBiYXNoCis+IGlwYWRkciBkZWwgMjAwMTo6ZGVhZDpiZWVmOmNhZmUKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkcgorCitMaXN0IGFsbCBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgc3Vic2NyaWJlZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKworYGBgYmFzaAorPiBpcG1hZGRyCitmZjA1OjA6MDowOjA6MDowOjEKK2ZmMzM6NDA6ZmRkZTphZDAwOmJlZWY6MDowOjEKK2ZmMzI6NDA6ZmRkZTphZDAwOmJlZWY6MDowOjEKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkciBhZGQgXDxpcGFkZHJcPgorCitTdWJzY3JpYmUgdGhlIFRocmVhZCBpbnRlcmZhY2UgdG8gdGhlIElQdjYgbXVsdGljYXN0IGFkZHJlc3MuCisKK2BgYGJhc2gKKz4gaXBtYWRkciBhZGQgZmYwNTo6MQorRG9uZQorYGBgCisKKyMjIyBpcG1hZGRyIGRlbCBcPGlwYWRkclw+CisKK1Vuc3Vic2NyaWJlIHRoZSBUaHJlYWQgaW50ZXJmYWNlIHRvIHRoZSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzLgorCitgYGBiYXNoCis+IGlwbWFkZHIgZGVsIGZmMDU6OjEKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkciBwcm9taXNjdW91cworCitHZXQgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGUuCisKK2BgYGJhc2gKKz4gaXBtYWRkciBwcm9taXNjdW91cworRGlzYWJsZWQKK0RvbmUKK2BgYAorCisjIyMgaXBtYWRkciBwcm9taXNjdW91cyBlbmFibGUKKworRW5hYmxlIG11bHRpY2FzdCBwcm9taXNjdW91cyBtb2RlLgorCitgYGBiYXNoCis+IGlwbWFkZHIgcHJvbWlzY3VvdXMgZW5hYmxlCitEb25lCitgYGAKKworIyMjIGlwbWFkZHIgcHJvbWlzY3VvdXMgZGlzYWJsZQorCitEaXNhYmxlIG11bHRpY2FzdCBwcm9taXNjdW91cyBtb2RlLgorCitgYGBiYXNoCis+IGlwbWFkZHIgcHJvbWlzY3VvdXMgZGlzYWJsZQorRG9uZQorYGBgCisKKyMjIyBqb2luZXIgc3RhcnQgXDxwc2tkXD4gXDxwcm92aXNpb25pbmdVcmxcPgorCitTdGFydCB0aGUgSm9pbmVyIHJvbGUuCisKKyogcHNrZDogUHJlLVNoYXJlZCBLZXkgZm9yIHRoZSBKb2luZXIuCisqIHByb3Zpc2lvbmluZ1VybDogUHJvdmlzaW9uaW5nIFVSTCBmb3IgdGhlIEpvaW5lciAob3B0aW9uYWwpLgorCitUaGlzIGNvbW1hbmQgd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvIHBlcmZvcm0gYW4gTUxFIERpc2NvdmVyeSBhbmQKK2luaXRpYXRlIHRoZSBUaHJlYWQgQ29tbWlzc2lvbmluZyBwcm9jZXNzLgorCitgYGBiYXNoCis+IGpvaW5lciBzdGFydCBQU0sKK0RvbmUKK2BgYAorCisjIyMgam9pbmVyIHN0b3AKKworU3RvcCB0aGUgSm9pbmVyIHJvbGUuCisKK2BgYGJhc2gKKz4gam9pbmVyIHN0b3AKK0RvbmUKK2BgYAorCisjIyMgam9pbmVycG9ydCBcPHBvcnRcPgorCitTZXQgdGhlIEpvaW5lciBwb3J0LgorCitgYGBiYXNoCis+IGpvaW5lcnBvcnQgMTAwMAorRG9uZQorYGBgCisKKyMjIyBrZXlzZXF1ZW5jZSBjb3VudGVyCisKK0dldCB0aGUgVGhyZWFkIEtleSBTZXF1ZW5jZSBDb3VudGVyLgorCitgYGBiYXNoCis+IGtleXNlcXVlbmNlIGNvdW50ZXIKKzEwCitEb25lCitgYGAKKworIyMjIGtleXNlcXVlbmNlIGNvdW50ZXIgXDxjb3VudGVyXD4KKworU2V0IHRoZSBUaHJlYWQgS2V5IFNlcXVlbmNlIENvdW50ZXIuCisKK2BgYGJhc2gKKz4ga2V5c2VxdWVuY2UgY291bnRlciAxMAorRG9uZQorYGBgCisKKyMjIyBrZXlzZXF1ZW5jZSBndWFyZHRpbWUKKworR2V0IFRocmVhZCBLZXkgU3dpdGNoIEd1YXJkIFRpbWUgKGluIGhvdXJzKQorCitgYGBiYXNoCis+IGtleXNlcXVlbmNlIGd1YXJkdGltZQorMAorRG9uZQorYGBgCisKKyMjIyBrZXlzZXF1ZW5jZSBndWFyZHRpbWUgXDxndWFyZHRpbWVcPgorCitTZXQgVGhyZWFkIEtleSBTd2l0Y2ggR3VhcmQgVGltZSAoaW4gaG91cnMpCiswIG1lYW5zIFRocmVhZCBLZXkgU3dpdGNoIGltZWRpYXRlbHkgaWYga2V5IGluZGV4IG1hdGNoCisKK2BgYGJhc2gKKz4ga2V5c2VxdWVuY2UgZ3VhcmR0aW1lIDAKK0RvbmUKK2BgYAorCisjIyMgbGVhZGVycGFydGl0aW9uaWQKKworR2V0IHRoZSBUaHJlYWQgTGVhZGVyIFBhcnRpdGlvbiBJRC4KKworYGBgYmFzaAorPiBsZWFkZXJwYXJ0aXRpb25pZAorNDI5NDk2NzI5NQorRG9uZQorYGBgCisKKyMjIyBsZWFkZXJwYXJ0aXRpb25pZCBcPHBhcnRpdGlvbmlkXD4KKworU2V0IHRoZSBUaHJlYWQgTGVhZGVyIFBhcnRpdGlvbiBJRC4KKworYGBgYmFzaAorPiBsZWFkZXJwYXJ0aXRpb25pZCAweGZmZmZmZmZmCitEb25lCitgYGAKKworIyMjIGxlYWRlcmRhdGEKKworU2hvdyB0aGUgVGhyZWFkIExlYWRlciBEYXRhLgorCitgYGBiYXNoCis+IGxlYWRlcmRhdGEKK1BhcnRpdGlvbiBJRDogMTA3Nzc0NDI0MAorV2VpZ2h0aW5nOiA2NAorRGF0YSBWZXJzaW9uOiAxMDkKK1N0YWJsZSBEYXRhIFZlcnNpb246IDIxMQorTGVhZGVyIFJvdXRlciBJRDogNjAKK0RvbmUKK2BgYAorCisjIyMgbGVhZGVyd2VpZ2h0CisKK0dldCB0aGUgVGhyZWFkIExlYWRlciBXZWlnaHQuCisKK2BgYGJhc2gKKz4gbGVhZGVyd2VpZ2h0CisxMjgKK0RvbmUKK2BgYAorCisjIyMgbGVhZGVyd2VpZ2h0IFw8d2VpZ2h0XD4KKworU2V0IHRoZSBUaHJlYWQgTGVhZGVyIFdlaWdodC4KKworYGBgYmFzaAorPiBsZWFkZXJ3ZWlnaHQgMTI4CitEb25lCitgYGAKKworIyMjIGxpbmtxdWFsaXR5IFw8ZXh0YWRkclw+CisKK0dldCB0aGUgbGluayBxdWFsaXR5IG9uIHRoZSBsaW5rIHRvIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcy4KKworYGBgYmFzaAorPiBsaW5rcXVhbGl0eSAzNmMxZGQ3YTRmNTIwMWZmCiszCitEb25lCitgYGAKKworIyMjIGxpbmtxdWFsaXR5IFw8ZXh0YWRkclw+IFw8bGlua3F1YWxpdHlcPgorCitTZXQgdGhlIGxpbmsgcXVhbGl0eSBvbiB0aGUgbGluayB0byBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MuCisKK2BgYGJhc2gKKz4gbGlua3F1YWxpdHkgMzZjMWRkN2E0ZjUyMDFmZiAzCitEb25lCitgYGAKKworIyMjIG1hc3RlcmtleQorCitHZXQgdGhlIFRocmVhZCBNYXN0ZXIgS2V5IHZhbHVlLgorCitgYGBiYXNoCis+IG1hc3RlcmtleQorMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKK0RvbmUKK2BgYAorCisjIyMgbWFzdGVya2V5IFw8a2V5XD4KKworU2V0IHRoZSBUaHJlYWQgTWFzdGVyIEtleSB2YWx1ZS4KKworYGBgYmFzaAorPiBtYXN0ZXJrZXkgMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYKK0RvbmUKK2BgYAorCisjIyMgbW9kZQorCitHZXQgdGhlIFRocmVhZCBEZXZpY2UgTW9kZSB2YWx1ZS4KKworKiByOiByeC1vbi13aGVuLWlkbGUKKyogczogU2VjdXJlIElFRUUgODAyLjE1LjQgZGF0YSByZXF1ZXN0cworKiBkOiBGdWxsIEZ1bmN0aW9uIERldmljZQorKiBuOiBGdWxsIE5ldHdvcmsgRGF0YQorCitgYGBiYXNoCis+IG1vZGUKK3JzZG4KK0RvbmUKK2BgYAorCisjIyMgbW9kZSBbcnNkbl0KKworU2V0IHRoZSBUaHJlYWQgRGV2aWNlIE1vZGUgdmFsdWUuCisKKyogcjogcngtb24td2hlbi1pZGxlCisqIHM6IFNlY3VyZSBJRUVFIDgwMi4xNS40IGRhdGEgcmVxdWVzdHMKKyogZDogRnVsbCBGdW5jdGlvbiBEZXZpY2UKKyogbjogRnVsbCBOZXR3b3JrIERhdGEKKworYGBgYmFzaAorPiBtb2RlIHJzZG4KK0RvbmUKK2BgYAorCisjIyMgbmV0ZGF0YXJlZ2lzdGVyCisKK1JlZ2lzdGVyIGxvY2FsIG5ldHdvcmsgZGF0YSB3aXRoIFRocmVhZCBMZWFkZXIuCisKK2BgYGJhc2gKKz4gbmV0ZGF0YXJlZ2lzdGVyCitEb25lCitgYGAKKworIyMjIG5ldHdvcmtkaWFnbm9zdGljIGdldCBcPGFkZHJcPiBcPHR5cGVcPiAuLgorCitTZW5kIG5ldHdvcmsgZGlhZ25vc3RpYyByZXF1ZXN0IHRvIHJldHJpZXZlIHRsdiBvZiBcPHR5cGVcPnMuCisKK0lmIFw8YWRkclw+IGlzIHVuaWNhc3QgYWRkcmVzcywgYERpYWdub3N0aWMgR2V0YCB3aWxsIGJlIHNlbnQuCitpZiBcPGFkZHJcPiBpcyBtdWx0aWNhc3QgYWRkcmVzcywgYERpYWdub3N0aWMgUXVlcnlgIHdpbGwgYmUgc2VudC4KKworYGBgYmFzaAorPiBuZXR3b3JrZGlhZ25vc3RpYyBnZXQgZmRkZTphZDAwOmJlZWY6MDowOmZmOmZlMDA6ZjQwMCAwIDEgNgorRElBR19HRVQucnNwOiAwMDA4OGUxOGFkMTdhMjRiMGI3NDAxMDJmNDAwMDYwODQxZGNiODJkNDBiYWM2M2QKKworPiBuZXR3b3JrZGlhZ25vc3RpYyBnZXQgZmYwMjo6MSAwIDEKK0RJQUdfR0VULnJzcDogMDAwODU2N2UzMWE3OTY2N2E4Y2MwMTAyZjAwMAorRElBR19HRVQucnNwOiAwMDA4YWFhN2U1ODQ3NTllNGU2NDAxMDI1NDAwCitgYGAKKworIyMjIG5ldHdvcmtkaWFnbm9zdGljIHJlc2V0IFw8YWRkclw+IFw8dHlwZVw+IC4uCisKK1NlbmQgbmV0d29yayBkaWFnbm9zdGljIHJlcXVlc3QgdG8gcmVzZXQgXDxhZGRyXD4ncyB0bHYgb2YgXDx0eXBlXD5zLiBDdXJyZW50bHkgb25seSBgTUFDIENvdW50ZXJzYCg5KSBpcyBzdXBwb3J0ZWQuCisKK2BgYGJhc2gKKz4gZGlhZ25vc3RpYyByZXNldCBmZDAwOmRiODo6ZmY6ZmUwMDowIDkKK0RvbmUKK2BgYAorCisjIyMgbmV0d29ya2lkdGltZW91dAorCitHZXQgdGhlIE5FVFdPUktfSURfVElNRU9VVCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgUm91dGVyIHJvbGUuICAKKworYGBgYmFzaAorPiBuZXR3b3JraWR0aW1lb3V0CisxMjAKK0RvbmUKK2BgYAorCisjIyMgbmV0d29ya2lkdGltZW91dCBcPHRpbWVvdXRcPgorCitTZXQgdGhlIE5FVFdPUktfSURfVElNRU9VVCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgUm91dGVyIHJvbGUuICAKKworYGBgYmFzaAorPiBuZXR3b3JraWR0aW1lb3V0IDEyMAorRG9uZQorYGBgCisKKyMjIyBuZXR3b3JrbmFtZQorCitHZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuICAKKworYGBgYmFzaAorPiBuZXR3b3JrbmFtZQorT3BlblRocmVhZAorRG9uZQorYGBgCisKKyMjIyBuZXR3b3JrbmFtZSBcPG5hbWVcPgorCitTZXQgdGhlIFRocmVhZCBOZXR3b3JrIE5hbWUuICAKKworYGBgYmFzaAorPiBuZXR3b3JrbmFtZSBPcGVuVGhyZWFkCitEb25lCitgYGAKKworIyMjIHBhbmlkCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBQQU4gSUQgdmFsdWUuCisKK2BgYGJhc2gKKz4gcGFuaWQKKzB4ZGVhZAorRG9uZQorYGBgCisKKyMjIyBwYW5pZCBcPHBhbmlkXD4KKworU2V0IHRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRCB2YWx1ZS4KKworYGBgYmFzaAorPiBwYW5pZCAweGRlYWQKK0RvbmUKK2BgYAorCisjIyMgcGFyZW50CisKK0dldCB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyIGFzIHBhcmVudC4KKworYGBgYmFzaAorPiBwYXJlbnQKK0V4dCBBZGRyOiBiZTE4NTdjNmMyMWRjZTU1CitSbG9jOiA1YzAwCitMaW5rIFF1YWxpdHkgSW46IDMKK0xpbmsgUXVhbGl0eSBPdXQ6IDMKK0FnZTogMjAKK0RvbmUKK2BgYAorCisjIyMgcGFyZW50cHJpb3JpdHkKKworR2V0IHRoZSBhc3NpZ25lZCBwYXJlbnQgcHJpb3JpdHkgdmFsdWUsIC0yIG1lYW5zIG5vdCBhc3NpZ25lZC4KKworYGBgYmFzaAorPiBwYXJlbnRwcmlvcml0eQorMQorRG9uZQorYGBgCisKKyMjIyBwYXJlbnRwcmlvcml0eSBcPHBhcmVudHByaW9yaXR5XD4KKworU2V0IHRoZSBhc3NpZ25lZCBwYXJlbnQgcHJpb3JpdHkgdmFsdWU6IDEsIDAsIC0xIG9yIC0yLgorCitgYGBiYXNoCis+IHBhcmVudHByaW9yaXR5IDEKK0RvbmUKK2BgYAorCisjIyMgcGluZyBcPGlwYWRkclw+IFtzaXplXSBbY291bnRdIFtpbnRlcnZhbF0KKworU2VuZCBhbiBJQ01QdjYgRWNobyBSZXF1ZXN0LgorCitgYGBiYXNoCis+IHBpbmcgZmRkZTphZDAwOmJlZWY6MDo1NTg6ZjU2YjpkNjg4Ojc5OQorMTYgYnl0ZXMgZnJvbSBmZGRlOmFkMDA6YmVlZjowOjU1ODpmNTZiOmQ2ODg6Nzk5OiBpY21wX3NlcT0xIGhsaW09NjQgdGltZT0yOG1zCitgYGAKKworIyMjIHBpbmcgc3RvcAorCitTdG9wIHNlbmRpbmcgSUNNUHY2IEVjaG8gUmVxdWVzdHMuCisKK2BgYGJhc2gKKz4gcGluZyBzdG9wCitEb25lCitgYGAKKworIyMjIHBvbGxwZXJpb2QKKworR2V0IHRoZSBjdXN0b21pemVkIGRhdGEgcG9sbCBwZXJpb2Qgb2Ygc2xlZXB5IGVuZCBkZXZpY2UgKHNlY29uZHMpLiBPbmx5IGZvciBjZXJ0aWZpY2F0aW9uIHRlc3QKKworYGBgYmFzaAorPiBwb2xscGVyaW9kCiswCitEb25lCitgYGAKKworIyMjIHBvbGxwZXJpb2QgXDxwb2xscGVyaW9kXD4KKworU2V0IHRoZSBjdXN0b21pemVkIGRhdGEgcG9sbCBwZXJpb2QgZm9yIHNsZWVweSBlbmQgZGV2aWNlIChzZWNvbmRzKS4gT25seSBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0CisKK2BgYGJhc2gKKz4gcG9sbHBlcmlvZCAxMAorRG9uZQorYGBgCisKKyMjIyBwcmVmaXggYWRkIFw8cHJlZml4XD4gW3B2ZGNzcl0gW3ByZl0KKworQWRkIGEgdmFsaWQgcHJlZml4IHRvIHRoZSBOZXR3b3JrIERhdGEuCisKKyogcDogUHJlZmVycmVkIGZsYWcKKyogYTogU3RhdGVsZXNzIElQdjYgQWRkcmVzcyBBdXRvY29uZmlndXJhdGlvbiBmbGFnCisqIGQ6IERIQ1B2NiBJUHY2IEFkZHJlc3MgQ29uZmlndXJhdGlvbiBmbGFnCisqIGM6IERIQ1B2NiBPdGhlciBDb25maWd1cmF0aW9uIGZsYWcKKyogcjogRGVmYXVsdCBSb3V0ZSBmbGFnCisqIG86IE9uIE1lc2ggZmxhZworKiBzOiBTdGFibGUgZmxhZworKiBwcmY6IERlZmF1bHQgcm91dGVyIHByZWZlcmVuY2UsIHdoaWNoIG1heSBiZSAnaGlnaCcsICdtZWQnLCBvciAnbG93Jy4KKworYGBgYmFzaAorPiBwcmVmaXggYWRkIDIwMDE6ZGVhZDpiZWVmOmNhZmU6Oi82NCBwYXJvcyBtZWQKK0RvbmUKK2BgYAorCisjIyMgcHJlZml4IHJlbW92ZSBcPHByZWZpeFw+CisKK0ludmFsaWRhdGUgYSBwcmVmaXggaW4gdGhlIE5ldHdvcmsgRGF0YS4KKworYGBgYmFzaAorPiBwcmVmaXggcmVtb3ZlIDIwMDE6ZGVhZDpiZWVmOmNhZmU6Oi82NAorRG9uZQorYGBgCisKKyMjIyBwcm9taXNjdW91cworCitHZXQgcmFkaW8gcHJvbWlzY3VvdXMgcHJvcGVydHkuCisKK2BgYGJhc2gKKz4gcHJvbWlzY3VvdXMKK0Rpc2FibGVkCitEb25lCitgYGAKKworIyMjIHByb21pc2N1b3VzIGVuYWJsZQorCitFbmFibGUgcmFkaW8gcHJvbWlzY3VvdXMgb3BlcmF0aW9uIGFuZCBwcmludCByYXcgcGFja2V0IGNvbnRlbnQuCisKK2BgYGJhc2gKKz4gcHJvbWlzY3VvdXMgZW5hYmxlCitEb25lCitgYGAKKworIyMjIHByb21pc2N1b3VzIGRpc2FibGUKKworRGlzYWJsZSByYWRpbyBwcm9taXNjdW91cyBvcGVyYXRpb24uCisKK2BgYGJhc2gKKz4gcHJvbWlzY3VvdXMgZGlzYWJsZQorRG9uZQorYGBgCisKKyMjIyByZWxlYXNlcm91dGVyaWQgXDxyb3V0ZXJpZFw+CitSZWxlYXNlIGEgUm91dGVyIElEIHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlIExlYWRlciByb2xlLgorCitgYGBiYXNoCis+IHJlbGVhc2Vyb3V0ZXJpZCAxNgorRG9uZQorYGBgCisKKyMjIyByZXNldAorU2lnbmFsIGEgcGxhdGZvcm0gcmVzZXQuCisKK2BgYGJhc2gKKz4gcmVzZXQKK2BgYAorCisjIyMgcmxvYzE2CisKK0dldCB0aGUgVGhyZWFkIFJMT0MxNiB2YWx1ZS4KKworYGBgYmFzaAorPiBybG9jMTYKKzB4ZGVhZAorRG9uZQorYGBgCisKKyMjIyByb3V0ZSBhZGQgXDxwcmVmaXhcPiBbc10gW3ByZl0KKworQWRkIGEgdmFsaWQgcHJlZml4IHRvIHRoZSBOZXR3b3JrIERhdGEuCisKKyogczogU3RhYmxlIGZsYWcKKyogcHJmOiBEZWZhdWx0IFJvdXRlciBQcmVmZXJlbmNlLCB3aGljaCBtYXkgYmU6ICdoaWdoJywgJ21lZCcsIG9yICdsb3cnLgorCitgYGBiYXNoCis+IHJvdXRlIGFkZCAyMDAxOmRlYWQ6YmVlZjpjYWZlOjovNjQgcyBtZWQKK0RvbmUKK2BgYAorCisjIyMgcm91dGUgcmVtb3ZlIFw8cHJlZml4XD4KKworSW52YWxpZGF0ZSBhIHByZWZpeCBpbiB0aGUgTmV0d29yayBEYXRhLgorCitgYGBiYXNoCis+IHJvdXRlIHJlbW92ZSAyMDAxOmRlYWQ6YmVlZjpjYWZlOjovNjQKK0RvbmUKK2BgYAorCisjIyMgcm91dGVyIGxpc3QKKworTGlzdCBhbGxvY2F0ZWQgUm91dGVyIElEcy4KKworYGBgYmFzaAorPiByb3V0ZXIgbGlzdAorOCAyNCA1MAorRG9uZQorYGBgCisKKyMjIyByb3V0ZXIgdGFibGUKKworUHJpbnQgdGFibGUgb2Ygcm91dGVycy4KKworYGBgYmFzaAorPiByb3V0ZXIgdGFibGUKK3wgSUQgfCBSTE9DMTYgfCBOZXh0IEhvcCB8IFBhdGggQ29zdCB8IExRIEluIHwgTFEgT3V0IHwgQWdlIHwgRXh0ZW5kZWQgTUFDICAgICB8CisrLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKworfCAyMSB8IDB4NTQwMCB8ICAgICAgIDIxIHwgICAgICAgICAwIHwgICAgIDMgfCAgICAgIDMgfCAgIDUgfCBkMjhkN2Y4NzU4ODhmY2NiIHwKK3wgNTYgfCAweGUwMDAgfCAgICAgICA1NiB8ICAgICAgICAgMCB8ICAgICAwIHwgICAgICAwIHwgMTgyIHwgZjJkOTJhODJjOGQ4ZmU0MyB8CitEb25lCitgYGAKKworIyMjIHJvdXRlciBcPGlkXD4KKworUHJpbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgYSBUaHJlYWQgUm91dGVyLiAgVGhlIGBpZGAgbWF5IGJlIGEgUm91dGVyIElEIG9yIGFuIFJMT0MxNi4KKworYGBgYmFzaAorPiByb3V0ZXIgNTAKK0FsbG9jOiAxCitSb3V0ZXIgSUQ6IDUwCitSbG9jOiBjODAwCitOZXh0IEhvcDogYzgwMAorTGluazogMQorRXh0IEFkZHI6IGUyYjM1NDA1OTBiMGZkODcKK0Nvc3Q6IDAKK0xpbmsgUXVhbGl0eSBJbjogMworTGluayBRdWFsaXR5IE91dDogMworQWdlOiAzCitEb25lCitgYGAKKworYGBgYmFzaAorPiByb3V0ZXIgMHhjODAwCitBbGxvYzogMQorUm91dGVyIElEOiA1MAorUmxvYzogYzgwMAorTmV4dCBIb3A6IGM4MDAKK0xpbms6IDEKK0V4dCBBZGRyOiBlMmIzNTQwNTkwYjBmZDg3CitDb3N0OiAwCitMaW5rIFF1YWxpdHkgSW46IDMKK0xpbmsgUXVhbGl0eSBPdXQ6IDMKK0FnZTogNworRG9uZQorYGBgCisKKyMjIyByb3V0ZXJkb3duZ3JhZGV0aHJlc2hvbGQKKworR2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCB2YWx1ZS4KKworYGBgYmFzaAorPiByb3V0ZXJkb3duZ3JhZGV0aHJlc2hvbGQKKzIzCitEb25lCitgYGAKKworIyMjIHJvdXRlcmRvd25ncmFkZXRocmVzaG9sZCBcPHRocmVzaG9sZFw+CisKK1NldCB0aGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisKK2BgYGJhc2gKKz4gcm91dGVyZG93bmdyYWRldGhyZXNob2xkIDIzCitEb25lCitgYGAKKworIyMjIHJvdXRlcnJvbGUKKworSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdXRlciByb2xlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisKK2BgYGJhc2gKKz4gcm91dGVycm9sZQorRW5hYmxlZAorRG9uZQorYGBgCisKKyMjIyByb3V0ZXJyb2xlIGVuYWJsZQorCitFbmFibGUgdGhlIHJvdXRlciByb2xlLgorCitgYGBiYXNoCis+IHJvdXRlcnJvbGUgZW5hYmxlCitEb25lCitgYGAKKworIyMjIHJvdXRlcnJvbGUgZGlzYWJsZQorCitEaXNhYmxlIHRoZSByb3V0ZXIgcm9sZS4KKworYGBgYmFzaAorPiByb3V0ZXJyb2xlIGRpc2FibGUKK0RvbmUKK2BgYAorCisjIyMgcm91dGVyc2VsZWN0aW9uaml0dGVyCisKK0dldCB0aGUgUk9VVEVSX1NFTEVDVElPTl9KSVRURVIgdmFsdWUuCisKK2BgYGJhc2gKKz4gcm91dGVyc2VsZWN0aW9uaml0dGVyCisxMjAKK0RvbmUKK2BgYAorCisjIyMgcm91dGVyc2VsZWN0aW9uaml0dGVyIFw8aml0dGVyXD4KKworU2V0IHRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiB2YWx1ZS4KKworYGBgYmFzaAorPiByb3V0ZXJzZWxlY3Rpb25qaXR0ZXIgMTIwCitEb25lCitgYGAKKworIyMjIHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQKKworR2V0IHRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisKK2BgYGJhc2gKKz4gcm91dGVydXBncmFkZXRocmVzaG9sZAorMTYKK0RvbmUKK2BgYAorCisjIyMgcm91dGVydXBncmFkZXRocmVzaG9sZCBcPHRocmVzaG9sZFw+CisKK1NldCB0aGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorCitgYGBiYXNoCis+IHJvdXRlcnVwZ3JhZGV0aHJlc2hvbGQgMTYKK0RvbmUKK2BgYAorCisjIyMgc2NhbiBcW2NoYW5uZWxcXQorCitQZXJmb3JtIGFuIElFRUUgODAyLjE1LjQgQWN0aXZlIFNjYW4uCisKKyogY2hhbm5lbDogVGhlIGNoYW5uZWwgdG8gc2NhbiBvbi4gIElmIG5vIGNoYW5uZWwgaXMgcHJvdmlkZWQsIHRoZSBhY3RpdmUgc2NhbiB3aWxsIGNvdmVyIGFsbCB2YWxpZCBjaGFubmVscy4KKworYGBgYmFzaAorPiBzY2FuCit8IEogfCBOZXR3b3JrIE5hbWUgICAgIHwgRXh0ZW5kZWQgUEFOICAgICB8IFBBTiAgfCBNQUMgQWRkcmVzcyAgICAgIHwgQ2ggfCBkQm0gfCBMUUkgfAorKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLSstLS0tLSsKK3wgMCB8IE9wZW5UaHJlYWQgICAgICAgfCBkZWFkMDBiZWVmMDBjYWZlIHwgZmZmZiB8IGYxZDkyYTgyYzhkOGZlNDMgfCAxMSB8IC0yMCB8ICAgMCB8CitEb25lCitgYGAKKworIyMjIHNpbmdsZXRvbgorUmV0dXJuIHRydWUgd2hlbiB0aGVyZSBhcmUgbm8gb3RoZXIgbm9kZXMgaW4gdGhlIG5ldHdvcmssIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuCisKK2BgYGJhc2gKKz4gc2luZ2xldG9uCit0cnVlIG9yIGZhbHNlCitEb25lCitgYGAKKworIyMjIHN0YXRlCitSZXR1cm4gc3RhdGUgb2YgY3VycmVudCBzdGF0ZS4KKworYGBgYmFzaAorPiBzdGF0ZQorb2ZmbGluZSwgZGlzYWJsZWQsIGRldGFjaGVkLCBjaGlsZCwgcm91dGVyIG9yIGxlYWRlcgorRG9uZQorYGBgCisKKyMjIyBzdGF0ZSA8c3RhdGU+CitUcnkgdG8gc3dpdGNoIHRvIHN0YXRlIGBkZXRhY2hlZGAsIGBjaGlsZGAsIGByb3V0ZXJgIG9yIGBsZWFkZXJgLgorCitgYGBiYXNoCis+IHN0YXRlIGxlYWRlcgorRG9uZQorYGBgCisKKyMjIyB0aHJlYWQgc3RhcnQKKworRW5hYmxlIFRocmVhZCBwcm90b2NvbCBvcGVyYXRpb24gYW5kIGF0dGFjaCB0byBhIFRocmVhZCBuZXR3b3JrLgorCitgYGBiYXNoCis+IHRocmVhZCBzdGFydAorRG9uZQorYGBgCisKKyMjIyB0aHJlYWQgc3RvcAorCitEaXNhYmxlIFRocmVhZCBwcm90b2NvbCBvcGVyYXRpb24gYW5kIGRldGFjaCBmcm9tIGEgVGhyZWFkIG5ldHdvcmsuCisKK2BgYGJhc2gKKz4gdGhyZWFkIHN0b3AKK0RvbmUKK2BgYAorCisjIyMgdHhwb3dlcm1heAorCitHZXQgdGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIgaW4gZEJtLgorCitgYGBiYXNoCis+IHR4cG93ZXJtYXgKKy0xMCBkQm0KK0RvbmUKK2BgYAorCisjIyMgdHhwb3dlcm1heCBcPHR4cG93ZXJtYXhcPgorCitTZXQgdGhlIG1heGltdW0gdHJhbnNtaXQgcG93ZXIuCisKK2BgYGJhc2gKKz4gdHhwb3dlcm1heCAtMTAKK0RvbmUKK2BgYAorCisjIyMgdmVyc2lvbgorCitQcmludCB0aGUgYnVpbGQgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKworYGBgYmFzaAorPiB2ZXJzaW9uCitPUEVOVEhSRUFEL2dmNGYyZjA0OyBKdWwgIDEgMjAxNiAxNzowMDowOQorRG9uZQorYGBgCisKKyMjIyB3aGl0ZWxpc3QKKworTGlzdCB0aGUgd2hpdGVsaXN0IGVudHJpZXMuCisKK2BgYGJhc2gKKz4gd2hpdGVsaXN0CitFbmFibGVkCitlMmIzNTQwNTkwYjBmZDg3CitkMzhkN2Y4NzU4ODhmY2NiCitjNDY3YTkwYTIwNjBmYTBlCitEb25lCitgYGAKKworIyMjIHdoaXRlbGlzdCBhZGQgXDxleHRhZGRyXD4KKworQWRkIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgd2hpdGVsaXN0LgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBhZGQgZGVhZDAwYmVlZjAwY2FmZQorRG9uZQorYGBgCisKKyMjIyB3aGl0ZWxpc3QgY2xlYXIKKworQ2xlYXIgYWxsIGVudHJpZXMgZnJvbSB0aGUgd2hpdGVsaXN0LgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBjbGVhcgorRG9uZQorYGBgCisKKyMjIyB3aGl0ZWxpc3QgZGlzYWJsZQorCitEaXNhYmxlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyaW5nLgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBkaXNhYmxlCitEb25lCitgYGAKKworIyMjIHdoaXRlbGlzdCBlbmFibGUKKworRW5hYmxlIE1BQyB3aGl0ZWxpc3QgZmlsdGVyaW5nLgorCitgYGBiYXNoCis+IHdoaXRlbGlzdCBlbmFibGUKK0RvbmUKK2BgYAorCisjIyMgd2hpdGVsaXN0IHJlbW92ZSBcPGV4dGFkZHJcPgorCitSZW1vdmUgYW4gSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzIGZyb20gdGhlIHdoaXRlbGlzdC4KKworYGBgYmFzaAorPiB3aGl0ZWxpc3QgcmVtb3ZlIGRlYWQwMGJlZWYwMGNhZmUKK0RvbmUKK2BgYAorCisjIyMgZGlhZworCitEaWFnbm9zdGljcyBtb2R1bGUgaXMgZW5hYmxlZCBvbmx5IHdoZW4gYnVpbGRpbmcgT3BlblRocmVhZCB3aXRoIC0tZW5hYmxlLWRpYWcgb3B0aW9uLgorR28gW2RpYWdub3N0aWNzIG1vZHVsZV1bMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1sxXTouLi9kaWFnL1JFQURNRS5tZApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGkuY3BwIGIvc3JjL2NsaS9jbGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjQ5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaS5jcHAKQEAgLTAsMCArMSwzMTk2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjbGkuaHBwIgorCisjaWZkZWYgT1RETEwKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb21taXNzaW9uZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9qb2luZXIuaD4KKworI2lmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSA8b3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisjaW5jbHVkZSA8b3BlbnRocmVhZC9ib3JkZXJfcm91dGVyLmg+CisjZW5kaWYKKworI2lmbmRlZiBPVERMTAorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGhjcDZfY2xpZW50Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL25ldy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjZW5kaWYKKworI2luY2x1ZGUgImNsaV9kYXRhc2V0LmhwcCIKKyNpbmNsdWRlICJjbGlfdWFydC5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisjaW5jbHVkZSAiY2xpX2NvYXAuaHBwIgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgQ2xpIHsKKworY29uc3Qgc3RydWN0IENvbW1hbmQgSW50ZXJwcmV0ZXI6OnNDb21tYW5kc1tdID0KK3sKKyAgICB7ICJoZWxwIiwgJkludGVycHJldGVyOjpQcm9jZXNzSGVscCB9LAorICAgIHsgImF1dG9zdGFydCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0F1dG9TdGFydCB9LAorICAgIHsgImJsYWNrbGlzdCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0JsYWNrbGlzdCB9LAorICAgIHsgImJ1ZmZlcmluZm8iLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NCdWZmZXJJbmZvIH0sCisgICAgeyAiY2hhbm5lbCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NoYW5uZWwgfSwKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImNoaWxkIiwgJkludGVycHJldGVyOjpQcm9jZXNzQ2hpbGQgfSwKKyAgICB7ICJjaGlsZG1heCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NoaWxkTWF4IH0sCisjZW5kaWYKKyAgICB7ICJjaGlsZHRpbWVvdXQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NDaGlsZFRpbWVvdXQgfSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisgICAgeyAiY29hcCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NvYXAgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImNvbW1pc3Npb25lciIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NvbW1pc3Npb25lciB9LAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB7ICJjb250ZXh0cmV1c2VkZWxheSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0NvbnRleHRJZFJldXNlRGVsYXkgfSwKKyNlbmRpZgorICAgIHsgImNvdW50ZXIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NDb3VudGVycyB9LAorICAgIHsgImRhdGFzZXQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NEYXRhc2V0IH0sCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB7ICJkZWxheXRpbWVybWluIiwgJkludGVycHJldGVyOjpQcm9jZXNzRGVsYXlUaW1lck1pbn0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisgICAgeyAiZGlhZyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0RpYWcgfSwKKyNlbmRpZgorICAgIHsgImRpc2NvdmVyIiwgJkludGVycHJldGVyOjpQcm9jZXNzRGlzY292ZXIgfSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgeyAiZG5zIiwgJkludGVycHJldGVyOjpQcm9jZXNzRG5zIH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImVpZGNhY2hlIiwgJkludGVycHJldGVyOjpQcm9jZXNzRWlkQ2FjaGUgfSwKKyNlbmRpZgorICAgIHsgImV1aTY0IiwgJkludGVycHJldGVyOjpQcm9jZXNzRXVpNjQgfSwKKyNpZmRlZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisgICAgeyAiZXhpdCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0V4aXQgfSwKKyNlbmRpZgorICAgIHsgImV4dGFkZHIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NFeHRBZGRyZXNzIH0sCisgICAgeyAiZXh0cGFuaWQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NFeHRQYW5JZCB9LAorICAgIHsgImZhY3RvcnlyZXNldCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0ZhY3RvcnlSZXNldCB9LAorICAgIHsgImhhc2htYWNhZGRyIiwgJkludGVycHJldGVyOjpQcm9jZXNzSGFzaE1hY0FkZHJlc3MgfSwKKyAgICB7ICJpZmNvbmZpZyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0lmY29uZmlnIH0sCisjaWZkZWYgT1RETEwKKyAgICB7ICJpbnN0YW5jZSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0luc3RhbmNlIH0sCisgICAgeyAiaW5zdGFuY2VsaXN0IiwgJkludGVycHJldGVyOjpQcm9jZXNzSW5zdGFuY2VMaXN0IH0sCisjZW5kaWYKKyAgICB7ICJpcGFkZHIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcEFkZHIgfSwKKyNpZm5kZWYgT1RETEwKKyAgICB7ICJpcG1hZGRyIiwgJkludGVycHJldGVyOjpQcm9jZXNzSXBNdWx0aWNhc3RBZGRyIH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyAgICB7ICJqb2luZXIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NKb2luZXIgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAiam9pbmVycG9ydCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0pvaW5lclBvcnQgfSwKKyNlbmRpZgorICAgIHsgImtleXNlcXVlbmNlIiwgJkludGVycHJldGVyOjpQcm9jZXNzS2V5U2VxdWVuY2UgfSwKKyAgICB7ICJsZWFkZXJkYXRhIiwgJkludGVycHJldGVyOjpQcm9jZXNzTGVhZGVyRGF0YSB9LAorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAibGVhZGVycGFydGl0aW9uaWQiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NMZWFkZXJQYXJ0aXRpb25JZCB9LAorICAgIHsgImxlYWRlcndlaWdodCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc0xlYWRlcldlaWdodCB9LAorI2VuZGlmCisgICAgeyAibGlua3F1YWxpdHkiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NMaW5rUXVhbGl0eSB9LAorICAgIHsgIm1hc3RlcmtleSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc01hc3RlcktleSB9LAorICAgIHsgIm1vZGUiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NNb2RlIH0sCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHsgIm5ldGRhdGFyZWdpc3RlciIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEYXRhUmVnaXN0ZXIgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICB7ICJuZXR3b3JrZGlhZ25vc3RpYyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEaWFnbm9zdGljIH0sCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAibmV0d29ya2lkdGltZW91dCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtJZFRpbWVvdXQgfSwKKyNlbmRpZgorICAgIHsgIm5ldHdvcmtuYW1lIiwgJkludGVycHJldGVyOjpQcm9jZXNzTmV0d29ya05hbWUgfSwKKyAgICB7ICJwYW5pZCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1BhbklkIH0sCisgICAgeyAicGFyZW50IiwgJkludGVycHJldGVyOjpQcm9jZXNzUGFyZW50IH0sCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB7ICJwYXJlbnRwcmlvcml0eSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1BhcmVudFByaW9yaXR5IH0sCisjZW5kaWYKKyNpZm5kZWYgT1RETEwKKyAgICB7ICJwaW5nIiwgJkludGVycHJldGVyOjpQcm9jZXNzUGluZyB9LAorI2VuZGlmCisgICAgeyAicG9sbHBlcmlvZCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1BvbGxQZXJpb2QgfSwKKyNpZm5kZWYgT1RETEwKKyAgICB7ICJwcm9taXNjdW91cyIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1Byb21pc2N1b3VzIH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgeyAicHJlZml4IiwgJkludGVycHJldGVyOjpQcm9jZXNzUHJlZml4IH0sCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgInBza2MiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NQU0tjIH0sCisgICAgeyAicmVsZWFzZXJvdXRlcmlkIiwgJkludGVycHJldGVyOjpQcm9jZXNzUmVsZWFzZVJvdXRlcklkIH0sCisjZW5kaWYKKyAgICB7ICJyZXNldCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1Jlc2V0IH0sCisgICAgeyAicmxvYzE2IiwgJkludGVycHJldGVyOjpQcm9jZXNzUmxvYzE2IH0sCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHsgInJvdXRlIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGUgfSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAicm91dGVyIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGVyIH0sCisgICAgeyAicm91dGVyZG93bmdyYWRldGhyZXNob2xkIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGVyRG93bmdyYWRlVGhyZXNob2xkIH0sCisgICAgeyAicm91dGVycm9sZSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1JvdXRlclJvbGUgfSwKKyAgICB7ICJyb3V0ZXJzZWxlY3Rpb25qaXR0ZXIiLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIgfSwKKyAgICB7ICJyb3V0ZXJ1cGdyYWRldGhyZXNob2xkIiwgJkludGVycHJldGVyOjpQcm9jZXNzUm91dGVyVXBncmFkZVRocmVzaG9sZCB9LAorI2VuZGlmCisgICAgeyAic2NhbiIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1NjYW4gfSwKKyAgICB7ICJzaW5nbGV0b24iLCAmSW50ZXJwcmV0ZXI6OlByb2Nlc3NTaW5nbGV0b24gfSwKKyAgICB7ICJzdGF0ZSIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1N0YXRlIH0sCisgICAgeyAidGhyZWFkIiwgJkludGVycHJldGVyOjpQcm9jZXNzVGhyZWFkIH0sCisgICAgeyAidHhwb3dlcm1heCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1R4UG93ZXJNYXggfSwKKyAgICB7ICJ2ZXJzaW9uIiwgJkludGVycHJldGVyOjpQcm9jZXNzVmVyc2lvbiB9LAorICAgIHsgIndoaXRlbGlzdCIsICZJbnRlcnByZXRlcjo6UHJvY2Vzc1doaXRlbGlzdCB9LAorfTsKKworI2lmZGVmIE9URExMCit1aW50MzJfdCBvdFBsYXRSYW5kb21HZXQodm9pZCkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KXJhbmQoKTsKK30KKyNlbHNlCit2b2lkIG90RnJlZU1lbW9yeShjb25zdCB2b2lkICopCit7CisgICAgLy8gTm8tb3Agb24gc3lzdGVtcyBydW5uaW5nIE9wZW5UaHJlYWQgaW4tcHJvYworfQorI2VuZGlmCisKK3RlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBvdFB0cgoreworICAgIFQgKnB0cjsKK3B1YmxpYzoKKyAgICBvdFB0cihUICpfcHRyKSA6IHB0cihfcHRyKSB7IH0KKyAgICB+b3RQdHIoKSB7IGlmIChwdHIpIHsgb3RGcmVlTWVtb3J5KHB0cik7IH0gfQorICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQorICAgIG9wZXJhdG9yIFQgKigpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQorICAgIFQgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBwdHI7IH0KK307CisKK3R5cGVkZWYgb3RQdHI8Y29uc3Qgb3RNYWNDb3VudGVycz4gb3RNYWNDb3VudGVyc1B0cjsKK3R5cGVkZWYgb3RQdHI8Y29uc3Qgb3ROZXRpZkFkZHJlc3M+IG90TmV0aWZBZGRyZXNzUHRyOwordHlwZWRlZiBvdFB0cjxjb25zdCB1aW50OF90PiBvdEJ1ZmZlclB0cjsKK3R5cGVkZWYgb3RQdHI8Y29uc3QgY2hhcj4gb3RTdHJpbmdQdHI7CisKK0ludGVycHJldGVyOjpJbnRlcnByZXRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpOgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKyAgICBtQ29hcCgqdGhpcyksCisjZW5kaWYKKyAgICBtU2VydmVyKE5VTEwpLAorI2lmZGVmIE9URExMCisgICAgbUFwaUluc3RhbmNlKG90QXBpSW5pdCgpKSwKKyAgICBtSW5zdGFuY2VJbmRleCgwKSwKKyNlbHNlCisgICAgbUxlbmd0aCg4KSwKKyAgICBtQ291bnQoMSksCisgICAgbUludGVydmFsKDEwMDApLAorICAgIG1QaW5nVGltZXIoYUluc3RhbmNlLT5tSXA2Lm1UaW1lclNjaGVkdWxlciwgJkludGVycHJldGVyOjpzX0hhbmRsZVBpbmdUaW1lciwgdGhpcyksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIG1SZXNvbHZpbmdJblByb2dyZXNzKDApLAorI2VuZGlmCisjZW5kaWYKKyAgICBtSW5zdGFuY2UoYUluc3RhbmNlKQoreworI2lmZGVmIE9URExMCisgICAgYXNzZXJ0KG1BcGlJbnN0YW5jZSk7CisgICAgQ2FjaGVJbnN0YW5jZXMoKTsKKyNlbHNlCisgICAgbWVtc2V0KG1TbGFhY0FkZHJlc3NlcywgMCwgc2l6ZW9mKG1TbGFhY0FkZHJlc3NlcykpOworICAgIG90U2V0U3RhdGVDaGFuZ2VkQ2FsbGJhY2sobUluc3RhbmNlLCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQsIHRoaXMpOworI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICBvdFRocmVhZFNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sobUluc3RhbmNlLCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlLCB0aGlzKTsKKyNlbmRpZgorCisgICAgbUljbXBIYW5kbGVyLm1SZWNlaXZlQ2FsbGJhY2sgPSBJbnRlcnByZXRlcjo6c19IYW5kbGVJY21wUmVjZWl2ZTsKKyAgICBtSWNtcEhhbmRsZXIubUNvbnRleHQgICAgICAgICA9IHRoaXM7CisgICAgb3RJY21wNlJlZ2lzdGVySGFuZGxlcihtSW5zdGFuY2UsICZtSWNtcEhhbmRsZXIpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgbWVtc2V0KG1EaGNwQWRkcmVzc2VzLCAwLCBzaXplb2YobURoY3BBZGRyZXNzZXMpKTsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgbWVtc2V0KG1SZXNvbHZpbmdIb3N0bmFtZSwgMCwgc2l6ZW9mKG1SZXNvbHZpbmdIb3N0bmFtZSkpOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKworI2VuZGlmCit9CisKK2ludCBJbnRlcnByZXRlcjo6SGV4MkJpbihjb25zdCBjaGFyICphSGV4LCB1aW50OF90ICphQmluLCB1aW50MTZfdCBhQmluTGVuZ3RoKQoreworICAgIHNpemVfdCBoZXhMZW5ndGggPSBzdHJsZW4oYUhleCk7CisgICAgY29uc3QgY2hhciAqaGV4RW5kID0gYUhleCArIGhleExlbmd0aDsKKyAgICB1aW50OF90ICpjdXIgPSBhQmluOworICAgIHVpbnQ4X3QgbnVtQ2hhcnMgPSBoZXhMZW5ndGggJiAxOworICAgIHVpbnQ4X3QgYnl0ZSA9IDA7CisKKyAgICBpZiAoKGhleExlbmd0aCArIDEpIC8gMiA+IGFCaW5MZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKGFIZXggPCBoZXhFbmQpCisgICAgeworICAgICAgICBpZiAoJ0EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdGJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdBJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJ2EnIDw9ICphSGV4ICYmICphSGV4IDw9ICdmJykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAxMCArICgqYUhleCAtICdhJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoJzAnIDw9ICphSGV4ICYmICphSGV4IDw9ICc5JykKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSB8PSAqYUhleCAtICcwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGFIZXgrKzsKKyAgICAgICAgbnVtQ2hhcnMrKzsKKworICAgICAgICBpZiAobnVtQ2hhcnMgPj0gMikKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQ2hhcnMgPSAwOworICAgICAgICAgICAgKmN1cisrID0gYnl0ZTsKKyAgICAgICAgICAgIGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA8PD0gNDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCaW4pOworfQorCit2b2lkIEludGVycHJldGVyOjpBcHBlbmRSZXN1bHQob3RFcnJvciBhRXJyb3IpIGNvbnN0Cit7CisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEb25lXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkVycm9yICVkOiAlc1xyXG4iLCBhRXJyb3IsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6Ok91dHB1dEJ5dGVzKGNvbnN0IHVpbnQ4X3QgKmFCeXRlcywgdWludDhfdCBhTGVuZ3RoKSBjb25zdAoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYUxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDJ4IiwgYUJ5dGVzW2ldKTsKKyAgICB9Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhjaGFyICphcmd2LCBsb25nICZ2YWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgdmFsdWUgPSBzdHJ0b2woYXJndiwgJmVuZHB0ciwgMCk7CisgICAgcmV0dXJuICgqZW5kcHRyID09ICdcMCcpID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX1BBUlNFOworfQorCitvdEVycm9yIEludGVycHJldGVyOjpQYXJzZVVuc2lnbmVkTG9uZyhjaGFyICphcmd2LCB1bnNpZ25lZCBsb25nICZ2YWx1ZSkKK3sKKyAgICBjaGFyICplbmRwdHI7CisgICAgdmFsdWUgPSBzdHJ0b3VsKGFyZ3YsICZlbmRwdHIsIDApOworICAgIHJldHVybiAoKmVuZHB0ciA9PSAnXDAnKSA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9QQVJTRTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0hlbHAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXNcclxuIiwgc0NvbW1hbmRzW2ldLm1OYW1lKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzQXV0b1N0YXJ0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKG90VGhyZWFkR2V0QXV0b1N0YXJ0KG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgidHJ1ZVxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZmFsc2VcclxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJ0cnVlIikgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRTZXRBdXRvU3RhcnQobUluc3RhbmNlLCB0cnVlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJmYWxzZSIpID09IDApCisgICAgeworICAgICAgICBlcnJvciA9IG90VGhyZWFkU2V0QXV0b1N0YXJ0KG1JbnN0YW5jZSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICB9CisKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzQmxhY2tsaXN0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNYWNCbGFja2xpc3RFbnRyeSBlbnRyeTsKKyAgICBpbnQgYXJnY3VyID0gMDsKKyAgICB1aW50OF90IGV4dEFkZHJbOF07CisKKyAgICBpZiAoYXJnY3VyID49IGFyZ2MpCisgICAgeworICAgICAgICBpZiAob3RMaW5rSXNCbGFja2xpc3RFbmFibGVkKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRW5hYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGlzYWJsZWRcclxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3RMaW5rR2V0QmxhY2tsaXN0RW50cnkobUluc3RhbmNlLCBpLCAmZW50cnkpICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbnRyeS5tVmFsaWQgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE91dHB1dEJ5dGVzKGVudHJ5Lm1FeHRBZGRyZXNzLm04LCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImFkZCIpID09IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKythcmdjdXIgPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KEhleDJCaW4oYXJndlthcmdjdXJdLCBleHRBZGRyLCBzaXplb2YoZXh0QWRkcikpID09IHNpemVvZihleHRBZGRyKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgb3RMaW5rQWRkQmxhY2tsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgICAgIFZlcmlmeU9yRXhpdChvdExpbmtBZGRCbGFja2xpc3QobUluc3RhbmNlLCBleHRBZGRyKSA9PSBPVF9FUlJPUl9OT05FLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImNsZWFyIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua0NsZWFyQmxhY2tsaXN0KG1JbnN0YW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJkaXNhYmxlIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua1NldEJsYWNrbGlzdEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJlbmFibGUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMaW5rU2V0QmxhY2tsaXN0RW5hYmxlZChtSW5zdGFuY2UsIHRydWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAicmVtb3ZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2FyZ2N1ciA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2W2FyZ2N1cl0sIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgPT0gc2l6ZW9mKGV4dEFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgb3RMaW5rUmVtb3ZlQmxhY2tsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NCdWZmZXJJbmZvKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RCdWZmZXJJbmZvIGJ1ZmZlckluZm87CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKworICAgIG90TWVzc2FnZUdldEJ1ZmZlckluZm8obUluc3RhbmNlLCAmYnVmZmVySW5mbyk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInRvdGFsOiAlZFxyXG4iLCBidWZmZXJJbmZvLm1Ub3RhbEJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZnJlZTogJWRcclxuIiwgYnVmZmVySW5mby5tRnJlZUJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiNmxvIHNlbmQ6ICVkICVkXHJcbiIsIGJ1ZmZlckluZm8ubTZsb1NlbmRNZXNzYWdlcywgYnVmZmVySW5mby5tNmxvU2VuZEJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiNmxvIHJlYXM6ICVkICVkXHJcbiIsIGJ1ZmZlckluZm8ubTZsb1JlYXNzZW1ibHlNZXNzYWdlcywgYnVmZmVySW5mby5tNmxvUmVhc3NlbWJseUJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiaXA2OiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1JcDZNZXNzYWdlcywgYnVmZmVySW5mby5tSXA2QnVmZmVycyk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJtcGw6ICVkICVkXHJcbiIsIGJ1ZmZlckluZm8ubU1wbE1lc3NhZ2VzLCBidWZmZXJJbmZvLm1NcGxCdWZmZXJzKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIm1sZTogJWQgJWRcclxuIiwgYnVmZmVySW5mby5tTWxlTWVzc2FnZXMsIGJ1ZmZlckluZm8ubU1sZUJ1ZmZlcnMpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiYXJwOiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1BcnBNZXNzYWdlcywgYnVmZmVySW5mby5tQXJwQnVmZmVycyk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJjb2FwOiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1Db2FwTWVzc2FnZXMsIGJ1ZmZlckluZm8ubUNvYXBCdWZmZXJzKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImNvYXAgc2VjdXJlOiAlZCAlZFxyXG4iLCBidWZmZXJJbmZvLm1Db2FwU2VjdXJlTWVzc2FnZXMsIGJ1ZmZlckluZm8ubUNvYXBTZWN1cmVCdWZmZXJzKTsKKworICAgIEFwcGVuZFJlc3VsdChPVF9FUlJPUl9OT05FKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0NoYW5uZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RMaW5rR2V0Q2hhbm5lbChtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBlcnJvciA9IG90TGlua1NldENoYW5uZWwobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDaGlsZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKyAgICB1aW50OF90IG1heENoaWxkcmVuOworICAgIGxvbmcgdmFsdWU7CisgICAgYm9vbCBpc1RhYmxlID0gZmFsc2U7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAibGlzdCIpID09IDAgfHwgKGlzVGFibGUgPSAoc3RyY21wKGFyZ3ZbMF0sICJ0YWJsZSIpID09IDApKSkKKyAgICB7CisgICAgICAgIGlmIChpc1RhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgSUQgIHwgUkxPQzE2IHwgVGltZW91dCAgICB8IEFnZSAgICAgICAgfCBMUSBJbiB8IENfVk4gfFJ8U3xEfE58IEV4dGVuZGVkIE1BQyAgICAgfFxyXG4iKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiKy0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0rLSstKy0rLSstLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiIpOworICAgICAgICB9CisKKyAgICAgICAgbWF4Q2hpbGRyZW4gPSBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihtSW5zdGFuY2UpOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1heENoaWxkcmVuIDsgaSsrKQorICAgICAgICB7CisKKyAgICAgICAgICAgIHN3aXRjaCAob3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KG1JbnN0YW5jZSwgaSwgJmNoaWxkSW5mbykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE9UX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1RfRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoaWxkSW5mby5tVGltZW91dCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGlzVGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkICIsIGNoaWxkSW5mby5tQ2hpbGRJZCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAweCUwNHggIiwgY2hpbGRJbmZvLm1SbG9jMTYpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTEwZCAiLCBjaGlsZEluZm8ubVRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTEwZCAiLCBjaGlsZEluZm8ubUFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAlNWQgIiwgY2hpbGRJbmZvLm1MaW5rUXVhbGl0eUluKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICU0ZCAiLCBjaGlsZEluZm8ubU5ldHdvcmtEYXRhVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCUxZCIsIGNoaWxkSW5mby5tUnhPbldoZW5JZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8JTFkIiwgY2hpbGRJbmZvLm1TZWN1cmVEYXRhUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCUxZCIsIGNoaWxkSW5mby5tRnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8JTFkIiwgY2hpbGRJbmZvLm1GdWxsTmV0d29ya0RhdGEpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgIik7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplb2YoY2hpbGRJbmZvLm1FeHRBZGRyZXNzKTsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCBjaGlsZEluZm8ubUV4dEFkZHJlc3MubThbal0pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgfFxyXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZCAiLCBjaGlsZEluZm8ubUNoaWxkSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJZChtSW5zdGFuY2UsIHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSksICZjaGlsZEluZm8pKTsKKworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQ2hpbGQgSUQ6ICVkXHJcbiIsIGNoaWxkSW5mby5tQ2hpbGRJZCk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJSbG9jOiAlMDR4XHJcbiIsIGNoaWxkSW5mby5tUmxvYzE2KTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkV4dCBBZGRyOiAiKTsKKworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2l6ZW9mKGNoaWxkSW5mby5tRXh0QWRkcmVzcyk7IGorKykKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJTAyeCIsIGNoaWxkSW5mby5tRXh0QWRkcmVzcy5tOFtqXSk7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJNb2RlOiAiKTsKKworICAgIGlmIChjaGlsZEluZm8ubVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiciIpOworICAgIH0KKworICAgIGlmIChjaGlsZEluZm8ubVNlY3VyZURhdGFSZXF1ZXN0KQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJzIik7CisgICAgfQorCisgICAgaWYgKGNoaWxkSW5mby5tRnVsbEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJkIik7CisgICAgfQorCisgICAgaWYgKGNoaWxkSW5mby5tRnVsbE5ldHdvcmtEYXRhKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJuIik7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIk5ldCBEYXRhOiAlZFxyXG4iLCBjaGlsZEluZm8ubU5ldHdvcmtEYXRhVmVyc2lvbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJUaW1lb3V0OiAlZFxyXG4iLCBjaGlsZEluZm8ubVRpbWVvdXQpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWdlOiAlZFxyXG4iLCBjaGlsZEluZm8ubUFnZSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJMaW5rIFF1YWxpdHkgSW46ICVkXHJcbiIsIGNoaWxkSW5mby5tTGlua1F1YWxpdHlJbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJSU1NJOiAlZFxyXG4iLCBjaGlsZEluZm8ubUF2ZXJhZ2VSc3NpKTsKKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzQ2hpbGRNYXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRNYXhBbGxvd2VkQ2hpbGRyZW4obUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkU2V0TWF4QWxsb3dlZENoaWxkcmVuKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDaGlsZFRpbWVvdXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRDaGlsZFRpbWVvdXQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRDaGlsZFRpbWVvdXQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0NvYXAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIGVycm9yID0gbUNvYXAuUHJvY2VzcyhhcmdjLCBhcmd2KTsKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDb250ZXh0SWRSZXVzZURlbGF5KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIG90VGhyZWFkR2V0Q29udGV4dElkUmV1c2VEZWxheShtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRDb250ZXh0SWRSZXVzZURlbGF5KG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NDb3VudGVycyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIm1hY1xyXG4iKTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEb25lXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJtYWMiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdE1hY0NvdW50ZXJzUHRyIGNvdW50ZXJzKG90TGlua0dldENvdW50ZXJzKG1JbnN0YW5jZSkpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJUeFRvdGFsOiAlZFxyXG4iLCBjb3VudGVycy0+bVR4VG90YWwpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhVbmljYXN0OiAlZFxyXG4iLCBjb3VudGVycy0+bVR4VW5pY2FzdCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEJyb2FkY2FzdDogJWRcclxuIiwgY291bnRlcnMtPm1UeEJyb2FkY2FzdCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEFja1JlcXVlc3RlZDogJWRcclxuIiwgY291bnRlcnMtPm1UeEFja1JlcXVlc3RlZCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEFja2VkOiAlZFxyXG4iLCBjb3VudGVycy0+bVR4QWNrZWQpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhOb0Fja1JlcXVlc3RlZDogJWRcclxuIiwgY291bnRlcnMtPm1UeE5vQWNrUmVxdWVzdGVkKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4RGF0YTogJWRcclxuIiwgY291bnRlcnMtPm1UeERhdGEpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhEYXRhUG9sbDogJWRcclxuIiwgY291bnRlcnMtPm1UeERhdGFQb2xsKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4QmVhY29uOiAlZFxyXG4iLCBjb3VudGVycy0+bVR4QmVhY29uKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4QmVhY29uUmVxdWVzdDogJWRcclxuIiwgY291bnRlcnMtPm1UeEJlYWNvblJlcXVlc3QpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgVHhPdGhlcjogJWRcclxuIiwgY291bnRlcnMtPm1UeE90aGVyKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFR4UmV0cnk6ICVkXHJcbiIsIGNvdW50ZXJzLT5tVHhSZXRyeSk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBUeEVyckNjYTogJWRcclxuIiwgY291bnRlcnMtPm1UeEVyckNjYSk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJ4VG90YWw6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhUb3RhbCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeFVuaWNhc3Q6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhVbmljYXN0KTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4QnJvYWRjYXN0OiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4QnJvYWRjYXN0KTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4RGF0YTogJWRcclxuIiwgY291bnRlcnMtPm1SeERhdGEpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgUnhEYXRhUG9sbDogJWRcclxuIiwgY291bnRlcnMtPm1SeERhdGFQb2xsKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4QmVhY29uOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4QmVhY29uKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4QmVhY29uUmVxdWVzdDogJWRcclxuIiwgY291bnRlcnMtPm1SeEJlYWNvblJlcXVlc3QpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgUnhPdGhlcjogJWRcclxuIiwgY291bnRlcnMtPm1SeE90aGVyKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4V2hpdGVsaXN0RmlsdGVyZWQ6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhXaGl0ZWxpc3RGaWx0ZXJlZCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeERlc3RBZGRyRmlsdGVyZWQ6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhEZXN0QWRkckZpbHRlcmVkKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4RHVwbGljYXRlZDogJWRcclxuIiwgY291bnRlcnMtPm1SeER1cGxpY2F0ZWQpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgICAgUnhFcnJOb0ZyYW1lOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4RXJyTm9GcmFtZSk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyck5vVW5rbm93bk5laWdoYm9yOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4RXJyVW5rbm93bk5laWdoYm9yKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICAgIFJ4RXJySW52YWxpZFNyY0FkZHI6ICVkXHJcbiIsIGNvdW50ZXJzLT5tUnhFcnJJbnZhbGlkU3JjQWRkcik7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyclNlYzogJWRcclxuIiwgY291bnRlcnMtPm1SeEVyclNlYyk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyckZjczogJWRcclxuIiwgY291bnRlcnMtPm1SeEVyckZjcyk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAgICBSeEVyck90aGVyOiAlZFxyXG4iLCBjb3VudGVycy0+bVJ4RXJyT3RoZXIpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRGF0YXNldChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgZXJyb3IgPSBEYXRhc2V0OjpQcm9jZXNzKG1JbnN0YW5jZSwgYXJnYywgYXJndiwgKm1TZXJ2ZXIpOworICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0RlbGF5VGltZXJNaW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIChvdERhdGFzZXRHZXREZWxheVRpbWVyTWluaW1hbChtSW5zdGFuY2UpIC8gMTAwMCkpOworICAgIH0KKyAgICBlbHNlIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VVbnNpZ25lZExvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90RGF0YXNldFNldERlbGF5VGltZXJNaW5pbWFsKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICogMTAwMCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0Rpc2NvdmVyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDMyX3Qgc2NhbkNoYW5uZWxzID0gMDsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPiAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBzY2FuQ2hhbm5lbHMgPSAxIDw8IHZhbHVlOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZERpc2NvdmVyKG1JbnN0YW5jZSwgc2NhbkNoYW5uZWxzLCBPVF9QQU5JRF9CUk9BRENBU1QsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlQWN0aXZlU2NhblJlc3VsdCwgdGhpcykpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCBKIHwgTmV0d29yayBOYW1lICAgICB8IEV4dGVuZGVkIFBBTiAgICAgfCBQQU4gIHwgTUFDIEFkZHJlc3MgICAgICB8IENoIHwgZEJtIHwgTFFJIHxcclxuIik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIrLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tK1xyXG4iKTsKKworICAgIHJldHVybjsKKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0RucyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgcG9ydCA9IE9UX0ROU19ERUZBVUxUX0ROU19TRVJWRVJfUE9SVDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIG90RG5zUXVlcnkgcXVlcnk7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInJlc29sdmUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFtUmVzb2x2aW5nSW5Qcm9ncmVzcywgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAxLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIFZlcmlmeU9yRXhpdChzdHJsZW4oYXJndlsxXSkgPCBPVF9ETlNfTUFYX0hPU1ROQU1FX0xFTkdUSCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIHN0cmNweShtUmVzb2x2aW5nSG9zdG5hbWUsIGFyZ3ZbMV0pOworCisgICAgICAgIG1lbXNldCgmbWVzc2FnZUluZm8sIDAsIHNpemVvZihtZXNzYWdlSW5mbykpOworICAgICAgICBtZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQgPSBPVF9ORVRJRl9JTlRFUkZBQ0VfSURfVEhSRUFEOworCisgICAgICAgIGlmIChhcmdjID4gMikKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuRnJvbVN0cmluZyhhcmd2WzJdKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVc2UgSVB2NiBhZGRyZXNzIG9mIGRlZmF1bHQgRE5TIHNlcnZlci4KKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLkZyb21TdHJpbmcoT1RfRE5TX0RFRkFVTFRfRE5TX1NFUlZFUl9JUCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ2MgPiAzKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbM10sIHBvcnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KHN0YXRpY19jYXN0PHVpbnQxNl90Pihwb3J0KSk7CisKKyAgICAgICAgcXVlcnkubUhvc3RuYW1lICAgID0gbVJlc29sdmluZ0hvc3RuYW1lOworICAgICAgICBxdWVyeS5tTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBvdE1lc3NhZ2VJbmZvICo+KCZtZXNzYWdlSW5mbyk7CisgICAgICAgIHF1ZXJ5Lm1Ob1JlY3Vyc2lvbiA9IGZhbHNlOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERuc0NsaWVudFF1ZXJ5KG1JbnN0YW5jZSwgJnF1ZXJ5LCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRG5zUmVzcG9uc2UsIHRoaXMpKTsKKworICAgICAgICBtUmVzb2x2aW5nSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRG5zUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIGNvbnN0IGNoYXIgKmFIb3N0bmFtZSwgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYVR0bCwgb3RFcnJvciBhUmVzdWx0KQoreworICAgIHN0YXRpY19jYXN0PEludGVycHJldGVyICo+KGFDb250ZXh0KS0+SGFuZGxlRG5zUmVzcG9uc2UoYUhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PElwNjo6QWRkcmVzcyAqPihhQWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVHRsLCBhUmVzdWx0KTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6SGFuZGxlRG5zUmVzcG9uc2UoY29uc3QgY2hhciAqYUhvc3RuYW1lLCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCB1aW50MzJfdCBhVHRsLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJETlMgcmVzcG9uc2UgZm9yICVzIC0gIiwgYUhvc3RuYW1lKTsKKworICAgIGlmIChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlsleDoleDoleDoleDoleDoleDoleDoleF0gVFRMOiAlZFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNlswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNlszXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNls2XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUdGwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBBcHBlbmRSZXN1bHQoYVJlc3VsdCk7CisgICAgfQorCisgICAgbVJlc29sdmluZ0luUHJvZ3Jlc3MgPSBmYWxzZTsKK30KKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NFaWRDYWNoZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RWlkQ2FjaGVFbnRyeSBlbnRyeTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgOyBpKyspCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KG90VGhyZWFkR2V0RWlkQ2FjaGVFbnRyeShtSW5zdGFuY2UsIGksICZlbnRyeSkpOworCisgICAgICAgIGlmIChlbnRyeS5tVmFsaWQgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleCAlMDR4XHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGVudHJ5Lm1UYXJnZXQubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihlbnRyeS5tVGFyZ2V0Lm1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoZW50cnkubVRhcmdldC5tRmllbGRzLm0xNlsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGVudHJ5Lm1UYXJnZXQubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihlbnRyeS5tVGFyZ2V0Lm1GaWVsZHMubTE2WzRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoZW50cnkubVRhcmdldC5tRmllbGRzLm0xNls1XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGVudHJ5Lm1UYXJnZXQubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihlbnRyeS5tVGFyZ2V0Lm1GaWVsZHMubTE2WzddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm1SbG9jMTYpOworICAgIH0KKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIEFwcGVuZFJlc3VsdChPVF9FUlJPUl9OT05FKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0V1aTY0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRBZGRyZXNzIGV4dEFkZHJlc3M7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA9PSAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TGlua0dldEZhY3RvcnlBc3NpZ25lZEllZWVFdWk2NChtSW5zdGFuY2UsICZleHRBZGRyZXNzKTsKKyAgICBPdXRwdXRCeXRlcyhleHRBZGRyZXNzLm04LCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0V4dEFkZHJlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBvdEJ1ZmZlclB0ciBleHRBZGRyZXNzKG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhtSW5zdGFuY2UpKTsKKyAgICAgICAgT3V0cHV0Qnl0ZXMoZXh0QWRkcmVzcywgT1RfRVhUX0FERFJFU1NfU0laRSk7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdEV4dEFkZHJlc3MgZXh0QWRkcmVzczsKKworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2WzBdLCBleHRBZGRyZXNzLm04LCBzaXplb2Yob3RFeHRBZGRyZXNzKSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgZXJyb3IgPSBvdExpbmtTZXRFeHRlbmRlZEFkZHJlc3MobUluc3RhbmNlLCAmZXh0QWRkcmVzcyk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZmRlZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRXhpdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGV4aXQoMCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKK30KKyNlbmRpZgorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRXh0UGFuSWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBvdEJ1ZmZlclB0ciBleHRQYW5JZChvdFRocmVhZEdldEV4dGVuZGVkUGFuSWQobUluc3RhbmNlKSk7CisgICAgICAgIE91dHB1dEJ5dGVzKGV4dFBhbklkLCBPVF9FWFRfUEFOX0lEX1NJWkUpOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBleHRQYW5JZFs4XTsKKworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2WzBdLCBleHRQYW5JZCwgc2l6ZW9mKGV4dFBhbklkKSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQobUluc3RhbmNlLCBleHRQYW5JZCk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NGYWN0b3J5UmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEluc3RhbmNlRmFjdG9yeVJlc2V0KG1JbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0hhc2hNYWNBZGRyZXNzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRBZGRyZXNzIGhhc2hNYWNBZGRyZXNzOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdExpbmtHZXRKb2luZXJJZChtSW5zdGFuY2UsICZoYXNoTWFjQWRkcmVzcyk7CisgICAgT3V0cHV0Qnl0ZXMoaGFzaE1hY0FkZHJlc3MubTgsIE9UX0VYVF9BRERSRVNTX1NJWkUpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzSWZjb25maWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBpZiAob3RJcDZJc0VuYWJsZWQobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ1cFxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZG93blxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInVwIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNlNldEVuYWJsZWQobUluc3RhbmNlLCB0cnVlKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiZG93biIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZTZXRFbmFibGVkKG1JbnN0YW5jZSwgZmFsc2UpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworb3RFcnJvciBJbnRlcnByZXRlcjo6UHJvY2Vzc0lwQWRkckFkZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgb3ROZXRpZkFkZHJlc3MgYUFkZHJlc3M7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlswXSwgJmFBZGRyZXNzLm1BZGRyZXNzKSk7CisgICAgYUFkZHJlc3MubVByZWZpeExlbmd0aCA9IDY0OworICAgIGFBZGRyZXNzLm1QcmVmZXJyZWQgPSB0cnVlOworICAgIGFBZGRyZXNzLm1WYWxpZCA9IHRydWU7CisgICAgZXJyb3IgPSBvdElwNkFkZFVuaWNhc3RBZGRyZXNzKG1JbnN0YW5jZSwgJmFBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcEFkZHJEZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIHN0cnVjdCBvdElwNkFkZHJlc3MgYWRkcmVzczsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzBdLCAmYWRkcmVzcykpOworICAgIGVycm9yID0gb3RJcDZSZW1vdmVVbmljYXN0QWRkcmVzcyhtSW5zdGFuY2UsICZhZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcEFkZHIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBvdE5ldGlmQWRkcmVzc1B0ciB1bmljYXN0QWRkcnMob3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKG1JbnN0YW5jZSkpOworCisgICAgICAgIGZvciAoY29uc3Qgb3ROZXRpZkFkZHJlc3MgKmFkZHIgPSB1bmljYXN0QWRkcnM7IGFkZHI7IGFkZHIgPSBhZGRyLT5tTmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbN10pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lwQWRkckFkZChhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRlbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzSXBBZGRyRGVsKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZm5kZWYgT1RETEwKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJcE11bHRpY2FzdEFkZHJBZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIHN0cnVjdCBvdElwNkFkZHJlc3MgYWRkcmVzczsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzBdLCAmYWRkcmVzcykpOworICAgIGVycm9yID0gb3RJcDZTdWJzY3JpYmVNdWx0aWNhc3RBZGRyZXNzKG1JbnN0YW5jZSwgJmFkZHJlc3MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBJbnRlcnByZXRlcjo6UHJvY2Vzc0lwTXVsdGljYXN0QWRkckRlbChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgc3RydWN0IG90SXA2QWRkcmVzcyBhZGRyZXNzOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbMF0sICZhZGRyZXNzKSk7CisgICAgZXJyb3IgPSBvdElwNlVuc3Vic2NyaWJlTXVsdGljYXN0QWRkcmVzcyhtSW5zdGFuY2UsICZhZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NNdWx0aWNhc3RQcm9taXNjdW91cyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChvdElwNklzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRW5hYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGlzYWJsZWRcclxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAiZW5hYmxlIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZTZXRNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQobUluc3RhbmNlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRpc2FibGUiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdElwNlNldE11bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzSXBNdWx0aWNhc3RBZGRyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqYWRkciA9IG90SXA2R2V0TXVsdGljYXN0QWRkcmVzc2VzKG1JbnN0YW5jZSk7IGFkZHI7IGFkZHIgPSBhZGRyLT5tTmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYWRkci0+bUFkZHJlc3MubUZpZWxkcy5tMTZbN10pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lwTXVsdGljYXN0QWRkckFkZChhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRlbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzSXBNdWx0aWNhc3RBZGRyRGVsKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAicHJvbWlzY3VvdXMiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc011bHRpY2FzdFByb21pc2N1b3VzKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0tleVNlcXVlbmNlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID09IDEgfHwgYXJnYyA9PSAyLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImNvdW50ZXIiKSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFyZ2MgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcihtSW5zdGFuY2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgdmFsdWUpKTsKKyAgICAgICAgICAgIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJndWFyZHRpbWUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGFyZ2MgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShtSW5zdGFuY2UpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgdmFsdWUpKTsKKyAgICAgICAgICAgIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0xlYWRlckRhdGEoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIG90TGVhZGVyRGF0YSBsZWFkZXJEYXRhOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkR2V0TGVhZGVyRGF0YShtSW5zdGFuY2UsICZsZWFkZXJEYXRhKSk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlBhcnRpdGlvbiBJRDogJXVcclxuIiwgbGVhZGVyRGF0YS5tUGFydGl0aW9uSWQpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiV2VpZ2h0aW5nOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1XZWlnaHRpbmcpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGF0YSBWZXJzaW9uOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1EYXRhVmVyc2lvbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJTdGFibGUgRGF0YSBWZXJzaW9uOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1TdGFibGVEYXRhVmVyc2lvbik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJMZWFkZXIgUm91dGVyIElEOiAlZFxyXG4iLCBsZWFkZXJEYXRhLm1MZWFkZXJSb3V0ZXJJZCk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NMZWFkZXJQYXJ0aXRpb25JZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIldVxyXG4iLCBvdFRocmVhZEdldExvY2FsTGVhZGVyUGFydGl0aW9uSWQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZVVuc2lnbmVkTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBvdFRocmVhZFNldExvY2FsTGVhZGVyUGFydGl0aW9uSWQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0xlYWRlcldlaWdodChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldExvY2FsTGVhZGVyV2VpZ2h0KG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzTGlua1F1YWxpdHkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGV4dEFkZHJlc3NbOF07CisgICAgdWludDhfdCBsaW5rUXVhbGl0eTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgVmVyaWZ5T3JFeGl0KEhleDJCaW4oYXJndlswXSwgZXh0QWRkcmVzcywgT1RfRVhUX0FERFJFU1NfU0laRSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoYXJnYyA9PSAxKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG90TGlua0dldEFzc2lnbkxpbmtRdWFsaXR5KG1JbnN0YW5jZSwgZXh0QWRkcmVzcywgJmxpbmtRdWFsaXR5KSA9PSBPVF9FUlJPUl9OT05FLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIGxpbmtRdWFsaXR5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzFdLCB2YWx1ZSkpOworICAgICAgICBvdExpbmtTZXRBc3NpZ25MaW5rUXVhbGl0eShtSW5zdGFuY2UsIGV4dEFkZHJlc3MsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1BTS2MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90ICpjdXJyZW50UFNLYyA9IG90VGhyZWFkR2V0UFNLYyhtSW5zdGFuY2UpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgT1RfUFNLQ19NQVhfU0laRTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCBjdXJyZW50UFNLY1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBuZXdQU0tjW09UX1BTS0NfTUFYX1NJWkVdOworCisgICAgICAgIFZlcmlmeU9yRXhpdChIZXgyQmluKGFyZ3ZbMF0sIG5ld1BTS2MsIHNpemVvZihuZXdQU0tjKSkgPT0gT1RfUFNLQ19NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZFNldFBTS2MobUluc3RhbmNlLCBuZXdQU0tjKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc01hc3RlcktleShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG90QnVmZmVyUHRyIGtleShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ob3RUaHJlYWRHZXRNYXN0ZXJLZXkobUluc3RhbmNlKSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgT1RfTUFTVEVSX0tFWV9TSVpFOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJTAyeCIsIGtleVtpXSk7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RNYXN0ZXJLZXkga2V5OworCisgICAgICAgIFZlcmlmeU9yRXhpdChIZXgyQmluKGFyZ3ZbMF0sIGtleS5tOCwgc2l6ZW9mKGtleS5tOCkpID09IE9UX01BU1RFUl9LRVlfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZFNldE1hc3RlcktleShtSW5zdGFuY2UsICZrZXkpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc01vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdExpbmtNb2RlQ29uZmlnIGxpbmtNb2RlOworCisgICAgbWVtc2V0KCZsaW5rTW9kZSwgMCwgc2l6ZW9mKG90TGlua01vZGVDb25maWcpKTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBsaW5rTW9kZSA9IG90VGhyZWFkR2V0TGlua01vZGUobUluc3RhbmNlKTsKKworICAgICAgICBpZiAobGlua01vZGUubVJ4T25XaGVuSWRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJyIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlua01vZGUubVNlY3VyZURhdGFSZXF1ZXN0cykKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJzIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlua01vZGUubURldmljZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmtNb2RlLm1OZXR3b3JrRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJuIik7CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChjaGFyICphcmcgPSBhcmd2WzBdOyAqYXJnICE9ICdcMCc7IGFyZysrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKCphcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBsaW5rTW9kZS5tUnhPbldoZW5JZGxlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgbGlua01vZGUubVNlY3VyZURhdGFSZXF1ZXN0cyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGxpbmtNb2RlLm1EZXZpY2VUeXBlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgbGlua01vZGUubU5ldHdvcmtEYXRhID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkU2V0TGlua01vZGUobUluc3RhbmNlLCBsaW5rTW9kZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEYXRhUmVnaXN0ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihtSW5zdGFuY2UpKTsKKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworI2lmIE9QRU5USFJFQURfRlRECit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzTmV0d29ya0lkVGltZW91dChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldE5ldHdvcmtJZFRpbWVvdXQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0KG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtOYW1lKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgb3RTdHJpbmdQdHIgbmV0d29ya05hbWUob3RUaHJlYWRHZXROZXR3b3JrTmFtZShtSW5zdGFuY2UpKTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlLipzXHJcbiIsIE9UX05FVFdPUktfTkFNRV9NQVhfU0laRSwgKGNvbnN0IGNoYXIgKiluZXR3b3JrTmFtZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZFNldE5ldHdvcmtOYW1lKG1JbnN0YW5jZSwgYXJndlswXSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUGFuSWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJTA0eFxyXG4iLCBvdExpbmtHZXRQYW5JZChtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBlcnJvciA9IG90TGlua1NldFBhbklkKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8b3RQYW5JZD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1BhcmVudChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Um91dGVySW5mbyBwYXJlbnRJbmZvOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkR2V0UGFyZW50SW5mbyhtSW5zdGFuY2UsICZwYXJlbnRJbmZvKSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFeHQgQWRkcjogIik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihwYXJlbnRJbmZvLm1FeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDJ4IiwgcGFyZW50SW5mby5tRXh0QWRkcmVzcy5tOFtpXSk7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJsb2M6ICV4XHJcbiIsIHBhcmVudEluZm8ubVJsb2MxNik7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJMaW5rIFF1YWxpdHkgSW46ICVkXHJcbiIsIHBhcmVudEluZm8ubUxpbmtRdWFsaXR5SW4pOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiTGluayBRdWFsaXR5IE91dDogJWRcclxuIiwgcGFyZW50SW5mby5tTGlua1F1YWxpdHlPdXQpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWdlOiAlZFxyXG4iLCBwYXJlbnRJbmZvLm1BZ2UpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUGFyZW50UHJpb3JpdHkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eShtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBlcnJvciA9IG90VGhyZWFkU2V0UGFyZW50UHJpb3JpdHkobUluc3RhbmNlLCBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBPVERMTAordm9pZCBJbnRlcnByZXRlcjo6c19IYW5kbGVJY21wUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdEljbXA2SGVhZGVyICphSWNtcEhlYWRlcikKK3sKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZUljbXBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpJY21wSGVhZGVyICo+KGFJY21wSGVhZGVyKSk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZUljbXBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdEljbXA2SGVhZGVyICZhSWNtcEhlYWRlcikKK3sKKyAgICB1aW50MzJfdCB0aW1lc3RhbXAgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KGFJY21wSGVhZGVyLm1UeXBlID09IE9UX0lDTVA2X1RZUEVfRUNIT19SRVBMWSk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkIGJ5dGVzIGZyb20gIiwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIleDoleDoleDoleDoleDoleDoleDoleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNlsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls1XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddKSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCI6IGljbXBfc2VxPSVkIGhsaW09JWQiLCBIb3N0U3dhcDE2KGFJY21wSGVhZGVyLm1EYXRhLm0xNlsxXSksIGFNZXNzYWdlSW5mby5tSG9wTGltaXQpOworCisgICAgaWYgKGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZih1aW50MzJfdCksICZ0aW1lc3RhbXApID49CisgICAgICAgIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKHVpbnQzMl90KSkpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiB0aW1lPSVkbXMiLCBUaW1lcjo6R2V0Tm93KCkgLSBIb3N0U3dhcDMyKHRpbWVzdGFtcCkpOworICAgIH0KKworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1BpbmcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGluZGV4ID0gMTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKCFtUGluZ1RpbWVyLklzUnVubmluZygpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUGluZ1RpbWVyLlN0b3AoKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoIW1QaW5nVGltZXIuSXNSdW5uaW5nKCksIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBtZW1zZXQoJm1NZXNzYWdlSW5mbywgMCwgc2l6ZW9mKG1NZXNzYWdlSW5mbykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5Gcm9tU3RyaW5nKGFyZ3ZbMF0pKTsKKyAgICBtTWVzc2FnZUluZm8ubUludGVyZmFjZUlkID0gT1RfTkVUSUZfSU5URVJGQUNFX0lEX1RIUkVBRDsKKworICAgIG1MZW5ndGggPSA4OworICAgIG1Db3VudCA9IDE7CisgICAgbUludGVydmFsID0gMTAwMDsKKworICAgIHdoaWxlIChpbmRleCA8IGFyZ2MpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbaW5kZXhdLCB2YWx1ZSkpOworCisgICAgICAgIHN3aXRjaCAoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbUxlbmd0aCA9ICh1aW50MTZfdCl2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1Db3VudCA9ICh1aW50MTZfdCl2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1JbnRlcnZhbCA9ICh1aW50MzJfdCl2YWx1ZTsKKyAgICAgICAgICAgIG1JbnRlcnZhbCA9IG1JbnRlcnZhbCAqIDEwMDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4Kys7CisgICAgfQorCisgICAgSGFuZGxlUGluZ1RpbWVyKCk7CisKKyAgICByZXR1cm47CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6c19IYW5kbGVQaW5nVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVBpbmdUaW1lcigpOworfQorCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVQaW5nVGltZXIoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IEhvc3RTd2FwMzIoVGltZXI6OkdldE5vdygpKTsKKworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICptZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IG90TWVzc2FnZUluZm8gKj4oJm1NZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBvdElwNk5ld01lc3NhZ2UobUluc3RhbmNlLCB0cnVlKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlQXBwZW5kKG1lc3NhZ2UsICZ0aW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TWVzc2FnZVNldExlbmd0aChtZXNzYWdlLCBtTGVuZ3RoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SWNtcDZTZW5kRWNob1JlcXVlc3QobUluc3RhbmNlLCBtZXNzYWdlLCBtZXNzYWdlSW5mbywgMSkpOworCisgICAgbUNvdW50LS07CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChtQ291bnQpCisgICAgeworICAgICAgICBtUGluZ1RpbWVyLlN0YXJ0KG1JbnRlcnZhbCk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQb2xsUGVyaW9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIChvdExpbmtHZXRQb2xsUGVyaW9kKG1JbnN0YW5jZSkgLyAxMDAwKSk7ICAvLyBtcy0+cworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIG90TGlua1NldFBvbGxQZXJpb2QobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUgKiAxMDAwKSk7ICAvLyBzLT5tcworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCisjaWZuZGVmIE9URExMCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUHJvbWlzY3VvdXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBpZiAob3RMaW5rSXNQcm9taXNjdW91cyhtSW5zdGFuY2UpICYmIG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFbmFibGVkXHJcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEaXNhYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJlbmFibGUiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdExpbmtTZXRQY2FwQ2FsbGJhY2sobUluc3RhbmNlLCAmc19IYW5kbGVMaW5rUGNhcFJlY2VpdmUsIHRoaXMpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TGlua1NldFByb21pc2N1b3VzKG1JbnN0YW5jZSwgdHJ1ZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiZGlzYWJsZSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TGlua1NldFBjYXBDYWxsYmFjayhtSW5zdGFuY2UsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TGlua1NldFByb21pc2N1b3VzKG1JbnN0YW5jZSwgZmFsc2UpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpzX0hhbmRsZUxpbmtQY2FwUmVjZWl2ZShjb25zdCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8SW50ZXJwcmV0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVMaW5rUGNhcFJlY2VpdmUoYUZyYW1lKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6SGFuZGxlTGlua1BjYXBSZWNlaXZlKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lKQoreworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0NDsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCI9Iik7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJbbGVuID0gJTN1XSIsIGFGcmFtZS0+bUxlbmd0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI4OyBpKyspCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIj0iKTsKKyAgICB9CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYUZyYW1lLT5tTGVuZ3RoOyBpICs9IDE2KQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8Iik7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCAxNjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSArIGogPCBhRnJhbWUtPm1MZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgJTAyWCIsIGFGcmFtZS0+bVBzZHVbaSArIGpdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAuLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8Iik7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCAxNjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSArIGogPCBhRnJhbWUtPm1MZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKDMxIDwgYUZyYW1lLT5tUHNkdVtpICsgal0gJiYgYUZyYW1lLT5tUHNkdVtpICsgal0gPCAxMjcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAlYyIsIGFGcmFtZS0+bVBzZHVbaSArIGpdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgPyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiAuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInxcclxuIik7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA4MzsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCItIik7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7Cit9CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXhBZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBjb25maWc7CisgICAgaW50IGFyZ2N1ciA9IDA7CisKKyAgICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKG90Qm9yZGVyUm91dGVyQ29uZmlnKSk7CisKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgaWYgKChwcmVmaXhMZW5ndGhTdHIgPSBzdHJjaHIoYXJndlthcmdjdXJdLCAnLycpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgICpwcmVmaXhMZW5ndGhTdHIrKyA9ICdcMCc7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2W2FyZ2N1cl0sICZjb25maWcubVByZWZpeC5tUHJlZml4KSk7CisKKyAgICBjb25maWcubVByZWZpeC5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworCisgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgYXJnY3VyKys7CisKKyAgICBmb3IgKDsgYXJnY3VyIDwgYXJnYzsgYXJnY3VyKyspCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImhpZ2giKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgIm1lZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbmZpZy5tUHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJsb3ciKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX0xPVzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY2hhciAqYXJnID0gYXJndlthcmdjdXJdOyAqYXJnICE9ICdcMCc7IGFyZysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoKmFyZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1TbGFhYyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tRGhjcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tQ29uZmlndXJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1EZWZhdWx0Um91dGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgICAgICBjb25maWcubU9uTWVzaCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tU3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGVycm9yID0gb3RCb3JkZXJSb3V0ZXJBZGRPbk1lc2hQcmVmaXgobUluc3RhbmNlLCAmY29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXhSZW1vdmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzdHJ1Y3Qgb3RJcDZQcmVmaXggcHJlZml4OworICAgIGludCBhcmdjdXIgPSAwOworCisgICAgbWVtc2V0KCZwcmVmaXgsIDAsIHNpemVvZihvdElwNlByZWZpeCkpOworCisgICAgY2hhciAqcHJlZml4TGVuZ3RoU3RyOworICAgIGNoYXIgKmVuZHB0cjsKKworICAgIGlmICgocHJlZml4TGVuZ3RoU3RyID0gc3RyY2hyKGFyZ3ZbYXJnY3VyXSwgJy8nKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAqcHJlZml4TGVuZ3RoU3RyKysgPSAnXDAnOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlthcmdjdXJdLCAmcHJlZml4Lm1QcmVmaXgpKTsKKworICAgIHByZWZpeC5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworCisgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlclJlbW92ZU9uTWVzaFByZWZpeChtSW5zdGFuY2UsICZwcmVmaXgpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXhMaXN0KHZvaWQpCit7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgY29uZmlnOworCisgICAgd2hpbGUgKG90Qm9yZGVyUm91dGVyR2V0TmV4dE9uTWVzaFByZWZpeChtSW5zdGFuY2UsICZpdGVyYXRvciwgJmNvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXg6JXg6JXg6JXg6Oi8lZCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihjb25maWcubVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTE2WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoY29uZmlnLm1QcmVmaXgubVByZWZpeC5tRmllbGRzLm0xNlsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGNvbmZpZy5tUHJlZml4Lm1QcmVmaXgubUZpZWxkcy5tMTZbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihjb25maWcubVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTE2WzNdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZml4Lm1MZW5ndGgpOworCisgICAgICAgIGlmIChjb25maWcubVByZWZlcnJlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJwIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1TbGFhYykKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJhIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1EaGNwKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubUNvbmZpZ3VyZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJjIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLm1EZWZhdWx0Um91dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiciIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZy5tT25NZXNoKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIm8iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcubVN0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJzIik7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGNvbmZpZy5tUHJlZmVyZW5jZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9UX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOgorICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgbG93XHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDoKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIG1lZFxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfUk9VVEVfUFJFRkVSRU5DRV9ISUdIOgorICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgaGlnaFxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NQcmVmaXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1ByZWZpeExpc3QoKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiYWRkIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzUHJlZml4QWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInJlbW92ZSIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1ByZWZpeFJlbW92ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NSZWxlYXNlUm91dGVySWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRSZWxlYXNlUm91dGVySWQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpKTsKKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEluc3RhbmNlUmVzZXQobUluc3RhbmNlKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUmxvYzE2KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDR4XHJcbiIsIG90VGhyZWFkR2V0UmxvYzE2KG1JbnN0YW5jZSkpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRG9uZVxyXG4iKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorb3RFcnJvciBJbnRlcnByZXRlcjo6UHJvY2Vzc1JvdXRlQWRkKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnIGNvbmZpZzsKKyAgICBpbnQgYXJnY3VyID0gMDsKKworICAgIG1lbXNldCgmY29uZmlnLCAwLCBzaXplb2Yob3RFeHRlcm5hbFJvdXRlQ29uZmlnKSk7CisKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgocHJlZml4TGVuZ3RoU3RyID0gc3RyY2hyKGFyZ3ZbYXJnY3VyXSwgJy8nKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAqcHJlZml4TGVuZ3RoU3RyKysgPSAnXDAnOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlthcmdjdXJdLCAmY29uZmlnLm1QcmVmaXgubVByZWZpeCkpOworCisgICAgY29uZmlnLm1QcmVmaXgubUxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cnRvbChwcmVmaXhMZW5ndGhTdHIsICZlbmRwdHIsIDApKTsKKworICAgIGlmICgqZW5kcHRyICE9ICdcMCcpCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIGFyZ2N1cisrOworCisgICAgZm9yICg7IGFyZ2N1ciA8IGFyZ2M7IGFyZ2N1cisrKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJzIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLm1TdGFibGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJoaWdoIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLm1QcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9ISUdIOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJtZWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWcubVByZWZlcmVuY2UgPSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAibG93IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLm1QcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1c7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgfQorCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlckFkZFJvdXRlKG1JbnN0YW5jZSwgJmNvbmZpZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVSZW1vdmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzdHJ1Y3Qgb3RJcDZQcmVmaXggcHJlZml4OworICAgIGludCBhcmdjdXIgPSAwOworCisgICAgbWVtc2V0KCZwcmVmaXgsIDAsIHNpemVvZihzdHJ1Y3Qgb3RJcDZQcmVmaXgpKTsKKyAgICBjaGFyICpwcmVmaXhMZW5ndGhTdHI7CisgICAgY2hhciAqZW5kcHRyOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgocHJlZml4TGVuZ3RoU3RyID0gc3RyY2hyKGFyZ3ZbYXJnY3VyXSwgJy8nKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICAqcHJlZml4TGVuZ3RoU3RyKysgPSAnXDAnOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlthcmdjdXJdLCAmcHJlZml4Lm1QcmVmaXgpKTsKKworICAgIHByZWZpeC5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RydG9sKHByZWZpeExlbmd0aFN0ciwgJmVuZHB0ciwgMCkpOworCisgICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlclJlbW92ZVJvdXRlKG1JbnN0YW5jZSwgJnByZWZpeCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSb3V0ZUFkZChhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyZW1vdmUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSb3V0ZVJlbW92ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisjaWYgT1BFTlRIUkVBRF9GVEQKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NSb3V0ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdFJvdXRlckluZm8gcm91dGVySW5mbzsKKyAgICBsb25nIHZhbHVlOworICAgIGJvb2wgaXNUYWJsZSA9IGZhbHNlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImxpc3QiKSA9PSAwIHx8IChpc1RhYmxlID0gKHN0cmNtcChhcmd2WzBdLCAidGFibGUiKSA9PSAwKSkpCisgICAgeworICAgICAgICBpZiAoaXNUYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8IElEIHwgUkxPQzE2IHwgTmV4dCBIb3AgfCBQYXRoIENvc3QgfCBMUSBJbiB8IExRIE91dCB8IEFnZSB8IEV4dGVuZGVkIE1BQyAgICAgfFxyXG4iKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLStcclxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3RUaHJlYWRHZXRSb3V0ZXJJbmZvKG1JbnN0YW5jZSwgaSwgJnJvdXRlckluZm8pICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm91dGVySW5mby5tQWxsb2NhdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpc1RhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICUyZCAiLCByb3V0ZXJJbmZvLm1Sb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAweCUwNHggIiwgcm91dGVySW5mby5tUmxvYzE2KTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICU4ZCAiLCByb3V0ZXJJbmZvLm1OZXh0SG9wKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICU5ZCAiLCByb3V0ZXJJbmZvLm1QYXRoQ29zdCk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAlNWQgIiwgcm91dGVySW5mby5tTGlua1F1YWxpdHlJbik7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAlNmQgIiwgcm91dGVySW5mby5tTGlua1F1YWxpdHlPdXQpOworICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkICIsIHJvdXRlckluZm8ubUFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgifCAiKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNpemVvZihyb3V0ZXJJbmZvLm1FeHRBZGRyZXNzKTsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCByb3V0ZXJJbmZvLm1FeHRBZGRyZXNzLm04W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIHxcclxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWQgIiwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZEdldFJvdXRlckluZm8obUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpLCAmcm91dGVySW5mbykpOworCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJBbGxvYzogJWRcclxuIiwgcm91dGVySW5mby5tQWxsb2NhdGVkKTsKKworICAgIGlmIChyb3V0ZXJJbmZvLm1BbGxvY2F0ZWQpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJvdXRlciBJRDogJWRcclxuIiwgcm91dGVySW5mby5tUm91dGVySWQpOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJsb2M6ICUwNHhcclxuIiwgcm91dGVySW5mby5tUmxvYzE2KTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJOZXh0IEhvcDogJTA0eFxyXG4iLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocm91dGVySW5mby5tTmV4dEhvcCkgPDwgMTApOworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkxpbms6ICVkXHJcbiIsIHJvdXRlckluZm8ubUxpbmtFc3RhYmxpc2hlZCk7CisKKyAgICAgICAgaWYgKHJvdXRlckluZm8ubUxpbmtFc3RhYmxpc2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFeHQgQWRkcjogIik7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2l6ZW9mKHJvdXRlckluZm8ubUV4dEFkZHJlc3MpOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlMDJ4Iiwgcm91dGVySW5mby5tRXh0QWRkcmVzcy5tOFtqXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJDb3N0OiAlZFxyXG4iLCByb3V0ZXJJbmZvLm1QYXRoQ29zdCk7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkxpbmsgUXVhbGl0eSBJbjogJWRcclxuIiwgcm91dGVySW5mby5tTGlua1F1YWxpdHlJbik7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkxpbmsgUXVhbGl0eSBPdXQ6ICVkXHJcbiIsIHJvdXRlckluZm8ubUxpbmtRdWFsaXR5T3V0KTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWdlOiAlZFxyXG4iLCByb3V0ZXJJbmZvLm1BZ2UpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVyUm9sZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChvdFRocmVhZElzUm91dGVyUm9sZUVuYWJsZWQobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFbmFibGVkXHJcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJEaXNhYmxlZFxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImVuYWJsZSIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG1JbnN0YW5jZSwgdHJ1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiZGlzYWJsZSIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNldFJvdXRlclJvbGVFbmFibGVkKG1JbnN0YW5jZSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVyU2VsZWN0aW9uSml0dGVyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkXHJcbiIsIG90VGhyZWFkR2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgwIDwgdmFsdWUgJiYgdmFsdWUgPCAyNTYsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgb3RUaHJlYWRTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzUm91dGVyVXBncmFkZVRocmVzaG9sZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdFRocmVhZEdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RUaHJlYWRTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1NjYW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCBzY2FuQ2hhbm5lbHMgPSAwOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoYXJnYyA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIHNjYW5DaGFubmVscyA9IDEgPDwgdmFsdWU7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8IEogfCBOZXR3b3JrIE5hbWUgICAgIHwgRXh0ZW5kZWQgUEFOICAgICB8IFBBTiAgfCBNQUMgQWRkcmVzcyAgICAgIHwgQ2ggfCBkQm0gfCBMUUkgfFxyXG4iKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIistLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rXHJcbiIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdExpbmtBY3RpdmVTY2FuKG1JbnN0YW5jZSwgc2NhbkNoYW5uZWxzLCAwLCAmSW50ZXJwcmV0ZXI6OnNfSGFuZGxlQWN0aXZlU2NhblJlc3VsdCwgdGhpcykpOworCisgICAgcmV0dXJuOworCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK3ZvaWQgT1RDQUxMIEludGVycHJldGVyOjpzX0hhbmRsZUFjdGl2ZVNjYW5SZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0LCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQoYVJlc3VsdCk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIGlmIChhUmVzdWx0ID09IE5VTEwpCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRvbmVcclxuIik7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJWQgIiwgYVJlc3VsdC0+bUlzSm9pbmFibGUpOworCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ8ICUtMTZzICIsIGFSZXN1bHQtPm1OZXR3b3JrTmFtZS5tOCk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgIik7CisgICAgT3V0cHV0Qnl0ZXMoYVJlc3VsdC0+bUV4dGVuZGVkUGFuSWQubTgsIE9UX0VYVF9QQU5fSURfU0laRSk7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIgIik7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTA0eCB8ICIsIGFSZXN1bHQtPm1QYW5JZCk7CisgICAgT3V0cHV0Qnl0ZXMoYVJlc3VsdC0+bUV4dEFkZHJlc3MubTgsIE9UX0VYVF9BRERSRVNTX1NJWkUpOworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIHwgJTJkICIsIGFSZXN1bHQtPm1DaGFubmVsKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkICIsIGFSZXN1bHQtPm1Sc3NpKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoInwgJTNkIHxcclxuIiwgYVJlc3VsdC0+bUxxaSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzU2luZ2xldG9uKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAob3RUaHJlYWRJc1NpbmdsZXRvbihtSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJ0cnVlXHJcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImZhbHNlXHJcbiIpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisKKyAgICBBcHBlbmRSZXN1bHQoZXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzU3RhdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBzd2l0Y2ggKG90VGhyZWFkR2V0RGV2aWNlUm9sZShtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImRpc2FibGVkXHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiZGV0YWNoZWRcclxuIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJjaGlsZFxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWYgT1BFTlRIUkVBRF9GVEQKKworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgicm91dGVyXHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImxlYWRlclxyXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoImludmFsaWQgc3RhdGVcclxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJkZXRhY2hlZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFRocmVhZEJlY29tZURldGFjaGVkKG1JbnN0YW5jZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiY2hpbGQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRCZWNvbWVDaGlsZChtSW5zdGFuY2UpKTsKKyAgICAgICAgfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyb3V0ZXIiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRCZWNvbWVSb3V0ZXIobUluc3RhbmNlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJsZWFkZXIiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRCZWNvbWVMZWFkZXIobUluc3RhbmNlKSk7CisgICAgICAgIH0KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1RocmVhZChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzdGFydCIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RUaHJlYWRTZXRFbmFibGVkKG1JbnN0YW5jZSwgdHJ1ZSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VGhyZWFkU2V0RW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKSk7CisgICAgfQorCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1R4UG93ZXJNYXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWQgZEJtXHJcbiIsIG90TGlua0dldE1heFRyYW5zbWl0UG93ZXIobUluc3RhbmNlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihtSW5zdGFuY2UsIHN0YXRpY19jYXN0PGludDhfdD4odmFsdWUpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1ZlcnNpb24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdFN0cmluZ1B0ciB2ZXJzaW9uKG90R2V0VmVyc2lvblN0cmluZygpKTsKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVzXHJcbiIsIChjb25zdCBjaGFyICopdmVyc2lvbik7CisgICAgQXBwZW5kUmVzdWx0KE9UX0VSUk9SX05PTkUpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0NvbW1pc3Npb25lcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0YXJ0IikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclN0YXJ0KG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInN0b3AiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyU3RvcChtSW5zdGFuY2UpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJqb2luZXIiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RFeHRBZGRyZXNzIGFkZHI7CisgICAgICAgIGNvbnN0IG90RXh0QWRkcmVzcyAqYWRkclB0cjsKKworICAgICAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDIsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGlmIChzdHJjbXAoYXJndlsyXSwgIioiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyUHRyID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChIZXgyQmluKGFyZ3ZbMl0sIGFkZHIubTgsIHNpemVvZihhZGRyKSkgPT0gc2l6ZW9mKGFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGFkZHJQdHIgPSAmYWRkcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJjbXAoYXJndlsxXSwgImFkZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAvLyBUaW1lb3V0IHBhcmFtZXRlciBpcyBvcHRpb25hbCAtIGlmIG5vdCBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0ga0RlZmF1bHRKb2luZXJUaW1lb3V0OworCisgICAgICAgICAgICBpZiAoYXJnYyA+IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlVW5zaWduZWRMb25nKGFyZ3ZbNF0sIHRpbWVvdXQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyQWRkSm9pbmVyKG1JbnN0YW5jZSwgYWRkclB0ciwgYXJndlszXSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRpbWVvdXQpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJyZW1vdmUiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb21taXNzaW9uZXJSZW1vdmVKb2luZXIobUluc3RhbmNlLCBhZGRyUHRyKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJwcm92aXNpb25pbmd1cmwiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyU2V0UHJvdmlzaW9uaW5nVXJsKG1JbnN0YW5jZSwgKGFyZ2MgPiAxKSA/IGFyZ3ZbMV0gOiBOVUxMKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAiYW5ub3VuY2UiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbG9uZyBtYXNrOworICAgICAgICBsb25nIGNvdW50OworICAgICAgICBsb25nIHBlcmlvZDsKKyAgICAgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3M7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiA0LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBtYXNrCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgbWFzaykpOworCisgICAgICAgIC8vIGNvdW50CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsyXSwgY291bnQpKTsKKworICAgICAgICAvLyBwZXJpb2QKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzNdLCBwZXJpb2QpKTsKKworICAgICAgICAvLyBkZXN0aW5hdGlvbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzRdLCAmYWRkcmVzcykpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lckFubm91bmNlQmVnaW4obUluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihtYXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Pihjb3VudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHBlcmlvZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJlc3MpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJlbmVyZ3kiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbG9uZyBtYXNrOworICAgICAgICBsb25nIGNvdW50OworICAgICAgICBsb25nIHBlcmlvZDsKKyAgICAgICAgbG9uZyBzY2FuRHVyYXRpb247CisgICAgICAgIG90SXA2QWRkcmVzcyBhZGRyZXNzOworCisgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjID4gNSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgLy8gbWFzaworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMV0sIG1hc2spKTsKKworICAgICAgICAvLyBjb3VudAorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMl0sIGNvdW50KSk7CisKKyAgICAgICAgLy8gcGVyaW9kCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlszXSwgcGVyaW9kKSk7CisKKyAgICAgICAgLy8gc2NhbiBkdXJhdGlvbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbNF0sIHNjYW5EdXJhdGlvbikpOworCisgICAgICAgIC8vIGRlc3RpbmF0aW9uCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbNV0sICZhZGRyZXNzKSk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbihtSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocGVyaW9kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc2NhbkR1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRlcjo6c19IYW5kbGVFbmVyZ3lSZXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInBhbmlkIikgPT0gMCkKKyAgICB7CisgICAgICAgIGxvbmcgcGFuaWQ7CisgICAgICAgIGxvbmcgbWFzazsKKyAgICAgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3M7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAzLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBwYW5pZAorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMV0sIHBhbmlkKSk7CisKKyAgICAgICAgLy8gbWFzaworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMl0sIG1hc2spKTsKKworICAgICAgICAvLyBkZXN0aW5hdGlvbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WzNdLCAmYWRkcmVzcykpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclBhbklkUXVlcnkobUluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihwYW5pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycHJldGVyOjpzX0hhbmRsZVBhbklkQ29uZmxpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgIm1nbXRnZXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgdWludDhfdCB0bHZzWzMyXTsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisKKyAgICAgICAgZm9yICh1aW50OF90IGluZGV4ID0gMTsgaW5kZXggPCBhcmdjOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIDwgc2l6ZW9mKHRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAibG9jYXRvciIpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9CT1JERVJfQUdFTlRfUkxPQzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgInNlc3Npb25pZCIpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9DT01NX1NFU1NJT05fSUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJzdGVlcmluZ2RhdGEiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfU1RFRVJJTkdfREFUQTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImpvaW5lcnVkcHBvcnQiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX1VEUF9QT1JUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiYmluYXJ5IikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKytpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8bG9uZz4oc3RybGVuKGFyZ3ZbaW5kZXhdKSArIDEpIC8gMjsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSkgPD0gKHNpemVvZih0bHZzKSAtIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSksIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbaW5kZXhdLCB0bHZzICsgbGVuZ3RoLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpKSA+PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclNlbmRNZ210R2V0KG1JbnN0YW5jZSwgdGx2cywgc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuZ3RoKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgIm1nbXRzZXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RDb21taXNzaW9uaW5nRGF0YXNldCBkYXRhc2V0OworICAgICAgICB1aW50OF90IHRsdnNbMzJdOworICAgICAgICBsb25nIHZhbHVlOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKworICAgICAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIG1lbXNldCgmZGF0YXNldCwgMCwgc2l6ZW9mKGRhdGFzZXQpKTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaW5kZXggPSAxOyBpbmRleCA8IGFyZ2M7IGluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgPCBzaXplb2YodGx2cyksIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAgICAgICAgIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJsb2NhdG9yIikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKytpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIGRhdGFzZXQubUlzTG9jYXRvclNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndltpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tTG9jYXRvciA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJzZXNzaW9uaWQiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgrK2luZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tSXNTZXNzaW9uSWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbaW5kZXhdLCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIGRhdGFzZXQubVNlc3Npb25JZCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJzdGVlcmluZ2RhdGEiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgrK2luZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tSXNTdGVlcmluZ0RhdGFTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oKHN0cmxlbihhcmd2W2luZGV4XSkgKyAxKSAvIDIpOworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgPD0gT1RfU1RFRVJJTkdfREFUQV9NQVhfTEVOR1RILCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChJbnRlcnByZXRlcjo6SGV4MkJpbihhcmd2W2luZGV4XSwgZGF0YXNldC5tU3RlZXJpbmdEYXRhLm04LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4obGVuZ3RoKSkgPj0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tU3RlZXJpbmdEYXRhLm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50OF90PihsZW5ndGgpOworICAgICAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJqb2luZXJ1ZHBwb3J0IikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKytpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIGRhdGFzZXQubUlzSm9pbmVyVWRwUG9ydFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndltpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgZGF0YXNldC5tSm9pbmVyVWRwUG9ydCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJiaW5hcnkiKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgrK2luZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50Pigoc3RybGVuKGFyZ3ZbaW5kZXhdKSArIDEpIC8gMik7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSA8PSBzaXplb2YodGx2cyksIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbaW5kZXhdLCB0bHZzLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4obGVuZ3RoKSkgPj0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvbW1pc3Npb25lclNlbmRNZ210U2V0KG1JbnN0YW5jZSwgJmRhdGFzZXQsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzZXNzaW9uaWQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZFxyXG4iLCBvdENvbW1pc3Npb25lckdldFNlc3Npb25JZChtSW5zdGFuY2UpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKwordm9pZCBPVENBTEwgSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRW5lcmd5UmVwb3J0KHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgdWludDhfdCAqYUVuZXJneUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhRW5lcmd5TGlzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZUVuZXJneVJlcG9ydChhQ2hhbm5lbE1hc2ssIGFFbmVyZ3lMaXN0LCBhRW5lcmd5TGlzdExlbmd0aCk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZUVuZXJneVJlcG9ydCh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIGNvbnN0IHVpbnQ4X3QgKmFFbmVyZ3lMaXN0LCB1aW50OF90IGFFbmVyZ3lMaXN0TGVuZ3RoKQoreworICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiRW5lcmd5OiAlMDh4ICIsIGFDaGFubmVsTWFzayk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhRW5lcmd5TGlzdExlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCIlZCAiLCBhRW5lcmd5TGlzdFtpXSk7CisgICAgfQorCisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7Cit9CisKK3ZvaWQgT1RDQUxMIEludGVycHJldGVyOjpzX0hhbmRsZVBhbklkQ29uZmxpY3QodWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEludGVycHJldGVyICo+KGFDb250ZXh0KS0+SGFuZGxlUGFuSWRDb25mbGljdChhUGFuSWQsIGFDaGFubmVsTWFzayk7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OkhhbmRsZVBhbklkQ29uZmxpY3QodWludDE2X3QgYVBhbklkLCB1aW50MzJfdCBhQ2hhbm5lbE1hc2spCit7CisgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJDb25mbGljdDogJTA0eCwgJTA4eFxyXG4iLCBhUGFuSWQsIGFDaGFubmVsTWFzayk7Cit9CisKKyNlbmRpZiAvLyAgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0pvaW5lcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgInN0YXJ0IikgPT0gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKnByb3Zpc2lvbmluZ1VybDsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAxLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgcHJvdmlzaW9uaW5nVXJsID0gKGFyZ2MgPiAyKSA/IGFyZ3ZbMl0gOiBOVUxMOworICAgICAgICBvdEpvaW5lclN0YXJ0KG1JbnN0YW5jZSwgYXJndlsxXSwgcHJvdmlzaW9uaW5nVXJsLAorICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgUExBVEZPUk1fSU5GTywgUEFDS0FHRV9WRVJTSU9OLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICZJbnRlcnByZXRlcjo6c19IYW5kbGVKb2luZXJDYWxsYmFjaywgdGhpcyk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAic3RvcCIpID09IDApCisgICAgeworICAgICAgICBvdEpvaW5lclN0b3AobUluc3RhbmNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCit2b2lkIE9UQ0FMTCBJbnRlcnByZXRlcjo6c19IYW5kbGVKb2luZXJDYWxsYmFjayhvdEVycm9yIGFFcnJvciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8SW50ZXJwcmV0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVKb2luZXJDYWxsYmFjayhhRXJyb3IpOworfQorCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVKb2luZXJDYWxsYmFjayhvdEVycm9yIGFFcnJvcikKK3sKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkpvaW4gc3VjY2Vzc1xyXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkpvaW4gZmFpbGVkIFslc11cclxuIiwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGFFcnJvcikpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0pvaW5lclBvcnQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJWRcclxuIiwgb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KG1JbnN0YW5jZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRTZXRKb2luZXJVZHBQb3J0KG1JbnN0YW5jZSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKSk7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc1doaXRlbGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90TWFjV2hpdGVsaXN0RW50cnkgZW50cnk7CisgICAgaW50IGFyZ2N1ciA9IDA7CisgICAgdWludDhfdCBleHRBZGRyWzhdOworICAgIGludDhfdCByc3NpOworCisgICAgaWYgKGFyZ2N1ciA+PSBhcmdjKQorICAgIHsKKyAgICAgICAgaWYgKG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZChtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkVuYWJsZWRcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRpc2FibGVkXHJcbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyA7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG90TGlua0dldFdoaXRlbGlzdEVudHJ5KG1JbnN0YW5jZSwgaSwgJmVudHJ5KSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZW50cnkubVZhbGlkID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPdXRwdXRCeXRlcyhlbnRyeS5tRXh0QWRkcmVzcy5tOCwgT1RfRVhUX0FERFJFU1NfU0laRSk7CisKKyAgICAgICAgICAgIGlmIChlbnRyeS5tRml4ZWRSc3NpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiICVkIiwgZW50cnkubVJzc2kpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAiYWRkIikgPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2FyZ2N1ciA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2W2FyZ2N1cl0sIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgPT0gc2l6ZW9mKGV4dEFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBpZiAoKythcmdjdXIgPCBhcmdjKQorICAgICAgICB7CisgICAgICAgICAgICByc3NpID0gc3RhdGljX2Nhc3Q8aW50OF90PihzdHJ0b2woYXJndlthcmdjdXJdLCBOVUxMLCAwKSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQob3RMaW5rQWRkV2hpdGVsaXN0UnNzaShtSW5zdGFuY2UsIGV4dEFkZHIsIHJzc2kpID09IE9UX0VSUk9SX05PTkUsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaW5rQWRkV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQob3RMaW5rQWRkV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcikgPT0gT1RfRVJST1JfTk9ORSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnY3VyXSwgImNsZWFyIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua0NsZWFyV2hpdGVsaXN0KG1JbnN0YW5jZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJkaXNhYmxlIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2FyZ2N1cl0sICJlbmFibGUiKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMaW5rU2V0V2hpdGVsaXN0RW5hYmxlZChtSW5zdGFuY2UsIHRydWUpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmdjdXJdLCAicmVtb3ZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2FyZ2N1ciA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoSGV4MkJpbihhcmd2W2FyZ2N1cl0sIGV4dEFkZHIsIHNpemVvZihleHRBZGRyKSkgPT0gc2l6ZW9mKGV4dEFkZHIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcik7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzRGlhZyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIC8vIGFsbCBkaWFnbm9zdGljcyByZWxhdGVkIGZlYXR1cmVzIGFyZSBwcm9jZXNzZWQgd2l0aGluIGRpYWdub3N0aWNzIG1vZHVsZQorICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXNcclxuIiwgb3REaWFnUHJvY2Vzc0NtZChhcmdjLCBhcmd2KSk7Cit9CisjZW5kaWYKKwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc0xpbmUoY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCwgU2VydmVyICZhU2VydmVyKQoreworICAgIGNoYXIgKmFyZ3Zba01heEFyZ3NdOworICAgIGNoYXIgKmNtZDsKKyAgICB1aW50OF90IGFyZ2MgPSAwLCBpID0gMDsKKworICAgIG1TZXJ2ZXIgPSAmYVNlcnZlcjsKKworICAgIFZlcmlmeU9yRXhpdChhQnVmICE9IE5VTEwpOworCisgICAgZm9yICg7ICphQnVmID09ICcgJzsgYUJ1ZisrLCBhQnVmTGVuZ3RoLS0pOworCisgICAgZm9yIChjbWQgPSBhQnVmICsgMTsgKGNtZCA8IGFCdWYgKyBhQnVmTGVuZ3RoKSAmJiAoY21kICE9IE5VTEwpOyArK2NtZCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhcmdjIDwga01heEFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkVycm9yOiB0b28gbWFueSBhcmdzIChtYXggJWQpXHJcbiIsIGtNYXhBcmdzKSk7CisKKyAgICAgICAgaWYgKCpjbWQgPT0gJyAnIHx8ICpjbWQgPT0gJ1xyJyB8fCAqY21kID09ICdcbicpCisgICAgICAgIHsKKyAgICAgICAgICAgICpjbWQgPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCooY21kIC0gMSkgPT0gJ1wwJyAmJiAqY21kICE9ICcgJykKKyAgICAgICAgeworICAgICAgICAgICAgYXJndlthcmdjKytdID0gY21kOworICAgICAgICB9CisgICAgfQorCisgICAgY21kID0gYUJ1ZjsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICBWZXJpZnlPckV4aXQoKCFvdERpYWdJc0VuYWJsZWQoKSB8fCAoc3RyY21wKGNtZCwgImRpYWciKSA9PSAwKSksCisgICAgICAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgidW5kZXIgZGlhZ25vc3RpY3MgbW9kZSwgZXhlY3V0ZSAnZGlhZyBzdG9wJyBiZWZvcmUgcnVubmluZyBhbnkgb3RoZXIgY29tbWFuZHMuXHJcbiIpKTsKKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoY21kLCBzQ29tbWFuZHNbaV0ubU5hbWUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgICh0aGlzLT4qc0NvbW1hbmRzW2ldLm1Db21tYW5kKShhcmdjLCBhcmd2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXJyb3IgcHJvbXB0IGZvciB1bnN1cHBvcnRlZCBjb21tYW5kcworICAgIGlmIChpID09IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSkpCisgICAgeworICAgICAgICBBcHBlbmRSZXN1bHQoT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgT1RDQUxMIEludGVycHJldGVyOjpzX0hhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpCit7CisjaWZkZWYgT1RETEwKKyAgICBvdENsaUNvbnRleHQgKmNsaUNvbnRleHQgPSBzdGF0aWNfY2FzdDxvdENsaUNvbnRleHQgKj4oYUNvbnRleHQpOworICAgIGNsaUNvbnRleHQtPm1JbnRlcnByZXRlci0+SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQoY2xpQ29udGV4dC0+bUluc3RhbmNlLCBhRmxhZ3MpOworI2Vsc2UKKyAgICBzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dCktPkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKGFGbGFncyk7CisjZW5kaWYKK30KKworI2lmZGVmIE9URExMCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChvdEluc3RhbmNlICptSW5zdGFuY2UsIHVpbnQzMl90IGFGbGFncykKKyNlbHNlCit2b2lkIEludGVycHJldGVyOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MpCisjZW5kaWYKK3sKKyAgICBWZXJpZnlPckV4aXQoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpICE9IDApOworCisjaWZuZGVmIE9URExMCisgICAgb3RJcDZTbGFhY1VwZGF0ZShtSW5zdGFuY2UsIG1TbGFhY0FkZHJlc3Nlcywgc2l6ZW9mKG1TbGFhY0FkZHJlc3NlcykgLyBzaXplb2YobVNsYWFjQWRkcmVzc2VzWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgIG90SXA2Q3JlYXRlUmFuZG9tSWlkLCBOVUxMKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKKyAgICBvdERoY3A2U2VydmVyVXBkYXRlKG1JbnN0YW5jZSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgb3REaGNwNkNsaWVudFVwZGF0ZShtSW5zdGFuY2UsIG1EaGNwQWRkcmVzc2VzLCBzaXplb2YobURoY3BBZGRyZXNzZXMpIC8gc2l6ZW9mKG1EaGNwQWRkcmVzc2VzWzBdKSwgTlVMTCk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorI2VuZGlmCisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQwordm9pZCBJbnRlcnByZXRlcjo6UHJvY2Vzc05ldHdvcmtEaWFnbm9zdGljKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3RydWN0IG90SXA2QWRkcmVzcyBhZGRyZXNzOworICAgIHVpbnQ4X3QgcGF5bG9hZFsyICsgT1RfTkVUV09SS19ESUFHTk9TVElDX1RZUEVMSVNUX01BWF9FTlRSSUVTXTsgIC8vIFR5cGVMaXN0IFR5cGUoMUIpLCBsZW4oMUIpLCB0eXBlIGxpc3QKKyAgICB1aW50OF90IHBheWxvYWRJbmRleCA9IDA7CisgICAgdWludDhfdCBwYXJhbUluZGV4ID0gMDsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMSArIDEsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlsxXSwgJmFkZHJlc3MpKTsKKworICAgIHBheWxvYWRJbmRleCA9IDI7CisgICAgcGFyYW1JbmRleCA9IDI7CisKKyAgICB3aGlsZSAocGFyYW1JbmRleCA8IGFyZ2MgJiYgcGF5bG9hZEluZGV4IDwgc2l6ZW9mKHBheWxvYWQpKQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2W3BhcmFtSW5kZXgrK10sIHZhbHVlKSk7CisgICAgICAgIHBheWxvYWRbcGF5bG9hZEluZGV4KytdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAgIH0KKworICAgIHBheWxvYWRbMF0gPSBPVF9ORVRXT1JLX0RJQUdOT1NUSUNfVFlQRUxJU1RfVFlQRTsgIC8vIFR5cGVMaXN0IFRMViBUeXBlCisgICAgcGF5bG9hZFsxXSA9IHBheWxvYWRJbmRleCAtIDI7ICAvLyBsZW5ndGgKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImdldCIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KG1JbnN0YW5jZSwgJmFkZHJlc3MsIHBheWxvYWQsIHBheWxvYWRJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyZXNldCIpID09IDApCisgICAgeworICAgICAgICBvdFRocmVhZFNlbmREaWFnbm9zdGljUmVzZXQobUluc3RhbmNlLCAmYWRkcmVzcywgcGF5bG9hZCwgcGF5bG9hZEluZGV4KTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kUmVzdWx0KGVycm9yKTsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURCB8fCBPUEVOVEhSRUFEX0VOQUJMRV9NVERfTkVUV09SS19ESUFHTk9TVElDCisKKyNpZm5kZWYgT1RETEwKK3ZvaWQgSW50ZXJwcmV0ZXI6OnNfSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEludGVycHJldGVyICo+KGFDb250ZXh0KS0+SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBJbnRlcnByZXRlcjo6SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYpCit7CisgICAgdWludDhfdCBidWZbMTZdOworICAgIHVpbnQxNl90IGJ5dGVzVG9QcmludDsKKyAgICB1aW50MTZfdCBieXRlc1ByaW50ZWQgPSAwOworICAgIHVpbnQxNl90IGxlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRJQUdfR0VULnJzcDogIik7CisKKyAgICB3aGlsZSAobGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGJ5dGVzVG9QcmludCA9IChsZW5ndGggPCBzaXplb2YoYnVmKSkgPyBsZW5ndGggOiBzaXplb2YoYnVmKTsKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSArIGJ5dGVzUHJpbnRlZCwgYnl0ZXNUb1ByaW50LCBidWYpOworCisgICAgICAgIE91dHB1dEJ5dGVzKGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYnl0ZXNUb1ByaW50KSk7CisKKyAgICAgICAgbGVuZ3RoICAgICAgIC09IGJ5dGVzVG9QcmludDsKKyAgICAgICAgYnl0ZXNQcmludGVkICs9IGJ5dGVzVG9QcmludDsKKyAgICB9CisKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKK30KKyNlbmRpZgorCitJbnRlcnByZXRlciAmSW50ZXJwcmV0ZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEludGVycHJldGVyICZpbnRlcnByZXRlciA9ICpzdGF0aWNfY2FzdDxJbnRlcnByZXRlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBJbnRlcnByZXRlciAmaW50ZXJwcmV0ZXIgPSBVYXJ0OjpzVWFydFNlcnZlci0+R2V0SW50ZXJwcmV0ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGludGVycHJldGVyOworfQorCit9ICAvLyBuYW1lc3BhY2UgQ2xpCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpLmhwcCBiL3NyYy9jbGkvY2xpLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRiOWFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGkuaHBwCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIENMSSBpbnRlcnByZXRlci4KKyAqLworCisjaWZuZGVmIENMSV9IUFBfCisjZGVmaW5lIENMSV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2lwNi5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdWRwLmg+CisKKyNpbmNsdWRlICJjbGkvY2xpX3NlcnZlci5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisjaW5jbHVkZSA8Y29hcC9jb2FwX2hlYWRlci5ocHA+CisjaW5jbHVkZSAiY2xpL2NsaV9jb2FwLmhwcCIKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb250ZXh0LmhwcCIKKworI2lmbmRlZiBPVERMTAorI2luY2x1ZGUgPG9wZW50aHJlYWQvZGhjcDZfY2xpZW50Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9kbnMuaD4KKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9pY21wNi5ocHAiCisjZW5kaWYKKworI2lmZGVmIE9URExMCisjZGVmaW5lIE1BWF9DTElfT1RfSU5TVEFOQ0VTIDY0CisjZW5kaWYKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpDbGkKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKgorICovCituYW1lc3BhY2UgQ2xpIHsKKworY2xhc3MgSW50ZXJwcmV0ZXI7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENMSSBjb21tYW5kLgorICoKKyAqLworc3RydWN0IENvbW1hbmQKK3sKKyAgICBjb25zdCBjaGFyICptTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgc3RyaW5nLgorICAgIHZvaWQgKEludGVycHJldGVyOjoqbUNvbW1hbmQpKGludCBhcmdjLCBjaGFyICphcmd2W10pOyAgLy8vPCBBIGZ1bmN0aW9uIHBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgY29tbWFuZC4KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKgorICovCitjbGFzcyBJbnRlcnByZXRlcgoreworICAgIGZyaWVuZCBjbGFzcyBDb2FwOworCitwdWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICovCisgICAgSW50ZXJwcmV0ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGludGVycHJldHMgYSBDTEkgY29tbWFuZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIHN0cmluZy4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYVNlcnZlciAgICAgQSByZWZlcmVuY2UgdG8gdGhlIENMSSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFByb2Nlc3NMaW5lKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsIFNlcnZlciAmYVNlcnZlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgYW4gQVNDSUkgc3RyaW5nIGFzIGEgbG9uZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhU3RyaW5nICBBIHBvaW50ZXIgdG8gdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUxvbmcgICAgQSByZWZlcmVuY2UgdG8gd2hlcmUgdGhlIHBhcnNlZCBsb25nIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX1BBUlNFICBDb3VsZCBub3QgcGFyc2UgdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIFBhcnNlTG9uZyhjaGFyICphU3RyaW5nLCBsb25nICZhTG9uZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwYXJzZXMgYW4gQVNDSUkgc3RyaW5nIGFzIGFuIHVuc2lnbmVkIGxvbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYVN0cmluZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEFTQ0lJIHN0cmluZy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVVuc2lnbmVkTG9uZyAgICBBIHJlZmVyZW5jZSB0byB3aGVyZSB0aGUgcGFyc2VkIHVuc2lnbmVkIGxvbmcgaXMgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgU3VjY2Vzc2Z1bGx5IHBhcnNlZCB0aGUgQVNDSUkgc3RyaW5nLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgIENvdWxkIG5vdCBwYXJzZSB0aGUgQVNDSUkgc3RyaW5nLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgUGFyc2VVbnNpZ25lZExvbmcoY2hhciAqYVN0cmluZywgdW5zaWduZWQgbG9uZyAmYVVuc2lnbmVkTG9uZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIGhleCBzdHJpbmcgdG8gYmluYXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFIZXggICAgICAgIEEgcG9pbnRlciB0byB0aGUgaGV4IHN0cmluZy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJpbiAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgcGxhY2VkLgorICAgICAqIEBwYXJhbVtpbl0gICBhQmluTGVuZ3RoICBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorICAgICAqLworICAgIHN0YXRpYyBpbnQgSGV4MkJpbihjb25zdCBjaGFyICphSGV4LCB1aW50OF90ICphQmluLCB1aW50MTZfdCBhQmluTGVuZ3RoKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4QXJncyA9IDMyLAorICAgICAgICBrTWF4QXV0b0FkZHJlc3NlcyA9IDgsCisgICAgICAgIGtEZWZhdWx0Sm9pbmVyVGltZW91dCA9IDEyMCwgICAgLy8vPCBEZWZhdWx0IHRpbWVvdXQgZm9yIEpvaW5lcnMsIGluIHNlY29uZHMuCisgICAgfTsKKworICAgIHZvaWQgQXBwZW5kUmVzdWx0KG90RXJyb3IgZXJyb3IpIGNvbnN0OworICAgIHZvaWQgT3V0cHV0Qnl0ZXMoY29uc3QgdWludDhfdCAqYUJ5dGVzLCB1aW50OF90IGFMZW5ndGgpIGNvbnN0OworCisgICAgdm9pZCBQcm9jZXNzSGVscChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NBdXRvU3RhcnQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzQnVmZmVySW5mbyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NCbGFja2xpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzQ2hhbm5lbChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHZvaWQgUHJvY2Vzc0NoaWxkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc0NoaWxkTWF4KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzQ2hpbGRUaW1lb3V0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKyAgICB2b2lkIFByb2Nlc3NDb2FwKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmICAvL09QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NDb21taXNzaW9uZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorI2lmIE9QRU5USFJFQURfRlRECisgICAgdm9pZCBQcm9jZXNzQ29udGV4dElkUmV1c2VEZWxheShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorICAgIHZvaWQgUHJvY2Vzc0NvdW50ZXJzKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc0RhdGFzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NEZWxheVRpbWVyTWluKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworICAgIHZvaWQgUHJvY2Vzc0RpYWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICB2b2lkIFByb2Nlc3NEaXNjb3ZlcihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgdm9pZCBQcm9jZXNzRG5zKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NFaWRDYWNoZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorICAgIHZvaWQgUHJvY2Vzc0V1aTY0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmZGVmIE9QRU5USFJFQURfRVhBTVBMRVNfUE9TSVgKKyAgICB2b2lkIFByb2Nlc3NFeGl0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzRXh0QWRkcmVzcyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NFeHRQYW5JZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NGYWN0b3J5UmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSGFzaE1hY0FkZHJlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSWZjb25maWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSXBBZGRyKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc0lwQWRkckFkZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBvdEVycm9yIFByb2Nlc3NJcEFkZHJEZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzSXBNdWx0aWNhc3RBZGRyKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmbmRlZiBPVERMTAorICAgIG90RXJyb3IgUHJvY2Vzc0lwTXVsdGljYXN0QWRkckFkZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBvdEVycm9yIFByb2Nlc3NJcE11bHRpY2FzdEFkZHJEZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgb3RFcnJvciBQcm9jZXNzTXVsdGljYXN0UHJvbWlzY3VvdXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyAgICB2b2lkIFByb2Nlc3NKb2luZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorI2lmIE9QRU5USFJFQURfRlRECisgICAgdm9pZCBQcm9jZXNzSm9pbmVyUG9ydChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorICAgIHZvaWQgUHJvY2Vzc0tleVNlcXVlbmNlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc0xlYWRlckRhdGEoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NMZWFkZXJQYXJ0aXRpb25JZChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NMZWFkZXJXZWlnaHQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NMaW5rUXVhbGl0eShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NNYXN0ZXJLZXkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzTW9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgdm9pZCBQcm9jZXNzTmV0d29ya0RhdGFSZWdpc3RlcihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKyAgICB2b2lkIFByb2Nlc3NOZXR3b3JrRGlhZ25vc3RpYyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURCB8fCBPUEVOVEhSRUFEX0VOQUJMRV9NVERfTkVUV09SS19ESUFHTk9TVElDCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NOZXR3b3JrSWRUaW1lb3V0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzTmV0d29ya05hbWUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUGFuSWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUGFyZW50KGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2lmIE9QRU5USFJFQURfRlRECisgICAgdm9pZCBQcm9jZXNzUGFyZW50UHJpb3JpdHkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NQaW5nKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1BvbGxQZXJpb2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHZvaWQgUHJvY2Vzc1ByZWZpeChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBvdEVycm9yIFByb2Nlc3NQcmVmaXhBZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgb3RFcnJvciBQcm9jZXNzUHJlZml4UmVtb3ZlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc1ByZWZpeExpc3Qodm9pZCk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NQcm9taXNjdW91cyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHZvaWQgUHJvY2Vzc1BTS2MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUmVsZWFzZVJvdXRlcklkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisgICAgdm9pZCBQcm9jZXNzUmVzZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIHZvaWQgUHJvY2Vzc1JvdXRlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc1JvdXRlQWRkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIG90RXJyb3IgUHJvY2Vzc1JvdXRlUmVtb3ZlKGludCBhcmdjLCBjaGFyICphcmd2W10pOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICB2b2lkIFByb2Nlc3NSb3V0ZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUm91dGVyRG93bmdyYWRlVGhyZXNob2xkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1JvdXRlclJvbGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzUm91dGVyU2VsZWN0aW9uSml0dGVyKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1JvdXRlclVwZ3JhZGVUaHJlc2hvbGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKyAgICB2b2lkIFByb2Nlc3NSbG9jMTYoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzU2NhbihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NTaW5nbGV0b24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzU3RhdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzVGhyZWFkKGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHZvaWQgUHJvY2Vzc1R4UG93ZXJNYXgoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgdm9pZCBQcm9jZXNzVmVyc2lvbihpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NXaGl0ZWxpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKyNpZmRlZiBPVERMTAorICAgIHZvaWQgUHJvY2Vzc0luc3RhbmNlTGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICB2b2lkIFByb2Nlc3NJbnN0YW5jZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorCisjaWZuZGVmIE9URExMCisgICAgc3RhdGljIHZvaWQgc19IYW5kbGVJY21wUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJY21wNkhlYWRlciAqYUljbXBIZWFkZXIpOworICAgIHN0YXRpYyB2b2lkIHNfSGFuZGxlUGluZ1RpbWVyKFRpbWVyICZhVGltZXIpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlQWN0aXZlU2NhblJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwgc19IYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MsIHZvaWQgKmFDb250ZXh0KTsKKyNpZm5kZWYgT1RETEwKKyAgICBzdGF0aWMgdm9pZCBzX0hhbmRsZUxpbmtQY2FwUmVjZWl2ZShjb25zdCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgdm9pZCAqYUNvbnRleHQpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlRW5lcmd5UmVwb3J0KHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgdWludDhfdCAqYUVuZXJneUxpc3QsIHVpbnQ4X3QgYUVuZXJneUxpc3RMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwgc19IYW5kbGVQYW5JZENvbmZsaWN0KHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCB2b2lkICphQ29udGV4dCk7CisjaWZuZGVmIE9URExMCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYUNvbnRleHQpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIHNfSGFuZGxlSm9pbmVyQ2FsbGJhY2sob3RFcnJvciBhRXJyb3IsIHZvaWQgKmFDb250ZXh0KTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICBzdGF0aWMgdm9pZCBzX0hhbmRsZURuc1Jlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBjb25zdCBjaGFyICphSG9zdG5hbWUsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhVHRsLCBvdEVycm9yIGFSZXN1bHQpOworI2VuZGlmCisKKyNpZm5kZWYgT1RETEwKKyAgICB2b2lkIEhhbmRsZUljbXBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdEljbXA2SGVhZGVyICZhSWNtcEhlYWRlcik7CisgICAgdm9pZCBIYW5kbGVQaW5nVGltZXIoKTsKKyNlbmRpZgorICAgIHZvaWQgSGFuZGxlQWN0aXZlU2NhblJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQpOworI2lmZGVmIE9URExMCisgICAgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFGbGFncyk7CisjZWxzZQorICAgIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKTsKKyNlbmRpZgorI2lmbmRlZiBPVERMTAorICAgIHZvaWQgSGFuZGxlTGlua1BjYXBSZWNlaXZlKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lKTsKKyNlbmRpZgorICAgIHZvaWQgSGFuZGxlRW5lcmd5UmVwb3J0KHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgdWludDhfdCAqYUVuZXJneUxpc3QsIHVpbnQ4X3QgYUVuZXJneUxpc3RMZW5ndGgpOworICAgIHZvaWQgSGFuZGxlUGFuSWRDb25mbGljdCh1aW50MTZfdCBhUGFuSWQsIHVpbnQzMl90IGFDaGFubmVsTWFzayk7CisjaWZuZGVmIE9URExMCisgICAgdm9pZCBIYW5kbGVEaWFnbm9zdGljR2V0UmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisjZW5kaWYKKyAgICB2b2lkIEhhbmRsZUpvaW5lckNhbGxiYWNrKG90RXJyb3IgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICB2b2lkIEhhbmRsZURuc1Jlc3BvbnNlKGNvbnN0IGNoYXIgKmFIb3N0bmFtZSwgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywgdWludDMyX3QgYVR0bCwgb3RFcnJvciBhUmVzdWx0KTsKKyNlbmRpZgorCisgICAgc3RhdGljIEludGVycHJldGVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisKKyAgICBDb2FwIG1Db2FwOworCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21tYW5kIHNDb21tYW5kc1tdOworCisgICAgU2VydmVyICptU2VydmVyOworCisjaWZkZWYgT1RETEwKKworICAgIHZvaWQgQ2FjaGVJbnN0YW5jZXMoKTsKKworICAgIG90QXBpSW5zdGFuY2UgKm1BcGlJbnN0YW5jZTsKKworICAgIHN0cnVjdCBvdENsaUNvbnRleHQKKyAgICB7CisgICAgICAgIEludGVycHJldGVyICptSW50ZXJwcmV0ZXI7CisgICAgICAgIG90SW5zdGFuY2UgICptSW5zdGFuY2U7CisgICAgfTsKKyAgICBvdENsaUNvbnRleHQgbUluc3RhbmNlc1tNQVhfQ0xJX09UX0lOU1RBTkNFU107CisgICAgdWludDhfdCBtSW5zdGFuY2VzTGVuZ3RoOworICAgIHVpbnQ4X3QgbUluc3RhbmNlSW5kZXg7CisKKyNlbHNlCisKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1NZXNzYWdlSW5mbzsKKworICAgIHVpbnQxNl90IG1MZW5ndGg7CisgICAgdWludDE2X3QgbUNvdW50OworICAgIHVpbnQzMl90IG1JbnRlcnZhbDsKKyAgICBUaW1lciBtUGluZ1RpbWVyOworCisgICAgb3ROZXRpZkFkZHJlc3MgIG1TbGFhY0FkZHJlc3Nlc1tPUEVOVEhSRUFEX0NPTkZJR19OVU1fU0xBQUNfQUREUkVTU0VTXTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICBvdERoY3BBZGRyZXNzICBtRGhjcEFkZHJlc3Nlc1tPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFU107CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyAgICBvdEljbXA2SGFuZGxlciBtSWNtcEhhbmRsZXI7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIGJvb2wgbVJlc29sdmluZ0luUHJvZ3Jlc3M7CisgICAgY2hhciBtUmVzb2x2aW5nSG9zdG5hbWVbT1RfRE5TX01BWF9IT1NUTkFNRV9MRU5HVEhdOworI2VuZGlmCisKKyNlbmRpZgorCisgICAgb3RJbnN0YW5jZSAqbUluc3RhbmNlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2NvYXAuY3BwIGIvc3JjL2NsaS9jbGlfY29hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmNjY0OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX2NvYXAuY3BwCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgc2ltcGxlIENMSSBmb3IgdGhlIENvQVAgc2VydmljZS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0FQUExJQ0FUSU9OX0NPQVAKKworI2luY2x1ZGUgImNsaV9jb2FwLmhwcCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJjbGkvY2xpLmhwcCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCit2b2lkIENvYXA6OlByaW50UGF5bG9hZChvdE1lc3NhZ2UgKmFNZXNzYWdlKSBjb25zdAoreworICAgIHVpbnQ4X3QgYnVmW2tNYXhCdWZmZXJTaXplXTsKKyAgICB1aW50MTZfdCBieXRlc1RvUHJpbnQ7CisgICAgdWludDE2X3QgYnl0ZXNQcmludGVkID0gMDsKKyAgICB1aW50MTZfdCBsZW5ndGggPSBvdE1lc3NhZ2VHZXRMZW5ndGgoYU1lc3NhZ2UpIC0gb3RNZXNzYWdlR2V0T2Zmc2V0KGFNZXNzYWdlKTsKKworICAgIGlmIChsZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiIHdpdGggcGF5bG9hZDogIik7CisKKyAgICAgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ5dGVzVG9QcmludCA9IChsZW5ndGggPCBzaXplb2YoYnVmKSkgPyBsZW5ndGggOiBzaXplb2YoYnVmKTsKKyAgICAgICAgICAgIG90TWVzc2FnZVJlYWQoYU1lc3NhZ2UsIG90TWVzc2FnZUdldE9mZnNldChhTWVzc2FnZSkgKyBieXRlc1ByaW50ZWQsIGJ1ZiwgYnl0ZXNUb1ByaW50KTsKKworICAgICAgICAgICAgbUludGVycHJldGVyLk91dHB1dEJ5dGVzKGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYnl0ZXNUb1ByaW50KSk7CisKKyAgICAgICAgICAgIGxlbmd0aCAgICAgICAtPSBieXRlc1RvUHJpbnQ7CisgICAgICAgICAgICBieXRlc1ByaW50ZWQgKz0gYnl0ZXNUb1ByaW50OworICAgICAgICB9CisgICAgfQorCisgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworfQorCitvdEVycm9yIENvYXA6OlByb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAic3RhcnQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90Q29hcFN0YXJ0KG1JbnRlcnByZXRlci5tSW5zdGFuY2UsIE9UX0RFRkFVTFRfQ09BUF9QT1JUKSk7CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNvYXAgc2VydmljZSBzdGFydGVkOiAiKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzdG9wIikgPT0gMCkKKyAgICB7CisgICAgICAgIG90Q29hcFJlbW92ZVJlc291cmNlKG1JbnRlcnByZXRlci5tSW5zdGFuY2UsICZtUmVzb3VyY2UpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb2FwU3RvcChtSW50ZXJwcmV0ZXIubUluc3RhbmNlKSk7CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNvYXAgc2VydmljZSBzdG9wcGVkOiAiKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJyZXNvdXJjZSIpID09IDApCisgICAgeworICAgICAgICBtUmVzb3VyY2UubVVyaVBhdGggPSBtVXJpUGF0aDsKKyAgICAgICAgbVJlc291cmNlLm1Db250ZXh0ID0gdGhpczsKKyAgICAgICAgbVJlc291cmNlLm1IYW5kbGVyID0gJkNvYXA6OkhhbmRsZVNlcnZlclJlc3BvbnNlOworCisgICAgICAgIGlmIChhcmdjID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RybGNweShtVXJpUGF0aCwgYXJndlsxXSwga01heFVyaUxlbmd0aCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb2FwQWRkUmVzb3VyY2UobUludGVycHJldGVyLm1JbnN0YW5jZSwgJm1SZXNvdXJjZSkpOworICAgICAgICB9CisKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUmVzb3VyY2UgbmFtZSBpcyAnJXMnOiAiLCBtUmVzb3VyY2UubVVyaVBhdGgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFByb2Nlc3NSZXF1ZXN0KGFyZ2MsIGFyZ3YpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgT1RDQUxMIENvYXA6OkhhbmRsZVNlcnZlclJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcCAqPihhQ29udGV4dCktPkhhbmRsZVNlcnZlclJlc3BvbnNlKGFIZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCit2b2lkIENvYXA6OkhhbmRsZVNlcnZlclJlc3BvbnNlKG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Q29hcEhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBvdE1lc3NhZ2UgKnJlc3BvbnNlTWVzc2FnZTsKKyAgICBvdENvYXBDb2RlIHJlc3BvbnNlQ29kZSA9IE9UX0NPQVBfQ09ERV9FTVBUWTsKKyAgICBjaGFyIHJlc3BvbnNlQ29udGVudCA9ICcwJzsKKworICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIlJlY2VpdmVkIGNvYXAgcmVxdWVzdCBmcm9tIFsleDoleDoleDoleDoleDoleDoleDoleF06ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby0+bVNvY2tBZGRyLm1GaWVsZHMubTE2WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLT5tU29ja0FkZHIubUZpZWxkcy5tMTZbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8tPm1Tb2NrQWRkci5tRmllbGRzLm0xNlsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby0+bVNvY2tBZGRyLm1GaWVsZHMubTE2WzNdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLT5tU29ja0FkZHIubUZpZWxkcy5tMTZbNF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8tPm1Tb2NrQWRkci5tRmllbGRzLm0xNls1XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby0+bVNvY2tBZGRyLm1GaWVsZHMubTE2WzZdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLT5tU29ja0FkZHIubUZpZWxkcy5tMTZbN10pKTsKKworICAgIHN3aXRjaCAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSkKKyAgICB7CisgICAgY2FzZSBPVF9DT0FQX0NPREVfR0VUOgorICAgICAgICBtSW50ZXJwcmV0ZXIubVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJHRVQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0NPQVBfQ09ERV9ERUxFVEU6CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkRFTEVURSIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfQ09BUF9DT0RFX1BVVDoKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUFVUIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9DT0FQX0NPREVfUE9TVDoKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUE9TVCIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIlVuZGVmaW5lZFxyXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByaW50UGF5bG9hZChhTWVzc2FnZSk7CisKKyAgICBpZiAoKG90Q29hcEhlYWRlckdldFR5cGUoYUhlYWRlcikgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFKSB8fCBvdENvYXBIZWFkZXJHZXRDb2RlKGFIZWFkZXIpID09IE9UX0NPQVBfQ09ERV9HRVQpCisgICAgeworICAgICAgICBpZiAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSA9PSBPVF9DT0FQX0NPREVfR0VUKQorICAgICAgICB7CisgICAgICAgICAgICByZXNwb25zZUNvZGUgPSBPVF9DT0FQX0NPREVfQ09OVEVOVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29kZSA9IE9UX0NPQVBfQ09ERV9WQUxJRDsKKyAgICAgICAgfQorCisgICAgICAgIG90Q29hcEhlYWRlckluaXQoJnJlc3BvbnNlSGVhZGVyLCBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQsIHJlc3BvbnNlQ29kZSk7CisgICAgICAgIG90Q29hcEhlYWRlclNldE1lc3NhZ2VJZCgmcmVzcG9uc2VIZWFkZXIsIG90Q29hcEhlYWRlckdldE1lc3NhZ2VJZChhSGVhZGVyKSk7CisgICAgICAgIG90Q29hcEhlYWRlclNldFRva2VuKCZyZXNwb25zZUhlYWRlciwgb3RDb2FwSGVhZGVyR2V0VG9rZW4oYUhlYWRlciksIG90Q29hcEhlYWRlckdldFRva2VuTGVuZ3RoKGFIZWFkZXIpKTsKKworICAgICAgICBpZiAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSA9PSBPVF9DT0FQX0NPREVfR0VUKQorICAgICAgICB7CisgICAgICAgICAgICBvdENvYXBIZWFkZXJTZXRQYXlsb2FkTWFya2VyKCZyZXNwb25zZUhlYWRlcik7CisgICAgICAgIH0KKworICAgICAgICByZXNwb25zZU1lc3NhZ2UgPSBvdENvYXBOZXdNZXNzYWdlKG1JbnRlcnByZXRlci5tSW5zdGFuY2UsICZyZXNwb25zZUhlYWRlcik7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZXNwb25zZU1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBpZiAob3RDb2FwSGVhZGVyR2V0Q29kZShhSGVhZGVyKSA9PSBPVF9DT0FQX0NPREVfR0VUKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlQXBwZW5kKHJlc3BvbnNlTWVzc2FnZSwgJnJlc3BvbnNlQ29udGVudCwgc2l6ZW9mKHJlc3BvbnNlQ29udGVudCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdENvYXBTZW5kUmVzcG9uc2UobUludGVycHJldGVyLm1JbnN0YW5jZSwgcmVzcG9uc2VNZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiByZXNwb25zZU1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1JbnRlcnByZXRlci5tU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNhbm5vdCBzZW5kIGNvYXAgcmVzcG9uc2UgbWVzc2FnZTogRXJyb3IgJWQ6ICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvcikpOworICAgICAgICBvdE1lc3NhZ2VGcmVlKHJlc3BvbnNlTWVzc2FnZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHJlc3BvbnNlQ29kZSA+PSBPVF9DT0FQX0NPREVfUkVTUE9OU0VfTUlOKQorICAgIHsKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiY29hcCByZXNwb25zZSBzZW50IHN1Y2Nlc3NmdWxseSFcclxuIik7CisgICAgfQorfQorCitvdEVycm9yIENvYXA6OlByb2Nlc3NSZXF1ZXN0KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBvdE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIG90Q29hcEhlYWRlciBoZWFkZXI7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aCA9IDA7CisKKyAgICAvLyBEZWZhdWx0IHBhcmFtZXRlcnMKKyAgICBjaGFyIGNvYXBVcmlba01heFVyaUxlbmd0aF0gPSAidGVzdCI7CisgICAgb3RDb2FwVHlwZSBjb2FwVHlwZSA9IE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEU7CisgICAgb3RDb2FwQ29kZSBjb2FwQ29kZSA9IE9UX0NPQVBfQ09ERV9HRVQ7CisgICAgb3RJcDZBZGRyZXNzIGNvYXBEZXN0aW5hdGlvbklwOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvLyBDb0FQLUNvZGUKKyAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJnZXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29hcENvZGUgPSBPVF9DT0FQX0NPREVfR0VUOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInBvc3QiKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29hcENvZGUgPSBPVF9DT0FQX0NPREVfUE9TVDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMF0sICJwdXQiKSA9PSAwKQorICAgIHsKKyAgICAgICAgY29hcENvZGUgPSBPVF9DT0FQX0NPREVfUFVUOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgImRlbGV0ZSIpID09IDApCisgICAgeworICAgICAgICBjb2FwQ29kZSA9IE9UX0NPQVBfQ09ERV9ERUxFVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gRGVzdGluYXRpb24gSVB2NiBhZGRyZXNzCisgICAgaWYgKGFyZ2MgPiAxKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkcmVzc0Zyb21TdHJpbmcoYXJndlsxXSwgJmNvYXBEZXN0aW5hdGlvbklwKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIH0KKworICAgIC8vIENvQVAtVVJJCisgICAgaWYgKGFyZ2MgPiAyKQorICAgIHsKKyAgICAgICAgc3RybGNweShjb2FwVXJpLCBhcmd2WzJdLCBrTWF4VXJpTGVuZ3RoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgfQorCisgICAgLy8gQ29BUC1UeXBlCisgICAgaWYgKGFyZ2MgPiAzKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2WzNdLCAiY29uIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29hcFR5cGUgPSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdENvYXBIZWFkZXJJbml0KCZoZWFkZXIsIGNvYXBUeXBlLCBjb2FwQ29kZSk7CisgICAgb3RDb2FwSGVhZGVyR2VuZXJhdGVUb2tlbigmaGVhZGVyLCBvdDo6Q29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RDb2FwSGVhZGVyQXBwZW5kVXJpUGF0aE9wdGlvbnMoJmhlYWRlciwgY29hcFVyaSkpOworCisgICAgaWYgKGFyZ2MgPiA0KQorICAgIHsKKyAgICAgICAgcGF5bG9hZExlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYXJndls0XSkpOworCisgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RDb2FwSGVhZGVyU2V0UGF5bG9hZE1hcmtlcigmaGVhZGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1lc3NhZ2UgPSBvdENvYXBOZXdNZXNzYWdlKG1JbnRlcnByZXRlci5tSW5zdGFuY2UsICZoZWFkZXIpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBFbWJlZCBjb250ZW50IGludG8gbWVzc2FnZSBpZiBnaXZlbgorICAgIGlmIChwYXlsb2FkTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdE1lc3NhZ2VBcHBlbmQobWVzc2FnZSwgYXJndls0XSwgcGF5bG9hZExlbmd0aCkpOworICAgIH0KKworICAgIG1lbXNldCgmbWVzc2FnZUluZm8sIDAsIHNpemVvZihtZXNzYWdlSW5mbykpOworICAgIG1lc3NhZ2VJbmZvLm1QZWVyQWRkciA9IGNvYXBEZXN0aW5hdGlvbklwOworICAgIG1lc3NhZ2VJbmZvLm1QZWVyUG9ydCA9IE9UX0RFRkFVTFRfQ09BUF9QT1JUOworICAgIG1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCA9IE9UX05FVElGX0lOVEVSRkFDRV9JRF9USFJFQUQ7CisKKyAgICBpZiAoKGNvYXBUeXBlID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSkgfHwgKGNvYXBDb2RlID09IE9UX0NPQVBfQ09ERV9HRVQpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdENvYXBTZW5kUmVxdWVzdChtSW50ZXJwcmV0ZXIubUluc3RhbmNlLCBtZXNzYWdlLCAmbWVzc2FnZUluZm8sICZDb2FwOjpIYW5kbGVDbGllbnRSZXNwb25zZSwgdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RDb2FwU2VuZFJlcXVlc3QobUludGVycHJldGVyLm1JbnN0YW5jZSwgbWVzc2FnZSwgJm1lc3NhZ2VJbmZvLCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgICBtSW50ZXJwcmV0ZXIubVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJTZW5kaW5nIGNvYXAgcmVxdWVzdDogIik7CisKK2V4aXQ6CisKKyAgICBpZiAoKGVycm9yICE9IE9UX0VSUk9SX05PTkUpICYmIChtZXNzYWdlICE9IE5VTEwpKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgT1RDQUxMIENvYXA6OkhhbmRsZUNsaWVudFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYUVycm9yKQoreworICAgIHN0YXRpY19jYXN0PENvYXAgKj4oYUNvbnRleHQpLT5IYW5kbGVDbGllbnRSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhRXJyb3IpOworfQorCit2b2lkIENvYXA6OkhhbmRsZUNsaWVudFJlc3BvbnNlKG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBpZiAoYUVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtSW50ZXJwcmV0ZXIubVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJFcnJvciByZWNlaXZpbmcgY29hcCByZXNwb25zZSBtZXNzYWdlOiBFcnJvciAlZDogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRXJyb3IsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUludGVycHJldGVyLm1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiUmVjZWl2ZWQgY29hcCByZXNwb25zZSIpOworICAgICAgICBQcmludFBheWxvYWQoYU1lc3NhZ2UpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSGVhZGVyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV9jb2FwLmhwcCBiL3NyYy9jbGkvY2xpX2NvYXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2ZmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaV9jb2FwLmhwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgYSBzaW1wbGUgQ0xJIENvQVAgc2VydmVyIGFuZCBjbGllbnQuCisgKi8KKworI2lmbmRlZiBDTElfQ09BUF9IUFBfCisjZGVmaW5lIENMSV9DT0FQX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKK2NsYXNzIEludGVycHJldGVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgQ0xJIENvQVAgc2VydmVyIGFuZCBjbGllbnQuCisgKgorICovCitjbGFzcyBDb2FwCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcnByZXRlciAgVGhlIENMSSBpbnRlcnByZXRlci4KKyAgICAgKgorICAgICAqLworICAgIENvYXAoSW50ZXJwcmV0ZXIgJmFJbnRlcnByZXRlcik6IG1JbnRlcnByZXRlcihhSW50ZXJwcmV0ZXIpIHsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW50ZXJwcmV0cyBhIGxpc3Qgb2YgQ0xJIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFyZ2MgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYXJndi4KKyAgICAgKiBAcGFyYW1baW5dICBhcmd2ICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUHJvY2VzcyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4VXJpTGVuZ3RoID0gMzIsCisgICAgICAgIGtNYXhCdWZmZXJTaXplID0gMTYKKyAgICB9OworCisgICAgdm9pZCBQcmludFBheWxvYWQob3RNZXNzYWdlICphTWVzc2FnZSkgY29uc3Q7CisKKyAgICBvdEVycm9yIFByb2Nlc3NSZXF1ZXN0KGludCBhcmdjLCBjaGFyICphcmd2W10pOworCisgICAgc3RhdGljIHZvaWQgT1RDQUxMIEhhbmRsZVNlcnZlclJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVTZXJ2ZXJSZXNwb25zZShvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBPVENBTEwgSGFuZGxlQ2xpZW50UmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFFcnJvcik7CisgICAgdm9pZCBIYW5kbGVDbGllbnRSZXNwb25zZShvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKTsKKworICAgIG90Q29hcFJlc291cmNlIG1SZXNvdXJjZTsKKyAgICBjaGFyIG1VcmlQYXRoW2tNYXhVcmlMZW5ndGhdOworCisgICAgSW50ZXJwcmV0ZXIgJm1JbnRlcnByZXRlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENMSV9DT0FQX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2NvbnNvbGUuY3BwIGIvc3JjL2NsaS9jbGlfY29uc29sZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkxNzRhMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX2NvbnNvbGUuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBDTEkgc2VydmVyIG9uIHRoZSBDT05TT0xFIHNlcnZpY2UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjbGlfY29uc29sZS5ocHAiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJjbGkvY2xpLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbmV3LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCitzdGF0aWMgQ29uc29sZSAqc1NlcnZlcjsKKworc3RhdGljIG90REVGSU5FX0FMSUdORURfVkFSKHNDbGlDb25zb2xlUmF3LCBzaXplb2YoQ29uc29sZSksIHVpbnQ2NF90KTsKKworZXh0ZXJuICJDIiB2b2lkIG90Q2xpQ29uc29sZUluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENsaUNvbnNvbGVPdXRwdXRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHNTZXJ2ZXIgPSBuZXcoJnNDbGlDb25zb2xlUmF3KSBDb25zb2xlKGFJbnN0YW5jZSk7CisgICAgc1NlcnZlci0+U2V0T3V0cHV0Q2FsbGJhY2soYUNhbGxiYWNrKTsKKyAgICBzU2VydmVyLT5TZXRDb250ZXh0KGFDb250ZXh0KTsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90Q2xpQ29uc29sZUlucHV0TGluZShjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIHNTZXJ2ZXItPlJlY2VpdmVUYXNrKGFCdWYsIGFCdWZMZW5ndGgpOworfQorCitDb25zb2xlOjpDb25zb2xlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk6CisgICAgbUNhbGxiYWNrKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1JbnRlcnByZXRlcihhSW5zdGFuY2UpCit7CisKK30KKwordm9pZCBDb25zb2xlOjpTZXRDb250ZXh0KHZvaWQgKmFDb250ZXh0KQoreworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7Cit9CisKK3ZvaWQgQ29uc29sZTo6U2V0T3V0cHV0Q2FsbGJhY2sob3RDbGlDb25zb2xlT3V0cHV0Q2FsbGJhY2sgYUNhbGxiYWNrKQoreworICAgIG1DYWxsYmFjayA9IGFDYWxsYmFjazsKK30KKwordm9pZCBDb25zb2xlOjpSZWNlaXZlVGFzayhjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1JbnRlcnByZXRlci5Qcm9jZXNzTGluZShhQnVmLCBhQnVmTGVuZ3RoLCAqdGhpcyk7Cit9CisKK2ludCBDb25zb2xlOjpPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICByZXR1cm4gbUNhbGxiYWNrKGFCdWYsIGFCdWZMZW5ndGgsIG1Db250ZXh0KTsKK30KKworaW50IENvbnNvbGU6Ok91dHB1dEZvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICBjaGFyIGJ1ZltrTWF4TGluZUxlbmd0aF07CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIE91dHB1dChidWYsIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYnVmKSkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgQ2xpCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2NvbnNvbGUuaHBwIGIvc3JjL2NsaS9jbGlfY29uc29sZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxNTFlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX2NvbnNvbGUuaHBwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgYSBDTEkgc2VydmVyIG9uIHRoZSBDT05TT0xFIHNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBDTElfQ09OU09MRV9IUFBfCisjZGVmaW5lIENMSV9DT05TT0xFX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY2xpLmg+CisKKyNpbmNsdWRlICJjbGkvY2xpLmhwcCIKKyNpbmNsdWRlICJjbGkvY2xpX3NlcnZlci5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ2xpIHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIENMSSBzZXJ2ZXIgb24gdG9wIG9mIHRoZSBDT05TT0xFIHBsYXRmb3JtIGFic3RyYWN0aW9uLgorICoKKyAqLworY2xhc3MgQ29uc29sZTogcHVibGljIFNlcnZlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIFRoZSBPcGVuVGhyZWFkIGluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqLworICAgIENvbnNvbGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlbGl2ZXJzIHJhdyBjaGFyYWN0ZXJzIHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUJ1Zkxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgaW50IE91dHB1dChjb25zdCBjaGFyICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlbGl2ZXJzIGZvcm1hdHRlZCBvdXRwdXQgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAgICAgKiBAcGFyYW1baW5dICAuLi4gICBBIHZhcmlhYmxlIGxpc3Qgb2YgYXJndW1lbnRzIHRvIGZvcm1hdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgT3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGNvbnNvbGUgaGFzIHNvbWUgb3V0cHV0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgQSBwb2ludGVyIHRvIGEgY2FsbGJhY2sgbWV0aG9kLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRPdXRwdXRDYWxsYmFjayhvdENsaUNvbnNvbGVPdXRwdXRDYWxsYmFjayBhQ2FsbGJhY2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhIGNvbnRleHQgdGhhdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgQSBwb2ludGVyIHRvIGEgdXNlciBjb250ZXh0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb250ZXh0KHZvaWQgKmFDb250ZXh0KTsKKworICAgIHZvaWQgUmVjZWl2ZVRhc2soY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heExpbmVMZW5ndGggPSAxMjgsCisgICAgfTsKKworICAgIG90Q2xpQ29uc29sZU91dHB1dENhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIEludGVycHJldGVyIG1JbnRlcnByZXRlcjsKKworfTsKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX0NPTlNPTEVfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfZGF0YXNldC5jcHAgYi9zcmMvY2xpL2NsaV9kYXRhc2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZiMTYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfZGF0YXNldC5jcHAKQEAgLTAsMCArMSw3NDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIENMSSBpbnRlcnByZXRlci4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNsaV9kYXRhc2V0LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RhdGFzZXRfZnRkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImNsaS9jbGkuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKK2NvbnN0IERhdGFzZXRDb21tYW5kIERhdGFzZXQ6OnNDb21tYW5kc1tdID0KK3sKKyAgICB7ICJoZWxwIiwgJlByb2Nlc3NIZWxwIH0sCisgICAgeyAiYWN0aXZlIiwgJlByb2Nlc3NBY3RpdmUgfSwKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIHsgImFjdGl2ZXRpbWVzdGFtcCIsICZQcm9jZXNzQWN0aXZlVGltZXN0YW1wIH0sCisgICAgeyAiY2hhbm5lbCIsICZQcm9jZXNzQ2hhbm5lbCB9LAorICAgIHsgImNoYW5uZWxtYXNrIiwgJlByb2Nlc3NDaGFubmVsTWFzayB9LAorICAgIHsgImNsZWFyIiwgJlByb2Nlc3NDbGVhciB9LAorICAgIHsgImNvbW1pdCIsICZQcm9jZXNzQ29tbWl0IH0sCisgICAgeyAiZGVsYXkiLCAmUHJvY2Vzc0RlbGF5IH0sCisgICAgeyAiZXh0cGFuaWQiLCAmUHJvY2Vzc0V4dFBhbklkIH0sCisgICAgeyAibWFzdGVya2V5IiwgJlByb2Nlc3NNYXN0ZXJLZXkgfSwKKyAgICB7ICJtZXNobG9jYWxwcmVmaXgiLCAmUHJvY2Vzc01lc2hMb2NhbFByZWZpeCB9LAorICAgIHsgIm1nbXRnZXRjb21tYW5kIiwgJlByb2Nlc3NNZ210R2V0Q29tbWFuZCB9LAorICAgIHsgIm1nbXRzZXRjb21tYW5kIiwgJlByb2Nlc3NNZ210U2V0Q29tbWFuZCB9LAorICAgIHsgIm5ldHdvcmtuYW1lIiwgJlByb2Nlc3NOZXR3b3JrTmFtZSB9LAorICAgIHsgInBhbmlkIiwgJlByb2Nlc3NQYW5JZCB9LAorI2VuZGlmCisgICAgeyAicGVuZGluZyIsICZQcm9jZXNzUGVuZGluZyB9LAorI2lmIE9QRU5USFJFQURfRlRECisgICAgeyAicGVuZGluZ3RpbWVzdGFtcCIsICZQcm9jZXNzUGVuZGluZ1RpbWVzdGFtcCB9LAorICAgIHsgInBza2MiLCAmUHJvY2Vzc1BTS2MgfSwKKyAgICB7ICJzZWN1cml0eXBvbGljeSIsICZQcm9jZXNzU2VjdXJpdHlQb2xpY3kgfSwKKyNlbmRpZgorfTsKKworU2VydmVyICpEYXRhc2V0OjpzU2VydmVyOworb3RPcGVyYXRpb25hbERhdGFzZXQgRGF0YXNldDo6c0RhdGFzZXQ7CisKK3ZvaWQgRGF0YXNldDo6T3V0cHV0Qnl0ZXMoY29uc3QgdWludDhfdCAqYUJ5dGVzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUwMngiLCBhQnl0ZXNbaV0pOworICAgIH0KK30KKworb3RFcnJvciBEYXRhc2V0OjpQcmludChvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgaWYgKGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIlBlbmRpbmcgVGltZXN0YW1wOiAlZFxyXG4iLCBhRGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0FjdGl2ZVRpbWVzdGFtcFNldCkKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiQWN0aXZlIFRpbWVzdGFtcDogJWRcclxuIiwgYURhdGFzZXQubUFjdGl2ZVRpbWVzdGFtcCk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0NoYW5uZWxTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIkNoYW5uZWw6ICVkXHJcbiIsIGFEYXRhc2V0Lm1DaGFubmVsKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCkKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiQ2hhbm5lbCBNYXNrIFBhZ2UgMDogJXhcclxuIiwgYURhdGFzZXQubUNoYW5uZWxNYXNrUGFnZTApOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNEZWxheVNldCkKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiRGVsYXk6ICVkXHJcbiIsIGFEYXRhc2V0Lm1EZWxheSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0V4dGVuZGVkUGFuSWRTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIkV4dCBQQU4gSUQ6ICIpOworICAgICAgICBPdXRwdXRCeXRlcyhhRGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNNZXNoTG9jYWxQcmVmaXhTZXQpCisgICAgeworICAgICAgICBjb25zdCB1aW50OF90ICpwcmVmaXggPSBhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04OworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIk1lc2ggTG9jYWwgUHJlZml4OiAleDoleDoleDoleC82NFxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbMF0pIDw8IDgpIHwgcHJlZml4WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbMl0pIDw8IDgpIHwgcHJlZml4WzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbNF0pIDw8IDgpIHwgcHJlZml4WzVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQxNl90PihwcmVmaXhbNl0pIDw8IDgpIHwgcHJlZml4WzddKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJNYXN0ZXIgS2V5OiAiKTsKKyAgICAgICAgT3V0cHV0Qnl0ZXMoYURhdGFzZXQubU1hc3RlcktleS5tOCwgc2l6ZW9mKGFEYXRhc2V0Lm1NYXN0ZXJLZXkpKTsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc05ldHdvcmtOYW1lU2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJOZXR3b3JrIE5hbWU6ICIpOworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIiUuKnNcclxuIiwgc2l6ZW9mKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZSksIGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1BhbklkU2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJQQU4gSUQ6IDB4JTA0eFxyXG4iLCBhRGF0YXNldC5tUGFuSWQpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQU0tjU2V0KQorICAgIHsKKyAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJQU0tjOiAiKTsKKyAgICAgICAgT3V0cHV0Qnl0ZXMoYURhdGFzZXQubVBTS2MubTgsIHNpemVvZihhRGF0YXNldC5tUFNLYy5tOCkpOworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIlxyXG4iKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzU2VjdXJpdHlQb2xpY3lTZXQpCisgICAgeworICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoIlNlY3VyaXR5IFBvbGljeTogJWQsICIsIGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tUm90YXRpb25UaW1lKTsKKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9PQlRBSU5fTUFTVEVSX0tFWSkKKyAgICAgICAgeworICAgICAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJvIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9OQVRJVkVfQ09NTUlTU0lPTklORykKKyAgICAgICAgeworICAgICAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9ST1VURVJTKQorICAgICAgICB7CisgICAgICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoInIiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubUZsYWdzICYgT1RfU0VDVVJJVFlfUE9MSUNZX0VYVEVSTkFMX0NPTU1JU1NJT05FUikKKyAgICAgICAgeworICAgICAgICAgICAgc1NlcnZlci0+T3V0cHV0Rm9ybWF0KCJjIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyAmIE9UX1NFQ1VSSVRZX1BPTElDWV9CRUFDT05TKQorICAgICAgICB7CisgICAgICAgICAgICBzU2VydmVyLT5PdXRwdXRGb3JtYXQoImIiKTsKKyAgICAgICAgfQorCisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiXHJcbiIpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdLCBTZXJ2ZXIgJmFTZXJ2ZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBzU2VydmVyID0gJmFTZXJ2ZXI7CisKKyAgICBpZiAoYXJnYyA9PSAwKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IFByaW50KHNEYXRhc2V0KSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplb2Yoc0NvbW1hbmRzKSAvIHNpemVvZihzQ29tbWFuZHNbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sIHNDb21tYW5kc1tpXS5tTmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBzQ29tbWFuZHNbaV0ubUNvbW1hbmQoYUluc3RhbmNlLCBhcmdjIC0gMSwgYXJndiArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NIZWxwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIHNTZXJ2ZXItPk91dHB1dEZvcm1hdCgiJXNcclxuIiwgc0NvbW1hbmRzW2ldLm1OYW1lKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJnYyk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ3YpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGRhdGFzZXQ7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRHZXRBY3RpdmUoYUluc3RhbmNlLCAmZGF0YXNldCkpOworICAgIGVycm9yID0gUHJpbnQoZGF0YXNldCk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc1BlbmRpbmcob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGRhdGFzZXQ7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRHZXRQZW5kaW5nKGFJbnN0YW5jZSwgJmRhdGFzZXQpKTsKKyAgICBlcnJvciA9IFByaW50KGRhdGFzZXQpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc0FjdGl2ZVRpbWVzdGFtcChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBzRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNBY3RpdmVUaW1lc3RhbXBTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NDaGFubmVsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgIHNEYXRhc2V0Lm1DaGFubmVsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzQ2hhbm5lbE1hc2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc0RhdGFzZXQubUNoYW5uZWxNYXNrUGFnZTAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpOworICAgIHNEYXRhc2V0Lm1Jc0NoYW5uZWxNYXNrUGFnZTBTZXQgPSB0cnVlOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzQ2xlYXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG1lbXNldCgmc0RhdGFzZXQsIDAsIHNpemVvZihzRGF0YXNldCkpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc0NvbW1pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGlmIChzdHJjbXAoYXJndlswXSwgImFjdGl2ZSIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3REYXRhc2V0U2V0QWN0aXZlKGFJbnN0YW5jZSwgJnNEYXRhc2V0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAicGVuZGluZyIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3REYXRhc2V0U2V0UGVuZGluZyhhSW5zdGFuY2UsICZzRGF0YXNldCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzRGVsYXkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc0RhdGFzZXQubURlbGF5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNEZWxheVNldCA9IHRydWU7CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc0V4dFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGV4dFBhbklkW09UX0VYVF9QQU5fSURfU0laRV07CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFZlcmlmeU9yRXhpdChJbnRlcnByZXRlcjo6SGV4MkJpbihhcmd2WzBdLCBleHRQYW5JZCwgc2l6ZW9mKGV4dFBhbklkKSkgPj0gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtZW1jcHkoc0RhdGFzZXQubUV4dGVuZGVkUGFuSWQubTgsIGV4dFBhbklkLCBzaXplb2Yoc0RhdGFzZXQubUV4dGVuZGVkUGFuSWQpKTsKKyAgICBzRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0ID0gdHJ1ZTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzTWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGtleVtPVF9NQVNURVJfS0VZX1NJWkVdOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBWZXJpZnlPckV4aXQoKEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbMF0sIGtleSwgc2l6ZW9mKGtleSkpKSA9PSBPVF9NQVNURVJfS0VZX1NJWkUsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbWVtY3B5KHNEYXRhc2V0Lm1NYXN0ZXJLZXkubTgsIGtleSwgc2l6ZW9mKHNEYXRhc2V0Lm1NYXN0ZXJLZXkpKTsKKyAgICBzRGF0YXNldC5tSXNNYXN0ZXJLZXlTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NNZXNoTG9jYWxQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2QWRkcmVzcyBwcmVmaXg7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbMF0sICZwcmVmaXgpKTsKKworICAgIG1lbWNweShzRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCBwcmVmaXgubUZpZWxkcy5tOCwgc2l6ZW9mKHNEYXRhc2V0Lm1NZXNoTG9jYWxQcmVmaXgubTgpKTsKKyAgICBzRGF0YXNldC5tSXNNZXNoTG9jYWxQcmVmaXhTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NOZXR3b3JrTmFtZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgVmVyaWZ5T3JFeGl0KChsZW5ndGggPSBzdHJsZW4oYXJndlswXSkpIDw9IE9UX05FVFdPUktfTkFNRV9NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtZW1zZXQoJnNEYXRhc2V0Lm1OZXR3b3JrTmFtZSwgMCwgc2l6ZW9mKHNEYXRhc2V0Lm1OZXR3b3JrTmFtZSkpOworICAgIG1lbWNweShzRGF0YXNldC5tTmV0d29ya05hbWUubTgsIGFyZ3ZbMF0sIGxlbmd0aCk7CisgICAgc0RhdGFzZXQubUlzTmV0d29ya05hbWVTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBzRGF0YXNldC5tUGFuSWQgPSBzdGF0aWNfY2FzdDxvdFBhbklkPih2YWx1ZSk7CisgICAgc0RhdGFzZXQubUlzUGFuSWRTZXQgPSB0cnVlOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXQ6OlByb2Nlc3NQZW5kaW5nVGltZXN0YW1wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgIHNEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKTsKKyAgICBzRGF0YXNldC5tSXNQZW5kaW5nVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpQcm9jZXNzTWdtdFNldENvbW1hbmQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90T3BlcmF0aW9uYWxEYXRhc2V0IGRhdGFzZXQ7CisgICAgdWludDhfdCB0bHZzWzEyOF07CisgICAgbG9uZyB2YWx1ZTsKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICBvdElwNkFkZHJlc3MgcHJlZml4OworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1lbXNldCgmZGF0YXNldCwgMCwgc2l6ZW9mKGRhdGFzZXQpKTsKKworICAgIGZvciAodWludDhfdCBpbmRleCA9IDE7IGluZGV4IDwgYXJnYzsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJhY3RpdmV0aW1lc3RhbXAiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbKytpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1BY3RpdmVUaW1lc3RhbXAgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgInBlbmRpbmd0aW1lc3RhbXAiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzUGVuZGluZ1RpbWVzdGFtcFNldCA9IHRydWU7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WysraW5kZXhdLCB2YWx1ZSkpOworICAgICAgICAgICAgZGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAibWFzdGVya2V5IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGluZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1Jc01hc3RlcktleVNldCA9IHRydWU7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGxlbmd0aCA9IEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbKytpbmRleF0sIGRhdGFzZXQubU1hc3RlcktleS5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGFzZXQubU1hc3RlcktleS5tOCkpKSA9PSBPVF9NQVNURVJfS0VZX1NJWkUsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJuZXR3b3JrbmFtZSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCA9IHRydWU7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKGFyZ3ZbKytpbmRleF0pKSkgPD0gT1RfTkVUV09SS19OQU1FX01BWF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbWVtc2V0KCZkYXRhc2V0Lm1OZXR3b3JrTmFtZSwgMCwgc2l6ZW9mKHNEYXRhc2V0Lm1OZXR3b3JrTmFtZSkpOworICAgICAgICAgICAgbWVtY3B5KGRhdGFzZXQubU5ldHdvcmtOYW1lLm04LCBhcmd2W2luZGV4XSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiZXh0cGFuaWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzRXh0ZW5kZWRQYW5JZFNldCA9IHRydWU7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoSW50ZXJwcmV0ZXI6OkhleDJCaW4oYXJndlsrK2luZGV4XSwgZGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCkpID49IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImxvY2FscHJlZml4IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGluZGV4IDwgYXJnYywgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCA9IHRydWU7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RJcDZBZGRyZXNzRnJvbVN0cmluZyhhcmd2WysraW5kZXhdLCAmcHJlZml4KSk7CisgICAgICAgICAgICBtZW1jcHkoZGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCBwcmVmaXgubUZpZWxkcy5tOCwgc2l6ZW9mKGRhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImRlbGF5dGltZXIiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGRhdGFzZXQubUlzRGVsYXlTZXQgPSB0cnVlOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEludGVycHJldGVyOjpQYXJzZUxvbmcoYXJndlsrK2luZGV4XSwgdmFsdWUpKTsKKyAgICAgICAgICAgIGRhdGFzZXQubURlbGF5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJwYW5pZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSW50ZXJwcmV0ZXI6OlBhcnNlTG9uZyhhcmd2WysraW5kZXhdLCB2YWx1ZSkpOworICAgICAgICAgICAgZGF0YXNldC5tUGFuSWQgPSBzdGF0aWNfY2FzdDxvdFBhbklkPih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiY2hhbm5lbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbKytpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1DaGFubmVsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJjaGFubmVsbWFzayIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChpbmRleCA8IGFyZ2MsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgZGF0YXNldC5tSXNDaGFubmVsTWFza1BhZ2UwU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbKytpbmRleF0sIHZhbHVlKSk7CisgICAgICAgICAgICBkYXRhc2V0Lm1DaGFubmVsTWFza1BhZ2UwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJiaW5hcnkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGluZGV4ICsgMSkgPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oKHN0cmxlbihhcmd2WysraW5kZXhdKSArIDEpIC8gMik7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpIDw9IHNpemVvZih0bHZzKSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChJbnRlcnByZXRlcjo6SGV4MkJpbihhcmd2W2luZGV4XSwgdGx2cywgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGxlbmd0aCkpID49IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAiYWN0aXZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZVNldChhSW5zdGFuY2UsICZkYXRhc2V0LCB0bHZzLCBzdGF0aWNfY2FzdDx1aW50OF90PihsZW5ndGgpKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzBdLCAicGVuZGluZyIpID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3REYXRhc2V0U2VuZE1nbXRQZW5kaW5nU2V0KGFJbnN0YW5jZSwgJmRhdGFzZXQsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc01nbXRHZXRDb21tYW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdE9wZXJhdGlvbmFsRGF0YXNldCBkYXRhc2V0OworICAgIHVpbnQ4X3QgdGx2c1szMl07CisgICAgbG9uZyB2YWx1ZTsKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICBib29sIGRlc3RBZGRyU3BlY2lmaWVkID0gZmFsc2U7CisgICAgb3RJcDZBZGRyZXNzIGFkZHJlc3M7CisKKyAgICBWZXJpZnlPckV4aXQoYXJnYyA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbWVtc2V0KCZkYXRhc2V0LCAwLCBzaXplb2YoZGF0YXNldCkpOworCisgICAgZm9yICh1aW50OF90IGluZGV4ID0gMTsgaW5kZXggPCBhcmdjOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSA8IHNpemVvZih0bHZzKSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiYWN0aXZldGltZXN0YW1wIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9BQ1RJVkVUSU1FU1RBTVA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAicGVuZGluZ3RpbWVzdGFtcCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfUEVORElOR1RJTUVTVEFNUDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJtYXN0ZXJrZXkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0bHZzW2xlbmd0aCsrXSA9IE9UX01FU0hDT1BfVExWX01BU1RFUktFWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJuZXR3b3JrbmFtZSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfTkVUV09SS05BTUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiZXh0cGFuaWQiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0bHZzW2xlbmd0aCsrXSA9IE9UX01FU0hDT1BfVExWX0VYVFBBTklEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImxvY2FscHJlZml4IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdGx2c1tsZW5ndGgrK10gPSBPVF9NRVNIQ09QX1RMVl9NRVNITE9DQUxQUkVGSVg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiZGVsYXl0aW1lciIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfREVMQVlUSU1FUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJwYW5pZCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfUEFOSUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaW5kZXhdLCAiY2hhbm5lbCIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdnNbbGVuZ3RoKytdID0gT1RfTUVTSENPUF9UTFZfQ0hBTk5FTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXJndltpbmRleF0sICJiaW5hcnkiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGluZGV4ICsgMSkgPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8bG9uZz4oc3RybGVuKGFyZ3ZbKytpbmRleF0pICsgMSkgLyAyOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHN0YXRpY19jYXN0PHNpemVfdD4odmFsdWUpIDw9IChzaXplb2YodGx2cykgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkpLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KEludGVycHJldGVyOjpIZXgyQmluKGFyZ3ZbaW5kZXhdLCB0bHZzICsgbGVuZ3RoLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpKSA+PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbGVuZ3RoICs9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2luZGV4XSwgImFkZHJlc3MiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoaW5kZXggPCBhcmdjLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGFyZ3ZbKytpbmRleF0sICZhZGRyZXNzKSk7CisgICAgICAgICAgICBkZXN0QWRkclNwZWNpZmllZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAiYWN0aXZlIikgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZUdldChhSW5zdGFuY2UsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0QWRkclNwZWNpZmllZCA/ICZhZGRyZXNzIDogTlVMTCkpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlswXSwgInBlbmRpbmciKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90RGF0YXNldFNlbmRNZ210UGVuZGluZ0dldChhSW5zdGFuY2UsIHRsdnMsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEFkZHJTcGVjaWZpZWQgPyAmYWRkcmVzcyA6IE5VTEwpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc1BTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IGxlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChzdHJsZW4oYXJndlswXSkgKyAxKSAvIDIpOworICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPD0gT1RfUFNLQ19NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBWZXJpZnlPckV4aXQoSW50ZXJwcmV0ZXI6OkhleDJCaW4oYXJndlswXSwgc0RhdGFzZXQubVBTS2MubTggKyBPVF9QU0tDX01BWF9TSVpFIC0gbGVuZ3RoLCBsZW5ndGgpID09IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBzRGF0YXNldC5tSXNQU0tjU2V0ID0gdHJ1ZTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldDo6UHJvY2Vzc1NlY3VyaXR5UG9saWN5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbnRlcnByZXRlcjo6UGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgc0RhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1Sb3RhdGlvblRpbWUgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4odmFsdWUpOworICAgIHNEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MgPSAwOworCisgICAgaWYgKGFyZ2MgPiAxKQorICAgIHsKKyAgICAgICAgZm9yIChjaGFyICphcmcgPSBhcmd2WzFdOyAqYXJnICE9ICdcMCc7IGFyZysrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKCphcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBzRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubUZsYWdzIHw9IE9UX1NFQ1VSSVRZX1BPTElDWV9PQlRBSU5fTUFTVEVSX0tFWTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgc0RhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyB8PSBPVF9TRUNVUklUWV9QT0xJQ1lfTkFUSVZFX0NPTU1JU1NJT05JTkc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgIHNEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MgfD0gT1RfU0VDVVJJVFlfUE9MSUNZX1JPVVRFUlM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgIHNEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MgfD0gT1RfU0VDVVJJVFlfUE9MSUNZX0VYVEVSTkFMX0NPTU1JU1NJT05FUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgc0RhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyB8PSBPVF9TRUNVUklUWV9QT0xJQ1lfQkVBQ09OUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc0RhdGFzZXQubUlzU2VjdXJpdHlQb2xpY3lTZXQgPSB0cnVlOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV9kYXRhc2V0LmhwcCBiL3NyYy9jbGkvY2xpX2RhdGFzZXQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDY0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaV9kYXRhc2V0LmhwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDTEkgaW50ZXJwcmV0ZXIuCisgKi8KKworI2lmbmRlZiBDTElfREFUQVNFVF9IUFBfCisjZGVmaW5lIENMSV9EQVRBU0VUX0hQUF8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiY2xpL2NsaV9zZXJ2ZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIENMSSBjb21tYW5kLgorICoKKyAqLworc3RydWN0IERhdGFzZXRDb21tYW5kCit7CisgICAgY29uc3QgY2hhciAqbU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBzdHJpbmcuCisgICAgb3RFcnJvcigqbUNvbW1hbmQpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7ICAvLy88IEEgZnVuY3Rpb24gcG9pbnRlciB0byBwcm9jZXNzIHRoZSBjb21tYW5kLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIENMSSBpbnRlcnByZXRlci4KKyAqCisgKi8KK2NsYXNzIERhdGFzZXQKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnRlcnByZXRzIGEgbGlzdCBvZiBDTEkgYXJndW1lbnRzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYXJnYyAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhcmd2LgorICAgICAqIEBwYXJhbVtpbl0gIGFyZ3YgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10sIFNlcnZlciAmYVNlcnZlcik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgT3V0cHV0Qnl0ZXMoY29uc3QgdWludDhfdCAqYUJ5dGVzLCB1aW50OF90IGFMZW5ndGgpOworICAgIHN0YXRpYyBvdEVycm9yIFByaW50KG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCk7CisKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzSGVscChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBvdEVycm9yIFByb2Nlc3NBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQWN0aXZlVGltZXN0YW1wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc0NoYW5uZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQ2hhbm5lbE1hc2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQ2xlYXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzQ29tbWl0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc0RlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc0V4dFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc01hc3RlcktleShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBvdEVycm9yIFByb2Nlc3NNZXNoTG9jYWxQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzTmV0d29ya05hbWUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzUGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzUGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworICAgIHN0YXRpYyBvdEVycm9yIFByb2Nlc3NQZW5kaW5nVGltZXN0YW1wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc01nbXRTZXRDb21tYW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc01nbXRHZXRDb21tYW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIG90RXJyb3IgUHJvY2Vzc1BTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQcm9jZXNzU2VjdXJpdHlQb2xpY3kob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKworICAgIHN0YXRpYyBjb25zdCBEYXRhc2V0Q29tbWFuZCBzQ29tbWFuZHNbXTsKKyAgICBzdGF0aWMgb3RPcGVyYXRpb25hbERhdGFzZXQgc0RhdGFzZXQ7CisgICAgc3RhdGljIFNlcnZlciAqc1NlcnZlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENMSV9EQVRBU0VUX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jbGkvY2xpX2luc3RhbmNlLmNwcCBiL3NyYy9jbGkvY2xpX2luc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzc1OWVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfaW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBDTEkgaW50ZXJwcmV0ZXIgSW5zdGFuY2UgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgImNsaS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK25hbWVzcGFjZSBDbGkgeworCit2b2lkIEludGVycHJldGVyOjpDYWNoZUluc3RhbmNlcygpCit7CisgICAgaWYgKG1BcGlJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIG90RGV2aWNlTGlzdCAqYURldmljZUxpc3QgPSBvdEVudW1lcmF0ZURldmljZXMobUFwaUluc3RhbmNlKTsKKyAgICAgICAgYXNzZXJ0KGFEZXZpY2VMaXN0KTsKKworICAgICAgICBtSW5zdGFuY2VzTGVuZ3RoID0gYURldmljZUxpc3QtPmFEZXZpY2VzTGVuZ3RoID4gTUFYX0NMSV9PVF9JTlNUQU5DRVMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9DTElfT1RfSU5TVEFOQ0VTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdClhRGV2aWNlTGlzdC0+YURldmljZXNMZW5ndGg7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbUluc3RhbmNlc0xlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtSW5zdGFuY2VzW2ldLm1JbnRlcnByZXRlciA9IHRoaXM7CisgICAgICAgICAgICBtSW5zdGFuY2VzW2ldLm1JbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0KG1BcGlJbnN0YW5jZSwgJmFEZXZpY2VMaXN0LT5hRGV2aWNlc1tpXSk7CisgICAgICAgICAgICBhc3NlcnQobUluc3RhbmNlc1tpXS5tSW5zdGFuY2UpOworICAgICAgICAgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhtSW5zdGFuY2VzW2ldLm1JbnN0YW5jZSwgJkludGVycHJldGVyOjpzX0hhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkLCAmbUluc3RhbmNlc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBvdEZyZWVNZW1vcnkoYURldmljZUxpc3QpOworCisgICAgICAgIGlmIChtSW5zdGFuY2VzTGVuZ3RoID4gMCkgeyBtSW5zdGFuY2UgPSBtSW5zdGFuY2VzWzBdLm1JbnN0YW5jZTsgfQorICAgIH0KK30KKworI2RlZmluZSBHVUlEX0ZPUk1BVCAieyUwOGxYLSUwNGhYLSUwNGhYLSUwMmhoWCUwMmhoWC0lMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFglMDJoaFh9IgorI2RlZmluZSBHVUlEX0FSRyhndWlkKSBndWlkLkRhdGExLCBndWlkLkRhdGEyLCBndWlkLkRhdGEzLCBndWlkLkRhdGE0WzBdLCBndWlkLkRhdGE0WzFdLCBndWlkLkRhdGE0WzJdLCBndWlkLkRhdGE0WzNdLCBndWlkLkRhdGE0WzRdLCBndWlkLkRhdGE0WzVdLCBndWlkLkRhdGE0WzZdLCBndWlkLkRhdGE0WzddCisKK3ZvaWQgSW50ZXJwcmV0ZXI6OlByb2Nlc3NJbnN0YW5jZUxpc3QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBtU2VydmVyLT5PdXRwdXRGb3JtYXQoIiVkIGluc3RhbmNlcyBmb3VuZDpcclxuIiwgbUluc3RhbmNlc0xlbmd0aCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtSW5zdGFuY2VzTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBHVUlEIGFEZXZpY2VHdWlkID0gb3RHZXREZXZpY2VHdWlkKG1JbnN0YW5jZXNbaV0ubUluc3RhbmNlKTsKKyAgICAgICAgdWludDMyX3QgYUNvbXBhcnRtZW50ID0gb3RHZXRDb21wYXJ0bWVudElkKG1JbnN0YW5jZXNbaV0ubUluc3RhbmNlKTsKKyAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJbJWRdICIgR1VJRF9GT1JNQVQgIiAoQ29tcGFydG1lbnQgJXUpXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBHVUlEX0FSRyhhRGV2aWNlR3VpZCksIGFDb21wYXJ0bWVudCk7CisgICAgfQorfQorCit2b2lkIEludGVycHJldGVyOjpQcm9jZXNzSW5zdGFuY2UoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBsb25nIHZhbHVlOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChtSW5zdGFuY2UgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlcnZlci0+T3V0cHV0Rm9ybWF0KCJObyBJbnN0YW5jZSBTZXRcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBHVUlEIGFEZXZpY2VHdWlkID0gb3RHZXREZXZpY2VHdWlkKG1JbnN0YW5jZSk7CisgICAgICAgICAgICB1aW50MzJfdCBhQ29tcGFydG1lbnQgPSBvdEdldENvbXBhcnRtZW50SWQobUluc3RhbmNlKTsKKyAgICAgICAgICAgIG1TZXJ2ZXItPk91dHB1dEZvcm1hdCgiWyVkXSAiIEdVSURfRk9STUFUICIgKENvbXBhcnRtZW50ICV1KVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZUluZGV4LCBHVUlEX0FSRyhhRGV2aWNlR3VpZCksIGFDb21wYXJ0bWVudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFBhcnNlTG9uZyhhcmd2WzBdLCB2YWx1ZSkpOworICAgICAgICBWZXJpZnlPckV4aXQodmFsdWUgPj0gMCAmJiB2YWx1ZSA8IG1JbnN0YW5jZXNMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBtSW5zdGFuY2VJbmRleCA9ICh1aW50OF90KXZhbHVlOworICAgICAgICBtSW5zdGFuY2UgPSBtSW5zdGFuY2VzW21JbnN0YW5jZUluZGV4XS5tSW5zdGFuY2U7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZFJlc3VsdChlcnJvcik7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfc2VydmVyLmhwcCBiL3NyYy9jbGkvY2xpX3NlcnZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlNGI5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX3NlcnZlci5ocHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIGFkZGluZyBhIENMSSBjb21tYW5kIHRvIHRoZSBDTEkgc2VydmVyLgorICovCisKKyNpZm5kZWYgQ0xJX1NFUlZFUl9IUFBfCisjZGVmaW5lIENMSV9TRVJWRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDTEkgc2VydmVyLgorICoKKyAqLworY2xhc3MgU2VydmVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgcmF3IGNoYXJhY3RlcnMgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludCBPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkgPSAwOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgZm9ybWF0dGVkIG91dHB1dCB0byB0aGUgY2xpZW50LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZtdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICAgICAqIEBwYXJhbVtpbl0gIC4uLiAgIEEgdmFyaWFibGUgbGlzdCBvZiBhcmd1bWVudHMgdG8gZm9ybWF0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW4gdGhlIG91dHB1dCBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgaW50IE91dHB1dEZvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNlIENsaQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0xJX1NFUlZFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV91YXJ0LmNwcCBiL3NyYy9jbGkvY2xpX3VhcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzUwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xpL2NsaV91YXJ0LmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQ0xJIHNlcnZlciBvbiB0aGUgVUFSVCBzZXJ2aWNlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiY2xpX3VhcnQuaHBwIgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jbGkuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VhcnQuaD4KKworI2luY2x1ZGUgImNsaS9jbGkuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9uZXcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCitzdGF0aWMgY29uc3QgY2hhciBzQ29tbWFuZFByb21wdFtdID0geyc+JywgJyAnfTsKK3N0YXRpYyBjb25zdCBjaGFyIHNFcmFzZVN0cmluZ1tdID0geydcYicsICcgJywgJ1xiJ307CitzdGF0aWMgY29uc3QgY2hhciBDUk5MW10gPSB7J1xyJywgJ1xuJ307CitVYXJ0ICpVYXJ0OjpzVWFydFNlcnZlcjsKKworc3RhdGljIG90REVGSU5FX0FMSUdORURfVkFSKHNDbGlVYXJ0UmF3LCBzaXplb2YoVWFydCksIHVpbnQ2NF90KTsKKworZXh0ZXJuICJDIiB2b2lkIG90Q2xpVWFydEluaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIFVhcnQ6OnNVYXJ0U2VydmVyID0gbmV3KCZzQ2xpVWFydFJhdykgVWFydChhSW5zdGFuY2UpOworfQorCitVYXJ0OjpVYXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk6CisgICAgbUludGVycHJldGVyKGFJbnN0YW5jZSkKK3sKKyAgICBtUnhMZW5ndGggPSAwOworICAgIG1UeEhlYWQgPSAwOworICAgIG1UeExlbmd0aCA9IDA7CisgICAgbVNlbmRMZW5ndGggPSAwOworCisgICAgb3RQbGF0VWFydEVuYWJsZSgpOworfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0VWFydFJlY2VpdmVkKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgVWFydDo6c1VhcnRTZXJ2ZXItPlJlY2VpdmVUYXNrKGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIFVhcnQ6OlJlY2VpdmVUYXNrKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqZW5kOworCisgICAgZW5kID0gYUJ1ZiArIGFCdWZMZW5ndGg7CisKKyAgICBmb3IgKDsgYUJ1ZiA8IGVuZDsgYUJ1ZisrKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgqYUJ1ZikKKyAgICAgICAgeworICAgICAgICBjYXNlICdccic6CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgIE91dHB1dChDUk5MLCBzaXplb2YoQ1JOTCkpOworCisgICAgICAgICAgICBpZiAobVJ4TGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUnhCdWZmZXJbbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgUHJvY2Vzc0NvbW1hbmQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3V0cHV0KHNDb21tYW5kUHJvbXB0LCBzaXplb2Yoc0NvbW1hbmRQcm9tcHQpKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCisKKyAgICAgICAgY2FzZSAweDAzOiAvLyBBU0NJSSBmb3IgQ3RybC1DCisgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgIGNhc2UgJ1xiJzoKKyAgICAgICAgY2FzZSAxMjc6CisgICAgICAgICAgICBpZiAobVJ4TGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPdXRwdXQoc0VyYXNlU3RyaW5nLCBzaXplb2Yoc0VyYXNlU3RyaW5nKSk7CisgICAgICAgICAgICAgICAgbVJ4QnVmZmVyWy0tbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAobVJ4TGVuZ3RoIDwga1J4QnVmZmVyU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPdXRwdXQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KGFCdWYpLCAxKTsKKyAgICAgICAgICAgICAgICBtUnhCdWZmZXJbbVJ4TGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmFCdWYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBVYXJ0OjpQcm9jZXNzQ29tbWFuZCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKG1SeEJ1ZmZlclttUnhMZW5ndGggLSAxXSA9PSAnXG4nKQorICAgIHsKKyAgICAgICAgbVJ4QnVmZmVyWy0tbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKG1SeEJ1ZmZlclttUnhMZW5ndGggLSAxXSA9PSAnXHInKQorICAgIHsKKyAgICAgICAgbVJ4QnVmZmVyWy0tbVJ4TGVuZ3RoXSA9ICdcMCc7CisgICAgfQorCisgICAgbUludGVycHJldGVyLlByb2Nlc3NMaW5lKG1SeEJ1ZmZlciwgbVJ4TGVuZ3RoLCAqdGhpcyk7CisKKyAgICBtUnhMZW5ndGggPSAwOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitpbnQgVWFydDo6T3V0cHV0KGNvbnN0IGNoYXIgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgdWludDE2X3QgcmVtYWluaW5nID0ga1R4QnVmZmVyU2l6ZSAtIG1UeExlbmd0aDsKKyAgICB1aW50MTZfdCB0YWlsOworCisgICAgaWYgKGFCdWZMZW5ndGggPiByZW1haW5pbmcpCisgICAgeworICAgICAgICBhQnVmTGVuZ3RoID0gcmVtYWluaW5nOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYUJ1Zkxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgdGFpbCA9IChtVHhIZWFkICsgbVR4TGVuZ3RoKSAlIGtUeEJ1ZmZlclNpemU7CisgICAgICAgIG1UeEJ1ZmZlclt0YWlsXSA9ICphQnVmKys7CisgICAgICAgIG1UeExlbmd0aCsrOworICAgIH0KKworICAgIFNlbmQoKTsKKworICAgIHJldHVybiBhQnVmTGVuZ3RoOworfQorCitpbnQgVWFydDo6T3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIGNoYXIgYnVmW2tNYXhMaW5lTGVuZ3RoXTsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICByZXR1cm4gT3V0cHV0KGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihidWYpKSk7Cit9CisKK2ludCBVYXJ0OjpPdXRwdXRGb3JtYXRWKGNvbnN0IGNoYXIgKmFGbXQsIHZhX2xpc3QgYUFwKQoreworICAgIGNoYXIgYnVmW2tNYXhMaW5lTGVuZ3RoXTsKKworICAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBhRm10LCBhQXApOworCisgICAgcmV0dXJuIE91dHB1dChidWYsIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYnVmKSkpOworfQorCit2b2lkIFVhcnQ6OlNlbmQodm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobVNlbmRMZW5ndGggPT0gMCk7CisKKyAgICBpZiAobVR4TGVuZ3RoID4ga1R4QnVmZmVyU2l6ZSAtIG1UeEhlYWQpCisgICAgeworICAgICAgICBtU2VuZExlbmd0aCA9IGtUeEJ1ZmZlclNpemUgLSBtVHhIZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2VuZExlbmd0aCA9IG1UeExlbmd0aDsKKyAgICB9CisKKyAgICBpZiAobVNlbmRMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgb3RQbGF0VWFydFNlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG1UeEJ1ZmZlciArIG1UeEhlYWQpLCBtU2VuZExlbmd0aCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFVhcnRTZW5kRG9uZSh2b2lkKQoreworICAgIFVhcnQ6OnNVYXJ0U2VydmVyLT5TZW5kRG9uZVRhc2soKTsKK30KKwordm9pZCBVYXJ0OjpTZW5kRG9uZVRhc2sodm9pZCkKK3sKKyAgICBtVHhIZWFkID0gKG1UeEhlYWQgKyBtU2VuZExlbmd0aCkgJSBrVHhCdWZmZXJTaXplOworICAgIG1UeExlbmd0aCAtPSBtU2VuZExlbmd0aDsKKyAgICBtU2VuZExlbmd0aCA9IDA7CisKKyAgICBTZW5kKCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCit2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUZvcm1hdCwgLi4uKQoreworICAgIGlmIChOVUxMID09IFVhcnQ6OnNVYXJ0U2VydmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBhRm9ybWF0KTsKKyAgICBVYXJ0OjpzVWFydFNlcnZlci0+T3V0cHV0Rm9ybWF0VihhRm9ybWF0LCBhcmdzKTsKKyAgICBVYXJ0OjpzVWFydFNlcnZlci0+T3V0cHV0Rm9ybWF0KCJcclxuIik7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dMZXZlbCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dSZWdpb24pOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfREVGQVVMVF9MT0dfT1VUUFVUCisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfdWFydC5ocHAgYi9zcmMvY2xpL2NsaV91YXJ0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDYxZGJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfdWFydC5ocHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIENMSSBzZXJ2ZXIgb24gdGhlIFVBUlQgc2VydmljZS4KKyAqLworCisjaWZuZGVmIENMSV9VQVJUX0hQUF8KKyNkZWZpbmUgQ0xJX1VBUlRfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY2xpL2NsaS5ocHAiCisjaW5jbHVkZSAiY2xpL2NsaV9zZXJ2ZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgQ0xJIHNlcnZlciBvbiB0b3Agb2YgdGhlIFVBUlQgcGxhdGZvcm0gYWJzdHJhY3Rpb24uCisgKgorICovCitjbGFzcyBVYXJ0OiBwdWJsaWMgU2VydmVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgVWFydChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgcmF3IGNoYXJhY3RlcnMgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludCBPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZWxpdmVycyBmb3JtYXR0ZWQgb3V0cHV0IHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRm10ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgICAgICogQHBhcmFtW2luXSAgLi4uICAgQSB2YXJpYWJsZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgdmlydHVhbCBpbnQgT3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlbGl2ZXJzIGZvcm1hdHRlZCBvdXRwdXQgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAgICAgKiBAcGFyYW1baW5dICBhQXAgICBBIHZhcmlhYmxlIGxpc3Qgb2YgYXJndW1lbnRzIGZvciBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgaW50IE91dHB1dEZvcm1hdFYoY29uc3QgY2hhciAqYUZtdCwgdmFfbGlzdCBhQXApOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJwcmV0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGludGVycHJldGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIEludGVycHJldGVyICZHZXRJbnRlcnByZXRlcih2b2lkKSB7IHJldHVybiBtSW50ZXJwcmV0ZXI7IH0KKworICAgIHZvaWQgUmVjZWl2ZVRhc2soY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisgICAgdm9pZCBTZW5kRG9uZVRhc2sodm9pZCk7CisKKyAgICBzdGF0aWMgVWFydCAqc1VhcnRTZXJ2ZXI7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1J4QnVmZmVyU2l6ZSA9IDUxMiwKKyAgICAgICAga1R4QnVmZmVyU2l6ZSA9IDEwMjQsCisgICAgICAgIGtNYXhMaW5lTGVuZ3RoID0gMTI4LAorICAgIH07CisKKyAgICBvdEVycm9yIFByb2Nlc3NDb21tYW5kKHZvaWQpOworICAgIHZvaWQgU2VuZCh2b2lkKTsKKworICAgIGNoYXIgbVJ4QnVmZmVyW2tSeEJ1ZmZlclNpemVdOworICAgIHVpbnQxNl90IG1SeExlbmd0aDsKKworICAgIGNoYXIgbVR4QnVmZmVyW2tUeEJ1ZmZlclNpemVdOworICAgIHVpbnQxNl90IG1UeEhlYWQ7CisgICAgdWludDE2X3QgbVR4TGVuZ3RoOworCisgICAgdWludDE2X3QgbVNlbmRMZW5ndGg7CisKKyAgICBJbnRlcnByZXRlciBtSW50ZXJwcmV0ZXI7CisKKyAgICBmcmllbmQgY2xhc3MgSW50ZXJwcmV0ZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgQ2xpCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDTElfVUFSVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY2xpL2NsaV91ZHAuY3BwIGIvc3JjL2NsaS9jbGlfdWRwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjhhOTQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NsaS9jbGlfdWRwLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQ0xJIHNlcnZlciBvbiBhIFVEUCBzb2NrZXQuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjbGlfdWRwLmhwcCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNsaS9jbGkuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDbGkgeworCitVZHA6OlVkcChvdEluc3RhbmNlICphSW5zdGFuY2UsIEludGVycHJldGVyICphSW50ZXJwcmV0ZXIpOgorICAgIG1JbnN0YW5jZShhSW5zdGFuY2UpLAorICAgIG1JbnRlcnByZXRlcihhSW50ZXJwcmV0ZXIpCit7CisgICAgbWVtc2V0KCZtU29ja2V0LCAwLCBzaXplb2YobVNvY2tldCkpOworICAgIG1lbXNldCgmbVBlZXIsIDAsIHNpemVvZihtUGVlcikpOworfQorCitvdEVycm9yIFVkcDo6U3RhcnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgb3RTb2NrQWRkciBzb2NrYWRkcjsKKyAgICBtZW1zZXQoJnNvY2thZGRyLCAwLCBzaXplb2Yob3RTb2NrQWRkcikpOworICAgIHNvY2thZGRyLm1Qb3J0ID0gNzMzNTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFVkcE9wZW4obUluc3RhbmNlLCAmbVNvY2tldCwgJlVkcDo6SGFuZGxlVWRwUmVjZWl2ZSwgdGhpcykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFVkcEJpbmQoJm1Tb2NrZXQsICZzb2NrYWRkcikpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBVZHA6OkhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxVZHAgKj4oYUNvbnRleHQpLT5IYW5kbGVVZHBSZWNlaXZlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCit2b2lkIFVkcDo6SGFuZGxlVWRwUmVjZWl2ZShvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aCA9IG90TWVzc2FnZUdldExlbmd0aChhTWVzc2FnZSkgLSBvdE1lc3NhZ2VHZXRPZmZzZXQoYU1lc3NhZ2UpOworICAgIGNoYXIgYnVmWzUxMl07CisKKyAgICBWZXJpZnlPckV4aXQocGF5bG9hZExlbmd0aCA8PSBzaXplb2YoYnVmKSk7CisgICAgb3RNZXNzYWdlUmVhZChhTWVzc2FnZSwgb3RNZXNzYWdlR2V0T2Zmc2V0KGFNZXNzYWdlKSwgYnVmLCBwYXlsb2FkTGVuZ3RoKTsKKworICAgIGlmIChidWZbcGF5bG9hZExlbmd0aCAtIDFdID09ICdcbicpCisgICAgeworICAgICAgICBidWZbLS1wYXlsb2FkTGVuZ3RoXSA9ICdcMCc7CisgICAgfQorCisgICAgaWYgKGJ1ZltwYXlsb2FkTGVuZ3RoIC0gMV0gPT0gJ1xyJykKKyAgICB7CisgICAgICAgIGJ1ZlstLXBheWxvYWRMZW5ndGhdID0gJ1wwJzsKKyAgICB9CisKKyAgICBtUGVlciA9ICphTWVzc2FnZUluZm87CisKKyAgICBtSW50ZXJwcmV0ZXItPlByb2Nlc3NMaW5lKGJ1ZiwgcGF5bG9hZExlbmd0aCwgKnRoaXMpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworaW50IFVkcDo6T3V0cHV0KGNvbnN0IGNoYXIgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gb3RVZHBOZXdNZXNzYWdlKG1JbnN0YW5jZSwgdHJ1ZSkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TWVzc2FnZVNldExlbmd0aChtZXNzYWdlLCBhQnVmTGVuZ3RoKSk7CisgICAgb3RNZXNzYWdlV3JpdGUobWVzc2FnZSwgMCwgYUJ1ZiwgYUJ1Zkxlbmd0aCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90VWRwU2VuZCgmbVNvY2tldCwgbWVzc2FnZSwgJm1QZWVyKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgICAgICBhQnVmTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYUJ1Zkxlbmd0aDsKK30KKworaW50IFVkcDo6T3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIGNoYXIgYnVmW2tNYXhMaW5lTGVuZ3RoXTsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICByZXR1cm4gT3V0cHV0KGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihidWYpKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NsaS9jbGlfdWRwLmhwcCBiL3NyYy9jbGkvY2xpX3VkcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1ZDc5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jbGkvY2xpX3VkcC5ocHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIENMSSBzZXJ2ZXIgb24gYSBVRFAgc29ja2V0LgorICovCisKKyNpZm5kZWYgQ0xJX1VEUF9IUFBfCisjZGVmaW5lIENMSV9VRFBfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY2xpL2NsaS5ocHAiCisjaW5jbHVkZSAiY2xpL2NsaV9zZXJ2ZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENsaSB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDTEkgc2VydmVyIG9uIHRvcCBvZiBhIFVEUCBzb2NrZXQuCisgKgorICovCitjbGFzcyBVZHA6IHB1YmxpYyBTZXJ2ZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvcgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICBUaGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICogQHBhcmFtW2luXSAgYUludGVycHJldGVyICBUaGUgSW50ZXJwcmV0ZXIgc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgVWRwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgSW50ZXJwcmV0ZXIgKmFJbnRlcnByZXRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIENMSSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVsaXZlcnMgcmF3IGNoYXJhY3RlcnMgdG8gdGhlIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIHRoZSBvdXRwdXQgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludCBPdXRwdXQoY29uc3QgY2hhciAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZWxpdmVycyBmb3JtYXR0ZWQgb3V0cHV0IHRvIHRoZSBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRm10ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgICAgICogQHBhcmFtW2luXSAgLi4uICAgQSB2YXJpYWJsZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBmb3JtYXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgdmlydHVhbCBpbnQgT3V0cHV0Rm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGluZUxlbmd0aCA9IDEyOCwKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIG90VWRwU29ja2V0IG1Tb2NrZXQ7CisgICAgb3RNZXNzYWdlSW5mbyBtUGVlcjsKKyAgICBvdEluc3RhbmNlICptSW5zdGFuY2U7CisgICAgSW50ZXJwcmV0ZXIgKm1JbnRlcnByZXRlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDbGkKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENMSV9VRFBfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvTWFrZWZpbGUuYW0gYi9zcmMvY29yZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMzZGUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzMjAgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbGlib3BlbnRocmVhZC1mdGQuYSAgICAgICAgICAgICAgIFwKKyAgICBsaWJvcGVudGhyZWFkLW10ZC5hICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ1BQRkxBR1NfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgIFwKKyAgICAtSSR7YWJzX3RvcF9zcmNkaXJ9L3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlIFwKKyAgICAkKE1CRURUTFNfQ1BQRkxBR1MpICAgICAgICAgICAgICAgXAorICAgICQoT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUykgICAgICBcCisgICAgJChOVUxMKQorCisKK2xpYm9wZW50aHJlYWRfZnRkX2FfQ1BQRkxBR1MgICAgICAgID0gXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgLURPUEVOVEhSRUFEX0ZURD0xICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbXRkX2FfQ1BQRkxBR1MgICAgICAgID0gXAorICAgICQoQ1BQRkxBR1NfQ09NTU9OKSAgICAgICAgICAgICAgICBcCisgICAgLURPUEVOVEhSRUFEX01URD0xICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdG8gbWFpbnRhaW5lci9kZXZlbG9wZXJzIGFib3V0ICJTT1VSQ0VTX0NPTU1PTiIKKyMKKyMgVGhlIHRyYWRpdGlvbmFsIG1ldGhvZCBmb3IgR05VIHN0eWxlIE1ha2VmaWxlLmFtIGZpbGVzCisjIGlzIHRvIGhhdmUgSUYgc3RhdGVtZW50cyB3aXRoaW4gdGhlIE1ha2VmaWxlCisjCisjIFRoZXNlIElGIHN0YXRlbWVudHMgd291bGQgYWRkIChvciBub3QgYWRkKSBjZXJ0YWluCisjIHNvdXJjZSBmaWxlcyBmcm9tIHRoZSBidWlsZC9saWJyYXJ5IGJlaW5nIGJ1aWx0LgorIworIyBJbiBnZW5lcmFsLCBJREVzIGRvIG5vdCBlYXNpbHkgc3VwcG9ydCB0aGlzLgorIyBTb21lIGRvLCBzb21lIGRvIG5vdCwgdGhvc2UgdGhhdCBkbyBzdXBwb3J0IGl0CisjIG9mdGVuIGRvIHNvIGluIGEgdmVyeSBkaWZmZXJlbnQgb3IgY29tcGxleCB3YXkuCisjIEJvdHRvbSBsaW5lOiBJdCBpcyBhIHZlcnkgbWl4ZWQgYmFnIG9mIHJlc3VsdHMuCisjCisjIFRodXMgd2UgYmVuZCB0byB0aGUgSURFcywgYW5kIGltcG9zZSB0aGVzZSBydWxlczoKKyMKKyMgUnVsZSAjMQorIyAgICAgQWxsIGNvZGUoZmlsZXMpIHNob3VsZCBiZSBjb21waWxlZAorIyAgICAgRXZlbiBpZiBpdCBpcyBub3QgdXNlZCBvciByZXF1aXJlZAorIworIyAgICAgRm9yIGV4YW1wbGU6IEluIHRoZSBNVEQgYnVpbGQsIHNvbWUgZmVhdHVyZXMKKyMgICAgIGFyZSBkaXNhYmxlZCBhbmQgdGh1cyBpbiB0aGUgdHJhZGl0aW9uYWwgc2NoZW1lCisjICAgICBzb3VyY2UgZmlsZXMgY291bGQgYmUgZXhjbHVkZWQgU09VUkNFU19DT01NT04KKyMgICAgIHZpYSBtYWtlZmlsZSBJRi9FTFNFL0VORElGIGNvbnN0cnVjdHMuCisjCisjICAgICBUaGlzIG1ha2VzIGl0IGltcG9zc2libHkgaGFyZCBmb3IgSURFcy4KKyMgICAgIFRodXMgd2UgY29tcGlsZSBldmVyeXRoaW5nLgorIworIyAgICAgQW5kIHRoZW4gcmVseSB1cG9uIFJ1bGUgIzIuCisjCisjIFJ1bGUgIzIKKyMgICAgIEZpbGVzIHRoYXQgYXJlIG5vdCByZXF1aXJlZCwgaW4gY2VydGFpbgorIyAgICAgY29uZmlndXJhdGlvbnMgcmVxdWlyZSBhcHByb3ByaWF0ZSB3cmFwcGVycworIyAgICAgU3VjaCBhcyAjaWYvI2Vsc2UvI2VuZGlmCisjCisjICAgICBUaGUgbmV0IHJlc3VsdCBpcyBzb3J0IG9mIGFuICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IgorIworCitTT1VSQ0VTX0NPTU1PTiAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBhcGkvY29hcF9hcGkuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9jb21taXNzaW9uZXJfYXBpLmNwcCAgICAgICAgICBcCisgICAgYXBpL2NoaWxkX3N1cGVydmlzaW9uX2FwaS5jcHAgICAgIFwKKyAgICBhcGkvY3J5cHRvX2FwaS5jcHAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9ib3JkZXJfcm91dGVyX2FwaS5jcHAgICAgICAgICBcCisgICAgYXBpL2RhdGFzZXRfYXBpLmNwcCAgICAgICAgICAgICAgIFwKKyAgICBhcGkvZGF0YXNldF9mdGRfYXBpLmNwcCAgICAgICAgICAgXAorICAgIGFwaS9kaGNwNl9hcGkuY3BwICAgICAgICAgICAgICAgICBcCisgICAgYXBpL2RoY3A2X2FwaS5jcHAgICAgICAgICAgICAgICAgIFwKKyAgICBhcGkvZG5zX2FwaS5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9pY21wNl9hcGkuY3BwICAgICAgICAgICAgICAgICBcCisgICAgYXBpL2luc3RhbmNlX2FwaS5jcHAgICAgICAgICAgICAgIFwKKyAgICBhcGkvaXA2X2FwaS5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9qYW1fZGV0ZWN0aW9uX2FwaS5jcHAgICAgICAgICBcCisgICAgYXBpL2pvaW5lcl9hcGkuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBhcGkvbGlua19hcGkuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIGFwaS9saW5rX3Jhd19hcGkuY3BwICAgICAgICAgICAgICBcCisgICAgYXBpL21lc3NhZ2VfYXBpLmNwcCAgICAgICAgICAgICAgIFwKKyAgICBhcGkvbmV0ZGF0YV9hcGkuY3BwICAgICAgICAgICAgICAgXAorICAgIGFwaS90YXNrbGV0X2FwaS5jcHAgICAgICAgICAgICAgICBcCisgICAgYXBpL3RocmVhZF9hcGkuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBhcGkvdGhyZWFkX2Z0ZF9hcGkuY3BwICAgICAgICAgICAgXAorICAgIGFwaS90bWZfcHJveHlfYXBpLmNwcCAgICAgICAgICAgICBcCisgICAgYXBpL3VkcF9hcGkuY3BwICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb2FwL2NvYXAuY3BwICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvYXAvY29hcF9oZWFkZXIuY3BwICAgICAgICAgICAgICBcCisgICAgY29hcC9jb2FwX3NlY3VyZS5jcHAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vY3JjMTYuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9sb2dnaW5nLmNwcCAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL2xvY2F0b3IuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vbWVzc2FnZS5jcHAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi90YXNrbGV0LmNwcCAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL3RpbWVyLmNwcCAgICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vdGx2cy5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi90cmlja2xlX3RpbWVyLmNwcCAgICAgICAgICBcCisgICAgY3J5cHRvL2Flc19jY20uY3BwICAgICAgICAgICAgICAgIFwKKyAgICBjcnlwdG8vYWVzX2VjYi5jcHAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9obWFjX3NoYTI1Ni5jcHAgICAgICAgICAgICBcCisgICAgY3J5cHRvL21iZWR0bHMuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBjcnlwdG8vcGJrZGYyX2NtYWMuY3BwICAgICAgICAgICAgXAorICAgIGNyeXB0by9zaGEyNTYuY3BwICAgICAgICAgICAgICAgICBcCisgICAgbWFjL21hYy5jcHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWMvbWFjX2JsYWNrbGlzdC5jcHAgICAgICAgICAgICAgXAorICAgIG1hYy9tYWNfZnJhbWUuY3BwICAgICAgICAgICAgICAgICBcCisgICAgbWFjL21hY193aGl0ZWxpc3QuY3BwICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2Fubm91bmNlX2JlZ2luX2NsaWVudC5jcHAgXAorICAgIG1lc2hjb3AvY29tbWlzc2lvbmVyLmNwcCAgICAgICAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0LmNwcCAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2RhdGFzZXRfbG9jYWwuY3BwICAgICAgICAgXAorICAgIG1lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmNwcCAgICAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmNwcCAgIFwKKyAgICBtZXNoY29wL2R0bHMuY3BwICAgICAgICAgICAgICAgICAgXAorICAgIG1lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmNwcCAgICBcCisgICAgbWVzaGNvcC9qb2luZXIuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2pvaW5lcl9yb3V0ZXIuY3BwICAgICAgICAgXAorICAgIG1lc2hjb3AvbGVhZGVyLmNwcCAgICAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9wYW5pZF9xdWVyeV9jbGllbnQuY3BwICAgIFwKKyAgICBtZXNoY29wL3RpbWVzdGFtcC5jcHAgICAgICAgICAgICAgXAorICAgIG1lc2hjb3AvbWVzaGNvcF90bHZzLmNwcCAgICAgICAgICBcCisgICAgbmV0L2RoY3A2X2NsaWVudC5jcHAgICAgICAgICAgICAgIFwKKyAgICBuZXQvZGhjcDZfc2VydmVyLmNwcCAgICAgICAgICAgICAgXAorICAgIG5ldC9kbnNfY2xpZW50LmNwcCAgICAgICAgICAgICAgICBcCisgICAgbmV0L2ljbXA2LmNwcCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2LmNwcCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfYWRkcmVzcy5jcHAgICAgICAgICAgICAgICBcCisgICAgbmV0L2lwNl9maWx0ZXIuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2X21wbC5jcHAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfcm91dGVzLmNwcCAgICAgICAgICAgICAgICBcCisgICAgbmV0L25ldGlmLmNwcCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvdWRwNi5jcHAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmNwcCAgICAgICBcCisgICAgdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5jcHAgIFwKKyAgICB0aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuY3BwICAgICAgXAorICAgIHRocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwICAgICBcCisgICAgdGhyZWFkL2tleV9tYW5hZ2VyLmNwcCAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbGlua19xdWFsaXR5LmNwcCAgICAgICAgICAgXAorICAgIHRocmVhZC9sb3dwYW4uY3BwICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkL21lc2hfZm9yd2FyZGVyLmNwcCAgICAgICAgIFwKKyAgICB0aHJlYWQvbWxlLmNwcCAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9tbGVfcm91dGVyLmNwcCAgICAgICAgICAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YS5jcHAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5jcHAgICAgXAorICAgIHRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAgXAorICAgIHRocmVhZC9uZXR3b3JrX2RhdGFfbG9jYWwuY3BwICAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5jcHAgICAgIFwKKyAgICB0aHJlYWQvcGFuaWRfcXVlcnlfc2VydmVyLmNwcCAgICAgXAorICAgIHRocmVhZC9zcmNfbWF0Y2hfY29udHJvbGxlci5jcHAgICBcCisgICAgdGhyZWFkL3RocmVhZF9uZXRpZi5jcHAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvdG1mX3Byb3h5LmNwcCAgICAgICAgICAgICAgXAorICAgIHRocmVhZC90b3BvbG9neS5jcHAgICAgICAgICAgICAgICBcCisgICAgdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uY3BwICAgICAgIFwKKyAgICB1dGlscy9qYW1fZGV0ZWN0b3IuY3BwICAgICAgICAgICAgXAorICAgIHV0aWxzL21pc3Npbmdfc3RybGNweS5jICAgICAgICAgICBcCisgICAgdXRpbHMvbWlzc2luZ19zdHJsY2F0LmMgICAgICAgICAgIFwKKyAgICB1dGlscy9taXNzaW5nX3N0cm5sZW4uYyAgICAgICAgICAgXAorICAgIHV0aWxzL3NsYWFjX2FkZHJlc3MuY3BwICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisKK2xpYm9wZW50aHJlYWRfbXRkX2FfU09VUkNFUyAgICAgICAgID0gXAorICAgICQoU09VUkNFU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJvcGVudGhyZWFkX2Z0ZF9hX1NPVVJDRVMgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworSEVBREVSU19DT01NT04gICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgb3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oICAgICAgICAgIFwKKyAgICBvcGVudGhyZWFkLWNvcmUtZGVmYXVsdC1jb25maWcuaCAgXAorICAgIG9wZW50aHJlYWQtaW5zdGFuY2UuaCAgICAgICAgICAgICBcCisgICAgb3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaCAgICAgIFwKKyAgICBhcGkvbGlua19yYXcuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIGNvYXAvY29hcC5ocHAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29hcC9jb2FwX2hlYWRlci5ocHAgICAgICAgICAgICAgIFwKKyAgICBjb2FwL2NvYXBfc2VjdXJlLmhwcCAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9jb2RlX3V0aWxzLmhwcCAgICAgICAgICAgICBcCisgICAgY29tbW9uL2NvbnRleHQuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vY3JjMTYuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9kZWJ1Zy5ocHAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL2VuY29kaW5nLmhwcCAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vbG9jYXRvci5ocHAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9sb2dnaW5nLmhwcCAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL21lc3NhZ2UuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vc2V0dGluZ3MuaHBwICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi9uZXcuaHBwICAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL3Rhc2tsZXQuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24vdGltZXIuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIGNvbW1vbi90bHZzLmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwICAgICAgICAgIFwKKyAgICBjcnlwdG8vYWVzX2NjbS5ocHAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9hZXNfZWNiLmhwcCAgICAgICAgICAgICAgICBcCisgICAgY3J5cHRvL2htYWNfc2hhMjU2LmhwcCAgICAgICAgICAgIFwKKyAgICBjcnlwdG8vbWJlZHRscy5ocHAgICAgICAgICAgICAgICAgXAorICAgIGNyeXB0by9wYmtkZjJfY21hYy5oICAgICAgICAgICAgICBcCisgICAgY3J5cHRvL3NoYTI1Ni5ocHAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWMvbWFjLmhwcCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hYy9tYWNfYmxhY2tsaXN0LmhwcCAgICAgICAgICAgICBcCisgICAgbWFjL21hY19ibGFja2xpc3RfaW1wbC5ocHAgICAgICAgIFwKKyAgICBtYWMvbWFjX2JsYWNrbGlzdF9zdHViLmhwcCAgICAgICAgXAorICAgIG1hYy9tYWNfZnJhbWUuaHBwICAgICAgICAgICAgICAgICBcCisgICAgbWFjL21hY193aGl0ZWxpc3QuaHBwICAgICAgICAgICAgIFwKKyAgICBtYWMvbWFjX3doaXRlbGlzdF9pbXBsLmhwcCAgICAgICAgXAorICAgIG1hYy9tYWNfd2hpdGVsaXN0X3N0dWIuaHBwICAgICAgICBcCisgICAgbWVzaGNvcC9hbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIFwKKyAgICBtZXNoY29wL2NvbW1pc3Npb25lci5ocHAgICAgICAgICAgXAorICAgIG1lc2hjb3AvZGF0YXNldC5ocHAgICAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0X2xvY2FsLmhwcCAgICAgICAgIFwKKyAgICBtZXNoY29wL2RhdGFzZXRfbWFuYWdlci5ocHAgICAgICAgXAorICAgIG1lc2hjb3AvZGF0YXNldF9tYW5hZ2VyX2Z0ZC5ocHAgICBcCisgICAgbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfbXRkLmhwcCAgIFwKKyAgICBtZXNoY29wL2R0bHMuaHBwICAgICAgICAgICAgICAgICAgXAorICAgIG1lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmhwcCAgICBcCisgICAgbWVzaGNvcC9qb2luZXIuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL2pvaW5lcl9yb3V0ZXIuaHBwICAgICAgICAgXAorICAgIG1lc2hjb3AvbGVhZGVyLmhwcCAgICAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9tZXNoY29wLmhwcCAgICAgICAgICAgICAgIFwKKyAgICBtZXNoY29wL3BhbmlkX3F1ZXJ5X2NsaWVudC5ocHAgICAgXAorICAgIG1lc2hjb3AvdGltZXN0YW1wLmhwcCAgICAgICAgICAgICBcCisgICAgbWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwICAgICAgICAgIFwKKyAgICBuZXQvZGhjcDYuaHBwICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9kaGNwNl9jbGllbnQuaHBwICAgICAgICAgICAgICBcCisgICAgbmV0L2RoY3A2X3NlcnZlci5ocHAgICAgICAgICAgICAgIFwKKyAgICBuZXQvZG5zX2NsaWVudC5ocHAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9kbnNfaGVhZGVycy5ocHAgICAgICAgICAgICAgICBcCisgICAgbmV0L2ljbXA2LmhwcCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2LmhwcCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfYWRkcmVzcy5ocHAgICAgICAgICAgICAgICBcCisgICAgbmV0L2lwNl9oZWFkZXJzLmhwcCAgICAgICAgICAgICAgIFwKKyAgICBuZXQvaXA2X2ZpbHRlci5ocHAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9pcDZfbXBsLmhwcCAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0L2lwNl9yb3V0ZXMuaHBwICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvbmV0aWYuaHBwICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5ldC9zb2NrZXQuaHBwICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0L3RjcC5ocHAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXQvdWRwNi5ocHAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcCAgICAgICBcCisgICAgdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5ocHAgIFwKKyAgICB0aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuaHBwICAgICAgXAorICAgIHRocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwICAgICBcCisgICAgdGhyZWFkL2tleV9tYW5hZ2VyLmhwcCAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbGlua19xdWFsaXR5LmhwcCAgICAgICAgICAgXAorICAgIHRocmVhZC9sb3dwYW4uaHBwICAgICAgICAgICAgICAgICBcCisgICAgdGhyZWFkL21lc2hfZm9yd2FyZGVyLmhwcCAgICAgICAgIFwKKyAgICB0aHJlYWQvbWxlLmhwcCAgICAgICAgICAgICAgICAgICAgXAorICAgIHRocmVhZC9tbGVfY29uc3RhbnRzLmhwcCAgICAgICAgICBcCisgICAgdGhyZWFkL21sZV9yb3V0ZXIuaHBwICAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbWxlX3JvdXRlcl9mdGQuaHBwICAgICAgICAgXAorICAgIHRocmVhZC9tbGVfcm91dGVyX210ZC5ocHAgICAgICAgICBcCisgICAgdGhyZWFkL21sZV90bHZzLmhwcCAgICAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kYXRhLmhwcCAgICAgICAgICAgXAorICAgIHRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfZnRkLmhwcCBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfbXRkLmhwcCBcCisgICAgdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5ocHAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kYXRhX3RsdnMuaHBwICAgICAgXAorICAgIHRocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwICAgICBcCisgICAgdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5ocHAgICAgIFwKKyAgICB0aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwIFwKKyAgICB0aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwICAgXAorICAgIHRocmVhZC90aHJlYWRfbmV0aWYuaHBwICAgICAgICAgICBcCisgICAgdGhyZWFkL3RocmVhZF90bHZzLmhwcCAgICAgICAgICAgIFwKKyAgICB0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAgICAgICAgXAorICAgIHRocmVhZC90bWZfcHJveHkuaHBwICAgICAgICAgICAgICBcCisgICAgdGhyZWFkL3RvcG9sb2d5LmhwcCAgICAgICAgICAgICAgIFwKKyAgICB1dGlscy9jaGlsZF9zdXBlcnZpc2lvbi5ocHAgICAgICAgXAorICAgIHV0aWxzL3NsYWFjX2FkZHJlc3MuaHBwICAgICAgICAgICBcCisgICAgdXRpbHMvamFtX2RldGVjdG9yLmhwcCAgICAgICAgICAgIFwKKyAgICB1dGlscy93cmFwX3N0ZGJvb2wuaCAgICAgICAgICAgICAgXAorICAgIHV0aWxzL3dyYXBfc3RkaW50LmggICAgICAgICAgICAgICBcCisgICAgdXRpbHMvd3JhcF9zdHJpbmcuaCAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK25vaW5zdF9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoSEVBREVSU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitQUkVUVFlfRklMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKFNPVVJDRVNfQ09NTU9OKSAgICAgICAgICAgICAgICAgXAorICAgICQoSEVBREVSU19DT01NT04pICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitEYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0KK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gJChzaGVsbCBmaW5kICQodG9wX2J1aWxkZGlyKS9zcmMvY29yZSAkKERhc2gpbmFtZSAiKi5nY2RhIiAkKERhc2gpbyAkKERhc2gpbmFtZSAiKi5nY25vIikKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9ib3JkZXJfcm91dGVyX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvYm9yZGVyX3JvdXRlcl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmM0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvYm9yZGVyX3JvdXRlcl9hcGkuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgQm9yZGVyIFJvdXRlciBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2JvcmRlcl9yb3V0ZXIuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitvdEVycm9yIG90Qm9yZGVyUm91dGVyR2V0TmV0RGF0YShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVN0YWJsZSwgdWludDhfdCAqYURhdGEsIHVpbnQ4X3QgKmFEYXRhTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFEYXRhICE9IE5VTEwgJiYgYURhdGFMZW5ndGggIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkdldE5ldHdvcmtEYXRhKGFTdGFibGUsIGFEYXRhLCAqYURhdGFMZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdEJvcmRlclJvdXRlckFkZE9uTWVzaFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnKQoreworICAgIHVpbnQ4X3QgZmxhZ3MgPSAwOworCisgICAgaWYgKGFDb25maWctPm1QcmVmZXJyZWQpCisgICAgeworICAgICAgICBmbGFncyB8PSBOZXR3b3JrRGF0YTo6Qm9yZGVyUm91dGVyRW50cnk6OmtQcmVmZXJyZWRGbGFnOworICAgIH0KKworICAgIGlmIChhQ29uZmlnLT5tU2xhYWMpCisgICAgeworICAgICAgICBmbGFncyB8PSBOZXR3b3JrRGF0YTo6Qm9yZGVyUm91dGVyRW50cnk6OmtTbGFhY0ZsYWc7CisgICAgfQorCisgICAgaWYgKGFDb25maWctPm1EaGNwKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gTmV0d29ya0RhdGE6OkJvcmRlclJvdXRlckVudHJ5OjprRGhjcEZsYWc7CisgICAgfQorCisgICAgaWYgKGFDb25maWctPm1Db25maWd1cmUpCisgICAgeworICAgICAgICBmbGFncyB8PSBOZXR3b3JrRGF0YTo6Qm9yZGVyUm91dGVyRW50cnk6OmtDb25maWd1cmVGbGFnOworICAgIH0KKworICAgIGlmIChhQ29uZmlnLT5tRGVmYXVsdFJvdXRlKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gTmV0d29ya0RhdGE6OkJvcmRlclJvdXRlckVudHJ5OjprRGVmYXVsdFJvdXRlRmxhZzsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy0+bU9uTWVzaCkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IE5ldHdvcmtEYXRhOjpCb3JkZXJSb3V0ZXJFbnRyeTo6a09uTWVzaEZsYWc7CisgICAgfQorCisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTG9jYWwoKS5BZGRPbk1lc2hQcmVmaXgoYUNvbmZpZy0+bVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb25maWctPm1QcmVmZXJlbmNlLCBmbGFncywgYUNvbmZpZy0+bVN0YWJsZSk7Cit9CisKK290RXJyb3Igb3RCb3JkZXJSb3V0ZXJSZW1vdmVPbk1lc2hQcmVmaXgob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLlJlbW92ZU9uTWVzaFByZWZpeChhUHJlZml4LT5tUHJlZml4Lm1GaWVsZHMubTgsIGFQcmVmaXgtPm1MZW5ndGgpOworfQorCitvdEVycm9yIG90Qm9yZGVyUm91dGVyR2V0TmV4dE9uTWVzaFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUl0ZXJhdG9yICYmIGFDb25maWcsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkdldE5leHRPbk1lc2hQcmVmaXgoYUl0ZXJhdG9yLCBhQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RCb3JkZXJSb3V0ZXJBZGRSb3V0ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkFkZEhhc1JvdXRlUHJlZml4KGFDb25maWctPm1QcmVmaXgubVByZWZpeC5tRmllbGRzLm04LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbmZpZy0+bVByZWZlcmVuY2UsIGFDb25maWctPm1TdGFibGUpOworfQorCitvdEVycm9yIG90Qm9yZGVyUm91dGVyUmVtb3ZlUm91dGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNlByZWZpeCAqYVByZWZpeCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLlJlbW92ZUhhc1JvdXRlUHJlZml4KGFQcmVmaXgtPm1QcmVmaXgubUZpZWxkcy5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFQcmVmaXgtPm1MZW5ndGgpOworfQorCitvdEVycm9yIG90Qm9yZGVyUm91dGVyR2V0TmV4dFJvdXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSXRlcmF0b3IgJiYgYUNvbmZpZywgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXROZXR3b3JrRGF0YUxvY2FsKCkuR2V0TmV4dEV4dGVybmFsUm91dGUoYUl0ZXJhdG9yLCBhQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RCb3JkZXJSb3V0ZXJSZWdpc3RlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTG9jYWwoKS5TZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbigpOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9jaGlsZF9zdXBlcnZpc2lvbl9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2NoaWxkX3N1cGVydmlzaW9uX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxMTMwZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9jaGlsZF9zdXBlcnZpc2lvbl9hcGkuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgY2hpbGQgc3VwZXJ2aXNpb24gQVBJLgorICovCisKKyNpbmNsdWRlICJvcGVudGhyZWFkL2NoaWxkX3N1cGVydmlzaW9uLmgiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKK3VpbnQxNl90IG90Q2hpbGRTdXBlcnZpc2lvbkdldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q2hpbGRTdXBlcnZpc29yKCkuR2V0U3VwZXJ2aXNpb25JbnRlcnZhbCgpOworfQorCit2b2lkIG90Q2hpbGRTdXBlcnZpc2lvblNldEludGVydmFsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUludGVydmFsKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENoaWxkU3VwZXJ2aXNvcigpLlNldFN1cGVydmlzaW9uSW50ZXJ2YWwoYUludGVydmFsKTsKK30KKwordWludDE2X3Qgb3RDaGlsZFN1cGVydmlzaW9uR2V0Q2hlY2tUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpLkdldFRpbWVvdXQoKTsKK30KKwordm9pZCBvdENoaWxkU3VwZXJ2aXNpb25TZXRDaGVja1RpbWVvdXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhVGltZW91dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRTdXBlcnZpc2lvbkxpc3RlbmVyKCkuU2V0VGltZW91dChhVGltZW91dCk7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9jb2FwX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvY29hcF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzY3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvY29hcF9hcGkuY3BwCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIENvQVAgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb2FwLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9BUFBMSUNBVElPTl9DT0FQCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordm9pZCBvdENvYXBIZWFkZXJJbml0KG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RDb2FwVHlwZSBhVHlwZSwgb3RDb2FwQ29kZSBhQ29kZSkKK3sKKyAgICBDb2FwOjpIZWFkZXIgKmhlYWRlciA9IHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKTsKKyAgICBoZWFkZXItPkluaXQoYVR5cGUsIGFDb2RlKTsKK30KKwordm9pZCBvdENvYXBIZWFkZXJTZXRUb2tlbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIGNvbnN0IHVpbnQ4X3QgKmFUb2tlbiwgdWludDhfdCBhVG9rZW5MZW5ndGgpCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5TZXRUb2tlbihhVG9rZW4sIGFUb2tlbkxlbmd0aCk7Cit9CisKK3ZvaWQgb3RDb2FwSGVhZGVyR2VuZXJhdGVUb2tlbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQ4X3QgYVRva2VuTGVuZ3RoKQoreworICAgIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+U2V0VG9rZW4oYVRva2VuTGVuZ3RoKTsKK30KKworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRDb250ZW50Rm9ybWF0T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdCBhQ29udGVudEZvcm1hdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5BcHBlbmRDb250ZW50Rm9ybWF0T3B0aW9uKGFDb250ZW50Rm9ybWF0KTsKK30KKworb3RFcnJvciBvdENvYXBIZWFkZXJBcHBlbmRPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyLCBjb25zdCBvdENvYXBPcHRpb24gKmFPcHRpb24pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+QXBwZW5kT3B0aW9uKCpzdGF0aWNfY2FzdDxjb25zdCBDb2FwOjpIZWFkZXI6Ok9wdGlvbiAqPihhT3B0aW9uKSk7Cit9CisKK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kVWludE9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQxNl90IGFOdW1iZXIsIHVpbnQzMl90IGFWYWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5BcHBlbmRVaW50T3B0aW9uKGFOdW1iZXIsIGFWYWx1ZSk7Cit9CisKK290RXJyb3Igb3RDb2FwSGVhZGVyQXBwZW5kT2JzZXJ2ZU9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQzMl90IGFPYnNlcnZlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkFwcGVuZE9ic2VydmVPcHRpb24oYU9ic2VydmUpOworfQorCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVBhdGhPcHRpb25zKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVBhdGgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+QXBwZW5kVXJpUGF0aE9wdGlvbnMoYVVyaVBhdGgpOworfQorCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZE1heEFnZU9wdGlvbihvdENvYXBIZWFkZXIgKmFIZWFkZXIsIHVpbnQzMl90IGFNYXhBZ2UpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+QXBwZW5kTWF4QWdlT3B0aW9uKGFNYXhBZ2UpOworfQorCitvdEVycm9yIG90Q29hcEhlYWRlckFwcGVuZFVyaVF1ZXJ5T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlciwgY29uc3QgY2hhciAqYVVyaVF1ZXJ5KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkFwcGVuZFVyaVF1ZXJ5T3B0aW9uKGFVcmlRdWVyeSk7Cit9CisKK3ZvaWQgb3RDb2FwSGVhZGVyU2V0UGF5bG9hZE1hcmtlcihvdENvYXBIZWFkZXIgKmFIZWFkZXIpCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5TZXRQYXlsb2FkTWFya2VyKCk7Cit9CisKK3ZvaWQgb3RDb2FwSGVhZGVyU2V0TWVzc2FnZUlkKG90Q29hcEhlYWRlciAqYUhlYWRlciwgdWludDE2X3QgYU1lc3NhZ2VJZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5TZXRNZXNzYWdlSWQoYU1lc3NhZ2VJZCk7Cit9CisKK290Q29hcFR5cGUgb3RDb2FwSGVhZGVyR2V0VHlwZShjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+R2V0VHlwZSgpOworfQorCitvdENvYXBDb2RlIG90Q29hcEhlYWRlckdldENvZGUoY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkdldENvZGUoKTsKK30KKwordWludDE2X3Qgb3RDb2FwSGVhZGVyR2V0TWVzc2FnZUlkKGNvbnN0IG90Q29hcEhlYWRlciAqYUhlYWRlcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5HZXRNZXNzYWdlSWQoKTsKK30KKwordWludDhfdCBvdENvYXBIZWFkZXJHZXRUb2tlbkxlbmd0aChjb25zdCBvdENvYXBIZWFkZXIgKmFIZWFkZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+R2V0VG9rZW5MZW5ndGgoKTsKK30KKworY29uc3QgdWludDhfdCAqb3RDb2FwSGVhZGVyR2V0VG9rZW4oY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciktPkdldFRva2VuKCk7Cit9CisKK2NvbnN0IG90Q29hcE9wdGlvbiAqb3RDb2FwSGVhZGVyR2V0Rmlyc3RPcHRpb24ob3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBvdENvYXBPcHRpb24gKj4oc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLT5HZXRGaXJzdE9wdGlvbigpKTsKK30KKworY29uc3Qgb3RDb2FwT3B0aW9uICpvdENvYXBIZWFkZXJHZXROZXh0T3B0aW9uKG90Q29hcEhlYWRlciAqYUhlYWRlcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qgb3RDb2FwT3B0aW9uICo+KHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKS0+R2V0TmV4dE9wdGlvbigpKTsKK30KKworb3RNZXNzYWdlICpvdENvYXBOZXdNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RDb2FwSGVhZGVyICphSGVhZGVyKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIgIT0gTlVMTCwgbWVzc2FnZSA9IE5VTEwpOworICAgIG1lc3NhZ2UgPSBhSW5zdGFuY2UtPm1BcHBsaWNhdGlvbkNvYXAuTmV3TWVzc2FnZSgqKHN0YXRpY19jYXN0PGNvbnN0IENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSkpOworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBvdENvYXBTZW5kUmVxdWVzdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlNlbmRNZXNzYWdlKAorICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwKKyAgICAgICAgICAgICAgIGFIYW5kbGVyLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RDb2FwU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUG9ydCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlN0YXJ0KGFQb3J0KTsKK30KKworb3RFcnJvciBvdENvYXBTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlN0b3AoKTsKK30KKworb3RFcnJvciBvdENvYXBBZGRSZXNvdXJjZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90Q29hcFJlc291cmNlICphUmVzb3VyY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUFwcGxpY2F0aW9uQ29hcC5BZGRSZXNvdXJjZSgqc3RhdGljX2Nhc3Q8Q29hcDo6UmVzb3VyY2UgKj4oYVJlc291cmNlKSk7Cit9CisKK3ZvaWQgb3RDb2FwUmVtb3ZlUmVzb3VyY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENvYXBSZXNvdXJjZSAqYVJlc291cmNlKQoreworICAgIGFJbnN0YW5jZS0+bUFwcGxpY2F0aW9uQ29hcC5SZW1vdmVSZXNvdXJjZSgqc3RhdGljX2Nhc3Q8Q29hcDo6UmVzb3VyY2UgKj4oYVJlc291cmNlKSk7Cit9CisKK3ZvaWQgb3RDb2FwU2V0RGVmYXVsdEhhbmRsZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdENvYXBSZXF1ZXN0SGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgYUluc3RhbmNlLT5tQXBwbGljYXRpb25Db2FwLlNldERlZmF1bHRIYW5kbGVyKGFIYW5kbGVyLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RDb2FwU2VuZFJlc3BvbnNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1BcHBsaWNhdGlvbkNvYXAuU2VuZE1lc3NhZ2UoCisgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2NvbW1pc3Npb25lcl9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2NvbW1pc3Npb25lcl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODM2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvY29tbWlzc2lvbmVyX2FwaS5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgQ29tbWlzc2lvbmVyIEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29tbWlzc2lvbmVyLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKworI2lmIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUgorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5TdGFydCgpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLlN0b3AoKTsKK30KKworb3RFcnJvciBvdENvbW1pc3Npb25lckFkZEpvaW5lcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MsIGNvbnN0IGNoYXIgKmFQU0tkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuQWRkSm9pbmVyKHN0YXRpY19jYXN0PGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAqPihhRXh0QWRkcmVzcyksIGFQU0tkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVRpbWVvdXQpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyUmVtb3ZlSm9pbmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuUmVtb3ZlSm9pbmVyKHN0YXRpY19jYXN0PGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAqPihhRXh0QWRkcmVzcyksIDApOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyU2V0UHJvdmlzaW9uaW5nVXJsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuU2V0UHJvdmlzaW9uaW5nVXJsKGFQcm92aXNpb25pbmdVcmwpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5tQW5ub3VuY2VCZWdpbi5TZW5kUmVxdWVzdChhQ2hhbm5lbE1hc2ssIGFDb3VudCwgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihhQWRkcmVzcykpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb21taXNzaW9uZXJFbmVyZ3lSZXBvcnRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5tRW5lcmd5U2Nhbi5TZW5kUXVlcnkoYUNoYW5uZWxNYXNrLCBhQ291bnQsIGFQZXJpb2QsIGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDYWxsYmFjaywgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90Q29tbWlzc2lvbmVyUGFuSWRRdWVyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLm1QYW5JZFF1ZXJ5LlNlbmRRdWVyeSgKKyAgICAgICAgICAgICAgIGFQYW5JZCwgYUNoYW5uZWxNYXNrLCAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSwgYUNhbGxiYWNrLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RDb21taXNzaW9uZXJTZW5kTWdtdEdldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLlNlbmRNZ210Q29tbWlzc2lvbmVyR2V0UmVxdWVzdChhVGx2cywgYUxlbmd0aCk7Cit9CisKK290RXJyb3Igb3RDb21taXNzaW9uZXJTZW5kTWdtdFNldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90Q29tbWlzc2lvbmluZ0RhdGFzZXQgKmFEYXRhc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLlNlbmRNZ210Q29tbWlzc2lvbmVyU2V0UmVxdWVzdCgqYURhdGFzZXQsIGFUbHZzLCBhTGVuZ3RoKTsKK30KKwordWludDE2X3Qgb3RDb21taXNzaW9uZXJHZXRTZXNzaW9uSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRDb21taXNzaW9uZXIoKS5HZXRTZXNzaW9uSWQoKTsKK30KKworb3RDb21taXNzaW9uZXJTdGF0ZSBvdENvbW1pc3Npb25lckdldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuR2V0U3RhdGUoKTsKK30KKworb3RFcnJvciBvdENvbW1pc3Npb25lckdlbmVyYXRlUFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGNoYXIgKmFQYXNzUGhyYXNlLCBjb25zdCBjaGFyICphTmV0d29ya05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCwgdWludDhfdCAqYVBTS2MpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvbW1pc3Npb25lcigpLkdlbmVyYXRlUFNLYyhhUGFzc1BocmFzZSwgYU5ldHdvcmtOYW1lLCBhRXh0UGFuSWQsIGFQU0tjKTsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9jcnlwdG9fYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9jcnlwdG9fYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJlYThkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2NyeXB0b19hcGkuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgQ3J5cHRvIEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NyeXB0by5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL2Flc19jY20uaHBwIgorI2luY2x1ZGUgImNyeXB0by9obWFjX3NoYTI1Ni5ocHAiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDo6Q3J5cHRvOworCit2b2lkIG90Q3J5cHRvSG1hY1NoYTI1NigKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgsCisgICAgdWludDhfdCAqYUhhc2gpCit7CisgICAgSG1hY1NoYTI1NiBobWFjOworCisgICAgYXNzZXJ0KChhS2V5ICE9IE5VTEwpICYmIChhQnVmICE9IE5VTEwpICYmIChhSGFzaCAhPSBOVUxMKSk7CisKKyAgICBobWFjLlN0YXJ0KGFLZXksIGFLZXlMZW5ndGgpOworICAgIGhtYWMuVXBkYXRlKGFCdWYsIGFCdWZMZW5ndGgpOworICAgIGhtYWMuRmluaXNoKGFIYXNoKTsKK30KKwordm9pZCBvdENyeXB0b0Flc0NjbSgKKyAgICBjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoLAorICAgIHVpbnQ4X3QgYVRhZ0xlbmd0aCwKKyAgICBjb25zdCB2b2lkICphTm9uY2UsIHVpbnQ4X3QgYU5vbmNlTGVuZ3RoLAorICAgIGNvbnN0IHZvaWQgKmFIZWFkZXIsIHVpbnQzMl90IGFIZWFkZXJMZW5ndGgsCisgICAgdm9pZCAqYVBsYWluVGV4dCwgdm9pZCAqYUNpcGhlclRleHQsIHVpbnQzMl90IGFMZW5ndGgsIGJvb2wgYUVuY3J5cHQsCisgICAgdm9pZCAqYVRhZykKK3sKKyAgICBBZXNDY20gYWVzQ2NtOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoOworCisgICAgYXNzZXJ0KChhS2V5ICE9IE5VTEwpICYmIChhTm9uY2UgIT0gTlVMTCkgJiYgKGFQbGFpblRleHQgIT0gTlVMTCkgJiYgKGFDaXBoZXJUZXh0ICE9IE5VTEwpICYmIChhVGFnICE9IE5VTEwpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoYWVzQ2NtLlNldEtleShhS2V5LCBhS2V5TGVuZ3RoKSk7CisgICAgYWVzQ2NtLkluaXQoYUhlYWRlckxlbmd0aCwgYUxlbmd0aCwgYVRhZ0xlbmd0aCwgYU5vbmNlLCBhTm9uY2VMZW5ndGgpOworCisgICAgaWYgKGFIZWFkZXJMZW5ndGggIT0gMCkKKyAgICB7CisgICAgICAgIGFzc2VydChhSGVhZGVyICE9IE5VTEwpOworICAgICAgICBhZXNDY20uSGVhZGVyKGFIZWFkZXIsIGFIZWFkZXJMZW5ndGgpOworICAgIH0KKworICAgIGFlc0NjbS5QYXlsb2FkKGFQbGFpblRleHQsIGFDaXBoZXJUZXh0LCBhTGVuZ3RoLCBhRW5jcnlwdCk7CisgICAgYWVzQ2NtLkZpbmFsaXplKGFUYWcsICZ0YWdMZW5ndGgpOworCisgICAgYXNzZXJ0KGFUYWdMZW5ndGggPT0gdGFnTGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvZGF0YXNldF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2RhdGFzZXRfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBhMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2RhdGFzZXRfYXBpLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIE9wZXJhdGlvbmFsIERhdGFzZXQgQVBJIChmb3IgYm90aCBGVEQgYW5kIE1URCkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RhdGFzZXQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitib29sIG90RGF0YXNldElzQ29tbWlzc2lvbmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdE9wZXJhdGlvbmFsRGF0YXNldCBkYXRhc2V0OworCisgICAgb3REYXRhc2V0R2V0QWN0aXZlKGFJbnN0YW5jZSwgJmRhdGFzZXQpOworCisgICAgaWYgKChkYXRhc2V0Lm1Jc01hc3RlcktleVNldCkgJiYgKGRhdGFzZXQubUlzTmV0d29ya05hbWVTZXQpICYmCisgICAgICAgIChkYXRhc2V0Lm1Jc0V4dGVuZGVkUGFuSWRTZXQpICYmIChkYXRhc2V0Lm1Jc1BhbklkU2V0KSAmJiAoZGF0YXNldC5tSXNDaGFubmVsU2V0KSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworb3RFcnJvciBvdERhdGFzZXRHZXRBY3RpdmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0TG9jYWwoKS5HZXQoKmFEYXRhc2V0KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3REYXRhc2V0R2V0UGVuZGluZyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhRGF0YXNldCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuR2V0TG9jYWwoKS5HZXQoKmFEYXRhc2V0KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvZGF0YXNldF9mdGRfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9kYXRhc2V0X2Z0ZF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjBjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvZGF0YXNldF9mdGRfYXBpLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIE9wZXJhdGlvbmFsIERhdGFzZXQgQVBJIChGVEQgb25seSkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kYXRhc2V0X2Z0ZC5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290RXJyb3Igb3REYXRhc2V0U2V0QWN0aXZlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgKmFEYXRhc2V0KQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuU2V0KCphRGF0YXNldCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90RGF0YXNldFNldFBlbmRpbmcob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdChhRGF0YXNldCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuU2V0KCphRGF0YXNldCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90RGF0YXNldFNlbmRNZ210QWN0aXZlR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5TZW5kR2V0UmVxdWVzdChhVGx2VHlwZXMsIGFMZW5ndGgsIGFBZGRyZXNzKTsKK30KKworb3RFcnJvciBvdERhdGFzZXRTZW5kTWdtdEFjdGl2ZVNldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICphRGF0YXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLlNlbmRTZXRSZXF1ZXN0KCphRGF0YXNldCwgYVRsdnMsIGFMZW5ndGgpOworfQorCitvdEVycm9yIG90RGF0YXNldFNlbmRNZ210UGVuZGluZ0dldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFUbHZUeXBlcywgdWludDhfdCBhTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5TZW5kR2V0UmVxdWVzdChhVGx2VHlwZXMsIGFMZW5ndGgsIGFBZGRyZXNzKTsKK30KKworb3RFcnJvciBvdERhdGFzZXRTZW5kTWdtdFBlbmRpbmdTZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAqYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhTGVuZ3RoKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLlNlbmRTZXRSZXF1ZXN0KCphRGF0YXNldCwgYVRsdnMsIGFMZW5ndGgpOworfQorCit1aW50MzJfdCBvdERhdGFzZXRHZXREZWxheVRpbWVyTWluaW1hbChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldExlYWRlcigpLkdldERlbGF5VGltZXJNaW5pbWFsKCk7Cit9CisKK290RXJyb3Igb3REYXRhc2V0U2V0RGVsYXlUaW1lck1pbmltYWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhRGVsYXlUaW1lck1pbmltYWwpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldExlYWRlcigpLlNldERlbGF5VGltZXJNaW5pbWFsKGFEZWxheVRpbWVyTWluaW1hbCk7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9kaGNwNl9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2RoY3A2X2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxYTE3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9kaGNwNl9hcGkuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgREhDUHY2IEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaGNwNl9zZXJ2ZXIuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCit2b2lkIG90RGhjcDZDbGllbnRVcGRhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdERoY3BBZGRyZXNzICphQWRkcmVzc2VzLCB1aW50MzJfdCBhTnVtQWRkcmVzc2VzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXREaGNwNkNsaWVudCgpLlVwZGF0ZUFkZHJlc3NlcyhhSW5zdGFuY2UsIGFBZGRyZXNzZXMsIGFOdW1BZGRyZXNzZXMsIGFDb250ZXh0KTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKK3ZvaWQgb3REaGNwNlNlcnZlclVwZGF0ZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0RGhjcDZTZXJ2ZXIoKS5VcGRhdGVTZXJ2aWNlKCk7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2Ruc19hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2Ruc19hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTY5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvZG5zX2FwaS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBVRFAgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kbnMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorb3RFcnJvciBvdERuc0NsaWVudFF1ZXJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3REbnNRdWVyeSAqYVF1ZXJ5LCBvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0RG5zQ2xpZW50KCkuUXVlcnkoYVF1ZXJ5LCBhSGFuZGxlciwgYUNvbnRleHQpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvaWNtcDZfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9pY21wNl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODNlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvaWNtcDZfYXBpLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIElDTVB2NiBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2ljbXA2Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKworYm9vbCBvdEljbXA2SXNFY2hvRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUlwNi5tSWNtcC5Jc0VjaG9FbmFibGVkKCk7Cit9CisKK3ZvaWQgb3RJY21wNlNldEVjaG9FbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1JcDYubUljbXAuU2V0RWNob0VuYWJsZWQoYUVuYWJsZWQpOworfQorCitvdEVycm9yIG90SWNtcDZSZWdpc3RlckhhbmRsZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdEljbXA2SGFuZGxlciAqYUhhbmRsZXIpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUlwNi5tSWNtcC5SZWdpc3RlckhhbmRsZXIoKnN0YXRpY19jYXN0PElwNjo6SWNtcEhhbmRsZXIgKj4oYUhhbmRsZXIpKTsKK30KKworb3RFcnJvciBvdEljbXA2U2VuZEVjaG9SZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIHVpbnQxNl90IGFJZGVudGlmaWVyKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1JcDYubUljbXAuU2VuZEVjaG9SZXF1ZXN0KCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJZGVudGlmaWVyKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9pbnN0YW5jZV9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL2luc3RhbmNlX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmNGI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9pbnN0YW5jZV9hcGkuY3BwCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIEluc3RhbmNlIEFQSS4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJpbnN0YW5jZV9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3NldHRpbmdzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL25ldy5ocHAiCisKKyNpZiAhT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisKK3N0YXRpYyBvdERFRklORV9BTElHTkVEX1ZBUihzSW5zdGFuY2VSYXcsIHNpemVvZihvdEluc3RhbmNlKSwgdWludDY0X3QpOworb3RJbnN0YW5jZSAqc0luc3RhbmNlID0gTlVMTDsKKworb3RJbnN0YW5jZSAqb3RHZXRJbnN0YW5jZSh2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2U7Cit9CisKK290OjpUaHJlYWROZXRpZiAmb3RHZXRUaHJlYWROZXRpZih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1UaHJlYWROZXRpZjsKK30KKworb3Q6Ok1lc2hGb3J3YXJkZXIgJm90R2V0TWVzaEZvcndhcmRlcih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCk7Cit9CisKK290OjpUaW1lclNjaGVkdWxlciAmb3RHZXRUaW1lclNjaGVkdWxlcih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1JcDYubVRpbWVyU2NoZWR1bGVyOworfQorCitvdDo6VGFza2xldFNjaGVkdWxlciAmb3RHZXRUYXNrbGV0U2NoZWR1bGVyKHZvaWQpCit7CisgICAgcmV0dXJuIHNJbnN0YW5jZS0+bUlwNi5tVGFza2xldFNjaGVkdWxlcjsKK30KKworb3Q6OklwNjo6SXA2ICZvdEdldElwNih2b2lkKQoreworICAgIHJldHVybiBzSW5zdGFuY2UtPm1JcDY7Cit9CisjZW5kaWYgLy8gI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworb3RJbnN0YW5jZTo6b3RJbnN0YW5jZSh2b2lkKSA6CisgICAgbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrKE5VTEwpLAorICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFja0NvbnRleHQoTlVMTCksCisgICAgbUFjdGl2ZVNjYW5DYWxsYmFjayhOVUxMKSwKKyAgICBtQWN0aXZlU2NhbkNhbGxiYWNrQ29udGV4dChOVUxMKSwKKyAgICBtRW5lcmd5U2NhbkNhbGxiYWNrKE5VTEwpLAorICAgIG1FbmVyZ3lTY2FuQ2FsbGJhY2tDb250ZXh0KE5VTEwpLAorICAgIG1UaHJlYWROZXRpZihtSXA2KQorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICwgbUxpbmtSYXcoKnRoaXMpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorICAgICwgbUFwcGxpY2F0aW9uQ29hcChtVGhyZWFkTmV0aWYpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTAorICAgICwgbUxvZ0xldmVsKHN0YXRpY19jYXN0PG90TG9nTGV2ZWw+KE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCkpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCit7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordm9pZCBvdEluc3RhbmNlUG9zdENvbnN0cnVjdG9yKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICAvLyByZXN0b3JlIGRhdGFzZXRzIGFuZCBuZXR3b3JrIGluZm9ybWF0aW9uCisgICAgb3RQbGF0U2V0dGluZ3NJbml0KGFJbnN0YW5jZSk7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuUmVzdG9yZSgpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0FVVE9fU1RBUlRfU1VQUE9SVAorCisgICAgLy8gSWYgYXV0byBzdGFydCBpcyBjb25maWd1cmVkLCBkbyB0aGF0IG5vdworICAgIGlmIChvdFRocmVhZEdldEF1dG9TdGFydChhSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgaWYgKG90SXA2U2V0RW5hYmxlZChhSW5zdGFuY2UsIHRydWUpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9ubHkgdHJ5IHRvIHN0YXJ0IFRocmVhZCBpZiB3ZSBjb3VsZCBicmluZyB1cCB0aGUgaW50ZXJmYWNlCisgICAgICAgICAgICBpZiAob3RUaHJlYWRTZXRFbmFibGVkKGFJbnN0YW5jZSwgdHJ1ZSkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUgaW50ZXJmYWNlIGRvd24gaWYgVGhyZWFkIGZhaWxlZCB0byBzdGFydAorICAgICAgICAgICAgICAgIG90SXA2U2V0RW5hYmxlZChhSW5zdGFuY2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXQodm9pZCAqYUluc3RhbmNlQnVmZmVyLCBzaXplX3QgKmFJbnN0YW5jZUJ1ZmZlclNpemUpCit7CisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2UgPSBOVUxMOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2VCdWZmZXJTaXplICE9IE5VTEwpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBpbnB1dCBidWZmZXIgaXMgYmlnIGVub3VnaAorICAgIFZlcmlmeU9yRXhpdChzaXplb2Yob3RJbnN0YW5jZSkgPD0gKmFJbnN0YW5jZUJ1ZmZlclNpemUsICphSW5zdGFuY2VCdWZmZXJTaXplID0gc2l6ZW9mKG90SW5zdGFuY2UpKTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2VCdWZmZXIgIT0gTlVMTCk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIGNvbnRleHQKKyAgICBpbnN0YW5jZSA9IG5ldyhhSW5zdGFuY2VCdWZmZXIpb3RJbnN0YW5jZSgpOworCisgICAgLy8gRXhlY3V0ZSBwb3N0IGNvbnN0cnVjdG9yIG9wZXJhdGlvbnMKKyAgICBvdEluc3RhbmNlUG9zdENvbnN0cnVjdG9yKGluc3RhbmNlKTsKKworICAgIG90TG9nSW5mb0FwaShpbnN0YW5jZSwgIm90SW5zdGFuY2UgSW5pdGlhbGl6ZWQiKTsKKworZXhpdDoKKworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKyNlbHNlIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUluaXRTaW5nbGUodm9pZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KHNJbnN0YW5jZSA9PSBOVUxMKTsKKworICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIGBzSW5zdGFuY2VgIHBvaW50ZXIgaXMgY29ycmVjdGx5IHNldAorICAgIC8vIGJlZm9yZSBhbnkgb2JqZWN0IGNvbnN0cnVjdG9yIGlzIGNhbGxlZC4KKyAgICBzSW5zdGFuY2UgPSByZWludGVycHJldF9jYXN0PG90SW5zdGFuY2UgKj4oJnNJbnN0YW5jZVJhdyk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIGNvbnRleHQKKyAgICBzSW5zdGFuY2UgPSBuZXcoJnNJbnN0YW5jZVJhdylvdEluc3RhbmNlKCk7CisKKyAgICAvLyBFeGVjdXRlIHBvc3QgY29uc3RydWN0b3Igb3BlcmF0aW9ucworICAgIG90SW5zdGFuY2VQb3N0Q29uc3RydWN0b3Ioc0luc3RhbmNlKTsKKworICAgIG90TG9nSW5mb0FwaShzSW5zdGFuY2UsICJvdEluc3RhbmNlIEluaXRpYWxpemVkIik7CisKK2V4aXQ6CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIHNJbnN0YW5jZTsKK30KKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKwordm9pZCBvdEluc3RhbmNlRmluYWxpemUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICAvLyBFbnN1cmUgd2UgYXJlIGRpc2FibGVkCisgICAgKHZvaWQpb3RUaHJlYWRTZXRFbmFibGVkKGFJbnN0YW5jZSwgZmFsc2UpOworICAgICh2b2lkKW90SXA2U2V0RW5hYmxlZChhSW5zdGFuY2UsIGZhbHNlKTsKKworI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBzSW5zdGFuY2UgPSBOVUxMOworI2VuZGlmCisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK290RXJyb3Igb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90U3RhdGVDaGFuZ2VkQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19NQVhfU1RBVEVDSEFOR0VfSEFORExFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldLklzRnJlZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldLlNldChhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQpOworICAgICAgICAgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5SZWdpc3RlckNhbGxiYWNrKGFJbnN0YW5jZS0+bU5ldGlmQ2FsbGJhY2tbaV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgb3RSZW1vdmVTdGF0ZUNoYW5nZUNhbGxiYWNrKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RTdGF0ZUNoYW5nZWRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19NQVhfU1RBVEVDSEFOR0VfSEFORExFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldLklzU2VydmluZyhhQ2FsbGJhY2ssIGFDYWxsYmFja0NvbnRleHQpKQorICAgICAgICB7CisgICAgICAgICAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5SZW1vdmVDYWxsYmFjayhhSW5zdGFuY2UtPm1OZXRpZkNhbGxiYWNrW2ldKTsKKyAgICAgICAgICAgIGFJbnN0YW5jZS0+bU5ldGlmQ2FsbGJhY2tbaV0uRnJlZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgb3RJbnN0YW5jZVJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdFBsYXRSZXNldChhSW5zdGFuY2UpOworfQorCit2b2lkIG90SW5zdGFuY2VGYWN0b3J5UmVzZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90UGxhdFNldHRpbmdzV2lwZShhSW5zdGFuY2UpOworICAgIG90UGxhdFJlc2V0KGFJbnN0YW5jZSk7Cit9CisKK290RXJyb3Igb3RJbnN0YW5jZUVyYXNlUGVyc2lzdGVudEluZm8ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG90VGhyZWFkR2V0RGV2aWNlUm9sZShhSW5zdGFuY2UpID09ICBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBvdFBsYXRTZXR0aW5nc1dpcGUoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290TG9nTGV2ZWwgb3RHZXREeW5hbWljTG9nTGV2ZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90TG9nTGV2ZWwgbG9nTGV2ZWw7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKyAgICBsb2dMZXZlbCA9ICBhSW5zdGFuY2UtPm1Mb2dMZXZlbDsKKyNlbHNlCisgICAgbG9nTGV2ZWwgPSBzdGF0aWNfY2FzdDxvdExvZ0xldmVsPihPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworI2VuZGlmCisKKyAgICByZXR1cm4gbG9nTGV2ZWw7Cit9CisKK290RXJyb3Igb3RTZXREeW5hbWljTG9nTGV2ZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExvZ0xldmVsIGFMb2dMZXZlbCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTAorICAgIGFJbnN0YW5jZS0+bUxvZ0xldmVsID0gYUxvZ0xldmVsOworI2Vsc2UKKyAgICBlcnJvciA9IE9UX0VSUk9SX0RJU0FCTEVEX0ZFQVRVUkU7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dMZXZlbCk7CisjZW5kaWYKKworICAgIHJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9pcDZfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9pcDZfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQwOGNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2lwNl9hcGkuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIElQdjYgQVBJLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImlwNl9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvaXA2Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgInV0aWxzL3NsYWFjX2FkZHJlc3MuaHBwIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290RXJyb3Igb3RJcDZTZXRFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBpZiAoYUVuYWJsZWQpCisgICAgeworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICBWZXJpZnlPckV4aXQoIWFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuVXAoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgICAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkRvd24oKTsKKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKK2V4aXQ6CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIG90SXA2SXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuSXNVcCgpOworfQorCitjb25zdCBvdE5ldGlmQWRkcmVzcyAqb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0VW5pY2FzdEFkZHJlc3NlcygpOworfQorCitvdEVycm9yIG90SXA2QWRkVW5pY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdE5ldGlmQWRkcmVzcyAqYWRkcmVzcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuQWRkRXh0ZXJuYWxVbmljYXN0QWRkcmVzcygqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzICo+KGFkZHJlc3MpKTsKK30KKworb3RFcnJvciBvdElwNlJlbW92ZVVuaWNhc3RBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5SZW1vdmVFeHRlcm5hbFVuaWNhc3RBZGRyZXNzKCpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkFkZHJlc3MgKj4oYWRkcmVzcykpOworfQorCitjb25zdCBvdE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqb3RJcDZHZXRNdWx0aWNhc3RBZGRyZXNzZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNdWx0aWNhc3RBZGRyZXNzZXMoKTsKK30KKworb3RFcnJvciBvdElwNlN1YnNjcmliZU11bHRpY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5TdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSk7Cit9CisKK290RXJyb3Igb3RJcDZVbnN1YnNjcmliZU11bHRpY2FzdEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdElwNkFkZHJlc3MgKmFBZGRyZXNzKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5VbnN1YnNjcmliZUV4dGVybmFsTXVsdGljYXN0KCpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkFkZHJlc3MgKj4oYUFkZHJlc3MpKTsKK30KKworYm9vbCBvdElwNklzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuSXNNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQoKTsKK30KKwordm9pZCBvdElwNlNldE11bHRpY2FzdFByb21pc2N1b3VzRW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuU2V0TXVsdGljYXN0UHJvbWlzY3VvdXMoYUVuYWJsZWQpOworfQorCit2b2lkIG90SXA2U2xhYWNVcGRhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICBvdElwNlNsYWFjSWlkQ3JlYXRlIGFJaWRDcmVhdGUsIHZvaWQgKmFDb250ZXh0KQoreworICAgIFV0aWxzOjpTbGFhYzo6VXBkYXRlQWRkcmVzc2VzKGFJbnN0YW5jZSwgYUFkZHJlc3NlcywgYU51bUFkZHJlc3NlcywgYUlpZENyZWF0ZSwgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90SXA2Q3JlYXRlUmFuZG9tSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gVXRpbHM6OlNsYWFjOjpDcmVhdGVSYW5kb21JaWQoYUluc3RhbmNlLCBhQWRkcmVzcywgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90SXA2Q3JlYXRlTWFjSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICopCit7CisgICAgbWVtY3B5KCZhQWRkcmVzcy0+bUFkZHJlc3MubUZpZWxkcy5tOFtPVF9JUDZfQUREUkVTU19TSVpFIC0gT1RfSVA2X0lJRF9TSVpFXSwKKyAgICAgICAgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLCBPVF9JUDZfSUlEX1NJWkUpOworICAgIGFBZGRyZXNzLT5tQWRkcmVzcy5tRmllbGRzLm04W09UX0lQNl9BRERSRVNTX1NJWkUgLSBPVF9JUDZfSUlEX1NJWkVdIF49IDB4MDI7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBvdElwNkNyZWF0ZVNlbWFudGljYWxseU9wYXF1ZUlpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFV0aWxzOjpTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3IgKj4oYUNvbnRleHQpLT5DcmVhdGVJaWQoYUluc3RhbmNlLCBhQWRkcmVzcyk7Cit9CisKK3ZvaWQgb3RJcDZTZXRSZWNlaXZlQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdElwNlJlY2VpdmVDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgYUluc3RhbmNlLT5tSXA2LlNldFJlY2VpdmVEYXRhZ3JhbUNhbGxiYWNrKGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7Cit9CisKK2Jvb2wgb3RJcDZJc1JlY2VpdmVGaWx0ZXJFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tSXA2LklzUmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQoKTsKK30KKwordm9pZCBvdElwNlNldFJlY2VpdmVGaWx0ZXJFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1JcDYuU2V0UmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQoYUVuYWJsZWQpOworfQorCitvdEVycm9yIG90SXA2U2VuZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bUlwNi5TZW5kUmF3KCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290TWVzc2FnZSAqb3RJcDZOZXdNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhTGlua1NlY3VyaXR5RW5hYmxlZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gYUluc3RhbmNlLT5tSXA2Lm1NZXNzYWdlUG9vbC5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApOworCisgICAgaWYgKG1lc3NhZ2UpCisgICAgeworICAgICAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGFMaW5rU2VjdXJpdHlFbmFibGVkKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBvdElwNkFkZFVuc2VjdXJlUG9ydChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFQb3J0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRJcDZGaWx0ZXIoKS5BZGRVbnNlY3VyZVBvcnQoYVBvcnQpOworfQorCitvdEVycm9yIG90SXA2UmVtb3ZlVW5zZWN1cmVQb3J0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBvcnQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldElwNkZpbHRlcigpLlJlbW92ZVVuc2VjdXJlUG9ydChhUG9ydCk7Cit9CisKK2NvbnN0IHVpbnQxNl90ICpvdElwNkdldFVuc2VjdXJlUG9ydHMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphTnVtRW50cmllcykKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SXA2RmlsdGVyKCkuR2V0VW5zZWN1cmVQb3J0cygqYU51bUVudHJpZXMpOworfQorCitib29sIG90SXA2SXNBZGRyZXNzRXF1YWwoY29uc3Qgb3RJcDZBZGRyZXNzICphLCBjb25zdCBvdElwNkFkZHJlc3MgKmIpCit7CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkFkZHJlc3MgKj4oYSkgPT0gKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihiKTsKK30KKworb3RFcnJvciBvdElwNkFkZHJlc3NGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgb3RJcDZBZGRyZXNzICphZGRyZXNzKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJcDY6OkFkZHJlc3MgKj4oYWRkcmVzcyktPkZyb21TdHJpbmcoc3RyKTsKK30KKwordWludDhfdCBvdElwNlByZWZpeE1hdGNoKGNvbnN0IG90SXA2QWRkcmVzcyAqYUZpcnN0LCBjb25zdCBvdElwNkFkZHJlc3MgKmFTZWNvbmQpCit7CisgICAgdWludDhfdCBydmFsOworCisgICAgVmVyaWZ5T3JFeGl0KGFGaXJzdCAhPSBOVUxMICYmIGFTZWNvbmQgIT0gTlVMTCwgcnZhbCA9IDApOworCisgICAgcnZhbCA9IHN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPihhRmlyc3QpLT5QcmVmaXhNYXRjaCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFTZWNvbmQpKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS9qYW1fZGV0ZWN0aW9uX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvamFtX2RldGVjdGlvbl9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvamFtX2RldGVjdGlvbl9hcGkuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgSmFtIERldGVjdGlvbiBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2phbV9kZXRlY3Rpb24uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUnNzaVRocmVzaG9sZCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5TZXRSc3NpVGhyZXNob2xkKGFSc3NpVGhyZXNob2xkKTsKK30KKworaW50OF90IG90SmFtRGV0ZWN0aW9uR2V0UnNzaVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEphbURldGVjdG9yKCkuR2V0UnNzaVRocmVzaG9sZCgpOworfQorCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU2V0V2luZG93KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhV2luZG93KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLlNldFdpbmRvdyhhV2luZG93KTsKK30KKwordWludDhfdCBvdEphbURldGVjdGlvbkdldFdpbmRvdyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEphbURldGVjdG9yKCkuR2V0V2luZG93KCk7Cit9CisKK290RXJyb3Igb3RKYW1EZXRlY3Rpb25TZXRCdXN5UGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhQnVzeVBlcmlvZCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5TZXRCdXN5UGVyaW9kKGFCdXN5UGVyaW9kKTsKK30KKwordWludDhfdCBvdEphbURldGVjdGlvbkdldEJ1c3lQZXJpb2Qob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLkdldEJ1c3lQZXJpb2QoKTsKK30KKworb3RFcnJvciBvdEphbURldGVjdGlvblN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RKYW1EZXRlY3Rpb25DYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLlN0YXJ0KGFDYWxsYmFjaywgYUNvbnRleHQpOworfQorCitvdEVycm9yIG90SmFtRGV0ZWN0aW9uU3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEphbURldGVjdG9yKCkuU3RvcCgpOworfQorCitib29sIG90SmFtRGV0ZWN0aW9uSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5Jc0VuYWJsZWQoKTsKK30KKworYm9vbCBvdEphbURldGVjdGlvbkdldFN0YXRlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SmFtRGV0ZWN0b3IoKS5HZXRTdGF0ZSgpOworfQorCit1aW50NjRfdCBvdEphbURldGVjdGlvbkdldEhpc3RvcnlCaXRtYXAob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKYW1EZXRlY3RvcigpLkdldEhpc3RvcnlCaXRtYXAoKTsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvam9pbmVyX2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvam9pbmVyX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhMjdmZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9qb2luZXJfYXBpLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIEpvaW5lciBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2pvaW5lci5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKworb3RFcnJvciBvdEpvaW5lclN0YXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgY2hhciAqYVBTS2QsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVZlbmRvck5hbWUsIGNvbnN0IGNoYXIgKmFWZW5kb3JNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVmVuZG9yU3dWZXJzaW9uLCBjb25zdCBjaGFyICphVmVuZG9yRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEpvaW5lcigpLlN0YXJ0KGFQU0tkLCBhUHJvdmlzaW9uaW5nVXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmVuZG9yTmFtZSwgYVZlbmRvck1vZGVsLCBhVmVuZG9yU3dWZXJzaW9uLCBhVmVuZG9yRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNhbGxiYWNrLCBhQ29udGV4dCk7Cit9CisKK290RXJyb3Igb3RKb2luZXJTdG9wKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Sm9pbmVyKCkuU3RvcCgpOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2xpbmtfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9saW5rX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlNWJiYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9saW5rX2FwaS5jcHAKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgTGluayBBUEkuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2xpbmsuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitzdGF0aWMgdm9pZCBIYW5kbGVBY3RpdmVTY2FuUmVzdWx0KHZvaWQgKmFDb250ZXh0LCBNYWM6OkZyYW1lICphRnJhbWUpOworc3RhdGljIHZvaWQgSGFuZGxlRW5lcmd5U2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KTsKKwordWludDhfdCBvdExpbmtHZXRDaGFubmVsKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0Q2hhbm5lbCgpOworfQorCitvdEVycm9yIG90TGlua1NldENoYW5uZWwob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFDaGFubmVsKQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKGFDaGFubmVsKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCB1aW50OF90ICpvdExpbmtHZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpKTsKK30KKworb3RFcnJvciBvdExpbmtTZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBvdEV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFFeHRBZGRyZXNzICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuU2V0RXh0QWRkcmVzcygqc3RhdGljX2Nhc3Q8Y29uc3QgTWFjOjpFeHRBZGRyZXNzICo+KGFFeHRBZGRyZXNzKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuVXBkYXRlTGlua0xvY2FsQWRkcmVzcygpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgb3RMaW5rR2V0RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RFeHRBZGRyZXNzICphRXVpNjQpCit7CisgICAgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQoYUluc3RhbmNlLCBhRXVpNjQtPm04KTsKK30KKwordm9pZCBvdExpbmtHZXRKb2luZXJJZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEhhc2hNYWNBZGRyZXNzKHN0YXRpY19jYXN0PE1hYzo6RXh0QWRkcmVzcyAqPihhSGFzaE1hY0FkZHJlc3MpKTsKK30KKworaW50OF90IG90TGlua0dldE1heFRyYW5zbWl0UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRNYXhUcmFuc21pdFBvd2VyKCk7Cit9CisKK3ZvaWQgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCBhUG93ZXIpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuU2V0TWF4VHJhbnNtaXRQb3dlcihhUG93ZXIpOworICAgIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIoYUluc3RhbmNlLCBhUG93ZXIpOworfQorCitvdFBhbklkIG90TGlua0dldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKTsKK30KKworb3RFcnJvciBvdExpbmtTZXRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UGFuSWQgYVBhbklkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuU2V0UGFuSWQoYVBhbklkKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50MzJfdCBvdExpbmtHZXRQb2xsUGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLkdldEtlZXBBbGl2ZVBvbGxQZXJpb2QoKTsKK30KKwordm9pZCBvdExpbmtTZXRQb2xsUGVyaW9kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVBvbGxQZXJpb2QpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNldEV4dGVybmFsUG9sbFBlcmlvZChhUG9sbFBlcmlvZCk7Cit9CisKK290RXJyb3Igb3RMaW5rU2VuZERhdGFSZXF1ZXN0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNlbmREYXRhUG9sbCgpOworfQorCitvdFNob3J0QWRkcmVzcyBvdExpbmtHZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKK30KKworb3RFcnJvciBvdExpbmtBZGRXaGl0ZWxpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRXaGl0ZWxpc3QoKS5BZGQoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWFjOjpFeHRBZGRyZXNzICo+KGFFeHRBZGRyKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rQWRkV2hpdGVsaXN0UnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCBpbnQ4X3QgYVJzc2kpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RNYWNXaGl0ZWxpc3RFbnRyeSAqZW50cnk7CisKKyAgICBlbnRyeSA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLkFkZCgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNYWM6OkV4dEFkZHJlc3MgKj4oYUV4dEFkZHIpKTsKKyAgICBWZXJpZnlPckV4aXQoZW50cnkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRXaGl0ZWxpc3QoKS5TZXRGaXhlZFJzc2koKmVudHJ5LCBhUnNzaSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90TGlua1JlbW92ZVdoaXRlbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLlJlbW92ZSgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNYWM6OkV4dEFkZHJlc3MgKj4oYUV4dEFkZHIpKTsKK30KKwordm9pZCBvdExpbmtDbGVhcldoaXRlbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0V2hpdGVsaXN0KCkuQ2xlYXIoKTsKK30KKworb3RFcnJvciBvdExpbmtHZXRXaGl0ZWxpc3RFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUluZGV4LCBvdE1hY1doaXRlbGlzdEVudHJ5ICphRW50cnkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLkdldEVudHJ5KGFJbmRleCwgKmFFbnRyeSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLlNldEVuYWJsZWQoYUVuYWJsZWQpOworfQorCitib29sIG90TGlua0lzV2hpdGVsaXN0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFdoaXRlbGlzdCgpLklzRW5hYmxlZCgpOworfQorCitvdEVycm9yIG90TGlua0FkZEJsYWNrbGlzdChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgaWYgKGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEJsYWNrbGlzdCgpLkFkZCgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNYWM6OkV4dEFkZHJlc3MgKj4oYUV4dEFkZHIpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdExpbmtSZW1vdmVCbGFja2xpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0QWRkcikKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5SZW1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWFjOjpFeHRBZGRyZXNzICo+KGFFeHRBZGRyKSk7Cit9CisKK3ZvaWQgb3RMaW5rQ2xlYXJCbGFja2xpc3Qob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEJsYWNrbGlzdCgpLkNsZWFyKCk7Cit9CisKK290RXJyb3Igb3RMaW5rR2V0QmxhY2tsaXN0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFJbmRleCwgb3RNYWNCbGFja2xpc3RFbnRyeSAqYUVudHJ5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFFbnRyeSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5HZXRFbnRyeShhSW5kZXgsICphRW50cnkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBvdExpbmtTZXRCbGFja2xpc3RFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5TZXRFbmFibGVkKGFFbmFibGVkKTsKK30KKworYm9vbCBvdExpbmtJc0JsYWNrbGlzdEVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXRCbGFja2xpc3QoKS5Jc0VuYWJsZWQoKTsKK30KKworb3RFcnJvciBvdExpbmtHZXRBc3NpZ25MaW5rUXVhbGl0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCB1aW50OF90ICphTGlua1F1YWxpdHkpCit7CisgICAgTWFjOjpFeHRBZGRyZXNzIGV4dEFkZHJlc3M7CisKKyAgICBtZW1zZXQoJmV4dEFkZHJlc3MsIDAsIHNpemVvZihleHRBZGRyZXNzKSk7CisgICAgbWVtY3B5KGV4dEFkZHJlc3MubTgsIGFFeHRBZGRyLCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRBc3NpZ25MaW5rUXVhbGl0eShleHRBZGRyZXNzLCAqYUxpbmtRdWFsaXR5KTsKK30KKwordm9pZCBvdExpbmtTZXRBc3NpZ25MaW5rUXVhbGl0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyLCB1aW50OF90IGFMaW5rUXVhbGl0eSkKK3sKKyAgICBNYWM6OkV4dEFkZHJlc3MgZXh0QWRkcmVzczsKKworICAgIG1lbXNldCgmZXh0QWRkcmVzcywgMCwgc2l6ZW9mKGV4dEFkZHJlc3MpKTsKKyAgICBtZW1jcHkoZXh0QWRkcmVzcy5tOCwgYUV4dEFkZHIsIE9UX0VYVF9BRERSRVNTX1NJWkUpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0QXNzaWduTGlua1F1YWxpdHkoZXh0QWRkcmVzcywgYUxpbmtRdWFsaXR5KTsKK30KKwordm9pZCBvdExpbmtTZXRQY2FwQ2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExpbmtQY2FwQ2FsbGJhY2sgYVBjYXBDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXRQY2FwQ2FsbGJhY2soYVBjYXBDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7Cit9CisKK2Jvb2wgb3RMaW5rSXNQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLklzUHJvbWlzY3VvdXMoKTsKK30KKworb3RFcnJvciBvdExpbmtTZXRQcm9taXNjdW91cyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVByb21pc2N1b3VzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gY2Fubm90IGVuYWJsZSBJRUVFIDgwMi4xNS40IHByb21pc2N1b3VzIG1vZGUgaWYgdGhlIFRocmVhZCBpbnRlcmZhY2UgaXMgZW5hYmxlZAorICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5Jc1VwKCkgPT0gZmFsc2UsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXRQcm9taXNjdW91cyhhUHJvbWlzY3VvdXMpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworY29uc3Qgb3RNYWNDb3VudGVycyAqb3RMaW5rR2V0Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiAmYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0Q291bnRlcnMoKTsKK30KKworb3RFcnJvciBvdExpbmtBY3RpdmVTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIGFJbnN0YW5jZS0+bUFjdGl2ZVNjYW5DYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICBhSW5zdGFuY2UtPm1BY3RpdmVTY2FuQ2FsbGJhY2tDb250ZXh0ID0gYUNhbGxiYWNrQ29udGV4dDsKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuQWN0aXZlU2NhbihhU2NhbkNoYW5uZWxzLCBhU2NhbkR1cmF0aW9uLCAmSGFuZGxlQWN0aXZlU2NhblJlc3VsdCwgYUluc3RhbmNlKTsKK30KKworYm9vbCBvdExpbmtJc0FjdGl2ZVNjYW5JblByb2dyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuSXNBY3RpdmVTY2FuSW5Qcm9ncmVzcygpOworfQorCit2b2lkIEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQodm9pZCAqYUNvbnRleHQsIE1hYzo6RnJhbWUgKmFGcmFtZSkKK3sKKyAgICBvdEluc3RhbmNlICphSW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxvdEluc3RhbmNlICo+KGFDb250ZXh0KTsKKyAgICBvdEFjdGl2ZVNjYW5SZXN1bHQgcmVzdWx0OworCisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZSAhPSBOVUxMLCBhSW5zdGFuY2UtPm1BY3RpdmVTY2FuQ2FsbGJhY2soTlVMTCwgYUluc3RhbmNlLT5tQWN0aXZlU2NhbkNhbGxiYWNrQ29udGV4dCkpOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkNvbnZlcnRCZWFjb25Ub0FjdGl2ZVNjYW5SZXN1bHQoYUZyYW1lLCByZXN1bHQpOworICAgIGFJbnN0YW5jZS0+bUFjdGl2ZVNjYW5DYWxsYmFjaygmcmVzdWx0LCBhSW5zdGFuY2UtPm1BY3RpdmVTY2FuQ2FsbGJhY2tDb250ZXh0KTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3Igb3RMaW5rRW5lcmd5U2NhbihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0IGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1FbmVyZ3lTY2FuQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgYUluc3RhbmNlLT5tRW5lcmd5U2NhbkNhbGxiYWNrQ29udGV4dCA9IGFDYWxsYmFja0NvbnRleHQ7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkVuZXJneVNjYW4oYVNjYW5DaGFubmVscywgYVNjYW5EdXJhdGlvbiwgJkhhbmRsZUVuZXJneVNjYW5SZXN1bHQsIGFJbnN0YW5jZSk7Cit9CisKK3ZvaWQgSGFuZGxlRW5lcmd5U2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZSA9IHN0YXRpY19jYXN0PG90SW5zdGFuY2UgKj4oYUNvbnRleHQpOworCisgICAgYUluc3RhbmNlLT5tRW5lcmd5U2NhbkNhbGxiYWNrKGFSZXN1bHQsIGFJbnN0YW5jZS0+bUVuZXJneVNjYW5DYWxsYmFja0NvbnRleHQpOworfQorCitib29sIG90TGlua0lzRW5lcmd5U2NhbkluUHJvZ3Jlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5Jc0VuZXJneVNjYW5JblByb2dyZXNzKCk7Cit9CisKK2Jvb2wgb3RMaW5rSXNJblRyYW5zbWl0U3RhdGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5Jc0luVHJhbnNtaXRTdGF0ZSgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2xpbmtfcmF3LmhwcCBiL3NyYy9jb3JlL2FwaS9saW5rX3Jhdy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlZDYxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9saW5rX3Jhdy5ocHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgUmF3IExpbmstTGF5ZXIgY2xhc3MuCisgKi8KKworI2lmbmRlZiBMSU5LX1JBV19IUFBfCisjZGVmaW5lIExJTktfUkFXX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbGlua19yYXcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUIHx8IE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUIHx8IE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorI2RlZmluZSBPUEVOVEhSRUFEX0xJTktSQVdfVElNRVJfUkVRVUlSRUQgMQorI2Vsc2UKKyNkZWZpbmUgT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVEIDAKKyNlbmRpZgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBMaW5rUmF3Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTGlua1JhdyhvdEluc3RhbmNlICZhSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSByYXcgbGluay1sYXllciBpcyBlbmFibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VuYWJsZWQoKSB7IHJldHVybiBtRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcy9kaXNhYmxlcyB0aGUgcmF3IGxpbmstbGF5ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtRW5hYmxlZCA9IGFFbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHJhdyBsaW5rLWxheWVyLgorICAgICAqCisgICAgICovCisgICAgb3RSYWRpb0NhcHMgR2V0Q2FwcygpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIGEgKHJlY3VycmluZykgUmVjZWl2ZSBvbiB0aGUgbGluay1sYXllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVjZWl2ZSh1aW50OF90IGFDaGFubmVsLCBvdExpbmtSYXdSZWNlaXZlRG9uZSBhQ2FsbGJhY2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyB0aGUgbVJlY2VpdmVEb25lQ2FsbGJhY2ssIGlmIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW52b2tlUmVjZWl2ZURvbmUob3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyBhIChzaW5nbGUpIFRyYW5zbWl0IG9uIHRoZSBsaW5rLWxheWVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBUcmFuc21pdChvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RMaW5rUmF3VHJhbnNtaXREb25lIGFDYWxsYmFjayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIHRoZSBtVHJhbnNtaXREb25lQ2FsbGJhY2ssIGlmIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW52b2tlVHJhbnNtaXREb25lKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsIG90RXJyb3IgYUVycm9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyBhIChzaW5nbGUpIEVuZXJ5IFNjYW4gb24gdGhlIGxpbmstbGF5ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVuZXJneVNjYW4odWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIG90TGlua1Jhd0VuZXJneVNjYW5Eb25lIGFDYWxsYmFjayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIHRoZSBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjaywgaWYgc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbnZva2VFbmVyZ3lTY2FuRG9uZShpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKTsKKworcHJpdmF0ZToKKyAgICBvdEVycm9yIERvVHJhbnNtaXQob3RSYWRpb0ZyYW1lICphRnJhbWUpOworICAgIHN0YXRpYyBMaW5rUmF3ICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBvdEluc3RhbmNlICAgICAgICAgICAgICZtSW5zdGFuY2U7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgbUVuYWJsZWQ7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbVJlY2VpdmVDaGFubmVsOworICAgIG90TGlua1Jhd1JlY2VpdmVEb25lICAgIG1SZWNlaXZlRG9uZUNhbGxiYWNrOworICAgIG90TGlua1Jhd1RyYW5zbWl0RG9uZSAgIG1UcmFuc21pdERvbmVDYWxsYmFjazsKKyAgICBvdExpbmtSYXdFbmVyZ3lTY2FuRG9uZSBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjazsKKworI2lmIE9QRU5USFJFQURfTElOS1JBV19USU1FUl9SRVFVSVJFRAorCisgICAgZW51bSBUaW1lclJlYXNvbgorICAgIHsKKyAgICAgICAga1RpbWVyUmVhc29uTm9uZSwKKyAgICAgICAga1RpbWVyUmVhc29uQWNrVGltZW91dCwKKyAgICAgICAga1RpbWVyUmVhc29uUmV0cmFuc21pdFRpbWVvdXQsCisgICAgICAgIGtUaW1lclJlYXNvbkVuZXJneVNjYW5Db21wbGV0ZSwKKyAgICB9OworCisgICAgVGltZXIgICAgICAgICAgICAgICAgICAgbVRpbWVyOworICAgIFRpbWVyUmVhc29uICAgICAgICAgICAgIG1UaW1lclJlYXNvbjsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbVRyYW5zbWl0QXR0ZW1wdHM7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgbUNzbWFBdHRlbXB0czsKKworICAgIHZvaWQgU3RhcnRDc21hQmFja29mZih2b2lkKTsKKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtJbnZhbGlkUnNzaVZhbHVlID0gMTI3CisgICAgfTsKKworICAgIFRhc2tsZXQgICAgICAgICAgICAgICAgIG1FbmVyZ3lTY2FuVGFzazsKKyAgICBpbnQ4X3QgICAgICAgICAgICAgICAgICBtRW5lcmd5U2NhblJzc2k7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVFbmVyZ3lTY2FuVGFzayhUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBIYW5kbGVFbmVyZ3lTY2FuVGFzayh2b2lkKTsKKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTElOS19SQVdfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL2xpbmtfcmF3X2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvbGlua19yYXdfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTlhZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL2xpbmtfcmF3X2FwaS5jcHAKQEAgLTAsMCArMSw2MjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgTGluayBSYXcgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VzZWMtYWxhcm0uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIG90TGlua1Jhd1NldEVuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoIWFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLklzVXAoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90TG9nSW5mb1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBFbmFibGVkPSVkIiwgYUVuYWJsZWQgPyAxIDogMCk7CisKKyAgICBhSW5zdGFuY2UtPm1MaW5rUmF3LlNldEVuYWJsZWQoYUVuYWJsZWQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBvdExpbmtSYXdJc0VuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpOworfQorCitvdEVycm9yIG90TGlua1Jhd1NldFBhbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVBhbklkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb1NldFBhbklkKGFJbnN0YW5jZSwgYVBhbklkKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U2V0RXh0ZW5kZWRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0ZW5kZWRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgYnVmW3NpemVvZihvdEV4dEFkZHJlc3MpXTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmW2ldID0gYUV4dGVuZGVkQWRkcmVzcy0+bThbNyAtIGldOworICAgIH0KKworICAgIG90UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKGFJbnN0YW5jZSwgYnVmKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U2V0U2hvcnRBZGRyZXNzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYVNob3J0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3MoYUluc3RhbmNlLCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgb3RMaW5rUmF3R2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKGFJbnN0YW5jZSk7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90TG9nSW5mb1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBQcm9taXNjdW91cz0lZCIsIGFFbmFibGUgPyAxIDogMCk7CisKKyAgICBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKGFJbnN0YW5jZSwgYUVuYWJsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TGlua1Jhd1NsZWVwKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1MaW5rUmF3LklzRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgb3RMb2dJbmZvUGxhdChhSW5zdGFuY2UsICJMaW5rUmF3IFNsZWVwIik7CisKKyAgICBlcnJvciA9IG90UGxhdFJhZGlvU2xlZXAoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3UmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwsIG90TGlua1Jhd1JlY2VpdmVEb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdExvZ0luZm9QbGF0KGFJbnN0YW5jZSwgIkxpbmtSYXcgUmVjdiAoQ2hhbm5lbCAlZCkiLCBhQ2hhbm5lbCk7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bUxpbmtSYXcuUmVjZWl2ZShhQ2hhbm5lbCwgYUNhbGxiYWNrKTsKK30KKworb3RSYWRpb0ZyYW1lICpvdExpbmtSYXdHZXRUcmFuc21pdEJ1ZmZlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RSYWRpb0ZyYW1lICpidWZmZXIgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpOworCisgICAgYnVmZmVyID0gb3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihhSW5zdGFuY2UpOworCitleGl0OgorICAgIHJldHVybiBidWZmZXI7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3VHJhbnNtaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RMaW5rUmF3VHJhbnNtaXREb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdExvZ0luZm9QbGF0KGFJbnN0YW5jZSwgIkxpbmtSYXcgVHJhbnNtaXQgKCVkIGJ5dGVzIG9uIGNoYW5uZWwgJWQpIiwgYUZyYW1lLT5tTGVuZ3RoLCBhRnJhbWUtPm1DaGFubmVsKTsKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tTGlua1Jhdy5UcmFuc21pdChhRnJhbWUsIGFDYWxsYmFjayk7Cit9CisKK2ludDhfdCBvdExpbmtSYXdHZXRSc3NpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gb3RQbGF0UmFkaW9HZXRSc3NpKGFJbnN0YW5jZSk7Cit9CisKK290UmFkaW9DYXBzIG90TGlua1Jhd0dldENhcHMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1MaW5rUmF3LkdldENhcHMoKTsKK30KKworb3RFcnJvciBvdExpbmtSYXdFbmVyZ3lTY2FuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RMaW5rUmF3RW5lcmd5U2NhbkRvbmUgYUNhbGxiYWNrKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1MaW5rUmF3LkVuZXJneVNjYW4oYVNjYW5DaGFubmVsLCBhU2NhbkR1cmF0aW9uLCBhQ2FsbGJhY2spOworfQorCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoRW5hYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhRW5hYmxlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKGFJbnN0YW5jZSwgYUVuYWJsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoQWRkU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gb3RQbGF0UmFkaW9BZGRTcmNNYXRjaFNob3J0RW50cnkoYUluc3RhbmNlLCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hBZGRFeHRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFFeHRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShhSW5zdGFuY2UsIGFFeHRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkoYUluc3RhbmNlLCBhU2hvcnRBZGRyZXNzKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhckV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoRXh0RW50cnkoYUluc3RhbmNlLCBhRXh0QWRkcmVzcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TGlua1Jhd1NyY01hdGNoQ2xlYXJTaG9ydEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hTaG9ydEVudHJpZXMoYUluc3RhbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RMaW5rUmF3U3JjTWF0Y2hDbGVhckV4dEVudHJpZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKGFJbnN0YW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCituYW1lc3BhY2Ugb3QgeworCitMaW5rUmF3OjpMaW5rUmF3KG90SW5zdGFuY2UgJmFJbnN0YW5jZSk6CisgICAgbUluc3RhbmNlKGFJbnN0YW5jZSksCisgICAgbUVuYWJsZWQoZmFsc2UpLAorICAgIG1SZWNlaXZlQ2hhbm5lbChPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NIQU5ORUwpLAorICAgIG1SZWNlaXZlRG9uZUNhbGxiYWNrKE5VTEwpLAorICAgIG1UcmFuc21pdERvbmVDYWxsYmFjayhOVUxMKSwKKyAgICBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjayhOVUxMKQorI2lmIE9QRU5USFJFQURfTElOS1JBV19USU1FUl9SRVFVSVJFRAorICAgICwgbVRpbWVyKGFJbnN0YW5jZS5tSXA2Lm1UaW1lclNjaGVkdWxlciwgJkxpbmtSYXc6OkhhbmRsZVRpbWVyLCB0aGlzKQorICAgICwgbVRpbWVyUmVhc29uKGtUaW1lclJlYXNvbk5vbmUpCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICAgLCBtRW5lcmd5U2NhblRhc2soYUluc3RhbmNlLm1JcDYubVRhc2tsZXRTY2hlZHVsZXIsICZMaW5rUmF3OjpIYW5kbGVFbmVyZ3lTY2FuVGFzaywgdGhpcykKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KK3sKKyAgICAvLyBRdWVyeSB0aGUgY2FwYWJpbGl0aWVzIHRvIGNoZWNrIGFzc2VydHMKKyAgICAodm9pZClHZXRDYXBzKCk7Cit9CisKK290UmFkaW9DYXBzIExpbmtSYXc6OkdldENhcHMoKQoreworICAgIG90UmFkaW9DYXBzIFJhZGlvQ2FwcyA9IG90UGxhdFJhZGlvR2V0Q2FwcygmbUluc3RhbmNlKTsKKworICAgIC8vIFRoZSByYWRpbyBzaG91bGRuJ3Qgc3VwcG9ydCBhIGNhcGFiaWxpdHkgaWYgaXQgaXMgYmVpbmcgY29tcGlsZQorICAgIC8vIHRpbWUgaW5jbHVkZWQgaW50byB0aGUgcmF3IGxpbmstbGF5ZXIgY29kZS4KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorICAgIGFzc2VydCgoUmFkaW9DYXBzICYgT1RfUkFESU9fQ0FQU19BQ0tfVElNRU9VVCkgPT0gMCk7CisgICAgUmFkaW9DYXBzID0gKG90UmFkaW9DYXBzKShSYWRpb0NhcHMgfCBPVF9SQURJT19DQVBTX0FDS19USU1FT1VUKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisgICAgYXNzZXJ0KChSYWRpb0NhcHMgJiBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVMpID09IDApOworICAgIFJhZGlvQ2FwcyA9IChvdFJhZGlvQ2FwcykoUmFkaW9DYXBzIHwgT1RfUkFESU9fQ0FQU19UUkFOU01JVF9SRVRSSUVTKTsKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICAgYXNzZXJ0KChSYWRpb0NhcHMgJiBPVF9SQURJT19DQVBTX0VORVJHWV9TQ0FOKSA9PSAwKTsKKyAgICBSYWRpb0NhcHMgPSAob3RSYWRpb0NhcHMpKFJhZGlvQ2FwcyB8IE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU4pOworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorCisgICAgcmV0dXJuIFJhZGlvQ2FwczsKK30KKworb3RFcnJvciBMaW5rUmF3OjpSZWNlaXZlKHVpbnQ4X3QgYUNoYW5uZWwsIG90TGlua1Jhd1JlY2VpdmVEb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKworICAgIGlmIChtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1SZWNlaXZlQ2hhbm5lbCA9IGFDaGFubmVsOworICAgICAgICBtUmVjZWl2ZURvbmVDYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRSYWRpb1JlY2VpdmUoJm1JbnN0YW5jZSwgYUNoYW5uZWwpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBMaW5rUmF3OjpJbnZva2VSZWNlaXZlRG9uZShvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgaWYgKG1SZWNlaXZlRG9uZUNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0luZm9QbGF0KCZtSW5zdGFuY2UsICJMaW5rUmF3IEludm9rZSBSZWNlaXZlIERvbmUgKCVkIGJ5dGVzKSIsIGFGcmFtZS0+bUxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ1dhcm5QbGF0KCZtSW5zdGFuY2UsICJMaW5rUmF3IEludm9rZSBSZWNlaXZlIERvbmUgKGVycj0weCV4KSIsIGFFcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBtUmVjZWl2ZURvbmVDYWxsYmFjaygmbUluc3RhbmNlLCBhRnJhbWUsIGFFcnJvcik7CisgICAgfQorfQorCitvdEVycm9yIExpbmtSYXc6OlRyYW5zbWl0KG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdExpbmtSYXdUcmFuc21pdERvbmUgYUNhbGxiYWNrKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworCisgICAgaWYgKG1FbmFibGVkKQorICAgIHsKKyAgICAgICAgbVRyYW5zbWl0RG9uZUNhbGxiYWNrID0gYUNhbGxiYWNrOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFGcmFtZSk7CisgICAgICAgIG1UcmFuc21pdEF0dGVtcHRzID0gMDsKKyAgICAgICAgbUNzbWFBdHRlbXB0cyA9IDA7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5zbWlzc2lvbiBiYWNrbG9nIGxvZ2ljCisgICAgICAgIFN0YXJ0Q3NtYUJhY2tvZmYoKTsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworI2Vsc2UKKyAgICAgICAgLy8gTGV0IHRoZSBoYXJkd2FyZSBkbyB0aGUgdHJhbnNtaXNzaW9uIGxvZ2ljCisgICAgICAgIGVycm9yID0gRG9UcmFuc21pdChhRnJhbWUpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExpbmtSYXc6OkRvVHJhbnNtaXQob3RSYWRpb0ZyYW1lICphRnJhbWUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IG90UGxhdFJhZGlvVHJhbnNtaXQoJm1JbnN0YW5jZSwgYUZyYW1lKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorCisgICAgLy8gSWYgd2UgYXJlIGltcGxlbWVudGluZyB0aGUgQUNLIHRpbWVvdXQgbG9naWMsIHN0YXJ0IGEgdGltZXIgaGVyZSAoaWYgQUNLIHJlcXVlc3QpCisgICAgLy8gdG8gZmlyZSBpZiB3ZSBkb24ndCBnZXQgYSB0cmFuc21pdCBkb25lIGNhbGxiYWNrIGluIHRpbWUuCisgICAgaWYgKHN0YXRpY19jYXN0PE1hYzo6RnJhbWUgKj4oYUZyYW1lKS0+R2V0QWNrUmVxdWVzdCgpKQorICAgIHsKKyAgICAgICAgb3RMb2dEZWJnUGxhdChhSW5zdGFuY2UsICJMaW5rUmF3IFN0YXJ0aW5nIEFja1RpbWVvdXQgVGltZXIiKTsKKyAgICAgICAgbVRpbWVyUmVhc29uID0ga1RpbWVyUmVhc29uQWNrVGltZW91dDsKKyAgICAgICAgbVRpbWVyLlN0YXJ0KE1hYzo6a0Fja1RpbWVvdXQpOworICAgIH0KKworI2VuZGlmCisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SW52b2tlVHJhbnNtaXREb25lKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFGcmFtZVBlbmRpbmcsIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRGViZ1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBUcmFuc21pdCBEb25lIChlcnI9MHgleCkiLCBhRXJyb3IpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisgICAgbVRpbWVyLlN0b3AoKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSkKKyAgICB7CisgICAgICAgIGlmIChtQ3NtYUF0dGVtcHRzIDwgTWFjOjprTWF4Q1NNQUJhY2tvZmZzKQorICAgICAgICB7CisgICAgICAgICAgICBtQ3NtYUF0dGVtcHRzKys7CisgICAgICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUNzbWFBdHRlbXB0cyA9IDA7CisgICAgfQorCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT19BQ0spCisgICAgeworICAgICAgICBpZiAobVRyYW5zbWl0QXR0ZW1wdHMgPCBhRnJhbWUtPm1NYXhUeEF0dGVtcHRzKQorICAgICAgICB7CisgICAgICAgICAgICBtVHJhbnNtaXRBdHRlbXB0cysrOworICAgICAgICAgICAgU3RhcnRDc21hQmFja29mZigpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKworICAgIC8vIFRyYW5zaXRpb24gYmFjayB0byByZWNlaXZlIHN0YXRlIG9uIHByZXZpb3VzIGNoYW5uZWwKKyAgICBvdFBsYXRSYWRpb1JlY2VpdmUoJm1JbnN0YW5jZSwgbVJlY2VpdmVDaGFubmVsKTsKKworICAgIGlmIChtVHJhbnNtaXREb25lQ2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nSW5mb1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBJbnZva2UgVHJhbnNtaXQgRG9uZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3RMb2dXYXJuUGxhdChhSW5zdGFuY2UsICJMaW5rUmF3IEludm9rZSBUcmFuc21pdCBGYWlsZWQgKGVycj0weCV4KSIsIGFFcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBtVHJhbnNtaXREb25lQ2FsbGJhY2soJm1JbnN0YW5jZSwgYUZyYW1lLCBhRnJhbWVQZW5kaW5nLCBhRXJyb3IpOworICAgICAgICBtVHJhbnNtaXREb25lQ2FsbGJhY2sgPSBOVUxMOworICAgIH0KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCitleGl0OgorICAgIHJldHVybjsKKyNlbmRpZgorfQorCitvdEVycm9yIExpbmtSYXc6OkVuZXJneVNjYW4odWludDhfdCBhU2NhbkNoYW5uZWwsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIG90TGlua1Jhd0VuZXJneVNjYW5Eb25lIGFDYWxsYmFjaykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURTsKKworICAgIGlmIChtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1FbmVyZ3lTY2FuRG9uZUNhbGxiYWNrID0gYUNhbGxiYWNrOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgICAgICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBvbiB0aGUgc2NhbiBjaGFubmVsCisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZSgmbUluc3RhbmNlLCBhU2NhbkNoYW5uZWwpOworCisgICAgICAgIC8vIFJlc2V0IHRoZSBSU1NJIHZhbHVlIGFuZCBzdGFydCBzY2FubmluZworICAgICAgICBtRW5lcmd5U2NhblJzc2kgPSBrSW52YWxpZFJzc2lWYWx1ZTsKKyAgICAgICAgbVRpbWVyUmVhc29uID0ga1RpbWVyUmVhc29uRW5lcmd5U2NhbkNvbXBsZXRlOworICAgICAgICBtVGltZXIuU3RhcnQoYVNjYW5EdXJhdGlvbik7CisgICAgICAgIG1FbmVyZ3lTY2FuVGFzay5Qb3N0KCk7CisjZWxzZQorICAgICAgICAvLyBEbyB0aGUgSFcgb2ZmbG9hZGVkIGVuZXJneSBzY2FuCisgICAgICAgIGVycm9yID0gb3RQbGF0UmFkaW9FbmVyZ3lTY2FuKCZtSW5zdGFuY2UsIGFTY2FuQ2hhbm5lbCwgYVNjYW5EdXJhdGlvbik7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SW52b2tlRW5lcmd5U2NhbkRvbmUoaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSkKK3sKKyAgICBpZiAobUVuZXJneVNjYW5Eb25lQ2FsbGJhY2spCisgICAgeworICAgICAgICBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjaygmbUluc3RhbmNlLCBhRW5lcmd5U2Nhbk1heFJzc2kpOworICAgICAgICBtRW5lcmd5U2NhbkRvbmVDYWxsYmFjayA9IE5VTEw7CisgICAgfQorfQorCisjaWYgT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisKK3ZvaWQgTGlua1Jhdzo6SGFuZGxlVGltZXIodm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TGlua1JhdyAqPihhQ29udGV4dCktPkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGlua1Jhdzo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBUaW1lclJlYXNvbiB0aW1lclJlYXNvbiA9IG1UaW1lclJlYXNvbjsKKyAgICBtVGltZXJSZWFzb24gPSBrVGltZXJSZWFzb25Ob25lOworCisgICAgc3dpdGNoICh0aW1lclJlYXNvbikKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0FDS19USU1FT1VUCisKKyAgICBjYXNlIGtUaW1lclJlYXNvbkFja1RpbWVvdXQ6CisgICAgeworICAgICAgICAvLyBUcmFuc2l0aW9uIGJhY2sgdG8gcmVjZWl2ZSBzdGF0ZSBvbiBwcmV2aW91cyBjaGFubmVsCisgICAgICAgIG90UGxhdFJhZGlvUmVjZWl2ZSgmbUluc3RhbmNlLCBtUmVjZWl2ZUNoYW5uZWwpOworCisgICAgICAgIC8vIEludm9rZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciB0cmFuc21pdAorICAgICAgICBJbnZva2VUcmFuc21pdERvbmUob3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcigmbUluc3RhbmNlKSwgZmFsc2UsIE9UX0VSUk9SX05PX0FDSyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKworICAgIGNhc2Uga1RpbWVyUmVhc29uUmV0cmFuc21pdFRpbWVvdXQ6CisgICAgeworICAgICAgICBvdFJhZGlvRnJhbWUgKmFGcmFtZSA9IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoJm1JbnN0YW5jZSk7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlICB0cmFuc21pdCBub3cKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IERvVHJhbnNtaXQoYUZyYW1lKTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgSW52b2tlVHJhbnNtaXREb25lKGFGcmFtZSwgZmFsc2UsIGVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9SRVRSQU5TTUlUCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKworICAgIGNhc2Uga1RpbWVyUmVhc29uRW5lcmd5U2NhbkNvbXBsZXRlOgorICAgIHsKKyAgICAgICAgLy8gSW52b2tlIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIHRoZSBlbmVyZ3kgc2NhbgorICAgICAgICBJbnZva2VFbmVyZ3lTY2FuRG9uZShtRW5lcmd5U2NhblJzc2kpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9MSU5LUkFXX1RJTUVSX1JFUVVJUkVECisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorCit2b2lkIExpbmtSYXc6OlN0YXJ0Q3NtYUJhY2tvZmYodm9pZCkKK3sKKyAgICB1aW50MzJfdCBiYWNrb2ZmRXhwb25lbnQgPSBNYWM6OmtNaW5CRSArIG1UcmFuc21pdEF0dGVtcHRzICsgbUNzbWFBdHRlbXB0czsKKyAgICB1aW50MzJfdCBiYWNrb2ZmOworCisgICAgaWYgKGJhY2tvZmZFeHBvbmVudCA+IE1hYzo6a01heEJFKQorICAgIHsKKyAgICAgICAgYmFja29mZkV4cG9uZW50ID0gTWFjOjprTWF4QkU7CisgICAgfQorCisgICAgYmFja29mZiA9IChvdFBsYXRSYW5kb21HZXQoKSAlICgxVUwgPDwgYmFja29mZkV4cG9uZW50KSk7CisgICAgYmFja29mZiAqPSAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE1hYzo6a1VuaXRCYWNrb2ZmUGVyaW9kKSAqIE9UX1JBRElPX1NZTUJPTF9USU1FKTsKKworICAgIG90TG9nRGViZ1BsYXQoYUluc3RhbmNlLCAiTGlua1JhdyBTdGFydGluZyBSZXRyYW5zbWl0VGltZW91dCBUaW1lciAoJWQgbXMpIiwgYmFja29mZik7CisgICAgbVRpbWVyUmVhc29uID0ga1RpbWVyUmVhc29uUmV0cmFuc21pdFRpbWVvdXQ7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSCisgICAgb3RQbGF0VXNlY0FsYXJtU3RhcnRBdCgmbUluc3RhbmNlLCBvdFBsYXRVc2VjQWxhcm1HZXROb3coKSwgYmFja29mZiwgJkhhbmRsZVRpbWVyLCB0aGlzKTsKKyNlbHNlIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9QTEFURk9STV9VU0VDX0JBQ0tPRkZfVElNRVIKKyAgICBtVGltZXIuU3RhcnQoYmFja29mZiAvIDEwMDBVTCk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorCit2b2lkIExpbmtSYXc6OkhhbmRsZUVuZXJneVNjYW5UYXNrKFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIEdldE93bmVyKGFUYXNrbGV0KS5IYW5kbGVFbmVyZ3lTY2FuVGFzaygpOworfQorCit2b2lkIExpbmtSYXc6OkhhbmRsZUVuZXJneVNjYW5UYXNrKHZvaWQpCit7CisgICAgLy8gT25seSBwcm9jZXNzIHRhc2sgaWYgd2UgYXJlIHN0aWxsIGVuZXJneSBzY2FubmluZworICAgIGlmIChtVGltZXJSZWFzb24gPT0ga1RpbWVyUmVhc29uRW5lcmd5U2NhbkNvbXBsZXRlKQorICAgIHsKKyAgICAgICAgaW50OF90IHJzc2kgPSBvdFBsYXRSYWRpb0dldFJzc2koJm1JbnN0YW5jZSk7CisKKyAgICAgICAgLy8gT25seSBhcHBseSB0aGUgUlNTSSBpZiBpdCB3YXMgYSB2YWxpZCB2YWx1ZQorICAgICAgICBpZiAocnNzaSAhPSBrSW52YWxpZFJzc2lWYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChtRW5lcmd5U2NhblJzc2kgPT0ga0ludmFsaWRSc3NpVmFsdWUpIHx8IChyc3NpID4gbUVuZXJneVNjYW5Sc3NpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRW5lcmd5U2NhblJzc2kgPSByc3NpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUG9zdCBhbm90aGVyIGluc3RhbmNlIG9mIHRoYSB0YXNrLCBzaW5jZSB3ZSBhcmUKKyAgICAgICAgLy8gc3RpbGwgZG9pbmcgdGhlIGVuZXJneSBzY2FuLgorICAgICAgICBtRW5lcmd5U2NhblRhc2suUG9zdCgpOworICAgIH0KK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorCitMaW5rUmF3ICZMaW5rUmF3OjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBMaW5rUmF3ICZsaW5rID0gKnN0YXRpY19jYXN0PExpbmtSYXcgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTGlua1JhdyAmbGluayA9IG90R2V0SW5zdGFuY2UoKS0+bUxpbmtSYXc7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBsaW5rOworfQorCit9IC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvbWVzc2FnZV9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL21lc3NhZ2VfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAxNmYxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL21lc3NhZ2VfYXBpLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBNZXNzYWdlIEFQSS4KKyAqLworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL21lc3NhZ2UuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKwordXNpbmcgbmFtZXNwYWNlIG90OworCitvdEVycm9yIG90TWVzc2FnZUZyZWUob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSktPkZyZWUoKTsKK30KKwordWludDE2X3Qgb3RNZXNzYWdlR2V0TGVuZ3RoKG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpOworICAgIHJldHVybiBtZXNzYWdlLT5HZXRMZW5ndGgoKTsKK30KKworb3RFcnJvciBvdE1lc3NhZ2VTZXRMZW5ndGgob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPlNldExlbmd0aChhTGVuZ3RoKTsKK30KKwordWludDE2X3Qgb3RNZXNzYWdlR2V0T2Zmc2V0KG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpOworICAgIHJldHVybiBtZXNzYWdlLT5HZXRPZmZzZXQoKTsKK30KKworb3RFcnJvciBvdE1lc3NhZ2VTZXRPZmZzZXQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPlNldE9mZnNldChhT2Zmc2V0KTsKK30KKworYm9vbCBvdE1lc3NhZ2VJc0xpbmtTZWN1cml0eUVuYWJsZWQob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPklzTGlua1NlY3VyaXR5RW5hYmxlZCgpOworfQorCit2b2lkIG90TWVzc2FnZVNldERpcmVjdFRyYW5zbWlzc2lvbihvdE1lc3NhZ2UgKmFNZXNzYWdlLCBib29sIGFFbmFibGVkKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKTsKKworICAgIGlmIChhRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPlNldERpcmVjdFRyYW5zbWlzc2lvbigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZXNzYWdlLT5DbGVhckRpcmVjdFRyYW5zbWlzc2lvbigpOworICAgIH0KK30KKworb3RFcnJvciBvdE1lc3NhZ2VBcHBlbmQob3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPkFwcGVuZChhQnVmLCBhTGVuZ3RoKTsKK30KKworaW50IG90TWVzc2FnZVJlYWQob3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgcmV0dXJuIG1lc3NhZ2UtPlJlYWQoYU9mZnNldCwgYUxlbmd0aCwgYUJ1Zik7Cit9CisKK2ludCBvdE1lc3NhZ2VXcml0ZShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCBjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKTsKKyAgICByZXR1cm4gbWVzc2FnZS0+V3JpdGUoYU9mZnNldCwgYUxlbmd0aCwgYUJ1Zik7Cit9CisKK3ZvaWQgb3RNZXNzYWdlUXVldWVJbml0KG90TWVzc2FnZVF1ZXVlICphUXVldWUpCit7CisgICAgYVF1ZXVlLT5tRGF0YSA9IE5VTEw7Cit9CisKK290RXJyb3Igb3RNZXNzYWdlUXVldWVFbnF1ZXVlKG90TWVzc2FnZVF1ZXVlICphUXVldWUsIG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpOworICAgIE1lc3NhZ2VRdWV1ZSAqcXVldWUgPSBzdGF0aWNfY2FzdDxNZXNzYWdlUXVldWUgKj4oYVF1ZXVlKTsKKyAgICByZXR1cm4gcXVldWUtPkVucXVldWUoKm1lc3NhZ2UpOworfQorCitvdEVycm9yIG90TWVzc2FnZVF1ZXVlRGVxdWV1ZShvdE1lc3NhZ2VRdWV1ZSAqYVF1ZXVlLCBvdE1lc3NhZ2UgKmFNZXNzYWdlKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKTsKKyAgICBNZXNzYWdlUXVldWUgKnF1ZXVlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVF1ZXVlICo+KGFRdWV1ZSk7CisgICAgcmV0dXJuIHF1ZXVlLT5EZXF1ZXVlKCptZXNzYWdlKTsKK30KKworb3RNZXNzYWdlICpvdE1lc3NhZ2VRdWV1ZUdldEhlYWQob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSkKK3sKKyAgICBNZXNzYWdlUXVldWUgKnF1ZXVlID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVF1ZXVlICo+KGFRdWV1ZSk7CisgICAgcmV0dXJuIHF1ZXVlLT5HZXRIZWFkKCk7Cit9CisKK290TWVzc2FnZSAqb3RNZXNzYWdlUXVldWVHZXROZXh0KG90TWVzc2FnZVF1ZXVlICphUXVldWUsIGNvbnN0IG90TWVzc2FnZSAqYU1lc3NhZ2UpCit7CisgICAgTWVzc2FnZSAqbmV4dDsKKyAgICBjb25zdCBNZXNzYWdlICptZXNzYWdlID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWVzc2FnZSAqPihhTWVzc2FnZSk7CisgICAgTWVzc2FnZVF1ZXVlICpxdWV1ZSA9IHN0YXRpY19jYXN0PE1lc3NhZ2VRdWV1ZSAqPihhUXVldWUpOworCisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCwgbmV4dCA9IE5VTEwpOworICAgIFZlcmlmeU9yRXhpdChtZXNzYWdlLT5HZXRNZXNzYWdlUXVldWUoKSA9PSBxdWV1ZSwgbmV4dCA9IE5VTEwpOworICAgIG5leHQgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIG5leHQ7Cit9CisKK3ZvaWQgb3RNZXNzYWdlR2V0QnVmZmVySW5mbyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90QnVmZmVySW5mbyAqYUJ1ZmZlckluZm8pCit7CisgICAgYUJ1ZmZlckluZm8tPm1Ub3RhbEJ1ZmZlcnMgPSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTOworCisgICAgYUJ1ZmZlckluZm8tPm1GcmVlQnVmZmVycyA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldElwNigpLm1NZXNzYWdlUG9vbC5HZXRGcmVlQnVmZmVyQ291bnQoKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXRTZW5kUXVldWUoKS5HZXRJbmZvKGFCdWZmZXJJbmZvLT5tNmxvU2VuZE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFCdWZmZXJJbmZvLT5tNmxvU2VuZEJ1ZmZlcnMpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldFJlYXNzZW1ibHlRdWV1ZSgpLkdldEluZm8oYUJ1ZmZlckluZm8tPm02bG9SZWFzc2VtYmx5TWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZmZlckluZm8tPm02bG9SZWFzc2VtYmx5QnVmZmVycyk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0UmVzb2x2aW5nUXVldWUoKS5HZXRJbmZvKGFCdWZmZXJJbmZvLT5tQXJwTWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQnVmZmVySW5mby0+bUFycEJ1ZmZlcnMpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0SXA2KCkuR2V0U2VuZFF1ZXVlKCkuR2V0SW5mbyhhQnVmZmVySW5mby0+bUlwNk1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZmZlckluZm8tPm1JcDZCdWZmZXJzKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldElwNigpLm1NcGwuR2V0QnVmZmVyZWRNZXNzYWdlU2V0KCkuR2V0SW5mbyhhQnVmZmVySW5mby0+bU1wbE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQnVmZmVySW5mby0+bU1wbEJ1ZmZlcnMpOworCisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0TWVzc2FnZVF1ZXVlKCkuR2V0SW5mbyhhQnVmZmVySW5mby0+bU1sZU1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZmZlckluZm8tPm1NbGVCdWZmZXJzKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldENvYXAoKS5HZXRSZXF1ZXN0TWVzc2FnZXMoKS5HZXRJbmZvKGFCdWZmZXJJbmZvLT5tQ29hcE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFCdWZmZXJJbmZvLT5tQ29hcEJ1ZmZlcnMpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL25ldGRhdGFfYXBpLmNwcCBiL3NyYy9jb3JlL2FwaS9uZXRkYXRhX2FwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiMzcwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2FwaS9uZXRkYXRhX2FwaS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBOZXR3b3JrIERhdGEgQVBJLgorICovCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbmV0ZGF0YS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290RXJyb3Igb3ROZXREYXRhR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhU3RhYmxlLCB1aW50OF90ICphRGF0YSwgdWludDhfdCAqYURhdGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGEgIT0gTlVMTCAmJiBhRGF0YUxlbmd0aCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldE5ldHdvcmtEYXRhKGFTdGFibGUsIGFEYXRhLCAqYURhdGFMZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBvdE5ldERhdGFHZXROZXh0T25NZXNoUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUl0ZXJhdG9yICYmIGFDb25maWcsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXROZXh0T25NZXNoUHJlZml4KGFJdGVyYXRvciwgYUNvbmZpZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90TmV0RGF0YUdldE5leHRSb3V0ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnICphQ29uZmlnKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJdGVyYXRvciAmJiBhQ29uZmlnLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0TmV4dEV4dGVybmFsUm91dGUoYUl0ZXJhdG9yLCBhQ29uZmlnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQ4X3Qgb3ROZXREYXRhR2V0VmVyc2lvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGFUbHYoKS5HZXREYXRhVmVyc2lvbigpOworfQorCit1aW50OF90IG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24ob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJEYXRhVGx2KCkuR2V0U3RhYmxlRGF0YVZlcnNpb24oKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2FwaS90YXNrbGV0X2FwaS5jcHAgYi9zcmMvY29yZS9hcGkvdGFza2xldF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdGFza2xldF9hcGkuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgVGFza2xldCBBUEkuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAidGFza2xldF9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3Rhc2tsZXQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordm9pZCBvdFRhc2tsZXRzUHJvY2VzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBhSW5zdGFuY2UtPm1JcDYubVRhc2tsZXRTY2hlZHVsZXIuUHJvY2Vzc1F1ZXVlZFRhc2tsZXRzKCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCitib29sIG90VGFza2xldHNBcmVQZW5kaW5nKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tSXA2Lm1UYXNrbGV0U2NoZWR1bGVyLkFyZVRhc2tsZXRzUGVuZGluZygpOworfQorCisjaWZuZGVmIF9NU0NfVkVSCitPVF9UT09MX1dFQUsgdm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICopCit7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL3RocmVhZF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3RocmVhZF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OGNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdGhyZWFkX2FwaS5jcHAKQEAgLTAsMCArMSw0OTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgVGhyZWFkIEFQSSAoZm9yIGJvdGggRlREIGFuZCBNVEQpLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgInRocmVhZF9hcGkudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vc2V0dGluZ3MuaHBwIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK3VpbnQzMl90IG90VGhyZWFkR2V0Q2hpbGRUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0VGltZW91dCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0Q2hpbGRUaW1lb3V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0VGltZW91dChhVGltZW91dCk7Cit9CisKK2NvbnN0IHVpbnQ4X3QgKm90VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldEV4dGVuZGVkUGFuSWQoKTsKK30KKworb3RFcnJvciBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50OF90ICphRXh0ZW5kZWRQYW5JZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG1sUHJlZml4WzhdOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLlNldEV4dGVuZGVkUGFuSWQoYUV4dGVuZGVkUGFuSWQpOworCisgICAgbWxQcmVmaXhbMF0gPSAweGZkOworICAgIG1lbWNweShtbFByZWZpeCArIDEsIGFFeHRlbmRlZFBhbklkLCA1KTsKKyAgICBtbFByZWZpeFs2XSA9IDB4MDA7CisgICAgbWxQcmVmaXhbN10gPSAweDAwOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldE1lc2hMb2NhbFByZWZpeChtbFByZWZpeCk7CisKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0TGVhZGVyUmxvYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdChhQWRkcmVzcyAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckFkZHJlc3MoKnN0YXRpY19jYXN0PElwNjo6QWRkcmVzcyAqPihhQWRkcmVzcykpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RMaW5rTW9kZUNvbmZpZyBvdFRocmVhZEdldExpbmtNb2RlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdExpbmtNb2RlQ29uZmlnIGNvbmZpZzsKKyAgICB1aW50OF90IG1vZGUgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXREZXZpY2VNb2RlKCk7CisKKyAgICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKG90TGlua01vZGVDb25maWcpKTsKKworICAgIGlmIChtb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tUnhPbldoZW5JZGxlID0gMTsKKyAgICB9CisKKyAgICBpZiAobW9kZSAmIE1sZTo6TW9kZVRsdjo6a01vZGVTZWN1cmVEYXRhUmVxdWVzdCkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tU2VjdXJlRGF0YVJlcXVlc3RzID0gMTsKKyAgICB9CisKKyAgICBpZiAobW9kZSAmIE1sZTo6TW9kZVRsdjo6a01vZGVGRkQpCisgICAgeworICAgICAgICBjb25maWcubURldmljZVR5cGUgPSAxOworICAgIH0KKworICAgIGlmIChtb2RlICYgTWxlOjpNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkKKyAgICB7CisgICAgICAgIGNvbmZpZy5tTmV0d29ya0RhdGEgPSAxOworICAgIH0KKworICAgIHJldHVybiBjb25maWc7Cit9CisKK290RXJyb3Igb3RUaHJlYWRTZXRMaW5rTW9kZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TGlua01vZGVDb25maWcgYUNvbmZpZykKK3sKKyAgICB1aW50OF90IG1vZGUgPSAwOworCisgICAgaWYgKGFDb25maWcubVJ4T25XaGVuSWRsZSkKKyAgICB7CisgICAgICAgIG1vZGUgfD0gTWxlOjpNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZTsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tU2VjdXJlRGF0YVJlcXVlc3RzKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSBNbGU6Ok1vZGVUbHY6OmtNb2RlU2VjdXJlRGF0YVJlcXVlc3Q7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubURldmljZVR5cGUpCisgICAgeworICAgICAgICBtb2RlIHw9IE1sZTo6TW9kZVRsdjo6a01vZGVGRkQ7CisgICAgfQorCisgICAgaWYgKGFDb25maWcubU5ldHdvcmtEYXRhKQorICAgIHsKKyAgICAgICAgbW9kZSB8PSBNbGU6Ok1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhOworICAgIH0KKworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TZXREZXZpY2VNb2RlKG1vZGUpOworfQorCitjb25zdCBvdE1hc3RlcktleSAqb3RUaHJlYWRHZXRNYXN0ZXJLZXkob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiAmYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldE1hc3RlcktleSgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0TWFzdGVyS2V5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RNYXN0ZXJLZXkgKmFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUtleSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldE1hc3RlcktleSgqYUtleSk7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkNsZWFyKCk7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5DbGVhcigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworY29uc3Qgb3RJcDZBZGRyZXNzICpvdFRocmVhZEdldE1lc2hMb2NhbEVpZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuICZhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWw2NCgpOworfQorCitjb25zdCB1aW50OF90ICpvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbFByZWZpeCgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0TWVzaExvY2FsUHJlZml4KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldE1lc2hMb2NhbFByZWZpeChhTWVzaExvY2FsUHJlZml4KTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCBvdElwNkFkZHJlc3MgKm90VGhyZWFkR2V0TGlua0xvY2FsSXA2QWRkcmVzcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuICZhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRMaW5rTG9jYWxBZGRyZXNzKCk7Cit9CisKK2NvbnN0IGNoYXIgKm90VGhyZWFkR2V0TmV0d29ya05hbWUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5HZXROZXR3b3JrTmFtZSgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0TmV0d29ya05hbWUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCBjaGFyICphTmV0d29ya05hbWUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNYWMoKS5TZXROZXR3b3JrTmFtZShhTmV0d29ya05hbWUpOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5DbGVhcigpOworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuQ2xlYXIoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IG90VGhyZWFkR2V0S2V5U2VxdWVuY2VDb3VudGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpOworfQorCit2b2lkIG90VGhyZWFkU2V0S2V5U2VxdWVuY2VDb3VudGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYUtleVNlcXVlbmNlQ291bnRlcikKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0Q3VycmVudEtleVNlcXVlbmNlKGFLZXlTZXF1ZW5jZUNvdW50ZXIpOworfQorCit1aW50MzJfdCBvdFRocmVhZEdldEtleVN3aXRjaEd1YXJkVGltZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRLZXlTd2l0Y2hHdWFyZFRpbWUoKTsKK30KKwordm9pZCBvdFRocmVhZFNldEtleVN3aXRjaEd1YXJkVGltZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFLZXlTd2l0Y2hHdWFyZFRpbWUpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEtleVN3aXRjaEd1YXJkVGltZShhS2V5U3dpdGNoR3VhcmRUaW1lKTsKK30KKworb3RFcnJvciBvdFRocmVhZEJlY29tZURldGFjaGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lRGV0YWNoZWQoKTsKK30KKworb3RFcnJvciBvdFRocmVhZEJlY29tZUNoaWxkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lQ2hpbGQoTWxlOjprQXR0YWNoQW55KTsKK30KKworb3RFcnJvciBvdFRocmVhZEdldE5leHROZWlnaGJvckluZm8ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5laWdoYm9ySW5mb0l0ZXJhdG9yICphSXRlcmF0b3IsIG90TmVpZ2hib3JJbmZvICphSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCgoYUluZm8gIT0gTlVMTCkgJiYgKGFJdGVyYXRvciAhPSBOVUxMKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXROZXh0TmVpZ2hib3JJbmZvKCphSXRlcmF0b3IsICphSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdERldmljZVJvbGUgb3RUaHJlYWRHZXREZXZpY2VSb2xlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8b3REZXZpY2VSb2xlPihhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkpOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0TGVhZGVyRGF0YShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TGVhZGVyRGF0YSAqYUxlYWRlckRhdGEpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFZlcmlmeU9yRXhpdChhTGVhZGVyRGF0YSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGEoKmFMZWFkZXJEYXRhKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRMZWFkZXJSb3V0ZXJJZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlckRhdGFUbHYoKS5HZXRMZWFkZXJSb3V0ZXJJZCgpOworfQorCit1aW50OF90IG90VGhyZWFkR2V0TGVhZGVyV2VpZ2h0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0TGVhZGVyRGF0YVRsdigpLkdldFdlaWdodGluZygpOworfQorCit1aW50MzJfdCBvdFRocmVhZEdldFBhcnRpdGlvbklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0TGVhZGVyRGF0YVRsdigpLkdldFBhcnRpdGlvbklkKCk7Cit9CisKK3VpbnQxNl90IG90VGhyZWFkR2V0UmxvYzE2KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCk7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRQYXJlbnRJbmZvKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSb3V0ZXJJbmZvICphUGFyZW50SW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSb3V0ZXIgKnBhcmVudDsKKworICAgIFZlcmlmeU9yRXhpdChhUGFyZW50SW5mbyAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBwYXJlbnQgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRQYXJlbnQoKTsKKyAgICBtZW1jcHkoYVBhcmVudEluZm8tPm1FeHRBZGRyZXNzLm04LCAmcGFyZW50LT5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihhUGFyZW50SW5mby0+bUV4dEFkZHJlc3MpKTsKKworICAgIGFQYXJlbnRJbmZvLT5tUmxvYzE2ICAgICAgICAgID0gcGFyZW50LT5HZXRSbG9jMTYoKTsKKyAgICBhUGFyZW50SW5mby0+bVJvdXRlcklkICAgICAgICA9IE1sZTo6TWxlOjpHZXRSb3V0ZXJJZChwYXJlbnQtPkdldFJsb2MxNigpKTsKKyAgICBhUGFyZW50SW5mby0+bU5leHRIb3AgICAgICAgICA9IHBhcmVudC0+R2V0TmV4dEhvcCgpOworICAgIGFQYXJlbnRJbmZvLT5tUGF0aENvc3QgICAgICAgID0gcGFyZW50LT5HZXRDb3N0KCk7CisgICAgYVBhcmVudEluZm8tPm1MaW5rUXVhbGl0eUluICAgPSBwYXJlbnQtPkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKTsKKyAgICBhUGFyZW50SW5mby0+bUxpbmtRdWFsaXR5T3V0ICA9IHBhcmVudC0+R2V0TGlua1F1YWxpdHlPdXQoKTsKKyAgICBhUGFyZW50SW5mby0+bUFnZSAgICAgICAgICAgICA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFRpbWVyOjpNc2VjVG9TZWMoVGltZXI6OkdldE5vdygpIC0gcGFyZW50LT5HZXRMYXN0SGVhcmQoKSkpOworICAgIGFQYXJlbnRJbmZvLT5tQWxsb2NhdGVkICAgICAgID0gcGFyZW50LT5Jc0FsbG9jYXRlZCgpOworICAgIGFQYXJlbnRJbmZvLT5tTGlua0VzdGFibGlzaGVkID0gcGFyZW50LT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRQYXJlbnRBdmVyYWdlUnNzaShvdEluc3RhbmNlICphSW5zdGFuY2UsIGludDhfdCAqYVBhcmVudFJzc2kpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgUm91dGVyICpwYXJlbnQ7CisKKyAgICBWZXJpZnlPckV4aXQoYVBhcmVudFJzc2kgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcGFyZW50ID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisgICAgKmFQYXJlbnRSc3NpID0gcGFyZW50LT5HZXRMaW5rSW5mbygpLkdldEF2ZXJhZ2VSc3MoKTsKKworICAgIFZlcmlmeU9yRXhpdCgqYVBhcmVudFJzc2kgIT0gT1RfUkFESU9fUlNTSV9JTlZBTElELCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0UGFyZW50TGFzdFJzc2kob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgKmFMYXN0UnNzaSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSb3V0ZXIgKnBhcmVudDsKKworICAgIFZlcmlmeU9yRXhpdChhTGFzdFJzc2kgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcGFyZW50ID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisgICAgKmFMYXN0UnNzaSA9IHBhcmVudC0+R2V0TGlua0luZm8oKS5HZXRMYXN0UnNzKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKmFMYXN0UnNzaSAhPSBPVF9SQURJT19SU1NJX0lOVkFMSUQsIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IGNoYXIgKm90R2V0VmVyc2lvblN0cmluZyh2b2lkKQoreworICAgIC8qKgorICAgICAqIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9QUkVGSVggYW5kIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9TVUZGSVggYXJlCisgICAgICogaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBzcGVjaWZ5IGNvbXBpbGVyIGRpcmVjdGl2ZXMgdG8gaW5kaWNhdGUKKyAgICAgKiB3aGF0IGxpbmtlciBzZWN0aW9uIHRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHN0cmluZyBzaG91bGQgYmUgc3RvcmVkLgorICAgICAqCisgICAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHNwZWNpZnlpbmcgYW4gZXhhY3QgbG9jYWl0b24gb2Ygd2hlcmUgdGhlIHZlcnNpb24KKyAgICAgKiBzdHJpbmcgd2lsbCBiZSBsb2NhdGVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSByZXRyaWV2ZWQgZnJvbSB0aGUKKyAgICAgKiByYXcgZmlybXdhcmUgaW1hZ2UuCisgICAgICoKKyAgICAgKiBJZiBQTEFURk9STV9WRVJTSU9OX0FUVFJfUFJFRklYIGlzIHVuc3BlY2lmaWVkLCB0aGUga2V5d29yZCBgc3RhdGljYAorICAgICAqIGlzIHVzZWQgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIElmIGJvdGggYXJlIHVuc3BlY2lmaWVkLCB0aGUgbG9jYXRpb24gb2YgdGhlIHN0cmluZyBpbiB0aGUgZmlybXdhcmUKKyAgICAgKiBpbWFnZSB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgbWF5IGNoYW5nZS4KKyAgICAgKi8KKworI2lmZGVmIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9QUkVGSVgKKyAgICBQTEFURk9STV9WRVJTSU9OX0FUVFJfUFJFRklYCisjZWxzZQorICAgIHN0YXRpYworI2VuZGlmCisgICAgY29uc3QgY2hhciBzVmVyc2lvbltdID0KKyAgICAgICAgUEFDS0FHRV9OQU1FICIvIiBQQUNLQUdFX1ZFUlNJT04KKyNpZmRlZiAgUExBVEZPUk1fSU5GTworICAgICAgICAiOyAiIFBMQVRGT1JNX0lORk8KKyNlbmRpZgorI2lmIGRlZmluZWQoX19EQVRFX18pCisgICAgICAgICI7ICIgX19EQVRFX18gIiAiIF9fVElNRV9fCisjZW5kaWYKKyNpZmRlZiBQTEFURk9STV9WRVJTSU9OX0FUVFJfU1VGRklYCisgICAgICAgIFBMQVRGT1JNX1ZFUlNJT05fQVRUUl9TVUZGSVgKKyNlbmRpZgorICAgICAgICA7IC8vIFRyYWlsaW5nIHNlbWljb2xvbiB0byBlbmQgc3RhdGVtZW50LgorCisgICAgcmV0dXJuIHNWZXJzaW9uOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQwordm9pZCBvdFRocmVhZFNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXROZXR3b3JrRGlhZ25vc3RpYygpLlNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2soYUNhbGxiYWNrLCBhQ2FsbGJhY2tDb250ZXh0KTsKK30KKworb3RFcnJvciBvdFRocmVhZFNlbmREaWFnbm9zdGljR2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3Qgb3RJcDZBZGRyZXNzICphRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEaWFnbm9zdGljKCkuU2VuZERpYWdub3N0aWNHZXQoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhRGVzdGluYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ291bnQpOworfQorCitvdEVycm9yIG90VGhyZWFkU2VuZERpYWdub3N0aWNSZXNldChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IG90SXA2QWRkcmVzcyAqYURlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEaWFnbm9zdGljKCkuU2VuZERpYWdub3N0aWNSZXNldCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYURlc3RpbmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUbHZUeXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb3VudCk7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworCitvdEVycm9yIG90VGhyZWFkU2V0RW5hYmxlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYUVuYWJsZWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaWYgKGFFbmFibGVkKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkdldFBhbklkKCkgIT0gTWFjOjprUGFuSWRCcm9hZGNhc3QsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgICAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlN0YXJ0KHRydWUsIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TdG9wKHRydWUpOworICAgIH0KKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgb3RUaHJlYWRHZXRBdXRvU3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9BVVRPX1NUQVJUX1NVUFBPUlQKKyAgICB1aW50OF90IGF1dG9TdGFydCA9IDA7CisgICAgdWludDE2X3QgYXV0b1N0YXJ0TGVuZ3RoID0gc2l6ZW9mKGF1dG9TdGFydCk7CisKKyAgICBpZiAob3RQbGF0U2V0dGluZ3NHZXQoYUluc3RhbmNlLCBTZXR0aW5nczo6a0tleVRocmVhZEF1dG9TdGFydCwgMCwgJmF1dG9TdGFydCwgJmF1dG9TdGFydExlbmd0aCkgIT0KKyAgICAgICAgT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGF1dG9TdGFydCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIGF1dG9TdGFydCAhPSAwOworI2Vsc2UKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworb3RFcnJvciBvdFRocmVhZFNldEF1dG9TdGFydChvdEluc3RhbmNlICphSW5zdGFuY2UsIGJvb2wgYVN0YXJ0QXV0b21hdGljYWxseSkKK3sKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQVVUT19TVEFSVF9TVVBQT1JUCisgICAgdWludDhfdCBhdXRvU3RhcnQgPSBhU3RhcnRBdXRvbWF0aWNhbGx5ID8gMSA6IDA7CisgICAgcmV0dXJuIG90UGxhdFNldHRpbmdzU2V0KGFJbnN0YW5jZSwgU2V0dGluZ3M6OmtLZXlUaHJlYWRBdXRvU3RhcnQsICZhdXRvU3RhcnQsIHNpemVvZihhdXRvU3RhcnQpKTsKKyNlbHNlCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFTdGFydEF1dG9tYXRpY2FsbHkpOworICAgIHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CisjZW5kaWYKK30KKworYm9vbCBvdFRocmVhZElzU2luZ2xldG9uKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuSXNTaW5nbGV0b24oKTsKK30KKworb3RFcnJvciBvdFRocmVhZERpc2NvdmVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVBhbklkLCBib29sIGFKb2luZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcsIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkRpc2NvdmVyKGFTY2FuQ2hhbm5lbHMsIGFQYW5JZCwgYUpvaW5lciwgYUVuYWJsZUV1aTY0RmlsdGVyaW5nLCBhQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDYWxsYmFja0NvbnRleHQpOworfQorCitib29sIG90VGhyZWFkSXNEaXNjb3ZlckluUHJvZ3Jlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5Jc0Rpc2NvdmVySW5Qcm9ncmVzcygpOworfQorCitjb25zdCBvdElwQ291bnRlcnMgKm90VGhyZWFkR2V0SXA2Q291bnRlcnMob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiAmYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldENvdW50ZXJzKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9hcGkvdGhyZWFkX2Z0ZF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3RocmVhZF9mdGRfYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjczMDRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvYXBpL3RocmVhZF9mdGRfYXBpLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBPcGVuVGhyZWFkIFRocmVhZCBBUEkgKEZURCBvbmx5KS4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJ0aHJlYWRfZnRkX2FwaS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaWYgT1BFTlRIUkVBRF9GVEQKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdGhyZWFkX2Z0ZC5oPgorI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKKwordWludDhfdCBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgdWludDhfdCBhTnVtQ2hpbGRyZW47CisKKyAgICAodm9pZClhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRDaGlsZHJlbigmYU51bUNoaWxkcmVuKTsKKworICAgIHJldHVybiBhTnVtQ2hpbGRyZW47Cit9CisKK290RXJyb3Igb3RUaHJlYWRTZXRNYXhBbGxvd2VkQ2hpbGRyZW4ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFNYXhDaGlsZHJlbikKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0TWF4QWxsb3dlZENoaWxkcmVuKGFNYXhDaGlsZHJlbik7Cit9CisKK2Jvb2wgb3RUaHJlYWRJc1JvdXRlclJvbGVFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuSXNSb3V0ZXJSb2xlRW5hYmxlZCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0Um91dGVyUm9sZUVuYWJsZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGVkKQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldFJvdXRlclJvbGVFbmFibGVkKGFFbmFibGVkKTsKK30KKworb3RFcnJvciBvdFRocmVhZFNldFByZWZlcnJlZFJvdXRlcklkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhUm91dGVySWQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldFByZWZlcnJlZFJvdXRlcklkKGFSb3V0ZXJJZCk7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRMb2NhbExlYWRlcldlaWdodChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldExlYWRlcldlaWdodCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJXZWlnaHQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFXZWlnaHQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0TGVhZGVyV2VpZ2h0KGFXZWlnaHQpOworfQorCit1aW50MzJfdCBvdFRocmVhZEdldExvY2FsTGVhZGVyUGFydGl0aW9uSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJQYXJ0aXRpb25JZCgpOworfQorCit2b2lkIG90VGhyZWFkU2V0TG9jYWxMZWFkZXJQYXJ0aXRpb25JZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQzMl90IGFQYXJ0aXRpb25JZCkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0TGVhZGVyUGFydGl0aW9uSWQoYVBhcnRpdGlvbklkKTsKK30KKwordWludDE2X3Qgb3RUaHJlYWRHZXRKb2luZXJVZHBQb3J0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0Sm9pbmVyUm91dGVyKCkuR2V0Sm9pbmVyVWRwUG9ydCgpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0Sm9pbmVyVWRwUG9ydChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFKb2luZXJVZHBQb3J0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRKb2luZXJSb3V0ZXIoKS5TZXRKb2luZXJVZHBQb3J0KGFKb2luZXJVZHBQb3J0KTsKK30KKwordWludDMyX3Qgb3RUaHJlYWRHZXRDb250ZXh0SWRSZXVzZURlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb250ZXh0SWRSZXVzZURlbGF5KCk7Cit9CisKK3ZvaWQgb3RUaHJlYWRTZXRDb250ZXh0SWRSZXVzZURlbGF5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDMyX3QgYURlbGF5KQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU2V0Q29udGV4dElkUmV1c2VEZWxheShhRGVsYXkpOworfQorCit1aW50OF90IG90VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldE5ldHdvcmtJZFRpbWVvdXQoKTsKK30KKwordm9pZCBvdFRocmVhZFNldE5ldHdvcmtJZFRpbWVvdXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFUaW1lb3V0KQoreworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldE5ldHdvcmtJZFRpbWVvdXQoKHVpbnQ4X3QpYVRpbWVvdXQpOworfQorCit1aW50OF90IG90VGhyZWFkR2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQoKTsKK30KKwordm9pZCBvdFRocmVhZFNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90IGFUaHJlc2hvbGQpCit7CisgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChhVGhyZXNob2xkKTsKK30KKworb3RFcnJvciBvdFRocmVhZFJlbGVhc2VSb3V0ZXJJZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVJvdXRlcklkKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5SZWxlYXNlUm91dGVySWQoYVJvdXRlcklkKTsKK30KKworb3RFcnJvciBvdFRocmVhZEJlY29tZVJvdXRlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisKKyAgICBzd2l0Y2ggKGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lUm91dGVyKFRocmVhZFN0YXR1c1Rsdjo6a0hhdmVDaGlsZElkUmVxdWVzdCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkQmVjb21lTGVhZGVyKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuQmVjb21lTGVhZGVyKCk7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoKTsKK30KKwordm9pZCBvdFRocmVhZFNldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVRocmVzaG9sZCkKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoYVRocmVzaG9sZCk7Cit9CisKK3VpbnQ4X3Qgb3RUaHJlYWRHZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoKTsKK30KKwordm9pZCBvdFRocmVhZFNldFJvdXRlclNlbGVjdGlvbkppdHRlcihvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYVJvdXRlckppdHRlcikKK3sKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5TZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoYVJvdXRlckppdHRlcik7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRDaGlsZEluZm9CeUlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUNoaWxkSWQsIG90Q2hpbGRJbmZvICphQ2hpbGRJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZEluZm8gIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZm9CeUlkKGFDaGlsZElkLCAqYUNoaWxkSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkR2V0Q2hpbGRJbmZvQnlJbmRleChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoaWxkSW5kZXgsIG90Q2hpbGRJbmZvICphQ2hpbGRJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZEluZm8gIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZm9CeUluZGV4KGFDaGlsZEluZGV4LCAqYUNoaWxkSW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50OF90IG90VGhyZWFkR2V0Um91dGVySWRTZXF1ZW5jZShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkU2VxdWVuY2UoKTsKK30KKworb3RFcnJvciBvdFRocmVhZEdldFJvdXRlckluZm8ob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUm91dGVySWQsIG90Um91dGVySW5mbyAqYVJvdXRlckluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYVJvdXRlckluZm8gIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgZXJyb3IgPSBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJJbmZvKGFSb3V0ZXJJZCwgKmFSb3V0ZXJJbmZvKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RUaHJlYWRHZXRFaWRDYWNoZUVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDhfdCBhSW5kZXgsIG90RWlkQ2FjaGVFbnRyeSAqYUVudHJ5KQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoYUVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBlcnJvciA9IGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEFkZHJlc3NSZXNvbHZlcigpLkdldEVudHJ5KGFJbmRleCwgKmFFbnRyeSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0U3RlZXJpbmdEYXRhKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIGVycm9yID0gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWxlKCkuU2V0U3RlZXJpbmdEYXRhKGFFeHRBZGRyZXNzKTsKKyNlbHNlCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFJbnN0YW5jZSk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFFeHRBZGRyZXNzKTsKKworICAgIGVycm9yID0gT1RfRVJST1JfRElTQUJMRURfRkVBVFVSRTsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCisgICAgcmV0dXJuIGVycm9yOworfQorCitjb25zdCB1aW50OF90ICpvdFRocmVhZEdldFBTS2Mob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0UFNLYygpOworfQorCitvdEVycm9yIG90VGhyZWFkU2V0UFNLYyhvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQ4X3QgKmFQU0tjKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRQU0tjKGFQU0tjKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuQ2xlYXIoKTsKKyAgICBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkNsZWFyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitpbnQ4X3Qgb3RUaHJlYWRHZXRQYXJlbnRQcmlvcml0eShvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLkdldEFzc2lnblBhcmVudFByaW9yaXR5KCk7Cit9CisKK290RXJyb3Igb3RUaHJlYWRTZXRQYXJlbnRQcmlvcml0eShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IGludDhfdCBhUGFyZW50UHJpb3JpdHkpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1sZSgpLlNldEFzc2lnblBhcmVudFByaW9yaXR5KGFQYXJlbnRQcmlvcml0eSk7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL3RtZl9wcm94eV9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3RtZl9wcm94eV9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNGQ5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdG1mX3Byb3h5X2FwaS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgT3BlblRocmVhZCBUTUYgcHJveHkgQVBJLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdG1mX3Byb3h5Lmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisKKyNpZiBPUEVOVEhSRUFEX0ZURCAmJiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkKKworb3RFcnJvciBvdFRtZlByb3h5U3RhcnQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFRtZlByb3h5U3RyZWFtSGFuZGxlciBhVG1mUHJveHlDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFRtZlByb3h5KCkuU3RhcnQoYVRtZlByb3h5Q2FsbGJhY2ssIGFDb250ZXh0KTsKK30KKworb3RFcnJvciBvdFRtZlByb3h5U3RvcChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgcmV0dXJuIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldFRtZlByb3h5KCkuU3RvcCgpOworfQorCitvdEVycm9yIG90VG1mUHJveHlTZW5kKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RNZXNzYWdlICphTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KQoreworICAgIHJldHVybiBhSW5zdGFuY2UtPm1UaHJlYWROZXRpZi5HZXRUbWZQcm94eSgpLlNlbmQoKnN0YXRpY19jYXN0PG90OjpNZXNzYWdlICo+KGFNZXNzYWdlKSwgYUxvY2F0b3IsIGFQb3J0KTsKK30KKworYm9vbCBvdFRtZlByb3h5SXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICByZXR1cm4gYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0VG1mUHJveHkoKS5Jc0VuYWJsZWQoKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvYXBpL3VkcF9hcGkuY3BwIGIvc3JjL2NvcmUvYXBpL3VkcF9hcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDU3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9hcGkvdWRwX2FwaS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIE9wZW5UaHJlYWQgVURQIEFQSS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3VkcC5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugb3Q7CisKK290TWVzc2FnZSAqb3RVZHBOZXdNZXNzYWdlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgYm9vbCBhTGlua1NlY3VyaXR5RW5hYmxlZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gYUluc3RhbmNlLT5tSXA2Lm1VZHAuTmV3TWVzc2FnZSgwKTsKKworICAgIGlmIChtZXNzYWdlKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChhTGlua1NlY3VyaXR5RW5hYmxlZCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK290RXJyb3Igb3RVZHBPcGVuKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RVZHBTb2NrZXQgKmFTb2NrZXQsIG90VWRwUmVjZWl2ZSBhQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICBJcDY6OlVkcFNvY2tldCAqc29ja2V0ID0gc3RhdGljX2Nhc3Q8SXA2OjpVZHBTb2NrZXQgKj4oYVNvY2tldCk7CisKKyAgICBpZiAoc29ja2V0LT5tVHJhbnNwb3J0ID09IE5VTEwpCisgICAgeworICAgICAgICBzb2NrZXQtPm1UcmFuc3BvcnQgPSAmYUluc3RhbmNlLT5tSXA2Lm1VZHA7CisgICAgICAgIGVycm9yID0gc29ja2V0LT5PcGVuKGFDYWxsYmFjaywgYUNhbGxiYWNrQ29udGV4dCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIG90VWRwQ2xvc2Uob3RVZHBTb2NrZXQgKmFTb2NrZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEU7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworCisgICAgaWYgKHNvY2tldC0+bVRyYW5zcG9ydCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBzb2NrZXQtPkNsb3NlKCk7CisKKyAgICAgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNvY2tldC0+bVRyYW5zcG9ydCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3Igb3RVZHBCaW5kKG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpCit7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworICAgIHJldHVybiBzb2NrZXQtPkJpbmQoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6U29ja0FkZHIgKj4oYVNvY2tOYW1lKSk7Cit9CisKK290RXJyb3Igb3RVZHBDb25uZWN0KG90VWRwU29ja2V0ICphU29ja2V0LCBvdFNvY2tBZGRyICphU29ja05hbWUpCit7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworICAgIHJldHVybiBzb2NrZXQtPkNvbm5lY3QoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6U29ja0FkZHIgKj4oYVNvY2tOYW1lKSk7Cit9CisKK290RXJyb3Igb3RVZHBTZW5kKG90VWRwU29ja2V0ICphU29ja2V0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgSXA2OjpVZHBTb2NrZXQgKnNvY2tldCA9IHN0YXRpY19jYXN0PElwNjo6VWRwU29ja2V0ICo+KGFTb2NrZXQpOworICAgIHJldHVybiBzb2NrZXQtPlNlbmRUbygqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwLmNwcCBiL3NyYy9jb3JlL2NvYXAvY29hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzODBlYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvYXAvY29hcC5jcHAKQEAgLTAsMCArMSw5NDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImNvYXAudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNvYXAuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiBjb2RlIGJhc2UgZm9yIENvQVAgY2xpZW50IGFuZCBzZXJ2ZXIuCisgKi8KKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDb2FwIHsKKworQ29hcDo6Q29hcChUaHJlYWROZXRpZiAmYU5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtU29ja2V0KGFOZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtUmV0cmFuc21pc3Npb25UaW1lcihhTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmQ29hcDo6SGFuZGxlUmV0cmFuc21pc3Npb25UaW1lciwgdGhpcyksCisgICAgbVJlc291cmNlcyhOVUxMKSwKKyAgICBtQ29udGV4dChOVUxMKSwKKyAgICBtSW50ZXJjZXB0b3IoTlVMTCksCisgICAgbVJlc3BvbnNlc1F1ZXVlKGFOZXRpZiksCisgICAgbURlZmF1bHRIYW5kbGVyKE5VTEwpLAorICAgIG1EZWZhdWx0SGFuZGxlckNvbnRleHQoTlVMTCkKK3sKKyAgICBtTWVzc2FnZUlkID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKK30KKworb3RFcnJvciBDb2FwOjpTdGFydCh1aW50MTZfdCBhUG9ydCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIElwNjo6U29ja0FkZHIgc29ja2FkZHI7CisgICAgc29ja2FkZHIubVBvcnQgPSBhUG9ydDsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtU29ja2V0Lk9wZW4oJkNvYXA6OkhhbmRsZVVkcFJlY2VpdmUsIHRoaXMpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5CaW5kKHNvY2thZGRyKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENvYXA6OlN0b3Aodm9pZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbVBlbmRpbmdSZXF1ZXN0cy5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbWVzc2FnZVRvUmVtb3ZlOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisKKyAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgbWVzc2FnZXMuCisgICAgd2hpbGUgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VUb1JlbW92ZSA9IG1lc3NhZ2U7CisgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisKKyAgICAgICAgY29hcE1ldGFkYXRhLlJlYWRGcm9tKCptZXNzYWdlVG9SZW1vdmUpOworICAgICAgICBGaW5hbGl6ZUNvYXBUcmFuc2FjdGlvbigqbWVzc2FnZVRvUmVtb3ZlLCBjb2FwTWV0YWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwsIE9UX0VSUk9SX0FCT1JUKTsKKyAgICB9CisKKyAgICBtUmVzcG9uc2VzUXVldWUuRGVxdWV1ZUFsbFJlc3BvbnNlcygpOworCisgICAgcmV0dXJuIG1Tb2NrZXQuQ2xvc2UoKTsKK30KKworb3RFcnJvciBDb2FwOjpBZGRSZXNvdXJjZShSZXNvdXJjZSAmYVJlc291cmNlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChSZXNvdXJjZSAqY3VyID0gbVJlc291cmNlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChjdXIgIT0gJmFSZXNvdXJjZSwgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICB9CisKKyAgICBhUmVzb3VyY2UubU5leHQgPSBtUmVzb3VyY2VzOworICAgIG1SZXNvdXJjZXMgPSAmYVJlc291cmNlOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb2FwOjpSZW1vdmVSZXNvdXJjZShSZXNvdXJjZSAmYVJlc291cmNlKQoreworICAgIGlmIChtUmVzb3VyY2VzID09ICZhUmVzb3VyY2UpCisgICAgeworICAgICAgICBtUmVzb3VyY2VzID0gYVJlc291cmNlLkdldE5leHQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChSZXNvdXJjZSAqY3VyID0gbVJlc291cmNlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1ci0+bU5leHQgPT0gJmFSZXNvdXJjZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdXItPm1OZXh0ID0gYVJlc291cmNlLm1OZXh0OworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBhUmVzb3VyY2UubU5leHQgPSBOVUxMOworfQorCit2b2lkIENvYXA6OlNldERlZmF1bHRIYW5kbGVyKG90Q29hcFJlcXVlc3RIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBtRGVmYXVsdEhhbmRsZXIgPSBhSGFuZGxlcjsKKyAgICBtRGVmYXVsdEhhbmRsZXJDb250ZXh0ID0gYUNvbnRleHQ7Cit9CisKK01lc3NhZ2UgKkNvYXA6Ok5ld01lc3NhZ2UoY29uc3QgSGVhZGVyICZhSGVhZGVyLCB1aW50OF90IGFQcmlvcml0eSkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIC8vIEVuc3VyZSB0aGF0IGhlYWRlciBoYXMgbWluaW11bSByZXF1aXJlZCBsZW5ndGguCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0TGVuZ3RoKCkgPj0gSGVhZGVyOjprTWluSGVhZGVyTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZShhSGVhZGVyLkdldExlbmd0aCgpKSkgIT0gTlVMTCk7CisgICAgbWVzc2FnZS0+UHJlcGVuZChhSGVhZGVyLkdldEJ5dGVzKCksIGFIZWFkZXIuR2V0TGVuZ3RoKCkpOworICAgIG1lc3NhZ2UtPlNldE9mZnNldCgwKTsKKyAgICBtZXNzYWdlLT5TZXRQcmlvcml0eShhUHJpb3JpdHkpOworCitleGl0OgorICAgIHJldHVybiBtZXNzYWdlOworfQorCitvdEVycm9yIENvYXA6OlNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBIZWFkZXIgaGVhZGVyOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisgICAgTWVzc2FnZSAqc3RvcmVkQ29weSA9IE5VTEw7CisgICAgdWludDE2X3QgY29weUxlbmd0aCA9IDA7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gaGVhZGVyLkZyb21NZXNzYWdlKGFNZXNzYWdlLCAwKSk7CisKKyAgICBpZiAoKGhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0FDS05PV0xFREdNRU5UIHx8IGhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX1JFU0VUKSAmJgorICAgICAgICBoZWFkZXIuR2V0Q29kZSgpICE9IE9UX0NPQVBfQ09ERV9FTVBUWSkKKyAgICB7CisgICAgICAgIG1SZXNwb25zZXNRdWV1ZS5FbnF1ZXVlUmVzcG9uc2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgfQorCisgICAgLy8gU2V0IE1lc3NhZ2UgSWQgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IHNldC4KKyAgICBpZiAoaGVhZGVyLkdldE1lc3NhZ2VJZCgpID09IDApCisgICAgeworICAgICAgICBoZWFkZXIuU2V0TWVzc2FnZUlkKG1NZXNzYWdlSWQrKyk7CisgICAgICAgIGFNZXNzYWdlLldyaXRlKDAsIEhlYWRlcjo6a01pbkhlYWRlckxlbmd0aCwgaGVhZGVyLkdldEJ5dGVzKCkpOworICAgIH0KKworICAgIGlmIChoZWFkZXIuSXNDb25maXJtYWJsZSgpKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY29weSBvZiBlbnRpcmUgbWVzc2FnZSBhbmQgZW5xdWV1ZSBpdC4KKyAgICAgICAgY29weUxlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpOworICAgIH0KKyAgICBlbHNlIGlmIChoZWFkZXIuSXNOb25Db25maXJtYWJsZSgpICYmIChhSGFuZGxlciAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIC8vIEFzIHdlIGRvIG5vdCByZXRyYW5zbWl0IG5vbiBjb25maXJtYWJsZSBtZXNzYWdlcywgY3JlYXRlIGEgY29weSBvZiBoZWFkZXIgb25seSwgZm9yIHRva2VuIGluZm9ybWF0aW9uLgorICAgICAgICBjb3B5TGVuZ3RoID0gaGVhZGVyLkdldExlbmd0aCgpOworICAgIH0KKworICAgIGlmIChjb3B5TGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGNvYXBNZXRhZGF0YSA9IENvYXBNZXRhZGF0YShoZWFkZXIuSXNDb25maXJtYWJsZSgpLCBhTWVzc2FnZUluZm8sIGFIYW5kbGVyLCBhQ29udGV4dCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgoc3RvcmVkQ29weSA9IENvcHlBbmRFbnF1ZXVlTWVzc2FnZShhTWVzc2FnZSwgY29weUxlbmd0aCwgY29hcE1ldGFkYXRhKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmQoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgc3RvcmVkQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRGVxdWV1ZU1lc3NhZ2UoKnN0b3JlZENvcHkpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDb2FwOjpTZW5kKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgcmV0dXJuIG1Tb2NrZXQuU2VuZFRvKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCitvdEVycm9yIENvYXA6OlNlbmRFbXB0eU1lc3NhZ2UoSGVhZGVyOjpUeXBlIGFUeXBlLCBjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgcmVzcG9uc2VIZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQoYVJlcXVlc3RIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcmVzcG9uc2VIZWFkZXIuSW5pdChhVHlwZSwgT1RfQ09BUF9DT0RFX0VNUFRZKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRNZXNzYWdlSWQoYVJlcXVlc3RIZWFkZXIuR2V0TWVzc2FnZUlkKCkpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzc2FnZShyZXNwb25zZUhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZCgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENvYXA6OlNlbmRIZWFkZXJSZXNwb25zZShIZWFkZXI6OkNvZGUgYUNvZGUsIGNvbnN0IEhlYWRlciAmYVJlcXVlc3RIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIEhlYWRlcjo6VHlwZSByZXF1ZXN0VHlwZTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhUmVxdWVzdEhlYWRlci5Jc1JlcXVlc3QoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgcmVxdWVzdFR5cGUgPSBhUmVxdWVzdEhlYWRlci5HZXRUeXBlKCk7CisKKyAgICBzd2l0Y2ggKHJlcXVlc3RUeXBlKQorICAgIHsKKyAgICBjYXNlIE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRToKKyAgICAgICAgcmVzcG9uc2VIZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQsIGFDb2RlKTsKKyAgICAgICAgcmVzcG9uc2VIZWFkZXIuU2V0TWVzc2FnZUlkKGFSZXF1ZXN0SGVhZGVyLkdldE1lc3NhZ2VJZCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEU6CisgICAgICAgIHJlc3BvbnNlSGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSwgYUNvZGUpOworICAgICAgICByZXNwb25zZUhlYWRlci5TZXRNZXNzYWdlSWQobU1lc3NhZ2VJZCsrKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0VG9rZW4oYVJlcXVlc3RIZWFkZXIuR2V0VG9rZW4oKSwgYVJlcXVlc3RIZWFkZXIuR2V0VG9rZW5MZW5ndGgoKSk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNzYWdlKHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitDb2FwICZDb2FwOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBDb2FwICZjb2FwID0gKnN0YXRpY19jYXN0PENvYXAgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgQ29hcCAmY29hcCA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRDb2FwKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBjb2FwOworfQorCit2b2lkIENvYXA6OkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoKTsKK30KKwordm9pZCBDb2FwOjpIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKHZvaWQpCit7CisgICAgdWludDMyX3Qgbm93ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICB1aW50MzJfdCBuZXh0RGVsdGEgPSAweGZmZmZmZmZmOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1QZW5kaW5nUmVxdWVzdHMuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm5leHRNZXNzYWdlID0gTlVMTDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgd2hpbGUgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5leHRNZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpOworICAgICAgICBjb2FwTWV0YWRhdGEuUmVhZEZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIGlmIChjb2FwTWV0YWRhdGEuSXNMYXRlcihub3cpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5leHQgZGVsYXkgYW5kIGNob29zZSB0aGUgbG93ZXN0LgorICAgICAgICAgICAgaWYgKGNvYXBNZXRhZGF0YS5tTmV4dFRpbWVyU2hvdCAtIG5vdyA8IG5leHREZWx0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXh0RGVsdGEgPSBjb2FwTWV0YWRhdGEubU5leHRUaW1lclNob3QgLSBub3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGNvYXBNZXRhZGF0YS5tQ29uZmlybWFibGUpICYmCisgICAgICAgICAgICAgICAgIChjb2FwTWV0YWRhdGEubVJldHJhbnNtaXNzaW9uQ291bnQgPCBrTWF4UmV0cmFuc21pdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCByZXRyYW5zbWlzc2lvbiBjb3VudGVyIGFuZCB0aW1lci4KKyAgICAgICAgICAgIGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25Db3VudCsrOworICAgICAgICAgICAgY29hcE1ldGFkYXRhLm1SZXRyYW5zbWlzc2lvblRpbWVvdXQgKj0gMjsKKyAgICAgICAgICAgIGNvYXBNZXRhZGF0YS5tTmV4dFRpbWVyU2hvdCA9IG5vdyArIGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0OworICAgICAgICAgICAgY29hcE1ldGFkYXRhLlVwZGF0ZUluKCptZXNzYWdlKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcmV0cmFuc21pc3Npb24gdGltZSBpcyBsb3dlciB0aGFuIGN1cnJlbnQgbG93ZXN0LgorICAgICAgICAgICAgaWYgKGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0IDwgbmV4dERlbHRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHREZWx0YSA9IGNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXRyYW5zbWl0CisgICAgICAgICAgICBpZiAoIWNvYXBNZXRhZGF0YS5tQWNrbm93bGVkZ2VkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChjb2FwTWV0YWRhdGEubURlc3RpbmF0aW9uUG9ydCk7CisgICAgICAgICAgICAgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIoY29hcE1ldGFkYXRhLm1Tb3VyY2VBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIFNlbmRDb3B5KCptZXNzYWdlLCBtZXNzYWdlSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBObyBleHBlY3RlZCByZXNwb25zZSBvciBhY2tub3dsZWRnbWVudC4KKyAgICAgICAgICAgIEZpbmFsaXplQ29hcFRyYW5zYWN0aW9uKCptZXNzYWdlLCBjb2FwTWV0YWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwsIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZSA9IG5leHRNZXNzYWdlOworICAgIH0KKworICAgIGlmIChuZXh0RGVsdGEgIT0gMHhmZmZmZmZmZikKKyAgICB7CisgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0YXJ0KG5leHREZWx0YSk7CisgICAgfQorfQorCit2b2lkIENvYXA6OkZpbmFsaXplQ29hcFRyYW5zYWN0aW9uKE1lc3NhZ2UgJmFSZXF1ZXN0LCBjb25zdCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlciAqYVJlc3BvbnNlSGVhZGVyLCBNZXNzYWdlICphUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgIERlcXVldWVNZXNzYWdlKGFSZXF1ZXN0KTsKKworICAgIGlmIChhQ29hcE1ldGFkYXRhLm1SZXNwb25zZUhhbmRsZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGFDb2FwTWV0YWRhdGEubVJlc3BvbnNlSGFuZGxlcihhQ29hcE1ldGFkYXRhLm1SZXNwb25zZUNvbnRleHQsIGFSZXNwb25zZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXNwb25zZSwgYU1lc3NhZ2VJbmZvLCBhUmVzdWx0KTsKKyAgICB9Cit9CisKK290RXJyb3IgQ29hcDo6QWJvcnRUcmFuc2FjdGlvbihvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBDb2FwTWV0YWRhdGEgY29hcE1ldGFkYXRhOworCisgICAgZm9yIChtZXNzYWdlID0gbVBlbmRpbmdSZXF1ZXN0cy5HZXRIZWFkKCk7IG1lc3NhZ2UgIT0gTlVMTDsgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGNvYXBNZXRhZGF0YS5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKGNvYXBNZXRhZGF0YS5tUmVzcG9uc2VIYW5kbGVyID09IGFIYW5kbGVyICYmIGNvYXBNZXRhZGF0YS5tUmVzcG9uc2VDb250ZXh0ID09IGFDb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBEZXF1ZXVlTWVzc2FnZSgqbWVzc2FnZSk7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKworTWVzc2FnZSAqQ29hcDo6Q29weUFuZEVucXVldWVNZXNzYWdlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhQ29weUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHkgPSBOVUxMOworICAgIHVpbnQzMl90IGFsYXJtRmlyZVRpbWU7CisKKyAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvcHkgb2YgcmVxdWVzdGVkIHNpemUuCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlQ29weSA9IGFNZXNzYWdlLkNsb25lKGFDb3B5TGVuZ3RoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIC8vIEFwcGVuZCB0aGUgY29weSB3aXRoIHJldHJhbnNtaXNzaW9uIGRhdGEuCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFDb2FwTWV0YWRhdGEuQXBwZW5kVG8oKm1lc3NhZ2VDb3B5KSk7CisKKyAgICAvLyBTZXR1cCB0aGUgdGltZXIuCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgcmVzdGFydGVkIHdpdGggZWFybGllciBmaXJlIHRpbWUuCisgICAgICAgIGFsYXJtRmlyZVRpbWUgPSBtUmV0cmFuc21pc3Npb25UaW1lci5HZXRGaXJlVGltZSgpOworCisgICAgICAgIGlmIChhQ29hcE1ldGFkYXRhLklzRWFybGllcihhbGFybUZpcmVUaW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIuU3RhcnQoYUNvYXBNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25UaW1lb3V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChhQ29hcE1ldGFkYXRhLm1SZXRyYW5zbWlzc2lvblRpbWVvdXQpOworICAgIH0KKworICAgIC8vIEVucXVldWUgdGhlIG1lc3NhZ2UuCisgICAgbVBlbmRpbmdSZXF1ZXN0cy5FbnF1ZXVlKCptZXNzYWdlQ29weSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUNvcHktPkZyZWUoKTsKKyAgICAgICAgbWVzc2FnZUNvcHkgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlQ29weTsKK30KKwordm9pZCBDb2FwOjpEZXF1ZXVlTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBtUGVuZGluZ1JlcXVlc3RzLkRlcXVldWUoYU1lc3NhZ2UpOworCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpICYmIChtUGVuZGluZ1JlcXVlc3RzLkdldEhlYWQoKSA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIC8vIE5vIG1vcmUgcmVxdWVzdHMgcGVuZGluZywgc3RvcCB0aGUgdGltZXIuCisgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0b3AoKTsKKyAgICB9CisKKyAgICAvLyBGcmVlIHRoZSBtZXNzYWdlIG1lbW9yeS4KKyAgICBhTWVzc2FnZS5GcmVlKCk7CisKKyAgICAvLyBObyBuZWVkIHRvIHdvcnJ5IHRoYXQgdGhlIGVhcmxpZXN0IHBlbmRpbmcgbWVzc2FnZSB3YXMgcmVtb3ZlZCAtCisgICAgLy8gdGhlIHRpbWVyIHdvdWxkIGp1c3Qgc2hvb3QgZWFybGllciBhbmQgdGhlbiBpdCdkIGJlIHNldHVwIGFnYWluLgorfQorCitvdEVycm9yIENvYXA6OlNlbmRDb3B5KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisKKyAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvcHkgZm9yIGxvd2VyIGxheWVycy4KKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2VDb3B5ID0gYU1lc3NhZ2UuQ2xvbmUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoQ29hcE1ldGFkYXRhKSkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBTZW5kIHRoZSBjb3B5LgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kKCptZXNzYWdlQ29weSwgYU1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUNvcHktPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK01lc3NhZ2UgKkNvYXA6OkZpbmRSZWxhdGVkUmVxdWVzdChjb25zdCBIZWFkZXIgJmFSZXNwb25zZUhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIENvYXBNZXRhZGF0YSAmYUNvYXBNZXRhZGF0YSkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbVBlbmRpbmdSZXF1ZXN0cy5HZXRIZWFkKCk7CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgYUNvYXBNZXRhZGF0YS5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKCgoYUNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzID09IGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSB8fAorICAgICAgICAgICAgIGFDb2FwTWV0YWRhdGEubURlc3RpbmF0aW9uQWRkcmVzcy5Jc011bHRpY2FzdCgpIHx8CisgICAgICAgICAgICAgYUNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzLklzQW55Y2FzdFJvdXRpbmdMb2NhdG9yKCkpICYmCisgICAgICAgICAgICAoYUNvYXBNZXRhZGF0YS5tRGVzdGluYXRpb25Qb3J0ID09IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRnJvbU1lc3NhZ2UgY2FuIHJldHVybiBPVF9FUlJPUl9QQVJTRSBpZiBvbmx5IHBhcnRpYWwgbWVzc2FnZSB3YXMgc3RvcmVkIChoZWFkZXIgb25seSksCisgICAgICAgICAgICAvLyBidXQgcGF5bG9hZCBtYXJrZXIgaXMgcHJlc2VudC4gQXNzdW1lLCB0aGF0IHN0b3JlZCBtZXNzYWdlcyBhcmUgYWx3YXlzIHZhbGlkLgorICAgICAgICAgICAgYVJlcXVlc3RIZWFkZXIuRnJvbU1lc3NhZ2UoKm1lc3NhZ2UsIHNpemVvZihDb2FwTWV0YWRhdGEpKTsKKworICAgICAgICAgICAgc3dpdGNoIChhUmVzcG9uc2VIZWFkZXIuR2V0VHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBPVF9DT0FQX1RZUEVfUkVTRVQ6CisgICAgICAgICAgICBjYXNlIE9UX0NPQVBfVFlQRV9BQ0tOT1dMRURHTUVOVDoKKyAgICAgICAgICAgICAgICBpZiAoYVJlc3BvbnNlSGVhZGVyLkdldE1lc3NhZ2VJZCgpID09IGFSZXF1ZXN0SGVhZGVyLkdldE1lc3NhZ2VJZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRToKKyAgICAgICAgICAgIGNhc2UgT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRToKKyAgICAgICAgICAgICAgICBpZiAoYVJlc3BvbnNlSGVhZGVyLklzVG9rZW5FcXVhbChhUmVxdWVzdEhlYWRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKwordm9pZCBDb2FwOjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29hcCAqPihhQ29udGV4dCktPlJlY2VpdmUoKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIENvYXA6OlJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIEhlYWRlciBoZWFkZXI7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gaGVhZGVyLkZyb21NZXNzYWdlKGFNZXNzYWdlLCAwKSk7CisKKyAgICBpZiAoaGVhZGVyLklzUmVxdWVzdCgpKQorICAgIHsKKyAgICAgICAgUHJvY2Vzc1JlY2VpdmVkUmVxdWVzdChoZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBQcm9jZXNzUmVjZWl2ZWRSZXNwb25zZShoZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvcikKKyAgICB7CisgICAgICAgIG90TG9nSW5mb0NvYXBFcnIoR2V0TmV0aWYoKS5HZXRJbnN0YW5jZSgpLCBlcnJvciwgIlJlY2VpdmUgZmFpbGVkIik7CisgICAgfQorfQorCit2b2lkIENvYXA6OlByb2Nlc3NSZWNlaXZlZFJlc3BvbnNlKEhlYWRlciAmYVJlc3BvbnNlSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIEhlYWRlciByZXF1ZXN0SGVhZGVyOworICAgIENvYXBNZXRhZGF0YSBjb2FwTWV0YWRhdGE7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGFSZXNwb25zZUhlYWRlci5HZXRMZW5ndGgoKSk7CisKKyAgICBtZXNzYWdlID0gRmluZFJlbGF0ZWRSZXF1ZXN0KGFSZXNwb25zZUhlYWRlciwgYU1lc3NhZ2VJbmZvLCByZXF1ZXN0SGVhZGVyLCBjb2FwTWV0YWRhdGEpOworCisgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFSZXNwb25zZUhlYWRlci5HZXRUeXBlKCkpCisgICAgeworICAgIGNhc2UgT1RfQ09BUF9UWVBFX1JFU0VUOgorICAgICAgICBpZiAoYVJlc3BvbnNlSGVhZGVyLklzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgRmluYWxpemVDb2FwVHJhbnNhY3Rpb24oKm1lc3NhZ2UsIGNvYXBNZXRhZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCwgT1RfRVJST1JfQUJPUlQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIG5vbi1lbXB0eSByZXNldCBtZXNzYWdlcyAoUkZDIDcyNTIsIHAuIDQuMikuCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQ6CisgICAgICAgIGlmIChhUmVzcG9uc2VIZWFkZXIuSXNFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFbXB0eSBhY2tub3dsZWRnbWVudC4KKyAgICAgICAgICAgIGlmIChjb2FwTWV0YWRhdGEubUNvbmZpcm1hYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvYXBNZXRhZGF0YS5tQWNrbm93bGVkZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb2FwTWV0YWRhdGEuVXBkYXRlSW4oKm1lc3NhZ2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1lc3NhZ2UgaWYgcmVzcG9uc2UgaXMgbm90IGV4cGVjdGVkLCBvdGhlcndpc2UgYXdhaXQgcmVzcG9uc2UuCisgICAgICAgICAgICBpZiAoY29hcE1ldGFkYXRhLm1SZXNwb25zZUhhbmRsZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZXF1ZXVlTWVzc2FnZSgqbWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYVJlc3BvbnNlSGVhZGVyLklzUmVzcG9uc2UoKSAmJiBhUmVzcG9uc2VIZWFkZXIuSXNUb2tlbkVxdWFsKHJlcXVlc3RIZWFkZXIpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBQaWdneWJhY2tlZCByZXNwb25zZS4KKyAgICAgICAgICAgIEZpbmFsaXplQ29hcFRyYW5zYWN0aW9uKCptZXNzYWdlLCBjb2FwTWV0YWRhdGEsICZhUmVzcG9uc2VIZWFkZXIsICZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbywgT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgYWNrbm93bGVkZ21lbnRzIGNhcnJ5aW5nIHJlcXVlc3RzIChSRkMgNzI1MiwgcC4gNC4yKQorICAgICAgICAvLyBvciB3aXRoIG5vIHRva2VuIG1hdGNoIChSRkMgNzI1MiwgcC4gNS4zLjIpCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEU6CisgICAgICAgIC8vIFNlbmQgZW1wdHkgQUNLIGlmIGl0IGlzIGEgQ09OIG1lc3NhZ2UuCisgICAgICAgIFNlbmRBY2soYVJlc3BvbnNlSGVhZGVyLCBhTWVzc2FnZUluZm8pOworCisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICA7CisKKyAgICBjYXNlIE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEU6CisgICAgICAgIC8vIFNlcGFyYXRlIHJlc3BvbnNlLgorICAgICAgICBGaW5hbGl6ZUNvYXBUcmFuc2FjdGlvbigqbWVzc2FnZSwgY29hcE1ldGFkYXRhLCAmYVJlc3BvbnNlSGVhZGVyLCAmYU1lc3NhZ2UsICZhTWVzc2FnZUluZm8sIE9UX0VSUk9SX05PTkUpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChhUmVzcG9uc2VIZWFkZXIuSXNDb25maXJtYWJsZSgpIHx8IGFSZXNwb25zZUhlYWRlci5Jc05vbkNvbmZpcm1hYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBwYXJzZWQgYSBoZWFkZXIgYnV0IG5vIG1hdGNoaW5nIHJlcXVlc3Qgd2FzIGZvdW5kIC0gcmVqZWN0IHRoZSBtZXNzYWdlIGJ5IHNlbmRpbmcgcmVzZXQuCisgICAgICAgICAgICBTZW5kUmVzZXQoYVJlc3BvbnNlSGVhZGVyLCBhTWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvYXA6OlByb2Nlc3NSZWNlaXZlZFJlcXVlc3QoSGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIGNoYXIgdXJpUGF0aFtSZXNvdXJjZTo6a01heFJlY2VpdmVkVXJpUGF0aF0gPSAiIjsKKyAgICBjaGFyICpjdXJVcmlQYXRoID0gdXJpUGF0aDsKKyAgICBjb25zdCBIZWFkZXI6Ok9wdGlvbiAqY29hcE9wdGlvbjsKKyAgICBNZXNzYWdlICpjYWNoZWRSZXNwb25zZSA9IE5VTEw7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIGlmIChtSW50ZXJjZXB0b3IgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtSW50ZXJjZXB0b3IoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgbUNvbnRleHQpKTsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGFIZWFkZXIuR2V0TGVuZ3RoKCkpOworCisgICAgc3dpdGNoIChtUmVzcG9uc2VzUXVldWUuR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShhSGVhZGVyLCBhTWVzc2FnZUluZm8sICZjYWNoZWRSZXNwb25zZSkpCisgICAgeworICAgIGNhc2UgT1RfRVJST1JfTk9ORToKKyAgICAgICAgZXJyb3IgPSBTZW5kKCpjYWNoZWRSZXNwb25zZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgIDsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgRXhpdE5vdygpOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfRk9VTkQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29hcE9wdGlvbiA9IGFIZWFkZXIuR2V0Rmlyc3RPcHRpb24oKTsKKworICAgIHdoaWxlIChjb2FwT3B0aW9uICE9IE5VTEwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvYXBPcHRpb24tPm1OdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9DT0FQX09QVElPTl9VUklfUEFUSDoKKyAgICAgICAgICAgIGlmIChjdXJVcmlQYXRoICE9IHVyaVBhdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmN1clVyaVBhdGgrKyA9ICcvJzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGNvYXBPcHRpb24tPm1MZW5ndGggPCBzaXplb2YodXJpUGF0aCkgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1clVyaVBhdGggKyAxIC0gdXJpUGF0aCkpOworCisgICAgICAgICAgICBtZW1jcHkoY3VyVXJpUGF0aCwgY29hcE9wdGlvbi0+bVZhbHVlLCBjb2FwT3B0aW9uLT5tTGVuZ3RoKTsKKyAgICAgICAgICAgIGN1clVyaVBhdGggKz0gY29hcE9wdGlvbi0+bUxlbmd0aDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNvYXBPcHRpb24gPSBhSGVhZGVyLkdldE5leHRPcHRpb24oKTsKKyAgICB9CisKKyAgICBjdXJVcmlQYXRoWzBdID0gJ1wwJzsKKworICAgIGZvciAoY29uc3QgUmVzb3VyY2UgKnJlc291cmNlID0gbVJlc291cmNlczsgcmVzb3VyY2U7IHJlc291cmNlID0gcmVzb3VyY2UtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChzdHJjbXAocmVzb3VyY2UtPm1VcmlQYXRoLCB1cmlQYXRoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXNvdXJjZS0+SGFuZGxlUmVxdWVzdChhSGVhZGVyLCBhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRGVmYXVsdEhhbmRsZXIpCisgICAgeworICAgICAgICBtRGVmYXVsdEhhbmRsZXIobURlZmF1bHRIYW5kbGVyQ29udGV4dCwgJmFIZWFkZXIsICZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbyk7CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nSW5mb0NvYXBFcnIoR2V0TmV0aWYoKS5HZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3QiKTsKKworICAgICAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9UX0ZPVU5EKQorICAgICAgICB7CisgICAgICAgICAgICBTZW5kTm90Rm91bmQoYUhlYWRlciwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjYWNoZWRSZXNwb25zZS0+RnJlZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuOworfQorCitDb2FwTWV0YWRhdGE6OkNvYXBNZXRhZGF0YShib29sIGFDb25maXJtYWJsZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBtU291cmNlQWRkcmVzcyA9IGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpOworICAgIG1EZXN0aW5hdGlvblBvcnQgPSBhTWVzc2FnZUluZm8uR2V0UGVlclBvcnQoKTsKKyAgICBtRGVzdGluYXRpb25BZGRyZXNzID0gYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCk7CisgICAgbVJlc3BvbnNlSGFuZGxlciA9IGFIYW5kbGVyOworICAgIG1SZXNwb25zZUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICBtUmV0cmFuc21pc3Npb25Db3VudCA9IDA7CisgICAgbVJldHJhbnNtaXNzaW9uVGltZW91dCA9IFRpbWVyOjpTZWNUb01zZWMoa0Fja1RpbWVvdXQpOworICAgIG1SZXRyYW5zbWlzc2lvblRpbWVvdXQgKz0gb3RQbGF0UmFuZG9tR2V0KCkgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRpbWVyOjpTZWNUb01zZWMoa0Fja1RpbWVvdXQpICoga0Fja1JhbmRvbUZhY3Rvck51bWVyYXRvciAvIGtBY2tSYW5kb21GYWN0b3JEZW5vbWluYXRvciAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrQWNrVGltZW91dCkgKyAxKTsKKworICAgIGlmIChhQ29uZmlybWFibGUpCisgICAgeworICAgICAgICAvLyBTZXQgbmV4dCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0LgorICAgICAgICBtTmV4dFRpbWVyU2hvdCA9IFRpbWVyOjpHZXROb3coKSArIG1SZXRyYW5zbWlzc2lvblRpbWVvdXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFNldCBvdmVyYWxsIHJlc3BvbnNlIHRpbWVvdXQuCisgICAgICAgIG1OZXh0VGltZXJTaG90ID0gVGltZXI6OkdldE5vdygpICsga01heFRyYW5zbWl0V2FpdDsKKyAgICB9CisKKyAgICBtQWNrbm93bGVkZ2VkID0gZmFsc2U7CisgICAgbUNvbmZpcm1hYmxlID0gYUNvbmZpcm1hYmxlOworfQorCitSZXNwb25zZXNRdWV1ZTo6UmVzcG9uc2VzUXVldWUoVGhyZWFkTmV0aWYgJmFOZXRpZik6CisgICAgbVRpbWVyKGFOZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZSZXNwb25zZXNRdWV1ZTo6SGFuZGxlVGltZXIsIHRoaXMpCit7Cit9CisKK290RXJyb3IgUmVzcG9uc2VzUXVldWU6OkdldE1hdGNoZWRSZXNwb25zZUNvcHkoY29uc3QgSGVhZGVyICZhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgKiphUmVzcG9uc2UpCit7CisgICAgb3RFcnJvciAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBNZXNzYWdlICAgICAgICAgICAgICAgKm1lc3NhZ2U7CisgICAgRW5xdWV1ZWRSZXNwb25zZUhlYWRlciBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gICAgICAgbWVzc2FnZUluZm87CisgICAgSGVhZGVyICAgICAgICAgICAgICAgICBoZWFkZXI7CisKKyAgICBmb3IgKG1lc3NhZ2UgPSBtUXVldWUuR2V0SGVhZCgpOyBtZXNzYWdlICE9IE5VTEw7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLlJlYWRGcm9tKCptZXNzYWdlKTsKKyAgICAgICAgbWVzc2FnZUluZm8gPSBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLkdldE1lc3NhZ2VJbmZvKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgc291cmNlIGVuZHBvaW50CisgICAgICAgIGlmIChtZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpICE9IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpICE9IGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIE1lc3NhZ2UgSWQKKyAgICAgICAgaWYgKGhlYWRlci5Gcm9tTWVzc2FnZSgqbWVzc2FnZSwgc2l6ZW9mKEVucXVldWVkUmVzcG9uc2VIZWFkZXIpKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoZWFkZXIuR2V0TWVzc2FnZUlkKCkgIT0gYUhlYWRlci5HZXRNZXNzYWdlSWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAqYVJlc3BvbnNlID0gbWVzc2FnZS0+Q2xvbmUoKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCphUmVzcG9uc2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICAgICBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyOjpSZW1vdmVGcm9tKCoqYVJlc3BvbnNlKTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUmVzcG9uc2VzUXVldWU6OkdldE1hdGNoZWRSZXNwb25zZUNvcHkoY29uc3QgTWVzc2FnZSAmYVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAqKmFSZXNwb25zZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgIGhlYWRlcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBoZWFkZXIuRnJvbU1lc3NhZ2UoYVJlcXVlc3QsIDApKTsKKworICAgIGVycm9yID0gR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShoZWFkZXIsIGFNZXNzYWdlSW5mbywgYVJlc3BvbnNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUmVzcG9uc2VzUXVldWU6OkVucXVldWVSZXNwb25zZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIEhlYWRlciAgICAgICAgICAgICAgICAgaGVhZGVyOworICAgIE1lc3NhZ2UgICAgICAgICAgICAgICAqY29weTsKKyAgICBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyIGVucXVldWVkUmVzcG9uc2VIZWFkZXIoYU1lc3NhZ2VJbmZvKTsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgIG1lc3NhZ2VDb3VudDsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgIGJ1ZmZlckNvdW50OworCisgICAgU3VjY2Vzc09yRXhpdChoZWFkZXIuRnJvbU1lc3NhZ2UoYU1lc3NhZ2UsIDApKTsKKworICAgIHN3aXRjaCAoR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCAmY29weSkpCisgICAgeworICAgIGNhc2UgT1RfRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9ORToKKyAgICAgICAgY29weS0+RnJlZSgpOworCisgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1RdWV1ZS5HZXRJbmZvKG1lc3NhZ2VDb3VudCwgYnVmZmVyQ291bnQpOworCisgICAgaWYgKG1lc3NhZ2VDb3VudCA+PSBrTWF4Q2FjaGVkUmVzcG9uc2VzKQorICAgIHsKKyAgICAgICAgRGVxdWV1ZU9sZGVzdFJlc3BvbnNlKCk7CisgICAgfQorCisgICAgY29weSA9IGFNZXNzYWdlLkNsb25lKCk7CisgICAgVmVyaWZ5T3JFeGl0KGNvcHkgIT0gTlVMTCk7CisKKyAgICBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLkFwcGVuZFRvKCpjb3B5KTsKKyAgICBtUXVldWUuRW5xdWV1ZSgqY29weSk7CisKKyAgICBpZiAoIW1UaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChUaW1lcjo6U2VjVG9Nc2VjKGtFeGNoYW5nZUxpZmV0aW1lKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBSZXNwb25zZXNRdWV1ZTo6RGVxdWV1ZU9sZGVzdFJlc3BvbnNlKHZvaWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG1RdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpOworICAgIERlcXVldWVSZXNwb25zZSgqbWVzc2FnZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIFJlc3BvbnNlc1F1ZXVlOjpEZXF1ZXVlQWxsUmVzcG9uc2VzKHZvaWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIHdoaWxlICgobWVzc2FnZSA9IG1RdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBEZXF1ZXVlUmVzcG9uc2UoKm1lc3NhZ2UpOworICAgIH0KK30KKworUmVzcG9uc2VzUXVldWUgJlJlc3BvbnNlc1F1ZXVlOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBSZXNwb25zZXNRdWV1ZSAmcXVldWUgPSAqc3RhdGljX2Nhc3Q8UmVzcG9uc2VzUXVldWUgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgUmVzcG9uc2VzUXVldWUgJnF1ZXVlID0gb3RHZXRUaHJlYWROZXRpZigpLkdldENvYXAoKS5tUmVzcG9uc2VzUXVldWU7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBxdWV1ZTsKK30KKwordm9pZCBSZXNwb25zZXNRdWV1ZTo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgUmVzcG9uc2VzUXVldWU6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgTWVzc2FnZSAgICAgICAgICAgICAgICptZXNzYWdlOworICAgIEVucXVldWVkUmVzcG9uc2VIZWFkZXIgZW5xdWV1ZWRSZXNwb25zZUhlYWRlcjsKKworICAgIHdoaWxlICgobWVzc2FnZSA9IG1RdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLlJlYWRGcm9tKCptZXNzYWdlKTsKKworICAgICAgICBpZiAoZW5xdWV1ZWRSZXNwb25zZUhlYWRlci5Jc0VhcmxpZXIoVGltZXI6OkdldE5vdygpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVxdWV1ZVJlc3BvbnNlKCptZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UaW1lci5TdGFydChlbnF1ZXVlZFJlc3BvbnNlSGVhZGVyLkdldFJlbWFpbmluZ1RpbWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordWludDMyX3QgRW5xdWV1ZWRSZXNwb25zZUhlYWRlcjo6R2V0UmVtYWluaW5nVGltZSh2b2lkKSBjb25zdAoreworICAgIGludDMyX3QgcmVtYWluaW5nVGltZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG1EZXF1ZXVlVGltZSAtIFRpbWVyOjpHZXROb3coKSk7CisKKyAgICByZXR1cm4gcmVtYWluaW5nVGltZSA+PSAwID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlbWFpbmluZ1RpbWUpIDogMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwLmhwcCBiL3NyYy9jb3JlL2NvYXAvY29hcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjOWRiYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvYXAvY29hcC5ocHAKQEAgLTAsMCArMSw3MTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ09BUF9IUFBfCisjZGVmaW5lIENPQVBfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb2FwLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIENvQVAgY2xpZW50IGFuZCBzZXJ2ZXIgZnVuY3Rpb25hbGl0eS4KKyAqLworCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIENvYXAgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtY29hcAorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogUHJvdG9jb2wgQ29uc3RhbnRzIChSRkMgNzI1MikuCisgKgorICovCitlbnVtCit7CisgICAga0Fja1RpbWVvdXQgICAgICAgICAgICAgICAgID0gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfVElNRU9VVCwKKyAgICBrQWNrUmFuZG9tRmFjdG9yTnVtZXJhdG9yICAgPSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX05VTUVSQVRPUiwKKyAgICBrQWNrUmFuZG9tRmFjdG9yRGVub21pbmF0b3IgPSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX0RFTk9NSU5BVE9SLAorICAgIGtNYXhSZXRyYW5zbWl0ICAgICAgICAgICAgICA9IE9QRU5USFJFQURfQ09ORklHX0NPQVBfTUFYX1JFVFJBTlNNSVQsCisgICAga05TdGFydCAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgICBrRGVmYXVsdExlaXN1cmUgICAgICAgICAgICAgPSA1LAorICAgIGtQcm9iaW5nUmF0ZSAgICAgICAgICAgICAgICA9IDEsCisKKyAgICAvLyBOb3RlIHRoYXQgMiA8PCAoa01heFJldHJhbnNtaXQgLSAxKSBpcyBlcXVhbCB0byBrTWF4UmV0cmFuc21pdCBwb3dlciBvZiAyCisgICAga01heFRyYW5zbWl0U3BhbiAgICAgICAgICAgID0ga0Fja1RpbWVvdXQgKiAoKDIgPDwgKGtNYXhSZXRyYW5zbWl0IC0gMSkpIC0gMSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBY2tSYW5kb21GYWN0b3JOdW1lcmF0b3IgLyBrQWNrUmFuZG9tRmFjdG9yRGVub21pbmF0b3IsCisgICAga01heFRyYW5zbWl0V2FpdCAgICAgICAgICAgID0ga0Fja1RpbWVvdXQgKiAoKDIgPDwga01heFJldHJhbnNtaXQpIC0gMSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBY2tSYW5kb21GYWN0b3JOdW1lcmF0b3IgLyBrQWNrUmFuZG9tRmFjdG9yRGVub21pbmF0b3IsCisgICAga01heExhdGVuY3kgICAgICAgICAgICAgICAgID0gMTAwLAorICAgIGtQcm9jZXNzaW5nRGVsYXkgICAgICAgICAgICA9IGtBY2tUaW1lb3V0LAorICAgIGtNYXhSdHQgICAgICAgICAgICAgICAgICAgICA9IDIgKiBrTWF4TGF0ZW5jeSArIGtQcm9jZXNzaW5nRGVsYXksCisgICAga0V4Y2hhbmdlTGlmZXRpbWUgICAgICAgICAgID0ga01heFRyYW5zbWl0U3BhbiArIDIgKiAoa01heExhdGVuY3kpICsga1Byb2Nlc3NpbmdEZWxheSwKKyAgICBrTm9uTGlmZXRpbWUgICAgICAgICAgICAgICAgPSBrTWF4VHJhbnNtaXRTcGFuICsga01heExhdGVuY3kKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIG1ldGFkYXRhIHJlcXVpcmVkIGZvciBDb0FQIHJldHJhbnNtaXNzaW9uLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvYXBNZXRhZGF0YQoreworICAgIGZyaWVuZCBjbGFzcyBDb2FwOworCitwdWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ29hcE1ldGFkYXRhKHZvaWQpOgorICAgICAgICBtRGVzdGluYXRpb25Qb3J0KDApLAorICAgICAgICBtUmVzcG9uc2VIYW5kbGVyKE5VTEwpLAorICAgICAgICBtUmVzcG9uc2VDb250ZXh0KE5VTEwpLAorICAgICAgICBtTmV4dFRpbWVyU2hvdCgwKSwKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZW91dCgwKSwKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uQ291bnQoMCksCisgICAgICAgIG1BY2tub3dsZWRnZWQoZmFsc2UpLAorICAgICAgICBtQ29uZmlybWFibGUoZmFsc2UpIHt9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0IHdpdGggc3BlY2lmaWMgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbmZpcm1hYmxlICBJbmZvcm1hdGlvbiBpZiB0aGUgcmVxdWVzdCBpcyBjb25maXJtYWJsZSBvciBub3QuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBZGRyZXNzaW5nIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgUG9pbnRlciB0byBhIGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRoZSByZXNwb25zZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIENvbnRleHQgZm9yIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLgorICAgICAqCisgICAgICovCisgICAgQ29hcE1ldGFkYXRhKGJvb2wgYUNvbmZpcm1hYmxlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyByZXF1ZXN0IGRhdGEgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgcmVxdWVzdCBkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHJlcXVlc3QgZGF0YSBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIGludCBVcGRhdGVJbihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1OZXh0VGltZXJTaG90KSA+IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1OZXh0VGltZXJTaG90KSA8IDApOyB9OworCitwcml2YXRlOgorICAgIElwNjo6QWRkcmVzcyAgICAgICAgICBtU291cmNlQWRkcmVzczsgICAgICAgICAvLy88IElQdjYgYWRkcmVzcyBvZiB0aGUgbWVzc2FnZSBzb3VyY2UuCisgICAgSXA2OjpBZGRyZXNzICAgICAgICAgIG1EZXN0aW5hdGlvbkFkZHJlc3M7ICAgIC8vLzwgSVB2NiBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtRGVzdGluYXRpb25Qb3J0OyAgICAgICAvLy88IFVEUCBwb3J0IG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIG90Q29hcFJlc3BvbnNlSGFuZGxlciBtUmVzcG9uc2VIYW5kbGVyOyAgICAgICAvLy88IEEgZnVuY3Rpb24gcG9pbnRlciB0aGF0IGlzIGNhbGxlZCBvbiByZXNwb25zZSByZWNlcHRpb24uCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICptUmVzcG9uc2VDb250ZXh0OyAgICAgIC8vLzwgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgIHVpbnQzMl90ICAgICAgICAgICAgICBtTmV4dFRpbWVyU2hvdDsgICAgICAgICAvLy88IFRpbWUgd2hlbiB0aGUgdGltZXIgc2hvdWxkIHNob290IGZvciB0aGlzIG1lc3NhZ2UuCisgICAgdWludDMyX3QgICAgICAgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVvdXQ7IC8vLzwgRGVsYXkgdGhhdCBpcyBhcHBsaWVkIHRvIG5leHQgcmV0cmFuc21pc3Npb24uCisgICAgdWludDhfdCAgICAgICAgICAgICAgIG1SZXRyYW5zbWlzc2lvbkNvdW50OyAgIC8vLzwgTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucy4KKyAgICBib29sICAgICAgICAgICAgICAgICAgbUFja25vd2xlZGdlZDogMTsgICAgICAgLy8vPCBJbmZvcm1hdGlvbiB0aGF0IHJlcXVlc3Qgd2FzIGFja25vd2xlZGdlZC4KKyAgICBib29sICAgICAgICAgICAgICAgICAgbUNvbmZpcm1hYmxlOiAxOyAgICAgICAgLy8vPCBJbmZvcm1hdGlvbiB0aGF0IG1lc3NhZ2UgaXMgY29uZmlybWFibGUuCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ29BUCByZXNvdXJjZSBoYW5kbGluZy4KKyAqCisgKi8KK2NsYXNzIFJlc291cmNlIDogcHVibGljIG90Q29hcFJlc291cmNlCit7CisgICAgZnJpZW5kIGNsYXNzIENvYXA7CisKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4UmVjZWl2ZWRVcmlQYXRoID0gMzIsICAgLy8vPCBNYXhpbXVtIHN1cHBvcnRlZCBVUkkgcGF0aCBvbiByZWNlaXZlZCBtZXNzYWdlcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVXJpUGF0aCAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyBmb3IgdGhlIFVyaS1QYXRoLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBpcyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgYSBDb0FQIG1lc3NhZ2UgZm9yIEBwIGFVcmlQYXRoLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICovCisgICAgUmVzb3VyY2UoY29uc3QgY2hhciAqYVVyaVBhdGgsIG90Q29hcFJlcXVlc3RIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkgeworICAgICAgICBtVXJpUGF0aCA9IGFVcmlQYXRoOworICAgICAgICBtSGFuZGxlciA9IGFIYW5kbGVyOworICAgICAgICBtQ29udGV4dCA9IGFDb250ZXh0OworICAgICAgICBtTmV4dCA9IE5VTEw7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIFBvaW50ZXIgdG8gdGhlIG5leHQgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBSZXNvdXJjZSAqR2V0TmV4dCh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZSAqPihtTmV4dCk7IH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBIYW5kbGVSZXF1ZXN0KEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykgY29uc3QgeworICAgICAgICBtSGFuZGxlcihtQ29udGV4dCwgJmFIZWFkZXIsICZhTWVzc2FnZSwgJmFNZXNzYWdlSW5mbyk7CisgICAgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIGNhY2hpbmcgQ29BUCByZXNwb25zZXMuCisgKgorICovCitjbGFzcyBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGluZyBlbXB0eSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyKHZvaWQpOiBtRGVxdWV1ZVRpbWUoMCksIG1NZXNzYWdlSW5mbygpIHt9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBjcmVhdGluZyBvYmplY3Qgd2l0aCB2YWxpZCBkZXF1ZXVlIHRpbWUgYW5kIG1lc3NhZ2UgaW5mby4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgVGhlIG1lc3NhZ2UgaW5mbyBjb250YWluaW5nIHNvdXJjZSBlbmRwb2ludCBpZGVudGlmaWNhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIEVucXVldWVkUmVzcG9uc2VIZWFkZXIoY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKToKKyAgICAgICAgbURlcXVldWVUaW1lKFRpbWVyOjpHZXROb3coKSArIFRpbWVyOjpTZWNUb01zZWMoa0V4Y2hhbmdlTGlmZXRpbWUpKSwKKyAgICAgICAgbU1lc3NhZ2VJbmZvKGFNZXNzYWdlSW5mbykge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZCBtZXRhZGF0YSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgcmVxdWVzdCBkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgbWV0YWRhdGEgZnJvbSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIFJlbW92ZUZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgYXNzZXJ0KGFNZXNzYWdlLlNldExlbmd0aChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZihFbnF1ZXVlZFJlc3BvbnNlSGVhZGVyKSkgPT0gT1RfRVJST1JfTk9ORSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWUgIEEgdGltZSB0byBjb21wYXJlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICogQHJldHZhbCBGQUxTRSAgT3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1EZXF1ZXVlVGltZSkgPiAwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIHdoaWNoIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBzZW50LgorICAgICAqCisgICAgICogQHJldHVybnMgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIHdoaWNoIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBzZW50LgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UmVtYWluaW5nVGltZSh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1lc3NhZ2UgaW5mbyBvZiBjYWNoZWQgQ29BUCByZXNwb25zZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUaGUgbWVzc2FnZSBpbmZvIG9mIHRoZSBjYWNoZWQgQ29BUCByZXNwb25zZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJkdldE1lc3NhZ2VJbmZvKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NZXNzYWdlSW5mbzsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1EZXF1ZXVlVGltZTsKKyAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvIG1NZXNzYWdlSW5mbzsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBjYWNoZXMgQ29BUCByZXNwb25zZXMgdG8gaW1wbGVtZW50IG1lc3NhZ2UgZGVkdXBsaWNhdGlvbi4KKyAqCisgKi8KK2NsYXNzIFJlc3BvbnNlc1F1ZXVlCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgQ29BUCBzZXJ2ZXIgc2hvdWxkIGJlIGFzc2lnbmVkIHRvLgorICAgICAqCisgICAgICovCisgICAgUmVzcG9uc2VzUXVldWUoVGhyZWFkTmV0aWYgJmFOZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBBZGQgZ2l2ZW4gcmVzcG9uc2UgdG8gdGhlIGNhY2hlLgorICAgICAqCisgICAgICogSWYgbWF0Y2hpbmcgcmVzcG9uc2UgKHRoZSBzYW1lIE1lc3NhZ2UgSUQsIHNvdXJjZSBlbmRwb2ludCBhZGRyZXNzIGFuZCBwb3J0KSBleGlzdHMgaW4gdGhlIGNhY2hlIGdpdmVuCisgICAgICogcmVzcG9uc2UgaXMgbm90IGFkZGVkLgorICAgICAqIFRoZSBDb0FQIHJlc3BvbnNlIGlzIGNvcGllZCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGNhY2hlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgQ29BUCByZXNwb25zZSB0byBhZGQgdG8gdGhlIGNhY2hlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBFbnF1ZXVlUmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIG9sZGVzdCByZXNwb25zZSBmcm9tIHRoZSBjYWNoZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRGVxdWV1ZU9sZGVzdFJlc3BvbnNlKHZvaWQpOworCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFsbCByZXNwb25zZXMgZnJvbSB0aGUgY2FjaGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIERlcXVldWVBbGxSZXNwb25zZXModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBjb3B5IG9mIENvQVAgcmVzcG9uc2UgZnJvbSB0aGUgY2FjaGUgdGhhdCBtYXRjaGVzIGdpdmVuIE1lc3NhZ2UgSUQgYW5kIHNvdXJjZSBlbmRwb2ludC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgICAgICAgVGhlIENvQVAgbWVzc2FnZSBoZWFkZXIgY29udGFpbmluZyBNZXNzYWdlIElELgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgVGhlIG1lc3NhZ2UgaW5mbyBjb250YWluaW5nIHNvdXJjZSBlbmRwb2ludCBhZGRyZXNzIGFuZCBwb3J0LgorICAgICAqIEBwYXJhbVtvdXRdIGFSZXNwb25zZSAgICAgQSBwb2ludGVyIHRvIGEgY29weSBvZiBhIGNhY2hlZCBDb0FQIHJlc3BvbnNlIG1hdGNoaW5nIGdpdmVuIGFyZ3VtZW50cy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBNYXRjaGluZyByZXNwb25zZSBmb3VuZCBhbmQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYSBjb3B5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICBNYXRjaGluZyByZXNwb25zZSBmb3VuZCBidXQgdGhlcmUgaXMgbm90IHN1ZmZpY2llbnQgYnVmZmVyIHRvIGNyZWF0ZSBhIGNvcHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE1hdGNoaW5nIHJlc3BvbnNlIG5vdCBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShjb25zdCBIZWFkZXIgJmFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAqKmFSZXNwb25zZSk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBjb3B5IG9mIENvQVAgcmVzcG9uc2UgZnJvbSB0aGUgY2FjaGUgdGhhdCBtYXRjaGVzIGdpdmVuIE1lc3NhZ2UgSUQgYW5kIHNvdXJjZSBlbmRwb2ludC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXF1ZXN0ICAgICAgVGhlIENvQVAgbWVzc2FnZSBjb250YWluaW5nIE1lc3NhZ2UgSUQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBUaGUgbWVzc2FnZSBpbmZvIGNvbnRhaW5pbmcgc291cmNlIGVuZHBvaW50IGFkZHJlc3MgYW5kIHBvcnQuCisgICAgICogQHBhcmFtW291dF0gYVJlc3BvbnNlICAgICBBIHBvaW50ZXIgdG8gYSBjb3B5IG9mIGEgY2FjaGVkIENvQVAgcmVzcG9uc2UgbWF0Y2hpbmcgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIE1hdGNoaW5nIHJlc3BvbnNlIGZvdW5kIGFuZCBzdWNjZXNzZnVsbHkgY3JlYXRlZCBhIGNvcHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgIE1hdGNoaW5nIHJlc3BvbnNlIGZvdW5kIGJ1dCB0aGVyZSBpcyBub3Qgc3VmZmljaWVudCBidWZmZXIgdG8gY3JlYXRlIGEgY29weS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTWF0Y2hpbmcgcmVzcG9uc2Ugbm90IGZvdW5kLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgICAgICBDb3VsZCBub3QgcGFyc2UgQ29BUCBoZWFkZXIgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TWF0Y2hlZFJlc3BvbnNlQ29weShjb25zdCBNZXNzYWdlICZhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICoqYVJlc3BvbnNlKTsKKworICAgIC8qKgorICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgY2FjaGVkIENvQVAgcmVzcG9uc2VzIHF1ZXVlLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBjYWNoZWQgQ29BUCByZXNwb25zZXMgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldFJlc3BvbnNlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtUXVldWU7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4Q2FjaGVkUmVzcG9uc2VzID0gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9TRVJWRVJfTUFYX0NBQ0hFRF9SRVNQT05TRVMsCisgICAgfTsKKworICAgIHZvaWQgRGVxdWV1ZVJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlKSB7IG1RdWV1ZS5EZXF1ZXVlKGFNZXNzYWdlKTsgYU1lc3NhZ2UuRnJlZSgpOyB9CisgICAgc3RhdGljIFJlc3BvbnNlc1F1ZXVlICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIE1lc3NhZ2VRdWV1ZSBtUXVldWU7CisgICAgVGltZXIgICAgICAgIG1UaW1lcjsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBDb0FQIGNsaWVudCBhbmQgc2VydmVyLgorICoKKyAqLworY2xhc3MgQ29hcDogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworICAgIGZyaWVuZCBjbGFzcyBSZXNwb25zZXNRdWV1ZTsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgYmVmb3JlIENvQVAgc2VydmVyIHByb2Nlc3NpbmcgYSBDb0FQIHBhY2tldHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICBAIEBwYXJhbVtpbl0gICBhTWVzc2FnZUluZm8gICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFDb250ZXh0ICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgIFNlcnZlciBzaG91bGQgY29udGludWUgcHJvY2Vzc2luZyB0aGlzIG1lc3NhZ2UsIG90aGVyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzIGluZGljYXRlcyB0aGUgc2VydmVyIHNob3VsZCBzdG9wIHByb2Nlc3NpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT1RfVE1GICAgIFRoZSBtZXNzYWdlIGlzIG5vdCBhIFRNRiBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdEVycm9yKCogSW50ZXJjZXB0b3IpKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgICBBIHJlZmVyZW5jZSB0byB0aGUgTmV0aWYgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ29hcChUaHJlYWROZXRpZiAmYU5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBsb2NhbCBVRFAgcG9ydCB0byBiaW5kIHRvLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh1aW50MTZfdCBhUG9ydCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvcnQgbnVtYmVyIHVzZWQgYnkgQ29BUCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb3J0IG51bWJlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFBvcnQodm9pZCkgeyByZXR1cm4gbVNvY2tldC5HZXRTb2NrTmFtZSgpLm1Qb3J0OyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIHJlc291cmNlIHRvIHRoZSBDb0FQIHNlcnZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNvdXJjZSAgQSByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgQHAgYVJlc291cmNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIEBwIGFSZXNvdXJjZSB3YXMgYWxyZWFkeSBhZGRlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkUmVzb3VyY2UoUmVzb3VyY2UgJmFSZXNvdXJjZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgcmVzb3VyY2UgZnJvbSB0aGUgQ29BUCBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzb3VyY2UgIEEgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlUmVzb3VyY2UoUmVzb3VyY2UgJmFSZXNvdXJjZSk7CisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgaGFuZGxlciBmb3IgdW5oYW5kbGVkIENvQVAgcmVxdWVzdHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgIEEgZnVuY3Rpb24gcG9pbnRlciB0aGF0IHNoYWxsIGJlIGNhbGxlZCB3aGVuIGFuIHVuaGFuZGxlZCByZXF1ZXN0IGFycml2ZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uIE1heSBiZSBOVUxMIGlmIG5vdCB1c2VkLgorICAgICAqLworICAgIHZvaWQgU2V0RGVmYXVsdEhhbmRsZXIob3RDb2FwUmVxdWVzdEhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgbWVzc2FnZSB3aXRoIGEgQ29BUCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGVhZGVyICAgICAgQSByZWZlcmVuY2UgdG8gYSBDb0FQIGhlYWRlciB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFQcm9yaXR5ICAgICBUaGUgbWVzc2FnZSBwcmlvcml0eSBsZXZlbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBvciBOVUxMIGlmIGZhaWxlZCB0byBhbGxvY2F0ZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqTmV3TWVzc2FnZShjb25zdCBIZWFkZXIgJmFIZWFkZXIsIHVpbnQ4X3QgYVByaW9yaXR5ID0ga0RlZmF1bHRDb2FwTWVzc2FnZVByaW9yaXR5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQ29BUCBtZXNzYWdlLgorICAgICAqCisgICAgICogSWYgYSByZXNwb25zZSBmb3IgYSByZXF1ZXN0IGlzIGV4cGVjdGVkLCByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4KKyAgICAgKiBJZiBubyByZXNwb25zZSBpcyBleHBlY3RlZCwgdGhlc2UgYXJndW1lbnRzIHNob3VsZCBiZSBOVUxMIHBvaW50ZXJzLgorICAgICAqIElmIE1lc3NhZ2UgSWQgd2FzIG5vdCBzZXQgaW4gdGhlIGhlYWRlciAoZXF1YWwgdG8gMCksIHRoaXMgZnVuY3Rpb24gd2lsbCBhc3NpZ24gdW5pcXVlIE1lc3NhZ2UgSWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgICAgIEEgZnVuY3Rpb24gcG9pbnRlciB0aGF0IHNoYWxsIGJlIGNhbGxlZCBvbiByZXNwb25zZSByZWNlcHRpb24gb3IgdGltZS1vdXQuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzZW50IENvQVAgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEZhaWxlZCB0byBhbGxvY2F0ZSByZXRyYW5zbWlzc2lvbiBkYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQ29BUCByZXNldCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kUmVzZXQoSGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSB7CisgICAgICAgIHJldHVybiBTZW5kRW1wdHlNZXNzYWdlKE9UX0NPQVBfVFlQRV9SRVNFVCwgYVJlcXVlc3RIZWFkZXIsIGFNZXNzYWdlSW5mbyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGhlYWRlci1vbmx5IENvQVAgcmVzcG9uc2UgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb2RlICAgICAgICAgICBUaGUgQ29BUCBjb2RlIG9mIHRoaXMgcmVzcG9uc2UuCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kSGVhZGVyUmVzcG9uc2UoSGVhZGVyOjpDb2RlIGFDb2RlLCBjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBDb0FQIEFDSyBlbXB0eSBtZXNzYWdlIHdoaWNoIGlzIHVzZWQgaW4gU2VwYXJhdGUgUmVzcG9uc2UgZm9yIGNvbmZpcm1hYmxlIHJlcXVlc3RzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kQWNrKEhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykgeworICAgICAgICByZXR1cm4gU2VuZEVtcHR5TWVzc2FnZShPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQsIGFSZXF1ZXN0SGVhZGVyLCBhTWVzc2FnZUluZm8pOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIENvQVAgQUNLIG1lc3NhZ2Ugb24gd2hpY2ggYSBkdW1teSBDb0FQIHJlc3BvbnNlIGlzIHBpZ2d5YmFja2VkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlcXVlc3RIZWFkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBDb0FQIEhlYWRlciB0aGF0IHdhcyB1c2VkIGluIENvQVAgcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gICAgVGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb0FQIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBzZW5kIHRoZSBDb0FQIHJlc3BvbnNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgQHAgYVJlcXVlc3RIZWFkZXIgaGVhZGVyIGlzIG5vdCBvZiBjb25maXJtYWJsZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRW1wdHlBY2soY29uc3QgSGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSB7CisgICAgICAgIHJldHVybiAoYVJlcXVlc3RIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSA/CisgICAgICAgICAgICAgICAgU2VuZEhlYWRlclJlc3BvbnNlKE9UX0NPQVBfQ09ERV9DSEFOR0VELCBhUmVxdWVzdEhlYWRlciwgYU1lc3NhZ2VJbmZvKSA6CisgICAgICAgICAgICAgICAgT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGhlYWRlci1vbmx5IENvQVAgbWVzc2FnZSB0byBpbmRpY2F0ZSBubyByZXNvdXJjZSBtYXRjaGVkIGZvciB0aGUgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXF1ZXN0SGVhZGVyICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgQ29BUCBIZWFkZXIgdGhhdCB3YXMgdXNlZCBpbiBDb0FQIHJlcXVlc3QuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICAgICAgICAgIFRoZSBtZXNzYWdlIGluZm8gY29ycmVzcG9uZGluZyB0byB0aGUgQ29BUCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBDb0FQIHJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIHNlbmQgdGhlIENvQVAgcmVzcG9uc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmROb3RGb3VuZChjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pIHsKKyAgICAgICAgcmV0dXJuIFNlbmRIZWFkZXJSZXNwb25zZShPVF9DT0FQX0NPREVfTk9UX0ZPVU5ELCBhUmVxdWVzdEhlYWRlciwgYU1lc3NhZ2VJbmZvKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhYm9ydHMgQ29BUCB0cmFuc2FjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhhbmRsZXIgYW5kIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgQSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBlbmRzLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGFib3J0ZWQgQ29BUCB0cmFuc2FjdGlvbnMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvQVAgdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhhbmRsZXIgd2FzIG5vdCBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWJvcnRUcmFuc2FjdGlvbihvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgaW50ZXJjZXB0b3IgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIGEgQ29BUCBwYWNrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUludGVyY2VwdG9yICAgIEEgcG9pbnRlciB0byB0aGUgaW50ZXJjZXB0b3IuCisgICAgICogQHBhcmFtW2luXSAgIGFDb250ZXh0ICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEludGVyY2VwdG9yKEludGVyY2VwdG9yIGFJbnRlcmNlcHRvciwgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgbUludGVyY2VwdG9yID0gYUludGVyY2VwdG9yOworICAgICAgICBtQ29udGV4dCA9IGFDb250ZXh0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBsaXN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBsaXN0LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTWVzc2FnZVF1ZXVlICZHZXRSZXF1ZXN0TWVzc2FnZXModm9pZCkgY29uc3QgeyByZXR1cm4gbVBlbmRpbmdSZXF1ZXN0czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY2FjaGVkIHJlc3BvbnNlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgY2FjaGVkIHJlc3BvbnNlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldENhY2hlZFJlc3BvbnNlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtUmVzcG9uc2VzUXVldWUuR2V0UmVzcG9uc2VzKCk7IH0KKworcHJvdGVjdGVkOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmQgYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSB0byBzZW5kLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgU2VuZChNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlY2VpdmVzIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIHJlY2VpdmVkIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdENvYXBNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlOjprUHJpb3JpdHlMb3csCisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisKKyAgICBNZXNzYWdlICpDb3B5QW5kRW5xdWV1ZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFDb3B5TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEpOworICAgIHZvaWQgRGVxdWV1ZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIE1lc3NhZ2UgKkZpbmRSZWxhdGVkUmVxdWVzdChjb25zdCBIZWFkZXIgJmFSZXNwb25zZUhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBDb2FwTWV0YWRhdGEgJmFDb2FwTWV0YWRhdGEpOworICAgIHZvaWQgRmluYWxpemVDb2FwVHJhbnNhY3Rpb24oTWVzc2FnZSAmYVJlcXVlc3QsIGNvbnN0IENvYXBNZXRhZGF0YSAmYUNvYXBNZXRhZGF0YSwgSGVhZGVyICphUmVzcG9uc2VIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICphUmVzcG9uc2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKworICAgIHZvaWQgUHJvY2Vzc1JlY2VpdmVkUmVxdWVzdChIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIHZvaWQgUHJvY2Vzc1JlY2VpdmVkUmVzcG9uc2UoSGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIG90RXJyb3IgU2VuZENvcHkoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kRW1wdHlNZXNzYWdlKEhlYWRlcjo6VHlwZSBhVHlwZSwgY29uc3QgSGVhZGVyICZhUmVxdWVzdEhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlUmV0cmFuc21pc3Npb25UaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyBDb2FwICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBNZXNzYWdlUXVldWUgbVBlbmRpbmdSZXF1ZXN0czsKKyAgICB1aW50MTZfdCBtTWVzc2FnZUlkOworICAgIFRpbWVyIG1SZXRyYW5zbWlzc2lvblRpbWVyOworCisgICAgUmVzb3VyY2UgKm1SZXNvdXJjZXM7CisKKyAgICB2b2lkICAgICAgICAgICAqbUNvbnRleHQ7CisgICAgSW50ZXJjZXB0b3IgICAgbUludGVyY2VwdG9yOworICAgIFJlc3BvbnNlc1F1ZXVlIG1SZXNwb25zZXNRdWV1ZTsKKworICAgIG90Q29hcFJlcXVlc3RIYW5kbGVyIG1EZWZhdWx0SGFuZGxlcjsKKyAgICB2b2lkICptRGVmYXVsdEhhbmRsZXJDb250ZXh0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENPQVBfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5jcHAgYi9zcmMvY29yZS9jb2FwL2NvYXBfaGVhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRkMmNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5jcHAKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIENvQVAgaGVhZGVyIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjb2FwX2hlYWRlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENvYXAgeworCit2b2lkIEhlYWRlcjo6SW5pdCh2b2lkKQoreworICAgIG1IZWFkZXJMZW5ndGggPSBrTWluSGVhZGVyTGVuZ3RoOworICAgIG1PcHRpb25MYXN0ID0gMDsKKyAgICBtRmlyc3RPcHRpb25PZmZzZXQgPSAwOworICAgIG1OZXh0T3B0aW9uT2Zmc2V0ID0gMDsKKyAgICBtZW1zZXQoJm1PcHRpb24sIDAsIHNpemVvZihtT3B0aW9uKSk7CisgICAgbWVtc2V0KCZtSGVhZGVyLCAwLCBzaXplb2YobUhlYWRlcikpOworICAgIFNldFZlcnNpb24oa1ZlcnNpb24xKTsKK30KKwordm9pZCBIZWFkZXI6OkluaXQoVHlwZSBhVHlwZSwgQ29kZSBhQ29kZSkKK3sKKyAgICBJbml0KCk7CisgICAgU2V0VHlwZShhVHlwZSk7CisgICAgU2V0Q29kZShhQ29kZSk7Cit9CisKK290RXJyb3IgSGVhZGVyOjpGcm9tTWVzc2FnZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU1ldGFkYXRhU2l6ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKyAgICB1aW50OF90IHRva2VuTGVuZ3RoOworICAgIGJvb2wgZmlyc3RPcHRpb24gPSB0cnVlOworICAgIHVpbnQxNl90IG9wdGlvbkRlbHRhOworICAgIHVpbnQxNl90IG9wdGlvbkxlbmd0aDsKKworICAgIGxlbmd0aCAtPSBhTWV0YWRhdGFTaXplOworCisgICAgSW5pdCgpOworCisgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA+PSBrVG9rZW5PZmZzZXQsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBrVG9rZW5PZmZzZXQsIG1IZWFkZXIubUJ5dGVzKTsKKyAgICBtSGVhZGVyTGVuZ3RoID0ga1Rva2VuT2Zmc2V0OworICAgIG9mZnNldCArPSBrVG9rZW5PZmZzZXQ7CisgICAgbGVuZ3RoIC09IGtUb2tlbk9mZnNldDsKKworICAgIFZlcmlmeU9yRXhpdChHZXRWZXJzaW9uKCkgPT0gMSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICB0b2tlbkxlbmd0aCA9IEdldFRva2VuTGVuZ3RoKCk7CisgICAgVmVyaWZ5T3JFeGl0KHRva2VuTGVuZ3RoIDw9IGtNYXhUb2tlbkxlbmd0aCAmJiB0b2tlbkxlbmd0aCA8PSBsZW5ndGgsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCB0b2tlbkxlbmd0aCwgbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoKTsKKyAgICBtSGVhZGVyTGVuZ3RoICs9IHRva2VuTGVuZ3RoOworICAgIG9mZnNldCArPSB0b2tlbkxlbmd0aDsKKyAgICBsZW5ndGggLT0gdG9rZW5MZW5ndGg7CisKKyAgICB3aGlsZSAobGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBrTWF4T3B0aW9uSGVhZGVyU2l6ZSwgbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoKTsKKworICAgICAgICBpZiAobUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gPT0gMHhmZikKKyAgICAgICAgeworICAgICAgICAgICAgbUhlYWRlckxlbmd0aCArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgLy8gUkZDNzI1MjogVGhlIHByZXNlbmNlIG9mIGEgbWFya2VyIGZvbGxvd2VkIGJ5IGEgemVyby1sZW5ndGggcGF5bG9hZCBNVVNUIGJlIHByb2Nlc3NlZAorICAgICAgICAgICAgLy8gYXMgYSBtZXNzYWdlIGZvcm1hdCBlcnJvci4KKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdE9wdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbUZpcnN0T3B0aW9uT2Zmc2V0ID0gbUhlYWRlckxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIG9wdGlvbkRlbHRhID0gbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gPj4gNDsKKyAgICAgICAgb3B0aW9uTGVuZ3RoID0gbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gJiAweGY7CisgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQ4X3QpOworCisgICAgICAgIGlmIChvcHRpb25EZWx0YSA8IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbkRlbHRhID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uRGVsdGEgPSBrT3B0aW9uMUJ5dGVFeHRlbnNpb25PZmZzZXQgKyBtSGVhZGVyLm1CeXRlc1ttSGVhZGVyTGVuZ3RoXTsKKyAgICAgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIGxlbmd0aCAtPSBzaXplb2YodWludDhfdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob3B0aW9uRGVsdGEgPT0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25EZWx0YSA9IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PigobUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF0gPDwgOCkgfCBtSGVhZGVyLm1CeXRlc1ttSGVhZGVyTGVuZ3RoICsgMV0pOworICAgICAgICAgICAgbUhlYWRlckxlbmd0aCArPSBzaXplb2YodWludDE2X3QpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0aW9uTGVuZ3RoIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob3B0aW9uTGVuZ3RoID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uTGVuZ3RoID0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsgbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aF07CisgICAgICAgICAgICBtSGVhZGVyTGVuZ3RoICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBsZW5ndGggLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbkxlbmd0aCA9PSBrT3B0aW9uMkJ5dGVFeHRlbnNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbkxlbmd0aCA9IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKG1IZWFkZXIubUJ5dGVzW21IZWFkZXJMZW5ndGhdIDw8IDgpIHwgbUhlYWRlci5tQnl0ZXNbbUhlYWRlckxlbmd0aCArIDFdKTsKKyAgICAgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YodWludDE2X3QpOworICAgICAgICAgICAgbGVuZ3RoIC09IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpcnN0T3B0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtT3B0aW9uLm1OdW1iZXIgPSBvcHRpb25EZWx0YTsKKyAgICAgICAgICAgIG1PcHRpb24ubUxlbmd0aCA9IG9wdGlvbkxlbmd0aDsKKyAgICAgICAgICAgIG1PcHRpb24ubVZhbHVlID0gbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoOworICAgICAgICAgICAgbU5leHRPcHRpb25PZmZzZXQgPSBtSGVhZGVyTGVuZ3RoICsgb3B0aW9uTGVuZ3RoOworICAgICAgICAgICAgZmlyc3RPcHRpb24gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChvcHRpb25MZW5ndGggPD0gbGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIG9wdGlvbkxlbmd0aCwgbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoKTsKKyAgICAgICAgbUhlYWRlckxlbmd0aCArPSBzdGF0aWNfY2FzdDx1aW50OF90PihvcHRpb25MZW5ndGgpOworICAgICAgICBvZmZzZXQgKz0gb3B0aW9uTGVuZ3RoOworICAgICAgICBsZW5ndGggLT0gb3B0aW9uTGVuZ3RoOworICAgIH0KKworICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIC8vIE5vIHBheWxvYWQgcHJlc2VudCAtIHJldHVybiBzdWNjZXNzLgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCitleGl0OgorCisgICAgLy8gSW4gY2FzZSBhbnkgc3RlcCBmYWlsZWQsIHByZXZlbnQgYWNjZXNzIHRvIGNvcnJ1cHQgT3B0aW9uCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtRmlyc3RPcHRpb25PZmZzZXQgPSAwOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZE9wdGlvbihjb25zdCBPcHRpb24gJmFPcHRpb24pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmID0gbUhlYWRlci5tQnl0ZXMgKyBtSGVhZGVyTGVuZ3RoOworICAgIHVpbnQ4X3QgKmN1ciA9IGJ1ZiArIDE7CisgICAgdWludDE2X3Qgb3B0aW9uRGVsdGEgPSBhT3B0aW9uLm1OdW1iZXIgLSBtT3B0aW9uTGFzdDsKKyAgICB1aW50MTZfdCBvcHRpb25MZW5ndGg7CisKKyAgICAvLyBBc3N1cmUgdGhhdCBubyBvcHRpb24gaXMgaW5zZXJ0ZWQgb3V0IG9mIG9yZGVyLgorICAgIFZlcmlmeU9yRXhpdChhT3B0aW9uLm1OdW1iZXIgPj0gbU9wdGlvbkxhc3QsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgb3B0aW9uIHNpemUgYW5kIGNoZWNrIHRoZSBidWZmZXJzLgorICAgIG9wdGlvbkxlbmd0aCA9IDEgKyBhT3B0aW9uLm1MZW5ndGg7CisgICAgb3B0aW9uTGVuZ3RoICs9IG9wdGlvbkRlbHRhIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ID8gMCA6CisgICAgICAgICAgICAgICAgICAgIChvcHRpb25EZWx0YSA8IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCA/IDEgOiAyKTsKKyAgICBvcHRpb25MZW5ndGggKz0gYU9wdGlvbi5tTGVuZ3RoIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ID8gMCA6CisgICAgICAgICAgICAgICAgICAgIChhT3B0aW9uLm1MZW5ndGggPCBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQgPyAxIDogMik7CisgICAgVmVyaWZ5T3JFeGl0KG1IZWFkZXJMZW5ndGggKyBvcHRpb25MZW5ndGggPCBrTWF4SGVhZGVyTGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gSW5zZXJ0IG9wdGlvbiBkZWx0YS4KKyAgICBpZiAob3B0aW9uRGVsdGEgPCBrT3B0aW9uMUJ5dGVFeHRlbnNpb25PZmZzZXQpCisgICAgeworICAgICAgICAqYnVmID0gKG9wdGlvbkRlbHRhIDw8IE9wdGlvbjo6a09wdGlvbkRlbHRhT2Zmc2V0KSAmIE9wdGlvbjo6a09wdGlvbkRlbHRhTWFzazsKKyAgICB9CisgICAgZWxzZSBpZiAob3B0aW9uRGVsdGEgPCBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQpCisgICAgeworICAgICAgICAqYnVmIHw9IGtPcHRpb24xQnl0ZUV4dGVuc2lvbiA8PCBPcHRpb246OmtPcHRpb25EZWx0YU9mZnNldDsKKyAgICAgICAgKmN1cisrID0gKG9wdGlvbkRlbHRhIC0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0KSAmIDB4ZmY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpidWYgfD0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uIDw8IE9wdGlvbjo6a09wdGlvbkRlbHRhT2Zmc2V0OworICAgICAgICBvcHRpb25EZWx0YSAtPSBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQ7CisgICAgICAgICpjdXIrKyA9IG9wdGlvbkRlbHRhID4+IDg7CisgICAgICAgICpjdXIrKyA9IG9wdGlvbkRlbHRhICYgMHhmZjsKKyAgICB9CisKKyAgICAvLyBJbnNlcnQgb3B0aW9uIGxlbmd0aC4KKyAgICBpZiAoYU9wdGlvbi5tTGVuZ3RoIDwga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0KQorICAgIHsKKyAgICAgICAgKmJ1ZiB8PSBhT3B0aW9uLm1MZW5ndGg7CisgICAgfQorICAgIGVsc2UgaWYgKGFPcHRpb24ubUxlbmd0aCA8IGtPcHRpb24yQnl0ZUV4dGVuc2lvbk9mZnNldCkKKyAgICB7CisgICAgICAgICpidWYgfD0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uOworICAgICAgICAqY3VyKysgPSAoYU9wdGlvbi5tTGVuZ3RoIC0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0KSAmIDB4ZmY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpidWYgfD0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uOworICAgICAgICBvcHRpb25MZW5ndGggPSBhT3B0aW9uLm1MZW5ndGggLSBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQ7CisgICAgICAgICpjdXIrKyA9IG9wdGlvbkxlbmd0aCA+PiA4OworICAgICAgICAqY3VyKysgPSBvcHRpb25MZW5ndGggJiAweGZmOworICAgIH0KKworICAgIC8vIEluc2VydCBvcHRpb24gdmFsdWUuCisgICAgbWVtY3B5KGN1ciwgYU9wdGlvbi5tVmFsdWUsIGFPcHRpb24ubUxlbmd0aCk7CisgICAgY3VyICs9IGFPcHRpb24ubUxlbmd0aDsKKworICAgIG1IZWFkZXJMZW5ndGggKz0gc3RhdGljX2Nhc3Q8dWludDhfdD4oY3VyIC0gYnVmKTsKKyAgICBtT3B0aW9uTGFzdCA9IGFPcHRpb24ubU51bWJlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSGVhZGVyOjpBcHBlbmRVaW50T3B0aW9uKHVpbnQxNl90IGFOdW1iZXIsIHVpbnQzMl90IGFWYWx1ZSkKK3sKKyAgICBPcHRpb24gY29hcE9wdGlvbjsKKworICAgIGFWYWx1ZSA9IEVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzIoYVZhbHVlKTsKKyAgICBjb2FwT3B0aW9uLm1OdW1iZXIgPSBhTnVtYmVyOworICAgIGNvYXBPcHRpb24ubUxlbmd0aCA9IDQ7CisgICAgY29hcE9wdGlvbi5tVmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmFWYWx1ZSk7CisKKyAgICAvLyBza2lwIHByZWNlZGluZyB6ZXJvcworICAgIHdoaWxlIChjb2FwT3B0aW9uLm1WYWx1ZVswXSA9PSAwICYmIGNvYXBPcHRpb24ubUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBjb2FwT3B0aW9uLm1WYWx1ZSsrOworICAgICAgICBjb2FwT3B0aW9uLm1MZW5ndGgtLTsKKyAgICB9CisKKyAgICByZXR1cm4gQXBwZW5kT3B0aW9uKGNvYXBPcHRpb24pOworfQorCitvdEVycm9yIEhlYWRlcjo6QXBwZW5kT2JzZXJ2ZU9wdGlvbih1aW50MzJfdCBhT2JzZXJ2ZSkKK3sKKyAgICByZXR1cm4gQXBwZW5kVWludE9wdGlvbihPVF9DT0FQX09QVElPTl9PQlNFUlZFLCBhT2JzZXJ2ZSAmIDB4RkZGRkZGKTsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZFVyaVBhdGhPcHRpb25zKGNvbnN0IGNoYXIgKmFVcmlQYXRoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IGNoYXIgKmN1ciA9IGFVcmlQYXRoOworICAgIGNvbnN0IGNoYXIgKmVuZDsKKyAgICBIZWFkZXI6Ok9wdGlvbiBjb2FwT3B0aW9uOworCisgICAgY29hcE9wdGlvbi5tTnVtYmVyID0gT1RfQ09BUF9PUFRJT05fVVJJX1BBVEg7CisKKyAgICB3aGlsZSAoKGVuZCA9IHN0cmNocihjdXIsICcvJykpICE9IE5VTEwpCisgICAgeworICAgICAgICBjb2FwT3B0aW9uLm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZW5kIC0gY3VyKTsKKyAgICAgICAgY29hcE9wdGlvbi5tVmFsdWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oY3VyKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE9wdGlvbihjb2FwT3B0aW9uKSk7CisgICAgICAgIGN1ciA9IGVuZCArIDE7CisgICAgfQorCisgICAgY29hcE9wdGlvbi5tTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihjdXIpKTsKKyAgICBjb2FwT3B0aW9uLm1WYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihjdXIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRPcHRpb24oY29hcE9wdGlvbikpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZENvbnRlbnRGb3JtYXRPcHRpb24ob3RDb2FwT3B0aW9uQ29udGVudEZvcm1hdCBhQ29udGVudEZvcm1hdCkKK3sKKyAgICByZXR1cm4gQXBwZW5kVWludE9wdGlvbihPVF9DT0FQX09QVElPTl9DT05URU5UX0ZPUk1BVCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFDb250ZW50Rm9ybWF0KSk7Cit9CisKK290RXJyb3IgSGVhZGVyOjpBcHBlbmRNYXhBZ2VPcHRpb24odWludDMyX3QgYU1heEFnZSkKK3sKKyAgICByZXR1cm4gQXBwZW5kVWludE9wdGlvbihPVF9DT0FQX09QVElPTl9NQVhfQUdFLCBhTWF4QWdlKTsKK30KKworb3RFcnJvciBIZWFkZXI6OkFwcGVuZFVyaVF1ZXJ5T3B0aW9uKGNvbnN0IGNoYXIgKmFVcmlRdWVyeSkKK3sKKyAgICBPcHRpb24gY29hcE9wdGlvbjsKKworICAgIGNvYXBPcHRpb24ubU51bWJlciA9IE9UX0NPQVBfT1BUSU9OX1VSSV9RVUVSWTsKKyAgICBjb2FwT3B0aW9uLm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc3RybGVuKGFVcmlRdWVyeSkpOworICAgIGNvYXBPcHRpb24ubVZhbHVlICA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihhVXJpUXVlcnkpOworCisgICAgcmV0dXJuIEFwcGVuZE9wdGlvbihjb2FwT3B0aW9uKTsKK30KKworY29uc3QgSGVhZGVyOjpPcHRpb24gKkhlYWRlcjo6R2V0Rmlyc3RPcHRpb24odm9pZCkKK3sKKyAgICBjb25zdCBPcHRpb24gKnJ2YWwgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KG1GaXJzdE9wdGlvbk9mZnNldCA+IDApOworCisgICAgbWVtc2V0KCZtT3B0aW9uLCAwLCBzaXplb2YobU9wdGlvbikpOworICAgIG1OZXh0T3B0aW9uT2Zmc2V0ID0gbUZpcnN0T3B0aW9uT2Zmc2V0OworCisgICAgcnZhbCA9IEdldE5leHRPcHRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworY29uc3QgSGVhZGVyOjpPcHRpb24gKkhlYWRlcjo6R2V0TmV4dE9wdGlvbih2b2lkKQoreworICAgIE9wdGlvbiAqcnZhbCA9IE5VTEw7CisgICAgdWludDE2X3Qgb3B0aW9uRGVsdGE7CisgICAgdWludDE2X3Qgb3B0aW9uTGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KG1OZXh0T3B0aW9uT2Zmc2V0IDwgbUhlYWRlckxlbmd0aCk7CisKKyAgICBvcHRpb25EZWx0YSA9IG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XSA+PiA0OworICAgIG9wdGlvbkxlbmd0aCA9IG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XSAmIDB4ZjsKKyAgICBtTmV4dE9wdGlvbk9mZnNldCArPSBzaXplb2YodWludDhfdCk7CisKKyAgICBpZiAob3B0aW9uRGVsdGEgPCBrT3B0aW9uMUJ5dGVFeHRlbnNpb24pCisgICAgeworICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgfQorICAgIGVsc2UgaWYgKG9wdGlvbkRlbHRhID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIG9wdGlvbkRlbHRhID0ga09wdGlvbjFCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsgbUhlYWRlci5tQnl0ZXNbbU5leHRPcHRpb25PZmZzZXRdOworICAgICAgICBtTmV4dE9wdGlvbk9mZnNldCArPSBzaXplb2YodWludDhfdCk7CisgICAgfQorICAgIGVsc2UgaWYgKG9wdGlvbkRlbHRhID09IGtPcHRpb24yQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIG9wdGlvbkRlbHRhID0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XSA8PCA4KSB8IG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0ICsgMV0pOworICAgICAgICBtTmV4dE9wdGlvbk9mZnNldCArPSBzaXplb2YodWludDE2X3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgaWYgKG9wdGlvbkxlbmd0aCA8IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9CisgICAgZWxzZSBpZiAob3B0aW9uTGVuZ3RoID09IGtPcHRpb24xQnl0ZUV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIG9wdGlvbkxlbmd0aCA9IGtPcHRpb24xQnl0ZUV4dGVuc2lvbk9mZnNldCArIG1IZWFkZXIubUJ5dGVzW21OZXh0T3B0aW9uT2Zmc2V0XTsKKyAgICAgICAgbU5leHRPcHRpb25PZmZzZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgIH0KKyAgICBlbHNlIGlmIChvcHRpb25MZW5ndGggPT0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uKQorICAgIHsKKyAgICAgICAgb3B0aW9uTGVuZ3RoID0ga09wdGlvbjJCeXRlRXh0ZW5zaW9uT2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChtSGVhZGVyLm1CeXRlc1ttTmV4dE9wdGlvbk9mZnNldF0gPDwgOCkgfCBtSGVhZGVyLm1CeXRlc1ttTmV4dE9wdGlvbk9mZnNldCArIDFdKTsKKyAgICAgICAgbU5leHRPcHRpb25PZmZzZXQgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1PcHRpb24ubU51bWJlciArPSBvcHRpb25EZWx0YTsKKyAgICBtT3B0aW9uLm1MZW5ndGggPSBvcHRpb25MZW5ndGg7CisgICAgbU9wdGlvbi5tVmFsdWUgPSBtSGVhZGVyLm1CeXRlcyArIG1OZXh0T3B0aW9uT2Zmc2V0OworICAgIG1OZXh0T3B0aW9uT2Zmc2V0ICs9IG9wdGlvbkxlbmd0aDsKKyAgICBydmFsID0gc3RhdGljX2Nhc3Q8SGVhZGVyOjpPcHRpb24gKj4oJm1PcHRpb24pOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIEhlYWRlcjo6U2V0UGF5bG9hZE1hcmtlcih2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1IZWFkZXJMZW5ndGggPCBrTWF4SGVhZGVyTGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1IZWFkZXIubUJ5dGVzW21IZWFkZXJMZW5ndGgrK10gPSAweGZmOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBIZWFkZXI6OlNldFRva2VuKHVpbnQ4X3QgYVRva2VuTGVuZ3RoKQoreworICAgIGFzc2VydChhVG9rZW5MZW5ndGggPD0ga01heFRva2VuTGVuZ3RoKTsKKworICAgIHVpbnQ4X3QgdG9rZW5ba01heFRva2VuTGVuZ3RoXSA9IHsgMCB9OworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYVRva2VuTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICB0b2tlbltpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICB9CisKKyAgICBTZXRUb2tlbih0b2tlbiwgYVRva2VuTGVuZ3RoKTsKK30KKwordm9pZCBIZWFkZXI6OlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihjb25zdCBIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyKQoreworICAgIEluaXQoT1RfQ09BUF9UWVBFX0FDS05PV0xFREdNRU5ULCBPVF9DT0FQX0NPREVfQ0hBTkdFRCk7CisgICAgU2V0TWVzc2FnZUlkKGFSZXF1ZXN0SGVhZGVyLkdldE1lc3NhZ2VJZCgpKTsKKyAgICBTZXRUb2tlbihhUmVxdWVzdEhlYWRlci5HZXRUb2tlbigpLCBhUmVxdWVzdEhlYWRlci5HZXRUb2tlbkxlbmd0aCgpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5ocHAgYi9zcmMvY29yZS9jb2FwL2NvYXBfaGVhZGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWFhNGUyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29hcC9jb2FwX2hlYWRlci5ocHAKQEAgLTAsMCArMSw0OTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIENvQVAgaGVhZGVycy4KKyAqLworCisjaWZuZGVmIENPQVBfSEVBREVSX0hQUF8KKyNkZWZpbmUgQ09BUF9IRUFERVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29hcC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6OkNvYXAKKyAqIEBicmllZgorICogICBUaGlzIG5hbWVzcGFjZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgQ29BUC4KKyAqCisgKi8KK25hbWVzcGFjZSBDb2FwIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWNvYXAKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIENvQVAuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ29BUCBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK2NsYXNzIEhlYWRlciA6IHB1YmxpYyBvdENvYXBIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVmVyc2lvbjEgICAgICAgICAgID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWZXJzaW9uIDEKKyAgICAgICAga01pbkhlYWRlckxlbmd0aCAgICA9IDQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluaW11bSBoZWFkZXIgbGVuZ3RoCisgICAgICAgIGtNYXhIZWFkZXJMZW5ndGggICAgPSBPVF9DT0FQX0hFQURFUl9NQVhfTEVOR1RILCAvLy88IE1heGltdW0gaGVhZGVyIGxlbmd0aAorICAgICAgICBrRGVmYXVsdFRva2VuTGVuZ3RoID0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEZWZhdWx0IHRva2VuIGxlbmd0aAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb0FQIFR5cGUgdmFsdWVzLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdENvYXBUeXBlIFR5cGU7CisKKyAgICAvKioKKyAgICAgKiBDb0FQIENvZGUgdmFsdWVzLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiBvdENvYXBDb2RlIENvZGU7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQ29BUCBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQ29BUCBoZWFkZXIgd2l0aCBzcGVjaWZpYyBUeXBlIGFuZCBDb2RlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBUeXBlIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb2RlICBUaGUgQ29kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdChUeXBlIGFUeXBlLCBDb2RlIGFDb2RlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgQ29BUCBoZWFkZXIgZnJvbSBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTWV0YWRhdGFTaXplICBBIHNpemUgb2YgbWV0YWRhdGEgYXBwZW5kZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICBTdWNjZXNzZnVsbHkgcGFyc2VkIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfUEFSU0UgIEZhaWxlZCB0byBwYXJzZSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRnJvbU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFNZXRhZGF0YVNpemUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtSGVhZGVyLm1GaWVsZHMubVZlcnNpb25UeXBlVG9rZW4gJiBrVmVyc2lvbk1hc2spID4+IGtWZXJzaW9uT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pIHsKKyAgICAgICAgbUhlYWRlci5tRmllbGRzLm1WZXJzaW9uVHlwZVRva2VuICY9IH5rVmVyc2lvbk1hc2s7CisgICAgICAgIG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiB8PSBhVmVyc2lvbiA8PCBrVmVyc2lvbk9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhZGVyOjpUeXBlPihtSGVhZGVyLm1GaWVsZHMubVZlcnNpb25UeXBlVG9rZW4gJiBrVHlwZU1hc2spOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUeXBlKFR5cGUgYVR5cGUpIHsKKyAgICAgICAgbUhlYWRlci5tRmllbGRzLm1WZXJzaW9uVHlwZVRva2VuICY9IH5rVHlwZU1hc2s7CisgICAgICAgIG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiB8PSBhVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb2RlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvZGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBDb2RlIEdldENvZGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZT4obUhlYWRlci5tRmllbGRzLm1Db2RlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb2RlICBUaGUgQ29kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29kZShDb2RlIGFDb2RlKSB7IG1IZWFkZXIubUZpZWxkcy5tQ29kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFDb2RlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNZXNzYWdlIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0TWVzc2FnZUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUhlYWRlci5tRmllbGRzLm1NZXNzYWdlSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNzYWdlIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJZCAgVGhlIE1lc3NhZ2UgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1lc3NhZ2VJZCh1aW50MTZfdCBhTWVzc2FnZUlkKSB7IG1IZWFkZXIubUZpZWxkcy5tTWVzc2FnZUlkID0gSG9zdFN3YXAxNihhTWVzc2FnZUlkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVG9rZW4gbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRva2VuIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VG9rZW5MZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gKG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiAmIGtUb2tlbkxlbmd0aE1hc2spID4+IGtUb2tlbkxlbmd0aE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUb2tlbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFRva2VuKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1IZWFkZXIubUJ5dGVzICsga1Rva2VuT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUb2tlbiB2YWx1ZSBhbmQgbGVuZ3RoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRva2VuICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFRva2VuIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFUb2tlbkxlbmd0aCAgVGhlIExlbmd0aCBvZiBAcCBhVG9rZW4uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRva2VuKGNvbnN0IHVpbnQ4X3QgKmFUb2tlbiwgdWludDhfdCBhVG9rZW5MZW5ndGgpIHsKKyAgICAgICAgbUhlYWRlci5tRmllbGRzLm1WZXJzaW9uVHlwZVRva2VuID0gKG1IZWFkZXIubUZpZWxkcy5tVmVyc2lvblR5cGVUb2tlbiAmIH5rVG9rZW5MZW5ndGhNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYVRva2VuTGVuZ3RoIDw8IGtUb2tlbkxlbmd0aE9mZnNldCkgJiBrVG9rZW5MZW5ndGhNYXNrKTsKKyAgICAgICAgbWVtY3B5KG1IZWFkZXIubUJ5dGVzICsga1Rva2VuT2Zmc2V0LCBhVG9rZW4sIGFUb2tlbkxlbmd0aCk7CisgICAgICAgIG1IZWFkZXJMZW5ndGggKz0gYVRva2VuTGVuZ3RoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFRva2VuIGxlbmd0aCBhbmQgcmFuZG9taXplcyBpdHMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVG9rZW5MZW5ndGggIFRoZSBMZW5ndGggb2YgYSBUb2tlbiB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRva2VuKHVpbnQ4X3QgYVRva2VuTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqICBUaGlzIG1ldGhvZCBjaGVja3MgaWYgVG9rZW5zIGluIHR3byBDb0FQIGhlYWRlcnMgYXJlIGVxdWFsLgorICAgICAqCisgICAgICogIEBwYXJhbVtpbl0gIGFIZWFkZXIgIEEgaGVhZGVyIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0d28gVG9rZW5zIGFyZSBlcXVhbC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiBUb2tlbnMgZGlmZmVyIGluIGxlbmd0aCBvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNUb2tlbkVxdWFsKGNvbnN0IEhlYWRlciAmYUhlYWRlcikgY29uc3QgeworICAgICAgICByZXR1cm4gKCh0aGlzLT5HZXRUb2tlbkxlbmd0aCgpID09IGFIZWFkZXIuR2V0VG9rZW5MZW5ndGgoKSkgJiYKKyAgICAgICAgICAgICAgICAobWVtY21wKHRoaXMtPkdldFRva2VuKCksIGFIZWFkZXIuR2V0VG9rZW4oKSwgdGhpcy0+R2V0VG9rZW5MZW5ndGgoKSkgPT0gMCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBDb0FQIG9wdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHN0cnVjdCBPcHRpb24gOiBwdWJsaWMgb3RDb2FwT3B0aW9uCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogUHJvdG9jb2wgQ29uc3RhbnRzCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBlbnVtCisgICAgICAgIHsKKyAgICAgICAgICAgIGtPcHRpb25EZWx0YU9mZnNldCAgID0gNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRGVsdGEgT2Zmc2V0CisgICAgICAgICAgICBrT3B0aW9uRGVsdGFNYXNrICAgICA9IDB4ZiA8PCBrT3B0aW9uRGVsdGFPZmZzZXQsICAvLy88IERlbHRhIE1hc2sKKyAgICAgICAgfTsKKworICAgICAgICAvKioKKyAgICAgICAgICogT3B0aW9uIE51bWJlcnMKKyAgICAgICAgICovCisgICAgICAgIHR5cGVkZWYgb3RDb2FwT3B0aW9uVHlwZSBUeXBlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgQ29BUCBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT3B0aW9uICBUaGUgQ29BUCBPcHRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kT3B0aW9uKGNvbnN0IE9wdGlvbiAmYU9wdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGFuIHVuc2lnbmVkIGludGVnZXIgQ29BUCBvcHRpb24gYXMgc3BlY2lmaWVkIGluCisgICAgICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyNTIjc2VjdGlvbi0zLjIKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOdW1iZXIgIFRoZSBDb0FQIE9wdGlvbiBudW1iZXIuCisgICAgICogQHBhcmFtW2luXSAgYVZhbHVlICAgVGhlIENvQVAgT3B0aW9uIHVuc2lnbmVkIGludGVnZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVWludE9wdGlvbih1aW50MTZfdCBhTnVtYmVyLCB1aW50MzJfdCBhVmFsdWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhbiBPYnNlcnZlIG9wdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPYnNlcnZlICBPYnNlcnZlIGZpZWxkIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgb3B0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRPYnNlcnZlT3B0aW9uKHVpbnQzMl90IGFPYnNlcnZlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBVcmktUGF0aCBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVXJpUGF0aCAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBvcHRpb24gbGVuZ3RoIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRVcmlQYXRoT3B0aW9ucyhjb25zdCBjaGFyICphVXJpUGF0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgQ29udGVudC1Gb3JtYXQgb3B0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRlbnRGb3JtYXQgIFRoZSBDb250ZW50IEZvcm1hdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIG9wdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIG9wdGlvbiB0eXBlIGlzIG5vdCBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGxhc3Qgb3B0aW9uIHR5cGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBvcHRpb24gbGVuZ3RoIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRDb250ZW50Rm9ybWF0T3B0aW9uKG90Q29hcE9wdGlvbkNvbnRlbnRGb3JtYXQgYUNvbnRlbnRGb3JtYXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIE1heC1BZ2Ugb3B0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1heEFnZSAgVGhlIE1heC1BZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBvcHRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBvcHRpb24gdHlwZSBpcyBub3QgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9wdGlvbiB0eXBlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgb3B0aW9uIGxlbmd0aCBleGNlZWRzIHRoZSBidWZmZXIgc2l6ZS4KKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZE1heEFnZU9wdGlvbih1aW50MzJfdCBhTWF4QWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBzaW5nbGUgVXJpLVF1ZXJ5IG9wdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFVcmlRdWVyeSAgQSBwb2ludGVyIHRvIE5VTEwtdGVybWluYXRlZCBzdHJpbmcsIHdoaWNoIHNob3VsZCBjb250YWluIGEgc2luZ2xlIGtleT12YWx1ZSBwYWlyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgb3B0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgb3B0aW9uIHR5cGUgaXMgbm90IGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBvcHRpb24gdHlwZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgICAgVGhlIG9wdGlvbiBsZW5ndGggZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUuCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRVcmlRdWVyeU9wdGlvbihjb25zdCBjaGFyICphVXJpUXVlcnkpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9wdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb3B0aW9uLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgT3B0aW9uICpHZXRGaXJzdE9wdGlvbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG9wdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBvcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBPcHRpb24gKkdldE5leHRPcHRpb24odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIFBheWxvYWQgTWFya2VyIGluZGljYXRpbmcgYmVnaW5uaW5nIG9mIHRoZSBwYXlsb2FkIHRvIHRoZSBDb0FQIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgUGF5bG9hZCBNYXJrZXIgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSGVhZGVyIFBheWxvYWQgTWFya2VyIGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRQYXlsb2FkTWFya2VyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0Qnl0ZXModm9pZCkgY29uc3QgeyByZXR1cm4gbUhlYWRlci5tQnl0ZXM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGhlYWRlciBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgaGVhZGVyIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1IZWFkZXJMZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgYSBkZWZhdWx0IHJlc3BvbnNlIGhlYWRlciBiYXNlZCBvbiByZXF1ZXN0IGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXF1ZXN0SGVhZGVyICBSZXF1ZXN0IGhlYWRlciB0byBiYXNlIG9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoY29uc3QgSGVhZGVyICZhUmVxdWVzdEhlYWRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgYSBoZWFkZXIgaXMgYW4gZW1wdHkgbWVzc2FnZSBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBIZWFkZXIgaXMgYW4gZW1wdHkgbWVzc2FnZSBoZWFkZXIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSGVhZGVyIGlzIG5vdCBhbiBlbXB0eSBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFbXB0eSh2b2lkKSBjb25zdCB7IHJldHVybiAoR2V0Q29kZSgpID09IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaGVhZGVyIGlzIGEgcmVxdWVzdCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBIZWFkZXIgaXMgYSByZXF1ZXN0IGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBIZWFkZXIgaXMgbm90IGEgcmVxdWVzdCBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVxdWVzdCh2b2lkKSBjb25zdCB7IHJldHVybiAoR2V0Q29kZSgpID49IE9UX0NPQVBfQ09ERV9HRVQgJiYgR2V0Q29kZSgpIDw9IE9UX0NPQVBfQ09ERV9ERUxFVEUpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaGVhZGVyIGlzIGEgcmVzcG9uc2UgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSGVhZGVyIGlzIGEgcmVzcG9uc2UgaGVhZGVyLgorICAgICAqIEByZXR2YWwgRkFMU0UgIEhlYWRlciBpcyBub3QgYSByZXNwb25zZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVzcG9uc2Uodm9pZCkgY29uc3QgeyByZXR1cm4gKEdldENvZGUoKSA+PSBPVF9DT0FQX0NPREVfUkVTUE9OU0VfTUlOKTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGhlYWRlciBpcyBhIENPTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEhlYWRlciBpcyBhIENPTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBIZWFkZXIgaXMgbm90IGlzIGEgQ09OIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NvbmZpcm1hYmxlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChHZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFKTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGhlYWRlciBpcyBhIE5PTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEhlYWRlciBpcyBhIE5PTiBtZXNzYWdlIGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBIZWFkZXIgaXMgbm90IGlzIGEgTk9OIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc05vbkNvbmZpcm1hYmxlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChHZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSk7IH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgYSBoZWFkZXIgaXMgYSBBQ0sgbWVzc2FnZSBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBIZWFkZXIgaXMgYSBBQ0sgbWVzc2FnZSBoZWFkZXIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSGVhZGVyIGlzIG5vdCBpcyBhIEFDSyBtZXNzYWdlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNBY2sodm9pZCkgY29uc3QgeyByZXR1cm4gKEdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQUNLTk9XTEVER01FTlQpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaGVhZGVyIGlzIGEgUlNUIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSGVhZGVyIGlzIGEgUlNUIG1lc3NhZ2UgaGVhZGVyLgorICAgICAqIEByZXR2YWwgRkFMU0UgIEhlYWRlciBpcyBub3QgaXMgYSBSU1QgbWVzc2FnZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVzZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKEdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfUkVTRVQpOyAgfTsKKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBQcm90b2NvbCBDb25zdGFudHMgKFJGQyA3MjUyKS4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtWZXJzaW9uTWFzayAgICAgICAgICAgICAgICA9IDB4YzAsICAvLy88IFZlcnNpb24gbWFzayBhcyBzcGVjaWZpZWQgKFJGQyA3MjUyKS4KKyAgICAgICAga1ZlcnNpb25PZmZzZXQgICAgICAgICAgICAgID0gNiwgICAgIC8vLzwgVmVyc2lvbiBvZmZzZXQgYXMgc3BlY2lmaWVkIChSRkMgNzI1MikuCisKKyAgICAgICAga1R5cGVNYXNrICAgICAgICAgICAgICAgICAgID0gMHgzMCwgIC8vLzwgVHlwZSBtYXNrIGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorCisgICAgICAgIGtUb2tlbkxlbmd0aE1hc2sgICAgICAgICAgICA9IDB4MGYsICAvLy88IFRva2VuIExlbmd0aCBtYXNrIGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgICAgICBrVG9rZW5MZW5ndGhPZmZzZXQgICAgICAgICAgPSAwLCAgICAgLy8vPCBUb2tlbiBMZW5ndGggb2Zmc2V0IGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgICAgICBrVG9rZW5PZmZzZXQgICAgICAgICAgICAgICAgPSA0LCAgICAgLy8vPCBUb2tlbiBvZmZzZXQgYXMgc3BlY2lmaWVkIChSRkMgNzI1MikuCisgICAgICAgIGtNYXhUb2tlbkxlbmd0aCAgICAgICAgICAgICA9IDgsICAgICAvLy88IE1heCB0b2tlbiBsZW5ndGggYXMgc3BlY2lmaWVkIChSRkMgNzI1MikuCisKKyAgICAgICAga01heE9wdGlvbkhlYWRlclNpemUgICAgICAgID0gNSwgICAgIC8vLzwgTWF4aW11bSBzaXplIG9mIGFuIE9wdGlvbiBoZWFkZXIKKworICAgICAgICBrT3B0aW9uMUJ5dGVFeHRlbnNpb24gICAgICAgPSAxMywgICAgLy8vPCBJbmRpY2F0ZXMgYSAxIGJ5dGUgZXh0ZW5zaW9uIChSRkMgNzI1MikuCisgICAgICAgIGtPcHRpb24yQnl0ZUV4dGVuc2lvbiAgICAgICA9IDE0LCAgICAvLy88IEluZGljYXRlcyBhIDEgYnl0ZSBleHRlbnNpb24gKFJGQyA3MjUyKS4KKworICAgICAgICBrT3B0aW9uMUJ5dGVFeHRlbnNpb25PZmZzZXQgPSAxMywgICAgLy8vPCBEZWx0YS9MZW5ndGggb2Zmc2V0IGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgICAgICBrT3B0aW9uMkJ5dGVFeHRlbnNpb25PZmZzZXQgPSAyNjksICAgLy8vPCBEZWx0YS9MZW5ndGggb2Zmc2V0IGFzIHNwZWNpZmllZCAoUkZDIDcyNTIpLgorICAgIH07Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBDb2FwCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDT0FQX0hFQURFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb2FwL2NvYXBfc2VjdXJlLmNwcCBiL3NyYy9jb3JlL2NvYXAvY29hcF9zZWN1cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMTc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb2FwL2NvYXBfc2VjdXJlLmNwcApAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiY29hcF9zZWN1cmUudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImNvYXBfc2VjdXJlLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2R0bHMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBzZWN1cmUgQ29BUCBhZ2VudC4KKyAqLworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENvYXAgeworCitDb2FwU2VjdXJlOjpDb2FwU2VjdXJlKFRocmVhZE5ldGlmICZhTmV0aWYpOgorICAgIENvYXAoYU5ldGlmKSwKKyAgICBtQ29ubmVjdGVkQ2FsbGJhY2soTlVMTCksCisgICAgbUNvbm5lY3RlZENvbnRleHQoTlVMTCksCisgICAgbVRyYW5zcG9ydENhbGxiYWNrKE5VTEwpLAorICAgIG1UcmFuc3BvcnRDb250ZXh0KE5VTEwpLAorICAgIG1UcmFuc21pdE1lc3NhZ2UoTlVMTCksCisgICAgbVRyYW5zbWl0VGFzayhhTmV0aWYuR2V0SXA2KCkubVRhc2tsZXRTY2hlZHVsZXIsICZDb2FwU2VjdXJlOjpIYW5kbGVVZHBUcmFuc21pdCwgdGhpcykKK3sKK30KKworb3RFcnJvciBDb2FwU2VjdXJlOjpTdGFydCh1aW50MTZfdCBhUG9ydCwgVHJhbnNwb3J0Q2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBtVHJhbnNwb3J0Q2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbVRyYW5zcG9ydENvbnRleHQgPSBhQ29udGV4dDsKKworICAgIC8vIFBhc3NpbmcgbVRyYW5zcG9ydENhbGxiYWNrIG1lYW5zIHRoYXQgd2UgZG8gbm90IHdhbnQgdG8gdXNlIHNvY2tldAorICAgIC8vIHRvIHRyYW5zbWl0L3JlY2VpdmUgbWVzc2FnZXMsIHNvIGRvIG5vdCBvcGVuIGl0IGluIHRoYXQgY2FzZS4KKyAgICBpZiAobVRyYW5zcG9ydENhbGxiYWNrID09IE5VTEwpCisgICAgeworICAgICAgICBlcnJvciA9IENvYXA6OlN0YXJ0KGFQb3J0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6U3RvcCh2b2lkKQoreworICAgIGlmIChJc0Nvbm5lY3Rpb25BY3RpdmUoKSkKKyAgICB7CisgICAgICAgIERpc2Nvbm5lY3QoKTsKKyAgICB9CisKKyAgICBpZiAobVRyYW5zbWl0TWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVRyYW5zbWl0TWVzc2FnZS0+RnJlZSgpOworICAgICAgICBtVHJhbnNtaXRNZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBtVHJhbnNwb3J0Q2FsbGJhY2sgPSBOVUxMOworICAgIG1UcmFuc3BvcnRDb250ZXh0ID0gTlVMTDsKKworICAgIHJldHVybiBDb2FwOjpTdG9wKCk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6Q29ubmVjdChjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIENvbm5lY3RlZENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgbVBlZXJBZGRyZXNzID0gYU1lc3NhZ2VJbmZvOworICAgIG1Db25uZWN0ZWRDYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICBtQ29ubmVjdGVkQ29udGV4dCA9IGFDb250ZXh0OworCisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0RHRscygpLlN0YXJ0KHRydWUsICZDb2FwU2VjdXJlOjpIYW5kbGVEdGxzQ29ubmVjdGVkLCAmQ29hcFNlY3VyZTo6SGFuZGxlRHRsc1JlY2VpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb2FwU2VjdXJlOjpIYW5kbGVEdGxzU2VuZCwgdGhpcyk7Cit9CisKK2Jvb2wgQ29hcFNlY3VyZTo6SXNDb25uZWN0aW9uQWN0aXZlKHZvaWQpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0RHRscygpLklzU3RhcnRlZCgpOworfQorCitib29sIENvYXBTZWN1cmU6OklzQ29ubmVjdGVkKHZvaWQpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0RHRscygpLklzQ29ubmVjdGVkKCk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6RGlzY29ubmVjdCh2b2lkKQoreworICAgIHJldHVybiBHZXROZXRpZigpLkdldER0bHMoKS5TdG9wKCk7Cit9CisKK01lc2hDb1A6OkR0bHMgJkNvYXBTZWN1cmU6OkdldER0bHModm9pZCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6U2V0UHNrKGNvbnN0IHVpbnQ4X3QgKmFQc2ssIHVpbnQ4X3QgYVBza0xlbmd0aCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCkuU2V0UHNrKGFQc2ssIGFQc2tMZW5ndGgpOworfQorCitvdEVycm9yIENvYXBTZWN1cmU6OlNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChJc0Nvbm5lY3RlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgZXJyb3IgPSBDb2FwOjpTZW5kTWVzc2FnZShhTWVzc2FnZSwgbVBlZXJBZGRyZXNzLCBhSGFuZGxlciwgYUNvbnRleHQpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDb2FwU2VjdXJlOjpTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdENvYXBSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHJldHVybiBDb2FwOjpTZW5kTWVzc2FnZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhSGFuZGxlciwgYUNvbnRleHQpOworfQorCitvdEVycm9yIENvYXBTZWN1cmU6OlNlbmQoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCkuU2VuZChhTWVzc2FnZSwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworfQorCit2b2lkIENvYXBTZWN1cmU6OlJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGlmICghbmV0aWYuR2V0RHRscygpLklzU3RhcnRlZCgpKQorICAgIHsKKyAgICAgICAgSXA2OjpTb2NrQWRkciBzb2NrQWRkcjsKKyAgICAgICAgc29ja0FkZHIubUFkZHJlc3MgPSBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKTsKKyAgICAgICAgc29ja0FkZHIubVBvcnQgPSBhTWVzc2FnZUluZm8uR2V0UGVlclBvcnQoKTsKKyAgICAgICAgbVNvY2tldC5Db25uZWN0KHNvY2tBZGRyKTsKKworICAgICAgICBtUGVlckFkZHJlc3MuU2V0UGVlckFkZHIoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgICAgICBtUGVlckFkZHJlc3MuU2V0UGVlclBvcnQoYU1lc3NhZ2VJbmZvLkdldFBlZXJQb3J0KCkpOworCisgICAgICAgIGlmIChuZXRpZi5Jc1VuaWNhc3RBZGRyZXNzKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVBlZXJBZGRyZXNzLlNldFNvY2tBZGRyKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1QZWVyQWRkcmVzcy5TZXRTb2NrUG9ydChhTWVzc2FnZUluZm8uR2V0U29ja1BvcnQoKSk7CisKKyAgICAgICAgbmV0aWYuR2V0RHRscygpLlN0YXJ0KGZhbHNlLCBIYW5kbGVEdGxzQ29ubmVjdGVkLCBIYW5kbGVEdGxzUmVjZWl2ZSwgSGFuZGxlRHRsc1NlbmQsIHRoaXMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPbmNlIERUTFMgc2Vzc2lvbiBpcyBzdGFydGVkLCBjb21tdW5pY2F0ZSBvbmx5IHdpdGggYSBwZWVyLgorICAgICAgICBWZXJpZnlPckV4aXQoKG1QZWVyQWRkcmVzcy5HZXRQZWVyQWRkcigpID09IGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSAmJgorICAgICAgICAgICAgICAgICAgICAgKG1QZWVyQWRkcmVzcy5HZXRQZWVyUG9ydCgpID09IGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKSk7CisgICAgfQorCisgICAgbmV0aWYuR2V0RHRscygpLlNldENsaWVudElkKG1QZWVyQWRkcmVzcy5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtUGVlckFkZHJlc3MuR2V0UGVlckFkZHIoKS5tRmllbGRzKSk7CisgICAgbmV0aWYuR2V0RHRscygpLlJlY2VpdmUoYU1lc3NhZ2UsIGFNZXNzYWdlLkdldE9mZnNldCgpLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgQ29hcFNlY3VyZTo6SGFuZGxlRHRsc0Nvbm5lY3RlZCh2b2lkICphQ29udGV4dCwgYm9vbCBhQ29ubmVjdGVkKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2FwU2VjdXJlICo+KGFDb250ZXh0KS0+SGFuZGxlRHRsc0Nvbm5lY3RlZChhQ29ubmVjdGVkKTsKK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVEdGxzQ29ubmVjdGVkKGJvb2wgYUNvbm5lY3RlZCkKK3sKKyAgICBpZiAobUNvbm5lY3RlZENhbGxiYWNrICE9IE5VTEwpCisgICAgeworICAgICAgICBtQ29ubmVjdGVkQ2FsbGJhY2soYUNvbm5lY3RlZCwgbUNvbm5lY3RlZENvbnRleHQpOworICAgIH0KK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVEdGxzUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcFNlY3VyZSAqPihhQ29udGV4dCktPkhhbmRsZUR0bHNSZWNlaXZlKGFCdWYsIGFMZW5ndGgpOworfQorCit2b2lkIENvYXBTZWN1cmU6OkhhbmRsZUR0bHNSZWNlaXZlKHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gR2V0TmV0aWYoKS5HZXRJcDYoKS5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKSkgIT0gTlVMTCk7CisgICAgU3VjY2Vzc09yRXhpdChtZXNzYWdlLT5BcHBlbmQoYUJ1ZiwgYUxlbmd0aCkpOworCisgICAgQ29hcDo6UmVjZWl2ZSgqbWVzc2FnZSwgbVBlZXJBZGRyZXNzKTsKKworZXhpdDoKKworICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCitvdEVycm9yIENvYXBTZWN1cmU6OkhhbmRsZUR0bHNTZW5kKHZvaWQgKmFDb250ZXh0LCBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoLCB1aW50OF90IGFNZXNzYWdlU3ViVHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29hcFNlY3VyZSAqPihhQ29udGV4dCktPkhhbmRsZUR0bHNTZW5kKGFCdWYsIGFMZW5ndGgsIGFNZXNzYWdlU3ViVHlwZSk7Cit9CisKK290RXJyb3IgQ29hcFNlY3VyZTo6SGFuZGxlRHRsc1NlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaWYgKG1UcmFuc21pdE1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgobVRyYW5zbWl0TWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZSgwKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgbVRyYW5zbWl0TWVzc2FnZS0+U2V0U3ViVHlwZShhTWVzc2FnZVN1YlR5cGUpOworICAgICAgICBtVHJhbnNtaXRNZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBTZXQgbWVzc2FnZSBzdWIgdHlwZSBpbiBjYXNlIEpvaW5lciBGaW5hbGl6ZSBSZXNwb25zZSBpcyBhcHBlbmRlZCB0byB0aGUgbWVzc2FnZS4KKyAgICBpZiAoYU1lc3NhZ2VTdWJUeXBlICE9IE1lc3NhZ2U6OmtTdWJUeXBlTm9uZSkKKyAgICB7CisgICAgICAgIG1UcmFuc21pdE1lc3NhZ2UtPlNldFN1YlR5cGUoYU1lc3NhZ2VTdWJUeXBlKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQobVRyYW5zbWl0TWVzc2FnZS0+QXBwZW5kKGFCdWYsIGFMZW5ndGgpID09IE9UX0VSUk9SX05PTkUsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBtVHJhbnNtaXRUYXNrLlBvc3QoKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1UcmFuc21pdE1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1UcmFuc21pdE1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVVZHBUcmFuc21pdChUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBHZXRPd25lcihhVGFza2xldCkuSGFuZGxlVWRwVHJhbnNtaXQoKTsKK30KKwordm9pZCBDb2FwU2VjdXJlOjpIYW5kbGVVZHBUcmFuc21pdCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtVHJhbnNtaXRNZXNzYWdlICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAobVRyYW5zcG9ydENhbGxiYWNrKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1UcmFuc3BvcnRDYWxsYmFjayhtVHJhbnNwb3J0Q29udGV4dCwgKm1UcmFuc21pdE1lc3NhZ2UsIG1QZWVyQWRkcmVzcykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5TZW5kVG8oKm1UcmFuc21pdE1lc3NhZ2UsIG1QZWVyQWRkcmVzcykpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1UcmFuc21pdE1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1UcmFuc21pdE1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBtVHJhbnNtaXRNZXNzYWdlID0gTlVMTDsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworQ29hcFNlY3VyZSAmQ29hcFNlY3VyZTo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQ29hcFNlY3VyZSAmY29hcCA9ICpzdGF0aWNfY2FzdDxDb2FwU2VjdXJlICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIENvYXBTZWN1cmUgJmNvYXAgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0Q29hcFNlY3VyZSgpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gY29hcDsKK30KKworfSAgLy8gbmFtZXNwYWNlIENvYXAKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfRFRMUwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29hcC9jb2FwX3NlY3VyZS5ocHAgYi9zcmMvY29yZS9jb2FwL2NvYXBfc2VjdXJlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY3MmVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29hcC9jb2FwX3NlY3VyZS5ocHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ09BUF9TRUNVUkVfSFBQXworI2RlZmluZSBDT0FQX1NFQ1VSRV9IUFBfCisKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZHRscy5ocHAiCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgc2VjdXJlIENvQVAgYWdlbnQuCisgKi8KKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBDb2FwIHsKKworY2xhc3MgQ29hcFNlY3VyZTogcHVibGljIENvYXAKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCBvbmNlIERUTFMgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KKyAgICAgICoKKyAgICAgICogQHBhcmFtW2luXSAgYUNvbm5lY3RlZCAgVFJVRSBpZiBhIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgICoKKyAgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqQ29ubmVjdGVkQ2FsbGJhY2spKGJvb2wgYUNvbm5lY3RlZCwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHNlY3VyZSBDb0FQIHNlcnZlciB3YW50IHRvIHNlbmQgZW5jcnlwdGVkIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgb3RFcnJvcigqVHJhbnNwb3J0Q2FsbGJhY2spKHZvaWQgKmFDb250ZXh0LCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgdGhlIHNlY3VyZSBDb0FQIGFnZW50IGlzIGJvdW5kIHRvLgorICAgICAqCisgICAgICovCisgICAgQ29hcFNlY3VyZShUaHJlYWROZXRpZiAmYU5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgc2VjdXJlIENvQVAgYWdlbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUG9ydCAgICAgIFRoZSBsb2NhbCBVRFAgcG9ydCB0byBiaW5kIHRvLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gZm9yIHNlbmRpbmcgbWVzc2FnZXMuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBJZiBOVUxMLCB0aGUgbWVzc2FnZSBpcyBzZW50IGRpcmVjdGx5IHRvIHRoZSBzb2NrZXQuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBDb0FQIGFnZW50LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh1aW50MTZfdCBhUG9ydCwgVHJhbnNwb3J0Q2FsbGJhY2sgYUNhbGxiYWNrID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBzZWN1cmUgQ29BUCBhZ2VudC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgdGhlIHNlY3VyZSBDb0FQIGFnZW50LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgRFRMUyBzZXNzaW9uIHdpdGggYSBwZWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byBhbiBhZGRyZXNzIG9mIHRoZSBwZWVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIERUTFMgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgRFRMUyBjb25uZWN0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBDb25uZWN0KGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgQ29ubmVjdGVkQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIERUTFMgc2Vzc2lvbiBpcyBhY3RpdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgIElmIERUTFMgc2Vzc2lvbiBpcyBhY3RpdmUuCisgICAgICogQHJldHZhbCBGQUxTRSBJZiBEVExTIHNlc3Npb24gaXMgbm90IGFjdGl2ZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNDb25uZWN0aW9uQWN0aXZlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBEVExTIHNlc3Npb24gaXMgY29ubmVjdGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgVGhlIERUTFMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgVGhlIERUTFMgc2Vzc2lvbiBpcyBub3QgY29ubmVjdGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0Nvbm5lY3RlZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBEVExTIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBEVExTIGNvbm5lY3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIERpc2Nvbm5lY3Qodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBEVExTIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRFRMUyBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpEdGxzICZHZXREdGxzKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUFNLLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBTSyAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBQU0suCisgICAgICogQHBhcmFtW2luXSAgYVBza0xlbmd0aCAgVGhlIFBTSyBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgUFNLLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgUFNLIGlzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFBzayhjb25zdCB1aW50OF90ICphUHNrLCB1aW50OF90IGFQc2tMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBDb0FQIG1lc3NhZ2Ugb3ZlciBzZWN1cmUgRFRMUyBjb25uZWN0aW9uLgorICAgICAqCisgICAgICogSWYgYSByZXNwb25zZSBmb3IgYSByZXF1ZXN0IGlzIGV4cGVjdGVkLCByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4KKyAgICAgKiBJZiBubyByZXNwb25zZSBpcyBleHBlY3RlZCwgdGhlc2UgYXJndW1lbnRzIHNob3VsZCBiZSBOVUxMIHBvaW50ZXJzLgorICAgICAqIElmIE1lc3NhZ2UgSWQgd2FzIG5vdCBzZXQgaW4gdGhlIGhlYWRlciAoZXF1YWwgdG8gMCksIHRoaXMgZnVuY3Rpb24gd2lsbCBhc3NpZ24gdW5pcXVlIE1lc3NhZ2UgSWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VudCBDb0FQIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmV0cmFuc21pc3Npb24gZGF0YS4KKyAgICAgKiBAcmV0dmFrIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIERUTFMgY29ubmVjdGlvbiB3YXMgbm90IGluaXRpYWxpemVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQ29BUCBtZXNzYWdlIG92ZXIgc2VjdXJlIERUTFMgY29ubmVjdGlvbi4KKyAgICAgKgorICAgICAqIElmIGEgcmVzcG9uc2UgZm9yIGEgcmVxdWVzdCBpcyBleHBlY3RlZCwgcmVzcGVjdGl2ZSBmdW5jdGlvbiBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuCisgICAgICogSWYgbm8gcmVzcG9uc2UgaXMgZXhwZWN0ZWQsIHRoZXNlIGFyZ3VtZW50cyBzaG91bGQgYmUgTlVMTCBwb2ludGVycy4KKyAgICAgKiBJZiBNZXNzYWdlIElkIHdhcyBub3Qgc2V0IGluIHRoZSBoZWFkZXIgKGVxdWFsIHRvIDApLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXNzaWduIHVuaXF1ZSBNZXNzYWdlIElkIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSB0byBzZW5kLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2VudCBDb0FQIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmV0cmFuc21pc3Npb24gZGF0YS4KKyAgICAgKiBAcmV0dmFrIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIERUTFMgY29ubmVjdGlvbiB3YXMgbm90IGluaXRpYWxpemVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGFIYW5kbGVyID0gTlVMTCwgdm9pZCAqYUNvbnRleHQgPSBOVUxMKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcGFzcyBtZXNzYWdlcyB0byB0aGUgc2VjdXJlIENvQVAgc2VydmVyLgorICAgICAqIEl0IGNhbiBiZSB1c2VkIHdoZW4gbWVzc2FnZXMgYXJlIHJlY2VpdmVkIG90aGVyIHdheSB0aGF0IHZpYSBzZXJ2ZXIncyBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSByZWNlaXZlZCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBvdEVycm9yIFNlbmQoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEdGxzQ29ubmVjdGVkKHZvaWQgKmFDb250ZXh0LCBib29sIGFDb25uZWN0ZWQpOworICAgIHZvaWQgSGFuZGxlRHRsc0Nvbm5lY3RlZChib29sIGFDb25uZWN0ZWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRHRsc1JlY2VpdmUodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpOworICAgIHZvaWQgSGFuZGxlRHRsc1JlY2VpdmUodWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICBzdGF0aWMgb3RFcnJvciBIYW5kbGVEdGxzU2VuZCh2b2lkICphQ29udGV4dCwgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpOworICAgIG90RXJyb3IgSGFuZGxlRHRsc1NlbmQoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwVHJhbnNtaXQoVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgSGFuZGxlVWRwVHJhbnNtaXQodm9pZCk7CisKKyAgICBzdGF0aWMgQ29hcFNlY3VyZSAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgSXA2OjpNZXNzYWdlSW5mbyBtUGVlckFkZHJlc3M7CisgICAgQ29ubmVjdGVkQ2FsbGJhY2sgbUNvbm5lY3RlZENhbGxiYWNrOworICAgIHZvaWQgKm1Db25uZWN0ZWRDb250ZXh0OworICAgIFRyYW5zcG9ydENhbGxiYWNrIG1UcmFuc3BvcnRDYWxsYmFjazsKKyAgICB2b2lkICptVHJhbnNwb3J0Q29udGV4dDsKKyAgICBNZXNzYWdlICptVHJhbnNtaXRNZXNzYWdlOworICAgIFRhc2tsZXQgbVRyYW5zbWl0VGFzazsKK307CisKK30gIC8vIG5hbWVzcGFjZSBDb2FwCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDT0FQX1NFQ1VSRV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vY29kZV91dGlscy5ocHAgYi9zcmMvY29yZS9jb21tb24vY29kZV91dGlscy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkZTQxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9jb2RlX3V0aWxzLmhwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgbWFjcm9zIGZvciB2YWxpZGF0aW5nIHJ1bnRpbWUgY29uZGl0aW9ucy4KKyAqLworCisjaWZuZGVmIENPREVfVVRJTFNfSFBQXworI2RlZmluZSBDT0RFX1VUSUxTX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkYm9vbC5oIgorCisvLyBDYWxjdWxhdGVzIHRoZSBhbGlnbmVkIHZhcmlhYmxlIHNpemUuCisjZGVmaW5lIG90QUxJR05FRF9WQVJfU0laRShzaXplLCBhbGlnbl90eXBlKSAgICAgICAgICAgIFwKKyAgICAoKChzaXplKSArIChzaXplb2YgKGFsaWduX3R5cGUpIC0gMSkpIC8gc2l6ZW9mIChhbGlnbl90eXBlKSkKKworLy8gQWxsb2NhdGUgdGhlIHN0cnVjdHVyZSB1c2luZyAicmF3IiBzdG9yYWdlLgorI2RlZmluZSBvdERFRklORV9BTElHTkVEX1ZBUihuYW1lLCBzaXplLCBhbGlnbl90eXBlKSAgICAgICAgICAgIFwKKyAgICBhbGlnbl90eXBlIG5hbWVbKCgoc2l6ZSkgKyAoc2l6ZW9mIChhbGlnbl90eXBlKSAtIDEpKSAvIHNpemVvZiAoYWxpZ25fdHlwZSkpXQorCisvKioKKyAqICBUaGlzIGNoZWNrcyBmb3IgdGhlIHNwZWNpZmllZCBzdGF0dXMsIHdoaWNoIGlzIGV4cGVjdGVkIHRvCisgKiAgY29tbW9ubHkgYmUgc3VjY2Vzc2Z1bCwgYW5kIGJyYW5jaGVzIHRvIHRoZSBsb2NhbCBsYWJlbCAnZXhpdCcgaWYKKyAqICB0aGUgc3RhdHVzIGlzIHVuc3VjY2Vzc2Z1bC4KKyAqCisgKiAgQHBhcmFtW2luXSAgYVN0YXR1cyAgICAgQSBzY2FsYXIgc3RhdHVzIHRvIGJlIGV2YWx1YXRlZCBhZ2FpbnN0IHplcm8gKDApLgorICoKKyAqLworI2RlZmluZSBTdWNjZXNzT3JFeGl0KGFTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoKGFTdGF0dXMpICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworLyoqCisgKiAgVGhpcyBjaGVja3MgZm9yIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uLCB3aGljaCBpcyBleHBlY3RlZCB0bworICogIGNvbW1vbmx5IGJlIHRydWUsIGFuZCBib3RoIGV4ZWN1dGVzIEBhIC4uLiBhbmQgYnJhbmNoZXMgdG8gdGhlCisgKiAgbG9jYWwgbGFiZWwgJ2V4aXQnIGlmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UuCisgKgorICogIEBwYXJhbVtpbl0gIGFDb25kaXRpb24gIEEgQm9vbGVhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZC4KKyAqICBAcGFyYW1baW5dICAuLi4gICAgICAgICBBbiBleHByZXNzaW9uIG9yIGJsb2NrIHRvIGV4ZWN1dGUgd2hlbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb24gZmFpbHMuCisgKgorICovCisjZGVmaW5lIFZlcmlmeU9yRXhpdChhQ29uZGl0aW9uLCAuLi4pICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghKGFDb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKy8qKgorICogIFRoaXMgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGVzIEBhIC4uLiBhbmQgYnJhbmNoZXMgdG8gdGhlIGxvY2FsCisgKiAgbGFiZWwgJ2V4aXQnLgorICoKKyAqICBAbm90ZSBUaGUgdXNlIG9mIHRoaXMgaW50ZXJmYWNlIGltcGxpZXMgbmVpdGhlciBzdWNjZXNzIG5vcgorICogICAgICAgIGZhaWx1cmUgZm9yIHRoZSBvdmVyYWxsIGV4aXQgc3RhdHVzIG9mIHRoZSBlbmNsb3NpbmcKKyAqICAgICAgICBmdW5jdGlvbiBib2R5LgorICoKKyAqICBAcGFyYW1baW5dICAuLi4gICAgICAgICBBbiBvcHRpb25hbCBleHByZXNzaW9uIG9yIGJsb2NrIHRvIGV4ZWN1dGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBhc3NlcnRpb24gZmFpbHMuCisgKgorICovCisjZGVmaW5lIEV4aXROb3coLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKy8qCisgKiBSdW4gdGhlIGBzdGF0ZW1lbnRgIGFuZCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZS4KKyAqCisgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIGluZGljYXRlIHRoZSBpbnRlbnRpb24gb2YgZGV2ZWxvcGVyIHRoYXQKKyAqIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb24vbWV0aG9kIGNhbiBiZSBzYWZlbHkgaWdub3JlZC4KKyAqCisgKiBAcGFyYW1baW5dICBhU3RhdGVtZW50ICBUaGUgZnVuY3Rpb24vbWV0aG9kIHRvIGV4ZWN1dGUuCisgKgorICovCisjZGVmaW5lIElnbm9yZVJldHVyblZhbHVlKGFTdGF0ZW1lbnQpICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChhU3RhdGVtZW50KSB7fSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2VuZGlmICAvLyBDT0RFX1VUSUxTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi9jb250ZXh0LmhwcCBiL3NyYy9jb3JlL2NvbW1vbi9jb250ZXh0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzZiNmUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL2NvbnRleHQuaHBwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFpbnRhaW5pbmcgYSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICovCisKKyNpZm5kZWYgQ09OVEVYVF9IUFBfCisjZGVmaW5lIENPTlRFWFRfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3Rvb2xjaGFpbi5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtY29udGV4dAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFpbnRhaW5pbmcgYSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGRlZmluaXRpb25zIGZvciBtYWludGFpbmluZyBhIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBpcyB1c2VkIGFzIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBwcm92aWRlIGEgY2FsbGJhY2sgb3IgaGFuZGxlciAoZS5nLiwgVGltZXIgb3IgVGFza2xldCkuCisgKgorICovCitjbGFzcyBDb250ZXh0Cit7CitwdWJsaWM6CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCAqR2V0Q29udGV4dCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ29udGV4dDsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBjb250ZXh0IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIENvbnRleHQodm9pZCAqYUNvbnRleHQpCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgICAgIDogbUNvbnRleHQoYUNvbnRleHQpCisjZW5kaWYKKyAgICB7CisgICAgICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisgICAgfQorCitwcml2YXRlOgorI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHZvaWQgKm1Db250ZXh0OworI2VuZGlmCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIENPTlRFWFRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2NyYzE2LmNwcCBiL3NyYy9jb3JlL2NvbW1vbi9jcmMxNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmYTZjNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9jcmMxNi5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBDUkMxNiBjb21wdXRhdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjcmMxNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK0NyYzE2OjpDcmMxNihQb2x5bm9taWFsIGFQb2x5bm9taWFsKQoreworICAgIG1Qb2x5bm9taWFsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFQb2x5bm9taWFsKTsKKyAgICBJbml0KCk7Cit9CisKK3ZvaWQgQ3JjMTY6OlVwZGF0ZSh1aW50OF90IGFCeXRlKQoreworICAgIHVpbnQ4X3QgaTsKKworICAgIG1DcmMgPSBtQ3JjIF4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFCeXRlIDw8IDgpOworICAgIGkgPSA4OworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChtQ3JjICYgMHg4MDAwKQorICAgICAgICB7CisgICAgICAgICAgICBtQ3JjID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG1DcmMgPDwgMSkgXiBtUG9seW5vbWlhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DcmMgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4obUNyYyA8PCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoLS1pKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vY3JjMTYuaHBwIGIvc3JjL2NvcmUvY29tbW9uL2NyYzE2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzMzYjYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL2NyYzE2LmhwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgQ1JDMTYgY29tcHV0YXRpb25zLgorICovCisKKyNpZm5kZWYgQ1JDMTZfSFBQXworI2RlZmluZSBDUkMxNl9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDUkMxNiBjb21wdXRhdGlvbnMuCisgKgorICovCitjbGFzcyBDcmMxNgoreworcHVibGljOgorICAgIGVudW0gUG9seW5vbWlhbAorICAgIHsKKyAgICAgICAga0NjaXR0ID0gMHgxMDIxLCAgLy8vPCBDUkMxNl9DQ0lUVAorICAgICAgICBrQW5zaSAgPSAweDgwMDUsICAvLy88IENSQzE2LUFOU0kKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvbHlub21pYWwgIFRoZSBwb2x5bm9taWFsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgQ3JjMTYoUG9seW5vbWlhbCBhUG9seW5vbWlhbCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQ1JDMTYgY29tcHV0YXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtQ3JjID0gMDsgfQorCisgICAgLypjKgorICAgICAqIFRoaXMgbWV0aG9kIGZlZWRzIGEgYnl0ZSB2YWx1ZSBpbnRvIHRoZSBDUkMxNiBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCeXRlICBUaGUgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlKHVpbnQ4X3QgYUJ5dGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgY3VycmVudCBDUkMxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IENSQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DcmM7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUG9seW5vbWlhbDsKKyAgICB1aW50MTZfdCBtQ3JjOworfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ1JDMTZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2RlYnVnLmhwcCBiL3NyYy9jb3JlL2NvbW1vbi9kZWJ1Zy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZmJiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9kZWJ1Zy5ocHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBkZWJ1Z2dpbmcuCisgKi8KKworI2lmbmRlZiBERUJVR19IUFBfCisjZGVmaW5lIERFQlVHX0hQUF8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorCisjaWYgZGVmaW5lZChPUEVOVEhSRUFEX1RBUkdFVF9EQVJXSU4pIHx8IGRlZmluZWQoT1BFTlRIUkVBRF9UQVJHRVRfTElOVVgpCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2VsaWYgZGVmaW5lZChfS0VSTkVMX01PREUpCisKKyNpbmNsdWRlIDx3ZG0uaD4KKworI2RlZmluZSBhc3NlcnQoZXhwKSBcCisgICAgKCghKGV4cCkpID8gXAorICAgICAgICAoUnRsQXNzZXJ0KCAjZXhwLCBfX0ZJTEVfXywgX19MSU5FX18sIE5VTEwgKSxGQUxTRSkgOiBcCisgICAgICAgIFRSVUUpCisKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNlbGlmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX0FTU0VSVF9NQU5BR0VNRU5UCisKKyNpbmNsdWRlICJvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaCIKKworI2RlZmluZSBhc3NlcnQoY29uZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghKGNvbmQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgb3RQbGF0QXNzZXJ0RmFpbChfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgXAorICAgICAgd2hpbGUgKDEpIHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIGFzc2VydChjb25kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCEoY29uZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB3aGlsZSAoMSkge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYgIC8vIERFQlVHX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi9lbmNvZGluZy5ocHAgYi9zcmMvY29yZS9jb21tb24vZW5jb2RpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNTVlODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vZW5jb2RpbmcuaHBwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgYnl0ZS1vcmRlcmluZyBlbmNvZGluZy4KKyAqLworCisjaWZuZGVmIEVOQ09ESU5HX0hQUF8KKyNkZWZpbmUgRU5DT0RJTkdfSFBQXworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBFbmNvZGluZyB7CisKK2lubGluZSB1aW50MTZfdCBTd2FwMTYodWludDE2X3QgdikKK3sKKyAgICByZXR1cm4KKyAgICAgICAgKCgodiAmIDB4MDBmZlUpIDw8IDgpICYgMHhmZjAwKSB8CisgICAgICAgICgoKHYgJiAweGZmMDBVKSA+PiA4KSAmIDB4MDBmZik7Cit9CisKK2lubGluZSB1aW50MzJfdCBTd2FwMzIodWludDMyX3QgdikKK3sKKyAgICByZXR1cm4KKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDB4MDAwMDAwZmZVTCkpIDw8IDI0KSB8CisgICAgICAgICgodiAmIHN0YXRpY19jYXN0PHVpbnQzMl90PigweDAwMDBmZjAwVUwpKSA8PCAgOCkgfAorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMHgwMGZmMDAwMFVMKSkgPj4gIDgpIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDB4ZmYwMDAwMDBVTCkpID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IFN3YXA2NCh1aW50NjRfdCB2KQoreworICAgIHJldHVybgorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSkgPDwgNTYpIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDB4MDAwMDAwMDAwMDAwZmYwMFVMTCkpIDw8IDQwKSB8CisgICAgICAgICgodiAmIHN0YXRpY19jYXN0PHVpbnQ2NF90PigweDAwMDAwMDAwMDBmZjAwMDBVTEwpKSA8PCAyNCkgfAorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSkgPDwgIDgpIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDB4MDAwMDAwZmYwMDAwMDAwMFVMTCkpID4+ICA4KSB8CisgICAgICAgICgodiAmIHN0YXRpY19jYXN0PHVpbnQ2NF90PigweDAwMDBmZjAwMDAwMDAwMDBVTEwpKSA+PiAyNCkgfAorICAgICAgICAoKHYgJiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSkgPj4gNDApIHwKKyAgICAgICAgKCh2ICYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkpID4+IDU2KTsKK30KKworaW5saW5lIHVpbnQzMl90IFJldmVyc2UzMih1aW50MzJfdCB2KQoreworICAgIHYgPSAoKHYgJiAweDU1NTU1NTU1KSA8PCAxKSAgfCAoKHYgJiAweGFhYWFhYWFhKSA+PiAxKTsKKyAgICB2ID0gKCh2ICYgMHgzMzMzMzMzMykgPDwgMikgIHwgKCh2ICYgMHhjY2NjY2NjYykgPj4gMik7CisgICAgdiA9ICgodiAmIDB4MGYwZjBmMGYpIDw8IDQpICB8ICgodiAmIDB4ZjBmMGYwZjApID4+IDQpOworICAgIHYgPSAoKHYgJiAweDAwZmYwMGZmKSA8PCA4KSAgfCAoKHYgJiAweGZmMDBmZjAwKSA+PiA4KTsKKyAgICB2ID0gKCh2ICYgMHgwMDAwZmZmZikgPDwgMTYpIHwgKCh2ICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCisgICAgcmV0dXJuIHY7Cit9CisKKyNkZWZpbmUgQml0VmVjdG9yQnl0ZXMoeCkgICAgICAgICAgIFwKKyAgICAoKCh4KSArIChDSEFSX0JJVC0xKSkgLyBDSEFSX0JJVCkKKworbmFtZXNwYWNlIEJpZ0VuZGlhbiB7CisKKyNpZiBCWVRFX09SREVSX0JJR19FTkRJQU4KKworaW5saW5lIHVpbnQxNl90IEhvc3RTd2FwMTYodWludDE2X3QgdikgeyByZXR1cm4gdjsgfQoraW5saW5lIHVpbnQzMl90IEhvc3RTd2FwMzIodWludDMyX3QgdikgeyByZXR1cm4gdjsgfQoraW5saW5lIHVpbnQ2NF90IEhvc3RTd2FwNjQodWludDY0X3QgdikgeyByZXR1cm4gdjsgfQorCisjZWxzZSAvKiBCWVRFX09SREVSX0xJVFRMRV9FTkRJQU4gKi8KKworaW5saW5lIHVpbnQxNl90IEhvc3RTd2FwMTYodWludDE2X3QgdikgeyByZXR1cm4gU3dhcDE2KHYpOyB9CitpbmxpbmUgdWludDMyX3QgSG9zdFN3YXAzMih1aW50MzJfdCB2KSB7IHJldHVybiBTd2FwMzIodik7IH0KK2lubGluZSB1aW50NjRfdCBIb3N0U3dhcDY0KHVpbnQ2NF90IHYpIHsgcmV0dXJuIFN3YXA2NCh2KTsgfQorCisjZW5kaWYgIC8vIExJVFRMRV9FTkRJQU4KKworfSAgLy8gbmFtZXNwYWNlIEJpZ0VuZGlhbgorCituYW1lc3BhY2UgTGl0dGxlRW5kaWFuIHsKKworI2lmIEJZVEVfT1JERVJfQklHX0VORElBTgorCitpbmxpbmUgdWludDE2X3QgSG9zdFN3YXAxNih1aW50MTZfdCB2KSB7IHJldHVybiBTd2FwMTYodik7IH0KK2lubGluZSB1aW50MzJfdCBIb3N0U3dhcDMyKHVpbnQzMl90IHYpIHsgcmV0dXJuIFN3YXAzMih2KTsgfQoraW5saW5lIHVpbnQ2NF90IEhvc3RTd2FwNjQodWludDY0X3QgdikgeyByZXR1cm4gU3dhcDY0KHYpOyB9CisKKyNlbHNlIC8qIEJZVEVfT1JERVJfTElUVExFX0VORElBTiAqLworCitpbmxpbmUgdWludDE2X3QgSG9zdFN3YXAxNih1aW50MTZfdCB2KSB7IHJldHVybiB2OyB9CitpbmxpbmUgdWludDMyX3QgSG9zdFN3YXAzMih1aW50MzJfdCB2KSB7IHJldHVybiB2OyB9CitpbmxpbmUgdWludDY0X3QgSG9zdFN3YXA2NCh1aW50NjRfdCB2KSB7IHJldHVybiB2OyB9CisKKyNlbmRpZgorCit9ICAvLyBuYW1lc3BhY2UgTGl0dGxlRW5kaWFuCit9ICAvLyBuYW1lc3BhY2UgRW5jb2RpbmcKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEVOQ09ESU5HX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi9sb2NhdG9yLmNwcCBiL3NyYy9jb3JlL2NvbW1vbi9sb2NhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE2NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL2xvY2F0b3IuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGxvY2F0b3IgY2xhc3MgZm9yIE9wZW5UaHJlYWQgb2JqZWN0cy4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJsb2NhdG9yLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJsb2NhdG9yLmhwcCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworCitvdEluc3RhbmNlICpUaHJlYWROZXRpZkxvY2F0b3I6OkdldEluc3RhbmNlKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90SW5zdGFuY2VGcm9tVGhyZWFkTmV0aWYoJkdldE5ldGlmKCkpOworfQorCitvdEluc3RhbmNlICpNZXNoRm9yd2FyZGVyTG9jYXRvcjo6R2V0SW5zdGFuY2Uodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3RJbnN0YW5jZUZyb21UaHJlYWROZXRpZigmR2V0TWVzaEZvcndhcmRlcigpLkdldE5ldGlmKCkpOworfQorCitvdEluc3RhbmNlICpUaW1lclNjaGVkdWxlckxvY2F0b3I6OkdldEluc3RhbmNlKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90SW5zdGFuY2VGcm9tSXA2KElwNjo6SXA2RnJvbVRpbWVyU2NoZWR1bGVyKCZHZXRUaW1lclNjaGVkdWxlcigpKSk7Cit9CisKK290SW5zdGFuY2UgKlRhc2tsZXRTY2hlZHVsZXJMb2NhdG9yOjpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBvdEluc3RhbmNlRnJvbUlwNihJcDY6OklwNkZyb21UYXNrbGV0U2NoZWR1bGVyKCZHZXRUYXNrbGV0U2NoZWR1bGVyKCkpKTsKK30KKworb3RJbnN0YW5jZSAqSXA2TG9jYXRvcjo6R2V0SW5zdGFuY2Uodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3RJbnN0YW5jZUZyb21JcDYoJkdldElwNigpKTsKK30KKworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vbG9jYXRvci5ocHAgYi9zcmMvY29yZS9jb21tb24vbG9jYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzODUyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9sb2NhdG9yLmhwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGxvY2F0b3IgY2xhc3MgZm9yIE9wZW5UaHJlYWQgb2JqZWN0cy4KKyAqLworCisjaWZuZGVmIExPQ0FUT1JfSFBQXworI2RlZmluZSBMT0NBVE9SX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CitjbGFzcyBNZXNoRm9yd2FyZGVyOworY2xhc3MgVGFza2xldFNjaGVkdWxlcjsKK2NsYXNzIFRpbWVyU2NoZWR1bGVyOworbmFtZXNwYWNlIElwNiB7IGNsYXNzIElwNjsgfQorCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbG9jYXRvcgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbG9jYXRvciBiYXNlIGNsYXNzIGZvciBPcGVuVGhyZWFkIG9iamVjdHMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIHRlbXBsYXRlIGNsYXNzIGltcGxlbWVudHMgdGhlIGJhc2UgbG9jYXRvciBmb3IgT3BlblRocmVhZCBvYmplY3RzLgorICoKKyAqLwordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBMb2NhdG9yCit7Citwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgbG9jYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPYmplY3QgIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBMb2NhdG9yKFR5cGUgJmFPYmplY3QpCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgICAgIDogbUxvY2F0b3JPYmplY3QoYU9iamVjdCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFPYmplY3QpOworICAgIH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFR5cGUgJm1Mb2NhdG9yT2JqZWN0OworI2VuZGlmCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGxvY2F0b3IgZm9yIFRocmVhZE5ldGlmIG9iamVjdC4KKyAqCisgKi8KK2NsYXNzIFRocmVhZE5ldGlmTG9jYXRvcjogcHJpdmF0ZSBMb2NhdG9yPFRocmVhZE5ldGlmPgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgQSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFRocmVhZE5ldGlmICZHZXROZXRpZih2b2lkKSBjb25zdCB7IHJldHVybiBtTG9jYXRvck9iamVjdDsgfQorI2Vsc2UKKyAgICBUaHJlYWROZXRpZiAmR2V0TmV0aWYodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRUaHJlYWROZXRpZigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgdGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOiBMb2NhdG9yKGFUaHJlYWROZXRpZikgeyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGxvY2F0b3IgZm9yIE1lc2hGb3J3YXJkZXIgb2JqZWN0LgorICoKKyAqLworY2xhc3MgTWVzaEZvcndhcmRlckxvY2F0b3I6IHByaXZhdGUgTG9jYXRvcjxNZXNoRm9yd2FyZGVyPgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIE1lc2hGb3J3YXJkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoRm9yd2FyZGVyLgorICAgICAqCisgICAgICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgTWVzaEZvcndhcmRlciAmR2V0TWVzaEZvcndhcmRlcih2b2lkKSBjb25zdCB7IHJldHVybiBtTG9jYXRvck9iamVjdDsgfQorI2Vsc2UKKyAgICBNZXNoRm9yd2FyZGVyICZHZXRNZXNoRm9yd2FyZGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG90R2V0TWVzaEZvcndhcmRlcigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc2hGb3J3YXJkZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoRm9yd2FyZGVyLgorICAgICAqCisgICAgICovCisgICAgTWVzaEZvcndhcmRlckxvY2F0b3IoTWVzaEZvcndhcmRlciAmYU1lc2hGb3J3YXJkZXIpOiBMb2NhdG9yKGFNZXNoRm9yd2FyZGVyKSB7IH0KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgbG9jYXRvciBmb3IgVGltZXJTY2hlZHVsZXIgb2JqZWN0LgorICoKKyAqLworY2xhc3MgVGltZXJTY2hlZHVsZXJMb2NhdG9yOiBwcml2YXRlIExvY2F0b3I8VGltZXJTY2hlZHVsZXI+Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVGltZXJTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaW1lclNjaGVkdWxlci4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFRpbWVyU2NoZWR1bGVyICZHZXRUaW1lclNjaGVkdWxlcih2b2lkKSBjb25zdCB7IHJldHVybiBtTG9jYXRvck9iamVjdDsgfQorI2Vsc2UKKyAgICBUaW1lclNjaGVkdWxlciAmR2V0VGltZXJTY2hlZHVsZXIodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRUaW1lclNjaGVkdWxlcigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyU2NoZWR1bGVyICBBIHJlZmVyZW5jZSB0byB0aGUgVGltZXJTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBUaW1lclNjaGVkdWxlckxvY2F0b3IoVGltZXJTY2hlZHVsZXIgJmFUaW1lclNjaGVkdWxlcik6IExvY2F0b3IoYVRpbWVyU2NoZWR1bGVyKSB7IH0KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgbG9jYXRvciBmb3IgVGFza2xldFNjaGVkdWxlciBvYmplY3QuCisgKgorICovCitjbGFzcyBUYXNrbGV0U2NoZWR1bGVyTG9jYXRvcjogcHJpdmF0ZSBMb2NhdG9yPFRhc2tsZXRTY2hlZHVsZXI+Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVGFza2xldFNjaGVkdWxlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgQSByZWZlcmVuY2UgdG8gdGhlIFRhc2tsZXRTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBUYXNrbGV0U2NoZWR1bGVyICZHZXRUYXNrbGV0U2NoZWR1bGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Mb2NhdG9yT2JqZWN0OyB9CisjZWxzZQorICAgIFRhc2tsZXRTY2hlZHVsZXIgJkdldFRhc2tsZXRTY2hlZHVsZXIodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRUYXNrbGV0U2NoZWR1bGVyKCk7IH0KKyNlbmRpZgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgcGFyZW50IG90SW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gZmluYWxpemVkLgorICAgICAqCisgICAgICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgb3RJbnN0YW5jZSAqR2V0SW5zdGFuY2Uodm9pZCkgY29uc3Q7CisjZWxzZQorICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG90R2V0SW5zdGFuY2UoKTsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFza2xldFNjaGVkdWxlciAgQSByZWZlcmVuY2UgdG8gdGhlIFRhc2tsZXRTY2hlZHVsZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBUYXNrbGV0U2NoZWR1bGVyTG9jYXRvcihUYXNrbGV0U2NoZWR1bGVyICZhVGFza2xldFNjaGVkdWxlcik6IExvY2F0b3IoYVRhc2tsZXRTY2hlZHVsZXIpIHsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBsb2NhdG9yIGZvciBJcDYgb2JqZWN0LgorICoKKyAqLworY2xhc3MgSXA2TG9jYXRvcjogcHJpdmF0ZSBMb2NhdG9yPElwNjo6SXA2PgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIElwNi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgQSByZWZlcmVuY2UgdG8gdGhlIElwNi4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIElwNjo6SXA2ICZHZXRJcDYodm9pZCkgY29uc3QgeyByZXR1cm4gbUxvY2F0b3JPYmplY3Q7IH0KKyNlbHNlCisgICAgSXA2OjpJcDYgJkdldElwNih2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldElwNigpOyB9CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGZpbmFsaXplZC4KKyAgICAgKgorICAgICAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIG90SW5zdGFuY2UgKkdldEluc3RhbmNlKHZvaWQpIGNvbnN0OworI2Vsc2UKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBvdEdldEluc3RhbmNlKCk7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNiAgQSByZWZlcmVuY2UgdG8gdGhlIElwNi4KKyAgICAgKgorICAgICAqLworICAgIElwNkxvY2F0b3IoSXA2OjpJcDYgJmFJcDYpOiBMb2NhdG9yKGFJcDYpIHsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbG9jYXRvciBmb3IgIG90SW5zdGFuY2Ugb2JqZWN0CisgKgorICovCitjbGFzcyBJbnN0YW5jZUxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcG9pbnRlciB0byB0aGUgcGFyZW50IG90SW5zdGFuY2Ugc3RydWN0dXJlLCBvciBOVUxMIGlmIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBmaW5hbGl6ZWQuCisgICAgICoKKyAgICAgKi8KKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtSW5zdGFuY2U7IH0KKyNlbHNlCisgICAgb3RJbnN0YW5jZSAqR2V0SW5zdGFuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gb3RHZXRJbnN0YW5jZSgpOyB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIHRoZSBvdEluc3RhbmNlLgorICAgICAqCisgICAgICovCisgICAgSW5zdGFuY2VMb2NhdG9yKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICAgICAgOiBtSW5zdGFuY2UoYUluc3RhbmNlKQorI2VuZGlmCisgICAgeworICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKKyAgICB9CisKK3ByaXZhdGU6CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgb3RJbnN0YW5jZSAqbUluc3RhbmNlOworI2VuZGlmCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIExPQ0FUT1JfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuY3BwIGIvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGY1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vbG9nZ2luZy5jcHAKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHRhc2tsZXQgc2NoZWR1bGVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImxvZ2dpbmcudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImxvZ2dpbmcuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpZm5kZWYgV0lORE9XU19MT0dHSU5HCisjZGVmaW5lIG90TG9nRHVtcChhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vdER5bmFtaWNMb2coYUluc3RhbmNlLCBhTG9nTGV2ZWwsIGFMb2dSZWdpb24sIGFGb3JtYXQgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1NVRkZJWCwgIyMgX19WQV9BUkdTX18pCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QID09IDEKKy8qKgorICogVGhpcyBzdGF0aWMgbWV0aG9kIG91dHB1dHMgYSBsaW5lIG9mIHRoZSBtZW1vcnkgZHVtcC4KKyAqCisgKiBAcGFyYW1baW5dICBhTG9nTGV2ZWwgICBUaGUgbG9nIGxldmVsLgorICogQHBhcmFtW2luXSAgYUxvZ1JlZ2lvbiAgVGhlIGxvZyByZWdpb24uCisgKiBAcGFyYW1baW5dICBhQnVmICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyLgorICoKKyAqLworc3RhdGljIHZvaWQgRHVtcExpbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3Qgdm9pZCAqYUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBhTGVuZ3RoKQoreworICAgIGNoYXIgYnVmWzgwXTsKKyAgICBjaGFyICpjdXIgPSBidWY7CisKKyAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAifCIpOworICAgIGN1ciArPSBzdHJsZW4oY3VyKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChpIDwgYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc25wcmludGYoY3VyLCBzaXplb2YoYnVmKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyIC0gYnVmKSwgIiAlMDJYIiwgKCh1aW50OF90ICopKGFCdWYpKVtpXSk7CisgICAgICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiIC4uIik7CisgICAgICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISgoaSArIDEpICUgOCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNucHJpbnRmKGN1ciwgc2l6ZW9mKGJ1ZikgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1ciAtIGJ1ZiksICIgfCIpOworICAgICAgICAgICAgY3VyICs9IHN0cmxlbihjdXIpOworICAgICAgICB9CisgICAgfQorCisgICAgc25wcmludGYoY3VyLCBzaXplb2YoYnVmKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyIC0gYnVmKSwgIiAiKTsKKyAgICBjdXIgKz0gc3RybGVuKGN1cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBjaGFyIGMgPSAweDdmICYgKChjaGFyICopKGFCdWYpKVtpXTsKKworICAgICAgICBpZiAoaSA8IGFMZW5ndGggJiYgaXNwcmludChjKSkKKyAgICAgICAgeworICAgICAgICAgICAgc25wcmludGYoY3VyLCBzaXplb2YoYnVmKSAtIHN0YXRpY19jYXN0PHNpemVfdD4oY3VyIC0gYnVmKSwgIiVjIiwgYyk7CisgICAgICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiLiIpOworICAgICAgICAgICAgY3VyICs9IHN0cmxlbihjdXIpOworICAgICAgICB9CisgICAgfQorCisgICAgb3RMb2dEdW1wKCIlcyIsIGJ1Zik7CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUluc3RhbmNlKTsKK30KKwordm9pZCBvdER1bXAob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdExvZ0xldmVsIGFMb2dMZXZlbCwgb3RMb2dSZWdpb24gYUxvZ1JlZ2lvbiwgY29uc3QgY2hhciAqYUlkLCBjb25zdCB2b2lkICphQnVmLAorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFMZW5ndGgpCit7CisgICAgc2l6ZV90IGlkbGVuID0gc3RybGVuKGFJZCk7CisgICAgY29uc3Qgc2l6ZV90IHdpZHRoID0gNzI7CisgICAgY2hhciBidWZbODBdOworICAgIGNoYXIgKmN1ciA9IGJ1ZjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKHdpZHRoIC0gaWRsZW4pIC8gMiAtIDU7IGkrKykKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGN1ciwgc2l6ZW9mKGJ1ZikgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1ciAtIGJ1ZiksICI9Iik7CisgICAgICAgIGN1ciArPSBzdHJsZW4oY3VyKTsKKyAgICB9CisKKyAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiWyVzIGxlbj0lMDN1XSIsIGFJZCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFMZW5ndGgpKTsKKyAgICBjdXIgKz0gc3RybGVuKGN1cik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICh3aWR0aCAtIGlkbGVuKSAvIDIgLSA0OyBpKyspCisgICAgeworICAgICAgICBzbnByaW50ZihjdXIsIHNpemVvZihidWYpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXIgLSBidWYpLCAiPSIpOworICAgICAgICBjdXIgKz0gc3RybGVuKGN1cik7CisgICAgfQorCisgICAgb3RMb2dEdW1wKCIlcyIsIGJ1Zik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFMZW5ndGg7IGkgKz0gMTYpCisgICAgeworICAgICAgICBEdW1wTGluZShhSW5zdGFuY2UsIGFMb2dMZXZlbCwgYUxvZ1JlZ2lvbiwgKHVpbnQ4X3QgKikoYUJ1ZikgKyBpLCAoYUxlbmd0aCAtIGkpIDwgMTYgPyAoYUxlbmd0aCAtIGkpIDogMTYpOworICAgIH0KKworICAgIGN1ciA9IGJ1ZjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGN1ciwgc2l6ZW9mKGJ1ZikgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGN1ciAtIGJ1ZiksICItIik7CisgICAgICAgIGN1ciArPSBzdHJsZW4oY3VyKTsKKyAgICB9CisKKyAgICBvdExvZ0R1bXAoIiVzIiwgYnVmKTsKK30KKyNlbHNlIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QS1RfRFVNUAordm9pZCBvdER1bXAob3RJbnN0YW5jZSAqLCBvdExvZ0xldmVsLCBvdExvZ1JlZ2lvbiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIGNvbnN0IHNpemVfdCkge30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUEtUX0RVTVAKKworI2lmZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMCitjb25zdCBjaGFyICpvdExvZ0xldmVsVG9TdHJpbmcob3RMb2dMZXZlbCBhTGV2ZWwpCit7CisgICAgY29uc3QgY2hhciAqcmV0dmFsOworCisgICAgc3dpdGNoIChhTGV2ZWwpCisgICAgeworICAgIGNhc2UgT1RfTE9HX0xFVkVMX05PTkU6CisgICAgICAgIHJldHZhbCA9ICJOT05FIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9DUklUOgorICAgICAgICByZXR2YWwgPSAiQ1JJVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfTEVWRUxfV0FSTjoKKyAgICAgICAgcmV0dmFsID0gIldBUk4iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX0lORk86CisgICAgICAgIHJldHZhbCA9ICJJTkZPIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9ERUJHOgorICAgICAgICByZXR2YWwgPSAiREVCRyI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dmFsID0gIi0tLS0iOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX1JFR0lPTgorCisjaWZkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCitjb25zdCBjaGFyICpvdExvZ1JlZ2lvblRvU3RyaW5nKG90TG9nUmVnaW9uIGFSZWdpb24pCit7CisgICAgY29uc3QgY2hhciAqcmV0dmFsOworCisgICAgc3dpdGNoIChhUmVnaW9uKQorICAgIHsKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fQVBJOgorICAgICAgICByZXR2YWwgPSAiLUFQSS0tLS0tIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fTUxFOgorICAgICAgICByZXR2YWwgPSAiLU1MRS0tLS0tIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fQ09BUDoKKyAgICAgICAgcmV0dmFsID0gIi1DT0FQLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX0FSUDoKKyAgICAgICAgcmV0dmFsID0gIi1BUlAtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX05FVF9EQVRBOgorICAgICAgICByZXR2YWwgPSAiLU4tREFUQS0tIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fSUNNUDoKKyAgICAgICAgcmV0dmFsID0gIi1JQ01QLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX0lQNjoKKyAgICAgICAgcmV0dmFsID0gIi1JUDYtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX01BQzoKKyAgICAgICAgcmV0dmFsID0gIi1NQUMtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX01FTToKKyAgICAgICAgcmV0dmFsID0gIi1NRU0tLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX05DUDoKKyAgICAgICAgcmV0dmFsID0gIi1OQ1AtLS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfUkVHSU9OX01FU0hfQ09QOgorICAgICAgICByZXR2YWwgPSAiLU1FU0gtQ1AtIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19SRUdJT05fTkVUX0RJQUc6CisgICAgICAgIHJldHZhbCA9ICItRElBRy0tLS0iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX1JFR0lPTl9QTEFURk9STToKKyAgICAgICAgcmV0dmFsID0gIi1QTEFULS0tLSI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dmFsID0gIi0tLS0tLS0tLSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisKK2NvbnN0IGNoYXIgKm90VGhyZWFkRXJyb3JUb1N0cmluZyhvdEVycm9yIGFFcnJvcikKK3sKKyAgICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICByZXR2YWwgPSAiTm9uZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9GQUlMRUQ6CisgICAgICAgIHJldHZhbCA9ICJGYWlsZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgcmV0dmFsID0gIkRyb3AiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQnVmcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT19ST1VURToKKyAgICAgICAgcmV0dmFsID0gIk5vUm91dGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQlVTWToKKyAgICAgICAgcmV0dmFsID0gIkJ1c3kiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfUEFSU0U6CisgICAgICAgIHJldHZhbCA9ICJQYXJzZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JTlZBTElEX0FSR1M6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkQXJncyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9TRUNVUklUWToKKyAgICAgICAgcmV0dmFsID0gIlNlY3VyaXR5IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0FERFJFU1NfUVVFUlk6CisgICAgICAgIHJldHZhbCA9ICJBZGRyZXNzUXVlcnkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIk5vQWRkcmVzcyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BQk9SVDoKKyAgICAgICAgcmV0dmFsID0gIkFib3J0IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDoKKyAgICAgICAgcmV0dmFsID0gIk5vdEltcGxlbWVudGVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU1RBVEU6CisgICAgICAgIHJldHZhbCA9ICJJbnZhbGlkU3RhdGUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgICAgICByZXR2YWwgPSAiTm9BY2siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgcmV0dmFsID0gIkNoYW5uZWxBY2Nlc3NGYWlsdXJlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFVEFDSEVEOgorICAgICAgICByZXR2YWwgPSAiRGV0YWNoZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRkNTOgorICAgICAgICByZXR2YWwgPSAiRmNzRXJyIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEOgorICAgICAgICByZXR2YWwgPSAiTm9GcmFtZVJlY2VpdmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1I6CisgICAgICAgIHJldHZhbCA9ICJVbmtub3duTmVpZ2hib3IiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUzoKKyAgICAgICAgcmV0dmFsID0gIkludmFsaWRTb3VyY2VBZGRyZXNzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1dISVRFTElTVF9GSUxURVJFRDoKKyAgICAgICAgcmV0dmFsID0gIldoaXRlbGlzdEZpbHRlcmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJEZXN0aW5hdGlvbkFkZHJlc3NGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgIHJldHZhbCA9ICJOb3RGb3VuZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BTFJFQURZOgorICAgICAgICByZXR2YWwgPSAiQWxyZWFkeSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9CTEFDS0xJU1RfRklMVEVSRUQ6CisgICAgICAgIHJldHZhbCA9ICJCbGFja2xpc3RGaWx0ZXJlZCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9JUDZfQUREUkVTU19DUkVBVElPTl9GQUlMVVJFOgorICAgICAgICByZXR2YWwgPSAiSXB2NkFkZHJlc3NDcmVhdGlvbkZhaWx1cmUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX0NBUEFCTEU6CisgICAgICAgIHJldHZhbCA9ICJOb3RDYXBhYmxlIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ6CisgICAgICAgIHJldHZhbCA9ICJSZXNwb25zZVRpbWVvdXQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFVQTElDQVRFRDoKKyAgICAgICAgcmV0dmFsID0gIkR1cGxpY2F0ZWQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfUkVBU1NFTUJMWV9USU1FT1VUOgorICAgICAgICByZXR2YWwgPSAiUmVhc3NlbWJseVRpbWVvdXQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX1RNRjoKKyAgICAgICAgcmV0dmFsID0gIk5vdFRtZiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfTE9XUEFOX0RBVEFfRlJBTUU6CisgICAgICAgIHJldHZhbCA9ICJOb25Mb3dwYW5EYXRhRnJhbWUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRElTQUJMRURfRkVBVFVSRToKKyAgICAgICAgcmV0dmFsID0gIkRpc2FibGVkRmVhdHVyZSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9HRU5FUklDOgorICAgICAgICByZXR2YWwgPSAiR2VuZXJpY0Vycm9yIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR2YWwgPSAiVW5rbm93bkVycm9yVHlwZSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuaHBwIGIvc3JjL2NvcmUvY29tbW9uL2xvZ2dpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjAzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vbG9nZ2luZy5ocHAKQEAgLTAsMCArMSwxMzk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy4KKyAqLworCisjaWZuZGVmIExPR0dJTkdfSFBQXworI2RlZmluZSBMT0dHSU5HX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisKKyNpZmRlZiBXSU5ET1dTX0xPR0dJTkcKKyNpZmRlZiBfS0VSTkVMX01PREUKKyNpbmNsdWRlIDx3ZG0uaD4KKyNlbmRpZgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vbG9nZ2luZy13aW5kb3dzLmgiCisjaWZkZWYgV1BQX05BTUUKKyNpbmNsdWRlIFdQUF9OQU1FCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgV0lORE9XU19MT0dHSU5HCisjZGVmaW5lIG90TG9nRnVuY0VudHJ5KCkKKyNkZWZpbmUgb3RMb2dGdW5jRW50cnlNc2coYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0Z1bmNFeGl0KCkKKyNkZWZpbmUgb3RMb2dGdW5jRXhpdE1zZyhhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90TG9nQ3JpdAorICoKKyAqIExvZ2dpbmcgYXQgbG9nIGxldmVsIGNyaXRpY2FsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9DUklUCisjZGVmaW5lIG90TG9nQ3JpdChhSW5zdGFuY2UsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vdExvZ0Zvcm1hdHRlcihhSW5zdGFuY2UsIE9UX0xPR19MRVZFTF9DUklULCBhUmVnaW9uLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIG90TG9nQ3JpdChhSW5zdGFuY2UsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuCisgKgorICogTG9nZ2luZyBhdCBsb2cgbGV2ZWwgd2FybmluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfV0FSTgorI2RlZmluZSBvdExvZ1dhcm4oYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBPVF9MT0dfTEVWRUxfV0FSTiwgYVJlZ2lvbiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ1dhcm4oYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90TG9nSW5mbworICoKKyAqIExvZ2dpbmcgYXQgbG9nIGxldmVsIGluZm8uCisgKgorICogQHBhcmFtW2luXSAgYVJlZ2lvbiAgVGhlIGxvZyByZWdpb24uCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0lORk8KKyNkZWZpbmUgb3RMb2dJbmZvKGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX290TG9nRm9ybWF0dGVyKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX0lORk8sIGFSZWdpb24sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dJbmZvKGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0RlYmcKKyAqCisgKiBMb2dnaW5nIGF0IGxvZyBsZXZlbCBkZWJ1Zy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfREVCRworI2RlZmluZSBvdExvZ0RlYmcoYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBPVF9MT0dfTEVWRUxfREVCRywgYVJlZ2lvbiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0RlYmcoYUluc3RhbmNlLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworI2lmbmRlZiBXSU5ET1dTX0xPR0dJTkcKKworLyoqCisgKiBAZGVmIG90TG9nQ3JpdEFwaQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgQVBJIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybkFwaQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBBUEkgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvQXBpCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgaW5mbyBmb3IgdGhlIEFQSSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ0RlYmdBcGkKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIEFQSSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FQSSA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdEFwaShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUEksIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5BcGkoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVBJLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQXBpKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0FQSSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0FwaShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUEksIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0QXBpKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5BcGkoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nSW5mb0FwaShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnQXBpKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXRNZXNoQ29QCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuTWVzaENvUAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvTWVzaENvUAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTWVzaENvUAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgTUxFIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFID09IDEKKyNkZWZpbmUgb3RMb2dDcml0TWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRVNIX0NPUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nV2Fybk1lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVTSF9DT1AsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0luZm9NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01FU0hfQ09QLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRVNIX0NPUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXRNZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0RlYmdNZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgb3RMb2dDcml0TWJlZFRscyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0TWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5NYmVkVGxzKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm5NZXNoQ29QKGFJbnN0YW5jZSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nSW5mb01iZWRUbHMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nSW5mb01lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTWJlZFRscyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnTWVzaENvUChhSW5zdGFuY2UsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0TWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBNTEUgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIE1MRSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ0luZm9NbGUKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBpbmZvIGZvciB0aGUgTUxFIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ01sZQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgTUxFIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFID09IDEKKyNkZWZpbmUgb3RMb2dDcml0TWxlKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0NyaXQoYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01MRSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nV2Fybk1sZShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dXYXJuKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5NbGVFcnIoYUluc3RhbmNlLCBhRXJyb3IsIGFGb3JtYXQsIC4uLikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01BQywgIkVycm9yICVzOiAiIGFGb3JtYXQsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpLCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvTWxlKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01MRSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ01sZShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0TWxlKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5NbGUoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nV2Fybk1sZUVycihhSW5zdGFuY2UsIGFFcnJvciwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9NbGUoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ01sZShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0QXJwCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBFSUQtdG8tUkxPQyBtYXBwaW5nIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybkFycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBFSUQtdG8tUkxPQyBtYXBwaW5nIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb0FycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBFSUQtdG8tUkxPQyBtYXBwaW5nIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0FycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgRUlELXRvLVJMT0MgbWFwcGluZyByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FSUCA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdEFycChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUlAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5BcnAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVJQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQXJwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0FSUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0FycChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUlAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0QXJwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5BcnAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nSW5mb0FycChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnQXJwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXROZXREYXRhCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBOZXR3b3JrIERhdGEgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dXYXJuTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBOZXR3b3JrIERhdGEgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBOZXR3b3JrIERhdGEgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgTmV0d29yayBEYXRhIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVUREFUQSA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdE5ldERhdGEoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RBVEEsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5OZXREYXRhKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX05FVF9EQVRBLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfREFUQSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ05ldERhdGEoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RBVEEsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0TmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnTmV0RGF0YShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0SWNtcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgSUNNUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybkljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCB3YXJuaW5nIGZvciB0aGUgSUNNUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb0ljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBpbmZvIGZvciB0aGUgSUNNUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0ljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIElDTVB2NiByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lDTVAgPT0gMQorI2RlZmluZSBvdExvZ0NyaXRJY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0NyaXQoYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5JY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0luZm9JY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0RlYmdJY21wKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0RlYmcoYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lDTVAsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0SWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuSWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvSWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnSWNtcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0SXA2CisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgY3JpdGljYWwgZm9yIHRoZSBJUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nV2FybklwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIHdhcm5pbmcgZm9yIHRoZSBJUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb0lwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBJUHY2IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0lwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGRlYnVnIGZvciB0aGUgSVB2NiByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lQNiA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdElwNihhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9JUDYsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5JcDYoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSVA2LCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvSXA2KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lQNiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0lwNihhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9JUDYsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0SXA2KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5JcDYoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nSW5mb0lwNihhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnSXA2KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXRNYWMKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBjcml0aWNhbCBmb3IgdGhlIE1BQyByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5NYWMKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCB3YXJuaW5nIGZvciB0aGUgTUFDIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb01hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBNQUMgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTWFjCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgZGVidWcgZm9yIHRoZSBNQUMgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMgPT0gMQorI2RlZmluZSBvdExvZ0NyaXRNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dXYXJuTWFjKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01BQywgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nSW5mb01hYyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NQUMsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0RlYmdNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTWFjRXJyKGFJbnN0YW5jZSwgYUVycm9yLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICBcCisgICAgb3RMb2dXYXJuKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NQUMsICJFcnJvciAlczogIiBhRm9ybWF0LCBvdFRocmVhZEVycm9yVG9TdHJpbmcoYUVycm9yKSwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXRNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nV2Fybk1hYyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvTWFjKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0RlYmdNYWMoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ01hY0VycihhSW5zdGFuY2UsIGFFcnJvciwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NyaXRNZW0KKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBjcml0aWNhbCBmb3IgdGhlIG1lbW9yeSByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5NZW0KKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCB3YXJuaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nSW5mb01lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBtZW1vcnkgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dEZWJnTWVtCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgZGVidWcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19NRU0gPT0gMQorI2RlZmluZSBvdExvZ0NyaXRNZW0oYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dXYXJuTWVtKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01FTSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nSW5mb01lbShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRU0sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0RlYmdNZW0oYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIG90TG9nQ3JpdE1lbShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuTWVtKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9NZW0oYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ01lbShhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0TmV0RGlhZworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgTkVURElBRyByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5OZXREaWFnCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIE5FVERJQUcgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvTmV0RGlhZworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBORVRESUFHIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ05ldERpYWcKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIE5FVERJQUcgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19ORVRESUFHID09IDEKKyNkZWZpbmUgb3RMb2dDcml0TmV0RGlhZyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfRElBRywgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nV2Fybk5ldERpYWcoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RJQUcsIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ0luZm9OZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX05FVF9ESUFHLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dEZWJnTmV0RGlhZyhhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfRElBRywgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXROZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5OZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9OZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0RlYmdOZXREaWFnKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdExvZ0NlcnQKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBub25lIGZvciB0aGUgY2VydGlmaWNhdGlvbiB0ZXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HCisjZGVmaW5lIG90TG9nQ2VydE1lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vdExvZ0Zvcm1hdHRlcihhSW5zdGFuY2UsIE9UX0xPR19MRVZFTF9OT05FLCBPVF9MT0dfUkVHSU9OX01FU0hfQ09QLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIG90TG9nQ2VydE1lc2hDb1AoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworLyoqCisqIEBkZWYgb3RMb2dDcml0UGxhdAorKgorKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBjcml0aWNhbCBmb3IgdGhlIFBsYXRmb3JtIHJlZ2lvbi4KKyoKKyogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyoKKyovCisKKy8qKgorKiBAZGVmIG90TG9nV2FyblBsYXQKKyoKKyogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIFBsYXRmb3JtIHJlZ2lvbi4KKyoKKyogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyoKKyovCisKKy8qKgorKiBAZGVmIG90TG9nSW5mb1BsYXQKKyoKKyogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgaW5mbyBmb3IgdGhlIFBsYXRmb3JtIHJlZ2lvbi4KKyoKKyogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyoKKyovCisKKy8qKgorKiBAZGVmIG90TG9nRGViZ1BsYXQKKyoKKyogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgZGVidWcgZm9yIHRoZSBQbGF0Zm9ybSByZWdpb24uCisqCisqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisqCisqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19QTEFURk9STSA9PSAxCisjZGVmaW5lIG90TG9nQ3JpdFBsYXQoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fUExBVEZPUk0sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBvdExvZ1dhcm5QbGF0KGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKSBvdExvZ1dhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX1BMQVRGT1JNLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9QTEFURk9STSwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ1BsYXQoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fUExBVEZPUk0sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgb3RMb2dDcml0UGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dXYXJuUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dJbmZvUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNkZWZpbmUgb3RMb2dEZWJnUGxhdChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3RMb2dDcml0Q29hcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGNyaXRpY2FsIGZvciB0aGUgQ29BUCByZWdpb24uCisgKgorICogQHBhcmFtW2luXSAgYUZvcm1hdCAgQSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nLgorICogQHBhcmFtW2luXSAgLi4uICAgICAgQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKgorICovCisKKy8qKgorICogQGRlZiBvdExvZ1dhcm5Db2FwCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbG9nIHdpdGggbGV2ZWwgd2FybmluZyBmb3IgdGhlIENvQVAgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3RMb2dJbmZvQ29hcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGxvZyB3aXRoIGxldmVsIGluZm8gZm9yIHRoZSBDb0FQIHJlZ2lvbi4KKyAqCisgKiBAcGFyYW1baW5dICBhRm9ybWF0ICBBIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcuCisgKiBAcGFyYW1baW5dICAuLi4gICAgICBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90TG9nRGViZ0NvYXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBsb2cgd2l0aCBsZXZlbCBkZWJ1ZyBmb3IgdGhlIENvQVAgcmVnaW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGb3JtYXQgIEEgcG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZy4KKyAqIEBwYXJhbVtpbl0gIC4uLiAgICAgIEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19DT0FQID09IDEKKyNkZWZpbmUgb3RMb2dDcml0Q29hcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9DT0FQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dXYXJuQ29hcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dXYXJuKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9DT0FQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQ29hcChhSW5zdGFuY2UsIGFGb3JtYXQsIC4uLikgb3RMb2dJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9DT0FQLCBhRm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgb3RMb2dJbmZvQ29hcEVycihhSW5zdGFuY2UsIGFFcnJvciwgYUZvcm1hdCwgLi4uKSAgICAgICAgICAgICAgIFwKKyAgICBvdExvZ0luZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0NPQVAsICJFcnJvciAlczogIiBhRm9ybWF0LCBvdFRocmVhZEVycm9yVG9TdHJpbmcoYUVycm9yKSwgIyMgX19WQV9BUkdTX18pCisjZGVmaW5lIG90TG9nRGViZ0NvYXAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pIG90TG9nRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQ09BUCwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBvdExvZ0NyaXRDb2FwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ1dhcm5Db2FwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9Db2FwKGFJbnN0YW5jZSwgYUZvcm1hdCwgLi4uKQorI2RlZmluZSBvdExvZ0luZm9Db2FwRXJyKGFJbnN0YW5jZSwgYUVycm9yLCBhRm9ybWF0LCAuLi4pCisjZGVmaW5lIG90TG9nRGViZ0NvYXAoYUluc3RhbmNlLCBhRm9ybWF0LCAuLi4pCisjZW5kaWYKKworI2VuZGlmIC8vIFdJTkRPV1NfTE9HR0lORworCisvKioKKyAqIEBkZWYgb3REdW1wQ3JpdAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGNyaXRpY2FsLgorICoKKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfQ1JJVAorI2RlZmluZSBvdER1bXBDcml0KGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUlkLCBhQnVmLCBhTGVuZ3RoKSAgICAgICAgICAgICAgICAgIFwKKyAgICBvdER1bXAoYUluc3RhbmNlLCBPVF9MT0dfTEVWRUxfQ1JJVCwgYVJlZ2lvbiwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2Vsc2UKKyNkZWZpbmUgb3REdW1wQ3JpdChhSW5zdGFuY2UsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgb3REdW1wV2FybgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcuCisgKgorICogQHBhcmFtW2luXSAgYVJlZ2lvbiAgVGhlIGxvZyByZWdpb24uCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9XQVJOCisjZGVmaW5lIG90RHVtcFdhcm4oYUluc3RhbmNlLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpICAgICAgICAgICAgICAgICAgXAorICAgIG90RHVtcChhSW5zdGFuY2UsIE9UX0xPR19MRVZFTF9XQVJOLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBXYXJuKGFJbnN0YW5jZSwgYVJlZ2lvbiwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBJbmZvCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgaW5mby4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0lORk8KKyNkZWZpbmUgb3REdW1wSW5mbyhhSW5zdGFuY2UsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgICAgICAgICAgICAgICAgICBcCisgICAgb3REdW1wKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX0lORk8sIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcEluZm8oYUluc3RhbmNlLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcERlYmcKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1Zy4KKyAqCisgKiBAcGFyYW1baW5dICBhUmVnaW9uICBUaGUgbG9nIHJlZ2lvbi4KKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwgPj0gT1RfTE9HX0xFVkVMX0RFQkcKKyNkZWZpbmUgb3REdW1wRGViZyhhSW5zdGFuY2UsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgICAgICAgICAgICAgICAgICBcCisgICAgb3REdW1wKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX0RFQkcsIGFSZWdpb24sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcERlYmcoYUluc3RhbmNlLCBhUmVnaW9uLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXROZXREYXRhCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBOZXR3b3JrIERhdGEuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2Fybk5ldERhdGEKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCB3YXJuaW5nIGFuZCByZWdpb24gTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcEluZm9OZXREYXRhCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgaW5mbyBhbmQgcmVnaW9uIE5ldHdvcmsgRGF0YS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnTmV0RGF0YQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gTmV0d29yayBEYXRhLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVUREFUQSA9PSAxCisjZGVmaW5lIG90RHVtcENyaXROZXREYXRhKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfREFUQSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuTmV0RGF0YShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTkVUX0RBVEEsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wSW5mb05ldERhdGEoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcEluZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX05FVF9EQVRBLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcERlYmdOZXREYXRhKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9ORVRfREFUQSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2Vsc2UKKyNkZWZpbmUgb3REdW1wQ3JpdE5ldERhdGEoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5OZXREYXRhKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTmV0RGF0YShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ05ldERhdGEoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXRNbGUKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIE1MRS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBXYXJuTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgd2FybmluZyBhbmQgcmVnaW9uIE1MRS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBJbmZvTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgaW5mbyBhbmQgcmVnaW9uIE1MRS4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnTWxlCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBNTEUuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19NTEUgPT0gMQorI2RlZmluZSBvdER1bXBDcml0TWxlKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBDcml0KGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wV2Fybk1sZShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUxFLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcEluZm9NbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcEluZm8oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01MRSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnTWxlKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBEZWJnKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NTEUsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcENyaXRNbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5NbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcEluZm9NbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcERlYmdNbGUoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXRBcnAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIEVJRC10by1STE9DIG1hcHBpbmcuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2FybkFycAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBFSUQtdG8tUkxPQyBtYXBwaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcEluZm9BcnAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBpbmZvIGFuZCByZWdpb24gRUlELXRvLVJMT0MgbWFwcGluZy4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnQXJwCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBFSUQtdG8tUkxPQyBtYXBwaW5nLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVJQID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdEFycChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVJQLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5BcnAoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0FSUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9BUlAsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ0FycChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fQVJQLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0QXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnQXJwKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDcml0SWNtcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gSUNNUHY2LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcFdhcm5JY21wCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgd2FybmluZyBhbmQgcmVnaW9uIElDTVB2Ni4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBJbmZvSWNtcAorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGluZm8gYW5kIHJlZ2lvbiBJQ01QdjYuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wRGViZ0ljbXAKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIElDTVB2Ni4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lDTVAgPT0gMQorI2RlZmluZSBvdER1bXBDcml0SWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wV2FybihhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wSW5mbyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSUNNUCwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2Vsc2UKKyNkZWZpbmUgb3REdW1wQ3JpdEljbXAoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5JY21wKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSWNtcChhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ0ljbXAoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZW5kaWYKKworLyoqCisgKiBAZGVmIG90RHVtcENyaXRJcDYKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBkZWJ1ZyBhbmQgcmVnaW9uIElQdjYuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2FybklwNgorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBJUHY2LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKworLyoqCisgKiBAZGVmIG90RHVtcEluZm9JcDYKKyAqCisgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBtZW1vcnkgZHVtcCB3aXRoIGxvZyBsZXZlbCBpbmZvIGFuZCByZWdpb24gSVB2Ni4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisKKy8qKgorICogQGRlZiBvdER1bXBEZWJnSXA2CisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBJUHY2LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSVA2ID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdElwNihhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSVA2LCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5JcDYoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX0lQNiwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9JUDYsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ0lwNihhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fSVA2LCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0SXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnSXA2KGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDcml0TWFjCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBNQUMuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2Fybk1hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBNQUMuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wSW5mb01hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGluZm8gYW5kIHJlZ2lvbiBNQUMuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wRGViZ01hYworICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gTUFDLgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUFDID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdE1hYyhhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5NYWMoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01BQywgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NQUMsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ01hYyhhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUFDLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0TWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnTWFjKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDcml0TWVtCisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgZGVidWcgYW5kIHJlZ2lvbiBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wV2Fybk1lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIHdhcm5pbmcgYW5kIHJlZ2lvbiBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wSW5mb01lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGluZm8gYW5kIHJlZ2lvbiBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLworCisvKioKKyAqIEBkZWYgb3REdW1wRGViZ01lbQorICoKKyAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIG1lbW9yeSBkdW1wIHdpdGggbG9nIGxldmVsIGRlYnVnIGFuZCByZWdpb24gbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbl0gIGFJZCAgICAgIEEgcG9pbnRlciB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBpcyBwcmludGVkIGJlZm9yZSB0aGUgYnl0ZXMuCisgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIE51bWJlciBvZiBieXRlcyB0byBwcmludC4KKyAqCisgKi8KKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUVNID09IDEKKyNkZWZpbmUgb3REdW1wQ3JpdE1lbShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wQ3JpdChhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZGVmaW5lIG90RHVtcFdhcm5NZW0oYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpIG90RHVtcFdhcm4oYUluc3RhbmNlLCBPVF9MT0dfUkVHSU9OX01FTSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKSBvdER1bXBJbmZvKGFJbnN0YW5jZSwgT1RfTE9HX1JFR0lPTl9NRU0sIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNkZWZpbmUgb3REdW1wRGViZ01lbShhSW5zdGFuY2UsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkgb3REdW1wRGViZyhhSW5zdGFuY2UsIE9UX0xPR19SRUdJT05fTUVNLCBhSWQsIGFCdWYsIGFMZW5ndGgpCisjZWxzZQorI2RlZmluZSBvdER1bXBDcml0TWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBXYXJuTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBJbmZvTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2RlZmluZSBvdER1bXBEZWJnTWVtKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBvdER1bXBDZXJ0CisgKgorICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWVtb3J5IGR1bXAgd2l0aCBsb2cgbGV2ZWwgbm9uZSBmb3IgdGhlIGNlcnRpZmljYXRpb24gdGVzdC4KKyAqCisgKiBAcGFyYW1baW5dICBhSWQgICAgICBBIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGJ5dGVzLgorICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQuCisgKgorICovCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cKKyNkZWZpbmUgb3REdW1wQ2VydE1lc2hDb1AoYUluc3RhbmNlLCBhSWQsIGFCdWYsIGFMZW5ndGgpICAgICAgICAgICAgICAgICAgICBcCisgICAgb3REdW1wKGFJbnN0YW5jZSwgT1RfTE9HX0xFVkVMX05PTkUsIE9UX0xPR19SRUdJT05fTUVTSF9DT1AsIGFJZCwgYUJ1ZiwgYUxlbmd0aCkKKyNlbHNlCisjZGVmaW5lIG90RHVtcENlcnRNZXNoQ29QKGFJbnN0YW5jZSwgYUlkLCBhQnVmLCBhTGVuZ3RoKQorI2VuZGlmCisKKy8qKgorICogVGhpcyBtZXRob2QgZHVtcHMgYnl0ZXMgdG8gdGhlIGxvZyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZhc2hpb24uCisgKgorICogQHBhcmFtW2luXSAgYUxldmVsICAgVGhlIGxvZyBsZXZlbC4KKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICogQHBhcmFtW2luXSAgYUlkICAgICAgQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0aGF0IGlzIHByaW50ZWQgYmVmb3JlIHRoZSBieXRlcy4KKyAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHByaW50LgorICoKKyAqLwordm9pZCBvdER1bXAob3RJbnN0YW5jZSAqYUludHNhbmNlLCBvdExvZ0xldmVsIGFMZXZlbCwgb3RMb2dSZWdpb24gYVJlZ2lvbiwgY29uc3QgY2hhciAqYUlkLCBjb25zdCB2b2lkICphQnVmLAorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFMZW5ndGgpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwgPT0gMQorLyoqCisqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBsb2cgbGV2ZWwgdmFsdWUgaW50byBhIHN0cmluZworKgorKiBAcGFyYW1baW5dICBhTGV2ZWwgIFRoZSBsb2cgbGV2ZWwuCisqCisqIEByZXR1cm5zIEEgY29uc3QgY2hhciBwb2ludGVyIHRvIHRoZSBDIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2cgbGV2ZWwuCisqCisqLworY29uc3QgY2hhciAqb3RMb2dMZXZlbFRvU3RyaW5nKG90TG9nTGV2ZWwgYUxldmVsKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OID09IDEKKy8qKgorICogVGhpcyBtZXRob2QgY29udmVydHMgdGhlIGxvZyByZWdpb24gdmFsdWUgaW50byBhIHN0cmluZworICoKKyAqIEBwYXJhbVtpbl0gIGFSZWdpb24gIFRoZSBsb2cgcmVnaW9uLgorICoKKyAqIEByZXR1cm5zIEEgY29uc3QgY2hhciBwb2ludGVyIHRvIHRoZSBDIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2cgcmVnaW9uLgorICoKKyAqLworY29uc3QgY2hhciAqb3RMb2dSZWdpb25Ub1N0cmluZyhvdExvZ1JlZ2lvbiBhUmVnaW9uKTsKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfTEVWRUwgPT0gMQorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OID09IDEKKworLyoqCisgKiBMb2NhbC9wcml2YXRlIG1hY3JvIHRvIGZvcm1hdCB0aGUgbG9nIG1lc3NhZ2UKKyAqLworI2RlZmluZSBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikgICAgICAgIFwKKyAgICBfb3REeW5hbWljTG9nKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFJbnN0YW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhTG9nTGV2ZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYVJlZ2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJbJXNdJXM6ICIgYUZvcm1hdCBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdExvZ0xldmVsVG9TdHJpbmcoYUxvZ0xldmVsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgb3RMb2dSZWdpb25Ub1N0cmluZyhhUmVnaW9uKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICMjIF9fVkFfQVJHU19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKworI2Vsc2UgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX1JFR0lPTgorCisvKioKKyogTG9jYWwvcHJpdmF0ZSBtYWNybyB0byBmb3JtYXQgdGhlIGxvZyBtZXNzYWdlCisqLworI2RlZmluZSBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmMsIGFMb2dMZXZlbCwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKSAgICAgICAgIFwKKyAgICBfb3REeW5hbWljTG9nKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFJbnN0YW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhTG9nTGV2ZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYVJlZ2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJbJXNdOiAiIGFGb3JtYXQgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1NVRkZJWCwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdExvZ0xldmVsVG9TdHJpbmcoYUxvZ0xldmVsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIyMgX19WQV9BUkdTX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKQorCisjZW5kaWYKKworI2Vsc2UgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04gPT0gMQorCisvKioKKyogTG9jYWwvcHJpdmF0ZSBtYWNybyB0byBmb3JtYXQgdGhlIGxvZyBtZXNzYWdlCisqLworI2RlZmluZSBfb3RMb2dGb3JtYXR0ZXIoYUluc3RhbmNlLCBhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsIC4uLikgICAgICAgIFwKKyAgICBfb3REeW5hbWljTG9nKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFJbnN0YW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhTG9nTGV2ZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYVJlZ2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIlczogIiBhRm9ybWF0IE9QRU5USFJFQURfQ09ORklHX0xPR19TVUZGSVgsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdExvZ1JlZ2lvblRvU3RyaW5nKGFSZWdpb24pLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIyMgX19WQV9BUkdTX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKQorCisjZWxzZSAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisKKy8qKgorKiBMb2NhbC9wcml2YXRlIG1hY3JvIHRvIGZvcm1hdCB0aGUgbG9nIG1lc3NhZ2UKKyovCisjZGVmaW5lIF9vdExvZ0Zvcm1hdHRlcihhSW5zdGFjZSwgYUxvZ0xldmVsLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgXAorICAgIF9vdER5bmFtaWNMb2coICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYUluc3RhbmNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFMb2dMZXZlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhUmVnaW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYUZvcm1hdCBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICMjIF9fVkFfQVJHU19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKworI2VuZGlmCisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTCA9PSAxCisKKy8qKgorKiBMb2NhbC9wcml2YXRlIG1hY3JvIHRvIGR5bmFtaWNhbGx5IGZpbHRlciBsb2cgbGV2ZWwuCisqLworI2RlZmluZSBfb3REeW5hbWljTG9nKGFJbnN0YW5jZSwgYUxvZ0xldmVsLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChvdEdldER5bmFtaWNMb2dMZXZlbChhSW5zdGFuY2UpID49IGFMb2dMZXZlbCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX290UGxhdExvZyhhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKTsgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2Vsc2UgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisKKyNkZWZpbmUgX290RHluYW1pY0xvZyhhSW5zdGFuY2UsIGFMb2dMZXZlbCwgYVJlZ2lvbiwgYUZvcm1hdCwgLi4uKSAgICAgICAgICBcCisgICAgX290UGxhdExvZyhhTG9nTGV2ZWwsIGFSZWdpb24sIGFGb3JtYXQsICMjIF9fVkFfQVJHU19fKQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisKKy8qKgorICogYE9QRU5USFJFQURfQ09ORklHX1BMQVRfTE9HX0ZVTkNUSU9OYCBpcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIChzZWUgYG9wZW50aHJlYWQtY29yZS1kZWZhdWx0LWNvbmZpZy5oYCkgd2hpY2gKKyAqIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24vbWFjcm8gdG8gYmUgdXNlZCBmb3IgbG9nZ2luZyBpbiBPcGVuVGhyZWFkLiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byBgb3RQbGF0TG9nKClgLgorICovCisjZGVmaW5lIF9vdFBsYXRMb2coYUxvZ0xldmVsLCBhUmVnaW9uLCBhRm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE9QRU5USFJFQURfQ09ORklHX1BMQVRfTE9HX0ZVTkNUSU9OKGFMb2dMZXZlbCwgYVJlZ2lvbiwgYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorCisjZW5kaWYgIC8vIExPR0dJTkdfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL21lc3NhZ2UuY3BwIGIvc3JjL2NvcmUvY29tbW9uL21lc3NhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjODkwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vbWVzc2FnZS5jcHAKQEAgLTAsMCArMSwxMDUyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBtZXNzYWdlIGJ1ZmZlciBwb29sIGFuZCBtZXNzYWdlIGJ1ZmZlcnMuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAibWVzc2FnZS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibWVzc2FnZS5ocHAiCisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK01lc3NhZ2VQb29sOjpNZXNzYWdlUG9vbChvdEluc3RhbmNlICphSW5zdGFuY2UpIDoKKyAgICBJbnN0YW5jZUxvY2F0b3IoYUluc3RhbmNlKSwKKyAgICBtQWxsUXVldWUoKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorICAgIC8vIEluaXRpYWxpemUgUGxhdGZvcm0gYnVmZmVyIHBvb2wgbWFuYWdlbWVudC4KKyAgICBvdFBsYXRNZXNzYWdlUG9vbEluaXQoR2V0SW5zdGFuY2UoKSwga051bUJ1ZmZlcnMsIHNpemVvZihCdWZmZXIpKTsKKyNlbHNlCisgICAgbWVtc2V0KG1CdWZmZXJzLCAwLCBzaXplb2YobUJ1ZmZlcnMpKTsKKworICAgIG1GcmVlQnVmZmVycyA9IG1CdWZmZXJzOworCisgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGtOdW1CdWZmZXJzIC0gMTsgaSsrKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlcnNbaV0uU2V0TmV4dEJ1ZmZlcigmbUJ1ZmZlcnNbaSArIDFdKTsKKyAgICB9CisKKyAgICBtQnVmZmVyc1trTnVtQnVmZmVycyAtIDFdLlNldE5leHRCdWZmZXIoTlVMTCk7CisgICAgbU51bUZyZWVCdWZmZXJzID0ga051bUJ1ZmZlcnM7CisjZW5kaWYKK30KKworTWVzc2FnZSAqTWVzc2FnZVBvb2w6Ok5ldyh1aW50OF90IGFUeXBlLCB1aW50MTZfdCBhUmVzZXJ2ZWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KE5ld0J1ZmZlcigpKSkgIT0gTlVMTCk7CisKKyAgICBtZW1zZXQobWVzc2FnZSwgMCwgc2l6ZW9mKCptZXNzYWdlKSk7CisgICAgbWVzc2FnZS0+U2V0TWVzc2FnZVBvb2wodGhpcyk7CisgICAgbWVzc2FnZS0+U2V0VHlwZShhVHlwZSk7CisgICAgbWVzc2FnZS0+U2V0UmVzZXJ2ZWQoYVJlc2VydmVkKTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKHRydWUpOworICAgIG1lc3NhZ2UtPlNldFByaW9yaXR5KGtEZWZhdWx0TWVzc2FnZVByaW9yaXR5KTsKKworICAgIGlmIChtZXNzYWdlLT5TZXRMZW5ndGgoMCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIEZyZWUobWVzc2FnZSk7CisgICAgICAgIG1lc3NhZ2UgPSBOVUxMOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworb3RFcnJvciBNZXNzYWdlUG9vbDo6RnJlZShNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBhc3NlcnQoYU1lc3NhZ2UtPk5leHQoTWVzc2FnZUluZm86OmtMaXN0QWxsKSA9PSBOVUxMICYmCisgICAgICAgICAgIGFNZXNzYWdlLT5QcmV2KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCkgPT0gTlVMTCk7CisKKyAgICBhc3NlcnQoYU1lc3NhZ2UtPk5leHQoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlKSA9PSBOVUxMICYmCisgICAgICAgICAgIGFNZXNzYWdlLT5QcmV2KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSkgPT0gTlVMTCk7CisKKyAgICByZXR1cm4gRnJlZUJ1ZmZlcnMoc3RhdGljX2Nhc3Q8QnVmZmVyICo+KGFNZXNzYWdlKSk7Cit9CisKK0J1ZmZlciAqTWVzc2FnZVBvb2w6Ok5ld0J1ZmZlcih2b2lkKQoreworICAgIEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorCisgICAgYnVmZmVyID0gc3RhdGljX2Nhc3Q8QnVmZmVyICo+KG90UGxhdE1lc3NhZ2VQb29sTmV3KEdldEluc3RhbmNlKCkpKTsKKworI2Vsc2UKKworICAgIGlmIChtRnJlZUJ1ZmZlcnMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGJ1ZmZlciA9IG1GcmVlQnVmZmVyczsKKyAgICAgICAgbUZyZWVCdWZmZXJzID0gbUZyZWVCdWZmZXJzLT5HZXROZXh0QnVmZmVyKCk7CisgICAgICAgIGJ1ZmZlci0+U2V0TmV4dEJ1ZmZlcihOVUxMKTsKKyAgICAgICAgbU51bUZyZWVCdWZmZXJzLS07CisgICAgfQorCisjZW5kaWYKKworICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TG9nSW5mb01lbShHZXRJbnN0YW5jZSgpLCAiTm8gYXZhaWxhYmxlIG1lc3NhZ2UgYnVmZmVyIik7CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworb3RFcnJvciBNZXNzYWdlUG9vbDo6RnJlZUJ1ZmZlcnMoQnVmZmVyICphQnVmZmVyKQoreworICAgIEJ1ZmZlciAqdG1wQnVmZmVyOworCisgICAgd2hpbGUgKGFCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRtcEJ1ZmZlciA9IGFCdWZmZXItPkdldE5leHRCdWZmZXIoKTsKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQKKyAgICAgICAgb3RQbGF0TWVzc2FnZVBvb2xGcmVlKEdldEluc3RhbmNlKCksIGFCdWZmZXIpOworI2Vsc2UgLy8gT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgICAgIGFCdWZmZXItPlNldE5leHRCdWZmZXIobUZyZWVCdWZmZXJzKTsKKyAgICAgICAgbUZyZWVCdWZmZXJzID0gYUJ1ZmZlcjsKKyAgICAgICAgbU51bUZyZWVCdWZmZXJzKys7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgICAgIGFCdWZmZXIgPSB0bXBCdWZmZXI7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWVzc2FnZVBvb2w6OlJlY2xhaW1CdWZmZXJzKGludCBhTnVtQnVmZmVycykKK3sKKyAgICB1aW50MTZfdCBudW1GcmVlQnVmZmVyczsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorICAgIG51bUZyZWVCdWZmZXJzID0gb3RQbGF0TWVzc2FnZVBvb2xOdW1GcmVlQnVmZmVycyhHZXRJbnN0YW5jZSgpKTsKKyNlbHNlCisgICAgbnVtRnJlZUJ1ZmZlcnMgPSBtTnVtRnJlZUJ1ZmZlcnM7CisjZW5kaWYKKworICAgIC8vRmlyc3QgY29tcGFyaXNvbiBpcyB0byBnZXQgYXJvdW5kIGlzc3VlcyB3aXRoIGNvbXBhcmluZworICAgIC8vc2lnbmVkIGFuZCB1bnNpZ25lZCBudW1iZXJzLCBpZiBhTnVtQnVmZmVycyBpcyBuZWdhdGl2ZSB0aGVuCisgICAgLy90aGUgc2Vjb25kIGNvbXBhcmlzb24gd29udCBiZSBhdHRlbXB0ZWQuCisgICAgaWYgKGFOdW1CdWZmZXJzIDwgMCB8fCBhTnVtQnVmZmVycyA8PSBudW1GcmVlQnVmZmVycykKKyAgICB7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9fQlVGUzsKKyAgICB9Cit9CisKK01lc3NhZ2UgKk1lc3NhZ2VQb29sOjpJdGVyYXRvcjo6TmV4dCh2b2lkKSBjb25zdAoreworICAgIE1lc3NhZ2UgKm5leHQ7CisKKyAgICBWZXJpZnlPckV4aXQobU1lc3NhZ2UgIT0gTlVMTCwgbmV4dCA9IE5VTEwpOworCisgICAgaWYgKG1NZXNzYWdlID09IG1NZXNzYWdlLT5HZXRNZXNzYWdlUG9vbCgpLT5HZXRBbGxNZXNzYWdlc1RhaWwoKS5HZXRNZXNzYWdlKCkpCisgICAgeworICAgICAgICBuZXh0ID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV4dCA9IG1NZXNzYWdlLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBuZXh0OworfQorCitNZXNzYWdlICpNZXNzYWdlUG9vbDo6SXRlcmF0b3I6OlByZXYodm9pZCkgY29uc3QKK3sKKyAgICBNZXNzYWdlICpwcmV2OworCisgICAgVmVyaWZ5T3JFeGl0KG1NZXNzYWdlICE9IE5VTEwsIHByZXYgPSBOVUxMKTsKKworICAgIGlmIChtTWVzc2FnZSA9PSBtTWVzc2FnZS0+R2V0TWVzc2FnZVBvb2woKS0+R2V0QWxsTWVzc2FnZXNIZWFkKCkuR2V0TWVzc2FnZSgpKQorICAgIHsKKyAgICAgICAgcHJldiA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByZXYgPSBtTWVzc2FnZS0+UHJldihNZXNzYWdlSW5mbzo6a0xpc3RBbGwpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcHJldjsKK30KKworTWVzc2FnZVBvb2w6Okl0ZXJhdG9yIE1lc3NhZ2VQb29sOjpHZXRBbGxNZXNzYWdlc0hlYWQodm9pZCkgY29uc3QKK3sKKyAgICBNZXNzYWdlICpoZWFkOworICAgIE1lc3NhZ2UgKnRhaWw7CisKKyAgICB0YWlsID0gR2V0QWxsTWVzc2FnZXNUYWlsKCkuR2V0TWVzc2FnZSgpOworCisgICAgaWYgKHRhaWwgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGhlYWQgPSB0YWlsLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhlYWQgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBJdGVyYXRvcihoZWFkKTsKK30KKworb3RFcnJvciBNZXNzYWdlOjpSZXNpemVNZXNzYWdlKHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBhZGQgYnVmZmVycworICAgIEJ1ZmZlciAqY3VyQnVmZmVyID0gdGhpczsKKyAgICBCdWZmZXIgKmxhc3RCdWZmZXI7CisgICAgdWludDE2X3QgY3VyTGVuZ3RoID0ga0hlYWRCdWZmZXJEYXRhU2l6ZTsKKworICAgIHdoaWxlIChjdXJMZW5ndGggPCBhTGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ckJ1ZmZlci0+U2V0TmV4dEJ1ZmZlcihHZXRNZXNzYWdlUG9vbCgpLT5OZXdCdWZmZXIoKSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoY3VyQnVmZmVyLT5HZXROZXh0QnVmZmVyKCkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBjdXJMZW5ndGggKz0ga0J1ZmZlckRhdGFTaXplOworICAgIH0KKworICAgIC8vIHJlbW92ZSBidWZmZXJzCisgICAgbGFzdEJ1ZmZlciA9IGN1ckJ1ZmZlcjsKKyAgICBjdXJCdWZmZXIgPSBjdXJCdWZmZXItPkdldE5leHRCdWZmZXIoKTsKKyAgICBsYXN0QnVmZmVyLT5TZXROZXh0QnVmZmVyKE5VTEwpOworCisgICAgR2V0TWVzc2FnZVBvb2woKS0+RnJlZUJ1ZmZlcnMoY3VyQnVmZmVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6RnJlZSh2b2lkKQoreworICAgIHJldHVybiBHZXRNZXNzYWdlUG9vbCgpLT5GcmVlKHRoaXMpOworfQorCitNZXNzYWdlICpNZXNzYWdlOjpHZXROZXh0KHZvaWQpIGNvbnN0Cit7CisgICAgTWVzc2FnZSAqbmV4dDsKKyAgICBNZXNzYWdlICp0YWlsOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRKQorICAgIHsKKyAgICAgICAgUHJpb3JpdHlRdWV1ZSAqcHJpb3JpdHlRdWV1ZSA9IEdldFByaW9yaXR5UXVldWUoKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHByaW9yaXR5UXVldWUgIT0gTlVMTCwgbmV4dCA9IE5VTEwpOworICAgICAgICB0YWlsID0gcHJpb3JpdHlRdWV1ZS0+R2V0VGFpbCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNZXNzYWdlUXVldWUgKm1lc3NhZ2VRdWV1ZSA9IEdldE1lc3NhZ2VRdWV1ZSgpOworICAgICAgICBWZXJpZnlPckV4aXQobWVzc2FnZVF1ZXVlICE9IE5VTEwsIG5leHQgPSBOVUxMKTsKKyAgICAgICAgdGFpbCA9IG1lc3NhZ2VRdWV1ZS0+R2V0VGFpbCgpOworICAgIH0KKworICAgIG5leHQgPSAodGhpcyA9PSB0YWlsKSA/IE5VTEwgOiBOZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIG5leHQ7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6U2V0TGVuZ3RoKHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgdG90YWxMZW5ndGhSZXF1ZXN0ID0gR2V0UmVzZXJ2ZWQoKSArIGFMZW5ndGg7CisgICAgdWludDE2X3QgdG90YWxMZW5ndGhDdXJyZW50ID0gR2V0UmVzZXJ2ZWQoKSArIEdldExlbmd0aCgpOworICAgIGludCBidWZzID0gMDsKKworICAgIGlmICh0b3RhbExlbmd0aFJlcXVlc3QgPiBrSGVhZEJ1ZmZlckRhdGFTaXplKQorICAgIHsKKyAgICAgICAgYnVmcyA9ICgoKHRvdGFsTGVuZ3RoUmVxdWVzdCAtIGtIZWFkQnVmZmVyRGF0YVNpemUpIC0gMSkgLyBrQnVmZmVyRGF0YVNpemUpICsgMTsKKyAgICB9CisKKyAgICBpZiAodG90YWxMZW5ndGhDdXJyZW50ID4ga0hlYWRCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGJ1ZnMgLT0gKCgodG90YWxMZW5ndGhDdXJyZW50IC0ga0hlYWRCdWZmZXJEYXRhU2l6ZSkgLSAxKSAvIGtCdWZmZXJEYXRhU2l6ZSkgKyAxOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRNZXNzYWdlUG9vbCgpLT5SZWNsYWltQnVmZmVycyhidWZzKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUmVzaXplTWVzc2FnZSh0b3RhbExlbmd0aFJlcXVlc3QpKTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1MZW5ndGggPSBhTGVuZ3RoOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBNZXNzYWdlOjpHZXRCdWZmZXJDb3VudCh2b2lkKSBjb25zdAoreworICAgIHVpbnQ4X3QgcnZhbCA9IDE7CisKKyAgICBmb3IgKGNvbnN0IEJ1ZmZlciAqY3VyQnVmZmVyID0gR2V0TmV4dEJ1ZmZlcigpOyBjdXJCdWZmZXI7IGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpKQorICAgIHsKKyAgICAgICAgcnZhbCsrOworICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIE1lc3NhZ2U6Ok1vdmVPZmZzZXQoaW50IGFEZWx0YSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGFzc2VydChHZXRPZmZzZXQoKSArIGFEZWx0YSA8PSBHZXRMZW5ndGgoKSk7CisgICAgVmVyaWZ5T3JFeGl0KEdldE9mZnNldCgpICsgYURlbHRhIDw9IEdldExlbmd0aCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1PZmZzZXQgKz0gc3RhdGljX2Nhc3Q8aW50MTZfdD4oYURlbHRhKTsKKyAgICBhc3NlcnQobUJ1ZmZlci5tSGVhZC5tSW5mby5tT2Zmc2V0IDw9IEdldExlbmd0aCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6U2V0T2Zmc2V0KHVpbnQxNl90IGFPZmZzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBhc3NlcnQoYU9mZnNldCA8PSBHZXRMZW5ndGgoKSk7CisgICAgVmVyaWZ5T3JFeGl0KGFPZmZzZXQgPD0gR2V0TGVuZ3RoKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubU9mZnNldCA9IGFPZmZzZXQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE1lc3NhZ2U6OklzU3ViVHlwZU1sZSh2b2lkKSBjb25zdAoreworICAgIGJvb2wgcnZhbCA9IGZhbHNlOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGUgPT0ga1N1YlR5cGVNbGVBbm5vdW5jZSB8fAorICAgICAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1TdWJUeXBlID09IGtTdWJUeXBlTWxlRGlzY292ZXJSZXF1ZXN0IHx8CisgICAgICAgIG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGUgPT0ga1N1YlR5cGVNbGVEaXNjb3ZlclJlc3BvbnNlIHx8CisgICAgICAgIG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGUgPT0ga1N1YlR5cGVNbGVDaGlsZFVwZGF0ZVJlcXVlc3QgfHwKKyAgICAgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tU3ViVHlwZSA9PSBrU3ViVHlwZU1sZUdlbmVyYWwpCisgICAgeworICAgICAgICBydmFsID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBNZXNzYWdlOjpTZXRQcmlvcml0eSh1aW50OF90IGFQcmlvcml0eSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBQcmlvcml0eVF1ZXVlICpwcmlvcml0eVF1ZXVlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhUHJpb3JpdHkgPCBrTnVtUHJpb3JpdGllcywgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgVmVyaWZ5T3JFeGl0KElzSW5BUXVldWUoKSwgbUJ1ZmZlci5tSGVhZC5tSW5mby5tUHJpb3JpdHkgPSBhUHJpb3JpdHkpOworICAgIFZlcmlmeU9yRXhpdChtQnVmZmVyLm1IZWFkLm1JbmZvLm1Qcmlvcml0eSAhPSBhUHJpb3JpdHkpOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRKQorICAgIHsKKyAgICAgICAgcHJpb3JpdHlRdWV1ZSA9IG1CdWZmZXIubUhlYWQubUluZm8ubVF1ZXVlLm1Qcmlvcml0eTsKKyAgICAgICAgcHJpb3JpdHlRdWV1ZS0+RGVxdWV1ZSgqdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdldE1lc3NhZ2VQb29sKCktPkdldEFsbE1lc3NhZ2VzUXVldWUoKS0+UmVtb3ZlRnJvbUxpc3QoTWVzc2FnZUluZm86OmtMaXN0QWxsLCAqdGhpcyk7CisgICAgfQorCisgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tUHJpb3JpdHkgPSBhUHJpb3JpdHk7CisKKyAgICBpZiAocHJpb3JpdHlRdWV1ZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpb3JpdHlRdWV1ZS0+RW5xdWV1ZSgqdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdldE1lc3NhZ2VQb29sKCktPkdldEFsbE1lc3NhZ2VzUXVldWUoKS0+QWRkVG9MaXN0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCwgKnRoaXMpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6QXBwZW5kKGNvbnN0IHZvaWQgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3Qgb2xkTGVuZ3RoID0gR2V0TGVuZ3RoKCk7CisgICAgaW50IGJ5dGVzV3JpdHRlbjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZXRMZW5ndGgoR2V0TGVuZ3RoKCkgKyBhTGVuZ3RoKSk7CisgICAgYnl0ZXNXcml0dGVuID0gV3JpdGUob2xkTGVuZ3RoLCBhTGVuZ3RoLCBhQnVmKTsKKworICAgIGFzc2VydChieXRlc1dyaXR0ZW4gPT0gKGludClhTGVuZ3RoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYnl0ZXNXcml0dGVuKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzc2FnZTo6UHJlcGVuZChjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEJ1ZmZlciAqbmV3QnVmZmVyID0gTlVMTDsKKworICAgIHdoaWxlIChhTGVuZ3RoID4gR2V0UmVzZXJ2ZWQoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdCgobmV3QnVmZmVyID0gR2V0TWVzc2FnZVBvb2woKS0+TmV3QnVmZmVyKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAgICAgbmV3QnVmZmVyLT5TZXROZXh0QnVmZmVyKEdldE5leHRCdWZmZXIoKSk7CisgICAgICAgIFNldE5leHRCdWZmZXIobmV3QnVmZmVyKTsKKworICAgICAgICBpZiAoR2V0UmVzZXJ2ZWQoKSA8IHNpemVvZihtQnVmZmVyLm1IZWFkLm1EYXRhKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29weSBwYXlsb2FkIGZyb20gdGhlIGZpcnN0IGJ1ZmZlci4KKyAgICAgICAgICAgIG1lbWNweShuZXdCdWZmZXItPm1CdWZmZXIubUhlYWQubURhdGEgKyBHZXRSZXNlcnZlZCgpLCBtQnVmZmVyLm1IZWFkLm1EYXRhICsgR2V0UmVzZXJ2ZWQoKSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YobUJ1ZmZlci5tSGVhZC5tRGF0YSkgLSBHZXRSZXNlcnZlZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFNldFJlc2VydmVkKEdldFJlc2VydmVkKCkgKyBrQnVmZmVyRGF0YVNpemUpOworICAgIH0KKworICAgIFNldFJlc2VydmVkKEdldFJlc2VydmVkKCkgLSBhTGVuZ3RoKTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1MZW5ndGggKz0gYUxlbmd0aDsKKyAgICBTZXRPZmZzZXQoR2V0T2Zmc2V0KCkgKyBhTGVuZ3RoKTsKKworICAgIGlmIChhQnVmICE9IE5VTEwpCisgICAgeworICAgICAgICBXcml0ZSgwLCBhTGVuZ3RoLCBhQnVmKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1lc3NhZ2U6OlJlbW92ZUhlYWRlcih1aW50MTZfdCBhTGVuZ3RoKQoreworICAgIGFzc2VydChhTGVuZ3RoIDw9IG1CdWZmZXIubUhlYWQubUluZm8ubUxlbmd0aCk7CisKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1SZXNlcnZlZCArPSBhTGVuZ3RoOworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubUxlbmd0aCAtPSBhTGVuZ3RoOworCisgICAgaWYgKG1CdWZmZXIubUhlYWQubUluZm8ubU9mZnNldCA+IGFMZW5ndGgpCisgICAgeworICAgICAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1PZmZzZXQgLT0gYUxlbmd0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDE2X3QgTWVzc2FnZTo6UmVhZCh1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCB2b2lkICphQnVmKSBjb25zdAoreworICAgIEJ1ZmZlciAqY3VyQnVmZmVyOworICAgIHVpbnQxNl90IGJ5dGVzQ29waWVkID0gMDsKKyAgICB1aW50MTZfdCBieXRlc1RvQ29weTsKKworICAgIGlmIChhT2Zmc2V0ID49IEdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGlmIChhT2Zmc2V0ICsgYUxlbmd0aCA+PSBHZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIGFMZW5ndGggPSBHZXRMZW5ndGgoKSAtIGFPZmZzZXQ7CisgICAgfQorCisgICAgYU9mZnNldCArPSBHZXRSZXNlcnZlZCgpOworCisgICAgLy8gc3BlY2lhbCBjYXNlIGZpcnN0IGJ1ZmZlcgorICAgIGlmIChhT2Zmc2V0IDwga0hlYWRCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGJ5dGVzVG9Db3B5ID0ga0hlYWRCdWZmZXJEYXRhU2l6ZSAtIGFPZmZzZXQ7CisKKyAgICAgICAgaWYgKGJ5dGVzVG9Db3B5ID4gYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZXNUb0NvcHkgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KGFCdWYsIEdldEZpcnN0RGF0YSgpICsgYU9mZnNldCwgYnl0ZXNUb0NvcHkpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGJ5dGVzQ29waWVkICs9IGJ5dGVzVG9Db3B5OworICAgICAgICBhQnVmID0gc3RhdGljX2Nhc3Q8dWludDhfdCAqPihhQnVmKSArIGJ5dGVzVG9Db3B5OworCisgICAgICAgIGFPZmZzZXQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT2Zmc2V0IC09IGtIZWFkQnVmZmVyRGF0YVNpemU7CisgICAgfQorCisgICAgLy8gYWR2YW5jZSB0byBvZmZzZXQKKyAgICBjdXJCdWZmZXIgPSBHZXROZXh0QnVmZmVyKCk7CisKKyAgICB3aGlsZSAoYU9mZnNldCA+PSBrQnVmZmVyRGF0YVNpemUpCisgICAgeworICAgICAgICBhc3NlcnQoY3VyQnVmZmVyICE9IE5VTEwpOworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0IC09IGtCdWZmZXJEYXRhU2l6ZTsKKyAgICB9CisKKyAgICAvLyBiZWdpbiBjb3B5CisgICAgd2hpbGUgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGN1ckJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICBieXRlc1RvQ29weSA9IGtCdWZmZXJEYXRhU2l6ZSAtIGFPZmZzZXQ7CisKKyAgICAgICAgaWYgKGJ5dGVzVG9Db3B5ID4gYUxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZXNUb0NvcHkgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KGFCdWYsIGN1ckJ1ZmZlci0+R2V0RGF0YSgpICsgYU9mZnNldCwgYnl0ZXNUb0NvcHkpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGJ5dGVzQ29waWVkICs9IGJ5dGVzVG9Db3B5OworICAgICAgICBhQnVmID0gc3RhdGljX2Nhc3Q8dWludDhfdCAqPihhQnVmKSArIGJ5dGVzVG9Db3B5OworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0ID0gMDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGJ5dGVzQ29waWVkOworfQorCitpbnQgTWVzc2FnZTo6V3JpdGUodWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCwgY29uc3Qgdm9pZCAqYUJ1ZikKK3sKKyAgICBCdWZmZXIgKmN1ckJ1ZmZlcjsKKyAgICB1aW50MTZfdCBieXRlc0NvcGllZCA9IDA7CisgICAgdWludDE2X3QgYnl0ZXNUb0NvcHk7CisKKyAgICBhc3NlcnQoYU9mZnNldCArIGFMZW5ndGggPD0gR2V0TGVuZ3RoKCkpOworCisgICAgaWYgKGFPZmZzZXQgKyBhTGVuZ3RoID49IEdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgYUxlbmd0aCA9IEdldExlbmd0aCgpIC0gYU9mZnNldDsKKyAgICB9CisKKyAgICBhT2Zmc2V0ICs9IEdldFJlc2VydmVkKCk7CisKKyAgICAvLyBzcGVjaWFsIGNhc2UgZmlyc3QgYnVmZmVyCisgICAgaWYgKGFPZmZzZXQgPCBrSGVhZEJ1ZmZlckRhdGFTaXplKQorICAgIHsKKyAgICAgICAgYnl0ZXNUb0NvcHkgPSBrSGVhZEJ1ZmZlckRhdGFTaXplIC0gYU9mZnNldDsKKworICAgICAgICBpZiAoYnl0ZXNUb0NvcHkgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ29weSA9IGFMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoR2V0Rmlyc3REYXRhKCkgKyBhT2Zmc2V0LCBhQnVmLCBieXRlc1RvQ29weSk7CisKKyAgICAgICAgYUxlbmd0aCAtPSBieXRlc1RvQ29weTsKKyAgICAgICAgYnl0ZXNDb3BpZWQgKz0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGFCdWYgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KGFCdWYpICsgYnl0ZXNUb0NvcHk7CisKKyAgICAgICAgYU9mZnNldCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFPZmZzZXQgLT0ga0hlYWRCdWZmZXJEYXRhU2l6ZTsKKyAgICB9CisKKyAgICAvLyBhZHZhbmNlIHRvIG9mZnNldAorICAgIGN1ckJ1ZmZlciA9IEdldE5leHRCdWZmZXIoKTsKKworICAgIHdoaWxlIChhT2Zmc2V0ID49IGtCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGFzc2VydChjdXJCdWZmZXIgIT0gTlVMTCk7CisKKyAgICAgICAgY3VyQnVmZmVyID0gY3VyQnVmZmVyLT5HZXROZXh0QnVmZmVyKCk7CisgICAgICAgIGFPZmZzZXQgLT0ga0J1ZmZlckRhdGFTaXplOworICAgIH0KKworICAgIC8vIGJlZ2luIGNvcHkKKyAgICB3aGlsZSAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBhc3NlcnQoY3VyQnVmZmVyICE9IE5VTEwpOworCisgICAgICAgIGJ5dGVzVG9Db3B5ID0ga0J1ZmZlckRhdGFTaXplIC0gYU9mZnNldDsKKworICAgICAgICBpZiAoYnl0ZXNUb0NvcHkgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ29weSA9IGFMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoY3VyQnVmZmVyLT5HZXREYXRhKCkgKyBhT2Zmc2V0LCBhQnVmLCBieXRlc1RvQ29weSk7CisKKyAgICAgICAgYUxlbmd0aCAtPSBieXRlc1RvQ29weTsKKyAgICAgICAgYnl0ZXNDb3BpZWQgKz0gYnl0ZXNUb0NvcHk7CisgICAgICAgIGFCdWYgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KGFCdWYpICsgYnl0ZXNUb0NvcHk7CisKKyAgICAgICAgY3VyQnVmZmVyID0gY3VyQnVmZmVyLT5HZXROZXh0QnVmZmVyKCk7CisgICAgICAgIGFPZmZzZXQgPSAwOworICAgIH0KKworICAgIHJldHVybiBieXRlc0NvcGllZDsKK30KKworaW50IE1lc3NhZ2U6OkNvcHlUbyh1aW50MTZfdCBhU291cmNlT2Zmc2V0LCB1aW50MTZfdCBhRGVzdGluYXRpb25PZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIHVpbnQxNl90IGJ5dGVzQ29waWVkID0gMDsKKyAgICB1aW50MTZfdCBieXRlc1RvQ29weTsKKyAgICB1aW50OF90IGJ1ZlsxNl07CisKKyAgICB3aGlsZSAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBieXRlc1RvQ29weSA9IChhTGVuZ3RoIDwgc2l6ZW9mKGJ1ZikpID8gYUxlbmd0aCA6IHNpemVvZihidWYpOworCisgICAgICAgIFJlYWQoYVNvdXJjZU9mZnNldCwgYnl0ZXNUb0NvcHksIGJ1Zik7CisgICAgICAgIGFNZXNzYWdlLldyaXRlKGFEZXN0aW5hdGlvbk9mZnNldCwgYnl0ZXNUb0NvcHksIGJ1Zik7CisKKyAgICAgICAgYVNvdXJjZU9mZnNldCArPSBieXRlc1RvQ29weTsKKyAgICAgICAgYURlc3RpbmF0aW9uT2Zmc2V0ICs9IGJ5dGVzVG9Db3B5OworICAgICAgICBhTGVuZ3RoIC09IGJ5dGVzVG9Db3B5OworICAgICAgICBieXRlc0NvcGllZCArPSBieXRlc1RvQ29weTsKKyAgICB9CisKKyAgICByZXR1cm4gYnl0ZXNDb3BpZWQ7Cit9CisKK01lc3NhZ2UgKk1lc3NhZ2U6OkNsb25lKHVpbnQxNl90IGFMZW5ndGgpIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2VDb3B5ID0gR2V0TWVzc2FnZVBvb2woKS0+TmV3KEdldFR5cGUoKSwgR2V0UmVzZXJ2ZWQoKSkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2VDb3B5LT5TZXRMZW5ndGgoYUxlbmd0aCkpOworICAgIENvcHlUbygwLCAwLCBhTGVuZ3RoLCAqbWVzc2FnZUNvcHkpOworCisgICAgLy8gQ29weSBzZWxlY3RlZCBtZXNzYWdlIGluZm9ybWF0aW9uLgorICAgIG1lc3NhZ2VDb3B5LT5TZXRPZmZzZXQoR2V0T2Zmc2V0KCkpOworICAgIG1lc3NhZ2VDb3B5LT5TZXRJbnRlcmZhY2VJZChHZXRJbnRlcmZhY2VJZCgpKTsKKyAgICBtZXNzYWdlQ29weS0+U2V0U3ViVHlwZShHZXRTdWJUeXBlKCkpOworICAgIG1lc3NhZ2VDb3B5LT5TZXRQcmlvcml0eShHZXRQcmlvcml0eSgpKTsKKyAgICBtZXNzYWdlQ29weS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChJc0xpbmtTZWN1cml0eUVuYWJsZWQoKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlQ29weSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZUNvcHktPkZyZWUoKTsKKyAgICAgICAgbWVzc2FnZUNvcHkgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlQ29weTsKK30KKworYm9vbCBNZXNzYWdlOjpHZXRDaGlsZE1hc2sodWludDhfdCBhQ2hpbGRJbmRleCkgY29uc3QKK3sKKyAgICBhc3NlcnQoYUNoaWxkSW5kZXggPCBzaXplb2YobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrKSAqIDgpOworICAgIHJldHVybiAobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrW2FDaGlsZEluZGV4IC8gOF0gJiAoMHg4MCA+PiAoYUNoaWxkSW5kZXggJSA4KSkpICE9IDA7Cit9CisKK3ZvaWQgTWVzc2FnZTo6Q2xlYXJDaGlsZE1hc2sodWludDhfdCBhQ2hpbGRJbmRleCkKK3sKKyAgICBhc3NlcnQoYUNoaWxkSW5kZXggPCBzaXplb2YobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrKSAqIDgpOworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubUNoaWxkTWFza1thQ2hpbGRJbmRleCAvIDhdICY9IH4oMHg4MCA+PiAoYUNoaWxkSW5kZXggJSA4KSk7Cit9CisKK3ZvaWQgTWVzc2FnZTo6U2V0Q2hpbGRNYXNrKHVpbnQ4X3QgYUNoaWxkSW5kZXgpCit7CisgICAgYXNzZXJ0KGFDaGlsZEluZGV4IDwgc2l6ZW9mKG1CdWZmZXIubUhlYWQubUluZm8ubUNoaWxkTWFzaykgKiA4KTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1DaGlsZE1hc2tbYUNoaWxkSW5kZXggLyA4XSB8PSAweDgwID4+IChhQ2hpbGRJbmRleCAlIDgpOworfQorCitib29sIE1lc3NhZ2U6OklzQ2hpbGRQZW5kaW5nKHZvaWQpIGNvbnN0Cit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtQnVmZmVyLm1IZWFkLm1JbmZvLm1DaGlsZE1hc2spOyBpKyspCisgICAgeworICAgICAgICBpZiAobUJ1ZmZlci5tSGVhZC5tSW5mby5tQ2hpbGRNYXNrW2ldICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50MTZfdCBNZXNzYWdlOjpVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgpIGNvbnN0Cit7CisgICAgQnVmZmVyICpjdXJCdWZmZXI7CisgICAgdWludDE2X3QgYnl0ZXNDb3ZlcmVkID0gMDsKKyAgICB1aW50MTZfdCBieXRlc1RvQ292ZXI7CisKKyAgICBhc3NlcnQoYU9mZnNldCArIGFMZW5ndGggPD0gR2V0TGVuZ3RoKCkpOworCisgICAgYU9mZnNldCArPSBHZXRSZXNlcnZlZCgpOworCisgICAgLy8gc3BlY2lhbCBjYXNlIGZpcnN0IGJ1ZmZlcgorICAgIGlmIChhT2Zmc2V0IDwga0hlYWRCdWZmZXJEYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGJ5dGVzVG9Db3ZlciA9IGtIZWFkQnVmZmVyRGF0YVNpemUgLSBhT2Zmc2V0OworCisgICAgICAgIGlmIChieXRlc1RvQ292ZXIgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ292ZXIgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgYUNoZWNrc3VtID0gSXA2OjpJcDY6OlVwZGF0ZUNoZWNrc3VtKGFDaGVja3N1bSwgR2V0Rmlyc3REYXRhKCkgKyBhT2Zmc2V0LCBieXRlc1RvQ292ZXIpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvdmVyOworICAgICAgICBieXRlc0NvdmVyZWQgKz0gYnl0ZXNUb0NvdmVyOworCisgICAgICAgIGFPZmZzZXQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT2Zmc2V0IC09IGtIZWFkQnVmZmVyRGF0YVNpemU7CisgICAgfQorCisgICAgLy8gYWR2YW5jZSB0byBvZmZzZXQKKyAgICBjdXJCdWZmZXIgPSBHZXROZXh0QnVmZmVyKCk7CisKKyAgICB3aGlsZSAoYU9mZnNldCA+PSBrQnVmZmVyRGF0YVNpemUpCisgICAgeworICAgICAgICBhc3NlcnQoY3VyQnVmZmVyICE9IE5VTEwpOworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0IC09IGtCdWZmZXJEYXRhU2l6ZTsKKyAgICB9CisKKyAgICAvLyBiZWdpbiBjb3B5CisgICAgd2hpbGUgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGN1ckJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICBieXRlc1RvQ292ZXIgPSBrQnVmZmVyRGF0YVNpemUgLSBhT2Zmc2V0OworCisgICAgICAgIGlmIChieXRlc1RvQ292ZXIgPiBhTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBieXRlc1RvQ292ZXIgPSBhTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgYUNoZWNrc3VtID0gSXA2OjpJcDY6OlVwZGF0ZUNoZWNrc3VtKGFDaGVja3N1bSwgY3VyQnVmZmVyLT5HZXREYXRhKCkgKyBhT2Zmc2V0LCBieXRlc1RvQ292ZXIpOworCisgICAgICAgIGFMZW5ndGggLT0gYnl0ZXNUb0NvdmVyOworICAgICAgICBieXRlc0NvdmVyZWQgKz0gYnl0ZXNUb0NvdmVyOworCisgICAgICAgIGN1ckJ1ZmZlciA9IGN1ckJ1ZmZlci0+R2V0TmV4dEJ1ZmZlcigpOworICAgICAgICBhT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYUNoZWNrc3VtOworfQorCit2b2lkIE1lc3NhZ2U6OlNldE1lc3NhZ2VRdWV1ZShNZXNzYWdlUXVldWUgKmFNZXNzYWdlUXVldWUpCit7CisgICAgbUJ1ZmZlci5tSGVhZC5tSW5mby5tUXVldWUubU1lc3NhZ2UgPSBhTWVzc2FnZVF1ZXVlOworICAgIG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRID0gZmFsc2U7Cit9CisKK3ZvaWQgTWVzc2FnZTo6U2V0UHJpb3JpdHlRdWV1ZShQcmlvcml0eVF1ZXVlICphUHJpb3JpdHlRdWV1ZSkKK3sKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1RdWV1ZS5tUHJpb3JpdHkgPSBhUHJpb3JpdHlRdWV1ZTsKKyAgICBtQnVmZmVyLm1IZWFkLm1JbmZvLm1JblByaW9yaXR5USA9IHRydWU7Cit9CisKK01lc3NhZ2VRdWV1ZTo6TWVzc2FnZVF1ZXVlKHZvaWQpCit7CisgICAgU2V0VGFpbChOVUxMKTsKK30KKwordm9pZCBNZXNzYWdlUXVldWU6OkFkZFRvTGlzdCh1aW50OF90IGFMaXN0LCBNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBNZXNzYWdlICpoZWFkOworCisgICAgYXNzZXJ0KChhTWVzc2FnZS5OZXh0KGFMaXN0KSA9PSBOVUxMKSAmJiAoYU1lc3NhZ2UuUHJldihhTGlzdCkgPT0gTlVMTCkpOworCisgICAgaWYgKEdldFRhaWwoKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuTmV4dChhTGlzdCkgPSAmYU1lc3NhZ2U7CisgICAgICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkID0gR2V0VGFpbCgpLT5OZXh0KGFMaXN0KTsKKworICAgICAgICBhTWVzc2FnZS5OZXh0KGFMaXN0KSA9IGhlYWQ7CisgICAgICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpID0gR2V0VGFpbCgpOworCisgICAgICAgIGhlYWQtPlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgICAgICBHZXRUYWlsKCktPk5leHQoYUxpc3QpID0gJmFNZXNzYWdlOworICAgIH0KKworICAgIFNldFRhaWwoJmFNZXNzYWdlKTsKK30KKwordm9pZCBNZXNzYWdlUXVldWU6OlJlbW92ZUZyb21MaXN0KHVpbnQ4X3QgYUxpc3QsIE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIGFzc2VydCgoYU1lc3NhZ2UuTmV4dChhTGlzdCkgIT0gTlVMTCkgJiYgKGFNZXNzYWdlLlByZXYoYUxpc3QpICE9IE5VTEwpKTsKKworICAgIGlmICgmYU1lc3NhZ2UgPT0gR2V0VGFpbCgpKQorICAgIHsKKyAgICAgICAgU2V0VGFpbChHZXRUYWlsKCktPlByZXYoYUxpc3QpKTsKKworICAgICAgICBpZiAoJmFNZXNzYWdlID09IEdldFRhaWwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgU2V0VGFpbChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpLT5OZXh0KGFMaXN0KSA9IGFNZXNzYWdlLk5leHQoYUxpc3QpOworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpLT5QcmV2KGFMaXN0KSA9IGFNZXNzYWdlLlByZXYoYUxpc3QpOworCisgICAgYU1lc3NhZ2UuUHJldihhTGlzdCkgPSBOVUxMOworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpID0gTlVMTDsKK30KKworTWVzc2FnZSAqTWVzc2FnZVF1ZXVlOjpHZXRIZWFkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChHZXRUYWlsKCkgPT0gTlVMTCkgPyBOVUxMIDogR2V0VGFpbCgpLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSk7Cit9CisKK290RXJyb3IgTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KCFhTWVzc2FnZS5Jc0luQVF1ZXVlKCksIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBhTWVzc2FnZS5TZXRNZXNzYWdlUXVldWUodGhpcyk7CisKKyAgICBBZGRUb0xpc3QoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlLCBhTWVzc2FnZSk7CisgICAgYU1lc3NhZ2UuR2V0TWVzc2FnZVBvb2woKS0+R2V0QWxsTWVzc2FnZXNRdWV1ZSgpLT5BZGRUb0xpc3QoTWVzc2FnZUluZm86OmtMaXN0QWxsLCBhTWVzc2FnZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRNZXNzYWdlUXVldWUoKSA9PSB0aGlzLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBSZW1vdmVGcm9tTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RJbnRlcmZhY2UsIGFNZXNzYWdlKTsKKyAgICBhTWVzc2FnZS5HZXRNZXNzYWdlUG9vbCgpLT5HZXRBbGxNZXNzYWdlc1F1ZXVlKCktPlJlbW92ZUZyb21MaXN0KE1lc3NhZ2VJbmZvOjprTGlzdEFsbCwgYU1lc3NhZ2UpOworCisgICAgYU1lc3NhZ2UuU2V0TWVzc2FnZVF1ZXVlKE5VTEwpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNZXNzYWdlUXVldWU6OkdldEluZm8odWludDE2X3QgJmFNZXNzYWdlQ291bnQsIHVpbnQxNl90ICZhQnVmZmVyQ291bnQpIGNvbnN0Cit7CisgICAgYU1lc3NhZ2VDb3VudCA9IDA7CisgICAgYUJ1ZmZlckNvdW50ID0gMDsKKworICAgIGZvciAoY29uc3QgTWVzc2FnZSAqbWVzc2FnZSA9IEdldEhlYWQoKTsgbWVzc2FnZSAhPSBOVUxMOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2VDb3VudCsrOworICAgICAgICBhQnVmZmVyQ291bnQgKz0gbWVzc2FnZS0+R2V0QnVmZmVyQ291bnQoKTsKKyAgICB9Cit9CisKK1ByaW9yaXR5UXVldWU6OlByaW9yaXR5UXVldWUodm9pZCkKK3sKKyAgICBmb3IgKGludCBwcmlvcml0eSA9IDA7IHByaW9yaXR5IDwgTWVzc2FnZTo6a051bVByaW9yaXRpZXM7IHByaW9yaXR5KyspCisgICAgeworICAgICAgICBtVGFpbHNbcHJpb3JpdHldID0gTlVMTDsKKyAgICB9Cit9CisKK01lc3NhZ2UgKlByaW9yaXR5UXVldWU6OkZpbmRGaXJzdE5vbk51bGxUYWlsKHVpbnQ4X3QgYVN0YXJ0UHJpb3JpdHlMZXZlbCkgY29uc3QKK3sKKyAgICBNZXNzYWdlICp0YWlsID0gTlVMTDsKKyAgICB1aW50OF90IHByaW9yaXR5OworCisgICAgcHJpb3JpdHkgPSBhU3RhcnRQcmlvcml0eUxldmVsOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChtVGFpbHNbcHJpb3JpdHldICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhaWwgPSBtVGFpbHNbcHJpb3JpdHldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmlvcml0eSA9IFByZXZQcmlvcml0eShwcmlvcml0eSk7CisgICAgfQorICAgIHdoaWxlIChwcmlvcml0eSAhPSBhU3RhcnRQcmlvcml0eUxldmVsKTsKKworICAgIHJldHVybiB0YWlsOworfQorCitNZXNzYWdlICpQcmlvcml0eVF1ZXVlOjpHZXRIZWFkKHZvaWQpIGNvbnN0Cit7CisgICAgTWVzc2FnZSAqdGFpbDsKKworICAgIHRhaWwgPSBGaW5kRmlyc3ROb25OdWxsVGFpbChNZXNzYWdlOjprTnVtUHJpb3JpdGllcyAtIDEpOworCisgICAgcmV0dXJuICh0YWlsID09IE5VTEwpID8gTlVMTCA6IHRhaWwtPk5leHQoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlKTsKK30KKworTWVzc2FnZSAqUHJpb3JpdHlRdWV1ZTo6R2V0SGVhZEZvclByaW9yaXR5KHVpbnQ4X3QgYVByaW9yaXR5KSBjb25zdAoreworICAgIE1lc3NhZ2UgKmhlYWQ7CisgICAgTWVzc2FnZSAqcHJldmlvdXNUYWlsOworCisgICAgaWYgKG1UYWlsc1thUHJpb3JpdHldICE9IE5VTEwpCisgICAgeworICAgICAgICBwcmV2aW91c1RhaWwgPSBGaW5kRmlyc3ROb25OdWxsVGFpbChQcmV2UHJpb3JpdHkoYVByaW9yaXR5KSk7CisKKyAgICAgICAgYXNzZXJ0KHByZXZpb3VzVGFpbCAhPSBOVUxMKTsKKworICAgICAgICBoZWFkID0gcHJldmlvdXNUYWlsLT5OZXh0KE1lc3NhZ2VJbmZvOjprTGlzdEludGVyZmFjZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhlYWQgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBoZWFkOworfQorCitNZXNzYWdlICpQcmlvcml0eVF1ZXVlOjpHZXRUYWlsKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbmRGaXJzdE5vbk51bGxUYWlsKE1lc3NhZ2U6OmtOdW1Qcmlvcml0aWVzIC0gMSk7Cit9CisKK3ZvaWQgUHJpb3JpdHlRdWV1ZTo6QWRkVG9MaXN0KHVpbnQ4X3QgYUxpc3QsIE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIHVpbnQ4X3QgcHJpb3JpdHk7CisgICAgTWVzc2FnZSAqdGFpbDsKKyAgICBNZXNzYWdlICpuZXh0OworCisgICAgcHJpb3JpdHkgPSBhTWVzc2FnZS5HZXRQcmlvcml0eSgpOworCisgICAgdGFpbCA9IEZpbmRGaXJzdE5vbk51bGxUYWlsKHByaW9yaXR5KTsKKworICAgIGlmICh0YWlsICE9IE5VTEwpCisgICAgeworICAgICAgICBuZXh0ID0gdGFpbC0+TmV4dChhTGlzdCk7CisKKyAgICAgICAgYU1lc3NhZ2UuTmV4dChhTGlzdCkgPSBuZXh0OworICAgICAgICBhTWVzc2FnZS5QcmV2KGFMaXN0KSA9IHRhaWw7CisgICAgICAgIG5leHQtPlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgICAgICB0YWlsLT5OZXh0KGFMaXN0KSA9ICZhTWVzc2FnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuTmV4dChhTGlzdCkgPSAmYU1lc3NhZ2U7CisgICAgICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpID0gJmFNZXNzYWdlOworICAgIH0KKworICAgIG1UYWlsc1twcmlvcml0eV0gPSAmYU1lc3NhZ2U7Cit9CisKK3ZvaWQgUHJpb3JpdHlRdWV1ZTo6UmVtb3ZlRnJvbUxpc3QodWludDhfdCBhTGlzdCwgTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgdWludDhfdCBwcmlvcml0eTsKKyAgICBNZXNzYWdlICp0YWlsOworCisgICAgcHJpb3JpdHkgPSBhTWVzc2FnZS5HZXRQcmlvcml0eSgpOworCisgICAgdGFpbCA9IG1UYWlsc1twcmlvcml0eV07CisKKyAgICBpZiAoJmFNZXNzYWdlID09IHRhaWwpCisgICAgeworICAgICAgICB0YWlsID0gdGFpbC0+UHJldihhTGlzdCk7CisKKyAgICAgICAgaWYgKCgmYU1lc3NhZ2UgPT0gdGFpbCkgfHwgKHRhaWwtPkdldFByaW9yaXR5KCkgIT0gcHJpb3JpdHkpKQorICAgICAgICB7CisgICAgICAgICAgICB0YWlsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1UYWlsc1twcmlvcml0eV0gPSB0YWlsOworICAgIH0KKworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpLT5QcmV2KGFMaXN0KSA9IGFNZXNzYWdlLlByZXYoYUxpc3QpOworICAgIGFNZXNzYWdlLlByZXYoYUxpc3QpLT5OZXh0KGFMaXN0KSA9IGFNZXNzYWdlLk5leHQoYUxpc3QpOworICAgIGFNZXNzYWdlLk5leHQoYUxpc3QpID0gTlVMTDsKKyAgICBhTWVzc2FnZS5QcmV2KGFMaXN0KSA9IE5VTEw7Cit9CisKK290RXJyb3IgUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCghYU1lc3NhZ2UuSXNJbkFRdWV1ZSgpLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworCisgICAgYU1lc3NhZ2UuU2V0UHJpb3JpdHlRdWV1ZSh0aGlzKTsKKworICAgIEFkZFRvTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RJbnRlcmZhY2UsIGFNZXNzYWdlKTsKKyAgICBhTWVzc2FnZS5HZXRNZXNzYWdlUG9vbCgpLT5HZXRBbGxNZXNzYWdlc1F1ZXVlKCktPkFkZFRvTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RBbGwsIGFNZXNzYWdlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRQcmlvcml0eVF1ZXVlKCkgPT0gdGhpcywgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgUmVtb3ZlRnJvbUxpc3QoTWVzc2FnZUluZm86OmtMaXN0SW50ZXJmYWNlLCBhTWVzc2FnZSk7CisgICAgYU1lc3NhZ2UuR2V0TWVzc2FnZVBvb2woKS0+R2V0QWxsTWVzc2FnZXNRdWV1ZSgpLT5SZW1vdmVGcm9tTGlzdChNZXNzYWdlSW5mbzo6a0xpc3RBbGwsIGFNZXNzYWdlKTsKKworICAgIGFNZXNzYWdlLlNldE1lc3NhZ2VRdWV1ZShOVUxMKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUHJpb3JpdHlRdWV1ZTo6R2V0SW5mbyh1aW50MTZfdCAmYU1lc3NhZ2VDb3VudCwgdWludDE2X3QgJmFCdWZmZXJDb3VudCkgY29uc3QKK3sKKyAgICBhTWVzc2FnZUNvdW50ID0gMDsKKyAgICBhQnVmZmVyQ291bnQgPSAwOworCisgICAgZm9yIChjb25zdCBNZXNzYWdlICptZXNzYWdlID0gR2V0SGVhZCgpOyBtZXNzYWdlICE9IE5VTEw7IG1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBhTWVzc2FnZUNvdW50Kys7CisgICAgICAgIGFCdWZmZXJDb3VudCArPSBtZXNzYWdlLT5HZXRCdWZmZXJDb3VudCgpOworICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vbWVzc2FnZS5ocHAgYi9zcmMvY29yZS9jb21tb24vbWVzc2FnZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2ZTNlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9tZXNzYWdlLmhwcApAQCAtMCwwICsxLDExNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgbWVzc2FnZSBidWZmZXIgcG9vbCBhbmQgbWVzc2FnZSBidWZmZXJzLgorICovCisKKyNpZm5kZWYgTUVTU0FHRV9IUFBfCisjZGVmaW5lIE1FU1NBR0VfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWVzc2FnZXBvb2wuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbWVzc2FnZQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIG1lc3NhZ2UgYnVmZmVyIHBvb2wgYW5kIG1lc3NhZ2UgYnVmZmVycy4KKyAqCisgKiBAeworICoKKyAqLworCitlbnVtCit7CisgICAga051bUJ1ZmZlcnMgPSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTLAorICAgIGtCdWZmZXJTaXplID0gT1BFTlRIUkVBRF9DT05GSUdfTUVTU0FHRV9CVUZGRVJfU0laRSwKK307CisKK2NsYXNzIE1lc3NhZ2U7CitjbGFzcyBNZXNzYWdlUG9vbDsKK2NsYXNzIE1lc3NhZ2VRdWV1ZTsKK2NsYXNzIFByaW9yaXR5UXVldWU7CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgbWV0ZGF0YSBhYm91dCBhIE1lc3NhZ2UuCisgKgorICovCitzdHJ1Y3QgTWVzc2FnZUluZm8KK3sKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTGlzdEFsbCAgICAgICAgPSAwLCAgICAgICAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIGFsbCBtZXNzYWdlcyBsaXN0IChtYWludGFpbmVkIGJ5IHRoZSBNZXNzYWdlUG9vbCkuCisgICAgICAgIGtMaXN0SW50ZXJmYWNlICA9IDEsICAgICAgICAgICAgIC8vLzwgSWRlbnRpZmllcyB0aGUgbGlzdCBmb3IgcGVyLWludGVyZmFjZSBtZXNzYWdlIHF1ZXVlLgorICAgICAgICBrTnVtTGlzdHMgICAgICAgPSAyLCAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBsaXN0cy4KKyAgICB9OworCisgICAgTWVzc2FnZSAgICAgICAgICptTmV4dFtrTnVtTGlzdHNdOyAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBuZXh0IE1lc3NhZ2UgaW4gYSBkb3VibHkgbGlua2VkIGxpc3QuCisgICAgTWVzc2FnZSAgICAgICAgICptUHJldltrTnVtTGlzdHNdOyAgIC8vLzwgQSBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBNZXNzYWdlIGluIGEgZG91Ymx5IGxpbmtlZCBsaXN0LgorICAgIE1lc3NhZ2VQb29sICAgICAqbU1lc3NhZ2VQb29sOyAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2UgcG9vbCBmb3IgdGhpcyBtZXNzYWdlLgorICAgIHVuaW9uCisgICAgeworICAgICAgICBNZXNzYWdlUXVldWUgICAgKm1NZXNzYWdlOyAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2UgcXVldWUgKGlmIGFueSkgd2hlcmUgdGhpcyBtZXNzYWdlIGlzIHF1ZXVlZC4KKyAgICAgICAgUHJpb3JpdHlRdWV1ZSAgICptUHJpb3JpdHk7ICAgICAgLy8vPCBJZGVudGlmaWVzIHRoZSBwcmlvcml0eSBxdWV1ZSAoaWYgYW55KSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgIH0gbVF1ZXVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIHF1ZXVlIChpZiBhbnkpIHdoZXJlIHRoaXMgbWVzc2FnZSBpcyBxdWV1ZWQuCisKKyAgICB1aW50MTZfdCAgICAgICAgIG1SZXNlcnZlZDsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHJlc2VydmVkIGZvciB0aGUgbWVzc2FnZS4KKyAgICB1aW50MTZfdCAgICAgICAgIG1MZW5ndGg7ICAgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgd2l0aGluIHRoZSBtZXNzYWdlLgorICAgIHVpbnQxNl90ICAgICAgICAgbU9mZnNldDsgICAgICAgICAgICAvLy88IEEgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtZXNzYWdlLgorICAgIHVpbnQxNl90ICAgICAgICAgbURhdGFncmFtVGFnOyAgICAgICAvLy88IFRoZSBkYXRhZ3JhbSB0YWcgdXNlZCBmb3IgNkxvV1BBTiBmcmFnbWVudGF0aW9uLgorCisgICAgdWludDhfdCAgICAgICAgICBtQ2hpbGRNYXNrWzhdOyAgICAgIC8vLzwgQSBiaXQtdmVjdG9yIHRvIGluZGljYXRlIHdoaWNoIHNsZWVweSBjaGlsZHJlbiBuZWVkIHRvIHJlY2VpdmUgdGhpcy4KKyAgICB1aW50OF90ICAgICAgICAgIG1UaW1lb3V0OyAgICAgICAgICAgLy8vPCBTZWNvbmRzIHJlbWFpbmluZyBiZWZvcmUgZHJvcHBpbmcgdGhlIG1lc3NhZ2UuCisgICAgaW50OF90ICAgICAgICAgICBtSW50ZXJmYWNlSWQ7ICAgICAgIC8vLzwgVGhlIGludGVyZmFjZSBJRC4KKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdWludDE2X3QgICAgIG1QYW5JZDsgICAgICAgICAgICAgLy8vPCBVc2VkIGZvciBNTEUgRGlzY292ZXIgUmVxdWVzdCBhbmQgUmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICAgIHVpbnQ4X3QgICAgICBtQ2hhbm5lbDsgICAgICAgICAgIC8vLzwgVXNlZCBmb3IgTUxFIEFubm91bmNlLgorICAgIH0gbVBhbklkQ2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLy88IFVzZWQgZm9yIE1MRSBEaXNjb3ZlciBSZXF1ZXN0LCBSZXNwb25zZSwgYW5kIEFubm91bmNlIG1lc3NhZ2VzLgorCisgICAgdWludDhfdCAgICAgICAgICBtVHlwZSA6IDI7ICAgICAgICAgIC8vLzwgSWRlbnRpZmllcyB0aGUgdHlwZSBvZiBtZXNzYWdlLgorICAgIHVpbnQ4X3QgICAgICAgICAgbVN1YlR5cGUgOiA0OyAgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2Ugc3ViIHR5cGUuCisgICAgYm9vbCAgICAgICAgICAgICBtRGlyZWN0VHggOiAxOyAgICAgIC8vLzwgVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgZGlyZWN0IHRyYW5zbWlzc2lvbiBpcyByZXF1aXJlZC4KKyAgICBib29sICAgICAgICAgICAgIG1MaW5rU2VjdXJpdHkgOiAxOyAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgbGluayBzZWN1cml0eSBpcyBlbmFibGVkLgorICAgIHVpbnQ4X3QgICAgICAgICAgbVByaW9yaXR5IDogMjsgICAgICAvLy88IElkZW50aWZpZXMgdGhlIG1lc3NhZ2UgcHJpb3JpdHkgbGV2ZWwgKGxvd2VyIHZhbHVlIGlzIGhpZ2hlciBwcmlvcml0eSkuCisgICAgYm9vbCAgICAgICAgICAgICBtSW5Qcmlvcml0eVEgOiAxOyAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2UgaXMgcXVldWVkIGluIG5vcm1hbCBvciBwcmlvcml0eSBxdWV1ZS4KK307CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgTWVzc2FnZSBidWZmZXIuCisgKgorICovCitjbGFzcyBCdWZmZXIgOiBwdWJsaWMgOjpvdE1lc3NhZ2UKK3sKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZTsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY2xhc3MgQnVmZmVyICpHZXROZXh0QnVmZmVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlciAqPihtTmV4dCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5leHRCdWZmZXIoY2xhc3MgQnVmZmVyICpidWYpIHsgbU5leHQgPSBzdGF0aWNfY2FzdDxvdE1lc3NhZ2UgKj4oYnVmKTsgfQorCitwcml2YXRlOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgaW4gdGhlIGZpcnN0IG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBkYXRhIGJ5dGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXRGaXJzdERhdGEodm9pZCkgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tRGF0YTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBpbiB0aGUgZmlyc3QgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGRhdGEgYnl0ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEZpcnN0RGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1EYXRhOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlIG9mIGEgc3Vic2VxdWVudCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0RGF0YSh2b2lkKSB7IHJldHVybiBtQnVmZmVyLm1EYXRhOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlIG9mIGEgc3Vic2VxdWVudCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgZGF0YSBieXRlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0RGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1EYXRhOyB9CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrQnVmZmVyRGF0YVNpemUgPSBrQnVmZmVyU2l6ZSAtIHNpemVvZihzdHJ1Y3Qgb3RNZXNzYWdlKSwKKyAgICAgICAga0hlYWRCdWZmZXJEYXRhU2l6ZSA9IGtCdWZmZXJEYXRhU2l6ZSAtIHNpemVvZihzdHJ1Y3QgTWVzc2FnZUluZm8pLAorICAgIH07CisKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIE1lc3NhZ2VJbmZvIG1JbmZvOworICAgICAgICAgICAgdWludDhfdCBtRGF0YVtrSGVhZEJ1ZmZlckRhdGFTaXplXTsKKyAgICAgICAgfSBtSGVhZDsKKyAgICAgICAgdWludDhfdCBtRGF0YVtrQnVmZmVyRGF0YVNpemVdOworICAgIH0gbUJ1ZmZlcjsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbWVzc2FnZS4KKyAqCisgKi8KK2NsYXNzIE1lc3NhZ2U6IHB1YmxpYyBCdWZmZXIKK3sKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvb2w7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VRdWV1ZTsKKyAgICBmcmllbmQgY2xhc3MgUHJpb3JpdHlRdWV1ZTsKKworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtUeXBlSXA2ICAgICAgICAgPSAwLCAgIC8vLzwgQSBmdWxsIHVuY29tcHJlc3NlZCBJUHY2IHBhY2tldAorICAgICAgICBrVHlwZTZsb3dwYW4gICAgID0gMSwgICAvLy88IEEgNmxvd3BhbiBmcmFtZQorICAgICAgICBrVHlwZU1hY0RhdGFQb2xsID0gMiwgICAvLy88IEEgTUFDIGRhdGEgcG9sbCBtZXNzYWdlCisgICAgICAgIGtUeXBlU3VwZXJ2aXNpb24gPSAzLCAgIC8vLzwgQSBjaGlsZCBzdXBlcnZpc2lvbiBmcmFtZS4KKyAgICB9OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1N1YlR5cGVOb25lICAgICAgICAgICAgICAgICAgID0gMCwgIC8vLzwgTm9uZQorICAgICAgICBrU3ViVHlwZU1sZUFubm91bmNlICAgICAgICAgICAgPSAxLCAgLy8vPCBNTEUgQW5ub3VuY2UKKyAgICAgICAga1N1YlR5cGVNbGVEaXNjb3ZlclJlcXVlc3QgICAgID0gMiwgIC8vLzwgTUxFIERpc2NvdmVyIFJlcXVlc3QKKyAgICAgICAga1N1YlR5cGVNbGVEaXNjb3ZlclJlc3BvbnNlICAgID0gMywgIC8vLzwgTUxFIERpc2NvdmVyIFJlc3BvbnNlCisgICAgICAgIGtTdWJUeXBlSm9pbmVyRW50cnVzdCAgICAgICAgICA9IDQsICAvLy88IEpvaW5lciBFbnRydXN0CisgICAgICAgIGtTdWJUeXBlTXBsUmV0cmFuc21pc3Npb24gICAgICA9IDUsICAvLy88IE1QTCBuZXh0IHJldHJhbnNtaXNzaW9uIG1lc3NhZ2UKKyAgICAgICAga1N1YlR5cGVNbGVHZW5lcmFsICAgICAgICAgICAgID0gNiwgIC8vLzwgR2VuZXJhbCBNTEUKKyAgICAgICAga1N1YlR5cGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlID0gNywgIC8vLzwgSm9pbmVyIEZpbmFsaXplIFJlc3BvbnNlCisgICAgICAgIGtTdWJUeXBlTWxlQ2hpbGRVcGRhdGVSZXF1ZXN0ICA9IDgsICAvLy88IE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdAorICAgIH07CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUHJpb3JpdHlIaWdoICAgICAgID0gMCwgICAgLy8vPCBIaWdoIHByaW9yaXR5IGxldmVsLgorICAgICAgICBrUHJpb3JpdHlNZWRpdW0gICAgID0gMSwgICAgLy8vPCBNZWRpdW0gcHJpb3JpdHkgbGV2ZWwuCisgICAgICAgIGtQcmlvcml0eUxvdyAgICAgICAgPSAyLCAgICAvLy88IExvdyBwcmlvcml0eSBsZXZlbC4KKyAgICAgICAga1ByaW9yaXR5VmVyeUxvdyAgICA9IDMsICAgIC8vLzwgVmVyeSBsb3cgcHJpb3JpdHkgbGV2ZWwuCisKKyAgICAgICAga051bVByaW9yaXRpZXMgICAgICA9IDQsICAgIC8vLzwgTnVtYmVyIG9mIHByaW9yaXR5IGxldmVscy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZnJlZXMgdGhpcyBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRnJlZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IG1lc3NhZ2UgaW4gdGhlIHNhbWUgaW50ZXJmYWNlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUgc2FtZSBpbnRlcmZhY2UgbGlzdCBvciBOVUxMIGlmIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpHZXROZXh0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBSZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBGYWlsZWQgdG8gZ3JvdyB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSBiZWNhdXNlIGluc3VmZmljaWVudCBidWZmZXJzIHdlcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRMZW5ndGgodWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0QnVmZmVyQ291bnQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldE9mZnNldCh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1JbmZvLm1PZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIG1vdmVzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGVsdGEgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbW92ZSB0aGUgY3VycmVudCBvZmZzZXQsIHdoaWNoIG1heSBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgbW92ZWQgdGhlIGJ5dGUgb2Zmc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgcmVzdWx0aW5nIGJ5dGUgb2Zmc2V0IGlzIG5vdCB3aXRoaW4gdGhlIGV4aXN0aW5nIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE1vdmVPZmZzZXQoaW50IGFEZWx0YSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUgdGhlIGN1cnJlbnQgb2Zmc2V0LCB3aGljaCBtYXkgYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IG1vdmVkIHRoZSBieXRlIG9mZnNldC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIHJlcXVlc3RlZCBieXRlIG9mZnNldCBpcyBub3Qgd2l0aGluIHRoZSBleGlzdGluZyBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRPZmZzZXQodWludDE2X3QgYU9mZnNldCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tVHlwZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBtZXNzYWdlIHR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUodWludDhfdCBhVHlwZSkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1UeXBlID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHN1YiB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHN1YiB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTdWJUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVN1YlR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1lc3NhZ2Ugc3ViIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3ViVHlwZSAgVGhlIG1lc3NhZ2Ugc3ViIHR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN1YlR5cGUodWludDhfdCBhU3ViVHlwZSkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1TdWJUeXBlID0gYVN1YlR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1lc3NhZ2UgaXMgb2YgTUxFIHN1YnR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBtZXNzYWdlIGlzIG9mIE1MRSBzdWJ0eXBlLgorICAgICAqIEByZXR2YWwgRkxBU0UgIElmIG1lc3NhZ2UgaXMgbm90IG9mIE1MRSBzdWJ0eXBlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N1YlR5cGVNbGUodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtZXNzYWdlIHByaW9yaXR5IGxldmVsLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHByaW9yaXR5IGxldmVsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFByaW9yaXR5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVByaW9yaXR5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtZXNzYWdlcyBwcmlvcml0eS4KKyAgICAgKiBJZiB0aGUgbWVzc2FnZSBpcyBhbHJlYWR5IHF1ZXVlZCBpbiBhIHByaW9yaXR5IHF1ZXVlLCBjaGFuZ2luZyB0aGUgcHJpb3JpdHkgZW5zdXJlcyB0bworICAgICAqIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiB0aGUgYXNzb2NpYXRlZCBxdWV1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcm9yaXR5ICBUaGUgbWVzc2FnZSBwcmlvcml0eSBsZXZlbC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgcHJpb3JpdHkgZm9yIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgUHJpb3JpdHkgbGV2ZWwgaXMgbm90IGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFByaW9yaXR5KHVpbnQ4X3QgYVByaW9yaXR5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByZXBlbmRzIGJ5dGVzIHRvIHRoZSBmcm9udCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIE9uIHN1Y2Nlc3MsIHRoaXMgbWV0aG9kIGdyb3dzIHRoZSBtZXNzYWdlIGJ5IEBwIGFMZW5ndGggYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHByZXBlbmQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBwcmVwZW5kZWQgdGhlIGJ5dGVzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm90IGVub3VnaCByZXNlcnZlZCBieXRlcyBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUHJlcGVuZChjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgaGVhZGVyIGJ5dGVzIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBOdW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgaGVhZGVyIGJ5dGVzIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZUhlYWRlcih1aW50MTZfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYnl0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIE9uIHN1Y2Nlc3MsIHRoaXMgbWV0aG9kIGdyb3dzIHRoZSBtZXNzYWdlIGJ5IEBwIGFMZW5ndGggYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICBBIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFwcGVuZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmQoY29uc3Qgdm9pZCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBieXRlcyBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgQnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtZXNzYWdlIHRvIGJlZ2luIHJlYWRpbmcuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgQSBwb2ludGVyIHRvIGEgZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkKHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIHZvaWQgKmFCdWYpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgd3JpdGVzIGJ5dGVzIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgQnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBtZXNzYWdlIHRvIGJlZ2luIHdyaXRpbmcuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgIEEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICAgICAqCisgICAgICovCisgICAgaW50IFdyaXRlKHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIGNvbnN0IHZvaWQgKmFCdWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29waWVzIGJ5dGVzIGZyb20gb25lIG1lc3NhZ2UgdG8gYW5vdGhlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYVNvdXJjZU9mZnNldCAgICAgICBCeXRlIG9mZnNldCB3aXRoaW4gdGhlIHNvdXJjZSBtZXNzYWdlIHRvIGJlZ2luIHJlYWRpbmcuCisgICAgICogQHBhcmFtW2luXSBhRGVzdGluYXRpb25PZmZzZXQgIEJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgZGVzdGluYXRpb24gbWVzc2FnZSB0byBiZWdpbiB3cml0aW5nLgorICAgICAqIEBwYXJhbVtpbl0gYUxlbmd0aCAgICAgICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAgICAgKiBAcGFyYW1baW5dIGFNZXNzYWdlICAgICAgICAgICAgTWVzc2FnZSB0byBjb3B5IHRvLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29weVRvKHVpbnQxNl90IGFTb3VyY2VPZmZzZXQsIHVpbnQxNl90IGFEZXN0aW5hdGlvbk9mZnNldCwgdWludDE2X3QgYUxlbmd0aCwgTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgTWVzc2FnZS4gSXQgYWxsb2NhdGVzIHRoZSBuZXcgb25lCisgICAgICogZnJvbSB0aGUgc2FtZSBNZXNzYWdlIFBvbGwgYXMgdGhlIG9yaWdpbmFsIE1lc3NhZ2UgYW5kIGNvcGllcyBAcCBhTGVuZ3RoIG9jdGV0cyBvZiBhIHBheWxvYWQuCisgICAgICoKKyAgICAgKiBUaGUgYFR5cGVgLCBgU3ViVHlwZWAsIGBMaW5rU2VjdXJpdHlgIGFuZCBgUHJpb3JpdHlgIGZpZWxkcyBvbiB0aGUgY2xvbmVkIG1lc3NhZ2UgYXJlIGFsc28KKyAgICAgKiBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTGVuZ3RoICBOdW1iZXIgb2YgcGF5bG9hZCBieXRlcyB0byBjb3B5LgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgaW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorICAgICAqLworICAgIE1lc3NhZ2UgKkNsb25lKHVpbnQxNl90IGFMZW5ndGgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgTWVzc2FnZS4gSXQgYWxsb2NhdGVzIHRoZSBuZXcgb25lCisgICAgICogZnJvbSB0aGUgc2FtZSBNZXNzYWdlIFBvbGwgYXMgdGhlIG9yaWdpbmFsIE1lc3NhZ2UgYW5kIGNvcGllcyBhIGZ1bGwgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBvciBOVUxMIGlmIGluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBNZXNzYWdlICpDbG9uZSh2b2lkKSBjb25zdCB7IHJldHVybiBDbG9uZShHZXRMZW5ndGgoKSk7IH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkYXRhZ3JhbSB0YWcgdXNlZCBmb3IgNkxvV1BBTiBmcmFnbWVudGF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIDZMb1dQQU4gZGF0YWdyYW0gdGFnLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGF0YWdyYW1UYWcodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tRGF0YWdyYW1UYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGRhdGFncmFtIHRhZyB1c2VkIGZvciA2TG9XUEFOIGZyYWdtZW50YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFnICBUaGUgNkxvV1BBTiBkYXRhZ3JhbSB0YWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERhdGFncmFtVGFnKHVpbnQxNl90IGFUYWcpIHsgbUJ1ZmZlci5tSGVhZC5tSW5mby5tRGF0YWdyYW1UYWcgPSBhVGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtZXNzYWdlIGZvcndhcmRpbmcgaXMgc2NoZWR1bGVkIGZvciB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hpbGRJbmRleCAgVGhlIGluZGV4IGludG8gdGhlIGNoaWxkIHRhYmxlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG1lc3NhZ2UgaXMgc2NoZWR1bGVkIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgY2hpbGQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIG1lc3NhZ2UgaXMgbm90IHNjaGVkdWxlZCB0byBiZSBmb3J3YXJkZWQgdG8gdGhlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRDaGlsZE1hc2sodWludDhfdCBhQ2hpbGRJbmRleCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1bnNjaGVkdWxlcyBmb3J3YXJkaW5nIG9mIHRoZSBtZXNzYWdlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGlsZEluZGV4ICBUaGUgaW5kZXggaW50byB0aGUgY2hpbGQgdGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyQ2hpbGRNYXNrKHVpbnQ4X3QgYUNoaWxkSW5kZXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2NoZWR1bGVzIGZvcndhcmRpbmcgb2YgdGhlIG1lc3NhZ2UgdG8gdGhlIGNoaWxkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkSW5kZXggIFRoZSBpbmRleCBpbnRvIHRoZSBjaGlsZCB0YWJsZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hpbGRNYXNrKHVpbnQ4X3QgYUNoaWxkSW5kZXgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIHNjaGVkdWxlZCBmb3IgYXQgbGVhc3Qgb25lIGNoaWxkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIHNjaGVkdWxlZCBmb3IgYXQgbGVhc3Qgb25lIGNoaWxkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIG1lc3NhZ2UgZm9yd2FyZGluZyBpcyBub3Qgc2NoZWR1bGVkIGZvciBhbnkgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQ2hpbGRQZW5kaW5nKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBEZXN0aW5hdGlvbiBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAbm90ZSBPbmx5IHVzZSB0aGlzIHdoZW4gc2VuZGluZyBNTEUgRGlzY292ZXIgUmVxdWVzdCBvciBSZXNwb25zZSBtZXNzYWdlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IERlc3RpbmF0aW9uIFBBTiBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFBhbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVBhbklkQ2hhbm5lbC5tUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRGVzdGluYXRpb24gUEFOIElELgorICAgICAqCisgICAgICogQG5vdGUgT25seSB1c2UgdGhpcyB3aGVuIHNlbmRpbmcgTUxFIERpc2NvdmVyIFJlcXVlc3Qgb3IgUmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBJRUVFIDgwMi4xNS40IERlc3RpbmF0aW9uIFBBTiBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFuSWQodWludDE2X3QgYVBhbklkKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubVBhbklkQ2hhbm5lbC5tUGFuSWQgPSBhUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbCB0byB1c2UgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqIEBub3RlIE9ubHkgdXNlIHRoaXMgd2hlbiBzZW5kaW5nIE1MRSBBbm5vdW5jZSBtZXNzYWdlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdG8gdXNlIGZvciB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENoYW5uZWwodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tUGFuSWRDaGFubmVsLm1DaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdG8gdXNlIGZvciB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKiBAbm90ZSBPbmx5IHVzZSB0aGlzIHdoZW4gc2VuZGluZyBNTEUgQW5ub3VuY2UgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbCB0byB1c2UgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hhbm5lbCh1aW50OF90IGFDaGFubmVsKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubVBhbklkQ2hhbm5lbC5tQ2hhbm5lbCA9IGFDaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0aW1lb3V0IHVzZWQgZm9yIDZMb1dQQU4gcmVhc3NlbWJseS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0aW1lIHJlbWFpbmluZyBpbiBzZWNvbmRzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHRpbWVvdXQgdXNlZCBmb3IgNkxvV1BBTiByZWFzc2VtYmx5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSB0aW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lb3V0KHVpbnQ4X3QgYVRpbWVvdXQpIHsgbUJ1ZmZlci5tSGVhZC5tSW5mby5tVGltZW91dCA9IGFUaW1lb3V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgaW50ZXJmYWNlIElELgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldEludGVyZmFjZUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubUludGVyZmFjZUlkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJmYWNlSWQgIFRoZSBpbnRlcmZhY2UgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEludGVyZmFjZUlkKGludDhfdCBhSW50ZXJmYWNlSWQpIHsgbUJ1ZmZlci5tSGVhZC5tSW5mby5tSW50ZXJmYWNlSWQgPSBhSW50ZXJmYWNlSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgd2hldGhlciBvciBub3QgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIHNjaGVkdWxlZCBmb3IgZGlyZWN0IHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIG1lc3NhZ2UgZm9yd2FyZGluZyBpcyBzY2hlZHVsZWQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgbWVzc2FnZSBmb3J3YXJkaW5nIGlzIG5vdCBzY2hlZHVsZWQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEdldERpcmVjdFRyYW5zbWlzc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1JbmZvLm1EaXJlY3RUeDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdW5zY2hlZHVsZXMgZm9yd2FyZGluZyB1c2luZyBkaXJlY3QgdHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckRpcmVjdFRyYW5zbWlzc2lvbih2b2lkKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubURpcmVjdFR4ID0gZmFsc2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNjaGVkdWxlcyBmb3J3YXJkaW5nIHVzaW5nIGRpcmVjdCB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERpcmVjdFRyYW5zbWlzc2lvbih2b2lkKSB7IG1CdWZmZXIubUhlYWQubUluZm8ubURpcmVjdFR4ID0gdHJ1ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGxpbmsgc2VjdXJpdHkgaXMgZW5hYmxlZCBmb3IgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBsaW5rIHNlY3VyaXR5IGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgbGluayBzZWN1cml0eSBpcyBub3QgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNMaW5rU2VjdXJpdHlFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubUxpbmtTZWN1cml0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCBsaW5rIHNlY3VyaXR5IGlzIGVuYWJsZWQgZm9yIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgaWYgbGluayBzZWN1cml0eSBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExpbmtTZWN1cml0eUVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1MaW5rU2VjdXJpdHkgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgYSBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGVja3N1bSAgSW5pdGlhbCBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICAgIEJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgbWVzc2FnZSB0byBiZWdpbiBjaGVja3N1bSBjb21wdXRhdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIE51bWJlciBvZiBieXRlcyB0byBjb21wdXRlIHRoZSBjaGVja3N1bSBvdmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUaGUgdXBkYXRlZCBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IFVwZGF0ZUNoZWNrc3VtKHVpbnQxNl90IGFDaGVja3N1bSwgdWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBxdWV1ZSAoaWYgYW55KSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHF1ZXVlIG9yIE5VTEwgaWYgbm90IGluIGFueSBtZXNzYWdlIHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZVF1ZXVlICpHZXRNZXNzYWdlUXVldWUodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKCFtQnVmZmVyLm1IZWFkLm1JbmZvLm1JblByaW9yaXR5USkgPyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1RdWV1ZS5tTWVzc2FnZSA6IE5VTEw7CisgICAgfQorCitwcml2YXRlOgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcG9vbCB0byB3aGljaCB0aGlzIG1lc3NhZ2UgYmVsb25ncworICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHBvb2wuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlUG9vbCAqR2V0TWVzc2FnZVBvb2wodm9pZCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tTWVzc2FnZVBvb2w7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1lc3NhZ2UgcG9vbCB0aGlzIG1lc3NhZ2UgdG8gd2hpY2ggdGhpcyBtZXNzYWdlIGJlbG9uZ3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFNZXNzYWdlUG9vbCAgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHBvb2wKKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWVzc2FnZVBvb2woTWVzc2FnZVBvb2wgKmFNZXNzYWdlUG9vbCkgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1NZXNzYWdlUG9vbCA9IGFNZXNzYWdlUG9vbDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1lc3NhZ2UgaXMgZW5xdWV1ZWQgaW4gYW55IHF1ZXVlIChgTWVzc2FnZVF1ZXVlYCBvciBgUHJpb3JpdHlRdWV1ZWApLgorICAgICAqCisgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXNzYWdlIGlzIGluIGFueSBxdWV1ZSwgYGZhbHNlYCBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzSW5BUXVldWUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1CdWZmZXIubUhlYWQubUluZm8ubVF1ZXVlLm1NZXNzYWdlICE9IE5VTEwpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtZXNzYWdlIHF1ZXVlIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlUXVldWUgIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBxdWV1ZSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNZXNzYWdlUXVldWUoTWVzc2FnZVF1ZXVlICphTWVzc2FnZVF1ZXVlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwcmlvcml0eSBtZXNzYWdlIHF1ZXVlIChpZiBhbnkpIHdoZXJlIHRoaXMgbWVzc2FnZSBpcyBxdWV1ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHByaW9yaXR5IHF1ZXVlIG9yIE5VTEwgaWYgbm90IGluIGFueSBwcmlvcml0eSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIFByaW9yaXR5UXVldWUgKkdldFByaW9yaXR5UXVldWUodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1CdWZmZXIubUhlYWQubUluZm8ubUluUHJpb3JpdHlRKSA/IG1CdWZmZXIubUhlYWQubUluZm8ubVF1ZXVlLm1Qcmlvcml0eSA6IE5VTEw7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbWVzc2FnZSBxdWV1ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJpb3JpdHlRdWV1ZSAgQSBwb2ludGVyIHRvIHRoZSBwcmlvcml0eSBxdWV1ZSB3aGVyZSB0aGlzIG1lc3NhZ2UgaXMgcXVldWVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmlvcml0eVF1ZXVlKFByaW9yaXR5UXVldWUgKmFQcmlvcml0eVF1ZXVlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBtTmV4dGAgcG9pbnRlciBmb3IgYSBnaXZlbiBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpc3QgIFRoZSBpbmRleCB0byB0aGUgbWVzc2FnZSBsaXN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG1OZXh0IHBvaW50ZXIgZm9yIHRoZSBzcGVjaWZpZWQgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKiZOZXh0KHVpbnQ4X3QgYUxpc3QpIHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubU5leHRbYUxpc3RdOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBgbU5leHRgIHBvaW50ZXIgZm9yIGEgZ2l2ZW4gbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaXN0ICBUaGUgaW5kZXggdG8gdGhlIG1lc3NhZ2UgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBtTmV4dCBwb2ludGVyIGZvciB0aGUgc3BlY2lmaWVkIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpjb25zdCAmTmV4dCh1aW50OF90IGFMaXN0KSBjb25zdCB7IHJldHVybiBtQnVmZmVyLm1IZWFkLm1JbmZvLm1OZXh0W2FMaXN0XTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYG1QcmV2YCBwb2ludGVyIGZvciBhIGdpdmVuIGxpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlzdCAgVGhlIGluZGV4IHRvIHRoZSBtZXNzYWdlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbVByZXYgcG9pbnRlciBmb3IgdGhlIHNwZWNpZmllZCBsaXN0LgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqJlByZXYodWludDhfdCBhTGlzdCkgeyByZXR1cm4gbUJ1ZmZlci5tSGVhZC5tSW5mby5tUHJldlthTGlzdF07IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiByZXNlcnZlZCBoZWFkZXIgYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHJlc2VydmVkIGhlYWRlciBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJlc2VydmVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXIubUhlYWQubUluZm8ubVJlc2VydmVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgaGVhZGVyIGJ5dGVzLgorICAgICAqCisgICAgICogQHByYW1baW5dICBhUmVzZXJ2ZWRIZWFkZXIgIFRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlc2VydmUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlc2VydmVkKHVpbnQxNl90IGFSZXNlcnZlZEhlYWRlcikgeyBtQnVmZmVyLm1IZWFkLm1JbmZvLm1SZXNlcnZlZCA9IGFSZXNlcnZlZEhlYWRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBvciBmcmVlcyBtZXNzYWdlIGJ1ZmZlcnMgdG8gbWVldCB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgbWVzc2FnZSBidWZmZXIgbmVlZHMgdG8gaGFuZGxlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgcmVzaXplZCB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIENvdWxkIG5vdCBncm93IHRoZSBtZXNzYWdlIGR1ZSB0byBpbnN1ZmZpY2llbnQgYXZhaWxhYmxlIG1lc3NhZ2UgYnVmZmVycy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzaXplTWVzc2FnZSh1aW50MTZfdCBhTGVuZ3RoKTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgbWVzc2FnZSBxdWV1ZS4KKyAqCisgKi8KK2NsYXNzIE1lc3NhZ2VRdWV1ZSA6IHB1YmxpYyBvdE1lc3NhZ2VRdWV1ZQoreworICAgIGZyaWVuZCBjbGFzcyBNZXNzYWdlOworICAgIGZyaWVuZCBjbGFzcyBQcmlvcml0eVF1ZXVlOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgbWVzc2FnZSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2VRdWV1ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqR2V0SGVhZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIG1lc3NhZ2UgdG8gdGhlIGxpc3QuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgbWVzc2FnZSBpcyBhbHJlYWR5IGVucXVldWVkIGluIGEgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRW5xdWV1ZShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIHJlbW92ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBsaXN0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgbWVzc2FnZSBpcyBub3QgZW5xdWV1ZWQgaW4gYSBsaXN0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBEZXF1ZXVlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBhbmQgYnVmZmVycyBlbnF1ZXVlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhTWVzc2FnZUNvdW50ICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgZW5xdWV1ZWQuCisgICAgICogQHBhcmFtW291dF0gIGFCdWZmZXJDb3VudCAgIFJldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzIGVucXVldWVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZXRJbmZvKHVpbnQxNl90ICZhTWVzc2FnZUNvdW50LCB1aW50MTZfdCAmYUJ1ZmZlckNvdW50KSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhaWwgb2YgdGhlIGxpc3QgKGxhc3QgbWVzc2FnZSBpbiB0aGUgbGlzdCkKKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKkdldFRhaWwodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihtRGF0YSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgdG8gc2V0IGFzIG5ldyB0YWlsLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUYWlsKE1lc3NhZ2UgKmFNZXNzYWdlKSB7IG1EYXRhID0gYU1lc3NhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIGEgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaXN0SWQgICBUaGUgbGlzdCB0byBhZGQgQHAgYU1lc3NhZ2UgdG8uCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIGFkZCB0byBAcCBhTGlzdElkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBBZGRUb0xpc3QodWludDhfdCBhTGlzdElkLCBNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbWVzc2FnZSBmcm9tIGEgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaXN0SWQgICBUaGUgbGlzdCB0byBhZGQgQHAgYU1lc3NhZ2UgdG8uCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIGFkZCB0byBAcCBhTGlzdElkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVGcm9tTGlzdCh1aW50OF90IGFMaXN0SWQsIE1lc3NhZ2UgJmFNZXNzYWdlKTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgcHJpb3JpdHkgcXVldWUuCisgKgorICovCitjbGFzcyBQcmlvcml0eVF1ZXVlCit7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2U7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VRdWV1ZTsKKyAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVBvb2w7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBwcmlvcml0eSBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIFByaW9yaXR5UXVldWUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKkdldEhlYWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gcHJpb3JpdHkgbGV2ZWwuCisgICAgICAqCisgICAgICAqIEBwYXJhbVtpbl0gYVByaW9yaXR5ICAgUHJpb3JpdHkgbGV2ZWwuCisgICAgICAqCisgICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgbWVzc2FnZSB3aXRoIGdpdmVuIHByaW9yaXR5IGxldmVsIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gbWVzc2FnZXMgd2l0aAorICAgICAgKiAgICAgICAgICB0aGlzIHByaW9yaXR5IGxldmVsLgorICAgICAgKgorICAgICAgKi8KKyAgICBNZXNzYWdlICpHZXRIZWFkRm9yUHJpb3JpdHkodWludDhfdCBhUHJpb3JpdHkpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIG1lc3NhZ2UgdG8gdGhlIHF1ZXVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIFRoZSBtZXNzYWdlIHRvIGFkZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBsaXN0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG1lc3NhZ2UgaXMgYWxyZWFkeSBlbnF1ZXVlZCBpbiBhIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVucXVldWUoTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBUaGUgbWVzc2FnZSB0byByZW1vdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbGlzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIG1lc3NhZ2UgaXMgbm90IGVucXVldWVkIGluIGEgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRGVxdWV1ZShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgYW5kIGJ1ZmZlcnMgZW5xdWV1ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYU1lc3NhZ2VDb3VudCAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGVucXVldWVkLgorICAgICAqIEBwYXJhbVtvdXRdICBhQnVmZmVyQ291bnQgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycyBlbnF1ZXVlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgR2V0SW5mbyh1aW50MTZfdCAmYU1lc3NhZ2VDb3VudCwgdWludDE2X3QgJmFCdWZmZXJDb3VudCkgY29uc3Q7CisKK3ByaXZhdGU6CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0YWlsIG9mIHRoZSBsaXN0IChsYXN0IG1lc3NhZ2UgaW4gdGhlIGxpc3QpCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpHZXRUYWlsKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIG1lc3NhZ2UgdG8gYSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpc3RJZCAgIFRoZSBsaXN0IHRvIGFkZCBAcCBhTWVzc2FnZSB0by4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkIHRvIEBwIGFMaXN0SWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFkZFRvTGlzdCh1aW50OF90IGFMaXN0SWQsIE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBtZXNzYWdlIGZyb20gYSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpc3RJZCAgIFRoZSBsaXN0IHRvIGFkZCBAcCBhTWVzc2FnZSB0by4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gYWRkIHRvIEBwIGFMaXN0SWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZUZyb21MaXN0KHVpbnQ4X3QgYUxpc3RJZCwgTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVjcmVhc2VzIChtb3ZlcyBiYWNrKSB0aGUgZ2l2ZW4gcHJpb3JpdHkgd2hpbGUgZW5zdXJpbmcgdG8gd3JhcCBmcm9tCisgICAgICogcHJpb3JpdHkgdmFsdWUgMCBiYWNrIHRvIGBrTnVtUHJpb3JpdGllc2AgLTEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFQcmlvcml0eSAgQSBnaXZlbiBwcmlvcml0eSBsZXZlbAorICAgICAqCisgICAgICogQHJldHVybnMgRGVjcmVhc2VkL01vdmVkIGJhY2sgcHJpb3JpdHkgbGV2ZWwKKyAgICAgKi8KKyAgICB1aW50OF90IFByZXZQcmlvcml0eSh1aW50OF90IGFQcmlvcml0eSkgY29uc3QgeworICAgICAgICByZXR1cm4gKGFQcmlvcml0eSA9PSAwKSA/IChNZXNzYWdlOjprTnVtUHJpb3JpdGllcyAtIDEpIDogKGFQcmlvcml0eSAtIDEpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgcHJpdmF0ZSBtZXRob2QgZmluZHMgdGhlIGZpcnN0IG5vbi1OVUxMIHRhaWwgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcHJpb3JpdHkgbGV2ZWwgYW5kIG1vdmluZyBiYWNrLgorICAgICAqIEl0IHdyYXBzIGZyb20gcHJpb3JpdHkgdmFsdWUgMCBiYWNrIHRvIGBrTnVtUHJpb3JpdGllc2AgLTEuCisgICAgICoKKyAgICAgKiBhU3RhcnRQcmlvcml0eUxldmVsICBTdGFydGluZyBwcmlvcml0eSBsZXZlbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBmaXJzdCBub24tTlVMTCB0YWlsIHBvaW50ZXIsIG9yIE5VTEwgaWYgYWxsIHRoZQorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqRmluZEZpcnN0Tm9uTnVsbFRhaWwodWludDhfdCBhU3RhcnRQcmlvcml0eUxldmVsKSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIE1lc3NhZ2UgKm1UYWlsc1tNZXNzYWdlOjprTnVtUHJpb3JpdGllc107ICAgLy8vPCBUYWlsIHBvaW50ZXJzIGFzc29jaWF0ZWQgd2l0aCBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBtZXNzYWdlIHBvb2wKKyAqCisgKi8KK2NsYXNzIE1lc3NhZ2VQb29sOiBwdWJsaWMgSW5zdGFuY2VMb2NhdG9yCit7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2U7CisgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VRdWV1ZTsKKyAgICBmcmllbmQgY2xhc3MgUHJpb3JpdHlRdWV1ZTsKKworcHVibGljOgorCisgICAgLyoqCisgICAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gaXRlcmF0b3IgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBxdWV1ZWQgbWVzc2FnZSBmcm9tIHRoaXMgcG9vbC4KKyAgICAqCisgICAgKi8KKyAgICBjbGFzcyBJdGVyYXRvcgorICAgIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VQb29sOworCisgICAgcHVibGljOgorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyBhbiBlbXB0eSBpdGVyYXRvci4KKyAgICAgICAgICovCisgICAgICAgIEl0ZXJhdG9yKHZvaWQpIDogbU1lc3NhZ2UoTlVMTCkgeyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSB3aXRoIHRoZSBpdGVyYXRvci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIGFzc29jaWF0ZWQgbWVzc2FnZSB3aXRoIHRoaXMgaXRlcmF0b3IuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBNZXNzYWdlICpHZXRNZXNzYWdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NZXNzYWdlOyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgIGlmIHRoZSBpdGVyYXRvciBpcyBlbXB0eSAoaS5lLiwgYXNzb2NpYXRlZCB3aXRoIGEgTlVMTCBtZXNzYWdlKQorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZXJhdG9yIGlzIGVtcHR5LCBgZmFsc2VgIG90aGVyd2lzZS4KKyAgICAgICAgICovCisgICAgICAgIGJvb2wgSXNFbXB0eSh2b2lkKSBjb25zdCB7IHJldHVybiAobU1lc3NhZ2UgPT0gTlVMTCk7IH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGl0ZXJhdG9yIGhhcyBlbmRlZCAoYmV5b25kIHRoZSBsYXN0IG1lc3NhZ2Ugb24gbGlzdCkuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaXRlcmF0b3IgaGFzIGVuZGVkICwgYGZhbHNlYCBvdGhlcndpc2UuCisgICAgICAgICAqLworICAgICAgICBib29sIEhhc0VuZGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIElzRW1wdHkoKTsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGl0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gbmV4dCBtZXNzYWdlIG9uIHRoZSBsaXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyBBbiBpdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIG5leHQgbWVzc2FnZSBvbiB0aGUgbGlzdC4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIEl0ZXJhdG9yIEdldE5leHQodm9pZCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoTmV4dCgpKTsgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGl0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gcHJldmlvdXMgbWVzc2FnZSBvbiB0aGUgbGlzdC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybnMgQW4gaXRlcmF0b3IgY29ycmVzcG9uZGluZyB0byBwcmV2aW91cyBtZXNzYWdlIG9uIHRoZSBsaXN0LgorICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgSXRlcmF0b3IgR2V0UHJldih2b2lkKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihQcmV2KCkpOyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIG1vdmVzIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHRvIHRoZSBuZXh0IG1lc3NhZ2Ugb24gdGhlIGxpc3QuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIGN1cnJlbnQgaXRlcmF0b3IuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBJdGVyYXRvciAmR29Ub05leHQodm9pZCkgeyBtTWVzc2FnZSA9IE5leHQoKTsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIG1vdmVzIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHRvIHRoZSBwcmV2aW91cyBtZXNzYWdlIG9uIHRoZSBsaXN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byBjdXJyZW50IGl0ZXJhdG9yLgorICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgSXRlcmF0b3IgJkdvVG9QcmV2KHZvaWQpIHsgbU1lc3NhZ2UgPSBQcmV2KCk7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSXRlcmF0b3IoTWVzc2FnZSAqYU1lc3NhZ2UpIDogbU1lc3NhZ2UoYU1lc3NhZ2UpIHsgfQorICAgICAgICBNZXNzYWdlICpOZXh0KHZvaWQpIGNvbnN0OworICAgICAgICBNZXNzYWdlICpQcmV2KHZvaWQpIGNvbnN0OworCisgICAgICAgIE1lc3NhZ2UgKm1NZXNzYWdlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlUG9vbChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gYSBuZXcgbWVzc2FnZS4gVGhlIGRlZmF1bHQgcHJpb3JpdHkgYGtEZWZhdWx0TWVzc2FnZVByaW9yaXR5YAorICAgICAqIGlzIGFzc2lnbmVkIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgICAgICAgICAgIFRoZSBtZXNzYWdlIHR5cGUuCisgICAgICogQHBhcmFtW2luXSAgYVJlc2VydmVIZWFkZXIgIFRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlc2VydmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugb3IgTlVMTCBpZiBubyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKk5ldyh1aW50OF90IGFUeXBlLCB1aW50MTZfdCBhUmVzZXJ2ZUhlYWRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZyZWUgYSBtZXNzYWdlIGFuZCByZXR1cm4gYWxsIG1lc3NhZ2UgYnVmZmVycyB0byB0aGUgYnVmZmVyIHBvb2wuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgdG8gZnJlZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZnJlZWQgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBtZXNzYWdlIGlzIGFscmVhZHkgZnJlZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEZyZWUoTWVzc2FnZSAqYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG1lc3NhZ2UgKGhlYWQpIGluIHRoZSBhbGwtbWVzc2FnZXMgbGlzdC4KKyAgICAgKiBNZXNzYWdlcyBhcmUgc29ydGVkIGJhc2VkIG9uIHRoZWlyIHByaW9yaXR5IChoZWFkIHdpdGggaGlnaGVzdCBwcmlvcml0eSkgYW5kIG9yZGVyIGJ5IHdoaWNoIHRoZXkgYXJlIGVucXVldWVkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgSXRlcmF0b3IgR2V0QWxsTWVzc2FnZXNIZWFkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgbWVzc2FnZSAoaGVhZCkgaW4gdGhlIGFsbC1tZXNzYWdlcyBsaXN0LgorICAgICAqIE1lc3NhZ2VzIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgcHJpb3JpdHkgKGhlYWQgd2l0aCBoaWdoZXN0IHByaW9yaXR5KSBhbmQgb3JkZXIgYnkgd2hpY2ggdGhleSBhcmUgZW5xdWV1ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGxhc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIEl0ZXJhdG9yIEdldEFsbE1lc3NhZ2VzVGFpbCh2b2lkKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcihtQWxsUXVldWUuR2V0VGFpbCgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUgYnVmZmVycy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZnJlZSBidWZmZXJzLgorICAgICAqCisgICAgICovCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisgICAgdWludDE2X3QgR2V0RnJlZUJ1ZmZlckNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG90UGxhdE1lc3NhZ2VQb29sTnVtRnJlZUJ1ZmZlcnMoR2V0SW5zdGFuY2UoKSk7IH0KKyNlbHNlCisgICAgdWludDE2X3QgR2V0RnJlZUJ1ZmZlckNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OdW1GcmVlQnVmZmVyczsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0RlZmF1bHRNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlOjprUHJpb3JpdHlMb3csCisgICAgfTsKKworICAgIEJ1ZmZlciAqTmV3QnVmZmVyKHZvaWQpOworICAgIG90RXJyb3IgRnJlZUJ1ZmZlcnMoQnVmZmVyICphQnVmZmVyKTsKKyAgICBvdEVycm9yIFJlY2xhaW1CdWZmZXJzKGludCBhTnVtQnVmZmVycyk7CisgICAgUHJpb3JpdHlRdWV1ZSAqR2V0QWxsTWVzc2FnZXNRdWV1ZSh2b2lkKSB7IHJldHVybiAmbUFsbFF1ZXVlOyB9CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQgPT0gMAorICAgIHVpbnQxNl90IG1OdW1GcmVlQnVmZmVyczsKKyAgICBCdWZmZXIgICBtQnVmZmVyc1trTnVtQnVmZmVyc107CisgICAgQnVmZmVyICAgKm1GcmVlQnVmZmVyczsKKyNlbmRpZgorCisgICAgUHJpb3JpdHlRdWV1ZSBtQWxsUXVldWU7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU1NBR0VfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL25ldy5ocHAgYi9zcmMvY29yZS9jb21tb24vbmV3LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk1MzgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL25ldy5ocHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgbmV3IG9wZXJhdG9yIHVzZWQgYnkgT3BlblRocmVhZC4KKyAqLworCisjaWZuZGVmIE5FV19IUFBfCisjZGVmaW5lIE5FV19IUFBfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdG9vbGNoYWluLmg+CisKK2lubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwKSB0aHJvdygpIHsgcmV0dXJuIHA7IH0KKworI2VuZGlmICAvLyBORVdfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3NldHRpbmdzLmhwcCBiL3NyYy9jb3JlL2NvbW1vbi9zZXR0aW5ncy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyNDMxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi9zZXR0aW5ncy5ocHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgZGVidWdnaW5nLgorICovCisKKyNpZm5kZWYgU0VUVElOR1NfSFBQXworI2RlZmluZSBTRVRUSU5HU19IUFBfCisKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBTZXR0aW5ncyB7CisKKy8qKgorICogUnVsZXMgZm9yIHVwZGF0aW5nIGV4aXN0aW5nIHZhbHVlIHN0cnVjdHVyZXMuCisgKgorICogMS4gTW9kaWZ5aW5nIGV4aXN0aW5nIG90UGxhdFNldHRpbmdzKiBrZXkgdmFsdWUgZmllbGRzIE1VU1Qgb25seSBiZQorICogICAgZG9uZSBieSBhcHBlbmRpbmcgbmV3IGZpZWxkcy4gIEV4aXN0aW5nIGZpZWxkcyBNVVNUIE5PVCBiZQorICogICAgZGVsZXRlZCBvciBtb2RpZmllZCBpbiBhbnkgd2F5LgorICoKKyAqIDIuIFRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAocm9sbGluZyBiYWNrIHRvIGFuIG9sZGVyCisgKiAgICBzb2Z0d2FyZSB2ZXJzaW9uKSwgY29kZSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIGtleSB2YWx1ZXMgTVVTVAorICogICAgcHJvY2VzcyBrZXkgdmFsdWVzIHRoYXQgaGF2ZSBsb25nZXIgbGVuZ3RoLiAgQWRkaXRpb25hbGx5LCBuZXdlcgorICogICAgdmVyc2lvbnMgTVVTVCB1cGRhdGUvbWFpbnRhaW4gdmFsdWVzIGluIGV4aXN0aW5nIGtleSB2YWx1ZQorICogICAgZmllbGRzLgorICoKKyAqIDMuIFRvIHN1cHBvcnQgZm9yd2FyZCBjb21wYXRpYmlsaXR5IChyb2xsaW5nIGZvcndhcmQgdG8gYSBuZXdlcgorICogICAgc29mdHdhcmUgdmVyc2lvbiksIGNvZGUgcmVhZGluZyBhbmQgcHJvY2Vzc2luZyBrZXkgdmFsdWVzIE1VU1QKKyAqICAgIHByb2Nlc3Mga2V5IHZhbHVlcyB0aGF0IGhhdmUgc2hvcnRlciBsZW5ndGguCisgKgorICogNC4gTmV3IEtleSBJRHMgbWF5IGJlIGRlZmluZWQgaW4gdGhlIGZ1dHVyZSB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nCisgKiAgICB0aGF0IHN1Y2gga2V5IHZhbHVlcyBhcmUgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUuCisgKgorICovCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBrZXlzIG9mIHNldHRpbmdzCisgKgorICovCitlbnVtCit7CisgICAga0tleUFjdGl2ZURhdGFzZXQgICA9IDB4MDAwMSwgIC8vLzwgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQKKyAgICBrS2V5UGVuZGluZ0RhdGFzZXQgID0gMHgwMDAyLCAgLy8vPCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQKKyAgICBrS2V5TmV0d29ya0luZm8gICAgID0gMHgwMDAzLCAgLy8vPCBUaHJlYWQgbmV0d29yayBpbmZvcm1hdGlvbgorICAgIGtLZXlQYXJlbnRJbmZvICAgICAgPSAweDAwMDQsICAvLy88IFBhcmVudCBpbmZvcm1hdGlvbgorICAgIGtLZXlDaGlsZEluZm8gICAgICAgPSAweDAwMDUsICAvLy88IENoaWxkIGluZm9ybWF0aW9uCisgICAga0tleVRocmVhZEF1dG9TdGFydCA9IDB4MDAwNiwgIC8vLzwgQXV0by1zdGFydCBpbmZvcm1hdGlvbgorfTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBkZXZpY2UncyBvd24gbmV0d29yayBpbmZvcm1hdGlvbiBmb3Igc2V0dGluZ3Mgc3RvcmFnZS4KKyAqCisgKi8KK3N0cnVjdCBOZXR3b3JrSW5mbworeworICAgIHVpbnQ4X3QgICAgICAgICAgbVJvbGU7ICAgICAgICAgICAgICAgICAgICAvLy88IEN1cnJlbnQgVGhyZWFkIHJvbGUuCisgICAgdWludDhfdCAgICAgICAgICBtRGV2aWNlTW9kZTsgICAgICAgICAgICAgIC8vLzwgRGV2aWNlIG1vZGUgc2V0dGluZy4KKyAgICB1aW50MTZfdCAgICAgICAgIG1SbG9jMTY7ICAgICAgICAgICAgICAgICAgLy8vPCBSTE9DMTYKKyAgICB1aW50MzJfdCAgICAgICAgIG1LZXlTZXF1ZW5jZTsgICAgICAgICAgICAgLy8vPCBLZXkgU2VxdWVuY2UKKyAgICB1aW50MzJfdCAgICAgICAgIG1NbGVGcmFtZUNvdW50ZXI7ICAgICAgICAgLy8vPCBNTEUgRnJhbWUgQ291bnRlcgorICAgIHVpbnQzMl90ICAgICAgICAgbU1hY0ZyYW1lQ291bnRlcjsgICAgICAgICAvLy88IE1BQyBGcmFtZSBDb3VudGVyCisgICAgdWludDMyX3QgICAgICAgICBtUHJldmlvdXNQYXJ0aXRpb25JZDsgICAgIC8vLzwgUGFydGl0aW9uSWQKKyAgICBNYWM6OkV4dEFkZHJlc3MgIG1FeHRBZGRyZXNzOyAgICAgICAgICAgICAgLy8vPCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDhfdCAgICAgICAgICBtTWxJaWRbT1RfSVA2X0lJRF9TSVpFXTsgIC8vLzwgSUlEIGZyb20gTUwtRUlECit9OworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIHBhcmVudCBpbmZvcm1hdGlvbiBmb3Igc2V0dGluZ3Mgc3RvcmFnZS4KKyAqCisgKi8KK3N0cnVjdCBQYXJlbnRJbmZvCit7CisgICAgTWFjOjpFeHRBZGRyZXNzICBtRXh0QWRkcmVzczsgICAvLy88IEV4dGVuZGVkIEFkZHJlc3MKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgY2hpbGQgaW5mb3JtYXRpb24gZm9yIHNldHRpbmdzIHN0b3JhZ2UuCisgKgorICovCitzdHJ1Y3QgQ2hpbGRJbmZvCit7CisgICAgTWFjOjpFeHRBZGRyZXNzICBtRXh0QWRkcmVzczsgICAgLy8vPCBFeHRlbmRlZCBBZGRyZXNzCisgICAgdWludDMyX3QgICAgICAgICBtVGltZW91dDsgICAgICAgLy8vPCBUaW1lb3V0CisgICAgdWludDE2X3QgICAgICAgICBtUmxvYzE2OyAgICAgICAgLy8vPCBSTE9DMTYKKyAgICB1aW50OF90ICAgICAgICAgIG1Nb2RlOyAgICAgICAgICAvLy88IFRoZSBNTEUgZGV2aWNlIG1vZGUKK307CisKK30gIC8vIG5hbWVzcGFjZSBTZXR0aW5ncworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gU0VUVElOR1NfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3Rhc2tsZXQuY3BwIGIvc3JjL2NvcmUvY29tbW9uL3Rhc2tsZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YWQ5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdGFza2xldC5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHRhc2tsZXQgc2NoZWR1bGVyLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidGFza2xldC5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworVGFza2xldDo6VGFza2xldChUYXNrbGV0U2NoZWR1bGVyICZhU2NoZWR1bGVyLCBIYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk6CisgICAgVGFza2xldFNjaGVkdWxlckxvY2F0b3IoYVNjaGVkdWxlciksCisgICAgQ29udGV4dChhQ29udGV4dCksCisgICAgbUhhbmRsZXIoYUhhbmRsZXIpLAorICAgIG1OZXh0KE5VTEwpCit7Cit9CisKK290RXJyb3IgVGFza2xldDo6UG9zdCh2b2lkKQoreworICAgIHJldHVybiBHZXRUYXNrbGV0U2NoZWR1bGVyKCkuUG9zdCgqdGhpcyk7Cit9CisKK1Rhc2tsZXRTY2hlZHVsZXI6OlRhc2tsZXRTY2hlZHVsZXIodm9pZCk6CisgICAgbUhlYWQoTlVMTCksCisgICAgbVRhaWwoTlVMTCkKK3sKK30KKworb3RFcnJvciBUYXNrbGV0U2NoZWR1bGVyOjpQb3N0KFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1UYWlsICE9ICZhVGFza2xldCAmJiBhVGFza2xldC5tTmV4dCA9PSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworCisgICAgaWYgKG1UYWlsID09IE5VTEwpCisgICAgeworICAgICAgICBtSGVhZCA9ICZhVGFza2xldDsKKyAgICAgICAgbVRhaWwgPSAmYVRhc2tsZXQ7CisgICAgICAgIG90VGFza2xldHNTaWduYWxQZW5kaW5nKGFUYXNrbGV0LkdldEluc3RhbmNlKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGFpbC0+bU5leHQgPSAmYVRhc2tsZXQ7CisgICAgICAgIG1UYWlsID0gJmFUYXNrbGV0OworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK1Rhc2tsZXQgKlRhc2tsZXRTY2hlZHVsZXI6OlBvcFRhc2tsZXQodm9pZCkKK3sKKyAgICBUYXNrbGV0ICp0YXNrID0gbUhlYWQ7CisKKyAgICBpZiAodGFzayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUhlYWQgPSBtSGVhZC0+bU5leHQ7CisKKyAgICAgICAgaWYgKG1IZWFkID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UYWlsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHRhc2stPm1OZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gdGFzazsKK30KKwordm9pZCBUYXNrbGV0U2NoZWR1bGVyOjpQcm9jZXNzUXVldWVkVGFza2xldHModm9pZCkKK3sKKyAgICBUYXNrbGV0ICp0YWlsID0gbVRhaWw7CisgICAgVGFza2xldCAqY3VyOworCisgICAgd2hpbGUgKChjdXIgPSBQb3BUYXNrbGV0KCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBjdXItPlJ1blRhc2soKTsKKworICAgICAgICAvLyBvbmx5IHByb2Nlc3MgdGFza2xldHMgdGhhdCB3ZXJlIHF1ZXVlZCBhdCB0aGUgdGltZSB0aGlzIG1ldGhvZCB3YXMgY2FsbGVkCisgICAgICAgIGlmIChjdXIgPT0gdGFpbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1IZWFkICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3RUYXNrbGV0c1NpZ25hbFBlbmRpbmcobUhlYWQtPkdldEluc3RhbmNlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vdGFza2xldC5ocHAgYi9zcmMvY29yZS9jb21tb24vdGFza2xldC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmYjAyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi90YXNrbGV0LmhwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRhc2tsZXRzIGFuZCB0aGUgdGFza2xldCBzY2hlZHVsZXIuCisgKi8KKworI2lmbmRlZiBUQVNLTEVUX0hQUF8KKyNkZWZpbmUgVEFTS0xFVF9IUFBfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90YXNrbGV0Lmg+CisKKyNpbmNsdWRlICJjb21tb24vY29udGV4dC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUYXNrbGV0U2NoZWR1bGVyOworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtdGFza2xldAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGFza2xldHMgYW5kIHRoZSB0YXNrbGV0IHNjaGVkdWxlci4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZXByZXNlbnQgYSB0YXNrbGV0LgorICoKKyAqLworY2xhc3MgVGFza2xldDogcHVibGljIFRhc2tsZXRTY2hlZHVsZXJMb2NhdG9yLCBwdWJsaWMgQ29udGV4dAoreworICAgIGZyaWVuZCBjbGFzcyBUYXNrbGV0U2NoZWR1bGVyOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB0YXNrbGV0IGlzIHJ1bi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUYXNrbGV0ICBBIHJlZmVyZW5jZSB0byB0aGUgdGFza2xldCBiZWluZyBydW4uCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpIYW5kbGVyKShUYXNrbGV0ICZhVGFza2xldCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSB0YXNrbGV0IGluc3RhbmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjaGVkdWxlciAgQSByZWZlcmVuY2UgdG8gdGhlIHRhc2tsZXQgc2NoZWR1bGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHRhc2tsZXQgaXMgcnVuLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFRhc2tsZXQoVGFza2xldFNjaGVkdWxlciAmYVNjaGVkdWxlciwgSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHV0cyB0aGUgdGFza2xldCBvbiB0aGUgcnVuIHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBQb3N0KHZvaWQpOworCitwcml2YXRlOgorICAgIHZvaWQgUnVuVGFzayh2b2lkKSB7IG1IYW5kbGVyKCp0aGlzKTsgfQorCisgICAgSGFuZGxlciAgICAgICAgICAgbUhhbmRsZXI7CisgICAgVGFza2xldCAgICAgICAgICAqbU5leHQ7Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgdGFza2xldCBzY2hlZHVsZXIuCisgKgorICovCitjbGFzcyBUYXNrbGV0U2NoZWR1bGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgVGFza2xldFNjaGVkdWxlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVucXVldWVzIGEgdGFza2xldCBpbnRvIHRoZSBydW4gcXVldWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFza2xldCAgQSByZWZlcmVuY2UgdG8gdGhlIHRhc2tsZXQgdG8gZW5xdWV1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSB0YXNrbGV0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHRhc2tsZXQgd2FzIGFscmVhZHkgZW5xdWV1ZWQuCisgICAgICovCisgICAgb3RFcnJvciBQb3N0KFRhc2tsZXQgJmFUYXNrbGV0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgdGFza2xldHMgcGVuZGluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZXJlIGFyZSB0YXNrbGV0cyBwZW5kaW5nLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZXJlIGFyZSBubyB0YXNrbGV0cyBwZW5kaW5nLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBBcmVUYXNrbGV0c1BlbmRpbmcodm9pZCkgeyByZXR1cm4gbUhlYWQgIT0gTlVMTDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIGFsbCB0YXNrbGV0cyBxdWV1ZWQgd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUHJvY2Vzc1F1ZXVlZFRhc2tsZXRzKHZvaWQpOworCitwcml2YXRlOgorICAgIFRhc2tsZXQgKlBvcFRhc2tsZXQodm9pZCk7CisgICAgVGFza2xldCAqbUhlYWQ7CisgICAgVGFza2xldCAqbVRhaWw7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRBU0tMRVRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3RpbWVyLmNwcCBiL3NyYy9jb3JlL2NvbW1vbi90aW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NTJkMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi90aW1lci5jcHAKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSBtdWx0aXBsZXhlZCB0aW1lciBzZXJ2aWNlIG9uIHRvcCBvZiB0aGUgYWxhcm0gYWJzdHJhY3Rpb24uCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAidGltZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRpbWVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vYWxhcm0uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK1RpbWVyU2NoZWR1bGVyOjpUaW1lclNjaGVkdWxlcih2b2lkKToKKyAgICBtSGVhZChOVUxMKQoreworfQorCit2b2lkIFRpbWVyU2NoZWR1bGVyOjpBZGQoVGltZXIgJmFUaW1lcikKK3sKKyAgICBSZW1vdmUoYVRpbWVyKTsKKworICAgIGlmIChtSGVhZCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbUhlYWQgPSAmYVRpbWVyOworICAgICAgICBhVGltZXIubU5leHQgPSBOVUxMOworICAgICAgICBTZXRBbGFybSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUaW1lciAqcHJldiA9IE5VTEw7CisgICAgICAgIFRpbWVyICpjdXI7CisKKyAgICAgICAgZm9yIChjdXIgPSBtSGVhZDsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYVRpbWVyLkRvZXNGaXJlQmVmb3JlKCpjdXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwcmV2KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYVRpbWVyLm1OZXh0ID0gY3VyOworICAgICAgICAgICAgICAgICAgICBwcmV2LT5tTmV4dCA9ICZhVGltZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFUaW1lci5tTmV4dCA9IG1IZWFkOworICAgICAgICAgICAgICAgICAgICBtSGVhZCA9ICZhVGltZXI7CisgICAgICAgICAgICAgICAgICAgIFNldEFsYXJtKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXYgPSBjdXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VyID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZXYtPm1OZXh0ID0gJmFUaW1lcjsKKyAgICAgICAgICAgIGFUaW1lci5tTmV4dCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGltZXJTY2hlZHVsZXI6OlJlbW92ZShUaW1lciAmYVRpbWVyKQoreworICAgIFZlcmlmeU9yRXhpdChhVGltZXIubU5leHQgIT0gJmFUaW1lcik7CisKKyAgICBpZiAobUhlYWQgPT0gJmFUaW1lcikKKyAgICB7CisgICAgICAgIG1IZWFkID0gYVRpbWVyLm1OZXh0OworICAgICAgICBTZXRBbGFybSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKFRpbWVyICpjdXIgPSBtSGVhZDsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyLT5tTmV4dCA9PSAmYVRpbWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ci0+bU5leHQgPSBhVGltZXIubU5leHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhVGltZXIubU5leHQgPSAmYVRpbWVyOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBUaW1lclNjaGVkdWxlcjo6U2V0QWxhcm0odm9pZCkKK3sKKyAgICBpZiAobUhlYWQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90UGxhdEFsYXJtU3RvcChHZXRJcDYoKS0+R2V0SW5zdGFuY2UoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgIHVpbnQzMl90IHJlbWFpbmluZyA9IElzU3RyaWN0bHlCZWZvcmUobm93LCBtSGVhZC0+bUZpcmVUaW1lKSA/IChtSGVhZC0+bUZpcmVUaW1lIC0gbm93KSA6IDA7CisKKyAgICAgICAgb3RQbGF0QWxhcm1TdGFydEF0KEdldElwNigpLT5HZXRJbnN0YW5jZSgpLCBub3csIHJlbWFpbmluZyk7CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0QWxhcm1GaXJlZChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBhSW5zdGFuY2UtPm1JcDYubVRpbWVyU2NoZWR1bGVyLlByb2Nlc3NUaW1lcnMoKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgVGltZXJTY2hlZHVsZXI6OlByb2Nlc3NUaW1lcnModm9pZCkKK3sKKyAgICBUaW1lciAqdGltZXIgPSBtSGVhZDsKKworICAgIGlmICh0aW1lcikKKyAgICB7CisgICAgICAgIGlmICghSXNTdHJpY3RseUJlZm9yZShvdFBsYXRBbGFybUdldE5vdygpLCB0aW1lci0+bUZpcmVUaW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVtb3ZlKCp0aW1lcik7CisgICAgICAgICAgICB0aW1lci0+RmlyZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNldEFsYXJtKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2V0QWxhcm0oKTsKKyAgICB9Cit9CisKK0lwNjo6SXA2ICpUaW1lclNjaGVkdWxlcjo6R2V0SXA2KHZvaWQpCit7CisgICAgcmV0dXJuIElwNjo6SXA2RnJvbVRpbWVyU2NoZWR1bGVyKHRoaXMpOworfQorCitib29sIFRpbWVyU2NoZWR1bGVyOjpJc1N0cmljdGx5QmVmb3JlKHVpbnQzMl90IGFUaW1lQSwgdWludDMyX3QgYVRpbWVCKQoreworICAgIHVpbnQzMl90IGRpZmYgPSBhVGltZUEgLSBhVGltZUI7CisKKyAgICAvLyBUaHJlZSBjYXNlczoKKyAgICAvLyAxKSBhVGltZUEgaXMgYmVmb3JlICBhVGltZUIgID0+ICBEaWZmZXJlbmNlIGlzIG5lZ2F0aXZlIChsYXN0IGJpdCBvZiBkaWZmZXJlbmNlIGlzIHNldCkgICA9PiBSZXR1cm5pbmcgdHJ1ZS4KKyAgICAvLyAyKSBhVGltZUEgaXMgc2FtZSBhcyBhVGltZUIgID0+ICBEaWZmZXJlbmNlIGlzIHplcm8gICAgIChsYXN0IGJpdCBvZiBkaWZmZXJlbmNlIGlzIGNsZWFyKSA9PiBSZXR1cm5pbmcgZmFsc2UuCisgICAgLy8gMykgYVRpbWVBIGlzIGFmdGVyICAgYVRpbWVCICA9PiAgRGlmZmVyZW5jZSBpcyBwb3NpdGl2ZSAobGFzdCBiaXQgb2YgZGlmZmVyZW5jZSBpcyBjbGVhcikgPT4gUmV0dXJuaW5nIGZhbHNlLgorCisgICAgcmV0dXJuICgoZGlmZiAmICgxVUwgPDwgMzEpKSAhPSAwKTsKK30KKworYm9vbCBUaW1lcjo6RG9lc0ZpcmVCZWZvcmUoY29uc3QgVGltZXIgJmFTZWNvbmRUaW1lcikKK3sKKyAgICBib29sIHJldHZhbDsKKyAgICB1aW50MzJfdCBub3cgPSBHZXROb3coKTsKKyAgICBib29sIGlzQmVmb3JlTm93ID0gVGltZXJTY2hlZHVsZXI6OklzU3RyaWN0bHlCZWZvcmUoR2V0RmlyZVRpbWUoKSwgbm93KTsKKworICAgIC8vIENoZWNrIGlmIG9uZSB0aW1lciBpcyBiZWZvcmUgYG5vd2AgYW5kIHRoZSBvdGhlciBvbmUgaXMgbm90LgorICAgIGlmIChUaW1lclNjaGVkdWxlcjo6SXNTdHJpY3RseUJlZm9yZShhU2Vjb25kVGltZXIuR2V0RmlyZVRpbWUoKSwgbm93KSAhPSBpc0JlZm9yZU5vdykKKyAgICB7CisgICAgICAgIC8vIE9uZSB0aW1lciBpcyBiZWZvcmUgYG5vd2AgYW5kIHRoZSBvdGhlciBvbmUgaXMgbm90LCBzbyBpZiB0aGlzIHRpbWVyJ3MgZmlyZSB0aW1lIGlzIGJlZm9yZSBgbm93YCB0aGVuCisgICAgICAgIC8vIHRoZSBzZWNvbmQgZmlyZSB0aW1lIHdvdWxkIGJlIGFmdGVyIGBub3dgIGFuZCB0aGlzIHRpbWVyIHdvdWxkIGZpcmUgYmVmb3JlIHRoZSBzZWNvbmQgdGltZXIuCisKKyAgICAgICAgcmV0dmFsID0gaXNCZWZvcmVOb3c7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEJvdGggdGltZXJzIGFyZSBiZWZvcmUgYG5vd2Agb3IgYm90aCBhcmUgYWZ0ZXIgYG5vd2AuIEVpdGhlciB3YXkgdGhlIGRpZmZlcmVuY2UgaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzCisgICAgICAgIC8vIHRoYW4gYGtNYXhEdGAgc28gd2UgY2FuIHNhZmVseSBjb21wYXJlIHRoZSBmaXJlIHRpbWVzIGRpcmVjdGx5LgorCisgICAgICAgIHJldHZhbCA9IFRpbWVyU2NoZWR1bGVyOjpJc1N0cmljdGx5QmVmb3JlKEdldEZpcmVUaW1lKCksIGFTZWNvbmRUaW1lci5HZXRGaXJlVGltZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi90aW1lci5ocHAgYi9zcmMvY29yZS9jb21tb24vdGltZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWVmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdGltZXIuaHBwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIG11bHRpcGxleGVkIHRpbWVyIHNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBUSU1FUl9IUFBfCisjZGVmaW5lIFRJTUVSX0hQUF8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9hbGFybS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvbnRleHQuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIElwNiB7IGNsYXNzIElwNjsgfQorCitjbGFzcyBUaW1lcjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXRpbWVyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgbXVsdGlwbGV4ZWQgdGltZXIgc2VydmljZS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgdGltZXIgc2NoZWR1bGVyLgorICoKKyAqLworY2xhc3MgVGltZXJTY2hlZHVsZXIKK3sKKyAgICBmcmllbmQgY2xhc3MgVGltZXI7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBUaW1lclNjaGVkdWxlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSB0aW1lciBpbnN0YW5jZSB0byB0aGUgdGltZXIgc2NoZWR1bGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyICBBIHJlZmVyZW5jZSB0byB0aGUgdGltZXIgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFkZChUaW1lciAmYVRpbWVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSB0aW1lciBpbnN0YW5jZSB0byB0aGUgdGltZXIgc2NoZWR1bGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyICBBIHJlZmVyZW5jZSB0byB0aGUgdGltZXIgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZShUaW1lciAmYVRpbWVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyB0aGUgcnVubmluZyB0aW1lcnMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFByb2Nlc3NUaW1lcnModm9pZCk7CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcGxhdGZvcm0gYWxhcm0gYmFzZWQgb24gdGltZXIgYXQgZnJvbnQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFsYXJtKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgcGFyZW50IElwNiBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcG9pbnRlciB0byB0aGUgcGFyZW50IElwNiBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKi8KKyAgICBJcDY6OklwNiAqR2V0SXA2KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIGNvbXBhcmVzIHR3byB0aW1lcyBhbmQgaW5kaWNhdGVzIGlmIHRoZSBmaXJzdCB0aW1lIGlzIHN0cmljdGx5IGJlZm9yZSAoZWFybGllcikgdGhhbiB0aGUKKyAgICAgKiBzZWNvbmQgdGltZS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGdpdmVuIHRpbWVzIHRvIGJlIHNtYWxsZXIgdGhhbiBrTWF4RHQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFUaW1lckEgICBUaGUgZmlyc3QgdGltZSBmb3IgY29tcGFyaXNvbi4KKyAgICAgKiBAcGFyYW1baW5dIGFUaW1lckIgICBUaGUgc2Vjb25kIHRpbWUgZm9yIGNvbXBhcmlzb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFICBpZiBhVGltZUEgaXMgYmVmb3JlIGFUaW1lQi4KKyAgICAgKiBAcmV0dXJucyBGQUxTRSBpZiBhVGltZUEgaXMgc2FtZSB0aW1lIG9yIGFmdGVyIGFUaW1lQi4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBib29sIElzU3RyaWN0bHlCZWZvcmUodWludDMyX3QgYVRpbWVBLCB1aW50MzJfdCBhVGltZUIpOworCisgICAgVGltZXIgKm1IZWFkOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSB0aW1lci4KKyAqCisgKi8KK2NsYXNzIFRpbWVyOiBwdWJsaWMgVGltZXJTY2hlZHVsZXJMb2NhdG9yLCBwdWJsaWMgQ29udGV4dAoreworICAgIGZyaWVuZCBjbGFzcyBUaW1lclNjaGVkdWxlcjsKKworcHVibGljOgorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heER0ID0gKDFVTCA8PCAzMSkgLSAxLCAgLy88IE1heGltdW0gcGVybWl0dGVkIHZhbHVlIGZvciBwYXJhbWV0ZXIgYGFEdGAgaW4gYFN0YXJ0YCBhbmQgYFN0YXJ0QXRgIG1ldGhvZC4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVyICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBleHBpcmVkIHRpbWVyIGluc3RhbmNlLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqSGFuZGxlcikoVGltZXIgJmFUaW1lcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSB0aW1lciBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTY2hlZHVsZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lciBzY2hlZHVsZXIuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBUaW1lcihUaW1lclNjaGVkdWxlciAmYVNjaGVkdWxlciwgSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOgorICAgICAgICBUaW1lclNjaGVkdWxlckxvY2F0b3IoYVNjaGVkdWxlciksCisgICAgICAgIENvbnRleHQoYUNvbnRleHQpLAorICAgICAgICBtSGFuZGxlcihhSGFuZGxlciksCisgICAgICAgIG1GaXJlVGltZSgwKSwKKyAgICAgICAgbU5leHQodGhpcykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcmUgdGltZSBvZiB0aGUgdGltZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgZmlyZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEZpcmVUaW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GaXJlVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lciBpbnN0YW5jZSBpcyBydW5uaW5nLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIHRpbWVyIGlzIHJ1bm5pbmcuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIHRpbWVyIGlzIG5vdCBydW5uaW5nLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1J1bm5pbmcodm9pZCkgY29uc3QgeyByZXR1cm4gKG1OZXh0ICE9IHRoaXMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzY2hlZHVsZXMgdGhlIHRpbWVyIHRvIGZpcmUgYSBAcCBkdCBtaWxsaXNlY29uZHMgZnJvbSBub3cuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHQgIFRoZSBleHBpcmUgdGltZSBpbiBtaWxsaXNlY29uZHMgZnJvbSBub3cuCisgICAgICogICAgICAgICAgICAgICAgICAoYUR0IG11c3QgYmUgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIGtNYXhEdCkuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0YXJ0KHVpbnQzMl90IGFEdCkgeyBTdGFydEF0KEdldE5vdygpLCBhRHQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzY2hlZHVsZXMgdGhlIHRpbWVyIHRvIGZpcmUgYXQgQHAgYUR0IG1pbGxpc2Vjb25kcyBmcm9tIEBwIGFUMC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUMCAgVGhlIHN0YXJ0IHRpbWUgaW4gbWlsbGlzZWNvbmRzLgorICAgICAqIEBwYXJhbVtpbl0gIGFEdCAgVGhlIGV4cGlyZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBmcm9tIEBwIGFUMC4KKyAgICAgKiAgICAgICAgICAgICAgICAgIChhRHQgbXVzdCBiZSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8ga01heER0KS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnRBdCh1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCkgeworICAgICAgICBhc3NlcnQoYUR0IDw9IGtNYXhEdCk7CisgICAgICAgIG1GaXJlVGltZSA9IGFUMCArIGFEdDsKKyAgICAgICAgR2V0VGltZXJTY2hlZHVsZXIoKS5BZGQoKnRoaXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKSB7IEdldFRpbWVyU2NoZWR1bGVyKCkuUmVtb3ZlKCp0aGlzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB0aW1lIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MzJfdCBHZXROb3codm9pZCkgeyByZXR1cm4gb3RQbGF0QWxhcm1HZXROb3coKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZ2l2ZW4gc2Vjb25kcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQzMl90IFNlY1RvTXNlYyh1aW50MzJfdCBhU2Vjb25kcykgeyByZXR1cm4gYVNlY29uZHMgKiAxMDAwdTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGdpdmVuIG1pbGxpc2Vjb25kcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2Ygc2Vjb25kcy4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MzJfdCBNc2VjVG9TZWModWludDMyX3QgYU1pbGxpc2Vjb25kcykgeyByZXR1cm4gYU1pbGxpc2Vjb25kcyAvIDEwMDB1OyB9CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIGlmIHRoZSBmaXJlIHRpbWUgb2YgdGhpcyB0aW1lciBpcyBzdHJpY3RseSBiZWZvcmUgdGhlIGZpcmUgdGltZSBvZiBhIHNlY29uZCBnaXZlbiB0aW1lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lciAgIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWNvbmQgdGltZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICBJZiB0aGUgZmlyZSB0aW1lIG9mIHRoaXMgdGltZXIgb2JqZWN0IGlzIHN0cmljdGx5IGJlZm9yZSBhVGltZXIncyBmaXJlIHRpbWUKKyAgICAgKiBAcmV0dmFsIEZBTFNFIElmIHRoZSBmaXJlIHRpbWUgb2YgdGhpcyB0aW1lciBvYmplY3QgaXMgdGhlIHNhbWUgb3IgYWZ0ZXIgYVRpbWVyJ3MgZmlyZSB0aW1lLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBEb2VzRmlyZUJlZm9yZShjb25zdCBUaW1lciAmYVRpbWVyKTsKKworICAgIHZvaWQgRmlyZWQodm9pZCkgeyBtSGFuZGxlcigqdGhpcyk7IH0KKworICAgIEhhbmRsZXIgICAgICAgICBtSGFuZGxlcjsKKyAgICB1aW50MzJfdCAgICAgICAgbUZpcmVUaW1lOworICAgIFRpbWVyICAgICAgICAgICptTmV4dDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVElNRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3RsdnMuY3BwIGIvc3JjL2NvcmUvY29tbW9uL3RsdnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDViMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdGx2cy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgY29tbW9uIG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBNTEUgVExWcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRsdnMuaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworb3RFcnJvciBUbHY6OkdldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhVHlwZSwgdWludDE2X3QgYU1heExlbmd0aCwgVGx2ICZhVGx2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgdWludDE2X3Qgb2Zmc2V0OworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldE9mZnNldChhTWVzc2FnZSwgYVR5cGUsIG9mZnNldCkpOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoVGx2KSwgJmFUbHYpOworCisgICAgaWYgKGFNYXhMZW5ndGggPiBzaXplb2YoYVRsdikgKyBhVGx2LkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgYU1heExlbmd0aCA9IHNpemVvZihhVGx2KSArIGFUbHYuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIGFNYXhMZW5ndGgsICZhVGx2KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgVGx2OjpHZXRPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3QgZW5kID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCk7CisgICAgVGx2IHRsdjsKKworICAgIHdoaWxlIChvZmZzZXQgPCBlbmQpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKFRsdiksICZ0bHYpOworCisgICAgICAgIC8vIHNraXAgZXh0ZW5kZWQgVExWCisgICAgICAgIGlmICh0bHYuR2V0TGVuZ3RoKCkgPT0ga0V4dGVuZGVkTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGggPSAwOworCisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdik7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGxlbmd0aCksICZsZW5ndGgpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihsZW5ndGgpICsgSG9zdFN3YXAxNihsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRsdi5HZXRUeXBlKCkgPT0gYVR5cGUgJiYgKG9mZnNldCArIHNpemVvZih0bHYpICsgdGx2LkdldExlbmd0aCgpKSA8PSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdikgKyB0bHYuR2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIFRsdjo6R2V0VmFsdWVPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0LCB1aW50MTZfdCAmYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIHVpbnQxNl90IG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworICAgIHVpbnQxNl90IGVuZCA9IGFNZXNzYWdlLkdldExlbmd0aCgpOworCisgICAgd2hpbGUgKG9mZnNldCA8IGVuZCkKKyAgICB7CisgICAgICAgIFRsdiB0bHY7CisgICAgICAgIHVpbnQxNl90IGxlbmd0aDsKKworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdik7CisKKyAgICAgICAgbGVuZ3RoID0gdGx2LkdldExlbmd0aCgpOworCisgICAgICAgIGlmIChsZW5ndGggPT0ga0V4dGVuZGVkTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGxlbmd0aCksICZsZW5ndGgpOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihsZW5ndGgpOworICAgICAgICAgICAgbGVuZ3RoID0gSG9zdFN3YXAxNihsZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRsdi5HZXRUeXBlKCkgPT0gYVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBhTGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IGxlbmd0aDsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NvbW1vbi90bHZzLmhwcCBiL3NyYy9jb3JlL2NvbW1vbi90bHZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQzNTFlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY29tbW9uL3RsdnMuaHBwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBNTEUgVExWcy4KKyAqLworCisjaWZuZGVmIFRMVlNfSFBQXworI2RlZmluZSBUTFZTX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqLworICAgIFRsdih2b2lkKToKKyAgICAgICAgbVR5cGUoMCksCisgICAgICAgIG1MZW5ndGgoMCkge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZSh1aW50OF90IGFUeXBlKSB7IG1UeXBlID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBhTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0b3RhbCBzaXplIGluY2x1ZGluZyBUeXBlLCBMZW5ndGgsIGFuZCBWYWx1ZSBmaWVsZHMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgc2l6ZSBpbmNsdWRlIFR5cGUsIExlbmd0aCwgYW5kIFZhbHVlIGZpZWxkcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiBzaXplb2YoVGx2KSArIG1MZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBWYWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXRWYWx1ZSh2b2lkKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFZhbHVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPih0aGlzKSArIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgVExWLgorICAgICAqCisgICAgICovCisgICAgVGx2ICpHZXROZXh0KHZvaWQpIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGx2ICo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0aGlzKSArIHNpemVvZigqdGhpcykgKyBtTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV4dCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgVExWLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGx2ICpHZXROZXh0KHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPih0aGlzKSArIHNpemVvZigqdGhpcykgKyBtTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgcmVhZHMgdGhlIHJlcXVlc3RlZCBUTFYgb3V0IG9mIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWF4TGVuZ3RoICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICAgICAqIEBwYXJhbVtvdXRdICBhVGx2ICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgVExWIHRoYXQgd2lsbCBiZSBjb3BpZWQgdG8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhVHlwZSwgdWludDE2X3QgYU1heExlbmd0aCwgVGx2ICZhVGx2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBvYnRhaW5zIHRoZSBvZmZzZXQgb2YgYSBUTFYgd2l0aGluIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtvdXRdICBhT2Zmc2V0ICAgICBBIHJlZmVyZW5jZSB0byB0aGUgb2Zmc2V0IG9mIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldE9mZnNldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhVHlwZSwgdWludDE2X3QgJmFPZmZzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIGZpbmRzIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiBhIGdpdmVuIFRMViB0eXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtvdXRdICBhT2Zmc2V0ICAgICBUaGUgb2Zmc2V0IHdoZXJlIHRoZSB2YWx1ZSBzdGFydHMuCisgICAgICogQHBhcmFtW291dF0gIGFMZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldFZhbHVlT2Zmc2V0KGNvbnN0IE1lc3NhZ2UgJmFNZXNhc2dlLCB1aW50OF90IGFUeXBlLCB1aW50MTZfdCAmYU9mZnNldCwgdWludDE2X3QgJmFMZW5ndGgpOworCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogTGVuZ3RoIHZhbHVlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtFeHRlbmRlZExlbmd0aCA9IDI1NSwgLy8vPCBFeHRlbmRlZCBMZW5ndGggdmFsdWUKKyAgICB9OworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVR5cGU7CisgICAgdWludDhfdCBtTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBFeHRlbmRlZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1MZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZW5ndGgodWludDE2X3QgYUxlbmd0aCkgeyBUbHY6OlNldExlbmd0aChrRXh0ZW5kZWRMZW5ndGgpOyBtTGVuZ3RoID0gSG9zdFN3YXAxNihhTGVuZ3RoKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1MZW5ndGg7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVExWU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jb21tb24vdHJpY2tsZV90aW1lci5jcHAgYi9zcmMvY29yZS9jb21tb24vdHJpY2tsZV90aW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxODczYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NvbW1vbi90cmlja2xlX3RpbWVyLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdHJpY2tsZSB0aW1lciBsb2dpYy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRyaWNrbGVfdGltZXIuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworVHJpY2tsZVRpbWVyOjpUcmlja2xlVGltZXIoCisgICAgVGltZXJTY2hlZHVsZXIgJmFTY2hlZHVsZXIsCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAorICAgIHVpbnQzMl90IGFSZWR1bmRhbmN5Q29uc3RhbnQsCisjZW5kaWYKKyAgICBIYW5kbGVyIGFUcmFuc21pdEhhbmRsZXIsIEhhbmRsZXIgYUludGVydmFsRXhwaXJlZEhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KQorICAgIDoKKyAgICBUaW1lcihhU2NoZWR1bGVyLCBIYW5kbGVUaW1lckZpcmVkLCBhQ29udGV4dCksCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAorICAgIGsoYVJlZHVuZGFuY3lDb25zdGFudCksCisgICAgYygwKSwKKyNlbmRpZgorICAgIEltaW4oMCksCisgICAgSW1heCgwKSwKKyAgICBtTW9kZShrTW9kZU5vcm1hbCksCisgICAgSSgwKSwKKyAgICB0KDApLAorICAgIG1QaGFzZShrUGhhc2VEb3JtYW50KSwKKyAgICBtVHJhbnNtaXRIYW5kbGVyKGFUcmFuc21pdEhhbmRsZXIpLAorICAgIG1JbnRlcnZhbEV4cGlyZWRIYW5kbGVyKGFJbnRlcnZhbEV4cGlyZWRIYW5kbGVyKQoreworfQorCitib29sIFRyaWNrbGVUaW1lcjo6SXNSdW5uaW5nKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QaGFzZSAhPSBrUGhhc2VEb3JtYW50OworfQorCit2b2lkIFRyaWNrbGVUaW1lcjo6U3RhcnQodWludDMyX3QgYUludGVydmFsTWluLCB1aW50MzJfdCBhSW50ZXJ2YWxNYXgsIE1vZGUgYU1vZGUpCit7CisgICAgYXNzZXJ0KCFJc1J1bm5pbmcoKSk7CisKKyAgICAvLyBTZXQgdGhlIGludGVydmFsIGxpbWl0cyBhbmQgbW9kZQorICAgIEltaW4gPSBhSW50ZXJ2YWxNaW47CisgICAgSW1heCA9IGFJbnRlcnZhbE1heDsKKyAgICBtTW9kZSA9IGFNb2RlOworCisgICAgLy8gSW5pdGlhbGl6ZSBJIHRvIFtJbWluLCBJbWF4XQorICAgIGlmIChJbWluID09IEltYXgpCisgICAgeworICAgICAgICBJID0gSW1pbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSSA9IEltaW4gKyBvdFBsYXRSYW5kb21HZXQoKSAlIChJbWF4IC0gSW1pbik7CisgICAgfQorCisgICAgLy8gU3RhcnQgYSBuZXcgaW50ZXJ2YWwKKyAgICBTdGFydE5ld0ludGVydmFsKCk7Cit9CisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpTdG9wKHZvaWQpCit7CisgICAgbVBoYXNlID0ga1BoYXNlRG9ybWFudDsKKyAgICBUaW1lcjo6U3RvcCgpOworfQorCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAordm9pZCBUcmlja2xlVGltZXI6OkluZGljYXRlQ29uc2lzdGVudCh2b2lkKQoreworICAgIC8vIEluY3JlbWVudCBjb3VudGVyCisgICAgYysrOworfQorI2VuZGlmCisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpJbmRpY2F0ZUluY29uc2lzdGVudCh2b2lkKQoreworICAgIC8vIE9ubHkgcmVsZXZhbnQgaWYgd2UgYXJlbid0IGFscmVhZHkgYXQgJ0knID09ICdJbWluJworICAgIGlmIChJc1J1bm5pbmcoKSAmJiBJICE9IEltaW4pCisgICAgeworICAgICAgICAvLyBSZXNldCBJIHRvIEltaW4KKyAgICAgICAgSSA9IEltaW47CisKKyAgICAgICAgLy8gU3RvcCB0aGUgZXhpc3RpbmcgdGltZXIKKyAgICAgICAgVGltZXI6OlN0b3AoKTsKKworICAgICAgICAvLyBTdGFydCBhIG5ldyBpbnRlcnZhbAorICAgICAgICBTdGFydE5ld0ludGVydmFsKCk7CisgICAgfQorfQorCit2b2lkIFRyaWNrbGVUaW1lcjo6U3RhcnROZXdJbnRlcnZhbCh2b2lkKQoreworICAgIC8vIFJlc2V0IHRoZSBjb3VudGVyIGFuZCB0aW1lciBwaGFzZQorCisjaWZkZWYgRU5BQkxFX1RSSUNLTEVfVElNRVJfU1VQUFJFU1NJT05fU1VQUE9SVAorICAgIGMgPSAwOworI2VuZGlmCisgICAgbVBoYXNlID0ga1BoYXNlVHJhbnNtaXQ7CisKKyAgICAvLyBJbml0aWFsaXplIHQKKyAgICBpZiAoSSA8IDIpCisgICAgeworICAgICAgICAvLyBJbW1lZGlhdGUgaW50ZXJ2YWwsIGp1c3Qgc2V0IHQgdG8gMAorICAgICAgICB0ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobU1vZGUgPT0ga01vZGVNUEwpCisgICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHQgdG8gcmFuZG9tIHZhbHVlIGJldHdlZW4gKDAsIEldCisgICAgICAgIHQgPSBvdFBsYXRSYW5kb21HZXQoKSAlIEk7CisgICAgfQorICAgIGVsc2UgaWYgKG1Nb2RlID09IGtNb2RlUGxhaW5UaW1lcikKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdCB0byBJLCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHJhbmRvbWl6ZWQgaW4gU3RhcnQKKyAgICAgICAgdCA9IEk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdCB0byByYW5kb20gdmFsdWUgYmV0d2VlbiAoSS8yLCBJXQorICAgICAgICB0ID0gKEkgLyAyKSArIG90UGxhdFJhbmRvbUdldCgpICUgKEkgLyAyKTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yICd0JyBtaWxsaXNlY29uZHMgZnJvbSBub3cKKyAgICBUaW1lcjo6U3RhcnQodCk7Cit9CisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpIYW5kbGVUaW1lckZpcmVkKFRpbWVyICZhVGltZXIpCit7CisgICAgc3RhdGljX2Nhc3Q8VHJpY2tsZVRpbWVyICo+KCZhVGltZXIpLT5IYW5kbGVUaW1lckZpcmVkKCk7Cit9CisKK3ZvaWQgVHJpY2tsZVRpbWVyOjpIYW5kbGVUaW1lckZpcmVkKHZvaWQpCit7CisgICAgUGhhc2UgY3VyUGhhc2UgPSBtUGhhc2U7CisgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CisKKyAgICAvLyBEZWZhdWx0IHRoZSBjdXJyZW50IHN0YXRlIHRvIERvcm1hbnQKKyAgICBtUGhhc2UgPSBrUGhhc2VEb3JtYW50OworCisgICAgc3dpdGNoIChjdXJQaGFzZSkKKyAgICB7CisgICAgLy8gV2UgaGF2ZSBqdXN0IHJlYWNoZWQgdGltZSAndCcKKyAgICBjYXNlIGtQaGFzZVRyYW5zbWl0OgorICAgIHsKKyAgICAgICAgLy8gQXJlIHdlIG5vdCB1c2luZyByZWR1bmRhbmN5IG9yIGlzIHRoZSBjb3VudGVyIHN0aWxsIGxlc3MgdGhhbiBpdD8KKyNpZmRlZiBFTkFCTEVfVFJJQ0tMRV9USU1FUl9TVVBQUkVTU0lPTl9TVVBQT1JUCisgICAgICAgIGlmIChrID09IDAgfHwgYyA8IGspCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW52b2tlIHRoZSB0cmFuc21pc3Npb24gY2FsbGJhY2sKKyAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gVHJhbnNtaXRGaXJlZCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGludGVydmFsIHRvIGVsYXBzZQorICAgICAgICBpZiAoc2hvdWxkQ29udGludWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBwbGFpbiB0aW1lciBtb2RlLCBqdXN0IHJhbmRvbWl6ZSBJIGFuZCByZXN0YXJ0IHRoZSBpbnRlcnZhbAorICAgICAgICAgICAgaWYgKG1Nb2RlID09IGtNb2RlUGxhaW5UaW1lcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIEkgdG8gW0ltaW4sIEltYXhdCisgICAgICAgICAgICAgICAgSSA9IEltaW4gKyBvdFBsYXRSYW5kb21HZXQoKSAlIChJbWF4IC0gSW1pbik7CisKKyAgICAgICAgICAgICAgICAvLyBTdGFydCBhIG5ldyBpbnRlcnZhbAorICAgICAgICAgICAgICAgIFN0YXJ0TmV3SW50ZXJ2YWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCBuZXh0IHBoYXNlIG9mIHRoZSB0aW1lcgorICAgICAgICAgICAgICAgIG1QaGFzZSA9IGtQaGFzZUludGVydmFsOworCisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHRpbWUgZm9yICdJIC0gdCcgbWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgVGltZXI6OlN0YXJ0KEkgLSB0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFdlIGhhdmUganVzdCByZWFjaGVkIHRpbWUgJ0knCisgICAgY2FzZSBrUGhhc2VJbnRlcnZhbDoKKyAgICB7CisgICAgICAgIC8vIERvdWJsZSAnSScgdG8gZ2V0IHRoZSBuZXcgaW50ZXJ2YWwgbGVuZ3RoCisgICAgICAgIHVpbnQzMl90IG5ld0kgPSBJID09IDAgPyAxIDogSSA8PCAxOworCisgICAgICAgIGlmIChuZXdJID4gSW1heCkgeyBuZXdJID0gSW1heDsgfQorCisgICAgICAgIEkgPSBuZXdJOworCisgICAgICAgIC8vIEludm9rZSB0aGUgaW50ZXJ2YWwgZXhwaXJhdGlvbiBjYWxsYmFjaworICAgICAgICBzaG91bGRDb250aW51ZSA9IEludGVydmFsRXhwaXJlZEZpcmVkKCk7CisKKyAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTdGFydCBhIG5ldyBpbnRlcnZhbAorICAgICAgICAgICAgU3RhcnROZXdJbnRlcnZhbCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwIGIvc3JjL2NvcmUvY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzczOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jb21tb24vdHJpY2tsZV90aW1lci5ocHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgdHJpY2tsZSB0aW1lciBsb2dpYy4KKyAqLworCisjaWZuZGVmIFRSSUNLTEVfVElNRVJfSFBQXworI2RlZmluZSBUUklDS0xFX1RJTUVSX0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9jb250ZXh0LmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtdGltZXItdHJpY2tsZQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIHRyaWNrbGUgdGltZXIgbG9naWMuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSB0cmlja2xlIHRpbWVyLgorICoKKyAqLworY2xhc3MgVHJpY2tsZVRpbWVyOiBwdWJsaWMgVGltZXIKK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgdGhlIG1vZGVzIG9mIG9wZXJhdGlvbiBmb3IgdGhlIFRyaWNrbGVUaW1lcgorICAgICAqLworICAgIHR5cGVkZWYgZW51bSBNb2RlCisgICAgeworICAgICAgICBrTW9kZU5vcm1hbCAgICAgPSAwLCAgLy8vPCBSdW5zIHRoZSBub3JtYWwgdHJpY2tsZSBsb2dpYy4KKyAgICAgICAga01vZGVQbGFpblRpbWVyID0gMSwgIC8vLzwgUnVucyBhIG5vcm1hbCB0aW1lciBiZXR3ZWVuIEltaW4gYW5kIEltYXguCisgICAgICAgIGtNb2RlTVBMICAgICAgICA9IDIsICAvLy88IFJ1bnMgdGhlIHRyaWNrbGUgbG9naWMgbW9kaWZpZWQgZm9yIE1QTC4KKyAgICB9IE1vZGU7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBleHBpcmVkIHRpbWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIHRyaWNrbGUgdGltZXIgc2hvdWxkIGNvbnRpbnVlIHJ1bm5pbmcuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIHRyaWNrbGUgdGltZXIgc2hvdWxkIHN0b3AgcnVubmluZy4KKyAgICAgKi8KKyAgICB0eXBlZGVmIGJvb2wgKCpIYW5kbGVyKShUcmlja2xlVGltZXIgJmFUaW1lcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSB0cmlja2xlIHRpbWVyIGluc3RhbmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjaGVkdWxlciAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lciBzY2hlZHVsZXIuCisgICAgICogQHBhcmFtW2luXSAgYVJlZHVuZGFuY3lDb25zdGFudCAgICAgIFRoZSByZWR1bmRhbmN5IGNvbnN0YW50IGZvciB0aGUgdGltZXIsIGsuCisgICAgICogQHBhcmFtW2luXSAgYVRyYW5zbWl0SGFuZGxlciAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdHJhbnNtaXNzaW9uIHNob3VsZCBvY2N1ci4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJ2YWxFeHBpcmVkSGFuZGxlciAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGludGVydmFsIGV4cGlyZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFRyaWNrbGVUaW1lcihUaW1lclNjaGVkdWxlciAmYVNjaGVkdWxlciwKKyNpZmRlZiBFTkFCTEVfVFJJQ0tMRV9USU1FUl9TVVBQUkVTU0lPTl9TVVBQT1JUCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFSZWR1bmRhbmN5Q29uc3RhbnQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgSGFuZGxlciBhVHJhbnNtaXRIYW5kbGVyLCBIYW5kbGVyIGFJbnRlcnZhbEV4cGlyZWRIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHRyaWNrbGUgdGltZXIgaW5zdGFuY2UgaXMgcnVubmluZy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSB0cmlja2xlIHRpbWVyIGlzIHJ1bm5pbmcuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIHRyaWNrbGUgdGltZXIgaXMgbm90IHJ1bm5pbmcuCisgICAgICovCisgICAgYm9vbCBJc1J1bm5pbmcodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydCB0aGUgdHJpY2tsZSB0aW1lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcnZhbE1pbiAgVGhlIG1pbmltdW0gaW50ZXJ2YWwgZm9yIHRoZSB0aW1lciwgSW1pbi4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJ2YWxNYXggIFRoZSBtYXhpbXVtIGludGVydmFsIGZvciB0aGUgdGltZXIsIEltYXguCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgICAgICAgICBUaGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodWludDMyX3QgYUludGVydmFsTWluLCB1aW50MzJfdCBhSW50ZXJ2YWxNYXgsIE1vZGUgYU1vZGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnQgdGhlIHRyaWNrbGUgdGltZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhcnRUaW1lICAgIFRoZSBzdGFydCB0aW1lLgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcnZhbE1pbiAgVGhlIG1pbmltdW0gaW50ZXJ2YWwgZm9yIHRoZSB0aW1lciwgSW1pbi4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJ2YWxNYXggIFRoZSBtYXhpbXVtIGludGVydmFsIGZvciB0aGUgdGltZXIsIEltYXguCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgICAgICAgICBUaGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnRBdCh1aW50MzJfdCBhU3RhcnRUaW1lLCB1aW50MzJfdCBhSW50ZXJ2YWxNaW4sIHVpbnQzMl90IGFJbnRlcnZhbE1heCwgTW9kZSBhTW9kZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgdHJpY2tsZSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKTsKKworI2lmZGVmIEVOQUJMRV9UUklDS0xFX1RJTUVSX1NVUFBSRVNTSU9OX1NVUFBPUlQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgdG8gdGhlIHRyaWNrbGUgdGltZXIgYSAnY29uc2lzdGVudCcgc3RhdGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluZGljYXRlQ29uc2lzdGVudCh2b2lkKTsKKyNlbmRpZgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHRvIHRoZSB0cmlja2xlIHRpbWVyIGFuICdpbmNvbnNpc3RlbnQnIHN0YXRlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbmRpY2F0ZUluY29uc2lzdGVudCh2b2lkKTsKKworcHJpdmF0ZToKKyAgICBib29sIFRyYW5zbWl0RmlyZWQodm9pZCkgeyByZXR1cm4gbVRyYW5zbWl0SGFuZGxlcigqdGhpcyk7IH0KKyAgICBib29sIEludGVydmFsRXhwaXJlZEZpcmVkKHZvaWQpIHsgcmV0dXJuIG1JbnRlcnZhbEV4cGlyZWRIYW5kbGVyID8gbUludGVydmFsRXhwaXJlZEhhbmRsZXIoKnRoaXMpIDogdHJ1ZTsgfQorCisgICAgdm9pZCBTdGFydE5ld0ludGVydmFsKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXJGaXJlZChUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyRmlyZWQodm9pZCk7CisKKyAgICAvLyBTaGFkb3cgYmFzZSBjbGFzcyBtZXRob2QgdG8gZW5zdXJlIGl0IGlzIGhpZGRlbi4KKyAgICB2b2lkIFN0YXJ0QXQodm9pZCkgeyB9CisKKyAgICB0eXBlZGVmIGVudW0gUGhhc2UKKyAgICB7CisgICAgICAgIC8vLzwgSW5kaWNhdGVzIHdlIGFyZSBjdXJyZW50bHkgbm90IHJ1bm5pbmcKKyAgICAgICAga1BoYXNlRG9ybWFudCAgICA9IDEsCisgICAgICAgIC8vLzwgSW5kaWNhdGVzIHRoYXQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgc2hvdWxkIGV2YWx1YXRlIGZvciB0cmFuc21pdCBjYWxsYmFja3MKKyAgICAgICAga1BoYXNlVHJhbnNtaXQgICA9IDIsCisgICAgICAgIC8vLzwgSW5kaWNhdGVzIHRoYXQgd2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgc2hvdWxkIHByb2Nlc3MgaW50ZXJ2YWwgZXhwaXJhdGlvbiBjYWxsYmFja3MKKyAgICAgICAga1BoYXNlSW50ZXJ2YWwgICA9IDMsCisgICAgfSBQaGFzZTsKKworI2lmZGVmIEVOQUJMRV9UUklDS0xFX1RJTUVSX1NVUFBSRVNTSU9OX1NVUFBPUlQKKyAgICAvLyBSZWR1bmRhbmN5IGNvbnN0YW50CisgICAgY29uc3QgdWludDMyX3QgazsKKworICAgIC8vIEEgY291bnRlciwga2VlcGluZyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mICJjb25zaXN0ZW50IiB0cmFuc21pc3Npb25zIHJlY2VpdmVkCisgICAgdWludDMyX3QgYzsKKyNlbmRpZgorCisgICAgLy8gTWluaW11bSBpbnRlcnZhbCBzaXplCisgICAgdWludDMyX3QgSW1pbjsKKyAgICAvLyBNYXhpbXVtIGludGVydmFsIHNpemUKKyAgICB1aW50MzJfdCBJbWF4OworICAgIC8vIFRoZSBtb2RlIG9mIG9wZXJhdGlvbgorICAgIE1vZGUgbU1vZGU7CisKKyAgICAvLyBUaGUgY3VycmVudCBpbnRlcnZhbCBzaXplIChpbiBtaWxsaXNlY29uZHMpCisgICAgdWludDMyX3QgSTsKKyAgICAvLyBUaGUgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBpbnRlcnZhbCBhdCB3aGljaCB3ZSBzaG91bGQgdHJhbnNtaXQKKyAgICB1aW50MzJfdCB0OworCisgICAgLy8gVGhlIGN1cnJlbnQgdHJpY2tsZSBwaGFzZSBmb3IgdGhlIHRpbWVyCisgICAgUGhhc2UgbVBoYXNlOworCisgICAgLy8gQ2FsbGJhY2sgdmFyaWFibGVzCisgICAgSGFuZGxlciBtVHJhbnNtaXRIYW5kbGVyOworICAgIEhhbmRsZXIgbUludGVydmFsRXhwaXJlZEhhbmRsZXI7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRSSUNLTEVfVElNRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL2Flc19jY20uY3BwIGIvc3JjL2NvcmUvY3J5cHRvL2Flc19jY20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjcxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vYWVzX2NjbS5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgQUVTLUNDTS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImFlc19jY20uaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworb3RFcnJvciBBZXNDY206OlNldEtleShjb25zdCB1aW50OF90ICphS2V5LCB1aW50MTZfdCBhS2V5TGVuZ3RoKQoreworICAgIG1FY2IuU2V0S2V5KGFLZXksIDggKiBhS2V5TGVuZ3RoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordm9pZCBBZXNDY206OkluaXQodWludDMyX3QgYUhlYWRlckxlbmd0aCwgdWludDMyX3QgYVBsYWluVGV4dExlbmd0aCwgdWludDhfdCBhVGFnTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYU5vbmNlLCB1aW50OF90IGFOb25jZUxlbmd0aCkKK3sKKyAgICBjb25zdCB1aW50OF90ICpub25jZUJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGFOb25jZSk7CisgICAgdWludDhfdCBibG9ja0xlbmd0aCA9IDA7CisgICAgdWludDMyX3QgbGVuOworICAgIHVpbnQ4X3QgTDsKKyAgICB1aW50OF90IGk7CisKKyAgICAvLyBhVGFnTGVuZ3RoIG11c3QgYmUgZXZlbgorICAgIGFUYWdMZW5ndGggJj0gfjE7CisKKyAgICBpZiAoYVRhZ0xlbmd0aCA+IHNpemVvZihtQmxvY2spKQorICAgIHsKKyAgICAgICAgYVRhZ0xlbmd0aCA9IHNpemVvZihtQmxvY2spOworICAgIH0KKworICAgIEwgPSAwOworCisgICAgZm9yIChsZW4gPSBhUGxhaW5UZXh0TGVuZ3RoOyBsZW47IGxlbiA+Pj0gOCkKKyAgICB7CisgICAgICAgIEwrKzsKKyAgICB9CisKKyAgICBpZiAoTCA8PSAxKQorICAgIHsKKyAgICAgICAgTCA9IDI7CisgICAgfQorCisgICAgaWYgKGFOb25jZUxlbmd0aCA+IDEzKQorICAgIHsKKyAgICAgICAgYU5vbmNlTGVuZ3RoID0gMTM7CisgICAgfQorCisgICAgLy8gaW5jcmVhc2UgTCB0byBtYXRjaCBub25jZSBsZW4KKyAgICBpZiAoTCA8ICgxNSAtIGFOb25jZUxlbmd0aCkpCisgICAgeworICAgICAgICBMID0gMTUgLSBhTm9uY2VMZW5ndGg7CisgICAgfQorCisgICAgLy8gZGVjcmVhc2Ugbm9uY2VMZW5ndGggdG8gbWF0Y2ggTAorICAgIGlmIChhTm9uY2VMZW5ndGggPiAoMTUgLSBMKSkKKyAgICB7CisgICAgICAgIGFOb25jZUxlbmd0aCA9IDE1IC0gTDsKKyAgICB9CisKKyAgICAvLyBzZXR1cCBpbml0aWFsIGJsb2NrCisKKyAgICAvLyB3cml0ZSBmbGFncworICAgIG1CbG9ja1swXSA9IChzdGF0aWNfY2FzdDx1aW50OF90PigoYUhlYWRlckxlbmd0aCAhPSAwKSA8PCA2KSB8CisgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgoYVRhZ0xlbmd0aCAtIDIpID4+IDEpIDw8IDMpIHwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oTCAtIDEpKTsKKworICAgIC8vIHdyaXRlIG5vbmNlCisgICAgZm9yIChpID0gMDsgaSA8IGFOb25jZUxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbUJsb2NrWzEgKyBpXSA9IG5vbmNlQnl0ZXNbaV07CisgICAgfQorCisgICAgLy8gd3JpdGUgbGVuCisgICAgbGVuID0gYVBsYWluVGV4dExlbmd0aDsKKworICAgIGZvciAoaSA9IHNpemVvZihtQmxvY2spIC0gMTsgaSA+IGFOb25jZUxlbmd0aDsgaS0tKQorICAgIHsKKyAgICAgICAgbUJsb2NrW2ldID0gbGVuICYgMHhmZjsKKyAgICAgICAgbGVuID4+PSA4OworICAgIH0KKworICAgIC8vIGVuY3J5cHQgaW5pdGlhbCBibG9jaworICAgIG1FY2IuRW5jcnlwdChtQmxvY2ssIG1CbG9jayk7CisKKyAgICAvLyBwcm9jZXNzIGhlYWRlcgorICAgIGlmIChhSGVhZGVyTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIC8vIHByb2Nlc3MgbGVuZ3RoCisgICAgICAgIGlmIChhSGVhZGVyTGVuZ3RoIDwgKDY1NTM2VSAtIDI1NlUpKQorICAgICAgICB7CisgICAgICAgICAgICBtQmxvY2tbYmxvY2tMZW5ndGgrK10gXj0gYUhlYWRlckxlbmd0aCA+PiA4OworICAgICAgICAgICAgbUJsb2NrW2Jsb2NrTGVuZ3RoKytdIF49IGFIZWFkZXJMZW5ndGggPj4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1CbG9ja1tibG9ja0xlbmd0aCsrXSBePSAweGZmOworICAgICAgICAgICAgbUJsb2NrW2Jsb2NrTGVuZ3RoKytdIF49IDB4ZmU7CisgICAgICAgICAgICBtQmxvY2tbYmxvY2tMZW5ndGgrK10gXj0gYUhlYWRlckxlbmd0aCA+PiAyNDsKKyAgICAgICAgICAgIG1CbG9ja1tibG9ja0xlbmd0aCsrXSBePSBhSGVhZGVyTGVuZ3RoID4+IDE2OworICAgICAgICAgICAgbUJsb2NrW2Jsb2NrTGVuZ3RoKytdIF49IGFIZWFkZXJMZW5ndGggPj4gODsKKyAgICAgICAgICAgIG1CbG9ja1tibG9ja0xlbmd0aCsrXSBePSBhSGVhZGVyTGVuZ3RoID4+IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBpbml0IGNvdW50ZXIKKyAgICBtQ3RyWzBdID0gTCAtIDE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYU5vbmNlTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBtQ3RyWzEgKyBpXSA9IG5vbmNlQnl0ZXNbaV07CisgICAgfQorCisgICAgZm9yIChpID0gaSArIDE7IGkgPCBzaXplb2YobUN0cik7IGkrKykKKyAgICB7CisgICAgICAgIG1DdHJbaV0gPSAwOworICAgIH0KKworICAgIG1Ob25jZUxlbmd0aCA9IGFOb25jZUxlbmd0aDsKKyAgICBtSGVhZGVyTGVuZ3RoID0gYUhlYWRlckxlbmd0aDsKKyAgICBtSGVhZGVyQ3VyID0gMDsKKyAgICBtUGxhaW5UZXh0TGVuZ3RoID0gYVBsYWluVGV4dExlbmd0aDsKKyAgICBtUGxhaW5UZXh0Q3VyID0gMDsKKyAgICBtQmxvY2tMZW5ndGggPSBibG9ja0xlbmd0aDsKKyAgICBtQ3RyTGVuZ3RoID0gc2l6ZW9mKG1DdHJQYWQpOworICAgIG1UYWdMZW5ndGggPSBhVGFnTGVuZ3RoOworfQorCit2b2lkIEFlc0NjbTo6SGVhZGVyKGNvbnN0IHZvaWQgKmFIZWFkZXIsIHVpbnQzMl90IGFIZWFkZXJMZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqaGVhZGVyQnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYUhlYWRlcik7CisKKyAgICBhc3NlcnQobUhlYWRlckN1ciArIGFIZWFkZXJMZW5ndGggPD0gbUhlYWRlckxlbmd0aCk7CisKKyAgICAvLyBwcm9jZXNzIGhlYWRlcgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhSGVhZGVyTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBpZiAobUJsb2NrTGVuZ3RoID09IHNpemVvZihtQmxvY2spKQorICAgICAgICB7CisgICAgICAgICAgICBtRWNiLkVuY3J5cHQobUJsb2NrLCBtQmxvY2spOworICAgICAgICAgICAgbUJsb2NrTGVuZ3RoID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIG1CbG9ja1ttQmxvY2tMZW5ndGgrK10gXj0gaGVhZGVyQnl0ZXNbaV07CisgICAgfQorCisgICAgbUhlYWRlckN1ciArPSBhSGVhZGVyTGVuZ3RoOworCisgICAgaWYgKG1IZWFkZXJDdXIgPT0gbUhlYWRlckxlbmd0aCkKKyAgICB7CisgICAgICAgIC8vIHByb2Nlc3MgcmVtYWluZGVyCisgICAgICAgIGlmIChtQmxvY2tMZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUVjYi5FbmNyeXB0KG1CbG9jaywgbUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIG1CbG9ja0xlbmd0aCA9IDA7CisgICAgfQorfQorCit2b2lkIEFlc0NjbTo6UGF5bG9hZCh2b2lkICpwbGFpbnRleHQsIHZvaWQgKmNpcGhlcnRleHQsIHVpbnQzMl90IGxlbiwgYm9vbCBhRW5jcnlwdCkKK3sKKyAgICB1aW50OF90ICpwbGFpbnRleHRCeXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihwbGFpbnRleHQpOworICAgIHVpbnQ4X3QgKmNpcGhlcnRleHRCeXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjaXBoZXJ0ZXh0KTsKKyAgICB1aW50OF90IGJ5dGU7CisKKyAgICBhc3NlcnQobVBsYWluVGV4dEN1ciArIGxlbiA8PSBtUGxhaW5UZXh0TGVuZ3RoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ3RyTGVuZ3RoID09IDE2KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gc2l6ZW9mKG1DdHIpIC0gMTsgaiA+IG1Ob25jZUxlbmd0aDsgai0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgrK21DdHJbal0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1FY2IuRW5jcnlwdChtQ3RyLCBtQ3RyUGFkKTsKKyAgICAgICAgICAgIG1DdHJMZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFFbmNyeXB0KQorICAgICAgICB7CisgICAgICAgICAgICBieXRlID0gcGxhaW50ZXh0Qnl0ZXNbaV07CisgICAgICAgICAgICBjaXBoZXJ0ZXh0Qnl0ZXNbaV0gPSBieXRlIF4gbUN0clBhZFttQ3RyTGVuZ3RoKytdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA9IGNpcGhlcnRleHRCeXRlc1tpXSBeIG1DdHJQYWRbbUN0ckxlbmd0aCsrXTsKKyAgICAgICAgICAgIHBsYWludGV4dEJ5dGVzW2ldID0gYnl0ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQmxvY2tMZW5ndGggPT0gc2l6ZW9mKG1CbG9jaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FY2IuRW5jcnlwdChtQmxvY2ssIG1CbG9jayk7CisgICAgICAgICAgICBtQmxvY2tMZW5ndGggPSAwOworICAgICAgICB9CisKKyAgICAgICAgbUJsb2NrW21CbG9ja0xlbmd0aCsrXSBePSBieXRlOworICAgIH0KKworICAgIG1QbGFpblRleHRDdXIgKz0gbGVuOworCisgICAgaWYgKG1QbGFpblRleHRDdXIgPj0gbVBsYWluVGV4dExlbmd0aCkKKyAgICB7CisgICAgICAgIGlmIChtQmxvY2tMZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUVjYi5FbmNyeXB0KG1CbG9jaywgbUJsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlc2V0IGNvdW50ZXIKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSBtTm9uY2VMZW5ndGggKyAxOyBpIDwgc2l6ZW9mKG1DdHIpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdHJbaV0gPSAwOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEFlc0NjbTo6RmluYWxpemUodm9pZCAqdGFnLCB1aW50OF90ICphVGFnTGVuZ3RoKQoreworICAgIHVpbnQ4X3QgKnRhZ0J5dGVzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRhZyk7CisKKyAgICBhc3NlcnQobVBsYWluVGV4dEN1ciA9PSBtUGxhaW5UZXh0TGVuZ3RoKTsKKworICAgIGlmIChtVGFnTGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIG1FY2IuRW5jcnlwdChtQ3RyLCBtQ3RyUGFkKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1UYWdMZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFnQnl0ZXNbaV0gPSBtQmxvY2tbaV0gXiBtQ3RyUGFkW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFUYWdMZW5ndGgpCisgICAgeworICAgICAgICAqYVRhZ0xlbmd0aCA9IG1UYWdMZW5ndGg7CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgQ3J5cHRvCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9hZXNfY2NtLmhwcCBiL3NyYy9jb3JlL2NyeXB0by9hZXNfY2NtLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDRjMmIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL2Flc19jY20uaHBwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcGVyZm9ybWluZyBBRVMtQ0NNIGNvbXB1dGF0aW9ucy4KKyAqLworCisjaWZuZGVmIEFFU19DQ01fSFBQXworI2RlZmluZSBBRVNfQ0NNX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjcnlwdG8vYWVzX2VjYi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQUVTIENDTSBjb21wdXRhdGlvbi4KKyAqCisgKi8KK2NsYXNzIEFlc0NjbQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcG9pbnRlciB0byB0aGUga2V5LgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlMZW5ndGggIExlbmd0aCBvZiB0aGUga2V5IGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRLZXkoY29uc3QgdWludDhfdCAqYUtleSwgdWludDE2X3QgYUtleUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQUVTIENDTSBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXJMZW5ndGggICAgIExlbmd0aCBvZiBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYVBsYWluVGV4dExlbmd0aCAgTGVuZ3RoIG9mIHBsYWludGV4dCBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhVGFnTGVuZ3RoICAgICAgICBMZW5ndGggb2YgdGFnIGluIGJ5dGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFOb25jZSAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbm9uY2UuCisgICAgICogQHBhcmFtW2luXSAgYU5vbmNlTGVuZ3RoICAgICAgTGVuZ3RoIG9mIG5vbmNlIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHVpbnQzMl90IGFIZWFkZXJMZW5ndGgsIHVpbnQzMl90IGFQbGFpblRleHRMZW5ndGgsIHVpbnQ4X3QgYVRhZ0xlbmd0aCwKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYU5vbmNlLCB1aW50OF90IGFOb25jZUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm9jZXNzZXMgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXIgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaGVhZGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFIZWFkZXJMZW5ndGggIExlbmd0aCBvZiBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhlYWRlcihjb25zdCB2b2lkICphSGVhZGVyLCB1aW50MzJfdCBhSGVhZGVyTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyB0aGUgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFQbGFpblRleHQgICBBIHBvaW50ZXIgdG8gdGhlIHBsYWludGV4dC4KKyAgICAgKiBAcGFyYW1baW5vdXRdICBhQ2lwaGVyVGV4dCAgQSBwb2ludGVyIHRvIHRoZSBjaXBoZXJ0ZXh0LgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFMZW5ndGggICAgICBQYXlsb2FkIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhRW5jcnlwdCAgICAgVFJVRSBvbiBlbmNyeXB0IGFuZCBGQUxTRSBvbiBkZWNyeXB0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBQYXlsb2FkKHZvaWQgKmFQbGFpblRleHQsIHZvaWQgKmFDaXBoZXJUZXh0LCB1aW50MzJfdCBhTGVuZ3RoLCBib29sIGFFbmNyeXB0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgdGFnLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFUYWcgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdGFnLgorICAgICAqIEBwYXJhbVtvdXRdICBhVGFnTGVuZ3RoICBMZW5ndGggb2YgdGhlIHRhZyBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRmluYWxpemUodm9pZCAqYVRhZywgdWludDhfdCAqYVRhZ0xlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgQWVzRWNiIG1FY2I7CisgICAgdWludDhfdCBtQmxvY2tbQWVzRWNiOjprQmxvY2tTaXplXTsKKyAgICB1aW50OF90IG1DdHJbQWVzRWNiOjprQmxvY2tTaXplXTsKKyAgICB1aW50OF90IG1DdHJQYWRbQWVzRWNiOjprQmxvY2tTaXplXTsKKyAgICB1aW50OF90IG1Ob25jZUxlbmd0aDsKKyAgICB1aW50MzJfdCBtSGVhZGVyTGVuZ3RoOworICAgIHVpbnQzMl90IG1IZWFkZXJDdXI7CisgICAgdWludDMyX3QgbVBsYWluVGV4dExlbmd0aDsKKyAgICB1aW50MzJfdCBtUGxhaW5UZXh0Q3VyOworICAgIHVpbnQxNl90IG1CbG9ja0xlbmd0aDsKKyAgICB1aW50MTZfdCBtQ3RyTGVuZ3RoOworICAgIHVpbnQ4X3QgbVRhZ0xlbmd0aDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQUVTX0NDTV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vYWVzX2VjYi5jcHAgYi9zcmMvY29yZS9jcnlwdG8vYWVzX2VjYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiODQ3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9hZXNfZWNiLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEFFUy1FQ0IuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJhZXNfZWNiLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCitBZXNFY2I6OkFlc0VjYigpCit7CisgICAgbWJlZHRsc19hZXNfaW5pdCgmbUNvbnRleHQpOworfQorCit2b2lkIEFlc0VjYjo6U2V0S2V5KGNvbnN0IHVpbnQ4X3QgKmFLZXksIHVpbnQxNl90IGFLZXlMZW5ndGgpCit7CisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYygmbUNvbnRleHQsIGFLZXksIGFLZXlMZW5ndGgpOworfQorCit2b2lkIEFlc0VjYjo6RW5jcnlwdChjb25zdCB1aW50OF90IGFJbnB1dFtrQmxvY2tTaXplXSwgdWludDhfdCBhT3V0cHV0W2tCbG9ja1NpemVdKQoreworICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYigmbUNvbnRleHQsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGFJbnB1dCwgYU91dHB1dCk7Cit9CisKK0Flc0VjYjo6fkFlc0VjYigpCit7CisgICAgbWJlZHRsc19hZXNfZnJlZSgmbUNvbnRleHQpOworfQorCit9ICAvLyBuYW1lc3BhY2UgQ3J5cHRvCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9hZXNfZWNiLmhwcCBiL3NyYy9jb3JlL2NyeXB0by9hZXNfZWNiLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzIzY2QwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL2Flc19lY2IuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcGVyZm9ybWluZyBBRVMtRUNCIGNvbXB1dGF0aW9ucy4KKyAqLworCisjaWZuZGVmIEFFU19FQ0JfSFBQXworI2RlZmluZSBBRVNfRUNCX0hQUF8KKworI2luY2x1ZGUgPG1iZWR0bHMvYWVzLmg+CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQUVTIEVDQiBjb21wdXRhdGlvbi4KKyAqCisgKi8KK2NsYXNzIEFlc0VjYgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtCbG9ja1NpemUgPSAxNiwgIC8vLzwgQUVTLTEyOCBibG9jayBzaXplIChieXRlcykuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgdGhlIG1iZWR0bHNfYWVzX2NvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICBBZXNFY2IoKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IgdG8gZnJlZSB0aGUgbWJlZHRsc19hZXNfY29udGV4dC4KKyAgICAgKgorICAgICAqLworICAgIH5BZXNFY2IoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGtleS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXkgICAgICAgIEEgcG9pbnRlciB0byB0aGUga2V5LgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlMZW5ndGggIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXkoY29uc3QgdWludDhfdCAqYUtleSwgdWludDE2X3QgYUtleUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmNyeXB0cyBkYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFJbnB1dCAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICAgICAqIEBwYXJhbVtvdXRdICBhT3V0cHV0ICBBIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEVuY3J5cHQoY29uc3QgdWludDhfdCBhSW5wdXRba0Jsb2NrU2l6ZV0sIHVpbnQ4X3QgYU91dHB1dFtrQmxvY2tTaXplXSk7CisKK3ByaXZhdGU6CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBtQ29udGV4dDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQUVTX0VDQl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vaG1hY19zaGEyNTYuY3BwIGIvc3JjL2NvcmUvY3J5cHRvL2htYWNfc2hhMjU2LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODU3ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL2htYWNfc2hhMjU2LmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEhNQUMgU0hBLTI1Ni4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImhtYWNfc2hhMjU2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCitIbWFjU2hhMjU2OjpIbWFjU2hhMjU2KCkKK3sKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRJbmZvID0gTlVMTDsKKyAgICBtYmVkdGxzX21kX2luaXQoJm1Db250ZXh0KTsKKyAgICBtZEluZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKE1CRURUTFNfTURfU0hBMjU2KTsKKyAgICBtYmVkdGxzX21kX3NldHVwKCZtQ29udGV4dCwgbWRJbmZvLCAxKTsKK30KKworSG1hY1NoYTI1Njo6fkhtYWNTaGEyNTYoKQoreworICAgIG1iZWR0bHNfbWRfZnJlZSgmbUNvbnRleHQpOworfQorCit2b2lkIEhtYWNTaGEyNTY6OlN0YXJ0KGNvbnN0IHVpbnQ4X3QgKmFLZXksIHVpbnQxNl90IGFLZXlMZW5ndGgpCit7CisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cygmbUNvbnRleHQsIGFLZXksIGFLZXlMZW5ndGgpOworfQorCit2b2lkIEhtYWNTaGEyNTY6OlVwZGF0ZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoJm1Db250ZXh0LCBhQnVmLCBhQnVmTGVuZ3RoKTsKK30KKwordm9pZCBIbWFjU2hhMjU2OjpGaW5pc2godWludDhfdCBhSGFzaFtrSGFzaFNpemVdKQoreworICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goJm1Db250ZXh0LCBhSGFzaCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDcnlwdG8KK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL2htYWNfc2hhMjU2LmhwcCBiL3NyYy9jb3JlL2NyeXB0by9obWFjX3NoYTI1Ni5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhMmViNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9obWFjX3NoYTI1Ni5ocHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBwZXJmb3JtaW5nIEhNQUMgU0hBLTI1NiBjb21wdXRhdGlvbnMuCisgKi8KKworI2lmbmRlZiBITUFDX1NIQTI1Nl9IUFBfCisjZGVmaW5lIEhNQUNfU0hBMjU2X0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxtYmVkdGxzL21kLmg+CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgQ3J5cHRvIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNlY3VyaXR5CisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSE1BQyBTSEEtMjU2IGNvbXB1dGF0aW9uLgorICoKKyAqLworY2xhc3MgSG1hY1NoYTI1NgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtIYXNoU2l6ZSA9IDMyLCAgLy8vPCBTSEEtMjU2IGhhc2ggc2l6ZSAoYnl0ZXMpCisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIGZvciBpbml0aWFsaXphdGlvbiBvZiBtYmVkdGxzX21kX2NvbnRleHRfdC4KKyAgICAgKgorICAgICAqLworICAgIEhtYWNTaGEyNTYoKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IgZm9yIGZyZWVpbmcgb2YgbWJlZHRsc19tZF9jb250ZXh0X3QuCisgICAgICoKKyAgICAgKi8KKyAgICB+SG1hY1NoYTI1NigpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUga2V5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBrZXkuCisgICAgICogQHBhcmFtW2luXSAgYUtleUxlbmd0aCAgVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0YXJ0KGNvbnN0IHVpbnQ4X3QgKmFLZXksIHVpbnQxNl90IGFLZXlMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5wdXRzIGJ5dGVzIGludG8gdGhlIEhNQUMgY29tcHV0YXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVmICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIEBwIGFCdWYgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhSGFzaCAgQSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBGaW5pc2godWludDhfdCBhSGFzaFtrSGFzaFNpemVdKTsKKworcHJpdmF0ZToKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtQ29udGV4dDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSE1BQ19TSEEyNTZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL21iZWR0bHMuY3BwIGIvc3JjL2NvcmUvY3J5cHRvL21iZWR0bHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWZmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vbWJlZHRscy5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdXNlIG9mIG1iZWRUTFMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJtYmVkdGxzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCitNYmVkVGxzOjpNYmVkVGxzKHZvaWQpCit7CisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQobU1lbW9yeSwgc2l6ZW9mKG1NZW1vcnkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIENyeXB0bworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vbWJlZHRscy5ocHAgYi9zcmMvY29yZS9jcnlwdG8vbWJlZHRscy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhZTExNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9tYmVkdGxzLmhwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdXNpbmcgbWJlZFRMUy4KKyAqLworCisjaWZuZGVmIE9UX01CRURUTFNfSFBQXworI2RlZmluZSBPVF9NQkVEVExTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBDcnlwdG8geworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtc2VjdXJpdHkKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBtYmVkVExTIG1lbW9yeS4KKyAqCisgKi8KK2NsYXNzIE1iZWRUbHMKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKyAgICAgICAga01lbW9yeVNpemUgPSBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRSwgICAgICAgICAgLy8vPCBTaXplIG9mIG1lbW9yeSBidWZmZXIgKGJ5dGVzKS4KKyNlbHNlCisgICAgICAgIGtNZW1vcnlTaXplID0gT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkVfTk9fRFRMUywgIC8vLzwgU2l6ZSBvZiBtZW1vcnkgYnVmZmVyIChieXRlcykuCisjZW5kaWYKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWJlZFRscyh2b2lkKTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBjaGFyIG1NZW1vcnlba01lbW9yeVNpemVdOworfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgQ3J5cHRvCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBPVF9NQkVEVExTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9wYmtkZjJfY21hYy5jcHAgYi9zcmMvY29yZS9jcnlwdG8vcGJrZGYyX2NtYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjc2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vcGJrZGYyX2NtYWMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgUEJLREYyIHVzaW5nIEFFUy1DTUFDLVBSRi0xMjgKKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInBia2RmMl9jbWFjLmgiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8bWJlZHRscy9jbWFjLmg+CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKwordm9pZCBvdFBia2RmMkNtYWMoCisgICAgY29uc3QgdWludDhfdCAqYVBhc3N3b3JkLCB1aW50MTZfdCBhUGFzc3dvcmRMZW4sCisgICAgY29uc3QgdWludDhfdCAqYVNhbHQsIHVpbnQxNl90IGFTYWx0TGVuLAorICAgIHVpbnQzMl90IGFJdGVyYXRpb25Db3VudGVyLCB1aW50MTZfdCBhS2V5TGVuLAorICAgIHVpbnQ4X3QgKmFLZXkpCit7CisgICAgdWludDMyX3QgYmxvY2tDb3VudGVyID0gMDsKKyAgICB1aW50MTZfdCB1c2VMZW4gPSAwOworICAgIHVpbnQxNl90IHByZkJsb2NrTGVuID0gTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVg7CisgICAgdWludDhfdCBwcmZJbnB1dFtPVF9QQktERjJfU0FMVF9NQVhfTEVOICsgNF07IC8vIFNhbHQgfHwgSU5UKCksIGZvciBVMSBjYWxjdWxhdGlvbgorICAgIHVpbnQ4X3QgcHJmT3V0cHV0W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1aW50OF90IGtleUJsb2NrW01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1aW50OF90ICprZXkgPSBhS2V5OworICAgIHVpbnQxNl90IGtleUxlbiA9IGFLZXlMZW47CisKKyAgICB3aGlsZSAoa2V5TGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KHByZklucHV0LCBhU2FsdCwgYVNhbHRMZW4pOworCisgICAgICAgIGJsb2NrQ291bnRlcisrOworICAgICAgICBwcmZJbnB1dFthU2FsdExlbiArIDBdID0gKHVpbnQ4X3QpKGJsb2NrQ291bnRlciA+PiAyNCk7CisgICAgICAgIHByZklucHV0W2FTYWx0TGVuICsgMV0gPSAodWludDhfdCkoYmxvY2tDb3VudGVyID4+IDE2KTsKKyAgICAgICAgcHJmSW5wdXRbYVNhbHRMZW4gKyAyXSA9ICh1aW50OF90KShibG9ja0NvdW50ZXIgPj4gOCk7CisgICAgICAgIHByZklucHV0W2FTYWx0TGVuICsgM10gPSAodWludDhfdCkoYmxvY2tDb3VudGVyKTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgVV8xCisgICAgICAgIG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOChhUGFzc3dvcmQsIGFQYXNzd29yZExlbiwgcHJmSW5wdXQsIGFTYWx0TGVuICsgNCwgcHJmT3V0cHV0KTsKKyAgICAgICAgbWVtY3B5KGtleUJsb2NrLCBwcmZPdXRwdXQsIHByZkJsb2NrTGVuKTsKKworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgYUl0ZXJhdGlvbkNvdW50ZXI7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHByZklucHV0LCBwcmZPdXRwdXQsIHByZkJsb2NrTGVuKTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIFVfaQorICAgICAgICAgICAgbWJlZHRsc19hZXNfY21hY19wcmZfMTI4KGFQYXNzd29yZCwgYVBhc3N3b3JkTGVuLCBwcmZJbnB1dCwgcHJmQmxvY2tMZW4sIHByZk91dHB1dCk7CisKKyAgICAgICAgICAgIC8vIHhvcgorICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IHByZkJsb2NrTGVuOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5QmxvY2tbal0gXj0gcHJmT3V0cHV0W2pdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdXNlTGVuID0gKGtleUxlbiA8IHByZkJsb2NrTGVuKSA/IGtleUxlbiA6IHByZkJsb2NrTGVuOworICAgICAgICBtZW1jcHkoa2V5LCBrZXlCbG9jaywgdXNlTGVuKTsKKyAgICAgICAga2V5ICs9IHVzZUxlbjsKKyAgICAgICAga2V5TGVuIC09IHVzZUxlbjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2NyeXB0by9wYmtkZjJfY21hYy5oIGIvc3JjL2NvcmUvY3J5cHRvL3Bia2RmMl9jbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MWIwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2NyeXB0by9wYmtkZjJfY21hYy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIEBicmllZgorICogIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBQQktERjIgdXNpbmcgQ01BQyBDIEFQSXMuCisgKi8KKworI2lmbmRlZiBQQktERjJfQ01BQ19IXworI2RlZmluZSBQQktERjJfQ01BQ19IXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRib29sLmgiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIE9UX1BCS0RGMl9TQUxUX01BWF9MRU4gMzAgIC8vIHNhbHQgcHJlZml4ICg2KSArIGV4dGVuZGVkIHBhbmlkICg4KSArIG5ldHdvcmsgbmFtZSAoMTYpCisKKy8qKgorICogVGhpcyBtZXRob2QgcGVyZm9ybSBQS0NTIzUgUEJLREYyIHVzaW5nIENNQUMgKEFFUy1DTUFDLVBSRi0xMjgpLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIGFQYXNzd29yZCAgICAgICAgICBQYXNzd29yZCB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGtleS4KKyAqIEBwYXJhbVtpbl0gICAgIGFQYXNzd29yZExlbiAgICAgICBMZW5ndGggb2YgcGFzc3dvcmQuCisgKiBAcGFyYW1baW5dICAgICBhU2FsdCAgICAgICAgICAgICAgU2FsdCB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIGtleS4KKyAqIEBwYXJhbVtpbl0gICAgIGFTYWx0TGVuICAgICAgICAgICBMZW5ndGggb2Ygc2FsdC4KKyAqIEBwYXJhbVtpbl0gICAgIGFJdGVyYXRpb25Db3VudGVyICBJdGVyYXRpb24gY291bnQuCisgKiBAcGFyYW1baW5dICAgICBhS2V5TGVuICAgICAgICAgICAgTGVuZ3RoIG9mIGdlbmVyYXRlZCBrZXkgaW4gYnl0ZXMuCisgKiBAcGFyYW1bb3V0XSAgICBhS2V5ICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBnZW5lcmF0ZWQga2V5LgorICoKKyAqLwordm9pZCBvdFBia2RmMkNtYWMoCisgICAgY29uc3QgdWludDhfdCAqYVBhc3N3b3JkLCB1aW50MTZfdCBhUGFzc3dvcmRMZW4sCisgICAgY29uc3QgdWludDhfdCAqYVNhbHQsIHVpbnQxNl90IGFTYWx0TGVuLAorICAgIHVpbnQzMl90IGFJdGVyYXRpb25Db3VudGVyLCB1aW50MTZfdCBhS2V5TGVuLAorICAgIHVpbnQ4X3QgKmFLZXkpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFBCS0RGMl9DTUFDX0hfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9jcnlwdG8vc2hhMjU2LmNwcCBiL3NyYy9jb3JlL2NyeXB0by9zaGEyNTYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzhmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9jcnlwdG8vc2hhMjU2LmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFNIQS0yNTYuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJzaGEyNTYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENyeXB0byB7CisKK1NoYTI1Njo6U2hhMjU2KCkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9pbml0KCZtQ29udGV4dCk7Cit9CisKK1NoYTI1Njo6flNoYTI1NigpCit7CisgICAgbWJlZHRsc19zaGEyNTZfZnJlZSgmbUNvbnRleHQpOworfQorCit2b2lkIFNoYTI1Njo6U3RhcnQodm9pZCkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoJm1Db250ZXh0LCAwKTsKK30KKwordm9pZCBTaGEyNTY6OlVwZGF0ZShjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSgmbUNvbnRleHQsIGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIFNoYTI1Njo6RmluaXNoKHVpbnQ4X3QgYUhhc2hba0hhc2hTaXplXSkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goJm1Db250ZXh0LCBhSGFzaCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBDcnlwdG8KK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvY3J5cHRvL3NoYTI1Ni5ocHAgYi9zcmMvY29yZS9jcnlwdG8vc2hhMjU2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI5MmE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvY3J5cHRvL3NoYTI1Ni5ocHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBwZXJmb3JtaW5nIFNIQS0yNTYgY29tcHV0YXRpb25zLgorICovCisKKyNpZm5kZWYgU0hBMjU2X0hQUF8KKyNkZWZpbmUgU0hBMjU2X0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKKyNpbmNsdWRlIDxtYmVkdGxzL3NoYTI1Ni5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIENyeXB0byB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1zZWN1cml0eQorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNIQS0yNTYgY29tcHV0YXRpb24uCisgKgorICovCitjbGFzcyBTaGEyNTYKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrSGFzaFNpemUgPSAzMiwgIC8vLzwgU0hBLTI1NiBoYXNoIHNpemUgKGJ5dGVzKQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgaW5pdGlhbGl6aW5nIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICBTaGEyNTYoKTsKKworICAgIC8qKgorICAgICAqIERlc3RydWN0b3IgZm9yIGZyZWVpbmcgbWJlZHRsc19zaGEyNTZfY29udGV4dC4KKyAgICAgKgorICAgICAqLworICAgIH5TaGEyNTYoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgU0hBLTI1NiBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnB1dHMgYnl0ZXMgaW50byB0aGUgU0hBLTI1NiBjb21wdXRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWZMZW5ndGggIFRoZSBsZW5ndGggb2YgQHAgYUJ1ZiBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFIYXNoICBBIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZpbmlzaCh1aW50OF90IGFIYXNoW2tIYXNoU2l6ZV0pOworCitwcml2YXRlOgorICAgIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgbUNvbnRleHQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBDcnlwdG8KK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFNIQTI1Nl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjLmNwcCBiL3NyYy9jb3JlL21hYy9tYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNGY4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjLmNwcApAQCAtMCwwICsxLDE4NDQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIHN1YnNldCBvZiBJRUVFIDgwMi4xNS40IHByaW1pdGl2ZXMgcmVxdWlyZWQgZm9yIFRocmVhZC4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJtYWMudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1hYy5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3VzZWMtYWxhcm0uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vYWVzX2NjbS5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL3NoYTI1Ni5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2xpbmtfcXVhbGl0eS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXA2NDsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNYWMgeworCitzdGF0aWMgY29uc3QgdWludDhfdCBzTW9kZTJLZXlbXSA9Cit7CisgICAgMHg3OCwgMHg1OCwgMHgxNiwgMHg4NiwgMHhmZCwgMHhiNCwgMHg1OCwgMHgwZiwgMHhiMCwgMHg5MiwgMHg1NCwgMHg2YSwgMHhlYywgMHhiZCwgMHgxNSwgMHg2NgorfTsKKworc3RhdGljIGNvbnN0IG90RXh0QWRkcmVzcyBzTW9kZTJFeHRBZGRyZXNzID0KK3sKKyAgICB7IDB4MzUsIDB4MDYsIDB4ZmUsIDB4YjgsIDB4MjMsIDB4ZDQsIDB4ODcsIDB4MTIgfSwKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHNFeHRlbmRlZFBhbmlkSW5pdFtdID0gezB4ZGUsIDB4YWQsIDB4MDAsIDB4YmUsIDB4ZWYsIDB4MDAsIDB4Y2EsIDB4ZmV9Oworc3RhdGljIGNvbnN0IGNoYXIgc05ldHdvcmtOYW1lSW5pdFtdID0gIk9wZW5UaHJlYWQiOworCisjaWZkZWYgX1dJTjMyCitjb25zdCB1aW50MzJfdCBrTWluQmFja29mZlN1bSA9IGtNaW5CYWNrb2ZmICsgKGtVbml0QmFja29mZlBlcmlvZCAqT1RfUkFESU9fU1lNQk9MX1RJTUUgKiAoMSA8PCBrTWluQkUpKSAvIDEwMDA7Citjb25zdCB1aW50MzJfdCBrTWF4QmFja29mZlN1bSA9IGtNaW5CYWNrb2ZmICsgKGtVbml0QmFja29mZlBlcmlvZCAqT1RfUkFESU9fU1lNQk9MX1RJTUUgKiAoMSA8PCBrTWF4QkUpKSAvIDEwMDA7CitzdGF0aWNfYXNzZXJ0KGtNaW5CYWNrb2ZmU3VtID4gMCwgIlRoZSBtaW4gYmFja29mZiB2YWx1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8hIik7CisjZW5kaWYKKwordm9pZCBNYWM6OlN0YXJ0Q3NtYUJhY2tvZmYodm9pZCkKK3sKKyAgICBpZiAoUmFkaW9TdXBwb3J0c0NzbWFCYWNrb2ZmKCkpCisgICAgeworICAgICAgICAvLyBJZiB0aGUgcmFkaW8gc3VwcG9ydHMgQ1NNQSBiYWNrIG9mZiBsb2dpYywgaW1tZWRpYXRlbHkgc2NoZWR1bGUgdGhlIHNlbmQuCisgICAgICAgIEhhbmRsZUJlZ2luVHJhbnNtaXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYmFja29mZkV4cG9uZW50ID0ga01pbkJFICsgbVRyYW5zbWl0QXR0ZW1wdHMgKyBtQ3NtYUF0dGVtcHRzOworICAgICAgICB1aW50MzJfdCBiYWNrb2ZmOworCisgICAgICAgIGlmIChiYWNrb2ZmRXhwb25lbnQgPiBrTWF4QkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhY2tvZmZFeHBvbmVudCA9IGtNYXhCRTsKKyAgICAgICAgfQorCisgICAgICAgIGJhY2tvZmYgPSAob3RQbGF0UmFuZG9tR2V0KCkgJSAoMVVMIDw8IGJhY2tvZmZFeHBvbmVudCkpOworICAgICAgICBiYWNrb2ZmICo9IChzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1VuaXRCYWNrb2ZmUGVyaW9kKSAqIE9UX1JBRElPX1NZTUJPTF9USU1FKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9QTEFURk9STV9VU0VDX0JBQ0tPRkZfVElNRVIKKyAgICAgICAgb3RQbGF0VXNlY0FsYXJtU3RhcnRBdChHZXRJbnN0YW5jZSgpLCBvdFBsYXRVc2VjQWxhcm1HZXROb3coKSwgYmFja29mZiwgJk1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdCwgdGhpcyk7CisjZWxzZSAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSCisgICAgICAgIG1CYWNrb2ZmVGltZXIuU3RhcnQoYmFja29mZiAvIDEwMDBVTCk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICAgIH0KK30KKworTWFjOjpNYWMoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbU1hY1RpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNYWM6OkhhbmRsZU1hY1RpbWVyLCB0aGlzKSwKKyNpZiAhT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICAgIG1CYWNrb2ZmVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJk1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdCwgdGhpcyksCisjZW5kaWYKKyAgICBtUmVjZWl2ZVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZNYWM6OkhhbmRsZVJlY2VpdmVUaW1lciwgdGhpcyksCisgICAgbVNob3J0QWRkcmVzcyhrU2hvcnRBZGRySW52YWxpZCksCisgICAgbVBhbklkKGtQYW5JZEJyb2FkY2FzdCksCisgICAgbUNoYW5uZWwoT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSEFOTkVMKSwKKyAgICBtTWF4VHJhbnNtaXRQb3dlcihPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUiksCisgICAgbVNlbmRIZWFkKE5VTEwpLAorICAgIG1TZW5kVGFpbChOVUxMKSwKKyAgICBtUmVjZWl2ZUhlYWQoTlVMTCksCisgICAgbVJlY2VpdmVUYWlsKE5VTEwpLAorICAgIG1PcGVyYXRpb24oa09wZXJhdGlvbk5vbmUpLAorICAgIG1CZWFjb25TZXF1ZW5jZShzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSkpLAorICAgIG1EYXRhU2VxdWVuY2Uoc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpKSwKKyAgICBtUnhPbldoZW5JZGxlKGZhbHNlKSwKKyAgICBtQ3NtYUF0dGVtcHRzKDApLAorICAgIG1UcmFuc21pdEF0dGVtcHRzKDApLAorICAgIG1UcmFuc21pdEJlYWNvbihmYWxzZSksCisgICAgbUJlYWNvbnNFbmFibGVkKGZhbHNlKSwKKyAgICBtUGVuZGluZ1NjYW5SZXF1ZXN0KGtTY2FuVHlwZU5vbmUpLAorICAgIG1TY2FuQ2hhbm5lbChPVF9SQURJT19DSEFOTkVMX01JTiksCisgICAgbVNjYW5DaGFubmVscygweGZmKSwKKyAgICBtU2NhbkR1cmF0aW9uKDApLAorICAgIG1TY2FuQ29udGV4dChOVUxMKSwKKyAgICBtQWN0aXZlU2NhbkhhbmRsZXIoTlVMTCksIC8vIGluaXRpYWxpemUgbUFjdGl2ZVNjYW5IYW5kbGVyIGFuZCBtRW5lcmd5U2NhbkhhbmRsZXIgdW5pb24KKyAgICBtRW5lcmd5U2NhbkN1cnJlbnRNYXhSc3NpKGtJbnZhbGlkUnNzaVZhbHVlKSwKKyAgICBtRW5lcmd5U2NhblNhbXBsZVJzc2lUYXNrKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGFza2xldFNjaGVkdWxlciwgJk1hYzo6SGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2ksIHRoaXMpLAorICAgIG1QY2FwQ2FsbGJhY2soTlVMTCksCisgICAgbVBjYXBDYWxsYmFja0NvbnRleHQoTlVMTCksCisgICAgbVdoaXRlbGlzdCgpLAorICAgIG1CbGFja2xpc3QoKSwKKyAgICBtVHhGcmFtZShzdGF0aWNfY2FzdDxGcmFtZSAqPihvdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyKGFUaHJlYWROZXRpZi5HZXRJbnN0YW5jZSgpKSkpLAorICAgIG1LZXlJZE1vZGUyRnJhbWVDb3VudGVyKDApLAorI2lmIE9QRU5USFJFQURfQ09ORklHX1NUQVlfQVdBS0VfQkVUV0VFTl9GUkFHTUVOVFMKKyAgICBtRGVsYXlTbGVlcChmYWxzZSksCisjZW5kaWYKKyAgICBtV2FpdGluZ0ZvckRhdGEoZmFsc2UpCit7CisgICAgR2VuZXJhdGVFeHRBZGRyZXNzKCZtRXh0QWRkcmVzcyk7CisKKyAgICBtZW1zZXQoJm1Db3VudGVycywgMCwgc2l6ZW9mKG90TWFjQ291bnRlcnMpKTsKKworICAgIFNldEV4dGVuZGVkUGFuSWQoc0V4dGVuZGVkUGFuaWRJbml0KTsKKyAgICBTZXROZXR3b3JrTmFtZShzTmV0d29ya05hbWVJbml0KTsKKyAgICBTZXRQYW5JZChtUGFuSWQpOworICAgIFNldEV4dEFkZHJlc3MobUV4dEFkZHJlc3MpOworICAgIFNldFNob3J0QWRkcmVzcyhtU2hvcnRBZGRyZXNzKTsKKworICAgIG90UGxhdFJhZGlvRW5hYmxlKEdldEluc3RhbmNlKCkpOworfQorCitvdEVycm9yIE1hYzo6QWN0aXZlU2Nhbih1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCBBY3RpdmVTY2FuSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTY2FuKGtTY2FuVHlwZUFjdGl2ZSwgYVNjYW5DaGFubmVscywgYVNjYW5EdXJhdGlvbiwgYUNvbnRleHQpKTsKKyAgICBtQWN0aXZlU2NhbkhhbmRsZXIgPSBhSGFuZGxlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWFjOjpFbmVyZ3lTY2FuKHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIHVpbnQxNl90IGFTY2FuRHVyYXRpb24sIEVuZXJneVNjYW5IYW5kbGVyIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNjYW4oa1NjYW5UeXBlRW5lcmd5LCBhU2NhbkNoYW5uZWxzLCBhU2NhbkR1cmF0aW9uLCBhQ29udGV4dCkpOworICAgIG1FbmVyZ3lTY2FuSGFuZGxlciA9IGFIYW5kbGVyOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNYWM6OlNjYW4oU2NhblR5cGUgYVNjYW5UeXBlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCgobU9wZXJhdGlvbiAhPSBrT3BlcmF0aW9uQWN0aXZlU2NhbikgJiYgKG1PcGVyYXRpb24gIT0ga09wZXJhdGlvbkVuZXJneVNjYW4pICYmCisgICAgICAgICAgICAgICAgIChtUGVuZGluZ1NjYW5SZXF1ZXN0ID09IGtTY2FuVHlwZU5vbmUpLCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCisgICAgbVNjYW5Db250ZXh0ID0gYUNvbnRleHQ7CisgICAgbVNjYW5DaGFubmVscyA9IChhU2NhbkNoYW5uZWxzID09IDApID8gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtTY2FuQ2hhbm5lbHNBbGwpIDogYVNjYW5DaGFubmVsczsKKyAgICBtU2NhbkR1cmF0aW9uID0gKGFTY2FuRHVyYXRpb24gPT0gMCkgPyBzdGF0aWNfY2FzdDx1aW50MTZfdD4oa1NjYW5EdXJhdGlvbkRlZmF1bHQpIDogYVNjYW5EdXJhdGlvbjsKKworICAgIG1TY2FuQ2hhbm5lbCA9IE9UX1JBRElPX0NIQU5ORUxfTUlOOworICAgIG1TY2FuQ2hhbm5lbHMgPj49IE9UX1JBRElPX0NIQU5ORUxfTUlOOworCisgICAgd2hpbGUgKChtU2NhbkNoYW5uZWxzICYgMSkgPT0gMCkKKyAgICB7CisgICAgICAgIG1TY2FuQ2hhbm5lbHMgPj49IDE7CisgICAgICAgIG1TY2FuQ2hhbm5lbCsrOworICAgIH0KKworICAgIG1QZW5kaW5nU2NhblJlcXVlc3QgPSBhU2NhblR5cGU7CisgICAgU3RhcnRPcGVyYXRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgTWFjOjpJc0FjdGl2ZVNjYW5JblByb2dyZXNzKHZvaWQpCit7CisgICAgcmV0dXJuIChtT3BlcmF0aW9uID09IGtPcGVyYXRpb25BY3RpdmVTY2FuKSB8fCAobVBlbmRpbmdTY2FuUmVxdWVzdCA9PSBrU2NhblR5cGVBY3RpdmUpOworfQorCitib29sIE1hYzo6SXNFbmVyZ3lTY2FuSW5Qcm9ncmVzcyh2b2lkKQoreworICAgIHJldHVybiAobU9wZXJhdGlvbiA9PSBrT3BlcmF0aW9uRW5lcmd5U2NhbikgfHwgKG1QZW5kaW5nU2NhblJlcXVlc3QgPT0ga1NjYW5UeXBlRW5lcmd5KTsKK30KKworYm9vbCBNYWM6OklzSW5UcmFuc21pdFN0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuIChtT3BlcmF0aW9uID09IGtPcGVyYXRpb25UcmFuc21pdERhdGEpIHx8IChtT3BlcmF0aW9uID09IGtPcGVyYXRpb25UcmFuc21pdEJlYWNvbik7Cit9CisKK290RXJyb3IgTWFjOjpDb252ZXJ0QmVhY29uVG9BY3RpdmVTY2FuUmVzdWx0KEZyYW1lICphQmVhY29uRnJhbWUsIG90QWN0aXZlU2NhblJlc3VsdCAmYVJlc3VsdCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBBZGRyZXNzIGFkZHJlc3M7CisgICAgQmVhY29uICpiZWFjb24gPSBOVUxMOworICAgIEJlYWNvblBheWxvYWQgKmJlYWNvblBheWxvYWQgPSBOVUxMOworICAgIHVpbnQ4X3QgcGF5bG9hZExlbmd0aDsKKyAgICBjaGFyIHN0cmluZ0J1ZmZlcltCZWFjb25QYXlsb2FkOjprSW5mb1N0cmluZ1NpemVdOworCisgICAgbWVtc2V0KCZhUmVzdWx0LCAwLCBzaXplb2Yob3RBY3RpdmVTY2FuUmVzdWx0KSk7CisKKyAgICBWZXJpZnlPckV4aXQoYUJlYWNvbkZyYW1lICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIFZlcmlmeU9yRXhpdChhQmVhY29uRnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lQmVhY29uLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYUJlYWNvbkZyYW1lLT5HZXRTcmNBZGRyKGFkZHJlc3MpKTsKKyAgICBWZXJpZnlPckV4aXQoYWRkcmVzcy5tTGVuZ3RoID09IHNpemVvZihhZGRyZXNzLm1FeHRBZGRyZXNzKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgbWVtY3B5KCZhUmVzdWx0Lm1FeHRBZGRyZXNzLCAmYWRkcmVzcy5tRXh0QWRkcmVzcywgc2l6ZW9mKGFSZXN1bHQubUV4dEFkZHJlc3MpKTsKKworICAgIGFCZWFjb25GcmFtZS0+R2V0U3JjUGFuSWQoYVJlc3VsdC5tUGFuSWQpOworICAgIGFSZXN1bHQubUNoYW5uZWwgPSBhQmVhY29uRnJhbWUtPkdldENoYW5uZWwoKTsKKyAgICBhUmVzdWx0Lm1Sc3NpID0gYUJlYWNvbkZyYW1lLT5HZXRQb3dlcigpOworICAgIGFSZXN1bHQubUxxaSA9IGFCZWFjb25GcmFtZS0+R2V0THFpKCk7CisKKyAgICBwYXlsb2FkTGVuZ3RoID0gYUJlYWNvbkZyYW1lLT5HZXRQYXlsb2FkTGVuZ3RoKCk7CisKKyAgICBiZWFjb24gPSByZWludGVycHJldF9jYXN0PEJlYWNvbiAqPihhQmVhY29uRnJhbWUtPkdldFBheWxvYWQoKSk7CisgICAgYmVhY29uUGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmVhY29uUGF5bG9hZCAqPihiZWFjb24tPkdldFBheWxvYWQoKSk7CisKKyAgICBpZiAoKHBheWxvYWRMZW5ndGggPj0gKHNpemVvZigqYmVhY29uKSArIHNpemVvZigqYmVhY29uUGF5bG9hZCkpKSAmJiBiZWFjb24tPklzVmFsaWQoKSAmJiBiZWFjb25QYXlsb2FkLT5Jc1ZhbGlkKCkpCisgICAgeworICAgICAgICBhUmVzdWx0Lm1WZXJzaW9uID0gYmVhY29uUGF5bG9hZC0+R2V0UHJvdG9jb2xWZXJzaW9uKCk7CisgICAgICAgIGFSZXN1bHQubUlzSm9pbmFibGUgPSBiZWFjb25QYXlsb2FkLT5Jc0pvaW5pbmdQZXJtaXR0ZWQoKTsKKyAgICAgICAgYVJlc3VsdC5tSXNOYXRpdmUgPSBiZWFjb25QYXlsb2FkLT5Jc05hdGl2ZSgpOworICAgICAgICBtZW1jcHkoJmFSZXN1bHQubU5ldHdvcmtOYW1lLCBiZWFjb25QYXlsb2FkLT5HZXROZXR3b3JrTmFtZSgpLCBzaXplb2YoYVJlc3VsdC5tTmV0d29ya05hbWUpKTsKKyAgICAgICAgbWVtY3B5KCZhUmVzdWx0Lm1FeHRlbmRlZFBhbklkLCBiZWFjb25QYXlsb2FkLT5HZXRFeHRlbmRlZFBhbklkKCksIHNpemVvZihhUmVzdWx0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgfQorCisgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBCZWFjb24sICVzIiwgYmVhY29uUGF5bG9hZC0+VG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzdHJpbmdCdWZmZXIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNYWM6OlN0YXJ0RW5lcmd5U2Nhbih2b2lkKQoreworICAgIGlmICghKG90UGxhdFJhZGlvR2V0Q2FwcyhHZXRJbnN0YW5jZSgpKSAmIE9UX1JBRElPX0NBUFNfRU5FUkdZX1NDQU4pKQorICAgIHsKKyAgICAgICAgbUVuZXJneVNjYW5DdXJyZW50TWF4UnNzaSA9IGtJbnZhbGlkUnNzaVZhbHVlOworICAgICAgICBtTWFjVGltZXIuU3RhcnQobVNjYW5EdXJhdGlvbik7CisgICAgICAgIG1FbmVyZ3lTY2FuU2FtcGxlUnNzaVRhc2suUG9zdCgpOworICAgICAgICBSYWRpb1JlY2VpdmUobVNjYW5DaGFubmVsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IG90UGxhdFJhZGlvRW5lcmd5U2NhbihHZXRJbnN0YW5jZSgpLCBtU2NhbkNoYW5uZWwsIG1TY2FuRHVyYXRpb24pOworCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYW5jZWwgc2NhbgorICAgICAgICAgICAgbUVuZXJneVNjYW5IYW5kbGVyKG1TY2FuQ29udGV4dCwgTlVMTCk7CisgICAgICAgICAgICBGaW5pc2hPcGVyYXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFJhZGlvRW5lcmd5U2NhbkRvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpCisgICAgeworICAgICAgICBhSW5zdGFuY2UtPm1MaW5rUmF3Lkludm9rZUVuZXJneVNjYW5Eb25lKGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLkVuZXJneVNjYW5Eb25lKGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisgICAgfQorfQorCit2b2lkIE1hYzo6RW5lcmd5U2NhbkRvbmUoaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSkKK3sKKyAgICAvLyBUcmlnZ2VyIGEgZW5lcmd5IHNjYW4gaGFuZGxlciBjYWxsYmFjayBpZiBuZWNlc3NhcnkKKyAgICBpZiAoYUVuZXJneVNjYW5NYXhSc3NpICE9IGtJbnZhbGlkUnNzaVZhbHVlKQorICAgIHsKKyAgICAgICAgb3RFbmVyZ3lTY2FuUmVzdWx0IHJlc3VsdDsKKworICAgICAgICByZXN1bHQubUNoYW5uZWwgPSBtU2NhbkNoYW5uZWw7CisgICAgICAgIHJlc3VsdC5tTWF4UnNzaSA9IGFFbmVyZ3lTY2FuTWF4UnNzaTsKKyAgICAgICAgbUVuZXJneVNjYW5IYW5kbGVyKG1TY2FuQ29udGV4dCwgJnJlc3VsdCk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIHRvIHRoZSBuZXh0IHNjYW4gY2hhbm5lbAorICAgIGRvCisgICAgeworICAgICAgICBtU2NhbkNoYW5uZWxzID4+PSAxOworICAgICAgICBtU2NhbkNoYW5uZWwrKzsKKworICAgICAgICAvLyBJZiB3ZSBoYXZlIHNjYW5uZWQgYWxsIHRoZSBjaGFubmVscywgdGhlbiBmaXJlIHRoZSBmaW5hbCBjYWxsYmFjaworICAgICAgICAvLyBhbmQgc3RhcnQgdGhlIG5leHQgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgaWYgKG1TY2FuQ2hhbm5lbHMgPT0gMCB8fCBtU2NhbkNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgUmFkaW9SZWNlaXZlKG1DaGFubmVsKTsKKyAgICAgICAgICAgIG1FbmVyZ3lTY2FuSGFuZGxlcihtU2NhbkNvbnRleHQsIE5VTEwpOworICAgICAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKChtU2NhbkNoYW5uZWxzICYgMSkgPT0gMCk7CisKKyAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgbmV4dCBjaGFubmVsCisgICAgU3RhcnRFbmVyZ3lTY2FuKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE1hYzo6SGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2koVGFza2xldCAmYVRhc2tsZXQpCit7CisgICAgR2V0T3duZXIoYVRhc2tsZXQpLkhhbmRsZUVuZXJneVNjYW5TYW1wbGVSc3NpKCk7Cit9CisKK3ZvaWQgTWFjOjpIYW5kbGVFbmVyZ3lTY2FuU2FtcGxlUnNzaSh2b2lkKQoreworICAgIGludDhfdCByc3NpOworCisgICAgVmVyaWZ5T3JFeGl0KG1PcGVyYXRpb24gPT0ga09wZXJhdGlvbkVuZXJneVNjYW4pOworCisgICAgcnNzaSA9IG90UGxhdFJhZGlvR2V0UnNzaShHZXRJbnN0YW5jZSgpKTsKKworICAgIGlmIChyc3NpICE9IGtJbnZhbGlkUnNzaVZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKChtRW5lcmd5U2NhbkN1cnJlbnRNYXhSc3NpID09IGtJbnZhbGlkUnNzaVZhbHVlKSB8fCAocnNzaSA+IG1FbmVyZ3lTY2FuQ3VycmVudE1heFJzc2kpKQorICAgICAgICB7CisgICAgICAgICAgICBtRW5lcmd5U2NhbkN1cnJlbnRNYXhSc3NpID0gcnNzaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1FbmVyZ3lTY2FuU2FtcGxlUnNzaVRhc2suUG9zdCgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNYWM6OlJlZ2lzdGVyUmVjZWl2ZXIoUmVjZWl2ZXIgJmFSZWNlaXZlcikKK3sKKyAgICBhc3NlcnQobVJlY2VpdmVUYWlsICE9ICZhUmVjZWl2ZXIgJiYgYVJlY2VpdmVyLm1OZXh0ID09IE5VTEwpOworCisgICAgaWYgKG1SZWNlaXZlVGFpbCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlY2VpdmVIZWFkID0gJmFSZWNlaXZlcjsKKyAgICAgICAgbVJlY2VpdmVUYWlsID0gJmFSZWNlaXZlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJlY2VpdmVUYWlsLT5tTmV4dCA9ICZhUmVjZWl2ZXI7CisgICAgICAgIG1SZWNlaXZlVGFpbCA9ICZhUmVjZWl2ZXI7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgTWFjOjpTZXRSeE9uV2hlbklkbGUoYm9vbCBhUnhPbldoZW5JZGxlKQoreworICAgIG1SeE9uV2hlbklkbGUgPSBhUnhPbldoZW5JZGxlOworCisgICAgLy8gVXBkYXRlIGlkbGUgc3RhdGUgaWYgbm8gb25nb2luZyBvcGVyYXRpb24uCisgICAgU3RhcnRPcGVyYXRpb24oKTsKK30KKwordm9pZCBNYWM6OkdlbmVyYXRlRXh0QWRkcmVzcyhFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihFeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYUV4dEFkZHJlc3MtPm04W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIH0KKworICAgIGFFeHRBZGRyZXNzLT5TZXRHcm91cChmYWxzZSk7CisgICAgYUV4dEFkZHJlc3MtPlNldExvY2FsKHRydWUpOworfQorCit2b2lkIE1hYzo6U2V0RXh0QWRkcmVzcyhjb25zdCBFeHRBZGRyZXNzICZhRXh0QWRkcmVzcykKK3sKKyAgICB1aW50OF90IGJ1ZltzaXplb2YoYUV4dEFkZHJlc3MpXTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspCisgICAgeworICAgICAgICBidWZbaV0gPSBhRXh0QWRkcmVzcy5tOFs3IC0gaV07CisgICAgfQorCisgICAgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MoR2V0SW5zdGFuY2UoKSwgYnVmKTsKKyAgICBtRXh0QWRkcmVzcyA9IGFFeHRBZGRyZXNzOworCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6R2V0SGFzaE1hY0FkZHJlc3MoRXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzKQoreworICAgIENyeXB0bzo6U2hhMjU2IHNoYTI1NjsKKyAgICB1aW50OF90IGJ1ZltDcnlwdG86OlNoYTI1Njo6a0hhc2hTaXplXTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChHZXRJbnN0YW5jZSgpLCBidWYpOworICAgIHNoYTI1Ni5TdGFydCgpOworICAgIHNoYTI1Ni5VcGRhdGUoYnVmLCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKyAgICBzaGEyNTYuRmluaXNoKGJ1Zik7CisKKyAgICBtZW1jcHkoYUhhc2hNYWNBZGRyZXNzLT5tOCwgYnVmLCBPVF9FWFRfQUREUkVTU19TSVpFKTsKKyAgICBhSGFzaE1hY0FkZHJlc3MtPlNldExvY2FsKHRydWUpOworCisgICAgb3RMb2dGdW5jRXhpdE1zZygiJWxsWCIsIEhvc3RTd2FwNjQoKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QgKj4oYUhhc2hNYWNBZGRyZXNzKSkpOworfQorCitvdEVycm9yIE1hYzo6U2V0U2hvcnRBZGRyZXNzKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlZCIsIGFTaG9ydEFkZHJlc3MpOworICAgIG1TaG9ydEFkZHJlc3MgPSBhU2hvcnRBZGRyZXNzOworICAgIG90UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKEdldEluc3RhbmNlKCksIGFTaG9ydEFkZHJlc3MpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNYWM6OlNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiJWQiLCBhQ2hhbm5lbCk7CisgICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKKworICAgIC8vIFVwZGF0ZSBjaGFubmVsIGlmIG5vIG9uZ29pbmcgb3BlcmF0aW9uLgorICAgIFN0YXJ0T3BlcmF0aW9uKCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1hYzo6U2V0TmV0d29ya05hbWUoY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgb3RMb2dGdW5jRW50cnlNc2coIiVzIiwgYU5ldHdvcmtOYW1lKTsKKworICAgIFZlcmlmeU9yRXhpdChzdHJsZW4oYU5ldHdvcmtOYW1lKSA8PSBPVF9ORVRXT1JLX05BTUVfTUFYX1NJWkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICh2b2lkKXN0cmxjcHkobU5ldHdvcmtOYW1lLm04LCBhTmV0d29ya05hbWUsIHNpemVvZihtTmV0d29ya05hbWUpKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWFjOjpTZXRQYW5JZChQYW5JZCBhUGFuSWQpCit7CisgICAgb3RMb2dGdW5jRW50cnlNc2coIiVkIiwgYVBhbklkKTsKKyAgICBtUGFuSWQgPSBhUGFuSWQ7CisgICAgb3RQbGF0UmFkaW9TZXRQYW5JZChHZXRJbnN0YW5jZSgpLCBtUGFuSWQpOworICAgIG90TG9nRnVuY0V4aXQoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNYWM6OlNldEV4dGVuZGVkUGFuSWQoY29uc3QgdWludDhfdCAqYUV4dFBhbklkKQoreworICAgIG1lbWNweShtRXh0ZW5kZWRQYW5JZC5tOCwgYUV4dFBhbklkLCBzaXplb2YobUV4dGVuZGVkUGFuSWQpKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNYWM6OlNlbmRGcmFtZVJlcXVlc3QoU2VuZGVyICZhU2VuZGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1TZW5kVGFpbCAhPSAmYVNlbmRlciAmJiBhU2VuZGVyLm1OZXh0ID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBpZiAobVNlbmRIZWFkID09IE5VTEwpCisgICAgeworICAgICAgICBtU2VuZEhlYWQgPSAmYVNlbmRlcjsKKyAgICAgICAgbVNlbmRUYWlsID0gJmFTZW5kZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TZW5kVGFpbC0+bU5leHQgPSAmYVNlbmRlcjsKKyAgICAgICAgbVNlbmRUYWlsID0gJmFTZW5kZXI7CisgICAgfQorCisgICAgU3RhcnRPcGVyYXRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWFjOjpQdXRSYWRpb0luSWRsZU1vZGUodm9pZCkKK3sKKyAgICBpZiAobVJ4T25XaGVuSWRsZSB8fCBtUmVjZWl2ZVRpbWVyLklzUnVubmluZygpIHx8IG90UGxhdFJhZGlvR2V0UHJvbWlzY3VvdXMoR2V0SW5zdGFuY2UoKSkpCisgICAgeworICAgICAgICBSYWRpb1JlY2VpdmUobUNoYW5uZWwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSYWRpb1NsZWVwKCk7CisgICAgfQorfQorCit2b2lkIE1hYzo6U3RhcnRPcGVyYXRpb24odm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobU9wZXJhdGlvbiA9PSBrT3BlcmF0aW9uTm9uZSk7CisgICAgVmVyaWZ5T3JFeGl0KCFtV2FpdGluZ0ZvckRhdGEpOworCisgICAgaWYgKG1QZW5kaW5nU2NhblJlcXVlc3QgPT0ga1NjYW5UeXBlQWN0aXZlKQorICAgIHsKKyAgICAgICAgbVBlbmRpbmdTY2FuUmVxdWVzdCA9IGtTY2FuVHlwZU5vbmU7CisgICAgICAgIG1PcGVyYXRpb24gPSBrT3BlcmF0aW9uQWN0aXZlU2NhbjsKKyAgICAgICAgU3RhcnRDc21hQmFja29mZigpOworICAgIH0KKyAgICBlbHNlIGlmIChtUGVuZGluZ1NjYW5SZXF1ZXN0ID09IGtTY2FuVHlwZUVuZXJneSkKKyAgICB7CisgICAgICAgIG1QZW5kaW5nU2NhblJlcXVlc3QgPSBrU2NhblR5cGVOb25lOworICAgICAgICBtT3BlcmF0aW9uID0ga09wZXJhdGlvbkVuZXJneVNjYW47CisgICAgICAgIFN0YXJ0RW5lcmd5U2NhbigpOworICAgIH0KKyAgICBlbHNlIGlmIChtVHJhbnNtaXRCZWFjb24pCisgICAgeworICAgICAgICBtVHJhbnNtaXRCZWFjb24gPSBmYWxzZTsKKyAgICAgICAgbU9wZXJhdGlvbiA9IGtPcGVyYXRpb25UcmFuc21pdEJlYWNvbjsKKyAgICAgICAgU3RhcnRDc21hQmFja29mZigpOworICAgIH0KKyAgICBlbHNlIGlmIChtU2VuZEhlYWQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1PcGVyYXRpb24gPSBrT3BlcmF0aW9uVHJhbnNtaXREYXRhOworICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFB1dFJhZGlvSW5JZGxlTW9kZSgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWFjOjpGaW5pc2hPcGVyYXRpb24odm9pZCkKK3sKKyAgICBtT3BlcmF0aW9uID0ga09wZXJhdGlvbk5vbmU7CisgICAgUHV0UmFkaW9JbklkbGVNb2RlKCk7CisgICAgU3RhcnRPcGVyYXRpb24oKTsKK30KKwordm9pZCBNYWM6OkdlbmVyYXRlTm9uY2UoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MsIHVpbnQzMl90IGFGcmFtZUNvdW50ZXIsIHVpbnQ4X3QgYVNlY3VyaXR5TGV2ZWwsIHVpbnQ4X3QgKmFOb25jZSkKK3sKKyAgICAvLyBzb3VyY2UgYWRkcmVzcworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKQorICAgIHsKKyAgICAgICAgYU5vbmNlW2ldID0gYUFkZHJlc3MubThbaV07CisgICAgfQorCisgICAgYU5vbmNlICs9IDg7CisKKyAgICAvLyBmcmFtZSBjb3VudGVyCisgICAgYU5vbmNlWzBdID0gKGFGcmFtZUNvdW50ZXIgPj4gMjQpICYgMHhmZjsKKyAgICBhTm9uY2VbMV0gPSAoYUZyYW1lQ291bnRlciA+PiAxNikgJiAweGZmOworICAgIGFOb25jZVsyXSA9IChhRnJhbWVDb3VudGVyID4+IDgpICYgMHhmZjsKKyAgICBhTm9uY2VbM10gPSAoYUZyYW1lQ291bnRlciA+PiAwKSAmIDB4ZmY7CisgICAgYU5vbmNlICs9IDQ7CisKKyAgICAvLyBzZWN1cml0eSBsZXZlbAorICAgIGFOb25jZVswXSA9IGFTZWN1cml0eUxldmVsOworfQorCit2b2lkIE1hYzo6U2VuZEJlYWNvblJlcXVlc3QoRnJhbWUgJmFGcmFtZSkKK3sKKyAgICAvLyBpbml0aWFsaXplIE1BQyBoZWFkZXIKKyAgICB1aW50MTZfdCBmY2YgPSBGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kIHwgRnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBGcmFtZTo6a0ZjZlNyY0FkZHJOb25lOworICAgIGFGcmFtZS5Jbml0TWFjSGVhZGVyKGZjZiwgRnJhbWU6OmtTZWNOb25lKTsKKyAgICBhRnJhbWUuU2V0RHN0UGFuSWQoa1Nob3J0QWRkckJyb2FkY2FzdCk7CisgICAgYUZyYW1lLlNldERzdEFkZHIoa1Nob3J0QWRkckJyb2FkY2FzdCk7CisgICAgYUZyYW1lLlNldENvbW1hbmRJZChGcmFtZTo6a01hY0NtZEJlYWNvblJlcXVlc3QpOworICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiU2VuZGluZyBCZWFjb24gUmVxdWVzdCIpOworfQorCit2b2lkIE1hYzo6U2VuZEJlYWNvbihGcmFtZSAmYUZyYW1lKQoreworICAgIHVpbnQ4X3QgbnVtVW5zZWN1cmVQb3J0czsKKyAgICB1aW50OF90IGJlYWNvbkxlbmd0aDsKKyAgICB1aW50MTZfdCBmY2Y7CisgICAgQmVhY29uICpiZWFjb24gPSBOVUxMOworICAgIEJlYWNvblBheWxvYWQgKmJlYWNvblBheWxvYWQgPSBOVUxMOworICAgIGNoYXIgc3RyaW5nQnVmZmVyW0JlYWNvblBheWxvYWQ6OmtJbmZvU3RyaW5nU2l6ZV07CisKKyAgICAvLyBpbml0aWFsaXplIE1BQyBoZWFkZXIKKyAgICBmY2YgPSBGcmFtZTo6a0ZjZkZyYW1lQmVhY29uIHwgRnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8IEZyYW1lOjprRmNmU3JjQWRkckV4dDsKKyAgICBhRnJhbWUuSW5pdE1hY0hlYWRlcihmY2YsIEZyYW1lOjprU2VjTm9uZSk7CisgICAgYUZyYW1lLlNldFNyY1BhbklkKG1QYW5JZCk7CisgICAgYUZyYW1lLlNldFNyY0FkZHIobUV4dEFkZHJlc3MpOworCisgICAgLy8gd3JpdGUgcGF5bG9hZAorICAgIGJlYWNvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmVhY29uICo+KGFGcmFtZS5HZXRQYXlsb2FkKCkpOworICAgIGJlYWNvbi0+SW5pdCgpOworICAgIGJlYWNvbkxlbmd0aCA9IHNpemVvZigqYmVhY29uKTsKKworICAgIGJlYWNvblBheWxvYWQgPSByZWludGVycHJldF9jYXN0PEJlYWNvblBheWxvYWQgKj4oYmVhY29uLT5HZXRQYXlsb2FkKCkpOworCisgICAgaWYgKEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpLkdldFNlY3VyaXR5UG9saWN5RmxhZ3MoKSAmIE9UX1NFQ1VSSVRZX1BPTElDWV9CRUFDT05TKQorICAgIHsKKyAgICAgICAgYmVhY29uUGF5bG9hZC0+SW5pdCgpOworCisgICAgICAgIC8vIHNldCB0aGUgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZworICAgICAgICBHZXROZXRpZigpLkdldElwNkZpbHRlcigpLkdldFVuc2VjdXJlUG9ydHMobnVtVW5zZWN1cmVQb3J0cyk7CisKKyAgICAgICAgaWYgKG51bVVuc2VjdXJlUG9ydHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlYWNvblBheWxvYWQtPlNldEpvaW5pbmdQZXJtaXR0ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlYWNvblBheWxvYWQtPkNsZWFySm9pbmluZ1Blcm1pdHRlZCgpOworICAgICAgICB9CisKKyAgICAgICAgYmVhY29uUGF5bG9hZC0+U2V0TmV0d29ya05hbWUobU5ldHdvcmtOYW1lLm04KTsKKyAgICAgICAgYmVhY29uUGF5bG9hZC0+U2V0RXh0ZW5kZWRQYW5JZChtRXh0ZW5kZWRQYW5JZC5tOCk7CisKKyAgICAgICAgYmVhY29uTGVuZ3RoICs9IHNpemVvZigqYmVhY29uUGF5bG9hZCk7CisgICAgfQorCisgICAgYUZyYW1lLlNldFBheWxvYWRMZW5ndGgoYmVhY29uTGVuZ3RoKTsKKworICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiU2VuZGluZyBCZWFjb24sICVzIiwgYmVhY29uUGF5bG9hZC0+VG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzdHJpbmdCdWZmZXIpOworfQorCit2b2lkIE1hYzo6UHJvY2Vzc1RyYW5zbWl0U2VjdXJpdHkoRnJhbWUgJmFGcmFtZSkKK3sKKyAgICBLZXlNYW5hZ2VyICZrZXlNYW5hZ2VyID0gR2V0TmV0aWYoKS5HZXRLZXlNYW5hZ2VyKCk7CisgICAgdWludDMyX3QgZnJhbWVDb3VudGVyID0gMDsKKyAgICB1aW50OF90IHNlY3VyaXR5TGV2ZWw7CisgICAgdWludDhfdCBrZXlJZE1vZGU7CisgICAgdWludDhfdCBub25jZVtrTm9uY2VTaXplXTsKKyAgICB1aW50OF90IHRhZ0xlbmd0aDsKKyAgICBDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgY29uc3QgdWludDhfdCAqa2V5ID0gTlVMTDsKKyAgICBjb25zdCBFeHRBZGRyZXNzICpleHRBZGRyZXNzID0gTlVMTDsKKworICAgIGlmIChhRnJhbWUuR2V0U2VjdXJpdHlFbmFibGVkKCkgPT0gZmFsc2UpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgYUZyYW1lLkdldEtleUlkTW9kZShrZXlJZE1vZGUpOworCisgICAgc3dpdGNoIChrZXlJZE1vZGUpCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtLZXlJZE1vZGUwOgorICAgICAgICBrZXkgPSBrZXlNYW5hZ2VyLkdldEtlaygpOworICAgICAgICBleHRBZGRyZXNzID0gJm1FeHRBZGRyZXNzOworCisgICAgICAgIGlmICghYUZyYW1lLklzQVJldHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFGcmFtZS5TZXRGcmFtZUNvdW50ZXIoa2V5TWFuYWdlci5HZXRLZWtGcmFtZUNvdW50ZXIoKSk7CisgICAgICAgICAgICBrZXlNYW5hZ2VyLkluY3JlbWVudEtla0ZyYW1lQ291bnRlcigpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprS2V5SWRNb2RlMToKKyAgICAgICAga2V5ID0ga2V5TWFuYWdlci5HZXRDdXJyZW50TWFjS2V5KCk7CisgICAgICAgIGV4dEFkZHJlc3MgPSAmbUV4dEFkZHJlc3M7CisKKyAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIG1hcmtlZCBhcyBhIHJldHJhbnNtaXNzaW9uLCB0aGUgYE1hYzo6U2VuZGVyYCB3aGljaAorICAgICAgICAvLyBwcmVwYXJlZCB0aGUgZnJhbWUgc2hvdWxkIHNldCB0aGUgZnJhbWUgY291bnRlciBhbmQga2V5IGlkIHRvIHRoZQorICAgICAgICAvLyBzYW1lIHZhbHVlcyB1c2VkIGluIHRoZSBlYXJsaWVyIHRyYW5zbWl0IGF0dGVtcHQuIEZvciBhIG5ldyBmcmFtZSAobm90CisgICAgICAgIC8vIGEgcmV0cmFuc21pc3Npb24pLCB3ZSBnZXQgYSBuZXcgZnJhbWUgY291bnRlciBhbmQga2V5IGlkIGZyb20gdGhlIGtleQorICAgICAgICAvLyBtYW5hZ2VyLgorCisgICAgICAgIGlmICghYUZyYW1lLklzQVJldHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFGcmFtZS5TZXRGcmFtZUNvdW50ZXIoa2V5TWFuYWdlci5HZXRNYWNGcmFtZUNvdW50ZXIoKSk7CisgICAgICAgICAgICBrZXlNYW5hZ2VyLkluY3JlbWVudE1hY0ZyYW1lQ291bnRlcigpOworICAgICAgICAgICAgYUZyYW1lLlNldEtleUlkKChrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpICYgMHg3ZikgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0tleUlkTW9kZTI6CisgICAgeworICAgICAgICBjb25zdCB1aW50OF90IGtleVNvdXJjZVtdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworICAgICAgICBrZXkgPSBzTW9kZTJLZXk7CisgICAgICAgIG1LZXlJZE1vZGUyRnJhbWVDb3VudGVyKys7CisgICAgICAgIGFGcmFtZS5TZXRGcmFtZUNvdW50ZXIobUtleUlkTW9kZTJGcmFtZUNvdW50ZXIpOworICAgICAgICBhRnJhbWUuU2V0S2V5U291cmNlKGtleVNvdXJjZSk7CisgICAgICAgIGFGcmFtZS5TZXRLZXlJZCgweGZmKTsKKyAgICAgICAgZXh0QWRkcmVzcyA9IHN0YXRpY19jYXN0PGNvbnN0IEV4dEFkZHJlc3MgKj4oJnNNb2RlMkV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhRnJhbWUuR2V0U2VjdXJpdHlMZXZlbChzZWN1cml0eUxldmVsKTsKKyAgICBhRnJhbWUuR2V0RnJhbWVDb3VudGVyKGZyYW1lQ291bnRlcik7CisKKyAgICBHZW5lcmF0ZU5vbmNlKCpleHRBZGRyZXNzLCBmcmFtZUNvdW50ZXIsIHNlY3VyaXR5TGV2ZWwsIG5vbmNlKTsKKworICAgIGFlc0NjbS5TZXRLZXkoa2V5LCAxNik7CisgICAgdGFnTGVuZ3RoID0gYUZyYW1lLkdldEZvb3Rlckxlbmd0aCgpIC0gRnJhbWU6OmtGY3NTaXplOworCisgICAgYWVzQ2NtLkluaXQoYUZyYW1lLkdldEhlYWRlckxlbmd0aCgpLCBhRnJhbWUuR2V0UGF5bG9hZExlbmd0aCgpLCB0YWdMZW5ndGgsIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKworICAgIGFlc0NjbS5IZWFkZXIoYUZyYW1lLkdldEhlYWRlcigpLCBhRnJhbWUuR2V0SGVhZGVyTGVuZ3RoKCkpOworICAgIGFlc0NjbS5QYXlsb2FkKGFGcmFtZS5HZXRQYXlsb2FkKCksIGFGcmFtZS5HZXRQYXlsb2FkKCksIGFGcmFtZS5HZXRQYXlsb2FkTGVuZ3RoKCksIHRydWUpOworICAgIGFlc0NjbS5GaW5hbGl6ZShhRnJhbWUuR2V0Rm9vdGVyKCksICZ0YWdMZW5ndGgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBNYWM6OkhhbmRsZUJlZ2luVHJhbnNtaXQodm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TWFjICo+KGFDb250ZXh0KS0+SGFuZGxlQmVnaW5UcmFuc21pdCgpOworfQorCit2b2lkIE1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdChUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlQmVnaW5UcmFuc21pdCgpOworfQorCit2b2lkIE1hYzo6SGFuZGxlQmVnaW5UcmFuc21pdCh2b2lkKQoreworICAgIEZyYW1lICZzZW5kRnJhbWUoKm1UeEZyYW1lKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChtQ3NtYUF0dGVtcHRzID09IDAgJiYgbVRyYW5zbWl0QXR0ZW1wdHMgPT0gMCkKKyAgICB7CisgICAgICAgIHNlbmRGcmFtZS5TZXRQb3dlcihtTWF4VHJhbnNtaXRQb3dlcik7CisKKyAgICAgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga09wZXJhdGlvbkFjdGl2ZVNjYW46CisgICAgICAgICAgICBvdFBsYXRSYWRpb1NldFBhbklkKEdldEluc3RhbmNlKCksIGtQYW5JZEJyb2FkY2FzdCk7CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0Q2hhbm5lbChtU2NhbkNoYW5uZWwpOworICAgICAgICAgICAgU2VuZEJlYWNvblJlcXVlc3Qoc2VuZEZyYW1lKTsKKyAgICAgICAgICAgIHNlbmRGcmFtZS5TZXRTZXF1ZW5jZSgwKTsKKyAgICAgICAgICAgIHNlbmRGcmFtZS5TZXRNYXhUeEF0dGVtcHRzKGtEaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXRCZWFjb246CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0Q2hhbm5lbChtQ2hhbm5lbCk7CisgICAgICAgICAgICBTZW5kQmVhY29uKHNlbmRGcmFtZSk7CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0U2VxdWVuY2UobUJlYWNvblNlcXVlbmNlKyspOworICAgICAgICAgICAgc2VuZEZyYW1lLlNldE1heFR4QXR0ZW1wdHMoa0RpcmVjdEZyYW1lTWFjVHhBdHRlbXB0cyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtPcGVyYXRpb25UcmFuc21pdERhdGE6CisgICAgICAgICAgICBzZW5kRnJhbWUuU2V0Q2hhbm5lbChtQ2hhbm5lbCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNlbmRIZWFkLT5IYW5kbGVGcmFtZVJlcXVlc3Qoc2VuZEZyYW1lKSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBtYXJrZWQgYXMgYSByZXRyYW5zbWlzc2lvbiwgdGhlbiBkYXRhIHNlcXVlbmNlIG51bWJlciBpcyBhbHJlYWR5IHNldCBieSB0aGUgYFNlbmRlcmAuCisgICAgICAgICAgICBpZiAoIXNlbmRGcmFtZS5Jc0FSZXRyYW5zbWlzc2lvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNlbmRGcmFtZS5TZXRTZXF1ZW5jZShtRGF0YVNlcXVlbmNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlY3VyaXR5IFByb2Nlc3NpbmcKKyAgICAgICAgUHJvY2Vzc1RyYW5zbWl0U2VjdXJpdHkoc2VuZEZyYW1lKTsKKworICAgICAgICBpZiAoc2VuZEZyYW1lLkdldFBvd2VyKCkgPiBtTWF4VHJhbnNtaXRQb3dlcikKKyAgICAgICAgeworICAgICAgICAgICAgc2VuZEZyYW1lLlNldFBvd2VyKG1NYXhUcmFuc21pdFBvd2VyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGVycm9yID0gUmFkaW9SZWNlaXZlKHNlbmRGcmFtZS5HZXRDaGFubmVsKCkpOworICAgIGFzc2VydChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsKKyAgICBlcnJvciA9IFJhZGlvVHJhbnNtaXQoJnNlbmRGcmFtZSk7CisKKyAgICBhc3NlcnQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBpZiAoc2VuZEZyYW1lLkdldEFja1JlcXVlc3QoKSAmJiAhKG90UGxhdFJhZGlvR2V0Q2FwcyhHZXRJbnN0YW5jZSgpKSAmIE9UX1JBRElPX0NBUFNfQUNLX1RJTUVPVVQpKQorICAgIHsKKyAgICAgICAgbU1hY1RpbWVyLlN0YXJ0KGtBY2tUaW1lb3V0KTsKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJBY2sgdGltZXIgc3RhcnQiKTsKKyAgICB9CisKKyAgICBpZiAobVBjYXBDYWxsYmFjaykKKyAgICB7CisgICAgICAgIHNlbmRGcmFtZS5tRGlkVFggPSB0cnVlOworICAgICAgICBtUGNhcENhbGxiYWNrKCZzZW5kRnJhbWUsIG1QY2FwQ2FsbGJhY2tDb250ZXh0KTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKyAgICAgICAgVHJhbnNtaXREb25lVGFzayhtVHhGcmFtZSwgZmFsc2UsIE9UX0VSUk9SX0FCT1JUKTsKKyNlbHNlCisgICAgICAgIFRyYW5zbWl0RG9uZVRhc2sobVR4RnJhbWUsIE5VTEwsIE9UX0VSUk9SX0FCT1JUKTsKKyNlbmRpZgorICAgIH0KK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0xFR0FDWV9UUkFOU01JVF9ET05FCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0UmFkaW9UcmFuc21pdERvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgYm9vbCBhUnhQZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlIW90RXJyb3IhLCBhUnhQZW5kaW5nPSV1IiwgYUVycm9yLCBhUnhQZW5kaW5nID8gMSA6IDApOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICBpZiAoYUluc3RhbmNlLT5tTGlua1Jhdy5Jc0VuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+bUxpbmtSYXcuSW52b2tlVHJhbnNtaXREb25lKGFGcmFtZSwgYVJ4UGVuZGluZywgYUVycm9yKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIHsKKyAgICAgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuVHJhbnNtaXREb25lVGFzayhhRnJhbWUsIGFSeFBlbmRpbmcsIGFFcnJvcik7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6VHJhbnNtaXREb25lVGFzayhvdFJhZGlvRnJhbWUgKmFGcmFtZSwgYm9vbCBhUnhQZW5kaW5nLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBtTWFjVGltZXIuU3RvcCgpOworCisgICAgbUNvdW50ZXJzLm1UeFRvdGFsKys7CisKKyAgICBGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZSAqPihhRnJhbWUpOworICAgIEFkZHJlc3MgYWRkcjsKKyAgICBmcmFtZS0+R2V0RHN0QWRkcihhZGRyKTsKKworICAgIGlmIChhZGRyLm1TaG9ydEFkZHJlc3MgPT0ga1Nob3J0QWRkckJyb2FkY2FzdCkKKyAgICB7CisgICAgICAgIC8vIEJyb2FkY2FzdCBmcmFtZQorICAgICAgICBtQ291bnRlcnMubVR4QnJvYWRjYXN0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFVuaWNhc3QgZnJhbWUKKyAgICAgICAgbUNvdW50ZXJzLm1UeFVuaWNhc3QrKzsKKyAgICB9CisKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX0FCT1JUKQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeEVyckFib3J0Kys7CisgICAgfQorCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFKQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeEVyckNjYSsrOworICAgIH0KKworICAgIGlmICghUmFkaW9TdXBwb3J0c0NzbWFCYWNrb2ZmKCkgJiYKKyAgICAgICAgYUVycm9yID09IE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgJiYKKyAgICAgICAgbUNzbWFBdHRlbXB0cyA8IGtNYXhDU01BQmFja29mZnMpCisgICAgeworICAgICAgICBtQ3NtYUF0dGVtcHRzKys7CisgICAgICAgIFN0YXJ0Q3NtYUJhY2tvZmYoKTsKKworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgbUNzbWFBdHRlbXB0cyA9IDA7CisKKyAgICBzd2l0Y2ggKG1PcGVyYXRpb24pCisgICAgeworICAgIGNhc2Uga09wZXJhdGlvblRyYW5zbWl0RGF0YToKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgY29tbWFuZElkOworCisgICAgICAgIGlmICgoZnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kKSAmJiAoZnJhbWUtPkdldENvbW1hbmRJZChjb21tYW5kSWQpID09IE9UX0VSUk9SX05PTkUpICYmCisgICAgICAgICAgICAoY29tbWFuZElkID09IEZyYW1lOjprTWFjQ21kRGF0YVJlcXVlc3QpICYmIChhUnhQZW5kaW5nKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVdhaXRpbmdGb3JEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgIG1SZWNlaXZlVGltZXIuU3RhcnQoa0RhdGFQb2xsVGltZW91dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBmYWxsIHRocm91Z2gKKworICAgIGNhc2Uga09wZXJhdGlvbkFjdGl2ZVNjYW46CisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXRCZWFjb246CisgICAgICAgIFNlbnRGcmFtZShhRXJyb3IpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKyNlbHNlIC8vICNpZiBPUEVOVEhSRUFEX0NPTkZJR19MRUdBQ1lfVFJBTlNNSVRfRE9ORQorZXh0ZXJuICJDIiB2b2lkIG90UGxhdFJhZGlvVHhEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90UmFkaW9GcmFtZSAqYUFja0ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlIW90RXJyb3IhIiwgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpCisgICAgeworICAgICAgICBhSW5zdGFuY2UtPm1MaW5rUmF3Lkludm9rZVRyYW5zbWl0RG9uZShhRnJhbWUsIChzdGF0aWNfY2FzdDxGcmFtZSAqPihhQWNrRnJhbWUpKS0+R2V0RnJhbWVQZW5kaW5nKCksIGFFcnJvcik7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICB7CisgICAgICAgIGFJbnN0YW5jZS0+bVRocmVhZE5ldGlmLkdldE1hYygpLlRyYW5zbWl0RG9uZVRhc2soYUZyYW1lLCBhQWNrRnJhbWUsIGFFcnJvcik7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6VHJhbnNtaXREb25lVGFzayhvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RSYWRpb0ZyYW1lICphQWNrRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIEZyYW1lICp0eEZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4oYUZyYW1lKTsKKyAgICBBZGRyZXNzIGFkZHI7CisgICAgYm9vbCBmcmFtZVBlbmRpbmcgPSBmYWxzZTsKKworICAgIG1NYWNUaW1lci5TdG9wKCk7CisKKyAgICBtQ291bnRlcnMubVR4VG90YWwrKzsKKworICAgIHR4RnJhbWUtPkdldERzdEFkZHIoYWRkcik7CisKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUgJiYgdHhGcmFtZS0+R2V0QWNrUmVxdWVzdCgpICYmIGFBY2tGcmFtZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgRnJhbWUgKmFja0ZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWUgKj4oYUFja0ZyYW1lKTsKKyAgICAgICAgTmVpZ2hib3IgKm5laWdoYm9yOworCisgICAgICAgIGZyYW1lUGVuZGluZyA9IGFja0ZyYW1lLT5HZXRGcmFtZVBlbmRpbmcoKTsKKyAgICAgICAgbmVpZ2hib3IgPSBHZXROZXRpZigpLkdldE1sZSgpLkdldE5laWdoYm9yKGFkZHIpOworCisgICAgICAgIGlmIChuZWlnaGJvciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBuZWlnaGJvci0+R2V0TGlua0luZm8oKS5BZGRSc3MoR2V0Tm9pc2VGbG9vcigpLCBhY2tGcmFtZS0+R2V0UG93ZXIoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWRkci5tU2hvcnRBZGRyZXNzID09IGtTaG9ydEFkZHJCcm9hZGNhc3QpCisgICAgeworICAgICAgICAvLyBCcm9hZGNhc3QgZnJhbWUKKyAgICAgICAgbUNvdW50ZXJzLm1UeEJyb2FkY2FzdCsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBVbmljYXN0IGZyYW1lCisgICAgICAgIG1Db3VudGVycy5tVHhVbmljYXN0Kys7CisgICAgfQorCisgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9BQk9SVCkKKyAgICB7CisgICAgICAgIG1Db3VudGVycy5tVHhFcnJBYm9ydCsrOworICAgIH0KKworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSkKKyAgICB7CisgICAgICAgIG1Db3VudGVycy5tVHhFcnJDY2ErKzsKKyAgICB9CisKKyAgICBpZiAoIVJhZGlvU3VwcG9ydHNDc21hQmFja29mZigpICYmCisgICAgICAgIGFFcnJvciA9PSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFICYmCisgICAgICAgIG1Dc21hQXR0ZW1wdHMgPCBrTWF4Q1NNQUJhY2tvZmZzKQorICAgIHsKKyAgICAgICAgbUNzbWFBdHRlbXB0cysrOworICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1Dc21hQXR0ZW1wdHMgPSAwOworCisgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgIHsKKyAgICBjYXNlIGtPcGVyYXRpb25UcmFuc21pdERhdGE6CisgICAgeworICAgICAgICB1aW50OF90IGNvbW1hbmRJZDsKKworICAgICAgICBpZiAoKHR4RnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lTWFjQ21kKSAmJiAodHhGcmFtZS0+R2V0Q29tbWFuZElkKGNvbW1hbmRJZCkgPT0gT1RfRVJST1JfTk9ORSkgJiYKKyAgICAgICAgICAgIChjb21tYW5kSWQgPT0gRnJhbWU6OmtNYWNDbWREYXRhUmVxdWVzdCkgJiYgKGZyYW1lUGVuZGluZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1XYWl0aW5nRm9yRGF0YSA9IHRydWU7CisgICAgICAgICAgICBtUmVjZWl2ZVRpbWVyLlN0YXJ0KGtEYXRhUG9sbFRpbWVvdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICBjYXNlIGtPcGVyYXRpb25BY3RpdmVTY2FuOgorICAgIGNhc2Uga09wZXJhdGlvblRyYW5zbWl0QmVhY29uOgorICAgICAgICBTZW50RnJhbWUoYUVycm9yKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKworb3RFcnJvciBNYWM6OlJhZGlvVHJhbnNtaXQoRnJhbWUgKmFTZW5kRnJhbWUpCit7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworCisgICAgaWYgKCFtUnhPbldoZW5JZGxlKQorICAgIHsKKyAgICAgICAgLy8gQ2FuY2VsIGRlbGF5IHNsZWVwIHRpbWVyCisgICAgICAgIG1SZWNlaXZlVGltZXIuU3RvcCgpOworCisgICAgICAgIC8vIERlbGF5IHNsZWVwIGlmIHdlIGhhdmUgYW5vdGhlciBmcmFtZSBwZW5kaW5nIHRvIHRyYW5zbWl0CisgICAgICAgIG1EZWxheVNsZWVwID0gYVNlbmRGcmFtZS0+R2V0RnJhbWVQZW5kaW5nKCk7CisgICAgfQorCisjZW5kaWYKKyAgICAvLyBUcmFuc21pdCBwYWNrZXQKKyAgICByZXR1cm4gb3RQbGF0UmFkaW9UcmFuc21pdChHZXRJbnN0YW5jZSgpLCBzdGF0aWNfY2FzdDxvdFJhZGlvRnJhbWUgKj4oYVNlbmRGcmFtZSkpOworfQorCitvdEVycm9yIE1hYzo6UmFkaW9SZWNlaXZlKHVpbnQ4X3QgYUNoYW5uZWwpCit7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworCisgICAgaWYgKCFtUnhPbldoZW5JZGxlKQorICAgIHsKKyAgICAgICAgLy8gQ2FuY2VsIGRlbGF5IHNsZWVwIHRpbWVyCisgICAgICAgIG1SZWNlaXZlVGltZXIuU3RvcCgpOworICAgIH0KKworI2VuZGlmCisgICAgLy8gUmVjZWl2ZQorICAgIHJldHVybiBvdFBsYXRSYWRpb1JlY2VpdmUoR2V0SW5zdGFuY2UoKSwgYUNoYW5uZWwpOworfQorCit2b2lkIE1hYzo6UmFkaW9TbGVlcCh2b2lkKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX1NUQVlfQVdBS0VfQkVUV0VFTl9GUkFHTUVOVFMKKworICAgIGlmIChtRGVsYXlTbGVlcCkKKyAgICB7CisgICAgICAgIC8vIFJlc3RhcnQgZGVsYXkgc2xlZXAgdGltZXIKKyAgICAgICAgbVJlY2VpdmVUaW1lci5TdGFydChrU2xlZXBEZWxheSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgb3RQbGF0UmFkaW9TbGVlcChHZXRJbnN0YW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTWFjOjpIYW5kbGVNYWNUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlTWFjVGltZXIoKTsKK30KKwordm9pZCBNYWM6OkhhbmRsZU1hY1RpbWVyKHZvaWQpCit7CisgICAgQWRkcmVzcyBhZGRyOworCisgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgIHsKKyAgICBjYXNlIGtPcGVyYXRpb25BY3RpdmVTY2FuOgorICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBtU2NhbkNoYW5uZWxzID4+PSAxOworICAgICAgICAgICAgbVNjYW5DaGFubmVsKys7CisKKyAgICAgICAgICAgIGlmIChtU2NhbkNoYW5uZWxzID09IDAgfHwgbVNjYW5DaGFubmVsID4gT1RfUkFESU9fQ0hBTk5FTF9NQVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmFkaW9SZWNlaXZlKG1DaGFubmVsKTsKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1NldFBhbklkKEdldEluc3RhbmNlKCksIG1QYW5JZCk7CisgICAgICAgICAgICAgICAgbUFjdGl2ZVNjYW5IYW5kbGVyKG1TY2FuQ29udGV4dCwgTlVMTCk7CisgICAgICAgICAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlICgobVNjYW5DaGFubmVscyAmIDEpID09IDApOworCisgICAgICAgIFJhZGlvUmVjZWl2ZShtU2NhbkNoYW5uZWwpOworICAgICAgICBTdGFydENzbWFCYWNrb2ZmKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uRW5lcmd5U2NhbjoKKyAgICAgICAgRW5lcmd5U2NhbkRvbmUobUVuZXJneVNjYW5DdXJyZW50TWF4UnNzaSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXREYXRhOgorICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIkFjayB0aW1lciBmaXJlZCIpOworICAgICAgICBSYWRpb1JlY2VpdmUobUNoYW5uZWwpOworICAgICAgICBtQ291bnRlcnMubVR4VG90YWwrKzsKKworICAgICAgICBtVHhGcmFtZS0+R2V0RHN0QWRkcihhZGRyKTsKKworICAgICAgICBpZiAoYWRkci5tU2hvcnRBZGRyZXNzID09IGtTaG9ydEFkZHJCcm9hZGNhc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEJyb2FkY2FzdCBmcmFtZQorICAgICAgICAgICAgbUNvdW50ZXJzLm1UeEJyb2FkY2FzdCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVW5pY2FzdCBGcmFtZQorICAgICAgICAgICAgbUNvdW50ZXJzLm1UeFVuaWNhc3QrKzsKKyAgICAgICAgfQorCisgICAgICAgIFNlbnRGcmFtZShPVF9FUlJPUl9OT19BQ0spOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWFjOjpIYW5kbGVSZWNlaXZlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJlY2VpdmVUaW1lcigpOworfQorCit2b2lkIE1hYzo6SGFuZGxlUmVjZWl2ZVRpbWVyKHZvaWQpCit7CisgICAgaWYgKG1XYWl0aW5nRm9yRGF0YSkKKyAgICB7CisgICAgICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiRGF0YSBwb2xsIHRpbWVvdXQiKTsKKworICAgICAgICBtV2FpdGluZ0ZvckRhdGEgPSBmYWxzZTsKKworICAgICAgICBmb3IgKFJlY2VpdmVyICpyZWNlaXZlciA9IG1SZWNlaXZlSGVhZDsgcmVjZWl2ZXI7IHJlY2VpdmVyID0gcmVjZWl2ZXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZWNlaXZlci0+SGFuZGxlRGF0YVBvbGxUaW1lb3V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdGFydE9wZXJhdGlvbigpOworfQorCit2b2lkIE1hYzo6U2VudEZyYW1lKG90RXJyb3IgYUVycm9yKQoreworICAgIEZyYW1lICZzZW5kRnJhbWUoKm1UeEZyYW1lKTsKKyAgICBTZW5kZXIgKnNlbmRlcjsKKworICAgIG1UcmFuc21pdEF0dGVtcHRzKys7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICBjYXNlIE9UX0VSUk9SX0FCT1JUOgorICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgIHsKKyAgICAgICAgY2hhciBzdHJpbmdCdWZmZXJbRnJhbWU6OmtJbmZvU3RyaW5nU2l6ZV07CisKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGcmFtZSB0eCBmYWlsZWQsIGVycm9yOiVzLCBhdHRlbXB0OiVkLyVkLCAlcyIsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgbVRyYW5zbWl0QXR0ZW1wdHMsIHNlbmRGcmFtZS5HZXRNYXhUeEF0dGVtcHRzKCksCisgICAgICAgICAgICAgICAgICAgICBzZW5kRnJhbWUuVG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKyAgICAgICAgb3REdW1wRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiVFggRVJSIiwgc2VuZEZyYW1lLkdldEhlYWRlcigpLCAxNik7CisKKyAgICAgICAgaWYgKCFSYWRpb1N1cHBvcnRzUmV0cmllcygpICYmCisgICAgICAgICAgICBtVHJhbnNtaXRBdHRlbXB0cyA8IHNlbmRGcmFtZS5HZXRNYXhUeEF0dGVtcHRzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0YXJ0Q3NtYUJhY2tvZmYoKTsKKyAgICAgICAgICAgIG1Db3VudGVycy5tVHhSZXRyeSsrOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHN0cmluZ0J1ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1UcmFuc21pdEF0dGVtcHRzID0gMDsKKyAgICBtQ3NtYUF0dGVtcHRzID0gMDsKKworICAgIGlmIChzZW5kRnJhbWUuR2V0QWNrUmVxdWVzdCgpKQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeEFja1JlcXVlc3RlZCsrOworCisgICAgICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNvdW50ZXJzLm1UeEFja2VkKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUNvdW50ZXJzLm1UeE5vQWNrUmVxdWVzdGVkKys7CisgICAgfQorCisgICAgc3dpdGNoIChtT3BlcmF0aW9uKQorICAgIHsKKyAgICBjYXNlIGtPcGVyYXRpb25BY3RpdmVTY2FuOgorICAgICAgICBtQ291bnRlcnMubVR4QmVhY29uUmVxdWVzdCsrOworICAgICAgICBtTWFjVGltZXIuU3RhcnQobVNjYW5EdXJhdGlvbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXRCZWFjb246CisgICAgICAgIG1Db3VudGVycy5tVHhCZWFjb24rKzsKKyAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrT3BlcmF0aW9uVHJhbnNtaXREYXRhOgorICAgICAgICBpZiAobVJlY2VpdmVUaW1lci5Jc1J1bm5pbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNvdW50ZXJzLm1UeERhdGFQb2xsKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtQ291bnRlcnMubVR4RGF0YSsrOworICAgICAgICB9CisKKyAgICAgICAgc2VuZGVyID0gbVNlbmRIZWFkOworICAgICAgICBtU2VuZEhlYWQgPSBtU2VuZEhlYWQtPm1OZXh0OworCisgICAgICAgIGlmIChtU2VuZEhlYWQgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRUYWlsID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHNlbmRlci0+bU5leHQgPSBOVUxMOworCisgICAgICAgIGlmICghc2VuZEZyYW1lLklzQVJldHJhbnNtaXNzaW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EYXRhU2VxdWVuY2UrKzsKKyAgICAgICAgfQorCisgICAgICAgIG90RHVtcERlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlRYIiwgc2VuZEZyYW1lLkdldEhlYWRlcigpLCBzZW5kRnJhbWUuR2V0TGVuZ3RoKCkpOworICAgICAgICBzZW5kZXItPkhhbmRsZVNlbnRGcmFtZShzZW5kRnJhbWUsIGFFcnJvcik7CisKKyAgICAgICAgRmluaXNoT3BlcmF0aW9uKCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNYWM6OlByb2Nlc3NSZWNlaXZlU2VjdXJpdHkoRnJhbWUgJmFGcmFtZSwgY29uc3QgQWRkcmVzcyAmYVNyY0FkZHIsIE5laWdoYm9yICphTmVpZ2hib3IpCit7CisgICAgS2V5TWFuYWdlciAma2V5TWFuYWdlciA9IEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3Qgc2VjdXJpdHlMZXZlbDsKKyAgICB1aW50OF90IGtleUlkTW9kZTsKKyAgICB1aW50MzJfdCBmcmFtZUNvdW50ZXI7CisgICAgdWludDhfdCBub25jZVtrTm9uY2VTaXplXTsKKyAgICB1aW50OF90IHRhZ1tGcmFtZTo6a01heE1pY1NpemVdOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoOworICAgIHVpbnQ4X3Qga2V5aWQ7CisgICAgdWludDMyX3Qga2V5U2VxdWVuY2UgPSAwOworICAgIGNvbnN0IHVpbnQ4X3QgKm1hY0tleTsKKyAgICBjb25zdCBFeHRBZGRyZXNzICpleHRBZGRyZXNzOworICAgIENyeXB0bzo6QWVzQ2NtIGFlc0NjbTsKKworICAgIGFGcmFtZS5TZXRTZWN1cml0eVZhbGlkKGZhbHNlKTsKKworICAgIGlmIChhRnJhbWUuR2V0U2VjdXJpdHlFbmFibGVkKCkgPT0gZmFsc2UpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgYUZyYW1lLkdldFNlY3VyaXR5TGV2ZWwoc2VjdXJpdHlMZXZlbCk7CisgICAgYUZyYW1lLkdldEZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIpOworICAgIG90TG9nRGViZ01hYyhHZXRJbnN0YW5jZSgpLCAiRnJhbWUgY291bnRlciAldSIsIGZyYW1lQ291bnRlcik7CisKKyAgICBhRnJhbWUuR2V0S2V5SWRNb2RlKGtleUlkTW9kZSk7CisKKyAgICBzd2l0Y2ggKGtleUlkTW9kZSkKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0tleUlkTW9kZTA6CisgICAgICAgIFZlcmlmeU9yRXhpdCgobWFjS2V5ID0ga2V5TWFuYWdlci5HZXRLZWsoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgIGV4dEFkZHJlc3MgPSAmYVNyY0FkZHIubUV4dEFkZHJlc3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0tleUlkTW9kZTE6CisgICAgICAgIFZlcmlmeU9yRXhpdChhTmVpZ2hib3IgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisKKyAgICAgICAgYUZyYW1lLkdldEtleUlkKGtleWlkKTsKKyAgICAgICAga2V5aWQtLTsKKworICAgICAgICBpZiAoa2V5aWQgPT0gKGtleU1hbmFnZXIuR2V0Q3VycmVudEtleVNlcXVlbmNlKCkgJiAweDdmKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2FtZSBrZXkgaW5kZXgKKyAgICAgICAgICAgIGtleVNlcXVlbmNlID0ga2V5TWFuYWdlci5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIG1hY0tleSA9IGtleU1hbmFnZXIuR2V0Q3VycmVudE1hY0tleSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleWlkID09ICgoa2V5TWFuYWdlci5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKSAtIDEpICYgMHg3ZikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHByZXZpb3VzIGtleSBpbmRleAorICAgICAgICAgICAga2V5U2VxdWVuY2UgPSBrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpIC0gMTsKKyAgICAgICAgICAgIG1hY0tleSA9IGtleU1hbmFnZXIuR2V0VGVtcG9yYXJ5TWFjS2V5KGtleVNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChrZXlpZCA9PSAoKGtleU1hbmFnZXIuR2V0Q3VycmVudEtleVNlcXVlbmNlKCkgKyAxKSAmIDB4N2YpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBuZXh0IGtleSBpbmRleAorICAgICAgICAgICAga2V5U2VxdWVuY2UgPSBrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpICsgMTsKKyAgICAgICAgICAgIG1hY0tleSA9IGtleU1hbmFnZXIuR2V0VGVtcG9yYXJ5TWFjS2V5KGtleVNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgZnJvbSBhIG5laWdoYm9yIG5vdCBpbiB2YWxpZCBzdGF0ZSAoZS5nLiwgaXQgaXMgZnJvbSBhIGNoaWxkIGJlaW5nCisgICAgICAgIC8vIHJlc3RvcmVkKSwgc2tpcCB0aGUga2V5IHNlcXVlbmNlIGFuZCBmcmFtZSBjb3VudGVyIGNoZWNrcyBidXQgY29udGludWUgdG8gdmVyaWZ5CisgICAgICAgIC8vIHRoZSB0YWcvTUlDLiBTdWNoIGEgZnJhbWUgaXMgbGF0ZXIgZmlsdGVyZWQgaW4gYFJ4RG9uZVRhc2tgIHdoaWNoIG9ubHkgYWxsb3dzIE1BQworICAgICAgICAvLyBEYXRhIFJlcXVlc3QgZnJhbWVzIGZyb20gYSBjaGlsZCBiZWluZyByZXN0b3JlZC4KKworICAgICAgICBpZiAoYU5laWdoYm9yLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGtleVNlcXVlbmNlIDwgYU5laWdoYm9yLT5HZXRLZXlTZXF1ZW5jZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChrZXlTZXF1ZW5jZSA9PSBhTmVpZ2hib3ItPkdldEtleVNlcXVlbmNlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChmcmFtZUNvdW50ZXIgKyAxKSA8IGFOZWlnaGJvci0+R2V0TGlua0ZyYW1lQ291bnRlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZyYW1lQ291bnRlciArIDEpID09IGFOZWlnaGJvci0+R2V0TGlua0ZyYW1lQ291bnRlcigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZHJvcCBkdXBsaWNhdGVkIGZyYW1lcworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFVQTElDQVRFRCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXh0QWRkcmVzcyA9ICZhU3JjQWRkci5tRXh0QWRkcmVzczsKKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtLZXlJZE1vZGUyOgorICAgICAgICBtYWNLZXkgPSBzTW9kZTJLZXk7CisgICAgICAgIGV4dEFkZHJlc3MgPSBzdGF0aWNfY2FzdDxjb25zdCBFeHRBZGRyZXNzICo+KCZzTW9kZTJFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfU0VDVVJJVFkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBHZW5lcmF0ZU5vbmNlKCpleHRBZGRyZXNzLCBmcmFtZUNvdW50ZXIsIHNlY3VyaXR5TGV2ZWwsIG5vbmNlKTsKKyAgICB0YWdMZW5ndGggPSBhRnJhbWUuR2V0Rm9vdGVyTGVuZ3RoKCkgLSBGcmFtZTo6a0Zjc1NpemU7CisKKyAgICBhZXNDY20uU2V0S2V5KG1hY0tleSwgMTYpOworICAgIGFlc0NjbS5Jbml0KGFGcmFtZS5HZXRIZWFkZXJMZW5ndGgoKSwgYUZyYW1lLkdldFBheWxvYWRMZW5ndGgoKSwgdGFnTGVuZ3RoLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisgICAgYWVzQ2NtLkhlYWRlcihhRnJhbWUuR2V0SGVhZGVyKCksIGFGcmFtZS5HZXRIZWFkZXJMZW5ndGgoKSk7CisgICAgYWVzQ2NtLlBheWxvYWQoYUZyYW1lLkdldFBheWxvYWQoKSwgYUZyYW1lLkdldFBheWxvYWQoKSwgYUZyYW1lLkdldFBheWxvYWRMZW5ndGgoKSwgZmFsc2UpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0YWcsICZ0YWdMZW5ndGgpOworCisgICAgVmVyaWZ5T3JFeGl0KG1lbWNtcCh0YWcsIGFGcmFtZS5HZXRGb290ZXIoKSwgdGFnTGVuZ3RoKSA9PSAwLCBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKworICAgIGlmICgoa2V5SWRNb2RlID09IEZyYW1lOjprS2V5SWRNb2RlMSkgJiYgKGFOZWlnaGJvci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpKQorICAgIHsKKyAgICAgICAgaWYgKGFOZWlnaGJvci0+R2V0S2V5U2VxdWVuY2UoKSAhPSBrZXlTZXF1ZW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgYU5laWdoYm9yLT5TZXRLZXlTZXF1ZW5jZShrZXlTZXF1ZW5jZSk7CisgICAgICAgICAgICBhTmVpZ2hib3ItPlNldE1sZUZyYW1lQ291bnRlcigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGFOZWlnaGJvci0+U2V0TGlua0ZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIgKyAxKTsKKworICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPiBrZXlNYW5hZ2VyLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBrZXlNYW5hZ2VyLlNldEN1cnJlbnRLZXlTZXF1ZW5jZShrZXlTZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhRnJhbWUuU2V0U2VjdXJpdHlWYWxpZCh0cnVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIG90TG9nRnVuY0VudHJ5TXNnKCIlIW90RXJyb3IhIiwgYUVycm9yKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKGFJbnN0YW5jZS0+bUxpbmtSYXcuSXNFbmFibGVkKCkpCisgICAgeworICAgICAgICBhSW5zdGFuY2UtPm1MaW5rUmF3Lkludm9rZVJlY2VpdmVEb25lKGFGcmFtZSwgYUVycm9yKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIHsKKyAgICAgICAgYUluc3RhbmNlLT5tVGhyZWFkTmV0aWYuR2V0TWFjKCkuUmVjZWl2ZURvbmVUYXNrKHN0YXRpY19jYXN0PEZyYW1lICo+KGFGcmFtZSksIGFFcnJvcik7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIE1hYzo6UmVjZWl2ZURvbmVUYXNrKEZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIEFkZHJlc3Mgc3JjYWRkcjsKKyAgICBBZGRyZXNzIGRzdGFkZHI7CisgICAgUGFuSWQgcGFuaWQ7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIG90TWFjV2hpdGVsaXN0RW50cnkgKndoaXRlbGlzdEVudHJ5OworICAgIGludDhfdCByc3NpOworICAgIGJvb2wgcmVjZWl2ZSA9IGZhbHNlOworICAgIHVpbnQ4X3QgY29tbWFuZElkOworICAgIGJvb2wgc2NoZWR1bGVOZXh0VHJhc21pc3Npb24gPSBmYWxzZTsKKyAgICBvdEVycm9yIGVycm9yID0gYUVycm9yOworCisgICAgbUNvdW50ZXJzLm1SeFRvdGFsKys7CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEKTsKKworICAgIGFGcmFtZS0+U2V0U2VjdXJpdHlWYWxpZChmYWxzZSk7CisKKyAgICBpZiAobVBjYXBDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGFGcmFtZS0+bURpZFRYID0gZmFsc2U7CisgICAgICAgIG1QY2FwQ2FsbGJhY2soYUZyYW1lLCBtUGNhcENhbGxiYWNrQ29udGV4dCk7CisgICAgfQorCisgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCBmcmFtZSBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFkIGFueSBjb250ZW50cyBvZgorICAgIC8vIHRoZSBidWZmZXIgcmVjZWl2ZWQgZnJvbSB0aGUgcmFkaW8uCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFGcmFtZS0+VmFsaWRhdGVQc2R1KCkpOworCisgICAgYUZyYW1lLT5HZXRTcmNBZGRyKHNyY2FkZHIpOworICAgIG5laWdoYm9yID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXROZWlnaGJvcihzcmNhZGRyKTsKKworICAgIHN3aXRjaCAoc3JjYWRkci5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBzaXplb2YoU2hvcnRBZGRyZXNzKToKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBmcmFtZSBmcm9tIHNob3J0IGFkZHJlc3MgMHglMDR4Iiwgc3JjYWRkci5tU2hvcnRBZGRyZXNzKTsKKworICAgICAgICBpZiAobmVpZ2hib3IgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1IpOworICAgICAgICB9CisKKyAgICAgICAgc3JjYWRkci5tTGVuZ3RoID0gc2l6ZW9mKHNyY2FkZHIubUV4dEFkZHJlc3MpOworICAgICAgICBzcmNhZGRyLm1FeHRBZGRyZXNzID0gbmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHNpemVvZihFeHRBZGRyZXNzKToKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUyk7CisgICAgfQorCisgICAgLy8gRHVwbGljYXRlIEFkZHJlc3MgUHJvdGVjdGlvbgorICAgIGlmIChtZW1jbXAoJnNyY2FkZHIubUV4dEFkZHJlc3MsICZtRXh0QWRkcmVzcywgc2l6ZW9mKHNyY2FkZHIubUV4dEFkZHJlc3MpKSA9PSAwKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU09VUkNFX0FERFJFU1MpOworICAgIH0KKworICAgIC8vIFNvdXJjZSBXaGl0ZWxpc3QgUHJvY2Vzc2luZworICAgIGlmIChzcmNhZGRyLm1MZW5ndGggIT0gMCAmJiBtV2hpdGVsaXN0LklzRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCh3aGl0ZWxpc3RFbnRyeSA9IG1XaGl0ZWxpc3QuRmluZChzcmNhZGRyLm1FeHRBZGRyZXNzKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9XSElURUxJU1RfRklMVEVSRUQpOworCisgICAgICAgIGlmIChtV2hpdGVsaXN0LkdldEZpeGVkUnNzaSgqd2hpdGVsaXN0RW50cnksIHJzc2kpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFGcmFtZS0+bVBvd2VyID0gcnNzaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNvdXJjZSBCbGFja2xpc3QgUHJvY2Vzc2luZworICAgIGlmIChzcmNhZGRyLm1MZW5ndGggIT0gMCAmJiBtQmxhY2tsaXN0LklzRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChtQmxhY2tsaXN0LkZpbmQoc3JjYWRkci5tRXh0QWRkcmVzcykpID09IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQkxBQ0tMSVNUX0ZJTFRFUkVEKTsKKyAgICB9CisKKyAgICAvLyBEZXN0aW5hdGlvbiBBZGRyZXNzIEZpbHRlcmluZworICAgIGFGcmFtZS0+R2V0RHN0QWRkcihkc3RhZGRyKTsKKworICAgIHN3aXRjaCAoZHN0YWRkci5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBzaXplb2YoU2hvcnRBZGRyZXNzKToKKyAgICAgICAgYUZyYW1lLT5HZXREc3RQYW5JZChwYW5pZCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgocGFuaWQgPT0ga1Nob3J0QWRkckJyb2FkY2FzdCB8fCBwYW5pZCA9PSBtUGFuSWQpICYmCisgICAgICAgICAgICAgICAgICAgICAoKG1SeE9uV2hlbklkbGUgJiYgZHN0YWRkci5tU2hvcnRBZGRyZXNzID09IGtTaG9ydEFkZHJCcm9hZGNhc3QpIHx8CisgICAgICAgICAgICAgICAgICAgICAgZHN0YWRkci5tU2hvcnRBZGRyZXNzID09IG1TaG9ydEFkZHJlc3MpLCBlcnJvciA9IE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2l6ZW9mKEV4dEFkZHJlc3MpOgorICAgICAgICBhRnJhbWUtPkdldERzdFBhbklkKHBhbmlkKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBhbmlkID09IG1QYW5JZCAmJgorICAgICAgICAgICAgICAgICAgICAgbWVtY21wKCZkc3RhZGRyLm1FeHRBZGRyZXNzLCAmbUV4dEFkZHJlc3MsIHNpemVvZihkc3RhZGRyLm1FeHRBZGRyZXNzKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfREVTVElOQVRJT05fQUREUkVTU19GSUxURVJFRCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEluY3JlbWVudCBjb3VudGVycworICAgIGlmIChkc3RhZGRyLm1TaG9ydEFkZHJlc3MgPT0ga1Nob3J0QWRkckJyb2FkY2FzdCkKKyAgICB7CisgICAgICAgIC8vIEJyb2FkY2FzdCBmcmFtZQorICAgICAgICBtQ291bnRlcnMubVJ4QnJvYWRjYXN0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFVuaWNhc3QgZnJhbWUKKyAgICAgICAgbUNvdW50ZXJzLm1SeFVuaWNhc3QrKzsKKyAgICB9CisKKyAgICAvLyBTZWN1cml0eSBQcm9jZXNzaW5nCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFByb2Nlc3NSZWNlaXZlU2VjdXJpdHkoKmFGcmFtZSwgc3JjYWRkciwgbmVpZ2hib3IpKTsKKworICAgIGlmIChuZWlnaGJvciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmVpZ2hib3ItPkdldExpbmtJbmZvKCkuQWRkUnNzKEdldE5vaXNlRmxvb3IoKSwgYUZyYW1lLT5tUG93ZXIpOworCisgICAgICAgIGlmIChhRnJhbWUtPkdldFNlY3VyaXR5RW5hYmxlZCgpID09IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobmVpZ2hib3ItPkdldFN0YXRlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVWYWxpZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlUmVzdG9yZWQ6CisgICAgICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVDaGlsZFVwZGF0ZVJlcXVlc3Q6CisKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGFjY2VwdCBhICJNQUMgRGF0YSBSZXF1ZXN0IiBmcmFtZSBmcm9tIGEgY2hpbGQgYmVpbmcgcmVzdG9yZWQuCisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZS0+R2V0VHlwZSgpID09IEZyYW1lOjprRmNmRnJhbWVNYWNDbWQsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZS0+R2V0Q29tbWFuZElkKGNvbW1hbmRJZCkgPT0gT1RfRVJST1JfTk9ORSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoY29tbWFuZElkID09IEZyYW1lOjprTWFjQ21kRGF0YVJlcXVlc3QsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfVU5LTk9XTl9ORUlHSEJPUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKG1PcGVyYXRpb24pCisgICAgeworICAgIGNhc2Uga09wZXJhdGlvbkFjdGl2ZVNjYW46CisgICAgICAgIGlmIChhRnJhbWUtPkdldFR5cGUoKSA9PSBGcmFtZTo6a0ZjZkZyYW1lQmVhY29uKQorICAgICAgICB7CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4QmVhY29uKys7CisgICAgICAgICAgICBtQWN0aXZlU2NhbkhhbmRsZXIobVNjYW5Db250ZXh0LCBhRnJhbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUNvdW50ZXJzLm1SeE90aGVyKys7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChkc3RhZGRyLm1MZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbVdhaXRpbmdGb3JEYXRhID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghbVJ4T25XaGVuSWRsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVjZWl2ZVRpbWVyLlN0b3AoKTsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZU5leHRUcmFzbWlzc2lvbiA9IHRydWU7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworICAgICAgICAgICAgICAgIG1EZWxheVNsZWVwID0gYUZyYW1lLT5HZXRGcmFtZVBlbmRpbmcoKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChhRnJhbWUtPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIEZyYW1lOjprRmNmRnJhbWVNYWNDbWQ6CisgICAgICAgICAgICBpZiAoSGFuZGxlTWFjQ29tbWFuZCgqYUZyYW1lKSA9PSBPVF9FUlJPUl9EUk9QKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVjZWl2ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZyYW1lOjprRmNmRnJhbWVCZWFjb246CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4QmVhY29uKys7CisgICAgICAgICAgICByZWNlaXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRnJhbWU6OmtGY2ZGcmFtZURhdGE6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RGF0YSsrOworICAgICAgICAgICAgcmVjZWl2ZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeE90aGVyKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWNlaXZlKQorICAgICAgICB7CisgICAgICAgICAgICBvdER1bXBEZWJnTWFjKEdldEluc3RhbmNlKCksICJSWCIsIGFGcmFtZS0+R2V0SGVhZGVyKCksIGFGcmFtZS0+R2V0TGVuZ3RoKCkpOworCisgICAgICAgICAgICBmb3IgKFJlY2VpdmVyICpyZWNlaXZlciA9IG1SZWNlaXZlSGVhZDsgcmVjZWl2ZXI7IHJlY2VpdmVyID0gcmVjZWl2ZXItPm1OZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY2VpdmVyLT5IYW5kbGVSZWNlaXZlZEZyYW1lKCphRnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKHNjaGVkdWxlTmV4dFRyYXNtaXNzaW9uKQorICAgIHsKKyAgICAgICAgU3RhcnRPcGVyYXRpb24oKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGlmIChhRnJhbWUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGcmFtZSByeCBmYWlsZWQsIGVycm9yOiVzIiwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHN0cmluZ0J1ZmZlcltGcmFtZTo6a0luZm9TdHJpbmdTaXplXTsKKworICAgICAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGcmFtZSByeCBmYWlsZWQsIGVycm9yOiVzLCAlcyIsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgYUZyYW1lLT5Ub0luZm9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSkpOworCisgICAgICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoc3RyaW5nQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9TRUNVUklUWToKKyAgICAgICAgICAgIG1Db3VudGVycy5tUnhFcnJTZWMrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfRkNTOgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeEVyckZjcysrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT19GUkFNRV9SRUNFSVZFRDoKKyAgICAgICAgICAgIG1Db3VudGVycy5tUnhFcnJOb0ZyYW1lKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX1VOS05PV05fTkVJR0hCT1I6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJyVW5rbm93bk5laWdoYm9yKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU09VUkNFX0FERFJFU1M6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJySW52YWxpZFNyY0FkZHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfV0hJVEVMSVNUX0ZJTFRFUkVEOgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeFdoaXRlbGlzdEZpbHRlcmVkKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX0RFU1RJTkFUSU9OX0FERFJFU1NfRklMVEVSRUQ6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RGVzdEFkZHJGaWx0ZXJlZCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9EVVBMSUNBVEVEOgorICAgICAgICAgICAgbUNvdW50ZXJzLm1SeER1cGxpY2F0ZWQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJyT3RoZXIrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitvdEVycm9yIE1hYzo6SGFuZGxlTWFjQ29tbWFuZChGcmFtZSAmYUZyYW1lKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY29tbWFuZElkOworCisgICAgYUZyYW1lLkdldENvbW1hbmRJZChjb21tYW5kSWQpOworCisgICAgc3dpdGNoIChjb21tYW5kSWQpCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtNYWNDbWRCZWFjb25SZXF1ZXN0OgorICAgICAgICBtQ291bnRlcnMubVJ4QmVhY29uUmVxdWVzdCsrOworICAgICAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIEJlYWNvbiBSZXF1ZXN0Iik7CisKKyAgICAgICAgaWYgKG1CZWFjb25zRW5hYmxlZAorI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX1dIRU5fSk9JTkFCTEUKKyAgICAgICAgICAgIHx8IElzQmVhY29uSm9pbmFibGUoKQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX1dIRU5fSk9JTkFCTEUKKyAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBtVHJhbnNtaXRCZWFjb24gPSB0cnVlOworICAgICAgICAgICAgU3RhcnRPcGVyYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIGNhc2UgRnJhbWU6OmtNYWNDbWREYXRhUmVxdWVzdDoKKyAgICAgICAgbUNvdW50ZXJzLm1SeERhdGFQb2xsKys7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgbUNvdW50ZXJzLm1SeE90aGVyKys7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWFjOjpTZXRQY2FwQ2FsbGJhY2sob3RMaW5rUGNhcENhbGxiYWNrIGFQY2FwQ2FsbGJhY2ssIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgbVBjYXBDYWxsYmFjayA9IGFQY2FwQ2FsbGJhY2s7CisgICAgbVBjYXBDYWxsYmFja0NvbnRleHQgPSBhQ2FsbGJhY2tDb250ZXh0OworfQorCitib29sIE1hYzo6SXNQcm9taXNjdW91cyh2b2lkKQoreworICAgIHJldHVybiBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKEdldEluc3RhbmNlKCkpOworfQorCit2b2lkIE1hYzo6U2V0UHJvbWlzY3VvdXMoYm9vbCBhUHJvbWlzY3VvdXMpCit7CisgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhHZXRJbnN0YW5jZSgpLCBhUHJvbWlzY3VvdXMpOworICAgIFN0YXJ0T3BlcmF0aW9uKCk7Cit9CisKK2Jvb2wgTWFjOjpSYWRpb1N1cHBvcnRzQ3NtYUJhY2tvZmYodm9pZCkKK3sKKyAgICAvKiBDaGVjayBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgICAqICAgMSkgUmFkaW8gcHJvdmlkZXMgdGhlIENTTUEgYmFja29mZiBjYXBhYmlsaXR5IChpLmUuLCBgT1RfUkFESU9fQ0FQU19DU01BX0JBQ0tPRkZgIGJpdCBpcyBzZXQpIG9yOworICAgICAqICAgMikgSXQgcHJvdmlkZXMgYE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFU2Agd2hpY2ggaW5kaWNhdGVzIHN1cHBvcnQgZm9yIE1BQyByZXRyaWVzIGFsb25nIHdpdGggQ1NNQSBiYWNrb2ZmLgorICAgICAqLworICAgIHJldHVybiAob3RQbGF0UmFkaW9HZXRDYXBzKEdldEluc3RhbmNlKCkpICYgKE9UX1JBRElPX0NBUFNfVFJBTlNNSVRfUkVUUklFUyB8IE9UX1JBRElPX0NBUFNfQ1NNQV9CQUNLT0ZGKSkgIT0gMDsKK30KKworYm9vbCBNYWM6OlJhZGlvU3VwcG9ydHNSZXRyaWVzKHZvaWQpCit7CisgICAgcmV0dXJuIChvdFBsYXRSYWRpb0dldENhcHMoR2V0SW5zdGFuY2UoKSkgJiBPVF9SQURJT19DQVBTX1RSQU5TTUlUX1JFVFJJRVMpICE9IDA7Cit9CisKK3ZvaWQgTWFjOjpGaWxsTWFjQ291bnRlcnNUbHYoTmV0d29ya0RpYWdub3N0aWM6Ok1hY0NvdW50ZXJzVGx2ICZhTWFjQ291bnRlcnMpIGNvbnN0Cit7CisgICAgYU1hY0NvdW50ZXJzLlNldElmSW5Vbmtub3duUHJvdG9zKG1Db3VudGVycy5tUnhPdGhlcik7CisgICAgYU1hY0NvdW50ZXJzLlNldElmSW5FcnJvcnMobUNvdW50ZXJzLm1SeEVyck5vRnJhbWUgKyBtQ291bnRlcnMubVJ4RXJyVW5rbm93bk5laWdoYm9yICsgbUNvdW50ZXJzLm1SeEVyckludmFsaWRTcmNBZGRyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ291bnRlcnMubVJ4RXJyU2VjICsgbUNvdW50ZXJzLm1SeEVyckZjcyArIG1Db3VudGVycy5tUnhFcnJPdGhlcik7CisgICAgYU1hY0NvdW50ZXJzLlNldElmT3V0RXJyb3JzKG1Db3VudGVycy5tVHhFcnJDY2EpOworICAgIGFNYWNDb3VudGVycy5TZXRJZkluVWNhc3RQa3RzKG1Db3VudGVycy5tUnhVbmljYXN0KTsKKyAgICBhTWFjQ291bnRlcnMuU2V0SWZJbkJyb2FkY2FzdFBrdHMobUNvdW50ZXJzLm1SeEJyb2FkY2FzdCk7CisgICAgYU1hY0NvdW50ZXJzLlNldElmSW5EaXNjYXJkcyhtQ291bnRlcnMubVJ4V2hpdGVsaXN0RmlsdGVyZWQgKyBtQ291bnRlcnMubVJ4RGVzdEFkZHJGaWx0ZXJlZCArIG1Db3VudGVycy5tUnhEdXBsaWNhdGVkKTsKKyAgICBhTWFjQ291bnRlcnMuU2V0SWZPdXRVY2FzdFBrdHMobUNvdW50ZXJzLm1UeFVuaWNhc3QpOworICAgIGFNYWNDb3VudGVycy5TZXRJZk91dEJyb2FkY2FzdFBrdHMobUNvdW50ZXJzLm1UeEJyb2FkY2FzdCk7CisgICAgYU1hY0NvdW50ZXJzLlNldElmT3V0RGlzY2FyZHMoMCk7Cit9CisKK3ZvaWQgTWFjOjpSZXNldENvdW50ZXJzKHZvaWQpCit7CisgICAgbWVtc2V0KCZtQ291bnRlcnMsIDAsIHNpemVvZihtQ291bnRlcnMpKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX1dIRU5fSk9JTkFCTEUKK2Jvb2wgTWFjOjpJc0JlYWNvbkpvaW5hYmxlKHZvaWQpCit7CisgICAgdWludDhfdCBudW1VbnNlY3VyZVBvcnRzOworICAgIGJvb2wgam9pbmFibGUgPSBmYWxzZTsKKworICAgIEdldE5ldGlmKCkuR2V0SXA2RmlsdGVyKCkuR2V0VW5zZWN1cmVQb3J0cyhudW1VbnNlY3VyZVBvcnRzKTsKKworICAgIGlmIChudW1VbnNlY3VyZVBvcnRzKQorICAgIHsKKyAgICAgICAgam9pbmFibGUgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBqb2luYWJsZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBqb2luYWJsZTsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQkVBQ09OX1JTUF9XSEVOX0pPSU5BQkxFCisKK01hYyAmTWFjOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBNYWMgJm1hYyA9ICpzdGF0aWNfY2FzdDxNYWMgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTWFjICZtYWMgPSBvdEdldEluc3RhbmNlKCktPm1UaHJlYWROZXRpZi5HZXRNYWMoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIG1hYzsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjLmhwcCBiL3NyYy9jb3JlL21hYy9tYWMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzUyODUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjLmhwcApAQCAtMCwwICsxLDc2OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IE1BQy4KKyAqLworCisjaWZuZGVmIE1BQ19IUFBfCisjZGVmaW5lIE1BQ19IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvbnRleHQuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGFza2xldC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2JsYWNrbGlzdC5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWFjL21hY193aGl0ZWxpc3QuaHBwIgorI2luY2x1ZGUgInRocmVhZC9rZXlfbWFuYWdlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpY190bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgTWxlIHsgY2xhc3MgTWxlUm91dGVyOyB9CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tYWMKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IE1BQworICoKKyAqIEB7CisgKgorICovCisKK25hbWVzcGFjZSBNYWMgeworCisvKioKKyAqIFByb3RvY29sIHBhcmFtZXRlcnMgYW5kIGNvbnN0YW50cy4KKyAqCisgKi8KK2VudW0KK3sKKyAgICBrTWluQkUgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgICAgICAgICAgIC8vLzwgbWFjTWluQkUgKElFRUUgODAyLjE1LjQtMjAwNikKKyAgICBrTWF4QkUgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgICAgICAgICAgIC8vLzwgbWFjTWF4QkUgKElFRUUgODAyLjE1LjQtMjAwNikKKyAgICBrTWF4Q1NNQUJhY2tvZmZzICAgICAgPSA0LCAgICAgICAgICAgICAgICAgICAgIC8vLzwgbWFjTWF4Q1NNQUJhY2tvZmZzIChJRUVFIDgwMi4xNS40LTIwMDYpCisgICAga1VuaXRCYWNrb2ZmUGVyaW9kICAgID0gMjAsICAgICAgICAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBzeW1ib2xzIChJRUVFIDgwMi4xNS40LTIwMDYpCisKKyAgICBrTWluQmFja29mZiAgICAgICAgICAgPSAxLCAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWluaW11bSBiYWNrb2ZmIChtaWxsaXNlY29uZHMpLgorCisgICAga0Fja1RpbWVvdXQgICAgICAgICAgID0gMTYsICAgICAgICAgICAgICAgICAgICAvLy88IFRpbWVvdXQgZm9yIHdhaXRpbmcgb24gYW4gQUNLIChtaWxsaXNlY29uZHMpLgorICAgIGtEYXRhUG9sbFRpbWVvdXQgICAgICA9IDEwMCwgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lb3V0IGZvciByZWNlaXZpbmcgRGF0YSBGcmFtZSAobWlsbGlzZWNvbmRzKS4KKyAgICBrU2xlZXBEZWxheSAgICAgICAgICAgPSAzMDAsICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4IHNsZWVwIGRlbGF5IHdoZW4gZnJhbWUgaXMgcGVuZGluZyAobWlsbGlzZWNvbmRzKS4KKyAgICBrTm9uY2VTaXplICAgICAgICAgICAgPSAxMywgICAgICAgICAgICAgICAgICAgIC8vLzwgU2l6ZSBvZiBJRUVFIDgwMi4xNS40IE5vbmNlIChieXRlcykuCisKKyAgICBrU2NhbkNoYW5uZWxzQWxsICAgICAgPSBPVF9DSEFOTkVMX0FMTCwgICAgICAgIC8vLzwgQWxsIGNoYW5uZWxzLgorICAgIGtTY2FuRHVyYXRpb25EZWZhdWx0ICA9IDMwMCwgICAgICAgICAgICAgICAgICAgLy8vPCBEZWZhdWx0IGludGVydmFsIGJldHdlZW4gY2hhbm5lbHMgKG1pbGxpc2Vjb25kcykuCisKKyAgICAvKioKKyAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBNQUMgbGF5ZXIgdHggYXR0ZW1wdHMgZm9yIGFuIG91dGJvdW5kIGRpcmVjdCBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIGtEaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHMgICA9IE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19ESVJFQ1QsCisKKyAgICAvKioKKyAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBNQUMgbGF5ZXIgdHggYXR0ZW1wdHMgZm9yIGFuIG91dGJvdW5kIGluZGlyZWN0IGZyYW1lIChmb3IgYSBzbGVlcHkgY2hpbGQpIGFmdGVyIHJlY2VpdmluZworICAgICAqIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQgKGRhdGEgcG9sbCkgZnJvbSB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBrSW5kaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHMgPSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfSU5ESVJFQ1RfUEVSX1BPTEwsCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIE1BQyByZWNlaXZlciBjbGllbnQuCisgKgorICovCitjbGFzcyBSZWNlaXZlcjogcHVibGljIENvbnRleHQKK3sKKyAgICBmcmllbmQgY2xhc3MgTWFjOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGEgTUFDIGZyYW1lIGlzIHJlY2VpdmVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlY2VpdmVyIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgcmVjZWl2ZXIgY2xpZW50IG9iamVjdC4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKlJlY2VpdmVGcmFtZUhhbmRsZXIpKFJlY2VpdmVyICZhUmVjZWl2ZXIsIEZyYW1lICZhRnJhbWUpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCBvbiBhIGRhdGEgcmVxdWVzdCBjb21tYW5kIChkYXRhIHBvbGwpIHRpbWVvdXQsIGkuZS4sIHdoZW4gdGhlIGFjayBpbiByZXNwb25zZSB0bworICAgICAqIGEgZGF0YSByZXF1ZXN0IGNvbW1hbmQgaW5kaWNhdGVkIGEgZnJhbWUgaXMgcGVuZGluZywgYnV0IG5vIGZyYW1lIHdhcyByZWNlaXZlZCBhZnRlciBga0RhdGFQb2xsVGltZW91dGAgaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVjZWl2ZXIgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgcmVjZWl2ZXIgY2xpZW50IG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKkRhdGFQb2xsVGltZW91dEhhbmRsZXIpKFJlY2VpdmVyICZhUmVjZWl2ZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgTUFDIHJlY2VpdmVyIGNsaWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZWNlaXZlRnJhbWVIYW5kbGVyICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbiBNQUMgZnJhbWUgcmVjZXB0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFQb2xsVGltZW91dEhhbmRsZXIgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgb24gZGF0YSBwb2xsIHRpbWVvdXQgKG1heSBiZSBzZXQgdG8gTlVMTCkuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFJlY2VpdmVyKFJlY2VpdmVGcmFtZUhhbmRsZXIgYVJlY2VpdmVGcmFtZUhhbmRsZXIsIERhdGFQb2xsVGltZW91dEhhbmRsZXIgYVBvbGxUaW1lb3V0SGFuZGxlciwgdm9pZCAqYUNvbnRleHQpOgorICAgICAgICBDb250ZXh0KGFDb250ZXh0KSwKKyAgICAgICAgbVJlY2VpdmVGcmFtZUhhbmRsZXIoYVJlY2VpdmVGcmFtZUhhbmRsZXIpLAorICAgICAgICBtUG9sbFRpbWVvdXRIYW5kbGVyKGFQb2xsVGltZW91dEhhbmRsZXIpLAorICAgICAgICBtTmV4dChOVUxMKSB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgSGFuZGxlUmVjZWl2ZWRGcmFtZShGcmFtZSAmZnJhbWUpIHsgbVJlY2VpdmVGcmFtZUhhbmRsZXIoKnRoaXMsIGZyYW1lKTsgfQorCisgICAgdm9pZCBIYW5kbGVEYXRhUG9sbFRpbWVvdXQodm9pZCkgeworICAgICAgICBpZiAobVBvbGxUaW1lb3V0SGFuZGxlciAhPSBOVUxMKSB7CisgICAgICAgICAgICBtUG9sbFRpbWVvdXRIYW5kbGVyKCp0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlY2VpdmVGcmFtZUhhbmRsZXIgbVJlY2VpdmVGcmFtZUhhbmRsZXI7CisgICAgRGF0YVBvbGxUaW1lb3V0SGFuZGxlciBtUG9sbFRpbWVvdXRIYW5kbGVyOworICAgIFJlY2VpdmVyICptTmV4dDsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgTUFDIHNlbmRlciBjbGllbnQuCisgKgorICovCitjbGFzcyBTZW5kZXI6IHB1YmxpYyBDb250ZXh0Cit7CisgICAgZnJpZW5kIGNsYXNzIE1hYzsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiB0aGUgTUFDIGlzIGFib3V0IHRvIHRyYW5zbWl0IHRoZSBmcmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW5kZXIgICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIHNlbmRlciBjbGllbnQgb2JqZWN0LgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIGZyYW1lIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgb3RFcnJvcigqRnJhbWVSZXF1ZXN0SGFuZGxlcikoU2VuZGVyICZhU2VuZGVyLCBGcmFtZSAmYUZyYW1lKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiB0aGUgTUFDIGlzIGRvbmUgc2VuZGluZyB0aGUgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VuZGVyICAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBzZW5kZXIgY2xpZW50IG9iamVjdC4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBmcmFtZSBidWZmZXIgdGhhdCB3YXMgc2VudC4KKyAgICAgKiBAcGFyYW1baW5dICBhRXJyb3IgICAgVGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBNU0RVIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKlNlbnRGcmFtZUhhbmRsZXIpKFNlbmRlciAmYVNlbmRlciwgRnJhbWUgJmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgTUFDIHNlbmRlciBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVSZXF1ZXN0SGFuZGxlciAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhYm91dCB0byBzZW5kIGEgTUFDIGZyYW1lLgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW50RnJhbWVIYW5kbGVyICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGRvbmUgc2VuZGluZyB0aGUgZnJhbWUuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFNlbmRlcihGcmFtZVJlcXVlc3RIYW5kbGVyIGFGcmFtZVJlcXVlc3RIYW5kbGVyLCBTZW50RnJhbWVIYW5kbGVyIGFTZW50RnJhbWVIYW5kbGVyLCB2b2lkICphQ29udGV4dCk6CisgICAgICAgIENvbnRleHQoYUNvbnRleHQpLAorICAgICAgICBtRnJhbWVSZXF1ZXN0SGFuZGxlcihhRnJhbWVSZXF1ZXN0SGFuZGxlciksCisgICAgICAgIG1TZW50RnJhbWVIYW5kbGVyKGFTZW50RnJhbWVIYW5kbGVyKSwKKyAgICAgICAgbU5leHQoTlVMTCkgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBvdEVycm9yIEhhbmRsZUZyYW1lUmVxdWVzdChGcmFtZSAmZnJhbWUpIHsgcmV0dXJuIG1GcmFtZVJlcXVlc3RIYW5kbGVyKCp0aGlzLCBmcmFtZSk7IH0KKyAgICB2b2lkIEhhbmRsZVNlbnRGcmFtZShGcmFtZSAmZnJhbWUsIG90RXJyb3IgZXJyb3IpIHsgbVNlbnRGcmFtZUhhbmRsZXIoKnRoaXMsIGZyYW1lLCBlcnJvcik7IH0KKworICAgIEZyYW1lUmVxdWVzdEhhbmRsZXIgbUZyYW1lUmVxdWVzdEhhbmRsZXI7CisgICAgU2VudEZyYW1lSGFuZGxlciBtU2VudEZyYW1lSGFuZGxlcjsKKyAgICBTZW5kZXIgKm1OZXh0OworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIElFRUUgODAyLjE1LjQgTUFDLgorICoKKyAqLworY2xhc3MgTWFjOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgTUFDIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVzaW5nIHRoaXMgTUFDLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgTWFjKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gSUVFRSA4MDIuMTUuNCBCZWFjb24gZHVyaW5nIGFuIEFjdGl2ZSBTY2FuLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFCZWFjb25GcmFtZSAgIEEgcG9pbnRlciB0byB0aGUgQmVhY29uIGZyYW1lLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqQWN0aXZlU2NhbkhhbmRsZXIpKHZvaWQgKmFDb250ZXh0LCBGcmFtZSAqYUJlYWNvbkZyYW1lKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyBhbiBJRUVFIDgwMi4xNS40IEFjdGl2ZSBTY2FuLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjYW5DaGFubmVscyAgQSBiaXQgdmVjdG9yIGluZGljYXRpbmcgd2hpY2ggY2hhbm5lbHMgdG8gc2Nhbi4KKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgc2Nhbm5pbmcgZWFjaCBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uIHJlY2VpdmluZyBhbiBJRUVFIDgwMi4xNS40IEJlYWNvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFjdGl2ZVNjYW4odWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwgQWN0aXZlU2NhbkhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGEgYmVhY29uIGZyYW1lIHRvIGFuIGFjdGl2ZSBzY2FuIHJlc3VsdCBvZiB0eXBlIGBvdEFjdGl2ZVNjYW5SZXN1bHRgLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJlYWNvbkZyYW1lICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhIGJlYWNvbiBmcmFtZS4KKyAgICAgKiBAcGFyYW1bb3V0XSBhUmVzdWx0ICAgICAgICAgICAgICAgICAgQSByZWZlcmVuY2UgdG8gYG90QWN0aXZlU2NhblJlc3VsdGAgd2hlcmUgdGhlIHJlc3VsdCBpcyBzdG9yZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBTdWNjZXNzZnVsbHkgY29udmVydGVkIHRoZSBiZWFjb24gaW50byBhY3RpdmUgc2NhbiByZXN1bHQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICAgVGhlIEBhIGFCZWFjb25GcmFtZSB3YXMgTlVMTC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX1BBUlNFICAgICAgICAgICBGYWlsZWQgcGFyc2luZyB0aGUgYmVhY29uIGZyYW1lLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBDb252ZXJ0QmVhY29uVG9BY3RpdmVTY2FuUmVzdWx0KEZyYW1lICphQmVhY29uRnJhbWUsIG90QWN0aXZlU2NhblJlc3VsdCAmYVJlc3VsdCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIGR1cmluZyBhbiAiRW5lcmd5IFNjYW4iIHdoZW4gdGhlIHJlc3VsdCBmb3IgYSBjaGFubmVsIGlzIHJlYWR5IG9yIHRoZSBzY2FuCisgICAgICogY29tcGxldGVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgQSB2YWxpZCBwb2ludGVyIHRvIHRoZSBlbmVyZ3kgc2NhbiByZXN1bHQgaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIHRoZSBlbmVyZ3kgc2NhbiBjb21wbGV0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpFbmVyZ3lTY2FuSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgYW4gSUVFRSA4MDIuMTUuNCBFbmVyZ3kgU2Nhbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTY2FuQ2hhbm5lbHMgICAgIEEgYml0IHZlY3RvciBpbmRpY2F0aW5nIG9uIHdoaWNoIGNoYW5uZWxzIHRvIHBlcmZvcm0gZW5lcmd5IHNjYW4uCisgICAgICogQHBhcmFtW2luXSAgYVNjYW5EdXJhdGlvbiAgICAgVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwZW5kIHNjYW5uaW5nIGVhY2ggY2hhbm5lbC4KKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgdG8gcGFzcyBvbiBzY2FuIHJlc3VsdCBvciBpbmRpY2F0ZSBzY2FuIGNvbXBsZXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBBY2NlcHRlZCB0aGUgRW5lcmd5IFNjYW4gcmVxdWVzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0JVU1kgIENvdWxkIG5vdCBzdGFydCB0aGUgZW5lcmd5IHNjYW4uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEVuZXJneVNjYW4odWludDMyX3QgYVNjYW5DaGFubmVscywgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwgRW5lcmd5U2NhbkhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGUgZW5lcmd5IHNjYW4gZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwgaXMgY29tcGxldGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5lcmd5U2Nhbk1heFJzc2kgIFRoZSBtYXhpbXVtIFJTU0kgZW5jb3VudGVyZWQgb24gdGhlIHNjYW5uZWQgY2hhbm5lbC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRW5lcmd5U2NhbkRvbmUoaW50OF90IGFFbmVyZ3lTY2FuTWF4UnNzaSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgSUVFRSA4MDIuMTUuNCBCZWFjb24gdHJhbnNtaXNzaW9ucyBhcmUgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSBpZiBJRUVFIDgwMi4xNS40IEJlYWNvbiB0cmFuc21pc3Npb25zIGFyZSBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQmVhY29uRW5hYmxlZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQmVhY29uc0VuYWJsZWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMvZGlzYWJsZXMgSUVFRSA4MDIuMTUuNCBCZWFjb24gdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIHRvIGVuYWJsZSBJRUVFIDgwMi4xNS40IEJlYWNvbiB0cmFuc21pc3Npb25zLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEJlYWNvbkVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtQmVhY29uc0VuYWJsZWQgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHJ4LW9uLXdoZW4taWRsZSBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgcngtb24td2hlbi1pZGxlIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgcngtb24td2hlbi1pZGxlIGlzIG5vdCBlbmFibGVkLgorICAgICAqLworICAgIGJvb2wgR2V0UnhPbldoZW5JZGxlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1SeE9uV2hlbklkbGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHJ4LW9uLXdoZW4taWRsZSBtb2RlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJ4T25XaGVuSWRsZSAgVGhlIHJ4LW9uLXdoZW4taWRsZSBtb2RlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSeE9uV2hlbklkbGUoYm9vbCBhUnhPbldoZW5JZGxlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIG5ldyBNQUMgcmVjZWl2ZXIgY2xpZW50LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlY2VpdmVyICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIHJlY2VpdmVyIGNsaWVudC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgdGhlIHJlY2VpdmVyLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHJlY2VpdmVyIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlZ2lzdGVyUmVjZWl2ZXIoUmVjZWl2ZXIgJmFSZWNlaXZlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBuZXcgTUFDIHNlbmRlciBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VuZGVyICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIHNlbmRlciBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIHRoZSBzZW5kZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgc2VuZGVyIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRGcmFtZVJlcXVlc3QoU2VuZGVyICZhU2VuZGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIHJhbmRvbSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUV4dEFkZHJlc3MgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgZ2VuZXJhdGVkIEV4dGVuZGVkIEFkZHJlc3MgaXMgcGxhY2VkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZW5lcmF0ZUV4dEFkZHJlc3MoRXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgRXh0QWRkcmVzcyAqR2V0RXh0QWRkcmVzcyh2b2lkKSBjb25zdCB7IHJldHVybiAmbUV4dEFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcworICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEV4dEFkZHJlc3MoY29uc3QgRXh0QWRkcmVzcyAmYUV4dEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgSGFzaCBNYWMgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEhhc2ggTWFjIEFkZHJlc3MgaXMgdGhlIGZpcnN0IDY0IGJpdHMgb2YgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgU0hBLTI1NiBvdmVyIGZhY3RvcnktYXNzaWduZWQKKyAgICAgKiBJRUVFIEVVSS02NCwgd2hpY2ggaXMgdXNlZCBhcyBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgZHVyaW5nIGNvbW1pc3Npb25pbmcgcHJvY2Vzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhSGFzaE1hY0FkZHJlc3MgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBIYXNoIE1hYyBBZGRyZXNzIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgR2V0SGFzaE1hY0FkZHJlc3MoRXh0QWRkcmVzcyAqYUhhc2hNYWNBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IFNob3J0IEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBTaG9ydEFkZHJlc3MgR2V0U2hvcnRBZGRyZXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TaG9ydEFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBJRUVFIDgwMi4xNS40IFNob3J0IEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIElFRUUgODAyLjE1LjQgU2hvcnQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0U2hvcnRBZGRyZXNzKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENoYW5uZWwodm9pZCkgY29uc3QgeyByZXR1cm4gbUNoYW5uZWw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgQ2hhbm5lbC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIGluIGRCbS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUaGUgbWF4aW11bSB0cmFuc21pdCBwb3dlciBpbiBkQm0uCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0TWF4VHJhbnNtaXRQb3dlcih2b2lkKSBjb25zdCB7IHJldHVybiBtTWF4VHJhbnNtaXRQb3dlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbWF4aW11bSB0cmFuc21pdCBwb3dlciBpbiBkQm0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUG93ZXIgIFRoZSBtYXhpbXVtIHRyYW5zbWl0IHBvd2VyIGluIGRCbS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWF4VHJhbnNtaXRQb3dlcihpbnQ4X3QgYVBvd2VyKSB7IG1NYXhUcmFuc21pdFBvd2VyID0gYVBvd2VyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRUVFIDgwMi4xNS40IE5ldHdvcmsgTmFtZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSUVFRSA4MDIuMTUuNCBOZXR3b3JrIE5hbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXROZXR3b3JrTmFtZSh2b2lkKSBjb25zdCB7IHJldHVybiBtTmV0d29ya05hbWUubTg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgTmV0d29yayBOYW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldHdvcmtOYW1lICBBIHBvaW50ZXIgdG8gdGhlIElFRUUgODAyLjE1LjQgTmV0d29yayBOYW1lLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBJRUVFIDgwMi4xNS40IE5ldHdvcmsgTmFtZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0TmV0d29ya05hbWUoY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVBhbklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYW5JZCAgVGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBJRUVFIDgwMi4xNS40IFBBTiBJRC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UGFuSWQodWludDE2X3QgYVBhbklkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIFBBTiBJRC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEV4dGVuZGVkUGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUV4dGVuZGVkUGFuSWQubTg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dFBhbklkICBUaGUgSUVFRSA4MDIuMTUuNCBFeHRlbmRlZCBQQU4gSUQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgUEFOIElELgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRFeHRlbmRlZFBhbklkKGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNQUMgd2hpdGVsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgd2hpdGVsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqLworICAgIFdoaXRlbGlzdCAmR2V0V2hpdGVsaXN0KHZvaWQpIHsgcmV0dXJuIG1XaGl0ZWxpc3Q7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1BQyBibGFja2xpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBibGFja2xpc3QgZmlsdGVyLgorICAgICAqCisgICAgICovCisgICAgQmxhY2tsaXN0ICZHZXRCbGFja2xpc3Qodm9pZCkgeyByZXR1cm4gbUJsYWNrbGlzdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGhhbmRsZSByZWNlaXZlIGV2ZW50cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgQSBwb2ludGVyIHRvIHRoZSByZWNlaXZlZCBmcmFtZSwgb3IgTlVMTCBpZiB0aGUgcmVjZWl2ZSBvcGVyYXRpb24gYWJvcnRlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhRXJyb3IgIE9UX0VSUk9SX05PTkUgd2hlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBmcmFtZSwgT1RfRVJST1JfQUJPUlQgd2hlbiByZWNlcHRpb24KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIHdhcyBhYm9ydGVkIGFuZCBhIGZyYW1lIHdhcyBub3QgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlY2VpdmVEb25lVGFzayhGcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19MRUdBQ1lfVFJBTlNNSVRfRE9ORQorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBoYW5kbGUgdHJhbnNtaXQgZXZlbnRzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmcmFtZSB0aGF0IHdhcyB0cmFuc21pdHRlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVQZW5kaW5nICBUUlVFIGlmIGFuIEFDSyBmcmFtZSB3YXMgcmVjZWl2ZWQgYW5kIHRoZSBGcmFtZSBQZW5kaW5nIGJpdCB3YXMgc2V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFFcnJvciAgICAgICAgIE9UX0VSUk9SX05PTkUgd2hlbiB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkLCBPVF9FUlJPUl9OT19BQ0sgd2hlbiB0aGUgZnJhbWUgd2FzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgYnV0IG5vIEFDSyB3YXMgcmVjZWl2ZWQsIE9UX0VSUk9SX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgd2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gY291bGQgbm90IHRha2UgcGxhY2UgZHVlIHRvIGFjdGl2aXR5IG9uIHRoZSBjaGFubmVsLCBPVF9FUlJPUl9BQk9SVCB3aGVuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uIHdhcyBhYm9ydGVkIGZvciBvdGhlciByZWFzb25zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBUcmFuc21pdERvbmVUYXNrKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBib29sIGFSeFBlbmRpbmcsIG90RXJyb3IgYUVycm9yKTsKKworI2Vsc2UgLy8gI2lmIE9QRU5USFJFQURfQ09ORklHX0xFR0FDWV9UUkFOU01JVF9ET05FCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGhhbmRsZSB0cmFuc21pdCBldmVudHMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgd2FzIHRyYW5zbWl0dGVkLgorICAgICAqIEBwYXJhbVtpbl0gIGFBY2tGcmFtZSAgIEEgcG9pbnRlciB0byB0aGUgQUNLIGZyYW1lLCBOVUxMIGlmIG5vIEFDSyB3YXMgcmVjZWl2ZWQuCisgICAgICogQHBhcmFtW2luXSAgYUVycm9yICAgICAgT1RfRVJST1JfTk9ORSB3aGVuIHRoZSBmcmFtZSB3YXMgdHJhbnNtaXR0ZWQsIE9UX0VSUk9SX05PX0FDSyB3aGVuIHRoZSBmcmFtZSB3YXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBidXQgbm8gQUNLIHdhcyByZWNlaXZlZCwgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRSB3aGVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBjb3VsZCBub3QgdGFrZSBwbGFjZSBkdWUgdG8gYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwsIE9UX0VSUk9SX0FCT1JUIHdoZW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gd2FzIGFib3J0ZWQgZm9yIG90aGVyIHJlYXNvbnMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFRyYW5zbWl0RG9uZVRhc2sob3RSYWRpb0ZyYW1lICphRnJhbWUsIG90UmFkaW9GcmFtZSAqYUFja0ZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTEVHQUNZX1RSQU5TTUlUX0RPTkUKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgYW4gYWN0aXZlIHNjYW4gaXMgaW4gcHJvZ3Jlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQWN0aXZlU2NhbkluUHJvZ3Jlc3Modm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIGFuIGVuZXJneSBzY2FuIGlzIGluIHByb2dyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VuZXJneVNjYW5JblByb2dyZXNzKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgTUFDIGxheWVyIGlzIGluIHRyYW5zbWl0IHN0YXRlLgorICAgICAqCisgICAgICogVGhlIE1BQyBsYXllciBpcyBpbiB0cmFuc21pdCBzdGF0ZSBkdXJpbmcgQ1NNQS9DQSwgQ0NBLCB0cmFuc21pc3Npb24gb2YgRGF0YSwgQmVhY29uIG9yIERhdGEgUmVxdWVzdCBmcmFtZXMgYW5kCisgICAgICogcmVjZWl2aW5nIG9mIEFDSyBmcmFtZXMuIFRoZSBNQUMgbGF5ZXIgaXMgbm90IGluIHRyYW5zbWl0IHN0YXRlIGR1cmluZyB0cmFuc21pc3Npb24gb2YgQUNLIGZyYW1lcyBvciBCZWFjb24KKyAgICAgKiBSZXF1ZXN0cy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNJblRyYW5zbWl0U3RhdGUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBjYWxsYmFjayB0byBwcm92aWRlIHJlY2VpdmVkIHJhdyBJRUVFIDgwMi4xNS40IGZyYW1lcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQY2FwQ2FsbGJhY2sgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gcmVjZWl2aW5nIGFuIElFRUUgODAyLjE1LjQgbGluayBmcmFtZSBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgdG8gZGlzYWJsZSB0aGUgY2FsbGJhY2suCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBjYXBDYWxsYmFjayhvdExpbmtQY2FwQ2FsbGJhY2sgYVBjYXBDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkIGF0IHRoZSBsaW5rIGxheWVyLgorICAgICAqCisgICAgICogQHJldHZhbCB0cnVlICAgUHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgZmFsc2UgIFByb21pc2N1b3VzIG1vZGUgaXMgbm90IGVuYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUHJvbWlzY3VvdXModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW5rIGxheWVyIHByb21pc2N1b3VzIG1vZGUuCisgICAgICoKKyAgICAgKiBQcm9taXNjdW91cyBtb2RlIGtlZXBzIHRoZSByZWNlaXZlciBlbmFibGVkLCBvdmVycmlkaW5nIHRoZSB2YWx1ZSBvZiBtUnhPbldoZW5JZGxlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByb21pc2N1b3VzICB0cnVlIHRvIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlLCBvciBmYWxzZSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFByb21pc2N1b3VzKGJvb2wgYVByb21pc2N1b3VzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbGxzIG5ldHdvcmsgZGlhZ25vc3RpYyBNYWNDb3VudGVyVGx2LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1hY0NvdW50ZXJzVGx2IFRoZSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgZGlhZ25vc3RpYyBNYWNDb3VudGVyVGx2LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBGaWxsTWFjQ291bnRlcnNUbHYoTmV0d29ya0RpYWdub3N0aWM6Ok1hY0NvdW50ZXJzVGx2ICZhTWFjQ291bnRlcnMpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzZXRzIG1hYyBjb3VudGVycworICAgICAqCisgICAgICovCisgICAgdm9pZCBSZXNldENvdW50ZXJzKHZvaWQpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0JFQUNPTl9SU1BfV0hFTl9KT0lOQUJMRQorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyBpZiB0aGUgZGV2aWNlIGlzIGluIGpvaW5hYmxlIHN0YXRlIG9yIG5vdC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgIERldmljZSBpcyBqb2luYWJsZS4KKyAgICAgKiBAcmV0dmFsIGZhbHNlICBEZXZpY2UgaXMgbm9uLWpvaW5hYmxlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0JlYWNvbkpvaW5hYmxlKHZvaWQpOworI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX1dIRU5fSk9JTkFCTEUKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1BQyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBjb3VudGVyLgorICAgICAqCisgICAgICovCisgICAgb3RNYWNDb3VudGVycyAmR2V0Q291bnRlcnModm9pZCkgeyByZXR1cm4gbUNvdW50ZXJzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBub2lzZSBmbG9vciB2YWx1ZSAoY3VycmVudGx5IHVzZSB0aGUgcmFkaW8gcmVjZWl2ZSBzZW5zaXRpdml0eSB2YWx1ZSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbm9pc2UgZmxvb3IgdmFsdWUgaW4gZEJtLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldE5vaXNlRmxvb3Iodm9pZCkgeyByZXR1cm4gb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkoR2V0SW5zdGFuY2UoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBDU01BIGJhY2tvZmYgaXMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBsYXllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgIENTTUEgYmFja29mZiBpcyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvLgorICAgICAqIEByZXR2YWwgZmFsc2UgIENTTUEgYmFja29mZiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSByYWRpby4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgUmFkaW9TdXBwb3J0c0NzbWFCYWNrb2ZmKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRyYW5zbWl0IHJldHJpZXMgaXMgc3VwcG9ydGVkIGJ5IHRoZSByYWRpbyBsYXllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdHJ1ZSAgIFJldHJpZXMgKGFuZCBDU01BKSBhcmUgc3VwcG9ydGVkIGJ5IHRoZSByYWRpby4KKyAgICAgKiBAcmV0dmFsIGZhbHNlICBSZXRyaWVzIChhbmQgQ1NNQSkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBSYWRpb1N1cHBvcnRzUmV0cmllcyh2b2lkKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFNjYW5UeXBlCisgICAgeworICAgICAgICBrU2NhblR5cGVOb25lID0gMCwKKyAgICAgICAga1NjYW5UeXBlQWN0aXZlLAorICAgICAgICBrU2NhblR5cGVFbmVyZ3ksCisgICAgfTsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtJbnZhbGlkUnNzaVZhbHVlID0gMTI3CisgICAgfTsKKworICAgIHZvaWQgR2VuZXJhdGVOb25jZShjb25zdCBFeHRBZGRyZXNzICZhQWRkcmVzcywgdWludDMyX3QgYUZyYW1lQ291bnRlciwgdWludDhfdCBhU2VjdXJpdHlMZXZlbCwgdWludDhfdCAqYU5vbmNlKTsKKyAgICB2b2lkIFByb2Nlc3NUcmFuc21pdFNlY3VyaXR5KEZyYW1lICZhRnJhbWUpOworICAgIG90RXJyb3IgUHJvY2Vzc1JlY2VpdmVTZWN1cml0eShGcmFtZSAmYUZyYW1lLCBjb25zdCBBZGRyZXNzICZhU3JjQWRkciwgTmVpZ2hib3IgKmFOZWlnaGJvcik7CisgICAgdm9pZCBQdXRSYWRpb0luSWRsZU1vZGUodm9pZCk7CisgICAgdm9pZCBTdGFydE9wZXJhdGlvbih2b2lkKTsKKyAgICB2b2lkIEZpbmlzaE9wZXJhdGlvbih2b2lkKTsKKyAgICB2b2lkIFNlbnRGcmFtZShvdEVycm9yIGFFcnJvcik7CisgICAgdm9pZCBTZW5kQmVhY29uUmVxdWVzdChGcmFtZSAmYUZyYW1lKTsKKyAgICB2b2lkIFNlbmRCZWFjb24oRnJhbWUgJmFGcmFtZSk7CisgICAgdm9pZCBTdGFydEJhY2tvZmYodm9pZCk7CisgICAgdm9pZCBTdGFydEVuZXJneVNjYW4odm9pZCk7CisgICAgb3RFcnJvciBIYW5kbGVNYWNDb21tYW5kKEZyYW1lICZhRnJhbWUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTWFjVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVNYWNUaW1lcih2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVCZWdpblRyYW5zbWl0KHZvaWQgKmFDb250ZXh0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVCZWdpblRyYW5zbWl0KFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlQmVnaW5UcmFuc21pdCh2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWNlaXZlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVSZWNlaXZlVGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2koVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgSGFuZGxlRW5lcmd5U2NhblNhbXBsZVJzc2kodm9pZCk7CisKKyAgICB2b2lkIFN0YXJ0Q3NtYUJhY2tvZmYodm9pZCk7CisgICAgb3RFcnJvciBTY2FuKFNjYW5UeXBlIGFUeXBlLCB1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhU2NhbkR1cmF0aW9uLCB2b2lkICphQ29udGV4dCk7CisKKyAgICBvdEVycm9yIFJhZGlvVHJhbnNtaXQoRnJhbWUgKmFTZW5kRnJhbWUpOworICAgIG90RXJyb3IgUmFkaW9SZWNlaXZlKHVpbnQ4X3QgYUNoYW5uZWwpOworICAgIHZvaWQgUmFkaW9TbGVlcCh2b2lkKTsKKworICAgIHN0YXRpYyBNYWMgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIFRpbWVyIG1NYWNUaW1lcjsKKyNpZiAhT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICAgIFRpbWVyIG1CYWNrb2ZmVGltZXI7CisjZW5kaWYKKyAgICBUaW1lciBtUmVjZWl2ZVRpbWVyOworCisgICAgRXh0QWRkcmVzcyBtRXh0QWRkcmVzczsKKyAgICBTaG9ydEFkZHJlc3MgbVNob3J0QWRkcmVzczsKKyAgICBQYW5JZCBtUGFuSWQ7CisgICAgdWludDhfdCBtQ2hhbm5lbDsKKyAgICBpbnQ4X3QgbU1heFRyYW5zbWl0UG93ZXI7CisKKyAgICBvdE5ldHdvcmtOYW1lIG1OZXR3b3JrTmFtZTsKKyAgICBvdEV4dGVuZGVkUGFuSWQgbUV4dGVuZGVkUGFuSWQ7CisKKyAgICBTZW5kZXIgKm1TZW5kSGVhZCwgKm1TZW5kVGFpbDsKKyAgICBSZWNlaXZlciAqbVJlY2VpdmVIZWFkLCAqbVJlY2VpdmVUYWlsOworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga09wZXJhdGlvbk5vbmUgPSAwLAorICAgICAgICBrT3BlcmF0aW9uQWN0aXZlU2NhbiwKKyAgICAgICAga09wZXJhdGlvbkVuZXJneVNjYW4sCisgICAgICAgIGtPcGVyYXRpb25UcmFuc21pdEJlYWNvbiwKKyAgICAgICAga09wZXJhdGlvblRyYW5zbWl0RGF0YSwKKyAgICB9OworICAgIHVpbnQ4X3QgbU9wZXJhdGlvbjsKKworICAgIHVpbnQ4X3QgbUJlYWNvblNlcXVlbmNlOworICAgIHVpbnQ4X3QgbURhdGFTZXF1ZW5jZTsKKyAgICBib29sIG1SeE9uV2hlbklkbGU7CisgICAgdWludDhfdCBtQ3NtYUF0dGVtcHRzOworICAgIHVpbnQ4X3QgbVRyYW5zbWl0QXR0ZW1wdHM7CisgICAgYm9vbCBtVHJhbnNtaXRCZWFjb247CisgICAgYm9vbCBtQmVhY29uc0VuYWJsZWQ7CisKKyAgICBTY2FuVHlwZSBtUGVuZGluZ1NjYW5SZXF1ZXN0OworICAgIHVpbnQ4X3QgbVNjYW5DaGFubmVsOworICAgIHVpbnQzMl90IG1TY2FuQ2hhbm5lbHM7CisgICAgdWludDE2X3QgbVNjYW5EdXJhdGlvbjsKKyAgICB2b2lkICptU2NhbkNvbnRleHQ7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIEFjdGl2ZVNjYW5IYW5kbGVyIG1BY3RpdmVTY2FuSGFuZGxlcjsKKyAgICAgICAgRW5lcmd5U2NhbkhhbmRsZXIgbUVuZXJneVNjYW5IYW5kbGVyOworICAgIH07CisgICAgaW50OF90IG1FbmVyZ3lTY2FuQ3VycmVudE1heFJzc2k7CisgICAgVGFza2xldCBtRW5lcmd5U2NhblNhbXBsZVJzc2lUYXNrOworCisgICAgb3RMaW5rUGNhcENhbGxiYWNrIG1QY2FwQ2FsbGJhY2s7CisgICAgdm9pZCAqbVBjYXBDYWxsYmFja0NvbnRleHQ7CisKKyAgICBXaGl0ZWxpc3QgbVdoaXRlbGlzdDsKKyAgICBCbGFja2xpc3QgbUJsYWNrbGlzdDsKKworICAgIEZyYW1lICptVHhGcmFtZTsKKworICAgIG90TWFjQ291bnRlcnMgbUNvdW50ZXJzOworICAgIHVpbnQzMl90IG1LZXlJZE1vZGUyRnJhbWVDb3VudGVyOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUworICAgIGJvb2wgbURlbGF5U2xlZXA7CisjZW5kaWYKKyAgICBib29sIG1XYWl0aW5nRm9yRGF0YTsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0LmNwcCBiL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdiMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY19ibGFja2xpc3QuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGJsYWNrbGlzdCBJRUVFIDgwMi4xNS40IGZyYW1lIGZpbHRlcmluZyBiYXNlZCBvbiBNQUMgYWRkcmVzcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1hY19ibGFja2xpc3QuaHBwIgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNYWMgeworCitCbGFja2xpc3Q6OkJsYWNrbGlzdCh2b2lkKQoreworICAgIG1FbmFibGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBtQmxhY2tsaXN0W2ldLm1WYWxpZCA9IGZhbHNlOworICAgIH0KK30KKworb3RFcnJvciBCbGFja2xpc3Q6OkdldEVudHJ5KHVpbnQ4X3QgYUluZGV4LCBFbnRyeSAmYUVudHJ5KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbmRleCA8IGtNYXhFbnRyaWVzLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtZW1jcHkoJmFFbnRyeS5tRXh0QWRkcmVzcywgJm1CbGFja2xpc3RbYUluZGV4XS5tRXh0QWRkcmVzcywgc2l6ZW9mKGFFbnRyeS5tRXh0QWRkcmVzcykpOworICAgIGFFbnRyeS5tVmFsaWQgPSBtQmxhY2tsaXN0W2FJbmRleF0ubVZhbGlkOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworQmxhY2tsaXN0OjpFbnRyeSAqQmxhY2tsaXN0OjpBZGQoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqcnZhbDsKKworICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IEZpbmQoYWRkcmVzcykpID09IE5VTEwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1CbGFja2xpc3RbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSgmbUJsYWNrbGlzdFtpXS5tRXh0QWRkcmVzcywgJmFkZHJlc3MsIHNpemVvZihtQmxhY2tsaXN0W2ldLm1FeHRBZGRyZXNzKSk7CisgICAgICAgIG1CbGFja2xpc3RbaV0ubVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gJm1CbGFja2xpc3RbaV0pOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBCbGFja2xpc3Q6OkNsZWFyKHZvaWQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgbUJsYWNrbGlzdFtpXS5tVmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQmxhY2tsaXN0OjpSZW1vdmUoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqZW50cnk7CisKKyAgICBWZXJpZnlPckV4aXQoKGVudHJ5ID0gRmluZChhZGRyZXNzKSkgIT0gTlVMTCk7CisgICAgbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitCbGFja2xpc3Q6OkVudHJ5ICpCbGFja2xpc3Q6OkZpbmQoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqcnZhbCA9IE5VTEw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAoIW1CbGFja2xpc3RbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZW1jbXAoJm1CbGFja2xpc3RbaV0ubUV4dEFkZHJlc3MsICZhZGRyZXNzLCBzaXplb2YobUJsYWNrbGlzdFtpXS5tRXh0QWRkcmVzcykpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9ICZtQmxhY2tsaXN0W2ldKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdC5ocHAgYi9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjYWVhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0LmhwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyNpbmNsdWRlICJtYWNfYmxhY2tsaXN0X2ltcGwuaHBwIgorI2Vsc2UKKyNpbmNsdWRlICJtYWNfYmxhY2tsaXN0X3N0dWIuaHBwIgorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdF9pbXBsLmhwcCBiL3NyYy9jb3JlL21hYy9tYWNfYmxhY2tsaXN0X2ltcGwuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNzRmODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdF9pbXBsLmhwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZnJhbWUgZmlsdGVyaW5nIGJhc2VkIG9uIE1BQyBhZGRyZXNzLgorICovCisKKyNpZm5kZWYgTUFDX0JMQUNLTElTVF9IUFBfCisjZGVmaW5lIE1BQ19CTEFDS0xJU1RfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1hYyB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tYWMKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBibGFja2xpc3QgZmlsdGVyaW5nIG9uIElFRUUgODAyLjE1LjQgZnJhbWVzLgorICoKKyAqLworY2xhc3MgQmxhY2tsaXN0Cit7CitwdWJsaWM6CisgICAgdHlwZWRlZiBvdE1hY0JsYWNrbGlzdEVudHJ5IEVudHJ5OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heEVudHJpZXMgPSBPUEVOVEhSRUFEX0NPTkZJR19NQUNfQkxBQ0tMSVNUX1NJWkUsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIGJsYWNrbGlzdCBmaWx0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBCbGFja2xpc3Qodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGJsYWNrbGlzdCBmaWx0ZXIgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBibGFja2xpc3QgZmlsdGVyIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGJsYWNrbGlzdCBmaWx0ZXIgaXMgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRW5hYmxlZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcyB0aGUgYmxhY2tsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmFibGVkICBUUlVFIHRvIGVuYWJsZSB0aGUgYmxhY2tsaXN0IGZpbHRlciwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFbmFibGVkKGJvb2wgYUVuYWJsZWQpIHsgbUVuYWJsZWQgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxhY2tsaXN0IGVudHJpZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxhY2tsaXN0IGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgR2V0TWF4RW50cmllcyh2b2lkKSBjb25zdCB7IHJldHVybiBrTWF4RW50cmllczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyBhIGJsYWNrbGlzdCBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhSW5kZXggIEFuIGluZGV4IGludG8gdGhlIE1BQyBibGFja2xpc3QgdGFibGUuCisgICAgICogQHBhcmFtW291dF0gIGFFbnRyeSAgQSByZWZlcmVuY2UgdG8gd2hlcmUgdGhlIGluZm9ybWF0aW9uIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBNQUMgYmxhY2tsaXN0IGVudHJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBAcCBhSW5kZXggaXMgb3V0IG9mIGJvdW5kcyBvciBAcCBhRW50cnkgaXMgTlVMTC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0RW50cnkodWludDhfdCBhSW5kZXgsIEVudHJ5ICZhRW50cnkpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSBibGFja2xpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBibGFja2xpc3QgZW50cnkgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBFbnRyeSAqQWRkKGNvbnN0IEV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYW4gRXh0ZW5kZWQgQWRkcmVzcyB0byB0aGUgYmxhY2tsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlKGNvbnN0IEV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSB0aGUgYmxhY2tsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmaW5kcyBhIGJsYWNrbGlzdCBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgYmxhY2tsaXN0IGVudHJ5IG9yIE5VTEwgaWYgdGhlIGVudHJ5IGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIEVudHJ5ICpGaW5kKGNvbnN0IEV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworcHJpdmF0ZToKKyAgICBFbnRyeSBtQmxhY2tsaXN0W2tNYXhFbnRyaWVzXTsKKworICAgIGJvb2wgbUVuYWJsZWQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBNYWMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1BQ19CTEFDS0xJU1RfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWFjL21hY19ibGFja2xpc3Rfc3R1Yi5ocHAgYi9zcmMvY29yZS9tYWMvbWFjX2JsYWNrbGlzdF9zdHViLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRjZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY19ibGFja2xpc3Rfc3R1Yi5ocHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgZnJhbWUgZmlsdGVyaW5nIGJhc2VkIG9uIE1BQyBhZGRyZXNzLgorICovCisKKyNpZm5kZWYgTUFDX0JMQUNLTElTVF9IUFBfCisjZGVmaW5lIE1BQ19CTEFDS0xJU1RfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1hYyB7CisKK2NsYXNzIEJsYWNrbGlzdAoreworcHVibGljOgorICAgIHR5cGVkZWYgb3RNYWNCbGFja2xpc3RFbnRyeSBFbnRyeTsKKworICAgIEJsYWNrbGlzdCh2b2lkKSB7IH0KKworICAgIGJvb2wgSXNFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIFNldEVuYWJsZWQoYm9vbCkgeyB9CisKKyAgICBpbnQgR2V0TWF4RW50cmllcyh2b2lkKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBvdEVycm9yIEdldEVudHJ5KHVpbnQ4X3QsIEVudHJ5ICYpIGNvbnN0IHsgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgfQorCisgICAgRW50cnkgKkFkZChjb25zdCBFeHRBZGRyZXNzICYpIHsgcmV0dXJuIE5VTEw7IH0KKworICAgIHZvaWQgUmVtb3ZlKGNvbnN0IEV4dEFkZHJlc3MgJikgeyB9CisKKyAgICB2b2lkIENsZWFyKHZvaWQpIHsgfQorCisgICAgRW50cnkgKkZpbmQoY29uc3QgRXh0QWRkcmVzcyAmKSB7IHJldHVybiBOVUxMOyB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWFjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNQUNfQkxBQ0tMSVNUX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuY3BwIGIvc3JjL2NvcmUvbWFjL21hY19mcmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3NjY0OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuY3BwCkBAIC0wLDAgKzEsMTExOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBJRUVFIDgwMi4xNS40IGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwcm9jZXNzaW5nLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibWFjX2ZyYW1lLmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWFjIHsKKwordm9pZCBFeHRBZGRyZXNzOjpTZXQoY29uc3QgSXA2OjpBZGRyZXNzICZhSXBBZGRyZXNzKQoreworICAgIG1lbWNweShtOCwgYUlwQWRkcmVzcy5HZXRJaWQoKSwgc2l6ZW9mKG04KSk7CisgICAgbThbMF0gXj0gMHgwMjsKK30KKworY29uc3QgY2hhciAqQWRkcmVzczo6VG9TdHJpbmcoY2hhciAqYUJ1ZiwgdWludDE2X3QgYVNpemUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIHNpemVvZihTaG9ydEFkZHJlc3MpOgorICAgICAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIjB4JTA0eCIsIG1TaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2l6ZW9mKEV4dEFkZHJlc3MpOgorICAgICAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKyAgICAgICAgICAgICAgICAgbUV4dEFkZHJlc3MubThbMF0sIG1FeHRBZGRyZXNzLm04WzFdLCBtRXh0QWRkcmVzcy5tOFsyXSwgbUV4dEFkZHJlc3MubThbM10sCisgICAgICAgICAgICAgICAgIG1FeHRBZGRyZXNzLm04WzRdLCBtRXh0QWRkcmVzcy5tOFs1XSwgbUV4dEFkZHJlc3MubThbNl0sIG1FeHRBZGRyZXNzLm04WzddKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIk5vbmUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGFCdWY7Cit9CisKK290RXJyb3IgRnJhbWU6OkluaXRNYWNIZWFkZXIodWludDE2X3QgYUZjZiwgdWludDhfdCBhU2VjdXJpdHlDb250cm9sKQoreworICAgIHVpbnQ4X3QgKmJ5dGVzID0gR2V0UHNkdSgpOworICAgIHVpbnQ4X3QgbGVuZ3RoID0gMDsKKworICAgIC8vIEZyYW1lIENvbnRyb2wgRmllbGQKKyAgICBieXRlc1swXSA9IGFGY2YgJiAweGZmOworICAgIGJ5dGVzWzFdID0gYUZjZiA+PiA4OworICAgIGxlbmd0aCArPSBrRmNmU2l6ZTsKKworICAgIC8vIFNlcXVlbmNlIE51bWJlcgorICAgIGxlbmd0aCArPSBrRHNuU2l6ZTsKKworICAgIC8vIERlc3RpbmF0aW5vbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChhRmNmICYgRnJhbWU6OmtGY2ZEc3RBZGRyTWFzaykKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJOb25lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQ6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJFeHQ6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKEV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGFGY2YgJiBGcmFtZTo6a0ZjZlNyY0FkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkck5vbmU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydDoKKyAgICAgICAgaWYgKChhRmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkckV4dDoKKyAgICAgICAgaWYgKChhRmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBTZWN1cml0eSBIZWFkZXIKKyAgICBpZiAoYUZjZiAmIEZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkKQorICAgIHsKKyAgICAgICAgYnl0ZXNbbGVuZ3RoXSA9IGFTZWN1cml0eUNvbnRyb2w7CisKKyAgICAgICAgaWYgKGFTZWN1cml0eUNvbnRyb2wgJiBrU2VjTGV2ZWxNYXNrKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggKz0ga1NlY3VyaXR5Q29udHJvbFNpemUgKyBrRnJhbWVDb3VudGVyU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoYVNlY3VyaXR5Q29udHJvbCAmIGtLZXlJZE1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0tleUlkTW9kZTA6CisgICAgICAgICAgICBsZW5ndGggKz0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0tleUlkTW9kZTE6CisgICAgICAgICAgICBsZW5ndGggKz0ga0tleVNvdXJjZVNpemVNb2RlMSArIGtLZXlJbmRleFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICAgICAgbGVuZ3RoICs9IGtLZXlTb3VyY2VTaXplTW9kZTIgKyBrS2V5SW5kZXhTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrS2V5SWRNb2RlMzoKKyAgICAgICAgICAgIGxlbmd0aCArPSBrS2V5U291cmNlU2l6ZU1vZGUzICsga0tleUluZGV4U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tbWFuZCBJRAorICAgIGlmICgoYUZjZiAmIGtGY2ZGcmFtZVR5cGVNYXNrKSA9PSBrRmNmRnJhbWVNYWNDbWQpCisgICAgeworICAgICAgICBsZW5ndGggKz0ga0NvbW1hbmRJZFNpemU7CisgICAgfQorCisgICAgU2V0UHNkdUxlbmd0aChsZW5ndGggKyBHZXRGb290ZXJMZW5ndGgoKSk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBGcmFtZTo6VmFsaWRhdGVQc2R1KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgIHVpbnQ4X3Qgb2Zmc2V0ID0gMDsKKyAgICB1aW50MTZfdCBmY2Y7CisgICAgdWludDhfdCBmb290ZXJMZW5ndGggPSBrRmNzU2l6ZTsKKworICAgIFZlcmlmeU9yRXhpdCgob2Zmc2V0ICs9IGtGY2ZTaXplICsga0RzblNpemUpIDw9IEdldFBzZHVMZW5ndGgoKSk7CisgICAgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworCisgICAgLy8gRGVzdGluYXRpbm9uIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyTm9uZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkclNob3J0OgorICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihTaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyRXh0OgorICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTiArIEFkZHJlc3MKKyAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmU3JjQWRkck1hc2spCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtGY2ZTcmNBZGRyTm9uZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkclNob3J0OgorICAgICAgICBpZiAoKGZjZiAmIEZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ6CisgICAgICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIFNlY3VyaXR5IEhlYWRlcgorICAgIGlmIChmY2YgJiBGcmFtZTo6a0ZjZlNlY3VyaXR5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qgc2VjQ29udHJvbCA9IEdldFBzZHUoKVtvZmZzZXRdOworCisgICAgICAgIG9mZnNldCArPSBrU2VjdXJpdHlDb250cm9sU2l6ZSArIGtGcmFtZUNvdW50ZXJTaXplOworCisgICAgICAgIHN3aXRjaCAoc2VjQ29udHJvbCAmIGtLZXlJZE1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0tleUlkTW9kZTA6CisgICAgICAgICAgICBvZmZzZXQgKz0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0tleUlkTW9kZTE6CisgICAgICAgICAgICBvZmZzZXQgKz0ga0tleVNvdXJjZVNpemVNb2RlMSArIGtLZXlJbmRleFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICAgICAgb2Zmc2V0ICs9IGtLZXlTb3VyY2VTaXplTW9kZTIgKyBrS2V5SW5kZXhTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrS2V5SWRNb2RlMzoKKyAgICAgICAgICAgIG9mZnNldCArPSBrS2V5U291cmNlU2l6ZU1vZGUzICsga0tleUluZGV4U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChzZWNDb250cm9sICYga1NlY0xldmVsTWFzaykKKyAgICAgICAgeworICAgICAgICBjYXNlIGtTZWNOb25lOgorICAgICAgICBjYXNlIGtTZWNFbmM6CisgICAgICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzBTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU2VjTWljMzI6CisgICAgICAgIGNhc2Uga1NlY0VuY01pYzMyOgorICAgICAgICAgICAgZm9vdGVyTGVuZ3RoICs9IGtNaWMzMlNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTZWNNaWM2NDoKKyAgICAgICAgY2FzZSBrU2VjRW5jTWljNjQ6CisgICAgICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzY0U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1NlY01pYzEyODoKKyAgICAgICAgY2FzZSBrU2VjRW5jTWljMTI4OgorICAgICAgICAgICAgZm9vdGVyTGVuZ3RoICs9IGtNaWMxMjhTaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21tYW5kIElECisgICAgaWYgKChmY2YgJiBrRmNmRnJhbWVUeXBlTWFzaykgPT0ga0ZjZkZyYW1lTWFjQ21kKQorICAgIHsKKyAgICAgICAgb2Zmc2V0ICs9IGtDb21tYW5kSWRTaXplOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdCgob2Zmc2V0ICsgZm9vdGVyTGVuZ3RoKSA8PSBHZXRQc2R1TGVuZ3RoKCkpOworCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0VHlwZSh2b2lkKQoreworICAgIHJldHVybiBHZXRQc2R1KClbMF0gJiBGcmFtZTo6a0ZjZkZyYW1lVHlwZU1hc2s7Cit9CisKK2Jvb2wgRnJhbWU6OkdldFNlY3VyaXR5RW5hYmxlZCh2b2lkKQoreworICAgIHJldHVybiAoR2V0UHNkdSgpWzBdICYgRnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQpICE9IDA7Cit9CisKK2Jvb2wgRnJhbWU6OkdldEFja1JlcXVlc3Qodm9pZCkKK3sKKyAgICByZXR1cm4gKEdldFBzZHUoKVswXSAmIEZyYW1lOjprRmNmQWNrUmVxdWVzdCkgIT0gMDsKK30KKwordm9pZCBGcmFtZTo6U2V0QWNrUmVxdWVzdChib29sIGFBY2tSZXF1ZXN0KQoreworICAgIGlmIChhQWNrUmVxdWVzdCkKKyAgICB7CisgICAgICAgIEdldFBzZHUoKVswXSB8PSBGcmFtZTo6a0ZjZkFja1JlcXVlc3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdldFBzZHUoKVswXSAmPSB+RnJhbWU6OmtGY2ZBY2tSZXF1ZXN0OworICAgIH0KK30KKworYm9vbCBGcmFtZTo6R2V0RnJhbWVQZW5kaW5nKHZvaWQpCit7CisgICAgcmV0dXJuIChHZXRQc2R1KClbMF0gJiBGcmFtZTo6a0ZjZkZyYW1lUGVuZGluZykgIT0gMDsKK30KKwordm9pZCBGcmFtZTo6U2V0RnJhbWVQZW5kaW5nKGJvb2wgYUZyYW1lUGVuZGluZykKK3sKKyAgICBpZiAoYUZyYW1lUGVuZGluZykKKyAgICB7CisgICAgICAgIEdldFBzZHUoKVswXSB8PSBGcmFtZTo6a0ZjZkZyYW1lUGVuZGluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgR2V0UHNkdSgpWzBdICY9IH5GcmFtZTo6a0ZjZkZyYW1lUGVuZGluZzsKKyAgICB9Cit9CisKK3VpbnQ4X3QgKkZyYW1lOjpGaW5kU2VxdWVuY2Uodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisKKyAgICAvLyBGcmFtZSBDb250cm9sIEZpZWxkCisgICAgY3VyICs9IGtGY2ZTaXplOworCisgICAgcmV0dXJuIGN1cjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0U2VxdWVuY2Uodm9pZCkKK3sKKyAgICB1aW50OF90ICpidWYgPSBGaW5kU2VxdWVuY2UoKTsKKyAgICByZXR1cm4gYnVmWzBdOworfQorCit2b2lkIEZyYW1lOjpTZXRTZXF1ZW5jZSh1aW50OF90IGFTZXF1ZW5jZSkKK3sKKyAgICB1aW50OF90ICpidWYgPSBGaW5kU2VxdWVuY2UoKTsKKyAgICBidWZbMF0gPSBhU2VxdWVuY2U7Cit9CisKK3VpbnQ4X3QgKkZyYW1lOjpGaW5kRHN0UGFuSWQodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisgICAgdWludDE2X3QgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworCisgICAgVmVyaWZ5T3JFeGl0KChmY2YgJiBGcmFtZTo6a0ZjZkRzdEFkZHJNYXNrKSAhPSBGcmFtZTo6a0ZjZkRzdEFkZHJOb25lLCBjdXIgPSBOVUxMKTsKKworICAgIC8vIEZyYW1lIENvbnRyb2wgRmllbGQKKyAgICBjdXIgKz0ga0ZjZlNpemU7CisgICAgLy8gU2VxdWVuY2UgTnVtYmVyCisgICAgY3VyICs9IGtEc25TaXplOworCitleGl0OgorICAgIHJldHVybiBjdXI7Cit9CisKK290RXJyb3IgRnJhbWU6OkdldERzdFBhbklkKFBhbklkICZhUGFuSWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kRHN0UGFuSWQoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBhUGFuSWQgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlswXSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpTZXREc3RQYW5JZChQYW5JZCBhUGFuSWQpCit7CisgICAgdWludDhfdCAqYnVmOworCisgICAgYnVmID0gRmluZERzdFBhbklkKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIGJ1ZlswXSA9IGFQYW5JZCAmIDB4ZmY7CisgICAgYnVmWzFdID0gYVBhbklkID4+IDg7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDhfdCAqRnJhbWU6OkZpbmREc3RBZGRyKHZvaWQpCit7CisgICAgdWludDhfdCAqY3VyID0gR2V0UHNkdSgpOworCisgICAgLy8gRnJhbWUgQ29udHJvbCBGaWVsZAorICAgIGN1ciArPSBrRmNmU2l6ZTsKKyAgICAvLyBTZXF1ZW5jZSBOdW1iZXIKKyAgICBjdXIgKz0ga0RzblNpemU7CisgICAgLy8gRGVzdGluYXRpb24gUEFOCisgICAgY3VyICs9IHNpemVvZihQYW5JZCk7CisKKyAgICByZXR1cm4gY3VyOworfQorCitvdEVycm9yIEZyYW1lOjpHZXREc3RBZGRyKEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBWZXJpZnlPckV4aXQoYnVmID0gRmluZERzdEFkZHIoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spCisgICAgeworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQ6CisgICAgICAgIGFBZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYUFkZHJlc3MubVNob3J0QWRkcmVzcyA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoYnVmWzFdIDw8IDgpIHwgYnVmWzBdKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgYUFkZHJlc3MubUxlbmd0aCA9IHNpemVvZihFeHRBZGRyZXNzKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihFeHRBZGRyZXNzKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBhQWRkcmVzcy5tRXh0QWRkcmVzcy5tOFtpXSA9IGJ1ZltzaXplb2YoRXh0QWRkcmVzcykgLSAxIC0gaV07CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFBZGRyZXNzLm1MZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpTZXREc3RBZGRyKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKQoreworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBhc3NlcnQoKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spID09IEZyYW1lOjprRmNmRHN0QWRkclNob3J0KTsKKworICAgIGJ1ZiA9IEZpbmREc3RBZGRyKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIGJ1ZlswXSA9IGFTaG9ydEFkZHJlc3MgJiAweGZmOworICAgIGJ1ZlsxXSA9IGFTaG9ydEFkZHJlc3MgPj4gODsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIEZyYW1lOjpTZXREc3RBZGRyKGNvbnN0IEV4dEFkZHJlc3MgJmFFeHRBZGRyZXNzKQoreworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBhc3NlcnQoKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spID09IEZyYW1lOjprRmNmRHN0QWRkckV4dCk7CisKKyAgICBidWYgPSBGaW5kRHN0QWRkcigpOworICAgIGFzc2VydChidWYgIT0gTlVMTCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihFeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmW2ldID0gYUV4dEFkZHJlc3MubThbc2l6ZW9mKEV4dEFkZHJlc3MpIC0gMSAtIGldOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50OF90ICpGcmFtZTo6RmluZFNyY1BhbklkKHZvaWQpCit7CisgICAgdWludDhfdCAqY3VyID0gR2V0UHNkdSgpOworICAgIHVpbnQxNl90IGZjZiA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoR2V0UHNkdSgpWzFdIDw8IDgpIHwgR2V0UHNkdSgpWzBdKTsKKworICAgIFZlcmlmeU9yRXhpdCgoZmNmICYgRnJhbWU6OmtGY2ZEc3RBZGRyTWFzaykgIT0gRnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8fAorICAgICAgICAgICAgICAgICAoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykgIT0gRnJhbWU6OmtGY2ZTcmNBZGRyTm9uZSwgY3VyID0gTlVMTCk7CisKKyAgICAvLyBGcmFtZSBDb250cm9sIEZpZWxkCisgICAgY3VyICs9IGtGY2ZTaXplOworICAgIC8vIFNlcXVlbmNlIE51bWJlcgorICAgIGN1ciArPSBrRHNuU2l6ZTsKKworICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gRGVzdGluYXRpb24gUEFOICsgQWRkcmVzcworICAgICAgICBzd2l0Y2ggKGZjZiAmIEZyYW1lOjprRmNmRHN0QWRkck1hc2spCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydDoKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoUGFuSWQpICsgc2l6ZW9mKEV4dEFkZHJlc3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGN1cjsKK30KKworb3RFcnJvciBGcmFtZTo6R2V0U3JjUGFuSWQoUGFuSWQgJmFQYW5JZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBWZXJpZnlPckV4aXQoKGJ1ZiA9IEZpbmRTcmNQYW5JZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGFQYW5JZCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoYnVmWzFdIDw8IDgpIHwgYnVmWzBdKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFNyY1BhbklkKFBhbklkIGFQYW5JZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBWZXJpZnlPckV4aXQoKGJ1ZiA9IEZpbmRTcmNQYW5JZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGJ1ZlswXSA9IGFQYW5JZCAmIDB4ZmY7CisgICAgYnVmWzFdID0gYVBhbklkID4+IDg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit1aW50OF90ICpGcmFtZTo6RmluZFNyY0FkZHIodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisgICAgdWludDE2X3QgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworCisgICAgLy8gRnJhbWUgQ29udHJvbCBGaWVsZAorICAgIGN1ciArPSBrRmNmU2l6ZTsKKyAgICAvLyBTZXF1ZW5jZSBOdW1iZXIKKyAgICBjdXIgKz0ga0RzblNpemU7CisKKyAgICAvLyBEZXN0aW5hdGlvbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZkRzdEFkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkclNob3J0OgorICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihTaG9ydEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZEc3RBZGRyRXh0OgorICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKSArIHNpemVvZihFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gU291cmNlIFBBTgorICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgIHsKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCk7CisgICAgfQorCisgICAgcmV0dXJuIGN1cjsKK30KKworb3RFcnJvciBGcmFtZTo6R2V0U3JjQWRkcihBZGRyZXNzICZhZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBWZXJpZnlPckV4aXQoKGJ1ZiA9IEZpbmRTcmNBZGRyKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZlNyY0FkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkclNob3J0OgorICAgICAgICBhZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYWRkcmVzcy5tU2hvcnRBZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChidWZbMV0gPDwgOCkgfCBidWZbMF0pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZTcmNBZGRyRXh0OgorICAgICAgICBhZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoRXh0QWRkcmVzcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplb2YoRXh0QWRkcmVzcyk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcmVzcy5tRXh0QWRkcmVzcy5tOFtpXSA9IGJ1ZltzaXplb2YoRXh0QWRkcmVzcykgLSAxIC0gaV07CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGFkZHJlc3MubUxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFNyY0FkZHIoU2hvcnRBZGRyZXNzIGFTaG9ydEFkZHJlc3MpCit7CisgICAgdWludDhfdCAqYnVmOworICAgIHVpbnQxNl90IGZjZiA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoR2V0UHNkdSgpWzFdIDw8IDgpIHwgR2V0UHNkdSgpWzBdKTsKKworICAgIGFzc2VydCgoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykgPT0gRnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQpOworCisgICAgYnVmID0gRmluZFNyY0FkZHIoKTsKKyAgICBhc3NlcnQoYnVmICE9IE5VTEwpOworCisgICAgYnVmWzBdID0gYVNob3J0QWRkcmVzcyAmIDB4ZmY7CisgICAgYnVmWzFdID0gYVNob3J0QWRkcmVzcyA+PiA4OworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFNyY0FkZHIoY29uc3QgRXh0QWRkcmVzcyAmYUV4dEFkZHJlc3MpCit7CisgICAgdWludDhfdCAqYnVmOworICAgIHVpbnQxNl90IGZjZiA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoR2V0UHNkdSgpWzFdIDw8IDgpIHwgR2V0UHNkdSgpWzBdKTsKKworICAgIGFzc2VydCgoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykgPT0gRnJhbWU6OmtGY2ZTcmNBZGRyRXh0KTsKKworICAgIGJ1ZiA9IEZpbmRTcmNBZGRyKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGFFeHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmW2ldID0gYUV4dEFkZHJlc3MubThbc2l6ZW9mKGFFeHRBZGRyZXNzKSAtIDEgLSBpXTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDhfdCAqRnJhbWU6OkZpbmRTZWN1cml0eUhlYWRlcih2b2lkKQoreworICAgIHVpbnQ4X3QgKmN1ciA9IEdldFBzZHUoKTsKKyAgICB1aW50MTZfdCBmY2YgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oKEdldFBzZHUoKVsxXSA8PCA4KSB8IEdldFBzZHUoKVswXSk7CisKKyAgICBWZXJpZnlPckV4aXQoKGZjZiAmIEZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkKSAhPSAwLCBjdXIgPSBOVUxMKTsKKworICAgIC8vIEZyYW1lIENvbnRyb2wgRmllbGQKKyAgICBjdXIgKz0ga0ZjZlNpemU7CisgICAgLy8gU2VxdWVuY2UgTnVtYmVyCisgICAgY3VyICs9IGtEc25TaXplOworCisgICAgLy8gRGVzdGluYXRpb24gUEFOICsgQWRkcmVzcworICAgIHN3aXRjaCAoZmNmICYgRnJhbWU6OmtGY2ZEc3RBZGRyTWFzaykKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFNvdXJjZSBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZlNyY0FkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkclNob3J0OgorICAgICAgICBpZiAoKGZjZiAmIEZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCk7CisgICAgICAgIH0KKworICAgICAgICBjdXIgKz0gc2l6ZW9mKFNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ6CisgICAgICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciArPSBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gY3VyOworfQorCitvdEVycm9yIEZyYW1lOjpHZXRTZWN1cml0eUxldmVsKHVpbnQ4X3QgJmFTZWN1cml0eUxldmVsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKworICAgIFZlcmlmeU9yRXhpdCgoYnVmID0gRmluZFNlY3VyaXR5SGVhZGVyKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgYVNlY3VyaXR5TGV2ZWwgPSBidWZbMF0gJiBrU2VjTGV2ZWxNYXNrOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBGcmFtZTo6R2V0S2V5SWRNb2RlKHVpbnQ4X3QgJmFLZXlJZE1vZGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBhS2V5SWRNb2RlID0gYnVmWzBdICYga0tleUlkTW9kZU1hc2s7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpHZXRGcmFtZUNvdW50ZXIodWludDMyX3QgJmFGcmFtZUNvdW50ZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBTZWN1cml0eSBDb250cm9sCisgICAgYnVmICs9IGtTZWN1cml0eUNvbnRyb2xTaXplOworCisgICAgYUZyYW1lQ291bnRlciA9ICgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJ1ZlszXSkgPDwgMjQpIHwKKyAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYnVmWzJdKSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihidWZbMV0pIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYnVmWzBdKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBGcmFtZTo6U2V0RnJhbWVDb3VudGVyKHVpbnQzMl90IGFGcmFtZUNvdW50ZXIpCit7CisgICAgdWludDhfdCAqYnVmOworCisgICAgYnVmID0gRmluZFNlY3VyaXR5SGVhZGVyKCk7CisgICAgYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworICAgIC8vIFNlY3VyaXR5IENvbnRyb2wKKyAgICBidWYgKz0ga1NlY3VyaXR5Q29udHJvbFNpemU7CisKKyAgICBidWZbMF0gPSBhRnJhbWVDb3VudGVyICYgMHhmZjsKKyAgICBidWZbMV0gPSAoYUZyYW1lQ291bnRlciA+PiA4KSAmIDB4ZmY7CisgICAgYnVmWzJdID0gKGFGcmFtZUNvdW50ZXIgPj4gMTYpICYgMHhmZjsKKyAgICBidWZbM10gPSAoYUZyYW1lQ291bnRlciA+PiAyNCkgJiAweGZmOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2NvbnN0IHVpbnQ4X3QgKkZyYW1lOjpHZXRLZXlTb3VyY2Uodm9pZCkKK3sKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKTsKKyAgICBhc3NlcnQoYnVmICE9IE5VTEwpOworCisgICAgLy8gU2VjdXJpdHkgQ29udHJvbAorICAgIGJ1ZiArPSBrU2VjdXJpdHlDb250cm9sU2l6ZSArIGtGcmFtZUNvdW50ZXJTaXplOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0S2V5U291cmNlTGVuZ3RoKHVpbnQ4X3QgYUtleUlkTW9kZSkKK3sKKyAgICB1aW50OF90IHJ2YWwgPSAwOworCisgICAgc3dpdGNoIChhS2V5SWRNb2RlKQorICAgIHsKKyAgICBjYXNlIGtLZXlJZE1vZGUwOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtLZXlJZE1vZGUxOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtLZXlJZE1vZGUzOgorICAgICAgICBydmFsID0ga0tleVNvdXJjZVNpemVNb2RlMzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgRnJhbWU6OlNldEtleVNvdXJjZShjb25zdCB1aW50OF90ICphS2V5U291cmNlKQoreworICAgIHVpbnQ4X3Qga2V5U291cmNlTGVuZ3RoOworICAgIHVpbnQ4X3QgKmJ1ZjsKKworICAgIGJ1ZiA9IEZpbmRTZWN1cml0eUhlYWRlcigpOworICAgIGFzc2VydChidWYgIT0gTlVMTCk7CisKKyAgICBrZXlTb3VyY2VMZW5ndGggPSBHZXRLZXlTb3VyY2VMZW5ndGgoYnVmWzBdICYga0tleUlkTW9kZU1hc2spOworCisgICAgYnVmICs9IGtTZWN1cml0eUNvbnRyb2xTaXplICsga0ZyYW1lQ291bnRlclNpemU7CisKKyAgICBtZW1jcHkoYnVmLCBhS2V5U291cmNlLCBrZXlTb3VyY2VMZW5ndGgpOworfQorCitvdEVycm9yIEZyYW1lOjpHZXRLZXlJZCh1aW50OF90ICZhS2V5SWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBrZXlTb3VyY2VMZW5ndGg7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBrZXlTb3VyY2VMZW5ndGggPSBHZXRLZXlTb3VyY2VMZW5ndGgoYnVmWzBdICYga0tleUlkTW9kZU1hc2spOworCisgICAgYnVmICs9IGtTZWN1cml0eUNvbnRyb2xTaXplICsga0ZyYW1lQ291bnRlclNpemUgKyBrZXlTb3VyY2VMZW5ndGg7CisKKyAgICBhS2V5SWQgPSBidWZbMF07CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZyYW1lOjpTZXRLZXlJZCh1aW50OF90IGFLZXlJZCkKK3sKKyAgICB1aW50OF90IGtleVNvdXJjZUxlbmd0aDsKKyAgICB1aW50OF90ICpidWY7CisKKyAgICBidWYgPSBGaW5kU2VjdXJpdHlIZWFkZXIoKTsKKyAgICBhc3NlcnQoYnVmICE9IE5VTEwpOworCisgICAga2V5U291cmNlTGVuZ3RoID0gR2V0S2V5U291cmNlTGVuZ3RoKGJ1ZlswXSAmIGtLZXlJZE1vZGVNYXNrKTsKKworICAgIGJ1ZiArPSBrU2VjdXJpdHlDb250cm9sU2l6ZSArIGtGcmFtZUNvdW50ZXJTaXplICsga2V5U291cmNlTGVuZ3RoOworCisgICAgYnVmWzBdID0gYUtleUlkOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRnJhbWU6OkdldENvbW1hbmRJZCh1aW50OF90ICZhQ29tbWFuZElkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmJ1ZjsKKworICAgIFZlcmlmeU9yRXhpdCgoYnVmID0gR2V0UGF5bG9hZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBhQ29tbWFuZElkID0gYnVmWy0xXTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldENvbW1hbmRJZCh1aW50OF90IGFDb21tYW5kSWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmOworCisgICAgVmVyaWZ5T3JFeGl0KChidWYgPSBHZXRQYXlsb2FkKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGJ1ZlstMV0gPSBhQ29tbWFuZElkOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDhfdCBGcmFtZTo6R2V0SGVhZGVyTGVuZ3RoKHZvaWQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldFBheWxvYWQoKSAtIEdldFBzZHUoKSk7Cit9CisKK3VpbnQ4X3QgRnJhbWU6OkdldEZvb3Rlckxlbmd0aCh2b2lkKQoreworICAgIHVpbnQ4X3QgZm9vdGVyTGVuZ3RoID0gMDsKKyAgICB1aW50OF90ICpjdXI7CisKKyAgICBWZXJpZnlPckV4aXQoKGN1ciA9IEZpbmRTZWN1cml0eUhlYWRlcigpKSAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAoY3VyWzBdICYga1NlY0xldmVsTWFzaykKKyAgICB7CisgICAgY2FzZSBrU2VjTm9uZToKKyAgICBjYXNlIGtTZWNFbmM6CisgICAgICAgIGZvb3Rlckxlbmd0aCArPSBrTWljMFNpemU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU2VjTWljMzI6CisgICAgY2FzZSBrU2VjRW5jTWljMzI6CisgICAgICAgIGZvb3Rlckxlbmd0aCArPSBrTWljMzJTaXplOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1NlY01pYzY0OgorICAgIGNhc2Uga1NlY0VuY01pYzY0OgorICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzY0U2l6ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtTZWNNaWMxMjg6CisgICAgY2FzZSBrU2VjRW5jTWljMTI4OgorICAgICAgICBmb290ZXJMZW5ndGggKz0ga01pYzEyOFNpemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICAvLyBGcmFtZSBDaGVjayBTZXF1ZW5jZQorICAgIGZvb3Rlckxlbmd0aCArPSBrRmNzU2l6ZTsKKworICAgIHJldHVybiBmb290ZXJMZW5ndGg7Cit9CisKK3VpbnQ4X3QgRnJhbWU6OkdldE1heFBheWxvYWRMZW5ndGgodm9pZCkKK3sKKyAgICByZXR1cm4ga01UVSAtIChHZXRIZWFkZXJMZW5ndGgoKSArIEdldEZvb3Rlckxlbmd0aCgpKTsKK30KKwordWludDhfdCBGcmFtZTo6R2V0UGF5bG9hZExlbmd0aCh2b2lkKQoreworICAgIHJldHVybiBHZXRQc2R1TGVuZ3RoKCkgLSAoR2V0SGVhZGVyTGVuZ3RoKCkgKyBHZXRGb290ZXJMZW5ndGgoKSk7Cit9CisKK290RXJyb3IgRnJhbWU6OlNldFBheWxvYWRMZW5ndGgodWludDhfdCBhTGVuZ3RoKQoreworICAgIFNldFBzZHVMZW5ndGgoR2V0SGVhZGVyTGVuZ3RoKCkgKyBHZXRGb290ZXJMZW5ndGgoKSArIGFMZW5ndGgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit1aW50OF90ICpGcmFtZTo6R2V0SGVhZGVyKHZvaWQpCit7CisgICAgcmV0dXJuIEdldFBzZHUoKTsKK30KKwordWludDhfdCAqRnJhbWU6OkdldFBheWxvYWQodm9pZCkKK3sKKyAgICB1aW50OF90ICpjdXIgPSBHZXRQc2R1KCk7CisgICAgdWludDE2X3QgZmNmID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChHZXRQc2R1KClbMV0gPDwgOCkgfCBHZXRQc2R1KClbMF0pOworICAgIHVpbnQ4X3Qgc2VjdXJpdHlDb250cm9sOworCisgICAgLy8gRnJhbWUgQ29udHJvbAorICAgIGN1ciArPSBrRmNmU2l6ZTsKKyAgICAvLyBTZXF1ZW5jZSBOdW1iZXIKKyAgICBjdXIgKz0ga0RzblNpemU7CisKKyAgICAvLyBEZXN0aW5hdGlvbiBQQU4gKyBBZGRyZXNzCisgICAgc3dpdGNoIChmY2YgJiBGcmFtZTo6a0ZjZkRzdEFkZHJNYXNrKQorICAgIHsKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkck5vbmU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmRHN0QWRkckV4dDoKKyAgICAgICAgY3VyICs9IHNpemVvZihQYW5JZCkgKyBzaXplb2YoRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdyhjdXIgPSBOVUxMKTsKKyAgICB9CisKKyAgICAvLyBTb3VyY2UgUEFOICsgQWRkcmVzcworICAgIHN3aXRjaCAoZmNmICYgRnJhbWU6OmtGY2ZTcmNBZGRyTWFzaykKKyAgICB7CisgICAgY2FzZSBGcmFtZTo6a0ZjZlNyY0FkZHJOb25lOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRnJhbWU6OmtGY2ZTcmNBZGRyU2hvcnQ6CisgICAgICAgIGlmICgoZmNmICYgRnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKFBhbklkKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciArPSBzaXplb2YoU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZyYW1lOjprRmNmU3JjQWRkckV4dDoKKyAgICAgICAgaWYgKChmY2YgJiBGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoUGFuSWQpOworICAgICAgICB9CisKKyAgICAgICAgY3VyICs9IHNpemVvZihFeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGN1ciA9IE5VTEwpOworICAgIH0KKworICAgIC8vIFNlY3VyaXR5IENvbnRyb2wgKyBGcmFtZSBDb3VudGVyICsgS2V5IElkZW50aWZpZXIKKyAgICBpZiAoKGZjZiAmIEZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkKSAhPSAwKQorICAgIHsKKyAgICAgICAgc2VjdXJpdHlDb250cm9sID0gKmN1cjsKKworICAgICAgICBjdXIgKz0ga1NlY3VyaXR5Q29udHJvbFNpemUgKyBrRnJhbWVDb3VudGVyU2l6ZTsKKworICAgICAgICBzd2l0Y2ggKHNlY3VyaXR5Q29udHJvbCAmIGtLZXlJZE1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0tleUlkTW9kZTA6CisgICAgICAgICAgICBjdXIgKz0ga0tleVNvdXJjZVNpemVNb2RlMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0tleUlkTW9kZTE6CisgICAgICAgICAgICBjdXIgKz0ga0tleVNvdXJjZVNpemVNb2RlMSArIGtLZXlJbmRleFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtLZXlJZE1vZGUyOgorICAgICAgICAgICAgY3VyICs9IGtLZXlTb3VyY2VTaXplTW9kZTIgKyBrS2V5SW5kZXhTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrS2V5SWRNb2RlMzoKKyAgICAgICAgICAgIGN1ciArPSBrS2V5U291cmNlU2l6ZU1vZGUzICsga0tleUluZGV4U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tbWFuZCBJRAorICAgIGlmICgoZmNmICYga0ZjZkZyYW1lVHlwZU1hc2spID09IGtGY2ZGcmFtZU1hY0NtZCkKKyAgICB7CisgICAgICAgIGN1ciArPSBrQ29tbWFuZElkU2l6ZTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGN1cjsKK30KKwordWludDhfdCAqRnJhbWU6OkdldEZvb3Rlcih2b2lkKQoreworICAgIHJldHVybiBHZXRQc2R1KCkgKyBHZXRQc2R1TGVuZ3RoKCkgLSBHZXRGb290ZXJMZW5ndGgoKTsKK30KKworY29uc3QgY2hhciAqRnJhbWU6OlRvSW5mb1N0cmluZyhjaGFyICphQnVmLCB1aW50MTZfdCBhU2l6ZSkKK3sKKyAgICB1aW50OF90IHR5cGUsIGNvbW1hbmRJZDsKKyAgICBBZGRyZXNzIHNyYywgZHN0OworICAgIGNvbnN0IGNoYXIgKnR5cGVTdHI7CisgICAgY2hhciBzdHJpbmdCdWZmZXJbMTBdOworICAgIGNoYXIgc3JjU3RyaW5nQnVmZmVyW0FkZHJlc3M6OmtBZGRyZXNzU3RyaW5nU2l6ZV07CisgICAgY2hhciBkc3RTdHJpbmdCdWZmZXJbQWRkcmVzczo6a0FkZHJlc3NTdHJpbmdTaXplXTsKKworICAgIHR5cGUgPSBHZXRUeXBlKCk7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgIGNhc2Uga0ZjZkZyYW1lQmVhY29uOgorICAgICAgICB0eXBlU3RyID0gIkJlYWNvbiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrRmNmRnJhbWVEYXRhOgorICAgICAgICB0eXBlU3RyID0gIkRhdGEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0ZjZkZyYW1lQWNrOgorICAgICAgICB0eXBlU3RyID0gIkFjayI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrRmNmRnJhbWVNYWNDbWQ6CisgICAgICAgIGlmIChHZXRDb21tYW5kSWQoY29tbWFuZElkKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBjb21tYW5kSWQgPSAweGZmOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjb21tYW5kSWQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrTWFjQ21kRGF0YVJlcXVlc3Q6CisgICAgICAgICAgICB0eXBlU3RyID0gIkNtZChEYXRhUmVxKSI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtNYWNDbWRCZWFjb25SZXF1ZXN0OgorICAgICAgICAgICAgdHlwZVN0ciA9ICJDbWQoQmVhY29uUmVxKSI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25wcmludGYoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSwgIkNtZCglZCkiLCBjb21tYW5kSWQpOworICAgICAgICAgICAgdHlwZVN0ciA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbnByaW50ZihzdHJpbmdCdWZmZXIsIHNpemVvZihzdHJpbmdCdWZmZXIpLCAiJWQiLCB0eXBlKTsKKyAgICAgICAgdHlwZVN0ciA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKEdldFNyY0FkZHIoc3JjKSAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgc3JjLm1MZW5ndGggPSAwOworICAgIH0KKworICAgIGlmIChHZXREc3RBZGRyKGRzdCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGRzdC5tTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgImxlbjolZCwgc2VxbnVtOiVkLCB0eXBlOiVzLCBzcmM6JXMsIGRzdDolcywgc2VjOiVzLCBhY2tyZXE6JXMiLCBHZXRMZW5ndGgoKSwgR2V0U2VxdWVuY2UoKSwKKyAgICAgICAgICAgICB0eXBlU3RyLCBzcmMuVG9TdHJpbmcoc3JjU3RyaW5nQnVmZmVyLCBzaXplb2Yoc3JjU3RyaW5nQnVmZmVyKSksCisgICAgICAgICAgICAgZHN0LlRvU3RyaW5nKGRzdFN0cmluZ0J1ZmZlciwgc2l6ZW9mKGRzdFN0cmluZ0J1ZmZlcikpLCBHZXRTZWN1cml0eUVuYWJsZWQoKSA/ICJ5ZXMiIDogIm5vIiwKKyAgICAgICAgICAgICBHZXRBY2tSZXF1ZXN0KCkgPyAieWVzIiA6ICJubyIpOworCisgICAgcmV0dXJuIGFCdWY7Cit9CisKK2NvbnN0IGNoYXIgKkJlYWNvblBheWxvYWQ6OlRvSW5mb1N0cmluZyhjaGFyICphQnVmLCB1aW50MTZfdCBhU2l6ZSkKK3sKKyAgICBjb25zdCB1aW50OF90ICp4cGFuaWQgPSBHZXRFeHRlbmRlZFBhbklkKCk7CisKKyAgICBzbnByaW50ZihhQnVmLCBhU2l6ZSwgIm5hbWU6JXMsIHhwYW5pZDolMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCwgaWQ6JWQgdmVyOiVkLCBqb2luYWJsZTolcywgbmF0aXZlOiVzIiwKKyAgICAgICAgICAgICBHZXROZXR3b3JrTmFtZSgpLCB4cGFuaWRbMF0sIHhwYW5pZFsxXSwgeHBhbmlkWzJdLCB4cGFuaWRbM10sIHhwYW5pZFs0XSwgeHBhbmlkWzVdLCB4cGFuaWRbNl0sIHhwYW5pZFs3XSwKKyAgICAgICAgICAgICBHZXRQcm90b2NvbElkKCksIEdldFByb3RvY29sVmVyc2lvbigpLCBJc0pvaW5pbmdQZXJtaXR0ZWQoKSA/ICJ5ZXMiIDogIm5vIiwgSXNOYXRpdmUoKSA/ICJ5ZXMiIDogIm5vIik7CisKKyAgICByZXR1cm4gYUJ1ZjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuaHBwIGIvc3JjL2NvcmUvbWFjL21hY19mcmFtZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiN2M5OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfZnJhbWUuaHBwCkBAIC0wLDAgKzEsOTg5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBJRUVFIDgwMi4xNS40IE1BQyBmcmFtZXMuCisgKi8KKworI2lmbmRlZiBNQUNfRlJBTUVfSFBQXworI2RlZmluZSBNQUNfRlJBTUVfSFBQXworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgSXA2IHsgY2xhc3MgQWRkcmVzczsgfQorCituYW1lc3BhY2UgTWFjIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1hYworICoKKyAqIEB7CisgKgorICovCisKK2VudW0KK3sKKyAgICBrU2hvcnRBZGRyQnJvYWRjYXN0ID0gMHhmZmZmLAorICAgIGtTaG9ydEFkZHJJbnZhbGlkID0gMHhmZmZlLAorICAgIGtQYW5JZEJyb2FkY2FzdCA9IDB4ZmZmZiwKK307CisKKy8qKgorICogVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIElFRUUgODAyLjE1LjQgUEFOIElELgorICoKKyAqLwordHlwZWRlZiBvdFBhbklkIFBhbklkOworCisvKioKKyAqIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBJRUVFIDgwMi4xNS40IFNob3J0IEFkZHJlc3MuCisgKgorICovCit0eXBlZGVmIG90U2hvcnRBZGRyZXNzIFNob3J0QWRkcmVzczsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAqCisgKi8KK2NsYXNzIEV4dEFkZHJlc3M6IHB1YmxpYyBvdEV4dEFkZHJlc3MKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEdyb3VwIGJpdCBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgZ3JvdXAgYml0IGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgZ3JvdXAgYml0IGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzR3JvdXAodm9pZCkgY29uc3QgeyByZXR1cm4gKG04WzBdICYga0dyb3VwRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgR3JvdXAgYml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxvY2FsICBUUlVFIGlmIGdyb3VwIGFkZHJlc3MsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0R3JvdXAoYm9vbCBhR3JvdXApIHsKKyAgICAgICAgaWYgKGFHcm91cCkgeworICAgICAgICAgICAgbThbMF0gfD0ga0dyb3VwRmxhZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG04WzBdICY9IH5rR3JvdXBGbGFnOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBMb2NhbCBiaXQgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIGxvY2FsIGJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGxvY2FsIGJpdCBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xvY2FsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtOFswXSAmIGtMb2NhbEZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExvY2FsIGJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMb2NhbCAgVFJVRSBpZiBsb2NhbGx5IGFkbWluaXN0ZXJlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMb2NhbChib29sIGFMb2NhbCkgeworICAgICAgICBpZiAoYUxvY2FsKSB7CisgICAgICAgICAgICBtOFswXSB8PSBrTG9jYWxGbGFnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbThbMF0gJj0gfmtMb2NhbEZsYWc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhbiBJUHY2IEludGVyZmFjZSBJZGVudGlmaWVyIHRvIGFuIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcEFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldChjb25zdCBJcDY6OkFkZHJlc3MgJmFJcEFkZHJlc3MpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtHcm91cEZsYWcgPSAxIDw8IDAsCisgICAgICAgIGtMb2NhbEZsYWcgPSAxIDw8IDEsCisgICAgfTsKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhbiBJRUVFIDgwMi4xNS40IFNob3J0IG9yIEV4dGVuZGVkIEFkZHJlc3MuCisgKgorICovCitzdHJ1Y3QgQWRkcmVzcworeworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtBZGRyZXNzU3RyaW5nU2l6ZSA9IDE4LCAgICAgLy8vPCBNYXggY2hhcnMgbmVlZGVkIGZvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhZGRyZXNzIChAc2EgVG9TdHJpbmcoKSkuCisgICAgfTsKKworICAgIHVpbnQ4X3QgbUxlbmd0aDsgICAgICAgICAgICAgICAgIC8vLzwgTGVuZ3RoIG9mIGFkZHJlc3MgaW4gYnl0ZXMuCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIFNob3J0QWRkcmVzcyBtU2hvcnRBZGRyZXNzOyAgLy8vPCBUaGUgSUVFRSA4MDIuMTUuNCBTaG9ydCBBZGRyZXNzLgorICAgICAgICBFeHRBZGRyZXNzIG1FeHRBZGRyZXNzOyAgICAgIC8vLzwgVGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29udmVydHMgYW4gYWRkcmVzcyBvYmplY3QgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFCdWYgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICAgYVNpemUgIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2hhciBzdHJpbmcgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9TdHJpbmcoY2hhciAqYUJ1ZiwgdWludDE2X3QgYVNpemUpIGNvbnN0OworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUVFRSA4MDIuMTUuNCBNQUMgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBGcmFtZTogcHVibGljIG90UmFkaW9GcmFtZQoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNVFUgICAgICAgICAgICAgICAgICA9IDEyNywKKyAgICAgICAga0ZjZlNpemUgICAgICAgICAgICAgID0gc2l6ZW9mKHVpbnQxNl90KSwKKyAgICAgICAga0RzblNpemUgICAgICAgICAgICAgID0gc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICBrU2VjdXJpdHlDb250cm9sU2l6ZSAgPSBzaXplb2YodWludDhfdCksCisgICAgICAgIGtGcmFtZUNvdW50ZXJTaXplICAgICA9IHNpemVvZih1aW50MzJfdCksCisgICAgICAgIGtDb21tYW5kSWRTaXplICAgICAgICA9IHNpemVvZih1aW50OF90KSwKKyAgICAgICAga0Zjc1NpemUgICAgICAgICAgICAgID0gc2l6ZW9mKHVpbnQxNl90KSwKKworICAgICAgICBrRmNmRnJhbWVCZWFjb24gICAgICAgPSAwIDw8IDAsCisgICAgICAgIGtGY2ZGcmFtZURhdGEgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAga0ZjZkZyYW1lQWNrICAgICAgICAgID0gMiA8PCAwLAorICAgICAgICBrRmNmRnJhbWVNYWNDbWQgICAgICAgPSAzIDw8IDAsCisgICAgICAgIGtGY2ZGcmFtZVR5cGVNYXNrICAgICA9IDcgPDwgMCwKKyAgICAgICAga0ZjZlNlY3VyaXR5RW5hYmxlZCAgID0gMSA8PCAzLAorICAgICAgICBrRmNmRnJhbWVQZW5kaW5nICAgICAgPSAxIDw8IDQsCisgICAgICAgIGtGY2ZBY2tSZXF1ZXN0ICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAga0ZjZlBhbmlkQ29tcHJlc3Npb24gID0gMSA8PCA2LAorICAgICAgICBrRmNmRHN0QWRkck5vbmUgICAgICAgPSAwIDw8IDEwLAorICAgICAgICBrRmNmRHN0QWRkclNob3J0ICAgICAgPSAyIDw8IDEwLAorICAgICAgICBrRmNmRHN0QWRkckV4dCAgICAgICAgPSAzIDw8IDEwLAorICAgICAgICBrRmNmRHN0QWRkck1hc2sgICAgICAgPSAzIDw8IDEwLAorICAgICAgICBrRmNmRnJhbWVWZXJzaW9uMjAwNiAgPSAxIDw8IDEyLAorICAgICAgICBrRmNmRnJhbWVWZXJzaW9uTWFzayAgPSAzIDw8IDEzLAorICAgICAgICBrRmNmU3JjQWRkck5vbmUgICAgICAgPSAwIDw8IDE0LAorICAgICAgICBrRmNmU3JjQWRkclNob3J0ICAgICAgPSAyIDw8IDE0LAorICAgICAgICBrRmNmU3JjQWRkckV4dCAgICAgICAgPSAzIDw8IDE0LAorICAgICAgICBrRmNmU3JjQWRkck1hc2sgICAgICAgPSAzIDw8IDE0LAorCisgICAgICAgIGtTZWNOb25lICAgICAgICAgICAgICA9IDAgPDwgMCwKKyAgICAgICAga1NlY01pYzMyICAgICAgICAgICAgID0gMSA8PCAwLAorICAgICAgICBrU2VjTWljNjQgICAgICAgICAgICAgPSAyIDw8IDAsCisgICAgICAgIGtTZWNNaWMxMjggICAgICAgICAgICA9IDMgPDwgMCwKKyAgICAgICAga1NlY0VuYyAgICAgICAgICAgICAgID0gNCA8PCAwLAorICAgICAgICBrU2VjRW5jTWljMzIgICAgICAgICAgPSA1IDw8IDAsCisgICAgICAgIGtTZWNFbmNNaWM2NCAgICAgICAgICA9IDYgPDwgMCwKKyAgICAgICAga1NlY0VuY01pYzEyOCAgICAgICAgID0gNyA8PCAwLAorICAgICAgICBrU2VjTGV2ZWxNYXNrICAgICAgICAgPSA3IDw8IDAsCisKKyAgICAgICAga01pYzBTaXplICAgICAgICAgICAgID0gMCwKKyAgICAgICAga01pYzMyU2l6ZSAgICAgICAgICAgID0gMzIgLyBDSEFSX0JJVCwKKyAgICAgICAga01pYzY0U2l6ZSAgICAgICAgICAgID0gNjQgLyBDSEFSX0JJVCwKKyAgICAgICAga01pYzEyOFNpemUgICAgICAgICAgID0gMTI4IC8gQ0hBUl9CSVQsCisgICAgICAgIGtNYXhNaWNTaXplICAgICAgICAgICA9IGtNaWMxMjhTaXplLAorCisgICAgICAgIGtLZXlJZE1vZGUwICAgICAgICAgICA9IDAgPDwgMywKKyAgICAgICAga0tleUlkTW9kZTEgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBrS2V5SWRNb2RlMiAgICAgICAgICAgPSAyIDw8IDMsCisgICAgICAgIGtLZXlJZE1vZGUzICAgICAgICAgICA9IDMgPDwgMywKKyAgICAgICAga0tleUlkTW9kZU1hc2sgICAgICAgID0gMyA8PCAzLAorCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTAgICA9IDAsCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTEgICA9IDAsCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTIgICA9IDQsCisgICAgICAgIGtLZXlTb3VyY2VTaXplTW9kZTMgICA9IDgsCisKKyAgICAgICAga0tleUluZGV4U2l6ZSAgICAgICAgID0gc2l6ZW9mKHVpbnQ4X3QpLAorCisgICAgICAgIGtNYWNDbWRBc3NvY2lhdGlvblJlcXVlc3QgICAgICAgICAgPSAxLAorICAgICAgICBrTWFjQ21kQXNzb2NpYXRpb25SZXNwb25zZSAgICAgICAgID0gMiwKKyAgICAgICAga01hY0NtZERpc2Fzc29jaWF0aW9uTm90aWZpY2F0aW9uICA9IDMsCisgICAgICAgIGtNYWNDbWREYXRhUmVxdWVzdCAgICAgICAgICAgICAgICAgPSA0LAorICAgICAgICBrTWFjQ21kUGFuaWRDb25mbGljdE5vdGlmaWNhdGlvbiAgID0gNSwKKyAgICAgICAga01hY0NtZE9ycGhhbk5vdGlmaWNhdGlvbiAgICAgICAgICA9IDYsCisgICAgICAgIGtNYWNDbWRCZWFjb25SZXF1ZXN0ICAgICAgICAgICAgICAgPSA3LAorICAgICAgICBrTWFjQ21kQ29vcmRpbmF0b3JSZWFsaWdubWVudCAgICAgID0gOCwKKyAgICAgICAga01hY0NtZEd0c1JlcXVlc3QgICAgICAgICAgICAgICAgICA9IDksCisKKyAgICAgICAga0luZm9TdHJpbmdTaXplID0gIDExMCwgICAvLy88IE1heCBjaGFycyBuZWVkZWQgZm9yIHRoZSBpbmZvIHN0cmluZyByZXByZXNlbnRhdGlvbiAoQHNhIFRvSW5mb1N0cmluZygpKS4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIE1BQyBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRmNmICAgICBUaGUgRnJhbWUgQ29udHJvbCBmaWVsZC4KKyAgICAgKiBAcGFyYW1baW5dICBhU2VjQ3RsICBUaGUgU2VjdXJpdHkgQ29udHJvbCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgdGhlIE1BQyBoZWFkZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEludmFsaWQgdmFsdWVzIGZvciBAcCBhRmNmIGFuZC9vciBAcCBhU2VjQ3RsLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbml0TWFjSGVhZGVyKHVpbnQxNl90IGFGY2YsIHVpbnQ4X3QgYVNlY0N0bCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB2YWxpZGF0ZXMgdGhlIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIE1BQyBoZWFkZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9QQVJTRSAgIEZhaWxlZCB0byBwYXJzZSB0aHJvdWdoIHRoZSBNQUMgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBWYWxpZGF0ZVBzZHUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRUVFIDgwMi4xNS40IEZyYW1lIFR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBUeXBlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUeXBlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHNlY3VyaXR5IGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBzZWN1cml0eSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHNlY3VyaXR5IGlzIG5vdCBlbmFibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRTZWN1cml0eUVuYWJsZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEZyYW1lIFBlbmRpbmcgYml0IGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBGcmFtZSBQZW5kaW5nIGJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIEZyYW1lIFBlbmRpbmcgYml0IGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEdldEZyYW1lUGVuZGluZyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEZyYW1lIFBlbmRpbmcgYml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lUGVuZGluZyAgVGhlIEZyYW1lIFBlbmRpbmcgYml0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGcmFtZVBlbmRpbmcoYm9vbCBhRnJhbWVQZW5kaW5nKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgQWNrIFJlcXVlc3QgYml0IGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBBY2sgUmVxdWVzdCBiaXQgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBBY2sgUmVxdWVzdCBiaXQgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgR2V0QWNrUmVxdWVzdCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEFjayBSZXF1ZXN0IGJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBY2tSZXF1ZXN0ICBUaGUgQWNrIFJlcXVlc3QgYml0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBY2tSZXF1ZXN0KGJvb2wgYUFja1JlcXVlc3QpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU2VxdWVuY2UgTnVtYmVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNlcXVlbmNlIE51bWJlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VxdWVuY2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTZXF1ZW5jZSBOdW1iZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBTZXF1ZW5jZSBOdW1iZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIERlc3RpbmF0aW9uIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFQYW5JZCAgVGhlIERlc3RpbmF0aW9uIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgRGVzdGluYXRpb24gUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldERzdFBhbklkKFBhbklkICZhUGFuSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGVzdGluYXRpb24gUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBEZXN0aW5hdGlvbiBQQU4gSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERlc3RpbmF0aW9uIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXREc3RQYW5JZChQYW5JZCBhUGFuSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgRGVzdGluYXRpb24gQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgVGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldERzdEFkZHIoQWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGVzdGluYXRpb24gQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBEZXN0aW5hdGlvbiBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBEZXN0aW5hdGlvbiBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXREc3RBZGRyKFNob3J0QWRkcmVzcyBhU2hvcnRBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERlc3RpbmF0aW9uIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldERzdEFkZHIoY29uc3QgRXh0QWRkcmVzcyAmYUV4dEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgU291cmNlIFBBTiBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFQYW5JZCAgVGhlIFNvdXJjZSBQQU4gSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIFNvdXJjZSBQQU4gSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0U3JjUGFuSWQoUGFuSWQgJmFQYW5JZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTb3VyY2UgUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBTb3VyY2UgUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBTb3VyY2UgUEFOIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFNyY1BhbklkKFBhbklkIGFQYW5JZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgVGhlIFNvdXJjZSBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0U3JjQWRkcihBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaG9ydEFkZHJlc3MgIFRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgU291cmNlIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFNyY0FkZHIoU2hvcnRBZGRyZXNzIGFTaG9ydEFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgU291cmNlIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0QWRkcmVzcyAgVGhlIFNvdXJjZSBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0U3JjQWRkcihjb25zdCBFeHRBZGRyZXNzICZhRXh0QWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBTZWN1cml0eSBMZXZlbCBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFTZWN1cml0eUxldmVsICBUaGUgU2VjdXJpdHkgTGV2ZWwgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgU2VjdXJpdHkgTGV2ZWwgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0U2VjdXJpdHlMZXZlbCh1aW50OF90ICZhU2VjdXJpdHlMZXZlbCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBLZXkgSWRlbnRpZmllciBNb2RlLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFTZWN1cml0eUxldmVsICBUaGUgS2V5IElkZW50aWZpZXIgTW9kZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgS2V5IElkZW50aWZpZXIgTW9kZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0S2V5SWRNb2RlKHVpbnQ4X3QgJmFLZXlJZE1vZGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhRnJhbWVDb3VudGVyICBUaGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0RnJhbWVDb3VudGVyKHVpbnQzMl90ICZhRnJhbWVDb3VudGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEZyYW1lIENvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVDb3VudGVyICBUaGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgRnJhbWUgQ291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0RnJhbWVDb3VudGVyKHVpbnQzMl90IGFGcmFtZUNvdW50ZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEtleSBTb3VyY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEtleSBTb3VyY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRLZXlTb3VyY2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXkgU291cmNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleVNvdXJjZSAgQSBwb2ludGVyIHRvIHRoZSBLZXkgU291cmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXlTb3VyY2UoY29uc3QgdWludDhfdCAqYUtleVNvdXJjZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhS2V5SWQgIFRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgS2V5IElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldEtleUlkKHVpbnQ4X3QgJmFLZXlJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlJZCAgVGhlIEtleSBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBLZXkgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0S2V5SWQodWludDhfdCBhS2V5SWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQ29tbWFuZElkICBUaGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0Q29tbWFuZElkKHVpbnQ4X3QgJmFDb21tYW5kSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29tbWFuZCBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21tYW5kSWQgIFRoZSBDb21tYW5kIElELgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBDb21tYW5kIElELgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRDb21tYW5kSWQodWludDhfdCBhQ29tbWFuZElkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1BQyBGcmFtZSBMZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUFDIEZyYW1lIExlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldFBzZHVMZW5ndGgoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUFDIEZyYW1lIExlbmd0aC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBNQUMgRnJhbWUgTGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIE1BQyBGcmFtZSBMZW5ndGguCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBAcCBhTGVuZ3RoIHZhbHVlIHdhcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IFNldFBzZHVMZW5ndGgoYUxlbmd0aCk7IHJldHVybiBPVF9FUlJPUl9OT05FOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNQUMgaGVhZGVyIHNpemUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUFDIGhlYWRlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIZWFkZXJMZW5ndGgodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNQUMgZm9vdGVyIHNpemUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUFDIGZvb3RlciBzaXplLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRGb290ZXJMZW5ndGgodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IE1BQyBQYXlsb2FkIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IE1BQyBQYXlsb2FkIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UGF5bG9hZExlbmd0aCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1heGltdW0gTUFDIFBheWxvYWQgbGVuZ3RoIGZvciB0aGUgZ2l2ZW4gTUFDIGhlYWRlciBhbmQgZm9vdGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1heGltdW0gTUFDIFBheWxvYWQgbGVuZ3RoIGZvciB0aGUgZ2l2ZW4gTUFDIGhlYWRlciBhbmQgZm9vdGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNYXhQYXlsb2FkTGVuZ3RoKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUFDIFBheWxvYWQgbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIE1BQyBQYXlsb2FkIGxlbmd0aC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIEBwIGFMZW5ndGggdmFsdWUgd2FzIGludmFsaWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFBheWxvYWRMZW5ndGgodWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgY2hhbm5lbCB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgY2hhbm5lbCB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFubmVsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IGNoYW5uZWwgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgSUVFRSA4MDIuMTUuNCBjaGFubmVsIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkgeyBtQ2hhbm5lbCA9IGFDaGFubmVsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0cmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbSB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHRyYW5zbWl0L3JlY2VpdmUgcG93ZXIgaW4gZEJtIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0UG93ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbVBvd2VyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0cmFuc21pdC9yZWNlaXZlIHBvd2VyIGluIGRCbSB1c2VkIGZvciB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvd2VyICBUaGUgdHJhbnNtaXQvcmVjZWl2ZSBwb3dlciBpbiBkQm0gdXNlZCBmb3IgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UG93ZXIoaW50OF90IGFQb3dlcikgeyBtUG93ZXIgPSBhUG93ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlY2VpdmUgTGluayBRdWFsaXR5IEluZGljYXRvci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByZWNlaXZlIExpbmsgUXVhbGl0eSBJbmRpY2F0b3IuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExxaSh2b2lkKSBjb25zdCB7IHJldHVybiBtTHFpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZWNlaXZlIExpbmsgUXVhbGl0eSBJbmRpY2F0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTHFpICBUaGUgcmVjZWl2ZSBMaW5rIFF1YWxpdHkgSW5kaWNhdG9yLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMcWkodWludDhfdCBhTHFpKSB7IG1McWkgPSBhTHFpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmFuc21pdCBhdHRlbXB0cyBmb3IgdGhlIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0IGF0dGVtcHRzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNYXhUeEF0dGVtcHRzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NYXhUeEF0dGVtcHRzOyB9CisKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXQgYXR0ZW1wdHMgZm9yIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWl0IGF0dGVtcHRzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYXhUeEF0dGVtcHRzKHVpbnQ4X3QgYU1heFR4QXR0ZW1wdHMpIHsgbU1heFR4QXR0ZW1wdHMgPSBhTWF4VHhBdHRlbXB0czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGZyYW1lIHNlY3VyaXR5IHdhcyBlbmFibGVkIGFuZCBwYXNzZWQgc2VjdXJpdHkgdmFsaWRhdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEZyYW1lIHNlY3VyaXR5IHdhcyBlbmFibGVkIGFuZCBwYXNzZWQgc2VjdXJpdHkgdmFsaWRhdGlvbi4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBGcmFtZSBzZWN1cml0eSB3YXMgbm90IGVuYWJsZWQgb3IgZGlkIG5vdCBwYXNzIHNlY3VyaXR5IHZhbGlkYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEdldFNlY3VyaXR5VmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlY3VyaXR5VmFsaWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHNlY3VyaXR5IHZhbGlkIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWN1cml0eVZhbGlkICBUUlVFIGlmIGZyYW1lIHNlY3VyaXR5IHdhcyBlbmFibGVkIGFuZCBwYXNzZWQgc2VjdXJpdHkgdmFsaWRhdGlvbiwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWN1cml0eVZhbGlkKGJvb2wgYVNlY3VyaXR5VmFsaWQpIHsgbVNlY3VyaXR5VmFsaWQgPSBhU2VjdXJpdHlWYWxpZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyBhIHJldHJhbnNtaXNzaW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgRnJhbWUgaXMgYSByZXRyYW5zbWlzc2lvbgorICAgICAqIEByZXR2YWwgRkFMU0UgIFRoaXMgaXMgYSBuZXcgZnJhbWUgYW5kIG5vdCBhIHJldHJhbnNtaXNzaW9uIG9mIGFuIGVhcmxpZXIgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQVJldHJhbnNtaXNzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Jc0FSZXR4OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZXRyYW5zbWlzc2lvbiBmbGFnIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJc0FSZXR4ICBUUlVFIGlmIGZyYW1lIGlzIGEgcmV0cmFuc21pc3Npb24gb2YgYW4gZWFybGllciBmcmFtZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJc0FSZXRyYW5zbWlzc2lvbihib29sIGFJc0FSZXR4KSB7IG1Jc0FSZXR4ID0gYUlzQVJldHg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgUFNEVSBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUVFRSA4MDIuMTUuNCBQU0RVIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UHNkdUxlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IFBTRFUgbGVuZ3RoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIElFRUUgODAyLjE1LjQgUFNEVSBsZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBzZHVMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBhTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgUFNEVS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgUFNEVS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFBzZHUodm9pZCkgeyByZXR1cm4gbVBzZHU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBNQUMgSGVhZGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBNQUMgSGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0SGVhZGVyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE1BQyBQYXlsb2FkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBNQUMgUGF5bG9hZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFBheWxvYWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgTUFDIEZvb3Rlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTUFDIEZvb3Rlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldEZvb3Rlcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyYW1lIG9iamVjdCBhcyBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJ1ZiAgIEEgcG9pbnRlciB0byB0aGUgc3RyaW5nIGJ1ZmZlcgorICAgICAqIEBwYXJhbVtpbl0gICBhU2l6ZSAgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2hhciBzdHJpbmcgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9JbmZvU3RyaW5nKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFTaXplKTsKKworcHJpdmF0ZToKKyAgICB1aW50OF90ICpGaW5kU2VxdWVuY2Uodm9pZCk7CisgICAgdWludDhfdCAqRmluZERzdFBhbklkKHZvaWQpOworICAgIHVpbnQ4X3QgKkZpbmREc3RBZGRyKHZvaWQpOworICAgIHVpbnQ4X3QgKkZpbmRTcmNQYW5JZCh2b2lkKTsKKyAgICB1aW50OF90ICpGaW5kU3JjQWRkcih2b2lkKTsKKyAgICB1aW50OF90ICpGaW5kU2VjdXJpdHlIZWFkZXIodm9pZCk7CisgICAgc3RhdGljIHVpbnQ4X3QgR2V0S2V5U291cmNlTGVuZ3RoKHVpbnQ4X3QgYUtleUlkTW9kZSk7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJlYWNvbgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtTdXBlckZyYW1lU3BlYyAgID0gMHgwZmZmLCAgICAgICAgICAgICAgICAgLy8vPCBTdXBlcmZyYW1lIFNwZWNpZmljYXRpb24gdmFsdWUuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBCZWFjb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7CisgICAgICAgIG1TdXBlcmZyYW1lU3BlYyA9IG90OjpFbmNvZGluZzo6TGl0dGxlRW5kaWFuOjpIb3N0U3dhcDE2KGtTdXBlckZyYW1lU3BlYyk7CisgICAgICAgIG1HdHNTcGVjID0gMDsKKyAgICAgICAgbVBlbmRpbmdBZGRyZXNzU3BlYyA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBiZWFjb24gYXBwZWFycyB0byBiZSBhIHZhbGlkIFRocmVhZCBCZWFjb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgaWYgdGhlIGJlYWNvbiBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgVGhyZWFkIEJlYWNvbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgRkFMU0UgaWYgdGhlIGJlYWNvbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBUaHJlYWQgQmVhY29uIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgeworICAgICAgICByZXR1cm4gKG1TdXBlcmZyYW1lU3BlYyA9PSBvdDo6RW5jb2Rpbmc6OkxpdHRsZUVuZGlhbjo6SG9zdFN3YXAxNihrU3VwZXJGcmFtZVNwZWMpKSAmJgorICAgICAgICAgICAgICAgKG1HdHNTcGVjID09IDApICYmIChtUGVuZGluZ0FkZHJlc3NTcGVjID09IDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGJlYWNvbiBwYXlsb2FkIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIEEgcG9pbnRlciB0byB0aGUgYmVhY29uIHBheWxvYWQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFBheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVN1cGVyZnJhbWVTcGVjOworICAgIHVpbnQ4X3QgIG1HdHNTcGVjOworICAgIHVpbnQ4X3QgIG1QZW5kaW5nQWRkcmVzc1NwZWM7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUVFRSA4MDIuMTUuNCBCZWFjb24gUGF5bG9hZCBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJlYWNvblBheWxvYWQKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUHJvdG9jb2xJZCAgICAgICA9IDMsICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVGhyZWFkIFByb3RvY29sIElELgorICAgICAgICBrTmV0d29ya05hbWVTaXplICA9IDE2LCAgICAgICAgICAgICAgICAgICAgIC8vLzwgU2l6ZSBvZiBUaHJlYWQgTmV0d29yayBOYW1lIChieXRlcykuCisgICAgICAgIGtFeHRQYW5JZFNpemUgICAgID0gOCwgICAgICAgICAgICAgICAgICAgICAgLy8vPCBTaXplIG9mIFRocmVhZCBFeHRlbmRlZCBQQU4gSUQuCisgICAgICAgIGtJbmZvU3RyaW5nU2l6ZSAgID0gOTIsICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXggY2hhcnMgZm9yIHRoZSBpbmZvIHN0cmluZyAoQHNhIFRvSW5mb1N0cmluZygpKS4KKyAgICB9OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAga1Byb3RvY29sVmVyc2lvbiAgPSAyLCAgICAgICAgICAgICAgICAgICAgICAvLy88IFRocmVhZCBQcm90b2NvbCB2ZXJzaW9uLgorICAgICAgICBrVmVyc2lvbk9mZnNldCAgICA9IDQsICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVmVyc2lvbiBmaWVsZCBiaXQgb2Zmc2V0LgorICAgICAgICBrVmVyc2lvbk1hc2sgICAgICA9IDB4ZiA8PCBrVmVyc2lvbk9mZnNldCwgIC8vLzwgVmVyc2lvbiBmaWVsZCBtYXNrLgorICAgICAgICBrTmF0aXZlRmxhZyAgICAgICA9IDEgPDwgMywgICAgICAgICAgICAgICAgIC8vLzwgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnLgorICAgICAgICBrSm9pbmluZ0ZsYWcgICAgICA9IDEgPDwgMCwgICAgICAgICAgICAgICAgIC8vLzwgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIEJlYWNvbiBQYXlsb2FkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsKKyAgICAgICAgbVByb3RvY29sSWQgPSBrUHJvdG9jb2xJZDsKKyAgICAgICAgbUZsYWdzID0ga1Byb3RvY29sVmVyc2lvbiA8PCBrVmVyc2lvbk9mZnNldDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGJlYWNvbiBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgVGhyZWFkIEJlYWNvbiBQYXlsb2FkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICBpZiB0aGUgYmVhY29uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBUaHJlYWQgQmVhY29uIFBheWxvYWQuCisgICAgICogQHJldHZhbCBGQUxTRSBpZiB0aGUgYmVhY29uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIFRocmVhZCBCZWFjb24gUGF5bG9hZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSB7CisgICAgICAgIHJldHVybiAobVByb3RvY29sSWQgPT0ga1Byb3RvY29sSWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFByb3RvY29sIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgdGhlIFByb3RvY29sIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRQcm90b2NvbElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Qcm90b2NvbElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQcm90b2NvbCBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFByb3RvY29sIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFByb3RvY29sVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtRmxhZ3MgPj4ga1ZlcnNpb25PZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIGlmIHRoZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIGlmIHRoZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNOYXRpdmUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtOYXRpdmVGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIE5hdGl2ZSBDb21taXNzaW9uZXIgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJOYXRpdmUodm9pZCkgeyBtRmxhZ3MgJj0gfmtOYXRpdmVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5hdGl2ZSh2b2lkKSB7IG1GbGFncyB8PSBrTmF0aXZlRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBKb2luaW5nIFBlcm1pdHRlZCBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIGlmIHRoZSBKb2luaW5nIFBlcm1pdHRlZCBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBpZiB0aGUgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZyBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0pvaW5pbmdQZXJtaXR0ZWQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtKb2luaW5nRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBKb2luaW5nIFBlcm1pdHRlZCBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckpvaW5pbmdQZXJtaXR0ZWQodm9pZCkgeyBtRmxhZ3MgJj0gfmtKb2luaW5nRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSm9pbmluZyBQZXJtaXR0ZWQgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Sm9pbmluZ1Blcm1pdHRlZCh2b2lkKSB7CisgICAgICAgIG1GbGFncyB8PSBrSm9pbmluZ0ZsYWc7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19KT0lOX0JFQUNPTl9WRVJTSU9OICE9IGtQcm90b2NvbFZlcnNpb24KKyAgICAgICAgbUZsYWdzICY9IH5rVmVyc2lvbk1hc2s7CisgICAgICAgIG1GbGFncyB8PSAgT1BFTlRIUkVBRF9DT05GSUdfSk9JTl9CRUFDT05fVkVSU0lPTiA8PCBrVmVyc2lvbk9mZnNldDsKKyNlbmRpZgorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIE5hbWUgZmllbGQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgbmFtZSBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IGNoYXIgKkdldE5ldHdvcmtOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXR3b3JrTmFtZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTmV0d29yayBOYW1lIGZpZWxkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldHdvcmtOYW1lICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgTmFtZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV0d29ya05hbWUoY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lKSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJubGVuKGFOZXR3b3JrTmFtZSwgc2l6ZW9mKG1OZXR3b3JrTmFtZSkpOworICAgICAgICBtZW1zZXQobU5ldHdvcmtOYW1lLCAwLCBzaXplb2YobU5ldHdvcmtOYW1lKSk7CisgICAgICAgIG1lbWNweShtTmV0d29ya05hbWUsIGFOZXR3b3JrTmFtZSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgRXh0ZW5kZWQgUEFOIElEIGZpZWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBFeHRlbmRlZCBQQU4gSUQgZmllbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRFeHRlbmRlZFBhbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FeHRlbmRlZFBhbklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBFeHRlbmRlZCBQQU4gSUQgZmllbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRXh0UGFuSWQgIEEgcG9pbnRlciB0byB0aGUgRXh0ZW5kZWQgUEFOIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFeHRlbmRlZFBhbklkKGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCkgeyBtZW1jcHkobUV4dGVuZGVkUGFuSWQsIGFFeHRQYW5JZCwgc2l6ZW9mKG1FeHRlbmRlZFBhbklkKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJlYWNvbiBhcyBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUJ1ZiAgIEEgcG9pbnRlciB0byB0aGUgc3RyaW5nIGJ1ZmZlcgorICAgICAqIEBwYXJhbVtpbl0gICBhU2l6ZSAgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2hhciBzdHJpbmcgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9JbmZvU3RyaW5nKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFTaXplKTsKKworcHJpdmF0ZToKKyAgICB1aW50OF90ICBtUHJvdG9jb2xJZDsKKyAgICB1aW50OF90ICBtRmxhZ3M7CisgICAgY2hhciAgICAgbU5ldHdvcmtOYW1lW2tOZXR3b3JrTmFtZVNpemVdOworICAgIHVpbnQ4X3QgIG1FeHRlbmRlZFBhbklkW2tFeHRQYW5JZFNpemVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX0ZSQU1FX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmNwcCBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODhkMGEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY193aGl0ZWxpc3QuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHdoaXRlbGlzdCBJRUVFIDgwMi4xNS40IGZyYW1lIGZpbHRlcmluZyBiYXNlZCBvbiBNQUMgYWRkcmVzcy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1hY193aGl0ZWxpc3QuaHBwIgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNYWMgeworCitXaGl0ZWxpc3Q6OldoaXRlbGlzdCh2b2lkKQoreworICAgIG1FbmFibGVkID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBtV2hpdGVsaXN0W2ldLm1WYWxpZCA9IGZhbHNlOworICAgIH0KK30KKworb3RFcnJvciBXaGl0ZWxpc3Q6OkdldEVudHJ5KHVpbnQ4X3QgYUluZGV4LCBFbnRyeSAmYUVudHJ5KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbmRleCA8IGtNYXhFbnRyaWVzLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtZW1jcHkoJmFFbnRyeS5tRXh0QWRkcmVzcywgJm1XaGl0ZWxpc3RbYUluZGV4XS5tRXh0QWRkcmVzcywgc2l6ZW9mKGFFbnRyeS5tRXh0QWRkcmVzcykpOworICAgIGFFbnRyeS5tUnNzaSA9IG1XaGl0ZWxpc3RbYUluZGV4XS5tUnNzaTsKKyAgICBhRW50cnkubVZhbGlkID0gbVdoaXRlbGlzdFthSW5kZXhdLm1WYWxpZDsKKyAgICBhRW50cnkubUZpeGVkUnNzaSA9IG1XaGl0ZWxpc3RbYUluZGV4XS5tRml4ZWRSc3NpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworV2hpdGVsaXN0OjpFbnRyeSAqV2hpdGVsaXN0OjpBZGQoY29uc3QgRXh0QWRkcmVzcyAmYWRkcmVzcykKK3sKKyAgICBFbnRyeSAqcnZhbDsKKworICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IEZpbmQoYWRkcmVzcykpID09IE5VTEwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1XaGl0ZWxpc3RbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSgmbVdoaXRlbGlzdFtpXS5tRXh0QWRkcmVzcywgJmFkZHJlc3MsIHNpemVvZihtV2hpdGVsaXN0W2ldLm1FeHRBZGRyZXNzKSk7CisgICAgICAgIG1XaGl0ZWxpc3RbaV0ubVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgbVdoaXRlbGlzdFtpXS5tRml4ZWRSc3NpID0gZmFsc2U7CisgICAgICAgIEV4aXROb3cocnZhbCA9ICZtV2hpdGVsaXN0W2ldKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgV2hpdGVsaXN0OjpDbGVhcih2b2lkKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga01heEVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIG1XaGl0ZWxpc3RbaV0ubVZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFdoaXRlbGlzdDo6UmVtb3ZlKGNvbnN0IEV4dEFkZHJlc3MgJmFkZHJlc3MpCit7CisgICAgRW50cnkgKmVudHJ5OworCisgICAgVmVyaWZ5T3JFeGl0KChlbnRyeSA9IEZpbmQoYWRkcmVzcykpICE9IE5VTEwpOworICAgIG1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworV2hpdGVsaXN0OjpFbnRyeSAqV2hpdGVsaXN0OjpGaW5kKGNvbnN0IEV4dEFkZHJlc3MgJmFkZHJlc3MpCit7CisgICAgRW50cnkgKnJ2YWwgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4RW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCFtV2hpdGVsaXN0W2ldLm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWVtY21wKCZtV2hpdGVsaXN0W2ldLm1FeHRBZGRyZXNzLCAmYWRkcmVzcywgc2l6ZW9mKG1XaGl0ZWxpc3RbaV0ubUV4dEFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbVdoaXRlbGlzdFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgV2hpdGVsaXN0OjpDbGVhckZpeGVkUnNzaShFbnRyeSAmYUVudHJ5KQoreworICAgIGFFbnRyeS5tRml4ZWRSc3NpID0gZmFsc2U7Cit9CisKK290RXJyb3IgV2hpdGVsaXN0OjpHZXRGaXhlZFJzc2koRW50cnkgJmFFbnRyeSwgaW50OF90ICZyc3NpKSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFFbnRyeS5tVmFsaWQgJiYgYUVudHJ5Lm1GaXhlZFJzc2ksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICByc3NpID0gYUVudHJ5Lm1Sc3NpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBXaGl0ZWxpc3Q6OlNldEZpeGVkUnNzaShFbnRyeSAmYUVudHJ5LCBpbnQ4X3QgYVJzc2kpCit7CisgICAgYUVudHJ5Lm1GaXhlZFJzc2kgPSB0cnVlOworICAgIGFFbnRyeS5tUnNzaSA9IGFSc3NpOworfQorCit9ICAvLyBuYW1lc3BhY2UgTWFjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmhwcCBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzVjNjRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWFjL21hY193aGl0ZWxpc3QuaHBwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorI2luY2x1ZGUgIm1hY193aGl0ZWxpc3RfaW1wbC5ocHAiCisjZWxzZQorI2luY2x1ZGUgIm1hY193aGl0ZWxpc3Rfc3R1Yi5ocHAiCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0X2ltcGwuaHBwIGIvc3JjL2NvcmUvbWFjL21hY193aGl0ZWxpc3RfaW1wbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0X2ltcGwuaHBwCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBmcmFtZSBmaWx0ZXJpbmcgYmFzZWQgb24gTUFDIGFkZHJlc3MuCisgKi8KKworI2lmbmRlZiBNQUNfV0hJVEVMSVNUX0hQUF8KKyNkZWZpbmUgTUFDX1dISVRFTElTVF9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWFjIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW1hYworICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHdoaXRlbGlzdCBmaWx0ZXJpbmcgb24gSUVFRSA4MDIuMTUuNCBmcmFtZXMuCisgKgorICovCitjbGFzcyBXaGl0ZWxpc3QKK3sKK3B1YmxpYzoKKyAgICB0eXBlZGVmIG90TWFjV2hpdGVsaXN0RW50cnkgRW50cnk7CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4RW50cmllcyA9IE9QRU5USFJFQURfQ09ORklHX01BQ19XSElURUxJU1RfU0laRSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgd2hpdGVsaXN0IGZpbHRlci4KKyAgICAgKgorICAgICAqLworICAgIFdoaXRlbGlzdCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgd2hpdGVsaXN0IGZpbHRlciBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIHdoaXRlbGlzdCBmaWx0ZXIgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgd2hpdGVsaXN0IGZpbHRlciBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFbmFibGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1FbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgdG8gZW5hYmxlIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVuYWJsZWQoYm9vbCBhRW5hYmxlZCkgeyBtRW5hYmxlZCA9IGFFbmFibGVkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3aGl0ZWxpc3QgZW50cmllcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3aGl0ZWxpc3QgZW50cmllcy4KKyAgICAgKgorICAgICAqLworICAgIGludCBHZXRNYXhFbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGtNYXhFbnRyaWVzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIGEgd2hpdGVsaXN0IGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFJbmRleCAgQW4gaW5kZXggaW50byB0aGUgTUFDIHdoaXRlbGlzdCB0YWJsZS4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUVudHJ5ICBBIHJlZmVyZW5jZSB0byB3aGVyZSB0aGUgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIE1BQyB3aGl0ZWxpc3QgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFJbmRleCBpcyBvdXQgb2YgYm91bmRzIG9yIEBwIGFFbnRyeSBpcyBOVUxMLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRFbnRyeSh1aW50OF90IGFJbmRleCwgRW50cnkgJmFFbnRyeSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIEV4dGVuZGVkIEFkZHJlc3MgdG8gdGhlIHdoaXRlbGlzdCBmaWx0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHdoaXRlbGlzdCBlbnRyeSBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgZW50cmllcy4KKyAgICAgKgorICAgICAqLworICAgIEVudHJ5ICpBZGQoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbiBFeHRlbmRlZCBBZGRyZXNzIHRvIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmUoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgZW50cmllcyBmcm9tIHRoZSB3aGl0ZWxpc3QgZmlsdGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbmRzIGEgd2hpdGVsaXN0IGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSB3aGl0ZWxpc3QgZW50cnkgb3IgTlVMTCBpZiB0aGUgZW50cnkgY291bGQgbm90IGJlIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgRW50cnkgKkZpbmQoY29uc3QgRXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBmaXhlZCBSU1NJIHZhbHVlIGFuZCB1c2VzIHRoZSBtZWFzdXJlZCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgcmFkaW8gaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFbnRyeSAgQSByZWZlcmVuY2UgdG8gdGhlIHdoaXRlbGlzdCBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJGaXhlZFJzc2koRW50cnkgJmFFbnRyeSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGZpeGVkIFJTU0kgaXMgc2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFFbnRyeSAgQSByZWZlcmVuY2UgdG8gdGhlIHdoaXRlbGlzdCBlbnRyeS4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVJzc2kgICBBIHJlZmVyZW5jZSB0byB0aGUgUlNTSSB2YXJpYWJsZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBBIGZpeGVkIFJTU0kgaXMgc2V0IGFuZCB3cml0dGVuIHRvIEBwIGFSc3NpLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBBIGZpeGVkIFJTU0kgd2FzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldEZpeGVkUnNzaShFbnRyeSAmYUVudHJ5LCBpbnQ4X3QgJmFSc3NpKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgYSBmaXhlZCBSU1NJIHZhbHVlIGZvciBhbGwgcmVjZWl2ZWQgbWVzc2FnZXMgbWF0Y2hpbmcgQHAgYUVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVudHJ5ICBBIHJlZmVyZW5jZSB0byB0aGUgd2hpdGVsaXN0IGVudHJ5LgorICAgICAqIEBwYXJhbVtpbl0gIGFSc3NpICAgQW4gUlNTSSB2YWx1ZSBpbiBkQm0uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZpeGVkUnNzaShFbnRyeSAmYUVudHJ5LCBpbnQ4X3QgYVJzc2kpOworCitwcml2YXRlOgorICAgIEVudHJ5IG1XaGl0ZWxpc3Rba01heEVudHJpZXNdOworCisgICAgYm9vbCBtRW5hYmxlZDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX1dISVRFTElTVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tYWMvbWFjX3doaXRlbGlzdF9zdHViLmhwcCBiL3NyYy9jb3JlL21hYy9tYWNfd2hpdGVsaXN0X3N0dWIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWM2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tYWMvbWFjX3doaXRlbGlzdF9zdHViLmhwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBmcmFtZSBmaWx0ZXJpbmcgYmFzZWQgb24gTUFDIGFkZHJlc3MuCisgKi8KKworI2lmbmRlZiBNQUNfV0hJVEVMSVNUX0hQUF8KKyNkZWZpbmUgTUFDX1dISVRFTElTVF9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWFjIHsKKworY2xhc3MgV2hpdGVsaXN0Cit7CitwdWJsaWM6CisgICAgdHlwZWRlZiBvdE1hY1doaXRlbGlzdEVudHJ5IEVudHJ5OworCisgICAgV2hpdGVsaXN0KHZvaWQpIHsgfQorCisgICAgYm9vbCBJc0VuYWJsZWQodm9pZCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgU2V0RW5hYmxlZChib29sKSB7IH0KKworICAgIGludCBHZXRNYXhFbnRyaWVzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIG90RXJyb3IgR2V0RW50cnkodWludDhfdCwgRW50cnkgJikgY29uc3QgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisKKyAgICBFbnRyeSAqQWRkKGNvbnN0IEV4dEFkZHJlc3MgJikgeyByZXR1cm4gTlVMTDsgfQorCisgICAgdm9pZCBSZW1vdmUoY29uc3QgRXh0QWRkcmVzcyAmKSB7IH0KKworICAgIHZvaWQgQ2xlYXIodm9pZCkgeyB9CisKKyAgICBFbnRyeSAqRmluZChjb25zdCBFeHRBZGRyZXNzICYpIHsgcmV0dXJuIE5VTEw7IH0KKworICAgIHZvaWQgQ2xlYXJGaXhlZFJzc2koRW50cnkgJikgeyB9CisKKyAgICBvdEVycm9yIEdldEZpeGVkUnNzaShFbnRyeSAmLCBpbnQ4X3QgJikgY29uc3QgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisKKyAgICB2b2lkIFNldEZpeGVkUnNzaShFbnRyeSAmLCBpbnQ4X3QpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIE1hYworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUFDX1dISVRFTElTVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2Fubm91bmNlX2JlZ2luX2NsaWVudC5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2Fubm91bmNlX2JlZ2luX2NsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5MDJjNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvYW5ub3VuY2VfYmVnaW5fY2xpZW50LmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgQW5ub3VuY2UgQmVnaW4gQ2xpZW50LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImFubm91bmNlX2JlZ2luX2NsaWVudC50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiYW5ub3VuY2VfYmVnaW5fY2xpZW50LmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCituYW1lc3BhY2Ugb3QgeworCitBbm5vdW5jZUJlZ2luQ2xpZW50OjpBbm5vdW5jZUJlZ2luQ2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpCit7Cit9CisKK290RXJyb3IgQW5ub3VuY2VCZWdpbkNsaWVudDo6U2VuZFJlcXVlc3QodWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lclNlc3Npb25JZFRsdiBzZXNzaW9uSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIE1lc2hDb1A6OkNvdW50VGx2IGNvdW50OworICAgIE1lc2hDb1A6OlBlcmlvZFRsdiBwZXJpb2Q7CisKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KEdldE5ldGlmKCkuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGhlYWRlci5Jbml0KGFBZGRyZXNzLklzTXVsdGljYXN0KCkgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfQU5OT1VOQ0VfQkVHSU4pOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShHZXROZXRpZigpLkdldENvYXAoKSwgaGVhZGVyKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHNlc3Npb25JZC5Jbml0KCk7CisgICAgc2Vzc2lvbklkLlNldENvbW1pc3Npb25lclNlc3Npb25JZChHZXROZXRpZigpLkdldENvbW1pc3Npb25lcigpLkdldFNlc3Npb25JZCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzZXNzaW9uSWQsIHNpemVvZihzZXNzaW9uSWQpKSk7CisKKyAgICBjaGFubmVsTWFzay5Jbml0KCk7CisgICAgY2hhbm5lbE1hc2suU2V0TWFzayhhQ2hhbm5lbE1hc2spOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spKSk7CisKKyAgICBjb3VudC5Jbml0KCk7CisgICAgY291bnQuU2V0Q291bnQoYUNvdW50KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZjb3VudCwgc2l6ZW9mKGNvdW50KSkpOworCisgICAgcGVyaW9kLkluaXQoKTsKKyAgICBwZXJpb2QuU2V0UGVyaW9kKGFQZXJpb2QpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBlcmlvZCwgc2l6ZW9mKHBlcmlvZCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIoYUFkZHJlc3MpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgbWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQoR2V0TmV0aWYoKS5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXROZXRpZigpLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgYW5ub3VuY2UgYmVnaW4gcXVlcnkiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvYW5ub3VuY2VfYmVnaW5fY2xpZW50LmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvYW5ub3VuY2VfYmVnaW5fY2xpZW50LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU5YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9hbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciByZXNwb25kaW5nIHRvIEFubm91bmNlIFJlcXVlc3RzLgorICovCisKKyNpZm5kZWYgQU5OT1VOQ0VfQkVHSU5fQ0xJRU5UX0hQUF8KKyNkZWZpbmUgQU5OT1VOQ0VfQkVHSU5fQ0xJRU5UX0hQUF8KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgaGFuZGxpbmcgQW5ub3VuY2UgQmVnaW4gUmVxdWVzdHMuCisgKgorICovCitjbGFzcyBBbm5vdW5jZUJlZ2luQ2xpZW50OiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQW5ub3VuY2VCZWdpbkNsaWVudChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgQW5ub3VuY2UgQmVnaW4gbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVsIG1hc2sgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgVGhlIG51bWJlciBvZiBlbmVyZ3kgbWVhc3VyZW1lbnRzIHBlciBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgIFRoZSB0aW1lIGJldHdlZW4gZW5lcmd5IG1lYXN1cmVtZW50cyAobWlsbGlzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBBbm5vdW5jZSBCZWdpbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgYSBBbm5vdW5jZSBCZWdpbiBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kUmVxdWVzdCh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBtUGVyaW9kLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKTsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBBTk5PVU5DRV9CRUdJTl9DTElFTlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9jb21taXNzaW9uZXIuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC9jb21taXNzaW9uZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjgzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2NvbW1pc3Npb25lci5jcHAKQEAgLTAsMCArMSwxMDkzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQ29tbWlzc2lvbmVyIHJvbGUuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiY29tbWlzc2lvbmVyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjb21taXNzaW9uZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL3Bia2RmMl9jbWFjLmgiCisjaW5jbHVkZSAibWVzaGNvcC9qb2luZXJfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXA2NDsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworQ29tbWlzc2lvbmVyOjpDb21taXNzaW9uZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbUFubm91bmNlQmVnaW4oYVRocmVhZE5ldGlmKSwKKyAgICBtRW5lcmd5U2NhbihhVGhyZWFkTmV0aWYpLAorICAgIG1QYW5JZFF1ZXJ5KGFUaHJlYWROZXRpZiksCisgICAgbVN0YXRlKE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCksCisgICAgbUpvaW5lclBvcnQoMCksCisgICAgbUpvaW5lclJsb2MoMCksCisgICAgbUpvaW5lckV4cGlyYXRpb25UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCBIYW5kbGVKb2luZXJFeHBpcmF0aW9uVGltZXIsIHRoaXMpLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCBIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbVNlc3Npb25JZCgwKSwKKyAgICBtVHJhbnNtaXRBdHRlbXB0cygwKSwKKyAgICBtUmVsYXlSZWNlaXZlKE9UX1VSSV9QQVRIX1JFTEFZX1JYLCAmQ29tbWlzc2lvbmVyOjpIYW5kbGVSZWxheVJlY2VpdmUsIHRoaXMpLAorICAgIG1EYXRhc2V0Q2hhbmdlZChPVF9VUklfUEFUSF9EQVRBU0VUX0NIQU5HRUQsICZDb21taXNzaW9uZXI6OkhhbmRsZURhdGFzZXRDaGFuZ2VkLCB0aGlzKSwKKyAgICBtSm9pbmVyRmluYWxpemUoT1RfVVJJX1BBVEhfSk9JTkVSX0ZJTkFMSVpFLCAmQ29tbWlzc2lvbmVyOjpIYW5kbGVKb2luZXJGaW5hbGl6ZSwgdGhpcykKK3sKKyAgICBtZW1zZXQobUpvaW5lcnMsIDAsIHNpemVvZihtSm9pbmVycykpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6QWRkQ29hcFJlc291cmNlcyh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBuZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVJlbGF5UmVjZWl2ZSk7CisgICAgbmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1EYXRhc2V0Q2hhbmdlZCk7CisgICAgbmV0aWYuR2V0Q29hcFNlY3VyZSgpLkFkZFJlc291cmNlKG1Kb2luZXJGaW5hbGl6ZSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpSZW1vdmVDb2FwUmVzb3VyY2VzKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG5ldGlmLkdldENvYXAoKS5SZW1vdmVSZXNvdXJjZShtUmVsYXlSZWNlaXZlKTsKKyAgICBuZXRpZi5HZXRDb2FwKCkuUmVtb3ZlUmVzb3VyY2UobURhdGFzZXRDaGFuZ2VkKTsKKyAgICBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuUmVtb3ZlUmVzb3VyY2UobUpvaW5lckZpbmFsaXplKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlN0YXJ0KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgPT0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldE5ldGlmKCkuR2V0Q29hcFNlY3VyZSgpLlN0YXJ0KE9QRU5USFJFQURfQ09ORklHX0pPSU5FUl9VRFBfUE9SVCwgU2VuZFJlbGF5VHJhbnNtaXQsIHRoaXMpKTsKKworICAgIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9QRVRJVElPTjsKKyAgICBtVHJhbnNtaXRBdHRlbXB0cyA9IDA7CisKKyAgICBTZW5kUGV0aXRpb24oKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTdG9wKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgIT0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgR2V0TmV0aWYoKS5HZXRDb2FwU2VjdXJlKCkuU3RvcCgpOworCisgICAgbVN0YXRlID0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVEOworICAgIFJlbW92ZUNvYXBSZXNvdXJjZXMoKTsKKyAgICBtVHJhbnNtaXRBdHRlbXB0cyA9IDA7CisKKyAgICBtVGltZXIuU3RvcCgpOworCisgICAgR2V0TmV0aWYoKS5HZXREdGxzKCkuU3RvcCgpOworCisgICAgU2VuZEtlZXBBbGl2ZSgpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlNlbmRDb21taXNzaW9uZXJTZXQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIG90Q29tbWlzc2lvbmluZ0RhdGFzZXQgZGF0YXNldDsKKyAgICBTdGVlcmluZ0RhdGFUbHYgc3RlZXJpbmdEYXRhOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtZW1zZXQoJmRhdGFzZXQsIDAsIHNpemVvZihkYXRhc2V0KSk7CisKKyAgICAvLyBzZXNzaW9uIGlkCisgICAgZGF0YXNldC5tU2Vzc2lvbklkID0gbVNlc3Npb25JZDsKKyAgICBkYXRhc2V0Lm1Jc1Nlc3Npb25JZFNldCA9IHRydWU7CisKKyAgICAvLyBjb21wdXRlIGJsb29tIGZpbHRlcgorICAgIHN0ZWVyaW5nRGF0YS5Jbml0KCk7CisgICAgc3RlZXJpbmdEYXRhLkNsZWFyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtSm9pbmVycykgLyBzaXplb2YobUpvaW5lcnNbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAoIW1Kb2luZXJzW2ldLm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUpvaW5lcnNbaV0ubUFueSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RlZXJpbmdEYXRhLlNldExlbmd0aCgxKTsKKyAgICAgICAgICAgIHN0ZWVyaW5nRGF0YS5TZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RlZXJpbmdEYXRhLkNvbXB1dGVCbG9vbUZpbHRlcigmbUpvaW5lcnNbaV0ubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIC8vIHNldCBibG9vbSBmaWx0ZXIKKyAgICBtZW1jcHkoZGF0YXNldC5tU3RlZXJpbmdEYXRhLm04LCBzdGVlcmluZ0RhdGEuR2V0VmFsdWUoKSwgc3RlZXJpbmdEYXRhLkdldExlbmd0aCgpKTsKKyAgICBkYXRhc2V0Lm1TdGVlcmluZ0RhdGEubUxlbmd0aCA9IHN0ZWVyaW5nRGF0YS5HZXRMZW5ndGgoKTsKKyAgICBkYXRhc2V0Lm1Jc1N0ZWVyaW5nRGF0YVNldCA9IHRydWU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1nbXRDb21taXNzaW9uZXJTZXRSZXF1ZXN0KGRhdGFzZXQsIE5VTEwsIDApKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpDbGVhckpvaW5lcnModm9pZCkKK3sKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YobUpvaW5lcnMpIC8gc2l6ZW9mKG1Kb2luZXJzWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgbUpvaW5lcnNbaV0ubVZhbGlkID0gZmFsc2U7CisgICAgfQorCisgICAgU2VuZENvbW1pc3Npb25lclNldCgpOworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OkFkZEpvaW5lcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzLCBjb25zdCBjaGFyICphUFNLZCwgdWludDMyX3QgYVRpbWVvdXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiJWxsWCwgJXMiLCAoYUV4dEFkZHJlc3MgPyBIb3N0U3dhcDY0KCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ2NF90ICo+KGFFeHRBZGRyZXNzKSkgOiAwKSwgYVBTS2QpOworICAgIFZlcmlmeU9yRXhpdChzdHJsZW4oYVBTS2QpIDw9IER0bHM6OmtQc2tNYXhMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBSZW1vdmVKb2luZXIoYUV4dEFkZHJlc3MsIDApOyAgLy8gcmVtb3ZlIGltZWRpYXRlbHkKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtSm9pbmVyc1tpXS5tVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFFeHRBZGRyZXNzICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Kb2luZXJzW2ldLm1FeHRBZGRyZXNzID0gKmFFeHRBZGRyZXNzOworICAgICAgICAgICAgbUpvaW5lcnNbaV0ubUFueSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUpvaW5lcnNbaV0ubUFueSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAodm9pZClzdHJsY3B5KG1Kb2luZXJzW2ldLm1Qc2ssIGFQU0tkLCBzaXplb2YobUpvaW5lcnNbaV0ubVBzaykpOworICAgICAgICBtSm9pbmVyc1tpXS5tVmFsaWQgPSB0cnVlOworICAgICAgICBtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUgPSBUaW1lcjo6R2V0Tm93KCkgKyBUaW1lcjo6U2VjVG9Nc2VjKGFUaW1lb3V0KTsKKworICAgICAgICBVcGRhdGVKb2luZXJFeHBpcmF0aW9uVGltZXIoKTsKKworICAgICAgICBTZW5kQ29tbWlzc2lvbmVyU2V0KCk7CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpSZW1vdmVKb2luZXIoY29uc3QgTWFjOjpFeHRBZGRyZXNzICphRXh0QWRkcmVzcywgdWludDMyX3QgYURlbGF5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdExvZ0Z1bmNFbnRyeU1zZygiJWxsWCIsIChhRXh0QWRkcmVzcyA/IEhvc3RTd2FwNjQoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QgKj4oYUV4dEFkZHJlc3MpKSA6IDApKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmICghbUpvaW5lcnNbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRXh0QWRkcmVzcyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWVtY21wKCZtSm9pbmVyc1tpXS5tRXh0QWRkcmVzcywgYUV4dEFkZHJlc3MsIHNpemVvZihtSm9pbmVyc1tpXS5tRXh0QWRkcmVzcykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFtSm9pbmVyc1tpXS5tQW55KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhRGVsYXkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBub3cgPSBUaW1lcjo6R2V0Tm93KCk7CisKKyAgICAgICAgICAgIGlmICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obUpvaW5lcnNbaV0ubUV4cGlyYXRpb25UaW1lIC0gbm93KSA+IDApICYmCisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUgLSBub3cpID4gVGltZXI6OlNlY1RvTXNlYyhhRGVsYXkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUgPSBub3cgKyBUaW1lcjo6U2VjVG9Nc2VjKGFEZWxheSk7CisgICAgICAgICAgICAgICAgVXBkYXRlSm9pbmVyRXhwaXJhdGlvblRpbWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSm9pbmVyc1tpXS5tVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFVwZGF0ZUpvaW5lckV4cGlyYXRpb25UaW1lcigpOworICAgICAgICAgICAgU2VuZENvbW1pc3Npb25lclNldCgpOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTZXRQcm92aXNpb25pbmdVcmwoY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCkKK3sKKyAgICByZXR1cm4gR2V0TmV0aWYoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybC5TZXRQcm92aXNpb25pbmdVcmwoYVByb3Zpc2lvbmluZ1VybCk7Cit9CisKK3VpbnQxNl90IENvbW1pc3Npb25lcjo6R2V0U2Vzc2lvbklkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TZXNzaW9uSWQ7Cit9CisKK290Q29tbWlzc2lvbmVyU3RhdGUgQ29tbWlzc2lvbmVyOjpHZXRTdGF0ZSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGU7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgc3dpdGNoIChtU3RhdGUpCisgICAgeworICAgIGNhc2UgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OOgorICAgICAgICBTZW5kUGV0aXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkU6CisgICAgICAgIFNlbmRLZWVwQWxpdmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlSm9pbmVyRXhwaXJhdGlvblRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVKb2luZXJFeHBpcmF0aW9uVGltZXIoKTsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUpvaW5lckV4cGlyYXRpb25UaW1lcih2b2lkKQoreworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKworICAgIC8vIFJlbW92ZSBKb2luZXJzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmICghbUpvaW5lcnNbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90Pihub3cgLSBtSm9pbmVyc1tpXS5tRXhwaXJhdGlvblRpbWUpID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nRGViZ01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlbW92aW5nIGpvaW5lciBkdWUgdG8gdGltZW91dCBvciBzdWNjZXNzZnVsbHkgam9pbmVkIik7CisgICAgICAgICAgICBSZW1vdmVKb2luZXIoJm1Kb2luZXJzW2ldLm1FeHRBZGRyZXNzLCAwKTsgIC8vIHJlbW92ZSBpbWVkaWF0ZWx5CisgICAgICAgIH0KKyAgICB9CisKKyAgICBVcGRhdGVKb2luZXJFeHBpcmF0aW9uVGltZXIoKTsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OlVwZGF0ZUpvaW5lckV4cGlyYXRpb25UaW1lcih2b2lkKQoreworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKyAgICB1aW50MzJfdCBuZXh0VGltZW91dCA9IDB4ZmZmZmZmZmY7CisKKyAgICAvLyBDaGVjayBpZiB0aW1lciBzaG91bGQgYmUgc2V0IGZvciBuZXh0IEpvaW5lci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtSm9pbmVycykgLyBzaXplb2YobUpvaW5lcnNbMF0pOyBpKyspCisgICAgeworICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1Kb2luZXJzW2ldLm1WYWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1Kb2luZXJzW2ldLm1FeHBpcmF0aW9uVGltZSAtIG5vdyA8IG5leHRUaW1lb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHRUaW1lb3V0ID0gbUpvaW5lcnNbaV0ubUV4cGlyYXRpb25UaW1lIC0gbm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5leHRUaW1lb3V0ICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVyIHRvIHRoZSB0aW1lb3V0IG9mIHRoZSBuZXh0IEpvaW5lci4KKyAgICAgICAgbUpvaW5lckV4cGlyYXRpb25UaW1lci5TdGFydChuZXh0VGltZW91dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE5vIEpvaW5lcnMsIHN0b3AgdGhlIHRpbWVyLgorICAgICAgICBtSm9pbmVyRXhwaXJhdGlvblRpbWVyLlN0b3AoKTsKKyAgICB9Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTZW5kTWdtdENvbW1pc3Npb25lckdldFJlcXVlc3QoY29uc3QgdWludDhfdCAqYVRsdnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIE1lc2hDb1A6OlRsdiB0bHY7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9HRVQpOworCisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICB0bHYuU2V0VHlwZShNZXNoQ29QOjpUbHY6OmtHZXQpOworICAgICAgICB0bHYuU2V0TGVuZ3RoKGFMZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoYVRsdnMsIGFMZW5ndGgpKTsKKyAgICB9CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJBbG9jKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJHZXRSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBNR01UX0NPTU1JU1NJT05FUl9HRVQucmVxIHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJHZXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxDb21taXNzaW9uZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVNZ210Q29tbWlzc2lzb25lckdldFJlc3BvbnNlKAorICAgICAgICBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksIGFSZXN1bHQpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlTWdtdENvbW1pc3Npc29uZXJHZXRSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgKHZvaWQpIGFNZXNzYWdlOworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIE1HTVRfQ09NTUlTU0lPTkVSX0dFVCByZXNwb25zZSIpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlNlbmRNZ210Q29tbWlzc2lvbmVyU2V0UmVxdWVzdChjb25zdCBvdENvbW1pc3Npb25pbmdEYXRhc2V0ICZhRGF0YXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9DT01NSVNTSU9ORVJfU0VUKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0xvY2F0b3JTZXQpCisgICAgeworICAgICAgICBNZXNoQ29QOjpCb3JkZXJBZ2VudExvY2F0b3JUbHYgbG9jYXRvcjsKKyAgICAgICAgbG9jYXRvci5Jbml0KCk7CisgICAgICAgIGxvY2F0b3IuU2V0Qm9yZGVyQWdlbnRMb2NhdG9yKGFEYXRhc2V0Lm1Mb2NhdG9yKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbG9jYXRvciwgc2l6ZW9mKGxvY2F0b3IpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1Nlc3Npb25JZFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lclNlc3Npb25JZFRsdiBzZXNzaW9uSWQ7CisgICAgICAgIHNlc3Npb25JZC5Jbml0KCk7CisgICAgICAgIHNlc3Npb25JZC5TZXRDb21taXNzaW9uZXJTZXNzaW9uSWQoYURhdGFzZXQubVNlc3Npb25JZCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzU3RlZXJpbmdEYXRhU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6U3RlZXJpbmdEYXRhVGx2IHN0ZWVyaW5nRGF0YTsKKyAgICAgICAgc3RlZXJpbmdEYXRhLkluaXQoKTsKKyAgICAgICAgc3RlZXJpbmdEYXRhLlNldExlbmd0aChhRGF0YXNldC5tU3RlZXJpbmdEYXRhLm1MZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGVlcmluZ0RhdGEsIHNpemVvZihNZXNoQ29QOjpUbHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFEYXRhc2V0Lm1TdGVlcmluZ0RhdGEubTgsIGFEYXRhc2V0Lm1TdGVlcmluZ0RhdGEubUxlbmd0aCkpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNKb2luZXJVZHBQb3J0U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6Sm9pbmVyVWRwUG9ydFRsdiBqb2luZXJVZHBQb3J0OworICAgICAgICBqb2luZXJVZHBQb3J0LkluaXQoKTsKKyAgICAgICAgam9pbmVyVWRwUG9ydC5TZXRVZHBQb3J0KGFEYXRhc2V0Lm1Kb2luZXJVZHBQb3J0KTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmam9pbmVyVWRwUG9ydCwgc2l6ZW9mKGpvaW5lclVkcFBvcnQpKSk7CisgICAgfQorCisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChhVGx2cywgYUxlbmd0aCkpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLT5HZXRMZW5ndGgoKSA9PSBoZWFkZXIuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICAvLyBubyBwYXlsb2FkLCByZW1vdmUgY29hcCBwYXlsb2FkIG1hcmtlcgorICAgICAgICBtZXNzYWdlLT5TZXRMZW5ndGgobWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSAxKTsKKyAgICB9CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJBbG9jKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJTZXRSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBNR01UX0NPTU1JU1NJT05FUl9TRVQucmVxIHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZU1nbXRDb21taXNzaW9uZXJTZXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxDb21taXNzaW9uZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVNZ210Q29tbWlzc2lzb25lclNldFJlc3BvbnNlKAorICAgICAgICBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksIGFSZXN1bHQpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlTWdtdENvbW1pc3Npc29uZXJTZXRSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgKHZvaWQpIGFNZXNzYWdlOworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIE1HTVRfQ09NTUlTU0lPTkVSX1NFVCByZXNwb25zZSIpOworCitleGl0OgorICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworb3RFcnJvciBDb21taXNzaW9uZXI6OlNlbmRQZXRpdGlvbih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIENvbW1pc3Npb25lcklkVGx2IGNvbW1pc3Npb25lcklkOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIG1UcmFuc21pdEF0dGVtcHRzKys7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfTEVBREVSX1BFVElUSU9OKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgY29tbWlzc2lvbmVySWQuSW5pdCgpOworICAgIGNvbW1pc3Npb25lcklkLlNldENvbW1pc3Npb25lcklkKCJPcGVuVGhyZWFkIENvbW1pc3Npb25lciIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY29tbWlzc2lvbmVySWQsIHNpemVvZihUbHYpICsgY29tbWlzc2lvbmVySWQuR2V0TGVuZ3RoKCkpKTsKKworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1pc3Npb25lcjo6SGFuZGxlTGVhZGVyUGV0aXRpb25SZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwZXRpdGlvbiIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUxlYWRlclBldGl0aW9uUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgIHN0YXRpY19jYXN0PENvbW1pc3Npb25lciAqPihhQ29udGV4dCktPkhhbmRsZUxlYWRlclBldGl0aW9uUmVzcG9uc2UoCisgICAgICAgIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwgYVJlc3VsdCk7CisKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUxlYWRlclBldGl0aW9uUmVzcG9uc2UoQ29hcDo6SGVhZGVyICphSGVhZGVyLCBNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIGJvb2wgcmV0cmFuc21pdCA9IGZhbHNlOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgPT0gT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OLCBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQpOworICAgIFZlcmlmeU9yRXhpdChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUgJiYgYUhlYWRlci0+R2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9DSEFOR0VELCByZXRyYW5zbWl0ID0gdHJ1ZSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJyZWNlaXZlZCBMZWFkZXIgUGV0aXRpb24gcmVzcG9uc2UiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGx2OjpHZXRUbHYoKmFNZXNzYWdlLCBUbHY6OmtTdGF0ZSwgc2l6ZW9mKHN0YXRlKSwgc3RhdGUpKTsKKyAgICBWZXJpZnlPckV4aXQoc3RhdGUuSXNWYWxpZCgpKTsKKworICAgIFZlcmlmeU9yRXhpdChzdGF0ZS5HZXRTdGF0ZSgpID09IFN0YXRlVGx2OjprQWNjZXB0LCBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdigqYU1lc3NhZ2UsIFRsdjo6a0NvbW1pc3Npb25lclNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCksIHNlc3Npb25JZCkpOworICAgIFZlcmlmeU9yRXhpdChzZXNzaW9uSWQuSXNWYWxpZCgpKTsKKyAgICBtU2Vzc2lvbklkID0gc2Vzc2lvbklkLkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpOworCisgICAgQWRkQ29hcFJlc291cmNlcygpOworICAgIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkU7CisKKyAgICBtVHJhbnNtaXRBdHRlbXB0cyA9IDA7CisgICAgbVRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMoa0tlZXBBbGl2ZVRpbWVvdXQpIC8gMik7CisKK2V4aXQ6CisKKyAgICBpZiAocmV0cmFuc21pdCkKKyAgICB7CisgICAgICAgIGlmIChtVHJhbnNtaXRBdHRlbXB0cyA+PSBrUGV0aXRpb25SZXRyeUNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGltZXIuU3RhcnQoVGltZXI6OlNlY1RvTXNlYyhrUGV0aXRpb25SZXRyeURlbGF5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK290RXJyb3IgQ29tbWlzc2lvbmVyOjpTZW5kS2VlcEFsaXZlKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgU3RhdGVUbHYgc3RhdGU7CisgICAgQ29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IHNlc3Npb25JZDsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfTEVBREVSX0tFRVBfQUxJVkUpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzdGF0ZS5Jbml0KCk7CisgICAgc3RhdGUuU2V0U3RhdGUobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUgPyBTdGF0ZVRsdjo6a0FjY2VwdCA6IFN0YXRlVGx2OjprUmVqZWN0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZSwgc2l6ZW9mKHN0YXRlKSkpOworCisgICAgc2Vzc2lvbklkLkluaXQoKTsKKyAgICBzZXNzaW9uSWQuU2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKG1TZXNzaW9uSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1pc3Npb25lcjo6SGFuZGxlTGVhZGVyS2VlcEFsaXZlUmVzcG9uc2UsIHRoaXMpKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQga2VlcCBhbGl2ZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBDb21taXNzaW9uZXI6OkhhbmRsZUxlYWRlcktlZXBBbGl2ZVJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyICo+KGFDb250ZXh0KS0+SGFuZGxlTGVhZGVyS2VlcEFsaXZlUmVzcG9uc2UoCisgICAgICAgIHN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwgYVJlc3VsdCk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVMZWFkZXJLZWVwQWxpdmVSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KQoreworICAgICh2b2lkKSBhTWVzc2FnZUluZm87CisKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUsIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCk7CisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSAmJiBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQsCisgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJyZWNlaXZlZCBMZWFkZXIgUGV0aXRpb24gcmVzcG9uc2UiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGx2OjpHZXRUbHYoKmFNZXNzYWdlLCBUbHY6OmtTdGF0ZSwgc2l6ZW9mKHN0YXRlKSwgc3RhdGUpKTsKKyAgICBWZXJpZnlPckV4aXQoc3RhdGUuSXNWYWxpZCgpKTsKKworICAgIFZlcmlmeU9yRXhpdChzdGF0ZS5HZXRTdGF0ZSgpID09IFN0YXRlVGx2OjprQWNjZXB0LCBtU3RhdGUgPSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfRElTQUJMRUQpOworCisgICAgbVRpbWVyLlN0YXJ0KFRpbWVyOjpTZWNUb01zZWMoa0tlZXBBbGl2ZVRpbWVvdXQpIC8gMik7CisKK2V4aXQ6CisKKyAgICBpZiAobVN0YXRlICE9IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUpCisgICAgeworICAgICAgICBSZW1vdmVDb2FwUmVzb3VyY2VzKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlUmVsYXlSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxDb21taXNzaW9uZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVSZWxheVJlY2VpdmUoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVSZWxheVJlY2VpdmUoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBKb2luZXJVZHBQb3J0VGx2IGpvaW5lclBvcnQ7CisgICAgSm9pbmVySWlkVGx2IGpvaW5lcklpZDsKKyAgICBKb2luZXJSb3V0ZXJMb2NhdG9yVGx2IGpvaW5lclJsb2M7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBqb2luZXJNZXNzYWdlSW5mbzsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGJvb2wgZW5hYmxlSm9pbmVyID0gZmFsc2U7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KG1TdGF0ZSA9PSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtKb2luZXJVZHBQb3J0LCBzaXplb2Yoam9pbmVyUG9ydCksIGpvaW5lclBvcnQpKTsKKyAgICBWZXJpZnlPckV4aXQoam9pbmVyUG9ydC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtKb2luZXJJaWQsIHNpemVvZihqb2luZXJJaWQpLCBqb2luZXJJaWQpKTsKKyAgICBWZXJpZnlPckV4aXQoam9pbmVySWlkLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0pvaW5lclJvdXRlckxvY2F0b3IsIHNpemVvZihqb2luZXJSbG9jKSwgam9pbmVyUmxvYykpOworICAgIFZlcmlmeU9yRXhpdChqb2luZXJSbG9jLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRWYWx1ZU9mZnNldChhTWVzc2FnZSwgVGx2OjprSm9pbmVyRHRsc0VuY2Fwc3VsYXRpb24sIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA8PSBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIG9mZnNldCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoIW5ldGlmLkdldENvYXBTZWN1cmUoKS5Jc0Nvbm5lY3Rpb25BY3RpdmUoKSkKKyAgICB7CisgICAgICAgIG1lbWNweShtSm9pbmVySWlkLCBqb2luZXJJaWQuR2V0SWlkKCksIHNpemVvZihtSm9pbmVySWlkKSk7CisgICAgICAgIG1Kb2luZXJJaWRbMF0gXj0gMHgyOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1Kb2luZXJzKSAvIHNpemVvZihtSm9pbmVyc1swXSk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtSm9pbmVyc1tpXS5tVmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtSm9pbmVyc1tpXS5tQW55IHx8ICFtZW1jbXAoJm1Kb2luZXJzW2ldLm1FeHRBZGRyZXNzLCBtSm9pbmVySWlkLCBzaXplb2YobUpvaW5lcnNbaV0ubUV4dEFkZHJlc3MpKSkKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIGVycm9yID0gbmV0aWYuR2V0Q29hcFNlY3VyZSgpLlNldFBzayhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4obUpvaW5lcnNbaV0ubVBzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cmxlbihtSm9pbmVyc1tpXS5tUHNrKSkpOworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworICAgICAgICAgICAgICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgImZvdW5kIGpvaW5lciwgc3RhcnRpbmcgbmV3IHNlc3Npb24iKTsKKyAgICAgICAgICAgICAgICBlbmFibGVKb2luZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbUpvaW5lcklpZFswXSBePSAweDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuYWJsZUpvaW5lciA9IChtZW1jbXAobUpvaW5lcklpZCwgam9pbmVySWlkLkdldElpZCgpLCBzaXplb2YobUpvaW5lcklpZCkpID09IDApOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChlbmFibGVKb2luZXIpOworCisgICAgbUpvaW5lclBvcnQgPSBqb2luZXJQb3J0LkdldFVkcFBvcnQoKTsKKyAgICBtSm9pbmVyUmxvYyA9IGpvaW5lclJsb2MuR2V0Sm9pbmVyUm91dGVyTG9jYXRvcigpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgcmVsYXkgcmVjZWl2ZSBmb3IgJWxsWCwgcmxvYzoleCIsIEhvc3RTd2FwNjQobUpvaW5lcklpZDY0KSwgbUpvaW5lclJsb2MpOworCisgICAgYU1lc3NhZ2UuU2V0T2Zmc2V0KG9mZnNldCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlNldExlbmd0aChvZmZzZXQgKyBsZW5ndGgpKTsKKworICAgIGpvaW5lck1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDY0KCkpOworICAgIGpvaW5lck1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuU2V0SWlkKG1Kb2luZXJJaWQpOworICAgIGpvaW5lck1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KG1Kb2luZXJQb3J0KTsKKworICAgIG5ldGlmLkdldENvYXBTZWN1cmUoKS5SZWNlaXZlKGFNZXNzYWdlLCBqb2luZXJNZXNzYWdlSW5mbyk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlRGF0YXNldENoYW5nZWQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyICo+KGFDb250ZXh0KS0+SGFuZGxlRGF0YXNldENoYW5nZWQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVEYXRhc2V0Q2hhbmdlZChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIGRhdGFzZXQgY2hhbmdlZCIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgZGF0YXNldCBjaGFuZ2VkIGFja25vd2xlZGdtZW50Iik7CisKK2V4aXQ6CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIENvbW1pc3Npb25lcjo6SGFuZGxlSm9pbmVyRmluYWxpemUodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyICo+KGFDb250ZXh0KS0+SGFuZGxlSm9pbmVyRmluYWxpemUoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQ29tbWlzc2lvbmVyOjpIYW5kbGVKb2luZXJGaW5hbGl6ZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgU3RhdGVUbHY6OlN0YXRlIHN0YXRlID0gU3RhdGVUbHY6OmtBY2NlcHQ7CisgICAgUHJvdmlzaW9uaW5nVXJsVGx2IHByb3Zpc2lvbmluZ1VybDsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicmVjZWl2ZWQgam9pbmVyIGZpbmFsaXplIik7CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Byb3Zpc2lvbmluZ1VybCwgc2l6ZW9mKHByb3Zpc2lvbmluZ1VybCksIHByb3Zpc2lvbmluZ1VybCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGlmIChwcm92aXNpb25pbmdVcmwuR2V0TGVuZ3RoKCkgIT0gR2V0TmV0aWYoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybC5HZXRMZW5ndGgoKSB8fAorICAgICAgICAgICAgbWVtY21wKHByb3Zpc2lvbmluZ1VybC5HZXRQcm92aXNpb25pbmdVcmwoKSwgR2V0TmV0aWYoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybC5HZXRQcm92aXNpb25pbmdVcmwoKSwKKyAgICAgICAgICAgICAgICAgICBwcm92aXNpb25pbmdVcmwuR2V0TGVuZ3RoKCkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DRVJUX0xPRworICAgIHVpbnQ4X3QgYnVmW09QRU5USFJFQURfQ09ORklHX01FU1NBR0VfQlVGRkVSX1NJWkVdOworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRMZW5ndGgoKSA8PSBzaXplb2YoYnVmKSk7CisgICAgYU1lc3NhZ2UuUmVhZChhSGVhZGVyLkdldExlbmd0aCgpLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFIZWFkZXIuR2V0TGVuZ3RoKCksIGJ1Zik7CisgICAgb3REdW1wQ2VydE1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIltUSENJXSBkaXJlY3Rpb249cmVjdiB8IHR5cGU9Sk9JTl9GSU4ucmVxIHwiLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhSGVhZGVyLkdldExlbmd0aCgpKTsKKworZXhpdDoKKyNlbmRpZgorCisgICAgU2VuZEpvaW5GaW5hbGl6ZVJlc3BvbnNlKGFIZWFkZXIsIHN0YXRlKTsKKworICAgIG90TG9nRnVuY0V4aXQoKTsKK30KKworCit2b2lkIENvbW1pc3Npb25lcjo6U2VuZEpvaW5GaW5hbGl6ZVJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIFN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgcmVzcG9uc2VIZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBqb2luZXJNZXNzYWdlSW5mbzsKKyAgICBNZXNoQ29QOjpTdGF0ZVRsdiBzdGF0ZVRsdjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIE1hYzo6RXh0QWRkcmVzcyBleHRBZGRyOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIHJlc3BvbnNlSGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhUmVxdWVzdEhlYWRlcik7CisgICAgcmVzcG9uc2VIZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcFNlY3VyZSgpLCByZXNwb25zZUhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlSm9pbmVyRmluYWxpemVSZXNwb25zZSk7CisKKyAgICBzdGF0ZVRsdi5Jbml0KCk7CisgICAgc3RhdGVUbHYuU2V0U3RhdGUoYVN0YXRlKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZVRsdiwgc2l6ZW9mKHN0YXRlVGx2KSkpOworCisgICAgam9pbmVyTWVzc2FnZUluZm8uU2V0UGVlckFkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsNjQoKSk7CisgICAgam9pbmVyTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5TZXRJaWQobUpvaW5lcklpZCk7CisgICAgam9pbmVyTWVzc2FnZUluZm8uU2V0UGVlclBvcnQobUpvaW5lclBvcnQpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cKKyAgICB1aW50OF90IGJ1ZltPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFXTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKGJ1ZikpOworICAgIG1lc3NhZ2UtPlJlYWQocmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCksIG1lc3NhZ2UtPkdldExlbmd0aCgpIC0gcmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCksIGJ1Zik7CisgICAgb3REdW1wQ2VydE1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIltUSENJXSBkaXJlY3Rpb249c2VuZCB8IHR5cGU9Sk9JTl9GSU4ucnNwIHwiLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSByZXNwb25zZUhlYWRlci5HZXRMZW5ndGgoKSk7CisjZW5kaWYKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGpvaW5lck1lc3NhZ2VJbmZvKSk7CisKKyAgICBtZW1jcHkoZXh0QWRkci5tOCwgbUpvaW5lcklpZCwgc2l6ZW9mKGV4dEFkZHIubTgpKTsKKyAgICBleHRBZGRyLlNldExvY2FsKCFleHRBZGRyLklzTG9jYWwoKSk7CisgICAgUmVtb3ZlSm9pbmVyKCZleHRBZGRyLCBrUmVtb3ZlSm9pbmVyRGVsYXkpOyAgLy8gcmVtb3ZlIGFmdGVyIGtSZW1vdmVKb2luZXJEZWxheSAoc2Vjb25kcykKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgam9pbmVyIGZpbmFsaXplIHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCitvdEVycm9yIENvbW1pc3Npb25lcjo6U2VuZFJlbGF5VHJhbnNtaXQodm9pZCAqYUNvbnRleHQsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbW1pc3Npb25lciAqPihhQ29udGV4dCktPlNlbmRSZWxheVRyYW5zbWl0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCitvdEVycm9yIENvbW1pc3Npb25lcjo6U2VuZFJlbGF5VHJhbnNtaXQoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSm9pbmVyVWRwUG9ydFRsdiB1ZHBQb3J0OworICAgIEpvaW5lcklpZFRsdiBpaWQ7CisgICAgSm9pbmVyUm91dGVyTG9jYXRvclRsdiBybG9jOworICAgIEV4dGVuZGVkVGx2IHRsdjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQxNl90IG9mZnNldDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9SRUxBWV9UWCk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHVkcFBvcnQuSW5pdCgpOworICAgIHVkcFBvcnQuU2V0VWRwUG9ydChtSm9pbmVyUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdWRwUG9ydCwgc2l6ZW9mKHVkcFBvcnQpKSk7CisKKyAgICBpaWQuSW5pdCgpOworICAgIGlpZC5TZXRJaWQobUpvaW5lcklpZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmaWlkLCBzaXplb2YoaWlkKSkpOworCisgICAgcmxvYy5Jbml0KCk7CisgICAgcmxvYy5TZXRKb2luZXJSb3V0ZXJMb2NhdG9yKG1Kb2luZXJSbG9jKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZybG9jLCBzaXplb2YocmxvYykpKTsKKworICAgIGlmIChhTWVzc2FnZS5HZXRTdWJUeXBlKCkgPT0gTWVzc2FnZTo6a1N1YlR5cGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgSm9pbmVyUm91dGVyS2VrVGx2IGtlazsKKyAgICAgICAga2VrLkluaXQoKTsKKyAgICAgICAga2VrLlNldEtlayhuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0S2VrKCkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZrZWssIHNpemVvZihrZWspKSk7CisgICAgfQorCisgICAgdGx2LlNldFR5cGUoVGx2OjprSm9pbmVyRHRsc0VuY2Fwc3VsYXRpb24pOworICAgIHRsdi5TZXRMZW5ndGgoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICBvZmZzZXQgPSBtZXNzYWdlLT5HZXRMZW5ndGgoKTsKKyAgICBtZXNzYWdlLT5TZXRMZW5ndGgob2Zmc2V0ICsgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgIGFNZXNzYWdlLkNvcHlUbygwLCBvZmZzZXQsIGFNZXNzYWdlLkdldExlbmd0aCgpLCAqbWVzc2FnZSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihtSm9pbmVyUmxvYyk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBhTWVzc2FnZS5GcmVlKCk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENvbW1pc3Npb25lcjo6R2VuZXJhdGVQU0tjKGNvbnN0IGNoYXIgKmFQYXNzUGhyYXNlLCBjb25zdCBjaGFyICphTmV0d29ya05hbWUsIGNvbnN0IHVpbnQ4X3QgKmFFeHRQYW5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVBTS2MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgY2hhciAqc2FsdFByZWZpeCA9ICJUaHJlYWQiOworICAgIHVpbnQ4X3Qgc2FsdFtPVF9QQktERjJfU0FMVF9NQVhfTEVOXTsKKyAgICB1aW50MTZfdCBzYWx0TGVuID0gMDsKKworICAgIFZlcmlmeU9yRXhpdCgoc3RybGVuKGFQYXNzUGhyYXNlKSA+PSBPVF9DT01NSVNTSU9OSU5HX1BBU1NQSFJBU0VfTUlOX1NJWkUpICYmCisgICAgICAgICAgICAgICAgIChzdHJsZW4oYVBhc3NQaHJhc2UpIDw9IE9UX0NPTU1JU1NJT05JTkdfUEFTU1BIUkFTRV9NQVhfU0laRSksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1lbXNldChzYWx0LCAwLCBzaXplb2Yoc2FsdCkpOworICAgIG1lbWNweShzYWx0LCBzYWx0UHJlZml4LCBzdHJsZW4oc2FsdFByZWZpeCkpOworICAgIHNhbHRMZW4gKz0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbihzYWx0UHJlZml4KSk7CisKKyAgICBtZW1jcHkoc2FsdCArIHNhbHRMZW4sIGFFeHRQYW5JZCwgT1RfRVhUX1BBTl9JRF9TSVpFKTsKKyAgICBzYWx0TGVuICs9IE9UX0VYVF9QQU5fSURfU0laRTsKKworICAgIG1lbWNweShzYWx0ICsgc2FsdExlbiwgYU5ldHdvcmtOYW1lLCBzdHJsZW4oYU5ldHdvcmtOYW1lKSk7CisgICAgc2FsdExlbiArPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oc3RybGVuKGFOZXR3b3JrTmFtZSkpOworCisgICAgb3RQYmtkZjJDbWFjKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihhUGFzc1BocmFzZSksIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4oYVBhc3NQaHJhc2UpKSwKKyAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KHNhbHQpLCBzYWx0TGVuLCAxNjM4NCwgT1RfUFNLQ19NQVhfU0laRSwgYVBTS2MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworQ29tbWlzc2lvbmVyICZDb21taXNzaW9uZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIENvbW1pc3Npb25lciAmY29tbWlzc2lvbmVyID0gKnN0YXRpY19jYXN0PENvbW1pc3Npb25lciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBDb21taXNzaW9uZXIgJmNvbW1pc3Npb25lciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRDb21taXNzaW9uZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGNvbW1pc3Npb25lcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgJiYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2NvbW1pc3Npb25lci5ocHAgYi9zcmMvY29yZS9tZXNoY29wL2NvbW1pc3Npb25lci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4MmNiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvY29tbWlzc2lvbmVyLmhwcApAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDb21taXNzaW9uZXIgcm9sZS4KKyAqLworCisjaWZuZGVmIENPTU1JU1NJT05FUl9IUFBfCisjZGVmaW5lIENPTU1JU1NJT05FUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX3NlY3VyZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9hbm5vdW5jZV9iZWdpbl9jbGllbnQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZHRscy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTWVzaENvUCB7CisKK2NsYXNzIENvbW1pc3Npb25lcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIENvbW1pc3Npb25lciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBDb21taXNzaW9uZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIENvbW1pc3Npb25lciBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgQ29tbWlzc2lvbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIENvbW1pc3Npb25lciBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgQ29tbWlzc2lvbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3Aodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIEpvaW5lciBlbnRyaWVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckpvaW5lcnModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgSm9pbmVyIGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgICAgICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lcidzIGV4dGVuZGVkIGFkZHJlc3Mgb3IgTlVMTCBmb3IgYW55IEpvaW5lci4KKyAgICAgKiBAcGFyYW1baW5dICBhUFNLZCAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUFNLZC4KKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgICAgICAgIEEgdGltZSBhZnRlciB3aGljaCBhIEpvaW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQsIGluIHNlY29uZHMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSm9pbmVyLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm8gYnVmZmVycyBhdmFpbGFibGUgdG8gYWRkIHRoZSBKb2luZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZEpvaW5lcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgKmFFeHRBZGRyZXNzLCBjb25zdCBjaGFyICphUFNLZCwgdWludDMyX3QgYVRpbWVvdXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIEpvaW5lciBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFeHRBZGRyZXNzICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lcidzIGV4dGVuZGVkIGFkZHJlc3Mgb3IgTlVMTCBmb3IgYW55IEpvaW5lci4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVsYXkgICAgICAgICAgICAgVGhlIGRlbGF5IHRvIHJlbW92ZSBKb2luZXIgKGluIHNlY29uZHMpLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgSm9pbmVyLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgSm9pbmVyIHNwZWNpZmllZCBieSBAcCBhRXh0QWRkcmVzcyB3YXMgbm90IGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVKb2luZXIoY29uc3QgTWFjOjpFeHRBZGRyZXNzICphRXh0QWRkcmVzcywgdWludDMyX3QgYURlbGF5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFByb3Zpc2lvbmluZyBVUkwuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJvdmlzaW9uaW5nVXJsICBBIHBvaW50ZXIgdG8gdGhlIFByb3Zpc2lvbmluZyBVUkwgKG1heSBiZSBOVUxMKS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIEpvaW5lci4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgQHAgYVByb3Zpc2lvbmluZ1VybCBpcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRQcm92aXNpb25pbmdVcmwoY29uc3QgY2hhciAqYVByb3Zpc2lvbmluZ1VybCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDb21taXNzaW9uZXIgU2Vzc2lvbiBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNlc3Npb25JZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgQ29tbWlzc2lvbmVyIHJvbGUgaXMgYWN0aXZlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgQ29tbWlzc2lvbmVyIHJvbGUgaXMgYWN0aXZlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQWN0aXZlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdGF0ZSA9PSBPVF9DT01NSVNTSU9ORVJfU1RBVEVfQUNUSVZFOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIENvbW1pc3Npb25lciBTdGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0NPTU1JU1NJT05FUl9TVEFURV9ESVNBQkxFRCAgQ29tbWlzc2lvbmVyIGRpc2FibGVkLgorICAgICAqIEByZXR2YWwgT1RfQ09NTUlTU0lPTkVSX1NUQVRFX1BFVElUSU9OICBCZWNvbWluZyB0aGUgY29tbWlzc2lvbmVyLgorICAgICAqIEByZXR2YWwgT1RfQ09NSU1TU0lPTkVSX1NUQVRFX0FDVElWRSAgICBDb21taXNzaW9uZXIgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIG90Q29tbWlzc2lvbmVyU3RhdGUgR2V0U3RhdGUodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBNR01UX0NPTU1JU1NJT05FUl9HRVQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgQSBwb2ludGVyIHRvIENvbW1pc3Npb25pbmcgRGF0YSBUTFZzLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgICBUaGUgbGVuZ3RoIG9mIHJlcXVlc3RlZCBUTFZzIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX0dFVCBzdWNjZXNzZnVsbHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX0dFVCBmYWlsLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWdtdENvbW1pc3Npb25lckdldFJlcXVlc3QoY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBNR01UX0NPTU1JU1NJT05FUl9TRVQuCisgICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFzZXQgICAgIEEgcmVmZXJlbmNlIHRvIENvbW1pc3Npb25pbmcgRGF0YS4KKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgQSBwb2ludGVyIHRvIHVzZXIgc3BlY2lmaWMgQ29tbWlzc2lvbmluZyBEYXRhIFRMVnMuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgIFRoZSBsZW5ndGggb2YgdXNlciBzcGVjaWZpYyBUTFZzIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX1NFVCBzdWNjZXNzZnVsbHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBTZW5kIE1HTVRfQ09NTUlTU0lPTkVSX1NFVCBmYWlsLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWdtdENvbW1pc3Npb25lclNldFJlcXVlc3QoY29uc3Qgb3RDb21taXNzaW9uaW5nRGF0YXNldCAmYURhdGFzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIFBTS2MuCisgICAgICoKKyAgICAgKiBQU0tjIGlzIHVzZWQgdG8gZXN0YWJsaXNoIHRoZSBDb21taXNzaW9uZXIgU2Vzc2lvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYXNzUGhyYXNlICAgVGhlIGNvbW1pc3Npb25pbmcgcGFzc3BocmFzZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIFRoZSBuZXR3b3JrIG5hbWUgZm9yIFBTS2MgY29tcHV0YXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUV4dFBhbklkICAgICBUaGUgZXh0ZW5kZWQgcGFuIGlkIGZvciBQU0tjIGNvbXB1dGF0aW9uLgorICAgICAqIEBwYXJhbVtvdXRdIGFQU0tjICAgICAgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBnZW5lcmF0ZWQgUFNLYyB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgZ2VuZXJhdGUgUFNLYy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgSWYgdGhlIGxlbmd0aCBvZiBwYXNzcGhyYXNlIGlzIG91dCBvZiByYW5nZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdlbmVyYXRlUFNLYyhjb25zdCBjaGFyICphUGFzc1BocmFzZSwgY29uc3QgY2hhciAqYU5ldHdvcmtOYW1lLCBjb25zdCB1aW50OF90ICphRXh0UGFuSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFQU0tjKTsKKworICAgIEFubm91bmNlQmVnaW5DbGllbnQgbUFubm91bmNlQmVnaW47CisgICAgRW5lcmd5U2NhbkNsaWVudCBtRW5lcmd5U2NhbjsKKyAgICBQYW5JZFF1ZXJ5Q2xpZW50IG1QYW5JZFF1ZXJ5OworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtQZXRpdGlvbkF0dGVtcHREZWxheSA9IDUsICAgICAgLy8vPCBDT01NX1BFVF9BVFRFTVBUX0RFTEFZIChzZWNvbmRzKQorICAgICAgICBrUGV0aXRpb25SZXRyeUNvdW50ICAgPSAyLCAgICAgIC8vLzwgQ09NTV9QRVRfUkVUUllfQ09VTlQKKyAgICAgICAga1BldGl0aW9uUmV0cnlEZWxheSAgID0gMSwgICAgICAvLy88IENPTU1fUEVUX1JFVFJZX0RFTEFZIChzZWNvbmRzKQorICAgICAgICBrS2VlcEFsaXZlVGltZW91dCAgICAgPSA1MCwgICAgIC8vLzwgVElNRU9VVF9DT01NX1BFVCAoc2Vjb25kcykKKyAgICAgICAga1JlbW92ZUpvaW5lckRlbGF5ICAgID0gMjAsICAgICAvLy88IERlbGF5IHRvIHJlbW92ZSBzdWNjZXNzZnVsbHkgam9pbmVkIGpvaW5lcgorICAgIH07CisKKyAgICB2b2lkIEFkZENvYXBSZXNvdXJjZXModm9pZCk7CisgICAgdm9pZCBSZW1vdmVDb2FwUmVzb3VyY2VzKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUpvaW5lckV4cGlyYXRpb25UaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckV4cGlyYXRpb25UaW1lcih2b2lkKTsKKworICAgIHZvaWQgVXBkYXRlSm9pbmVyRXhwaXJhdGlvblRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTWdtdENvbW1pc3Npb25lclNldFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZU1nbXRDb21taXNzaXNvbmVyU2V0UmVzcG9uc2UoQ29hcDo6SGVhZGVyICphSGVhZGVyLCBNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZU1nbXRDb21taXNzaW9uZXJHZXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisgICAgdm9pZCBIYW5kbGVNZ210Q29tbWlzc2lzb25lckdldFJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVMZWFkZXJQZXRpdGlvblJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisgICAgdm9pZCBIYW5kbGVMZWFkZXJQZXRpdGlvblJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVMZWFkZXJLZWVwQWxpdmVSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZUxlYWRlcktlZXBBbGl2ZVJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWxheVJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVJlbGF5UmVjZWl2ZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGF0YXNldENoYW5nZWQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlRGF0YXNldENoYW5nZWQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICB2b2lkIFNlbmRKb2luRmluYWxpemVSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKTsKKworICAgIHN0YXRpYyBvdEVycm9yIFNlbmRSZWxheVRyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIFNlbmRSZWxheVRyYW5zbWl0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBTZW5kQ29tbWlzc2lvbmVyU2V0KHZvaWQpOworICAgIG90RXJyb3IgU2VuZFBldGl0aW9uKHZvaWQpOworICAgIG90RXJyb3IgU2VuZEtlZXBBbGl2ZSh2b2lkKTsKKworICAgIHN0YXRpYyBDb21taXNzaW9uZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIG90Q29tbWlzc2lvbmVyU3RhdGUgbVN0YXRlOworCisgICAgc3RydWN0IEpvaW5lcgorICAgIHsKKyAgICAgICAgTWFjOjpFeHRBZGRyZXNzIG1FeHRBZGRyZXNzOworICAgICAgICB1aW50MzJfdCBtRXhwaXJhdGlvblRpbWU7CisgICAgICAgIGNoYXIgbVBza1tEdGxzOjprUHNrTWF4TGVuZ3RoICsgMV07CisgICAgICAgIGJvb2wgbVZhbGlkIDogMTsKKyAgICAgICAgYm9vbCBtQW55IDogMTsKKyAgICB9OworICAgIEpvaW5lciBtSm9pbmVyc1tPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVNdOworCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbUpvaW5lcklpZFs4XTsKKyAgICAgICAgdWludDY0X3QgbUpvaW5lcklpZDY0OworICAgIH07CisgICAgdWludDE2X3QgbUpvaW5lclBvcnQ7CisgICAgdWludDE2X3QgbUpvaW5lclJsb2M7CisgICAgVGltZXIgbUpvaW5lckV4cGlyYXRpb25UaW1lcjsKKworICAgIFRpbWVyIG1UaW1lcjsKKyAgICB1aW50MTZfdCBtU2Vzc2lvbklkOworICAgIHVpbnQ4X3QgbVRyYW5zbWl0QXR0ZW1wdHM7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtUmVsYXlSZWNlaXZlOworICAgIENvYXA6OlJlc291cmNlIG1EYXRhc2V0Q2hhbmdlZDsKKyAgICBDb2FwOjpSZXNvdXJjZSBtSm9pbmVyRmluYWxpemU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ09NTUlTU0lPTkVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldC5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTliNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXQuY3BwCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNvbW1vbiBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgTWVzaENvUCBEYXRhc2V0cy4KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJkYXRhc2V0LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9zZXR0aW5ncy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfdGx2cy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKK0RhdGFzZXQ6OkRhdGFzZXQoY29uc3QgVGx2OjpUeXBlIGFUeXBlKSA6CisgICAgbVVwZGF0ZVRpbWUoMCksCisgICAgbUxlbmd0aCgwKSwKKyAgICBtVHlwZShhVHlwZSkKK3sKKyAgICBtZW1zZXQobVRsdnMsIDAsIHNpemVvZihtVGx2cykpOworfQorCit2b2lkIERhdGFzZXQ6OkNsZWFyKHZvaWQpCit7CisgICAgbUxlbmd0aCA9IDA7Cit9CisKK1RsdiAqRGF0YXNldDo6R2V0KFRsdjo6VHlwZSBhVHlwZSkKK3sKKyAgICBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGx2ICo+KG1UbHZzKTsKKyAgICBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgVGx2ICpydmFsID0gTlVMTDsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gYVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGN1cik7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2NvbnN0IFRsdiAqRGF0YXNldDo6R2V0KFRsdjo6VHlwZSBhVHlwZSkgY29uc3QKK3sKKyAgICBjb25zdCBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzKTsKKyAgICBjb25zdCBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgY29uc3QgVGx2ICpydmFsID0gTlVMTDsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gYVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGN1cik7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgRGF0YXNldDo6R2V0KG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkgY29uc3QKK3sKKyAgICBjb25zdCBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzKTsKKyAgICBjb25zdCBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisKKyAgICBtZW1zZXQoJmFEYXRhc2V0LCAwLCBzaXplb2YoYURhdGFzZXQpKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisKKyAgICAgICAgY2FzZSBUbHY6OmtBY3RpdmVUaW1lc3RhbXA6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQWN0aXZlVGltZXN0YW1wVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wID0gdGx2LT5HZXRTZWNvbmRzKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNBY3RpdmVUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a0NoYW5uZWw6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IENoYW5uZWxUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IENoYW5uZWxUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1DaGFubmVsID0gdGx2LT5HZXRDaGFubmVsKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtDaGFubmVsTWFzazoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSBjdXItPkdldExlbmd0aCgpOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oY3VyKSArIHNpemVvZihUbHYpOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZW50cnlFbmQgPSAgZW50cnkgKyBsZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlIChlbnRyeSA8IGVudHJ5RW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PGNvbnN0IENoYW5uZWxNYXNrRW50cnkgKj4oZW50cnkpLT5HZXRDaGFubmVsUGFnZSgpID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50OF90IGkgPSBzaXplb2YoQ2hhbm5lbE1hc2tFbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGFEYXRhc2V0Lm1DaGFubmVsTWFza1BhZ2UwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGVudHJ5W2ldIHwgKGVudHJ5W2kgKyAxXSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeVtpICsgMl0gPDwgMTYpIHwgKGVudHJ5W2kgKyAzXSA8PCAyNCkpOworICAgICAgICAgICAgICAgICAgICBhRGF0YXNldC5tSXNDaGFubmVsTWFza1BhZ2UwU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZW50cnkgKz0gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2hhbm5lbE1hc2tFbnRyeSAqPihlbnRyeSktPkdldE1hc2tMZW5ndGgoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihDaGFubmVsTWFza0VudHJ5KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtEZWxheVRpbWVyOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBEZWxheVRpbWVyVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBEZWxheVRpbWVyVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tRGVsYXkgPSB0bHYtPkdldERlbGF5VGltZXIoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc0RlbGF5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtFeHRlbmRlZFBhbklkOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBFeHRlbmRlZFBhbklkVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBFeHRlbmRlZFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBtZW1jcHkoYURhdGFzZXQubUV4dGVuZGVkUGFuSWQubTgsIHRsdi0+R2V0RXh0ZW5kZWRQYW5JZCgpLCBzaXplb2YoYURhdGFzZXQubUV4dGVuZGVkUGFuSWQpKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc0V4dGVuZGVkUGFuSWRTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a01lc2hMb2NhbFByZWZpeDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTWVzaExvY2FsUHJlZml4VGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBNZXNoTG9jYWxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG1lbWNweShhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04LCB0bHYtPkdldE1lc2hMb2NhbFByZWZpeCgpLCBzaXplb2YoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeCkpOworICAgICAgICAgICAgYURhdGFzZXQubUlzTWVzaExvY2FsUHJlZml4U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOZXR3b3JrTWFzdGVyS2V5VGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBOZXR3b3JrTWFzdGVyS2V5VGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tTWFzdGVyS2V5ID0gdGx2LT5HZXROZXR3b3JrTWFzdGVyS2V5KCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNNYXN0ZXJLZXlTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtOYW1lOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOZXR3b3JrTmFtZVRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya05hbWVUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG1lbWNweShhRGF0YXNldC5tTmV0d29ya05hbWUubTgsIHRsdi0+R2V0TmV0d29ya05hbWUoKSwgdGx2LT5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUGFuSWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFBhbklkVGx2ICpwYW5pZCA9IHN0YXRpY19jYXN0PGNvbnN0IFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tUGFuSWQgPSBwYW5pZC0+R2V0UGFuSWQoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc1BhbklkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtQZW5kaW5nVGltZXN0YW1wOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBQZW5kaW5nVGltZXN0YW1wVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBQZW5kaW5nVGltZXN0YW1wVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCA9IHRsdi0+R2V0U2Vjb25kcygpOworICAgICAgICAgICAgYURhdGFzZXQubUlzUGVuZGluZ1RpbWVzdGFtcFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUFNLYzoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgUFNLY1RsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUFNLY1RsdiAqPihjdXIpOworICAgICAgICAgICAgbWVtY3B5KGFEYXRhc2V0Lm1QU0tjLm04LCB0bHYtPkdldFBTS2MoKSwgdGx2LT5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNQU0tjU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtTZWN1cml0eVBvbGljeToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgU2VjdXJpdHlQb2xpY3lUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IFNlY3VyaXR5UG9saWN5VGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubVJvdGF0aW9uVGltZSA9IHRsdi0+R2V0Um90YXRpb25UaW1lKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tU2VjdXJpdHlQb2xpY3kubUZsYWdzID0gdGx2LT5HZXRGbGFncygpOworICAgICAgICAgICAgYURhdGFzZXQubUlzU2VjdXJpdHlQb2xpY3lTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorfQorCitvdEVycm9yIERhdGFzZXQ6OlNldChjb25zdCBEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBtZW1jcHkobVRsdnMsIGFEYXRhc2V0Lm1UbHZzLCBhRGF0YXNldC5tTGVuZ3RoKTsKKyAgICBtTGVuZ3RoID0gYURhdGFzZXQubUxlbmd0aDsKKworICAgIGlmIChtVHlwZSA9PSBUbHY6OmtBY3RpdmVUaW1lc3RhbXApCisgICAgeworICAgICAgICBSZW1vdmUoVGx2OjprUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgICAgIFJlbW92ZShUbHY6OmtEZWxheVRpbWVyKTsKKyAgICB9CisKKyAgICBtVXBkYXRlVGltZSA9IGFEYXRhc2V0LkdldFVwZGF0ZVRpbWUoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgRGF0YXNldDo6U2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNoQ29QOjpBY3RpdmVUaW1lc3RhbXBUbHYgYWN0aXZlVGltZXN0YW1wVGx2OworCisgICAgVmVyaWZ5T3JFeGl0KGFEYXRhc2V0Lm1Jc0FjdGl2ZVRpbWVzdGFtcFNldCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgYWN0aXZlVGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICBhY3RpdmVUaW1lc3RhbXBUbHYuU2V0U2Vjb25kcyhhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wKTsKKyAgICBhY3RpdmVUaW1lc3RhbXBUbHYuU2V0VGlja3MoMCk7CisgICAgU2V0KGFjdGl2ZVRpbWVzdGFtcFRsdik7CisKKyAgICBpZiAobVR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlBlbmRpbmdUaW1lc3RhbXBUbHYgcGVuZGluZ1RpbWVzdGFtcFRsdjsKKworICAgICAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQubUlzUGVuZGluZ1RpbWVzdGFtcFNldCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIHBlbmRpbmdUaW1lc3RhbXBUbHYuSW5pdCgpOworICAgICAgICBwZW5kaW5nVGltZXN0YW1wVGx2LlNldFNlY29uZHMoYURhdGFzZXQubVBlbmRpbmdUaW1lc3RhbXApOworICAgICAgICBwZW5kaW5nVGltZXN0YW1wVGx2LlNldFRpY2tzKDApOworICAgICAgICBTZXQocGVuZGluZ1RpbWVzdGFtcFRsdik7CisKKyAgICAgICAgaWYgKGFEYXRhc2V0Lm1Jc0RlbGF5U2V0KQorICAgICAgICB7CisgICAgICAgICAgICBNZXNoQ29QOjpEZWxheVRpbWVyVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0RGVsYXlUaW1lcihhRGF0YXNldC5tRGVsYXkpOworICAgICAgICAgICAgU2V0KHRsdik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzQ2hhbm5lbFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OkNoYW5uZWxUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0Q2hhbm5lbFBhZ2UoMCk7CisgICAgICAgIHRsdi5TZXRDaGFubmVsKGFEYXRhc2V0Lm1DaGFubmVsKTsKKyAgICAgICAgU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0NoYW5uZWxNYXNrUGFnZTBTZXQpCisgICAgeworICAgICAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0TWFzayhhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6RXh0ZW5kZWRQYW5JZFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRFeHRlbmRlZFBhbklkKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkLm04KTsKKyAgICAgICAgU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6Ok1lc2hMb2NhbFByZWZpeFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRNZXNoTG9jYWxQcmVmaXgoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNNYXN0ZXJLZXlTZXQpCisgICAgeworICAgICAgICBNZXNoQ29QOjpOZXR3b3JrTWFzdGVyS2V5VGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtNYXN0ZXJLZXkoYURhdGFzZXQubU1hc3RlcktleSk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6Ok5ldHdvcmtOYW1lVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtOYW1lKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQYW5JZFNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlBhbklkVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldFBhbklkKGFEYXRhc2V0Lm1QYW5JZCk7CisgICAgICAgIFNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQU0tjU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6UFNLY1RsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRQU0tjKGFEYXRhc2V0Lm1QU0tjLm04KTsKKyAgICAgICAgU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1NlY3VyaXR5UG9saWN5U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6U2VjdXJpdHlQb2xpY3lUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0Um90YXRpb25UaW1lKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tUm90YXRpb25UaW1lKTsKKyAgICAgICAgdGx2LlNldEZsYWdzKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MpOworICAgICAgICBTZXQodGx2KTsKKyAgICB9CisKKyAgICBtVXBkYXRlVGltZSA9IFRpbWVyOjpHZXROb3coKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK2NvbnN0IFRpbWVzdGFtcCAqRGF0YXNldDo6R2V0VGltZXN0YW1wKHZvaWQpIGNvbnN0Cit7CisgICAgY29uc3QgVGltZXN0YW1wICp0aW1lc3RhbXAgPSBOVUxMOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQWN0aXZlVGltZXN0YW1wVGx2ICo+KEdldChtVHlwZSkpOworICAgICAgICBWZXJpZnlPckV4aXQodGx2ICE9IE5VTEwpOworICAgICAgICB0aW1lc3RhbXAgPSBzdGF0aWNfY2FzdDxjb25zdCBUaW1lc3RhbXAgKj4odGx2KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqPihHZXQobVR5cGUpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHRsdiAhPSBOVUxMKTsKKyAgICAgICAgdGltZXN0YW1wID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGltZXN0YW1wICo+KHRsdik7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiB0aW1lc3RhbXA7Cit9CisKK3ZvaWQgRGF0YXNldDo6U2V0VGltZXN0YW1wKGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCkKK3sKKyAgICBpZiAobVR5cGUgPT0gVGx2OjprQWN0aXZlVGltZXN0YW1wKQorICAgIHsKKyAgICAgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wLkluaXQoKTsKKyAgICAgICAgKnN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmYWN0aXZlVGltZXN0YW1wKSA9IGFUaW1lc3RhbXA7CisgICAgICAgIFNldChhY3RpdmVUaW1lc3RhbXApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXA7CisgICAgICAgIHBlbmRpbmdUaW1lc3RhbXAuSW5pdCgpOworICAgICAgICAqc3RhdGljX2Nhc3Q8VGltZXN0YW1wICo+KCZwZW5kaW5nVGltZXN0YW1wKSA9IGFUaW1lc3RhbXA7CisgICAgICAgIFNldChwZW5kaW5nVGltZXN0YW1wKTsKKyAgICB9Cit9CisKK290RXJyb3IgRGF0YXNldDo6U2V0KGNvbnN0IFRsdiAmYVRsdikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBieXRlc0F2YWlsYWJsZSA9IHNpemVvZihtVGx2cykgLSBtTGVuZ3RoOworICAgIFRsdiAqb2xkID0gR2V0KGFUbHYuR2V0VHlwZSgpKTsKKworICAgIGlmIChvbGQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGJ5dGVzQXZhaWxhYmxlICs9IHNpemVvZihUbHYpICsgb2xkLT5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKFRsdikgKyBhVGx2LkdldExlbmd0aCgpIDw9IGJ5dGVzQXZhaWxhYmxlLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gcmVtb3ZlIG9sZCBUTFYKKyAgICBpZiAob2xkICE9IE5VTEwpCisgICAgeworICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG9sZCksIHNpemVvZihUbHYpICsgb2xkLT5HZXRMZW5ndGgoKSk7CisgICAgfQorCisgICAgLy8gYWRkIG5ldyBUTFYKKyAgICBtZW1jcHkobVRsdnMgKyBtTGVuZ3RoLCAmYVRsdiwgc2l6ZW9mKFRsdikgKyBhVGx2LkdldExlbmd0aCgpKTsKKyAgICBtTGVuZ3RoICs9IHNpemVvZihUbHYpICsgYVRsdi5HZXRMZW5ndGgoKTsKKworICAgIG1VcGRhdGVUaW1lID0gVGltZXI6OkdldE5vdygpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpTZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhTGVuZ3RoID09IGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgYUxlbmd0aCwgbVRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgbUxlbmd0aCA9IGFMZW5ndGg7CisKKyAgICBtVXBkYXRlVGltZSA9IFRpbWVyOjpHZXROb3coKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgRGF0YXNldDo6UmVtb3ZlKFRsdjo6VHlwZSBhVHlwZSkKK3sKKyAgICBUbHYgKnRsdjsKKworICAgIFZlcmlmeU9yRXhpdCgodGx2ID0gR2V0KGFUeXBlKSkgIT0gTlVMTCk7CisgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0bHYpLCBzaXplb2YoVGx2KSArIHRsdi0+R2V0TGVuZ3RoKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBEYXRhc2V0OjpBcHBlbmRNbGVEYXRhc2V0VGx2KE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1sZTo6VGx2IHRsdjsKKyAgICBNbGU6OlRsdjo6VHlwZSB0eXBlOworICAgIGNvbnN0IFRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4obVRsdnMpOworICAgIGNvbnN0IFRsdiAqZW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yRXhpdChtTGVuZ3RoID4gMCk7CisKKyAgICB0eXBlID0gKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCA/IE1sZTo6VGx2OjprQWN0aXZlRGF0YXNldCA6IE1sZTo6VGx2OjprUGVuZGluZ0RhdGFzZXQpOworCisgICAgdGx2LlNldFR5cGUodHlwZSk7CisgICAgdGx2LlNldExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihtTGVuZ3RoKSAtIHNpemVvZihUbHYpIC0gc2l6ZW9mKFRpbWVzdGFtcCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKFRsdikpKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gbVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIDsgLy8gc2tpcCBBY3RpdmUgb3IgUGVuZGluZyBUaW1lc3RhbXAgVExWCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gVGx2OjprRGVsYXlUaW1lcikKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgZWxhcHNlZCA9IFRpbWVyOjpHZXROb3coKSAtIG1VcGRhdGVUaW1lOworICAgICAgICAgICAgRGVsYXlUaW1lclRsdiBkZWxheVRpbWVyOworCisgICAgICAgICAgICBtZW1jcHkoJmRlbGF5VGltZXIsIGN1ciwgc2l6ZW9mKGRlbGF5VGltZXIpKTsKKworICAgICAgICAgICAgaWYgKGRlbGF5VGltZXIuR2V0RGVsYXlUaW1lcigpID4gZWxhcHNlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxheVRpbWVyLlNldERlbGF5VGltZXIoZGVsYXlUaW1lci5HZXREZWxheVRpbWVyKCkgLSBlbGFwc2VkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxheVRpbWVyLlNldERlbGF5VGltZXIoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmRlbGF5VGltZXIsIHNpemVvZihkZWxheVRpbWVyKSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZChjdXIsIHNpemVvZihUbHYpICsgY3VyLT5HZXRMZW5ndGgoKSkpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDE2X3QgRGF0YXNldDo6R2V0U2V0dGluZ3NLZXkodm9pZCkKK3sKKyAgICB1aW50MTZfdCBydmFsOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oU2V0dGluZ3M6OmtLZXlBY3RpdmVEYXRhc2V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihTZXR0aW5nczo6a0tleVBlbmRpbmdEYXRhc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBEYXRhc2V0OjpSZW1vdmUodWludDhfdCAqYVN0YXJ0LCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgbWVtbW92ZShhU3RhcnQsIGFTdGFydCArIGFMZW5ndGgsIG1MZW5ndGggLSAoc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXJ0IC0gbVRsdnMpICsgYUxlbmd0aCkpOworICAgIG1MZW5ndGggLT0gYUxlbmd0aDsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0LmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MDM3MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldC5ocHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBNZXNoQ29QIERhdGFzZXRzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfREFUQVNFVF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfREFUQVNFVF9IUFBfCisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgRGF0YXNldAoreworICAgIGZyaWVuZCBjbGFzcyBEYXRhc2V0TG9jYWw7CisKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4U2l6ZSA9IDI1NiwgICAgICAvLy88IE1heGltdW0gc2l6ZSBvZiBNZXNoQ29QIERhdGFzZXQgKGJ5dGVzKQorICAgICAgICBrTWF4VmFsdWVTaXplID0gMTYsICAvLy8gPCBNYXhpbXVtIHNpemUgb2YgZWFjaCBEYXRhc2V0IFRMViB2YWx1ZSAoYnl0ZXMpCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICAgICAgIFRoZSB0eXBlIG9mIHRoZSBkYXRhc2V0LCBhY3RpdmUgb3IgcGVuZGluZy4KKyAgICAgKgorICAgICAqLworICAgIERhdGFzZXQoY29uc3QgVGx2OjpUeXBlIGFUeXBlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUTFYgb3IgTlVMTCBpZiBub25lIGlzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgVGx2ICpHZXQoVGx2OjpUeXBlIGFUeXBlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFRMViBvciBOVUxMIGlmIG5vbmUgaXMgZm91bmQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBUbHYgKkdldChUbHY6OlR5cGUgYVR5cGUpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGJ5dGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRCeXRlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtVGx2czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29udmVydHMgdGhlIFRMViByZXByZXNlbnRhdGlvbiB0byBzdHJ1Y3R1cmUgcmVwcmVzZW50YXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdldChvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRGF0YXNldCBzaXplIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIERhdGFzZXQgc2l6ZSBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNpemUodm9pZCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9jYWwgdGltZSB0aGUgZGF0YXNldCB3YXMgbGFzdCB1cGRhdGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGxvY2FsIHRpbWUgdGhlIGRhdGFzZXQgd2FzIGxhc3QgdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFVwZGF0ZVRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVVwZGF0ZVRpbWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFRpbWVzdGFtcC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgVGltZXN0YW1wLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGltZXN0YW1wICpHZXRUaW1lc3RhbXAodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUaW1lc3RhbXAgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWVzdGFtcChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXApOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhIFRMViBpbiB0aGUgRGF0YXNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIENvdWxkIG5vdCBzZXQgdGhlIFRMViBkdWUgdG8gaW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IFRsdiAmYVRsdik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEYXRhc2V0IHVzaW5nIFRMVnMgc3RvcmVkIGluIGEgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2UgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFPZmZzZXQgICBUaGUgbWVzc2FnZSBidWZmZXIgb2Zmc2V0IHdoZXJlIHRoZSBkYXRhc2V0IHN0YXJ0cy4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgVGhlIFRMVnMgbGVuZ3RoIGluIHRoZSBtZXNzYWdlIGJ1ZmZlciBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBEYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgdmFsdWVzIG9mIEBwIGFPZmZzZXQgYW5kIEBwIGFMZW5ndGggYXJlIG5vdCB2YWxpZCBmb3IgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERhdGFzZXQgdXNpbmcgYW4gZXhpc3RpbmcgRGF0YXNldC4KKyAgICAgKgorICAgICAqIElmIHRoaXMgRGF0YXNldCBpcyBhbiBBY3RpdmUgRGF0YXNldCwgYW55IFBlbmRpbmcgVGltZXN0YW1wIGFuZCBEZWxheSBUaW1lciBUTFZzIHdpbGwgYmUgb21pdHRlZCBpbiB0aGUgY29weQorICAgICAqIGZyb20gQHAgYURhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgVGhlIGlucHV0IERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBEYXRhc2V0ICZhRGF0YXNldCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YXNldCAgVGhlIGlucHV0IERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpOworI2VuZGlmCisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgVExWIGZyb20gdGhlIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFUeXBlIFRoZSB0eXBlIG9mIGEgc3BlY2lmaWMgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmUoVGx2OjpUeXBlIGFUeXBlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIE1MRSBEYXRhc2V0IFRMViBidXQgZXhjbHVkaW5nIE1lc2hDb1AgU3ViIFRpbWVzdGFtcCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmQgTUxFIERhdGFzZXQgVExWIHdpdGhvdXQgTWVzaENvUCBTdWIgVGltZXN0YW1wIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBhcHBlbmQgdGhlIG1lc3NhZ2Ugd2l0aCBNTEUgRGF0YXNldCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZE1sZURhdGFzZXRUbHYoTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVpbnQxNl90IEdldFNldHRpbmdzS2V5KHZvaWQpOworCisgICAgdm9pZCBSZW1vdmUodWludDhfdCAqYVN0YXJ0LCB1aW50OF90IGFMZW5ndGgpOworCisgICAgdWludDhfdCAgICBtVGx2c1trTWF4U2l6ZV07ICAvLy88IFRoZSBEYXRhc2V0IGJ1ZmZlcgorICAgIHVpbnQzMl90ICAgbVVwZGF0ZVRpbWU7ICAgICAgLy8vPCBMb2NhbCB0aW1lIGxhc3QgdXBkYXRlZAorICAgIHVpbnQxNl90ICAgbUxlbmd0aDsgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGluIEB2YXIgbVRsdnMKKyAgICBUbHY6OlR5cGUgIG1UeXBlOyAgICAgICAgICAgIC8vLzwgQWN0aXZlIG9yIFBlbmRpbmcKK307CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNRVNIQ09QX0RBVEFTRVRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X2xvY2FsLmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MGFkYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5jcHAKQEAgLTAsMCArMSw0NTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBjb21tb24gbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIE1lc2hDb1AgRGF0YXNldHMuCisgKgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImRhdGFzZXRfbG9jYWwudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImRhdGFzZXRfbG9jYWwuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3NldHRpbmdzLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitEYXRhc2V0TG9jYWw6OkRhdGFzZXRMb2NhbChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IFRsdjo6VHlwZSBhVHlwZSkgOgorICAgIEluc3RhbmNlTG9jYXRvcihhSW5zdGFuY2UpLAorICAgIG1VcGRhdGVUaW1lKDApLAorICAgIG1UeXBlKGFUeXBlKQoreworfQorCit2b2lkIERhdGFzZXRMb2NhbDo6Q2xlYXIodm9pZCkKK3sKKyAgICBvdFBsYXRTZXR0aW5nc0RlbGV0ZShHZXRJbnN0YW5jZSgpLCBHZXRTZXR0aW5nc0tleSgpLCAtMSk7Cit9CisKK2Jvb2wgRGF0YXNldExvY2FsOjpJc1ByZXNlbnQodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3RQbGF0U2V0dGluZ3NHZXQoR2V0SW5zdGFuY2UoKSwgR2V0U2V0dGluZ3NLZXkoKSwgMCwgTlVMTCwgTlVMTCkgPT0gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBEYXRhc2V0TG9jYWw6OkdldChEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBEZWxheVRpbWVyVGx2ICpkZWxheVRpbWVyOworICAgIHVpbnQzMl90IGVsYXBzZWQ7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGFEYXRhc2V0Lm1MZW5ndGggPSBzaXplb2YoYURhdGFzZXQubVRsdnMpOworICAgIGVycm9yID0gb3RQbGF0U2V0dGluZ3NHZXQoR2V0SW5zdGFuY2UoKSwgR2V0U2V0dGluZ3NLZXkoKSwgMCwgYURhdGFzZXQubVRsdnMsICZhRGF0YXNldC5tTGVuZ3RoKTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgYURhdGFzZXQubUxlbmd0aCA9IDApOworCisgICAgZGVsYXlUaW1lciA9IHN0YXRpY19jYXN0PERlbGF5VGltZXJUbHYgKj4oYURhdGFzZXQuR2V0KFRsdjo6a0RlbGF5VGltZXIpKTsKKyAgICBWZXJpZnlPckV4aXQoZGVsYXlUaW1lcik7CisKKyAgICBlbGFwc2VkID0gVGltZXI6OkdldE5vdygpIC0gbVVwZGF0ZVRpbWU7CisKKyAgICBpZiAoZGVsYXlUaW1lci0+R2V0RGVsYXlUaW1lcigpID4gZWxhcHNlZCkKKyAgICB7CisgICAgICAgIGRlbGF5VGltZXItPlNldERlbGF5VGltZXIoZGVsYXlUaW1lci0+R2V0RGVsYXlUaW1lcigpIC0gZWxhcHNlZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlbGF5VGltZXItPlNldERlbGF5VGltZXIoMCk7CisgICAgfQorCisgICAgYURhdGFzZXQubVVwZGF0ZVRpbWUgPSBUaW1lcjo6R2V0Tm93KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERhdGFzZXRMb2NhbDo6R2V0KG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkgY29uc3QKK3sKKyAgICBEYXRhc2V0ICAgIGRhdGFzZXQobVR5cGUpOworICAgIG90RXJyb3IgICAgZXJyb3I7CisgICAgY29uc3QgVGx2ICpjdXI7CisgICAgY29uc3QgVGx2ICplbmQ7CisKKyAgICBtZW1zZXQoJmFEYXRhc2V0LCAwLCBzaXplb2YoYURhdGFzZXQpKTsKKworICAgIGRhdGFzZXQubUxlbmd0aCA9IHNpemVvZihkYXRhc2V0Lm1UbHZzKTsKKyAgICBlcnJvciA9IG90UGxhdFNldHRpbmdzR2V0KEdldEluc3RhbmNlKCksIEdldFNldHRpbmdzS2V5KCksIDAsIGRhdGFzZXQubVRsdnMsICZkYXRhc2V0Lm1MZW5ndGgpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4oZGF0YXNldC5tVGx2cyk7CisgICAgZW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4oZGF0YXNldC5tVGx2cyArIGRhdGFzZXQubUxlbmd0aCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworCisgICAgICAgIGNhc2UgVGx2OjprQWN0aXZlVGltZXN0YW1wOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBBY3RpdmVUaW1lc3RhbXBUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubUFjdGl2ZVRpbWVzdGFtcCA9IHRsdi0+R2V0U2Vjb25kcygpOworICAgICAgICAgICAgYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtDaGFubmVsOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBDaGFubmVsVGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBDaGFubmVsVGx2ICo+KGN1cik7CisgICAgICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbCA9IHRsdi0+R2V0Q2hhbm5lbCgpOworICAgICAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprQ2hhbm5lbE1hc2s6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdGx2TGVuZ3RoID0gY3VyLT5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVudHJ5ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGN1cikgKyBzaXplb2YoVGx2KTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVudHJ5RW5kID0gIGVudHJ5ICsgdGx2TGVuZ3RoOworCisgICAgICAgICAgICB3aGlsZSAoZW50cnkgPCBlbnRyeUVuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBDaGFubmVsTWFza0VudHJ5ICo+KGVudHJ5KS0+R2V0Q2hhbm5lbFBhZ2UoKSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBpID0gc2l6ZW9mKENoYW5uZWxNYXNrRW50cnkpOworICAgICAgICAgICAgICAgICAgICBhRGF0YXNldC5tQ2hhbm5lbE1hc2tQYWdlMCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihlbnRyeVtpXSB8IChlbnRyeVtpICsgMV0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW50cnlbaSArIDJdIDw8IDE2KSB8IChlbnRyeVtpICsgM10gPDwgMjQpKTsKKyAgICAgICAgICAgICAgICAgICAgYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVudHJ5ICs9IChyZWludGVycHJldF9jYXN0PGNvbnN0IENoYW5uZWxNYXNrRW50cnkgKj4oZW50cnkpLT5HZXRNYXNrTGVuZ3RoKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ2hhbm5lbE1hc2tFbnRyeSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprRGVsYXlUaW1lcjoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRGVsYXlUaW1lclRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRGVsYXlUaW1lclRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubURlbGF5ID0gdGx2LT5HZXREZWxheVRpbWVyKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNEZWxheVNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprRXh0ZW5kZWRQYW5JZDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRXh0ZW5kZWRQYW5JZFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRXh0ZW5kZWRQYW5JZFRsdiAqPihjdXIpOworICAgICAgICAgICAgbWVtY3B5KGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkLm04LCB0bHYtPkdldEV4dGVuZGVkUGFuSWQoKSwgc2l6ZW9mKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtNZXNoTG9jYWxQcmVmaXg6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE1lc2hMb2NhbFByZWZpeFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWVzaExvY2FsUHJlZml4VGx2ICo+KGN1cik7CisgICAgICAgICAgICBtZW1jcHkoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCwgdGx2LT5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgc2l6ZW9mKGFEYXRhc2V0Lm1NZXNoTG9jYWxQcmVmaXgpKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprTmV0d29ya01hc3RlcktleToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTmV0d29ya01hc3RlcktleVRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya01hc3RlcktleVRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubU1hc3RlcktleSA9IHRsdi0+R2V0TmV0d29ya01hc3RlcktleSgpOworICAgICAgICAgICAgYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUbHY6OmtOZXR3b3JrTmFtZToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTmV0d29ya05hbWVUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtOYW1lVGx2ICo+KGN1cik7CisgICAgICAgICAgICBtZW1jcHkoYURhdGFzZXQubU5ldHdvcmtOYW1lLm04LCB0bHYtPkdldE5ldHdvcmtOYW1lKCksIHRsdi0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgYURhdGFzZXQubUlzTmV0d29ya05hbWVTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a1BhbklkOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBQYW5JZFRsdiAqcGFuaWQgPSBzdGF0aWNfY2FzdDxjb25zdCBQYW5JZFRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubVBhbklkID0gcGFuaWQtPkdldFBhbklkKCk7CisgICAgICAgICAgICBhRGF0YXNldC5tSXNQYW5JZFNldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUGVuZGluZ1RpbWVzdGFtcDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqdGx2ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUGVuZGluZ1RpbWVzdGFtcFRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubVBlbmRpbmdUaW1lc3RhbXAgPSB0bHYtPkdldFNlY29uZHMoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a1BTS2M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFBTS2NUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IFBTS2NUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG1lbWNweShhRGF0YXNldC5tUFNLYy5tOCwgdGx2LT5HZXRQU0tjKCksIHRsdi0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgYURhdGFzZXQubUlzUFNLY1NldCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprU2VjdXJpdHlQb2xpY3k6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFNlY3VyaXR5UG9saWN5VGx2ICp0bHYgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWN1cml0eVBvbGljeVRsdiAqPihjdXIpOworICAgICAgICAgICAgYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1Sb3RhdGlvblRpbWUgPSB0bHYtPkdldFJvdGF0aW9uVGltZSgpOworICAgICAgICAgICAgYURhdGFzZXQubVNlY3VyaXR5UG9saWN5Lm1GbGFncyA9IHRsdi0+R2V0RmxhZ3MoKTsKKyAgICAgICAgICAgIGFEYXRhc2V0Lm1Jc1NlY3VyaXR5UG9saWN5U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIERhdGFzZXRMb2NhbDo6U2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBEYXRhc2V0IGRhdGFzZXQobVR5cGUpOworICAgIE1lc2hDb1A6OkFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXBUbHY7CisKKyAgICBWZXJpZnlPckV4aXQoYURhdGFzZXQubUlzQWN0aXZlVGltZXN0YW1wU2V0LCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBhY3RpdmVUaW1lc3RhbXBUbHYuSW5pdCgpOworICAgIGFjdGl2ZVRpbWVzdGFtcFRsdi5TZXRTZWNvbmRzKGFEYXRhc2V0Lm1BY3RpdmVUaW1lc3RhbXApOworICAgIGFjdGl2ZVRpbWVzdGFtcFRsdi5TZXRUaWNrcygwKTsKKyAgICBkYXRhc2V0LlNldChhY3RpdmVUaW1lc3RhbXBUbHYpOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a1BlbmRpbmdUaW1lc3RhbXApCisgICAgeworICAgICAgICBNZXNoQ29QOjpQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXBUbHY7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFEYXRhc2V0Lm1Jc1BlbmRpbmdUaW1lc3RhbXBTZXQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICBwZW5kaW5nVGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICAgICAgcGVuZGluZ1RpbWVzdGFtcFRsdi5TZXRTZWNvbmRzKGFEYXRhc2V0Lm1QZW5kaW5nVGltZXN0YW1wKTsKKyAgICAgICAgcGVuZGluZ1RpbWVzdGFtcFRsdi5TZXRUaWNrcygwKTsKKyAgICAgICAgZGF0YXNldC5TZXQocGVuZGluZ1RpbWVzdGFtcFRsdik7CisKKyAgICAgICAgaWYgKGFEYXRhc2V0Lm1Jc0RlbGF5U2V0KQorICAgICAgICB7CisgICAgICAgICAgICBNZXNoQ29QOjpEZWxheVRpbWVyVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuU2V0RGVsYXlUaW1lcihhRGF0YXNldC5tRGVsYXkpOworICAgICAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNDaGFubmVsU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6Q2hhbm5lbFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRDaGFubmVsUGFnZSgwKTsKKyAgICAgICAgdGx2LlNldENoYW5uZWwoYURhdGFzZXQubUNoYW5uZWwpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNDaGFubmVsTWFza1BhZ2UwU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE1hc2soYURhdGFzZXQubUNoYW5uZWxNYXNrUGFnZTApOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNFeHRlbmRlZFBhbklkU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6RXh0ZW5kZWRQYW5JZFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRFeHRlbmRlZFBhbklkKGFEYXRhc2V0Lm1FeHRlbmRlZFBhbklkLm04KTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWVzaExvY2FsUHJlZml4U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6TWVzaExvY2FsUHJlZml4VGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE1lc2hMb2NhbFByZWZpeChhRGF0YXNldC5tTWVzaExvY2FsUHJlZml4Lm04KTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6TmV0d29ya01hc3RlcktleVRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXROZXR3b3JrTWFzdGVyS2V5KGFEYXRhc2V0Lm1NYXN0ZXJLZXkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNOZXR3b3JrTmFtZVNldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6Ok5ldHdvcmtOYW1lVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtOYW1lKGFEYXRhc2V0Lm1OZXR3b3JrTmFtZS5tOCk7CisgICAgICAgIGRhdGFzZXQuU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1BhbklkU2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6UGFuSWRUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0UGFuSWQoYURhdGFzZXQubVBhbklkKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzUFNLY1NldCkKKyAgICB7CisgICAgICAgIE1lc2hDb1A6OlBTS2NUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0UFNLYyhhRGF0YXNldC5tUFNLYy5tOCk7CisgICAgICAgIGRhdGFzZXQuU2V0KHRsdik7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc1NlY3VyaXR5UG9saWN5U2V0KQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6U2VjdXJpdHlQb2xpY3lUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0Um90YXRpb25UaW1lKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tUm90YXRpb25UaW1lKTsKKyAgICAgICAgdGx2LlNldEZsYWdzKGFEYXRhc2V0Lm1TZWN1cml0eVBvbGljeS5tRmxhZ3MpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIGlmIChkYXRhc2V0LkdldFNpemUoKSA9PSAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRTZXR0aW5nc0RlbGV0ZShHZXRJbnN0YW5jZSgpLCBHZXRTZXR0aW5nc0tleSgpLCAwKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiJXMgZGF0YXNldCBkZWxldGVkIiwgbVR5cGUgPT0gVGx2OjprQWN0aXZlVGltZXN0YW1wID8gIkFjdGl2ZSIgOiAiUGVuZGluZyIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90UGxhdFNldHRpbmdzU2V0KEdldEluc3RhbmNlKCksIEdldFNldHRpbmdzS2V5KCksIGRhdGFzZXQuR2V0Qnl0ZXMoKSwgZGF0YXNldC5HZXRTaXplKCkpOworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICIlcyBkYXRhc2V0IHNldCIsIG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCA/ICJBY3RpdmUiIDogIlBlbmRpbmciKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgRGF0YXNldExvY2FsOjpTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgRGF0YXNldCBkYXRhc2V0KGFEYXRhc2V0KTsKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIGRhdGFzZXQuUmVtb3ZlKFRsdjo6a1BlbmRpbmdUaW1lc3RhbXApOworICAgICAgICBkYXRhc2V0LlJlbW92ZShUbHY6OmtEZWxheVRpbWVyKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YXNldC5HZXRTaXplKCkgPT0gMCkKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RQbGF0U2V0dGluZ3NEZWxldGUoR2V0SW5zdGFuY2UoKSwgR2V0U2V0dGluZ3NLZXkoKSwgMCk7CisgICAgICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIiVzIGRhdGFzZXQgZGVsZXRlZCIsIG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCA/ICJBY3RpdmUiIDogIlBlbmRpbmciKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRTZXR0aW5nc1NldChHZXRJbnN0YW5jZSgpLCBHZXRTZXR0aW5nc0tleSgpLCBkYXRhc2V0LkdldEJ5dGVzKCksIGRhdGFzZXQuR2V0U2l6ZSgpKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiJXMgZGF0YXNldCBzZXQiLCBtVHlwZSA9PSBUbHY6OmtBY3RpdmVUaW1lc3RhbXAgPyAiQWN0aXZlIiA6ICJQZW5kaW5nIik7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvcik7CisKKyAgICBtVXBkYXRlVGltZSA9IFRpbWVyOjpHZXROb3coKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQxNl90IERhdGFzZXRMb2NhbDo6R2V0U2V0dGluZ3NLZXkodm9pZCkgY29uc3QKK3sKKyAgICB1aW50MTZfdCBydmFsOworCisgICAgaWYgKG1UeXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oU2V0dGluZ3M6OmtLZXlBY3RpdmVEYXRhc2V0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihTZXR0aW5nczo6a0tleVBlbmRpbmdEYXRhc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IERhdGFzZXRMb2NhbDo6Q29tcGFyZShjb25zdCBUaW1lc3RhbXAgKmFDb21wYXJlVGltZXN0YW1wKQoreworICAgIGNvbnN0IFRpbWVzdGFtcCAqdGhpc1RpbWVzdGFtcDsKKyAgICBEYXRhc2V0IGRhdGFzZXQobVR5cGUpOworICAgIGludCBydmFsID0gMTsKKworICAgIFN1Y2Nlc3NPckV4aXQoR2V0KGRhdGFzZXQpKTsKKworICAgIHRoaXNUaW1lc3RhbXAgPSBkYXRhc2V0LkdldFRpbWVzdGFtcCgpOworCisgICAgaWYgKGFDb21wYXJlVGltZXN0YW1wID09IE5VTEwgJiYgdGhpc1RpbWVzdGFtcCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcnZhbCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKGFDb21wYXJlVGltZXN0YW1wID09IE5VTEwgJiYgdGhpc1RpbWVzdGFtcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcnZhbCA9IC0xOworICAgIH0KKyAgICBlbHNlIGlmIChhQ29tcGFyZVRpbWVzdGFtcCAhPSBOVUxMICYmIHRoaXNUaW1lc3RhbXAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBydmFsID0gdGhpc1RpbWVzdGFtcC0+Q29tcGFyZSgqYUNvbXBhcmVUaW1lc3RhbXApOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X2xvY2FsLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkZTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9sb2NhbC5ocHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmFnaW5nIE1lc2hDb1AgRGF0YXNldHMuCisgKgorICovCisKKyNpZm5kZWYgTUVTSENPUF9EQVRBU0VUX0xPQ0FMX0hQUF8KKyNkZWZpbmUgTUVTSENPUF9EQVRBU0VUX0xPQ0FMX0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgRGF0YXNldExvY2FsOiBwdWJsaWMgSW5zdGFuY2VMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgICAgIFRoZSB0eXBlIG9mIHRoZSBkYXRhc2V0LCBhY3RpdmUgb3IgcGVuZGluZy4KKyAgICAgKgorICAgICAqLworICAgIERhdGFzZXRMb2NhbChvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IFRsdjo6VHlwZSBhVHlwZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGFuIEFjdGl2ZSBvciBQZW5kaW5nIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCB3aGVuIHRoaXMgaXMgYW4gQWN0aXZlIERhdGFzZXQuCisgICAgICogQHJldHZhbCBUbHY6OmtQZW5kaW5nVGltZXRhbXAgd2hlbiB0aGlzIGlzIGEgUGVuZGluZyBEYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgVGx2OjpUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRhdGFzZXQgaXMgcHJlc2VudCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgaWYgdGhlIGRhdGFzZXQgaXMgcHJlc2VudCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqIEByZXR2YWwgRkFMU0UgIGlmIHRoZSBkYXRhc2V0IGlzIG5vdCBwcmVzZW50IGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUHJlc2VudCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBBY3RpdmUgb3IgUGVuZGluZyBUaW1lc3RhbXAgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSBwb2ludGVyIHRvIHRoZSBBY3RpdmUgb3IgUGVuZGluZyBUaW1lc3RhbXAgdmFsdWUgb3IgTlVMTCBpZiB0aGUgZGF0YXNldCBpcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGltZXN0YW1wICpHZXRUaW1lc3RhbXAodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGRhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFEYXRhc2V0ICBXaGVyZSB0byBwbGFjZSB0aGUgZGF0YXNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGRhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldChEYXRhc2V0ICZhRGF0YXNldCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGRhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFEYXRhc2V0ICBXaGVyZSB0byBwbGFjZSB0aGUgZGF0YXNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGRhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldChvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9jYWwgdGltZSB0aGlzIGRhdGFzZXQgd2FzIGxhc3QgdXBkYXRlZCBvciByZXN0b3JlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsb2NhbCB0aW1lIHRoaXMgZGF0YXNldCB3YXMgbGFzdCB1cGRhdGVkIG9yIHJlc3RvcmVkLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0VXBkYXRlVGltZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVXBkYXRlVGltZTsgfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9yZXMgdGhlIGRhdGFzZXQgaW50byBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcmVkIHRoZSBkYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXQoY29uc3Qgb3RPcGVyYXRpb25hbERhdGFzZXQgJmFEYXRhc2V0KTsKKyNlbmRpZgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcmVzIHRoZSBkYXRhc2V0IGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0b3JlZCB0aGUgZGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlc3RvcmVzIGRhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZXN0b3JlIHRoZSBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGRhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlc3RvcmUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wYXJlcyB0aGlzIGRhdGFzZXQgdG8gYW5vdGhlciBiYXNlZCBvbiB0aGUgdGltZXN0YW1wLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbXBhcmUgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lc3RhbXAgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgLTEgIGlmIEBwIGFDb21wYXJlIGlzIG9sZGVyIHRoYW4gdGhpcyBkYXRhc2V0LgorICAgICAqIEByZXR2YWwgIDAgIGlmIEBwIGFDb21wYXJlIGlzIGVxdWFsIHRvIHRoaXMgZGF0YXNldC4KKyAgICAgKiBAcmV0dmFsICAxICBpZiBAcCBhQ29tcGFyZSBpcyBuZXdlciB0aGFuIHRoaXMgZGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIGludCBDb21wYXJlKGNvbnN0IFRpbWVzdGFtcCAqYUNvbXBhcmUpOworCitwcml2YXRlOgorICAgIHVpbnQxNl90IEdldFNldHRpbmdzS2V5KHZvaWQpIGNvbnN0OworICAgIHZvaWQgU2V0VGltZXN0YW1wKGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KTsKKworICAgIHVpbnQzMl90ICAgIG1VcGRhdGVUaW1lOyAgICAgIC8vLzwgTG9jYWwgdGltZSBsYXN0IHVwZGF0ZWQKKyAgICBUbHY6OlR5cGUgICBtVHlwZTsgICAgICAgICAgICAvLy88IEFjdGl2ZSBvciBQZW5kaW5nCit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSENPUF9EQVRBU0VUX0xPQ0FMX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNiMWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTEzMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNZXNoQ29QIERhdGFzZXRzIG1hbmFnZXIgdG8gcHJvY2VzcyBjb21tYW5kcy4KKyAqCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiZGF0YXNldF9tYW5hZ2VyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJkYXRhc2V0X21hbmFnZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbGVhZGVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworRGF0YXNldE1hbmFnZXI6OkRhdGFzZXRNYW5hZ2VyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYsIGNvbnN0IFRsdjo6VHlwZSBhVHlwZSwgY29uc3QgY2hhciAqYVVyaVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVXJpR2V0LCBUaW1lcjo6SGFuZGxlciBhVGltZXJIYW5kZXIpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1Mb2NhbChhVGhyZWFkTmV0aWYuR2V0SW5zdGFuY2UoKSwgYVR5cGUpLAorICAgIG1OZXR3b3JrKGFUeXBlKSwKKyAgICBtVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgYVRpbWVySGFuZGVyLCB0aGlzKSwKKyAgICBtVXJpU2V0KGFVcmlTZXQpLAorICAgIG1VcmlHZXQoYVVyaUdldCkKK3sKK30KKworY29uc3QgVGltZXN0YW1wICpEYXRhc2V0TWFuYWdlcjo6R2V0VGltZXN0YW1wKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1OZXR3b3JrLkdldFRpbWVzdGFtcCgpOworfQorCitpbnQgRGF0YXNldE1hbmFnZXI6OkNvbXBhcmUoY29uc3QgVGltZXN0YW1wICZhVGltZXN0YW1wKSBjb25zdAoreworICAgIGNvbnN0IFRpbWVzdGFtcCAqdGltZXN0YW1wID0gbU5ldHdvcmsuR2V0VGltZXN0YW1wKCk7CisgICAgaW50IHJ2YWwgPSAxOworCisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSB0aW1lc3RhbXAtPkNvbXBhcmUoYVRpbWVzdGFtcCk7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgRGF0YXNldE1hbmFnZXI6OkFwcGVuZE1sZURhdGFzZXRUbHYoTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1OZXR3b3JrLkFwcGVuZE1sZURhdGFzZXRUbHYoYU1lc3NhZ2UpOworfQorCitjb25zdCBUbHYgKkRhdGFzZXRNYW5hZ2VyOjpHZXRUbHYoVGx2OjpUeXBlIGFUeXBlKSBjb25zdAoreworICAgIHJldHVybiBtTmV0d29yay5HZXQoYVR5cGUpOworfQorCitvdEVycm9yIERhdGFzZXRNYW5hZ2VyOjpBcHBseUNvbmZpZ3VyYXRpb24odm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIERhdGFzZXQgZGF0YXNldExvY2FsKG1Mb2NhbC5HZXRUeXBlKCkpOworICAgIERhdGFzZXQgKmRhdGFzZXQ7CisgICAgY29uc3QgVGx2ICpjdXI7CisgICAgY29uc3QgVGx2ICplbmQ7CisKKyAgICBpZiAobmV0aWYuR2V0TWxlKCkuSXNBdHRhY2hlZCgpKQorICAgIHsKKyAgICAgICAgZGF0YXNldCA9ICZtTmV0d29yazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUxvY2FsLkdldChkYXRhc2V0TG9jYWwpOworICAgICAgICBkYXRhc2V0ID0gJmRhdGFzZXRMb2NhbDsKKyAgICB9CisKKyAgICBjdXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFRsdiAqPihkYXRhc2V0LT5HZXRCeXRlcygpKTsKKyAgICBlbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFRsdiAqPihkYXRhc2V0LT5HZXRCeXRlcygpICsgZGF0YXNldC0+R2V0U2l6ZSgpKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVGx2OjprQ2hhbm5lbDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgQ2hhbm5lbFRsdiAqY2hhbm5lbCA9IHN0YXRpY19jYXN0PGNvbnN0IENoYW5uZWxUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG5ldGlmLkdldE1hYygpLlNldENoYW5uZWwoc3RhdGljX2Nhc3Q8dWludDhfdD4oY2hhbm5lbC0+R2V0Q2hhbm5lbCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprUGFuSWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFBhbklkVGx2ICpwYW5pZCA9IHN0YXRpY19jYXN0PGNvbnN0IFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChwYW5pZC0+R2V0UGFuSWQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGx2OjprRXh0ZW5kZWRQYW5JZDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRXh0ZW5kZWRQYW5JZFRsdiAqZXh0cGFuaWQgPSBzdGF0aWNfY2FzdDxjb25zdCBFeHRlbmRlZFBhbklkVGx2ICo+KGN1cik7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRFeHRlbmRlZFBhbklkKGV4dHBhbmlkLT5HZXRFeHRlbmRlZFBhbklkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtOYW1lOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOZXR3b3JrTmFtZVRsdiAqbmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtOYW1lVGx2ICo+KGN1cik7CisgICAgICAgICAgICBvdE5ldHdvcmtOYW1lIG5ldHdvcmtOYW1lOworICAgICAgICAgICAgbWVtc2V0KG5ldHdvcmtOYW1lLm04LCAwLCBzaXplb2YobmV0d29ya05hbWUpKTsKKyAgICAgICAgICAgIG1lbWNweShuZXR3b3JrTmFtZS5tOCwgbmFtZS0+R2V0TmV0d29ya05hbWUoKSwgbmFtZS0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0TmV0d29ya05hbWUobmV0d29ya05hbWUubTgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtNYXN0ZXJLZXk6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5ldHdvcmtNYXN0ZXJLZXlUbHYgKmtleSA9IHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtNYXN0ZXJLZXlUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRNYXN0ZXJLZXkoa2V5LT5HZXROZXR3b3JrTWFzdGVyS2V5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIE9QRU5USFJFQURfRlRECisKKyAgICAgICAgY2FzZSBUbHY6OmtQU0tjOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBQU0tjVGx2ICpwc2tjID0gc3RhdGljX2Nhc3Q8Y29uc3QgUFNLY1RsdiAqPihjdXIpOworICAgICAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldFBTS2MocHNrYy0+R2V0UFNLYygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyNlbmRpZgorCisgICAgICAgIGNhc2UgVGx2OjprTWVzaExvY2FsUHJlZml4OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBNZXNoTG9jYWxQcmVmaXhUbHYgKnByZWZpeCA9IHN0YXRpY19jYXN0PGNvbnN0IE1lc2hMb2NhbFByZWZpeFRsdiAqPihjdXIpOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuU2V0TWVzaExvY2FsUHJlZml4KHByZWZpeC0+R2V0TWVzaExvY2FsUHJlZml4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRsdjo6a1NlY3VyaXR5UG9saWN5OgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBTZWN1cml0eVBvbGljeVRsdiAqc2VjdXJpdHlQb2xpY3kgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWN1cml0eVBvbGljeVRsdiAqPihjdXIpOworICAgICAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEtleVJvdGF0aW9uKHNlY3VyaXR5UG9saWN5LT5HZXRSb3RhdGlvblRpbWUoKSk7CisgICAgICAgICAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0U2VjdXJpdHlQb2xpY3lGbGFncyhzZWN1cml0eVBvbGljeS0+R2V0RmxhZ3MoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGF0YXNldE1hbmFnZXI6OlJlc3RvcmUodm9pZCkKK3sKKyAgICByZXR1cm4gbUxvY2FsLkdldChtTmV0d29yayk7Cit9CisKK3ZvaWQgRGF0YXNldE1hbmFnZXI6OkNsZWFyKHZvaWQpCit7CisgICAgbU5ldHdvcmsuQ2xlYXIoKTsKKyAgICBtTG9jYWwuQ2xlYXIoKTsKKyAgICBtVGltZXIuU3RvcCgpOworfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpIYW5kbGVEZXRhY2godm9pZCkKK3sKKyAgICBtTG9jYWwuR2V0KG1OZXR3b3JrKTsKKyAgICBtVGltZXIuU3RvcCgpOworfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgbU5ldHdvcmsuU2V0KGFEYXRhc2V0KTsKKyAgICBtTG9jYWwuU2V0KGFEYXRhc2V0KTsKK30KKworb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6U2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTmV0d29yay5TZXQoYU1lc3NhZ2UsIGFPZmZzZXQsIGFMZW5ndGgpKTsKKyAgICBtTmV0d29yay5TZXRUaW1lc3RhbXAoYVRpbWVzdGFtcCk7CisgICAgSGFuZGxlTmV0d29ya1VwZGF0ZSgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgRGF0YXNldE1hbmFnZXI6OlNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTG9jYWwuU2V0KGFEYXRhc2V0KSk7CisKKyAgICBzd2l0Y2ggKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgbVRpbWVyLlN0YXJ0KDEwMDApOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBtTG9jYWwuR2V0KG1OZXR3b3JrKTsKKyAgICAgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5JbmNyZW1lbnRWZXJzaW9uKCk7CisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSW5jcmVtZW50U3RhYmxlVmVyc2lvbigpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpIYW5kbGVOZXR3b3JrVXBkYXRlKHZvaWQpCit7CisgICAgaW50IGNvbXBhcmUgPSBtTG9jYWwuQ29tcGFyZShtTmV0d29yay5HZXRUaW1lc3RhbXAoKSk7CisKKyAgICBpZiAoY29tcGFyZSA+IDApCisgICAgeworICAgICAgICBtTG9jYWwuU2V0KG1OZXR3b3JrKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tcGFyZSA8IDApCisgICAgeworICAgICAgICBtVGltZXIuU3RhcnQoMTAwMCk7CisgICAgfQorfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldExvY2FsKCkuSXNQcmVzZW50KCkpOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE1sZSgpLklzQXR0YWNoZWQoKSk7CisKKyAgICBWZXJpZnlPckV4aXQobUxvY2FsLkNvbXBhcmUobU5ldHdvcmsuR2V0VGltZXN0YW1wKCkpIDwgMCk7CisKKyAgICBpZiAobUxvY2FsLkdldFR5cGUoKSA9PSBUbHY6OmtBY3RpdmVUaW1lc3RhbXApCisgICAgeworICAgICAgICBjb25zdCBBY3RpdmVUaW1lc3RhbXBUbHYgKnRsdiA9IHN0YXRpY19jYXN0PGNvbnN0IEFjdGl2ZVRpbWVzdGFtcFRsdiAqPihuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkdldFRsdigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkpOworICAgICAgICBjb25zdCBUaW1lc3RhbXAgKnBlbmRpbmdBY3RpdmVUaW1lc3RhbXAgPSBzdGF0aWNfY2FzdDxjb25zdCBUaW1lc3RhbXAgKj4odGx2KTsKKworICAgICAgICBpZiAocGVuZGluZ0FjdGl2ZVRpbWVzdGFtcCAhPSBOVUxMICYmCisgICAgICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0TG9jYWwoKS5Db21wYXJlKHBlbmRpbmdBY3RpdmVUaW1lc3RhbXApID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHN0b3AgcmVnaXN0cmF0aW9uIGF0dGVtcHRzIGR1cmluZyBkYXRhc2V0IHRyYW5zaXRpb24KKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZ2lzdGVyKCk7CisgICAgbVRpbWVyLlN0YXJ0KDEwMDApOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6UmVnaXN0ZXIodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIERhdGFzZXQgZGF0YXNldChtTG9jYWwuR2V0VHlwZSgpKTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhtVXJpU2V0KTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgbUxvY2FsLkdldChkYXRhc2V0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGRhdGFzZXQuR2V0Qnl0ZXMoKSwgZGF0YXNldC5HZXRTaXplKCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBkYXRhc2V0IHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEYXRhc2V0TWFuYWdlcjo6R2V0KGNvbnN0IENvYXA6OkhlYWRlciAmYUhlYWRlciwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSBjb25zdAoreworICAgIFRsdiB0bHY7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDhfdCB0bHZzW0RhdGFzZXQ6OmtNYXhTaXplXTsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgICAgIGlmICh0bHYuR2V0VHlwZSgpID09IFRsdjo6a0dldCkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoID0gdGx2LkdldExlbmd0aCgpOworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQgKyBzaXplb2YoVGx2KSwgbGVuZ3RoLCB0bHZzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih0bHYpICsgdGx2LkdldExlbmd0aCgpOworICAgIH0KKworICAgIFNlbmRHZXRSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZUluZm8sIHRsdnMsIGxlbmd0aCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6U2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIFRsdiB0bHY7CisgICAgVGltZXN0YW1wICp0aW1lc3RhbXA7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgVGx2OjpUeXBlIHR5cGU7CisgICAgYm9vbCBpc1VwZGF0ZUZyb21Db21taXNzaW9uZXIgPSBmYWxzZTsKKyAgICBib29sIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSBmYWxzZTsKKyAgICBib29sIGRvZXNBZmZlY3RNYXN0ZXJLZXkgPSBmYWxzZTsKKyAgICBTdGF0ZVRsdjo6U3RhdGUgc3RhdGUgPSBTdGF0ZVRsdjo6a0FjY2VwdDsKKworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXA7CisgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiBwZW5kaW5nVGltZXN0YW1wOworICAgIENoYW5uZWxUbHYgY2hhbm5lbDsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIE1lc2hMb2NhbFByZWZpeFRsdiBtZXNoTG9jYWxQcmVmaXg7CisgICAgTmV0d29ya01hc3RlcktleVRsdiBtYXN0ZXJLZXk7CisgICAgUGFuSWRUbHYgcGFuSWQ7CisKKyAgICBhY3RpdmVUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworICAgIHBlbmRpbmdUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworICAgIGNoYW5uZWwuU2V0TGVuZ3RoKDApOworICAgIG1hc3RlcktleS5TZXRMZW5ndGgoMCk7CisgICAgbWVzaExvY2FsUHJlZml4LlNldExlbmd0aCgwKTsKKyAgICBwYW5JZC5TZXRMZW5ndGgoMCk7CisgICAgcGVuZGluZ1RpbWVzdGFtcC5TZXRMZW5ndGgoMCk7CisgICAgc2Vzc2lvbklkLlNldExlbmd0aCgwKTsKKworICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBzdGF0ZSA9IFN0YXRlVGx2OjprUmVqZWN0KTsKKworICAgIC8vIHZlcmlmeSB0aGF0IFRMViBkYXRhIHNpemUgaXMgbGVzcyB0aGFuIG1heGltdW0gVExWIHZhbHVlIHNpemUKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworICAgICAgICBWZXJpZnlPckV4aXQodGx2LkdldExlbmd0aCgpIDw9IERhdGFzZXQ6OmtNYXhWYWx1ZVNpemUsIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHRsdikgKyB0bHYuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gdmVyaWZ5IHRoYXQgZG9lcyBub3Qgb3ZlcmZsb3cgZGF0YXNldCBidWZmZXIKKyAgICBWZXJpZnlPckV4aXQoKG9mZnNldCAtIGFNZXNzYWdlLkdldE9mZnNldCgpKSA8PSBEYXRhc2V0OjprTWF4U2l6ZSwgc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICB0eXBlID0gKHN0cmNtcChtVXJpU2V0LCBPVF9VUklfUEFUSF9BQ1RJVkVfU0VUKSA9PSAwID8gVGx2OjprQWN0aXZlVGltZXN0YW1wIDogVGx2OjprUGVuZGluZ1RpbWVzdGFtcCk7CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCwgc2l6ZW9mKGFjdGl2ZVRpbWVzdGFtcCksIGFjdGl2ZVRpbWVzdGFtcCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIEV4aXROb3coc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGFjdGl2ZVRpbWVzdGFtcC5Jc1ZhbGlkKCksIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQZW5kaW5nVGltZXN0YW1wLCBzaXplb2YocGVuZGluZ1RpbWVzdGFtcCksIHBlbmRpbmdUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocGVuZGluZ1RpbWVzdGFtcC5Jc1ZhbGlkKCksIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgIH0KKworICAgIC8vIHZlcmlmeSB0aGUgcmVxdWVzdCBpbmNsdWRlcyBhIHRpbWVzdGFtcCB0aGF0IGlzIGFoZWFkIG9mIHRoZSBsb2NhbGx5IHN0b3JlZCB2YWx1ZQorICAgIHRpbWVzdGFtcCA9ICh0eXBlID09IFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCkgPworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmYWN0aXZlVGltZXN0YW1wKSA6CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGltZXN0YW1wICo+KCZwZW5kaW5nVGltZXN0YW1wKTsKKworICAgIFZlcmlmeU9yRXhpdChtTG9jYWwuQ29tcGFyZSh0aW1lc3RhbXApID4gMCwgc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICAvLyBjaGVjayBjaGFubmVsCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDaGFubmVsLCBzaXplb2YoY2hhbm5lbCksIGNoYW5uZWwpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoY2hhbm5lbC5Jc1ZhbGlkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwuR2V0Q2hhbm5lbCgpID49IE9UX1JBRElPX0NIQU5ORUxfTUlOICYmCisgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLkdldENoYW5uZWwoKSA8PSBPVF9SQURJT19DSEFOTkVMX01BWCwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworCisgICAgICAgIGlmIChjaGFubmVsLkdldENoYW5uZWwoKSAhPSBuZXRpZi5HZXRNYWMoKS5HZXRDaGFubmVsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2hlY2sgUEFOIElECisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQYW5JZCwgc2l6ZW9mKHBhbklkKSwgcGFuSWQpID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgcGFuSWQuSXNWYWxpZCgpICYmCisgICAgICAgIHBhbklkLkdldFBhbklkKCkgIT0gbmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSkKKyAgICB7CisgICAgICAgIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSB0cnVlOworICAgIH0KKworICAgIC8vIGNoZWNrIG1lc2ggbG9jYWwgcHJlZml4CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNZXNoTG9jYWxQcmVmaXgsIHNpemVvZihtZXNoTG9jYWxQcmVmaXgpLCBtZXNoTG9jYWxQcmVmaXgpID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgbWVtY21wKG1lc2hMb2NhbFByZWZpeC5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgbmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCksCisgICAgICAgICAgICAgICBtZXNoTG9jYWxQcmVmaXguR2V0TGVuZ3RoKCkpKQorICAgIHsKKyAgICAgICAgZG9lc0FmZmVjdENvbm5lY3Rpdml0eSA9IHRydWU7CisgICAgfQorCisgICAgLy8gY2hlY2sgbmV0d29yayBtYXN0ZXIga2V5CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5LCBzaXplb2YobWFzdGVyS2V5KSwgbWFzdGVyS2V5KSA9PSBPVF9FUlJPUl9OT05FICYmCisgICAgICAgIG1lbWNtcCgmbWFzdGVyS2V5LkdldE5ldHdvcmtNYXN0ZXJLZXkoKSwgJm5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNYXN0ZXJLZXkoKSwgT1RfTUFTVEVSX0tFWV9TSVpFKSkKKyAgICB7CisgICAgICAgIGRvZXNBZmZlY3RDb25uZWN0aXZpdHkgPSB0cnVlOworICAgICAgICBkb2VzQWZmZWN0TWFzdGVyS2V5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBjaGVjayBhY3RpdmUgdGltZXN0YW1wIHJvbGxiYWNrCisgICAgaWYgKHR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCAmJgorICAgICAgICAobWFzdGVyS2V5LkdldExlbmd0aCgpID09IDAgfHwKKyAgICAgICAgIG1lbWNtcCgmbWFzdGVyS2V5LkdldE5ldHdvcmtNYXN0ZXJLZXkoKSwgJm5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNYXN0ZXJLZXkoKSwgT1RfTUFTVEVSX0tFWV9TSVpFKSA9PSAwKSkKKyAgICB7CisgICAgICAgIC8vIG5vIGNoYW5nZSB0byBtYXN0ZXIga2V5LCBhY3RpdmUgdGltZXN0YW1wIG11c3QgYmUgYWhlYWQKKyAgICAgICAgY29uc3QgVGltZXN0YW1wICpsb2NhbEFjdGl2ZVRpbWVzdGFtcCA9IG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5HZXRUaW1lc3RhbXAoKTsKKworICAgICAgICBWZXJpZnlPckV4aXQobG9jYWxBY3RpdmVUaW1lc3RhbXAgPT0gTlVMTCB8fCBsb2NhbEFjdGl2ZVRpbWVzdGFtcC0+Q29tcGFyZShhY3RpdmVUaW1lc3RhbXApID4gMCwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgIH0KKworICAgIC8vIGNoZWNrIGNvbW1pc3Npb25lciBzZXNzaW9uIGlkCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQsIHNpemVvZihzZXNzaW9uSWQpLCBzZXNzaW9uSWQpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgKmxvY2FsSWQ7CisKKyAgICAgICAgaXNVcGRhdGVGcm9tQ29tbWlzc2lvbmVyID0gdHJ1ZTsKKworICAgICAgICBsb2NhbElkID0gc3RhdGljX2Nhc3Q8Q29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2ICo+KG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29tbWlzc2lvbmluZ0RhdGFTdWJUbHYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0NvbW1pc3Npb25lclNlc3Npb25JZCkpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChzZXNzaW9uSWQuSXNWYWxpZCgpICYmCisgICAgICAgICAgICAgICAgICAgICBsb2NhbElkICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgIGxvY2FsSWQtPkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpID09IHNlc3Npb25JZC5HZXRDb21taXNzaW9uZXJTZXNzaW9uSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3QpOworICAgIH0KKworICAgIC8vIHZlcmlmeSBhbiBNR01UX0FDVElWRV9TRVQucmVxIGZyb20gYSBDb21taXNzaW9uZXIgZG9lcyBub3QgYWZmZWN0IGNvbm5lY3Rpdml0eQorICAgIFZlcmlmeU9yRXhpdCghaXNVcGRhdGVGcm9tQ29tbWlzc2lvbmVyIHx8IHR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCB8fCAhZG9lc0FmZmVjdENvbm5lY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICAvLyB1cGRhdGUgZGF0YXNldAorICAgIGlmIChpc1VwZGF0ZUZyb21Db21taXNzaW9uZXIpCisgICAgeworICAgICAgICBtTmV0d29yay5TZXQobmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldE5ldHdvcmsoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1OZXR3b3JrLkNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gVGx2OjprUGVuZGluZ1RpbWVzdGFtcCB8fCAhZG9lc0FmZmVjdENvbm5lY3Rpdml0eSkKKyAgICB7CisgICAgICAgIG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworCisgICAgICAgIHdoaWxlIChvZmZzZXQgPCBhTWVzc2FnZS5HZXRMZW5ndGgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgT1RfVE9PTF9QQUNLRURfQkVHSU4KKyAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRsdiB0bHY7CisgICAgICAgICAgICAgICAgdWludDhfdCB2YWx1ZVtEYXRhc2V0OjprTWF4VmFsdWVTaXplXTsKKyAgICAgICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EIGRhdGE7CisKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoVGx2KSwgJmRhdGEudGx2KTsKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0ICsgc2l6ZW9mKFRsdiksIGRhdGEudGx2LkdldExlbmd0aCgpLCBkYXRhLnZhbHVlKTsKKworICAgICAgICAgICAgc3dpdGNoIChkYXRhLnRsdi5HZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRsdjo6a0NvbW1pc3Npb25lclNlc3Npb25JZDoKKyAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc3RvcmUgQ29tbWlzc2lvbmVyIFNlc3Npb24gSUQgVExWCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVGx2OjprRGVsYXlUaW1lcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZWxheVRpbWVyVGx2ICpkZWxheVRpbWVyVGx2ID0gc3RhdGljX2Nhc3Q8RGVsYXlUaW1lclRsdiAqPigmZGF0YS50bHYpOworCisgICAgICAgICAgICAgICAgaWYgKGRvZXNBZmZlY3RNYXN0ZXJLZXkgJiYgZGVsYXlUaW1lclRsdi0+R2V0RGVsYXlUaW1lcigpIDwgRGVsYXlUaW1lclRsdjo6a0RlbGF5VGltZXJEZWZhdWx0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lclRsdi0+U2V0RGVsYXlUaW1lcihEZWxheVRpbWVyVGx2OjprRGVsYXlUaW1lckRlZmF1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWxheVRpbWVyVGx2LT5HZXREZWxheVRpbWVyKCkgPCBuZXRpZi5HZXRMZWFkZXIoKS5HZXREZWxheVRpbWVyTWluaW1hbCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlUaW1lclRsdi0+U2V0RGVsYXlUaW1lcihuZXRpZi5HZXRMZWFkZXIoKS5HZXREZWxheVRpbWVyTWluaW1hbCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1OZXR3b3JrLlNldChkYXRhLnRsdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoVGx2KSArIGRhdGEudGx2LkdldExlbmd0aCgpOworICAgICAgICB9CisKKyAgICAgICAgbUxvY2FsLlNldChtTmV0d29yayk7CisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSW5jcmVtZW50VmVyc2lvbigpOworICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkluY3JlbWVudFN0YWJsZVZlcnNpb24oKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5BcHBseUFjdGl2ZURhdGFzZXQoYWN0aXZlVGltZXN0YW1wLCBhTWVzc2FnZSk7CisgICAgfQorCisgICAgLy8gbm90aWZ5IGNvbW1pc3Npb25lciBpZiB1cGRhdGUgaXMgZnJvbSB0aHJlYWQgZGV2aWNlCisgICAgaWYgKCFpc1VwZGF0ZUZyb21Db21taXNzaW9uZXIpCisgICAgeworICAgICAgICBCb3JkZXJBZ2VudExvY2F0b3JUbHYgKmJvcmRlckFnZW50TG9jYXRvcjsKKyAgICAgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworCisgICAgICAgIGJvcmRlckFnZW50TG9jYXRvciA9IHN0YXRpY19jYXN0PEJvcmRlckFnZW50TG9jYXRvclRsdiAqPihuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbW1pc3Npb25pbmdEYXRhU3ViVGx2KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0JvcmRlckFnZW50TG9jYXRvcikpOworICAgICAgICBWZXJpZnlPckV4aXQoYm9yZGVyQWdlbnRMb2NhdG9yICE9IE5VTEwpOworCisgICAgICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihib3JkZXJBZ2VudExvY2F0b3ItPkdldEJvcmRlckFnZW50TG9jYXRvcigpKTsKKworICAgICAgICBuZXRpZi5HZXRMZWFkZXIoKS5TZW5kRGF0YXNldENoYW5nZWQoZGVzdGluYXRpb24pOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgU2VuZFNldFJlc3BvbnNlKGFIZWFkZXIsIGFNZXNzYWdlSW5mbywgc3RhdGUpOworICAgIH0KKworICAgIHJldHVybiBzdGF0ZSA9PSBTdGF0ZVRsdjo6a0FjY2VwdCA/IE9UX0VSUk9SX05PTkUgOiBPVF9FUlJPUl9EUk9QOworfQorCitvdEVycm9yIERhdGFzZXRNYW5hZ2VyOjpTZW5kU2V0UmVxdWVzdChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhtVXJpU2V0KTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKKyAgICBpZiAobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IGFUbHZzOworICAgICAgICBjb25zdCB1aW50OF90ICplbmQgPSBhVGx2cyArIGFMZW5ndGg7CisgICAgICAgIGJvb2wgaGFzU2Vzc2lvbklkID0gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVGx2ICpkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUbHYgKj4oY3VyKTsKKworICAgICAgICAgICAgaWYgKGRhdGEtPkdldFR5cGUoKSA9PSBUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzU2Vzc2lvbklkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyICs9IHNpemVvZihUbHYpICsgZGF0YS0+R2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhhc1Nlc3Npb25JZCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IHNlc3Npb25JZDsKKyAgICAgICAgICAgIHNlc3Npb25JZC5Jbml0KCk7CisgICAgICAgICAgICBzZXNzaW9uSWQuU2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKG5ldGlmLkdldENvbW1pc3Npb25lcigpLkdldFNlc3Npb25JZCgpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0FjdGl2ZVRpbWVzdGFtcFNldCkKKyAgICB7CisgICAgICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiB0aW1lc3RhbXA7CisgICAgICAgIHRpbWVzdGFtcC5Jbml0KCk7CisgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmdGltZXN0YW1wKS0+U2V0U2Vjb25kcyhhRGF0YXNldC5tQWN0aXZlVGltZXN0YW1wKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGltZXN0YW1wICo+KCZ0aW1lc3RhbXApLT5TZXRUaWNrcygwKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdGltZXN0YW1wLCBzaXplb2YodGltZXN0YW1wKSkpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQZW5kaW5nVGltZXN0YW1wU2V0KQorICAgIHsKKyAgICAgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiB0aW1lc3RhbXA7CisgICAgICAgIHRpbWVzdGFtcC5Jbml0KCk7CisgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmdGltZXN0YW1wKS0+U2V0U2Vjb25kcyhhRGF0YXNldC5tUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgICAgIHN0YXRpY19jYXN0PFRpbWVzdGFtcCAqPigmdGltZXN0YW1wKS0+U2V0VGlja3MoMCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRpbWVzdGFtcCwgc2l6ZW9mKHRpbWVzdGFtcCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzTWFzdGVyS2V5U2V0KQorICAgIHsKKyAgICAgICAgTmV0d29ya01hc3RlcktleVRsdiBtYXN0ZXJrZXk7CisgICAgICAgIG1hc3RlcmtleS5Jbml0KCk7CisgICAgICAgIG1hc3RlcmtleS5TZXROZXR3b3JrTWFzdGVyS2V5KGFEYXRhc2V0Lm1NYXN0ZXJLZXkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZtYXN0ZXJrZXksIHNpemVvZihtYXN0ZXJrZXkpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc05ldHdvcmtOYW1lU2V0KQorICAgIHsKKyAgICAgICAgTmV0d29ya05hbWVUbHYgbmV0d29ya25hbWU7CisgICAgICAgIG5ldHdvcmtuYW1lLkluaXQoKTsKKyAgICAgICAgbmV0d29ya25hbWUuU2V0TmV0d29ya05hbWUoYURhdGFzZXQubU5ldHdvcmtOYW1lLm04KTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya25hbWUsIHNpemVvZihUbHYpICsgbmV0d29ya25hbWUuR2V0TGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzRXh0ZW5kZWRQYW5JZFNldCkKKyAgICB7CisgICAgICAgIEV4dGVuZGVkUGFuSWRUbHYgZXh0cGFuaWQ7CisgICAgICAgIGV4dHBhbmlkLkluaXQoKTsKKyAgICAgICAgZXh0cGFuaWQuU2V0RXh0ZW5kZWRQYW5JZChhRGF0YXNldC5tRXh0ZW5kZWRQYW5JZC5tOCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmV4dHBhbmlkLCBzaXplb2YoZXh0cGFuaWQpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc01lc2hMb2NhbFByZWZpeFNldCkKKyAgICB7CisgICAgICAgIE1lc2hMb2NhbFByZWZpeFRsdiBsb2NhbHByZWZpeDsKKyAgICAgICAgbG9jYWxwcmVmaXguSW5pdCgpOworICAgICAgICBsb2NhbHByZWZpeC5TZXRNZXNoTG9jYWxQcmVmaXgoYURhdGFzZXQubU1lc2hMb2NhbFByZWZpeC5tOCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmxvY2FscHJlZml4LCBzaXplb2YobG9jYWxwcmVmaXgpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0RlbGF5U2V0KQorICAgIHsKKyAgICAgICAgRGVsYXlUaW1lclRsdiBkZWxheXRpbWVyOworICAgICAgICBkZWxheXRpbWVyLkluaXQoKTsKKyAgICAgICAgZGVsYXl0aW1lci5TZXREZWxheVRpbWVyKGFEYXRhc2V0Lm1EZWxheSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmRlbGF5dGltZXIsIHNpemVvZihkZWxheXRpbWVyKSkpOworICAgIH0KKworICAgIGlmIChhRGF0YXNldC5tSXNQYW5JZFNldCkKKyAgICB7CisgICAgICAgIFBhbklkVGx2IHBhbmlkOworICAgICAgICBwYW5pZC5Jbml0KCk7CisgICAgICAgIHBhbmlkLlNldFBhbklkKGFEYXRhc2V0Lm1QYW5JZCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBhbmlkLCBzaXplb2YocGFuaWQpKSk7CisgICAgfQorCisgICAgaWYgKGFEYXRhc2V0Lm1Jc0NoYW5uZWxTZXQpCisgICAgeworICAgICAgICBDaGFubmVsVGx2IGNoYW5uZWw7CisgICAgICAgIGNoYW5uZWwuSW5pdCgpOworICAgICAgICBjaGFubmVsLlNldENoYW5uZWxQYWdlKDApOworICAgICAgICBjaGFubmVsLlNldENoYW5uZWwoYURhdGFzZXQubUNoYW5uZWwpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZjaGFubmVsLCBzaXplb2YoY2hhbm5lbCkpKTsKKyAgICB9CisKKyAgICBpZiAoYURhdGFzZXQubUlzQ2hhbm5lbE1hc2tQYWdlMFNldCkKKyAgICB7CisgICAgICAgIENoYW5uZWxNYXNrMFRsdiBjaGFubmVsTWFzazsKKyAgICAgICAgY2hhbm5lbE1hc2suSW5pdCgpOworICAgICAgICBjaGFubmVsTWFzay5TZXRNYXNrKGFEYXRhc2V0Lm1DaGFubmVsTWFza1BhZ2UwKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKyAgICB9CisKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGFUbHZzLCBhTGVuZ3RoKSk7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UtPkdldExlbmd0aCgpID09IGhlYWRlci5HZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBheWxvYWQsIHJlbW92ZSBjb2FwIHBheWxvYWQgbWFya2VyCisgICAgICAgIG1lc3NhZ2UtPlNldExlbmd0aChtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIDEpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBkYXRhc2V0IHNldCByZXF1ZXN0IHRvIGxlYWRlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEYXRhc2V0TWFuYWdlcjo6U2VuZEdldFJlcXVlc3QoY29uc3QgdWludDhfdCAqYVRsdlR5cGVzLCB1aW50OF90IGFMZW5ndGgsIGNvbnN0IG90SXA2QWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBUbHYgdGx2OworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKG1VcmlHZXQpOworCisgICAgaWYgKGFMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBpZiAoYUxlbmd0aCA+IDApCisgICAgeworICAgICAgICB0bHYuU2V0VHlwZShUbHY6OmtHZXQpOworICAgICAgICB0bHYuU2V0TGVuZ3RoKGFMZW5ndGgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoYVRsdlR5cGVzLCBhTGVuZ3RoKSk7CisgICAgfQorCisgICAgaWYgKGFBZGRyZXNzICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcigqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KGFBZGRyZXNzKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFsb2MobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgfQorCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBkYXRhc2V0IGdldCByZXF1ZXN0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIERhdGFzZXRNYW5hZ2VyOjpTZW5kU2V0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgcmVzcG9uc2VIZWFkZXI7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKworICAgIHJlc3BvbnNlSGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhUmVxdWVzdEhlYWRlcik7CisgICAgcmVzcG9uc2VIZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCByZXNwb25zZUhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzdGF0ZS5Jbml0KCk7CisgICAgc3RhdGUuU2V0U3RhdGUoYVN0YXRlKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZSwgc2l6ZW9mKHN0YXRlKSkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IGRhdGFzZXQgc2V0IHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKK3ZvaWQgRGF0YXNldE1hbmFnZXI6OlNlbmRHZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkgY29uc3QKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0RGVmYXVsdFJlc3BvbnNlSGVhZGVyKGFSZXF1ZXN0SGVhZGVyKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIGlmIChhTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBjb25zdCBUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1OZXR3b3JrLkdldEJ5dGVzKCkpOworICAgICAgICBjb25zdCBUbHYgKmVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVGx2ICo+KG1OZXR3b3JrLkdldEJ5dGVzKCkgKyBtTmV0d29yay5HZXRTaXplKCkpOworCisgICAgICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5IHx8CisgICAgICAgICAgICAgICAgKG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRTZWN1cml0eVBvbGljeUZsYWdzKCkgJiBPVF9TRUNVUklUWV9QT0xJQ1lfT0JUQUlOX01BU1RFUl9LRVkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoY3VyLCBzaXplb2YoVGx2KSArIGN1ci0+R2V0TGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1aW50OF90IGluZGV4ID0gMDsgaW5kZXggPCBhTGVuZ3RoOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUbHYgKnRsdjsKKworICAgICAgICAgICAgaWYgKGFUbHZzW2luZGV4XSA9PSBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5ICYmCisgICAgICAgICAgICAgICAgIShuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0U2VjdXJpdHlQb2xpY3lGbGFncygpICYgT1RfU0VDVVJJVFlfUE9MSUNZX09CVEFJTl9NQVNURVJfS0VZKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh0bHYgPSBtTmV0d29yay5HZXQoc3RhdGljX2Nhc3Q8Y29uc3QgVGx2OjpUeXBlPihhVGx2c1tpbmRleF0pKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRsdiwgc2l6ZW9mKFRsdikgKyB0bHYtPkdldExlbmd0aCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPT0gcmVzcG9uc2VIZWFkZXIuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICAvLyBubyBwYXlsb2FkLCByZW1vdmUgY29hcCBwYXlsb2FkIG1hcmtlcgorICAgICAgICBtZXNzYWdlLT5TZXRMZW5ndGgobWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSAxKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgZGF0YXNldCBnZXQgcmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBBY3RpdmVEYXRhc2V0QmFzZSAmR2V0QWN0aXZlRGF0YXNldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEFjdGl2ZURhdGFzZXRCYXNlICZhY3RpdmVEYXRhc2V0ID0gKnN0YXRpY19jYXN0PEFjdGl2ZURhdGFzZXRCYXNlICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEFjdGl2ZURhdGFzZXRCYXNlICZhY3RpdmVEYXRhc2V0ID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEFjdGl2ZURhdGFzZXQoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGFjdGl2ZURhdGFzZXQ7Cit9CisKK0FjdGl2ZURhdGFzZXRCYXNlOjpBY3RpdmVEYXRhc2V0QmFzZShUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBEYXRhc2V0TWFuYWdlcihhVGhyZWFkTmV0aWYsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCwgT1RfVVJJX1BBVEhfQUNUSVZFX1NFVCwgT1RfVVJJX1BBVEhfQUNUSVZFX0dFVCwKKyAgICAgICAgICAgICAgICAgICAmQWN0aXZlRGF0YXNldEJhc2U6OkhhbmRsZVRpbWVyKSwKKyAgICBtUmVzb3VyY2VHZXQoT1RfVVJJX1BBVEhfQUNUSVZFX0dFVCwgJkFjdGl2ZURhdGFzZXRCYXNlOjpIYW5kbGVHZXQsIHRoaXMpCit7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtUmVzb3VyY2VHZXQpOworfQorCitvdEVycm9yIEFjdGl2ZURhdGFzZXRCYXNlOjpSZXN0b3JlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRGF0YXNldE1hbmFnZXI6OlJlc3RvcmUoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IERhdGFzZXRNYW5hZ2VyOjpBcHBseUNvbmZpZ3VyYXRpb24oKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEFjdGl2ZURhdGFzZXRCYXNlOjpDbGVhcih2b2lkKQoreworICAgIERhdGFzZXRNYW5hZ2VyOjpDbGVhcigpOworfQorCit2b2lkIEFjdGl2ZURhdGFzZXRCYXNlOjpIYW5kbGVEZXRhY2godm9pZCkKK3sKKyAgICBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlRGV0YWNoKCk7CisgICAgRGF0YXNldE1hbmFnZXI6OkFwcGx5Q29uZmlndXJhdGlvbigpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgQWN0aXZlRGF0YXNldEJhc2U6OlNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRGF0YXNldE1hbmFnZXI6OlNldChhRGF0YXNldCkpOworICAgIERhdGFzZXRNYW5hZ2VyOjpBcHBseUNvbmZpZ3VyYXRpb24oKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKwordm9pZCBBY3RpdmVEYXRhc2V0QmFzZTo6U2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBEYXRhc2V0TWFuYWdlcjo6U2V0KGFEYXRhc2V0KTsKKyAgICBEYXRhc2V0TWFuYWdlcjo6QXBwbHlDb25maWd1cmF0aW9uKCk7CisKKyAgICBpZiAobmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSW5jcmVtZW50VmVyc2lvbigpOworICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkluY3JlbWVudFN0YWJsZVZlcnNpb24oKTsKKyAgICB9Cit9CisKK290RXJyb3IgQWN0aXZlRGF0YXNldEJhc2U6OlNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBEYXRhc2V0TWFuYWdlcjo6U2V0KGFUaW1lc3RhbXAsIGFNZXNzYWdlLCBhT2Zmc2V0LCBhTGVuZ3RoKSk7CisgICAgRGF0YXNldE1hbmFnZXI6OkFwcGx5Q29uZmlndXJhdGlvbigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBY3RpdmVEYXRhc2V0QmFzZTo6SGFuZGxlR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEFjdGl2ZURhdGFzZXRCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlR2V0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIEFjdGl2ZURhdGFzZXRCYXNlOjpIYW5kbGVHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIERhdGFzZXRNYW5hZ2VyOjpHZXQoYUhlYWRlciwgYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7Cit9CisKK3ZvaWQgQWN0aXZlRGF0YXNldEJhc2U6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0QWN0aXZlRGF0YXNldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKworc3RhdGljIFBlbmRpbmdEYXRhc2V0QmFzZSAmR2V0UGVuZGluZ0RhdGFzZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBQZW5kaW5nRGF0YXNldEJhc2UgJnBlbmRpbmdEYXRhc2V0ID0gKnN0YXRpY19jYXN0PFBlbmRpbmdEYXRhc2V0QmFzZSAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBQZW5kaW5nRGF0YXNldEJhc2UgJnBlbmRpbmdEYXRhc2V0ID0gb3RHZXRUaHJlYWROZXRpZigpLkdldFBlbmRpbmdEYXRhc2V0KCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBwZW5kaW5nRGF0YXNldDsKK30KKworUGVuZGluZ0RhdGFzZXRCYXNlOjpQZW5kaW5nRGF0YXNldEJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgRGF0YXNldE1hbmFnZXIoYVRocmVhZE5ldGlmLCBUbHY6OmtQZW5kaW5nVGltZXN0YW1wLCBPVF9VUklfUEFUSF9QRU5ESU5HX1NFVCwgT1RfVVJJX1BBVEhfUEVORElOR19HRVQsCisgICAgICAgICAgICAgICAgICAgJlBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlVGltZXIpLAorICAgIG1EZWxheVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZQZW5kaW5nRGF0YXNldEJhc2U6OkhhbmRsZURlbGF5VGltZXIsIHRoaXMpLAorICAgIG1SZXNvdXJjZUdldChPVF9VUklfUEFUSF9QRU5ESU5HX0dFVCwgJlBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlR2V0LCB0aGlzKQoreworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVJlc291cmNlR2V0KTsKK30KKworb3RFcnJvciBQZW5kaW5nRGF0YXNldEJhc2U6OlJlc3RvcmUodm9pZCkKK3sKKyAgICByZXR1cm4gRGF0YXNldE1hbmFnZXI6OlJlc3RvcmUoKTsKK30KKwordm9pZCBQZW5kaW5nRGF0YXNldEJhc2U6OkNsZWFyKHZvaWQpCit7CisgICAgRGF0YXNldE1hbmFnZXI6OkNsZWFyKCk7CisgICAgbURlbGF5VGltZXIuU3RvcCgpOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6Q2xlYXJOZXR3b3JrKHZvaWQpCit7CisgICAgbU5ldHdvcmsuQ2xlYXIoKTsKKyAgICBtRGVsYXlUaW1lci5TdG9wKCk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXRCYXNlOjpIYW5kbGVEZXRhY2godm9pZCkKK3sKKyAgICBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlRGV0YWNoKCk7CisgICAgU3RhcnREZWxheVRpbWVyKCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBQZW5kaW5nRGF0YXNldEJhc2U6OlNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRGF0YXNldE1hbmFnZXI6OlNldChhRGF0YXNldCkpOworICAgIFN0YXJ0RGVsYXlUaW1lcigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURAorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6U2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KQoreworICAgIERhdGFzZXRNYW5hZ2VyOjpTZXQoYURhdGFzZXQpOworICAgIFN0YXJ0RGVsYXlUaW1lcigpOworfQorCitvdEVycm9yIFBlbmRpbmdEYXRhc2V0QmFzZTo6U2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBEYXRhc2V0TWFuYWdlcjo6U2V0KGFUaW1lc3RhbXAsIGFNZXNzYWdlLCBhT2Zmc2V0LCBhTGVuZ3RoKSk7CisgICAgU3RhcnREZWxheVRpbWVyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6U3RhcnREZWxheVRpbWVyKHZvaWQpCit7CisgICAgRGVsYXlUaW1lclRsdiAqZGVsYXlUaW1lcjsKKworICAgIG1EZWxheVRpbWVyLlN0b3AoKTsKKworICAgIGlmICgoZGVsYXlUaW1lciA9IHN0YXRpY19jYXN0PERlbGF5VGltZXJUbHYgKj4obU5ldHdvcmsuR2V0KFRsdjo6a0RlbGF5VGltZXIpKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1EZWxheVRpbWVyLlN0YXJ0QXQobU5ldHdvcmsuR2V0VXBkYXRlVGltZSgpLCBkZWxheVRpbWVyLT5HZXREZWxheVRpbWVyKCkpOworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJkZWxheSB0aW1lciBzdGFydGVkIik7CisgICAgfQorfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlRGVsYXlUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldFBlbmRpbmdEYXRhc2V0T3duZXIoYVRpbWVyKS5IYW5kbGVEZWxheVRpbWVyKCk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXRCYXNlOjpIYW5kbGVEZWxheVRpbWVyKHZvaWQpCit7CisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicGVuZGluZyBkZWxheSB0aW1lciBleHBpcmVkIik7CisKKyAgICBHZXROZXRpZigpLkdldEFjdGl2ZURhdGFzZXQoKS5TZXQobU5ldHdvcmspOworCisgICAgQ2xlYXIoKTsKK30KKwordm9pZCBQZW5kaW5nRGF0YXNldEJhc2U6OkhhbmRsZUdldCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UGVuZGluZ0RhdGFzZXRCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlR2V0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlR2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBEYXRhc2V0TWFuYWdlcjo6R2V0KGFIZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0QmFzZTo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRQZW5kaW5nRGF0YXNldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuaHBwIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmExNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlci5ocHAKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBNZXNoQ29QIERhdGFzZXRzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX0hQUF8KKyNkZWZpbmUgTUVTSENPUF9EQVRBU0VUX01BTkFHRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2RhdGFzZXQuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZGF0YXNldF9sb2NhbC5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgRGF0YXNldE1hbmFnZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBUaW1lc3RhbXAuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFRpbWVzdGFtcC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IFRpbWVzdGFtcCAqR2V0VGltZXN0YW1wKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29tcGFyZXMgQHAgYVRpbWVzdGFtcCB0byB0aGUgZGF0YXNldCdzIHRpbWVzdGFtcCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21wYXJlICBBIHJlZmVyZW5jZSB0byB0aGUgdGltZXN0YW1wIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIC0xICBpZiBAcCBhQ29tcGFyZSBpcyBvbGRlciB0aGFuIHRoaXMgZGF0YXNldC4KKyAgICAgKiBAcmV0dmFsICAwICBpZiBAcCBhQ29tcGFyZSBpcyBlcXVhbCB0byB0aGlzIGRhdGFzZXQuCisgICAgICogQHJldHZhbCAgMSAgaWYgQHAgYUNvbXBhcmUgaXMgbmV3ZXIgdGhhbiB0aGlzIGRhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29tcGFyZShjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXApIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyB0aGUgTUxFIERhdGFzZXQgVExWIGJ1dCBleGNsdWRpbmcgTWVzaENvUCBTdWIgVGltZXN0YW1wIFRMVi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZCBNTEUgRGF0YXNldCBUTFYgd2l0aG91dCBNZXNoQ29QIFN1YiBUaW1lc3RhbXAgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidWZmZXJzIHRvIGFwcGVuZCB0aGUgbWVzc2FnZSB3aXRoIE1MRSBEYXRhc2V0IFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTWxlRGF0YXNldFRsdihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUTFYgb3IgTlVMTCBpZiBub25lIGlzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgVGx2ICpHZXRUbHYoVGx2OjpUeXBlIGFUeXBlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIEEgcmVmZXJlbmNlIHRvIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IHN0b3JlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICovCisgICAgRGF0YXNldExvY2FsICZHZXRMb2NhbCh2b2lkKSB7IHJldHVybiBtTG9jYWw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgZm9yIHRoZSBhdHRhY2hlZCBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKiBXaGVuIG5vdCBhdHRhY2hlZCB0byBhIHBhcnRpdGlvbiwgdGhlIHJldHVybmVkIGRhdGFzZXQgaXMgdGhlIG9uZSBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgQSByZWZlcmVuY2UgdG8gdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgZm9yIHRoZSBhdHRhY2hlZCBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBEYXRhc2V0ICZHZXROZXR3b3JrKHZvaWQpIHsgcmV0dXJuIG1OZXR3b3JrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBsaWVzIHRoZSBBY3RpdmUgb3IgUGVuZGluZyBEYXRhc2V0IHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgYXBwbGllZCBjb25maWd1cmF0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBseUNvbmZpZ3VyYXRpb24odm9pZCk7CisKK3Byb3RlY3RlZDoKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgICAgICAgICAgSWRlbnRpZmllcyBBY3RpdmUgb3IgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFVcmlTZXQgICAgICAgIFRoZSBVUkktUEFUSCBmb3Igc2V0dGluZyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKiBAcGFyYW1baW5dICBhVXJpR2V0ICAgICAgICBUaGUgVVJJLVBBVEggZm9yIGdldHRpbmcgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVySGFuZGxlciAgVGhlIHJlZ2lzdHJhdGlvbiB0aW1lciBoYW5kbGVyLgorICAgICAqCisgICAgICovCisgICAgRGF0YXNldE1hbmFnZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZiwgY29uc3QgVGx2OjpUeXBlIGFUeXBlLCBjb25zdCBjaGFyICphVXJpU2V0LCBjb25zdCBjaGFyICphVXJpR2V0LAorICAgICAgICAgICAgICAgICAgIFRpbWVyOjpIYW5kbGVyIGFUaW1lckhhbmRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIGRhdGFzZXQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YXNldCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IHdoZW4gZGV0YWNoaW5nIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICoKKyAgICAgKiBPbiBkZXRhY2gsIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IGlzIHJlc3RvcmVkIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlRGV0YWNoKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFzZXQgIFRoZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gdXBkYXRlcyB0aGUgbm9uLXZvbGF0aWxlIHZlcnNpb24gaWYgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgaXMgbmV3ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXN0YW1wICBUaGUgdGltZXN0YW1wIGZvciB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICBUaGUgbWVzc2FnZSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgICAgVGhlIG9mZnNldCB3aGVyZSB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBiZWdpbnMuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGEgTUdNVF9HRVQgcmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhlYWRlciAgICAgICBUaGUgQ29BUCBoZWFkZXIuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgQ29BUCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKiBAcGFybWFbaW5dICBhTWVzc2FnZUluZm8gIFRoZSBtZXNzYWdlIGluZm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdldChjb25zdCBDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29tcGFyZXMgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgd2l0aCB0aGF0IHN0b3JlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogSWYgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgaXMgbmV3ZXIsIHRoZSBub24tdm9sYXRpbGUgc3RvcmFnZSBpcyB1cGRhdGVkLgorICAgICAqIElmIHRoZSBwYXJ0aXRpb24ncyBPcGVyYXRpb25hbCBEYXRhc2V0IGlzIG9sZGVyLCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXMgc3RhcnRlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlTmV0d29ya1VwZGF0ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyBhIG5ldHdvcmsgZGF0YSByZWdpc3RyYXRpb24gbWVzc2FnZSB3aXRoIHRoZSBMZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgRGF0YXNldExvY2FsIG1Mb2NhbDsKKyAgICBEYXRhc2V0IG1OZXR3b3JrOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBSZWdpc3Rlcih2b2lkKTsKKyAgICB2b2lkIFNlbmRHZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCkgY29uc3Q7CisKKyAgICBUaW1lciBtVGltZXI7CisKKyAgICBjb25zdCBjaGFyICptVXJpU2V0OworICAgIGNvbnN0IGNoYXIgKm1VcmlHZXQ7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgTUdNVF9TRVQgcmVxdWVzdCB0byB0aGUgTGVhZGVyLgorICAgICAqCisgICAgICogQHBhcm1hW2luXSAgYURhdGFzZXQgIFRoZSBPcGVyYXRpb25hbCBEYXRzZXQuCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgICAgIEFueSBhZGRpdGlvbmFsIHJhdyBUTFZzIHRvIGluY2x1ZGUuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgIE51bWJlciBvZiBieXRlcyBpbiBAcCBhVGx2cy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSBvbiBzdWNjZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kU2V0UmVxdWVzdChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQsIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBNR01UX0dFVCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRsdlR5cGVzICBUaGUgbGlzdCBvZiBUTFYgdHlwZXMgdG8gcmVxdWVzdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIE51bWJlciBvZiBieXRlcyBpbiBAcCBhVGx2VHlwZXMuCisgICAgICogQHBhcm1hW2luXSAgYUFkZHJlc3MgICBUaGUgSVB2NiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgTUdNVF9HRVQgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSBvbiBzdWNjZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kR2V0UmVxdWVzdChjb25zdCB1aW50OF90ICphVGx2VHlwZXMsIHVpbnQ4X3QgYUxlbmd0aCwgY29uc3Qgb3RJcDZBZGRyZXNzICphQWRkcmVzcyk7CisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBPcGVyYXRpb25hbCBEYXRhc2V0IGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcGFybWFbaW5dICBhRGF0YXNldCAgVGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBvdE9wZXJhdGlvbmFsRGF0YXNldCAmYURhdGFzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgTUdNVF9TRVQgcmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhlYWRlciAgICAgICBUaGUgQ29BUCBoZWFkZXIuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgQ29BUCBtZXNzYWdlIGJ1ZmZlci4KKyAgICAgKiBAcGFybWFbaW5dICBhTWVzc2FnZUluZm8gIFRoZSBtZXNzYWdlIGluZm8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFRoZSBNR01UX1NFVCByZXF1ZXN0IG1lc3NhZ2Ugd2FzIGhhbmRsZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgVGhlIE1HTVRfU0VUIHJlcXVlc3QgbWVzc2FnZSB3YXMgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBTZW5kU2V0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKTsKKyNlbmRpZgorfTsKKworY2xhc3MgQWN0aXZlRGF0YXNldEJhc2U6IHB1YmxpYyBEYXRhc2V0TWFuYWdlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBUaGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgQWN0aXZlRGF0YXNldEJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHNvIGNvbmZpZ3VyZSB0aGUgVGhyZWFkIGludGVyZmFjZSB1c2luZyB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIGRhdGFzZXQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YXNldCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCB3aGVuIGRldGFjaGluZyBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAqCisgICAgICogT24gZGV0YWNoLCB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBpcyByZXN0b3JlZCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkgYW5kIHJlY29uZmlndXJlcyB0aGUgVGhyZWFkCisgICAgICogaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVEZXRhY2godm9pZCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEBwYXJtYVtpbl0gIGFEYXRhc2V0ICBUaGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCk7CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gcmVjb25maWd1cmVzIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFzZXQgIFRoZSBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQoY29uc3QgRGF0YXNldCAmYURhdGFzZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gcmVjb25maWd1cmVzIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gdXBkYXRlcyB0aGUgbm9uLXZvbGF0aWxlIHZlcnNpb24gaWYgdGhlIHBhcnRpdGlvbidzIE9wZXJhdGlvbmFsIERhdGFzZXQgaXMgbmV3ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXN0YW1wICBUaGUgdGltZXN0YW1wIGZvciB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICBUaGUgbWVzc2FnZSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgICAgVGhlIG9mZnNldCB3aGVyZSB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBiZWdpbnMuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IFRpbWVzdGFtcCAmYVRpbWVzdGFtcCwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQ4X3QgYUxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCkgeyBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlVGltZXIoKTsgfQorCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlR2V0OworfTsKKworY2xhc3MgUGVuZGluZ0RhdGFzZXRCYXNlOiBwdWJsaWMgRGF0YXNldE1hbmFnZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIFRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBQZW5kaW5nRGF0YXNldEJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmUgdGhlIGRhdGFzZXQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgZGF0YXNldCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgYWxzbyBzdG9wcyB0aGUgRGVsYXkgVGltZXIgaWYgaXQgd2FzIGFjdGl2ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIG5ldHdvcmsgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0LgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgYWxzbyBzdG9wcyB0aGUgRGVsYXkgVGltZXIgaWYgaXQgd2FzIGFjdGl2ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJOZXR3b3JrKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCB3aGVuIGRldGFjaGluZyBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAqCisgICAgICogT24gZGV0YWNoLCB0aGUgT3BlcmF0aW9uYWwgRGF0YXNldCBpcyByZXN0b3JlZCBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHN0b3BzIHRoZSBEZWxheSBUaW1lciBpZiBpdCB3YXMgYWN0aXZlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVEZXRhY2godm9pZCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gc3RhcnRzIHRoZSBEZWxheSBUaW1lci4KKyAgICAgKgorICAgICAqIEBwYXJtYVtpbl0gIGFEYXRhc2V0ICBUaGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0KGNvbnN0IG90T3BlcmF0aW9uYWxEYXRhc2V0ICZhRGF0YXNldCk7CisjZW5kaWYKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGFsc28gc3RhcnRzIHRoZSBEZWxheSBUaW1lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEYXRhc2V0ICBUaGUgT3BlcmF0aW9uYWwgRGF0YXNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0KGNvbnN0IERhdGFzZXQgJmFEYXRhc2V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBhbHNvIHVwZGF0ZXMgdGhlIG5vbi12b2xhdGlsZSB2ZXJzaW9uIGlmIHRoZSBwYXJ0aXRpb24ncyBPcGVyYXRpb25hbCBEYXRhc2V0IGlzIG5ld2VyLgorICAgICAqCisgICAgICogVGhpcyBtZXRob2QgYWxzbyBzdGFydHMgdGhlIERlbGF5IFRpbWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVzdGFtcCAgVGhlIHRpbWVzdGFtcCBmb3IgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgVGhlIG1lc3NhZ2UgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFPZmZzZXQgICAgIFRoZSBvZmZzZXQgd2hlcmUgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQgYmVnaW5zLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIE9wZXJhdGlvbmFsIERhdGFzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50OF90IGFMZW5ndGgpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGVsYXlUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZURlbGF5VGltZXIodm9pZCk7CisgICAgdm9pZCBTdGFydERlbGF5VGltZXIodm9pZCk7CisgICAgdm9pZCBIYW5kbGVOZXR3b3JrVXBkYXRlKHZvaWQpOworCisgICAgVGltZXIgbURlbGF5VGltZXI7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVHZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCkgeyBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlVGltZXIoKTsgfQorCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlR2V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjaWYgT1BFTlRIUkVBRF9NVEQKKyNpbmNsdWRlICJkYXRhc2V0X21hbmFnZXJfbXRkLmhwcCIKKyNlbGlmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSAiZGF0YXNldF9tYW5hZ2VyX2Z0ZC5ocHAiCisjZWxzZQorI2Vycm9yIE11c3QgZGVmaW5lIE9QRU5USFJFQURfTVREIG9yIE9QRU5USFJFQURfRlRECisjZW5kaWYKKworI2VuZGlmICAvLyBNRVNIQ09QX0RBVEFTRVRfTUFOQUdFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9mdGQuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRjYTBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNZXNoQ29QIERhdGFzZXRzIG1hbmFnZXIgdG8gcHJvY2VzcyBjb21tYW5kcy4KKyAqCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKyNkZWZpbmUgV1BQX05BTUUgImRhdGFzZXRfbWFuYWdlcl9mdGQudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZGF0YXNldC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9kYXRhc2V0X21hbmFnZXIuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2xlYWRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKK0FjdGl2ZURhdGFzZXQ6OkFjdGl2ZURhdGFzZXQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgQWN0aXZlRGF0YXNldEJhc2UoYVRocmVhZE5ldGlmKSwKKyAgICBtUmVzb3VyY2VTZXQoT1RfVVJJX1BBVEhfQUNUSVZFX1NFVCwgJkFjdGl2ZURhdGFzZXQ6OkhhbmRsZVNldCwgdGhpcykKK3sKK30KKworb3RFcnJvciBBY3RpdmVEYXRhc2V0OjpHZW5lcmF0ZUxvY2FsKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBEYXRhc2V0IGRhdGFzZXQobUxvY2FsLkdldFR5cGUoKSk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0TWxlKCkuSXNBdHRhY2hlZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgbUxvY2FsLkdldChkYXRhc2V0KTsKKworICAgIC8vIEFjdGl2ZSBUaW1lc3RhbXAKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprQWN0aXZlVGltZXN0YW1wKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcFRsdjsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICAgICAgYWN0aXZlVGltZXN0YW1wVGx2LlNldFNlY29uZHMoMCk7CisgICAgICAgIGFjdGl2ZVRpbWVzdGFtcFRsdi5TZXRUaWNrcygwKTsKKyAgICAgICAgZGF0YXNldC5TZXQoYWN0aXZlVGltZXN0YW1wVGx2KTsKKyAgICB9CisKKyAgICAvLyBDaGFubmVsCisgICAgaWYgKGRhdGFzZXQuR2V0KFRsdjo6a0NoYW5uZWwpID09IE5VTEwpCisgICAgeworICAgICAgICBDaGFubmVsVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldENoYW5uZWxQYWdlKDApOworICAgICAgICB0bHYuU2V0Q2hhbm5lbChuZXRpZi5HZXRNYWMoKS5HZXRDaGFubmVsKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIGNoYW5uZWxNYXNrCisgICAgaWYgKGRhdGFzZXQuR2V0KFRsdjo6a0NoYW5uZWxNYXNrKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgQ2hhbm5lbE1hc2swVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE1hc2soT1RfUkFESU9fU1VQUE9SVEVEX0NIQU5ORUxTKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICAvLyBFeHRlbmRlZCBQQU4gSUQKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprRXh0ZW5kZWRQYW5JZCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4dGVuZGVkUGFuSWRUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0RXh0ZW5kZWRQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRFeHRlbmRlZFBhbklkKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIE1lc2gtTG9jYWwgUHJlZml4CisgICAgaWYgKGRhdGFzZXQuR2V0KFRsdjo6a01lc2hMb2NhbFByZWZpeCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIE1lc2hMb2NhbFByZWZpeFRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRNZXNoTG9jYWxQcmVmaXgobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIE1hc3RlciBLZXkKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprTmV0d29ya01hc3RlcktleSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIE5ldHdvcmtNYXN0ZXJLZXlUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0TmV0d29ya01hc3RlcktleShuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0TWFzdGVyS2V5KCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIE5ldHdvcmsgTmFtZQorICAgIGlmIChkYXRhc2V0LkdldChUbHY6OmtOZXR3b3JrTmFtZSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIE5ldHdvcmtOYW1lVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldE5ldHdvcmtOYW1lKG5ldGlmLkdldE1hYygpLkdldE5ldHdvcmtOYW1lKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIFBhbiBJRAorICAgIGlmIChkYXRhc2V0LkdldChUbHY6OmtQYW5JZCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFBhbklkVGx2IHRsdjsKKyAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgdGx2LlNldFBhbklkKG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpOworICAgICAgICBkYXRhc2V0LlNldCh0bHYpOworICAgIH0KKworICAgIC8vIFBTS2MKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprUFNLYykgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFBTS2NUbHYgdGx2OworICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICB0bHYuU2V0UFNLYyhuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0UFNLYygpKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICAvLyBTZWN1cml0eSBQb2xpY3kKKyAgICBpZiAoZGF0YXNldC5HZXQoVGx2OjprU2VjdXJpdHlQb2xpY3kpID09IE5VTEwpCisgICAgeworICAgICAgICBTZWN1cml0eVBvbGljeVRsdiB0bHY7CisgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgIHRsdi5TZXRSb3RhdGlvblRpbWUoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRLZXlSb3RhdGlvbigpKSk7CisgICAgICAgIHRsdi5TZXRGbGFncyhuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0U2VjdXJpdHlQb2xpY3lGbGFncygpKTsKKyAgICAgICAgZGF0YXNldC5TZXQodGx2KTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbUxvY2FsLlNldChkYXRhc2V0KSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJHZW5lcmF0ZWQgbG9jYWwgZGF0YXNldCIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBY3RpdmVEYXRhc2V0OjpTdGFydExlYWRlcih2b2lkKQoreworICAgIEdlbmVyYXRlTG9jYWwoKTsKKworICAgIG1Mb2NhbC5HZXQobU5ldHdvcmspOworICAgIEdldE5ldGlmKCkuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1SZXNvdXJjZVNldCk7Cit9CisKK3ZvaWQgQWN0aXZlRGF0YXNldDo6U3RvcExlYWRlcih2b2lkKQoreworICAgIEdldE5ldGlmKCkuR2V0Q29hcCgpLlJlbW92ZVJlc291cmNlKG1SZXNvdXJjZVNldCk7Cit9CisKK3ZvaWQgQWN0aXZlRGF0YXNldDo6SGFuZGxlU2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8QWN0aXZlRGF0YXNldCAqPihhQ29udGV4dCktPkhhbmRsZVNldCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBBY3RpdmVEYXRhc2V0OjpIYW5kbGVTZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFN1Y2Nlc3NPckV4aXQoRGF0YXNldE1hbmFnZXI6OlNldChhSGVhZGVyLCBhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKSk7CisgICAgQXBwbHlDb25maWd1cmF0aW9uKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitQZW5kaW5nRGF0YXNldDo6UGVuZGluZ0RhdGFzZXQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik6CisgICAgUGVuZGluZ0RhdGFzZXRCYXNlKGFUaHJlYWROZXRpZiksCisgICAgbVJlc291cmNlU2V0KE9UX1VSSV9QQVRIX1BFTkRJTkdfU0VULCAmUGVuZGluZ0RhdGFzZXQ6OkhhbmRsZVNldCwgdGhpcykKK3sKK30KKwordm9pZCBQZW5kaW5nRGF0YXNldDo6U3RhcnRMZWFkZXIodm9pZCkKK3sKKyAgICBtTG9jYWwuR2V0KG1OZXR3b3JrKTsKKyAgICBTdGFydERlbGF5VGltZXIoKTsKKworICAgIEdldE5ldGlmKCkuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1SZXNvdXJjZVNldCk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXQ6OlN0b3BMZWFkZXIodm9pZCkKK3sKKyAgICBHZXROZXRpZigpLkdldENvYXAoKS5SZW1vdmVSZXNvdXJjZShtUmVzb3VyY2VTZXQpOworfQorCit2b2lkIFBlbmRpbmdEYXRhc2V0OjpIYW5kbGVTZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UGVuZGluZ0RhdGFzZXQgKj4oYUNvbnRleHQpLT5IYW5kbGVTZXQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXQ6OkhhbmRsZVNldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgU3VjY2Vzc09yRXhpdChEYXRhc2V0TWFuYWdlcjo6U2V0KGFIZWFkZXIsIGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKyAgICBTdGFydERlbGF5VGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUGVuZGluZ0RhdGFzZXQ6OkFwcGx5QWN0aXZlRGF0YXNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgRGVsYXlUaW1lclRsdiBkZWxheVRpbWVyOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE1sZSgpLklzQXR0YWNoZWQoKSk7CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgVGx2IHRsdjsKKyAgICAgICAgICAgIHVpbnQ4X3QgdmFsdWVbRGF0YXNldDo6a01heFZhbHVlU2l6ZV07CisgICAgICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EIGRhdGE7CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihUbHYpLCAmZGF0YS50bHYpOworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCArIHNpemVvZihUbHYpLCBkYXRhLnRsdi5HZXRMZW5ndGgoKSwgZGF0YS52YWx1ZSk7CisgICAgICAgIG1OZXR3b3JrLlNldChkYXRhLnRsdik7CisgICAgICAgIG9mZnNldCArPSBzaXplb2YoVGx2KSArIGRhdGEudGx2LkdldExlbmd0aCgpOworICAgIH0KKworICAgIC8vIGFkZCBkZWxheSB0aW1lciB0bHYKKyAgICBkZWxheVRpbWVyLkluaXQoKTsKKyAgICBkZWxheVRpbWVyLlNldERlbGF5VGltZXIobmV0aWYuR2V0TGVhZGVyKCkuR2V0RGVsYXlUaW1lck1pbmltYWwoKSk7CisgICAgbU5ldHdvcmsuU2V0KGRlbGF5VGltZXIpOworCisgICAgLy8gYWRkIHBlbmRpbmcgdGltZXN0YW1wIHRsdgorICAgIG1OZXR3b3JrLlNldFRpbWVzdGFtcChhVGltZXN0YW1wKTsKKyAgICBEYXRhc2V0TWFuYWdlcjo6SGFuZGxlTmV0d29ya1VwZGF0ZSgpOworCisgICAgLy8gcmVzZXQgZGVsYXkgdGltZXIKKyAgICBTdGFydERlbGF5VGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9mdGQuaHBwIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODAyNjIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9kYXRhc2V0X21hbmFnZXJfZnRkLmhwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgTWVzaENvUCBEYXRhc2V0cy4KKyAqCisgKi8KKworI2lmbmRlZiBNRVNIQ09QX0RBVEFTRVRfTUFOQUdFUl9GVERfSFBQXworI2RlZmluZSBNRVNIQ09QX0RBVEFTRVRfTUFOQUdFUl9GVERfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgQWN0aXZlRGF0YXNldDogcHVibGljIEFjdGl2ZURhdGFzZXRCYXNlCit7CitwdWJsaWM6CisgICAgQWN0aXZlRGF0YXNldChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIG90RXJyb3IgR2VuZXJhdGVMb2NhbCh2b2lkKTsKKworICAgIHZvaWQgU3RhcnRMZWFkZXIodm9pZCk7CisKKyAgICB2b2lkIFN0b3BMZWFkZXIodm9pZCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlU2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVTZXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIGJvb2wgSXNUbHZJbml0aWFsaXplZChUbHY6OlR5cGUgYVR5cGUpOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlU2V0OworfTsKKworY2xhc3MgUGVuZGluZ0RhdGFzZXQ6IHB1YmxpYyBQZW5kaW5nRGF0YXNldEJhc2UKK3sKK3B1YmxpYzoKKyAgICBQZW5kaW5nRGF0YXNldChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIHZvaWQgU3RhcnRMZWFkZXIodm9pZCk7CisKKyAgICB2b2lkIFN0b3BMZWFkZXIodm9pZCk7CisKKyAgICB2b2lkIEFwcGx5QWN0aXZlRGF0YXNldChjb25zdCBUaW1lc3RhbXAgJmFUaW1lc3RhbXAsIE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVTZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVNldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVJlc291cmNlU2V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZGF0YXNldF9tYW5hZ2VyX210ZC5ocHAgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9tdGQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMGUyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2RhdGFzZXRfbWFuYWdlcl9tdGQuaHBwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBNZXNoQ29QIERhdGFzZXRzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX01URF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX01URF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTWVzaENvUCB7CisKK2NsYXNzIEFjdGl2ZURhdGFzZXQ6IHB1YmxpYyBBY3RpdmVEYXRhc2V0QmFzZQoreworcHVibGljOgorICAgIEFjdGl2ZURhdGFzZXQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOiBBY3RpdmVEYXRhc2V0QmFzZShhVGhyZWFkTmV0aWYpIHsgfQorCisgICAgb3RFcnJvciBHZW5lcmF0ZUxvY2FsKHZvaWQpIHsgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsgfQorfTsKKworY2xhc3MgUGVuZGluZ0RhdGFzZXQ6IHB1YmxpYyBQZW5kaW5nRGF0YXNldEJhc2UKK3sKK3B1YmxpYzoKKyAgICBQZW5kaW5nRGF0YXNldChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKSA6IFBlbmRpbmdEYXRhc2V0QmFzZShhVGhyZWFkTmV0aWYpIHsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU0hDT1BfREFUQVNFVF9NQU5BR0VSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZHRscy5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOWRlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuY3BwCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgaG9va3MgZm9yIG1iZWRUTFMuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiZHRscy50bWgiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImR0bHMuaHBwIgorCisjaW5jbHVkZSA8bWJlZHRscy9kZWJ1Zy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgImNyeXB0by9zaGEyNTYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitEdGxzOjpEdGxzKFRocmVhZE5ldGlmICZhTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhTmV0aWYpLAorICAgIG1Qc2tMZW5ndGgoMCksCisgICAgbVN0YXJ0ZWQoZmFsc2UpLAorICAgIG1UaW1lcihhTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmRHRsczo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1UaW1lckludGVybWVkaWF0ZSgwKSwKKyAgICBtVGltZXJTZXQoZmFsc2UpLAorICAgIG1SZWNlaXZlTWVzc2FnZShOVUxMKSwKKyAgICBtUmVjZWl2ZU9mZnNldCgwKSwKKyAgICBtUmVjZWl2ZUxlbmd0aCgwKSwKKyAgICBtQ29ubmVjdGVkSGFuZGxlcihOVUxMKSwKKyAgICBtUmVjZWl2ZUhhbmRsZXIoTlVMTCksCisgICAgbVNlbmRIYW5kbGVyKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1DbGllbnQoZmFsc2UpLAorICAgIG1NZXNzYWdlU3ViVHlwZSgwKQoreworICAgIG1lbXNldChtUHNrLCAwLCBzaXplb2YobVBzaykpOworICAgIG1lbXNldCgmbUVudHJvcHksIDAsIHNpemVvZihtRW50cm9weSkpOworICAgIG1lbXNldCgmbUN0ckRyYmcsIDAsIHNpemVvZihtQ3RyRHJiZykpOworICAgIG1lbXNldCgmbVNzbCwgMCwgc2l6ZW9mKG1Tc2wpKTsKKyAgICBtZW1zZXQoJm1Db25mLCAwLCBzaXplb2YobUNvbmYpKTsKKyAgICBtZW1zZXQoJm1Db29raWVDdHgsIDAsIHNpemVvZihtQ29va2llQ3R4KSk7CisgICAgbVByb3Zpc2lvbmluZ1VybC5Jbml0KCk7Cit9CisKK290RXJyb3IgRHRsczo6U3RhcnQoYm9vbCBhQ2xpZW50LCBDb25uZWN0ZWRIYW5kbGVyIGFDb25uZWN0ZWRIYW5kbGVyLCBSZWNlaXZlSGFuZGxlciBhUmVjZWl2ZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIFNlbmRIYW5kbGVyIGFTZW5kSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBjaXBoZXJzdWl0ZXNbMl0gPSB7MHhDMEZGLCAwfTsgLy8gRUMtSlBBS0UgY2lwaGVyIHN1aXRlCisgICAgb3RFeHRBZGRyZXNzIGV1aTY0OworICAgIGludCBydmFsOworCisgICAgbUNvbm5lY3RlZEhhbmRsZXIgPSBhQ29ubmVjdGVkSGFuZGxlcjsKKyAgICBtUmVjZWl2ZUhhbmRsZXIgPSBhUmVjZWl2ZUhhbmRsZXI7CisgICAgbVNlbmRIYW5kbGVyID0gYVNlbmRIYW5kbGVyOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisgICAgbUNsaWVudCA9IGFDbGllbnQ7CisgICAgbVJlY2VpdmVNZXNzYWdlID0gTlVMTDsKKyAgICBtTWVzc2FnZVN1YlR5cGUgPSAwOworCisgICAgbWJlZHRsc19zc2xfaW5pdCgmbVNzbCk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoJm1Db25mKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoJm1DdHJEcmJnKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCgmbUVudHJvcHkpOworCisgICAgLy8gbWJlZFRMUydzIGRlYnVnIGxldmVsIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBPcGVuVGhyZWFkJ3MKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMKTsKKyAgICBvdFBsYXRSYWRpb0dldEllZWVFdWk2NChHZXRJbnN0YW5jZSgpLCBldWk2NC5tOCk7CisgICAgcnZhbCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmbUN0ckRyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmbUVudHJvcHksIGV1aTY0Lm04LCBzaXplb2YoZXVpNjQpKTsKKyAgICBWZXJpZnlPckV4aXQocnZhbCA9PSAwKTsKKworICAgIHJ2YWwgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoJm1Db25mLCBtQ2xpZW50ID8gTUJFRFRMU19TU0xfSVNfQ0xJRU5UIDogTUJFRFRMU19TU0xfSVNfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNLCBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCk7CisgICAgVmVyaWZ5T3JFeGl0KHJ2YWwgPT0gMCk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JuZygmbUNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmbUN0ckRyYmcpOworICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oJm1Db25mLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyk7CisgICAgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbigmbUNvbmYsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlcygmbUNvbmYsIGNpcGhlcnN1aXRlcyk7CisgICAgbWJlZHRsc19zc2xfY29uZl9leHBvcnRfa2V5c19jYigmbUNvbmYsIEhhbmRsZU1iZWR0bHNFeHBvcnRLZXlzLCB0aGlzKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0KCZtQ29uZiwgODAwMCwgNjAwMDApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCZtQ29uZiwgSGFuZGxlTWJlZHRsc0RlYnVnLCB0aGlzKTsKKworICAgIGlmICghbUNsaWVudCkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0KCZtQ29va2llQ3R4KTsKKworICAgICAgICBydmFsID0gbWJlZHRsc19zc2xfY29va2llX3NldHVwKCZtQ29va2llQ3R4LCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJm1DdHJEcmJnKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJ2YWwgPT0gMCk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMoJm1Db25mLCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGUsIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVjaywgJm1Db29raWVDdHgpOworICAgIH0KKworICAgIHJ2YWwgPSBtYmVkdGxzX3NzbF9zZXR1cCgmbVNzbCwgJm1Db25mKTsKKyAgICBWZXJpZnlPckV4aXQocnZhbCA9PSAwKTsKKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oJm1Tc2wsIHRoaXMsICZEdGxzOjpIYW5kbGVNYmVkdGxzVHJhbnNtaXQsIEhhbmRsZU1iZWR0bHNSZWNlaXZlLCBOVUxMKTsKKyAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoJm1Tc2wsIHRoaXMsICZEdGxzOjpIYW5kbGVNYmVkdGxzU2V0VGltZXIsIEhhbmRsZU1iZWR0bHNHZXRUaW1lcik7CisKKyAgICBydmFsID0gbWJlZHRsc19zc2xfc2V0X2hzX2VjanBha2VfcGFzc3dvcmQoJm1Tc2wsIG1Qc2ssIG1Qc2tMZW5ndGgpOworICAgIFZlcmlmeU9yRXhpdChydmFsID09IDApOworCisgICAgbVN0YXJ0ZWQgPSB0cnVlOworICAgIFByb2Nlc3MoKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIkRUTFMgc3RhcnRlZCIpOworCitleGl0OgorICAgIHJldHVybiBNYXBFcnJvcihydmFsKTsKK30KKworb3RFcnJvciBEdGxzOjpTdG9wKHZvaWQpCit7CisgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCZtU3NsKTsKKyAgICBDbG9zZSgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIER0bHM6OkNsb3NlKHZvaWQpCit7CisgICAgVmVyaWZ5T3JFeGl0KG1TdGFydGVkKTsKKworICAgIG1TdGFydGVkID0gZmFsc2U7CisgICAgbWJlZHRsc19zc2xfZnJlZSgmbVNzbCk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoJm1Db25mKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoJm1DdHJEcmJnKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSgmbUVudHJvcHkpOworICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9mcmVlKCZtQ29va2llQ3R4KTsKKworICAgIGlmIChtQ29ubmVjdGVkSGFuZGxlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUNvbm5lY3RlZEhhbmRsZXIobUNvbnRleHQsIGZhbHNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitib29sIER0bHM6OklzU3RhcnRlZCh2b2lkKQoreworICAgIHJldHVybiBtU3RhcnRlZDsKK30KKworb3RFcnJvciBEdGxzOjpTZXRQc2soY29uc3QgdWludDhfdCAqYVBzaywgdWludDhfdCBhUHNrTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFQc2tMZW5ndGggPD0gc2l6ZW9mKG1Qc2spLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtZW1jcHkobVBzaywgYVBzaywgYVBza0xlbmd0aCk7CisgICAgbVBza0xlbmd0aCA9IGFQc2tMZW5ndGg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIER0bHM6OlNldENsaWVudElkKGNvbnN0IHVpbnQ4X3QgKmFDbGllbnRJZCwgdWludDhfdCBhTGVuZ3RoKQoreworICAgIGludCBydmFsID0gbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoJm1Tc2wsIGFDbGllbnRJZCwgYUxlbmd0aCk7CisgICAgcmV0dXJuIE1hcEVycm9yKHJ2YWwpOworfQorCitib29sIER0bHM6OklzQ29ubmVjdGVkKHZvaWQpCit7CisgICAgcmV0dXJuIG1Tc2wuc3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVI7Cit9CisKK290RXJyb3IgRHRsczo6U2VuZChNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IGJ1ZmZlcltrQXBwbGljYXRpb25EYXRhTWF4TGVuZ3RoXTsKKworICAgIFZlcmlmeU9yRXhpdChhTGVuZ3RoIDw9IGtBcHBsaWNhdGlvbkRhdGFNYXhMZW5ndGgsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBTdG9yZSBtZXNzYWdlIHNwZWNpZmljIHN1YiB0eXBlLgorICAgIG1NZXNzYWdlU3ViVHlwZSA9IGFNZXNzYWdlLkdldFN1YlR5cGUoKTsKKyAgICBhTWVzc2FnZS5SZWFkKDAsIGFMZW5ndGgsIGJ1ZmZlcik7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gTWFwRXJyb3IobWJlZHRsc19zc2xfd3JpdGUoJm1Tc2wsIGJ1ZmZlciwgYUxlbmd0aCkpKTsKKworICAgIGFNZXNzYWdlLkZyZWUoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRHRsczo6UmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCkKK3sKKyAgICBtUmVjZWl2ZU1lc3NhZ2UgPSAmYU1lc3NhZ2U7CisgICAgbVJlY2VpdmVPZmZzZXQgPSBhT2Zmc2V0OworICAgIG1SZWNlaXZlTGVuZ3RoID0gYUxlbmd0aDsKKworICAgIFByb2Nlc3MoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc1RyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNUcmFuc21pdChhQnVmLCBhTGVuZ3RoKTsKK30KKworaW50IER0bHM6OkhhbmRsZU1iZWR0bHNUcmFuc21pdChjb25zdCB1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIGludCBydmFsID0gMDsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIkR0bHM6OkhhbmRsZU1iZWR0bHNUcmFuc21pdCIpOworCisgICAgZXJyb3IgPSBtU2VuZEhhbmRsZXIobUNvbnRleHQsIGFCdWYsIHN0YXRpY19jYXN0PHVpbnQxNl90PihhTGVuZ3RoKSwgbU1lc3NhZ2VTdWJUeXBlKTsKKworICAgIC8vIFJlc3RvcmUgZGVmYXVsdCBzdWIgdHlwZS4KKyAgICBtTWVzc2FnZVN1YlR5cGUgPSAwOworCisgICAgc3dpdGNoIChlcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICBydmFsID0gc3RhdGljX2Nhc3Q8aW50PihhTGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgICAgIHJ2YWwgPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IER0bHM6OkhhbmRsZU1iZWR0bHNSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCB1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNSZWNlaXZlKGFCdWYsIGFMZW5ndGgpOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc1JlY2VpdmUodW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpCit7CisgICAgaW50IHJ2YWw7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJEdGxzOjpIYW5kbGVNYmVkdGxzUmVjZWl2ZSIpOworCisgICAgVmVyaWZ5T3JFeGl0KG1SZWNlaXZlTWVzc2FnZSAhPSBOVUxMICYmIG1SZWNlaXZlTGVuZ3RoICE9IDAsIHJ2YWwgPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEKTsKKworICAgIGlmIChhTGVuZ3RoID4gbVJlY2VpdmVMZW5ndGgpCisgICAgeworICAgICAgICBhTGVuZ3RoID0gbVJlY2VpdmVMZW5ndGg7CisgICAgfQorCisgICAgcnZhbCA9IChpbnQpbVJlY2VpdmVNZXNzYWdlLT5SZWFkKG1SZWNlaXZlT2Zmc2V0LCAodWludDE2X3QpYUxlbmd0aCwgYUJ1Zik7CisgICAgbVJlY2VpdmVPZmZzZXQgKz0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHJ2YWwpOworICAgIG1SZWNlaXZlTGVuZ3RoIC09IHN0YXRpY19jYXN0PHVpbnQxNl90PihydmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworaW50IER0bHM6OkhhbmRsZU1iZWR0bHNHZXRUaW1lcih2b2lkICphQ29udGV4dCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNHZXRUaW1lcigpOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc0dldFRpbWVyKHZvaWQpCit7CisgICAgaW50IHJ2YWw7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJEdGxzOjpIYW5kbGVNYmVkdGxzR2V0VGltZXIiKTsKKworICAgIGlmICghbVRpbWVyU2V0KQorICAgIHsKKyAgICAgICAgcnZhbCA9IC0xOworICAgIH0KKyAgICBlbHNlIGlmICghbVRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgcnZhbCA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KG1UaW1lckludGVybWVkaWF0ZSAtIFRpbWVyOjpHZXROb3coKSkgPD0gMCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBydmFsID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBEdGxzOjpIYW5kbGVNYmVkdGxzU2V0VGltZXIodm9pZCAqYUNvbnRleHQsIHVpbnQzMl90IGFJbnRlcm1lZGlhdGUsIHVpbnQzMl90IGFGaW5pc2gpCit7CisgICAgc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dCktPkhhbmRsZU1iZWR0bHNTZXRUaW1lcihhSW50ZXJtZWRpYXRlLCBhRmluaXNoKTsKK30KKwordm9pZCBEdGxzOjpIYW5kbGVNYmVkdGxzU2V0VGltZXIodWludDMyX3QgYUludGVybWVkaWF0ZSwgdWludDMyX3QgYUZpbmlzaCkKK3sKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJEdGxzOjpTZXRUaW1lciIpOworCisgICAgaWYgKGFGaW5pc2ggPT0gMCkKKyAgICB7CisgICAgICAgIG1UaW1lclNldCA9IGZhbHNlOworICAgICAgICBtVGltZXIuU3RvcCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGltZXJTZXQgPSB0cnVlOworICAgICAgICBtVGltZXIuU3RhcnQoYUZpbmlzaCk7CisgICAgICAgIG1UaW1lckludGVybWVkaWF0ZSA9IFRpbWVyOjpHZXROb3coKSArIGFJbnRlcm1lZGlhdGU7CisgICAgfQorfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc0V4cG9ydEtleXModm9pZCAqYUNvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFNYXN0ZXJTZWNyZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFLZXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYU1hY0xlbmd0aCwgc2l6ZV90IGFLZXlMZW5ndGgsIHNpemVfdCBhSXZMZW5ndGgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PER0bHMgKj4oYUNvbnRleHQpLT5IYW5kbGVNYmVkdGxzRXhwb3J0S2V5cyhhTWFzdGVyU2VjcmV0LCBhS2V5QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWFjTGVuZ3RoLCBhS2V5TGVuZ3RoLCBhSXZMZW5ndGgpOworfQorCitpbnQgRHRsczo6SGFuZGxlTWJlZHRsc0V4cG9ydEtleXMoY29uc3QgdW5zaWduZWQgY2hhciAqYU1hc3RlclNlY3JldCwgY29uc3QgdW5zaWduZWQgY2hhciAqYUtleUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhTWFjTGVuZ3RoLCBzaXplX3QgYUtleUxlbmd0aCwgc2l6ZV90IGFJdkxlbmd0aCkKK3sKKyAgICB1aW50OF90IGtla1tDcnlwdG86OlNoYTI1Njo6a0hhc2hTaXplXTsKKyAgICBDcnlwdG86OlNoYTI1NiBzaGEyNTY7CisKKyAgICBzaGEyNTYuU3RhcnQoKTsKKyAgICBzaGEyNTYuVXBkYXRlKGFLZXlCbG9jaywgMiAqIHN0YXRpY19jYXN0PHVpbnQxNl90PihhTWFjTGVuZ3RoICsgYUtleUxlbmd0aCArIGFJdkxlbmd0aCkpOworICAgIHNoYTI1Ni5GaW5pc2goa2VrKTsKKworICAgIEdldE5ldGlmKCkuR2V0S2V5TWFuYWdlcigpLlNldEtlayhrZWspOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiR2VuZXJhdGVkIEtFSyIpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNYXN0ZXJTZWNyZXQpOworICAgIHJldHVybiAwOworfQorCit2b2lkIER0bHM6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIER0bHM6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgUHJvY2VzcygpOworfQorCit2b2lkIER0bHM6OlByb2Nlc3Modm9pZCkKK3sKKyAgICB1aW50OF90IGJ1ZltNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU5dOworICAgIGJvb2wgc2hvdWxkQ2xvc2UgPSBmYWxzZTsKKyAgICBpbnQgcnZhbDsKKworICAgIHdoaWxlIChtU3RhcnRlZCkKKyAgICB7CisgICAgICAgIGlmIChtU3NsLnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCZtU3NsKTsKKworICAgICAgICAgICAgaWYgKChtU3NsLnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSKSAmJiAobUNvbm5lY3RlZEhhbmRsZXIgIT0gTlVMTCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUNvbm5lY3RlZEhhbmRsZXIobUNvbnRleHQsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9IG1iZWR0bHNfc3NsX3JlYWQoJm1Tc2wsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2YWwgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVjZWl2ZUhhbmRsZXIobUNvbnRleHQsIGJ1Ziwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHJ2YWwpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChydmFsID09IDAgfHwgcnZhbCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8IHJ2YWwgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChydmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCZtU3NsKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KHNob3VsZENsb3NlID0gdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRDoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRToKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoJm1Tc2wpOworICAgICAgICAgICAgICAgIEV4aXROb3coc2hvdWxkQ2xvc2UgPSB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUM6CisgICAgICAgICAgICAgICAgaWYgKG1Tc2wuc3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoJm1Tc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDKTsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhzaG91bGRDbG9zZSA9IHRydWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtU3NsLnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCZtU3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgIEV4aXROb3coc2hvdWxkQ2xvc2UgPSB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgmbVNzbCk7CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfZWNqcGFrZV9wYXNzd29yZCgmbVNzbCwgbVBzaywgbVBza0xlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIGlmIChzaG91bGRDbG9zZSkKKyAgICB7CisgICAgICAgIENsb3NlKCk7CisgICAgfQorfQorCitvdEVycm9yIER0bHM6Ok1hcEVycm9yKGludCBydmFsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChydmFsKQorICAgIHsKKyAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQToKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEOgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KHJ2YWwgPj0gMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEdGxzOjpIYW5kbGVNYmVkdGxzRGVidWcodm9pZCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICpzdHIpCit7CisgICAgRHRscyAqcFRoaXMgPSBzdGF0aWNfY2FzdDxEdGxzICo+KGN0eCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKHBUaGlzKTsKKworICAgIHN3aXRjaCAobGV2ZWwpCisgICAgeworICAgIGNhc2UgMToKKyAgICAgICAgb3RMb2dDcml0TWJlZFRscyhwVGhpcy0+R2V0SW5zdGFuY2UoKSwgIiVzIiwgc3RyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAgIG90TG9nV2Fybk1iZWRUbHMocFRoaXMtPkdldEluc3RhbmNlKCksICIlcyIsIHN0cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgICBvdExvZ0luZm9NYmVkVGxzKHBUaGlzLT5HZXRJbnN0YW5jZSgpLCAiJXMiLCBzdHIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgNDoKKyAgICBkZWZhdWx0OgorICAgICAgICBvdExvZ0RlYmdNYmVkVGxzKHBUaGlzLT5HZXRJbnN0YW5jZSgpLCAiJXMiLCBzdHIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0R0bHMgJkR0bHM6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIER0bHMgJmR0bHMgPSAqc3RhdGljX2Nhc3Q8RHRscyAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBEdGxzICZkdGxzID0gb3RHZXRUaHJlYWROZXRpZigpLkdldER0bHMoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGR0bHM7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZHRscy5ocHAgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDAzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2R0bHMuaHBwCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdXNpbmcgbWJlZFRMUy4KKyAqLworCisjaWZuZGVmIERUTFNfSFBQXworI2RlZmluZSBEVExTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgPG1iZWR0bHMvc3NsLmg+CisjaW5jbHVkZSA8bWJlZHRscy9lbnRyb3B5Lmg+CisjaW5jbHVkZSA8bWJlZHRscy9jdHJfZHJiZy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvZXJyb3IuaD4KKyNpbmNsdWRlIDxtYmVkdGxzL2NlcnRzLmg+CisjaW5jbHVkZSA8bWJlZHRscy9zc2xfY29va2llLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL3NoYTI1Ni5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIE1lc2hDb1AgeworCitjbGFzcyBEdGxzOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1Bza01heExlbmd0aCA9IDMyLAorICAgICAgICBrQXBwbGljYXRpb25EYXRhTWF4TGVuZ3RoID0gMTI4LAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBEVExTIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIER0bHMoVGhyZWFkTmV0aWYgJmFOZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9yIHRvcm4gZG93bi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb25uZWN0ZWQgIFRSVUUgaWYgYSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqQ29ubmVjdGVkSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIGJvb2wgYUNvbm5lY3RlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBEVExTIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgICAgIEEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVjZWl2ZWQgZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpSZWNlaXZlSGFuZGxlcikodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGRhdGEgaXMgcmVhZHkgdG8gdHJhbnNtaXQgZm9yIHRoZSBEVExTIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgICAgICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgdHJhbnNtaXQgZGF0YSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VTdWJ0eXBlICBBIG1lc3NhZ2Ugc3ViIHR5cGUgaW5mb3JtYXRpb24gZm9yIHRoZSBzZW5kZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIG90RXJyb3IoKlNlbmRIYW5kbGVyKSh2b2lkICphQ29udGV4dCwgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUxlbmd0aCwgdWludDhfdCBhTWVzc2FnZVN1YlR5cGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIHRoZSBEVExTIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2xpZW50ICAgICAgICAgICAgVFJVRSBpZiBvcGVyYXRpbmcgYXMgYSBjbGllbnQsIEZBTFNFIGlmIG9wZXJhdGluZyBhcyBhIHNlcnZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29ubmVjdGVkSGFuZGxlciAgQSBwb2ludGVyIHRvIHRoZSBjb25uZWN0ZWQgaGFuZGxlci4KKyAgICAgKiBAcGFyYW1baW5dICBhUmVjZWl2ZUhhbmRsZXIgICAgQSBwb2ludGVyIHRvIHRoZSByZWNlaXZlIGhhbmRsZXIuCisgICAgICogQHBhcmFtW2luXSAgYVNlbmRIYW5kbGVyICAgICAgIEEgcG9pbnRlciB0byB0aGUgc2VuZCBoYW5kbGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBEVExTIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KGJvb2wgYUNsaWVudCwgQ29ubmVjdGVkSGFuZGxlciBhQ29ubmVjdGVkSGFuZGxlciwgUmVjZWl2ZUhhbmRsZXIgYVJlY2VpdmVIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgU2VuZEhhbmRsZXIgYVNlbmRIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgRFRMUyBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgRFRMUyBzZXJ2aWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBEVExTIHNlcnZpY2UgaXMgYWN0aXZlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgRFRMUyBzZXJ2aWNlIGlzIGFjdGl2ZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N0YXJ0ZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQU0suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUFNLICBBIHBvaW50ZXIgdG8gdGhlIFBTSy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBQU0suCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBQU0sgaXMgaW52YWxpZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UHNrKGNvbnN0IHVpbnQ4X3QgKmFQc2ssIHVpbnQ4X3QgYVBza0xlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDbGllbnQgSUQgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSGVsbG8gQ29va2llLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNsaWVudElkICBBIHBvaW50ZXIgdG8gdGhlIENsaWVudCBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgQ2xpZW50IElELgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBDbGllbnQgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldENsaWVudElkKGNvbnN0IHVpbnQ4X3QgKmFDbGllbnRJZCwgdWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgRFRMUyBzZXNzaW9uIGlzIGNvbm5lY3RlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIFRoZSBEVExTIHNlc3Npb24gaXMgY29ubmVjdGVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIFRoZSBEVExTIHNlc3Npb24gaXMgbm90IGNvbm5lY3RlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNDb25uZWN0ZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBkYXRhIHdpdGhpbiB0aGUgRFRMUyBzZXNzaW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgbWVzc2FnZSB0byBzZW5kIHZpYSBEVExTLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgc2VudCB0aGUgZGF0YSB2aWEgdGhlIERUTFMgc2Vzc2lvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEEgbWVzc2FnZSBpcyB0b28gbG9uZy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZChNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHJlY2VpdmVkIERUTFMgbWVzc2FnZSB0byB0aGUgRFRMUyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgIFRoZSBvZmZzZXQgd2l0aGluIEBwIGFNZXNzYWdlIHdoZXJlIHRoZSBEVExTIG1lc3NhZ2Ugc3RhcnRzLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICBUaGUgc2l6ZSBvZiB0aGUgRFRMUyBtZXNzYWdlIChieXRlcykuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIHJlY2VpdmVkIERUTFMgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCwgdWludDE2X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcHJvdmlzaW9uaW5nIFVSTCBpcyBwbGFjZWQgaGVyZSBzbyB0aGF0IGJvdGggdGhlIENvbW1pc3Npb25lciBhbmQgSm9pbmVyIGNhbiBzaGFyZSB0aGUgc2FtZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBQcm92aXNpb25pbmdVcmxUbHYgbVByb3Zpc2lvbmluZ1VybDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgb3RFcnJvciBNYXBFcnJvcihpbnQgcnZhbCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVNYmVkdGxzRGVidWcodm9pZCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpzdHIpOworCisgICAgc3RhdGljIGludCBIYW5kbGVNYmVkdGxzR2V0VGltZXIodm9pZCAqYUNvbnRleHQpOworICAgIGludCBIYW5kbGVNYmVkdGxzR2V0VGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVNYmVkdGxzU2V0VGltZXIodm9pZCAqYUNvbnRleHQsIHVpbnQzMl90IGFJbnRlcm1lZGlhdGUsIHVpbnQzMl90IGFGaW5pc2gpOworICAgIHZvaWQgSGFuZGxlTWJlZHRsc1NldFRpbWVyKHVpbnQzMl90IGFJbnRlcm1lZGlhdGUsIHVpbnQzMl90IGFGaW5pc2gpOworCisgICAgc3RhdGljIGludCBIYW5kbGVNYmVkdGxzUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgdW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpOworICAgIGludCBIYW5kbGVNYmVkdGxzUmVjZWl2ZSh1bnNpZ25lZCBjaGFyICphQnVmLCBzaXplX3QgYUxlbmd0aCk7CisKKyAgICBzdGF0aWMgaW50IEhhbmRsZU1iZWR0bHNUcmFuc21pdCh2b2lkICphQ29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpOworICAgIGludCBIYW5kbGVNYmVkdGxzVHJhbnNtaXQoY29uc3QgdW5zaWduZWQgY2hhciAqYUJ1Ziwgc2l6ZV90IGFMZW5ndGgpOworCisgICAgc3RhdGljIGludCBIYW5kbGVNYmVkdGxzRXhwb3J0S2V5cyh2b2lkICphQ29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciAqYU1hc3RlclNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFLZXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhTWFjTGVuZ3RoLCBzaXplX3QgYUtleUxlbmd0aCwgc2l6ZV90IGFJdkxlbmd0aCk7CisgICAgaW50IEhhbmRsZU1iZWR0bHNFeHBvcnRLZXlzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFNYXN0ZXJTZWNyZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFLZXlCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFNYWNMZW5ndGgsIHNpemVfdCBhS2V5TGVuZ3RoLCBzaXplX3QgYUl2TGVuZ3RoKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisKKyAgICB2b2lkIENsb3NlKHZvaWQpOworICAgIHZvaWQgUHJvY2Vzcyh2b2lkKTsKKworICAgIHN0YXRpYyBEdGxzICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICB1aW50OF90IG1Qc2tba1Bza01heExlbmd0aF07CisgICAgdWludDhfdCBtUHNrTGVuZ3RoOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgbUVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IG1DdHJEcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgbVNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgbUNvbmY7CisgICAgbWJlZHRsc19zc2xfY29va2llX2N0eCBtQ29va2llQ3R4OworICAgIGJvb2wgbVN0YXJ0ZWQ7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgdWludDMyX3QgbVRpbWVySW50ZXJtZWRpYXRlOworICAgIGJvb2wgbVRpbWVyU2V0OworCisgICAgTWVzc2FnZSAqbVJlY2VpdmVNZXNzYWdlOworICAgIHVpbnQxNl90IG1SZWNlaXZlT2Zmc2V0OworICAgIHVpbnQxNl90IG1SZWNlaXZlTGVuZ3RoOworCisgICAgQ29ubmVjdGVkSGFuZGxlciBtQ29ubmVjdGVkSGFuZGxlcjsKKyAgICBSZWNlaXZlSGFuZGxlciBtUmVjZWl2ZUhhbmRsZXI7CisgICAgU2VuZEhhbmRsZXIgbVNlbmRIYW5kbGVyOworICAgIHZvaWQgKm1Db250ZXh0OworICAgIGJvb2wgbUNsaWVudDsKKworICAgIHVpbnQ4X3QgbU1lc3NhZ2VTdWJUeXBlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIERUTFNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNmJjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2VuZXJneV9zY2FuX2NsaWVudC5jcHAKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIEVuZXJneSBTY2FuIENsaWVudC4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJlbmVyZ3lfc2Nhbl9jbGllbnQudG1oIgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJlbmVyZ3lfc2Nhbl9jbGllbnQuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCitFbmVyZ3lTY2FuQ2xpZW50OjpFbmVyZ3lTY2FuQ2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtRW5lcmd5U2NhbihPVF9VUklfUEFUSF9FTkVSR1lfUkVQT1JULCAmRW5lcmd5U2NhbkNsaWVudDo6SGFuZGxlUmVwb3J0LCB0aGlzKQoreworICAgIG1Db250ZXh0ID0gTlVMTDsKKyAgICBtQ2FsbGJhY2sgPSBOVUxMOworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUVuZXJneVNjYW4pOworfQorCitvdEVycm9yIEVuZXJneVNjYW5DbGllbnQ6OlNlbmRRdWVyeSh1aW50MzJfdCBhQ2hhbm5lbE1hc2ssIHVpbnQ4X3QgYUNvdW50LCB1aW50MTZfdCBhUGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwgY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyRW5lcmd5UmVwb3J0Q2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgTWVzaENvUDo6Q29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IHNlc3Npb25JZDsKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgTWVzaENvUDo6Q291bnRUbHYgY291bnQ7CisgICAgTWVzaENvUDo6UGVyaW9kVGx2IHBlcmlvZDsKKyAgICBNZXNoQ29QOjpTY2FuRHVyYXRpb25UbHYgc2NhbkR1cmF0aW9uOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGhlYWRlci5Jbml0KGFBZGRyZXNzLklzTXVsdGljYXN0KCkgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfRU5FUkdZX1NDQU4pOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzZXNzaW9uSWQuSW5pdCgpOworICAgIHNlc3Npb25JZC5TZXRDb21taXNzaW9uZXJTZXNzaW9uSWQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuR2V0U2Vzc2lvbklkKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKworICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICBjaGFubmVsTWFzay5TZXRNYXNrKGFDaGFubmVsTWFzayk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKworICAgIGNvdW50LkluaXQoKTsKKyAgICBjb3VudC5TZXRDb3VudChhQ291bnQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNvdW50LCBzaXplb2YoY291bnQpKSk7CisKKyAgICBwZXJpb2QuSW5pdCgpOworICAgIHBlcmlvZC5TZXRQZXJpb2QoYVBlcmlvZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcGVyaW9kLCBzaXplb2YocGVyaW9kKSkpOworCisgICAgc2NhbkR1cmF0aW9uLkluaXQoKTsKKyAgICBzY2FuRHVyYXRpb24uU2V0U2NhbkR1cmF0aW9uKGFTY2FuRHVyYXRpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNjYW5EdXJhdGlvbiwgc2l6ZW9mKHNjYW5EdXJhdGlvbikpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFBZGRyZXNzKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IGVuZXJneSBzY2FuIHF1ZXJ5Iik7CisKKyAgICBtQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbUNvbnRleHQgPSBhQ29udGV4dDsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgRW5lcmd5U2NhbkNsaWVudDo6SGFuZGxlUmVwb3J0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8RW5lcmd5U2NhbkNsaWVudCAqPihhQ29udGV4dCktPkhhbmRsZVJlcG9ydCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBFbmVyZ3lTY2FuQ2xpZW50OjpIYW5kbGVSZXBvcnQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIElwNjo6TWVzc2FnZUluZm8gcmVzcG9uc2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgIHN0cnVjdAorICAgIHsKKyAgICAgICAgTWVzaENvUDo6RW5lcmd5TGlzdFRsdiB0bHY7CisgICAgICAgIHVpbnQ4X3QgbGlzdFtPUEVOVEhSRUFEX0NPTkZJR19NQVhfRU5FUkdZX1JFU1VMVFNdOworICAgIH0gT1RfVE9PTF9QQUNLRURfRU5EIGVuZXJneUxpc3Q7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIGVuZXJneSBzY2FuIHJlcG9ydCIpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprQ2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzayksIGNoYW5uZWxNYXNrKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWxNYXNrLklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtFbmVyZ3lMaXN0LCBzaXplb2YoZW5lcmd5TGlzdCksIGVuZXJneUxpc3QudGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KGVuZXJneUxpc3QudGx2LklzVmFsaWQoKSk7CisKKyAgICBpZiAobUNhbGxiYWNrICE9IE5VTEwpCisgICAgeworICAgICAgICBtQ2FsbGJhY2soY2hhbm5lbE1hc2suR2V0TWFzaygpLCBlbmVyZ3lMaXN0Lmxpc3QsIGVuZXJneUxpc3QudGx2LkdldExlbmd0aCgpLCBtQ29udGV4dCk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChuZXRpZi5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIHJlc3BvbnNlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBlbmVyZ3kgc2NhbiByZXBvcnQgcmVzcG9uc2UiKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvZW5lcmd5X3NjYW5fY2xpZW50LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWMyNDIwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9lbmVyZ3lfc2Nhbl9jbGllbnQuaHBwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciByZXNwb25kaW5nIHRvIFBBTklEIFF1ZXJ5IFJlcXVlc3RzLgorICovCisKKyNpZm5kZWYgRU5FUkdZX1NDQU5fQ0xJRU5UX0hQUF8KKyNkZWZpbmUgRU5FUkdZX1NDQU5fQ0xJRU5UX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29tbWlzc2lvbmVyLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBoYW5kbGluZyBQQU5JRCBRdWVyeSBSZXF1ZXN0cy4KKyAqCisgKi8KK2NsYXNzIEVuZXJneVNjYW5DbGllbnQ6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBFbmVyZ3lTY2FuQ2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYW4gRW5lcmd5IFNjYW4gUXVlcnkgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVsIG1hc2sgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50ICAgICAgICAgVGhlIG51bWJlciBvZiBlbmVyZ3kgbWVhc3VyZW1lbnRzIHBlciBjaGFubmVsLgorICAgICAqIEBwYXJhbVtpbl0gIGFQZXJpb2QgICAgICAgIFRoZSB0aW1lIGJldHdlZW4gZW5lcmd5IG1lYXN1cmVtZW50cyAobWlsbGlzZWNvbmRzKS4KKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICBUaGUgc2NhbiBkdXJhdGlvbiBmb3IgZWFjaCBlbmVyZ3kgbWVhc3VyZW1lbnQgKG1pbGxpc2Vjb25kcykuCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gRW5lcmd5IFJlcG9ydCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIEVuZXJneSBTY2FuIFF1ZXJ5IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBnZW5lcmF0ZSBhbiBFbmVyZ3kgU2NhbiBRdWVyeSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kUXVlcnkodWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCwgdWludDE2X3QgYVNjYW5EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlcG9ydCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUmVwb3J0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdENvbW1pc3Npb25lckVuZXJneVJlcG9ydENhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIENvYXA6OlJlc291cmNlIG1FbmVyZ3lTY2FuOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEVORVJHWV9TQ0FOX0NMSUVOVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2pvaW5lci5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2pvaW5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1MWFiMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyLmNwcApAQCAtMCwwICsxLDU0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgSm9pbmVyIHJvbGUuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAiam9pbmVyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJqb2luZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jcmMxNi5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDY0OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitKb2luZXI6OkpvaW5lcihUaHJlYWROZXRpZiAmYU5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtU3RhdGUoa1N0YXRlSWRsZSksCisgICAgbUNhbGxiYWNrKE5VTEwpLAorICAgIG1Db250ZXh0KE5VTEwpLAorICAgIG1DY2l0dCgwKSwKKyAgICBtQW5zaSgwKSwKKyAgICBtSm9pbmVyUm91dGVyQ2hhbm5lbCgwKSwKKyAgICBtSm9pbmVyUm91dGVyUGFuSWQoMCksCisgICAgbUpvaW5lclVkcFBvcnQoMCksCisgICAgbVZlbmRvck5hbWUoTlVMTCksCisgICAgbVZlbmRvck1vZGVsKE5VTEwpLAorICAgIG1WZW5kb3JTd1ZlcnNpb24oTlVMTCksCisgICAgbVZlbmRvckRhdGEoTlVMTCksCisgICAgbVRpbWVyKGFOZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZKb2luZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtSm9pbmVyRW50cnVzdChPVF9VUklfUEFUSF9KT0lORVJfRU5UUlVTVCwgJkpvaW5lcjo6SGFuZGxlSm9pbmVyRW50cnVzdCwgdGhpcykKK3sKKyAgICBhTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1Kb2luZXJFbnRydXN0KTsKK30KKworb3RFcnJvciBKb2luZXI6OlN0YXJ0KGNvbnN0IGNoYXIgKmFQU0tkLCBjb25zdCBjaGFyICphUHJvdmlzaW9uaW5nVXJsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFWZW5kb3JOYW1lLCBjb25zdCBjaGFyICphVmVuZG9yTW9kZWwsIGNvbnN0IGNoYXIgKmFWZW5kb3JTd1ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVZlbmRvckRhdGEsIG90Sm9pbmVyQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWFjOjpFeHRBZGRyZXNzIGV4dEFkZHJlc3M7CisgICAgQ3JjMTYgY2NpdHQoQ3JjMTY6OmtDY2l0dCk7CisgICAgQ3JjMTYgYW5zaShDcmMxNjo6a0Fuc2kpOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIFZlcmlmeU9yRXhpdChtU3RhdGUgPT0ga1N0YXRlSWRsZSwgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIC8vIHVzZSBleHRlbmRlZCBhZGRyZXNzIGJhc2VkIG9uIGZhY3RvcnktYXNzaWduZWQgSUVFRSBFVUktNjQKKyAgICBuZXRpZi5HZXRNYWMoKS5HZXRIYXNoTWFjQWRkcmVzcygmZXh0QWRkcmVzcyk7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0RXh0QWRkcmVzcyhleHRBZGRyZXNzKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5VcGRhdGVMaW5rTG9jYWxBZGRyZXNzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihleHRBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2NpdHQuVXBkYXRlKGV4dEFkZHJlc3MubThbaV0pOworICAgICAgICBhbnNpLlVwZGF0ZShleHRBZGRyZXNzLm04W2ldKTsKKyAgICB9CisKKyAgICBtQ2NpdHQgPSBjY2l0dC5HZXQoKTsKKyAgICBtQW5zaSA9IGFuc2kuR2V0KCk7CisKKyAgICBlcnJvciA9IG5ldGlmLkdldENvYXBTZWN1cmUoKS5TdGFydChPUEVOVEhSRUFEX0NPTkZJR19KT0lORVJfVURQX1BPUlQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuR2V0RHRscygpLlNldFBzayhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYVBTS2QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RybGVuKGFQU0tkKSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuR2V0RHRscygpLm1Qcm92aXNpb25pbmdVcmwuU2V0UHJvdmlzaW9uaW5nVXJsKGFQcm92aXNpb25pbmdVcmwpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgbUpvaW5lclJvdXRlclBhbklkID0gTWFjOjprUGFuSWRCcm9hZGNhc3Q7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldE1sZSgpLkRpc2NvdmVyKDAsIG5ldGlmLkdldE1hYygpLkdldFBhbklkKCksIHRydWUsIGZhbHNlLCBIYW5kbGVEaXNjb3ZlclJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOworCisgICAgbVZlbmRvck5hbWUgPSBhVmVuZG9yTmFtZTsKKyAgICBtVmVuZG9yTW9kZWwgPSBhVmVuZG9yTW9kZWw7CisgICAgbVZlbmRvclN3VmVyc2lvbiA9IGFWZW5kb3JTd1ZlcnNpb247CisgICAgbVZlbmRvckRhdGEgPSBhVmVuZG9yRGF0YTsKKyAgICBtQ2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICBtU3RhdGUgPSBrU3RhdGVEaXNjb3ZlcjsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSm9pbmVyOjpTdG9wKHZvaWQpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIENsb3NlKCk7CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgSm9pbmVyOjpDbG9zZSh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIG5ldGlmLkdldENvYXBTZWN1cmUoKS5EaXNjb25uZWN0KCk7CisgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuUmVtb3ZlVW5zZWN1cmVQb3J0KG5ldGlmLkdldENvYXBTZWN1cmUoKS5HZXRQb3J0KCkpOworCisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIEpvaW5lcjo6Q29tcGxldGUob3RFcnJvciBhRXJyb3IpCit7CisgICAgbVN0YXRlID0ga1N0YXRlSWRsZTsKKworICAgIEdldE5ldGlmKCkuR2V0Q29hcFNlY3VyZSgpLlN0b3AoKTsKKworICAgIGlmIChtQ2FsbGJhY2spCisgICAgeworICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGNhbGxiYWNrID0gbUNhbGxiYWNrOworICAgICAgICBtQ2FsbGJhY2sgPSBOVUxMOworICAgICAgICBjYWxsYmFjayhhRXJyb3IsIG1Db250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVEaXNjb3ZlclJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEpvaW5lciAqPihhQ29udGV4dCktPkhhbmRsZURpc2NvdmVyUmVzdWx0KGFSZXN1bHQpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlRGlzY292ZXJSZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBpZiAoYVJlc3VsdCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RMb2dGdW5jRW50cnlNc2coImFSZXN1bHQgPSAlbGxYIiwgSG9zdFN3YXA2NCgqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCAqPigmYVJlc3VsdC0+bUV4dEFkZHJlc3MpKSk7CisKKyAgICAgICAgLy8gSm9pbmluZyBpcyBkaXNhYmxlZCBpZiB0aGUgU3RlZXJpbmcgRGF0YSBpcyBub3QgaW5jbHVkZWQKKyAgICAgICAgaWYgKGFSZXN1bHQtPm1TdGVlcmluZ0RhdGEubUxlbmd0aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0RlYmdNZXNoQ29QKEdldEluc3RhbmNlKCksICJObyBzdGVlcmluZyBkYXRhLCBqb2luaW5nIGRpc2FibGVkIik7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBTdGVlcmluZ0RhdGFUbHYgc3RlZXJpbmdEYXRhOworICAgICAgICBzdGVlcmluZ0RhdGEuU2V0TGVuZ3RoKGFSZXN1bHQtPm1TdGVlcmluZ0RhdGEubUxlbmd0aCk7CisgICAgICAgIG1lbWNweShzdGVlcmluZ0RhdGEuR2V0VmFsdWUoKSwgYVJlc3VsdC0+bVN0ZWVyaW5nRGF0YS5tOCwgc3RlZXJpbmdEYXRhLkdldExlbmd0aCgpKTsKKworICAgICAgICBpZiAoc3RlZXJpbmdEYXRhLkRvZXNBbGxvd0FueSgpIHx8CisgICAgICAgICAgICAoc3RlZXJpbmdEYXRhLkdldEJpdChtQ2NpdHQgJSBzdGVlcmluZ0RhdGEuR2V0TnVtQml0cygpKSAmJgorICAgICAgICAgICAgIHN0ZWVyaW5nRGF0YS5HZXRCaXQobUFuc2kgJSBzdGVlcmluZ0RhdGEuR2V0TnVtQml0cygpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Kb2luZXJVZHBQb3J0ID0gYVJlc3VsdC0+bUpvaW5lclVkcFBvcnQ7CisgICAgICAgICAgICBtSm9pbmVyUm91dGVyUGFuSWQgPSBhUmVzdWx0LT5tUGFuSWQ7CisgICAgICAgICAgICBtSm9pbmVyUm91dGVyQ2hhbm5lbCA9IGFSZXN1bHQtPm1DaGFubmVsOworICAgICAgICAgICAgbWVtY3B5KCZtSm9pbmVyUm91dGVyLCAmYVJlc3VsdC0+bUV4dEFkZHJlc3MsIHNpemVvZihtSm9pbmVyUm91dGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0RlYmdNZXNoQ29QKEdldEluc3RhbmNlKCksICJTdGVlcmluZyBkYXRhIGRvZXMgbm90IGluY2x1ZGUgdGhpcyBkZXZpY2UiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChtSm9pbmVyUm91dGVyUGFuSWQgIT0gTWFjOjprUGFuSWRCcm9hZGNhc3QpCisgICAgeworICAgICAgICBvdExvZ0Z1bmNFbnRyeU1zZygiYVJlc3VsdCA9IE5VTEwiKTsKKworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChtSm9pbmVyUm91dGVyUGFuSWQpOworICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKG1Kb2luZXJSb3V0ZXJDaGFubmVsKTsKKyAgICAgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuQWRkVW5zZWN1cmVQb3J0KG5ldGlmLkdldENvYXBTZWN1cmUoKS5HZXRQb3J0KCkpOworCisgICAgICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmU4MCk7CisgICAgICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuU2V0SWlkKG1Kb2luZXJSb3V0ZXIpOworICAgICAgICBtZXNzYWdlSW5mby5tUGVlclBvcnQgPSBtSm9pbmVyVWRwUG9ydDsKKyAgICAgICAgbWVzc2FnZUluZm8ubUludGVyZmFjZUlkID0gT1RfTkVUSUZfSU5URVJGQUNFX0lEX1RIUkVBRDsKKworICAgICAgICBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuQ29ubmVjdChtZXNzYWdlSW5mbywgSm9pbmVyOjpIYW5kbGVTZWN1cmVDb2FwQ2xpZW50Q29ubmVjdCwgdGhpcyk7CisgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUNvbm5lY3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG90TG9nRGViZ01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIk5vIGpvaW5hYmxlIG5ldHdvcmsgZm91bmQiKTsKKyAgICAgICAgQ29tcGxldGUoT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICB9CisKK2V4aXQ6CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlU2VjdXJlQ29hcENsaWVudENvbm5lY3QoYm9vbCBhQ29ubmVjdGVkLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVTZWN1cmVDb2FwQ2xpZW50Q29ubmVjdChhQ29ubmVjdGVkKTsKK30KKwordm9pZCBKb2luZXI6OkhhbmRsZVNlY3VyZUNvYXBDbGllbnRDb25uZWN0KGJvb2wgYUNvbm5lY3RlZCkKK3sKKyAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICB7CisgICAgY2FzZSBrU3RhdGVDb25uZWN0OgorICAgICAgICBpZiAoYUNvbm5lY3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgU2VuZEpvaW5lckZpbmFsaXplKCk7CisgICAgICAgICAgICBtVGltZXIuU3RhcnQoa1RpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQ29tcGxldGUoT1RfRVJST1JfU0VDVVJJVFkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSm9pbmVyOjpTZW5kSm9pbmVyRmluYWxpemUodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgU3RhdGVUbHYgc3RhdGVUbHY7CisgICAgVmVuZG9yTmFtZVRsdiB2ZW5kb3JOYW1lVGx2OworICAgIFZlbmRvck1vZGVsVGx2IHZlbmRvck1vZGVsVGx2OworICAgIFZlbmRvclN3VmVyc2lvblRsdiB2ZW5kb3JTd1ZlcnNpb25UbHY7CisgICAgVmVuZG9yU3RhY2tWZXJzaW9uVGx2IHZlbmRvclN0YWNrVmVyc2lvblRsdjsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfSk9JTkVSX0ZJTkFMSVpFKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcFNlY3VyZSgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGVUbHYuSW5pdCgpOworICAgIHN0YXRlVGx2LlNldFN0YXRlKE1lc2hDb1A6OlN0YXRlVGx2OjprQWNjZXB0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZzdGF0ZVRsdiwgc2l6ZW9mKHN0YXRlVGx2KSkpOworCisgICAgdmVuZG9yTmFtZVRsdi5Jbml0KCk7CisgICAgdmVuZG9yTmFtZVRsdi5TZXRWZW5kb3JOYW1lKG1WZW5kb3JOYW1lKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ2ZW5kb3JOYW1lVGx2LCB2ZW5kb3JOYW1lVGx2LkdldFNpemUoKSkpOworCisgICAgdmVuZG9yTW9kZWxUbHYuSW5pdCgpOworICAgIHZlbmRvck1vZGVsVGx2LlNldFZlbmRvck1vZGVsKG1WZW5kb3JNb2RlbCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdmVuZG9yTW9kZWxUbHYsIHZlbmRvck1vZGVsVGx2LkdldFNpemUoKSkpOworCisgICAgdmVuZG9yU3dWZXJzaW9uVGx2LkluaXQoKTsKKyAgICB2ZW5kb3JTd1ZlcnNpb25UbHYuU2V0VmVuZG9yU3dWZXJzaW9uKG1WZW5kb3JTd1ZlcnNpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnZlbmRvclN3VmVyc2lvblRsdiwgdmVuZG9yU3dWZXJzaW9uVGx2LkdldFNpemUoKSkpOworCisgICAgdmVuZG9yU3RhY2tWZXJzaW9uVGx2LkluaXQoKTsKKyAgICB2ZW5kb3JTdGFja1ZlcnNpb25UbHYuU2V0T3VpKE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFTkRPUl9PVUkpOworICAgIHZlbmRvclN0YWNrVmVyc2lvblRsdi5TZXRNYWpvcihPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01BSk9SKTsKKyAgICB2ZW5kb3JTdGFja1ZlcnNpb25UbHYuU2V0TWlub3IoT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NSU5PUik7CisgICAgdmVuZG9yU3RhY2tWZXJzaW9uVGx2LlNldFJldmlzaW9uKE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fUkVWKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ2ZW5kb3JTdGFja1ZlcnNpb25UbHYsIHZlbmRvclN0YWNrVmVyc2lvblRsdi5HZXRTaXplKCkpKTsKKworICAgIGlmIChtVmVuZG9yRGF0YSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgVmVuZG9yRGF0YVRsdiB2ZW5kb3JEYXRhVGx2OworICAgICAgICB2ZW5kb3JEYXRhVGx2LkluaXQoKTsKKyAgICAgICAgdmVuZG9yRGF0YVRsdi5TZXRWZW5kb3JEYXRhKG1WZW5kb3JEYXRhKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdmVuZG9yRGF0YVRsdiwgdmVuZG9yRGF0YVRsdi5HZXRTaXplKCkpKTsKKyAgICB9CisKKyAgICBpZiAobmV0aWYuR2V0Q29hcFNlY3VyZSgpLkdldER0bHMoKS5tUHJvdmlzaW9uaW5nVXJsLkdldExlbmd0aCgpID4gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJm5ldGlmLkdldENvYXBTZWN1cmUoKS5HZXREdGxzKCkubVByb3Zpc2lvbmluZ1VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuR2V0RHRscygpLm1Qcm92aXNpb25pbmdVcmwuR2V0U2l6ZSgpKSk7CisgICAgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0VSVF9MT0cKKyAgICB1aW50OF90IGJ1ZltPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFXTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKGJ1ZikpOworICAgIG1lc3NhZ2UtPlJlYWQoaGVhZGVyLkdldExlbmd0aCgpLCBtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGhlYWRlci5HZXRMZW5ndGgoKSwgYnVmKTsKKyAgICBvdER1bXBDZXJ0TWVzaENvUChHZXRJbnN0YW5jZSgpLCAiW1RIQ0ldIGRpcmVjdGlvbj1zZW5kIHwgdHlwZT1KT0lOX0ZJTi5yZXEgfCIsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGhlYWRlci5HZXRMZW5ndGgoKSk7CisjZW5kaWYKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwU2VjdXJlKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIEpvaW5lcjo6SGFuZGxlSm9pbmVyRmluYWxpemVSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiU2VudCBqb2luZXIgZmluYWxpemUiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVKb2luZXJGaW5hbGl6ZVJlc3BvbnNlKAorICAgICAgICBzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksIHN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbyksIGFSZXN1bHQpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlSm9pbmVyRmluYWxpemVSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgKHZvaWQpIGFNZXNzYWdlSW5mbzsKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IGtTdGF0ZUNvbm5lY3RlZCAmJgorICAgICAgICAgICAgICAgICBhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci0+R2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9BQ0tOT1dMRURHTUVOVCAmJgorICAgICAgICAgICAgICAgICBhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdigqYU1lc3NhZ2UsIFRsdjo6a1N0YXRlLCBzaXplb2Yoc3RhdGUpLCBzdGF0ZSkpOworICAgIFZlcmlmeU9yRXhpdChzdGF0ZS5Jc1ZhbGlkKCkpOworCisgICAgbVN0YXRlID0ga1N0YXRlRW50cnVzdDsKKyAgICBtVGltZXIuU3RhcnQoa1RpbWVvdXQpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicmVjZWl2ZWQgam9pbmVyIGZpbmFsaXplIHJlc3BvbnNlICVkIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGUuR2V0U3RhdGUoKSkpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NFUlRfTE9HCisgICAgdWludDhfdCBidWZbT1BFTlRIUkVBRF9DT05GSUdfTUVTU0FHRV9CVUZGRVJfU0laRV07CisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLT5HZXRMZW5ndGgoKSA8PSBzaXplb2YoYnVmKSk7CisgICAgYU1lc3NhZ2UtPlJlYWQoYUhlYWRlci0+R2V0TGVuZ3RoKCksIGFNZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGFIZWFkZXItPkdldExlbmd0aCgpLCBidWYpOworICAgIG90RHVtcENlcnRNZXNoQ29QKEdldEluc3RhbmNlKCksICJbVEhDSV0gZGlyZWN0aW9uPXJlY3YgfCB0eXBlPUpPSU5fRklOLnJzcCB8IiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLT5HZXRMZW5ndGgoKSAtIGFIZWFkZXItPkdldExlbmd0aCgpKTsKKyNlbmRpZgorCitleGl0OgorICAgIENsb3NlKCk7CisgICAgb3RMb2dGdW5jRXhpdCgpOworfQorCit2b2lkIEpvaW5lcjo6SGFuZGxlSm9pbmVyRW50cnVzdCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEpvaW5lciAqPihhQ29udGV4dCktPkhhbmRsZUpvaW5lckVudHJ1c3QoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVKb2luZXJFbnRydXN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTmV0d29ya01hc3RlcktleVRsdiBtYXN0ZXJLZXk7CisgICAgTWVzaExvY2FsUHJlZml4VGx2IG1lc2hMb2NhbFByZWZpeDsKKyAgICBFeHRlbmRlZFBhbklkVGx2IGV4dGVuZGVkUGFuSWQ7CisgICAgTmV0d29ya05hbWVUbHYgbmV0d29ya05hbWU7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBOZXR3b3JrS2V5U2VxdWVuY2VUbHYgbmV0d29ya0tleVNlcTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVN0YXRlID09IGtTdGF0ZUVudHJ1c3QgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgam9pbmVyIGVudHJ1c3QiKTsKKyAgICBvdExvZ0NlcnRNZXNoQ29QKEdldEluc3RhbmNlKCksICJbVEhDSV0gZGlyZWN0aW9uPXJlY3YgfCB0eXBlPUpPSU5fRU5ULm50ZiIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtOZXR3b3JrTWFzdGVyS2V5LCBzaXplb2YobWFzdGVyS2V5KSwgbWFzdGVyS2V5KSk7CisgICAgVmVyaWZ5T3JFeGl0KG1hc3RlcktleS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNZXNoTG9jYWxQcmVmaXgsIHNpemVvZihtZXNoTG9jYWxQcmVmaXgpLCBtZXNoTG9jYWxQcmVmaXgpKTsKKyAgICBWZXJpZnlPckV4aXQobWVzaExvY2FsUHJlZml4LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0V4dGVuZGVkUGFuSWQsIHNpemVvZihleHRlbmRlZFBhbklkKSwgZXh0ZW5kZWRQYW5JZCkpOworICAgIFZlcmlmeU9yRXhpdChleHRlbmRlZFBhbklkLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a05ldHdvcmtOYW1lLCBzaXplb2YobmV0d29ya05hbWUpLCBuZXR3b3JrTmFtZSkpOworICAgIFZlcmlmeU9yRXhpdChuZXR3b3JrTmFtZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApLCBhY3RpdmVUaW1lc3RhbXApKTsKKyAgICBWZXJpZnlPckV4aXQoYWN0aXZlVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a05ldHdvcmtLZXlTZXF1ZW5jZSwgc2l6ZW9mKG5ldHdvcmtLZXlTZXEpLCBuZXR3b3JrS2V5U2VxKSk7CisgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtLZXlTZXEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRNYXN0ZXJLZXkobWFzdGVyS2V5LkdldE5ldHdvcmtNYXN0ZXJLZXkoKSk7CisgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEN1cnJlbnRLZXlTZXF1ZW5jZShuZXR3b3JrS2V5U2VxLkdldE5ldHdvcmtLZXlTZXF1ZW5jZSgpKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5TZXRNZXNoTG9jYWxQcmVmaXgobWVzaExvY2FsUHJlZml4LkdldE1lc2hMb2NhbFByZWZpeCgpKTsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRFeHRlbmRlZFBhbklkKGV4dGVuZGVkUGFuSWQuR2V0RXh0ZW5kZWRQYW5JZCgpKTsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXROZXR3b3JrTmFtZShuZXR3b3JrTmFtZS5HZXROZXR3b3JrTmFtZSgpKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgImpvaW4gc3VjY2VzcyEiKTsKKworICAgIC8vIFNlbmQgZHVtbXkgcmVzcG9uc2UuCisgICAgU2VuZEpvaW5lckVudHJ1c3RSZXNwb25zZShhSGVhZGVyLCBhTWVzc2FnZUluZm8pOworCisgICAgLy8gRGVsYXkgZXh0ZW5kZWQgYWRkcmVzcyBjb25maWd1cmF0aW9uIHRvIGFsbG93IERUTFMgd3JhcCB1cC4KKyAgICBtVGltZXIuU3RhcnQoa0NvbmZpZ0V4dEFkZHJlc3NEZWxheSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIkVycm9yIHdoaWxlIHByb2Nlc3Npbmcgam9pbmVyIGVudHJ1c3Q6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgSm9pbmVyOjpTZW5kSm9pbmVyRW50cnVzdFJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhUmVxdWVzdEluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIHJlc3BvbnNlSW5mbyhhUmVxdWVzdEluZm8pOworCisgICAgb3RMb2dGdW5jRW50cnkoKTsKKworICAgIHJlc3BvbnNlSGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhUmVxdWVzdEhlYWRlcik7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIHJlc3BvbnNlSGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlSm9pbmVyRW50cnVzdCk7CisKKyAgICBtZW1zZXQoJnJlc3BvbnNlSW5mby5tU29ja0FkZHIsIDAsIHNpemVvZihyZXNwb25zZUluZm8ubVNvY2tBZGRyKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgcmVzcG9uc2VJbmZvKSk7CisKKyAgICBtU3RhdGUgPSBrU3RhdGVKb2luZWQ7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgSm9pbmVyIEVudHJ1c3QgcmVzcG9uc2UiKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIlNlbnQgam9pbmVyIGVudHJ1c3QgcmVzcG9uc2UgbGVuZ3RoID0gJWQiLCBtZXNzYWdlLT5HZXRMZW5ndGgoKSk7CisgICAgb3RMb2dDZXJ0TWVzaENvUChHZXRJbnN0YW5jZSgpLCAiW1RIQ0ldIGRpcmVjdGlvbj1zZW5kIHwgdHlwZT1KT0lOX0VOVC5yc3AiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7Cit9CisKK3ZvaWQgSm9pbmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBKb2luZXI6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHN3aXRjaCAobVN0YXRlKQorICAgIHsKKyAgICBjYXNlIGtTdGF0ZUlkbGU6CisgICAgY2FzZSBrU3RhdGVEaXNjb3ZlcjoKKyAgICBjYXNlIGtTdGF0ZUNvbm5lY3Q6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU3RhdGVDb25uZWN0ZWQ6CisgICAgY2FzZSBrU3RhdGVFbnRydXN0OgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1JFU1BPTlNFX1RJTUVPVVQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU3RhdGVKb2luZWQ6CisgICAgICAgIE1hYzo6RXh0QWRkcmVzcyBleHRBZGRyZXNzOworCisgICAgICAgIG5ldGlmLkdldE1hYygpLkdlbmVyYXRlRXh0QWRkcmVzcygmZXh0QWRkcmVzcyk7CisgICAgICAgIG5ldGlmLkdldE1hYygpLlNldEV4dEFkZHJlc3MoZXh0QWRkcmVzcyk7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLlVwZGF0ZUxpbmtMb2NhbEFkZHJlc3MoKTsKKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIGJyZWFrOworCisgICAgfQorCisgICAgQ29tcGxldGUoZXJyb3IpOworfQorCitKb2luZXIgJkpvaW5lcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgSm9pbmVyICZqb2luZXIgPSAqc3RhdGljX2Nhc3Q8Sm9pbmVyICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEpvaW5lciAmam9pbmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEpvaW5lcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gam9pbmVyOworfQorCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyLmhwcCBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjcwNjQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9qb2luZXIuaHBwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciB0aGUgSm9pbmVyIHJvbGUuCisgKi8KKworI2lmbmRlZiBKT0lORVJfSFBQXworI2RlZmluZSBKT0lORVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9qb2luZXIuaD4KKworI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29hcC9jb2FwX3NlY3VyZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NyYzE2LmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvZHRscy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBNZXNoQ29QIHsKKworY2xhc3MgSm9pbmVyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgSm9pbmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIEpvaW5lcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgSm9pbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUFNLZCAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFBTS2QuCisgICAgICogQHBhcmFtW2luXSAgYVByb3Zpc2lvbmluZ1VybCAgQSBwb2ludGVyIHRvIHRoZSBQcm92aXNpb25pbmcgVVJMIChtYXkgYmUgTlVMTCkuCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvck5hbWUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgTmFtZSAobXVzdCBiZSBzdGF0aWMpLgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JNb2RlbCAgICAgIEEgcG9pbnRlciB0byB0aGUgVmVuZG9yIE1vZGVsIChtdXN0IGJlIHN0YXRpYykuCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvclN3VmVyc2lvbiAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgU1cgVmVyc2lvbiAobXVzdCBiZSBzdGF0aWMpLgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JEYXRhICAgICAgIEEgcG9pbnRlciB0byB0aGUgVmVuZG9yIERhdGEgKG11c3QgYmUgc3RhdGljKS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBqb2luIG9wZXJhdGlvbiBjb21wbGV0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBKb2luZXIgc2VydmljZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RhcnQoY29uc3QgY2hhciAqYVBTS2QsIGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVmVuZG9yTmFtZSwgY29uc3QgY2hhciAqYVZlbmRvck1vZGVsLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVZlbmRvclN3VmVyc2lvbiwgY29uc3QgY2hhciAqYVZlbmRvckRhdGEsCisgICAgICAgICAgICAgICAgICBvdEpvaW5lckNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIEpvaW5lciBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgSm9pbmVyIHNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3Aodm9pZCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0NvbmZpZ0V4dEFkZHJlc3NEZWxheSA9IDEwMCwgIC8vLzwgbWlsbGlzZWNvbmRzCisgICAgICAgIGtUaW1lb3V0ICAgICAgICAgICAgICAgPSA0MDAwLCAvLy88IG1pbGxpc2Vjb25kcworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEaXNjb3ZlclJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZURpc2NvdmVyUmVzdWx0KG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgdm9pZCBDbG9zZSh2b2lkKTsKKyAgICB2b2lkIENvbXBsZXRlKG90RXJyb3IgYUVycm9yKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlY3VyZUNvYXBDbGllbnRDb25uZWN0KGJvb2wgYUNvbm5lY3RlZCwgdm9pZCAqYUNvbnRleHQpOworICAgIHZvaWQgSGFuZGxlU2VjdXJlQ29hcENsaWVudENvbm5lY3QoYm9vbCBhQ29ubmVjdGVkKTsKKworICAgIHZvaWQgU2VuZEpvaW5lckZpbmFsaXplKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciBhUmVzdWx0KTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckZpbmFsaXplUmVzcG9uc2UoQ29hcDo6SGVhZGVyICphSGVhZGVyLCBNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlSm9pbmVyRW50cnVzdCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUpvaW5lckVudHJ1c3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIFNlbmRKb2luZXJFbnRydXN0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYVJlcXVlc3RJbmZvKTsKKworICAgIHN0YXRpYyBKb2luZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIGtTdGF0ZUlkbGUgICAgICA9IDAsCisgICAgICAgIGtTdGF0ZURpc2NvdmVyICA9IDEsCisgICAgICAgIGtTdGF0ZUNvbm5lY3QgICA9IDIsCisgICAgICAgIGtTdGF0ZUNvbm5lY3RlZCA9IDMsCisgICAgICAgIGtTdGF0ZUVudHJ1c3QgICA9IDQsCisgICAgICAgIGtTdGF0ZUpvaW5lZCAgICA9IDUsCisgICAgfTsKKyAgICBTdGF0ZSBtU3RhdGU7CisKKyAgICBvdEpvaW5lckNhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKworICAgIHVpbnQxNl90IG1DY2l0dDsKKyAgICB1aW50MTZfdCBtQW5zaTsKKworICAgIHVpbnQ4X3QgbUpvaW5lclJvdXRlckNoYW5uZWw7CisgICAgdWludDE2X3QgbUpvaW5lclJvdXRlclBhbklkOworICAgIHVpbnQxNl90IG1Kb2luZXJVZHBQb3J0OworICAgIE1hYzo6RXh0QWRkcmVzcyBtSm9pbmVyUm91dGVyOworCisgICAgY29uc3QgY2hhciAqbVZlbmRvck5hbWU7CisgICAgY29uc3QgY2hhciAqbVZlbmRvck1vZGVsOworICAgIGNvbnN0IGNoYXIgKm1WZW5kb3JTd1ZlcnNpb247CisgICAgY29uc3QgY2hhciAqbVZlbmRvckRhdGE7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgQ29hcDo6UmVzb3VyY2UgbUpvaW5lckVudHJ1c3Q7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSk9JTkVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyX3JvdXRlci5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2pvaW5lcl9yb3V0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzkwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL2pvaW5lcl9yb3V0ZXIuY3BwCkBAIC0wLDAgKzEsNTQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBKb2luZXIgUm91dGVyIHJvbGUuCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKyNkZWZpbmUgV1BQX05BTUUgImpvaW5lcl9yb3V0ZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImpvaW5lcl9yb3V0ZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDY0OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitKb2luZXJSb3V0ZXI6OkpvaW5lclJvdXRlcihUaHJlYWROZXRpZiAmYU5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtU29ja2V0KGFOZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtUmVsYXlUcmFuc21pdChPVF9VUklfUEFUSF9SRUxBWV9UWCwgJkpvaW5lclJvdXRlcjo6SGFuZGxlUmVsYXlUcmFuc21pdCwgdGhpcyksCisgICAgbVRpbWVyKGFOZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZKb2luZXJSb3V0ZXI6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtSm9pbmVyVWRwUG9ydCgwKSwKKyAgICBtSXNKb2luZXJQb3J0Q29uZmlndXJlZChmYWxzZSksCisgICAgbUV4cGVjdEpvaW5FbnRSc3AoZmFsc2UpCit7CisgICAgbVNvY2tldC5HZXRTb2NrTmFtZSgpLm1Qb3J0ID0gT1BFTlRIUkVBRF9DT05GSUdfSk9JTkVSX1VEUF9QT1JUOworICAgIGFOZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVJlbGF5VHJhbnNtaXQpOworICAgIG1OZXRpZkNhbGxiYWNrLlNldChIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCwgdGhpcyk7CisgICAgYU5ldGlmLlJlZ2lzdGVyQ2FsbGJhY2sobU5ldGlmQ2FsbGJhY2spOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXJSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChhRmxhZ3MpOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0TWxlKCkuR2V0RGV2aWNlTW9kZSgpICYgTWxlOjpNb2RlVGx2OjprTW9kZUZGRCk7CisgICAgVmVyaWZ5T3JFeGl0KGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworCisgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuUmVtb3ZlVW5zZWN1cmVQb3J0KG1Tb2NrZXQuR2V0U29ja05hbWUoKS5tUG9ydCk7CisKKyAgICBpZiAobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5Jc0pvaW5pbmdFbmFibGVkKCkpCisgICAgeworICAgICAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworCisgICAgICAgIHNvY2thZGRyLm1Qb3J0ID0gR2V0Sm9pbmVyVWRwUG9ydCgpOworCisgICAgICAgIG1Tb2NrZXQuT3BlbigmSm9pbmVyUm91dGVyOjpIYW5kbGVVZHBSZWNlaXZlLCB0aGlzKTsKKyAgICAgICAgbVNvY2tldC5CaW5kKHNvY2thZGRyKTsKKyAgICAgICAgbmV0aWYuR2V0SXA2RmlsdGVyKCkuQWRkVW5zZWN1cmVQb3J0KHNvY2thZGRyLm1Qb3J0KTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiSm9pbmVyIFJvdXRlcjogc3RhcnQiKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVNvY2tldC5DbG9zZSgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgSm9pbmVyUm91dGVyOjpHZXRCb3JkZXJBZ2VudFJsb2ModWludDE2X3QgJmFSbG9jKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEJvcmRlckFnZW50TG9jYXRvclRsdiAqYm9yZGVyQWdlbnRMb2NhdG9yOworCisgICAgYm9yZGVyQWdlbnRMb2NhdG9yID0gc3RhdGljX2Nhc3Q8Qm9yZGVyQWdlbnRMb2NhdG9yVGx2ICo+KEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRsdjo6a0JvcmRlckFnZW50TG9jYXRvcikpOworICAgIFZlcmlmeU9yRXhpdChib3JkZXJBZ2VudExvY2F0b3IgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgYVJsb2MgPSBib3JkZXJBZ2VudExvY2F0b3ItPkdldEJvcmRlckFnZW50TG9jYXRvcigpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordWludDE2X3QgSm9pbmVyUm91dGVyOjpHZXRKb2luZXJVZHBQb3J0KHZvaWQpCit7CisgICAgdWludDE2X3QgcnZhbCA9IE9QRU5USFJFQURfQ09ORklHX0pPSU5FUl9VRFBfUE9SVDsKKyAgICBKb2luZXJVZHBQb3J0VGx2ICpqb2luZXJVZHBQb3J0OworCisgICAgVmVyaWZ5T3JFeGl0KCFtSXNKb2luZXJQb3J0Q29uZmlndXJlZCwgcnZhbCA9IG1Kb2luZXJVZHBQb3J0KTsKKworICAgIGpvaW5lclVkcFBvcnQgPSBzdGF0aWNfY2FzdDxKb2luZXJVZHBQb3J0VGx2ICo+KEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGx2OjprSm9pbmVyVWRwUG9ydCkpOworICAgIFZlcmlmeU9yRXhpdChqb2luZXJVZHBQb3J0ICE9IE5VTEwpOworCisgICAgcnZhbCA9IGpvaW5lclVkcFBvcnQtPkdldFVkcFBvcnQoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBKb2luZXJSb3V0ZXI6OlNldEpvaW5lclVkcFBvcnQodWludDE2X3QgYUpvaW5lclVkcFBvcnQpCit7CisgICAgb3RMb2dGdW5jRW50cnkoKTsKKyAgICBtSm9pbmVyVWRwUG9ydCA9IGFKb2luZXJVZHBQb3J0OworICAgIG1Jc0pvaW5lclBvcnRDb25maWd1cmVkID0gdHJ1ZTsKKyAgICBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgSm9pbmVyUm91dGVyOjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Sm9pbmVyUm91dGVyICo+KGFDb250ZXh0KS0+SGFuZGxlVWRwUmVjZWl2ZSgqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIEpvaW5lclVkcFBvcnRUbHYgdWRwUG9ydDsKKyAgICBKb2luZXJJaWRUbHYgaWlkOworICAgIEpvaW5lclJvdXRlckxvY2F0b3JUbHYgcmxvYzsKKyAgICBFeHRlbmRlZFRsdiB0bHY7CisgICAgdWludDE2X3QgYm9yZGVyQWdlbnRSbG9jOworCisgICAgb3RMb2dGdW5jRW50cnlNc2coImZyb20gcGVlcjogJWxsWCIsCisgICAgICAgICAgICAgICAgICAgICAgSG9zdFN3YXA2NCgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50NjRfdCAqPihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04ICsgOCkpKTsKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJKb2luZXJSb3V0ZXI6OkhhbmRsZVVkcFJlY2VpdmUiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRCb3JkZXJBZ2VudFJsb2MoYm9yZGVyQWdlbnRSbG9jKSk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX1JFTEFZX1JYKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgdWRwUG9ydC5Jbml0KCk7CisgICAgdWRwUG9ydC5TZXRVZHBQb3J0KGFNZXNzYWdlSW5mby5HZXRQZWVyUG9ydCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ1ZHBQb3J0LCBzaXplb2YodWRwUG9ydCkpKTsKKworICAgIGlpZC5Jbml0KCk7CisgICAgaWlkLlNldElpZChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04ICsgOCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmaWlkLCBzaXplb2YoaWlkKSkpOworCisgICAgcmxvYy5Jbml0KCk7CisgICAgcmxvYy5TZXRKb2luZXJSb3V0ZXJMb2NhdG9yKG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZybG9jLCBzaXplb2YocmxvYykpKTsKKworICAgIHRsdi5TZXRUeXBlKFRsdjo6a0pvaW5lckR0bHNFbmNhcHN1bGF0aW9uKTsKKyAgICB0bHYuU2V0TGVuZ3RoKGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKworICAgIHdoaWxlIChhTWVzc2FnZS5HZXRPZmZzZXQoKSA8IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKyAgICAgICAgdWludDhfdCB0bXBbMTZdOworCisgICAgICAgIGlmIChsZW5ndGggPj0gc2l6ZW9mKHRtcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHNpemVvZih0bXApOworICAgICAgICB9CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgbGVuZ3RoLCB0bXApOworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGxlbmd0aCk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCh0bXAsIGxlbmd0aCkpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KGJvcmRlckFnZW50UmxvYyk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJTZW50IHJlbGF5IHJ4Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7Cit9CisKK3ZvaWQgSm9pbmVyUm91dGVyOjpIYW5kbGVSZWxheVRyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Sm9pbmVyUm91dGVyICo+KGFDb250ZXh0KS0+SGFuZGxlUmVsYXlUcmFuc21pdCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZVJlbGF5VHJhbnNtaXQoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgSm9pbmVyVWRwUG9ydFRsdiBqb2luZXJQb3J0OworICAgIEpvaW5lcklpZFRsdiBqb2luZXJJaWQ7CisgICAgSm9pbmVyUm91dGVyS2VrVGx2IGtlazsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgcmVsYXkgdHJhbnNtaXQiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprSm9pbmVyVWRwUG9ydCwgc2l6ZW9mKGpvaW5lclBvcnQpLCBqb2luZXJQb3J0KSk7CisgICAgVmVyaWZ5T3JFeGl0KGpvaW5lclBvcnQuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprSm9pbmVySWlkLCBzaXplb2Yoam9pbmVySWlkKSwgam9pbmVySWlkKSk7CisgICAgVmVyaWZ5T3JFeGl0KGpvaW5lcklpZC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VmFsdWVPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a0pvaW5lckR0bHNFbmNhcHN1bGF0aW9uLCBvZmZzZXQsIGxlbmd0aCkpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbVNvY2tldC5OZXdNZXNzYWdlKDApKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldFByaW9yaXR5KGtNZXNoQ29QTWVzc2FnZVByaW9yaXR5KTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGZhbHNlKTsKKworICAgIHdoaWxlIChsZW5ndGgpCisgICAgeworICAgICAgICB1aW50MTZfdCBjb3B5TGVuZ3RoID0gbGVuZ3RoOworICAgICAgICB1aW50OF90IHRtcFsxNl07CisKKyAgICAgICAgaWYgKGNvcHlMZW5ndGggPj0gc2l6ZW9mKHRtcCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvcHlMZW5ndGggPSBzaXplb2YodG1wKTsKKyAgICAgICAgfQorCisgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBjb3B5TGVuZ3RoLCB0bXApOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRtcCwgY29weUxlbmd0aCkpOworCisgICAgICAgIG9mZnNldCArPSBjb3B5TGVuZ3RoOworICAgICAgICBsZW5ndGggLT0gY29weUxlbmd0aDsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5Db3B5VG8ob2Zmc2V0LCAwLCBsZW5ndGgsICptZXNzYWdlKTsKKworICAgIG1lc3NhZ2VJbmZvLm1QZWVyQWRkci5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICBtZW1jcHkobWVzc2FnZUluZm8ubVBlZXJBZGRyLm1GaWVsZHMubTggKyA4LCBqb2luZXJJaWQuR2V0SWlkKCksIDgpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGpvaW5lclBvcnQuR2V0VWRwUG9ydCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChHZXROZXRpZigpLkdldEludGVyZmFjZUlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuU2VuZFRvKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtKb2luZXJSb3V0ZXJLZWssIHNpemVvZihrZWspLCBrZWspID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBrZWsiKTsKKworICAgICAgICBEZWxheVNlbmRpbmdKb2luZXJFbnRydXN0KG1lc3NhZ2VJbmZvLCBrZWspOworICAgIH0KKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKK30KKworCitvdEVycm9yIEpvaW5lclJvdXRlcjo6RGVsYXlTZW5kaW5nSm9pbmVyRW50cnVzdChjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKb2luZXJSb3V0ZXJLZWtUbHYgJmFLZWspCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIE5ldHdvcmtNYXN0ZXJLZXlUbHYgbWFzdGVyS2V5OworICAgIE1lc2hMb2NhbFByZWZpeFRsdiBtZXNoTG9jYWxQcmVmaXg7CisgICAgRXh0ZW5kZWRQYW5JZFRsdiBleHRlbmRlZFBhbklkOworICAgIE5ldHdvcmtOYW1lVGx2IG5ldHdvcmtOYW1lOworICAgIE5ldHdvcmtLZXlTZXF1ZW5jZVRsdiBuZXR3b3JrS2V5U2VxdWVuY2U7CisgICAgY29uc3QgVGx2ICp0bHY7CisKKyAgICBEZWxheWVkSm9pbkVudEhlYWRlciBkZWxheWVkTWVzc2FnZTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfSk9JTkVSX0VOVFJVU1QpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbWVzc2FnZS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZUpvaW5lckVudHJ1c3QpOworCisgICAgbWFzdGVyS2V5LkluaXQoKTsKKyAgICBtYXN0ZXJLZXkuU2V0TmV0d29ya01hc3RlcktleShuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0TWFzdGVyS2V5KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJm1hc3RlcktleSwgc2l6ZW9mKG1hc3RlcktleSkpKTsKKworICAgIG1lc2hMb2NhbFByZWZpeC5Jbml0KCk7CisgICAgbWVzaExvY2FsUHJlZml4LlNldE1lc2hMb2NhbFByZWZpeChuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbWVzaExvY2FsUHJlZml4LCBzaXplb2YobWVzaExvY2FsUHJlZml4KSkpOworCisgICAgZXh0ZW5kZWRQYW5JZC5Jbml0KCk7CisgICAgZXh0ZW5kZWRQYW5JZC5TZXRFeHRlbmRlZFBhbklkKG5ldGlmLkdldE1hYygpLkdldEV4dGVuZGVkUGFuSWQoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmZXh0ZW5kZWRQYW5JZCwgc2l6ZW9mKGV4dGVuZGVkUGFuSWQpKSk7CisKKyAgICBuZXR3b3JrTmFtZS5Jbml0KCk7CisgICAgbmV0d29ya05hbWUuU2V0TmV0d29ya05hbWUobmV0aWYuR2V0TWFjKCkuR2V0TmV0d29ya05hbWUoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya05hbWUsIHNpemVvZihUbHYpICsgbmV0d29ya05hbWUuR2V0TGVuZ3RoKCkpKTsKKworICAgIGlmICgodGx2ID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRsdihUbHY6OmtBY3RpdmVUaW1lc3RhbXApKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCh0bHYsIHNpemVvZihUbHYpICsgdGx2LT5HZXRMZW5ndGgoKSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBBY3RpdmVUaW1lc3RhbXBUbHYgYWN0aXZlVGltZXN0YW1wOworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuSW5pdCgpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApKSk7CisgICAgfQorCisgICAgaWYgKCh0bHYgPSBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0VGx2KFRsdjo6a0NoYW5uZWxNYXNrKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQodGx2LCBzaXplb2YoVGx2KSArIHRsdi0+R2V0TGVuZ3RoKCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQ2hhbm5lbE1hc2tUbHYgY2hhbm5lbE1hc2s7CisgICAgICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKyAgICB9CisKKyAgICBpZiAoKHRsdiA9IG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5HZXRUbHYoVGx2OjprUFNLYykpICE9IE5VTEwpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRsdiwgc2l6ZW9mKFRsdikgKyB0bHYtPkdldExlbmd0aCgpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFBTS2NUbHYgcHNrYzsKKyAgICAgICAgcHNrYy5Jbml0KCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBza2MsIHNpemVvZihwc2tjKSkpOworICAgIH0KKworICAgIGlmICgodGx2ID0gbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRsdihUbHY6OmtTZWN1cml0eVBvbGljeSkpICE9IE5VTEwpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHRsdiwgc2l6ZW9mKFRsdikgKyB0bHYtPkdldExlbmd0aCgpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFNlY3VyaXR5UG9saWN5VGx2IHNlY3VyaXR5UG9saWN5OworICAgICAgICBzZWN1cml0eVBvbGljeS5Jbml0KCk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlY3VyaXR5UG9saWN5LCBzaXplb2Yoc2VjdXJpdHlQb2xpY3kpKSk7CisgICAgfQorCisgICAgbmV0d29ya0tleVNlcXVlbmNlLkluaXQoKTsKKyAgICBuZXR3b3JrS2V5U2VxdWVuY2UuU2V0TmV0d29ya0tleVNlcXVlbmNlKG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRDdXJyZW50S2V5U2VxdWVuY2UoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbmV0d29ya0tleVNlcXVlbmNlLCBuZXR3b3JrS2V5U2VxdWVuY2UuR2V0U2l6ZSgpKSk7CisKKyAgICBtZXNzYWdlSW5mbyA9IGFNZXNzYWdlSW5mbzsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworCisgICAgZGVsYXllZE1lc3NhZ2UgPSBEZWxheWVkSm9pbkVudEhlYWRlcihUaW1lcjo6R2V0Tm93KCkgKyBrRGVsYXlKb2luRW50LCBtZXNzYWdlSW5mbywgYUtlay5HZXRLZWsoKSk7CisgICAgU3VjY2Vzc09yRXhpdChkZWxheWVkTWVzc2FnZS5BcHBlbmRUbygqbWVzc2FnZSkpOworICAgIG1EZWxheWVkSm9pbkVudHMuRW5xdWV1ZSgqbWVzc2FnZSk7CisKKyAgICBpZiAoIW1UaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChrRGVsYXlKb2luRW50KTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgb3RMb2dGdW5jRXhpdEVycihlcnJvcik7CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgSm9pbmVyUm91dGVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFNlbmREZWxheWVkSm9pbmVyRW50cnVzdCgpOworfQorCit2b2lkIEpvaW5lclJvdXRlcjo6U2VuZERlbGF5ZWRKb2luZXJFbnRydXN0KHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBEZWxheWVkSm9pbkVudEhlYWRlciBkZWxheWVkSm9pbkVudDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbURlbGF5ZWRKb2luRW50cy5HZXRIZWFkKCk7CisgICAgdWludDMyX3Qgbm93ID0gVGltZXI6OkdldE5vdygpOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZSAhPSBOVUxMKTsKKyAgICBWZXJpZnlPckV4aXQoIW1UaW1lci5Jc1J1bm5pbmcoKSk7CisKKyAgICBkZWxheWVkSm9pbkVudC5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAvLyBUaGUgbWVzc2FnZSBjYW4gYmUgc2VudCBkdXJpbmcgQ29BUCB0cmFuc2FjdGlvbiBpZiBLRUsgZGlkIG5vdCBjaGFuZ2UgKGkuZS4gcmV0cmFuc21pc3Npb24pLgorICAgIFZlcmlmeU9yRXhpdCghbUV4cGVjdEpvaW5FbnRSc3AgfHwKKyAgICAgICAgICAgICAgICAgbWVtY21wKG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRLZWsoKSwgZGVsYXllZEpvaW5FbnQuR2V0S2VrKCksIEtleU1hbmFnZXI6OmtNYXhLZXlMZW5ndGgpID09IDApOworCisKKyAgICBpZiAoZGVsYXllZEpvaW5FbnQuSXNMYXRlcihub3cpKQorICAgIHsKKyAgICAgICAgbVRpbWVyLlN0YXJ0KGRlbGF5ZWRKb2luRW50LkdldFNlbmRUaW1lKCkgLSBub3cpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVsYXllZEpvaW5FbnRzLkRlcXVldWUoKm1lc3NhZ2UpOworCisgICAgICAgIC8vIFJlbW92ZSB0aGUgRGVsYXllZEpvaW5FbnRIZWFkZXIgZnJvbSB0aGUgbWVzc2FnZS4KKyAgICAgICAgRGVsYXllZEpvaW5FbnRIZWFkZXI6OlJlbW92ZUZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIC8vIFNldCBLRUsgdG8gb25lIHVzZWQgZm9yIHRoaXMgbWVzc2FnZS4KKyAgICAgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldEtlayhkZWxheWVkSm9pbkVudC5HZXRLZWsoKSk7CisKKyAgICAgICAgLy8gU2VuZCB0aGUgbWVzc2FnZS4KKyAgICAgICAgbWVtY3B5KCZtZXNzYWdlSW5mbywgZGVsYXllZEpvaW5FbnQuR2V0TWVzc2FnZUluZm8oKSwgc2l6ZW9mKG1lc3NhZ2VJbmZvKSk7CisKKyAgICAgICAgaWYgKFNlbmRKb2luZXJFbnRydXN0KCptZXNzYWdlLCBtZXNzYWdlSW5mbykgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICAgICAgbVRpbWVyLlN0YXJ0KDApOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiA7Cit9CisKK290RXJyb3IgSm9pbmVyUm91dGVyOjpTZW5kSm9pbmVyRW50cnVzdChNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIG5ldGlmLkdldENvYXAoKS5BYm9ydFRyYW5zYWN0aW9uKCZKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZSwgdGhpcyk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJTZW5kaW5nIEpPSU5fRU5ULm50ZiIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZSwgdGhpcykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiU2VudCBqb2luZXIgZW50cnVzdCBsZW5ndGggPSAlZCIsIGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKyAgICBvdExvZ0NlcnRNZXNoQ29QKEdldEluc3RhbmNlKCksICJbVEhDSV0gZGlyZWN0aW9uPXNlbmQgfCB0eXBlPUpPSU5fRU5ULm50ZiIpOworCisgICAgbUV4cGVjdEpvaW5FbnRSc3AgPSB0cnVlOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKb2luZXJSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVKb2luZXJFbnRydXN0UmVzcG9uc2Uoc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKK30KKwordm9pZCBKb2luZXJSb3V0ZXI6OkhhbmRsZUpvaW5lckVudHJ1c3RSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIG1FeHBlY3RKb2luRW50UnNwID0gZmFsc2U7CisgICAgU2VuZERlbGF5ZWRKb2luZXJFbnRydXN0KCk7CisKKyAgICBWZXJpZnlPckV4aXQoYVJlc3VsdCA9PSBPVF9FUlJPUl9OT05FICYmIGFIZWFkZXIgIT0gTlVMTCAmJiBhTWVzc2FnZSAhPSBOVUxMKTsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLT5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX0NIQU5HRUQpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZSBqb2luZXIgZW50cnVzdCByZXNwb25zZSIpOworICAgIG90TG9nQ2VydE1lc2hDb1AoR2V0SW5zdGFuY2UoKSwgIltUSENJXSBkaXJlY3Rpb249cmVjdiB8IHR5cGU9Sk9JTl9FTlQucnNwIik7CisKK2V4aXQ6CisgICAgcmV0dXJuIDsKK30KKworSm9pbmVyUm91dGVyICZKb2luZXJSb3V0ZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEpvaW5lclJvdXRlciAmam9pbmVyID0gKnN0YXRpY19jYXN0PEpvaW5lclJvdXRlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBKb2luZXJSb3V0ZXIgJmpvaW5lciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRKb2luZXJSb3V0ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGpvaW5lcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIER0bHMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9qb2luZXJfcm91dGVyLmhwcCBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyX3JvdXRlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2ZjcyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3Avam9pbmVyX3JvdXRlci5ocHAKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBKb2luZXIgUm91dGVyIHJvbGUuCisgKi8KKworI2lmbmRlZiBKT0lORVJfUk9VVEVSX0hQUF8KKyNkZWZpbmUgSk9JTkVSX1JPVVRFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9rZXlfbWFuYWdlci5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgTWVzaENvUCB7CisKK2NsYXNzIEpvaW5lclJvdXRlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIEpvaW5lciBSb3V0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgSm9pbmVyUm91dGVyKFRocmVhZE5ldGlmICZhTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSm9pbmVyIFVEUCBQb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEpvaW5lciBVRFAgUG9ydCBudW1iZXIgLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Sm9pbmVyVWRwUG9ydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEpvaW5lciBVRFAgUG9ydC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIFRoZSBKb2luZXIgVURQIFBvcnQgbnVtYmVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIEpvaW5lciBVRFAgUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0Sm9pbmVyVWRwUG9ydCh1aW50MTZfdCBhSm9pbmVyVWRwUG9ydCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0RlbGF5Sm9pbkVudCA9IDUwLCAgLy8vPCBtaWxsaXNlY29uZHMKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWxheVRyYW5zbWl0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUmVsYXlUcmFuc21pdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlSm9pbmVyRW50cnVzdFJlc3BvbnNlKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciByZXN1bHQpOworICAgIHZvaWQgSGFuZGxlSm9pbmVyRW50cnVzdFJlc3BvbnNlKENvYXA6OkhlYWRlciAqYUhlYWRlciwgTWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIHJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgb3RFcnJvciBEZWxheVNlbmRpbmdKb2luZXJFbnRydXN0KGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgY29uc3QgSm9pbmVyUm91dGVyS2VrVGx2ICZhS2VrKTsKKyAgICB2b2lkIFNlbmREZWxheWVkSm9pbmVyRW50cnVzdCh2b2lkKTsKKyAgICBvdEVycm9yIFNlbmRKb2luZXJFbnRydXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBHZXRCb3JkZXJBZ2VudFJsb2ModWludDE2X3QgJmFSbG9jKTsKKworICAgIHN0YXRpYyBKb2luZXJSb3V0ZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIElwNjo6TmV0aWZDYWxsYmFjayBtTmV0aWZDYWxsYmFjazsKKworICAgIElwNjo6VWRwU29ja2V0IG1Tb2NrZXQ7CisgICAgQ29hcDo6UmVzb3VyY2UgbVJlbGF5VHJhbnNtaXQ7CisKKyAgICBUaW1lciBtVGltZXI7CisgICAgTWVzc2FnZVF1ZXVlIG1EZWxheWVkSm9pbkVudHM7CisKKyAgICB1aW50MTZfdCBtSm9pbmVyVWRwUG9ydDsKKworICAgIGJvb2wgbUlzSm9pbmVyUG9ydENvbmZpZ3VyZWQgOiAxOworICAgIGJvb2wgbUV4cGVjdEpvaW5FbnRSc3AgOiAxOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBmb3IgZGVsYXlpbmcgSk9JTl9FTlQubnRmIG1lc3NhZ2VzLgorICoKKyAqLworY2xhc3MgRGVsYXllZEpvaW5FbnRIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRGVsYXllZEpvaW5FbnRIZWFkZXIodm9pZCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdCB3aXRoIHNwZWNpZmljIHZhbHVlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZW5kVGltZSAgICAgVGltZSB3aGVuIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQuCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBJUHY2IGFkZHJlc3Mgb2YgdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBEZWxheWVkSm9pbkVudEhlYWRlcih1aW50MzJfdCBhU2VuZFRpbWUsIElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgY29uc3QgdWludDhfdCAqYUtlaykgeworICAgICAgICBtU2VuZFRpbWUgPSBhU2VuZFRpbWU7CisgICAgICAgIG1NZXNzYWdlSW5mbyA9IGFNZXNzYWdlSW5mbzsKKyAgICAgICAgbWVtY3B5KCZtS2VrLCBhS2VrLCBzaXplb2YobUtlaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgZGVsYXllZCByZXNwb25zZSBoZWFkZXIgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBkZWxheWVkIHJlc3BvbnNlIGhlYWRlciBmcm9tIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgUmVhZEZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGRlbGF5ZWQgcmVzcG9uc2UgaGVhZGVyIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBSZW1vdmVGcm9tKE1lc3NhZ2UgJmFNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBhTWVzc2FnZS5TZXRMZW5ndGgoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoRGVsYXllZEpvaW5FbnRIZWFkZXIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdGltZSB3aGVuIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSB0aW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFNlbmRUaW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZW5kVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRlc3RpbmF0aW9uIG9mIHRoZSBkZWxheWVkIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSBkZXN0aW5hdGlvbiBvZiB0aGUgZGVsYXllZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqR2V0TWVzc2FnZUluZm8odm9pZCkgY29uc3QgeyByZXR1cm4gJm1NZXNzYWdlSW5mbzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEtFSyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNlbmQgdGhlIGRlbGF5ZWQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHBvaW50ZXIgdG8gdGhlIEtFSy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEtlayh2b2lkKSBjb25zdCB7IHJldHVybiBtS2VrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1TZW5kVGltZSkgPiAwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1TZW5kVGltZSkgPCAwKTsgfQorCitwcml2YXRlOgorICAgIElwNjo6TWVzc2FnZUluZm8gbU1lc3NhZ2VJbmZvOyAgICAgICAgICAgIC8vLzwgTWVzc2FnZSBpbmZvIG9mIHRoZSBtZXNzYWdlIHRvIHNlbmQuCisgICAgdWludDMyX3QgbVNlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUaW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICB1aW50OF90IG1LZWtbS2V5TWFuYWdlcjo6a01heEtleUxlbmd0aF07ICAvLy88IEtFSyB1c2VkIGJ5IE1BQyBsYXllciB0byBlbmNvZGUgdGhpcyBtZXNzYWdlLgorfTsKKworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gSk9JTkVSX1JPVVRFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL2xlYWRlci5jcHAgYi9zcmMvY29yZS9tZXNoY29wL2xlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkMmVlOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvbGVhZGVyLmNwcApAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIE1lc2hDb1AgTGVhZGVyLgorICovCisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCisjZGVmaW5lIFdQUF9OQU1FICJsZWFkZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImxlYWRlci5ocHAiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitMZWFkZXI6OkxlYWRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtUGV0aXRpb24oT1RfVVJJX1BBVEhfTEVBREVSX1BFVElUSU9OLCBMZWFkZXI6OkhhbmRsZVBldGl0aW9uLCB0aGlzKSwKKyAgICBtS2VlcEFsaXZlKE9UX1VSSV9QQVRIX0xFQURFUl9LRUVQX0FMSVZFLCBMZWFkZXI6OkhhbmRsZUtlZXBBbGl2ZSwgdGhpcyksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsIEhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtRGVsYXlUaW1lck1pbmltYWwoRGVsYXlUaW1lclRsdjo6a0RlbGF5VGltZXJNaW5pbWFsKSwKKyAgICBtU2Vzc2lvbklkKDB4ZmZmZikKK3sKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1QZXRpdGlvbik7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtS2VlcEFsaXZlKTsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZVBldGl0aW9uKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PExlYWRlciAqPihhQ29udGV4dCktPkhhbmRsZVBldGl0aW9uKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlUGV0aXRpb24oQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIENvbW1pc3Npb25pbmdEYXRhIGRhdGE7CisgICAgQ29tbWlzc2lvbmVySWRUbHYgY29tbWlzc2lvbmVySWQ7CisgICAgU3RhdGVUbHY6OlN0YXRlIHN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJyZWNlaXZlZCBwZXRpdGlvbiIpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ29tbWlzc2lvbmVySWQsIHNpemVvZihjb21taXNzaW9uZXJJZCksIGNvbW1pc3Npb25lcklkKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNvbW1pc3Npb25lcklkLklzVmFsaWQoKSk7CisKKyAgICBpZiAobVRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFzdHJuY21wKGNvbW1pc3Npb25lcklkLkdldENvbW1pc3Npb25lcklkKCksIG1Db21taXNzaW9uZXJJZC5HZXRDb21taXNzaW9uZXJJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1Db21taXNzaW9uZXJJZCkpKTsKKworICAgICAgICBSZXNpZ25Db21taXNzaW9uZXIoKTsKKyAgICB9CisKKyAgICBkYXRhLm1Cb3JkZXJBZ2VudExvY2F0b3IuSW5pdCgpOworICAgIGRhdGEubUJvcmRlckFnZW50TG9jYXRvci5TZXRCb3JkZXJBZ2VudExvY2F0b3IoSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSkpOworCisgICAgZGF0YS5tQ29tbWlzc2lvbmVyU2Vzc2lvbklkLkluaXQoKTsKKyAgICBkYXRhLm1Db21taXNzaW9uZXJTZXNzaW9uSWQuU2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKCsrbVNlc3Npb25JZCk7CisKKyAgICBkYXRhLm1TdGVlcmluZ0RhdGEuSW5pdCgpOworICAgIGRhdGEubVN0ZWVyaW5nRGF0YS5TZXRMZW5ndGgoMSk7CisgICAgZGF0YS5tU3RlZXJpbmdEYXRhLkNsZWFyKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TZXRDb21taXNzaW9uaW5nRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuR2V0TGVuZ3RoKCkpKTsKKworICAgIG1Db21taXNzaW9uZXJJZCA9IGNvbW1pc3Npb25lcklkOworCisgICAgc3RhdGUgPSBTdGF0ZVRsdjo6a0FjY2VwdDsKKyAgICBtVGltZXIuU3RhcnQoVGltZXI6OlNlY1RvTXNlYyhrVGltZW91dExlYWRlclBldGl0aW9uKSk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgU2VuZFBldGl0aW9uUmVzcG9uc2UoYUhlYWRlciwgYU1lc3NhZ2VJbmZvLCBzdGF0ZSk7Cit9CisKK290RXJyb3IgTGVhZGVyOjpTZW5kUGV0aXRpb25SZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVUbHY6OlN0YXRlIGFTdGF0ZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgcmVzcG9uc2VIZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGUuSW5pdCgpOworICAgIHN0YXRlLlNldFN0YXRlKGFTdGF0ZSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdGUsIHNpemVvZihzdGF0ZSkpKTsKKworICAgIGlmIChtVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICB1aW50MTZfdCBsZW4gPSBzaXplb2YoVGx2KSArIG1Db21taXNzaW9uZXJJZC5HZXRMZW5ndGgoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmbUNvbW1pc3Npb25lcklkLCBsZW4pKTsKKyAgICB9CisKKyAgICBpZiAoYVN0YXRlID09IFN0YXRlVGx2OjprQWNjZXB0KQorICAgIHsKKyAgICAgICAgc2Vzc2lvbklkLkluaXQoKTsKKyAgICAgICAgc2Vzc2lvbklkLlNldENvbW1pc3Npb25lclNlc3Npb25JZChtU2Vzc2lvbklkKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc2Vzc2lvbklkLCBzaXplb2Yoc2Vzc2lvbklkKSkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwZXRpdGlvbiByZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZUtlZXBBbGl2ZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TGVhZGVyICo+KGFDb250ZXh0KS0+SGFuZGxlS2VlcEFsaXZlKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlS2VlcEFsaXZlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBTdGF0ZVRsdiBzdGF0ZTsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgc2Vzc2lvbklkOworICAgIFN0YXRlVGx2OjpTdGF0ZSByZXNwb25zZVN0YXRlOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAicmVjZWl2ZWQga2VlcCBhbGl2ZSIpOworCisgICAgU3VjY2Vzc09yRXhpdChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU3RhdGUsIHNpemVvZihzdGF0ZSksIHN0YXRlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHN0YXRlLklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQsIHNpemVvZihzZXNzaW9uSWQpLCBzZXNzaW9uSWQpKTsKKyAgICBWZXJpZnlPckV4aXQoc2Vzc2lvbklkLklzVmFsaWQoKSk7CisKKyAgICBpZiAoc2Vzc2lvbklkLkdldENvbW1pc3Npb25lclNlc3Npb25JZCgpICE9IG1TZXNzaW9uSWQpCisgICAgeworICAgICAgICByZXNwb25zZVN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXRlLkdldFN0YXRlKCkgIT0gU3RhdGVUbHY6OmtBY2NlcHQpCisgICAgeworICAgICAgICByZXNwb25zZVN0YXRlID0gU3RhdGVUbHY6OmtSZWplY3Q7CisgICAgICAgIFJlc2lnbkNvbW1pc3Npb25lcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXNwb25zZVN0YXRlID0gU3RhdGVUbHY6OmtBY2NlcHQ7CisgICAgICAgIG1UaW1lci5TdGFydChUaW1lcjo6U2VjVG9Nc2VjKGtUaW1lb3V0TGVhZGVyUGV0aXRpb24pKTsKKyAgICB9CisKKyAgICBTZW5kS2VlcEFsaXZlUmVzcG9uc2UoYUhlYWRlciwgYU1lc3NhZ2VJbmZvLCByZXNwb25zZVN0YXRlKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgTGVhZGVyOjpTZW5kS2VlcEFsaXZlUmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIFN0YXRlVGx2IHN0YXRlOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgcmVzcG9uc2VIZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGUuSW5pdCgpOworICAgIHN0YXRlLlNldFN0YXRlKGFTdGF0ZSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdGUsIHNpemVvZihzdGF0ZSkpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBrZWVwIGFsaXZlIHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlcjo6U2VuZERhdGFzZXRDaGFuZ2VkKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9EQVRBU0VUX0NIQU5HRUQpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIoYUFkZHJlc3MpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgZGF0YXNldCBjaGFuZ2VkIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlcjo6U2V0RGVsYXlUaW1lck1pbmltYWwodWludDMyX3QgYURlbGF5VGltZXJNaW5pbWFsKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFZlcmlmeU9yRXhpdCgoYURlbGF5VGltZXJNaW5pbWFsICE9IDAgJiYgYURlbGF5VGltZXJNaW5pbWFsIDwgRGVsYXlUaW1lclRsdjo6a0RlbGF5VGltZXJEZWZhdWx0KSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIG1EZWxheVRpbWVyTWluaW1hbCA9IGFEZWxheVRpbWVyTWluaW1hbDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IExlYWRlcjo6R2V0RGVsYXlUaW1lck1pbmltYWwodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlbGF5VGltZXJNaW5pbWFsOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFZlcmlmeU9yRXhpdChHZXROZXRpZigpLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpOworCisgICAgUmVzaWduQ29tbWlzc2lvbmVyKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIExlYWRlcjo6U2V0RW1wdHlDb21taXNzaW9uZXJEYXRhKHZvaWQpCit7CisgICAgQ29tbWlzc2lvbmVyU2Vzc2lvbklkVGx2IG1Db21taXNzaW9uZXJTZXNzaW9uSWQ7CisKKyAgICBtQ29tbWlzc2lvbmVyU2Vzc2lvbklkLkluaXQoKTsKKyAgICBtQ29tbWlzc2lvbmVyU2Vzc2lvbklkLlNldENvbW1pc3Npb25lclNlc3Npb25JZCgrK21TZXNzaW9uSWQpOworCisgICAgR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlNldENvbW1pc3Npb25pbmdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbUNvbW1pc3Npb25lclNlc3Npb25JZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihUbHYpICsgbUNvbW1pc3Npb25lclNlc3Npb25JZC5HZXRMZW5ndGgoKSk7Cit9CisKK3ZvaWQgTGVhZGVyOjpSZXNpZ25Db21taXNzaW9uZXIodm9pZCkKK3sKKyAgICBtVGltZXIuU3RvcCgpOworICAgIFNldEVtcHR5Q29tbWlzc2lvbmVyRGF0YSgpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAiY29tbWlzc2lvbmVyIGluYWN0aXZlIik7Cit9CisKK0xlYWRlciAmTGVhZGVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBMZWFkZXIgJmxlYWRlciA9ICpzdGF0aWNfY2FzdDxMZWFkZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTGVhZGVyICZsZWFkZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0TGVhZGVyKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBsZWFkZXI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvbGVhZGVyLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvbGVhZGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRjN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9sZWFkZXIuaHBwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgYSBNZXNoQ29QIExlYWRlci4KKyAqLworCisjaWZuZGVmIE1FU0hDT1BfTEVBREVSX0hQUF8KKyNkZWZpbmUgTUVTSENPUF9MRUFERVJfSFBQXworCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ29tbWlzc2lvbmluZ0RhdGEKK3sKK3B1YmxpYzoKKyAgICB1aW50OF90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiBzaXplb2YoVGx2KSArIG1Cb3JkZXJBZ2VudExvY2F0b3IuR2V0TGVuZ3RoKCkgKworICAgICAgICAgICAgICAgc2l6ZW9mKFRsdikgKyBtQ29tbWlzc2lvbmVyU2Vzc2lvbklkLkdldExlbmd0aCgpICsKKyAgICAgICAgICAgICAgIHNpemVvZihUbHYpICsgbVN0ZWVyaW5nRGF0YS5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICBCb3JkZXJBZ2VudExvY2F0b3JUbHYgbUJvcmRlckFnZW50TG9jYXRvcjsKKyAgICBDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgbUNvbW1pc3Npb25lclNlc3Npb25JZDsKKyAgICBTdGVlcmluZ0RhdGFUbHYgbVN0ZWVyaW5nRGF0YTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCitjbGFzcyBMZWFkZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBMZWFkZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgTGVhZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBNR01UX0RBVEFTRVRfQ0hBTkdFRCBtZXNzYWdlIHRvIGNvbW1pc3Npb25lci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgVGhlIElQdjYgYWRkcmVzcyBvZiBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgTUdNVF9EQVRBU0VUX0NIQU5HRUQgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIGEgTUdNVF9EQVRBU0VUX0NIQU5HRUQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERhdGFzZXRDaGFuZ2VkKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBtaW5pbWFsIGRlbGF5IHRpbWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURlbGF5VGltZXJNaW5pbWFsIFRoZSB2YWx1ZSBvZiBtaW5pbWFsIGRlbGF5IHRpbWVyIChpbiBtcykuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgbWluaW1hbCBkZWxheSB0aW1lci4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JTlZBTElEX0FSR1MgSWYgQHAgYURlbGF5VGltZXJNaW5pbWFsIGlzIG5vdCB2YWxpZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0RGVsYXlUaW1lck1pbmltYWwodWludDMyX3QgYURlbGF5VGltZXJNaW5pbWFsKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgbWluaW1hbCBkZWxheSB0aW1lci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgdGhlIG1pbmlhbWwgZGVsYXkgdGltZXIgKGluIG1zKS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldERlbGF5VGltZXJNaW5pbWFsKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBlbXB0eSBDb21taXNzaW9uZXIgRGF0YSBUTFYgaW4gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVtcHR5Q29tbWlzc2lvbmVyRGF0YSh2b2lkKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVGltZW91dExlYWRlclBldGl0aW9uID0gNTAsIC8vLzwgVElNRU9VVF9MRUFEX1BFVCAoc2Vjb25kcykKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVBldGl0aW9uKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVBldGl0aW9uKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kUGV0aXRpb25SZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUtlZXBBbGl2ZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlS2VlcEFsaXZlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBTZW5kS2VlcEFsaXZlUmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdEhlYWRlciwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlVGx2OjpTdGF0ZSBhU3RhdGUpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIHZvaWQgUmVzaWduQ29tbWlzc2lvbmVyKHZvaWQpOworCisgICAgc3RhdGljIExlYWRlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgQ29hcDo6UmVzb3VyY2UgbVBldGl0aW9uOworICAgIENvYXA6OlJlc291cmNlIG1LZWVwQWxpdmU7CisgICAgVGltZXIgbVRpbWVyOworCisgICAgdWludDMyX3QgbURlbGF5VGltZXJNaW5pbWFsOworCisgICAgQ29tbWlzc2lvbmVySWRUbHYgbUNvbW1pc3Npb25lcklkOworICAgIHVpbnQxNl90IG1TZXNzaW9uSWQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSENPUF9MRUFERVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC9tZXNoY29wLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNWUyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcC5ocHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIE1lc2hDb1AuCisgKgorICovCisKKyNpZm5kZWYgTUVTSENPUF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfSFBQXworCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKK2VudW0KK3sKKyAgICBrTWVzaENvUE1lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2U6OmtQcmlvcml0eUhpZ2gsIC8vIFRoZSBwcmlvcml0eSBmb3IgTWVzaENvUCBtZXNzYWdlCit9OworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlIE1lc3NhZ2UgZm9yIE1lc2hDb1AKKyAqCisgKi8KK2lubGluZSBNZXNzYWdlICpOZXdNZXNoQ29QTWVzc2FnZShDb2FwOjpDb2FwICZhQ29hcCwgY29uc3QgQ29hcDo6SGVhZGVyICZhSGVhZGVyKQoreworICAgIHJldHVybiBhQ29hcC5OZXdNZXNzYWdlKGFIZWFkZXIsIGtNZXNoQ29QTWVzc2FnZVByaW9yaXR5KTsKK30KKworCit9ICAvLyBuYW1lc3BhY2UgTWVzaENvUAorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNRVNIQ09QX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE5MWRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9tZXNoY29wX3RsdnMuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNZWNoQ29wIFRMViBoZWxwZXIgZnVuY3Rpb25zLgorICovCisKKyNpbmNsdWRlICJtZXNoY29wX3RsdnMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitib29sIFN0ZWVyaW5nRGF0YVRsdjo6SXNDbGVhcmVkKHZvaWQpIGNvbnN0Cit7CisgICAgYm9vbCBydmFsID0gdHJ1ZTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IEdldExlbmd0aCgpOyBpKyspCisgICAgeworICAgICAgICBpZiAobVN0ZWVyaW5nRGF0YVtpXSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBydmFsID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCit2b2lkIFN0ZWVyaW5nRGF0YVRsdjo6Q29tcHV0ZUJsb29tRmlsdGVyKG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpCit7CisgICAgQ3JjMTYgY2NpdHQoQ3JjMTY6OmtDY2l0dCk7CisgICAgQ3JjMTYgYW5zaShDcmMxNjo6a0Fuc2kpOworCisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplb2Yob3RFeHRBZGRyZXNzKTsgaisrKQorICAgIHsKKyAgICAgICAgdWludDhfdCBieXRlID0gYUV4dEFkZHJlc3MtPm04W2pdOworICAgICAgICBjY2l0dC5VcGRhdGUoYnl0ZSk7CisgICAgICAgIGFuc2kuVXBkYXRlKGJ5dGUpOworICAgIH0KKworICAgIFNldEJpdChjY2l0dC5HZXQoKSAlIEdldE51bUJpdHMoKSk7CisgICAgU2V0Qml0KGFuc2kuR2V0KCkgJSBHZXROdW1CaXRzKCkpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKK30gIC8vIG5hbWVzcGFjZSBUaHJlYWQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvbWVzaGNvcF90bHZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDllNTJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwCkBAIC0wLDAgKzEsMjEwNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgTWVzaENvUCBUTFZzLgorICoKKyAqLworCisjaWZuZGVmIE1FU0hDT1BfVExWU19IUFBfCisjZGVmaW5lIE1FU0hDT1BfVExWU19IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29tbW9uL2NyYzE2LmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGx2cy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC90aW1lc3RhbXAuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OlJldmVyc2UzMjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWVzaENvUCB7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1lc2hDb1AgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGx2IDogcHVibGljIG90OjpUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNZXNoQ29QIFRMViBUeXBlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAga0NoYW5uZWwgICAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfQ0hBTk5FTCwgICAgICAgICAgICAgICAgICAgLy8vPCBDaGFubmVsIFRMVgorICAgICAgICBrUGFuSWQgICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9QQU5JRCwgICAgICAgICAgICAgICAgICAgICAvLy88IFBBTiBJRCBUTFYKKyAgICAgICAga0V4dGVuZGVkUGFuSWQgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfRVhUUEFOSUQsICAgICAgICAgICAgICAgICAgLy8vPCBFeHRlbmRlZCBQQU4gSUQgVExWCisgICAgICAgIGtOZXR3b3JrTmFtZSAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX05FVFdPUktOQU1FLCAgICAgICAgICAgICAgIC8vLzwgTmV3dG9yayBOYW1lIFRMVgorICAgICAgICBrUFNLYyAgICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9QU0tDLCAgICAgICAgICAgICAgICAgICAgICAvLy88IFBTS2MgVExWCisgICAgICAgIGtOZXR3b3JrTWFzdGVyS2V5ICAgICAgICA9IE9UX01FU0hDT1BfVExWX01BU1RFUktFWSwgICAgICAgICAgICAgICAgIC8vLzwgTmV0d29yayBNYXN0ZXIgS2V5IFRMVgorICAgICAgICBrTmV0d29ya0tleVNlcXVlbmNlICAgICAgPSBPVF9NRVNIQ09QX1RMVl9ORVRXT1JLX0tFWV9TRVFVRU5DRSwgICAgICAvLy88IE5ldHdvcmsgS2V5IFNlcXVlbmNlIFRMVgorICAgICAgICBrTWVzaExvY2FsUHJlZml4ICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9NRVNITE9DQUxQUkVGSVgsICAgICAgICAgICAvLy88IE1lc2ggTG9jYWwgUHJlZml4IFRMVgorICAgICAgICBrU3RlZXJpbmdEYXRhICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9TVEVFUklOR19EQVRBLCAgICAgICAgICAgICAvLy88IFN0ZWVyaW5nIERhdGEgVExWCisgICAgICAgIGtCb3JkZXJBZ2VudExvY2F0b3IgICAgICA9IE9UX01FU0hDT1BfVExWX0JPUkRFUl9BR0VOVF9STE9DLCAgICAgICAgIC8vLzwgQm9yZGVyIEFnZW50IExvY2F0b3IgVExWCisgICAgICAgIGtDb21taXNzaW9uZXJJZCAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0NPTU1JU1NJT05FUl9JRCwgICAgICAgICAgIC8vLzwgQ29tbWlzc2lvbmVyIElEIFRMVgorICAgICAgICBrQ29tbWlzc2lvbmVyU2Vzc2lvbklkICAgPSBPVF9NRVNIQ09QX1RMVl9DT01NX1NFU1NJT05fSUQsICAgICAgICAgICAvLy88IENvbW1pc3Npb25lciBTZXNzaW9uIElEIFRMVgorICAgICAgICBrU2VjdXJpdHlQb2xpY3kgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9TRUNVUklUWVBPTElDWSwgICAgICAgICAgICAvLy88IFNlY3VyaXR5IFBvbGljeSBUTFYKKyAgICAgICAga0dldCAgICAgICAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfR0VULCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBHZXQgVExWCisgICAgICAgIGtBY3RpdmVUaW1lc3RhbXAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0FDVElWRVRJTUVTVEFNUCwgICAgICAgICAgIC8vLzwgQWN0aXZlIFRpbWVzdGFtcCBUTFYKKyAgICAgICAga1N0YXRlICAgICAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfU1RBVEUsICAgICAgICAgICAgICAgICAgICAgLy8vPCBTdGF0ZSBUTFYKKyAgICAgICAga0pvaW5lckR0bHNFbmNhcHN1bGF0aW9uID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX0RUTFMsICAgICAgICAgICAgICAgLy8vPCBKb2luZXIgRFRMUyBFbmNhcHN1bGF0aW9uIFRMVgorICAgICAgICBrSm9pbmVyVWRwUG9ydCAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9KT0lORVJfVURQX1BPUlQsICAgICAgICAgICAvLy88IEpvaW5lciBVRFAgUG9ydCBUTFYKKyAgICAgICAga0pvaW5lcklpZCAgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX0lJRCwgICAgICAgICAgICAgICAgLy8vPCBKb2luZXIgSUlEIFRMVgorICAgICAgICBrSm9pbmVyUm91dGVyTG9jYXRvciAgICAgPSBPVF9NRVNIQ09QX1RMVl9KT0lORVJfUkxPQywgICAgICAgICAgICAgICAvLy88IEpvaW5lciBSb3V0ZXIgTG9jYXRvciBUTFYKKyAgICAgICAga0pvaW5lclJvdXRlcktlayAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfSk9JTkVSX1JPVVRFUl9LRUssICAgICAgICAgLy8vPCBKb2luZXIgUm91dGVyIEtFSyBUTFYKKyAgICAgICAga1Byb3Zpc2lvbmluZ1VybCAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfUFJPVklTSU9OSU5HX1VSTCwgICAgICAgICAgLy8vPCBQcm92aXNpb25pbmcgVVJMIFRMVgorICAgICAgICBrVmVuZG9yTmFtZSAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9WRU5ET1JfTkFNRV9UTFYsICAgICAgICAgICAvLy88IG1lc2hjb3AgVmVuZG9yIE5hbWUgVExWCisgICAgICAgIGtWZW5kb3JNb2RlbCAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX1ZFTkRPUl9NT0RFTF9UTFYsICAgICAgICAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgTW9kZWwgVExWCisgICAgICAgIGtWZW5kb3JTd1ZlcnNpb24gICAgICAgICA9IE9UX01FU0hDT1BfVExWX1ZFTkRPUl9TV19WRVJTSU9OX1RMViwgICAgIC8vLzwgbWVzaGNvcCBWZW5kb3IgU1cgVmVyc2lvbiBUTFYKKyAgICAgICAga1ZlbmRvckRhdGEgICAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfVkVORE9SX0RBVEFfVExWLCAgICAgICAgICAgLy8vPCBtZXNoY29wIFZlbmRvciBEYXRhIFRMVgorICAgICAgICBrVmVuZG9yU3RhY2tWZXJzaW9uICAgICAgPSBPVF9NRVNIQ09QX1RMVl9WRU5ET1JfU1RBQ0tfVkVSU0lPTl9UTFYsICAvLy88IG1lc2hjb3AgVmVuZG9yIFN0YWNrIFZlcnNpb24gVExWCisgICAgICAgIGtQZW5kaW5nVGltZXN0YW1wICAgICAgICA9IE9UX01FU0hDT1BfVExWX1BFTkRJTkdUSU1FU1RBTVAsICAgICAgICAgIC8vLzwgUGVuZGluZyBUaW1lc3RhbXAgVExWCisgICAgICAgIGtEZWxheVRpbWVyICAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0RFTEFZVElNRVIsICAgICAgICAgICAgICAgIC8vLzwgRGVsYXkgVGltZXIgVExWCisgICAgICAgIGtDaGFubmVsTWFzayAgICAgICAgICAgICA9IE9UX01FU0hDT1BfVExWX0NIQU5ORUxNQVNLLCAgICAgICAgICAgICAgIC8vLzwgQ2hhbm5lbCBNYXNrIFRMVgorICAgICAgICBrQ291bnQgICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9DT1VOVCwgICAgICAgICAgICAgICAgICAgICAvLy88IENvdW50IFRMVgorICAgICAgICBrUGVyaW9kICAgICAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9QRVJJT0QsICAgICAgICAgICAgICAgICAgICAvLy88IFBlcmlvZCBUTFYKKyAgICAgICAga1NjYW5EdXJhdGlvbiAgICAgICAgICAgID0gT1RfTUVTSENPUF9UTFZfU0NBTl9EVVJBVElPTiwgICAgICAgICAgICAgLy8vPCBTY2FuIER1cmF0aW9uIFRMVgorICAgICAgICBrRW5lcmd5TGlzdCAgICAgICAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9FTkVSR1lfTElTVCwgICAgICAgICAgICAgICAvLy88IEVuZXJneSBMaXN0IFRMVgorICAgICAgICBrRGlzY292ZXJ5UmVxdWVzdCAgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9ESVNDT1ZFUllSRVFVRVNULCAgICAgICAgICAvLy88IERpc2NvdmVyeSBSZXF1ZXN0IFRMVgorICAgICAgICBrRGlzY292ZXJ5UmVzcG9uc2UgICAgICAgPSBPVF9NRVNIQ09QX1RMVl9ESVNDT1ZFUllSRVNQT05TRSwgICAgICAgICAvLy88IERpc2NvdmVyeSBSZXNwb25zZSBUTFYKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG90OjpUbHY6OkdldFR5cGUoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeyBvdDo6VGx2OjpTZXRUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBUbHYgKkdldE5leHQodm9pZCkgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGx2ICo+KG90OjpUbHY6OkdldE5leHQoKSk7CisgICAgfQorCisgICAgY29uc3QgVGx2ICpHZXROZXh0KHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRsdiAqPihvdDo6VGx2OjpHZXROZXh0KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZWFkcyB0aGUgcmVxdWVzdGVkIFRMViBvdXQgb2YgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW2luXSAgIGFNYXhMZW5ndGggIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW291dF0gIGFUbHYgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYgdGhhdCB3aWxsIGJlIGNvcGllZCB0by4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgY29waWVkIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VGx2KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBUeXBlIGFUeXBlLCB1aW50MTZfdCBhTWF4TGVuZ3RoLCBUbHYgJmFUbHYpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhTWF4TGVuZ3RoLCBhVGx2KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgZmluZHMgdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIGEgZ2l2ZW4gVExWIHR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW291dF0gIGFPZmZzZXQgICAgIFRoZSBvZmZzZXQgd2hlcmUgdGhlIHZhbHVlIHN0YXJ0cy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VmFsdWVPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIFR5cGUgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0LCB1aW50MTZfdCAmYUxlbmd0aCkgeworICAgICAgICByZXR1cm4gb3Q6OlRsdjo6R2V0VmFsdWVPZmZzZXQoYU1lc3NhZ2UsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSwgYU9mZnNldCwgYUxlbmd0aCk7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ2hhbm5lbCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGFubmVsVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0NoYW5uZWwpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFubmVsUGFnZSh2b2lkKSBjb25zdCB7IHJldHVybiBtQ2hhbm5lbFBhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWxQYWdlICBUaGUgQ2hhbm5lbFBhZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWxQYWdlKHVpbnQ4X3QgYUNoYW5uZWxQYWdlKSB7IG1DaGFubmVsUGFnZSA9IGFDaGFubmVsUGFnZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGFubmVsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hhbm5lbCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1DaGFubmVsKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hhbm5lbCh1aW50MTZfdCBhQ2hhbm5lbCkgeyBtQ2hhbm5lbCA9IEhvc3RTd2FwMTYoYUNoYW5uZWwpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ2hhbm5lbFBhZ2U7CisgICAgdWludDE2X3QgbUNoYW5uZWw7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUEFOIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFBhbklkVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1BhbklkKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUEFOIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUGFuSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBhbklkKHVpbnQxNl90IGFQYW5JZCkgeyBtUGFuSWQgPSBIb3N0U3dhcDE2KGFQYW5JZCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUGFuSWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRXh0ZW5kZWQgUEFOIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEV4dGVuZGVkUGFuSWRUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRXh0ZW5kZWRQYW5JZCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRXh0ZW5kZWQgUEFOIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEV4dGVuZGVkIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEV4dGVuZGVkUGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUV4dGVuZGVkUGFuSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEV4dGVuZGVkIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFFeHRlbmRlZFBhbklkICBBIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIFBBTiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RXh0ZW5kZWRQYW5JZChjb25zdCB1aW50OF90ICphRXh0ZW5kZWRQYW5JZCkgeworICAgICAgICBtZW1jcHkobUV4dGVuZGVkUGFuSWQsIGFFeHRlbmRlZFBhbklkLCBPVF9FWFRfUEFOX0lEX1NJWkUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1FeHRlbmRlZFBhbklkW09UX0VYVF9QQU5fSURfU0laRV07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTmV0d29yayBOYW1lIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtOYW1lVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa05ldHdvcmtOYW1lKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBOZXR3b3JrIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTmV0d29yayBOYW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqR2V0TmV0d29ya05hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbU5ldHdvcmtOYW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOZXR3b3JrIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya05hbWUgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBOYW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrTmFtZShjb25zdCBjaGFyICphTmV0d29ya05hbWUpIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cm5sZW4oYU5ldHdvcmtOYW1lLCBzaXplb2YobU5ldHdvcmtOYW1lKSk7CisgICAgICAgIG1lbWNweShtTmV0d29ya05hbWUsIGFOZXR3b3JrTmFtZSwgbGVuZ3RoKTsKKyAgICAgICAgU2V0TGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjaGFyIG1OZXR3b3JrTmFtZVtPVF9ORVRXT1JLX05BTUVfTUFYX1NJWkVdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFBTS2MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUFNLY1RsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQU0tjKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQU0tjIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFBTS2MgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRQU0tjKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1QU0tjOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQU0tjIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBTS2MgIEEgcG9pbnRlciB0byB0aGUgUFNLYyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UFNLYyhjb25zdCB1aW50OF90ICphUFNLYykgeworICAgICAgICBtZW1jcHkobVBTS2MsIGFQU0tjLCBzaXplb2YobVBTS2MpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtUFNLY1sxNl07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTmV0d29yayBNYXN0ZXIgS2V5IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtNYXN0ZXJLZXlUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTmV0d29ya01hc3RlcktleSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTmV0d29yayBNYXN0ZXIgS2V5IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE5ldHdvcmsgTWFzdGVyIEtleSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IG90TWFzdGVyS2V5ICZHZXROZXR3b3JrTWFzdGVyS2V5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXR3b3JrTWFzdGVyS2V5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBOZXR3b3JrIE1hc3RlciBLZXkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0d29ya01hc3RlcktleSAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIE1hc3RlciBLZXkgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5ldHdvcmtNYXN0ZXJLZXkoY29uc3Qgb3RNYXN0ZXJLZXkgJmFOZXR3b3JrTWFzdGVyS2V5KSB7CisgICAgICAgIG1OZXR3b3JrTWFzdGVyS2V5ID0gYU5ldHdvcmtNYXN0ZXJLZXk7CisgICAgfQorCitwcml2YXRlOgorICAgIG90TWFzdGVyS2V5IG1OZXR3b3JrTWFzdGVyS2V5OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE5ldHdvcmsgS2V5IFNlcXVlbmNlIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE5ldHdvcmtLZXlTZXF1ZW5jZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtOZXR3b3JrS2V5U2VxdWVuY2UpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TmV0d29ya0tleVNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobU5ldHdvcmtLZXlTZXF1ZW5jZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5ldHdvcmtLZXlTZXF1ZW5jZSAgVGhlIE5ldHdvcmsgS2V5IFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrS2V5U2VxdWVuY2UodWludDMyX3QgYU5ldHdvcmtLZXlTZXF1ZW5jZSkgeyBtTmV0d29ya0tleVNlcXVlbmNlID0gSG9zdFN3YXAzMihhTmV0d29ya0tleVNlcXVlbmNlKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1OZXR3b3JrS2V5U2VxdWVuY2U7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTWVzaCBMb2NhbCBQcmVmaXggVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTWVzaExvY2FsUHJlZml4VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa01lc2hMb2NhbFByZWZpeCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTWVzaCBMb2NhbCBQcmVmaXggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWVzaCBMb2NhbCBQcmVmaXggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRNZXNoTG9jYWxQcmVmaXgodm9pZCkgY29uc3QgeyByZXR1cm4gbU1lc2hMb2NhbFByZWZpeDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTWVzaCBMb2NhbCBQcmVmaXggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzaExvY2FsUHJlZml4ICBBIHBvaW50ZXIgdG8gdGhlIE1lc2ggTG9jYWwgUHJlZml4IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNZXNoTG9jYWxQcmVmaXgoY29uc3QgdWludDhfdCAqYU1lc2hMb2NhbFByZWZpeCkgeworICAgICAgICBtZW1jcHkobU1lc2hMb2NhbFByZWZpeCwgYU1lc2hMb2NhbFByZWZpeCwgc2l6ZW9mKG1NZXNoTG9jYWxQcmVmaXgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtTWVzaExvY2FsUHJlZml4WzhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFN0ZWVyaW5nIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RlZXJpbmdEYXRhVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1N0ZWVyaW5nRGF0YSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyBDbGVhcigpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgYml0cyBpbiB0aGUgQmxvb20gRmlsdGVyIHRvIHplcm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyKHZvaWQpIHsgbWVtc2V0KG1TdGVlcmluZ0RhdGEsIDAsIEdldExlbmd0aCgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhzIG1ldGhvZCBzZXRzIGFsbCBiaXRzIGluIHRoZSBCbG9vbSBGaWx0ZXIgdG8gb25lLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQodm9pZCkgeyBtZW1zZXQobVN0ZWVyaW5nRGF0YSwgMHhmZiwgR2V0TGVuZ3RoKCkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaHMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgU3RlZXJpbmdEYXRhIGFsbG93cyBhbGwgSm9pbmVycy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBTdGVlcmluZ0RhdGEgYWxsb3dzIGFsbCBKb2luZXJzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBTdGVlcmluZ0RhdGEgZG9lc24ndCBhbGxvdyBhbnkgSm9pbmVyLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBEb2VzQWxsb3dBbnkodm9pZCkgeworICAgICAgICBib29sIHJ2YWwgPSB0cnVlOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IEdldExlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtU3RlZXJpbmdEYXRhW2ldICE9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICBydmFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcnZhbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgQmxvb20gRmlsdGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBCbG9vbSBGaWx0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE51bUJpdHModm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgKiA4OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYml0IEBwIGFCaXQgaXMgc2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJpdCAgVGhlIGJpdCBvZmZzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBiaXQgQHAgYUJpdCBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgYml0IEBwIGFCaXQgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgR2V0Qml0KHVpbnQ4X3QgYUJpdCkgY29uc3QgeyByZXR1cm4gKG1TdGVlcmluZ0RhdGFbR2V0TGVuZ3RoKCkgLSAxIC0gKGFCaXQgLyA4KV0gJiAoMSA8PCAoYUJpdCAlIDgpKSkgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIGJpdCBAcCBhQml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJpdCAgVGhlIGJpdCBvZmZzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyQml0KHVpbnQ4X3QgYUJpdCkgeyBtU3RlZXJpbmdEYXRhW0dldExlbmd0aCgpIC0gMSAtIChhQml0IC8gOCldICY9IH4oMSA8PCAoYUJpdCAlIDgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBiaXQgQHAgYUJpdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCaXQgIFRoZSBiaXQgb2Zmc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRCaXQodWludDhfdCBhQml0KSB7IG1TdGVlcmluZ0RhdGFbR2V0TGVuZ3RoKCkgLSAxIC0gKGFCaXQgLyA4KV0gfD0gMSA8PCAoYUJpdCAlIDgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaHMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgU3RlZXJpbmdEYXRhIGlzIGFsbCB6ZXJvcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBTdGVlcmluZ0RhdGEgaXMgYWxsIHplcm9zLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBTdGVlcmluZ0RhdGEgaXNuJ3QgYWxsIHplcm9zLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NsZWFyZWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgQmxvb20gRmlsdGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIEV4dGVuZGVkIGFkZHJlc3MKKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ29tcHV0ZUJsb29tRmlsdGVyKG90RXh0QWRkcmVzcyAqYUV4dEFkZHJlc3MpOworCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVN0ZWVyaW5nRGF0YVtPVF9TVEVFUklOR19EQVRBX01BWF9MRU5HVEhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEJvcmRlciBBZ2VudCBMb2NhdG9yIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEJvcmRlckFnZW50TG9jYXRvclRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtCb3JkZXJBZ2VudExvY2F0b3IpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEJvcmRlciBBZ2VudCBMb2NhdG9yIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEJvcmRlciBBZ2VudCBMb2NhdG9yIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Qm9yZGVyQWdlbnRMb2NhdG9yKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUxvY2F0b3IpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBCb3JkZXIgQWdlbnQgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCb3JkZXJBZ2VudExvY2F0b3IgIFRoZSBCb3JkZXIgQWdlbnQgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Qm9yZGVyQWdlbnRMb2NhdG9yKHVpbnQxNl90IGFMb2NhdG9yKSB7IG1Mb2NhdG9yID0gSG9zdFN3YXAxNihhTG9jYXRvcik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtTG9jYXRvcjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgQ29tbWlzc2lvbmVyIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvbW1pc3Npb25lcklkVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0NvbW1pc3Npb25lcklkKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb21taXNzaW9uZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ29tbWlzc2lvbmVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqR2V0Q29tbWlzc2lvbmVySWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUNvbW1pc3Npb25lcklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDb21taXNzaW9uZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29tbWlzc2lvbmVySWQgIEEgcG9pbnRlciB0byB0aGUgQ29tbWlzc2lvbmVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb21taXNzaW9uZXJJZChjb25zdCBjaGFyICphQ29tbWlzc2lvbmVySWQpIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cm5sZW4oYUNvbW1pc3Npb25lcklkLCBzaXplb2YobUNvbW1pc3Npb25lcklkKSk7CisgICAgICAgIG1lbWNweShtQ29tbWlzc2lvbmVySWQsIGFDb21taXNzaW9uZXJJZCwgbGVuZ3RoKTsKKyAgICAgICAgU2V0TGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbmd0aCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGVuZ3RoID0gNjQsCisgICAgfTsKKworICAgIGNoYXIgbUNvbW1pc3Npb25lcklkW2tNYXhMZW5ndGhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENvbW1pc3Npb25lciBTZXNzaW9uIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvbW1pc3Npb25lclNlc3Npb25JZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDb21taXNzaW9uZXJTZXNzaW9uSWQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNlc3Npb25JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbW1pc3Npb25lclNlc3Npb25JZCAgVGhlIENvbW1pc3Npb25lciBTZXNzaW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb21taXNzaW9uZXJTZXNzaW9uSWQodWludDE2X3QgYVNlc3Npb25JZCkgeyBtU2Vzc2lvbklkID0gSG9zdFN3YXAxNihhU2Vzc2lvbklkKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1TZXNzaW9uSWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU2VjdXJpdHkgUG9saWN5IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFNlY3VyaXR5UG9saWN5VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1NlY3VyaXR5UG9saWN5KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3RhdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdGF0aW9uIFRpbWUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRSb3RhdGlvblRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUm90YXRpb25UaW1lKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUm90YXRpb24gVGltZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3RhdGlvblRpbWUgIFRoZSBSb3RhdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3RhdGlvblRpbWUodWludDE2X3QgYVJvdGF0aW9uVGltZSkgeyBtUm90YXRpb25UaW1lID0gSG9zdFN3YXAxNihhUm90YXRpb25UaW1lKTsgfQorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga09idGFpbk1hc3RlcktleUZsYWcgICAgICA9IE9UX1NFQ1VSSVRZX1BPTElDWV9PQlRBSU5fTUFTVEVSX0tFWSwgICAgICAvLy88IE9idGFpbmluZyB0aGUgTWFzdGVyIEtleQorICAgICAgICBrTmF0aXZlQ29tbWlzc2lvbmluZ0ZsYWcgID0gT1RfU0VDVVJJVFlfUE9MSUNZX05BVElWRV9DT01NSVNTSU9OSU5HLCAgIC8vLzwgTmF0aXZlIENvbW1pc3Npb25pbmcKKyAgICAgICAga1JvdXRlcnNGbGFnICAgICAgICAgICAgICA9IE9UX1NFQ1VSSVRZX1BPTElDWV9ST1VURVJTLCAgICAgICAgICAgICAgICAvLy88IFJvdXRlcnMgZW5hYmxlZAorICAgICAgICBrRXh0ZXJuYWxDb21taXNzaW9uZXJGbGFnID0gT1RfU0VDVVJJVFlfUE9MSUNZX0VYVEVSTkFMX0NPTU1JU1NJT05FUiwgIC8vLzwgRXh0ZXJuYWwgQ29tbWlzc2lvbmVyIGFsbG93ZWQKKyAgICAgICAga0JlYWNvbnNGbGFnICAgICAgICAgICAgICA9IE9UX1NFQ1VSSVRZX1BPTElDWV9CRUFDT05TLCAgICAgICAgICAgICAgICAvLy88IEJlYWNvbnMgZW5hYmxlZAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBGbGFncyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBGbGFncyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0RmxhZ3Modm9pZCkgY29uc3QgeyByZXR1cm4gbUZsYWdzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGbGFncyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbGFncyAgVGhlIEZsYWdzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGbGFncyh1aW50OF90IGFGbGFncykgeyBtRmxhZ3MgPSBhRmxhZ3M7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUm90YXRpb25UaW1lOworICAgIHVpbnQ4X3QgbUZsYWdzOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEFjdGl2ZSBUaW1lc3RhbXAgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQWN0aXZlVGltZXN0YW1wVGx2IDogcHVibGljIFRsdiwgcHVibGljIFRpbWVzdGFtcAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtBY3RpdmVUaW1lc3RhbXApOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgVGltZXN0YW1wOjpJbml0KCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU3RhdGUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RhdGVUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrU3RhdGUpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFN0YXRlIHZhbHVlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIGtSZWplY3QgID0gLTEsICAvLy88IFJlamVjdAorICAgICAgICBrUGVuZGluZyA9IDAsICAgLy8vPCBQZW5kaW5nCisgICAgICAgIGtBY2NlcHQgID0gMSwgICAvLy88IEFjY2VwdAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFN0YXRlIEdldFN0YXRlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXRlPihtU3RhdGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTdGF0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0ZSAgVGhlIFN0YXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdGF0ZShTdGF0ZSBhU3RhdGUpIHsgbVN0YXRlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXRlKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVN0YXRlOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEpvaW5lciBVRFAgUG9ydCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBKb2luZXJVZHBQb3J0VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0pvaW5lclVkcFBvcnQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFVEUCBQb3J0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFVEUCBQb3J0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0VWRwUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1VZHBQb3J0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVURQIFBvcnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVWRwUG9ydCAgVGhlIFVEUCBQb3J0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRVZHBQb3J0KHVpbnQxNl90IGFVZHBQb3J0KSB7IG1VZHBQb3J0ID0gSG9zdFN3YXAxNihhVWRwUG9ydCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVWRwUG9ydDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBKb2luZXIgSUlEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEpvaW5lcklpZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtKb2luZXJJaWQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBKb2luZXIgSUlELgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBKb2luZXIgSUlELgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0SWlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JaWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEpvaW5lciBJSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWlkICBBIHBvaW50ZXIgdG8gdGhlIEpvaW5lciBJSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCB1aW50OF90ICphSWlkKSB7IG1lbWNweShtSWlkLCBhSWlkLCBzaXplb2YobUlpZCkpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtSWlkWzhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEpvaW5lciBSb3V0ZXIgTG9jYXRvciBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBKb2luZXJSb3V0ZXJMb2NhdG9yVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0pvaW5lclJvdXRlckxvY2F0b3IpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEpvaW5lciBSb3V0ZXIgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBKb2luZXIgUm91dGVyIExvY2F0b3IgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRKb2luZXJSb3V0ZXJMb2NhdG9yKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUxvY2F0b3IpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBKb2luZXIgUm91dGVyIExvY2F0b3IgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSm9pbmVyUm91dGVyTG9jYXRvciAgVGhlIEpvaW5lciBSb3V0ZXIgTG9jYXRvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Sm9pbmVyUm91dGVyTG9jYXRvcih1aW50MTZfdCBhTG9jYXRvcikgeyBtTG9jYXRvciA9IEhvc3RTd2FwMTYoYUxvY2F0b3IpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbUxvY2F0b3I7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSm9pbmVyIFJvdXRlciBLRUsgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgSm9pbmVyUm91dGVyS2VrVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0pvaW5lclJvdXRlcktlayk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEpvaW5lciBSb3V0ZXIgS0VLLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBKb2luZXIgUm91dGVyIEtFSy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEtlayh2b2lkKSBjb25zdCB7IHJldHVybiBtS2VrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBKb2luZXIgUm91dGVyIEtFSy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJaWQgIEEgcG9pbnRlciB0byB0aGUgSm9pbmVyIFJvdXRlciBLRUsuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEtlayhjb25zdCB1aW50OF90ICphS2VrKSB7IG1lbWNweShtS2VrLCBhS2VrLCBzaXplb2YobUtlaykpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtS2VrWzE2XTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQZW5kaW5nIFRpbWVzdGFtcCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBQZW5kaW5nVGltZXN0YW1wVGx2IDogcHVibGljIFRsdiwgcHVibGljIFRpbWVzdGFtcAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQZW5kaW5nVGltZXN0YW1wKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IFRpbWVzdGFtcDo6SW5pdCgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIERlbGF5IFRpbWVyIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIERlbGF5VGltZXJUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRGVsYXlUaW1lcik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRGVsYXkgVGltZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGVsYXkgVGltZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXREZWxheVRpbWVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobURlbGF5VGltZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEZWxheSBUaW1lciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZWxheVRpbWVyICBUaGUgRGVsYXkgVGltZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERlbGF5VGltZXIodWludDMyX3QgYURlbGF5VGltZXIpIHsgbURlbGF5VGltZXIgPSBIb3N0U3dhcDMyKGFEZWxheVRpbWVyKTsgfQorCisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heERlbGF5VGltZXIgICAgID0gMjU5MjAwLCAgLy8vPCBtYXhpbXVtIGRlbGF5IHRpbWVyIHZhbHVlIGZvciBhIFBlbmRpbmcgRGF0YXNldCBpbiBzZWNvbmRzCisgICAgICAgIGtEZWxheVRpbWVyTWluaW1hbCA9IDMwMDAwLCAgIC8vLzwgTWluaW11bSBEZWxheSBUaW1lciB2YWx1ZSBmb3IgYSBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQgKG1zKQorICAgICAgICBrRGVsYXlUaW1lckRlZmF1bHQgPSAzMDAwMDAsICAvLy88IERlZmF1bHQgRGVsYXkgVGltZXIgdmFsdWUgZm9yIGEgUGVuZGluZyBPcGVyYXRpb25hbCBEYXRhc2V0IChtcykKKyAgICB9OworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1EZWxheVRpbWVyOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoYW5uZWwgTWFzayBFbnRyeSBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENoYW5uZWxNYXNrRW50cnkKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBDaGFubmVsUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGFubmVsUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q2hhbm5lbFBhZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUNoYW5uZWxQYWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGFubmVsUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsUGFnZSAgVGhlIENoYW5uZWxQYWdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGFubmVsUGFnZSh1aW50OF90IGFDaGFubmVsUGFnZSkgeyBtQ2hhbm5lbFBhZ2UgPSBhQ2hhbm5lbFBhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIE1hc2tMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWFza0xlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TWFza0xlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTWFza0xlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTWFza0xlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNYXNrTGVuZ3RoICBUaGUgTWFza0xlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFza0xlbmd0aCh1aW50OF90IGFNYXNrTGVuZ3RoKSB7IG1NYXNrTGVuZ3RoID0gYU1hc2tMZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgYml0IGNvcnJlc3BvbmRpbmcgdG8gQHAgYUNoYW5uZWwgaW4gQ2hhbm5lbE1hc2suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIGNoYW5uZWwgaW4gQ2hhbm5lbE1hc2sgdG8gY2xlYXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyQ2hhbm5lbCh1aW50OF90IGFDaGFubmVsKSB7CisgICAgICAgIHVpbnQ4X3QgKm1hc2sgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoKnRoaXMpOworICAgICAgICBtYXNrW2FDaGFubmVsIC8gOF0gJj0gfigweDgwID4+IChhQ2hhbm5lbCAlIDgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byBAcCBhQ2hhbm5lbCBpbiBDaGFubmVsTWFzay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgY2hhbm5lbCBpbiBDaGFubmVsTWFzayB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWwodWludDhfdCBhQ2hhbm5lbCkgeworICAgICAgICB1aW50OF90ICptYXNrID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRoaXMpICsgc2l6ZW9mKCp0aGlzKTsKKyAgICAgICAgbWFza1thQ2hhbm5lbCAvIDhdIHw9IDB4ODAgPj4gKGFDaGFubmVsICUgOCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byBAcCBhQ2hhbm5lbCBpbiBDaGFubmVsTWFzayBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgVGhlIGNoYW5uZWwgaW4gQ2hhbm5lbE1hc2sgdG8gZ2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NoYW5uZWxTZXQodWludDhfdCBhQ2hhbm5lbCkgY29uc3QgeworICAgICAgICBjb25zdCB1aW50OF90ICptYXNrID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KHRoaXMpICsgc2l6ZW9mKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIChhQ2hhbm5lbCA8IChtTWFza0xlbmd0aCAqIDgpKSA/ICgobWFza1thQ2hhbm5lbCAvIDhdICYgKDB4ODAgPj4gKGFDaGFubmVsICUgOCkpKSAhPSAwKSA6IGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1DaGFubmVsUGFnZTsKKyAgICB1aW50OF90IG1NYXNrTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoYW5uZWwgTWFzayBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDaGFubmVsTWFza1RsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDaGFubmVsTWFzayk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDaGFubmVsIE1hc2sgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2hhbm5lbE1hc2swVGx2OiBwdWJsaWMgQ2hhbm5lbE1hc2tUbHYsIHB1YmxpYyBDaGFubmVsTWFza0VudHJ5Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7CisgICAgICAgIFNldFR5cGUoa0NoYW5uZWxNYXNrKTsKKyAgICAgICAgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7CisgICAgICAgIFNldENoYW5uZWxQYWdlKDApOworICAgICAgICBTZXRNYXNrTGVuZ3RoKHNpemVvZihtTWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSAmJgorICAgICAgICAgICAgR2V0Q2hhbm5lbFBhZ2UoKSA9PSAwICYmCisgICAgICAgICAgICBHZXRNYXNrTGVuZ3RoKCkgPT0gc2l6ZW9mKG1NYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDaGFubmVsIE1hc2sgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ2hhbm5lbCBNYXNrIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TWFzayh2b2lkKSBjb25zdCB7IHJldHVybiBSZXZlcnNlMzIoSG9zdFN3YXAzMihtTWFzaykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGFubmVsIE1hc2sgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWFzayAgVGhlIENoYW5uZWwgTWFzayB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFzayh1aW50MzJfdCBhTWFzaykgeyBtTWFzayA9IEhvc3RTd2FwMzIoUmV2ZXJzZTMyKGFNYXNrKSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtTWFzazsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDb3VudCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDb3VudFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDb3VudCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db3VudDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ291bnQgIFRoZSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q291bnQodWludDhfdCBhQ291bnQpIHsgbUNvdW50ID0gYUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ291bnQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUGVyaW9kIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFBlcmlvZFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQZXJpb2QpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBlcmlvZCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQZXJpb2QgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRQZXJpb2Qodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUGVyaW9kKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUGVyaW9kIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBlcmlvZCAgVGhlIFBlcmlvZCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGVyaW9kKHVpbnQxNl90IGFQZXJpb2QpIHsgbVBlcmlvZCA9IEhvc3RTd2FwMTYoYVBlcmlvZCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUGVyaW9kOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNjYW4gRHVyYXRpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU2NhbkR1cmF0aW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1NjYW5EdXJhdGlvbik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU2NhbiBEdXJhdGlvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTY2FuIER1cmF0aW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U2NhbkR1cmF0aW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNjYW5EdXJhdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNjYW4gRHVyYXRpb24gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkR1cmF0aW9uICBUaGUgU2NhbiBEdXJhdGlvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2NhbkR1cmF0aW9uKHVpbnQxNl90IGFTY2FuRHVyYXRpb24pIHsgbVNjYW5EdXJhdGlvbiA9IEhvc3RTd2FwMTYoYVNjYW5EdXJhdGlvbik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtU2NhbkR1cmF0aW9uOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEVuZXJneSBMaXN0IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEVuZXJneUxpc3RUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrRW5lcmd5TGlzdCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQcm92aXNpb25pbmcgVVJMIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFByb3Zpc2lvbmluZ1VybFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtQcm92aXNpb25pbmdVcmwpOyBTZXRMZW5ndGgoMCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQcm92aXNpb25pbmcgVVJMIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFByb3Zpc2lvbmluZyBVUkwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXRQcm92aXNpb25pbmdVcmwodm9pZCkgY29uc3QgeyByZXR1cm4gbVByb3Zpc2lvbmluZ1VybDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUHJvdmlzaW9uaW5nIFVSTCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcm92aXNpb25pbmdVcmwgIEEgcG9pbnRlciB0byB0aGUgUHJvdmlzaW9uaW5nIFVSTCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UHJvdmlzaW9uaW5nVXJsKGNvbnN0IGNoYXIgKmFQcm92aXNpb25pbmdVcmwpIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNpemVfdCBsZW4gPSBhUHJvdmlzaW9uaW5nVXJsID8gc3RybmxlbihhUHJvdmlzaW9uaW5nVXJsLCBrTWF4TGVuZ3RoICsgMSkgOiAwOworCisgICAgICAgIFZlcmlmeU9yRXhpdChsZW4gPD0ga01heExlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBTZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuKSk7CisKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShtUHJvdmlzaW9uaW5nVXJsLCBhUHJvdmlzaW9uaW5nVXJsLCBsZW4pOworICAgICAgICB9CisKK2V4aXQ6CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heExlbmd0aCA9IDY0LAorICAgIH07CisKKyAgICBjaGFyIG1Qcm92aXNpb25pbmdVcmxba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVmVuZG9yIE5hbWUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVuZG9yTmFtZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtWZW5kb3JOYW1lKTsgU2V0TGVuZ3RoKDApOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDw9IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVuZG9yIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVmVuZG9yIE5hbWUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXRWZW5kb3JOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WZW5kb3JOYW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZW5kb3IgTmFtZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JOYW1lICBBIHBvaW50ZXIgdG8gdGhlIFZlbmRvciBOYW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRWZW5kb3JOYW1lKGNvbnN0IGNoYXIgKmFWZW5kb3JOYW1lKSB7CisgICAgICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICBzaXplX3QgbGVuID0gKGFWZW5kb3JOYW1lID09IE5VTEwpID8gMCA6IHN0cm5sZW4oYVZlbmRvck5hbWUsIHNpemVvZihtVmVuZG9yTmFtZSkgKyAxKTsKKworICAgICAgICBWZXJpZnlPckV4aXQobGVuIDw9IHNpemVvZihtVmVuZG9yTmFtZSksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgU2V0TGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxlbikpOworCisgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICBtZW1jcHkobVZlbmRvck5hbWUsIGFWZW5kb3JOYW1lLCBsZW4pOworICAgICAgICB9CisKK2V4aXQ6CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heExlbmd0aCA9IDMyLAorICAgIH07CisKKyAgICBjaGFyIG1WZW5kb3JOYW1lW2tNYXhMZW5ndGhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFZlbmRvciBNb2RlbCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBWZW5kb3JNb2RlbFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtWZW5kb3JNb2RlbCk7IFNldExlbmd0aCgwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFZlbmRvciBNb2RlbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZW5kb3IgTW9kZWwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBjaGFyICpHZXRWZW5kb3JNb2RlbCh2b2lkKSBjb25zdCB7IHJldHVybiBtVmVuZG9yTW9kZWw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFZlbmRvciBNb2RlbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZW5kb3JNb2RlbCAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgTW9kZWwgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFZlbmRvck1vZGVsKGNvbnN0IGNoYXIgKmFWZW5kb3JNb2RlbCkgeworICAgICAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IChhVmVuZG9yTW9kZWwgPT0gTlVMTCkgPyAwIDogc3RybmxlbihhVmVuZG9yTW9kZWwsIHNpemVvZihtVmVuZG9yTW9kZWwpICsgMSk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlbiA8PSBzaXplb2YobVZlbmRvck1vZGVsKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBTZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuKSk7CisKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShtVmVuZG9yTW9kZWwsIGFWZW5kb3JNb2RlbCwgbGVuKTsKKyAgICAgICAgfQorCitleGl0OgorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhMZW5ndGggPSAzMiwKKyAgICB9OworCisgICAgY2hhciBtVmVuZG9yTW9kZWxba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVmVuZG9yIFNXIFZlcnNpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVuZG9yU3dWZXJzaW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1ZlbmRvclN3VmVyc2lvbik7IFNldExlbmd0aCgwKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFZlbmRvciBTVyBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFZlbmRvciBTVyBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqR2V0VmVuZG9yU3dWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WZW5kb3JTd1ZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFZlbmRvciBTVyBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvclN3VmVyc2lvbiAgQSBwb2ludGVyIHRvIHRoZSBWZW5kb3IgU1cgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0VmVuZG9yU3dWZXJzaW9uKGNvbnN0IGNoYXIgKmFWZW5kb3JTd1ZlcnNpb24pIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNpemVfdCBsZW4gPSAoYVZlbmRvclN3VmVyc2lvbiA9PSBOVUxMKSA/IDAgOiBzdHJubGVuKGFWZW5kb3JTd1ZlcnNpb24sIHNpemVvZihtVmVuZG9yU3dWZXJzaW9uKSArIDEpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChsZW4gPD0gc2l6ZW9mKG1WZW5kb3JTd1ZlcnNpb24pLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIFNldExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihsZW4pKTsKKworICAgICAgICBpZiAobGVuID4gMCkgeworICAgICAgICAgICAgbWVtY3B5KG1WZW5kb3JTd1ZlcnNpb24sIGFWZW5kb3JTd1ZlcnNpb24sIGxlbik7CisgICAgICAgIH0KKworZXhpdDoKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGVuZ3RoID0gMTYsCisgICAgfTsKKworICAgIGNoYXIgbVZlbmRvclN3VmVyc2lvbltrTWF4TGVuZ3RoXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBWZW5kb3IgRGF0YSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBWZW5kb3JEYXRhVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1ZlbmRvckRhdGEpOyBTZXRMZW5ndGgoMCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBWZW5kb3IgRGF0YSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZW5kb3IgRGF0YSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IGNoYXIgKkdldFZlbmRvckRhdGEodm9pZCkgY29uc3QgeyByZXR1cm4gbVZlbmRvckRhdGE7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFZlbmRvciBEYXRhIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlbmRvckRhdGEgIEEgcG9pbnRlciB0byB0aGUgVmVuZG9yIERhdGEgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFZlbmRvckRhdGEoY29uc3QgY2hhciAqYVZlbmRvckRhdGEpIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgICAgIHNpemVfdCBsZW4gPSAoYVZlbmRvckRhdGEgPT0gTlVMTCkgPyAwIDogc3RybmxlbihhVmVuZG9yRGF0YSwgc2l6ZW9mKG1WZW5kb3JEYXRhKSArIDEpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChsZW4gPD0gc2l6ZW9mKG1WZW5kb3JEYXRhKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBTZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obGVuKSk7CisKKyAgICAgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShtVmVuZG9yRGF0YSwgYVZlbmRvckRhdGEsIGxlbik7CisgICAgICAgIH0KKworZXhpdDoKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4TGVuZ3RoID0gNjQsCisgICAgfTsKKworICAgIGNoYXIgbVZlbmRvckRhdGFba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVmVuZG9yIFN0YWNrIFZlcnNpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVmVuZG9yU3RhY2tWZXJzaW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqLworICAgIFZlbmRvclN0YWNrVmVyc2lvblRsdih2b2lkKSA6CisgICAgICAgIG1CdWlsZFJldmlzaW9uKDApLAorICAgICAgICBtTWlub3JNYWpvcigwKSB7fQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1ZlbmRvclN0YWNrVmVyc2lvbik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZW5kb3IgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldE91aSh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1PdWlbMF0pIDw8IDE2KSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4obU91aVsxXSkgPDwgOCkgfCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obU91aVsyXSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPdWkgIFRoZSBWZW5kb3IgU3RhY2sgVmVuZG9yIE9VSSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0T3VpKHVpbnQzMl90IGFPdWkpIHsKKyAgICAgICAgbU91aVswXSA9IChhT3VpID4+IDE2KSAmIDB4ZmY7CisgICAgICAgIG1PdWlbMV0gPSAoYU91aSA+PiA4KSAmIDB4ZmY7CisgICAgICAgIG1PdWlbMl0gPSBhT3VpICYgMHhmZjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBCdWlsZCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBCdWlsZCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEJ1aWxkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIb3N0U3dhcDE2KG1CdWlsZFJldmlzaW9uKSAmIGtCdWlsZE1hc2spID4+IGtCdWlsZE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQnVpbGQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVpbGQgIFRoZSBCdWlsZCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QnVpbGQodWludDE2X3QgYUJ1aWxkKSB7CisgICAgICAgIG1CdWlsZFJldmlzaW9uID0gSG9zdFN3YXAxNigoSG9zdFN3YXAxNihtQnVpbGRSZXZpc2lvbikgJiB+a0J1aWxkTWFzaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhQnVpbGQgPDwga0J1aWxkT2Zmc2V0KSAmIGtCdWlsZE1hc2spKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSZXZpc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSZXZpc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UmV2aXNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gKEhvc3RTd2FwMTYobUJ1aWxkUmV2aXNpb24pICYga1Jldk1hc2spID4+IGtSZXZPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJldmlzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJldmlzaW9uICBUaGUgUmV2aXNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJldmlzaW9uKHVpbnQ4X3QgYVJldmlzaW9uKSB7CisgICAgICAgIG1CdWlsZFJldmlzaW9uID0gSG9zdFN3YXAxNigoSG9zdFN3YXAxNihtQnVpbGRSZXZpc2lvbikgJiB+a1Jldk1hc2spIHwgKChhUmV2aXNpb24gPDwga1Jldk9mZnNldCkgJiBrUmV2TWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1pbm9yIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1pbm9yIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNaW5vcih2b2lkKSBjb25zdCB7IHJldHVybiAobU1pbm9yTWFqb3IgJiBrTWlub3JNYXNrKSA+PiBrTWlub3JPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1pbm9yIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1pbm9yICBUaGUgTWlub3IgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1pbm9yKHVpbnQ4X3QgYU1pbm9yKSB7CisgICAgICAgIG1NaW5vck1ham9yID0gKG1NaW5vck1ham9yICYgfmtNaW5vck1hc2spIHwgKChhTWlub3IgPDwga01pbm9yT2Zmc2V0KSAmIGtNaW5vck1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1ham9yIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1ham9yIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNYWpvcih2b2lkKSBjb25zdCB7IHJldHVybiAobU1pbm9yTWFqb3IgJiBrTWFqb3JNYXNrKSA+PiBrTWFqb3JPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1ham9yIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTWFqb3IgIFRoZSBNYWpvciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFqb3IodWludDhfdCBhTWFqb3IpIHsKKyAgICAgICAgbU1pbm9yTWFqb3IgPSAobU1pbm9yTWFqb3IgJiB+a01ham9yTWFzaykgfCAoKGFNYWpvciA8PCBrTWFqb3JPZmZzZXQpICYga01ham9yTWFzayk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU91aVszXTsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtCdWlsZE9mZnNldCA9IDQsCisgICAgICAgIGtCdWlsZE1hc2sgPSAweGZmZiA8PCBrQnVpbGRPZmZzZXQsCisgICAgICAgIGtSZXZPZmZzZXQgPSAwLAorICAgICAgICBrUmV2TWFzayA9IDB4ZiA8PCBrQnVpbGRPZmZzZXQsCisgICAgfTsKKyAgICB1aW50MTZfdCBtQnVpbGRSZXZpc2lvbjsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNaW5vck9mZnNldCA9IDQsCisgICAgICAgIGtNaW5vck1hc2sgPSAweGYgPDwga01pbm9yT2Zmc2V0LAorICAgICAgICBrTWFqb3JPZmZzZXQgPSAwLAorICAgICAgICBrTWFqb3JNYXNrID0gMHhmIDw8IGtNYWpvck9mZnNldCwKKyAgICB9OworICAgIHVpbnQ4X3QgbU1pbm9yTWFqb3I7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRGlzY292ZXJ5IFJlcXVlc3QgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgRGlzY292ZXJ5UmVxdWVzdFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtEaXNjb3ZlcnlSZXF1ZXN0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IG1GbGFncyA9IDA7IG1SZXNlcnZlZCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFZlcnNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gbUZsYWdzID4+IGtWZXJzaW9uT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pIHsKKyAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIH5rVmVyc2lvbk1hc2spIHwgKChhVmVyc2lvbiA8PCBrVmVyc2lvbk9mZnNldCkgJiBrVmVyc2lvbk1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSm9pbmVyIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIEpvaW5lciBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSm9pbmVyIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNKb2luZXIodm9pZCkgeyByZXR1cm4gKG1GbGFncyAmIGtKb2luZXJNYXNrKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBKb2luZXIgZmxhZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFKb2luZXIgIFRSVUUgaWYgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEpvaW5lcihib29sIGFKb2luZXIpIHsKKyAgICAgICAgaWYgKGFKb2luZXIpIHsKKyAgICAgICAgICAgIG1GbGFncyB8PSBrSm9pbmVyTWFzazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1GbGFncyAmPSB+a0pvaW5lck1hc2s7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1ZlcnNpb25PZmZzZXQgPSA0LAorICAgICAgICBrVmVyc2lvbk1hc2sgPSAweGYgPDwga1ZlcnNpb25PZmZzZXQsCisgICAgICAgIGtKb2luZXJPZmZzZXQgPSAzLAorICAgICAgICBrSm9pbmVyTWFzayA9IDEgPDwga0pvaW5lck9mZnNldCwKKyAgICB9OworICAgIHVpbnQ4X3QgbUZsYWdzOworICAgIHVpbnQ4X3QgbVJlc2VydmVkOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIERpc2NvdmVyeSBSZXNwb25zZSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBEaXNjb3ZlcnlSZXNwb25zZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtEaXNjb3ZlcnlSZXNwb25zZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyBtRmxhZ3MgPSAwOyBtUmVzZXJ2ZWQgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1GbGFncyA+PiBrVmVyc2lvbk9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VmVyc2lvbih1aW50OF90IGFWZXJzaW9uKSB7CisgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a1ZlcnNpb25NYXNrKSB8ICgoYVZlcnNpb24gPDwga1ZlcnNpb25PZmZzZXQpICYga1ZlcnNpb25NYXNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIE5hdGl2ZSBDb21taXNzaW9uZXIgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTmF0aXZlQ29tbWlzc2lvbmVyKHZvaWQpIHsgcmV0dXJuIChtRmxhZ3MgJiBrTmF0aXZlTWFzaykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTmF0aXZlIENvbW1pc3Npb25lciBmbGFnLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5hdGl2ZUNvbW1pc3Npb25lciAgVFJVRSBpZiBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmF0aXZlQ29tbWlzc2lvbmVyKGJvb2wgYU5hdGl2ZUNvbW1pc3Npb25lcikgeworICAgICAgICBpZiAoYU5hdGl2ZUNvbW1pc3Npb25lcikgeworICAgICAgICAgICAgbUZsYWdzIHw9IGtOYXRpdmVNYXNrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbUZsYWdzICY9IH5rTmF0aXZlTWFzazsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVmVyc2lvbk9mZnNldCA9IDQsCisgICAgICAgIGtWZXJzaW9uTWFzayA9IDB4ZiA8PCBrVmVyc2lvbk9mZnNldCwKKyAgICAgICAga05hdGl2ZU9mZnNldCA9IDMsCisgICAgICAgIGtOYXRpdmVNYXNrID0gMSA8PCBrTmF0aXZlT2Zmc2V0LAorICAgIH07CisgICAgdWludDhfdCBtRmxhZ3M7CisgICAgdWludDhfdCBtUmVzZXJ2ZWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSENPUF9UTFZTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmNwcCBiL3NyYy9jb3JlL21lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Y1YWVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC9wYW5pZF9xdWVyeV9jbGllbnQuY3BwCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBQQU4gSUQgUXVlcnkgQ2xpZW50LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgInBhbmlkX3F1ZXJ5X2NsaWVudC50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAicGFuaWRfcXVlcnlfY2xpZW50LmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3BfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKK25hbWVzcGFjZSBvdCB7CisKK1BhbklkUXVlcnlDbGllbnQ6OlBhbklkUXVlcnlDbGllbnQoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1DYWxsYmFjayhOVUxMKSwKKyAgICBtQ29udGV4dChOVUxMKSwKKyAgICBtUGFuSWRRdWVyeShPVF9VUklfUEFUSF9QQU5JRF9DT05GTElDVCwgJlBhbklkUXVlcnlDbGllbnQ6OkhhbmRsZUNvbmZsaWN0LCB0aGlzKQoreworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobVBhbklkUXVlcnkpOworfQorCitvdEVycm9yIFBhbklkUXVlcnlDbGllbnQ6OlNlbmRRdWVyeSh1aW50MTZfdCBhUGFuSWQsIHVpbnQzMl90IGFDaGFubmVsTWFzaywgY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIE1lc2hDb1A6OkNvbW1pc3Npb25lclNlc3Npb25JZFRsdiBzZXNzaW9uSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIE1lc2hDb1A6OlBhbklkVGx2IHBhbklkOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuSXNBY3RpdmUoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGhlYWRlci5Jbml0KGFBZGRyZXNzLklzTXVsdGljYXN0KCkgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfUEFOSURfUVVFUlkpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBNZXNoQ29QOjpOZXdNZXNoQ29QTWVzc2FnZShuZXRpZi5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzZXNzaW9uSWQuSW5pdCgpOworICAgIHNlc3Npb25JZC5TZXRDb21taXNzaW9uZXJTZXNzaW9uSWQobmV0aWYuR2V0Q29tbWlzc2lvbmVyKCkuR2V0U2Vzc2lvbklkKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnNlc3Npb25JZCwgc2l6ZW9mKHNlc3Npb25JZCkpKTsKKworICAgIGNoYW5uZWxNYXNrLkluaXQoKTsKKyAgICBjaGFubmVsTWFzay5TZXRNYXNrKGFDaGFubmVsTWFzayk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hhbm5lbE1hc2ssIHNpemVvZihjaGFubmVsTWFzaykpKTsKKworICAgIHBhbklkLkluaXQoKTsKKyAgICBwYW5JZC5TZXRQYW5JZChhUGFuSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnBhbklkLCBzaXplb2YocGFuSWQpKSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhQWRkcmVzcyk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBwYW5pZCBxdWVyeSIpOworCisgICAgbUNhbGxiYWNrID0gYUNhbGxiYWNrOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIFBhbklkUXVlcnlDbGllbnQ6OkhhbmRsZUNvbmZsaWN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxQYW5JZFF1ZXJ5Q2xpZW50ICo+KGFDb250ZXh0KS0+SGFuZGxlQ29uZmxpY3QoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgUGFuSWRRdWVyeUNsaWVudDo6SGFuZGxlQ29uZmxpY3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWVzaENvUDo6UGFuSWRUbHYgcGFuSWQ7CisgICAgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2IGNoYW5uZWxNYXNrOworICAgIElwNjo6TWVzc2FnZUluZm8gcmVzcG9uc2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInJlY2VpdmVkIHBhbmlkIGNvbmZsaWN0Iik7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtQYW5JZCwgc2l6ZW9mKHBhbklkKSwgcGFuSWQpKTsKKyAgICBWZXJpZnlPckV4aXQocGFuSWQuSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a0NoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spLCBjaGFubmVsTWFzaykpOworICAgIFZlcmlmeU9yRXhpdChjaGFubmVsTWFzay5Jc1ZhbGlkKCkpOworCisgICAgaWYgKG1DYWxsYmFjayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUNhbGxiYWNrKHBhbklkLkdldFBhbklkKCksIGNoYW5uZWxNYXNrLkdldE1hc2soKSwgbUNvbnRleHQpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQobmV0aWYuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCByZXNwb25zZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgcGFuaWQgcXVlcnkgY29uZmxpY3QgcmVzcG9uc2UiKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCmRpZmYgLS1naXQgYS9zcmMvY29yZS9tZXNoY29wL3BhbmlkX3F1ZXJ5X2NsaWVudC5ocHAgYi9zcmMvY29yZS9tZXNoY29wL3BhbmlkX3F1ZXJ5X2NsaWVudC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNjgwNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL21lc2hjb3AvcGFuaWRfcXVlcnlfY2xpZW50LmhwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcmVzcG9uZGluZyB0byBQQU5JRCBRdWVyeSBSZXF1ZXN0cy4KKyAqLworCisjaWZuZGVmIFBBTklEX1FVRVJZX0NMSUVOVF9IUFBfCisjZGVmaW5lIFBBTklEX1FVRVJZX0NMSUVOVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbW1pc3Npb25lci5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgaGFuZGxpbmcgUEFOSUQgUXVlcnkgUmVxdWVzdHMuCisgKgorICovCitjbGFzcyBQYW5JZFF1ZXJ5Q2xpZW50OiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgUGFuSWRRdWVyeUNsaWVudChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgUEFOIElEIFF1ZXJ5IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgICAgICAgICBUaGUgUEFOIElEIHRvIHF1ZXJ5LgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVsIG1hc2sgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gRW5lcmd5IFJlcG9ydCBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIFBBTiBJRCBRdWVyeSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgYSBQQU4gSUQgUXVlcnkgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZFF1ZXJ5KHVpbnQxNl90IGFQYW5JZCwgdWludDMyX3QgYUNoYW5uZWxNYXNrLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgIG90Q29tbWlzc2lvbmVyUGFuSWRDb25mbGljdENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZUNvbmZsaWN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUNvbmZsaWN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdENvbW1pc3Npb25lclBhbklkQ29uZmxpY3RDYWxsYmFjayBtQ2FsbGJhY2s7CisgICAgdm9pZCAqbUNvbnRleHQ7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtUGFuSWRRdWVyeTsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBQQU5JRF9RVUVSWV9DTElFTlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWVzaGNvcC90aW1lc3RhbXAuY3BwIGIvc3JjL2NvcmUvbWVzaGNvcC90aW1lc3RhbXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YTMzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9tZXNoY29wL3RpbWVzdGFtcC5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBjb21tb24gTWVzaENvUCB0aW1lc3RhbXAgcHJvY2Vzc2luZy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInRpbWVzdGFtcC5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCitpbnQgVGltZXN0YW1wOjpDb21wYXJlKGNvbnN0IFRpbWVzdGFtcCAmYUNvbXBhcmUpIGNvbnN0Cit7CisgICAgdWludDY0X3QgdGhpc1NlY29uZHMgPSBHZXRTZWNvbmRzKCk7CisgICAgdWludDY0X3QgY29tcGFyZVNlY29uZHMgPSBhQ29tcGFyZS5HZXRTZWNvbmRzKCk7CisgICAgdWludDE2X3QgdGhpc1RpY2tzID0gR2V0VGlja3MoKTsKKyAgICB1aW50MTZfdCBjb21wYXJlVGlja3MgPSBhQ29tcGFyZS5HZXRUaWNrcygpOworICAgIGludCBydmFsOworCisgICAgaWYgKGNvbXBhcmVTZWNvbmRzID4gdGhpc1NlY29uZHMpCisgICAgeworICAgICAgICBydmFsID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tcGFyZVNlY29uZHMgPCB0aGlzU2Vjb25kcykKKyAgICB7CisgICAgICAgIHJ2YWwgPSAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tcGFyZVRpY2tzID4gdGhpc1RpY2tzKQorICAgIHsKKyAgICAgICAgcnZhbCA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKGNvbXBhcmVUaWNrcyA8IHRoaXNUaWNrcykKKyAgICB7CisgICAgICAgIHJ2YWwgPSAtMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcnZhbCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBNZXNoQ29QCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21lc2hjb3AvdGltZXN0YW1wLmhwcCBiL3NyYy9jb3JlL21lc2hjb3AvdGltZXN0YW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjVhN2JhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbWVzaGNvcC90aW1lc3RhbXAuaHBwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIE1lc2hDb1AgdGltZXN0YW1wcy4KKyAqCisgKi8KKworI2lmbmRlZiBNRVNIQ09QX1RJTUVTVEFNUF9IUFBfCisjZGVmaW5lIE1FU0hDT1BfVElNRVNUQU1QX0hQUF8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1lc2hDb1AgeworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUaW1lc3RhbXAgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaW1lc3RhbXAKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVGltZXN0YW1wCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtZW1zZXQobVNlY29uZHMsIDAsIHNpemVvZihtU2Vjb25kcykpOyBtVGlja3MgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wYXJlcyB0aGlzIHRpbWVzdGFtcCB0byBhbm90aGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbXBhcmUgIEEgcmVmZXJlbmNlIHRvIHRoZSB0aW1lc3RhbXAgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgLTEgIGlmIEBwIGFDb21wYXJlIGlzIGxlc3MgdGhhbiB0aGlzIHRpbWVzdGFtcC4KKyAgICAgKiBAcmV0dmFsICAwICBpZiBAcCBhQ29tcGFyZSBpcyBlcXVhbCB0byB0aGlzIHRpbWVzdGFtcC4KKyAgICAgKiBAcmV0dmFsICAxICBpZiBAcCBhQ29tcGFyZSBpcyBncmVhdGVyIHRoYW4gdGhpcyB0aW1lc3RhbXAuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29tcGFyZShjb25zdCBUaW1lc3RhbXAgJmFDb21wYXJlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNlY29uZHMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU2Vjb25kcyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ2NF90IEdldFNlY29uZHModm9pZCkgY29uc3QgeworICAgICAgICB1aW50NjRfdCBzZWNvbmRzID0gMDsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtU2Vjb25kcyk7IGkrKykgeworICAgICAgICAgICAgc2Vjb25kcyA9IChzZWNvbmRzIDw8IDgpIHwgbVNlY29uZHNbaV07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2Vjb25kczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTZWNvbmRzIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlY29uZHMgIFRoZSBTZWNvbmRzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWNvbmRzKHVpbnQ2NF90IGFTZWNvbmRzKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1TZWNvbmRzKTsgaSsrLCBhU2Vjb25kcyA+Pj0gOCkgeworICAgICAgICAgICAgbVNlY29uZHNbc2l6ZW9mKG1TZWNvbmRzKSAtIDEgLSBpXSA9IGFTZWNvbmRzICYgMHhmZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRpY2tzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRpY2tzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0VGlja3Modm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtVGlja3MpID4+IGtUaWNrc09mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGlja3MgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGlja3MgIFRoZSBUaWNrcyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGlja3ModWludDE2X3QgYVRpY2tzKSB7CisgICAgICAgIG1UaWNrcyA9IEhvc3RTd2FwMTYoKEhvc3RTd2FwMTYobVRpY2tzKSAmIH5rVGlja3NNYXNrKSB8ICgoYVRpY2tzIDw8IGtUaWNrc09mZnNldCkgJiBrVGlja3NNYXNrKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQXV0aG9yaXRhdGl2ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBBdXRob3JpdGF0aXZlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBHZXRBdXRob3JpdGF0aXZlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIb3N0U3dhcDE2KG1UaWNrcykgJiBrQXV0aG9yaXRhdGl2ZU1hc2spICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEF1dGhvcml0YXRpdmUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQXV0aG9yaXRhdGl2ZSAgVGhlIEF1dGhvcml0YXRpdmUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEF1dGhvcml0YXRpdmUoYm9vbCBhQXV0aG9yaXRhdGl2ZSkgeworICAgICAgICBtVGlja3MgPSBIb3N0U3dhcDE2KChIb3N0U3dhcDE2KG1UaWNrcykgJiBrVGlja3NNYXNrKSB8ICgoYUF1dGhvcml0YXRpdmUgPDwga0F1dGhvcml0YXRpdmVPZmZzZXQpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0F1dGhvcml0YXRpdmVNYXNrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVNlY29uZHNbNl07CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVGlja3NPZmZzZXQgICAgICAgICA9IDEsCisgICAgICAgIGtUaWNrc01hc2sgICAgICAgICAgID0gMHg3ZmZmIDw8IGtUaWNrc09mZnNldCwKKyAgICAgICAga0F1dGhvcml0YXRpdmVPZmZzZXQgPSAwLAorICAgICAgICBrQXV0aG9yaXRhdGl2ZU1hc2sgICA9IDEgPDwga0F1dGhvcml0YXRpdmVPZmZzZXQsCisgICAgfTsKKyAgICB1aW50MTZfdCBtVGlja3M7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIE1lc2hDb1AKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1FU0hDT1BfVElNRVNUQU1QX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9kaGNwNi5ocHAgYi9zcmMvY29yZS9uZXQvZGhjcDYuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMmEwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvZGhjcDYuaHBwCkBAIC0wLDAgKzEsNTg1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IFNlcnZpY2UuCisgKi8KKworI2lmbmRlZiBESENQNl9IUFBfCisjZGVmaW5lIERIQ1A2X0hQUF8KKworI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgRGhjcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtZGhjcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIERIQ1B2Ni4KKyAqCisgKiBAeworICoKKyAqLworCisKKy8qKgorICogREhDUHY2IGNvbnN0YW50CisgKgorICovCitlbnVtCit7CisgICAga0RoY3BDbGllbnRQb3J0ID0gNTQ2LAorICAgIGtEaGNwU2VydmVyUG9ydCA9IDU0NywKKyAgICBrVHJhbnNhY3Rpb25JZFNpemUgPSAzLAorICAgIGtMaW5rTGF5ZXJBZGRyZXNzTGVuID0gOCwKKyAgICBrSGFyZHdhcmVUeXBlRXVpNjQgPSAyNywKK307CisKKy8qKgorICogREhDUHY2IE1lc3NhZ2UgVHlwZXMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBUeXBlCit7CisgICAga1R5cGVTb2xpY2l0ID0gMSwKKyAgICBrVHlwZUFkdmVydGlzZSA9IDIsCisgICAga1R5cGVSZXF1ZXN0ID0gMywKKyAgICBrVHlwZUNvbmZpcm0gPSA0LAorICAgIGtUeXBlUmVuZXcgPSA1LAorICAgIGtUeXBlUmViaW5kID0gNiwKKyAgICBrVHlwZVJlcGx5ID0gNywKKyAgICBrVHlwZVJlbGVhc2UgPSA4LAorICAgIGtUeXBlRGVjbGluZSA9IDksCisgICAga1R5cGVSZWNvbmZpZ3VyZSA9IDEwLAorICAgIGtUeXBlSW5mb3JtYXRpb25SZXF1ZXN0ID0gMTEsCisgICAga1R5cGVSZWxheUZvcndhcmQgPSAxMiwKKyAgICBrVHlwZVJlbGF5UmVwbHkgPSAxMywKKyAgICBrVHlwZUxlYXNlUXVlcnkgPSAxNCwKKyAgICBrVHlwZUxlYXNlUXVlcnlSZXBseSA9IDE1LAorfSBUeXBlOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIERIQ1B2NiBoZWFkZXIuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgRGhjcDZIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgREhDUHY2IGhlYWRlciB0byBhbGwgemVyb3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtVHlwZSA9IDA7IG1UcmFuc2FjdGlvbklkWzBdID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgREhDUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBESENQdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1UeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgREhDUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgREhDUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZShUeXBlIGFUeXBlKSB7IG1UeXBlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBESENQdjYgbWVzc2FnZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciBvZiBESENQdjYgbWVzc2FnZSB0cmFuc2FjdGlvbiBpZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFRyYW5zYWN0aW9uSWQodm9pZCkgeyByZXR1cm4gbVRyYW5zYWN0aW9uSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERIQ1B2NiBtZXNzYWdlIHRyYW5zYWN0aW9uIGlkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgVGhlIERIQ1B2NiBtZXNzYWdlIHRyYW5zYWN0aW9uIGlkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUcmFuc2FjdGlvbklkKHVpbnQ4X3QgKmFCdWYpIHsgbWVtY3B5KG1UcmFuc2FjdGlvbklkLCBhQnVmLCBrVHJhbnNhY3Rpb25JZFNpemUpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtVHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVHlwZQorICAgIHVpbnQ4X3QgbVRyYW5zYWN0aW9uSWRba1RyYW5zYWN0aW9uSWRTaXplXTsgICAgICAvLy88IFRyYW5zYWN0aW9uIElkCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBESENQdjYgT3B0aW9uIENvZGVzCisgKgorICovCit0eXBlZGVmIGVudW0gQ29kZQoreworICAgIGtPcHRpb25DbGllbnRJZGVudGlmaWVyID0gMSwKKyAgICBrT3B0aW9uU2VydmVySWRlbnRpZmllciA9IDIsCisgICAga09wdGlvbklhTmEgPSAzLAorICAgIGtPcHRpb25JYVRhID0gNCwKKyAgICBrT3B0aW9uSWFBZGRyZXNzID0gNSwKKyAgICBrT3B0aW9uUmVxdWVzdE9wdGlvbiA9IDYsCisgICAga09wdGlvblByZWZlcmVuY2UgPSA3LAorICAgIGtPcHRpb25FbGFwc2VkVGltZSA9IDgsCisgICAga09wdGlvblJlbGF5TWVzc2FnZSA9IDksCisgICAga09wdGlvbkF1dGhlbnRpY2F0aW9uID0gMTEsCisgICAga09wdGlvblNlcnZlclVuaWNhc3QgPSAxMiwKKyAgICBrT3B0aW9uU3RhdHVzQ29kZSA9IDEzLAorICAgIGtPcHRpb25SYXBpZENvbW1pdCA9IDE0LAorICAgIGtPcHRpb25Vc2VyQ2xhc3MgPSAxNSwKKyAgICBrT3B0aW9uVmVuZG9yQ2xhc3MgPSAxNiwKKyAgICBrT3B0aW9uVmVuZG9yU3BlY2lmaWNJbmZvcm1hdGlvbiA9IDE3LAorICAgIGtPcHRpb25JbnRlcmZhY2VJZCA9IDE4LAorICAgIGtPcHRpb25SZWNvbmZpZ3VyZU1lc3NhZ2UgPSAxOSwKKyAgICBrT3B0aW9uUmVjb25maWd1cmVBY2NlcHQgPSAyMCwKKyAgICBrT3B0aW9uTGVhc2VRdWVyeSA9IDQ0LAorICAgIGtPcHRpb25DbGllbnREYXRhID0gNDUsCisgICAga09wdGlvbkNsaWVudExhc3RUcmFuc2FjdGlvblRpbWUgPSA0NiwKK30gQ29kZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgREhDUHY2IG9wdGlvbi4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBEaGNwNk9wdGlvbgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBESENQdjYgb3B0aW9uIHRvIGFsbCB6ZXJvcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IG1Db2RlID0gMDsgbUxlbmd0aCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERIQ1B2NiBvcHRpb24gY29kZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBESENQdjYgb3B0aW9uIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBDb2RlIEdldENvZGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZT4oSG9zdFN3YXAxNihtQ29kZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBESENQdjYgb3B0aW9uIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29kZSAgVGhlIERIQ1B2NiBvcHRpb24gY29kZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29kZShDb2RlIGFDb2RlKSB7IG1Db2RlID0gSG9zdFN3YXAxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4oYUNvZGUpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIERIQ1B2NiBvcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlbmd0aCh1aW50MTZfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBIb3N0U3dhcDE2KGFMZW5ndGgpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbUNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ29kZQorICAgIHVpbnQxNl90IG1MZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IExlbmd0aAorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogRHVpZCBUeXBlCisgKgorICovCit0eXBlZGVmIGVudW0gRHVpZFR5cGUKK3sKKyAgICBrRHVpZExMVCA9IDEsCisgICAga0R1aWRFTiA9IDIsCisgICAga0R1aWRMTCA9IDMsCit9IER1aWRUeXBlOworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2xpZW50SWRlbnRpZmllcjogcHVibGljIERoY3A2T3B0aW9uCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIERIQ1B2NiBPcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRDb2RlKGtPcHRpb25DbGllbnRJZGVudGlmaWVyKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2xpZW50IER1aWQgVHlwZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjbGllbnQgRHVpZCBUeXBlLgorICAgICAqCisgICAgICovCisgICAgRHVpZFR5cGUgR2V0RHVpZFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RHVpZFR5cGU+KEhvc3RTd2FwMTYobUR1aWRUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNsaWVudCBEdWlkIFR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHVpZFR5cGUgIFRoZSBjbGllbnQgRHVpZCBUeXBlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREdWlkVHlwZShEdWlkVHlwZSBhRHVpZFR5cGUpIHsgbUR1aWRUeXBlID0gSG9zdFN3YXAxNihzdGF0aWNfY2FzdDx1aW50MTZfdD4oYUR1aWRUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNsaWVudCBEdWlkIEhhcmR3YXJlVHlwZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjbGllbnQgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXREdWlkSGFyZHdhcmVUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUR1aWRIYXJkd2FyZVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBjbGllbnQgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRHVpZEhhcmR3YXJlVHlwZSAgVGhlIGNsaWVudCBEdWlkIEhhcmR3YXJlVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RHVpZEhhcmR3YXJlVHlwZSh1aW50MTZfdCBhRHVpZEhhcmR3YXJlVHlwZSkgeyBtRHVpZEhhcmR3YXJlVHlwZSA9IEhvc3RTd2FwMTYoYUR1aWRIYXJkd2FyZVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjbGllbnQgTGlua0xheWVyQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgY2xpZW50IExpbmtMYXllckFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXREdWlkTGlua0xheWVyQWRkcmVzcyh2b2lkKSB7IHJldHVybiBtRHVpZExpbmtMYXllckFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNsaWVudCBMaW5rTGF5ZXJBZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtMYXllckFkZHJlc3MgVGhlIGNsaWVudCBMaW5rTGF5ZXJBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREdWlkTGlua0xheWVyQWRkcmVzcyhjb25zdCBNYWM6OkV4dEFkZHJlc3MgKmFEdWlkTGlua0xheWVyQWRkcmVzcykgeyBtZW1jcHkobUR1aWRMaW5rTGF5ZXJBZGRyZXNzLCBhRHVpZExpbmtMYXllckFkZHJlc3MsIHNpemVvZihNYWM6OkV4dEFkZHJlc3MpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1EdWlkVHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRHVpZCBUeXBlCisgICAgdWludDE2X3QgbUR1aWRIYXJkd2FyZVR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBEdWlkIEhhcmR3YXJlVHlwZQorICAgIHVpbnQ4X3QgIG1EdWlkTGlua0xheWVyQWRkcmVzc1trTGlua0xheWVyQWRkcmVzc0xlbl07ICAgICAgIC8vLzwgRHVpZCBMaW5rTGF5ZXJBZGRyZXNzCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFNlcnZlcklkZW50aWZpZXI6IHB1YmxpYyBEaGNwNk9wdGlvbgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBESENQdjYgT3B0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0Q29kZShrT3B0aW9uU2VydmVySWRlbnRpZmllcik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNlcnZlciBEdWlkIFR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2VydmVyIER1aWQgVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIER1aWRUeXBlIEdldER1aWRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PER1aWRUeXBlPihIb3N0U3dhcDE2KG1EdWlkVHlwZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzZXJ2ZXIgRHVpZCBUeXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUR1aWRUeXBlICBUaGUgc2VydmVyIER1aWQgVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RHVpZFR5cGUoRHVpZFR5cGUgYUR1aWRUeXBlKSB7IG1EdWlkVHlwZSA9IEhvc3RTd2FwMTYoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFEdWlkVHlwZSkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzZXJ2ZXIgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2VydmVyIER1aWQgSGFyZHdhcmVUeXBlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RHVpZEhhcmR3YXJlVHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1EdWlkSGFyZHdhcmVUeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2VydmVyIER1aWQgSGFyZHdhcmVUeXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUR1aWRIYXJkd2FyZVR5cGUgIFRoZSBzZXJ2ZXIgRHVpZCBIYXJkd2FyZVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldER1aWRIYXJkd2FyZVR5cGUodWludDE2X3QgYUR1aWRIYXJkd2FyZVR5cGUpIHsgbUR1aWRIYXJkd2FyZVR5cGUgPSBIb3N0U3dhcDE2KGFEdWlkSGFyZHdhcmVUeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2VydmVyIExpbmtMYXllckFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHNlcnZlciBMaW5rTGF5ZXJBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0RHVpZExpbmtMYXllckFkZHJlc3Modm9pZCkgeyByZXR1cm4gbUR1aWRMaW5rTGF5ZXJBZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzZXJ2ZXIgTGlua0xheWVyQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rTGF5ZXJBZGRyZXNzIFRoZSBzZXJ2ZXIgTGlua0xheWVyQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RHVpZExpbmtMYXllckFkZHJlc3MoY29uc3QgTWFjOjpFeHRBZGRyZXNzICphRHVpZExpbmtMYXllckFkZHJlc3MpIHsgbWVtY3B5KG1EdWlkTGlua0xheWVyQWRkcmVzcywgYUR1aWRMaW5rTGF5ZXJBZGRyZXNzLCBzaXplb2YoTWFjOjpFeHRBZGRyZXNzKSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtRHVpZFR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IER1aWQgVHlwZQorICAgIHVpbnQxNl90IG1EdWlkSGFyZHdhcmVUeXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRHVpZCBIYXJkd2FyZVR5cGUKKyAgICB1aW50OF90ICBtRHVpZExpbmtMYXllckFkZHJlc3Nba0xpbmtMYXllckFkZHJlc3NMZW5dOyAgICAgICAvLy88IER1aWQgTGlua0xheWVyQWRkcmVzcworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBJYU5hOiBwdWJsaWMgRGhjcDZPcHRpb24KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgREhDUHY2IE9wdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldENvZGUoa09wdGlvbklhTmEpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihEaGNwNk9wdGlvbikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGNsaWVudCBJQUlELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGNsaWVudCBJQUlELgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWFpZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JYWlkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2xpZW50IElBSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWFJZCAgVGhlIGNsaWVudCBJQUlELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJYWlkKHVpbnQzMl90IGFJYWlkKSB7IG1JYWlkID0gSG9zdFN3YXAzMihhSWFpZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgVDEuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgVDEuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUMSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UMSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIFQxLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVQxICBUaGUgdmFsdWUgb2YgVDEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFQxKHVpbnQzMl90IGFUMSkgeyBtVDEgPSBIb3N0U3dhcDMyKGFUMSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgVDIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgVDIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUMih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UMik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHZhbHVlIG9mIFQyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVQyICBUaGUgdmFsdWUgb2YgVDIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFQyKHVpbnQzMl90IGFUMikgeyBtVDIgPSBIb3N0U3dhcDMyKGFUMik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtSWFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBJQUlECisgICAgdWludDMyX3QgbVQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVDEKKyAgICB1aW50MzJfdCBtVDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBUMgorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBJYUFkZHJlc3M6IHB1YmxpYyBEaGNwNk9wdGlvbgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBESENQdjYgT3B0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0Q29kZShrT3B0aW9uSWFBZGRyZXNzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdElwNkFkZHJlc3MgKkdldEFkZHJlc3Modm9pZCkgeyByZXR1cm4gJm1BZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzIHRvIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWRkcmVzcyhvdElwNkFkZHJlc3MgJmFBZGRyZXNzKSB7IG1lbWNweShtQWRkcmVzcy5tRmllbGRzLm04LCBhQWRkcmVzcy5tRmllbGRzLm04LCBzaXplb2Yob3RJcDZBZGRyZXNzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHByZWZlcnJlZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHByZWZlcnJlZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UHJlZmVycmVkTGlmZXRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtUHJlZmVycmVkTGlmZXRpbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwcmVmZXJyZWQgbGlmZXRpbWUgb2YgdGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmZXJyZWRMaWZldGltZSAgVGhlIHByZWZlcnJlZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmZXJyZWRMaWZldGltZSh1aW50MzJfdCBhUHJlZmVycmVkTGlmZXRpbWUpIHsgbVByZWZlcnJlZExpZmV0aW1lID0gSG9zdFN3YXAzMihhUHJlZmVycmVkTGlmZXRpbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB2YWxpZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHZhbGlkIGxpZmV0aW1lIG9mIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRWYWxpZExpZmV0aW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVZhbGlkTGlmZXRpbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB2YWxpZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZhbGlkTGlmZXRpbWUgIFRoZSB2YWxpZCBsaWZldGltZSBvZiB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRWYWxpZExpZmV0aW1lKHVpbnQzMl90IGFWYWxpZExpZmV0aW1lKSB7IG1WYWxpZExpZmV0aW1lID0gSG9zdFN3YXAzMihhVmFsaWRMaWZldGltZSk7IH0KKworcHJpdmF0ZToKKyAgICBvdElwNkFkZHJlc3MgbUFkZHJlc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBJUHY2IGFkZHJlc3MKKyAgICB1aW50MzJfdCBtUHJlZmVycmVkTGlmZXRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8vPCBQcmVmZXJyZWQgTGlmZXRpbWUKKyAgICB1aW50MzJfdCBtVmFsaWRMaWZldGltZTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBWYWxpZCBMaWZldGltZQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBFbGFwc2VkVGltZTogcHVibGljIERoY3A2T3B0aW9uCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIERIQ1B2NiBPcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRDb2RlKGtPcHRpb25FbGFwc2VkVGltZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSBzb2xpY2l0IHN0YXJ0cy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBlbGFwc2VkIHRpbWUgc2luY2Ugc29saWNpdCBzdGFydHMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRFbGFwc2VkVGltZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1FbGFwc2VkVGltZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSBzb2xpY2l0IHN0YXJ0cy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUVsYXBzZWRUaW1lIFRoZSBlbGFwc2VkIHRpbWUgc2luY2Ugc29saWNpdCBzdGFydHMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEVsYXBzZWRUaW1lKHVpbnQxNl90IGFFbGFwc2VkVGltZSkgeyBtRWxhcHNlZFRpbWUgPSBIb3N0U3dhcDE2KGFFbGFwc2VkVGltZSk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtRWxhcHNlZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBFbGFwc2VkIHRpbWUKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFN0YXR1cyBDb2RlCisgKgorICovCit0eXBlZGVmIGVudW0gU3RhdHVzCit7CisgICAga1N0YXR1c1N1Y2Nlc3MgPSAwLAorICAgIGtTdGF0dXNVbnNwZWNGYWlsID0gMSwKKyAgICBrU3RhdHVzTm9BZGRyc0F2YWlsID0gMiwKKyAgICBrU3RhdHVzTm9CaW5kaW5nID0gMywKKyAgICBrU3RhdHVzTm90T25MaW5rID0gNCwKKyAgICBrU3RhdHVzVXNlTXVsdGljYXN0ID0gNSwKKyAgICBrVW5rbm93blF1ZXJ5VHlwZSA9IDcsCisgICAga01hbGZvcm1lZFF1ZXJ5ID0gOCwKKyAgICBrTm90Q29uZmlndXJlZCA9IDksCisgICAga05vdEFsbG93ZWQgPSAxMCwKK30gU3RhdHVzOworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RhdHVzQ29kZTogcHVibGljIERoY3A2T3B0aW9uCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIERIQ1B2NiBPcHRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRDb2RlKGtPcHRpb25TdGF0dXNDb2RlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3RhdHVzIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc3RhdHVzIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBTdGF0dXMgR2V0U3RhdHVzQ29kZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0dXM+KEhvc3RTd2FwMTYobVN0YXR1cykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzdGF0dXMgY29kZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYVN0YXR1cyBUaGUgc3RhdHVzIGNvZGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YXR1c0NvZGUoU3RhdHVzIGFTdGF0dXMpIHsgbVN0YXR1cyA9IEhvc3RTd2FwMTYoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFTdGF0dXMpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1TdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFN0YXR1cyBDb2RlCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFJhcGlkQ29tbWl0OiBwdWJsaWMgRGhjcDZPcHRpb24KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgREhDUHY2IE9wdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldENvZGUoa09wdGlvblJhcGlkQ29tbWl0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoRGhjcDZPcHRpb24pKTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKK30gIC8vIG5hbWVzcGFjZSBEaGNwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gREhDUDZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2RoY3A2X2NsaWVudC5jcHAgYi9zcmMvY29yZS9uZXQvZGhjcDZfY2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNiMjhhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2RoY3A2X2NsaWVudC5jcHAKQEAgLTAsMCArMSw3MzUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgREhDUHY2IENsaWVudC4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJkaGNwNl9jbGllbnQudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImRoY3A2X2NsaWVudC5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJuZXQvZGhjcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIERoY3A2IHsKKworRGhjcDZDbGllbnQ6OkRoY3A2Q2xpZW50KFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtVHJpY2tsZVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZEaGNwNkNsaWVudDo6SGFuZGxlVHJpY2tsZVRpbWVyLCBOVUxMLCB0aGlzKSwKKyAgICBtU29ja2V0KGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtU3RhcnRUaW1lKDApLAorICAgIG1BZGRyZXNzZXMoTlVMTCksCisgICAgbU51bUFkZHJlc3NlcygwKQoreworICAgIG1lbXNldChtSWRlbnRpdHlBc3NvY2lhdGlvbnMsIDAsIHNpemVvZihJZGVudGl0eUFzc29jaWF0aW9uKSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAoT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVMgLSAxKTsgaSsrKQorICAgIHsKKyAgICAgICAgbUlkZW50aXR5QXNzb2NpYXRpb25zW2ldLlNldE5leHQoJihtSWRlbnRpdHlBc3NvY2lhdGlvbnNbaSArIDFdKSk7CisgICAgfQorCisgICAgbUlkZW50aXR5QXNzb2NpYXRpb25IZWFkID0gTlVMTDsKKyAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkF2YWlsID0gJm1JZGVudGl0eUFzc29jaWF0aW9uc1swXTsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6VXBkYXRlQWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3REaGNwQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ29udGV4dCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG5ld0FnZW50ID0gZmFsc2U7CisgICAgb3REaGNwQWRkcmVzcyAqYWRkcmVzcyA9IE5VTEw7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGNvbmZpZzsKKworICAgIG1BZGRyZXNzZXMgPSBhQWRkcmVzc2VzOworICAgIG1OdW1BZGRyZXNzZXMgPSBhTnVtQWRkcmVzc2VzOworCisgICAgLy8gcmVtb3ZlIGFkZHJlc3NlcyBkaXJlY3RseSBpZiBwcmVmaXggbm90IHZhbGlkIGluIG5ldHdvcmsgZGF0YQorICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1OdW1BZGRyZXNzZXM7IGkrKykKKyAgICB7CisgICAgICAgIGFkZHJlc3MgPSAmbUFkZHJlc3Nlc1tpXTsKKworICAgICAgICBpZiAoYWRkcmVzcy0+bVZhbGlkTGlmZXRpbWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3VuZCA9IGZhbHNlOworICAgICAgICBpdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworCisgICAgICAgIHdoaWxlICgob3ROZXREYXRhR2V0TmV4dE9uTWVzaFByZWZpeChhSW5zdGFuY2UsICZpdGVyYXRvciwgJmNvbmZpZykpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY29uZmlnLm1EaGNwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKG90SXA2UHJlZml4TWF0Y2goJihhZGRyZXNzLT5tQWRkcmVzcy5tQWRkcmVzcyksICYoY29uZmlnLm1QcmVmaXgubVByZWZpeCkpID49CisgICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1BZGRyZXNzLm1QcmVmaXhMZW5ndGgpICYmCisgICAgICAgICAgICAgICAgKGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggPT0gYWRkcmVzcy0+bUFkZHJlc3MubVByZWZpeExlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RJcDZSZW1vdmVVbmljYXN0QWRkcmVzcyhhSW5zdGFuY2UsICYoYWRkcmVzcy0+bUFkZHJlc3MubUFkZHJlc3MpKTsKKyAgICAgICAgICAgIFJlbW92ZUlkZW50aXR5QXNzb2NpYXRpb24oY29uZmlnLm1SbG9jMTYsIGNvbmZpZy5tUHJlZml4KTsKKyAgICAgICAgICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplb2YoKmFkZHJlc3MpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGFkZCBJZGVudGl0eUFzc29jaWF0aW9uIGZvciBuZXcgY29uZmlndXJlZCBwcmVmaXgKKyAgICBpdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworCisgICAgd2hpbGUgKG90TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgoYUluc3RhbmNlLCAmaXRlcmF0b3IsICZjb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5tRGhjcCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1OdW1BZGRyZXNzZXM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcmVzcyA9ICZtQWRkcmVzc2VzW2ldOworCisgICAgICAgICAgICBpZiAoYWRkcmVzcy0+bUFkZHJlc3MubVByZWZpeExlbmd0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKG90SXA2UHJlZml4TWF0Y2goJihjb25maWcubVByZWZpeC5tUHJlZml4KSwgJihhZGRyZXNzLT5tQWRkcmVzcy5tQWRkcmVzcykpID49CisgICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZml4Lm1MZW5ndGgpICYmCisgICAgICAgICAgICAgICAgKGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggPT0gYWRkcmVzcy0+bUFkZHJlc3MubVByZWZpeExlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtTnVtQWRkcmVzc2VzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9ICZtQWRkcmVzc2VzW2ldOworCisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm1BZGRyZXNzLm1QcmVmaXhMZW5ndGggIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplb2YoKmFkZHJlc3MpKTsKKworICAgICAgICAgICAgICAgIC8vIHN1cHBvc2UgYWxsIGNvbmZpZ3VyZWQgcHJlZml4IGFyZSA6Oi82NAorICAgICAgICAgICAgICAgIG1lbWNweShhZGRyZXNzLT5tQWRkcmVzcy5tQWRkcmVzcy5tRmllbGRzLm04LCBjb25maWcubVByZWZpeC5tUHJlZml4Lm1GaWVsZHMubTgsIDgpOworICAgICAgICAgICAgICAgIGFkZHJlc3MtPm1BZGRyZXNzLm1QcmVmaXhMZW5ndGggPSBjb25maWcubVByZWZpeC5tTGVuZ3RoOworCisgICAgICAgICAgICAgICAgQWRkSWRlbnRpdHlBc3NvY2lhdGlvbihjb25maWcubVJsb2MxNiwgY29uZmlnLm1QcmVmaXgpOworICAgICAgICAgICAgICAgIG5ld0FnZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXdBZ2VudCkKKyAgICB7CisgICAgICAgIFN0YXJ0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN0b3AoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGhjcDZDbGllbnQ6OkFkZElkZW50aXR5QXNzb2NpYXRpb24odWludDE2X3QgYVJsb2MxNiwgb3RJcDZQcmVmaXggJmFJcDZQcmVmaXgpCit7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqaWRlbnRpdHlBc3NvY2lhdGlvbiA9IE5VTEw7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqaWRlbnRpdHlBc3NvY2lhdGlvbkN1cnNvciA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbCk7CisKKyAgICBpZGVudGl0eUFzc29jaWF0aW9uID0gbUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbDsKKyAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkF2YWlsID0gbUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbC0+R2V0TmV4dCgpOworCisgICAgaWRlbnRpdHlBc3NvY2lhdGlvbi0+U2V0UHJlZml4QWdlbnRSbG9jKGFSbG9jMTYpOworICAgIGlkZW50aXR5QXNzb2NpYXRpb24tPlNldFByZWZpeChhSXA2UHJlZml4KTsKKyAgICBpZGVudGl0eUFzc29jaWF0aW9uLT5TZXRTdGF0dXMoSWRlbnRpdHlBc3NvY2lhdGlvbjo6a1N0YXR1c1NvbGljaXQpOworCisgICAgaWRlbnRpdHlBc3NvY2lhdGlvbi0+U2V0TmV4dChOVUxMKTsKKworICAgIGlmIChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQpCisgICAgeworICAgICAgICAvLyBhcHBlbmQgdGhlIG5ldyBpZGVudGl0eWFzc29jaWF0aW9uIHRvIHRoZSB0YWlsIG9mIHVzZWQgbGlzdAorICAgICAgICBmb3IgKGlkZW50aXR5QXNzb2NpYXRpb25DdXJzb3IgPSBtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQ7IGlkZW50aXR5QXNzb2NpYXRpb25DdXJzb3ItPkdldE5leHQoKTsKKyAgICAgICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uQ3Vyc29yID0gaWRlbnRpdHlBc3NvY2lhdGlvbkN1cnNvci0+R2V0TmV4dCgpKSB7fQorCisgICAgICAgIGlkZW50aXR5QXNzb2NpYXRpb25DdXJzb3ItPlNldE5leHQoaWRlbnRpdHlBc3NvY2lhdGlvbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCA9IGlkZW50aXR5QXNzb2NpYXRpb247CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6UmVtb3ZlSWRlbnRpdHlBc3NvY2lhdGlvbih1aW50MTZfdCBhUmxvYzE2LCBvdElwNlByZWZpeCAmYUlwNlByZWZpeCkKK3sKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICpwcmV2SWRlbnRpdHlBc3NvY2lhdGlvbiA9IE5VTEw7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqaWRlbnRpdHlBc3NvY2lhdGlvbiA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkKTsKKworICAgIGZvciAoaWRlbnRpdHlBc3NvY2lhdGlvbiA9IG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZDsgaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgIHByZXZJZGVudGl0eUFzc29jaWF0aW9uID0gaWRlbnRpdHlBc3NvY2lhdGlvbiwgaWRlbnRpdHlBc3NvY2lhdGlvbiA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRQcmVmaXhBZ2VudFJsb2MoKSAhPSBhUmxvYzE2KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYoYUlwNlByZWZpeC5tUHJlZml4KSwgJihpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRQcmVmaXgoKS0+bVByZWZpeCkpIDwgYUlwNlByZWZpeC5tTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBmcm9tIHVzZWQgbGlzdAorICAgICAgICBpZiAocHJldklkZW50aXR5QXNzb2NpYXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZXZJZGVudGl0eUFzc29jaWF0aW9uLT5TZXROZXh0KGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQgPSBpZGVudGl0eUFzc29jaWF0aW9uLT5HZXROZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyByZXR1cm4gdG8gYXZhaWxhYmxlIGxpc3QKKyAgICAgICAgbWVtc2V0KGlkZW50aXR5QXNzb2NpYXRpb24sIDAsIHNpemVvZigqaWRlbnRpdHlBc3NvY2lhdGlvbikpOworICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uLT5TZXROZXh0KG1JZGVudGl0eUFzc29jaWF0aW9uQXZhaWwpOworICAgICAgICBtSWRlbnRpdHlBc3NvY2lhdGlvbkF2YWlsID0gaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6U3RhcnQodm9pZCkKK3sKKyAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworCisgICAgc29ja2FkZHIubVBvcnQgPSBrRGhjcENsaWVudFBvcnQ7CisgICAgbVNvY2tldC5PcGVuKCZEaGNwNkNsaWVudDo6SGFuZGxlVWRwUmVjZWl2ZSwgdGhpcyk7CisgICAgbVNvY2tldC5CaW5kKHNvY2thZGRyKTsKKworICAgIFByb2Nlc3NOZXh0SWRlbnRpdHlBc3NvY2lhdGlvbigpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OlN0b3Aodm9pZCkKK3sKKyAgICBtU29ja2V0LkNsb3NlKCk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgRGhjcDZDbGllbnQ6OlByb2Nlc3NOZXh0SWRlbnRpdHlBc3NvY2lhdGlvbigpCit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqcHJldklkZW50aXR5QXNzb2NpYXRpb24gPSBOVUxMOworICAgIElkZW50aXR5QXNzb2NpYXRpb24gKmlkZW50aXR5QXNzb2NpYXRpb24gPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCk7CisgICAgLy8gbm90IGludGVycnVwdCBpbi1wcm9ncmVzcyBzb2xpY2l0CisgICAgVmVyaWZ5T3JFeGl0KChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQtPkdldFN0YXR1cygpICE9IElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0aW5nKSk7CisKKyAgICBtVHJpY2tsZVRpbWVyLlN0b3AoKTsKKworICAgIGZvciAoaWRlbnRpdHlBc3NvY2lhdGlvbiA9IG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZDsgaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgIHByZXZJZGVudGl0eUFzc29jaWF0aW9uID0gaWRlbnRpdHlBc3NvY2lhdGlvbiwgaWRlbnRpdHlBc3NvY2lhdGlvbiA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRTdGF0dXMoKSAhPSBJZGVudGl0eUFzc29jaWF0aW9uOjprU3RhdHVzU29saWNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBuZXcgdHJhbnNhY3Rpb24gaWQKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwga1RyYW5zYWN0aW9uSWRTaXplOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UcmFuc2FjdGlvbklkW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZW5zdXJlIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCBpcyB0aGUgcHJlZml4IGFnZW50IHRvIHNvbGljaXQuCisgICAgICAgIGlmIChwcmV2SWRlbnRpdHlBc3NvY2lhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcHJldklkZW50aXR5QXNzb2NpYXRpb24tPlNldE5leHQoaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0TmV4dCgpKTsKKyAgICAgICAgICAgIGlkZW50aXR5QXNzb2NpYXRpb24tPlNldE5leHQobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkKTsKKyAgICAgICAgICAgIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCA9IGlkZW50aXR5QXNzb2NpYXRpb247CisgICAgICAgIH0KKworICAgICAgICBtVHJpY2tsZVRpbWVyLlN0YXJ0KAorICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYyhrVHJpY2tsZVRpbWVySW1pbiksCisgICAgICAgICAgICBUaW1lcjo6U2VjVG9Nc2VjKGtUcmlja2xlVGltZXJJbWF4KSwKKyAgICAgICAgICAgIFRyaWNrbGVUaW1lcjo6a01vZGVOb3JtYWwpOworCisgICAgICAgIG1Ucmlja2xlVGltZXIuSW5kaWNhdGVJbmNvbnNpc3RlbnQoKTsKKworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2Jvb2wgRGhjcDZDbGllbnQ6OkhhbmRsZVRyaWNrbGVUaW1lcihUcmlja2xlVGltZXIgJmFUcmlja2xlVGltZXIpCit7CisgICAgcmV0dXJuIEdldE93bmVyKGFUcmlja2xlVGltZXIpLkhhbmRsZVRyaWNrbGVUaW1lcigpOworfQorCitib29sIERoY3A2Q2xpZW50OjpIYW5kbGVUcmlja2xlVGltZXIodm9pZCkKK3sKKyAgICBib29sIHJ2YWwgPSB0cnVlOworCisgICAgVmVyaWZ5T3JFeGl0KG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZCwgcnZhbCA9IGZhbHNlKTsKKworICAgIHN3aXRjaCAobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkLT5HZXRTdGF0dXMoKSkKKyAgICB7CisgICAgY2FzZSBJZGVudGl0eUFzc29jaWF0aW9uOjprU3RhdHVzU29saWNpdDoKKyAgICAgICAgbVN0YXJ0VGltZSA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgIG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZC0+U2V0U3RhdHVzKElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0aW5nKTsKKworICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgY2FzZSBJZGVudGl0eUFzc29jaWF0aW9uOjprU3RhdHVzU29saWNpdGluZzoKKyAgICAgICAgU29saWNpdChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQtPkdldFByZWZpeEFnZW50UmxvYygpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0UmVwbGllZDoKKyAgICAgICAgaWYgKCFQcm9jZXNzTmV4dElkZW50aXR5QXNzb2NpYXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVRyaWNrbGVUaW1lci5TdG9wKCk7CisgICAgICAgICAgICBTdG9wKCk7CisgICAgICAgICAgICBydmFsID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6U29saWNpdCh1aW50MTZfdCBhUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbVNvY2tldC5OZXdNZXNzYWdlKDApKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRFbGFwc2VkVGltZSgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDbGllbnRJZGVudGlmaWVyKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZElhTmEoKm1lc3NhZ2UsIGFSbG9jMTYpKTsKKyAgICAvLyBzcGVjaWZ5IHdoaWNoIHByZWZpeGVzIHRvIHNvbGljaXQKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSWFBZGRyZXNzKCptZXNzYWdlLCBhUmxvYzE2KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJhcGlkQ29tbWl0KCptZXNzYWdlKSk7CisKKyAgICBtZW1zZXQoJm1lc3NhZ2VJbmZvLCAwLCBzaXplb2YobWVzc2FnZUluZm8pKTsKKyAgICBtZW1jcHkobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04LCBuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgOCk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzVdID0gSG9zdFN3YXAxNigweDAwZmYpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbNl0gPSBIb3N0U3dhcDE2KDB4ZmUwMCk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoYVJsb2MxNik7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8ubVBlZXJQb3J0ID0ga0RoY3BTZXJ2ZXJQb3J0OworICAgIG1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCA9IG5ldGlmLkdldEludGVyZmFjZUlkKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5TZW5kVG8oKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisgICAgb3RMb2dJbmZvSXA2KEdldEluc3RhbmNlKCksICJzb2xpY2l0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmIGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgRGhjcDZIZWFkZXIgaGVhZGVyOworCisgICAgaGVhZGVyLkluaXQoKTsKKyAgICBoZWFkZXIuU2V0VHlwZShrVHlwZVNvbGljaXQpOworICAgIGhlYWRlci5TZXRUcmFuc2FjdGlvbklkKG1UcmFuc2FjdGlvbklkKTsKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6QXBwZW5kRWxhcHNlZFRpbWUoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgRWxhcHNlZFRpbWUgb3B0aW9uOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICBvcHRpb24uU2V0RWxhcHNlZFRpbWUoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KFRpbWVyOjpNc2VjVG9TZWMob3RQbGF0QWxhcm1HZXROb3coKSAtIG1TdGFydFRpbWUpKSk7CisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OkFwcGVuZENsaWVudElkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgQ2xpZW50SWRlbnRpZmllciBvcHRpb247CisKKyAgICBvcHRpb24uSW5pdCgpOworICAgIG9wdGlvbi5TZXREdWlkVHlwZShrRHVpZExMKTsKKyAgICBvcHRpb24uU2V0RHVpZEhhcmR3YXJlVHlwZShrSGFyZHdhcmVUeXBlRXVpNjQpOworICAgIG9wdGlvbi5TZXREdWlkTGlua0xheWVyQWRkcmVzcyhHZXROZXRpZigpLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OkFwcGVuZElhTmEoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBjb3VudCA9IDA7CisgICAgdWludDE2X3QgbGVuZ3RoID0gMDsKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICppZGVudGl0eUFzc29jaWF0aW9uID0gTlVMTDsKKyAgICBJYU5hIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdChtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBmb3IgKGlkZW50aXR5QXNzb2NpYXRpb24gPSBtSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQ7IGlkZW50aXR5QXNzb2NpYXRpb247CisgICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uID0gaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGlkZW50aXR5QXNzb2NpYXRpb24tPkdldFN0YXR1cygpID09IElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0UmVwbGllZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0UHJlZml4QWdlbnRSbG9jKCkgPT0gYVJsb2MxNikKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGNvbXB1dGUgdGhlIHJpZ2h0IGxlbmd0aAorICAgIGxlbmd0aCA9IHNpemVvZihJYU5hKSArIHNpemVvZihJYUFkZHJlc3MpICogY291bnQgLSBzaXplb2YoRGhjcDZPcHRpb24pOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICBvcHRpb24uU2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgb3B0aW9uLlNldElhaWQoMCk7CisgICAgb3B0aW9uLlNldFQxKDApOworICAgIG9wdGlvbi5TZXRUMigwKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihJYU5hKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6QXBwZW5kSWFBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElkZW50aXR5QXNzb2NpYXRpb24gKmlkZW50aXR5QXNzb2NpYXRpb24gPSBOVUxMOworICAgIElhQWRkcmVzcyBvcHRpb247CisKKyAgICBWZXJpZnlPckV4aXQobUlkZW50aXR5QXNzb2NpYXRpb25IZWFkLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3B0aW9uLkluaXQoKTsKKworICAgIGZvciAoaWRlbnRpdHlBc3NvY2lhdGlvbiA9IG1JZGVudGl0eUFzc29jaWF0aW9uSGVhZDsgaWRlbnRpdHlBc3NvY2lhdGlvbjsKKyAgICAgICAgIGlkZW50aXR5QXNzb2NpYXRpb24gPSBpZGVudGl0eUFzc29jaWF0aW9uLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoKGlkZW50aXR5QXNzb2NpYXRpb24tPkdldFN0YXR1cygpICE9IElkZW50aXR5QXNzb2NpYXRpb246OmtTdGF0dXNTb2xpY2l0UmVwbGllZCkgJiYKKyAgICAgICAgICAgIChpZGVudGl0eUFzc29jaWF0aW9uLT5HZXRQcmVmaXhBZ2VudFJsb2MoKSA9PSBhUmxvYzE2KSkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9uLlNldEFkZHJlc3MoaWRlbnRpdHlBc3NvY2lhdGlvbi0+R2V0UHJlZml4KCktPm1QcmVmaXgpOworICAgICAgICAgICAgb3B0aW9uLlNldFByZWZlcnJlZExpZmV0aW1lKDApOworICAgICAgICAgICAgb3B0aW9uLlNldFZhbGlkTGlmZXRpbWUoMCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpBcHBlbmRSYXBpZENvbW1pdChNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBSYXBpZENvbW1pdCBvcHRpb247CisKKyAgICBvcHRpb24uSW5pdCgpOworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJm9wdGlvbiwgc2l6ZW9mKG9wdGlvbikpOworfQorCit2b2lkIERoY3A2Q2xpZW50OjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgRGhjcDZDbGllbnQgKm9iaiA9IHN0YXRpY19jYXN0PERoY3A2Q2xpZW50ICo+KGFDb250ZXh0KTsKKyAgICBvYmotPkhhbmRsZVVkcFJlY2VpdmUoKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLCAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6SGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIERoY3A2SGVhZGVyIGhlYWRlcjsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU1lc3NhZ2VJbmZvKTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoaGVhZGVyKSwgJmhlYWRlcikgPT0gc2l6ZW9mKGhlYWRlcikpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGhlYWRlcikpOworCisgICAgaWYgKChoZWFkZXIuR2V0VHlwZSgpID09IGtUeXBlUmVwbHkpICYmICghbWVtY21wKGhlYWRlci5HZXRUcmFuc2FjdGlvbklkKCksIG1UcmFuc2FjdGlvbklkLCBrVHJhbnNhY3Rpb25JZFNpemUpKSkKKyAgICB7CisgICAgICAgIFByb2Nlc3NSZXBseShhTWVzc2FnZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEaGNwNkNsaWVudDo6UHJvY2Vzc1JlcGx5KE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIHVpbnQxNl90IG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworICAgIHVpbnQxNl90IGxlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3Qgb3B0aW9uT2Zmc2V0OworCisgICAgLy8gU2VydmVyIElkZW50aWZpZXIKKyAgICBWZXJpZnlPckV4aXQoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoLCBrT3B0aW9uU2VydmVySWRlbnRpZmllcikpID4gMCk7CisgICAgU3VjY2Vzc09yRXhpdChQcm9jZXNzU2VydmVySWRlbnRpZmllcihhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICAvLyBDbGllbnQgSWRlbnRpZmllcgorICAgIFZlcmlmeU9yRXhpdCgob3B0aW9uT2Zmc2V0ID0gRmluZE9wdGlvbihhTWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25DbGllbnRJZGVudGlmaWVyKSkgPiAwKTsKKyAgICBTdWNjZXNzT3JFeGl0KFByb2Nlc3NDbGllbnRJZGVudGlmaWVyKGFNZXNzYWdlLCBvcHRpb25PZmZzZXQpKTsKKworICAgIC8vIFJhcGlkIENvbW1pdAorICAgIFZlcmlmeU9yRXhpdChGaW5kT3B0aW9uKGFNZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCwga09wdGlvblJhcGlkQ29tbWl0KSA+IDApOworCisgICAgLy8gSUFfTkEKKyAgICBWZXJpZnlPckV4aXQoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoLCBrT3B0aW9uSWFOYSkpID4gMCk7CisgICAgU3VjY2Vzc09yRXhpdChQcm9jZXNzSWFOYShhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICBIYW5kbGVUcmlja2xlVGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3VpbnQxNl90IERoY3A2Q2xpZW50OjpGaW5kT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCBEaGNwNjo6Q29kZSBhQ29kZSkKK3sKKyAgICB1aW50MTZfdCBlbmQgPSBhT2Zmc2V0ICsgYUxlbmd0aDsKKworICAgIHdoaWxlIChhT2Zmc2V0IDw9IGVuZCkKKyAgICB7CisgICAgICAgIERoY3A2T3B0aW9uIG9wdGlvbjsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKTsKKworICAgICAgICBpZiAob3B0aW9uLkdldENvZGUoKSA9PSAoYUNvZGUpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIGFPZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiAwOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpQcm9jZXNzU2VydmVySWRlbnRpZmllcihNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTZXJ2ZXJJZGVudGlmaWVyIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoc2l6ZW9mKG9wdGlvbikgLSBzaXplb2YoRGhjcDZPcHRpb24pKSkgJiYKKyAgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0RHVpZFR5cGUoKSA9PSBrRHVpZExMKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXREdWlkSGFyZHdhcmVUeXBlKCkgPT0ga0hhcmR3YXJlVHlwZUV1aTY0KSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZDbGllbnQ6OlByb2Nlc3NDbGllbnRJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENsaWVudElkZW50aWZpZXIgb3B0aW9uOworCisgICAgVmVyaWZ5T3JFeGl0KCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0TGVuZ3RoKCkgPT0gKHNpemVvZihvcHRpb24pIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSkpICYmCisgICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXREdWlkVHlwZSgpID09IGtEdWlkTEwpICYmCisgICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXREdWlkSGFyZHdhcmVUeXBlKCkgPT0ga0hhcmR3YXJlVHlwZUV1aTY0KSkgJiYKKyAgICAgICAgICAgICAgICAgICghbWVtY21wKG9wdGlvbi5HZXREdWlkTGlua0xheWVyQWRkcmVzcygpLCBHZXROZXRpZigpLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihNYWM6OkV4dEFkZHJlc3MpKSkpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpQcm9jZXNzSWFOYShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJYU5hIG9wdGlvbjsKKyAgICB1aW50MTZfdCBvcHRpb25PZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGFPZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbik7CisgICAgbGVuZ3RoID0gb3B0aW9uLkdldExlbmd0aCgpIC0gKHNpemVvZihvcHRpb24pIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSk7CisKKyAgICBWZXJpZnlPckV4aXQobGVuZ3RoIDw9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU9mZnNldCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIGFPZmZzZXQsIGxlbmd0aCwga09wdGlvblN0YXR1c0NvZGUpKSA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1N0YXR1c0NvZGUoYU1lc3NhZ2UsIG9wdGlvbk9mZnNldCkpOworICAgIH0KKworICAgIHdoaWxlIChsZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgaWYgKChvcHRpb25PZmZzZXQgPSBGaW5kT3B0aW9uKGFNZXNzYWdlLCBhT2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25JYUFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lhQWRkcmVzcyhhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICAgICAgbGVuZ3RoIC09ICgob3B0aW9uT2Zmc2V0IC0gYU9mZnNldCkgKyBzaXplb2YoSWFBZGRyZXNzKSk7CisgICAgICAgIGFPZmZzZXQgPSBvcHRpb25PZmZzZXQgKyBzaXplb2YoSWFBZGRyZXNzKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2Q2xpZW50OjpQcm9jZXNzU3RhdHVzQ29kZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTdGF0dXNDb2RlIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoc2l6ZW9mKG9wdGlvbikgLSBzaXplb2YoRGhjcDZPcHRpb24pKSkgJiYKKyAgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0U3RhdHVzQ29kZSgpID09IGtTdGF0dXNTdWNjZXNzKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNkNsaWVudDo6UHJvY2Vzc0lhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYU9mZnNldCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICppZGVudGl0eUFzc29jaWF0aW9uID0gTlVMTDsKKyAgICBvdERoY3BBZGRyZXNzICphZGRyZXNzID0gTlVMTDsKKyAgICBvdElwNlByZWZpeCAqcHJlZml4ICA9IE5VTEw7CisKKyAgICBJYUFkZHJlc3Mgb3B0aW9uOworCisgICAgVmVyaWZ5T3JFeGl0KCgoYU1lc3NhZ2UuUmVhZChhT2Zmc2V0LCBzaXplb2Yob3B0aW9uKSwgJm9wdGlvbikgPT0gc2l6ZW9mKG9wdGlvbikpICYmCisgICAgICAgICAgICAgICAgICAob3B0aW9uLkdldExlbmd0aCgpID09IChzaXplb2Yob3B0aW9uKSAtIHNpemVvZihEaGNwNk9wdGlvbikpKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbU51bUFkZHJlc3NlczsgaSsrKQorICAgIHsKKyAgICAgICAgYWRkcmVzcyA9ICZtQWRkcmVzc2VzW2ldOworCisgICAgICAgIGlmIChhZGRyZXNzLT5tVmFsaWRMaWZldGltZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYoYWRkcmVzcy0+bUFkZHJlc3MubUFkZHJlc3MpLCBvcHRpb24uR2V0QWRkcmVzcygpKSA+PSBhZGRyZXNzLT5tQWRkcmVzcy5tUHJlZml4TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoYWRkcmVzcy0+bUFkZHJlc3MubUFkZHJlc3MubUZpZWxkcy5tOCwgb3B0aW9uLkdldEFkZHJlc3MoKS0+bUZpZWxkcy5tOCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgICAgICAgICAgYWRkcmVzcy0+bVByZWZlcnJlZExpZmV0aW1lID0gb3B0aW9uLkdldFByZWZlcnJlZExpZmV0aW1lKCk7CisgICAgICAgICAgICBhZGRyZXNzLT5tVmFsaWRMaWZldGltZSA9IG9wdGlvbi5HZXRWYWxpZExpZmV0aW1lKCk7CisgICAgICAgICAgICBhZGRyZXNzLT5tQWRkcmVzcy5tUHJlZmVycmVkID0gYWRkcmVzcy0+bVByZWZlcnJlZExpZmV0aW1lICE9IDA7CisgICAgICAgICAgICBhZGRyZXNzLT5tQWRkcmVzcy5tVmFsaWQgPSBhZGRyZXNzLT5tVmFsaWRMaWZldGltZSAhPSAwOworICAgICAgICAgICAgb3RJcDZBZGRVbmljYXN0QWRkcmVzcyhHZXROZXRpZigpLkdldEluc3RhbmNlKCksICZhZGRyZXNzLT5tQWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1hcmsgSWRlbnRpdHlBc3NvY2lhdGlvbiBhcyByZXBsaWVkCisgICAgZm9yIChpZGVudGl0eUFzc29jaWF0aW9uID0gbUlkZW50aXR5QXNzb2NpYXRpb25IZWFkOyBpZGVudGl0eUFzc29jaWF0aW9uOworICAgICAgICAgaWRlbnRpdHlBc3NvY2lhdGlvbiA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIHByZWZpeCA9IGlkZW50aXR5QXNzb2NpYXRpb24tPkdldFByZWZpeCgpOworCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKG9wdGlvbi5HZXRBZGRyZXNzKCksICYocHJlZml4LT5tUHJlZml4KSkgPj0gcHJlZml4LT5tTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBpZGVudGl0eUFzc29jaWF0aW9uLT5TZXRTdGF0dXMoSWRlbnRpdHlBc3NvY2lhdGlvbjo6a1N0YXR1c1NvbGljaXRSZXBsaWVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworRGhjcDZDbGllbnQgJkRoY3A2Q2xpZW50OjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBEaGNwNkNsaWVudCAmY2xpZW50ID0gKnN0YXRpY19jYXN0PERoY3A2Q2xpZW50ICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIERoY3A2Q2xpZW50ICZjbGllbnQgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0RGhjcDZDbGllbnQoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGNsaWVudDsKK30KKworfSAgLy8gbmFtZXNwYWNlIERoY3A2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9kaGNwNl9jbGllbnQuaHBwIGIvc3JjL2NvcmUvbmV0L2RoY3A2X2NsaWVudC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2OTE5MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kaGNwNl9jbGllbnQuaHBwCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IENsaWVudC4KKyAqLworCisjaWZuZGVmIERIQ1A2X0NMSUVOVF9IUFBfCisjZGVmaW5lIERIQ1A2X0NMSUVOVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RoY3A2X2NsaWVudC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90cmlja2xlX3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJuZXQvZGhjcDYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CituYW1lc3BhY2UgTWxlIHsgY2xhc3MgTWxlUm91dGVyOyB9CisKK25hbWVzcGFjZSBEaGNwNiB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1kaGNwNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IENsaWVudC4KKyAqCisgKiBAeworICoKKyAqLworCisKKy8qKgorICogU29tZSBjb25zdGFudHMKKyAqCisgKi8KK2VudW0KK3sKKyAgICBrVHJpY2tsZVRpbWVySW1pbiA9IDEsCisgICAga1RyaWNrbGVUaW1lckltYXggPSAxMjAsCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJZGVudGl0eUFzc29jaWF0aW9uLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIElkZW50aXR5QXNzb2NpYXRpb24KK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIFN0YXR1cyBvZiBJZGVudGl0eUFzc29jaWF0aW9uCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIGVudW0gU3RhdHVzCisgICAgeworICAgICAgICBrU3RhdHVzSW52YWxpZCwKKyAgICAgICAga1N0YXR1c1NvbGljaXQsCisgICAgICAgIGtTdGF0dXNTb2xpY2l0aW5nLAorICAgICAgICBrU3RhdHVzU29saWNpdFJlcGxpZWQsCisgICAgfSBTdGF0dXM7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFN0YXR1cy4KKyAgICAgKgorICAgICAqLworICAgIFN0YXR1cyBHZXRTdGF0dXModm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPihtU3RhdHVzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc3RhdHVzIG9mIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhdHVzICBUaGUgU3RhdHVzIHRvIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RhdHVzKFN0YXR1cyBhU3RhdHVzKSB7IG1TdGF0dXMgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhU3RhdHVzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmxvYyBvZiB0aGUgREhDUCBBZ2VudC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFN0YXR1cy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFByZWZpeEFnZW50UmxvYyh2b2lkKSBjb25zdCB7IHJldHVybiBtUHJlZml4QWdlbnRSbG9jOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBybG9jIG9mIHRoZSBESENQIEFnZW50LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MgIFRoZSBybG9jIG9mIHRoZSBESENQIEFnZW50LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmaXhBZ2VudFJsb2ModWludDE2X3QgYVJsb2MxNikgeyBtUHJlZml4QWdlbnRSbG9jID0gYVJsb2MxNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgSVB2NiBwcmVmaXguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIElQdjYgcHJlZml4LgorICAgICAqCisgICAgICovCisgICAgb3RJcDZQcmVmaXggKkdldFByZWZpeCh2b2lkKSB7IHJldHVybiAmbUlwNlByZWZpeDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBwcmVmaXggdG8gc3BlY2lmaWVkIGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNlByZWZpeCBUaGUgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeCB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFByZWZpeChvdElwNlByZWZpeCAmYUlwNlByZWZpeCkgeyBtZW1jcHkoJm1JcDZQcmVmaXgsICZhSXA2UHJlZml4LCBzaXplb2Yob3RJcDZQcmVmaXgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBJZGVudGl0eUFzc29jaWF0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZXh0IElkZW50aXR5QXNzb2NpYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICpHZXROZXh0KHZvaWQpIHsgcmV0dXJuIG1OZXh0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IElkZW50aXR5QXNzb2NpYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5leHQoSWRlbnRpdHlBc3NvY2lhdGlvbiAqYU5leHQpIHsgbU5leHQgPSBhTmV4dDsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgICAgICAgbVN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBTdGF0dXMgb2YgSWRlbnRpdHlBc3NvY2F0aW9uCisgICAgdWludDE2X3QgICAgICBtUHJlZml4QWdlbnRSbG9jOyAgICAgICAgICAgICAgICAvLy88IFJsb2Mgb2YgUHJlZml4IEFnZW50CisgICAgb3RJcDZQcmVmaXggICBtSXA2UHJlZml4OyAgICAgICAgICAgICAgICAgICAgICAvLy88IFByZWZpeAorICAgIElkZW50aXR5QXNzb2NpYXRpb24gKm1OZXh0OyAgICAgICAgICAgICAgICAgICAgLy8vPCBQb2ludGVyIHRvIG5leHQgSWRlbnRpdHlBc3NvY2F0aW9uCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBESENQdjYgQ2xpZW50LgorICoKKyAqLworY2xhc3MgRGhjcDZDbGllbnQ6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBEaGNwNkNsaWVudChUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZSBhZGRyZXNzZXMgdGhhdCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdXNpbmcgREhDUC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgICAgQSBwb2ludGVyIHRvIG9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3NlcyAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgY29udGFpbmluZyBhZGRyZXNzZXMgY3JlYXRlZCBieSB0aGlzIG1vZHVsZS4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhTnVtQWRkcmVzc2VzIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYUFkZHJlc3NlcyBhcnJheS4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBJSUQgY3JlYXRvci1zcGVjaWZpYyBjb250ZXh0IGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZUFkZHJlc3NlcyhvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RGhjcEFkZHJlc3MgKmFBZGRyZXNzZXMsIHVpbnQzMl90IGFOdW1BZGRyZXNzZXMsIHZvaWQgKmFDb250ZXh0KTsKKworcHJpdmF0ZToKKyAgICBvdEVycm9yIFN0YXJ0KHZvaWQpOworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIG90RXJyb3IgU29saWNpdCh1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIHZvaWQgQWRkSWRlbnRpdHlBc3NvY2lhdGlvbih1aW50MTZfdCBhUmxvYzE2LCBvdElwNlByZWZpeCAmYUlwNlByZWZpeCk7CisgICAgdm9pZCBSZW1vdmVJZGVudGl0eUFzc29jaWF0aW9uKHVpbnQxNl90IGFSbG9jMTYsIG90SXA2UHJlZml4ICZhSXA2UHJlZml4KTsKKworICAgIGJvb2wgUHJvY2Vzc05leHRJZGVudGl0eUFzc29jaWF0aW9uKHZvaWQpOworCisgICAgb3RFcnJvciBBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQXBwZW5kQ2xpZW50SWRlbnRpZmllcihNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRJYU5hKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhUmxvYzE2KTsKKyAgICBvdEVycm9yIEFwcGVuZElhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYVJsb2MxNik7CisgICAgb3RFcnJvciBBcHBlbmRFbGFwc2VkVGltZShNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRSYXBpZENvbW1pdChNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHZvaWQgUHJvY2Vzc1JlcGx5KE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICB1aW50MTZfdCBGaW5kT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCBDb2RlIGFDb2RlKTsKKyAgICBvdEVycm9yIFByb2Nlc3NTZXJ2ZXJJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NDbGllbnRJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NJYU5hKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NTdGF0dXNDb2RlKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKyAgICBvdEVycm9yIFByb2Nlc3NJYUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQpOworCisgICAgc3RhdGljIGJvb2wgSGFuZGxlVHJpY2tsZVRpbWVyKFRyaWNrbGVUaW1lciAmYVRyaWNrbGVUaW1lcik7CisgICAgYm9vbCBIYW5kbGVUcmlja2xlVGltZXIodm9pZCk7CisKKyAgICBzdGF0aWMgRGhjcDZDbGllbnQgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIFRyaWNrbGVUaW1lciBtVHJpY2tsZVRpbWVyOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKworICAgIHVpbnQ4X3QgbVRyYW5zYWN0aW9uSWRba1RyYW5zYWN0aW9uSWRTaXplXTsKKyAgICB1aW50MzJfdCBtU3RhcnRUaW1lOworICAgIG90RGhjcEFkZHJlc3MgKm1BZGRyZXNzZXM7CisgICAgdWludDMyX3QgbU51bUFkZHJlc3NlczsKKworICAgIElkZW50aXR5QXNzb2NpYXRpb24gbUlkZW50aXR5QXNzb2NpYXRpb25zW09QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTXTsKKyAgICBJZGVudGl0eUFzc29jaWF0aW9uICptSWRlbnRpdHlBc3NvY2lhdGlvbkhlYWQ7CisgICAgSWRlbnRpdHlBc3NvY2lhdGlvbiAqbUlkZW50aXR5QXNzb2NpYXRpb25BdmFpbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBEaGNwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyMgZW5kaWYgIC8vIERIQ1A2X0NMSUVOVF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvZGhjcDZfc2VydmVyLmNwcCBiL3NyYy9jb3JlL25ldC9kaGNwNl9zZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzQ3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvZGhjcDZfc2VydmVyLmNwcApAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBESENQdjYgU2VydmVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImRoY3A2X3NlcnZlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiZGhjcDZfc2VydmVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIERoY3A2IHsKKworRGhjcDZTZXJ2ZXI6OkRoY3A2U2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1Tb2NrZXQoYVRocmVhZE5ldGlmLkdldElwNigpLm1VZHApCit7CisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVM7IGkrKykKKyAgICB7CisgICAgICAgIG1lbXNldCgmKG1QcmVmaXhBZ2VudHNbaV0pLCAwLCBzaXplb2YoUHJlZml4QWdlbnQpKTsKKyAgICAgICAgbWVtc2V0KCZtQWdlbnRzQWxvY1tpXSwgMCwgc2l6ZW9mKG1BZ2VudHNBbG9jW2ldKSk7CisgICAgfQorCisgICAgbVByZWZpeEFnZW50c0NvdW50ID0gMDsKKyAgICBtUHJlZml4QWdlbnRzTWFzayA9IDA7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OlVwZGF0ZVNlcnZpY2Uodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGJvb2wgZm91bmQ7CisgICAgdWludDhfdCBpOworICAgIHVpbnQxNl90IHJsb2MxNiA9IG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpOworICAgIElwNjo6QWRkcmVzcyAqYWRkcmVzcyA9IE5VTEw7CisgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGNvbmZpZzsKKyAgICBMb3dwYW46OkNvbnRleHQgbG93cGFuQ29udGV4dDsKKworICAgIC8vIHJlbW92ZSBkaGNwIGFnZW50IGFsb2MgYW5kIHByZWZpeCBkZWxlZ2F0aW9uCisgICAgZm9yIChpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgeworICAgICAgICBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGlmICghbUFnZW50c0Fsb2NbaV0ubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZHJlc3MgPSAmKG1BZ2VudHNBbG9jW2ldLkdldEFkZHJlc3MoKSk7CisgICAgICAgIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICAgICAgd2hpbGUgKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0TmV4dE9uTWVzaFByZWZpeCgmaXRlcmF0b3IsIHJsb2MxNiwgJmNvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb25maWcubURoY3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29udGV4dCgqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KCYoY29uZmlnLm1QcmVmaXgubVByZWZpeCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd3BhbkNvbnRleHQpOworCisgICAgICAgICAgICBpZiAoYWRkcmVzcy0+bUZpZWxkcy5tOFsxNV0gPT0gbG93cGFuQ29udGV4dC5tQ29udGV4dElkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHN0aWxsIGluIG5ldHdvcmsgZGF0YQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0Q29udGV4dChhZGRyZXNzLT5tRmllbGRzLm04WzE1XSwgbG93cGFuQ29udGV4dCk7CisgICAgICAgICAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcyhtQWdlbnRzQWxvY1tpXSk7CisgICAgICAgICAgICBtQWdlbnRzQWxvY1tpXS5tVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFJlbW92ZVByZWZpeEFnZW50KGxvd3BhbkNvbnRleHQubVByZWZpeCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhZGQgZGhjcCBhZ2VudCBhbG9jIGFuZCBwcmVmaXggZGVsZWdhdGlvbgorICAgIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICB3aGlsZSAobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXROZXh0T25NZXNoUHJlZml4KCZpdGVyYXRvciwgcmxvYzE2LCAmY29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgZm91bmQgPSBmYWxzZTsKKworICAgICAgICBpZiAoIWNvbmZpZy5tRGhjcCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6QWRkcmVzcyAqPigmY29uZmlnLm1QcmVmaXgubVByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dwYW5Db250ZXh0KTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcmVzcyA9ICYobUFnZW50c0Fsb2NbaV0uR2V0QWRkcmVzcygpKTsKKworICAgICAgICAgICAgaWYgKChtQWdlbnRzQWxvY1tpXS5tVmFsaWQpICYmIChhZGRyZXNzLT5tRmllbGRzLm04WzE1XSA9PSBsb3dwYW5Db250ZXh0Lm1Db250ZXh0SWQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGFscmVheSBhZGRlZAorICAgICAgICBpZiAoZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbUFnZW50c0Fsb2NbaV0ubVZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZHJlc3MgPSAmKG1BZ2VudHNBbG9jW2ldLkdldEFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3MsIG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbFByZWZpeCgpLCA4KTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm0xNls1XSA9IEhvc3RTd2FwMTYoMHgwMGZmKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHhmZTAwKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tRmllbGRzLm04WzE0XSA9IElwNjo6QWRkcmVzczo6a0Fsb2MxNk1hc2s7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+bUZpZWxkcy5tOFsxNV0gPSBsb3dwYW5Db250ZXh0Lm1Db250ZXh0SWQ7CisgICAgICAgICAgICAgICAgbUFnZW50c0Fsb2NbaV0ubVByZWZpeExlbmd0aCA9IDEyODsKKyAgICAgICAgICAgICAgICBtQWdlbnRzQWxvY1tpXS5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtQWdlbnRzQWxvY1tpXS5tVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5ldGlmLkFkZFVuaWNhc3RBZGRyZXNzKG1BZ2VudHNBbG9jW2ldKTsKKyAgICAgICAgICAgICAgICBBZGRQcmVmaXhBZ2VudChjb25maWcubVByZWZpeCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiBubyBhdmFpbGFibGUgRGhjcCBBZ2VudCBBbG9jIHJlc291cmNlcworICAgICAgICBpZiAoaSA9PSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUykKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1QcmVmaXhBZ2VudHNDb3VudCA+IDApCisgICAgeworICAgICAgICBTdGFydCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdG9wKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6U3RhcnQodm9pZCkKK3sKKyAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworICAgIHNvY2thZGRyLm1Qb3J0ID0ga0RoY3BTZXJ2ZXJQb3J0OworICAgIG1Tb2NrZXQuT3BlbigmRGhjcDZTZXJ2ZXI6OkhhbmRsZVVkcFJlY2VpdmUsIHRoaXMpOworICAgIG1Tb2NrZXQuQmluZChzb2NrYWRkcik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6U3RvcCh2b2lkKQoreworICAgIG1Tb2NrZXQuQ2xvc2UoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QWRkUHJlZml4QWdlbnQob3RJcDZQcmVmaXggJmFJcDZQcmVmaXgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlM7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1QcmVmaXhBZ2VudHNbaV0uR2V0UHJlZml4KCktPm1MZW5ndGggIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtUHJlZml4QWdlbnRzW2ldLlNldFByZWZpeChhSXA2UHJlZml4KTsKKyAgICAgICAgbVByZWZpeEFnZW50c0NvdW50Kys7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpSZW1vdmVQcmVmaXhBZ2VudChjb25zdCB1aW50OF90ICphSXA2QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIG90SXA2UHJlZml4ICpwcmVmaXggPSBOVUxMOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVM7IGkrKykKKyAgICB7CisgICAgICAgIHByZWZpeCA9IG1QcmVmaXhBZ2VudHNbaV0uR2V0UHJlZml4KCk7CisKKyAgICAgICAgaWYgKHByZWZpeC0+bUxlbmd0aCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdElwNlByZWZpeE1hdGNoKCYocHJlZml4LT5tUHJlZml4KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBvdElwNkFkZHJlc3MgKj4oYUlwNkFkZHJlc3MpKSA+PSBwcmVmaXgtPm1MZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCgmKG1QcmVmaXhBZ2VudHNbaV0pLCAwLCBzaXplb2YoUHJlZml4QWdlbnQpKTsKKyAgICAgICAgICAgIG1QcmVmaXhBZ2VudHNDb3VudC0tOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEaGNwNlNlcnZlcjo6SGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIERoY3A2U2VydmVyICpvYmogPSBzdGF0aWNfY2FzdDxEaGNwNlNlcnZlciAqPihhQ29udGV4dCk7CisgICAgb2JqLT5IYW5kbGVVZHBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgRGhjcDZTZXJ2ZXI6OkhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBEaGNwNkhlYWRlciBoZWFkZXI7CisgICAgb3RJcDZBZGRyZXNzIGRzdCA9IGFNZXNzYWdlSW5mby5tUGVlckFkZHI7CisKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGhlYWRlciksICZoZWFkZXIpID09IHNpemVvZihoZWFkZXIpKTsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihoZWFkZXIpKTsKKworICAgIC8vIGRpc2NhcmQgaWYgbm90IHNvbGljaXQgdHlwZQorICAgIFZlcmlmeU9yRXhpdCgoaGVhZGVyLkdldFR5cGUoKSA9PSBrVHlwZVNvbGljaXQpKTsKKworICAgIFByb2Nlc3NTb2xpY2l0KGFNZXNzYWdlLCBkc3QsIGhlYWRlci5HZXRUcmFuc2FjdGlvbklkKCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEaGNwNlNlcnZlcjo6UHJvY2Vzc1NvbGljaXQoTWVzc2FnZSAmYU1lc3NhZ2UsIG90SXA2QWRkcmVzcyAmYURzdCwgdWludDhfdCAqYVRyYW5zYWN0aW9uSWQpCit7CisgICAgSWFOYSBpYW5hOworICAgIENsaWVudElkZW50aWZpZXIgY2xpZW50SWRlbnRpZmllcjsKKyAgICB1aW50MTZfdCBvcHRpb25PZmZzZXQ7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKworICAgIC8vIENsaWVudCBJZGVudGlmaWVyIChkaXNjYXJkIGlmIG5vdCBwcmVzZW50KQorICAgIFZlcmlmeU9yRXhpdCgob3B0aW9uT2Zmc2V0ID0gRmluZE9wdGlvbihhTWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25DbGllbnRJZGVudGlmaWVyKSkgPiAwKTsKKyAgICBTdWNjZXNzT3JFeGl0KFByb2Nlc3NDbGllbnRJZGVudGlmaWVyKGFNZXNzYWdlLCBvcHRpb25PZmZzZXQsIGNsaWVudElkZW50aWZpZXIpKTsKKworICAgIC8vIFNlcnZlciBJZGVudGlmaWVyIChhc3N1bWluZyBSYXBpZCBDb21taXQsIGRpc2NhcmQgaWYgcHJlc2VudCkKKyAgICBWZXJpZnlPckV4aXQoRmluZE9wdGlvbihhTWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25TZXJ2ZXJJZGVudGlmaWVyKSA9PSAwKTsKKworICAgIC8vIFJhcGlkIENvbW1pdCAoYXNzdW1pbmcgUmFwaWQgQ29tbWl0LCBkaXNjYXJkIGlmIG5vdCBwcmVzZW50KQorICAgIFZlcmlmeU9yRXhpdChGaW5kT3B0aW9uKGFNZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCwga09wdGlvblJhcGlkQ29tbWl0KSA+IDApOworCisgICAgLy8gRWxhcHNlZCBUaW1lIGlmIHByZXNlbnQKKyAgICBpZiAoKG9wdGlvbk9mZnNldCA9IEZpbmRPcHRpb24oYU1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoLCBrT3B0aW9uRWxhcHNlZFRpbWUpKSA+IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KFByb2Nlc3NFbGFwc2VkVGltZShhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisgICAgfQorCisgICAgLy8gSUFfTkEgKGRpc2NhcmQgaWYgbm90IHByZXNlbnQpCisgICAgVmVyaWZ5T3JFeGl0KChvcHRpb25PZmZzZXQgPSBGaW5kT3B0aW9uKGFNZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCwga09wdGlvbklhTmEpKSA+IDApOworICAgIFN1Y2Nlc3NPckV4aXQoUHJvY2Vzc0lhTmEoYU1lc3NhZ2UsIG9wdGlvbk9mZnNldCwgaWFuYSkpOworCisgICAgU3VjY2Vzc09yRXhpdChTZW5kUmVwbHkoYURzdCwgYVRyYW5zYWN0aW9uSWQsIGNsaWVudElkZW50aWZpZXIsIGlhbmEpKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3VpbnQxNl90IERoY3A2U2VydmVyOjpGaW5kT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCB1aW50MTZfdCBhTGVuZ3RoLCBDb2RlIGFDb2RlKQoreworICAgIHVpbnQxNl90IGVuZCA9IGFPZmZzZXQgKyBhTGVuZ3RoOworCisgICAgd2hpbGUgKGFPZmZzZXQgPD0gZW5kKQorICAgIHsKKyAgICAgICAgRGhjcDZPcHRpb24gb3B0aW9uOworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhT2Zmc2V0LCBzaXplb2Yob3B0aW9uKSwgJm9wdGlvbikgPT0gc2l6ZW9mKG9wdGlvbikpOworCisgICAgICAgIGlmIChvcHRpb24uR2V0Q29kZSgpID09IGFDb2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIGFPZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiAwOworfQorb3RFcnJvciBEaGNwNlNlcnZlcjo6UHJvY2Vzc0NsaWVudElkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoKChhTWVzc2FnZS5SZWFkKGFPZmZzZXQsIHNpemVvZihhQ2xpZW50KSwgJmFDbGllbnQpID09IHNpemVvZihhQ2xpZW50KSkgJiYKKyAgICAgICAgICAgICAgICAgIChhQ2xpZW50LkdldExlbmd0aCgpID09IChzaXplb2YoYUNsaWVudCkgLSBzaXplb2YoRGhjcDZPcHRpb24pKSkgJiYKKyAgICAgICAgICAgICAgICAgIChhQ2xpZW50LkdldER1aWRUeXBlKCkgPT0ga0R1aWRMTCkgJiYKKyAgICAgICAgICAgICAgICAgIChhQ2xpZW50LkdldER1aWRIYXJkd2FyZVR5cGUoKSA9PSBrSGFyZHdhcmVUeXBlRXVpNjQpKSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6UHJvY2Vzc0VsYXBzZWRUaW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEVsYXBzZWRUaW1lIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdCgoKGFNZXNzYWdlLlJlYWQoYU9mZnNldCwgc2l6ZW9mKG9wdGlvbiksICZvcHRpb24pID09IHNpemVvZihvcHRpb24pKSAmJgorICAgICAgICAgICAgICAgICAgKG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoKHNpemVvZihvcHRpb24pIC0gc2l6ZW9mKERoY3A2T3B0aW9uKSkpKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OlByb2Nlc3NJYU5hKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0LCBJYU5hICZhSWFOYSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBvcHRpb25PZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KChhTWVzc2FnZS5SZWFkKGFPZmZzZXQsIHNpemVvZihhSWFOYSksICZhSWFOYSkgPT0gc2l6ZW9mKGFJYU5hKSksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgYU9mZnNldCArPSBzaXplb2YoYUlhTmEpOworICAgIGxlbmd0aCA9IGFJYU5hLkdldExlbmd0aCgpICsgc2l6ZW9mKERoY3A2T3B0aW9uKSAtIHNpemVvZihJYU5hKTsKKworICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPD0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhT2Zmc2V0LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1QcmVmaXhBZ2VudHNNYXNrID0gMDsKKworICAgIHdoaWxlIChsZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChvcHRpb25PZmZzZXQgPSBGaW5kT3B0aW9uKGFNZXNzYWdlLCBhT2Zmc2V0LCBsZW5ndGgsIGtPcHRpb25JYUFkZHJlc3MpKSA+IDApOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc0lhQWRkcmVzcyhhTWVzc2FnZSwgb3B0aW9uT2Zmc2V0KSk7CisKKyAgICAgICAgbGVuZ3RoIC09ICgob3B0aW9uT2Zmc2V0IC0gYU9mZnNldCkgKyBzaXplb2YoSWFBZGRyZXNzKSk7CisgICAgICAgIGFPZmZzZXQgPSBvcHRpb25PZmZzZXQgKyBzaXplb2YoSWFBZGRyZXNzKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpQcm9jZXNzSWFBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2UHJlZml4ICpwcmVmaXggPSBOVUxMOworICAgIElhQWRkcmVzcyBvcHRpb247CisKKyAgICBWZXJpZnlPckV4aXQoKChhTWVzc2FnZS5SZWFkKGFPZmZzZXQsIHNpemVvZihvcHRpb24pLCAmb3B0aW9uKSA9PSBzaXplb2Yob3B0aW9uKSkgJiYKKyAgICAgICAgICAgICAgICAgIG9wdGlvbi5HZXRMZW5ndGgoKSA9PSAoc2l6ZW9mKG9wdGlvbikgLSBzaXplb2YoRGhjcDZPcHRpb24pKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gbWFzayBtYXRjaGluZyBwcmVmaXgKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUzsgaSsrKQorICAgIHsKKyAgICAgICAgcHJlZml4ID0gbVByZWZpeEFnZW50c1tpXS5HZXRQcmVmaXgoKTsKKworICAgICAgICBpZiAocHJlZml4LT5tTGVuZ3RoID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG90SXA2UHJlZml4TWF0Y2gob3B0aW9uLkdldEFkZHJlc3MoKSwgJihwcmVmaXgtPm1QcmVmaXgpKSA+PSBwcmVmaXgtPm1MZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1QcmVmaXhBZ2VudHNNYXNrIHw9ICgxIDw8IGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpTZW5kUmVwbHkob3RJcDZBZGRyZXNzICZhRHN0LCB1aW50OF90ICphVHJhbnNhY3Rpb25JZCwgQ2xpZW50SWRlbnRpZmllciAmYUNsaWVudCwgSWFOYSAmYUlhTmEpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbVNvY2tldC5OZXdNZXNzYWdlKDApKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIGFUcmFuc2FjdGlvbklkKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNlcnZlcklkZW50aWZpZXIoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2xpZW50SWRlbnRpZmllcigqbWVzc2FnZSwgYUNsaWVudCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRJYU5hKCptZXNzYWdlLCBhSWFOYSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTdGF0dXNDb2RlKCptZXNzYWdlLCBrU3RhdHVzU3VjY2VzcykpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRJYUFkZHJlc3MoKm1lc3NhZ2UsIGFDbGllbnQpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUmFwaWRDb21taXQoKm1lc3NhZ2UpKTsKKworICAgIG1lbXNldCgmbWVzc2FnZUluZm8sIDAsIHNpemVvZihtZXNzYWdlSW5mbykpOworICAgIG1lbWNweSgmbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm04LCAmYURzdCwgc2l6ZW9mKG90SXA2QWRkcmVzcykpOworICAgIG1lc3NhZ2VJbmZvLm1QZWVyUG9ydCA9IGtEaGNwQ2xpZW50UG9ydDsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNvY2tldC5TZW5kVG8oKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmIGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQ4X3QgKmFUcmFuc2FjdGlvbklkKQoreworICAgIERoY3A2SGVhZGVyIGhlYWRlcjsKKworICAgIGhlYWRlci5Jbml0KCk7CisgICAgaGVhZGVyLlNldFR5cGUoa1R5cGVSZXBseSk7CisgICAgaGVhZGVyLlNldFRyYW5zYWN0aW9uSWQoYVRyYW5zYWN0aW9uSWQpOworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworfQorCitvdEVycm9yIERoY3A2U2VydmVyOjpBcHBlbmRDbGllbnRJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlLCBDbGllbnRJZGVudGlmaWVyICZhQ2xpZW50KQoreworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJmFDbGllbnQsIHNpemVvZihhQ2xpZW50KSk7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OkFwcGVuZFNlcnZlcklkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgU2VydmVySWRlbnRpZmllciBvcHRpb247CisKKyAgICBvcHRpb24uSW5pdCgpOworICAgIG9wdGlvbi5TZXREdWlkVHlwZShrRHVpZExMKTsKKyAgICBvcHRpb24uU2V0RHVpZEhhcmR3YXJlVHlwZShrSGFyZHdhcmVUeXBlRXVpNjQpOworICAgIG9wdGlvbi5TZXREdWlkTGlua0xheWVyQWRkcmVzcyhHZXROZXRpZigpLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QXBwZW5kSWFOYShNZXNzYWdlICZhTWVzc2FnZSwgSWFOYSAmYUlhTmEpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgbGVuZ3RoID0gMDsKKworICAgIGlmIChtUHJlZml4QWdlbnRzTWFzaykKKyAgICB7CisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobVByZWZpeEFnZW50c01hc2sgJiAoMSA8PCBpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IHNpemVvZihJYUFkZHJlc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YoSWFBZGRyZXNzKSAqIG1QcmVmaXhBZ2VudHNDb3VudDsKKyAgICB9CisKKyAgICBsZW5ndGggKz0gc2l6ZW9mKElhTmEpICsgc2l6ZW9mKFN0YXR1c0NvZGUpIC0gc2l6ZW9mKERoY3A2T3B0aW9uKTsKKworICAgIGFJYU5hLlNldExlbmd0aChsZW5ndGgpOworICAgIGFJYU5hLlNldFQxKE9UX0RIQ1A2X0RFRkFVTFRfSUFfTkFfVDEpOworICAgIGFJYU5hLlNldFQyKE9UX0RIQ1A2X0RFRkFVTFRfSUFfTkFfVDIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmFJYU5hLCBzaXplb2YoSWFOYSkpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OkFwcGVuZFN0YXR1c0NvZGUoTWVzc2FnZSAmYU1lc3NhZ2UsIFN0YXR1cyBhU3RhdHVzKQoreworICAgIFN0YXR1c0NvZGUgb3B0aW9uOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICBvcHRpb24uU2V0U3RhdHVzQ29kZShhU3RhdHVzKTsKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKTsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QXBwZW5kSWFBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCBDbGllbnRJZGVudGlmaWVyICZhQ2xpZW50KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2UHJlZml4ICpwcmVmaXggPSBOVUxMOworCisgICAgLy8gaWYgc3BlY2lmaWVkLCBvbmx5IGFwcGx5IHNwZWNpZmllZCBwcmVmaXhlcworICAgIGlmIChtUHJlZml4QWdlbnRzTWFzaykKKyAgICB7CisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUHJlZml4QWdlbnRzTWFzayAmICgxIDw8IGkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG1QcmVmaXhBZ2VudHNbaV0uR2V0UHJlZml4KCk7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZElhQWRkcmVzcyhhTWVzc2FnZSwgKnByZWZpeCwgYUNsaWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgIC8vIGlmIG5vdCBzcGVjaWZpZWQsIGFwcGx5IGFsbCBjb25maWd1cmVkIHByZWZpeGVzCisgICAgeworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXggPSBtUHJlZml4QWdlbnRzW2ldLkdldFByZWZpeCgpOworCisgICAgICAgICAgICBpZiAocHJlZml4LT5tTGVuZ3RoID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRJYUFkZHJlc3MoYU1lc3NhZ2UsICpwcmVmaXgsIGFDbGllbnQpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRGhjcDZTZXJ2ZXI6OkFkZElhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgb3RJcDZQcmVmaXggJmFJcDZQcmVmaXgsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSWFBZGRyZXNzIG9wdGlvbjsKKworICAgIG9wdGlvbi5Jbml0KCk7CisgICAgbWVtY3B5KChvcHRpb24uR2V0QWRkcmVzcygpLT5tRmllbGRzLm04KSwgJihhSXA2UHJlZml4Lm1QcmVmaXgpLCA4KTsKKyAgICBtZW1jcHkoJihvcHRpb24uR2V0QWRkcmVzcygpLT5tRmllbGRzLm04WzhdKSwgYUNsaWVudC5HZXREdWlkTGlua0xheWVyQWRkcmVzcygpLCBzaXplb2YoTWFjOjpFeHRBZGRyZXNzKSk7CisgICAgb3B0aW9uLlNldFByZWZlcnJlZExpZmV0aW1lKE9UX0RIQ1A2X0RFRkFVTFRfUFJFRkVSUkVEX0xJRkVUSU1FKTsKKyAgICBvcHRpb24uU2V0VmFsaWRMaWZldGltZShPVF9ESENQNl9ERUZBVUxUX1ZBTElEX0xJRkVUSU1FKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKSk7CitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBEaGNwNlNlcnZlcjo6QXBwZW5kUmFwaWRDb21taXQoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgUmFwaWRDb21taXQgb3B0aW9uOworCisgICAgb3B0aW9uLkluaXQoKTsKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb24sIHNpemVvZihvcHRpb24pKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIERoY3A2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vICBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9TRVJWRVIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9kaGNwNl9zZXJ2ZXIuaHBwIGIvc3JjL2NvcmUvbmV0L2RoY3A2X3NlcnZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5YzRhNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kaGNwNl9zZXJ2ZXIuaHBwCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgREhDUHY2IFNlcnZlci4KKyAqLworCisjaWZuZGVmIERIQ1A2X1NFUlZFUl9IUFBfCisjZGVmaW5lIERIQ1A2X1NFUlZFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibWFjL21hYy5ocHAiCisjaW5jbHVkZSAibmV0L2RoY3A2LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXIuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7IGNsYXNzIExlYWRlcjsgfQorCituYW1lc3BhY2UgRGhjcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtZGhjcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIERIQ1B2NiBTZXJ2ZXIuCisgKgorICogQHsKKyAqCisgKi8KKworCisvKioKKyAqIERIQ1B2NiBkZWZhdWx0IGNvbnN0YW50CisgKgorICovCisjZGVmaW5lIE9UX0RIQ1A2X0RFRkFVTFRfSUFfTkFfVDEgICAgICAgICAgICAweGZmZmZmZmZmVQorI2RlZmluZSBPVF9ESENQNl9ERUZBVUxUX0lBX05BX1QyICAgICAgICAgICAgMHhmZmZmZmZmZlUKKyNkZWZpbmUgT1RfREhDUDZfREVGQVVMVF9QUkVGRVJSRURfTElGRVRJTUUgIDB4ZmZmZmZmZmZVCisjZGVmaW5lIE9UX0RIQ1A2X0RFRkFVTFRfVkFMSURfTElGRVRJTUUgICAgICAweGZmZmZmZmZmVQorCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwcmVmaXggYWdlbnQuCisgKgorICovCisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBQcmVmaXhBZ2VudAoreworcHVibGljOgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeC4KKyAgICAgKgorICAgICAqLworICAgIG90SXA2UHJlZml4ICpHZXRQcmVmaXgodm9pZCkgeyByZXR1cm4gJm1JcDZQcmVmaXg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgcHJlZml4LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlwNlByZWZpeCBUaGUgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHByZWZpeCB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFByZWZpeChvdElwNlByZWZpeCAmYUlwNlByZWZpeCkgeyBtZW1jcHkoJm1JcDZQcmVmaXgsICZhSXA2UHJlZml4LCBzaXplb2Yob3RJcDZQcmVmaXgpKTsgfQorCitwcml2YXRlOgorICAgIG90SXA2UHJlZml4IG1JcDZQcmVmaXg7ICAgICAgICAgICAgICAgICAgLy8vPCBwcmVmaXgKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCitjbGFzcyBEaGNwNlNlcnZlcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IERoY3A2U2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyBESENQIEFnZW50cyBhbmQgREhDUCBBbG9jcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgVXBkYXRlU2VydmljZSgpOworCitwcml2YXRlOgorICAgIG90RXJyb3IgU3RhcnQodm9pZCk7CisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgb3RFcnJvciBBZGRQcmVmaXhBZ2VudChvdElwNlByZWZpeCAmYUlwNlByZWZpeCk7CisgICAgb3RFcnJvciBSZW1vdmVQcmVmaXhBZ2VudChjb25zdCB1aW50OF90ICphSXA2QWRkcmVzcyk7CisKKyAgICBvdEVycm9yIEFwcGVuZEhlYWRlcihNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCAqYVRyYW5zYWN0aW9uSWQpOworICAgIG90RXJyb3IgQXBwZW5kQ2xpZW50SWRlbnRpZmllcihNZXNzYWdlICZhTWVzc2FnZSwgQ2xpZW50SWRlbnRpZmllciAmYUNsaWVudCk7CisgICAgb3RFcnJvciBBcHBlbmRTZXJ2ZXJJZGVudGlmaWVyKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEFwcGVuZElhTmEoTWVzc2FnZSAmYU1lc3NhZ2UsIElhTmEgJmFJYU5hKTsKKyAgICBvdEVycm9yIEFwcGVuZFN0YXR1c0NvZGUoTWVzc2FnZSAmYU1lc3NhZ2UsIFN0YXR1cyBhU3RhdHVzQ29kZSk7CisgICAgb3RFcnJvciBBcHBlbmRJYUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpOworICAgIG90RXJyb3IgQXBwZW5kUmFwaWRDb21taXQoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQXBwZW5kVmVuZG9yU3BlY2lmaWNJbmZvcm1hdGlvbihNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICBvdEVycm9yIEFkZElhQWRkcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgb3RJcDZQcmVmaXggJmFJcDZQcmVmaXgsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICB2b2lkIFByb2Nlc3NTb2xpY2l0KE1lc3NhZ2UgJmFNZXNzYWdlLCBvdElwNkFkZHJlc3MgJmFEc3QsIHVpbnQ4X3QgKmFUcmFuc2FjdGlvbklkKTsKKworICAgIHVpbnQxNl90IEZpbmRPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIHVpbnQxNl90IGFMZW5ndGgsIENvZGUgYUNvZGUpOworICAgIG90RXJyb3IgUHJvY2Vzc0NsaWVudElkZW50aWZpZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnQpOworICAgIG90RXJyb3IgUHJvY2Vzc0lhTmEoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQsIElhTmEgJmFJYU5hKTsKKyAgICBvdEVycm9yIFByb2Nlc3NJYUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFPZmZzZXQpOworICAgIG90RXJyb3IgUHJvY2Vzc0VsYXBzZWRUaW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhT2Zmc2V0KTsKKworICAgIG90RXJyb3IgU2VuZFJlcGx5KG90SXA2QWRkcmVzcyAmYURzdCwgdWludDhfdCAqYVRyYW5zYWN0aW9uSWQsIENsaWVudElkZW50aWZpZXIgJmFDbGllbnRJZGVudGlmaWVyLCBJYU5hICZhSWFOYSk7CisKKyAgICBJcDY6OlVkcFNvY2tldCBtU29ja2V0OworCisgICAgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzIG1BZ2VudHNBbG9jW09QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTXTsKKyAgICBQcmVmaXhBZ2VudCBtUHJlZml4QWdlbnRzW09QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTXTsKKyAgICB1aW50OF90IG1QcmVmaXhBZ2VudHNNYXNrOworICAgIHVpbnQ4X3QgbVByZWZpeEFnZW50c0NvdW50OworfTsKKworfSAgLy8gbmFtZXNwYWNlIERoY3A2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBESENQNl9TRVJWRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2Ruc19jbGllbnQuY3BwIGIvc3JjL2NvcmUvbmV0L2Ruc19jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMGMzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvZG5zX2NsaWVudC5jcHAKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiZG5zX2NsaWVudC5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBETlMgY2xpZW50LgorICovCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIERucyB7CisKK290RXJyb3IgQ2xpZW50OjpTdGFydCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgSXA2OjpTb2NrQWRkciBhZGRyOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuT3BlbigmQ2xpZW50OjpIYW5kbGVVZHBSZWNlaXZlLCB0aGlzKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuQmluZChhZGRyKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENsaWVudDo6U3RvcCh2b2lkKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBtUGVuZGluZ1F1ZXJpZXMuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm1lc3NhZ2VUb1JlbW92ZTsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGE7CisKKyAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgcXVlcmllcy4KKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZVRvUmVtb3ZlID0gbWVzc2FnZTsKKyAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKworICAgICAgICBxdWVyeU1ldGFkYXRhLlJlYWRGcm9tKCptZXNzYWdlVG9SZW1vdmUpOworICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlVG9SZW1vdmUsIHF1ZXJ5TWV0YWRhdGEsIE5VTEwsIDAsIE9UX0VSUk9SX0FCT1JUKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVNvY2tldC5DbG9zZSgpOworfQorCitvdEVycm9yIENsaWVudDo6UXVlcnkoY29uc3Qgb3REbnNRdWVyeSAqYVF1ZXJ5LCBvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGEoYUhhbmRsZXIsIGFDb250ZXh0KTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisgICAgSGVhZGVyIGhlYWRlcjsKKyAgICBRdWVzdGlvbkFhYWEgcXVlc3Rpb247CisgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQoYVF1ZXJ5LT5tSG9zdG5hbWUgIT0gTlVMTCAmJiBhUXVlcnktPm1NZXNzYWdlSW5mbyAhPSBOVUxMLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBoZWFkZXIuU2V0TWVzc2FnZUlkKG1NZXNzYWdlSWQrKyk7CisgICAgaGVhZGVyLlNldFR5cGUoSGVhZGVyOjprVHlwZVF1ZXJ5KTsKKyAgICBoZWFkZXIuU2V0UXVlcnlUeXBlKEhlYWRlcjo6a1F1ZXJ5VHlwZVN0YW5kYXJkKTsKKworICAgIGlmICghYVF1ZXJ5LT5tTm9SZWN1cnNpb24pCisgICAgeworICAgICAgICBoZWFkZXIuU2V0UmVjdXJzaW9uRGVzaXJlZEZsYWcoKTsKKyAgICB9CisKKyAgICBoZWFkZXIuU2V0UXVlc3Rpb25Db3VudCgxKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDb21wcmVzc2VkSG9zdG5hbWUoKm1lc3NhZ2UsIGFRdWVyeS0+bUhvc3RuYW1lKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IHF1ZXN0aW9uLkFwcGVuZFRvKCptZXNzYWdlKSk7CisKKyAgICBtZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYVF1ZXJ5LT5tTWVzc2FnZUluZm8pOworCisgICAgcXVlcnlNZXRhZGF0YS5tSG9zdG5hbWUgICAgICAgICAgICA9IGFRdWVyeS0+bUhvc3RuYW1lOworICAgIHF1ZXJ5TWV0YWRhdGEubVRyYW5zbWlzc2lvblRpbWUgICAgPSBUaW1lcjo6R2V0Tm93KCkgKyBrUmVzcG9uc2VUaW1lb3V0OworICAgIHF1ZXJ5TWV0YWRhdGEubVNvdXJjZUFkZHJlc3MgICAgICAgPSBtZXNzYWdlSW5mby0+R2V0U29ja0FkZHIoKTsKKyAgICBxdWVyeU1ldGFkYXRhLm1EZXN0aW5hdGlvblBvcnQgICAgID0gbWVzc2FnZUluZm8tPkdldFBlZXJQb3J0KCk7CisgICAgcXVlcnlNZXRhZGF0YS5tRGVzdGluYXRpb25BZGRyZXNzICA9IG1lc3NhZ2VJbmZvLT5HZXRQZWVyQWRkcigpOworICAgIHF1ZXJ5TWV0YWRhdGEubVJldHJhbnNtaXNzaW9uQ291bnQgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlQ29weSA9IENvcHlBbmRFbnF1ZXVlTWVzc2FnZSgqbWVzc2FnZSwgcXVlcnlNZXRhZGF0YSkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCAqbWVzc2FnZUluZm8pKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZXNzYWdlQ29weSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVxdWV1ZU1lc3NhZ2UoKm1lc3NhZ2VDb3B5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworTWVzc2FnZSAqQ2xpZW50OjpOZXdNZXNzYWdlKGNvbnN0IEhlYWRlciAmYUhlYWRlcikKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG1Tb2NrZXQuTmV3TWVzc2FnZShzaXplb2YoYUhlYWRlcikpKSAhPSBOVUxMKTsKKyAgICBtZXNzYWdlLT5QcmVwZW5kKCZhSGVhZGVyLCBzaXplb2YoYUhlYWRlcikpOworICAgIG1lc3NhZ2UtPlNldE9mZnNldCgwKTsKKworZXhpdDoKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworTWVzc2FnZSAqQ2xpZW50OjpDb3B5QW5kRW5xdWV1ZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IFF1ZXJ5TWV0YWRhdGEgJmFRdWVyeU1ldGFkYXRhKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisgICAgdWludDMyX3QgbmV4dFRyYW5zbWlzc2lvblRpbWU7CisKKyAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIGNvcHkgZm9yIGZ1cnRoZXIgcmV0cmFuc21pc3Npb25zLgorICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgLy8gQXBwZW5kIHRoZSBjb3B5IHdpdGggcmV0cmFuc21pc3Npb24gZGF0YSBhbmQgYWRkIGl0IHRvIHRoZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVF1ZXJ5TWV0YWRhdGEuQXBwZW5kVG8oKm1lc3NhZ2VDb3B5KSk7CisgICAgbVBlbmRpbmdRdWVyaWVzLkVucXVldWUoKm1lc3NhZ2VDb3B5KTsKKworICAgIC8vIFNldHVwIHRoZSB0aW1lci4KKyAgICBpZiAobVJldHJhbnNtaXNzaW9uVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICAvLyBJZiB0aW1lciBpcyBhbHJlYWR5IHJ1bm5pbmcsIGNoZWNrIGlmIGl0IHNob3VsZCBiZSByZXN0YXJ0ZWQgd2l0aCBlYXJsaWVyIGZpcmUgdGltZS4KKyAgICAgICAgbmV4dFRyYW5zbWlzc2lvblRpbWUgPSBtUmV0cmFuc21pc3Npb25UaW1lci5HZXRGaXJlVGltZSgpOworCisgICAgICAgIGlmIChhUXVlcnlNZXRhZGF0YS5Jc0VhcmxpZXIobmV4dFRyYW5zbWlzc2lvblRpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChhUXVlcnlNZXRhZGF0YS5tVHJhbnNtaXNzaW9uVGltZSAtIG5vdyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIuU3RhcnQoYVF1ZXJ5TWV0YWRhdGEubVRyYW5zbWlzc2lvblRpbWUgLSBub3cpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2VDb3B5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlQ29weS0+RnJlZSgpOworICAgICAgICBtZXNzYWdlQ29weSA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2VDb3B5OworfQorCit2b2lkIENsaWVudDo6RGVxdWV1ZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgbVBlbmRpbmdRdWVyaWVzLkRlcXVldWUoYU1lc3NhZ2UpOworCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpICYmIChtUGVuZGluZ1F1ZXJpZXMuR2V0SGVhZCgpID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgLy8gTm8gbW9yZSByZXF1ZXN0cyBwZW5kaW5nLCBzdG9wIHRoZSB0aW1lci4KKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIuU3RvcCgpOworICAgIH0KKworICAgIC8vIEZyZWUgdGhlIG1lc3NhZ2UgbWVtb3J5LgorICAgIGFNZXNzYWdlLkZyZWUoKTsKK30KKworb3RFcnJvciBDbGllbnQ6OlNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgcmV0dXJuIG1Tb2NrZXQuU2VuZFRvKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworfQorCitvdEVycm9yIENsaWVudDo6U2VuZENvcHkoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2VDb3B5ID0gTlVMTDsKKworICAgIC8vIENyZWF0ZSBhIG1lc3NhZ2UgY29weSBmb3IgbG93ZXIgbGF5ZXJzLgorICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZShhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZihRdWVyeU1ldGFkYXRhKSkpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBTZW5kIHRoZSBjb3B5LgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZUNvcHksIGFNZXNzYWdlSW5mbykpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZUNvcHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VDb3B5LT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIENsaWVudDo6QXBwZW5kQ29tcHJlc3NlZEhvc3RuYW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBjaGFyICphSG9zdG5hbWUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBpbmRleCA9IDA7CisgICAgdWludDhfdCBsYWJlbFBvc2l0aW9uID0gMDsKKyAgICB1aW50OF90IGxhYmVsU2l6ZSA9IDA7CisKKyAgICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICAgIC8vIExvb2sgZm9yIHN0cmluZyBzZXBhcmF0b3IuCisgICAgICAgIGlmIChhSG9zdG5hbWVbaW5kZXhdID09IGtMYWJlbFNlcGFyYXRvciB8fCBhSG9zdG5hbWVbaW5kZXhdID09IGtMYWJlbFRlcm1pbmF0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChsYWJlbFNpemUgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZsYWJlbFNpemUsIDEpKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmFIb3N0bmFtZVtsYWJlbFBvc2l0aW9uXSwgbGFiZWxTaXplKSk7CisKKyAgICAgICAgICAgIGxhYmVsUG9zaXRpb24gKz0gbGFiZWxTaXplICsgMTsKKyAgICAgICAgICAgIGxhYmVsU2l6ZSAgICAgID0gMDsKKworICAgICAgICAgICAgaWYgKGFIb3N0bmFtZVtpbmRleF0gPT0ga0xhYmVsVGVybWluYXRvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhYmVsU2l6ZSsrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisKKyAgICAvLyBBZGQgdGVybWluYXRpb24gY2hhcmFjdGVyIGF0IHRoZSBlbmQuCisgICAgbGFiZWxTaXplID0ga0xhYmVsVGVybWluYXRvcjsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZsYWJlbFNpemUsIDEpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgQ2xpZW50OjpDb21wYXJlUXVlc3Rpb25zKE1lc3NhZ2UgJmFNZXNzYWdlUmVzcG9uc2UsIE1lc3NhZ2UgJmFNZXNzYWdlUXVlcnksIHVpbnQxNl90ICZhT2Zmc2V0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgYnVmUXVlcnlba0J1ZlNpemVdOworICAgIHVpbnQ4X3QgYnVmUmVzcG9uc2Vba0J1ZlNpemVdOworICAgIHVpbnQxNl90IHJlYWQgPSAwOworCisgICAgLy8gQ29tcGFyZSBxdWVzdGlvbiBzZWN0aW9uIG9mIHRoZSBxdWVyeSB3aXRoIHRoZSByZXNwb25zZS4KKyAgICB1aW50MTZfdCBsZW5ndGggPSBhTWVzc2FnZVF1ZXJ5LkdldExlbmd0aCgpIC0gYU1lc3NhZ2VRdWVyeS5HZXRPZmZzZXQoKSAtCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhlYWRlcikgLSBzaXplb2YoUXVlcnlNZXRhZGF0YSk7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gYU1lc3NhZ2VRdWVyeS5HZXRPZmZzZXQoKSArIHNpemVvZihIZWFkZXIpOworCisgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKHJlYWQgPSBhTWVzc2FnZVF1ZXJ5LlJlYWQob2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIDwgc2l6ZW9mKGJ1ZlF1ZXJ5KSA/IGxlbmd0aCA6IHNpemVvZihidWZRdWVyeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZRdWVyeSkpID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZVJlc3BvbnNlLlJlYWQoYU9mZnNldCwgcmVhZCwgYnVmUmVzcG9uc2UpID09IHJlYWQsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBWZXJpZnlPckV4aXQobWVtY21wKGJ1ZlJlc3BvbnNlLCBidWZRdWVyeSwgcmVhZCkgPT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgICAgIGFPZmZzZXQgKz0gcmVhZDsKKyAgICAgICAgb2Zmc2V0ICArPSByZWFkOworICAgICAgICBsZW5ndGggIC09IHJlYWQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBDbGllbnQ6OlNraXBIb3N0bmFtZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgJmFPZmZzZXQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBidWZba0J1ZlNpemVdOworICAgIHVpbnQxNl90IGluZGV4OworICAgIHVpbnQxNl90IHJlYWQgPSAwOworICAgIHVpbnQxNl90IG9mZnNldCA9IGFPZmZzZXQ7CisgICAgdWludDE2X3QgbGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhT2Zmc2V0OworCisgICAgd2hpbGUgKGxlbmd0aCA+IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKHJlYWQgPSBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKGJ1ZiksIGJ1ZikpID4gMCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIGluZGV4ID0gMDsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCByZWFkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYnVmW2luZGV4XSA9PSBrTGFiZWxUZXJtaW5hdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coYU9mZnNldCA9IG9mZnNldCArIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGJ1ZltpbmRleF0gJiBrQ29tcHJlc3Npb25PZmZzZXRNYXNrKSA9PSBrQ29tcHJlc3Npb25PZmZzZXRNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coYU9mZnNldCA9IG9mZnNldCArIDIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgIH0KKworICAgICAgICBsZW5ndGggLT0gcmVhZDsKKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworTWVzc2FnZSAqQ2xpZW50OjpGaW5kUmVsYXRlZFF1ZXJ5KGNvbnN0IEhlYWRlciAmYVJlc3BvbnNlSGVhZGVyLCBRdWVyeU1ldGFkYXRhICZhUXVlcnlNZXRhZGF0YSkKK3sKKyAgICB1aW50MTZfdCBtZXNzYWdlSWQ7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1QZW5kaW5nUXVlcmllcy5HZXRIZWFkKCk7CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gUGFydGlhbGx5IHJlYWQgRE5TIGhlYWRlciB0byBvYnRhaW4gbWVzc2FnZSBJRCBvbmx5LgorICAgICAgICBhc3NlcnQobWVzc2FnZS0+UmVhZChtZXNzYWdlLT5HZXRPZmZzZXQoKSwgc2l6ZW9mKG1lc3NhZ2VJZCksICZtZXNzYWdlSWQpID09IHNpemVvZihtZXNzYWdlSWQpKTsKKworICAgICAgICBpZiAoSG9zdFN3YXAxNihtZXNzYWdlSWQpID09IGFSZXNwb25zZUhlYWRlci5HZXRNZXNzYWdlSWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYVF1ZXJ5TWV0YWRhdGEuUmVhZEZyb20oKm1lc3NhZ2UpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK3ZvaWQgQ2xpZW50OjpGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKE1lc3NhZ2UgJmFRdWVyeSwgY29uc3QgUXVlcnlNZXRhZGF0YSAmYVF1ZXJ5TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdElwNkFkZHJlc3MgKmFBZGRyZXNzLCB1aW50MzJfdCBhVHRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFcnJvciBhUmVzdWx0KQoreworICAgIERlcXVldWVNZXNzYWdlKGFRdWVyeSk7CisKKyAgICBpZiAoYVF1ZXJ5TWV0YWRhdGEubVJlc3BvbnNlSGFuZGxlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgYVF1ZXJ5TWV0YWRhdGEubVJlc3BvbnNlSGFuZGxlcihhUXVlcnlNZXRhZGF0YS5tUmVzcG9uc2VDb250ZXh0LCBhUXVlcnlNZXRhZGF0YS5tSG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUFkZHJlc3MsIGFUdGwsIGFSZXN1bHQpOworICAgIH0KK30KKwordm9pZCBDbGllbnQ6OkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoKTsKK30KKwordm9pZCBDbGllbnQ6OkhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIodm9pZCkKK3sKKyAgICB1aW50MzJfdCBub3cgPSBUaW1lcjo6R2V0Tm93KCk7CisgICAgdWludDMyX3QgbmV4dERlbHRhID0gMHhmZmZmZmZmZjsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGE7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1QZW5kaW5nUXVlcmllcy5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbmV4dE1lc3NhZ2UgPSBOVUxMOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisgICAgICAgIHF1ZXJ5TWV0YWRhdGEuUmVhZEZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIGlmIChxdWVyeU1ldGFkYXRhLklzTGF0ZXIobm93KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IGRlbGF5IGFuZCBjaG9vc2UgdGhlIGxvd2VzdC4KKyAgICAgICAgICAgIGlmIChxdWVyeU1ldGFkYXRhLm1UcmFuc21pc3Npb25UaW1lIC0gbm93IDwgbmV4dERlbHRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHREZWx0YSA9IHF1ZXJ5TWV0YWRhdGEubVRyYW5zbWlzc2lvblRpbWUgLSBub3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVlcnlNZXRhZGF0YS5tUmV0cmFuc21pc3Npb25Db3VudCA8IGtNYXhSZXRyYW5zbWl0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnQgcmV0cmFuc21pc3Npb24gY291bnRlciBhbmQgdGltZXIuCisgICAgICAgICAgICBxdWVyeU1ldGFkYXRhLm1SZXRyYW5zbWlzc2lvbkNvdW50Kys7CisgICAgICAgICAgICBxdWVyeU1ldGFkYXRhLm1UcmFuc21pc3Npb25UaW1lID0gbm93ICsga1Jlc3BvbnNlVGltZW91dDsKKyAgICAgICAgICAgIHF1ZXJ5TWV0YWRhdGEuVXBkYXRlSW4oKm1lc3NhZ2UpOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiByZXRyYW5zbWlzc2lvbiB0aW1lIGlzIGxvd2VyIHRoYW4gY3VycmVudCBsb3dlc3QuCisgICAgICAgICAgICBpZiAocXVlcnlNZXRhZGF0YS5tVHJhbnNtaXNzaW9uVGltZSAtIG5vdyA8IG5leHREZWx0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZXh0RGVsdGEgPSBxdWVyeU1ldGFkYXRhLm1UcmFuc21pc3Npb25UaW1lIC0gbm93OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXRyYW5zbWl0CisgICAgICAgICAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihxdWVyeU1ldGFkYXRhLm1EZXN0aW5hdGlvbkFkZHJlc3MpOworICAgICAgICAgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQocXVlcnlNZXRhZGF0YS5tRGVzdGluYXRpb25Qb3J0KTsKKyAgICAgICAgICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKHF1ZXJ5TWV0YWRhdGEubVNvdXJjZUFkZHJlc3MpOworCisgICAgICAgICAgICBTZW5kQ29weSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm8gZXhwZWN0ZWQgcmVzcG9uc2UuCisgICAgICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlLCBxdWVyeU1ldGFkYXRhLCBOVUxMLCAwLCBPVF9FUlJPUl9SRVNQT05TRV9USU1FT1VUKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UgPSBuZXh0TWVzc2FnZTsKKyAgICB9CisKKyAgICBpZiAobmV4dERlbHRhICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChuZXh0RGVsdGEpOworICAgIH0KK30KKwordm9pZCBDbGllbnQ6OkhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxDbGllbnQgKj4oYUNvbnRleHQpLT5IYW5kbGVVZHBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIENsaWVudDo6SGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBRdWVyeU1ldGFkYXRhIHF1ZXJ5TWV0YWRhdGE7CisgICAgUmVzb3VyY2VSZWNvcmRBYWFhIHJlY29yZDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisKKyAgICAvLyBSRkMxMDM1IDcuMy4gUmVzb2x2ZXIgY2Fubm90IHJlbHkgdGhhdCBhIHJlc3BvbnNlIHdpbGwgY29tZSBmcm9tIHRoZSBzYW1lIGFkZHJlc3MKKyAgICAvLyB3aGljaCBpdCBzZW50IHRoZSBjb3JyZXNwb25kaW5nIHF1ZXJ5IHRvLgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihyZXNwb25zZUhlYWRlciksICZyZXNwb25zZUhlYWRlcikgPT0KKyAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlSGVhZGVyLkdldFR5cGUoKSA9PSBIZWFkZXI6OmtUeXBlUmVzcG9uc2UgJiYKKyAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXIuR2V0UXVlc3Rpb25Db3VudCgpID09IDEgJiYKKyAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXIuSXNUcnVuY2F0aW9uRmxhZ1NldCgpID09IGZhbHNlKTsKKworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKHJlc3BvbnNlSGVhZGVyKSk7CisgICAgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBGaW5kUmVsYXRlZFF1ZXJ5KHJlc3BvbnNlSGVhZGVyLCBxdWVyeU1ldGFkYXRhKSkgIT0gTlVMTCk7CisKKyAgICBpZiAocmVzcG9uc2VIZWFkZXIuR2V0UmVzcG9uc2VDb2RlKCkgIT0gSGVhZGVyOjprUmVzcG9uc2VTdWNjZXNzKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgfQorCisgICAgLy8gUGFyc2UgYW5kIGNoZWNrIHRoZSBxdWVzdGlvbiBzZWN0aW9uLgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBDb21wYXJlUXVlc3Rpb25zKGFNZXNzYWdlLCAqbWVzc2FnZSwgb2Zmc2V0KSk7CisKKyAgICAvLyBQYXJzZSBhbmQgY2hlY2sgdGhlIGFuc3dlciBzZWN0aW9uLgorICAgIGZvciAodWludDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IHJlc3BvbnNlSGVhZGVyLkdldEFuc3dlckNvdW50KCk7IGluZGV4KyspCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2tpcEhvc3RuYW1lKGFNZXNzYWdlLCBvZmZzZXQpKTsKKworICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFJlc291cmNlUmVjb3JkKSA+IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YocmVjb3JkKSwgJnJlY29yZCkgIT0gc2l6ZW9mKHJlY29yZCkgfHwKKyAgICAgICAgICAgIHJlY29yZC5HZXRUeXBlKCkgIT0gUmVzb3VyY2VSZWNvcmRBYWFhOjprVHlwZSB8fAorICAgICAgICAgICAgcmVjb3JkLkdldENsYXNzKCkgIT0gUmVzb3VyY2VSZWNvcmRBYWFhOjprQ2xhc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoUmVzb3VyY2VSZWNvcmQpICsgcmVjb3JkLkdldExlbmd0aCgpOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiB0aGUgZmlyc3QgZm91bmQgSVB2NiBhZGRyZXNzLgorICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlLCBxdWVyeU1ldGFkYXRhLCAmcmVjb3JkLkdldEFkZHJlc3MoKSwgcmVjb3JkLkdldFR0bCgpLCBPVF9FUlJPUl9OT05FKTsKKworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMICYmIGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKCptZXNzYWdlLCBxdWVyeU1ldGFkYXRhLCBOVUxMLCAwLCBlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCitDbGllbnQgJkNsaWVudDo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQ2xpZW50ICZjbGllbnQgPSAqc3RhdGljX2Nhc3Q8Q2xpZW50ICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIENsaWVudCAmY2xpZW50ID0gb3RHZXRUaHJlYWROZXRpZigpLkdldERuc0NsaWVudCgpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gY2xpZW50OworfQorCit9ICAvLyBuYW1lc3BhY2UgQ29hcAorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvZG5zX2NsaWVudC5ocHAgYi9zcmMvY29yZS9uZXQvZG5zX2NsaWVudC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2YWI4MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kbnNfY2xpZW50LmhwcApAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBETlNfQ0xJRU5UX0hQUF8KKyNkZWZpbmUgRE5TX0NMSUVOVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2Rucy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9kbnNfaGVhZGVycy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBETlMgY2xpZW50LgorICovCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgRG5zIHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIEROUyByZXRyYW5zbWlzc2lvbi4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBRdWVyeU1ldGFkYXRhCit7CisgICAgZnJpZW5kIGNsYXNzIENsaWVudDsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBRdWVyeU1ldGFkYXRhKHZvaWQpIHsgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0IHdpdGggc3BlY2lmaWMgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgIFBvaW50ZXIgdG8gYSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGUgcmVzcG9uc2UuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgIENvbnRleHQgZm9yIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLgorICAgICAqCisgICAgICovCisgICAgUXVlcnlNZXRhZGF0YShvdERuc1Jlc3BvbnNlSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOworICAgICAgICBtUmVzcG9uc2VIYW5kbGVyID0gYUhhbmRsZXI7CisgICAgICAgIG1SZXNwb25zZUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyByZXF1ZXN0IGRhdGEgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVhZHMgcmVxdWVzdCBkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHJlcXVlc3QgZGF0YSBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIGludCBVcGRhdGVJbihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA+IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA8IDApOyB9OworCitwcml2YXRlOgorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAqbUhvc3RuYW1lOyAgICAgICAgICAgICAvLy88IEEgaG9zdG5hbWUgdG8gYmUgZmluZC4KKyAgICBvdERuc1Jlc3BvbnNlSGFuZGxlciAgIG1SZXNwb25zZUhhbmRsZXI7ICAgICAgLy8vPCBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBpcyBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uLgorICAgIHZvaWQgICAgICAgICAgICAgICAgICAqbVJlc3BvbnNlQ29udGV4dDsgICAgICAvLy88IEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgIG1UcmFuc21pc3Npb25UaW1lOyAgICAgLy8vPCBUaW1lIHdoZW4gdGhlIHRpbWVyIHNob3VsZCBzaG9vdCBmb3IgdGhpcyBtZXNzYWdlLgorICAgIElwNjo6QWRkcmVzcyAgICAgICAgICAgbVNvdXJjZUFkZHJlc3M7ICAgICAgICAvLy88IElQdjYgYWRkcmVzcyBvZiB0aGUgbWVzc2FnZSBzb3VyY2UuCisgICAgSXA2OjpBZGRyZXNzICAgICAgICAgICBtRGVzdGluYXRpb25BZGRyZXNzOyAgIC8vLzwgSVB2NiBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgbURlc3RpbmF0aW9uUG9ydDsgICAgICAvLy88IFVEUCBwb3J0IG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgbVJldHJhbnNtaXNzaW9uQ291bnQ7ICAvLy88IE51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMuCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRE5TIGNsaWVudC4KKyAqCisgKi8KK2NsYXNzIENsaWVudAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgICBBIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhhdCBETlMgY2xpZW50IHNob3VsZCBiZSBhc3NpZ25lZCB0by4KKyAgICAgKgorICAgICAqLworICAgIENsaWVudChJcDY6Ok5ldGlmICZhTmV0aWYpOgorICAgICAgICBtU29ja2V0KGFOZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICAgICAgbU1lc3NhZ2VJZCgwKSwKKyAgICAgICAgbVJldHJhbnNtaXNzaW9uVGltZXIoYU5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkNsaWVudDo6SGFuZGxlUmV0cmFuc21pc3Npb25UaW1lciwgdGhpcykgeworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIEROUyBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSBETlMgY2xpZW50LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHNvY2tldCBpcyBhbHJlYWR5IG9wZW4uCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBETlMgY2xpZW50LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgRE5TIGNsaWVudC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgRE5TIHF1ZXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVF1ZXJ5ICAgIEEgcG9pbnRlciB0byBzcGVjaWZ5IEROUyBxdWVyeSBwYXJhbWV0ZXJzLgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICBBIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaGFsbCBiZSBjYWxsZWQgb24gcmVzcG9uc2UgcmVjZXB0aW9uIG9yIHRpbWUtb3V0LgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbnQgRE5TIHF1ZXJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBGYWlsZWQgdG8gYWxsb2NhdGUgcmV0cmFuc21pc3Npb24gZGF0YS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgSW52YWxpZCBhcmd1bWVudHMgc3VwcGxpZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFF1ZXJ5KGNvbnN0IG90RG5zUXVlcnkgKmFRdWVyeSwgb3REbnNSZXNwb25zZUhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb3J0IG51bWJlciB1c2VkIGJ5IEROUyBjbGllbnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvcnQgbnVtYmVyLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UG9ydCh2b2lkKSB7IHJldHVybiBtU29ja2V0LkdldFNvY2tOYW1lKCkubVBvcnQ7IH07CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogUmV0cmFuc21pc3Npb24gcGFyYW1ldGVycy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtSZXNwb25zZVRpbWVvdXQgPSBPUEVOVEhSRUFEX0NPTkZJR19ETlNfUkVTUE9OU0VfVElNRU9VVCwKKyAgICAgICAga01heFJldHJhbnNtaXQgICA9IE9QRU5USFJFQURfQ09ORklHX0ROU19NQVhfUkVUUkFOU01JVCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogU3BlY2lhbCBETlMgc3ltYm9scy4KKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrTGFiZWxUZXJtaW5hdG9yICAgICAgID0gMCwKKyAgICAgICAga0xhYmVsU2VwYXJhdG9yICAgICAgICA9ICcuJywKKyAgICAgICAga0NvbXByZXNzaW9uT2Zmc2V0TWFzayA9IDB4YzAKKyAgICB9OworCisgICAgLyoqCisgICAgICogT3BlcmF0aW5nIG9uIG1lc3NhZ2UgYnVmZmVycy4KKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrQnVmU2l6ZSA9IDE2CisgICAgfTsKKworICAgIE1lc3NhZ2UgKk5ld01lc3NhZ2UoY29uc3QgSGVhZGVyICZhSGVhZGVyKTsKKyAgICBNZXNzYWdlICpDb3B5QW5kRW5xdWV1ZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IFF1ZXJ5TWV0YWRhdGEgJmFRdWVyeU1ldGFkYXRhKTsKKyAgICB2b2lkIERlcXVldWVNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIFNlbmRNZXNzYWdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgU2VuZENvcHkoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBvdEVycm9yIEFwcGVuZENvbXByZXNzZWRIb3N0bmFtZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgY2hhciAqYUhvc3RuYW1lKTsKKyAgICBvdEVycm9yIENvbXBhcmVRdWVzdGlvbnMoTWVzc2FnZSAmYU1lc3NhZ2VSZXNwb25zZSwgTWVzc2FnZSAmYU1lc3NhZ2VRdWVyeSwgdWludDE2X3QgJmFPZmZzZXQpOworICAgIG90RXJyb3IgU2tpcEhvc3RuYW1lKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCAmYU9mZnNldCk7CisKKyAgICBNZXNzYWdlICpGaW5kUmVsYXRlZFF1ZXJ5KGNvbnN0IEhlYWRlciAmYVJlc3BvbnNlSGVhZGVyLCBRdWVyeU1ldGFkYXRhICZhUXVlcnlNZXRhZGF0YSk7CisgICAgdm9pZCBGaW5hbGl6ZURuc1RyYW5zYWN0aW9uKE1lc3NhZ2UgJmFRdWVyeSwgY29uc3QgUXVlcnlNZXRhZGF0YSAmYVF1ZXJ5TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90SXA2QWRkcmVzcyAqYUFkZHJlc3MsIHVpbnQzMl90IGFUdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXJyb3IgYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlUmV0cmFuc21pc3Npb25UaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIENsaWVudCAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgSXA2OjpVZHBTb2NrZXQgbVNvY2tldDsKKworICAgIHVpbnQxNl90IG1NZXNzYWdlSWQ7CisgICAgTWVzc2FnZVF1ZXVlIG1QZW5kaW5nUXVlcmllczsKKyAgICBUaW1lciBtUmV0cmFuc21pc3Npb25UaW1lcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBEbnMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEROU19DTElFTlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2Ruc19oZWFkZXJzLmhwcCBiL3NyYy9jb3JlL25ldC9kbnNfaGVhZGVycy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkMGJkNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9kbnNfaGVhZGVycy5ocHAKQEAgLTAsMCArMSw1ODggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIEROUyBoZWFkZXJzLgorICovCisKKyNpZm5kZWYgRE5TX0hFQURFUl9IUFBfCisjZGVmaW5lIEROU19IRUFERVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6OkRucworICogQGJyaWVmCisgKiAgIFRoaXMgbmFtZXNwYWNlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBETlMuCisgKgorICovCituYW1lc3BhY2UgRG5zIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWRucworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgRE5TLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEROUyBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBIZWFkZXIKK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIEROUyBIZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBIZWFkZXIodm9pZCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1lc3NhZ2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldE1lc3NhZ2VJZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1NZXNzYWdlSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNzYWdlIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJZCBUaGUgTWVzc2FnZSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWVzc2FnZUlkKHVpbnQxNl90IGFNZXNzYWdlSWQpIHsgbU1lc3NhZ2VJZCA9IEhvc3RTd2FwMTYoYU1lc3NhZ2VJZCk7IH0KKworICAgIC8qKgorICAgICAqIERlZmluZXMgdHlwZXMgb2YgRE5TIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtUeXBlUXVlcnkgPSAwLAorICAgICAgICBrVHlwZVJlc3BvbnNlID0gMSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqLworICAgIFR5cGUgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPigobUZsYWdzWzBdICYga1FyRmxhZ01hc2spID4+IGtRckZsYWdPZmZzZXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeworICAgICAgICBtRmxhZ3NbMF0gJj0gfmtRckZsYWdNYXNrOworICAgICAgICBtRmxhZ3NbMF0gfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpIDw8IGtRckZsYWdPZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0eXBlcyBvZiBxdWVyeS4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gUXVlcnlUeXBlCisgICAgeworICAgICAgICBrUXVlcnlUeXBlU3RhbmRhcmQgPSAwLAorICAgICAgICBrUXVlcnlUeXBlSW52ZXJzZSAgPSAxLAorICAgICAgICBrUXVlcnlUeXBlU3RhdHVzICAgPSAyLAorICAgICAgICBrUXVlcnlUeXBlTm90aWZ5ICAgPSA0LAorICAgICAgICBrUXVlcnlUeXBlVXBkYXRlICAgPSA1CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHF1ZXJ5LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIHF1ZXJ5LgorICAgICAqLworICAgIFF1ZXJ5VHlwZSBHZXRRdWVyeVR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUeXBlPigobUZsYWdzWzBdICYga09wQ29kZU1hc2spID4+IGtPcENvZGVPZmZzZXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0eXBlIG9mIHRoZSBxdWVyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlIFRoZSB0eXBlIG9mIHRoZSBxdWVyeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UXVlcnlUeXBlKFF1ZXJ5VHlwZSBhVHlwZSkgeworICAgICAgICBtRmxhZ3NbMF0gJj0gfmtPcENvZGVNYXNrOworICAgICAgICBtRmxhZ3NbMF0gfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpIDw8IGtPcENvZGVPZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIGluIHJlc3BvbnNlIG1lc3NhZ2UgaWYgdGhlIHJlc3BvbmRpbmcgbmFtZSBzZXJ2ZXIgaXMgYW4KKyAgICAgKiBhdXRob3JpdHkgZm9yIHRoZSBkb21haW4gbmFtZSBpbiBxdWVzdGlvbiBzZWN0aW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBBdXRob3JpdGF0aXZlIEFuc3dlciBmbGFnIChBQSkgaXMgc2V0IGluIHRoZSBoZWFkZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzQXV0aG9yaXRhdGl2ZUFuc3dlckZsYWdTZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFnc1swXSAmIGtBYUZsYWdNYXNrKSA9PSBrQWFGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBBdXRob3JpdGF0aXZlIEFuc3dlciBmbGFnIChBQSkgaW4gdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJBdXRob3JpdGF0aXZlQW5zd2VyRmxhZyh2b2lkKSB7IG1GbGFnc1swXSAmPSB+a0FhRmxhZ01hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEF1dGhvcml0YXRpdmUgQW5zd2VyIGZsYWcgKEFBKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBdXRob3JpdGF0aXZlQW5zd2VyRmxhZyh2b2lkKSB7IG1GbGFnc1swXSB8PSBrQWFGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIGlmIG1lc3NhZ2UgaXMgdHJ1bmNhdGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBUcnVuY2F0aW9uIGZsYWcgKFRDKSBpcyBzZXQgaW4gdGhlIGhlYWRlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqLworICAgIGJvb2wgSXNUcnVuY2F0aW9uRmxhZ1NldCh2b2lkKSBjb25zdCB7IHJldHVybiAobUZsYWdzWzBdICYga1RjRmxhZ01hc2spID09IGtUY0ZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIFRydW5jYXRpb24gZmxhZyAoVEMpIGluIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyVHJ1bmNhdGlvbkZsYWcodm9pZCkgeyBtRmxhZ3NbMF0gJj0gfmtUY0ZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUcnVuY2F0aW9uIGZsYWcgKFRDKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUcnVuY2F0aW9uRmxhZyh2b2lkKSB7IG1GbGFnc1swXSB8PSBrVGNGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3BlY2lmaWVzIGlmIHJlc29sdmVyIHdhbnRzIHRvIGRpcmVjdCB0aGUgbmFtZSBzZXJ2ZXIgdG8gcHVyc3VlCisgICAgICogdGhlIHF1ZXJ5IHJlY3Vyc2l2ZWx5LgorICAgICAqCisgICAgICogQHJldHVybnMgVHJ1ZSBpZiBSZWN1cnNpb24gRGVzaXJlZCBmbGFnIChSRCkgaXMgc2V0IGluIHRoZSBoZWFkZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzUmVjdXJzaW9uRGVzaXJlZEZsYWdTZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFnc1swXSAmIGtSZEZsYWdNYXNrKSA9PSBrUmRGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBSZWN1cnNpb24gRGVzaXJlZCBmbGFnIChSRCkgaW4gdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJSZWN1cnNpb25EZXNpcmVkRmxhZyh2b2lkKSB7IG1GbGFnc1swXSAmPSB+a1JkRmxhZ01hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJlY3Vyc2lvbiBEZXNpcmVkIGZsYWcgKFJEKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZWN1cnNpb25EZXNpcmVkRmxhZyh2b2lkKSB7IG1GbGFnc1swXSB8PSBrUmRGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVub3RlcyB3aGV0aGVyIHJlY3Vyc2l2ZSBxdWVyeSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBpbiB0aGUgbmFtZSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUcnVlIGlmIFJlY3Vyc2lvbiBBdmFpbGFibGUgZmxhZyAoUkEpIGlzIHNldCBpbiB0aGUgaGVhZGVyLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc1JlY3Vyc2lvbkF2YWlsYWJsZUZsYWdTZXQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFnc1sxXSAmIGtSYUZsYWdNYXNrKSA9PSBrUmFGbGFnTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBSZWN1cnNpb24gQXZhaWxhYmxlIGZsYWcgKFJBKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclJlY3Vyc2lvbkF2YWlsYWJsZUZsYWcodm9pZCkgeyBtRmxhZ3NbMV0gJj0gfmtSYUZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSZWN1cnNpb24gQXZhaWxhYmxlIGZsYWcgKFJBKSBpbiB0aGUgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZWN1cnNpb25BdmFpbGFibGVGbGFnKHZvaWQpIHsgbUZsYWdzWzFdIHw9IGtSYUZsYWdNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHJlc3BvbnNlIGNvZGVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBSZXNwb25zZQorICAgIHsKKyAgICAgICAga1Jlc3BvbnNlU3VjY2VzcyAgICAgICAgPSAwLAorICAgICAgICBrUmVzcG9uc2VGb3JtYXRFcnJvciAgICA9IDEsCisgICAgICAgIGtSZXNwb25zZVNlcnZlckZhaWx1cmUgID0gMiwKKyAgICAgICAga1Jlc3BvbnNlTmFtZUVycm9yICAgICAgPSAzLAorICAgICAgICBrUmVzcG9uc2VOb3RJbXBsZW1lbnRlZCA9IDQsCisgICAgICAgIGtSZXNwb25zZVJlZnVzZWQgICAgICAgID0gNSwKKyAgICAgICAga1Jlc3BvbnNlTm90QXV0aCAgICAgICAgPSA5LAorICAgICAgICBrUmVzcG9uc2VOb3Rab25lICAgICAgICA9IDEwLAorICAgICAgICBrUmVzcG9uc2VCYWROYW1lICAgICAgICA9IDIwLAorICAgICAgICBrUmVzcG9uc2VCYWRBbGcgICAgICAgICA9IDIxLAorICAgICAgICBrUmVzcG9uc2VCYWRUcnVuY2F0aW9uICA9IDIyLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXNwb25zZSBjb2RlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHJlc3BvbnNlIGNvZGUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAqLworICAgIFJlc3BvbnNlIEdldFJlc3BvbnNlQ29kZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZXNwb25zZT4oKG1GbGFnc1sxXSAmIGtSQ29kZU1hc2spID4+IGtSQ29kZU9mZnNldCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHJlc3BvbnNlIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzcG9uc2UgVGhlIHR5cGUgb2YgdGhlIHJlc3BvbnNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZXNwb25zZUNvZGUoUmVzcG9uc2UgYVJlc3BvbnNlKSB7CisgICAgICAgIG1GbGFnc1sxXSAmPSB+a1JDb2RlTWFzazsKKyAgICAgICAgbUZsYWdzWzFdIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFSZXNwb25zZSkgPDwga1JDb2RlT2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gcXVlc3Rpb24gc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFF1ZXN0aW9uQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUWRDb3VudCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ291bnQgVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFF1ZXN0aW9uQ291bnQodWludDE2X3QgYUNvdW50KSB7IG1RZENvdW50ID0gSG9zdFN3YXAxNihhQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbnN3ZXIgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbnN3ZXIgc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEFuc3dlckNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUFuQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbnN3ZXIgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb3VudCBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW5zd2VyIHNlY3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFuc3dlckNvdW50KHVpbnQxNl90IGFDb3VudCkgeyBtQW5Db3VudCA9IEhvc3RTd2FwMTYoYUNvdW50KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYXV0aG9yaXR5IHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhdXRob3JpdHkgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0QXV0aG9yaXR5UmVjb3Jkc0NvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobU5zQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhdXRob3JpdHkgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50IFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhdXRob3JpdHkgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBdXRob3JpdHlSZWNvcmRzQ291bnQodWludDE2X3QgYUNvdW50KSB7IG1Oc0NvdW50ID0gSG9zdFN3YXAxNihhQ291bnQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZGRpdGlvbmFsIHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZGRpdGlvbmFsIHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEFkZGl0aW9uYWxSZWNvcmRzQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtQXJDb3VudCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGFkZGl0aW9uYWwgcmVjb3JkcyBzZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvdW50IFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhZGRpdGlvbmFsIHJlY29yZHMgc2VjdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWRkaXRpb25hbFJlY29yZHNDb3VudCh1aW50MTZfdCBhQ291bnQpIHsgbUFyQ291bnQgPSBIb3N0U3dhcDE2KGFDb3VudCk7IH0KKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBQcm90b2NvbCBDb25zdGFudHMgKFJGQyAxMDM1KS4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtRckZsYWdPZmZzZXQgPSA3LCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBRUiBGbGFnIG9mZnNldC4KKyAgICAgICAga1FyRmxhZ01hc2sgICA9IDB4MDEgPDwga1FyRmxhZ09mZnNldCwgICAvLy88IFFSIEZsYWcgbWFzay4KKyAgICAgICAga09wQ29kZU9mZnNldCA9IDMsICAgICAgICAgICAgICAgICAgICAgICAvLy88IE9wQ29kZSBmaWVsZCBvZmZzZXQuCisgICAgICAgIGtPcENvZGVNYXNrICAgPSAweDBmIDw8IGtPcENvZGVPZmZzZXQsICAgLy8vPCBPcENvZGUgZmllbGQgbWFzay4KKyAgICAgICAga0FhRmxhZ09mZnNldCA9IDIsICAgICAgICAgICAgICAgICAgICAgICAvLy88IEFBIEZsYWcgb2Zmc2V0LgorICAgICAgICBrQWFGbGFnTWFzayAgID0gMHgwMSA8PCBrQWFGbGFnT2Zmc2V0LCAgIC8vLzwgQUEgRmxhZyBtYXNrLgorICAgICAgICBrVGNGbGFnT2Zmc2V0ID0gMSwgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVEMgRmxhZyBvZmZzZXQuCisgICAgICAgIGtUY0ZsYWdNYXNrICAgPSAweDAxIDw8IGtUY0ZsYWdPZmZzZXQsICAgLy8vPCBUQyBGbGFnIG1hc2suCisgICAgICAgIGtSZEZsYWdPZmZzZXQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSRCBGbGFnIG9mZnNldC4KKyAgICAgICAga1JkRmxhZ01hc2sgICA9IDB4MDEgPDwga1JkRmxhZ09mZnNldCwgICAvLy88IFJEIEZsYWcgbWFzay4KKworICAgICAgICBrUmFGbGFnT2Zmc2V0ID0gNywgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUkEgRmxhZyBvZmZzZXQuCisgICAgICAgIGtSYUZsYWdNYXNrICAgPSAweDAxIDw8IGtSYUZsYWdPZmZzZXQsICAgLy8vPCBSQSBGbGFnIG1hc2suCisgICAgICAgIGtSQ29kZU9mZnNldCAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSQ09ERSBmaWVsZCBvZmZzZXQuCisgICAgICAgIGtSQ29kZU1hc2sgICAgPSAweDBmIDw8IGtSQ29kZU9mZnNldCwgICAgLy8vPCBSQ09ERSBmaWVsZCBtYXNrLgorICAgIH07CisKKyAgICB1aW50MTZfdCBtTWVzc2FnZUlkOyAgLy8vPCBBIG1lc3NhZ2UgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgYnkgdGhlIHJlcXVlc3RlciB0byBtYXRjaCB1cCByZXBsaWVzIHRvIG91dHN0YW5kaW5nIHF1ZXJpZXMuCisgICAgdWludDhfdCAgbUZsYWdzWzJdOyAgIC8vLzwgRE5TIGhlYWRlciBmbGFncy4KKyAgICB1aW50MTZfdCBtUWRDb3VudDsgICAgLy8vPCBBIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcXVlc3Rpb24gc2VjdGlvbi4KKyAgICB1aW50MTZfdCBtQW5Db3VudDsgICAgLy8vPCBBIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYW5zd2VyIHNlY3Rpb24uCisgICAgdWludDE2X3QgbU5zQ291bnQ7ICAgIC8vLzwgQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGF1dGhvcml0eSByZWNvcmRzIHNlY3Rpb24uCisgICAgdWludDE2X3QgbUFyQ291bnQ7ICAgIC8vLzwgQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGFkZGl0aW9uYWwgcmVjb3JkcyBzZWN0aW9uLgorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUmVzb3VyY2UgUmVjb3JkIGJvZHkgZm9ybWF0IChSUikuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUmVzb3VyY2VSZWNvcmQKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICAgICAqLworICAgIHVpbnQxNl90IEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtVHlwZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlIFRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUodWludDE2X3QgYVR5cGUpIHsgbVR5cGUgPSBIb3N0U3dhcDE2KGFUeXBlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY2xhc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjbGFzcyBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICAgICAqLworICAgIHVpbnQxNl90IEdldENsYXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNsYXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2xhc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDbGFzcyBUaGUgY2xhc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2xhc3ModWludDE2X3QgYUNsYXNzKSB7IG1DbGFzcyA9IEhvc3RTd2FwMTYoYUNsYXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGltZSB0byBsaXZlIGZpZWxkIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdGltZSB0byBsaXZlIGZpZWxkIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICovCisgICAgdWludDMyX3QgR2V0VHRsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVR0bCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHRpbWUgdG8gbGl2ZSBmaWVsZCBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR0bCBUaGUgdGltZSB0byBsaXZlIGZpZWxkIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR0bCh1aW50MzJfdCBhVHRsKSB7IG1UdGwgPSBIb3N0U3dhcDMyKGFUdGwpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsZW5ndGggb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVuZ3RoKHVpbnQxNl90IGFMZW5ndGgpIHsgbUxlbmd0aCA9IEhvc3RTd2FwMTYoYUxlbmd0aCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVHlwZTsgICAgLy8vPCBUaGUgdHlwZSBvZiB0aGUgZGF0YSBpbiBSREFUQSBzZWN0aW9uLgorICAgIHVpbnQxNl90IG1DbGFzczsgICAvLy88IFRoZSBjbGFzcyBvZiB0aGUgZGF0YSBpbiBSREFUQSBzZWN0aW9uLgorICAgIHVpbnQzMl90IG1UdGw7ICAgICAvLy88IFNwZWNpZmllcyB0aGUgbWF4aW11bSB0aW1lIHRoYXQgdGhlIHJlc291cmNlIHJlY29yZCBtYXkgYmUgY2FjaGVkLgorICAgIHVpbnQxNl90IG1MZW5ndGg7ICAvLy88IFRoZSBsZW5ndGggb2YgUkRBVEEgc2VjdGlvbiBpbiBieXRlcy4KKworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFJlc291cmNlIFJlY29yZCBib2R5IGZvcm1hdCBvZiBBQUFBIHR5cGUuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUmVzb3VyY2VSZWNvcmRBYWFhOiBwdWJsaWMgUmVzb3VyY2VSZWNvcmQKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSAgID0gMHgxQywgIC8vLzwgQUFBQSBSZXNvdXJjZSBSZWNvcmQgdHlwZS4KKyAgICAgICAga0NsYXNzICA9IDB4MDEsICAvLy88IFRoZSB2YWx1ZSBvZiB0aGUgSW50ZXJuZXQgY2xhc3MuCisgICAgICAgIGtMZW5ndGggPSAxNiwgICAgLy8vPCBTaXplIG9mIHRoZSBBQUFBIFJlc291cmNlIFJlY29yZCB0eXBlLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgQUFBQSBSZXNvdXJjZSBSZWNvcmQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeworICAgICAgICBSZXNvdXJjZVJlY29yZDo6U2V0VHlwZShrVHlwZSk7CisgICAgICAgIFJlc291cmNlUmVjb3JkOjpTZXRDbGFzcyhrQ2xhc3MpOworICAgICAgICBSZXNvdXJjZVJlY29yZDo6U2V0VHRsKDApOworICAgICAgICBSZXNvdXJjZVJlY29yZDo6U2V0TGVuZ3RoKGtMZW5ndGgpOworICAgICAgICBtZW1zZXQoJm1BZGRyZXNzLCAwLCBzaXplb2YobUFkZHJlc3MpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzIFRoZSBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWRkcmVzcyhvdElwNkFkZHJlc3MgJmFBZGRyZXNzKSB7IG1BZGRyZXNzID0gYUFkZHJlc3M7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlZmVyZW5jZSB0byBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByZWZlcmVuY2UgdG8gSVB2NiBhZGRyZXNzIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgICAgICovCisgICAgb3RJcDZBZGRyZXNzICZHZXRBZGRyZXNzKHZvaWQpIHsgcmV0dXJuIG1BZGRyZXNzOyB9CisKK3ByaXZhdGU6CisgICAgb3RJcDZBZGRyZXNzIG1BZGRyZXNzOyAgLy8vPCBJcHY2IEFkZHJlc3Mgb2YgQUFBQSBSZXNvdXJjZSBSZWNvcmQuCisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBRdWVzdGlvbiBmb3JtYXQuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUXVlc3Rpb24KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgUXVlc3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBRdWVzdGlvbih1aW50MTZfdCBhVHlwZSwgdWludDE2X3QgYUNsYXNzKSB7CisgICAgICAgIFNldFR5cGUoYVR5cGUpOworICAgICAgICBTZXRDbGFzcyhhQ2xhc3MpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlIFRoZSB0eXBlIG9mIHRoZSBxdWVzdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZSh1aW50MTZfdCBhVHlwZSkgeyBtVHlwZSA9IEhvc3RTd2FwMTYoYVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgcXVlc3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY2xhc3Mgb2YgdGhlIHF1ZXN0aW9uLgorICAgICAqLworICAgIHVpbnQxNl90IEdldENsYXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNsYXNzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2xhc3Mgb2YgdGhlIHF1ZXN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNsYXNzIFRoZSBjbGFzcyBvZiB0aGUgcXVlc3Rpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENsYXNzKHVpbnQxNl90IGFDbGFzcykgeyBtQ2xhc3MgPSBIb3N0U3dhcDE2KGFDbGFzcyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtVHlwZTsgICAgICAvLy88IFRoZSB0eXBlIG9mIHRoZSBkYXRhIGluIHF1ZXN0aW9uIHNlY3Rpb24uCisgICAgdWludDE2X3QgbUNsYXNzOyAgICAgLy8vPCBUaGUgY2xhc3Mgb2YgdGhlIGRhdGEgaW4gcXVlc3Rpb24gc2VjdGlvbi4KKworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUXVlc3Rpb24gZm9ybWF0IG9mIEFBQUEgdHlwZS4KKyAqCisgKi8KK2NsYXNzIFF1ZXN0aW9uQWFhYTogcHVibGljIFF1ZXN0aW9uCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1R5cGUgID0gMHgxQywgIC8vLzwgQUFBQSBSZXNvdXJjZSBSZWNvcmQgdHlwZS4KKyAgICAgICAga0NsYXNzID0gMHgwMSwgIC8vLzwgVGhlIHZhbHVlIG9mIHRoZSBJbnRlcm5ldCBjbGFzcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgQUFBQSBRdWVzdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIFF1ZXN0aW9uQWFhYSh2b2lkKSA6IFF1ZXN0aW9uKGtUeXBlLCBrQ2xhc3MpIHt9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyByZXF1ZXN0IGRhdGEgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgYnl0ZXMuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gZ3JvdyB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCh0aGlzLCBzaXplb2YoKnRoaXMpKTsKKyAgICB9OworCit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBEbnMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEROU19IRUFERVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2ljbXA2LmNwcCBiL3NyYy9jb3JlL25ldC9pY21wNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlZGEyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9pY21wNi5jcHAKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgSUNNUHY2LgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImljbXA2LnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJpY21wNi5ocHAiCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworSWNtcDo6SWNtcChJcDYgJmFJcDYpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbUhhbmRsZXJzKE5VTEwpLAorICAgIG1FY2hvU2VxdWVuY2UoMSksCisgICAgbUlzRWNob0VuYWJsZWQodHJ1ZSkKK3sKK30KKworTWVzc2FnZSAqSWNtcDo6TmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpCit7CisgICAgcmV0dXJuIEdldElwNigpLk5ld01lc3NhZ2Uoc2l6ZW9mKEljbXBIZWFkZXIpICsgYVJlc2VydmVkKTsKK30KKworb3RFcnJvciBJY21wOjpSZWdpc3RlckhhbmRsZXIoSWNtcEhhbmRsZXIgJmFIYW5kbGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChJY21wSGFuZGxlciAqY3VyID0gbUhhbmRsZXJzOyBjdXI7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ciA9PSAmYUhhbmRsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFIYW5kbGVyLm1OZXh0ID0gbUhhbmRsZXJzOworICAgIG1IYW5kbGVycyA9ICZhSGFuZGxlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6U2VuZEVjaG9SZXF1ZXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlkZW50aWZpZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm9Mb2NhbDsKKyAgICBJY21wSGVhZGVyIGljbXBIZWFkZXI7CisKKyAgICBtZXNzYWdlSW5mb0xvY2FsID0gYU1lc3NhZ2VJbmZvOworCisgICAgaWNtcEhlYWRlci5Jbml0KCk7CisgICAgaWNtcEhlYWRlci5TZXRUeXBlKEljbXBIZWFkZXI6OmtUeXBlRWNob1JlcXVlc3QpOworICAgIGljbXBIZWFkZXIuU2V0SWQoYUlkZW50aWZpZXIpOworICAgIGljbXBIZWFkZXIuU2V0U2VxdWVuY2UobUVjaG9TZXF1ZW5jZSsrKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKCZpY21wSGVhZGVyLCBzaXplb2YoaWNtcEhlYWRlcikpKTsKKyAgICBhTWVzc2FnZS5TZXRPZmZzZXQoMCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldElwNigpLlNlbmREYXRhZ3JhbShhTWVzc2FnZSwgbWVzc2FnZUluZm9Mb2NhbCwga1Byb3RvSWNtcDYpKTsKKworICAgIG90TG9nSW5mb0ljbXAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZWNobyByZXF1ZXN0OiAoc2VxID0gJWQpIiwgaWNtcEhlYWRlci5HZXRTZXF1ZW5jZSgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6U2VuZEVycm9yKEljbXBIZWFkZXI6OlR5cGUgYVR5cGUsIEljbXBIZWFkZXI6OkNvZGUgYUNvZGUsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIgJmFIZWFkZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm9Mb2NhbDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBJY21wSGVhZGVyIGljbXA2SGVhZGVyOworCisgICAgbWVzc2FnZUluZm9Mb2NhbCA9IGFNZXNzYWdlSW5mbzsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IEdldElwNigpLk5ld01lc3NhZ2UoMCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPlNldExlbmd0aChzaXplb2YoaWNtcDZIZWFkZXIpICsgc2l6ZW9mKGFIZWFkZXIpKSk7CisKKyAgICBtZXNzYWdlLT5Xcml0ZShzaXplb2YoaWNtcDZIZWFkZXIpLCBzaXplb2YoYUhlYWRlciksICZhSGVhZGVyKTsKKworICAgIGljbXA2SGVhZGVyLkluaXQoKTsKKyAgICBpY21wNkhlYWRlci5TZXRUeXBlKGFUeXBlKTsKKyAgICBpY21wNkhlYWRlci5TZXRDb2RlKGFDb2RlKTsKKyAgICBtZXNzYWdlLT5Xcml0ZSgwLCBzaXplb2YoaWNtcDZIZWFkZXIpLCAmaWNtcDZIZWFkZXIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEdldElwNigpLlNlbmREYXRhZ3JhbSgqbWVzc2FnZSwgbWVzc2FnZUluZm9Mb2NhbCwga1Byb3RvSWNtcDYpKTsKKworICAgIG90TG9nSW5mb0ljbXAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgSUNNUHY2IEVycm9yIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEljbXA6OkhhbmRsZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aDsKKyAgICBJY21wSGVhZGVyIGljbXA2SGVhZGVyOworICAgIHVpbnQxNl90IGNoZWNrc3VtOworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihpY21wNkhlYWRlciksICZpY21wNkhlYWRlcikgPT0gc2l6ZW9mKGljbXA2SGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgcGF5bG9hZExlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICAvLyB2ZXJpZnkgY2hlY2tzdW0KKyAgICBjaGVja3N1bSA9IElwNjo6Q29tcHV0ZVBzZXVkb2hlYWRlckNoZWNrc3VtKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLCBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRMZW5ndGgsIGtQcm90b0ljbXA2KTsKKyAgICBjaGVja3N1bSA9IGFNZXNzYWdlLlVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhTWVzc2FnZS5HZXRPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCk7CisgICAgVmVyaWZ5T3JFeGl0KGNoZWNrc3VtID09IDB4ZmZmZiwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAobUlzRWNob0VuYWJsZWQgJiYgKGljbXA2SGVhZGVyLkdldFR5cGUoKSA9PSBJY21wSGVhZGVyOjprVHlwZUVjaG9SZXF1ZXN0KSkKKyAgICB7CisgICAgICAgIEhhbmRsZUVjaG9SZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgIH0KKworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGljbXA2SGVhZGVyKSk7CisKKyAgICBmb3IgKEljbXBIYW5kbGVyICpoYW5kbGVyID0gbUhhbmRsZXJzOyBoYW5kbGVyOyBoYW5kbGVyID0gaGFuZGxlci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlci0+SGFuZGxlUmVjZWl2ZU1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgaWNtcDZIZWFkZXIpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6SGFuZGxlRWNob1JlcXVlc3QoTWVzc2FnZSAmYVJlcXVlc3RNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEljbXBIZWFkZXIgaWNtcDZIZWFkZXI7CisgICAgTWVzc2FnZSAqcmVwbHlNZXNzYWdlID0gTlVMTDsKKyAgICBNZXNzYWdlSW5mbyByZXBseU1lc3NhZ2VJbmZvOworICAgIHVpbnQxNl90IHBheWxvYWRMZW5ndGg7CisKKyAgICBvdExvZ0luZm9JY21wKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBFY2hvIFJlcXVlc3QiKTsKKworICAgIGljbXA2SGVhZGVyLkluaXQoKTsKKyAgICBpY21wNkhlYWRlci5TZXRUeXBlKEljbXBIZWFkZXI6OmtUeXBlRWNob1JlcGx5KTsKKworICAgIGlmICgocmVwbHlNZXNzYWdlID0gR2V0SXA2KCkuTmV3TWVzc2FnZSgwKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TG9nRGViZ0ljbXAoR2V0SW5zdGFuY2UoKSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIG5ldyBtZXNzYWdlIik7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBwYXlsb2FkTGVuZ3RoID0gYVJlcXVlc3RNZXNzYWdlLkdldExlbmd0aCgpIC0gYVJlcXVlc3RNZXNzYWdlLkdldE9mZnNldCgpIC0gSWNtcEhlYWRlcjo6R2V0RGF0YU9mZnNldCgpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSByZXBseU1lc3NhZ2UtPlNldExlbmd0aChJY21wSGVhZGVyOjpHZXREYXRhT2Zmc2V0KCkgKyBwYXlsb2FkTGVuZ3RoKSk7CisKKyAgICByZXBseU1lc3NhZ2UtPldyaXRlKDAsIEljbXBIZWFkZXI6OkdldERhdGFPZmZzZXQoKSwgJmljbXA2SGVhZGVyKTsKKyAgICBhUmVxdWVzdE1lc3NhZ2UuQ29weVRvKGFSZXF1ZXN0TWVzc2FnZS5HZXRPZmZzZXQoKSArIEljbXBIZWFkZXI6OkdldERhdGFPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEljbXBIZWFkZXI6OkdldERhdGFPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCwgKnJlcGx5TWVzc2FnZSk7CisKKyAgICByZXBseU1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIGlmICghYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIHJlcGx5TWVzc2FnZUluZm8uU2V0U29ja0FkZHIoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpOworICAgIH0KKworICAgIHJlcGx5TWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQoYU1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gR2V0SXA2KCkuU2VuZERhdGFncmFtKCpyZXBseU1lc3NhZ2UsIHJlcGx5TWVzc2FnZUluZm8sIGtQcm90b0ljbXA2KSk7CisKKyAgICByZXBseU1lc3NhZ2UtPlJlYWQocmVwbHlNZXNzYWdlLT5HZXRPZmZzZXQoKSwgc2l6ZW9mKGljbXA2SGVhZGVyKSwgJmljbXA2SGVhZGVyKTsKKyAgICBvdExvZ0luZm9JY21wKEdldEluc3RhbmNlKCksICJTZW50IEVjaG8gUmVwbHkgKHNlcSA9ICVkKSIsIGljbXA2SGVhZGVyLkdldFNlcXVlbmNlKCkpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgcmVwbHlNZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICByZXBseU1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSWNtcDo6VXBkYXRlQ2hlY2tzdW0oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFDaGVja3N1bSkKK3sKKyAgICBhQ2hlY2tzdW0gPSBhTWVzc2FnZS5VcGRhdGVDaGVja3N1bShhQ2hlY2tzdW0sIGFNZXNzYWdlLkdldE9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworCisgICAgaWYgKGFDaGVja3N1bSAhPSAweGZmZmYpCisgICAgeworICAgICAgICBhQ2hlY2tzdW0gPSB+YUNoZWNrc3VtOworICAgIH0KKworICAgIGFDaGVja3N1bSA9IEhvc3RTd2FwMTYoYUNoZWNrc3VtKTsKKyAgICBhTWVzc2FnZS5Xcml0ZShhTWVzc2FnZS5HZXRPZmZzZXQoKSArIEljbXBIZWFkZXI6OkdldENoZWNrc3VtT2Zmc2V0KCksIHNpemVvZihhQ2hlY2tzdW0pLCAmYUNoZWNrc3VtKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaWNtcDYuaHBwIGIvc3JjL2NvcmUvbmV0L2ljbXA2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2ZlN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2ljbXA2LmhwcApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElDTVB2Ni4KKyAqLworCisjaWZuZGVmIElDTVA2X0hQUF8KKyNkZWZpbmUgSUNNUDZfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9pY21wNi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9oZWFkZXJzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pY21wNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSUNNUHY2LgorICoKKyAqIEB7CisgKgorICovCisKKy8qCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUNNUHY2IGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEljbXBIZWFkZXI6IHB1YmxpYyBvdEljbXA2SGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIElDTVB2NiBoZWFkZXIgdG8gYWxsIHplcm9zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVR5cGUgPSAwOyBtQ29kZSA9IDA7IG1DaGVja3N1bSA9IDA7IG1EYXRhLm0zMlswXSA9IDA7IH0KKworICAgIC8qKgorICAgICAqIElDTVB2NiBNZXNzYWdlIFR5cGVzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtUeXBlRHN0VW5yZWFjaCAgPSBPVF9JQ01QNl9UWVBFX0RTVF9VTlJFQUNILCAgIC8vLzwgRGVzdGluYXRpb24gVW5yZWFjaGFibGUKKyAgICAgICAga1R5cGVFY2hvUmVxdWVzdCA9IE9UX0lDTVA2X1RZUEVfRUNIT19SRVFVRVNULCAgLy8vPCBFY2hvIFJlcXVlc3QKKyAgICAgICAga1R5cGVFY2hvUmVwbHkgICA9IE9UX0lDTVA2X1RZUEVfRUNIT19SRVBMWSwgICAgLy8vPCBFY2hvIFJlcGx5CisgICAgfTsKKworICAgIC8qKgorICAgICAqIElDTVB2NiBNZXNzYWdlIENvZGVzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIENvZGUKKyAgICB7CisgICAgICAgIGtDb2RlRHN0VW5yZWFjaE5vUm91dGUgPSBPVF9JQ01QNl9DT0RFX0RTVF9VTlJFQUNIX05PX1JPVVRFLCAgLy8vPCBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSBObyBSb3V0ZQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJQ01QdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElDTVB2NiBtZXNzYWdlIHR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obVR5cGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJQ01QdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgIFRoZSBJQ01QdjYgbWVzc2FnZSB0eXBlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUeXBlKFR5cGUgYVR5cGUpIHsgbVR5cGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhVHlwZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElDTVB2NiBtZXNzYWdlIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUNNUHY2IG1lc3NhZ2UgY29kZS4KKyAgICAgKgorICAgICAqLworICAgIENvZGUgR2V0Q29kZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlPihtQ29kZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElDTVB2NiBtZXNzYWdlIGNvZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29kZSAgVGhlIElDTVB2NiBtZXNzYWdlIGNvZGUuCisgICAgICovCisgICAgdm9pZCBTZXRDb2RlKENvZGUgYUNvZGUpIHsgbUNvZGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhQ29kZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElDTVB2NiBtZXNzYWdlIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElDTVB2NiBtZXNzYWdlIGNoZWNrc3VtLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hlY2tzdW0odm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtQ2hlY2tzdW0pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJQ01QdjYgbWVzc2FnZSBjaGVja3N1bS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGVja3N1bSAgVGhlIElDTVB2NiBtZXNzYWdlIGNoZWNrc3VtLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0pIHsgbUNoZWNrc3VtID0gSG9zdFN3YXAxNihhQ2hlY2tzdW0pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJQ01QdjYgbWVzc2FnZSBJRCBmb3IgRWNobyBSZXF1ZXN0cyBhbmQgUmVwbGllcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJQ01QdjYgbWVzc2FnZSBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobURhdGEubTE2WzBdKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUNNUHY2IG1lc3NhZ2UgSUQgZm9yIEVjaG8gUmVxdWVzdHMgYW5kIFJlcGxpZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWQgIFRoZSBJQ01QdjYgbWVzc2FnZSBJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWQodWludDE2X3QgYUlkKSB7IG1EYXRhLm0xNlswXSA9IEhvc3RTd2FwMTYoYUlkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUNNUHY2IG1lc3NhZ2Ugc2VxdWVuY2UgZm9yIEVjaG8gUmVxdWVzdHMgYW5kIFJlcGxpZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUNNUHY2IG1lc3NhZ2Ugc2VxdWVuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1EYXRhLm0xNlsxXSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElDTVB2NiBtZXNzYWdlIHNlcXVlbmNlIGZvciBFY2hvIFJlcXVlc3RzIGFuZCBSZXBsaWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlcXVlbmNlICBUaGUgSUNNUHY2IG1lc3NhZ2Ugc2VxdWVuY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQxNl90IGFTZXF1ZW5jZSkgeyBtRGF0YS5tMTZbMV0gPSBIb3N0U3dhcDE2KGFTZXF1ZW5jZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgQ2hlY2tzdW0gZmllbGQgaW4gdGhlIElDTVB2NiBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgYnl0ZSBvZmZzZXQgb2YgdGhlIENoZWNrc3VtIGZpZWxkLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgR2V0Q2hlY2tzdW1PZmZzZXQodm9pZCkgeyByZXR1cm4gb2Zmc2V0b2Yob3RJY21wNkhlYWRlciwgbUNoZWNrc3VtKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJQ01QdjYgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBCeXRlIG9mZnNldCBvZiB0aGUgSUNNUHY2IHBheWxvYWQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBHZXREYXRhT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIG9mZnNldG9mKG90SWNtcDZIZWFkZXIsIG1EYXRhKTsgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSUNNUHY2IG1lc3NhZ2UgaGFuZGxlcnMuCisgKgorICovCitjbGFzcyBJY21wSGFuZGxlciA6IHB1YmxpYyBvdEljbXA2SGFuZGxlcgoreworICAgIGZyaWVuZCBjbGFzcyBJY21wOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGFuIElDTVB2NiBtZXNzYWdlIGhhbmRsZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgIEEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgYW4gSUNNUHY2IG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBJY21wSGFuZGxlcihvdEljbXA2UmVjZWl2ZUNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgbVJlY2VpdmVDYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICAgICAgbUNvbnRleHQgICAgICAgICA9IGFDb250ZXh0OworICAgICAgICBtTmV4dCAgICAgICAgICAgID0gTlVMTDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBIYW5kbGVSZWNlaXZlTWVzc2FnZShNZXNzYWdlICZtZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmbWVzc2FnZUluZm8sIGNvbnN0IEljbXBIZWFkZXIgJmljbXA2SGVhZGVyKSB7CisgICAgICAgIG1SZWNlaXZlQ2FsbGJhY2sobUNvbnRleHQsICZtZXNzYWdlLCAmbWVzc2FnZUluZm8sICZpY21wNkhlYWRlcik7CisgICAgfQorCisgICAgSWNtcEhhbmRsZXIgKkdldE5leHQodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SWNtcEhhbmRsZXIgKj4obU5leHQpOyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJQ01QdjYuCisgKgorICovCitjbGFzcyBJY21wOiBwdWJsaWMgSXA2TG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgSWNtcChJcDYgJmFJcDYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBJQ01QIG1lc3NhZ2Ugd2l0aCBzdWZmaWNpZW50IGhlYWRlciBzcGFjZSByZXNlcnZlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNlcnZlZCAgVGhlIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgdG8gcmVzZXJ2ZSBhZnRlciB0aGUgSUNNUCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugb3IgTlVMTCBpZiBubyBidWZmZXJzIGFyZSBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpOZXdNZXNzYWdlKHVpbnQxNl90IGFSZXNlcnZlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgSUNNUHY2IGhhbmRsZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgQSByZWZlcmVuY2UgdG8gdGhlIElDTVB2NiBoYW5kbGVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB0aGUgSUNNUHY2IGhhbmRsZXIuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgSUNNUHY2IGhhbmRsZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZWdpc3RlckhhbmRsZXIoSWNtcEhhbmRsZXIgJmFIYW5kbGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElDTVB2NiBFY2hvIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIEVjaG8gUmVxdWVzdCBwYXlsb2FkLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUlkZW50aWZpZXIgICBBbiBpZGVudGlmaWVyIHRvIGFpZCBpbiBtYXRjaGluZyBFY2hvIFJlcGxpZXMgdG8gdGhpcyBFY2hvIFJlcXVlc3QuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBNYXkgYmUgemVyby4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBJQ01QdjYgRWNobyBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gZ2VuZXJhdGUgYW4gSUNNUHY2IEVjaG8gUmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRWNob1JlcXVlc3QoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHVpbnQxNl90IGFJZGVudGlmaWVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElDTVB2NiBlcnJvciBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVR5cGUgICAgICAgICBUaGUgSUNNUHY2IG1lc3NhZ2UgdHlwZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29kZSAgICAgICAgIFRoZSBJQ01QdjYgbWVzc2FnZSBjb2RlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mby4KKyAgICAgKiBAcGFyYW1baW5dICBhSGVhZGVyICAgICAgIFRoZSBJUHY2IGhlYWRlciBvZiB0aGUgZXJyb3ItY2F1c2luZyBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIElDTVB2NiBlcnJvciBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kRXJyb3IoSWNtcEhlYWRlcjo6VHlwZSBhVHlwZSwgSWNtcEhlYWRlcjo6Q29kZSBhQ29kZSwgY29uc3QgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIgJmFIZWFkZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBhbiBJQ01QdjYgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIElDTVB2NiBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIElDTVB2NiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGdlbmVyYXRlIHRoZSByZXBseS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0RST1AgICAgIFRoZSBJQ01QdjYgbWVzc2FnZSB3YXMgaW52YWxpZCBhbmQgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSGFuZGxlTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBJQ01QdjYgY2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJQ01QdjYgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhUHNldWRvSGVhZGVyQ2hlY2tzdW0gIFRoZSBwc2V1ZG8taGVhZGVyIGNoZWNrc3VtIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB1cGRhdGVkIHRoZSBJQ01QdjYgY2hlY2tzdW0uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBtZXNzYWdlIHdhcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBVcGRhdGVDaGVja3N1bShNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYVBzZXVkb0hlYWRlckNoZWNrc3VtKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSUNNUHY2IEVjaG8gcHJvY2Vzc2luZyBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNFY2hvRW5hYmxlZCh2b2lkKSB7IHJldHVybiBtSXNFY2hvRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCBJQ01QdjYgRWNobyBwcm9jZXNzaW5nIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgVFJVRSB0byBlbmFibGUgSUNNUHY2IEVjaG8gcHJvY2Vzc2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFY2hvRW5hYmxlZChib29sIGFFbmFibGVkKSB7IG1Jc0VjaG9FbmFibGVkID0gYUVuYWJsZWQ7IH0KKworcHJpdmF0ZToKKyAgICBvdEVycm9yIEhhbmRsZUVjaG9SZXF1ZXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIEljbXBIYW5kbGVyICptSGFuZGxlcnM7CisKKyAgICB1aW50MTZfdCBtRWNob1NlcXVlbmNlOworICAgIGJvb2wgbUlzRWNob0VuYWJsZWQ7Cit9OworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVF9JQ01QNl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaXA2LmNwcCBiL3NyYy9jb3JlL25ldC9pcDYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGMwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2LmNwcApAQCAtMCwwICsxLDExODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgSVB2NiBuZXR3b3JraW5nLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImlwNi50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiaXA2LmhwcCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pY21wNi5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X3JvdXRlcy5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworSXA2OjpJcDYodm9pZCk6CisgICAgbVJvdXRlcygqdGhpcyksCisgICAgbUljbXAoKnRoaXMpLAorICAgIG1VZHAoKnRoaXMpLAorICAgIG1NcGwoKnRoaXMpLAorICAgIG1NZXNzYWdlUG9vbChHZXRJbnN0YW5jZSgpKSwKKyAgICBtRm9yd2FyZGluZ0VuYWJsZWQoZmFsc2UpLAorICAgIG1TZW5kUXVldWVUYXNrKG1UYXNrbGV0U2NoZWR1bGVyLCBIYW5kbGVTZW5kUXVldWUsIHRoaXMpLAorICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayhOVUxMKSwKKyAgICBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2tDb250ZXh0KE5VTEwpLAorICAgIG1Jc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkKGZhbHNlKSwKKyAgICBtTmV0aWZMaXN0SGVhZChOVUxMKQoreworfQorCitNZXNzYWdlICpJcDY6Ok5ld01lc3NhZ2UodWludDE2X3QgYVJlc2VydmVkKQoreworICAgIHJldHVybiBtTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCBzaXplb2YoSGVhZGVyKSArIHNpemVvZihIb3BCeUhvcEhlYWRlcikgKyBzaXplb2YoT3B0aW9uTXBsKSArIGFSZXNlcnZlZCk7Cit9CisKK3VpbnQxNl90IElwNjo6VXBkYXRlQ2hlY2tzdW0odWludDE2X3QgYUNoZWNrc3VtLCB1aW50MTZfdCBhVmFsdWUpCit7CisgICAgdWludDE2X3QgcmVzdWx0ID0gYUNoZWNrc3VtICsgYVZhbHVlOworICAgIHJldHVybiByZXN1bHQgKyAocmVzdWx0IDwgYUNoZWNrc3VtKTsKK30KKwordWludDE2X3QgSXA2OjpVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIGNvbnN0IHZvaWQgKmFCdWYsIHVpbnQxNl90IGFMZW5ndGgpCit7CisgICAgY29uc3QgdWludDhfdCAqYnl0ZXMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oYUJ1Zik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFMZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGFDaGVja3N1bSA9IElwNjo6VXBkYXRlQ2hlY2tzdW0oYUNoZWNrc3VtLCAoaSAmIDEpID8gYnl0ZXNbaV0gOiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYnl0ZXNbaV0gPDwgOCkpOworICAgIH0KKworICAgIHJldHVybiBhQ2hlY2tzdW07Cit9CisKK3VpbnQxNl90IElwNjo6VXBkYXRlQ2hlY2tzdW0odWludDE2X3QgYUNoZWNrc3VtLCBjb25zdCBBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICByZXR1cm4gSXA2OjpVcGRhdGVDaGVja3N1bShhQ2hlY2tzdW0sIGFBZGRyZXNzLm1GaWVsZHMubTgsIHNpemVvZihhQWRkcmVzcykpOworfQorCit1aW50MTZfdCBJcDY6OkNvbXB1dGVQc2V1ZG9oZWFkZXJDaGVja3N1bShjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24sIHVpbnQxNl90IGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJcFByb3RvIGFQcm90bykKK3sKKyAgICB1aW50MTZfdCBjaGVja3N1bTsKKworICAgIGNoZWNrc3VtID0gSXA2OjpVcGRhdGVDaGVja3N1bSgwLCBhTGVuZ3RoKTsKKyAgICBjaGVja3N1bSA9IElwNjo6VXBkYXRlQ2hlY2tzdW0oY2hlY2tzdW0sIHN0YXRpY19jYXN0PHVpbnQxNl90PihhUHJvdG8pKTsKKyAgICBjaGVja3N1bSA9IFVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhU291cmNlKTsKKyAgICBjaGVja3N1bSA9IFVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhRGVzdGluYXRpb24pOworCisgICAgcmV0dXJuIGNoZWNrc3VtOworfQorCit2b2lkIElwNjo6U2V0UmVjZWl2ZURhdGFncmFtQ2FsbGJhY2sob3RJcDZSZWNlaXZlQ2FsbGJhY2sgYUNhbGxiYWNrLCB2b2lkICphQ2FsbGJhY2tDb250ZXh0KQoreworICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2tDb250ZXh0ID0gYUNhbGxiYWNrQ29udGV4dDsKK30KKworb3RFcnJvciBJcDY6OkFkZE1wbE9wdGlvbihNZXNzYWdlICZhTWVzc2FnZSwgSGVhZGVyICZhSGVhZGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhvcEJ5SG9wSGVhZGVyIGhiaEhlYWRlcjsKKyAgICBPcHRpb25NcGwgbXBsT3B0aW9uOworICAgIE9wdGlvblBhZE4gcGFkT3B0aW9uOworCisgICAgaGJoSGVhZGVyLlNldE5leHRIZWFkZXIoYUhlYWRlci5HZXROZXh0SGVhZGVyKCkpOworICAgIGhiaEhlYWRlci5TZXRMZW5ndGgoMCk7CisgICAgbU1wbC5Jbml0T3B0aW9uKG1wbE9wdGlvbiwgYUhlYWRlci5HZXRTb3VyY2UoKSk7CisKKyAgICAvLyBNcGwgb3B0aW9uIG1heSByZXF1aXJlIHR3byBieXRlcyBwYWRkaW5nLgorICAgIGlmICgobXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkgKyBzaXplb2YoaGJoSGVhZGVyKSkgJSA4KQorICAgIHsKKyAgICAgICAgcGFkT3B0aW9uLkluaXQoMik7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKCZwYWRPcHRpb24sIHBhZE9wdGlvbi5HZXRUb3RhbExlbmd0aCgpKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlByZXBlbmQoJm1wbE9wdGlvbiwgbXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuUHJlcGVuZCgmaGJoSGVhZGVyLCBzaXplb2YoaGJoSGVhZGVyKSkpOworICAgIGFIZWFkZXIuU2V0UGF5bG9hZExlbmd0aChhSGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKSArIHNpemVvZihoYmhIZWFkZXIpICsgc2l6ZW9mKG1wbE9wdGlvbikpOworICAgIGFIZWFkZXIuU2V0TmV4dEhlYWRlcihrUHJvdG9Ib3BPcHRzKTsKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIElwNjo6QWRkVHVubmVsZWRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgdHVubmVsSGVhZGVyOworICAgIGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKnNvdXJjZTsKKyAgICBNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbyhhTWVzc2FnZUluZm8pOworCisgICAgLy8gVXNlIElQLWluLUlQIGVuY2Fwc3VsYXRpb24gKFJGQzI0NzMpIGFuZCBBTExfTVBMX0ZPUldBUkRFUlMgYWRkcmVzcy4KKyAgICBtZW1zZXQoJm1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIDAsIHNpemVvZihBZGRyZXNzKSk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZjAzKTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwZmMpOworCisgICAgdHVubmVsSGVhZGVyLkluaXQoKTsKKyAgICB0dW5uZWxIZWFkZXIuU2V0SG9wTGltaXQoc3RhdGljX2Nhc3Q8dWludDhfdD4oa0RlZmF1bHRIb3BMaW1pdCkpOworICAgIHR1bm5lbEhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKGFIZWFkZXIuR2V0UGF5bG9hZExlbmd0aCgpICsgc2l6ZW9mKHR1bm5lbEhlYWRlcikpOworICAgIHR1bm5lbEhlYWRlci5TZXREZXN0aW5hdGlvbihtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICB0dW5uZWxIZWFkZXIuU2V0TmV4dEhlYWRlcihrUHJvdG9JcDYpOworCisgICAgVmVyaWZ5T3JFeGl0KChzb3VyY2UgPSBTZWxlY3RTb3VyY2VBZGRyZXNzKG1lc3NhZ2VJbmZvKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NPVVJDRV9BRERSRVNTKTsKKworICAgIHR1bm5lbEhlYWRlci5TZXRTb3VyY2Uoc291cmNlLT5HZXRBZGRyZXNzKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZE1wbE9wdGlvbihhTWVzc2FnZSwgdHVubmVsSGVhZGVyKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLlByZXBlbmQoJnR1bm5lbEhlYWRlciwgc2l6ZW9mKHR1bm5lbEhlYWRlcikpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpJbnNlcnRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUlwNkhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNNdWx0aWNhc3QoKSAmJgorICAgICAgICAgICAgICAgICBhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuR2V0U2NvcGUoKSA+PSBBZGRyZXNzOjprUmVhbG1Mb2NhbFNjb3BlKTsKKworICAgIGlmIChhSXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNSZWFsbUxvY2FsTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZW1vdmVIZWFkZXIoc2l6ZW9mKGFJcDZIZWFkZXIpKTsKKworICAgICAgICBpZiAoYUlwNkhlYWRlci5HZXROZXh0SGVhZGVyKCkgPT0ga1Byb3RvSG9wT3B0cykKKyAgICAgICAgeworICAgICAgICAgICAgSG9wQnlIb3BIZWFkZXIgaGJoOworICAgICAgICAgICAgdWludDhfdCBoYmhMZW5ndGggPSAwOworICAgICAgICAgICAgT3B0aW9uTXBsIG1wbE9wdGlvbjsKKworICAgICAgICAgICAgLy8gcmVhZCBleGlzdGluZyBob3AtYnktaG9wIG9wdGlvbiBoZWFkZXIKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGhiaCksICZoYmgpOworICAgICAgICAgICAgaGJoTGVuZ3RoID0gKGhiaC5HZXRMZW5ndGgoKSArIDEpICogODsKKworICAgICAgICAgICAgLy8gaW5jcmVhc2UgZXhpc3RpbmcgaG9wLWJ5LWhvcCBvcHRpb24gaGVhZGVyIGxlbmd0aCBieSA4IGJ5dGVzCisgICAgICAgICAgICBoYmguU2V0TGVuZ3RoKGhiaC5HZXRMZW5ndGgoKSArIDEpOworICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoMCwgc2l6ZW9mKGhiaCksICZoYmgpOworCisgICAgICAgICAgICAvLyBtYWtlIHNwYWNlIGZvciBNUEwgT3B0aW9uICsgcGFkZGluZyBieSBzaGlmdGluZyBob3AtYnktaG9wIG9wdGlvbiBoZWFkZXIKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKE5VTEwsIDgpKTsKKyAgICAgICAgICAgIGFNZXNzYWdlLkNvcHlUbyg4LCAwLCBoYmhMZW5ndGgsIGFNZXNzYWdlKTsKKworICAgICAgICAgICAgLy8gaW5zZXJ0IE1QTCBPcHRpb24KKyAgICAgICAgICAgIG1NcGwuSW5pdE9wdGlvbihtcGxPcHRpb24sIGFJcDZIZWFkZXIuR2V0U291cmNlKCkpOworICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoaGJoTGVuZ3RoLCBtcGxPcHRpb24uR2V0VG90YWxMZW5ndGgoKSwgJm1wbE9wdGlvbik7CisKKyAgICAgICAgICAgIC8vIGluc2VydCBQYWQgT3B0aW9uIChpZiBuZWVkZWQpCisgICAgICAgICAgICBpZiAobXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkgJSA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE9wdGlvblBhZE4gcGFkT3B0aW9uOworICAgICAgICAgICAgICAgIHBhZE9wdGlvbi5Jbml0KDggLSAobXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCkgJSA4KSk7CisgICAgICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoaGJoTGVuZ3RoICsgbXBsT3B0aW9uLkdldFRvdGFsTGVuZ3RoKCksIHBhZE9wdGlvbi5HZXRUb3RhbExlbmd0aCgpLCAmcGFkT3B0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaW5jcmVhc2UgSVB2NiBQYXlsb2FkIExlbmd0aAorICAgICAgICAgICAgYUlwNkhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKGFJcDZIZWFkZXIuR2V0UGF5bG9hZExlbmd0aCgpICsgOCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkTXBsT3B0aW9uKGFNZXNzYWdlLCBhSXA2SGVhZGVyKSk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuUHJlcGVuZCgmYUlwNkhlYWRlciwgc2l6ZW9mKGFJcDZIZWFkZXIpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRUdW5uZWxlZE1wbE9wdGlvbihhTWVzc2FnZSwgYUlwNkhlYWRlciwgYU1lc3NhZ2VJbmZvKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBJcDY6OlJlbW92ZU1wbE9wdGlvbihNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgaXA2SGVhZGVyOworICAgIEhvcEJ5SG9wSGVhZGVyIGhiaDsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3QgZW5kT2Zmc2V0OworICAgIHVpbnQxNl90IG1wbE9mZnNldCA9IDA7CisgICAgdWludDhfdCBtcGxMZW5ndGggPSAwOworICAgIGJvb2wgcmVtb3ZlID0gZmFsc2U7CisKKyAgICBvZmZzZXQgPSAwOworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcik7CisgICAgb2Zmc2V0ICs9IHNpemVvZihpcDZIZWFkZXIpOworICAgIFZlcmlmeU9yRXhpdChpcDZIZWFkZXIuR2V0TmV4dEhlYWRlcigpID09IGtQcm90b0hvcE9wdHMpOworCisgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihoYmgpLCAmaGJoKTsKKyAgICBlbmRPZmZzZXQgPSBvZmZzZXQgKyAoaGJoLkdldExlbmd0aCgpICsgMSkgKiA4OworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRMZW5ndGgoKSA+PSBlbmRPZmZzZXQsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb2Zmc2V0ICs9IHNpemVvZihoYmgpOworCisgICAgd2hpbGUgKG9mZnNldCA8IGVuZE9mZnNldCkKKyAgICB7CisgICAgICAgIE9wdGlvbkhlYWRlciBvcHRpb247CisKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihvcHRpb24pLCAmb3B0aW9uKTsKKworICAgICAgICBzd2l0Y2ggKG9wdGlvbi5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPcHRpb25NcGw6OmtUeXBlOgorICAgICAgICAgICAgbXBsT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgbXBsTGVuZ3RoID0gb3B0aW9uLkdldExlbmd0aCgpOworCisgICAgICAgICAgICBpZiAobXBsT2Zmc2V0ID09IHNpemVvZihpcDZIZWFkZXIpICsgc2l6ZW9mKGhiaCkgJiYgaGJoLkdldExlbmd0aCgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZmlyc3QgYW5kIG9ubHkgSVB2NiBPcHRpb24sIHJlbW92ZSBJUHY2IEhCSCBPcHRpb24gaGVhZGVyCisgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1wbE9mZnNldCArIDggPT0gZW5kT2Zmc2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGxhc3QgSVB2NiBPcHRpb24sIHJlbW92ZSBsYXN0IDggYnl0ZXMKKyAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9wdGlvblBhZDE6OmtUeXBlOgorICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihPcHRpb25QYWQxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT3B0aW9uUGFkTjo6a1R5cGU6CisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG9wdGlvbikgKyBvcHRpb24uR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gZW5jb3VudGVyZWQgYW5vdGhlciBvcHRpb24sIG5vdyBqdXN0IHJlcGxhY2UgTVBMIE9wdGlvbiB3aXRoIFBhZE4KKyAgICAgICAgICAgIHJlbW92ZSA9IGZhbHNlOworICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihvcHRpb24pICsgb3B0aW9uLkdldExlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB2ZXJpZnkgdGhhdCBJUHY2IE9wdGlvbnMgaGVhZGVyIGlzIHByb3Blcmx5IGZvcm1lZAorICAgIFZlcmlmeU9yRXhpdChvZmZzZXQgPT0gZW5kT2Zmc2V0LCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChyZW1vdmUpCisgICAgeworICAgICAgICAvLyBsYXN0IElQdjYgT3B0aW9uLCBzaHJpbmsgSEJIIE9wdGlvbiBoZWFkZXIKKyAgICAgICAgdWludDhfdCBidWZbOF07CisKKyAgICAgICAgb2Zmc2V0ID0gZW5kT2Zmc2V0IC0gc2l6ZW9mKGJ1Zik7CisKKyAgICAgICAgd2hpbGUgKG9mZnNldCA+PSBzaXplb2YoYnVmKSkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQgLSBzaXplb2YoYnVmKSwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisgICAgICAgICAgICBhTWVzc2FnZS5Xcml0ZShvZmZzZXQsIHNpemVvZihidWYpLCBidWYpOworICAgICAgICAgICAgb2Zmc2V0IC09IHNpemVvZihidWYpOworICAgICAgICB9CisKKyAgICAgICAgYU1lc3NhZ2UuUmVtb3ZlSGVhZGVyKHNpemVvZihidWYpKTsKKworICAgICAgICBpZiAobXBsT2Zmc2V0ID09IHNpemVvZihpcDZIZWFkZXIpICsgc2l6ZW9mKGhiaCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBlbnRpcmUgSEJIIGhlYWRlcgorICAgICAgICAgICAgaXA2SGVhZGVyLlNldE5leHRIZWFkZXIoaGJoLkdldE5leHRIZWFkZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyB1cGRhdGUgSEJIIGhlYWRlciBsZW5ndGgKKyAgICAgICAgICAgIGhiaC5TZXRMZW5ndGgoaGJoLkdldExlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhTWVzc2FnZS5Xcml0ZShzaXplb2YoaXA2SGVhZGVyKSwgc2l6ZW9mKGhiaCksICZoYmgpOworICAgICAgICB9CisKKyAgICAgICAgaXA2SGVhZGVyLlNldFBheWxvYWRMZW5ndGgoaXA2SGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKSAtIHNpemVvZihidWYpKTsKKyAgICAgICAgYU1lc3NhZ2UuV3JpdGUoMCwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpOworICAgIH0KKyAgICBlbHNlIGlmIChtcGxPZmZzZXQgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIHJlcGxhY2UgTVBMIE9wdGlvbiB3aXRoIFBhZE4gT3B0aW9uCisgICAgICAgIE9wdGlvblBhZE4gcGFkT3B0aW9uOworCisgICAgICAgIHBhZE9wdGlvbi5Jbml0KHNpemVvZihPcHRpb25IZWFkZXIpICsgbXBsTGVuZ3RoKTsKKyAgICAgICAgYU1lc3NhZ2UuV3JpdGUobXBsT2Zmc2V0LCBwYWRPcHRpb24uR2V0VG90YWxMZW5ndGgoKSwgJnBhZE9wdGlvbik7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBJcDY6OkVucXVldWVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBtU2VuZFF1ZXVlLkVucXVldWUoYU1lc3NhZ2UpOworICAgIG1TZW5kUXVldWVUYXNrLlBvc3QoKTsKK30KKworb3RFcnJvciBJcDY6OlNlbmREYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgSXBQcm90byBhSXBQcm90bykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgaGVhZGVyOworICAgIHVpbnQxNl90IHBheWxvYWRMZW5ndGggPSBhTWVzc2FnZS5HZXRMZW5ndGgoKTsKKyAgICB1aW50MTZfdCBjaGVja3N1bTsKKyAgICBjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICpzb3VyY2U7CisKKyAgICBoZWFkZXIuSW5pdCgpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKHBheWxvYWRMZW5ndGgpOworICAgIGhlYWRlci5TZXROZXh0SGVhZGVyKGFJcFByb3RvKTsKKyAgICBoZWFkZXIuU2V0SG9wTGltaXQoYU1lc3NhZ2VJbmZvLm1Ib3BMaW1pdCA/IGFNZXNzYWdlSW5mby5tSG9wTGltaXQgOiBzdGF0aWNfY2FzdDx1aW50OF90PihrRGVmYXVsdEhvcExpbWl0KSk7CisKKyAgICBpZiAoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNVbnNwZWNpZmllZCgpIHx8CisgICAgICAgIGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKHNvdXJjZSA9IFNlbGVjdFNvdXJjZUFkZHJlc3MoYU1lc3NhZ2VJbmZvKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TT1VSQ0VfQUREUkVTUyk7CisgICAgICAgIGhlYWRlci5TZXRTb3VyY2Uoc291cmNlLT5HZXRBZGRyZXNzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkZXIuU2V0U291cmNlKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpKTsKKyAgICB9CisKKyAgICBoZWFkZXIuU2V0RGVzdGluYXRpb24oYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworCisgICAgaWYgKGhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsKCkgfHwgaGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNMaW5rTG9jYWxNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZUluZm8uR2V0SW50ZXJmYWNlSWQoKSAhPSAwLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgIH0KKworICAgIGlmIChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5Jc1JlYWxtTG9jYWxNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRNcGxPcHRpb24oYU1lc3NhZ2UsIGhlYWRlcikpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5QcmVwZW5kKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKSk7CisKKyAgICBpZiAoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuSXNNdWx0aWNhc3QoKSAmJgorICAgICAgICBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5HZXRTY29wZSgpID4gQWRkcmVzczo6a1JlYWxtTG9jYWxTY29wZSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGRUdW5uZWxlZE1wbE9wdGlvbihhTWVzc2FnZSwgaGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKyAgICB9CisKKyAgICAvLyBjb21wdXRlIGNoZWNrc3VtCisgICAgY2hlY2tzdW0gPSBDb21wdXRlUHNldWRvaGVhZGVyQ2hlY2tzdW0oaGVhZGVyLkdldFNvdXJjZSgpLCBoZWFkZXIuR2V0RGVzdGluYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkTGVuZ3RoLCBhSXBQcm90byk7CisKKyAgICBzd2l0Y2ggKGFJcFByb3RvKQorICAgIHsKKyAgICBjYXNlIGtQcm90b1VkcDoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1VZHAuVXBkYXRlQ2hlY2tzdW0oYU1lc3NhZ2UsIGNoZWNrc3VtKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1JY21wLlVwZGF0ZUNoZWNrc3VtKGFNZXNzYWdlLCBjaGVja3N1bSkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuU2V0SW50ZXJmYWNlSWQoYU1lc3NhZ2VJbmZvLkdldEludGVyZmFjZUlkKCkpOworICAgICAgICBFbnF1ZXVlRGF0YWdyYW0oYU1lc3NhZ2UpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBJcDY6OkhhbmRsZVNlbmRRdWV1ZShUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBHZXRPd25lcihhVGFza2xldCkuSGFuZGxlU2VuZFF1ZXVlKCk7Cit9CisKK3ZvaWQgSXA2OjpIYW5kbGVTZW5kUXVldWUodm9pZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgd2hpbGUgKChtZXNzYWdlID0gbVNlbmRRdWV1ZS5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1lc3NhZ2UpOworICAgICAgICBIYW5kbGVEYXRhZ3JhbSgqbWVzc2FnZSwgTlVMTCwgbWVzc2FnZS0+R2V0SW50ZXJmYWNlSWQoKSwgTlVMTCwgZmFsc2UpOworICAgIH0KK30KKworb3RFcnJvciBJcDY6OkhhbmRsZU9wdGlvbnMoTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgYm9vbCAmYUZvcndhcmQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSG9wQnlIb3BIZWFkZXIgaGJoSGVhZGVyOworICAgIE9wdGlvbkhlYWRlciBvcHRpb25IZWFkZXI7CisgICAgdWludDE2X3QgZW5kT2Zmc2V0OworCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihoYmhIZWFkZXIpLCAmaGJoSGVhZGVyKSA9PSBzaXplb2YoaGJoSGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICBlbmRPZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKSArIChoYmhIZWFkZXIuR2V0TGVuZ3RoKCkgKyAxKSAqIDg7CisKKyAgICBWZXJpZnlPckV4aXQoZW5kT2Zmc2V0IDw9IGFNZXNzYWdlLkdldExlbmd0aCgpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2Yob3B0aW9uSGVhZGVyKSk7CisKKyAgICB3aGlsZSAoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgPCBlbmRPZmZzZXQpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKG9wdGlvbkhlYWRlciksICZvcHRpb25IZWFkZXIpID09IHNpemVvZihvcHRpb25IZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgICAgICBpZiAob3B0aW9uSGVhZGVyLkdldFR5cGUoKSA9PSBPcHRpb25QYWQxOjprVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoT3B0aW9uUGFkMSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgKyBzaXplb2Yob3B0aW9uSGVhZGVyKSArIG9wdGlvbkhlYWRlci5HZXRMZW5ndGgoKSA8PSBlbmRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIHN3aXRjaCAob3B0aW9uSGVhZGVyLkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE9wdGlvbk1wbDo6a1R5cGU6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbU1wbC5Qcm9jZXNzT3B0aW9uKGFNZXNzYWdlLCBhSGVhZGVyLkdldFNvdXJjZSgpLCBhRm9yd2FyZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uSGVhZGVyLkdldEFjdGlvbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBPcHRpb25IZWFkZXI6OmtBY3Rpb25Ta2lwOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9wdGlvbkhlYWRlcjo6a0FjdGlvbkRpc2NhcmQ6CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgICAgICBjYXNlIE9wdGlvbkhlYWRlcjo6a0FjdGlvbkZvcmNlSWNtcDoKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBzZW5kIGljbXAgZXJyb3IKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgIGNhc2UgT3B0aW9uSGVhZGVyOjprQWN0aW9uSWNtcDoKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBzZW5kIGljbXAgZXJyb3IKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihvcHRpb25IZWFkZXIpICsgb3B0aW9uSGVhZGVyLkdldExlbmd0aCgpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIElwNjo6SGFuZGxlRnJhZ21lbnQoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgRnJhZ21lbnRIZWFkZXIgZnJhZ21lbnRIZWFkZXI7CisKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGZyYWdtZW50SGVhZGVyKSwgJmZyYWdtZW50SGVhZGVyKSA9PSBzaXplb2YoZnJhZ21lbnRIZWFkZXIpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgVmVyaWZ5T3JFeGl0KGZyYWdtZW50SGVhZGVyLkdldE9mZnNldCgpID09IDAgJiYgZnJhZ21lbnRIZWFkZXIuSXNNb3JlRmxhZ1NldCgpID09IGZhbHNlLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoZnJhZ21lbnRIZWFkZXIpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpIYW5kbGVFeHRlbnNpb25IZWFkZXJzKE1lc3NhZ2UgJmFNZXNzYWdlLCBIZWFkZXIgJmFIZWFkZXIsIHVpbnQ4X3QgJmFOZXh0SGVhZGVyLCBib29sIGFGb3J3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhUmVjZWl2ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBFeHRlbnNpb25IZWFkZXIgZXh0SGVhZGVyOworCisgICAgd2hpbGUgKGFSZWNlaXZlID09IHRydWUgfHwgYU5leHRIZWFkZXIgPT0ga1Byb3RvSG9wT3B0cykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoZXh0SGVhZGVyKSwgJmV4dEhlYWRlcikgPT0gc2l6ZW9mKGV4dEhlYWRlciksCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIHN3aXRjaCAoYU5leHRIZWFkZXIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrUHJvdG9Ib3BPcHRzOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEhhbmRsZU9wdGlvbnMoYU1lc3NhZ2UsIGFIZWFkZXIsIGFGb3J3YXJkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtQcm90b0ZyYWdtZW50OgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEhhbmRsZUZyYWdtZW50KGFNZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtQcm90b0RzdE9wdHM6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gSGFuZGxlT3B0aW9ucyhhTWVzc2FnZSwgYUhlYWRlciwgYUZvcndhcmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1Byb3RvSXA2OgorICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2Uga1Byb3RvUm91dGluZzoKKyAgICAgICAgY2FzZSBrUHJvdG9Ob25lOgorICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBhTmV4dEhlYWRlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGV4dEhlYWRlci5HZXROZXh0SGVhZGVyKCkpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpIYW5kbGVQYXlsb2FkKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50OF90IGFJcFByb3RvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgc3dpdGNoIChhSXBQcm90bykKKyAgICB7CisgICAgY2FzZSBrUHJvdG9VZHA6CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBtVWRwLkhhbmRsZU1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IG1JY21wLkhhbmRsZU1lc3NhZ2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpQcm9jZXNzUmVjZWl2ZUNhbGxiYWNrKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50OF90IGFJcFByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRnJvbU5jcEhvc3QpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHkgPSBOVUxMOworCisgICAgVmVyaWZ5T3JFeGl0KGFGcm9tTmNwSG9zdCA9PSBmYWxzZSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICBWZXJpZnlPckV4aXQobVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworCisgICAgaWYgKG1Jc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkKQorICAgIHsKKyAgICAgICAgLy8gZG8gbm90IHBhc3MgbWVzc2FnZXMgc2VudCB0by9mcm9tIGFuIFJMT0MKKyAgICAgICAgVmVyaWZ5T3JFeGl0KCFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc1JvdXRpbmdMb2NhdG9yKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICFhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5Jc1JvdXRpbmdMb2NhdG9yKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0FueWNhc3RSb3V0aW5nTG9jYXRvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAhYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuSXNBbnljYXN0Um91dGluZ0xvY2F0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworCisgICAgICAgIHN3aXRjaCAoYUlwUHJvdG8pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgICAgIGlmIChtSWNtcC5Jc0VjaG9FbmFibGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSWNtcEhlYWRlciBpY21wOworICAgICAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihpY21wKSwgJmljbXApOworCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IHBhc3MgSUNNUCBFY2hvIFJlcXVlc3QgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoaWNtcC5HZXRUeXBlKCkgIT0gSWNtcEhlYWRlcjo6a1R5cGVFY2hvUmVxdWVzdCwgZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1Byb3RvVWRwOgorICAgICAgICAgICAgaWYgKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTGlua0xvY2FsKCkgfHwKKyAgICAgICAgICAgICAgICBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0xpbmtMb2NhbE11bHRpY2FzdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVkcEhlYWRlciB1ZHA7CisgICAgICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKHVkcCksICZ1ZHApOworCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IHBhc3MgTUxFIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHVkcC5HZXREZXN0aW5hdGlvblBvcnQoKSAhPSBNbGU6OmtVZHBQb3J0LCBlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIGRhdGFncmFtIHRvIHBhc3MgdG8gaG9zdAorICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFJlbW92ZU1wbE9wdGlvbigqbWVzc2FnZUNvcHkpOworICAgIG1SZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjayhtZXNzYWdlQ29weSwgbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrQ29udGV4dCk7CisKK2V4aXQ6CisKKyAgICBzd2l0Y2ggKGVycm9yKQorICAgIHsKKyAgICBjYXNlIE9UX0VSUk9SX05PX0JVRlM6CisgICAgICAgIG90TG9nSW5mb0lwNihHZXRJbnN0YW5jZSgpLCAiRmFpbGVkIHRvIHBhc3MgdXAgbWVzc2FnZSAobGVuOiAlZCkgdG8gaG9zdCAtIG91dCBvZiBtZXNzYWdlIGJ1ZmZlci4iLAorICAgICAgICAgICAgICAgICAgICAgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgb3RMb2dJbmZvSXA2KEdldEluc3RhbmNlKCksICJEcm9wcGluZyBtZXNzYWdlIChsZW46ICVkKSBmcm9tIGxvY2FsIGhvc3Qgc2luY2UgbmV4dCBob3AgaXMgdGhlIGhvc3QuIiwKKyAgICAgICAgICAgICAgICAgICAgIGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgSXA2OjpTZW5kUmF3KE1lc3NhZ2UgJmFNZXNzYWdlLCBpbnQ4X3QgYUludGVyZmFjZUlkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEhlYWRlciBoZWFkZXI7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICAvLyBjaGVjayBhTWVzc2FnZSBsZW5ndGgKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaGVhZGVyKSwgJmhlYWRlcikgPT0gc2l6ZW9mKGhlYWRlciksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihoZWFkZXIuR2V0U291cmNlKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKGhlYWRlci5HZXREZXN0aW5hdGlvbigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpOworICAgIG1lc3NhZ2VJbmZvLlNldEhvcExpbWl0KGhlYWRlci5HZXRIb3BMaW1pdCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRMaW5rSW5mbyhOVUxMKTsKKworICAgIGlmIChoZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEluc2VydE1wbE9wdGlvbihhTWVzc2FnZSwgaGVhZGVyLCBtZXNzYWdlSW5mbykpOworICAgIH0KKworICAgIGVycm9yID0gSGFuZGxlRGF0YWdyYW0oYU1lc3NhZ2UsIE5VTEwsIGFJbnRlcmZhY2VJZCwgTlVMTCwgdHJ1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIElwNjo6SGFuZGxlRGF0YWdyYW0oTWVzc2FnZSAmYU1lc3NhZ2UsIE5ldGlmICphTmV0aWYsIGludDhfdCBhSW50ZXJmYWNlSWQsIGNvbnN0IHZvaWQgKmFMaW5rTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRnJvbU5jcEhvc3QpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgSGVhZGVyIGhlYWRlcjsKKyAgICB1aW50MTZfdCBwYXlsb2FkTGVuZ3RoOworICAgIGJvb2wgcmVjZWl2ZSA9IGZhbHNlOworICAgIGJvb2wgZm9yd2FyZCA9IGZhbHNlOworICAgIGJvb2wgdHVubmVsID0gZmFsc2U7CisgICAgYm9vbCBtdWx0aWNhc3RQcm9taXNjdW91cyA9IGZhbHNlOworICAgIHVpbnQ4X3QgbmV4dEhlYWRlcjsKKyAgICB1aW50OF90IGhvcExpbWl0OworICAgIGludDhfdCBmb3J3YXJkSW50ZXJmYWNlSWQ7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisjaWYgMAorICAgIHVpbnQ4X3QgYnVmWzEwMjRdOworICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CisgICAgZHVtcCgiaGFuZGxlIGRhdGFncmFtIiwgYnVmLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSk7CisjZW5kaWYKKworICAgIC8vIGNoZWNrIGFNZXNzYWdlIGxlbmd0aAorICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKDAsIHNpemVvZihoZWFkZXIpLCAmaGVhZGVyKSA9PSBzaXplb2YoaGVhZGVyKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICBwYXlsb2FkTGVuZ3RoID0gaGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKTsKKworICAgIC8vIGNoZWNrIFZlcnNpb24KKyAgICBWZXJpZnlPckV4aXQoaGVhZGVyLklzVmVyc2lvbjYoKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIC8vIGNoZWNrIFBheWxvYWQgTGVuZ3RoCisgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihoZWFkZXIpICsgcGF5bG9hZExlbmd0aCA9PSBhTWVzc2FnZS5HZXRMZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgICBzaXplb2YoaGVhZGVyKSArIHBheWxvYWRMZW5ndGggPD0gSXA2OjprTWF4RGF0YWdyYW1MZW5ndGgsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihoZWFkZXIuR2V0U291cmNlKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKGhlYWRlci5HZXREZXN0aW5hdGlvbigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpOworICAgIG1lc3NhZ2VJbmZvLlNldEhvcExpbWl0KGhlYWRlci5HZXRIb3BMaW1pdCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRMaW5rSW5mbyhhTGlua01lc3NhZ2VJbmZvKTsKKworICAgIC8vIGRldGVybWluZSBkZXN0aW5hdGlvbiBvZiBwYWNrZXQKKyAgICBpZiAoaGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIGlmIChhTmV0aWYgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFOZXRpZi0+SXNNdWx0aWNhc3RTdWJzY3JpYmVkKGhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWNlaXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFOZXRpZi0+SXNNdWx0aWNhc3RQcm9taXNjdW91c0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtdWx0aWNhc3RQcm9taXNjdW91cyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3J3YXJkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoSXNVbmljYXN0QWRkcmVzcyhoZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY2VpdmUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFoZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3J3YXJkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhTmV0aWYgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yd2FyZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhTWVzc2FnZS5TZXRJbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpOworICAgIGFNZXNzYWdlLlNldE9mZnNldChzaXplb2YoaGVhZGVyKSk7CisKKyAgICAvLyBwcm9jZXNzIElQdjYgRXh0ZW5zaW9uIEhlYWRlcnMKKyAgICBuZXh0SGVhZGVyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaGVhZGVyLkdldE5leHRIZWFkZXIoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEhhbmRsZUV4dGVuc2lvbkhlYWRlcnMoYU1lc3NhZ2UsIGhlYWRlciwgbmV4dEhlYWRlciwgZm9yd2FyZCwgcmVjZWl2ZSkpOworCisgICAgaWYgKCFtRm9yd2FyZGluZ0VuYWJsZWQgJiYgYU5ldGlmICE9IE5VTEwpCisgICAgeworICAgICAgICBmb3J3YXJkID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gcHJvY2VzcyBJUHY2IFBheWxvYWQKKyAgICBpZiAocmVjZWl2ZSkKKyAgICB7CisgICAgICAgIGlmIChuZXh0SGVhZGVyID09IGtQcm90b0lwNikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGVuY2Fwc3VsYXRpbmcgaGVhZGVyLgorICAgICAgICAgICAgYU1lc3NhZ2UuUmVtb3ZlSGVhZGVyKGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKworICAgICAgICAgICAgSGFuZGxlRGF0YWdyYW0oYU1lc3NhZ2UsIGFOZXRpZiwgYUludGVyZmFjZUlkLCBhTGlua01lc3NhZ2VJbmZvLCBhRnJvbU5jcEhvc3QpOworICAgICAgICAgICAgRXhpdE5vdyh0dW5uZWwgPSB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIFByb2Nlc3NSZWNlaXZlQ2FsbGJhY2soYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBuZXh0SGVhZGVyLCBhRnJvbU5jcEhvc3QpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBIYW5kbGVQYXlsb2FkKGFNZXNzYWdlLCBtZXNzYWdlSW5mbywgbmV4dEhlYWRlcikpOworICAgIH0KKyAgICBlbHNlIGlmIChtdWx0aWNhc3RQcm9taXNjdW91cykKKyAgICB7CisgICAgICAgIFByb2Nlc3NSZWNlaXZlQ2FsbGJhY2soYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBuZXh0SGVhZGVyLCBhRnJvbU5jcEhvc3QpOworICAgIH0KKworICAgIGlmIChmb3J3YXJkKQorICAgIHsKKyAgICAgICAgZm9yd2FyZEludGVyZmFjZUlkID0gRmluZEZvcndhcmRJbnRlcmZhY2VJZChtZXNzYWdlSW5mbyk7CisKKyAgICAgICAgaWYgKGZvcndhcmRJbnRlcmZhY2VJZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0cnkgcGFzc2luZyB0byBob3N0CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUHJvY2Vzc1JlY2VpdmVDYWxsYmFjayhhTWVzc2FnZSwgbWVzc2FnZUluZm8sIG5leHRIZWFkZXIsIGFGcm9tTmNwSG9zdCkpOworCisgICAgICAgICAgICAvLyB0aGUgY2FsbGVyIHRyYW5zZmVycyBjdXN0b2R5IGluIHRoZSBzdWNjZXNzIGNhc2UsIHNvIGZyZWUgdGhlIGFNZXNzYWdlIGhlcmUKKyAgICAgICAgICAgIGFNZXNzYWdlLkZyZWUoKTsKKworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFOZXRpZiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBoZWFkZXIuU2V0SG9wTGltaXQoaGVhZGVyLkdldEhvcExpbWl0KCkgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoZWFkZXIuR2V0SG9wTGltaXQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBzZW5kIHRpbWUgZXhjZWVkZWQKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhvcExpbWl0ID0gaGVhZGVyLkdldEhvcExpbWl0KCk7CisgICAgICAgICAgICBhTWVzc2FnZS5Xcml0ZShIZWFkZXI6OkdldEhvcExpbWl0T2Zmc2V0KCksIEhlYWRlcjo6R2V0SG9wTGltaXRTaXplKCksICZob3BMaW1pdCk7CisKKyAgICAgICAgICAgIC8vIHN1Ym1pdCBhTWVzc2FnZSB0byBpbnRlcmZhY2UKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgoYU5ldGlmID0gR2V0TmV0aWZCeUlkKGZvcndhcmRJbnRlcmZhY2VJZCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFOZXRpZi0+U2VuZE1lc3NhZ2UoYU1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIGlmICghdHVubmVsICYmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FIHx8ICFmb3J3YXJkKSkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLkZyZWUoKTsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2ludDhfdCBJcDY6OkZpbmRGb3J3YXJkSW50ZXJmYWNlSWQoY29uc3QgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBpbnQ4X3QgaW50ZXJmYWNlSWQ7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgaWYgKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICAvLyBtdWx0aWNhc3QKKyAgICAgICAgaW50ZXJmYWNlSWQgPSBhTWVzc2FnZUluZm8ubUludGVyZmFjZUlkOworICAgIH0KKyAgICBlbHNlIGlmIChhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0xpbmtMb2NhbCgpKQorICAgIHsKKyAgICAgICAgLy8gb24tbGluayBsaW5rLWxvY2FsIGFkZHJlc3MKKyAgICAgICAgaW50ZXJmYWNlSWQgPSBhTWVzc2FnZUluZm8ubUludGVyZmFjZUlkOworICAgIH0KKyAgICBlbHNlIGlmICgoaW50ZXJmYWNlSWQgPSBHZXRPbkxpbmtOZXRpZihhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSkpID4gMCkKKyAgICB7CisgICAgICAgIC8vIG9uLWxpbmsgZ2xvYmFsIGFkZHJlc3MKKyAgICAgICAgOworICAgIH0KKyAgICBlbHNlIGlmICgoaW50ZXJmYWNlSWQgPSBtUm91dGVzLkxvb2t1cChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpKSA+IDApCisgICAgeworICAgICAgICAvLyByb3V0ZQorICAgICAgICA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludGVyZmFjZUlkID0gMDsKKyAgICB9CisKKyAgICBvdExvZ0Z1bmNFeGl0KCk7CisKKyAgICByZXR1cm4gaW50ZXJmYWNlSWQ7Cit9CisKK290RXJyb3IgSXA2OjpBZGROZXRpZihOZXRpZiAmYU5ldGlmKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5ldGlmICpuZXRpZjsKKworICAgIGlmIChtTmV0aWZMaXN0SGVhZCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgbU5ldGlmTGlzdEhlYWQgPSAmYU5ldGlmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOworCisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZXRpZiA9PSAmYU5ldGlmIHx8IG5ldGlmLT5tSW50ZXJmYWNlSWQgPT0gYU5ldGlmLm1JbnRlcmZhY2VJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG5ldGlmLT5tTmV4dCk7CisKKyAgICAgICAgbmV0aWYtPm1OZXh0ID0gJmFOZXRpZjsKKyAgICB9CisKKyAgICBhTmV0aWYubU5leHQgPSBOVUxMOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBJcDY6OlJlbW92ZU5ldGlmKE5ldGlmICZhTmV0aWYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIFZlcmlmeU9yRXhpdChtTmV0aWZMaXN0SGVhZCAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBpZiAobU5ldGlmTGlzdEhlYWQgPT0gJmFOZXRpZikKKyAgICB7CisgICAgICAgIG1OZXRpZkxpc3RIZWFkID0gYU5ldGlmLm1OZXh0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKE5ldGlmICpuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOyBuZXRpZi0+bU5leHQ7IG5ldGlmID0gbmV0aWYtPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmV0aWYtPm1OZXh0ICE9ICZhTmV0aWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ldGlmLT5tTmV4dCA9IGFOZXRpZi5tTmV4dDsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYU5ldGlmLm1OZXh0ID0gTlVMTDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK05ldGlmICpJcDY6OkdldE5ldGlmQnlJZChpbnQ4X3QgYUludGVyZmFjZUlkKQoreworICAgIE5ldGlmICpuZXRpZjsKKworICAgIGZvciAobmV0aWYgPSBtTmV0aWZMaXN0SGVhZDsgbmV0aWY7IG5ldGlmID0gbmV0aWYtPm1OZXh0KQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLT5HZXRJbnRlcmZhY2VJZCgpID09IGFJbnRlcmZhY2VJZCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBuZXRpZjsKK30KKworYm9vbCBJcDY6OklzVW5pY2FzdEFkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBmb3IgKE5ldGlmICpuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOyBuZXRpZjsgbmV0aWYgPSBuZXRpZi0+bU5leHQpCisgICAgeworICAgICAgICBydmFsID0gbmV0aWYtPklzVW5pY2FzdEFkZHJlc3MoYUFkZHJlc3MpOworCisgICAgICAgIGlmIChydmFsKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2NvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKklwNjo6U2VsZWN0U291cmNlQWRkcmVzcyhNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIEFkZHJlc3MgKmRlc3RpbmF0aW9uID0gJmFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpOworICAgIGludCBpbnRlcmZhY2VJZCA9IGFNZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQ7CisgICAgY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAqcnZhbEFkZHIgPSBOVUxMOworICAgIGNvbnN0IEFkZHJlc3MgKmNhbmRpZGF0ZUFkZHI7CisgICAgaW50OF90IGNhbmRpZGF0ZUlkOworICAgIGludDhfdCBydmFsSWZhY2UgPSAwOworICAgIHVpbnQ4X3QgcnZhbFByZWZpeE1hdGNoZWQgPSAwOworICAgIHVpbnQ4X3QgZGVzdGluYXRpb25TY29wZSA9IGRlc3RpbmF0aW9uLT5HZXRTY29wZSgpOworCisgICAgZm9yIChOZXRpZiAqbmV0aWYgPSBHZXROZXRpZkxpc3QoKTsgbmV0aWY7IG5ldGlmID0gbmV0aWYtPm1OZXh0KQorICAgIHsKKyAgICAgICAgY2FuZGlkYXRlSWQgPSBuZXRpZi0+R2V0SW50ZXJmYWNlSWQoKTsKKworICAgICAgICBpZiAoZGVzdGluYXRpb24tPklzTGlua0xvY2FsKCkgfHwgZGVzdGluYXRpb24tPklzTXVsdGljYXN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VJZCAhPSBjYW5kaWRhdGVJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAqYWRkciA9IG5ldGlmLT5tVW5pY2FzdEFkZHJlc3NlczsgYWRkcjsgYWRkciA9IGFkZHItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCBvdmVycmlkZVNjb3BlOworICAgICAgICAgICAgdWludDhfdCBjYW5kaWRhdGVQcmVmaXhNYXRjaGVkOworCisgICAgICAgICAgICBjYW5kaWRhdGVBZGRyID0gJmFkZHItPkdldEFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZVByZWZpeE1hdGNoZWQgPSBkZXN0aW5hdGlvbi0+UHJlZml4TWF0Y2goKmNhbmRpZGF0ZUFkZHIpOworICAgICAgICAgICAgb3ZlcnJpZGVTY29wZSA9IChjYW5kaWRhdGVQcmVmaXhNYXRjaGVkID49IGFkZHItPm1QcmVmaXhMZW5ndGgpID8gYWRkci0+R2V0U2NvcGUoKSA6IGRlc3RpbmF0aW9uU2NvcGU7CisKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVBZGRyLT5Jc0FueWNhc3RSb3V0aW5nTG9jYXRvcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvbid0IHVzZSBhbnljYXN0IGFkZHJlc3MgYXMgc291cmNlIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChydmFsQWRkciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgMDogUHJlZmVyIGFueSBhZGRyZXNzCisgICAgICAgICAgICAgICAgcnZhbEFkZHIgPSBhZGRyOworICAgICAgICAgICAgICAgIHJ2YWxJZmFjZSA9IGNhbmRpZGF0ZUlkOworICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCpjYW5kaWRhdGVBZGRyID09ICpkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDE6IFByZWZlciBzYW1lIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYWRkci0+R2V0U2NvcGUoKSA8IHJ2YWxBZGRyLT5HZXRTY29wZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgMjogUHJlZmVyIGFwcHJvcHJpYXRlIHNjb3BlCisgICAgICAgICAgICAgICAgaWYgKGFkZHItPkdldFNjb3BlKCkgPj0gb3ZlcnJpZGVTY29wZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxBZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhZGRyLT5HZXRTY29wZSgpID4gcnZhbEFkZHItPkdldFNjb3BlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJ2YWxBZGRyLT5HZXRTY29wZSgpIDwgb3ZlcnJpZGVTY29wZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxBZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChydmFsQWRkci0+R2V0U2NvcGUoKSA9PSBBZGRyZXNzOjprUmVhbG1Mb2NhbFNjb3BlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgcnVsZTogUHJlZmVyIGFwcHJvcHJpYXRlIHJlYWxtIGxvY2FsIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVTY29wZSA+IEFkZHJlc3M6OmtSZWFsbUxvY2FsU2NvcGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocnZhbEFkZHItPkdldEFkZHJlc3MoKS5Jc1JvdXRpbmdMb2NhdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWZlciBFSUQgaWYgZGVzdGluYXRpb24gaXMgbm90IHJlYWxtIGxvY2FsLgorICAgICAgICAgICAgICAgICAgICAgICAgcnZhbEFkZHIgPSBhZGRyOworICAgICAgICAgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBydmFsUHJlZml4TWF0Y2hlZCA9IGNhbmRpZGF0ZVByZWZpeE1hdGNoZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUFkZHItPklzUm91dGluZ0xvY2F0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZmVyIFJMT0MgaWYgZGVzdGluYXRpb24gaXMgcmVhbG0gbG9jYWwuCisgICAgICAgICAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICBydmFsSWZhY2UgPSBjYW5kaWRhdGVJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWxQcmVmaXhNYXRjaGVkID0gY2FuZGlkYXRlUHJlZml4TWF0Y2hlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFkZHItPm1QcmVmZXJyZWQgJiYgIXJ2YWxBZGRyLT5tUHJlZmVycmVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgMzogQXZvaWQgZGVwcmVjYXRlZCBhZGRyZXNzZXMKKyAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgcnZhbFByZWZpeE1hdGNoZWQgPSBjYW5kaWRhdGVQcmVmaXhNYXRjaGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYU1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCAhPSAwICYmIGFNZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQgPT0gY2FuZGlkYXRlSWQgJiYKKyAgICAgICAgICAgICAgICAgICAgIHJ2YWxJZmFjZSAhPSBjYW5kaWRhdGVJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDQ6IFByZWZlciBob21lIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDU6IFByZWZlciBvdXRnb2luZyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICBydmFsQWRkciA9IGFkZHI7CisgICAgICAgICAgICAgICAgcnZhbElmYWNlID0gY2FuZGlkYXRlSWQ7CisgICAgICAgICAgICAgICAgcnZhbFByZWZpeE1hdGNoZWQgPSBjYW5kaWRhdGVQcmVmaXhNYXRjaGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2FuZGlkYXRlUHJlZml4TWF0Y2hlZCA+IHJ2YWxQcmVmaXhNYXRjaGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJ1bGUgNjogUHJlZmVyIG1hdGNoaW5nIGxhYmVsCisgICAgICAgICAgICAgICAgLy8gUnVsZSA3OiBQcmVmZXIgcHVibGljIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAvLyBSdWxlIDg6IFVzZSBsb25nZXN0IHByZWZpeCBtYXRjaGluZworICAgICAgICAgICAgICAgIHJ2YWxBZGRyID0gYWRkcjsKKyAgICAgICAgICAgICAgICBydmFsSWZhY2UgPSBjYW5kaWRhdGVJZDsKKyAgICAgICAgICAgICAgICBydmFsUHJlZml4TWF0Y2hlZCA9IGNhbmRpZGF0ZVByZWZpeE1hdGNoZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgYU1lc3NhZ2VJbmZvLm1JbnRlcmZhY2VJZCA9IHJ2YWxJZmFjZTsKKyAgICByZXR1cm4gcnZhbEFkZHI7Cit9CisKK2ludDhfdCBJcDY6OkdldE9uTGlua05ldGlmKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIGludDhfdCBydmFsID0gLTE7CisKKyAgICBmb3IgKE5ldGlmICpuZXRpZiA9IG1OZXRpZkxpc3RIZWFkOyBuZXRpZjsgbmV0aWYgPSBuZXRpZi0+bU5leHQpCisgICAgeworICAgICAgICBmb3IgKGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKmN1ciA9IG5ldGlmLT5tVW5pY2FzdEFkZHJlc3NlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1ci0+R2V0QWRkcmVzcygpLlByZWZpeE1hdGNoKGFBZGRyZXNzKSA+PSBjdXItPm1QcmVmaXhMZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gbmV0aWYtPkdldEludGVyZmFjZUlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEluc3RhbmNlICpJcDY6OkdldEluc3RhbmNlKHZvaWQpCit7CisgICAgcmV0dXJuIG90SW5zdGFuY2VGcm9tSXA2KHRoaXMpOworfQorCitJcDYgJklwNjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgSXA2ICZpcDYgPSAqc3RhdGljX2Nhc3Q8SXA2ICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIElwNiAmaXA2ID0gb3RHZXRJcDYoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGlwNjsKK30KKworY29uc3QgY2hhciAqSXA2OjpJcFByb3RvVG9TdHJpbmcoSXBQcm90byBhSXBQcm90bykKK3sKKyAgICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgICBzd2l0Y2ggKGFJcFByb3RvKQorICAgIHsKKyAgICBjYXNlIGtQcm90b0hvcE9wdHM6CisgICAgICAgIHJldHZhbCA9ICJIb3BPcHRzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b1RjcDoKKyAgICAgICAgcmV0dmFsID0gIlRDUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUHJvdG9VZHA6CisgICAgICAgIHJldHZhbCA9ICJVRFAiOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1Byb3RvSXA2OgorICAgICAgICByZXR2YWwgPSAiSVA2IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b1JvdXRpbmc6CisgICAgICAgIHJldHZhbCA9ICJSb3V0aW5nIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b0ZyYWdtZW50OgorICAgICAgICByZXR2YWwgPSAiRnJhZyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUHJvdG9JY21wNjoKKyAgICAgICAgcmV0dmFsID0gIklDTVA2IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b05vbmU6CisgICAgICAgIHJldHZhbCA9ICJOb25lIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b0RzdE9wdHM6CisgICAgICAgIHJldHZhbCA9ICJEc3RPcHRzIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR2YWwgPSAiVW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNi5ocHAgYi9zcmMvY29yZS9uZXQvaXA2LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJhMTZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2lwNi5ocHAKQEAgLTAsMCArMSw0MjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IHBhY2tldCBwcm9jZXNzaW5nLgorICovCisKKyNpZm5kZWYgSVA2X0hQUF8KKyNkZWZpbmUgSVA2X0hQUF8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9pcDYuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3VkcC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2ljbXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfaGVhZGVycy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9tcGwuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfcm91dGVzLmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgIm5ldC9zb2NrZXQuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpJcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgbmV0d29ya2luZy4KKyAqCisgKi8KK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXB2NgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIElQdjYgbmV0d29yayBsYXllci4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pY21wNiBJQ01QdjYKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pcDYgSVB2NgorICogQGRlZmdyb3VwIGNvcmUtaXA2LW1wbCBNUEwKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1uZXRpZiBOZXR3b3JrIEludGVyZmFjZXMKKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LWlwNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgY29yZSBJUHY2IG5ldHdvcmtpbmcuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGNvcmUgSVB2NiBtZXNzYWdlIHByb2Nlc3NpbmcuCisgKgorICovCitjbGFzcyBJcDYKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdEhvcExpbWl0ID0gNjQsCisgICAgICAgIGtNYXhEYXRhZ3JhbUxlbmd0aCA9IDEyODAsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBtZXNzYWdlIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgcG9vbC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNlcnZlZCAgVGhlIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgdG8gcmVzZXJ2ZSBmb2xsb3dpbmcgdGhlIElQdjYgaGVhZGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgaW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqTmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqLworICAgIElwNih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElQdjYgZGF0YWdyYW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUlwUHJvdG8gICAgICBUaGUgSW50ZXJuZXQgUHJvdG9jb2wgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbWVzc2FnZSBpbnRvIGFuIG91dHB1dCBpbnRlcmZhY2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlciB0byBhZGQgdGhlIElQdjYgaGVhZGVycy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERhdGFncmFtKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBJcFByb3RvIGFJcFByb3RvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgcmF3IElQdjYgZGF0YWdyYW0gd2l0aCBhIGZ1bGx5IGZvcm1lZCBJUHY2IGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcmZhY2VJZCAgICAgIFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhhdCByZWNlaXZlZCB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9EUk9QICAgTWVzc2FnZSBwcm9jZXNzaW5nIGZhaWxlZCBhbmQgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRyb3BwZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRSYXcoTWVzc2FnZSAmYU1lc3NhZ2UsIGludDhfdCBhSW50ZXJmYWNlSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIGEgcmVjZWl2ZWQgSVB2NiBkYXRhZ3JhbS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXRpZiAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhhdCByZWNlaXZlZCB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhSW50ZXJmYWNlSWQgICAgICBUaGUgaW50ZXJmYWNlIGlkZW50aWZpZXIgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgcmVjZWl2ZWQgdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtNZXNzYWdlSW5mbyAgQSBwb2ludGVyIHRvIGxpbmstc3BlY2lmaWMgbWVzc2FnZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJvbU5jcEhvc3QgICAgICBUUlVFIGlmIHRoZSBtZXNzYWdlIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIE5DUCBob3N0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHRoZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgIE1lc3NhZ2UgcHJvY2Vzc2luZyBmYWlsZWQgYW5kIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkcm9wcGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBIYW5kbGVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSwgTmV0aWYgKmFOZXRpZiwgaW50OF90IGFJbnRlcmZhY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFMaW5rTWVzc2FnZUluZm8sIGJvb2wgYUZyb21OY3BIb3N0KTsKKworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2RzIGFkZHMgYSBmdWxsIElQdjYgcGFja2V0IHRvIHRoZSB0cmFuc21pdCBxdWV1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhTWVzc2FnZSBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKi8KKyAgICB2b2lkIEVucXVldWVEYXRhZ3JhbShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgdXBkYXRlcyBhIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoZWNrc3VtICBUaGUgY2hlY2tzdW0gdmFsdWUgdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbVtpbl0gIGFWYWx1ZSAgICAgVGhlIDE2LWJpdCB2YWx1ZSB0byB1cGRhdGUgQHAgYUNoZWNrc3VtIHdpdGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIHVpbnQxNl90IGFWYWx1ZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgdXBkYXRlcyBhIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoZWNrc3VtICBUaGUgY2hlY2tzdW0gdmFsdWUgdG8gdXBkYXRlLgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWYgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBAcCBhQnVmLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgY2hlY2tzdW0uCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDE2X3QgVXBkYXRlQ2hlY2tzdW0odWludDE2X3QgYUNoZWNrc3VtLCBjb25zdCB2b2lkICphQnVmLCB1aW50MTZfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCB1cGRhdGVzIGEgY2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hlY2tzdW0gIFRoZSBjaGVja3N1bSB2YWx1ZSB0byB1cGRhdGUuCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICBBIHJlZmVyZW5jZSB0byBhbiBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBVcGRhdGVDaGVja3N1bSh1aW50MTZfdCBhQ2hlY2tzdW0sIGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBjb21wdXRlcyB0aGUgcHNldWRvaGVhZGVyIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNvdXJjZSAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgICAgICBUaGUgSVB2NiBQYXlsb2FkIExlbmd0aCB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJvdG8gICAgICAgIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHBzZXVkb2hlYWRlciBjaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBDb21wdXRlUHNldWRvaGVhZGVyQ2hlY2tzdW0oY29uc3QgQWRkcmVzcyAmYVNvdXJjZSwgY29uc3QgQWRkcmVzcyAmYURlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUxlbmd0aCwgSXBQcm90byBhUHJvdG8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gcHJvdmlkZSByZWNlaXZlZCByYXcgSVB2NiBkYXRhZ3JhbXMuCisgICAgICoKKyAgICAgKiBCeSBkZWZhdWx0LCB0aGlzIGNhbGxiYWNrIGRvZXMgbm90IHBhc3MgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYy4gIFNlZSBTZXRSZWNlaXZlSXA2RmlsdGVyRW5hYmxlZCgpIHRvIGNoYW5nZQorICAgICAqIHRoZSBUaHJlYWQgY29udHJvbCB0cmFmZmljIGZpbHRlciBzZXR0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICAgICAgICAgQSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiBhbiBJUHY2IGRhdGFncmFtIGlzIHJlY2VpdmVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCB0byBkaXNhYmxlIHRoZSBjYWxsYmFjay4KKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2tDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEBzYSBJc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgICAgICogQHNhIFNldFJlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlY2VpdmVEYXRhZ3JhbUNhbGxiYWNrKG90SXA2UmVjZWl2ZUNhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBpcyBmaWx0ZXJlZCBvdXQgd2hlbiBkZWxpdmVyaW5nIElQdjYgZGF0YWdyYW1zCisgICAgICogdmlhIHRoZSBjYWxsYmFjayBzcGVjaWZpZWQgaW4gU2V0UmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2soKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUUlVFIGlmIFRocmVhZCBjb250cm9sIHRyYWZmaWMgaXMgZmlsdGVyZWQgb3V0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAc2EgU2V0UmVjZWl2ZURhdGFncmFtQ2FsbGJhY2sKKyAgICAgKiBAc2EgU2V0UmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQKKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNSZWNlaXZlSXA2RmlsdGVyRW5hYmxlZCh2b2lkKSB7IHJldHVybiBtSXNSZWNlaXZlSXA2RmlsdGVyRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCBUaHJlYWQgY29udHJvbCB0cmFmZmljIGlzIGZpbHRlcmVkIG91dCB3aGVuIGRlbGl2ZXJpbmcgSVB2NiBkYXRhZ3JhbXMKKyAgICAgKiB2aWEgdGhlIGNhbGxiYWNrIHNwZWNpZmllZCBpbiBTZXRSZWNlaXZlSXA2RGF0YWdyYW1DYWxsYmFjaygpLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZWQgIFRSVUUgaWYgVGhyZWFkIGNvbnRyb2wgdHJhZmZpYyBpcyBmaWx0ZXJlZCBvdXQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEBzYSBTZXRSZWNlaXZlRGF0YWdyYW1DYWxsYmFjaworICAgICAqIEBzYSBJc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlY2VpdmVJcDZGaWx0ZXJFbmFibGVkKGJvb2wgYUVuYWJsZWQpIHsgbUlzUmVjZWl2ZUlwNkZpbHRlckVuYWJsZWQgPSBhRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IElQdjYgZm9yd2FyZGluZyBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiBJUHY2IGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0ZvcndhcmRpbmdFbmFibGVkKHZvaWQpIHsgcmV0dXJuIG1Gb3J3YXJkaW5nRW5hYmxlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcy9kaXNhYmxlcyBJUHY2IGZvcndhcmRpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlICBUUlVFIHRvIGVuYWJsZSBJUHY2IGZvcndhcmRpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Rm9yd2FyZGluZ0VuYWJsZWQoYm9vbCBhRW5hYmxlKSB7IG1Gb3J3YXJkaW5nRW5hYmxlZCA9IGFFbmFibGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtICBhTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBhbHJlYWR5IGVuYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZE5ldGlmKE5ldGlmICZhTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGlzYWJsZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtICBhTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZGlzYWJsZWQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgbmV0d29yayBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZU5ldGlmKE5ldGlmICZhTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIE5ldGlmICpHZXROZXRpZkxpc3Qodm9pZCkgeyByZXR1cm4gbU5ldGlmTGlzdEhlYWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgQHAgYUludGVyZmFjZUlkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUludGVyZmFjZUlkICBUaGUgbmV0d29yayBpbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9yIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIE5ldGlmICpHZXROZXRpZkJ5SWQoaW50OF90IGFJbnRlcmZhY2VJZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgQHAgYUFkZHJlc3MgaXMgYXNzaWduZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhc3NpZ25lZCB0byBhIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGFzc2lnbmVkIHRvIGFueSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNVbmljYXN0QWRkcmVzcyhjb25zdCBBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtIGRlZmF1bHQgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgc2VsZWN0ZWQgSVB2NiBzb3VyY2UgYWRkcmVzcyBvciBOVUxMIGlmIG5vIHNvdXJjZSBhZGRyZXNzIHdhcyBmb3VuZC4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKlNlbGVjdFNvdXJjZUFkZHJlc3MoTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIG5ldHdvcmsgaW50ZXJmYWNlIEBwIGFBZGRyZXNzIGlzIG9uLWxpbmssIGlmIGFueS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlkZW50aWZpZXIgZm9yIHRoZSBvbi1saW5rIGludGVyZmFjZSBvciAtMSBpZiBub25lIGlzIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldE9uTGlua05ldGlmKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBvdEluc3RhbmNlIHN0cnVjdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgb3RJbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEluc3RhbmNlICpHZXRJbnN0YW5jZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNlbmQgcXVldWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgc2VuZCBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IFByaW9yaXR5UXVldWUgJkdldFNlbmRRdWV1ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtU2VuZFF1ZXVlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2QgY29udmVydHMgYW4gYElwUHJvdG9gIGVudW1lcmF0aW9uIHRvIGEgc3RyaW5nLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBJUCBwcm90b2NvbCBlbnVtZXJhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBjb25zdCBjaGFyICpJcFByb3RvVG9TdHJpbmcoSXBQcm90byBhSXBQcm90byk7CisKKyAgICBSb3V0ZXMgbVJvdXRlczsKKyAgICBJY21wIG1JY21wOworICAgIFVkcCBtVWRwOworICAgIE1wbCBtTXBsOworCisgICAgTWVzc2FnZVBvb2wgbU1lc3NhZ2VQb29sOworICAgIFRhc2tsZXRTY2hlZHVsZXIgbVRhc2tsZXRTY2hlZHVsZXI7CisgICAgVGltZXJTY2hlZHVsZXIgbVRpbWVyU2NoZWR1bGVyOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlbmRRdWV1ZShUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBIYW5kbGVTZW5kUXVldWUodm9pZCk7CisKKyAgICBvdEVycm9yIFByb2Nlc3NSZWNlaXZlQ2FsbGJhY2soY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHVpbnQ4X3QgYUlwUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZyb21OY3BIb3N0KTsKKyAgICBvdEVycm9yIEhhbmRsZUV4dGVuc2lvbkhlYWRlcnMoTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgdWludDhfdCAmYU5leHRIZWFkZXIsIGJvb2wgYUZvcndhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVJlY2VpdmUpOworICAgIG90RXJyb3IgSGFuZGxlRnJhZ21lbnQoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgQWRkTXBsT3B0aW9uKE1lc3NhZ2UgJmFNZXNzYWdlLCBIZWFkZXIgJmFIZWFkZXIpOworICAgIG90RXJyb3IgQWRkVHVubmVsZWRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBJbnNlcnRNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlciAmYUhlYWRlciwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBSZW1vdmVNcGxPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgSGFuZGxlT3B0aW9ucyhNZXNzYWdlICZhTWVzc2FnZSwgSGVhZGVyICZhSGVhZGVyLCBib29sICZhRm9yd2FyZCk7CisgICAgb3RFcnJvciBIYW5kbGVQYXlsb2FkKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCB1aW50OF90IGFJcFByb3RvKTsKKyAgICBpbnQ4X3QgRmluZEZvcndhcmRJbnRlcmZhY2VJZChjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyBJcDYgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIGJvb2wgbUZvcndhcmRpbmdFbmFibGVkOworCisgICAgUHJpb3JpdHlRdWV1ZSBtU2VuZFF1ZXVlOworICAgIFRhc2tsZXQgbVNlbmRRdWV1ZVRhc2s7CisKKyAgICBvdElwNlJlY2VpdmVDYWxsYmFjayBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2s7CisgICAgdm9pZCAqbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrQ29udGV4dDsKKyAgICBib29sIG1Jc1JlY2VpdmVJcDZGaWx0ZXJFbmFibGVkOworCisgICAgTmV0aWYgKm1OZXRpZkxpc3RIZWFkOworfTsKKworc3RhdGljIGlubGluZSBJcDYgKklwNkZyb21UYXNrbGV0U2NoZWR1bGVyKFRhc2tsZXRTY2hlZHVsZXIgKmFUYXNrbGV0U2NoZWR1bGVyKQoreworICAgIHJldHVybiAoSXA2ICopQ09OVEFJTklOR19SRUNPUkQoYVRhc2tsZXRTY2hlZHVsZXIsIElwNiwgbVRhc2tsZXRTY2hlZHVsZXIpOworfQorCitzdGF0aWMgaW5saW5lIElwNiAqSXA2RnJvbVRpbWVyU2NoZWR1bGVyKFRpbWVyU2NoZWR1bGVyICphVGltZXJTY2hlZHVsZXIpCit7CisgICAgcmV0dXJuIChJcDYgKilDT05UQUlOSU5HX1JFQ09SRChhVGltZXJTY2hlZHVsZXIsIElwNiwgbVRpbWVyU2NoZWR1bGVyKTsKK30KKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfSVA2X0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9pcDZfYWRkcmVzcy5jcHAgYi9zcmMvY29yZS9uZXQvaXA2X2FkZHJlc3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2Mzg4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X2FkZHJlc3MuY3BwCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIElQdjYgYWRkcmVzc2VzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiaXA2X2FkZHJlc3MuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzI7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworYm9vbCBBZGRyZXNzOjpJc1Vuc3BlY2lmaWVkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0zMlswXSA9PSAwICYmIG1GaWVsZHMubTMyWzFdID09IDAgJiYgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSAwKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc0xvb3BiYWNrKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0zMlswXSA9PSAwICYmIG1GaWVsZHMubTMyWzFdID09IDAgJiYgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDEpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc0xpbmtMb2NhbCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tOFswXSA9PSAweGZlKSAmJiAoKG1GaWVsZHMubThbMV0gJiAweGMwKSA9PSAweDgwKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc011bHRpY2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtRmllbGRzLm04WzBdID09IDB4ZmY7Cit9CisKK2Jvb2wgQWRkcmVzczo6SXNMaW5rTG9jYWxNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNNdWx0aWNhc3QoKSAmJiAoR2V0U2NvcGUoKSA9PSBrTGlua0xvY2FsU2NvcGUpOworfQorCitib29sIEFkZHJlc3M6OklzTGlua0xvY2FsQWxsTm9kZXNNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1GaWVsZHMubTMyWzBdID09IEhvc3RTd2FwMzIoMHhmZjAyMDAwMCkgJiYgbUZpZWxkcy5tMzJbMV0gPT0gMCAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDB4MDEpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc0xpbmtMb2NhbEFsbFJvdXRlcnNNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1GaWVsZHMubTMyWzBdID09IEhvc3RTd2FwMzIoMHhmZjAyMDAwMCkgJiYgbUZpZWxkcy5tMzJbMV0gPT0gMCAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDB4MDIpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1JlYWxtTG9jYWxNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNNdWx0aWNhc3QoKSAmJiAoR2V0U2NvcGUoKSA9PSBrUmVhbG1Mb2NhbFNjb3BlKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1JlYWxtTG9jYWxBbGxOb2Rlc011bHRpY2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMzJbMF0gPT0gSG9zdFN3YXAzMigweGZmMDMwMDAwKSAmJiBtRmllbGRzLm0zMlsxXSA9PSAwICYmCisgICAgICAgICAgICBtRmllbGRzLm0zMlsyXSA9PSAwICYmIG1GaWVsZHMubTMyWzNdID09IEhvc3RTd2FwMzIoMHgwMSkpOworfQorCitib29sIEFkZHJlc3M6OklzUmVhbG1Mb2NhbEFsbFJvdXRlcnNNdWx0aWNhc3Qodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1GaWVsZHMubTMyWzBdID09IEhvc3RTd2FwMzIoMHhmZjAzMDAwMCkgJiYgbUZpZWxkcy5tMzJbMV0gPT0gMCAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSBIb3N0U3dhcDMyKDB4MDIpKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1JlYWxtTG9jYWxBbGxNcGxGb3J3YXJkZXJzKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0zMlswXSA9PSBIb3N0U3dhcDMyKDB4ZmYwMzAwMDApICYmIG1GaWVsZHMubTMyWzFdID09IDAgJiYKKyAgICAgICAgICAgIG1GaWVsZHMubTMyWzJdID09IDAgJiYgbUZpZWxkcy5tMzJbM10gPT0gSG9zdFN3YXAzMigweGZjKSk7Cit9CisKK2Jvb2wgQWRkcmVzczo6SXNSb3V0aW5nTG9jYXRvcih2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMTZbNF0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmIG1GaWVsZHMubTE2WzVdID09IEhvc3RTd2FwMTYoMHgwMGZmKSAmJgorICAgICAgICAgICAgbUZpZWxkcy5tMTZbNl0gPT0gSG9zdFN3YXAxNigweGZlMDApICYmIG1GaWVsZHMubThbMTRdIDwga0Fsb2MxNk1hc2sgJiYKKyAgICAgICAgICAgIChtRmllbGRzLm04WzE0XSAmIGtSbG9jMTZSZXNlcnZlZEJpdE1hc2spID09IDApOworfQorCitib29sIEFkZHJlc3M6OklzQW55Y2FzdFJvdXRpbmdMb2NhdG9yKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRmllbGRzLm0xNls0XSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYgbUZpZWxkcy5tMTZbNV0gPT0gSG9zdFN3YXAxNigweDAwZmYpICYmCisgICAgICAgICAgICBtRmllbGRzLm0xNls2XSA9PSBIb3N0U3dhcDE2KDB4ZmUwMCkgJiYgbUZpZWxkcy5tOFsxNF0gPT0ga0Fsb2MxNk1hc2spOworfQorCitib29sIEFkZHJlc3M6OklzU3VibmV0Um91dGVyQW55Y2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMzJbMl0gPT0gMCAmJiBtRmllbGRzLm0zMlszXSA9PSAwKTsKK30KKworYm9vbCBBZGRyZXNzOjpJc1Jlc2VydmVkU3VibmV0QW55Y2FzdCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobUZpZWxkcy5tMzJbMl0gPT0gSG9zdFN3YXAzMigweGZkZmZmZmZmKSAmJiBtRmllbGRzLm0xNls2XSA9PSAweGZmZmYgJiYgbUZpZWxkcy5tOFsxNF0gPT0gMHhmZiAmJgorICAgICAgICAgICAgbUZpZWxkcy5tOFsxNV0gPj0gMHg4MCk7Cit9CisKK2Jvb2wgQWRkcmVzczo6SXNJaWRSZXNlcnZlZCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBJc1N1Ym5ldFJvdXRlckFueWNhc3QoKSB8fCBJc1Jlc2VydmVkU3VibmV0QW55Y2FzdCgpIHx8IElzQW55Y2FzdFJvdXRpbmdMb2NhdG9yKCk7Cit9CisKKworY29uc3QgdWludDhfdCAqQWRkcmVzczo6R2V0SWlkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaWVsZHMubTggKyBrSW50ZXJmYWNlSWRlbnRpZmllck9mZnNldDsKK30KKwordWludDhfdCAqQWRkcmVzczo6R2V0SWlkKHZvaWQpCit7CisgICAgcmV0dXJuIG1GaWVsZHMubTggKyBrSW50ZXJmYWNlSWRlbnRpZmllck9mZnNldDsKK30KKwordm9pZCBBZGRyZXNzOjpTZXRJaWQoY29uc3QgdWludDhfdCAqYUlpZCkKK3sKKyAgICBtZW1jcHkobUZpZWxkcy5tOCArIGtJbnRlcmZhY2VJZGVudGlmaWVyT2Zmc2V0LCBhSWlkLCBrSW50ZXJmYWNlSWRlbnRpZmllclNpemUpOworfQorCit2b2lkIEFkZHJlc3M6OlNldElpZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFFdWk2NCkKK3sKKyAgICBtZW1jcHkobUZpZWxkcy5tOCArIGtJbnRlcmZhY2VJZGVudGlmaWVyT2Zmc2V0LCBhRXVpNjQubTgsIGtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSk7CisgICAgbUZpZWxkcy5tOFtrSW50ZXJmYWNlSWRlbnRpZmllck9mZnNldF0gXj0gMHgwMjsKK30KKwordWludDhfdCBBZGRyZXNzOjpHZXRTY29wZSh2b2lkKSBjb25zdAoreworICAgIGlmIChJc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1GaWVsZHMubThbMV0gJiAweGY7CisgICAgfQorICAgIGVsc2UgaWYgKElzTGlua0xvY2FsKCkpCisgICAgeworICAgICAgICByZXR1cm4ga0xpbmtMb2NhbFNjb3BlOworICAgIH0KKyAgICBlbHNlIGlmIChJc0xvb3BiYWNrKCkpCisgICAgeworICAgICAgICByZXR1cm4ga05vZGVMb2NhbFNjb3BlOworICAgIH0KKworICAgIHJldHVybiBrR2xvYmFsU2NvcGU7Cit9CisKK3VpbnQ4X3QgQWRkcmVzczo6UHJlZml4TWF0Y2goY29uc3QgdWludDhfdCAqYVByZWZpeEEsIGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXhCLCB1aW50OF90IGFNYXhMZW5ndGgpCit7CisgICAgdWludDhfdCBydmFsID0gMDsKKyAgICB1aW50OF90IGRpZmY7CisKKyAgICBpZiAoYU1heExlbmd0aCA+IHNpemVvZihBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIGFNYXhMZW5ndGggPSBzaXplb2YoQWRkcmVzcyk7CisgICAgfQorCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYU1heExlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgZGlmZiA9IGFQcmVmaXhBW2ldIF4gYVByZWZpeEJbaV07CisKKyAgICAgICAgaWYgKGRpZmYgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCArPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKChkaWZmICYgMHg4MCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBydmFsKys7CisgICAgICAgICAgICAgICAgZGlmZiA8PD0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordWludDhfdCBBZGRyZXNzOjpQcmVmaXhNYXRjaChjb25zdCBBZGRyZXNzICZhT3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIFByZWZpeE1hdGNoKG1GaWVsZHMubTgsIGFPdGhlci5tRmllbGRzLm04LCBzaXplb2YoQWRkcmVzcykpOworfQorCitib29sIEFkZHJlc3M6Om9wZXJhdG9yPT0oY29uc3QgQWRkcmVzcyAmYU90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtZW1jbXAobUZpZWxkcy5tOCwgYU90aGVyLm1GaWVsZHMubTgsIHNpemVvZihtRmllbGRzLm04KSkgPT0gMDsKK30KKworYm9vbCBBZGRyZXNzOjpvcGVyYXRvciE9KGNvbnN0IEFkZHJlc3MgJmFPdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtY21wKG1GaWVsZHMubTgsIGFPdGhlci5tRmllbGRzLm04LCBzaXplb2YobUZpZWxkcy5tOCkpICE9IDA7Cit9CisKK290RXJyb3IgQWRkcmVzczo6RnJvbVN0cmluZyhjb25zdCBjaGFyICphQnVmKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKmRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihtRmllbGRzLm04KTsKKyAgICB1aW50OF90ICplbmRwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KG1GaWVsZHMubTggKyAxNSk7CisgICAgdWludDhfdCAqY29sb25wID0gTlVMTDsKKyAgICB1aW50MTZfdCB2YWwgPSAwOworICAgIHVpbnQ4X3QgY291bnQgPSAwOworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGNoYXIgY2g7CisgICAgdWludDhfdCBkOworCisgICAgbWVtc2V0KG1GaWVsZHMubTgsIDAsIDE2KTsKKworICAgIGRzdC0tOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNoID0gKmFCdWYrKzsKKyAgICAgICAgZCA9IGNoICYgMHhmOworCisgICAgICAgIGlmICgoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykgfHwgKCdBJyA8PSBjaCAmJiBjaCA8PSAnRicpKQorICAgICAgICB7CisgICAgICAgICAgICBkICs9IDk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2ggPT0gJzonIHx8IGNoID09ICdcMCcgfHwgY2ggPT0gJyAnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRzdCArIDIgPD0gZW5kcCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICAgICAgKihkc3QgKyAxKSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqKGRzdCArIDIpID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICAgICAgICAgICAgICBkc3QgKz0gMjsKKyAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICc6JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoY29sb25wID09IE5VTEwgfHwgZmlyc3QsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgICAgIGNvbG9ucCA9IGRzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09ICdcMCcgfHwgY2ggPT0gJyAnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgnMCcgPD0gY2ggJiYgY2ggPD0gJzknLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigodmFsIDw8IDQpIHwgZCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCgrK2NvdW50IDw9IDQsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIHdoaWxlIChjb2xvbnAgJiYgZHN0ID4gY29sb25wKQorICAgIHsKKyAgICAgICAgKmVuZHAtLSA9ICpkc3QtLTsKKyAgICB9CisKKyAgICB3aGlsZSAoZW5kcCA+IGRzdCkKKyAgICB7CisgICAgICAgICplbmRwLS0gPSAwOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IGNoYXIgKkFkZHJlc3M6OlRvU3RyaW5nKGNoYXIgKmFCdWYsIHVpbnQxNl90IGFTaXplKSBjb25zdAoreworICAgIHNucHJpbnRmKGFCdWYsIGFTaXplLCAiJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXgiLAorICAgICAgICAgICAgIEhvc3RTd2FwMTYobUZpZWxkcy5tMTZbMF0pLCBIb3N0U3dhcDE2KG1GaWVsZHMubTE2WzFdKSwKKyAgICAgICAgICAgICBIb3N0U3dhcDE2KG1GaWVsZHMubTE2WzJdKSwgSG9zdFN3YXAxNihtRmllbGRzLm0xNlszXSksCisgICAgICAgICAgICAgSG9zdFN3YXAxNihtRmllbGRzLm0xNls0XSksIEhvc3RTd2FwMTYobUZpZWxkcy5tMTZbNV0pLAorICAgICAgICAgICAgIEhvc3RTd2FwMTYobUZpZWxkcy5tMTZbNl0pLCBIb3N0U3dhcDE2KG1GaWVsZHMubTE2WzddKSk7CisKKyAgICByZXR1cm4gYUJ1ZjsKK30KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaXA2X2FkZHJlc3MuaHBwIGIvc3JjL2NvcmUvbmV0L2lwNl9hZGRyZXNzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg4YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2lwNl9hZGRyZXNzLmhwcApAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgYWRkcmVzc2VzLgorICovCisKKyNpZm5kZWYgSVA2X0FERFJFU1NfSFBQXworI2RlZmluZSBJUDZfQUREUkVTU19IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJUHY2IGFkZHJlc3Mgb2JqZWN0LgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEFkZHJlc3M6IHB1YmxpYyBvdElwNkFkZHJlc3MKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNYXNrcworICAgICAqCisgICAgICovCisgICAgZW51bQorICAgIHsKKyAgICAgICAga0Fsb2MxNk1hc2sgICAgICAgICAgICAgICAgID0gMHhmYywgLy8vPCBUaGUgbWFzayBmb3IgQWxvYzE2LgorICAgICAgICBrUmxvYzE2UmVzZXJ2ZWRCaXRNYXNrICAgICAgPSAweDAyLCAvLy88IFRoZSBtYXNrIGZvciB0aGUgcmVzZXJ2ZWQgYml0IG9mIFJsb2MxNi4KKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29uc3RhbnRzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrSW50ZXJmYWNlSWRlbnRpZmllclNpemUgICA9IDgsICAvLy88IEludGVyZmFjZSBJZGVudGlmaWVyIHNpemUgaW4gYnl0ZXMuCisgICAgICAgIGtJcDZBZGRyZXNzU3RyaW5nU2l6ZSAgICAgID0gNDAsIC8vLzwgTWF4IGJ1ZmZlciBzaXplIGluIGJ5dGVzIHRvIHN0b3JlIGFuIElQdjYgYWRkcmVzcyBpbiBzdHJpbmcgZm9ybWF0LgorICAgICAgICBrTWVzaExvY2FsUHJlZml4TGVuZ3RoICAgICA9IDY0LCAvLy88IExlbmd0aCBvZiBUaHJlYWQgbWVzaCBsb2NhbCBwcmVmaXguCisgICAgfTsKKworICAgIC8qKgorICAgICAqIElQdjYgQWRkcmVzcyBTY29wZXMKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrTm9kZUxvY2FsU2NvcGUgICAgICA9IDAsICAvLy88IE5vZGUtTG9jYWwgc2NvcGUKKyAgICAgICAga0ludGVyZmFjZUxvY2FsU2NvcGUgPSAxLCAgLy8vPCBJbnRlcmZhY2UtTG9jYWwgc2NvcGUKKyAgICAgICAga0xpbmtMb2NhbFNjb3BlICAgICAgPSAyLCAgLy8vPCBMaW5rLUxvY2FsIHNjb3BlCisgICAgICAgIGtSZWFsbUxvY2FsU2NvcGUgICAgID0gMywgIC8vLzwgUmVhbG0tTG9jYWwgc2NvcGUKKyAgICAgICAga0FkbWluTG9jYWxTY29wZSAgICAgPSA0LCAgLy8vPCBBZG1pbi1Mb2NhbCBzY29wZQorICAgICAgICBrU2l0ZUxvY2FsU2NvcGUgICAgICA9IDUsICAvLy88IFNpdGUtTG9jYWwgc2NvcGUKKyAgICAgICAga09yZ0xvY2FsU2NvcGUgICAgICAgPSA4LCAgLy8vPCBPcmdhbml6YXRpb24tTG9jYWwgc2NvcGUKKyAgICAgICAga0dsb2JhbFNjb3BlICAgICAgICAgPSAxNCwgLy8vPCBHbG9iYWwgc2NvcGUKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgdGhlIFVuc3BlY2lmaWVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIHRoZSBVbnNwZWNpZmllZCBBZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IHRoZSBVbnNwZWNpZmllZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1Vuc3BlY2lmaWVkKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgdGhlIExvb3BiYWNrIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIHRoZSBMb29wYmFjayBBZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IHRoZSBMb29wYmFjayBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xvb3BiYWNrKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgSW50ZXJmYWNlLUxvY2FsLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBzY29wZSBpcyBJbnRlcmZhY2UtTG9jYWwuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBzY29wZSBpcyBub3QgSW50ZXJmYWNlLUxvY2FsLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0ludGVyZmFjZUxvY2FsKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgTGluay1Mb2NhbC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgTGluay1Mb2NhbC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIHNjb3BlIGlzIG5vdCBMaW5rLUxvY2FsLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xpbmtMb2NhbCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUgaXMgbm90IGEgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSBsaW5rLWxvY2FsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhIGxpbmstbG9jYWwgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBzY29wZSBpcyBub3QgYSBsaW5rLWxvY2FsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0xpbmtMb2NhbE11bHRpY2FzdCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgbGluay1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgbGluay1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBub3QgYSBsaW5rLWxvY2FsIGFsbCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNMaW5rTG9jYWxBbGxOb2Rlc011bHRpY2FzdCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgbGluay1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSBsaW5rLWxvY2FsIGFsbCByb3V0ZXJzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGEgbGluay1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNMaW5rTG9jYWxBbGxSb3V0ZXJzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIHNjb3BlIGlzIG5vdCBhIHJlYWxtLWxvY2FsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlYWxtTG9jYWxNdWx0aWNhc3Qodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIElQdjYgYWRkcmVzcyBpcyBhIHJlYWxtLWxvY2FsIGFsbCBub2RlcyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBub3QgYSByZWFsbS1sb2NhbCBhbGwgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVhbG1Mb2NhbEFsbE5vZGVzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgcm91dGVycyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIG5vdCBhIHJlYWxtLWxvY2FsIGFsbCByb3V0ZXJzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlYWxtTG9jYWxBbGxSb3V0ZXJzTXVsdGljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgTVBMIGZvcndhcmRlcnMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgYSByZWFsbS1sb2NhbCBhbGwgTVBMIGZvcndhcmRlcnMgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIG5vdCBhIHJlYWxtLWxvY2FsIGFsbCBNUEwgZm9yd2FyZGVycyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JlYWxtTG9jYWxBbGxNcGxGb3J3YXJkZXJzKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYSBSTE9DIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgUkxPQyBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGEgUkxPQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1JvdXRpbmdMb2NhdG9yKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgaXMgYW4gQW55Y2FzdCBSTE9DIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGFuIEFueWNhc3QgUkxPQyBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGFuIEFueWNhc3QgUkxPQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0FueWNhc3RSb3V0aW5nTG9jYXRvcih2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIFN1Ym5ldC1Sb3V0ZXIgQW55Y2FzdCAoUkZDIDQyOTEpLAorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgYWRkcmVzcyBpcyBhIFN1Ym5ldC1Sb3V0ZXIgQW55Y2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBJUHY2IGFkZHJlc3MgaXMgbm90IGEgU3VibmV0LVJvdXRlciBBbnljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU3VibmV0Um91dGVyQW55Y2FzdCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBhZGRyZXNzIGlzIFJlc2VydmVkIFN1Ym5ldCBBbnljYXN0IChSRkMgMjUyNiksCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIGEgUmVzZXJ2ZWQgU3VibmV0IEFueWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGlzIG5vdCBhIFJlc2VydmVkIFN1Ym5ldCBBbnljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVzZXJ2ZWRTdWJuZXRBbnljYXN0KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3MgY29udGFpbnMgUmVzZXJ2ZWQgSVB2NiBJSUQgKFJGQyA1NDUzKSwKKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3MgY29udGFpbnMgYSByZXNlcnZlZCBJUHY2IElJRC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBhZGRyZXNzIGRvZXMgbm90IGNvbnRhaW4gYSByZXNlcnZlZCBJUHY2IElJRC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNJaWRSZXNlcnZlZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBJbnRlcmZhY2UgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRJaWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEludGVyZmFjZSBJZGVudGlmaWVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0SWlkKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWlkICBBIHJlZmVyZW5jZSB0byB0aGUgSW50ZXJmYWNlIElkZW50aWZpZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCB1aW50OF90ICphSWlkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEludGVyZmFjZSBJZGVudGlmaWVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV1aTY0ICBBIHJlZmVyZW5jZSB0byB0aGUgSUVFRSBFVUktNjQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWlkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUV1aTY0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgYWRkcmVzcyBzY29wZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IGFkZHJlc3Mgc2NvcGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNjb3BlKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIElQdjYgcHJlZml4IGJpdHMgdGhhdCBtYXRjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPdGhlciAgVGhlIElQdjYgYWRkcmVzcyB0byBtYXRjaCBhZ2FpbnN0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBJUHY2IHByZWZpeCBiaXRzIHRoYXQgbWF0Y2guCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IFByZWZpeE1hdGNoKGNvbnN0IEFkZHJlc3MgJmFPdGhlcikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBldmFsdWF0ZXMgd2hldGhlciBvciBub3QgdGhlIElQdjYgYWRkcmVzc2VzIG1hdGNoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU90aGVyICBUaGUgSVB2NiBhZGRyZXNzIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgSVB2NiBhZGRyZXNzZXMgbWF0Y2guCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBZGRyZXNzICZhT3RoZXIpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZXZhbHVhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBJUHY2IGFkZHJlc3NlcyBkaWZmZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT3RoZXIgIFRoZSBJUHY2IGFkZHJlc3MgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBJUHY2IGFkZHJlc3NlcyBkaWZmZXIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIElQdjYgYWRkcmVzc2VzIGRvIG5vdCBkaWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWRkcmVzcyAmYU90aGVyKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGFuIElQdjYgYWRkcmVzcyBzdHJpbmcgdG8gYmluYXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUJ1ZiAgQSBwb2ludGVyIHRvIHRoZSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIElQdjYgYWRkcmVzcyBzdHJpbmcuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEZhaWxlZCB0byBwYXJzZSB0aGUgSVB2NiBhZGRyZXNzIHN0cmluZy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRnJvbVN0cmluZyhjb25zdCBjaGFyICphQnVmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbnZlcnRzIGFuIElQdjYgYWRkcmVzcyBvYmplY3QgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFCdWYgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICAgYVNpemUgIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgY2hhciAqVG9TdHJpbmcoY2hhciAqYUJ1ZiwgdWludDE2X3QgYVNpemUpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIElQdjYgcHJlZml4IGJpdHMgdGhhdCBtYXRjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXhBICAgICBBIHBvaW50ZXIgdG8gdGhlIHByZWZpeCB0byBtYXRjaC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4QiAgICAgQSBwb2ludGVyIHRvIHRoZSBwcmVmaXggdG8gbWF0Y2ggYWdhaW5zdC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWF4TGVuZ3RoICAgTnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSB0d28gcHJlZml4ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIHByZWZpeCBiaXRzIHRoYXQgbWF0Y2guCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBQcmVmaXhNYXRjaChjb25zdCB1aW50OF90ICphUHJlZml4QSwgY29uc3QgdWludDhfdCAqYVByZWZpeEIsIHVpbnQ4X3QgYU1heExlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0ludGVyZmFjZUlkZW50aWZpZXJPZmZzZXQgPSA4LCAgLy8vPCBJbnRlcmZhY2UgSWRlbnRpZmllciBvZmZzZXQgaW4gYnl0ZXMuCisgICAgfTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVF9JUDZfQUREUkVTU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvaXA2X2ZpbHRlci5jcHAgYi9zcmMvY29yZS9uZXQvaXA2X2ZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3MDJjNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9pcDZfZmlsdGVyLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBJUHY2IGRhdGFncmFtIGZpbHRlcmluZy4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImlwNl9maWx0ZXIuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvdGNwLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworRmlsdGVyOjpGaWx0ZXIodm9pZCkKK3sKKyAgICBtZW1zZXQobVVuc2VjdXJlUG9ydHMsIDAsIHNpemVvZihtVW5zZWN1cmVQb3J0cykpOworfQorCitib29sIEZpbHRlcjo6QWNjZXB0KE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIGJvb2wgcnZhbCA9IGZhbHNlOworICAgIEhlYWRlciBpcDY7CisgICAgVWRwSGVhZGVyIHVkcDsKKyAgICBUY3BIZWFkZXIgdGNwOworICAgIHVpbnQxNl90IGRzdHBvcnQ7CisKKyAgICAvLyBBbGxvdyBhbGwgcmVjZWl2ZWQgSVB2NiBkYXRhZ3JhbXMgd2l0aCBsaW5rIHNlY3VyaXR5IGVuYWJsZWQKKyAgICBpZiAoYU1lc3NhZ2UuSXNMaW5rU2VjdXJpdHlFbmFibGVkKCkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisKKyAgICAvLyBSZWFkIElQdjYgaGVhZGVyCisgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihpcDYpID09IGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGlwNiksICZpcDYpKTsKKworICAgIC8vIEFsbG93IG9ubHkgbGluay1sb2NhbCB1bmljYXN0IG9yIG11bHRpY2FzdAorICAgIFZlcmlmeU9yRXhpdChpcDYuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpIHx8IGlwNi5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsTXVsdGljYXN0KCkpOworCisgICAgc3dpdGNoIChpcDYuR2V0TmV4dEhlYWRlcigpKQorICAgIHsKKyAgICBjYXNlIGtQcm90b1VkcDoKKyAgICAgICAgLy8gUmVhZCB0aGUgVURQIGhlYWRlciBhbmQgZ2V0IHRoZSBkc3QgcG9ydAorICAgICAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKHVkcCkgPT0gYU1lc3NhZ2UuUmVhZChzaXplb2YoaXA2KSwgc2l6ZW9mKHVkcCksICZ1ZHApKTsKKworICAgICAgICBkc3Rwb3J0ID0gdWRwLkdldERlc3RpbmF0aW9uUG9ydCgpOworCisgICAgICAgIC8vIEFsbG93IE1MRSB0cmFmZmljCisgICAgICAgIGlmIChkc3Rwb3J0ID09IE1sZTo6a1VkcFBvcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQcm90b1RjcDoKKyAgICAgICAgLy8gUmVhZCB0aGUgVENQIGhlYWRlciBhbmQgZ2V0IHRoZSBkc3QgcG9ydAorICAgICAgICBWZXJpZnlPckV4aXQoc2l6ZW9mKHRjcCkgPT0gYU1lc3NhZ2UuUmVhZChzaXplb2YoaXA2KSwgc2l6ZW9mKHRjcCksICZ0Y3ApKTsKKworICAgICAgICBkc3Rwb3J0ID0gdGNwLkdldERlc3RpbmF0aW9uUG9ydCgpOworCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gQWxsb3cgVURQIG9yIFRDUCB0cmFmZmljIG9ubHkKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIC8vIENoZWNrIGFnYWluc3QgYWxsb3dlZCB1bnNlY3VyZSBwb3J0IGxpc3QKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhVbnNlY3VyZVBvcnRzOyBpKyspCisgICAgeworICAgICAgICBpZiAobVVuc2VjdXJlUG9ydHNbaV0gIT0gMCAmJiBtVW5zZWN1cmVQb3J0c1tpXSA9PSBkc3Rwb3J0KQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBGaWx0ZXI6OkFkZFVuc2VjdXJlUG9ydCh1aW50MTZfdCBhUG9ydCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga01heFVuc2VjdXJlUG9ydHM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtVW5zZWN1cmVQb3J0c1tpXSA9PSBhUG9ydCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4VW5zZWN1cmVQb3J0czsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1VbnNlY3VyZVBvcnRzW2ldID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1VbnNlY3VyZVBvcnRzW2ldID0gYVBvcnQ7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEZpbHRlcjo6UmVtb3ZlVW5zZWN1cmVQb3J0KHVpbnQxNl90IGFQb3J0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4VW5zZWN1cmVQb3J0czsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1VbnNlY3VyZVBvcnRzW2ldID09IGFQb3J0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTaGlmdCBhbGwgb2YgdGhlIHBvcnRzIGhpZ2hlciB0aGFuIHRoaXMKKyAgICAgICAgICAgIC8vIHBvcnQgZG93bi4KKyAgICAgICAgICAgIGZvciAoOyBpIDwga01heFVuc2VjdXJlUG9ydHMgLSAxOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVuc2VjdXJlUG9ydHNbaV0gPSBtVW5zZWN1cmVQb3J0c1tpICsgMV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRoZSBsYXN0IHBvcnQgZW50cnkuCisgICAgICAgICAgICBtVW5zZWN1cmVQb3J0c1tpXSA9IDA7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IHVpbnQxNl90ICpGaWx0ZXI6OkdldFVuc2VjdXJlUG9ydHModWludDhfdCAmYU51bUVudHJpZXMpIGNvbnN0Cit7CisgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB1bnNlY3VyZSBwb3J0cy4KKyAgICBmb3IgKGFOdW1FbnRyaWVzID0gMDsgYU51bUVudHJpZXMgPCBrTWF4VW5zZWN1cmVQb3J0czsgYU51bUVudHJpZXMrKykKKyAgICB7CisgICAgICAgIGlmIChtVW5zZWN1cmVQb3J0c1thTnVtRW50cmllc10gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbVVuc2VjdXJlUG9ydHM7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9maWx0ZXIuaHBwIGIvc3JjL2NvcmUvbmV0L2lwNl9maWx0ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YzM1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X2ZpbHRlci5ocHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IGRhdGFncmFtIGZpbHRlcmluZy4KKyAqLworCisjaWZuZGVmIElQNl9GSUxURVJfSFBQXworI2RlZmluZSBJUDZfRklMVEVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1pcHY2CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IGRhdGFncmFtIGZpbHRlcmluZy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbiBJUHY2IGRhdGFncmFtIGZpbHRlci4KKyAqCisgKi8KK2NsYXNzIEZpbHRlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIEZpbHRlciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBGaWx0ZXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIElQdjYgZGF0YWdyYW0gcGFzc2VzIHRoZSBmaWx0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIElQdjYgZGF0YWdyYW0gdG8gcHJvY2Vzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEFjY2VwdCB0aGUgSVB2NiBkYXRhZ3JhbS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBSZWplY3QgdGhlIElQdjYgZGF0YWdyYW0uCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIEFjY2VwdChNZXNzYWdlICZhTWVzc2FnZSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgcG9ydCB0byB0aGUgYWxsb3dlZCB1bnNlY3VyZWQgcG9ydCBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBwb3J0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBUaGUgcG9ydCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBhbGxvd2VkIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIFRoZSB1bnNlY3VyZSBwb3J0IGxpc3QgaXMgZnVsbC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkVW5zZWN1cmVQb3J0KHVpbnQxNl90IGFQb3J0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBwb3J0IGZyb20gdGhlIGFsbG93ZWQgdW5zZWN1cmUgcG9ydCBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBwb3J0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFRoZSBwb3J0IHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBhbGxvd2VkIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIHBvcnQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVVbnNlY3VyZVBvcnQodWludDE2X3QgYVBvcnQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHVuc2VjdXJlIHBvcnQgbGlzdC4KKyAgICAgKgorICAgICAqIEBub3RlIFBvcnQgdmFsdWUgMCBpcyB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWQgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYU51bUVudHJpZXMgIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdW5zZWN1cmUgcG9ydCBsaXN0LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDE2X3QgKkdldFVuc2VjdXJlUG9ydHModWludDhfdCAmYU51bUVudHJpZXMpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhVbnNlY3VyZVBvcnRzID0gMiwKKyAgICB9OworICAgIHVpbnQxNl90IG1VbnNlY3VyZVBvcnRzW2tNYXhVbnNlY3VyZVBvcnRzXTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIElQNl9GSUxURVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9oZWFkZXJzLmhwcCBiL3NyYy9jb3JlL25ldC9pcDZfaGVhZGVycy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5MmMzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC9pcDZfaGVhZGVycy5ocHAKQEAgLTAsMCArMSw1NjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IHBhY2tldCBwcm9jZXNzaW5nLgorICovCisKKyNpZm5kZWYgSVA2X0hFQURFUlNfSFBQXworI2RlZmluZSBJUDZfSEVBREVSU19IUFBfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJuZXQvc29ja2V0LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7Cit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAzMjsKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAbmFtZXNwYWNlIG90OjpJcDYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgbmV0d29ya2luZy4KKyAqCisgKi8KK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXB2NgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIElQdjYgbmV0d29yayBsYXllci4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pY21wNiBJQ01QdjYKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1pcDYgSVB2NgorICogQGRlZmdyb3VwIGNvcmUtaXA2LW1wbCBNUEwKKyAqIEBkZWZncm91cCBjb3JlLWlwNi1uZXRpZiBOZXR3b3JrIEludGVyZmFjZXMKKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LWlwNgorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgY29yZSBJUHY2IG5ldHdvcmtpbmcuCisgKgorICogQHsKKyAqCisgKi8KKworLyoqCisgKiBJbnRlcm5ldCBQcm90b2NvbCBOdW1iZXJzCisgKi8KK2VudW0gSXBQcm90bworeworICAgIGtQcm90b0hvcE9wdHMgID0gMCwgICAvLy88IElQdjYgSG9wLWJ5LUhvcCBPcHRpb24KKyAgICBrUHJvdG9UY3AgICAgICA9IDYsICAgLy8vPCBUcmFuc21pc3Npb24gQ29udHJvbCBQcm90b2NvbAorICAgIGtQcm90b1VkcCAgICAgID0gMTcsICAvLy88IFVzZXIgRGF0YWdyYW0KKyAgICBrUHJvdG9JcDYgICAgICA9IDQxLCAgLy8vPCBJUHY2IGVuY2Fwc3VsYXRpb24KKyAgICBrUHJvdG9Sb3V0aW5nICA9IDQzLCAgLy8vPCBSb3V0aW5nIEhlYWRlciBmb3IgSVB2NgorICAgIGtQcm90b0ZyYWdtZW50ID0gNDQsICAvLy88IEZyYWdtZW50IEhlYWRlciBmb3IgSVB2NgorICAgIGtQcm90b0ljbXA2ICAgID0gNTgsICAvLy88IElDTVAgZm9yIElQdjYKKyAgICBrUHJvdG9Ob25lICAgICA9IDU5LCAgLy8vPCBObyBOZXh0IEhlYWRlciBmb3IgSVB2NgorICAgIGtQcm90b0RzdE9wdHMgID0gNjAsICAvLy88IERlc3RpbmF0aW9uIE9wdGlvbnMgZm9yIElQdjYKK307CisKK2VudW0KK3sKKyAgICBrVmVyc2lvbkNsYXNzRmxvd1NpemUgPSA0LCAgLy8vPCBDb21iaW5lZCBzaXplIG9mIFZlcnNpb24sIENsYXNzLCBGbG93IExhYmVsIGluIGJ5dGVzLgorfTsKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGFuIElQdjYgaGVhZGVyLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK3N0cnVjdCBIZWFkZXJQb0QKK3sKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdWludDhfdCAgIG04W2tWZXJzaW9uQ2xhc3NGbG93U2l6ZSAvIHNpemVvZih1aW50OF90KV07CisgICAgICAgIHVpbnQxNl90ICBtMTZba1ZlcnNpb25DbGFzc0Zsb3dTaXplIC8gc2l6ZW9mKHVpbnQxNl90KV07CisgICAgICAgIHVpbnQzMl90ICBtMzJba1ZlcnNpb25DbGFzc0Zsb3dTaXplIC8gc2l6ZW9mKHVpbnQzMl90KV07CisgICAgfSBtVmVyc2lvbkNsYXNzRmxvdzsgICAgICAgICAgIC8vLzwgVmVyc2lvbiwgQ2xhc3MsIEZsb3cgTGFiZWwKKyAgICB1aW50MTZfdCAgICAgIG1QYXlsb2FkTGVuZ3RoOyAgLy8vPCBQYXlsb2FkIExlbmd0aAorICAgIHVpbnQ4X3QgICAgICAgbU5leHRIZWFkZXI7ICAgICAvLy88IE5leHQgSGVhZGVyCisgICAgdWludDhfdCAgICAgICBtSG9wTGltaXQ7ICAgICAgIC8vLzwgSG9wIExpbWl0CisgICAgb3RJcDZBZGRyZXNzICBtU291cmNlOyAgICAgICAgIC8vLzwgU291cmNlCisgICAgb3RJcDZBZGRyZXNzICBtRGVzdGluYXRpb247ICAgIC8vLzwgRGVzdGluYXRpb24KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEhlYWRlcjogcHJpdmF0ZSBIZWFkZXJQb0QKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgSVB2NiBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtVmVyc2lvbkNsYXNzRmxvdy5tMzJbMF0gPSAwOyBtVmVyc2lvbkNsYXNzRmxvdy5tOFswXSA9IGtWZXJzaW9uNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIElQdjYgaGVhZGVyIGFuZCBzZXRzIFZlcnNpb24sIFRyYWZmaWMgQ29udHJvbCBhbmQgRmxvdyBMYWJlbCBmaWVsZHMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodWludDMyX3QgYVZlcnNpb25DbGFzc0Zsb3cpIHsgbVZlcnNpb25DbGFzc0Zsb3cubTMyWzBdID0gSG9zdFN3YXAzMihhVmVyc2lvbkNsYXNzRmxvdyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSVB2NiBWZXJzaW9uIGlzIHNldCB0byA2LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIElQdjYgVmVyc2lvbiBpcyBzZXQgdG8gNi4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgSVB2NiBWZXJzaW9uIGlzIG5vdCBzZXQgdG8gNi4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWZXJzaW9uNih2b2lkKSBjb25zdCB7IHJldHVybiAobVZlcnNpb25DbGFzc0Zsb3cubThbMF0gJiBrVmVyc2lvbk1hc2spID09IGtWZXJzaW9uNjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBQYXlsb2FkIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGF5bG9hZExlbmd0aCh2b2lkKSB7IHJldHVybiBIb3N0U3dhcDE2KG1QYXlsb2FkTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBQYXlsb2FkIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQYXlsb2FkTGVuZ3RoKHVpbnQxNl90IGFMZW5ndGgpIHsgbVBheWxvYWRMZW5ndGggPSBIb3N0U3dhcDE2KGFMZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgTmV4dCBIZWFkZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBJcFByb3RvIEdldE5leHRIZWFkZXIodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXBQcm90bz4obU5leHRIZWFkZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5leHRIZWFkZXIgIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXh0SGVhZGVyKElwUHJvdG8gYU5leHRIZWFkZXIpIHsgbU5leHRIZWFkZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhTmV4dEhlYWRlcik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgSG9wIExpbWl0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgSG9wIExpbWl0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIb3BMaW1pdCh2b2lkKSBjb25zdCB7IHJldHVybiBtSG9wTGltaXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgSG9wIExpbWl0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUhvcExpbWl0ICBUaGUgSVB2NiBIb3AgTGltaXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEhvcExpbWl0KHVpbnQ4X3QgYUhvcExpbWl0KSB7IG1Ib3BMaW1pdCA9IGFIb3BMaW1pdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IFNvdXJjZSBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzcyAmR2V0U291cmNlKHZvaWQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFkZHJlc3MgJj4obVNvdXJjZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgU291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU291cmNlICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U291cmNlKGNvbnN0IEFkZHJlc3MgJmFTb3VyY2UpIHsgbVNvdXJjZSA9IGFTb3VyY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IERlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBBZGRyZXNzICZHZXREZXN0aW5hdGlvbih2b2lkKSB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGRyZXNzICY+KG1EZXN0aW5hdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgRGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGVzdGluYXRpb24oY29uc3QgQWRkcmVzcyAmYURlc3RpbmF0aW9uKSB7IG1EZXN0aW5hdGlvbiA9IGFEZXN0aW5hdGlvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIGZpZWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJUHY2IFBheWxvYWQgTGVuZ3RoIGZpZWxkLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgR2V0UGF5bG9hZExlbmd0aE9mZnNldCh2b2lkKSB7IHJldHVybiBvZmZzZXRvZihIZWFkZXJQb0QsIG1QYXlsb2FkTGVuZ3RoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBJUHY2IEhvcCBMaW1pdCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBieXRlIG9mZnNldCBvZiB0aGUgSVB2NiBIb3AgTGltaXQgZmllbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBHZXRIb3BMaW1pdE9mZnNldCh2b2lkKSB7IHJldHVybiBvZmZzZXRvZihIZWFkZXJQb0QsIG1Ib3BMaW1pdCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBJUHY2IEhvcCBMaW1pdCBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBJUHY2IEhvcCBMaW1pdCBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IEdldEhvcExpbWl0U2l6ZSh2b2lkKSB7IHJldHVybiBzaXplb2YodWludDhfdCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgSVB2NiBEZXN0aW5hdGlvbiBmaWVsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBieXRlIG9mZnNldCBvZiB0aGUgSVB2NiBEZXN0aW5hdGlvbiBmaWVsZC4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IEdldERlc3RpbmF0aW9uT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIG9mZnNldG9mKEhlYWRlclBvRCwgbURlc3RpbmF0aW9uKTsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtWZXJzaW9uNiA9IDB4NjAsCisgICAgICAgIGtWZXJzaW9uTWFzayA9IDB4ZjAsCisgICAgfTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcHJvY2Vzc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBFeHRlbnNpb25IZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgTmV4dCBIZWFkZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBJcFByb3RvIEdldE5leHRIZWFkZXIodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXBQcm90bz4obU5leHRIZWFkZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5leHRIZWFkZXIgIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXh0SGVhZGVyKElwUHJvdG8gYU5leHRIZWFkZXIpIHsgbU5leHRIZWFkZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhTmV4dEhlYWRlcik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgSGVhZGVyIEV4dGVuc2lvbiBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSVB2NiBIZWFkZXIgRXh0ZW5zaW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgSGVhZGVyIEV4dGVuc2lvbiBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgSVB2NiBIZWFkZXIgRXh0ZW5zaW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVuZ3RoKHVpbnQ4X3QgYUxlbmd0aCkgeyBtTGVuZ3RoID0gYUxlbmd0aDsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5leHRIZWFkZXI7CisgICAgdWludDhfdCBtTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIElQdjYgSG9wLWJ5LUhvcCBPcHRpb25zIEhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEhvcEJ5SG9wSGVhZGVyOiBwdWJsaWMgRXh0ZW5zaW9uSGVhZGVyCit7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiBPcHRpb25zIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgT3B0aW9uSGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqLworICAgIE9wdGlvbkhlYWRlcih2b2lkKToKKyAgICAgICAgbVR5cGUoMCksCisgICAgICAgIG1MZW5ndGgoMCkge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElQdjYgT3B0aW9uIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSVB2NiBPcHRpb24gVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBPcHRpb24gVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgSVB2NiBPcHRpb24gVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZSh1aW50OF90IGFUeXBlKSB7IG1UeXBlID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIElQdjYgT3B0aW9uIFR5cGUgYWN0aW9ucyBmb3IgdW5yZWNvZ25pemVkIElQdjYgT3B0aW9ucy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gQWN0aW9uCisgICAgeworICAgICAgICBrQWN0aW9uU2tpcCAgICAgID0gMHgwMCwgIC8vLzwgc2tpcCBvdmVyIHRoaXMgb3B0aW9uIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBoZWFkZXIKKyAgICAgICAga0FjdGlvbkRpc2NhcmQgICA9IDB4NDAsICAvLy88IGRpc2NhcmQgdGhlIHBhY2tldAorICAgICAgICBrQWN0aW9uRm9yY2VJY21wID0gMHg4MCwgIC8vLzwgZGlzY2FyZCB0aGUgcGFja2V0IGFuZCBmb3JjaWJseSBzZW5kIGFuIElDTVAgUGFyYW1ldGVyIFByb2JsZW0KKyAgICAgICAga0FjdGlvbkljbXAgICAgICA9IDB4YzAsICAvLy88IGRpc2NhcmQgcGFja2V0IGFuZCBjb25kaXRpb25hbGx5IHNlbmQgYW4gSUNNUCBQYXJhbWV0ZXIgUHJvYmxlbQorICAgICAgICBrQWN0aW9uTWFzayAgICAgID0gMHhjMCwgIC8vLzwgbWFzayBmb3IgYWN0aW9uIGJpdHMKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBPcHRpb24gYWN0aW9uIGZvciB1bnJlY29nbml6ZWQgSVB2NiBPcHRpb25zLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgT3B0aW9uIGFjdGlvbiBmb3IgdW5yZWNvZ25pemVkIElQdjYgT3B0aW9ucy4KKyAgICAgKgorICAgICAqLworICAgIEFjdGlvbiBHZXRBY3Rpb24odm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWN0aW9uPihtVHlwZSAmIGtBY3Rpb25NYXNrKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBPcHRpb24gTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgT3B0aW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZW5ndGg7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElQdjYgT3B0aW9uIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBJUHY2IE9wdGlvbiBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlbmd0aCh1aW50OF90IGFMZW5ndGgpIHsgbUxlbmd0aCA9IGFMZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1UeXBlOworICAgIHVpbnQ4X3QgbUxlbmd0aDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IFBhZE4gT3B0aW9uIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgT3B0aW9uUGFkTiA6IHB1YmxpYyBPcHRpb25IZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSA9IDB4MDEsICAgICAgLy8vPCBQYWROIHR5cGUKKyAgICAgICAga0RhdGEgPSAweDAwLCAgICAgIC8vLzwgUGFkTiBzcGVjaWZpYyBkYXRhCisgICAgICAgIGtNYXhMZW5ndGggPSAweDA1ICAvLy88IE1heGltdW0gbGVuZ3RoIG9mIFBhZE4gb3B0aW9uIGRhdGEKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFBhZE4gaGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhZExlbmd0aCAgVGhlIGxlbmd0aCBvZiBuZWVkZWQgcGFkZGluZy4gQWxsb3dlZCB2YWx1ZSBmcm9tCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgMi03LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHVpbnQ4X3QgYVBhZExlbmd0aCkgeworICAgICAgICBPcHRpb25IZWFkZXI6OlNldFR5cGUoa1R5cGUpOworICAgICAgICBPcHRpb25IZWFkZXI6OlNldExlbmd0aChhUGFkTGVuZ3RoIC0gc2l6ZW9mKE9wdGlvbkhlYWRlcikpOworICAgICAgICBtZW1zZXQobVBhZCwga0RhdGEsIGFQYWRMZW5ndGggLSBzaXplb2YoT3B0aW9uSGVhZGVyKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdG90YWwgSVB2NiBPcHRpb24gTGVuZ3RoIHZhbHVlIGluY2x1ZGluZyBvcHRpb24KKyAgICAgKiBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgSVB2NiBPcHRpb24gTGVuZ3RoLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUb3RhbExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBPcHRpb25IZWFkZXI6OkdldExlbmd0aCgpICsgc2l6ZW9mKE9wdGlvbkhlYWRlcik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1QYWRba01heExlbmd0aF07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiBQYWQxIE9wdGlvbiBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLiBQYWQxIGRvZXMgbm90CisgKiBmb2xsb3dkZWZhdWx0IG9wdGlvbiBoZWFkZXIgc3RydWN0dXJlLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIE9wdGlvblBhZDEKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSA9IDB4MDAKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFBhZDEgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVR5cGUgPSBrVHlwZTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVR5cGU7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBJUHY2IEZyYWdtZW50IEhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEZyYWdtZW50SGVhZGVyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIElQdjYgRnJhZ21lbnQgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbVJlc2VydmVkID0gMDsgbUlkZW50aWZpY2F0aW9uID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBOZXh0IEhlYWRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJUHY2IE5leHQgSGVhZGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgSXBQcm90byBHZXROZXh0SGVhZGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PElwUHJvdG8+KG1OZXh0SGVhZGVyKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBOZXh0IEhlYWRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXh0SGVhZGVyICBUaGUgSVB2NiBOZXh0IEhlYWRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV4dEhlYWRlcihJcFByb3RvIGFOZXh0SGVhZGVyKSB7IG1OZXh0SGVhZGVyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYU5leHRIZWFkZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBGcmFnbWVudCBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRnJhZ21lbnQgT2Zmc2V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0T2Zmc2V0KHZvaWQpIHsgcmV0dXJuIChIb3N0U3dhcDE2KG1PZmZzZXRNb3JlKSAmIGtPZmZzZXRNYXNrKSA+PiBrT2Zmc2V0T2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGcmFnbWVudCBPZmZzZXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT2Zmc2V0ICBUaGUgRnJhZ21lbnQgT2Zmc2V0IHZhbHVlLgorICAgICAqLworICAgIHZvaWQgU2V0T2Zmc2V0KHVpbnQxNl90IGFPZmZzZXQpIHsKKyAgICAgICAgdWludDE2X3QgdG1wID0gSG9zdFN3YXAxNihtT2Zmc2V0TW9yZSk7CisgICAgICAgIHRtcCA9ICh0bXAgJiB+a09mZnNldE1hc2spIHwgKChhT2Zmc2V0IDw8IGtPZmZzZXRPZmZzZXQpICYga09mZnNldE1hc2spOworICAgICAgICBtT2Zmc2V0TW9yZSA9IEhvc3RTd2FwMTYodG1wKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNIGZsYWcgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTSBmbGFnIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc01vcmVGbGFnU2V0KHZvaWQpIHsgcmV0dXJuIEhvc3RTd2FwMTYobU9mZnNldE1vcmUpICYga01vcmVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIE0gZmxhZyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJNb3JlRmxhZyh2b2lkKSB7IG1PZmZzZXRNb3JlID0gSG9zdFN3YXAxNihIb3N0U3dhcDE2KG1PZmZzZXRNb3JlKSAmIH5rTW9yZUZsYWcpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNIGZsYWcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1vcmVGbGFnKHZvaWQpIHsgbU9mZnNldE1vcmUgPSBIb3N0U3dhcDE2KEhvc3RTd2FwMTYobU9mZnNldE1vcmUpIHwga01vcmVGbGFnKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5leHRIZWFkZXI7CisgICAgdWludDhfdCBtUmVzZXJ2ZWQ7CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrT2Zmc2V0T2Zmc2V0ID0gMywKKyAgICAgICAga09mZnNldE1hc2sgPSAweGZmZjgsCisgICAgICAgIGtNb3JlRmxhZyA9IDEsCisgICAgfTsKKyAgICB1aW50MTZfdCBtT2Zmc2V0TW9yZTsKKyAgICB1aW50MzJfdCBtSWRlbnRpZmljYXRpb247Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfSVA2X0hFQURFUlNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9tcGwuY3BwIGIvc3JjL2NvcmUvbmV0L2lwNl9tcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzE4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X21wbC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgTVBMLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiaXA2X21wbC5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKwordm9pZCBNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YTo6R2VuZXJhdGVOZXh0VHJhbnNtaXNzaW9uVGltZSh1aW50MzJfdCBhQ3VycmVudFRpbWUsIHVpbnQ4X3QgYUludGVydmFsKQoreworICAgIC8vIEVtdWxhdGUgVHJpY2tsZSB0aW1lciBiZWhhdmlvciBhbmQgc2V0IHVwIHRoZSBuZXh0IHJldHJhbnNtaXNzaW9uIHdpdGhpbiBbMCxJKSByYW5nZS4KKyAgICB1aW50OF90IHQgPSBvdFBsYXRSYW5kb21HZXQoKSAlIGFJbnRlcnZhbDsKKworICAgIC8vIFNldCB0cmFuc21pc3Npb24gdGltZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGludGVydmFsLgorICAgIFNldFRyYW5zbWlzc2lvblRpbWUoYUN1cnJlbnRUaW1lICsgR2V0SW50ZXJ2YWxPZmZzZXQoKSArIHQpOworICAgIFNldEludGVydmFsT2Zmc2V0KGFJbnRlcnZhbCAtIHQpOworfQorCitNcGw6Ok1wbChJcDYgJmFJcDYpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbVNlZWRTZXRUaW1lcihhSXA2Lm1UaW1lclNjaGVkdWxlciwgJk1wbDo6SGFuZGxlU2VlZFNldFRpbWVyLCB0aGlzKSwKKyAgICBtUmV0cmFuc21pc3Npb25UaW1lcihhSXA2Lm1UaW1lclNjaGVkdWxlciwgJk1wbDo6SGFuZGxlUmV0cmFuc21pc3Npb25UaW1lciwgdGhpcyksCisgICAgbVRpbWVyRXhwaXJhdGlvbnMoMCksCisgICAgbVNlcXVlbmNlKDApLAorICAgIG1TZWVkSWQoMCksCisgICAgbU1hdGNoaW5nQWRkcmVzcyhOVUxMKQoreworICAgIG1lbXNldChtU2VlZFNldCwgMCwgc2l6ZW9mKG1TZWVkU2V0KSk7Cit9CisKK3ZvaWQgTXBsOjpJbml0T3B0aW9uKE9wdGlvbk1wbCAmYU9wdGlvbiwgY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgYU9wdGlvbi5Jbml0KCk7CisgICAgYU9wdGlvbi5TZXRTZXF1ZW5jZShtU2VxdWVuY2UrKyk7CisKKyAgICAvLyBDaGVjayBpZiBTZWVkIElkIGNhbiBiZSBlbGlkZWQuCisgICAgaWYgKG1NYXRjaGluZ0FkZHJlc3MgJiYgYUFkZHJlc3MgPT0gKm1NYXRjaGluZ0FkZHJlc3MpCisgICAgeworICAgICAgICBhT3B0aW9uLlNldFNlZWRJZExlbmd0aChPcHRpb25NcGw6OmtTZWVkSWRMZW5ndGgwKTsKKworICAgICAgICAvLyBEZWNyZWFzZSBkZWZhdWx0IG9wdGlvbiBsZW5ndGguCisgICAgICAgIGFPcHRpb24uU2V0TGVuZ3RoKGFPcHRpb24uR2V0TGVuZ3RoKCkgLSBzaXplb2YobVNlZWRJZCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT3B0aW9uLlNldFNlZWRJZExlbmd0aChPcHRpb25NcGw6OmtTZWVkSWRMZW5ndGgyKTsKKyAgICAgICAgYU9wdGlvbi5TZXRTZWVkSWQobVNlZWRJZCk7CisgICAgfQorfQorCitvdEVycm9yIE1wbDo6VXBkYXRlU2VlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNcGxTZWVkRW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICBpbnQ4X3QgZGlmZjsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBrTnVtU2VlZEVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtU2VlZFNldFtpXS5HZXRMaWZldGltZSgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IGFsbG9jYXRpbmcgZnJvbSB0aGUgZmlyc3QgcG9zc2libGUgZW50cnkgdG8gc3BlZWQgdXAgcHJvY2VzcyBvZiBzZWFyY2hpbmcuCisgICAgICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9ICZtU2VlZFNldFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtU2VlZFNldFtpXS5HZXRTZWVkSWQoKSA9PSBhU2VlZElkKQorICAgICAgICB7CisgICAgICAgICAgICBlbnRyeSA9ICZtU2VlZFNldFtpXTsKKyAgICAgICAgICAgIGRpZmYgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGFTZXF1ZW5jZSAtIGVudHJ5LT5HZXRTZXF1ZW5jZSgpKTsKKworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRpZmYgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChlbnRyeSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgZW50cnktPlNldFNlZWRJZChhU2VlZElkKTsKKyAgICBlbnRyeS0+U2V0U2VxdWVuY2UoYVNlcXVlbmNlKTsKKyAgICBlbnRyeS0+U2V0TGlmZXRpbWUoa1NlZWRFbnRyeUxpZmV0aW1lKTsKKyAgICBtU2VlZFNldFRpbWVyLlN0YXJ0KGtTZWVkRW50cnlMaWZldGltZUR0KTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTXBsOjpVcGRhdGVCdWZmZXJlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSkKK3sKKyAgICBpbnQ4X3QgZGlmZjsKKyAgICBNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YSBtZXNzYWdlTWV0YWRhdGE7CisKKyAgICBNZXNzYWdlICptZXNzYWdlID0gbUJ1ZmZlcmVkTWVzc2FnZVNldC5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbmV4dE1lc3NhZ2UgPSBOVUxMOworCisgICAgLy8gQ2hlY2sgaWYgbXVsdGljYXN0IGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KKyAgICBWZXJpZnlPckV4aXQoR2V0VGltZXJFeHBpcmF0aW9ucygpID4gMCk7CisKKyAgICB3aGlsZSAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5SZWFkRnJvbSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2VNZXRhZGF0YS5HZXRTZWVkSWQoKSA9PSBhU2VlZElkKQorICAgICAgICB7CisgICAgICAgICAgICBkaWZmID0gc3RhdGljX2Nhc3Q8aW50OF90PihhU2VxdWVuY2UgLSBtZXNzYWdlTWV0YWRhdGEuR2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgICAgIGlmIChkaWZmID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9wIHJldHJhbnNtaXR0aW5nIE1QTCBEYXRhIE1lc3NhZ2UgdGhhdCBpcyBjb25zaWRlciB0byBiZSBvbGQuCisgICAgICAgICAgICAgICAgbUJ1ZmZlcmVkTWVzc2FnZVNldC5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZSA9IG5leHRNZXNzYWdlOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTXBsOjpBZGRCdWZmZXJlZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFTZWVkSWQsIHVpbnQ4X3QgYVNlcXVlbmNlLCBib29sIGFJc091dGJvdW5kKQoreworICAgIHVpbnQzMl90IG5vdyA9IFRpbWVyOjpHZXROb3coKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlQ29weSA9IE5VTEw7CisgICAgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEgbWVzc2FnZU1ldGFkYXRhOworICAgIHVpbnQzMl90IG5leHRUcmFuc21pc3Npb25UaW1lOworICAgIHVpbnQ4X3QgaG9wTGltaXQgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KEdldFRpbWVyRXhwaXJhdGlvbnMoKSA+IDApOworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZUNvcHkgPSBhTWVzc2FnZS5DbG9uZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgaWYgKCFhSXNPdXRib3VuZCkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLlJlYWQoSGVhZGVyOjpHZXRIb3BMaW1pdE9mZnNldCgpLCBIZWFkZXI6OkdldEhvcExpbWl0U2l6ZSgpLCAmaG9wTGltaXQpOworICAgICAgICBWZXJpZnlPckV4aXQoaG9wTGltaXQtLSA+IDEsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIG1lc3NhZ2VDb3B5LT5Xcml0ZShIZWFkZXI6OkdldEhvcExpbWl0T2Zmc2V0KCksIEhlYWRlcjo6R2V0SG9wTGltaXRTaXplKCksICZob3BMaW1pdCk7CisgICAgfQorCisgICAgbWVzc2FnZU1ldGFkYXRhLlNldFNlZWRJZChhU2VlZElkKTsKKyAgICBtZXNzYWdlTWV0YWRhdGEuU2V0U2VxdWVuY2UoYVNlcXVlbmNlKTsKKyAgICBtZXNzYWdlTWV0YWRhdGEuU2V0VHJhbnNtaXNzaW9uQ291bnQoYUlzT3V0Ym91bmQgPyAxIDogMCk7CisgICAgbWVzc2FnZU1ldGFkYXRhLkdlbmVyYXRlTmV4dFRyYW5zbWlzc2lvblRpbWUobm93LCBrRGF0YU1lc3NhZ2VJbnRlcnZhbCk7CisKKyAgICAvLyBBcHBlbmQgdGhlIG1lc3NhZ2Ugd2l0aCBNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YSBhbmQgYWRkIGl0IHRvIHRoZSBxdWV1ZS4KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZU1ldGFkYXRhLkFwcGVuZFRvKCptZXNzYWdlQ29weSkpOworICAgIG1CdWZmZXJlZE1lc3NhZ2VTZXQuRW5xdWV1ZSgqbWVzc2FnZUNvcHkpOworCisgICAgaWYgKG1SZXRyYW5zbWlzc2lvblRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgcmVzdGFydGVkIHdpdGggZWFybGllciBmaXJlIHRpbWUuCisgICAgICAgIG5leHRUcmFuc21pc3Npb25UaW1lID0gbVJldHJhbnNtaXNzaW9uVGltZXIuR2V0RmlyZVRpbWUoKTsKKworICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLklzRWFybGllcihuZXh0VHJhbnNtaXNzaW9uVGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0YXJ0KG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3cpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCB0aGUgdGltZXIuCisgICAgICAgIG1SZXRyYW5zbWlzc2lvblRpbWVyLlN0YXJ0KG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3cpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2VDb3B5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlQ29weS0+RnJlZSgpOworICAgIH0KK30KKworb3RFcnJvciBNcGw6OlByb2Nlc3NPcHRpb24oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzLCBib29sIGFJc091dGJvdW5kKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgT3B0aW9uTXBsIG9wdGlvbjsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2Yob3B0aW9uKSwgJm9wdGlvbikgPj0gT3B0aW9uTXBsOjprTWluTGVuZ3RoICYmCisgICAgICAgICAgICAgICAgIChvcHRpb24uR2V0U2VlZElkTGVuZ3RoKCkgPT0gT3B0aW9uTXBsOjprU2VlZElkTGVuZ3RoMCB8fAorICAgICAgICAgICAgICAgICAgb3B0aW9uLkdldFNlZWRJZExlbmd0aCgpID09IE9wdGlvbk1wbDo6a1NlZWRJZExlbmd0aDIpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgaWYgKG9wdGlvbi5HZXRTZWVkSWRMZW5ndGgoKSA9PSBPcHRpb25NcGw6OmtTZWVkSWRMZW5ndGgwKQorICAgIHsKKyAgICAgICAgLy8gUmV0cmlldmUgTVBMIFNlZWQgSWQgZnJvbSB0aGUgSVB2NiBTb3VyY2UgQWRkcmVzcy4KKyAgICAgICAgb3B0aW9uLlNldFNlZWRJZChIb3N0U3dhcDE2KGFBZGRyZXNzLm1GaWVsZHMubTE2WzddKSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgTVBMIERhdGEgTWVzc2FnZXMgaW4gdGhlIE1QTCBCdWZmZXJlZCBTZXQgYWdhaW5zdCBzZXF1ZW5jZSBudW1iZXIuCisgICAgVXBkYXRlQnVmZmVyZWRTZXQob3B0aW9uLkdldFNlZWRJZCgpLCBvcHRpb24uR2V0U2VxdWVuY2UoKSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgTVBMIERhdGEgTWVzc2FnZSBpcyBuZXcuCisgICAgZXJyb3IgPSBVcGRhdGVTZWVkU2V0KG9wdGlvbi5HZXRTZWVkSWQoKSwgb3B0aW9uLkdldFNlcXVlbmNlKCkpOworCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBBZGRCdWZmZXJlZE1lc3NhZ2UoYU1lc3NhZ2UsIG9wdGlvbi5HZXRTZWVkSWQoKSwgb3B0aW9uLkdldFNlcXVlbmNlKCksIGFJc091dGJvdW5kKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYUlzT3V0Ym91bmQpCisgICAgeworICAgICAgICAvLyBJbiBjYXNlIE1QTCBEYXRhIE1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGxvY2FsbHksIGlnbm9yZSBwb3RlbnRpYWwgZXJyb3Igb2YgdGhlIE1QTCBTZWVkIFNldAorICAgICAgICAvLyB0byBhbGxvdyBzdWJzZXF1ZW50IHJldHJhbnNtaXNzaW9ucyB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlci4KKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTXBsOjpIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKCk7Cit9CisKK3ZvaWQgTXBsOjpIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKHZvaWQpCit7CisgICAgdWludDMyX3Qgbm93ID0gVGltZXI6OkdldE5vdygpOworICAgIHVpbnQzMl90IG5leHREZWx0YSA9IDB4ZmZmZmZmZmY7CisgICAgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEgbWVzc2FnZU1ldGFkYXRhOworCisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IG1CdWZmZXJlZE1lc3NhZ2VTZXQuR2V0SGVhZCgpOworICAgIE1lc3NhZ2UgKm5leHRNZXNzYWdlID0gTlVMTDsKKworICAgIHdoaWxlIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBuZXh0TWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKTsKKyAgICAgICAgbWVzc2FnZU1ldGFkYXRhLlJlYWRGcm9tKCptZXNzYWdlKTsKKworICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLklzTGF0ZXIobm93KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXh0IHJldHJhbnNtaXNzaW9uIHRpbWUgYW5kIGNob29zZSB0aGUgbG93ZXN0LgorICAgICAgICAgICAgaWYgKG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3cgPCBuZXh0RGVsdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV4dERlbHRhID0gbWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvblRpbWUoKSAtIG5vdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbiB0aW1lciBleHBpcmF0aW9ucy4KKyAgICAgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5TZXRUcmFuc21pc3Npb25Db3VudChtZXNzYWdlTWV0YWRhdGEuR2V0VHJhbnNtaXNzaW9uQ291bnQoKSArIDEpOworCisgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvbkNvdW50KCkgPCBHZXRUaW1lckV4cGlyYXRpb25zKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTWVzc2FnZSAqbWVzc2FnZUNvcHkgPSBtZXNzYWdlLT5DbG9uZShtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIHNpemVvZihNcGxCdWZmZXJlZE1lc3NhZ2VNZXRhZGF0YSkpOworCisgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VDb3B5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvbkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQ29weS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZU1wbFJldHJhbnNtaXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEdldElwNigpLkVucXVldWVEYXRhZ3JhbSgqbWVzc2FnZUNvcHkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5HZW5lcmF0ZU5leHRUcmFuc21pc3Npb25UaW1lKG5vdywga0RhdGFNZXNzYWdlSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIG1lc3NhZ2VNZXRhZGF0YS5VcGRhdGVJbigqbWVzc2FnZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiByZXRyYW5zbWlzc2lvbiB0aW1lIGlzIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgbG93ZXN0IG9uZS4KKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvblRpbWUoKSAtIG5vdyA8IG5leHREZWx0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5leHREZWx0YSA9IG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25UaW1lKCkgLSBub3c7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1CdWZmZXJlZE1lc3NhZ2VTZXQuRGVxdWV1ZSgqbWVzc2FnZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU1ldGFkYXRhLkdldFRyYW5zbWlzc2lvbkNvdW50KCkgPT0gR2V0VGltZXJFeHBpcmF0aW9ucygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VNZXRhZGF0YS5HZXRUcmFuc21pc3Npb25Db3VudCgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZU1wbFJldHJhbnNtaXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXh0cmEgbWV0YWRhdGEgZnJvbSB0aGUgTVBMIERhdGEgTWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZU1ldGFkYXRhLlJlbW92ZUZyb20oKm1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBHZXRJcDYoKS5FbnF1ZXVlRGF0YWdyYW0oKm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHJldHJhbnNtaXR0aW5nIGlmIHRoZSBudW1iZXIgb2YgdGltZXIgZXhwaXJhdGlvbnMgaXMgYWxyZWFkeSBleGNlZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UgPSBuZXh0TWVzc2FnZTsKKyAgICB9CisKKyAgICBpZiAobmV4dERlbHRhICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICBtUmV0cmFuc21pc3Npb25UaW1lci5TdGFydChuZXh0RGVsdGEpOworICAgIH0KK30KKwordm9pZCBNcGw6OkhhbmRsZVNlZWRTZXRUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlU2VlZFNldFRpbWVyKCk7Cit9CisKK3ZvaWQgTXBsOjpIYW5kbGVTZWVkU2V0VGltZXIodm9pZCkKK3sKKyAgICBib29sIHN0YXJ0VGltZXIgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVNlZWRFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAobVNlZWRTZXRbaV0uR2V0TGlmZXRpbWUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZWVkU2V0W2ldLlNldExpZmV0aW1lKG1TZWVkU2V0W2ldLkdldExpZmV0aW1lKCkgLSAxKTsKKyAgICAgICAgICAgIHN0YXJ0VGltZXIgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXJ0VGltZXIpCisgICAgeworICAgICAgICBtU2VlZFNldFRpbWVyLlN0YXJ0KGtTZWVkRW50cnlMaWZldGltZUR0KTsKKyAgICB9Cit9CisKK01wbCAmTXBsOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBNcGwgJm1wbCA9ICpzdGF0aWNfY2FzdDxNcGwgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTXBsICZtcGwgPSBvdEdldElwNigpLm1NcGw7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBtcGw7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBJcDYKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9tcGwuaHBwIGIvc3JjL2NvcmUvbmV0L2lwNl9tcGwuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzVjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X21wbC5ocHAKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSVA2X01QTF9IUFBfCisjZGVmaW5lIElQNl9NUExfSFBQXworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTVBMLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9oZWFkZXJzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtaXA2LW1wbAorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTVBMLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1QTCBoZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBPcHRpb25NcGw6IHB1YmxpYyBPcHRpb25IZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVHlwZSA9IDB4NmQsICAgIC8qIDAxIDEgMDExMDEgKi8KKyAgICAgICAga01pbkxlbmd0aCA9IDIKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIE1QTCBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeworICAgICAgICBPcHRpb25IZWFkZXI6OlNldFR5cGUoa1R5cGUpOworICAgICAgICBPcHRpb25IZWFkZXI6OlNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE9wdGlvbkhlYWRlcikpOworICAgICAgICBtQ29udHJvbCA9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdG90YWwgTVBMIE9wdGlvbiBsZW5ndGggdmFsdWUgaW5jbHVkaW5nIG9wdGlvbgorICAgICAqIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBJUHY2IE9wdGlvbiBMZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFRvdGFsTGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIE9wdGlvbkhlYWRlcjo6R2V0TGVuZ3RoKCkgKyBzaXplb2YoT3B0aW9uSGVhZGVyKTsgfQorCisgICAgLyoqCisgICAgICogTVBMIFNlZWQgSWQgbGVuZ3Rocy4KKyAgICAgKi8KKyAgICBlbnVtIFNlZWRJZExlbmd0aAorICAgIHsKKyAgICAgICAga1NlZWRJZExlbmd0aDAgID0gMCA8PCA2LCAgLy8vPCAwLWJ5dGUgTVBMIFNlZWQgSWQgTGVuZ3RoLgorICAgICAgICBrU2VlZElkTGVuZ3RoMiAgPSAxIDw8IDYsICAvLy88IDItYnl0ZSBNUEwgU2VlZCBJZCBMZW5ndGguCisgICAgICAgIGtTZWVkSWRMZW5ndGg4ICA9IDIgPDwgNiwgIC8vLzwgOC1ieXRlIE1QTCBTZWVkIElkIExlbmd0aC4KKyAgICAgICAga1NlZWRJZExlbmd0aDE2ID0gMyA8PCA2LCAgLy8vPCAxNi1ieXRlIE1QTCBTZWVkIElkIExlbmd0aC4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZWVkIElkIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFNlZWRJZExlbmd0aCBHZXRTZWVkSWRMZW5ndGgodm9pZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VlZElkTGVuZ3RoPihtQ29udHJvbCAmIGtTZWVkSWRMZW5ndGhNYXNrKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlZWRJZExlbmd0aCAgVGhlIE1QTCBTZWVkIExlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VlZElkTGVuZ3RoKFNlZWRJZExlbmd0aCBhU2VlZElkTGVuZ3RoKSB7IG1Db250cm9sID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oKG1Db250cm9sICYgfmtTZWVkSWRMZW5ndGhNYXNrKSB8IGFTZWVkSWRMZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIE1QTCBNIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIE1QTCBNIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBNUEwgTSBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTWF4RmxhZ1NldCh2b2lkKSB7IHJldHVybiAobUNvbnRyb2wgJiBrTWF4RmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBNUEwgTSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhck1heEZsYWcodm9pZCkgeyBtQ29udHJvbCAmPSB+a01heEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1QTCBNIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1heEZsYWcodm9pZCkgeyBtQ29udHJvbCB8PSBrTWF4RmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKSB7IG1TZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWVkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtU2VlZElkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VlZElkICBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlZWRJZCh1aW50MTZfdCBhU2VlZElkKSB7IG1TZWVkSWQgPSBIb3N0U3dhcDE2KGFTZWVkSWQpOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1NlZWRJZExlbmd0aE1hc2sgPSAzIDw8IDYsCisgICAgICAgIGtNYXhGbGFnID0gMSA8PCA1CisgICAgfTsKKyAgICB1aW50OF90ICBtQ29udHJvbDsKKyAgICB1aW50OF90ICBtU2VxdWVuY2U7CisgICAgdWludDE2X3QgbVNlZWRJZDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBNUEwncyBTZWVkIFNldCBlbnRyeS4KKyAqCisgKi8KK2NsYXNzIE1wbFNlZWRFbnRyeQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U2VlZElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWVkSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlZWRJZCAgVGhlIE1QTCBTZWVkIElkIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWVkSWQodWludDE2X3QgYVNlZWRJZCkgeyBtU2VlZElkID0gYVNlZWRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKSB7IG1TZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgU2V0IGVudHJ5J3MgcmVtYWluaW5nIGxpZmV0aW1lLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1QTCBTZWVkIFNldCBlbnRyeSdzIHJlbWFpbmluZyBsaWZldGltZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlmZXRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbUxpZmV0aW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByZW1haW5pbmcgbGlmZXRpbWUgb2YgdGhlIFNlZWQgU2V0IGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpZmV0aW1lICBUaGUgcmVtYWluaW5nIGxpZmV0aW1lIG9mIHRoZSBTZWVkIFNldCBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlmZXRpbWUodWludDhfdCBhTGlmZXRpbWUpIHsgbUxpZmV0aW1lID0gYUxpZmV0aW1lOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVNlZWRJZDsKKyAgICB1aW50OF90ICBtU2VxdWVuY2U7CisgICAgdWludDhfdCAgbUxpZmV0aW1lOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgbWV0YWRhdGEgcmVxdWlyZWQgZm9yIE1QTCByZXRyYW5zbWlzc2lvbnMuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTXBsQnVmZmVyZWRNZXNzYWdlTWV0YWRhdGEodm9pZCk6CisgICAgICAgIG1TZWVkSWQoMCksCisgICAgICAgIG1TZXF1ZW5jZSgwKSwKKyAgICAgICAgbVRyYW5zbWlzc2lvbkNvdW50KDApLAorICAgICAgICBtVHJhbnNtaXNzaW9uVGltZSgwKSwKKyAgICAgICAgbUludGVydmFsT2Zmc2V0KDApIHsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBNUEwgQnVmZmVyZWQgTWVzc2FnZSBtZXRhZGF0YSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBieXRlcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBncm93IHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRUbyhNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKHRoaXMsIHNpemVvZigqdGhpcykpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyByZXF1ZXN0IGRhdGEgZnJvbSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IFJlYWRGcm9tKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldExlbmd0aCgpIC0gc2l6ZW9mKCp0aGlzKSwgc2l6ZW9mKCp0aGlzKSwgdGhpcyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgTVBMIEJ1ZmZlcmVkIE1lc3NzYWdlIG1ldGFkYXRhIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZUZyb20oTWVzc2FnZSAmYU1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGFNZXNzYWdlLlNldExlbmd0aChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcykpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIE1QTCBCdWZmZXJlZCBNZXNzc2FnZSBtZXRhZGF0YSBpbiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgICAgKgorICAgICAqLworICAgIGludCBVcGRhdGVJbihNZXNzYWdlICZhTWVzc2FnZSkgY29uc3QgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoKnRoaXMpLCBzaXplb2YoKnRoaXMpLCB0aGlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA+IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBtZXNzYWdlIHNoYWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqIEByZXR2YWwgRkFMU0UgIE90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBib29sIElzTGF0ZXIodWludDMyX3QgYVRpbWUpIGNvbnN0IHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1UcmFuc21pc3Npb25UaW1lKSA8IDApOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWVkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlZWRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VlZElkICBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlZWRJZCh1aW50MTZfdCBhU2VlZElkKSB7IG1TZWVkSWQgPSBhU2VlZElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNUEwgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZXF1ZW5jZSAgVGhlIE1QTCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VxdWVuY2UodWludDhfdCBhU2VxdWVuY2UpIHsgbVNlcXVlbmNlID0gYVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxyZWFkeSBwcmVmb3JtZWQgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgYWxyZWFkeSBwcmVmb3JtZWQgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VHJhbnNtaXNzaW9uQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVRyYW5zbWlzc2lvbkNvdW50OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBudW1iZXIgb2YgYWxyZWFkeSBwZXJmb3JtZWQgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUcmFuc21pc3Npb25Db3VudCAgVGhlIG51bWJlciBvZiBhbHJlYWR5IHBlcmZvcm1lZCB0cmFuc21pc3Npb25zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUcmFuc21pc3Npb25Db3VudCh1aW50OF90IGFUcmFuc21pc3Npb25Db3VudCkgeyBtVHJhbnNtaXNzaW9uQ291bnQgPSBhVHJhbnNtaXNzaW9uQ291bnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRyYW5zbWlzc2lvbiB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdHJhbnNtaXNzaW9uIHRpbWVzdGFtcCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFRyYW5zbWlzc2lvblRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVRyYW5zbWlzc2lvblRpbWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHRyYW5zbWlzc2lvbiB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHJhbnNtaXNzaW9uVGltZSAgVGhlIHRyYW5zbWlzc2lvbiB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRyYW5zbWlzc2lvblRpbWUodWludDMyX3QgYVRyYW5zbWlzc2lvblRpbWUpIHsgbVRyYW5zbWlzc2lvblRpbWUgPSBhVHJhbnNtaXNzaW9uVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgb2Zmc2V0IGZyb20gdGhlIHRyYW5zbWlzc2lvbiB0aW1lIHRvIHRoZSBlbmQgb2YgdHJpY2tsZSBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBvZmZzZXQgZnJvbSB0aGUgdGhlIHRyYW5zbWlzc2lvbiB0aW1lIHRvIHRoZSBlbmQgb2YgdHJpY2tsZSBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SW50ZXJ2YWxPZmZzZXQodm9pZCkgY29uc3QgeyByZXR1cm4gbUludGVydmFsT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBvZmZzZXQgZnJvbSB0aGUgdHJhbnNtaXNzaW9uIHRpbWUgdG8gdGhlIGVuZCBvZiB0cmlja2xlIGludGVydmFsLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUludGVydmFsT2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHRoZSB0cmFuc21pc3Npb24gdGltZSB0byB0aGUgZW5kIG9mIHRyaWNrbGUgaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEludGVydmFsT2Zmc2V0KHVpbnQ4X3QgYUludGVydmFsT2Zmc2V0KSB7IG1JbnRlcnZhbE9mZnNldCA9IGFJbnRlcnZhbE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIHRoZSBuZXh0IHRyYW5zbWlzc2lvbiB0aW1lIGZvciB0aGUgTVBMIERhdGEgTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUN1cnJlbnRUaW1lIEN1cnJlbnQgdGltZSAoaW4gbWlsbGlzZWNvbmRzKS4KKyAgICAgKiBAcGFyYW1baW5dIGFJbnRlcnZhbCAgICBUaGUgY3VycmVudCBpbnRlcnZhbCBzaXplIChpbiBtaWxsaXNlY29uZHMpLgorICAgICAqLworICAgIHZvaWQgR2VuZXJhdGVOZXh0VHJhbnNtaXNzaW9uVGltZSh1aW50MzJfdCBhQ3VycmVudFRpbWUsIHVpbnQ4X3QgYUludGVydmFsKTsKKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtU2VlZElkOworICAgIHVpbnQ4X3QgIG1TZXF1ZW5jZTsKKyAgICB1aW50OF90ICBtVHJhbnNtaXNzaW9uQ291bnQ7CisgICAgdWludDMyX3QgbVRyYW5zbWlzc2lvblRpbWU7CisgICAgdWludDhfdCAgbUludGVydmFsT2Zmc2V0OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1QTCBtZXNzYWdlIHByb2Nlc3NpbmcuCisgKgorICovCitjbGFzcyBNcGw6IHB1YmxpYyBJcDZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgTVBMIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTXBsKElwNiAmYUlwNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgTVBMIG9wdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFPcHRpb24gICBBIHJlZmVyZW5jZSB0byB0aGUgTVBMIGhlYWRlciB0byBpbml0aWFsaXplLgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBTb3VyY2UgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdE9wdGlvbihPcHRpb25NcGwgJmFPcHRpb24sIGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyBhbiBNUEwgb3B0aW9uLiBXaGVuIHRoZSBNUEwgbW9kdWxlIGFjdHMgYXMgYW4gTVBMIEZvcndhcmRlcgorICAgICAqIGl0IGRpc3NlbWluYXRlcyBNUEwgRGF0YSBNZXNzYWdlIHVzaW5nIFRyaWNrbGUgdGltZXIgZXhwaXJhdGlvbnMuIFdoZW4gYWN0cyBhcyBhbgorICAgICAqIE1QTCBTZWVkIGl0IGFsbG93cyB0byBzZW5kIHRoZSBmaXJzdCBNUEwgRGF0YSBNZXNzYWdlIGRpcmVjdGx5LCB0aGVuIHNldHMgdXAgVHJpY2tsZQorICAgICAqIHRpbWVyIGV4cGlyYXRpb25zIGZvciBzdWJzZXF1ZW50IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IFNvdXJjZSBBZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFJc091dGJvdW5kIFRSVUUgaWYgdGhpcyBtZXNzYWdlIHdhcyBsb2NhbGx5IGdlbmVyYXRlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHRoZSBNUEwgb3B0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgVGhlIE1QTCBtZXNzYWdlIGlzIGEgZHVwbGljYXRlIGFuZCBzaG91bGQgYmUgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUHJvY2Vzc09wdGlvbihNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MsIGJvb2wgYUlzT3V0Ym91bmQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWVkSWQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlZWRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VlZElkICBUaGUgTVBMIFNlZWQgSWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlZWRJZCh1aW50MTZfdCBhU2VlZElkKSB7IG1TZWVkSWQgPSBhU2VlZElkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBNUEwgbnVtYmVyIG9mIFRyaWNrbGUgdGltZXIgZXhwaXJhdGlvbnMgdGhhdCBvY2N1ciBiZWZvcmUKKyAgICAgKiB0ZXJtaW5hdGluZyB0aGUgVHJpY2tsZSBhbGdvcml0aG0ncyByZXRyYW5zbWlzc2lvbiBvZiBhIGdpdmVuIE1QTCBEYXRhIE1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTVBMIG51bWJlciBvZiBUcmlja2xlIHRpbWVyIGV4cGlyYXRpb25zLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRUaW1lckV4cGlyYXRpb25zKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1UaW1lckV4cGlyYXRpb25zOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNUEwgbnVtYmVyIG9mIFRyaWNrbGUgdGltZXIgZXhwaXJhdGlvbnMgdGhhdCBvY2N1ciBiZWZvcmUKKyAgICAgKiB0ZXJtaW5hdGluZyB0aGUgVHJpY2tsZSBhbGdvcml0aG0ncyByZXRyYW5zbWlzc2lvbiBvZiBhIGdpdmVuIE1QTCBEYXRhIE1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZXJFeHBpcmF0aW9ucyAgVGhlIG51bWJlciBvZiBUcmlja2xlIHRpbWVyIGV4cGlyYXRpb25zLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lckV4cGlyYXRpb25zKHVpbnQ4X3QgYVRpbWVyRXhwaXJhdGlvbnMpIHsgbVRpbWVyRXhwaXJhdGlvbnMgPSBhVGltZXJFeHBpcmF0aW9uczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBtYXRjaGluZyBhZGRyZXNzLCB0aGF0IGFsbG93cyB0byBlbGlkZSBNUEwgU2VlZCBJZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUFkZHJlc3MgVGhlIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBtYXRjaGluZyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYXRjaGluZ0FkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIHsgbU1hdGNoaW5nQWRkcmVzcyA9ICZhQWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyZWQgbWVzc2FnZSBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyZWQgbWVzc2FnZSBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldEJ1ZmZlcmVkTWVzc2FnZVNldCh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVmZmVyZWRNZXNzYWdlU2V0OyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga051bVNlZWRFbnRyaWVzID0gT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJJRVMsCisgICAgICAgIGtTZWVkRW50cnlMaWZldGltZSA9IE9QRU5USFJFQURfQ09ORklHX01QTF9TRUVEX1NFVF9FTlRSWV9MSUZFVElNRSwKKyAgICAgICAga1NlZWRFbnRyeUxpZmV0aW1lRHQgPSAxMDAwLAorICAgICAgICBrRGF0YU1lc3NhZ2VJbnRlcnZhbCA9IDY0CisgICAgfTsKKworICAgIG90RXJyb3IgVXBkYXRlU2VlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSk7CisgICAgdm9pZCBVcGRhdGVCdWZmZXJlZFNldCh1aW50MTZfdCBhU2VlZElkLCB1aW50OF90IGFTZXF1ZW5jZSk7CisgICAgdm9pZCBBZGRCdWZmZXJlZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFTZWVkSWQsIHVpbnQ4X3QgYVNlcXVlbmNlLCBib29sIGFJc091dGJvdW5kKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNlZWRTZXRUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVNlZWRTZXRUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJldHJhbnNtaXNzaW9uVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVSZXRyYW5zbWlzc2lvblRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIE1wbCAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgVGltZXIgbVNlZWRTZXRUaW1lcjsKKyAgICBUaW1lciBtUmV0cmFuc21pc3Npb25UaW1lcjsKKworICAgIHVpbnQ4X3QgbVRpbWVyRXhwaXJhdGlvbnM7CisgICAgdWludDhfdCBtU2VxdWVuY2U7CisgICAgdWludDE2X3QgbVNlZWRJZDsKKyAgICBjb25zdCBBZGRyZXNzICptTWF0Y2hpbmdBZGRyZXNzOworCisgICAgTXBsU2VlZEVudHJ5IG1TZWVkU2V0W2tOdW1TZWVkRW50cmllc107CisgICAgTWVzc2FnZVF1ZXVlIG1CdWZmZXJlZE1lc3NhZ2VTZXQ7Cit9OworCisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUX0lQNl9NUExfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L2lwNl9yb3V0ZXMuY3BwIGIvc3JjL2NvcmUvbmV0L2lwNl9yb3V0ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDViNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvaXA2X3JvdXRlcy5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgSVB2NiByb3V0ZSB0YWJsZXMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJpcDZfcm91dGVzLmhwcCIKKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBJcDYgeworCitSb3V0ZXM6OlJvdXRlcyhJcDYgJmFJcDYpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbVJvdXRlcyhOVUxMKQoreworfQorCitvdEVycm9yIFJvdXRlczo6QWRkKFJvdXRlICZhUm91dGUpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKFJvdXRlICpjdXIgPSBtUm91dGVzOyBjdXI7IGN1ciA9IGN1ci0+bU5leHQpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoY3VyICE9ICZhUm91dGUsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgfQorCisgICAgYVJvdXRlLm1OZXh0ID0gbVJvdXRlczsKKyAgICBtUm91dGVzID0gJmFSb3V0ZTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgUm91dGVzOjpSZW1vdmUoUm91dGUgJmFSb3V0ZSkKK3sKKyAgICBpZiAoJmFSb3V0ZSA9PSBtUm91dGVzKQorICAgIHsKKyAgICAgICAgbVJvdXRlcyA9IGFSb3V0ZS5tTmV4dDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChSb3V0ZSAqY3VyID0gbVJvdXRlczsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3VyLT5tTmV4dCA9PSAmYVJvdXRlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ci0+bU5leHQgPSBhUm91dGUubU5leHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhUm91dGUubU5leHQgPSBOVUxMOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2ludDhfdCBSb3V0ZXM6Okxvb2t1cChjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24pCit7CisgICAgaW50OF90IG1heFByZWZpeE1hdGNoID0gLTE7CisgICAgdWludDhfdCBwcmVmaXhNYXRjaDsKKyAgICBpbnQ4X3QgcnZhbCA9IC0xOworCisgICAgZm9yIChSb3V0ZSAqY3VyID0gbVJvdXRlczsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgIHsKKyAgICAgICAgcHJlZml4TWF0Y2ggPSBjdXItPm1QcmVmaXguUHJlZml4TWF0Y2goYURlc3RpbmF0aW9uKTsKKworICAgICAgICBpZiAocHJlZml4TWF0Y2ggPCBjdXItPm1QcmVmaXhMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByZWZpeE1hdGNoID4gY3VyLT5tUHJlZml4TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXhNYXRjaCA9IGN1ci0+bVByZWZpeExlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXhQcmVmaXhNYXRjaCA+IHN0YXRpY19jYXN0PGludDhfdD4ocHJlZml4TWF0Y2gpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1heFByZWZpeE1hdGNoID0gc3RhdGljX2Nhc3Q8aW50OF90PihwcmVmaXhNYXRjaCk7CisgICAgICAgIHJ2YWwgPSBjdXItPm1JbnRlcmZhY2VJZDsKKyAgICB9CisKKyAgICBmb3IgKE5ldGlmICpuZXRpZiA9IEdldElwNigpLkdldE5ldGlmTGlzdCgpOyBuZXRpZjsgbmV0aWYgPSBuZXRpZi0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLT5Sb3V0ZUxvb2t1cChhU291cmNlLCBhRGVzdGluYXRpb24sICZwcmVmaXhNYXRjaCkgPT0gT1RfRVJST1JfTk9ORSAmJgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50OF90PihwcmVmaXhNYXRjaCkgPiBtYXhQcmVmaXhNYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgbWF4UHJlZml4TWF0Y2ggPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHByZWZpeE1hdGNoKTsKKyAgICAgICAgICAgIHJ2YWwgPSBuZXRpZi0+R2V0SW50ZXJmYWNlSWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9pcDZfcm91dGVzLmhwcCBiL3NyYy9jb3JlL25ldC9pcDZfcm91dGVzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjJhMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L2lwNl9yb3V0ZXMuaHBwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElQNl9ST1VURVNfSFBQXworI2RlZmluZSBJUDZfUk9VVEVTX0hQUF8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBJUHY2IHJvdXRpbmcgdGFibGVzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9yb3V0ZXMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKK2NsYXNzIElwNjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYW4gSVB2NiByb3V0ZS4KKyAqCisgKi8KK3N0cnVjdCBSb3V0ZQoreworICAgIEFkZHJlc3MgICAgICAgbVByZWZpeDsgICAgICAgIC8vLzwgVGhlIElQdjYgcHJlZml4LgorICAgIHVpbnQ4X3QgICAgICAgbVByZWZpeExlbmd0aDsgIC8vLzwgVGhlIElQdjYgcHJlZml4IGxlbmd0aC4KKyAgICBpbnQ4X3QgICAgICAgIG1JbnRlcmZhY2VJZDsgICAvLy88IFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllci4KKyAgICBzdHJ1Y3QgUm91dGUgKm1OZXh0OyAgICAgICAgICAvLy88IEEgcG9pbnRlciB0byB0aGUgbmV4dCBJUHY2IHJvdXRlLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiByb3V0ZSBtYW5hZ2VtZW50LgorICoKKyAqLworY2xhc3MgUm91dGVzOiBwdWJsaWMgSXA2TG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgUm91dGVzKElwNiAmYUlwNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIElQdjYgcm91dGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGUgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHJvdXRlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIHJvdXRlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHJvdXRlIHdhcyBhbHJlYWR5IGFkZGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGQoUm91dGUgJmFSb3V0ZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFuIElQdjYgcm91dGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGUgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHJvdXRlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSByb3V0ZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIHJvdXRlIHdhcyBub3QgYWRkZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZShSb3V0ZSAmYVJvdXRlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHNvdXJjZS1kZXN0aW5hdGlvbiByb3V0ZSBsb29rdXAuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU291cmNlICAgICAgIFRoZSBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFEZXN0aW5hdGlvbiAgVGhlIElQdjYgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciBmb3IgdGhlIGJlc3Qgcm91dGUgb3IgLTEgaWYgbm8gcm91dGUgaXMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IExvb2t1cChjb25zdCBBZGRyZXNzICZhU291cmNlLCBjb25zdCBBZGRyZXNzICZhRGVzdGluYXRpb24pOworCitwcml2YXRlOgorICAgIFJvdXRlICptUm91dGVzOworfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfSVA2X1JPVVRFU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvbmV0aWYuY3BwIGIvc3JjL2NvcmUvbmV0L25ldGlmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDlkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L25ldGlmLmNwcApAQCAtMCwwICsxLDQ4MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBJUHY2IG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAqLworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuZXRpZi5ocHAiCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIElwNiB7CisKK05ldGlmOjpOZXRpZihJcDYgJmFJcDYsIGludDhfdCBhSW50ZXJmYWNlSWQpOgorICAgIElwNkxvY2F0b3IoYUlwNiksCisgICAgbUNhbGxiYWNrcyhOVUxMKSwKKyAgICBtVW5pY2FzdEFkZHJlc3NlcyhOVUxMKSwKKyAgICBtTXVsdGljYXN0QWRkcmVzc2VzKE5VTEwpLAorICAgIG1JbnRlcmZhY2VJZChhSW50ZXJmYWNlSWQpLAorICAgIG1BbGxSb3V0ZXJzU3Vic2NyaWJlZChmYWxzZSksCisgICAgbU11bHRpY2FzdFByb21pc2N1b3VzKGZhbHNlKSwKKyAgICBtU3RhdGVDaGFuZ2VkVGFzayhhSXA2Lm1UYXNrbGV0U2NoZWR1bGVyLCAmTmV0aWY6OkhhbmRsZVN0YXRlQ2hhbmdlZFRhc2ssIHRoaXMpLAorICAgIG1OZXh0KE5VTEwpLAorICAgIG1TdGF0ZUNoYW5nZWRGbGFncygwKQoreworI2lmIE9QRU5USFJFQURfQ09ORklHX05FU1RfU1RBWV9TVUJTQ1JJQkVEX1RPX0FMTF9ST1VURVJTX01VTFRJQ0FTVF9BRERSCisgICAgbUFsbFJvdXRlcnNTdWJzY3JpYmVkID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YobUV4dFVuaWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRVbmljYXN0QWRkcmVzc2VzWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgLy8gVG8gbWFyayB0aGUgYWRkcmVzcyBhcyB1bnVzZWQvYXZhaWxhYmxlLCBzZXQgdGhlIGBtTmV4dGAgdG8gcG9pbnQgYmFjayB0byBpdHNlbGYuCisgICAgICAgIG1FeHRVbmljYXN0QWRkcmVzc2VzW2ldLm1OZXh0ID0gJm1FeHRVbmljYXN0QWRkcmVzc2VzW2ldOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKG1FeHRNdWx0aWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbMF0pOyBpKyspCisgICAgeworICAgICAgICAvLyBUbyBtYXJrIHRoZSBhZGRyZXNzIGFzIHVudXNlZC9hdmFpbGFibGUsIHNldCB0aGUgYG1OZXh0YCB0byBwb2ludCBiYWNrIHRvIGl0c2VsZi4KKyAgICAgICAgbUV4dE11bHRpY2FzdEFkZHJlc3Nlc1tpXS5tTmV4dCA9ICZtRXh0TXVsdGljYXN0QWRkcmVzc2VzW2ldOworICAgIH0KK30KKworb3RFcnJvciBOZXRpZjo6UmVnaXN0ZXJDYWxsYmFjayhOZXRpZkNhbGxiYWNrICZhQ2FsbGJhY2spCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKE5ldGlmQ2FsbGJhY2sgKmN1ciA9IG1DYWxsYmFja3M7IGN1cjsgY3VyID0gY3VyLT5tTmV4dCkKKyAgICB7CisgICAgICAgIGlmIChjdXIgPT0gJmFDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworICAgICAgICB9CisgICAgfQorCisgICAgYUNhbGxiYWNrLm1OZXh0ID0gbUNhbGxiYWNrczsKKyAgICBtQ2FsbGJhY2tzID0gJmFDYWxsYmFjazsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmV0aWY6OlJlbW92ZUNhbGxiYWNrKE5ldGlmQ2FsbGJhY2sgJmFDYWxsYmFjaykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWTsKKyAgICBOZXRpZkNhbGxiYWNrICpwcmV2ID0gTlVMTDsKKworICAgIGZvciAoTmV0aWZDYWxsYmFjayAqY3VyID0gbUNhbGxiYWNrczsgY3VyOyBjdXIgPSBjdXItPm1OZXh0KQorICAgIHsKKyAgICAgICAgaWYgKGN1ciA9PSAmYUNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJldikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmV2LT5tTmV4dCA9IGN1ci0+bU5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcyA9IG1DYWxsYmFja3MtPm1OZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXItPm1OZXh0ID0gTlVMTDsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcHJldiA9IGN1cjsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgTmV0aWY6OklzTXVsdGljYXN0U3Vic2NyaWJlZChjb25zdCBBZGRyZXNzICZhQWRkcmVzcykgY29uc3QKK3sKKyAgICBib29sIHJ2YWwgPSBmYWxzZTsKKworICAgIGlmIChhQWRkcmVzcy5Jc0xpbmtMb2NhbEFsbE5vZGVzTXVsdGljYXN0KCkgfHwgYUFkZHJlc3MuSXNSZWFsbUxvY2FsQWxsTm9kZXNNdWx0aWNhc3QoKSB8fAorICAgICAgICBhQWRkcmVzcy5Jc1JlYWxtTG9jYWxBbGxNcGxGb3J3YXJkZXJzKCkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYUFkZHJlc3MuSXNMaW5rTG9jYWxBbGxSb3V0ZXJzTXVsdGljYXN0KCkgfHwgYUFkZHJlc3MuSXNSZWFsbUxvY2FsQWxsUm91dGVyc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gbUFsbFJvdXRlcnNTdWJzY3JpYmVkKTsKKyAgICB9CisKKyAgICBmb3IgKE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqY3VyID0gbU11bHRpY2FzdEFkZHJlc3NlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChtZW1jbXAoJmN1ci0+bUFkZHJlc3MsICZhQWRkcmVzcywgc2l6ZW9mKGN1ci0+bUFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBOZXRpZjo6U3Vic2NyaWJlTXVsdGljYXN0KE5ldGlmTXVsdGljYXN0QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqY3VyID0gbU11bHRpY2FzdEFkZHJlc3NlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXIgPT0gJmFBZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhQWRkcmVzcy5tTmV4dCA9IG1NdWx0aWNhc3RBZGRyZXNzZXM7CisgICAgbU11bHRpY2FzdEFkZHJlc3NlcyA9ICZhQWRkcmVzczsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmV0aWY6OlVuc3Vic2NyaWJlTXVsdGljYXN0KGNvbnN0IE5ldGlmTXVsdGljYXN0QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAobU11bHRpY2FzdEFkZHJlc3NlcyA9PSAmYUFkZHJlc3MpCisgICAgeworICAgICAgICBtTXVsdGljYXN0QWRkcmVzc2VzID0gbU11bHRpY2FzdEFkZHJlc3Nlcy0+R2V0TmV4dCgpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorICAgIGVsc2UgaWYgKG1NdWx0aWNhc3RBZGRyZXNzZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZvciAoTmV0aWZNdWx0aWNhc3RBZGRyZXNzICpjdXIgPSBtTXVsdGljYXN0QWRkcmVzc2VzOyBjdXItPkdldE5leHQoKTsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjdXItPm1OZXh0ID09ICZhQWRkcmVzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdXItPm1OZXh0ID0gYUFkZHJlc3MubU5leHQ7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldGlmOjpTdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdChjb25zdCBBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBOZXRpZk11bHRpY2FzdEFkZHJlc3MgKmVudHJ5OworICAgIHNpemVfdCBudW0gPSBzaXplb2YobUV4dE11bHRpY2FzdEFkZHJlc3NlcykgLyBzaXplb2YobUV4dE11bHRpY2FzdEFkZHJlc3Nlc1swXSk7CisKKyAgICBpZiAoSXNNdWx0aWNhc3RTdWJzY3JpYmVkKGFBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICB9CisKKyAgICAvLyBGaW5kIGFuIGF2YWlsYWJsZSBlbnRyeSBpbiB0aGUgYG1FeHRNdWx0aWNhc3RBZGRyZXNzZXNgIGFycmF5LgorICAgIGZvciAoZW50cnkgPSAmbUV4dE11bHRpY2FzdEFkZHJlc3Nlc1swXTsgbnVtID4gMDsgbnVtLS0sIGVudHJ5KyspCisgICAgeworICAgICAgICAvLyBJbiBhbiB1bnVzZWQvYXZhaWxhYmxlIGVudHJ5LCBgbU5leHRgIHBvaW50cyBiYWNrIHRvIHRoZSBlbnRyeSBpdHNlbGYuCisgICAgICAgIGlmIChlbnRyeS0+bU5leHQgPT0gZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KG51bSA+IDAsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICAvLyBDb3B5IHRoZSBhZGRyZXNzIGludG8gdGhlIGF2YWlsYWJsZSBlbnRyeSBhbmQgYWRkIGl0IHRvIGxpbmtlZC1saXN0LgorICAgIGVudHJ5LT5tQWRkcmVzcyA9IGFBZGRyZXNzOworICAgIGVudHJ5LT5tTmV4dCA9IG1NdWx0aWNhc3RBZGRyZXNzZXM7CisgICAgbU11bHRpY2FzdEFkZHJlc3NlcyA9IGVudHJ5OworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOZXRpZjo6VW5zdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdChjb25zdCBBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBOZXRpZk11bHRpY2FzdEFkZHJlc3MgKmVudHJ5OworICAgIE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqbGFzdCA9IE5VTEw7CisgICAgc2l6ZV90IG51bSA9IHNpemVvZihtRXh0TXVsdGljYXN0QWRkcmVzc2VzKSAvIHNpemVvZihtRXh0TXVsdGljYXN0QWRkcmVzc2VzWzBdKTsKKworICAgIGZvciAoZW50cnkgPSBtTXVsdGljYXN0QWRkcmVzc2VzOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKG1lbWNtcCgmZW50cnktPm1BZGRyZXNzLCAmYUFkZHJlc3MsIHNpemVvZihvdElwNkFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGVudHJ5ID49ICZtRXh0TXVsdGljYXN0QWRkcmVzc2VzWzBdKSAmJiAoZW50cnkgPCAmbUV4dE11bHRpY2FzdEFkZHJlc3Nlc1tudW1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAgICAgICAgIGlmIChsYXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxhc3QtPm1OZXh0ID0gZW50cnktPkdldE5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTXVsdGljYXN0QWRkcmVzc2VzID0gZW50cnktPkdldE5leHQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gZW50cnk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFRvIG1hcmsgdGhlIGFkZHJlc3MgZW50cnkgYXMgdW51c2VkL2F2YWlsYWJsZSwgc2V0IHRoZSBgbU5leHRgIHBvaW50ZXIgYmFjayB0byB0aGUgZW50cnkgaXRzZWxmLgorICAgIGVudHJ5LT5tTmV4dCA9IGVudHJ5OworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBOZXRpZjo6VW5zdWJzY3JpYmVBbGxFeHRlcm5hbE11bHRpY2FzdEFkZHJlc3Nlcyh2b2lkKQoreworICAgIHNpemVfdCBudW0gPSBzaXplb2YobUV4dE11bHRpY2FzdEFkZHJlc3NlcykgLyBzaXplb2YobUV4dE11bHRpY2FzdEFkZHJlc3Nlc1swXSk7CisKKyAgICBmb3IgKE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqZW50cnkgPSAmbUV4dE11bHRpY2FzdEFkZHJlc3Nlc1swXTsgbnVtID4gMDsgbnVtLS0sIGVudHJ5KyspCisgICAgeworICAgICAgICAvLyBJbiB1bnVzZWQgZW50cmllcywgdGhlIGBtTmV4dGAgcG9pbnRzIGJhY2sgdG8gdGhlIGVudHJ5IGl0c2VsZi4KKyAgICAgICAgaWYgKGVudHJ5LT5tTmV4dCAhPSBlbnRyeSkKKyAgICAgICAgeworICAgICAgICAgICAgVW5zdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdCgqc3RhdGljX2Nhc3Q8QWRkcmVzcyAqPigmZW50cnktPm1BZGRyZXNzKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290RXJyb3IgTmV0aWY6OkFkZFVuaWNhc3RBZGRyZXNzKE5ldGlmVW5pY2FzdEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChOZXRpZlVuaWNhc3RBZGRyZXNzICpjdXIgPSBtVW5pY2FzdEFkZHJlc3NlczsgY3VyOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXIgPT0gJmFBZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhQWRkcmVzcy5tTmV4dCA9IG1VbmljYXN0QWRkcmVzc2VzOworICAgIG1VbmljYXN0QWRkcmVzc2VzID0gJmFBZGRyZXNzOworCisgICAgU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoYUFkZHJlc3MubVJsb2MgPyBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEIDogT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19BRERFRCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldGlmOjpSZW1vdmVVbmljYXN0QWRkcmVzcyhjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChtVW5pY2FzdEFkZHJlc3NlcyA9PSAmYUFkZHJlc3MpCisgICAgeworICAgICAgICBtVW5pY2FzdEFkZHJlc3NlcyA9IG1VbmljYXN0QWRkcmVzc2VzLT5HZXROZXh0KCk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisgICAgZWxzZSBpZiAobVVuaWNhc3RBZGRyZXNzZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZvciAoTmV0aWZVbmljYXN0QWRkcmVzcyAqY3VyID0gbVVuaWNhc3RBZGRyZXNzZXM7IGN1ci0+R2V0TmV4dCgpOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1ci0+bU5leHQgPT0gJmFBZGRyZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN1ci0+bU5leHQgPSBhQWRkcmVzcy5tTmV4dDsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT1RfRk9VTkQpCisgICAgeworICAgICAgICBTZXRTdGF0ZUNoYW5nZWRGbGFncyhhQWRkcmVzcy5tUmxvYyA/IE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfUkVNT1ZFRCA6IE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldGlmOjpBZGRFeHRlcm5hbFVuaWNhc3RBZGRyZXNzKGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5ldGlmVW5pY2FzdEFkZHJlc3MgKmVudHJ5OworICAgIHNpemVfdCBudW0gPSBzaXplb2YobUV4dFVuaWNhc3RBZGRyZXNzZXMpIC8gc2l6ZW9mKG1FeHRVbmljYXN0QWRkcmVzc2VzWzBdKTsKKworICAgIGZvciAoZW50cnkgPSBtVW5pY2FzdEFkZHJlc3NlczsgZW50cnk7IGVudHJ5ID0gZW50cnktPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChtZW1jbXAoJmVudHJ5LT5tQWRkcmVzcywgJmFBZGRyZXNzLm1BZGRyZXNzLCBzaXplb2Yob3RJcDZBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChlbnRyeSA+PSAmbUV4dFVuaWNhc3RBZGRyZXNzZXNbMF0pICYmIChlbnRyeSA8ICZtRXh0VW5pY2FzdEFkZHJlc3Nlc1tudW1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAgICAgICAgIGVudHJ5LT5tUHJlZml4TGVuZ3RoID0gYUFkZHJlc3MubVByZWZpeExlbmd0aDsKKyAgICAgICAgICAgIGVudHJ5LT5tUHJlZmVycmVkID0gYUFkZHJlc3MubVByZWZlcnJlZDsKKyAgICAgICAgICAgIGVudHJ5LT5tVmFsaWQgPSBhQWRkcmVzcy5tVmFsaWQ7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5kIGFuIGF2YWlsYWJsZSBlbnRyeSBpbiB0aGUgYG1FeHRVbmljYXN0QWRkcmVzc2VzYCBhcnJheS4KKyAgICBmb3IgKGVudHJ5ID0gJm1FeHRVbmljYXN0QWRkcmVzc2VzWzBdOyBudW0gPiAwOyBudW0tLSwgZW50cnkrKykKKyAgICB7CisgICAgICAgIC8vIEluIGFuIHVudXNlZC9hdmFpbGFibGUgZW50cnksIGBtTmV4dGAgcG9pbnRzIGJhY2sgdG8gdGhlIGVudHJ5IGl0c2VsZi4KKyAgICAgICAgaWYgKGVudHJ5LT5tTmV4dCA9PSBlbnRyeSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQobnVtID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIC8vIENvcHkgdGhlIG5ldyBhZGRyZXNzIGludG8gdGhlIGF2YWlsYWJsZSBlbnRyeSBhbmQgaW5zZXJ0IGl0IGluIGxpbmtlZC1saXN0LgorICAgICplbnRyeSA9IGFBZGRyZXNzOworICAgIGVudHJ5LT5tTmV4dCA9IG1VbmljYXN0QWRkcmVzc2VzOworICAgIG1VbmljYXN0QWRkcmVzc2VzID0gZW50cnk7CisKKyAgICBTZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmV0aWY6OlJlbW92ZUV4dGVybmFsVW5pY2FzdEFkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTmV0aWZVbmljYXN0QWRkcmVzcyAqZW50cnk7CisgICAgTmV0aWZVbmljYXN0QWRkcmVzcyAqbGFzdCA9IE5VTEw7CisgICAgc2l6ZV90IG51bSA9IHNpemVvZihtRXh0VW5pY2FzdEFkZHJlc3NlcykgLyBzaXplb2YobUV4dFVuaWNhc3RBZGRyZXNzZXNbMF0pOworCisgICAgZm9yIChlbnRyeSA9IG1VbmljYXN0QWRkcmVzc2VzOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKG1lbWNtcCgmZW50cnktPm1BZGRyZXNzLCAmYUFkZHJlc3MsIHNpemVvZihvdElwNkFkZHJlc3MpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoKGVudHJ5ID49ICZtRXh0VW5pY2FzdEFkZHJlc3Nlc1swXSkgJiYgKGVudHJ5IDwgJm1FeHRVbmljYXN0QWRkcmVzc2VzW251bV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgICAgICAgICAgaWYgKGxhc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGFzdC0+bU5leHQgPSBlbnRyeS0+bU5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVuaWNhc3RBZGRyZXNzZXMgPSBlbnRyeS0+R2V0TmV4dCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3QgPSBlbnRyeTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoZW50cnkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgLy8gVG8gbWFyayB0aGUgYWRkcmVzcyBlbnRyeSBhcyB1bnVzZWQvYXZhaWxhYmxlLCBzZXQgdGhlIGBtTmV4dGAgcG9pbnRlciBiYWNrIHRvIHRoZSBlbnRyeSBpdHNlbGYuCisgICAgZW50cnktPm1OZXh0ID0gZW50cnk7CisKKyAgICBTZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX0lQNl9BRERSRVNTX1JFTU9WRUQpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBOZXRpZjo6UmVtb3ZlQWxsRXh0ZXJuYWxVbmljYXN0QWRkcmVzc2VzKHZvaWQpCit7CisgICAgc2l6ZV90IG51bSA9IHNpemVvZihtRXh0VW5pY2FzdEFkZHJlc3NlcykgLyBzaXplb2YobUV4dFVuaWNhc3RBZGRyZXNzZXNbMF0pOworCisgICAgZm9yIChOZXRpZlVuaWNhc3RBZGRyZXNzICplbnRyeSA9ICZtRXh0VW5pY2FzdEFkZHJlc3Nlc1swXTsgbnVtID4gMDsgbnVtLS0sIGVudHJ5KyspCisgICAgeworICAgICAgICAvLyBJbiB1bnVzZWQgZW50cmllcywgdGhlIGBtTmV4dGAgcG9pbnRzIGJhY2sgdG8gdGhlIGVudHJ5IGl0c2VsZi4KKyAgICAgICAgaWYgKGVudHJ5LT5tTmV4dCAhPSBlbnRyeSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVtb3ZlRXh0ZXJuYWxVbmljYXN0QWRkcmVzcygqc3RhdGljX2Nhc3Q8QWRkcmVzcyAqPigmZW50cnktPm1BZGRyZXNzKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgTmV0aWY6OklzVW5pY2FzdEFkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0Cit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBmb3IgKGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKmN1ciA9IG1VbmljYXN0QWRkcmVzc2VzOyBjdXI7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0QWRkcmVzcygpID09IGFBZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBOZXRpZjo6U2V0U3RhdGVDaGFuZ2VkRmxhZ3ModWludDMyX3QgYUZsYWdzKQoreworICAgIG1TdGF0ZUNoYW5nZWRGbGFncyB8PSBhRmxhZ3M7CisgICAgbVN0YXRlQ2hhbmdlZFRhc2suUG9zdCgpOworfQorCit2b2lkIE5ldGlmOjpIYW5kbGVTdGF0ZUNoYW5nZWRUYXNrKFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIEdldE93bmVyKGFUYXNrbGV0KS5IYW5kbGVTdGF0ZUNoYW5nZWRUYXNrKCk7Cit9CisKK3ZvaWQgTmV0aWY6OkhhbmRsZVN0YXRlQ2hhbmdlZFRhc2sodm9pZCkKK3sKKyAgICB1aW50MzJfdCBmbGFncyA9IG1TdGF0ZUNoYW5nZWRGbGFnczsKKworICAgIG1TdGF0ZUNoYW5nZWRGbGFncyA9IDA7CisKKyAgICBmb3IgKE5ldGlmQ2FsbGJhY2sgKmNhbGxiYWNrID0gbUNhbGxiYWNrczsgY2FsbGJhY2s7IGNhbGxiYWNrID0gY2FsbGJhY2stPm1OZXh0KQorICAgIHsKKyAgICAgICAgY2FsbGJhY2stPkNhbGxiYWNrKGZsYWdzKTsKKyAgICB9Cit9CisKK05ldGlmICZOZXRpZjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgTmV0aWYgJm5ldGlmID0gKnN0YXRpY19jYXN0PE5ldGlmICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIE5ldGlmICZuZXRpZiA9IG90R2V0VGhyZWFkTmV0aWYoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIG5ldGlmOworfQorCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC9uZXRpZi5ocHAgYi9zcmMvY29yZS9uZXQvbmV0aWYuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjVjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS9uZXQvbmV0aWYuaHBwCkBAIC0wLDAgKzEsNTUxIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgSVB2NiBuZXR3b3JrIGludGVyZmFjZXMuCisgKi8KKworI2lmbmRlZiBORVRfTkVUSUZfSFBQXworI2RlZmluZSBORVRfTkVUSUZfSFBQXworCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGFza2xldC5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJuZXQvc29ja2V0LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBJcDYgeworCitjbGFzcyBJcDY7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1pcDYtbmV0aWYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIElQdjYgbmV0d29yayBpbnRlcmZhY2VzLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIElQdjYgTGluayBBZGRyZXNzLgorICoKKyAqLworY2xhc3MgTGlua0FkZHJlc3MKK3sKK3B1YmxpYyA6CisgICAgLyoqCisgICAgICogSGFyZHdhcmUgdHlwZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIEhhcmR3YXJlVHlwZQorICAgIHsKKyAgICAgICAga0V1aTY0ID0gMjcsCisgICAgfTsKKyAgICBIYXJkd2FyZVR5cGUgICBtVHlwZTsgICAgICAgLy8vPCBMaW5rIGFkZHJlc3MgdHlwZS4KKyAgICB1aW50OF90ICAgICAgICBtTGVuZ3RoOyAgICAgLy8vPCBMZW5ndGggb2YgbGluayBhZGRyZXNzLgorICAgIE1hYzo6RXh0QWRkcmVzcyBtRXh0QWRkcmVzczsgIC8vLzwgTGluayBhZGRyZXNzLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gSVB2NiBuZXR3b3JrIGludGVyZmFjZSB1bmljYXN0IGFkZHJlc3MuCisgKgorICovCitjbGFzcyBOZXRpZlVuaWNhc3RBZGRyZXNzOiBwdWJsaWMgb3ROZXRpZkFkZHJlc3MKK3sKKyAgICBmcmllbmQgY2xhc3MgTmV0aWY7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgQWRkcmVzcyAmR2V0QWRkcmVzcyh2b2lkKSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgQWRkcmVzcyAqPigmbUFkZHJlc3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzcyAmR2V0QWRkcmVzcyh2b2lkKSB7IHJldHVybiAqc3RhdGljX2Nhc3Q8QWRkcmVzcyAqPigmbUFkZHJlc3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJUHY2IHNjb3BlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElQdjYgc2NvcGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNjb3BlKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1TY29wZU92ZXJyaWRlVmFsaWQgPyBzdGF0aWNfY2FzdDx1aW50OF90PihtU2NvcGVPdmVycmlkZSkgOiBHZXRBZGRyZXNzKCkuR2V0U2NvcGUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IHVuaWNhc3QgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZXh0IHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE5ldGlmVW5pY2FzdEFkZHJlc3MgKkdldE5leHQodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAqPihtTmV4dCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgdW5pY2FzdCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5leHQgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgTmV0aWZVbmljYXN0QWRkcmVzcyAqR2V0TmV4dCh2b2lkKSB7IHJldHVybiBzdGF0aWNfY2FzdDxOZXRpZlVuaWNhc3RBZGRyZXNzICo+KG1OZXh0KTsgfQorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gSVB2NiBuZXR3b3JrIGludGVyZmFjZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqCisgKi8KK2NsYXNzIE5ldGlmTXVsdGljYXN0QWRkcmVzczogcHVibGljIG90TmV0aWZNdWx0aWNhc3RBZGRyZXNzCit7CisgICAgZnJpZW5kIGNsYXNzIE5ldGlmOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBBZGRyZXNzICZHZXRBZGRyZXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBBZGRyZXNzICo+KCZtQWRkcmVzcyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzcyAmR2V0QWRkcmVzcyh2b2lkKSB7IHJldHVybiAqc3RhdGljX2Nhc3Q8QWRkcmVzcyAqPigmbUFkZHJlc3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IG11bHRpY2FzdCBhZGRyZXNzIHN1YnNjcmliZWQgdG8gdGhlIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqR2V0TmV4dCh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOZXRpZk11bHRpY2FzdEFkZHJlc3MgKj4obU5leHQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IG11bHRpY2FzdCBhZGRyZXNzIHN1YnNjcmliZWQgdG8gdGhlIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIE5ldGlmTXVsdGljYXN0QWRkcmVzcyAqR2V0TmV4dCh2b2lkKSB7IHJldHVybiBzdGF0aWNfY2FzdDxOZXRpZk11bHRpY2FzdEFkZHJlc3MgKj4obU5leHQpOyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBuZXR3b3JrIGludGVyZmFjZSBoYW5kbGVycy4KKyAqCisgKi8KK2NsYXNzIE5ldGlmQ2FsbGJhY2sKK3sKKyAgICBmcmllbmQgY2xhc3MgTmV0aWY7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXRpZkNhbGxiYWNrKHZvaWQpOgorICAgICAgICBtQ2FsbGJhY2soTlVMTCksCisgICAgICAgIG1Db250ZXh0KE5VTEwpLAorICAgICAgICBtTmV4dChOVUxMKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY2FsbGJhY2sgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2FsbGJhY2sgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gY29uZmlndXJhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXQob3RTdGF0ZUNoYW5nZWRDYWxsYmFjayBhQ2FsbGJhY2ssIHZvaWQgKmFDb250ZXh0KSB7CisgICAgICAgIG1DYWxsYmFjayA9IGFDYWxsYmFjazsKKyAgICAgICAgbUNvbnRleHQgPSBhQ29udGV4dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB0ZXN0cyB3aGV0aGVyIHRoZSBvYmplY3QgaXMgZnJlZSBvciBpbiB1c2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgZnJlZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0ZyZWUodm9pZCkgeyByZXR1cm4gKG1DYWxsYmFjayA9PSBOVUxMKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZnJlZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRnJlZSh2b2lkKSB7CisgICAgICAgIG1DYWxsYmFjayA9IE5VTEw7CisgICAgICAgIG1Db250ZXh0ID0gTlVMTDsKKyAgICAgICAgbU5leHQgPSBOVUxMOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHRlc3RzIHdoZXRoZXIgdGhlIG9iamVjdCBpcyBzZXQgdG8gdGhlIHByb3ZpZGVkIGVsZW1lbnRzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgY2hhbmdlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBlbGVtZW50cyBlcXVhbCB0aGUgaW5wdXQgcGFyYW1zLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU2VydmluZyhvdFN0YXRlQ2hhbmdlZENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIChhQ2FsbGJhY2sgPT0gbUNhbGxiYWNrICYmIGFDb250ZXh0ID09IG1Db250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBDYWxsYmFjayh1aW50MzJfdCBhRmxhZ3MpIHsKKyAgICAgICAgaWYgKG1DYWxsYmFjayAhPSBOVUxMKSB7CisgICAgICAgICAgICBtQ2FsbGJhY2soYUZsYWdzLCBtQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdFN0YXRlQ2hhbmdlZENhbGxiYWNrIG1DYWxsYmFjazsKKyAgICB2b2lkICptQ29udGV4dDsKKyAgICBOZXRpZkNhbGxiYWNrICptTmV4dDsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIElQdjYgbmV0d29yayBpbnRlcmZhY2UuCisgKgorICovCitjbGFzcyBOZXRpZjogcHVibGljIElwNkxvY2F0b3IKK3sKKyAgICBmcmllbmQgY2xhc3MgSXA2OworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSXA2ICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnRlcmZhY2VJZCAgICAgVGhlIGludGVyZmFjZSBJRCBmb3IgdGhpcyBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXRpZihJcDYgJmFJcDYsIGludDhfdCBhSW50ZXJmYWNlSWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCBuZXR3b3JrIGludGVyZmFjZSBpbiB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKi8KKyAgICBOZXRpZiAqR2V0TmV4dCh2b2lkKSBjb25zdCB7IHJldHVybiBtTmV4dDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV0d29yayBpbnRlcmZhY2UgaWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBuZXR3b3JrIGludGVyZmFjZSBpZGVudGlmaWVyLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldEludGVyZmFjZUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcmZhY2VJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgdW5pY2FzdCBhZGRyZXNzZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgdW5pY2FzdCBhZGRyZXNzZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICpHZXRVbmljYXN0QWRkcmVzc2VzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1VbmljYXN0QWRkcmVzc2VzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgdW5pY2FzdCBhZGRyZXNzIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBUaGUgdW5pY2FzdCBhZGRyZXNzIHdhcyBhbHJlYWR5IGFkZGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGRVbmljYXN0QWRkcmVzcyhOZXRpZlVuaWNhc3RBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgdW5pY2FzdCBhZGRyZXNzIGZyb20gdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlIHVuaWNhc3QgYWRkcmVzcyB3YXNuJ3QgZm91bmQgdG8gYmUgcmVtb3ZlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlVW5pY2FzdEFkZHJlc3MoY29uc3QgTmV0aWZVbmljYXN0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBleHRlcm5hbCAodG8gT3BlblRocmVhZCkgdW5pY2FzdCBhZGRyZXNzIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCAob3IgdXBkYXRlZCkgdGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIGFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIGV4dGVybmFsIGFkZHJlc3NlcyBhcmUgYWxyZWFkeSBhZGRlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkRXh0ZXJuYWxVbmljYXN0QWRkcmVzcyhjb25zdCBOZXRpZlVuaWNhc3RBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgZXh0ZXJuYWwgKHRvIE9wZW5UaHJlYWQpIHVuaWNhc3QgYWRkcmVzcyBmcm9tIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgdW5pY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBhZGRyZXNzIGluZGljYXRlZCBieSBAcCBhQWRkcmVzcyBpcyBhbiBpbnRlcm5hbCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgICBUaGUgdW5pY2FzdCBhZGRyZXNzIHdhcyBub3QgZm91bmQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZUV4dGVybmFsVW5pY2FzdEFkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIHByZXZpb3VzbHkgYWRkZWQgZXh0ZXJuYWwgKHRvIE9wZW5UaHJlYWQpIHVuaWNhc3QgYWRkcmVzc2VzIGZyb20gdGhlCisgICAgICogbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlbW92ZUFsbEV4dGVybmFsVW5pY2FzdEFkZHJlc3Nlcyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBhZGRyZXNzIGlzIGFzc2lnbmVkIHRvIHRoaXMgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSB1bmljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIEBwIGFBZGRyZXNzIGlzIGFzc2lnbmVkIHRvIHRoaXMgaW50ZXJmYWNlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVW5pY2FzdEFkZHJlc3MoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBzdWJzY3JpYmVkIHRvIGEgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIG11bHRpY2FzdCBhZGRyZXNzIHRvIGNoZWNrLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIHN1YnNjcmliZWQgdG8gQHAgYUFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG5vdCBzdWJzY3JpYmVkIHRvIEBwIGFBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc011bHRpY2FzdFN1YnNjcmliZWQoY29uc3QgQWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3Vic2NyaWJlcyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdG8gdGhlIGxpbmstbG9jYWwgYW5kIHJlYWxtLWxvY2FsIGFsbCByb3V0ZXJzIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN1YnNjcmliZUFsbFJvdXRlcnNNdWx0aWNhc3Qodm9pZCkgeyBtQWxsUm91dGVyc1N1YnNjcmliZWQgPSB0cnVlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1bnN1YnNjcmliZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHRoZSBsaW5rLWxvY2FsIGFuZCByZWFsbS1sb2NhbCBhbGwgcm91dGVycyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBVbnN1YnNjcmliZUFsbFJvdXRlcnNNdWx0aWNhc3Qodm9pZCkgeyBtQWxsUm91dGVyc1N1YnNjcmliZWQgPSBmYWxzZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTmV0aWZNdWx0aWNhc3RBZGRyZXNzICpHZXRNdWx0aWNhc3RBZGRyZXNzZXModm9pZCkgY29uc3QgeyByZXR1cm4gbU11bHRpY2FzdEFkZHJlc3NlczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3Vic2NyaWJlcyB0aGUgbmV0d29yayBpbnRlcmZhY2UgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBzdWJzY3JpYmVkIHRvIEBwIGFBZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIG11bHRpY2FzdCBhZGRyZXNzIGlzIGFscmVhZHkgc3Vic2NyaWJlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3Vic2NyaWJlTXVsdGljYXN0KE5ldGlmTXVsdGljYXN0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdW5zdWJzY3JpYmVzIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byBhIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCB0byBAcCBhQWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBtdWx0aWNhc3QgYWRkcmVzcyBpcyBhbHJlYWR5IHVuc3Vic2NyaWJlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgVW5zdWJzY3JpYmVNdWx0aWNhc3QoY29uc3QgTmV0aWZNdWx0aWNhc3RBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdWJzY3JpYmVzIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0byB0aGUgZXh0ZXJuYWwgKHRvIE9wZW5UaHJlYWQpIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0byBAcCBhQWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICAgVGhlIG11bHRpY2FzdCBhZGRyZXNzIGlzIGFscmVhZHkgc3Vic2NyaWJlZC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIGFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBleHRlcm5hbCBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBhbHJlYWR5IGFkZGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdWJzY3JpYmVFeHRlcm5hbE11bHRpY2FzdChjb25zdCBBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1bnN1YnNjcmliZXMgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRvIHRoZSBleHRlcm5hbCAodG8gT3BlblRocmVhZCkgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgdG8gdGhlIHVuaWNhc3QgYWRkcmVzcy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgVGhlIGFkZHJlc3MgaW5kaWNhdGVkIGJ5IEBwIGFBZGRyZXNzIGlzIGFuIGludGVybmFsIGFkZHJlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgICAgIFRoZSBtdWx0aWNhc3QgYWRkcmVzcyB3YXMgbm90IGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBVbnN1YnNjcmliZUV4dGVybmFsTXVsdGljYXN0KGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVuc3Vic2NyaWJlcyB0aGUgbmV0d29yayBpbnRlcmZhY2UgZnJvbSBhbGwgcHJldmlvdXNseSBhZGRlZCBleHRlcm5hbCAodG8gT3BlblRocmVhZCkgbXVsdGljYXN0CisgICAgICogYWRkcmVzc2VzLgorICAgICAqLworICAgIHZvaWQgVW5zdWJzY3JpYmVBbGxFeHRlcm5hbE11bHRpY2FzdEFkZHJlc3Nlcyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSBpcyBkaXNhYmxlZC4KKyAgICAgKi8KKyAgICBib29sIElzTXVsdGljYXN0UHJvbWlzY3VvdXNFbmFibGVkKHZvaWQpIHsgcmV0dXJuIG1NdWx0aWNhc3RQcm9taXNjdW91czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcyBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgVFJVRSBpZiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE11bHRpY2FzdFByb21pc2N1b3VzKGJvb2wgYUVuYWJsZWQpIHsgbU11bHRpY2FzdFByb21pc2N1b3VzID0gYUVuYWJsZWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhbGxiYWNrLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrICBBIHJlZmVyZW5jZSB0byB0aGUgY2FsbGJhY2suCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgdGhlIGNhbGxiYWNrLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSBUaGUgY2FsbGJhY2sgd2FzIGFscmVhZHkgcmVnaXN0ZXJlZC4KKyAgICAgKi8KKyAgICBvdEVycm9yIFJlZ2lzdGVyQ2FsbGJhY2soTmV0aWZDYWxsYmFjayAmYUNhbGxiYWNrKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBuZXR3b3JrIGludGVyZmFjZSBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgQSByZWZlcmVuY2UgdG8gdGhlIGNhbGxiYWNrLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBjYWxsYmFjay4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgVGhlIGNhbGxiYWNrIHdhcyBub3QgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVDYWxsYmFjayhOZXRpZkNhbGxiYWNrICZhQ2FsbGJhY2spOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGEgc3RhdGUgY2hhbmdlZCBjYWxsYmFjayBpcyBwZW5kaW5nLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFIGlmIGEgc3RhdGUgY2hhbmdlZCBjYWxsYmFjayBpcyBwZW5kaW5nLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU3RhdGVDaGFuZ2VkQ2FsbGJhY2tQZW5kaW5nKHZvaWQpIHsgcmV0dXJuIG1TdGF0ZUNoYW5nZWRGbGFncyAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzY2hlZHVsZXMgbm90aWZpY2F0aW9uIG9mIEBwIGFGbGFncy4KKyAgICAgKgorICAgICAqIFRoZSBAcCBhRmxhZ3MgYXJlIGNvbWJpbmVkIChiaXR3aXNlLW9yKSB3aXRoIG90aGVyIGZsYWdzIHRoYXQgaGF2ZSBub3QgYmVlbiBwcm92aWRlZCBpbiBhIGNhbGxiYWNrIHlldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGbGFncyAgQSBiaXQtZmllbGQgaW5kaWNhdGluZyB3aGF0IGNvbmZpZ3VyYXRpb24gb3Igc3RhdGUgaGFzIGNoYW5nZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YXRlQ2hhbmdlZEZsYWdzKHVpbnQzMl90IGFGbGFncyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHZpcnR1YWwgbWV0aG9kIGVucXVldWVzIGFuIElQdjYgbWVzc2FnZXMgb24gdGhpcyBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIElQdjYgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSkgPSAwOworCisgICAgLyoqCisgICAgICogVGhpcyB2aXJ0dWFsIG1ldGhvZCBmaWxscyBvdXQgQHAgYUFkZHJlc3Mgd2l0aCB0aGUgbGluayBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgbGluayBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBsaW5rIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2aXJ0dWFsIG90RXJyb3IgR2V0TGlua0FkZHJlc3MoTGlua0FkZHJlc3MgJmFBZGRyZXNzKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHZpcnR1YWwgbWV0aG9kIHBlcmZvcm1zIGEgc291cmNlLWRlc3RpbmF0aW9uIHJvdXRlIGxvb2t1cC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhU291cmNlICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gICBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW291dF0gIGFQcmVmaXhNYXRjaCAgVGhlIGxvbmdlc3QgcHJlZml4IG1hdGNoIHJlc3VsdC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCBhIHJvdXRlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fUk9VVEUgIE5vIHJvdXRlIHRvIGRlc3RpbmF0aW9uLgorICAgICAqCisgICAgICovCisgICAgdmlydHVhbCBvdEVycm9yIFJvdXRlTG9va3VwKGNvbnN0IEFkZHJlc3MgJmFTb3VyY2UsIGNvbnN0IEFkZHJlc3MgJmFEZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVByZWZpeE1hdGNoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlU3RhdGVDaGFuZ2VkVGFzayhUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBIYW5kbGVTdGF0ZUNoYW5nZWRUYXNrKHZvaWQpOworICAgIHN0YXRpYyBOZXRpZiAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgTmV0aWZDYWxsYmFjayAqbUNhbGxiYWNrczsKKyAgICBOZXRpZlVuaWNhc3RBZGRyZXNzICptVW5pY2FzdEFkZHJlc3NlczsKKyAgICBOZXRpZk11bHRpY2FzdEFkZHJlc3MgKm1NdWx0aWNhc3RBZGRyZXNzZXM7CisgICAgaW50OF90IG1JbnRlcmZhY2VJZDsKKyAgICBib29sIG1BbGxSb3V0ZXJzU3Vic2NyaWJlZDsKKyAgICBib29sIG1NdWx0aWNhc3RQcm9taXNjdW91czsKKyAgICBUYXNrbGV0IG1TdGF0ZUNoYW5nZWRUYXNrOworICAgIE5ldGlmICptTmV4dDsKKworICAgIHVpbnQzMl90IG1TdGF0ZUNoYW5nZWRGbGFnczsKKworICAgIE5ldGlmVW5pY2FzdEFkZHJlc3MgbUV4dFVuaWNhc3RBZGRyZXNzZXNbT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9JUF9BRERSU107CisgICAgTmV0aWZNdWx0aWNhc3RBZGRyZXNzIG1FeHRNdWx0aWNhc3RBZGRyZXNzZXNbT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9NVUxUSUNBU1RfSVBfQUREUlNdOworfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfTkVUSUZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmV0L3NvY2tldC5ocHAgYi9zcmMvY29yZS9uZXQvc29ja2V0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWE4Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L3NvY2tldC5ocHAKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBJUHY2IHNvY2tldHMuCisgKi8KKworI2lmbmRlZiBORVRfU09DS0VUX0hQUF8KKyNkZWZpbmUgTkVUX1NPQ0tFVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWlwNi1pcDYKKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBtZXNzYWdlIGluZm9ybWF0aW9uIGZvciBhbiBJUHY2IG1lc3NhZ2UuCisgKgorICovCitjbGFzcyBNZXNzYWdlSW5mbzogcHVibGljIG90TWVzc2FnZUluZm8KK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlSW5mbyh2b2lkKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbG9jYWwgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbG9jYWwgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBBZGRyZXNzICZHZXRTb2NrQWRkcih2b2lkKSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgQWRkcmVzcyAqPigmbVNvY2tBZGRyKTt9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBsb2NhbCBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBUaGUgSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTb2NrQWRkcihjb25zdCBBZGRyZXNzICZhQWRkcmVzcykgeyBtU29ja0FkZHIgPSBhQWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbG9jYWwgc29ja2V0IHBvcnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbG9jYWwgc29ja2V0IHBvcnQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTb2NrUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBtU29ja1BvcnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGxvY2FsIHNvY2tldCBwb3J0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBvcnQgIFRoZSBwb3J0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTb2NrUG9ydCh1aW50MTZfdCBhUG9ydCkgeyBtU29ja1BvcnQgPSBhUG9ydDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcGVlciBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBwZWVyIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzcyAmR2V0UGVlckFkZHIodm9pZCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PEFkZHJlc3MgKj4oJm1QZWVyQWRkcik7fQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcGVlciBzb2NrZXQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBwZWVyIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgQWRkcmVzcyAmR2V0UGVlckFkZHIodm9pZCkgY29uc3QgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IEFkZHJlc3MgKj4oJm1QZWVyQWRkcik7fQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcGVlcidzIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBlZXJBZGRyKGNvbnN0IEFkZHJlc3MgJmFBZGRyZXNzKSB7IG1QZWVyQWRkciA9IGFBZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBwZWVyIHNvY2tldCBwb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHBlZXIgc29ja2V0IHBvcnQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRQZWVyUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBtUGVlclBvcnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIHBlZXIgc29ja2V0IHBvcnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUG9ydCAgVGhlIHBvcnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBlZXJQb3J0KHVpbnQxNl90IGFQb3J0KSB7IG1QZWVyUG9ydCA9IGFQb3J0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBJbnRlcmZhY2UgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSW50ZXJmYWNlIElELgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldEludGVyZmFjZUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcmZhY2VJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSW50ZXJmYWNlIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUludGVyZmFjZUlkICBUaGUgSW50ZXJmYWNlIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbnRlcmZhY2VJZChpbnQ4X3QgYUludGVyZmFjZUlkKSB7IG1JbnRlcmZhY2VJZCA9IGFJbnRlcmZhY2VJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgSG9wIExpbWl0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEhvcCBMaW1pdC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SG9wTGltaXQodm9pZCkgY29uc3QgeyByZXR1cm4gbUhvcExpbWl0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBIb3AgTGltaXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSG9wTGltaXQgIFRoZSBIb3AgTGltaXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEhvcExpbWl0KHVpbnQ4X3QgYUhvcExpbWl0KSB7IG1Ib3BMaW1pdCA9IGFIb3BMaW1pdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIExpbmsgSW5mby4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pdG5lciB0byB0aGUgTGluayBJbmZvLgorICAgICAqCisgICAgICovCisgICAgY29uc3Qgdm9pZCAqR2V0TGlua0luZm8odm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtJbmZvOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwb2ludGVyIHRvIHRoZSBMaW5rIEluZm8uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua0luZm8gIEEgcG9pbnRlciB0byB0aGUgTGluayBJbmZvLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rSW5mbyhjb25zdCB2b2lkICphTGlua0luZm8pIHsgbUxpbmtJbmZvID0gYUxpbmtJbmZvOyB9Cit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNvY2tldCBhZGRyZXNzLgorICoKKyAqLworY2xhc3MgU29ja0FkZHI6IHB1YmxpYyBvdFNvY2tBZGRyCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgU29ja0FkZHIodm9pZCkgeyBtZW1zZXQoJm1BZGRyZXNzLCAwLCBzaXplb2YobUFkZHJlc3MpKSwgbVBvcnQgPSAwLCBtU2NvcGVJZCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBBZGRyZXNzICZHZXRBZGRyZXNzKHZvaWQpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxBZGRyZXNzICo+KCZtQWRkcmVzcyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBBZGRyZXNzICZHZXRBZGRyZXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBBZGRyZXNzICo+KCZtQWRkcmVzcyk7IH0KK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfU09DS0VUX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC90Y3AuaHBwIGIvc3JjL2NvcmUvbmV0L3RjcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiYmQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC90Y3AuaHBwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcGFyc2luZyBUQ1AgaGVhZGVyLgorICovCisKKyNpZm5kZWYgVENQX0hQUF8KKyNkZWZpbmUgVENQX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAibmV0L2lwNl9oZWFkZXJzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBJcDYgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtdGNwCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBwYXJzaW5nIFRDUCBoZWFkZXIKKyAqCisgKiBAeworICoKKyAqLworCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorc3RydWN0IFRjcEhlYWRlclBvRAoreworICAgIHVpbnQxNl90IG1Tb3VyY2U7CisgICAgdWludDE2X3QgbURlc3RpbmF0aW9uOworICAgIHVpbnQzMl90IG1TZXF1ZW5jZU51bWJlcjsKKyAgICB1aW50MzJfdCBtQWNrTnVtYmVyOworICAgIHVpbnQxNl90IG1GbGFnczsKKyAgICB1aW50MTZfdCBtV2luZG93OworICAgIHVpbnQxNl90IG1DaGVja3N1bTsKKyAgICB1aW50MTZfdCBtVXJnZW50UG9pbnRlcjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUQ1AgaGVhZGVyIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGNwSGVhZGVyOiBwcml2YXRlIFRjcEhlYWRlclBvRAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRDUCBTb3VyY2UgUG9ydC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgU291cmNlIFBvcnQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTb3VyY2VQb3J0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNvdXJjZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRDUCBEZXN0aW5hdGlvbiBQb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRDUCBEZXN0aW5hdGlvbiBQb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGVzdGluYXRpb25Qb3J0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobURlc3RpbmF0aW9uKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVENQIFNlcXVlbmNlIE51bWJlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUQ1AgU2VxdWVuY2UgTnVtYmVyLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0U2VxdWVuY2VOdW1iZXIodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtU2VxdWVuY2VOdW1iZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUQ1AgQWNrbm93bGVkZ21lbnQgU2VxdWVuY2UgTnVtYmVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRDUCBBY2tub3dsZWRnbWVudCBTZXF1ZW5jZSBOdW1iZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRBY2tub3dsZWRnbWVudE51bWJlcih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1BY2tOdW1iZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUQ1AgRmxhZ3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVENQIEZsYWdzLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RmxhZ3Modm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtRmxhZ3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUQ1AgV2luZG93LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRDUCBXaW5kb3cuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRXaW5kb3codm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtV2luZG93KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVENQIENoZWNrc3VtLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRDUCBDaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldENoZWNrc3VtKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobUNoZWNrc3VtKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVENQIFVyZ2VudCBQb2ludGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRDUCBVcmdlbnQgUG9pbnRlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFVyZ2VudFBvaW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtVXJnZW50UG9pbnRlcik7IH0KKworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVENQX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25ldC91ZHA2LmNwcCBiL3NyYy9jb3JlL25ldC91ZHA2LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM4Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmV0L3VkcDYuY3BwCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFVEUC9JUHY2IHNvY2tldHMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJ1ZHA2LmhwcCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworVWRwU29ja2V0OjpVZHBTb2NrZXQoVWRwICZhVWRwKQoreworICAgIG1UcmFuc3BvcnQgPSAmYVVkcDsKK30KKworTWVzc2FnZSAqVWRwU29ja2V0OjpOZXdNZXNzYWdlKHVpbnQxNl90IGFSZXNlcnZlZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VWRwICo+KG1UcmFuc3BvcnQpLT5OZXdNZXNzYWdlKGFSZXNlcnZlZCk7Cit9CisKK290RXJyb3IgVWRwU29ja2V0OjpPcGVuKG90VWRwUmVjZWl2ZSBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgbWVtc2V0KCZtU29ja05hbWUsIDAsIHNpemVvZihtU29ja05hbWUpKTsKKyAgICBtZW1zZXQoJm1QZWVyTmFtZSwgMCwgc2l6ZW9mKG1QZWVyTmFtZSkpOworICAgIG1IYW5kbGVyID0gYUhhbmRsZXI7CisgICAgbUNvbnRleHQgPSBhQ29udGV4dDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxVZHAgKj4obVRyYW5zcG9ydCktPkFkZFNvY2tldCgqdGhpcyk7Cit9CisKK290RXJyb3IgVWRwU29ja2V0OjpCaW5kKGNvbnN0IFNvY2tBZGRyICZhU29ja0FkZHIpCit7CisgICAgbVNvY2tOYW1lID0gYVNvY2tBZGRyOworCisgICAgaWYgKEdldFNvY2tOYW1lKCkubVBvcnQgPT0gMCkKKyAgICB7CisgICAgICAgIG1Tb2NrTmFtZS5tUG9ydCA9IHN0YXRpY19jYXN0PFVkcCAqPihtVHJhbnNwb3J0KS0+R2V0RXBoZW1lcmFsUG9ydCgpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIFVkcFNvY2tldDo6Q29ubmVjdChjb25zdCBTb2NrQWRkciAmYVNvY2tBZGRyKQoreworICAgIG1QZWVyTmFtZSA9IGFTb2NrQWRkcjsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBVZHBTb2NrZXQ6OkNsb3NlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gc3RhdGljX2Nhc3Q8VWRwICo+KG1UcmFuc3BvcnQpLT5SZW1vdmVTb2NrZXQoKnRoaXMpKTsKKyAgICBtZW1zZXQoJm1Tb2NrTmFtZSwgMCwgc2l6ZW9mKG1Tb2NrTmFtZSkpOworICAgIG1lbXNldCgmbVBlZXJOYW1lLCAwLCBzaXplb2YobVBlZXJOYW1lKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIFVkcFNvY2tldDo6U2VuZFRvKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvTG9jYWw7CisgICAgVWRwSGVhZGVyIHVkcEhlYWRlcjsKKworICAgIG1lc3NhZ2VJbmZvTG9jYWwgPSBhTWVzc2FnZUluZm87CisKKyAgICBpZiAobWVzc2FnZUluZm9Mb2NhbC5HZXRTb2NrQWRkcigpLklzVW5zcGVjaWZpZWQoKSkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VJbmZvTG9jYWwuU2V0U29ja0FkZHIoR2V0U29ja05hbWUoKS5HZXRBZGRyZXNzKCkpOworICAgIH0KKworICAgIGlmIChHZXRTb2NrTmFtZSgpLm1Qb3J0ID09IDApCisgICAgeworICAgICAgICBHZXRTb2NrTmFtZSgpLm1Qb3J0ID0gc3RhdGljX2Nhc3Q8VWRwICo+KG1UcmFuc3BvcnQpLT5HZXRFcGhlbWVyYWxQb3J0KCk7CisgICAgfQorCisgICAgdWRwSGVhZGVyLlNldFNvdXJjZVBvcnQoR2V0U29ja05hbWUoKS5tUG9ydCk7CisgICAgdWRwSGVhZGVyLlNldERlc3RpbmF0aW9uUG9ydChtZXNzYWdlSW5mb0xvY2FsLm1QZWVyUG9ydCk7CisgICAgdWRwSGVhZGVyLlNldExlbmd0aChzaXplb2YodWRwSGVhZGVyKSArIGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKyAgICB1ZHBIZWFkZXIuU2V0Q2hlY2tzdW0oMCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuUHJlcGVuZCgmdWRwSGVhZGVyLCBzaXplb2YodWRwSGVhZGVyKSkpOworICAgIGFNZXNzYWdlLlNldE9mZnNldCgwKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gc3RhdGljX2Nhc3Q8VWRwICo+KG1UcmFuc3BvcnQpLT5TZW5kRGF0YWdyYW0oYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvTG9jYWwsIGtQcm90b1VkcCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworVWRwOjpVZHAoSXA2ICZhSXA2KToKKyAgICBJcDZMb2NhdG9yKGFJcDYpLAorICAgIG1FcGhlbWVyYWxQb3J0KGtEeW5hbWljUG9ydE1pbiksCisgICAgbVNvY2tldHMoTlVMTCkKK3sKK30KKworb3RFcnJvciBVZHA6OkFkZFNvY2tldChVZHBTb2NrZXQgJmFTb2NrZXQpCit7CisgICAgZm9yIChVZHBTb2NrZXQgKmN1ciA9IG1Tb2NrZXRzOyBjdXI7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ciA9PSAmYVNvY2tldCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgYVNvY2tldC5TZXROZXh0KG1Tb2NrZXRzKTsKKyAgICBtU29ja2V0cyA9ICZhU29ja2V0OworCitleGl0OgorICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIFVkcDo6UmVtb3ZlU29ja2V0KFVkcFNvY2tldCAmYVNvY2tldCkKK3sKKyAgICBpZiAobVNvY2tldHMgPT0gJmFTb2NrZXQpCisgICAgeworICAgICAgICBtU29ja2V0cyA9IG1Tb2NrZXRzLT5HZXROZXh0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoVWRwU29ja2V0ICpzb2NrZXQgPSBtU29ja2V0czsgc29ja2V0OyBzb2NrZXQgPSBzb2NrZXQtPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNvY2tldC0+R2V0TmV4dCgpID09ICZhU29ja2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNvY2tldC0+U2V0TmV4dChhU29ja2V0LkdldE5leHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhU29ja2V0LlNldE5leHQoTlVMTCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDE2X3QgVWRwOjpHZXRFcGhlbWVyYWxQb3J0KHZvaWQpCit7CisgICAgdWludDE2X3QgcnZhbCA9IG1FcGhlbWVyYWxQb3J0OworCisgICAgaWYgKG1FcGhlbWVyYWxQb3J0IDwga0R5bmFtaWNQb3J0TWF4KQorICAgIHsKKyAgICAgICAgbUVwaGVtZXJhbFBvcnQrKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUVwaGVtZXJhbFBvcnQgPSBrRHluYW1pY1BvcnRNaW47CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK01lc3NhZ2UgKlVkcDo6TmV3TWVzc2FnZSh1aW50MTZfdCBhUmVzZXJ2ZWQpCit7CisgICAgcmV0dXJuIEdldElwNigpLk5ld01lc3NhZ2Uoc2l6ZW9mKFVkcEhlYWRlcikgKyBhUmVzZXJ2ZWQpOworfQorCitvdEVycm9yIFVkcDo6U2VuZERhdGFncmFtKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBJcFByb3RvIGFJcFByb3RvKQoreworICAgIHJldHVybiBHZXRJcDYoKS5TZW5kRGF0YWdyYW0oYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgYUlwUHJvdG8pOworfQorCitvdEVycm9yIFVkcDo6SGFuZGxlTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBVZHBIZWFkZXIgdWRwSGVhZGVyOworICAgIHVpbnQxNl90IHBheWxvYWRMZW5ndGg7CisgICAgdWludDE2X3QgY2hlY2tzdW07CisKKyAgICBwYXlsb2FkTGVuZ3RoID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKworICAgIC8vIGNoZWNrIGxlbmd0aAorICAgIFZlcmlmeU9yRXhpdChwYXlsb2FkTGVuZ3RoID49IHNpemVvZihVZHBIZWFkZXIpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIHZlcmlmeSBjaGVja3N1bQorICAgIGNoZWNrc3VtID0gSXA2OjpDb21wdXRlUHNldWRvaGVhZGVyQ2hlY2tzdW0oYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZExlbmd0aCwga1Byb3RvVWRwKTsKKyAgICBjaGVja3N1bSA9IGFNZXNzYWdlLlVwZGF0ZUNoZWNrc3VtKGNoZWNrc3VtLCBhTWVzc2FnZS5HZXRPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCk7CisgICAgVmVyaWZ5T3JFeGl0KGNoZWNrc3VtID09IDB4ZmZmZiwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YodWRwSGVhZGVyKSwgJnVkcEhlYWRlcikgPT0gc2l6ZW9mKHVkcEhlYWRlciksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKHVkcEhlYWRlcikpOworICAgIGFNZXNzYWdlSW5mby5tUGVlclBvcnQgPSB1ZHBIZWFkZXIuR2V0U291cmNlUG9ydCgpOworICAgIGFNZXNzYWdlSW5mby5tU29ja1BvcnQgPSB1ZHBIZWFkZXIuR2V0RGVzdGluYXRpb25Qb3J0KCk7CisKKyAgICAvLyBmaW5kIHNvY2tldAorICAgIGZvciAoVWRwU29ja2V0ICpzb2NrZXQgPSBtU29ja2V0czsgc29ja2V0OyBzb2NrZXQgPSBzb2NrZXQtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChzb2NrZXQtPkdldFNvY2tOYW1lKCkubVBvcnQgIT0gdWRwSGVhZGVyLkdldERlc3RpbmF0aW9uUG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzb2NrZXQtPkdldFNvY2tOYW1lKCkubVNjb3BlSWQgIT0gMCAmJgorICAgICAgICAgICAgc29ja2V0LT5HZXRTb2NrTmFtZSgpLm1TY29wZUlkICE9IGFNZXNzYWdlSW5mby5tSW50ZXJmYWNlSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc011bHRpY2FzdCgpICYmCisgICAgICAgICAgICAhc29ja2V0LT5HZXRTb2NrTmFtZSgpLkdldEFkZHJlc3MoKS5Jc1Vuc3BlY2lmaWVkKCkgJiYKKyAgICAgICAgICAgIHNvY2tldC0+R2V0U29ja05hbWUoKS5HZXRBZGRyZXNzKCkgIT0gYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmVyaWZ5IHNvdXJjZSBpZiBjb25uZWN0ZWQgc29ja2V0CisgICAgICAgIGlmIChzb2NrZXQtPkdldFBlZXJOYW1lKCkubVBvcnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNvY2tldC0+R2V0UGVlck5hbWUoKS5tUG9ydCAhPSB1ZHBIZWFkZXIuR2V0U291cmNlUG9ydCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNvY2tldC0+R2V0UGVlck5hbWUoKS5HZXRBZGRyZXNzKCkuSXNVbnNwZWNpZmllZCgpICYmCisgICAgICAgICAgICAgICAgc29ja2V0LT5HZXRQZWVyTmFtZSgpLkdldEFkZHJlc3MoKSAhPSBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNvY2tldC0+SGFuZGxlVWRwUmVjZWl2ZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIFVkcDo6VXBkYXRlQ2hlY2tzdW0oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFDaGVja3N1bSkKK3sKKyAgICBhQ2hlY2tzdW0gPSBhTWVzc2FnZS5VcGRhdGVDaGVja3N1bShhQ2hlY2tzdW0sIGFNZXNzYWdlLkdldE9mZnNldCgpLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKworICAgIGlmIChhQ2hlY2tzdW0gIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgYUNoZWNrc3VtID0gfmFDaGVja3N1bTsKKyAgICB9CisKKyAgICBhQ2hlY2tzdW0gPSBIb3N0U3dhcDE2KGFDaGVja3N1bSk7CisgICAgYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgKyBVZHBIZWFkZXI6OkdldENoZWNrc3VtT2Zmc2V0KCksIHNpemVvZihhQ2hlY2tzdW0pLCAmYUNoZWNrc3VtKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworfSAgLy8gbmFtZXNwYWNlIElwNgorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZXQvdWRwNi5ocHAgYi9zcmMvY29yZS9uZXQvdWRwNi5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkNTM4YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL25ldC91ZHA2LmhwcApAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFVEUC9JUHY2IHNvY2tldHMuCisgKi8KKworI2lmbmRlZiBVRFA2X0hQUF8KKyNkZWZpbmUgVURQNl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3VkcC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfaGVhZGVycy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgSXA2IHsKKworY2xhc3MgVWRwOworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtdWRwCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBVRFAvSVB2NiBzb2NrZXRzLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgVURQL0lQdjYgc29ja2V0LgorICoKKyAqLworY2xhc3MgVWRwU29ja2V0OiBwdWJsaWMgb3RVZHBTb2NrZXQKK3sKKyAgICBmcmllbmQgY2xhc3MgVWRwOworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVVkcCAgQSByZWZlcmVuY2UgdG8gdGhlIFVEUCB0cmFuc3BvcnQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgVWRwU29ja2V0KFVkcCAmYVVkcCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IFVEUCBtZXNzYWdlIHdpdGggc3VmZmljaWVudCBoZWFkZXIgc3BhY2UgcmVzZXJ2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzZXJ2ZWQgIFRoZSBudW1iZXIgb2YgaGVhZGVyIGJ5dGVzIHRvIHJlc2VydmUgYWZ0ZXIgdGhlIFVEUCBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2Ugb3IgTlVMTCBpZiBubyBidWZmZXJzIGFyZSBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNzYWdlICpOZXdNZXNzYWdlKHVpbnQxNl90IGFSZXNlcnZlZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBvcGVucyB0aGUgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIYW5kbGVyICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHJlY2VpdmluZyBVRFAgbWVzc2FnZXMuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IG9wZW5lZCB0aGUgc29ja2V0LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgVGhlIHNvY2tldCBpcyBhbHJlYWR5IG9wZW4uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE9wZW4ob3RVZHBSZWNlaXZlIGFIYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBiaW5kcyB0aGUgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTb2NrQWRkciAgQSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgYm91bmQgdGhlIHNvY2tldC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQmluZChjb25zdCBTb2NrQWRkciAmYVNvY2tBZGRyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNvbm5lY3RzIHRoZSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNvY2tBZGRyICBBIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdGhlIHNvY2tldC4KKyAgICAgKi8KKyAgICBvdEVycm9yIENvbm5lY3QoY29uc3QgU29ja0FkZHIgJmFTb2NrQWRkcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbG9zZXMgdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBjbG9zZWQgdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIENsb3NlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBVRFAgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgVGhlIG1lc3NhZ2UgdG8gc2VuZC4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZUluZm8gIFRoZSBtZXNzYWdlIGluZm8gYXNzb2NpYXRlZCB3aXRoIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgc2VudCB0aGUgVURQIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlciB0byBhZGQgdGhlIFVEUCBhbmQgSVB2NiBoZWFkZXJzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kVG8oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9jYWwgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbG9jYWwgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBTb2NrQWRkciAmR2V0U29ja05hbWUodm9pZCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PFNvY2tBZGRyICo+KCZtU29ja05hbWUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwZWVyJ3Mgc29ja2V0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgcGVlcidzIHNvY2tldCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgU29ja0FkZHIgJkdldFBlZXJOYW1lKHZvaWQpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxTb2NrQWRkciAqPigmbVBlZXJOYW1lKTsgfQorCitwcml2YXRlOgorICAgIFVkcFNvY2tldCAqR2V0TmV4dCh2b2lkKSB7IHJldHVybiBzdGF0aWNfY2FzdDxVZHBTb2NrZXQgKj4obU5leHQpOyB9CisgICAgdm9pZCBTZXROZXh0KFVkcFNvY2tldCAqc29ja2V0KSB7IG1OZXh0ID0gc3RhdGljX2Nhc3Q8b3RVZHBTb2NrZXQgKj4oc29ja2V0KTsgfQorCisgICAgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKSB7CisgICAgICAgIG1IYW5kbGVyKG1Db250ZXh0LCAmYU1lc3NhZ2UsICZhTWVzc2FnZUluZm8pOworICAgIH0KK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGNvcmUgVURQIG1lc3NhZ2UgaGFuZGxpbmcuCisgKgorICovCitjbGFzcyBVZHA6IHB1YmxpYyBJcDZMb2NhdG9yCit7CisgICAgZnJpZW5kIGNsYXNzIFVkcFNvY2tldDsKKworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJcDYgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IG5ldHdvcmsgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgVWRwKElwNiAmYUlwNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTb2NrZXQgIEEgcmVmZXJlbmNlIHRvIHRoZSBVRFAgc29ja2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZFNvY2tldChVZHBTb2NrZXQgJmFTb2NrZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU29ja2V0ICBBIHJlZmVyZW5jZSB0byB0aGUgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIFVEUCBzb2NrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZVNvY2tldChVZHBTb2NrZXQgJmFTb2NrZXQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlcGhlbWVyYWwgcG9ydC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgbmV3IGVwaGVtZXJhbCBwb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RXBoZW1lcmFsUG9ydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgVURQIG1lc3NhZ2Ugd2l0aCBzdWZmaWNpZW50IGhlYWRlciBzcGFjZSByZXNlcnZlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNlcnZlZCAgVGhlIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgdG8gcmVzZXJ2ZSBhZnRlciB0aGUgVURQIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBvciBOVUxMIGlmIG5vIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIE1lc3NhZ2UgKk5ld01lc3NhZ2UodWludDE2X3QgYVJlc2VydmVkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGFuIElQdjYgZGF0YWdyYW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlSW5mbyAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgaW5mbyBhc3NvY2lhdGVkIHdpdGggQHAgYU1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUlwUHJvdG8gICAgICBUaGUgSW50ZXJuZXQgUHJvdG9jb2wgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbWVzc2FnZSBpbnRvIGFuIG91dHB1dCBpbnRlcmZhY2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlciB0byBhZGQgdGhlIElQdjYgaGVhZGVycy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERhdGFncmFtKE1lc3NhZ2UgJmFNZXNzYWdlLCBNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLCBJcFByb3RvIGFJcFByb3RvKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgYSByZWNlaXZlZCBVRFAgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIFVEUCBtZXNzYWdlIHRvIHByb2Nlc3MuCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2VJbmZvICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZSBpbmZvIGFzc29jaWF0ZWQgd2l0aCBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCB0aGUgVURQIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9EUk9QICBDb3VsZCBub3QgZnVsbHkgcHJvY2VzcyB0aGUgVURQIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEhhbmRsZU1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgVURQIGNoZWNrc3VtLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgVURQIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVBzZXVkb0hlYWRlckNoZWNrc3VtICBUaGUgcHNldWRvLWhlYWRlciBjaGVja3N1bSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgdXBkYXRlZCB0aGUgVURQIGNoZWNrc3VtLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgbWVzc2FnZSB3YXMgaW52YWxpZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgVXBkYXRlQ2hlY2tzdW0oTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQxNl90IGFQc2V1ZG9IZWFkZXJDaGVja3N1bSk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0R5bmFtaWNQb3J0TWluID0gNDkxNTIsICAvLy88IFNlcnZpY2UgTmFtZSBhbmQgVHJhbnNwb3J0IFByb3RvY29sIFBvcnQgTnVtYmVyIFJlZ2lzdHJ5CisgICAgICAgIGtEeW5hbWljUG9ydE1heCA9IDY1NTM1LCAgLy8vPCBTZXJ2aWNlIE5hbWUgYW5kIFRyYW5zcG9ydCBQcm90b2NvbCBQb3J0IE51bWJlciBSZWdpc3RyeQorICAgIH07CisgICAgdWludDE2X3QgbUVwaGVtZXJhbFBvcnQ7CisgICAgVWRwU29ja2V0ICptU29ja2V0czsKK307CisKK09UX1RPT0xfUEFDS0VEX0JFR0lOCitzdHJ1Y3QgVWRwSGVhZGVyUG9ECit7CisgICAgdWludDE2X3QgbVNvdXJjZTsKKyAgICB1aW50MTZfdCBtRGVzdGluYXRpb247CisgICAgdWludDE2X3QgbUxlbmd0aDsKKyAgICB1aW50MTZfdCBtQ2hlY2tzdW07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgVURQIGhlYWRlciBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFVkcEhlYWRlcjogcHJpdmF0ZSBVZHBIZWFkZXJQb0QKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBVRFAgU291cmNlIFBvcnQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVURQIFNvdXJjZSBQb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0U291cmNlUG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1Tb3VyY2UpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBVRFAgU291cmNlIFBvcnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUG9ydCAgVGhlIFVEUCBTb3VyY2UgUG9ydC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U291cmNlUG9ydCh1aW50MTZfdCBhUG9ydCkgeyBtU291cmNlID0gSG9zdFN3YXAxNihhUG9ydCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFVEUCBEZXN0aW5hdGlvbiBQb3J0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFVEUCBEZXN0aW5hdGlvbiBQb3J0LgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGVzdGluYXRpb25Qb3J0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobURlc3RpbmF0aW9uKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVURQIERlc3RpbmF0aW9uIFBvcnQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUG9ydCAgVGhlIFVEUCBEZXN0aW5hdGlvbiBQb3J0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREZXN0aW5hdGlvblBvcnQodWludDE2X3QgYVBvcnQpIHsgbURlc3RpbmF0aW9uID0gSG9zdFN3YXAxNihhUG9ydCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFVEUCBMZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVURQIExlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1MZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBVRFAgTGVuZ3RoLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIFVEUCBMZW5ndGguCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlbmd0aCh1aW50MTZfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBIb3N0U3dhcDE2KGFMZW5ndGgpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBVRFAgQ2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVURQIENoZWNrc3VtLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hlY2tzdW0odm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtQ2hlY2tzdW0pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBVRFAgQ2hlY2tzdW0uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hlY2tzdW0gIFRoZSBVRFAgQ2hlY2tzdW0uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoZWNrc3VtKHVpbnQxNl90IGFDaGVja3N1bSkgeyBtQ2hlY2tzdW0gPSBIb3N0U3dhcDE2KGFDaGVja3N1bSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCBmb3IgdGhlIFVEUCBMZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgYnl0ZSBvZmZzZXQgZm9yIHRoZSBVRFAgTGVuZ3RoLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgR2V0TGVuZ3RoT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIG9mZnNldG9mKFVkcEhlYWRlclBvRCwgbUxlbmd0aCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIHRoZSBieXRlIG9mZnNldCBmb3IgdGhlIFVEUCBDaGVja3N1bS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBieXRlIG9mZnNldCBmb3IgdGhlIFVEUCBDaGVja3N1bS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IEdldENoZWNrc3VtT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIG9mZnNldG9mKFVkcEhlYWRlclBvRCwgbUNoZWNrc3VtKTsgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2UgSXA2Cit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRfVURQNl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9vcGVudGhyZWFkLWNvcmUtY29uZmlnLmggYi9zcmMvY29yZS9vcGVudGhyZWFkLWNvcmUtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4MTA4OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL29wZW50aHJlYWQtY29yZS1jb25maWcuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBjb25zdGFudHMgZm9yIE9wZW5UaHJlYWQuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFEX0NPUkVfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9DT05GSUdfSF8KKworI2RlZmluZSBPUEVOVEhSRUFEX0NPUkVfQ09ORklHX0hfSU4KKworI2lmZGVmIE9QRU5USFJFQURfUFJPSkVDVF9DT1JFX0NPTkZJR19GSUxFCisjaW5jbHVkZSBPUEVOVEhSRUFEX1BST0pFQ1RfQ09SRV9DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtZGVmYXVsdC1jb25maWcuaCIKKworI3VuZGVmIE9QRU5USFJFQURfQ09SRV9DT05GSUdfSF9JTgorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09SRV9DT05GSUdfSF8KKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvb3BlbnRocmVhZC1jb3JlLWRlZmF1bHQtY29uZmlnLmggYi9zcmMvY29yZS9vcGVudGhyZWFkLWNvcmUtZGVmYXVsdC1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZmMjcwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1jb3JlLWRlZmF1bHQtY29uZmlnLmgKQEAgLTAsMCArMSw4NjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmF1bHQgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzCisgKiAgIGZvciBPcGVuVGhyZWFkLgorICovCisKKyNpZm5kZWYgT1BFTlRIUkVBRF9DT1JFX0RFRkFVTFRfQ09ORklHX0hfCisjZGVmaW5lIE9QRU5USFJFQURfQ09SRV9ERUZBVUxUX0NPTkZJR19IXworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVORE9SX09VSQorICoKKyAqIFRoZSBPcmdhbml6YXRpb25hbGx5IFVuaXF1ZSBJZGVudGlmaWVyIGZvciB0aGUgVGhyZWFkIHN0YWNrLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRU5ET1JfT1VJCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFTkRPUl9PVUkgICAgICAgICAgICAgICAgICAgICAgMHgxOGI0MzAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVORE9SX09VSQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9SRVYKKyAqCisgKiBUaGUgU3RhY2sgVmVyc2lvbiBSZXZpc2lvbiBmb3IgdGhlIFRocmVhZCBzdGFjay4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9SRVYKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9SRVYgICAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fUkVWCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01BSk9SCisgKgorICogVGhlIFN0YWNrIFZlcnNpb24gTWFqb3IgZm9yIHRoZSBUaHJlYWQgc3RhY2suCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fTUFKT1IKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NQUpPUiAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fTUFKT1IKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQUNLX1ZFUlNJT05fTUlOT1IKKyAqCisgKiBUaGUgU3RhY2sgVmVyc2lvbiBNaW5vciBmb3IgdGhlIFRocmVhZCBzdGFjay4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NSU5PUgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19TVEFDS19WRVJTSU9OX01JTk9SICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfU1RBQ0tfVkVSU0lPTl9NSU5PUgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTlVNX01FU1NBR0VfQlVGRkVSUworICoKKyAqIFRoZSBudW1iZXIgb2YgbWVzc2FnZSBidWZmZXJzIGluIHRoZSBidWZmZXIgcG9vbC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTlVNX01FU1NBR0VfQlVGRkVSUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fTUVTU0FHRV9CVUZGRVJTICAgICAgICAgICAgICAgICAgIDQwCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX05VTV9NRVNTQUdFX0JVRkZFUlMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01FU1NBR0VfQlVGRkVSX1NJWkUKKyAqCisgKiBUaGUgc2l6ZSBvZiBhIG1lc3NhZ2UgYnVmZmVyIGluIGJ5dGVzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NRVNTQUdFX0JVRkZFUl9TSVpFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01FU1NBR0VfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgMTI4CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01FU1NBR0VfQlVGRkVSX1NJWkUKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hBTk5FTAorICoKKyAqIFRoZSBkZWZhdWx0IElFRUUgODAyLjE1LjQgY2hhbm5lbC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSEFOTkVMCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSEFOTkVMCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUgorICoKKyAqIFRoZSBkZWZhdWx0IElFRUUgODAyLjE1LjQgbWF4aW11bSB0cmFuc21pdCBwb3dlciAoZEJtKQorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX01BWF9UUkFOU01JVF9QT1dFUiAgICAgICAgICAgIDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9NQVhfVFJBTlNNSVRfUE9XRVIKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19ESVJFQ1QKKyAqCisgKiBNYXhpbXVtIG51bWJlciBvZiBNQUMgbGF5ZXIgdHJhbnNtaXQgYXR0ZW1wdHMgZm9yIGFuIG91dGJvdW5kIGRpcmVjdCBmcmFtZS4KKyAqIFBlciBJRUVFIDgwMi4xNS40LTIwMDYsIGRlZmF1bHQgdmFsdWUgaXMgc2V0IHRvIChtYWNNYXhGcmFtZVJldHJpZXMgKyAxKSB3aXRoIG1hY01heEZyYW1lUmV0cmllcyA9IDMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19ESVJFQ1QKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0RJUkVDVCAgICAgICAgICAgICAgICA0CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0RJUkVDVAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0lORElSRUNUX1BFUl9QT0xMCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgTUFDIGxheWVyIHRyYW5zbWl0IGF0dGVtcHRzIGZvciBhbiBvdXRib3VuZCBpbmRpcmVjdCBmcmFtZSAodG8gYSBzbGVlcHkgY2hpbGQpIGFmdGVyIHJlY2VpdmluZworICogYSBkYXRhIHJlcXVlc3QgY29tbWFuZCAoZGF0YSBwb2xsKSBmcm9tIHRoZSBjaGlsZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0lORElSRUNUX1BFUl9QT0xMCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QRVJfUE9MTCAgICAgMQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QRVJfUE9MTAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0lORElSRUNUX1BPTExTCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXQgYXR0ZW1wdHMgZm9yIGFuIG91dGJvdW5kIGluZGlyZWN0IGZyYW1lIChmb3IgYSBzbGVlcHkgY2hpbGQpIGVhY2ggdHJpZ2dlcmVkIGJ5IHRoZQorICogcmVjZXB0aW9uIG9mIGEgbmV3IGRhdGEgcmVxdWVzdCBjb21tYW5kIChhIG5ldyBkYXRhIHBvbGwpIGZyb20gdGhlIHNsZWVweSBjaGlsZC4gRWFjaCBkYXRhIHBvbGwgdHJpZ2dlcmVkIGF0dGVtcHQgaXMKKyAqIHJldHJpZWQgYnkgdGhlIE1BQyBsYXllciB1cCB0byBgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0lORElSRUNUX1BFUl9QT0xMYCB0aW1lcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0lORElSRUNUX1BPTExTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QT0xMUyAgICAgICAgNAorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9UWF9BVFRFTVBUU19JTkRJUkVDVF9QT0xMUworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRFJPUF9NRVNTQUdFX09OX0ZSQUdNRU5UX1RYX0ZBSUxVUkUKKyAqCisgKiBEZWZpbmUgYXMgMSBmb3IgT3BlblRocmVhZCB0byBkcm9wIGEgbWVzc2FnZSAoYW5kIG5vdCBzZW5kIGFueSByZW1haW5pbmcgZnJhZ21lbnRzIG9mIHRoZSBtZXNzYWdlKSBpZiBhbGwgdHJhbnNtaXQKKyAqIGF0dGVtcHRzIGZhaWwgZm9yIGEgZnJhZ21lbnQgb2YgdGhlIG1lc3NhZ2UuIEZvciBhIGRpcmVjdCB0cmFuc21pc3Npb24sIGEgZmFpbHVyZSBvY2N1cnMgYWZ0ZXIgYWxsIE1BQyB0cmFuc21pc3Npb24KKyAqIGF0dGVtcHRzIGZvciBhIGdpdmVuIGZyYWdtZW50IGFyZSB1bnN1Y2Nlc3NmdWwuIEZvciBhbiBpbmRpcmVjdCB0cmFuc21pc3Npb24sIGEgZmFpbHVyZSBvY2N1cnMgYWZ0ZXIgYWxsIGRhdGEgcG9sbAorICogdHJpZ2dlcmVkIHRyYW5zbWlzc2lvbiBhdHRlbXB0cyBmb3IgYSBnaXZlbiBmcmFnbWVudCBmYWlsLgorICoKKyAqIElmIHNldCB0byB6ZXJvIChkaXNhYmxlZCksIE9wZW5UaHJlYWQgd2lsbCBhdHRlbXB0IHRvIHNlbmQgc3Vic2VxdWVudCBmcmFnbWVudHMsIHdoZXRoZXIgb3Igbm90IGFsbCB0cmFuc21pc3Npb24KKyAqIGF0dGVtcHRzIGZhaWwgZm9yIGEgZ2l2ZW4gZnJhZ21lbnQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0RST1BfTUVTU0FHRV9PTl9GUkFHTUVOVF9UWF9GQUlMVVJFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0RST1BfTUVTU0FHRV9PTl9GUkFHTUVOVF9UWF9GQUlMVVJFICAgMQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0RST1BfTUVTU0FHRV9PTl9GUkFHTUVOVF9UWF9GQUlMVVJFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19BVFRBQ0hfREFUQV9QT0xMX1BFUklPRAorICoKKyAqIFRoZSBEYXRhIFBvbGwgcGVyaW9kIGR1cmluZyBhdHRhY2ggaW4gbWlsbGlzZWNvbmRzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19BVFRBQ0hfREFUQV9QT0xMX1BFUklPRAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19BVFRBQ0hfREFUQV9QT0xMX1BFUklPRCAgICAgICAgICAgICAgIDEwMAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19BVFRBQ0hfREFUQV9QT0xMX1BFUklPRAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQUREUkVTU19DQUNIRV9FTlRSSUVTCisgKgorICogVGhlIG51bWJlciBvZiBFSUQtdG8tUkxPQyBjYWNoZSBlbnRyaWVzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19BRERSRVNTX0NBQ0hFX0VOVFJJRVMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfQUREUkVTU19DQUNIRV9FTlRSSUVTICAgICAgICAgICAgICAgICAxMAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19BRERSRVNTX0NBQ0hFX0VOVFJJRVMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTgorICoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGlsZHJlbi4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0NISUxEUkVOCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFYX0NISUxEUkVOCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NISUxEX1RJTUVPVVQKKyAqCisgKiBUaGUgZGVmYXVsdCBjaGlsZCB0aW1lb3V0IHZhbHVlIChpbiBzZWNvbmRzKS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSElMRF9USU1FT1VUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0RFRkFVTFRfQ0hJTERfVElNRU9VVCAgICAgICAgICAgICAgICAgMjQwCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSElMRF9USU1FT1VUCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19JUF9BRERSU19QRVJfQ0hJTEQKKyAqCisgKiBUaGUgbWluaW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIElQdjYgYWRkcmVzcyByZWdpc3RyYXRpb25zIHBlciBjaGlsZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfSVBfQUREUlNfUEVSX0NISUxECisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0lQX0FERFJTX1BFUl9DSElMRCAgICAgICAgICAgICAgICAgICAgNAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19JUF9BRERSU19QRVJfQ0hJTEQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9FWFRfSVBfQUREUlMKKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIElQdjYgYWRkcmVzc2VzIGFsbG93cyB0byBiZSBleHRlcm5hbGx5IGFkZGVkLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX0lQX0FERFJTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9FWFRfSVBfQUREUlMgICAgICAgICAgICAgICAgICAgICAgNAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX0lQX0FERFJTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX01VTFRJQ0FTVF9JUF9BRERSUworICoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzIGFsbG93cyB0byBiZSBleHRlcm5hbGx5IGFkZGVkLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX01VTFRJQ0FTVF9JUF9BRERSUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRVhUX01VTFRJQ0FTVF9JUF9BRERSUyAgICAgICAgICAgIDIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VYVF9NVUxUSUNBU1RfSVBfQUREUlMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHXzZMT1dQQU5fUkVBU1NFTUJMWV9USU1FT1VUCisgKgorICogVGhlIDZMb1dQQU4gZnJhZ21lbnQgcmVhc3NlbWJseSB0aW1lb3V0IGluIHNlY29uZHMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHXzZMT1dQQU5fUkVBU1NFTUJMWV9USU1FT1VUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHXzZMT1dQQU5fUkVBU1NFTUJMWV9USU1FT1VUICAgICAgICAgICAgNQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR182TE9XUEFOX1JFQVNTRU1CTFlfVElNRU9VVAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJJRVMKKyAqCisgKiBUaGUgbnVtYmVyIG9mIE1QTCBTZWVkIFNldCBlbnRyaWVzIGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NUExfU0VFRF9TRVRfRU5UUklFUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NUExfU0VFRF9TRVRfRU5UUklFUyAgICAgICAgICAgICAgICAgIDMyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01QTF9TRUVEX1NFVF9FTlRSSUVTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NUExfU0VFRF9TRVRfRU5UUllfTElGRVRJTUUKKyAqCisgKiBUaGUgTVBMIFNlZWQgU2V0IGVudHJ5IGxpZmV0aW1lIGluIHNlY29uZHMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01QTF9TRUVEX1NFVF9FTlRSWV9MSUZFVElNRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NUExfU0VFRF9TRVRfRU5UUllfTElGRVRJTUUgICAgICAgICAgIDUKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTVBMX1NFRURfU0VUX0VOVFJZX0xJRkVUSU1FCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19KT0lORVJfVURQX1BPUlQKKyAqCisgKiBUaGUgTVBMIGNhY2hlIGVudHJ5IGxpZmV0aW1lIGluIHNlY29uZHMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0pPSU5FUl9VRFBfUE9SVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19KT0lORVJfVURQX1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDEwMDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfSk9JTkVSX1VEUF9QT1JUCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfRU5FUkdZX1JFU1VMVFMKKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgRW5lcmd5IExpc3QgZW50cmllcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VORVJHWV9SRVNVTFRTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BWF9FTkVSR1lfUkVTVUxUUyAgICAgICAgICAgICAgICAgICAgNjQKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFYX0VORVJHWV9SRVNVTFRTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMKKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgSm9pbmVyIGVudHJpZXMgbWFpbnRhaW5lZCBieSB0aGUgQ29tbWlzc2lvbmVyLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQVhfSk9JTkVSX0VOVFJJRVMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTUFYX0pPSU5FUl9FTlRSSUVTICAgICAgICAgICAgICAgICAgICAyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX01BWF9KT0lORVJfRU5UUklFUworCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFYX1NUQVRFQ0hBTkdFX0hBTkRMRVJTCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YXRlLWNoYW5nZWQgY2FsbGJhY2sgaGFuZGxlcnMgKHNldCB1c2luZyBgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjaygpYCkuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01BWF9TVEFURUNIQU5HRV9IQU5ETEVSUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfU1RBVEVDSEFOR0VfSEFORExFUlMgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFYX1NUQVRFQ0hBTkdFX0hBTkRMRVJTCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19USU1FT1VUCisgKgorICogTWluaW11bSBzcGFjaW5nIGJlZm9yZSBmaXJzdCByZXRyYW5zbWlzc2lvbiB3aGVuIEFDSyBpcyBub3QgcmVjZWl2ZWQgKFJGQzcyNTIgZGVmYXVsdCB2YWx1ZSBpcyAyKS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfVElNRU9VVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgIDIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfVElNRU9VVAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfUkFORE9NX0ZBQ1RPUl9OVU1FUkFUT1IKKyAqCisgKiBOdW1lcmF0b3Igb2YgQUNLX1JBTkRPTV9GQUNUT1IgdXNlZCB0byBjYWxjdWxhdGUgbWF4aW11bSBzcGFjaW5nIGJlZm9yZSBmaXJzdCByZXRyYW5zbWlzc2lvbiB3aGVuCisgKiBBQ0sgaXMgbm90IHJlY2VpdmVkIChSRkM3MjUyIGRlZmF1bHQgdmFsdWUgb2YgQUNLX1JBTkRPTV9GQUNUT1IgaXMgMS41LCBtdXN0IG5vdCBiZSBkZWNyZWFzZWQgYmVsb3cgMSkuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1JBTkRPTV9GQUNUT1JfTlVNRVJBVE9SCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1JBTkRPTV9GQUNUT1JfTlVNRVJBVE9SICAgICAgMworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX05VTUVSQVRPUgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9BQ0tfUkFORE9NX0ZBQ1RPUl9ERU5PTUlOQVRPUgorICoKKyAqIERlbm9taW5hdG9yIG9mIEFDS19SQU5ET01fRkFDVE9SIHVzZWQgdG8gY2FsY3VsYXRlIG1heGltdW0gc3BhY2luZyBiZWZvcmUgZmlyc3QgcmV0cmFuc21pc3Npb24gd2hlbgorICogQUNLIGlzIG5vdCByZWNlaXZlZCAoUkZDNzI1MiBkZWZhdWx0IHZhbHVlIG9mIEFDS19SQU5ET01fRkFDVE9SIGlzIDEuNSwgbXVzdCBub3QgYmUgZGVjcmVhc2VkIGJlbG93IDEpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX0RFTk9NSU5BVE9SCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0NPQVBfQUNLX1JBTkRPTV9GQUNUT1JfREVOT01JTkFUT1IgICAgMgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX0FDS19SQU5ET01fRkFDVE9SX0RFTk9NSU5BVE9SCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19DT0FQX01BWF9SRVRSQU5TTUlUCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIGZvciBDb0FQIENvbmZpcm1hYmxlIG1lc3NhZ2VzIChSRkM3MjUyIGRlZmF1bHQgdmFsdWUgaXMgNCkuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfTUFYX1JFVFJBTlNNSVQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9NQVhfUkVUUkFOU01JVCAgICAgICAgICAgICAgICAgICA0CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0NPQVBfTUFYX1JFVFJBTlNNSVQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfU0VSVkVSX01BWF9DQUNIRURfUkVTUE9OU0VTCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgY2FjaGVkIHJlc3BvbnNlcyBmb3IgQ29BUCBDb25maXJtYWJsZSBtZXNzYWdlcy4KKyAqCisgKiBDYWNoZWQgcmVzcG9uc2VzIGFyZSB1c2VkIGZvciBtZXNzYWdlIGRlZHVwbGljYXRpb24uCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0NPQVBfU0VSVkVSX01BWF9DQUNIRURfUkVTUE9OU0VTCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0NPQVBfU0VSVkVSX01BWF9DQUNIRURfUkVTUE9OU0VTICAgICAgMTAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfQ09BUF9TRVJWRVJfTUFYX0NBQ0hFRF9SRVNQT05TRVMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0ROU19SRVNQT05TRV9USU1FT1VUCisgKgorICogTWF4aW11bSB0aW1lIHRoYXQgRE5TIENsaWVudCB3YWl0cyBmb3IgcmVzcG9uc2UgaW4gbWlsbGlzZWNvbmRzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19ETlNfUkVTUE9OU0VfVElNRU9VVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19ETlNfUkVTUE9OU0VfVElNRU9VVCAgICAgICAgICAgICAgICAgIDMwMDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfRE5TX1JFU1BPTlNFX1RJTUVPVVQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0ROU19NQVhfUkVUUkFOU01JVAorICoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBmb3IgRE5TIGNsaWVudC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfRE5TX01BWF9SRVRSQU5TTUlUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0ROU19NQVhfUkVUUkFOU01JVCAgICAgICAgICAgICAgICAgICAgMgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19ETlNfTUFYX1JFVFJBTlNNSVQKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0pPSU5fQkVBQ09OX1ZFUlNJT04KKyAqCisgKiBUaGUgQmVhY29uIHZlcnNpb24gdG8gdXNlIHdoZW4gdGhlIGJlYWNvbiBqb2luIGZsYWcgaXMgc2V0LgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19KT0lOX0JFQUNPTl9WRVJTSU9OCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0pPSU5fQkVBQ09OX1ZFUlNJT04gICAgICAgICAgICAgICAgICAga1Byb3RvY29sVmVyc2lvbgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19KT0lOX0JFQUNPTl9WRVJTSU9OCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQKKyAqCisgKiBUaGUgbWVzc2FnZSBwb29sIGlzIG1hbmFnZWQgYnkgcGxhdGZvcm0gZGVmaW5lZCBsb2dpYyB3aGVuIHRoaXMgZmxhZyBpcyBzZXQuCisgKiBUaGlzIGZlYXR1cmUgd291bGQgdHlwaWNhbGx5IGJlIHVzZWQgd2hlbiBvcGVyYXRpbmcgaW4gYSBtdWx0aS10aHJlYWRlZCBzeXN0ZW0KKyAqIGFuZCBtdWx0aXBsZSB0aHJlYWRzIG5lZWQgdG8gYWNjZXNzIHRoZSBtZXNzYWdlIHBvb2wuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1BMQVRGT1JNX01FU1NBR0VfTUFOQUdFTUVOVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9NRVNTQUdFX01BTkFHRU1FTlQgICAgICAgICAgIDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fTUVTU0FHRV9NQU5BR0VNRU5UCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQUNfQkxBQ0tMSVNUX1NJWkUKKyAqCisgKiBUaGUgbnVtYmVyIGlmIE1BQyBibGFja2xpc3QgZW50cmllcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFDX0JMQUNLTElTVF9TSVpFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BQ19CTEFDS0xJU1RfU0laRSAgICAgICAgICAgICAgICAgICAgMzIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFDX0JMQUNLTElTVF9TSVpFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQUNfV0hJVEVMSVNUX1NJWkUKKyAqCisgKiBUaGUgbnVtYmVyIGlmIE1BQyB3aGl0ZWxpc3QgZW50cmllcy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUFDX1dISVRFTElTVF9TSVpFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX01BQ19XSElURUxJU1RfU0laRSAgICAgICAgICAgICAgICAgICAgMzIKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTUFDX1dISVRFTElTVF9TSVpFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVE9SRV9GUkFNRV9DT1VOVEVSX0FIRUFECisgKgorICogIFRoZSB2YWx1ZSBhaGVhZCBvZiB0aGUgY3VycmVudCBmcmFtZSBjb3VudGVyIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2UKKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1RPUkVfRlJBTUVfQ09VTlRFUl9BSEVBRAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19TVE9SRV9GUkFNRV9DT1VOVEVSX0FIRUFEICAgICAgICAgICAgIDEwMDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfU1RPUkVfRlJBTUVfQ09VTlRFUl9BSEVBRAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMCisgKgorICogVGhlIGxvZyBsZXZlbCAodXNlZCBhdCBjb21waWxlIHRpbWUpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVF9MT0dfTEVWRUxfQ1JJVAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTEVWRUwKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTAorICoKKyAqIERlZmluZSBhcyAxIHRvIGVuYWJsZSBkeW5hbWljIGxvZyBsZXZlbCBjb250cm9sLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMIGRldGVybWluZXMgdGhlIGxvZyBsZXZlbCBhdAorICogY29tcGlsZSB0aW1lLiBUaGUgZHluYW1pYyBsb2cgbGV2ZWwgY29udHJvbCAoaWYgZW5hYmxlZCkgb25seSBhbGxvd3MKKyAqIGRlY3JlYXNpbmcgdGhlIGxvZyBsZXZlbCBmcm9tIHRoZSBjb21waWxlIHRpbWUgdmFsdWUuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0xPR19MRVZFTAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwgICAgICAgICAgICAgIDAKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19MT0dfTEVWRUwKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19BUEkKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIE9wZW5UaHJlYWQgQVBJIGxvZ2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19BUEkKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19BUEkKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19NTEUKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIE1MRSBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19NTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUxFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVJQCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBFSUQtdG8tUkxPQyBtYXAgbG9nZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FSUAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQVJQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX0FSUAorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX05FVERBVEEKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIE5ldHdvcmsgRGF0YSBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVUREFUQQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVUREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX05FVERBVEEKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19JQ01QCisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBJQ01QdjYgbG9nZ2luZy4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lDTVAKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lDTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19JQ01QCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfSVA2CisgKgorICogRGVmaW5lIHRvIGVuYWJsZSBJUHY2IGxvZ2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19JUDYKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX0lQNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19JUDYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIElFRUUgODAyLjE1LjQgTUFDIGxvZ2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19NRU0KKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIG1lbW9yeSBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUVNCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19NRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTUVNCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUEtUX0RVTVAKKyAqCisgKiBEZWZpbmUgdG8gZW5hYmxlIGxvZyBjb250ZW50IG9mIHBhY2tldHMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QS1RfRFVNUAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUEtUX0RVTVAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BLVF9EVU1QCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVURElBRworICoKKyAqIERlZmluZSB0byBlbmFibGUgbmV0d29yayBkaWFnbm9zdGljIGxvZ2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19ORVRESUFHCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19ORVRESUFHICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfTkVURElBRworCisvKioKKyogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUExBVEZPUk0KKyoKKyogRGVmaW5lIHRvIGVuYWJsZSBwbGF0Zm9ybSByZWdpb24gbG9nZ2luZy4KKyoKKyovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QTEFURk9STQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUExBVEZPUk0gICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BMQVRGT1JNCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQ09BUAorICoKKyAqIERlZmluZSB0byBlbmFibGUgQ09BUCBsb2dnaW5nLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQ09BUAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19MT0dfQ09BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTE9HX0NPQVAKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMCisgKgorICogRGVmaW5lIHRvIHByZXBlbmQgdGhlIGxvZyBsZXZlbCB0byBhbGwgbG9nIG1lc3NhZ2VzCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9MRVZFTAorCisvKioKKyogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04KKyoKKyogRGVmaW5lIHRvIHByZXBlbmQgdGhlIGxvZyByZWdpb24gdG8gYWxsIGxvZyBtZXNzYWdlcworKgorKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1BSRVBFTkRfUkVHSU9OCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0xPR19QUkVQRU5EX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfUFJFUEVORF9SRUdJT04KKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19TVUZGSVgKKyAqCisgKiBEZWZpbmUgc3VmZml4IHRvIGFwcGVuZCBhdCB0aGUgZW5kIG9mIGxvZ3MuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0xPR19TVUZGSVgKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTE9HX1NVRkZJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19MT0dfU1VGRklYCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFUX0xPR19GVU5DVElPTgorICoKKyAqIERlZmluZXMgdGhlIG5hbWUgb2YgZnVuY3Rpb24vbWFjcm8gdXNlZCBmb3IgbG9nZ2luZyBpbnNpZGUgT3BlblRocmVhZCwgYnkgZGVmYXVsdCBpcyBzZXQgdG8gYG90UGxhdExvZygpYC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVF9MT0dfRlVOQ1RJT04KKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfUExBVF9MT0dfRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICBvdFBsYXRMb2cKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVAorICoKKyAqIERlZmluZSB0byAxIHRvIGVuYWJsZSBkZWZhdWx0IGxvZyBvdXRwdXQuCisgKgorICogV2hlbiBlbmFibGVkIE9wZW5UaHJlYWQgcHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBgb3RQbGF0TG9nKClgIHdoaWNoIGlzIHRpZWQgdG8gZWl0aGVyIE5DUCBvciBDTEkKKyAqIHN0cmVhbSB3cml0ZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RFRkFVTFRfTE9HX09VVFBVVCAgICAgICAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9ESENQX1BSRUZJWEVTCisgKgorICogVGhlIG51bWJlciBvZiBkaGNwIHByZWZpeGVzLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUworI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OVU1fREhDUF9QUkVGSVhFUyAgICAgICAgICAgICAgICAgICAgIDQKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTlVNX0RIQ1BfUFJFRklYRVMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9TTEFBQ19BRERSRVNTRVMKKyAqCisgKiBUaGUgbnVtYmVyIG9mIGF1dG8tY29uZmlndXJlZCBTTEFBQyBhZGRyZXNzZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX05VTV9TTEFBQ19BRERSRVNTRVMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTlVNX1NMQUFDX0FERFJFU1NFUyAgICAgICAgICAgICAgICAgICA0CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX05VTV9TTEFBQ19BRERSRVNTRVMKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9UWF9CVUZGRVJfU0laRQorICoKKyAqICBUaGUgc2l6ZSBvZiBOQ1AgbWVzc2FnZSBidWZmZXIgaW4gYnl0ZXMKKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX1RYX0JVRkZFUl9TSVpFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05DUF9UWF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgNTEyCisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX05DUF9UWF9CVUZGRVJfU0laRQorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX1VBUlRfVFhfQ0hVTktfU0laRQorICoKKyAqICBUaGUgc2l6ZSBvZiBOQ1AgVUFSVCBUWCBjaHVuayBpbiBieXRlcworICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9UWF9DSFVOS19TSVpFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1RYX0NIVU5LX1NJWkUgICAgICAgICAgICAgICAgMTI4CisjZW5kaWYgIC8vIE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1RYX0NIVU5LX1NJWkUKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1JYX0JVRkZFUl9TSVpFCisgKgorICogIFRoZSBzaXplIG9mIE5DUCBVQVJUIFJYIGJ1ZmZlciBpbiBieXRlcworICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9SWF9CVUZGRVJfU0laRQorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVUFSVF9SWF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgIDEzMDAKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9DT05GSUdfTkNQX1VBUlRfUlhfQlVGRkVSX1NJWkUKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9TUElfQlVGRkVSX1NJWkUKKyAqCisgKiAgVGhlIHNpemUgb2YgTkNQIFNQSSAoUlgvVFgpIGJ1ZmZlciBpbiBieXRlcworICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfU1BJX0JVRkZFUl9TSVpFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05DUF9TUElfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgMTMwMAorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfU1BJX0JVRkZFUl9TSVpFCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19QTEFURk9STV9BU1NFUlRfTUFOQUdFTUVOVAorICoKKyAqIFRoZSBhc3NlcnQgaXMgbWFuYWdlZCBieSBwbGF0Zm9ybSBkZWZpbmVkIGxvZ2ljIHdoZW4gdGhpcyBmbGFnIGlzIHNldC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fQVNTRVJUX01BTkFHRU1FTlQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfUExBVEZPUk1fQVNTRVJUX01BTkFHRU1FTlQgICAgICAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzb2Z0d2FyZSBBQ0sgdGltZW91dCBsb2dpYy4KKyAqCisgKiBBcHBsaWNhYmxlIG9ubHkgaWYgcmF3IGxpbmsgbGF5ZXIgQVBJIGlzIGVuYWJsZWQgKGkuZS4sIGBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUElgIGlzIHNldCkuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9BQ0tfVElNRU9VVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfQUNLX1RJTUVPVVQgICAgICAgICAgIDAKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX1JFVFJBTlNNSVQKKyAqCisgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc29mdHdhcmUgcmV0cmFuc21pc3Npb24gbG9naWMuCisgKgorICogQXBwbGljYWJsZSBvbmx5IGlmIHJhdyBsaW5rIGxheWVyIEFQSSBpcyBlbmFibGVkIChpLmUuLCBgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJYCBpcyBzZXQpLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfUkVUUkFOU01JVCAgICAgICAgICAgIDAKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NPRlRXQVJFX0VORVJHWV9TQ0FOCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNvZnR3YXJlIGVuZXJneSBzY2FubmluZyBsb2dpYy4KKyAqCisgKiBBcHBsaWNhYmxlIG9ubHkgaWYgcmF3IGxpbmsgbGF5ZXIgQVBJIGlzIGVuYWJsZWQgKGkuZS4sIGBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUElgIGlzIHNldCkuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TT0ZUV0FSRV9FTkVSR1lfU0NBTgorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU09GVFdBUkVfRU5FUkdZX1NDQU4gICAgICAgICAgIDAKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1BMQVRGT1JNX1VTRUNfQkFDS09GRl9USU1FUgorICoKKyAqIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBtaWNyb3NlY29uZCBiYWNrb2ZmIHRpbWVyIGltcGxlbWVudGVkIGluIHBsYXRmb3JtLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfUExBVEZPUk1fVVNFQ19CQUNLT0ZGX1RJTUVSCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9QTEFURk9STV9VU0VDX0JBQ0tPRkZfVElNRVIgICAgMAorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfQVVUT19TVEFSVF9TVVBQT1JUCisgKgorICogRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGF1dG8gc3RhcnQgbG9naWMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9BVVRPX1NUQVJUX1NVUFBPUlQKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0FVVE9fU1RBUlRfU1VQUE9SVCAgICAgICAgICAgICAxCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX1dIRU5fSk9JTkFCTEUKKyAqCisgKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBlbmFibGUgYmVhY29uIHJlc3BvbnNlIGRldmljZSBpcyBtYWRlIGpvaW5hYmxlLgorICoKKyAqIE5vdGUgdGhhdCB3aGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgZGV2aWNlIHdpbGwgcmVzcG9uZCB0byBiZWFjb24gbWVzc2FnZSB3aGVuIGl0IGlzIG1hZGUgam9pbmFibGUgRVZFTiBpZgorICogaXQgaXMgaW4gY2hpbGQgb3IgZGV0YWNoZWQgbW9kZXMuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9CRUFDT05fUlNQX1dIRU5fSk9JTkFCTEUKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0JFQUNPTl9SU1BfV0hFTl9KT0lOQUJMRSAgICAgICAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX01CRURUTFNfSEVBUF9TSVpFCisgKgorICogVGhlIHNpemUgb2YgbWJlZFRMUyBoZWFwIGJ1ZmZlciB3aGVuIERUTFMgaXMgZW5hYmxlZC4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkUKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkUgICAgICAgICAgICAgICAgICAgICAoMjA0OCAqIHNpemVvZih2b2lkICopKQorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19NQkVEVExTX0hFQVBfU0laRV9OT19EVExTCisgKgorICogVGhlIHNpemUgb2YgbWJlZFRMUyBoZWFwIGJ1ZmZlciB3aGVuIERUTFMgaXMgZGlzYWJsZWQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX01CRURUTFNfSEVBUF9TSVpFX05PX0RUTFMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfTUJFRFRMU19IRUFQX1NJWkVfTk9fRFRMUyAgICAgICAgICAgICAzODQKKyNlbmRpZgorCisvKioKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICoKKyAqIEVuYWJsZSBzZXR0aW5nIHN0ZWVyaW5nIGRhdGEgb3V0IG9mIGJhbmQuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQiAgICAgICAgICAwCisjZW5kaWYKKworLyoKKyAqIEBkZWYgT1BFTlRIUkVBRF9DT05GSUdfQ0hJTERfU1VQRVJWSVNJT05fSU5URVJWQUwKKyAqCisgKiBUaGUgZGVmYXVsdCBzdXBlcnZpc2lvbiBpbnRlcnZhbCBpbiBzZWNvbmRzIHVzZWQgYnkgcGFyZW50LiBTZXQgdG8gemVybyB0byBkaXNhYmxlIHRoZSBzdXBlcnZpc2lvbiBwcm9jZXNzIG9uIHRoZQorICogcGFyZW50LgorICoKKyAqIEFwcGxpY2FibGUgb25seSBpZiBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlIGlzIGVuYWJsZWQgKGkuZS4sIGBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTiBgIGlzIHNldCkuCisgKgorICogQ2hpbGQgc3VwZXJ2aXNpb24gZmVhdHVyZSBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgcGFyZW50IHRvIGVuc3VyZSB0aGF0IGEgbWVzc2FnZSBpcyBzZW50IHRvIGVhY2ggc2xlZXB5IGNoaWxkCisgKiB3aXRoaW4gdGhlIHN1cGVydmlzaW9uIGludGVydmFsLiBJZiB0aGVyZSBpcyBubyB0cmFuc21pc3Npb24gdG8gdGhlIGNoaWxkIHdpdGhpbiB0aGUgc3VwZXJ2aXNpb24gaW50ZXJ2YWwsIGNoaWxkCisgKiBzdXBlcnZpc29yIHdpbGwgZW5xdWV1ZSBhbmQgc2VuZCBhIHN1cGVydmlzaW9uIG1lc3NhZ2UgKGEgZGF0YSBtZXNzYWdlIHdpdGggZW1wdHkgcGF5bG9hZCkgdG8gdGhlIGNoaWxkLgorICoKKyAqLworI2lmbmRlZiBPUEVOVEhSRUFEX0NPTkZJR19DSElMRF9TVVBFUlZJU0lPTl9JTlRFUlZBTAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19DSElMRF9TVVBFUlZJU0lPTl9JTlRFUlZBTCAgICAgICAgICAgIDEyOQorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9DSEVDS19USU1FT1VUCisgKgorICogVGhlIGRlZmF1bHQgc3VwZXJ2aXNpb24gY2hlY2sgdGltZW91dCBpbnRlcnZhbCAoaW4gc2Vjb25kcykgdXNlZCBieSBhIGRldmljZSBpbiBjaGlsZCBzdGF0ZS4gU2V0IHRvIHplcm8gdG8gZGlzYWJsZQorICogdGhlIHN1cGVydmlzaW9uIGNoZWNrIHByb2Nlc3Mgb24gdGhlIGNoaWxkLgorICoKKyAqIEFwcGxpY2FibGUgb25seSBpZiBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlIGlzIGVuYWJsZWQgKGkuZS4sIGBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTmAgaXMgc2V0KS4KKyAqCisgKiBJZiB0aGUgc2xlZXB5IGNoaWxkIGRvZXMgbm90IGhlYXIgZnJvbSBpdHMgcGFyZW50IHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgaW50ZXJ2YWwsIGl0IGluaXRpYXRlcyB0aGUgcmUtYXR0YWNoCisgKiBwcm9jZXNzIChNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2Ugd2l0aCBpdHMgcGFyZW50KS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1VQRVJWSVNJT05fQ0hFQ0tfVElNRU9VVAorI2RlZmluZSBPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9DSEVDS19USU1FT1VUICAgICAgICAgICAgIDE5MAorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19TVVBFUlZJU0lPTl9NU0dfTk9fQUNLX1JFUVVFU1QKKyAqCisgKiBEZWZpbmUgYXMgMSB0byBjbGVhci9kaXNhYmxlIDE1LjQgYWNrIHJlcXVlc3QgaW4gdGhlIE1BQyBoZWFkZXIgb2YgYSBzdXBlcnZpc2lvbiBtZXNzYWdlLgorICoKKyAqIEFwcGxpY2FibGUgb25seSBpZiBjaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlIGlzIGVuYWJsZWQgKGkuZS4sIGBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTmAgaXMgc2V0KS4KKyAqCisgKi8KKyNpZm5kZWYgT1BFTlRIUkVBRF9DT05GSUdfU1VQRVJWSVNJT05fTVNHX05PX0FDS19SRVFVRVNUCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX1NVUEVSVklTSU9OX01TR19OT19BQ0tfUkVRVUVTVCAgICAgICAgMAorI2VuZGlmCisKKy8qKgorICogQGRlZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorICoKKyAqIERlZmluZSBhcyAxIHRvIGVuYWJsZSBwZWVrL3Bva2UgZnVuY3Rpb25hbGl0eSBvbiBOQ1AuCisgKgorICogUGVlay9Qb2tlIGFsbG93cyB0aGUgaG9zdCB0byByZWFkL3dyaXRlIHRvIG1lbW9yeSBhZGRyZXNzZXMgb24gTkNQLiBUaGlzIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisjZGVmaW5lIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFICAgICAgICAgICAgICAgICAgMAorI2VuZGlmCisKKy8qCisgKiBAZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQVlfQVdBS0VfQkVUV0VFTl9GUkFHTUVOVFMKKyAqCisgKiBEZWZpbmUgYXMgMSB0byBzdGF5IGF3YWtlIGJldHdlZW4gZnJhZ21lbnRzIHdoaWxlIHRyYW5zbWl0dGluZyBhIGxhcmdlIHBhY2tldCwKKyAqIGFuZCB0byBzdGF5IGF3YWtlIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIGZyYW1lIHBlbmRpbmcgc2V0IHRvIHRydWUuCisgKgorICovCisjaWZuZGVmIE9QRU5USFJFQURfQ09ORklHX1NUQVlfQVdBS0VfQkVUV0VFTl9GUkFHTUVOVFMKKyNkZWZpbmUgT1BFTlRIUkVBRF9DT05GSUdfU1RBWV9BV0FLRV9CRVRXRUVOX0ZSQUdNRU5UUyAgICAgICAgICAwCisjZW5kaWYKKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0NPUkVfREVGQVVMVF9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL29wZW50aHJlYWQtaW5zdGFuY2UuaCBiL3NyYy9jb3JlL29wZW50aHJlYWQtaW5zdGFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjlhZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1pbnN0YW5jZS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBAYnJpZWYKKyAqICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIHRoZSB2YXJpYWJsZXMgcmVxdWlyZWQgZm9yIGFsbCBpbnN0YW5jZXMgb2YgT3BlblRocmVhZCBBUEkuCisgKi8KKworI2lmbmRlZiBPUEVOVEhSRUFESU5TVEFOQ0VfSF8KKyNkZWZpbmUgT1BFTlRIUkVBRElOU1RBTkNFX0hfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGJvb2wuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2xvZ2dpbmcuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLXNpbmdsZS1pbnN0YW5jZS5oIgorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorI2luY2x1ZGUgImFwaS9saW5rX3Jhdy5ocHAiCisjZW5kaWYKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNyeXB0by9tYmVkdGxzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworLyoqCisgKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBhbGwgdGhlIHN0YXRpYyAvIGdsb2JhbCB2YXJpYWJsZXMgdXNlZCBieSBPcGVuVGhyZWFkIGFsbG9jYXRlZCBpbiBvbmUgcGxhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IG90SW5zdGFuY2UKK3sKKyAgICAvLworICAgIC8vIENhbGxiYWNrcworICAgIC8vCisKKyAgICBvdDo6SXA2OjpOZXRpZkNhbGxiYWNrIG1OZXRpZkNhbGxiYWNrW09QRU5USFJFQURfQ09ORklHX01BWF9TVEFURUNIQU5HRV9IQU5ETEVSU107CisKKyAgICBvdElwNlJlY2VpdmVDYWxsYmFjayBtUmVjZWl2ZUlwNkRhdGFncmFtQ2FsbGJhY2s7CisgICAgdm9pZCAqbVJlY2VpdmVJcDZEYXRhZ3JhbUNhbGxiYWNrQ29udGV4dDsKKworICAgIG90SGFuZGxlQWN0aXZlU2NhblJlc3VsdCBtQWN0aXZlU2NhbkNhbGxiYWNrOworICAgIHZvaWQgKm1BY3RpdmVTY2FuQ2FsbGJhY2tDb250ZXh0OworCisgICAgb3RIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0IG1FbmVyZ3lTY2FuQ2FsbGJhY2s7CisgICAgdm9pZCAqbUVuZXJneVNjYW5DYWxsYmFja0NvbnRleHQ7CisKKyAgICAvLworICAgIC8vIFN0YXRlCisgICAgLy8KKworI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBvdDo6Q3J5cHRvOjpNYmVkVGxzIG1NYmVkVGxzOworI2VuZGlmCisgICAgb3Q6OklwNjo6SXA2IG1JcDY7CisgICAgb3Q6OlRocmVhZE5ldGlmIG1UaHJlYWROZXRpZjsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIG90OjpMaW5rUmF3IG1MaW5rUmF3OworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorICAgIG90OjpDb2FwOjpDb2FwIG1BcHBsaWNhdGlvbkNvYXA7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQVBQTElDQVRJT05fQ09BUAorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisgICAgb3RMb2dMZXZlbCBtTG9nTGV2ZWw7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfTE9HX0xFVkVMCisKKyAgICAvLyBDb25zdHJ1Y3RvcgorICAgIG90SW5zdGFuY2Uodm9pZCk7CisKK30gb3RJbnN0YW5jZTsKKworc3RhdGljIGlubGluZSBvdEluc3RhbmNlICpvdEluc3RhbmNlRnJvbUlwNihvdDo6SXA2OjpJcDYgKmFJcDYpCit7CisgICAgcmV0dXJuIChvdEluc3RhbmNlICopQ09OVEFJTklOR19SRUNPUkQoYUlwNiwgb3RJbnN0YW5jZSwgbUlwNik7Cit9CisKK3N0YXRpYyBpbmxpbmUgb3RJbnN0YW5jZSAqb3RJbnN0YW5jZUZyb21UaHJlYWROZXRpZihvdDo6VGhyZWFkTmV0aWYgKmFUaHJlYWROZXRpZikKK3sKKyAgICByZXR1cm4gKG90SW5zdGFuY2UgKilDT05UQUlOSU5HX1JFQ09SRChhVGhyZWFkTmV0aWYsIG90SW5zdGFuY2UsIG1UaHJlYWROZXRpZik7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRElOU1RBTkNFX0hfCmRpZmYgLS1naXQgYS9zcmMvY29yZS9vcGVudGhyZWFkLXNpbmdsZS1pbnN0YW5jZS5oIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmNhNTQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvb3BlbnRocmVhZC1zaW5nbGUtaW5zdGFuY2UuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogQGJyaWVmCisgKiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIGdldHRlciBmdW5jdGlvbnMgZm9yIHNpbmdsZSBpbnN0YW5jZSBPcGVuVGhyZWFkIG9iamVjdHMuCisgKi8KKworI2lmbmRlZiBTSU5HTEVfT1BFTlRIUkVBRF9JTlNUQU5DRV9IXworI2RlZmluZSBTSU5HTEVfT1BFTlRIUkVBRF9JTlNUQU5DRV9IXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKworCisjaWYgIU9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKK2NsYXNzIE1lc2hGb3J3YXJkZXI7CitjbGFzcyBUaW1lclNjaGVkdWxlcjsKK2NsYXNzIFRhc2tsZXRTY2hlZHVsZXI7CituYW1lc3BhY2UgSXA2IHsgY2xhc3MgSXA2OyB9CisKK30gLy8gbmFtZXNwYWNlIG90CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc2luZ2xlIG90SW5zdGFuY2UgKGlmIGluaXRpYWxpemVkIGFuZCByZWFkeSkuCisgKgorICogQHJldHVybnMgQSBwb2ludGVyIHRvIHNpbmdsZSBvdEluc3RhbmNlIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiB0aGUgaW5zdGFuY2UgaXMgbm90IHJlYWR5LCBpLmUuIGVpdGhlciBpdCBpcyBub3QgeWV0CisgKiAgICAgICAgICBpbml0aWFsaXplZCAobm8gY2FsbCB0byBgb3RJbnN0YW5jZUluaXRTaW5nbGUoKWApIG9yIGl0IGlzIGZpbmFsaXplZCAoY2FsbCB0byBgb3RJbnN0YW5jZUZpbmFsaXplKClgKS4KKyAqCisgKi8KK290SW5zdGFuY2UgKm90R2V0SW5zdGFuY2Uodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGUgdGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlIGluc3RhbmNlLgorICoKKyAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSB0aHJlYWQgbmV0d29yayBpbnRlcmZhY2UgaW5zdGFuY2UuCisgKgorICovCitvdDo6VGhyZWFkTmV0aWYgJm90R2V0VGhyZWFkTmV0aWYodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGUgTWVzaEZvcndhcmRlciBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgTWVzaEZvcndhcmRlciBpbnN0YW5jZS4KKyAqCisgKi8KK290OjpNZXNoRm9yd2FyZGVyICZvdEdldE1lc2hGb3J3YXJkZXIodm9pZCk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzaW5nbGUgVGltZXJTY2hlZHVsZXIgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIFRpbWVyU2NoZWR1bGVyIGluc3RhbmNlLgorICoKKyAqLworb3Q6OlRpbWVyU2NoZWR1bGVyICZvdEdldFRpbWVyU2NoZWR1bGVyKHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xlIFRhc2tsZXRTaGNlZHVsZXIgaW5zdGFuY2UuCisgKgorICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIFRhc2tsZXRTaGNlZHVsZXIgaW5zdGFuY2UuCisgKgorICovCitvdDo6VGFza2xldFNjaGVkdWxlciAmb3RHZXRUYXNrbGV0U2NoZWR1bGVyKHZvaWQpOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgc2luZ2xlIElwNiBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgSXA2IGluc3RhbmNlLgorICoKKyAqLworb3Q6OklwNjo6SXA2ICZvdEdldElwNih2b2lkKTsKKworI2VuZGlmIC8vICNpZiAhT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisKKyNlbmRpZiAgLy8gU0lOR0xFX09QRU5USFJFQURfSU5TVEFOQ0VfSF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmFjMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2FkZHJlc3NfcmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsNzEzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIFRocmVhZCdzIEVJRC10by1STE9DIG1hcHBpbmcgYW5kIGNhY2hpbmcuCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKyNkZWZpbmUgV1BQX05BTUUgImFkZHJlc3NfcmVzb2x2ZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImFkZHJlc3NfcmVzb2x2ZXIuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYW5kb20uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWVzaF9mb3J3YXJkZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKwordXNpbmcgb3Q6OkVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMTY7CisKK25hbWVzcGFjZSBvdCB7CisKK0FkZHJlc3NSZXNvbHZlcjo6QWRkcmVzc1Jlc29sdmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtQWRkcmVzc0Vycm9yKE9UX1VSSV9QQVRIX0FERFJFU1NfRVJST1IsICZBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NFcnJvciwgdGhpcyksCisgICAgbUFkZHJlc3NRdWVyeShPVF9VUklfUEFUSF9BRERSRVNTX1FVRVJZLCAmQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVBZGRyZXNzUXVlcnksIHRoaXMpLAorICAgIG1BZGRyZXNzTm90aWZpY2F0aW9uKE9UX1VSSV9QQVRIX0FERFJFU1NfTk9USUZZLCAmQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVBZGRyZXNzTm90aWZpY2F0aW9uLCB0aGlzKSwKKyAgICBtSWNtcEhhbmRsZXIoJkFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlSWNtcFJlY2VpdmUsIHRoaXMpLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVUaW1lciwgdGhpcykKK3sKKyAgICBDbGVhcigpOworCisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtQWRkcmVzc0Vycm9yKTsKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1BZGRyZXNzUXVlcnkpOworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUFkZHJlc3NOb3RpZmljYXRpb24pOworCisgICAgYVRocmVhZE5ldGlmLkdldElwNigpLm1JY21wLlJlZ2lzdGVySGFuZGxlcihtSWNtcEhhbmRsZXIpOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6Q2xlYXIoKQoreworICAgIG1lbXNldCgmbUNhY2hlLCAwLCBzaXplb2YobUNhY2hlKSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBrQ2FjaGVFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBtQ2FjaGVbaV0ubUFnZSA9IGk7CisgICAgfQorfQorCitvdEVycm9yIEFkZHJlc3NSZXNvbHZlcjo6R2V0RW50cnkodWludDhfdCBhSW5kZXgsIG90RWlkQ2FjaGVFbnRyeSAmYUVudHJ5KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFJbmRleCA8IGtDYWNoZUVudHJpZXMsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBtZW1jcHkoJmFFbnRyeS5tVGFyZ2V0LCAmbUNhY2hlW2FJbmRleF0ubVRhcmdldCwgc2l6ZW9mKGFFbnRyeS5tVGFyZ2V0KSk7CisgICAgYUVudHJ5Lm1SbG9jMTYgPSBtQ2FjaGVbYUluZGV4XS5tUmxvYzE2OworICAgIGFFbnRyeS5tVmFsaWQgPSBtQ2FjaGVbYUluZGV4XS5tU3RhdGUgPT0gQ2FjaGU6OmtTdGF0ZUNhY2hlZDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpSZW1vdmUodWludDhfdCByb3V0ZXJJZCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChNbGU6Ok1sZTo6R2V0Um91dGVySWQobUNhY2hlW2ldLm1SbG9jMTYpID09IHJvdXRlcklkKQorICAgICAgICB7CisgICAgICAgICAgICBJbnZhbGlkYXRlQ2FjaGVFbnRyeShtQ2FjaGVbaV0pOworICAgICAgICB9CisgICAgfQorfQorCitBZGRyZXNzUmVzb2x2ZXI6OkNhY2hlICpBZGRyZXNzUmVzb2x2ZXI6Ok5ld0NhY2hlRW50cnkodm9pZCkKK3sKKyAgICBDYWNoZSAqcnZhbCA9IE5VTEw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2FjaGVbaV0ubVN0YXRlID09IENhY2hlOjprU3RhdGVRdWVyeSAmJiBtQ2FjaGVbaV0ubUZhaWx1cmVzID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2YWwgPT0gTlVMTCB8fCBydmFsLT5tQWdlIDwgbUNhY2hlW2ldLm1BZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ2YWwgPSAmbUNhY2hlW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJ2YWwgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEludmFsaWRhdGVDYWNoZUVudHJ5KCpydmFsKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnZhbDsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6Ok1hcmtDYWNoZUVudHJ5QXNVc2VkKENhY2hlICZhRW50cnkpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQ2FjaGVFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNhY2hlW2ldLm1BZ2UgPCBhRW50cnkubUFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNhY2hlW2ldLm1BZ2UrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFFbnRyeS5tQWdlID0gMDsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkludmFsaWRhdGVDYWNoZUVudHJ5KENhY2hlICZhRW50cnkpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQ2FjaGVFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNhY2hlW2ldLm1BZ2UgPiBhRW50cnkubUFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgbUNhY2hlW2ldLm1BZ2UtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFFbnRyeS5tQWdlID0ga0NhY2hlRW50cmllcyAtIDE7CisgICAgYUVudHJ5Lm1TdGF0ZSA9IENhY2hlOjprU3RhdGVJbnZhbGlkOworICAgIG90TG9nSW5mb0FycChHZXRJbnN0YW5jZSgpLCAiY2FjaGUgZW50cnkgcmVtb3ZlZCEiKTsKK30KKworb3RFcnJvciBBZGRyZXNzUmVzb2x2ZXI6OlJlc29sdmUoY29uc3QgSXA2OjpBZGRyZXNzICZhRWlkLCB1aW50MTZfdCAmYVJsb2MxNikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDYWNoZSAqZW50cnkgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQ2FjaGVFbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNhY2hlW2ldLm1TdGF0ZSAhPSBDYWNoZTo6a1N0YXRlSW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1lbWNtcCgmbUNhY2hlW2ldLm1UYXJnZXQsICZhRWlkLCBzaXplb2YobUNhY2hlW2ldLm1UYXJnZXQpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gJm1DYWNoZVtpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgZW50cnkgPSBOZXdDYWNoZUVudHJ5KCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGVudHJ5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzd2l0Y2ggKGVudHJ5LT5tU3RhdGUpCisgICAgeworICAgIGNhc2UgQ2FjaGU6OmtTdGF0ZUludmFsaWQ6CisgICAgICAgIGVudHJ5LT5tVGFyZ2V0ID0gYUVpZDsKKyAgICAgICAgZW50cnktPm1SbG9jMTYgPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkOworICAgICAgICBlbnRyeS0+bVRpbWVvdXQgPSBrQWRkcmVzc1F1ZXJ5VGltZW91dDsKKyAgICAgICAgZW50cnktPm1GYWlsdXJlcyA9IDA7CisgICAgICAgIGVudHJ5LT5tUmV0cnlUaW1lb3V0ID0ga0FkZHJlc3NRdWVyeUluaXRpYWxSZXRyeURlbGF5OworICAgICAgICBlbnRyeS0+bVN0YXRlID0gQ2FjaGU6OmtTdGF0ZVF1ZXJ5OworICAgICAgICBTZW5kQWRkcmVzc1F1ZXJ5KGFFaWQpOworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0FERFJFU1NfUVVFUlk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDYWNoZTo6a1N0YXRlUXVlcnk6CisgICAgICAgIGlmIChlbnRyeS0+bVRpbWVvdXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0FERFJFU1NfUVVFUlk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZW50cnktPm1UaW1lb3V0ID09IDAgJiYgZW50cnktPm1SZXRyeVRpbWVvdXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZW50cnktPm1UaW1lb3V0ID0ga0FkZHJlc3NRdWVyeVRpbWVvdXQ7CisgICAgICAgICAgICBTZW5kQWRkcmVzc1F1ZXJ5KGFFaWQpOworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9BRERSRVNTX1FVRVJZOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENhY2hlOjprU3RhdGVDYWNoZWQ6CisgICAgICAgIGFSbG9jMTYgPSBlbnRyeS0+bVJsb2MxNjsKKyAgICAgICAgTWFya0NhY2hlRW50cnlBc1VzZWQoKmVudHJ5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBBZGRyZXNzUmVzb2x2ZXI6OlNlbmRBZGRyZXNzUXVlcnkoY29uc3QgSXA2OjpBZGRyZXNzICZhRWlkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgVGhyZWFkVGFyZ2V0VGx2IHRhcmdldFRsdjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9BRERSRVNTX1FVRVJZKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHRhcmdldFRsdi5Jbml0KCk7CisgICAgdGFyZ2V0VGx2LlNldFRhcmdldChhRWlkKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0YXJnZXRUbHYsIHNpemVvZih0YXJnZXRUbHYpKSk7CisKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMDMpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMik7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyBxdWVyeSIpOworCitleGl0OgorCisgICAgaWYgKG1UaW1lci5Jc1J1bm5pbmcoKSA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworICAgIH0KKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVBZGRyZXNzTm90aWZpY2F0aW9uKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8QWRkcmVzc1Jlc29sdmVyICo+KGFDb250ZXh0KS0+SGFuZGxlQWRkcmVzc05vdGlmaWNhdGlvbigKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NOb3RpZmljYXRpb24oQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIFRocmVhZFRhcmdldFRsdiB0YXJnZXRUbHY7CisgICAgVGhyZWFkTWVzaExvY2FsRWlkVGx2IG1sSWlkVGx2OworICAgIFRocmVhZFJsb2MxNlRsdiBybG9jMTZUbHY7CisgICAgVGhyZWFkTGFzdFRyYW5zYWN0aW9uVGltZVRsdiBsYXN0VHJhbnNhY3Rpb25UaW1lVGx2OworICAgIHVpbnQzMl90IGxhc3RUcmFuc2FjdGlvblRpbWU7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb0FycChHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgYWRkcmVzcyBub3RpZmljYXRpb24gZnJvbSAlMDR4IiwKKyAgICAgICAgICAgICAgICAgSG9zdFN3YXAxNihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSkpOworCisgICAgU3VjY2Vzc09yRXhpdChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprVGFyZ2V0LCBzaXplb2YodGFyZ2V0VGx2KSwgdGFyZ2V0VGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRhcmdldFRsdi5Jc1ZhbGlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprTWVzaExvY2FsRWlkLCBzaXplb2YobWxJaWRUbHYpLCBtbElpZFRsdikpOworICAgIFZlcmlmeU9yRXhpdChtbElpZFRsdi5Jc1ZhbGlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprUmxvYzE2LCBzaXplb2YocmxvYzE2VGx2KSwgcmxvYzE2VGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHJsb2MxNlRsdi5Jc1ZhbGlkKCkpOworCisgICAgbGFzdFRyYW5zYWN0aW9uVGltZSA9IDA7CisKKyAgICBpZiAoVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a0xhc3RUcmFuc2FjdGlvblRpbWUsIHNpemVvZihsYXN0VHJhbnNhY3Rpb25UaW1lVGx2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRyYW5zYWN0aW9uVGltZVRsdikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChsYXN0VHJhbnNhY3Rpb25UaW1lVGx2LklzVmFsaWQoKSk7CisgICAgICAgIGxhc3RUcmFuc2FjdGlvblRpbWUgPSBsYXN0VHJhbnNhY3Rpb25UaW1lVGx2LkdldFRpbWUoKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2FjaGVbaV0ubVRhcmdldCAhPSAqdGFyZ2V0VGx2LkdldFRhcmdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobUNhY2hlW2ldLm1TdGF0ZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIENhY2hlOjprU3RhdGVJbnZhbGlkOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDYWNoZTo6a1N0YXRlQ2FjaGVkOgorICAgICAgICAgICAgaWYgKG1lbWNtcChtQ2FjaGVbaV0ubU1lc2hMb2NhbElpZCwgbWxJaWRUbHYuR2V0SWlkKCksIHNpemVvZihtQ2FjaGVbaV0ubU1lc2hMb2NhbElpZCkpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2VuZEFkZHJlc3NFcnJvcih0YXJnZXRUbHYsIG1sSWlkVGx2LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXN0VHJhbnNhY3Rpb25UaW1lID49IG1DYWNoZVtpXS5tTGFzdFRyYW5zYWN0aW9uVGltZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICAgICAgY2FzZSBDYWNoZTo6a1N0YXRlUXVlcnk6CisgICAgICAgICAgICBtZW1jcHkobUNhY2hlW2ldLm1NZXNoTG9jYWxJaWQsIG1sSWlkVGx2LkdldElpZCgpLCBzaXplb2YobUNhY2hlW2ldLm1NZXNoTG9jYWxJaWQpKTsKKyAgICAgICAgICAgIG1DYWNoZVtpXS5tUmxvYzE2ID0gcmxvYzE2VGx2LkdldFJsb2MxNigpOworICAgICAgICAgICAgbUNhY2hlW2ldLm1SZXRyeVRpbWVvdXQgPSAwOworICAgICAgICAgICAgbUNhY2hlW2ldLm1MYXN0VHJhbnNhY3Rpb25UaW1lID0gbGFzdFRyYW5zYWN0aW9uVGltZTsKKyAgICAgICAgICAgIG1DYWNoZVtpXS5tVGltZW91dCA9IDA7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubUZhaWx1cmVzID0gMDsKKyAgICAgICAgICAgIG1DYWNoZVtpXS5tU3RhdGUgPSBDYWNoZTo6a1N0YXRlQ2FjaGVkOworICAgICAgICAgICAgTWFya0NhY2hlRW50cnlBc1VzZWQobUNhY2hlW2ldKTsKKworICAgICAgICAgICAgaWYgKG5ldGlmLkdldENvYXAoKS5TZW5kRW1wdHlBY2soYUhlYWRlciwgYU1lc3NhZ2VJbmZvKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG90TG9nSW5mb0FycChHZXRJbnN0YW5jZSgpLCAiU2VudCBhZGRyZXNzIG5vdGlmaWNhdGlvbiBhY2tub3dsZWRnbWVudCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuSGFuZGxlUmVzb2x2ZWQoKnRhcmdldFRsdi5HZXRUYXJnZXQoKSwgT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgQWRkcmVzc1Jlc29sdmVyOjpTZW5kQWRkcmVzc0Vycm9yKGNvbnN0IFRocmVhZFRhcmdldFRsdiAmYVRhcmdldCwgY29uc3QgVGhyZWFkTWVzaExvY2FsRWlkVGx2ICZhRWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpBZGRyZXNzICphRGVzdGluYXRpb24pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgaGVhZGVyLkluaXQoYURlc3RpbmF0aW9uID09IE5VTEwgPyBPVF9DT0FQX1RZUEVfTk9OX0NPTkZJUk1BQkxFIDogT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLAorICAgICAgICAgICAgICAgIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfQUREUkVTU19FUlJPUik7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhVGFyZ2V0LCBzaXplb2YoYVRhcmdldCkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhRWlkLCBzaXplb2YoYUVpZCkpKTsKKworICAgIGlmIChhRGVzdGluYXRpb24gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYwMyk7CisgICAgICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbWNweSgmbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgYURlc3RpbmF0aW9uLCBzaXplb2YobWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkpOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgbWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQobmV0aWYuR2V0SW50ZXJmYWNlSWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJTZW50IGFkZHJlc3MgZXJyb3IiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVBZGRyZXNzRXJyb3Iodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEFkZHJlc3NSZXNvbHZlciAqPihhQ29udGV4dCktPkhhbmRsZUFkZHJlc3NFcnJvcigKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBBZGRyZXNzUmVzb2x2ZXI6OkhhbmRsZUFkZHJlc3NFcnJvcihDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBUaHJlYWRUYXJnZXRUbHYgdGFyZ2V0VGx2OworICAgIFRocmVhZE1lc2hMb2NhbEVpZFRsdiBtbElpZFRsdjsKKyAgICBDaGlsZCAqY2hpbGRyZW47CisgICAgdWludDhfdCBudW1DaGlsZHJlbjsKKyAgICBNYWM6OkV4dEFkZHJlc3MgbWFjQWRkcjsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhZGRyZXNzIGVycm9yIG5vdGlmaWNhdGlvbiIpOworCisgICAgaWYgKGFIZWFkZXIuSXNDb25maXJtYWJsZSgpICYmICFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLkdldENvYXAoKS5TZW5kRW1wdHlBY2soYUhlYWRlciwgYU1lc3NhZ2VJbmZvKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0luZm9BcnAoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyBlcnJvciBub3RpZmljYXRpb24gYWNrbm93bGVkZ21lbnQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprVGFyZ2V0LCBzaXplb2YodGFyZ2V0VGx2KSwgdGFyZ2V0VGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRhcmdldFRsdi5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtNZXNoTG9jYWxFaWQsIHNpemVvZihtbElpZFRsdiksIG1sSWlkVGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KG1sSWlkVGx2LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBmb3IgKGNvbnN0IElwNjo6TmV0aWZVbmljYXN0QWRkcmVzcyAqYWRkcmVzcyA9IG5ldGlmLkdldFVuaWNhc3RBZGRyZXNzZXMoKTsgYWRkcmVzczsgYWRkcmVzcyA9IGFkZHJlc3MtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChtZW1jbXAoJmFkZHJlc3MtPm1BZGRyZXNzLCB0YXJnZXRUbHYuR2V0VGFyZ2V0KCksIHNpemVvZihhZGRyZXNzLT5tQWRkcmVzcykpID09IDAgJiYKKyAgICAgICAgICAgIG1lbWNtcChuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWw2NCgpLkdldElpZCgpLCBtbElpZFRsdi5HZXRJaWQoKSwgOCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRhcmdldCBFSUQgbWF0Y2hlcyBhZGRyZXNzIGFuZCBNZXNoIExvY2FsIEVJRCBkaWZmZXJzCisgICAgICAgICAgICBuZXRpZi5SZW1vdmVVbmljYXN0QWRkcmVzcygqYWRkcmVzcyk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGlsZHJlbiA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisKKyAgICBtZW1jcHkoJm1hY0FkZHIsIG1sSWlkVGx2LkdldElpZCgpLCBzaXplb2YobWFjQWRkcikpOworICAgIG1hY0FkZHIubThbMF0gXj0gMHgyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkIHx8IGNoaWxkcmVuW2ldLklzRnVsbFRocmVhZERldmljZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWludDhfdCBqID0gMDsgaiA8IENoaWxkOjprTWF4SXA2QWRkcmVzc1BlckNoaWxkOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5HZXRJcDZBZGRyZXNzKGopID09ICp0YXJnZXRUbHYuR2V0VGFyZ2V0KCkgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoJmNoaWxkcmVuW2ldLkdldEV4dEFkZHJlc3MoKSwgJm1hY0FkZHIsIHNpemVvZihtYWNBZGRyKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGFyZ2V0IEVJRCBtYXRjaGVzIGNoaWxkIGFkZHJlc3MgYW5kIE1lc2ggTG9jYWwgRUlEIGRpZmZlcnMgb24gY2hpbGQKKyAgICAgICAgICAgICAgICBtZW1zZXQoJmNoaWxkcmVuW2ldLkdldElwNkFkZHJlc3MoaiksIDAsIHNpemVvZihjaGlsZHJlbltpXS5HZXRJcDZBZGRyZXNzKGopKSk7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoJmRlc3RpbmF0aW9uLCAwLCBzaXplb2YoZGVzdGluYXRpb24pKTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5TZXRJaWQoY2hpbGRyZW5baV0uR2V0RXh0QWRkcmVzcygpKTsKKworICAgICAgICAgICAgICAgIFNlbmRBZGRyZXNzRXJyb3IodGFyZ2V0VGx2LCBtbElpZFRsdiwgJmRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2FybkFycChHZXRJbnN0YW5jZSgpLCAiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBhZGRyZXNzIGVycm9yIG5vdGlmaWNhdGlvbjogJXMiLAorICAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSk7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlQWRkcmVzc1F1ZXJ5KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxBZGRyZXNzUmVzb2x2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVBZGRyZXNzUXVlcnkoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVBZGRyZXNzUXVlcnkoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgVGhyZWFkVGFyZ2V0VGx2IHRhcmdldFRsdjsKKyAgICBUaHJlYWRNZXNoTG9jYWxFaWRUbHYgbWxJaWRUbHY7CisgICAgVGhyZWFkTGFzdFRyYW5zYWN0aW9uVGltZVRsdiBsYXN0VHJhbnNhY3Rpb25UaW1lVGx2OworICAgIENoaWxkICpjaGlsZHJlbjsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0VHlwZSgpID09IE9UX0NPQVBfVFlQRV9OT05fQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhZGRyZXNzIHF1ZXJ5IGZyb20gJTA0eCIsIEhvc3RTd2FwMTYoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10pKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1RhcmdldCwgc2l6ZW9mKHRhcmdldFRsdiksIHRhcmdldFRsdikpOworICAgIFZlcmlmeU9yRXhpdCh0YXJnZXRUbHYuSXNWYWxpZCgpKTsKKworICAgIG1sSWlkVGx2LkluaXQoKTsKKworICAgIGxhc3RUcmFuc2FjdGlvblRpbWVUbHYuSW5pdCgpOworCisgICAgaWYgKG5ldGlmLklzVW5pY2FzdEFkZHJlc3MoKnRhcmdldFRsdi5HZXRUYXJnZXQoKSkpCisgICAgeworICAgICAgICBtbElpZFRsdi5TZXRJaWQobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsNjQoKS5HZXRJaWQoKSk7CisgICAgICAgIFNlbmRBZGRyZXNzUXVlcnlSZXNwb25zZSh0YXJnZXRUbHYsIG1sSWlkVGx2LCBOVUxMLCBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBjaGlsZHJlbiA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2hpbGRyZW5baV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgfHwKKyAgICAgICAgICAgIGNoaWxkcmVuW2ldLklzRnVsbFRocmVhZERldmljZSgpIHx8CisgICAgICAgICAgICBjaGlsZHJlbltpXS5HZXRMaW5rRmFpbHVyZXMoKSA+PSBNbGU6OmtGYWlsZWRDaGlsZFRyYW5zbWlzc2lvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50OF90IGogPSAwOyBqIDwgQ2hpbGQ6OmtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLkdldElwNkFkZHJlc3MoaikgIT0gKnRhcmdldFRsdi5HZXRUYXJnZXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWxJaWRUbHYuU2V0SWlkKGNoaWxkcmVuW2ldLkdldEV4dEFkZHJlc3MoKSk7CisgICAgICAgICAgICBsYXN0VHJhbnNhY3Rpb25UaW1lVGx2LlNldFRpbWUoVGltZXI6OkdldE5vdygpIC0gY2hpbGRyZW5baV0uR2V0TGFzdEhlYXJkKCkpOworICAgICAgICAgICAgU2VuZEFkZHJlc3NRdWVyeVJlc3BvbnNlKHRhcmdldFRsdiwgbWxJaWRUbHYsICZsYXN0VHJhbnNhY3Rpb25UaW1lVGx2LCBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6U2VuZEFkZHJlc3NRdWVyeVJlc3BvbnNlKGNvbnN0IFRocmVhZFRhcmdldFRsdiAmYVRhcmdldFRsdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTWVzaExvY2FsRWlkVGx2ICZhTWxJaWRUbHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZExhc3RUcmFuc2FjdGlvblRpbWVUbHYgKmFMYXN0VHJhbnNhY3Rpb25UaW1lVGx2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIFRocmVhZFJsb2MxNlRsdiBybG9jMTZUbHY7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9BRERSRVNTX05PVElGWSk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhVGFyZ2V0VGx2LCBzaXplb2YoYVRhcmdldFRsdikpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZhTWxJaWRUbHYsIHNpemVvZihhTWxJaWRUbHYpKSk7CisKKyAgICBybG9jMTZUbHYuSW5pdCgpOworICAgIHJsb2MxNlRsdi5TZXRSbG9jMTYobmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnJsb2MxNlRsdiwgc2l6ZW9mKHJsb2MxNlRsdikpKTsKKworICAgIGlmIChhTGFzdFRyYW5zYWN0aW9uVGltZVRsdiAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChhTGFzdFRyYW5zYWN0aW9uVGltZVRsdiwgc2l6ZW9mKCphTGFzdFRyYW5zYWN0aW9uVGltZVRsdikpKTsKKyAgICB9CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhRGVzdGluYXRpb24pOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvQXJwKEdldEluc3RhbmNlKCksICJTZW50IGFkZHJlc3Mgbm90aWZpY2F0aW9uIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVUaW1lcigpCit7CisgICAgYm9vbCBjb250aW51ZVRpbWVyID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtDYWNoZUVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2FjaGVbaV0ubVN0YXRlICE9IENhY2hlOjprU3RhdGVRdWVyeSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb250aW51ZVRpbWVyID0gdHJ1ZTsKKworICAgICAgICBpZiAobUNhY2hlW2ldLm1UaW1lb3V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUNhY2hlW2ldLm1UaW1lb3V0LS07CisKKyAgICAgICAgICAgIGlmIChtQ2FjaGVbaV0ubVRpbWVvdXQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtQ2FjaGVbaV0ubVJldHJ5VGltZW91dCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihrQWRkcmVzc1F1ZXJ5SW5pdGlhbFJldHJ5RGVsYXkgKiAoMSA8PCBtQ2FjaGVbaV0ubUZhaWx1cmVzKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobUNhY2hlW2ldLm1SZXRyeVRpbWVvdXQgPCBrQWRkcmVzc1F1ZXJ5TWF4UmV0cnlEZWxheSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1DYWNoZVtpXS5tRmFpbHVyZXMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUNhY2hlW2ldLm1SZXRyeVRpbWVvdXQgPSBrQWRkcmVzc1F1ZXJ5TWF4UmV0cnlEZWxheTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHZXROZXRpZigpLkdldE1lc2hGb3J3YXJkZXIoKS5IYW5kbGVSZXNvbHZlZChtQ2FjaGVbaV0ubVRhcmdldCwgT1RfRVJST1JfRFJPUCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobUNhY2hlW2ldLm1SZXRyeVRpbWVvdXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2FjaGVbaV0ubVJldHJ5VGltZW91dC0tOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnRpbnVlVGltZXIpCisgICAgeworICAgICAgICBtVGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKyAgICB9Cit9CisKK3ZvaWQgQWRkcmVzc1Jlc29sdmVyOjpIYW5kbGVJY21wUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90SWNtcDZIZWFkZXIgKmFJY21wSGVhZGVyKQoreworICAgIHN0YXRpY19jYXN0PEFkZHJlc3NSZXNvbHZlciAqPihhQ29udGV4dCktPkhhbmRsZUljbXBSZWNlaXZlKCpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6OkljbXBIZWFkZXIgKj4oYUljbXBIZWFkZXIpKTsKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworfQorCit2b2lkIEFkZHJlc3NSZXNvbHZlcjo6SGFuZGxlSWNtcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6OkljbXBIZWFkZXIgJmFJY21wSGVhZGVyKQoreworICAgIElwNjo6SGVhZGVyIGlwNkhlYWRlcjsKKworICAgIFZlcmlmeU9yRXhpdChhSWNtcEhlYWRlci5HZXRUeXBlKCkgPT0gSXA2OjpJY21wSGVhZGVyOjprVHlwZURzdFVucmVhY2gpOworICAgIFZlcmlmeU9yRXhpdChhSWNtcEhlYWRlci5HZXRDb2RlKCkgPT0gSXA2OjpJY21wSGVhZGVyOjprQ29kZURzdFVucmVhY2hOb1JvdXRlKTsKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpID09IHNpemVvZihpcDZIZWFkZXIpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlRW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DYWNoZVtpXS5tU3RhdGUgIT0gQ2FjaGU6OmtTdGF0ZUludmFsaWQgJiYKKyAgICAgICAgICAgIG1lbWNtcCgmbUNhY2hlW2ldLm1UYXJnZXQsICZpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgc2l6ZW9mKG1DYWNoZVtpXS5tVGFyZ2V0KSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgSW52YWxpZGF0ZUNhY2hlRW50cnkobUNhY2hlW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworfQorCitBZGRyZXNzUmVzb2x2ZXIgJkFkZHJlc3NSZXNvbHZlcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQWRkcmVzc1Jlc29sdmVyICZyZXNvbHZlciA9ICpzdGF0aWNfY2FzdDxBZGRyZXNzUmVzb2x2ZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgQWRkcmVzc1Jlc29sdmVyICZyZXNvbHZlciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRBZGRyZXNzUmVzb2x2ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc29sdmVyOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRlRECmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvYWRkcmVzc19yZXNvbHZlci5ocHAgYi9zcmMvY29yZS90aHJlYWQvYWRkcmVzc19yZXNvbHZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkYWE2OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9hZGRyZXNzX3Jlc29sdmVyLmhwcApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRocmVhZCBFSUQtdG8tUkxPQyBtYXBwaW5nIGFuZCBjYWNoaW5nLgorICovCisKKyNpZm5kZWYgQUREUkVTU19SRVNPTFZFUl9IUFBfCisjZGVmaW5lIEFERFJFU1NfUkVTT0xWRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibWFjL21hYy5ocHAiCisjaW5jbHVkZSAibmV0L2ljbXA2LmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIE1lc2hGb3J3YXJkZXI7CitjbGFzcyBUaHJlYWRMYXN0VHJhbnNhY3Rpb25UaW1lVGx2OworY2xhc3MgVGhyZWFkTWVzaExvY2FsRWlkVGx2OworY2xhc3MgVGhyZWFkTmV0aWY7CitjbGFzcyBUaHJlYWRUYXJnZXRUbHY7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1hcnAKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRocmVhZCBFSUQtdG8tUkxPQyBtYXBwaW5nIGFuZCBjYWNoaW5nLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIEVJRC10by1STE9DIG1hcHBpbmcgYW5kIGNhY2hpbmcuCisgKgorICovCitjbGFzcyBBZGRyZXNzUmVzb2x2ZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBBZGRyZXNzUmVzb2x2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIEVJRC10by1STE9DIGNhY2hlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgYW4gRUlEIGNhY2hlIGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFJbmRleCAgQW4gaW5kZXggaW50byB0aGUgRUlEIGNhY2hlIHRhYmxlLgorICAgICAqIEBwYXJhbVtvdXRdICBhRW50cnkgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgRUlEIGluZm9ybWF0aW9uIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBFSUQgY2FjaGUgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFJbmRleCB3YXMgb3V0IG9mIGJvdW5kcyBvciBAcCBhRW50cnkgd2FzIE5VTEwuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldEVudHJ5KHVpbnQ4X3QgYUluZGV4LCBvdEVpZENhY2hlRW50cnkgJmFFbnRyeSkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgUm91dGVyIElEIGZyb20gdGhlIEVJRC10by1STE9DIGNhY2hlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmUodWludDhfdCBhUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUkxPQzE2IGZvciBhIGdpdmVuIEVJRCwgb3IgaW5pdGlhdGVzIGFuIEFkZHJlc3MgUXVlcnkgaWYgdGhlIG1hcHBpbmcgaXMgbm90IGtub3duLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFFaWQgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBFSUQuCisgICAgICogQHBhcmFtW291dF0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgY29ycmVzcG9uZGluZyB0byBAcCBhRWlkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgcHJvdmlkZWQgdGhlIFJMT0MxNi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FERFJFU1NfUVVFUlkgIEluaXRpYXRlZCBhbiBBZGRyZXNzIFF1ZXJ5LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZXNvbHZlKGNvbnN0IElwNjo6QWRkcmVzcyAmYUVpZCwgTWFjOjpTaG9ydEFkZHJlc3MgJmFSbG9jMTYpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtDYWNoZUVudHJpZXMgPSBPUEVOVEhSRUFEX0NPTkZJR19BRERSRVNTX0NBQ0hFX0VOVFJJRVMsCisgICAgICAgIGtTdGF0ZVVwZGF0ZVBlcmlvZCA9IDEwMDB1LCAgICAgICAgICAgLy8vPCBTdGF0ZSB1cGRhdGUgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhyZWFkIFByb3RvY29sIFBhcmFtZXRlcnMgYW5kIENvbnN0YW50cworICAgICAqCisgICAgICovCisgICAgZW51bQorICAgIHsKKyAgICAgICAga0FkZHJlc3NRdWVyeVRpbWVvdXQgPSAzLCAgICAgICAgICAgICAvLy88IEFERFJFU1NfUVVFUllfVElNRU9VVCAoc2Vjb25kcykKKyAgICAgICAga0FkZHJlc3NRdWVyeUluaXRpYWxSZXRyeURlbGF5ID0gMTUsICAvLy88IEFERFJFU1NfUVVFUllfSU5JVElBTF9SRVRSWV9ERUxBWSAoc2Vjb25kcykKKyAgICAgICAga0FkZHJlc3NRdWVyeU1heFJldHJ5RGVsYXkgPSAyODgwMCwgICAvLy88IEFERFJFU1NfUVVFUllfTUFYX1JFVFJZX0RFTEFZIChzZWNvbmRzKQorICAgIH07CisKKyAgICBzdHJ1Y3QgQ2FjaGUKKyAgICB7CisgICAgICAgIElwNjo6QWRkcmVzcyAgICAgIG1UYXJnZXQ7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgIG1NZXNoTG9jYWxJaWRbSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemVdOworICAgICAgICB1aW50MzJfdCAgICAgICAgICBtTGFzdFRyYW5zYWN0aW9uVGltZTsKKyAgICAgICAgTWFjOjpTaG9ydEFkZHJlc3MgbVJsb2MxNjsKKyAgICAgICAgdWludDE2X3QgICAgICAgICAgbVJldHJ5VGltZW91dDsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgbVRpbWVvdXQ7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgIG1GYWlsdXJlczsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgbUFnZTsKKworICAgICAgICBlbnVtIFN0YXRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGtTdGF0ZUludmFsaWQsCisgICAgICAgICAgICBrU3RhdGVRdWVyeSwKKyAgICAgICAgICAgIGtTdGF0ZUNhY2hlZCwKKyAgICAgICAgfTsKKyAgICAgICAgU3RhdGUgICAgICAgICAgICAgbVN0YXRlOworICAgIH07CisKKyAgICBDYWNoZSAqTmV3Q2FjaGVFbnRyeSh2b2lkKTsKKyAgICB2b2lkIE1hcmtDYWNoZUVudHJ5QXNVc2VkKENhY2hlICZhRW50cnkpOworICAgIHZvaWQgSW52YWxpZGF0ZUNhY2hlRW50cnkoQ2FjaGUgJmFFbnRyeSk7CisKKyAgICBvdEVycm9yIFNlbmRBZGRyZXNzUXVlcnkoY29uc3QgSXA2OjpBZGRyZXNzICZhRWlkKTsKKyAgICBvdEVycm9yIFNlbmRBZGRyZXNzRXJyb3IoY29uc3QgVGhyZWFkVGFyZ2V0VGx2ICZhVGFyZ2V0LCBjb25zdCBUaHJlYWRNZXNoTG9jYWxFaWRUbHYgJmFFaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6QWRkcmVzcyAqYURlc3RpbmF0aW9uKTsKKyAgICB2b2lkIFNlbmRBZGRyZXNzUXVlcnlSZXNwb25zZShjb25zdCBUaHJlYWRUYXJnZXRUbHYgJmFUYXJnZXRUbHYsIGNvbnN0IFRocmVhZE1lc2hMb2NhbEVpZFRsdiAmYU1sRWlkVGx2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZExhc3RUcmFuc2FjdGlvblRpbWVUbHYgKmFMYXN0VHJhbnNhY3Rpb25UaW1lVGx2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVVkcFJlY2VpdmUodm9pZCAqYUNvbnRleHQsIG90TWVzc2FnZSAqYU1lc3NhZ2UsIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVBZGRyZXNzRXJyb3Iodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUFkZHJlc3NFcnJvcihDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlQWRkcmVzc1F1ZXJ5KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVBZGRyZXNzUXVlcnkoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUFkZHJlc3NOb3RpZmljYXRpb24odm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVBZGRyZXNzTm90aWZpY2F0aW9uKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVJY21wUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90SWNtcDZIZWFkZXIgKmFJY21wSGVhZGVyKTsKKyAgICB2b2lkIEhhbmRsZUljbXBSZWNlaXZlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIGNvbnN0IElwNjo6SWNtcEhlYWRlciAmYUljbXBIZWFkZXIpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyBBZGRyZXNzUmVzb2x2ZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIENvYXA6OlJlc291cmNlIG1BZGRyZXNzRXJyb3I7CisgICAgQ29hcDo6UmVzb3VyY2UgbUFkZHJlc3NRdWVyeTsKKyAgICBDb2FwOjpSZXNvdXJjZSBtQWRkcmVzc05vdGlmaWNhdGlvbjsKKyAgICBDYWNoZSBtQ2FjaGVba0NhY2hlRW50cmllc107CisgICAgSXA2OjpJY21wSGFuZGxlciBtSWNtcEhhbmRsZXI7CisgICAgVGltZXIgbVRpbWVyOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEFERFJFU1NfUkVTT0xWRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5jcHAgYi9zcmMvY29yZS90aHJlYWQvYW5ub3VuY2VfYmVnaW5fc2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2FkZDRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2Fubm91bmNlX2JlZ2luX3NlcnZlci5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIEFubm91bmNlIEJlZ2luIFNlcnZlci4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJhbm5vdW5jZV9iZWdpbl9zZXJ2ZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImFubm91bmNlX2JlZ2luX3NlcnZlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCitBbm5vdW5jZUJlZ2luU2VydmVyOjpBbm5vdW5jZUJlZ2luU2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtQ2hhbm5lbE1hc2soMCksCisgICAgbVBlcmlvZCgwKSwKKyAgICBtQ291bnQoMCksCisgICAgbUNoYW5uZWwoMCksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZBbm5vdW5jZUJlZ2luU2VydmVyOjpIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbUFubm91bmNlQmVnaW4oT1RfVVJJX1BBVEhfQU5OT1VOQ0VfQkVHSU4sICZBbm5vdW5jZUJlZ2luU2VydmVyOjpIYW5kbGVSZXF1ZXN0LCB0aGlzKQoreworICAgIGFUaHJlYWROZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUFubm91bmNlQmVnaW4pOworfQorCitvdEVycm9yIEFubm91bmNlQmVnaW5TZXJ2ZXI6OlNlbmRBbm5vdW5jZSh1aW50MzJfdCBhQ2hhbm5lbE1hc2spCit7CisgICAgcmV0dXJuIFNlbmRBbm5vdW5jZShhQ2hhbm5lbE1hc2ssIGtEZWZhdWx0Q291bnQsIGtEZWZhdWx0UGVyaW9kKTsKK30KKworb3RFcnJvciBBbm5vdW5jZUJlZ2luU2VydmVyOjpTZW5kQW5ub3VuY2UodWludDMyX3QgYUNoYW5uZWxNYXNrLCB1aW50OF90IGFDb3VudCwgdWludDE2X3QgYVBlcmlvZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG1DaGFubmVsTWFzayA9IGFDaGFubmVsTWFzazsKKyAgICBtQ291bnQgPSBhQ291bnQ7CisgICAgbVBlcmlvZCA9IGFQZXJpb2Q7CisgICAgbUNoYW5uZWwgPSBPVF9SQURJT19DSEFOTkVMX01JTjsKKworICAgIHdoaWxlICgobUNoYW5uZWxNYXNrICYgKDEgPDwgbUNoYW5uZWwpKSA9PSAwKQorICAgIHsKKyAgICAgICAgbUNoYW5uZWwrKzsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1DaGFubmVsIDw9IE9UX1JBRElPX0NIQU5ORUxfTUFYLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgfQorCisgICAgbVRpbWVyLlN0YXJ0KG1QZXJpb2QpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBBbm5vdW5jZUJlZ2luU2VydmVyOjpIYW5kbGVSZXF1ZXN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEFubm91bmNlQmVnaW5TZXJ2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVSZXF1ZXN0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQordm9pZCBBbm5vdW5jZUJlZ2luU2VydmVyOjpIYW5kbGVSZXF1ZXN0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgTWVzaENvUDo6Q291bnRUbHYgY291bnQ7CisgICAgTWVzaENvUDo6UGVyaW9kVGx2IHBlcmlvZDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIHJlc3BvbnNlSW5mbyhhTWVzc2FnZUluZm8pOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a0NoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spLCBjaGFubmVsTWFzaykpOworICAgIFZlcmlmeU9yRXhpdChjaGFubmVsTWFzay5Jc1ZhbGlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChNZXNoQ29QOjpUbHY6OkdldFRsdihhTWVzc2FnZSwgTWVzaENvUDo6VGx2OjprQ291bnQsIHNpemVvZihjb3VudCksIGNvdW50KSk7CisgICAgVmVyaWZ5T3JFeGl0KGNvdW50LklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtQZXJpb2QsIHNpemVvZihwZXJpb2QpLCBwZXJpb2QpKTsKKyAgICBWZXJpZnlPckV4aXQocGVyaW9kLklzVmFsaWQoKSk7CisKKyAgICBTZW5kQW5ub3VuY2UoY2hhbm5lbE1hc2suR2V0TWFzaygpLCBjb3VudC5HZXRDb3VudCgpLCBwZXJpb2QuR2V0UGVyaW9kKCkpOworCisgICAgaWYgKGFIZWFkZXIuSXNDb25maXJtYWJsZSgpICYmICFhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChHZXROZXRpZigpLkdldENvYXAoKS5TZW5kRW1wdHlBY2soYUhlYWRlciwgcmVzcG9uc2VJbmZvKSk7CisgICAgICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgYW5ub3VuY2UgYmVnaW4gcmVzcG9uc2UiKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIEFubm91bmNlQmVnaW5TZXJ2ZXI6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIEFubm91bmNlQmVnaW5TZXJ2ZXI6OkhhbmRsZVRpbWVyKHZvaWQpCit7CisgICAgR2V0TmV0aWYoKS5HZXRNbGUoKS5TZW5kQW5ub3VuY2UobUNoYW5uZWwrKywgZmFsc2UpOworCisgICAgd2hpbGUgKG1Db3VudCA+IDApCisgICAgeworICAgICAgICBpZiAobUNoYW5uZWxNYXNrICYgKDEgPDwgbUNoYW5uZWwpKQorICAgICAgICB7CisgICAgICAgICAgICBtVGltZXIuU3RhcnQobVBlcmlvZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1DaGFubmVsKys7CisKKyAgICAgICAgaWYgKG1DaGFubmVsID4gT1RfUkFESU9fQ0hBTk5FTF9NQVgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DaGFubmVsID0gT1RfUkFESU9fQ0hBTk5FTF9NSU47CisgICAgICAgICAgICBtQ291bnQtLTsKKyAgICAgICAgfQorICAgIH0KK30KKworQW5ub3VuY2VCZWdpblNlcnZlciAmQW5ub3VuY2VCZWdpblNlcnZlcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQW5ub3VuY2VCZWdpblNlcnZlciAmc2VydmVyID0gKnN0YXRpY19jYXN0PEFubm91bmNlQmVnaW5TZXJ2ZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgQW5ub3VuY2VCZWdpblNlcnZlciAmc2VydmVyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEFubm91bmNlQmVnaW5TZXJ2ZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIHNlcnZlcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvYW5ub3VuY2VfYmVnaW5fc2VydmVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9hbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDVhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvYW5ub3VuY2VfYmVnaW5fc2VydmVyLmhwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHJlc3BvbmRpbmcgdG8gQW5ub3VuY2UgUmVxdWVzdHMuCisgKi8KKworI2lmbmRlZiBBTk5PVU5DRV9CRUdJTl9TRVJWRVJfSFBQXworI2RlZmluZSBBTk5PVU5DRV9CRUdJTl9TRVJWRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgaGFuZGxpbmcgQW5ub3VuY2UgQmVnaW4gUmVxdWVzdHMuCisgKgorICovCitjbGFzcyBBbm5vdW5jZUJlZ2luU2VydmVyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQW5ub3VuY2VCZWdpblNlcnZlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGJlZ2lucyB0aGUgTUxFIEFubm91bmNlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIHVzaW5nIENvdW50PTMgYW5kIFBlcmlvZD0xcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsTWFzayAgIFRoZSBjaGFubmVscyB0byB1c2UgZm9yIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kQW5ub3VuY2UodWludDMyX3QgYUNoYW5uZWxNYXNrKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGJlZ2lucyB0aGUgTUxFIEFubm91bmNlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoYW5uZWxNYXNrICAgVGhlIGNoYW5uZWxzIHRvIHVzZSBmb3IgdHJhbnNtaXNzaW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb3VudCAgICAgICAgIFRoZSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBwZXIgY2hhbm5lbC4KKyAgICAgKiBAcGFyYW1baW5dICBhUGVyaW9kICAgICAgICBUaGUgdGltZSBiZXR3ZWVuIHRyYW5zbWlzc2lvbnMgKG1pbGxpc2Vjb25kcykuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZEFubm91bmNlKHVpbnQzMl90IGFDaGFubmVsTWFzaywgdWludDhfdCBhQ291bnQsIHVpbnQxNl90IGFQZXJpb2QpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEZWZhdWx0Q291bnQgID0gMywKKyAgICAgICAga0RlZmF1bHRQZXJpb2QgPSAxMDAwLAorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZXF1ZXN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUmVxdWVzdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVUaW1lcih2b2lkKTsKKworICAgIHN0YXRpYyBBbm5vdW5jZUJlZ2luU2VydmVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICB1aW50MzJfdCBtQ2hhbm5lbE1hc2s7CisgICAgdWludDE2X3QgbVBlcmlvZDsKKyAgICB1aW50OF90IG1Db3VudDsKKyAgICB1aW50OF90IG1DaGFubmVsOworCisgICAgVGltZXIgbVRpbWVyOworCisgICAgQ29hcDo6UmVzb3VyY2UgbUFubm91bmNlQmVnaW47Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQU5OT1VOQ0VfQkVHSU5fU0VSVkVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9kYXRhX3BvbGxfbWFuYWdlci5jcHAgYi9zcmMvY29yZS90aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMGFiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvZGF0YV9wb2xsX21hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGRhdGEgcG9sbCAobWFjIGRhdGEgcmVxdWVzdCBjb21tYW5kKSBtYW5hZ2VyIGNsYXNzLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImRhdGFfcG9sbF9tYW5hZ2VyLnRtaCIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiZGF0YV9wb2xsX21hbmFnZXIuaHBwIgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWVzaF9mb3J3YXJkZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitEYXRhUG9sbE1hbmFnZXI6OkRhdGFQb2xsTWFuYWdlcihNZXNoRm9yd2FyZGVyICZhTWVzaEZvcndhcmRlcik6CisgICAgTWVzaEZvcndhcmRlckxvY2F0b3IoYU1lc2hGb3J3YXJkZXIpLAorICAgIG1UaW1lcihhTWVzaEZvcndhcmRlci5HZXROZXRpZigpLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkRhdGFQb2xsTWFuYWdlcjo6SGFuZGxlUG9sbFRpbWVyLCB0aGlzKSwKKyAgICBtVGltZXJTdGFydFRpbWUoMCksCisgICAgbUV4dGVybmFsUG9sbFBlcmlvZCgwKSwKKyAgICBtUG9sbFBlcmlvZCgwKSwKKyAgICBtRW5hYmxlZChmYWxzZSksCisgICAgbUF0dGFjaE1vZGUoZmFsc2UpLAorICAgIG1SZXR4TW9kZShmYWxzZSksCisgICAgbU5vQnVmZmVyUmV0eE1vZGUoZmFsc2UpLAorICAgIG1Qb2xsVGltZW91dENvdW50ZXIoMCksCisgICAgbVBvbGxUeEZhaWx1cmVDb3VudGVyKDApLAorICAgIG1SZW1haW5pbmdGYXN0UG9sbHMoMCkKK3sKK30KKworb3RFcnJvciBEYXRhUG9sbE1hbmFnZXI6OlN0YXJ0UG9sbGluZyh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KCFtRW5hYmxlZCwgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKyAgICBWZXJpZnlPckV4aXQoKEdldE1lc2hGb3J3YXJkZXIoKS5HZXROZXRpZigpLkdldE1sZSgpLkdldERldmljZU1vZGUoKSAmIE1sZTo6TW9kZVRsdjo6a01vZGVGRkQpID09IDAsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtRW5hYmxlZCA9IHRydWU7CisgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpTdG9wUG9sbGluZyh2b2lkKQoreworICAgIG1UaW1lci5TdG9wKCk7CisgICAgbUF0dGFjaE1vZGUgPSBmYWxzZTsKKyAgICBtUmV0eE1vZGUgPSBmYWxzZTsKKyAgICBtTm9CdWZmZXJSZXR4TW9kZSA9IGZhbHNlOworICAgIG1Qb2xsVGltZW91dENvdW50ZXIgPSAwOworICAgIG1Qb2xsVHhGYWlsdXJlQ291bnRlciA9IDA7CisgICAgbVJlbWFpbmluZ0Zhc3RQb2xscyA9IDA7CisgICAgbUVuYWJsZWQgPSBmYWxzZTsKK30KKworb3RFcnJvciBEYXRhUG9sbE1hbmFnZXI6OlNlbmREYXRhUG9sbCh2b2lkKQoreworICAgIE1lc2hGb3J3YXJkZXIgJm1lc2hGb3J3YXJkZXIgPSBHZXRNZXNoRm9yd2FyZGVyKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KG1FbmFibGVkLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdCghbWVzaEZvcndhcmRlci5HZXROZXRpZigpLkdldE1hYygpLkdldFJ4T25XaGVuSWRsZSgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgbVRpbWVyLlN0b3AoKTsKKworICAgIGZvciAobWVzc2FnZSA9IG1lc2hGb3J3YXJkZXIuR2V0U2VuZFF1ZXVlKCkuR2V0SGVhZCgpOyBtZXNzYWdlOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UtPkdldFR5cGUoKSAhPSBNZXNzYWdlOjprVHlwZU1hY0RhdGFQb2xsLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworICAgIH0KKworICAgIG1lc3NhZ2UgPSBtZXNoRm9yd2FyZGVyLkdldE5ldGlmKCkuR2V0SXA2KCkubU1lc3NhZ2VQb29sLk5ldyhNZXNzYWdlOjprVHlwZU1hY0RhdGFQb2xsLCAwKTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgZXJyb3IgPSBtZXNoRm9yd2FyZGVyLlNlbmRNZXNzYWdlKCptZXNzYWdlKTsKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworZXhpdDoKKworICAgIHN3aXRjaCAoZXJyb3IpCisgICAgeworICAgIGNhc2UgT1RfRVJST1JfTk9ORToKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTZW5kaW5nIGRhdGEgcG9sbCIpOworCisgICAgICAgIGlmIChtTm9CdWZmZXJSZXR4TW9kZSA9PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBtTm9CdWZmZXJSZXR4TW9kZSA9IGZhbHNlOworICAgICAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNjaGVkdWxlTmV4dFBvbGwoa1VzZVByZXZpb3VzUG9sbFBlcmlvZCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9TVEFURToKKyAgICAgICAgb3RMb2dXYXJuTWFjKEdldEluc3RhbmNlKCksICJEYXRhIHBvbGwgdHggcmVxdWVzdGVkIHdoaWxlIGRhdGEgcG9sbGluZyB3YXMgbm90IGVuYWJsZWQhIik7CisgICAgICAgIFN0b3BQb2xsaW5nKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9BTFJFQURZOgorICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIkRhdGEgcG9sbCB0eCByZXF1ZXN0ZWQgd2hlbiBhIHByZXZpb3VzIGRhdGEgcmVxdWVzdCBzdGlsbCBpbiBzZW5kIHF1ZXVlLiIpOworICAgICAgICBTY2hlZHVsZU5leHRQb2xsKGtVc2VQcmV2aW91c1BvbGxQZXJpb2QpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICBkZWZhdWx0OgorICAgICAgICBtTm9CdWZmZXJSZXR4TW9kZSA9IHRydWU7CisgICAgICAgIFNjaGVkdWxlTmV4dFBvbGwoa1JlY2FsY3VsYXRlUG9sbFBlcmlvZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OlNldEV4dGVybmFsUG9sbFBlcmlvZCh1aW50MzJfdCBhUGVyaW9kKQoreworICAgIGlmIChtRXh0ZXJuYWxQb2xsUGVyaW9kICE9IGFQZXJpb2QpCisgICAgeworICAgICAgICBtRXh0ZXJuYWxQb2xsUGVyaW9kID0gYVBlcmlvZDsKKworICAgICAgICBpZiAobUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNjaGVkdWxlTmV4dFBvbGwoa1JlY2FsY3VsYXRlUG9sbFBlcmlvZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3VpbnQzMl90IERhdGFQb2xsTWFuYWdlcjo6R2V0S2VlcEFsaXZlUG9sbFBlcmlvZCh2b2lkKSBjb25zdAoreworICAgIHVpbnQzMl90IHBlcmlvZCA9IDA7CisKKyAgICBpZiAobUV4dGVybmFsUG9sbFBlcmlvZCAhPSAwKQorICAgIHsKKyAgICAgICAgcGVyaW9kID0gbUV4dGVybmFsUG9sbFBlcmlvZDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcGVyaW9kID0gR2V0RGVmYXVsdFBvbGxQZXJpb2QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGVyaW9kOworfQorCit2b2lkIERhdGFQb2xsTWFuYWdlcjo6SGFuZGxlUG9sbFNlbnQob3RFcnJvciBhRXJyb3IpCit7CisgICAgYm9vbCBzaG91bGRSZWNhbGN1bGF0ZVBvbGxQZXJpb2QgPSBmYWxzZTsKKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCk7CisKKyAgICBzd2l0Y2ggKGFFcnJvcikKKyAgICB7CisgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorCisgICAgICAgIGlmIChtUmVtYWluaW5nRmFzdFBvbGxzICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW1haW5pbmdGYXN0UG9sbHMtLTsKKyAgICAgICAgICAgIHNob3VsZFJlY2FsY3VsYXRlUG9sbFBlcmlvZCA9IChtUmVtYWluaW5nRmFzdFBvbGxzID09IDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1SZXR4TW9kZSA9PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBtUmV0eE1vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1Qb2xsVHhGYWlsdXJlQ291bnRlciA9IDA7CisgICAgICAgICAgICBzaG91bGRSZWNhbGN1bGF0ZVBvbGxQZXJpb2QgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJTZW50IGRhdGEgcG9sbCIpOworCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgbVBvbGxUeEZhaWx1cmVDb3VudGVyKys7CisKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJGYWlsZWQgdG8gc2VuZCBkYXRhIHBvbGwsIGVycm9yOiVzLCByZXR4OiVkLyVkIiwKKyAgICAgICAgICAgICAgICAgICAgIG90VGhyZWFkRXJyb3JUb1N0cmluZyhhRXJyb3IpLCBtUG9sbFR4RmFpbHVyZUNvdW50ZXIsIGtNYXhQb2xsUmV0eEF0dGVtcHRzKTsKKworICAgICAgICBpZiAobVBvbGxUeEZhaWx1cmVDb3VudGVyIDwga01heFBvbGxSZXR4QXR0ZW1wdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUmV0eE1vZGUgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJldHhNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzaG91bGRSZWNhbGN1bGF0ZVBvbGxQZXJpb2QgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVJldHhNb2RlID0gZmFsc2U7CisgICAgICAgICAgICBtUG9sbFR4RmFpbHVyZUNvdW50ZXIgPSAwOworICAgICAgICAgICAgc2hvdWxkUmVjYWxjdWxhdGVQb2xsUGVyaW9kID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChzaG91bGRSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpCisgICAgeworICAgICAgICBTY2hlZHVsZU5leHRQb2xsKGtSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpIYW5kbGVQb2xsVGltZW91dCh2b2lkKQoreworICAgIC8vIEEgZGF0YSBwb2xsIHRpbWVvdXQgaGFwcGVuZWQsIGkuZS4sIHRoZSBhY2sgaW4gcmVzcG9uc2UgdG8KKyAgICAvLyBhIGRhdGEgcG9sbCBpbmRpY2F0ZWQgdGhhdCBhIGZyYW1lIHdhcyBwZW5kaW5nLCBidXQgbm8gZnJhbWUKKyAgICAvLyB3YXMgcmVjZWl2ZWQgYWZ0ZXIgdGltZW91dCBpbnRlcnZhbC4KKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCk7CisKKyAgICBtUG9sbFRpbWVvdXRDb3VudGVyKys7CisKKyAgICBvdExvZ0luZm9NYWMoR2V0SW5zdGFuY2UoKSwgIkRhdGEgcG9sbCB0aW1lb3V0LCByZXRyeTolZC8lZCIsIG1Qb2xsVGltZW91dENvdW50ZXIsIGtRdWlja1BvbGxzQWZ0ZXJUaW1lb3V0KTsKKworICAgIGlmIChtUG9sbFRpbWVvdXRDb3VudGVyIDwga1F1aWNrUG9sbHNBZnRlclRpbWVvdXQpCisgICAgeworICAgICAgICBTZW5kRGF0YVBvbGwoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVBvbGxUaW1lb3V0Q291bnRlciA9IDA7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBEYXRhUG9sbE1hbmFnZXI6OkNoZWNrRnJhbWVQZW5kaW5nKE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICBWZXJpZnlPckV4aXQobUVuYWJsZWQpOworCisgICAgbVBvbGxUaW1lb3V0Q291bnRlciA9IDA7CisKKyAgICBpZiAoYUZyYW1lLkdldEZyYW1lUGVuZGluZygpID09IHRydWUpCisgICAgeworICAgICAgICBTZW5kRGF0YVBvbGwoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIERhdGFQb2xsTWFuYWdlcjo6UmVjYWxjdWxhdGVQb2xsUGVyaW9kKHZvaWQpCit7CisgICAgaWYgKG1FbmFibGVkKQorICAgIHsKKyAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpTZXRBdHRhY2hNb2RlKGJvb2wgYU1vZGUpCit7CisgICAgaWYgKG1BdHRhY2hNb2RlICE9IGFNb2RlKQorICAgIHsKKyAgICAgICAgbUF0dGFjaE1vZGUgPSBhTW9kZTsKKworICAgICAgICBpZiAobUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNjaGVkdWxlTmV4dFBvbGwoa1JlY2FsY3VsYXRlUG9sbFBlcmlvZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpTZW5kRmFzdFBvbGxzKHVpbnQ4X3QgYU51bUZhc3RQb2xscykKK3sKKyAgICBib29sIHNob3VsZFJlY2FsY3VsYXRlUG9sbFBlcmlvZCA9IChtUmVtYWluaW5nRmFzdFBvbGxzID09IDApOworCisgICAgaWYgKGFOdW1GYXN0UG9sbHMgPT0gMCkKKyAgICB7CisgICAgICAgIGFOdW1GYXN0UG9sbHMgPSBrRGVmYXVsdEZhc3RQb2xsczsKKyAgICB9CisKKyAgICBpZiAoYU51bUZhc3RQb2xscyA+IGtNYXhGYXN0UG9sbHMpCisgICAgeworICAgICAgICBhTnVtRmFzdFBvbGxzID0ga01heEZhc3RQb2xsczsKKyAgICB9CisKKyAgICBpZiAobVJlbWFpbmluZ0Zhc3RQb2xscyA8IGFOdW1GYXN0UG9sbHMpCisgICAgeworICAgICAgICBtUmVtYWluaW5nRmFzdFBvbGxzID0gYU51bUZhc3RQb2xsczsKKyAgICB9CisKKyAgICBpZiAobUVuYWJsZWQgJiYgc2hvdWxkUmVjYWxjdWxhdGVQb2xsUGVyaW9kKQorICAgIHsKKyAgICAgICAgU2NoZWR1bGVOZXh0UG9sbChrUmVjYWxjdWxhdGVQb2xsUGVyaW9kKTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YVBvbGxNYW5hZ2VyOjpTY2hlZHVsZU5leHRQb2xsKFBvbGxQZXJpb2RTZWxlY3RvciBhUG9sbFBlcmlvZFNlbGVjdG9yKQoreworICAgIGlmIChhUG9sbFBlcmlvZFNlbGVjdG9yID09IGtSZWNhbGN1bGF0ZVBvbGxQZXJpb2QpCisgICAgeworICAgICAgICBtUG9sbFBlcmlvZCA9IENhbGN1bGF0ZVBvbGxQZXJpb2QoKTsKKyAgICB9CisKKyAgICBpZiAobVRpbWVyLklzUnVubmluZygpKQorICAgIHsKKyAgICAgICAgbVRpbWVyLlN0YXJ0QXQobVRpbWVyU3RhcnRUaW1lLCBtUG9sbFBlcmlvZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1UaW1lclN0YXJ0VGltZSA9IFRpbWVyOjpHZXROb3coKTsKKyAgICAgICAgbVRpbWVyLlN0YXJ0QXQobVRpbWVyU3RhcnRUaW1lLCBtUG9sbFBlcmlvZCk7CisgICAgfQorfQorCit1aW50MzJfdCBEYXRhUG9sbE1hbmFnZXI6OkNhbGN1bGF0ZVBvbGxQZXJpb2Qodm9pZCkgY29uc3QKK3sKKyAgICB1aW50MzJfdCBwZXJpb2QgPSAwOworCisgICAgaWYgKG1BdHRhY2hNb2RlID09IHRydWUpCisgICAgeworICAgICAgICBwZXJpb2QgPSBrQXR0YWNoRGF0YVBvbGxQZXJpb2Q7CisgICAgfQorCisgICAgaWYgKG1SZXR4TW9kZSA9PSB0cnVlKQorICAgIHsKKyAgICAgICAgaWYgKChwZXJpb2QgPT0gMCkgfHwgKHBlcmlvZCA+IGtSZXR4UG9sbFBlcmlvZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcmlvZCA9IGtSZXR4UG9sbFBlcmlvZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtTm9CdWZmZXJSZXR4TW9kZSA9PSB0cnVlKQorICAgIHsKKyAgICAgICAgaWYgKChwZXJpb2QgPT0gMCkgfHwgKHBlcmlvZCA+IGtOb0J1ZmZlclJldHhQb2xsUGVyaW9kKSkKKyAgICAgICAgeworICAgICAgICAgICAgcGVyaW9kID0ga05vQnVmZmVyUmV0eFBvbGxQZXJpb2Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVJlbWFpbmluZ0Zhc3RQb2xscyAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKChwZXJpb2QgPT0gMCkgfHwgKHBlcmlvZCA+IGtGYXN0UG9sbFBlcmlvZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcmlvZCA9IGtGYXN0UG9sbFBlcmlvZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRXh0ZXJuYWxQb2xsUGVyaW9kICE9IDApCisgICAgeworICAgICAgICBpZiAoKHBlcmlvZCA9PSAwKSB8fCAocGVyaW9kID4gbUV4dGVybmFsUG9sbFBlcmlvZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcmlvZCA9IG1FeHRlcm5hbFBvbGxQZXJpb2Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocGVyaW9kID09IDApCisgICAgeworICAgICAgICBwZXJpb2QgPSBHZXREZWZhdWx0UG9sbFBlcmlvZCgpOworCisgICAgICAgIGlmIChwZXJpb2QgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcGVyaW9kID0ga01pblBvbGxQZXJpb2Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGVyaW9kOworfQorCit2b2lkIERhdGFQb2xsTWFuYWdlcjo6SGFuZGxlUG9sbFRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5TZW5kRGF0YVBvbGwoKTsKK30KKworRGF0YVBvbGxNYW5hZ2VyICZEYXRhUG9sbE1hbmFnZXI6OkdldE93bmVyKENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIERhdGFQb2xsTWFuYWdlciAmbWFuYWdlciA9ICpzdGF0aWNfY2FzdDxEYXRhUG9sbE1hbmFnZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgRGF0YVBvbGxNYW5hZ2VyICZtYW5hZ2VyID0gb3RHZXRNZXNoRm9yd2FyZGVyKCkuR2V0RGF0YVBvbGxNYW5hZ2VyKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBtYW5hZ2VyOworfQorCit1aW50MzJfdCBEYXRhUG9sbE1hbmFnZXI6OkdldERlZmF1bHRQb2xsUGVyaW9kKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRpbWVyOjpTZWNUb01zZWMoR2V0TWVzaEZvcndhcmRlcigpLkdldE5ldGlmKCkuR2V0TWxlKCkuR2V0VGltZW91dCgpKSAtCisgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihrUmV0eFBvbGxQZXJpb2QpICoga01heFBvbGxSZXR4QXR0ZW1wdHM7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2RhdGFfcG9sbF9tYW5hZ2VyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9kYXRhX3BvbGxfbWFuYWdlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiZTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9kYXRhX3BvbGxfbWFuYWdlci5ocHAKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBkYXRhIHBvbGwgKG1hYyBkYXRhIHJlcXVlc3QgY29tbWFuZCkgbWFuYWdlci4KKyAqLworCisjaWZuZGVmIERBVEFfUE9MTF9NQU5BR0VSX0hQUF8KKyNkZWZpbmUgREFUQV9QT0xMX01BTkFHRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLWRhdGEtcG9sbC1tYW5hZ2VyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBkYXRhIHBvbGwgbWFuYWdlci4KKyAqCisgKiBAeworICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBkYXRhIHBvbGwgKG1hYyBkYXRhIHJlcXVlc3QgY29tbWFuZCkgbWFuYWdlci4KKyAqCisgKi8KKworY2xhc3MgRGF0YVBvbGxNYW5hZ2VyOiBwdWJsaWMgTWVzaEZvcndhcmRlckxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGVmYXVsdEZhc3RQb2xscyAgID0gOCwgIC8vLzwgRGVmYXVsdCBudW1iZXIgb2YgZmFzdCBwb2xsIHRyYW5zbWlzc2lvbnMgKEBzYSBTdGFydEZhc3RQb2xscykuCisgICAgICAgIGtNYXhGYXN0UG9sbHMgICAgICAgPSAxNSwgLy8vPCBNYXhpbXVtIG51bWJlciBvZiBmYXN0IHBvbGwgdHJhbnNtaXNzaW9ucyBhbGxvd2VkLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBkYXRhIHBvbGwgbWFuYWdlciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzaEZvcndhcmRlciAgQSByZWZlcmVuY2UgdG8gdGhlIE1lc2ggRm9yd2FyZGVyLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgRGF0YVBvbGxNYW5hZ2VyKE1lc2hGb3J3YXJkZXIgJmFNZXNoRm9yd2FyZGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluc3RydWN0cyB0aGUgZGF0YSBwb2xsIG1hbmFnZXIgdG8gc3RhcnQgc2VuZGluZyBwZXJpb2RpYyBkYXRhIHBvbGxzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgc2VuZGluZyBwZXJpb2RpYyBkYXRhIHBvbGxzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgICAgIFBlcmlvZGljIGRhdGEgcG9sbCB0cmFuc21pc3Npb24gaXMgYWxyZWFkeSBzdGFydGVkL2VuYWJsZWQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgRGV2aWNlIGlzIG5vdCBpbiByeC1vZmYtd2hlbi1pZGxlIG1vZGUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0UG9sbGluZyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluc3RydWN0cyB0aGUgZGF0YSBwb2xsIG1hbmFnZXIgdG8gc3RvcCBzZW5kaW5nIHBlcmlvZGljIGRhdGEgcG9sbHMuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0b3BQb2xsaW5nKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5xdWV1ZXMgYSBkYXRhIHBvbGwgKGFuIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0KSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgYSBkYXRhIHBvbGwgbWVzc2FnZQorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgICAgQSBkYXRhIHBvbGwgbWVzc2FnZSBpcyBhbHJlYWR5IGVucXVldWVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgRGV2aWNlIGlzIG5vdCBpbiByeC1vZmYtd2hlbi1pZGxlIG1vZGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgICBJbnN1ZmZpY2llbnQgbWVzc2FnZSBidWZmZXJzIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERhdGFQb2xsKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBhIHVzZXItc3BlY2lmaWVkL2V4dGVybmFsIGRhdGEgcG9sbCBwZXJpb2QuCisgICAgICoKKyAgICAgKiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIG5vbi16ZXJvIHBvbGwgcGVyaW9kLCB0aGUgdXNlciB2YWx1ZSBzcGVjaWZpZXMgdGhlIG1heGltdW0gcGVyaW9kIGJldHdlZW4gZGF0YQorICAgICAqIHJlcXVlc3QgdHJhbnNtaXNzaW9ucy4gTm90ZSB0aGF0IE9wZW5UaHJlYWQgbWF5IHNlbmQgZGF0YSByZXF1ZXN0IHRyYW5zbWlzc2lvbnMgbW9yZSBmcmVxdWVudGx5IHdoZW4gZXhwZWN0aW5nCisgICAgICogYSBjb250cm9sLW1lc3NhZ2UgZnJvbSBhIHBhcmVudCBvciBpbiBjYXNlIG9mIGRhdGEgcG9sbCB0cmFuc21pc3Npb24gZmFpbHVyZXMgb3IgdGltZW91dHMuCisgICAgICoKKyAgICAgKiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgZXh0ZXJuYWwgcG9sbCBwZXJpb2QgaXMgemVybyAoaS5lLiwgbm8gdXNlci1zcGVjaWZpZWQgcG9sbCBwZXJpb2QpLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBlcmlvZCAgVGhlIGRhdGEgcG9sbCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLCBvciB6ZXJvIHRvIG1lYW4gbm8gdXNlci1zcGVjaWZpZWQgcG9sbCBwZXJpb2QuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEV4dGVybmFsUG9sbFBlcmlvZCh1aW50MzJfdCBhUGVyaW9kKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGN1cnJlbnQgdXNlci1zcGVjaWZpZWQvZXh0ZXJuYWwgZGF0YSBwb2xsIHBlcmlvZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUaGUgZGF0YSBwb2xsIHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRFeHRlcm5hbFBvbGxQZXJpb2Qodm9pZCkgY29uc3QgeyByZXR1cm4gbUV4dGVybmFsUG9sbFBlcmlvZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5mb3JtcyB0aGUgZGF0YSBwb2xsIG1hbmFnZXIgb2Ygc3VjY2Vzcy9lcnJvciBzdGF0dXMgb2YgYSBwcmV2aW91c2x5IHJlcXVlc3RlZCBwb2xsIG1lc3NhZ2UKKyAgICAgKiB0cmFuc21pc3Npb24uCisgICAgICoKKyAgICAgKiBJbiBjYXNlIG9mIHRyYW5zbWl0IGZhaWx1cmUsIHRoZSBkYXRhIHBvbGwgbWFuYWdlciBtYXkgY2hvb3NlIHRvIHNlbmQgdGhlIG5leHQgZGF0YSBwb2xsIG1vcmUgcXVpY2tseSAodXAgdG8KKyAgICAgKiBzb21lIGZpeGVkIG51bWJlciBvZiBhdHRlbXB0cykuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFFcnJvciAgIEVycm9yIHN0YXR1cyBvZiBhIGRhdGEgcG9sbCBtZXNzYWdlIHRyYW5zbWlzc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlUG9sbFNlbnQob3RFcnJvciBhRXJyb3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5mb3JtcyB0aGUgZGF0YSBwb2xsIG1hbmFnZXIgdGhhdCBhIGRhdGEgcG9sbCB0aW1lb3V0IGhhcHBlbmVkLCBpLmUuLCB3aGVuIHRoZSBhY2sgaW4gcmVzcG9uc2UgdG8KKyAgICAgKiBhIGRhdGEgcmVxdWVzdCBjb21tYW5kIGluZGljYXRlZCB0aGF0IGEgZnJhbWUgd2FzIHBlbmRpbmcsIGJ1dCBubyBmcmFtZSB3YXMgcmVjZWl2ZWQgYWZ0ZXIgdGltZW91dCBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIERhdGEgcG9sbCBtYW5hZ2VyIG1heSBjaG9vc2UgdG8gdHJhbnNtaXQgYW5vdGhlciBkYXRhIHBvbGwgaW1tZWRpYXRlbHkgKHVwIHRvIHNvbWUgZml4ZWQgbnVtYmVyIG9mIGF0dGVtcHRzKS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlUG9sbFRpbWVvdXQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmZvcm1zIHRoZSBkYXRhIHBvbGwgbWFuYWdlciB0aGF0IGEgbWFjIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkLiBJdCBjaGVja3MgdGhlICJmcmFtZSBwZW5kaW5nIiBpbgorICAgICAqIHRoZSByZWNlaXZlZCBmcmFtZSBoZWFkZXIgYW5kIGlmIGl0IGlzIHNldCwgZGF0YSBwb2xsIG1hbmFnZXIgd2lsbCBzZW5kIGFuIGltbWVkaWF0ZSBkYXRhIHBvbGwgdG8gcmV0cmlldmUgdGhlCisgICAgICogcGVuZGluZyBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2hlY2tGcmFtZVBlbmRpbmcoTWFjOjpGcmFtZSAmYUZyYW1lKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFza3MgdGhlIGRhdGEgcG9sbCBtYW5hZ2VyIHRvIHJlY2FsY3VsYXRlIHRoZSBwb2xsIHBlcmlvZC4KKyAgICAgKgorICAgICAqIFRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gaW5mb3JtIHRoZSBwb2xsIG1hbmFnZXIgdGhhdCBhIHBhcmFtZXRlciBpbXBhY3RpbmcgdGhlIHBvbGwgcGVyaW9kIChlLmcuLCB0aGUgY2hpbGQncworICAgICAqIHRpbWVvdXQgdmFsdWUgd2hpY2ggaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZGF0YSBwb2xsIHBlcmlvZCkgaXMgbW9kaWZpZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlY2FsY3VsYXRlUG9sbFBlcmlvZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMvY2xlYXJzIHRoZSBhdHRhY2ggbW9kZSBvbiBkYXRhIHBvbGwgbWFuYWdlci4KKyAgICAgKgorICAgICAqIFdoZW4gYXR0YWNoIG1vZGUgaXMgZW5hYmxlZCwgdGhlIGRhdGEgcG9sbCBtYW5hZ2VyIHdpbGwgc2VuZCBkYXRhIHBvbGxzIGF0IGEgZmFzdGVyIHJhdGUgZGV0ZXJtaW5lZCBieQorICAgICAqIHBvbGwgcGVyaW9kIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBPUEVOVEhSRUFEX0NPTkZJR19BVFRBQ0hfREFUQV9QT0xMX1BFUklPRGAuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTW9kZSAgVGhlIG1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEF0dGFjaE1vZGUoYm9vbCBhTW9kZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhc2tzIGRhdGEgcG9sbCBtYW5hZ2VyIHRvIHNlbmQgdGhlIG5leHQgZ2l2ZW4gbnVtYmVyIG9mIHBvbGxzIGF0IGEgZmFzdGVyIHJhdGUgKHBvbGwgcGVyaW9kIGRlZmluZWQKKyAgICAgKiBieSBga0Zhc3RQb2xsUGVyaW9kYCkuIFRoaXMgaXMgdXNlZCBieSBPcGVuVGhyZWFkIHN0YWNrIHdoZW4gaXQgZXhwZWN0cyBhIHJlc3BvbnNlIGZyb20gdGhlIHBhcmVudC9zZW5kZXIuCisgICAgICoKKyAgICAgKiBJZiBAcCBhTnVtRmFzdFBvbGxzIGlzIHplcm8gdGhlIGRlZmF1bHQgdmFsdWUgc3BlY2lmaWVkIGJ5IGBrRGVmYXVsdEZhc3RQb2xsc2AgaXMgdXNlZCBpbnN0ZWFkLiBUaGUgbnVtYmVyIG9mCisgICAgICogZmFzdCBwb2xscyBpcyBjbGlwcGVkIGJ5IG1heGltdW0gdmFsdWUgc3BlY2lmaWVkIGJ5IGBrTWF4RmFzdFBvbGxzYC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYU51bUZhc3RQb2xscyAgSWYgbm9uLXplcm8sIG51bWJlciBvZiBmYXN0IHBvbGxzIHRvIHNlbmQsIGlmIHplcm8sIGRlZmF1bHQgdmFsdWUgaXMgdXNlZCBpbnN0ZWFkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZW5kRmFzdFBvbGxzKHVpbnQ4X3QgYU51bUZhc3RQb2xscyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBtYXhpbXVtIGRhdGEgcG9sbGluZyBwZXJpb2QgaW4gdXNlLgorICAgICAqCisgICAgICogQHJldHVybnMgdGhlIG1heGltdW0gZGF0YSBwb2xsaW5nIHBlcmlvZCBpbiB1c2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRLZWVwQWxpdmVQb2xsUGVyaW9kKHZvaWQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGVudW0gIC8vIFBvbGwgcGVyaW9kIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zIChpbiBtaWxsaXNlY29uZHMpLgorICAgIHsKKyAgICAgICAga0F0dGFjaERhdGFQb2xsUGVyaW9kICAgPSBPUEVOVEhSRUFEX0NPTkZJR19BVFRBQ0hfREFUQV9QT0xMX1BFUklPRCwgIC8vLzwgUG9sbCBwZXJpb2QgZHVyaW5nIGF0dGFjaC4KKyAgICAgICAga1JldHhQb2xsUGVyaW9kICAgICAgICAgPSAxMDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUG9sbCByZXR4IHBlcmlvZCBkdWUgdG8gdHggZmFpbHVyZS4KKyAgICAgICAga05vQnVmZmVyUmV0eFBvbGxQZXJpb2QgPSAyMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUG9sbCByZXR4IGR1ZSB0byBubyBidWZmZXIgc3BhY2UuCisgICAgICAgIGtGYXN0UG9sbFBlcmlvZCAgICAgICAgID0gMTg4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFBlcmlvZCB1c2VkIGZvciBmYXN0IHBvbGxzLgorICAgICAgICBrTWluUG9sbFBlcmlvZCAgICAgICAgICA9IDEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNaW5pbXVtIGFsbG93ZWQgcG9sbCBwZXJpb2QuCisgICAgfTsKKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtRdWlja1BvbGxzQWZ0ZXJUaW1lb3V0ID0gNSwgIC8vLzwgTWF4aW11bSBudW1iZXIgb2YgcXVpY2sgZGF0YSBwb2xsIHR4IGluIGNhc2Ugb2YgYmFjay10by1iYWNrIHBvbGwgdGltZW91dHMuCisgICAgICAgIGtNYXhQb2xsUmV0eEF0dGVtcHRzICAgID0gNSwgIC8vLzwgTWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pdCBhdHRlbXB0cyBvZiBkYXRhIHBvbGwgKG1hYyBkYXRhIHJlcXVlc3QpLgorICAgIH07CisKKyAgICBlbnVtIFBvbGxQZXJpb2RTZWxlY3RvcgorICAgIHsKKyAgICAgICAga1VzZVByZXZpb3VzUG9sbFBlcmlvZCwKKyAgICAgICAga1JlY2FsY3VsYXRlUG9sbFBlcmlvZCwKKyAgICB9OworCisgICAgdm9pZCBTY2hlZHVsZU5leHRQb2xsKFBvbGxQZXJpb2RTZWxlY3RvciBhUG9sbFBlcmlvZFNlbGVjdG9yKTsKKyAgICB1aW50MzJfdCBDYWxjdWxhdGVQb2xsUGVyaW9kKHZvaWQpIGNvbnN0OworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVBvbGxUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICBzdGF0aWMgRGF0YVBvbGxNYW5hZ2VyICZHZXRPd25lcihDb250ZXh0ICZhQ29udGV4dCk7CisgICAgdWludDMyX3QgR2V0RGVmYXVsdFBvbGxQZXJpb2Qodm9pZCkgY29uc3Q7CisKKyAgICBUaW1lciAgICAgbVRpbWVyOworICAgIHVpbnQzMl90ICBtVGltZXJTdGFydFRpbWU7CisgICAgdWludDMyX3QgIG1FeHRlcm5hbFBvbGxQZXJpb2Q7CisgICAgdWludDMyX3QgIG1Qb2xsUGVyaW9kOworCisgICAgYm9vbCAgICAgIG1FbmFibGVkOiAxOyAgICAgICAgICAgICAgIC8vPCBJbmRpY2F0ZXMgd2hldGhlciBkYXRhIHBvbGxpbmcgaXMgZW5hYmxlZC9zdGFydGVkLgorICAgIGJvb2wgICAgICBtQXR0YWNoTW9kZTogMTsgICAgICAgICAgICAvLzwgSW5kaWNhdGVzIHdoZXRoZXIgaW4gYXR0YWNoIG1vZGUgKHRvIHVzZSBhdHRhY2ggcG9sbCBwZXJpb2QpLgorICAgIGJvb2wgICAgICBtUmV0eE1vZGU6IDE7ICAgICAgICAgICAgICAvLzwgSW5kaWNhdGVzIHdoZXRoZXIgbGFzdCBwb2xsIHR4IGZhaWxlZCBhdCBtYWMvcmFkaW8gbGF5ZXIgKHBvbGwgcmV0eCBtb2RlKS4KKyAgICBib29sICAgICAgbU5vQnVmZmVyUmV0eE1vZGU6IDE7ICAgICAgLy88IEluZGljYXRlcyB3aGV0aGVyIGxhc3QgcG9sbCB0eCBmYWlsZWQgZHVlIHRvIGluc3VmZmljaWVudCBidWZmZXIuCisgICAgdWludDhfdCAgIG1Qb2xsVGltZW91dENvdW50ZXI6IDQ7ICAgIC8vPCBQb2xsIHRpbWVvdXRzIGNvdW50ZXIgKDAgdG8gYGtRdWlja1BvbGxzQWZ0ZXJUaW1vdXRgKS4KKyAgICB1aW50OF90ICAgbVBvbGxUeEZhaWx1cmVDb3VudGVyOiA0OyAgLy88IFBvbGwgdHggZmFpbHVyZSBjb3VudGVyICgwIHRvIGBrTWF4UG9sbFJldHhBdHRlbXB0c2ApLgorICAgIHVpbnQ4X3QgICBtUmVtYWluaW5nRmFzdFBvbGxzOiA0OyAgICAvLzwgTnVtYmVyIG9mIHJlbWFpbmluZyBmYXN0IHBvbGxzIHdoZW4gaW4gdHJhbnNpZW50IGZhc3QgcG9sbGluZyBtb2RlLgorfTsKKworLyoqCisgKiBAfQorICoKKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBEQVRBX1BPTExfTUFOQUdFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvZW5lcmd5X3NjYW5fc2VydmVyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjViNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvZW5lcmd5X3NjYW5fc2VydmVyLmNwcApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgRW5lcmd5IFNjYW4gU2VydmVyLgorICovCisKKyNkZWZpbmUgV1BQX05BTUUgImVuZXJneV9zY2FuX3NlcnZlci50bWgiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImVuZXJneV9zY2FuX3NlcnZlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL21lc2hjb3AuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK0VuZXJneVNjYW5TZXJ2ZXI6OkVuZXJneVNjYW5TZXJ2ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1DaGFubmVsTWFzaygwKSwKKyAgICBtQ2hhbm5lbE1hc2tDdXJyZW50KDApLAorICAgIG1QZXJpb2QoMCksCisgICAgbVNjYW5EdXJhdGlvbigwKSwKKyAgICBtQ291bnQoMCksCisgICAgbUFjdGl2ZShmYWxzZSksCisgICAgbVNjYW5SZXN1bHRzTGVuZ3RoKDApLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1FbmVyZ3lTY2FuKE9UX1VSSV9QQVRIX0VORVJHWV9TQ0FOLCAmRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlUmVxdWVzdCwgdGhpcykKK3sKKyAgICBtTmV0aWZDYWxsYmFjay5TZXQoJkVuZXJneVNjYW5TZXJ2ZXI6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkLCB0aGlzKTsKKyAgICBhVGhyZWFkTmV0aWYuUmVnaXN0ZXJDYWxsYmFjayhtTmV0aWZDYWxsYmFjayk7CisKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1FbmVyZ3lTY2FuKTsKK30KKwordm9pZCBFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVSZXF1ZXN0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PEVuZXJneVNjYW5TZXJ2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVSZXF1ZXN0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIEVuZXJneVNjYW5TZXJ2ZXI6OkhhbmRsZVJlcXVlc3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIE1lc2hDb1A6OkNvdW50VGx2IGNvdW50OworICAgIE1lc2hDb1A6OlBlcmlvZFRsdiBwZXJpb2Q7CisgICAgTWVzaENvUDo6U2NhbkR1cmF0aW9uVGx2IHNjYW5EdXJhdGlvbjsKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgSXA2OjpNZXNzYWdlSW5mbyByZXNwb25zZUluZm8oYU1lc3NhZ2VJbmZvKTsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfUE9TVCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtDb3VudCwgc2l6ZW9mKGNvdW50KSwgY291bnQpKTsKKyAgICBWZXJpZnlPckV4aXQoY291bnQuSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a1BlcmlvZCwgc2l6ZW9mKHBlcmlvZCksIHBlcmlvZCkpOworICAgIFZlcmlmeU9yRXhpdChwZXJpb2QuSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a1NjYW5EdXJhdGlvbiwgc2l6ZW9mKHNjYW5EdXJhdGlvbiksIHNjYW5EdXJhdGlvbikpOworICAgIFZlcmlmeU9yRXhpdChzY2FuRHVyYXRpb24uSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a0NoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spLCBjaGFubmVsTWFzaykpOworICAgIFZlcmlmeU9yRXhpdChjaGFubmVsTWFzay5Jc1ZhbGlkKCkpOworCisgICAgbUNoYW5uZWxNYXNrID0gY2hhbm5lbE1hc2suR2V0TWFzaygpOworICAgIG1DaGFubmVsTWFza0N1cnJlbnQgPSBtQ2hhbm5lbE1hc2s7CisgICAgbUNvdW50ID0gY291bnQuR2V0Q291bnQoKTsKKyAgICBtUGVyaW9kID0gcGVyaW9kLkdldFBlcmlvZCgpOworICAgIG1TY2FuRHVyYXRpb24gPSBzY2FuRHVyYXRpb24uR2V0U2NhbkR1cmF0aW9uKCk7CisgICAgbVNjYW5SZXN1bHRzTGVuZ3RoID0gMDsKKyAgICBtQWN0aXZlID0gdHJ1ZTsKKyAgICBtVGltZXIuU3RhcnQoa1NjYW5EZWxheSk7CisKKyAgICBtQ29tbWlzc2lvbmVyID0gYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCk7CisKKyAgICBpZiAoYUhlYWRlci5Jc0NvbmZpcm1hYmxlKCkgJiYgIWFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KEdldE5ldGlmKCkuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCByZXNwb25zZUluZm8pKTsKKyAgICAgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBlbmVyZ3kgc2NhbiBxdWVyeSByZXNwb25zZSIpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobUFjdGl2ZSk7CisKKyAgICBpZiAobUNvdW50KQorICAgIHsKKyAgICAgICAgLy8gZ3JhYiB0aGUgbG93ZXN0IGNoYW5uZWwgdG8gc2NhbgorICAgICAgICB1aW50MzJfdCBjaGFubmVsTWFzayA9IG1DaGFubmVsTWFza0N1cnJlbnQgJiB+KG1DaGFubmVsTWFza0N1cnJlbnQgLSAxKTsKKyAgICAgICAgR2V0TmV0aWYoKS5HZXRNYWMoKS5FbmVyZ3lTY2FuKGNoYW5uZWxNYXNrLCBtU2NhbkR1cmF0aW9uLCBIYW5kbGVTY2FuUmVzdWx0LCB0aGlzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2VuZFJlcG9ydCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRW5lcmd5U2NhblNlcnZlcjo6SGFuZGxlU2NhblJlc3VsdCh2b2lkICphQ29udGV4dCwgb3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIHN0YXRpY19jYXN0PEVuZXJneVNjYW5TZXJ2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVTY2FuUmVzdWx0KGFSZXN1bHQpOworfQorCit2b2lkIEVuZXJneVNjYW5TZXJ2ZXI6OkhhbmRsZVNjYW5SZXN1bHQob3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KQoreworICAgIFZlcmlmeU9yRXhpdChtQWN0aXZlKTsKKworICAgIGlmIChhUmVzdWx0KQorICAgIHsKKyAgICAgICAgbVNjYW5SZXN1bHRzW21TY2FuUmVzdWx0c0xlbmd0aCsrXSA9IGFSZXN1bHQtPm1NYXhSc3NpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBjbGVhciB0aGUgbG93ZXN0IGNoYW5uZWwgdG8gc2NhbgorICAgICAgICBtQ2hhbm5lbE1hc2tDdXJyZW50ICY9IG1DaGFubmVsTWFza0N1cnJlbnQgLSAxOworCisgICAgICAgIGlmIChtQ2hhbm5lbE1hc2tDdXJyZW50ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DaGFubmVsTWFza0N1cnJlbnQgPSBtQ2hhbm5lbE1hc2s7CisgICAgICAgICAgICBtQ291bnQtLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQ291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UaW1lci5TdGFydChtUGVyaW9kKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UaW1lci5TdGFydChrUmVwb3J0RGVsYXkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBFbmVyZ3lTY2FuU2VydmVyOjpTZW5kUmVwb3J0KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgTWVzaENvUDo6RW5lcmd5TGlzdFRsdiBlbmVyZ3lMaXN0OworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9FTkVSR1lfUkVQT1JUKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTWVzaENvUDo6TmV3TWVzaENvUE1lc3NhZ2UoR2V0TmV0aWYoKS5HZXRDb2FwKCksIGhlYWRlcikpICE9IE5VTEwsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBjaGFubmVsTWFzay5Jbml0KCk7CisgICAgY2hhbm5lbE1hc2suU2V0TWFzayhtQ2hhbm5lbE1hc2spOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNoYW5uZWxNYXNrLCBzaXplb2YoY2hhbm5lbE1hc2spKSk7CisKKyAgICBlbmVyZ3lMaXN0LkluaXQoKTsKKyAgICBlbmVyZ3lMaXN0LlNldExlbmd0aChtU2NhblJlc3VsdHNMZW5ndGgpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmVuZXJneUxpc3QsIHNpemVvZihlbmVyZ3lMaXN0KSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQobVNjYW5SZXN1bHRzLCBtU2NhblJlc3VsdHNMZW5ndGgpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIobUNvbW1pc3Npb25lcik7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gR2V0TmV0aWYoKS5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IHNjYW4gcmVzdWx0cyIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIG1BY3RpdmUgPSBmYWxzZTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBFbmVyZ3lTY2FuU2VydmVyOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PEVuZXJneVNjYW5TZXJ2ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZChhRmxhZ3MpOworfQorCit2b2lkIEVuZXJneVNjYW5TZXJ2ZXI6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncykKK3sKKyAgICBpZiAoKGFGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpICE9IDAgJiYKKyAgICAgICAgIW1BY3RpdmUgJiYKKyAgICAgICAgR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbW1pc3Npb25pbmdEYXRhKCkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1BY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgbVRpbWVyLlN0b3AoKTsKKyAgICB9Cit9CisKK0VuZXJneVNjYW5TZXJ2ZXIgJkVuZXJneVNjYW5TZXJ2ZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEVuZXJneVNjYW5TZXJ2ZXIgJnNlcnZlciA9ICpzdGF0aWNfY2FzdDxFbmVyZ3lTY2FuU2VydmVyICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEVuZXJneVNjYW5TZXJ2ZXIgJnNlcnZlciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRFbmVyZ3lTY2FuU2VydmVyKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBzZXJ2ZXI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2VuZXJneV9zY2FuX3NlcnZlci5ocHAgYi9zcmMvY29yZS90aHJlYWQvZW5lcmd5X3NjYW5fc2VydmVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmUyMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2VuZXJneV9zY2FuX3NlcnZlci5ocHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciByZXNwb25kaW5nIHRvIEVuZXJneSBTY2FuIFJlcXVlc3RzLgorICovCisKKyNpZm5kZWYgRU5FUkdZX1NDQU5fU0VSVkVSX0hQUF8KKyNkZWZpbmUgRU5FUkdZX1NDQU5fU0VSVkVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBNZXNoRm9yd2FyZGVyOworY2xhc3MgVGhyZWFkTGFzdFRyYW5zYWN0aW9uVGltZVRsdjsKK2NsYXNzIFRocmVhZE1lc2hMb2NhbEVpZFRsdjsKK2NsYXNzIFRocmVhZE5ldGlmOworY2xhc3MgVGhyZWFkVGFyZ2V0VGx2OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBoYW5kbGluZyBFbmVyZ3kgU2NhbiBSZXF1ZXN0cy4KKyAqCisgKi8KK2NsYXNzIEVuZXJneVNjYW5TZXJ2ZXI6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBFbmVyZ3lTY2FuU2VydmVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtTY2FuRGVsYXkgICA9IDEwMDAsICAvLy88IFNDQU5fREVMQVkgKG1pbGxpc2Vjb25kcykKKyAgICAgICAga1JlcG9ydERlbGF5ID0gNTAwLCAgIC8vLzwgRGVsYXkgYmVmb3JlIHNlbmRpbmcgYSByZXBvcnQgKG1pbGxpc2Vjb25kcykKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlUmVxdWVzdCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVJlcXVlc3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNjYW5SZXN1bHQodm9pZCAqYUNvbnRleHQsIG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCk7CisgICAgdm9pZCBIYW5kbGVTY2FuUmVzdWx0KG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCk7CisgICAgdm9pZCBIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCh1aW50MzJfdCBhRmxhZ3MpOworCisgICAgb3RFcnJvciBTZW5kUmVwb3J0KHZvaWQpOworCisgICAgc3RhdGljIEVuZXJneVNjYW5TZXJ2ZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIElwNjo6QWRkcmVzcyBtQ29tbWlzc2lvbmVyOworICAgIHVpbnQzMl90IG1DaGFubmVsTWFzazsKKyAgICB1aW50MzJfdCBtQ2hhbm5lbE1hc2tDdXJyZW50OworICAgIHVpbnQxNl90IG1QZXJpb2Q7CisgICAgdWludDE2X3QgbVNjYW5EdXJhdGlvbjsKKyAgICB1aW50OF90IG1Db3VudDsKKyAgICBib29sIG1BY3RpdmU7CisKKyAgICBpbnQ4X3QgbVNjYW5SZXN1bHRzW09QRU5USFJFQURfQ09ORklHX01BWF9FTkVSR1lfUkVTVUxUU107CisgICAgdWludDhfdCBtU2NhblJlc3VsdHNMZW5ndGg7CisKKyAgICBUaW1lciBtVGltZXI7CisKKyAgICBJcDY6Ok5ldGlmQ2FsbGJhY2sgbU5ldGlmQ2FsbGJhY2s7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtRW5lcmd5U2NhbjsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBFTkVSR1lfU0NBTl9TRVJWRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2tleV9tYW5hZ2VyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9rZXlfbWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljZTAwNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9rZXlfbWFuYWdlci5jcHAKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgVGhyZWFkIHNlY3VyaXR5IG1hdGVyaWFsIGdlbmVyYXRpb24uCisgKi8KKworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImtleV9tYW5hZ2VyLmhwcCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vaG1hY19zaGEyNTYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qga1RocmVhZFN0cmluZ1tdID0KK3sKKyAgICAnVCcsICdoJywgJ3InLCAnZScsICdhJywgJ2QnLAorfTsKKworS2V5TWFuYWdlcjo6S2V5TWFuYWdlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtS2V5U2VxdWVuY2UoMCksCisgICAgbU1hY0ZyYW1lQ291bnRlcigwKSwKKyAgICBtTWxlRnJhbWVDb3VudGVyKDApLAorICAgIG1TdG9yZWRNYWNGcmFtZUNvdW50ZXIoMCksCisgICAgbVN0b3JlZE1sZUZyYW1lQ291bnRlcigwKSwKKyAgICBtSG91cnNTaW5jZUtleVJvdGF0aW9uKDApLAorICAgIG1LZXlSb3RhdGlvblRpbWUoa0RlZmF1bHRLZXlSb3RhdGlvblRpbWUpLAorICAgIG1LZXlTd2l0Y2hHdWFyZFRpbWUoa0RlZmF1bHRLZXlTd2l0Y2hHdWFyZFRpbWUpLAorICAgIG1LZXlTd2l0Y2hHdWFyZEVuYWJsZWQoZmFsc2UpLAorICAgIG1LZXlSb3RhdGlvblRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZLZXlNYW5hZ2VyOjpIYW5kbGVLZXlSb3RhdGlvblRpbWVyLCB0aGlzKSwKKyAgICBtS2VrRnJhbWVDb3VudGVyKDApLAorICAgIG1TZWN1cml0eVBvbGljeUZsYWdzKDB4ZmYpCit7Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6U3RhcnQodm9pZCkKK3sKKyAgICBtS2V5U3dpdGNoR3VhcmRFbmFibGVkID0gZmFsc2U7CisgICAgU3RhcnRLZXlSb3RhdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6U3RvcCh2b2lkKQoreworICAgIG1LZXlSb3RhdGlvblRpbWVyLlN0b3AoKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECitjb25zdCB1aW50OF90ICpLZXlNYW5hZ2VyOjpHZXRQU0tjKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QU0tjOworfQorCit2b2lkIEtleU1hbmFnZXI6OlNldFBTS2MoY29uc3QgdWludDhfdCAqYVBTS2MpCit7CisgICAgbWVtY3B5KG1QU0tjLCBhUFNLYywgc2l6ZW9mKG1QU0tjKSk7Cit9CisjZW5kaWYKKworY29uc3Qgb3RNYXN0ZXJLZXkgJktleU1hbmFnZXI6OkdldE1hc3RlcktleSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtTWFzdGVyS2V5OworfQorCitvdEVycm9yIEtleU1hbmFnZXI6OlNldE1hc3RlcktleShjb25zdCBvdE1hc3RlcktleSAmYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSb3V0ZXIgKnJvdXRlcnM7CisgICAgQ2hpbGQgKmNoaWxkcmVuOworICAgIHVpbnQ4X3QgbnVtOworCisgICAgVmVyaWZ5T3JFeGl0KG1lbWNtcCgmbU1hc3RlcktleSwgJmFLZXksIHNpemVvZihtTWFzdGVyS2V5KSkgIT0gMCk7CisKKyAgICBtTWFzdGVyS2V5ID0gYUtleTsKKyAgICBtS2V5U2VxdWVuY2UgPSAwOworICAgIENvbXB1dGVLZXkobUtleVNlcXVlbmNlLCBtS2V5KTsKKworICAgIC8vIHJlc2V0IHBhcmVudCBmcmFtZSBjb3VudGVycworICAgIHJvdXRlcnMgPSBHZXROZXRpZigpLkdldE1sZSgpLkdldFBhcmVudCgpOworICAgIHJvdXRlcnMtPlNldEtleVNlcXVlbmNlKDApOworICAgIHJvdXRlcnMtPlNldExpbmtGcmFtZUNvdW50ZXIoMCk7CisgICAgcm91dGVycy0+U2V0TWxlRnJhbWVDb3VudGVyKDApOworCisgICAgLy8gcmVzZXQgcm91dGVyIGZyYW1lIGNvdW50ZXJzCisgICAgcm91dGVycyA9IEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Um91dGVycygmbnVtKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG51bTsgaSsrKQorICAgIHsKKyAgICAgICAgcm91dGVyc1tpXS5TZXRLZXlTZXF1ZW5jZSgwKTsKKyAgICAgICAgcm91dGVyc1tpXS5TZXRMaW5rRnJhbWVDb3VudGVyKDApOworICAgICAgICByb3V0ZXJzW2ldLlNldE1sZUZyYW1lQ291bnRlcigwKTsKKyAgICB9CisKKyAgICAvLyByZXNldCBjaGlsZCBmcmFtZSBjb3VudGVycworICAgIGNoaWxkcmVuID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRDaGlsZHJlbigmbnVtKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG51bTsgaSsrKQorICAgIHsKKyAgICAgICAgY2hpbGRyZW5baV0uU2V0S2V5U2VxdWVuY2UoMCk7CisgICAgICAgIGNoaWxkcmVuW2ldLlNldExpbmtGcmFtZUNvdW50ZXIoMCk7CisgICAgICAgIGNoaWxkcmVuW2ldLlNldE1sZUZyYW1lQ291bnRlcigwKTsKKyAgICB9CisKKyAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgS2V5TWFuYWdlcjo6Q29tcHV0ZUtleSh1aW50MzJfdCBhS2V5U2VxdWVuY2UsIHVpbnQ4X3QgKmFLZXkpCit7CisgICAgQ3J5cHRvOjpIbWFjU2hhMjU2IGhtYWM7CisgICAgdWludDhfdCBrZXlTZXF1ZW5jZUJ5dGVzWzRdOworCisgICAgaG1hYy5TdGFydChtTWFzdGVyS2V5Lm04LCBzaXplb2YobU1hc3RlcktleS5tOCkpOworCisgICAga2V5U2VxdWVuY2VCeXRlc1swXSA9IChhS2V5U2VxdWVuY2UgPj4gMjQpICYgMHhmZjsKKyAgICBrZXlTZXF1ZW5jZUJ5dGVzWzFdID0gKGFLZXlTZXF1ZW5jZSA+PiAxNikgJiAweGZmOworICAgIGtleVNlcXVlbmNlQnl0ZXNbMl0gPSAoYUtleVNlcXVlbmNlID4+IDgpICYgMHhmZjsKKyAgICBrZXlTZXF1ZW5jZUJ5dGVzWzNdID0gYUtleVNlcXVlbmNlICYgMHhmZjsKKyAgICBobWFjLlVwZGF0ZShrZXlTZXF1ZW5jZUJ5dGVzLCBzaXplb2Yoa2V5U2VxdWVuY2VCeXRlcykpOworICAgIGhtYWMuVXBkYXRlKGtUaHJlYWRTdHJpbmcsIHNpemVvZihrVGhyZWFkU3RyaW5nKSk7CisKKyAgICBobWFjLkZpbmlzaChhS2V5KTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIEtleU1hbmFnZXI6OlNldEN1cnJlbnRLZXlTZXF1ZW5jZSh1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgaWYgKGFLZXlTZXF1ZW5jZSA9PSBtS2V5U2VxdWVuY2UpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgdGhlIGd1YXJkIHRpbWVyIGhhcyBleHBpcmVkIGlmIGtleSByb3RhdGlvbiBpcyByZXF1ZXN0ZWQuCisgICAgaWYgKChhS2V5U2VxdWVuY2UgPT0gKG1LZXlTZXF1ZW5jZSArIDEpKSAmJgorICAgICAgICAobUtleVN3aXRjaEd1YXJkVGltZSAhPSAwKSAmJgorICAgICAgICBtS2V5Um90YXRpb25UaW1lci5Jc1J1bm5pbmcoKSAmJgorICAgICAgICBtS2V5U3dpdGNoR3VhcmRFbmFibGVkKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1Ib3Vyc1NpbmNlS2V5Um90YXRpb24gPCBtS2V5U3dpdGNoR3VhcmRUaW1lKTsKKyAgICB9CisKKyAgICBtS2V5U2VxdWVuY2UgPSBhS2V5U2VxdWVuY2U7CisgICAgQ29tcHV0ZUtleShtS2V5U2VxdWVuY2UsIG1LZXkpOworCisgICAgbU1hY0ZyYW1lQ291bnRlciA9IDA7CisgICAgbU1sZUZyYW1lQ291bnRlciA9IDA7CisKKyAgICBpZiAobUtleVJvdGF0aW9uVGltZXIuSXNSdW5uaW5nKCkpCisgICAgeworICAgICAgICBtS2V5U3dpdGNoR3VhcmRFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgU3RhcnRLZXlSb3RhdGlvblRpbWVyKCk7CisgICAgfQorCisgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUik7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitjb25zdCB1aW50OF90ICpLZXlNYW5hZ2VyOjpHZXRUZW1wb3JhcnlNYWNLZXkodWludDMyX3QgYUtleVNlcXVlbmNlKQoreworICAgIENvbXB1dGVLZXkoYUtleVNlcXVlbmNlLCBtVGVtcG9yYXJ5S2V5KTsKKyAgICByZXR1cm4gbVRlbXBvcmFyeUtleSArIGtNYWNLZXlPZmZzZXQ7Cit9CisKK2NvbnN0IHVpbnQ4X3QgKktleU1hbmFnZXI6OkdldFRlbXBvcmFyeU1sZUtleSh1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgQ29tcHV0ZUtleShhS2V5U2VxdWVuY2UsIG1UZW1wb3JhcnlLZXkpOworICAgIHJldHVybiBtVGVtcG9yYXJ5S2V5OworfQorCit2b2lkIEtleU1hbmFnZXI6OkluY3JlbWVudE1hY0ZyYW1lQ291bnRlcih2b2lkKQoreworICAgIG1NYWNGcmFtZUNvdW50ZXIrKzsKKworICAgIGlmIChtTWFjRnJhbWVDb3VudGVyID49IG1TdG9yZWRNYWNGcmFtZUNvdW50ZXIpCisgICAgeworICAgICAgICBHZXROZXRpZigpLkdldE1sZSgpLlN0b3JlKCk7CisgICAgfQorfQorCit2b2lkIEtleU1hbmFnZXI6OkluY3JlbWVudE1sZUZyYW1lQ291bnRlcih2b2lkKQoreworICAgIG1NbGVGcmFtZUNvdW50ZXIrKzsKKworICAgIGlmIChtTWxlRnJhbWVDb3VudGVyID49IG1TdG9yZWRNbGVGcmFtZUNvdW50ZXIpCisgICAgeworICAgICAgICBHZXROZXRpZigpLkdldE1sZSgpLlN0b3JlKCk7CisgICAgfQorfQorCit2b2lkIEtleU1hbmFnZXI6OlNldEtlayhjb25zdCB1aW50OF90ICphS2VrKQoreworICAgIG1lbWNweShtS2VrLCBhS2VrLCBzaXplb2YobUtlaykpOworICAgIG1LZWtGcmFtZUNvdW50ZXIgPSAwOworfQorCitvdEVycm9yIEtleU1hbmFnZXI6OlNldEtleVJvdGF0aW9uKHVpbnQzMl90IGFLZXlSb3RhdGlvbikKK3sKKyAgICBvdEVycm9yIHJlc3VsdCA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUtleVJvdGF0aW9uID49IHN0YXRpY19jYXN0PHVpbnQzMl90PihrTWluS2V5Um90YXRpb25UaW1lKSwgcmVzdWx0ID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1LZXlSb3RhdGlvblRpbWUgPSBhS2V5Um90YXRpb247CisKK2V4aXQ6CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBLZXlNYW5hZ2VyOjpTdGFydEtleVJvdGF0aW9uVGltZXIodm9pZCkKK3sKKyAgICBtSG91cnNTaW5jZUtleVJvdGF0aW9uID0gMDsKKyAgICBtS2V5Um90YXRpb25UaW1lci5TdGFydChrT25lSG91ckludGVydmFsSW5Nc2VjKTsKK30KKwordm9pZCBLZXlNYW5hZ2VyOjpIYW5kbGVLZXlSb3RhdGlvblRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVLZXlSb3RhdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgS2V5TWFuYWdlcjo6SGFuZGxlS2V5Um90YXRpb25UaW1lcih2b2lkKQoreworICAgIG1Ib3Vyc1NpbmNlS2V5Um90YXRpb24rKzsKKworICAgIC8vIE9yZGVyIG9mIG9wZXJhdGlvbnMgYmVsb3cgaXMgaW1wb3J0YW50LiBXZSBzaG91bGQgcmVzdGFydCB0aGUgdGltZXIgKGZyb20KKyAgICAvLyBsYXN0IGZpcmUgdGltZSBmb3Igb25lIGhvdXIgaW50ZXJ2YWwpIGJlZm9yZSBwb3RlbnRpYWxseSBjYWxsaW5nCisgICAgLy8gYFNldEN1cnJlbnRLZXlTZXF1ZW5jZSgpYC4gYFNldEN1cnJlbnRLZXlTZXF1ZW5jZSgpYCB1c2VzIHRoZSBmYWN0IHRoYXQKKyAgICAvLyB0aW1lciBpcyBydW5uaW5nIHRvIGRlY2lkZSB0byBjaGVjayBmb3IgdGhlIGd1YXJkIHRpbWUgYW5kIHRvIHJlc2V0IHRoZQorICAgIC8vIHJvdGF0aW9uIHRpbWVyIChhbmQgdGhlIGBtSG91cnNTaW5jZUtleVJvdGF0aW9uYCkgaWYgaXQgdXBkYXRlcyB0aGUga2V5CisgICAgLy8gc2VxdWVuY2UuCisKKyAgICBtS2V5Um90YXRpb25UaW1lci5TdGFydEF0KG1LZXlSb3RhdGlvblRpbWVyLkdldEZpcmVUaW1lKCksIGtPbmVIb3VySW50ZXJ2YWxJbk1zZWMpOworCisgICAgaWYgKG1Ib3Vyc1NpbmNlS2V5Um90YXRpb24gPj0gbUtleVJvdGF0aW9uVGltZSkKKyAgICB7CisgICAgICAgIFNldEN1cnJlbnRLZXlTZXF1ZW5jZShtS2V5U2VxdWVuY2UgKyAxKTsKKyAgICB9Cit9CisKK0tleU1hbmFnZXIgJktleU1hbmFnZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIEtleU1hbmFnZXIgJmtleU1hbmFnZXIgPSAqc3RhdGljX2Nhc3Q8S2V5TWFuYWdlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBLZXlNYW5hZ2VyICZrZXlNYW5hZ2VyID0gb3RHZXRUaHJlYWROZXRpZigpLkdldEtleU1hbmFnZXIoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIGtleU1hbmFnZXI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2tleV9tYW5hZ2VyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9rZXlfbWFuYWdlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwM2ZlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9rZXlfbWFuYWdlci5ocHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUaHJlYWQgc2VjdXJpdHkgbWF0ZXJpYWwgZ2VuZXJhdGlvbi4KKyAqLworCisjaWZuZGVmIEtFWV9NQU5BR0VSX0hQUF8KKyNkZWZpbmUgS0VZX01BTkFHRVJfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgImNyeXB0by9obWFjX3NoYTI1Ni5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1zZWN1cml0eQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgVGhyZWFkIHNlY3VyaXR5IG1hdGVyaWFsIGdlbmVyYXRpb24uCisgKgorICogQHsKKyAqLworCitjbGFzcyBLZXlNYW5hZ2VyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heEtleUxlbmd0aCA9IDE2LAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBLZXlNYW5hZ2VyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIEtleU1hbmFnZXIgcm90YXRpb24gdGltZXIgYW5kIHNldHMgZ3VhcmQgdGltZXIgdG8gaW5pdGlhbCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyBLZXlNYW5hZ2VyIHRpbWVycy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RvcCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBNYXN0ZXIgS2V5CisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIE1hc3RlciBLZXkuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBvdE1hc3RlcktleSAmR2V0TWFzdGVyS2V5KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGhyZWFkIE1hc3RlciBLZXkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2V5ICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIE1hc3RlciBLZXkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgVGhyZWFkIE1hc3RlciBLZXkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBAcCBhS2V5TGVuZ3RoIHZhbHVlIHdhcyBpbnZhbGlkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRNYXN0ZXJLZXkoY29uc3Qgb3RNYXN0ZXJLZXkgJmFLZXkpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFBTS2MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFBTS2MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRQU0tjKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUFNLYy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQU0tjICAgIEEgcG9pbnRlciB0byB0aGUgUFNLYy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UFNLYyhjb25zdCB1aW50OF90ICphUFNLYyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEN1cnJlbnRLZXlTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtS2V5U2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleVNlcXVlbmNlICBUaGUga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDdXJyZW50S2V5U2VxdWVuY2UodWludDMyX3QgYUtleVNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IE1BQyBrZXkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgTUFDIGtleS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEN1cnJlbnRNYWNLZXkodm9pZCkgY29uc3QgeyByZXR1cm4gbUtleSArIGtNYWNLZXlPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IE1MRSBrZXkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgTUxFIGtleS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEN1cnJlbnRNbGVLZXkodm9pZCkgY29uc3QgeyByZXR1cm4gbUtleTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSB0ZW1wb3JhcnkgTUFDIGtleSBjb21wdXRlZCBmcm9tIHRoZSBnaXZlbiBrZXkgc2VxdWVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2V5U2VxdWVuY2UgIFRoZSBrZXkgc2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHRlbXBvcmFyeSBNQUMga2V5LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0VGVtcG9yYXJ5TWFjS2V5KHVpbnQzMl90IGFLZXlTZXF1ZW5jZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHRlbXBvcmFyeSBNTEUga2V5IGNvbXB1dGVkIGZyb20gdGhlIGdpdmVuIGtleSBzZXF1ZW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlTZXF1ZW5jZSAgVGhlIGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgdGVtcG9yYXJ5IE1MRSBrZXkuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRUZW1wb3JhcnlNbGVLZXkodWludDMyX3QgYUtleVNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgTUFDIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBNQUMgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldE1hY0ZyYW1lQ291bnRlcih2b2lkKSBjb25zdCB7IHJldHVybiBtTWFjRnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBjdXJyZW50IE1BQyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1hY0ZyYW1lQ291bnRlciAgVGhlIE1BQyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYWNGcmFtZUNvdW50ZXIodWludDMyX3QgYU1hY0ZyYW1lQ291bnRlcikgeyBtTWFjRnJhbWVDb3VudGVyID0gYU1hY0ZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUFDIEZyYW1lIENvdW50ZXIgdmFsdWUgd2hpY2ggaXMgc3RvcmVkIGluIG5vbi12b2xhdGlsZSBtZW1vcnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RvcmVkTWFjRnJhbWVDb3VudGVyICBUaGUgc3RvcmVkIE1BQyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdG9yZWRNYWNGcmFtZUNvdW50ZXIodWludDMyX3QgYVN0b3JlZE1hY0ZyYW1lQ291bnRlcikgeyBtU3RvcmVkTWFjRnJhbWVDb3VudGVyID0gYVN0b3JlZE1hY0ZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgY3VycmVudCBNQUMgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50TWFjRnJhbWVDb3VudGVyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBNTEUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IE1MRSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TWxlRnJhbWVDb3VudGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1NbGVGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGN1cnJlbnQgTUxFIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWxlRnJhbWVDb3VudGVyICBUaGUgTUxFIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1sZUZyYW1lQ291bnRlcih1aW50MzJfdCBhTWxlRnJhbWVDb3VudGVyKSB7IG1NbGVGcmFtZUNvdW50ZXIgPSBhTWxlRnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNTEUgRnJhbWUgQ291bnRlciB2YWx1ZSB3aGljaCBpcyBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdG9yZWRNbGVGcmFtZUNvdW50ZXIgIFRoZSBzdG9yZWQgTUxFIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0b3JlZE1sZUZyYW1lQ291bnRlcih1aW50MzJfdCBhU3RvcmVkTWxlRnJhbWVDb3VudGVyKSB7IG1TdG9yZWRNbGVGcmFtZUNvdW50ZXIgPSBhU3RvcmVkTWxlRnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmNyZW1lbnRzIHRoZSBjdXJyZW50IE1MRSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbmNyZW1lbnRNbGVGcmFtZUNvdW50ZXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBLRUsuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEtFSy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEtlayh2b2lkKSBjb25zdCB7IHJldHVybiBtS2VrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLRUsuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2VrICBBIHBvaW50ZXIgdG8gdGhlIEtFSy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0S2VrKGNvbnN0IHVpbnQ4X3QgKmFLZWspOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBLRUsgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEtFSyBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0S2VrRnJhbWVDb3VudGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1LZWtGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIGN1cnJlbnQgS0VLIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudEtla0ZyYW1lQ291bnRlcih2b2lkKSB7IG1LZWtGcmFtZUNvdW50ZXIrKzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgS2V5Um90YXRpb24gdGltZS4KKyAgICAgKgorICAgICAqIFRoZSBLZXlSb3RhdGlvbiB0aW1lIGlzIHRoZSB0aW1lIGludGVydmFsIGFmdGVyIHdpdGNoIHNlY3VyaXR5IGtleSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcm90YXRlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBLZXlSb3RhdGlvbiB2YWx1ZSBpbiBob3Vycy4KKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRLZXlSb3RhdGlvbih2b2lkKSBjb25zdCB7IHJldHVybiBtS2V5Um90YXRpb25UaW1lOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBLZXlSb3RhdGlvbiB0aW1lLgorICAgICAqCisgICAgICogVGhlIEtleVJvdGF0aW9uIHRpbWUgaXMgdGhlIHRpbWUgaW50ZXJ2YWwgYWZ0ZXIgd2l0Y2ggc2VjdXJpdHkga2V5IHdpbGwgYmUgYXV0b21hdGljYWxseSByb3RhdGVkLgorICAgICAqIEl0cyB2YWx1ZSBzaGFsbCBiZSBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byBrTWluS2V5Um90YXRpb25UaW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleVJvdGF0aW9uICBUaGUgS2V5Um90YXRpb24gdmFsdWUgaW4gaG91cnMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICAgIEtleVJvdGF0aW9uIHRpbWUgdXBkYXRlZC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIEBwIGFLZXlSb3RhdGlvbiBpcyBvdXQgb2YgcmFuZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldEtleVJvdGF0aW9uKHVpbnQzMl90IGFLZXlSb3RhdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBLZXlTd2l0Y2hHdWFyZFRpbWUuCisgICAgICoKKyAgICAgKiBUaGUgS2V5U3dpdGNoR3VhcmRUaW1lIGlzIHRoZSB0aW1lIGludGVydmFsIGR1cmluZyB3aGljaCBrZXkgcm90YXRpb24gcHJvY2VkdXJlIGlzIHByZXZlbnRlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBLZXlTd2l0Y2hHdWFyZFRpbWUgdmFsdWUgaW4gaG91cnMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRLZXlTd2l0Y2hHdWFyZFRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbUtleVN3aXRjaEd1YXJkVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgS2V5U3dpdGNoR3VhcmRUaW1lLgorICAgICAqCisgICAgICogVGhlIEtleVN3aXRjaEd1YXJkVGltZSBpcyB0aGUgdGltZSBpbnRlcnZhbCBkdXJpbmcgd2hpY2gga2V5IHJvdGF0aW9uIHByb2NlZHVyZSBpcyBwcmV2ZW50ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhS2V5U3dpdGNoR3VhcmRUaW1lICBUaGUgS2V5U3dpdGNoR3VhcmRUaW1lIHZhbHVlIGluIGhvdXJzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXlTd2l0Y2hHdWFyZFRpbWUodWludDMyX3QgYUtleVN3aXRjaEd1YXJkVGltZSkgeyBtS2V5U3dpdGNoR3VhcmRUaW1lID0gYUtleVN3aXRjaEd1YXJkVGltZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU2VjdXJpdHkgUG9saWN5IEZsYWdzLgorICAgICAqCisgICAgICogVGhlIFNlY3VyaXR5IFBvbGljeSBGbGFncyBzcGVjaWZpZXMgbmV0d29yayBhZG1pbmlzdHJhdG9yIHByZWZlcmVuY2VzIGZvciB3aGljaAorICAgICAqIHNlY3VyaXR5LXJlbGF0ZWQgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBvciBkaXNhbGxvd2VkLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNlY3VyaXR5UG9saWN5IEZsYWdzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTZWN1cml0eVBvbGljeUZsYWdzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWN1cml0eVBvbGljeUZsYWdzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTZWN1cml0eSBQb2xpY3kgRmxhZ3MuCisgICAgICoKKyAgICAgKiBUaGUgU2VjdXJpdHkgUG9saWN5IEZsYWdzIHNwZWNpZmllcyBuZXR3b3JrIGFkbWluaXN0cmF0b3IgcHJlZmVyZW5jZXMgZm9yIHdoaWNoCisgICAgICogc2VjdXJpdHktcmVsYXRlZCBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIG9yIGRpc2FsbG93ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VjdXJpdHlQb2xpY3lGbGFncyAgVGhlIFNlY3VyaXR5IFBvbGljeSBGbGFncy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VjdXJpdHlQb2xpY3lGbGFncyh1aW50OF90IGFTZWN1cml0eVBvbGljeUZsYWdzKSB7IG1TZWN1cml0eVBvbGljeUZsYWdzID0gYVNlY3VyaXR5UG9saWN5RmxhZ3M7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWluS2V5Um90YXRpb25UaW1lID0gMSwKKyAgICAgICAga0RlZmF1bHRLZXlSb3RhdGlvblRpbWUgPSA2NzIsCisgICAgICAgIGtEZWZhdWx0S2V5U3dpdGNoR3VhcmRUaW1lID0gNjI0LAorICAgICAgICBrTWFjS2V5T2Zmc2V0ID0gMTYsCisgICAgICAgIGtPbmVIb3VySW50ZXJ2YWxJbk1zZWMgPSAzNjAwdSAqIDEwMDB1LAorICAgIH07CisKKyAgICBvdEVycm9yIENvbXB1dGVLZXkodWludDMyX3QgYUtleVNlcXVlbmNlLCB1aW50OF90ICphS2V5KTsKKworICAgIHZvaWQgU3RhcnRLZXlSb3RhdGlvblRpbWVyKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUtleVJvdGF0aW9uVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVLZXlSb3RhdGlvblRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIEtleU1hbmFnZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIG90TWFzdGVyS2V5IG1NYXN0ZXJLZXk7CisKKyAgICB1aW50MzJfdCBtS2V5U2VxdWVuY2U7CisgICAgdWludDhfdCBtS2V5W0NyeXB0bzo6SG1hY1NoYTI1Njo6a0hhc2hTaXplXTsKKworICAgIHVpbnQ4X3QgbVRlbXBvcmFyeUtleVtDcnlwdG86OkhtYWNTaGEyNTY6OmtIYXNoU2l6ZV07CisKKyAgICB1aW50MzJfdCBtTWFjRnJhbWVDb3VudGVyOworICAgIHVpbnQzMl90IG1NbGVGcmFtZUNvdW50ZXI7CisgICAgdWludDMyX3QgbVN0b3JlZE1hY0ZyYW1lQ291bnRlcjsKKyAgICB1aW50MzJfdCBtU3RvcmVkTWxlRnJhbWVDb3VudGVyOworCisgICAgdWludDMyX3QgbUhvdXJzU2luY2VLZXlSb3RhdGlvbjsKKyAgICB1aW50MzJfdCBtS2V5Um90YXRpb25UaW1lOworICAgIHVpbnQzMl90IG1LZXlTd2l0Y2hHdWFyZFRpbWU7CisgICAgYm9vbCAgICAgbUtleVN3aXRjaEd1YXJkRW5hYmxlZDsKKyAgICBUaW1lciAgICBtS2V5Um90YXRpb25UaW1lcjsKKworI2lmIE9QRU5USFJFQURfRlRECisgICAgdWludDhfdCBtUFNLY1trTWF4S2V5TGVuZ3RoXTsKKyNlbmRpZgorICAgIHVpbnQ4X3QgbUtla1trTWF4S2V5TGVuZ3RoXTsKKyAgICB1aW50MzJfdCBtS2VrRnJhbWVDb3VudGVyOworCisgICAgdWludDhfdCBtU2VjdXJpdHlQb2xpY3lGbGFnczsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBLRVlfTUFOQUdFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbGlua19xdWFsaXR5LmNwcCBiL3NyYy9jb3JlL3RocmVhZC9saW5rX3F1YWxpdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiY2RiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbGlua19xdWFsaXR5LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBsaW5rIHF1YWxpdHkgaW5mb3JtYXRpb24gcHJvY2Vzc2luZyBhbmQgc3RvcmFnZS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImxpbmtfcXVhbGl0eS5ocHAiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2VudW0KK3sKKyAgICBrRGVmYXVsdE5vaXNlRmxvb3IgPSAtMTAwLCAvLyBEZWZhdWx0IG5vaXNlIGZsb29yIHVzZWQgaWYgbm8gYXZlcmFnZSB2YWx1ZSBpcyBhdmFpbGFibGUuCit9OworCisvLyBUaGlzIGFycmF5IGdpdmVzIHRoZSBkZWNpbWFsIHBvaW50IGRpZ2l0cyByZXByZXNlbnRpbmcgMC84LCAxLzgsIC4uLiwgNy84IChpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSAnLicpLgorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtMaW5rUXVhbGl0eURlY2ltYWxEaWdpdHNTdHJpbmdbOF0gPQoreworICAgIC8vIDAvOCwgMS84LCAgIDIvOCwgICAzLzgsICAgNC84LCAgIDUvOCwgICA2LzgsICAgNy84CisgICAgIjAwMCIsICIxMjUiLCAiMjUwIiwgIjM3NSIsICI1MDAiLCAiNjI1IiwgIjc1MCIsICI4NzUiCit9OworCitjb25zdCBjaGFyIExpbmtRdWFsaXR5SW5mbzo6a1Vua25vd25Sc3NTdHJpbmdbXSA9ICJVbmtub3duIFJTUyI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW5rUXVhbGl0eUluZm86OkxpbmtRdWFsaXR5SW5mbyh2b2lkKQoreworICAgIENsZWFyKCk7Cit9CisKK3ZvaWQgTGlua1F1YWxpdHlJbmZvOjpDbGVhcih2b2lkKQoreworICAgIG1Sc3NBdmVyYWdlICA9IDA7CisgICAgbUNvdW50ICAgICAgID0gMDsKKyAgICBtTGlua1F1YWxpdHkgPSAwOworICAgIG1MYXN0UnNzICAgICA9IDA7Cit9CisKK3ZvaWQgTGlua1F1YWxpdHlJbmZvOjpBZGRSc3MoaW50OF90IGFOb2lzZUZsb29yLCBpbnQ4X3QgYVJzcykKK3sKKyAgICB1aW50MTZfdCAgICBuZXdWYWx1ZTsKKyAgICB1aW50MTZfdCAgICBvbGRBdmVyYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KGFSc3MgIT0gT1RfUkFESU9fUlNTSV9JTlZBTElEKTsKKworICAgIG1MYXN0UnNzID0gYVJzczsKKworICAgIC8vIFJlc3RyaWN0L0NhcCB0aGUgUlNTIHZhbHVlIHRvIHRoZSBjbG9zZWQgcmFuZ2UgWzAsIC0xMjhdIHNvIHRoZSB2YWx1ZSBjYW4gZml0IGluIDggYml0cy4KKworICAgIGlmIChhUnNzID4gMCkKKyAgICB7CisgICAgICAgIGFSc3MgPSAwOworICAgIH0KKworICAgIC8vIE11bHRpcGx5IHRoZSB0aGUgUlNTIHZhbHVlIGJ5IGEgcHJlY2lzaW9uIG11bHRpcGxlIChjdXJyZW50bHkgLTgpLgorCisgICAgbmV3VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oLWFSc3MpOworICAgIG5ld1ZhbHVlIDw8PSBrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlQml0U2hpZnQ7CisKKyAgICBvbGRBdmVyYWdlID0gbVJzc0F2ZXJhZ2U7CisKKyAgICBpZiAobUNvdW50ID49IGtSc3NDb3VudEZvcldlaWdodENvZWZmaWNpZW50T25lRWlnaHRoKQorICAgIHsKKyAgICAgICAgLy8gTmV3IGF2ZXJhZ2UgPSBvbGQgYXZlcmFnZSAqIDcvOCArIG5ldyB2YWx1ZSAqIDEvOAorICAgICAgICBtUnNzQXZlcmFnZSA9IHN0YXRpY19jYXN0PHVpbnQxNl90PigoKG9sZEF2ZXJhZ2UgPDwgMykgLSBvbGRBdmVyYWdlICsgbmV3VmFsdWUpID4+IDMpOworICAgIH0KKyAgICBlbHNlIGlmIChtQ291bnQgPj0ga1Jzc0NvdW50Rm9yV2VpZ2h0Q29lZmZpY2llbnRPbmVGb3VydGgpCisgICAgeworICAgICAgICAvLyBOZXcgYXZlcmFnZSA9IG9sZCBhdmVyYWdlICogMy80ICsgbmV3IHZhbHVlICogMS80CisgICAgICAgIG1Sc3NBdmVyYWdlID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KCgob2xkQXZlcmFnZSA8PCAyKSAtIG9sZEF2ZXJhZ2UgKyBuZXdWYWx1ZSkgPj4gMik7CisgICAgfQorICAgIGVsc2UgaWYgKG1Db3VudCA+PSBrUnNzQ291bnRGb3JXZWlnaHRDb2VmZmljaWVudE9uZUhhbGYpCisgICAgeworICAgICAgICAvLyBOZXcgYXZlcmFnZSA9IG9sZCBhdmVyYWdlICogMS8yICsgbmV3IHZhbHVlICogMS8yCisgICAgICAgIG1Sc3NBdmVyYWdlID0gKG9sZEF2ZXJhZ2UgKyBuZXdWYWx1ZSkgPj4gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJzc0F2ZXJhZ2UgPSBuZXdWYWx1ZTsKKyAgICB9CisKKyAgICBpZiAobUNvdW50IDwga1Jzc0NvdW50TWF4KQorICAgIHsKKyAgICAgICAgbUNvdW50Kys7CisgICAgfQorCisgICAgVXBkYXRlTGlua1F1YWxpdHkoYU5vaXNlRmxvb3IpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworaW50OF90IExpbmtRdWFsaXR5SW5mbzo6R2V0QXZlcmFnZVJzcyh2b2lkKSBjb25zdAoreworICAgIGludDhfdCBhdmVyYWdlID0gT1RfUkFESU9fUlNTSV9JTlZBTElEOworCisgICAgaWYgKG1Db3VudCAhPSAwKQorICAgIHsKKyAgICAgICAgYXZlcmFnZSA9IC1zdGF0aWNfY2FzdDxpbnQ4X3Q+KG1Sc3NBdmVyYWdlID4+IGtSc3NBdmVyYWdlUHJlY2lzaW9uTXVsdGlwbGVCaXRTaGlmdCk7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIHJvdW5kIHVwIChlLmcuIGF2ZXJhZ2Ugb2YgLTcxLjUgLS0+IC03MikKKworICAgICAgICBpZiAoKG1Sc3NBdmVyYWdlICYga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZUJpdE1hc2spID49IChrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlID4+IDEpKQorICAgICAgICB7CisgICAgICAgICAgICBhdmVyYWdlLS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYXZlcmFnZTsKK30KKwordWludDE2X3QgTGlua1F1YWxpdHlJbmZvOjpHZXRBdmVyYWdlUnNzQXNFbmNvZGVkV29yZCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtUnNzQXZlcmFnZTsKK30KKworb3RFcnJvciBMaW5rUXVhbGl0eUluZm86OkdldEF2ZXJhZ2VSc3NBc1N0cmluZyhjaGFyICphQ2hhckJ1ZmZlciwgc2l6ZV90IGFCdWZmZXJMZW4pIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgaW50IGNoYXJzV3JpdHRlbiA9IDA7CisKKyAgICBpZiAobUNvdW50ID09IDApCisgICAgeworICAgICAgICBjaGFyc1dyaXR0ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxjcHkoYUNoYXJCdWZmZXIsIGtVbmtub3duUnNzU3RyaW5nLCBhQnVmZmVyTGVuKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNoYXJzV3JpdHRlbiA9IHNucHJpbnRmKGFDaGFyQnVmZmVyLCBhQnVmZmVyTGVuLCAiJWQuJXMgZEJtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShtUnNzQXZlcmFnZSA+PiBrUnNzQXZlcmFnZVByZWNpc2lvbk11bHRpcGxlQml0U2hpZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTGlua1F1YWxpdHlEZWNpbWFsRGlnaXRzU3RyaW5nW21Sc3NBdmVyYWdlICYga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZUJpdE1hc2tdKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoY2hhcnNXcml0dGVuID49IDAsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBWZXJpZnlPckV4aXQoY2hhcnNXcml0dGVuIDwgc3RhdGljX2Nhc3Q8aW50PihhQnVmZmVyTGVuKSwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQ4X3QgTGlua1F1YWxpdHlJbmZvOjpHZXRMaW5rTWFyZ2luKGludDhfdCBhTm9pc2VGbG9vcikgY29uc3QKK3sKKyAgICByZXR1cm4gQ29udmVydFJzc1RvTGlua01hcmdpbihhTm9pc2VGbG9vciwgR2V0QXZlcmFnZVJzcygpKTsKK30KKwordWludDhfdCBMaW5rUXVhbGl0eUluZm86OkdldExpbmtRdWFsaXR5KGludDhfdCBhTm9pc2VGbG9vcikKK3sKKyAgICBVcGRhdGVMaW5rUXVhbGl0eShhTm9pc2VGbG9vcik7CisKKyAgICByZXR1cm4gbUxpbmtRdWFsaXR5OworfQorCitpbnQ4X3QgTGlua1F1YWxpdHlJbmZvOjpHZXRMYXN0UnNzKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1MYXN0UnNzOworfQorCit2b2lkIExpbmtRdWFsaXR5SW5mbzo6VXBkYXRlTGlua1F1YWxpdHkoaW50OF90IGFOb2lzZUZsb29yKQoreworICAgIGlmIChtQ291bnQgIT0gMCkKKyAgICB7CisgICAgICAgIG1MaW5rUXVhbGl0eSA9IENhbGN1bGF0ZUxpbmtRdWFsaXR5KEdldExpbmtNYXJnaW4oYU5vaXNlRmxvb3IpLCBtTGlua1F1YWxpdHkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtTGlua1F1YWxpdHkgPSBDYWxjdWxhdGVMaW5rUXVhbGl0eShHZXRMaW5rTWFyZ2luKGFOb2lzZUZsb29yKSwga05vTGFzdExpbmtRdWFsaXR5VmFsdWUpOworICAgIH0KK30KKwordWludDhfdCBMaW5rUXVhbGl0eUluZm86OkNvbnZlcnRSc3NUb0xpbmtNYXJnaW4oaW50OF90IGFOb2lzZUZsb29yLCBpbnQ4X3QgYVJzcykKK3sKKyAgICBpbnQ4X3QgbGlua01hcmdpbiA9IGFSc3MgLSBhTm9pc2VGbG9vcjsKKworICAgIGlmIChsaW5rTWFyZ2luIDwgMCB8fCBhUnNzID09IE9UX1JBRElPX1JTU0lfSU5WQUxJRCkKKyAgICB7CisgICAgICAgIGxpbmtNYXJnaW4gPSAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihsaW5rTWFyZ2luKTsKK30KKwordWludDhfdCBMaW5rUXVhbGl0eUluZm86OkNvbnZlcnRMaW5rTWFyZ2luVG9MaW5rUXVhbGl0eSh1aW50OF90IGFMaW5rTWFyZ2luKQoreworICAgIHJldHVybiBDYWxjdWxhdGVMaW5rUXVhbGl0eShhTGlua01hcmdpbiwga05vTGFzdExpbmtRdWFsaXR5VmFsdWUpOworfQorCit1aW50OF90IExpbmtRdWFsaXR5SW5mbzo6Q29udmVydFJzc1RvTGlua1F1YWxpdHkoaW50OF90IGFOb2lzZUZsb29yLCBpbnQ4X3QgYVJzcykKK3sKKyAgICByZXR1cm4gQ29udmVydExpbmtNYXJnaW5Ub0xpbmtRdWFsaXR5KENvbnZlcnRSc3NUb0xpbmtNYXJnaW4oYU5vaXNlRmxvb3IsIGFSc3MpKTsKK30KKwordWludDhfdCBMaW5rUXVhbGl0eUluZm86OkNhbGN1bGF0ZUxpbmtRdWFsaXR5KHVpbnQ4X3QgYUxpbmtNYXJnaW4sIHVpbnQ4X3QgYUxhc3RMaW5rUXVhbGl0eSkKK3sKKyAgICB1aW50OF90IHRocmVzaG9sZDEsIHRocmVzaG9sZDIsIHRocmVzaG9sZDM7CisgICAgdWludDhfdCBsaW5rUXVhbGl0eSA9IDA7CisKKyAgICB0aHJlc2hvbGQxID0ga0xpbmtNYXJnaW5UaHJlc2hvbGRGb3JMaW5rUXVhbGl0eTE7CisgICAgdGhyZXNob2xkMiA9IGtMaW5rTWFyZ2luVGhyZXNob2xkRm9yTGlua1F1YWxpdHkyOworICAgIHRocmVzaG9sZDMgPSBrTGlua01hcmdpblRocmVzaG9sZEZvckxpbmtRdWFsaXR5MzsKKworICAgIC8vIEFwcGx5IHRoZSBoeXN0ZXJlc2lzIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgbGFzdCBsaW5rIHF1YWxpdHkgdmFsdWUuCisKKyAgICBzd2l0Y2ggKGFMYXN0TGlua1F1YWxpdHkpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgICAgdGhyZXNob2xkMSArPSBrTGlua01hcmdpbkh5c3RlcmVzaXNUaHJlc2hvbGQ7CisKKyAgICAvLyBJbnRlbnRpb25hbCBmYWxsLXRocm91Z2ggdG8gbmV4dCBjYXNlLgorCisgICAgY2FzZSAxOgorICAgICAgICB0aHJlc2hvbGQyICs9IGtMaW5rTWFyZ2luSHlzdGVyZXNpc1RocmVzaG9sZDsKKworICAgIC8vIEludGVudGlvbmFsIGZhbGwtdGhyb3VnaCB0byBuZXh0IGNhc2UuCisKKyAgICBjYXNlIDI6CisgICAgICAgIHRocmVzaG9sZDMgKz0ga0xpbmtNYXJnaW5IeXN0ZXJlc2lzVGhyZXNob2xkOworCisgICAgLy8gSW50ZW50aW9uYWwgZmFsbC10aHJvdWdoIHRvIG5leHQgY2FzZS4KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChhTGlua01hcmdpbiA+IHRocmVzaG9sZDMpCisgICAgeworICAgICAgICBsaW5rUXVhbGl0eSA9IDM7CisgICAgfQorICAgIGVsc2UgaWYgKGFMaW5rTWFyZ2luID4gdGhyZXNob2xkMikKKyAgICB7CisgICAgICAgIGxpbmtRdWFsaXR5ID0gMjsKKyAgICB9CisgICAgZWxzZSBpZiAoYUxpbmtNYXJnaW4gPiB0aHJlc2hvbGQxKQorICAgIHsKKyAgICAgICAgbGlua1F1YWxpdHkgPSAxOworICAgIH0KKworICAgIHJldHVybiBsaW5rUXVhbGl0eTsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbGlua19xdWFsaXR5LmhwcCBiL3NyYy9jb3JlL3RocmVhZC9saW5rX3F1YWxpdHkuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMWQwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbGlua19xdWFsaXR5LmhwcApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHN0b3JpbmcgYW5kIHByb2Nlc3NpbmcgbGluayBxdWFsaXR5IGluZm9ybWF0aW9uLgorICovCisKKyNpZm5kZWYgTElOS19RVUFMSVRZX0hQUF8KKyNkZWZpbmUgTElOS19RVUFMSVRZX0hQUF8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhZGlvLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbGluay1xdWFsaXR5CisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUaHJlYWQgbGluayBxdWFsaXR5IG1ldHJpY3MuCisgKgorICogQHsKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgZW5jYXBzdWxhdGVzL3N0b3JlcyBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gYWJvdXQgcXVhbGl0eSBvZiBhIGxpbmssIGluY2x1ZGluZyBhdmVyYWdlIHJlY2VpdmVkIHNpZ25hbAorICogc3RyZW5ndGggKFJTUyksIGxpbmsgbWFyZ2luIGFuZCBsaW5rIHF1YWxpdHkgdmFsdWUgKHZhbHVlIGluIDAtMykuIFRoZSBhdmVyYWdlIGlzIG9idGFpbmVkIHVzaW5nIGFuIGFkYXB0aXZlCisgKiBleHBvbmVudGlhbCBtb3ZpbmcgYXZlcmFnZSBmaWx0ZXIuCisgKgorICAqLworY2xhc3MgTGlua1F1YWxpdHlJbmZvCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyBhbiBpbnN0YW5jZSBvZiB0aGUgTGlua1F1YWxpdHlJbmZvIGNsYXNzLgorICAgICAqCisgICAgICovCisgICAgTGlua1F1YWxpdHlJbmZvKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBhbGwgdGhlIGRhdGEgaW4gdGhpcyBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXIodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgbmV3IHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCAoUlNTKSB2YWx1ZSB0byB0aGUgYXZlcmFnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYU5vaXNlRmxvb3IgIFRoZSBub2lzZSBmbG9vciB2YWx1ZSAoaW4gZEJtKS4KKyAgICAgKiBAcGFyYW1baW5dIGFSc3MgICAgICAgICBBIG5ldyByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggdmFsdWUgKGluIGRCbSkgdG8gYmUgYWRkZWQgdG8gdGhlIGF2ZXJhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEFkZFJzcyhpbnQ4X3QgYU5vaXNlRmxvb3IsIGludDhfdCBhUnNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgYXZlcmFnZSBzaWduYWwgc3RyZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBhdmVyYWdlIHZhbHVlIG9yIEBjIE9UX1JBRElPX1JTU0lfSU5WQUxJRCBpZiBubyBhdmVyYWdlIGlzIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRBdmVyYWdlUnNzKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbmNvZGVkIHZlcnNpb24gb2YgY3VycmVudCBhdmVyYWdlIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZS4gVGhlIGVuY29kZWQgdmFsdWUgaXMgdGhlCisgICAgICogYXZlcmFnZSBtdWx0aXBsaWVkIGJ5IGEgcHJlY2lzaW9uIGZhY3RvciAoY3VycmVudGx5IC04KS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGF2ZXJhZ2UgbXVsdGlwbGllZCBieSBwcmVjaXNpb24gZmFjdG9yIG9yIHplcm8gaWYgbm8gYXZlcmFnZSBpcyBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRBdmVyYWdlUnNzQXNFbmNvZGVkV29yZCh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHRoZSBjdXJyZW50IGF2ZXJhZ2UgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIChSU1MpIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIChlLmcuLAorICAgICAqICItODAuMzc1IGRCbSIpLiBJZiB0aGUgYXZlcmFnZSBpcyB1bmtub3duLCAidW5rbm93biBSU1MiIGlzIHVzZWQvcmV0dXJuZWQgaW4gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFDaGFyQnVmZmVyICAgIEEgY2hhciBidWZmZXIgdG8gc3RvcmUgdGhlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbnQgYXZlcmFnZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhQnVmZmVyTGVuICAgICBUaGUgY2hhciBidWZmZXIgbGVuZ3RoLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGZvcm1lZCB0aGUgc3RyaW5nIGluIHRoZSBnaXZlbiBjaGFyIGJ1ZmZlci4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhdmVyYWdlIHZhbHVlIGNvdWxkIG5vdCBmaXQgaW4gdGhlIGdpdmVuIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0QXZlcmFnZVJzc0FzU3RyaW5nKGNoYXIgKmFDaGFyQnVmZmVyLCBzaXplX3QgYUJ1ZmZlckxlbikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsaW5rIG1hcmdpbi4gVGhlIGxpbmsgbWFyZ2luIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGxpbmsncyBjdXJyZW50IGF2ZXJhZ2UgcmVjZWl2ZWQKKyAgICAgKiBzaWduYWwgc3RyZW5ndGggKFJTUykgYW5kIGF2ZXJhZ2Ugbm9pc2UgZmxvb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTm9pc2VGbG9vciAgVGhlIG5vaXNlIGZsb29yIHZhbHVlIChpbiBkQm0pLgorICAgICAqCisgICAgICogQHJldHVybnMgTGluayBtYXJnaW4gZGVyaXZlZCBmcm9tIGF2ZXJhZ2UgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoIGFuZCBhdmVyYWdlIG5vaXNlIGZsb29yLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rTWFyZ2luKGludDhfdCBhTm9pc2VGbG9vcikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG9uZS13YXkgbGluayBxdWFsaXR5IHZhbHVlLiBUaGUgbGluayBxdWFsaXR5IHZhbHVlIGlzIGEgbnVtYmVyIDAtMy4KKyAgICAgKgorICAgICAqIFRoZSBsaW5rIHF1YWxpdHkgaXMgY2FsY3VsYXRlZCBieSBjb21wYXJpbmcgdGhlIGN1cnJlbnQgbGluayBtYXJnaW4gd2l0aCBhIHNldCBvZiB0aHJlc2hvbGRzIChwZXIgVGhyZWFkIHNwZWMpLgorICAgICAqIE1vcmUgc3BlY2lmaWNhbGx5LCBsaW5rIG1hcmdpbiA+IDIwIGRCIGdpdmVzIGxpbmsgcXVhbGl0eSAzLCBsaW5rIG1hcmdpbiA+IDEwIGRCIGdpdmVzIGxpbmsgcXVhbGl0eSAyLAorICAgICAqIGxpbmsgbWFyZ2luID4gMiBkQiBnaXZlcyBsaW5rIHF1YWxpdHkgMSwgYW5kIGxpbmsgbWFyZ2luIGJlbG93IG9yIGVxdWFsIHRvIDIgZEIgeWllbGRzIGxpbmsgcXVhbGl0eSBvZiAwLgorICAgICAqCisgICAgICogSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYSBsaW5rIG1hcmdpbiBuZWFyIHRoZSBib3VuZGFyeSBvZiB0d28gZGlmZmVyZW50IGxpbmsgcXVhbGl0eSB2YWx1ZXMgZG9lcyBub3QgY2F1c2UKKyAgICAgKiBmcmVxdWVudCBjaGFuZ2VzLCBhIGh5c3RlcmVzaXMgb2YgMiBkQiBpcyBhcHBsaWVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGxpbmsgcXVhbGl0eS4gRm9yIGV4YW1wbGUsIHRoZSBhdmVyYWdlCisgICAgICogbGluayBtYXJnaW4gbXVzdCBiZSBhdCBsZWFzdCAxMiBkQiB0byBjaGFuZ2UgYSBxdWFsaXR5IDEgbGluayB0byBhIHF1YWxpdHkgMiBsaW5rLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5vaXNlRmxvb3IgIFRoZSBub2lzZSBmbG9vciB2YWx1ZSAoaW4gZEJtKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGxpbmsgcXVhbGl0eSB2YWx1ZSAodmFsdWUgMC0zIGFzIHBlciBUaHJlYWQgc3BlY2lmaWNhdGlvbikuCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eShpbnQ4X3QgYU5vaXNlRmxvb3IpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgUlNTIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1vc3QgcmVjZW50IFJTUworICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldExhc3RSc3Modm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSB0byBhIGxpbmsgbWFyZ2luIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5vaXNlRmxvb3IgIFRoZSBub2lzZSBmbG9vciB2YWx1ZSAoaW4gZEJtKS4KKyAgICAgKiBAcGFyYW1baW5dICBhUnNzICAgICAgICAgVGhlIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAoaW4gZEJtKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsaW5rIG1hcmdpbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50OF90IENvbnZlcnRSc3NUb0xpbmtNYXJnaW4oaW50OF90IGFOb2lzZUZsb29yLCBpbnQ4X3QgYVJzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIGxpbmsgbWFyZ2luIHZhbHVlIHRvIGEgbGluayBxdWFsaXR5IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtNYXJnaW4gIFRoZSBMaW5rIE1hcmdpbiBpbiBkQi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsaW5rIHF1YWxpdHkgdmFsdWUgKDAtMykuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBDb252ZXJ0TGlua01hcmdpblRvTGlua1F1YWxpdHkodWludDhfdCBhTGlua01hcmdpbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb252ZXJ0cyBhIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSB0byBhIGxpbmsgcXVhbGl0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOb2lzZUZsb29yICBUaGUgbm9pc2UgZmxvb3IgdmFsdWUgKGluIGRCbSkuCisgICAgICogQHBhcmFtW2luXSAgYVJzcyAgICAgICAgIFRoZSByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggdmFsdWUgKGluIGRCbSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbGluayBxdWFsaXR5IHZhbHVlICgwLTMpLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQ4X3QgQ29udmVydFJzc1RvTGlua1F1YWxpdHkoaW50OF90IGFOb2lzZUZsb29yLCBpbnQ4X3QgYVJzcyk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAgLy8gQ29uc3RhbnRzIGZvciBvYnRhaW5pbmcgbGluayBxdWFsaXR5IGZyb20gbGluayBtYXJnaW46CisKKyAgICAgICAga0xpbmtNYXJnaW5UaHJlc2hvbGRGb3JMaW5rUXVhbGl0eTMgICAgPSAyMCwgICAvLyBMaW5rIG1hcmdpbiB0aHJlc2hvbGQgZm9yIHF1YWxpdHkgMyBsaW5rLgorICAgICAgICBrTGlua01hcmdpblRocmVzaG9sZEZvckxpbmtRdWFsaXR5MiAgICA9IDEwLCAgIC8vIExpbmsgbWFyZ2luIHRocmVzaG9sZCBmb3IgcXVhbGl0eSAyIGxpbmsuCisgICAgICAgIGtMaW5rTWFyZ2luVGhyZXNob2xkRm9yTGlua1F1YWxpdHkxICAgID0gMiwgICAgLy8gTGluayBtYXJnaW4gdGhyZXNob2xkIGZvciBxdWFsaXR5IDEgbGluay4KKyAgICAgICAga0xpbmtNYXJnaW5IeXN0ZXJlc2lzVGhyZXNob2xkICAgICAgICAgPSAyLCAgICAvLyBMaW5rIG1hcmdpbiBoeXN0ZXJlc2lzIHRocmVzaG9sZC4KKworICAgICAgICBrTm9MYXN0TGlua1F1YWxpdHlWYWx1ZSAgICAgICAgICAgICAgICA9IDB4ZmYsIC8vIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBwcmV2aW91cy9sYXN0IGxpbmsgcXVhbGl0eS4KKworICAgICAgICAvLyBDb25zdGFudHMgcmVsYXRlZCB0byBSU1MgYWRhcHRpdmUgZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2UgZmlsdGVyOgorCisgICAgICAgIGtSc3NBdmVyYWdlUHJlY2lzaW9uTXVsdGlwbGVCaXRTaGlmdCAgID0gMywgICAgLy8gUHJlY2lzaW9uIG11bHRpcGxlIGZvciBSU1MgYXZlcmFnZSAoMSA8PCBQcmVjaXNpb25CaXRTaGlmdCkuCisgICAgICAgIGtSc3NBdmVyYWdlUHJlY2lzaW9uTXVsdGlwbGUgICAgICAgICAgID0gKDEgPDwga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZUJpdFNoaWZ0KSwKKyAgICAgICAga1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZUJpdE1hc2sgICAgPSAoa1Jzc0F2ZXJhZ2VQcmVjaXNpb25NdWx0aXBsZSAtIDEpLAorCisgICAgICAgIGtSc3NDb3VudE1heCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNywgICAgLy8gbUNvdW50IG1heCBsaW1pdCB2YWx1ZS4KKworICAgICAgICBrUnNzQ291bnRGb3JXZWlnaHRDb2VmZmljaWVudE9uZUVpZ2h0aCA9IDUsICAgIC8vIG1Db3VudCB0aHJlc2hvbGQgdG8gdXNlIGF2ZXJhZ2Ugd2VpZ2h0IGNvZWZmaWNpZW50IG9mIDEvOC4KKyAgICAgICAga1Jzc0NvdW50Rm9yV2VpZ2h0Q29lZmZpY2llbnRPbmVGb3VydGggPSAyLCAgICAvLyBtQ291bnQgdGhyZXNob2xkIHRvIHVzZSBhdmVyYWdlIHdlaWdodCBjb2VmZmljaWVudCBvZiAxLzQuCisgICAgICAgIGtSc3NDb3VudEZvcldlaWdodENvZWZmaWNpZW50T25lSGFsZiAgID0gMSwgICAgLy8gbUNvdW50IHRocmVzaG9sZCB0byB1c2UgYXZlcmFnZSB3ZWlnaHQgY29lZmZpY2llbnQgb2YgMS8yLgorICAgIH07CisKKyAgICAvKiBQcml2YXRlIG1ldGhvZCB0byB1cGRhdGUgdGhlIG1MaW5rUXVhbGl0eSB2YWx1ZS4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIG5ldyBSU1MgdmFsdWUgaXMgYWRkZWQgdG8gYXZlcmFnZQorICAgICAqIG9yIHdoZW4gR2V0TGlua1F1YWxpdHkoKSBpcyBpbnZva2VkLgorICAgICAqLworICAgIHZvaWQgVXBkYXRlTGlua1F1YWxpdHkoaW50OF90IGFOb2lzZUZsb29yKTsKKworICAgIC8qIFN0YXRpYyBwcml2YXRlIG1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIGxpbmsgcXVhbGl0eSBmcm9tIGEgZ2l2ZW4gbGluayBtYXJnaW4gd2hpbGUgdGFraW5nIGludG8gYWNjb3VudCB0aGUgbGFzdAorICAgICAqIGxpbmsgcXVhbGl0eSB2YWx1ZSBhbmQgYWRkaW5nIHRoZSBoeXN0ZXJlc2lzIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGRzLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyB2YWx1ZSBmb3IgbGluaworICAgICAqIHF1YWxpdHksIHRoZSBjb25zdGFudCBrTm9MYXN0TGlua1F1YWxpdHlWYWx1ZSBzaG91bGQgYmUgcGFzc2VkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBDYWxjdWxhdGVMaW5rUXVhbGl0eSh1aW50OF90IGFMaW5rTWFyZ2luLCB1aW50OF90IGFMYXN0TGlua1F1YWxpdHkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIga1Vua25vd25Sc3NTdHJpbmdbXTsgICAgICAgICAgIC8vIENvbnN0YW50IHN0cmluZyB1c2VkIHdoZW4gUlNTIGF2ZXJhZ2UgaXMgdW5rbm93bi4KKworICAgIC8vIEFsbCBkYXRhIHNob3VsZCBmaXQgaW50byBhIDE2LWJpdCAodWludDE2X3QpIHZhbHVlLgorCisgICAgdWludDE2X3QgbVJzc0F2ZXJhZ2UgIDogMTE7ICAvLyBUaGUgZW5jb2RlZCBhdmVyYWdlIHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAoc3RvcmVkIGFzIHJzcyB0aW1lcyBwcmVjaXNpb24gbXVsdGlwbGUpLgorICAgIHVpbnQ4X3QgIG1Db3VudCAgICAgICA6IDM7ICAgLy8gTnVtYmVyIG9mIFJTUyB2YWx1ZXMgYWRkZWQgdG8gYXZlcmFnZSBzbyBmYXIgKGxpbWl0ZWQgdG8ga1Jzc0NvdW50TWF4KS4KKyAgICB1aW50OF90ICBtTGlua1F1YWxpdHkgOiAyOyAgIC8vIEN1cnJlbnQgbGluayBxdWFsaXR5IHZhbHVlICgwLTMpLgorICAgIGludDhfdCAgIG1MYXN0UnNzOworfTsKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gTElOS19RVUFMSVRZX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9sb3dwYW4uY3BwIGIvc3JjL2NvcmUvdGhyZWFkL2xvd3Bhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiYzcxOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9sb3dwYW4uY3BwCkBAIC0wLDAgKzEsMTE3OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyA2TG9XUEFOIGhlYWRlciBjb21wcmVzc2lvbi4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImxvd3Bhbi5ocHAiCisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIExvd3BhbiB7CisKK0xvd3Bhbjo6TG93cGFuKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpCit7Cit9CisKK290RXJyb3IgTG93cGFuOjpDb3B5Q29udGV4dChjb25zdCBDb250ZXh0ICZhQ29udGV4dCwgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBtZW1jcHkoJmFBZGRyZXNzLCBhQ29udGV4dC5tUHJlZml4LCBhQ29udGV4dC5tUHJlZml4TGVuZ3RoIC8gQ0hBUl9CSVQpOworCisgICAgZm9yIChpbnQgaSA9IChhQ29udGV4dC5tUHJlZml4TGVuZ3RoICYgfjcpOyBpIDwgYUNvbnRleHQubVByZWZpeExlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tOFtpIC8gQ0hBUl9CSVRdICY9IH4oMHg4MCA+PiAoaSAlIENIQVJfQklUKSk7CisgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubThbaSAvIENIQVJfQklUXSB8PSBhQ29udGV4dC5tUHJlZml4W2kgLyBDSEFSX0JJVF0gJiAoMHg4MCA+PiAoaSAlIENIQVJfQklUKSk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTG93cGFuOjpDb21wdXRlSWlkKGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0FkZHIsIGNvbnN0IENvbnRleHQgJmFDb250ZXh0LCBJcDY6OkFkZHJlc3MgJmFJcEFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBzd2l0Y2ggKGFNYWNBZGRyLm1MZW5ndGgpCisgICAgeworICAgIGNhc2UgMjoKKyAgICAgICAgYUlwQWRkcmVzcy5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICAgICAgYUlwQWRkcmVzcy5tRmllbGRzLm0xNls1XSA9IEhvc3RTd2FwMTYoMHgwMGZmKTsKKyAgICAgICAgYUlwQWRkcmVzcy5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHhmZTAwKTsKKyAgICAgICAgYUlwQWRkcmVzcy5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoYU1hY0FkZHIubVNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZToKKyAgICAgICAgYUlwQWRkcmVzcy5TZXRJaWQoYU1hY0FkZHIubUV4dEFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgaWYgKGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggPiA2NCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAoYUNvbnRleHQubVByZWZpeExlbmd0aCAmIH43KTsgaSA8IGFDb250ZXh0Lm1QcmVmaXhMZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYUlwQWRkcmVzcy5tRmllbGRzLm04W2kgLyBDSEFSX0JJVF0gJj0gfigweDgwID4+IChpICUgQ0hBUl9CSVQpKTsKKyAgICAgICAgICAgIGFJcEFkZHJlc3MubUZpZWxkcy5tOFtpIC8gQ0hBUl9CSVRdIHw9IGFDb250ZXh0Lm1QcmVmaXhbaSAvIENIQVJfQklUXSAmICgweDgwID4+IChpICUgQ0hBUl9CSVQpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2ludCBMb3dwYW46OkNvbXByZXNzU291cmNlSWlkKGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0FkZHIsIGNvbnN0IElwNjo6QWRkcmVzcyAmYUlwQWRkciwgY29uc3QgQ29udGV4dCAmYUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAmYUhjQ3RsLCB1aW50OF90ICphQnVmKQoreworICAgIHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgSXA2OjpBZGRyZXNzIGlwYWRkcjsKKyAgICBNYWM6OkFkZHJlc3MgdG1wOworCisgICAgQ29tcHV0ZUlpZChhTWFjQWRkciwgYUNvbnRleHQsIGlwYWRkcik7CisKKyAgICBpZiAobWVtY21wKGlwYWRkci5HZXRJaWQoKSwgYUlwQWRkci5HZXRJaWQoKSwgSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemUpID09IDApCisgICAgeworICAgICAgICBhSGNDdGwgfD0ga0hjU3JjQWRkck1vZGUzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0bXAubUxlbmd0aCA9IHNpemVvZih0bXAubVNob3J0QWRkcmVzcyk7CisgICAgICAgIHRtcC5tU2hvcnRBZGRyZXNzID0gSG9zdFN3YXAxNihhSXBBZGRyLm1GaWVsZHMubTE2WzddKTsKKyAgICAgICAgQ29tcHV0ZUlpZCh0bXAsIGFDb250ZXh0LCBpcGFkZHIpOworCisgICAgICAgIGlmIChtZW1jbXAoaXBhZGRyLkdldElpZCgpLCBhSXBBZGRyLkdldElpZCgpLCBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYUhjQ3RsIHw9IGtIY1NyY0FkZHJNb2RlMjsKKyAgICAgICAgICAgIGN1clswXSA9IGFJcEFkZHIubUZpZWxkcy5tOFsxNF07CisgICAgICAgICAgICBjdXJbMV0gPSBhSXBBZGRyLm1GaWVsZHMubThbMTVdOworICAgICAgICAgICAgY3VyICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhSGNDdGwgfD0ga0hjU3JjQWRkck1vZGUxOworICAgICAgICAgICAgbWVtY3B5KGN1ciwgYUlwQWRkci5HZXRJaWQoKSwgSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemUpOworICAgICAgICAgICAgY3VyICs9IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1Zik7Cit9CisKK2ludCBMb3dwYW46OkNvbXByZXNzRGVzdGluYXRpb25JaWQoY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjQWRkciwgY29uc3QgSXA2OjpBZGRyZXNzICZhSXBBZGRyLCBjb25zdCBDb250ZXh0ICZhQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgJmFIY0N0bCwgdWludDhfdCAqYUJ1ZikKK3sKKyAgICB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIElwNjo6QWRkcmVzcyBpcGFkZHI7CisgICAgTWFjOjpBZGRyZXNzIHRtcDsKKworICAgIENvbXB1dGVJaWQoYU1hY0FkZHIsIGFDb250ZXh0LCBpcGFkZHIpOworCisgICAgaWYgKG1lbWNtcChpcGFkZHIuR2V0SWlkKCksIGFJcEFkZHIuR2V0SWlkKCksIElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplKSA9PSAwKQorICAgIHsKKyAgICAgICAgYUhjQ3RsIHw9IGtIY0RzdEFkZHJNb2RlMzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdG1wLm1MZW5ndGggPSBzaXplb2YodG1wLm1TaG9ydEFkZHJlc3MpOworICAgICAgICB0bXAubVNob3J0QWRkcmVzcyA9IEhvc3RTd2FwMTYoYUlwQWRkci5tRmllbGRzLm0xNls3XSk7CisgICAgICAgIENvbXB1dGVJaWQodG1wLCBhQ29udGV4dCwgaXBhZGRyKTsKKworICAgICAgICBpZiAobWVtY21wKGlwYWRkci5HZXRJaWQoKSwgYUlwQWRkci5HZXRJaWQoKSwgSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFIY0N0bCB8PSBrSGNEc3RBZGRyTW9kZTI7CisgICAgICAgICAgICBjdXJbMF0gPSBhSXBBZGRyLm1GaWVsZHMubThbMTRdOworICAgICAgICAgICAgY3VyWzFdID0gYUlwQWRkci5tRmllbGRzLm04WzE1XTsKKyAgICAgICAgICAgIGN1ciArPSAyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYUhjQ3RsIHw9IGtIY0RzdEFkZHJNb2RlMTsKKyAgICAgICAgICAgIG1lbWNweShjdXIsIGFJcEFkZHIuR2V0SWlkKCksIElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplKTsKKyAgICAgICAgICAgIGN1ciArPSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpOworfQorCitpbnQgTG93cGFuOjpDb21wcmVzc011bHRpY2FzdChjb25zdCBJcDY6OkFkZHJlc3MgJmFJcEFkZHIsIHVpbnQxNl90ICZhSGNDdGwsIHVpbnQ4X3QgKmFCdWYpCit7CisgICAgTmV0d29ya0RhdGE6OkxlYWRlciAmbmV0d29ya0RhdGEgPSBHZXROZXRpZigpLkdldE5ldHdvcmtEYXRhTGVhZGVyKCk7CisgICAgdWludDhfdCAqY3VyID0gYUJ1ZjsKKyAgICBDb250ZXh0IG11bHRpY2FzdENvbnRleHQ7CisKKyAgICBhSGNDdGwgfD0ga0hjTXVsdGljYXN0OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDI7IGkgPCBzaXplb2YoSXA2OjpBZGRyZXNzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFJcEFkZHIubUZpZWxkcy5tOFtpXSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbXVsdGljYXN0IGFkZHJlc3MgY2FuIGJlIGNvbXByZXNzZWQgdG8gOC1iaXRzIChmZjAyOjowMHh4KQorICAgICAgICAgICAgaWYgKGFJcEFkZHIubUZpZWxkcy5tOFsxXSA9PSAweDAyICYmIGkgPj0gMTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYUhjQ3RsIHw9IGtIY0RzdEFkZHJNb2RlMzsKKyAgICAgICAgICAgICAgICBjdXJbMF0gPSBhSXBBZGRyLm1GaWVsZHMubThbMTVdOworICAgICAgICAgICAgICAgIGN1cisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbXVsdGljYXN0IGFkZHJlc3MgY2FuIGJlIGNvbXByZXNzZWQgdG8gMzItYml0cyAoZmZ4eDo6MDB4eDp4eHh4KQorICAgICAgICAgICAgZWxzZSBpZiAoaSA+PSAxMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhSGNDdGwgfD0ga0hjRHN0QWRkck1vZGUyOworICAgICAgICAgICAgICAgIGN1clswXSA9IGFJcEFkZHIubUZpZWxkcy5tOFsxXTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoY3VyICsgMSwgYUlwQWRkci5tRmllbGRzLm04ICsgMTMsIDMpOworICAgICAgICAgICAgICAgIGN1ciArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbXVsdGljYXN0IGFkZHJlc3MgY2FuIGJlIGNvbXByZXNzZWQgdG8gNDgtYml0cyAoZmZ4eDo6MDB4eDp4eHh4Onh4eHgpCisgICAgICAgICAgICBlbHNlIGlmIChpID49IDExKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFIY0N0bCB8PSBrSGNEc3RBZGRyTW9kZTE7CisgICAgICAgICAgICAgICAgY3VyWzBdID0gYUlwQWRkci5tRmllbGRzLm04WzFdOworICAgICAgICAgICAgICAgIG1lbWNweShjdXIgKyAxLCBhSXBBZGRyLm1GaWVsZHMubTggKyAxMSwgNSk7CisgICAgICAgICAgICAgICAgY3VyICs9IDY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbXVsdGljYXN0IGFkZHJlc3MgY2FuIGJlIGNvbXByZXNzZWQgdXNpbmcgQ29udGV4dCBJRCAwLgorICAgICAgICAgICAgICAgIGlmIChuZXR3b3JrRGF0YS5HZXRDb250ZXh0KDAsIG11bHRpY2FzdENvbnRleHQpID09IE9UX0VSUk9SX05PTkUgJiYKKyAgICAgICAgICAgICAgICAgICAgbXVsdGljYXN0Q29udGV4dC5tUHJlZml4TGVuZ3RoID09IGFJcEFkZHIubUZpZWxkcy5tOFszXSAmJgorICAgICAgICAgICAgICAgICAgICBtZW1jbXAobXVsdGljYXN0Q29udGV4dC5tUHJlZml4LCBhSXBBZGRyLm1GaWVsZHMubTggKyA0LCA4KSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYUhjQ3RsIHw9IGtIY0RzdEFkZHJDb250ZXh0IHwga0hjRHN0QWRkck1vZGUwOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3VyLCBhSXBBZGRyLm1GaWVsZHMubTggKyAxLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN1ciArIDIsIGFJcEFkZHIubUZpZWxkcy5tOCArIDEyLCA0KTsKKyAgICAgICAgICAgICAgICAgICAgY3VyICs9IDY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShjdXIsIGFJcEFkZHIubUZpZWxkcy5tOCwgc2l6ZW9mKElwNjo6QWRkcmVzcykpOworICAgICAgICAgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKElwNjo6QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpOworfQorCitpbnQgTG93cGFuOjpDb21wcmVzcyhNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LCB1aW50OF90ICphQnVmKQoreworICAgIE5ldHdvcmtEYXRhOjpMZWFkZXIgJm5ldHdvcmtEYXRhID0gR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpOworICAgIHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgdWludDE2X3QgaGNDdGwgPSAwOworICAgIElwNjo6SGVhZGVyIGlwNkhlYWRlcjsKKyAgICB1aW50OF90ICppcDZIZWFkZXJCeXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmaXA2SGVhZGVyKTsKKyAgICBDb250ZXh0IHNyY0NvbnRleHQsIGRzdENvbnRleHQ7CisgICAgYm9vbCBzcmNDb250ZXh0VmFsaWQgPSB0cnVlLCBkc3RDb250ZXh0VmFsaWQgPSB0cnVlOworICAgIHVpbnQ4X3QgbmV4dEhlYWRlcjsKKyAgICB1aW50OF90IGVjbiA9IDA7CisgICAgdWludDhfdCBkc2NwID0gMDsKKworICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihpcDZIZWFkZXIpLCAmaXA2SGVhZGVyKTsKKworICAgIGlmIChuZXR3b3JrRGF0YS5HZXRDb250ZXh0KGlwNkhlYWRlci5HZXRTb3VyY2UoKSwgc3JjQ29udGV4dCkgIT0gT1RfRVJST1JfTk9ORSB8fAorICAgICAgICBzcmNDb250ZXh0Lm1Db21wcmVzc0ZsYWcgPT0gZmFsc2UpCisgICAgeworICAgICAgICBuZXR3b3JrRGF0YS5HZXRDb250ZXh0KDAsIHNyY0NvbnRleHQpOworICAgICAgICBzcmNDb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobmV0d29ya0RhdGEuR2V0Q29udGV4dChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgZHN0Q29udGV4dCkgIT0gT1RfRVJST1JfTk9ORSB8fAorICAgICAgICBkc3RDb250ZXh0Lm1Db21wcmVzc0ZsYWcgPT0gZmFsc2UpCisgICAgeworICAgICAgICBuZXR3b3JrRGF0YS5HZXRDb250ZXh0KDAsIGRzdENvbnRleHQpOworICAgICAgICBkc3RDb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBoY0N0bCA9IGtIY0Rpc3BhdGNoOworCisgICAgLy8gTG93cGFuIEhDIENvbnRyb2wgQml0cworICAgIGN1ciArPSAyOworCisgICAgLy8gQ29udGV4dCBJZGVudGlmaWVyCisgICAgaWYgKHNyY0NvbnRleHQubUNvbnRleHRJZCAhPSAwIHx8IGRzdENvbnRleHQubUNvbnRleHRJZCAhPSAwKQorICAgIHsKKyAgICAgICAgaGNDdGwgfD0ga0hjQ29udGV4dElkOworICAgICAgICBjdXJbMF0gPSAoKHNyY0NvbnRleHQubUNvbnRleHRJZCA8PCA0KSB8IGRzdENvbnRleHQubUNvbnRleHRJZCkgJiAweGZmOworICAgICAgICBjdXIrKzsKKyAgICB9CisKKyAgICBkc2NwID0gKChpcDZIZWFkZXJCeXRlc1swXSA8PCAyKSAmIDB4M2MpIHwgKGlwNkhlYWRlckJ5dGVzWzFdID4+IDYpOworICAgIGVjbiA9IChpcDZIZWFkZXJCeXRlc1sxXSA8PCAyKSAmIDB4YzA7CisKKyAgICAvLyBGbG93IExhYmVsCisgICAgaWYgKCgoaXA2SGVhZGVyQnl0ZXNbMV0gJiAweDBmKSA9PSAwKSAmJiAoKGlwNkhlYWRlckJ5dGVzWzJdKSA9PSAwKSAmJiAoKGlwNkhlYWRlckJ5dGVzWzNdKSA9PSAwKSkKKyAgICB7CisgICAgICAgIGlmIChkc2NwID09IDAgJiYgZWNuID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVsaWRlIEZsb3cgTGFiZWwgYW5kIFRyYWZmaWMgQ2xhc3MuCisgICAgICAgICAgICBoY0N0bCB8PSBrSGNUcmFmZmljQ2xhc3MgfCBrSGNGbG93TGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFbGlkZSBGbG93IExhYmVsIGFuZCBjYXJyeSBUcmFmZmljIENsYXNzIGluLWxpbmUuCisgICAgICAgICAgICBoY0N0bCB8PSBrSGNGbG93TGFiZWw7CisKKyAgICAgICAgICAgIGN1clswXSA9IGVjbiB8IGRzY3A7CisgICAgICAgICAgICBjdXIrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChkc2NwID09IDApCisgICAgeworICAgICAgICAvLyBDYXJyeSBGbG93IExhYmVsIGFuZCBFQ04gb25seSB3aXRoIDItYml0IHBhZGRpbmcuCisgICAgICAgIGhjQ3RsIHw9IGtIY1RyYWZmaWNDbGFzczsKKworICAgICAgICBjdXJbMF0gPSBlY24gfCAoaXA2SGVhZGVyQnl0ZXNbMV0gJiAweDBmKTsKKyAgICAgICAgbWVtY3B5KGN1ciArIDEsIGlwNkhlYWRlckJ5dGVzICsgMiwgMik7CisgICAgICAgIGN1ciArPSAzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBDYXJyeSBGbG93IExhYmVsIGFuZCBUcmFmZmljIENsYXNzIGluLWxpbmUuCisgICAgICAgIGN1clswXSA9IGVjbiB8IGRzY3A7CisgICAgICAgIGN1clsxXSA9IGlwNkhlYWRlckJ5dGVzWzFdICYgMHgwZjsKKyAgICAgICAgbWVtY3B5KGN1ciArIDIsIGlwNkhlYWRlckJ5dGVzICsgMiwgMik7CisgICAgICAgIGN1ciArPSA0OworICAgIH0KKworICAgIC8vIE5leHQgSGVhZGVyCisgICAgc3dpdGNoIChpcDZIZWFkZXIuR2V0TmV4dEhlYWRlcigpKQorICAgIHsKKyAgICBjYXNlIElwNjo6a1Byb3RvSG9wT3B0czoKKyAgICBjYXNlIElwNjo6a1Byb3RvVWRwOgorICAgIGNhc2UgSXA2OjprUHJvdG9JcDY6CisgICAgICAgIGhjQ3RsIHw9IGtIY05leHRIZWFkZXI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgY3VyWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaXA2SGVhZGVyLkdldE5leHRIZWFkZXIoKSk7CisgICAgICAgIGN1cisrOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBIb3AgTGltaXQKKyAgICBzd2l0Y2ggKGlwNkhlYWRlci5HZXRIb3BMaW1pdCgpKQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGhjQ3RsIHw9IGtIY0hvcExpbWl0MTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDY0OgorICAgICAgICBoY0N0bCB8PSBrSGNIb3BMaW1pdDY0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjU1OgorICAgICAgICBoY0N0bCB8PSBrSGNIb3BMaW1pdDI1NTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBjdXJbMF0gPSBpcDZIZWFkZXIuR2V0SG9wTGltaXQoKTsKKyAgICAgICAgY3VyKys7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgaWYgKGlwNkhlYWRlci5HZXRTb3VyY2UoKS5Jc1Vuc3BlY2lmaWVkKCkpCisgICAgeworICAgICAgICBoY0N0bCB8PSBrSGNTcmNBZGRyQ29udGV4dDsKKyAgICB9CisgICAgZWxzZSBpZiAoaXA2SGVhZGVyLkdldFNvdXJjZSgpLklzTGlua0xvY2FsKCkpCisgICAgeworICAgICAgICBjdXIgKz0gQ29tcHJlc3NTb3VyY2VJaWQoYU1hY1NvdXJjZSwgaXA2SGVhZGVyLkdldFNvdXJjZSgpLCBzcmNDb250ZXh0LCBoY0N0bCwgY3VyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjQ29udGV4dFZhbGlkKQorICAgIHsKKyAgICAgICAgaGNDdGwgfD0ga0hjU3JjQWRkckNvbnRleHQ7CisgICAgICAgIGN1ciArPSBDb21wcmVzc1NvdXJjZUlpZChhTWFjU291cmNlLCBpcDZIZWFkZXIuR2V0U291cmNlKCksIHNyY0NvbnRleHQsIGhjQ3RsLCBjdXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZW1jcHkoY3VyLCBpcDZIZWFkZXIuR2V0U291cmNlKCkubUZpZWxkcy5tOCwgc2l6ZW9mKGlwNkhlYWRlci5HZXRTb3VyY2UoKSkpOworICAgICAgICBjdXIgKz0gc2l6ZW9mKElwNjo6QWRkcmVzcyk7CisgICAgfQorCisgICAgLy8gRGVzdGluYXRpb24gQWRkcmVzcworICAgIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgY3VyICs9IENvbXByZXNzTXVsdGljYXN0KGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBoY0N0bCwgY3VyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNMaW5rTG9jYWwoKSkKKyAgICB7CisgICAgICAgIGN1ciArPSBDb21wcmVzc0Rlc3RpbmF0aW9uSWlkKGFNYWNEZXN0LCBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgZHN0Q29udGV4dCwgaGNDdGwsIGN1cik7CisgICAgfQorICAgIGVsc2UgaWYgKGRzdENvbnRleHRWYWxpZCkKKyAgICB7CisgICAgICAgIGhjQ3RsIHw9IGtIY0RzdEFkZHJDb250ZXh0OworICAgICAgICBjdXIgKz0gQ29tcHJlc3NEZXN0aW5hdGlvbklpZChhTWFjRGVzdCwgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIGRzdENvbnRleHQsIGhjQ3RsLCBjdXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZW1jcHkoY3VyLCAmaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIHNpemVvZihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpOworICAgICAgICBjdXIgKz0gc2l6ZW9mKElwNjo6QWRkcmVzcyk7CisgICAgfQorCisgICAgYUJ1ZlswXSA9IGhjQ3RsID4+IDg7CisgICAgYUJ1ZlsxXSA9IGhjQ3RsICYgMHhmZjsKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZihpcDZIZWFkZXIpKTsKKworICAgIG5leHRIZWFkZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihpcDZIZWFkZXIuR2V0TmV4dEhlYWRlcigpKTsKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChuZXh0SGVhZGVyKQorICAgICAgICB7CisgICAgICAgIGNhc2UgSXA2OjprUHJvdG9Ib3BPcHRzOgorICAgICAgICAgICAgY3VyICs9IENvbXByZXNzRXh0ZW5zaW9uSGVhZGVyKGFNZXNzYWdlLCBjdXIsIG5leHRIZWFkZXIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJcDY6OmtQcm90b1VkcDoKKyAgICAgICAgICAgIGN1ciArPSBDb21wcmVzc1VkcChhTWVzc2FnZSwgY3VyKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKworICAgICAgICBjYXNlIElwNjo6a1Byb3RvSXA2OgorICAgICAgICAgICAgLy8gRm9yIElQLWluLUlQIHRoZSBOSCBiaXQgb2YgdGhlIExPV1BBTl9OSEMgZW5jb2RpbmcgTVVTVCBiZSBzZXQgdG8gemVyby4KKyAgICAgICAgICAgIGN1clswXSA9IGtFeHRIZHJEaXNwYXRjaCB8IGtFeHRIZHJFaWRJcDY7CisgICAgICAgICAgICBjdXIrKzsKKworICAgICAgICAgICAgY3VyICs9IENvbXByZXNzKGFNZXNzYWdlLCBhTWFjU291cmNlLCBhTWFjRGVzdCwgY3VyKTsKKworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpOworfQorCitpbnQgTG93cGFuOjpDb21wcmVzc0V4dGVuc2lvbkhlYWRlcihNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCAqYUJ1ZiwgdWludDhfdCAmYU5leHRIZWFkZXIpCit7CisgICAgSXA2OjpFeHRlbnNpb25IZWFkZXIgZXh0SGVhZGVyOworICAgIElwNjo6T3B0aW9uSGVhZGVyIG9wdGlvbkhlYWRlcjsKKyAgICB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIHVpbnQ4X3QgbGVuOworICAgIHVpbnQ4X3QgcGFkTGVuZ3RoID0gMDsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisKKyAgICBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoZXh0SGVhZGVyKSwgJmV4dEhlYWRlcik7CisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICBjdXJbMF0gPSBrRXh0SGRyRGlzcGF0Y2ggfCBrRXh0SGRyRWlkSGJoOworCisgICAgc3dpdGNoIChleHRIZWFkZXIuR2V0TmV4dEhlYWRlcigpKQorICAgIHsKKyAgICBjYXNlIElwNjo6a1Byb3RvVWRwOgorICAgIGNhc2UgSXA2OjprUHJvdG9JcDY6CisgICAgICAgIGN1clswXSB8PSBrRXh0SGRyTmV4dEhlYWRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBjdXIrKzsKKyAgICAgICAgY3VyWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZXh0SGVhZGVyLkdldE5leHRIZWFkZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGN1cisrOworCisgICAgbGVuID0gKGV4dEhlYWRlci5HZXRMZW5ndGgoKSArIDEpICogOCAtIHNpemVvZihleHRIZWFkZXIpOworCisgICAgLy8gUkZDIDYyODIgc2F5czogIklQdjYgSG9wLWJ5LUhvcCBhbmQgRGVzdGluYXRpb24gT3B0aW9ucyBIZWFkZXJzIG1heSB1c2UgYSB0cmFpbGluZworICAgIC8vIFBhZDEgb3IgUGFkTiB0byBhY2hpZXZlIDgtb2N0ZXQgYWxpZ25tZW50LiBXaGVuIHRoZXJlIGlzIGEgc2luZ2xlIHRyYWlsaW5nIFBhZDEgb3IgUGFkTgorICAgIC8vIG9wdGlvbiBvZiA3IG9jdGV0cyBvciBsZXNzIGFuZCB0aGUgY29udGFpbmluZyBoZWFkZXIgaXMgYSBtdWx0aXBsZSBvZiA4IG9jdGV0cywgdGhlIHRyYWlsaW5nCisgICAgLy8gUGFkMSBvciBQYWROIG9wdGlvbiBNQVkgYmUgZWxpZGVkIGJ5IHRoZSBjb21wcmVzc29yLiIKKyAgICBpZiAoYU5leHRIZWFkZXIgPT0gSXA2OjprUHJvdG9Ib3BPcHRzIHx8IGFOZXh0SGVhZGVyID09IElwNjo6a1Byb3RvRHN0T3B0cykKKyAgICB7CisgICAgICAgIG9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworCisgICAgICAgIHdoaWxlIChvZmZzZXQgPCBsZW4gKyBhTWVzc2FnZS5HZXRPZmZzZXQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihvcHRpb25IZWFkZXIpLCAmb3B0aW9uSGVhZGVyKTsKKworICAgICAgICAgICAgaWYgKG9wdGlvbkhlYWRlci5HZXRUeXBlKCkgPT0gSXA2OjpPcHRpb25QYWQxOjprVHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKElwNjo6T3B0aW9uUGFkMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihvcHRpb25IZWFkZXIpICsgb3B0aW9uSGVhZGVyLkdldExlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3Qgb3B0aW9uIGNhbiBiZSBjb21wcmVzc2VkLgorICAgICAgICBpZiAob3B0aW9uSGVhZGVyLkdldFR5cGUoKSA9PSBJcDY6Ok9wdGlvblBhZDE6OmtUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRMZW5ndGggPSBzaXplb2YoSXA2OjpPcHRpb25QYWQxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChvcHRpb25IZWFkZXIuR2V0VHlwZSgpID09IElwNjo6T3B0aW9uUGFkTjo6a1R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZExlbmd0aCA9IHNpemVvZihvcHRpb25IZWFkZXIpICsgb3B0aW9uSGVhZGVyLkdldExlbmd0aCgpOworICAgICAgICB9CisKKyAgICAgICAgbGVuIC09IHBhZExlbmd0aDsKKyAgICB9CisKKyAgICBhTmV4dEhlYWRlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGV4dEhlYWRlci5HZXROZXh0SGVhZGVyKCkpOworCisgICAgY3VyWzBdID0gbGVuOworICAgIGN1cisrOworCisgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgbGVuLCBjdXIpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQobGVuICsgcGFkTGVuZ3RoKTsKKyAgICBjdXIgKz0gbGVuOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY3VyIC0gYUJ1Zik7Cit9CisKK2ludCBMb3dwYW46OkNvbXByZXNzVWRwKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90ICphQnVmKQoreworICAgIElwNjo6VWRwSGVhZGVyIHVkcEhlYWRlcjsKKyAgICB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIHVpbnQ4X3QgKnVkcEN0bCA9IGN1cjsKKyAgICB1aW50MTZfdCBzb3VyY2U7CisgICAgdWludDE2X3QgZGVzdGluYXRpb247CisKKyAgICBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YodWRwSGVhZGVyKSwgJnVkcEhlYWRlcik7CisgICAgc291cmNlID0gdWRwSGVhZGVyLkdldFNvdXJjZVBvcnQoKTsKKyAgICBkZXN0aW5hdGlvbiA9IHVkcEhlYWRlci5HZXREZXN0aW5hdGlvblBvcnQoKTsKKworICAgIGN1clswXSA9IGtVZHBEaXNwYXRjaDsKKyAgICBjdXIrKzsKKworICAgIGlmICgoc291cmNlICYgMHhmZmYwKSA9PSAweGYwYjAgJiYgKGRlc3RpbmF0aW9uICYgMHhmZmYwKSA9PSAweGYwYjApCisgICAgeworICAgICAgICAqdWRwQ3RsIHw9IDM7CisgICAgICAgICpjdXIrKyA9ICgoKHNvdXJjZSAmIDB4ZikgPDwgNCkgfCAoZGVzdGluYXRpb24gJiAweGYpKSAmIDB4ZmY7CisgICAgfQorICAgIGVsc2UgaWYgKChzb3VyY2UgJiAweGZmMDApID09IDB4ZjAwMCkKKyAgICB7CisgICAgICAgICp1ZHBDdGwgfD0gMjsKKyAgICAgICAgKmN1cisrID0gc291cmNlICYgMHhmZjsKKyAgICAgICAgKmN1cisrID0gZGVzdGluYXRpb24gPj4gODsKKyAgICAgICAgKmN1cisrID0gZGVzdGluYXRpb24gJiAweGZmOworICAgIH0KKyAgICBlbHNlIGlmICgoZGVzdGluYXRpb24gJiAweGZmMDApID09IDB4ZjAwMCkKKyAgICB7CisgICAgICAgICp1ZHBDdGwgfD0gMTsKKyAgICAgICAgKmN1cisrID0gc291cmNlID4+IDg7CisgICAgICAgICpjdXIrKyA9IHNvdXJjZSAmIDB4ZmY7CisgICAgICAgICpjdXIrKyA9IGRlc3RpbmF0aW9uICYgMHhmZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtY3B5KGN1ciwgJnVkcEhlYWRlciwgSXA2OjpVZHBIZWFkZXI6OkdldExlbmd0aE9mZnNldCgpKTsKKyAgICAgICAgY3VyICs9IElwNjo6VWRwSGVhZGVyOjpHZXRMZW5ndGhPZmZzZXQoKTsKKyAgICB9CisKKyAgICBtZW1jcHkoY3VyLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnVkcEhlYWRlcikgKyBJcDY6OlVkcEhlYWRlcjo6R2V0Q2hlY2tzdW1PZmZzZXQoKSwgMik7CisgICAgY3VyICs9IDI7CisKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KHNpemVvZih1ZHBIZWFkZXIpKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpOworfQorCitvdEVycm9yIExvd3Bhbjo6RGlzcGF0Y2hUb05leHRIZWFkZXIodWludDhfdCBhRGlzcGF0Y2gsIElwNjo6SXBQcm90byAmYU5leHRIZWFkZXIpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoKGFEaXNwYXRjaCAmIGtFeHRIZHJEaXNwYXRjaE1hc2spID09IGtFeHRIZHJEaXNwYXRjaCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYURpc3BhdGNoICYga0V4dEhkckVpZE1hc2spCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrRXh0SGRyRWlkSGJoOgorICAgICAgICAgICAgYU5leHRIZWFkZXIgPSBJcDY6OmtQcm90b0hvcE9wdHM7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisKKyAgICAgICAgY2FzZSBrRXh0SGRyRWlkUm91dGluZzoKKyAgICAgICAgICAgIGFOZXh0SGVhZGVyID0gSXA2OjprUHJvdG9Sb3V0aW5nOworICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2Uga0V4dEhkckVpZEZyYWdtZW50OgorICAgICAgICAgICAgYU5leHRIZWFkZXIgPSBJcDY6OmtQcm90b0ZyYWdtZW50OworICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2Uga0V4dEhkckVpZERzdDoKKyAgICAgICAgICAgIGFOZXh0SGVhZGVyID0gSXA2OjprUHJvdG9Ec3RPcHRzOworICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2Uga0V4dEhkckVpZElwNjoKKyAgICAgICAgICAgIGFOZXh0SGVhZGVyID0gSXA2OjprUHJvdG9JcDY7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoKGFEaXNwYXRjaCAmIGtVZHBEaXNwYXRjaE1hc2spID09IGtVZHBEaXNwYXRjaCkKKyAgICB7CisgICAgICAgIGFOZXh0SGVhZGVyID0gSXA2OjprUHJvdG9VZHA7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworaW50IExvd3Bhbjo6RGVjb21wcmVzc0Jhc2VIZWFkZXIoSXA2OjpIZWFkZXIgJmlwNkhlYWRlciwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICBOZXR3b3JrRGF0YTo6TGVhZGVyICZuZXR3b3JrRGF0YSA9IEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfUEFSU0U7CisgICAgY29uc3QgdWludDhfdCAqY3VyID0gYUJ1ZjsKKyAgICB1aW50MTZfdCByZW1haW5pbmcgPSBhQnVmTGVuZ3RoOworICAgIHVpbnQxNl90IGhjQ3RsOworICAgIENvbnRleHQgc3JjQ29udGV4dCwgZHN0Q29udGV4dDsKKyAgICBib29sIHNyY0NvbnRleHRWYWxpZCA9IHRydWUsIGRzdENvbnRleHRWYWxpZCA9IHRydWU7CisgICAgSXA2OjpJcFByb3RvIG5leHRIZWFkZXI7CisgICAgdWludDhfdCAqYnl0ZXM7CisKKyAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDIpOworICAgIGhjQ3RsID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KChjdXJbMF0gPDwgOCkgfCBjdXJbMV0pOworICAgIGN1ciArPSAyOworICAgIHJlbWFpbmluZyAtPSAyOworCisgICAgLy8gY2hlY2sgRGlzcGF0Y2ggYml0cworICAgIFZlcmlmeU9yRXhpdCgoaGNDdGwgJiBrSGNEaXNwYXRjaE1hc2spID09IGtIY0Rpc3BhdGNoKTsKKworICAgIC8vIENvbnRleHQgSWRlbnRpZmllcgorICAgIHNyY0NvbnRleHQubVByZWZpeExlbmd0aCA9IDA7CisgICAgZHN0Q29udGV4dC5tUHJlZml4TGVuZ3RoID0gMDsKKworICAgIGlmICgoaGNDdGwgJiBrSGNDb250ZXh0SWQpICE9IDApCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworCisgICAgICAgIGlmIChuZXR3b3JrRGF0YS5HZXRDb250ZXh0KGN1clswXSA+PiA0LCBzcmNDb250ZXh0KSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNDb250ZXh0VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXR3b3JrRGF0YS5HZXRDb250ZXh0KGN1clswXSAmIDB4ZiwgZHN0Q29udGV4dCkgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0Q29udGV4dFZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjdXIrKzsKKyAgICAgICAgcmVtYWluaW5nLS07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ldHdvcmtEYXRhLkdldENvbnRleHQoMCwgc3JjQ29udGV4dCk7CisgICAgICAgIG5ldHdvcmtEYXRhLkdldENvbnRleHQoMCwgZHN0Q29udGV4dCk7CisgICAgfQorCisgICAgbWVtc2V0KCZpcDZIZWFkZXIsIDAsIHNpemVvZihpcDZIZWFkZXIpKTsKKyAgICBpcDZIZWFkZXIuSW5pdCgpOworCisgICAgLy8gVHJhZmZpYyBDbGFzcyBhbmQgRmxvdyBMYWJlbAorICAgIGlmICgoaGNDdGwgJiBrSGNUcmFmZmljRmxvd01hc2spICE9IGtIY1RyYWZmaWNGbG93KQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAxKTsKKworICAgICAgICBieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmaXA2SGVhZGVyKTsKKyAgICAgICAgYnl0ZXNbMV0gfD0gKGN1clswXSAmIDB4YzApID4+IDI7CisKKyAgICAgICAgaWYgKChoY0N0bCAmIGtIY1RyYWZmaWNDbGFzcykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZXNbMF0gfD0gKGN1clswXSA+PiAyKSAmIDB4MGY7CisgICAgICAgICAgICBieXRlc1sxXSB8PSAoY3VyWzBdIDw8IDYpICYgMHhjMDsKKyAgICAgICAgICAgIGN1cisrOworICAgICAgICAgICAgcmVtYWluaW5nLS07CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGhjQ3RsICYga0hjRmxvd0xhYmVsKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDMpOworICAgICAgICAgICAgYnl0ZXNbMV0gfD0gY3VyWzBdICYgMHgwZjsKKyAgICAgICAgICAgIGJ5dGVzWzJdIHw9IGN1clsxXTsKKyAgICAgICAgICAgIGJ5dGVzWzNdIHw9IGN1clsyXTsKKyAgICAgICAgICAgIGN1ciArPSAzOworICAgICAgICAgICAgcmVtYWluaW5nIC09IDM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOZXh0IEhlYWRlcgorICAgIGlmICgoaGNDdGwgJiBrSGNOZXh0SGVhZGVyKSA9PSAwKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAxKTsKKyAgICAgICAgaXA2SGVhZGVyLlNldE5leHRIZWFkZXIoc3RhdGljX2Nhc3Q8SXA2OjpJcFByb3RvPihjdXJbMF0pKTsKKyAgICAgICAgY3VyKys7CisgICAgICAgIHJlbWFpbmluZy0tOworICAgIH0KKworICAgIC8vIEhvcCBMaW1pdAorICAgIHN3aXRjaCAoaGNDdGwgJiBrSGNIb3BMaW1pdE1hc2spCisgICAgeworICAgIGNhc2Uga0hjSG9wTGltaXQxOgorICAgICAgICBpcDZIZWFkZXIuU2V0SG9wTGltaXQoMSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrSGNIb3BMaW1pdDY0OgorICAgICAgICBpcDZIZWFkZXIuU2V0SG9wTGltaXQoNjQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0hjSG9wTGltaXQyNTU6CisgICAgICAgIGlwNkhlYWRlci5TZXRIb3BMaW1pdCgyNTUpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisgICAgICAgIGlwNkhlYWRlci5TZXRIb3BMaW1pdChjdXJbMF0pOworICAgICAgICBjdXIrKzsKKyAgICAgICAgcmVtYWluaW5nLS07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgc3dpdGNoIChoY0N0bCAmIGtIY1NyY0FkZHJNb2RlTWFzaykKKyAgICB7CisgICAgY2FzZSBrSGNTcmNBZGRyTW9kZTA6CisgICAgICAgIGlmICgoaGNDdGwgJiBrSGNTcmNBZGRyQ29udGV4dCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisgICAgICAgICAgICBtZW1jcHkoJmlwNkhlYWRlci5HZXRTb3VyY2UoKSwgY3VyLCBzaXplb2YoaXA2SGVhZGVyLkdldFNvdXJjZSgpKSk7CisgICAgICAgICAgICBjdXIgKz0gc2l6ZW9mKElwNjo6QWRkcmVzcyk7CisgICAgICAgICAgICByZW1haW5pbmcgLT0gc2l6ZW9mKElwNjo6QWRkcmVzcyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0hjU3JjQWRkck1vZGUxOgorICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IElwNjo6QWRkcmVzczo6a0ludGVyZmFjZUlkZW50aWZpZXJTaXplKTsKKyAgICAgICAgaXA2SGVhZGVyLkdldFNvdXJjZSgpLlNldElpZChjdXIpOworICAgICAgICBjdXIgKz0gSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemU7CisgICAgICAgIHJlbWFpbmluZyAtPSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtIY1NyY0FkZHJNb2RlMjoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAyKTsKKyAgICAgICAgaXA2SGVhZGVyLkdldFNvdXJjZSgpLm1GaWVsZHMubThbMTFdID0gMHhmZjsKKyAgICAgICAgaXA2SGVhZGVyLkdldFNvdXJjZSgpLm1GaWVsZHMubThbMTJdID0gMHhmZTsKKyAgICAgICAgbWVtY3B5KGlwNkhlYWRlci5HZXRTb3VyY2UoKS5tRmllbGRzLm04ICsgMTQsIGN1ciwgMik7CisgICAgICAgIGN1ciArPSAyOworICAgICAgICByZW1haW5pbmcgLT0gMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtIY1NyY0FkZHJNb2RlMzoKKyAgICAgICAgQ29tcHV0ZUlpZChhTWFjU291cmNlLCBzcmNDb250ZXh0LCBpcDZIZWFkZXIuR2V0U291cmNlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoKGhjQ3RsICYga0hjU3JjQWRkck1vZGVNYXNrKSAhPSBrSGNTcmNBZGRyTW9kZTApCisgICAgeworICAgICAgICBpZiAoKGhjQ3RsICYga0hjU3JjQWRkckNvbnRleHQpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlwNkhlYWRlci5HZXRTb3VyY2UoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChzcmNDb250ZXh0VmFsaWQpOworICAgICAgICAgICAgQ29weUNvbnRleHQoc3JjQ29udGV4dCwgaXA2SGVhZGVyLkdldFNvdXJjZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoaGNDdGwgJiBrSGNNdWx0aWNhc3QpID09IDApCisgICAgeworICAgICAgICAvLyBVbmljYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MKKworICAgICAgICBzd2l0Y2ggKGhjQ3RsICYga0hjRHN0QWRkck1vZGVNYXNrKQorICAgICAgICB7CisgICAgICAgIGNhc2Uga0hjRHN0QWRkck1vZGUwOgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChoY0N0bCAmIGtIY0RzdEFkZHJDb250ZXh0KSA9PSAwKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gc2l6ZW9mKElwNjo6QWRkcmVzcykpOworICAgICAgICAgICAgbWVtY3B5KCZpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgY3VyLCBzaXplb2YoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKTsKKyAgICAgICAgICAgIGN1ciArPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0hjRHN0QWRkck1vZGUxOgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZSk7CisgICAgICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5TZXRJaWQoY3VyKTsKKyAgICAgICAgICAgIGN1ciArPSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSBJcDY6OkFkZHJlc3M6OmtJbnRlcmZhY2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0hjRHN0QWRkck1vZGUyOgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAyKTsKKyAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbMTFdID0gMHhmZjsKKyAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbMTJdID0gMHhmZTsKKyAgICAgICAgICAgIG1lbWNweShpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04ICsgMTQsIGN1ciwgMik7CisgICAgICAgICAgICBjdXIgKz0gMjsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTM6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KENvbXB1dGVJaWQoYU1hY0Rlc3QsIGRzdENvbnRleHQsIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoaGNDdGwgJiBrSGNEc3RBZGRyQ29udGV4dCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChoY0N0bCAmIGtIY0RzdEFkZHJNb2RlTWFzaykgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChkc3RDb250ZXh0VmFsaWQpOworICAgICAgICAgICAgQ29weUNvbnRleHQoZHN0Q29udGV4dCwgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE11bHRpY2FzdCBEZXN0aW5hdGlvbiBBZGRyZXNzCisKKyAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFswXSA9IDB4ZmY7CisKKyAgICAgICAgaWYgKChoY0N0bCAmIGtIY0RzdEFkZHJDb250ZXh0KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGhjQ3RsICYga0hjRHN0QWRkck1vZGVNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTA6CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubTgsIGN1ciwgc2l6ZW9mKElwNjo6QWRkcmVzcykpOworICAgICAgICAgICAgICAgIGN1ciArPSBzaXplb2YoSXA2OjpBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmcgLT0gc2l6ZW9mKElwNjo6QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Uga0hjRHN0QWRkck1vZGUxOgorICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gNik7CisgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsxXSA9IGN1clswXTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOCArIDExLCBjdXIgKyAxLCA1KTsKKyAgICAgICAgICAgICAgICBjdXIgKz0gNjsKKyAgICAgICAgICAgICAgICByZW1haW5pbmcgLT0gNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBrSGNEc3RBZGRyTW9kZTI6CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSA0KTsKKyAgICAgICAgICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04WzFdID0gY3VyWzBdOworICAgICAgICAgICAgICAgIG1lbWNweShpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04ICsgMTMsIGN1ciArIDEsIDMpOworICAgICAgICAgICAgICAgIGN1ciArPSA0OworICAgICAgICAgICAgICAgIHJlbWFpbmluZyAtPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIGtIY0RzdEFkZHJNb2RlMzoKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbMV0gPSAweDAyOworICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbMTVdID0gY3VyWzBdOworICAgICAgICAgICAgICAgIGN1cisrOworICAgICAgICAgICAgICAgIHJlbWFpbmluZy0tOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChoY0N0bCAmIGtIY0RzdEFkZHJNb2RlTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDYpOworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChkc3RDb250ZXh0VmFsaWQpOworICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLm1GaWVsZHMubThbMV0gPSBjdXJbMF07CisgICAgICAgICAgICAgICAgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOFsyXSA9IGN1clsxXTsKKyAgICAgICAgICAgICAgICBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04WzNdID0gZHN0Q29udGV4dC5tUHJlZml4TGVuZ3RoOworICAgICAgICAgICAgICAgIG1lbWNweShpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5tRmllbGRzLm04ICsgNCwgZHN0Q29udGV4dC5tUHJlZml4LCA4KTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tOCArIDEyLCBjdXIgKyAyLCA0KTsKKyAgICAgICAgICAgICAgICBjdXIgKz0gNjsKKyAgICAgICAgICAgICAgICByZW1haW5pbmcgLT0gNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGhjQ3RsICYga0hjTmV4dEhlYWRlcikgIT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoRGlzcGF0Y2hUb05leHRIZWFkZXIoY3VyWzBdLCBuZXh0SGVhZGVyKSk7CisgICAgICAgIGlwNkhlYWRlci5TZXROZXh0SGVhZGVyKG5leHRIZWFkZXIpOworICAgIH0KKworICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworZXhpdDoKKyAgICByZXR1cm4gKGVycm9yID09IE9UX0VSUk9SX05PTkUpID8gc3RhdGljX2Nhc3Q8aW50PihjdXIgLSBhQnVmKSA6IC0xOworfQorCitpbnQgTG93cGFuOjpEZWNvbXByZXNzRXh0ZW5zaW9uSGVhZGVyKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKyAgICBjb25zdCB1aW50OF90ICpjdXIgPSBhQnVmOworICAgIHVpbnQxNl90IHJlbWFpbmluZyA9IGFCdWZMZW5ndGg7CisgICAgdWludDhfdCBoZHJbMl07CisgICAgdWludDhfdCBsZW47CisgICAgSXA2OjpJcFByb3RvIG5leHRIZWFkZXI7CisgICAgdWludDhfdCBjdGwgPSBjdXJbMF07CisgICAgdWludDhfdCBwYWRMZW5ndGg7CisgICAgSXA2OjpPcHRpb25QYWQxIG9wdGlvblBhZDE7CisgICAgSXA2OjpPcHRpb25QYWROIG9wdGlvblBhZE47CisKKyAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworICAgIGN1cisrOworICAgIHJlbWFpbmluZy0tOworCisgICAgLy8gbmV4dCBoZWFkZXIKKyAgICBpZiAoY3RsICYga0V4dEhkck5leHRIZWFkZXIpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworCisgICAgICAgIGxlbiA9IGN1clswXTsKKyAgICAgICAgY3VyKys7CisgICAgICAgIHJlbWFpbmluZy0tOworCisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gbGVuKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChEaXNwYXRjaFRvTmV4dEhlYWRlcihjdXJbbGVuXSwgbmV4dEhlYWRlcikpOworICAgICAgICBoZHJbMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihuZXh0SGVhZGVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAyKTsKKworICAgICAgICBoZHJbMF0gPSBjdXJbMF07CisgICAgICAgIGxlbiA9IGN1clsxXTsKKyAgICAgICAgY3VyICs9IDI7CisgICAgICAgIHJlbWFpbmluZyAtPSAyOworCisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gbGVuKTsKKyAgICB9CisKKyAgICAvLyBsZW5ndGgKKyAgICBoZHJbMV0gPSBCaXRWZWN0b3JCeXRlcyhzaXplb2YoaGRyKSArIGxlbikgLSAxOworCisgICAgU3VjY2Vzc09yRXhpdChhTWVzc2FnZS5BcHBlbmQoaGRyLCBzaXplb2YoaGRyKSkpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGhkcikpOworCisgICAgLy8gcGF5bG9hZAorICAgIFN1Y2Nlc3NPckV4aXQoYU1lc3NhZ2UuQXBwZW5kKGN1ciwgbGVuKSk7CisgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChsZW4pOworICAgIGN1ciArPSBsZW47CisKKyAgICAvLyBUaGUgUkZDNjI4MiBzYXlzOiAiVGhlIHRyYWlsaW5nIFBhZDEgb3IgUGFkTiBvcHRpb24gTUFZIGJlIGVsaWRlZCBieSB0aGUgY29tcHJlc3Nvci4KKyAgICAvLyBBIGRlY29tcHJlc3NvciBNVVNUIGVuc3VyZSB0aGF0IHRoZSBjb250YWluaW5nIGhlYWRlciBpcyBwYWRkZWQgb3V0IHRvIGEgbXVsdGlwbGUgb2YgOCBvY3RldHMKKyAgICAvLyBpbiBsZW5ndGgsIHVzaW5nIGEgUGFkMSBvciBQYWROIG9wdGlvbiBpZiBuZWNlc3NhcnkuIgorICAgIHBhZExlbmd0aCA9IDggLSAoKGxlbiArIHNpemVvZihoZHIpKSAmIDB4MDcpOworCisgICAgaWYgKHBhZExlbmd0aCAhPSA4KQorICAgIHsKKyAgICAgICAgaWYgKHBhZExlbmd0aCA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25QYWQxLkluaXQoKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoYU1lc3NhZ2UuQXBwZW5kKCZvcHRpb25QYWQxLCBwYWRMZW5ndGgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvblBhZE4uSW5pdChwYWRMZW5ndGgpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChhTWVzc2FnZS5BcHBlbmQoJm9wdGlvblBhZE4sIHBhZExlbmd0aCkpOworICAgICAgICB9CisKKyAgICAgICAgYU1lc3NhZ2UuTW92ZU9mZnNldChwYWRMZW5ndGgpOworICAgIH0KKworICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworZXhpdDoKKyAgICByZXR1cm4gKGVycm9yID09IE9UX0VSUk9SX05PTkUpID8gc3RhdGljX2Nhc3Q8aW50PihjdXIgLSBhQnVmKSA6IC0xOworfQorCitpbnQgTG93cGFuOjpEZWNvbXByZXNzVWRwSGVhZGVyKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoLCB1aW50MTZfdCBhRGF0YWdyYW1MZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX1BBUlNFOworICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IGFCdWY7CisgICAgdWludDE2X3QgcmVtYWluaW5nID0gYUJ1Zkxlbmd0aDsKKyAgICBJcDY6OlVkcEhlYWRlciB1ZHBIZWFkZXI7CisgICAgdWludDhfdCB1ZHBDdGw7CisKKyAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworICAgIHVkcEN0bCA9IGN1clswXTsKKyAgICBjdXIrKzsKKyAgICByZW1haW5pbmctLTsKKworICAgIG1lbXNldCgmdWRwSGVhZGVyLCAwLCBzaXplb2YodWRwSGVhZGVyKSk7CisKKyAgICAvLyBzb3VyY2UgYW5kIGRlc3QgcG9ydHMKKyAgICBzd2l0Y2ggKHVkcEN0bCAmIGtVZHBQb3J0TWFzaykKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDQpOworICAgICAgICB1ZHBIZWFkZXIuU2V0U291cmNlUG9ydChzdGF0aWNfY2FzdDx1aW50MTZfdD4oKGN1clswXSA8PCA4KSB8IGN1clsxXSkpOworICAgICAgICB1ZHBIZWFkZXIuU2V0RGVzdGluYXRpb25Qb3J0KHN0YXRpY19jYXN0PHVpbnQxNl90PigoY3VyWzJdIDw8IDgpIHwgY3VyWzNdKSk7CisgICAgICAgIGN1ciArPSA0OworICAgICAgICByZW1haW5pbmcgLT0gNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMyk7CisgICAgICAgIHVkcEhlYWRlci5TZXRTb3VyY2VQb3J0KHN0YXRpY19jYXN0PHVpbnQxNl90PigoY3VyWzBdIDw8IDgpIHwgY3VyWzFdKSk7CisgICAgICAgIHVkcEhlYWRlci5TZXREZXN0aW5hdGlvblBvcnQoMHhmMDAwIHwgY3VyWzJdKTsKKyAgICAgICAgY3VyICs9IDM7CisgICAgICAgIHJlbWFpbmluZyAtPSAzOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAzKTsKKyAgICAgICAgdWRwSGVhZGVyLlNldFNvdXJjZVBvcnQoMHhmMDAwIHwgY3VyWzBdKTsKKyAgICAgICAgdWRwSGVhZGVyLlNldERlc3RpbmF0aW9uUG9ydChzdGF0aWNfY2FzdDx1aW50MTZfdD4oKGN1clsxXSA8PCA4KSB8IGN1clsyXSkpOworICAgICAgICBjdXIgKz0gMzsKKyAgICAgICAgcmVtYWluaW5nIC09IDM7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworICAgICAgICB1ZHBIZWFkZXIuU2V0U291cmNlUG9ydCgweGYwYjAgfCAoY3VyWzBdID4+IDQpKTsKKyAgICAgICAgdWRwSGVhZGVyLlNldERlc3RpbmF0aW9uUG9ydCgweGYwYjAgfCAoY3VyWzBdICYgMHhmKSk7CisgICAgICAgIGN1ciArPSAxOworICAgICAgICByZW1haW5pbmcgLT0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gY2hlY2tzdW0KKyAgICBpZiAoKHVkcEN0bCAmIGtVZHBDaGVja3N1bSkgIT0gMCkKKyAgICB7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJlbWFpbmluZyA+PSAyKTsKKyAgICAgICAgdWRwSGVhZGVyLlNldENoZWNrc3VtKHN0YXRpY19jYXN0PHVpbnQxNl90PigoY3VyWzBdIDw8IDgpIHwgY3VyWzFdKSk7CisgICAgICAgIGN1ciArPSAyOworICAgIH0KKworICAgIC8vIGxlbmd0aAorICAgIGlmIChhRGF0YWdyYW1MZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIHVkcEhlYWRlci5TZXRMZW5ndGgoc2l6ZW9mKHVkcEhlYWRlcikgKyBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYUJ1Zkxlbmd0aCAtIChjdXIgLSBhQnVmKSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1ZHBIZWFkZXIuU2V0TGVuZ3RoKGFEYXRhZ3JhbUxlbmd0aCAtIGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGFNZXNzYWdlLkFwcGVuZCgmdWRwSGVhZGVyLCBzaXplb2YodWRwSGVhZGVyKSkpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKHVkcEhlYWRlcikpOworCisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkgPyBzdGF0aWNfY2FzdDxpbnQ+KGN1ciAtIGFCdWYpIDogLTE7Cit9CisKK2ludCBMb3dwYW46OkRlY29tcHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCwgdWludDE2X3QgYURhdGFncmFtTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKyAgICBJcDY6OkhlYWRlciBpcDZIZWFkZXI7CisgICAgY29uc3QgdWludDhfdCAqY3VyID0gYUJ1ZjsKKyAgICB1aW50MTZfdCByZW1haW5pbmcgPSBhQnVmTGVuZ3RoOworICAgIGJvb2wgY29tcHJlc3NlZDsKKyAgICBpbnQgcnZhbDsKKyAgICB1aW50MTZfdCBpcDZQYXlsb2FkTGVuZ3RoOworICAgIHVpbnQxNl90IGNvbXByZXNzZWRMZW5ndGggPSAwOworICAgIHVpbnQxNl90IGN1cnJlbnRPZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKworICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gMik7CisgICAgY29tcHJlc3NlZCA9ICgoKHN0YXRpY19jYXN0PHVpbnQxNl90PihjdXJbMF0pIDw8IDgpIHwgY3VyWzFdKSAmIGtIY05leHRIZWFkZXIpICE9IDA7CisKKyAgICBWZXJpZnlPckV4aXQoKHJ2YWwgPSBEZWNvbXByZXNzQmFzZUhlYWRlcihpcDZIZWFkZXIsIGFNYWNTb3VyY2UsIGFNYWNEZXN0LCBjdXIsIHJlbWFpbmluZykpID49IDApOworCisgICAgY3VyICs9IHJ2YWw7CisgICAgcmVtYWluaW5nIC09IHJ2YWw7CisKKyAgICBTdWNjZXNzT3JFeGl0KGFNZXNzYWdlLkFwcGVuZCgmaXA2SGVhZGVyLCBzaXplb2YoaXA2SGVhZGVyKSkpOworICAgIFN1Y2Nlc3NPckV4aXQoYU1lc3NhZ2UuTW92ZU9mZnNldChzaXplb2YoaXA2SGVhZGVyKSkpOworCisgICAgd2hpbGUgKGNvbXByZXNzZWQpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmVtYWluaW5nID49IDEpOworCisgICAgICAgIGlmICgoY3VyWzBdICYga0V4dEhkckRpc3BhdGNoTWFzaykgPT0ga0V4dEhkckRpc3BhdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGN1clswXSAmIGtFeHRIZHJFaWRNYXNrKSA9PSBrRXh0SGRyRWlkSXA2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbXByZXNzZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIGN1cisrOworICAgICAgICAgICAgICAgIHJlbWFpbmluZy0tOworCisgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChydmFsID0gRGVjb21wcmVzcyhhTWVzc2FnZSwgYU1hY1NvdXJjZSwgYU1hY0Rlc3QsIGN1ciwgcmVtYWluaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYURhdGFncmFtTGVuZ3RoKSkgPj0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcHJlc3NlZCA9IChjdXJbMF0gJiBrRXh0SGRyTmV4dEhlYWRlcikgIT0gMDsKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoKHJ2YWwgPSBEZWNvbXByZXNzRXh0ZW5zaW9uSGVhZGVyKGFNZXNzYWdlLCBjdXIsIHJlbWFpbmluZykpID49IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChjdXJbMF0gJiBrVWRwRGlzcGF0Y2hNYXNrKSA9PSBrVWRwRGlzcGF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbXByZXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgocnZhbCA9IERlY29tcHJlc3NVZHBIZWFkZXIoYU1lc3NhZ2UsIGN1ciwgcmVtYWluaW5nLCBhRGF0YWdyYW1MZW5ndGgpKSA+PSAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChyZW1haW5pbmcgPj0gcnZhbCk7CisgICAgICAgIGN1ciArPSBydmFsOworICAgICAgICByZW1haW5pbmcgLT0gcnZhbDsKKyAgICB9CisKKyAgICBjb21wcmVzc2VkTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGN1ciAtIGFCdWYpOworCisgICAgaWYgKGFEYXRhZ3JhbUxlbmd0aCkKKyAgICB7CisgICAgICAgIGlwNlBheWxvYWRMZW5ndGggPSBIb3N0U3dhcDE2KGFEYXRhZ3JhbUxlbmd0aCAtIGN1cnJlbnRPZmZzZXQgLSBzaXplb2YoSXA2OjpIZWFkZXIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaXA2UGF5bG9hZExlbmd0aCA9IEhvc3RTd2FwMTYoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgLSBjdXJyZW50T2Zmc2V0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKElwNjo6SGVhZGVyKSArIGFCdWZMZW5ndGggLSBjb21wcmVzc2VkTGVuZ3RoKTsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5Xcml0ZShjdXJyZW50T2Zmc2V0ICsgSXA2OjpIZWFkZXI6OkdldFBheWxvYWRMZW5ndGhPZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YoaXA2UGF5bG9hZExlbmd0aCksICZpcDZQYXlsb2FkTGVuZ3RoKTsKKworICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworZXhpdDoKKyAgICByZXR1cm4gKGVycm9yID09IE9UX0VSUk9SX05PTkUpID8gc3RhdGljX2Nhc3Q8aW50Pihjb21wcmVzc2VkTGVuZ3RoKSA6IC0xOworfQorCitvdEVycm9yIE1lc2hIZWFkZXI6OkluaXQoY29uc3QgdWludDhfdCAqYUZyYW1lLCB1aW50OF90IGFGcmFtZUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhRnJhbWVMZW5ndGggPj0gMSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgIG1EaXNwYXRjaEhvcHNMZWZ0ID0gKmFGcmFtZSsrOworICAgIGFGcmFtZUxlbmd0aC0tOworCisgICAgaWYgKElzRGVlcEhvcHNMZWZ0RmllbGQoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhRnJhbWVMZW5ndGggPj0gMSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgICAgICBtRGVlcEhvcHNMZWZ0ID0gKmFGcmFtZSsrOworICAgICAgICBhRnJhbWVMZW5ndGgtLTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURlZXBIb3BzTGVmdCA9IDA7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZUxlbmd0aCA+PSBzaXplb2YobUFkZHJlc3MpLCBlcnJvciA9IE9UX0VSUk9SX0ZBSUxFRCk7CisgICAgbWVtY3B5KCZtQWRkcmVzcywgYUZyYW1lLCBzaXplb2YobUFkZHJlc3MpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzaEhlYWRlcjo6SW5pdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBvZmZzZXQgPSAwOworICAgIHVpbnQxNl90IGJ5dGVzUmVhZDsKKworICAgIGJ5dGVzUmVhZCA9IGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YobURpc3BhdGNoSG9wc0xlZnQpLCAmbURpc3BhdGNoSG9wc0xlZnQpOworICAgIFZlcmlmeU9yRXhpdChieXRlc1JlYWQgPT0gc2l6ZW9mKG1EaXNwYXRjaEhvcHNMZWZ0KSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgIG9mZnNldCArPSBieXRlc1JlYWQ7CisKKyAgICBpZiAoSXNEZWVwSG9wc0xlZnRGaWVsZCgpKQorICAgIHsKKyAgICAgICAgYnl0ZXNSZWFkID0gYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihtRGVlcEhvcHNMZWZ0KSwgJm1EZWVwSG9wc0xlZnQpOworICAgICAgICBWZXJpZnlPckV4aXQoYnl0ZXNSZWFkID09IHNpemVvZihtRGVlcEhvcHNMZWZ0KSwgZXJyb3IgPSBPVF9FUlJPUl9GQUlMRUQpOworICAgICAgICBvZmZzZXQgKz0gYnl0ZXNSZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVlcEhvcHNMZWZ0ID0gMDsKKyAgICB9CisKKyAgICBieXRlc1JlYWQgPSBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKG1BZGRyZXNzKSwgJm1BZGRyZXNzKTsKKyAgICBWZXJpZnlPckV4aXQoYnl0ZXNSZWFkID09IHNpemVvZihtQWRkcmVzcyksIGVycm9yID0gT1RfRVJST1JfRkFJTEVEKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBMb3dwYW4KK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL2xvd3Bhbi5ocHAgYi9zcmMvY29yZS90aHJlYWQvbG93cGFuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdkYzJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL2xvd3Bhbi5ocHAKQEAgLTAsMCArMSw0OTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciA2TG9XUEFOIGhlYWRlciBjb21wcmVzc2lvbi4KKyAqLworCisjaWZuZGVmIExPV1BBTl9IUFBfCisjZGVmaW5lIExPV1BBTl9IUFBfCisKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS02bG93cGFuCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciA2TG9XUEFOIGhlYWRlciBjb21wcmVzc2lvbi4KKyAqCisgKiBAeworICovCisKKy8qKgorICogQG5hbWVzcGFjZSBvdDo6TG93cGFuCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbmFtZXNwYWNlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciA2TG9XUEFOIG1lc3NhZ2UgcHJvY2Vzc2luZy4KKyAqCisgKi8KK25hbWVzcGFjZSBMb3dwYW4geworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBMT1dQQU5fSVBIQyBDb250ZXh0LgorICoKKyAqLworc3RydWN0IENvbnRleHQKK3sKKyAgICBjb25zdCB1aW50OF90ICptUHJlZml4OyAgICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIHByZWZpeC4KKyAgICB1aW50OF90ICAgICAgICBtUHJlZml4TGVuZ3RoOyAgLy8vPCBUaGUgcHJlZml4IGxlbmd0aC4KKyAgICB1aW50OF90ICAgICAgICBtQ29udGV4dElkOyAgICAgLy8vPCBUaGUgQ29udGV4dCBJRC4KKyAgICBib29sICAgICAgICAgICBtQ29tcHJlc3NGbGFnOyAgLy8vPCBUaGUgQ29udGV4dCBjb21wcmVzc2lvbiBmbGFnLgorfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTE9XUEFOX0lQSEMgaGVhZGVyIGNvbXByZXNzaW9uLgorICoKKyAqLworY2xhc3MgTG93cGFuOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgTG93cGFuKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBoZWFkZXIgaXMgYSBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGVhZGVyICBBIHBvaW50ZXIgdG8gdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBoZWFkZXIgbWF0Y2hlcyB0aGUgTE9XUEFOX0lQSEMgZGlzcGF0Y2ggdmFsdWUuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBtYXRjaCB0aGUgTE9XUEFOX0lQSEMgZGlzcGF0Y2ggdmFsdWUuCisgICAgICovCisgICAgc3RhdGljIGJvb2wgSXNMb3dwYW5IYyh1aW50OF90ICphSGVhZGVyKSB7CisgICAgICAgIHJldHVybiAoYUhlYWRlclswXSAmIChMb3dwYW46OmtIY0Rpc3BhdGNoTWFzayA+PiA4KSkgPT0gKExvd3Bhbjo6a0hjRGlzcGF0Y2ggPj4gOCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY29tcHJlc3NlcyBhbiBJUHY2IGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhTWVzc2FnZSAgICAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1hY1NvdXJjZSAgIFRoZSBNQUMgc291cmNlIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgIGFNYWNEZXN0ICAgICBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW291dF0gIGFCdWYgICAgICAgICBBIHBvaW50ZXIgd2hlcmUgdGhlIGNvbXByZXNzZWQgSVB2NiBoZWFkZXIgd2lsbCBiZSBwbGFjZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgQ29tcHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwgdWludDhfdCAqYUJ1Zik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkZWNvbXByZXNzZXMgYSBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYU1lc3NhZ2UgICAgICBBIHJlZmVyZW5jZSB3aGVyZSB0aGUgSVB2NiBoZWFkZXIgd2lsbCBiZSBwbGFjZWQuCisgICAgICogQHBhcmFtW2luXSAgIGFNYWNTb3VyY2UgICAgVGhlIE1BQyBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1hY0Rlc3QgICAgICBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgIGFCdWYgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgICogQHBhcmFtW2luXSAgIGFCdWZMZW4gICAgICAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBAcCBhQnVmLgorICAgICAqIEBwYXJhbVtpbl0gICBhRGF0YWdyYW1MZW4gIFRoZSBJUHY2IGRhdGFncmFtIGxlbmd0aC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGhlYWRlciBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIGludCBEZWNvbXByZXNzKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0Rlc3QsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1ZkxlbiwgdWludDE2X3QgYURhdGFncmFtTGVuKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlY29tcHJlc3NlcyBhIExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhSGVhZGVyICAgICAgIEEgcmVmZXJlbmNlIHdoZXJlIHRoZSBJUHY2IGhlYWRlciB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1hY1NvdXJjZSAgICBUaGUgTUFDIHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gICBhTWFjRGVzdCAgICAgIFRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1baW5dICAgYUJ1ZiAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICAgKiBAcGFyYW1baW5dICAgYUJ1Zkxlbmd0aCAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIEBwIGFCdWYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBpbnQgRGVjb21wcmVzc0Jhc2VIZWFkZXIoSXA2OjpIZWFkZXIgJmFIZWFkZXIsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0hjRGlzcGF0Y2ggICAgICAgID0gMyA8PCAxMywKKyAgICAgICAga0hjRGlzcGF0Y2hNYXNrICAgID0gNyA8PCAxMywKKworICAgICAgICBrSGNUcmFmZmljQ2xhc3MgICAgPSAxIDw8IDExLAorICAgICAgICBrSGNGbG93TGFiZWwgICAgICAgPSAyIDw8IDExLAorICAgICAgICBrSGNUcmFmZmljRmxvdyAgICAgPSAzIDw8IDExLAorICAgICAgICBrSGNUcmFmZmljRmxvd01hc2sgPSAzIDw8IDExLAorICAgICAgICBrSGNOZXh0SGVhZGVyICAgICAgPSAxIDw8IDEwLAorICAgICAgICBrSGNIb3BMaW1pdDEgICAgICAgPSAxIDw8IDgsCisgICAgICAgIGtIY0hvcExpbWl0NjQgICAgICA9IDIgPDwgOCwKKyAgICAgICAga0hjSG9wTGltaXQyNTUgICAgID0gMyA8PCA4LAorICAgICAgICBrSGNIb3BMaW1pdE1hc2sgICAgPSAzIDw8IDgsCisgICAgICAgIGtIY0NvbnRleHRJZCAgICAgICA9IDEgPDwgNywKKyAgICAgICAga0hjU3JjQWRkckNvbnRleHQgID0gMSA8PCA2LAorICAgICAgICBrSGNTcmNBZGRyTW9kZTAgICAgPSAwIDw8IDQsCisgICAgICAgIGtIY1NyY0FkZHJNb2RlMSAgICA9IDEgPDwgNCwKKyAgICAgICAga0hjU3JjQWRkck1vZGUyICAgID0gMiA8PCA0LAorICAgICAgICBrSGNTcmNBZGRyTW9kZTMgICAgPSAzIDw8IDQsCisgICAgICAgIGtIY1NyY0FkZHJNb2RlTWFzayA9IDMgPDwgNCwKKyAgICAgICAga0hjTXVsdGljYXN0ICAgICAgID0gMSA8PCAzLAorICAgICAgICBrSGNEc3RBZGRyQ29udGV4dCAgPSAxIDw8IDIsCisgICAgICAgIGtIY0RzdEFkZHJNb2RlMCAgICA9IDAgPDwgMCwKKyAgICAgICAga0hjRHN0QWRkck1vZGUxICAgID0gMSA8PCAwLAorICAgICAgICBrSGNEc3RBZGRyTW9kZTIgICAgPSAyIDw8IDAsCisgICAgICAgIGtIY0RzdEFkZHJNb2RlMyAgICA9IDMgPDwgMCwKKyAgICAgICAga0hjRHN0QWRkck1vZGVNYXNrID0gMyA8PCAwLAorCisgICAgICAgIGtFeHRIZHJEaXNwYXRjaCAgICAgPSAweGUwLAorICAgICAgICBrRXh0SGRyRGlzcGF0Y2hNYXNrID0gMHhmMCwKKworICAgICAgICBrRXh0SGRyRWlkSGJoICAgICAgID0gMHgwMCwKKyAgICAgICAga0V4dEhkckVpZFJvdXRpbmcgICA9IDB4MDIsCisgICAgICAgIGtFeHRIZHJFaWRGcmFnbWVudCAgPSAweDA0LAorICAgICAgICBrRXh0SGRyRWlkRHN0ICAgICAgID0gMHgwNiwKKyAgICAgICAga0V4dEhkckVpZE1vYmlsaXR5ICA9IDB4MDgsCisgICAgICAgIGtFeHRIZHJFaWRJcDYgICAgICAgPSAweDBlLAorICAgICAgICBrRXh0SGRyRWlkTWFzayAgICAgID0gMHgwZSwKKworICAgICAgICBrRXh0SGRyTmV4dEhlYWRlciAgID0gMHgwMSwKKworICAgICAgICBrVWRwRGlzcGF0Y2ggICAgICAgID0gMHhmMCwKKyAgICAgICAga1VkcERpc3BhdGNoTWFzayAgICA9IDB4ZjgsCisgICAgICAgIGtVZHBDaGVja3N1bSAgICAgICAgPSAxIDw8IDIsCisgICAgICAgIGtVZHBQb3J0TWFzayAgICAgICAgPSAzIDw8IDAsCisgICAgfTsKKworICAgIGludCBDb21wcmVzc0V4dGVuc2lvbkhlYWRlcihNZXNzYWdlICZtZXNzYWdlLCB1aW50OF90ICphQnVmLCB1aW50OF90ICZuZXh0SGVhZGVyKTsKKyAgICBpbnQgQ29tcHJlc3NTb3VyY2VJaWQoY29uc3QgTWFjOjpBZGRyZXNzICZtYWNhZGRyLCBjb25zdCBJcDY6OkFkZHJlc3MgJmlwYWRkciwgY29uc3QgQ29udGV4dCAmYUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICZoY0N0bCwgdWludDhfdCAqYUJ1Zik7CisgICAgaW50IENvbXByZXNzRGVzdGluYXRpb25JaWQoY29uc3QgTWFjOjpBZGRyZXNzICZtYWNhZGRyLCBjb25zdCBJcDY6OkFkZHJlc3MgJmlwYWRkciwgY29uc3QgQ29udGV4dCAmYUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgJmhjQ3RsLCB1aW50OF90ICphQnVmKTsKKyAgICBpbnQgQ29tcHJlc3NNdWx0aWNhc3QoY29uc3QgSXA2OjpBZGRyZXNzICZpcGFkZHIsIHVpbnQxNl90ICZoY0N0bCwgdWludDhfdCAqYUJ1Zik7CisgICAgaW50IENvbXByZXNzVWRwKE1lc3NhZ2UgJm1lc3NhZ2UsIHVpbnQ4X3QgKmFCdWYpOworCisgICAgaW50IERlY29tcHJlc3NFeHRlbnNpb25IZWFkZXIoTWVzc2FnZSAmbWVzc2FnZSwgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisgICAgaW50IERlY29tcHJlc3NVZHBIZWFkZXIoTWVzc2FnZSAmbWVzc2FnZSwgY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCwgdWludDE2X3QgZGF0YWdyYW1MZW5ndGgpOworICAgIG90RXJyb3IgRGlzcGF0Y2hUb05leHRIZWFkZXIodWludDhfdCBkaXNwYXRjaCwgSXA2OjpJcFByb3RvICZuZXh0SGVhZGVyKTsKKworICAgIHN0YXRpYyBvdEVycm9yIENvcHlDb250ZXh0KGNvbnN0IENvbnRleHQgJmFDb250ZXh0LCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKTsKKyAgICBzdGF0aWMgb3RFcnJvciBDb21wdXRlSWlkKGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0FkZHIsIGNvbnN0IENvbnRleHQgJmFDb250ZXh0LCBJcDY6OkFkZHJlc3MgJmFJcEFkZHJlc3MpOworfTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTWVzaCBIZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcHJvY2Vzc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBNZXNoSGVhZGVyCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0FkZGl0aW9uYWxIb3BzTGVmdCA9IDEgICAgLy8vPCBUaGUgYWRkaXRpb25hbCB2YWx1ZSB0aGF0IGlzIGFkZGVkIHRvIHByZWRpY3RlZCB2YWx1ZSBvZiB0aGUgcm91dGUgY29zdC4KKyAgICB9OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hIZWFkZXIodm9pZCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtRGlzcGF0Y2hIb3BzTGVmdCA9IGtEaXNwYXRjaCB8IGtTb3VyY2VTaG9ydCB8IGtEZXN0aW5hdGlvblNob3J0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgbWVzaCBoZWFkZXIgZnJvbSBhIGZyYW1lIEBwIGFGcmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGZyYW1lLgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUxlbmd0aCAgVGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIE1lc2ggSGVhZGVyIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0ZBSUxFRCAgIE1lc2ggaGVhZGVyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZCBmcm9tIEBwIGFGcmFtZSAoZS5nLiwgZnJhbWUgbm90IGxvbmcgZW5vdWdoKS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5pdChjb25zdCB1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYUZyYW1lTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBtZXNoIGhlYWRlciBmcm9tIGEgbWVzc2FnZSBvYmplY3QgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgVGhlIG1lc3NhZ2Ugb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBNZXNoIEhlYWRlciBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9GQUlMRUQgICBNZXNoIGhlYWRlciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQgZnJvbSBAIGFNZXNzYWdlKGUuZy4sIG5vdCBsb25nIGVub3VnaCkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEluaXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBoZWFkZXIgaXMgYSBNZXNoIEhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBoZWFkZXIgbWF0Y2hlcyB0aGUgTWVzaCBIZWFkZXIgZGlzcGF0Y2ggdmFsdWUuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBtYXRjaCB0aGUgTWVzaCBIZWFkZXIgZGlzcGF0Y2ggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTWVzaEhlYWRlcih2b2lkKSB7IHJldHVybiAobURpc3BhdGNoSG9wc0xlZnQgJiBrRGlzcGF0Y2hNYXNrKSA9PSBrRGlzcGF0Y2g7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgTWVzaCBIZWFkZXIgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBoZWFkZXIgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSB7IHJldHVybiAobURpc3BhdGNoSG9wc0xlZnQgJiBrU291cmNlU2hvcnQpICYmIChtRGlzcGF0Y2hIb3BzTGVmdCAmIGtEZXN0aW5hdGlvblNob3J0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBoZWFkZXIgY29udGFpbnMgRGVlcCBIb3BzIExlZnQgZmllbGQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgaGVhZGVyIGRvZXMgY29udGFpbiBEZWVwIEhvcHMgTGVmdCBmaWVsZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gRGVlcCBIb3BzIExlZnQgZmllbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRGVlcEhvcHNMZWZ0RmllbGQodm9pZCkgeyByZXR1cm4gKG1EaXNwYXRjaEhvcHNMZWZ0ICYga0hvcHNMZWZ0TWFzaykgPT0ga0RlZXBIb3BzTGVmdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIE1lc2ggSGVhZGVyIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIHNpemUgb2YgdGhlIE1lc2ggSGVhZGVyIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIZWFkZXJMZW5ndGgodm9pZCkgeyByZXR1cm4gc2l6ZW9mKCp0aGlzKSAtIChJc0RlZXBIb3BzTGVmdEZpZWxkKCkgPyAwIDogc2l6ZW9mKG1EZWVwSG9wc0xlZnQpKSA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEhvcHMgTGVmdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBIb3BzIExlZnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEhvcHNMZWZ0KHZvaWQpIHsgcmV0dXJuIElzRGVlcEhvcHNMZWZ0RmllbGQoKSA/IG1EZWVwSG9wc0xlZnQgOiBtRGlzcGF0Y2hIb3BzTGVmdCAmIGtIb3BzTGVmdE1hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEhvcHMgTGVmdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFIb3BzICBUaGUgSG9wcyBMZWZ0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRIb3BzTGVmdCh1aW50OF90IGFIb3BzKSB7CisgICAgICAgIGlmIChhSG9wcyA8IGtEZWVwSG9wc0xlZnQgJiYgIUlzRGVlcEhvcHNMZWZ0RmllbGQoKSkgeworICAgICAgICAgICAgbURpc3BhdGNoSG9wc0xlZnQgPSAobURpc3BhdGNoSG9wc0xlZnQgJiB+a0hvcHNMZWZ0TWFzaykgfCBhSG9wczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1EaXNwYXRjaEhvcHNMZWZ0ID0gKG1EaXNwYXRjaEhvcHNMZWZ0ICYgfmtIb3BzTGVmdE1hc2spIHwga0RlZXBIb3BzTGVmdDsKKyAgICAgICAgICAgIG1EZWVwSG9wc0xlZnQgPSBhSG9wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1lc2ggU291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWVzaCBTb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNvdXJjZSh2b2lkKSB7IHJldHVybiBIb3N0U3dhcDE2KG1BZGRyZXNzLm1Tb3VyY2UpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNoIFNvdXJjZSBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNvdXJjZSAgVGhlIE1lc2ggU291cmNlIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNvdXJjZSh1aW50MTZfdCBhU291cmNlKSB7IG1BZGRyZXNzLm1Tb3VyY2UgPSBIb3N0U3dhcDE2KGFTb3VyY2UpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNZXNoIERlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTWVzaCBEZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGVzdGluYXRpb24odm9pZCkgeyByZXR1cm4gSG9zdFN3YXAxNihtQWRkcmVzcy5tRGVzdGluYXRpb24pOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNoIERlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gIFRoZSBNZXNoIERlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERlc3RpbmF0aW9uKHVpbnQxNl90IGFEZXN0aW5hdGlvbikgeyBtQWRkcmVzcy5tRGVzdGluYXRpb24gPSBIb3N0U3dhcDE2KGFEZXN0aW5hdGlvbik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgTWVzaCBIZWFkZXIgdG8gdGhlIEBwIGFGcmFtZSBmcmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZSAgVGhlIHBvaW50ZXIgdG8gdGhlIGZyYW1lLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBBcHBlbmRUbyh1aW50OF90ICphRnJhbWUpIHsKKyAgICAgICAgKmFGcmFtZSsrID0gbURpc3BhdGNoSG9wc0xlZnQ7CisKKyAgICAgICAgaWYgKElzRGVlcEhvcHNMZWZ0RmllbGQoKSkgeworICAgICAgICAgICAgKmFGcmFtZSsrID0gbURlZXBIb3BzTGVmdDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweShhRnJhbWUsICZtQWRkcmVzcywgc2l6ZW9mKG1BZGRyZXNzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEaXNwYXRjaCAgICAgICAgID0gMiA8PCA2LAorICAgICAgICBrRGlzcGF0Y2hNYXNrICAgICA9IDMgPDwgNiwKKyAgICAgICAga0hvcHNMZWZ0TWFzayAgICAgPSAweDBmLAorICAgICAgICBrU291cmNlU2hvcnQgICAgICA9IDEgPDwgNSwKKyAgICAgICAga0Rlc3RpbmF0aW9uU2hvcnQgPSAxIDw8IDQsCisgICAgICAgIGtEZWVwSG9wc0xlZnQgICAgID0gMHgwZgorICAgIH07CisKKyAgICB1aW50OF90ICBtRGlzcGF0Y2hIb3BzTGVmdDsKKyAgICB1aW50OF90ICBtRGVlcEhvcHNMZWZ0OworICAgIHN0cnVjdAorICAgIHsKKyAgICAgICAgdWludDE2X3QgbVNvdXJjZTsKKyAgICAgICAgdWludDE2X3QgbURlc3RpbmF0aW9uOworICAgIH0gbUFkZHJlc3MgT1RfVE9PTF9QQUNLRURfRklFTEQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgRnJhZ21lbnQgSGVhZGVyIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgRnJhZ21lbnRIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgRnJhZ21lbnQgSGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgbURpc3BhdGNoU2l6ZSA9IEhvc3RTd2FwMTYoa0Rpc3BhdGNoKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBoZWFkZXIgaXMgYSBGcmFnbWVudCBIZWFkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgaGVhZGVyIG1hdGNoZXMgdGhlIEZyYWdtZW50IEhlYWRlciBkaXNwYXRjaCB2YWx1ZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IG1hdGNoIHRoZSBGcmFnbWVudCBIZWFkZXIgZGlzcGF0Y2ggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRnJhZ21lbnRIZWFkZXIodm9pZCkgeyByZXR1cm4gKEhvc3RTd2FwMTYobURpc3BhdGNoU2l6ZSkgJiBrRGlzcGF0Y2hNYXNrKSA9PSBrRGlzcGF0Y2g7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEZyYWdtZW50IEhlYWRlciBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRnJhZ21lbnQgSGVhZGVyIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SGVhZGVyTGVuZ3RoKHZvaWQpIHsKKyAgICAgICAgcmV0dXJuIChIb3N0U3dhcDE2KG1EaXNwYXRjaFNpemUpICYga09mZnNldCkgPyBzaXplb2YoKnRoaXMpIDogc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihtT2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEYXRhZ3JhbSBTaXplIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIERhdGFncmFtIFNpemUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXREYXRhZ3JhbVNpemUodm9pZCkgeyByZXR1cm4gSG9zdFN3YXAxNihtRGlzcGF0Y2hTaXplKSAmIGtTaXplTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGF0YWdyYW0gU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaXplICBUaGUgRGF0YWdyYW0gU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGF0YWdyYW1TaXplKHVpbnQxNl90IGFTaXplKSB7CisgICAgICAgIG1EaXNwYXRjaFNpemUgPSBIb3N0U3dhcDE2KChIb3N0U3dhcDE2KG1EaXNwYXRjaFNpemUpICYgfmtTaXplTWFzaykgfCAoYVNpemUgJiBrU2l6ZU1hc2spKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEYXRhZ3JhbSBUYWcgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGF0YWdyYW0gVGFnIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0RGF0YWdyYW1UYWcodm9pZCkgeyByZXR1cm4gSG9zdFN3YXAxNihtVGFnKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGF0YWdyYW0gVGFnIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRhZyAgVGhlIERhdGFncmFtIFRhZyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGF0YWdyYW1UYWcodWludDE2X3QgYVRhZykgeyBtVGFnID0gSG9zdFN3YXAxNihhVGFnKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRGF0YWdyYW0gT2Zmc2V0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIERhdGFncmFtIE9mZnNldCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldERhdGFncmFtT2Zmc2V0KHZvaWQpIHsgcmV0dXJuIChIb3N0U3dhcDE2KG1EaXNwYXRjaFNpemUpICYga09mZnNldCkgPyBzdGF0aWNfY2FzdDx1aW50MTZfdD4obU9mZnNldCkgKiA4IDogMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGF0YWdyYW0gT2Zmc2V0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU9mZnNldCAgVGhlIERhdGFncmFtIE9mZnNldCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGF0YWdyYW1PZmZzZXQodWludDE2X3QgYU9mZnNldCkgeworICAgICAgICBpZiAoYU9mZnNldCA9PSAwKSB7CisgICAgICAgICAgICBtRGlzcGF0Y2hTaXplID0gSG9zdFN3YXAxNihIb3N0U3dhcDE2KG1EaXNwYXRjaFNpemUpICYgfmtPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbURpc3BhdGNoU2l6ZSA9IEhvc3RTd2FwMTYoSG9zdFN3YXAxNihtRGlzcGF0Y2hTaXplKSB8IGtPZmZzZXQpOworICAgICAgICAgICAgbU9mZnNldCA9IChhT2Zmc2V0ID4+IDMpICYga09mZnNldE1hc2s7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0Rpc3BhdGNoICAgICA9IDMgPDwgMTQsCisgICAgICAgIGtPZmZzZXQgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBrRGlzcGF0Y2hNYXNrID0gMHhkODAwLCAgLy8vPCBBY2NlcHQgRlJBRzEgYW5kIEZSQUdOIG9ubHkuCisgICAgICAgIGtTaXplTWFzayAgICAgPSAweDdmZiwKKyAgICAgICAga09mZnNldE1hc2sgICA9IDB4ZmYsCisgICAgfTsKKworICAgIHVpbnQxNl90IG1EaXNwYXRjaFNpemU7CisgICAgdWludDE2X3QgbVRhZzsKKyAgICB1aW50OF90ICBtT2Zmc2V0OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2UgTG93cGFuCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBMT1dQQU5fSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21lc2hfZm9yd2FyZGVyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9tZXNoX2ZvcndhcmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxMGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tZXNoX2ZvcndhcmRlci5jcHAKQEAgLTAsMCArMSwyMzY2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIG1lc2ggZm9yd2FyZGluZyBvZiBJUHY2LzZMb1dQQU4gbWVzc2FnZXMuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAibWVzaF9mb3J3YXJkZXIudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm1lc2hfZm9yd2FyZGVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfZmlsdGVyLmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgIm5ldC90Y3AuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3JvdXRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworCitNZXNoRm9yd2FyZGVyOjpNZXNoRm9yd2FyZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1NYWNSZWNlaXZlcigmTWVzaEZvcndhcmRlcjo6SGFuZGxlUmVjZWl2ZWRGcmFtZSwgJk1lc2hGb3J3YXJkZXI6OkhhbmRsZURhdGFQb2xsVGltZW91dCwgdGhpcyksCisgICAgbU1hY1NlbmRlcigmTWVzaEZvcndhcmRlcjo6SGFuZGxlRnJhbWVSZXF1ZXN0LCAmTWVzaEZvcndhcmRlcjo6SGFuZGxlU2VudEZyYW1lLCB0aGlzKSwKKyAgICBtRGlzY292ZXJUaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmTWVzaEZvcndhcmRlcjo6SGFuZGxlRGlzY292ZXJUaW1lciwgdGhpcyksCisgICAgbVJlYXNzZW1ibHlUaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmTWVzaEZvcndhcmRlcjo6SGFuZGxlUmVhc3NlbWJseVRpbWVyLCB0aGlzKSwKKyAgICBtTWVzc2FnZU5leHRPZmZzZXQoMCksCisgICAgbVNlbmRNZXNzYWdlRnJhbWVDb3VudGVyKDApLAorICAgIG1TZW5kTWVzc2FnZShOVUxMKSwKKyAgICBtU2VuZE1lc3NhZ2VJc0FSZXRyYW5zbWlzc2lvbihmYWxzZSksCisgICAgbVNlbmRNZXNzYWdlTWF4TWFjVHhBdHRlbXB0cyhNYWM6OmtEaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHMpLAorICAgIG1TZW5kTWVzc2FnZUtleUlkKDApLAorICAgIG1TZW5kTWVzc2FnZURhdGFTZXF1ZW5jZU51bWJlcigwKSwKKyAgICBtU3RhcnRDaGlsZEluZGV4KDApLAorICAgIG1NZXNoU291cmNlKE1hYzo6a1Nob3J0QWRkckludmFsaWQpLAorICAgIG1NZXNoRGVzdChNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKSwKKyAgICBtQWRkTWVzaEhlYWRlcihmYWxzZSksCisgICAgbVNlbmRCdXN5KGZhbHNlKSwKKyAgICBtU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGFza2xldFNjaGVkdWxlciwgU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrLCB0aGlzKSwKKyAgICBtRW5hYmxlZChmYWxzZSksCisgICAgbVNjYW5DaGFubmVscygwKSwKKyAgICBtU2NhbkNoYW5uZWwoMCksCisgICAgbVJlc3RvcmVDaGFubmVsKDApLAorICAgIG1SZXN0b3JlUGFuSWQoTWFjOjprUGFuSWRCcm9hZGNhc3QpLAorICAgIG1TY2FubmluZyhmYWxzZSksCisgICAgbURhdGFQb2xsTWFuYWdlcigqdGhpcyksCisgICAgbVNvdXJjZU1hdGNoQ29udHJvbGxlcigqdGhpcykKK3sKKyAgICBtRnJhZ1RhZyA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgYVRocmVhZE5ldGlmLkdldE1hYygpLlJlZ2lzdGVyUmVjZWl2ZXIobU1hY1JlY2VpdmVyKTsKKyAgICBtTWFjU291cmNlLm1MZW5ndGggPSAwOworICAgIG1NYWNEZXN0Lm1MZW5ndGggPSAwOworCisgICAgbUlwQ291bnRlcnMubVR4U3VjY2VzcyA9IDA7CisgICAgbUlwQ291bnRlcnMubVJ4U3VjY2VzcyA9IDA7CisgICAgbUlwQ291bnRlcnMubVR4RmFpbHVyZSA9IDA7CisgICAgbUlwQ291bnRlcnMubVJ4RmFpbHVyZSA9IDA7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U3RhcnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChtRW5hYmxlZCA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWFjKCkuU2V0UnhPbldoZW5JZGxlKHRydWUpOworICAgICAgICBtRW5hYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OlN0b3Aodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQobUVuYWJsZWQgPT0gdHJ1ZSk7CisKKyAgICBtRGF0YVBvbGxNYW5hZ2VyLlN0b3BQb2xsaW5nKCk7CisgICAgbVJlYXNzZW1ibHlUaW1lci5TdG9wKCk7CisKKyAgICBpZiAobVNjYW5uaW5nKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0Q2hhbm5lbChtUmVzdG9yZUNoYW5uZWwpOworICAgICAgICBtU2Nhbm5pbmcgPSBmYWxzZTsKKyAgICAgICAgbmV0aWYuR2V0TWxlKCkuSGFuZGxlRGlzY292ZXJDb21wbGV0ZSgpOworICAgIH0KKworICAgIHdoaWxlICgobWVzc2FnZSA9IG1TZW5kUXVldWUuR2V0SGVhZCgpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVNlbmRRdWV1ZS5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHdoaWxlICgobWVzc2FnZSA9IG1SZWFzc2VtYmx5TGlzdC5HZXRIZWFkKCkpICE9IE5VTEwpCisgICAgeworICAgICAgICBtUmVhc3NlbWJseUxpc3QuRGVxdWV1ZSgqbWVzc2FnZSk7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICBtRW5hYmxlZCA9IGZhbHNlOworICAgIG1TZW5kTWVzc2FnZSA9IE5VTEw7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0UnhPbldoZW5JZGxlKGZhbHNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlUmVzb2x2ZWQoY29uc3QgSXA2OjpBZGRyZXNzICZhRWlkLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBNZXNzYWdlICpjdXIsICpuZXh0OworICAgIElwNjo6QWRkcmVzcyBpcDZEc3Q7CisgICAgYm9vbCBlbnF1ZXVlZE1lc3NhZ2UgPSBmYWxzZTsKKworICAgIGZvciAoY3VyID0gbVJlc29sdmluZ1F1ZXVlLkdldEhlYWQoKTsgY3VyOyBjdXIgPSBuZXh0KQorICAgIHsKKyAgICAgICAgbmV4dCA9IGN1ci0+R2V0TmV4dCgpOworCisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBNZXNzYWdlOjprVHlwZUlwNikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjdXItPlJlYWQoSXA2OjpIZWFkZXI6OkdldERlc3RpbmF0aW9uT2Zmc2V0KCksIHNpemVvZihpcDZEc3QpLCAmaXA2RHN0KTsKKworICAgICAgICBpZiAobWVtY21wKCZpcDZEc3QsICZhRWlkLCBzaXplb2YoaXA2RHN0KSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlc29sdmluZ1F1ZXVlLkRlcXVldWUoKmN1cik7CisKKyAgICAgICAgICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU2VuZFF1ZXVlLkVucXVldWUoKmN1cik7CisgICAgICAgICAgICAgICAgZW5xdWV1ZWRNZXNzYWdlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdXItPkZyZWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChlbnF1ZXVlZE1lc3NhZ2UpCisgICAgeworICAgICAgICBtU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrLlBvc3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6Q2xlYXJDaGlsZEluZGlyZWN0TWVzc2FnZXMoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBNZXNzYWdlICpuZXh0TWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdChhQ2hpbGQuR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA+IDApOworCisgICAgZm9yIChNZXNzYWdlICptZXNzYWdlID0gbVNlbmRRdWV1ZS5HZXRIZWFkKCk7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBuZXh0TWVzc2FnZSkKKyAgICB7CisgICAgICAgIG5leHRNZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpOworCisgICAgICAgIG1lc3NhZ2UtPkNsZWFyQ2hpbGRNYXNrKEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Q2hpbGRJbmRleChhQ2hpbGQpKTsKKworICAgICAgICBpZiAoIW1lc3NhZ2UtPklzQ2hpbGRQZW5kaW5nKCkgJiYgIW1lc3NhZ2UtPkdldERpcmVjdFRyYW5zbWlzc2lvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVNlbmRNZXNzYWdlID09IG1lc3NhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlbmRNZXNzYWdlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVNlbmRRdWV1ZS5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuUmVzZXRNZXNzYWdlQ291bnQoYUNoaWxkKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6VXBkYXRlSW5kaXJlY3RNZXNzYWdlcyh2b2lkKQoreworICAgIENoaWxkICpjaGlsZHJlbjsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworCisgICAgY2hpbGRyZW4gPSBHZXROZXRpZigpLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgaSsrKQorICAgIHsKKyAgICAgICAgQ2hpbGQgKmNoaWxkID0gJmNoaWxkcmVuW2ldOworCisgICAgICAgIGlmIChjaGlsZC0+SXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSB8fCAoY2hpbGQtPkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCkgPT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgQ2xlYXJDaGlsZEluZGlyZWN0TWVzc2FnZXMoKmNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6U2NoZWR1bGVUcmFuc21pc3Npb25UYXNrKFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIEdldE93bmVyKGFUYXNrbGV0KS5TY2hlZHVsZVRyYW5zbWlzc2lvblRhc2soKTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpTY2hlZHVsZVRyYW5zbWlzc2lvblRhc2sodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW47CisgICAgdWludDhfdCBjaGlsZEluZGV4OworICAgIHVpbnQ4X3QgbmV4dEluZGV4OworICAgIENoaWxkICpjaGlsZHJlbjsKKworICAgIFZlcmlmeU9yRXhpdChtU2VuZEJ1c3kgPT0gZmFsc2UsIGVycm9yID0gT1RfRVJST1JfQlVTWSk7CisKKyAgICBVcGRhdGVJbmRpcmVjdE1lc3NhZ2VzKCk7CisKKyAgICBtU2VuZE1lc3NhZ2VJc0FSZXRyYW5zbWlzc2lvbiA9IGZhbHNlOworCisgICAgY2hpbGRyZW4gPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZHJlbigmbnVtQ2hpbGRyZW4pOworCisgICAgaWYgKG1TdGFydENoaWxkSW5kZXggPj0gbnVtQ2hpbGRyZW4pCisgICAgeworICAgICAgICBtU3RhcnRDaGlsZEluZGV4ID0gMDsKKyAgICB9CisKKyAgICBjaGlsZEluZGV4ID0gbVN0YXJ0Q2hpbGRJbmRleDsKKworICAgIGZvciAodWludDhfdCBpdGVyYXRpb25zID0gbnVtQ2hpbGRyZW47IGl0ZXJhdGlvbnMgPiAwOyBpdGVyYXRpb25zLS0sIGNoaWxkSW5kZXggPSBuZXh0SW5kZXgpCisgICAgeworICAgICAgICBDaGlsZCAmY2hpbGQgPSBjaGlsZHJlbltjaGlsZEluZGV4XTsKKworICAgICAgICBpZiAoKG5leHRJbmRleCA9IGNoaWxkSW5kZXggKyAxKSA9PSBudW1DaGlsZHJlbikKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dEluZGV4ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY2hpbGQuSXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSB8fCAhY2hpbGQuSXNEYXRhUmVxdWVzdFBlbmRpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtU2VuZE1lc3NhZ2UgPSBjaGlsZC5HZXRJbmRpcmVjdE1lc3NhZ2UoKTsKKyAgICAgICAgbVNlbmRNZXNzYWdlTWF4TWFjVHhBdHRlbXB0cyA9IE1hYzo6a0luZGlyZWN0RnJhbWVNYWNUeEF0dGVtcHRzOworCisgICAgICAgIGlmIChtU2VuZE1lc3NhZ2UgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRNZXNzYWdlID0gR2V0SW5kaXJlY3RUcmFuc21pc3Npb24oY2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1TZW5kTWVzc2FnZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBQcmVwYXJlSW5kaXJlY3RUcmFuc21pc3Npb24oKm1TZW5kTWVzc2FnZSwgY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQSBOVUxMIGBtU2VuZE1lc3NhZ2VgIHRyaWdnZXJzIGFuIGVtcHR5IGZyYW1lIHRvIGJlIHNlbnQgdG8gdGhlIGNoaWxkLgorCisgICAgICAgICAgICBpZiAoY2hpbGQuSXNJbmRpcmVjdFNvdXJjZU1hdGNoU2hvcnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBtTWFjU291cmNlLm1TaG9ydEFkZHJlc3MgPSBuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtTWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobU1hY1NvdXJjZS5tRXh0QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgbWVtY3B5KG1NYWNTb3VyY2UubUV4dEFkZHJlc3MubTgsIG5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKG1NYWNEZXN0Lm1FeHRBZGRyZXNzKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoaWxkLkdldE1hY0FkZHJlc3MobU1hY0Rlc3QpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVG8gZW5zdXJlIGZhaXJuZXNzIGluIGhhbmRsaW5nIG9mIGRhdGEgcmVxdWVzdHMgZnJvbSBzbGVlcHkKKyAgICAgICAgLy8gY2hpbGRyZW4sIG9uY2UgYSBtZXNzYWdlIGlzIHNjaGVkdWxlZCBhbmQgcHJlcGFyZWQgZm9yIGluZGlyZWN0CisgICAgICAgIC8vIHRyYW5zbWlzc2lvbiB0byBhIGNoaWxkLCB0aGUgYG1TdGFydENoaWxkSW5kZXhgIGlzIHVwZGF0ZWQgdG8KKyAgICAgICAgLy8gdGhlIG5leHQgaW5kZXggYWZ0ZXIgdGhlIGN1cnJlbnQgY2hpbGQuIFN1YnNlcXVlbnQgY2FsbCB0bworICAgICAgICAvLyBgU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrKClgIHdpbGwgYmVnaW4gdGhlIGl0ZXJhdGlvbiB0aHJvdWdoCisgICAgICAgIC8vIHRoZSBjaGlsZHJlbiBsaXN0IGZyb20gdGhpcyBpbmRleC4KKworICAgICAgICBtU3RhcnRDaGlsZEluZGV4ID0gbmV4dEluZGV4OworCisgICAgICAgIG5ldGlmLkdldE1hYygpLlNlbmRGcmFtZVJlcXVlc3QobU1hY1NlbmRlcik7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBpZiAoKG1TZW5kTWVzc2FnZSA9IEdldERpcmVjdFRyYW5zbWlzc2lvbigpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2VuZEZyYW1lUmVxdWVzdChtTWFjU2VuZGVyKTsKKyAgICAgICAgbVNlbmRNZXNzYWdlTWF4TWFjVHhBdHRlbXB0cyA9IE1hYzo6a0RpcmVjdEZyYW1lTWFjVHhBdHRlbXB0czsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3RMb2dXYXJuTWFjKEdldEluc3RhbmNlKCksICJFcnJvciB3aGlsZSBzY2hlZHVsaW5nIHRyYW5zbWlzc2lvbiB0YXNrOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpKTsKKyAgICB9Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U2VuZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBOZWlnaGJvciAqbmVpZ2hib3I7CisKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworICAgIENoaWxkICpjaGlsZDsKKworICAgIHN3aXRjaCAoYU1lc3NhZ2UuR2V0VHlwZSgpKQorICAgIHsKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlSXA2OgorICAgIHsKKyAgICAgICAgSXA2OjpIZWFkZXIgaXA2SGVhZGVyOworCisgICAgICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpOworCisgICAgICAgIGlmICghbWVtY21wKCZpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgbmV0aWYuR2V0TWxlKCkuR2V0TGlua0xvY2FsQWxsVGhyZWFkTm9kZXNBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpIHx8CisgICAgICAgICAgICAhbWVtY21wKCZpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSwgbmV0aWYuR2V0TWxlKCkuR2V0UmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzQWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2NoZWR1bGUgZGlyZWN0IHRyYW5zbWlzc2lvbgorICAgICAgICAgICAgYU1lc3NhZ2UuU2V0RGlyZWN0VHJhbnNtaXNzaW9uKCk7CisKKyAgICAgICAgICAgIGlmIChhTWVzc2FnZS5HZXRTdWJUeXBlKCkgIT0gTWVzc2FnZTo6a1N1YlR5cGVNcGxSZXRyYW5zbWlzc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZXN0aW5lZCBmb3IgYWxsIHNsZWVweSBjaGlsZHJlbgorICAgICAgICAgICAgICAgIGNoaWxkID0gbmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRyZW4oJm51bUNoaWxkcmVuKTsKKworICAgICAgICAgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyBpKyssIGNoaWxkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkgJiYgIWNoaWxkLT5Jc1J4T25XaGVuSWRsZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhTWVzc2FnZS5TZXRDaGlsZE1hc2soaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU291cmNlTWF0Y2hDb250cm9sbGVyLkluY3JlbWVudE1lc3NhZ2VDb3VudCgqY2hpbGQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChuZWlnaGJvciA9IG5ldGlmLkdldE1sZSgpLkdldE5laWdoYm9yKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAhbmVpZ2hib3ItPklzUnhPbldoZW5JZGxlKCkgJiYKKyAgICAgICAgICAgICAgICAgIWFNZXNzYWdlLkdldERpcmVjdFRyYW5zbWlzc2lvbigpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkZXN0aW5lZCBmb3IgYSBzbGVlcHkgY2hpbGQKKyAgICAgICAgICAgIGNoaWxkID0gc3RhdGljX2Nhc3Q8Q2hpbGQgKj4obmVpZ2hib3IpOworICAgICAgICAgICAgYU1lc3NhZ2UuU2V0Q2hpbGRNYXNrKG5ldGlmLkdldE1sZSgpLkdldENoaWxkSW5kZXgoKmNoaWxkKSk7CisgICAgICAgICAgICBtU291cmNlTWF0Y2hDb250cm9sbGVyLkluY3JlbWVudE1lc3NhZ2VDb3VudCgqY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc2NoZWR1bGUgZGlyZWN0IHRyYW5zbWlzc2lvbgorICAgICAgICAgICAgYU1lc3NhZ2UuU2V0RGlyZWN0VHJhbnNtaXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlNmxvd3BhbjoKKyAgICB7CisgICAgICAgIExvd3Bhbjo6TWVzaEhlYWRlciBtZXNoSGVhZGVyOworCisgICAgICAgIElnbm9yZVJldHVyblZhbHVlKG1lc2hIZWFkZXIuSW5pdChhTWVzc2FnZSkpOworCisgICAgICAgIGlmICgobmVpZ2hib3IgPSBuZXRpZi5HZXRNbGUoKS5HZXROZWlnaGJvcihtZXNoSGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKSAhPSBOVUxMICYmCisgICAgICAgICAgICAhbmVpZ2hib3ItPklzUnhPbldoZW5JZGxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRlc3RpbmVkIGZvciBhIHNsZWVweSBjaGlsZAorICAgICAgICAgICAgY2hpbGQgPSBzdGF0aWNfY2FzdDxDaGlsZCAqPihuZWlnaGJvcik7CisgICAgICAgICAgICBhTWVzc2FnZS5TZXRDaGlsZE1hc2sobmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRJbmRleCgqY2hpbGQpKTsKKyAgICAgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuSW5jcmVtZW50TWVzc2FnZUNvdW50KCpjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBub3QgZGVzdGluZWQgZm9yIGEgc2xlZXB5IGNoaWxkCisgICAgICAgICAgICBhTWVzc2FnZS5TZXREaXJlY3RUcmFuc21pc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVNYWNEYXRhUG9sbDoKKyAgICAgICAgYU1lc3NhZ2UuU2V0RGlyZWN0VHJhbnNtaXNzaW9uKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZXNzYWdlOjprVHlwZVN1cGVydmlzaW9uOgorICAgICAgICBjaGlsZCA9IG5ldGlmLkdldENoaWxkU3VwZXJ2aXNvcigpLkdldERlc3RpbmF0aW9uKGFNZXNzYWdlKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNoaWxkICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgIFZlcmlmeU9yRXhpdCghY2hpbGQtPklzUnhPbldoZW5JZGxlKCksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgYU1lc3NhZ2UuU2V0Q2hpbGRNYXNrKG5ldGlmLkdldE1sZSgpLkdldENoaWxkSW5kZXgoKmNoaWxkKSk7CisgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuSW5jcmVtZW50TWVzc2FnZUNvdW50KCpjaGlsZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGFNZXNzYWdlLlNldE9mZnNldCgwKTsKKyAgICBhTWVzc2FnZS5TZXREYXRhZ3JhbVRhZygwKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbVNlbmRRdWV1ZS5FbnF1ZXVlKGFNZXNzYWdlKSk7CisgICAgbVNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzay5Qb3N0KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OlByZXBhcmVEaXNjb3ZlclJlcXVlc3Qodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KCFtU2Nhbm5pbmcpOworCisgICAgbVNjYW5DaGFubmVsID0gT1RfUkFESU9fQ0hBTk5FTF9NSU47CisgICAgbVNjYW5DaGFubmVscyA+Pj0gT1RfUkFESU9fQ0hBTk5FTF9NSU47CisgICAgbVJlc3RvcmVDaGFubmVsID0gbmV0aWYuR2V0TWFjKCkuR2V0Q2hhbm5lbCgpOworICAgIG1SZXN0b3JlUGFuSWQgPSBuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpOworCisgICAgd2hpbGUgKChtU2NhbkNoYW5uZWxzICYgMSkgPT0gMCkKKyAgICB7CisgICAgICAgIG1TY2FuQ2hhbm5lbHMgPj49IDE7CisgICAgICAgIG1TY2FuQ2hhbm5lbCsrOworCisgICAgICAgIGlmIChtU2NhbkNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuSGFuZGxlRGlzY292ZXJDb21wbGV0ZSgpOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICB9CisgICAgfQorCisgICAgbVNjYW5uaW5nID0gdHJ1ZTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK01lc3NhZ2UgKk1lc2hGb3J3YXJkZXI6OkdldERpcmVjdFRyYW5zbWlzc2lvbih2b2lkKQoreworICAgIE1lc3NhZ2UgKmN1ck1lc3NhZ2UsICpuZXh0TWVzc2FnZTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoY3VyTWVzc2FnZSA9IG1TZW5kUXVldWUuR2V0SGVhZCgpOyBjdXJNZXNzYWdlOyBjdXJNZXNzYWdlID0gbmV4dE1lc3NhZ2UpCisgICAgeworICAgICAgICBuZXh0TWVzc2FnZSA9IGN1ck1lc3NhZ2UtPkdldE5leHQoKTsKKworICAgICAgICBpZiAoY3VyTWVzc2FnZS0+R2V0RGlyZWN0VHJhbnNtaXNzaW9uKCkgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjdXJNZXNzYWdlLT5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNZXNzYWdlOjprVHlwZUlwNjoKKyAgICAgICAgICAgIGVycm9yID0gVXBkYXRlSXA2Um91dGUoKmN1ck1lc3NhZ2UpOworCisgICAgICAgICAgICBpZiAoY3VyTWVzc2FnZS0+R2V0U3ViVHlwZSgpID09IE1lc3NhZ2U6OmtTdWJUeXBlTWxlRGlzY292ZXJSZXF1ZXN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yID0gUHJlcGFyZURpc2NvdmVyUmVxdWVzdCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlNmxvd3BhbjoKKyAgICAgICAgICAgIGVycm9yID0gVXBkYXRlTWVzaFJvdXRlKCpjdXJNZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVNYWNEYXRhUG9sbDoKKyAgICAgICAgICAgIEV4aXROb3coKTsKKworICAgICAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlU3VwZXJ2aXNpb246CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1A7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICAgICAgRXhpdE5vdygpOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfQUREUkVTU19RVUVSWToKKyAgICAgICAgICAgIG1TZW5kUXVldWUuRGVxdWV1ZSgqY3VyTWVzc2FnZSk7CisgICAgICAgICAgICBtUmVzb2x2aW5nUXVldWUuRW5xdWV1ZSgqY3VyTWVzc2FnZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIE9UX0VSUk9SX0RST1A6CisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgICAgIG1TZW5kUXVldWUuRGVxdWV1ZSgqY3VyTWVzc2FnZSk7CisgICAgICAgICAgICBjdXJNZXNzYWdlLT5GcmVlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBjdXJNZXNzYWdlOworfQorCitNZXNzYWdlICpNZXNoRm9yd2FyZGVyOjpHZXRJbmRpcmVjdFRyYW5zbWlzc2lvbihDaGlsZCAmYUNoaWxkKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIE1lc3NhZ2UgKm5leHQ7CisgICAgdWludDhfdCBjaGlsZEluZGV4ID0gR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRDaGlsZEluZGV4KGFDaGlsZCk7CisKKyAgICBmb3IgKG1lc3NhZ2UgPSBtU2VuZFF1ZXVlLkdldEhlYWQoKTsgbWVzc2FnZTsgbWVzc2FnZSA9IG5leHQpCisgICAgeworICAgICAgICBuZXh0ID0gbWVzc2FnZS0+R2V0TmV4dCgpOworCisgICAgICAgIGlmIChtZXNzYWdlLT5HZXRDaGlsZE1hc2soY2hpbGRJbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNraXAgYW5kIHJlbW92ZSB0aGUgc3VwZXJ2aXNpb24gbWVzc2FnZSBpZiB0aGVyZSBhcmUgb3RoZXIgbWVzc2FnZXMgcXVldWVkIGZvciB0aGUgY2hpbGQuCisKKyAgICAgICAgICAgIGlmICgobWVzc2FnZS0+R2V0VHlwZSgpID09IE1lc3NhZ2U6OmtUeXBlU3VwZXJ2aXNpb24pICYmIChhQ2hpbGQuR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA+IDEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lc3NhZ2UtPkNsZWFyQ2hpbGRNYXNrKGNoaWxkSW5kZXgpOworICAgICAgICAgICAgICAgIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXIuRGVjcmVtZW50TWVzc2FnZUNvdW50KGFDaGlsZCk7CisgICAgICAgICAgICAgICAgbVNlbmRRdWV1ZS5EZXF1ZXVlKCptZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYUNoaWxkLlNldEluZGlyZWN0TWVzc2FnZShtZXNzYWdlKTsKKyAgICBhQ2hpbGQuU2V0SW5kaXJlY3RGcmFnbWVudE9mZnNldCgwKTsKKyAgICBhQ2hpbGQuUmVzZXRJbmRpcmVjdFR4QXR0ZW1wdHMoKTsKKworICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBNYWM6OkFkZHJlc3MgbWFjQWRkcjsKKworICAgICAgICBMb2dJcDZNZXNzYWdlKGtNZXNzYWdlUHJlcGFyZUluZGlyZWN0LCAqbWVzc2FnZSwgJmFDaGlsZC5HZXRNYWNBZGRyZXNzKG1hY0FkZHIpLCBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpQcmVwYXJlSW5kaXJlY3RUcmFuc21pc3Npb24oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IENoaWxkICZhQ2hpbGQpCit7CisgICAgaWYgKGFDaGlsZC5HZXRJbmRpcmVjdFR4QXR0ZW1wdHMoKSA+IDApCisgICAgeworICAgICAgICBtU2VuZE1lc3NhZ2VJc0FSZXRyYW5zbWlzc2lvbiA9IHRydWU7CisgICAgICAgIG1TZW5kTWVzc2FnZUZyYW1lQ291bnRlciA9IGFDaGlsZC5HZXRJbmRpcmVjdEZyYW1lQ291bnRlcigpOworICAgICAgICBtU2VuZE1lc3NhZ2VLZXlJZCA9IGFDaGlsZC5HZXRJbmRpcmVjdEtleUlkKCk7CisgICAgICAgIG1TZW5kTWVzc2FnZURhdGFTZXF1ZW5jZU51bWJlciA9IGFDaGlsZC5HZXRJbmRpcmVjdERhdGFTZXF1ZW5jZU51bWJlcigpOworICAgIH0KKworICAgIGFNZXNzYWdlLlNldE9mZnNldChhQ2hpbGQuR2V0SW5kaXJlY3RGcmFnbWVudE9mZnNldCgpKTsKKworICAgIHN3aXRjaCAoYU1lc3NhZ2UuR2V0VHlwZSgpKQorICAgIHsKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlSXA2OgorICAgIHsKKyAgICAgICAgSXA2OjpIZWFkZXIgaXA2SGVhZGVyOworCisgICAgICAgIGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpOworCisgICAgICAgIG1BZGRNZXNoSGVhZGVyID0gZmFsc2U7CisgICAgICAgIEdldE1hY1NvdXJjZUFkZHJlc3MoaXA2SGVhZGVyLkdldFNvdXJjZSgpLCBtTWFjU291cmNlKTsKKworICAgICAgICBpZiAoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNMaW5rTG9jYWwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgR2V0TWFjRGVzdGluYXRpb25BZGRyZXNzKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBtTWFjRGVzdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhQ2hpbGQuR2V0TWFjQWRkcmVzcyhtTWFjRGVzdCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlNmxvd3BhbjoKKyAgICB7CisgICAgICAgIExvd3Bhbjo6TWVzaEhlYWRlciBtZXNoSGVhZGVyOworCisgICAgICAgIElnbm9yZVJldHVyblZhbHVlKG1lc2hIZWFkZXIuSW5pdChhTWVzc2FnZSkpOworICAgICAgICBtQWRkTWVzaEhlYWRlciA9IHRydWU7CisgICAgICAgIG1NZXNoRGVzdCA9IG1lc2hIZWFkZXIuR2V0RGVzdGluYXRpb24oKTsKKyAgICAgICAgbU1lc2hTb3VyY2UgPSBtZXNoSGVhZGVyLkdldFNvdXJjZSgpOworICAgICAgICBtTWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgbU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzID0gR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKKyAgICAgICAgbU1hY0Rlc3QubUxlbmd0aCA9IHNpemVvZihtTWFjRGVzdC5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyA9IG1lc2hIZWFkZXIuR2V0RGVzdGluYXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBNZXNzYWdlOjprVHlwZVN1cGVydmlzaW9uOgorICAgICAgICBhQ2hpbGQuR2V0TWFjQWRkcmVzcyhtTWFjRGVzdCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OlVwZGF0ZU1lc2hSb3V0ZShNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIExvd3Bhbjo6TWVzaEhlYWRlciBtZXNoSGVhZGVyOworICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKyAgICB1aW50MTZfdCBuZXh0SG9wOworCisgICAgSWdub3JlUmV0dXJuVmFsdWUobWVzaEhlYWRlci5Jbml0KGFNZXNzYWdlKSk7CisKKyAgICBuZXh0SG9wID0gbmV0aWYuR2V0TWxlKCkuR2V0TmV4dEhvcChtZXNoSGVhZGVyLkdldERlc3RpbmF0aW9uKCkpOworCisgICAgaWYgKG5leHRIb3AgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkKKyAgICB7CisgICAgICAgIG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IobmV4dEhvcCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IobWVzaEhlYWRlci5HZXREZXN0aW5hdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAobmVpZ2hib3IgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICB9CisKKyAgICBtTWFjRGVzdC5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgIG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MgPSBuZWlnaGJvci0+R2V0UmxvYzE2KCk7CisgICAgbU1hY1NvdXJjZS5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyk7CisgICAgbU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzID0gbmV0aWYuR2V0TWFjKCkuR2V0U2hvcnRBZGRyZXNzKCk7CisKKyAgICBtQWRkTWVzaEhlYWRlciA9IHRydWU7CisgICAgbU1lc2hEZXN0ID0gbWVzaEhlYWRlci5HZXREZXN0aW5hdGlvbigpOworICAgIG1NZXNoU291cmNlID0gbWVzaEhlYWRlci5HZXRTb3VyY2UoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6VXBkYXRlSXA2Um91dGUoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6OkhlYWRlciBpcDZIZWFkZXI7CisKKyAgICBtQWRkTWVzaEhlYWRlciA9IGZhbHNlOworCisgICAgYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoaXA2SGVhZGVyKSwgJmlwNkhlYWRlcik7CisKKyAgICBzd2l0Y2ggKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBpZiAoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuSXNMaW5rTG9jYWwoKSB8fCBpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbE11bHRpY2FzdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHZXRNYWNEZXN0aW5hdGlvbkFkZHJlc3MoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCksIG1NYWNEZXN0KTsKKyAgICAgICAgICAgIEdldE1hY1NvdXJjZUFkZHJlc3MoaXA2SGVhZGVyLkdldFNvdXJjZSgpLCBtTWFjU291cmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgaWYgKG5ldGlmLkdldE1sZSgpLklzTWluaW1hbEVuZERldmljZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYU1lc3NhZ2UuSXNMaW5rU2VjdXJpdHlFbmFibGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU1hY0Rlc3QubUxlbmd0aCA9IHNpemVvZihtTWFjRGVzdC5tU2hvcnRBZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbE11bHRpY2FzdCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyA9IE1hYzo6a1Nob3J0QWRkckJyb2FkY2FzdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyA9IG5ldGlmLkdldE1sZSgpLkdldE5leHRIb3AoTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHZXRNYWNTb3VyY2VBZGRyZXNzKGlwNkhlYWRlci5HZXRTb3VyY2UoKSwgbU1hY1NvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpIHx8IGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTGlua0xvY2FsTXVsdGljYXN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR2V0TWFjRGVzdGluYXRpb25BZGRyZXNzKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBtTWFjRGVzdCk7CisgICAgICAgICAgICAgICAgR2V0TWFjU291cmNlQWRkcmVzcyhpcDZIZWFkZXIuR2V0U291cmNlKCksIG1NYWNTb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZfdCBybG9jMTY7CisgICAgICAgICAgICB1aW50MTZfdCBhbG9jMTY7CisgICAgICAgICAgICBOZWlnaGJvciAqbmVpZ2hib3I7CisKKyAgICAgICAgICAgIGlmIChpcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Jc0xpbmtMb2NhbCgpIHx8IGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLklzTXVsdGljYXN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR2V0TWFjRGVzdGluYXRpb25BZGRyZXNzKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBtTWFjRGVzdCk7CisgICAgICAgICAgICAgICAgR2V0TWFjU291cmNlQWRkcmVzcyhpcDZIZWFkZXIuR2V0U291cmNlKCksIG1NYWNTb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXRpZi5HZXRNbGUoKS5Jc1JvdXRpbmdMb2NhdG9yKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJsb2MxNiA9IEhvc3RTd2FwMTYoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tMTZbN10pOworICAgICAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0TWxlKCkuSXNSb3V0ZXJJZFZhbGlkKG5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkKHJsb2MxNikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgICAgICAgICAgICAgbU1lc2hEZXN0ID0gcmxvYzE2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXRpZi5HZXRNbGUoKS5Jc0FueWNhc3RMb2NhdG9yKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFsb2MxNiA9IEhvc3RTd2FwMTYoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkubUZpZWxkcy5tMTZbN10pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhbG9jMTYgPT0gTWxlOjprQWxvYzE2TGVhZGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtTWVzaERlc3QgPSBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYobmV0aWYuR2V0TWxlKCkuR2V0TGVhZGVySWQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUiB8fCBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGFsb2MxNiAmIE1sZTo6a0Fsb2MxNkRoY3BBZ2VudE1hc2spICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFnZW50UmxvYzE2OworICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCByb3V0ZXJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdCgobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRSbG9jQnlDb250ZXh0SWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihhbG9jMTYgJiBNbGU6OmtBbG9jMTZEaGNwQWdlbnRNYXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50UmxvYzE2KSA9PSBPVF9FUlJPUl9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJJZCA9IG5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkKGFnZW50UmxvYzE2KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgYWdlbnQgaXMgYWN0aXZlIHJvdXRlciBvciB0aGUgY2hpbGQgb2YgdGhlIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuZXRpZi5HZXRNbGUoKS5Jc0FjdGl2ZVJvdXRlcihhZ2VudFJsb2MxNikpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNihyb3V0ZXJJZCkgPT0gbmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NZXNoRGVzdCA9IGFnZW50UmxvYzE2OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgcGFyZW50IG9mIHRoZSBFRCBBZ2VudCBhcyBEZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lc2hEZXN0ID0gbmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KHJvdXRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUiB8fCBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IEFMT0MgZm9yIFNlcnZpY2UsIENvbW1pc3Npb25lciwgTmVpZ2hib3IgRGlzY292ZXJ5IEFnZW50CisgICAgICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IoaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkpKSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbU1lc2hEZXN0ID0gbmVpZ2hib3ItPkdldFJsb2MxNigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLklzT25NZXNoKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRBZGRyZXNzUmVzb2x2ZXIoKS5SZXNvbHZlKGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLCBtTWVzaERlc3QpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5Sb3V0ZUxvb2t1cCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXRTb3VyY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwNkhlYWRlci5HZXREZXN0aW5hdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZtTWVzaERlc3QKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQobU1lc2hEZXN0ICE9IE1hYzo6a1Nob3J0QWRkckludmFsaWQsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgICAgICAgICBpZiAobmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IobU1lc2hEZXN0KSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZGVzdGluYXRpb24gaXMgbmVpZ2hib3IKKyAgICAgICAgICAgICAgICAgICAgbU1hY0Rlc3QubUxlbmd0aCA9IHNpemVvZihtTWFjRGVzdC5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyA9IG1NZXNoRGVzdDsKKyAgICAgICAgICAgICAgICAgICAgR2V0TWFjU291cmNlQWRkcmVzcyhpcDZIZWFkZXIuR2V0U291cmNlKCksIG1NYWNTb3VyY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBkZXN0aW5hdGlvbiBpcyBub3QgbmVpZ2hib3IKKyAgICAgICAgICAgICAgICAgICAgbU1lc2hTb3VyY2UgPSBuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKTsKKworICAgICAgICAgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0TWxlKCkuQ2hlY2tSZWFjaGFiaWxpdHkobU1lc2hTb3VyY2UsIG1NZXNoRGVzdCwgaXA2SGVhZGVyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbU1hY0Rlc3QubUxlbmd0aCA9IHNpemVvZihtTWFjRGVzdC5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgbU1hY0Rlc3QubVNob3J0QWRkcmVzcyA9IG5ldGlmLkdldE1sZSgpLkdldE5leHRIb3AobU1lc2hEZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgbU1hY1NvdXJjZS5tTGVuZ3RoID0gc2l6ZW9mKG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgIG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyA9IG1NZXNoU291cmNlOworICAgICAgICAgICAgICAgICAgICBtQWRkTWVzaEhlYWRlciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OlNldFJ4T2ZmKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG5ldGlmLkdldE1hYygpLlNldFJ4T25XaGVuSWRsZShmYWxzZSk7CisgICAgbURhdGFQb2xsTWFuYWdlci5TdG9wUG9sbGluZygpOworICAgIG5ldGlmLkdldFN1cGVydmlzaW9uTGlzdGVuZXIoKS5TdG9wKCk7Cit9CisKK2Jvb2wgTWVzaEZvcndhcmRlcjo6R2V0UnhPbldoZW5JZGxlKHZvaWQpCit7CisgICAgcmV0dXJuIEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0UnhPbldoZW5JZGxlKCk7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6U2V0UnhPbldoZW5JZGxlKGJvb2wgYVJ4T25XaGVuSWRsZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgbmV0aWYuR2V0TWFjKCkuU2V0UnhPbldoZW5JZGxlKGFSeE9uV2hlbklkbGUpOworCisgICAgaWYgKGFSeE9uV2hlbklkbGUpCisgICAgeworICAgICAgICBtRGF0YVBvbGxNYW5hZ2VyLlN0b3BQb2xsaW5nKCk7CisgICAgICAgIG5ldGlmLkdldFN1cGVydmlzaW9uTGlzdGVuZXIoKS5TdG9wKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EYXRhUG9sbE1hbmFnZXIuU3RhcnRQb2xsaW5nKCk7CisgICAgICAgIG5ldGlmLkdldFN1cGVydmlzaW9uTGlzdGVuZXIoKS5TdGFydCgpOworICAgIH0KK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpHZXRNYWNTb3VyY2VBZGRyZXNzKGNvbnN0IElwNjo6QWRkcmVzcyAmYUlwNkFkZHIsIE1hYzo6QWRkcmVzcyAmYU1hY0FkZHIpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIGFNYWNBZGRyLm1MZW5ndGggPSBzaXplb2YoYU1hY0FkZHIubUV4dEFkZHJlc3MpOworICAgIGFNYWNBZGRyLm1FeHRBZGRyZXNzLlNldChhSXA2QWRkcik7CisKKyAgICBpZiAobWVtY21wKCZhTWFjQWRkci5tRXh0QWRkcmVzcywgbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLCBzaXplb2YoYU1hY0FkZHIubUV4dEFkZHJlc3MpKSAhPSAwKQorICAgIHsKKyAgICAgICAgYU1hY0FkZHIubUxlbmd0aCA9IHNpemVvZihhTWFjQWRkci5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYU1hY0FkZHIubVNob3J0QWRkcmVzcyA9IG5ldGlmLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OkdldE1hY0Rlc3RpbmF0aW9uQWRkcmVzcyhjb25zdCBJcDY6OkFkZHJlc3MgJmFJcDZBZGRyLCBNYWM6OkFkZHJlc3MgJmFNYWNBZGRyKQoreworICAgIGlmIChhSXA2QWRkci5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgYU1hY0FkZHIubUxlbmd0aCA9IHNpemVvZihhTWFjQWRkci5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYU1hY0FkZHIubVNob3J0QWRkcmVzcyA9IE1hYzo6a1Nob3J0QWRkckJyb2FkY2FzdDsKKyAgICB9CisgICAgZWxzZSBpZiAoYUlwNkFkZHIubUZpZWxkcy5tMTZbMF0gPT0gSG9zdFN3YXAxNigweGZlODApICYmCisgICAgICAgICAgICAgYUlwNkFkZHIubUZpZWxkcy5tMTZbMV0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmCisgICAgICAgICAgICAgYUlwNkFkZHIubUZpZWxkcy5tMTZbMl0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmCisgICAgICAgICAgICAgYUlwNkFkZHIubUZpZWxkcy5tMTZbM10gPT0gSG9zdFN3YXAxNigweDAwMDApICYmCisgICAgICAgICAgICAgYUlwNkFkZHIubUZpZWxkcy5tMTZbNF0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmCisgICAgICAgICAgICAgYUlwNkFkZHIubUZpZWxkcy5tMTZbNV0gPT0gSG9zdFN3YXAxNigweDAwZmYpICYmCisgICAgICAgICAgICAgYUlwNkFkZHIubUZpZWxkcy5tMTZbNl0gPT0gSG9zdFN3YXAxNigweGZlMDApKQorICAgIHsKKyAgICAgICAgYU1hY0FkZHIubUxlbmd0aCA9IHNpemVvZihhTWFjQWRkci5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYU1hY0FkZHIubVNob3J0QWRkcmVzcyA9IEhvc3RTd2FwMTYoYUlwNkFkZHIubUZpZWxkcy5tMTZbN10pOworICAgIH0KKyAgICBlbHNlIGlmIChHZXROZXRpZigpLkdldE1sZSgpLklzUm91dGluZ0xvY2F0b3IoYUlwNkFkZHIpKQorICAgIHsKKyAgICAgICAgYU1hY0FkZHIubUxlbmd0aCA9IHNpemVvZihhTWFjQWRkci5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYU1hY0FkZHIubVNob3J0QWRkcmVzcyA9IEhvc3RTd2FwMTYoYUlwNkFkZHIubUZpZWxkcy5tMTZbN10pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhTWFjQWRkci5tTGVuZ3RoID0gc2l6ZW9mKGFNYWNBZGRyLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgYU1hY0FkZHIubUV4dEFkZHJlc3MuU2V0KGFJcDZBZGRyKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNZXNoRm9yd2FyZGVyOjpIYW5kbGVGcmFtZVJlcXVlc3QoTWFjOjpTZW5kZXIgJmFTZW5kZXIsIE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICByZXR1cm4gR2V0T3duZXIoYVNlbmRlcikuSGFuZGxlRnJhbWVSZXF1ZXN0KGFGcmFtZSk7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6SGFuZGxlRnJhbWVSZXF1ZXN0KE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1hYzo6QWRkcmVzcyBtYWNEZXN0OworICAgIENoaWxkICpjaGlsZCA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQobUVuYWJsZWQsIGVycm9yID0gT1RfRVJST1JfQUJPUlQpOworCisgICAgbVNlbmRCdXN5ID0gdHJ1ZTsKKworICAgIGlmIChtU2VuZE1lc3NhZ2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFNlbmRFbXB0eUZyYW1lKGFGcmFtZSwgZmFsc2UpOworICAgICAgICBhRnJhbWUuU2V0SXNBUmV0cmFuc21pc3Npb24oZmFsc2UpOworICAgICAgICBhRnJhbWUuU2V0TWF4VHhBdHRlbXB0cyhNYWM6OmtEaXJlY3RGcmFtZU1hY1R4QXR0ZW1wdHMpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgc3dpdGNoIChtU2VuZE1lc3NhZ2UtPkdldFR5cGUoKSkKKyAgICB7CisgICAgY2FzZSBNZXNzYWdlOjprVHlwZUlwNjoKKyAgICAgICAgaWYgKG1TZW5kTWVzc2FnZS0+R2V0U3ViVHlwZSgpID09IE1lc3NhZ2U6OmtTdWJUeXBlTWxlRGlzY292ZXJSZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRDaGFubmVsKG1TY2FuQ2hhbm5lbCk7CisgICAgICAgICAgICBhRnJhbWUuU2V0Q2hhbm5lbChtU2NhbkNoYW5uZWwpOworCisgICAgICAgICAgICAvLyBJbiBjYXNlIGEgc3BlY2lmaWMgUEFOIElEIG9mIGEgVGhyZWFkIE5ldHdvcmsgdG8gYmUgZGlzY292ZXJlZCBpcyBub3Qga25vd24sIERpc2NvdmVyeQorICAgICAgICAgICAgLy8gUmVxdWVzdCBtZXNzYWdlcyBNVVNUIGhhdmUgdGhlIERlc3RpbmF0aW9uIFBBTiBJRCBpbiB0aGUgSUVFRSA4MDIuMTUuNCBNQUMgaGVhZGVyIHNldAorICAgICAgICAgICAgLy8gdG8gYmUgdGhlIEJyb2FkY2FzdCBQQU4gSUQgKDB4RkZGRikgYW5kIHRoZSBTb3VyY2UgUEFOIElEIHNldCB0byBhIHJhbmRvbWx5IGdlbmVyYXRlZAorICAgICAgICAgICAgLy8gdmFsdWUuCisgICAgICAgICAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXRQYW5JZCgpID09IE1hYzo6a1BhbklkQnJvYWRjYXN0ICYmCisgICAgICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSA9PSBNYWM6OmtQYW5JZEJyb2FkY2FzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50MTZfdCBwYW5pZDsKKworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYW5pZCA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChwYW5pZCA9PSBNYWM6OmtQYW5JZEJyb2FkY2FzdCk7CisKKyAgICAgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChwYW5pZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IFNlbmRGcmFnbWVudCgqbVNlbmRNZXNzYWdlLCBhRnJhbWUpOworCisgICAgICAgIC8vIGBTZW5kRnJhZ21lbnQoKWAgZmFpbHMgd2l0aCBgTm90Q2FwYWJsZWAgZXJyb3IgaWYgdGhlIG1lc3NhZ2UgaXMgTUxFICh3aXRoCisgICAgICAgIC8vIG5vIGxpbmsgbGF5ZXIgc2VjdXJpdHkpIGFuZCBhbHNvIHJlcXVpcmVzIGZyYWdtZW50YXRpb24uCisgICAgICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT1RfQ0FQQUJMRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5hYmxlIHNlY3VyaXR5IGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UtPlNldExpbmtTZWN1cml0eUVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBlcnJvciA9IFNlbmRGcmFnbWVudCgqbVNlbmRNZXNzYWdlLCBhRnJhbWUpOworICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0KGFGcmFtZS5HZXRMZW5ndGgoKSAhPSA3KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtUeXBlNmxvd3BhbjoKKyAgICAgICAgZXJyb3IgPSBTZW5kTWVzaCgqbVNlbmRNZXNzYWdlLCBhRnJhbWUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVNYWNEYXRhUG9sbDoKKyAgICAgICAgZXJyb3IgPSBTZW5kUG9sbCgqbVNlbmRNZXNzYWdlLCBhRnJhbWUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVzc2FnZTo6a1R5cGVTdXBlcnZpc2lvbjoKKyAgICAgICAgZXJyb3IgPSBTZW5kRW1wdHlGcmFtZShhRnJhbWUsIGtTdXBlcnZpc2lvbk1zZ0Fja1JlcXVlc3QpOworICAgICAgICBtTWVzc2FnZU5leHRPZmZzZXQgPSBtU2VuZE1lc3NhZ2UtPkdldExlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhc3NlcnQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBhRnJhbWUuR2V0RHN0QWRkcihtYWNEZXN0KTsKKworICAgIC8vIFNldCBgRnJhbWVQZW5kaW5nYCBpZiB0aGVyZSBhcmUgbW9yZSBxdWV1ZWQgbWVzc2FnZXMgKGV4Y2x1ZGluZworICAgIC8vIHRoZSBjdXJyZW50IG9uZSBiZWluZyBzZW50IG91dCkgZm9yIHRoZSBjaGlsZCAobm90ZSBgPiAxYCBjaGVjaykuCisgICAgLy8gVGhlIGNhc2Ugd2hlcmUgdGhlIGN1cnJlbnQgbWVzc2FnZSByZXF1aXJlcyBmcmFnbWVudGF0aW9uIGlzCisgICAgLy8gYWxyZWFkeSBjaGVja2VkIGFuZCBoYW5kbGVkIGluIGBTZW5kRnJhZ21lbnQoKWAgbWV0aG9kLgorCisgICAgaWYgKCgoY2hpbGQgPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZChtYWNEZXN0KSkgIT0gTlVMTCkKKyAgICAgICAgJiYgIWNoaWxkLT5Jc1J4T25XaGVuSWRsZSgpCisgICAgICAgICYmIChjaGlsZC0+R2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA+IDEpKQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldEZyYW1lUGVuZGluZyh0cnVlKTsKKyAgICB9CisKKyAgICBhRnJhbWUuU2V0SXNBUmV0cmFuc21pc3Npb24obVNlbmRNZXNzYWdlSXNBUmV0cmFuc21pc3Npb24pOworICAgIGFGcmFtZS5TZXRNYXhUeEF0dGVtcHRzKG1TZW5kTWVzc2FnZU1heE1hY1R4QXR0ZW1wdHMpOworCisgICAgaWYgKG1TZW5kTWVzc2FnZUlzQVJldHJhbnNtaXNzaW9uKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgcmUtdHJhbnNtaXNzaW9uIG9mIGFuIGluZGlyZWN0IGZyYW1lIHRvIGEgc2xlZXB5IGNoaWxkLCB3ZQorICAgICAgICAvLyBlbnN1cmUgdG8gdXNlIHRoZSBzYW1lIGZyYW1lIGNvdW50ZXIsIGtleSBpZCwgYW5kIGRhdGEgc2VxdWVuY2UgbnVtYmVyIGFzCisgICAgICAgIC8vIHRoZSBsYXN0IGF0dGVtcHQuCisKKyAgICAgICAgYUZyYW1lLlNldFNlcXVlbmNlKG1TZW5kTWVzc2FnZURhdGFTZXF1ZW5jZU51bWJlcik7CisKKyAgICAgICAgaWYgKGFGcmFtZS5HZXRTZWN1cml0eUVuYWJsZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYUZyYW1lLlNldEZyYW1lQ291bnRlcihtU2VuZE1lc3NhZ2VGcmFtZUNvdW50ZXIpOworICAgICAgICAgICAgYUZyYW1lLlNldEtleUlkKG1TZW5kTWVzc2FnZUtleUlkKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U2VuZFBvbGwoTWVzc2FnZSAmYU1lc3NhZ2UsIE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIE1hYzo6QWRkcmVzcyBtYWNTb3VyY2U7CisgICAgdWludDE2X3QgZmNmOworICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKworICAgIG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzID0gbmV0aWYuR2V0TWFjKCkuR2V0U2hvcnRBZGRyZXNzKCk7CisKKyAgICBpZiAobWFjU291cmNlLm1TaG9ydEFkZHJlc3MgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkKKyAgICB7CisgICAgICAgIG1hY1NvdXJjZS5tTGVuZ3RoID0gc2l6ZW9mKG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWFjU291cmNlLm1MZW5ndGggPSBzaXplb2YobWFjU291cmNlLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgbWVtY3B5KCZtYWNTb3VyY2UubUV4dEFkZHJlc3MsIG5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKG1hY1NvdXJjZS5tRXh0QWRkcmVzcykpOworICAgIH0KKworICAgIC8vIGluaXRpYWxpemUgTUFDIGhlYWRlcgorICAgIGZjZiA9IE1hYzo6RnJhbWU6OmtGY2ZGcmFtZU1hY0NtZCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uIHwgTWFjOjpGcmFtZTo6a0ZjZkZyYW1lVmVyc2lvbjIwMDY7CisKKyAgICBpZiAobWFjU291cmNlLm1MZW5ndGggPT0gc2l6ZW9mKE1hYzo6U2hvcnRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIGZjZiB8PSBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyRXh0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ7CisgICAgfQorCisgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZBY2tSZXF1ZXN0IHwgTWFjOjpGcmFtZTo6a0ZjZlNlY3VyaXR5RW5hYmxlZDsKKworICAgIGFGcmFtZS5Jbml0TWFjSGVhZGVyKGZjZiwgTWFjOjpGcmFtZTo6a0tleUlkTW9kZTEgfCBNYWM6OkZyYW1lOjprU2VjRW5jTWljMzIpOworICAgIGFGcmFtZS5TZXREc3RQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpKTsKKworICAgIG5laWdoYm9yID0gbmV0aWYuR2V0TWxlKCkuR2V0UGFyZW50KCk7CisgICAgYXNzZXJ0KG5laWdoYm9yICE9IE5VTEwpOworCisgICAgaWYgKG1hY1NvdXJjZS5tTGVuZ3RoID09IDIpCisgICAgeworICAgICAgICBhRnJhbWUuU2V0RHN0QWRkcihuZWlnaGJvci0+R2V0UmxvYzE2KCkpOworICAgICAgICBhRnJhbWUuU2V0U3JjQWRkcihtYWNTb3VyY2UubVNob3J0QWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXREc3RBZGRyKG5laWdoYm9yLT5HZXRFeHRBZGRyZXNzKCkpOworICAgICAgICBhRnJhbWUuU2V0U3JjQWRkcihtYWNTb3VyY2UubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIGFGcmFtZS5TZXRDb21tYW5kSWQoTWFjOjpGcmFtZTo6a01hY0NtZERhdGFSZXF1ZXN0KTsKKworICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IGFNZXNzYWdlLkdldExlbmd0aCgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U2VuZE1lc2goTWVzc2FnZSAmYU1lc3NhZ2UsIE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIHVpbnQxNl90IGZjZjsKKworICAgIC8vIGluaXRpYWxpemUgTUFDIGhlYWRlcgorICAgIGZjZiA9IE1hYzo6RnJhbWU6OmtGY2ZGcmFtZURhdGEgfCBNYWM6OkZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbiB8IE1hYzo6RnJhbWU6OmtGY2ZGcmFtZVZlcnNpb24yMDA2IHwKKyAgICAgICAgICBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCB8CisgICAgICAgICAgTWFjOjpGcmFtZTo6a0ZjZkFja1JlcXVlc3QgfCBNYWM6OkZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkOworCisgICAgYUZyYW1lLkluaXRNYWNIZWFkZXIoZmNmLCBNYWM6OkZyYW1lOjprS2V5SWRNb2RlMSB8IE1hYzo6RnJhbWU6OmtTZWNFbmNNaWMzMik7CisgICAgYUZyYW1lLlNldERzdFBhbklkKG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpOworICAgIGFGcmFtZS5TZXREc3RBZGRyKG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgIGFGcmFtZS5TZXRTcmNBZGRyKG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyk7CisKKyAgICAvLyB3cml0ZSBwYXlsb2FkCisgICAgYXNzZXJ0KGFNZXNzYWdlLkdldExlbmd0aCgpIDw9IGFGcmFtZS5HZXRNYXhQYXlsb2FkTGVuZ3RoKCkpOworICAgIGFNZXNzYWdlLlJlYWQoMCwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCksIGFGcmFtZS5HZXRQYXlsb2FkKCkpOworICAgIGFGcmFtZS5TZXRQYXlsb2FkTGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFNZXNzYWdlLkdldExlbmd0aCgpKSk7CisKKyAgICBtTWVzc2FnZU5leHRPZmZzZXQgPSBhTWVzc2FnZS5HZXRMZW5ndGgoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1lc2hGb3J3YXJkZXI6OlNlbmRGcmFnbWVudChNZXNzYWdlICZhTWVzc2FnZSwgTWFjOjpGcmFtZSAmYUZyYW1lKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWFjOjpBZGRyZXNzIG1lc2hEZXN0LCBtZXNoU291cmNlOworICAgIHVpbnQxNl90IGZjZjsKKyAgICBMb3dwYW46OkZyYWdtZW50SGVhZGVyICpmcmFnbWVudEhlYWRlcjsKKyAgICBMb3dwYW46Ok1lc2hIZWFkZXIgbWVzaEhlYWRlcjsKKyAgICB1aW50OF90ICpwYXlsb2FkOworICAgIHVpbnQ4X3QgaGVhZGVyTGVuZ3RoOworICAgIHVpbnQ4X3QgaG9wc0xlZnQ7CisgICAgdWludDE2X3QgcGF5bG9hZExlbmd0aDsKKyAgICBpbnQgaGNMZW5ndGg7CisgICAgdWludDE2X3QgZnJhZ21lbnRMZW5ndGg7CisgICAgdWludDE2X3QgZHN0cGFuOworICAgIHVpbnQ4X3Qgc2VjQ3RsID0gTWFjOjpGcmFtZTo6a1NlY05vbmU7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAobUFkZE1lc2hIZWFkZXIpCisgICAgeworICAgICAgICBtZXNoU291cmNlLm1MZW5ndGggPSBzaXplb2YobWVzaFNvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgbWVzaFNvdXJjZS5tU2hvcnRBZGRyZXNzID0gbU1lc2hTb3VyY2U7CisgICAgICAgIG1lc2hEZXN0Lm1MZW5ndGggPSBzaXplb2YobWVzaERlc3QubVNob3J0QWRkcmVzcyk7CisgICAgICAgIG1lc2hEZXN0Lm1TaG9ydEFkZHJlc3MgPSBtTWVzaERlc3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lc2hEZXN0ID0gbU1hY0Rlc3Q7CisgICAgICAgIG1lc2hTb3VyY2UgPSBtTWFjU291cmNlOworICAgIH0KKworICAgIC8vIGluaXRpYWxpemUgTUFDIGhlYWRlcgorICAgIGZjZiA9IE1hYzo6RnJhbWU6OmtGY2ZGcmFtZURhdGEgfCBNYWM6OkZyYW1lOjprRmNmRnJhbWVWZXJzaW9uMjAwNjsKKyAgICBmY2YgfD0gKG1NYWNEZXN0Lm1MZW5ndGggPT0gMikgPyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IDogTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQ7CisgICAgZmNmIHw9IChtTWFjU291cmNlLm1MZW5ndGggPT0gMikgPyBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0IDogTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ7CisKKyAgICAvLyBhbGwgdW5pY2FzdCBmcmFtZXMgcmVxdWVzdCBBQ0sKKyAgICBpZiAobU1hY0Rlc3QubUxlbmd0aCA9PSA4IHx8IG1NYWNEZXN0Lm1TaG9ydEFkZHJlc3MgIT0gTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0KQorICAgIHsKKyAgICAgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZBY2tSZXF1ZXN0OworICAgIH0KKworICAgIGlmIChhTWVzc2FnZS5Jc0xpbmtTZWN1cml0eUVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIGZjZiB8PSBNYWM6OkZyYW1lOjprRmNmU2VjdXJpdHlFbmFibGVkOworCisgICAgICAgIHN3aXRjaCAoYU1lc3NhZ2UuR2V0U3ViVHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTWVzc2FnZTo6a1N1YlR5cGVKb2luZXJFbnRydXN0OgorICAgICAgICAgICAgc2VjQ3RsID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oTWFjOjpGcmFtZTo6a0tleUlkTW9kZTApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNZXNzYWdlOjprU3ViVHlwZU1sZUFubm91bmNlOgorICAgICAgICAgICAgc2VjQ3RsID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oTWFjOjpGcmFtZTo6a0tleUlkTW9kZTIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlY0N0bCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KE1hYzo6RnJhbWU6OmtLZXlJZE1vZGUxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc2VjQ3RsIHw9IE1hYzo6RnJhbWU6OmtTZWNFbmNNaWMzMjsKKyAgICB9CisKKyAgICBkc3RwYW4gPSBuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpOworCisgICAgc3dpdGNoIChhTWVzc2FnZS5HZXRTdWJUeXBlKCkpCisgICAgeworICAgIGNhc2UgTWVzc2FnZTo6a1N1YlR5cGVNbGVBbm5vdW5jZToKKyAgICAgICAgYUZyYW1lLlNldENoYW5uZWwoYU1lc3NhZ2UuR2V0Q2hhbm5lbCgpKTsKKyAgICAgICAgZHN0cGFuID0gTWFjOjprUGFuSWRCcm9hZGNhc3Q7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZXNzYWdlOjprU3ViVHlwZU1sZURpc2NvdmVyUmVxdWVzdDoKKyAgICBjYXNlIE1lc3NhZ2U6OmtTdWJUeXBlTWxlRGlzY292ZXJSZXNwb25zZToKKyAgICAgICAgZHN0cGFuID0gYU1lc3NhZ2UuR2V0UGFuSWQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoZHN0cGFuID09IG5ldGlmLkdldE1hYygpLkdldFBhbklkKCkpCisgICAgeworICAgICAgICBmY2YgfD0gTWFjOjpGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb247CisgICAgfQorCisgICAgYUZyYW1lLkluaXRNYWNIZWFkZXIoZmNmLCBzZWNDdGwpOworICAgIGFGcmFtZS5TZXREc3RQYW5JZChkc3RwYW4pOworICAgIGFGcmFtZS5TZXRTcmNQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpKTsKKworICAgIGlmIChtTWFjRGVzdC5tTGVuZ3RoID09IDIpCisgICAgeworICAgICAgICBhRnJhbWUuU2V0RHN0QWRkcihtTWFjRGVzdC5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldERzdEFkZHIobU1hY0Rlc3QubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIGlmIChtTWFjU291cmNlLm1MZW5ndGggPT0gMikKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXRTcmNBZGRyKG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXRTcmNBZGRyKG1NYWNTb3VyY2UubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIHBheWxvYWQgPSBhRnJhbWUuR2V0UGF5bG9hZCgpOworCisgICAgaGVhZGVyTGVuZ3RoID0gMDsKKworICAgIC8vIGluaXRpYWxpemUgTWVzaCBoZWFkZXIKKyAgICBpZiAobUFkZE1lc2hIZWFkZXIpCisgICAgeworICAgICAgICBpZiAobmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSRUVEIHNldHMgaG9wc0xlZnQgdG8gbWF4ICgxNikgKyAxLiBJdCBkb2VzIG5vdCBrbm93IHRoZSByb3V0ZSBjb3N0LgorICAgICAgICAgICAgaG9wc0xlZnQgPSBNbGU6OmtNYXhSb3V0ZUNvc3QgKyAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcHJlZGljdGVkIGhvcHMuCisgICAgICAgICAgICBob3BzTGVmdCA9IG5ldGlmLkdldE1sZSgpLkdldFJvdXRlQ29zdChtTWVzaERlc3QpOworCisgICAgICAgICAgICBpZiAoaG9wc0xlZnQgIT0gTWxlOjprTWF4Um91dGVDb3N0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhvcHNMZWZ0ICs9IG5ldGlmLkdldE1sZSgpLkdldExpbmtDb3N0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJJZChuZXRpZi5HZXRNbGUoKS5HZXROZXh0SG9wKG1NZXNoRGVzdCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHJvdXRlIHRvIHRoZSBkZXN0aW5hdGlvbiByb3V0ZXIgKG9ubHkgbGluaykuCisgICAgICAgICAgICAgICAgaG9wc0xlZnQgPSBuZXRpZi5HZXRNbGUoKS5HZXRMaW5rQ29zdChuZXRpZi5HZXRNbGUoKS5HZXRSb3V0ZXJJZChtTWVzaERlc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGhvcHNMZnQgZmllbGQgTVVTVCBiZSBpbmNyZW1lbnRlZCBieSBvbmUgaWYgdGhlIGRlc3RpbmF0aW9uIFJMT0MxNgorICAgICAgICAvLyBpcyBub3QgdGhhdCBvZiBhbiBhY3RpdmUgUm91dGVyLgorICAgICAgICBpZiAoIW5ldGlmLkdldE1sZSgpLklzQWN0aXZlUm91dGVyKG1NZXNoRGVzdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhvcHNMZWZ0ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBtZXNoSGVhZGVyLkluaXQoKTsKKyAgICAgICAgbWVzaEhlYWRlci5TZXRIb3BzTGVmdChob3BzTGVmdCArIExvd3Bhbjo6TWVzaEhlYWRlcjo6a0FkZGl0aW9uYWxIb3BzTGVmdCk7CisgICAgICAgIG1lc2hIZWFkZXIuU2V0U291cmNlKG1NZXNoU291cmNlKTsKKyAgICAgICAgbWVzaEhlYWRlci5TZXREZXN0aW5hdGlvbihtTWVzaERlc3QpOworICAgICAgICBtZXNoSGVhZGVyLkFwcGVuZFRvKHBheWxvYWQpOworICAgICAgICBwYXlsb2FkICs9IG1lc2hIZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCk7CisgICAgICAgIGhlYWRlckxlbmd0aCArPSBtZXNoSGVhZGVyLkdldEhlYWRlckxlbmd0aCgpOworICAgIH0KKworICAgIC8vIGNvcHkgSVB2NiBIZWFkZXIKKyAgICBpZiAoYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgPT0gMCkKKyAgICB7CisgICAgICAgIGhjTGVuZ3RoID0gbmV0aWYuR2V0TG93cGFuKCkuQ29tcHJlc3MoYU1lc3NhZ2UsIG1lc2hTb3VyY2UsIG1lc2hEZXN0LCBwYXlsb2FkKTsKKyAgICAgICAgYXNzZXJ0KGhjTGVuZ3RoID4gMCk7CisgICAgICAgIGhlYWRlckxlbmd0aCArPSBzdGF0aWNfY2FzdDx1aW50OF90PihoY0xlbmd0aCk7CisKKyAgICAgICAgcGF5bG9hZExlbmd0aCA9IGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCk7CisKKyAgICAgICAgZnJhZ21lbnRMZW5ndGggPSBhRnJhbWUuR2V0TWF4UGF5bG9hZExlbmd0aCgpIC0gaGVhZGVyTGVuZ3RoOworCisgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID4gZnJhZ21lbnRMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoIWFNZXNzYWdlLklzTGlua1NlY3VyaXR5RW5hYmxlZCgpKSAmJiBhTWVzc2FnZS5Jc1N1YlR5cGVNbGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhTWVzc2FnZS5TZXRPZmZzZXQoMCk7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PVF9DQVBBQkxFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gd3JpdGUgRnJhZ21lbnQgaGVhZGVyCisgICAgICAgICAgICBpZiAoYU1lc3NhZ2UuR2V0RGF0YWdyYW1UYWcoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGF2b2lkIHVzaW5nIGRhdGFncmFtIHRhZyB2YWx1ZSAwLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHRhZyBoYXMgbm90IGJlZW4gc2V0CisgICAgICAgICAgICAgICAgaWYgKG1GcmFnVGFnID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtRnJhZ1RhZysrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFNZXNzYWdlLlNldERhdGFncmFtVGFnKG1GcmFnVGFnKyspOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZW1tb3ZlKHBheWxvYWQgKyA0LCBwYXlsb2FkLCBoZWFkZXJMZW5ndGgpOworCisgICAgICAgICAgICBwYXlsb2FkTGVuZ3RoID0gKGFGcmFtZS5HZXRNYXhQYXlsb2FkTGVuZ3RoKCkgLSBoZWFkZXJMZW5ndGggLSA0KSAmIH4weDc7CisKKyAgICAgICAgICAgIGZyYWdtZW50SGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KHBheWxvYWQpOworICAgICAgICAgICAgZnJhZ21lbnRIZWFkZXItPkluaXQoKTsKKyAgICAgICAgICAgIGZyYWdtZW50SGVhZGVyLT5TZXREYXRhZ3JhbVNpemUoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgZnJhZ21lbnRIZWFkZXItPlNldERhdGFncmFtVGFnKGFNZXNzYWdlLkdldERhdGFncmFtVGFnKCkpOworICAgICAgICAgICAgZnJhZ21lbnRIZWFkZXItPlNldERhdGFncmFtT2Zmc2V0KDApOworCisgICAgICAgICAgICBwYXlsb2FkICs9IGZyYWdtZW50SGVhZGVyLT5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICAgICAgICAgIGhlYWRlckxlbmd0aCArPSBmcmFnbWVudEhlYWRlci0+R2V0SGVhZGVyTGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBwYXlsb2FkICs9IGhjTGVuZ3RoOworCisgICAgICAgIC8vIGNvcHkgSVB2NiBQYXlsb2FkCisgICAgICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHBheWxvYWRMZW5ndGgsIHBheWxvYWQpOworICAgICAgICBhRnJhbWUuU2V0UGF5bG9hZExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihoZWFkZXJMZW5ndGggKyBwYXlsb2FkTGVuZ3RoKSk7CisKKyAgICAgICAgbU1lc3NhZ2VOZXh0T2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgKyBwYXlsb2FkTGVuZ3RoOworICAgICAgICBhTWVzc2FnZS5TZXRPZmZzZXQoMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBheWxvYWRMZW5ndGggPSBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIGFNZXNzYWdlLkdldE9mZnNldCgpOworCisgICAgICAgIC8vIHdyaXRlIEZyYWdtZW50IGhlYWRlcgorICAgICAgICBmcmFnbWVudEhlYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TG93cGFuOjpGcmFnbWVudEhlYWRlciAqPihwYXlsb2FkKTsKKyAgICAgICAgZnJhZ21lbnRIZWFkZXItPkluaXQoKTsKKyAgICAgICAgZnJhZ21lbnRIZWFkZXItPlNldERhdGFncmFtU2l6ZShhTWVzc2FnZS5HZXRMZW5ndGgoKSk7CisgICAgICAgIGZyYWdtZW50SGVhZGVyLT5TZXREYXRhZ3JhbVRhZyhhTWVzc2FnZS5HZXREYXRhZ3JhbVRhZygpKTsKKyAgICAgICAgZnJhZ21lbnRIZWFkZXItPlNldERhdGFncmFtT2Zmc2V0KGFNZXNzYWdlLkdldE9mZnNldCgpKTsKKworICAgICAgICBwYXlsb2FkICs9IGZyYWdtZW50SGVhZGVyLT5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICAgICAgaGVhZGVyTGVuZ3RoICs9IGZyYWdtZW50SGVhZGVyLT5HZXRIZWFkZXJMZW5ndGgoKTsKKworICAgICAgICBmcmFnbWVudExlbmd0aCA9IChhRnJhbWUuR2V0TWF4UGF5bG9hZExlbmd0aCgpIC0gaGVhZGVyTGVuZ3RoKSAmIH4weDc7CisKKyAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPiBmcmFnbWVudExlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcGF5bG9hZExlbmd0aCA9IGZyYWdtZW50TGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgLy8gY29weSBJUHY2IFBheWxvYWQKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgcGF5bG9hZExlbmd0aCwgcGF5bG9hZCk7CisgICAgICAgIGFGcmFtZS5TZXRQYXlsb2FkTGVuZ3RoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGhlYWRlckxlbmd0aCArIHBheWxvYWRMZW5ndGgpKTsKKworICAgICAgICBtTWVzc2FnZU5leHRPZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKSArIHBheWxvYWRMZW5ndGg7CisgICAgfQorCisgICAgaWYgKG1NZXNzYWdlTmV4dE9mZnNldCA8IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldEZyYW1lUGVuZGluZyh0cnVlKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6U2VuZEVtcHR5RnJhbWUoTWFjOjpGcmFtZSAmYUZyYW1lLCBib29sIGFBY2tSZXF1ZXN0KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgdWludDE2X3QgZmNmOworICAgIHVpbnQ4X3Qgc2VjQ3RsOworICAgIE1hYzo6QWRkcmVzcyBtYWNTb3VyY2U7CisKKyAgICBtYWNTb3VyY2UubVNob3J0QWRkcmVzcyA9IG5ldGlmLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpOworCisgICAgaWYgKG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzICE9IE1hYzo6a1Nob3J0QWRkckludmFsaWQpCisgICAgeworICAgICAgICBtYWNTb3VyY2UubUxlbmd0aCA9IHNpemVvZihtYWNTb3VyY2UubVNob3J0QWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1hY1NvdXJjZS5tTGVuZ3RoID0gc2l6ZW9mKG1hY1NvdXJjZS5tRXh0QWRkcmVzcyk7CisgICAgICAgIG1lbWNweSgmbWFjU291cmNlLm1FeHRBZGRyZXNzLCBuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihtYWNTb3VyY2UubUV4dEFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBmY2YgPSBNYWM6OkZyYW1lOjprRmNmRnJhbWVEYXRhIHwgTWFjOjpGcmFtZTo6a0ZjZkZyYW1lVmVyc2lvbjIwMDY7CisgICAgZmNmIHw9IChtTWFjRGVzdC5tTGVuZ3RoID09IDIpID8gTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydCA6IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyRXh0OworICAgIGZjZiB8PSAobWFjU291cmNlLm1MZW5ndGggPT0gMikgPyBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0IDogTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJFeHQ7CisKKyAgICBpZiAoYUFja1JlcXVlc3QpCisgICAgeworICAgICAgICBmY2YgfD0gTWFjOjpGcmFtZTo6a0ZjZkFja1JlcXVlc3Q7CisgICAgfQorCisgICAgZmNmIHw9IE1hYzo6RnJhbWU6OmtGY2ZTZWN1cml0eUVuYWJsZWQ7CisgICAgc2VjQ3RsID0gTWFjOjpGcmFtZTo6a0tleUlkTW9kZTE7CisgICAgc2VjQ3RsIHw9IE1hYzo6RnJhbWU6OmtTZWNFbmNNaWMzMjsKKworICAgIGZjZiB8PSBNYWM6OkZyYW1lOjprRmNmUGFuaWRDb21wcmVzc2lvbjsKKworICAgIGFGcmFtZS5Jbml0TWFjSGVhZGVyKGZjZiwgc2VjQ3RsKTsKKworICAgIGFGcmFtZS5TZXREc3RQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpKTsKKyAgICBhRnJhbWUuU2V0U3JjUGFuSWQobmV0aWYuR2V0TWFjKCkuR2V0UGFuSWQoKSk7CisKKyAgICBpZiAobU1hY0Rlc3QubUxlbmd0aCA9PSAyKQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldERzdEFkZHIobU1hY0Rlc3QubVNob3J0QWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXREc3RBZGRyKG1NYWNEZXN0Lm1FeHRBZGRyZXNzKTsKKyAgICB9CisKKyAgICBpZiAobWFjU291cmNlLm1MZW5ndGggPT0gMikKKyAgICB7CisgICAgICAgIGFGcmFtZS5TZXRTcmNBZGRyKG1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUZyYW1lLlNldFNyY0FkZHIobWFjU291cmNlLm1FeHRBZGRyZXNzKTsKKyAgICB9CisKKyAgICBhRnJhbWUuU2V0UGF5bG9hZExlbmd0aCgwKTsKKyAgICBhRnJhbWUuU2V0RnJhbWVQZW5kaW5nKGZhbHNlKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZVNlbnRGcmFtZShNYWM6OlNlbmRlciAmYVNlbmRlciwgTWFjOjpGcmFtZSAmYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBHZXRPd25lcihhU2VuZGVyKS5IYW5kbGVTZW50RnJhbWUoYUZyYW1lLCBhRXJyb3IpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZVNlbnRGcmFtZShNYWM6OkZyYW1lICZhRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWFjOjpBZGRyZXNzIG1hY0Rlc3Q7CisgICAgQ2hpbGQgKmNoaWxkOworICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKyAgICB1aW50OF90IGNoaWxkSW5kZXg7CisKKyAgICBtU2VuZEJ1c3kgPSBmYWxzZTsKKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCk7CisKKyAgICBpZiAobVNlbmRNZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtU2VuZE1lc3NhZ2UtPlNldE9mZnNldChtTWVzc2FnZU5leHRPZmZzZXQpOworICAgIH0KKworICAgIGFGcmFtZS5HZXREc3RBZGRyKG1hY0Rlc3QpOworCisgICAgaWYgKChuZWlnaGJvciA9IG5ldGlmLkdldE1sZSgpLkdldE5laWdoYm9yKG1hY0Rlc3QpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhRXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9OT05FOgorICAgICAgICAgICAgaWYgKGFGcmFtZS5HZXRBY2tSZXF1ZXN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVpZ2hib3ItPlJlc2V0TGlua0ZhaWx1cmVzKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRToKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9BQk9SVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fQUNLOgorICAgICAgICAgICAgbmVpZ2hib3ItPkluY3JlbWVudExpbmtGYWlsdXJlcygpOworCisgICAgICAgICAgICBpZiAobmV0aWYuR2V0TWxlKCkuSXNBY3RpdmVSb3V0ZXIobmVpZ2hib3ItPkdldFJsb2MxNigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobmVpZ2hib3ItPkdldExpbmtGYWlsdXJlcygpID49IE1sZTo6a0ZhaWxlZFJvdXRlclRyYW5zbWlzc2lvbnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5SZW1vdmVOZWlnaGJvcigqbmVpZ2hib3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoY2hpbGQgPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZChtYWNEZXN0KSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGNoaWxkLT5TZXREYXRhUmVxdWVzdFBlbmRpbmcoZmFsc2UpOworCisgICAgICAgIFZlcmlmeU9yRXhpdChtU2VuZE1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgICAgICAgaWYgKG1TZW5kTWVzc2FnZSA9PSBjaGlsZC0+R2V0SW5kaXJlY3RNZXNzYWdlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGlsZC0+UmVzZXRJbmRpcmVjdFR4QXR0ZW1wdHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGlsZC0+SW5jcmVtZW50SW5kaXJlY3RUeEF0dGVtcHRzKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPkdldEluZGlyZWN0VHhBdHRlbXB0cygpIDwga01heFBvbGxUcmlnZ2VyZWRUeEF0dGVtcHRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2F2ZSB0aGUgZnJhbWUgY291bnRlciwga2V5IGlkLCBhbmQgZGF0YSBzZXF1ZW5jZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBmcmFtZSBzbyB3ZSB1c2UgdGhlIHNhbWUgdmFsdWVzIGZvciB0aGUgcmV0cmFuc21pc3Npb24KKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZyYW1lIGZvbGxvd2luZyB0aGUgcmVjZWlwdCBvZiBhIGRhdGEgcmVxdWVzdCBjb21tYW5kIChkYXRhCisgICAgICAgICAgICAgICAgICAgIC8vIHBvbGwpIGZyb20gdGhlIHNsZWVweSBjaGlsZC4KKworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+U2V0SW5kaXJlY3REYXRhU2VxdWVuY2VOdW1iZXIoYUZyYW1lLkdldFNlcXVlbmNlKCkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhRnJhbWUuR2V0U2VjdXJpdHlFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZyYW1lQ291bnRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qga2V5SWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZS5HZXRGcmFtZUNvdW50ZXIoZnJhbWVDb3VudGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5TZXRJbmRpcmVjdEZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhRnJhbWUuR2V0S2V5SWQoa2V5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPlNldEluZGlyZWN0S2V5SWQoa2V5SWQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNoaWxkLT5SZXNldEluZGlyZWN0VHhBdHRlbXB0cygpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRFJPUF9NRVNTQUdFX09OX0ZSQUdNRU5UX1RYX0ZBSUxVUkUKKyAgICAgICAgICAgICAgICAvLyBXZSBzZXQgdGhlIE5leHRPZmZzZXQgdG8gZW5kIG9mIG1lc3NhZ2UsIHNpbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAvLyBzZW5kIGFueSByZW1haW5pbmcgZnJhZ21lbnRzIGluIHRoZSBtZXNzYWdlIHRvIHRoZSBjaGlsZCwgaWYgYWxsIHR4CisgICAgICAgICAgICAgICAgLy8gYXR0ZW1wdHMgb2YgY3VycmVudCBmcmFtZSBhbHJlYWR5IGZhaWxlZC4KKworICAgICAgICAgICAgICAgIG1NZXNzYWdlTmV4dE9mZnNldCA9IG1TZW5kTWVzc2FnZS0+R2V0TGVuZ3RoKCk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtTWVzc2FnZU5leHRPZmZzZXQgPCBtU2VuZE1lc3NhZ2UtPkdldExlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVNlbmRNZXNzYWdlID09IGNoaWxkLT5HZXRJbmRpcmVjdE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGlsZC0+U2V0SW5kaXJlY3RGcmFnbWVudE9mZnNldChtTWVzc2FnZU5leHRPZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TZW5kTWVzc2FnZSA9PSBjaGlsZC0+R2V0SW5kaXJlY3RNZXNzYWdlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hpbGQtPlNldEluZGlyZWN0RnJhZ21lbnRPZmZzZXQoMCk7CisgICAgICAgICAgICAgICAgY2hpbGQtPlNldEluZGlyZWN0TWVzc2FnZShOVUxMKTsKKworICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBzaG9ydCBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBhZnRlciB0aGUgZmlyc3QgaW5kaXJlY3QKKyAgICAgICAgICAgICAgICAvLyBtZXNzYWdlIHRyYW5zbWlzc2lvbiBhdHRlbXB0IHRvIHRoZSBjaGlsZC4gV2UgaW50ZW50aW9uYWxseSBkbworICAgICAgICAgICAgICAgIC8vIG5vdCBjaGVjayBmb3Igc3VjY2Vzc2Z1bCB0eCBoZXJlIHRvIGFkZHJlc3MgdGhlIHNjZW5hcmlvIHdoZXJlCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoaWxkIGRvZXMgcmVjZWl2ZSAiQ2hpbGQgSUQgUmVzcG9uc2UiIGJ1dCBwYXJlbnQgbWlzc2VzIHRoZQorICAgICAgICAgICAgICAgIC8vIDE1LjQgYWNrIGZyb20gY2hpbGQuIElmIHRoZSAiQ2hpbGQgSUQgUmVzcG9uc2UiIGRvZXMgbm90IG1ha2UgaXQKKyAgICAgICAgICAgICAgICAvLyB0byB0aGUgY2hpbGQsIHRoZW4gdGhlIGNoaWxkIHdpbGwgbmVlZCB0byBzZW5kIGEgbmV3ICJDaGlsZCBJRAorICAgICAgICAgICAgICAgIC8vIFJlcXVlc3QiIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHBhcmVudCB0byBzd2l0Y2ggdG8gdXNpbmcgbG9uZworICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MgbW9kZSBmb3Igc291cmNlIGFkZHJlc3MgbWF0Y2hpbmcuCisKKyAgICAgICAgICAgICAgICBtU291cmNlTWF0Y2hDb250cm9sbGVyLlNldFNyY01hdGNoQXNTaG9ydCgqY2hpbGQsIHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGlsZEluZGV4ID0gbmV0aWYuR2V0TWxlKCkuR2V0Q2hpbGRJbmRleCgqY2hpbGQpOworCisgICAgICAgICAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXRDaGlsZE1hc2soY2hpbGRJbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVNlbmRNZXNzYWdlLT5DbGVhckNoaWxkTWFzayhjaGlsZEluZGV4KTsKKyAgICAgICAgICAgICAgICBtU291cmNlTWF0Y2hDb250cm9sbGVyLkRlY3JlbWVudE1lc3NhZ2VDb3VudCgqY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBuZXRpZi5HZXRDaGlsZFN1cGVydmlzb3IoKS5VcGRhdGVPblNlbmQoKmNoaWxkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChtU2VuZE1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXREaXJlY3RUcmFuc21pc3Npb24oKSkKKyAgICB7CisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19EUk9QX01FU1NBR0VfT05fRlJBR01FTlRfVFhfRkFJTFVSRQorCisgICAgICAgIGlmIChhRXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBOZXh0T2Zmc2V0IHRvIGVuZCBvZiBtZXNzYWdlIHRvIGF2b2lkIHNlbmRpbmcKKyAgICAgICAgICAgIC8vIGFueSByZW1haW5pbmcgZnJhZ21lbnRzIGluIHRoZSBtZXNzYWdlLgorCisgICAgICAgICAgICBtTWVzc2FnZU5leHRPZmZzZXQgPSBtU2VuZE1lc3NhZ2UtPkdldExlbmd0aCgpOworICAgICAgICB9CisKKyNlbmRpZgorCisgICAgICAgIGlmIChtTWVzc2FnZU5leHRPZmZzZXQgPCBtU2VuZE1lc3NhZ2UtPkdldExlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UtPlNldE9mZnNldChtTWVzc2FnZU5leHRPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRNZXNzYWdlLT5DbGVhckRpcmVjdFRyYW5zbWlzc2lvbigpOworICAgICAgICAgICAgbVNlbmRNZXNzYWdlLT5TZXRPZmZzZXQoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXRTdWJUeXBlKCkgPT0gTWVzc2FnZTo6a1N1YlR5cGVNbGVEaXNjb3ZlclJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW5kQnVzeSA9IHRydWU7CisgICAgICAgICAgICBtRGlzY292ZXJUaW1lci5TdGFydChzdGF0aWNfY2FzdDx1aW50MTZfdD4oTWFjOjprU2NhbkR1cmF0aW9uRGVmYXVsdCkpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1TZW5kTWVzc2FnZS0+R2V0VHlwZSgpID09IE1lc3NhZ2U6OmtUeXBlTWFjRGF0YVBvbGwpCisgICAgeworICAgICAgICBuZWlnaGJvciA9IG5ldGlmLkdldE1sZSgpLkdldFBhcmVudCgpOworCisgICAgICAgIGlmIChuZWlnaGJvci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgbURhdGFQb2xsTWFuYWdlci5TdG9wUG9sbGluZygpOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EYXRhUG9sbE1hbmFnZXIuSGFuZGxlUG9sbFNlbnQoYUVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtTWVzc2FnZU5leHRPZmZzZXQgPj0gbVNlbmRNZXNzYWdlLT5HZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIExvZ0lwNk1lc3NhZ2Uoa01lc3NhZ2VUcmFuc21pdCwgKm1TZW5kTWVzc2FnZSwgJm1hY0Rlc3QsIGFFcnJvcik7CisKKyAgICAgICAgaWYgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBtSXBDb3VudGVycy5tVHhTdWNjZXNzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSXBDb3VudGVycy5tVHhGYWlsdXJlKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVNlbmRNZXNzYWdlLT5HZXREaXJlY3RUcmFuc21pc3Npb24oKSA9PSBmYWxzZSAmJiBtU2VuZE1lc3NhZ2UtPklzQ2hpbGRQZW5kaW5nKCkgPT0gZmFsc2UpCisgICAgeworICAgICAgICBtU2VuZFF1ZXVlLkRlcXVldWUoKm1TZW5kTWVzc2FnZSk7CisgICAgICAgIG1TZW5kTWVzc2FnZS0+RnJlZSgpOworICAgICAgICBtU2VuZE1lc3NhZ2UgPSBOVUxMOworICAgICAgICBtTWVzc2FnZU5leHRPZmZzZXQgPSAwOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChtRW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1TY2hlZHVsZVRyYW5zbWlzc2lvblRhc2suUG9zdCgpOworICAgIH0KK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpTZXREaXNjb3ZlclBhcmFtZXRlcnModWludDMyX3QgYVNjYW5DaGFubmVscykKK3sKKyAgICBtU2NhbkNoYW5uZWxzID0gKGFTY2FuQ2hhbm5lbHMgPT0gMCkgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTWFjOjprU2NhbkNoYW5uZWxzQWxsKSA6IGFTY2FuQ2hhbm5lbHM7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlRGlzY292ZXJUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlRGlzY292ZXJUaW1lcigpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZURpc2NvdmVyVGltZXIodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgZG8KKyAgICB7CisgICAgICAgIG1TY2FuQ2hhbm5lbHMgPj49IDE7CisgICAgICAgIG1TY2FuQ2hhbm5lbCsrOworCisgICAgICAgIGlmIChtU2NhbkNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgbVNlbmRRdWV1ZS5EZXF1ZXVlKCptU2VuZE1lc3NhZ2UpOworICAgICAgICAgICAgbVNlbmRNZXNzYWdlLT5GcmVlKCk7CisgICAgICAgICAgICBtU2VuZE1lc3NhZ2UgPSBOVUxMOworICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0Q2hhbm5lbChtUmVzdG9yZUNoYW5uZWwpOworICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0UGFuSWQobVJlc3RvcmVQYW5JZCk7CisgICAgICAgICAgICBtU2Nhbm5pbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLkhhbmRsZURpc2NvdmVyQ29tcGxldGUoKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoKG1TY2FuQ2hhbm5lbHMgJiAxKSA9PSAwKTsKKworICAgIG1TZW5kTWVzc2FnZS0+U2V0RGlyZWN0VHJhbnNtaXNzaW9uKCk7CisKK2V4aXQ6CisgICAgbVNlbmRCdXN5ID0gZmFsc2U7CisgICAgbVNjaGVkdWxlVHJhbnNtaXNzaW9uVGFzay5Qb3N0KCk7Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlUmVjZWl2ZWRGcmFtZShNYWM6OlJlY2VpdmVyICZhUmVjZWl2ZXIsIE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICBHZXRPd25lcihhUmVjZWl2ZXIpLkhhbmRsZVJlY2VpdmVkRnJhbWUoYUZyYW1lKTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZWNlaXZlZEZyYW1lKE1hYzo6RnJhbWUgJmFGcmFtZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIFRocmVhZE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworICAgIE1hYzo6QWRkcmVzcyBtYWNEZXN0OworICAgIE1hYzo6QWRkcmVzcyBtYWNTb3VyY2U7CisgICAgdWludDhfdCAqcGF5bG9hZDsKKyAgICB1aW50OF90IHBheWxvYWRMZW5ndGg7CisgICAgdWludDhfdCBjb21tYW5kSWQ7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY2hhciBzdHJpbmdCdWZmZXJbTWFjOjpGcmFtZTo6a0luZm9TdHJpbmdTaXplXTsKKworICAgIGlmICghbUVuYWJsZWQpCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFGcmFtZS5HZXRTcmNBZGRyKG1hY1NvdXJjZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhRnJhbWUuR2V0RHN0QWRkcihtYWNEZXN0KSk7CisKKyAgICBhRnJhbWUuR2V0U3JjUGFuSWQobWVzc2FnZUluZm8ubVBhbklkKTsKKyAgICBtZXNzYWdlSW5mby5tQ2hhbm5lbCA9IGFGcmFtZS5HZXRDaGFubmVsKCk7CisgICAgbWVzc2FnZUluZm8ubVJzcyA9IGFGcmFtZS5HZXRQb3dlcigpOworICAgIG1lc3NhZ2VJbmZvLm1McWkgPSBhRnJhbWUuR2V0THFpKCk7CisgICAgbWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSA9IGFGcmFtZS5HZXRTZWN1cml0eUVuYWJsZWQoKTsKKworICAgIHBheWxvYWQgPSBhRnJhbWUuR2V0UGF5bG9hZCgpOworICAgIHBheWxvYWRMZW5ndGggPSBhRnJhbWUuR2V0UGF5bG9hZExlbmd0aCgpOworCisgICAgbmV0aWYuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpLlVwZGF0ZU9uUmVjZWl2ZShtYWNTb3VyY2UsIG1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkpOworCisgICAgbURhdGFQb2xsTWFuYWdlci5DaGVja0ZyYW1lUGVuZGluZyhhRnJhbWUpOworCisgICAgc3dpdGNoIChhRnJhbWUuR2V0VHlwZSgpKQorICAgIHsKKyAgICBjYXNlIE1hYzo6RnJhbWU6OmtGY2ZGcmFtZURhdGE6CisgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID49IHNpemVvZihMb3dwYW46Ok1lc2hIZWFkZXIpICYmCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PExvd3Bhbjo6TWVzaEhlYWRlciAqPihwYXlsb2FkKS0+SXNNZXNoSGVhZGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRsZU1lc2gocGF5bG9hZCwgcGF5bG9hZExlbmd0aCwgbWFjU291cmNlLCBtZXNzYWdlSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGF5bG9hZExlbmd0aCA+PSBzaXplb2YoTG93cGFuOjpGcmFnbWVudEhlYWRlcikgJiYKKyAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KHBheWxvYWQpLT5Jc0ZyYWdtZW50SGVhZGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRsZUZyYWdtZW50KHBheWxvYWQsIHBheWxvYWRMZW5ndGgsIG1hY1NvdXJjZSwgbWFjRGVzdCwgbWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPj0gMSAmJiBMb3dwYW46Okxvd3Bhbjo6SXNMb3dwYW5IYyhwYXlsb2FkKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlTG93cGFuSEMocGF5bG9hZCwgcGF5bG9hZExlbmd0aCwgbWFjU291cmNlLCBtYWNEZXN0LCBtZXNzYWdlSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQocGF5bG9hZExlbmd0aCA9PSAwLCBlcnJvciA9IE9UX0VSUk9SX05PVF9MT1dQQU5fREFUQV9GUkFNRSk7CisKKyAgICAgICAgICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZW1wdHkgcGF5bG9hZCBmcmFtZSwgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFGcmFtZS5Ub0luZm9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1hYzo6RnJhbWU6OmtGY2ZGcmFtZU1hY0NtZDoKKyAgICAgICAgYUZyYW1lLkdldENvbW1hbmRJZChjb21tYW5kSWQpOworCisgICAgICAgIGlmIChjb21tYW5kSWQgPT0gTWFjOjpGcmFtZTo6a01hY0NtZERhdGFSZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBIYW5kbGVEYXRhUmVxdWVzdChtYWNTb3VyY2UsIG1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nSW5mb01hYyhHZXRJbnN0YW5jZSgpLCAiRHJvcHBpbmcgcnggZnJhbWUsIGVycm9yOiVzLCAlcyIsIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAgICBhRnJhbWUuVG9JbmZvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzdHJpbmdCdWZmZXIpOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZU1lc2godWludDhfdCAqYUZyYW1lLCB1aW50OF90IGFGcmFtZUxlbmd0aCwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBNYWM6OkFkZHJlc3MgbWVzaERlc3Q7CisgICAgTWFjOjpBZGRyZXNzIG1lc2hTb3VyY2U7CisgICAgTG93cGFuOjpNZXNoSGVhZGVyIG1lc2hIZWFkZXI7CisKKyAgICAvLyBDaGVjayB0aGUgbWVzaCBoZWFkZXIKKyAgICBWZXJpZnlPckV4aXQobWVzaEhlYWRlci5Jbml0KGFGcmFtZSwgYUZyYW1lTGVuZ3RoKSA9PSBPVF9FUlJPUl9OT05FLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgLy8gU2VjdXJpdHkgQ2hlY2s6IG9ubHkgcHJvY2VzcyBNZXNoIEhlYWRlciBmcmFtZXMgdGhhdCBoYWQgc2VjdXJpdHkgZW5hYmxlZC4KKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkgJiYgbWVzaEhlYWRlci5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfU0VDVVJJVFkpOworCisgICAgbWVzaFNvdXJjZS5tTGVuZ3RoID0gc2l6ZW9mKG1lc2hTb3VyY2UubVNob3J0QWRkcmVzcyk7CisgICAgbWVzaFNvdXJjZS5tU2hvcnRBZGRyZXNzID0gbWVzaEhlYWRlci5HZXRTb3VyY2UoKTsKKyAgICBtZXNoRGVzdC5tTGVuZ3RoID0gc2l6ZW9mKG1lc2hEZXN0Lm1TaG9ydEFkZHJlc3MpOworICAgIG1lc2hEZXN0Lm1TaG9ydEFkZHJlc3MgPSBtZXNoSGVhZGVyLkdldERlc3RpbmF0aW9uKCk7CisKKyAgICBpZiAobWVzaERlc3QubVNob3J0QWRkcmVzcyA9PSBuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKSkKKyAgICB7CisgICAgICAgIGFGcmFtZSArPSBtZXNoSGVhZGVyLkdldEhlYWRlckxlbmd0aCgpOworICAgICAgICBhRnJhbWVMZW5ndGggLT0gbWVzaEhlYWRlci5HZXRIZWFkZXJMZW5ndGgoKTsKKworICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KGFGcmFtZSktPklzRnJhZ21lbnRIZWFkZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgSGFuZGxlRnJhZ21lbnQoYUZyYW1lLCBhRnJhbWVMZW5ndGgsIG1lc2hTb3VyY2UsIG1lc2hEZXN0LCBhTWVzc2FnZUluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKExvd3Bhbjo6TG93cGFuOjpJc0xvd3BhbkhjKGFGcmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRsZUxvd3BhbkhDKGFGcmFtZSwgYUZyYW1lTGVuZ3RoLCBtZXNoU291cmNlLCBtZXNoRGVzdCwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAobWVzaEhlYWRlci5HZXRIb3BzTGVmdCgpID4gMCkKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLlJlc29sdmVSb3V0aW5nTG9vcHMoYU1hY1NvdXJjZS5tU2hvcnRBZGRyZXNzLCBtZXNoRGVzdC5tU2hvcnRBZGRyZXNzKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQ2hlY2tSZWFjaGFiaWxpdHkoYUZyYW1lLCBhRnJhbWVMZW5ndGgsIG1lc2hTb3VyY2UsIG1lc2hEZXN0KSk7CisKKyAgICAgICAgbWVzaEhlYWRlci5TZXRIb3BzTGVmdChtZXNoSGVhZGVyLkdldEhvcHNMZWZ0KCkgLSAxKTsKKyAgICAgICAgbWVzaEhlYWRlci5BcHBlbmRUbyhhRnJhbWUpOworCisgICAgICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldElwNigpLm1NZXNzYWdlUG9vbC5OZXcoTWVzc2FnZTo6a1R5cGU2bG93cGFuLCAwKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5TZXRMZW5ndGgoYUZyYW1lTGVuZ3RoKSk7CisgICAgICAgIG1lc3NhZ2UtPldyaXRlKDAsIGFGcmFtZUxlbmd0aCwgYUZyYW1lKTsKKyAgICAgICAgbWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChhTWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSk7CisgICAgICAgIG1lc3NhZ2UtPlNldFBhbklkKGFNZXNzYWdlSW5mby5tUGFuSWQpOworCisgICAgICAgIFNlbmRNZXNzYWdlKCptZXNzYWdlKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGNoYXIgc3JjU3RyaW5nQnVmZmVyW01hYzo6QWRkcmVzczo6a0FkZHJlc3NTdHJpbmdTaXplXTsKKworICAgICAgICBvdExvZ0luZm9NYWMoCisgICAgICAgICAgICBHZXRJbnN0YW5jZSgpLAorICAgICAgICAgICAgIkRyb3BwaW5nIHJ4IG1lc2ggZnJhbWUsIGVycm9yOiVzLCBsZW46JWQsIHNyYzolcywgc2VjOiVzIiwKKyAgICAgICAgICAgIG90VGhyZWFkRXJyb3JUb1N0cmluZyhlcnJvciksCisgICAgICAgICAgICBhRnJhbWVMZW5ndGgsCisgICAgICAgICAgICBhTWFjU291cmNlLlRvU3RyaW5nKHNyY1N0cmluZ0J1ZmZlciwgc2l6ZW9mKHNyY1N0cmluZ0J1ZmZlcikpLAorICAgICAgICAgICAgYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkgPyAieWVzIiA6ICJubyIKKyAgICAgICAgKTsKKworICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoc3JjU3RyaW5nQnVmZmVyKTsKKworICAgICAgICBpZiAobWVzc2FnZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6Q2hlY2tSZWFjaGFiaWxpdHkodWludDhfdCAqYUZyYW1lLCB1aW50OF90IGFGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjOjpBZGRyZXNzICZhTWVzaFNvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWVzaERlc3QpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6OkhlYWRlciBpcDZIZWFkZXI7CisgICAgTG93cGFuOjpNZXNoSGVhZGVyIG1lc2hIZWFkZXI7CisKKyAgICBWZXJpZnlPckV4aXQobWVzaEhlYWRlci5Jbml0KGFGcmFtZSwgYUZyYW1lTGVuZ3RoKSA9PSBPVF9FUlJPUl9OT05FLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgLy8gc2tpcCBtZXNoIGhlYWRlcgorICAgIGFGcmFtZSArPSBtZXNoSGVhZGVyLkdldEhlYWRlckxlbmd0aCgpOworICAgIGFGcmFtZUxlbmd0aCAtPSBtZXNoSGVhZGVyLkdldEhlYWRlckxlbmd0aCgpOworCisgICAgLy8gc2tpcCBmcmFnbWVudCBoZWFkZXIKKyAgICBpZiAoYUZyYW1lTGVuZ3RoID49IDEgJiYKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KGFGcmFtZSktPklzRnJhZ21lbnRIZWFkZXIoKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChzaXplb2YoTG93cGFuOjpGcmFnbWVudEhlYWRlcikgPD0gYUZyYW1lTGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICBWZXJpZnlPckV4aXQocmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KGFGcmFtZSktPkdldERhdGFncmFtT2Zmc2V0KCkgPT0gMCk7CisKKyAgICAgICAgYUZyYW1lICs9IHJlaW50ZXJwcmV0X2Nhc3Q8TG93cGFuOjpGcmFnbWVudEhlYWRlciAqPihhRnJhbWUpLT5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICAgICAgYUZyYW1lTGVuZ3RoIC09IHJlaW50ZXJwcmV0X2Nhc3Q8TG93cGFuOjpGcmFnbWVudEhlYWRlciAqPihhRnJhbWUpLT5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICB9CisKKyAgICAvLyBvbmx5IHByb2Nlc3MgSVB2NiBwYWNrZXRzCisgICAgVmVyaWZ5T3JFeGl0KGFGcmFtZUxlbmd0aCA+PSAxICYmIExvd3Bhbjo6TG93cGFuOjpJc0xvd3BhbkhjKGFGcmFtZSkpOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldExvd3BhbigpLkRlY29tcHJlc3NCYXNlSGVhZGVyKGlwNkhlYWRlciwgYU1lc2hTb3VyY2UsIGFNZXNoRGVzdCwgYUZyYW1lLCBhRnJhbWVMZW5ndGgpID4gMCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIGVycm9yID0gbmV0aWYuR2V0TWxlKCkuQ2hlY2tSZWFjaGFiaWxpdHkoYU1lc2hTb3VyY2UubVNob3J0QWRkcmVzcywgYU1lc2hEZXN0Lm1TaG9ydEFkZHJlc3MsIGlwNkhlYWRlcik7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkhhbmRsZUZyYWdtZW50KHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhRnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIExvd3Bhbjo6RnJhZ21lbnRIZWFkZXIgKmZyYWdtZW50SGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxMb3dwYW46OkZyYWdtZW50SGVhZGVyICo+KGFGcmFtZSk7CisgICAgdWludDE2X3QgZGF0YWdyYW1MZW5ndGggPSBmcmFnbWVudEhlYWRlci0+R2V0RGF0YWdyYW1TaXplKCk7CisgICAgdWludDE2X3QgZGF0YWdyYW1UYWcgPSBmcmFnbWVudEhlYWRlci0+R2V0RGF0YWdyYW1UYWcoKTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBpbnQgaGVhZGVyTGVuZ3RoOworCisgICAgaWYgKGZyYWdtZW50SGVhZGVyLT5HZXREYXRhZ3JhbU9mZnNldCgpID09IDApCisgICAgeworICAgICAgICBhRnJhbWUgKz0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworICAgICAgICBhRnJhbWVMZW5ndGggLT0gZnJhZ21lbnRIZWFkZXItPkdldEhlYWRlckxlbmd0aCgpOworCisgICAgICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldElwNigpLm1NZXNzYWdlUG9vbC5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICAgICAgbWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChhTWVzc2FnZUluZm8ubUxpbmtTZWN1cml0eSk7CisgICAgICAgIG1lc3NhZ2UtPlNldFBhbklkKGFNZXNzYWdlSW5mby5tUGFuSWQpOworICAgICAgICBoZWFkZXJMZW5ndGggPSBuZXRpZi5HZXRMb3dwYW4oKS5EZWNvbXByZXNzKCptZXNzYWdlLCBhTWFjU291cmNlLCBhTWFjRGVzdCwgYUZyYW1lLCBhRnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWdyYW1MZW5ndGgpOworICAgICAgICBWZXJpZnlPckV4aXQoaGVhZGVyTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgYUZyYW1lICs9IGhlYWRlckxlbmd0aDsKKyAgICAgICAgYUZyYW1lTGVuZ3RoIC09IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGhlYWRlckxlbmd0aCk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGRhdGFncmFtTGVuZ3RoID49IG1lc3NhZ2UtPkdldE9mZnNldCgpICsgYUZyYW1lTGVuZ3RoLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+U2V0TGVuZ3RoKGRhdGFncmFtTGVuZ3RoKSk7CisKKyAgICAgICAgbWVzc2FnZS0+U2V0RGF0YWdyYW1UYWcoZGF0YWdyYW1UYWcpOworICAgICAgICBtZXNzYWdlLT5TZXRUaW1lb3V0KGtSZWFzc2VtYmx5VGltZW91dCk7CisKKyAgICAgICAgLy8gY29weSBGcmFnbWVudAorICAgICAgICBtZXNzYWdlLT5Xcml0ZShtZXNzYWdlLT5HZXRPZmZzZXQoKSwgYUZyYW1lTGVuZ3RoLCBhRnJhbWUpOworICAgICAgICBtZXNzYWdlLT5Nb3ZlT2Zmc2V0KGFGcmFtZUxlbmd0aCk7CisKKyAgICAgICAgLy8gU2VjdXJpdHkgQ2hlY2sKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldElwNkZpbHRlcigpLkFjY2VwdCgqbWVzc2FnZSksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgLy8gQWxsb3cgcmUtYXNzZW1ibHkgb2Ygb25seSBvbmUgbWVzc2FnZSBhdCBhIHRpbWUgb24gYSBTRUQgYnkgY2xlYXJpbmcKKyAgICAgICAgLy8gYW55IHJlbWFpbmluZyBmcmFnbWVudHMgaW4gcmVhc3NlbWJseSBsaXN0IHVwb24gcmVjZWl2aW5nIG9mIGEgbmV3CisgICAgICAgIC8vIChzZWN1cmUpIGZpcnN0IGZyYWdtZW50LgorCisgICAgICAgIGlmICgoR2V0UnhPbldoZW5JZGxlKCkgPT0gZmFsc2UpICYmIG1lc3NhZ2UtPklzTGlua1NlY3VyaXR5RW5hYmxlZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBDbGVhclJlYXNzZW1ibHlMaXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBtUmVhc3NlbWJseUxpc3QuRW5xdWV1ZSgqbWVzc2FnZSk7CisKKyAgICAgICAgaWYgKCFtUmVhc3NlbWJseVRpbWVyLklzUnVubmluZygpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVhc3NlbWJseVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYUZyYW1lICs9IGZyYWdtZW50SGVhZGVyLT5HZXRIZWFkZXJMZW5ndGgoKTsKKyAgICAgICAgYUZyYW1lTGVuZ3RoIC09IGZyYWdtZW50SGVhZGVyLT5HZXRIZWFkZXJMZW5ndGgoKTsKKworICAgICAgICBmb3IgKG1lc3NhZ2UgPSBtUmVhc3NlbWJseUxpc3QuR2V0SGVhZCgpOyBtZXNzYWdlOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTZWN1cml0eSBDaGVjazogb25seSBjb25zaWRlciByZWFzc2VtYmx5IGJ1ZmZlcnMgdGhhdCBoYWQgdGhlIHNhbWUgU2VjdXJpdHkgRW5hYmxlZCBzZXR0aW5nLgorICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPkdldExlbmd0aCgpID09IGRhdGFncmFtTGVuZ3RoICYmCisgICAgICAgICAgICAgICAgbWVzc2FnZS0+R2V0RGF0YWdyYW1UYWcoKSA9PSBkYXRhZ3JhbVRhZyAmJgorICAgICAgICAgICAgICAgIG1lc3NhZ2UtPkdldE9mZnNldCgpID09IGZyYWdtZW50SGVhZGVyLT5HZXREYXRhZ3JhbU9mZnNldCgpICYmCisgICAgICAgICAgICAgICAgbWVzc2FnZS0+SXNMaW5rU2VjdXJpdHlFbmFibGVkKCkgPT0gYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3IgYSBzbGVlcHktZW5kLWRldmljZSwgaWYgd2UgcmVjZWl2ZSBhIG5ldyAoc2VjdXJlKSBuZXh0IGZyYWdtZW50CisgICAgICAgIC8vIHdpdGggYSBub24tbWF0Y2hpbmcgZnJhZ21lbnRhdGlvbiBvZmZzZXQgb3IgdGFnLCBpdCBpbmRpY2F0ZXMgdGhhdAorICAgICAgICAvLyB3ZSBoYXZlIGVpdGhlciBtaXNzZWQgYSBmcmFnbWVudCwgb3IgdGhlIHBhcmVudCBoYXMgbW92ZWQgdG8gYSBuZXcKKyAgICAgICAgLy8gbWVzc2FnZSB3aXRoIGEgbmV3IHRhZy4gSW4gZWl0aGVyIGNhc2UsIHdlIGNhbiBzYWZlbHkgY2xlYXIgYW55CisgICAgICAgIC8vIHJlbWFpbmluZyBmcmFnbWVudHMgc3RvcmVkIGluIHRoZSByZWFzc2VtYmx5IGxpc3QuCisKKyAgICAgICAgaWYgKEdldFJ4T25XaGVuSWRsZSgpID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG1lc3NhZ2UgPT0gTlVMTCkgJiYgKGFNZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDbGVhclJlYXNzZW1ibHlMaXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPckV4aXQobWVzc2FnZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgICAgIC8vIGNvcHkgRnJhZ21lbnQKKyAgICAgICAgbWVzc2FnZS0+V3JpdGUobWVzc2FnZS0+R2V0T2Zmc2V0KCksIGFGcmFtZUxlbmd0aCwgYUZyYW1lKTsKKyAgICAgICAgbWVzc2FnZS0+TW92ZU9mZnNldChhRnJhbWVMZW5ndGgpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgaWYgKG1lc3NhZ2UtPkdldE9mZnNldCgpID49IG1lc3NhZ2UtPkdldExlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVhc3NlbWJseUxpc3QuRGVxdWV1ZSgqbWVzc2FnZSk7CisgICAgICAgICAgICBIYW5kbGVEYXRhZ3JhbSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvLCBhTWFjU291cmNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjaGFyIHNyY1N0cmluZ0J1ZmZlcltNYWM6OkFkZHJlc3M6OmtBZGRyZXNzU3RyaW5nU2l6ZV07CisgICAgICAgIGNoYXIgZHN0U3RyaW5nQnVmZmVyW01hYzo6QWRkcmVzczo6a0FkZHJlc3NTdHJpbmdTaXplXTsKKworICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoc3JjU3RyaW5nQnVmZmVyKTsKKyAgICAgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGRzdFN0cmluZ0J1ZmZlcik7CisKKyAgICAgICAgb3RMb2dJbmZvTWFjKAorICAgICAgICAgICAgR2V0SW5zdGFuY2UoKSwKKyAgICAgICAgICAgICJEcm9wcGluZyByeCBmcmFnIGZyYW1lLCBlcnJvcjolcywgbGVuOiVkLCBzcmM6JXMsIGRzdDolcywgdGFnOiVkLCBvZmZzZXQ6JWQsIGRnbGVuOiVkLCBzZWM6JXMiLAorICAgICAgICAgICAgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgIGFGcmFtZUxlbmd0aCwKKyAgICAgICAgICAgIGFNYWNTb3VyY2UuVG9TdHJpbmcoc3JjU3RyaW5nQnVmZmVyLCBzaXplb2Yoc3JjU3RyaW5nQnVmZmVyKSksCisgICAgICAgICAgICBhTWFjRGVzdC5Ub1N0cmluZyhkc3RTdHJpbmdCdWZmZXIsIHNpemVvZihkc3RTdHJpbmdCdWZmZXIpKSwKKyAgICAgICAgICAgIGRhdGFncmFtVGFnLAorICAgICAgICAgICAgZnJhZ21lbnRIZWFkZXItPkdldERhdGFncmFtT2Zmc2V0KCksCisgICAgICAgICAgICBkYXRhZ3JhbUxlbmd0aCwKKyAgICAgICAgICAgIGFNZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5ID8gInllcyIgOiAibm8iCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkNsZWFyUmVhc3NlbWJseUxpc3Qodm9pZCkKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIE1lc3NhZ2UgKm5leHQ7CisKKyAgICBmb3IgKG1lc3NhZ2UgPSBtUmVhc3NlbWJseUxpc3QuR2V0SGVhZCgpOyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkKKyAgICB7CisgICAgICAgIG5leHQgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisgICAgICAgIG1SZWFzc2VtYmx5TGlzdC5EZXF1ZXVlKCptZXNzYWdlKTsKKworICAgICAgICBMb2dJcDZNZXNzYWdlKGtNZXNzYWdlRHJvcCwgKm1lc3NhZ2UsIE5VTEwsIE9UX0VSUk9SX05PX0ZSQU1FX1JFQ0VJVkVEKTsKKyAgICAgICAgbUlwQ291bnRlcnMubVJ4RmFpbHVyZSsrOworCisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlUmVhc3NlbWJseVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVSZWFzc2VtYmx5VGltZXIoKTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVSZWFzc2VtYmx5VGltZXIodm9pZCkKK3sKKyAgICBNZXNzYWdlICpuZXh0ID0gTlVMTDsKKyAgICB1aW50OF90IHRpbWVvdXQ7CisKKyAgICBmb3IgKE1lc3NhZ2UgKm1lc3NhZ2UgPSBtUmVhc3NlbWJseUxpc3QuR2V0SGVhZCgpOyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkKKyAgICB7CisgICAgICAgIG5leHQgPSBtZXNzYWdlLT5HZXROZXh0KCk7CisgICAgICAgIHRpbWVvdXQgPSBtZXNzYWdlLT5HZXRUaW1lb3V0KCk7CisKKyAgICAgICAgaWYgKHRpbWVvdXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtZXNzYWdlLT5TZXRUaW1lb3V0KHRpbWVvdXQgLSAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWFzc2VtYmx5TGlzdC5EZXF1ZXVlKCptZXNzYWdlKTsKKworICAgICAgICAgICAgTG9nSXA2TWVzc2FnZShrTWVzc2FnZURyb3AsICptZXNzYWdlLCBOVUxMLCBPVF9FUlJPUl9SRUFTU0VNQkxZX1RJTUVPVVQpOworICAgICAgICAgICAgbUlwQ291bnRlcnMubVJ4RmFpbHVyZSsrOworCisgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVJlYXNzZW1ibHlMaXN0LkdldEhlYWQoKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlYXNzZW1ibHlUaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworICAgIH0KK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVMb3dwYW5IQyh1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYUZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIGludCBoZWFkZXJMZW5ndGg7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBuZXRpZi5HZXRJcDYoKS5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKGFNZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5KTsKKyAgICBtZXNzYWdlLT5TZXRQYW5JZChhTWVzc2FnZUluZm8ubVBhbklkKTsKKworICAgIGhlYWRlckxlbmd0aCA9IG5ldGlmLkdldExvd3BhbigpLkRlY29tcHJlc3MoKm1lc3NhZ2UsIGFNYWNTb3VyY2UsIGFNYWNEZXN0LCBhRnJhbWUsIGFGcmFtZUxlbmd0aCwgMCk7CisgICAgVmVyaWZ5T3JFeGl0KGhlYWRlckxlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgYUZyYW1lICs9IGhlYWRlckxlbmd0aDsKKyAgICBhRnJhbWVMZW5ndGggLT0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaGVhZGVyTGVuZ3RoKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5TZXRMZW5ndGgobWVzc2FnZS0+R2V0TGVuZ3RoKCkgKyBhRnJhbWVMZW5ndGgpKTsKKyAgICBtZXNzYWdlLT5Xcml0ZShtZXNzYWdlLT5HZXRPZmZzZXQoKSwgYUZyYW1lTGVuZ3RoLCBhRnJhbWUpOworCisgICAgLy8gU2VjdXJpdHkgQ2hlY2sKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuR2V0SXA2RmlsdGVyKCkuQWNjZXB0KCptZXNzYWdlKSwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgSGFuZGxlRGF0YWdyYW0oKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgYU1hY1NvdXJjZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNoYXIgc3JjU3RyaW5nQnVmZmVyW01hYzo6QWRkcmVzczo6a0FkZHJlc3NTdHJpbmdTaXplXTsKKyAgICAgICAgY2hhciBkc3RTdHJpbmdCdWZmZXJbTWFjOjpBZGRyZXNzOjprQWRkcmVzc1N0cmluZ1NpemVdOworCisgICAgICAgIE9UX1VOVVNFRF9WQVJJQUJMRShzcmNTdHJpbmdCdWZmZXIpOworICAgICAgICBPVF9VTlVTRURfVkFSSUFCTEUoZHN0U3RyaW5nQnVmZmVyKTsKKworICAgICAgICBvdExvZ0luZm9NYWMoCisgICAgICAgICAgICBHZXRJbnN0YW5jZSgpLAorICAgICAgICAgICAgIkRyb3BwaW5nIHJ4IGxvd3BhbiBIQyBmcmFtZSwgZXJyb3I6JXMsIGxlbjolZCwgc3JjOiVzLCBkc3Q6JXMsIHNlYzolcyIsCisgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgYUZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgYU1hY1NvdXJjZS5Ub1N0cmluZyhzcmNTdHJpbmdCdWZmZXIsIHNpemVvZihzcmNTdHJpbmdCdWZmZXIpKSwKKyAgICAgICAgICAgIGFNYWNEZXN0LlRvU3RyaW5nKGRzdFN0cmluZ0J1ZmZlciwgc2l6ZW9mKGRzdFN0cmluZ0J1ZmZlcikpLAorICAgICAgICAgICAgYU1lc3NhZ2VJbmZvLm1MaW5rU2VjdXJpdHkgPyAieWVzIiA6ICJubyIKKyAgICAgICAgKTsKKworICAgICAgICBpZiAobWVzc2FnZSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK290RXJyb3IgTWVzaEZvcndhcmRlcjo6SGFuZGxlRGF0YWdyYW0oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgTG9nSXA2TWVzc2FnZShrTWVzc2FnZVJlY2VpdmUsIGFNZXNzYWdlLCAmYU1hY1NvdXJjZSwgT1RfRVJST1JfTk9ORSk7CisgICAgbUlwQ291bnRlcnMubVJ4U3VjY2VzcysrOworCisgICAgcmV0dXJuIG5ldGlmLkdldElwNigpLkhhbmRsZURhdGFncmFtKGFNZXNzYWdlLCAmbmV0aWYsIG5ldGlmLkdldEludGVyZmFjZUlkKCksICZhTWVzc2FnZUluZm8sIGZhbHNlKTsKK30KKwordm9pZCBNZXNoRm9yd2FyZGVyOjpIYW5kbGVEYXRhUmVxdWVzdChjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBDaGlsZCAqY2hpbGQ7CisgICAgdWludDE2X3QgaW5kaXJlY3RNc2dDb3VudDsKKworICAgIC8vIFNlY3VyaXR5IENoZWNrOiBvbmx5IHByb2Nlc3Mgc2VjdXJlIERhdGEgUG9sbCBmcmFtZXMuCisgICAgVmVyaWZ5T3JFeGl0KGFNZXNzYWdlSW5mby5tTGlua1NlY3VyaXR5KTsKKworICAgIFZlcmlmeU9yRXhpdChuZXRpZi5HZXRNbGUoKS5HZXRSb2xlKCkgIT0gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQpOworCisgICAgVmVyaWZ5T3JFeGl0KChjaGlsZCA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkKGFNYWNTb3VyY2UpKSAhPSBOVUxMKTsKKyAgICBjaGlsZC0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgY2hpbGQtPlJlc2V0TGlua0ZhaWx1cmVzKCk7CisgICAgaW5kaXJlY3RNc2dDb3VudCA9IGNoaWxkLT5HZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCgpOworCisgICAgaWYgKCFtU291cmNlTWF0Y2hDb250cm9sbGVyLklzRW5hYmxlZCgpIHx8IChpbmRpcmVjdE1zZ0NvdW50ID4gMCkpCisgICAgeworICAgICAgICBjaGlsZC0+U2V0RGF0YVJlcXVlc3RQZW5kaW5nKHRydWUpOworICAgIH0KKworICAgIG1TY2hlZHVsZVRyYW5zbWlzc2lvblRhc2suUG9zdCgpOworCisgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJSeCBkYXRhIHBvbGwsIHNyYzoweCUwNHgsIHFlZF9tc2dzOiVkIiwgY2hpbGQtPkdldFJsb2MxNigpLCBpbmRpcmVjdE1zZ0NvdW50KTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWVzaEZvcndhcmRlcjo6SGFuZGxlRGF0YVBvbGxUaW1lb3V0KE1hYzo6UmVjZWl2ZXIgJmFSZWNlaXZlcikKK3sKKyAgICBHZXRPd25lcihhUmVjZWl2ZXIpLkdldERhdGFQb2xsTWFuYWdlcigpLkhhbmRsZVBvbGxUaW1lb3V0KCk7Cit9CisKK01lc2hGb3J3YXJkZXIgJk1lc2hGb3J3YXJkZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIE1lc2hGb3J3YXJkZXIgJm1lc2hGb3J3YWRlciA9ICpzdGF0aWNfY2FzdDxNZXNoRm9yd2FyZGVyICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIE1lc2hGb3J3YXJkZXIgJm1lc2hGb3J3YWRlciA9IG90R2V0TWVzaEZvcndhcmRlcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gbWVzaEZvcndhZGVyOworfQorCisjaWYgKE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfSU5GTykgJiYgKE9QRU5USFJFQURfQ09ORklHX0xPR19NQUMgPT0gMSkKKwordm9pZCBNZXNoRm9yd2FyZGVyOjpMb2dJcDZNZXNzYWdlKE1lc3NhZ2VBY3Rpb24gYUFjdGlvbiwgY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAqYU1hY0FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFcnJvciBhRXJyb3IpCit7CisgICAgdWludDE2X3QgY2hlY2tzdW0gPSAwOworICAgIElwNjo6SGVhZGVyIGlwNkhlYWRlcjsKKyAgICBJcDY6OklwUHJvdG8gcHJvdG9jb2w7CisgICAgY2hhciBzdHJpbmdCdWZmZXJbSXA2OjpBZGRyZXNzOjprSXA2QWRkcmVzc1N0cmluZ1NpemVdOworICAgIGNvbnN0IGNoYXIgKmFjdGlvblRleHQ7CisgICAgY29uc3QgY2hhciAqcHJpb3JpdHlUZXh0OworICAgIGJvb2wgc2hvdWxkTG9nU3JjRHN0QWRkcmVzc2VzID0gdHJ1ZTsKKworICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5HZXRUeXBlKCkgPT0gTWVzc2FnZTo6a1R5cGVJcDYpOworCisgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihpcDZIZWFkZXIpID09IGFNZXNzYWdlLlJlYWQoMCwgc2l6ZW9mKGlwNkhlYWRlciksICZpcDZIZWFkZXIpKTsKKyAgICBWZXJpZnlPckV4aXQoaXA2SGVhZGVyLklzVmVyc2lvbjYoKSk7CisKKyAgICBwcm90b2NvbCA9IGlwNkhlYWRlci5HZXROZXh0SGVhZGVyKCk7CisKKyAgICBzd2l0Y2ggKHByb3RvY29sKQorICAgIHsKKyAgICBjYXNlIElwNjo6a1Byb3RvVWRwOgorICAgIHsKKyAgICAgICAgSXA2OjpVZHBIZWFkZXIgdWRwSGVhZGVyOworCisgICAgICAgIGlmIChzaXplb2YodWRwSGVhZGVyKSA9PSBhTWVzc2FnZS5SZWFkKHNpemVvZihpcDZIZWFkZXIpLCBzaXplb2YodWRwSGVhZGVyKSwgJnVkcEhlYWRlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZWNrc3VtID0gdWRwSGVhZGVyLkdldENoZWNrc3VtKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIElwNjo6a1Byb3RvVGNwOgorICAgIHsKKyAgICAgICAgSXA2OjpUY3BIZWFkZXIgdGNwSGVhZGVyOworCisgICAgICAgIGlmIChzaXplb2YodGNwSGVhZGVyKSA9PSBhTWVzc2FnZS5SZWFkKHNpemVvZihpcDZIZWFkZXIpLCBzaXplb2YodGNwSGVhZGVyKSwgJnRjcEhlYWRlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZWNrc3VtID0gdGNwSGVhZGVyLkdldENoZWNrc3VtKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFBY3Rpb24pCisgICAgeworICAgIGNhc2Uga01lc3NhZ2VSZWNlaXZlOgorICAgICAgICBhY3Rpb25UZXh0ID0gIlJlY2VpdmVkIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtNZXNzYWdlVHJhbnNtaXQ6CisgICAgICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgYWN0aW9uVGV4dCA9ICJTZW50IjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGlvblRleHQgPSAiRmFpbGVkIHRvIHNlbmQiOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtNZXNzYWdlUHJlcGFyZUluZGlyZWN0OgorICAgICAgICBhY3Rpb25UZXh0ID0gIlByZXBpbmcgaW5kaXIgdHgiOworICAgICAgICBzaG91bGRMb2dTcmNEc3RBZGRyZXNzZXMgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtNZXNzYWdlRHJvcDoKKyAgICAgICAgYWN0aW9uVGV4dCA9ICJEcm9wcGluZyI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYWN0aW9uVGV4dCA9ICIiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFNZXNzYWdlLkdldFByaW9yaXR5KCkpCisgICAgeworICAgIGNhc2UgTWVzc2FnZTo6a1ByaW9yaXR5SGlnaDoKKyAgICAgICAgcHJpb3JpdHlUZXh0ID0gImhpZ2giOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTWVzc2FnZTo6a1ByaW9yaXR5TWVkaXVtOgorICAgICAgICBwcmlvcml0eVRleHQgPSAibWVkaXVtIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2U6OmtQcmlvcml0eUxvdzoKKyAgICAgICAgcHJpb3JpdHlUZXh0ID0gImxvdyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNZXNzYWdlOjprUHJpb3JpdHlWZXJ5TG93OgorICAgICAgICBwcmlvcml0eVRleHQgPSAidmVyeWxvdyI7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpb3JpdHlUZXh0ID0gInVua25vd24iOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBvdExvZ0luZm9NYWMoCisgICAgICAgIEdldEluc3RhbmNlKCksCisgICAgICAgICIlcyBJUHY2ICVzIG1zZywgbGVuOiVkLCBjaGtzdW06JTA0eCVzJXMsIHNlYzolcyVzJXMsIHByaW86JXMiLAorICAgICAgICBhY3Rpb25UZXh0LAorICAgICAgICBJcDY6OklwNjo6SXBQcm90b1RvU3RyaW5nKHByb3RvY29sKSwKKyAgICAgICAgYU1lc3NhZ2UuR2V0TGVuZ3RoKCksCisgICAgICAgIGNoZWNrc3VtLAorICAgICAgICAoYU1hY0FkZHJlc3MgPT0gTlVMTCkgPyAiIiA6ICgoYUFjdGlvbiA9PSBrTWVzc2FnZVJlY2VpdmUpID8gIiwgZnJvbToiIDogIiwgdG86IiksCisgICAgICAgIChhTWFjQWRkcmVzcyA9PSBOVUxMKSA/ICIiIDogYU1hY0FkZHJlc3MtPlRvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpLAorICAgICAgICBhTWVzc2FnZS5Jc0xpbmtTZWN1cml0eUVuYWJsZWQoKSA/ICJ5ZXMiIDogIm5vIiwKKyAgICAgICAgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKSA/ICIiIDogIiwgZXJyb3I6IiwKKyAgICAgICAgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKSA/ICIiIDogb3RUaHJlYWRFcnJvclRvU3RyaW5nKGFFcnJvciksCisgICAgICAgIHByaW9yaXR5VGV4dAorICAgICk7CisKKyAgICBpZiAoc2hvdWxkTG9nU3JjRHN0QWRkcmVzc2VzKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJzcmM6ICVzIiwgaXA2SGVhZGVyLkdldFNvdXJjZSgpLlRvU3RyaW5nKHN0cmluZ0J1ZmZlciwgc2l6ZW9mKHN0cmluZ0J1ZmZlcikpKTsKKyAgICAgICAgb3RMb2dJbmZvTWFjKEdldEluc3RhbmNlKCksICJkc3Q6ICVzIiwgaXA2SGVhZGVyLkdldERlc3RpbmF0aW9uKCkuVG9TdHJpbmcoc3RyaW5nQnVmZmVyLCBzaXplb2Yoc3RyaW5nQnVmZmVyKSkpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKKyNlbHNlIC8vICNpZiAoT1BFTlRIUkVBRF9DT05GSUdfTE9HX0xFVkVMID49IE9UX0xPR19MRVZFTF9JTkZPKSAmJiAoT1BFTlRIUkVBRF9DT05GSUdfTE9HX01BQyA9PSAxKQorCit2b2lkIE1lc2hGb3J3YXJkZXI6OkxvZ0lwNk1lc3NhZ2UoTWVzc2FnZUFjdGlvbiwgY29uc3QgTWVzc2FnZSAmLCBjb25zdCBNYWM6OkFkZHJlc3MgKiwgb3RFcnJvcikKK3sKK30KKworI2VuZGlmIC8vI2lmIE9QRU5USFJFQURfQ09ORklHX0xPR19MRVZFTCA+PSBPVF9MT0dfTEVWRUxfSU5GTworCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWVzaF9mb3J3YXJkZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODhiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWVzaF9mb3J3YXJkZXIuaHBwCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZm9yd2FyZGluZyBJUHY2IGRhdGFncmFtcyBhY3Jvc3MgdGhlIFRocmVhZCBtZXNoLgorICovCisKKyNpZm5kZWYgTUVTSF9GT1JXQVJERVJfSFBQXworI2RlZmluZSBNRVNIX0ZPUldBUkRFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvYWRkcmVzc19yZXNvbHZlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2RhdGFfcG9sbF9tYW5hZ2VyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbG93cGFuLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3NyY19tYXRjaF9jb250cm9sbGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitlbnVtCit7CisgICAga1JlYXNzZW1ibHlUaW1lb3V0ID0gT1BFTlRIUkVBRF9DT05GSUdfNkxPV1BBTl9SRUFTU0VNQkxZX1RJTUVPVVQsCit9OworCitjbGFzcyBNbGVSb3V0ZXI7CitzdHJ1Y3QgVGhyZWFkTWVzc2FnZUluZm87CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tZXNoLWZvcndhcmRpbmcKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1lc2ggZm9yd2FyZGluZyB3aXRoaW4gVGhyZWFkLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgbWVzaCBmb3J3YXJkaW5nIHdpdGhpbiBUaHJlYWQuCisgKgorICovCitjbGFzcyBNZXNoRm9yd2FyZGVyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgTWVzaEZvcndhcmRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgbWVzaCBmb3J3YXJkaW5nIGFuZCB0aGUgSUVFRSA4MDIuMTUuNCBNQUMgbGF5ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGVuYWJsZWQgdGhlIG1lc2ggZm9yd2FyZGVyLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdGFydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRpc2FibGVzIG1lc2ggZm9yd2FyZGluZyBhbmQgdGhlIElFRUUgODAyLjE1LjQgTUFDIGxheWVyLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBkaXNhYmxlZCB0aGUgbWVzaCBmb3J3YXJkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0b3Aodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdWJtaXRzIGEgbWVzc2FnZSB0byB0aGUgbWVzaCBmb3J3YXJkZXIgZm9yIGZvcndhcmRpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBtZXNzYWdlIHdhcyBhbHJlYWR5IGVucXVldWVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgICAgVGhlIG1lc3NhZ2UgY291bGQgbm90IGJlIHNlbnQgYW5kIHNob3VsZCBiZSBkcm9wcGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGFkZHJlc3MgcmVzb2x2ZXIgd2hlbiBhbiBFSUQtdG8tUkxPQyBtYXBwaW5nIGhhcyBiZWVuIHJlc29sdmVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVpZCAgICBBIHJlZmVyZW5jZSB0byB0aGUgRUlEIHRoYXQgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgICogQHBhcmFtW2luXSAgYUVycm9yICBPVF9FUlJPUl9OT05FIG9uIHN1Y2Nlc3MgYW5kIE9UX0VSUk9SX0RST1Agb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVSZXNvbHZlZChjb25zdCBJcDY6OkFkZHJlc3MgJmFFaWQsIG90RXJyb3IgYUVycm9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHJhZGlvIHJlY2VpdmVyIGFuZCBwb2xsaW5nIHRpbWVyIG9mZi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UnhPZmYodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgcngtb24td2hlbi1pZGxlIG1vZGUgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIFRoZSByeC1vbi13aGVuLWlkbGUgbW9kZSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIFRoZSByeC1vbi13aGVuLWlkbGUtbW9kZSBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgR2V0UnhPbldoZW5JZGxlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcngtb24td2hlbi1pZGxlIG1vZGUKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSeE9uV2hlbklkbGUgIFRSVUUgdG8gZW5hYmxlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJ4T25XaGVuSWRsZShib29sIGFSeE9uV2hlbklkbGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2NhbiBwYXJhbWV0ZXJzIGZvciBNTEUgRGlzY292ZXJ5IFJlcXVlc3QgbWVzc2FnZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2NhbkNoYW5uZWxzICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREaXNjb3ZlclBhcmFtZXRlcnModWludDMyX3QgYVNjYW5DaGFubmVscyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmcmVlcyBhbnkgaW5kaXJlY3QgbWVzc2FnZXMgcXVldWVkIGZvciBhIHNwZWNpZmljIGNoaWxkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkICBBIHJlZmVyZW5jZSB0byBhIGNoaWxkIHdob20gbWVzc2FnZXMgc2hhbGwgYmUgcmVtb3ZlZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJDaGlsZEluZGlyZWN0TWVzc2FnZXMoQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmcmVlcyBhbnkgaW5kaXJlY3QgbWVzc2FnZXMgcXVldWVkIGZvciBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgYXR0YWNoZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFVwZGF0ZUluZGlyZWN0TWVzc2FnZXModm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzZW5kIHF1ZXVlLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBzZW5kIHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgUHJpb3JpdHlRdWV1ZSAmR2V0U2VuZFF1ZXVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZW5kUXVldWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHJlYXNzZW1ibHkgcXVldWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIHJlYXNzZW1ibHkgcXVldWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNZXNzYWdlUXVldWUgJkdldFJlYXNzZW1ibHlRdWV1ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtUmVhc3NlbWJseUxpc3Q7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHJlc29sdmluZyBxdWV1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgcmVzb2x2aW5nIHF1ZXVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTWVzc2FnZVF1ZXVlICZHZXRSZXNvbHZpbmdRdWV1ZSh2b2lkKSBjb25zdCB7IHJldHVybiBtUmVzb2x2aW5nUXVldWU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgcG9sbCBtYW5hZ2VyLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIHBvbGwgbWFuYWdlci4KKyAgICAgKgorICAgICAqLworICAgIERhdGFQb2xsTWFuYWdlciAmR2V0RGF0YVBvbGxNYW5hZ2VyKHZvaWQpIHsgcmV0dXJuIG1EYXRhUG9sbE1hbmFnZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBtYXRjaCBjb250cm9sbGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBzb3VyY2UgbWF0Y2ggY29udHJvbGxlci4KKyAgICAgKgorICAgICAqLworICAgIFNvdXJjZU1hdGNoQ29udHJvbGxlciAmR2V0U291cmNlTWF0Y2hDb250cm9sbGVyKHZvaWQpIHsgcmV0dXJuIG1Tb3VyY2VNYXRjaENvbnRyb2xsZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIElQIGxldmVsIGNvdW50ZXJzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIElQIGxldmVsIGNvdW50ZXJzLgorICAgICAqCisgICAgICovCisgICAgY29uc3Qgb3RJcENvdW50ZXJzICZHZXRDb3VudGVycyh2b2lkKSBjb25zdCB7IHJldHVybiBtSXBDb3VudGVyczsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtTdGF0ZVVwZGF0ZVBlcmlvZCAgICAgPSAxMDAwLCAgLy8vPCBTdGF0ZSB1cGRhdGUgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy4KKyAgICB9OworCisgICAgZW51bQorICAgIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIE1heGltdW0gbnVtYmVyIG9mIHR4IGF0dGVtcHRzIGJ5IGBNZXNoRm9yd2FyZGVyYCBmb3IgYW4gb3V0Ym91bmQgaW5kaXJlY3QgZnJhbWUgKGZvciBhIHNsZWVweSBjaGlsZCkuIFRoZQorICAgICAgICAgKiBgTWVzaEZvcndhZGVyYCBhdHRlbXB0cyBvY2N1ciBmb2xsb3dpbmcgdGhlIHJlY2VwdGlvbiBvZiBhIG5ldyBkYXRhIHJlcXVlc3QgY29tbWFuZCAoYSBuZXcgZGF0YSBwb2xsKSBmcm9tCisgICAgICAgICAqIHRoZSBzbGVlcHkgY2hpbGQuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBrTWF4UG9sbFRyaWdnZXJlZFR4QXR0ZW1wdHMgPSBPUEVOVEhSRUFEX0NPTkZJR19NQVhfVFhfQVRURU1QVFNfSU5ESVJFQ1RfUE9MTFMsCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNldC9lbmFibGUgMTUuNCBhY2sgcmVxdWVzdCBpbiB0aGUgTUFDIGhlYWRlciBvZiBhIHN1cGVydmlzaW9uIG1lc3NhZ2UuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBrU3VwZXJ2aXNpb25Nc2dBY2tSZXF1ZXN0ICAgPSAoT1BFTlRIUkVBRF9DT05GSUdfU1VQRVJWSVNJT05fTVNHX05PX0FDS19SRVFVRVNUID09IDApID8gdHJ1ZSA6IGZhbHNlLAorICAgIH07CisKKyAgICBlbnVtIE1lc3NhZ2VBY3Rpb24gICAgICAgICAgICAgICAgICAgLy8vPCBEZWZpbmVzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGluIGBMb2dNZXNzYWdlSW5mbygpYCBtZXRob2QuCisgICAgeworICAgICAgICBrTWVzc2FnZVJlY2VpdmUsICAgICAgICAgICAgICAgICAvLy88IEluZGljYXRlcyB0aGF0IHRoZSBtZXNzYWdlIHdhcyByZWNlaXZlZC4KKyAgICAgICAga01lc3NhZ2VUcmFuc21pdCwgICAgICAgICAgICAgICAgLy8vPCBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVzc2FnZSB3YXMgc2VudC4KKyAgICAgICAga01lc3NhZ2VQcmVwYXJlSW5kaXJlY3QsICAgICAgICAgLy8vPCBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVzc2FnZSBpcyBiZWluZyBwcmVwYXJlZCBmb3IgaW5kaXJlY3QgdHguCisgICAgICAgIGtNZXNzYWdlRHJvcCwgICAgICAgICAgICAgICAgICAgIC8vLzwgSW5kaWNhdGVzIHRoYXQgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZHJvcHBlZCBmcm9tIHJlYXNzZW1ibHkgbGlzdC4KKyAgICB9OworCisgICAgb3RFcnJvciBDaGVja1JlYWNoYWJpbGl0eSh1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYUZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjOjpBZGRyZXNzICZhTWVzaFNvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWVzaERlc3QpOworCisgICAgb3RFcnJvciBHZXRNYWNEZXN0aW5hdGlvbkFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhSXA2QWRkciwgTWFjOjpBZGRyZXNzICZhTWFjQWRkcik7CisgICAgb3RFcnJvciBHZXRNYWNTb3VyY2VBZGRyZXNzKGNvbnN0IElwNjo6QWRkcmVzcyAmYUlwNkFkZHIsIE1hYzo6QWRkcmVzcyAmYU1hY0FkZHIpOworICAgIE1lc3NhZ2UgKkdldERpcmVjdFRyYW5zbWlzc2lvbih2b2lkKTsKKyAgICBNZXNzYWdlICpHZXRJbmRpcmVjdFRyYW5zbWlzc2lvbihDaGlsZCAmYUNoaWxkKTsKKyAgICBvdEVycm9yIFByZXBhcmVEaXNjb3ZlclJlcXVlc3Qodm9pZCk7CisgICAgdm9pZCBQcmVwYXJlSW5kaXJlY3RUcmFuc21pc3Npb24oTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IENoaWxkICZhQ2hpbGQpOworICAgIHZvaWQgSGFuZGxlTWVzaCh1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYVBheWxvYWRMZW5ndGgsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVGcmFnbWVudCh1aW50OF90ICphRnJhbWUsIHVpbnQ4X3QgYVBheWxvYWRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWM6OkFkZHJlc3MgJmFNYWNTb3VyY2UsIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUxvd3BhbkhDKHVpbnQ4X3QgKmFGcmFtZSwgdWludDhfdCBhUGF5bG9hZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hYzo6QWRkcmVzcyAmYU1hY1NvdXJjZSwgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlRGF0YVJlcXVlc3QoY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlLCBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIFNlbmRQb2xsKE1lc3NhZ2UgJmFNZXNzYWdlLCBNYWM6OkZyYW1lICZhRnJhbWUpOworICAgIG90RXJyb3IgU2VuZE1lc2goTWVzc2FnZSAmYU1lc3NhZ2UsIE1hYzo6RnJhbWUgJmFGcmFtZSk7CisgICAgb3RFcnJvciBTZW5kRnJhZ21lbnQoTWVzc2FnZSAmYU1lc3NhZ2UsIE1hYzo6RnJhbWUgJmFGcmFtZSk7CisgICAgb3RFcnJvciBTZW5kRW1wdHlGcmFtZShNYWM6OkZyYW1lICZhRnJhbWUsIGJvb2wgYUFja1JlcXVlc3QpOworICAgIG90RXJyb3IgVXBkYXRlSXA2Um91dGUoTWVzc2FnZSAmYU1lc3NhZ2UpOworICAgIG90RXJyb3IgVXBkYXRlTWVzaFJvdXRlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEhhbmRsZURhdGFncmFtKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjOjpBZGRyZXNzICZhTWFjU291cmNlKTsKKyAgICB2b2lkIENsZWFyUmVhc3NlbWJseUxpc3Qodm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVSZWNlaXZlZEZyYW1lKE1hYzo6UmVjZWl2ZXIgJmFSZWNlaXZlciwgTWFjOjpGcmFtZSAmYUZyYW1lKTsKKyAgICB2b2lkIEhhbmRsZVJlY2VpdmVkRnJhbWUoTWFjOjpGcmFtZSAmYUZyYW1lKTsKKyAgICBzdGF0aWMgb3RFcnJvciBIYW5kbGVGcmFtZVJlcXVlc3QoTWFjOjpTZW5kZXIgJmFTZW5kZXIsIE1hYzo6RnJhbWUgJmFGcmFtZSk7CisgICAgb3RFcnJvciBIYW5kbGVGcmFtZVJlcXVlc3QoTWFjOjpGcmFtZSAmYUZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVTZW50RnJhbWUoTWFjOjpTZW5kZXIgJmFTZW5kZXIsIE1hYzo6RnJhbWUgJmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpOworICAgIHZvaWQgSGFuZGxlU2VudEZyYW1lKE1hYzo6RnJhbWUgJmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURpc2NvdmVyVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVEaXNjb3ZlclRpbWVyKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlYXNzZW1ibHlUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVJlYXNzZW1ibHlUaW1lcih2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBTY2hlZHVsZVRyYW5zbWlzc2lvblRhc2soVGFza2xldCAmYVRhc2tsZXQpOworICAgIHZvaWQgU2NoZWR1bGVUcmFuc21pc3Npb25UYXNrKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURhdGFQb2xsVGltZW91dChNYWM6OlJlY2VpdmVyICZhUmVjZWl2ZXIpOworCisgICAgb3RFcnJvciBBZGRQZW5kaW5nU3JjTWF0Y2hFbnRyaWVzKHZvaWQpOworICAgIG90RXJyb3IgQWRkU3JjTWF0Y2hFbnRyeShDaGlsZCAmYUNoaWxkKTsKKyAgICB2b2lkIENsZWFyU3JjTWF0Y2hFbnRyeShDaGlsZCAmYUNoaWxkKTsKKworICAgIHN0YXRpYyBNZXNoRm9yd2FyZGVyICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICB2b2lkIExvZ0lwNk1lc3NhZ2UoTWVzc2FnZUFjdGlvbiBhQWN0aW9uLCBjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgTWFjOjpBZGRyZXNzICphTWFjQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgb3RFcnJvciBhRXJyb3IpOworCisgICAgTWFjOjpSZWNlaXZlciAgICAgICAgIG1NYWNSZWNlaXZlcjsKKyAgICBNYWM6OlNlbmRlciAgICAgICAgICAgbU1hY1NlbmRlcjsKKyAgICBUaW1lciAgICAgICAgICAgICAgICAgbURpc2NvdmVyVGltZXI7CisgICAgVGltZXIgICAgICAgICAgICAgICAgIG1SZWFzc2VtYmx5VGltZXI7CisKKyAgICBQcmlvcml0eVF1ZXVlICAgICAgICAgbVNlbmRRdWV1ZTsKKyAgICBNZXNzYWdlUXVldWUgICAgICAgICAgbVJlYXNzZW1ibHlMaXN0OworICAgIE1lc3NhZ2VRdWV1ZSAgICAgICAgICBtUmVzb2x2aW5nUXVldWU7CisgICAgdWludDE2X3QgICAgICAgICAgICAgIG1GcmFnVGFnOworICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtTWVzc2FnZU5leHRPZmZzZXQ7CisKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgbVNlbmRNZXNzYWdlRnJhbWVDb3VudGVyOworICAgIE1lc3NhZ2UgICAgICAgICAgICAgICAqbVNlbmRNZXNzYWdlOworICAgIGJvb2wgICAgICAgICAgICAgICAgICBtU2VuZE1lc3NhZ2VJc0FSZXRyYW5zbWlzc2lvbjsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgbVNlbmRNZXNzYWdlTWF4TWFjVHhBdHRlbXB0czsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgbVNlbmRNZXNzYWdlS2V5SWQ7CisgICAgdWludDhfdCAgICAgICAgICAgICAgIG1TZW5kTWVzc2FnZURhdGFTZXF1ZW5jZU51bWJlcjsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgbVN0YXJ0Q2hpbGRJbmRleDsKKworICAgIE1hYzo6QWRkcmVzcyAgICAgICAgICBtTWFjU291cmNlOworICAgIE1hYzo6QWRkcmVzcyAgICAgICAgICBtTWFjRGVzdDsKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgbU1lc2hTb3VyY2U7CisgICAgdWludDE2X3QgICAgICAgICAgICAgIG1NZXNoRGVzdDsKKyAgICBib29sICAgICAgICAgICAgICAgICAgbUFkZE1lc2hIZWFkZXI7CisKKyAgICBib29sICAgICAgICAgICAgICAgICAgbVNlbmRCdXN5OworCisgICAgVGFza2xldCAgICAgICAgICAgICAgIG1TY2hlZHVsZVRyYW5zbWlzc2lvblRhc2s7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgIG1FbmFibGVkOworCisgICAgdWludDMyX3QgICAgICAgICAgICAgIG1TY2FuQ2hhbm5lbHM7CisgICAgdWludDhfdCAgICAgICAgICAgICAgIG1TY2FuQ2hhbm5lbDsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgbVJlc3RvcmVDaGFubmVsOworICAgIHVpbnQxNl90ICAgICAgICAgICAgICBtUmVzdG9yZVBhbklkOworICAgIGJvb2wgICAgICAgICAgICAgICAgICBtU2Nhbm5pbmc7CisKKyAgICBEYXRhUG9sbE1hbmFnZXIgICAgICAgbURhdGFQb2xsTWFuYWdlcjsKKyAgICBTb3VyY2VNYXRjaENvbnRyb2xsZXIgbVNvdXJjZU1hdGNoQ29udHJvbGxlcjsKKworICAgIG90SXBDb3VudGVycyAgICAgICAgICBtSXBDb3VudGVyczsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUVTSF9GT1JXQVJERVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL21sZS5jcHAgYi9zcmMvY29yZS90aHJlYWQvbWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg0MjhmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL21sZS5jcHAKQEAgLTAsMCArMSwzMzE1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIE1MRSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGZvciB0aGUgVGhyZWFkIENoaWxkLCBSb3V0ZXIgYW5kIExlYWRlciByb2xlcy4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJtbGUudG1oIgorCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgIm1sZS5ocHAiCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9zZXR0aW5ncy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9zZXR0aW5ncy5ocHAiCisjaW5jbHVkZSAiY3J5cHRvL2Flc19jY20uaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJuZXQvbmV0aWYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvYWRkcmVzc19yZXNvbHZlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2tleV9tYW5hZ2VyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3JvdXRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1sZSB7CisKK01sZTo6TWxlKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtUmV0cmlldmVOZXdOZXR3b3JrRGF0YShmYWxzZSksCisgICAgbVJvbGUoT1RfREVWSUNFX1JPTEVfRElTQUJMRUQpLAorICAgIG1EZXZpY2VNb2RlKE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlIHwgTW9kZVRsdjo6a01vZGVTZWN1cmVEYXRhUmVxdWVzdCksCisgICAgaXNBc3NpZ25MaW5rUXVhbGl0eShmYWxzZSksCisgICAgbUFzc2lnbkxpbmtRdWFsaXR5KDApLAorICAgIG1Bc3NpZ25MaW5rTWFyZ2luKDApLAorICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUoa1BhcmVudElkbGUpLAorICAgIG1SZWF0dGFjaFN0YXRlKGtSZWF0dGFjaFN0b3ApLAorICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJk1sZTo6SGFuZGxlUGFyZW50UmVxdWVzdFRpbWVyLCB0aGlzKSwKKyAgICBtRGVsYXllZFJlc3BvbnNlVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJk1sZTo6SGFuZGxlRGVsYXllZFJlc3BvbnNlVGltZXIsIHRoaXMpLAorICAgIG1MYXN0UGFydGl0aW9uUm91dGVySWRTZXF1ZW5jZSgwKSwKKyAgICBtTGFzdFBhcnRpdGlvbklkKDApLAorICAgIG1QYXJlbnRMZWFkZXJDb3N0KDApLAorICAgIG1QYXJlbnRSZXF1ZXN0TW9kZShrQXR0YWNoQW55KSwKKyAgICBtUGFyZW50UHJpb3JpdHkoMCksCisgICAgbVBhcmVudExpbmtRdWFsaXR5MygwKSwKKyAgICBtUGFyZW50TGlua1F1YWxpdHkyKDApLAorICAgIG1QYXJlbnRMaW5rUXVhbGl0eTEoMCksCisgICAgbUNoaWxkVXBkYXRlQXR0ZW1wdHMoMCksCisgICAgbVBhcmVudElzU2luZ2xldG9uKGZhbHNlKSwKKyAgICBtU29ja2V0KGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVWRwKSwKKyAgICBtVGltZW91dChrTWxlRW5kRGV2aWNlVGltZW91dCksCisgICAgbVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoYVRocmVhZE5ldGlmLkdldElwNigpLm1UYXNrbGV0U2NoZWR1bGVyLCAmTWxlOjpIYW5kbGVTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0LCB0aGlzKSwKKyAgICBtRGlzY292ZXJIYW5kbGVyKE5VTEwpLAorICAgIG1EaXNjb3ZlckNvbnRleHQoTlVMTCksCisgICAgbUlzRGlzY292ZXJJblByb2dyZXNzKGZhbHNlKSwKKyAgICBtRW5hYmxlRXVpNjRGaWx0ZXJpbmcoZmFsc2UpLAorICAgIG1Bbm5vdW5jZUNoYW5uZWwoT1RfUkFESU9fQ0hBTk5FTF9NSU4pLAorICAgIG1QcmV2aW91c0NoYW5uZWwoMCksCisgICAgbVByZXZpb3VzUGFuSWQoTWFjOjprUGFuSWRCcm9hZGNhc3QpCit7CisgICAgdWludDhfdCBtZXNoTG9jYWxQcmVmaXhbOF07CisKKyAgICBtZW1zZXQoJm1MZWFkZXJEYXRhLCAwLCBzaXplb2YobUxlYWRlckRhdGEpKTsKKyAgICBtZW1zZXQoJm1QYXJlbnRMZWFkZXJEYXRhLCAwLCBzaXplb2YobVBhcmVudExlYWRlckRhdGEpKTsKKyAgICBtZW1zZXQoJm1QYXJlbnQsIDAsIHNpemVvZihtUGFyZW50KSk7CisgICAgbWVtc2V0KCZtQ2hpbGRJZFJlcXVlc3QsIDAsIHNpemVvZihtQ2hpbGRJZFJlcXVlc3QpKTsKKyAgICBtZW1zZXQoJm1MaW5rTG9jYWw2NCwgMCwgc2l6ZW9mKG1MaW5rTG9jYWw2NCkpOworICAgIG1lbXNldCgmbU1lc2hMb2NhbDY0LCAwLCBzaXplb2YobU1lc2hMb2NhbDY0KSk7CisgICAgbWVtc2V0KCZtTWVzaExvY2FsMTYsIDAsIHNpemVvZihtTWVzaExvY2FsMTYpKTsKKyAgICBtZW1zZXQoJm1MaW5rTG9jYWxBbGxUaHJlYWROb2RlcywgMCwgc2l6ZW9mKG1MaW5rTG9jYWxBbGxUaHJlYWROb2RlcykpOworICAgIG1lbXNldCgmbVJlYWxtTG9jYWxBbGxUaHJlYWROb2RlcywgMCwgc2l6ZW9mKG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMpKTsKKyAgICBtZW1zZXQoJm1MZWFkZXJBbG9jLCAwLCBzaXplb2YobUxlYWRlckFsb2MpKTsKKyAgICBtZW1zZXQoJm1QYXJlbnRDYW5kaWRhdGUsIDAsIHNpemVvZihtUGFyZW50Q2FuZGlkYXRlKSk7CisKKyAgICAvLyBsaW5rLWxvY2FsIDY0CisgICAgbUxpbmtMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICBtTGlua0xvY2FsNjQuR2V0QWRkcmVzcygpLlNldElpZCgqYVRocmVhZE5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgbUxpbmtMb2NhbDY0Lm1QcmVmaXhMZW5ndGggPSA2NDsKKyAgICBtTGlua0xvY2FsNjQubVByZWZlcnJlZCA9IHRydWU7CisgICAgbUxpbmtMb2NhbDY0Lm1WYWxpZCA9IHRydWU7CisgICAgYVRocmVhZE5ldGlmLkFkZFVuaWNhc3RBZGRyZXNzKG1MaW5rTG9jYWw2NCk7CisKKyAgICAvLyBMZWFkZXIgQWxvYworICAgIG1MZWFkZXJBbG9jLm1QcmVmaXhMZW5ndGggPSAxMjg7CisgICAgbUxlYWRlckFsb2MubVByZWZlcnJlZCA9IHRydWU7CisgICAgbUxlYWRlckFsb2MubVZhbGlkID0gdHJ1ZTsKKyAgICBtTGVhZGVyQWxvYy5tU2NvcGVPdmVycmlkZSA9IElwNjo6QWRkcmVzczo6a1JlYWxtTG9jYWxTY29wZTsKKyAgICBtTGVhZGVyQWxvYy5tU2NvcGVPdmVycmlkZVZhbGlkID0gdHJ1ZTsKKworICAgIC8vIGluaXRpYWxpemUgTWVzaCBMb2NhbCBQcmVmaXgKKyAgICBtZXNoTG9jYWxQcmVmaXhbMF0gPSAweGZkOworICAgIG1lbWNweShtZXNoTG9jYWxQcmVmaXggKyAxLCBhVGhyZWFkTmV0aWYuR2V0TWFjKCkuR2V0RXh0ZW5kZWRQYW5JZCgpLCA1KTsKKyAgICBtZXNoTG9jYWxQcmVmaXhbNl0gPSAweDAwOworICAgIG1lc2hMb2NhbFByZWZpeFs3XSA9IDB4MDA7CisKKyAgICAvLyBtZXNoLWxvY2FsIDY0CisgICAgZm9yIChpbnQgaSA9IE9UX0lQNl9QUkVGSVhfU0laRTsgaSA8IE9UX0lQNl9BRERSRVNTX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIG1NZXNoTG9jYWw2NC5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOFtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICB9CisKKyAgICBtTWVzaExvY2FsNjQubVByZWZpeExlbmd0aCA9IDY0OworICAgIG1NZXNoTG9jYWw2NC5tUHJlZmVycmVkID0gdHJ1ZTsKKyAgICBtTWVzaExvY2FsNjQubVZhbGlkID0gdHJ1ZTsKKyAgICBtTWVzaExvY2FsNjQubVNjb3BlT3ZlcnJpZGUgPSBJcDY6OkFkZHJlc3M6OmtSZWFsbUxvY2FsU2NvcGU7CisgICAgbU1lc2hMb2NhbDY0Lm1TY29wZU92ZXJyaWRlVmFsaWQgPSB0cnVlOworICAgIFNldE1lc2hMb2NhbFByZWZpeChtZXNoTG9jYWxQcmVmaXgpOyAvLyBBbHNvIGNhbGxzIEFkZFVuaWNhc3RBZGRyZXNzCisKKyAgICAvLyBtZXNoLWxvY2FsIDE2CisgICAgbU1lc2hMb2NhbDE2LkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICBtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzVdID0gSG9zdFN3YXAxNigweDAwZmYpOworICAgIG1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCkubUZpZWxkcy5tMTZbNl0gPSBIb3N0U3dhcDE2KDB4ZmUwMCk7CisgICAgbU1lc2hMb2NhbDE2Lm1QcmVmaXhMZW5ndGggPSA2NDsKKyAgICBtTWVzaExvY2FsMTYubVByZWZlcnJlZCA9IHRydWU7CisgICAgbU1lc2hMb2NhbDE2Lm1WYWxpZCA9IHRydWU7CisgICAgbU1lc2hMb2NhbDE2Lm1TY29wZU92ZXJyaWRlID0gSXA2OjpBZGRyZXNzOjprUmVhbG1Mb2NhbFNjb3BlOworICAgIG1NZXNoTG9jYWwxNi5tU2NvcGVPdmVycmlkZVZhbGlkID0gdHJ1ZTsKKyAgICBtTWVzaExvY2FsMTYubVJsb2MgPSB0cnVlOworCisgICAgLy8gU3RvcmUgUkxPQyBhZGRyZXNzIHJlZmVyZW5jZSBpbiBNUEwgbW9kdWxlLgorICAgIGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tTXBsLlNldE1hdGNoaW5nQWRkcmVzcyhtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpKTsKKworICAgIC8vIGxpbmstbG9jYWwgYWxsIHRocmVhZCBub2RlcworICAgIG1MaW5rTG9jYWxBbGxUaHJlYWROb2Rlcy5HZXRBZGRyZXNzKCkubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYzMik7CisgICAgbUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICBtTGlua0xvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDEpOworICAgIGFUaHJlYWROZXRpZi5TdWJzY3JpYmVNdWx0aWNhc3QobUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzKTsKKworICAgIC8vIHJlYWxtLWxvY2FsIGFsbCB0aHJlYWQgbm9kZXMKKyAgICBtUmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZjMzKTsKKyAgICBtUmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICBtUmVhbG1Mb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoMHgwMDAxKTsKKyAgICBhVGhyZWFkTmV0aWYuU3Vic2NyaWJlTXVsdGljYXN0KG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMpOworCisgICAgbU5ldGlmQ2FsbGJhY2suU2V0KCZNbGU6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkLCB0aGlzKTsKKyAgICBhVGhyZWFkTmV0aWYuUmVnaXN0ZXJDYWxsYmFjayhtTmV0aWZDYWxsYmFjayk7CisKKyAgICBtZW1zZXQoJm1BZGRyNjQsIDAsIHNpemVvZihtQWRkcjY0KSk7Cit9CisKK290RXJyb3IgTWxlOjpFbmFibGUodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDY6OlNvY2tBZGRyIHNvY2thZGRyOworCisgICAgLy8gbWVtY3B5KCZzb2NrYWRkci5tQWRkciwgJm1MaW5rTG9jYWw2NC5HZXRBZGRyZXNzKCksIHNpemVvZihzb2NrYWRkci5tQWRkcikpOworICAgIHNvY2thZGRyLm1Qb3J0ID0ga1VkcFBvcnQ7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuT3BlbigmTWxlOjpIYW5kbGVVZHBSZWNlaXZlLCB0aGlzKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuQmluZChzb2NrYWRkcikpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkRpc2FibGUodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTdG9wKGZhbHNlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuQ2xvc2UoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6U3RhcnQoYm9vbCBhRW5hYmxlUmVhdHRhY2gsIGJvb2wgYUFubm91bmNlQXR0YWNoKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgLy8gY2Fubm90IGJyaW5nIHVwIHRoZSBpbnRlcmZhY2UgaWYgSUVFRSA4MDIuMTUuNCBwcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQKKyAgICBWZXJpZnlPckV4aXQob3RQbGF0UmFkaW9HZXRQcm9taXNjdW91cyhuZXRpZi5HZXRJbnN0YW5jZSgpKSA9PSBmYWxzZSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICBWZXJpZnlPckV4aXQobmV0aWYuSXNVcCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgbVJvbGUgPSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDsKKyAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ST0xFKTsKKyAgICBTZXRTdGF0ZURldGFjaGVkKCk7CisKKyAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU3RhcnQoKTsKKworICAgIGlmIChhRW5hYmxlUmVhdHRhY2gpCisgICAgeworICAgICAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaFN0YXJ0OworICAgIH0KKworICAgIGlmIChhQW5ub3VuY2VBdHRhY2ggfHwgKEdldFJsb2MxNigpID09IE1hYzo6a1Nob3J0QWRkckludmFsaWQpKQorICAgIHsKKyAgICAgICAgQmVjb21lQ2hpbGQoa0F0dGFjaEFueSk7CisgICAgfQorICAgIGVsc2UgaWYgKElzQWN0aXZlUm91dGVyKEdldFJsb2MxNigpKSkKKyAgICB7CisgICAgICAgIGlmIChuZXRpZi5HZXRNbGUoKS5CZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjprVG9vRmV3Um91dGVycykgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lQ2hpbGQoa0F0dGFjaEFueSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRTeW5jaHJvbml6ZTsKKyAgICAgICAgbUNoaWxkVXBkYXRlQXR0ZW1wdHMgPSAwOworICAgICAgICBTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCk7CisgICAgfQorCitleGl0OgorICAgIG90TG9nRnVuY0V4aXRFcnIoZXJyb3IpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OlN0b3AoYm9vbCBhQ2xlYXJOZXR3b3JrRGF0YXNldHMpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlN0b3AoKTsKKyAgICBTZXRTdGF0ZURldGFjaGVkKCk7CisgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobU1lc2hMb2NhbDE2KTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLkNsZWFyKCk7CisjZW5kaWYKKyAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkNsZWFyKCk7CisgICAgbWVtc2V0KCZtTGVhZGVyRGF0YSwgMCwgc2l6ZW9mKG1MZWFkZXJEYXRhKSk7CisKKyAgICBpZiAoYUNsZWFyTmV0d29ya0RhdGFzZXRzKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkhhbmRsZURldGFjaCgpOworICAgICAgICBuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkhhbmRsZURldGFjaCgpOworICAgIH0KKworICAgIG1Sb2xlID0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ7CisgICAgb3RMb2dGdW5jRXhpdCgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZTo6UmVzdG9yZSh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgU2V0dGluZ3M6Ok5ldHdvcmtJbmZvIG5ldHdvcmtJbmZvOworICAgIFNldHRpbmdzOjpQYXJlbnRJbmZvIHBhcmVudEluZm87CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLlJlc3RvcmUoKTsKKyAgICBuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLlJlc3RvcmUoKTsKKworICAgIGxlbmd0aCA9IHNpemVvZihuZXR3b3JrSW5mbyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFNldHRpbmdzR2V0KG5ldGlmLkdldEluc3RhbmNlKCksIFNldHRpbmdzOjprS2V5TmV0d29ya0luZm8sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbmV0d29ya0luZm8pLCAmbGVuZ3RoKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlbmd0aCA9PSBzaXplb2YobmV0d29ya0luZm8pLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtJbmZvLm1Sb2xlID49IE9UX0RFVklDRV9ST0xFX0NISUxELCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBtRGV2aWNlTW9kZSA9IG5ldHdvcmtJbmZvLm1EZXZpY2VNb2RlOworICAgIFNldFJsb2MxNihuZXR3b3JrSW5mby5tUmxvYzE2KTsKKyAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0Q3VycmVudEtleVNlcXVlbmNlKG5ldHdvcmtJbmZvLm1LZXlTZXF1ZW5jZSk7CisgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldE1sZUZyYW1lQ291bnRlcihuZXR3b3JrSW5mby5tTWxlRnJhbWVDb3VudGVyKTsKKyAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0TWFjRnJhbWVDb3VudGVyKG5ldHdvcmtJbmZvLm1NYWNGcmFtZUNvdW50ZXIpOworICAgIG5ldGlmLkdldE1hYygpLlNldEV4dEFkZHJlc3MobmV0d29ya0luZm8ubUV4dEFkZHJlc3MpOworICAgIFVwZGF0ZUxpbmtMb2NhbEFkZHJlc3MoKTsKKworICAgIG1lbWNweSgmbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04W09UX0lQNl9QUkVGSVhfU0laRV0sCisgICAgICAgICAgIG5ldHdvcmtJbmZvLm1NbElpZCwKKyAgICAgICAgICAgT1RfSVA2X0FERFJFU1NfU0laRSAtIE9UX0lQNl9QUkVGSVhfU0laRSk7CisKKyAgICBpZiAobmV0d29ya0luZm8ubVJsb2MxNiA9PSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGlmICghSXNBY3RpdmVSb3V0ZXIobmV0d29ya0luZm8ubVJsb2MxNikpCisgICAgeworICAgICAgICBsZW5ndGggPSBzaXplb2YocGFyZW50SW5mbyk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFBsYXRTZXR0aW5nc0dldChuZXRpZi5HZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleVBhcmVudEluZm8sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnBhcmVudEluZm8pLCAmbGVuZ3RoKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPj0gc2l6ZW9mKHBhcmVudEluZm8pLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBtZW1zZXQoJm1QYXJlbnQsIDAsIHNpemVvZihtUGFyZW50KSk7CisgICAgICAgIG1QYXJlbnQuU2V0RXh0QWRkcmVzcygqc3RhdGljX2Nhc3Q8TWFjOjpFeHRBZGRyZXNzICo+KCZwYXJlbnRJbmZvLm1FeHRBZGRyZXNzKSk7CisgICAgICAgIG1QYXJlbnQuU2V0RGV2aWNlTW9kZShNb2RlVGx2OjprTW9kZUZGRCB8IE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlIHwgTW9kZVRsdjo6a01vZGVGdWxsTmV0d29ya0RhdGEgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZVRsdjo6a01vZGVTZWN1cmVEYXRhUmVxdWVzdCk7CisgICAgICAgIG1QYXJlbnQuU2V0UmxvYzE2KEdldFJsb2MxNihHZXRSb3V0ZXJJZChuZXR3b3JrSW5mby5tUmxvYzE2KSkpOworICAgICAgICBtUGFyZW50LlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLlNldFJvdXRlcklkKEdldFJvdXRlcklkKEdldFJsb2MxNigpKSk7CisgICAgICAgIG5ldGlmLkdldE1sZSgpLlNldFByZXZpb3VzUGFydGl0aW9uSWQobmV0d29ya0luZm8ubVByZXZpb3VzUGFydGl0aW9uSWQpOworCisgICAgICAgIHN3aXRjaCAobmV0aWYuR2V0TWxlKCkuUmVzdG9yZUNoaWxkcmVuKCkpCisgICAgICAgIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgc2F2ZWQgY2hpbGRyZW4gaW4gbm9uLXZvbGF0aWxlIHNldHRpbmdzCisgICAgICAgIC8vIHRoYW4gY291bGQgYmUgcmVzdG9yZWQgb3IgdGhlIHZhbHVlcyBpbiB0aGUgc2V0dGluZ3MgYXJlCisgICAgICAgIC8vIGludmFsaWQsIGVyYXNlIGFsbCB0aGUgY2hpbGRyZW4gaW5mbyBpbiB0aGUgc2V0dGluZ3MgYW5kCisgICAgICAgIC8vIHJlZnJlc2ggdGhlIGluZm8gdG8gZW5zdXJlIHRoYXQgdGhlIG5vbi12b2xhdGlsZSBzZXR0aW5ncworICAgICAgICAvLyBzdGF5IGluIHN5bmMgd2l0aCB0aGUgY2hpbGQgdGFibGUuCisKKyAgICAgICAgY2FzZSBPVF9FUlJPUl9GQUlMRUQ6CisgICAgICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLlJlZnJlc2hTdG9yZWRDaGlsZHJlbigpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OlN0b3JlKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBTZXR0aW5nczo6TmV0d29ya0luZm8gbmV0d29ya0luZm87CisgICAgU2V0dGluZ3M6OlBhcmVudEluZm8gcGFyZW50SW5mbzsKKworICAgIFZlcmlmeU9yRXhpdChJc0F0dGFjaGVkKCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBpZiAobmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkdldFRpbWVzdGFtcCgpID09IE5VTEwpCisgICAgeworICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2VuZXJhdGVMb2NhbCgpOworICAgIH0KKworICAgIG1lbXNldCgmbmV0d29ya0luZm8sIDAsIHNpemVvZihuZXR3b3JrSW5mbykpOworCisgICAgbmV0d29ya0luZm8ubURldmljZU1vZGUgPSBtRGV2aWNlTW9kZTsKKyAgICBuZXR3b3JrSW5mby5tUm9sZSA9IG1Sb2xlOworICAgIG5ldHdvcmtJbmZvLm1SbG9jMTYgPSBHZXRSbG9jMTYoKTsKKyAgICBuZXR3b3JrSW5mby5tS2V5U2VxdWVuY2UgPSBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0Q3VycmVudEtleVNlcXVlbmNlKCk7CisgICAgbmV0d29ya0luZm8ubU1sZUZyYW1lQ291bnRlciA9IG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNbGVGcmFtZUNvdW50ZXIoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5USFJFQURfQ09ORklHX1NUT1JFX0ZSQU1FX0NPVU5URVJfQUhFQUQ7CisgICAgbmV0d29ya0luZm8ubU1hY0ZyYW1lQ291bnRlciA9IG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNYWNGcmFtZUNvdW50ZXIoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5USFJFQURfQ09ORklHX1NUT1JFX0ZSQU1FX0NPVU5URVJfQUhFQUQ7CisgICAgbmV0d29ya0luZm8ubVByZXZpb3VzUGFydGl0aW9uSWQgPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpOworICAgIG1lbWNweShuZXR3b3JrSW5mby5tRXh0QWRkcmVzcy5tOCwgbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLCBzaXplb2YobmV0d29ya0luZm8ubUV4dEFkZHJlc3MpKTsKKyAgICBtZW1jcHkobmV0d29ya0luZm8ubU1sSWlkLAorICAgICAgICAgICAmbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04W09UX0lQNl9QUkVGSVhfU0laRV0sCisgICAgICAgICAgIE9UX0lQNl9BRERSRVNTX1NJWkUgLSBPVF9JUDZfUFJFRklYX1NJWkUpOworCisKKyAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgeworICAgICAgICBtZW1zZXQoJnBhcmVudEluZm8sIDAsIHNpemVvZihwYXJlbnRJbmZvKSk7CisgICAgICAgIG1lbWNweSgmcGFyZW50SW5mby5tRXh0QWRkcmVzcywgJm1QYXJlbnQuR2V0RXh0QWRkcmVzcygpLCBzaXplb2YocGFyZW50SW5mby5tRXh0QWRkcmVzcykpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFBsYXRTZXR0aW5nc1NldChuZXRpZi5HZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleVBhcmVudEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnBhcmVudEluZm8pLCBzaXplb2YocGFyZW50SW5mbykpKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RQbGF0U2V0dGluZ3NTZXQobmV0aWYuR2V0SW5zdGFuY2UoKSwgU2V0dGluZ3M6OmtLZXlOZXR3b3JrSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZuZXR3b3JrSW5mbyksIHNpemVvZihuZXR3b3JrSW5mbykpKTsKKworICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5TZXRTdG9yZWRNbGVGcmFtZUNvdW50ZXIobmV0d29ya0luZm8ubU1sZUZyYW1lQ291bnRlcik7CisgICAgbmV0aWYuR2V0S2V5TWFuYWdlcigpLlNldFN0b3JlZE1hY0ZyYW1lQ291bnRlcihuZXR3b3JrSW5mby5tTWFjRnJhbWVDb3VudGVyKTsKKworICAgIG90TG9nRGViZ01sZShHZXRJbnN0YW5jZSgpLCAiU3RvcmUgTmV0d29yayBJbmZvcm1hdGlvbiIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkRpc2NvdmVyKHVpbnQzMl90IGFTY2FuQ2hhbm5lbHMsIHVpbnQxNl90IGFQYW5JZCwgYm9vbCBhSm9pbmVyLCBib29sIGFFbmFibGVFdWk2NEZpbHRlcmluZywKKyAgICAgICAgICAgICAgICAgICAgICBEaXNjb3ZlckhhbmRsZXIgYUNhbGxiYWNrLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisgICAgVGx2IHRsdjsKKyAgICBNZXNoQ29QOjpEaXNjb3ZlcnlSZXF1ZXN0VGx2IGRpc2NvdmVyeVJlcXVlc3Q7CisgICAgdWludDE2X3Qgc3RhcnRPZmZzZXQ7CisKKyAgICBWZXJpZnlPckV4aXQoIW1Jc0Rpc2NvdmVySW5Qcm9ncmVzcywgZXJyb3IgPSBPVF9FUlJPUl9CVVNZKTsKKworICAgIG1FbmFibGVFdWk2NEZpbHRlcmluZyA9IGFFbmFibGVFdWk2NEZpbHRlcmluZzsKKworICAgIG1EaXNjb3ZlckhhbmRsZXIgPSBhQ2FsbGJhY2s7CisgICAgbURpc2NvdmVyQ29udGV4dCA9IGFDb250ZXh0OworICAgIEdldE5ldGlmKCkuR2V0TWVzaEZvcndhcmRlcigpLlNldERpc2NvdmVyUGFyYW1ldGVycyhhU2NhbkNoYW5uZWxzKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlTWxlRGlzY292ZXJSZXF1ZXN0KTsKKyAgICBtZXNzYWdlLT5TZXRQYW5JZChhUGFuSWQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmREaXNjb3ZlcnlSZXF1ZXN0KSk7CisKKyAgICAvLyBEaXNjb3ZlcnkgVExWCisgICAgdGx2LlNldFR5cGUoVGx2OjprRGlzY292ZXJ5KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisKKyAgICBzdGFydE9mZnNldCA9IG1lc3NhZ2UtPkdldExlbmd0aCgpOworCisgICAgLy8gRGlzY292ZXJ5IFJlcXVlc3QgVExWCisgICAgZGlzY292ZXJ5UmVxdWVzdC5Jbml0KCk7CisgICAgZGlzY292ZXJ5UmVxdWVzdC5TZXRWZXJzaW9uKGtWZXJzaW9uKTsKKyAgICBkaXNjb3ZlcnlSZXF1ZXN0LlNldEpvaW5lcihhSm9pbmVyKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZkaXNjb3ZlcnlSZXF1ZXN0LCBzaXplb2YoZGlzY292ZXJ5UmVxdWVzdCkpKTsKKworICAgIHRsdi5TZXRMZW5ndGgoc3RhdGljX2Nhc3Q8dWludDhfdD4obWVzc2FnZS0+R2V0TGVuZ3RoKCkgLSBzdGFydE9mZnNldCkpOworICAgIG1lc3NhZ2UtPldyaXRlKHN0YXJ0T2Zmc2V0IC0gc2l6ZW9mKHRsdiksIHNpemVvZih0bHYpLCAmdGx2KTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMDIpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIG1Jc0Rpc2NvdmVySW5Qcm9ncmVzcyA9IHRydWU7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGlzY292ZXJ5IHJlcXVlc3QiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgTWxlOjpJc0Rpc2NvdmVySW5Qcm9ncmVzcyh2b2lkKQoreworICAgIHJldHVybiBtSXNEaXNjb3ZlckluUHJvZ3Jlc3M7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVEaXNjb3ZlckNvbXBsZXRlKHZvaWQpCit7CisgICAgbUlzRGlzY292ZXJJblByb2dyZXNzID0gZmFsc2U7CisgICAgbUVuYWJsZUV1aTY0RmlsdGVyaW5nID0gZmFsc2U7CisgICAgbURpc2NvdmVySGFuZGxlcihOVUxMLCBtRGlzY292ZXJDb250ZXh0KTsKK30KKworb3RFcnJvciBNbGU6OkJlY29tZURldGFjaGVkKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG90TG9nRnVuY0VudHJ5KCk7CisKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkhhbmRsZURldGFjaCgpOworCisgICAgU2V0U3RhdGVEZXRhY2hlZCgpOworICAgIFNldFJsb2MxNihNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKTsKKyAgICBCZWNvbWVDaGlsZChrQXR0YWNoQW55KTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpCZWNvbWVDaGlsZChBdHRhY2hNb2RlIGFNb2RlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBvdExvZ0Z1bmNFbnRyeSgpOworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdChtUGFyZW50UmVxdWVzdFN0YXRlID09IGtQYXJlbnRJZGxlLCBlcnJvciA9IE9UX0VSUk9SX0JVU1kpOworCisgICAgaWYgKG1SZWF0dGFjaFN0YXRlID09IGtSZWF0dGFjaFN0YXJ0KQorICAgIHsKKyAgICAgICAgaWYgKG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5SZXN0b3JlKCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlYXR0YWNoU3RhdGUgPSBrUmVhdHRhY2hBY3RpdmU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaFN0b3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZXNldFBhcmVudENhbmRpZGF0ZSgpOworICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50UmVxdWVzdFN0YXJ0OworICAgIG1QYXJlbnRSZXF1ZXN0TW9kZSA9IGFNb2RlOworCisgICAgaWYgKGFNb2RlICE9IGtBdHRhY2hCZXR0ZXIpCisgICAgeworICAgICAgICBtZW1zZXQoJm1QYXJlbnQsIDAsIHNpemVvZihtUGFyZW50KSk7CisKKyAgICAgICAgaWYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLlN0b3BBZHZlcnRpc2VUaW1lcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFNb2RlID09IGtBdHRhY2hBbnkpCisgICAgeworICAgICAgICBtUGFyZW50LlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKyAgICAgICAgbUxhc3RQYXJ0aXRpb25JZCA9IG5ldGlmLkdldE1sZSgpLkdldFByZXZpb3VzUGFydGl0aW9uSWQoKTsKKyAgICAgICAgbUxhc3RQYXJ0aXRpb25Sb3V0ZXJJZFNlcXVlbmNlID0gbmV0aWYuR2V0TWxlKCkuR2V0Um91dGVySWRTZXF1ZW5jZSgpOworICAgIH0KKworICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9uV2hlbklkbGUodHJ1ZSk7CisKKyAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KChvdFBsYXRSYW5kb21HZXQoKSAlIGtQYXJlbnRSZXF1ZXN0Um91dGVyVGltZW91dCkgKyAxKTsKKworZXhpdDoKKyAgICBvdExvZ0Z1bmNFeGl0RXJyKGVycm9yKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgTWxlOjpJc0F0dGFjaGVkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCB8fCBtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKTsKK30KKworb3RFcnJvciBNbGU6OlNldFN0YXRlRGV0YWNoZWQodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgaWYgKG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEKQorICAgIHsKKyAgICAgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfUk9MRSk7CisgICAgfQorCisgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG5ldGlmLlJlbW92ZVVuaWNhc3RBZGRyZXNzKG1MZWFkZXJBbG9jKTsKKyAgICB9CisKKyAgICBtUm9sZSA9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOworICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50SWRsZTsKKyAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0b3AoKTsKKyAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPZmYoKTsKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRCZWFjb25FbmFibGVkKGZhbHNlKTsKKyAgICBuZXRpZi5HZXRNbGUoKS5IYW5kbGVEZXRhY2hTdGFydCgpOworICAgIG5ldGlmLkdldElwNigpLlNldEZvcndhcmRpbmdFbmFibGVkKGZhbHNlKTsKKyAgICBuZXRpZi5HZXRJcDYoKS5tTXBsLlNldFRpbWVyRXhwaXJhdGlvbnMoMCk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIk1vZGUgLT4gRGV0YWNoZWQiKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNbGU6OlNldFN0YXRlQ2hpbGQodWludDE2X3QgYVJsb2MxNikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgaWYgKG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgIHsKKyAgICAgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfUk9MRSk7CisgICAgfQorCisgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG5ldGlmLlJlbW92ZVVuaWNhc3RBZGRyZXNzKG1MZWFkZXJBbG9jKTsKKyAgICB9CisKKyAgICBTZXRSbG9jMTYoYVJsb2MxNik7CisgICAgbVJvbGUgPSBPVF9ERVZJQ0VfUk9MRV9DSElMRDsKKyAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgbUNoaWxkVXBkYXRlQXR0ZW1wdHMgPSAwOworICAgIG5ldGlmLkdldE1hYygpLlNldEJlYWNvbkVuYWJsZWQoZmFsc2UpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSAhPSAwKQorICAgIHsKKyAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdGFydChUaW1lcjo6U2VjVG9Nc2VjKG1UaW1lb3V0KSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtVbmljYXN0UmV0cmFuc21pc3Npb25EZWxheSkgKiBrTWF4Q2hpbGRLZWVwQWxpdmVBdHRlbXB0cyk7CisgICAgfQorCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSAhPSAwKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWxlKCkuSGFuZGxlQ2hpbGRTdGFydChtUGFyZW50UmVxdWVzdE1vZGUpOworICAgIH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxvY2FsKCkuQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIoKTsKKyNlbmRpZgorICAgIG5ldGlmLkdldElwNigpLlNldEZvcndhcmRpbmdFbmFibGVkKGZhbHNlKTsKKyAgICBuZXRpZi5HZXRJcDYoKS5tTXBsLlNldFRpbWVyRXhwaXJhdGlvbnMoa01wbENoaWxkRGF0YU1lc3NhZ2VUaW1lckV4cGlyYXRpb25zKTsKKworICAgIC8vIE9uY2UgdGhlIFRocmVhZCBkZXZpY2UgcmVjZWl2ZXMgdGhlIG5ldyBBY3RpdmUgQ29tbWlzc2lvbmluZyBEYXRhc2V0LCB0aGUgZGV2aWNlIE1VU1QKKyAgICAvLyB0cmFuc21pdCBpdHMgb3duIEFubm91bmNlIG1lc3NhZ2VzIG9uIHRoZSBjaGFubmVsIGl0IHdhcyBvbiBwcmlvciB0byB0aGUgYXR0YWNobWVudC4KKyAgICBpZiAobVByZXZpb3VzUGFuSWQgIT0gTWFjOjprUGFuSWRCcm9hZGNhc3QpCisgICAgeworICAgICAgICBtUHJldmlvdXNQYW5JZCA9IE1hYzo6a1BhbklkQnJvYWRjYXN0OworICAgICAgICBuZXRpZi5HZXRBbm5vdW5jZUJlZ2luU2VydmVyKCkuU2VuZEFubm91bmNlKDEgPDwgbVByZXZpb3VzQ2hhbm5lbCk7CisgICAgfQorCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJNb2RlIC0+IENoaWxkIik7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWxlOjpTZXRUaW1lb3V0KHVpbnQzMl90IGFUaW1lb3V0KQoreworICAgIFZlcmlmeU9yRXhpdChtVGltZW91dCAhPSBhVGltZW91dCk7CisKKyAgICBpZiAoYVRpbWVvdXQgPCBrTWluVGltZW91dCkKKyAgICB7CisgICAgICAgIGFUaW1lb3V0ID0ga01pblRpbWVvdXQ7CisgICAgfQorCisgICAgbVRpbWVvdXQgPSBhVGltZW91dDsKKworICAgIEdldE5ldGlmKCkuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlJlY2FsY3VsYXRlUG9sbFBlcmlvZCgpOworCisgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgIHsKKyAgICAgICAgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNbGU6OlNldERldmljZU1vZGUodWludDhfdCBhRGV2aWNlTW9kZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG9sZE1vZGUgPSBtRGV2aWNlTW9kZTsKKworICAgIFZlcmlmeU9yRXhpdCgoYURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCB8fCAoYURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgIT0gMCwKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIFZlcmlmeU9yRXhpdChtRGV2aWNlTW9kZSAhPSBhRGV2aWNlTW9kZSk7CisKKyAgICBtRGV2aWNlTW9kZSA9IGFEZXZpY2VNb2RlOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIFNldFN0YXRlQ2hpbGQoR2V0UmxvYzE2KCkpOworICAgICAgICBTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGlmICgob2xkTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSAhPSAwICYmIChhRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworY29uc3QgSXA2OjpBZGRyZXNzICZNbGU6OkdldExpbmtMb2NhbEFkZHJlc3Modm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUxpbmtMb2NhbDY0LkdldEFkZHJlc3MoKTsKK30KKworb3RFcnJvciBNbGU6OlVwZGF0ZUxpbmtMb2NhbEFkZHJlc3Modm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobUxpbmtMb2NhbDY0KTsKKyAgICBtTGlua0xvY2FsNjQuR2V0QWRkcmVzcygpLlNldElpZCgqbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpKTsKKyAgICBuZXRpZi5BZGRVbmljYXN0QWRkcmVzcyhtTGlua0xvY2FsNjQpOworCisgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfTExfQUREUik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworY29uc3QgdWludDhfdCAqTWxlOjpHZXRNZXNoTG9jYWxQcmVmaXgodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1lc2hMb2NhbDE2LkdldEFkZHJlc3MoKS5tRmllbGRzLm04OworfQorCitvdEVycm9yIE1sZTo6U2V0TWVzaExvY2FsUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFNZXNoTG9jYWxQcmVmaXgpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIGlmIChtZW1jbXAobU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04LCBhTWVzaExvY2FsUHJlZml4LCA4KSA9PSAwKQorICAgIHsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIC8vIFdlIG11c3QgcmVtb3ZlIHRoZSBvbGQgYWRkcmVzcyBiZWZvcmUgYWRkaW5nIHRoZSBuZXcgb25lLgorICAgIG5ldGlmLlJlbW92ZVVuaWNhc3RBZGRyZXNzKG1NZXNoTG9jYWw2NCk7CisgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobU1lc2hMb2NhbDE2KTsKKworICAgIG1lbWNweShtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpLm1GaWVsZHMubTgsIGFNZXNoTG9jYWxQcmVmaXgsIDgpOworICAgIG1lbWNweShtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpLm1GaWVsZHMubTgsIG1NZXNoTG9jYWw2NC5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOCwgOCk7CisKKyAgICBtTGlua0xvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubThbM10gPSA2NDsKKyAgICBtZW1jcHkobUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKS5tRmllbGRzLm04ICsgNCwgbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04LCA4KTsKKworICAgIG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpLm1GaWVsZHMubThbM10gPSA2NDsKKyAgICBtZW1jcHkobVJlYWxtTG9jYWxBbGxUaHJlYWROb2Rlcy5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOCArIDQsIG1NZXNoTG9jYWw2NC5HZXRBZGRyZXNzKCkubUZpZWxkcy5tOCwgOCk7CisKKyAgICAvLyBBZGQgdGhlIGFkZHJlc3MgYmFjayBpbnRvIHRoZSB0YWJsZS4KKyAgICBuZXRpZi5BZGRVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsNjQpOworCisgICAgaWYgKG1Sb2xlID49IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgIHsKKyAgICAgICAgbmV0aWYuQWRkVW5pY2FzdEFkZHJlc3MobU1lc2hMb2NhbDE2KTsKKyAgICB9CisKKyAgICAvLyB1cGRhdGUgTGVhZGVyIEFMT0MKKyAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgbmV0aWYuUmVtb3ZlVW5pY2FzdEFkZHJlc3MobUxlYWRlckFsb2MpOworICAgICAgICBBZGRMZWFkZXJBbG9jKCk7CisgICAgfQorCisgICAgLy8gQ2hhbmdpbmcgdGhlIHByZWZpeCBhbHNvIGNhdXNlcyB0aGUgbWVzaCBsb2NhbCBhZGRyZXNzIHRvIGJlIGRpZmZlcmVudC4KKyAgICBuZXRpZi5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9NTF9BRERSKTsKKworZXhpdDoKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworY29uc3QgSXA2OjpBZGRyZXNzICpNbGU6OkdldExpbmtMb2NhbEFsbFRocmVhZE5vZGVzQWRkcmVzcyh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAmbUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzLkdldEFkZHJlc3MoKTsKK30KKworY29uc3QgSXA2OjpBZGRyZXNzICpNbGU6OkdldFJlYWxtTG9jYWxBbGxUaHJlYWROb2Rlc0FkZHJlc3Modm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXMuR2V0QWRkcmVzcygpOworfQorCit1aW50MTZfdCBNbGU6OkdldFJsb2MxNih2b2lkKSBjb25zdAoreworICAgIHJldHVybiBHZXROZXRpZigpLkdldE1hYygpLkdldFNob3J0QWRkcmVzcygpOworfQorCitvdEVycm9yIE1sZTo6U2V0UmxvYzE2KHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG5ldGlmLlJlbW92ZVVuaWNhc3RBZGRyZXNzKG1NZXNoTG9jYWwxNik7CisKKyAgICBpZiAoYVJsb2MxNiAhPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKQorICAgIHsKKyAgICAgICAgLy8gbWVzaC1sb2NhbCAxNgorICAgICAgICBtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihhUmxvYzE2KTsKKyAgICAgICAgbmV0aWYuQWRkVW5pY2FzdEFkZHJlc3MobU1lc2hMb2NhbDE2KTsKKyAgICB9CisKKyAgICBuZXRpZi5HZXRNYWMoKS5TZXRTaG9ydEFkZHJlc3MoYVJsb2MxNik7CisgICAgbmV0aWYuR2V0SXA2KCkubU1wbC5TZXRTZWVkSWQoYVJsb2MxNik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKwordWludDhfdCBNbGU6OkdldExlYWRlcklkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1MZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCk7Cit9CisKK3ZvaWQgTWxlOjpTZXRMZWFkZXJEYXRhKHVpbnQzMl90IGFQYXJ0aXRpb25JZCwgdWludDhfdCBhV2VpZ2h0aW5nLCB1aW50OF90IGFMZWFkZXJSb3V0ZXJJZCkKK3sKKyAgICBpZiAobUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSAhPSBhUGFydGl0aW9uSWQpCisgICAgeworICAgICAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX1BBUlRJVElPTl9JRCk7CisgICAgfQorCisgICAgbUxlYWRlckRhdGEuU2V0UGFydGl0aW9uSWQoYVBhcnRpdGlvbklkKTsKKyAgICBtTGVhZGVyRGF0YS5TZXRXZWlnaHRpbmcoYVdlaWdodGluZyk7CisgICAgbUxlYWRlckRhdGEuU2V0TGVhZGVyUm91dGVySWQoYUxlYWRlclJvdXRlcklkKTsKK30KKworY29uc3QgSXA2OjpBZGRyZXNzICZNbGU6OkdldE1lc2hMb2NhbDE2KHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCk7Cit9CisKK2NvbnN0IElwNjo6QWRkcmVzcyAmTWxlOjpHZXRNZXNoTG9jYWw2NCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpOworfQorCitvdEVycm9yIE1sZTo6R2V0TGVhZGVyQWRkcmVzcyhJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KEdldFJsb2MxNigpICE9IE1hYzo6a1Nob3J0QWRkckludmFsaWQsIGVycm9yID0gT1RfRVJST1JfREVUQUNIRUQpOworCisgICAgbWVtY3B5KCZhQWRkcmVzcywgJm1NZXNoTG9jYWwxNi5HZXRBZGRyZXNzKCksIDgpOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzRdID0gSG9zdFN3YXAxNigweDAwMDApOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzVdID0gSG9zdFN3YXAxNigweDAwZmYpOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzZdID0gSG9zdFN3YXAxNigweGZlMDApOworICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihHZXRSbG9jMTYobUxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkdldExlYWRlckFsb2MoSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3QKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChHZXRSbG9jMTYoKSAhPSBNYWM6OmtTaG9ydEFkZHJJbnZhbGlkLCBlcnJvciA9IE9UX0VSUk9SX0RFVEFDSEVEKTsKKworICAgIG1lbWNweSgmYUFkZHJlc3MsICZtTWVzaExvY2FsMTYuR2V0QWRkcmVzcygpLCA4KTsKKyAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls0XSA9IEhvc3RTd2FwMTYoMHgwMDAwKTsKKyAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls1XSA9IEhvc3RTd2FwMTYoMHgwMGZmKTsKKyAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls2XSA9IEhvc3RTd2FwMTYoMHhmZTAwKTsKKyAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoa0Fsb2MxNkxlYWRlcik7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QWRkTGVhZGVyQWxvYyh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUiwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRMZWFkZXJBbG9jKG1MZWFkZXJBbG9jLkdldEFkZHJlc3MoKSkpOworCisgICAgZXJyb3IgPSBHZXROZXRpZigpLkFkZFVuaWNhc3RBZGRyZXNzKG1MZWFkZXJBbG9jKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IExlYWRlckRhdGFUbHYgJk1sZTo6R2V0TGVhZGVyRGF0YVRsdih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBtTGVhZGVyRGF0YS5TZXREYXRhVmVyc2lvbihuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFZlcnNpb24oKSk7CisgICAgbUxlYWRlckRhdGEuU2V0U3RhYmxlRGF0YVZlcnNpb24obmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRTdGFibGVWZXJzaW9uKCkpOworICAgIHJldHVybiBtTGVhZGVyRGF0YTsKK30KKworb3RFcnJvciBNbGU6OkdldExlYWRlckRhdGEob3RMZWFkZXJEYXRhICZhTGVhZGVyRGF0YSkKK3sKKyAgICBjb25zdCBMZWFkZXJEYXRhVGx2ICZsZWFkZXJEYXRhKEdldExlYWRlckRhdGFUbHYoKSk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQgJiYgbVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQsIGVycm9yID0gT1RfRVJST1JfREVUQUNIRUQpOworCisgICAgYUxlYWRlckRhdGEubVBhcnRpdGlvbklkID0gbGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpOworICAgIGFMZWFkZXJEYXRhLm1XZWlnaHRpbmcgPSBsZWFkZXJEYXRhLkdldFdlaWdodGluZygpOworICAgIGFMZWFkZXJEYXRhLm1EYXRhVmVyc2lvbiA9IGxlYWRlckRhdGEuR2V0RGF0YVZlcnNpb24oKTsKKyAgICBhTGVhZGVyRGF0YS5tU3RhYmxlRGF0YVZlcnNpb24gPSBsZWFkZXJEYXRhLkdldFN0YWJsZURhdGFWZXJzaW9uKCk7CisgICAgYUxlYWRlckRhdGEubUxlYWRlclJvdXRlcklkID0gbGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkdldEFzc2lnbkxpbmtRdWFsaXR5KGNvbnN0IE1hYzo6RXh0QWRkcmVzcyBhTWFjQWRkciwgdWludDhfdCAmYUxpbmtRdWFsaXR5KQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lbWNtcChhTWFjQWRkci5tOCwgbUFkZHI2NC5tOCwgT1RfRVhUX0FERFJFU1NfU0laRSkpID09IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIGFMaW5rUXVhbGl0eSA9IG1Bc3NpZ25MaW5rUXVhbGl0eTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNbGU6OlNldEFzc2lnbkxpbmtRdWFsaXR5KGNvbnN0IE1hYzo6RXh0QWRkcmVzcyBhTWFjQWRkciwgdWludDhfdCBhTGlua1F1YWxpdHkpCit7CisgICAgaXNBc3NpZ25MaW5rUXVhbGl0eSA9IHRydWU7CisgICAgbUFkZHI2NCA9IGFNYWNBZGRyOworCisgICAgbUFzc2lnbkxpbmtRdWFsaXR5ID0gYUxpbmtRdWFsaXR5OworCisgICAgc3dpdGNoIChhTGlua1F1YWxpdHkpCisgICAgeworICAgIGNhc2UgMzoKKyAgICAgICAgbUFzc2lnbkxpbmtNYXJnaW4gPSBrTWluQXNzaWduZWRMaW5rTWFyZ2luMzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI6CisgICAgICAgIG1Bc3NpZ25MaW5rTWFyZ2luID0ga01pbkFzc2lnbmVkTGlua01hcmdpbjI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAxOgorICAgICAgICBtQXNzaWduTGlua01hcmdpbiA9IGtNaW5Bc3NpZ25lZExpbmtNYXJnaW4xOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMDoKKyAgICAgICAgbUFzc2lnbkxpbmtNYXJnaW4gPSBrTWluQXNzaWduZWRMaW5rTWFyZ2luMDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNbGU6OkdlbmVyYXRlTm9uY2UoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhTWFjQWRkciwgdWludDMyX3QgYUZyYW1lQ291bnRlciwgdWludDhfdCBhU2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFOb25jZSkKK3sKKyAgICAvLyBzb3VyY2UgYWRkcmVzcworICAgIG1lbWNweShhTm9uY2UsIGFNYWNBZGRyLm04LCBzaXplb2YoYU1hY0FkZHIpKTsKKyAgICBhTm9uY2UgKz0gc2l6ZW9mKGFNYWNBZGRyKTsKKworICAgIC8vIGZyYW1lIGNvdW50ZXIKKyAgICBhTm9uY2VbMF0gPSAoYUZyYW1lQ291bnRlciA+PiAyNCkgJiAweGZmOworICAgIGFOb25jZVsxXSA9IChhRnJhbWVDb3VudGVyID4+IDE2KSAmIDB4ZmY7CisgICAgYU5vbmNlWzJdID0gKGFGcmFtZUNvdW50ZXIgPj4gOCkgJiAweGZmOworICAgIGFOb25jZVszXSA9IGFGcmFtZUNvdW50ZXIgJiAweGZmOworICAgIGFOb25jZSArPSA0OworCisgICAgLy8gc2VjdXJpdHkgbGV2ZWwKKyAgICBhTm9uY2VbMF0gPSBhU2VjdXJpdHlMZXZlbDsKK30KKworTWVzc2FnZSAqTWxlOjpOZXdNbGVNZXNzYWdlKHZvaWQpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIG1lc3NhZ2UgPSBtU29ja2V0Lk5ld01lc3NhZ2UoMCk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgICBtZXNzYWdlLT5TZXRTdWJUeXBlKE1lc3NhZ2U6OmtTdWJUeXBlTWxlR2VuZXJhbCk7CisgICAgbWVzc2FnZS0+U2V0TGlua1NlY3VyaXR5RW5hYmxlZChmYWxzZSk7CisgICAgbWVzc2FnZS0+U2V0UHJpb3JpdHkoa01sZU1lc3NhZ2VQcmlvcml0eSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRIZWFkZXIoTWVzc2FnZSAmYU1lc3NhZ2UsIEhlYWRlcjo6Q29tbWFuZCBhQ29tbWFuZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgaGVhZGVyOworCisgICAgaGVhZGVyLkluaXQoKTsKKworICAgIGlmIChhQ29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kRGlzY292ZXJ5UmVxdWVzdCB8fAorICAgICAgICBhQ29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kRGlzY292ZXJ5UmVzcG9uc2UpCisgICAgeworICAgICAgICBoZWFkZXIuU2V0U2VjdXJpdHlTdWl0ZShIZWFkZXI6OmtOb1NlY3VyaXR5KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldEtleUlkTW9kZTIoKTsKKyAgICB9CisKKyAgICBoZWFkZXIuU2V0Q29tbWFuZChhQ29tbWFuZCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZoZWFkZXIsIGhlYWRlci5HZXRMZW5ndGgoKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZFNvdXJjZUFkZHJlc3MoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgU291cmNlQWRkcmVzc1RsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIHRsdi5TZXRSbG9jMTYoR2V0UmxvYzE2KCkpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRTdGF0dXMoTWVzc2FnZSAmYU1lc3NhZ2UsIFN0YXR1c1Rsdjo6U3RhdHVzIGFTdGF0dXMpCit7CisgICAgU3RhdHVzVGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldFN0YXR1cyhhU3RhdHVzKTsKKworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kTW9kZShNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhTW9kZSkKK3sKKyAgICBNb2RlVGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldE1vZGUoYU1vZGUpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRUaW1lb3V0KE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MzJfdCBhVGltZW91dCkKK3sKKyAgICBUaW1lb3V0VGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldFRpbWVvdXQoYVRpbWVvdXQpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRDaGFsbGVuZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IHVpbnQ4X3QgKmFDaGFsbGVuZ2UsIHVpbnQ4X3QgYUNoYWxsZW5nZUxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIFRsdiB0bHY7CisKKyAgICB0bHYuU2V0VHlwZShUbHY6OmtDaGFsbGVuZ2UpOworICAgIHRsdi5TZXRMZW5ndGgoYUNoYWxsZW5nZUxlbmd0aCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZChhQ2hhbGxlbmdlLCBhQ2hhbGxlbmdlTGVuZ3RoKSk7CitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZFJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphUmVzcG9uc2UsIHVpbnQ4X3QgYVJlc3BvbnNlTGVuZ3RoKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgVGx2IHRsdjsKKworICAgIHRsdi5TZXRUeXBlKFRsdjo6a1Jlc3BvbnNlKTsKKyAgICB0bHYuU2V0TGVuZ3RoKGFSZXNwb25zZUxlbmd0aCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZChhUmVzcG9uc2UsIGFSZXNwb25zZUxlbmd0aCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZExpbmtGcmFtZUNvdW50ZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgTGlua0ZyYW1lQ291bnRlclRsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIHRsdi5TZXRGcmFtZUNvdW50ZXIoR2V0TmV0aWYoKS5HZXRLZXlNYW5hZ2VyKCkuR2V0TWFjRnJhbWVDb3VudGVyKCkpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRNbGVGcmFtZUNvdW50ZXIoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgTWxlRnJhbWVDb3VudGVyVGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgdGx2LlNldEZyYW1lQ291bnRlcihHZXROZXRpZigpLkdldEtleU1hbmFnZXIoKS5HZXRNbGVGcmFtZUNvdW50ZXIoKSk7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZEFkZHJlc3MxNihNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYVJsb2MxNikKK3sKKyAgICBBZGRyZXNzMTZUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0UmxvYzE2KGFSbG9jMTYpOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRMZWFkZXJEYXRhKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG1MZWFkZXJEYXRhLkluaXQoKTsKKyAgICBtTGVhZGVyRGF0YS5TZXREYXRhVmVyc2lvbihHZXROZXRpZigpLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0VmVyc2lvbigpKTsKKyAgICBtTGVhZGVyRGF0YS5TZXRTdGFibGVEYXRhVmVyc2lvbihHZXROZXRpZigpLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0U3RhYmxlVmVyc2lvbigpKTsKKworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJm1MZWFkZXJEYXRhLCBzaXplb2YobUxlYWRlckRhdGEpKTsKK30KKwordm9pZCBNbGU6OkZpbGxOZXR3b3JrRGF0YVRsdihOZXR3b3JrRGF0YVRsdiAmYVRsdiwgYm9vbCBhU3RhYmxlT25seSkKK3sKKyAgICB1aW50OF90IGxlbmd0aDsKKyAgICBHZXROZXRpZigpLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0TmV0d29ya0RhdGEoYVN0YWJsZU9ubHksIGFUbHYuR2V0TmV0d29ya0RhdGEoKSwgbGVuZ3RoKTsKKyAgICBhVGx2LlNldExlbmd0aChsZW5ndGgpOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kTmV0d29ya0RhdGEoTWVzc2FnZSAmYU1lc3NhZ2UsIGJvb2wgYVN0YWJsZU9ubHkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTmV0d29ya0RhdGFUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICBGaWxsTmV0d29ya0RhdGFUbHYodGx2LCBhU3RhYmxlT25seSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZihUbHYpICsgdGx2LkdldExlbmd0aCgpKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kVGx2UmVxdWVzdChNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBUbHYgdGx2OworCisgICAgdGx2LlNldFR5cGUoVGx2OjprVGx2UmVxdWVzdCk7CisgICAgdGx2LlNldExlbmd0aChhVGx2c0xlbmd0aCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZChhVGx2cywgYVRsdnNMZW5ndGgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRTY2FuTWFzayhNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhU2Nhbk1hc2spCit7CisgICAgU2Nhbk1hc2tUbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0TWFzayhhU2Nhbk1hc2spOworCisgICAgcmV0dXJuIGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSk7Cit9CisKK290RXJyb3IgTWxlOjpBcHBlbmRMaW5rTWFyZ2luKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90IGFMaW5rTWFyZ2luKQoreworICAgIExpbmtNYXJnaW5UbHYgdGx2OworCisgICAgdGx2LkluaXQoKTsKKyAgICB0bHYuU2V0TGlua01hcmdpbihhTGlua01hcmdpbik7CisKKyAgICByZXR1cm4gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKTsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZFZlcnNpb24oTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgVmVyc2lvblRsdiB0bHY7CisKKyAgICB0bHYuSW5pdCgpOworICAgIHRsdi5TZXRWZXJzaW9uKGtWZXJzaW9uKTsKKworICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kQWRkcmVzc1JlZ2lzdHJhdGlvbihNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgVGx2IHRsdjsKKyAgICBBZGRyZXNzUmVnaXN0cmF0aW9uRW50cnkgZW50cnk7CisgICAgTG93cGFuOjpDb250ZXh0IGNvbnRleHQ7CisgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgIHVpbnQxNl90IHN0YXJ0T2Zmc2V0ID0gYU1lc3NhZ2UuR2V0TGVuZ3RoKCk7CisKKyAgICB0bHYuU2V0VHlwZShUbHY6OmtBZGRyZXNzUmVnaXN0cmF0aW9uKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisKKyAgICAvLyB3cml0ZSBlbnRyaWVzIHRvIG1lc3NhZ2UKKyAgICBmb3IgKGNvbnN0IElwNjo6TmV0aWZVbmljYXN0QWRkcmVzcyAqYWRkciA9IG5ldGlmLkdldFVuaWNhc3RBZGRyZXNzZXMoKTsgYWRkcjsgYWRkciA9IGFkZHItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChhZGRyLT5HZXRBZGRyZXNzKCkuSXNMaW5rTG9jYWwoKSB8fCBhZGRyLT5HZXRBZGRyZXNzKCkgPT0gbU1lc2hMb2NhbDE2LkdldEFkZHJlc3MoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb250ZXh0KGFkZHItPkdldEFkZHJlc3MoKSwgY29udGV4dCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcHJlc3NlZCBlbnRyeQorICAgICAgICAgICAgZW50cnkuU2V0Q29udGV4dElkKGNvbnRleHQubUNvbnRleHRJZCk7CisgICAgICAgICAgICBlbnRyeS5TZXRJaWQoYWRkci0+R2V0QWRkcmVzcygpLkdldElpZCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuY29tcHJlc3NlZCBlbnRyeQorICAgICAgICAgICAgZW50cnkuU2V0VW5jb21wcmVzc2VkKCk7CisgICAgICAgICAgICBlbnRyeS5TZXRJcDZBZGRyZXNzKGFkZHItPkdldEFkZHJlc3MoKSk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZlbnRyeSwgZW50cnkuR2V0TGVuZ3RoKCkpKTsKKyAgICAgICAgbGVuZ3RoICs9IGVudHJ5LkdldExlbmd0aCgpOworICAgIH0KKworICAgIHRsdi5TZXRMZW5ndGgobGVuZ3RoKTsKKyAgICBhTWVzc2FnZS5Xcml0ZShzdGFydE9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkFwcGVuZEFjdGl2ZVRpbWVzdGFtcChNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IHRpbWVzdGFtcFRsdjsKKyAgICBjb25zdCBNZXNoQ29QOjpUaW1lc3RhbXAgKnRpbWVzdGFtcDsKKworICAgIHRpbWVzdGFtcCA9IG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5HZXRUaW1lc3RhbXAoKTsKKyAgICBWZXJpZnlPckV4aXQodGltZXN0YW1wLCBlcnJvciA9IE9UX0VSUk9SX05PTkUpOworCisgICAgdGltZXN0YW1wVGx2LkluaXQoKTsKKyAgICAqc3RhdGljX2Nhc3Q8TWVzaENvUDo6VGltZXN0YW1wICo+KCZ0aW1lc3RhbXBUbHYpID0gKnRpbWVzdGFtcDsKKyAgICBlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGltZXN0YW1wVGx2LCBzaXplb2YodGltZXN0YW1wVGx2KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6QXBwZW5kUGVuZGluZ1RpbWVzdGFtcChNZXNzYWdlICZhTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yOworICAgIFBlbmRpbmdUaW1lc3RhbXBUbHYgdGltZXN0YW1wVGx2OworICAgIGNvbnN0IE1lc2hDb1A6OlRpbWVzdGFtcCAqdGltZXN0YW1wOworCisgICAgdGltZXN0YW1wID0gR2V0TmV0aWYoKS5HZXRQZW5kaW5nRGF0YXNldCgpLkdldFRpbWVzdGFtcCgpOworICAgIFZlcmlmeU9yRXhpdCh0aW1lc3RhbXAgJiYgdGltZXN0YW1wLT5HZXRTZWNvbmRzKCkgIT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKworICAgIHRpbWVzdGFtcFRsdi5Jbml0KCk7CisgICAgKnN0YXRpY19jYXN0PE1lc2hDb1A6OlRpbWVzdGFtcCAqPigmdGltZXN0YW1wVGx2KSA9ICp0aW1lc3RhbXA7CisgICAgZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRpbWVzdGFtcFRsdiwgc2l6ZW9mKHRpbWVzdGFtcFRsdikpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNbGU6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TWxlICo+KGFDb250ZXh0KS0+SGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQoYUZsYWdzKTsKK30KKwordm9pZCBNbGU6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCk7CisKKyAgICBpZiAoKGFGbGFncyAmIChPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEIHwgT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19SRU1PVkVEKSkgIT0gMCkKKyAgICB7CisgICAgICAgIGlmICghbmV0aWYuSXNVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsNjQuR2V0QWRkcmVzcygpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTWVzaCBMb2NhbCBFSUQgd2FzIHJlbW92ZWQsIGNob29zZSBhIG5ldyBvbmUgYW5kIGFkZCBpdCBiYWNrCisgICAgICAgICAgICBmb3IgKGludCBpID0gODsgaSA8IDE2OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU1lc2hMb2NhbDY0LkdldEFkZHJlc3MoKS5tRmllbGRzLm04W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXRpZi5BZGRVbmljYXN0QWRkcmVzcyhtTWVzaExvY2FsNjQpOworICAgICAgICAgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfTUxfQUREUik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQgJiYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0LlBvc3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoYUZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSkgIT0gMCkKKyAgICB7CisgICAgICAgIGlmIChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKQorICAgICAgICB7CisgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5IYW5kbGVOZXR3b3JrRGF0YVVwZGF0ZVJvdXRlcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChhRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9ST0xFKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VuZENoaWxkVXBkYXRlUmVxdWVzdC5Qb3N0KCk7CisgICAgICAgIH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICAgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMb2NhbCgpLlNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoYUZsYWdzICYgKE9UX0NIQU5HRURfVEhSRUFEX1JPTEUgfCBPVF9DSEFOR0VEX1RIUkVBRF9LRVlfU0VRVUVOQ0VfQ09VTlRFUikpCisgICAgeworICAgICAgICBTdG9yZSgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVQYXJlbnRSZXF1ZXN0VGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVBhcmVudFJlcXVlc3RUaW1lcigpOworfQorCit2b2lkIE1sZTo6SGFuZGxlUGFyZW50UmVxdWVzdFRpbWVyKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIHN3aXRjaCAobVBhcmVudFJlcXVlc3RTdGF0ZSkKKyAgICB7CisgICAgY2FzZSBrUGFyZW50SWRsZToKKyAgICAgICAgaWYgKG1QYXJlbnQuR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1BhcmVudFN5bmNocm9uaXplOgorICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgICAgIEJlY29tZUNoaWxkKGtBdHRhY2hBbnkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1BhcmVudFJlcXVlc3RTdGFydDoKKyAgICAgICAgbVBhcmVudFJlcXVlc3RTdGF0ZSA9IGtQYXJlbnRSZXF1ZXN0Um91dGVyOworICAgICAgICBtUGFyZW50Q2FuZGlkYXRlLlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKyAgICAgICAgU2VuZFBhcmVudFJlcXVlc3QoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQYXJlbnRSZXF1ZXN0Um91dGVyOgorICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudFJlcXVlc3RDaGlsZDsKKworICAgICAgICBpZiAobVBhcmVudENhbmRpZGF0ZS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2VuZENoaWxkSWRSZXF1ZXN0KCk7CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga0NoaWxkSWRSZXF1ZXN0OworICAgICAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdGFydChrUGFyZW50UmVxdWVzdENoaWxkVGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBTZW5kUGFyZW50UmVxdWVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGtQYXJlbnRSZXF1ZXN0Q2hpbGQ6CisgICAgICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50UmVxdWVzdENoaWxkOworCisgICAgICAgIGlmIChtUGFyZW50Q2FuZGlkYXRlLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBTZW5kQ2hpbGRJZFJlcXVlc3QoKTsKKyAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrQ2hpbGRJZFJlcXVlc3Q7CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KGtQYXJlbnRSZXF1ZXN0Q2hpbGRUaW1lb3V0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlc2V0UGFyZW50Q2FuZGlkYXRlKCk7CisKKyAgICAgICAgICAgIGlmIChtUmVhdHRhY2hTdGF0ZSA9PSBrUmVhdHRhY2hBY3RpdmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuUmVzdG9yZSgpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLkFwcGx5Q29uZmlndXJhdGlvbigpOworICAgICAgICAgICAgICAgICAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaFBlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50UmVxdWVzdFN0YXJ0OworICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KGtQYXJlbnRSZXF1ZXN0Um91dGVyVGltZW91dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1SZWF0dGFjaFN0YXRlID0ga1JlYXR0YWNoU3RvcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtUmVhdHRhY2hTdGF0ZSA9PSBrUmVhdHRhY2hQZW5kaW5nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZWF0dGFjaFN0YXRlID0ga1JlYXR0YWNoU3RvcDsKKyAgICAgICAgICAgICAgICBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuUmVzdG9yZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVJlYXR0YWNoU3RhdGUgPT0ga1JlYXR0YWNoU3RvcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1QYXJlbnRSZXF1ZXN0TW9kZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBrQXR0YWNoQW55OgorICAgICAgICAgICAgICAgICAgICBpZiAobVByZXZpb3VzUGFuSWQgIT0gTWFjOjprUGFuSWRCcm9hZGNhc3QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmLkdldE1hYygpLlNldENoYW5uZWwobVByZXZpb3VzQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5TZXRQYW5JZChtUHJldmlvdXNQYW5JZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtUHJldmlvdXNQYW5JZCA9IE1hYzo6a1BhbklkQnJvYWRjYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgU2VuZE9ycGhhbkFubm91bmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ldGlmLkdldE1sZSgpLkJlY29tZUxlYWRlcigpICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50SWRsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Uga0F0dGFjaFNhbWUxOgorICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgICAgICAgICAgICAgICAgIEJlY29tZUNoaWxkKGtBdHRhY2hTYW1lMik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBrQXR0YWNoU2FtZTI6CisgICAgICAgICAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50SWRsZTsKKyAgICAgICAgICAgICAgICAgICAgQmVjb21lQ2hpbGQoa0F0dGFjaEFueSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBrQXR0YWNoQmV0dGVyOgorICAgICAgICAgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0YXJ0IGtlZXAtYWxpdmUgdGltZXIgYXMgaXQgd2FzIGRpc3R1cmJlZCBieSBhdHRhY2htZW50IHByb2NlZHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0NoaWxkSWRSZXF1ZXN0OgorICAgICAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgICAgIFJlc2V0UGFyZW50Q2FuZGlkYXRlKCk7CisKKyAgICAgICAgaWYgKChtUGFyZW50UmVxdWVzdE1vZGUgPT0ga0F0dGFjaEJldHRlcikgfHwKKyAgICAgICAgICAgIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpIHx8CisgICAgICAgICAgICAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJlc3RhcnQga2VlcC1hbGl2ZSB0aW1lciBhcyBpdCB3YXMgZGlzdHVyYmVkIGJ5IGF0dGFjaG1lbnQgcHJvY2VkdXJlLgorICAgICAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIE1sZTo6SGFuZGxlRGVsYXllZFJlc3BvbnNlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZURlbGF5ZWRSZXNwb25zZVRpbWVyKCk7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVEZWxheWVkUmVzcG9uc2VUaW1lcih2b2lkKQoreworICAgIERlbGF5ZWRSZXNwb25zZUhlYWRlciBkZWxheWVkUmVzcG9uc2U7CisgICAgdWludDMyX3Qgbm93ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKyAgICB1aW50MzJfdCBuZXh0RGVsYXkgPSAweGZmZmZmZmZmOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBtRGVsYXllZFJlc3BvbnNlcy5HZXRIZWFkKCk7CisgICAgTWVzc2FnZSAqbmV4dE1lc3NhZ2UgPSBOVUxMOworCisgICAgd2hpbGUgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5leHRNZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpOworICAgICAgICBkZWxheWVkUmVzcG9uc2UuUmVhZEZyb20oKm1lc3NhZ2UpOworCisgICAgICAgIGlmIChkZWxheWVkUmVzcG9uc2UuSXNMYXRlcihub3cpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5leHQgZGVsYXkgYW5kIGNob29zZSB0aGUgbG93ZXN0LgorICAgICAgICAgICAgaWYgKGRlbGF5ZWRSZXNwb25zZS5HZXRTZW5kVGltZSgpIC0gbm93IDwgbmV4dERlbGF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHREZWxheSA9IGRlbGF5ZWRSZXNwb25zZS5HZXRTZW5kVGltZSgpIC0gbm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURlbGF5ZWRSZXNwb25zZXMuRGVxdWV1ZSgqbWVzc2FnZSk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgRGVsYXllZFJlc3BvbnNlSGVhZGVyIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICAgICAgICBEZWxheWVkUmVzcG9uc2VIZWFkZXI6OlJlbW92ZUZyb20oKm1lc3NhZ2UpOworCisgICAgICAgICAgICAvLyBTZW5kIHRoZSBtZXNzYWdlLgorICAgICAgICAgICAgaWYgKFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZWxheWVkUmVzcG9uc2UuR2V0RGVzdGluYXRpb24oKSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGVsYXllZCByZXNwb25zZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2UgPSBuZXh0TWVzc2FnZTsKKyAgICB9CisKKyAgICBpZiAobmV4dERlbGF5ICE9IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgICBtRGVsYXllZFJlc3BvbnNlVGltZXIuU3RhcnQobmV4dERlbGF5KTsKKyAgICB9Cit9CisKK290RXJyb3IgTWxlOjpTZW5kUGFyZW50UmVxdWVzdCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgdWludDhfdCBzY2FuTWFzayA9IDA7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgc2l6ZW9mKG1QYXJlbnRSZXF1ZXN0Lm1DaGFsbGVuZ2UpOyBpKyspCisgICAgeworICAgICAgICBtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgIH0KKworICAgIHN3aXRjaCAobVBhcmVudFJlcXVlc3RTdGF0ZSkKKyAgICB7CisgICAgY2FzZSBrUGFyZW50UmVxdWVzdFJvdXRlcjoKKyAgICAgICAgc2Nhbk1hc2sgPSBTY2FuTWFza1Rsdjo6a1JvdXRlckZsYWc7CisKKyAgICAgICAgaWYgKG1QYXJlbnRSZXF1ZXN0TW9kZSA9PSBrQXR0YWNoU2FtZTEgfHwKKyAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0TW9kZSA9PSBrQXR0YWNoU2FtZTIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNjYW5NYXNrIHw9IFNjYW5NYXNrVGx2OjprRW5kRGV2aWNlRmxhZzsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUGFyZW50UmVxdWVzdENoaWxkOgorICAgICAgICBzY2FuTWFzayA9IFNjYW5NYXNrVGx2OjprUm91dGVyRmxhZyB8IFNjYW5NYXNrVGx2OjprRW5kRGV2aWNlRmxhZzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZFBhcmVudFJlcXVlc3QpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTW9kZSgqbWVzc2FnZSwgbURldmljZU1vZGUpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hhbGxlbmdlKCptZXNzYWdlLCBtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlLCBzaXplb2YobVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU2Nhbk1hc2soKm1lc3NhZ2UsIHNjYW5NYXNrKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFZlcnNpb24oKm1lc3NhZ2UpKTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMDIpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDIpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIGlmICgoc2Nhbk1hc2sgJiBTY2FuTWFza1Rsdjo6a0VuZERldmljZUZsYWcpID09IDApCisgICAgeworICAgICAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgcGFyZW50IHJlcXVlc3QgdG8gcm91dGVycyIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgcGFyZW50IHJlcXVlc3QgdG8gYWxsIGRldmljZXMiKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoKHNjYW5NYXNrICYgU2Nhbk1hc2tUbHY6OmtFbmREZXZpY2VGbGFnKSA9PSAwKQorICAgIHsKKyAgICAgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdGFydChrUGFyZW50UmVxdWVzdFJvdXRlclRpbWVvdXQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0YXJ0KGtQYXJlbnRSZXF1ZXN0Q2hpbGRUaW1lb3V0KTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTWxlOjpTZW5kQ2hpbGRJZFJlcXVlc3Qodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IHRsdnNbXSA9IHtUbHY6OmtBZGRyZXNzMTYsIFRsdjo6a05ldHdvcmtEYXRhLCBUbHY6OmtSb3V0ZX07CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZENoaWxkSWRSZXF1ZXN0KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJlc3BvbnNlKCptZXNzYWdlLCBtQ2hpbGRJZFJlcXVlc3QubUNoYWxsZW5nZSwgbUNoaWxkSWRSZXF1ZXN0Lm1DaGFsbGVuZ2VMZW5ndGgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua0ZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRNbGVGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTW9kZSgqbWVzc2FnZSwgbURldmljZU1vZGUpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGltZW91dCgqbWVzc2FnZSwgbVRpbWVvdXQpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVmVyc2lvbigqbWVzc2FnZSkpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFkZHJlc3NSZWdpc3RyYXRpb24oKm1lc3NhZ2UpKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGx2UmVxdWVzdCgqbWVzc2FnZSwgdGx2cywgc2l6ZW9mKHRsdnMpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZVRpbWVzdGFtcCgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nVGltZXN0YW1wKCptZXNzYWdlKSk7CisKKyAgICBtZW1zZXQoJmRlc3RpbmF0aW9uLCAwLCBzaXplb2YoZGVzdGluYXRpb24pKTsKKyAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm0xNlswXSA9IEhvc3RTd2FwMTYoMHhmZTgwKTsKKyAgICBkZXN0aW5hdGlvbi5TZXRJaWQobVBhcmVudENhbmRpZGF0ZS5HZXRFeHRBZGRyZXNzKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgQ2hpbGQgSUQgUmVxdWVzdCIpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSA9PSAwKQorICAgIHsKKyAgICAgICAgR2V0TmV0aWYoKS5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0RGF0YVBvbGxNYW5hZ2VyKCkuU2V0QXR0YWNoTW9kZSh0cnVlKTsKKyAgICAgICAgR2V0TmV0aWYoKS5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPbldoZW5JZGxlKGZhbHNlKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6U2VuZERhdGFSZXF1ZXN0KGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYURlbGF5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZERhdGFSZXF1ZXN0KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRsdlJlcXVlc3QoKm1lc3NhZ2UsIGFUbHZzLCBhVGx2c0xlbmd0aCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBY3RpdmVUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUGVuZGluZ1RpbWVzdGFtcCgqbWVzc2FnZSkpOworCisgICAgaWYgKGFEZWxheSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGREZWxheWVkUmVzcG9uc2UoKm1lc3NhZ2UsIGFEZXN0aW5hdGlvbiwgYURlbGF5KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgYURlc3RpbmF0aW9uKSk7CisKKyAgICAgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBHZXROZXRpZigpLkdldE1lc2hGb3J3YXJkZXIoKS5HZXREYXRhUG9sbE1hbmFnZXIoKS5TZW5kRmFzdFBvbGxzKERhdGFQb2xsTWFuYWdlcjo6a0RlZmF1bHRGYXN0UG9sbHMpOworICAgICAgICB9CisgICAgfQorCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IERhdGEgUmVxdWVzdCIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNbGU6OkhhbmRsZVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoVGFza2xldCAmYVRhc2tsZXQpCit7CisgICAgR2V0T3duZXIoYVRhc2tsZXQpLkhhbmRsZVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsKK30KKwordm9pZCBNbGU6OkhhbmRsZVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3Qodm9pZCkKK3sKKyAgICAvLyBhIE5ldHdvcmsgRGF0YSB1cGRhdGUgY2FuIGNhdXNlIGEgY2hhbmdlIHRvIHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbgorICAgIC8vIG9ubHkgc2VuZCBhIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IGFmdGVyIHdlIGtub3cgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyBjaGFuZ2VzCisgICAgaWYgKEdldE5ldGlmKCkuSXNTdGF0ZUNoYW5nZWRDYWxsYmFja1BlbmRpbmcoKSkKKyAgICB7CisgICAgICAgIG1TZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0LlBvc3QoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCgpOworICAgIH0KK30KKworb3RFcnJvciBNbGU6OlNlbmRDaGlsZFVwZGF0ZVJlcXVlc3Qodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIGlmIChtQ2hpbGRVcGRhdGVBdHRlbXB0cyA+PSBrTWF4Q2hpbGRLZWVwQWxpdmVBdHRlbXB0cykKKyAgICB7CisgICAgICAgIG1DaGlsZFVwZGF0ZUF0dGVtcHRzID0gMDsKKyAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoa1VuaWNhc3RSZXRyYW5zbWlzc2lvbkRlbGF5KTsKKyAgICBtQ2hpbGRVcGRhdGVBdHRlbXB0cysrOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldFN1YlR5cGUoTWVzc2FnZTo6a1N1YlR5cGVNbGVDaGlsZFVwZGF0ZVJlcXVlc3QpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRDaGlsZFVwZGF0ZVJlcXVlc3QpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTW9kZSgqbWVzc2FnZSwgbURldmljZU1vZGUpKTsKKworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBZGRyZXNzUmVnaXN0cmF0aW9uKCptZXNzYWdlKSk7CisgICAgfQorCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgc2l6ZW9mKG1QYXJlbnRSZXF1ZXN0Lm1DaGFsbGVuZ2UpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0Lm1DaGFsbGVuZ2VbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hhbGxlbmdlKCptZXNzYWdlLCBtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRUaW1lb3V0KCptZXNzYWdlLCBtVGltZW91dCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIGRlc3RpbmF0aW9uLlNldElpZChtUGFyZW50LkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IENoaWxkIFVwZGF0ZSBSZXF1ZXN0IHRvIHBhcmVudCIpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSA9PSAwKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNldEF0dGFjaE1vZGUodHJ1ZSk7CisgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9uV2hlbklkbGUoZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPbldoZW5JZGxlKHRydWUpOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhTnVtVGx2cywgY29uc3QgQ2hhbGxlbmdlVGx2ICZhQ2hhbGxlbmdlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRDaGlsZFVwZGF0ZVJlc3BvbnNlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNvdXJjZUFkZHJlc3MoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGVhZGVyRGF0YSgqbWVzc2FnZSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTnVtVGx2czsgaSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhVGx2c1tpXSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFRsdjo6a1RpbWVvdXQ6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGltZW91dCgqbWVzc2FnZSwgbVRpbWVvdXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprQWRkcmVzc1JlZ2lzdHJhdGlvbjoKKyAgICAgICAgICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWRkcmVzc1JlZ2lzdHJhdGlvbigqbWVzc2FnZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a1Jlc3BvbnNlOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJlc3BvbnNlKCptZXNzYWdlLCBhQ2hhbGxlbmdlLkdldENoYWxsZW5nZSgpLCBhQ2hhbGxlbmdlLkdldExlbmd0aCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0xpbmtGcmFtZUNvdW50ZXI6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua0ZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtNbGVGcmFtZUNvdW50ZXI6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTWxlRnJhbWVDb3VudGVyKCptZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIGRlc3RpbmF0aW9uLlNldElpZChtUGFyZW50LkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IENoaWxkIFVwZGF0ZSBSZXNwb25zZSB0byBwYXJlbnQiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlOjpTZW5kQW5ub3VuY2UodWludDhfdCBhQ2hhbm5lbCwgYm9vbCBhT3JwaGFuQW5ub3VuY2UpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDaGFubmVsVGx2IGNoYW5uZWw7CisgICAgUGFuSWRUbHYgcGFuaWQ7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBJcDY6OkFkZHJlc3MgZGVzdGluYXRpb247CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5TZXRMaW5rU2VjdXJpdHlFbmFibGVkKHRydWUpOworICAgIG1lc3NhZ2UtPlNldFN1YlR5cGUoTWVzc2FnZTo6a1N1YlR5cGVNbGVBbm5vdW5jZSk7CisgICAgbWVzc2FnZS0+U2V0Q2hhbm5lbChhQ2hhbm5lbCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZEFubm91bmNlKSk7CisKKyAgICBjaGFubmVsLkluaXQoKTsKKyAgICBjaGFubmVsLlNldENoYW5uZWxQYWdlKDApOworICAgIGNoYW5uZWwuU2V0Q2hhbm5lbChuZXRpZi5HZXRNYWMoKS5HZXRDaGFubmVsKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmNoYW5uZWwsIHNpemVvZihjaGFubmVsKSkpOworCisgICAgaWYgKGFPcnBoYW5Bbm5vdW5jZSkKKyAgICB7CisgICAgICAgIGFjdGl2ZVRpbWVzdGFtcC5Jbml0KCk7CisgICAgICAgIGFjdGl2ZVRpbWVzdGFtcC5TZXRTZWNvbmRzKDApOworICAgICAgICBhY3RpdmVUaW1lc3RhbXAuU2V0VGlja3MoMCk7CisgICAgICAgIGFjdGl2ZVRpbWVzdGFtcC5TZXRBdXRob3JpdGF0aXZlKHRydWUpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmFjdGl2ZVRpbWVzdGFtcCwgc2l6ZW9mKGFjdGl2ZVRpbWVzdGFtcCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZVRpbWVzdGFtcCgqbWVzc2FnZSkpOworICAgIH0KKworICAgIHBhbmlkLkluaXQoKTsKKyAgICBwYW5pZC5TZXRQYW5JZChuZXRpZi5HZXRNYWMoKS5HZXRQYW5JZCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZwYW5pZCwgc2l6ZW9mKHBhbmlkKSkpOworCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbMF0gPSBIb3N0U3dhcDE2KDB4ZmYwMik7CisgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KDB4MDAwMSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJzZW50IGFubm91bmNlIG9uIGNoYW5uZWwgJWQiLCBhQ2hhbm5lbCk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZTo6U2VuZE9ycGhhbkFubm91bmNlKHZvaWQpCit7CisgICAgY29uc3QgTWVzaENvUDo6Q2hhbm5lbE1hc2swVGx2ICpjaGFubmVsTWFzazsKKyAgICB1aW50OF90IGNoYW5uZWw7CisKKyAgICBjaGFubmVsTWFzayA9IHN0YXRpY19jYXN0PGNvbnN0IE1lc2hDb1A6OkNoYW5uZWxNYXNrMFRsdiAqPihHZXROZXRpZigpLkdldEFjdGl2ZURhdGFzZXQoKS5HZXRUbHYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc2hDb1A6OlRsdjo6a0NoYW5uZWxNYXNrKSk7CisKKyAgICBWZXJpZnlPckV4aXQoY2hhbm5lbE1hc2sgIT0gTlVMTCk7CisKKyAgICAvLyBmaW5kIG5leHQgY2hhbm5lbCBpbiB0aGUgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgQ2hhbm5lbCBNYXNrCisgICAgY2hhbm5lbCA9IG1Bbm5vdW5jZUNoYW5uZWw7CisKKyAgICB3aGlsZSAoIWNoYW5uZWxNYXNrLT5Jc0NoYW5uZWxTZXQoY2hhbm5lbCkpCisgICAgeworICAgICAgICBjaGFubmVsKys7CisKKyAgICAgICAgaWYgKGNoYW5uZWwgPiBPVF9SQURJT19DSEFOTkVMX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhbm5lbCA9IE9UX1JBRElPX0NIQU5ORUxfTUlOOworICAgICAgICB9CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNoYW5uZWwgIT0gbUFubm91bmNlQ2hhbm5lbCk7CisgICAgfQorCisgICAgLy8gU2VuZCBBbm5vdW5jZSBtZXNzYWdlCisgICAgU2VuZEFubm91bmNlKGNoYW5uZWwsIHRydWUpOworCisgICAgLy8gTW92ZSB0byBuZXh0IGNoYW5uZWwKKyAgICBtQW5ub3VuY2VDaGFubmVsID0gY2hhbm5lbCArIDE7CisKKyAgICBpZiAobUFubm91bmNlQ2hhbm5lbCA+IE9UX1JBRElPX0NIQU5ORUxfTUFYKQorICAgIHsKKyAgICAgICAgbUFubm91bmNlQ2hhbm5lbCA9IE9UX1JBRElPX0NIQU5ORUxfTUlOOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgTWxlOjpTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBIZWFkZXIgaGVhZGVyOworICAgIHVpbnQzMl90IGtleVNlcXVlbmNlOworICAgIHVpbnQ4X3Qgbm9uY2VbMTNdOworICAgIHVpbnQ4X3QgdGFnWzRdOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoOworICAgIENyeXB0bzo6QWVzQ2NtIGFlc0NjbTsKKyAgICB1aW50OF90IGJ1Zls2NF07CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBhTWVzc2FnZS5SZWFkKDAsIHNpemVvZihoZWFkZXIpLCAmaGVhZGVyKTsKKworICAgIGlmIChoZWFkZXIuR2V0U2VjdXJpdHlTdWl0ZSgpID09IEhlYWRlcjo6azE1NFNlY3VyaXR5KQorICAgIHsKKyAgICAgICAgaGVhZGVyLlNldEZyYW1lQ291bnRlcihuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0TWxlRnJhbWVDb3VudGVyKCkpOworCisgICAgICAgIGtleVNlcXVlbmNlID0gbmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRLZXlTZXF1ZW5jZSgpOworICAgICAgICBoZWFkZXIuU2V0S2V5SWQoa2V5U2VxdWVuY2UpOworCisgICAgICAgIGFNZXNzYWdlLldyaXRlKDAsIGhlYWRlci5HZXRMZW5ndGgoKSwgJmhlYWRlcik7CisKKyAgICAgICAgR2VuZXJhdGVOb25jZSgqbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5HZXRNbGVGcmFtZUNvdW50ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICBNYWM6OkZyYW1lOjprU2VjRW5jTWljMzIsCisgICAgICAgICAgICAgICAgICAgICAgbm9uY2UpOworCisgICAgICAgIGFlc0NjbS5TZXRLZXkobmV0aWYuR2V0S2V5TWFuYWdlcigpLkdldEN1cnJlbnRNbGVLZXkoKSwgMTYpOworICAgICAgICBhZXNDY20uSW5pdCgxNiArIDE2ICsgaGVhZGVyLkdldEhlYWRlckxlbmd0aCgpLCBhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIChoZWFkZXIuR2V0TGVuZ3RoKCkgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhZyksIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKworICAgICAgICBhZXNDY20uSGVhZGVyKCZtTGlua0xvY2FsNjQuR2V0QWRkcmVzcygpLCBzaXplb2YobUxpbmtMb2NhbDY0LkdldEFkZHJlc3MoKSkpOworICAgICAgICBhZXNDY20uSGVhZGVyKCZhRGVzdGluYXRpb24sIHNpemVvZihhRGVzdGluYXRpb24pKTsKKyAgICAgICAgYWVzQ2NtLkhlYWRlcihoZWFkZXIuR2V0Qnl0ZXMoKSArIDEsIGhlYWRlci5HZXRIZWFkZXJMZW5ndGgoKSk7CisKKyAgICAgICAgYU1lc3NhZ2UuU2V0T2Zmc2V0KGhlYWRlci5HZXRMZW5ndGgoKSAtIDEpOworCisgICAgICAgIHdoaWxlIChhTWVzc2FnZS5HZXRPZmZzZXQoKSA8IGFNZXNzYWdlLkdldExlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggPSBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoYnVmKSwgYnVmKTsKKyAgICAgICAgICAgIGFlc0NjbS5QYXlsb2FkKGJ1ZiwgYnVmLCBsZW5ndGgsIHRydWUpOworICAgICAgICAgICAgYU1lc3NhZ2UuV3JpdGUoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIGxlbmd0aCwgYnVmKTsKKyAgICAgICAgICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQobGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRhZ0xlbmd0aCA9IHNpemVvZih0YWcpOworICAgICAgICBhZXNDY20uRmluYWxpemUodGFnLCAmdGFnTGVuZ3RoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCh0YWcsIHRhZ0xlbmd0aCkpOworCisgICAgICAgIG5ldGlmLkdldEtleU1hbmFnZXIoKS5JbmNyZW1lbnRNbGVGcmFtZUNvdW50ZXIoKTsKKyAgICB9CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhRGVzdGluYXRpb24pOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG1MaW5rTG9jYWw2NC5HZXRBZGRyZXNzKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRIb3BMaW1pdCgyNTUpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1Tb2NrZXQuU2VuZFRvKGFNZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkFkZERlbGF5ZWRSZXNwb25zZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIHVpbnQxNl90IGFEZWxheSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MzJfdCBhbGFybUZpcmVUaW1lOworICAgIHVpbnQzMl90IHNlbmRUaW1lID0gb3RQbGF0QWxhcm1HZXROb3coKSArIGFEZWxheTsKKworICAgIC8vIEFwcGVuZCB0aGUgbWVzc2FnZSB3aXRoIERlbGF5ZWRSZXNwbm9zZUhlYWRlciBhbmQgYWRkIHRvIHRoZSBsaXN0LgorICAgIERlbGF5ZWRSZXNwb25zZUhlYWRlciBkZWxheWVkUmVzcG9uc2Uoc2VuZFRpbWUsIGFEZXN0aW5hdGlvbik7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGRlbGF5ZWRSZXNwb25zZS5BcHBlbmRUbyhhTWVzc2FnZSkpOworICAgIG1EZWxheWVkUmVzcG9uc2VzLkVucXVldWUoYU1lc3NhZ2UpOworCisgICAgaWYgKG1EZWxheWVkUmVzcG9uc2VUaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIC8vIElmIHRpbWVyIGlzIGFscmVhZHkgcnVubmluZywgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIHJlc3RhcnRlZCB3aXRoIGVhcmxpZXIgZmlyZSB0aW1lLgorICAgICAgICBhbGFybUZpcmVUaW1lID0gbURlbGF5ZWRSZXNwb25zZVRpbWVyLkdldEZpcmVUaW1lKCk7CisKKyAgICAgICAgaWYgKGRlbGF5ZWRSZXNwb25zZS5Jc0VhcmxpZXIoYWxhcm1GaXJlVGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZWxheWVkUmVzcG9uc2VUaW1lci5TdGFydChhRGVsYXkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCB0aGUgdGltZXIuCisgICAgICAgIG1EZWxheWVkUmVzcG9uc2VUaW1lci5TdGFydChhRGVsYXkpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlOjpIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TWxlICo+KGFDb250ZXh0KS0+SGFuZGxlVWRwUmVjZWl2ZSgqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBNbGU6OkhhbmRsZVVkcFJlY2VpdmUoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIE1sZVJvdXRlciAmbWxlID0gbmV0aWYuR2V0TWxlKCk7CisgICAgSGVhZGVyIGhlYWRlcjsKKyAgICB1aW50MzJfdCBrZXlTZXF1ZW5jZTsKKyAgICBjb25zdCB1aW50OF90ICptbGVLZXk7CisgICAgdWludDMyX3QgZnJhbWVDb3VudGVyOworICAgIHVpbnQ4X3QgbWVzc2FnZVRhZ1s0XTsKKyAgICB1aW50MTZfdCBtZXNzYWdlVGFnTGVuZ3RoOworICAgIHVpbnQ4X3Qgbm9uY2VbMTNdOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIENyeXB0bzo6QWVzQ2NtIGFlc0NjbTsKKyAgICB1aW50MTZfdCBtbGVPZmZzZXQ7CisgICAgdWludDhfdCBidWZbNjRdOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50OF90IHRhZ1s0XTsKKyAgICB1aW50OF90IHRhZ0xlbmd0aDsKKyAgICB1aW50OF90IGNvbW1hbmQ7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworCisgICAgYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKGhlYWRlciksICZoZWFkZXIpOworICAgIFZlcmlmeU9yRXhpdChoZWFkZXIuSXNWYWxpZCgpKTsKKworICAgIGFzc2VydChhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSAhPSBOVUxMKTsKKworICAgIGlmIChoZWFkZXIuR2V0U2VjdXJpdHlTdWl0ZSgpID09IEhlYWRlcjo6a05vU2VjdXJpdHkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGhlYWRlci5HZXRMZW5ndGgoKSk7CisKKyAgICAgICAgc3dpdGNoIChoZWFkZXIuR2V0Q29tbWFuZCgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZERpc2NvdmVyeVJlcXVlc3Q6CisgICAgICAgICAgICBtbGUuSGFuZGxlRGlzY292ZXJ5UmVxdWVzdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZERpc2NvdmVyeVJlc3BvbnNlOgorICAgICAgICAgICAgSGFuZGxlRGlzY292ZXJ5UmVzcG9uc2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEICYmIGhlYWRlci5HZXRTZWN1cml0eVN1aXRlKCkgPT0gSGVhZGVyOjprMTU0U2VjdXJpdHkpOworCisgICAga2V5U2VxdWVuY2UgPSBoZWFkZXIuR2V0S2V5SWQoKTsKKworICAgIGlmIChrZXlTZXF1ZW5jZSA9PSBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0Q3VycmVudEtleVNlcXVlbmNlKCkpCisgICAgeworICAgICAgICBtbGVLZXkgPSBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0Q3VycmVudE1sZUtleSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtbGVLZXkgPSBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0VGVtcG9yYXJ5TWxlS2V5KGtleVNlcXVlbmNlKTsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGhlYWRlci5HZXRMZW5ndGgoKSAtIDEpOworCisgICAgZnJhbWVDb3VudGVyID0gaGVhZGVyLkdldEZyYW1lQ291bnRlcigpOworCisgICAgbWVzc2FnZVRhZ0xlbmd0aCA9IGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YobWVzc2FnZVRhZyksIHNpemVvZihtZXNzYWdlVGFnKSwgbWVzc2FnZVRhZyk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2VUYWdMZW5ndGggPT0gc2l6ZW9mKG1lc3NhZ2VUYWcpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGFNZXNzYWdlLlNldExlbmd0aChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZihtZXNzYWdlVGFnKSkpOworCisgICAgbWFjQWRkci5TZXQoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgIEdlbmVyYXRlTm9uY2UobWFjQWRkciwgZnJhbWVDb3VudGVyLCBNYWM6OkZyYW1lOjprU2VjRW5jTWljMzIsIG5vbmNlKTsKKworICAgIGFlc0NjbS5TZXRLZXkobWxlS2V5LCAxNik7CisgICAgYWVzQ2NtLkluaXQoc2l6ZW9mKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSArIHNpemVvZihhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSkgKyBoZWFkZXIuR2V0SGVhZGVyTGVuZ3RoKCksCisgICAgICAgICAgICAgICAgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBhTWVzc2FnZS5HZXRPZmZzZXQoKSwgc2l6ZW9mKG1lc3NhZ2VUYWcpLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisgICAgYWVzQ2NtLkhlYWRlcigmYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIHNpemVvZihhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSkpOworICAgIGFlc0NjbS5IZWFkZXIoJmFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLCBzaXplb2YoYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkpKTsKKyAgICBhZXNDY20uSGVhZGVyKGhlYWRlci5HZXRCeXRlcygpICsgMSwgaGVhZGVyLkdldEhlYWRlckxlbmd0aCgpKTsKKworICAgIG1sZU9mZnNldCA9IGFNZXNzYWdlLkdldE9mZnNldCgpOworCisgICAgd2hpbGUgKGFNZXNzYWdlLkdldE9mZnNldCgpIDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBsZW5ndGggPSBhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoYnVmKSwgYnVmKTsKKyAgICAgICAgYWVzQ2NtLlBheWxvYWQoYnVmLCBidWYsIGxlbmd0aCwgZmFsc2UpOworICAgICAgICBhTWVzc2FnZS5Xcml0ZShhTWVzc2FnZS5HZXRPZmZzZXQoKSwgbGVuZ3RoLCBidWYpOworICAgICAgICBhTWVzc2FnZS5Nb3ZlT2Zmc2V0KGxlbmd0aCk7CisgICAgfQorCisgICAgdGFnTGVuZ3RoID0gc2l6ZW9mKHRhZyk7CisgICAgYWVzQ2NtLkZpbmFsaXplKHRhZywgJnRhZ0xlbmd0aCk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2VUYWdMZW5ndGggPT0gdGFnTGVuZ3RoICYmIG1lbWNtcChtZXNzYWdlVGFnLCB0YWcsIHRhZ0xlbmd0aCkgPT0gMCk7CisKKyAgICBpZiAoa2V5U2VxdWVuY2UgPiBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0Q3VycmVudEtleVNlcXVlbmNlKCkpCisgICAgeworICAgICAgICBuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuU2V0Q3VycmVudEtleVNlcXVlbmNlKGtleVNlcXVlbmNlKTsKKyAgICB9CisKKyAgICBhTWVzc2FnZS5TZXRPZmZzZXQobWxlT2Zmc2V0KTsKKworICAgIGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihjb21tYW5kKSwgJmNvbW1hbmQpOworICAgIGFNZXNzYWdlLk1vdmVPZmZzZXQoc2l6ZW9mKGNvbW1hbmQpKTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgbmVpZ2hib3IgPSBHZXROZWlnaGJvcihtYWNBZGRyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgaWYgKGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZENoaWxkSWRSZXNwb25zZSkKKyAgICAgICAgeworICAgICAgICAgICAgbmVpZ2hib3IgPSBHZXROZWlnaGJvcihtYWNBZGRyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5laWdoYm9yID0gbWxlLkdldE5laWdoYm9yKG1hY0FkZHIpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBuZWlnaGJvciA9IE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChuZWlnaGJvciAhPSBOVUxMICYmIG5laWdoYm9yLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICB7CisgICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PSBuZWlnaGJvci0+R2V0S2V5U2VxdWVuY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZyYW1lQ291bnRlciA8IG5laWdoYm9yLT5HZXRNbGVGcmFtZUNvdW50ZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0RlYmdNbGUoR2V0SW5zdGFuY2UoKSwgIm1sZSBmcmFtZSByZWplY3QgMSIpOworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChrZXlTZXF1ZW5jZSA8PSBuZWlnaGJvci0+R2V0S2V5U2VxdWVuY2UoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdExvZ0RlYmdNbGUoR2V0SW5zdGFuY2UoKSwgIm1sZSBmcmFtZSByZWplY3QgMiIpOworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmVpZ2hib3ItPlNldEtleVNlcXVlbmNlKGtleVNlcXVlbmNlKTsKKyAgICAgICAgICAgIG5laWdoYm9yLT5TZXRMaW5rRnJhbWVDb3VudGVyKDApOworICAgICAgICB9CisKKyAgICAgICAgbmVpZ2hib3ItPlNldE1sZUZyYW1lQ291bnRlcihmcmFtZUNvdW50ZXIgKyAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCEoY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kTGlua1JlcXVlc3QgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kTGlua0FjY2VwdCB8fAorICAgICAgICAgICAgICBjb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmRMaW5rQWNjZXB0QW5kUmVxdWVzdCB8fAorICAgICAgICAgICAgICBjb21tYW5kID09IEhlYWRlcjo6a0NvbW1hbmRBZHZlcnRpc2VtZW50IHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZFBhcmVudFJlcXVlc3QgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kUGFyZW50UmVzcG9uc2UgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kQ2hpbGRJZFJlcXVlc3QgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kQ2hpbGRVcGRhdGVSZXF1ZXN0IHx8CisgICAgICAgICAgICAgIGNvbW1hbmQgPT0gSGVhZGVyOjprQ29tbWFuZENoaWxkVXBkYXRlUmVzcG9uc2UgfHwKKyAgICAgICAgICAgICAgY29tbWFuZCA9PSBIZWFkZXI6OmtDb21tYW5kQW5ub3VuY2UpKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0RlYmdNbGUoR2V0SW5zdGFuY2UoKSwgIm1sZSBzZXF1ZW5jZSB1bmtub3duISAlZCIsIGNvbW1hbmQpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb21tYW5kKQorICAgIHsKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRMaW5rUmVxdWVzdDoKKyAgICAgICAgbWxlLkhhbmRsZUxpbmtSZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZExpbmtBY2NlcHQ6CisgICAgICAgIG1sZS5IYW5kbGVMaW5rQWNjZXB0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGtleVNlcXVlbmNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRMaW5rQWNjZXB0QW5kUmVxdWVzdDoKKyAgICAgICAgbWxlLkhhbmRsZUxpbmtBY2NlcHRBbmRSZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGtleVNlcXVlbmNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRBZHZlcnRpc2VtZW50OgorICAgICAgICBIYW5kbGVBZHZlcnRpc2VtZW50KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZERhdGFSZXF1ZXN0OgorICAgICAgICBtbGUuSGFuZGxlRGF0YVJlcXVlc3QoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kRGF0YVJlc3BvbnNlOgorICAgICAgICBIYW5kbGVEYXRhUmVzcG9uc2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kUGFyZW50UmVxdWVzdDoKKyAgICAgICAgbWxlLkhhbmRsZVBhcmVudFJlcXVlc3QoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kUGFyZW50UmVzcG9uc2U6CisgICAgICAgIEhhbmRsZVBhcmVudFJlc3BvbnNlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGtleVNlcXVlbmNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRDaGlsZElkUmVxdWVzdDoKKyAgICAgICAgbWxlLkhhbmRsZUNoaWxkSWRSZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGtleVNlcXVlbmNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRDaGlsZElkUmVzcG9uc2U6CisgICAgICAgIEhhbmRsZUNoaWxkSWRSZXNwb25zZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEhlYWRlcjo6a0NvbW1hbmRDaGlsZFVwZGF0ZVJlcXVlc3Q6CisgICAgICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSKQorICAgICAgICB7CisgICAgICAgICAgICBtbGUuSGFuZGxlQ2hpbGRVcGRhdGVSZXF1ZXN0KGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGtleVNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRsZUNoaWxkVXBkYXRlUmVxdWVzdChhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIZWFkZXI6OmtDb21tYW5kQ2hpbGRVcGRhdGVSZXNwb25zZToKKyAgICAgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUiB8fCBtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1sZS5IYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8sIGtleVNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhbmRsZUNoaWxkVXBkYXRlUmVzcG9uc2UoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSGVhZGVyOjprQ29tbWFuZEFubm91bmNlOgorICAgICAgICBIYW5kbGVBbm5vdW5jZShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZUFkdmVydGlzZW1lbnQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIGJvb2wgaXNOZWlnaGJvcjsKKyAgICBOZWlnaGJvciAqbmVpZ2hib3I7CisgICAgU291cmNlQWRkcmVzc1RsdiBzb3VyY2VBZGRyZXNzOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBSb3V0ZVRsdiByb3V0ZTsKKyAgICB1aW50OF90IHRsdnNbXSA9IHtUbHY6OmtOZXR3b3JrRGF0YX07CisgICAgdWludDE2X3QgZGVsYXk7CisKKyAgICAvLyBTb3VyY2UgQWRkcmVzcworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU291cmNlQWRkcmVzcywgc2l6ZW9mKHNvdXJjZUFkZHJlc3MpLCBzb3VyY2VBZGRyZXNzKSk7CisgICAgVmVyaWZ5T3JFeGl0KHNvdXJjZUFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIExlYWRlciBEYXRhCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMZWFkZXJEYXRhLCBzaXplb2YobGVhZGVyRGF0YSksIGxlYWRlckRhdGEpKTsKKyAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhZHZlcnRpc2VtZW50IGZyb20gJTA0eCIsIHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpOworCisgICAgaWYgKG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldE1sZSgpLkhhbmRsZUFkdmVydGlzZW1lbnQoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworICAgIH0KKworICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIGlzTmVpZ2hib3IgPSBmYWxzZTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBpZiAobWVtY21wKCZtUGFyZW50LkdldEV4dEFkZHJlc3MoKSwgJm1hY0FkZHIsIHNpemVvZihtYWNBZGRyKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChtUGFyZW50LkdldFJsb2MxNigpID09IHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpICYmCisgICAgICAgICAgICAobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpICE9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkgfHwKKyAgICAgICAgICAgICBsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCkgIT0gR2V0TGVhZGVySWQoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNldExlYWRlckRhdGEobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpLCBsZWFkZXJEYXRhLkdldFdlaWdodGluZygpLCBsZWFkZXJEYXRhLkdldExlYWRlclJvdXRlcklkKCkpOworCisgICAgICAgICAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpICYmCisgICAgICAgICAgICAgICAgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtSb3V0ZSwgc2l6ZW9mKHJvdXRlKSwgcm91dGUpID09IE9UX0VSUk9SX05PTkUpICYmCisgICAgICAgICAgICAgICAgcm91dGUuSXNWYWxpZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSBSb3V0ZSBEYXRhCisgICAgICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuUHJvY2Vzc1JvdXRlVGx2KHJvdXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJldHJpZXZlTmV3TmV0d29ya0RhdGEgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaXNOZWlnaGJvciA9IHRydWU7CisgICAgICAgIG1QYXJlbnQuU2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9MRUFERVI6CisgICAgICAgIGlmICgobmVpZ2hib3IgPSBuZXRpZi5HZXRNbGUoKS5HZXROZWlnaGJvcihtYWNBZGRyKSkgIT0gTlVMTCAmJgorICAgICAgICAgICAgbmVpZ2hib3ItPkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpc05laWdoYm9yID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChpc05laWdoYm9yKQorICAgIHsKKyAgICAgICAgaWYgKG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhIHx8CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50OF90PihsZWFkZXJEYXRhLkdldERhdGFWZXJzaW9uKCkgLSBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldFZlcnNpb24oKSkgPiAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsYXkgPSBvdFBsYXRSYW5kb21HZXQoKSAlIGtNbGVNYXhSZXNwb25zZURlbGF5OworICAgICAgICAgICAgU2VuZERhdGFSZXF1ZXN0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLCB0bHZzLCBzaXplb2YodGx2cyksIGRlbGF5KTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3RMb2dXYXJuTWxlRXJyKEdldEluc3RhbmNlKCksIGVycm9yLCAiRmFpbGVkIHRvIHByb2Nlc3MgQWR2ZXJ0aXNlbWVudCIpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZURhdGFSZXNwb25zZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIERhdGEgUmVzcG9uc2UiKTsKKworICAgIGVycm9yID0gSGFuZGxlTGVhZGVyRGF0YShhTWVzc2FnZSwgYU1lc3NhZ2VJbmZvKTsKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3RMb2dXYXJuTWxlRXJyKEdldEluc3RhbmNlKCksIGVycm9yLCAiRmFpbGVkIHRvIHByb2Nlc3MgRGF0YSBSZXNwb25zZSIpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZUxlYWRlckRhdGEoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBOZXR3b3JrRGF0YVRsdiBuZXR3b3JrRGF0YTsKKyAgICBBY3RpdmVUaW1lc3RhbXBUbHYgYWN0aXZlVGltZXN0YW1wOworICAgIFBlbmRpbmdUaW1lc3RhbXBUbHYgcGVuZGluZ1RpbWVzdGFtcDsKKyAgICB1aW50MTZfdCBhY3RpdmVEYXRhc2V0T2Zmc2V0ID0gMDsKKyAgICB1aW50MTZfdCBwZW5kaW5nRGF0YXNldE9mZnNldCA9IDA7CisgICAgYm9vbCBkYXRhUmVxdWVzdCA9IGZhbHNlOworICAgIFRsdiB0bHY7CisgICAgdWludDE2X3QgZGVsYXk7CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpICE9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpIHx8CisgICAgICAgIChsZWFkZXJEYXRhLkdldFdlaWdodGluZygpICE9IG1MZWFkZXJEYXRhLkdldFdlaWdodGluZygpKSB8fAorICAgICAgICAobGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpICE9IEdldExlYWRlcklkKCkpKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEKQorICAgICAgICB7CisgICAgICAgICAgICBTZXRMZWFkZXJEYXRhKGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSwgbGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSwgbGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpKTsKKyAgICAgICAgICAgIG1SZXRyaWV2ZU5ld05ldHdvcmtEYXRhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICghbVJldHJpZXZlTmV3TmV0d29ya0RhdGEpCisgICAgeworICAgICAgICBpbnQ4X3QgZGlmZjsKKworICAgICAgICBpZiAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgZGlmZiA9IHN0YXRpY19jYXN0PGludDhfdD4obGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpIC0gbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRWZXJzaW9uKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGlmZiA9IHN0YXRpY19jYXN0PGludDhfdD4obGVhZGVyRGF0YS5HZXRTdGFibGVEYXRhVmVyc2lvbigpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0U3RhYmxlVmVyc2lvbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChkaWZmID4gMCk7CisgICAgfQorCisgICAgLy8gQWN0aXZlIFRpbWVzdGFtcAorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWN0aXZlVGltZXN0YW1wLCBzaXplb2YoYWN0aXZlVGltZXN0YW1wKSwgYWN0aXZlVGltZXN0YW1wKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgY29uc3QgTWVzaENvUDo6VGltZXN0YW1wICp0aW1lc3RhbXA7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFjdGl2ZVRpbWVzdGFtcC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB0aW1lc3RhbXAgPSBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0VGltZXN0YW1wKCk7CisKKyAgICAgICAgLy8gaWYgcmVjZWl2ZWQgdGltZXN0YW1wIGRvZXMgbm90IG1hdGNoIHRoZSBsb2NhbCB2YWx1ZSBhbmQgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIHRoZSBkYXRhc2V0LAorICAgICAgICAvLyBzZW5kIE1MRSBEYXRhIFJlcXVlc3QKKyAgICAgICAgaWYgKCh0aW1lc3RhbXAgPT0gTlVMTCB8fCB0aW1lc3RhbXAtPkNvbXBhcmUoYWN0aXZlVGltZXN0YW1wKSAhPSAwKSAmJgorICAgICAgICAgICAgKFRsdjo6R2V0T2Zmc2V0KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVEYXRhc2V0LCBhY3RpdmVEYXRhc2V0T2Zmc2V0KSAhPSBPVF9FUlJPUl9OT05FKSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhkYXRhUmVxdWVzdCA9IHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVJlcXVlc3QgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFjdGl2ZVRpbWVzdGFtcC5TZXRMZW5ndGgoMCk7CisgICAgfQorCisgICAgLy8gUGVuZGluZyBUaW1lc3RhbXAKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1BlbmRpbmdUaW1lc3RhbXAsIHNpemVvZihwZW5kaW5nVGltZXN0YW1wKSwgcGVuZGluZ1RpbWVzdGFtcCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGNvbnN0IE1lc2hDb1A6OlRpbWVzdGFtcCAqdGltZXN0YW1wOworCisgICAgICAgIFZlcmlmeU9yRXhpdChwZW5kaW5nVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIHRpbWVzdGFtcCA9IG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuR2V0VGltZXN0YW1wKCk7CisKKyAgICAgICAgLy8gaWYgcmVjZWl2ZWQgdGltZXN0YW1wIGRvZXMgbm90IG1hdGNoIHRoZSBsb2NhbCB2YWx1ZSBhbmQgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIHRoZSBkYXRhc2V0LAorICAgICAgICAvLyBzZW5kIE1MRSBEYXRhIFJlcXVlc3QKKyAgICAgICAgaWYgKCh0aW1lc3RhbXAgPT0gTlVMTCB8fCB0aW1lc3RhbXAtPkNvbXBhcmUocGVuZGluZ1RpbWVzdGFtcCkgIT0gMCkgJiYKKyAgICAgICAgICAgIChUbHY6OkdldE9mZnNldChhTWVzc2FnZSwgVGx2OjprUGVuZGluZ0RhdGFzZXQsIHBlbmRpbmdEYXRhc2V0T2Zmc2V0KSAhPSBPVF9FUlJPUl9OT05FKSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhkYXRhUmVxdWVzdCA9IHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVJlcXVlc3QgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBlbmRpbmdUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworICAgIH0KKworICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTmV0d29ya0RhdGEsIHNpemVvZihuZXR3b3JrRGF0YSksIG5ldHdvcmtEYXRhKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TZXROZXR3b3JrRGF0YShsZWFkZXJEYXRhLkdldERhdGFWZXJzaW9uKCksIGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGF0YS5HZXROZXR3b3JrRGF0YSgpLCBuZXR3b3JrRGF0YS5HZXRMZW5ndGgoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEV4aXROb3coZGF0YVJlcXVlc3QgPSB0cnVlKTsKKyAgICB9CisKKyAgICAvLyBBY3RpdmUgRGF0YXNldAorICAgIGlmIChhY3RpdmVUaW1lc3RhbXAuR2V0TGVuZ3RoKCkgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKGFjdGl2ZURhdGFzZXRPZmZzZXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKGFjdGl2ZURhdGFzZXRPZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKyAgICAgICAgICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5TZXQoYWN0aXZlVGltZXN0YW1wLCBhTWVzc2FnZSwgYWN0aXZlRGF0YXNldE9mZnNldCArIHNpemVvZih0bHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHYuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUGVuZGluZyBEYXRhc2V0CisgICAgaWYgKHBlbmRpbmdUaW1lc3RhbXAuR2V0TGVuZ3RoKCkgPiAwKQorICAgIHsKKyAgICAgICAgaWYgKHBlbmRpbmdEYXRhc2V0T2Zmc2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChwZW5kaW5nRGF0YXNldE9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworICAgICAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5TZXQocGVuZGluZ1RpbWVzdGFtcCwgYU1lc3NhZ2UsIHBlbmRpbmdEYXRhc2V0T2Zmc2V0ICsgc2l6ZW9mKHRsdiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHYuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgbVJldHJpZXZlTmV3TmV0d29ya0RhdGEgPSBmYWxzZTsKKworZXhpdDoKKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworCisgICAgaWYgKGRhdGFSZXF1ZXN0KQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGx2c1tdID0ge1Rsdjo6a05ldHdvcmtEYXRhfTsKKworICAgICAgICBkZWxheSA9IGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTXVsdGljYXN0KCkgPyAob3RQbGF0UmFuZG9tR2V0KCkgJSBrTWxlTWF4UmVzcG9uc2VEZWxheSkgOiAwOworCisgICAgICAgIFNlbmREYXRhUmVxdWVzdChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgdGx2cywgc2l6ZW9mKHRsdnMpLCBkZWxheSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE1sZTo6SXNCZXR0ZXJQYXJlbnQodWludDE2X3QgYVJsb2MxNiwgdWludDhfdCBhTGlua1F1YWxpdHksIENvbm5lY3Rpdml0eVRsdiAmYUNvbm5lY3Rpdml0eVRsdikKK3sKKyAgICBib29sIHJ2YWwgPSBmYWxzZTsKKworICAgIHVpbnQ4X3QgY2FuZGlkYXRlTGlua1F1YWxpdHlJbiA9IG1QYXJlbnRDYW5kaWRhdGUuR2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSk7CisgICAgdWludDhfdCBjYW5kaWRhdGVUd29XYXlMaW5rUXVhbGl0eSA9IChjYW5kaWRhdGVMaW5rUXVhbGl0eUluIDwgbVBhcmVudENhbmRpZGF0ZS5HZXRMaW5rUXVhbGl0eU91dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICBjYW5kaWRhdGVMaW5rUXVhbGl0eUluIDogbVBhcmVudENhbmRpZGF0ZS5HZXRMaW5rUXVhbGl0eU91dCgpOworCisgICAgaWYgKGFMaW5rUXVhbGl0eSAhPSBjYW5kaWRhdGVUd29XYXlMaW5rUXVhbGl0eSkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IChhTGlua1F1YWxpdHkgPiBjYW5kaWRhdGVUd29XYXlMaW5rUXVhbGl0eSkpOworICAgIH0KKworICAgIGlmIChJc0FjdGl2ZVJvdXRlcihhUmxvYzE2KSAhPSBJc0FjdGl2ZVJvdXRlcihtUGFyZW50Q2FuZGlkYXRlLkdldFJsb2MxNigpKSkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IElzQWN0aXZlUm91dGVyKGFSbG9jMTYpKTsKKyAgICB9CisKKyAgICBpZiAoYUNvbm5lY3Rpdml0eVRsdi5HZXRQYXJlbnRQcmlvcml0eSgpICE9IG1QYXJlbnRQcmlvcml0eSkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IChhQ29ubmVjdGl2aXR5VGx2LkdldFBhcmVudFByaW9yaXR5KCkgPiBtUGFyZW50UHJpb3JpdHkpKTsKKyAgICB9CisKKyAgICBpZiAoYUNvbm5lY3Rpdml0eVRsdi5HZXRMaW5rUXVhbGl0eTMoKSAhPSBtUGFyZW50TGlua1F1YWxpdHkzKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhydmFsID0gKGFDb25uZWN0aXZpdHlUbHYuR2V0TGlua1F1YWxpdHkzKCkgPiBtUGFyZW50TGlua1F1YWxpdHkzKSk7CisgICAgfQorCisgICAgaWYgKGFDb25uZWN0aXZpdHlUbHYuR2V0TGlua1F1YWxpdHkyKCkgIT0gbVBhcmVudExpbmtRdWFsaXR5MikKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IChhQ29ubmVjdGl2aXR5VGx2LkdldExpbmtRdWFsaXR5MigpID4gbVBhcmVudExpbmtRdWFsaXR5MikpOworICAgIH0KKworICAgIGlmIChhQ29ubmVjdGl2aXR5VGx2LkdldExpbmtRdWFsaXR5MSgpICE9IG1QYXJlbnRMaW5rUXVhbGl0eTEpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSAoYUNvbm5lY3Rpdml0eVRsdi5HZXRMaW5rUXVhbGl0eTEoKSA+IG1QYXJlbnRMaW5rUXVhbGl0eTEpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgTWxlOjpSZXNldFBhcmVudENhbmRpZGF0ZSh2b2lkKQoreworICAgIG1lbXNldCgmbVBhcmVudENhbmRpZGF0ZSwgMCwgc2l6ZW9mKG1QYXJlbnRDYW5kaWRhdGUpKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZVBhcmVudFJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIFJlc3BvbnNlVGx2IHJlc3BvbnNlOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgTGlua01hcmdpblRsdiBsaW5rTWFyZ2luVGx2OworICAgIHVpbnQ4X3QgbGlua01hcmdpbjsKKyAgICB1aW50OF90IGxpbmtRdWFsaXR5OworICAgIENvbm5lY3Rpdml0eVRsdiBjb25uZWN0aXZpdHk7CisgICAgTGlua0ZyYW1lQ291bnRlclRsdiBsaW5rRnJhbWVDb3VudGVyOworICAgIE1sZUZyYW1lQ291bnRlclRsdiBtbGVGcmFtZUNvdW50ZXI7CisgICAgQ2hhbGxlbmdlVGx2IGNoYWxsZW5nZTsKKyAgICBpbnQ4X3QgZGlmZjsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgUGFyZW50IFJlc3BvbnNlIik7CisKKyAgICAvLyBSZXNwb25zZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSksIHJlc3BvbnNlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlLklzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAgICBtZW1jbXAocmVzcG9uc2UuR2V0UmVzcG9uc2UoKSwgbVBhcmVudFJlcXVlc3QubUNoYWxsZW5nZSwgcmVzcG9uc2UuR2V0TGVuZ3RoKCkpID09IDAsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykpOworICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIExpbmsgUXVhbGl0eQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua01hcmdpbiwgc2l6ZW9mKGxpbmtNYXJnaW5UbHYpLCBsaW5rTWFyZ2luVGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KGxpbmtNYXJnaW5UbHYuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGxpbmtNYXJnaW4gPSBMaW5rUXVhbGl0eUluZm86OkNvbnZlcnRSc3NUb0xpbmtNYXJnaW4obmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisKKyAgICBpZiAobGlua01hcmdpbiA+IGxpbmtNYXJnaW5UbHYuR2V0TGlua01hcmdpbigpKQorICAgIHsKKyAgICAgICAgbGlua01hcmdpbiA9IGxpbmtNYXJnaW5UbHYuR2V0TGlua01hcmdpbigpOworICAgIH0KKworICAgIGxpbmtRdWFsaXR5ID0gTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0TGlua01hcmdpblRvTGlua1F1YWxpdHkobGlua01hcmdpbik7CisKKyAgICBWZXJpZnlPckV4aXQobVBhcmVudFJlcXVlc3RTdGF0ZSAhPSBrUGFyZW50UmVxdWVzdFJvdXRlciB8fCBsaW5rUXVhbGl0eSA9PSAzKTsKKworICAgIC8vIENvbm5lY3Rpdml0eQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ29ubmVjdGl2aXR5LCBzaXplb2YoY29ubmVjdGl2aXR5KSwgY29ubmVjdGl2aXR5KSk7CisgICAgVmVyaWZ5T3JFeGl0KGNvbm5lY3Rpdml0eS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSAmJiAobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfREVUQUNIRUQpKQorICAgIHsKKyAgICAgICAgZGlmZiA9IHN0YXRpY19jYXN0PGludDhfdD4oY29ubmVjdGl2aXR5LkdldElkU2VxdWVuY2UoKSAtIG5ldGlmLkdldE1sZSgpLkdldFJvdXRlcklkU2VxdWVuY2UoKSk7CisKKyAgICAgICAgc3dpdGNoIChtUGFyZW50UmVxdWVzdE1vZGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBrQXR0YWNoQW55OgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSAhPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpIHx8IGRpZmYgPiAwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0F0dGFjaFNhbWUxOgorICAgICAgICBjYXNlIGtBdHRhY2hTYW1lMjoKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkgPT0gbUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoZGlmZiA+IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZGlmZiA9PSAwICYmIG5ldGlmLkdldE1sZSgpLkdldExlYWRlckFnZSgpIDwgbmV0aWYuR2V0TWxlKCkuR2V0TmV0d29ya0lkVGltZW91dCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtBdHRhY2hCZXR0ZXI6CisgICAgICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpICE9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE1sZSgpLkNvbXBhcmVQYXJ0aXRpb25zKGNvbm5lY3Rpdml0eS5HZXRBY3RpdmVSb3V0ZXJzKCkgPD0gMSwgbGVhZGVyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5Jc1NpbmdsZXRvbigpLCBtTGVhZGVyRGF0YSkgPiAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gaWYgYWxyZWFkeSBoYXZlIGEgY2FuZGlkYXRlIHBhcmVudCwgb25seSBzZWVrIGEgYmV0dGVyIHBhcmVudAorICAgIGlmIChtUGFyZW50Q2FuZGlkYXRlLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgIHsKKyAgICAgICAgaW50IGNvbXBhcmUgPSAwOworCisgICAgICAgIGlmIChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wYXJlID0gbmV0aWYuR2V0TWxlKCkuQ29tcGFyZVBhcnRpdGlvbnMoY29ubmVjdGl2aXR5LkdldEFjdGl2ZVJvdXRlcnMoKSA8PSAxLCBsZWFkZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QYXJlbnRJc1NpbmdsZXRvbiwgbVBhcmVudExlYWRlckRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gb25seSBjb25zaWRlciBwYXJ0aXRpb25zIHRoYXQgYXJlIHRoZSBzYW1lIG9yIGJldHRlcgorICAgICAgICBWZXJpZnlPckV4aXQoY29tcGFyZSA+PSAwKTsKKworICAgICAgICAvLyBvbmx5IGNvbnNpZGVyIGJldHRlciBwYXJlbnRzIGlmIHRoZSBwYXJ0aXRpb25zIGFyZSB0aGUgc2FtZQorICAgICAgICBWZXJpZnlPckV4aXQoY29tcGFyZSAhPSAwIHx8IElzQmV0dGVyUGFyZW50KHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCksIGxpbmtRdWFsaXR5LCBjb25uZWN0aXZpdHkpKTsKKyAgICB9CisKKyAgICAvLyBMaW5rIEZyYW1lIENvdW50ZXIKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xpbmtGcmFtZUNvdW50ZXIsIHNpemVvZihsaW5rRnJhbWVDb3VudGVyKSwgbGlua0ZyYW1lQ291bnRlcikpOworICAgIFZlcmlmeU9yRXhpdChsaW5rRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBNbGUgRnJhbWUgQ291bnRlcgorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTWxlRnJhbWVDb3VudGVyLCBzaXplb2YobWxlRnJhbWVDb3VudGVyKSwgbWxlRnJhbWVDb3VudGVyKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1sZUZyYW1lQ291bnRlci5Jc1ZhbGlkKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtbGVGcmFtZUNvdW50ZXIuU2V0RnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIH0KKworICAgIC8vIENoYWxsZW5nZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbGxlbmdlLCBzaXplb2YoY2hhbGxlbmdlKSwgY2hhbGxlbmdlKSk7CisgICAgVmVyaWZ5T3JFeGl0KGNoYWxsZW5nZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIG1lbWNweShtQ2hpbGRJZFJlcXVlc3QubUNoYWxsZW5nZSwgY2hhbGxlbmdlLkdldENoYWxsZW5nZSgpLCBjaGFsbGVuZ2UuR2V0TGVuZ3RoKCkpOworICAgIG1DaGlsZElkUmVxdWVzdC5tQ2hhbGxlbmdlTGVuZ3RoID0gY2hhbGxlbmdlLkdldExlbmd0aCgpOworCisgICAgbVBhcmVudENhbmRpZGF0ZS5HZXRFeHRBZGRyZXNzKCkuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlNldFJsb2MxNihzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlNldExpbmtGcmFtZUNvdW50ZXIobGlua0ZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRNbGVGcmFtZUNvdW50ZXIobWxlRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlNldERldmljZU1vZGUoTW9kZVRsdjo6a01vZGVGRkQgfCBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSB8IE1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZVRsdjo6a01vZGVTZWN1cmVEYXRhUmVxdWVzdCk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5HZXRMaW5rSW5mbygpLkFkZFJzcyhuZXRpZi5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCksIHRocmVhZE1lc3NhZ2VJbmZvLT5tUnNzKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlJlc2V0TGlua0ZhaWx1cmVzKCk7CisgICAgbVBhcmVudENhbmRpZGF0ZS5TZXRMaW5rUXVhbGl0eU91dChMaW5rUXVhbGl0eUluZm86OkNvbnZlcnRMaW5rTWFyZ2luVG9MaW5rUXVhbGl0eShsaW5rTWFyZ2luVGx2LkdldExpbmtNYXJnaW4oKSkpOworICAgIG1QYXJlbnRDYW5kaWRhdGUuU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKyAgICBtUGFyZW50Q2FuZGlkYXRlLlNldEtleVNlcXVlbmNlKGFLZXlTZXF1ZW5jZSk7CisKKyAgICBtUGFyZW50UHJpb3JpdHkgPSBjb25uZWN0aXZpdHkuR2V0UGFyZW50UHJpb3JpdHkoKTsKKyAgICBtUGFyZW50TGlua1F1YWxpdHkzID0gY29ubmVjdGl2aXR5LkdldExpbmtRdWFsaXR5MygpOworICAgIG1QYXJlbnRMaW5rUXVhbGl0eTIgPSBjb25uZWN0aXZpdHkuR2V0TGlua1F1YWxpdHkyKCk7CisgICAgbVBhcmVudExpbmtRdWFsaXR5MSA9IGNvbm5lY3Rpdml0eS5HZXRMaW5rUXVhbGl0eTEoKTsKKyAgICBtUGFyZW50TGVhZGVyQ29zdCA9IGNvbm5lY3Rpdml0eS5HZXRMZWFkZXJDb3N0KCk7CisgICAgbVBhcmVudExlYWRlckRhdGEgPSBsZWFkZXJEYXRhOworICAgIG1QYXJlbnRJc1NpbmdsZXRvbiA9IGNvbm5lY3Rpdml0eS5HZXRBY3RpdmVSb3V0ZXJzKCkgPD0gMTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3RMb2dXYXJuTWxlRXJyKEdldEluc3RhbmNlKCksIGVycm9yLCAiRmFpbGVkIHRvIHByb2Nlc3MgUGFyZW50IFJlc3BvbnNlIik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6SGFuZGxlQ2hpbGRJZFJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgU291cmNlQWRkcmVzc1RsdiBzb3VyY2VBZGRyZXNzOworICAgIEFkZHJlc3MxNlRsdiBzaG9ydEFkZHJlc3M7CisgICAgTmV0d29ya0RhdGFUbHYgbmV0d29ya0RhdGE7CisgICAgUm91dGVUbHYgcm91dGU7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXA7CisgICAgVGx2IHRsdjsKKyAgICB1aW50MTZfdCBvZmZzZXQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIElEIFJlc3BvbnNlIik7CisKKyAgICBWZXJpZnlPckV4aXQobVBhcmVudFJlcXVlc3RTdGF0ZSA9PSBrQ2hpbGRJZFJlcXVlc3QpOworCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkpOworICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBTb3VyY2UgQWRkcmVzcworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU291cmNlQWRkcmVzcywgc2l6ZW9mKHNvdXJjZUFkZHJlc3MpLCBzb3VyY2VBZGRyZXNzKSk7CisgICAgVmVyaWZ5T3JFeGl0KHNvdXJjZUFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFNob3J0QWRkcmVzcworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWRkcmVzczE2LCBzaXplb2Yoc2hvcnRBZGRyZXNzKSwgc2hvcnRBZGRyZXNzKSk7CisgICAgVmVyaWZ5T3JFeGl0KHNob3J0QWRkcmVzcy5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gTmV0d29yayBEYXRhCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtOZXR3b3JrRGF0YSwgc2l6ZW9mKG5ldHdvcmtEYXRhKSwgbmV0d29ya0RhdGEpKTsKKworICAgIC8vIEFjdGl2ZSBUaW1lc3RhbXAKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FjdGl2ZVRpbWVzdGFtcCwgc2l6ZW9mKGFjdGl2ZVRpbWVzdGFtcCksIGFjdGl2ZVRpbWVzdGFtcCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhY3RpdmVUaW1lc3RhbXAuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBBY3RpdmUgRGF0YXNldAorICAgICAgICBpZiAoVGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a0FjdGl2ZURhdGFzZXQsIG9mZnNldCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZih0bHYpLCAmdGx2KTsKKyAgICAgICAgICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5TZXQoYWN0aXZlVGltZXN0YW1wLCBhTWVzc2FnZSwgb2Zmc2V0ICsgc2l6ZW9mKHRsdiksIHRsdi5HZXRMZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBjbGVhciBQZW5kaW5nIERhdGFzZXQgaWYgZGV2aWNlIHN1Y2NlZWQgdG8gcmVhdHRhY2ggdXNpbmcgc3RvcmVkIFBlbmRpbmcgRGF0YXNldAorICAgIGlmIChtUmVhdHRhY2hTdGF0ZSA9PSBrUmVhdHRhY2hQZW5kaW5nKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5DbGVhcigpOworICAgIH0KKworICAgIC8vIFBlbmRpbmcgVGltZXN0YW1wCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtQZW5kaW5nVGltZXN0YW1wLCBzaXplb2YocGVuZGluZ1RpbWVzdGFtcCksIHBlbmRpbmdUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocGVuZGluZ1RpbWVzdGFtcC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIC8vIFBlbmRpbmcgRGF0YXNldAorICAgICAgICBpZiAoVGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a1BlbmRpbmdEYXRhc2V0LCBvZmZzZXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YodGx2KSwgJnRsdik7CisgICAgICAgICAgICBuZXRpZi5HZXRQZW5kaW5nRGF0YXNldCgpLlNldChwZW5kaW5nVGltZXN0YW1wLCBhTWVzc2FnZSwgb2Zmc2V0ICsgc2l6ZW9mKHRsdiksIHRsdi5HZXRMZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5DbGVhck5ldHdvcmsoKTsKKyAgICB9CisKKyAgICAvLyBQYXJlbnQgQXR0YWNoIFN1Y2Nlc3MKKyAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0b3AoKTsKKyAgICBtUmVhdHRhY2hTdGF0ZSA9IGtSZWF0dGFjaFN0b3A7CisgICAgU2V0U3RhdGVEZXRhY2hlZCgpOworCisgICAgU2V0TGVhZGVyRGF0YShsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCksIGxlYWRlckRhdGEuR2V0V2VpZ2h0aW5nKCksIGxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKSk7CisKKyAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUpID09IDApCisgICAgeworICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuR2V0RGF0YVBvbGxNYW5hZ2VyKCkuU2V0QXR0YWNoTW9kZShmYWxzZSk7CisgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9uV2hlbklkbGUoZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZXRpZi5HZXRNZXNoRm9yd2FyZGVyKCkuU2V0UnhPbldoZW5JZGxlKHRydWUpOworICAgIH0KKworICAgIC8vIFJvdXRlCisgICAgaWYgKChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUm91dGUsIHNpemVvZihyb3V0ZSksIHJvdXRlKSA9PSBPVF9FUlJPUl9OT05FKSAmJgorICAgICAgICAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0TWxlKCkuUHJvY2Vzc1JvdXRlVGx2KHJvdXRlKSk7CisgICAgfQorCisgICAgbVBhcmVudCA9IG1QYXJlbnRDYW5kaWRhdGU7CisgICAgUmVzZXRQYXJlbnRDYW5kaWRhdGUoKTsKKworICAgIG1QYXJlbnQuU2V0UmxvYzE2KHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpOworCisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TZXROZXR3b3JrRGF0YShsZWFkZXJEYXRhLkdldERhdGFWZXJzaW9uKCksIGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0RhdGEuR2V0TmV0d29ya0RhdGEoKSwgbmV0d29ya0RhdGEuR2V0TGVuZ3RoKCkpOworCisgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkFwcGx5Q29uZmlndXJhdGlvbigpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNldFN0YXRlQ2hpbGQoc2hvcnRBZGRyZXNzLkdldFJsb2MxNigpKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIENoaWxkIElEIFJlc3BvbnNlIik7CisgICAgfQorCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6SGFuZGxlQ2hpbGRVcGRhdGVSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga01heFJlc3BvbnNlVGx2cyA9IDU7CisKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgTmV0d29ya0RhdGFUbHYgbmV0d29ya0RhdGE7CisgICAgQ2hhbGxlbmdlVGx2IGNoYWxsZW5nZTsKKyAgICBUbHZSZXF1ZXN0VGx2IHRsdlJlcXVlc3Q7CisgICAgdWludDhfdCBkYXRhUmVxdWVzdFRsdnNbXSA9IHtUbHY6OmtOZXR3b3JrRGF0YX07CisgICAgdWludDhfdCB0bHZzW2tNYXhSZXNwb25zZVRsdnNdID0ge307CisgICAgdWludDhfdCBudW1UbHZzID0gMDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgZnJvbSBwYXJlbnQiKTsKKworICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtTb3VyY2VBZGRyZXNzLCBzaXplb2Yoc291cmNlQWRkcmVzcyksIHNvdXJjZUFkZHJlc3MpKTsKKyAgICBWZXJpZnlPckV4aXQoc291cmNlQWRkcmVzcy5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIFZlcmlmeU9yRXhpdChtUGFyZW50LkdldFJsb2MxNigpID09IHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgU2V0TGVhZGVyRGF0YShsZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCksIGxlYWRlckRhdGEuR2V0V2VpZ2h0aW5nKCksIGxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKSk7CisKKyAgICAgICAgaWYgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhICYmCisgICAgICAgICAgICAgbGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpICE9IG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0VmVyc2lvbigpKSB8fAorICAgICAgICAgICAgKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhKSA9PSAwICYmCisgICAgICAgICAgICAgbGVhZGVyRGF0YS5HZXRTdGFibGVEYXRhVmVyc2lvbigpICE9IG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuR2V0U3RhYmxlVmVyc2lvbigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJldHJpZXZlTmV3TmV0d29ya0RhdGEgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmV0d29yayBEYXRhCisgICAgICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTmV0d29ya0RhdGEsIHNpemVvZihuZXR3b3JrRGF0YSksIG5ldHdvcmtEYXRhKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQobmV0d29ya0RhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU2V0TmV0d29ya0RhdGEobGVhZGVyRGF0YS5HZXREYXRhVmVyc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkZXJEYXRhLkdldFN0YWJsZURhdGFWZXJzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGF0YS5HZXROZXR3b3JrRGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRGF0YS5HZXRMZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUTFYgUmVxdWVzdAorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpICYmIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKHRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgbWVtY3B5KHRsdnMsIHRsdlJlcXVlc3QuR2V0VGx2cygpLCB0bHZSZXF1ZXN0LkdldExlbmd0aCgpKTsKKyAgICAgICAgbnVtVGx2cyArPSB0bHZSZXF1ZXN0LkdldExlbmd0aCgpOworICAgIH0KKworICAgIC8vIENoYWxsZW5nZQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbGxlbmdlLCBzaXplb2YoY2hhbGxlbmdlKSwgY2hhbGxlbmdlKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNoYWxsZW5nZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBWZXJpZnlPckV4aXQoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1UbHZzICsgMykgPD0gc2l6ZW9mKHRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICB0bHZzW251bVRsdnMrK10gPSBUbHY6OmtSZXNwb25zZTsKKyAgICAgICAgdGx2c1tudW1UbHZzKytdID0gVGx2OjprTWxlRnJhbWVDb3VudGVyOworICAgICAgICB0bHZzW251bVRsdnMrK10gPSBUbHY6OmtMaW5rRnJhbWVDb3VudGVyOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZSh0bHZzLCBudW1UbHZzLCBjaGFsbGVuZ2UpKTsKKworICAgIGlmIChtUmV0cmlldmVOZXdOZXR3b3JrRGF0YSkKKyAgICB7CisgICAgICAgIFNlbmREYXRhUmVxdWVzdChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgZGF0YVJlcXVlc3RUbHZzLCBzaXplb2YoZGF0YVJlcXVlc3RUbHZzKSwgMCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZUNoaWxkVXBkYXRlUmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFN0YXR1c1RsdiBzdGF0dXM7CisgICAgTW9kZVRsdiBtb2RlOworICAgIFJlc3BvbnNlVGx2IHJlc3BvbnNlOworICAgIExpbmtGcmFtZUNvdW50ZXJUbHYgbGlua0ZyYW1lQ291bnRlcjsKKyAgICBNbGVGcmFtZUNvdW50ZXJUbHYgbWxlRnJhbWVDb3VudGVyOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBUaW1lb3V0VGx2IHRpbWVvdXQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIFVwZGF0ZSBSZXNwb25zZSBmcm9tIHBhcmVudCIpOworCisgICAgLy8gU3RhdHVzCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtTdGF0dXMsIHNpemVvZihzdGF0dXMpLCBzdGF0dXMpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgLy8gTW9kZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTW9kZSwgc2l6ZW9mKG1vZGUpLCBtb2RlKSk7CisgICAgVmVyaWZ5T3JFeGl0KG1vZGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBWZXJpZnlPckV4aXQobW9kZS5HZXRNb2RlKCkgPT0gbURldmljZU1vZGUsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICAvLyBSZXNwb25zZQorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Jlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCByZXNwb25zZSkpOworICAgICAgICBWZXJpZnlPckV4aXQocmVzcG9uc2UuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1lbWNtcChyZXNwb25zZS5HZXRSZXNwb25zZSgpLCBtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtUGFyZW50UmVxdWVzdC5tQ2hhbGxlbmdlKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMaW5rRnJhbWVDb3VudGVyLCBzaXplb2YobGlua0ZyYW1lQ291bnRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rRnJhbWVDb3VudGVyKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsaW5rRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNbGVGcmFtZUNvdW50ZXIsIHNpemVvZihtbGVGcmFtZUNvdW50ZXIpLCBtbGVGcmFtZUNvdW50ZXIpID09CisgICAgICAgICAgICBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQobWxlRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtbGVGcmFtZUNvdW50ZXIuU2V0RnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgICAgICB9CisKKyAgICAgICAgbVBhcmVudC5TZXRMaW5rRnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgICAgICBtUGFyZW50LlNldE1sZUZyYW1lQ291bnRlcihtbGVGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworCisgICAgICAgIG1QYXJlbnQuU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKyAgICAgICAgU2V0U3RhdGVDaGlsZChHZXRSbG9jMTYoKSk7CisKKyAgICAvLyBmYWxsIHRocm91Z2gKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprU291cmNlQWRkcmVzcywgc2l6ZW9mKHNvdXJjZUFkZHJlc3MpLCBzb3VyY2VBZGRyZXNzKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgaWYgKEdldFJvdXRlcklkKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpICE9IEdldFJvdXRlcklkKEdldFJsb2MxNigpKSkKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExlYWRlciBEYXRhLCBOZXR3b3JrIERhdGEsIEFjdGl2ZSBUaW1lc3RhbXAsIFBlbmRpbmcgVGltZXN0YW1wCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBIYW5kbGVMZWFkZXJEYXRhKGFNZXNzYWdlLCBhTWVzc2FnZUluZm8pKTsKKworICAgICAgICAvLyBUaW1lb3V0IG9wdGlvbmFsCisgICAgICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGltZW91dCwgc2l6ZW9mKHRpbWVvdXQpLCB0aW1lb3V0KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQodGltZW91dC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICAgICAgbVRpbWVvdXQgPSB0aW1lb3V0LkdldFRpbWVvdXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldERhdGFQb2xsTWFuYWdlcigpLlNldEF0dGFjaE1vZGUoZmFsc2UpOworICAgICAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLlNldFJ4T25XaGVuSWRsZShmYWxzZSk7CisgICAgICAgICAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1QYXJlbnRSZXF1ZXN0VGltZXIuU3RhcnQoVGltZXI6OlNlY1RvTXNlYyhtVGltZW91dCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa1VuaWNhc3RSZXRyYW5zbWlzc2lvbkRlbGF5KSAqIGtNYXhDaGlsZEtlZXBBbGl2ZUF0dGVtcHRzKTsKKyAgICAgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5TZXRSeE9uV2hlbklkbGUodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBtQ2hpbGRVcGRhdGVBdHRlbXB0cyA9IDA7CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIENoaWxkIFVwZGF0ZSBSZXNwb25zZSIpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGU6OkhhbmRsZUFubm91bmNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBDaGFubmVsVGx2IGNoYW5uZWw7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IHRpbWVzdGFtcDsKKyAgICBjb25zdCBNZXNoQ29QOjpUaW1lc3RhbXAgKmxvY2FsVGltZXN0YW1wOworICAgIFBhbklkVGx2IHBhbmlkOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBhbm5vdW5jZSIpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDaGFubmVsLCBzaXplb2YoY2hhbm5lbCksIGNoYW5uZWwpKTsKKyAgICBWZXJpZnlPckV4aXQoY2hhbm5lbC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVUaW1lc3RhbXAsIHNpemVvZih0aW1lc3RhbXApLCB0aW1lc3RhbXApKTsKKyAgICBWZXJpZnlPckV4aXQodGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1BhbklkLCBzaXplb2YocGFuaWQpLCBwYW5pZCkpOworICAgIFZlcmlmeU9yRXhpdChwYW5pZC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbG9jYWxUaW1lc3RhbXAgPSBuZXRpZi5HZXRBY3RpdmVEYXRhc2V0KCkuR2V0VGltZXN0YW1wKCk7CisKKyAgICBpZiAobG9jYWxUaW1lc3RhbXAgPT0gTlVMTCB8fCBsb2NhbFRpbWVzdGFtcC0+Q29tcGFyZSh0aW1lc3RhbXApID4gMCkKKyAgICB7CisgICAgICAgIFN0b3AoZmFsc2UpOworICAgICAgICBtUHJldmlvdXNDaGFubmVsID0gbmV0aWYuR2V0TWFjKCkuR2V0Q2hhbm5lbCgpOworICAgICAgICBtUHJldmlvdXNQYW5JZCA9IG5ldGlmLkdldE1hYygpLkdldFBhbklkKCk7CisgICAgICAgIG5ldGlmLkdldE1hYygpLlNldENoYW5uZWwoc3RhdGljX2Nhc3Q8dWludDhfdD4oY2hhbm5lbC5HZXRDaGFubmVsKCkpKTsKKyAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0UGFuSWQocGFuaWQuR2V0UGFuSWQoKSk7CisgICAgICAgIFN0YXJ0KGZhbHNlLCB0cnVlKTsKKyAgICB9CisgICAgZWxzZSBpZiAobG9jYWxUaW1lc3RhbXAtPkNvbXBhcmUodGltZXN0YW1wKSA8IDApCisgICAgeworICAgICAgICBTZW5kQW5ub3VuY2Uoc3RhdGljX2Nhc3Q8dWludDhfdD4oY2hhbm5lbC5HZXRDaGFubmVsKCkpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICAgICAgLy8gdGltZXN0YW1wcyBhcmUgZXF1YWw6IG5vIGJlaGF2aW91ciBzcGVjaWZpZWQgYnkgdGhlIFRocmVhZCBzcGVjLgorICAgICAgICAvLyBJZiBTZW5kQW5ub3VuY2UgaXMgZXhlY3V0ZWQgYXQgdGhpcyBwb2ludCwgdGhlcmUgZXhpc3RzIGEgc2NlbmFyaW8gd2hlcmUKKyAgICAgICAgLy8gbXVsdGlwbGUgZGV2aWNlcyBrZWVwIHNlbmRpbmcgTUxFIEFubm91bmNlIG1lc3NhZ2VzIHRvIG9uZSBhbm90aGVyIGluZGVmaW5pdGVseS4KKyAgICB9CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFNZXNzYWdlSW5mbyk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZTo6SGFuZGxlRGlzY292ZXJ5UmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisgICAgVGx2IHRsdjsKKyAgICBNZXNoQ29QOjpUbHYgbWVzaGNvcFRsdjsKKyAgICBNZXNoQ29QOjpEaXNjb3ZlcnlSZXNwb25zZVRsdiBkaXNjb3ZlcnlSZXNwb25zZTsKKyAgICBNZXNoQ29QOjpFeHRlbmRlZFBhbklkVGx2IGV4dFBhbklkOworICAgIE1lc2hDb1A6Ok5ldHdvcmtOYW1lVGx2IG5ldHdvcmtOYW1lOworICAgIE1lc2hDb1A6OlN0ZWVyaW5nRGF0YVRsdiBzdGVlcmluZ0RhdGE7CisgICAgTWVzaENvUDo6Sm9pbmVyVWRwUG9ydFRsdiBKb2luZXJVZHBQb3J0OworICAgIG90QWN0aXZlU2NhblJlc3VsdCByZXN1bHQ7CisgICAgdWludDE2X3Qgb2Zmc2V0OworICAgIHVpbnQxNl90IGVuZDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiSGFuZGxlIGRpc2NvdmVyeSByZXNwb25zZSIpOworCisgICAgVmVyaWZ5T3JFeGl0KG1Jc0Rpc2NvdmVySW5Qcm9ncmVzcywgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIC8vIGZpbmQgTUxFIERpc2NvdmVyeSBUTFYKKyAgICBWZXJpZnlPckV4aXQoVGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a0Rpc2NvdmVyeSwgb2Zmc2V0KSA9PSBPVF9FUlJPUl9OT05FLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgb2Zmc2V0ICs9IHNpemVvZih0bHYpOworICAgIGVuZCA9IG9mZnNldCArIHRsdi5HZXRMZW5ndGgoKTsKKworICAgIG1lbXNldCgmcmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisgICAgcmVzdWx0Lm1QYW5JZCA9IHRocmVhZE1lc3NhZ2VJbmZvLT5tUGFuSWQ7CisgICAgcmVzdWx0Lm1DaGFubmVsID0gdGhyZWFkTWVzc2FnZUluZm8tPm1DaGFubmVsOworICAgIHJlc3VsdC5tUnNzaSA9IHRocmVhZE1lc3NhZ2VJbmZvLT5tUnNzOworICAgIHJlc3VsdC5tTHFpID0gdGhyZWFkTWVzc2FnZUluZm8tPm1McWk7CisgICAgc3RhdGljX2Nhc3Q8TWFjOjpFeHRBZGRyZXNzICo+KCZyZXN1bHQubUV4dEFkZHJlc3MpLT5TZXQoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworCisgICAgLy8gcHJvY2VzcyBNZXNoQ29QIFRMVnMKKyAgICB3aGlsZSAob2Zmc2V0IDwgZW5kKQorICAgIHsKKyAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihtZXNoY29wVGx2KSwgJm1lc2hjb3BUbHYpOworCisgICAgICAgIHN3aXRjaCAobWVzaGNvcFRsdi5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNZXNoQ29QOjpUbHY6OmtEaXNjb3ZlcnlSZXNwb25zZToKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoZGlzY292ZXJ5UmVzcG9uc2UpLCAmZGlzY292ZXJ5UmVzcG9uc2UpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGRpc2NvdmVyeVJlc3BvbnNlLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICByZXN1bHQubVZlcnNpb24gPSBkaXNjb3ZlcnlSZXNwb25zZS5HZXRWZXJzaW9uKCk7CisgICAgICAgICAgICByZXN1bHQubUlzTmF0aXZlID0gZGlzY292ZXJ5UmVzcG9uc2UuSXNOYXRpdmVDb21taXNzaW9uZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWVzaENvUDo6VGx2OjprRXh0ZW5kZWRQYW5JZDoKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoZXh0UGFuSWQpLCAmZXh0UGFuSWQpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGV4dFBhbklkLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBtZW1jcHkoJnJlc3VsdC5tRXh0ZW5kZWRQYW5JZCwgZXh0UGFuSWQuR2V0RXh0ZW5kZWRQYW5JZCgpLCBzaXplb2YocmVzdWx0Lm1FeHRlbmRlZFBhbklkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1lc2hDb1A6OlRsdjo6a05ldHdvcmtOYW1lOgorICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQsIHNpemVvZihuZXR3b3JrTmFtZSksICZuZXR3b3JrTmFtZSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQobmV0d29ya05hbWUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgICAgIG1lbWNweSgmcmVzdWx0Lm1OZXR3b3JrTmFtZSwgbmV0d29ya05hbWUuR2V0TmV0d29ya05hbWUoKSwgbmV0d29ya05hbWUuR2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNZXNoQ29QOjpUbHY6OmtTdGVlcmluZ0RhdGE6CisgICAgICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHN0ZWVyaW5nRGF0YSksICZzdGVlcmluZ0RhdGEpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHN0ZWVyaW5nRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgICAgICAvLyBQYXNzIHVwIE1MRSBkaXNjb3ZlcnkgcmVzcG9uc2VzIG9ubHkgaWYgdGhlIHN0ZWVyaW5nIGRhdGEgaXMgc2V0IHRvIGFsbCAweEZGcywKKyAgICAgICAgICAgIC8vIG9yIGlmIGl0IG1hdGNoZXMgdGhlIGZhY3Rvcnkgc2V0IEVVSTY0LgorICAgICAgICAgICAgaWYgKG1FbmFibGVFdWk2NEZpbHRlcmluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdEV4dEFkZHJlc3MgbWZnRVVJNjQ7CisgICAgICAgICAgICAgICAgQ3JjMTYgY2NpdHQoQ3JjMTY6OmtDY2l0dCk7CisgICAgICAgICAgICAgICAgQ3JjMTYgYW5zaShDcmMxNjo6a0Fuc2kpOworCisgICAgICAgICAgICAgICAgLy8gR2V0IEZhY3Rvcnkgc2V0IEVVSTY0CisgICAgICAgICAgICAgICAgb3RQbGF0UmFkaW9HZXRJZWVlRXVpNjQoR2V0SW5zdGFuY2UoKSwgbWZnRVVJNjQubTgpOworCisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBibG9vbSBmaWx0ZXIKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihtZmdFVUk2NC5tOCk7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNjaXR0LlVwZGF0ZShtZmdFVUk2NC5tOFtpXSk7CisgICAgICAgICAgICAgICAgICAgIGFuc2kuVXBkYXRlKG1mZ0VVSTY0Lm04W2ldKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBEcm9wIHJlc3BvbnNlcyB0aGF0IGRvbid0IG1hdGNoIHRoZSBibG9vbSBmaWx0ZXIKKyAgICAgICAgICAgICAgICBpZiAoIXN0ZWVyaW5nRGF0YS5HZXRCaXQoY2NpdHQuR2V0KCkgJSBzdGVlcmluZ0RhdGEuR2V0TnVtQml0cygpKSB8fAorICAgICAgICAgICAgICAgICAgICAhc3RlZXJpbmdEYXRhLkdldEJpdChhbnNpLkdldCgpICUgc3RlZXJpbmdEYXRhLkdldE51bUJpdHMoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHQubVN0ZWVyaW5nRGF0YS5tTGVuZ3RoID0gc3RlZXJpbmdEYXRhLkdldExlbmd0aCgpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC5tU3RlZXJpbmdEYXRhLm04LCBzdGVlcmluZ0RhdGEuR2V0VmFsdWUoKSwgcmVzdWx0Lm1TdGVlcmluZ0RhdGEubUxlbmd0aCk7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWVzaENvUDo6VGx2OjprSm9pbmVyVWRwUG9ydDoKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoSm9pbmVyVWRwUG9ydCksICZKb2luZXJVZHBQb3J0KTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChKb2luZXJVZHBQb3J0LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICByZXN1bHQubUpvaW5lclVkcFBvcnQgPSBKb2luZXJVZHBQb3J0LkdldFVkcFBvcnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBzaXplb2YobWVzaGNvcFRsdikgKyBtZXNoY29wVGx2LkdldExlbmd0aCgpOworICAgIH0KKworICAgIC8vIHNpZ25hbCBjYWxsYmFjaworICAgIG1EaXNjb3ZlckhhbmRsZXIoJnJlc3VsdCwgbURpc2NvdmVyQ29udGV4dCk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIERpc2NvdmVyeSBSZXNwb25zZSIpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworTmVpZ2hib3IgKk1sZTo6R2V0TmVpZ2hib3IodWludDE2X3QgYUFkZHJlc3MpCit7CisgICAgaWYgKChtUGFyZW50LklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkpICYmIChtUGFyZW50LkdldFJsb2MxNigpID09IGFBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbVBhcmVudDsKKyAgICB9CisKKyAgICBpZiAoKG1QYXJlbnRDYW5kaWRhdGUuR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpICYmIChtUGFyZW50Q2FuZGlkYXRlLkdldFJsb2MxNigpID09IGFBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbVBhcmVudENhbmRpZGF0ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworTmVpZ2hib3IgKk1sZTo6R2V0TmVpZ2hib3IoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBpZiAoKG1QYXJlbnQuSXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSkgJiYKKyAgICAgICAgKG1lbWNtcCgmbVBhcmVudC5HZXRFeHRBZGRyZXNzKCksICZhQWRkcmVzcywgc2l6ZW9mKGFBZGRyZXNzKSkgPT0gMCkpCisgICAgeworICAgICAgICByZXR1cm4gJm1QYXJlbnQ7CisgICAgfQorCisgICAgaWYgKChtUGFyZW50Q2FuZGlkYXRlLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKSAmJgorICAgICAgICAobWVtY21wKCZtUGFyZW50Q2FuZGlkYXRlLkdldEV4dEFkZHJlc3MoKSwgJmFBZGRyZXNzLCBzaXplb2YoYUFkZHJlc3MpKSA9PSAwKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbVBhcmVudENhbmRpZGF0ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworTmVpZ2hib3IgKk1sZTo6R2V0TmVpZ2hib3IoY29uc3QgTWFjOjpBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBOZWlnaGJvciAqbmVpZ2hib3IgPSBOVUxMOworCisgICAgc3dpdGNoIChhQWRkcmVzcy5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIDI6CisgICAgICAgIG5laWdoYm9yID0gR2V0TmVpZ2hib3IoYUFkZHJlc3MubVNob3J0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA4OgorICAgICAgICBuZWlnaGJvciA9IEdldE5laWdoYm9yKGFBZGRyZXNzLm1FeHRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG5laWdoYm9yOworfQorCit1aW50MTZfdCBNbGU6OkdldE5leHRIb3AodWludDE2X3QgYURlc3RpbmF0aW9uKSBjb25zdAoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhRGVzdGluYXRpb24pOworICAgIHJldHVybiAobVBhcmVudC5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkgPyBtUGFyZW50LkdldFJsb2MxNigpIDogc3RhdGljX2Nhc3Q8dWludDE2X3Q+CisgICAgICAgICAgIChNYWM6OmtTaG9ydEFkZHJJbnZhbGlkKTsKK30KKworYm9vbCBNbGU6OklzUm91dGluZ0xvY2F0b3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtY21wKCZtTWVzaExvY2FsMTYsICZhQWRkcmVzcywga1Jsb2NQcmVmaXhMZW5ndGgpID09IDAgJiYKKyAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tOFsxNF0gPCBJcDY6OkFkZHJlc3M6OmtBbG9jMTZNYXNrICYmCisgICAgICAgICAgIChhQWRkcmVzcy5tRmllbGRzLm04WzE0XSAmIElwNjo6QWRkcmVzczo6a1Jsb2MxNlJlc2VydmVkQml0TWFzaykgPT0gMDsKK30KKworYm9vbCBNbGU6OklzQW55Y2FzdExvY2F0b3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtY21wKCZtTWVzaExvY2FsMTYsICZhQWRkcmVzcywga1Jsb2NQcmVmaXhMZW5ndGgpID09IDAgJiYKKyAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tOFsxNF0gPT0gSXA2OjpBZGRyZXNzOjprQWxvYzE2TWFzazsKK30KKworYm9vbCBNbGU6OklzTWVzaExvY2FsQWRkcmVzcyhjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdAoreworICAgIHJldHVybiBhQWRkcmVzcy5QcmVmaXhNYXRjaChHZXRNZXNoTG9jYWwxNigpKSA+PSBJcDY6OkFkZHJlc3M6OmtNZXNoTG9jYWxQcmVmaXhMZW5ndGg7Cit9CisKK1JvdXRlciAqTWxlOjpHZXRQYXJlbnQodm9pZCkKK3sKKyAgICBpZiAoKCFtUGFyZW50LklzU3RhdGVWYWxpZE9yUmVzdG9yaW5nKCkpICYmIChtUGFyZW50Q2FuZGlkYXRlLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbVBhcmVudENhbmRpZGF0ZTsKKyAgICB9CisKKyAgICByZXR1cm4gJm1QYXJlbnQ7Cit9CisKK290RXJyb3IgTWxlOjpDaGVja1JlYWNoYWJpbGl0eSh1aW50MTZfdCBhTWVzaFNvdXJjZSwgdWludDE2X3QgYU1lc2hEZXN0LCBJcDY6OkhlYWRlciAmYUlwNkhlYWRlcikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9EUk9QOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBpZiAoYU1lc2hEZXN0ICE9IEdldFJsb2MxNigpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworICAgIGlmIChuZXRpZi5Jc1VuaWNhc3RBZGRyZXNzKGFJcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpCisgICAgeworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgfQorCisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSA9IEdldE1lc2hMb2NhbDE2KCk7CisgICAgbWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKS5tRmllbGRzLm0xNls3XSA9IEhvc3RTd2FwMTYoYU1lc2hTb3VyY2UpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgbmV0aWYuR2V0SXA2KCkubUljbXAuU2VuZEVycm9yKElwNjo6SWNtcEhlYWRlcjo6a1R5cGVEc3RVbnJlYWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJcDY6OkljbXBIZWFkZXI6OmtDb2RlRHN0VW5yZWFjaE5vUm91dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJbmZvLCBhSXA2SGVhZGVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK01sZSAmTWxlOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBNbGUgJm1sZSA9ICpzdGF0aWNfY2FzdDxNbGUgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTWxlICZtbGUgPSBvdEdldEluc3RhbmNlKCktPm1UaHJlYWROZXRpZi5HZXRNbGUoKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIG1sZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1sZQorfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbWxlLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZGVjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWxlLmhwcApAQCAtMCwwICsxLDE0NTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIENoaWxkLCBSb3V0ZXIsIGFuZCBMZWFkZXIgcm9sZXMuCisgKi8KKworI2lmbmRlZiBNTEVfSFBQXworI2RlZmluZSBNTEVfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWMuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3Avam9pbmVyX3JvdXRlci5ocHAiCisjaW5jbHVkZSAibmV0L3VkcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfY29uc3RhbnRzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90b3BvbG9neS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworY2xhc3MgS2V5TWFuYWdlcjsKK2NsYXNzIE1lc2hGb3J3YXJkZXI7CisKK25hbWVzcGFjZSBNYWMgeyBjbGFzcyBNYWM7IH0KK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7IGNsYXNzIExlYWRlcjsgfQorCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbWxlIE1MRQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIE1MRSBwcm90b2NvbC4KKyAqCisgKiBAeworICoKKyAqIEBkZWZncm91cCBjb3JlLW1sZS1jb3JlIENvcmUKKyAqIEBkZWZncm91cCBjb3JlLW1sZS1yb3V0ZXIgUm91dGVyCisgKiBAZGVmZ3JvdXAgY29yZS1tbGUtdGx2cyBUTFZzCisgKgorICogQH0KKyAqLworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6Ok1sZQorICoKKyAqIEBicmllZgorICogICBUaGlzIG5hbWVzcGFjZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIE1MRSBwcm90b2NvbC4KKyAqLworCituYW1lc3BhY2UgTWxlIHsKKworY2xhc3MgTWxlUm91dGVyOworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbWxlLWNvcmUKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIE1MRSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBUaHJlYWQgQ2hpbGQsIFJvdXRlciwgYW5kIExlYWRlciByb2xlcy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIE1MRSBBdHRhY2ggbW9kZXMKKyAqCisgKi8KK2VudW0gQXR0YWNoTW9kZQoreworICAgIGtBdHRhY2hBbnkgICAgPSAwLCAgLy8vPCBBdHRhY2ggdG8gYW55IFRocmVhZCBwYXJ0aXRpb24uCisgICAga0F0dGFjaFNhbWUxICA9IDEsICAvLy88IEF0dGFjaCB0byB0aGUgc2FtZSBUaHJlYWQgcGFydGl0aW9uIChhdHRlbXB0IDEpLgorICAgIGtBdHRhY2hTYW1lMiAgPSAyLCAgLy8vPCBBdHRhY2ggdG8gdGhlIHNhbWUgVGhyZWFkIHBhcnRpdGlvbiAoYXR0ZW1wdCAyKS4KKyAgICBrQXR0YWNoQmV0dGVyID0gMywgIC8vLzwgQXR0YWNoIHRvIGEgYmV0dGVyIChpLmUuIGhpZ2hlciB3ZWlnaHQvcGFydGl0aW9uIGlkKSBUaHJlYWQgcGFydGl0aW9uLgorfTsKKworLyoqCisgKiBUaGlzIGVudW1lcmF0aW9uIHJlcHJlc2VudHMgdGhlIGFsbG9jYXRpb24gb2YgdGhlIEFMT0MgU3BhY2UKKyAqCisgKi8KK2VudW0gQWxvY0FsbG9jYXRpb24KK3sKKyAgICBrQWxvYzE2TGVhZGVyICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZmMwMCwKKyAgICBrQWxvYzE2RGhjcEFnZW50U3RhcnQgICAgICAgICAgICAgICA9IDB4ZmMwMSwKKyAgICBrQWxvYzE2RGhjcEFnZW50RW5kICAgICAgICAgICAgICAgICA9IDB4ZmMwZiwKKyAgICBrQWxvYzE2RGhjcEFnZW50TWFzayAgICAgICAgICAgICAgICA9IDB4MDNmZiwKKyAgICBrQWxvYzE2U2VydmljZVN0YXJ0ICAgICAgICAgICAgICAgICA9IDB4ZmMxMCwKKyAgICBrQWxvYzE2U2VydmljZUVuZCAgICAgICAgICAgICAgICAgICA9IDB4ZmMyZiwKKyAgICBrQWxvYzE2Q29tbWlzc2lvbmVyU3RhcnQgICAgICAgICAgICA9IDB4ZmMzMCwKKyAgICBrQWxvYzE2Q29tbWlzc2lvbmVyRW5kICAgICAgICAgICAgICA9IDB4ZmMzNywKKyAgICBrQWxvYzE2TmVpZ2hib3JEaXNjb3ZlcnlBZ2VudFN0YXJ0ICA9IDB4ZmM0MCwKKyAgICBrQWxvYzE2TmVpZ2hib3JEaXNjb3ZlcnlBZ2VudEVuZCAgICA9IDB4ZmM0ZSwKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1MRSBIZWFkZXIgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgTUxFIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IG1TZWN1cml0eVN1aXRlID0gazE1NFNlY3VyaXR5OyBtU2VjdXJpdHlDb250cm9sID0gTWFjOjpGcmFtZTo6a1NlY0VuY01pYzMyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtU2VjdXJpdHlTdWl0ZSA9PSBrTm9TZWN1cml0eSkgfHwKKyAgICAgICAgICAgICAgIChtU2VjdXJpdHlTdWl0ZSA9PSBrMTU0U2VjdXJpdHkgJiYKKyAgICAgICAgICAgICAgICBtU2VjdXJpdHlDb250cm9sID09IChNYWM6OkZyYW1lOjprS2V5SWRNb2RlMiB8IE1hYzo6RnJhbWU6OmtTZWNFbmNNaWMzMikpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1MRSBoZWFkZXIgYW5kIENvbW1hbmQgVHlwZSBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUxFIGhlYWRlciBhbmQgQ29tbWFuZCBUeXBlIGxlbmd0aC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgdWludDhfdCBydmFsID0gc2l6ZW9mKG1TZWN1cml0eVN1aXRlKSArIHNpemVvZihtQ29tbWFuZCk7CisKKyAgICAgICAgaWYgKG1TZWN1cml0eVN1aXRlID09IGsxNTRTZWN1cml0eSkgeworICAgICAgICAgICAgcnZhbCArPSBzaXplb2YobVNlY3VyaXR5Q29udHJvbCkgKyBzaXplb2YobUZyYW1lQ291bnRlcikgKyBzaXplb2YobUtleVNvdXJjZSkgKyBzaXplb2YobUtleUluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBydmFsOworICAgIH0KKworICAgIGVudW0gU2VjdXJpdHlTdWl0ZQorICAgIHsKKyAgICAgICAgazE1NFNlY3VyaXR5ID0gMCwgICAgLy8vPCBJRUVFIDgwMi4xNS40LTIwMDYgc2VjdXJpdHkuCisgICAgICAgIGtOb1NlY3VyaXR5ICA9IDI1NSwgIC8vLzwgTm8gc2VjdXJpdHkgZW5hYmxlZC4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU2VjdXJpdHkgU3VpdGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU2VjdXJpdHkgU3VpdGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBTZWN1cml0eVN1aXRlIEdldFNlY3VyaXR5U3VpdGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VjdXJpdHlTdWl0ZT4obVNlY3VyaXR5U3VpdGUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTZWN1cml0eSBTdWl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWN1cml0eVN1aXRlICBUaGUgU2VjdXJpdHkgU3VpdGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFNlY3VyaXR5U3VpdGUoU2VjdXJpdHlTdWl0ZSBhU2VjdXJpdHlTdWl0ZSkgeyBtU2VjdXJpdHlTdWl0ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFTZWN1cml0eVN1aXRlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTUxFIGhlYWRlciBsZW5ndGggKGV4Y2x1ZGluZyB0aGUgQ29tbWFuZCBUeXBlKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNTEUgaGVhZGVyIGxlbmd0aCAoZXhjbHVkaW5nIHRoZSBDb21tYW5kIFR5cGUpLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRIZWFkZXJMZW5ndGgodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gc2l6ZW9mKG1TZWN1cml0eUNvbnRyb2wpICsgc2l6ZW9mKG1GcmFtZUNvdW50ZXIpICsgc2l6ZW9mKG1LZXlTb3VyY2UpICsgc2l6ZW9mKG1LZXlJbmRleCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gZmlyc3QgYnl0ZSBvZiB0aGUgTUxFIGhlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgTUxFIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldEJ5dGVzKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPigmbVNlY3VyaXR5U3VpdGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNlY3VyaXR5IENvbnRyb2wgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU2VjdXJpdHkgQ29udHJvbCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0U2VjdXJpdHlDb250cm9sKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWN1cml0eUNvbnRyb2w7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgS2V5IElEIE1vZGUgaXMgc2V0IHRvIDIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgS2V5IElEIE1vZGUgaXMgc2V0IHRvIDIuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIEtleSBJRCBNb2RlIGlzIG5vdCBzZXQgdG8gMi4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNLZXlJZE1vZGUyKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtU2VjdXJpdHlDb250cm9sICYgTWFjOjpGcmFtZTo6a0tleUlkTW9kZU1hc2spID09IE1hYzo6RnJhbWU6OmtLZXlJZE1vZGUyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEtleSBJRCBNb2RlIHRvIDIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEtleUlkTW9kZTIodm9pZCkgeworICAgICAgICBtU2VjdXJpdHlDb250cm9sID0gKG1TZWN1cml0eUNvbnRyb2wgJiB+TWFjOjpGcmFtZTo6a0tleUlkTW9kZU1hc2spIHwgTWFjOjpGcmFtZTo6a0tleUlkTW9kZTI7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgS2V5IElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEtleSBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEtleUlkKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzIobUtleVNvdXJjZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgS2V5IElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUtleVNlcXVlbmNlICBUaGUgS2V5IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXlJZCh1aW50MzJfdCBhS2V5U2VxdWVuY2UpIHsKKyAgICAgICAgbUtleVNvdXJjZSA9IEVuY29kaW5nOjpCaWdFbmRpYW46Okhvc3RTd2FwMzIoYUtleVNlcXVlbmNlKTsKKyAgICAgICAgbUtleUluZGV4ID0gKGFLZXlTZXF1ZW5jZSAmIDB4N2YpICsgMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gRW5jb2Rpbmc6OkxpdHRsZUVuZGlhbjo6SG9zdFN3YXAzMihtRnJhbWVDb3VudGVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQ291bnRlciAgVGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZyYW1lQ291bnRlcih1aW50MzJfdCBhRnJhbWVDb3VudGVyKSB7CisgICAgICAgIG1GcmFtZUNvdW50ZXIgPSBFbmNvZGluZzo6TGl0dGxlRW5kaWFuOjpIb3N0U3dhcDMyKGFGcmFtZUNvdW50ZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1MRSBDb21tYW5kIFR5cGVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBDb21tYW5kCisgICAgeworICAgICAgICBrQ29tbWFuZExpbmtSZXF1ZXN0ICAgICAgICAgID0gMCwgICAgLy8vPCBMaW5rIFJlamVjdAorICAgICAgICBrQ29tbWFuZExpbmtBY2NlcHQgICAgICAgICAgID0gMSwgICAgLy8vPCBMaW5rIEFjY2VwdAorICAgICAgICBrQ29tbWFuZExpbmtBY2NlcHRBbmRSZXF1ZXN0ID0gMiwgICAgLy8vPCBMaW5rIEFjY2VwdCBhbmQgUmVqZWN0CisgICAgICAgIGtDb21tYW5kTGlua1JlamVjdCAgICAgICAgICAgPSAzLCAgICAvLy88IExpbmsgUmVqZWN0CisgICAgICAgIGtDb21tYW5kQWR2ZXJ0aXNlbWVudCAgICAgICAgPSA0LCAgICAvLy88IEFkdmVydGlzZW1lbnQKKyAgICAgICAga0NvbW1hbmRVcGRhdGUgICAgICAgICAgICAgICA9IDUsICAgIC8vLzwgVXBkYXRlCisgICAgICAgIGtDb21tYW5kVXBkYXRlUmVxdWVzdCAgICAgICAgPSA2LCAgICAvLy88IFVwZGF0ZSBSZXF1ZXN0CisgICAgICAgIGtDb21tYW5kRGF0YVJlcXVlc3QgICAgICAgICAgPSA3LCAgICAvLy88IERhdGEgUmVxdWVzdAorICAgICAgICBrQ29tbWFuZERhdGFSZXNwb25zZSAgICAgICAgID0gOCwgICAgLy8vPCBEYXRhIFJlc3BvbnNlCisgICAgICAgIGtDb21tYW5kUGFyZW50UmVxdWVzdCAgICAgICAgPSA5LCAgICAvLy88IFBhcmVudCBSZXF1ZXN0CisgICAgICAgIGtDb21tYW5kUGFyZW50UmVzcG9uc2UgICAgICAgPSAxMCwgICAvLy88IFBhcmVudCBSZXNwb25zZQorICAgICAgICBrQ29tbWFuZENoaWxkSWRSZXF1ZXN0ICAgICAgID0gMTEsICAgLy8vPCBDaGlsZCBJRCBSZXF1ZXN0CisgICAgICAgIGtDb21tYW5kQ2hpbGRJZFJlc3BvbnNlICAgICAgPSAxMiwgICAvLy88IENoaWxkIElEIFJlc3BvbnNlCisgICAgICAgIGtDb21tYW5kQ2hpbGRVcGRhdGVSZXF1ZXN0ICAgPSAxMywgICAvLy88IENoaWxkIFVwZGF0ZSBSZXF1ZXN0CisgICAgICAgIGtDb21tYW5kQ2hpbGRVcGRhdGVSZXNwb25zZSAgPSAxNCwgICAvLy88IENoaWxkIFVwZGF0ZSBSZXNwb25zZQorICAgICAgICBrQ29tbWFuZEFubm91bmNlICAgICAgICAgICAgID0gMTUsICAgLy8vPCBBbm5vdW5jZQorICAgICAgICBrQ29tbWFuZERpc2NvdmVyeVJlcXVlc3QgICAgID0gMTYsICAgLy8vPCBEaXNjb3ZlcnkgUmVxdWVzdAorICAgICAgICBrQ29tbWFuZERpc2NvdmVyeVJlc3BvbnNlICAgID0gMTcsICAgLy8vPCBEaXNjb3ZlcnkgUmVzcG9uc2UKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ29tbWFuZCBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvbW1hbmQgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIENvbW1hbmQgR2V0Q29tbWFuZCh2b2lkKSBjb25zdCB7CisgICAgICAgIGlmIChtU2VjdXJpdHlTdWl0ZSA9PSBrTm9TZWN1cml0eSkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbW1hbmQ+KG1TZWN1cml0eUNvbnRyb2wpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbW1hbmQ+KG1Db21tYW5kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENvbW1hbmQgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb21tYW5kICBUaGUgQ29tbWFuZCBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb21tYW5kKENvbW1hbmQgYUNvbW1hbmQpIHsKKyAgICAgICAgaWYgKG1TZWN1cml0eVN1aXRlID09IGtOb1NlY3VyaXR5KSB7CisgICAgICAgICAgICBtU2VjdXJpdHlDb250cm9sID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYUNvbW1hbmQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbUNvbW1hbmQgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhQ29tbWFuZCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtU2VjdXJpdHlTdWl0ZTsKKyAgICB1aW50OF90IG1TZWN1cml0eUNvbnRyb2w7CisgICAgdWludDMyX3QgbUZyYW1lQ291bnRlcjsKKyAgICB1aW50MzJfdCBtS2V5U291cmNlOworICAgIHVpbnQ4X3QgbUtleUluZGV4OworICAgIHVpbnQ4X3QgbUNvbW1hbmQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBmb3IgZGVsYXlpbmcgTUxFIHJlc3BvbnNlcy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBEZWxheWVkUmVzcG9uc2VIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRGVsYXllZFJlc3BvbnNlSGVhZGVyKHZvaWQpIHsgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0IHdpdGggc3BlY2lmaWMgdmFsdWVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlbmRUaW1lICAgICBUaW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gIElQdjYgYWRkcmVzcyBvZiB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIERlbGF5ZWRSZXNwb25zZUhlYWRlcih1aW50MzJfdCBhU2VuZFRpbWUsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uKSB7CisgICAgICAgIG1TZW5kVGltZSA9IGFTZW5kVGltZTsKKyAgICAgICAgbURlc3RpbmF0aW9uID0gYURlc3RpbmF0aW9uOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGRlbGF5ZWQgcmVzcG9uc2UgaGVhZGVyIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIGJ5dGVzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidWZmZXJzIHRvIGdyb3cgdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFRvKE1lc3NhZ2UgJmFNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBhTWVzc2FnZS5BcHBlbmQodGhpcywgc2l6ZW9mKCp0aGlzKSk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlYWRzIGRlbGF5ZWQgcmVzcG9uc2UgaGVhZGVyIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBSZWFkRnJvbShNZXNzYWdlICZhTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gYU1lc3NhZ2UuUmVhZChhTWVzc2FnZS5HZXRMZW5ndGgoKSAtIHNpemVvZigqdGhpcyksIHNpemVvZigqdGhpcyksIHRoaXMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGRlbGF5ZWQgcmVzcG9uc2UgaGVhZGVyIGZyb20gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBoZWFkZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBSZW1vdmVGcm9tKE1lc3NhZ2UgJmFNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiBhTWVzc2FnZS5TZXRMZW5ndGgoYU1lc3NhZ2UuR2V0TGVuZ3RoKCkgLSBzaXplb2YoRGVsYXllZFJlc3BvbnNlSGVhZGVyKSk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB0aW1lIHdoZW4gdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHRpbWUgd2hlbiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50LgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0U2VuZFRpbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlbmRUaW1lOyB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRlc3RpbmF0aW9uIG9mIHRoZSBkZWxheWVkIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgQSBkZXN0aW5hdGlvbiBvZiB0aGUgZGVsYXllZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICZHZXREZXN0aW5hdGlvbih2b2lkKSBjb25zdCB7IHJldHVybiBtRGVzdGluYXRpb247IH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZSAgQSB0aW1lIHRvIGNvbXBhcmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0VhcmxpZXIodWludDMyX3QgYVRpbWUpIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxpbnQzMl90PihhVGltZSAtIG1TZW5kVGltZSkgPiAwKTsgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50IGFmdGVyIHRoZSBnaXZlbiB0aW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWUgIEEgdGltZSB0byBjb21wYXJlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIG1lc3NhZ2Ugc2hhbGwgYmUgc2VudCBhZnRlciB0aGUgZ2l2ZW4gdGltZS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBPdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbCBJc0xhdGVyKHVpbnQzMl90IGFUaW1lKSB7IHJldHVybiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYVRpbWUgLSBtU2VuZFRpbWUpIDwgMCk7IH07CisKK3ByaXZhdGU6CisgICAgSXA2OjpBZGRyZXNzIG1EZXN0aW5hdGlvbjsgIC8vLzwgSVB2NiBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uLgorICAgIHVpbnQzMl90IG1TZW5kVGltZTsgICAgICAgICAvLy88IFRpbWUgd2hlbiB0aGUgbWVzc2FnZSBzaGFsbCBiZSBzZW50LgorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1MRSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIGJ5IHRoZSBUaHJlYWQgRW5kRGV2aWNlcywgUm91dGVyLCBhbmQgTGVhZGVyIHJvbGVzLgorICoKKyAqLworY2xhc3MgTWxlOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgTUxFIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IE1sZShUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgTUxFLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5hYmxlZCBNTEUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICBNTEUgd2FzIGFscmVhZHkgZW5hYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRW5hYmxlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGlzYWJsZXMgTUxFLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZGlzYWJsZWQgTUxFLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBEaXNhYmxlKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RhcnRzIHRoZSBNTEUgcHJvdG9jb2wgb3BlcmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUVuYWJsZVJlYXR0YWNoIFRydWUgaWYgcmVhdHRhY2ggdXNpbmcgc3RvcmVkIGRhdGFzZXQsIG9yIEZhbHNlIGlmIG5vdC4KKyAgICAgKiBAcGFyYW1baW5dICBhQW5ub3VuY2VBdHRhY2ggVHJ1ZSBpZiBhdHRhY2ggb24gdGhlIGFubm91bmNlZCB0aHJlYWQgbmV0d29yayB3aXRoIG5ld2VyIGFjdGl2ZSB0aW1lc3RhbXAsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEZhbHNlIGlmIG5vdC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIHByb3RvY29sIG9wZXJhdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgIFRoZSBwcm90b2NvbCBvcGVyYXRpb24gd2FzIGFscmVhZHkgc3RhcnRlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RhcnQoYm9vbCBhRW5hYmxlUmVhdHRhY2gsIGJvb2wgYUFubm91bmNlQXR0YWNoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBNTEUgcHJvdG9jb2wgb3BlcmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNsZWFyTmV0d29ya0RhdGFzZXRzICBUcnVlIHRvIGNsZWFyIG5ldHdvcmsgZGF0YXNldHMsIEZhbHNlIG5vdC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgdGhlIHByb3RvY29sIG9wZXJhdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcChib29sIGFDbGVhck5ldHdvcmtEYXRhc2V0cyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBuZXR3b3JrIGluZm9ybWF0aW9uIGZyb20gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVzdG9yZSB0aGUgbmV0d29yayBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgVGhlcmUgaXMgbm8gdmFsaWQgbmV0d29yayBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVzdG9yZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3JlcyBuZXR3b3JrIGluZm9ybWF0aW9uIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgc3RvcmUgdGhlIG5ldHdvcmsgaW5mb3JtYXRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgIENvdWxkIG5vdCBzdG9yZSB0aGUgbmV0d29yayBpbmZvcm1hdGlvbiBkdWUgdG8gaW5zdWZmaWNpZW50IG1lbW9yeSBzcGFjZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcmUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIG9uIHJlY2VpdmluZyBhbiBNTEUgRGlzY292ZXJ5IFJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzdWx0ICAgQSB2YWxpZCBwb2ludGVyIHRvIHRoZSBEaXNjb3ZlcnkgUmVzcG9uc2UgaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIHRoZSBEaXNjb3ZlcnkgY29tcGxldGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICBBIHBvaW50ZXIgdG8gYXBwbGljYXRpb24tc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKkRpc2NvdmVySGFuZGxlcikob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0LCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWF0ZXMgYSBUaHJlYWQgRGlzY292ZXJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNjYW5DaGFubmVscyAgICAgICAgICBBIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyB3aGljaCBjaGFubmVscyB0byBzY2FuLgorICAgICAqIEBwYXJhbVtpbl0gIGFQYW5JZCAgICAgICAgICAgICAgICAgVGhlIFBBTiBJRCBmaWx0ZXIgKHNldCB0byBCcm9hZGNhc3QgUEFOIHRvIGRpc2FibGUgZmlsdGVyKS4KKyAgICAgKiBAcGFyYW1baW5dICBhSm9pbmVyICAgICAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBKb2luZXIgRmxhZyBpbiB0aGUgRGlzY292ZXJ5IFJlcXVlc3QgVExWLgorICAgICAqIEBwYXJhbVtpbl0gIGFFbmFibGVFdWk2NEZpbHRlcmluZyAgRW5hYmxlIGZpbHRlcmluZyBvdXQgTUxFIGRpc2NvdmVyeSByZXNwb25zZXMgdGhhdCBkb24ndCBtYXRjaCBvdXIgZmFjdG9yeQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduZWQgRVVJNjQuCisgICAgICogQHBhcmFtW2luXSAgYUhhbmRsZXIgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbiByZWNlaXZpbmcgYW4gTUxFIERpc2NvdmVyeSBSZXNwb25zZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYSBUaHJlYWQgRGlzY292ZXJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQlVTWSAgVGhyZWFkIERpc2NvdmVyeSBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBEaXNjb3Zlcih1aW50MzJfdCBhU2NhbkNoYW5uZWxzLCB1aW50MTZfdCBhUGFuSWQsIGJvb2wgYUpvaW5lciwgYm9vbCBhRW5hYmxlRXVpNjRGaWx0ZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICBEaXNjb3ZlckhhbmRsZXIgYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGFuIE1MRSBUaHJlYWQgRGlzY292ZXJ5IGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIHRydWUgaWYgYW4gTUxFIFRocmVhZCBEaXNjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNEaXNjb3ZlckluUHJvZ3Jlc3Modm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIE1lc2hGb3J3YXJkZXIgdG8gaW5kaWNhdGUgdGhhdCBkaXNjb3ZlcnkgaXMgY29tcGxldGUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEhhbmRsZURpc2NvdmVyQ29tcGxldGUodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYW4gTUxFIEFubm91bmNlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbCAgICAgICAgVGhlIGNoYW5uZWwgdG8gdXNlIHdoZW4gdHJhbnNtaXR0aW5nLgorICAgICAqIEBwYXJhbVtpbl0gIGFPcnBoYW5Bbm5vdW5jZSBUbyBpbmRpY2F0ZSBpZiBNTEUgQW5ub3VuY2UgaXMgc2VudCBmcm9tIGFuIG9ycGhhbiBlbmQgZGV2aWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZ2VuZXJhdGVkIGFuIE1MRSBBbm5vdW5jZSBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgdGhlIE1MRSBBbm5vdW5jZSBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kQW5ub3VuY2UodWludDhfdCBhQ2hhbm5lbCwgYm9vbCBhT3JwaGFuQW5ub3VuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2F1c2VzIHRoZSBUaHJlYWQgaW50ZXJmYWNlIHRvIGRldGFjaCBmcm9tIHRoZSBUaHJlYWQgbmV0d29yay4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGRldGFjaGVkIGZyb20gdGhlIFRocmVhZCBuZXR3b3JrLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgTUxFIGlzIERpc2FibGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBCZWNvbWVEZXRhY2hlZCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNhdXNlcyB0aGUgVGhyZWFkIGludGVyZmFjZSB0byBhdHRlbXB0IGFuIE1MRSBhdHRhY2guCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTW9kZSAgSW5kaWNhdGVzIHdoYXQgcGFydGl0aW9ucyB0byBhdHRhY2ggdG8uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWdhbiB0aGUgYXR0YWNoIHByb2Nlc3MuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBNTEUgaXMgRGlzYWJsZWQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9CVVNZICAgICAgICAgICBBbiBhdHRhY2ggcHJvY2VzcyBpcyBpbiBwcm9ncmVzcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQmVjb21lQ2hpbGQoQXR0YWNoTW9kZSBhTW9kZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRocmVhZCBkZXZpY2UgaXMgYXR0YWNoZWQgdG8gYSBUaHJlYWQgbmV0d29yay4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEF0dGFjaGVkIHRvIGEgVGhyZWFkIG5ldHdvcmsuCisgICAgICogQHJldHZhbCBGQUxTRSAgTm90IGF0dGFjaGVkIHRvIGEgVGhyZWFkIG5ldHdvcmsuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQXR0YWNoZWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IFRocmVhZCBpbnRlcmZhY2Ugc3RhdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBUaHJlYWQgaW50ZXJmYWNlIHN0YXRlLgorICAgICAqCisgICAgICovCisgICAgb3REZXZpY2VSb2xlIEdldFJvbGUodm9pZCkgY29uc3QgeyByZXR1cm4gbVJvbGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERldmljZSBNb2RlIGFzIHJlcG9ydGVkIGluIHRoZSBNb2RlIFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBEZXZpY2UgTW9kZSBhcyByZXBvcnRlZCBpbiB0aGUgTW9kZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldERldmljZU1vZGUodm9pZCkgY29uc3QgeyByZXR1cm4gbURldmljZU1vZGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGlzIGEgTWluaW1hbCBFbmQgRGV2aWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgZGV2aWNlIGlzIGEgTWluaW1hbCBFbmQgRGV2aWNlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzTWluaW1hbEVuZERldmljZSh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobURldmljZU1vZGUgJiAoTW9kZVRsdjo6a01vZGVGRkQgfCBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkpICE9CisgICAgICAgICAgICAgICAoTW9kZVRsdjo6a01vZGVGRkQgfCBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGV2aWNlIE1vZGUgYXMgcmVwb3J0ZWQgaW4gdGhlIE1vZGUgVExWLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIE1vZGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9BUkdTICBUaGUgbW9kZSBjb21iaW5hdGlvbiBzcGVjaWZpZWQgaW4gQHAgYU1vZGUgaXMgaW52YWxpZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0RGV2aWNlTW9kZSh1aW50OF90IGFNb2RlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRNZXNoTG9jYWxQcmVmaXgodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNZXNoIExvY2FsIFByZWZpeC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggIEEgcG9pbnRlciB0byB0aGUgTWVzaCBMb2NhbCBQcmVmaXguCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIE1lc2ggTG9jYWwgUHJlZml4LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRNZXNoTG9jYWxQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbGluay1sb2NhbCBhZGRyZXNzLgorICAgICAqCisgICAgICogVGhlIFRocmVhZCBsaW5rIGxvY2FsIGFkZHJlc3MgaXMgZGVyaXZlZCB1c2luZyBJRUVFODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcyBhcyBJbnRlcmZhY2UgSWRlbnRpZmllci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbGluayBsb2NhbCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICZHZXRMaW5rTG9jYWxBZGRyZXNzKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgbGluayBsb2NhbCBhZGRyZXNzLgorICAgICAqCisgICAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aGVuIHRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MgaGFzIGNoYW5nZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSB1cGRhdGVkIHRoZSBsaW5rIGxvY2FsIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFVwZGF0ZUxpbmtMb2NhbEFkZHJlc3Modm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbGluay1sb2NhbCBhbGwgVGhyZWFkIG5vZGVzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBsaW5rLWxvY2FsIGFsbCBUaHJlYWQgbm9kZXMgbXVsdGljYXN0IGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBJcDY6OkFkZHJlc3MgKkdldExpbmtMb2NhbEFsbFRocmVhZE5vZGVzQWRkcmVzcyh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSByZWFsbS1sb2NhbCBhbGwgVGhyZWFkIG5vZGVzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSByZWFsbS1sb2NhbCBhbGwgVGhyZWFkIG5vZGVzIG11bHRpY2FzdCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICpHZXRSZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXNBZGRyZXNzKHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCB3aGVuIG9wZXJhdGluZyBpbiBFbmQgRGV2aWNlIG1vZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudC4KKyAgICAgKgorICAgICAqLworICAgIFJvdXRlciAqR2V0UGFyZW50KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGFuIElQdjYgYWRkcmVzcyBpcyBhbiBSTE9DLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgQHAgYUFkZHJlc3MgaXMgYW4gUkxPQy4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiBAcCBhQWRkcmVzcyBpcyBub3QgYW4gUkxPQy4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNSb3V0aW5nTG9jYXRvcihjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBJUHY2IGFkZHJlc3MgaXMgYW4gQUxPQy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIEBwIGFBZGRyZXNzIGlzIGFuIEFMT0MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgQHAgYUFkZHJlc3MgaXMgbm90IGFuIEFMT0MuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQW55Y2FzdExvY2F0b3IoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW4gSVB2NiBhZGRyZXNzIGlzIGEgTWVzaCBMb2NhbCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgQHAgYUFkZHJlc3MgaXMgYSBNZXNoIExvY2FsIEFkZHJlc3MuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgQHAgYUFkZHJlc3MgaXMgbm90IGEgTWVzaCBMb2NhbCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc01lc2hMb2NhbEFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNTEUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNTEUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFRpbWVvdXQodm9pZCkgY29uc3QgeyByZXR1cm4gbVRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1MRSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRUaW1lb3V0KHVpbnQzMl90IGFUaW1lb3V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJMT0MxNiBhc3NpZ25lZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSTE9DMTYgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRSbG9jMTYodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBSTE9DIGFzc2lnbmVkIHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIFJMT0MgYXNzaWduZWQgdG8gdGhlIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBJcDY6OkFkZHJlc3MgJkdldE1lc2hMb2NhbDE2KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgTUwtRUlEIGFzc2lnbmVkIHRvIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIE1MLUVJRCBhc3NpZ25lZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6QWRkcmVzcyAmR2V0TWVzaExvY2FsNjQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3V0ZXIgSUQgb2YgdGhlIExlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSb3V0ZXIgSUQgb2YgdGhlIExlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVhZGVySWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIExlYWRlcidzIFJMT0MuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBMZWFkZXIncyBSTE9DLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgTGVhZGVyJ3MgUkxPQy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0RFVEFDSEVEICBUaGUgVGhyZWFkIGludGVyZmFjZSBpcyBub3QgY3VycmVudGx5IGF0dGFjaGVkIHRvIGEgVGhyZWFkIFBhcnRpdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TGVhZGVyQWRkcmVzcyhJcDY6OkFkZHJlc3MgJmFBZGRyZXNzKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHJpZXZlcyB0aGUgTGVhZGVyJ3MgQUxPQy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIExlYWRlcidzIEFMT0MuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBMZWFkZXIncyBBTE9DLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfREVUQUNIRUQgIFRoZSBUaHJlYWQgaW50ZXJmYWNlIGlzIG5vdCBjdXJyZW50bHkgYXR0YWNoZWQgdG8gYSBUaHJlYWQgUGFydGl0aW9uLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRMZWFkZXJBbG9jKElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBMZWFkZXIncyBBTE9DIHRvIGl0cyBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBMZWFkZXIncyBBTE9DLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQlVTWSAgICAgICAgICAgIFRoZSBMZWFkZXIncyBBTE9DIGFkZHJlc3Mgd2FzIGFscmVhZHkgYWRkZWQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgVGhlIGRldmljZSdzIHJvbGUgaXMgbm90IExlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkTGVhZGVyQWxvYyh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgTGVhZGVyIERhdGEgVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBtb3N0IHJlY2VudGx5IHJlY2VpdmVkIExlYWRlciBEYXRhIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IExlYWRlckRhdGFUbHYgJkdldExlYWRlckRhdGFUbHYodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBMZWFkZXIgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhTGVhZGVyRGF0YSAgQSByZWZlcmVuY2UgdG8gd2hlcmUgdGhlIGxlYWRlciBkYXRhIGlzIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgdGhlIGxlYWRlciBkYXRhLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfREVUQUNIRUQgICAgIE5vdCBjdXJyZW50bHkgYXR0YWNoZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldExlYWRlckRhdGEob3RMZWFkZXJEYXRhICZhTGVhZGVyRGF0YSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsaW5rIHF1YWxpdHkgb24gdGhlIGxpbmsgdG8gYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1hY0FkZHIgIFRoZSBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIE1hYyBBZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSBBIHJlZmVyZW5jZSB0byB0aGUgYXNzaWduZWQgbGluayBxdWFsaXR5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSByZXRyaWV2ZSB0aGUgbGluayBxdWFsaXR5IHRvIGFMaW5rUXVhbGl0eS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgTm8gbWF0Y2ggZm91bmQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldEFzc2lnbkxpbmtRdWFsaXR5KGNvbnN0IE1hYzo6RXh0QWRkcmVzcyBhTWFjQWRkciwgdWludDhfdCAmYUxpbmtRdWFsaXR5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGxpbmsgcXVhbGl0eSBvbiB0aGUgbGluayB0byBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWFjQWRkciAgVGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgTWFjIEFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgYUxpbmtRYXVsaXR5IFRoZSBsaW5rIHF1YWxpdHkgdG8gYmUgc2V0IG9uIHRoZSBsaW5rLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRBc3NpZ25MaW5rUXVhbGl0eShjb25zdCBNYWM6OkV4dEFkZHJlc3MgYU1hY0FkZHIsIHVpbnQ4X3QgYUxpbmtRdWFsaXR5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENoaWxkIElEIHBvcnRpb24gb2YgYW4gUkxPQzE2LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGlsZCBJRCBwb3J0aW9uIG9mIGFuIFJMT0MxNi4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyB1aW50MTZfdCBHZXRDaGlsZElkKHVpbnQxNl90IGFSbG9jMTYpIHsgcmV0dXJuIGFSbG9jMTYgJiBrTWF4Q2hpbGRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUm91dGVyIElEIHBvcnRpb24gb2YgYW4gUkxPQzE2LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSb3V0ZXIgSUQgcG9ydGlvbiBvZiBhbiBSTE9DMTYuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgdWludDhfdCBHZXRSb3V0ZXJJZCh1aW50MTZfdCBhUmxvYzE2KSB7IHJldHVybiBhUmxvYzE2ID4+IGtSb3V0ZXJJZE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUkxPQzE2IG9mIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJMT0MxNiBvZiB0aGUgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHVpbnQxNl90IEdldFJsb2MxNih1aW50OF90IGFSb3V0ZXJJZCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFSb3V0ZXJJZCA8PCBrUm91dGVySWRPZmZzZXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgQHAgYVJsb2MxNiByZWZlcnMgdG8gYW4gYWN0aXZlIHJvdXRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiBAcCBhUmxvYzE2IHJlZmVycyB0byBhbiBhY3RpdmUgcm91dGVyLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIEBwIGFSbG9jMTYgZG9lcyBub3QgcmVmZXIgdG8gYW4gYWN0aXZlIHJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBib29sIElzQWN0aXZlUm91dGVyKHVpbnQxNl90IGFSbG9jMTYpIHsgcmV0dXJuIEdldENoaWxkSWQoYVJsb2MxNikgPT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmlsbHMgdGhlIE5ldHdvcmtEYXRhVGx2LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gYVRsdiAgICAgICAgIFRoZSBOZXR3b3JrRGF0YVRsdi4KKyAgICAgKiBAcGFyYW1baW5dICBhU3RhYmxlT25seSAgVFJVRSB0byBhcHBlbmQgc3RhYmxlIGRhdGEsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgRmlsbE5ldHdvcmtEYXRhVGx2KE5ldHdvcmtEYXRhVGx2ICZhVGx2LCBib29sIGFTdGFibGVPbmx5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNlbmQgcXVldWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgc2VuZCBxdWV1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE1lc3NhZ2VRdWV1ZSAmR2V0TWVzc2FnZVF1ZXVlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1EZWxheWVkUmVzcG9uc2VzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWxlTWF4UmVzcG9uc2VEZWxheSA9IDEwMDB1LCAgLy8vPCBNYXhpbXVtIGRlbGF5IGJlZm9yZSByZXNwb25kaW5nIHRvIGEgbXVsdGljYXN0IHJlcXVlc3QuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFsbG9jYXRlcyBhIG5ldyBtZXNzYWdlIGJ1ZmZlciBmb3IgcHJlcGFyaW5nIGFuIE1MRSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIG9yIE5VTEwgaWYgaW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqTmV3TWxlTWVzc2FnZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYW4gTUxFIGhlYWRlciB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYUNvbW1hbmQgIFRoZSBNTEUgQ29tbWFuZCBUeXBlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIGhlYWRlci4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kSGVhZGVyKE1lc3NhZ2UgJmFNZXNzYWdlLCBIZWFkZXI6OkNvbW1hbmQgYUNvbW1hbmQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFNvdXJjZSBBZGRyZXNzIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgU291cmNlIEFkZHJlc3MgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgU291cmNlIEFkZHJlc3MgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRTb3VyY2VBZGRyZXNzKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBNb2RlIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgICAgIFRoZSBEZXZpY2UgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBNb2RlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIE1vZGUgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRNb2RlKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90IGFNb2RlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBUaW1lb3V0IFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFRpbWVvdXQgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgVGltZW91dCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFRpbWVvdXQoTWVzc2FnZSAmYU1lc3NhZ2UsIHVpbnQzMl90IGFUaW1lb3V0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYSBDaGFsbGVuZ2UgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFsbGVuZ2UgICAgICAgIEEgcG9pbnRlciB0byB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFsbGVuZ2VMZW5ndGggIFRoZSBsZW5ndGggb2YgdGhlIENoYWxsZW5nZSB2YWx1ZSBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBDaGFsbGVuZ2UgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgQ2hhbGxlbmdlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kQ2hhbGxlbmdlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphQ2hhbGxlbmdlLCB1aW50OF90IGFDaGFsbGVuZ2VMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFJlc3BvbnNlIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gIGFSZXNwb25zZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBSZXNwb25zZSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1baW5dICBhUmVzcG9uc2VMZW5ndGggIFRoZSBsZW5ndGggb2YgdGhlIFJlc3BvbnNlIHZhbHVlIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFJlc3BvbnNlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFJlc3BvbnNlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kUmVzcG9uc2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IHVpbnQ4X3QgKmFSZXNwb25zZSwgdWludDhfdCBhUmVzcG9uc2VMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIExpbmsgRnJhbWUgQ291bnRlciBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIExpbmsgRnJhbWUgQ291bnRlciBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBMaW5rIEZyYW1lIENvdW50ZXIgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRMaW5rRnJhbWVDb3VudGVyKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYW4gTUxFIEZyYW1lIENvdW50ZXIgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBGcmFtZSBDb3VudGVyIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIE1MRSBGcmFtZSBDb3VudGVyIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTWxlRnJhbWVDb3VudGVyKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYW4gQWRkcmVzczE2IFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgQWRkcmVzczE2IFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIEFkZHJlc3MxNiBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZEFkZHJlc3MxNihNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgTmV0d29yayBEYXRhIFRMViB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhU3RhYmxlT25seSAgVFJVRSB0byBhcHBlbmQgc3RhYmxlIGRhdGEsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBOZXR3b3JrIERhdGEgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgTmV0d29yayBEYXRhIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTmV0d29ya0RhdGEoTWVzc2FnZSAmYU1lc3NhZ2UsIGJvb2wgYVN0YWJsZU9ubHkpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFRMViBSZXF1ZXN0IFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbGlzdCBvZiBUTFYgdHlwZXMuCisgICAgICogQHBhcmFtW2luXSAgYVRsdnNMZW5ndGggIFRoZSBudW1iZXIgb2YgVExWIHR5cGVzIGluIEBwIGFUbHZzCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgVExWIFJlcXVlc3QgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgVExWIFJlcXVlc3QgVExWLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBcHBlbmRUbHZSZXF1ZXN0KE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgTGVhZGVyIERhdGEgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBMZWFkZXIgRGF0YSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBMZWFkZXIgRGF0YSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZExlYWRlckRhdGEoTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFNjYW4gTWFzayBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhU2Nhbk1hc2sgIFRoZSBTY2FuIE1hc2sgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgU2NhbiBNYXNrIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFNjYW4gTWFzayBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFNjYW5NYXNrKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50OF90IGFTY2FuTWFzayk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgU3RhdHVzIFRMViB0byBhIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYVN0YXR1cyAgIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhcHBlbmRlZCB0aGUgU3RhdHVzIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIFN0YXR1cyBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFN0YXR1cyhNZXNzYWdlICZhTWVzc2FnZSwgU3RhdHVzVGx2OjpTdGF0dXMgYVN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgTGluayBNYXJnaW4gVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTGlua01hcmdpbiAgVGhlIExpbmsgTWFyZ2luIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIExpbmsgTWFyZ2luIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIExpbmsgTWFyZ2luIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kTGlua01hcmdpbihNZXNzYWdlICZhTWVzc2FnZSwgdWludDhfdCBhTGlua01hcmdpbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgVmVyc2lvbiBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIFZlcnNpb24gVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgVmVyc2lvbiBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFZlcnNpb24oTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhbiBBZGRyZXNzIFJlZ2lzdHJhdGlvbiBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIEFkZHJlc3MgUmVnaXN0cmF0aW9uIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIEFkZHJlc3MgUmVnaXN0cmF0aW9uIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kQWRkcmVzc1JlZ2lzdHJhdGlvbihNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgQWN0aXZlIFRpbWVzdGFtcCBUTFYgdG8gYSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYXBwZW5kZWQgdGhlIEFjdGl2ZSBUaW1lc3RhbXAgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlcnMgYXZhaWxhYmxlIHRvIGFwcGVuZCB0aGUgQWN0aXZlIFRpbWVzdGFtcCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZEFjdGl2ZVRpbWVzdGFtcChNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIGEgUGVuZGluZyBUaW1lc3RhbXAgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBQZW5kaW5nIFRpbWVzdGFtcCBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyBhdmFpbGFibGUgdG8gYXBwZW5kIHRoZSBQZW5kaW5nIFRpbWVzdGFtcCBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFwcGVuZFBlbmRpbmdUaW1lc3RhbXAoTWVzc2FnZSAmYU1lc3NhZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYXBwZW5kcyBhIFRocmVhZCBEaXNjb3ZlcnkgVExWIHRvIGEgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFwcGVuZGVkIHRoZSBUaHJlYWQgRGlzY292ZXJ5IFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIGF2YWlsYWJsZSB0byBhcHBlbmQgdGhlIEFkZHJlc3MgUmVnaXN0cmF0aW9uIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQXBwZW5kRGlzY292ZXJ5KE1lc3NhZ2UgJmFNZXNzYWdlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgZGVzdGluYXRpb24gaXMgcmVhY2hhYmxlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc2hTb3VyY2UgIFRoZSBSTE9DMTYgb2YgdGhlIHNvdXJjZS4KKyAgICAgKiBAcGFyYW1baW5dICBhTWVzaERlc3QgICAgVGhlIFJMT0MxNiBvZiB0aGUgZGVzdGluYXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUlwNkhlYWRlciAgIFRoZSBJUHY2IGhlYWRlciBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgVGhlIGRlc3RpbmF0aW9uIGlzIHJlYWNoYWJsZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0RST1AgIFRoZSBkZXN0aW5hdGlvbiBpcyBub3QgcmVhY2hhYmxlIGFuZCB0aGUgbWVzc2FnZSBzaG91bGQgYmUgZHJvcHBlZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQ2hlY2tSZWFjaGFiaWxpdHkodWludDE2X3QgYU1lc2hTb3VyY2UsIHVpbnQxNl90IGFNZXNoRGVzdCwgSXA2OjpIZWFkZXIgJmFJcDZIZWFkZXIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcihjb25zdCBNYWM6OkFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIE1BQyBzaG9ydCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoTWFjOjpTaG9ydEFkZHJlc3MgYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byB0aGUgTUFDIGV4dGVuZGVkIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIG5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIHsgT1RfVU5VU0VEX1ZBUklBQkxFKGFBZGRyZXNzKTsgcmV0dXJuIE5VTEw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgaG9wIHRvd2FyZHMgYW4gUkxPQzE2IGRlc3RpbmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBUaGUgUkxPQzE2IG9mIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgUkxPQzE2IG9mIHRoZSBuZXh0IGhvcCBpZiBhIHJvdXRlIGlzIGtub3duLCBrSW52YWxpZFJsb2MxNiBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBNYWM6OlNob3J0QWRkcmVzcyBHZXROZXh0SG9wKHVpbnQxNl90IGFEZXN0aW5hdGlvbikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYW4gTUxFIERhdGEgUmVxdWVzdCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgIEEgcG9pbnRlciB0byByZXF1ZXN0ZWQgVExWIHR5cGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHZzTGVuZ3RoICAgVGhlIG51bWJlciBvZiBUTFYgdHlwZXMgaW4gQHAgYVRsdnMuCisgICAgICogQHBhcmFtW2luXSAgYURlbGF5ICAgICAgICBEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBEYXRhIFJlcXVlc3QgbWVzc2FnZSBpcyBzZW50LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZ2VuZXJhdGVkIGFuIE1MRSBEYXRhIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBNTEUgRGF0YSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmREYXRhUmVxdWVzdChjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYURlbGF5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGx2cyAgICAgICAgIEEgcG9pbnRlciB0byByZXF1ZXN0ZWQgVExWIHR5cGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFOdW1UbHZzICAgICAgVGhlIG51bWJlciBvZiBUTFYgdHlwZXMgaW4gQHAgYVRsdnMuCisgICAgICogQHBhcmFtW2luXSAgYUNoYWxsZW5nZSAgICBUaGUgQ2hhbGxlbmdlIFRMViBmb3IgdGhlIHJlc3BvbnNlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZ2VuZXJhdGVkIGFuIE1MRSBDaGlsZCBVcGRhdGUgUmVzcG9uc2UgbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBNTEUgQ2hpbGQgVXBkYXRlIFJlc3BvbnNlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRDaGlsZFVwZGF0ZVJlc3BvbnNlKGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFOdW1UbHZzLCBjb25zdCBDaGFsbGVuZ2VUbHYgJmFDaGFsbGVuZ2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3VibWl0cyBhbiBNTEUgbWVzc2FnZSB0byB0aGUgVURQIHNvY2tldC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHN1Ym1pdHRlZCB0aGUgTUxFIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBmb3JtIHRoZSByZXN0IG9mIHRoZSBNTEUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZE1lc3NhZ2UoTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiBhc3NpZ25lZCB0byB0aGUgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdG8gc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBSTE9DMTYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFJsb2MxNih1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERldmljZSBTdGF0ZSB0byBEZXRhY2hlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgRGV2aWNlIFN0YXRlIHRvIERldGFjaGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRTdGF0ZURldGFjaGVkKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGV2aWNlIFN0YXRlIHRvIENoaWxkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBEZXZpY2UgU3RhdGUgdG8gQ2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldFN0YXRlQ2hpbGQodWludDE2X3QgYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZWFkZXIncyBQYXJ0aXRpb24gSUQsIFdlaWdodGluZywgYW5kIFJvdXRlciBJRCB2YWx1ZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFydGl0aW9uSWQgICAgIFRoZSBMZWFkZXIncyBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYVdlaWdodGluZyAgICAgICBUaGUgTGVhZGVyJ3MgV2VpZ2h0aW5nIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZWFkZXJSb3V0ZXJJZCAgVGhlIExlYWRlcidzIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVhZGVyRGF0YSh1aW50MzJfdCBhUGFydGl0aW9uSWQsIHVpbnQ4X3QgYVdlaWdodGluZywgdWludDhfdCBhTGVhZGVyUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIG1lc3NhZ2UgdG8gdGhlIG1lc3NhZ2UgcXVldWUuIFRoZSBxdWV1ZWQgbWVzc2FnZSB3aWxsIGJlIHRyYW5zbWl0dGVkIGFmdGVyIGdpdmVuIGRlbGF5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1lc3NhZ2UgICAgICBUaGUgbWVzc2FnZSB0byB0cmFuc21pdCBhZnRlciBnaXZlbiBkZWxheS4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdGluYXRpb24gIFRoZSBJUHY2IGFkZHJlc3Mgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVsYXkgICAgICAgIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRyYW5zbWlzc2lvbiBvZiB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHF1ZXVlZCB0aGUgbWVzc2FnZSB0byB0cmFuc21pdCBhZnRlciB0aGUgZGVsYXkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBxdWV1ZSB0aGUgbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkRGVsYXllZFJlc3BvbnNlKE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgdWludDE2X3QgYURlbGF5KTsKKworICAgIExlYWRlckRhdGFUbHYgbUxlYWRlckRhdGE7ICAgICAgICAgICAgICAvLy88IExhc3QgcmVjZWl2ZWQgTGVhZGVyIERhdGEgVExWLgorICAgIGJvb2wgbVJldHJpZXZlTmV3TmV0d29ya0RhdGE7ICAgICAgICAgICAvLy88IEluZGljYXRpbmcgbmV3IE5ldHdvcmsgRGF0YSBpcyBuZWVkZWQgaWYgc2V0LgorCisgICAgb3REZXZpY2VSb2xlIG1Sb2xlOyAgICAgICAgICAgICAgICAgICAgIC8vLzwgQ3VycmVudCBUaHJlYWQgcm9sZS4KKyAgICBSb3V0ZXIgbVBhcmVudDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBQYXJlbnQgaW5mb3JtYXRpb24uCisgICAgdWludDhfdCBtRGV2aWNlTW9kZTsgICAgICAgICAgICAgICAgICAgIC8vLzwgRGV2aWNlIG1vZGUgc2V0dGluZy4KKworICAgIGJvb2wgaXNBc3NpZ25MaW5rUXVhbGl0eTsgICAgLy8vPCBJbmRpY2F0aW5nIGFuIGFzc2lnbmVkIGxpbmsgcXVhbGl0eSBpcyB1c2VkIG9uIHRoZSBsaW5rCisgICAgdWludDhfdCBtQXNzaWduTGlua1F1YWxpdHk7ICAvLy88IFRoZSBhc3NpZ25lZCBsaW5rIHF1YWxpdHkgdmFsdWUKKyAgICB1aW50OF90IG1Bc3NpZ25MaW5rTWFyZ2luOyAgIC8vLzwgVGhlIG1heGltdW0gbGluayBtYXJnaW4gY29ycmVzcG9uZGluZyB0byBtQXNzaWduTGlua1F1YWxpdHkKKyAgICBNYWM6OkV4dEFkZHJlc3MgbUFkZHI2NDsgICAgIC8vLzwgQSBnaXZlbiBJRUVFIDgwMi4xNS40IEV4dGVuZGVkIEFkZHJlc3MKKworICAgIC8qKgorICAgICAqIFN0YXRlcyB3aGVuIHNlYXJjaGluZyBmb3IgYSBwYXJlbnQuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFBhcmVudFJlcXVlc3RTdGF0ZQorICAgIHsKKyAgICAgICAga1BhcmVudElkbGUsICAgICAgICAgICAvLy88IE5vdCBjdXJyZW50bHkgc2VhcmNoaW5nIGZvciBhIHBhcmVudC4KKyAgICAgICAga1BhcmVudFN5bmNocm9uaXplLCAgICAvLy88IExvb2tpbmcgdG8gc3luY2hyb25pemUgd2l0aCBhIHBhcmVudCAoYWZ0ZXIgcmVzZXQpLgorICAgICAgICBrUGFyZW50UmVxdWVzdFN0YXJ0LCAgIC8vLzwgU3RhcnRpbmcgdG8gbG9vayBmb3IgYSBwYXJlbnQuCisgICAgICAgIGtQYXJlbnRSZXF1ZXN0Um91dGVyLCAgLy8vPCBTZWFyY2hpbmcgZm9yIGEgUm91dGVyIHRvIGF0dGFjaCB0by4KKyAgICAgICAga1BhcmVudFJlcXVlc3RDaGlsZCwgICAvLy88IFNlYXJjaGluZyBmb3IgUm91dGVycyBvciBSRUVEcyB0byBhdHRhY2ggdG8uCisgICAgICAgIGtDaGlsZElkUmVxdWVzdCwgICAgICAgLy8vPCBTZW5kaW5nIGEgQ2hpbGQgSUQgUmVxdWVzdCBtZXNzYWdlLgorICAgIH07CisgICAgUGFyZW50UmVxdWVzdFN0YXRlIG1QYXJlbnRSZXF1ZXN0U3RhdGU7ICAvLy88IFRoZSBwYXJlbnQgcmVxdWVzdCBzdGF0ZS4KKworICAgIC8qKgorICAgICAqIFN0YXRlcyB3aGVuIHJlYXR0YWNoaW5nIG5ldHdvcmsgdXNpbmcgc3RvcmVkIGRhdGFzZXQKKyAgICAgKgorICAgICAqLworICAgIGVudW0gUmVhdHRhY2hTdGF0ZQorICAgIHsKKyAgICAgICAga1JlYXR0YWNoU3RvcCAgICAgICA9IDAsICAgLy8vPCBSZWF0dGFjaCBwcm9jZXNzIGlzIGRpc2FibGVkIG9yIGZpbmlzaGVkCisgICAgICAgIGtSZWF0dGFjaFN0YXJ0ICAgICAgPSAxLCAgIC8vLzwgU3RhcnQgcmVhdHRhY2ggcHJvY2VzcworICAgICAgICBrUmVhdHRhY2hBY3RpdmUgICAgID0gMiwgICAvLy88IFJlYXR0YWNoIHVzaW5nIHN0b3JlZCBBY3RpdmUgRGF0YXNldAorICAgICAgICBrUmVhdHRhY2hQZW5kaW5nICAgID0gMywgICAvLy88IFJlYXR0YWNoIHVzaW5nIHN0b3JlZCBQZW5kaW5nIERhdGFzZXQKKyAgICB9OworICAgIFJlYXR0YWNoU3RhdGUgbVJlYXR0YWNoU3RhdGU7CisKKyAgICBUaW1lciBtUGFyZW50UmVxdWVzdFRpbWVyOyAgICAvLy88IFRoZSB0aW1lciBmb3IgZHJpdmluZyB0aGUgUGFyZW50IFJlcXVlc3QgcHJvY2Vzcy4KKyAgICBUaW1lciBtRGVsYXllZFJlc3BvbnNlVGltZXI7ICAvLy88IFRoZSB0aW1lciB0byBkZWxheSBNTEUgcmVzcG9uc2VzLgorICAgIHVpbnQ4X3QgbUxhc3RQYXJ0aXRpb25Sb3V0ZXJJZFNlcXVlbmNlOworICAgIHVpbnQzMl90IG1MYXN0UGFydGl0aW9uSWQ7CisKK3Byb3RlY3RlZDoKKyAgICB1aW50OF90IG1QYXJlbnRMZWFkZXJDb3N0OworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNbGVNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlOjprUHJpb3JpdHlIaWdoLAorICAgIH07CisKKyAgICB2b2lkIEdlbmVyYXRlTm9uY2UoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhTWFjQWRkciwgdWludDMyX3QgYUZyYW1lQ291bnRlciwgdWludDhfdCBhU2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYU5vbmNlKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpOworICAgIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVQYXJlbnRSZXF1ZXN0VGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVQYXJlbnRSZXF1ZXN0VGltZXIodm9pZCk7CisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGVsYXllZFJlc3BvbnNlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVEZWxheWVkUmVzcG9uc2VUaW1lcih2b2lkKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVVZHBSZWNlaXZlKHZvaWQgKmFDb250ZXh0LCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZShNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KFRhc2tsZXQgJmFUYXNrbGV0KTsKKyAgICB2b2lkIEhhbmRsZVNlbmRDaGlsZFVwZGF0ZVJlcXVlc3Qodm9pZCk7CisKKyAgICBvdEVycm9yIEhhbmRsZUFkdmVydGlzZW1lbnQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZElkUmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZFVwZGF0ZVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlRGF0YVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlUGFyZW50UmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSk7CisgICAgb3RFcnJvciBIYW5kbGVBbm5vdW5jZShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZURpc2NvdmVyeVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlTGVhZGVyRGF0YShjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIG90RXJyb3IgU2VuZFBhcmVudFJlcXVlc3Qodm9pZCk7CisgICAgb3RFcnJvciBTZW5kQ2hpbGRJZFJlcXVlc3Qodm9pZCk7CisgICAgdm9pZCBTZW5kT3JwaGFuQW5ub3VuY2Uodm9pZCk7CisKKyAgICBib29sIElzQmV0dGVyUGFyZW50KHVpbnQxNl90IGFSbG9jMTYsIHVpbnQ4X3QgYUxpbmtRdWFsaXR5LCBDb25uZWN0aXZpdHlUbHYgJmFDb25uZWN0aXZpdHlUbHYpOworICAgIHZvaWQgUmVzZXRQYXJlbnRDYW5kaWRhdGUodm9pZCk7CisKKyAgICBzdGF0aWMgTWxlICZHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICBNZXNzYWdlUXVldWUgbURlbGF5ZWRSZXNwb25zZXM7CisKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgbUNoYWxsZW5nZVtDaGFsbGVuZ2VUbHY6OmtNYXhTaXplXTsKKyAgICAgICAgdWludDhfdCBtQ2hhbGxlbmdlTGVuZ3RoOworICAgIH0gbUNoaWxkSWRSZXF1ZXN0OworCisgICAgc3RydWN0CisgICAgeworICAgICAgICB1aW50OF90IG1DaGFsbGVuZ2VbQ2hhbGxlbmdlVGx2OjprTWF4U2l6ZV07CisgICAgfSBtUGFyZW50UmVxdWVzdDsKKworICAgIEF0dGFjaE1vZGUgbVBhcmVudFJlcXVlc3RNb2RlOworICAgIGludDhfdCBtUGFyZW50UHJpb3JpdHk7CisgICAgdWludDhfdCBtUGFyZW50TGlua1F1YWxpdHkzOworICAgIHVpbnQ4X3QgbVBhcmVudExpbmtRdWFsaXR5MjsKKyAgICB1aW50OF90IG1QYXJlbnRMaW5rUXVhbGl0eTE7CisgICAgdWludDhfdCBtQ2hpbGRVcGRhdGVBdHRlbXB0czsKKyAgICBMZWFkZXJEYXRhVGx2IG1QYXJlbnRMZWFkZXJEYXRhOworICAgIGJvb2wgbVBhcmVudElzU2luZ2xldG9uOworCisgICAgUm91dGVyIG1QYXJlbnRDYW5kaWRhdGU7CisKKyAgICBJcDY6OlVkcFNvY2tldCBtU29ja2V0OworICAgIHVpbnQzMl90IG1UaW1lb3V0OworCisgICAgVGFza2xldCBtU2VuZENoaWxkVXBkYXRlUmVxdWVzdDsKKworICAgIERpc2NvdmVySGFuZGxlciBtRGlzY292ZXJIYW5kbGVyOworICAgIHZvaWQgKm1EaXNjb3ZlckNvbnRleHQ7CisgICAgYm9vbCBtSXNEaXNjb3ZlckluUHJvZ3Jlc3M7CisgICAgYm9vbCBtRW5hYmxlRXVpNjRGaWx0ZXJpbmc7CisKKyAgICB1aW50OF90IG1Bbm5vdW5jZUNoYW5uZWw7CisgICAgdWludDhfdCBtUHJldmlvdXNDaGFubmVsOworICAgIHVpbnQxNl90IG1QcmV2aW91c1BhbklkOworCisgICAgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzIG1MZWFkZXJBbG9jOworCisgICAgSXA2OjpOZXRpZlVuaWNhc3RBZGRyZXNzIG1MaW5rTG9jYWw2NDsKKyAgICBJcDY6Ok5ldGlmVW5pY2FzdEFkZHJlc3MgbU1lc2hMb2NhbDY0OworICAgIElwNjo6TmV0aWZVbmljYXN0QWRkcmVzcyBtTWVzaExvY2FsMTY7CisgICAgSXA2OjpOZXRpZk11bHRpY2FzdEFkZHJlc3MgbUxpbmtMb2NhbEFsbFRocmVhZE5vZGVzOworICAgIElwNjo6TmV0aWZNdWx0aWNhc3RBZGRyZXNzIG1SZWFsbUxvY2FsQWxsVGhyZWFkTm9kZXM7CisKKyAgICBJcDY6Ok5ldGlmQ2FsbGJhY2sgbU5ldGlmQ2FsbGJhY2s7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWxlCisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUxFX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9tbGVfY29uc3RhbnRzLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9tbGVfY29uc3RhbnRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWJhNmY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL21sZV9jb25zdGFudHMuaHBwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIFRocmVhZCBDaGlsZCwgUm91dGVyLCBhbmQgTGVhZGVyIHJvbGVzLgorICovCisKKyNpZm5kZWYgTUxFX0NPTlNUQU5UU19IUFBfCisjZGVmaW5lIE1MRV9DT05TVEFOVFNfSFBQXworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1sZSB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tbGUtY29yZQorICoKKyAqLworCitlbnVtCit7CisgICAga01heENoaWxkcmVuICAgICAgICAgICAgICAgID0gT1BFTlRIUkVBRF9DT05GSUdfTUFYX0NISUxEUkVOLAorICAgIGtNYXhDaGlsZEtlZXBBbGl2ZUF0dGVtcHRzICA9IDQsICAgIC8vLzwgTWF4aW11bSBrZWVwIGFsaXZlIGF0dGVtcHRzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYXR0YWNoIHRvIGEgbmV3IFBhcmVudAorICAgIGtGYWlsZWRDaGlsZFRyYW5zbWlzc2lvbnMgICA9IDQsICAgIC8vLzwgRkFJTEVEX0NISUxEX1RSQU5TTUlTU0lPTlMKK307CisKKy8qKgorICogTUxFIFByb3RvY29sIENvbnN0YW50cworICoKKyAqLworZW51bQoreworICAgIGtWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAvLy88IE1MRSBWZXJzaW9uCisgICAga1VkcFBvcnQgICAgICAgICAgICAgICAgICAgICAgID0gMTk3ODgsIC8vLzwgTUxFIFVEUCBQb3J0CisgICAga1BhcmVudFJlcXVlc3RSb3V0ZXJUaW1lb3V0ICAgID0gNzUwLCAgIC8vLzwgUm91dGVyIFJlcXVlc3QgdGltZW91dAorICAgIGtQYXJlbnRSZXF1ZXN0Q2hpbGRUaW1lb3V0ICAgICA9IDEyNTAsICAvLy88IEVuZCBEZXZpY2UgUmVxdWVzdCB0aW1lb3V0CisgICAga1BhcmVudFJlc3BvbnNlTWF4RGVsYXlSb3V0ZXJzID0gNTAwLCAgIC8vLzwgTWF4aW11bSBkZWxheSBmb3IgcmVzcG9uc2UgZm9yIFBhcmVudCBSZXF1ZXN0IHNlbnQgdG8gcm91dGVycyBvbmx5CisgICAga1BhcmVudFJlc3BvbnNlTWF4RGVsYXlBbGwgICAgID0gMTAwMCwgIC8vLzwgTWF4aW11bSBkZWxheSBmb3IgcmVzcG9uc2UgZm9yIFBhcmVudCBSZXF1ZXN0IHNlbnQgdG8gYWxsIGRldmljZXMKKyAgICBrVW5pY2FzdFJldHJhbnNtaXNzaW9uRGVsYXkgICAgPSAxMDAwLCAgLy8vPCBCYXNlIGRlbGF5IGJlZm9yZSByZXRyYW5zbWl0dGluZyBhbiBNTEUgdW5pY2FzdC4KKyAgICBrTWF4UmVzcG9uc2VEZWxheSAgICAgICAgICAgICAgPSAxMDAwLCAgLy8vPCBNYXhpbXVtIGRlbGF5IGJlZm9yZSByZXNwb25kaW5nIHRvIGEgbXVsdGljYXN0IHJlcXVlc3QKKyAgICBrTWF4Q2hpbGRJZFJlcXVlc3RUaW1lb3V0ICAgICAgPSA1MDAwLCAgLy8vPCBNYXhpbXVtIGRlbGF5IGZvciByZWNlaXZpbmcgYSBDaGlsZCBJRCBSZXF1ZXN0CisgICAga01heENoaWxkVXBkYXRlUmVzcG9uc2VUaW1lb3V0ID0gMjAwMCwgIC8vLzwgTWF4aW11bSBkZWxheSBmb3IgcmVjZWl2aW5nIGEgQ2hpbGQgVXBkYXRlIFJlc3BvbnNlCisgICAga01pblRpbWVvdXQgICAgICAgICAgICAgICAgICAgID0gKCgoa01heENoaWxkS2VlcEFsaXZlQXR0ZW1wdHMgKyAxKSAqIGtVbmljYXN0UmV0cmFuc21pc3Npb25EZWxheSkgLyAxMDAwKSwgIC8vLzwgTWluaW11bSB0aW1lb3V0KHMpCit9OworCitlbnVtCit7CisgICAga01pbkNoaWxkSWQgICAgICAgICAgICAgICAgID0gMSwgICAgIC8vLzwgTWluaW11bSBDaGlsZCBJRAorICAgIGtNYXhDaGlsZElkICAgICAgICAgICAgICAgICA9IDUxMSwgICAvLy88IE1heGltdW0gQ2hpbGQgSUQKKyAgICBrUm91dGVySWRPZmZzZXQgICAgICAgICAgICAgPSAxMCwgICAgLy8vPCBCaXQgb2Zmc2V0IG9mIFJvdXRlciBJRCBpbiBSTE9DMTYKKyAgICBrUmxvY1ByZWZpeExlbmd0aCAgICAgICAgICAgPSAxNCwgICAgLy8vPCBQcmVmaXggbGVuZ3RoIG9mIFJMT0MgaW4gYnl0ZXMKK307CisKKy8qKgorICogUm91dGluZyBQcm90b2NvbCBDb25zdGFudHMKKyAqCisgKi8KK2VudW0KK3sKKyAgICBrQWR2ZXJ0aXNlSW50ZXJ2YWxNaW4gICAgICAgPSAxLCAgICAgICAgICAgICAgICAvLy88IEFEVkVSVElTRU1FTlRfSV9NSU4gKHNlY29uZHMpCisgICAga0FkdmVydGlzZUludGVydmFsTWF4ICAgICAgID0gMzIsICAgICAgICAgICAgICAgLy8vPCBBRFZFUlRJU0VNRU5UX0lfTUFYIChzZWNvbmRzKQorICAgIGtGYWlsZWRSb3V0ZXJUcmFuc21pc3Npb25zICA9IDQsICAgICAgICAgICAgICAgIC8vLzwgRkFJTEVEX1JPVVRFUl9UUkFOU01JU1NJT05TCisgICAga1JvdXRlcklkUmV1c2VEZWxheSAgICAgICAgID0gMTAwLCAgICAgICAgICAgICAgLy8vPCBJRF9SRVVTRV9ERUxBWSAoc2Vjb25kcykKKyAgICBrUm91dGVySWRTZXF1ZW5jZVBlcmlvZCAgICAgPSAxMCwgICAgICAgICAgICAgICAvLy88IElEX1NFUVVFTkNFX1BFUklPRCAoc2Vjb25kcykKKyAgICBrTWF4TmVpZ2hib3JBZ2UgICAgICAgICAgICAgPSAxMDAsICAgICAgICAgICAgICAvLy88IE1BWF9ORUlHSEJPUl9BR0UgKHNlY29uZHMpCisgICAga01heFJvdXRlQ29zdCAgICAgICAgICAgICAgID0gMTYsICAgICAgICAgICAgICAgLy8vPCBNQVhfUk9VVEVfQ09TVAorICAgIGtNYXhSb3V0ZXJJZCAgICAgICAgICAgICAgICA9IDYyLCAgICAgICAgICAgICAgIC8vLzwgTUFYX1JPVVRFUl9JRAorICAgIGtJbnZhbGlkUm91dGVySWQgICAgICAgICAgICA9IGtNYXhSb3V0ZXJJZCArIDEsIC8vLzwgVmFsdWUgaW5kaWNhdGluZyBpbmNvcnJlY3QgUm91dGVyIElkCisgICAga01heFJvdXRlcnMgICAgICAgICAgICAgICAgID0gMzIsICAgICAgICAgICAgICAgLy8vPCBNQVhfUk9VVEVSUworICAgIGtNaW5Eb3duZ3JhZGVOZWlnaGJvcnMgICAgICA9IDcsICAgICAgICAgICAgICAgIC8vLzwgTUlOX0RPV05HUkFERV9ORUlHSEJPUlMKKyAgICBrTmV0d29ya0lkVGltZW91dCAgICAgICAgICAgPSAxMjAsICAgICAgICAgICAgICAvLy88IE5FVFdPUktfSURfVElNRU9VVCAoc2Vjb25kcykKKyAgICBrUGFyZW50Um91dGVUb0xlYWRlclRpbWVvdXQgPSAyMCwgICAgICAgICAgICAgICAvLy88IFBBUkVOVF9ST1VURV9UT19MRUFERVJfVElNRU9VVCAoc2Vjb25kcykKKyAgICBrUm91dGVyU2VsZWN0aW9uSml0dGVyICAgICAgPSAxMjAsICAgICAgICAgICAgICAvLy88IFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIChzZWNvbmRzKQorICAgIGtSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQgICA9IDIzLCAgICAgICAgICAgICAgIC8vLzwgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgKHJvdXRlcnMpCisgICAga1JvdXRlclVwZ3JhZGVUaHJlc2hvbGQgICAgID0gMTYsICAgICAgICAgICAgICAgLy8vPCBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgKHJvdXRlcnMpCisgICAga01heExlYWRlclRvUm91dGVyVGltZW91dCAgID0gOTAsICAgICAgICAgICAgICAgLy8vPCBJTkZJTklURV9DT1NUX1RJTUVPVVQgKHNlY29uZHMpCisgICAga1JlZWRBZHZlcnRpc2VJbnRlcnZhbCAgICAgID0gNTcwLCAgICAgICAgICAgICAgLy8vPCBSRUVEX0FEVkVSVElTRU1FTlRfSU5URVJWQUwgKHNlY29uZHMpCisgICAga1JlZWRBZHZlcnRpc2VKaXR0ZXIgICAgICAgID0gNjAsICAgICAgICAgICAgICAgLy8vPCBSRUVEX0FEVkVSVElTRU1FTlRfSklUVEVSIChzZWNvbmRzKQorICAgIGtMZWFkZXJXZWlnaHQgICAgICAgICAgICAgICA9IDY0LCAgICAgICAgICAgICAgIC8vLzwgRGVmYXVsdCBsZWFkZXIgd2VpZ2h0IGZvciB0aGUgVGhyZWFkIE5ldHdvcmsgUGFydGl0aW9uCisgICAga01sZUVuZERldmljZVRpbWVvdXQgICAgICAgID0gT1BFTlRIUkVBRF9DT05GSUdfREVGQVVMVF9DSElMRF9USU1FT1VULCAgLy8vPCBNTEVfRU5EX0RFVklDRV9USU1FT1VUIChzZWNvbmRzKQorfTsKKworLyoqCisgKiBQYXJlbnQgUHJpb3JpdHkgdmFsdWVzCisgKgorICovCitlbnVtCit7CisgICAga1BhcmVudFByaW9yaXR5SGlnaCAgICAgICAgPSAxLCAgICAvLyBQYXJlbnQgUHJpb3JpdHkgSGlnaAorICAgIGtQYXJlbnRQcmlvcml0eU1lZGl1bSAgICAgID0gMCwgICAgLy8gUGFyZW50IFByaW9yaXR5IE1lZGl1bSAoZGVmYXVsdCkKKyAgICBrUGFyZW50UHJpb3JpdHlMb3cgICAgICAgICA9IC0xLCAgIC8vIFBhcmVudCBQcmlvcml0eSBMb3cKKyAgICBrUGFyZW50UHJpb3JpdHlVbnNwZWNpZmllZCA9IC0yLCAgIC8vIFBhcmVudCBQcmlvcml0eSBVbnNwZWNpZmllZAorfTsKKworZW51bQoreworICAgIGtMaW5rUXVhbGl0eTNMaW5rQ29zdCAgICAgICA9IDEsICAgIC8vLzwgTGluayBDb3N0IGZvciBMaW5rIFF1YWxpdHkgMworICAgIGtMaW5rUXVhbGl0eTJMaW5rQ29zdCAgICAgICA9IDIsICAgIC8vLzwgTGluayBDb3N0IGZvciBMaW5rIFF1YWxpdHkgMgorICAgIGtMaW5rUXVhbGl0eTFMaW5rQ29zdCAgICAgICA9IDQsICAgIC8vLzwgTGluayBDb3N0IGZvciBMaW5rIFF1YWxpdHkgMQorICAgIGtMaW5rUXVhbGl0eTBMaW5rQ29zdCAgICAgICA9IDE2LCAgIC8vLzwgTGluayBDb3N0IGZvciBMaW5rIFF1YWxpdHkgMAorfTsKKworLy8gYWRkIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RpbmcKK2VudW0KK3sKKyAgICBrTWluQXNzaWduZWRMaW5rTWFyZ2luMyAgICAgPSAweDE1LCAvLy88IG1pbmltYWwgbGluayBtYXJnaW4gZm9yIExpbmsgUXVhbGl0eSAzICgyMSAtIDI1NSkKKyAgICBrTWluQXNzaWduZWRMaW5rTWFyZ2luMiAgICAgPSAweDBiLCAvLy88IG1pbmltYWwgbGluayBtYXJnaW4gZm9yIExpbmsgUXVhbGl0eSAyICgxMSAtIDIwKQorICAgIGtNaW5Bc3NpZ25lZExpbmtNYXJnaW4xICAgICA9IDB4MDMsIC8vLzwgbWluaW1hbCBsaW5rIG1hcmdpbiBmb3IgTGluayBRdWFsaXR5IDEgKDMgLSA5KQorICAgIGtNaW5Bc3NpZ25lZExpbmtNYXJnaW4wICAgICA9IDB4MDAsIC8vLzwgbWluaW1hbCBsaW5rIG1hcmdpbiBmb3IgTGluayBRdWFsaXR5IDAgKDAgLSAyKQorfTsKKworLyoqCisgKiBNdWx0aWNhc3QgRm9yd2FyZGluZyBDb25zdGFudHMKKyAqCisgKi8KK2VudW0KK3sKKyAgICBrTXBsQ2hpbGREYXRhTWVzc2FnZVRpbWVyRXhwaXJhdGlvbnMgID0gMCwgLy8vPCBOdW1iZXIgb2YgTVBMIHJldHJhbnNtaXNzaW9ucyBmb3IgQ2hpbGRyZW4uCisgICAga01wbFJvdXRlckRhdGFNZXNzYWdlVGltZXJFeHBpcmF0aW9ucyA9IDIsIC8vLzwgTnVtYmVyIG9mIE1QTCByZXRyYW5zbWlzc2lvbnMgZm9yIFJvdXRlcnMuCit9OworCit9ICAvLyBuYW1lc3BhY2UgTWxlCisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTUxFX0NPTlNUQU5UU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlci5jcHAgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NTE2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyLmNwcApAQCAtMCwwICsxLDQ3NTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBmb3IgdGhlIFRocmVhZCBSb3V0ZXIgYW5kIExlYWRlciByb2xlcy4KKyAqLworCisjaWYgT1BFTlRIUkVBRF9GVEQKKworI2RlZmluZSBXUFBfTkFNRSAibWxlX3JvdXRlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibWxlX3JvdXRlci5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vc2V0dGluZ3MuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vc2V0dGluZ3MuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm5ldC9pY21wNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE1sZSB7CisKK01sZVJvdXRlcjo6TWxlUm91dGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIE1sZShhVGhyZWFkTmV0aWYpLAorICAgIG1BZHZlcnRpc2VUaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmTWxlUm91dGVyOjpIYW5kbGVBZHZlcnRpc2VUaW1lciwgTlVMTCwgdGhpcyksCisgICAgbVN0YXRlVXBkYXRlVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJk1sZVJvdXRlcjo6SGFuZGxlU3RhdGVVcGRhdGVUaW1lciwgdGhpcyksCisgICAgbUFkZHJlc3NTb2xpY2l0KE9UX1VSSV9QQVRIX0FERFJFU1NfU09MSUNJVCwgJk1sZVJvdXRlcjo6SGFuZGxlQWRkcmVzc1NvbGljaXQsIHRoaXMpLAorICAgIG1BZGRyZXNzUmVsZWFzZShPVF9VUklfUEFUSF9BRERSRVNTX1JFTEVBU0UsICZNbGVSb3V0ZXI6OkhhbmRsZUFkZHJlc3NSZWxlYXNlLCB0aGlzKSwKKyAgICBtUm91dGVySWRTZXF1ZW5jZSgwKSwKKyAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkKDApLAorICAgIG1NYXhDaGlsZHJlbkFsbG93ZWQoa01heENoaWxkcmVuKSwKKyAgICBtQ2hhbGxlbmdlVGltZW91dCgwKSwKKyAgICBtTmV4dENoaWxkSWQoa01heENoaWxkSWQpLAorICAgIG1OZXR3b3JrSWRUaW1lb3V0KGtOZXR3b3JrSWRUaW1lb3V0KSwKKyAgICBtUm91dGVyVXBncmFkZVRocmVzaG9sZChrUm91dGVyVXBncmFkZVRocmVzaG9sZCksCisgICAgbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZChrUm91dGVyRG93bmdyYWRlVGhyZXNob2xkKSwKKyAgICBtTGVhZGVyV2VpZ2h0KGtMZWFkZXJXZWlnaHQpLAorICAgIG1GaXhlZExlYWRlclBhcnRpdGlvbklkKDApLAorICAgIG1Sb3V0ZXJSb2xlRW5hYmxlZCh0cnVlKSwKKyAgICBtSXNSb3V0ZXJSZXN0b3JpbmdDaGlsZHJlbihmYWxzZSksCisgICAgbVByZXZpb3VzUGFydGl0aW9uSWQoMCksCisgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlcihrUm91dGVyU2VsZWN0aW9uSml0dGVyKSwKKyAgICBtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dCgwKSwKKyAgICBtUGFyZW50UHJpb3JpdHkoa1BhcmVudFByaW9yaXR5VW5zcGVjaWZpZWQpCit7CisgICAgbURldmljZU1vZGUgfD0gTW9kZVRsdjo6a01vZGVGRkQgfCBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YTsKKworICAgIG1lbXNldChtQ2hpbGRyZW4sIDAsIHNpemVvZihtQ2hpbGRyZW4pKTsKKyAgICBtZW1zZXQobVJvdXRlcnMsIDAsIHNpemVvZihtUm91dGVycykpOworCisgICAgU2V0Um91dGVySWQoa0ludmFsaWRSb3V0ZXJJZCk7Cit9CisKK2Jvb2wgTWxlUm91dGVyOjpJc1JvdXRlclJvbGVFbmFibGVkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Sb3V0ZXJSb2xlRW5hYmxlZCAmJiAobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCk7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpTZXRSb3V0ZXJSb2xlRW5hYmxlZChib29sIGFFbmFibGVkKQoreworICAgIG1Sb3V0ZXJSb2xlRW5hYmxlZCA9IGFFbmFibGVkOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWFjKCkuU2V0QmVhY29uRW5hYmxlZChtUm91dGVyUm9sZUVuYWJsZWQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBpZiAoIW1Sb3V0ZXJSb2xlRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lRGV0YWNoZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkFsbG9jYXRlUm91dGVySWQodm9pZCkKK3sKKyAgICB1aW50OF90IHJ2YWwgPSBrSW52YWxpZFJvdXRlcklkOworCisgICAgLy8gY291bnQgYXZhaWxhYmxlIHJvdXRlciBpZHMKKyAgICB1aW50OF90IG51bUF2YWlsYWJsZSA9IDA7CisgICAgdWludDhfdCBudW1BbGxvY2F0ZWQgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQWxsb2NhdGVkKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobVJvdXRlcnNbaV0uSXNSZWNsYWltRGVsYXkoKSA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQXZhaWxhYmxlKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQobnVtQWxsb2NhdGVkIDwga01heFJvdXRlcnMgJiYgbnVtQXZhaWxhYmxlID4gMCwgcnZhbCA9IGtJbnZhbGlkUm91dGVySWQpOworCisgICAgLy8gY2hvb3NlIGF2YWlsYWJsZSByb3V0ZXIgaWQgYXQgcmFuZG9tCisgICAgdWludDhfdCBmcmVlQml0OworICAgIGZyZWVCaXQgPSBvdFBsYXRSYW5kb21HZXQoKSAlIG51bUF2YWlsYWJsZTsKKworICAgIC8vIGFsbG9jYXRlIHJvdXRlciBpZAorICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpIHx8IG1Sb3V0ZXJzW2ldLklzUmVjbGFpbURlbGF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyZWVCaXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9IEFsbG9jYXRlUm91dGVySWQoaSk7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlQml0LS07CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50OF90IE1sZVJvdXRlcjo6QWxsb2NhdGVSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkKK3sKKyAgICB1aW50OF90IHJ2YWwgPSBrSW52YWxpZFJvdXRlcklkOworICAgIFJvdXRlciAqcm91dGVyOworCisgICAgcm91dGVyID0gR2V0Um91dGVyKGFSb3V0ZXJJZCk7CisgICAgYXNzZXJ0KHJvdXRlciAhPSBOVUxMKTsKKworICAgIFZlcmlmeU9yRXhpdCghcm91dGVyLT5Jc0FsbG9jYXRlZCgpLCBydmFsID0ga0ludmFsaWRSb3V0ZXJJZCk7CisKKyAgICAvLyBpbml0IHJvdXRlciBzdGF0ZQorICAgIHJvdXRlci0+U2V0QWxsb2NhdGVkKHRydWUpOworICAgIHJvdXRlci0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgcm91dGVyLT5DbGVhckV4dEFkZHJlc3MoKTsKKworICAgIC8vIGJ1bXAgc2VxdWVuY2UgbnVtYmVyCisgICAgbVJvdXRlcklkU2VxdWVuY2UrKzsKKyAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkID0gVGltZXI6OkdldE5vdygpOworICAgIHJ2YWwgPSBhUm91dGVySWQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgImFkZCByb3V0ZXIgaWQgJWQiLCBhUm91dGVySWQpOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6UmVsZWFzZVJvdXRlcklkKHVpbnQ4X3QgYVJvdXRlcklkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgUm91dGVyICpyb3V0ZXIgPSBHZXRSb3V0ZXIoYVJvdXRlcklkKTsKKworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgImRlbGV0ZSByb3V0ZXIgaWQgJWQiLCBhUm91dGVySWQpOworICAgIHJvdXRlci0+U2V0QWxsb2NhdGVkKGZhbHNlKTsKKyAgICByb3V0ZXItPlNldFJlY2xhaW1EZWxheSh0cnVlKTsKKyAgICByb3V0ZXItPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKyAgICByb3V0ZXItPlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0TmV4dEhvcCgpID09IGFSb3V0ZXJJZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldENvc3QoMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUm91dGVySWRTZXF1ZW5jZSsrOworICAgIG1Sb3V0ZXJJZFNlcXVlbmNlTGFzdFVwZGF0ZWQgPSBUaW1lcjo6R2V0Tm93KCk7CisgICAgbmV0aWYuR2V0QWRkcmVzc1Jlc29sdmVyKCkuUmVtb3ZlKGFSb3V0ZXJJZCk7CisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5SZW1vdmVCb3JkZXJSb3V0ZXIoR2V0UmxvYzE2KGFSb3V0ZXJJZCkpOworICAgIFJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3VpbnQzMl90IE1sZVJvdXRlcjo6R2V0TGVhZGVyQWdlKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRpbWVyOjpNc2VjVG9TZWMoVGltZXI6OkdldE5vdygpIC0gbVJvdXRlcklkU2VxdWVuY2VMYXN0VXBkYXRlZCk7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjpTdGF0dXMgYVN0YXR1cykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIsIGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgVmVyaWZ5T3JFeGl0KElzUm91dGVyUm9sZUVuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfQ0FQQUJMRSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldEFsbG9jYXRlZChmYWxzZSk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldFJlY2xhaW1EZWxheShmYWxzZSk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKyAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICB9CisKKyAgICBtQWR2ZXJ0aXNlVGltZXIuU3RvcCgpOworICAgIG5ldGlmLkdldEFkZHJlc3NSZXNvbHZlcigpLkNsZWFyKCk7CisgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLlNldFJ4T25XaGVuSWRsZSh0cnVlKTsKKyAgICBtUm91dGVyU2VsZWN0aW9uSml0dGVyVGltZW91dCA9IDA7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZExpbmtSZXF1ZXN0KE5VTEwpKTsKKyAgICAgICAgbVN0YXRlVXBkYXRlVGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZEFkZHJlc3NTb2xpY2l0KGFTdGF0dXMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6QmVjb21lTGVhZGVyKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IHJvdXRlcklkOworICAgIFJvdXRlciAqcm91dGVyOworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdChtUm9sZSAhPSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIsIGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgVmVyaWZ5T3JFeGl0KElzUm91dGVyUm9sZUVuYWJsZWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfQ0FQQUJMRSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldEFsbG9jYXRlZChmYWxzZSk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldFJlY2xhaW1EZWxheShmYWxzZSk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKyAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICB9CisKKyAgICByb3V0ZXJJZCA9IElzUm91dGVySWRWYWxpZChtUHJldmlvdXNSb3V0ZXJJZCkgPyBBbGxvY2F0ZVJvdXRlcklkKG1QcmV2aW91c1JvdXRlcklkKSA6IEFsbG9jYXRlUm91dGVySWQoKTsKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFNldFJvdXRlcklkKHJvdXRlcklkKTsKKworICAgIHJvdXRlci0+U2V0RXh0QWRkcmVzcygqbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpKTsKKyAgICBtQWR2ZXJ0aXNlVGltZXIuU3RvcCgpOworICAgIG5ldGlmLkdldEFkZHJlc3NSZXNvbHZlcigpLkNsZWFyKCk7CisKKyAgICBpZiAobUZpeGVkTGVhZGVyUGFydGl0aW9uSWQgIT0gMCkKKyAgICB7CisgICAgICAgIFNldExlYWRlckRhdGEobUZpeGVkTGVhZGVyUGFydGl0aW9uSWQsIG1MZWFkZXJXZWlnaHQsIG1Sb3V0ZXJJZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFNldExlYWRlckRhdGEob3RQbGF0UmFuZG9tR2V0KCksIG1MZWFkZXJXZWlnaHQsIG1Sb3V0ZXJJZCk7CisgICAgfQorCisgICAgbVJvdXRlcklkU2VxdWVuY2UgPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisKKyAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlJlc2V0KCk7CisgICAgbmV0aWYuR2V0TGVhZGVyKCkuU2V0RW1wdHlDb21taXNzaW9uZXJEYXRhKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2V0U3RhdGVMZWFkZXIoR2V0UmxvYzE2KG1Sb3V0ZXJJZCkpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpTdG9wTGVhZGVyKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIG5ldGlmLkdldENvYXAoKS5SZW1vdmVSZXNvdXJjZShtQWRkcmVzc1NvbGljaXQpOworICAgIG5ldGlmLkdldENvYXAoKS5SZW1vdmVSZXNvdXJjZShtQWRkcmVzc1JlbGVhc2UpOworICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5TdG9wTGVhZGVyKCk7CisgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5TdG9wTGVhZGVyKCk7CisgICAgbUFkdmVydGlzZVRpbWVyLlN0b3AoKTsKKyAgICBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLlN0b3AoKTsKKyNpZiAhT1BFTlRIUkVBRF9DT05GSUdfTkVTVF9TVEFZX1NVQlNDUklCRURfVE9fQUxMX1JPVVRFUlNfTVVMVElDQVNUX0FERFIKKyAgICBuZXRpZi5VbnN1YnNjcmliZUFsbFJvdXRlcnNNdWx0aWNhc3QoKTsKKyNlbmRpZgorfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlRGV0YWNoU3RhcnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIEdldE5ldGlmKCkuR2V0QWRkcmVzc1Jlc29sdmVyKCkuQ2xlYXIoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgbVJvdXRlcnNbaV0uU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpOworICAgIH0KKworICAgIFN0b3BMZWFkZXIoKTsKKyAgICBtU3RhdGVVcGRhdGVUaW1lci5TdG9wKCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVDaGlsZFN0YXJ0KEF0dGFjaE1vZGUgYU1vZGUpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkID0gVGltZXI6OkdldE5vdygpOworICAgIG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXJUaW1lb3V0ID0gKG90UGxhdFJhbmRvbUdldCgpICUgbVJvdXRlclNlbGVjdGlvbkppdHRlcikgKyAxOworCisgICAgU3RvcExlYWRlcigpOworICAgIG1TdGF0ZVVwZGF0ZVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisKKyAgICBpZiAobVJvdXRlclJvbGVFbmFibGVkKQorICAgIHsKKyAgICAgICAgbmV0aWYuR2V0TWFjKCkuU2V0QmVhY29uRW5hYmxlZCh0cnVlKTsKKyAgICB9CisKKyAgICBuZXRpZi5TdWJzY3JpYmVBbGxSb3V0ZXJzTXVsdGljYXN0KCk7CisKKyAgICBWZXJpZnlPckV4aXQoSXNSb3V0ZXJJZFZhbGlkKG1QcmV2aW91c1JvdXRlcklkKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIHN3aXRjaCAoYU1vZGUpCisgICAgeworICAgIGNhc2Uga0F0dGFjaFNhbWUxOgorICAgIGNhc2Uga0F0dGFjaFNhbWUyOgorCisgICAgICAgIC8vIGRvd25ncmFkZQorICAgICAgICBpZiAoR2V0QWN0aXZlUm91dGVyQ291bnQoKSA+IG1Sb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNlbmRBZGRyZXNzUmVsZWFzZSgpOworCisgICAgICAgICAgICAvLyByZXNldCBjaGlsZHJlbiBpbmZvIGlmIGFueQorICAgICAgICAgICAgaWYgKEhhc0NoaWxkcmVuKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcmVzZXQgcm91dGVySWQgaW5mbworICAgICAgICAgICAgU2V0Um91dGVySWQoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoSGFzQ2hpbGRyZW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lUm91dGVyKFRocmVhZFN0YXR1c1Rsdjo6a0hhdmVDaGlsZElkUmVxdWVzdCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0F0dGFjaEFueToKKyAgICBjYXNlIGtBdHRhY2hCZXR0ZXI6CisgICAgICAgIGlmIChIYXNDaGlsZHJlbigpICYmCisgICAgICAgICAgICBtUHJldmlvdXNQYXJ0aXRpb25JZCAhPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjprUGFyZW50UGFydGl0aW9uQ2hhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKworICAgIGlmIChHZXRBY3RpdmVSb3V0ZXJDb3VudCgpID49IG1Sb3V0ZXJVcGdyYWRlVGhyZXNob2xkICYmCisgICAgICAgICghSXNSb3V0ZXJJZFZhbGlkKG1QcmV2aW91c1JvdXRlcklkKSB8fCAhSGFzQ2hpbGRyZW4oKSkpCisgICAgeworICAgICAgICBTZXRSb3V0ZXJJZChrSW52YWxpZFJvdXRlcklkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZXRTdGF0ZVJvdXRlcih1aW50MTZfdCBhUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBpZiAobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSKQorICAgIHsKKyAgICAgICAgbmV0aWYuU2V0U3RhdGVDaGFuZ2VkRmxhZ3MoT1RfQ0hBTkdFRF9USFJFQURfUk9MRSk7CisgICAgfQorCisgICAgU2V0UmxvYzE2KGFSbG9jMTYpOworICAgIG1Sb2xlID0gT1RfREVWSUNFX1JPTEVfUk9VVEVSOworICAgIG1QYXJlbnRSZXF1ZXN0U3RhdGUgPSBrUGFyZW50SWRsZTsKKyAgICBtUGFyZW50UmVxdWVzdFRpbWVyLlN0b3AoKTsKKyAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisKKyAgICBuZXRpZi5TdWJzY3JpYmVBbGxSb3V0ZXJzTXVsdGljYXN0KCk7CisgICAgbVJvdXRlcnNbbVJvdXRlcklkXS5TZXROZXh0SG9wKG1Sb3V0ZXJJZCk7CisgICAgbVByZXZpb3VzUGFydGl0aW9uSWQgPSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpOworICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU3RvcCgpOworICAgIG1TdGF0ZVVwZGF0ZVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisgICAgbmV0aWYuR2V0SXA2KCkuU2V0Rm9yd2FyZGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbmV0aWYuR2V0SXA2KCkubU1wbC5TZXRUaW1lckV4cGlyYXRpb25zKGtNcGxSb3V0ZXJEYXRhTWVzc2FnZVRpbWVyRXhwaXJhdGlvbnMpOworICAgIG5ldGlmLkdldE1hYygpLlNldEJlYWNvbkVuYWJsZWQodHJ1ZSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlUmVzdG9yZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Jc1JvdXRlclJlc3RvcmluZ0NoaWxkcmVuID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJNb2RlIC0+IFJvdXRlciIpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2V0U3RhdGVMZWFkZXIodWludDE2X3QgYVJsb2MxNikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgaWYgKG1Sb2xlICE9IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG5ldGlmLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX1JPTEUpOworICAgIH0KKworICAgIFNldFJsb2MxNihhUmxvYzE2KTsKKyAgICBtUm9sZSA9IE9UX0RFVklDRV9ST0xFX0xFQURFUjsKKyAgICBtUGFyZW50UmVxdWVzdFN0YXRlID0ga1BhcmVudElkbGU7CisgICAgbVBhcmVudFJlcXVlc3RUaW1lci5TdG9wKCk7CisgICAgUmVzZXRBZHZlcnRpc2VJbnRlcnZhbCgpOworICAgIEFkZExlYWRlckFsb2MoKTsKKworICAgIG5ldGlmLlN1YnNjcmliZUFsbFJvdXRlcnNNdWx0aWNhc3QoKTsKKyAgICBtUm91dGVyc1ttUm91dGVySWRdLlNldE5leHRIb3AobVJvdXRlcklkKTsKKyAgICBtUHJldmlvdXNQYXJ0aXRpb25JZCA9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCk7CisgICAgbVN0YXRlVXBkYXRlVGltZXIuU3RhcnQoa1N0YXRlVXBkYXRlUGVyaW9kKTsKKyAgICBtUm91dGVyc1ttUm91dGVySWRdLlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworCisgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TdGFydCgpOworICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5TdGFydExlYWRlcigpOworICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuU3RhcnRMZWFkZXIoKTsKKyAgICBuZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUFkZHJlc3NTb2xpY2l0KTsKKyAgICBuZXRpZi5HZXRDb2FwKCkuQWRkUmVzb3VyY2UobUFkZHJlc3NSZWxlYXNlKTsKKyAgICBuZXRpZi5HZXRJcDYoKS5TZXRGb3J3YXJkaW5nRW5hYmxlZCh0cnVlKTsKKyAgICBuZXRpZi5HZXRJcDYoKS5tTXBsLlNldFRpbWVyRXhwaXJhdGlvbnMoa01wbFJvdXRlckRhdGFNZXNzYWdlVGltZXJFeHBpcmF0aW9ucyk7CisgICAgbmV0aWYuR2V0TWFjKCkuU2V0QmVhY29uRW5hYmxlZCh0cnVlKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbUlzUm91dGVyUmVzdG9yaW5nQ2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIk1vZGUgLT4gTGVhZGVyICVkIiwgbUxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgTWxlUm91dGVyOjpIYW5kbGVBZHZlcnRpc2VUaW1lcihUcmlja2xlVGltZXIgJmFUaW1lcikKK3sKKyAgICByZXR1cm4gR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVBZHZlcnRpc2VUaW1lcigpOworfQorCitib29sIE1sZVJvdXRlcjo6SGFuZGxlQWR2ZXJ0aXNlVGltZXIodm9pZCkKK3sKKyAgICBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpID09IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU2VuZEFkdmVydGlzZW1lbnQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1sZVJvdXRlcjo6U3RvcEFkdmVydGlzZVRpbWVyKHZvaWQpCit7CisgICAgbUFkdmVydGlzZVRpbWVyLlN0b3AoKTsKK30KKwordm9pZCBNbGVSb3V0ZXI6OlJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwodm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSIHx8IG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUik7CisKKyAgICBpZiAoIW1BZHZlcnRpc2VUaW1lci5Jc1J1bm5pbmcoKSkKKyAgICB7CisgICAgICAgIG1BZHZlcnRpc2VUaW1lci5TdGFydCgKKyAgICAgICAgICAgIFRpbWVyOjpTZWNUb01zZWMoa0FkdmVydGlzZUludGVydmFsTWluKSwKKyAgICAgICAgICAgIFRpbWVyOjpTZWNUb01zZWMoa0FkdmVydGlzZUludGVydmFsTWF4KSwKKyAgICAgICAgICAgIFRyaWNrbGVUaW1lcjo6a01vZGVOb3JtYWwpOworICAgIH0KKworICAgIG1BZHZlcnRpc2VUaW1lci5JbmRpY2F0ZUluY29uc2lzdGVudCgpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRBZHZlcnRpc2VtZW50KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZEFkdmVydGlzZW1lbnQpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFJvdXRlKCptZXNzYWdlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMDIpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDEpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBhZHZlcnRpc2VtZW50Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZExpbmtSZXF1ZXN0KE5laWdoYm9yICphTmVpZ2hib3IpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZGV0YWNoZWRUbHZzW10gPSB7VGx2OjprQWRkcmVzczE2LCBUbHY6OmtSb3V0ZX07CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgcm91dGVyVGx2c1tdID0ge1Rsdjo6a0xpbmtNYXJnaW59OworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworCisgICAgbWVtc2V0KCZkZXN0aW5hdGlvbiwgMCwgc2l6ZW9mKGRlc3RpbmF0aW9uKSk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZExpbmtSZXF1ZXN0KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFZlcnNpb24oKm1lc3NhZ2UpKTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRsdlJlcXVlc3QoKm1lc3NhZ2UsIGRldGFjaGVkVGx2cywgc2l6ZW9mKGRldGFjaGVkVGx2cykpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGVhZGVyRGF0YSgqbWVzc2FnZSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kVGx2UmVxdWVzdCgqbWVzc2FnZSwgcm91dGVyVGx2cywgc2l6ZW9mKHJvdXRlclRsdnMpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChhTmVpZ2hib3IgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihtQ2hhbGxlbmdlKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtQ2hhbGxlbmdlW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ob3RQbGF0UmFuZG9tR2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgbUNoYWxsZW5nZVRpbWVvdXQgPSAoKCgyICoga01heFJlc3BvbnNlRGVsYXkpICsga1N0YXRlVXBkYXRlUGVyaW9kIC0gMSkgLyBrU3RhdGVVcGRhdGVQZXJpb2QpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDaGFsbGVuZ2UoKm1lc3NhZ2UsIG1DaGFsbGVuZ2UsIHNpemVvZihtQ2hhbGxlbmdlKSkpOworICAgICAgICBkZXN0aW5hdGlvbi5tRmllbGRzLm04WzBdID0gMHhmZjsKKyAgICAgICAgZGVzdGluYXRpb24ubUZpZWxkcy5tOFsxXSA9IDB4MDI7CisgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubThbMTVdID0gMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYU5laWdoYm9yLT5HZW5lcmF0ZUNoYWxsZW5nZSgpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDaGFsbGVuZ2UoKm1lc3NhZ2UsIGFOZWlnaGJvci0+R2V0Q2hhbGxlbmdlKCksIGFOZWlnaGJvci0+R2V0Q2hhbGxlbmdlU2l6ZSgpKSk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgICAgICBkZXN0aW5hdGlvbi5TZXRJaWQoYU5laWdoYm9yLT5HZXRFeHRBZGRyZXNzKCkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgZGVzdGluYXRpb24pKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBsaW5rIHJlcXVlc3QiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVMaW5rUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5laWdoYm9yICpuZWlnaGJvciA9IE5VTEw7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgQ2hhbGxlbmdlVGx2IGNoYWxsZW5nZTsKKyAgICBWZXJzaW9uVGx2IHZlcnNpb247CisgICAgTGVhZGVyRGF0YVRsdiBsZWFkZXJEYXRhOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBUbHZSZXF1ZXN0VGx2IHRsdlJlcXVlc3Q7CisgICAgdWludDE2X3QgcmxvYzE2OworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBsaW5rIHJlcXVlc3QiKTsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgVmVyaWZ5T3JFeGl0KG1QYXJlbnRSZXF1ZXN0U3RhdGUgPT0ga1BhcmVudElkbGUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBtYWNBZGRyLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisKKyAgICAvLyBDaGFsbGVuZ2UKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0NoYWxsZW5nZSwgc2l6ZW9mKGNoYWxsZW5nZSksIGNoYWxsZW5nZSkpOworICAgIFZlcmlmeU9yRXhpdChjaGFsbGVuZ2UuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFZlcnNpb24KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1ZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSwgdmVyc2lvbikpOworICAgIFZlcmlmeU9yRXhpdCh2ZXJzaW9uLklzVmFsaWQoKSAmJiB2ZXJzaW9uLkdldFZlcnNpb24oKSA+PSBrVmVyc2lvbiwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSA9PSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIH0KKworICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtTb3VyY2VBZGRyZXNzLCBzaXplb2Yoc291cmNlQWRkcmVzcyksIHNvdXJjZUFkZHJlc3MpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoc291cmNlQWRkcmVzcy5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIHJsb2MxNiA9IHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCk7CisKKyAgICAgICAgaWYgKChuZWlnaGJvciA9IEdldE5laWdoYm9yKG1hY0FkZHIpKSAhPSBOVUxMICYmIG5laWdoYm9yLT5HZXRSbG9jMTYoKSAhPSBybG9jMTYpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBzdGFsZSBuZWlnaGJvcnMKKyAgICAgICAgICAgIFJlbW92ZU5laWdoYm9yKCpuZWlnaGJvcik7CisgICAgICAgICAgICBuZWlnaGJvciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoSXNBY3RpdmVSb3V0ZXIocmxvYzE2KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc291cmNlIGlzIGEgcm91dGVyCisgICAgICAgICAgICBuZWlnaGJvciA9IEdldFJvdXRlcihHZXRSb3V0ZXJJZChybG9jMTYpKTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChuZWlnaGJvciAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAgICAgaWYgKG5laWdoYm9yLT5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisKKyAgICAgICAgICAgICAgICBuZWlnaGJvci0+U2V0RXh0QWRkcmVzcyhtYWNBZGRyKTsKKyAgICAgICAgICAgICAgICBuZWlnaGJvci0+R2V0TGlua0luZm8oKS5DbGVhcigpOworICAgICAgICAgICAgICAgIG5laWdoYm9yLT5HZXRMaW5rSW5mbygpLkFkZFJzcyhHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworICAgICAgICAgICAgICAgIG5laWdoYm9yLT5SZXNldExpbmtGYWlsdXJlcygpOworICAgICAgICAgICAgICAgIG5laWdoYm9yLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcmlmeU9yRXhpdChtZW1jbXAoJm5laWdoYm9yLT5HZXRFeHRBZGRyZXNzKCksICZtYWNBZGRyLCBzaXplb2YobWFjQWRkcikpID09IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc291cmNlIGlzIG5vdCBhIHJvdXRlcgorICAgICAgICAgICAgbmVpZ2hib3IgPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIGxhY2sgb2Ygc291cmNlIGFkZHJlc3MgaW5kaWNhdGVzIHJvdXRlciBjb21pbmcgb3V0IG9mIHJlc2V0CisgICAgICAgIFZlcmlmeU9yRXhpdCgobmVpZ2hib3IgPSBHZXROZWlnaGJvcihtYWNBZGRyKSkgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgbmVpZ2hib3ItPkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkICYmCisgICAgICAgICAgICAgICAgICAgICBJc0FjdGl2ZVJvdXRlcihuZWlnaGJvci0+R2V0UmxvYzE2KCkpLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICB9CisKKyAgICAvLyBUTFYgUmVxdWVzdAorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGx2UmVxdWVzdC5TZXRMZW5ndGgoMCk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRMaW5rQWNjZXB0KGFNZXNzYWdlSW5mbywgbmVpZ2hib3IsIHRsdlJlcXVlc3QsIGNoYWxsZW5nZSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRMaW5rQWNjZXB0KGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgTmVpZ2hib3IgKmFOZWlnaGJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUbHZSZXF1ZXN0VGx2ICZhVGx2UmVxdWVzdCwgY29uc3QgQ2hhbGxlbmdlVGx2ICZhQ2hhbGxlbmdlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICp0aHJlYWRNZXNzYWdlSW5mbyA9IHN0YXRpY19jYXN0PGNvbnN0IFRocmVhZE1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mby5HZXRMaW5rSW5mbygpKTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCByb3V0ZXJUbHZzW10gPSB7VGx2OjprTGlua01hcmdpbn07CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBIZWFkZXI6OkNvbW1hbmQgY29tbWFuZDsKKyAgICB1aW50OF90IGxpbmtNYXJnaW47CisKKyAgICBjb21tYW5kID0gKGFOZWlnaGJvciA9PSBOVUxMIHx8IGFOZWlnaGJvci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpID8KKyAgICAgICAgICAgICAgSGVhZGVyOjprQ29tbWFuZExpbmtBY2NlcHQgOiBIZWFkZXI6OmtDb21tYW5kTGlua0FjY2VwdEFuZFJlcXVlc3Q7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgY29tbWFuZCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRWZXJzaW9uKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNvdXJjZUFkZHJlc3MoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUmVzcG9uc2UoKm1lc3NhZ2UsIGFDaGFsbGVuZ2UuR2V0Q2hhbGxlbmdlKCksIGFDaGFsbGVuZ2UuR2V0TGVuZ3RoKCkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua0ZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRNbGVGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKworICAgIC8vIGFsd2F5cyBhcHBlbmQgYSBsaW5rIG1hcmdpbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBpdCB3YXMgcmVxdWVzdGVkCisgICAgbGlua01hcmdpbiA9IExpbmtRdWFsaXR5SW5mbzo6Q29udmVydFJzc1RvTGlua01hcmdpbihHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworCisgICAgLy8gYWRkIGZvciBjZXJ0aWZpY2F0aW9uIHRlc3RpbmcKKyAgICBpZiAoaXNBc3NpZ25MaW5rUXVhbGl0eSAmJiBhTmVpZ2hib3IgIT0gTlVMTCAmJgorICAgICAgICAobWVtY21wKCZhTmVpZ2hib3ItPkdldEV4dEFkZHJlc3MoKSwgbUFkZHI2NC5tOCwgT1RfRVhUX0FERFJFU1NfU0laRSkgPT0gMCkpCisgICAgeworICAgICAgICBsaW5rTWFyZ2luID0gbUFzc2lnbkxpbmtNYXJnaW47CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExpbmtNYXJnaW4oKm1lc3NhZ2UsIGxpbmtNYXJnaW4pKTsKKworICAgIGlmIChhTmVpZ2hib3IgIT0gTlVMTCAmJiBJc0FjdGl2ZVJvdXRlcihhTmVpZ2hib3ItPkdldFJsb2MxNigpKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgfQorCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYVRsdlJlcXVlc3QuR2V0TGVuZ3RoKCk7IGkrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYVRsdlJlcXVlc3QuR2V0VGx2cygpW2ldKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVGx2OjprUm91dGU6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUm91dGUoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprQWRkcmVzczE2OgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGFOZWlnaGJvciAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFkZHJlc3MxNigqbWVzc2FnZSwgYU5laWdoYm9yLT5HZXRSbG9jMTYoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtMaW5rTWFyZ2luOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhTmVpZ2hib3IgIT0gTlVMTCAmJiBhTmVpZ2hib3ItPkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgIHsKKyAgICAgICAgYU5laWdoYm9yLT5HZW5lcmF0ZUNoYWxsZW5nZSgpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDaGFsbGVuZ2UoKm1lc3NhZ2UsIGFOZWlnaGJvci0+R2V0Q2hhbGxlbmdlKCksIGFOZWlnaGJvci0+R2V0Q2hhbGxlbmdlU2l6ZSgpKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRUbHZSZXF1ZXN0KCptZXNzYWdlLCByb3V0ZXJUbHZzLCBzaXplb2Yocm91dGVyVGx2cykpKTsKKyAgICAgICAgYU5laWdoYm9yLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3QpOworICAgIH0KKworICAgIGlmIChhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZERlbGF5ZWRSZXNwb25zZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG90UGxhdFJhbmRvbUdldCgpICUga01heFJlc3BvbnNlRGVsYXkpICsgMSkpOworCisgICAgICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiRGVsYXllZCBsaW5rIGFjY2VwdCIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSk7CisKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGxpbmsgYWNjZXB0Iik7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUxpbmtBY2NlcHQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSkKK3sKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGxpbmsgYWNjZXB0Iik7CisgICAgcmV0dXJuIEhhbmRsZUxpbmtBY2NlcHQoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgYUtleVNlcXVlbmNlLCBmYWxzZSk7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVMaW5rQWNjZXB0QW5kUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSkKK3sKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGxpbmsgYWNjZXB0IGFuZCByZXF1ZXN0Iik7CisgICAgcmV0dXJuIEhhbmRsZUxpbmtBY2NlcHQoYU1lc3NhZ2UsIGFNZXNzYWdlSW5mbywgYUtleVNlcXVlbmNlLCB0cnVlKTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUxpbmtBY2NlcHQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSwgYm9vbCBhUmVxdWVzdCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisgICAgUm91dGVyICpyb3V0ZXI7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIFZlcnNpb25UbHYgdmVyc2lvbjsKKyAgICBSZXNwb25zZVRsdiByZXNwb25zZTsKKyAgICBTb3VyY2VBZGRyZXNzVGx2IHNvdXJjZUFkZHJlc3M7CisgICAgTGlua0ZyYW1lQ291bnRlclRsdiBsaW5rRnJhbWVDb3VudGVyOworICAgIE1sZUZyYW1lQ291bnRlclRsdiBtbGVGcmFtZUNvdW50ZXI7CisgICAgdWludDhfdCByb3V0ZXJJZDsKKyAgICBBZGRyZXNzMTZUbHYgYWRkcmVzczE2OworICAgIFJvdXRlVGx2IHJvdXRlOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBMaW5rTWFyZ2luVGx2IGxpbmtNYXJnaW47CisgICAgQ2hhbGxlbmdlVGx2IGNoYWxsZW5nZTsKKyAgICBUbHZSZXF1ZXN0VGx2IHRsdlJlcXVlc3Q7CisKKyAgICBtYWNBZGRyLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisKKyAgICAvLyBWZXJzaW9uCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtWZXJzaW9uLCBzaXplb2YodmVyc2lvbiksIHZlcnNpb24pKTsKKyAgICBWZXJpZnlPckV4aXQodmVyc2lvbi5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUmVzcG9uc2UKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Jlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCByZXNwb25zZSkpOworICAgIFZlcmlmeU9yRXhpdChyZXNwb25zZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykpOworICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBSZW1vdmUgc3RhbGUgbmVpZ2hib3JzCisgICAgaWYgKChuZWlnaGJvciA9IEdldE5laWdoYm9yKG1hY0FkZHIpKSAhPSBOVUxMICYmCisgICAgICAgIG5laWdoYm9yLT5HZXRSbG9jMTYoKSAhPSBzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKQorICAgIHsKKyAgICAgICAgUmVtb3ZlTmVpZ2hib3IoKm5laWdoYm9yKTsKKyAgICB9CisKKyAgICAvLyBMaW5rLUxheWVyIEZyYW1lIENvdW50ZXIKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xpbmtGcmFtZUNvdW50ZXIsIHNpemVvZihsaW5rRnJhbWVDb3VudGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0ZyYW1lQ291bnRlcikpOworICAgIFZlcmlmeU9yRXhpdChsaW5rRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBNTEUgRnJhbWUgQ291bnRlcgorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTWxlRnJhbWVDb3VudGVyLCBzaXplb2YobWxlRnJhbWVDb3VudGVyKSwgbWxlRnJhbWVDb3VudGVyKSA9PQorICAgICAgICBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1sZUZyYW1lQ291bnRlci5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtbGVGcmFtZUNvdW50ZXIuU2V0RnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChJc0FjdGl2ZVJvdXRlcihzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICByb3V0ZXJJZCA9IEdldFJvdXRlcklkKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpOworICAgIHJvdXRlciA9IEdldFJvdXRlcihyb3V0ZXJJZCk7CisKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gdmVyaWZ5IHJlc3BvbnNlCisgICAgc3dpdGNoIChyb3V0ZXItPkdldFN0YXRlKCkpCisgICAgeworICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZUxpbmtSZXF1ZXN0OgorICAgICAgICBWZXJpZnlPckV4aXQobWVtY21wKHJvdXRlci0+R2V0Q2hhbGxlbmdlKCksIHJlc3BvbnNlLkdldFJlc3BvbnNlKCksIHJvdXRlci0+R2V0Q2hhbGxlbmdlU2l6ZSgpKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9TRUNVUklUWSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZDoKKyAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVWYWxpZDoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChtQ2hhbGxlbmdlVGltZW91dCA+IDApICYmIChtZW1jbXAobUNoYWxsZW5nZSwgcmVzcG9uc2UuR2V0UmVzcG9uc2UoKSwgc2l6ZW9mKG1DaGFsbGVuZ2UpKSA9PSAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfU0VDVVJJVFkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIC8vIEFkZHJlc3MxNgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FkZHJlc3MxNiwgc2l6ZW9mKGFkZHJlc3MxNiksIGFkZHJlc3MxNikpOworICAgICAgICBWZXJpZnlPckV4aXQoYWRkcmVzczE2LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChHZXRSbG9jMTYoKSA9PSBhZGRyZXNzMTYuR2V0UmxvYzE2KCksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgLy8gUm91dGUKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtSb3V0ZSwgc2l6ZW9mKHJvdXRlKSwgcm91dGUpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJvdXRlLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzUm91dGVUbHYocm91dGUpKTsKKworICAgICAgICAvLyBMZWFkZXIgRGF0YQorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkpOworICAgICAgICBWZXJpZnlPckV4aXQobGVhZGVyRGF0YS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBTZXRMZWFkZXJEYXRhKGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSwgbGVhZGVyRGF0YS5HZXRXZWlnaHRpbmcoKSwgbGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpKTsKKworICAgICAgICBpZiAobUxlYWRlckRhdGEuR2V0TGVhZGVyUm91dGVySWQoKSA9PSBHZXRSb3V0ZXJJZChHZXRSbG9jMTYoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNldFN0YXRlTGVhZGVyKEdldFJsb2MxNigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHRsdnNbXSA9IHtUbHY6OmtOZXR3b3JrRGF0YX07CisgICAgICAgICAgICBTZXRTdGF0ZVJvdXRlcihHZXRSbG9jMTYoKSk7CisgICAgICAgICAgICBtUmV0cmlldmVOZXdOZXR3b3JrRGF0YSA9IHRydWU7CisgICAgICAgICAgICBTZW5kRGF0YVJlcXVlc3QoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCksIHRsdnMsIHNpemVvZih0bHZzKSwgMCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua01hcmdpbiwgc2l6ZW9mKGxpbmtNYXJnaW4pLCBsaW5rTWFyZ2luKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsaW5rTWFyZ2luLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIHJvdXRlci0+U2V0TGlua1F1YWxpdHlPdXQoTGlua1F1YWxpdHlJbmZvOjpDb252ZXJ0TGlua01hcmdpblRvTGlua1F1YWxpdHkobGlua01hcmdpbi5HZXRMaW5rTWFyZ2luKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgLy8gTGVhZGVyIERhdGEKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtMZWFkZXJEYXRhLCBzaXplb2YobGVhZGVyRGF0YSksIGxlYWRlckRhdGEpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuR2V0UGFydGl0aW9uSWQoKSA9PSBtTGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpKTsKKworICAgICAgICAvLyBMaW5rIE1hcmdpbgorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xpbmtNYXJnaW4sIHNpemVvZihsaW5rTWFyZ2luKSwgbGlua01hcmdpbikpOworICAgICAgICBWZXJpZnlPckV4aXQobGlua01hcmdpbi5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICByb3V0ZXItPlNldExpbmtRdWFsaXR5T3V0KExpbmtRdWFsaXR5SW5mbzo6Q29udmVydExpbmtNYXJnaW5Ub0xpbmtRdWFsaXR5KGxpbmtNYXJnaW4uR2V0TGlua01hcmdpbigpKSk7CisKKyAgICAgICAgLy8gdXBkYXRlIHJvdXRpbmcgdGFibGUKKyAgICAgICAgaWYgKHJvdXRlcklkICE9IG1Sb3V0ZXJJZCAmJiAhSXNSb3V0ZXJJZFZhbGlkKHJvdXRlci0+R2V0TmV4dEhvcCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVzZXRBZHZlcnRpc2VJbnRlcnZhbCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gZmluaXNoIGxpbmsgc3luY2hyb25pemF0aW9uCisgICAgcm91dGVyLT5TZXRFeHRBZGRyZXNzKG1hY0FkZHIpOworICAgIHJvdXRlci0+U2V0UmxvYzE2KHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpOworICAgIHJvdXRlci0+U2V0TGlua0ZyYW1lQ291bnRlcihsaW5rRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICByb3V0ZXItPlNldE1sZUZyYW1lQ291bnRlcihtbGVGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIHJvdXRlci0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgcm91dGVyLT5TZXREZXZpY2VNb2RlKE1vZGVUbHY6OmtNb2RlRkZEIHwgTW9kZVRsdjo6a01vZGVSeE9uV2hlbklkbGUgfCBNb2RlVGx2OjprTW9kZUZ1bGxOZXR3b3JrRGF0YSk7CisgICAgcm91dGVyLT5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgcm91dGVyLT5HZXRMaW5rSW5mbygpLkFkZFJzcyhHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworICAgIHJvdXRlci0+UmVzZXRMaW5rRmFpbHVyZXMoKTsKKyAgICByb3V0ZXItPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVWYWxpZCk7CisgICAgcm91dGVyLT5TZXRLZXlTZXF1ZW5jZShhS2V5U2VxdWVuY2UpOworCisgICAgaWYgKGFSZXF1ZXN0KQorICAgIHsKKyAgICAgICAgLy8gQ2hhbGxlbmdlCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbGxlbmdlLCBzaXplb2YoY2hhbGxlbmdlKSwgY2hhbGxlbmdlKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChjaGFsbGVuZ2UuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICAvLyBUTFYgUmVxdWVzdAorICAgICAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RsdlJlcXVlc3QsIHNpemVvZih0bHZSZXF1ZXN0KSwgdGx2UmVxdWVzdCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRsdlJlcXVlc3QuU2V0TGVuZ3RoKDApOworICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRMaW5rQWNjZXB0KGFNZXNzYWdlSW5mbywgcm91dGVyLCB0bHZSZXF1ZXN0LCBjaGFsbGVuZ2UpKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitDaGlsZCAqTWxlUm91dGVyOjpOZXdDaGlsZCh2b2lkKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1DaGlsZHJlbltpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitDaGlsZCAqTWxlUm91dGVyOjpGaW5kQ2hpbGQodWludDE2X3QgYUNoaWxkSWQpCit7CisgICAgQ2hpbGQgKnJ2YWwgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQgJiYKKyAgICAgICAgICAgIEdldENoaWxkSWQobUNoaWxkcmVuW2ldLkdldFJsb2MxNigpKSA9PSBhQ2hpbGRJZCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gJm1DaGlsZHJlbltpXSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK0NoaWxkICpNbGVSb3V0ZXI6OkZpbmRDaGlsZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIENoaWxkICpydmFsID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVJbnZhbGlkICYmCisgICAgICAgICAgICBtZW1jbXAoJm1DaGlsZHJlbltpXS5HZXRFeHRBZGRyZXNzKCksICZhQWRkcmVzcywgc2l6ZW9mKG1DaGlsZHJlbltpXS5HZXRFeHRBZGRyZXNzKCkpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSAmbUNoaWxkcmVuW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkxpbmtRdWFsaXR5VG9Db3N0KHVpbnQ4X3QgYUxpbmtRdWFsaXR5KQoreworICAgIHN3aXRjaCAoYUxpbmtRdWFsaXR5KQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBrTGlua1F1YWxpdHkxTGlua0Nvc3Q7CisKKyAgICBjYXNlIDI6CisgICAgICAgIHJldHVybiBrTGlua1F1YWxpdHkyTGlua0Nvc3Q7CisKKyAgICBjYXNlIDM6CisgICAgICAgIHJldHVybiBrTGlua1F1YWxpdHkzTGlua0Nvc3Q7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4ga0xpbmtRdWFsaXR5MExpbmtDb3N0OworICAgIH0KK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkdldExpbmtDb3N0KHVpbnQ4X3QgYVJvdXRlcklkKQoreworICAgIHVpbnQ4X3QgcnZhbCA9IGtNYXhSb3V0ZUNvc3Q7CisgICAgUm91dGVyICpyb3V0ZXI7CisKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIoYVJvdXRlcklkKTsKKworICAgIC8vIE5VTEwgYVJvdXRlcklkIGluZGljYXRlcyBub24tZXhpc3RpbmcgbmV4dCBob3AsIGhlbmNlIHJldHVybiBrTWF4Um91dGVDb3N0IGZvciBpdC4KKyAgICBWZXJpZnlPckV4aXQoYVJvdXRlcklkICE9IG1Sb3V0ZXJJZCAmJiByb3V0ZXIgIT0gTlVMTCAmJiByb3V0ZXItPkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKworICAgIHJ2YWwgPSByb3V0ZXItPkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpOworCisgICAgaWYgKHJ2YWwgPiByb3V0ZXItPkdldExpbmtRdWFsaXR5T3V0KCkpCisgICAgeworICAgICAgICBydmFsID0gcm91dGVyLT5HZXRMaW5rUXVhbGl0eU91dCgpOworICAgIH0KKworICAgIC8vIGFkZCBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0aW5nCisgICAgaWYgKGlzQXNzaWduTGlua1F1YWxpdHkgJiYgKG1lbWNtcCgmcm91dGVyLT5HZXRFeHRBZGRyZXNzKCksIG1BZGRyNjQubTgsIE9UX0VYVF9BRERSRVNTX1NJWkUpID09IDApKQorICAgIHsKKyAgICAgICAgcnZhbCA9IG1Bc3NpZ25MaW5rUXVhbGl0eTsKKyAgICB9CisKKyAgICBydmFsID0gTGlua1F1YWxpdHlUb0Nvc3QocnZhbCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIodWludDhfdCBhUm91dGVySml0dGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFSb3V0ZXJKaXR0ZXIgPiAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtUm91dGVyU2VsZWN0aW9uSml0dGVyID0gYVJvdXRlckppdHRlcjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpQcm9jZXNzUm91dGVUbHYoY29uc3QgUm91dGVUbHYgJmFSb3V0ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG1Sb3V0ZXJJZFNlcXVlbmNlID0gYVJvdXRlLkdldFJvdXRlcklkU2VxdWVuY2UoKTsKKyAgICBtUm91dGVySWRTZXF1ZW5jZUxhc3RVcGRhdGVkID0gVGltZXI6OkdldE5vdygpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgYm9vbCBvbGQgPSBtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpOworICAgICAgICBtUm91dGVyc1tpXS5TZXRBbGxvY2F0ZWQoYVJvdXRlLklzUm91dGVySWRTZXQoaSkpOworCisgICAgICAgIGlmIChvbGQgJiYgIW1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgICAgICAgICBHZXROZXRpZigpLkdldEFkZHJlc3NSZXNvbHZlcigpLlJlbW92ZShpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIgJiYgIW1Sb3V0ZXJzW21Sb3V0ZXJJZF0uSXNBbGxvY2F0ZWQoKSkKKyAgICB7CisgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBNbGVSb3V0ZXI6OklzU2luZ2xldG9uKHZvaWQpCit7CisgICAgYm9vbCBydmFsID0gdHJ1ZTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgRXhpdE5vdyhydmFsID0gKChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSA9PSAwKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgICAgIEV4aXROb3cocnZhbCA9IGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKworICAgICAgICAvLyBub3QgYSBzaW5nbGV0b24gaWYgYW55IG90aGVyIHJvdXRlcnMgZXhpc3QKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpICE9IG1Sb3V0ZXJJZCAmJiBtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vdCBhIHNpbmdsZXRvbiBpZiBhbnkgY2hpbGRyZW4gYXJlIFJFRURzCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkICYmIG1DaGlsZHJlbltpXS5Jc0Z1bGxUaHJlYWREZXZpY2UoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2ludCBNbGVSb3V0ZXI6OkNvbXBhcmVQYXJ0aXRpb25zKGJvb2wgYVNpbmdsZXRvbkEsIGNvbnN0IExlYWRlckRhdGFUbHYgJmFMZWFkZXJEYXRhQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNpbmdsZXRvbkIsIGNvbnN0IExlYWRlckRhdGFUbHYgJmFMZWFkZXJEYXRhQikKK3sKKyAgICBpbnQgcnZhbCA9IDA7CisKKyAgICBpZiAoYVNpbmdsZXRvbkEgIT0gYVNpbmdsZXRvbkIpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSBhU2luZ2xldG9uQiA/IDEgOiAtMSk7CisgICAgfQorCisgICAgaWYgKGFMZWFkZXJEYXRhQS5HZXRXZWlnaHRpbmcoKSAhPSBhTGVhZGVyRGF0YUIuR2V0V2VpZ2h0aW5nKCkpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSBhTGVhZGVyRGF0YUEuR2V0V2VpZ2h0aW5nKCkgPiBhTGVhZGVyRGF0YUIuR2V0V2VpZ2h0aW5nKCkgPyAxIDogLTEpOworICAgIH0KKworICAgIGlmIChhTGVhZGVyRGF0YUEuR2V0UGFydGl0aW9uSWQoKSAhPSBhTGVhZGVyRGF0YUIuR2V0UGFydGl0aW9uSWQoKSkKKyAgICB7CisgICAgICAgIEV4aXROb3cocnZhbCA9IGFMZWFkZXJEYXRhQS5HZXRQYXJ0aXRpb25JZCgpID4gYUxlYWRlckRhdGFCLkdldFBhcnRpdGlvbklkKCkgPyAxIDogLTEpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkdldEFjdGl2ZVJvdXRlckNvdW50KHZvaWQpIGNvbnN0Cit7CisgICAgdWludDhfdCBydmFsID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ2YWwrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlQWR2ZXJ0aXNlbWVudChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBMZWFkZXJEYXRhVGx2IGxlYWRlckRhdGE7CisgICAgUm91dGVUbHYgcm91dGU7CisgICAgdWludDMyX3QgcGFydGl0aW9uSWQ7CisgICAgUm91dGVyICpyb3V0ZXI7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIHVpbnQ4X3Qgcm91dGVySWQ7CisgICAgdWludDhfdCByb3V0ZXJDb3VudDsKKworICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIC8vIFNvdXJjZSBBZGRyZXNzCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtTb3VyY2VBZGRyZXNzLCBzaXplb2Yoc291cmNlQWRkcmVzcyksIHNvdXJjZUFkZHJlc3MpKTsKKyAgICBWZXJpZnlPckV4aXQoc291cmNlQWRkcmVzcy5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUmVtb3ZlIHN0YWxlIG5laWdoYm9ycworICAgIGlmICgobmVpZ2hib3IgPSBHZXROZWlnaGJvcihtYWNBZGRyKSkgIT0gTlVMTCAmJgorICAgICAgICBuZWlnaGJvci0+R2V0UmxvYzE2KCkgIT0gc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSkKKyAgICB7CisgICAgICAgIFJlbW92ZU5laWdoYm9yKCpuZWlnaGJvcik7CisgICAgfQorCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkpOworICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBSb3V0ZSBEYXRhCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtSb3V0ZSwgc2l6ZW9mKHJvdXRlKSwgcm91dGUpKTsKKyAgICBWZXJpZnlPckV4aXQocm91dGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIHBhcnRpdGlvbklkID0gbGVhZGVyRGF0YS5HZXRQYXJ0aXRpb25JZCgpOworCisgICAgaWYgKHBhcnRpdGlvbklkICE9IG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpCisgICAgeworICAgICAgICBvdExvZ0RlYmdNbGUoR2V0SW5zdGFuY2UoKSwgImRpZmZlcmVudCBwYXJ0aXRpb24hICVkICVkICVkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgIGxlYWRlckRhdGEuR2V0V2VpZ2h0aW5nKCksIHBhcnRpdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgbUxlYWRlckRhdGEuR2V0V2VpZ2h0aW5nKCksIG1MZWFkZXJEYXRhLkdldFBhcnRpdGlvbklkKCkpOworCisgICAgICAgIGlmIChwYXJ0aXRpb25JZCA9PSBtTGFzdFBhcnRpdGlvbklkICYmIChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KChzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJvdXRlLkdldFJvdXRlcklkU2VxdWVuY2UoKSAtIG1MYXN0UGFydGl0aW9uUm91dGVySWRTZXF1ZW5jZSkgPiAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0NISUxEICYmCisgICAgICAgICAgICAobWVtY21wKCZtUGFyZW50LkdldEV4dEFkZHJlc3MoKSwgJm1hY0FkZHIsIHNpemVvZihtYWNBZGRyKSkgPT0gMCB8fCAhKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisKKyAgICAgICAgcm91dGVyQ291bnQgPSAwOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJvdXRlLklzUm91dGVySWRTZXQoaSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcm91dGVyQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChDb21wYXJlUGFydGl0aW9ucyhyb3V0ZXJDb3VudCA8PSAxLCBsZWFkZXJEYXRhLCBJc1NpbmdsZXRvbigpLCBtTGVhZGVyRGF0YSkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBvdExvZ0RlYmdNbGUoR2V0SW5zdGFuY2UoKSwgInRyeWluZyB0byBtaWdyYXRlIik7CisgICAgICAgICAgICBCZWNvbWVDaGlsZChrQXR0YWNoQmV0dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKyAgICB9CisgICAgZWxzZSBpZiAobGVhZGVyRGF0YS5HZXRMZWFkZXJSb3V0ZXJJZCgpICE9IEdldExlYWRlcklkKCkpCisgICAgeworICAgICAgICBpZiAobVJvbGUgIT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0RST1A7CisgICAgICAgIH0KKworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KElzQWN0aXZlUm91dGVyKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpKTsKKyAgICByb3V0ZXJJZCA9IEdldFJvdXRlcklkKHNvdXJjZUFkZHJlc3MuR2V0UmxvYzE2KCkpOworICAgIHJvdXRlciA9IEdldFJvdXRlcihyb3V0ZXJJZCk7CisgICAgVmVyaWZ5T3JFeGl0KHJvdXRlciAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmICgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgJiYKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50OF90Pihyb3V0ZS5HZXRSb3V0ZXJJZFNlcXVlbmNlKCkgLSBtUm91dGVySWRTZXF1ZW5jZSkgPiAwKQorICAgIHsKKyAgICAgICAgYm9vbCBwcm9jZXNzUm91dGVUbHYgPSBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKG1Sb2xlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICAgICAgaWYgKChzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpID09IG1QYXJlbnQuR2V0UmxvYzE2KCkpIHx8CisgICAgICAgICAgICAgICAgKHJvdXRlci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByb2Nlc3NSb3V0ZVRsdiA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgICAgIHByb2Nlc3NSb3V0ZVRsdiA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcm9jZXNzUm91dGVUbHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQcm9jZXNzUm91dGVUbHYocm91dGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgRXhpdE5vdygpOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgaWYgKChzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpID09IG1QYXJlbnQuR2V0UmxvYzE2KCkgfHwgcm91dGVyLT5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkgJiYKKyAgICAgICAgICAgIChtRGV2aWNlTW9kZSAmIE1vZGVUbHY6OmtNb2RlRkZEKSAmJgorICAgICAgICAgICAgKG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXJUaW1lb3V0ID09IDApICYmCisgICAgICAgICAgICAoR2V0QWN0aXZlUm91dGVyQ291bnQoKSA8IG1Sb3V0ZXJVcGdyYWRlVGhyZXNob2xkKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPSAob3RQbGF0UmFuZG9tR2V0KCkgJSBtUm91dGVyU2VsZWN0aW9uSml0dGVyKSArIDE7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWVtY21wKCZtUGFyZW50LkdldEV4dEFkZHJlc3MoKSwgJm1hY0FkZHIsIHNpemVvZihtUGFyZW50LkdldEV4dEFkZHJlc3MoKSkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJvdXRlciA9ICZtUGFyZW50OworCisgICAgICAgICAgICBpZiAobVBhcmVudC5HZXRSbG9jMTYoKSAhPSBzb3VyY2VBZGRyZXNzLkdldFJsb2MxNigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEJlY29tZURldGFjaGVkKCk7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwLCByb3V0ZUNvdW50ID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZS5Jc1JvdXRlcklkU2V0KGkpID09IGZhbHNlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IEdldExlYWRlcklkKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlLkdldFJvdXRlQ29zdChyb3V0ZUNvdW50KSA+IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLlNldE5leHRIb3Aocm91dGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uU2V0Q29zdChyb3V0ZS5HZXRSb3V0ZUNvc3Qocm91dGVDb3VudCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uU2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLlNldENvc3QoMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1EZXZpY2VNb2RlICYgTW9kZVRsdjo6a01vZGVGRkQpICYmIChyb3V0ZXItPkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKSkKKyAgICAgICAgeworICAgICAgICAgICAgcm91dGVyLT5TZXRFeHRBZGRyZXNzKG1hY0FkZHIpOworICAgICAgICAgICAgcm91dGVyLT5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgICAgICAgICByb3V0ZXItPkdldExpbmtJbmZvKCkuQWRkUnNzKG5ldGlmLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworICAgICAgICAgICAgcm91dGVyLT5SZXNldExpbmtGYWlsdXJlcygpOworICAgICAgICAgICAgcm91dGVyLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3QpOworICAgICAgICAgICAgU2VuZExpbmtSZXF1ZXN0KHJvdXRlcik7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworICAgICAgICB9CisKKyAgICAgICAgcm91dGVyLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKworICAgICAgICBFeGl0Tm93KCk7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICAgICAgLy8gY2hlY2sgY3VycmVudCBhY3RpdmUgcm91dGVyIG51bWJlcgorICAgICAgICByb3V0ZXJDb3VudCA9IDA7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocm91dGUuSXNSb3V0ZXJJZFNldChpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByb3V0ZXJDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJvdXRlckNvdW50ID4gbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZCAmJgorICAgICAgICAgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPT0gMCAmJgorICAgICAgICAgICAgSGFzTWluRG93bmdyYWRlTmVpZ2hib3JSb3V0ZXJzKCkgJiYKKyAgICAgICAgICAgIEhhc1NtYWxsTnVtYmVyT2ZDaGlsZHJlbigpICYmCisgICAgICAgICAgICBIYXNPbmVOZWlnaGJvcndpdGhDb21wYXJhYmxlQ29ubmVjdGl2aXR5KHJvdXRlLCByb3V0ZXJJZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXJUaW1lb3V0ID0gKG90UGxhdFJhbmRvbUdldCgpICUgbVJvdXRlclNlbGVjdGlvbkppdHRlcikgKyAxOworICAgICAgICB9CisKKyAgICAvLyBmYWxsIHRocm91Z2gKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorCisgICAgICAgIC8vIHJvdXRlciBpcyBub3QgaW4gbGlzdCwgcmVqZWN0CisgICAgICAgIGlmICghcm91dGVyLT5Jc0FsbG9jYXRlZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9fUk9VVEUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VuZCBsaW5rIHJlcXVlc3QgaWYgbm8gbGluayB0byByb3V0ZXIKKyAgICAgICAgaWYgKHJvdXRlci0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJvdXRlci0+U2V0RXh0QWRkcmVzcyhtYWNBZGRyKTsKKyAgICAgICAgICAgIHJvdXRlci0+R2V0TGlua0luZm8oKS5DbGVhcigpOworICAgICAgICAgICAgcm91dGVyLT5HZXRMaW5rSW5mbygpLkFkZFJzcyhuZXRpZi5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCksIHRocmVhZE1lc3NhZ2VJbmZvLT5tUnNzKTsKKyAgICAgICAgICAgIHJvdXRlci0+UmVzZXRMaW5rRmFpbHVyZXMoKTsKKyAgICAgICAgICAgIHJvdXRlci0+U2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZUxpbmtSZXF1ZXN0KTsKKyAgICAgICAgICAgIHJvdXRlci0+U2V0RGF0YVJlcXVlc3RQZW5kaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIFNlbmRMaW5rUmVxdWVzdChyb3V0ZXIpOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIHJvdXRlci0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFVwZGF0ZVJvdXRlcyhyb3V0ZSwgcm91dGVySWQpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIG5ldGlmLkdldE5ldHdvcmtEYXRhTG9jYWwoKS5TZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbigpOworI2VuZGlmCisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6VXBkYXRlUm91dGVzKGNvbnN0IFJvdXRlVGx2ICZhUm91dGUsIHVpbnQ4X3QgYVJvdXRlcklkKQoreworICAgIHVpbnQ4X3QgY3VyQ29zdDsKKyAgICB1aW50OF90IG5ld0Nvc3Q7CisgICAgdWludDhfdCBvbGROZXh0SG9wOworICAgIHVpbnQ4X3QgY29zdDsKKyAgICB1aW50OF90IGxpbmtRdWFsaXR5OworICAgIGJvb2wgdXBkYXRlOworCisgICAgLy8gdXBkYXRlIHJvdXRlcworICAgIGRvCisgICAgeworICAgICAgICB1cGRhdGUgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDAsIHJvdXRlQ291bnQgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYVJvdXRlLklzUm91dGVySWRTZXQoaSkgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJvdXRlQ291bnQrKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgPT0gbVJvdXRlcklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbmtRdWFsaXR5ID0gYVJvdXRlLkdldExpbmtRdWFsaXR5SW4ocm91dGVDb3VudCk7CisKKyAgICAgICAgICAgICAgICBpZiAobVJvdXRlcnNbYVJvdXRlcklkXS5HZXRMaW5rUXVhbGl0eU91dCgpICE9IGxpbmtRdWFsaXR5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbYVJvdXRlcklkXS5TZXRMaW5rUXVhbGl0eU91dChsaW5rUXVhbGl0eSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9sZE5leHRIb3AgPSBtUm91dGVyc1tpXS5HZXROZXh0SG9wKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBhUm91dGVySWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb3N0ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29zdCA9IGFSb3V0ZS5HZXRSb3V0ZUNvc3Qocm91dGVDb3VudCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvc3QgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29zdCA9IGtNYXhSb3V0ZUNvc3Q7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIUlzUm91dGVySWRWYWxpZChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpIHx8IG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSA9PSBhUm91dGVySWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZSBoYXMgbm8gbmV4dGhvcCBvciBuZXh0aG9wIGlzIG5laWdoYm9yIChzZW5kZXIpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gYVJvdXRlcklkKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29zdCArIEdldExpbmtDb3N0KGFSb3V0ZXJJZCkgPD0ga01heFJvdXRlQ29zdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzUm91dGVySWRWYWxpZChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpICYmIEdldExpbmtDb3N0KGkpID49IGtNYXhSb3V0ZUNvc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldEFkdmVydGlzZUludGVydmFsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChhUm91dGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldENvc3QoY29zdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkgPT0gYVJvdXRlcklkKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHZXRMaW5rQ29zdChpKSA+PSBrTWF4Um91dGVDb3N0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRBZHZlcnRpc2VJbnRlcnZhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0Q29zdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tpXS5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJDb3N0ID0gbVJvdXRlcnNbaV0uR2V0Q29zdCgpICsgR2V0TGlua0Nvc3QobVJvdXRlcnNbaV0uR2V0TmV4dEhvcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29zdCA9IGNvc3QgKyBHZXRMaW5rQ29zdChhUm91dGVySWQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDb3N0IDwgY3VyQ29zdCAmJiBpICE9IGFSb3V0ZXJJZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0TmV4dEhvcChhUm91dGVySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbVJvdXRlcnNbaV0uU2V0Q29zdChjb3N0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHVwZGF0ZSB8PSBtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkgIT0gb2xkTmV4dEhvcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcm91dGVDb3VudCsrOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICh1cGRhdGUpOworCisjaWYgMQorCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkgPT0gZmFsc2UgfHwgIUlzUm91dGVySWRWYWxpZChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG90TG9nRGViZ01sZShHZXRJbnN0YW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgIiV4OiAleCAlZCAlZCAlZCAlZCIsCisgICAgICAgICAgICAgICAgICAgICBHZXRSbG9jMTYoaSksCisgICAgICAgICAgICAgICAgICAgICBHZXRSbG9jMTYobVJvdXRlcnNbaV0uR2V0TmV4dEhvcCgpKSwKKyAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLkdldENvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgIEdldExpbmtDb3N0KGkpLCBtUm91dGVyc1tpXS5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKSwKKyAgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLkdldExpbmtRdWFsaXR5T3V0KCkpOworICAgIH0KKworI2VuZGlmCit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVQYXJlbnRSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIFZlcnNpb25UbHYgdmVyc2lvbjsKKyAgICBTY2FuTWFza1RsdiBzY2FuTWFzazsKKyAgICBDaGFsbGVuZ2VUbHYgY2hhbGxlbmdlOworICAgIENoaWxkICpjaGlsZDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgcGFyZW50IHJlcXVlc3QiKTsKKworICAgIC8vIEEgUm91dGVyIE1VU1QgTk9UIHNlbmQgYW4gTUxFIFBhcmVudCBSZXNwb25zZSBpZjoKKworICAgIC8vIDEuIEl0IGhhcyBubyBhdmFpbGFibGUgQ2hpbGQgY2FwYWNpdHkgKGlmIE1heCBDaGlsZCBDb3VudCBtaW51cworICAgIC8vIENoaWxkIENvdW50IHdvdWxkIGJlIGVxdWFsIHRvIHplcm8pCisgICAgLy8gPT0+IHZlcmlmaWVkIGJlbG93IHdoZW4gYWxsb2NhdGluZyBhIGNoaWxkIGVudHJ5CisKKyAgICAvLyAyLiBJdCBpcyBkaXNjb25uZWN0ZWQgZnJvbSBpdHMgUGFydGl0aW9uICh0aGF0IGlzLCBpdCBoYXMgbm90CisgICAgLy8gcmVjZWl2ZWQgYW4gdXBkYXRlZCBJRCBzZXF1ZW5jZSBudW1iZXIgd2l0aGluIExFQURFUl9USU1FT1VUCisgICAgLy8gc2Vjb25kcworICAgIFZlcmlmeU9yRXhpdChHZXRMZWFkZXJBZ2UoKSA8IG1OZXR3b3JrSWRUaW1lb3V0LCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgLy8gMy4gSXRzIGN1cnJlbnQgcm91dGluZyBwYXRoIGNvc3QgdG8gdGhlIExlYWRlciBpcyBpbmZpbml0ZS4KKyAgICBWZXJpZnlPckV4aXQobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSIHx8CisgICAgICAgICAgICAgICAgIEdldExpbmtDb3N0KEdldExlYWRlcklkKCkpIDwga01heFJvdXRlQ29zdCB8fAorICAgICAgICAgICAgICAgICAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQgJiYgbVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uR2V0Q29zdCgpICsgMSA8IGtNYXhSb3V0ZUNvc3QpIHx8CisgICAgICAgICAgICAgICAgIChtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXRDb3N0KCkgKyBHZXRMaW5rQ29zdChtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXROZXh0SG9wKCkpIDwga01heFJvdXRlQ29zdCksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBtYWNBZGRyLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisKKyAgICAvLyBWZXJzaW9uCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtWZXJzaW9uLCBzaXplb2YodmVyc2lvbiksIHZlcnNpb24pKTsKKyAgICBWZXJpZnlPckV4aXQodmVyc2lvbi5Jc1ZhbGlkKCkgJiYgdmVyc2lvbi5HZXRWZXJzaW9uKCkgPj0ga1ZlcnNpb24sIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gU2NhbiBNYXNrCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtTY2FuTWFzaywgc2l6ZW9mKHNjYW5NYXNrKSwgc2Nhbk1hc2spKTsKKyAgICBWZXJpZnlPckV4aXQoc2Nhbk1hc2suSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIHN3aXRjaCAobVJvbGUpCisgICAgeworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ERVRBQ0hFRDoKKyAgICAgICAgRXhpdE5vdygpOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHNjYW5NYXNrLklzRW5kRGV2aWNlRmxhZ1NldCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHNjYW5NYXNrLklzUm91dGVyRmxhZ1NldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gQ2hhbGxlbmdlCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtDaGFsbGVuZ2UsIHNpemVvZihjaGFsbGVuZ2UpLCBjaGFsbGVuZ2UpKTsKKyAgICBWZXJpZnlPckV4aXQoY2hhbGxlbmdlLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBjaGlsZCA9IEZpbmRDaGlsZChtYWNBZGRyKTsKKworICAgIGlmIChjaGlsZCAhPSBOVUxMICYmICFjaGlsZC0+SXNGdWxsVGhyZWFkRGV2aWNlKCkpCisgICAgeworICAgICAgICAvLyBQYXJlbnQgUmVxdWVzdCBmcm9tIGEgTVREIGNoaWxkIG1lYW5zIHRoYXQgdGhlIGNoaWxkIGhhZCBkZXRhY2hlZC4gSXQgY2FuIGJlIHNhZmVseSByZW1vdmVkLgorICAgICAgICBSZW1vdmVOZWlnaGJvcigqY2hpbGQpOworICAgICAgICBjaGlsZCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKGNoaWxkID09IE5VTEwpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoKGNoaWxkID0gTmV3Q2hpbGQoKSkgIT0gTlVMTCk7CisKKyAgICAgICAgbWVtc2V0KGNoaWxkLCAwLCBzaXplb2YoKmNoaWxkKSk7CisKKyAgICAgICAgLy8gTUFDIEFkZHJlc3MKKyAgICAgICAgY2hpbGQtPlNldEV4dEFkZHJlc3MobWFjQWRkcik7CisgICAgICAgIGNoaWxkLT5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgICAgIGNoaWxkLT5HZXRMaW5rSW5mbygpLkFkZFJzcyhHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworICAgICAgICBjaGlsZC0+UmVzZXRMaW5rRmFpbHVyZXMoKTsKKyAgICAgICAgY2hpbGQtPlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVQYXJlbnRSZXF1ZXN0KTsKKyAgICAgICAgY2hpbGQtPlNldERhdGFSZXF1ZXN0UGVuZGluZyhmYWxzZSk7CisKKyAgICAgICAgY2hpbGQtPlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworICAgICAgICBjaGlsZC0+U2V0VGltZW91dChUaW1lcjo6TXNlY1RvU2VjKGtNYXhDaGlsZElkUmVxdWVzdFRpbWVvdXQpKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU2VuZFBhcmVudFJlc3BvbnNlKGNoaWxkLCBjaGFsbGVuZ2UsICFzY2FuTWFzay5Jc0VuZERldmljZUZsYWdTZXQoKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBNbGVSb3V0ZXI6OkhhbmRsZVN0YXRlVXBkYXRlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVN0YXRlVXBkYXRlVGltZXIoKTsKK30KKwordm9pZCBNbGVSb3V0ZXI6OkhhbmRsZVN0YXRlVXBkYXRlVGltZXIodm9pZCkKK3sKKyAgICBib29sIHJvdXRlclN0YXRlVXBkYXRlID0gZmFsc2U7CisKKyAgICBpZiAobUNoYWxsZW5nZVRpbWVvdXQgPiAwKQorICAgIHsKKyAgICAgICAgbUNoYWxsZW5nZVRpbWVvdXQtLTsKKyAgICB9CisKKyAgICBpZiAobVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPiAwKQorICAgIHsKKyAgICAgICAgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQtLTsKKworICAgICAgICBpZiAobVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcm91dGVyU3RhdGVVcGRhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICBFeGl0Tm93KCk7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0NISUxEOgorICAgICAgICBpZiAocm91dGVyU3RhdGVVcGRhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChHZXRBY3RpdmVSb3V0ZXJDb3VudCgpIDwgbVJvdXRlclVwZ3JhZGVUaHJlc2hvbGQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gdXBncmFkZSB0byBSb3V0ZXIKKyAgICAgICAgICAgICAgICBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjprVG9vRmV3Um91dGVycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghbUFkdmVydGlzZVRpbWVyLklzUnVubmluZygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNlbmRBZHZlcnRpc2VtZW50KCk7CisKKyAgICAgICAgICAgICAgICBtQWR2ZXJ0aXNlVGltZXIuU3RhcnQoCisgICAgICAgICAgICAgICAgICAgIFRpbWVyOjpTZWNUb01zZWMoa1JlZWRBZHZlcnRpc2VJbnRlcnZhbCksCisgICAgICAgICAgICAgICAgICAgIFRpbWVyOjpTZWNUb01zZWMoa1JlZWRBZHZlcnRpc2VJbnRlcnZhbCArIGtSZWVkQWR2ZXJ0aXNlSml0dGVyKSwKKyAgICAgICAgICAgICAgICAgICAgVHJpY2tsZVRpbWVyOjprTW9kZVBsYWluVGltZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgIC8vIGZhbGwgdGhyb3VnaAorCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgICAgIC8vIHZlcmlmeSBwYXRoIHRvIGxlYWRlcgorICAgICAgICBvdExvZ0RlYmdNbGUoR2V0SW5zdGFuY2UoKSwgIm5ldHdvcmsgaWQgdGltZW91dCA9ICVkIiwgR2V0TGVhZGVyQWdlKCkpOworCisgICAgICAgIGlmIChHZXRMZWFkZXJBZ2UoKSA+PSBtTmV0d29ya0lkVGltZW91dCkKKyAgICAgICAgeworICAgICAgICAgICAgQmVjb21lQ2hpbGQoa0F0dGFjaFNhbWUxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyb3V0ZXJTdGF0ZVVwZGF0ZSAmJiBHZXRBY3RpdmVSb3V0ZXJDb3VudCgpID4gbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG93bmdyYWRlIHRvIFJFRUQKKyAgICAgICAgICAgIEJlY29tZUNoaWxkKGtBdHRhY2hTYW1lMSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorCisgICAgICAgIC8vIHVwZGF0ZSByb3V0ZXIgaWQgc2VxdWVuY2UKKyAgICAgICAgaWYgKEdldExlYWRlckFnZSgpID49IGtSb3V0ZXJJZFNlcXVlbmNlUGVyaW9kKQorICAgICAgICB7CisgICAgICAgICAgICBtUm91dGVySWRTZXF1ZW5jZSsrOworICAgICAgICAgICAgbVJvdXRlcklkU2VxdWVuY2VMYXN0VXBkYXRlZCA9IFRpbWVyOjpHZXROb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtSXNSb3V0ZXJSZXN0b3JpbmdDaGlsZHJlbikKKyAgICB7CisgICAgICAgIGJvb2wgaGFzUmVzdG9yaW5nQ2hpbGRyZW4gPSBmYWxzZTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlUmVzdG9yZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCgmbUNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgICAgICBoYXNSZXN0b3JpbmdDaGlsZHJlbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBubyBjaGlsZCB0byByZXN0b3JlCisgICAgICAgIGlmICghaGFzUmVzdG9yaW5nQ2hpbGRyZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Jc1JvdXRlclJlc3RvcmluZ0NoaWxkcmVuID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB1cGRhdGUgY2hpbGRyZW4gc3RhdGUKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHRpbWVvdXQgPSAwOworCisgICAgICAgIHN3aXRjaCAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZDoKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3Q6CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVQYXJlbnRSZXF1ZXN0OgorICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVWYWxpZDoKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlUmVzdG9yZWQ6CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZUNoaWxkVXBkYXRlUmVxdWVzdDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSBUaW1lcjo6U2VjVG9Nc2VjKG1DaGlsZHJlbltpXS5HZXRUaW1lb3V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlTGlua1JlcXVlc3Q6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKFRpbWVyOjpHZXROb3coKSAtIG1DaGlsZHJlbltpXS5HZXRMYXN0SGVhcmQoKSkgPj0gdGltZW91dCkKKyAgICAgICAgeworICAgICAgICAgICAgUmVtb3ZlTmVpZ2hib3IobUNoaWxkcmVuW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHVwZGF0ZSByb3V0ZXIgc3RhdGUKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoVGltZXI6OkdldE5vdygpIC0gbVJvdXRlcnNbaV0uR2V0TGFzdEhlYXJkKCkpID49IFRpbWVyOjpTZWNUb01zZWMoa01heE5laWdoYm9yQWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW1vdmVOZWlnaGJvcihtUm91dGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIUlzUm91dGVySWRWYWxpZChtUm91dGVyc1tpXS5HZXROZXh0SG9wKCkpICYmCisgICAgICAgICAgICAgICAgICAgIEdldExpbmtDb3N0KGkpID49IGtNYXhSb3V0ZUNvc3QgJiYKKyAgICAgICAgICAgICAgICAgICAgKFRpbWVyOjpHZXROb3coKSAtIG1Sb3V0ZXJzW2ldLkdldExhc3RIZWFyZCgpKSA+PSBUaW1lcjo6U2VjVG9Nc2VjKGtNYXhMZWFkZXJUb1JvdXRlclRpbWVvdXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVJvdXRlcklkKGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1Sb3V0ZXJzW2ldLklzUmVjbGFpbURlbGF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChUaW1lcjo6R2V0Tm93KCkgLSBtUm91dGVyc1tpXS5HZXRMYXN0SGVhcmQoKSkgPj0KKyAgICAgICAgICAgICAgICAgICAgVGltZXI6OlNlY1RvTXNlYygoa01heExlYWRlclRvUm91dGVyVGltZW91dCArIGtSb3V0ZXJJZFJldXNlRGVsYXkpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2ldLlNldFJlY2xhaW1EZWxheShmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgU3luY2hyb25pemVDaGlsZE5ldHdvcmtEYXRhKCk7CisKKyAgICBtU3RhdGVVcGRhdGVUaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRQYXJlbnRSZXNwb25zZShDaGlsZCAqYUNoaWxkLCBjb25zdCBDaGFsbGVuZ2VUbHYgJmNoYWxsZW5nZSwgYm9vbCBhUm91dGVyc09ubHlSZXF1ZXN0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQxNl90IGRlbGF5OworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRQYXJlbnRSZXNwb25zZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua0ZyYW1lQ291bnRlcigqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRNbGVGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUmVzcG9uc2UoKm1lc3NhZ2UsIGNoYWxsZW5nZS5HZXRDaGFsbGVuZ2UoKSwgY2hhbGxlbmdlLkdldExlbmd0aCgpKSk7CisKKyAgICBhQ2hpbGQtPkdlbmVyYXRlQ2hhbGxlbmdlKCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hhbGxlbmdlKCptZXNzYWdlLCBhQ2hpbGQtPkdldENoYWxsZW5nZSgpLCBhQ2hpbGQtPkdldENoYWxsZW5nZVNpemUoKSkpOworCisgICAgaWYgKGlzQXNzaWduTGlua1F1YWxpdHkgJiYKKyAgICAgICAgKG1lbWNtcChtQWRkcjY0Lm04LCAmYUNoaWxkLT5HZXRFeHRBZGRyZXNzKCksIE9UX0VYVF9BRERSRVNTX1NJWkUpID09IDApKQorICAgIHsKKyAgICAgICAgLy8gdXNlIGFzc2lnbmVkIG9uZSB0byBlbnN1cmUgdGhlIGxpbmsgcXVhbGl0eQorICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGlua01hcmdpbigqbWVzc2FnZSwgbUFzc2lnbkxpbmtNYXJnaW4pKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBBcHBlbmRMaW5rTWFyZ2luKCptZXNzYWdlLCBhQ2hpbGQtPkdldExpbmtJbmZvKCkuR2V0TGlua01hcmdpbihHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ29ubmVjdGl2aXR5KCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFZlcnNpb24oKm1lc3NhZ2UpKTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIGRlc3RpbmF0aW9uLlNldElpZChhQ2hpbGQtPkdldEV4dEFkZHJlc3MoKSk7CisKKyAgICBpZiAoYVJvdXRlcnNPbmx5UmVxdWVzdCkKKyAgICB7CisgICAgICAgIGRlbGF5ID0gKG90UGxhdFJhbmRvbUdldCgpICUga1BhcmVudFJlc3BvbnNlTWF4RGVsYXlSb3V0ZXJzKSArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlbGF5ID0gKG90UGxhdFJhbmRvbUdldCgpICUga1BhcmVudFJlc3BvbnNlTWF4RGVsYXlBbGwpICsgMTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkRGVsYXllZFJlc3BvbnNlKCptZXNzYWdlLCBkZXN0aW5hdGlvbiwgZGVsYXkpKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiRGVsYXllZCBQYXJlbnQgUmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlVwZGF0ZUNoaWxkQWRkcmVzc2VzKGNvbnN0IEFkZHJlc3NSZWdpc3RyYXRpb25UbHYgJmFUbHYsIENoaWxkICZhQ2hpbGQpCit7CisgICAgY29uc3QgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5ICplbnRyeTsKKyAgICBJcDY6OkFkZHJlc3MgYWRkcmVzczsKKyAgICBMb3dwYW46OkNvbnRleHQgY29udGV4dDsKKyAgICBDaGlsZCAqY2hpbGQ7CisgICAgdWludDhfdCBjb3VudDsKKyAgICB1aW50OF90IGluZGV4OworICAgIGNoYXIgc3RyaW5nQnVmZmVyW0lwNjo6QWRkcmVzczo6a0lwNkFkZHJlc3NTdHJpbmdTaXplXTsKKworICAgIGFDaGlsZC5DbGVhcklwNkFkZHJlc3NlcygpOworCisgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgQ2hpbGQ6OmtNYXhJcDZBZGRyZXNzUGVyQ2hpbGQ7IGNvdW50KyspCisgICAgeworICAgICAgICBpZiAoKGVudHJ5ID0gYVRsdi5HZXRBZGRyZXNzRW50cnkoY291bnQpKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnRyeS0+SXNDb21wcmVzc2VkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHh4eCBjaGVjayBpZiBjb250ZXh0IGlkIGV4aXN0cworICAgICAgICAgICAgR2V0TmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoZW50cnktPkdldENvbnRleHRJZCgpLCBjb250ZXh0KTsKKyAgICAgICAgICAgIG1lbWNweSgmYWRkcmVzcywgY29udGV4dC5tUHJlZml4LCBCaXRWZWN0b3JCeXRlcyhjb250ZXh0Lm1QcmVmaXhMZW5ndGgpKTsKKyAgICAgICAgICAgIGFkZHJlc3MuU2V0SWlkKGVudHJ5LT5HZXRJaWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyZXNzID0gKmVudHJ5LT5HZXRJcDZBZGRyZXNzKCk7CisgICAgICAgIH0KKworICAgICAgICBhQ2hpbGQuR2V0SXA2QWRkcmVzcyhjb3VudCkgPSBhZGRyZXNzOworCisgICAgICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiQ2hpbGQgMHglMDR4IElQdjYgYWRkcmVzc1slZF09JXMiLCBhQ2hpbGQuR2V0UmxvYzE2KCksIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5Ub1N0cmluZyhzdHJpbmdCdWZmZXIsIHNpemVvZihzdHJpbmdCdWZmZXIpKSk7CisKKyAgICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIHNhbWUgYWRkcmVzcyBpcyBpbi11c2UgYnkgYW5vdGhlciBjaGlsZCwgaWYgc28KKyAgICAgICAgLy8gcmVtb3ZlIGl0LiBUaGlzIGltcGxlbWVudHMgImxhc3QtaW4gd2lucyIgZHVwbGljYXRlIGFkZHJlc3MKKyAgICAgICAgLy8gcmVzb2x1dGlvbiBwb2xpY3kuCisgICAgICAgIC8vCisgICAgICAgIC8vIER1cGxpY2F0ZSBhZGRyZXNzZXMgY2FuIG9jY3VyIGlmIGEgcHJldmlvdXNseSBhdHRhY2hlZCBjaGlsZAorICAgICAgICAvLyBhdHRhY2hlcyB0byBzYW1lIHBhcmVudCBhZ2FpbiAoYWZ0ZXIgYSByZXNldCwgbWVtb3J5IHdpcGUpIHVzaW5nCisgICAgICAgIC8vIGEgbmV3IHJhbmRvbSBleHRlbmRlZCBhZGRyZXNzIGJlZm9yZSB0aGUgb2xkIGVudHJ5IGluIHRoZSBjaGlsZAorICAgICAgICAvLyB0YWJsZSBpcyB0aW1lZCBvdXQgYW5kIHRoZW4gdHJ5aW5nIHRvIHJlZ2lzdGVyIGl0cyBnbG9iYWxseSB1bmlxdWUKKyAgICAgICAgLy8gSVB2NiBhZGRyZXNzIGFzIHRoZSBuZXcgY2hpbGQuCisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoaWxkID0gJm1DaGlsZHJlbltpXTsKKworICAgICAgICAgICAgaWYgKCFjaGlsZC0+SXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSB8fCAoY2hpbGQgPT0gJmFDaGlsZCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaGlsZC0+RmluZElwNkFkZHJlc3MoYWRkcmVzcywgJmluZGV4KSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoaWxkLT5SZW1vdmVJcDZBZGRyZXNzKGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb3VudCA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJDaGlsZCAweCUwNHggaGFzIG5vIHJlZ2lzdGVyZWQgSVB2NiBhZGRyZXNzIiwgYUNoaWxkLkdldFJsb2MxNigpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJDaGlsZCAweCUwNHggaGFzICVkIHJlZ2lzdGVyZWQgSVB2NiBhZGRyZXNzJXMiLCBhQ2hpbGQuR2V0UmxvYzE2KCksIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgKGNvdW50ID09IDEpID8gIiIgOiAiZXMiKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoc3RyaW5nQnVmZmVyKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlQ2hpbGRJZFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqdGhyZWFkTWVzc2FnZUluZm8gPSBzdGF0aWNfY2FzdDxjb25zdCBUaHJlYWRNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8uR2V0TGlua0luZm8oKSk7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgUmVzcG9uc2VUbHYgcmVzcG9uc2U7CisgICAgTGlua0ZyYW1lQ291bnRlclRsdiBsaW5rRnJhbWVDb3VudGVyOworICAgIE1sZUZyYW1lQ291bnRlclRsdiBtbGVGcmFtZUNvdW50ZXI7CisgICAgTW9kZVRsdiBtb2RlOworICAgIFRpbWVvdXRUbHYgdGltZW91dDsKKyAgICBBZGRyZXNzUmVnaXN0cmF0aW9uVGx2IGFkZHJlc3M7CisgICAgVGx2UmVxdWVzdFRsdiB0bHZSZXF1ZXN0OworICAgIEFjdGl2ZVRpbWVzdGFtcFRsdiBhY3RpdmVUaW1lc3RhbXA7CisgICAgUGVuZGluZ1RpbWVzdGFtcFRsdiBwZW5kaW5nVGltZXN0YW1wOworICAgIENoaWxkICpjaGlsZDsKKyAgICB1aW50OF90IG51bVRsdnM7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIElEIFJlcXVlc3QiKTsKKworICAgIC8vIG9ubHkgcHJvY2VzcyBtZXNzYWdlIHdoZW4gb3BlcmF0aW5nIGFzIGEgY2hpbGQsIHJvdXRlciwgb3IgbGVhZGVyCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID49IE9UX0RFVklDRV9ST0xFX0NISUxELCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgLy8gRmluZCBDaGlsZAorICAgIG1hY0FkZHIuU2V0KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKworICAgIFZlcmlmeU9yRXhpdCgoY2hpbGQgPSBGaW5kQ2hpbGQobWFjQWRkcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICAvLyBSZXNwb25zZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSksIHJlc3BvbnNlKSk7CisgICAgVmVyaWZ5T3JFeGl0KHJlc3BvbnNlLklzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAgICBtZW1jbXAocmVzcG9uc2UuR2V0UmVzcG9uc2UoKSwgY2hpbGQtPkdldENoYWxsZW5nZSgpLCBjaGlsZC0+R2V0Q2hhbGxlbmdlU2l6ZSgpKSA9PSAwLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKworICAgIC8vIExpbmstTGF5ZXIgRnJhbWUgQ291bnRlcgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGlua0ZyYW1lQ291bnRlciwgc2l6ZW9mKGxpbmtGcmFtZUNvdW50ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rRnJhbWVDb3VudGVyKSk7CisgICAgVmVyaWZ5T3JFeGl0KGxpbmtGcmFtZUNvdW50ZXIuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIE1MRSBGcmFtZSBDb3VudGVyCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNbGVGcmFtZUNvdW50ZXIsIHNpemVvZihtbGVGcmFtZUNvdW50ZXIpLCBtbGVGcmFtZUNvdW50ZXIpID09CisgICAgICAgIE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobWxlRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1sZUZyYW1lQ291bnRlci5TZXRGcmFtZUNvdW50ZXIobGlua0ZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgfQorCisgICAgLy8gTW9kZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTW9kZSwgc2l6ZW9mKG1vZGUpLCBtb2RlKSk7CisgICAgVmVyaWZ5T3JFeGl0KG1vZGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFRpbWVvdXQKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RpbWVvdXQsIHNpemVvZih0aW1lb3V0KSwgdGltZW91dCkpOworICAgIFZlcmlmeU9yRXhpdCh0aW1lb3V0LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBJcDYgQWRkcmVzcworICAgIGFkZHJlc3MuU2V0TGVuZ3RoKDApOworCisgICAgaWYgKChtb2RlLkdldE1vZGUoKSAmIE1vZGVUbHY6OmtNb2RlRkZEKSA9PSAwKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBZGRyZXNzUmVnaXN0cmF0aW9uLCBzaXplb2YoYWRkcmVzcyksIGFkZHJlc3MpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICAvLyBUTFYgUmVxdWVzdAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpICYmIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkgPD0gQ2hpbGQ6OmtNYXhSZXF1ZXN0VGx2cywKKyAgICAgICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBBY3RpdmUgVGltZXN0YW1wCisgICAgYWN0aXZlVGltZXN0YW1wLlNldExlbmd0aCgwKTsKKworICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWN0aXZlVGltZXN0YW1wLCBzaXplb2YoYWN0aXZlVGltZXN0YW1wKSwgYWN0aXZlVGltZXN0YW1wKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFjdGl2ZVRpbWVzdGFtcC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgIH0KKworICAgIC8vIFBlbmRpbmcgVGltZXN0YW1wCisgICAgcGVuZGluZ1RpbWVzdGFtcC5TZXRMZW5ndGgoMCk7CisKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1BlbmRpbmdUaW1lc3RhbXAsIHNpemVvZihwZW5kaW5nVGltZXN0YW1wKSwgcGVuZGluZ1RpbWVzdGFtcCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChwZW5kaW5nVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIGZyb20gcm91dGVyIHRhYmxlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCAmJgorICAgICAgICAgICAgbWVtY21wKCZtUm91dGVyc1tpXS5HZXRFeHRBZGRyZXNzKCksICZtYWNBZGRyLCBzaXplb2YobWFjQWRkcikpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZU5laWdoYm9yKG1Sb3V0ZXJzW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNoaWxkLT5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICB7CisgICAgICAgIGNoaWxkLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3QpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSZW1vdmVTdG9yZWRDaGlsZChjaGlsZC0+R2V0UmxvYzE2KCkpOworCisgICAgICAgIGlmICghY2hpbGQtPklzUnhPbldoZW5JZGxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5DbGVhckNoaWxkSW5kaXJlY3RNZXNzYWdlcygqY2hpbGQpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBjaGlsZC0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgY2hpbGQtPlNldExpbmtGcmFtZUNvdW50ZXIobGlua0ZyYW1lQ291bnRlci5HZXRGcmFtZUNvdW50ZXIoKSk7CisgICAgY2hpbGQtPlNldE1sZUZyYW1lQ291bnRlcihtbGVGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIGNoaWxkLT5TZXRLZXlTZXF1ZW5jZShhS2V5U2VxdWVuY2UpOworICAgIGNoaWxkLT5TZXREZXZpY2VNb2RlKG1vZGUuR2V0TW9kZSgpKTsKKyAgICBjaGlsZC0+R2V0TGlua0luZm8oKS5BZGRSc3MobmV0aWYuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpLCB0aHJlYWRNZXNzYWdlSW5mby0+bVJzcyk7CisgICAgY2hpbGQtPlNldFRpbWVvdXQodGltZW91dC5HZXRUaW1lb3V0KCkpOworCisgICAgaWYgKG1vZGUuR2V0TW9kZSgpICYgTW9kZVRsdjo6a01vZGVGdWxsTmV0d29ya0RhdGEpCisgICAgeworICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKG1MZWFkZXJEYXRhLkdldERhdGFWZXJzaW9uKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKG1MZWFkZXJEYXRhLkdldFN0YWJsZURhdGFWZXJzaW9uKCkpOworICAgIH0KKworICAgIFVwZGF0ZUNoaWxkQWRkcmVzc2VzKGFkZHJlc3MsICpjaGlsZCk7CisKKyAgICBjaGlsZC0+Q2xlYXJSZXF1ZXN0VGx2cygpOworCisgICAgZm9yIChudW1UbHZzID0gMDsgbnVtVGx2cyA8IHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCk7IG51bVRsdnMrKykKKyAgICB7CisgICAgICAgIGNoaWxkLT5TZXRSZXF1ZXN0VGx2KG51bVRsdnMsIHRsdlJlcXVlc3QuR2V0VGx2cygpW251bVRsdnNdKTsKKyAgICB9CisKKyAgICBpZiAoYWN0aXZlVGltZXN0YW1wLkdldExlbmd0aCgpID09IDAgfHwKKyAgICAgICAgbmV0aWYuR2V0QWN0aXZlRGF0YXNldCgpLkNvbXBhcmUoYWN0aXZlVGltZXN0YW1wKSAhPSAwKQorICAgIHsKKyAgICAgICAgY2hpbGQtPlNldFJlcXVlc3RUbHYobnVtVGx2cysrLCBUbHY6OmtBY3RpdmVEYXRhc2V0KTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ1RpbWVzdGFtcC5HZXRMZW5ndGgoKSA9PSAwIHx8CisgICAgICAgIG5ldGlmLkdldFBlbmRpbmdEYXRhc2V0KCkuQ29tcGFyZShwZW5kaW5nVGltZXN0YW1wKSAhPSAwKQorICAgIHsKKyAgICAgICAgY2hpbGQtPlNldFJlcXVlc3RUbHYobnVtVGx2cysrLCBUbHY6OmtQZW5kaW5nRGF0YXNldCk7CisgICAgfQorCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIGNoaWxkLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlQ2hpbGRJZFJlcXVlc3QpOworICAgICAgICBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjprSGF2ZUNoaWxkSWRSZXF1ZXN0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRDaGlsZElkUmVzcG9uc2UoY2hpbGQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZUNoaWxkVXBkYXRlUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga01heFJlc3BvbnNlVGx2cyA9IDEwOworCisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWFjOjpFeHRBZGRyZXNzIG1hY0FkZHI7CisgICAgTW9kZVRsdiBtb2RlOworICAgIENoYWxsZW5nZVRsdiBjaGFsbGVuZ2U7CisgICAgQWRkcmVzc1JlZ2lzdHJhdGlvblRsdiBhZGRyZXNzOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBUaW1lb3V0VGx2IHRpbWVvdXQ7CisgICAgQ2hpbGQgKmNoaWxkOworICAgIFRsdlJlcXVlc3RUbHYgdGx2UmVxdWVzdDsKKyAgICB1aW50OF90IHRsdnNba01heFJlc3BvbnNlVGx2c107CisgICAgdWludDhfdCB0bHZzbGVuZ3RoID0gMDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgZnJvbSBjaGlsZCIpOworCisgICAgLy8gTW9kZQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTW9kZSwgc2l6ZW9mKG1vZGUpLCBtb2RlKSk7CisgICAgVmVyaWZ5T3JFeGl0KG1vZGUuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIEZpbmQgQ2hpbGQKKyAgICBtYWNBZGRyLlNldChhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSk7CisgICAgY2hpbGQgPSBGaW5kQ2hpbGQobWFjQWRkcik7CisKKyAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtTb3VyY2VBZGRyZXNzOworCisgICAgLy8gTm90IHByb2NlZWQgaWYgdGhlIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IGlzIGZyb20gdGhlIHBlZXIgd2hpY2ggaXMgbm90IHRoZSBkZXZpY2UncyBjaGlsZCBvcgorICAgIC8vIHdoaWNoIHdhcyB0aGUgZGV2aWNlJ3MgY2hpbGQgYnV0IGJlY29tZXMgaW52YWxpZC4KKyAgICBpZiAoY2hpbGQgPT0gTlVMTCB8fCBjaGlsZC0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCkKKyAgICB7CisgICAgICAgIC8vIEZvciBpbnZhbGlkIG5vbi1zbGVlcHkgY2hpbGQsIFNlbmQgQ2hpbGQgVXBkYXRlIFJlc3BvbnNlIHdpdGggc3RhdHVzIFRMViAoZXJyb3IpCisgICAgICAgIGlmIChtb2RlLkdldE1vZGUoKSAmIE1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKQorICAgICAgICB7CisgICAgICAgICAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtTdGF0dXM7CisgICAgICAgICAgICBTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShOVUxMLCBhTWVzc2FnZUluZm8sIHRsdnMsIHRsdnNsZW5ndGgsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdygpOworICAgIH0KKworICAgIGNoaWxkLT5TZXREZXZpY2VNb2RlKG1vZGUuR2V0TW9kZSgpKTsKKyAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtNb2RlOworCisgICAgLy8gUGFyZW50IE1VU1QgaW5jbHVkZSBMZWFkZXIgRGF0YSBUTFYgaW4gQ2hpbGQgVXBkYXRlIFJlc3BvbnNlCisgICAgdGx2c1t0bHZzbGVuZ3RoKytdID0gVGx2OjprTGVhZGVyRGF0YTsKKworICAgIC8vIENoYWxsZW5nZQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQ2hhbGxlbmdlLCBzaXplb2YoY2hhbGxlbmdlKSwgY2hhbGxlbmdlKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGNoYWxsZW5nZS5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtSZXNwb25zZTsKKyAgICAgICAgdGx2c1t0bHZzbGVuZ3RoKytdID0gVGx2OjprTWxlRnJhbWVDb3VudGVyOworICAgICAgICB0bHZzW3RsdnNsZW5ndGgrK10gPSBUbHY6OmtMaW5rRnJhbWVDb3VudGVyOworICAgIH0KKworICAgIC8vIElwNiBBZGRyZXNzIFRMVgorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprQWRkcmVzc1JlZ2lzdHJhdGlvbiwgc2l6ZW9mKGFkZHJlc3MpLCBhZGRyZXNzKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFkZHJlc3MuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgVXBkYXRlQ2hpbGRBZGRyZXNzZXMoYWRkcmVzcywgKmNoaWxkKTsKKyAgICAgICAgdGx2c1t0bHZzbGVuZ3RoKytdID0gVGx2OjprQWRkcmVzc1JlZ2lzdHJhdGlvbjsKKyAgICB9CisKKyAgICAvLyBMZWFkZXIgRGF0YQorICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprTGVhZGVyRGF0YSwgc2l6ZW9mKGxlYWRlckRhdGEpLCBsZWFkZXJEYXRhKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGxlYWRlckRhdGEuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICAvLyBUaW1lb3V0CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtUaW1lb3V0LCBzaXplb2YodGltZW91dCksIHRpbWVvdXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQodGltZW91dC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBjaGlsZC0+U2V0VGltZW91dCh0aW1lb3V0LkdldFRpbWVvdXQoKSk7CisgICAgICAgIHRsdnNbdGx2c2xlbmd0aCsrXSA9IFRsdjo6a1RpbWVvdXQ7CisgICAgfQorCisgICAgLy8gVExWIFJlcXVlc3QKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1RsdlJlcXVlc3QsIHNpemVvZih0bHZSZXF1ZXN0KSwgdGx2UmVxdWVzdCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgdGx2OworICAgICAgICBUbHZSZXF1ZXN0SXRlcmF0b3IgaXRlcmF0b3IgPSAgVExWUkVRVUVTVFRMVl9JVEVSQVRPUl9JTklUOworCisgICAgICAgIFZlcmlmeU9yRXhpdCh0bHZSZXF1ZXN0LklzVmFsaWQoKSAmJiB0bHZSZXF1ZXN0LkdldExlbmd0aCgpIDw9IChDaGlsZDo6a01heFJlcXVlc3RUbHZzIC0gdGx2c2xlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICB3aGlsZSAodGx2UmVxdWVzdC5HZXROZXh0VGx2KGl0ZXJhdG9yLCB0bHYpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEhlcmUgc2tpcHMgVGx2OjprTGVhZGVyRGF0YSBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgaWYgKHRsdiAhPSBUbHY6OmtMZWFkZXJEYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdnNbdGx2c2xlbmd0aCsrXSA9IHRsdjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNoaWxkLT5TZXRMYXN0SGVhcmQoVGltZXI6OkdldE5vdygpKTsKKworICAgIGlmIChjaGlsZC0+SXNTdGF0ZVJlc3RvcmluZygpKQorICAgIHsKKyAgICAgICAgU2V0Q2hpbGRTdGF0ZVRvVmFsaWQoY2hpbGQpOworICAgICAgICBjaGlsZC0+U2V0S2V5U2VxdWVuY2UoYUtleVNlcXVlbmNlKTsKKyAgICB9CisKKyAgICBTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShjaGlsZCwgYU1lc3NhZ2VJbmZvLCB0bHZzLCB0bHZzbGVuZ3RoLCAmY2hhbGxlbmdlKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpIYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKnRocmVhZE1lc3NhZ2VJbmZvID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGhyZWFkTWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvLkdldExpbmtJbmZvKCkpOworICAgIE1hYzo6RXh0QWRkcmVzcyBtYWNBZGRyOworICAgIFNvdXJjZUFkZHJlc3NUbHYgc291cmNlQWRkcmVzczsKKyAgICBUaW1lb3V0VGx2IHRpbWVvdXQ7CisgICAgQWRkcmVzc1JlZ2lzdHJhdGlvblRsdiBhZGRyZXNzOworICAgIFJlc3BvbnNlVGx2IHJlc3BvbnNlOworICAgIExpbmtGcmFtZUNvdW50ZXJUbHYgbGlua0ZyYW1lQ291bnRlcjsKKyAgICBNbGVGcmFtZUNvdW50ZXJUbHYgbWxlRnJhbWVDb3VudGVyOworICAgIExlYWRlckRhdGFUbHYgbGVhZGVyRGF0YTsKKyAgICBDaGlsZCAqY2hpbGQ7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIENoaWxkIFVwZGF0ZSBSZXNwb25zZSBmcm9tIGNoaWxkIik7CisKKyAgICAvLyBGaW5kIENoaWxkCisgICAgbWFjQWRkci5TZXQoYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworCisgICAgVmVyaWZ5T3JFeGl0KChjaGlsZCA9IEZpbmRDaGlsZChtYWNBZGRyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgLy8gU291cmNlIEFkZHJlc3MKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1NvdXJjZUFkZHJlc3MsIHNpemVvZihzb3VyY2VBZGRyZXNzKSwgc291cmNlQWRkcmVzcykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChzb3VyY2VBZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChjaGlsZC0+R2V0UmxvYzE2KCkgPT0gc291cmNlQWRkcmVzcy5HZXRSbG9jMTYoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gUmVzcG9uc2UKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a1Jlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCByZXNwb25zZSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChyZXNwb25zZS5Jc1ZhbGlkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChyZXNwb25zZS5HZXRSZXNwb25zZSgpLCBjaGlsZC0+R2V0Q2hhbGxlbmdlKCksIGNoaWxkLT5HZXRDaGFsbGVuZ2VTaXplKCkpID09IDAsCisgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1NFQ1VSSVRZKTsKKyAgICB9CisKKyAgICAvLyBMaW5rLUxheWVyIEZyYW1lIENvdW50ZXIKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xpbmtGcmFtZUNvdW50ZXIsIHNpemVvZihsaW5rRnJhbWVDb3VudGVyKSwgbGlua0ZyYW1lQ291bnRlcikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChsaW5rRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIGNoaWxkLT5TZXRMaW5rRnJhbWVDb3VudGVyKGxpbmtGcmFtZUNvdW50ZXIuR2V0RnJhbWVDb3VudGVyKCkpOworICAgIH0KKworICAgIC8vIE1MRSBGcmFtZSBDb3VudGVyCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtNbGVGcmFtZUNvdW50ZXIsIHNpemVvZihtbGVGcmFtZUNvdW50ZXIpLCBtbGVGcmFtZUNvdW50ZXIpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobWxlRnJhbWVDb3VudGVyLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIGNoaWxkLT5TZXRNbGVGcmFtZUNvdW50ZXIobWxlRnJhbWVDb3VudGVyLkdldEZyYW1lQ291bnRlcigpKTsKKyAgICB9CisKKyAgICAvLyBUaW1lb3V0CisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtUaW1lb3V0LCBzaXplb2YodGltZW91dCksIHRpbWVvdXQpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQodGltZW91dC5Jc1ZhbGlkKCksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworICAgICAgICBjaGlsZC0+U2V0VGltZW91dCh0aW1lb3V0LkdldFRpbWVvdXQoKSk7CisgICAgfQorCisgICAgLy8gSXA2IEFkZHJlc3MKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb24sIHNpemVvZihhZGRyZXNzKSwgYWRkcmVzcykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhZGRyZXNzLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgIFVwZGF0ZUNoaWxkQWRkcmVzc2VzKGFkZHJlc3MsICpjaGlsZCk7CisgICAgfQorCisgICAgLy8gTGVhZGVyIERhdGEKKyAgICBpZiAoVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRsdjo6a0xlYWRlckRhdGEsIHNpemVvZihsZWFkZXJEYXRhKSwgbGVhZGVyRGF0YSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZWFkZXJEYXRhLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKGxlYWRlckRhdGEuR2V0RGF0YVZlcnNpb24oKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjaGlsZC0+U2V0TmV0d29ya0RhdGFWZXJzaW9uKGxlYWRlckRhdGEuR2V0U3RhYmxlRGF0YVZlcnNpb24oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTZXRDaGlsZFN0YXRlVG9WYWxpZChjaGlsZCk7CisgICAgY2hpbGQtPlNldExhc3RIZWFyZChUaW1lcjo6R2V0Tm93KCkpOworICAgIGNoaWxkLT5TZXRLZXlTZXF1ZW5jZShhS2V5U2VxdWVuY2UpOworICAgIGNoaWxkLT5HZXRMaW5rSW5mbygpLkFkZFJzcyhHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSwgdGhyZWFkTWVzc2FnZUluZm8tPm1Sc3MpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZURhdGFSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBUbHZSZXF1ZXN0VGx2IHRsdlJlcXVlc3Q7CisgICAgQWN0aXZlVGltZXN0YW1wVGx2IGFjdGl2ZVRpbWVzdGFtcDsKKyAgICBQZW5kaW5nVGltZXN0YW1wVGx2IHBlbmRpbmdUaW1lc3RhbXA7CisgICAgdWludDhfdCB0bHZzWzRdOworICAgIHVpbnQ4X3QgbnVtVGx2czsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgRGF0YSBSZXF1ZXN0Iik7CisKKyAgICAvLyBUTFYgUmVxdWVzdAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprVGx2UmVxdWVzdCwgc2l6ZW9mKHRsdlJlcXVlc3QpLCB0bHZSZXF1ZXN0KSk7CisgICAgVmVyaWZ5T3JFeGl0KHRsdlJlcXVlc3QuSXNWYWxpZCgpICYmIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKHRsdnMpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIEFjdGl2ZSBUaW1lc3RhbXAKKyAgICBhY3RpdmVUaW1lc3RhbXAuU2V0TGVuZ3RoKDApOworCisgICAgaWYgKFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUbHY6OmtBY3RpdmVUaW1lc3RhbXAsIHNpemVvZihhY3RpdmVUaW1lc3RhbXApLCBhY3RpdmVUaW1lc3RhbXApID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoYWN0aXZlVGltZXN0YW1wLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgfQorCisgICAgLy8gUGVuZGluZyBUaW1lc3RhbXAKKyAgICBwZW5kaW5nVGltZXN0YW1wLlNldExlbmd0aCgwKTsKKworICAgIGlmIChUbHY6OkdldFRsdihhTWVzc2FnZSwgVGx2OjprUGVuZGluZ1RpbWVzdGFtcCwgc2l6ZW9mKHBlbmRpbmdUaW1lc3RhbXApLCBwZW5kaW5nVGltZXN0YW1wKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBlbmRpbmdUaW1lc3RhbXAuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICB9CisKKyAgICBtZW1zZXQodGx2cywgVGx2OjprSW52YWxpZCwgc2l6ZW9mKHRsdnMpKTsKKyAgICBtZW1jcHkodGx2cywgdGx2UmVxdWVzdC5HZXRUbHZzKCksIHRsdlJlcXVlc3QuR2V0TGVuZ3RoKCkpOworICAgIG51bVRsdnMgPSB0bHZSZXF1ZXN0LkdldExlbmd0aCgpOworCisgICAgaWYgKGFjdGl2ZVRpbWVzdGFtcC5HZXRMZW5ndGgoKSA9PSAwIHx8CisgICAgICAgIG5ldGlmLkdldEFjdGl2ZURhdGFzZXQoKS5Db21wYXJlKGFjdGl2ZVRpbWVzdGFtcCkpCisgICAgeworICAgICAgICB0bHZzW251bVRsdnMrK10gPSBUbHY6OmtBY3RpdmVEYXRhc2V0OworICAgIH0KKworICAgIGlmIChwZW5kaW5nVGltZXN0YW1wLkdldExlbmd0aCgpID09IDAgfHwKKyAgICAgICAgbmV0aWYuR2V0UGVuZGluZ0RhdGFzZXQoKS5Db21wYXJlKHBlbmRpbmdUaW1lc3RhbXApKQorICAgIHsKKyAgICAgICAgdGx2c1tudW1UbHZzKytdID0gVGx2OjprUGVuZGluZ0RhdGFzZXQ7CisgICAgfQorCisgICAgU2VuZERhdGFSZXNwb25zZShhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgdGx2cywgbnVtVGx2cywgMCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6SGFuZGxlTmV0d29ya0RhdGFVcGRhdGVSb3V0ZXIodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCB0bHZzW10gPSB7VGx2OjprTmV0d29ya0RhdGF9OworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICB1aW50MTZfdCBkZWxheTsKKworICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ST1VURVIgfHwgbVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZmMDIpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNigweDAwMDEpOworCisgICAgZGVsYXkgPSAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKSA/IDAgOiAob3RQbGF0UmFuZG9tR2V0KCkgJSBrVW5zb2xpY2l0ZWREYXRhUmVzcG9uc2VKaXR0ZXIpOworICAgIFNlbmREYXRhUmVzcG9uc2UoZGVzdGluYXRpb24sIHRsdnMsIHNpemVvZih0bHZzKSwgZGVsYXkpOworCisgICAgU3luY2hyb25pemVDaGlsZE5ldHdvcmtEYXRhKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpTeW5jaHJvbml6ZUNoaWxkTmV0d29ya0RhdGEodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgVmVyaWZ5T3JFeGl0KG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX1JPVVRFUiB8fCBtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgQ2hpbGQgKmNoaWxkID0gJm1DaGlsZHJlbltpXTsKKyAgICAgICAgdWludDhfdCB2ZXJzaW9uOworCisgICAgICAgIGlmIChjaGlsZC0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgfHwgY2hpbGQtPklzUnhPbldoZW5JZGxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKQorICAgICAgICB7CisgICAgICAgICAgICB2ZXJzaW9uID0gbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRWZXJzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB2ZXJzaW9uID0gbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRTdGFibGVWZXJzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hpbGQtPkdldE5ldHdvcmtEYXRhVmVyc2lvbigpID09IHZlcnNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KGNoaWxkKSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKK290RXJyb3IgTWxlUm91dGVyOjpTZXRTdGVlcmluZ0RhdGEob3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG51bGxFeHRBZGRyW09UX0VYVF9BRERSRVNTX1NJWkVdOworICAgIHVpbnQ4X3QgYWxsb3dBbnlFeHRBZGRyW09UX0VYVF9BRERSRVNTX1NJWkVdOworCisgICAgbWVtc2V0KG51bGxFeHRBZGRyLCAwLCBzaXplb2YobnVsbEV4dEFkZHIpKTsKKyAgICBtZW1zZXQoYWxsb3dBbnlFeHRBZGRyLCAweEZGLCBzaXplb2YoYWxsb3dBbnlFeHRBZGRyKSk7CisKKyAgICBtU3RlZXJpbmdEYXRhLkluaXQoKTsKKworICAgIGlmICgoYUV4dEFkZHJlc3MgPT0gTlVMTCkgfHwgKG1lbWNtcChhRXh0QWRkcmVzcywgJm51bGxFeHRBZGRyLCBzaXplb2YobnVsbEV4dEFkZHIpKSA9PSAwKSkKKyAgICB7CisgICAgICAgIC8vIENsZWFyIHN0ZWVyaW5nIGRhdGEKKyAgICAgICAgbVN0ZWVyaW5nRGF0YS5DbGVhcigpOworICAgIH0KKyAgICBlbHNlIGlmIChtZW1jbXAoYUV4dEFkZHJlc3MsICZhbGxvd0FueUV4dEFkZHIsIHNpemVvZihhbGxvd0FueUV4dEFkZHIpKSA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gU2V0IHN0ZWVyaW5nIGRhdGEgdG8gMHhGRgorICAgICAgICBtU3RlZXJpbmdEYXRhLlNldExlbmd0aCgxKTsKKyAgICAgICAgbVN0ZWVyaW5nRGF0YS5TZXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gU2V0IGJsb29tIGZpbHRlciB3aXRoIHRoZSBleHRlbmRlZCBhZGRyZXNzIHBhc3NlZCBpbgorICAgICAgICBtU3RlZXJpbmdEYXRhLkNvbXB1dGVCbG9vbUZpbHRlcihhRXh0QWRkcmVzcyk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKworb3RFcnJvciBNbGVSb3V0ZXI6OkhhbmRsZURpc2NvdmVyeVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFRsdiB0bHY7CisgICAgTWVzaENvUDo6VGx2IG1lc2hjb3BUbHY7CisgICAgTWVzaENvUDo6RGlzY292ZXJ5UmVxdWVzdFRsdiBkaXNjb3ZlcnlSZXF1ZXN0OworICAgIE1lc2hDb1A6OkV4dGVuZGVkUGFuSWRUbHYgZXh0UGFuSWQ7CisgICAgdWludDE2X3Qgb2Zmc2V0OworICAgIHVpbnQxNl90IGVuZDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZGlzY292ZXJ5IHJlcXVlc3QiKTsKKworICAgIC8vIG9ubHkgUm91dGVycyBhbmQgUkVFRHMgcmVzcG9uZAorICAgIFZlcmlmeU9yRXhpdCgobURldmljZU1vZGUgJiBNb2RlVGx2OjprTW9kZUZGRCkgIT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIC8vIGZpbmQgTUxFIERpc2NvdmVyeSBUTFYKKyAgICBWZXJpZnlPckV4aXQoVGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIFRsdjo6a0Rpc2NvdmVyeSwgb2Zmc2V0KSA9PSBPVF9FUlJPUl9OT05FLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgb2Zmc2V0ICs9IHNpemVvZih0bHYpOworICAgIGVuZCA9IG9mZnNldCArIHNpemVvZih0bHYpICsgdGx2LkdldExlbmd0aCgpOworCisgICAgd2hpbGUgKG9mZnNldCA8IGVuZCkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YobWVzaGNvcFRsdiksICZtZXNoY29wVGx2KTsKKworICAgICAgICBzd2l0Y2ggKG1lc2hjb3BUbHYuR2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTWVzaENvUDo6VGx2OjprRGlzY292ZXJ5UmVxdWVzdDoKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoZGlzY292ZXJ5UmVxdWVzdCksICZkaXNjb3ZlcnlSZXF1ZXN0KTsKKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChkaXNjb3ZlcnlSZXF1ZXN0LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgICAgIGlmIChkaXNjb3ZlcnlSZXF1ZXN0LklzSm9pbmVyKCkpCisgICAgICAgICAgICB7CisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCisgICAgICAgICAgICAgICAgaWYgKCFtU3RlZXJpbmdEYXRhLklzQ2xlYXJlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgLy8gaWYgc3RlZXJpbmcgZGF0YSBpcyBub3Qgc2V0IG91dCBvZiBiYW5kLCBmYWxsIGJhY2sgdG8gbmV0d29yayBkYXRhCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuSXNKb2luaW5nRW5hYmxlZCgpLCBlcnJvciA9IE9UX0VSUk9SX05PVF9DQVBBQkxFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWVzaENvUDo6VGx2OjprRXh0ZW5kZWRQYW5JZDoKKyAgICAgICAgICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBzaXplb2YoZXh0UGFuSWQpLCAmZXh0UGFuSWQpOworICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KGV4dFBhbklkLklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQobWVtY21wKG5ldGlmLkdldE1hYygpLkdldEV4dGVuZGVkUGFuSWQoKSwgZXh0UGFuSWQuR2V0RXh0ZW5kZWRQYW5JZCgpLCBPVF9FWFRfUEFOX0lEX1NJWkUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKG1lc2hjb3BUbHYpICsgbWVzaGNvcFRsdi5HZXRMZW5ndGgoKTsKKyAgICB9CisKKyAgICBlcnJvciA9IFNlbmREaXNjb3ZlcnlSZXNwb25zZShhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKSwgYU1lc3NhZ2UuR2V0UGFuSWQoKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TG9nV2Fybk1sZUVycihHZXRJbnN0YW5jZSgpLCBlcnJvciwgIkZhaWxlZCB0byBwcm9jZXNzIERpc2NvdmVyeSBSZXF1ZXN0Iik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZERpc2NvdmVyeVJlc3BvbnNlKGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCB1aW50MTZfdCBhUGFuSWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBNZXNzYWdlICptZXNzYWdlOworICAgIHVpbnQxNl90IHN0YXJ0T2Zmc2V0OworICAgIFRsdiB0bHY7CisgICAgTWVzaENvUDo6RGlzY292ZXJ5UmVzcG9uc2VUbHYgZGlzY292ZXJ5UmVzcG9uc2U7CisgICAgTWVzaENvUDo6RXh0ZW5kZWRQYW5JZFRsdiBleHRQYW5JZDsKKyAgICBNZXNoQ29QOjpOZXR3b3JrTmFtZVRsdiBuZXR3b3JrTmFtZTsKKyAgICBNZXNoQ29QOjpKb2luZXJVZHBQb3J0VGx2IGpvaW5lclVkcFBvcnQ7CisgICAgTWVzaENvUDo6VGx2ICpzdGVlcmluZ0RhdGE7CisgICAgdWludDE2X3QgZGVsYXk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgbWVzc2FnZS0+U2V0U3ViVHlwZShNZXNzYWdlOjprU3ViVHlwZU1sZURpc2NvdmVyUmVzcG9uc2UpOworICAgIG1lc3NhZ2UtPlNldFBhbklkKGFQYW5JZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZERpc2NvdmVyeVJlc3BvbnNlKSk7CisKKyAgICAvLyBEaXNjb3ZlcnkgVExWCisgICAgdGx2LlNldFR5cGUoVGx2OjprRGlzY292ZXJ5KTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZ0bHYsIHNpemVvZih0bHYpKSk7CisKKyAgICBzdGFydE9mZnNldCA9IG1lc3NhZ2UtPkdldExlbmd0aCgpOworCisgICAgLy8gRGlzY292ZXJ5IFJlc3BvbnNlIFRMVgorICAgIGRpc2NvdmVyeVJlc3BvbnNlLkluaXQoKTsKKyAgICBkaXNjb3ZlcnlSZXNwb25zZS5TZXRWZXJzaW9uKGtWZXJzaW9uKTsKKworICAgIGlmIChuZXRpZi5HZXRLZXlNYW5hZ2VyKCkuR2V0U2VjdXJpdHlQb2xpY3lGbGFncygpICYgT1RfU0VDVVJJVFlfUE9MSUNZX05BVElWRV9DT01NSVNTSU9OSU5HKQorICAgIHsKKyAgICAgICAgZGlzY292ZXJ5UmVzcG9uc2UuU2V0TmF0aXZlQ29tbWlzc2lvbmVyKHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkaXNjb3ZlcnlSZXNwb25zZS5TZXROYXRpdmVDb21taXNzaW9uZXIoZmFsc2UpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmRpc2NvdmVyeVJlc3BvbnNlLCBzaXplb2YoZGlzY292ZXJ5UmVzcG9uc2UpKSk7CisKKyAgICAvLyBFeHRlbmRlZCBQQU4gSUQgVExWCisgICAgZXh0UGFuSWQuSW5pdCgpOworICAgIGV4dFBhbklkLlNldEV4dGVuZGVkUGFuSWQobmV0aWYuR2V0TWFjKCkuR2V0RXh0ZW5kZWRQYW5JZCgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZleHRQYW5JZCwgc2l6ZW9mKGV4dFBhbklkKSkpOworCisgICAgLy8gTmV0d29yayBOYW1lIFRMVgorICAgIG5ldHdvcmtOYW1lLkluaXQoKTsKKyAgICBuZXR3b3JrTmFtZS5TZXROZXR3b3JrTmFtZShuZXRpZi5HZXRNYWMoKS5HZXROZXR3b3JrTmFtZSgpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZuZXR3b3JrTmFtZSwgc2l6ZW9mKHRsdikgKyBuZXR3b3JrTmFtZS5HZXRMZW5ndGgoKSkpOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCisgICAgLy8gSWYgc3RlZXJpbmcgZGF0YSBpcyBzZXQgb3V0IG9mIGJhbmQsIHVzZSB0aGF0IHZhbHVlLgorICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIG9uZSBmcm9tIGNvbW1pc3Npb25pbmcgZGF0YS4KKyAgICBpZiAoIW1TdGVlcmluZ0RhdGEuSXNDbGVhcmVkKCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZtU3RlZXJpbmdEYXRhLCBzaXplb2YobVN0ZWVyaW5nRGF0YSkgKyBtU3RlZXJpbmdEYXRhLkdldExlbmd0aCgpKSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisgICAgeworICAgICAgICAvLyBTdGVlcmluZyBEYXRhIFRMVgorICAgICAgICBzdGVlcmluZ0RhdGEgPSBuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbW1pc3Npb25pbmdEYXRhU3ViVGx2KE1lc2hDb1A6OlRsdjo6a1N0ZWVyaW5nRGF0YSk7CisKKyAgICAgICAgaWYgKHN0ZWVyaW5nRGF0YSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKHN0ZWVyaW5nRGF0YSwgc2l6ZW9mKCpzdGVlcmluZ0RhdGEpICsgc3RlZXJpbmdEYXRhLT5HZXRMZW5ndGgoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSm9pbmVyIFVEUCBQb3J0IFRMVgorICAgIGpvaW5lclVkcFBvcnQuSW5pdCgpOworICAgIGpvaW5lclVkcFBvcnQuU2V0VWRwUG9ydChuZXRpZi5HZXRKb2luZXJSb3V0ZXIoKS5HZXRKb2luZXJVZHBQb3J0KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJmpvaW5lclVkcFBvcnQsIHNpemVvZih0bHYpICsgam9pbmVyVWRwUG9ydC5HZXRMZW5ndGgoKSkpOworCisgICAgdGx2LlNldExlbmd0aChzdGF0aWNfY2FzdDx1aW50OF90PihtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0KSk7CisgICAgbWVzc2FnZS0+V3JpdGUoc3RhcnRPZmZzZXQgLSBzaXplb2YodGx2KSwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgZGVsYXkgPSBvdFBsYXRSYW5kb21HZXQoKSAlIChrRGlzY292ZXJ5TWF4Sml0dGVyICsgMSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkRGVsYXllZFJlc3BvbnNlKCptZXNzYWdlLCBhRGVzdGluYXRpb24sIGRlbGF5KSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGlzY292ZXJ5IHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZENoaWxkSWRSZXNwb25zZShDaGlsZCAqYUNoaWxkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgSXA2OjpBZGRyZXNzIGRlc3RpbmF0aW9uOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZENoaWxkSWRSZXNwb25zZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRTb3VyY2VBZGRyZXNzKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZExlYWRlckRhdGEoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWN0aXZlVGltZXN0YW1wKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFBlbmRpbmdUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKworICAgIGlmIChhQ2hpbGQtPkdldFJsb2MxNigpID09IDApCisgICAgeworICAgICAgICAvLyBwaWNrIG5leHQgQ2hpbGQgSUQgdGhhdCBpcyBub3QgYmVpbmcgdXNlZAorICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBtTmV4dENoaWxkSWQrKzsKKworICAgICAgICAgICAgaWYgKG1OZXh0Q2hpbGRJZCA+IGtNYXhDaGlsZElkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1OZXh0Q2hpbGRJZCA9IGtNaW5DaGlsZElkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlIChGaW5kQ2hpbGQobU5leHRDaGlsZElkKSAhPSBOVUxMKTsKKworICAgICAgICAvLyBhbGxvY2F0ZSBDaGlsZCBJRAorICAgICAgICBhQ2hpbGQtPlNldFJsb2MxNihuZXRpZi5HZXRNYWMoKS5HZXRTaG9ydEFkZHJlc3MoKSB8IG1OZXh0Q2hpbGRJZCk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFkZHJlc3MxNigqbWVzc2FnZSwgYUNoaWxkLT5HZXRSbG9jMTYoKSkpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgQ2hpbGQ6OmtNYXhSZXF1ZXN0VGx2czsgaSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhQ2hpbGQtPkdldFJlcXVlc3RUbHYoaSkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBUbHY6OmtOZXR3b3JrRGF0YToKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmROZXR3b3JrRGF0YSgqbWVzc2FnZSwgIWFDaGlsZC0+SXNGdWxsTmV0d29ya0RhdGEoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtSb3V0ZToKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRSb3V0ZSgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtBY3RpdmVEYXRhc2V0OgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZURhdGFzZXQoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprUGVuZGluZ0RhdGFzZXQ6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUGVuZGluZ0RhdGFzZXQoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYUNoaWxkLT5Jc0Z1bGxUaHJlYWREZXZpY2UoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRDaGlsZEFkZHJlc3NlcygqbWVzc2FnZSwgKmFDaGlsZCkpOworICAgIH0KKworICAgIFNldENoaWxkU3RhdGVUb1ZhbGlkKGFDaGlsZCk7CisKKyAgICBpZiAoIWFDaGlsZC0+SXNSeE9uV2hlbklkbGUoKSkKKyAgICB7CisgICAgICAgIG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXRTb3VyY2VNYXRjaENvbnRyb2xsZXIoKS5TZXRTcmNNYXRjaEFzU2hvcnQoKmFDaGlsZCwgZmFsc2UpOworICAgIH0KKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIGRlc3RpbmF0aW9uLlNldElpZChhQ2hpbGQtPkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IENoaWxkIElEIFJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2VuZENoaWxkVXBkYXRlUmVxdWVzdChDaGlsZCAqYUNoaWxkKQoreworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IHRsdnNbXSA9IHtUbHY6OmtUaW1lb3V0LCBUbHY6OmtBZGRyZXNzUmVnaXN0cmF0aW9ufTsKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6QWRkcmVzcyBkZXN0aW5hdGlvbjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgaWYgKCFhQ2hpbGQtPklzUnhPbldoZW5JZGxlKCkpCisgICAgeworICAgICAgICB1aW50OF90IGNoaWxkSW5kZXggPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZGV4KCphQ2hpbGQpOworCisgICAgICAgIC8vIE5vIG5lZWQgdG8gc2VuZCAiQ2hpbGQgVXBkYXRlIFJlcXVlc3QiIHRvIHRoZSBzbGVlcHkgY2hpbGQgaWYgdGhlcmUgaXMgb25lIGFscmVhZHkgcXVldWVkIGZvciBpdC4KKyAgICAgICAgZm9yIChtZXNzYWdlID0gbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLkdldFNlbmRRdWV1ZSgpLkdldEhlYWQoKTsgbWVzc2FnZTsgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPkdldENoaWxkTWFzayhjaGlsZEluZGV4KSAmJiBtZXNzYWdlLT5HZXRTdWJUeXBlKCkgPT0gTWVzc2FnZTo6a1N1YlR5cGVNbGVDaGlsZFVwZGF0ZVJlcXVlc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTmV3TWxlTWVzc2FnZSgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgIG1lc3NhZ2UtPlNldFN1YlR5cGUoTWVzc2FnZTo6a1N1YlR5cGVNbGVDaGlsZFVwZGF0ZVJlcXVlc3QpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRIZWFkZXIoKm1lc3NhZ2UsIEhlYWRlcjo6a0NvbW1hbmRDaGlsZFVwZGF0ZVJlcXVlc3QpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMZWFkZXJEYXRhKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE5ldHdvcmtEYXRhKCptZXNzYWdlLCAhYUNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZVRpbWVzdGFtcCgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRQZW5kaW5nVGltZXN0YW1wKCptZXNzYWdlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRsdlJlcXVlc3QoKm1lc3NhZ2UsIHRsdnMsIHNpemVvZih0bHZzKSkpOworCisgICAgYUNoaWxkLT5HZW5lcmF0ZUNoYWxsZW5nZSgpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoYWxsZW5nZSgqbWVzc2FnZSwgYUNoaWxkLT5HZXRDaGFsbGVuZ2UoKSwgYUNoaWxkLT5HZXRDaGFsbGVuZ2VTaXplKCkpKTsKKworICAgIG1lbXNldCgmZGVzdGluYXRpb24sIDAsIHNpemVvZihkZXN0aW5hdGlvbikpOworICAgIGRlc3RpbmF0aW9uLm1GaWVsZHMubTE2WzBdID0gSG9zdFN3YXAxNigweGZlODApOworICAgIGRlc3RpbmF0aW9uLlNldElpZChhQ2hpbGQtPkdldEV4dEFkZHJlc3MoKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFNlbmRNZXNzYWdlKCptZXNzYWdlLCBkZXN0aW5hdGlvbikpOworCisgICAgaWYgKGFDaGlsZC0+SXNSeE9uV2hlbklkbGUoKSkKKyAgICB7CisgICAgICAgIC8vIG9ubHkgdHJ5IHRvIHNlbmQgYSBzaW5nbGUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZSB0byBhbiByeC1vbi13aGVuLWlkbGUgY2hpbGQKKyAgICAgICAgYUNoaWxkLT5TZXRTdGF0ZShDaGlsZDo6a1N0YXRlQ2hpbGRVcGRhdGVSZXF1ZXN0KTsKKyAgICB9CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgdG8gY2hpbGQiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZW5kQ2hpbGRVcGRhdGVSZXNwb25zZShDaGlsZCAqYUNoaWxkLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhbGxlbmdlVGx2ICphQ2hhbGxlbmdlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBOZXdNbGVNZXNzYWdlKCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEhlYWRlcigqbWVzc2FnZSwgSGVhZGVyOjprQ29tbWFuZENoaWxkVXBkYXRlUmVzcG9uc2UpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYVRsdnNsZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYVRsdnNbaV0pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBUbHY6OmtTdGF0dXM6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU3RhdHVzKCptZXNzYWdlLCBTdGF0dXNUbHY6OmtFcnJvcikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtBZGRyZXNzUmVnaXN0cmF0aW9uOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZENoaWxkQWRkcmVzc2VzKCptZXNzYWdlLCAqYUNoaWxkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a0xlYWRlckRhdGE6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGVhZGVyRGF0YSgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtNb2RlOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE1vZGUoKm1lc3NhZ2UsIGFDaGlsZC0+R2V0RGV2aWNlTW9kZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtEYXRhOgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZE5ldHdvcmtEYXRhKCptZXNzYWdlLCAhYUNoaWxkLT5Jc0Z1bGxOZXR3b3JrRGF0YSgpKSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQWN0aXZlVGltZXN0YW1wKCptZXNzYWdlKSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUGVuZGluZ1RpbWVzdGFtcCgqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtSZXNwb25zZToKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRSZXNwb25zZSgqbWVzc2FnZSwgYUNoYWxsZW5nZS0+R2V0Q2hhbGxlbmdlKCksIGFDaGFsbGVuZ2UtPkdldExlbmd0aCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a1NvdXJjZUFkZHJlc3M6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kU291cmNlQWRkcmVzcygqbWVzc2FnZSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtUaW1lb3V0OgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFRpbWVvdXQoKm1lc3NhZ2UsIGFDaGlsZC0+R2V0VGltZW91dCgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRsdjo6a01sZUZyYW1lQ291bnRlcjoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRNbGVGcmFtZUNvdW50ZXIoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprTGlua0ZyYW1lQ291bnRlcjoKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRMaW5rRnJhbWVDb3VudGVyKCptZXNzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VudCBDaGlsZCBVcGRhdGUgUmVzcG9uc2UgdG8gY2hpbGQiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmREYXRhUmVzcG9uc2UoY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYURlbGF5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgTmVpZ2hib3IgKm5laWdoYm9yOworICAgIGJvb2wgc3RhYmxlT25seTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE5ld01sZU1lc3NhZ2UoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSGVhZGVyKCptZXNzYWdlLCBIZWFkZXI6OmtDb21tYW5kRGF0YVJlc3BvbnNlKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZFNvdXJjZUFkZHJlc3MoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kTGVhZGVyRGF0YSgqbWVzc2FnZSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmRBY3RpdmVUaW1lc3RhbXAoKm1lc3NhZ2UpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUGVuZGluZ1RpbWVzdGFtcCgqbWVzc2FnZSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhVGx2c0xlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhVGx2c1tpXSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFRsdjo6a05ldHdvcmtEYXRhOgorICAgICAgICAgICAgbmVpZ2hib3IgPSBHZXROZWlnaGJvcihhRGVzdGluYXRpb24pOworICAgICAgICAgICAgc3RhYmxlT25seSA9IG5laWdoYm9yICE9IE5VTEwgPyAhbmVpZ2hib3ItPklzRnVsbE5ldHdvcmtEYXRhKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBcHBlbmROZXR3b3JrRGF0YSgqbWVzc2FnZSwgc3RhYmxlT25seSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUbHY6OmtBY3RpdmVEYXRhc2V0OgorICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFwcGVuZEFjdGl2ZURhdGFzZXQoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVGx2OjprUGVuZGluZ0RhdGFzZXQ6CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kUGVuZGluZ0RhdGFzZXQoKm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFEZWxheSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBBZGREZWxheWVkUmVzcG9uc2UoKm1lc3NhZ2UsIGFEZXN0aW5hdGlvbiwgYURlbGF5KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBTZW5kTWVzc2FnZSgqbWVzc2FnZSwgYURlc3RpbmF0aW9uKSk7CisgICAgfQorCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IERhdGEgUmVzcG9uc2UiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0NoaWxkICpNbGVSb3V0ZXI6OkdldENoaWxkKHVpbnQxNl90IGFBZGRyZXNzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpICYmIG1DaGlsZHJlbltpXS5HZXRSbG9jMTYoKSA9PSBhQWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtQ2hpbGRyZW5baV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworQ2hpbGQgKk1sZVJvdXRlcjo6R2V0Q2hpbGQoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uSXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSAmJgorICAgICAgICAgICAgbWVtY21wKCZtQ2hpbGRyZW5baV0uR2V0RXh0QWRkcmVzcygpLCAmYUFkZHJlc3MsIHNpemVvZihhQWRkcmVzcykpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbUNoaWxkcmVuW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0NoaWxkICpNbGVSb3V0ZXI6OkdldENoaWxkKGNvbnN0IE1hYzo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgc3dpdGNoIChhQWRkcmVzcy5tTGVuZ3RoKQorICAgIHsKKyAgICBjYXNlIHNpemVvZihhQWRkcmVzcy5tU2hvcnRBZGRyZXNzKToKKyAgICAgICAgcmV0dXJuIEdldENoaWxkKGFBZGRyZXNzLm1TaG9ydEFkZHJlc3MpOworCisgICAgY2FzZSBzaXplb2YoYUFkZHJlc3MubUV4dEFkZHJlc3MpOgorICAgICAgICByZXR1cm4gR2V0Q2hpbGQoYUFkZHJlc3MubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit1aW50OF90IE1sZVJvdXRlcjo6R2V0Q2hpbGRJbmRleChjb25zdCBDaGlsZCAmY2hpbGQpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCZjaGlsZCAtIG1DaGlsZHJlbik7Cit9CisKK0NoaWxkICpNbGVSb3V0ZXI6OkdldENoaWxkcmVuKHVpbnQ4X3QgKm51bUNoaWxkcmVuKQoreworICAgIGlmIChudW1DaGlsZHJlbiAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgKm51bUNoaWxkcmVuID0gbU1heENoaWxkcmVuQWxsb3dlZDsKKyAgICB9CisKKyAgICByZXR1cm4gbUNoaWxkcmVuOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2V0TWF4QWxsb3dlZENoaWxkcmVuKHVpbnQ4X3QgYU1heENoaWxkcmVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gRW5zdXJlIHRoZSB2YWx1ZSBpcyBiZXR3ZWVuIDEgYW5kIGtNYXhDaGlsZHJlbgorICAgIFZlcmlmeU9yRXhpdChhTWF4Q2hpbGRyZW4gPiAwICYmIGFNYXhDaGlsZHJlbiA8PSBrTWF4Q2hpbGRyZW4sIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIC8vIERvIG5vdCBhbGxvdyBzZXR0aW5nIG1heCBjaGlsZHJlbiBpZiBNTEUgaXMgcnVubmluZworICAgIFZlcmlmeU9yRXhpdChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIC8vIFNhdmUgdGhlIHZhbHVlCisgICAgbU1heENoaWxkcmVuQWxsb3dlZCA9IGFNYXhDaGlsZHJlbjsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpSZW1vdmVOZWlnaGJvcihjb25zdCBNYWM6OkFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE5laWdoYm9yICpuZWlnaGJvcjsKKworICAgIFZlcmlmeU9yRXhpdCgobmVpZ2hib3IgPSBHZXROZWlnaGJvcihhQWRkcmVzcykpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUmVtb3ZlTmVpZ2hib3IoKm5laWdoYm9yKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6UmVtb3ZlTmVpZ2hib3IoTmVpZ2hib3IgJmFOZWlnaGJvcikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIGlmICgmYU5laWdoYm9yID09ICZtUGFyZW50KQorICAgICAgICB7CisgICAgICAgICAgICBCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgaWYgKGFOZWlnaGJvci5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpICYmICFJc0FjdGl2ZVJvdXRlcihhTmVpZ2hib3IuR2V0UmxvYzE2KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBhTmVpZ2hib3IuU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpOworICAgICAgICAgICAgbmV0aWYuR2V0TWVzaEZvcndhcmRlcigpLlVwZGF0ZUluZGlyZWN0TWVzc2FnZXMoKTsKKyAgICAgICAgICAgIG5ldGlmLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX1JFTU9WRUQpOworICAgICAgICAgICAgbmV0aWYuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5TZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbihhTmVpZ2hib3IuR2V0UmxvYzE2KCkpOworICAgICAgICAgICAgUmVtb3ZlU3RvcmVkQ2hpbGQoYU5laWdoYm9yLkdldFJsb2MxNigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoYU5laWdoYm9yLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKSAmJiBJc0FjdGl2ZVJvdXRlcihhTmVpZ2hib3IuR2V0UmxvYzE2KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBSb3V0ZXIgJnJvdXRlclRvUmVtb3ZlID0gc3RhdGljX2Nhc3Q8Um91dGVyICY+KGFOZWlnaGJvcik7CisKKyAgICAgICAgICAgIHJvdXRlclRvUmVtb3ZlLlNldExpbmtRdWFsaXR5T3V0KDApOworICAgICAgICAgICAgcm91dGVyVG9SZW1vdmUuU2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisKKyAgICAgICAgICAgIGZvciAodWludDhfdCBqID0gMDsgaiA8PSBrTWF4Um91dGVySWQ7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobVJvdXRlcnNbal0uR2V0TmV4dEhvcCgpID09IEdldFJvdXRlcklkKHJvdXRlclRvUmVtb3ZlLkdldFJsb2MxNigpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2pdLlNldE5leHRIb3Aoa0ludmFsaWRSb3V0ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIG1Sb3V0ZXJzW2pdLlNldENvc3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEdldExpbmtDb3N0KGopID49IGtNYXhSb3V0ZUNvc3QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJvdXRlclRvUmVtb3ZlLkdldE5leHRIb3AoKSA9PSBrSW52YWxpZFJvdXRlcklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlc2V0QWR2ZXJ0aXNlSW50ZXJ2YWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGFOZWlnaGJvci5HZXRMaW5rSW5mbygpLkNsZWFyKCk7CisgICAgYU5laWdoYm9yLlNldFN0YXRlKE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitOZWlnaGJvciAqTWxlUm91dGVyOjpHZXROZWlnaGJvcih1aW50MTZfdCBhQWRkcmVzcykKK3sKKyAgICBOZWlnaGJvciAqcnZhbCA9IE5VTEw7CisKKyAgICBpZiAoYUFkZHJlc3MgPT0gTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0IHx8IGFBZGRyZXNzID09IE1hYzo6a1Nob3J0QWRkckludmFsaWQpCisgICAgeworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgc3dpdGNoIChtUm9sZSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIHJ2YWwgPSBNbGU6OkdldE5laWdoYm9yKGFBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX1JPVVRFUjoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uSXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSAmJiBtQ2hpbGRyZW5baV0uR2V0UmxvYzE2KCkgPT0gYUFkZHJlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gJm1DaGlsZHJlbltpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgPT0gbVJvdXRlcklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgJiYgbVJvdXRlcnNbaV0uR2V0UmxvYzE2KCkgPT0gYUFkZHJlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gJm1Sb3V0ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworTmVpZ2hib3IgKk1sZVJvdXRlcjo6R2V0TmVpZ2hib3IoY29uc3QgTWFjOjpFeHRBZGRyZXNzICZhQWRkcmVzcykKK3sKKyAgICBOZWlnaGJvciAqcnZhbCA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgcnZhbCA9IE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfUk9VVEVSOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpICYmCisgICAgICAgICAgICAgICAgbWVtY21wKCZtQ2hpbGRyZW5baV0uR2V0RXh0QWRkcmVzcygpLCAmYUFkZHJlc3MsIHNpemVvZihhQWRkcmVzcykpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gJm1DaGlsZHJlbltpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgPT0gbVJvdXRlcklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoJm1Sb3V0ZXJzW2ldLkdldEV4dEFkZHJlc3MoKSwgJmFBZGRyZXNzLCBzaXplb2YoYUFkZHJlc3MpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEV4aXROb3cocnZhbCA9ICZtUm91dGVyc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobVBhcmVudFJlcXVlc3RTdGF0ZSAhPSBrUGFyZW50SWRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCA9IE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitOZWlnaGJvciAqTWxlUm91dGVyOjpHZXROZWlnaGJvcihjb25zdCBNYWM6OkFkZHJlc3MgJmFBZGRyZXNzKQoreworICAgIE5laWdoYm9yICpydmFsID0gTlVMTDsKKworICAgIHN3aXRjaCAoYUFkZHJlc3MubUxlbmd0aCkKKyAgICB7CisgICAgY2FzZSBzaXplb2YoYUFkZHJlc3MubVNob3J0QWRkcmVzcyk6CisgICAgICAgIHJ2YWwgPSBHZXROZWlnaGJvcihhQWRkcmVzcy5tU2hvcnRBZGRyZXNzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIHNpemVvZihhQWRkcmVzcy5tRXh0QWRkcmVzcyk6CisgICAgICAgIHJ2YWwgPSBHZXROZWlnaGJvcihhQWRkcmVzcy5tRXh0QWRkcmVzcyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK05laWdoYm9yICpNbGVSb3V0ZXI6OkdldE5laWdoYm9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgTWFjOjpBZGRyZXNzIG1hY2FkZHI7CisgICAgTG93cGFuOjpDb250ZXh0IGNvbnRleHQ7CisgICAgQ2hpbGQgKmNoaWxkOworICAgIFJvdXRlciAqcm91dGVyOworICAgIE5laWdoYm9yICpydmFsID0gTlVMTDsKKworICAgIGlmIChhQWRkcmVzcy5Jc0xpbmtMb2NhbCgpKQorICAgIHsKKyAgICAgICAgaWYgKGFBZGRyZXNzLm1GaWVsZHMubTE2WzRdID09IEhvc3RTd2FwMTYoMHgwMDAwKSAmJgorICAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNV0gPT0gSG9zdFN3YXAxNigweDAwZmYpICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls2XSA9PSBIb3N0U3dhcDE2KDB4ZmUwMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hY2FkZHIubUxlbmd0aCA9IHNpemVvZihtYWNhZGRyLm1TaG9ydEFkZHJlc3MpOworICAgICAgICAgICAgbWFjYWRkci5tU2hvcnRBZGRyZXNzID0gSG9zdFN3YXAxNihhQWRkcmVzcy5tRmllbGRzLm0xNls3XSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtYWNhZGRyLm1MZW5ndGggPSBzaXplb2YobWFjYWRkci5tRXh0QWRkcmVzcyk7CisgICAgICAgICAgICBtYWNhZGRyLm1FeHRBZGRyZXNzLlNldChhQWRkcmVzcyk7CisgICAgICAgIH0KKworICAgICAgICBFeGl0Tm93KHJ2YWwgPSBHZXROZWlnaGJvcihtYWNhZGRyKSk7CisgICAgfQorCisgICAgaWYgKEdldE5ldGlmKCkuR2V0TmV0d29ya0RhdGFMZWFkZXIoKS5HZXRDb250ZXh0KGFBZGRyZXNzLCBjb250ZXh0KSAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgY29udGV4dC5tQ29udGV4dElkID0gMHhmZjsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIGNoaWxkID0gJm1DaGlsZHJlbltpXTsKKworICAgICAgICBpZiAoIWNoaWxkLT5Jc1N0YXRlVmFsaWRPclJlc3RvcmluZygpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZXh0Lm1Db250ZXh0SWQgPT0gMCAmJgorICAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNF0gPT0gSG9zdFN3YXAxNigweDAwMDApICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls1XSA9PSBIb3N0U3dhcDE2KDB4MDBmZikgJiYKKyAgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzZdID09IEhvc3RTd2FwMTYoMHhmZTAwKSAmJgorICAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbN10gPT0gSG9zdFN3YXAxNihjaGlsZC0+R2V0UmxvYzE2KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBjaGlsZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hpbGQtPkZpbmRJcDZBZGRyZXNzKGFBZGRyZXNzLCBOVUxMKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoY29udGV4dC5tQ29udGV4dElkID09IDAsIHJ2YWwgPSBOVUxMKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgcm91dGVyID0gJm1Sb3V0ZXJzW2ldOworCisgICAgICAgIGlmIChyb3V0ZXItPkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkIHx8IGkgPT0gbVJvdXRlcklkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhQWRkcmVzcy5tRmllbGRzLm0xNls0XSA9PSBIb3N0U3dhcDE2KDB4MDAwMCkgJiYKKyAgICAgICAgICAgIGFBZGRyZXNzLm1GaWVsZHMubTE2WzVdID09IEhvc3RTd2FwMTYoMHgwMGZmKSAmJgorICAgICAgICAgICAgYUFkZHJlc3MubUZpZWxkcy5tMTZbNl0gPT0gSG9zdFN3YXAxNigweGZlMDApICYmCisgICAgICAgICAgICBhQWRkcmVzcy5tRmllbGRzLm0xNls3XSA9PSBIb3N0U3dhcDE2KHJvdXRlci0+R2V0UmxvYzE2KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSByb3V0ZXIpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50MTZfdCBNbGVSb3V0ZXI6OkdldE5leHRIb3AodWludDE2X3QgYURlc3RpbmF0aW9uKQoreworICAgIHVpbnQ4X3QgZGVzdGluYXRpb25JZCA9IEdldFJvdXRlcklkKGFEZXN0aW5hdGlvbik7CisgICAgdWludDhfdCByb3V0ZUNvc3Q7CisgICAgdWludDhfdCBsaW5rQ29zdDsKKyAgICB1aW50MTZfdCBydmFsID0gTWFjOjprU2hvcnRBZGRySW52YWxpZDsKKyAgICBjb25zdCBSb3V0ZXIgKnJvdXRlcjsKKyAgICBjb25zdCBSb3V0ZXIgKm5leHRIb3A7CisKKyAgICBpZiAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfQ0hJTEQpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSBNbGU6OkdldE5leHRIb3AoYURlc3RpbmF0aW9uKSk7CisgICAgfQorCisgICAgLy8gVGhlIGZyYW1lIGlzIGRlc3RpbmVkIHRvIGEgY2hpbGQKKyAgICBpZiAoZGVzdGluYXRpb25JZCA9PSBtUm91dGVySWQpCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSBhRGVzdGluYXRpb24pOworICAgIH0KKworICAgIHJvdXRlciA9IEdldFJvdXRlcihkZXN0aW5hdGlvbklkKTsKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwpOworCisgICAgbGlua0Nvc3QgPSBHZXRMaW5rQ29zdChkZXN0aW5hdGlvbklkKTsKKyAgICByb3V0ZUNvc3QgPSBHZXRSb3V0ZUNvc3QoYURlc3RpbmF0aW9uKTsKKworICAgIGlmICgocm91dGVDb3N0ICsgR2V0TGlua0Nvc3Qocm91dGVyLT5HZXROZXh0SG9wKCkpKSA8IGxpbmtDb3N0KQorICAgIHsKKyAgICAgICAgbmV4dEhvcCA9IEdldFJvdXRlcihyb3V0ZXItPkdldE5leHRIb3AoKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChuZXh0SG9wICE9IE5VTEwgJiYgbmV4dEhvcC0+R2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlSW52YWxpZCk7CisKKyAgICAgICAgcnZhbCA9IEdldFJsb2MxNihyb3V0ZXItPkdldE5leHRIb3AoKSk7CisgICAgfQorICAgIGVsc2UgaWYgKGxpbmtDb3N0IDwga01heFJvdXRlQ29zdCkKKyAgICB7CisgICAgICAgIHJ2YWwgPSBHZXRSbG9jMTYoZGVzdGluYXRpb25JZCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit1aW50OF90IE1sZVJvdXRlcjo6R2V0Q29zdCh1aW50MTZfdCBhUmxvYzE2KQoreworICAgIHVpbnQ4X3Qgcm91dGVySWQgPSBHZXRSb3V0ZXJJZChhUmxvYzE2KTsKKyAgICB1aW50OF90IGNvc3QgPSBHZXRMaW5rQ29zdChyb3V0ZXJJZCk7CisgICAgUm91dGVyICpyb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworICAgIHVpbnQ4X3Qgcm91dGVDb3N0OworCisgICAgVmVyaWZ5T3JFeGl0KHJvdXRlciAhPSBOVUxMICYmIEdldFJvdXRlcihyb3V0ZXItPkdldE5leHRIb3AoKSkgIT0gTlVMTCk7CisKKyAgICByb3V0ZUNvc3QgPSBHZXRSb3V0ZUNvc3QoYVJsb2MxNikgKyBHZXRMaW5rQ29zdChHZXRSb3V0ZXIocm91dGVySWQpLT5HZXROZXh0SG9wKCkpOworCisgICAgaWYgKGNvc3QgPiByb3V0ZUNvc3QpCisgICAgeworICAgICAgICBjb3N0ID0gcm91dGVDb3N0OworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gY29zdDsKK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkdldFJvdXRlQ29zdCh1aW50MTZfdCBhUmxvYzE2KSBjb25zdAoreworICAgIHVpbnQ4X3QgcnZhbCA9IGtNYXhSb3V0ZUNvc3Q7CisgICAgY29uc3QgUm91dGVyICpyb3V0ZXI7CisKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIoR2V0Um91dGVySWQoYVJsb2MxNikpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXIgIT0gTlVMTCAmJiBHZXRSb3V0ZXIocm91dGVyLT5HZXROZXh0SG9wKCkpICE9IE5VTEwpOworCisgICAgcnZhbCA9IHJvdXRlci0+R2V0Q29zdCgpOworCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2V0UHJlZmVycmVkUm91dGVySWQodWludDhfdCBhUm91dGVySWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoKG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEKSB8fCAobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfRElTQUJMRUQpLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgbVByZXZpb3VzUm91dGVySWQgPSBhUm91dGVySWQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6U2V0Um91dGVySWQodWludDhfdCBhUm91dGVySWQpCit7CisgICAgbVJvdXRlcklkID0gYVJvdXRlcklkOworICAgIG1QcmV2aW91c1JvdXRlcklkID0gbVJvdXRlcklkOworfQorCitSb3V0ZXIgKk1sZVJvdXRlcjo6R2V0Um91dGVycyh1aW50OF90ICphTnVtUm91dGVycykKK3sKKyAgICBpZiAoYU51bVJvdXRlcnMgIT0gTlVMTCkKKyAgICB7CisgICAgICAgICphTnVtUm91dGVycyA9IGtNYXhSb3V0ZXJJZCArIDE7CisgICAgfQorCisgICAgcmV0dXJuIG1Sb3V0ZXJzOworfQorCitSb3V0ZXIgKk1sZVJvdXRlcjo6R2V0Um91dGVyKHVpbnQ4X3QgYVJvdXRlcklkKQoreworICAgIFJvdXRlciAqcnZhbCA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQoYVJvdXRlcklkIDw9IGtNYXhSb3V0ZXJJZCk7CisKKyAgICBydmFsID0gJm1Sb3V0ZXJzW2FSb3V0ZXJJZF07CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2NvbnN0IFJvdXRlciAqTWxlUm91dGVyOjpHZXRSb3V0ZXIodWludDhfdCBhUm91dGVySWQpIGNvbnN0Cit7CisgICAgY29uc3QgUm91dGVyICpydmFsID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChhUm91dGVySWQgPD0ga01heFJvdXRlcklkKTsKKworICAgIHJ2YWwgPSAmbVJvdXRlcnNbYVJvdXRlcklkXTsKKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkdldENoaWxkSW5mb0J5SWQodWludDE2X3QgYUNoaWxkSWQsIG90Q2hpbGRJbmZvICZhQ2hpbGRJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENoaWxkICpjaGlsZDsKKworICAgIGlmICgoYUNoaWxkSWQgJiB+a01heENoaWxkSWQpICE9IDApCisgICAgeworICAgICAgICBhQ2hpbGRJZCA9IEdldENoaWxkSWQoYUNoaWxkSWQpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdCgoY2hpbGQgPSBGaW5kQ2hpbGQoYUNoaWxkSWQpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisgICAgZXJyb3IgPSBHZXRDaGlsZEluZm8oKmNoaWxkLCBhQ2hpbGRJbmZvKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpHZXRDaGlsZEluZm9CeUluZGV4KHVpbnQ4X3QgYUNoaWxkSW5kZXgsIG90Q2hpbGRJbmZvICZhQ2hpbGRJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFDaGlsZEluZGV4IDwgbU1heENoaWxkcmVuQWxsb3dlZCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIGVycm9yID0gR2V0Q2hpbGRJbmZvKG1DaGlsZHJlblthQ2hpbGRJbmRleF0sIGFDaGlsZEluZm8pOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlJlc3RvcmVDaGlsZHJlbih2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyA7IGkrKykKKyAgICB7CisgICAgICAgIENoaWxkICpjaGlsZDsKKyAgICAgICAgU2V0dGluZ3M6OkNoaWxkSW5mbyBjaGlsZEluZm87CisgICAgICAgIHVpbnQxNl90IGxlbmd0aDsKKworICAgICAgICBsZW5ndGggPSBzaXplb2YoY2hpbGRJbmZvKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFNldHRpbmdzR2V0KEdldEluc3RhbmNlKCksIFNldHRpbmdzOjprS2V5Q2hpbGRJbmZvLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZjaGlsZEluZm8pLCAmbGVuZ3RoKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdChsZW5ndGggPj0gc2l6ZW9mKGNoaWxkSW5mbyksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIFZlcmlmeU9yRXhpdCgoY2hpbGQgPSBOZXdDaGlsZCgpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworICAgICAgICBtZW1zZXQoY2hpbGQsIDAsIHNpemVvZigqY2hpbGQpKTsKKworICAgICAgICBjaGlsZC0+U2V0RXh0QWRkcmVzcygqc3RhdGljX2Nhc3Q8TWFjOjpFeHRBZGRyZXNzICo+KCZjaGlsZEluZm8ubUV4dEFkZHJlc3MpKTsKKyAgICAgICAgY2hpbGQtPlNldFJsb2MxNihjaGlsZEluZm8ubVJsb2MxNik7CisgICAgICAgIGNoaWxkLT5TZXRUaW1lb3V0KGNoaWxkSW5mby5tVGltZW91dCk7CisgICAgICAgIGNoaWxkLT5TZXREZXZpY2VNb2RlKGNoaWxkSW5mby5tTW9kZSk7CisgICAgICAgIGNoaWxkLT5TZXRTdGF0ZShOZWlnaGJvcjo6a1N0YXRlUmVzdG9yZWQpOworICAgICAgICBjaGlsZC0+U2V0TGFzdEhlYXJkKFRpbWVyOjpHZXROb3coKSk7CisgICAgICAgIEdldE5ldGlmKCkuR2V0TWVzaEZvcndhcmRlcigpLkdldFNvdXJjZU1hdGNoQ29udHJvbGxlcigpLlNldFNyY01hdGNoQXNTaG9ydCgqY2hpbGQsIHRydWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpSZW1vdmVTdG9yZWRDaGlsZCh1aW50MTZfdCBhQ2hpbGRSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGtNYXhDaGlsZHJlbjsgaSsrKQorICAgIHsKKyAgICAgICAgU2V0dGluZ3M6OkNoaWxkSW5mbyBjaGlsZEluZm87CisgICAgICAgIHVpbnQxNl90IGxlbmd0aCA9IHNpemVvZihjaGlsZEluZm8pOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFBsYXRTZXR0aW5nc0dldChHZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleUNoaWxkSW5mbywgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmY2hpbGRJbmZvKSwgJmxlbmd0aCkpOworICAgICAgICBWZXJpZnlPckV4aXQobGVuZ3RoID09IHNpemVvZihjaGlsZEluZm8pLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBpZiAoY2hpbGRJbmZvLm1SbG9jMTYgPT0gYUNoaWxkUmxvYzE2KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90UGxhdFNldHRpbmdzRGVsZXRlKEdldE5ldGlmKCkuR2V0SW5zdGFuY2UoKSwgU2V0dGluZ3M6OmtLZXlDaGlsZEluZm8sIGkpOworICAgICAgICAgICAgRXhpdE5vdygpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlN0b3JlQ2hpbGQodWludDE2X3QgYUNoaWxkUmxvYzE2KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENoaWxkICpjaGlsZDsKKyAgICBTZXR0aW5nczo6Q2hpbGRJbmZvIGNoaWxkSW5mbzsKKworICAgIFZlcmlmeU9yRXhpdCgoY2hpbGQgPSBGaW5kQ2hpbGQoR2V0Q2hpbGRJZChhQ2hpbGRSbG9jMTYpKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgSWdub3JlUmV0dXJuVmFsdWUoUmVtb3ZlU3RvcmVkQ2hpbGQoYUNoaWxkUmxvYzE2KSk7CisKKyAgICBtZW1zZXQoJmNoaWxkSW5mbywgMCwgc2l6ZW9mKGNoaWxkSW5mbykpOworICAgIG1lbWNweSgmY2hpbGRJbmZvLm1FeHRBZGRyZXNzLCAmY2hpbGQtPkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKGNoaWxkSW5mby5tRXh0QWRkcmVzcykpOworCisgICAgY2hpbGRJbmZvLm1UaW1lb3V0ID0gY2hpbGQtPkdldFRpbWVvdXQoKTsKKyAgICBjaGlsZEluZm8ubVJsb2MxNiAgPSBjaGlsZC0+R2V0UmxvYzE2KCk7CisgICAgY2hpbGRJbmZvLm1Nb2RlICAgID0gY2hpbGQtPkdldERldmljZU1vZGUoKTsKKworICAgIGVycm9yID0gb3RQbGF0U2V0dGluZ3NBZGQoR2V0SW5zdGFuY2UoKSwgU2V0dGluZ3M6OmtLZXlDaGlsZEluZm8sIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmY2hpbGRJbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGlsZEluZm8pKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpSZWZyZXNoU3RvcmVkQ2hpbGRyZW4odm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdFBsYXRTZXR0aW5nc0RlbGV0ZShHZXRJbnN0YW5jZSgpLCBTZXR0aW5nczo6a0tleUNoaWxkSW5mbywgLTEpKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGtNYXhDaGlsZHJlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpICE9IE5laWdoYm9yOjprU3RhdGVJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gU3RvcmVDaGlsZChtQ2hpbGRyZW5baV0uR2V0UmxvYzE2KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpHZXRDaGlsZEluZm8oQ2hpbGQgJmFDaGlsZCwgb3RDaGlsZEluZm8gJmFDaGlsZEluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYUNoaWxkLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBtZW1zZXQoJmFDaGlsZEluZm8sIDAsIHNpemVvZihhQ2hpbGRJbmZvKSk7CisgICAgbWVtY3B5KCZhQ2hpbGRJbmZvLm1FeHRBZGRyZXNzLCAmYUNoaWxkLkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKGFDaGlsZEluZm8ubUV4dEFkZHJlc3MpKTsKKworICAgIGFDaGlsZEluZm8ubVRpbWVvdXQgICAgICAgICAgICA9IGFDaGlsZC5HZXRUaW1lb3V0KCk7CisgICAgYUNoaWxkSW5mby5tUmxvYzE2ICAgICAgICAgICAgID0gYUNoaWxkLkdldFJsb2MxNigpOworICAgIGFDaGlsZEluZm8ubUNoaWxkSWQgICAgICAgICAgICA9IEdldENoaWxkSWQoYUNoaWxkLkdldFJsb2MxNigpKTsKKyAgICBhQ2hpbGRJbmZvLm1OZXR3b3JrRGF0YVZlcnNpb24gPSBhQ2hpbGQuR2V0TmV0d29ya0RhdGFWZXJzaW9uKCk7CisgICAgYUNoaWxkSW5mby5tQWdlICAgICAgICAgICAgICAgID0gVGltZXI6Ok1zZWNUb1NlYyhUaW1lcjo6R2V0Tm93KCkgLSBhQ2hpbGQuR2V0TGFzdEhlYXJkKCkpOworICAgIGFDaGlsZEluZm8ubUxpbmtRdWFsaXR5SW4gICAgICA9IGFDaGlsZC5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKTsKKyAgICBhQ2hpbGRJbmZvLm1BdmVyYWdlUnNzaSAgICAgICAgPSBhQ2hpbGQuR2V0TGlua0luZm8oKS5HZXRBdmVyYWdlUnNzKCk7CisgICAgYUNoaWxkSW5mby5tTGFzdFJzc2kgICAgICAgICAgID0gYUNoaWxkLkdldExpbmtJbmZvKCkuR2V0TGFzdFJzcygpOworCisgICAgYUNoaWxkSW5mby5tUnhPbldoZW5JZGxlICAgICAgPSBhQ2hpbGQuSXNSeE9uV2hlbklkbGUoKTsKKyAgICBhQ2hpbGRJbmZvLm1TZWN1cmVEYXRhUmVxdWVzdCA9IGFDaGlsZC5Jc1NlY3VyZURhdGFSZXF1ZXN0KCk7CisgICAgYUNoaWxkSW5mby5tRnVsbEZ1bmN0aW9uICAgICAgPSBhQ2hpbGQuSXNGdWxsVGhyZWFkRGV2aWNlKCk7CisgICAgYUNoaWxkSW5mby5tRnVsbE5ldHdvcmtEYXRhICAgPSBhQ2hpbGQuSXNGdWxsTmV0d29ya0RhdGEoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpHZXRSb3V0ZXJJbmZvKHVpbnQxNl90IGFSb3V0ZXJJZCwgb3RSb3V0ZXJJbmZvICZhUm91dGVySW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKyAgICB1aW50OF90IHJvdXRlcklkOworCisgICAgaWYgKGFSb3V0ZXJJZCA+IGtNYXhSb3V0ZXJJZCAmJiBJc0FjdGl2ZVJvdXRlcihhUm91dGVySWQpKQorICAgIHsKKyAgICAgICAgcm91dGVySWQgPSBHZXRSb3V0ZXJJZChhUm91dGVySWQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByb3V0ZXJJZCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFSb3V0ZXJJZCk7CisgICAgfQorCisgICAgcm91dGVyID0gR2V0Um91dGVyKHJvdXRlcklkKTsKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1lbWNweSgmYVJvdXRlckluZm8ubUV4dEFkZHJlc3MsICZyb3V0ZXItPkdldEV4dEFkZHJlc3MoKSwgc2l6ZW9mKGFSb3V0ZXJJbmZvLm1FeHRBZGRyZXNzKSk7CisKKyAgICBhUm91dGVySW5mby5tQWxsb2NhdGVkICAgICAgID0gcm91dGVyLT5Jc0FsbG9jYXRlZCgpOworICAgIGFSb3V0ZXJJbmZvLm1Sb3V0ZXJJZCAgICAgICAgPSByb3V0ZXJJZDsKKyAgICBhUm91dGVySW5mby5tUmxvYzE2ICAgICAgICAgID0gR2V0UmxvYzE2KHJvdXRlcklkKTsKKyAgICBhUm91dGVySW5mby5tTmV4dEhvcCAgICAgICAgID0gcm91dGVyLT5HZXROZXh0SG9wKCk7CisgICAgYVJvdXRlckluZm8ubUxpbmtFc3RhYmxpc2hlZCA9IHJvdXRlci0+R2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQ7CisgICAgYVJvdXRlckluZm8ubVBhdGhDb3N0ICAgICAgICA9IHJvdXRlci0+R2V0Q29zdCgpOworICAgIGFSb3V0ZXJJbmZvLm1MaW5rUXVhbGl0eUluICAgPSByb3V0ZXItPkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpOworICAgIGFSb3V0ZXJJbmZvLm1MaW5rUXVhbGl0eU91dCAgPSByb3V0ZXItPkdldExpbmtRdWFsaXR5T3V0KCk7CisgICAgYVJvdXRlckluZm8ubUFnZSAgICAgICAgICAgICA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFRpbWVyOjpNc2VjVG9TZWMoVGltZXI6OkdldE5vdygpIC0gcm91dGVyLT5HZXRMYXN0SGVhcmQoKSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkdldE5leHROZWlnaGJvckluZm8ob3ROZWlnaGJvckluZm9JdGVyYXRvciAmYUl0ZXJhdG9yLCBvdE5laWdoYm9ySW5mbyAmYU5laWdoSW5mbykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBOZWlnaGJvciAqbmVpZ2hib3IgPSBOVUxMOworICAgIGludDE2X3QgaW5kZXg7CisKKyAgICBtZW1zZXQoJmFOZWlnaEluZm8sIDAsIHNpemVvZihhTmVpZ2hJbmZvKSk7CisKKyAgICAvLyBOb24tbmVnYXRpdmUgaXRlcmF0b3IgdmFsdWUgZ2l2ZXMgdGhlIGN1cnJlbnQgaW5kZXggaW50byBtQ2hpbGRyZW4gYXJyYXkKKworICAgIGlmIChhSXRlcmF0b3IgPj0gMCkKKyAgICB7CisgICAgICAgIGZvciAoaW5kZXggPSBhSXRlcmF0b3I7IGluZGV4IDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DaGlsZHJlbltpbmRleF0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVpZ2hib3IgPSAmbUNoaWxkcmVuW2luZGV4XTsKKyAgICAgICAgICAgICAgICBhTmVpZ2hJbmZvLm1Jc0NoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIGFJdGVyYXRvciA9IGluZGV4OworICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFJdGVyYXRvciA9IDA7CisgICAgfQorCisgICAgLy8gTmVnYXRpdmUgaXRlcmF0b3IgdmFsdWUgZ2l2ZXMgdGhlIGN1cnJlbnQgaW5kZXggaW50byBtUm91dGVycyBhcnJheQorCisgICAgZm9yIChpbmRleCA9IC1hSXRlcmF0b3I7IGluZGV4IDw9IGtNYXhSb3V0ZXJJZDsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtUm91dGVyc1tpbmRleF0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5laWdoYm9yID0gJm1Sb3V0ZXJzW2luZGV4XTsKKyAgICAgICAgICAgIGFOZWlnaEluZm8ubUlzQ2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICBhSXRlcmF0b3IgPSAtaW5kZXg7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhSXRlcmF0b3IgPSAtaW5kZXg7CisgICAgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisKK2V4aXQ6CisKKyAgICBpZiAobmVpZ2hib3IgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lbWNweSgmYU5laWdoSW5mby5tRXh0QWRkcmVzcywgJm5laWdoYm9yLT5HZXRFeHRBZGRyZXNzKCksIHNpemVvZihhTmVpZ2hJbmZvLm1FeHRBZGRyZXNzKSk7CisgICAgICAgIGFOZWlnaEluZm8ubUFnZSA9IFRpbWVyOjpNc2VjVG9TZWMoVGltZXI6OkdldE5vdygpIC0gbmVpZ2hib3ItPkdldExhc3RIZWFyZCgpKTsKKyAgICAgICAgYU5laWdoSW5mby5tUmxvYzE2ID0gbmVpZ2hib3ItPkdldFJsb2MxNigpOworICAgICAgICBhTmVpZ2hJbmZvLm1MaW5rRnJhbWVDb3VudGVyID0gbmVpZ2hib3ItPkdldExpbmtGcmFtZUNvdW50ZXIoKTsKKyAgICAgICAgYU5laWdoSW5mby5tTWxlRnJhbWVDb3VudGVyID0gbmVpZ2hib3ItPkdldE1sZUZyYW1lQ291bnRlcigpOworICAgICAgICBhTmVpZ2hJbmZvLm1MaW5rUXVhbGl0eUluID0gbmVpZ2hib3ItPkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkoR2V0TmV0aWYoKS5HZXRNYWMoKS5HZXROb2lzZUZsb29yKCkpOworICAgICAgICBhTmVpZ2hJbmZvLm1BdmVyYWdlUnNzaSA9IG5laWdoYm9yLT5HZXRMaW5rSW5mbygpLkdldEF2ZXJhZ2VSc3MoKTsKKyAgICAgICAgYU5laWdoSW5mby5tTGFzdFJzc2kgPSBuZWlnaGJvci0+R2V0TGlua0luZm8oKS5HZXRMYXN0UnNzKCk7CisgICAgICAgIGFOZWlnaEluZm8ubVJ4T25XaGVuSWRsZSA9IG5laWdoYm9yLT5Jc1J4T25XaGVuSWRsZSgpOworICAgICAgICBhTmVpZ2hJbmZvLm1TZWN1cmVEYXRhUmVxdWVzdCA9IG5laWdoYm9yLT5Jc1NlY3VyZURhdGFSZXF1ZXN0KCk7CisgICAgICAgIGFOZWlnaEluZm8ubUZ1bGxGdW5jdGlvbiA9IG5laWdoYm9yLT5Jc0Z1bGxUaHJlYWREZXZpY2UoKTsKKyAgICAgICAgYU5laWdoSW5mby5tRnVsbE5ldHdvcmtEYXRhID0gbmVpZ2hib3ItPklzRnVsbE5ldHdvcmtEYXRhKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6UmVzb2x2ZVJvdXRpbmdMb29wcyh1aW50MTZfdCBhU291cmNlTWFjLCB1aW50MTZfdCBhRGVzdFJsb2MxNikKK3sKKyAgICBpZiAoYVNvdXJjZU1hYyA9PSBHZXROZXh0SG9wKGFEZXN0UmxvYzE2KSkKKyAgICB7CisgICAgICAgIC8vIGxvb3AgZGV0ZWN0ZWQKKyAgICAgICAgUm91dGVyICpyb3V0ZXIgPSBHZXRSb3V0ZXIoR2V0Um91dGVySWQoYURlc3RSbG9jMTYpKTsKKyAgICAgICAgYXNzZXJ0KHJvdXRlciAhPSBOVUxMKTsKKworICAgICAgICAvLyBpbnZhbGlkYXRlIG5leHQgaG9wCisgICAgICAgIHJvdXRlci0+U2V0TmV4dEhvcChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgUmVzZXRBZHZlcnRpc2VJbnRlcnZhbCgpOworICAgIH0KK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkNoZWNrUmVhY2hhYmlsaXR5KHVpbnQxNl90IGFNZXNoU291cmNlLCB1aW50MTZfdCBhTWVzaERlc3QsIElwNjo6SGVhZGVyICZhSXA2SGVhZGVyKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIGlmIChtUm9sZSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkKKyAgICB7CisgICAgICAgIHJldHVybiBNbGU6OkNoZWNrUmVhY2hhYmlsaXR5KGFNZXNoU291cmNlLCBhTWVzaERlc3QsIGFJcDZIZWFkZXIpOworICAgIH0KKworICAgIGlmIChhTWVzaERlc3QgPT0gbmV0aWYuR2V0TWFjKCkuR2V0U2hvcnRBZGRyZXNzKCkpCisgICAgeworICAgICAgICAvLyBtZXNoIGRlc3RpbmF0aW9uIGlzIHRoaXMgZGV2aWNlCisgICAgICAgIGlmIChuZXRpZi5Jc1VuaWNhc3RBZGRyZXNzKGFJcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElQdjYgZGVzdGluYXRpb24gaXMgdGhpcyBkZXZpY2UKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEdldE5laWdoYm9yKGFJcDZIZWFkZXIuR2V0RGVzdGluYXRpb24oKSkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSVB2NiBkZXN0aW5hdGlvbiBpcyBhbiBSRkQgY2hpbGQKKyAgICAgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKEdldFJvdXRlcklkKGFNZXNoRGVzdCkgPT0gbVJvdXRlcklkKQorICAgIHsKKyAgICAgICAgLy8gbWVzaCBkZXN0aW5hdGlvbiBpcyBhIGNoaWxkIG9mIHRoaXMgZGV2aWNlCisgICAgICAgIGlmIChHZXRDaGlsZChhTWVzaERlc3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChHZXROZXh0SG9wKGFNZXNoRGVzdCkgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkKKyAgICB7CisgICAgICAgIC8vIGZvcndhcmRpbmcgdG8gYW5vdGhlciByb3V0ZXIgYW5kIHJvdXRlIGlzIGtub3duCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkgPSBHZXRNZXNoTG9jYWwxNigpOworICAgIG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10gPSBIb3N0U3dhcDE2KGFNZXNoU291cmNlKTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIG5ldGlmLkdldElwNigpLm1JY21wLlNlbmRFcnJvcihJcDY6OkljbXBIZWFkZXI6OmtUeXBlRHN0VW5yZWFjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXA2OjpJY21wSGVhZGVyOjprQ29kZURzdFVucmVhY2hOb1JvdXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSW5mbywgYUlwNkhlYWRlcik7CisKKyAgICByZXR1cm4gT1RfRVJST1JfRFJPUDsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OlNlbmRBZGRyZXNzU29saWNpdChUaHJlYWRTdGF0dXNUbHY6OlN0YXR1cyBhU3RhdHVzKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBUaHJlYWRFeHRNYWNBZGRyZXNzVGx2IG1hY0FkZHI2NFRsdjsKKyAgICBUaHJlYWRSbG9jMTZUbHYgcmxvY1RsdjsKKyAgICBUaHJlYWRTdGF0dXNUbHYgc3RhdHVzVGx2OworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9BRERSRVNTX1NPTElDSVQpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBuZXRpZi5HZXRDb2FwKCkuTmV3TWVzc2FnZShoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgbWFjQWRkcjY0VGx2LkluaXQoKTsKKyAgICBtYWNBZGRyNjRUbHYuU2V0TWFjQWRkcigqbmV0aWYuR2V0TWFjKCkuR2V0RXh0QWRkcmVzcygpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZtYWNBZGRyNjRUbHYsIHNpemVvZihtYWNBZGRyNjRUbHYpKSk7CisKKyAgICBpZiAoSXNSb3V0ZXJJZFZhbGlkKG1QcmV2aW91c1JvdXRlcklkKSkKKyAgICB7CisgICAgICAgIHJsb2NUbHYuSW5pdCgpOworICAgICAgICBybG9jVGx2LlNldFJsb2MxNihHZXRSbG9jMTYobVByZXZpb3VzUm91dGVySWQpKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcmxvY1Rsdiwgc2l6ZW9mKHJsb2NUbHYpKSk7CisgICAgfQorCisgICAgc3RhdHVzVGx2LkluaXQoKTsKKyAgICBzdGF0dXNUbHYuU2V0U3RhdHVzKGFTdGF0dXMpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnN0YXR1c1Rsdiwgc2l6ZW9mKHN0YXR1c1RsdikpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRMZWFkZXJBZGRyZXNzKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihHZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzU29saWNpdFJlc3BvbnNlLCB0aGlzKSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyBzb2xpY2l0IHRvICUwNHgiLCBIb3N0U3dhcDE2KG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkubUZpZWxkcy5tMTZbN10pKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpTZW5kQWRkcmVzc1JlbGVhc2Uodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2NUbHY7CisgICAgVGhyZWFkRXh0TWFjQWRkcmVzc1RsdiBtYWNBZGRyNjRUbHY7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0FERFJFU1NfUkVMRUFTRSk7CisgICAgaGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBybG9jVGx2LkluaXQoKTsKKyAgICBybG9jVGx2LlNldFJsb2MxNihHZXRSbG9jMTYobVJvdXRlcklkKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcmxvY1Rsdiwgc2l6ZW9mKHJsb2NUbHYpKSk7CisKKyAgICBtYWNBZGRyNjRUbHYuSW5pdCgpOworICAgIG1hY0FkZHI2NFRsdi5TZXRNYWNBZGRyKCpuZXRpZi5HZXRNYWMoKS5HZXRFeHRBZGRyZXNzKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJm1hY0FkZHI2NFRsdiwgc2l6ZW9mKG1hY0FkZHI2NFRsdikpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKEdldE1lc2hMb2NhbDE2KCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBHZXRMZWFkZXJBZGRyZXNzKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvKSk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlNlbnQgYWRkcmVzcyByZWxlYXNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6SGFuZGxlQWRkcmVzc1NvbGljaXRSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TWxlUm91dGVyICo+KGFDb250ZXh0KS0+SGFuZGxlQWRkcmVzc1NvbGljaXRSZXNwb25zZShzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOworfQorCit2b2lkIE1sZVJvdXRlcjo6SGFuZGxlQWRkcmVzc1NvbGljaXRSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFSZXN1bHQpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZUluZm8pOworCisgICAgVGhyZWFkU3RhdHVzVGx2IHN0YXR1c1RsdjsKKyAgICBUaHJlYWRSbG9jMTZUbHYgcmxvY1RsdjsKKyAgICBUaHJlYWRSb3V0ZXJNYXNrVGx2IHJvdXRlck1hc2tUbHY7CisgICAgdWludDhfdCByb3V0ZXJJZDsKKyAgICBSb3V0ZXIgKnJvdXRlcjsKKyAgICBib29sIG9sZDsKKworICAgIFZlcmlmeU9yRXhpdChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUgJiYgYUhlYWRlciAhPSBOVUxMICYmIGFNZXNzYWdlICE9IE5VTEwpOworCisgICAgVmVyaWZ5T3JFeGl0KGFIZWFkZXItPkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfQ0hBTkdFRCk7CisKKyAgICBvdExvZ0luZm9NbGUoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGFkZHJlc3MgcmVwbHkiKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoVGhyZWFkVGx2OjpHZXRUbHYoKmFNZXNzYWdlLCBUaHJlYWRUbHY6OmtTdGF0dXMsIHNpemVvZihzdGF0dXNUbHYpLCBzdGF0dXNUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQoc3RhdHVzVGx2LklzVmFsaWQoKSk7CisKKyAgICBpZiAoc3RhdHVzVGx2LkdldFN0YXR1cygpICE9IHN0YXR1c1Rsdi5rU3VjY2VzcykKKyAgICB7CisgICAgICAgIGlmIChJc1JvdXRlcklkVmFsaWQobVByZXZpb3VzUm91dGVySWQpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSGFzQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZW1vdmVDaGlsZHJlbigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTZXRSb3V0ZXJJZChrSW52YWxpZFJvdXRlcklkKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KCphTWVzc2FnZSwgVGhyZWFkVGx2OjprUmxvYzE2LCBzaXplb2YocmxvY1RsdiksIHJsb2NUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQocmxvY1Rsdi5Jc1ZhbGlkKCkpOworICAgIHJvdXRlcklkID0gR2V0Um91dGVySWQocmxvY1Rsdi5HZXRSbG9jMTYoKSk7CisgICAgcm91dGVyID0gR2V0Um91dGVyKHJvdXRlcklkKTsKKyAgICBWZXJpZnlPckV4aXQocm91dGVyICE9IE5VTEwpOworCisgICAgU3VjY2Vzc09yRXhpdChUaHJlYWRUbHY6OkdldFRsdigqYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1JvdXRlck1hc2ssIHNpemVvZihyb3V0ZXJNYXNrVGx2KSwgcm91dGVyTWFza1RsdikpOworICAgIFZlcmlmeU9yRXhpdChyb3V0ZXJNYXNrVGx2LklzVmFsaWQoKSk7CisKKyAgICAvLyBpZiBhbGxvY2F0ZWQgcm91dGVySWQgaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgcm91dGVySWQKKyAgICBpZiAoSXNSb3V0ZXJJZFZhbGlkKG1QcmV2aW91c1JvdXRlcklkKSAmJiByb3V0ZXJJZCAhPSBtUHJldmlvdXNSb3V0ZXJJZCkKKyAgICB7CisgICAgICAgIC8vIHJlc2V0IGNoaWxkcmVuIGluZm8gaWYgYW55CisgICAgICAgIGlmIChIYXNDaGlsZHJlbigpKQorICAgICAgICB7CisgICAgICAgICAgICBSZW1vdmVDaGlsZHJlbigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gYXNzaWduIHNob3J0IGFkZHJlc3MKKyAgICBTZXRSb3V0ZXJJZChyb3V0ZXJJZCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFNldFN0YXRlUm91dGVyKEdldFJsb2MxNihtUm91dGVySWQpKSk7CisKKyAgICByb3V0ZXItPlNldENvc3QoMCk7CisKKyAgICAvLyBjb3B5IHJvdXRlciBpZCBpbmZvcm1hdGlvbgorICAgIG1Sb3V0ZXJJZFNlcXVlbmNlID0gcm91dGVyTWFza1Rsdi5HZXRJZFNlcXVlbmNlKCk7CisgICAgbVJvdXRlcklkU2VxdWVuY2VMYXN0VXBkYXRlZCA9IFRpbWVyOjpHZXROb3coKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIG9sZCA9IG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCk7CisgICAgICAgIG1Sb3V0ZXJzW2ldLlNldEFsbG9jYXRlZChyb3V0ZXJNYXNrVGx2LklzQXNzaWduZWRSb3V0ZXJJZFNldChpKSk7CisKKyAgICAgICAgaWYgKG9sZCAmJiAhbVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgR2V0TmV0aWYoKS5HZXRBZGRyZXNzUmVzb2x2ZXIoKS5SZW1vdmUoaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBLZWVwIHJvdXRlIHBhdGggdG8gdGhlIExlYWRlciByZXBvcnRlZCBieSB0aGUgcGFyZW50IGJlZm9yZSBpdCBpcyB1cGRhdGVkLgorICAgIGlmIChtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXRDb3N0KCkgPT0gMCkKKyAgICB7CisgICAgICAgIG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLlNldENvc3QobVBhcmVudExlYWRlckNvc3QpOworICAgIH0KKworICAgIG1Sb3V0ZXJzW0dldExlYWRlcklkKCldLlNldE5leHRIb3AoR2V0Um91dGVySWQobVBhcmVudC5HZXRSbG9jMTYoKSkpOworCisgICAgLy8gS2VlcCBsaW5rIHRvIHRoZSBwYXJlbnQgaW4gb3JkZXIgdG8gcmVzcG9uc2UgdG8gUGFyZW50IFJlcXVlc3RzIGJlZm9yZSBuZXcgbGluayBpcyBlc3RhYmxpc2hlZC4KKyAgICBtUm91dGVyc1tHZXRSb3V0ZXJJZChtUGFyZW50LkdldFJsb2MxNigpKV0gPSBtUGFyZW50OworICAgIG1Sb3V0ZXJzW0dldFJvdXRlcklkKG1QYXJlbnQuR2V0UmxvYzE2KCkpXS5TZXRBbGxvY2F0ZWQodHJ1ZSk7CisKKyAgICAvLyBzZW5kIGxpbmsgcmVxdWVzdAorICAgIFNlbmRMaW5rUmVxdWVzdChOVUxMKTsKKworICAgIC8vIHNlbmQgY2hpbGQgaWQgcmVzcG9uc2VzCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZUNoaWxkSWRSZXF1ZXN0OgorICAgICAgICAgICAgU2VuZENoaWxkSWRSZXNwb25zZSgmbUNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZUxpbmtSZXF1ZXN0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQ6CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVBhcmVudFJlcXVlc3Q6CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVZhbGlkOgorICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZDoKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlQ2hpbGRVcGRhdGVSZXF1ZXN0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE1sZVJvdXRlcjo6SGFuZGxlQWRkcmVzc1NvbGljaXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TWxlUm91dGVyICo+KGFDb250ZXh0KS0+SGFuZGxlQWRkcmVzc1NvbGljaXQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzU29saWNpdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgVGhyZWFkRXh0TWFjQWRkcmVzc1RsdiBtYWNBZGRyNjRUbHY7CisgICAgVGhyZWFkUmxvYzE2VGx2IHJsb2NUbHY7CisgICAgVGhyZWFkU3RhdHVzVGx2IHN0YXR1c1RsdjsKKyAgICB1aW50OF90IHJvdXRlcklkID0ga0ludmFsaWRSb3V0ZXJJZDsKKyAgICBSb3V0ZXIgKnJvdXRlciA9IE5VTEw7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgYWRkcmVzcyBzb2xpY2l0Iik7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a0V4dE1hY0FkZHJlc3MsIHNpemVvZihtYWNBZGRyNjRUbHYpLCBtYWNBZGRyNjRUbHYpKTsKKyAgICBWZXJpZnlPckV4aXQobWFjQWRkcjY0VGx2LklzVmFsaWQoKSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gVGhyZWFkVGx2OjpHZXRUbHYoYU1lc3NhZ2UsIFRocmVhZFRsdjo6a1N0YXR1cywgc2l6ZW9mKHN0YXR1c1RsdiksIHN0YXR1c1RsdikpOworICAgIFZlcmlmeU9yRXhpdChzdGF0dXNUbHYuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIHNlZSBpZiBhbGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkgJiYKKyAgICAgICAgICAgIG1lbWNtcCgmbVJvdXRlcnNbaV0uR2V0RXh0QWRkcmVzcygpLCBtYWNBZGRyNjRUbHYuR2V0TWFjQWRkcigpLCBzaXplb2YobVJvdXRlcnNbaV0uR2V0RXh0QWRkcmVzcygpKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhyb3V0ZXJJZCA9IGkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2hlY2sgdGhlIHJlcXVlc3QgcmVhc29uCisgICAgc3dpdGNoIChzdGF0dXNUbHYuR2V0U3RhdHVzKCkpCisgICAgeworICAgIGNhc2UgVGhyZWFkU3RhdHVzVGx2OjprVG9vRmV3Um91dGVyczoKKyAgICAgICAgVmVyaWZ5T3JFeGl0KEdldEFjdGl2ZVJvdXRlckNvdW50KCkgPCBtUm91dGVyVXBncmFkZVRocmVzaG9sZCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUaHJlYWRTdGF0dXNUbHY6OmtIYXZlQ2hpbGRJZFJlcXVlc3Q6CisgICAgY2FzZSBUaHJlYWRTdGF0dXNUbHY6OmtQYXJlbnRQYXJ0aXRpb25DaGFuZ2U6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtSbG9jMTYsIHNpemVvZihybG9jVGx2KSwgcmxvY1RsdikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIC8vIHNwZWNpZmljIFJvdXRlciBJRCByZXF1ZXN0ZWQKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHJsb2NUbHYuSXNWYWxpZCgpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKyAgICAgICAgcm91dGVySWQgPSBHZXRSb3V0ZXJJZChybG9jVGx2LkdldFJsb2MxNigpKTsKKyAgICAgICAgcm91dGVyID0gR2V0Um91dGVyKHJvdXRlcklkKTsKKworICAgICAgICBpZiAocm91dGVyICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyb3V0ZXItPklzQWxsb2NhdGVkKCkgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoJnJvdXRlci0+R2V0RXh0QWRkcmVzcygpLCBtYWNBZGRyNjRUbHYuR2V0TWFjQWRkcigpLCBzaXplb2Yocm91dGVyLT5HZXRFeHRBZGRyZXNzKCkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyByZXF1ZXN0ZWQgUm91dGVyIElEIGlzIGFsbG9jYXRlZCB0byBhbm90aGVyIGRldmljZQorICAgICAgICAgICAgICAgIHJvdXRlcklkID0ga0ludmFsaWRSb3V0ZXJJZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFyb3V0ZXItPklzQWxsb2NhdGVkKCkgJiYgcm91dGVyLT5Jc1JlY2xhaW1EZWxheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RlZCBSb3V0ZXIgSUQgaXMgZGVhbGxvY2F0ZWQgYnV0IHdpdGhpbiBJRF9SRVVTRV9ERUxBWSBwZXJpb2QKKyAgICAgICAgICAgICAgICByb3V0ZXJJZCA9IGtJbnZhbGlkUm91dGVySWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcm91dGVySWQgPSBBbGxvY2F0ZVJvdXRlcklkKHJvdXRlcklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGFsbG9jYXRlIG5ldyByb3V0ZXIgaWQKKyAgICBpZiAoIUlzUm91dGVySWRWYWxpZChyb3V0ZXJJZCkpCisgICAgeworICAgICAgICByb3V0ZXJJZCA9IEFsbG9jYXRlUm91dGVySWQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJyb3V0ZXIgaWQgcmVxdWVzdGVkIGFuZCBwcm92aWRlZCEiKTsKKyAgICB9CisKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworCisgICAgaWYgKHJvdXRlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcm91dGVyLT5TZXRFeHRBZGRyZXNzKCptYWNBZGRyNjRUbHYuR2V0TWFjQWRkcigpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJyb3V0ZXIgYWRkcmVzcyB1bmF2YWlsYWJsZSEiKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFNlbmRBZGRyZXNzU29saWNpdFJlc3BvbnNlKGFIZWFkZXIsIHJvdXRlcklkLCBhTWVzc2FnZUluZm8pOworICAgIH0KK30KKwordm9pZCBNbGVSb3V0ZXI6OlNlbmRBZGRyZXNzU29saWNpdFJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIHVpbnQ4X3QgYVJvdXRlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIENvYXA6OkhlYWRlciByZXNwb25zZUhlYWRlcjsKKyAgICBUaHJlYWRTdGF0dXNUbHYgc3RhdHVzVGx2OworICAgIFRocmVhZFJvdXRlck1hc2tUbHYgcm91dGVyTWFza1RsdjsKKyAgICBUaHJlYWRSbG9jMTZUbHYgcmxvY1RsdjsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgcmVzcG9uc2VIZWFkZXIuU2V0RGVmYXVsdFJlc3BvbnNlSGVhZGVyKGFSZXF1ZXN0SGVhZGVyKTsKKyAgICByZXNwb25zZUhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBuZXRpZi5HZXRDb2FwKCkuTmV3TWVzc2FnZShyZXNwb25zZUhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBzdGF0dXNUbHYuSW5pdCgpOworICAgIHN0YXR1c1Rsdi5TZXRTdGF0dXMoIUlzUm91dGVySWRWYWxpZChhUm91dGVySWQpID8gc3RhdHVzVGx2LmtOb0FkZHJlc3NBdmFpbGFibGUgOiBzdGF0dXNUbHYua1N1Y2Nlc3MpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnN0YXR1c1Rsdiwgc2l6ZW9mKHN0YXR1c1RsdikpKTsKKworICAgIGlmIChJc1JvdXRlcklkVmFsaWQoYVJvdXRlcklkKSkKKyAgICB7CisgICAgICAgIHJsb2NUbHYuSW5pdCgpOworICAgICAgICBybG9jVGx2LlNldFJsb2MxNihHZXRSbG9jMTYoYVJvdXRlcklkKSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnJsb2NUbHYsIHNpemVvZihybG9jVGx2KSkpOworCisgICAgICAgIHJvdXRlck1hc2tUbHYuSW5pdCgpOworICAgICAgICByb3V0ZXJNYXNrVGx2LlNldElkU2VxdWVuY2UobVJvdXRlcklkU2VxdWVuY2UpOworICAgICAgICByb3V0ZXJNYXNrVGx2LkNsZWFyQXNzaWduZWRSb3V0ZXJJZE1hc2soKTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtUm91dGVyc1tpXS5Jc0FsbG9jYXRlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJvdXRlck1hc2tUbHYuU2V0QXNzaWduZWRSb3V0ZXJJZChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnJvdXRlck1hc2tUbHYsIHNpemVvZihyb3V0ZXJNYXNrVGx2KSkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGFkZHJlc3MgcmVwbHkiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpIYW5kbGVBZGRyZXNzUmVsZWFzZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxNbGVSb3V0ZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVBZGRyZXNzUmVsZWFzZSgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBNbGVSb3V0ZXI6OkhhbmRsZUFkZHJlc3NSZWxlYXNlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZFJsb2MxNlRsdiBybG9jVGx2OworICAgIFRocmVhZEV4dE1hY0FkZHJlc3NUbHYgbWFjQWRkcjY0VGx2OworICAgIHVpbnQ4X3Qgcm91dGVySWQ7CisgICAgUm91dGVyICpyb3V0ZXI7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgYWRkcmVzcyByZWxlYXNlIik7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtSbG9jMTYsIHNpemVvZihybG9jVGx2KSwgcmxvY1RsdikpOworICAgIFZlcmlmeU9yRXhpdChybG9jVGx2LklzVmFsaWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtFeHRNYWNBZGRyZXNzLCBzaXplb2YobWFjQWRkcjY0VGx2KSwgbWFjQWRkcjY0VGx2KSk7CisgICAgVmVyaWZ5T3JFeGl0KG1hY0FkZHI2NFRsdi5Jc1ZhbGlkKCkpOworCisgICAgcm91dGVySWQgPSBHZXRSb3V0ZXJJZChybG9jVGx2LkdldFJsb2MxNigpKTsKKyAgICByb3V0ZXIgPSBHZXRSb3V0ZXIocm91dGVySWQpOworCisgICAgVmVyaWZ5T3JFeGl0KHJvdXRlciAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgIG1lbWNtcCgmcm91dGVyLT5HZXRFeHRBZGRyZXNzKCksIG1hY0FkZHI2NFRsdi5HZXRNYWNBZGRyKCksIHNpemVvZihyb3V0ZXItPkdldEV4dEFkZHJlc3MoKSkpID09IDApOworCisgICAgUmVsZWFzZVJvdXRlcklkKHJvdXRlcklkKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoR2V0TmV0aWYoKS5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWxlKEdldEluc3RhbmNlKCksICJTZW50IGFkZHJlc3MgcmVsZWFzZSByZXNwb25zZSIpOworCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBNbGVSb3V0ZXI6OkZpbGxDb25uZWN0aXZpdHlUbHYoQ29ubmVjdGl2aXR5VGx2ICZhVGx2KQoreworICAgIENvbm5lY3Rpdml0eVRsdiAmdGx2ID0gYVRsdjsKKyAgICB1aW50OF90IGNvc3Q7CisgICAgdWludDhfdCBsaW5rUXVhbGl0eTsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuID0gMDsKKyAgICBpbnQ4X3QgcGFyZW50UHJpb3JpdHkgPSBrUGFyZW50UHJpb3JpdHlNZWRpdW07CisgICAgaW50OF90IG5vaXNlRmxvb3IgPSBHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKTsKKworICAgIGlmIChtUGFyZW50UHJpb3JpdHkgIT0ga1BhcmVudFByaW9yaXR5VW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBwYXJlbnRQcmlvcml0eSA9IG1QYXJlbnRQcmlvcml0eTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSA9PSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbnVtQ2hpbGRyZW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgobU1heENoaWxkcmVuQWxsb3dlZCAtIG51bUNoaWxkcmVuKSA8IChtTWF4Q2hpbGRyZW5BbGxvd2VkIC8gMykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcmVudFByaW9yaXR5ID0ga1BhcmVudFByaW9yaXR5TG93OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50UHJpb3JpdHkgPSBrUGFyZW50UHJpb3JpdHlNZWRpdW07CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0bHYuU2V0UGFyZW50UHJpb3JpdHkocGFyZW50UHJpb3JpdHkpOworCisgICAgLy8gY29tcHV0ZSBsZWFkZXIgY29zdCBhbmQgbGluayBxdWFsaXRpZXMKKyAgICB0bHYuU2V0TGlua1F1YWxpdHkxKDApOworICAgIHRsdi5TZXRMaW5rUXVhbGl0eTIoMCk7CisgICAgdGx2LlNldExpbmtRdWFsaXR5MygwKTsKKworICAgIGNvc3QgPSBtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXRDb3N0KCk7CisKKyAgICBzd2l0Y2ggKG1Sb2xlKQorICAgIHsKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEOgorICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9DSElMRDoKKyAgICAgICAgc3dpdGNoIChtUGFyZW50LkdldExpbmtJbmZvKCkuR2V0TGlua1F1YWxpdHkobm9pc2VGbG9vcikpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5MSh0bHYuR2V0TGlua1F1YWxpdHkxKCkgKyAxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eTIodGx2LkdldExpbmtRdWFsaXR5MigpICsgMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHkzKHRsdi5HZXRMaW5rUXVhbGl0eTMoKSArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb3N0ICs9IExpbmtRdWFsaXR5VG9Db3N0KG1QYXJlbnQuR2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShub2lzZUZsb29yKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgICAgIGNvc3QgKz0gR2V0TGlua0Nvc3QobVJvdXRlcnNbR2V0TGVhZGVySWQoKV0uR2V0TmV4dEhvcCgpKTsKKworICAgICAgICBpZiAoIUlzUm91dGVySWRWYWxpZChtUm91dGVyc1tHZXRMZWFkZXJJZCgpXS5HZXROZXh0SG9wKCkpIHx8IEdldExpbmtDb3N0KEdldExlYWRlcklkKCkpIDwgY29zdCkKKyAgICAgICAgeworICAgICAgICAgICAgY29zdCA9IEdldExpbmtDb3N0KEdldExlYWRlcklkKCkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0xFQURFUjoKKyAgICAgICAgY29zdCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHRsdi5TZXRBY3RpdmVSb3V0ZXJzKDApOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uSXNBbGxvY2F0ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGx2LlNldEFjdGl2ZVJvdXRlcnModGx2LkdldEFjdGl2ZVJvdXRlcnMoKSArIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkIHx8IGkgPT0gbVJvdXRlcklkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmtRdWFsaXR5ID0gbVJvdXRlcnNbaV0uR2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShub2lzZUZsb29yKTsKKworICAgICAgICBpZiAobGlua1F1YWxpdHkgPiBtUm91dGVyc1tpXS5HZXRMaW5rUXVhbGl0eU91dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBsaW5rUXVhbGl0eSA9IG1Sb3V0ZXJzW2ldLkdldExpbmtRdWFsaXR5T3V0KCk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGxpbmtRdWFsaXR5KQorICAgICAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eTEodGx2LkdldExpbmtRdWFsaXR5MSgpICsgMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHkyKHRsdi5HZXRMaW5rUXVhbGl0eTIoKSArIDEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5Myh0bHYuR2V0TGlua1F1YWxpdHkzKCkgKyAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdGx2LlNldExlYWRlckNvc3QoKGNvc3QgPCBrTWF4Um91dGVDb3N0KSA/IGNvc3QgOiBzdGF0aWNfY2FzdDx1aW50OF90PihrTWF4Um91dGVDb3N0KSk7CisgICAgdGx2LlNldElkU2VxdWVuY2UobVJvdXRlcklkU2VxdWVuY2UpOworICAgIHRsdi5TZXRTZWRCdWZmZXJTaXplKDEyODApOworICAgIHRsdi5TZXRTZWREYXRhZ3JhbUNvdW50KDEpOworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6QXBwZW5kQ29ubmVjdGl2aXR5KE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgQ29ubmVjdGl2aXR5VGx2IHRsdjsKKworICAgIHRsdi5Jbml0KCk7CisgICAgRmlsbENvbm5lY3Rpdml0eVRsdih0bHYpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkFwcGVuZENoaWxkQWRkcmVzc2VzKE1lc3NhZ2UgJmFNZXNzYWdlLCBDaGlsZCAmYUNoaWxkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICBUbHYgdGx2OworICAgIEFkZHJlc3NSZWdpc3RyYXRpb25FbnRyeSBlbnRyeTsKKyAgICBMb3dwYW46OkNvbnRleHQgY29udGV4dDsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisgICAgdWludDhfdCBzdGFydE9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFNZXNzYWdlLkdldExlbmd0aCgpKTsKKworICAgIHRsdi5TZXRUeXBlKFRsdjo6a0FkZHJlc3NSZWdpc3RyYXRpb24pOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IENoaWxkOjprTWF4SXA2QWRkcmVzc1BlckNoaWxkOyBpKyspCisgICAgeworICAgICAgICBpZiAoYUNoaWxkLkdldElwNkFkZHJlc3MoaSkuSXNVbnNwZWNpZmllZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkdldENvbnRleHQoYUNoaWxkLkdldElwNkFkZHJlc3MoaSksIGNvbnRleHQpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbXByZXNzZWQgZW50cnkKKyAgICAgICAgICAgIGVudHJ5LlNldENvbnRleHRJZChjb250ZXh0Lm1Db250ZXh0SWQpOworICAgICAgICAgICAgZW50cnkuU2V0SWlkKGFDaGlsZC5HZXRJcDZBZGRyZXNzKGkpLkdldElpZCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuY29tcHJlc3NlZCBlbnRyeQorICAgICAgICAgICAgZW50cnkuU2V0VW5jb21wcmVzc2VkKCk7CisgICAgICAgICAgICBlbnRyeS5TZXRJcDZBZGRyZXNzKGFDaGlsZC5HZXRJcDZBZGRyZXNzKGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmVudHJ5LCBlbnRyeS5HZXRMZW5ndGgoKSkpOworICAgICAgICBsZW5ndGggKz0gZW50cnkuR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgdGx2LlNldExlbmd0aChsZW5ndGgpOworICAgIGFNZXNzYWdlLldyaXRlKHN0YXJ0T2Zmc2V0LCBzaXplb2YodGx2KSwgJnRsdik7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE1sZVJvdXRlcjo6RmlsbFJvdXRlVGx2KFJvdXRlVGx2ICZ0bHYpCit7CisKKyAgICB1aW50OF90IHJvdXRlQ291bnQgPSAwOworICAgIHVpbnQ4X3QgbGlua0Nvc3Q7CisgICAgdWludDhfdCBjb3N0OworCisgICAgdGx2LlNldFJvdXRlcklkU2VxdWVuY2UobVJvdXRlcklkU2VxdWVuY2UpOworICAgIHRsdi5DbGVhclJvdXRlcklkTWFzaygpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDw9IGtNYXhSb3V0ZXJJZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLklzQWxsb2NhdGVkKCkgPT0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdGx2LlNldFJvdXRlcklkKGkpOworCisgICAgICAgIGlmIChpID09IG1Sb3V0ZXJJZCkKKyAgICAgICAgeworICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5SW4ocm91dGVDb3VudCwgMCk7CisgICAgICAgICAgICB0bHYuU2V0TGlua1F1YWxpdHlPdXQocm91dGVDb3VudCwgMCk7CisgICAgICAgICAgICB0bHYuU2V0Um91dGVDb3N0KHJvdXRlQ291bnQsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbGlua0Nvc3QgPSBHZXRMaW5rQ29zdChpKTsKKworICAgICAgICAgICAgaWYgKCFJc1JvdXRlcklkVmFsaWQobVJvdXRlcnNbaV0uR2V0TmV4dEhvcCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3N0ID0gbGlua0Nvc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29zdCA9IG1Sb3V0ZXJzW2ldLkdldENvc3QoKSArIEdldExpbmtDb3N0KG1Sb3V0ZXJzW2ldLkdldE5leHRIb3AoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobGlua0Nvc3QgPCBjb3N0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29zdCA9IGxpbmtDb3N0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvc3QgPj0ga01heFJvdXRlQ29zdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3N0ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGx2LlNldFJvdXRlQ29zdChyb3V0ZUNvdW50LCBjb3N0KTsKKyAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eU91dChyb3V0ZUNvdW50LCBtUm91dGVyc1tpXS5HZXRMaW5rUXVhbGl0eU91dCgpKTsKKworICAgICAgICAgICAgaWYgKGlzQXNzaWduTGlua1F1YWxpdHkgJiYKKyAgICAgICAgICAgICAgICAobWVtY21wKCZtUm91dGVyc1tpXS5HZXRFeHRBZGRyZXNzKCksIG1BZGRyNjQubTgsIE9UX0VYVF9BRERSRVNTX1NJWkUpID09IDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRsdi5TZXRMaW5rUXVhbGl0eUluKHJvdXRlQ291bnQsIG1Bc3NpZ25MaW5rUXVhbGl0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGx2LlNldExpbmtRdWFsaXR5SW4ocm91dGVDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUm91dGVyc1tpXS5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByb3V0ZUNvdW50Kys7CisgICAgfQorCisgICAgdGx2LlNldFJvdXRlRGF0YUxlbmd0aChyb3V0ZUNvdW50KTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkFwcGVuZFJvdXRlKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgUm91dGVUbHYgdGx2OworICAgIHRsdi5Jbml0KCk7CisgICAgRmlsbFJvdXRlVGx2KHRsdik7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YoVGx2KSArIHRsdi5HZXRMZW5ndGgoKSkpOworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpBcHBlbmRBY3RpdmVEYXRhc2V0KE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIHJldHVybiBHZXROZXRpZigpLkdldEFjdGl2ZURhdGFzZXQoKS5BcHBlbmRNbGVEYXRhc2V0VGx2KGFNZXNzYWdlKTsKK30KKworb3RFcnJvciBNbGVSb3V0ZXI6OkFwcGVuZFBlbmRpbmdEYXRhc2V0KE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIHJldHVybiBHZXROZXRpZigpLkdldFBlbmRpbmdEYXRhc2V0KCkuQXBwZW5kTWxlRGF0YXNldFRsdihhTWVzc2FnZSk7Cit9CisKK2Jvb2wgTWxlUm91dGVyOjpIYXNNaW5Eb3duZ3JhZGVOZWlnaGJvclJvdXRlcnModm9pZCkKK3sKKyAgICByZXR1cm4gR2V0TWluRG93bmdyYWRlTmVpZ2hib3JSb3V0ZXJzKCkgPj0ga01pbkRvd25ncmFkZU5laWdoYm9yczsKK30KKworYm9vbCBNbGVSb3V0ZXI6Okhhc09uZU5laWdoYm9yd2l0aENvbXBhcmFibGVDb25uZWN0aXZpdHkoY29uc3QgUm91dGVUbHYgJmFSb3V0ZSwgdWludDhfdCBhUm91dGVySWQpCit7CisgICAgYm9vbCBydmFsID0gdHJ1ZTsKKyAgICB1aW50OF90IGxvY2FsTGlua1F1YWxpdHkgPSAwOworICAgIHVpbnQ4X3QgcGVlckxpbmtRdWFsaXR5ID0gMDsKKyAgICB1aW50OF90IHJvdXRlckNvdW50ID0gMDsKKworICAgIC8vIHByb2Nlc3MgbG9jYWwgbmVpZ2hib3Igcm91dGVycworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8PSBrTWF4Um91dGVySWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChpID09IG1Sb3V0ZXJJZCkKKyAgICAgICAgeworICAgICAgICAgICAgcm91dGVyQ291bnQrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgaWYgbmVpZ2hib3IgaXMgdmFsaWQKKyAgICAgICAgaWYgKG1Sb3V0ZXJzW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiBuZWlnaGJvciBpcyBqdXN0IHBlZXIKKyAgICAgICAgICAgIGlmIChpID09IGFSb3V0ZXJJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByb3V0ZXJDb3VudCsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2NhbExpbmtRdWFsaXR5ID0gbVJvdXRlcnNbaV0uR2V0TGlua0luZm8oKS5HZXRMaW5rUXVhbGl0eShHZXROZXRpZigpLkdldE1hYygpLkdldE5vaXNlRmxvb3IoKSk7CisKKyAgICAgICAgICAgIGlmIChsb2NhbExpbmtRdWFsaXR5ID4gbVJvdXRlcnNbaV0uR2V0TGlua1F1YWxpdHlPdXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2NhbExpbmtRdWFsaXR5ID0gbVJvdXRlcnNbaV0uR2V0TGlua1F1YWxpdHlPdXQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxvY2FsTGlua1F1YWxpdHkgPj0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIG5laWdoYm9yIHJvdXRlciBpcyBpbiBwZWVyIFJvdXRlNjQgVExWCisgICAgICAgICAgICAgICAgaWYgKGFSb3V0ZS5Jc1JvdXRlcklkU2V0KGkpID09IGZhbHNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGVlcidzIHR3by13YXkgbGluayBxdWFsaXR5IHRvIHRoaXMgcm91dGVyCisgICAgICAgICAgICAgICAgcGVlckxpbmtRdWFsaXR5ID0gYVJvdXRlLkdldExpbmtRdWFsaXR5SW4ocm91dGVyQ291bnQpOworCisgICAgICAgICAgICAgICAgaWYgKHBlZXJMaW5rUXVhbGl0eSA+IGFSb3V0ZS5HZXRMaW5rUXVhbGl0eU91dChyb3V0ZXJDb3VudCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwZWVyTGlua1F1YWxpdHkgPSBhUm91dGUuR2V0TGlua1F1YWxpdHlPdXQocm91dGVyQ291bnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNvbXBhcmUgbG9jYWwgbGluayBxdWFsaXR5IHRvIHRoaXMgcm91dGVyIHdpdGggcGVlcidzCisgICAgICAgICAgICAgICAgaWYgKHBlZXJMaW5rUXVhbGl0eSA+PSBsb2NhbExpbmtRdWFsaXR5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcm91dGVyQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJvdXRlckNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3ZvaWQgTWxlUm91dGVyOjpTZXRDaGlsZFN0YXRlVG9WYWxpZChDaGlsZCAqYUNoaWxkKQoreworICAgIFZlcmlmeU9yRXhpdChhQ2hpbGQtPkdldFN0YXRlKCkgIT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKworICAgIGFDaGlsZC0+U2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKyAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX0NISUxEX0FEREVEKTsKKyAgICBTdG9yZUNoaWxkKGFDaGlsZC0+R2V0UmxvYzE2KCkpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworYm9vbCBNbGVSb3V0ZXI6Okhhc0NoaWxkcmVuKHZvaWQpCit7CisgICAgYm9vbCBoYXNDaGlsZHJlbiA9IGZhbHNlOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbU1heENoaWxkcmVuQWxsb3dlZDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZCB8fAorICAgICAgICAgICAgbUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPj0gTmVpZ2hib3I6OmtTdGF0ZUNoaWxkSWRSZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KGhhc0NoaWxkcmVuID0gdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGhhc0NoaWxkcmVuOworfQorCit2b2lkIE1sZVJvdXRlcjo6UmVtb3ZlQ2hpbGRyZW4odm9pZCkKK3sKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBzd2l0Y2ggKG1DaGlsZHJlbltpXS5HZXRTdGF0ZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmVpZ2hib3I6OmtTdGF0ZVZhbGlkOgorICAgICAgICAgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEKTsKKworICAgICAgICAvLyBGYWxsLXRocm91Z2ggdG8gbmV4dCBjYXNlCisKKyAgICAgICAgY2FzZSBOZWlnaGJvcjo6a1N0YXRlQ2hpbGRVcGRhdGVSZXF1ZXN0OgorICAgICAgICBjYXNlIE5laWdoYm9yOjprU3RhdGVSZXN0b3JlZDoKKyAgICAgICAgICAgIFJlbW92ZVN0b3JlZENoaWxkKG1DaGlsZHJlbltpXS5HZXRSbG9jMTYoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBtQ2hpbGRyZW5baV0uU2V0U3RhdGUoTmVpZ2hib3I6OmtTdGF0ZUludmFsaWQpOworICAgIH0KK30KKworYm9vbCBNbGVSb3V0ZXI6Okhhc1NtYWxsTnVtYmVyT2ZDaGlsZHJlbih2b2lkKQoreworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW4gPSAwOworICAgIHVpbnQ4X3Qgcm91dGVyQ291bnQgPSBHZXRBY3RpdmVSb3V0ZXJDb3VudCgpOworCisgICAgVmVyaWZ5T3JFeGl0KHJvdXRlckNvdW50ID4gbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZCk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtTWF4Q2hpbGRyZW5BbGxvd2VkOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBudW1DaGlsZHJlbisrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNoaWxkcmVuIDwgKHJvdXRlckNvdW50IC0gbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZCkgKiAzOworCitleGl0OgorICAgIHJldHVybiBmYWxzZTsKK30KKwordWludDhfdCBNbGVSb3V0ZXI6OkdldE1pbkRvd25ncmFkZU5laWdoYm9yUm91dGVycyh2b2lkKQoreworICAgIHVpbnQ4X3QgbGlua1F1YWxpdHk7CisgICAgdWludDhfdCByb3V0ZXJDb3VudCA9IDA7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPD0ga01heFJvdXRlcklkOyBpKyspCisgICAgeworICAgICAgICBpZiAobVJvdXRlcnNbaV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbGlua1F1YWxpdHkgPSBtUm91dGVyc1tpXS5HZXRMaW5rSW5mbygpLkdldExpbmtRdWFsaXR5KEdldE5ldGlmKCkuR2V0TWFjKCkuR2V0Tm9pc2VGbG9vcigpKTsKKworICAgICAgICBpZiAobGlua1F1YWxpdHkgPiBtUm91dGVyc1tpXS5HZXRMaW5rUXVhbGl0eU91dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBsaW5rUXVhbGl0eSA9IG1Sb3V0ZXJzW2ldLkdldExpbmtRdWFsaXR5T3V0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlua1F1YWxpdHkgPj0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcm91dGVyQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByb3V0ZXJDb3VudDsKK30KKworaW50OF90IE1sZVJvdXRlcjo6R2V0QXNzaWduUGFyZW50UHJpb3JpdHkodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVBhcmVudFByaW9yaXR5OworfQorCitvdEVycm9yIE1sZVJvdXRlcjo6U2V0QXNzaWduUGFyZW50UHJpb3JpdHkoaW50OF90IGFQYXJlbnRQcmlvcml0eSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChhUGFyZW50UHJpb3JpdHkgPD0ga1BhcmVudFByaW9yaXR5SGlnaCAmJgorICAgICAgICAgICAgICAgICBhUGFyZW50UHJpb3JpdHkgPj0ga1BhcmVudFByaW9yaXR5VW5zcGVjaWZpZWQsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1QYXJlbnRQcmlvcml0eSA9IGFQYXJlbnRQcmlvcml0eTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK01sZVJvdXRlciAmTWxlUm91dGVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBNbGVSb3V0ZXIgJm1sZSA9ICpzdGF0aWNfY2FzdDxNbGVSb3V0ZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgTWxlUm91dGVyICZtbGUgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0TWxlKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBtbGU7Cit9CisKK290RXJyb3IgTWxlUm91dGVyOjpHZXRNYXhDaGlsZFRpbWVvdXQodWludDMyX3QgJmFUaW1lb3V0KSBjb25zdAoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQ7CisKKyAgICBWZXJpZnlPckV4aXQobVJvbGUgPT0gT1RfREVWSUNFX1JPTEVfUk9VVEVSIHx8IG1Sb2xlID09IE9UX0RFVklDRV9ST0xFX0xFQURFUiwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1NYXhDaGlsZHJlbkFsbG93ZWQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtQ2hpbGRyZW5baV0uR2V0U3RhdGUoKSAhPSBOZWlnaGJvcjo6a1N0YXRlVmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1DaGlsZHJlbltpXS5Jc0Z1bGxUaHJlYWREZXZpY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobUNoaWxkcmVuW2ldLkdldFRpbWVvdXQoKSA+IGFUaW1lb3V0KQorICAgICAgICB7CisgICAgICAgICAgICBhVGltZW91dCA9IG1DaGlsZHJlbltpXS5HZXRUaW1lb3V0KCk7CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE1sZQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURAorCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlci5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiOGJlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyLmhwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgT1BFTlRIUkVBRF9NVEQKKyNpbmNsdWRlICJtbGVfcm91dGVyX210ZC5ocHAiCisjZWxpZiBPUEVOVEhSRUFEX0ZURAorI2luY2x1ZGUgIm1sZV9yb3V0ZXJfZnRkLmhwcCIKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBkZWZpbmUgT1BFTlRIUkVBRF9NVEQ9MSBvciBPUEVOVEhSRUFEX0ZURD0xIgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyX2Z0ZC5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlcl9mdGQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjdhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlcl9mdGQuaHBwCkBAIC0wLDAgKzEsODQyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIFRocmVhZCBSb3V0ZXIgYW5kIExlYWRlciByb2xlcy4KKyAqLworCisjaWZuZGVmIE1MRV9ST1VURVJfSFBQXworI2RlZmluZSBNTEVfUk9VVEVSX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RyaWNrbGVfdGltZXIuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcF90bHZzLmhwcCIKKyNpbmNsdWRlICJuZXQvaWNtcDYuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RvcG9sb2d5LmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBNbGUgeworCitjbGFzcyBBZGRyZXNzUmVzb2x2ZXI7CitjbGFzcyBNZXNoRm9yd2FyZGVyOworY2xhc3MgTmV0d29ya0RhdGFMZWFkZXI7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tbGUtcm91dGVyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBNTEUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSB0aGUgVGhyZWFkIFJvdXRlciBhbmQgTGVhZGVyIHJvbGVzLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIFRocmVhZCBSb3V0ZXIgYW5kIExlYWRlciByb2xlcy4KKyAqCisgKi8KK2NsYXNzIE1sZVJvdXRlcjogcHVibGljIE1sZQoreworICAgIGZyaWVuZCBjbGFzcyBNbGU7CisKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBNbGVSb3V0ZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFJvdXRlciBSb2xlIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIHRydWUgICBJZiB0aGUgUm91dGVyIFJvbGUgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIGZhbHNlICBJZiB0aGUgUm91dGVyIFJvbGUgaXMgbm90IGVuYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUm91dGVyUm9sZUVuYWJsZWQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBSb3V0ZXIgUm9sZSBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogSWYgQHAgYUVuYWJsZSBpcyBmYWxzZSBhbmQgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgb3BlcmF0aW5nIGFzIGEgcm91dGVyLCB0aGlzIGNhbGwgd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvCisgICAgICogZGV0YWNoIGFuZCBhdHRlbXB0IHRvIHJlYXR0YWNoIGFzIGEgY2hpbGQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRW5hYmxlZCAgVFJVRSB0byBlbmFibGUgdGhlIFJvdXRlciBSb2xlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlclJvbGVFbmFibGVkKGJvb2wgYUVuYWJsZWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgYSBub2RlIGlzIHRoZSBvbmx5IHJvdXRlciBvbiB0aGUgbmV0d29yay4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIEl0IGlzIHRoZSBvbmx5IHJvdXRlciBpbiB0aGUgbmV0d29yay4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJdCBpcyBhIGNoaWxkIG9yIGlzIG5vdCBhIHNpbmdsZSByb3V0ZXIgaW4gdGhlIG5ldHdvcmsuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzU2luZ2xldG9uKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGFuIEFkZHJlc3MgU29saWNpdCByZXF1ZXN0IGZvciBhIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0dXMgIFRoZSByZWFzb24gZm9yIHJlcXVlc3RpbmcgYSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgYW4gQWRkcmVzcyBTb2xpY2l0IG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfQ0FQQUJMRSAgICBEZXZpY2UgaXMgbm90IGNhcGFibGUgb2YgYmVjb21pbmcgYSByb3V0ZXIKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgIFRocmVhZCBpcyBub3QgZW5hYmxlZAorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjpTdGF0dXMgYVN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjYXVzZXMgdGhlIFRocmVhZCBpbnRlcmZhY2UgdG8gYmVjb21lIGEgTGVhZGVyIGFuZCBzdGFydCBhIG5ldyBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBiZWNvbWUgYSBMZWFkZXIgYW5kIHN0YXJ0ZWQgYSBuZXcgcGFydGl0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0NBUEFCTEUgICAgRGV2aWNlIGlzIG5vdCBjYXBhYmxlIG9mIGJlY29taW5nIGEgbGVhZGVyCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaHJlYWQgaXMgbm90IGVuYWJsZWQKKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQmVjb21lTGVhZGVyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSByb3V0ZXJzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBhY3RpdmUgcm91dGVycy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0QWN0aXZlUm91dGVyQ291bnQodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgUm91dGVyIElEIFNlcXVlbmNlIHVwZGF0ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgUm91dGVyIElEIFNlcXVlbmNlIHVwZGF0ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldExlYWRlckFnZSh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlYWRlciBXZWlnaHRpbmcgdmFsdWUgZm9yIHRoaXMgVGhyZWFkIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZWFkZXIgV2VpZ2h0aW5nIHZhbHVlIGZvciB0aGlzIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExlYWRlcldlaWdodCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVhZGVyV2VpZ2h0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZWFkZXIgV2VpZ2h0aW5nIHZhbHVlIGZvciB0aGlzIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhV2VpZ2h0ICBUaGUgTGVhZGVyIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVhZGVyV2VpZ2h0KHVpbnQ4X3QgYVdlaWdodCkgeyBtTGVhZGVyV2VpZ2h0ID0gYVdlaWdodDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZml4ZWQgUGFydGl0aW9uIElkIG9mIFRocmVhZCBuZXR3b3JrIHBhcnRpdGlvbiBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0aW5nLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFBhcnRpdGlvbiBJZCBmb3IgdGhpcyBUaHJlYWQgbmV0d29yayBwYXJ0aXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRMZWFkZXJQYXJ0aXRpb25JZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRml4ZWRMZWFkZXJQYXJ0aXRpb25JZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZml4ZWQgUGFydGl0aW9uIElkIGZvciBUaHJlYWQgbmV0d29yayBwYXJ0aXRpb24gZm9yIGNlcnRpZmljYXRpb24gdGVzdGluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYXJ0aXRpb25JZCAgVGhlIExlYWRlciBQYXJ0aXRpb24gSWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlYWRlclBhcnRpdGlvbklkKHVpbnQzMl90IGFQYXJ0aXRpb25JZCkgeyBtRml4ZWRMZWFkZXJQYXJ0aXRpb25JZCA9IGFQYXJ0aXRpb25JZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcHJlZmVycmVkIFJvdXRlciBJZC4gVXBvbiBiZWNvbWluZyBhIHJvdXRlci9sZWFkZXIgdGhlIG5vZGUKKyAgICAgKiBhdHRlbXB0cyB0byB1c2UgdGhpcyBSb3V0ZXIgSWQuIElmIHRoZSBwcmVmZXJyZWQgUm91dGVyIElkIGlzIG5vdCBzZXQgb3IgaWYgaXQKKyAgICAgKiBjYW4gbm90IGJlIHVzZWQsIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIHJvdXRlciBJZCBpcyBwaWNrZWQuCisgICAgICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHdoZW4gaGUgZGV2aWNlIHJvbGUgaXMgZGV0YWNoZWQgb3IgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgICAgICAgICAgICAgVGhlIHByZWZlcnJlZCBSb3V0ZXIgSWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNldCB0aGUgcHJlZmVycmVkIFJvdXRlciBJZC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfU1RBVEUgQ291bGQgbm90IHNldCAocm9sZSBpcyBvdGhlciB0aGFuIGRldGFjaGVkIGFuZCBkaXNhYmxlZCkKKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UHJlZmVycmVkUm91dGVySWQodWludDhfdCBhUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgUGFydGl0aW9uIElkIHdoaWNoIHRoZSBkZXZpY2Ugam9pbmVkIHN1Y2Nlc3NmdWxseSBvbmNlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UHJldmlvdXNQYXJ0aXRpb25JZCh2b2lkKSBjb25zdCB7IHJldHVybiBtUHJldmlvdXNQYXJ0aXRpb25JZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUGFydGl0aW9uIElkIHdoaWNoIHRoZSBkZXZpY2Ugam9pbnMgc3VjY2Vzc2Z1bGx5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhcnRpdGlvbklkICAgVGhlIFBhcnRpdGlvbiBJZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UHJldmlvdXNQYXJ0aXRpb25JZCh1aW50MzJfdCBhUGFydGl0aW9uSWQpIHsgbVByZXZpb3VzUGFydGl0aW9uSWQgPSBhUGFydGl0aW9uSWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlciBJZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgIFRoZSBSb3V0ZXIgSWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlcklkKHVpbnQ4X3QgYVJvdXRlcklkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgaG9wIHRvd2FyZHMgYW4gUkxPQzE2IGRlc3RpbmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURlc3RpbmF0aW9uICBUaGUgUkxPQzE2IG9mIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgUkxPQzE2IG9mIHRoZSBuZXh0IGhvcCBpZiBhIHJvdXRlIGlzIGtub3duLCBrSW52YWxpZFJsb2MxNiBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXROZXh0SG9wKHVpbnQxNl90IGFEZXN0aW5hdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBORVRXT1JLX0lEX1RJTUVPVVQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTkVUV09SS19JRF9USU1FT1VUIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXROZXR3b3JrSWRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXR3b3JrSWRUaW1lb3V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBORVRXT1JLX0lEX1RJTUVPVVQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIE5FVFdPUktfSURfVElNRU9VVCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV0d29ya0lkVGltZW91dCh1aW50OF90IGFUaW1lb3V0KSB7IG1OZXR3b3JrSWRUaW1lb3V0ID0gYVRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJvdXRlIGNvc3QgdG8gYSBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgUkxPQzE2IG9mIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByb3V0ZSBjb3N0IHRvIGEgUkxPQzE2LgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZUNvc3QodWludDE2X3QgYVJsb2MxNikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsaW5rIGNvc3QgdG8gdGhlIGdpdmVuIFJvdXRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBsaW5rIGNvc3QgdG8gdGhlIFJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlua0Nvc3QodWludDhfdCBhUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbWluaW11bSBjb3N0IHRvIHRoZSBnaXZlbiByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgc2hvcnQgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gcm91dGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1pbmltdW0gY29zdCB0byB0aGUgZ2l2ZW4gcm91dGVyICh2aWEgZGlyZWN0IGxpbmsgb3IgZm9yd2FyZGluZykuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENvc3QodWludDE2X3QgYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBST1VURVJfU0VMRUNUSU9OX0pJVFRFUiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIodWludDhfdCBhUm91dGVySml0dGVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZXJJZFNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Sb3V0ZXJJZFNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Sb3V0ZXJVcGdyYWRlVGhyZXNob2xkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBST1VURVJfVVBHUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKHVpbnQ4X3QgYVRocmVzaG9sZCkgeyBtUm91dGVyVXBncmFkZVRocmVzaG9sZCA9IGFUaHJlc2hvbGQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQodm9pZCkgY29uc3QgeyByZXR1cm4gbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZCh1aW50OF90IGFUaHJlc2hvbGQpIHsgbVJvdXRlckRvd25ncmFkZVRocmVzaG9sZCA9IGFUaHJlc2hvbGQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbGVhc2UgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQgdG8gcmVsZWFzZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbGVhc2VkIHRoZSBSb3V0ZXIgSUQuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBUaGUgUm91dGVyIElEIHdhcyBub3QgYWxsb2NhdGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZWxlYXNlUm91dGVySWQodWludDhfdCBhUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhIGxpbmsgdG8gYSBuZWlnaGJvci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBUaGUgbGluayBhZGRyZXNzIG9mIHRoZSBuZWlnaGJvci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgbmVpZ2hib3IuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBuZWlnaGJvci4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlTmVpZ2hib3IoY29uc3QgTWFjOjpBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgbGluayB0byBhIG5laWdoYm9yLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU5laWdoYm9yICBBIHJlZmVyZW5jZSB0byB0aGUgbmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIG5laWdoYm9yLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVOZWlnaGJvcihOZWlnaGJvciAmYU5laWdoYm9yKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgQ2hpbGQgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBhZGRyZXNzIG9mIHRoZSBDaGlsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ2hpbGQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ2hpbGQgKkdldENoaWxkKHVpbnQxNl90IGFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgQ2hpbGQgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBDaGlsZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ2hpbGQgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQ2hpbGQgKkdldENoaWxkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBDaGlsZCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIENoaWxkLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDaGlsZCBjb3JyZXNwb25kaW5nIHRvIEBwIGFBZGRyZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIENoaWxkICpHZXRDaGlsZChjb25zdCBNYWM6OkFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBjaGlsZCBpbmRleCBmb3IgdGhlIENoaWxkIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGlsZCAgQSByZWZlcmVuY2UgdG8gdGhlIENoaWxkIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBpbmRleCBmb3IgdGhlIENoaWxkIGNvcnJlc3BvbmRpbmcgdG8gQHAgYUNoaWxkLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGlsZEluZGV4KGNvbnN0IENoaWxkICZhQ2hpbGQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBDaGlsZCBhcnJheS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhTnVtQ2hpbGRyZW4gIEEgcG9pbnRlciB0byBvdXRwdXQgdGhlIG51bWJlciBvZiBjaGlsZHJlbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ2hpbGQgYXJyYXkuCisgICAgICoKKyAgICAgKi8KKyAgICBDaGlsZCAqR2V0Q2hpbGRyZW4odWludDhfdCAqYU51bUNoaWxkcmVuKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1heCBjaGlsZHJlbiBhbGxvd2VkIHZhbHVlIGZvciB0aGlzIFRocmVhZCBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWF4Q2hpbGRyZW4gIFRoZSBtYXggY2hpbGRyZW4gYWxsb3dlZCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIG1heC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICBJZiBAcCBhTWF4Q2hpbGRyZW4gaXMgbm90IGluIHRoZSByYW5nZSBbMSwga01heENoaWxkcmVuXS4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICBJZiBNTEUgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRNYXhBbGxvd2VkQ2hpbGRyZW4odWludDhfdCBhTWF4Q2hpbGRyZW4pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY2hpbGRyZW4gaW5mb3JtYXRpb24gZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGNoaWxkcmVuIGluZm9ybWF0aW9uLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0ZBSUxFRCAgIFRoZSBzYXZlZCBjaGlsZCBpbmZvIGluIG5vbi12b2xhdGlsZSBtZW1vcnkgaXMgaW52YWxpZC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT19CVUZTICBNb3JlIGNoaWxkcmVuIGluIHNldHRpbmdzIHRoYW4gbWF4IGNoaWxkcmVuLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZXN0b3JlQ2hpbGRyZW4odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmUgYSBzdG9yZWQgY2hpbGQgaW5mb3JtYXRpb24gZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkUmxvYzE2ICAgVGhlIGNoaWxkIFJMT0MxNiB0byByZW1vdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9OT05FICAgICAgICBTdWNjZXNzZnVsbHkgcmVtb3ZlIGNoaWxkLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PVF9GT1VORCAgIFRoZXJlIGlzIG5vIHNwZWNpZmllZCBjaGlsZCBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIG1lbW9yeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlU3RvcmVkQ2hpbGQodWludDE2X3QgYUNoaWxkUmxvYzE2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3JlIGEgY2hpbGQgaW5mb3JtYXRpb24gaW50byBub24tdm9sYXRpbGUgbWVtb3J5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkUmxvYzE2ICAgVGhlIGNoaWxkIFJMT0MxNiB0byBzdG9yZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgc3RvcmUgY2hpbGQuCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9fQlVGUyAgIEluc3VmZmljaWVudCBhdmFpbGFibGUgYnVmZmVycyB0byBzdG9yZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU3RvcmVDaGlsZCh1aW50MTZfdCBhQ2hpbGRSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmVmcmVzaGVzIGFsbCB0aGUgc2F2ZWQgY2hpbGRyZW4gaW5mb3JtYXRpb24gaW4gbm9uLXZvbGF0aWxlIG1lbW9yeSBieSBmaXJzdCBlcmFzaW5nIGFueSBzYXZlZAorICAgICAqIGNoaWxkIGluZm9ybWF0aW9uIGluIG5vbi12b2xhdGlsZSBtZW1vcnkgYW5kIHRoZW4gc2F2aW5nIGFsbCBjaGlsZHJlbiBpbmZvLgorICAgICAqCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9ORSAgICAgIFN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgYWxsIGNoaWxkcmVuIGluZm8gaW4gbm9uLXZvbGF0aWxlIG1lbW9yeQorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PX0JVRlMgICBJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIGJ1ZmZlcnMgdG8gc3RvcmUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlZnJlc2hTdG9yZWRDaGlsZHJlbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgTmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBhZGRyZXNzIG9mIHRoZSBOZWlnaGJvci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTmVpZ2hib3IgY29ycmVzcG9uZGluZyB0byBAcCBhQWRkcmVzcywgTlVMTCBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IodWludDE2X3QgYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBOZWlnaGJvciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIGFkZHJlc3Mgb2YgdGhlIE5laWdoYm9yLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBOZWlnaGJvciBjb3JyZXNwb25kaW5nIHRvIEBwIGFBZGRyZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIE5laWdoYm9yICpHZXROZWlnaGJvcihjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFBZGRyZXNzKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgTmVpZ2hib3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIFRoZSBhZGRyZXNzIG9mIHRoZSBOZWlnaGJvci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgTmVpZ2hib3IgY29ycmVzcG9uZGluZyB0byBAcCBhQWRkcmVzcywgTlVMTCBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IoY29uc3QgTWFjOjpBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIE5laWdoYm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBZGRyZXNzICBUaGUgYWRkcmVzcyBvZiB0aGUgTmVpZ2hib3IuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIE5laWdoYm9yIGNvcnJlc3BvbmRpbmcgdG8gQHAgYUFkZHJlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0YWlucyBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZvciBhbiBhdHRhY2hlZCBjaGlsZCBieSBDaGlsZCBJRCBvciBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUNoaWxkSWQgICAgVGhlIENoaWxkIElEIG9yIFJMT0MxNiBmb3IgYW4gYXR0YWNoZWQgY2hpbGQuCisgICAgICogQHBhcmFtW291dF0gIGFDaGlsZEluZm8gIFRoZSBjaGlsZCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0Q2hpbGRJbmZvQnlJZCh1aW50MTZfdCBhQ2hpbGRJZCwgb3RDaGlsZEluZm8gJmFDaGlsZEluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0YWlucyBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZvciBhbiBhdHRhY2hlZCBjaGlsZCBieSB0aGUgaW50ZXJuYWwgdGFibGUgaW5kZXguCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUNoaWxkSW5kZXggIFRoZSB0YWJsZSBpbmRleC4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYUNoaWxkSW5mbyAgIFRoZSBjaGlsZCBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0Q2hpbGRJbmZvQnlJbmRleCh1aW50OF90IGFDaGlsZEluZGV4LCBvdENoaWxkSW5mbyAmYUNoaWxkSW5mbyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBuZXh0IG5laWdoYm9yIGluZm9ybWF0aW9uLiBJdCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZW50cmllcyBvZgorICAgICAqIHRoZSBuZWlnaGJvciB0YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFJdGVyYXRvciAgQSByZWZlcmVuY2UgdG8gdGhlIGl0ZXJhdG9yIGNvbnRleHQuIFRvIGdldCB0aGUgZmlyc3QgbmVpZ2hib3IgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSBzZXQgdG8gT1RfTkVJR0hCT1JfSU5GT19JVEVSQVRPUl9JTklULgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFOZWlnaEluZm8gVGhlIG5laWdoYm9yIGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgIFN1Y2Nlc3NmdWxseSBmb3VuZCB0aGUgbmV4dCBuZWlnaGJvciBlbnRyeSBpbiB0YWJsZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgTm8gc3Vic2VxdWVudCBuZWlnaGJvciBlbnRyeSBleGlzdHMgaW4gdGhlIHRhYmxlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXROZXh0TmVpZ2hib3JJbmZvKG90TmVpZ2hib3JJbmZvSXRlcmF0b3IgJmFJdGVyYXRvciwgb3ROZWlnaGJvckluZm8gJmFOZWlnaEluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBSb3V0ZXIgYXJyYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYU51bVJvdXRlcnMgIEEgcG9pbnRlciB0byBvdXRwdXQgdGhlIG51bWJlciBvZiByb3V0ZXJzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBSb3V0ZXIgYXJyYXkuCisgICAgICoKKyAgICAgKi8KKyAgICBSb3V0ZXIgKkdldFJvdXRlcnModWludDhfdCAqYU51bVJvdXRlcnMpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBSb3V0ZXIgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBSb3V0ZXIgZW50cnkgb3IgTlVMTCBpZiBAcCBhUm91dGVySWQgaXMgb3V0LW9mLXJhbmdlLgorICAgICAqCisgICAgICovCisgICAgUm91dGVyICpHZXRSb3V0ZXIodWludDhfdCBhUm91dGVySWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBSb3V0ZXIgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBSb3V0ZXIgZW50cnkgb3IgTlVMTCBpZiBAcCBhUm91dGVySWQgaXMgb3V0LW9mLXJhbmdlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgUm91dGVyICpHZXRSb3V0ZXIodWludDhfdCBhUm91dGVySWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0YWlucyBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJvdXRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhUm91dGVySWQgICAgVGhlIHJvdXRlciBJRCBvciBSTE9DMTYgZm9yIGEgZ2l2ZW4gcm91dGVyLgorICAgICAqIEBwYXJhbVtvdXRdICBhUm91dGVySW5mbyAgVGhlIHJvdXRlciBpbmZvcm1hdGlvbi4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0Um91dGVySW5mbyh1aW50MTZfdCBhUm91dGVySWQsIG90Um91dGVySW5mbyAmYVJvdXRlckluZm8pOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBUaHJlYWQgcGFydGl0aW9uIGF0dHJpYnV0ZXMgYXJlIHByZWZlcnJlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaW5nbGV0b25BICAgV2hldGhlciBvciBub3QgdGhlIFRocmVhZCBQYXJ0aXRpb24gQSBoYXMgYSBzaW5nbGUgcm91dGVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFMZWFkZXJEYXRhQSAgQSByZWZlcmVuY2UgdG8gVGhyZWFkIFBhcnRpdGlvbiBBJ3MgTGVhZGVyIERhdGEuCisgICAgICogQHBhcmFtW2luXSAgYVNpbmdsZXRvbkIgICBXaGV0aGVyIG9yIG5vdCB0aGUgVGhyZWFkIFBhcnRpdGlvbiBCIGhhcyBhIHNpbmdsZSByb3V0ZXIuCisgICAgICogQHBhcmFtW2luXSAgYUxlYWRlckRhdGFCICBBIHJlZmVyZW5jZSB0byBUaHJlYWQgUGFydGl0aW9uIEIncyBMZWFkZXIgRGF0YS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgMSAgIElmIHBhcnRpdGlvbiBBIGlzIHByZWZlcnJlZC4KKyAgICAgKiBAcmV0dmFsIDAgICBJZiBwYXJ0aXRpb24gQSBhbmQgQiBoYXZlIGVxdWFsIHByZWZlcmVuY2UuCisgICAgICogQHJldHZhbCAtMSAgSWYgcGFydGl0aW9uIEIgaXMgcHJlZmVycmVkLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIGludCBDb21wYXJlUGFydGl0aW9ucyhib29sIGFTaW5nbGV0b25BLCBjb25zdCBMZWFkZXJEYXRhVGx2ICZhTGVhZGVyRGF0YUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTaW5nbGV0b25CLCBjb25zdCBMZWFkZXJEYXRhVGx2ICZhbGVhZGVyRGF0YUIpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzaFNvdXJjZSAgVGhlIFJMT0MxNiBvZiB0aGUgc291cmNlLgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNoRGVzdCAgICBUaGUgUkxPQzE2IG9mIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhSXA2SGVhZGVyICAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgaGVhZGVyIG9mIHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICBUaGUgZGVzdGluYXRpb24gaXMgcmVhY2hhYmxlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfRFJPUCAgVGhlIGRlc3RpbmF0aW9uIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkcm9wcGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBDaGVja1JlYWNoYWJpbGl0eSh1aW50MTZfdCBhTWVzaFNvdXJjZSwgdWludDE2X3QgYU1lc2hEZXN0LCBJcDY6OkhlYWRlciAmYUlwNkhlYWRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNvbHZlcyAyLWhvcCByb3V0aW5nIGxvb3BzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNvdXJjZU1hYyAgIFRoZSBSTE9DMTYgb2YgdGhlIHByZXZpb3VzIGhvcC4KKyAgICAgKiBAcGFyYW1baW5dICBhRGVzdFJsb2MxNiAgVGhlIFJMT0MxNiBvZiB0aGUgZmluYWwgZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc29sdmVSb3V0aW5nTG9vcHModWludDE2X3QgYVNvdXJjZU1hYywgdWludDE2X3QgYURlc3RSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgZ2l2ZW4gUm91dGVyIElEIGhhcyBjb3JyZWN0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgQHAgYVJvdXRlcklkIGlzIGluIGNvcnJlY3QgcmFuZ2UgWzAuLjYyXS4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiBAcCBhUm91dGVySWQgaXMgbm90IGEgdmFsaWQgUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIGJvb2wgSXNSb3V0ZXJJZFZhbGlkKHVpbnQ4X3QgYVJvdXRlcklkKSB7IHJldHVybiBhUm91dGVySWQgPD0ga01heFJvdXRlcklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmaWxscyBhbiBDb25uZWN0aXZpdHlUbHYuCisgICAgICoKKyAgICAgKiBAcGFyYW1bb3V0XSAgYVRsdiAgQSByZWZlcmVuY2UgdG8gdGhlIHRsdiB0byBiZSBmaWxsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEZpbGxDb25uZWN0aXZpdHlUbHYoQ29ubmVjdGl2aXR5VGx2ICZhVGx2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGZpbGxzIGFuIFJvdXRlVGx2LgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFUbHYgIEEgcmVmZXJlbmNlIHRvIHRoZSB0bHYgdG8gYmUgZmlsbGVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBGaWxsUm91dGVUbHYoUm91dGVUbHYgJmFUbHYpOworCisgICAgLyoqCisgICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZSB0byBiZSBzZW50IHRvIHRoZSBwYXJlbnQuCisgICAgICAqCisgICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhbiBNTEUgQ2hpbGQgVXBkYXRlIFJlcXVlc3QgbWVzc2FnZS4KKyAgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgTUxFIENoaWxkIFVwZGF0ZSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICAqCisgICAgICAqLworICAgIG90RXJyb3IgU2VuZENoaWxkVXBkYXRlUmVxdWVzdCh2b2lkKSB7IHJldHVybiBNbGU6OlNlbmRDaGlsZFVwZGF0ZVJlcXVlc3QoKTsgfQorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgc3RlZXJpbmcgZGF0YSBvdXQgb2YgYmFuZAorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIFZhbHVlIHVzZWQgdG8gc2V0IHN0ZWVyaW5nIGRhdGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHplcm9zIGNsZWFycyBzdGVlcmluZyBkYXRhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCAweEZGcyBzZXRzIHN0ZWVyaW5nIGRhdGEgdG8gMHhGRgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBbnl0aGluZyBlbHNlIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgYmxvb20gZmlsdGVyCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN0ZWVyaW5nIGRhdGEgd2FzIHNldAorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRTdGVlcmluZ0RhdGEob3RFeHRBZGRyZXNzICphRXh0QWRkcmVzcyk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgYXNzaWduZWQgcGFyZW50IHByaW9yaXR5LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGFzc2lnbmVkIHBhcmVudCBwcmlvcml0eSB2YWx1ZSwgLTIgbWVhbnMgbm90IGFzc2lnbmVkLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldEFzc2lnblBhcmVudFByaW9yaXR5KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcGFyZW50IHByaW9yaXR5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVBhcmVudFByaW9yaXR5ICBUaGUgcGFyZW50IHByaW9yaXR5IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSBwYXJlbnQgcHJpb3JpdHkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgICBJZiB0aGUgcGFyZW50IHByaW9yaXR5IHZhbHVlIGlzIG5vdCBhbW9uZyAxLCAwLCAtMSBhbmQgLTIuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldEFzc2lnblBhcmVudFByaW9yaXR5KGludDhfdCBhUGFyZW50UHJpb3JpdHkpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbG9uZ2VzdCBNTEUgVGltZW91dCBUTFYgZm9yIGFsbCBhY3RpdmUgTVREIGNoaWxkcmVuLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gIGFUaW1lb3V0ICBBIHJlZmVyZW5jZSB0byB3aGVyZSB0aGUgaW5mb3JtYXRpb24gaXMgcGxhY2VkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICBTdWNjZXNzZnVsbHkgZ2V0IHRoZSBtYXggY2hpbGQgdGltZW91dAorICAgICAqIEByZXR2YWwgT1RfRVJST1JfSU5WQUxJRF9TVEFURSAgTm90IGFuIGFjdGl2ZSByb3V0ZXIKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgIE5PIE1URCBjaGlsZAorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRNYXhDaGlsZFRpbWVvdXQodWludDMyX3QgJmFUaW1lb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrRGlzY292ZXJ5TWF4Sml0dGVyID0gMjUwdSwgIC8vLzwgTWF4aW11bSBqaXR0ZXIgdGltZSB1c2VkIHRvIGRlbGF5IERpc2NvdmVyeSBSZXNwb25zZXMgaW4gbWlsbGlzZWNvbmRzLgorICAgICAgICBrU3RhdGVVcGRhdGVQZXJpb2QgPSAxMDAwdSwgIC8vLzwgU3RhdGUgdXBkYXRlIHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuCisgICAgICAgIGtVbnNvbGljaXRlZERhdGFSZXNwb25zZUppdHRlciA9IDUwMHUsICAvLy88IE1heGltdW0gZGVsYXkgYmVmb3JlIHVuc29saWNpdGVkIERhdGEgUmVzcG9uc2UgaW4gbWlsbGlzZWNvbmRzLgorICAgIH07CisKKyAgICBvdEVycm9yIEFwcGVuZENvbm5lY3Rpdml0eShNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRDaGlsZEFkZHJlc3NlcyhNZXNzYWdlICZhTWVzc2FnZSwgQ2hpbGQgJmFDaGlsZCk7CisgICAgb3RFcnJvciBBcHBlbmRSb3V0ZShNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRBY3RpdmVEYXRhc2V0KE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEFwcGVuZFBlbmRpbmdEYXRhc2V0KE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEdldENoaWxkSW5mbyhDaGlsZCAmYUNoaWxkLCBvdENoaWxkSW5mbyAmYUNoaWxkSW5mbyk7CisgICAgb3RFcnJvciBIYW5kbGVEZXRhY2hTdGFydCh2b2lkKTsKKyAgICBvdEVycm9yIEhhbmRsZUNoaWxkU3RhcnQoQXR0YWNoTW9kZSBhTW9kZSk7CisgICAgb3RFcnJvciBIYW5kbGVMaW5rUmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZUxpbmtBY2NlcHQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgdWludDMyX3QgYUtleVNlcXVlbmNlKTsKKyAgICBvdEVycm9yIEhhbmRsZUxpbmtBY2NlcHQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgdWludDMyX3QgYUtleVNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcXVlc3QpOworICAgIG90RXJyb3IgSGFuZGxlTGlua0FjY2VwdEFuZFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFLZXlTZXF1ZW5jZSk7CisgICAgb3RFcnJvciBIYW5kbGVBZHZlcnRpc2VtZW50KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlUGFyZW50UmVxdWVzdChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKyAgICBvdEVycm9yIEhhbmRsZUNoaWxkSWRSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhS2V5U2VxdWVuY2UpOworICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRVcGRhdGVSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlKTsKKyAgICBvdEVycm9yIEhhbmRsZUNoaWxkVXBkYXRlUmVzcG9uc2UoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYUtleVNlcXVlbmNlKTsKKyAgICBvdEVycm9yIEhhbmRsZURhdGFSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgSGFuZGxlTmV0d29ya0RhdGFVcGRhdGVSb3V0ZXIodm9pZCk7CisgICAgb3RFcnJvciBIYW5kbGVEaXNjb3ZlcnlSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgb3RFcnJvciBQcm9jZXNzUm91dGVUbHYoY29uc3QgUm91dGVUbHYgJmFSb3V0ZSk7CisgICAgdm9pZCBTdG9wQWR2ZXJ0aXNlVGltZXIodm9pZCk7CisgICAgdm9pZCBSZXNldEFkdmVydGlzZUludGVydmFsKHZvaWQpOworICAgIG90RXJyb3IgU2VuZEFkZHJlc3NTb2xpY2l0KFRocmVhZFN0YXR1c1Rsdjo6U3RhdHVzIGFTdGF0dXMpOworICAgIG90RXJyb3IgU2VuZEFkZHJlc3NSZWxlYXNlKHZvaWQpOworICAgIHZvaWQgU2VuZEFkZHJlc3NTb2xpY2l0UmVzcG9uc2UoY29uc3QgQ29hcDo6SGVhZGVyICZhUmVxdWVzdCwgdWludDhfdCBhUm91dGVySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIG90RXJyb3IgU2VuZEFkdmVydGlzZW1lbnQodm9pZCk7CisgICAgb3RFcnJvciBTZW5kTGlua1JlcXVlc3QoTmVpZ2hib3IgKmFOZWlnaGJvcik7CisgICAgb3RFcnJvciBTZW5kTGlua0FjY2VwdChjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIE5laWdoYm9yICphTmVpZ2hib3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUbHZSZXF1ZXN0VGx2ICZhVGx2UmVxdWVzdCwgY29uc3QgQ2hhbGxlbmdlVGx2ICZhQ2hhbGxlbmdlKTsKKyAgICBvdEVycm9yIFNlbmRQYXJlbnRSZXNwb25zZShDaGlsZCAqYUNoaWxkLCBjb25zdCBDaGFsbGVuZ2VUbHYgJmFDaGFsbGVuZ2UsIGJvb2wgYVJvdXRlcnNPbmx5UmVxdWVzdCk7CisgICAgb3RFcnJvciBTZW5kQ2hpbGRJZFJlc3BvbnNlKENoaWxkICphQ2hpbGQpOworICAgIG90RXJyb3IgU2VuZENoaWxkVXBkYXRlUmVxdWVzdChDaGlsZCAqYUNoaWxkKTsKKyAgICBvdEVycm9yIFNlbmRDaGlsZFVwZGF0ZVJlc3BvbnNlKENoaWxkICphQ2hpbGQsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoLCAgY29uc3QgQ2hhbGxlbmdlVGx2ICpjaGFsbGVuZ2UpOworICAgIG90RXJyb3IgU2VuZERhdGFSZXNwb25zZShjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFEZWxheSk7CisgICAgb3RFcnJvciBTZW5kRGlzY292ZXJ5UmVzcG9uc2UoY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIHVpbnQxNl90IGFQYW5JZCk7CisKKyAgICBvdEVycm9yIFNldFN0YXRlUm91dGVyKHVpbnQxNl90IGFSbG9jMTYpOworICAgIG90RXJyb3IgU2V0U3RhdGVMZWFkZXIodWludDE2X3QgYVJsb2MxNik7CisgICAgdm9pZCBTdG9wTGVhZGVyKHZvaWQpOworICAgIHZvaWQgU3luY2hyb25pemVDaGlsZE5ldHdvcmtEYXRhKHZvaWQpOworICAgIG90RXJyb3IgVXBkYXRlQ2hpbGRBZGRyZXNzZXMoY29uc3QgQWRkcmVzc1JlZ2lzdHJhdGlvblRsdiAmYVRsdiwgQ2hpbGQgJmFDaGlsZCk7CisgICAgdm9pZCBVcGRhdGVSb3V0ZXMoY29uc3QgUm91dGVUbHYgJmFUbHYsIHVpbnQ4X3QgYVJvdXRlcklkKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUFkZHJlc3NTb2xpY2l0UmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbywgb3RFcnJvciByZXN1bHQpOworICAgIHZvaWQgSGFuZGxlQWRkcmVzc1NvbGljaXRSZXNwb25zZShDb2FwOjpIZWFkZXIgKmFIZWFkZXIsIE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgcmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVBZGRyZXNzUmVsZWFzZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVBZGRyZXNzUmVsZWFzZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUFkZHJlc3NTb2xpY2l0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZUFkZHJlc3NTb2xpY2l0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdWludDhfdCBMaW5rUXVhbGl0eVRvQ29zdCh1aW50OF90IGFMaW5rUXVhbGl0eSk7CisKKyAgICBDaGlsZCAqTmV3Q2hpbGQodm9pZCk7CisgICAgQ2hpbGQgKkZpbmRDaGlsZCh1aW50MTZfdCBhQ2hpbGRJZCk7CisgICAgQ2hpbGQgKkZpbmRDaGlsZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJmFNYWNBZGRyKTsKKworICAgIHZvaWQgU2V0Q2hpbGRTdGF0ZVRvVmFsaWQoQ2hpbGQgKmFDaGlsZCk7CisgICAgYm9vbCBIYXNDaGlsZHJlbih2b2lkKTsKKyAgICB2b2lkIFJlbW92ZUNoaWxkcmVuKHZvaWQpOworICAgIGJvb2wgSGFzTWluRG93bmdyYWRlTmVpZ2hib3JSb3V0ZXJzKHZvaWQpOworICAgIGJvb2wgSGFzT25lTmVpZ2hib3J3aXRoQ29tcGFyYWJsZUNvbm5lY3Rpdml0eShjb25zdCBSb3V0ZVRsdiAmYVJvdXRlLCB1aW50OF90IGFSb3V0ZXJJZCk7CisgICAgYm9vbCBIYXNTbWFsbE51bWJlck9mQ2hpbGRyZW4odm9pZCk7CisgICAgdWludDhfdCBHZXRNaW5Eb3duZ3JhZGVOZWlnaGJvclJvdXRlcnModm9pZCk7CisKKyAgICB1aW50OF90IEFsbG9jYXRlUm91dGVySWQodm9pZCk7CisgICAgdWludDhfdCBBbGxvY2F0ZVJvdXRlcklkKHVpbnQ4X3QgYVJvdXRlcklkKTsKKyAgICBib29sIEluUm91dGVySWRNYXNrKHVpbnQ4X3QgYVJvdXRlcklkKTsKKworICAgIHN0YXRpYyBib29sIEhhbmRsZUFkdmVydGlzZVRpbWVyKFRyaWNrbGVUaW1lciAmYVRpbWVyKTsKKyAgICBib29sIEhhbmRsZUFkdmVydGlzZVRpbWVyKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVN0YXRlVXBkYXRlVGltZXIoVGltZXIgJmFUaW1lcik7CisgICAgdm9pZCBIYW5kbGVTdGF0ZVVwZGF0ZVRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIE1sZVJvdXRlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgVHJpY2tsZVRpbWVyIG1BZHZlcnRpc2VUaW1lcjsKKyAgICBUaW1lciBtU3RhdGVVcGRhdGVUaW1lcjsKKworICAgIENvYXA6OlJlc291cmNlIG1BZGRyZXNzU29saWNpdDsKKyAgICBDb2FwOjpSZXNvdXJjZSBtQWRkcmVzc1JlbGVhc2U7CisKKyAgICB1aW50OF90IG1Sb3V0ZXJJZFNlcXVlbmNlOworICAgIHVpbnQzMl90IG1Sb3V0ZXJJZFNlcXVlbmNlTGFzdFVwZGF0ZWQ7CisgICAgUm91dGVyIG1Sb3V0ZXJzW2tNYXhSb3V0ZXJJZCArIDFdOworICAgIHVpbnQ4X3QgbU1heENoaWxkcmVuQWxsb3dlZDsKKyAgICBDaGlsZCBtQ2hpbGRyZW5ba01heENoaWxkcmVuXTsKKworICAgIHVpbnQ4X3QgbUNoYWxsZW5nZVRpbWVvdXQ7CisgICAgdWludDhfdCBtQ2hhbGxlbmdlWzhdOworICAgIHVpbnQxNl90IG1OZXh0Q2hpbGRJZDsKKyAgICB1aW50OF90IG1OZXR3b3JrSWRUaW1lb3V0OworICAgIHVpbnQ4X3QgbVJvdXRlclVwZ3JhZGVUaHJlc2hvbGQ7CisgICAgdWludDhfdCBtUm91dGVyRG93bmdyYWRlVGhyZXNob2xkOworICAgIHVpbnQ4X3QgbUxlYWRlcldlaWdodDsKKyAgICB1aW50MzJfdCBtRml4ZWRMZWFkZXJQYXJ0aXRpb25JZDsgIC8vLzwgb25seSBmb3IgY2VydGlmaWNhdGlvbiB0ZXN0aW5nCisgICAgYm9vbCBtUm91dGVyUm9sZUVuYWJsZWQ7CisgICAgYm9vbCBtSXNSb3V0ZXJSZXN0b3JpbmdDaGlsZHJlbjsKKworICAgIHVpbnQ4X3QgbVJvdXRlcklkOworICAgIHVpbnQ4X3QgbVByZXZpb3VzUm91dGVySWQ7CisgICAgdWludDMyX3QgbVByZXZpb3VzUGFydGl0aW9uSWQ7CisKKyAgICB1aW50OF90IG1Sb3V0ZXJTZWxlY3Rpb25KaXR0ZXI7ICAgICAgICAgLy8vPCBUaGUgdmFyaWFibGUgdG8gc2F2ZSB0aGUgYXNzaWduZWQgaml0dGVyIHZhbHVlLgorICAgIHVpbnQ4X3QgbVJvdXRlclNlbGVjdGlvbkppdHRlclRpbWVvdXQ7ICAvLy88IFRoZSBUaW1lb3V0IHByaW9yIHRvIHJlcXVlc3QvcmVsZWFzZSBSb3V0ZXIgSUQuCisKKyAgICBpbnQ4X3QgbVBhcmVudFByaW9yaXR5OyAgLy8vPCBUaGUgYXNzaWduZWQgcGFyZW50IHByaW9yaXR5IHZhbHVlLCAtMiBtZWFucyBub3QgYXNzaWduZWQuCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisgICAgTWVzaENvUDo6U3RlZXJpbmdEYXRhVGx2IG1TdGVlcmluZ0RhdGE7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCit9OworCit9ICAvLyBuYW1lc3BhY2UgTWxlCisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNTEVfUk9VVEVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9tbGVfcm91dGVyX210ZC5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlcl9tdGQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDhkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWxlX3JvdXRlcl9tdGQuaHBwCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgTUxFIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIFRocmVhZCBSb3V0ZXIgYW5kIExlYWRlciByb2xlcy4KKyAqLworCisjaWZuZGVmIE1MRV9ST1VURVJfSFBQXworI2RlZmluZSBNTEVfUk9VVEVSX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgTWxlIHsKKworY2xhc3MgTWxlUm91dGVyOiBwdWJsaWMgTWxlCit7CisgICAgZnJpZW5kIGNsYXNzIE1sZTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IE1sZVJvdXRlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKSA6IE1sZShhVGhyZWFkTmV0aWYpIHsgfQorCisgICAgYm9vbCBJc1NpbmdsZXRvbih2b2lkKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgb3RFcnJvciBCZWNvbWVSb3V0ZXIoVGhyZWFkU3RhdHVzVGx2OjpTdGF0dXMpIHsgcmV0dXJuIE9UX0VSUk9SX05PVF9DQVBBQkxFOyB9CisgICAgb3RFcnJvciBCZWNvbWVMZWFkZXIodm9pZCkgeyByZXR1cm4gT1RfRVJST1JfTk9UX0NBUEFCTEU7IH0KKworICAgIHVpbnQ4X3QgR2V0QWN0aXZlUm91dGVyQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdWludDMyX3QgR2V0TGVhZGVyQWdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHVpbnQzMl90IEdldFByZXZpb3VzUGFydGl0aW9uSWQodm9pZCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZvaWQgU2V0UHJldmlvdXNQYXJ0aXRpb25JZCh1aW50MzJfdCkgeyB9CisgICAgdm9pZCBTZXRSb3V0ZXJJZCh1aW50OF90KSB7IH0KKworICAgIHVpbnQxNl90IEdldE5leHRIb3AodWludDE2X3QgYURlc3RpbmF0aW9uKSBjb25zdCB7IHJldHVybiBNbGU6OkdldE5leHRIb3AoYURlc3RpbmF0aW9uKTsgfQorCisgICAgdWludDhfdCBHZXROZXR3b3JrSWRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHVpbnQ4X3QgR2V0Um91dGVDb3N0KHVpbnQxNl90KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdWludDhfdCBHZXRMaW5rQ29zdCh1aW50MTZfdCkgeyByZXR1cm4gMDsgfQorICAgIHVpbnQ4X3QgR2V0Q29zdCh1aW50MTZfdCkgeyByZXR1cm4gMDsgfQorCisgICAgdWludDhfdCBHZXRSb3V0ZXJJZFNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIG90RXJyb3IgUmVtb3ZlTmVpZ2hib3IoY29uc3QgTWFjOjpBZGRyZXNzICYpIHsgcmV0dXJuIEJlY29tZURldGFjaGVkKCk7IH0KKyAgICBvdEVycm9yIFJlbW92ZU5laWdoYm9yKE5laWdoYm9yICYpIHsgcmV0dXJuIEJlY29tZURldGFjaGVkKCk7IH0KKworICAgIENoaWxkICpHZXRDaGlsZCh1aW50MTZfdCkgeyByZXR1cm4gTlVMTDsgfQorICAgIENoaWxkICpHZXRDaGlsZChjb25zdCBNYWM6OkV4dEFkZHJlc3MgJikgeyByZXR1cm4gTlVMTDsgfQorICAgIENoaWxkICpHZXRDaGlsZChjb25zdCBNYWM6OkFkZHJlc3MgJikgeyByZXR1cm4gTlVMTDsgfQorCisgICAgdWludDhfdCBHZXRDaGlsZEluZGV4KGNvbnN0IENoaWxkICYpIHsgcmV0dXJuIDA7IH0KKworICAgIENoaWxkICpHZXRDaGlsZHJlbih1aW50OF90ICphTnVtQ2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKGFOdW1DaGlsZHJlbiAhPSBOVUxMKSB7CisgICAgICAgICAgICAqYU51bUNoaWxkcmVuID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG90RXJyb3IgUmVzdG9yZUNoaWxkcmVuKHZvaWQpIHtyZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisgICAgb3RFcnJvciBSZW1vdmVTdG9yZWRDaGlsZCh1aW50MTZfdCkge3JldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKyAgICBvdEVycm9yIFN0b3JlQ2hpbGQodWludDE2X3QpIHtyZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisgICAgb3RFcnJvciBSZWZyZXNoU3RvcmVkQ2hpbGRyZW4odm9pZCkgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisKKyAgICBOZWlnaGJvciAqR2V0TmVpZ2hib3IodWludDE2X3QgYUFkZHJlc3MpIHsgcmV0dXJuIE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOyB9CisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpIHsgcmV0dXJuIE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOyB9CisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKGNvbnN0IE1hYzo6QWRkcmVzcyAmYUFkZHJlc3MpIHsgcmV0dXJuIE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOyB9CisgICAgTmVpZ2hib3IgKkdldE5laWdoYm9yKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpIHsgcmV0dXJuIE1sZTo6R2V0TmVpZ2hib3IoYUFkZHJlc3MpOyB9CisKKyAgICBvdEVycm9yIEdldE5leHROZWlnaGJvckluZm8ob3ROZWlnaGJvckluZm9JdGVyYXRvciAmLCBvdE5laWdoYm9ySW5mbyAmKSB7IHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KKworICAgIFJvdXRlciAqR2V0Um91dGVycyh1aW50OF90ICphTnVtUm91dGVycykgeworICAgICAgICBpZiAoYU51bVJvdXRlcnMgIT0gTlVMTCkgeworICAgICAgICAgICAgKmFOdW1Sb3V0ZXJzID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgQ29tcGFyZVBhcnRpdGlvbnMoYm9vbCwgY29uc3QgTGVhZGVyRGF0YVRsdiAmLCBib29sLCBjb25zdCBMZWFkZXJEYXRhVGx2ICYpIHsgcmV0dXJuIDA7IH0KKworICAgIHZvaWQgUmVzb2x2ZVJvdXRpbmdMb29wcyh1aW50MTZfdCwgdWludDE2X3QpIHsgfQorCisgICAgb3RFcnJvciBDaGVja1JlYWNoYWJpbGl0eSh1aW50MTZfdCBhTWVzaFNvdXJjZSwgdWludDE2X3QgYU1lc2hEZXN0LCBJcDY6OkhlYWRlciAmYUlwNkhlYWRlcikgeworICAgICAgICByZXR1cm4gTWxlOjpDaGVja1JlYWNoYWJpbGl0eShhTWVzaFNvdXJjZSwgYU1lc2hEZXN0LCBhSXA2SGVhZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBJc1JvdXRlcklkVmFsaWQodWludDhfdCBhUm91dGVySWQpIHsgcmV0dXJuIGFSb3V0ZXJJZCA8PSBrTWF4Um91dGVySWQ7IH0KKworICAgIHZvaWQgRmlsbENvbm5lY3Rpdml0eVRsdihDb25uZWN0aXZpdHlUbHYgJikgeyB9CisgICAgdm9pZCBGaWxsUm91dGVUbHYoUm91dGVUbHYgJikgeyB9CisKKyAgICBvdEVycm9yIFNlbmRDaGlsZFVwZGF0ZVJlcXVlc3Qodm9pZCkgeyByZXR1cm4gTWxlOjpTZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCk7IH0KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKyAgICBvdEVycm9yIFNldFN0ZWVyaW5nRGF0YShvdEV4dEFkZHJlc3MgKikgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorCisgICAgb3RFcnJvciBHZXRNYXhDaGlsZFRpbWVvdXQodWludDMyX3QgJikgeyByZXR1cm4gT1RfRVJST1JfTk9UX0lNUExFTUVOVEVEOyB9CisKK3ByaXZhdGU6CisgICAgb3RFcnJvciBIYW5kbGVEZXRhY2hTdGFydCh2b2lkKSB7IHJldHVybiBPVF9FUlJPUl9OT05FOyB9CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZFN0YXJ0KEF0dGFjaE1vZGUpIHsgcmV0dXJuIE9UX0VSUk9SX05PTkU7IH0KKyAgICBvdEVycm9yIEhhbmRsZUxpbmtSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmKSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVMaW5rQWNjZXB0KGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmLCB1aW50MzJfdCkgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlTGlua0FjY2VwdChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJiwgdWludDMyX3QsIGJvb2wpIHsgcmV0dXJuIE9UX0VSUk9SX0RST1A7IH0KKyAgICBvdEVycm9yIEhhbmRsZUxpbmtBY2NlcHRBbmRSZXF1ZXN0KGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmLCB1aW50MzJfdCkgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlQWR2ZXJ0aXNlbWVudChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJikgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlUGFyZW50UmVxdWVzdChjb25zdCBNZXNzYWdlICYsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJikgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlQ2hpbGRJZFJlcXVlc3QoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYsIHVpbnQzMl90KSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZFVwZGF0ZVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYsIHVpbnQzMl90KSB7IHJldHVybiBPVF9FUlJPUl9EUk9QOyB9CisgICAgb3RFcnJvciBIYW5kbGVDaGlsZFVwZGF0ZVJlc3BvbnNlKGNvbnN0IE1lc3NhZ2UgJiwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmLCB1aW50MzJfdCkgeyByZXR1cm4gT1RfRVJST1JfRFJPUDsgfQorICAgIG90RXJyb3IgSGFuZGxlRGF0YVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYpIHsgcmV0dXJuIE9UX0VSUk9SX0RST1A7IH0KKyAgICBvdEVycm9yIEhhbmRsZU5ldHdvcmtEYXRhVXBkYXRlUm91dGVyKHZvaWQpIHsgcmV0dXJuIE9UX0VSUk9SX05PTkU7IH0KKyAgICBvdEVycm9yIEhhbmRsZURpc2NvdmVyeVJlcXVlc3QoY29uc3QgTWVzc2FnZSAmLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICYpIHsgcmV0dXJuIE9UX0VSUk9SX0RST1A7IH0KKworICAgIHZvaWQgU3RvcEFkdmVydGlzZVRpbWVyKHZvaWQpIHsgfQorICAgIG90RXJyb3IgUHJvY2Vzc1JvdXRlVGx2KGNvbnN0IFJvdXRlVGx2ICZhUm91dGUpIHsgT1RfVU5VU0VEX1ZBUklBQkxFKGFSb3V0ZSk7IHJldHVybiBPVF9FUlJPUl9OT05FOyB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTWxlCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBNTEVfUk9VVEVSX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9tbGVfdGx2cy5ocHAgYi9zcmMvY29yZS90aHJlYWQvbWxlX3RsdnMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzJkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbWxlX3RsdnMuaHBwCkBAIC0wLDAgKzEsMTYzOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgTUxFIFRMVnMuCisgKi8KKworI2lmbmRlZiBNTEVfVExWU19IUFBfCisjZGVmaW5lIE1MRV9UTFZTX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGx2cy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC90aW1lc3RhbXAuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9jb25zdGFudHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgTWxlIHsKKworI2RlZmluZSBUTFZSRVFVRVNUVExWX0lURVJBVE9SX0lOSVQgIDAgIC8vLzwgSW5pdGlhbGl6ZXIgZm9yIFRsdlJlcXVlc3RUbHZJdGVyYXRvci4KKwordHlwZWRlZiB1aW50OF90IFRsdlJlcXVlc3RJdGVyYXRvcjsgICAgICAvLy88IFVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIFRsdlJlcXVlc3RUbHYuCisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1tbGUtdGx2cworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhdGluZyBhbmQgcHJvY2Vzc2luZyBNTEUgVExWcy4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNTEUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGx2IDogcHVibGljIG90OjpUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBNTEUgVExWIFR5cGVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBrU291cmNlQWRkcmVzcyAgICAgICA9IDAsICAgIC8vLzwgU291cmNlIEFkZHJlc3MgVExWCisgICAgICAgIGtNb2RlICAgICAgICAgICAgICAgID0gMSwgICAgLy8vPCBNb2RlIFRMVgorICAgICAgICBrVGltZW91dCAgICAgICAgICAgICA9IDIsICAgIC8vLzwgVGltZW91dCBUTFYKKyAgICAgICAga0NoYWxsZW5nZSAgICAgICAgICAgPSAzLCAgICAvLy88IENoYWxsZW5nZSBUTFYKKyAgICAgICAga1Jlc3BvbnNlICAgICAgICAgICAgPSA0LCAgICAvLy88IFJlc3BvbnNlIFRMVgorICAgICAgICBrTGlua0ZyYW1lQ291bnRlciAgICA9IDUsICAgIC8vLzwgTGluay1MYXllciBGcmFtZSBDb3VudGVyIFRMVgorICAgICAgICBrTGlua1F1YWxpdHkgICAgICAgICA9IDYsICAgIC8vLzwgTGluayBRdWFsaXR5IFRMVgorICAgICAgICBrTmV0d29ya1BhcmFtZXRlciAgICA9IDcsICAgIC8vLzwgTmV0d29yayBQYXJhbWV0ZXIgVExWCisgICAgICAgIGtNbGVGcmFtZUNvdW50ZXIgICAgID0gOCwgICAgLy8vPCBNTEUgRnJhbWUgQ291bnRlciBUTFYKKyAgICAgICAga1JvdXRlICAgICAgICAgICAgICAgPSA5LCAgICAvLy88IFJvdXRlNjQgVExWCisgICAgICAgIGtBZGRyZXNzMTYgICAgICAgICAgID0gMTAsICAgLy8vPCBBZGRyZXNzMTYgVExWCisgICAgICAgIGtMZWFkZXJEYXRhICAgICAgICAgID0gMTEsICAgLy8vPCBMZWFkZXIgRGF0YSBUTFYKKyAgICAgICAga05ldHdvcmtEYXRhICAgICAgICAgPSAxMiwgICAvLy88IE5ldHdvcmsgRGF0YSBUTFYKKyAgICAgICAga1RsdlJlcXVlc3QgICAgICAgICAgPSAxMywgICAvLy88IFRMViBSZXF1ZXN0IFRMVgorICAgICAgICBrU2Nhbk1hc2sgICAgICAgICAgICA9IDE0LCAgIC8vLzwgU2NhbiBNYXNrIFRMVgorICAgICAgICBrQ29ubmVjdGl2aXR5ICAgICAgICA9IDE1LCAgIC8vLzwgQ29ubmVjdGl2aXR5IFRMVgorICAgICAgICBrTGlua01hcmdpbiAgICAgICAgICA9IDE2LCAgIC8vLzwgTGluayBNYXJnaW4gVExWCisgICAgICAgIGtTdGF0dXMgICAgICAgICAgICAgID0gMTcsICAgLy8vPCBTdGF0dXMgVExWCisgICAgICAgIGtWZXJzaW9uICAgICAgICAgICAgID0gMTgsICAgLy8vPCBWZXJzaW9uIFRMVgorICAgICAgICBrQWRkcmVzc1JlZ2lzdHJhdGlvbiA9IDE5LCAgIC8vLzwgQWRkcmVzcyBSZWdpc3RyYXRpb24gVExWCisgICAgICAgIGtDaGFubmVsICAgICAgICAgICAgID0gMjAsICAgLy8vPCBDaGFubmVsIFRMVgorICAgICAgICBrUGFuSWQgICAgICAgICAgICAgICA9IDIxLCAgIC8vLzwgUEFOIElEIFRMVgorICAgICAgICBrQWN0aXZlVGltZXN0YW1wICAgICA9IDIyLCAgIC8vLzwgQWN0aXZlIFRpbWVzdGFtcCBUTFYKKyAgICAgICAga1BlbmRpbmdUaW1lc3RhbXAgICAgPSAyMywgICAvLy88IFBlbmRpbmcgVGltZXN0YW1wIFRMVgorICAgICAgICBrQWN0aXZlRGF0YXNldCAgICAgICA9IDI0LCAgIC8vLzwgQWN0aXZlIE9wZXJhdGlvbmFsIERhdGFzZXQgVExWCisgICAgICAgIGtQZW5kaW5nRGF0YXNldCAgICAgID0gMjUsICAgLy8vPCBQZW5kaW5nIE9wZXJhdGlvbmFsIERhdGFzZXQgVExWCisgICAgICAgIGtEaXNjb3ZlcnkgICAgICAgICAgID0gMjYsICAgLy8vPCBUaHJlYWQgRGlzY292ZXJ5IFRMVgorICAgICAgICBrSW52YWxpZCAgICAgICAgICAgICA9IDI1NSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG90OjpUbHY6OkdldFR5cGUoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeyBvdDo6VGx2OjpTZXRUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZWFkcyB0aGUgcmVxdWVzdGVkIFRMViBvdXQgb2YgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW2luXSAgIGFNYXhMZW5ndGggIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW291dF0gIGFUbHYgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYgdGhhdCB3aWxsIGJlIGNvcGllZCB0by4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgY29waWVkIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VGx2KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBUeXBlIGFUeXBlLCB1aW50MTZfdCBhTWF4TGVuZ3RoLCBUbHYgJmFUbHYpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhTWF4TGVuZ3RoLCBhVGx2KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHN0YXRpYyBtZXRob2Qgb2J0YWlucyB0aGUgb2Zmc2V0IG9mIGEgVExWIHdpdGhpbiBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhTWVzc2FnZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICAgYVR5cGUgICAgICAgVGhlIFR5cGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYU9mZnNldCAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG9mZnNldCBvZiB0aGUgVExWLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBjb3BpZWQgdGhlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgQ291bGQgbm90IGZpbmQgdGhlIFRMViB3aXRoIFR5cGUgQHAgYVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBHZXRPZmZzZXQoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIFR5cGUgYVR5cGUsIHVpbnQxNl90ICZhT2Zmc2V0KSB7CisgICAgICAgIHJldHVybiBvdDo6VGx2OjpHZXRPZmZzZXQoYU1lc3NhZ2UsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSwgYU9mZnNldCk7CisgICAgfQorCit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU291cmNlQWRkcmVzc1RsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtTb3VyY2VBZGRyZXNzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYzE2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVJsb2MxNik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2MxNih1aW50MTZfdCBhUmxvYzE2KSB7IG1SbG9jMTYgPSBIb3N0U3dhcDE2KGFSbG9jMTYpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVJsb2MxNjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBNb2RlVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa01vZGUpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNb2RlUnhPbldoZW5JZGxlICAgICAgPSAxIDw8IDMsCisgICAgICAgIGtNb2RlU2VjdXJlRGF0YVJlcXVlc3QgPSAxIDw8IDIsCisgICAgICAgIGtNb2RlRkZEICAgICAgICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIGtNb2RlRnVsbE5ldHdvcmtEYXRhICAgPSAxIDw8IDAsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIE1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TW9kZSh2b2lkKSBjb25zdCB7IHJldHVybiBtTW9kZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNb2RlICBUaGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TW9kZSh1aW50OF90IGFNb2RlKSB7IG1Nb2RlID0gYU1vZGU7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1Nb2RlOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRpbWVvdXRUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrVGltZW91dCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0VGltZW91dCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UaW1lb3V0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGltZW91dCh1aW50MzJfdCBhVGltZW91dCkgeyBtVGltZW91dCA9IEhvc3RTd2FwMzIoYVRpbWVvdXQpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbVRpbWVvdXQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2hhbGxlbmdlVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heFNpemUgPSA4LCAgLy8vPCBNYXhpbXVtIHNpemUgaW4gYnl0ZXMgKFRocmVhZCBTcGVjaWZpY2F0aW9uKS4KKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0NoYWxsZW5nZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID49IDQgJiYgR2V0TGVuZ3RoKCkgPD0gODsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIENoYWxsZW5nZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0Q2hhbGxlbmdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1DaGFsbGVuZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENoYWxsZW5nZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFsbGVuZ2UgIEEgcG9pbnRlciB0byB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDaGFsbGVuZ2UoY29uc3QgdWludDhfdCAqYUNoYWxsZW5nZSkgeyBtZW1jcHkobUNoYWxsZW5nZSwgYUNoYWxsZW5nZSwgR2V0TGVuZ3RoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ2hhbGxlbmdlW2tNYXhTaXplXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBSZXNwb25zZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhTaXplID0gOCwgIC8vLzwgTWF4aW11bSBzaXplIGluIGJ5dGVzIChUaHJlYWQgU3BlY2lmaWNhdGlvbikuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtSZXNwb25zZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFJlc3BvbnNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBSZXNwb25zZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldFJlc3BvbnNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1SZXNwb25zZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUmVzcG9uc2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmVzcG9uc2UgIEEgcG9pbnRlciB0byB0aGUgUmVzcG9uc2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlc3BvbnNlKGNvbnN0IHVpbnQ4X3QgKmFSZXNwb25zZSkgeyBtZW1jcHkobVJlc3BvbnNlLCBhUmVzcG9uc2UsIEdldExlbmd0aCgpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVJlc3BvbnNlW2tNYXhTaXplXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBMaW5rRnJhbWVDb3VudGVyVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0xpbmtGcmFtZUNvdW50ZXIpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEZyYW1lQ291bnRlcih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1GcmFtZUNvdW50ZXIpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQ291bnRlciAgVGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZyYW1lQ291bnRlcih1aW50MzJfdCBhRnJhbWVDb3VudGVyKSB7IG1GcmFtZUNvdW50ZXIgPSBIb3N0U3dhcDMyKGFGcmFtZUNvdW50ZXIpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbUZyYW1lQ291bnRlcjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBSb3V0ZVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtSb3V0ZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIEdldExlbmd0aCgpID49IHNpemVvZihtUm91dGVySWRTZXF1ZW5jZSkgKyBzaXplb2YobVJvdXRlcklkTWFzaykgJiYKKyAgICAgICAgICAgICAgIEdldExlbmd0aCgpIDw9IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZXJJZFNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Sb3V0ZXJJZFNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlcklkU2VxdWVuY2UodWludDhfdCBhU2VxdWVuY2UpIHsgbVJvdXRlcklkU2VxdWVuY2UgPSBhU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgUm91dGVyIElEIE1hc2suCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyUm91dGVySWRNYXNrKHZvaWQpIHsgbWVtc2V0KG1Sb3V0ZXJJZE1hc2ssIDAsIHNpemVvZihtUm91dGVySWRNYXNrKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhIFJvdXRlciBJRCBiaXQgaXMgc2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFJvdXRlciBJRCBiaXQgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBSb3V0ZXIgSUQgYml0IGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUm91dGVySWRTZXQodWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtUm91dGVySWRNYXNrW2FSb3V0ZXJJZCAvIDhdICYgKDB4ODAgPj4gKGFSb3V0ZXJJZCAlIDgpKSkgIT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZXIgSUQgYml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElEIGJpdCB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlcklkKHVpbnQ4X3QgYVJvdXRlcklkKSB7IG1Sb3V0ZXJJZE1hc2tbYVJvdXRlcklkIC8gOF0gfD0gMHg4MCA+PiAoYVJvdXRlcklkICUgOCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJvdXRlIERhdGEgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdXRlIERhdGEgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZURhdGFMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgLSBzaXplb2YobVJvdXRlcklkU2VxdWVuY2UpIC0gc2l6ZW9mKG1Sb3V0ZXJJZE1hc2spOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZSBEYXRhIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBSb3V0ZSBEYXRhIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVEYXRhTGVuZ3RoKHVpbnQ4X3QgYUxlbmd0aCkgeworICAgICAgICBTZXRMZW5ndGgoc2l6ZW9mKG1Sb3V0ZXJJZFNlcXVlbmNlKSArIHNpemVvZihtUm91dGVySWRNYXNrKSArIGFMZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJvdXRlIENvc3QgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdXRlIENvc3QgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZUNvc3QodWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIGtSb3V0ZUNvc3RNYXNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlIENvc3QgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICAgVGhlIFJvdXRlciBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVDb3N0ICBUaGUgUm91dGUgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVDb3N0KHVpbnQ4X3QgYVJvdXRlcklkLCB1aW50OF90IGFSb3V0ZUNvc3QpIHsKKyAgICAgICAgbVJvdXRlRGF0YVthUm91dGVySWRdID0gKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIH5rUm91dGVDb3N0TWFzaykgfCBhUm91dGVDb3N0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSBJbiB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IEluIHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlua1F1YWxpdHlJbih1aW50OF90IGFSb3V0ZXJJZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIGtMaW5rUXVhbGl0eUluTWFzaykgPj4ga0xpbmtRdWFsaXR5SW5PZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IEluIHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgICAgVGhlIFJvdXRlciBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgSW4gdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eUluKHVpbnQ4X3QgYVJvdXRlcklkLCB1aW50OF90IGFMaW5rUXVhbGl0eSkgeworICAgICAgICBtUm91dGVEYXRhW2FSb3V0ZXJJZF0gPQorICAgICAgICAgICAgKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIH5rTGlua1F1YWxpdHlJbk1hc2spIHwKKyAgICAgICAgICAgICgoYUxpbmtRdWFsaXR5IDw8IGtMaW5rUXVhbGl0eUluT2Zmc2V0KSAmIGtMaW5rUXVhbGl0eUluTWFzayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IE91dCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IE91dCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5T3V0KHVpbnQ4X3QgYVJvdXRlcklkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobVJvdXRlRGF0YVthUm91dGVySWRdICYga0xpbmtRdWFsaXR5T3V0TWFzaykgPj4ga0xpbmtRdWFsaXR5T3V0T2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExpbmsgUXVhbGl0eSBPdXQgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICAgICBUaGUgUm91dGVyIElELgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSBPdXQgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eU91dCh1aW50OF90IGFSb3V0ZXJJZCwgdWludDhfdCBhTGlua1F1YWxpdHkpIHsKKyAgICAgICAgbVJvdXRlRGF0YVthUm91dGVySWRdID0KKyAgICAgICAgICAgIChtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiB+a0xpbmtRdWFsaXR5T3V0TWFzaykgfAorICAgICAgICAgICAgKChhTGlua1F1YWxpdHkgPDwga0xpbmtRdWFsaXR5T3V0T2Zmc2V0KSAmIGtMaW5rUXVhbGl0eU91dE1hc2spOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTGlua1F1YWxpdHlPdXRPZmZzZXQgPSA2LAorICAgICAgICBrTGlua1F1YWxpdHlPdXRNYXNrID0gMyA8PCBrTGlua1F1YWxpdHlPdXRPZmZzZXQsCisgICAgICAgIGtMaW5rUXVhbGl0eUluT2Zmc2V0ID0gNCwKKyAgICAgICAga0xpbmtRdWFsaXR5SW5NYXNrID0gMyA8PCBrTGlua1F1YWxpdHlJbk9mZnNldCwKKyAgICAgICAga1JvdXRlQ29zdE9mZnNldCA9IDAsCisgICAgICAgIGtSb3V0ZUNvc3RNYXNrID0gMHhmIDw8IGtSb3V0ZUNvc3RPZmZzZXQsCisgICAgfTsKKyAgICB1aW50OF90IG1Sb3V0ZXJJZFNlcXVlbmNlOworICAgIHVpbnQ4X3QgbVJvdXRlcklkTWFza1tCaXRWZWN0b3JCeXRlcyhrTWF4Um91dGVySWQgKyAxKV07CisgICAgdWludDhfdCBtUm91dGVEYXRhW2tNYXhSb3V0ZXJzXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBNbGVGcmFtZUNvdW50ZXJUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTWxlRnJhbWVDb3VudGVyKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtRnJhbWVDb3VudGVyKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRnJhbWUgQ291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUNvdW50ZXIgIFRoZSBGcmFtZSBDb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRGcmFtZUNvdW50ZXIodWludDMyX3QgYUZyYW1lQ291bnRlcikgeyBtRnJhbWVDb3VudGVyID0gSG9zdFN3YXAzMihhRnJhbWVDb3VudGVyKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1GcmFtZUNvdW50ZXI7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQWRkcmVzczE2VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0FkZHJlc3MxNik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFJsb2MxNih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1SbG9jMTYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSbG9jMTYodWludDE2X3QgYVJsb2MxNikgeyBtUmxvYzE2ID0gSG9zdFN3YXAxNihhUmxvYzE2KTsgfQorCitwcml2YXRlOgorICAgIHVpbnQxNl90IG1SbG9jMTY7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTGVhZGVyRGF0YVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtMZWFkZXJEYXRhKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUGFydGl0aW9uIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0UGFydGl0aW9uSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtUGFydGl0aW9uSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFydGl0aW9uSWQgIFRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBhcnRpdGlvbklkKHVpbnQzMl90IGFQYXJ0aXRpb25JZCkgeyBtUGFydGl0aW9uSWQgPSBIb3N0U3dhcDMyKGFQYXJ0aXRpb25JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBXZWlnaHRpbmcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFdlaWdodGluZyh2b2lkKSBjb25zdCB7IHJldHVybiBtV2VpZ2h0aW5nOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBXZWlnaHRpbmcgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhV2VpZ2h0aW5nICBUaGUgV2VpZ2h0aW5nIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRXZWlnaHRpbmcodWludDhfdCBhV2VpZ2h0aW5nKSB7IG1XZWlnaHRpbmcgPSBhV2VpZ2h0aW5nOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXREYXRhVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtRGF0YVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREYXRhVmVyc2lvbih1aW50OF90IGFWZXJzaW9uKSAgeyBtRGF0YVZlcnNpb24gPSBhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhYmxlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGFibGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTdGFibGVEYXRhVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtU3RhYmxlRGF0YVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN0YWJsZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVmVyc2lvbiAgVGhlIFN0YWJsZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YWJsZURhdGFWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pIHsgbVN0YWJsZURhdGFWZXJzaW9uID0gYVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlYWRlciBSb3V0ZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGVhZGVyIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVhZGVyUm91dGVySWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUxlYWRlclJvdXRlcklkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZWFkZXIgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgTGVhZGVyIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGVhZGVyUm91dGVySWQodWludDhfdCBhUm91dGVySWQpIHsgbUxlYWRlclJvdXRlcklkID0gYVJvdXRlcklkOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbVBhcnRpdGlvbklkOworICAgIHVpbnQ4X3QgbVdlaWdodGluZzsKKyAgICB1aW50OF90IG1EYXRhVmVyc2lvbjsKKyAgICB1aW50OF90IG1TdGFibGVEYXRhVmVyc2lvbjsKKyAgICB1aW50OF90IG1MZWFkZXJSb3V0ZXJJZDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBOZXR3b3JrRGF0YVRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtOZXR3b3JrRGF0YSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpIDwgc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXROZXR3b3JrRGF0YSh2b2lkKSB7IHJldHVybiBtTmV0d29ya0RhdGE7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXR3b3JrRGF0YSAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5ldHdvcmtEYXRhKGNvbnN0IHVpbnQ4X3QgKmFOZXR3b3JrRGF0YSkgeyBtZW1jcHkobU5ldHdvcmtEYXRhLCBhTmV0d29ya0RhdGEsIEdldExlbmd0aCgpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5ldHdvcmtEYXRhWzI1NV07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGx2UmVxdWVzdFRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtUbHZSZXF1ZXN0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVExWIGxpc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFRMViBsaXN0LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0VGx2cyh2b2lkKSBjb25zdCB7IHJldHVybiBtVGx2czsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgdGhlIG5leHQgVGx2IGluIHRoZSBUbHZSZXF1ZXN0VGx2LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgVGx2LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICAgTm8gc3Vic2VxdWVudCBUbHYgZXhpc3RzIGluIFRsdlJlcXVlc3RUbHYuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldE5leHRUbHYoVGx2UmVxdWVzdEl0ZXJhdG9yICZhSXRlcmF0b3IsIHVpbnQ4X3QgJmFUbHYpIHsKKyAgICAgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgICAgICBpZiAoYUl0ZXJhdG9yIDwgR2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGFUbHYgPSBtVGx2c1thSXRlcmF0b3JdOworICAgICAgICAgICAgYUl0ZXJhdG9yID0gc3RhdGljX2Nhc3Q8VGx2UmVxdWVzdEl0ZXJhdG9yPihhSXRlcmF0b3IgKyBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGxpc3Qgb2YgVExWcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHZzICBBIHBvaW50ZXIgdG8gdGhlIFRMViBsaXN0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUbHZzKGNvbnN0IHVpbnQ4X3QgKmFUbHZzKSB7IG1lbWNweShtVGx2cywgYVRsdnMsIEdldExlbmd0aCgpKTsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhUbHZzID0gOCwKKyAgICB9OworICAgIHVpbnQ4X3QgbVRsdnNba01heFRsdnNdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFNjYW5NYXNrVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1NjYW5NYXNrKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUm91dGVyRmxhZyA9IDEgPDwgNywKKyAgICAgICAga0VuZERldmljZUZsYWcgPSAxIDw8IDYsCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBSb3V0ZXIgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJSb3V0ZXJGbGFnKHZvaWQpIHsgbU1hc2sgJj0gfmtSb3V0ZXJGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZXIgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVyRmxhZyh2b2lkKSB7IG1NYXNrIHw9IGtSb3V0ZXJGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFJvdXRlciBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBSb3V0ZXIgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFJvdXRlciBmbGFnIGlzIG5vdCBzZXQuCisgICAgICovCisgICAgYm9vbCBJc1JvdXRlckZsYWdTZXQodm9pZCkgeyByZXR1cm4gKG1NYXNrICYga1JvdXRlckZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgRW5kIERldmljZSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckVuZERldmljZUZsYWcodm9pZCkgeyBtTWFzayAmPSB+a0VuZERldmljZUZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEVuZCBEZXZpY2UgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RW5kRGV2aWNlRmxhZyh2b2lkKSB7IG1NYXNrIHw9IGtFbmREZXZpY2VGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEVuZCBEZXZpY2UgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgRW5kIERldmljZSBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgRW5kIERldmljZSBmbGFnIGlzIG5vdCBzZXQuCisgICAgICovCisgICAgYm9vbCBJc0VuZERldmljZUZsYWdTZXQodm9pZCkgeyByZXR1cm4gKG1NYXNrICYga0VuZERldmljZUZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1hc2sgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNYXNrICBUaGUgTWFzayBieXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYXNrKHVpbnQ4X3QgYU1hc2spIHsgbU1hc2sgPSBhTWFzazsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU1hc2s7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ29ubmVjdGl2aXR5VGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0Nvbm5lY3Rpdml0eSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikgfHwKKyAgICAgICAgICAgICAgICBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikgLSBzaXplb2YobVNlZEJ1ZmZlclNpemUpIC0gc2l6ZW9mKG1TZWREYXRhZ3JhbUNvdW50KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUGFyZW50IFByaW9yaXR5IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRQYXJlbnRQcmlvcml0eSh2b2lkKSBjb25zdCB7IHJldHVybiAoc3RhdGljX2Nhc3Q8aW50OF90PihtUGFyZW50UHJpb3JpdHkgJiBrUGFyZW50UHJpb3JpdHlNYXNrKSkgPj4ga1BhcmVudFByaW9yaXR5T2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQYXJlbnQgUHJpb3JpdHkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFQYXJlbnRQcmlvcml0eSAgVGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFyZW50UHJpb3JpdHkoaW50OF90IGFQYXJlbnRQcmlvcml0eSkgeworICAgICAgICBtUGFyZW50UHJpb3JpdHkgPSAoYVBhcmVudFByaW9yaXR5IDw8IGtQYXJlbnRQcmlvcml0eU9mZnNldCkgJiBrUGFyZW50UHJpb3JpdHlNYXNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSAzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSAzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eTModm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtRdWFsaXR5MzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgMyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHkzKHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eTMgPSBhTGlua1F1YWxpdHk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSAyIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSAyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eTIodm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtRdWFsaXR5MjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgMiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHkyKHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eTIgPSBhTGlua1F1YWxpdHk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExpbmsgUXVhbGl0eSAxIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExpbmsgUXVhbGl0eSAxIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMaW5rUXVhbGl0eTEodm9pZCkgY29uc3QgeyByZXR1cm4gbUxpbmtRdWFsaXR5MTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDEgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgMSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHkxKHVpbnQ4X3QgYUxpbmtRdWFsaXR5KSB7IG1MaW5rUXVhbGl0eTEgPSBhTGlua1F1YWxpdHk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEFjdGl2ZSBSb3V0ZXJzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEFjdGl2ZSBSb3V0ZXJzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRBY3RpdmVSb3V0ZXJzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVSb3V0ZXJzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBBY3RpdmUgUm91dGVycyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFBY3RpdmVSb3V0ZXJzICBUaGUgQWN0aXZlIFJvdXRlcnMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFjdGl2ZVJvdXRlcnModWludDhfdCBhQWN0aXZlUm91dGVycykgeyBtQWN0aXZlUm91dGVycyA9IGFBY3RpdmVSb3V0ZXJzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMZWFkZXIgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZWFkZXIgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVhZGVyQ29zdCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVhZGVyQ29zdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGVhZGVyIENvc3QgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29zdCAgVGhlIExlYWRlciBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZWFkZXJDb3N0KHVpbnQ4X3QgYUNvc3QpIHsgbUxlYWRlckNvc3QgPSBhQ29zdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldElkU2VxdWVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUlkU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVNlcXVlbmNlICBUaGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElkU2VxdWVuY2UodWludDhfdCBhU2VxdWVuY2UpIHsgbUlkU2VxdWVuY2UgPSBhU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTRUQgQnVmZmVyIFNpemUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWRCdWZmZXJTaXplKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVNlZEJ1ZmZlclNpemUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTRUQgQnVmZmVyIFNpemUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VkQnVmZmVyU2l6ZSAgVGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VkQnVmZmVyU2l6ZSh1aW50MTZfdCBhU2VkQnVmZmVyU2l6ZSkgeyBtU2VkQnVmZmVyU2l6ZSA9IEhvc3RTd2FwMTYoYVNlZEJ1ZmZlclNpemUpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTRUQgRGF0YWdyYW0gQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU0VEIERhdGFncmFtIENvdW50IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRTZWREYXRhZ3JhbUNvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TZWREYXRhZ3JhbUNvdW50OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTRUQgRGF0YWdyYW0gQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VkRGF0YWdyYW1Db3VudCAgVGhlIFNFRCBEYXRhZ3JhbSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U2VkRGF0YWdyYW1Db3VudCh1aW50OF90IGFTZWREYXRhZ3JhbUNvdW50KSB7IG1TZWREYXRhZ3JhbUNvdW50ID0gYVNlZERhdGFncmFtQ291bnQ7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUGFyZW50UHJpb3JpdHlPZmZzZXQgPSA2LAorICAgICAgICBrUGFyZW50UHJpb3JpdHlNYXNrID0gMyA8PCBrUGFyZW50UHJpb3JpdHlPZmZzZXQsCisgICAgfTsKKworICAgIHVpbnQ4X3QgIG1QYXJlbnRQcmlvcml0eTsKKyAgICB1aW50OF90ICBtTGlua1F1YWxpdHkzOworICAgIHVpbnQ4X3QgIG1MaW5rUXVhbGl0eTI7CisgICAgdWludDhfdCAgbUxpbmtRdWFsaXR5MTsKKyAgICB1aW50OF90ICBtTGVhZGVyQ29zdDsKKyAgICB1aW50OF90ICBtSWRTZXF1ZW5jZTsKKyAgICB1aW50OF90ICBtQWN0aXZlUm91dGVyczsKKyAgICB1aW50MTZfdCBtU2VkQnVmZmVyU2l6ZTsKKyAgICB1aW50OF90ICBtU2VkRGF0YWdyYW1Db3VudDsKK30gIE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTGlua01hcmdpblRsdjogcHVibGljIFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtMaW5rTWFyZ2luKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMaW5rIE1hcmdpbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMaW5rIE1hcmdpbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlua01hcmdpbih2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua01hcmdpbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBNYXJnaW4gdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua01hcmdpbiAgVGhlIExpbmsgTWFyZ2luIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rTWFyZ2luKHVpbnQ4X3QgYUxpbmtNYXJnaW4pIHsgbUxpbmtNYXJnaW4gPSBhTGlua01hcmdpbjsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbUxpbmtNYXJnaW47Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgU3RhdHVzVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1N0YXR1cyk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogU3RhdHVzIHZhbHVlcy4KKyAgICAgKi8KKyAgICBlbnVtIFN0YXR1cworICAgIHsKKyAgICAgICAga0Vycm9yID0gMSwgICAvLy88IEVycm9yLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgU3RhdHVzIEdldFN0YXR1cyh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0dXM+KG1TdGF0dXMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU3RhdHVzICBUaGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdGF0dXMoU3RhdHVzIGFTdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFTdGF0dXMpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtU3RhdHVzOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFZlcnNpb25UbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrVmVyc2lvbik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0VmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1WZXJzaW9uKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VmVyc2lvbih1aW50MTZfdCBhVmVyc2lvbikgeyBtVmVyc2lvbiA9IEhvc3RTd2FwMTYoYVZlcnNpb24pOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVZlcnNpb247Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgU291cmNlIEFkZHJlc3MgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSVB2NiBhZGRyZXNzIG9yIElJRCBsZW5ndGguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSVB2NiBhZGRyZXNzIGxlbmd0aCBpZiB0aGUgQ29tcHJlc3NlZCBiaXQgaXMgY2xlYXIsIG9yIHRoZSBJSUQgbGVuZ3RoIGlmIHRoZSBDb21wcmVzc2VkIGJpdCBpcworICAgICAqICAgICAgICAgIHNldC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHNpemVvZihtQ29udHJvbCkgKyAoSXNDb21wcmVzc2VkKCkgPyBzaXplb2YobUlpZCkgOiBzaXplb2YobUlwNkFkZHJlc3MpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBDb21wcmVzc2VkIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIENvbXByZXNzZWQgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIENvbXByZXNzZWQgZmxhZyBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0NvbXByZXNzZWQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1Db250cm9sICYga0NvbXByZXNzZWQpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFVuY29tcHJlc3NlZCBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRVbmNvbXByZXNzZWQodm9pZCkgeyBtQ29udHJvbCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENvbnRleHQgSUQgZm9yIHRoZSBjb21wcmVzc2VkIGZvcm0uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ29udGV4dCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q29udGV4dElkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db250cm9sICYga0NpZE1hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENvbnRleHQgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dElkICBUaGUgQ29udGV4dCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29udGV4dElkKHVpbnQ4X3QgYUNvbnRleHRJZCkgeyBtQ29udHJvbCA9IGtDb21wcmVzc2VkIHwgYUNvbnRleHRJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIElJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSUlEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0SWlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JaWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJaWQgIEEgcG9pbnRlciB0byB0aGUgSUlEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJaWQoY29uc3QgdWludDhfdCAqYUlpZCkgeyBtZW1jcHkobUlpZCwgYUlpZCwgc2l6ZW9mKG1JaWQpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIElQdjYgQWRkcmVzcyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSVB2NiBBZGRyZXNzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICpHZXRJcDZBZGRyZXNzKHZvaWQpIGNvbnN0IHsgcmV0dXJuICZtSXA2QWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSVB2NiBBZGRyZXNzIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IEFkZHJlc3MgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElwNkFkZHJlc3MoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcykgeyBtSXA2QWRkcmVzcyA9IGFBZGRyZXNzOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0NvbXByZXNzZWQgPSAxIDw8IDcsCisgICAgICAgIGtDaWRNYXNrID0gMHhmLAorICAgIH07CisKKyAgICB1aW50OF90IG1Db250cm9sOworICAgIHVuaW9uCisgICAgeworICAgICAgICB1aW50OF90IG1JaWRbSXA2OjpBZGRyZXNzOjprSW50ZXJmYWNlSWRlbnRpZmllclNpemVdOworICAgICAgICBJcDY6OkFkZHJlc3MgbUlwNkFkZHJlc3M7CisgICAgfSBPVF9UT09MX1BBQ0tFRF9GSUVMRDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTb3VyY2UgQWRkcmVzcyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBBZGRyZXNzUmVnaXN0cmF0aW9uVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0FkZHJlc3NSZWdpc3RyYXRpb24pOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpJ3RoIEFkZHJlc3MgRW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5kZXggIFRoZSBpbmRleC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgaSd0aCBBZGRyZXNzIEVudHJ5LgorICAgICAqCisgICAgICovCisgICAgY29uc3QgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5ICpHZXRBZGRyZXNzRW50cnkodWludDhfdCBhSW5kZXgpIGNvbnN0IHsKKyAgICAgICAgY29uc3QgQWRkcmVzc1JlZ2lzdHJhdGlvbkVudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihtQWRkcmVzc2VzKTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqZW5kID0gY3VyICsgR2V0TGVuZ3RoKCk7CisKKyAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgeworICAgICAgICAgICAgZW50cnkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEFkZHJlc3NSZWdpc3RyYXRpb25FbnRyeSAqPihjdXIpOworCisgICAgICAgICAgICBpZiAoYUluZGV4ID09IDApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyICs9IGVudHJ5LT5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGFJbmRleC0tOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChjdXIgPCBlbmQpID8gZW50cnkgOiBOVUxMOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBZGRyZXNzUmVnaXN0cmF0aW9uRW50cnkgbUFkZHJlc3Nlc1s0XTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDaGFubmVsIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENoYW5uZWxUbHY6IHB1YmxpYyBUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQ2hhbm5lbCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ2hhbm5lbCBQYWdlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENoYW5uZWwgUGFnZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q2hhbm5lbFBhZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbUNoYW5uZWxQYWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDaGFubmVsIFBhZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ2hhbm5lbFBhZ2UgIFRoZSBDaGFubmVsIFBhZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldENoYW5uZWxQYWdlKHVpbnQ4X3QgYUNoYW5uZWxQYWdlKSB7IG1DaGFubmVsUGFnZSA9IGFDaGFubmVsUGFnZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBDaGFubmVsIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hhbm5lbCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1DaGFubmVsKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDaGFubmVsICBUaGUgQ2hhbm5lbCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hhbm5lbCh1aW50MTZfdCBhQ2hhbm5lbCkgeyBtQ2hhbm5lbCA9IEhvc3RTd2FwMTYoYUNoYW5uZWwpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtQ2hhbm5lbFBhZ2U7CisgICAgdWludDE2X3QgbUNoYW5uZWw7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUEFOIElEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFBhbklkVGx2OiBwdWJsaWMgVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1BhbklkKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUEFOIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UGFuSWQodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUGFuSWQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGFuSWQgIFRoZSBQQU4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBhbklkKHVpbnQxNl90IGFQYW5JZCkgeyBtUGFuSWQgPSBIb3N0U3dhcDE2KGFQYW5JZCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUGFuSWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQWN0aXZlIFRpbWVzdGFtcCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBBY3RpdmVUaW1lc3RhbXBUbHYgOiBwdWJsaWMgVGx2LCBwdWJsaWMgTWVzaENvUDo6VGltZXN0YW1wCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7CisgICAgICAgIFNldFR5cGUoTWxlOjpUbHY6OmtBY3RpdmVUaW1lc3RhbXApOworICAgICAgICBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUbHYpKTsKKyAgICAgICAgVGltZXN0YW1wOjpJbml0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdik7IH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQZW5kaW5nIFRpbWVzdGFtcCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBQZW5kaW5nVGltZXN0YW1wVGx2IDogcHVibGljIFRsdiwgcHVibGljIE1lc2hDb1A6OlRpbWVzdGFtcAoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeworICAgICAgICBTZXRUeXBlKE1sZTo6VGx2OjprUGVuZGluZ1RpbWVzdGFtcCk7CisgICAgICAgIFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRsdikpOworICAgICAgICBUaW1lc3RhbXA6OkluaXQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGx2KTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE1sZQorCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE1MRV9UTFZTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGEuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlYTc3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGEuY3BwCkBAIC0wLDAgKzEsNjY3IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNvbW1vbiBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJuZXR3b3JrX2RhdGEudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5ldHdvcmtfZGF0YS5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworTmV0d29ya0RhdGE6Ok5ldHdvcmtEYXRhKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYsIGJvb2wgYUxvY2FsKToKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtTG9jYWwoYUxvY2FsKSwKKyAgICBtTGFzdEF0dGVtcHRXYWl0KGZhbHNlKSwKKyAgICBtTGFzdEF0dGVtcHQoMCkKK3sKKyAgICBtTGVuZ3RoID0gMDsKK30KKworCit2b2lkIE5ldHdvcmtEYXRhOjpDbGVhcih2b2lkKQoreworICAgIG1MZW5ndGggPSAwOworfQorCit2b2lkIE5ldHdvcmtEYXRhOjpHZXROZXR3b3JrRGF0YShib29sIGFTdGFibGUsIHVpbnQ4X3QgKmFEYXRhLCB1aW50OF90ICZhRGF0YUxlbmd0aCkKK3sKKyAgICBhc3NlcnQoYURhdGEgIT0gTlVMTCk7CisKKyAgICBtZW1jcHkoYURhdGEsIG1UbHZzLCBtTGVuZ3RoKTsKKyAgICBhRGF0YUxlbmd0aCA9IG1MZW5ndGg7CisKKyAgICBpZiAoYVN0YWJsZSkKKyAgICB7CisgICAgICAgIFJlbW92ZVRlbXBvcmFyeURhdGEoYURhdGEsIGFEYXRhTGVuZ3RoKTsKKyAgICB9Cit9CisKK290RXJyb3IgTmV0d29ya0RhdGE6OkdldE5leHRPbk1lc2hQcmVmaXgob3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsIG90Qm9yZGVyUm91dGVyQ29uZmlnICphQ29uZmlnKQoreworICAgIHJldHVybiBHZXROZXh0T25NZXNoUHJlZml4KGFJdGVyYXRvciwgTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0LCBhQ29uZmlnKTsKK30KKworb3RFcnJvciBOZXR3b3JrRGF0YTo6R2V0TmV4dE9uTWVzaFByZWZpeChvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwgdWludDE2X3QgYVJsb2MxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgKmFDb25maWcpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArICphSXRlcmF0b3IpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisKKyAgICBmb3IgKDsgY3VyIDwgZW5kOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgICAgICBCb3JkZXJSb3V0ZXJUbHYgKmJvcmRlclJvdXRlcjsKKyAgICAgICAgQm9yZGVyUm91dGVyRW50cnkgKmJvcmRlclJvdXRlckVudHJ5ID0gTlVMTDsKKworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgIT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworCisgICAgICAgIGlmICgoYm9yZGVyUm91dGVyID0gRmluZEJvcmRlclJvdXRlcigqcHJlZml4KSkgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBib3JkZXJSb3V0ZXItPkdldE51bUVudHJpZXMoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYVJsb2MxNiA9PSBNYWM6OmtTaG9ydEFkZHJCcm9hZGNhc3QgfHwgYm9yZGVyUm91dGVyLT5HZXRFbnRyeShpKS0+R2V0UmxvYygpID09IGFSbG9jMTYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9yZGVyUm91dGVyRW50cnkgPSBib3JkZXJSb3V0ZXItPkdldEVudHJ5KGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGJvcmRlclJvdXRlckVudHJ5ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KGFDb25maWcsIDAsIHNpemVvZigqYUNvbmZpZykpOworICAgICAgICBtZW1jcHkoJmFDb25maWctPm1QcmVmaXgubVByZWZpeCwgcHJlZml4LT5HZXRQcmVmaXgoKSwgQml0VmVjdG9yQnl0ZXMocHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSkpOworICAgICAgICBhQ29uZmlnLT5tUHJlZml4Lm1MZW5ndGggPSBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpOworICAgICAgICBhQ29uZmlnLT5tUHJlZmVyZW5jZSA9IGJvcmRlclJvdXRlckVudHJ5LT5HZXRQcmVmZXJlbmNlKCk7CisgICAgICAgIGFDb25maWctPm1QcmVmZXJyZWQgPSBib3JkZXJSb3V0ZXJFbnRyeS0+SXNQcmVmZXJyZWQoKTsKKyAgICAgICAgYUNvbmZpZy0+bVNsYWFjID0gYm9yZGVyUm91dGVyRW50cnktPklzU2xhYWMoKTsKKyAgICAgICAgYUNvbmZpZy0+bURoY3AgPSBib3JkZXJSb3V0ZXJFbnRyeS0+SXNEaGNwKCk7CisgICAgICAgIGFDb25maWctPm1Db25maWd1cmUgPSBib3JkZXJSb3V0ZXJFbnRyeS0+SXNDb25maWd1cmUoKTsKKyAgICAgICAgYUNvbmZpZy0+bURlZmF1bHRSb3V0ZSA9IGJvcmRlclJvdXRlckVudHJ5LT5Jc0RlZmF1bHRSb3V0ZSgpOworICAgICAgICBhQ29uZmlnLT5tT25NZXNoID0gYm9yZGVyUm91dGVyRW50cnktPklzT25NZXNoKCk7CisgICAgICAgIGFDb25maWctPm1TdGFibGUgPSBjdXItPklzU3RhYmxlKCk7CisgICAgICAgIGFDb25maWctPm1SbG9jMTYgPSBib3JkZXJSb3V0ZXJFbnRyeS0+R2V0UmxvYygpOworCisgICAgICAgICphSXRlcmF0b3IgPSBzdGF0aWNfY2FzdDxvdE5ldHdvcmtEYXRhSXRlcmF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXItPkdldE5leHQoKSkgLSBtVGx2cyk7CisKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmV0d29ya0RhdGE6OkdldE5leHRFeHRlcm5hbFJvdXRlKG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLCBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcpCit7CisgICAgcmV0dXJuIEdldE5leHRFeHRlcm5hbFJvdXRlKGFJdGVyYXRvciwgTWFjOjprU2hvcnRBZGRyQnJvYWRjYXN0LCBhQ29uZmlnKTsKK30KKworb3RFcnJvciBOZXR3b3JrRGF0YTo6R2V0TmV4dEV4dGVybmFsUm91dGUob3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsIHVpbnQxNl90IGFSbG9jMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEV4dGVybmFsUm91dGVDb25maWcgKmFDb25maWcpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArICphSXRlcmF0b3IpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisKKyAgICBmb3IgKDsgY3VyIDwgZW5kOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgICAgICBIYXNSb3V0ZVRsdiAqaGFzUm91dGU7CisgICAgICAgIEhhc1JvdXRlRW50cnkgKmhhc1JvdXRlRW50cnkgPSBOVUxMOworCisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisKKyAgICAgICAgaWYgKChoYXNSb3V0ZSA9IEZpbmRIYXNSb3V0ZSgqcHJlZml4KSkgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBoYXNSb3V0ZS0+R2V0TnVtRW50cmllcygpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhUmxvYzE2ID09IE1hYzo6a1Nob3J0QWRkckJyb2FkY2FzdCB8fCBoYXNSb3V0ZS0+R2V0RW50cnkoaSktPkdldFJsb2MoKSA9PSBhUmxvYzE2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhc1JvdXRlRW50cnkgPSBoYXNSb3V0ZS0+R2V0RW50cnkoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzUm91dGVFbnRyeSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldChhQ29uZmlnLCAwLCBzaXplb2YoKmFDb25maWcpKTsKKyAgICAgICAgbWVtY3B5KCZhQ29uZmlnLT5tUHJlZml4Lm1QcmVmaXgsIHByZWZpeC0+R2V0UHJlZml4KCksIEJpdFZlY3RvckJ5dGVzKHByZWZpeC0+R2V0UHJlZml4TGVuZ3RoKCkpKTsKKyAgICAgICAgYUNvbmZpZy0+bVByZWZpeC5tTGVuZ3RoID0gcHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKTsKKyAgICAgICAgYUNvbmZpZy0+bVByZWZlcmVuY2UgPSBoYXNSb3V0ZUVudHJ5LT5HZXRQcmVmZXJlbmNlKCk7CisgICAgICAgIGFDb25maWctPm1TdGFibGUgPSBjdXItPklzU3RhYmxlKCk7CisgICAgICAgIGFDb25maWctPm1OZXh0SG9wSXNUaGlzRGV2aWNlID0gKGhhc1JvdXRlRW50cnktPkdldFJsb2MoKSA9PSBHZXROZXRpZigpLkdldE1sZSgpLkdldFJsb2MxNigpKTsKKworICAgICAgICAqYUl0ZXJhdG9yID0gc3RhdGljX2Nhc3Q8b3ROZXR3b3JrRGF0YUl0ZXJhdG9yPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY3VyLT5HZXROZXh0KCkpIC0gbVRsdnMpOworCisgICAgICAgIEV4aXROb3coZXJyb3IgPSBPVF9FUlJPUl9OT05FKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE5ldHdvcmtEYXRhOjpDb250YWluc09uTWVzaFByZWZpeGVzKE5ldHdvcmtEYXRhICZhQ29tcGFyZSwgdWludDE2X3QgYVJsb2MxNikKK3sKKyAgICBvdE5ldHdvcmtEYXRhSXRlcmF0b3Igb3V0ZXJJdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIG91dGVyQ29uZmlnOworICAgIGJvb2wgcnZhbCA9IHRydWU7CisKKyAgICB3aGlsZSAoYUNvbXBhcmUuR2V0TmV4dE9uTWVzaFByZWZpeCgmb3V0ZXJJdGVyYXRvciwgYVJsb2MxNiwgJm91dGVyQ29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgb3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGlubmVySXRlcmF0b3IgPSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVDsKKyAgICAgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgaW5uZXJDb25maWc7CisgICAgICAgIG90RXJyb3IgZXJyb3I7CisKKyAgICAgICAgd2hpbGUgKChlcnJvciA9IEdldE5leHRPbk1lc2hQcmVmaXgoJmlubmVySXRlcmF0b3IsIGFSbG9jMTYsICZpbm5lckNvbmZpZykpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoJm91dGVyQ29uZmlnLCAmaW5uZXJDb25maWcsIChzaXplb2Yob3V0ZXJDb25maWcpIC0gc2l6ZW9mKG91dGVyQ29uZmlnLm1SbG9jMTYpKSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK2Jvb2wgTmV0d29ya0RhdGE6OkNvbnRhaW5zRXh0ZXJuYWxSb3V0ZXMoTmV0d29ya0RhdGEgJmFDb21wYXJlLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIG90TmV0d29ya0RhdGFJdGVyYXRvciBvdXRlckl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnIG91dGVyQ29uZmlnOworICAgIGJvb2wgcnZhbCA9IHRydWU7CisKKyAgICB3aGlsZSAoYUNvbXBhcmUuR2V0TmV4dEV4dGVybmFsUm91dGUoJm91dGVySXRlcmF0b3IsIGFSbG9jMTYsICZvdXRlckNvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TmV0d29ya0RhdGFJdGVyYXRvciBpbm5lckl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyBpbm5lckNvbmZpZzsKKyAgICAgICAgb3RFcnJvciBlcnJvcjsKKworICAgICAgICB3aGlsZSAoKGVycm9yID0gR2V0TmV4dEV4dGVybmFsUm91dGUoJmlubmVySXRlcmF0b3IsIGFSbG9jMTYsICZpbm5lckNvbmZpZykpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoJm91dGVyQ29uZmlnLCAmaW5uZXJDb25maWcsIHNpemVvZihvdXRlckNvbmZpZykpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gZmFsc2UpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCit2b2lkIE5ldHdvcmtEYXRhOjpSZW1vdmVUZW1wb3JhcnlEYXRhKHVpbnQ4X3QgKmFEYXRhLCB1aW50OF90ICZhRGF0YUxlbmd0aCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhRGF0YSk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZDsKKyAgICBQcmVmaXhUbHYgKnByZWZpeDsKKyAgICB1aW50OF90IGxlbmd0aDsKKyAgICB1aW50OF90ICpkc3Q7CisgICAgdWludDhfdCAqc3JjOworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBlbmQgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFEYXRhICsgYURhdGFMZW5ndGgpOworCisgICAgICAgIGlmIChjdXIgPj0gZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoY3VyLT5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXg6CisgICAgICAgIHsKKyAgICAgICAgICAgIHByZWZpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisgICAgICAgICAgICBSZW1vdmVUZW1wb3JhcnlEYXRhKGFEYXRhLCBhRGF0YUxlbmd0aCwgKnByZWZpeCk7CisKKyAgICAgICAgICAgIGlmIChwcmVmaXgtPkdldFN1YlRsdnNMZW5ndGgoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyBjdXItPkdldExlbmd0aCgpOworICAgICAgICAgICAgICAgIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXIpOworICAgICAgICAgICAgICAgIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXItPkdldE5leHQoKSk7CisgICAgICAgICAgICAgICAgbWVtbW92ZShkc3QsIHNyYywgYURhdGFMZW5ndGggLSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyYyAtIGFEYXRhKSk7CisgICAgICAgICAgICAgICAgYURhdGFMZW5ndGggLT0gbGVuZ3RoOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIHByZWZpeCBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IHRsdgorICAgICAgICAgICAgaWYgKCFjdXItPklzU3RhYmxlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIGN1ci0+R2V0TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZHN0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1cik7CisgICAgICAgICAgICAgICAgc3JjID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ci0+R2V0TmV4dCgpKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGRzdCwgc3JjLCBhRGF0YUxlbmd0aCAtIHN0YXRpY19jYXN0PHNpemVfdD4oc3JjIC0gYURhdGEpKTsKKyAgICAgICAgICAgICAgICBhRGF0YUxlbmd0aCAtPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIGRvbmUiLCBhRGF0YSwgYURhdGFMZW5ndGgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhOjpSZW1vdmVUZW1wb3JhcnlEYXRhKHVpbnQ4X3QgKmFEYXRhLCB1aW50OF90ICZhRGF0YUxlbmd0aCwgUHJlZml4VGx2ICZhUHJlZml4KQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBhUHJlZml4LkdldFN1YlRsdnMoKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kOworICAgIEJvcmRlclJvdXRlclRsdiAqYm9yZGVyUm91dGVyOworICAgIEhhc1JvdXRlVGx2ICpoYXNSb3V0ZTsKKyAgICBDb250ZXh0VGx2ICpjb250ZXh0OworICAgIEJvcmRlclJvdXRlckVudHJ5ICpib3JkZXJSb3V0ZXJFbnRyeTsKKyAgICBIYXNSb3V0ZUVudHJ5ICpoYXNSb3V0ZUVudHJ5OworICAgIHVpbnQ4X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgY29udGV4dElkOworICAgIHVpbnQ4X3QgKmRzdDsKKyAgICB1aW50OF90ICpzcmM7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIGVuZCA9IGFQcmVmaXguR2V0TmV4dCgpOworCisgICAgICAgIGlmIChjdXIgPj0gZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXItPklzU3RhYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VyLT5HZXRUeXBlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUJvcmRlclJvdXRlcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXIgPSBGaW5kQm9yZGVyUm91dGVyKGFQcmVmaXgpOworCisgICAgICAgICAgICAgICAgaWYgKChjb250ZXh0ID0gRmluZENvbnRleHQoYVByZWZpeCkpID09IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LT5HZXRDb250ZXh0SWQoKTsKKworICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgcF9ib3JkZXJfcm91dGVyXzE2CisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYm9yZGVyUm91dGVyLT5HZXROdW1FbnRyaWVzKCk7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJvcmRlclJvdXRlckVudHJ5ID0gYm9yZGVyUm91dGVyLT5HZXRFbnRyeShpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYm9yZGVyUm91dGVyRW50cnktPklzRGhjcCgpIHx8IGJvcmRlclJvdXRlckVudHJ5LT5Jc0NvbmZpZ3VyZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXJFbnRyeS0+U2V0UmxvYygweGZjMDAgfCBjb250ZXh0SWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUm91dGVyRW50cnktPlNldFJsb2MoMHhmZmZlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUhhc1JvdXRlOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhc1JvdXRlID0gRmluZEhhc1JvdXRlKGFQcmVmaXgpOworCisgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSByX2JvcmRlcl9yb3V0ZXJfMTYKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaiA9IDA7IGogPCBoYXNSb3V0ZS0+R2V0TnVtRW50cmllcygpOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYXNSb3V0ZUVudHJ5ID0gaGFzUm91dGUtPkdldEVudHJ5KGopOworICAgICAgICAgICAgICAgICAgICBoYXNSb3V0ZUVudHJ5LT5TZXRSbG9jKDB4ZmZmZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGtlZXAgc3RhYmxlIHRsdgorICAgICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IHRsdgorICAgICAgICAgICAgbGVuZ3RoID0gc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIGN1ci0+R2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY3VyKTsKKyAgICAgICAgICAgIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXItPkdldE5leHQoKSk7CisgICAgICAgICAgICBtZW1tb3ZlKGRzdCwgc3JjLCBhRGF0YUxlbmd0aCAtIHN0YXRpY19jYXN0PHNpemVfdD4oc3JjIC0gYURhdGEpKTsKKyAgICAgICAgICAgIGFQcmVmaXguU2V0U3ViVGx2c0xlbmd0aChhUHJlZml4LkdldFN1YlRsdnNMZW5ndGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICBhRGF0YUxlbmd0aCAtPSBsZW5ndGg7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0JvcmRlclJvdXRlclRsdiAqTmV0d29ya0RhdGE6OkZpbmRCb3JkZXJSb3V0ZXIoUHJlZml4VGx2ICZhUHJlZml4KQoreworICAgIEJvcmRlclJvdXRlclRsdiAqcnZhbCA9IE5VTEw7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSBhUHJlZml4LkdldE5leHQoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQm9yZGVyUm91dGVyKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSByZWludGVycHJldF9jYXN0PEJvcmRlclJvdXRlclRsdiAqPihjdXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworQm9yZGVyUm91dGVyVGx2ICpOZXR3b3JrRGF0YTo6RmluZEJvcmRlclJvdXRlcihQcmVmaXhUbHYgJmFQcmVmaXgsIGJvb2wgYVN0YWJsZSkKK3sKKyAgICBCb3JkZXJSb3V0ZXJUbHYgKnJ2YWwgPSBOVUxMOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBhUHJlZml4LkdldFN1YlRsdnMoKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gYVByZWZpeC5HZXROZXh0KCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IE5ldHdvcmtEYXRhVGx2OjprVHlwZUJvcmRlclJvdXRlciAmJgorICAgICAgICAgICAgY3VyLT5Jc1N0YWJsZSgpID09IGFTdGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qm9yZGVyUm91dGVyVGx2ICo+KGN1cikpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitIYXNSb3V0ZVRsdiAqTmV0d29ya0RhdGE6OkZpbmRIYXNSb3V0ZShQcmVmaXhUbHYgJmFQcmVmaXgpCit7CisgICAgSGFzUm91dGVUbHYgKnJ2YWwgPSBOVUxMOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBhUHJlZml4LkdldFN1YlRsdnMoKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gYVByZWZpeC5HZXROZXh0KCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IE5ldHdvcmtEYXRhVGx2OjprVHlwZUhhc1JvdXRlKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSByZWludGVycHJldF9jYXN0PEhhc1JvdXRlVGx2ICo+KGN1cikpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitIYXNSb3V0ZVRsdiAqTmV0d29ya0RhdGE6OkZpbmRIYXNSb3V0ZShQcmVmaXhUbHYgJmFQcmVmaXgsIGJvb2wgYVN0YWJsZSkKK3sKKyAgICBIYXNSb3V0ZVRsdiAqcnZhbCA9IE5VTEw7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSBhUHJlZml4LkdldE5leHQoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGUgJiYKKyAgICAgICAgICAgIGN1ci0+SXNTdGFibGUoKSA9PSBhU3RhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSByZWludGVycHJldF9jYXN0PEhhc1JvdXRlVGx2ICo+KGN1cikpOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitDb250ZXh0VGx2ICpOZXR3b3JrRGF0YTo6RmluZENvbnRleHQoUHJlZml4VGx2ICZhUHJlZml4KQoreworICAgIENvbnRleHRUbHYgKnJ2YWwgPSBOVUxMOworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBhUHJlZml4LkdldFN1YlRsdnMoKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gYVByZWZpeC5HZXROZXh0KCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IE5ldHdvcmtEYXRhVGx2OjprVHlwZUNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29udGV4dFRsdiAqPihjdXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworUHJlZml4VGx2ICpOZXR3b3JrRGF0YTo6RmluZFByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgpCit7CisgICAgcmV0dXJuIEZpbmRQcmVmaXgoYVByZWZpeCwgYVByZWZpeExlbmd0aCwgbVRsdnMsIG1MZW5ndGgpOworfQorCitQcmVmaXhUbHYgKk5ldHdvcmtEYXRhOjpGaW5kUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCwgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgpCit7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4oYVRsdnMpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFUbHZzICsgYVRsdnNMZW5ndGgpOworICAgIFByZWZpeFRsdiAqY29tcGFyZTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBjb21wYXJlID0gcmVpbnRlcnByZXRfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKworICAgICAgICAgICAgaWYgKGNvbXBhcmUtPkdldFByZWZpeExlbmd0aCgpID09IGFQcmVmaXhMZW5ndGggJiYKKyAgICAgICAgICAgICAgICBQcmVmaXhNYXRjaChjb21wYXJlLT5HZXRQcmVmaXgoKSwgYVByZWZpeCwgYVByZWZpeExlbmd0aCkgPj0gYVByZWZpeExlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitpbnQ4X3QgTmV0d29ya0RhdGE6OlByZWZpeE1hdGNoKGNvbnN0IHVpbnQ4X3QgKmEsIGNvbnN0IHVpbnQ4X3QgKmIsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBpbnQ4X3QgcnZhbCA9IDA7CisgICAgdWludDhfdCBieXRlcyA9IEJpdFZlY3RvckJ5dGVzKGFMZW5ndGgpOworICAgIHVpbnQ4X3QgZGlmZjsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGJ5dGVzOyBpKyspCisgICAgeworICAgICAgICBkaWZmID0gYVtpXSBeIGJbaV07CisKKyAgICAgICAgaWYgKGRpZmYgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcnZhbCArPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKChkaWZmICYgMHg4MCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBydmFsKys7CisgICAgICAgICAgICAgICAgZGlmZiA8PD0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKHJ2YWwgPj0gYUxlbmd0aCkgPyBydmFsIDogLTE7Cit9CisKK290RXJyb3IgTmV0d29ya0RhdGE6Okluc2VydCh1aW50OF90ICphU3RhcnQsIHVpbnQ4X3QgYUxlbmd0aCkKK3sKKyAgICBhc3NlcnQoYUxlbmd0aCArIG1MZW5ndGggPD0gc2l6ZW9mKG1UbHZzKSAmJgorICAgICAgICAgICBtVGx2cyA8PSBhU3RhcnQgJiYKKyAgICAgICAgICAgYVN0YXJ0IDw9IG1UbHZzICsgbUxlbmd0aCk7CisgICAgbWVtbW92ZShhU3RhcnQgKyBhTGVuZ3RoLCBhU3RhcnQsIG1MZW5ndGggLSBzdGF0aWNfY2FzdDxzaXplX3Q+KGFTdGFydCAtIG1UbHZzKSk7CisgICAgbUxlbmd0aCArPSBhTGVuZ3RoOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE5ldHdvcmtEYXRhOjpSZW1vdmUodWludDhfdCAqYVN0YXJ0LCB1aW50OF90IGFMZW5ndGgpCit7CisgICAgYXNzZXJ0KGFMZW5ndGggPD0gbUxlbmd0aCAmJgorICAgICAgICAgICBtVGx2cyA8PSBhU3RhcnQgJiYKKyAgICAgICAgICAgKGFTdGFydCAtIG1UbHZzKSArIGFMZW5ndGggPD0gbUxlbmd0aCk7CisgICAgbWVtbW92ZShhU3RhcnQsIGFTdGFydCArIGFMZW5ndGgsIG1MZW5ndGggLSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihhU3RhcnQgLSBtVGx2cykgKyBhTGVuZ3RoKSk7CisgICAgbUxlbmd0aCAtPSBhTGVuZ3RoOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIE5ldHdvcmtEYXRhOjpTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbih1aW50MTZfdCBhUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgVmVyaWZ5T3JFeGl0KCFtTGFzdEF0dGVtcHRXYWl0IHx8IHN0YXRpY19jYXN0PGludDMyX3Q+KFRpbWVyOjpHZXROb3coKSAtIG1MYXN0QXR0ZW1wdCkgPCBrRGF0YVJlc3VibWl0RGVsYXksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICBoZWFkZXIuQXBwZW5kVXJpUGF0aE9wdGlvbnMoT1RfVVJJX1BBVEhfU0VSVkVSX0RBVEEpOworICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG1lc3NhZ2UgPSBuZXRpZi5HZXRDb2FwKCkuTmV3TWVzc2FnZShoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgaWYgKG1Mb2NhbCkKKyAgICB7CisgICAgICAgIFRocmVhZFRsdiB0bHY7CisgICAgICAgIHRsdi5TZXRUeXBlKFRocmVhZFRsdjo6a1RocmVhZE5ldHdvcmtEYXRhKTsKKyAgICAgICAgdGx2LlNldExlbmd0aChtTGVuZ3RoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKG1UbHZzLCBtTGVuZ3RoKSk7CisgICAgfQorCisgICAgaWYgKGFSbG9jMTYgIT0gTWFjOjprU2hvcnRBZGRySW52YWxpZCkKKyAgICB7CisgICAgICAgIFRocmVhZFJsb2MxNlRsdiBybG9jMTZUbHY7CisgICAgICAgIHJsb2MxNlRsdi5Jbml0KCk7CisgICAgICAgIHJsb2MxNlRsdi5TZXRSbG9jMTYoYVJsb2MxNik7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoJnJsb2MxNlRsdiwgc2l6ZW9mKHJsb2MxNlRsdikpKTsKKyAgICB9CisKKyAgICBuZXRpZi5HZXRNbGUoKS5HZXRMZWFkZXJBbG9jKG1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIGlmIChtTG9jYWwpCisgICAgeworICAgICAgICBtTGFzdEF0dGVtcHQgPSBUaW1lcjo6R2V0Tm93KCk7CisgICAgICAgIG1MYXN0QXR0ZW1wdFdhaXQgPSB0cnVlOworICAgIH0KKworICAgIG90TG9nSW5mb05ldERhdGEoR2V0SW5zdGFuY2UoKSwgIlNlbnQgc2VydmVyIGRhdGEgbm90aWZpY2F0aW9uIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE5ldHdvcmtEYXRhOjpDbGVhclJlc3VibWl0RGVsYXlUaW1lcih2b2lkKQoreworICAgIG1MYXN0QXR0ZW1wdFdhaXQgPSBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGEuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0NTc0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGEuaHBwCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfREFUQV9IUFBfCisjZGVmaW5lIE5FVFdPUktfREFUQV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2xvd3Bhbi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGFfdGx2cy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1uZXRkYXRhCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcsIHByb2Nlc3NpbmcsIGFuZCBtYW5hZ2luZyBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqIEB7CisgKgorICogQGRlZmdyb3VwIGNvcmUtbmV0ZGF0YS1jb3JlIENvcmUKKyAqIEBkZWZncm91cCBjb3JlLW5ldGRhdGEtbGVhZGVyIExlYWRlcgorICogQGRlZmdyb3VwIGNvcmUtbmV0ZGF0YS1sb2NhbCBMb2NhbAorICogQGRlZmdyb3VwIGNvcmUtbmV0ZGF0YS10bHZzIFRMVnMKKyAqCisgKiBAfQorICoKKyAqLworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6Ok5ldHdvcmtEYXRhCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbmFtZXNwYWNlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5hZ2luZyBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqLworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGRhdGEtY29yZQorICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuYWdpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAqCisgKiBAeworICoKKyAqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBOZXR3b3JrIERhdGEgcHJvY2Vzc2luZy4KKyAqCisgKi8KK2NsYXNzIE5ldHdvcmtEYXRhOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga01heFNpemUgPSAyNTUsICAvLy88IE1heGltdW0gc2l6ZSBvZiBUaHJlYWQgTmV0d29yayBEYXRhIGluIGJ5dGVzLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICogQHBhcmFtW2luXSAgYUxvY2FsICAgICAgICBUUlVFIGlmIHRoaXMgcmVwcmVzZW50cyBsb2NhbCBuZXR3b3JrIGRhdGEsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIE5ldHdvcmtEYXRhKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYsIGJvb2wgYUxvY2FsKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgbmV0d29yayBkYXRhLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgZnVsbCBvciBzdGFibGUgY29weSBvZiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFTdGFibGUgICAgICBUUlVFIHdoZW4gY29weWluZyB0aGUgc3RhYmxlIHZlcnNpb24sIEZBTFNFIHdoZW4gY29weWluZyB0aGUgZnVsbCB2ZXJzaW9uLgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFEYXRhICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFEYXRhTGVuZ3RoICBPbiBlbnRyeSwgc2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0byBieSBAcCBhRGF0YS4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gZXhpdCwgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAgICAgKi8KKyAgICB2b2lkIEdldE5ldHdvcmtEYXRhKGJvb2wgYVN0YWJsZSwgdWludDhfdCAqYURhdGEsIHVpbnQ4X3QgJmFEYXRhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHRoZSBuZXh0IE9uIE1lc2ggcHJlZml4IGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2lub3V0XSAgYUl0ZXJhdG9yICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YSBpdGVyYXRvciBjb250ZXh0LgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBPbiBNZXNoIFByZWZpeCBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgT24gTWVzaCBwcmVmaXguCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgT24gTWVzaCBwcmVmaXggZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXROZXh0T25NZXNoUHJlZml4KG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLCBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0aGUgbmV4dCBPbiBNZXNoIHByZWZpeCBpbiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBmb3IgYSBnaXZlbiBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuCisgICAgICogQHBhcmFtW2luXSAgICAgYVJsb2MxNiAgICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBPbiBNZXNoIFByZWZpeCBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgT24gTWVzaCBwcmVmaXguCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgT24gTWVzaCBwcmVmaXggZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXROZXh0T25NZXNoUHJlZml4KG90TmV0d29ya0RhdGFJdGVyYXRvciAqYUl0ZXJhdG9yLCB1aW50MTZfdCBhUmxvYzE2LCBvdEJvcmRlclJvdXRlckNvbmZpZyAqYUNvbmZpZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZSBpbiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFJdGVyYXRvciAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgaXRlcmF0b3IgY29udGV4dC4KKyAgICAgKiBAcGFyYW1bb3V0XSAgICBhQ29uZmlnICAgIEEgcG9pbnRlciB0byB3aGVyZSB0aGUgZXh0ZXJuYWwgcm91dGUgaW5mb3JtYXRpb24gd2lsbCBiZSBwbGFjZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBuZXh0IGV4dGVybmFsIHJvdXRlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBObyBzdWJzZXF1ZW50IGV4dGVybmFsIHJvdXRlIGV4aXN0cyBpbiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgR2V0TmV4dEV4dGVybmFsUm91dGUob3ROZXR3b3JrRGF0YUl0ZXJhdG9yICphSXRlcmF0b3IsIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyB0aGUgbmV4dCBleHRlcm5hbCByb3V0ZSBpbiB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBmb3IgYSBnaXZlbiBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5vdXRdICBhSXRlcmF0b3IgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhIGl0ZXJhdG9yIGNvbnRleHQuCisgICAgICogQHBhcmFtW2luXSAgICAgYVJsb2MxNiAgICBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqIEBwYXJhbVtvdXRdICAgIGFDb25maWcgICAgQSBwb2ludGVyIHRvIHdoZXJlIHRoZSBleHRlcm5hbCByb3V0ZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgdGhlIG5leHQgZXh0ZXJuYWwgcm91dGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIHN1YnNlcXVlbnQgZXh0ZXJuYWwgcm91dGUgZXhpc3RzIGluIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXROZXh0RXh0ZXJuYWxSb3V0ZShvdE5ldHdvcmtEYXRhSXRlcmF0b3IgKmFJdGVyYXRvciwgdWludDE2X3QgYVJsb2MxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90RXh0ZXJuYWxSb3V0ZUNvbmZpZyAqYUNvbmZpZyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEgY29udGFpbnMgYWxsIG9mIHRoZSBvbiBtZXNoIHByZWZpeCBpbmZvcm1hdGlvbgorICAgICAqIGluIEBwIGFDb21wYXJlIGFzc29jaWF0ZWQgd2l0aCBAcCBhUmxvYzE2LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbXBhcmUgIFRoZSBOZXR3b3JrIERhdGEgdG8gdXNlIGZvciB0aGUgcXVlcnkuCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgIFRoZSBSTE9DMTYgdG8gY29uc2lkZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGFsbCBvbiBtZXNoIHByZWZpeCBpbmZvcm1hdGlvbiBpbiBAcCBhQ29tcGFyZSBhc3NvY2lhdGVkIHdpdGggQHAgYVJsb2MxNiwKKyAgICAgKiAgICAgICAgICBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIENvbnRhaW5zT25NZXNoUHJlZml4ZXMoTmV0d29ya0RhdGEgJmFDb21wYXJlLCB1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBjb250YWlucyBhbGwgb2YgdGhlIGV4dGVybmFsIHJvdXRlIGluZm9ybWF0aW9uCisgICAgICogaW4gQHAgYUNvbXBhcmUgYXNzb2NpYXRlZCB3aXRoIEBwIGFSbG9jMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29tcGFyZSAgVGhlIE5ldHdvcmsgRGF0YSB0byB1c2UgZm9yIHRoZSBxdWVyeS4KKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICAgVGhlIFJMT0MxNiB0byBjb25zaWRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhpcyBvYmplY3QgY29udGFpbnMgYWxsIGV4dGVybmFsIHJvdXRlIGluZm9ybWF0aW9uIGluIEBwIGFDb21wYXJlIGFzc29jaWF0ZWQgd2l0aCBAcCBhUmxvYzE2LAorICAgICAqICAgICAgICAgIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgQ29udGFpbnNFeHRlcm5hbFJvdXRlcyhOZXR3b3JrRGF0YSAmYUNvbXBhcmUsIHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2FuY2VscyB0aGUgZGF0YSByZXN1Ym1pdCBkZWxheSB0aW1lci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIodm9pZCk7CisKK3Byb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQm9yZGVyIFJvdXRlciBUTFYgd2l0aGluIGEgZ2l2ZW4gUHJlZml4IFRMVi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggIEEgcmVmZXJlbmNlIHRvIHRoZSBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBCb3JkZXIgUm91dGVyIFRMViBpZiBvbmUgaXMgZm91bmQgb3IgTlVMTCBpZiBubyBCb3JkZXIgUm91dGVyIFRMViBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBCb3JkZXJSb3V0ZXJUbHYgKkZpbmRCb3JkZXJSb3V0ZXIoUHJlZml4VGx2ICZhUHJlZml4KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdGFibGUgb3Igbm9uLXN0YWJsZSBCb3JkZXIgUm91dGVyIFRMViB3aXRoaW4gYSBnaXZlbiBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgQSByZWZlcmVuY2UgdG8gdGhlIFByZWZpeCBUTFYuCisgICAgICogQHBhcmFtW2luXSAgYVN0YWJsZSAgVFJVRSBpZiByZXF1ZXN0aW5nIGEgc3RhYmxlIEJvcmRlciBSb3V0ZXIgVExWLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEJvcmRlciBSb3V0ZXIgVExWIGlmIG9uZSBpcyBmb3VuZCBvciBOVUxMIGlmIG5vIEJvcmRlciBSb3V0ZXIgVExWIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIEJvcmRlclJvdXRlclRsdiAqRmluZEJvcmRlclJvdXRlcihQcmVmaXhUbHYgJmFQcmVmaXgsIGJvb2wgYVN0YWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSGFzIFJvdXRlIFRMViB3aXRoaW4gYSBnaXZlbiBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgQSByZWZlcmVuY2UgdG8gdGhlIFByZWZpeCBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEhhcyBSb3V0ZSBUTFYgaWYgb25lIGlzIGZvdW5kIG9yIE5VTEwgaWYgbm8gSGFzIFJvdXRlIFRMViBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBIYXNSb3V0ZVRsdiAqRmluZEhhc1JvdXRlKFByZWZpeFRsdiAmYVByZWZpeCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RhYmxlIG9yIG5vbi1zdGFibGUgSGFzIFJvdXRlIFRMViB3aXRoaW4gYSBnaXZlbiBQcmVmaXggVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgQSByZWZlcmVuY2UgdG8gdGhlIFByZWZpeCBUTFYuCisgICAgICogQHBhcmFtW2luXSAgYVN0YWJsZSAgVFJVRSBpZiByZXF1ZXN0aW5nIGEgc3RhYmxlIEhhcyBSb3V0ZSBUTFYsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgSGFzIFJvdXRlIFRMViBpZiBvbmUgaXMgZm91bmQgb3IgTlVMTCBpZiBubyBIYXMgUm91dGUgVExWIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIEhhc1JvdXRlVGx2ICpGaW5kSGFzUm91dGUoUHJlZml4VGx2ICZhUHJlZml4LCBib29sIGFTdGFibGUpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIENvbnRleHQgVExWIHdpdGhpbiBhIGdpdmVuIFByZWZpeCBUTFYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICBBIHJlZmVyZW5jZSB0byB0aGUgUHJlZml4IFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ29udGV4dCBUTFYgaXMgb25lIGlzIGZvdW5kIG9yIE5VTEwgaWYgbm8gQ29udGV4dCBUTFYgZXhpc3RzLgorICAgICAqCisgICAgICovCisgICAgQ29udGV4dFRsdiAqRmluZENvbnRleHQoUHJlZml4VGx2ICZhUHJlZml4KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgUHJlZml4IFRMVi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggICAgICAgIEEgcG9pbnRlciB0byBhbiBJUHY2IHByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4TGVuZ3RoICBUaGUgcHJlZml4IGxlbmd0aCBwb2ludGVkIHRvIGJ5IEBwIGFQcmVmaXguCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFByZWZpeCBUTFYgaXMgb25lIGlzIGZvdW5kIG9yIE5VTEwgaWYgbm8gbWF0Y2hpbmcgUHJlZml4IFRMViBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBQcmVmaXhUbHYgKkZpbmRQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgUHJlZml4IFRMViBpbiBhIHNwZWNpZmllZCB0bHZzIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggICAgICAgIEEgcG9pbnRlciB0byBhbiBJUHY2IHByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4TGVuZ3RoICBUaGUgcHJlZml4IGxlbmd0aCBwb2ludGVkIHRvIGJ5IEBwIGFQcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYVRsdnMgICAgICAgICAgQSBwb2ludGVyIHRvIGEgc3BlY2lmaWVkIHRsdnMgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFUbHZzTGVuZ3RoICAgIFRoZSBzcGVjaWZpZWQgdGx2cyBidWZmZXIgbGVuZ3RoIHBvaW50ZWQgdG8gYnkgQHAgYVRsdnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIFByZWZpeCBUTFYgaXMgb25lIGlzIGZvdW5kIG9yIE5VTEwgaWYgbm8gbWF0Y2hpbmcgUHJlZml4IFRMViBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBQcmVmaXhUbHYgKkZpbmRQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoLCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbnNlcnRzIGJ5dGVzIGludG8gdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGFydCAgIEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnNlcnRpb24uCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyB0byBpbnNlcnQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGluc2VydGVkIGJ5dGVzLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICAgICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIHRvIGluc2VydCBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5zZXJ0KHVpbnQ4X3QgKmFTdGFydCwgdWludDhfdCBhTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYnl0ZXMgZnJvbSB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVN0YXJ0ICAgQSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbW92YWwuCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyB0byByZW1vdmUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJlbW92ZSh1aW50OF90ICphU3RhcnQsIHVpbnQ4X3QgYUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdHJpcHMgbm9uLXN0YWJsZSBkYXRhIGZyb20gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5vdXRdICBhRGF0YSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgdG8gbW9kaWZ5LgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFEYXRhTGVuZ3RoICBPbiBlbnRyeSwgdGhlIHNpemUgb2YgdGhlIE5ldHdvcmsgRGF0YSBpbiBieXRlcy4gIE9uIGV4aXQsIHRoZSBzaXplIG9mIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgTmV0d29yayBEYXRhIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVUZW1wb3JhcnlEYXRhKHVpbnQ4X3QgKmFEYXRhLCB1aW50OF90ICZhRGF0YUxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdHJpcHMgbm9uLXN0YWJsZSBTdWItVExWcyBmcm9tIGEgUHJlZml4IFRMVi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFEYXRhICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YSB0byBtb2RpZnkuCisgICAgICogQHBhcmFtW2lub3V0XSAgYURhdGFMZW5ndGggIE9uIGVudHJ5LCB0aGUgc2l6ZSBvZiB0aGUgTmV0d29yayBEYXRhIGluIGJ5dGVzLiAgT24gZXhpdCwgdGhlIHNpemUgb2YgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyBOZXR3b3JrIERhdGEgaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2lub3V0XSAgYVByZWZpeCAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBQcmVmaXggVExWIHRvIG1vZGlmeS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVtb3ZlVGVtcG9yYXJ5RGF0YSh1aW50OF90ICphRGF0YSwgdWludDhfdCAmYURhdGFMZW5ndGgsIFByZWZpeFRsdiAmYVByZWZpeCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgbnVtYmVyIG9mIElQdjYgUHJlZml4IGJpdHMgdGhhdCBtYXRjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGEgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgSVB2NiBQcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYiAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgSVB2NiBwcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIG1heGltdW0gbGVuZ3RoIGluIGJpdHMgdG8gY29tcGFyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgYml0cy4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBQcmVmaXhNYXRjaChjb25zdCB1aW50OF90ICphLCBjb25zdCB1aW50OF90ICpiLCB1aW50OF90IGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBTZXJ2ZXIgRGF0YSBOb3RpZmljYXRpb24gbWVzc2FnZSB0byB0aGUgTGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIG9sZCBSTE9DMTYgdmFsdWUgdGhhdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgdWludDhfdCBtVGx2c1trTWF4U2l6ZV07ICAvLy88IFRoZSBOZXR3b3JrIERhdGEgYnVmZmVyLgorICAgIHVpbnQ4X3QgbUxlbmd0aDsgICAgICAgICAgLy8vPCBUaGUgbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGluIEB2YXIgbVRsdnMuCisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0RhdGFSZXN1Ym1pdERlbGF5ID0gMzAwMDAwLCAgLy8vPCBEQVRBX1JFU1VCTUlUX0RFTEFZIChtaWxpc2Vjb25kcykKKyAgICB9OworCisgICAgY29uc3QgYm9vbCAgICAgIG1Mb2NhbDsKKyAgICBib29sICAgICAgICAgICAgbUxhc3RBdHRlbXB0V2FpdDsKKyAgICB1aW50MzJfdCAgICAgICAgbUxhc3RBdHRlbXB0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRXT1JLX0RBVEFfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjMyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlci5jcHAKQEAgLTAsMCArMSw1NDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEgbWFuYWdlZCBieSB0aGUgVGhyZWFkIExlYWRlci4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJuZXR3b3JrX2RhdGFfbGVhZGVyLnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJjb2FwL2NvYXBfaGVhZGVyLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3JvdXRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2xvd3Bhbi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworTGVhZGVyQmFzZTo6TGVhZGVyQmFzZShUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKToKKyAgICBOZXR3b3JrRGF0YShhVGhyZWFkTmV0aWYsIGZhbHNlKQoreworICAgIFJlc2V0KCk7Cit9CisKK3ZvaWQgTGVhZGVyQmFzZTo6UmVzZXQodm9pZCkKK3sKKyAgICBtVmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICBtU3RhYmxlVmVyc2lvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICBtTGVuZ3RoID0gMDsKKyAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OkdldENvbnRleHQoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywgTG93cGFuOjpDb250ZXh0ICZhQ29udGV4dCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgIENvbnRleHRUbHYgKmNvbnRleHRUbHY7CisKKyAgICBhQ29udGV4dC5tUHJlZml4TGVuZ3RoID0gMDsKKworICAgIGlmIChQcmVmaXhNYXRjaChuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSwgYUFkZHJlc3MubUZpZWxkcy5tOCwgNjQpID49IDApCisgICAgeworICAgICAgICBhQ29udGV4dC5tUHJlZml4ID0gbmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCk7CisgICAgICAgIGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggPSA2NDsKKyAgICAgICAgYUNvbnRleHQubUNvbnRleHRJZCA9IDA7CisgICAgICAgIGFDb250ZXh0Lm1Db21wcmVzc0ZsYWcgPSB0cnVlOworICAgIH0KKworICAgIGZvciAoTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgICAgICAgY3VyIDwgcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgIT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworCisgICAgICAgIGlmIChQcmVmaXhNYXRjaChwcmVmaXgtPkdldFByZWZpeCgpLCBhQWRkcmVzcy5tRmllbGRzLm04LCBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpKSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dFRsdiA9IEZpbmRDb250ZXh0KCpwcmVmaXgpOworCisgICAgICAgIGlmIChjb250ZXh0VGx2ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByZWZpeC0+R2V0UHJlZml4TGVuZ3RoKCkgPiBhQ29udGV4dC5tUHJlZml4TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBhQ29udGV4dC5tUHJlZml4ID0gcHJlZml4LT5HZXRQcmVmaXgoKTsKKyAgICAgICAgICAgIGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggPSBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpOworICAgICAgICAgICAgYUNvbnRleHQubUNvbnRleHRJZCA9IGNvbnRleHRUbHYtPkdldENvbnRleHRJZCgpOworICAgICAgICAgICAgYUNvbnRleHQubUNvbXByZXNzRmxhZyA9IGNvbnRleHRUbHYtPklzQ29tcHJlc3MoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoYUNvbnRleHQubVByZWZpeExlbmd0aCA+IDApID8gT1RfRVJST1JfTk9ORSA6IE9UX0VSUk9SX05PVF9GT1VORDsKK30KKworb3RFcnJvciBMZWFkZXJCYXNlOjpHZXRDb250ZXh0KHVpbnQ4X3QgYUNvbnRleHRJZCwgTG93cGFuOjpDb250ZXh0ICZhQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EOworICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgIENvbnRleHRUbHYgKmNvbnRleHRUbHY7CisKKyAgICBpZiAoYUNvbnRleHRJZCA9PSAwKQorICAgIHsKKyAgICAgICAgYUNvbnRleHQubVByZWZpeCA9IEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCk7CisgICAgICAgIGFDb250ZXh0Lm1QcmVmaXhMZW5ndGggPSA2NDsKKyAgICAgICAgYUNvbnRleHQubUNvbnRleHRJZCA9IDA7CisgICAgICAgIGFDb250ZXh0Lm1Db21wcmVzc0ZsYWcgPSB0cnVlOworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgfQorCisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisgICAgICAgIGNvbnRleHRUbHYgPSBGaW5kQ29udGV4dCgqcHJlZml4KTsKKworICAgICAgICBpZiAoY29udGV4dFRsdiA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZXh0VGx2LT5HZXRDb250ZXh0SWQoKSAhPSBhQ29udGV4dElkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFDb250ZXh0Lm1QcmVmaXggPSBwcmVmaXgtPkdldFByZWZpeCgpOworICAgICAgICBhQ29udGV4dC5tUHJlZml4TGVuZ3RoID0gcHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKTsKKyAgICAgICAgYUNvbnRleHQubUNvbnRleHRJZCA9IGNvbnRleHRUbHYtPkdldENvbnRleHRJZCgpOworICAgICAgICBhQ29udGV4dC5tQ29tcHJlc3NGbGFnID0gY29udGV4dFRsdi0+SXNDb21wcmVzcygpOworICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUiB8fCBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKK290RXJyb3IgTGVhZGVyQmFzZTo6R2V0UmxvY0J5Q29udGV4dElkKHVpbnQ4X3QgYUNvbnRleHRJZCwgdWludDE2X3QgJmFSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKyAgICBMb3dwYW46OkNvbnRleHQgbG93cGFuQ29udGV4dDsKKworICAgIGlmICgoR2V0Q29udGV4dChhQ29udGV4dElkLCBsb3dwYW5Db250ZXh0KSkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG90TmV0d29ya0RhdGFJdGVyYXRvciBpdGVyYXRvciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUOworICAgICAgICBvdEJvcmRlclJvdXRlckNvbmZpZyBjb25maWc7CisKKyAgICAgICAgd2hpbGUgKEdldE5leHRPbk1lc2hQcmVmaXgoJml0ZXJhdG9yLCAmY29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3RJcDZQcmVmaXhNYXRjaCgmKGNvbmZpZy5tUHJlZml4Lm1QcmVmaXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBvdElwNkFkZHJlc3MgKj4obG93cGFuQ29udGV4dC5tUHJlZml4KSkgPj0gY29uZmlnLm1QcmVmaXgubUxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhUmxvYzE2ID0gY29uZmlnLm1SbG9jMTY7CisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSIHx8IE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorCitib29sIExlYWRlckJhc2U6OklzT25NZXNoKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MpCit7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisKKyAgICBpZiAobWVtY21wKGFBZGRyZXNzLm1GaWVsZHMubTgsIEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0TWVzaExvY2FsUHJlZml4KCksIDgpID09IDApCisgICAgeworICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICB9CisKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpICE9IE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKworICAgICAgICBpZiAoUHJlZml4TWF0Y2gocHJlZml4LT5HZXRQcmVmaXgoKSwgYUFkZHJlc3MubUZpZWxkcy5tOCwgcHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSkgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGaW5kQm9yZGVyUm91dGVyKCpwcmVmaXgpID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OlJvdXRlTG9va3VwKGNvbnN0IElwNjo6QWRkcmVzcyAmYVNvdXJjZSwgY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFQcmVmaXhNYXRjaCwgdWludDE2X3QgKmFSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFOworICAgIFByZWZpeFRsdiAqcHJlZml4OworCisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisKKyAgICAgICAgaWYgKFByZWZpeE1hdGNoKHByZWZpeC0+R2V0UHJlZml4KCksIGFTb3VyY2UubUZpZWxkcy5tOCwgcHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSkgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEV4dGVybmFsUm91dGVMb29rdXAocHJlZml4LT5HZXREb21haW5JZCgpLCBhRGVzdGluYXRpb24sIGFQcmVmaXhNYXRjaCwgYVJsb2MxNikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfTk9ORSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChEZWZhdWx0Um91dGVMb29rdXAoKnByZWZpeCwgYVJsb2MxNikgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYVByZWZpeE1hdGNoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKmFQcmVmaXhNYXRjaCA9IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBMZWFkZXJCYXNlOjpFeHRlcm5hbFJvdXRlTG9va3VwKHVpbnQ4X3QgYURvbWFpbklkLCBjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphUHJlZml4TWF0Y2gsIHVpbnQxNl90ICphUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFOworICAgIFByZWZpeFRsdiAqcHJlZml4OworICAgIEhhc1JvdXRlVGx2ICpoYXNSb3V0ZTsKKyAgICBIYXNSb3V0ZUVudHJ5ICplbnRyeTsKKyAgICBIYXNSb3V0ZUVudHJ5ICpydmFsUm91dGUgPSBOVUxMOworICAgIHVpbnQ4X3QgcnZhbF9wbGVuID0gMDsKKyAgICBpbnQ4X3QgcGxlbjsKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyOworICAgIE5ldHdvcmtEYXRhVGx2ICpzdWJDdXI7CisKKyAgICBmb3IgKGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgICAgICAgY3VyIDwgcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgIT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworCisgICAgICAgIGlmIChwcmVmaXgtPkdldERvbWFpbklkKCkgIT0gYURvbWFpbklkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHBsZW4gPSBQcmVmaXhNYXRjaChwcmVmaXgtPkdldFByZWZpeCgpLCBhRGVzdGluYXRpb24ubUZpZWxkcy5tOCwgcHJlZml4LT5HZXRQcmVmaXhMZW5ndGgoKSk7CisKKyAgICAgICAgaWYgKHBsZW4gPiBydmFsX3BsZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHNlbGVjdCBib3JkZXIgcm91dGVyCisgICAgICAgICAgICBmb3IgKHN1YkN1ciA9IHByZWZpeC0+R2V0U3ViVGx2cygpOyBzdWJDdXIgPCBwcmVmaXgtPkdldE5leHQoKTsgc3ViQ3VyID0gc3ViQ3VyLT5HZXROZXh0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN1YkN1ci0+R2V0VHlwZSgpICE9IE5ldHdvcmtEYXRhVGx2OjprVHlwZUhhc1JvdXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGFzUm91dGUgPSBzdGF0aWNfY2FzdDxIYXNSb3V0ZVRsdiAqPihzdWJDdXIpOworCisgICAgICAgICAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgaGFzUm91dGUtPkdldE51bUVudHJpZXMoKTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBoYXNSb3V0ZS0+R2V0RW50cnkoaSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ2YWxSb3V0ZSA9PSBOVUxMIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+R2V0UHJlZmVyZW5jZSgpID4gcnZhbFJvdXRlLT5HZXRQcmVmZXJlbmNlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeS0+R2V0UHJlZmVyZW5jZSgpID09IHJ2YWxSb3V0ZS0+R2V0UHJlZmVyZW5jZSgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5HZXRSbG9jKCkgPT0gbmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ2YWxSb3V0ZS0+R2V0UmxvYygpICE9IG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5HZXRDb3N0KGVudHJ5LT5HZXRSbG9jKCkpIDwgbmV0aWYuR2V0TWxlKCkuR2V0Q29zdChydmFsUm91dGUtPkdldFJsb2MoKSkpKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWxSb3V0ZSA9IGVudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgcnZhbF9wbGVuID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocGxlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChydmFsUm91dGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChhUmxvYzE2ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgICphUmxvYzE2ID0gcnZhbFJvdXRlLT5HZXRSbG9jKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYVByZWZpeE1hdGNoICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgICphUHJlZml4TWF0Y2ggPSBydmFsX3BsZW47CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OkRlZmF1bHRSb3V0ZUxvb2t1cChQcmVmaXhUbHYgJmFQcmVmaXgsIHVpbnQxNl90ICphUmxvYzE2KQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PX1JPVVRFOworICAgIEJvcmRlclJvdXRlclRsdiAqYm9yZGVyUm91dGVyOworICAgIEJvcmRlclJvdXRlckVudHJ5ICplbnRyeTsKKyAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqcm91dGUgPSBOVUxMOworCisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqY3VyID0gYVByZWZpeC5HZXRTdWJUbHZzKCk7IGN1ciA8IGFQcmVmaXguR2V0TmV4dCgpOyBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSAhPSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVCb3JkZXJSb3V0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9yZGVyUm91dGVyID0gc3RhdGljX2Nhc3Q8Qm9yZGVyUm91dGVyVGx2ICo+KGN1cik7CisKKyAgICAgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYm9yZGVyUm91dGVyLT5HZXROdW1FbnRyaWVzKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZW50cnkgPSBib3JkZXJSb3V0ZXItPkdldEVudHJ5KGkpOworCisgICAgICAgICAgICBpZiAoZW50cnktPklzRGVmYXVsdFJvdXRlKCkgPT0gZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyb3V0ZSA9PSBOVUxMIHx8CisgICAgICAgICAgICAgICAgZW50cnktPkdldFByZWZlcmVuY2UoKSA+IHJvdXRlLT5HZXRQcmVmZXJlbmNlKCkgfHwKKyAgICAgICAgICAgICAgICAoZW50cnktPkdldFByZWZlcmVuY2UoKSA9PSByb3V0ZS0+R2V0UHJlZmVyZW5jZSgpICYmCisgICAgICAgICAgICAgICAgIChlbnRyeS0+R2V0UmxvYygpID09IG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpIHx8CisgICAgICAgICAgICAgICAgICAocm91dGUtPkdldFJsb2MoKSAhPSBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSAmJgorICAgICAgICAgICAgICAgICAgIG5ldGlmLkdldE1sZSgpLkdldENvc3QoZW50cnktPkdldFJsb2MoKSkgPCBuZXRpZi5HZXRNbGUoKS5HZXRDb3N0KHJvdXRlLT5HZXRSbG9jKCkpKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJvdXRlID0gZW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocm91dGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChhUmxvYzE2ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgICphUmxvYzE2ID0gcm91dGUtPkdldFJsb2MoKTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTGVhZGVyQmFzZTo6U2V0TmV0d29ya0RhdGEodWludDhfdCBhVmVyc2lvbiwgdWludDhfdCBhU3RhYmxlVmVyc2lvbiwgYm9vbCBhU3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphRGF0YSwgdWludDhfdCBhRGF0YUxlbmd0aCkKK3sKKyAgICBtVmVyc2lvbiA9IGFWZXJzaW9uOworICAgIG1TdGFibGVWZXJzaW9uID0gYVN0YWJsZVZlcnNpb247CisgICAgbWVtY3B5KG1UbHZzLCBhRGF0YSwgYURhdGFMZW5ndGgpOworICAgIG1MZW5ndGggPSBhRGF0YUxlbmd0aDsKKworICAgIGlmIChhU3RhYmxlKQorICAgIHsKKyAgICAgICAgUmVtb3ZlVGVtcG9yYXJ5RGF0YShtVGx2cywgbUxlbmd0aCk7CisgICAgfQorCisgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgInNldCBuZXR3b3JrIGRhdGEiLCBtVGx2cywgbUxlbmd0aCk7CisKKyAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OlNldENvbW1pc3Npb25pbmdEYXRhKGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZSwgdWludDhfdCBhVmFsdWVMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCByZW1haW5pbmcgPSBrTWF4U2l6ZSAtIG1MZW5ndGg7CisgICAgQ29tbWlzc2lvbmluZ0RhdGFUbHYgKmNvbW1pc3Npb25pbmdEYXRhVGx2OworCisgICAgVmVyaWZ5T3JFeGl0KHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyBhVmFsdWVMZW5ndGggPCByZW1haW5pbmcsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBSZW1vdmVDb21taXNzaW9uaW5nRGF0YSgpOworCisgICAgaWYgKGFWYWx1ZUxlbmd0aCA+IDApCisgICAgeworICAgICAgICBjb21taXNzaW9uaW5nRGF0YVRsdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tbWlzc2lvbmluZ0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgSW5zZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjb21taXNzaW9uaW5nRGF0YVRsdiksIHNpemVvZihDb21taXNzaW9uaW5nRGF0YVRsdikgKyBhVmFsdWVMZW5ndGgpOworICAgICAgICBjb21taXNzaW9uaW5nRGF0YVRsdi0+SW5pdCgpOworICAgICAgICBjb21taXNzaW9uaW5nRGF0YVRsdi0+U2V0TGVuZ3RoKGFWYWx1ZUxlbmd0aCk7CisgICAgICAgIG1lbWNweShjb21taXNzaW9uaW5nRGF0YVRsdi0+R2V0VmFsdWUoKSwgYVZhbHVlLCBhVmFsdWVMZW5ndGgpOworICAgIH0KKworICAgIG1WZXJzaW9uKys7CisgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK05ldHdvcmtEYXRhVGx2ICpMZWFkZXJCYXNlOjpHZXRDb21taXNzaW9uaW5nRGF0YSh2b2lkKQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworCisgICAgZm9yICg7IGN1ciA8IGVuZDsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQ29tbWlzc2lvbmluZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGN1ciA9IE5VTEw7CisKK2V4aXQ6CisgICAgcmV0dXJuIGN1cjsKK30KKworTWVzaENvUDo6VGx2ICpMZWFkZXJCYXNlOjpHZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdihNZXNoQ29QOjpUbHY6OlR5cGUgYVR5cGUpCit7CisgICAgTWVzaENvUDo6VGx2ICpydmFsID0gTlVMTDsKKyAgICBOZXR3b3JrRGF0YVRsdiAqY29tbWlzc2lvbmluZ0RhdGFUbHY7CisgICAgTWVzaENvUDo6VGx2ICpjdXI7CisgICAgTWVzaENvUDo6VGx2ICplbmQ7CisKKyAgICBjb21taXNzaW9uaW5nRGF0YVRsdiA9IEdldENvbW1pc3Npb25pbmdEYXRhKCk7CisgICAgVmVyaWZ5T3JFeGl0KGNvbW1pc3Npb25pbmdEYXRhVGx2ICE9IE5VTEwpOworCisgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDxNZXNoQ29QOjpUbHYgKj4oY29tbWlzc2lvbmluZ0RhdGFUbHYtPkdldFZhbHVlKCkpOworICAgIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KGNvbW1pc3Npb25pbmdEYXRhVGx2LT5HZXRWYWx1ZSgpICsgY29tbWlzc2lvbmluZ0RhdGFUbHYtPkdldExlbmd0aCgpKTsKKworICAgIGZvciAoOyBjdXIgPCBlbmQ7IGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgaWYgKGN1ci0+R2V0VHlwZSgpID09IGFUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSBjdXIpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitib29sIExlYWRlckJhc2U6OklzSm9pbmluZ0VuYWJsZWQodm9pZCkKK3sKKyAgICBNZXNoQ29QOjpUbHYgKnN0ZWVyaW5nRGF0YTsKKyAgICBib29sIHJ2YWwgPSBmYWxzZTsKKworICAgIFZlcmlmeU9yRXhpdChHZXRDb21taXNzaW9uaW5nRGF0YVN1YlRsdihNZXNoQ29QOjpUbHY6OmtCb3JkZXJBZ2VudExvY2F0b3IpICE9IE5VTEwpOworCisgICAgc3RlZXJpbmdEYXRhID0gR2V0Q29tbWlzc2lvbmluZ0RhdGFTdWJUbHYoTWVzaENvUDo6VGx2OjprU3RlZXJpbmdEYXRhKTsKKyAgICBWZXJpZnlPckV4aXQoc3RlZXJpbmdEYXRhICE9IE5VTEwpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVlcmluZ0RhdGEtPkdldExlbmd0aCgpOyBpKyspCisgICAgeworICAgICAgICBpZiAoc3RlZXJpbmdEYXRhLT5HZXRWYWx1ZSgpW2ldICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3cocnZhbCA9IHRydWUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIExlYWRlckJhc2U6OlJlbW92ZUNvbW1pc3Npb25pbmdEYXRhKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIGZvciAoTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgICAgICAgY3VyIDwgcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQ29tbWlzc2lvbmluZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlbW92ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oY3VyKSwgc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIGN1ci0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX05PTkUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTUxOTllCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXIuaHBwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIFRocmVhZCBOZXR3b3JrIERhdGEgbWFuYWdlZCBieSB0aGUgVGhyZWFkIExlYWRlci4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfREFUQV9MRUFERVJfSFBQXworI2RlZmluZSBORVRXT1JLX0RBVEFfTEVBREVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGEuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGRhdGEtbGVhZGVyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5pcHVsYXRpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYW5hZ2VkIGJ5IHRoZSBUaHJlYWQgTGVhZGVyLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIG1haW50YWluZWQgYnkgdGhlIExlYWRlci4KKyAqCisgKi8KK2NsYXNzIExlYWRlckJhc2U6IHB1YmxpYyBOZXR3b3JrRGF0YQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IExlYWRlckJhc2UoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldCB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVzZXQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIHZlcnNpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVGhyZWFkIE5ldHdvcmsgRGF0YSB2ZXJzaW9uLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WZXJzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIHN0YWJsZSB2ZXJzaW9uLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRocmVhZCBOZXR3b3JrIERhdGEgc3RhYmxlIHZlcnNpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFN0YWJsZVZlcnNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gbVN0YWJsZVZlcnNpb247IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHJpZXZlcyB0aGUgNkxvV1BBTiBDb250ZXh0IGluZm9ybWF0aW9uIGJhc2VkIG9uIGEgZ2l2ZW4gSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFBZGRyZXNzICBBIHJlZmVyZW5jZSB0byBhbiBJUHY2IGFkZHJlc3MuCisgICAgICogQHBhcmFtW291dF0gIGFDb250ZXh0ICBBIHJlZmVyZW5jZSB0byA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldENvbnRleHQoY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcywgTG93cGFuOjpDb250ZXh0ICZhQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIDZMb1dQQU4gQ29udGV4dCBpbmZvcm1hdGlvbiBiYXNlZCBvbiBhIGdpdmVuIENvbnRleHQgSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYUNvbnRleHRJZCAgVGhlIENvbnRleHQgSUQgdmFsdWUuCisgICAgICogQHBhcmFtW291dF0gIGFDb250ZXh0ICAgIEEgcmVmZXJlbmNlIHRvIHRoZSA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSA2TG9XUEFOIENvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEdldENvbnRleHQodWludDhfdCBhQ29udGV4dElkLCBMb3dwYW46OkNvbnRleHQgJmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gSVB2NiBhZGRyZXNzIGlzIG9uLW1lc2guCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gYW4gSVB2NiBhZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgQHAgYUFkZHJlc3MgaXMgb24tbGluay4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiBAcCBhQWRkcmVzcyBpZiBub3Qgb24tbGluay4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNPbk1lc2goY29uc3QgSXA2OjpBZGRyZXNzICZhQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBhIHJvdXRlIGxvb2t1cCB1c2luZyB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFTb3VyY2UgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgc291cmNlIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSAgIGFEZXN0aW5hdGlvbiAgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVByZWZpeE1hdGNoICBBIHBvaW50ZXIgdG8gdGhlIGxvbmdlc3QgcHJlZml4IG1hdGNoIGxlbmd0aCBpbiBiaXRzLgorICAgICAqIEBwYXJhbVtvdXRdICBhUmxvYzE2ICAgICAgIEEgcG9pbnRlciB0byB0aGUgUkxPQzE2IGZvciB0aGUgc2VsZWN0ZWQgcm91dGUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgZm91bmQgYSByb3V0ZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX1JPVVRFICBObyB2YWxpZCByb3V0ZSB3YXMgZm91bmQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFJvdXRlTG9va3VwKGNvbnN0IElwNjo6QWRkcmVzcyAmYVNvdXJjZSwgY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphUHJlZml4TWF0Y2gsIHVpbnQxNl90ICphUmxvYzE2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgbm9uLUxlYWRlciBkZXZpY2VzIHRvIHNldCBuZXdseSByZWNlaXZlZCBOZXR3b3JrIERhdGEgZnJvbSB0aGUgTGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gICAgICAgIFRoZSBWZXJzaW9uIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGFibGVWZXJzaW9uICBUaGUgU3RhYmxlIFZlcnNpb24gdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYVN0YWJsZU9ubHkgICAgIFRSVUUgaWYgc3RvcmluZyBvbmx5IHRoZSBzdGFibGUgZGF0YSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqIEBwYXJhbVtpbl0gIGFEYXRhICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YUxlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgTmV0d29yayBEYXRhIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXROZXR3b3JrRGF0YSh1aW50OF90IGFWZXJzaW9uLCB1aW50OF90IGFTdGFibGVWZXJzaW9uLCBib29sIGFTdGFibGVPbmx5LCBjb25zdCB1aW50OF90ICphRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYURhdGFMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBTZXJ2ZXIgRGF0YSBOb3RpZmljYXRpb24gbWVzc2FnZSB0byB0aGUgTGVhZGVyIGluZGljYXRpbmcgYW4gaW52YWxpZCBSTE9DMTYuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUmxvYzE2ICBUaGUgaW52YWxpZCBSTE9DMTYgdG8gbm90aWZ5LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5xdWV1ZWQgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IG1lc3NhZ2UgYnVmZmVycyB0byBnZW5lcmF0ZSB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKHVpbnQxNl90IGFSbG9jMTYpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIENvbW1pc3Npb25pbmcgRGF0YS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgQ29tbWlzc2lvbmluZyBEYXRhIG9yIE5VTEwgaWYgbm8gQ29tbWlzc2lvbmluZyBEYXRhIGV4aXN0cy4KKyAgICAgKgorICAgICAqLworICAgIE5ldHdvcmtEYXRhVGx2ICpHZXRDb21taXNzaW9uaW5nRGF0YSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBDb21taXNzaW9uaW5nIERhdGEgU3ViLVRMVi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgVExWIHR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIENvbW1pc3Npb25pbmcgRGF0YSBTdWItVExWIG9yIE5VTEwgaWYgbm8gU3ViLVRMViBleGlzdHMuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpUbHYgKkdldENvbW1pc3Npb25pbmdEYXRhU3ViVGx2KE1lc2hDb1A6OlRsdjo6VHlwZSBhVHlwZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIENvbW1pc3Npb25pbmcgRGF0YSBUTFYgaW5kaWNhdGVzIEpvaW5pbmcgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEpvaW5pbmcgaXMgZW5hYmxlZCBpZiBhIEJvcmRlciBBZ2VudCBMb2NhdG9yIFRMViBleGlzdCBhbmQgdGhlIFN0ZWVyaW5nIERhdGEgVExWIGlzIG5vbi16ZXJvLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgQ29tbWlzc2lvbmluZyBEYXRhIFRMViBzYXlzIEpvaW5pbmcgaXMgZW5hYmxlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0pvaW5pbmdFbmFibGVkKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBDb21taXNzaW9uaW5nIERhdGEgdG8gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVmFsdWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgQ29tbWlzc2lvbmluZyBEYXRhIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFWYWx1ZUxlbmd0aCAgVGhlIGxlbmd0aCBvZiBAcCBhVmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBhZGRlZCB0aGUgQ29tbWlzc2lvbmluZyBEYXRhLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IHNwYWNlIHRvIGFkZCB0aGUgQ29tbWlzc2lvbmluZyBEYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZXRDb21taXNzaW9uaW5nRGF0YShjb25zdCB1aW50OF90ICphVmFsdWUsIHVpbnQ4X3QgYVZhbHVlTGVuZ3RoKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUiB8fCBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBSbG9jIG9mIERoY3AgQWdlbnQgb2Ygc3BlY2lmaWVkIGNvbnRleHRJZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0SWQgICAgICBBIHBvaW50ZXIgdG8gdGhlIENvbW1pc3Npb25pbmcgRGF0YSB2YWx1ZS4KKyAgICAgKiBAcGFyYW1bb3V0XSBhUmxvYzE2ICAgICAgICAgVGhlIHJlZmVyZW5jZSBvZiB3aGljaCBmb3Igb3V0cHV0IHRoZSBSbG9jMTYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGdldCB0aGUgUmxvYyBvZiBEaGNwIEFnZW50LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBUaGUgc3BlY2lmaWVkIEBwIGFDb250ZXh0SWQgY291bGQgbm90IGJlIGZvdW5kLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBHZXRSbG9jQnlDb250ZXh0SWQodWludDhfdCBhQ29udGV4dElkLCB1aW50MTZfdCAmYVJsb2MxNik7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUiB8fCBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKworcHJvdGVjdGVkOgorICAgIHVpbnQ4X3QgICAgICAgICBtU3RhYmxlVmVyc2lvbjsKKyAgICB1aW50OF90ICAgICAgICAgbVZlcnNpb247CisKK3ByaXZhdGU6CisgICAgb3RFcnJvciBSZW1vdmVDb21taXNzaW9uaW5nRGF0YSh2b2lkKTsKKworICAgIG90RXJyb3IgRXh0ZXJuYWxSb3V0ZUxvb2t1cCh1aW50OF90IGFEb21haW5JZCwgY29uc3QgSXA2OjpBZGRyZXNzICZkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVByZWZpeE1hdGNoLCB1aW50MTZfdCAqYVJsb2MxNik7CisgICAgb3RFcnJvciBEZWZhdWx0Um91dGVMb29rdXAoUHJlZml4VGx2ICZhUHJlZml4LCB1aW50MTZfdCAqYVJsb2MxNik7Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2lmIE9QRU5USFJFQURfTVRECisjaW5jbHVkZSAibmV0d29ya19kYXRhX2xlYWRlcl9tdGQuaHBwIgorI2VsaWYgT1BFTlRIUkVBRF9GVEQKKyNpbmNsdWRlICJuZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5ocHAiCisjZWxzZQorI2Vycm9yICJQbGVhc2UgZGVmaW5lIE9QRU5USFJFQURfTVREPTEgb3IgT1BFTlRIUkVBRF9GVEQ9MSIKKyNlbmRpZgorCisjZW5kaWYgIC8vIE5FVFdPUktfREFUQV9MRUFERVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfZnRkLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzN2VlOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5jcHAKQEAgLTAsMCArMSwxMTAwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIG1hbmFnZWQgYnkgdGhlIFRocmVhZCBMZWFkZXIuCisgKi8KKworI2lmIE9QRU5USFJFQURfRlRECisKKworI2RlZmluZSBXUFBfTkFNRSAibmV0d29ya19kYXRhX2xlYWRlcl9mdGQudG1oIgorI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuZXR3b3JrX2RhdGFfbGVhZGVyLmhwcCIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvYXAvY29hcF9oZWFkZXIuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2xvd3Bhbi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdGx2cy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKK0xlYWRlcjo6TGVhZGVyKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIExlYWRlckJhc2UoYVRocmVhZE5ldGlmKSwKKyAgICBtVGltZXIoYVRocmVhZE5ldGlmLkdldElwNigpLm1UaW1lclNjaGVkdWxlciwgJkxlYWRlcjo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1TZXJ2ZXJEYXRhKE9UX1VSSV9QQVRIX1NFUlZFUl9EQVRBLCAmTGVhZGVyOjpIYW5kbGVTZXJ2ZXJEYXRhLCB0aGlzKSwKKyAgICBtQ29tbWlzc2lvbmluZ0RhdGFHZXQoT1RfVVJJX1BBVEhfQ09NTUlTU0lPTkVSX0dFVCwgJkxlYWRlcjo6SGFuZGxlQ29tbWlzc2lvbmluZ0dldCwgdGhpcyksCisgICAgbUNvbW1pc3Npb25pbmdEYXRhU2V0KE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9TRVQsICZMZWFkZXI6OkhhbmRsZUNvbW1pc3Npb25pbmdTZXQsIHRoaXMpCit7CisgICAgUmVzZXQoKTsKK30KKwordm9pZCBMZWFkZXI6OlJlc2V0KHZvaWQpCit7CisgICAgTGVhZGVyQmFzZTo6UmVzZXQoKTsKKworICAgIG1lbXNldChtQ29udGV4dExhc3RVc2VkLCAwLCBzaXplb2YobUNvbnRleHRMYXN0VXNlZCkpOworICAgIG1Db250ZXh0VXNlZCA9IDA7CisgICAgbUNvbnRleHRJZFJldXNlRGVsYXkgPSBrQ29udGV4dElkUmV1c2VEZWxheTsKK30KKwordm9pZCBMZWFkZXI6OlN0YXJ0KHZvaWQpCit7CisgICAgQ29hcDo6Q29hcCAmY29hcCA9IEdldE5ldGlmKCkuR2V0Q29hcCgpOworCisgICAgY29hcC5BZGRSZXNvdXJjZShtU2VydmVyRGF0YSk7CisgICAgY29hcC5BZGRSZXNvdXJjZShtQ29tbWlzc2lvbmluZ0RhdGFHZXQpOworICAgIGNvYXAuQWRkUmVzb3VyY2UobUNvbW1pc3Npb25pbmdEYXRhU2V0KTsKK30KKwordm9pZCBMZWFkZXI6OlN0b3Aodm9pZCkKK3sKKyAgICBDb2FwOjpDb2FwICZjb2FwID0gR2V0TmV0aWYoKS5HZXRDb2FwKCk7CisKKyAgICBjb2FwLlJlbW92ZVJlc291cmNlKG1TZXJ2ZXJEYXRhKTsKKyAgICBjb2FwLlJlbW92ZVJlc291cmNlKG1Db21taXNzaW9uaW5nRGF0YUdldCk7CisgICAgY29hcC5SZW1vdmVSZXNvdXJjZShtQ29tbWlzc2lvbmluZ0RhdGFTZXQpOworfQorCit2b2lkIExlYWRlcjo6SW5jcmVtZW50VmVyc2lvbih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBpZiAobmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0xFQURFUikKKyAgICB7CisgICAgICAgIG1WZXJzaW9uKys7CisgICAgICAgIG5ldGlmLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworICAgIH0KK30KKwordm9pZCBMZWFkZXI6OkluY3JlbWVudFN0YWJsZVZlcnNpb24odm9pZCkKK3sKKyAgICBpZiAoR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgIHsKKyAgICAgICAgbVN0YWJsZVZlcnNpb24rKzsKKyAgICB9Cit9CisKK3VpbnQzMl90IExlYWRlcjo6R2V0Q29udGV4dElkUmV1c2VEZWxheSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtQ29udGV4dElkUmV1c2VEZWxheTsKK30KKworb3RFcnJvciBMZWFkZXI6OlNldENvbnRleHRJZFJldXNlRGVsYXkodWludDMyX3QgYURlbGF5KQoreworICAgIG1Db250ZXh0SWRSZXVzZURlbGF5ID0gYURlbGF5OworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIExlYWRlcjo6UmVtb3ZlQm9yZGVyUm91dGVyKHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgYm9vbCBybG9jSW4gPSBmYWxzZTsKKyAgICBib29sIHJsb2NTdGFibGUgPSBmYWxzZTsKKyAgICBSbG9jTG9va3VwKGFSbG9jMTYsIHJsb2NJbiwgcmxvY1N0YWJsZSwgbVRsdnMsIG1MZW5ndGgpOworCisgICAgVmVyaWZ5T3JFeGl0KHJsb2NJbik7CisKKyAgICBSZW1vdmVSbG9jKGFSbG9jMTYpOworICAgIG1WZXJzaW9uKys7CisKKyAgICBpZiAocmxvY1N0YWJsZSkKKyAgICB7CisgICAgICAgIG1TdGFibGVWZXJzaW9uKys7CisgICAgfQorCisgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVTZXJ2ZXJEYXRhKHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TGVhZGVyICo+KGFDb250ZXh0KS0+SGFuZGxlU2VydmVyRGF0YSgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZVNlcnZlckRhdGEoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXR3b3JrRGF0YVRsdiBuZXR3b3JrRGF0YTsKKyAgICBUaHJlYWRSbG9jMTZUbHYgcmxvYzE2OworCisgICAgb3RMb2dJbmZvTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgbmV0d29yayBkYXRhIHJlZ2lzdHJhdGlvbiIpOworCisgICAgaWYgKFRocmVhZFRsdjo6R2V0VGx2KGFNZXNzYWdlLCBUaHJlYWRUbHY6OmtSbG9jMTYsIHNpemVvZihybG9jMTYpLCBybG9jMTYpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQocmxvYzE2LklzVmFsaWQoKSk7CisgICAgICAgIFJlbW92ZUJvcmRlclJvdXRlcihybG9jMTYuR2V0UmxvYzE2KCkpOworICAgIH0KKworICAgIGlmIChUaHJlYWRUbHY6OkdldFRsdihhTWVzc2FnZSwgVGhyZWFkVGx2OjprVGhyZWFkTmV0d29ya0RhdGEsIHNpemVvZihuZXR3b3JrRGF0YSksIG5ldHdvcmtEYXRhKSA9PQorICAgICAgICBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJOZXR3b3JrRGF0YShIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5tUGVlckFkZHIubUZpZWxkcy5tMTZbN10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtEYXRhLkdldFRsdnMoKSwgbmV0d29ya0RhdGEuR2V0TGVuZ3RoKCkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoR2V0TmV0aWYoKS5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAiU2VudCBuZXR3b3JrIGRhdGEgcmVnaXN0cmF0aW9uIGFja25vd2xlZGdtZW50Iik7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlQ29tbWlzc2lvbmluZ1NldCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PExlYWRlciAqPihhQ29udGV4dCktPkhhbmRsZUNvbW1pc3Npb25pbmdTZXQoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVDb21taXNzaW9uaW5nU2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICB1aW50MTZfdCBvZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKyAgICB1aW50OF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFNZXNzYWdlLkdldExlbmd0aCgpIC0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkpOworICAgIHVpbnQ4X3QgdGx2c1tOZXR3b3JrRGF0YTo6a01heFNpemVdOworICAgIE1lc2hDb1A6OlN0YXRlVGx2OjpTdGF0ZSBzdGF0ZSA9IE1lc2hDb1A6OlN0YXRlVGx2OjprQWNjZXB0OworICAgIGJvb2wgaGFzU2Vzc2lvbklkID0gZmFsc2U7CisgICAgYm9vbCBoYXNWYWxpZFRsdiA9IGZhbHNlOworICAgIHVpbnQxNl90IHNlc3Npb25JZCA9IDA7CisKKyAgICBWZXJpZnlPckV4aXQoR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRSb2xlKCkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSLCBzdGF0ZSA9IE1lc2hDb1A6OlN0YXRlVGx2OjprUmVqZWN0KTsKKworICAgIGFNZXNzYWdlLlJlYWQob2Zmc2V0LCBsZW5ndGgsIHRsdnMpOworCisgICAgLy8gU2Vzc2lvbiBJZCBhbmQgQm9yZGVyIFJvdXRlciBMb2NhdG9yIE1VU1QgTk9UIGJlIHNldCwgYnV0IGFjY2VwdCBpbmNsdWRpbmcgdW5leHBlY3RlZCBvcgorICAgIC8vIHVua25vd24gVExWIGFzIGxvbmcgYXMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHZhbGlkIFRMVi4KKyAgICBmb3IgKE1lc2hDb1A6OlRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxNZXNoQ29QOjpUbHYgKj4odGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE1lc2hDb1A6OlRsdiAqPih0bHZzICsgbGVuZ3RoKTsKKyAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgTWVzaENvUDo6VGx2OjpUeXBlIHR5cGUgPSBjdXItPkdldFR5cGUoKTsKKworICAgICAgICBpZiAodHlwZSA9PSBNZXNoQ29QOjpUbHY6OmtKb2luZXJVZHBQb3J0IHx8IHR5cGUgPT0gTWVzaENvUDo6VGx2OjprU3RlZXJpbmdEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNWYWxpZFRsdiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBNZXNoQ29QOjpUbHY6OmtCb3JkZXJBZ2VudExvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIEV4aXROb3coc3RhdGUgPSBNZXNoQ29QOjpTdGF0ZVRsdjo6a1JlamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBNZXNoQ29QOjpUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc1Nlc3Npb25JZCA9IHRydWU7CisgICAgICAgICAgICBzZXNzaW9uSWQgPSBzdGF0aWNfY2FzdDxNZXNoQ29QOjpDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgKj4oY3VyKS0+R2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGZvciB1bmV4cGVjdGVkIG9yIHVua25vd24gVExWCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyB2ZXJpZnkgd2hldGhlciBvciBub3QgY29tbWlzc2lvbmVyIHNlc3Npb24gaWQgVExWIGlzIGluY2x1ZGVkCisgICAgVmVyaWZ5T3JFeGl0KGhhc1Nlc3Npb25JZCwgc3RhdGUgPSBNZXNoQ29QOjpTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICAvLyB2ZXJpZnkgd2hldGhlciBvciBub3QgTUdNVF9DT01NX1NFVC5yZXEgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHZhbGlkIFRMVgorICAgIFZlcmlmeU9yRXhpdChoYXNWYWxpZFRsdiwgc3RhdGUgPSBNZXNoQ29QOjpTdGF0ZVRsdjo6a1JlamVjdCk7CisKKyAgICAvLyBGaW5kIENvbW1pc3Npb25pbmcgRGF0YSBUTFYKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpuZXREYXRhVGx2ID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBuZXREYXRhVGx2IDwgcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgICAgICAgbmV0RGF0YVRsdiA9IG5ldERhdGFUbHYtPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChuZXREYXRhVGx2LT5HZXRUeXBlKCkgPT0gTmV0d29ya0RhdGFUbHY6OmtUeXBlQ29tbWlzc2lvbmluZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBNZXNoQ29QIFRMVnMgYW5kIGV4dHJhY3QgZGVzaXJlZCBkYXRhCisgICAgICAgICAgICBmb3IgKE1lc2hDb1A6OlRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxNZXNoQ29QOjpUbHYgKj4obmV0RGF0YVRsdi0+R2V0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KG5ldERhdGFUbHYtPkdldFZhbHVlKCkgKyBuZXREYXRhVGx2LT5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBNZXNoQ29QOjpUbHY6OmtDb21taXNzaW9uZXJTZXNzaW9uSWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBWZXJpZnlPckV4aXQoc2Vzc2lvbklkID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNoQ29QOjpDb21taXNzaW9uZXJTZXNzaW9uSWRUbHYgKj4oY3VyKS0+R2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IE1lc2hDb1A6OlN0YXRlVGx2OjprUmVqZWN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gTWVzaENvUDo6VGx2OjprQm9yZGVyQWdlbnRMb2NhdG9yKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHRsdnMgKyBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihjdXIpLCBjdXItPkdldExlbmd0aCgpICsgc2l6ZW9mKE1lc2hDb1A6OlRsdikpOworICAgICAgICAgICAgICAgICAgICBsZW5ndGggKz0gKGN1ci0+R2V0TGVuZ3RoKCkgKyBzaXplb2YoTWVzaENvUDo6VGx2KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgU2V0Q29tbWlzc2lvbmluZ0RhdGEodGx2cywgbGVuZ3RoKTsKKworZXhpdDoKKworICAgIGlmIChHZXROZXRpZigpLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9MRUFERVIpCisgICAgeworICAgICAgICBTZW5kQ29tbWlzc2lvbmluZ1NldFJlc3BvbnNlKGFIZWFkZXIsIGFNZXNzYWdlSW5mbywgc3RhdGUpOworICAgIH0KKworICAgIHJldHVybjsKK30KKwordm9pZCBMZWFkZXI6OkhhbmRsZUNvbW1pc3Npb25pbmdHZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxMZWFkZXIgKj4oYUNvbnRleHQpLT5IYW5kbGVDb21taXNzaW9uaW5nR2V0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlQ29tbWlzc2lvbmluZ0dldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pCit7CisgICAgTWVzaENvUDo6VGx2IHRsdjsKKyAgICB1aW50MTZfdCBvZmZzZXQgPSBhTWVzc2FnZS5HZXRPZmZzZXQoKTsKKyAgICB1aW50OF90IHRsdnNbTmV0d29ya0RhdGE6OmtNYXhTaXplXTsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisKKyAgICB3aGlsZSAob2Zmc2V0IDwgYU1lc3NhZ2UuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHRsdiksICZ0bHYpOworCisgICAgICAgIGlmICh0bHYuR2V0VHlwZSgpID09IE1lc2hDb1A6OlRsdjo6a0dldCkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoID0gdGx2LkdldExlbmd0aCgpOworICAgICAgICAgICAgYU1lc3NhZ2UuUmVhZChvZmZzZXQgKyBzaXplb2YoTWVzaENvUDo6VGx2KSwgbGVuZ3RoLCB0bHZzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih0bHYpICsgdGx2LkdldExlbmd0aCgpOworICAgIH0KKworICAgIFNlbmRDb21taXNzaW9uaW5nR2V0UmVzcG9uc2UoYUhlYWRlciwgYU1lc3NhZ2VJbmZvLCB0bHZzLCBsZW5ndGgpOworfQorCit2b2lkIExlYWRlcjo6U2VuZENvbW1pc3Npb25pbmdHZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphVGx2cywgdWludDhfdCBhTGVuZ3RoKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgdWludDhfdCBpbmRleDsKKyAgICB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE1lc2hDb1A6Ok5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgcmVzcG9uc2VIZWFkZXIpKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgZm9yIChOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgICAgICBjdXIgPCByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVDb21taXNzaW9uaW5nRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YSA9IGN1ci0+R2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IGN1ci0+R2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChkYXRhICYmIGxlbmd0aCwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIGlmIChhTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGRhdGEsIGxlbmd0aCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhTGVuZ3RoOyBpbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKE1lc2hDb1A6OlRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxNZXNoQ29QOjpUbHYgKj4oZGF0YSk7CisgICAgICAgICAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzaENvUDo6VGx2ICo+KGRhdGEgKyBsZW5ndGgpOworICAgICAgICAgICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VyLT5HZXRUeXBlKCkgPT0gYVRsdnNbaW5kZXhdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZChjdXIsIHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyBjdXItPkdldExlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtZXNzYWdlLT5HZXRMZW5ndGgoKSA9PSByZXNwb25zZUhlYWRlci5HZXRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBheWxvYWQsIHJlbW92ZSBjb2FwIHBheWxvYWQgbWFya2VyCisgICAgICAgIG1lc3NhZ2UtPlNldExlbmd0aChtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIDEpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBjb21taXNzaW9uaW5nIGRhdGFzZXQgZ2V0IHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorfQorCit2b2lkIExlYWRlcjo6U2VuZENvbW1pc3Npb25pbmdTZXRSZXNwb25zZShjb25zdCBDb2FwOjpIZWFkZXIgJmFSZXF1ZXN0SGVhZGVyLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNoQ29QOjpTdGF0ZVRsdjo6U3RhdGUgYVN0YXRlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIHJlc3BvbnNlSGVhZGVyOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgTWVzaENvUDo6U3RhdGVUbHYgc3RhdGU7CisKKyAgICByZXNwb25zZUhlYWRlci5TZXREZWZhdWx0UmVzcG9uc2VIZWFkZXIoYVJlcXVlc3RIZWFkZXIpOworICAgIHJlc3BvbnNlSGVhZGVyLlNldFBheWxvYWRNYXJrZXIoKTsKKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IE1lc2hDb1A6Ok5ld01lc2hDb1BNZXNzYWdlKG5ldGlmLkdldENvYXAoKSwgcmVzcG9uc2VIZWFkZXIpKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgc3RhdGUuSW5pdCgpOworICAgIHN0YXRlLlNldFN0YXRlKGFTdGF0ZSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmc3RhdGUsIHNpemVvZihzdGF0ZSkpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTWVzaENvUChHZXRJbnN0YW5jZSgpLCAic2VudCBjb21taXNzaW9uaW5nIGRhdGFzZXQgc2V0IHJlc3BvbnNlIik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorfQorCit2b2lkIExlYWRlcjo6UmxvY0xvb2t1cCh1aW50MTZfdCBhUmxvYzE2LCBib29sICZhSW4sIGJvb2wgJmFTdGFibGUsIHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoKQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFUbHZzKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhVGx2cyArIGFUbHZzTGVuZ3RoKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqc3ViQ3VyOworICAgIE5ldHdvcmtEYXRhVGx2ICpzdWJFbmQ7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisgICAgQm9yZGVyUm91dGVyVGx2ICpib3JkZXJSb3V0ZXI7CisgICAgSGFzUm91dGVUbHYgKmhhc1JvdXRlOworICAgIEJvcmRlclJvdXRlckVudHJ5ICpib3JkZXJSb3V0ZXJFbnRyeTsKKyAgICBIYXNSb3V0ZUVudHJ5ICpoYXNSb3V0ZUVudHJ5OworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworICAgICAgICAgICAgc3ViQ3VyID0gcHJlZml4LT5HZXRTdWJUbHZzKCk7CisgICAgICAgICAgICBzdWJFbmQgPSBwcmVmaXgtPkdldE5leHQoKTsKKworICAgICAgICAgICAgd2hpbGUgKHN1YkN1ciA8IHN1YkVuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1YkN1ci0+R2V0VHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUJvcmRlclJvdXRlcjoKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyUm91dGVyID0gRmluZEJvcmRlclJvdXRlcigqcHJlZml4KTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBib3JkZXJSb3V0ZXItPkdldE51bUVudHJpZXMoKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXJFbnRyeSA9IGJvcmRlclJvdXRlci0+R2V0RW50cnkoaSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3JkZXJSb3V0ZXJFbnRyeS0+R2V0UmxvYygpID09IGFSbG9jMTYpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUluID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3JkZXJSb3V0ZXItPklzU3RhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGU6CisgICAgICAgICAgICAgICAgICAgIGhhc1JvdXRlID0gRmluZEhhc1JvdXRlKCpwcmVmaXgpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGhhc1JvdXRlLT5HZXROdW1FbnRyaWVzKCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFzUm91dGVFbnRyeSA9IGhhc1JvdXRlLT5HZXRFbnRyeShpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JvdXRlRW50cnktPkdldFJsb2MoKSA9PSBhUmxvYzE2KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUm91dGUtPklzU3RhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU3RhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhSW4gJiYgYVN0YWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdWJDdXIgPSBzdWJDdXItPkdldE5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK2Jvb2wgTGVhZGVyOjpJc1N0YWJsZVVwZGF0ZWQodWludDE2X3QgYVJsb2MxNiwgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgsIHVpbnQ4X3QgKmFUbHZzQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhVGx2c0Jhc2VMZW5ndGgpCit7CisgICAgYm9vbCBydmFsID0gZmFsc2U7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4oYVRsdnMpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFUbHZzICsgYVRsdnNMZW5ndGgpOworCisgICAgd2hpbGUgKGN1ciA8IGVuZCkKKyAgICB7CisgICAgICAgIGlmIChjdXItPkdldFR5cGUoKSA9PSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFByZWZpeFRsdiAqcHJlZml4ID0gc3RhdGljX2Nhc3Q8UHJlZml4VGx2ICo+KGN1cik7CisgICAgICAgICAgICBDb250ZXh0VGx2ICpjb250ZXh0ID0gRmluZENvbnRleHQoKnByZWZpeCk7CisgICAgICAgICAgICBCb3JkZXJSb3V0ZXJUbHYgKmJvcmRlclJvdXRlciA9IEZpbmRCb3JkZXJSb3V0ZXIoKnByZWZpeCk7CisgICAgICAgICAgICBIYXNSb3V0ZVRsdiAqaGFzUm91dGUgPSBGaW5kSGFzUm91dGUoKnByZWZpeCk7CisKKyAgICAgICAgICAgIGlmIChjdXItPklzU3RhYmxlKCkgJiYgKCFjb250ZXh0IHx8IGJvcmRlclJvdXRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHJlZml4VGx2ICpwcmVmaXhCYXNlID0gRmluZFByZWZpeChwcmVmaXgtPkdldFByZWZpeCgpLCBwcmVmaXgtPkdldFByZWZpeExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVRsdnNCYXNlLCBhVGx2c0Jhc2VMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaWYgKCFwcmVmaXhCYXNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGJvcmRlclJvdXRlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEJvcmRlclJvdXRlclRsdiAqYm9yZGVyUm91dGVyQmFzZSA9IEZpbmRCb3JkZXJSb3V0ZXIoKnByZWZpeEJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghYm9yZGVyUm91dGVyQmFzZSB8fCBtZW1jbXAoYm9yZGVyUm91dGVyLCBib3JkZXJSb3V0ZXJCYXNlLCBib3JkZXJSb3V0ZXItPkdldExlbmd0aCgpKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBFeGl0Tm93KHJ2YWwgPSB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChoYXNSb3V0ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEhhc1JvdXRlVGx2ICpoYXNSb3V0ZUJhc2UgPSBGaW5kSGFzUm91dGUoKnByZWZpeEJhc2UpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUm91dGVCYXNlIHx8IChtZW1jbXAoaGFzUm91dGUsIGhhc1JvdXRlQmFzZSwgaGFzUm91dGUtPkdldExlbmd0aCgpKSAhPSAwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRXhpdE5vdyhydmFsID0gdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFSbG9jMTYpOworICAgIHJldHVybiBydmFsOworfQorCitvdEVycm9yIExlYWRlcjo6UmVnaXN0ZXJOZXR3b3JrRGF0YSh1aW50MTZfdCBhUmxvYzE2LCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBib29sIHJsb2NJbiA9IGZhbHNlOworICAgIGJvb2wgcmxvY1N0YWJsZSA9IGZhbHNlOworICAgIGJvb2wgc3RhYmxlVXBkYXRlZCA9IGZhbHNlOworCisgICAgUmxvY0xvb2t1cChhUmxvYzE2LCBybG9jSW4sIHJsb2NTdGFibGUsIG1UbHZzLCBtTGVuZ3RoKTsKKworICAgIGlmIChybG9jSW4pCisgICAgeworICAgICAgICBpZiAoSXNTdGFibGVVcGRhdGVkKGFSbG9jMTYsIGFUbHZzLCBhVGx2c0xlbmd0aCwgbVRsdnMsIG1MZW5ndGgpIHx8CisgICAgICAgICAgICBJc1N0YWJsZVVwZGF0ZWQoYVJsb2MxNiwgbVRsdnMsIG1MZW5ndGgsIGFUbHZzLCBhVGx2c0xlbmd0aCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YWJsZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IFJlbW92ZVJsb2MoYVJsb2MxNikpOworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkTmV0d29ya0RhdGEoYVRsdnMsIGFUbHZzTGVuZ3RoKSk7CisKKyAgICAgICAgbVZlcnNpb24rKzsKKworICAgICAgICBpZiAoc3RhYmxlVXBkYXRlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YWJsZVZlcnNpb24rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBSbG9jTG9va3VwKGFSbG9jMTYsIHJsb2NJbiwgcmxvY1N0YWJsZSwgYVRsdnMsIGFUbHZzTGVuZ3RoKTsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEFkZE5ldHdvcmtEYXRhKGFUbHZzLCBhVGx2c0xlbmd0aCkpOworCisgICAgICAgIG1WZXJzaW9uKys7CisKKyAgICAgICAgaWYgKHJsb2NTdGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGFibGVWZXJzaW9uKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHZXROZXRpZigpLlNldFN0YXRlQ2hhbmdlZEZsYWdzKE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBMZWFkZXI6OkFkZE5ldHdvcmtEYXRhKHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoKQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KGFUbHZzKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihhVGx2cyArIGFUbHZzTGVuZ3RoKTsKKworICAgIHdoaWxlIChjdXIgPCBlbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4OgorICAgICAgICAgICAgQWRkUHJlZml4KCpzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKSk7CisgICAgICAgICAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAiYWRkIHByZWZpeCBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCisgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgImFkZCBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTGVhZGVyOjpBZGRQcmVmaXgoUHJlZml4VGx2ICZhUHJlZml4KQoreworICAgIE5ldHdvcmtEYXRhVGx2ICpjdXIgPSBhUHJlZml4LkdldFN1YlRsdnMoKTsKKyAgICBOZXR3b3JrRGF0YVRsdiAqZW5kID0gYVByZWZpeC5HZXROZXh0KCk7CisKKyAgICB3aGlsZSAoY3VyIDwgZW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUhhc1JvdXRlOgorICAgICAgICAgICAgQWRkSGFzUm91dGUoYVByZWZpeCwgKnN0YXRpY19jYXN0PEhhc1JvdXRlVGx2ICo+KGN1cikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVCb3JkZXJSb3V0ZXI6CisgICAgICAgICAgICBBZGRCb3JkZXJSb3V0ZXIoYVByZWZpeCwgKnN0YXRpY19jYXN0PEJvcmRlclJvdXRlclRsdiAqPihjdXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExlYWRlcjo6QWRkSGFzUm91dGUoUHJlZml4VGx2ICZhUHJlZml4LCBIYXNSb3V0ZVRsdiAmYUhhc1JvdXRlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFByZWZpeFRsdiAqZHN0UHJlZml4OworICAgIEhhc1JvdXRlVGx2ICpkc3RIYXNSb3V0ZTsKKworICAgIGlmICgoZHN0UHJlZml4ID0gRmluZFByZWZpeChhUHJlZml4LkdldFByZWZpeCgpLCBhUHJlZml4LkdldFByZWZpeExlbmd0aCgpKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGRzdFByZWZpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJlZml4VGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oZHN0UHJlZml4KSwgc2l6ZW9mKFByZWZpeFRsdikgKyBCaXRWZWN0b3JCeXRlcyhhUHJlZml4LkdldFByZWZpeExlbmd0aCgpKSk7CisgICAgICAgIGRzdFByZWZpeC0+SW5pdChhUHJlZml4LkdldERvbWFpbklkKCksIGFQcmVmaXguR2V0UHJlZml4TGVuZ3RoKCksIGFQcmVmaXguR2V0UHJlZml4KCkpOworICAgIH0KKworICAgIGlmIChhSGFzUm91dGUuSXNTdGFibGUoKSkKKyAgICB7CisgICAgICAgIGRzdFByZWZpeC0+U2V0U3RhYmxlKCk7CisgICAgfQorCisgICAgaWYgKChkc3RIYXNSb3V0ZSA9IEZpbmRIYXNSb3V0ZSgqZHN0UHJlZml4LCBhSGFzUm91dGUuSXNTdGFibGUoKSkpID09IE5VTEwpCisgICAgeworICAgICAgICBkc3RIYXNSb3V0ZSA9IHN0YXRpY19jYXN0PEhhc1JvdXRlVGx2ICo+KGRzdFByZWZpeC0+R2V0TmV4dCgpKTsKKyAgICAgICAgSW5zZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihkc3RIYXNSb3V0ZSksIHNpemVvZihIYXNSb3V0ZVRsdikpOworICAgICAgICBkc3RQcmVmaXgtPlNldExlbmd0aChkc3RQcmVmaXgtPkdldExlbmd0aCgpICsgc2l6ZW9mKEhhc1JvdXRlVGx2KSk7CisgICAgICAgIGRzdEhhc1JvdXRlLT5Jbml0KCk7CisKKyAgICAgICAgaWYgKGFIYXNSb3V0ZS5Jc1N0YWJsZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RIYXNSb3V0ZS0+U2V0U3RhYmxlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGRzdEhhc1JvdXRlLT5HZXROZXh0KCkpLCBzaXplb2YoSGFzUm91dGVFbnRyeSkpOworICAgIGRzdEhhc1JvdXRlLT5TZXRMZW5ndGgoZHN0SGFzUm91dGUtPkdldExlbmd0aCgpICsgc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICBkc3RQcmVmaXgtPlNldExlbmd0aChkc3RQcmVmaXgtPkdldExlbmd0aCgpICsgc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICBtZW1jcHkoZHN0SGFzUm91dGUtPkdldEVudHJ5KGRzdEhhc1JvdXRlLT5HZXROdW1FbnRyaWVzKCkgLSAxKSwgYUhhc1JvdXRlLkdldEVudHJ5KDApLAorICAgICAgICAgICBzaXplb2YoSGFzUm91dGVFbnRyeSkpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExlYWRlcjo6QWRkQm9yZGVyUm91dGVyKFByZWZpeFRsdiAmYVByZWZpeCwgQm9yZGVyUm91dGVyVGx2ICZhQm9yZGVyUm91dGVyKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIFByZWZpeFRsdiAqZHN0UHJlZml4OworICAgIENvbnRleHRUbHYgKmRzdENvbnRleHQ7CisgICAgQm9yZGVyUm91dGVyVGx2ICpkc3RCb3JkZXJSb3V0ZXI7CisgICAgaW50IGNvbnRleHRJZDsKKworICAgIGlmICgoZHN0UHJlZml4ID0gRmluZFByZWZpeChhUHJlZml4LkdldFByZWZpeCgpLCBhUHJlZml4LkdldFByZWZpeExlbmd0aCgpKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGRzdFByZWZpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJlZml4VGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oZHN0UHJlZml4KSwgc2l6ZW9mKFByZWZpeFRsdikgKyBCaXRWZWN0b3JCeXRlcyhhUHJlZml4LkdldFByZWZpeExlbmd0aCgpKSk7CisgICAgICAgIGRzdFByZWZpeC0+SW5pdChhUHJlZml4LkdldERvbWFpbklkKCksIGFQcmVmaXguR2V0UHJlZml4TGVuZ3RoKCksIGFQcmVmaXguR2V0UHJlZml4KCkpOworICAgIH0KKworICAgIGlmICgoZHN0Q29udGV4dCA9IEZpbmRDb250ZXh0KCpkc3RQcmVmaXgpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgZHN0Q29udGV4dC0+U2V0Q29tcHJlc3MoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoKGNvbnRleHRJZCA9IEFsbG9jYXRlQ29udGV4dCgpKSA+PSAwKQorICAgIHsKKyAgICAgICAgZHN0Q29udGV4dCA9IHN0YXRpY19jYXN0PENvbnRleHRUbHYgKj4oZHN0UHJlZml4LT5HZXROZXh0KCkpOworICAgICAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGRzdENvbnRleHQpLCBzaXplb2YoQ29udGV4dFRsdikpOworICAgICAgICBkc3RQcmVmaXgtPlNldExlbmd0aChkc3RQcmVmaXgtPkdldExlbmd0aCgpICsgc2l6ZW9mKENvbnRleHRUbHYpKTsKKyAgICAgICAgZHN0Q29udGV4dC0+SW5pdCgpOworICAgICAgICBkc3RDb250ZXh0LT5TZXRDb21wcmVzcygpOworICAgICAgICBkc3RDb250ZXh0LT5TZXRDb250ZXh0SWQoc3RhdGljX2Nhc3Q8dWludDhfdD4oY29udGV4dElkKSk7CisgICAgICAgIGRzdENvbnRleHQtPlNldENvbnRleHRMZW5ndGgoYVByZWZpeC5HZXRQcmVmaXhMZW5ndGgoKSk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KGRzdENvbnRleHQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtQ29udGV4dExhc3RVc2VkW2RzdENvbnRleHQtPkdldENvbnRleHRJZCgpIC0ga01pbkNvbnRleHRJZF0gPSAwOworCisKKyAgICBpZiAoKGRzdEJvcmRlclJvdXRlciA9IEZpbmRCb3JkZXJSb3V0ZXIoKmRzdFByZWZpeCwgYUJvcmRlclJvdXRlci5Jc1N0YWJsZSgpKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGRzdEJvcmRlclJvdXRlciA9IHN0YXRpY19jYXN0PEJvcmRlclJvdXRlclRsdiAqPihkc3RQcmVmaXgtPkdldE5leHQoKSk7CisgICAgICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oZHN0Qm9yZGVyUm91dGVyKSwgc2l6ZW9mKEJvcmRlclJvdXRlclRsdikpOworICAgICAgICBkc3RQcmVmaXgtPlNldExlbmd0aChkc3RQcmVmaXgtPkdldExlbmd0aCgpICsgc2l6ZW9mKEJvcmRlclJvdXRlclRsdikpOworICAgICAgICBkc3RCb3JkZXJSb3V0ZXItPkluaXQoKTsKKyAgICB9CisKKyAgICBJbnNlcnQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGRzdEJvcmRlclJvdXRlci0+R2V0TmV4dCgpKSwgc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KSk7CisgICAgZHN0Qm9yZGVyUm91dGVyLT5TZXRMZW5ndGgoZHN0Qm9yZGVyUm91dGVyLT5HZXRMZW5ndGgoKSArIHNpemVvZihCb3JkZXJSb3V0ZXJFbnRyeSkpOworICAgIGRzdFByZWZpeC0+U2V0TGVuZ3RoKGRzdFByZWZpeC0+R2V0TGVuZ3RoKCkgKyBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKyAgICBtZW1jcHkoZHN0Qm9yZGVyUm91dGVyLT5HZXRFbnRyeShkc3RCb3JkZXJSb3V0ZXItPkdldE51bUVudHJpZXMoKSAtIDEpLCBhQm9yZGVyUm91dGVyLkdldEVudHJ5KDApLAorICAgICAgICAgICBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKworICAgIGlmIChhQm9yZGVyUm91dGVyLklzU3RhYmxlKCkpCisgICAgeworICAgICAgICBkc3RQcmVmaXgtPlNldFN0YWJsZSgpOworICAgICAgICBkc3RDb250ZXh0LT5TZXRTdGFibGUoKTsKKyAgICAgICAgZHN0Qm9yZGVyUm91dGVyLT5TZXRTdGFibGUoKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitpbnQgTGVhZGVyOjpBbGxvY2F0ZUNvbnRleHQodm9pZCkKK3sKKyAgICBpbnQgcnZhbCA9IC0xOworCisgICAgZm9yIChpbnQgaSA9IGtNaW5Db250ZXh0SWQ7IGkgPCBrTWluQ29udGV4dElkICsga051bUNvbnRleHRJZHM7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgobUNvbnRleHRVc2VkICYgKDEgPDwgaSkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Db250ZXh0VXNlZCB8PSAxIDw8IGk7CisgICAgICAgICAgICBydmFsID0gaTsKKyAgICAgICAgICAgIG90TG9nSW5mb05ldERhdGEoR2V0SW5zdGFuY2UoKSwgIkFsbG9jYXRlZCBDb250ZXh0IElEID0gJWQiLCBydmFsKTsKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcnZhbDsKK30KKworb3RFcnJvciBMZWFkZXI6OkZyZWVDb250ZXh0KHVpbnQ4X3QgYUNvbnRleHRJZCkKK3sKKyAgICBvdExvZ0luZm9OZXREYXRhKEdldEluc3RhbmNlKCksICJGcmVlIENvbnRleHQgSWQgPSAlZCIsIGFDb250ZXh0SWQpOworICAgIFJlbW92ZUNvbnRleHQoYUNvbnRleHRJZCk7CisgICAgbUNvbnRleHRVc2VkICY9IH4oMSA8PCBhQ29udGV4dElkKTsKKyAgICBtVmVyc2lvbisrOworICAgIG1TdGFibGVWZXJzaW9uKys7CisgICAgR2V0TmV0aWYoKS5TZXRTdGF0ZUNoYW5nZWRGbGFncyhPVF9DSEFOR0VEX1RIUkVBRF9ORVREQVRBKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMZWFkZXI6OlNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgYm9vbCBybG9jSW4gPSBmYWxzZTsKKyAgICBib29sIHJsb2NTdGFibGUgPSBmYWxzZTsKKworICAgIFJsb2NMb29rdXAoYVJsb2MxNiwgcmxvY0luLCBybG9jU3RhYmxlLCBtVGx2cywgbUxlbmd0aCk7CisKKyAgICBWZXJpZnlPckV4aXQocmxvY0luLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gTmV0d29ya0RhdGE6OlNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKGFSbG9jMTYpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTGVhZGVyOjpSZW1vdmVSbG9jKHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMpOworICAgIE5ldHdvcmtEYXRhVGx2ICplbmQ7CisgICAgUHJlZml4VGx2ICpwcmVmaXg7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKworICAgICAgICBpZiAoY3VyID49IGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlUHJlZml4OgorICAgICAgICB7CisgICAgICAgICAgICBwcmVmaXggPSBzdGF0aWNfY2FzdDxQcmVmaXhUbHYgKj4oY3VyKTsKKyAgICAgICAgICAgIFJlbW92ZVJsb2MoKnByZWZpeCwgYVJsb2MxNik7CisKKyAgICAgICAgICAgIGlmIChwcmVmaXgtPkdldFN1YlRsdnNMZW5ndGgoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbW92ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4ocHJlZml4KSwgc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KSArIHByZWZpeC0+R2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIHByZWZpeCBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXItPkdldE5leHQoKTsKKyAgICB9CisKKyAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBMZWFkZXI6OlJlbW92ZVJsb2MoUHJlZml4VGx2ICZwcmVmaXgsIHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgTmV0d29ya0RhdGFUbHYgKmN1ciA9IHByZWZpeC5HZXRTdWJUbHZzKCk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZDsKKyAgICBDb250ZXh0VGx2ICpjb250ZXh0OworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBlbmQgPSBwcmVmaXguR2V0TmV4dCgpOworCisgICAgICAgIGlmIChjdXIgPj0gZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoY3VyLT5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVIYXNSb3V0ZToKKyAgICAgICAgICAgIFJlbW92ZVJsb2MocHJlZml4LCAqc3RhdGljX2Nhc3Q8SGFzUm91dGVUbHYgKj4oY3VyKSwgYVJsb2MxNik7CisKKyAgICAgICAgICAgIC8vIHJlbW92ZSBoYXMgcm91dGUgdGx2IGlmIGVtcHR5CisgICAgICAgICAgICBpZiAoY3VyLT5HZXRMZW5ndGgoKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByZWZpeC5TZXRTdWJUbHZzTGVuZ3RoKHByZWZpeC5HZXRTdWJUbHZzTGVuZ3RoKCkgLSBzaXplb2YoSGFzUm91dGVUbHYpKTsKKyAgICAgICAgICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ciksIHNpemVvZihIYXNSb3V0ZVRsdikpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZUJvcmRlclJvdXRlcjoKKyAgICAgICAgICAgIFJlbW92ZVJsb2MocHJlZml4LCAqc3RhdGljX2Nhc3Q8Qm9yZGVyUm91dGVyVGx2ICo+KGN1ciksIGFSbG9jMTYpOworCisgICAgICAgICAgICAvLyByZW1vdmUgYm9yZGVyIHJvdXRlciB0bHYgaWYgZW1wdHkKKyAgICAgICAgICAgIGlmIChjdXItPkdldExlbmd0aCgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJlZml4LlNldFN1YlRsdnNMZW5ndGgocHJlZml4LkdldFN1YlRsdnNMZW5ndGgoKSAtIHNpemVvZihCb3JkZXJSb3V0ZXJUbHYpKTsKKyAgICAgICAgICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGN1ciksIHNpemVvZihCb3JkZXJSb3V0ZXJUbHYpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5HZXROZXh0KCk7CisgICAgfQorCisgICAgaWYgKChjb250ZXh0ID0gRmluZENvbnRleHQocHJlZml4KSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChwcmVmaXguR2V0U3ViVGx2c0xlbmd0aCgpID09IHNpemVvZihDb250ZXh0VGx2KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Q2xlYXJDb21wcmVzcygpOworICAgICAgICAgICAgbUNvbnRleHRMYXN0VXNlZFtjb250ZXh0LT5HZXRDb250ZXh0SWQoKSAtIGtNaW5Db250ZXh0SWRdID0gVGltZXI6OkdldE5vdygpOworCisgICAgICAgICAgICBpZiAobUNvbnRleHRMYXN0VXNlZFtjb250ZXh0LT5HZXRDb250ZXh0SWQoKSAtIGtNaW5Db250ZXh0SWRdID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUNvbnRleHRMYXN0VXNlZFtjb250ZXh0LT5HZXRDb250ZXh0SWQoKSAtIGtNaW5Db250ZXh0SWRdID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVRpbWVyLlN0YXJ0KGtTdGF0ZVVwZGF0ZVBlcmlvZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5TZXRDb21wcmVzcygpOworICAgICAgICAgICAgbUNvbnRleHRMYXN0VXNlZFtjb250ZXh0LT5HZXRDb250ZXh0SWQoKSAtIGtNaW5Db250ZXh0SWRdID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExlYWRlcjo6UmVtb3ZlUmxvYyhQcmVmaXhUbHYgJmFQcmVmaXgsIEhhc1JvdXRlVGx2ICZhSGFzUm91dGUsIHVpbnQxNl90IGFSbG9jMTYpCit7CisgICAgSGFzUm91dGVFbnRyeSAqZW50cnk7CisKKyAgICAvLyByZW1vdmUgcmxvYyBmcm9tIGhhcyByb3V0ZSB0bHYKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhSGFzUm91dGUuR2V0TnVtRW50cmllcygpOyBpKyspCisgICAgeworICAgICAgICBlbnRyeSA9IGFIYXNSb3V0ZS5HZXRFbnRyeShpKTsKKworICAgICAgICBpZiAoZW50cnktPkdldFJsb2MoKSAhPSBhUmxvYzE2KQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFIYXNSb3V0ZS5TZXRMZW5ndGgoYUhhc1JvdXRlLkdldExlbmd0aCgpIC0gc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICAgICAgYVByZWZpeC5TZXRTdWJUbHZzTGVuZ3RoKGFQcmVmaXguR2V0U3ViVGx2c0xlbmd0aCgpIC0gc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICAgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihlbnRyeSksIHNpemVvZigqZW50cnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTGVhZGVyOjpSZW1vdmVSbG9jKFByZWZpeFRsdiAmYVByZWZpeCwgQm9yZGVyUm91dGVyVGx2ICZhQm9yZGVyUm91dGVyLCB1aW50MTZfdCBhUmxvYzE2KQoreworICAgIEJvcmRlclJvdXRlckVudHJ5ICplbnRyeTsKKworICAgIC8vIHJlbW92ZSBybG9jIGZyb20gYm9yZGVyIHJvdXRlciB0bHYKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhQm9yZGVyUm91dGVyLkdldE51bUVudHJpZXMoKTsgaSsrKQorICAgIHsKKyAgICAgICAgZW50cnkgPSBhQm9yZGVyUm91dGVyLkdldEVudHJ5KGkpOworCisgICAgICAgIGlmIChlbnRyeS0+R2V0UmxvYygpICE9IGFSbG9jMTYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYUJvcmRlclJvdXRlci5TZXRMZW5ndGgoYUJvcmRlclJvdXRlci5HZXRMZW5ndGgoKSAtIHNpemVvZihCb3JkZXJSb3V0ZXJFbnRyeSkpOworICAgICAgICBhUHJlZml4LlNldFN1YlRsdnNMZW5ndGgoYVByZWZpeC5HZXRTdWJUbHZzTGVuZ3RoKCkgLSBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKyAgICAgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihlbnRyeSksIHNpemVvZigqZW50cnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTGVhZGVyOjpSZW1vdmVDb250ZXh0KHVpbnQ4X3QgYUNvbnRleHRJZCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZDsKKyAgICBQcmVmaXhUbHYgKnByZWZpeDsKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgZW5kID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworCisgICAgICAgIGlmIChjdXIgPj0gZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoY3VyLT5HZXRUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGF0YVRsdjo6a1R5cGVQcmVmaXg6CisgICAgICAgIHsKKyAgICAgICAgICAgIHByZWZpeCA9IHN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpOworICAgICAgICAgICAgUmVtb3ZlQ29udGV4dCgqcHJlZml4LCBhQ29udGV4dElkKTsKKworICAgICAgICAgICAgaWYgKHByZWZpeC0+R2V0U3ViVGx2c0xlbmd0aCgpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihwcmVmaXgpLCBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgcHJlZml4LT5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJyZW1vdmUgcHJlZml4IGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJyZW1vdmUgZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExlYWRlcjo6UmVtb3ZlQ29udGV4dChQcmVmaXhUbHYgJmFQcmVmaXgsIHVpbnQ4X3QgYUNvbnRleHRJZCkKK3sKKyAgICBOZXR3b3JrRGF0YVRsdiAqY3VyID0gYVByZWZpeC5HZXRTdWJUbHZzKCk7CisgICAgTmV0d29ya0RhdGFUbHYgKmVuZDsKKyAgICBDb250ZXh0VGx2ICpjb250ZXh0OworICAgIHVpbnQ4X3QgbGVuZ3RoOworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBlbmQgPSBhUHJlZml4LkdldE5leHQoKTsKKworICAgICAgICBpZiAoY3VyID49IGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlQ29udGV4dDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gcmVtb3ZlIGNvbnRleHQgdGx2CisgICAgICAgICAgICBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q29udGV4dFRsdiAqPihjdXIpOworCisgICAgICAgICAgICBpZiAoY29udGV4dC0+R2V0Q29udGV4dElkKCkgPT0gYUNvbnRleHRJZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgY29udGV4dC0+R2V0TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYVByZWZpeC5TZXRTdWJUbHZzTGVuZ3RoKGFQcmVmaXguR2V0U3ViVGx2c0xlbmd0aCgpIC0gbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGNvbnRleHQpLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpOworICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCit2b2lkIExlYWRlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgTGVhZGVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIGJvb2wgY29udGV4dHNXYWl0aW5nID0gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBrTnVtQ29udGV4dElkczsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1Db250ZXh0TGFzdFVzZWRbaV0gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKFRpbWVyOjpHZXROb3coKSAtIG1Db250ZXh0TGFzdFVzZWRbaV0pID49IFRpbWVyOjpTZWNUb01zZWMobUNvbnRleHRJZFJldXNlRGVsYXkpKQorICAgICAgICB7CisgICAgICAgICAgICBGcmVlQ29udGV4dChrTWluQ29udGV4dElkICsgaSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0c1dhaXRpbmcgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnRleHRzV2FpdGluZykKKyAgICB7CisgICAgICAgIG1UaW1lci5TdGFydChrU3RhdGVVcGRhdGVQZXJpb2QpOworICAgIH0KK30KKworTGVhZGVyICZMZWFkZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIExlYWRlciAmbGVhZGVyID0gKnN0YXRpY19jYXN0PExlYWRlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBMZWFkZXIgJmxlYWRlciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXROZXR3b3JrRGF0YUxlYWRlcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gbGVhZGVyOworfQorCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RhdGEKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfZnRkLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5ODQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbGVhZGVyX2Z0ZC5ocHAKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5pcHVsYXRpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYW5hZ2VkIGJ5IHRoZSBUaHJlYWQgTGVhZGVyLgorICovCisKKyNpZm5kZWYgTkVUV09SS19EQVRBX0xFQURFUl9GVERfSFBQXworI2RlZmluZSBORVRXT1JLX0RBVEFfTEVBREVSX0ZURF9IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0ZGludC5oIgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGltZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9yb3V0ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGEuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGRhdGEtbGVhZGVyCisgKgorICogQGJyaWVmCisgKiAgIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBtYW5pcHVsYXRpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YSBtYW5hZ2VkIGJ5IHRoZSBUaHJlYWQgTGVhZGVyLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhIG1haW50YWluZWQgYnkgdGhlIExlYWRlci4KKyAqCisgKi8KK2NsYXNzIExlYWRlcjogcHVibGljIExlYWRlckJhc2UKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGhyZWFkTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBMZWFkZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldCB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVzZXQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgdGhlIExlYWRlciBzZXJ2aWNlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU3RhcnQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgTGVhZGVyIHNlcnZpY2VzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSB2ZXJzaW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbmNyZW1lbnRWZXJzaW9uKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgVGhyZWFkIE5ldHdvcmsgRGF0YSBzdGFibGUgdmVyc2lvbi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50U3RhYmxlVmVyc2lvbih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgQ09OVEVYVF9JRF9SRVNVU0VfREVMQVkgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQ09OVEVYVF9JRF9SRVVTRV9ERUxBWSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldENvbnRleHRJZFJldXNlRGVsYXkodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIENPTlRFWFRfSURfUkVTVVNFX0RFTEFZIHZhbHVlLgorICAgICAqCisgICAgICogQHdhcm5pbmcgVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEZWxheSAgVGhlIENPTlRFWFRfSURfUkVVU0VfREVMQVkgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldENvbnRleHRJZFJldXNlRGVsYXkodWludDMyX3QgYURlbGF5KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgTmV0d29yayBEYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIEEgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVCb3JkZXJSb3V0ZXIodWludDE2X3QgYVJsb2MxNik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIFNlcnZlciBEYXRhIE5vdGlmaWNhdGlvbiBtZXNzYWdlIHRvIHRoZSBMZWFkZXIgaW5kaWNhdGluZyBhbiBpbnZhbGlkIFJMT0MxNi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBpbnZhbGlkIFJMT0MxNiB0byBub3RpZnkuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbnF1ZXVlZCB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgbWVzc2FnZSBidWZmZXJzIHRvIGdlbmVyYXRlIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZFNlcnZlckRhdGFOb3RpZmljYXRpb24odWludDE2X3QgYVJsb2MxNik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgSGFuZGxlU2VydmVyRGF0YSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZVNlcnZlckRhdGEoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisKKyAgICBvdEVycm9yIFJlZ2lzdGVyTmV0d29ya0RhdGEodWludDE2X3QgYVJsb2MxNiwgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYVRsdnNMZW5ndGgpOworCisgICAgb3RFcnJvciBBZGRIYXNSb3V0ZShQcmVmaXhUbHYgJmFQcmVmaXgsIEhhc1JvdXRlVGx2ICZhSGFzUm91dGUpOworICAgIG90RXJyb3IgQWRkQm9yZGVyUm91dGVyKFByZWZpeFRsdiAmYVByZWZpeCwgQm9yZGVyUm91dGVyVGx2ICZhQm9yZGVyUm91dGVyKTsKKyAgICBvdEVycm9yIEFkZE5ldHdvcmtEYXRhKHVpbnQ4X3QgKmFUbHYsIHVpbnQ4X3QgYVRsdkxlbmd0aCk7CisgICAgb3RFcnJvciBBZGRQcmVmaXgoUHJlZml4VGx2ICZhVGx2KTsKKworICAgIGludCBBbGxvY2F0ZUNvbnRleHQodm9pZCk7CisgICAgb3RFcnJvciBGcmVlQ29udGV4dCh1aW50OF90IGFDb250ZXh0SWQpOworCisgICAgb3RFcnJvciBSZW1vdmVDb250ZXh0KHVpbnQ4X3QgYUNvbnRleHRJZCk7CisgICAgb3RFcnJvciBSZW1vdmVDb250ZXh0KFByZWZpeFRsdiAmYVByZWZpeCwgdWludDhfdCBhQ29udGV4dElkKTsKKworICAgIG90RXJyb3IgUmVtb3ZlQ29tbWlzc2lvbmluZ0RhdGEodm9pZCk7CisKKyAgICBvdEVycm9yIFJlbW92ZVJsb2ModWludDE2X3QgYVJsb2MxNik7CisgICAgb3RFcnJvciBSZW1vdmVSbG9jKFByZWZpeFRsdiAmYVByZWZpeCwgdWludDE2X3QgYVJsb2MxNik7CisgICAgb3RFcnJvciBSZW1vdmVSbG9jKFByZWZpeFRsdiAmYVByZWZpeCwgSGFzUm91dGVUbHYgJmFIYXNSb3V0ZSwgdWludDE2X3QgYVJsb2MxNik7CisgICAgb3RFcnJvciBSZW1vdmVSbG9jKFByZWZpeFRsdiAmYVByZWZpeCwgQm9yZGVyUm91dGVyVGx2ICZhQm9yZGVyUm91dGVyLCB1aW50MTZfdCBhUmxvYzE2KTsKKworICAgIHZvaWQgUmxvY0xvb2t1cCh1aW50MTZfdCBhUmxvYzE2LCBib29sICZhSW4sIGJvb2wgJmFTdGFibGUsIHVpbnQ4X3QgKmFUbHZzLCB1aW50OF90IGFUbHZzTGVuZ3RoKTsKKyAgICBib29sIElzU3RhYmxlVXBkYXRlZCh1aW50MTZfdCBhUmxvYzE2LCB1aW50OF90ICphVGx2cywgdWludDhfdCBhVGx2c0xlbmd0aCwgdWludDhfdCAqYVRsdnNCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYVRsdnNCYXNlTGVuZ3RoKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUNvbW1pc3Npb25pbmdTZXQodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbyk7CisgICAgdm9pZCBIYW5kbGVDb21taXNzaW9uaW5nU2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVDb21taXNzaW9uaW5nR2V0KHZvaWQgKmFDb250ZXh0LCBvdENvYXBIZWFkZXIgKmFIZWFkZXIsIG90TWVzc2FnZSAqYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlQ29tbWlzc2lvbmluZ0dldChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8pOworCisgICAgdm9pZCBTZW5kQ29tbWlzc2lvbmluZ0dldFJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYVRsdnMsIHVpbnQ4X3QgYUxlbmd0aCk7CisgICAgdm9pZCBTZW5kQ29tbWlzc2lvbmluZ1NldFJlc3BvbnNlKGNvbnN0IENvYXA6OkhlYWRlciAmYVJlcXVlc3RIZWFkZXIsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzaENvUDo6U3RhdGVUbHY6OlN0YXRlIGFTdGF0ZSk7CisgICAgc3RhdGljIExlYWRlciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhyZWFkIFNwZWNpZmljYXRpb24gQ29uc3RhbnRzCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWluQ29udGV4dElkICAgICAgICA9IDEsICAgICAgICAgICAgIC8vLzwgTWluaW11bSBDb250ZXh0IElEICgwIGlzIHVzZWQgZm9yIE1lc2ggTG9jYWwpCisgICAgICAgIGtOdW1Db250ZXh0SWRzICAgICAgID0gMTUsICAgICAgICAgICAgLy8vPCBNYXhpbXVtIENvbnRleHQgSUQKKyAgICAgICAga0NvbnRleHRJZFJldXNlRGVsYXkgPSA0OCAqIDYwICogNjAsICAvLy88IENPTlRFWFRfSURfUkVVU0VfREVMQVkgKHNlY29uZHMpCisgICAgICAgIGtTdGF0ZVVwZGF0ZVBlcmlvZCAgID0gMTAwMCwgICAgICAgICAgLy8vPCBTdGF0ZSB1cGRhdGUgcGVyaW9kIGluIG1pbGxpc2Vjb25kcworICAgIH07CisgICAgdWludDE2X3QgbUNvbnRleHRVc2VkOworICAgIHVpbnQzMl90IG1Db250ZXh0TGFzdFVzZWRba051bUNvbnRleHRJZHNdOworICAgIHVpbnQzMl90IG1Db250ZXh0SWRSZXVzZURlbGF5OworICAgIFRpbWVyIG1UaW1lcjsKKworICAgIENvYXA6OlJlc291cmNlICBtU2VydmVyRGF0YTsKKworICAgIENvYXA6OlJlc291cmNlIG1Db21taXNzaW9uaW5nRGF0YUdldDsKKyAgICBDb2FwOjpSZXNvdXJjZSBtQ29tbWlzc2lvbmluZ0RhdGFTZXQ7Cit9OworCisvKioKKyAqIEB9CisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRXT1JLX0RBVEFfTEVBREVSX0ZURF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xlYWRlcl9tdGQuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfbXRkLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODM2OTc4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sZWFkZXJfbXRkLmhwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIFRocmVhZCBOZXR3b3JrIERhdGEgbWFuYWdlZCBieSB0aGUgVGhyZWFkIExlYWRlci4KKyAqLworCisjaWZuZGVmIE5FVFdPUktfREFUQV9MRUFERVJfTVREX0hQUF8KKyNkZWZpbmUgTkVUV09SS19EQVRBX0xFQURFUl9NVERfSFBQXworCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKK2NsYXNzIExlYWRlcjogcHVibGljIExlYWRlckJhc2UKK3sKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMZWFkZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOiBMZWFkZXJCYXNlKGFUaHJlYWROZXRpZikgeyB9CisKKyAgICB2b2lkIFN0YXJ0KHZvaWQpIHsgfQorICAgIHZvaWQgU3RvcCh2b2lkKSB7IH0KKworICAgIHZvaWQgSW5jcmVtZW50VmVyc2lvbih2b2lkKSB7IH0KKyAgICB2b2lkIEluY3JlbWVudFN0YWJsZVZlcnNpb24odm9pZCkgeyB9CisKKyAgICBvdEVycm9yIFNlbmRTZXJ2ZXJEYXRhTm90aWZpY2F0aW9uKHVpbnQxNl90KSB7IHJldHVybiBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ7IH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGF0YQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUV09SS19EQVRBX0xFQURFUl9NVERfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5jcHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xvY2FsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWM2NDBmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5jcHAKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGxvY2FsIFRocmVhZCBOZXR3b3JrIERhdGEuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuZXR3b3JrX2RhdGFfbG9jYWwuaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworTG9jYWw6OkxvY2FsKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpOgorICAgIE5ldHdvcmtEYXRhKGFUaHJlYWROZXRpZiwgdHJ1ZSksCisgICAgbU9sZFJsb2MoTWFjOjprU2hvcnRBZGRySW52YWxpZCkKK3sKK30KKworb3RFcnJvciBMb2NhbDo6QWRkT25NZXNoUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCwgaW50OF90IGFQcmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhRmxhZ3MsIGJvb2wgYVN0YWJsZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBQcmVmaXhUbHYgKnByZWZpeFRsdjsKKyAgICBCb3JkZXJSb3V0ZXJUbHYgKmJyVGx2OworCisgICAgVmVyaWZ5T3JFeGl0KElwNjo6QWRkcmVzczo6UHJlZml4TWF0Y2goYVByZWZpeCwgR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRNZXNoTG9jYWxQcmVmaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVByZWZpeExlbmd0aCArIDcpIC8gOCkgPCBJcDY6OkFkZHJlc3M6OmtNZXNoTG9jYWxQcmVmaXhMZW5ndGgsCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIFJlbW92ZU9uTWVzaFByZWZpeChhUHJlZml4LCBhUHJlZml4TGVuZ3RoKTsKKworICAgIHByZWZpeFRsdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJlZml4VGx2ICo+KG1UbHZzICsgbUxlbmd0aCk7CisgICAgSW5zZXJ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihwcmVmaXhUbHYpLAorICAgICAgICAgICBzaXplb2YoUHJlZml4VGx2KSArIEJpdFZlY3RvckJ5dGVzKGFQcmVmaXhMZW5ndGgpICsgc2l6ZW9mKEJvcmRlclJvdXRlclRsdikgKyBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpKTsKKyAgICBwcmVmaXhUbHYtPkluaXQoMCwgYVByZWZpeExlbmd0aCwgYVByZWZpeCk7CisgICAgcHJlZml4VGx2LT5TZXRTdWJUbHZzTGVuZ3RoKHNpemVvZihCb3JkZXJSb3V0ZXJUbHYpICsgc2l6ZW9mKEJvcmRlclJvdXRlckVudHJ5KSk7CisKKyAgICBiclRsdiA9IHN0YXRpY19jYXN0PEJvcmRlclJvdXRlclRsdiAqPihwcmVmaXhUbHYtPkdldFN1YlRsdnMoKSk7CisgICAgYnJUbHYtPkluaXQoKTsKKyAgICBiclRsdi0+U2V0TGVuZ3RoKGJyVGx2LT5HZXRMZW5ndGgoKSArIHNpemVvZihCb3JkZXJSb3V0ZXJFbnRyeSkpOworICAgIGJyVGx2LT5HZXRFbnRyeSgwKS0+SW5pdCgpOworICAgIGJyVGx2LT5HZXRFbnRyeSgwKS0+U2V0UHJlZmVyZW5jZShhUHJmKTsKKyAgICBiclRsdi0+R2V0RW50cnkoMCktPlNldEZsYWdzKGFGbGFncyk7CisKKyAgICBpZiAoYVN0YWJsZSkKKyAgICB7CisgICAgICAgIHByZWZpeFRsdi0+U2V0U3RhYmxlKCk7CisgICAgICAgIGJyVGx2LT5TZXRTdGFibGUoKTsKKyAgICB9CisKKyAgICBDbGVhclJlc3VibWl0RGVsYXlUaW1lcigpOworCisgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgImFkZCBwcmVmaXggZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTG9jYWw6OlJlbW92ZU9uTWVzaFByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgUHJlZml4VGx2ICp0bHY7CisKKyAgICBWZXJpZnlPckV4aXQoKHRsdiA9IEZpbmRQcmVmaXgoYVByZWZpeCwgYVByZWZpeExlbmd0aCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBWZXJpZnlPckV4aXQoRmluZEJvcmRlclJvdXRlcigqdGx2KSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisgICAgUmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0bHYpLCBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgdGx2LT5HZXRMZW5ndGgoKSk7CisgICAgQ2xlYXJSZXN1Ym1pdERlbGF5VGltZXIoKTsKKworZXhpdDoKKyAgICBvdER1bXBEZWJnTmV0RGF0YShHZXRJbnN0YW5jZSgpLCAicmVtb3ZlIGRvbmUiLCBtVGx2cywgbUxlbmd0aCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIExvY2FsOjpBZGRIYXNSb3V0ZVByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgsIGludDhfdCBhUHJmLCBib29sIGFTdGFibGUpCit7CisgICAgUHJlZml4VGx2ICpwcmVmaXhUbHY7CisgICAgSGFzUm91dGVUbHYgKmhhc1JvdXRlVGx2OworCisgICAgUmVtb3ZlSGFzUm91dGVQcmVmaXgoYVByZWZpeCwgYVByZWZpeExlbmd0aCk7CisKKyAgICBwcmVmaXhUbHYgPSByZWludGVycHJldF9jYXN0PFByZWZpeFRsdiAqPihtVGx2cyArIG1MZW5ndGgpOworICAgIEluc2VydChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4ocHJlZml4VGx2KSwKKyAgICAgICAgICAgc2l6ZW9mKFByZWZpeFRsdikgKyBCaXRWZWN0b3JCeXRlcyhhUHJlZml4TGVuZ3RoKSArIHNpemVvZihIYXNSb3V0ZVRsdikgKyBzaXplb2YoSGFzUm91dGVFbnRyeSkpOworICAgIHByZWZpeFRsdi0+SW5pdCgwLCBhUHJlZml4TGVuZ3RoLCBhUHJlZml4KTsKKyAgICBwcmVmaXhUbHYtPlNldFN1YlRsdnNMZW5ndGgoc2l6ZW9mKEhhc1JvdXRlVGx2KSArIHNpemVvZihIYXNSb3V0ZUVudHJ5KSk7CisKKyAgICBoYXNSb3V0ZVRsdiA9IHN0YXRpY19jYXN0PEhhc1JvdXRlVGx2ICo+KHByZWZpeFRsdi0+R2V0U3ViVGx2cygpKTsKKyAgICBoYXNSb3V0ZVRsdi0+SW5pdCgpOworICAgIGhhc1JvdXRlVGx2LT5TZXRMZW5ndGgoaGFzUm91dGVUbHYtPkdldExlbmd0aCgpICsgc2l6ZW9mKEhhc1JvdXRlRW50cnkpKTsKKyAgICBoYXNSb3V0ZVRsdi0+R2V0RW50cnkoMCktPkluaXQoKTsKKyAgICBoYXNSb3V0ZVRsdi0+R2V0RW50cnkoMCktPlNldFByZWZlcmVuY2UoYVByZik7CisKKyAgICBpZiAoYVN0YWJsZSkKKyAgICB7CisgICAgICAgIHByZWZpeFRsdi0+U2V0U3RhYmxlKCk7CisgICAgICAgIGhhc1JvdXRlVGx2LT5TZXRTdGFibGUoKTsKKyAgICB9CisKKyAgICBDbGVhclJlc3VibWl0RGVsYXlUaW1lcigpOworCisgICAgb3REdW1wRGViZ05ldERhdGEoR2V0SW5zdGFuY2UoKSwgImFkZCByb3V0ZSBkb25lIiwgbVRsdnMsIG1MZW5ndGgpOworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExvY2FsOjpSZW1vdmVIYXNSb3V0ZVByZWZpeChjb25zdCB1aW50OF90ICphUHJlZml4LCB1aW50OF90IGFQcmVmaXhMZW5ndGgpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgUHJlZml4VGx2ICp0bHY7CisKKyAgICBWZXJpZnlPckV4aXQoKHRsdiA9IEZpbmRQcmVmaXgoYVByZWZpeCwgYVByZWZpeExlbmd0aCkpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBWZXJpZnlPckV4aXQoRmluZEhhc1JvdXRlKCp0bHYpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBSZW1vdmUocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRsdiksIHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyB0bHYtPkdldExlbmd0aCgpKTsKKyAgICBDbGVhclJlc3VibWl0RGVsYXlUaW1lcigpOworCitleGl0OgorICAgIG90RHVtcERlYmdOZXREYXRhKEdldEluc3RhbmNlKCksICJyZW1vdmUgZG9uZSIsIG1UbHZzLCBtTGVuZ3RoKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTG9jYWw6OlVwZGF0ZVJsb2Modm9pZCkKK3sKKyAgICBmb3IgKE5ldHdvcmtEYXRhVGx2ICpjdXIgPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KG1UbHZzKTsKKyAgICAgICAgIGN1ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8TmV0d29ya0RhdGFUbHYgKj4obVRsdnMgKyBtTGVuZ3RoKTsKKyAgICAgICAgIGN1ciA9IGN1ci0+R2V0TmV4dCgpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjdXItPkdldFR5cGUoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEYXRhVGx2OjprVHlwZVByZWZpeDoKKyAgICAgICAgICAgIFVwZGF0ZVJsb2MoKnN0YXRpY19jYXN0PFByZWZpeFRsdiAqPihjdXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDbGVhclJlc3VibWl0RGVsYXlUaW1lcigpOworCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTG9jYWw6OlVwZGF0ZVJsb2MoUHJlZml4VGx2ICZhUHJlZml4KQoreworICAgIGZvciAoTmV0d29ya0RhdGFUbHYgKmN1ciA9IGFQcmVmaXguR2V0U3ViVGx2cygpOyBjdXIgPCBhUHJlZml4LkdldE5leHQoKTsgY3VyID0gY3VyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1ci0+R2V0VHlwZSgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlSGFzUm91dGU6CisgICAgICAgICAgICBVcGRhdGVSbG9jKCpzdGF0aWNfY2FzdDxIYXNSb3V0ZVRsdiAqPihjdXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTmV0d29ya0RhdGFUbHY6OmtUeXBlQm9yZGVyUm91dGVyOgorICAgICAgICAgICAgVXBkYXRlUmxvYygqc3RhdGljX2Nhc3Q8Qm9yZGVyUm91dGVyVGx2ICo+KGN1cikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIExvY2FsOjpVcGRhdGVSbG9jKEhhc1JvdXRlVGx2ICZhSGFzUm91dGUpCit7CisgICAgSGFzUm91dGVFbnRyeSAqZW50cnkgPSBhSGFzUm91dGUuR2V0RW50cnkoMCk7CisgICAgZW50cnktPlNldFJsb2MoR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRSbG9jMTYoKSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgTG9jYWw6OlVwZGF0ZVJsb2MoQm9yZGVyUm91dGVyVGx2ICZhQm9yZGVyUm91dGVyKQoreworICAgIEJvcmRlclJvdXRlckVudHJ5ICplbnRyeSA9IGFCb3JkZXJSb3V0ZXIuR2V0RW50cnkoMCk7CisgICAgZW50cnktPlNldFJsb2MoR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRSbG9jMTYoKSk7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK2Jvb2wgTG9jYWw6OklzT25NZXNoUHJlZml4Q29uc2lzdGVudCh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICByZXR1cm4gKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuQ29udGFpbnNPbk1lc2hQcmVmaXhlcygqdGhpcywgbmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkpICYmCisgICAgICAgICAgICBDb250YWluc09uTWVzaFByZWZpeGVzKG5ldGlmLkdldE5ldHdvcmtEYXRhTGVhZGVyKCksIG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpKSk7Cit9CisKK2Jvb2wgTG9jYWw6OklzRXh0ZXJuYWxSb3V0ZUNvbnNpc3RlbnQodm9pZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworCisgICAgcmV0dXJuIChuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLkNvbnRhaW5zRXh0ZXJuYWxSb3V0ZXMoKnRoaXMsIG5ldGlmLkdldE1sZSgpLkdldFJsb2MxNigpKSAmJgorICAgICAgICAgICAgQ29udGFpbnNFeHRlcm5hbFJvdXRlcyhuZXRpZi5HZXROZXR3b3JrRGF0YUxlYWRlcigpLCBuZXRpZi5HZXRNbGUoKS5HZXRSbG9jMTYoKSkpOworfQorCitvdEVycm9yIExvY2FsOjpTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgTWxlOjpNbGVSb3V0ZXIgJm1sZSA9IG5ldGlmLkdldE1sZSgpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IHJsb2MgPSBtbGUuR2V0UmxvYzE2KCk7CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCisgICAgLy8gRG9uJ3Qgc2VuZCB0aGlzIFNlcnZlciBEYXRhIE5vdGlmaWNhdGlvbiBpZiB0aGUgZGV2aWNlIGlzIGdvaW5nIHRvIHVwZ3JhZGUgdG8gUm91dGVyCisgICAgaWYgKChtbGUuR2V0RGV2aWNlTW9kZSgpICYgTWxlOjpNb2RlVGx2OjprTW9kZUZGRCkgIT0gMCAmJgorICAgICAgICAobWxlLklzUm91dGVyUm9sZUVuYWJsZWQoKSkgJiYKKyAgICAgICAgKG1sZS5HZXRSb2xlKCkgPCBPVF9ERVZJQ0VfUk9MRV9ST1VURVIpICYmCisgICAgICAgIChtbGUuR2V0QWN0aXZlUm91dGVyQ291bnQoKSA8IG1sZS5HZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKCkpKQorICAgIHsKKyAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIH0KKworI2VuZGlmCisKKyAgICBVcGRhdGVSbG9jKCk7CisKKyAgICBWZXJpZnlPckV4aXQoIUlzT25NZXNoUHJlZml4Q29uc2lzdGVudCgpIHx8ICFJc0V4dGVybmFsUm91dGVDb25zaXN0ZW50KCksIENsZWFyUmVzdWJtaXREZWxheVRpbWVyKCkpOworCisgICAgaWYgKG1PbGRSbG9jID09IHJsb2MpCisgICAgeworICAgICAgICBtT2xkUmxvYyA9IE1hYzo6a1Nob3J0QWRkckludmFsaWQ7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE5ldHdvcmtEYXRhOjpTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbihtT2xkUmxvYykpOworICAgIG1PbGRSbG9jID0gcmxvYzsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGF0YQorfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xvY2FsLmhwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RhdGFfbG9jYWwuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYmI0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX2xvY2FsLmhwcApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBsb2NhbCBUaHJlYWQgTmV0d29yayBEYXRhLgorICovCisKKyNpZm5kZWYgTkVUV09SS19EQVRBX0xPQ0FMX0hQUF8KKyNkZWZpbmUgTkVUV09SS19EQVRBX0xPQ0FMX0hQUF8KKworI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RhdGEuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBUaHJlYWROZXRpZjsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLW5ldGRhdGEtbG9jYWwKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBsb2NhbCBUaHJlYWQgTmV0d29yayBEYXRhLgorICoKKyAqIEB7CisgKi8KKworbmFtZXNwYWNlIE5ldHdvcmtEYXRhIHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFRocmVhZCBOZXR3b3JrIERhdGEgY29udHJpYnV0ZWQgYnkgdGhlIGxvY2FsIGRldmljZS4KKyAqCisgKi8KK2NsYXNzIExvY2FsOiBwdWJsaWMgTmV0d29ya0RhdGEKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBsb2NhbCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTmV0aWYgIEEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBMb2NhbChUaHJlYWROZXRpZiAmYU5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBCb3JkZXIgUm91dGVyIGVudHJ5IHRvIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeExlbmd0aCAgVGhlIGxlbmd0aCBvZiBAcCBhUHJlZml4IGluIGJ5dGVzLgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmYgICAgICAgICAgIFRoZSBwcmVmZXJlbmNlIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFGbGFncyAgICAgICAgIFRoZSBCb3JkZXIgUm91dGVyIEZsYWdzIHZhbHVlLgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGFibGUgICAgICAgIFRoZSBTdGFibGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIEJvcmRlciBSb3V0ZXIgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICAgICAgSW5zdWZmaWNpZW50IHNwYWNlIHRvIGFkZCB0aGUgQm9yZGVyIFJvdXRlciBlbnRyeS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyBUaGUgcHJlZml4IGlzIG1lc2ggbG9jYWwgcHJlZml4LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBBZGRPbk1lc2hQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoLCBpbnQ4X3QgYVByZiwgdWludDhfdCBhRmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU3RhYmxlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYSBCb3JkZXIgUm91dGVyIGVudHJ5IGZyb20gdGhlIFRocmVhZCBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4TGVuZ3RoICBUaGUgbGVuZ3RoIG9mIEBwIGFQcmVmaXggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIEJvcmRlciBSb3V0ZXIgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBCb3JkZXIgUm91dGVyIGVudHJ5LgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBSZW1vdmVPbk1lc2hQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBIYXMgUm91dGUgZW50cnkgdG8gdGhlIFRocmVhZCBOZXR3b3JrIGRhdGEuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHByZWZpeC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4TGVuZ3RoICBUaGUgbGVuZ3RoIG9mIEBwIGFQcmVmaXggaW4gYnl0ZXMuCisgICAgICogQHBhcmFtW2luXSAgYVByZiAgICAgICAgICAgVGhlIHByZWZlcmVuY2UgdmFsdWUuCisgICAgICogQHBhcmFtW2luXSAgYVN0YWJsZSAgICAgICAgVGhlIFN0YWJsZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBIYXMgUm91dGUgZW50cnkuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgc3BhY2UgdG8gYWRkIHRoZSBIYXMgUm91dGUgZW50cnkuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZEhhc1JvdXRlUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgsIHVpbnQ4X3QgYVByZWZpeExlbmd0aCwgaW50OF90IGFQcmYsIGJvb2wgYVN0YWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGEgQm9yZGVyIFJvdXRlciBlbnRyeSBmcm9tIHRoZSBUaHJlYWQgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeCAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwcmVmaXguCisgICAgICogQHBhcmFtW2luXSAgYVByZWZpeExlbmd0aCAgVGhlIGxlbmd0aCBvZiBAcCBhUHJlZml4IGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBCb3JkZXIgUm91dGVyIGVudHJ5LgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgQm9yZGVyIFJvdXRlciBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgUmVtb3ZlSGFzUm91dGVQcmVmaXgoY29uc3QgdWludDhfdCAqYVByZWZpeCwgdWludDhfdCBhUHJlZml4TGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgU2VydmVyIERhdGEgTm90aWZpY2F0aW9uIG1lc3NhZ2UgdG8gdGhlIExlYWRlci4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGVucXVldWVkIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBtZXNzYWdlIGJ1ZmZlcnMgdG8gZ2VuZXJhdGUgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kU2VydmVyRGF0YU5vdGlmaWNhdGlvbih2b2lkKTsKKworcHJpdmF0ZToKKyAgICBvdEVycm9yIFVwZGF0ZVJsb2Modm9pZCk7CisgICAgb3RFcnJvciBVcGRhdGVSbG9jKFByZWZpeFRsdiAmYVByZWZpeCk7CisgICAgb3RFcnJvciBVcGRhdGVSbG9jKEhhc1JvdXRlVGx2ICZhSGFzUm91dGUpOworICAgIG90RXJyb3IgVXBkYXRlUmxvYyhCb3JkZXJSb3V0ZXJUbHYgJmFCb3JkZXJSb3V0ZXIpOworCisgICAgYm9vbCBJc09uTWVzaFByZWZpeENvbnNpc3RlbnQodm9pZCk7CisgICAgYm9vbCBJc0V4dGVybmFsUm91dGVDb25zaXN0ZW50KHZvaWQpOworCisgICAgdWludDE2X3QgbU9sZFJsb2M7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgTmV0d29ya0RhdGEKKworLyoqCisgKiBAfQorICovCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVFdPUktfREFUQV9MT0NBTF9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kYXRhX3RsdnMuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV90bHZzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM5ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGF0YV90bHZzLmhwcApAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YSBUTFZzLgorICovCisKKyNpZm5kZWYgTkVUV09SS19EQVRBX1RMVlNfSFBQXworI2RlZmluZSBORVRXT1JLX0RBVEFfVExWU19IUFBfCisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBOZXR3b3JrRGF0YSB7CisKKy8qKgorICogQGFkZHRvZ3JvdXAgY29yZS1uZXRkYXRhLXRsdnMKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgVGhyZWFkIE5ldHdvcmsgRGF0YSBUTFZzLgorICoKKyAqIEB7CisgKgorICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFRocmVhZCBOZXR3b3JrIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTmV0d29ya0RhdGFUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBtVHlwZSA9IDA7IG1MZW5ndGggPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaHJlYWQgTmV0d29yayBEYXRhIFR5cGUgdmFsdWVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBUeXBlCisgICAgeworICAgICAgICBrVHlwZUhhc1JvdXRlICAgICAgICAgID0gMCwgIC8vLzwgSGFzIFJvdXRlIFRMVgorICAgICAgICBrVHlwZVByZWZpeCAgICAgICAgICAgID0gMSwgIC8vLzwgUHJlZml4IFRMVgorICAgICAgICBrVHlwZUJvcmRlclJvdXRlciAgICAgID0gMiwgIC8vLzwgQm9yZGVyIFJvdXRlciBUTFYKKyAgICAgICAga1R5cGVDb250ZXh0ICAgICAgICAgICA9IDMsICAvLy88IENvbnRleHQgVExWCisgICAgICAgIGtUeXBlQ29tbWlzc2lvbmluZ0RhdGEgPSA0LCAgLy8vPCBDb21taXNzaW9uaW5nIERhdGFzZXQgVExWCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFR5cGUgR2V0VHlwZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtVHlwZSA+PiBrVHlwZU9mZnNldCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeworICAgICAgICBtVHlwZSA9IChtVHlwZSAmIH5rVHlwZU1hc2spIHwgKChhVHlwZSA8PCBrVHlwZU9mZnNldCkgJiBrVHlwZU1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZW5ndGggdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGVuZ3RoICBUaGUgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZW5ndGgodWludDhfdCBhTGVuZ3RoKSB7IG1MZW5ndGggPSBhTGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0VmFsdWUodm9pZCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KHRoaXMpICsgc2l6ZW9mKE5ldHdvcmtEYXRhVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgTmV0d29yayBEYXRhIFRMVi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgbmV4dCBOZXR3b3JrIERhdGEgVExWLgorICAgICAqCisgICAgICovCisgICAgTmV0d29ya0RhdGFUbHYgKkdldE5leHQodm9pZCkgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrRGF0YVRsdiAqPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4odGhpcykgKyBzaXplb2YoKnRoaXMpICsgbUxlbmd0aCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBTdGFibGUgYml0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclN0YWJsZSh2b2lkKSB7IG1UeXBlICY9IH5rU3RhYmxlTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBTdGFibGUgYml0IGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBTdGFibGUgYml0IGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgU3RhYmxlIGJpdCBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N0YWJsZSh2b2lkKSBjb25zdCB7IHJldHVybiAobVR5cGUgJiBrU3RhYmxlTWFzayk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN0YWJsZSBiaXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFN0YWJsZSh2b2lkKSB7IG1UeXBlIHw9IGtTdGFibGVNYXNrOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga1R5cGVPZmZzZXQgPSAxLAorICAgICAgICBrVHlwZU1hc2sgPSAweDdmIDw8IGtUeXBlT2Zmc2V0LAorICAgICAgICBrU3RhYmxlTWFzayA9IDEgPDwgMCwKKyAgICB9OworICAgIHVpbnQ4X3QgbVR5cGU7CisgICAgdWludDhfdCBtTGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEhhcyBSb3V0ZSBUTFYgZW50cnkgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBIYXNSb3V0ZUVudHJ5Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFJsb2MoTWFjOjprU2hvcnRBZGRySW52YWxpZCk7IG1GbGFncyA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1SbG9jKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmxvYyh1aW50MTZfdCBhUmxvYzE2KSB7IG1SbG9jID0gSG9zdFN3YXAxNihhUmxvYzE2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBwcmVmZXJlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgaW50OF90IEdldFByZWZlcmVuY2Uodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90PihtRmxhZ3MpID4+IGtQcmVmZXJlbmNlT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQcmVmZXJlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVByZiAgVGhlIFByZWZlcmVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFByZWZlcmVuY2UoaW50OF90IGFQcmYpIHsKKyAgICAgICAgbUZsYWdzID0gKG1GbGFncyAmIH5rUHJlZmVyZW5jZU1hc2spIHwgKChhUHJmIDw8IGtQcmVmZXJlbmNlT2Zmc2V0KSAmIGtQcmVmZXJlbmNlTWFzayk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtQcmVmZXJlbmNlT2Zmc2V0ID0gNiwKKyAgICAgICAga1ByZWZlcmVuY2VNYXNrID0gMyA8PCBrUHJlZmVyZW5jZU9mZnNldCwKKyAgICB9OworCisgICAgdWludDE2X3QgbVJsb2M7CisgICAgdWludDhfdCBtRmxhZ3M7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSGFzIFJvdXRlIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEhhc1JvdXRlVGx2OiBwdWJsaWMgTmV0d29ya0RhdGFUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgTmV0d29ya0RhdGFUbHY6OkluaXQoKTsgU2V0VHlwZShrVHlwZUhhc1JvdXRlKTsgU2V0TGVuZ3RoKDApOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgSGFzUm91dGUgZW50cmllcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgSGFzUm91dGUgZW50cmllcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TnVtRW50cmllcyh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSAvIHNpemVvZihIYXNSb3V0ZUVudHJ5KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGkndGggSGFzUm91dGUgZW50cnkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBpICBBbiBpbmRleC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgaSd0aCBIYXNSb3V0ZSBlbnRyeS4KKyAgICAgKgorICAgICAqLworICAgIEhhc1JvdXRlRW50cnkgKkdldEVudHJ5KHVpbnQ4X3QgaSkgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIYXNSb3V0ZUVudHJ5ICo+KEdldFZhbHVlKCkgKyAoaSAqIHNpemVvZihIYXNSb3V0ZUVudHJ5KSkpOworICAgIH0KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBQcmVmaXggVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgUHJlZml4VGx2OiBwdWJsaWMgTmV0d29ya0RhdGFUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURvbWFpbklkICAgICAgVGhlIERvbWFpbiBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhUHJlZml4TGVuZ3RoICBUaGUgUHJlZml4IExlbmd0aAorICAgICAqIEBwYXJhbVtpbl0gIGFQcmVmaXggICAgICAgIEEgcG9pbnRlciB0byB0aGUgcHJlZml4LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHVpbnQ4X3QgYURvbWFpbklkLCB1aW50OF90IGFQcmVmaXhMZW5ndGgsIGNvbnN0IHVpbnQ4X3QgKmFQcmVmaXgpIHsKKyAgICAgICAgTmV0d29ya0RhdGFUbHY6OkluaXQoKTsKKyAgICAgICAgU2V0VHlwZShrVHlwZVByZWZpeCk7CisgICAgICAgIG1Eb21haW5JZCA9IGFEb21haW5JZDsKKyAgICAgICAgbVByZWZpeExlbmd0aCA9IGFQcmVmaXhMZW5ndGg7CisgICAgICAgIG1lbWNweShHZXRQcmVmaXgoKSwgYVByZWZpeCwgQml0VmVjdG9yQnl0ZXMoYVByZWZpeExlbmd0aCkpOworICAgICAgICBTZXRTdWJUbHZzTGVuZ3RoKDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERvbWFpbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBEb21haW4gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldERvbWFpbklkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Eb21haW5JZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUHJlZml4IExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQcmVmaXggTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRQcmVmaXhMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gbVByZWZpeExlbmd0aDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFByZWZpeC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgUHJlZml4LgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCAqR2V0UHJlZml4KHZvaWQpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPih0aGlzKSArIHNpemVvZigqdGhpcyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBTdWItVExWcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcG9pbnRlciB0byB0aGUgU3ViLVRMVnMuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXR3b3JrRGF0YVRsdiAqR2V0U3ViVGx2cyh2b2lkKSB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE5ldHdvcmtEYXRhVGx2ICo+KEdldFByZWZpeCgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0VmVjdG9yQnl0ZXMobVByZWZpeExlbmd0aCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFN1Yi1UTFZzIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdWItVExWcyBsZW5ndGggaW4gYnl0ZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFN1YlRsdnNMZW5ndGgodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gR2V0TGVuZ3RoKCkgLSAoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGF0YVRsdikgKyBCaXRWZWN0b3JCeXRlcyhtUHJlZml4TGVuZ3RoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU3ViLVRMVnMgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUxlbmd0aCAgVGhlIFN1Yi1UTFZzIGxlbmd0aCBpbiBieXRlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3ViVGx2c0xlbmd0aCh1aW50OF90IGFMZW5ndGgpIHsKKyAgICAgICAgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RhdGFUbHYpICsgQml0VmVjdG9yQnl0ZXMobVByZWZpeExlbmd0aCkgKyBhTGVuZ3RoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtRG9tYWluSWQ7CisgICAgdWludDhfdCBtUHJlZml4TGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEJvcmRlciBSb3V0ZXIgRW50cnkgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBCb3JkZXJSb3V0ZXJFbnRyeQoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtQcmVmZXJlbmNlT2Zmc2V0ID0gNiwKKyAgICAgICAga1ByZWZlcmVuY2VNYXNrID0gMyA8PCBrUHJlZmVyZW5jZU9mZnNldCwKKyAgICAgICAga1ByZWZlcnJlZEZsYWcgPSAxIDw8IDUsCisgICAgICAgIGtTbGFhY0ZsYWcgPSAxIDw8IDQsCisgICAgICAgIGtEaGNwRmxhZyA9IDEgPDwgMywKKyAgICAgICAga0NvbmZpZ3VyZUZsYWcgPSAxIDw8IDIsCisgICAgICAgIGtEZWZhdWx0Um91dGVGbGFnID0gMSA8PCAxLAorICAgICAgICBrT25NZXNoRmxhZyA9IDEgPDwgMCwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFJsb2MoTWFjOjprU2hvcnRBZGRySW52YWxpZCk7IG1GbGFncyA9IDA7IG1SZXNlcnZlZCA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1SbG9jKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmxvYyh1aW50MTZfdCBhUmxvYzE2KSB7IG1SbG9jID0gSG9zdFN3YXAxNihhUmxvYzE2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRmxhZ3MgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBGbGFncyBieXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRGbGFncyh2b2lkKSBjb25zdCB7IHJldHVybiBtRmxhZ3MgJiB+a1ByZWZlcmVuY2VNYXNrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBGbGFncyBieXRlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZsYWdzICBUaGUgRmxhZ3MgYnl0ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RmxhZ3ModWludDhfdCBhRmxhZ3MpIHsgbUZsYWdzID0gKG1GbGFncyAmIGtQcmVmZXJlbmNlTWFzaykgfCAoYUZsYWdzICYgfmtQcmVmZXJlbmNlTWFzayk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFByZWZlcmVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB0aGUgUHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRQcmVmZXJlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludDhfdD4obUZsYWdzKSA+PiBrUHJlZmVyZW5jZU9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUHJlZmVyZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQcmYgIFRoZSBQcmVmZXJlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmZXJlbmNlKGludDhfdCBhUHJmKSB7CisgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a1ByZWZlcmVuY2VNYXNrKSB8ICgoYVByZiA8PCBrUHJlZmVyZW5jZU9mZnNldCkgJiBrUHJlZmVyZW5jZU1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgUHJlZmVycmVkIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFByZWZlcnJlZCBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgUHJlZmVycmVkIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNQcmVmZXJyZWQodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtQcmVmZXJyZWRGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIFByZWZlcnJlZCBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclByZWZlcnJlZCh2b2lkKSB7IG1GbGFncyAmPSB+a1ByZWZlcnJlZEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFByZWZlcnJlZCBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQcmVmZXJyZWQodm9pZCkgeyBtRmxhZ3MgfD0ga1ByZWZlcnJlZEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgU0xBQUMgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgU0xBQUMgZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFNMQUFDIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNTbGFhYyh2b2lkKSBjb25zdCB7IHJldHVybiAobUZsYWdzICYga1NsYWFjRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBTTEFBQyBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhclNsYWFjKHZvaWQpIHsgbUZsYWdzICY9IH5rU2xhYWNGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTTEFBQyBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTbGFhYyh2b2lkKSB7IG1GbGFncyB8PSBrU2xhYWNGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIERIQ1AgZmxhZyBpcyBzZXQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgREhDUCBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgREhDUCBmbGFnIGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRGhjcCh2b2lkKSBjb25zdCB7IHJldHVybiAobUZsYWdzICYga0RoY3BGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIERIQ1AgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJEaGNwKHZvaWQpIHsgbUZsYWdzICY9IH5rRGhjcEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIERIQ1AgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RGhjcCh2b2lkKSB7IG1GbGFncyB8PSBrRGhjcEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgQ29uZmlndXJlIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIENvbmZpZ3VyZSBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgQ29uZmlndXJlIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNDb25maWd1cmUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtDb25maWd1cmVGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIENvbmZpZ3VyZSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckNvbmZpZ3VyZSh2b2lkKSB7IG1GbGFncyAmPSB+a0NvbmZpZ3VyZUZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENvbmZpZ3VyZSBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb25maWd1cmUodm9pZCkgeyBtRmxhZ3MgfD0ga0NvbmZpZ3VyZUZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgRGVmYXVsdCBSb3V0ZSBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBEZWZhdWx0IFJvdXRlIGZsYWcgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBEZWZhdWx0IFJvdXRlIGZsYWcgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNEZWZhdWx0Um91dGUodm9pZCkgY29uc3QgeyByZXR1cm4gKG1GbGFncyAmIGtEZWZhdWx0Um91dGVGbGFnKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIERlZmF1bHQgUm91dGUgZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJEZWZhdWx0Um91dGUodm9pZCkgeyBtRmxhZ3MgJj0gfmtEZWZhdWx0Um91dGVGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBEZWZhdWx0IFJvdXRlIGZsYWcuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERlZmF1bHRSb3V0ZSh2b2lkKSB7IG1GbGFncyB8PSBrRGVmYXVsdFJvdXRlRmxhZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBPbi1NZXNoIGZsYWcgaXMgc2V0LgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIE9uLU1lc2ggZmxhZyBpcyBzZXQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIE9uLU1lc2ggZmxhZyBpcyBub3Qgc2V0LgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc09uTWVzaCh2b2lkKSBjb25zdCB7IHJldHVybiAobUZsYWdzICYga09uTWVzaEZsYWcpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgT24tTWVzaCBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhck9uTWVzaCh2b2lkKSB7IG1GbGFncyAmPSB+a09uTWVzaEZsYWc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE9uLU1lc2ggZmxhZy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0T25NZXNoKHZvaWQpIHsgbUZsYWdzIHw9IGtPbk1lc2hGbGFnOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVJsb2M7CisgICAgdWludDhfdCBtRmxhZ3M7CisgICAgdWludDhfdCBtUmVzZXJ2ZWQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQm9yZGVyIFJvdXRlciBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBCb3JkZXJSb3V0ZXJUbHY6IHB1YmxpYyBOZXR3b3JrRGF0YVRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBOZXR3b3JrRGF0YVRsdjo6SW5pdCgpOyBTZXRUeXBlKGtUeXBlQm9yZGVyUm91dGVyKTsgU2V0TGVuZ3RoKDApOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgQm9yZGVyIFJvdXRlciBlbnRyaWVzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBCb3JkZXIgUm91dGVyIGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE51bUVudHJpZXModm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgLyBzaXplb2YoQm9yZGVyUm91dGVyRW50cnkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgaSd0aCBCb3JkZXIgUm91dGVyIGVudHJ5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgaSAgVGhlIGluZGV4LgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBpJ3RoIEJvcmRlciBSb3V0ZXIgZW50cnkuCisgICAgICoKKyAgICAgKi8KKyAgICBCb3JkZXJSb3V0ZXJFbnRyeSAqR2V0RW50cnkodWludDhfdCBpKSB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJvcmRlclJvdXRlckVudHJ5ICo+KEdldFZhbHVlKCkgKyAoaSAqIHNpemVvZihCb3JkZXJSb3V0ZXJFbnRyeSkpKTsKKyAgICB9Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ29udGV4dCBUTFYgZ2VuZXJhdGlvbiBhbmQgcHJvY2Vzc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDb250ZXh0VGx2OiBwdWJsaWMgTmV0d29ya0RhdGFUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgTmV0d29ya0RhdGFUbHY6OkluaXQoKTsgU2V0VHlwZShrVHlwZUNvbnRleHQpOyBTZXRMZW5ndGgoMik7IG1GbGFncyA9IDA7IG1Db250ZXh0TGVuZ3RoID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBDb21wcmVzcyBmbGFnIGlzIHNldC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIFRoZSBDb21wcmVzcyBmbGFnIGlzIHNldC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBUaGUgQ29tcHJlc3MgZmxhZ3MgaXMgbm90IHNldC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNDb21wcmVzcyh2b2lkKSBjb25zdCB7IHJldHVybiAobUZsYWdzICYga0NvbXByZXNzRmxhZykgIT0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBDb21wcmVzcyBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckNvbXByZXNzKHZvaWQpIHsgbUZsYWdzICY9IH5rQ29tcHJlc3NGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDb21wcmVzcyBmbGFnLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb21wcmVzcyh2b2lkKSB7IG1GbGFncyB8PSBrQ29tcHJlc3NGbGFnOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDb250ZXh0IElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvbnRleHQgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldENvbnRleHRJZCh2b2lkKSBjb25zdCB7IHJldHVybiBtRmxhZ3MgJiBrQ29udGV4dElkTWFzazsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQ29udGV4dCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0SWQgIFRoZSBDb250ZXh0IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb250ZXh0SWQodWludDhfdCBhQ29udGV4dElkKSB7CisgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a0NvbnRleHRJZE1hc2spIHwgKChhQ29udGV4dElkIDw8IGtDb250ZXh0SWRPZmZzZXQpICYga0NvbnRleHRJZE1hc2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENvbnRleHQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENvbnRleHQgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDb250ZXh0TGVuZ3RoKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db250ZXh0TGVuZ3RoOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBDb250ZXh0IExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBDb250ZXh0IExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q29udGV4dExlbmd0aCh1aW50OF90IGFMZW5ndGgpIHsgbUNvbnRleHRMZW5ndGggPSBhTGVuZ3RoOyB9CisKK3ByaXZhdGU6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0NvbXByZXNzRmxhZyA9IDEgPDwgNCwKKyAgICAgICAga0NvbnRleHRJZE9mZnNldCA9IDAsCisgICAgICAgIGtDb250ZXh0SWRNYXNrID0gMHhmIDw8IGtDb250ZXh0SWRPZmZzZXQsCisgICAgfTsKKyAgICB1aW50OF90IG1GbGFnczsKKyAgICB1aW50OF90IG1Db250ZXh0TGVuZ3RoOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENvbW1pc3Npb25pbmcgRGF0YSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBDb21taXNzaW9uaW5nRGF0YVRsdjogcHVibGljIE5ldHdvcmtEYXRhVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IE5ldHdvcmtEYXRhVGx2OjpJbml0KCk7IFNldFR5cGUoa1R5cGVDb21taXNzaW9uaW5nRGF0YSk7IFNldExlbmd0aCgwKTsgfQorfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEYXRhCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBORVRXT1JLX0RBVEFfVExWU19IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RpYWdub3N0aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2RmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljLmNwcApAQCAtMCwwICsxLDY2NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBUaHJlYWQncyBOZXR3b3JrIERpYWdub3N0aWMgcHJvY2Vzc2luZy4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJuZXR3b3JrX2RpYWdub3N0aWMudG1oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5ldHdvcmtfZGlhZ25vc3RpYy5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAibWFjL21hY19mcmFtZS5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWVzaF9mb3J3YXJkZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKKworI2lmIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKworbmFtZXNwYWNlIG90IHsKKworbmFtZXNwYWNlIE5ldHdvcmtEaWFnbm9zdGljIHsKKworTmV0d29ya0RpYWdub3N0aWM6Ok5ldHdvcmtEaWFnbm9zdGljKFRocmVhZE5ldGlmICZhVGhyZWFkTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYVRocmVhZE5ldGlmKSwKKyAgICBtRGlhZ25vc3RpY0dldFJlcXVlc3QoT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfUkVRVUVTVCwgJk5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UmVxdWVzdCwgdGhpcyksCisgICAgbURpYWdub3N0aWNHZXRRdWVyeShPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9RVUVSWSwgJk5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UXVlcnksIHRoaXMpLAorICAgIG1EaWFnbm9zdGljR2V0QW5zd2VyKE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX0FOU1dFUiwgJk5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0QW5zd2VyLCB0aGlzKSwKKyAgICBtRGlhZ25vc3RpY1Jlc2V0KE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfUkVTRVQsICZOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY1Jlc2V0LCB0aGlzKSwKKyAgICBtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjayhOVUxMKSwKKyAgICBtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFja0NvbnRleHQoTlVMTCkKK3sKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1EaWFnbm9zdGljR2V0UmVxdWVzdCk7CisgICAgYVRocmVhZE5ldGlmLkdldENvYXAoKS5BZGRSZXNvdXJjZShtRGlhZ25vc3RpY0dldFF1ZXJ5KTsKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1EaWFnbm9zdGljR2V0QW5zd2VyKTsKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1EaWFnbm9zdGljUmVzZXQpOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpTZXRSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKG90UmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFjayBhQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFDYWxsYmFja0NvbnRleHQpCit7CisgICAgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sgPSBhQ2FsbGJhY2s7CisgICAgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2tDb250ZXh0ID0gYUNhbGxiYWNrQ29udGV4dDsKK30KKworb3RFcnJvciBOZXR3b3JrRGlhZ25vc3RpYzo6U2VuZERpYWdub3N0aWNHZXQoY29uc3QgSXA2OjpBZGRyZXNzICZhRGVzdGluYXRpb24sIGNvbnN0IHVpbnQ4X3QgYVRsdlR5cGVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFDb3VudCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3I7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBDb2FwOjpIZWFkZXIgaGVhZGVyOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisgICAgb3RDb2FwUmVzcG9uc2VIYW5kbGVyIGhhbmRsZXIgPSBOVUxMOworCisgICAgaWYgKGFEZXN0aW5hdGlvbi5Jc011bHRpY2FzdCgpKQorICAgIHsKKyAgICAgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX05PTl9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgICAgICBoZWFkZXIuU2V0VG9rZW4oQ29hcDo6SGVhZGVyOjprRGVmYXVsdFRva2VuTGVuZ3RoKTsKKyAgICAgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX1FVRVJZKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGFuZGxlciA9ICZOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlOworICAgICAgICBoZWFkZXIuSW5pdChPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUsIE9UX0NPQVBfQ09ERV9QT1NUKTsKKyAgICAgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9SRVFVRVNUKTsKKyAgICB9CisKKyAgICBpZiAoYUNvdW50ID4gMCkKKyAgICB7CisgICAgICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtZXNzYWdlLT5BcHBlbmQoYVRsdlR5cGVzLCBhQ291bnQpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFEZXN0aW5hdGlvbik7CisgICAgbWVzc2FnZUluZm8uU2V0U29ja0FkZHIobmV0aWYuR2V0TWxlKCkuR2V0TWVzaExvY2FsMTYoKSk7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoa0NvYXBVZHBQb3J0KTsKKyAgICBtZXNzYWdlSW5mby5TZXRJbnRlcmZhY2VJZChuZXRpZi5HZXRJbnRlcmZhY2VJZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBoYW5kbGVyLCB0aGlzKSk7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJTZW50IGRpYWdub3N0aWMgZ2V0Iik7CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSAmJiBtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCkKK3sKKyAgICBzdGF0aWNfY2FzdDxOZXR3b3JrRGlhZ25vc3RpYyAqPihhQ29udGV4dCktPkhhbmRsZURpYWdub3N0aWNHZXRSZXNwb25zZSgqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UmVzcG9uc2UoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RFcnJvciBhUmVzdWx0KQoreworICAgIFZlcmlmeU9yRXhpdChhUmVzdWx0ID09IE9UX0VSUk9SX05PTkUpOworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfQ0hBTkdFRCk7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBkaWFnbm9zdGljIGdldCByZXNwb25zZSIpOworCisgICAgaWYgKG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2soJmFNZXNzYWdlLCAmYU1lc3NhZ2VJbmZvLCBtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFja0NvbnRleHQpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNHZXRBbnN3ZXIodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKQoreworICAgIHN0YXRpY19jYXN0PE5ldHdvcmtEaWFnbm9zdGljICo+KGFDb250ZXh0KS0+SGFuZGxlRGlhZ25vc3RpY0dldEFuc3dlcigqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0QW5zd2VyKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NUKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIkRpYWdub3N0aWMgZ2V0IGFuc3dlciByZWNlaXZlZCIpOworCisgICAgaWYgKG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbVJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2soJmFNZXNzYWdlLCAmYU1lc3NhZ2VJbmZvLCBtUmVjZWl2ZURpYWdub3N0aWNHZXRDYWxsYmFja0NvbnRleHQpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoR2V0TmV0aWYoKS5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIGFNZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiU2VudCBkaWFnbm9zdGljIGFuc3dlciBhY2tub3dsZWRnbWVudCIpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworb3RFcnJvciBOZXR3b3JrRGlhZ25vc3RpYzo6QXBwZW5kSXA2QWRkcmVzc0xpc3QoTWVzc2FnZSAmYU1lc3NhZ2UpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBJcDZBZGRyZXNzTGlzdFRsdiB0bHY7CisgICAgdWludDhfdCBjb3VudCA9IDA7CisKKyAgICB0bHYuSW5pdCgpOworCisgICAgZm9yIChjb25zdCBJcDY6Ok5ldGlmVW5pY2FzdEFkZHJlc3MgKmFkZHIgPSBuZXRpZi5HZXRVbmljYXN0QWRkcmVzc2VzKCk7IGFkZHI7IGFkZHIgPSBhZGRyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHRsdi5TZXRMZW5ndGgoY291bnQgKiBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFNZXNzYWdlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworCisgICAgZm9yIChjb25zdCBJcDY6Ok5ldGlmVW5pY2FzdEFkZHJlc3MgKmFkZHIgPSBuZXRpZi5HZXRVbmljYXN0QWRkcmVzc2VzKCk7IGFkZHI7IGFkZHIgPSBhZGRyLT5HZXROZXh0KCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZhZGRyLT5HZXRBZGRyZXNzKCksIHNpemVvZihJcDY6OkFkZHJlc3MpKSk7CisgICAgfQorCitleGl0OgorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldHdvcmtEaWFnbm9zdGljOjpBcHBlbmRDaGlsZFRhYmxlKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBjb3VudCA9IDA7CisgICAgdWludDhfdCB0aW1lb3V0ID0gMDsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworICAgIGNvbnN0IENoaWxkICpjaGlsZHJlbiA9IG5ldGlmLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisgICAgQ2hpbGRUYWJsZVRsdiB0bHY7CisgICAgQ2hpbGRUYWJsZUVudHJ5IGVudHJ5OworCisgICAgdGx2LkluaXQoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjaGlsZHJlbltpXS5HZXRTdGF0ZSgpID09IE5laWdoYm9yOjprU3RhdGVWYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRsdi5TZXRMZW5ndGgoY291bnQgKiBzaXplb2YoQ2hpbGRUYWJsZUVudHJ5KSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU1lc3NhZ2UuQXBwZW5kKCZ0bHYsIHNpemVvZihDaGlsZFRhYmxlVGx2KSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLkdldFN0YXRlKCkgPT0gTmVpZ2hib3I6OmtTdGF0ZVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lb3V0ID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKHN0YXRpY19jYXN0PHVpbnQzMl90PigxIDw8IHRpbWVvdXQpIDwgY2hpbGRyZW5baV0uR2V0VGltZW91dCgpKSB7IHRpbWVvdXQrKzsgfQorCisgICAgICAgICAgICBlbnRyeS5TZXRSZXNlcnZlZCgwKTsKKyAgICAgICAgICAgIGVudHJ5LlNldFRpbWVvdXQodGltZW91dCArIDQpOworICAgICAgICAgICAgZW50cnkuU2V0Q2hpbGRJZChuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZElkKGNoaWxkcmVuW2ldLkdldFJsb2MxNigpKSk7CisgICAgICAgICAgICBlbnRyeS5TZXRNb2RlKGNoaWxkcmVuW2ldLkdldERldmljZU1vZGUoKSk7CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTWVzc2FnZS5BcHBlbmQoJmVudHJ5LCBzaXplb2YoQ2hpbGRUYWJsZUVudHJ5KSkpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5ldHdvcmtEaWFnbm9zdGljOjpGaWxsUmVxdWVzdGVkVGx2cyhNZXNzYWdlICZhUmVxdWVzdCwgTWVzc2FnZSAmYVJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya0RpYWdub3N0aWNUbHYgJmFOZXR3b3JrRGlhZ25vc3RpY1RsdikKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IG9mZnNldCA9IDA7CisgICAgdWludDhfdCB0eXBlOworCisgICAgb2Zmc2V0ID0gYVJlcXVlc3QuR2V0T2Zmc2V0KCkgKyBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFOZXR3b3JrRGlhZ25vc3RpY1Rsdi5HZXRMZW5ndGgoKTsgaSsrKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFSZXF1ZXN0LlJlYWQob2Zmc2V0LCBzaXplb2YodHlwZSksICZ0eXBlKSA9PSBzaXplb2YodHlwZSksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZGlhZ25vc3RpYyBnZXQgdHlwZSAlZCIsIHR5cGUpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprRXh0TWFjQWRkcmVzczoKKyAgICAgICAgeworICAgICAgICAgICAgRXh0TWFjQWRkcmVzc1RsdiB0bHY7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgdGx2LlNldE1hY0FkZHIoKm5ldGlmLkdldE1hYygpLkdldEV4dEFkZHJlc3MoKSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprQWRkcmVzczE2OgorICAgICAgICB7CisgICAgICAgICAgICBBZGRyZXNzMTZUbHYgdGx2OworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIHRsdi5TZXRSbG9jMTYobmV0aWYuR2V0TWxlKCkuR2V0UmxvYzE2KCkpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a01vZGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIE1vZGVUbHYgdGx2OworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIHRsdi5TZXRNb2RlKG5ldGlmLkdldE1sZSgpLkdldERldmljZU1vZGUoKSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprVGltZW91dDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChuZXRpZi5HZXRNbGUoKS5HZXREZXZpY2VNb2RlKCkgJiBNb2RlVGx2OjprTW9kZVJ4T25XaGVuSWRsZSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaW1lb3V0VGx2IHRsdjsKKyAgICAgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgICAgIHRsdi5TZXRUaW1lb3V0KAorICAgICAgICAgICAgICAgICAgICBUaW1lcjo6TXNlY1RvU2VjKG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXREYXRhUG9sbE1hbmFnZXIoKS5HZXRLZWVwQWxpdmVQb2xsUGVyaW9kKCkpKTsKKyAgICAgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtDb25uZWN0aXZpdHk6CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbm5lY3Rpdml0eVRsdiB0bHY7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgbmV0aWYuR2V0TWxlKCkuRmlsbENvbm5lY3Rpdml0eVRsdigqcmVpbnRlcnByZXRfY2FzdDxNbGU6OkNvbm5lY3Rpdml0eVRsdiAqPigmdGx2KSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCBzaXplb2YodGx2KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprUm91dGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFJvdXRlVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5GaWxsUm91dGVUbHYoKnJlaW50ZXJwcmV0X2Nhc3Q8TWxlOjpSb3V0ZVRsdiAqPigmdGx2KSk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCB0bHYuR2V0U2l6ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtMZWFkZXJEYXRhOgorICAgICAgICB7CisgICAgICAgICAgICBMZWFkZXJEYXRhVGx2IHRsdjsKKyAgICAgICAgICAgIG1lbWNweSgmdGx2LCAmbmV0aWYuR2V0TWxlKCkuR2V0TGVhZGVyRGF0YVRsdigpLCBzaXplb2YodGx2KSk7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgdGx2LkdldFNpemUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5ldHdvcmtEaWFnbm9zdGljVGx2OjprTmV0d29ya0RhdGE6CisgICAgICAgIHsKKyAgICAgICAgICAgIE5ldHdvcmtEYXRhVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICBuZXRpZi5HZXRNbGUoKS5GaWxsTmV0d29ya0RhdGFUbHYoKCpyZWludGVycHJldF9jYXN0PE1sZTo6TmV0d29ya0RhdGFUbHYgKj4oJnRsdikpLCB0cnVlKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHRsdi5HZXRTaXplKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a0lwNkFkZHJlc3NMaXN0OgorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kSXA2QWRkcmVzc0xpc3QoYVJlc3BvbnNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtNYWNDb3VudGVyczoKKyAgICAgICAgeworICAgICAgICAgICAgTWFjQ291bnRlcnNUbHYgdGx2OworICAgICAgICAgICAgbWVtc2V0KCZ0bHYsIDAsIHNpemVvZih0bHYpKTsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICBuZXRpZi5HZXRNYWMoKS5GaWxsTWFjQ291bnRlcnNUbHYodGx2KTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHRsdi5HZXRTaXplKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a0JhdHRlcnlMZXZlbDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVE9ETyBOZWVkIG1vcmUgYXBpIGZyb20gZHJpdmVyCisgICAgICAgICAgICBCYXR0ZXJ5TGV2ZWxUbHYgdGx2OworICAgICAgICAgICAgdGx2LkluaXQoKTsKKyAgICAgICAgICAgIHRsdi5TZXRCYXR0ZXJ5TGV2ZWwoMTAwKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHRsdi5HZXRTaXplKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a1N1cHBseVZvbHRhZ2U6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRPRE8gTmVlZCBtb3JlIGFwaSBmcm9tIGRyaXZlcgorICAgICAgICAgICAgU3VwcGx5Vm9sdGFnZVRsdiB0bHY7CisgICAgICAgICAgICB0bHYuSW5pdCgpOworICAgICAgICAgICAgdGx2LlNldFN1cHBseVZvbHRhZ2UoMCk7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYVJlc3BvbnNlLkFwcGVuZCgmdGx2LCB0bHYuR2V0U2l6ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTmV0d29ya0RpYWdub3N0aWNUbHY6OmtDaGlsZFRhYmxlOgorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQXBwZW5kQ2hpbGRUYWJsZShhUmVzcG9uc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a0NoYW5uZWxQYWdlczoKKyAgICAgICAgeworICAgICAgICAgICAgQ2hhbm5lbFBhZ2VzVGx2IHRsdjsKKyAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICB0bHYuR2V0Q2hhbm5lbFBhZ2VzKClbMF0gPSAwOworICAgICAgICAgICAgdGx2LlNldExlbmd0aCgxKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhUmVzcG9uc2UuQXBwZW5kKCZ0bHYsIHRsdi5HZXRTaXplKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a01heENoaWxkVGltZW91dDoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgbWF4VGltZW91dCA9IDA7CisKKyAgICAgICAgICAgIGlmIChuZXRpZi5HZXRNbGUoKS5HZXRNYXhDaGlsZFRpbWVvdXQobWF4VGltZW91dCkgPT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNYXhDaGlsZFRpbWVvdXRUbHYgdGx2OworICAgICAgICAgICAgICAgIHRsdi5Jbml0KCk7CisgICAgICAgICAgICAgICAgdGx2LlNldFRpbWVvdXQobWF4VGltZW91dCk7CisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFSZXNwb25zZS5BcHBlbmQoJnRsdiwgc2l6ZW9mKHRsdikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRXhpdE5vdyhlcnJvciA9IE9UX0VSUk9SX0RST1ApOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih0eXBlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UXVlcnkodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8TmV0d29ya0RpYWdub3N0aWMgKj4oYUNvbnRleHQpLT5IYW5kbGVEaWFnbm9zdGljR2V0UXVlcnkoCisgICAgICAgICpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksICpzdGF0aWNfY2FzdDxNZXNzYWdlICo+KGFNZXNzYWdlKSwKKyAgICAgICAgKnN0YXRpY19jYXN0PGNvbnN0IElwNjo6TWVzc2FnZUluZm8gKj4oYU1lc3NhZ2VJbmZvKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNHZXRRdWVyeShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIE5ldHdvcmtEaWFnbm9zdGljVGx2IG5ldHdvcmtEaWFnbm9zdGljVGx2OworICAgIENvYXA6OkhlYWRlciBoZWFkZXI7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfUE9TVCwgZXJyb3IgPSBPVF9FUlJPUl9EUk9QKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGRpYWdub3N0aWMgZ2V0IHF1ZXJ5Iik7CisKKyAgICBWZXJpZnlPckV4aXQoKGFNZXNzYWdlLlJlYWQoYU1lc3NhZ2UuR2V0T2Zmc2V0KCksIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXR3b3JrRGlhZ25vc3RpY1RsdikgPT0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBWZXJpZnlPckV4aXQobmV0d29ya0RpYWdub3N0aWNUbHYuR2V0VHlwZSgpID09IE5ldHdvcmtEaWFnbm9zdGljVGx2OjprVHlwZUxpc3QsIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICBWZXJpZnlPckV4aXQoKHN0YXRpY19jYXN0PFR5cGVMaXN0VGx2ICo+KCZuZXR3b3JrRGlhZ25vc3RpY1RsdiktPklzVmFsaWQoKSksIGVycm9yID0gT1RfRVJST1JfRFJPUCk7CisKKyAgICAvLyBESUFHX0dFVC5xcnkgbWF5IGJlIHNlbnQgYXMgYSBjb25maXJtYWJsZSBtZXNzYWdlLgorICAgIGlmIChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUpCisgICAgeworICAgICAgICBpZiAobmV0aWYuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGlhZ25vc3RpYyBnZXQgcXVlcnkgYWNrbm93bGVkZ21lbnQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGhlYWRlci5Jbml0KE9UX0NPQVBfVFlQRV9DT05GSVJNQUJMRSwgT1RfQ09BUF9DT0RFX1BPU1QpOworICAgIGhlYWRlci5TZXRUb2tlbihDb2FwOjpIZWFkZXI6OmtEZWZhdWx0VG9rZW5MZW5ndGgpOworICAgIGhlYWRlci5BcHBlbmRVcmlQYXRoT3B0aW9ucyhPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9BTlNXRVIpOworCisgICAgaWYgKG5ldHdvcmtEaWFnbm9zdGljVGx2LkdldExlbmd0aCgpID4gMCkKKyAgICB7CisgICAgICAgIGhlYWRlci5TZXRQYXlsb2FkTWFya2VyKCk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRTb2NrQWRkcihuZXRpZi5HZXRNbGUoKS5HZXRNZXNoTG9jYWwxNigpKTsKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyUG9ydChrQ29hcFVkcFBvcnQpOworICAgIG1lc3NhZ2VJbmZvLlNldEludGVyZmFjZUlkKG5ldGlmLkdldEludGVyZmFjZUlkKCkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEZpbGxSZXF1ZXN0ZWRUbHZzKGFNZXNzYWdlLCAqbWVzc2FnZSwgbmV0d29ya0RpYWdub3N0aWNUbHYpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBuZXRpZi5HZXRDb2FwKCkuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UsIG1lc3NhZ2VJbmZvLCBOVUxMLCB0aGlzKSk7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJTZW50IGRpYWdub3N0aWMgZ2V0IGFuc3dlciIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY0dldFJlcXVlc3Qodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxOZXR3b3JrRGlhZ25vc3RpYyAqPihhQ29udGV4dCktPkhhbmRsZURpYWdub3N0aWNHZXRSZXF1ZXN0KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIE5ldHdvcmtEaWFnbm9zdGljOjpIYW5kbGVEaWFnbm9zdGljR2V0UmVxdWVzdChDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgICAgTmV0d29ya0RpYWdub3N0aWNUbHYgbmV0d29ya0RpYWdub3N0aWNUbHY7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvKGFNZXNzYWdlSW5mbyk7CisKKyAgICBWZXJpZnlPckV4aXQoYUhlYWRlci5HZXRUeXBlKCkgPT0gT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFICYmCisgICAgICAgICAgICAgICAgIGFIZWFkZXIuR2V0Q29kZSgpID09IE9UX0NPQVBfQ09ERV9QT1NULCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZGlhZ25vc3RpYyBnZXQgcmVxdWVzdCIpOworCisgICAgVmVyaWZ5T3JFeGl0KChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0d29ya0RpYWdub3N0aWNUbHYpID09IHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgVmVyaWZ5T3JFeGl0KG5ldHdvcmtEaWFnbm9zdGljVGx2LkdldFR5cGUoKSA9PSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a1R5cGVMaXN0LCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgVmVyaWZ5T3JFeGl0KChzdGF0aWNfY2FzdDxUeXBlTGlzdFRsdiAqPigmbmV0d29ya0RpYWdub3N0aWNUbHYpLT5Jc1ZhbGlkKCkpLCBlcnJvciA9IE9UX0VSUk9SX0RST1ApOworCisgICAgaGVhZGVyLlNldERlZmF1bHRSZXNwb25zZUhlYWRlcihhSGVhZGVyKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gbmV0aWYuR2V0Q29hcCgpLk5ld01lc3NhZ2UoaGVhZGVyKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBGaWxsUmVxdWVzdGVkVGx2cyhhTWVzc2FnZSwgKm1lc3NhZ2UsIG5ldHdvcmtEaWFnbm9zdGljVGx2KSk7CisKKyAgICBpZiAobWVzc2FnZS0+R2V0TGVuZ3RoKCkgPT0gaGVhZGVyLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgLy8gUmVtb3ZlIFBheWxvYWQgTWFya2VyIGlmIHBheWxvYWQgaXMgYWN0dWFsbHkgZW1wdHkuCisgICAgICAgIG1lc3NhZ2UtPlNldExlbmd0aChoZWFkZXIuR2V0TGVuZ3RoKCkgLSAxKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiU2VudCBkaWFnbm9zdGljIGdldCByZXNwb25zZSIpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKworb3RFcnJvciBOZXR3b3JrRGlhZ25vc3RpYzo6U2VuZERpYWdub3N0aWNSZXNldChjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhQ291bnQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBJcDY6Ok1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfUkVTRVQpOworCisgICAgaWYgKGFDb3VudCA+IDApCisgICAgeworICAgICAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdCgobWVzc2FnZSA9IG5ldGlmLkdldENvYXAoKS5OZXdNZXNzYWdlKGhlYWRlcikpICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfTk9fQlVGUyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKGFUbHZUeXBlcywgYUNvdW50KSk7CisKKyAgICBtZXNzYWdlSW5mby5TZXRQZWVyQWRkcihhRGVzdGluYXRpb24pOworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgbWVzc2FnZUluZm8uU2V0SW50ZXJmYWNlSWQobmV0aWYuR2V0SW50ZXJmYWNlSWQoKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuR2V0Q29hcCgpLlNlbmRNZXNzYWdlKCptZXNzYWdlLCBtZXNzYWdlSW5mbykpOworCisgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiU2VudCBuZXR3b3JrIGRpYWdub3N0aWMgcmVzZXQiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgTmV0d29ya0RpYWdub3N0aWM6OkhhbmRsZURpYWdub3N0aWNSZXNldCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxOZXR3b3JrRGlhZ25vc3RpYyAqPihhQ29udGV4dCktPkhhbmRsZURpYWdub3N0aWNSZXNldCgKKyAgICAgICAgKnN0YXRpY19jYXN0PENvYXA6OkhlYWRlciAqPihhSGVhZGVyKSwgKnN0YXRpY19jYXN0PE1lc3NhZ2UgKj4oYU1lc3NhZ2UpLAorICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK30KKwordm9pZCBOZXR3b3JrRGlhZ25vc3RpYzo6SGFuZGxlRGlhZ25vc3RpY1Jlc2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgdWludDE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1aW50OF90IHR5cGU7CisgICAgTmV0d29ya0RpYWdub3N0aWNUbHYgbmV0d29ya0RpYWdub3N0aWNUbHY7CisKKyAgICBvdExvZ0luZm9OZXREaWFnKEdldEluc3RhbmNlKCksICJSZWNlaXZlZCBkaWFnbm9zdGljIHJlc2V0IHJlcXVlc3QiKTsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldFR5cGUoKSA9PSBPVF9DT0FQX1RZUEVfQ09ORklSTUFCTEUgJiYKKyAgICAgICAgICAgICAgICAgYUhlYWRlci5HZXRDb2RlKCkgPT0gT1RfQ09BUF9DT0RFX1BPU1QpOworCisgICAgVmVyaWZ5T3JFeGl0KChhTWVzc2FnZS5SZWFkKGFNZXNzYWdlLkdldE9mZnNldCgpLCBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0d29ya0RpYWdub3N0aWNUbHYpID09IHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpKTsKKworICAgIFZlcmlmeU9yRXhpdChuZXR3b3JrRGlhZ25vc3RpY1Rsdi5HZXRUeXBlKCkgPT0gTmV0d29ya0RpYWdub3N0aWNUbHY6OmtUeXBlTGlzdCk7CisKKyAgICBWZXJpZnlPckV4aXQoKHN0YXRpY19jYXN0PFR5cGVMaXN0VGx2ICo+KCZuZXR3b3JrRGlhZ25vc3RpY1RsdiktPklzVmFsaWQoKSkpOworCisgICAgb2Zmc2V0ID0gYU1lc3NhZ2UuR2V0T2Zmc2V0KCkgKyBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbmV0d29ya0RpYWdub3N0aWNUbHYuR2V0TGVuZ3RoKCk7IGkrKykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhTWVzc2FnZS5SZWFkKG9mZnNldCwgc2l6ZW9mKHR5cGUpLCAmdHlwZSkgPT0gc2l6ZW9mKHR5cGUpKTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBOZXR3b3JrRGlhZ25vc3RpY1Rsdjo6a01hY0NvdW50ZXJzOgorICAgICAgICAgICAgbmV0aWYuR2V0TWFjKCkuUmVzZXRDb3VudGVycygpOworICAgICAgICAgICAgb3RMb2dJbmZvTmV0RGlhZyhHZXRJbnN0YW5jZSgpLCAiUmVjZWl2ZWQgZGlhZ25vc3RpYyByZXNldCB0eXBlIGtNYWNDb3VudGVycyg5KSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlJlY2VpdmVkIGRpYWdub3N0aWMgcmVzZXQgb3RoZXIgdHlwZSAlZCBub3QgcmVzZXRhYmxlIiwgdHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQobmV0aWYuR2V0Q29hcCgpLlNlbmRFbXB0eUFjayhhSGVhZGVyLCBhTWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb05ldERpYWcoR2V0SW5zdGFuY2UoKSwgIlNlbnQgZGlhZ25vc3RpYyByZXNldCBhY2tub3dsZWRnbWVudCIpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworfSAgLy8gbmFtZXNwYWNlIE5ldHdvcmtEaWFnbm9zdGljCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5ocHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDVhNjRkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL25ldHdvcmtfZGlhZ25vc3RpYy5ocHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBoYW5kbGUgbmV0d29yayBkaWFnbm9zdGljLgorICovCisKKyNpZm5kZWYgTkVUV09SS19ESUFHTk9TVElDX0hQUF8KKyNkZWZpbmUgTkVUV09SS19ESUFHTk9TVElDX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb2FwL2NvYXAuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK25hbWVzcGFjZSBOZXR3b3JrRGlhZ25vc3RpYyB7CisKK2NsYXNzIElwNkFkZHJlc3NMaXN0VGx2OworY2xhc3MgQ2hpbGRUYWJsZVRsdjsKK2NsYXNzIE5ldHdvcmtEaWFnbm9zdGljVGx2OworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbmV0ZGlhZworICoKKyAqIEBicmllZgorICogICBUaGlzIG1vZHVsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3Igc2VuZGluZyBhbmQgaGFuZGxpbmcgTmV0d29yayBEaWFnbm9zdGljIENvbW1hbmRzLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIE5ldHdvcmsgRGlhZ25vc3RpYyBwcm9jZXNzaW5nLgorICoKKyAqLworY2xhc3MgTmV0d29ya0RpYWdub3N0aWM6IHB1YmxpYyBUaHJlYWROZXRpZkxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBleHBsaWNpdCBOZXR3b3JrRGlhZ25vc3RpYyhUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIHByb3ZpZGUgcmVjZWl2ZWQgcmF3IERJQUdfR0VULnJzcCBvciBhbiBESUFHX0dFVC5hbnMgcGF5bG9hZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDYWxsYmFjayAgICAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW4gRElBR19HRVQucnNwIG9yIGFuIERJQUdfR0VULmFucworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlY2VpdmVkIG9yIE5VTEwgdG8gZGlzYWJsZSB0aGUgY2FsbGJhY2suCisgICAgICogQHBhcmFtW2luXSAgYUNhbGxiYWNrQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlY2VpdmVEaWFnbm9zdGljR2V0Q2FsbGJhY2sob3RSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrIGFDYWxsYmFjaywgdm9pZCAqYUNhbGxiYWNrQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBEaWFnbm9zdGljIEdldCByZXF1ZXN0LiBJZiB0aGUgQHAgYURlc3RpbmF0aW9uIGlzIG9mIG11bHRpY2FzdCB0eXBlLCB0aGUgRElBR19HRVQucXJ5CisgICAgICogbWVzc2FnZSBpcyBzZW50IG9yIHRoZSBESUFHX0dFVC5yZXEgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gYVRsdlR5cGVzICAgICBBbiBhcnJheSBvZiBOZXR3b3JrIERpYWdub3N0aWMgVExWIHR5cGVzLgorICAgICAqIEBwYXJhbVtpbl0gYUNvdW50ICAgICAgICBOdW1iZXIgb2YgdHlwZXMgaW4gYVRsdlR5cGVzCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNlbmREaWFnbm9zdGljR2V0KGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCBjb25zdCB1aW50OF90IGFUbHZUeXBlc1tdLCB1aW50OF90IGFDb3VudCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBEaWFnbm9zdGljIFJlc2V0IHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dIGFEZXN0aW5hdGlvbiAgQSByZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW2luXSBhVGx2VHlwZXMgICAgIEFuIGFycmF5IG9mIE5ldHdvcmsgRGlhZ25vc3RpYyBUTFYgdHlwZXMuCisgICAgICogQHBhcmFtW2luXSBhQ291bnQgICAgICAgIE51bWJlciBvZiB0eXBlcyBpbiBhVGx2VHlwZXMKKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2VuZERpYWdub3N0aWNSZXNldChjb25zdCBJcDY6OkFkZHJlc3MgJmFEZXN0aW5hdGlvbiwgY29uc3QgdWludDhfdCBhVGx2VHlwZXNbXSwgdWludDhfdCBhQ291bnQpOworCitwcml2YXRlOgorCisgICAgb3RFcnJvciBBcHBlbmRJcDZBZGRyZXNzTGlzdChNZXNzYWdlICZhTWVzc2FnZSk7CisgICAgb3RFcnJvciBBcHBlbmRDaGlsZFRhYmxlKE1lc3NhZ2UgJmFNZXNzYWdlKTsKKyAgICBvdEVycm9yIEZpbGxSZXF1ZXN0ZWRUbHZzKE1lc3NhZ2UgJmFSZXF1ZXN0LCBNZXNzYWdlICZhUmVzcG9uc2UsIE5ldHdvcmtEaWFnbm9zdGljVGx2ICZhTmV0d29ya0RpYWdub3N0aWNUbHYpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGlhZ25vc3RpY0dldFJlcXVlc3Qodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlRGlhZ25vc3RpY0dldFJlcXVlc3QoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRRdWVyeSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlRGlhZ25vc3RpY0dldFF1ZXJ5KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVEaWFnbm9zdGljR2V0UmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpOworICAgIHZvaWQgSGFuZGxlRGlhZ25vc3RpY0dldFJlc3BvbnNlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdEVycm9yIGFSZXN1bHQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRGlhZ25vc3RpY0dldEFuc3dlcih2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKyAgICB2b2lkIEhhbmRsZURpYWdub3N0aWNHZXRBbnN3ZXIoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURpYWdub3N0aWNSZXNldCh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlRGlhZ25vc3RpY1Jlc2V0KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtRGlhZ25vc3RpY0dldFJlcXVlc3Q7CisgICAgQ29hcDo6UmVzb3VyY2UgbURpYWdub3N0aWNHZXRRdWVyeTsKKyAgICBDb2FwOjpSZXNvdXJjZSBtRGlhZ25vc3RpY0dldEFuc3dlcjsKKyAgICBDb2FwOjpSZXNvdXJjZSBtRGlhZ25vc3RpY1Jlc2V0OworCisgICAgb3RSZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrIG1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrOworICAgIHZvaWQgKm1SZWNlaXZlRGlhZ25vc3RpY0dldENhbGxiYWNrQ29udGV4dDsKK307CisKKy8qKgorICogQH0KKyAqLworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0RpYWdub3N0aWMKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkVUV09SS19ESUFHTk9TVElDX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9uZXR3b3JrX2RpYWdub3N0aWNfdGx2cy5ocHAgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTA3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvbmV0d29ya19kaWFnbm9zdGljX3RsdnMuaHBwCkBAIC0wLDAgKzEsMTQxNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgTUxFIFRMVnMuCisgKi8KKworI2lmbmRlZiBORVRXT1JLX0RJQUdOT1NUSUNfVExWU19IUFBfCisjZGVmaW5lIE5FVFdPUktfRElBR05PU1RJQ19UTFZTX0hQUF8KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJjb21tb24vZW5jb2RpbmcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJjb21tb24vdGx2cy5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZV9jb25zdGFudHMuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgTmV0d29ya0RpYWdub3N0aWMgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbWxlLXRsdnMKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyYXRpbmcgYW5kIHByb2Nlc3NpbmcgTUxFIFRMVnMuCisgKgorICogQHsKKyAqCisgKi8KKworZW51bQoreworICAgIGtOdW1SZXNldFRsdlR5cGVzID0gMSwKKyAgICBrTnVtVGx2VHlwZXMgPSAxOCwKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1MRSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBOZXR3b3JrRGlhZ25vc3RpY1RsdiA6IHB1YmxpYyBvdDo6VGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogTUxFIFRMViBUeXBlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gVHlwZQorICAgIHsKKyAgICAgICAga0V4dE1hY0FkZHJlc3MgICAgICAgPSAwLCAgICAvLy88IFNvdXJjZSBBZGRyZXNzIFRMVgorICAgICAgICBrQWRkcmVzczE2ICAgICAgICAgICA9IDEsICAgIC8vLzwgQWRkcmVzczE2IFRMVgorICAgICAgICBrTW9kZSAgICAgICAgICAgICAgICA9IDIsICAgIC8vLzwgTW9kZSBUTFYKKyAgICAgICAga1RpbWVvdXQgICAgICAgICAgICAgPSAzLCAgICAvLy88IFRpbWVvdXQgVExWCisgICAgICAgIGtDb25uZWN0aXZpdHkgICAgICAgID0gNCwgICAgLy8vPCBDb25uZWN0aXZpdHkgVExWCisgICAgICAgIGtSb3V0ZSAgICAgICAgICAgICAgID0gNSwgICAgLy8vPCBSb3V0aW5nLVRhYmxlIFRMVgorICAgICAgICBrTGVhZGVyRGF0YSAgICAgICAgICA9IDYsICAgIC8vLzwgTGVhZGVyIERhdGEgVExWCisgICAgICAgIGtOZXR3b3JrRGF0YSAgICAgICAgID0gNywgICAgLy8vPCBOZXR3b3JrIERhdGEgVExWCisgICAgICAgIGtJcDZBZGRyZXNzTGlzdCAgICAgID0gOCwgICAgLy8vPCBJcDYgQWRkcmVzcyBMaXN0IFRMVgorICAgICAgICBrTWFjQ291bnRlcnMgICAgICAgICA9IDksICAgIC8vLzwgTWFjIENvdW50ZXJzIFRMVgorICAgICAgICBrQmF0dGVyeUxldmVsICAgICAgICA9IDE0LCAgIC8vLzwgQmF0dGVyeSBMZXZlbCBUTFYKKyAgICAgICAga1N1cHBseVZvbHRhZ2UgICAgICAgPSAxNSwgICAvLy88IFN1cHBseSBWb2x0YWdlIFRMVgorICAgICAgICBrQ2hpbGRUYWJsZSAgICAgICAgICA9IDE2LCAgIC8vLzwgQ2hpbGQgVGFibGUgVExWCisgICAgICAgIGtDaGFubmVsUGFnZXMgICAgICAgID0gMTcsICAgLy8vPCBDaGFubmVsIFBhZ2VzIFRMVgorICAgICAgICBrVHlwZUxpc3QgICAgICAgICAgICA9IDE4LCAgIC8vLzwgVHlwZSBMaXN0IFRMVgorICAgICAgICBrTWF4Q2hpbGRUaW1lb3V0ICAgICA9IDE5LCAgIC8vLzwgTWF4IENoaWxkIFRpbWVvdXQgVExWCisgICAgICAgIGtJbnZhbGlkICAgICAgICAgICAgID0gMjU1LAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBUeXBlIEdldFR5cGUodm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4ob3Q6OlRsdjo6R2V0VHlwZSgpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICBUaGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VHlwZShUeXBlIGFUeXBlKSB7IG90OjpUbHY6OlNldFR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJlYWRzIHRoZSByZXF1ZXN0ZWQgVExWIG91dCBvZiBAcCBhTWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhTWVzc2FnZSAgICBBIHJlZmVyZW5jZSB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW1baW5dICAgYVR5cGUgICAgICAgVGhlIFR5cGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcGFyYW1baW5dICAgYU1heExlbmd0aCAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAgICAgKiBAcGFyYW1bb3V0XSAgYVRsdiAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIFRMViB0aGF0IHdpbGwgYmUgY29waWVkIHRvLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBjb3BpZWQgdGhlIFRMVi4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgQ291bGQgbm90IGZpbmQgdGhlIFRMViB3aXRoIFR5cGUgQHAgYVR5cGUuCisgICAgICoKKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBHZXRUbHYoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIFR5cGUgYVR5cGUsIHVpbnQxNl90IGFNYXhMZW5ndGgsIFRsdiAmYVRsdikgeworICAgICAgICByZXR1cm4gb3Q6OlRsdjo6R2V0KGFNZXNzYWdlLCBzdGF0aWNfY2FzdDx1aW50OF90PihhVHlwZSksIGFNYXhMZW5ndGgsIGFUbHYpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCBvYnRhaW5zIHRoZSBvZmZzZXQgb2YgYSBUTFYgd2l0aGluIEBwIGFNZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNzYWdlICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbVtpbl0gICBhVHlwZSAgICAgICBUaGUgVHlwZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICAgICAqIEBwYXJhbVtvdXRdICBhT2Zmc2V0ICAgICBBIHJlZmVyZW5jZSB0byB0aGUgb2Zmc2V0IG9mIHRoZSBUTFYuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGNvcGllZCB0aGUgVExWLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9UX0ZPVU5EICBDb3VsZCBub3QgZmluZCB0aGUgVExWIHdpdGggVHlwZSBAcCBhVHlwZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBvdEVycm9yIEdldE9mZnNldChjb25zdCBNZXNzYWdlICZhTWVzc2FnZSwgVHlwZSBhVHlwZSwgdWludDE2X3QgJmFPZmZzZXQpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldE9mZnNldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhT2Zmc2V0KTsKKyAgICB9CisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBFeHRlbmRlZCBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworY2xhc3MgRXh0TWFjQWRkcmVzc1RsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0V4dE1hY0FkZHJlc3MpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgRXh0ZW5kZWQgTUFDIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTWFjOjpFeHRBZGRyZXNzICpHZXRNYWNBZGRyKHZvaWQpIGNvbnN0IHsgcmV0dXJuICZtTWFjQWRkcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRXh0ZW5kZWQgTUFDIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYWNBZGRyKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpIHsgbU1hY0FkZHIgPSBhQWRkcmVzczsgfQorCitwcml2YXRlOgorICAgIE1hYzo6RXh0QWRkcmVzcyBtTWFjQWRkcjsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFNvdXJjZSBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIEFkZHJlc3MxNlRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0FkZHJlc3MxNik7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRSbG9jMTYodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtUmxvYzE2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJsb2MxNiAgVGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmxvYzE2KHVpbnQxNl90IGFSbG9jMTYpIHsgbVJsb2MxNiA9IEhvc3RTd2FwMTYoYVJsb2MxNik7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtUmxvYzE2OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1vZGUgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTW9kZVRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa01vZGUpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTW9kZVJ4T25XaGVuSWRsZSAgICAgID0gMSA8PCAzLAorICAgICAgICBrTW9kZVNlY3VyZURhdGFSZXF1ZXN0ID0gMSA8PCAyLAorICAgICAgICBrTW9kZUZGRCAgICAgICAgICAgICAgID0gMSA8PCAxLAorICAgICAgICBrTW9kZUZ1bGxOZXR3b3JrRGF0YSAgID0gMSA8PCAwLAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIE1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE1vZGUodm9pZCkgY29uc3QgeyByZXR1cm4gbU1vZGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTW9kZSAgVGhlIE1vZGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1vZGUodWludDhfdCBhTW9kZSkgeyBtTW9kZSA9IGFNb2RlOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtTW9kZTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUaW1lb3V0IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRpbWVvdXRUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtUaW1lb3V0KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0VGltZW91dCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UaW1lb3V0KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGltZW91dCh1aW50MzJfdCBhVGltZW91dCkgeyBtVGltZW91dCA9IEhvc3RTd2FwMzIoYVRpbWVvdXQpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbVRpbWVvdXQ7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgQ29ubmVjdGl2aXR5IFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENvbm5lY3Rpdml0eVRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa0Nvbm5lY3Rpdml0eSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpIHx8CisgICAgICAgICAgICAgICAgR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikgLSBzaXplb2YobVNlZEJ1ZmZlclNpemUpIC0gc2l6ZW9mKG1TZWREYXRhZ3JhbUNvdW50KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUGFyZW50IFByaW9yaXR5IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGludDhfdCBHZXRQYXJlbnRQcmlvcml0eSh2b2lkKSBjb25zdCB7IHJldHVybiAobVBhcmVudFByaW9yaXR5ICYga1BhcmVudFByaW9yaXR5T2Zmc2V0KSA+PiBrUGFyZW50UHJpb3JpdHlPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBhcmVudCBQcmlvcml0eSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYVBhcmVudFByaW9yaXR5ICBUaGUgUGFyZW50IFByaW9yaXR5IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRQYXJlbnRQcmlvcml0eShpbnQ4X3QgYVBhcmVudFByaW9yaXR5KSB7CisgICAgICAgIG1QYXJlbnRQcmlvcml0eSA9IChhUGFyZW50UHJpb3JpdHkgPDwga1BhcmVudFByaW9yaXR5T2Zmc2V0KSAmIGtQYXJlbnRQcmlvcml0eU1hc2s7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IDMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IDMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5Myh2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHkzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgMyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSAzIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eTModWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5MyA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IDIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IDIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5Mih2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHkyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgMiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSAyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eTIodWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5MiA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IDEgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IDEgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5MSh2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua1F1YWxpdHkxOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMaW5rIFF1YWxpdHkgMSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSAxIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eTEodWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5MSA9IGFMaW5rUXVhbGl0eTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgQWN0aXZlIFJvdXRlcnMgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgQWN0aXZlIFJvdXRlcnMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEFjdGl2ZVJvdXRlcnModm9pZCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZVJvdXRlcnM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEFjdGl2ZSBSb3V0ZXJzIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFjdGl2ZVJvdXRlcnMgIFRoZSBBY3RpdmUgUm91dGVycyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWN0aXZlUm91dGVycyh1aW50OF90IGFBY3RpdmVSb3V0ZXJzKSB7IG1BY3RpdmVSb3V0ZXJzID0gYUFjdGl2ZVJvdXRlcnM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExlYWRlciBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIExlYWRlciBDb3N0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMZWFkZXJDb3N0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MZWFkZXJDb3N0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBMZWFkZXIgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb3N0ICBUaGUgTGVhZGVyIENvc3QgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExlYWRlckNvc3QodWludDhfdCBhQ29zdCkgeyBtTGVhZGVyQ29zdCA9IGFDb3N0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0SWRTZXF1ZW5jZSh2b2lkKSBjb25zdCB7IHJldHVybiBtSWRTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWRTZXF1ZW5jZSh1aW50OF90IGFTZXF1ZW5jZSkgeyBtSWRTZXF1ZW5jZSA9IGFTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU0VEIEJ1ZmZlciBTaXplIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFNlZEJ1ZmZlclNpemUodm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAxNihtU2VkQnVmZmVyU2l6ZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNFRCBCdWZmZXIgU2l6ZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWRCdWZmZXJTaXplICBUaGUgU0VEIEJ1ZmZlciBTaXplIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWRCdWZmZXJTaXplKHVpbnQxNl90IGFTZWRCdWZmZXJTaXplKSB7IG1TZWRCdWZmZXJTaXplID0gSG9zdFN3YXAxNihhU2VkQnVmZmVyU2l6ZSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFNFRCBEYXRhZ3JhbSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTRUQgRGF0YWdyYW0gQ291bnQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFNlZERhdGFncmFtQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVNlZERhdGFncmFtQ291bnQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFNFRCBEYXRhZ3JhbSBDb3VudCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZWREYXRhZ3JhbUNvdW50ICBUaGUgU0VEIERhdGFncmFtIENvdW50IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTZWREYXRhZ3JhbUNvdW50KHVpbnQ4X3QgYVNlZERhdGFncmFtQ291bnQpIHsgbVNlZERhdGFncmFtQ291bnQgPSBhU2VkRGF0YWdyYW1Db3VudDsgfQorCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtQYXJlbnRQcmlvcml0eU9mZnNldCA9IDYsCisgICAgICAgIGtQYXJlbnRQcmlvcml0eU1hc2sgPSAzIDw8IGtQYXJlbnRQcmlvcml0eU9mZnNldCwKKyAgICB9OworCisgICAgdWludDhfdCAgbVBhcmVudFByaW9yaXR5OworICAgIHVpbnQ4X3QgIG1MaW5rUXVhbGl0eTM7CisgICAgdWludDhfdCAgbUxpbmtRdWFsaXR5MjsKKyAgICB1aW50OF90ICBtTGlua1F1YWxpdHkxOworICAgIHVpbnQ4X3QgIG1MZWFkZXJDb3N0OworICAgIHVpbnQ4X3QgIG1JZFNlcXVlbmNlOworICAgIHVpbnQ4X3QgIG1BY3RpdmVSb3V0ZXJzOworICAgIHVpbnQxNl90IG1TZWRCdWZmZXJTaXplOworICAgIHVpbnQ4X3QgIG1TZWREYXRhZ3JhbUNvdW50OworfSAgT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBSb3V0ZSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBSb3V0ZVRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1JvdXRlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7CisgICAgICAgIHJldHVybiBHZXRMZW5ndGgoKSA+PSBzaXplb2YobVJvdXRlcklkU2VxdWVuY2UpICsgc2l6ZW9mKG1Sb3V0ZXJJZE1hc2spICYmCisgICAgICAgICAgICAgICBHZXRMZW5ndGgoKSA8PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUm91dGVyIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZXJJZFNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Sb3V0ZXJJZFNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhU2VxdWVuY2UgIFRoZSBSb3V0ZXIgSUQgU2VxdWVuY2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlcklkU2VxdWVuY2UodWludDhfdCBhU2VxdWVuY2UpIHsgbVJvdXRlcklkU2VxdWVuY2UgPSBhU2VxdWVuY2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgUm91dGVyIElEIE1hc2suCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIENsZWFyUm91dGVySWRNYXNrKHZvaWQpIHsgbWVtc2V0KG1Sb3V0ZXJJZE1hc2ssIDAsIHNpemVvZihtUm91dGVySWRNYXNrKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhIFJvdXRlciBJRCBiaXQgaXMgc2V0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFJvdXRlciBJRCBiaXQgaXMgc2V0LgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBSb3V0ZXIgSUQgYml0IGlzIG5vdCBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUm91dGVySWRTZXQodWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtUm91dGVySWRNYXNrW2FSb3V0ZXJJZCAvIDhdICYgKDB4ODAgPj4gKGFSb3V0ZXJJZCAlIDgpKSkgIT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZXIgSUQgYml0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgUm91dGVyIElEIGJpdCB0byBzZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJvdXRlcklkKHVpbnQ4X3QgYVJvdXRlcklkKSB7IG1Sb3V0ZXJJZE1hc2tbYVJvdXRlcklkIC8gOF0gfD0gMHg4MCA+PiAoYVJvdXRlcklkICUgOCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJvdXRlIERhdGEgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdXRlIERhdGEgTGVuZ3RoIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZURhdGFMZW5ndGgodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgLSBzaXplb2YobVJvdXRlcklkU2VxdWVuY2UpIC0gc2l6ZW9mKG1Sb3V0ZXJJZE1hc2spOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBSb3V0ZSBEYXRhIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMZW5ndGggIFRoZSBSb3V0ZSBEYXRhIExlbmd0aCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVEYXRhTGVuZ3RoKHVpbnQ4X3QgYUxlbmd0aCkgeworICAgICAgICBTZXRMZW5ndGgoc2l6ZW9mKG1Sb3V0ZXJJZFNlcXVlbmNlKSArIHNpemVvZihtUm91dGVySWRNYXNrKSArIGFMZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFJvdXRlIENvc3QgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFJvdXRlIENvc3QgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRSb3V0ZUNvc3QodWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIGtSb3V0ZUNvc3RNYXNrOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJvdXRlIENvc3QgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICAgVGhlIFJvdXRlciBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVDb3N0ICBUaGUgUm91dGUgQ29zdCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Um91dGVDb3N0KHVpbnQ4X3QgYVJvdXRlcklkLCB1aW50OF90IGFSb3V0ZUNvc3QpIHsKKyAgICAgICAgbVJvdXRlRGF0YVthUm91dGVySWRdID0gKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIH5rUm91dGVDb3N0TWFzaykgfCBhUm91dGVDb3N0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmsgUXVhbGl0eSBJbiB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IEluIHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0TGlua1F1YWxpdHlJbih1aW50OF90IGFSb3V0ZXJJZCkgY29uc3QgeworICAgICAgICByZXR1cm4gKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIGtMaW5rUXVhbGl0eUluTWFzaykgPj4ga0xpbmtRdWFsaXR5SW5PZmZzZXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGluayBRdWFsaXR5IEluIHZhbHVlIGZvciBhIGdpdmVuIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgICAgVGhlIFJvdXRlciBJRC4KKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBMaW5rIFF1YWxpdHkgSW4gdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eUluKHVpbnQ4X3QgYVJvdXRlcklkLCB1aW50OF90IGFMaW5rUXVhbGl0eSkgeworICAgICAgICBtUm91dGVEYXRhW2FSb3V0ZXJJZF0gPQorICAgICAgICAgICAgKG1Sb3V0ZURhdGFbYVJvdXRlcklkXSAmIH5rTGlua1F1YWxpdHlJbk1hc2spIHwKKyAgICAgICAgICAgICgoYUxpbmtRdWFsaXR5IDw8IGtMaW5rUXVhbGl0eUluT2Zmc2V0KSAmIGtMaW5rUXVhbGl0eUluTWFzayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGluayBRdWFsaXR5IE91dCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGluayBRdWFsaXR5IE91dCB2YWx1ZSBmb3IgYSBnaXZlbiBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5T3V0KHVpbnQ4X3QgYVJvdXRlcklkKSBjb25zdCB7CisgICAgICAgIHJldHVybiAobVJvdXRlRGF0YVthUm91dGVySWRdICYga0xpbmtRdWFsaXR5T3V0TWFzaykgPj4ga0xpbmtRdWFsaXR5T3V0T2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExpbmsgUXVhbGl0eSBPdXQgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICAgICBUaGUgUm91dGVyIElELgorICAgICAqIEBwYXJhbVtpbl0gIGFMaW5rUXVhbGl0eSAgVGhlIExpbmsgUXVhbGl0eSBPdXQgdmFsdWUgZm9yIGEgZ2l2ZW4gUm91dGVyIElELgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMaW5rUXVhbGl0eU91dCh1aW50OF90IGFSb3V0ZXJJZCwgdWludDhfdCBhTGlua1F1YWxpdHkpIHsKKyAgICAgICAgbVJvdXRlRGF0YVthUm91dGVySWRdID0KKyAgICAgICAgICAgIChtUm91dGVEYXRhW2FSb3V0ZXJJZF0gJiB+a0xpbmtRdWFsaXR5T3V0TWFzaykgfAorICAgICAgICAgICAgKChhTGlua1F1YWxpdHkgPDwga0xpbmtRdWFsaXR5T3V0T2Zmc2V0KSAmIGtMaW5rUXVhbGl0eU91dE1hc2spOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTGlua1F1YWxpdHlPdXRPZmZzZXQgPSA2LAorICAgICAgICBrTGlua1F1YWxpdHlPdXRNYXNrID0gMyA8PCBrTGlua1F1YWxpdHlPdXRPZmZzZXQsCisgICAgICAgIGtMaW5rUXVhbGl0eUluT2Zmc2V0ID0gNCwKKyAgICAgICAga0xpbmtRdWFsaXR5SW5NYXNrID0gMyA8PCBrTGlua1F1YWxpdHlJbk9mZnNldCwKKyAgICAgICAga1JvdXRlQ29zdE9mZnNldCA9IDAsCisgICAgICAgIGtSb3V0ZUNvc3RNYXNrID0gMHhmIDw8IGtSb3V0ZUNvc3RPZmZzZXQsCisgICAgfTsKKyAgICB1aW50OF90IG1Sb3V0ZXJJZFNlcXVlbmNlOworICAgIHVpbnQ4X3QgbVJvdXRlcklkTWFza1tCaXRWZWN0b3JCeXRlcyhNbGU6OmtNYXhSb3V0ZXJJZCldOworICAgIHVpbnQ4X3QgbVJvdXRlRGF0YVtNbGU6OmtNYXhSb3V0ZXJzXTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBMZWFkZXIgRGF0YSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBMZWFkZXJEYXRhVGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrTGVhZGVyRGF0YSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBhcnRpdGlvbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBQYXJ0aXRpb24gSUQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRQYXJ0aXRpb25JZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1QYXJ0aXRpb25JZCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBhcnRpdGlvbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQYXJ0aXRpb25JZCAgVGhlIFBhcnRpdGlvbiBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGFydGl0aW9uSWQodWludDMyX3QgYVBhcnRpdGlvbklkKSB7IG1QYXJ0aXRpb25JZCA9IEhvc3RTd2FwMzIoYVBhcnRpdGlvbklkKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgV2VpZ2h0aW5nIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0V2VpZ2h0aW5nKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1XZWlnaHRpbmc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFdlaWdodGluZyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFXZWlnaHRpbmcgIFRoZSBXZWlnaHRpbmcgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFdlaWdodGluZyh1aW50OF90IGFXZWlnaHRpbmcpIHsgbVdlaWdodGluZyA9IGFXZWlnaHRpbmc7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldERhdGFWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1EYXRhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVZlcnNpb24gIFRoZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERhdGFWZXJzaW9uKHVpbnQ4X3QgYVZlcnNpb24pICB7IG1EYXRhVmVyc2lvbiA9IGFWZXJzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBTdGFibGUgRGF0YSBWZXJzaW9uIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFN0YWJsZSBEYXRhIFZlcnNpb24gdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFN0YWJsZURhdGFWZXJzaW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdGFibGVEYXRhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU3RhYmxlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgU3RhYmxlIERhdGEgVmVyc2lvbiB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RhYmxlRGF0YVZlcnNpb24odWludDhfdCBhVmVyc2lvbikgeyBtU3RhYmxlRGF0YVZlcnNpb24gPSBhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTGVhZGVyIFJvdXRlciBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBMZWFkZXIgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRMZWFkZXJSb3V0ZXJJZCh2b2lkKSBjb25zdCB7IHJldHVybiBtTGVhZGVyUm91dGVySWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIExlYWRlciBSb3V0ZXIgSUQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBMZWFkZXIgUm91dGVyIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRMZWFkZXJSb3V0ZXJJZCh1aW50OF90IGFSb3V0ZXJJZCkgeyBtTGVhZGVyUm91dGVySWQgPSBhUm91dGVySWQ7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtUGFydGl0aW9uSWQ7CisgICAgdWludDhfdCBtV2VpZ2h0aW5nOworICAgIHVpbnQ4X3QgbURhdGFWZXJzaW9uOworICAgIHVpbnQ4X3QgbVN0YWJsZURhdGFWZXJzaW9uOworICAgIHVpbnQ4X3QgbUxlYWRlclJvdXRlcklkOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE5ldHdvcmsgRGF0YSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBOZXR3b3JrRGF0YVRsdjogcHVibGljIE5ldHdvcmtEaWFnbm9zdGljVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa05ldHdvcmtEYXRhKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA8IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90ICpHZXROZXR3b3JrRGF0YSh2b2lkKSB7IHJldHVybiBtTmV0d29ya0RhdGE7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE5ldHdvcmsgRGF0YS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFOZXR3b3JrRGF0YSAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5ldHdvcmtEYXRhKGNvbnN0IHVpbnQ4X3QgKmFOZXR3b3JrRGF0YSkgeyBtZW1jcHkobU5ldHdvcmtEYXRhLCBhTmV0d29ya0RhdGEsIEdldExlbmd0aCgpKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5ldHdvcmtEYXRhWzI1NV07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiBBZGRyZXNzIExpc3QgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgSXA2QWRkcmVzc0xpc3RUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhTaXplID0gOCwgIC8vLzwgTWF4aW11bSBzaXplIGluIGJ5dGVzIChUaHJlYWQgU3BlY2lmaWNhdGlvbikuCisgICAgfTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtJcDZBZGRyZXNzTGlzdCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gc2l6ZW9mKElwNjo6QWRkcmVzcykgKiBrTWF4U2l6ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIElQdjYgYWRkcmVzcyBlbnRyeS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbmRleCAgVGhlIGluZGV4IGludG8gdGhlIElQdjYgYWRkcmVzcyBsaXN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IElwNjo6QWRkcmVzcyAmR2V0SXA2QWRkcmVzcyh1aW50OF90IGFJbmRleCkgY29uc3QgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSXA2OjpBZGRyZXNzICo+KEdldFZhbHVlKCkgKyAoYUluZGV4ICogc2l6ZW9mKElwNjo6QWRkcmVzcykpKTsKKyAgICB9CisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNYWMgQ291bnRlcnMgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgTWFjQ291bnRlcnNUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtNYWNDb3VudGVycyk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElmSW5Vbmtub3duUHJvdG9zIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSWZJblVua25vd25Qcm90b3MgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZJblVua25vd25Qcm90b3Modm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtSWZJblVua25vd25Qcm90b3MpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJZkluVW5rbm93blByb3RvcyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmSW5Vbmtub3duUHJvdG9zIFRoZSBJZkluVW5rbm93blByb3RvcyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmSW5Vbmtub3duUHJvdG9zKGNvbnN0IHVpbnQzMl90IGFJZkluVW5rbm93blByb3RvcykgeyBtSWZJblVua25vd25Qcm90b3MgPSBIb3N0U3dhcDMyKGFJZkluVW5rbm93blByb3Rvcyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElmSW5FcnJvcnMgY291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJZkluRXJyb3JzIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldElmSW5FcnJvcnModm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtSWZJbkVycm9ycyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElmSW5FcnJvcnMgY291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJZkluRXJyb3JzIFRoZSBJZkluRXJyb3JzIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWZJbkVycm9ycyhjb25zdCB1aW50MzJfdCBhSWZJbkVycm9ycykgeyBtSWZJbkVycm9ycyA9IEhvc3RTd2FwMzIoYUlmSW5FcnJvcnMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZk91dEVycm9ycyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElmT3V0RXJyb3JzIGNvdW50ZXIKKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldElmT3V0RXJyb3JzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmT3V0RXJyb3JzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSWZPdXRFcnJvcnMgY291bnRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJZk91dEVycm9ycyBUaGUgSWZPdXRFcnJvcnMgY291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWZPdXRFcnJvcnMoY29uc3QgdWludDMyX3QgYUlmT3V0RXJyb3JzKSB7IG1JZk91dEVycm9ycyA9IEhvc3RTd2FwMzIoYUlmT3V0RXJyb3JzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSWZJblVjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElmSW5VY2FzdFBrdHMgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZJblVjYXN0UGt0cyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JZkluVWNhc3RQa3RzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSWZJblVjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmSW5VY2FzdFBrdHMgVGhlIElmSW5VY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWZJblVjYXN0UGt0cyhjb25zdCB1aW50MzJfdCBhSWZJblVjYXN0UGt0cykgeyBtSWZJblVjYXN0UGt0cyA9IEhvc3RTd2FwMzIoYUlmSW5VY2FzdFBrdHMpOyB9CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSWZJbkJyb2FkY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJZkluQnJvYWRjYXN0UGt0cyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRJZkluQnJvYWRjYXN0UGt0cyh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1JZkluQnJvYWRjYXN0UGt0cyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElmSW5Ccm9hZGNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWZJbkJyb2FkY2FzdFBrdHMgVGhlIElmSW5Ccm9hZGNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmSW5Ccm9hZGNhc3RQa3RzKGNvbnN0IHVpbnQzMl90IGFJZkluQnJvYWRjYXN0UGt0cykgeyBtSWZJbkJyb2FkY2FzdFBrdHMgPSBIb3N0U3dhcDMyKGFJZkluQnJvYWRjYXN0UGt0cyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElmSW5EaXNjYXJkcyBjb3VudGVyLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElmSW5EaXNjYXJkcyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRJZkluRGlzY2FyZHModm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtSWZJbkRpc2NhcmRzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSWZJbkRpc2NhcmRzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWZJbkRpc2NhcmRzIFRoZSBJZkluRGlzY2FyZHMgY291bnRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWZJbkRpc2NhcmRzKGNvbnN0IHVpbnQzMl90IGFJZkluRGlzY2FyZHMpIHsgbUlmSW5EaXNjYXJkcyA9IEhvc3RTd2FwMzIoYUlmSW5EaXNjYXJkcyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElmT3V0VWNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSWZPdXRVY2FzdFBrdHMgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZPdXRVY2FzdFBrdHModm9pZCkgY29uc3QgeyByZXR1cm4gSG9zdFN3YXAzMihtSWZPdXRVY2FzdFBrdHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJZk91dFVjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmT3V0VWNhc3RQa3RzIFRoZSBJZk91dFVjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJZk91dFVjYXN0UGt0cyhjb25zdCB1aW50MzJfdCBhSWZPdXRVY2FzdFBrdHMpIHsgbUlmT3V0VWNhc3RQa3RzID0gSG9zdFN3YXAzMihhSWZPdXRVY2FzdFBrdHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZk91dEJyb2FkY2FzdFBrdHMgY291bnRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJZk91dEJyb2FkY2FzdFBrdHMgY291bnRlcgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0SWZPdXRCcm9hZGNhc3RQa3RzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmT3V0QnJvYWRjYXN0UGt0cyk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElmT3V0QnJvYWRjYXN0UGt0cyBjb3VudGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUlmT3V0QnJvYWRjYXN0UGt0cyBUaGUgSWZPdXRCcm9hZGNhc3RQa3RzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElmT3V0QnJvYWRjYXN0UGt0cyhjb25zdCB1aW50MzJfdCBhSWZPdXRCcm9hZGNhc3RQa3RzKSB7IG1JZk91dEJyb2FkY2FzdFBrdHMgPSBIb3N0U3dhcDMyKGFJZk91dEJyb2FkY2FzdFBrdHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJZk91dERpc2NhcmRzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSWZPdXREaXNjYXJkcyBjb3VudGVyCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRJZk91dERpc2NhcmRzKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobUlmT3V0RGlzY2FyZHMpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJZk91dERpc2NhcmRzIGNvdW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWZPdXREaXNjYXJkcyBUaGUgSWZPdXREaXNjYXJkcyBjb3VudGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJZk91dERpc2NhcmRzKGNvbnN0IHVpbnQzMl90IGFJZk91dERpc2NhcmRzKSB7IG1JZk91dERpc2NhcmRzID0gSG9zdFN3YXAzMihhSWZPdXREaXNjYXJkcyk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtSWZJblVua25vd25Qcm90b3M7CisgICAgdWludDMyX3QgbUlmSW5FcnJvcnM7CisgICAgdWludDMyX3QgbUlmT3V0RXJyb3JzOworICAgIHVpbnQzMl90IG1JZkluVWNhc3RQa3RzOworICAgIHVpbnQzMl90IG1JZkluQnJvYWRjYXN0UGt0czsKKyAgICB1aW50MzJfdCBtSWZJbkRpc2NhcmRzOworICAgIHVpbnQzMl90IG1JZk91dFVjYXN0UGt0czsKKyAgICB1aW50MzJfdCBtSWZPdXRCcm9hZGNhc3RQa3RzOworICAgIHVpbnQzMl90IG1JZk91dERpc2NhcmRzOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEJhdHRlcnkgTGV2ZWwgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQmF0dGVyeUxldmVsVGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQmF0dGVyeUxldmVsKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0QmF0dGVyeUxldmVsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1CYXR0ZXJ5TGV2ZWw7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0dXMgIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEJhdHRlcnlMZXZlbCh1aW50OF90IGFCYXR0ZXJ5TGV2ZWwpIHsgbUJhdHRlcnlMZXZlbCA9IGFCYXR0ZXJ5TGV2ZWw7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1CYXR0ZXJ5TGV2ZWw7Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTdXBwbHkgVm9sdGFnZSBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBTdXBwbHlWb2x0YWdlVGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrU3VwcGx5Vm9sdGFnZSk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1Rsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBTdGF0dXMgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTdXBwbHlWb2x0YWdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdXBwbHlWb2x0YWdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBTdXBwbHlWb2x0YWdlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVN1cHBseVZvbHRhZ2UgIFRoZSBTdXBwbHlWb2x0YWdlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdXBwbHlWb2x0YWdlKHVpbnQxNl90IGFTdXBwbHlWb2x0YWdlKSB7IG1TdXBwbHlWb2x0YWdlID0gYVN1cHBseVZvbHRhZ2U7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MTZfdCBtU3VwcGx5Vm9sdGFnZTsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBDaGlsZCBUYWJsZSBFbnRyeSBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENoaWxkVGFibGVFbnRyeQoreworcHVibGljOgorICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICoKKyAgICAgKi8KKyAgICBDaGlsZFRhYmxlRW50cnkodm9pZCk6CisgICAgICAgIG1UaW1lb3V0UnN2Q2hpbGRJZCgwKSwKKyAgICAgICAgbU1vZGUoMCkge30KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0VGltZW91dCh2b2lkKSBjb25zdCB7IHJldHVybiAoSG9zdFN3YXAxNihtVGltZW91dFJzdkNoaWxkSWQpICYga1RpbWVvdXRNYXNrKSA+PiBrVGltZW91dE9mZnNldDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICBUaGUgVGltZW91dCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGltZW91dCh1aW50OF90IGFUaW1lb3V0KSB7CisgICAgICAgIG1UaW1lb3V0UnN2Q2hpbGRJZCA9IEhvc3RTd2FwMTYoKEhvc3RTd2FwMTYobVRpbWVvdXRSc3ZDaGlsZElkKSAmIH5rVGltZW91dE1hc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFUaW1lb3V0IDw8IGtUaW1lb3V0T2Zmc2V0KSAmIGtUaW1lb3V0TWFzaykpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIENoaWxkIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIENoaWxkIElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0Q2hpbGRJZCh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDE2KG1UaW1lb3V0UnN2Q2hpbGRJZCkgJiBrQ2hpbGRJZE1hc2s7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIENoaWxkIElEIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNoaWxkSWQgIFRoZSBDaGlsZCBJRCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0Q2hpbGRJZCh1aW50MTZfdCBhQ2hpbGRJZCkgeworICAgICAgICBtVGltZW91dFJzdkNoaWxkSWQgPSBIb3N0U3dhcDE2KChIb3N0U3dhcDE2KG1UaW1lb3V0UnN2Q2hpbGRJZCkgJiB+a0NoaWxkSWRNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFDaGlsZElkICYga0NoaWxkSWRNYXNrKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgTW9kZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRNb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Nb2RlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYU1vZGUgIFRoZSBNb2RlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNb2RlKHVpbnQ4X3QgYU1vZGUpIHsgbU1vZGUgPSBhTW9kZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUmVzZXJ2ZWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUmVzZXJ2ZWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldFJlc2VydmVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIb3N0U3dhcDE2KG1UaW1lb3V0UnN2Q2hpbGRJZCkgJiBrUmVzZXJ2ZWRNYXNrKSA+PiBrUmVzZXJ2ZWRPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJlc2VydmVkIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlc2VydmVkICBUaGUgUmVzZXJ2ZWQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJlc2VydmVkKHVpbnQ4X3QgYVJlc2VydmVkKSB7CisgICAgICAgIG1UaW1lb3V0UnN2Q2hpbGRJZCA9IEhvc3RTd2FwMTYoKEhvc3RTd2FwMTYobVRpbWVvdXRSc3ZDaGlsZElkKSAmIH5rUmVzZXJ2ZWRNYXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhUmVzZXJ2ZWQgPDwga1Jlc2VydmVkT2Zmc2V0KSAmIGtSZXNlcnZlZE1hc2spKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLyoqCisgICAgICogTWFza3MgZm9yIGZpZWxkcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtUaW1lb3V0TWFzayAgICA9IDB4ZjgwMCwKKyAgICAgICAga1RpbWVvdXRPZmZzZXQgID0gMTEsCisgICAgICAgIGtSZXNlcnZlZE1hc2sgICA9IDB4MDYwMCwKKyAgICAgICAga1Jlc2VydmVkT2Zmc2V0ID0gOSwKKyAgICAgICAga0NoaWxkSWRNYXNrICAgID0gMHgxZmYKKyAgICB9OworCisgICAgdWludDE2X3QgbVRpbWVvdXRSc3ZDaGlsZElkOworICAgIHVpbnQ4X3QgIG1Nb2RlOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoaWxkIFRhYmxlIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIENoaWxkVGFibGVUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtDaGlsZFRhYmxlKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIENoaWxkIFRhYmxlIGVudHJpZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIENoaWxkIFRhYmxlIGVudHJpZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE51bUVudHJpZXModm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgLyBzaXplb2YoQ2hpbGRUYWJsZUVudHJ5KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQ2hpbGQgVGFibGUgZW50cnkgYXQgQHAgYUluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluZGV4ICBUaGUgaW5kZXggaW50byB0aGUgQ2hpbGQgVGFibGUgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgQ2hpbGQgVGFibGUgZW50cnkuCisgICAgICovCisgICAgQ2hpbGRUYWJsZUVudHJ5ICZHZXRFbnRyeSh1aW50OF90IGFJbmRleCkgeworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Q2hpbGRUYWJsZUVudHJ5ICo+KEdldFZhbHVlKCkgKyAoYUluZGV4ICogc2l6ZW9mKENoaWxkVGFibGVFbnRyeSkpKTsKKyAgICB9CisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIENoYW5uZWwgUGFnZXMgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgQ2hhbm5lbFBhZ2VzVGx2OiBwdWJsaWMgTmV0d29ya0RpYWdub3N0aWNUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrQ2hhbm5lbFBhZ2VzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KTsgfQorCisgICAgdWludDhfdCAqR2V0Q2hhbm5lbFBhZ2VzKHZvaWQpIHsgcmV0dXJuIG1DaGFubmVsUGFnZXM7IH0KKworcHJpdmF0ZToKKyAgICB1aW50OF90IG1DaGFubmVsUGFnZXNbMV07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgSVB2NiBBZGRyZXNzIExpc3QgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVHlwZUxpc3RUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtUeXBlTGlzdCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKE5ldHdvcmtEaWFnbm9zdGljVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPD0gT1RfTkVUV09SS19ESUFHTk9TVElDX1RZUEVMSVNUX01BWF9FTlRSSUVTOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQ2hhbGxlbmdlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBDaGFsbGVuZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNYXggQ2hpbGQgVGltZW91dCBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBNYXhDaGlsZFRpbWVvdXRUbHY6IHB1YmxpYyBOZXR3b3JrRGlhZ25vc3RpY1RsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtNYXhDaGlsZFRpbWVvdXQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihOZXR3b3JrRGlhZ25vc3RpY1RsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoTmV0d29ya0RpYWdub3N0aWNUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFRpbWVvdXQgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRUaW1lb3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMzIobVRpbWVvdXQpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWVvdXQgIFRoZSBUaW1lb3V0IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRUaW1lb3V0KHVpbnQzMl90IGFUaW1lb3V0KSB7IG1UaW1lb3V0ID0gSG9zdFN3YXAzMihhVGltZW91dCk7IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtVGltZW91dDsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIEB9CisgKgorICovCisKK30gIC8vIG5hbWVzcGFjZSBOZXR3b3JrRGlhZ25vc3RpYworCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIE5FVFdPUktfRElBR05PU1RJQ19UTFZTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL3BhbmlkX3F1ZXJ5X3NlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzMzU4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBQQU4gSUQgUXVlcnkgU2VydmVyLgorICovCisKKworI2RlZmluZSBXUFBfTkFNRSAicGFuaWRfcXVlcnlfc2VydmVyLnRtaCIKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAicGFuaWRfcXVlcnlfc2VydmVyLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgIm1lc2hjb3AvbWVzaGNvcC5ocHAiCisjaW5jbHVkZSAibWVzaGNvcC9tZXNoY29wX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworUGFuSWRRdWVyeVNlcnZlcjo6UGFuSWRRdWVyeVNlcnZlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKSA6CisgICAgVGhyZWFkTmV0aWZMb2NhdG9yKGFUaHJlYWROZXRpZiksCisgICAgbUNoYW5uZWxNYXNrKDApLAorICAgIG1QYW5JZChNYWM6OmtQYW5JZEJyb2FkY2FzdCksCisgICAgbVRpbWVyKGFUaHJlYWROZXRpZi5HZXRJcDYoKS5tVGltZXJTY2hlZHVsZXIsICZQYW5JZFF1ZXJ5U2VydmVyOjpIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbVBhbklkUXVlcnkoT1RfVVJJX1BBVEhfUEFOSURfUVVFUlksICZQYW5JZFF1ZXJ5U2VydmVyOjpIYW5kbGVRdWVyeSwgdGhpcykKK3sKKyAgICBhVGhyZWFkTmV0aWYuR2V0Q29hcCgpLkFkZFJlc291cmNlKG1QYW5JZFF1ZXJ5KTsKK30KKwordm9pZCBQYW5JZFF1ZXJ5U2VydmVyOjpIYW5kbGVRdWVyeSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8UGFuSWRRdWVyeVNlcnZlciAqPihhQ29udGV4dCktPkhhbmRsZVF1ZXJ5KAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIFBhbklkUXVlcnlTZXJ2ZXI6OkhhbmRsZVF1ZXJ5KENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbykKK3sKKyAgICBNZXNoQ29QOjpQYW5JZFRsdiBwYW5JZDsKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgSXA2OjpNZXNzYWdlSW5mbyByZXNwb25zZUluZm8oYU1lc3NhZ2VJbmZvKTsKKworICAgIFZlcmlmeU9yRXhpdChhSGVhZGVyLkdldENvZGUoKSA9PSBPVF9DT0FQX0NPREVfUE9TVCk7CisKKyAgICBTdWNjZXNzT3JFeGl0KE1lc2hDb1A6OlRsdjo6R2V0VGx2KGFNZXNzYWdlLCBNZXNoQ29QOjpUbHY6OmtDaGFubmVsTWFzaywgc2l6ZW9mKGNoYW5uZWxNYXNrKSwgY2hhbm5lbE1hc2spKTsKKyAgICBWZXJpZnlPckV4aXQoY2hhbm5lbE1hc2suSXNWYWxpZCgpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoTWVzaENvUDo6VGx2OjpHZXRUbHYoYU1lc3NhZ2UsIE1lc2hDb1A6OlRsdjo6a1BhbklkLCBzaXplb2YocGFuSWQpLCBwYW5JZCkpOworICAgIFZlcmlmeU9yRXhpdChwYW5JZC5Jc1ZhbGlkKCkpOworCisgICAgbUNoYW5uZWxNYXNrID0gY2hhbm5lbE1hc2suR2V0TWFzaygpOworICAgIG1Db21taXNzaW9uZXIgPSBhTWVzc2FnZUluZm8uR2V0UGVlckFkZHIoKTsKKyAgICBtUGFuSWQgPSBwYW5JZC5HZXRQYW5JZCgpOworICAgIG1UaW1lci5TdGFydChrU2NhbkRlbGF5KTsKKworICAgIGlmIChhSGVhZGVyLklzQ29uZmlybWFibGUoKSAmJiAhYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNNdWx0aWNhc3QoKSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoR2V0TmV0aWYoKS5HZXRDb2FwKCkuU2VuZEVtcHR5QWNrKGFIZWFkZXIsIHJlc3BvbnNlSW5mbykpOworICAgICAgICBvdExvZ0luZm9NZXNoQ29QKEdldEluc3RhbmNlKCksICJzZW50IHBhbmlkIHF1ZXJ5IHJlc3BvbnNlIik7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBQYW5JZFF1ZXJ5U2VydmVyOjpIYW5kbGVTY2FuUmVzdWx0KHZvaWQgKmFDb250ZXh0LCBNYWM6OkZyYW1lICphRnJhbWUpCit7CisgICAgc3RhdGljX2Nhc3Q8UGFuSWRRdWVyeVNlcnZlciAqPihhQ29udGV4dCktPkhhbmRsZVNjYW5SZXN1bHQoYUZyYW1lKTsKK30KKwordm9pZCBQYW5JZFF1ZXJ5U2VydmVyOjpIYW5kbGVTY2FuUmVzdWx0KE1hYzo6RnJhbWUgKmFGcmFtZSkKK3sKKyAgICB1aW50MTZfdCBwYW5JZDsKKworICAgIGlmIChhRnJhbWUgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGFGcmFtZS0+R2V0U3JjUGFuSWQocGFuSWQpOworCisgICAgICAgIGlmIChwYW5JZCA9PSBtUGFuSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DaGFubmVsTWFzayB8PSAxIDw8IGFGcmFtZS0+R2V0Q2hhbm5lbCgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKG1DaGFubmVsTWFzayAhPSAwKQorICAgIHsKKyAgICAgICAgU2VuZENvbmZsaWN0KCk7CisgICAgfQorfQorCitvdEVycm9yIFBhbklkUXVlcnlTZXJ2ZXI6OlNlbmRDb25mbGljdCh2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ29hcDo6SGVhZGVyIGhlYWRlcjsKKyAgICBNZXNoQ29QOjpDaGFubmVsTWFzazBUbHYgY2hhbm5lbE1hc2s7CisgICAgTWVzaENvUDo6UGFuSWRUbHYgcGFuSWQ7CisgICAgSXA2OjpNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbzsKKyAgICBNZXNzYWdlICptZXNzYWdlOworCisgICAgaGVhZGVyLkluaXQoT1RfQ09BUF9UWVBFX0NPTkZJUk1BQkxFLCBPVF9DT0FQX0NPREVfUE9TVCk7CisgICAgaGVhZGVyLlNldFRva2VuKENvYXA6OkhlYWRlcjo6a0RlZmF1bHRUb2tlbkxlbmd0aCk7CisgICAgaGVhZGVyLkFwcGVuZFVyaVBhdGhPcHRpb25zKE9UX1VSSV9QQVRIX1BBTklEX0NPTkZMSUNUKTsKKyAgICBoZWFkZXIuU2V0UGF5bG9hZE1hcmtlcigpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gTWVzaENvUDo6TmV3TWVzaENvUE1lc3NhZ2UobmV0aWYuR2V0Q29hcCgpLCBoZWFkZXIpKSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgY2hhbm5lbE1hc2suSW5pdCgpOworICAgIGNoYW5uZWxNYXNrLlNldE1hc2sobUNoYW5uZWxNYXNrKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbWVzc2FnZS0+QXBwZW5kKCZjaGFubmVsTWFzaywgc2l6ZW9mKGNoYW5uZWxNYXNrKSkpOworCisgICAgcGFuSWQuSW5pdCgpOworICAgIHBhbklkLlNldFBhbklkKG1QYW5JZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmcGFuSWQsIHNpemVvZihwYW5JZCkpKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG5ldGlmLkdldE1sZSgpLkdldE1lc2hMb2NhbDE2KCkpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJBZGRyKG1Db21taXNzaW9uZXIpOworICAgIG1lc3NhZ2VJbmZvLlNldFBlZXJQb3J0KGtDb2FwVWRwUG9ydCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG5ldGlmLkdldENvYXAoKS5TZW5kTWVzc2FnZSgqbWVzc2FnZSwgbWVzc2FnZUluZm8pKTsKKworICAgIG90TG9nSW5mb01lc2hDb1AoR2V0SW5zdGFuY2UoKSwgInNlbnQgcGFuaWQgY29uZmxpY3QiKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FICYmIG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UtPkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgUGFuSWRRdWVyeVNlcnZlcjo6SGFuZGxlVGltZXIodm9pZCkKK3sKKyAgICBHZXROZXRpZigpLkdldE1hYygpLkFjdGl2ZVNjYW4obUNoYW5uZWxNYXNrLCAwLCBIYW5kbGVTY2FuUmVzdWx0LCB0aGlzKTsKKyAgICBtQ2hhbm5lbE1hc2sgPSAwOworfQorCitQYW5JZFF1ZXJ5U2VydmVyICZQYW5JZFF1ZXJ5U2VydmVyOjpHZXRPd25lcihjb25zdCBDb250ZXh0ICZhQ29udGV4dCkKK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyAgICBQYW5JZFF1ZXJ5U2VydmVyICZzZXJ2ZXIgPSAqc3RhdGljX2Nhc3Q8UGFuSWRRdWVyeVNlcnZlciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBQYW5JZFF1ZXJ5U2VydmVyICZzZXJ2ZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0UGFuSWRRdWVyeVNlcnZlcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gc2VydmVyOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL3BhbmlkX3F1ZXJ5X3NlcnZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyZjdmOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9wYW5pZF9xdWVyeV9zZXJ2ZXIuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgcmVzcG9uZGluZyB0byBQQU5JRCBRdWVyeSBSZXF1ZXN0cy4KKyAqLworCisjaWZuZGVmIFBBTklEX1FVRVJZX1NFUlZFUl9IUFBfCisjZGVmaW5lIFBBTklEX1FVRVJZX1NFUlZFUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3R5cGVzLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbG9jYXRvci5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgIm5ldC91ZHA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgTWVzaEZvcndhcmRlcjsKK2NsYXNzIFRocmVhZExhc3RUcmFuc2FjdGlvblRpbWVUbHY7CitjbGFzcyBUaHJlYWRNZXNoTG9jYWxFaWRUbHY7CitjbGFzcyBUaHJlYWROZXRpZjsKK2NsYXNzIFRocmVhZFRhcmdldFRsdjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgaGFuZGxpbmcgUEFOSUQgUXVlcnkgUmVxdWVzdHMuCisgKgorICovCitjbGFzcyBQYW5JZFF1ZXJ5U2VydmVyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgUGFuSWRRdWVyeVNlcnZlcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrU2NhbkRlbGF5ID0gMTAwMCwgIC8vLzwgU0NBTl9ERUxBWSAobWlsbGlzZWNvbmRzKQorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVRdWVyeSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLCBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworICAgIHZvaWQgSGFuZGxlUXVlcnkoQ29hcDo6SGVhZGVyICZhSGVhZGVyLCBNZXNzYWdlICZhTWVzc2FnZSwgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVNjYW5SZXN1bHQodm9pZCAqYUNvbnRleHQsIE1hYzo6RnJhbWUgKmFGcmFtZSk7CisgICAgdm9pZCBIYW5kbGVTY2FuUmVzdWx0KE1hYzo6RnJhbWUgKmFGcmFtZSk7CisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKTsKKyAgICB2b2lkIEhhbmRsZVRpbWVyKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVWRwUmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RNZXNzYWdlICphTWVzc2FnZSwgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvKTsKKworICAgIG90RXJyb3IgU2VuZENvbmZsaWN0KHZvaWQpOworCisgICAgc3RhdGljIFBhbklkUXVlcnlTZXJ2ZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIElwNjo6QWRkcmVzcyBtQ29tbWlzc2lvbmVyOworICAgIHVpbnQzMl90IG1DaGFubmVsTWFzazsKKyAgICB1aW50MTZfdCBtUGFuSWQ7CisKKyAgICBUaW1lciBtVGltZXI7CisKKyAgICBDb2FwOjpSZXNvdXJjZSBtUGFuSWRRdWVyeTsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBQQU5JRF9RVUVSWV9TRVJWRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3NyY19tYXRjaF9jb250cm9sbGVyLmNwcCBiL3NyYy9jb3JlL3RocmVhZC9zcmNfbWF0Y2hfY29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2Yzg3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC9zcmNfbWF0Y2hfY29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgc291cmNlIGFkZHJlc3MgbWF0Y2ggY29udHJvbGxlci4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJzcmNfbWF0Y2hfY29udHJvbGxlci50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAic3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tZXNoX2ZvcndhcmRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF9uZXRpZi5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK1NvdXJjZU1hdGNoQ29udHJvbGxlcjo6U291cmNlTWF0Y2hDb250cm9sbGVyKE1lc2hGb3J3YXJkZXIgJmFNZXNoRm9yd2FyZGVyKSA6CisgICAgTWVzaEZvcndhcmRlckxvY2F0b3IoYU1lc2hGb3J3YXJkZXIpLAorICAgIG1FbmFibGVkKGZhbHNlKQoreworICAgIENsZWFyVGFibGUoKTsKK30KKwordm9pZCBTb3VyY2VNYXRjaENvbnRyb2xsZXI6OkluY3JlbWVudE1lc3NhZ2VDb3VudChDaGlsZCAmYUNoaWxkKQoreworICAgIGlmIChhQ2hpbGQuR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA9PSAwKQorICAgIHsKKyAgICAgICAgQWRkRW50cnkoYUNoaWxkKTsKKyAgICB9CisKKyAgICBhQ2hpbGQuSW5jcmVtZW50SW5kaXJlY3RNZXNzYWdlQ291bnQoKTsKK30KKwordm9pZCBTb3VyY2VNYXRjaENvbnRyb2xsZXI6OkRlY3JlbWVudE1lc3NhZ2VDb3VudChDaGlsZCAmYUNoaWxkKQoreworICAgIGlmIChhQ2hpbGQuR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA9PSAwKQorICAgIHsKKyAgICAgICAgb3RMb2dXYXJuTWFjKEdldEluc3RhbmNlKCksICJEZWNyZW1lbnRNZXNzYWdlQ291bnQoY2hpbGQgMHglMDR4KSBjYWxsZWQgd2hlbiBhbHJlYWR5IGF0IHplcm8gY291bnQuIiwKKyAgICAgICAgICAgICAgICAgICAgIGFDaGlsZC5HZXRSbG9jMTYoKSk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBhQ2hpbGQuRGVjcmVtZW50SW5kaXJlY3RNZXNzYWdlQ291bnQoKTsKKworICAgIGlmIChhQ2hpbGQuR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA9PSAwKQorICAgIHsKKyAgICAgICAgQ2xlYXJFbnRyeShhQ2hpbGQpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgU291cmNlTWF0Y2hDb250cm9sbGVyOjpSZXNldE1lc3NhZ2VDb3VudChDaGlsZCAmYUNoaWxkKQoreworICAgIGFDaGlsZC5SZXNldEluZGlyZWN0TWVzc2FnZUNvdW50KCk7CisgICAgQ2xlYXJFbnRyeShhQ2hpbGQpOworfQorCit2b2lkIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6U2V0U3JjTWF0Y2hBc1Nob3J0KENoaWxkICZhQ2hpbGQsIGJvb2wgYVVzZVNob3J0QWRkcmVzcykKK3sKKyAgICBWZXJpZnlPckV4aXQoYUNoaWxkLklzSW5kaXJlY3RTb3VyY2VNYXRjaFNob3J0KCkgIT0gYVVzZVNob3J0QWRkcmVzcyk7CisKKyAgICBpZiAoYUNoaWxkLkdldEluZGlyZWN0TWVzc2FnZUNvdW50KCkgPiAwKQorICAgIHsKKyAgICAgICAgQ2xlYXJFbnRyeShhQ2hpbGQpOworICAgICAgICBhQ2hpbGQuU2V0SW5kaXJlY3RTb3VyY2VNYXRjaFNob3J0KGFVc2VTaG9ydEFkZHJlc3MpOworICAgICAgICBBZGRFbnRyeShhQ2hpbGQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhQ2hpbGQuU2V0SW5kaXJlY3RTb3VyY2VNYXRjaFNob3J0KGFVc2VTaG9ydEFkZHJlc3MpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgU291cmNlTWF0Y2hDb250cm9sbGVyOjpDbGVhclRhYmxlKHZvaWQpCit7CisgICAgb3RQbGF0UmFkaW9DbGVhclNyY01hdGNoU2hvcnRFbnRyaWVzKEdldEluc3RhbmNlKCkpOworICAgIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJpZXMoR2V0SW5zdGFuY2UoKSk7CisgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSBDbGVhcmVkIGFsbCBlbnRyaWVzIik7Cit9CisKK3ZvaWQgU291cmNlTWF0Y2hDb250cm9sbGVyOjpFbmFibGUoYm9vbCBhRW5hYmxlKQoreworICAgIG1FbmFibGVkID0gYUVuYWJsZTsKKyAgICBvdFBsYXRSYWRpb0VuYWJsZVNyY01hdGNoKEdldEluc3RhbmNlKCksIG1FbmFibGVkKTsKKyAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlNyY0FkZHJNYXRjaCAtICVzYWJsaW5nIiwgbUVuYWJsZWQgPyAiRW4iIDogIkRpcyIpOworfQorCit2b2lkIFNvdXJjZU1hdGNoQ29udHJvbGxlcjo6QWRkRW50cnkoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBhQ2hpbGQuU2V0SW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcodHJ1ZSk7CisKKyAgICBpZiAoIUlzRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChBZGRQZW5kaW5nRW50cmllcygpKTsKKyAgICAgICAgRW5hYmxlKHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQoQWRkQWRkcmVzcyhhQ2hpbGQpID09IE9UX0VSUk9SX05PTkUsIEVuYWJsZShmYWxzZSkpOworICAgICAgICBhQ2hpbGQuU2V0SW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcoZmFsc2UpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgU291cmNlTWF0Y2hDb250cm9sbGVyOjpBZGRBZGRyZXNzKGNvbnN0IENoaWxkICZhQ2hpbGQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoYUNoaWxkLklzSW5kaXJlY3RTb3VyY2VNYXRjaFNob3J0KCkpCisgICAgeworICAgICAgICBlcnJvciA9IG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hTaG9ydEVudHJ5KEdldEluc3RhbmNlKCksIGFDaGlsZC5HZXRSbG9jMTYoKSk7CisKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSBBZGRpbmcgc2hvcnQgYWRkcjogMHglMDR4IC0tICVzICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgYUNoaWxkLkdldFJsb2MxNigpLCBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpLCBlcnJvcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYWRkcltzaXplb2YoYUNoaWxkLkdldEV4dEFkZHJlc3MoKSldOworCisgICAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihhZGRyKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyW2ldID0gYUNoaWxkLkdldEV4dEFkZHJlc3MoKS5tOFtzaXplb2YoYWRkcikgLSAxIC0gaV07CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IG90UGxhdFJhZGlvQWRkU3JjTWF0Y2hFeHRFbnRyeShHZXRJbnN0YW5jZSgpLCBhZGRyKTsKKworICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlNyY0FkZHJNYXRjaCAtIEFkZGluZyBhZGRyOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLS0gJXMgKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICBhZGRyWzddLCBhZGRyWzZdLCBhZGRyWzVdLCBhZGRyWzRdLCBhZGRyWzNdLCBhZGRyWzJdLCBhZGRyWzFdLCBhZGRyWzBdLAorICAgICAgICAgICAgICAgICAgICAgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwgZXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBTb3VyY2VNYXRjaENvbnRyb2xsZXI6OkNsZWFyRW50cnkoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhQ2hpbGQuSXNJbmRpcmVjdFNvdXJjZU1hdGNoUGVuZGluZygpKQorICAgIHsKKyAgICAgICAgb3RMb2dEZWJnTWFjKEdldEluc3RhbmNlKCksICJTcmNBZGRyTWF0Y2ggLSBDbGVhcmluZyBwZW5kaW5nIGZsYWcgZm9yIDB4JTA0eCIsIGFDaGlsZC5HZXRSbG9jMTYoKSk7CisgICAgICAgIGFDaGlsZC5TZXRJbmRpcmVjdFNvdXJjZU1hdGNoUGVuZGluZyhmYWxzZSk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBpZiAoYUNoaWxkLklzSW5kaXJlY3RTb3VyY2VNYXRjaFNob3J0KCkpCisgICAgeworICAgICAgICBlcnJvciA9IG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkoR2V0SW5zdGFuY2UoKSwgYUNoaWxkLkdldFJsb2MxNigpKTsKKworICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlNyY0FkZHJNYXRjaCAtIENsZWFyaW5nIHNob3J0IGFkZHJlc3M6IDB4JTA0eCAtLSAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIGFDaGlsZC5HZXRSbG9jMTYoKSwgb3RUaHJlYWRFcnJvclRvU3RyaW5nKGVycm9yKSwgZXJyb3IpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50OF90IGFkZHJbc2l6ZW9mKGFDaGlsZC5HZXRFeHRBZGRyZXNzKCkpXTsKKworICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBzaXplb2YoYWRkcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgYWRkcltpXSA9IGFDaGlsZC5HZXRFeHRBZGRyZXNzKCkubThbc2l6ZW9mKGFDaGlsZC5HZXRFeHRBZGRyZXNzKCkpIC0gMSAtIGldOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IgPSBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyeShHZXRJbnN0YW5jZSgpLCBhZGRyKTsKKworICAgICAgICBvdExvZ0RlYmdNYWMoR2V0SW5zdGFuY2UoKSwgIlNyY0FkZHJNYXRjaCAtIENsZWFyaW5nIGFkZHI6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAtLSAlcyAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIGFkZHJbN10sIGFkZHJbNl0sIGFkZHJbNV0sIGFkZHJbNF0sIGFkZHJbM10sIGFkZHJbMl0sIGFkZHJbMV0sIGFkZHJbMF0sCisgICAgICAgICAgICAgICAgICAgICBvdFRocmVhZEVycm9yVG9TdHJpbmcoZXJyb3IpLCBlcnJvcik7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvcik7CisKKyAgICBpZiAoIUlzRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChBZGRQZW5kaW5nRW50cmllcygpKTsKKyAgICAgICAgRW5hYmxlKHRydWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK290RXJyb3IgU291cmNlTWF0Y2hDb250cm9sbGVyOjpBZGRQZW5kaW5nRW50cmllcyh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW47CisgICAgQ2hpbGQgKmNoaWxkOworCisgICAgY2hpbGQgPSBHZXRNZXNoRm9yd2FyZGVyKCkuR2V0TmV0aWYoKS5HZXRNbGUoKS5HZXRDaGlsZHJlbigmbnVtQ2hpbGRyZW4pOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47IGkrKywgY2hpbGQrKykKKyAgICB7CisgICAgICAgIGlmIChjaGlsZC0+SXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSAmJiBjaGlsZC0+SXNJbmRpcmVjdFNvdXJjZU1hdGNoUGVuZGluZygpKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gQWRkQWRkcmVzcygqY2hpbGQpKTsKKyAgICAgICAgICAgIGNoaWxkLT5TZXRJbmRpcmVjdFNvdXJjZU1hdGNoUGVuZGluZyhmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC9zcmNfbWF0Y2hfY29udHJvbGxlci5ocHAgYi9zcmMvY29yZS90aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjJkODAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvc3JjX21hdGNoX2NvbnRyb2xsZXIuaHBwCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3Igc291cmNlIGFkZHJlc3MgbWF0Y2ggY29udHJvbGxlci4KKyAqLworCisjaWZuZGVmIFNPVVJDRV9NQVRDSF9DT05UUk9MTEVSX0hQUF8KKyNkZWZpbmUgU09VUkNFX01BVENIX0NPTlRST0xMRVJfSFBQXworCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtc291cmNlLW1hdGNoLWNvbnRyb2xsZXIKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbiBmb3Igc291cmNlIGFkZHJlc3MgbWF0Y2ggY29udHJvbGxlci4KKyAqCisgKiBAeworICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSAic291cmNlIGFkZHJlc3MgbWF0Y2giIGNvbnRyb2xsZXIuCisgKgorICogVGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIGZlYXR1cmUgY29udHJvbHMgaG93IHRoZSByYWRpbyBsYXllciBkZWNpZGVzIHRoZSAiZnJhbWUgcGVuZGluZyIgYml0IGZvciBhY2tzIHNlbnQgaW4KKyAqIHJlc3BvbnNlIHRvIGRhdGEgcmVxdWVzdCBjb21tYW5kcyBmcm9tIHNsZWVweSBjaGlsZHJlbi4KKyAqCisgKiBUaGlzIGNsYXNzIHVwZGF0ZXMgdGhlIHNvdXJjZSBtYXRjaCB0YWJsZSBhbmQgYWxzbyBjb250cm9scyB3aGVuIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBzb3VyY2UgbWF0Y2hpbmcKKyAqIGZlYXR1cmUuCisgKgorICogVGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlIHByb3ZpZGVzIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGZvciB3aGljaCB0aGVyZSBpcyBhIHBlbmRpbmcgZnJhbWUuIEVpdGhlciBhIHNob3J0CisgKiBhZGRyZXNzIG9yIGFuIGV4dGVuZGVkL2xvbmcgYWRkcmVzcyBjYW4gYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBhZGRyZXNzIG1hdGNoIHRhYmxlLgorICoKKyAqLworY2xhc3MgU291cmNlTWF0Y2hDb250cm9sbGVyOiBwdWJsaWMgTWVzaEZvcndhcmRlckxvY2F0b3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzaEZvcndhcmRlciAgIEEgcmVmZXJlbmNlIHRvIHRoZSBNZXNoIEZvcndhcmRlci4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IFNvdXJjZU1hdGNoQ29udHJvbGxlcihNZXNoRm9yd2FyZGVyICZhTWVzaEZvcndhcmRlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNvdXJjZSBhZGRyZXNzIG1hdGNoaW5nLgorICAgICAqCisgICAgICogQHJldHVybnMgYHRydWVgIGlmIHNvdXJjZSBhZGRyZXNzIG1hdGNoaW5nIGlzIGVuYWJsZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0VuYWJsZWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUVuYWJsZWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluY3JlbWVudHMgdGhlIG1lc3NhZ2UgY291bnQgZm9yIGEgY2hpbGQgYW5kIHVwZGF0ZXMgdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50TWVzc2FnZUNvdW50KENoaWxkICZhQ2hpbGQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZGVjcmVtZW50cyB0aGUgbWVzc2FnZSBjb3VudCBmb3IgYSBjaGlsZCBhbmQgdXBkYXRlcyB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhQ2hpbGQgICAgQSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBEZWNyZW1lbnRNZXNzYWdlQ291bnQoQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIG1lc3NhZ2UgY291bnQgZm9yIGEgY2hpbGQgdG8gemVybyBhbmQgdXBkYXRlcyB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhQ2hpbGQgICAgQSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZXNldE1lc3NhZ2VDb3VudChDaGlsZCAmYUNoaWxkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgd2hldGhlciBvciBub3QgdG8gcGVyZm9ybSBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBvbiB0aGUgZXh0ZW5kZWQgb3Igc2hvcnQgYWRkcmVzcyBmb3IKKyAgICAgKiBhIGNoaWxkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhQ2hpbGQgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuCisgICAgICogQHBhcmFtW2luXSBhVXNlU2hvcnRBZGRyZXNzICBgdHJ1ZWAgdG8gbWF0Y2ggb24gc2hvcnQgc291cmNlIGFkZHJlc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTcmNNYXRjaEFzU2hvcnQoQ2hpbGQgJmFDaGlsZCwgYm9vbCBhVXNlU2hvcnRBZGRyZXNzKTsKKworcHJpdmF0ZToKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJUYWJsZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNvdXJjZSBtYXRjaGluZy4KKyAgICAgKgorICAgICAqIElmIGVuYWJsZWQsIHRoZSByYWRpbyB1c2VzIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2V0IG9yIGNsZWFyIHRoZSAiZnJhbWUgcGVuZGluZyIgYml0CisgICAgICogaW4gYW4gYWNrbm93bGVkZ21lbnQgdG8gYSBNQUMgRGF0YSBSZXF1ZXN0IGNvbW1hbmQuIElmIGRpc2FibGVkLCB0aGUgcmFkaW8gbGF5ZXIgc2V0cyB0aGUgImZyYW1lIHBlbmRpbmciIG9uIGFsbAorICAgICAqIGFja25vd2xlZGdtZW50IGZyYW1lcyBpbiByZXNwb25zZSB0byBNQUMgRGF0YSBSZXF1ZXN0IGNvbW1hbmRzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhRW5hYmxlICAgYHRydWVgIHRvIGVuYWJsZSwgYGZhbHNlYCB0byBkaXNhYmxlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBFbmFibGUoYm9vbCBhRW5hYmxlKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYW4gZW50cnkgdG8gc291cmNlIG1hdGNoIHRhYmxlIGZvciBhIGdpdmVuIGNoaWxkIGFuZCB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBzb3VyY2UgbWF0Y2hpbmcKKyAgICAgKiBmZWF0dXJlIGFjY29yZGluZ2x5LgorICAgICAqCisgICAgICogSWYgdGhlIGVudHJ5IGlzIGFkZGVkIHN1Y2Nlc3NmdWxseSwgc291cmNlIG1hdGNoaW5nIGZlYXR1cmUgaXMgZW5hYmxlZCAoaWYgbm90IGFscmVhZHkgZW5hYmxlZCkgYWZ0ZXIgZW5zdXJpbmcKKyAgICAgKiB0aGF0IHRoZXJlIGFyZSBubyByZW1haW5pbmcgcGVuZGluZyBlbnRyaWVzLiBJZiB0aGUgZW50cnkgY2Fubm90IGJlIGFkZGVkIChubyBzcGFjZSBpbiBzb3VyY2UgbWF0Y2ggdGFibGUpLAorICAgICAqIHRoZSBjaGlsZCBpcyBtYXJrZWQgdG8gcmVtZW1iZXIgdGhlIHBlbmRpbmcgZW50cnkgYW5kIHNvdXJjZSBtYXRjaGluZyBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQWRkRW50cnkoQ2hpbGQgJmFDaGlsZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYW4gZW50cnkgaW4gc291cmNlIG1hdGNoIHRhYmxlIGZvciBhIGdpdmVuIGNoaWxkIGFuZCB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBzb3VyY2UgbWF0Y2hpbmcKKyAgICAgKiBmZWF0dXJlIGFjY29yZGluZ2x5LgorICAgICAqCisgICAgICogSWYgdGhlIGVudHJ5IGlzIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBmcmVlcyB1cCBzcGFjZSBpbiB0aGUgc291cmNlIG1hdGNoIHRhYmxlLCBhbnkgcmVtYWluaW5nIHBlbmRpbmcKKyAgICAgKiBlbnRyaWVzIGFyZSBhZGRlZC4gSWYgYWxsIHBlbmRpbmcgZW50cmllcyBhcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkLCBzb3VyY2UgbWF0Y2hpbmcgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJFbnRyeShDaGlsZCAmYUNoaWxkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBnaXZlbiBjaGlsZCdzIGFkZHJlc3MgKHNob3J0IG9yIGV4dGVuZGVkIGFkZHJlc3MgZGVwZW5kaW5nIG9uIGNoaWxkJ3Mgc2V0dGluZykgdG8gdGhlIHNvdXJjZQorICAgICAqIHNvdXJjZSBtYXRjaCB0YWJsZSAoQHNhIFNldFNyY01hdGNoQXNTaG9ydC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgICAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIENoaWxkJ3MgYWRkcmVzcyB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBObyBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQWRkQWRkcmVzcyhjb25zdCBDaGlsZCAmYUNoaWxkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYWxsIHBlbmRpbmcgZW50cmllcyB0byB0aGUgc291cmNlIG1hdGNoIHRhYmxlLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBBbGwgcGVuZGluZyBlbnRyaWVzIHdlcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgTm8gYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEFkZFBlbmRpbmdFbnRyaWVzKHZvaWQpOworCisgICAgYm9vbCBtRW5hYmxlZDsKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gU09VUkNFX01BVENIX0NPTlRST0xMRVJfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF9uZXRpZi5jcHAgYi9zcmMvY29yZS90aHJlYWQvdGhyZWFkX25ldGlmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGM5MWFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF9uZXRpZi5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidGhyZWFkX25ldGlmLmhwcCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2VuY29kaW5nLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisjaW5jbHVkZSAibmV0L25ldGlmLmhwcCIKKyNpbmNsdWRlICJuZXQvdWRwNi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21sZS5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3RocmVhZF90bHZzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAiCisKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworCitzdGF0aWMgY29uc3Qgb3RNYXN0ZXJLZXkga1RocmVhZE1hc3RlcktleSA9Cit7CisgICAgeworICAgICAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAorICAgICAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmLAorICAgIH0KK307CisKK1RocmVhZE5ldGlmOjpUaHJlYWROZXRpZihJcDY6OklwNiAmYUlwNik6CisgICAgTmV0aWYoYUlwNiwgT1RfTkVUSUZfSU5URVJGQUNFX0lEX1RIUkVBRCksCisgICAgbUNvYXAoKnRoaXMpLAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgIG1EaGNwNkNsaWVudCgqdGhpcyksCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorICAgIG1EaGNwNlNlcnZlcigqdGhpcyksCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICBtRG5zQ2xpZW50KCp0aGlzKSwKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIG1BY3RpdmVEYXRhc2V0KCp0aGlzKSwKKyAgICBtUGVuZGluZ0RhdGFzZXQoKnRoaXMpLAorICAgIG1LZXlNYW5hZ2VyKCp0aGlzKSwKKyAgICBtTG93cGFuKCp0aGlzKSwKKyAgICBtTWFjKCp0aGlzKSwKKyAgICBtTWVzaEZvcndhcmRlcigqdGhpcyksCisgICAgbU1sZVJvdXRlcigqdGhpcyksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIG1OZXR3b3JrRGF0YUxvY2FsKCp0aGlzKSwKKyNlbmRpZgorICAgIG1OZXR3b3JrRGF0YUxlYWRlcigqdGhpcyksCisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworICAgIG1OZXR3b3JrRGlhZ25vc3RpYygqdGhpcyksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBtQ29tbWlzc2lvbmVyKCp0aGlzKSwKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworICAgIG1EdGxzKCp0aGlzKSwKKyAgICBtQ29hcFNlY3VyZSgqdGhpcyksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyAgICBtSm9pbmVyKCp0aGlzKSwKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIG1KYW1EZXRlY3RvcigqdGhpcyksCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVFRJT04KKyNpZiBPUEVOVEhSRUFEX0ZURAorI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWQorICAgIG1UbWZQcm94eShtTWxlUm91dGVyLkdldE1lc2hMb2NhbDE2KCksIG1Db2FwKSwKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkKKyAgICBtSm9pbmVyUm91dGVyKCp0aGlzKSwKKyAgICBtTGVhZGVyKCp0aGlzKSwKKyAgICBtQWRkcmVzc1Jlc29sdmVyKCp0aGlzKSwKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKyAgICBtQ2hpbGRTdXBlcnZpc29yKCp0aGlzKSwKKyAgICBtU3VwZXJ2aXNpb25MaXN0ZW5lcigqdGhpcyksCisgICAgbUFubm91bmNlQmVnaW4oKnRoaXMpLAorICAgIG1QYW5JZFF1ZXJ5KCp0aGlzKSwKKyAgICBtRW5lcmd5U2NhbigqdGhpcykKKworeworICAgIG1LZXlNYW5hZ2VyLlNldE1hc3RlcktleShrVGhyZWFkTWFzdGVyS2V5KTsKKyAgICBtQ29hcC5TZXRJbnRlcmNlcHRvcigmVGhyZWFkTmV0aWY6OlRtZkZpbHRlciwgdGhpcyk7Cit9CisKK290RXJyb3IgVGhyZWFkTmV0aWY6OlVwKHZvaWQpCit7CisgICAgaWYgKCFtSXNVcCkKKyAgICB7CisgICAgICAgIEdldElwNigpLkFkZE5ldGlmKCp0aGlzKTsKKyAgICAgICAgbU1lc2hGb3J3YXJkZXIuU3RhcnQoKTsKKyAgICAgICAgbUNvYXAuU3RhcnQoa0NvYXBVZHBQb3J0KTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgICAgIG1EbnNDbGllbnQuU3RhcnQoKTsKKyNlbmRpZgorICAgICAgICBtQ2hpbGRTdXBlcnZpc29yLlN0YXJ0KCk7CisgICAgICAgIG1NbGVSb3V0ZXIuRW5hYmxlKCk7CisgICAgICAgIG1Jc1VwID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBUaHJlYWROZXRpZjo6RG93bih2b2lkKQoreworICAgIG1Db2FwLlN0b3AoKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgbURuc0NsaWVudC5TdG9wKCk7CisjZW5kaWYKKyAgICBtQ2hpbGRTdXBlcnZpc29yLlN0b3AoKTsKKyAgICBtTWxlUm91dGVyLkRpc2FibGUoKTsKKyAgICBtTWVzaEZvcndhcmRlci5TdG9wKCk7CisgICAgR2V0SXA2KCkuUmVtb3ZlTmV0aWYoKnRoaXMpOworICAgIFJlbW92ZUFsbEV4dGVybmFsVW5pY2FzdEFkZHJlc3NlcygpOworICAgIFVuc3Vic2NyaWJlQWxsRXh0ZXJuYWxNdWx0aWNhc3RBZGRyZXNzZXMoKTsKKyAgICBtSXNVcCA9IGZhbHNlOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworICAgIG1EdGxzLlN0b3AoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgVGhyZWFkTmV0aWY6OkdldExpbmtBZGRyZXNzKElwNjo6TGlua0FkZHJlc3MgJmFkZHJlc3MpIGNvbnN0Cit7CisgICAgYWRkcmVzcy5tVHlwZSA9IElwNjo6TGlua0FkZHJlc3M6OmtFdWk2NDsKKyAgICBhZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoYWRkcmVzcy5tRXh0QWRkcmVzcyk7CisgICAgbWVtY3B5KCZhZGRyZXNzLm1FeHRBZGRyZXNzLCBtTWFjLkdldEV4dEFkZHJlc3MoKSwgYWRkcmVzcy5tTGVuZ3RoKTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBUaHJlYWROZXRpZjo6Um91dGVMb29rdXAoY29uc3QgSXA2OjpBZGRyZXNzICZzb3VyY2UsIGNvbnN0IElwNjo6QWRkcmVzcyAmZGVzdGluYXRpb24sIHVpbnQ4X3QgKnByZWZpeE1hdGNoKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgdWludDE2X3QgcmxvYzsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBtTmV0d29ya0RhdGFMZWFkZXIuUm91dGVMb29rdXAoc291cmNlLCBkZXN0aW5hdGlvbiwgcHJlZml4TWF0Y2gsICZybG9jKSk7CisKKyAgICBpZiAocmxvYyA9PSBtTWxlUm91dGVyLkdldFJsb2MxNigpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT19ST1VURTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIFRocmVhZE5ldGlmOjpUbWZGaWx0ZXIoY29uc3QgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBBIFRNRiBtZXNzYWdlIG11c3QgY29tcGx5IHdpdGggZm9sbG93aW5nIHJ1bGVzOgorICAgIC8vIDEuIFRoZSBkZXN0aW5hdGlvbiBpcyBhIE1lc2ggTG9jYWwgQWRkcmVzcyBvciBhIExpbmstTG9jYWwgTXVsdGljYXN0IEFkZHJlc3Mgb3IgYSBSZWFsbS1Mb2NhbCBNdWx0aWNhc3QgQWRkcmVzcywKKyAgICAvLyAgICBhbmQgdGhlIHNvdXJjZSBpcyBhIE1lc2ggTG9jYWwgQWRkcmVzcy4KKyAgICAvLyAyLiBCb3RoIHRoZSBkZXN0aW5hdGlvbiBhbmQgdGhlIHNvdXJjZSBhcmUgTGluay1Mb2NhbCBBZGRyZXNzZXMuCisgICAgVmVyaWZ5T3JFeGl0KCgoc3RhdGljX2Nhc3Q8VGhyZWFkTmV0aWYgKj4oYUNvbnRleHQpLT5tTWxlUm91dGVyLklzTWVzaExvY2FsQWRkcmVzcyhhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICBhTWVzc2FnZUluZm8uR2V0U29ja0FkZHIoKS5Jc0xpbmtMb2NhbE11bHRpY2FzdCgpIHx8CisgICAgICAgICAgICAgICAgICAgYU1lc3NhZ2VJbmZvLkdldFNvY2tBZGRyKCkuSXNSZWFsbUxvY2FsTXVsdGljYXN0KCkpICYmCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUaHJlYWROZXRpZiAqPihhQ29udGV4dCktPm1NbGVSb3V0ZXIuSXNNZXNoTG9jYWxBZGRyZXNzKGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpKSkgfHwKKyAgICAgICAgICAgICAgICAgKGFNZXNzYWdlSW5mby5HZXRTb2NrQWRkcigpLklzTGlua0xvY2FsKCkgJiYgYU1lc3NhZ2VJbmZvLkdldFBlZXJBZGRyKCkuSXNMaW5rTG9jYWwoKSksCisgICAgICAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9UX1RNRik7CitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTWVzc2FnZSk7CisgICAgcmV0dXJuIGVycm9yOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfbmV0aWYuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF9uZXRpZi5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiNjIxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfbmV0aWYuaHBwCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAqLworCisjaWZuZGVmIFRIUkVBRF9ORVRJRl9IUFBfCisjZGVmaW5lIFRIUkVBRF9ORVRJRl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwLmhwcCIKKyNpbmNsdWRlICJjb2FwL2NvYXBfc2VjdXJlLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorI2luY2x1ZGUgInRocmVhZC90bWZfcHJveHkuaHBwIgorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSAibWVzaGNvcC9jb21taXNzaW9uZXIuaHBwIgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKworI2luY2x1ZGUgIm1lc2hjb3AvZGF0YXNldF9tYW5hZ2VyLmhwcCIKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKyNpbmNsdWRlICJtZXNoY29wL2R0bHMuaHBwIgorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KT0lORVIKKyNpbmNsdWRlICJtZXNoY29wL2pvaW5lci5ocHAiCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCisjaW5jbHVkZSAibWVzaGNvcC9qb2luZXJfcm91dGVyLmhwcCIKKyNpbmNsdWRlICJtZXNoY29wL2xlYWRlci5ocHAiCisjaW5jbHVkZSAibmV0L2RoY3A2LmhwcCIKKyNpbmNsdWRlICJuZXQvZGhjcDZfY2xpZW50LmhwcCIKKyNpbmNsdWRlICJuZXQvZGhjcDZfc2VydmVyLmhwcCIKKyNpbmNsdWRlICJuZXQvZG5zX2NsaWVudC5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9maWx0ZXIuaHBwIgorI2luY2x1ZGUgIm5ldC9uZXRpZi5ocHAiCisjaW5jbHVkZSAidGhyZWFkL2FkZHJlc3NfcmVzb2x2ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9hbm5vdW5jZV9iZWdpbl9zZXJ2ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9lbmVyZ3lfc2Nhbl9zZXJ2ZXIuaHBwIgorI2luY2x1ZGUgInRocmVhZC9uZXR3b3JrX2RpYWdub3N0aWMuaHBwIgorI2luY2x1ZGUgInRocmVhZC9rZXlfbWFuYWdlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL21lc2hfZm9yd2FyZGVyLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvbWxlX3JvdXRlci5ocHAiCisjaW5jbHVkZSAidGhyZWFkL25ldHdvcmtfZGF0YV9sb2NhbC5ocHAiCisjaW5jbHVkZSAidGhyZWFkL3BhbmlkX3F1ZXJ5X3NlcnZlci5ocHAiCisjaW5jbHVkZSAidXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorI2luY2x1ZGUgInV0aWxzL2phbV9kZXRlY3Rvci5ocHAiCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBhZGR0b2dyb3VwIGNvcmUtbmV0aWYKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgKgorICogQHsKKyAqLworCitjbGFzcyBUaHJlYWROZXRpZjogcHVibGljIElwNjo6TmV0aWYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSXA2ICBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBuZXR3b3JrIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFRocmVhZE5ldGlmKElwNjo6SXA2ICZhSXA2KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgVXAodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkaXNhYmxlcyB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBEb3duKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UgaXMgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUaHJlYWQgbmV0d29yayBpbnRlcmZhY2UgaXMgZW5hYmxlZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG5vdCBlbmFibGVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1VwKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Jc1VwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGxpbmsgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtvdXRdICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIGxpbmsgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgb3RFcnJvciBHZXRMaW5rQWRkcmVzcyhJcDY6OkxpbmtBZGRyZXNzICZhQWRkcmVzcykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdWJtaXRzIGEgbWVzc2FnZSB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgIFN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgdGhlIG1lc3NhZ2UgdG8gdGhlIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgb3RFcnJvciBTZW5kTWVzc2FnZShNZXNzYWdlICZhTWVzc2FnZSkgeyByZXR1cm4gbU1lc2hGb3J3YXJkZXIuU2VuZE1lc3NhZ2UoYU1lc3NhZ2UpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBhIHJvdXRlIGxvb2t1cC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhU291cmNlICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbVtpbl0gICBhRGVzdGluYXRpb24gIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICogQHBhcmFtW291dF0gIGFQcmVmaXhNYXRjaCAgQSBwb2ludGVyIHdoZXJlIHRoZSBudW1iZXIgb2YgcHJlZml4IG1hdGNoIGJpdHMgZm9yIHRoZSBjaG9zZW4gcm91dGUgaXMgc3RvcmVkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIGEgcm91dGUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19ST1VURSAgQ291bGQgbm90IGZpbmQgYSB2YWxpZCByb3V0ZS4KKyAgICAgKgorICAgICAqLworICAgIHZpcnR1YWwgb3RFcnJvciBSb3V0ZUxvb2t1cChjb25zdCBJcDY6OkFkZHJlc3MgJmFTb3VyY2UsIGNvbnN0IElwNjo6QWRkcmVzcyAmYURlc3RpbmF0aW9uLCB1aW50OF90ICphUHJlZml4TWF0Y2gpOworCisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgZGlhZ25vc3RpYyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgYWRkcmVzcyByZXNvbHZlciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXR3b3JrRGlhZ25vc3RpYzo6TmV0d29ya0RpYWdub3N0aWMgJkdldE5ldHdvcmtEaWFnbm9zdGljKHZvaWQpIHsgcmV0dXJuIG1OZXR3b3JrRGlhZ25vc3RpYzsgfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRlREIHx8IE9QRU5USFJFQURfRU5BQkxFX01URF9ORVRXT1JLX0RJQUdOT1NUSUMKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X0NMSUVOVAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGRoY3AgY2xpZW50IG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBkaGNwIGNsaWVudCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBEaGNwNjo6RGhjcDZDbGllbnQgJkdldERoY3A2Q2xpZW50KHZvaWQpIHsgcmV0dXJuIG1EaGNwNkNsaWVudDsgfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9ESENQNl9DTElFTlQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RIQ1A2X1NFUlZFUgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGRoY3Agc2VydmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSB0aGUgZGhjcCBzZXJ2ZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgRGhjcDY6OkRoY3A2U2VydmVyICZHZXREaGNwNlNlcnZlcih2b2lkKSB7IHJldHVybiBtRGhjcDZTZXJ2ZXI7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ETlNfQ0xJRU5UCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZG5zIGNsaWVudCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgZG5zIGNsaWVudCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBEbnM6OkNsaWVudCAmR2V0RG5zQ2xpZW50KHZvaWQpIHsgcmV0dXJuIG1EbnNDbGllbnQ7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgQ29BUCBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgQ29BUCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBDb2FwOjpDb2FwICZHZXRDb2FwKHZvaWQpIHsgcmV0dXJuIG1Db2FwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGZpbHRlciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgSVB2NiBmaWx0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgSXA2OjpGaWx0ZXIgJkdldElwNkZpbHRlcih2b2lkKSB7IHJldHVybiBtSXA2RmlsdGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXkgbWFuYWdlciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUga2V5IG1hbmFnZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgS2V5TWFuYWdlciAmR2V0S2V5TWFuYWdlcih2b2lkKSB7IHJldHVybiBtS2V5TWFuYWdlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbG93cGFuIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBsb3dwYW4gb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTG93cGFuOjpMb3dwYW4gJkdldExvd3Bhbih2b2lkKSB7IHJldHVybiBtTG93cGFuOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBtYWMgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG1hYyBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNYWM6Ok1hYyAmR2V0TWFjKHZvaWQpIHsgcmV0dXJuIG1NYWM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG1sZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbWxlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1sZTo6TWxlUm91dGVyICZHZXRNbGUodm9pZCkgeyByZXR1cm4gbU1sZVJvdXRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbWVzaCBmb3J3YXJkZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG1lc2ggZm9yd2FyZGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hGb3J3YXJkZXIgJkdldE1lc2hGb3J3YXJkZXIodm9pZCkgeyByZXR1cm4gbU1lc2hGb3J3YXJkZXI7IH0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXR3b3JrIGRhdGEgbG9jYWwgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgZGF0YSBsb2NhbCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXR3b3JrRGF0YTo6TG9jYWwgJkdldE5ldHdvcmtEYXRhTG9jYWwodm9pZCkgeyByZXR1cm4gbU5ldHdvcmtEYXRhTG9jYWw7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBkYXRhIGxlYWRlciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgbmV0d29yayBkYXRhIGxlYWRlciBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBOZXR3b3JrRGF0YTo6TGVhZGVyICZHZXROZXR3b3JrRGF0YUxlYWRlcih2b2lkKSB7IHJldHVybiBtTmV0d29ya0RhdGFMZWFkZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSBkYXRhc2V0IG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgZGF0YXNldCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpBY3RpdmVEYXRhc2V0ICZHZXRBY3RpdmVEYXRhc2V0KHZvaWQpIHsgcmV0dXJuIG1BY3RpdmVEYXRhc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBwZW5kaW5nIGRhdGFzZXQgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIHBlbmRpbmcgZGF0YXNldCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBNZXNoQ29QOjpQZW5kaW5nRGF0YXNldCAmR2V0UGVuZGluZ0RhdGFzZXQodm9pZCkgeyByZXR1cm4gbVBlbmRpbmdEYXRhc2V0OyB9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGpvaW5lciByb3V0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGpvaW5lciByb3V0ZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWVzaENvUDo6Sm9pbmVyUm91dGVyICZHZXRKb2luZXJSb3V0ZXIodm9pZCkgeyByZXR1cm4gbUpvaW5lclJvdXRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgTWVzaENvUCBsZWFkZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIE1lc2hDb1AgbGVhZGVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hDb1A6OkxlYWRlciAmR2V0TGVhZGVyKHZvaWQpIHsgcmV0dXJuIG1MZWFkZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGFkZHJlc3MgcmVzb2x2ZXIgb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGFkZHJlc3MgcmVzb2x2ZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQWRkcmVzc1Jlc29sdmVyICZHZXRBZGRyZXNzUmVzb2x2ZXIodm9pZCkgeyByZXR1cm4gbUFkZHJlc3NSZXNvbHZlcjsgfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYW5ub3VuY2UgYmVnaW4gc2VydmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBhbm5vdW5jZSBiZWdpbiBzZXJ2ZXIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgQW5ub3VuY2VCZWdpblNlcnZlciAmR2V0QW5ub3VuY2VCZWdpblNlcnZlcih2b2lkKSB7IHJldHVybiBtQW5ub3VuY2VCZWdpbjsgfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29tbWlzc2lvbmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBjb21taXNzaW9lbnIgb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgTWVzaENvUDo6Q29tbWlzc2lvbmVyICZHZXRDb21taXNzaW9uZXIodm9pZCkgeyByZXR1cm4gbUNvbW1pc3Npb25lcjsgfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBEdGxzIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBEdGxzIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hDb1A6OkR0bHMgJkdldER0bHModm9pZCkgeyByZXR1cm4gbUR0bHM7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNlY3VyZSBDb0FQIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWN1cmUgQ29BUCBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBDb2FwOjpDb2FwU2VjdXJlICZHZXRDb2FwU2VjdXJlKHZvaWQpIHsgcmV0dXJuIG1Db2FwU2VjdXJlOyB9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0RUTFMKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGpvaW5lciBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgam9pbmVyIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIE1lc2hDb1A6OkpvaW5lciAmR2V0Sm9pbmVyKHZvaWQpIHsgcmV0dXJuIG1Kb2luZXI7IH0KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgamFtIGRldGVjdG9yIGluc3RhbmNlLgorICAgICAqCisgICAgICogQHJldHVybnMgUmVmZXJlbmNlIHRvIHRoZSBKYW1EZXRlY3RvciBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqLworICAgIFV0aWxzOjpKYW1EZXRlY3RvciAmR2V0SmFtRGV0ZWN0b3Iodm9pZCkgeyByZXR1cm4gbUphbURldGVjdG9yOyB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVE1GIHByb3h5IG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFJlZmVyZW5jZSB0byB0aGUgVE1GIHByb3h5IG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFRtZlByb3h5ICZHZXRUbWZQcm94eSh2b2lkKSB7IHJldHVybiBtVG1mUHJveHk7IH0KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHN1cGVydmlzb3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHN1cGVydmlzb3Igb2JqZWN0LgorICAgICAqCisgICAgICovCisgICAgVXRpbHM6OkNoaWxkU3VwZXJ2aXNvciAmR2V0Q2hpbGRTdXBlcnZpc29yKHZvaWQpIHsgcmV0dXJuIG1DaGlsZFN1cGVydmlzb3I7IH0KKworICAgIC8qKgorICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlcnZpc2lvbiBsaXN0ZW5lciBvYmplY3QuCisgICAgICAqCisgICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlcnZpc2lvbiBsaXN0ZW5lciBvYmplY3QuCisgICAgICAqCisgICAgICAqLworICAgIFV0aWxzOjpTdXBlcnZpc2lvbkxpc3RlbmVyICZHZXRTdXBlcnZpc2lvbkxpc3RlbmVyKHZvaWQpIHsgcmV0dXJuIG1TdXBlcnZpc2lvbkxpc3RlbmVyOyB9CisKKyAgICAvKioKKyAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZW5lcmd5IHNjYW4gc2VydmVyIG9iamVjdC4KKyAgICAgICoKKyAgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGVuZXJneSBzY2FuIHNlcnZlciBvYmplY3QuCisgICAgICAqCisgICAgICAqLworICAgIEVuZXJneVNjYW5TZXJ2ZXIgJkdldEVuZXJneVNjYW5TZXJ2ZXIodm9pZCkgeyByZXR1cm4gbUVuZXJneVNjYW47IH0KKworICAgIC8qKgorICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBQQU4gSUQgcXVlcnkgc2VydmVyIG9iamVjdC4KKyAgICAgICoKKyAgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIFBBTiBJRCBxdWVyeSBzZXJ2ZXIgb2JqZWN0LgorICAgICAgKgorICAgICAgKi8KKyAgICBQYW5JZFF1ZXJ5U2VydmVyICZHZXRQYW5JZFF1ZXJ5U2VydmVyKHZvaWQpIHsgcmV0dXJuIG1QYW5JZFF1ZXJ5OyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIG90RXJyb3IgVG1mRmlsdGVyKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICZhTWVzc2FnZUluZm8sIHZvaWQgKmFDb250ZXh0KTsKKworICAgIENvYXA6OkNvYXAgbUNvYXA7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisgICAgRGhjcDY6OkRoY3A2Q2xpZW50IG1EaGNwNkNsaWVudDsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfQ0xJRU5UCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSCisgICAgRGhjcDY6OkRoY3A2U2VydmVyIG1EaGNwNlNlcnZlcjsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfREhDUDZfU0VSVkVSCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRE5TX0NMSUVOVAorICAgIERuczo6Q2xpZW50IG1EbnNDbGllbnQ7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0ROU19DTElFTlQKKyAgICBNZXNoQ29QOjpBY3RpdmVEYXRhc2V0IG1BY3RpdmVEYXRhc2V0OworICAgIE1lc2hDb1A6OlBlbmRpbmdEYXRhc2V0IG1QZW5kaW5nRGF0YXNldDsKKyAgICBJcDY6OkZpbHRlciBtSXA2RmlsdGVyOworICAgIEtleU1hbmFnZXIgbUtleU1hbmFnZXI7CisgICAgTG93cGFuOjpMb3dwYW4gbUxvd3BhbjsKKyAgICBNYWM6Ok1hYyBtTWFjOworICAgIE1lc2hGb3J3YXJkZXIgbU1lc2hGb3J3YXJkZXI7CisgICAgTWxlOjpNbGVSb3V0ZXIgbU1sZVJvdXRlcjsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTmV0d29ya0RhdGE6OkxvY2FsIG1OZXR3b3JrRGF0YUxvY2FsOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTmV0d29ya0RhdGE6OkxlYWRlciBtTmV0d29ya0RhdGFMZWFkZXI7CisjaWYgT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworICAgIE5ldHdvcmtEaWFnbm9zdGljOjpOZXR3b3JrRGlhZ25vc3RpYyBtTmV0d29ya0RpYWdub3N0aWM7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgfHwgT1BFTlRIUkVBRF9FTkFCTEVfTVREX05FVFdPUktfRElBR05PU1RJQworICAgIGJvb2wgbUlzVXA7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBNZXNoQ29QOjpDb21taXNzaW9uZXIgbUNvbW1pc3Npb25lcjsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCisgICAgTWVzaENvUDo6RHRscyBtRHRsczsKKyAgICBDb2FwOjpDb2FwU2VjdXJlIG1Db2FwU2VjdXJlOworI2VuZGlmLy8gT1BFTlRIUkVBRF9FTkFCTEVfRFRMUworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSk9JTkVSCisgICAgTWVzaENvUDo6Sm9pbmVyIG1Kb2luZXI7CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0pPSU5FUgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorICAgIFV0aWxzOjpKYW1EZXRlY3RvciBtSmFtRGV0ZWN0b3I7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisgICAgVG1mUHJveHkgbVRtZlByb3h5OworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICBNZXNoQ29QOjpKb2luZXJSb3V0ZXIgbUpvaW5lclJvdXRlcjsKKyAgICBNZXNoQ29QOjpMZWFkZXIgbUxlYWRlcjsKKyAgICBBZGRyZXNzUmVzb2x2ZXIgbUFkZHJlc3NSZXNvbHZlcjsKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworICAgIFV0aWxzOjpDaGlsZFN1cGVydmlzb3IgbUNoaWxkU3VwZXJ2aXNvcjsKKyAgICBVdGlsczo6U3VwZXJ2aXNpb25MaXN0ZW5lciBtU3VwZXJ2aXNpb25MaXN0ZW5lcjsKKyAgICBBbm5vdW5jZUJlZ2luU2VydmVyIG1Bbm5vdW5jZUJlZ2luOworICAgIFBhbklkUXVlcnlTZXJ2ZXIgbVBhbklkUXVlcnk7CisgICAgRW5lcmd5U2NhblNlcnZlciBtRW5lcmd5U2NhbjsKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBUaHJlYWQtc3BlY2lmaWMgbGluayBpbmZvcm1hdGlvbi4KKyAqCisgKi8KK3N0cnVjdCBUaHJlYWRNZXNzYWdlSW5mbworeworICAgIHVpbnQxNl90IG1QYW5JZDsgICAgICAgICAvLy88IFNvdXJjZSBQQU4gSUQKKyAgICB1aW50OF90ICBtQ2hhbm5lbDsgICAgICAgLy8vPCA4MDIuMTUuNCBDaGFubmVsCisgICAgaW50OF90ICAgbVJzczsgICAgICAgICAgIC8vLzwgUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIGluIGRCbS4KKyAgICB1aW50OF90ICBtTHFpOyAgICAgICAgICAgLy8vPCBMaW5rIFF1YWxpdHkgSW5kaWNhdG9yIGZvciBhIHJlY2VpdmVkIG1lc3NhZ2UuCisgICAgYm9vbCAgICAgbUxpbmtTZWN1cml0eTsgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGxpbmsgc2VjdXJpdHkgaXMgZW5hYmxlZC4KK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBUSFJFQURfTkVUSUZfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF90bHZzLmhwcCBiL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfdGx2cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNGJhYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC90aHJlYWRfdGx2cy5ocHAKQEAgLTAsMCArMSw1MDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGFuZCBtZXRob2RzIGZvciBnZW5lcmF0aW5nIGFuZCBwcm9jZXNzaW5nIFRocmVhZCBOZXR3b3JrIExheWVyIFRMVnMuCisgKi8KKworI2lmbmRlZiBUSFJFQURfVExWU19IUFBfCisjZGVmaW5lIFRIUkVBRF9UTFZTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi9lbmNvZGluZy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90bHZzLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2FkZHJlc3MuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGUuaHBwIgorCit1c2luZyBvdDo6RW5jb2Rpbmc6OkJpZ0VuZGlhbjo6SG9zdFN3YXAxNjsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDMyOworCituYW1lc3BhY2Ugb3QgeworCitlbnVtCit7CisgICAga0NvYXBVZHBQb3J0ID0gNjE2MzEsCit9OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBOZXR3b3JrIExheWVyIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRocmVhZFRsdiA6IHB1YmxpYyBvdDo6VGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogTmV0d29yayBMYXllciBUTFYgVHlwZXMuCisgICAgICoKKyAgICAgKi8KKyAgICBlbnVtIFR5cGUKKyAgICB7CisgICAgICAgIGtUYXJnZXQgICAgICAgICAgICAgID0gMCwgIC8vLzwgVGFyZ2V0IEVJRCBUTFYKKyAgICAgICAga0V4dE1hY0FkZHJlc3MgICAgICAgPSAxLCAgLy8vPCBFeHRlbmRlZCBNQUMgQWRkcmVzcyBUTFYKKyAgICAgICAga1Jsb2MxNiAgICAgICAgICAgICAgPSAyLCAgLy8vPCBSTE9DMTYgVExWCisgICAgICAgIGtNZXNoTG9jYWxFaWQgICAgICAgID0gMywgIC8vLzwgTUwtRUlEIFRMVgorICAgICAgICBrU3RhdHVzICAgICAgICAgICAgICA9IDQsICAvLy88IFN0YXR1cyBUTFYKKyAgICAgICAga0xhc3RUcmFuc2FjdGlvblRpbWUgPSA2LCAgLy8vPCBUaW1lIFNpbmNlIExhc3QgVHJhbnNhY3Rpb24gVExWCisgICAgICAgIGtSb3V0ZXJNYXNrICAgICAgICAgID0gNywgIC8vLzwgUm91dGVyIE1hc2sgVExWCisgICAgICAgIGtORE9wdGlvbiAgICAgICAgICAgID0gOCwgIC8vLzwgTkQgT3B0aW9uIFRMVgorICAgICAgICBrTkREYXRhICAgICAgICAgICAgICA9IDksICAvLy88IE5EIERhdGEgVExWCisgICAgICAgIGtUaHJlYWROZXR3b3JrRGF0YSAgID0gMTAsIC8vLzwgVGhyZWFkIE5ldHdvcmsgRGF0YSBUTFYKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgVHlwZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBUeXBlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgVHlwZSBHZXRUeXBlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG90OjpUbHY6OkdldFR5cGUoKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVHlwZSAgVGhlIFR5cGUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFR5cGUoVHlwZSBhVHlwZSkgeyBvdDo6VGx2OjpTZXRUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFUeXBlKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgc3RhdGljIG1ldGhvZCByZWFkcyB0aGUgcmVxdWVzdGVkIFRMViBvdXQgb2YgQHAgYU1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtW2luXSAgIGFUeXBlICAgICAgIFRoZSBUeXBlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHBhcmFtW2luXSAgIGFNYXhMZW5ndGggIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgICAgICogQHBhcmFtW291dF0gIGFUbHYgICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBUTFYgdGhhdCB3aWxsIGJlIGNvcGllZCB0by4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgY29waWVkIHRoZSBUTFYuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIENvdWxkIG5vdCBmaW5kIHRoZSBUTFYgd2l0aCBUeXBlIEBwIGFUeXBlLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIG90RXJyb3IgR2V0VGx2KGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlLCBUeXBlIGFUeXBlLCB1aW50MTZfdCBhTWF4TGVuZ3RoLCBUbHYgJmFUbHYpIHsKKyAgICAgICAgcmV0dXJuIG90OjpUbHY6OkdldChhTWVzc2FnZSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYVR5cGUpLCBhTWF4TGVuZ3RoLCBhVGx2KTsKKyAgICB9CisKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUYXJnZXQgRUlEIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworT1RfVE9PTF9QQUNLRURfQkVHSU4KK2NsYXNzIFRocmVhZFRhcmdldFRsdjogcHVibGljIFRocmVhZFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtUYXJnZXQpOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBUYXJnZXQgRUlELgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBUYXJnZXQgRUlELgorICAgICAqCisgICAgICovCisgICAgY29uc3QgSXA2OjpBZGRyZXNzICpHZXRUYXJnZXQodm9pZCkgY29uc3QgeyByZXR1cm4gJm1UYXJnZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFRhcmdldCBFSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGFyZ2V0ICBBIHJlZmVyZW5jZSB0byB0aGUgVGFyZ2V0IEVJRC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGFyZ2V0KGNvbnN0IElwNjo6QWRkcmVzcyAmYVRhcmdldCkgeyBtVGFyZ2V0ID0gYVRhcmdldDsgfQorCitwcml2YXRlOgorICAgIElwNjo6QWRkcmVzcyBtVGFyZ2V0OworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIEV4dGVuZGVkIE1BQyBBZGRyZXNzIFRMViBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLgorICoKKyAqLworY2xhc3MgVGhyZWFkRXh0TWFjQWRkcmVzc1RsdjogcHVibGljIFRocmVhZFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtFeHRNYWNBZGRyZXNzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgRXh0ZW5kZWQgTUFDIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgTWFjOjpFeHRBZGRyZXNzICpHZXRNYWNBZGRyKHZvaWQpIGNvbnN0IHsgcmV0dXJuICZtTWFjQWRkcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgRXh0ZW5kZWQgTUFDIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgQSByZWZlcmVuY2UgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYWNBZGRyKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpIHsgbU1hY0FkZHIgPSBhQWRkcmVzczsgfQorCitwcml2YXRlOgorICAgIE1hYzo6RXh0QWRkcmVzcyBtTWFjQWRkcjsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFJMT0MxNiBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaHJlYWRSbG9jMTZUbHY6IHB1YmxpYyBUaHJlYWRUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrUmxvYzE2KTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYzE2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEhvc3RTd2FwMTYobVJsb2MxNik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2MxNih1aW50MTZfdCBhUmxvYzE2KSB7IG1SbG9jMTYgPSBIb3N0U3dhcDE2KGFSbG9jMTYpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbVJsb2MxNjsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBNTC1FSUQgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGhyZWFkTWVzaExvY2FsRWlkVGx2OiBwdWJsaWMgVGhyZWFkVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa01lc2hMb2NhbEVpZCk7IFNldExlbmd0aChzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdikpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICAgSWYgdGhlIFRMViBhcHBlYXJzIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqIEByZXR2YWwgRkFMU0UgIElmIHRoZSBUTFYgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHdlbGwtZm9ybWVkLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1ZhbGlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIEdldExlbmd0aCgpID09IHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE1MLUVJRCBJSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gdGhlIEV4dGVuZGVkIE1BQyBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgY29uc3QgdWludDhfdCAqR2V0SWlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JaWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIE1MLUVJRCBJSUQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSWlkICBBIHBvaW50ZXIgdG8gdGhlIE1MLUVJRCBJSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElpZChjb25zdCB1aW50OF90ICphSWlkKSB7IG1lbWNweShtSWlkLCBhSWlkLCBzaXplb2YobUlpZCkpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBNTC1FSUQgSUlELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUV4dEFkZHJlc3MgIEEgcmVmZXJlbmNlIHRvIHRoZSBNQUMgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SWlkKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUV4dEFkZHJlc3MpIHsKKyAgICAgICAgbWVtY3B5KG1JaWQsIGFFeHRBZGRyZXNzLm04LCBzaXplb2YobUlpZCkpOworICAgICAgICBtSWlkWzBdIF49IDB4MjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtSWlkWzhdOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFN0YXR1cyBUTFYgZ2VuZXJhdGlvbiBhbmQgcGFyc2luZy4KKyAqCisgKi8KK09UX1RPT0xfUEFDS0VEX0JFR0lOCitjbGFzcyBUaHJlYWRTdGF0dXNUbHY6IHB1YmxpYyBUaHJlYWRUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrU3RhdHVzKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBTdGF0dXMgdmFsdWVzLgorICAgICAqCisgICAgICovCisgICAgZW51bSBTdGF0dXMKKyAgICB7CisgICAgICAgIGtTdWNjZXNzICAgICAgICAgICAgPSAwLCAgLy8vPCBTdWNjZXNzLgorICAgICAgICBrTm9BZGRyZXNzQXZhaWxhYmxlID0gMSwgIC8vLzwgTm8gYWRkcmVzcyBhdmFpbGFibGUuCisgICAgICAgIGtUb29GZXdSb3V0ZXJzICAgICAgPSAyLCAgLy8vPCBBZGRyZXNzIFNvbGljaXQgZHVlIHRvIHRvbyBmZXcgcm91dGVycy4KKyAgICAgICAga0hhdmVDaGlsZElkUmVxdWVzdCA9IDMsICAvLy88IEFkZHJlc3MgU29saWNpdCBkdWUgdG8gY2hpbGQgSUQgcmVxdWVzdC4KKyAgICAgICAga1BhcmVudFBhcnRpdGlvbkNoYW5nZSA9IDQsICAvLy88IEFkZHJlc3MgU29saWNpdCBkdWUgdG8gcGFyZW50IHBhcnRpdGlvbiBjaGFuZ2UKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIFN0YXR1cyBHZXRTdGF0dXModm9pZCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPihtU3RhdHVzKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgU3RhdHVzIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVN0YXR1cyAgVGhlIFN0YXR1cyB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0U3RhdHVzKFN0YXR1cyBhU3RhdHVzKSB7IG1TdGF0dXMgPSBzdGF0aWNfY2FzdDx1aW50OF90PihhU3RhdHVzKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbVN0YXR1czsKK30gT1RfVE9PTF9QQUNLRURfRU5EOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBUaW1lIFNpbmNlIExhc3QgVHJhbnNhY3Rpb24gVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGhyZWFkTGFzdFRyYW5zYWN0aW9uVGltZVRsdjogcHVibGljIFRocmVhZFRsdgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBUTFYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEluaXQodm9pZCkgeyBTZXRUeXBlKGtMYXN0VHJhbnNhY3Rpb25UaW1lKTsgU2V0TGVuZ3RoKHNpemVvZigqdGhpcykgLSBzaXplb2YoVGhyZWFkVGx2KSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIFRSVUUgICBJZiB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICogQHJldHZhbCBGQUxTRSAgSWYgdGhlIFRMViBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBMYXN0IFRyYW5zYWN0aW9uIFRpbWUgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGFzdCBUcmFuc2FjdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0VGltZSh2b2lkKSBjb25zdCB7IHJldHVybiBIb3N0U3dhcDMyKG1UaW1lKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTGFzdCBUcmFuc2FjdGlvbiBUaW1lIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRpbWUgIFRoZSBMYXN0IFRyYW5zYWN0aW9uIFRpbWUgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWUodWludDMyX3QgYVRpbWUpIHsgbVRpbWUgPSBIb3N0U3dhcDMyKGFUaW1lKTsgfQorCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1UaW1lOworfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgUm91dGVyIE1hc2sgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitjbGFzcyBUaHJlYWRSb3V0ZXJNYXNrVGx2OiBwdWJsaWMgVGhyZWFkVGx2Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFRMVi4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5pdCh2b2lkKSB7IFNldFR5cGUoa1JvdXRlck1hc2spOyBTZXRMZW5ndGgoc2l6ZW9mKCp0aGlzKSAtIHNpemVvZihUaHJlYWRUbHYpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBUTFYgYXBwZWFycyB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgVExWIGRvZXMgbm90IGFwcGVhciB0byBiZSB3ZWxsLWZvcm1lZC4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNWYWxpZCh2b2lkKSBjb25zdCB7IHJldHVybiBHZXRMZW5ndGgoKSA9PSBzaXplb2YoKnRoaXMpIC0gc2l6ZW9mKFRocmVhZFRsdik7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRJZFNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JZFNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRCBTZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTZXF1ZW5jZSAgVGhlIElEIFNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJZFNlcXVlbmNlKHVpbnQ4X3QgYVNlcXVlbmNlKSB7IG1JZFNlcXVlbmNlID0gYVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIEFzc2lnbmVkIFJvdXRlciBJRCBNYXNrLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckFzc2lnbmVkUm91dGVySWRNYXNrKHZvaWQpIHsgbWVtc2V0KG1Bc3NpZ25lZFJvdXRlcklkTWFzaywgMCwgc2l6ZW9mKG1Bc3NpZ25lZFJvdXRlcklkTWFzaykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYSBnaXZlbiBSb3V0ZXIgSUQgaXMgc2V0IGluIHRoZSBBc3NpZ25lZCBSb3V0ZXIgSUQgTWFzay4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSb3V0ZXJJZCAgVGhlIFJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgVFJVRSAgIElmIHRoZSBnaXZlbiBSb3V0ZXIgSUQgaXMgc2V0IGluIHRoZSBBc3NpZ25lZCBSb3V0ZXIgSUQgTWFzay4KKyAgICAgKiBAcmV0dmFsIEZBTFNFICBJZiB0aGUgZ2l2ZW4gUm91dGVyIElEIGlzIG5vdCBzZXQgaW4gdGhlIEFzc2lnbmVkIFJvdXRlciBJRCBNYXNrLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0Fzc2lnbmVkUm91dGVySWRTZXQodWludDhfdCBhUm91dGVySWQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChtQXNzaWduZWRSb3V0ZXJJZE1hc2tbYVJvdXRlcklkIC8gOF0gJiAoMHg4MCA+PiAoYVJvdXRlcklkICUgOCkpKSAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyB0aGUgQXNzaWduZWQgUm91dGVyIElEIE1hc2suCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUm91dGVySWQgIFRoZSBSb3V0ZXIgSUQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEFzc2lnbmVkUm91dGVySWQodWludDhfdCBhUm91dGVySWQpIHsgbUFzc2lnbmVkUm91dGVySWRNYXNrW2FSb3V0ZXJJZCAvIDhdIHw9IDB4ODAgPj4gKGFSb3V0ZXJJZCAlIDgpOyB9CisKK3ByaXZhdGU6CisgICAgdWludDhfdCBtSWRTZXF1ZW5jZTsKKyAgICB1aW50OF90IG1Bc3NpZ25lZFJvdXRlcklkTWFza1tCaXRWZWN0b3JCeXRlcyhNbGU6OmtNYXhSb3V0ZXJJZCArIDEpXTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFRocmVhZCBOZXR3b3JrIERhdGEgVExWIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuCisgKgorICovCitPVF9UT09MX1BBQ0tFRF9CRUdJTgorY2xhc3MgVGhyZWFkTmV0d29ya0RhdGFUbHY6IHB1YmxpYyBUaHJlYWRUbHYKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgVExWLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBJbml0KHZvaWQpIHsgU2V0VHlwZShrVGhyZWFkTmV0d29ya0RhdGEpOyBTZXRMZW5ndGgoMCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIG92ZXJyaWRlcyBzYW1lIG1ldGhvZCBvZiB0aGUgYmFzZSBjbGFzcworICAgICAqCisgICAgICogQHJldHZhbCBUUlVFICB0aGUgVExWIGFwcGVhcnMgdG8gYmUgd2VsbC1mb3JtZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzVmFsaWQodm9pZCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgRGF0YSBUTFZzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIERhdGEgVExWcy4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgKkdldFRsdnModm9pZCkgeyByZXR1cm4gbVRsdnM7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4U2l6ZSA9IDI1NSwKKyAgICB9OworCisgICAgdWludDhfdCBtVGx2c1trTWF4U2l6ZV07Cit9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVEhSRUFEX1RMVlNfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL3RocmVhZF91cmlfcGF0aHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MGY0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvdGhyZWFkX3VyaV9wYXRocy5ocHAKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIGRlZmluaXRpb25zIGZvciBUaHJlYWQgVVJJcy4KKyAqLworCisjaWZuZGVmIFRIUkVBRF9VUklTX0hQUF8KKyNkZWZpbmUgVEhSRUFEX1VSSVNfSFBQXworCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIFRoZSBVUkkgUGF0aCBmb3IgQWRkcmVzcyBRdWVyeS4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQUREUkVTU19RVUVSWSAgICAgICAgICAiYS9hcSIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0FERFJFU1NfTk9USUZZCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBBZGRyZXNzIE5vdGlmeS4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQUREUkVTU19OT1RJRlkgICAgICAgICAiYS9hbiIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0FERFJFU1NfRVJST1IKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIEFkZHJlc3MgRXJyb3IuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0FERFJFU1NfRVJST1IgICAgICAgICAgImEvYWUiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9BRERSRVNTX1JFTEVBU0UKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIEFkZHJlc3MgUmVsZWFzZS4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQUREUkVTU19SRUxFQVNFICAgICAgICAiYS9hciIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0FERFJFU1NfU09MSUNJVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgQWRkcmVzcyBTb2xpY2l0LgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9BRERSRVNTX1NPTElDSVQgICAgICAgICJhL2FzIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfQUNUSVZFX0dFVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTUdNVF9BQ1RJVkVfR0VUCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0FDVElWRV9HRVQgICAgICAgICAgICAgImMvYWciCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9BQ1RJVkVfU0VUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBNR01UX0FDVElWRV9TRVQKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQUNUSVZFX1NFVCAgICAgICAgICAgICAiYy9hcyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0RBVEFTRVRfQ0hBTkdFRAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTUdNVF9EQVRBU0VUX0NIQU5HRUQKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfREFUQVNFVF9DSEFOR0VEICAgICAgICAiYy9kYyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0VORVJHWV9TQ0FOCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBFbmVyZ3kgU2NhbgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9FTkVSR1lfU0NBTiAgICAgICAgICAgICJjL2VzIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfRU5FUkdZX1JFUE9SVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgRW5lcmd5IFJlcG9ydAorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9FTkVSR1lfUkVQT1JUICAgICAgICAgICJjL2VyIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfUEVORElOR19HRVQKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIE1HTVRfUEVORElOR19HRVQKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfUEVORElOR19HRVQgICAgICAgICAgICAiYy9wZyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX1BFTkRJTkdfU0VUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBNR01UX1BFTkRJTkdfU0VUCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX1BFTkRJTkdfU0VUICAgICAgICAgICAgImMvcHMiCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9TRVJWRVJfREFUQQorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgU2VydmVyIERhdGEgUmVnaXN0cmF0aW9uLgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9TRVJWRVJfREFUQSAgICAgICAgICAgICJhL3NkIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfQU5OT1VOQ0VfQkVHSU4KKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIEFubm91bmNlIEJlZ2luLgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9BTk5PVU5DRV9CRUdJTiAgICAgICAgICJjL2FiIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfUkVMQVlfUlgKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIFJlbGF5IFJYLgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9SRUxBWV9SWCAgICAgICAgICAgICAgICJjL3J4IgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfUkVMQVlfVFgKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIFJlbGF5IFRYLgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9SRUxBWV9UWCAgICAgICAgICAgICAgICJjL3R4IgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfSk9JTkVSX0ZJTkFMSVpFCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBKb2luZXIgRmluYWxpemUKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfSk9JTkVSX0ZJTkFMSVpFICAgICAgICAiYy9qZiIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0pPSU5FUl9FTlRSVVNUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBKb2luZXIgRW50cnVzdAorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9KT0lORVJfRU5UUlVTVCAgICAgICAgICJjL2plIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfTEVBREVSX1BFVElUSU9OCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBMZWFkZXIgUGV0aXRpb24KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfTEVBREVSX1BFVElUSU9OICAgICAgICAiYy9scCIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0xFQURFUl9LRUVQX0FMSVZFCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBMZWFkZXIgS2VlcCBBbGl2ZQorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9MRUFERVJfS0VFUF9BTElWRSAgICAgICJjL2xhIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfUEFOSURfQ09ORkxJQ1QKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIFBBTiBJRCBDb25mbGljdAorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9QQU5JRF9DT05GTElDVCAgICAgICAgICJjL3BjIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfUEFOSURfUVVFUlkKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIFBBTiBJRCBRdWVyeQorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9QQU5JRF9RVUVSWSAgICAgICAgICAgICJjL3BxIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfQ09NTUlTU0lPTkVSX0dFVAorICoKKyAqIFRoZSBVUkkgUGF0aCBmb3IgTUdNVF9DT01NSVNTSU9ORVJfR0VUCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0NPTU1JU1NJT05FUl9HRVQgICAgICAgImMvY2ciCisKKy8qKgorICogQGRlZiBPVF9VUklfUEFUSF9DT01NSVNTSU9ORVJfU0VUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBNR01UX0NPTU1JU1NJT05FUl9TRVQKKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfQ09NTUlTU0lPTkVSX1NFVCAgICAgICAiYy9jcyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX1JFUVVFU1QKKyAqCisgKiBUaGUgVVJJIFBhdGggZm9yIE5ldHdvcmsgRGlhZ25vc3RpYyBHZXQgUmVxdWVzdC4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfUkVRVUVTVCAiZC9kZyIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfR0VUX1FVRVJZCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBOZXR3b3JrIERpYWdub3N0aWMgR2V0IFF1ZXJ5LgorICoKKyAqLworI2RlZmluZSBPVF9VUklfUEFUSF9ESUFHTk9TVElDX0dFVF9RVUVSWSAgICJkL2RxIgorCisvKioKKyAqIEBkZWYgT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfQU5TV0VSCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBOZXR3b3JrIERpYWdub3N0aWMgR2V0IEFuc3dlci4KKyAqCisgKi8KKyNkZWZpbmUgT1RfVVJJX1BBVEhfRElBR05PU1RJQ19HRVRfQU5TV0VSICAiZC9kYSIKKworLyoqCisgKiBAZGVmIE9UX1VSSV9QQVRIX0RJQUdfUlNUCisgKgorICogVGhlIFVSSSBQYXRoIGZvciBOZXR3b3JrIERpYWdub3N0aWMgUmVzZXQuCisgKgorICovCisjZGVmaW5lIE9UX1VSSV9QQVRIX0RJQUdOT1NUSUNfUkVTRVQgICAgICAgImQvZHIiCisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRIUkVBRF9VUklTX0hQUF8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3RocmVhZC90bWZfcHJveHkuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL3RtZl9wcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5M2I1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3RocmVhZC90bWZfcHJveHkuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBUTUYgcHJveHkuCisgKi8KKworI2RlZmluZSBXUFBfTkFNRSAidG1mX3Byb3h5LnRtaCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJ0bWZfcHJveHkuaHBwIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAiY29hcC9jb2FwX2hlYWRlci5ocHAiCisjaW5jbHVkZSAibmV0L2lwNl9hZGRyZXNzLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX3RsdnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfdXJpX3BhdGhzLmhwcCIKKworI2lmIE9QRU5USFJFQURfRlREICYmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWQorCituYW1lc3BhY2Ugb3QgeworCitUbWZQcm94eTo6VG1mUHJveHkoY29uc3QgSXA2OjpBZGRyZXNzICZhTWVzaExvY2FsMTYsIENvYXA6OkNvYXAgJmFDb2FwKToKKyAgICBtUmVsYXlSZWNlaXZlKE9UX1VSSV9QQVRIX1JFTEFZX1JYLCAmVG1mUHJveHk6OkhhbmRsZVJlbGF5UmVjZWl2ZSwgdGhpcyksCisgICAgbVN0cmVhbUhhbmRsZXIoTlVMTCksCisgICAgbUNvbnRleHQoTlVMTCksCisgICAgbU1lc2hMb2NhbDE2KGFNZXNoTG9jYWwxNiksCisgICAgbUNvYXAoYUNvYXApCit7Cit9CisKK290RXJyb3IgVG1mUHJveHk6OlN0YXJ0KG90VG1mUHJveHlTdHJlYW1IYW5kbGVyIGFTdHJlYW1IYW5kbGVyLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdCghbVN0cmVhbUhhbmRsZXIsIGVycm9yID0gT1RfRVJST1JfQUxSRUFEWSk7CisKKyAgICBtQ29hcC5BZGRSZXNvdXJjZShtUmVsYXlSZWNlaXZlKTsKKyAgICBtU3RyZWFtSGFuZGxlciA9IGFTdHJlYW1IYW5kbGVyOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIFRtZlByb3h5OjpTdG9wKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQobVN0cmVhbUhhbmRsZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9BTFJFQURZKTsKKworICAgIG1Db2FwLlJlbW92ZVJlc291cmNlKG1SZWxheVJlY2VpdmUpOworCisgICAgbVN0cmVhbUhhbmRsZXIgPSBOVUxMOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworYm9vbCBUbWZQcm94eTo6SXNFbmFibGVkKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdHJlYW1IYW5kbGVyICE9IE5VTEw7Cit9CisKK3ZvaWQgVG1mUHJveHk6OkhhbmRsZVJlbGF5UmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90TWVzc2FnZUluZm8gKmFNZXNzYWdlSW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxUbWZQcm94eSAqPihhQ29udGV4dCktPkRlbGl2ZXJNZXNzYWdlKAorICAgICAgICAqc3RhdGljX2Nhc3Q8Q29hcDo6SGVhZGVyICo+KGFIZWFkZXIpLCAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICpzdGF0aWNfY2FzdDxjb25zdCBJcDY6Ok1lc3NhZ2VJbmZvICo+KGFNZXNzYWdlSW5mbykpOworfQorCit2b2lkIFRtZlByb3h5OjpIYW5kbGVSZXNwb25zZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RNZXNzYWdlSW5mbyAqYU1lc3NhZ2VJbmZvLCBvdEVycm9yIGFSZXN1bHQpCit7CisgICAgVmVyaWZ5T3JFeGl0KGFSZXN1bHQgPT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBzdGF0aWNfY2FzdDxUbWZQcm94eSAqPihhQ29udGV4dCktPkRlbGl2ZXJNZXNzYWdlKCpzdGF0aWNfY2FzdDxDb2FwOjpIZWFkZXIgKj4oYUhlYWRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8TWVzc2FnZSAqPihhTWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8Y29uc3QgSXA2OjpNZXNzYWdlSW5mbyAqPihhTWVzc2FnZUluZm8pKTsKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIFRtZlByb3h5OjpEZWxpdmVyTWVzc2FnZShDb2FwOjpIZWFkZXIgJmFIZWFkZXIsIE1lc3NhZ2UgJmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSXA2OjpNZXNzYWdlSW5mbyAmYU1lc3NhZ2VJbmZvKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IHJsb2M7CisgICAgdWludDE2X3QgcG9ydDsKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICAgIFZlcmlmeU9yRXhpdChtU3RyZWFtSGFuZGxlciAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgVmVyaWZ5T3JFeGl0KChtZXNzYWdlID0gYU1lc3NhZ2UuQ2xvbmUoKSkgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKyAgICBtZXNzYWdlLT5SZW1vdmVIZWFkZXIobWVzc2FnZS0+R2V0T2Zmc2V0KCkgLSBhSGVhZGVyLkdldExlbmd0aCgpKTsKKworICAgIHJsb2MgPSBIb3N0U3dhcDE2KGFNZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddKTsKKyAgICBwb3J0ID0gYU1lc3NhZ2VJbmZvLkdldFBlZXJQb3J0KCk7CisgICAgbVN0cmVhbUhhbmRsZXIobWVzc2FnZSwgcmxvYywgcG9ydCwgbUNvbnRleHQpOworCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUgJiYgbWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKworb3RFcnJvciBUbWZQcm94eTo6U2VuZChNZXNzYWdlICZhTWVzc2FnZSwgdWludDE2X3QgYUxvY2F0b3IsIHVpbnQxNl90IGFQb3J0KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIElwNjo6TWVzc2FnZUluZm8gbWVzc2FnZUluZm87CisKKyAgICBWZXJpZnlPckV4aXQobVN0cmVhbUhhbmRsZXIgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG1lc3NhZ2VJbmZvLlNldFNvY2tBZGRyKG1NZXNoTG9jYWwxNik7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlckFkZHIobU1lc2hMb2NhbDE2KTsKKyAgICBtZXNzYWdlSW5mby5HZXRQZWVyQWRkcigpLm1GaWVsZHMubTE2WzddID0gSG9zdFN3YXAxNihhTG9jYXRvcik7CisgICAgbWVzc2FnZUluZm8uU2V0UGVlclBvcnQoYVBvcnQpOworCisgICAgaWYgKGFQb3J0ID09IGtDb2FwVWRwUG9ydCkKKyAgICB7CisgICAgICAgIC8vIHRoaXMgaXMgcmVxdWVzdCB0byBzZXJ2ZXIsIHNlbmQgd2l0aCBjbGllbnQKKyAgICAgICAgZXJyb3IgPSBtQ29hcC5TZW5kTWVzc2FnZShhTWVzc2FnZSwgbWVzc2FnZUluZm8sIFRtZlByb3h5OjpIYW5kbGVSZXNwb25zZSwgdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gbUNvYXAuU2VuZE1lc3NhZ2UoYU1lc3NhZ2UsIG1lc3NhZ2VJbmZvKTsKKyAgICB9CisKK2V4aXQ6CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGFNZXNzYWdlLkZyZWUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQgJiYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvdG1mX3Byb3h5LmhwcCBiL3NyYy9jb3JlL3RocmVhZC90bWZfcHJveHkuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZGYyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS90aHJlYWQvdG1mX3Byb3h5LmhwcApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRNRiBwcm94eS4KKyAqLworCisjaWZuZGVmIFRNRl9QUk9YWV9IUFBfCisjZGVmaW5lIFRNRl9QUk9YWV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL3RtZl9wcm94eS5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvYXAvY29hcC5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRtZlByb3h5Cit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgVE1GIHByb3h5LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgIGFNZXNoTG9jYWwxNiAgICBBIHJlZmVyZW5jZSB0byB0aGUgTWVzaCBMb2NhbCBSb3V0aW5nIExvY2F0b3IuCisgICAgICogQHBhcmFtW2luXSAgIGFDb2FwICAgICAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgTWFuYWdlbWVudCBDb0FQIFNlcnZpY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBUbWZQcm94eShjb25zdCBJcDY6OkFkZHJlc3MgJmFNZXNoTG9jYWwxNiwgQ29hcDo6Q29hcCAmYUNvYXApOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5hYmxlcyB0aGUgVE1GIHByb3h5IHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgc2VydmljZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0FMUkVBRFkgICAgICAgICBUaGUgc2VydmljZSBhbHJlYWR5IHN0YXJ0ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KG90VG1mUHJveHlTdHJlYW1IYW5kbGVyIGFTdHJlYW1IYW5kbGVyLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBkaXNhYmxlcyB0aGUgVE1GIHByb3h5IHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICBTdWNjZXNzZnVsbHkgc3RvcHBlZCB0aGUgVE1GIHByb3h5IHNlcnZpY2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9BTFJFQURZICAgICAgICAgVGhlIHNlcnZpY2UgYWxyZWFkeSBzdG9wcGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgdGhlIG1lc3NhZ2UgaW50byB0aGUgdGhyZWFkIG5ldHdvcmsuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgYU1lc3NhZ2UgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgdG8gc2VuZC4KKyAgICAgKiBAcGFyYW1baW5dICAgYUxvY2F0b3IgICAgVGhlIGRlc3RpbmF0aW9uJ3MgUkxPQzE2IG9yIEFMT0MxNi4KKyAgICAgKiBAcGFyYW1baW5dICAgYVBvcnQgICAgICAgVGhlIGRlc3RpbmF0aW9uIHBvcnQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIG1lc3NhZ2UuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX1NUQVRFICAgIEJvcmRlciBhZ2VudCBwcm94eSBpcyBub3Qgc3RhcnRlZC4KKyAgICAgKgorICAgICAqIEB3YXJuaW5nIE5vIG1hdHRlciB0aGUgY2FsbCBzdWNjZXNzIG9yIGZhaWwsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTZW5kKE1lc3NhZ2UgJmFNZXNzYWdlLCB1aW50MTZfdCBhTG9jYXRvciwgdWludDE2X3QgYVBvcnQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUTUYgcHJveHkgc2VydmljZSBpcyBlbmFibGVkLgorICAgICAqCisgICAgICogQHJldHZhbCAgVFJVRSAgICBJZiB0aGUgc2VydmljZSBpcyBlbmFibGVkLgorICAgICAqIEByZXR2YWwgIEZBTFNFICAgSWYgdGhlIHNlcnZpY2UgaXMgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRW5hYmxlZCh2b2lkKSBjb25zdDsKKworcHJpdmF0ZToKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVJlbGF5UmVjZWl2ZSh2b2lkICphQ29udGV4dCwgb3RDb2FwSGVhZGVyICphSGVhZGVyLCBvdE1lc3NhZ2UgKmFNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8pOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlUmVzcG9uc2Uodm9pZCAqYUNvbnRleHQsIG90Q29hcEhlYWRlciAqYUhlYWRlciwgb3RNZXNzYWdlICphTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdE1lc3NhZ2VJbmZvICphTWVzc2FnZUluZm8sIG90RXJyb3IgYVJlc3VsdCk7CisKKyAgICB2b2lkIERlbGl2ZXJNZXNzYWdlKENvYXA6OkhlYWRlciAmYUhlYWRlciwgTWVzc2FnZSAmYU1lc3NhZ2UsIGNvbnN0IElwNjo6TWVzc2FnZUluZm8gJmFNZXNzYWdlSW5mbyk7CisKKworICAgIENvYXA6OlJlc291cmNlIG1SZWxheVJlY2VpdmU7CisgICAgb3RUbWZQcm94eVN0cmVhbUhhbmRsZXIgbVN0cmVhbUhhbmRsZXI7CisgICAgdm9pZCAqbUNvbnRleHQ7CisKKyAgICBjb25zdCBJcDY6OkFkZHJlc3MgJm1NZXNoTG9jYWwxNjsKKyAgICBDb2FwOjpDb2FwICZtQ29hcDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFRNRl9QUk9YWV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvdG9wb2xvZ3kuY3BwIGIvc3JjL2NvcmUvdGhyZWFkL3RvcG9sb2d5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NThiM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL3RvcG9sb2d5LmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbmNsdWRlcyBkZWZpbml0aW9ucyBmb3IgbWFpbnRhaW5pbmcgVGhyZWFkIG5ldHdvcmsgdG9wb2xvZ2llcy4KKyAqLworCisjZGVmaW5lIFdQUF9OQU1FICJ0b3BvbG9neS50bWgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidG9wb2xvZ3kuaHBwIgorCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaHBwIgorCituYW1lc3BhY2Ugb3QgeworCit2b2lkIE5laWdoYm9yOjpHZW5lcmF0ZUNoYWxsZW5nZSh2b2lkKQoreworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihtVmFsaWRQZW5kaW5nLm1QZW5kaW5nLm1DaGFsbGVuZ2UpOyBpKyspCisgICAgeworICAgICAgICBtVmFsaWRQZW5kaW5nLm1QZW5kaW5nLm1DaGFsbGVuZ2VbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihvdFBsYXRSYW5kb21HZXQoKSk7CisgICAgfQorfQorCitvdEVycm9yIENoaWxkOjpGaW5kSXA2QWRkcmVzcyhjb25zdCBJcDY6OkFkZHJlc3MgJmFBZGRyZXNzLCB1aW50OF90ICphSW5kZXgpIGNvbnN0Cit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORDsKKworICAgIGZvciAodWludDhfdCBpbmRleCA9IDA7IGluZGV4IDwga01heElwNkFkZHJlc3NQZXJDaGlsZDsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtSXA2QWRkcmVzc1tpbmRleF0gPT0gYUFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhSW5kZXggIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIENoaWxkOjpSZW1vdmVJcDZBZGRyZXNzKHVpbnQ4X3QgYUluZGV4KQoreworICAgIFZlcmlmeU9yRXhpdChhSW5kZXggPCBrTWF4SXA2QWRkcmVzc1BlckNoaWxkKTsKKworICAgIGZvciAodWludDhfdCBpID0gYUluZGV4OyBpIDwga01heElwNkFkZHJlc3NQZXJDaGlsZCAtIDE7IGkrKykKKyAgICB7CisgICAgICAgIG1JcDZBZGRyZXNzW2ldID0gbUlwNkFkZHJlc3NbaSArIDFdOworICAgIH0KKworICAgIG1lbXNldCgmbUlwNkFkZHJlc3Nba01heElwNkFkZHJlc3NQZXJDaGlsZCAtIDFdLCAwLCBzaXplb2YoSXA2OjpBZGRyZXNzKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIENoaWxkOjpHZW5lcmF0ZUNoYWxsZW5nZSh2b2lkKQoreworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZihtQXR0YWNoQ2hhbGxlbmdlKTsgaSsrKQorICAgIHsKKyAgICAgICAgbUF0dGFjaENoYWxsZW5nZVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICB9Cit9CisKK2NvbnN0IE1hYzo6QWRkcmVzcyAmQ2hpbGQ6OkdldE1hY0FkZHJlc3MoTWFjOjpBZGRyZXNzICZhTWFjQWRkcmVzcykgY29uc3QKK3sKKyAgICBpZiAobVVzZVNob3J0QWRkcmVzcykKKyAgICB7CisgICAgICAgIGFNYWNBZGRyZXNzLm1TaG9ydEFkZHJlc3MgPSBHZXRSbG9jMTYoKTsKKyAgICAgICAgYU1hY0FkZHJlc3MubUxlbmd0aCA9IHNpemVvZihhTWFjQWRkcmVzcy5tU2hvcnRBZGRyZXNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYU1hY0FkZHJlc3MubUV4dEFkZHJlc3MgPSBHZXRFeHRBZGRyZXNzKCk7CisgICAgICAgIGFNYWNBZGRyZXNzLm1MZW5ndGggPSBzaXplb2YoYU1hY0FkZHJlc3MubUV4dEFkZHJlc3MpOworICAgIH0KKworICAgIHJldHVybiBhTWFjQWRkcmVzczsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS90aHJlYWQvdG9wb2xvZ3kuaHBwIGIvc3JjL2NvcmUvdGhyZWFkL3RvcG9sb2d5LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdkN2QyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdGhyZWFkL3RvcG9sb2d5LmhwcApAQCAtMCwwICsxLDc5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIG1haW50YWluaW5nIFRocmVhZCBuZXR3b3JrIHRvcG9sb2dpZXMuCisgKi8KKworI2lmbmRlZiBUT1BPTE9HWV9IUFBfCisjZGVmaW5lIFRPUE9MT0dZX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbW9uL21lc3NhZ2UuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorI2luY2x1ZGUgInRocmVhZC9saW5rX3F1YWxpdHkuaHBwIgorI2luY2x1ZGUgInRocmVhZC9tbGVfdGx2cy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgVGhyZWFkIG5laWdoYm9yLgorICoKKyAqLworY2xhc3MgTmVpZ2hib3IKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBOZWlnaGJvciBsaW5rIHN0YXRlcy4KKyAgICAgKgorICAgICAqLworICAgIGVudW0gU3RhdGUKKyAgICB7CisgICAgICAgIGtTdGF0ZUludmFsaWQsICAgICAgICAgICAgICAgICAgIC8vLzwgTmVpZ2hib3IgbGluayBpcyBpbnZhbGlkCisgICAgICAgIGtTdGF0ZVJlc3RvcmVkLCAgICAgICAgICAgICAgICAgIC8vLzwgTmVpZ2hib3IgaXMgcmVzdG9yZWQgZnJvbSBub24tdm9sYXRpbGUgbWVtb3J5CisgICAgICAgIGtTdGF0ZVBhcmVudFJlcXVlc3QsICAgICAgICAgICAgIC8vLzwgUmVjZWl2ZWQgYW4gTUxFIFBhcmVudCBSZXF1ZXN0IG1lc3NhZ2UKKyAgICAgICAga1N0YXRlQ2hpbGRJZFJlcXVlc3QsICAgICAgICAgICAgLy8vPCBSZWNlaXZlZCBhbiBNTEUgQ2hpbGQgSUQgUmVxdWVzdCBtZXNzYWdlCisgICAgICAgIGtTdGF0ZUxpbmtSZXF1ZXN0LCAgICAgICAgICAgICAgIC8vLzwgU2VudCBhbiBNTEUgTGluayBSZXF1ZXN0IG1lc3NhZ2UKKyAgICAgICAga1N0YXRlQ2hpbGRVcGRhdGVSZXF1ZXN0LCAgICAgICAgLy8vPCBTZW50IGFuIE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdCBtZXNzYWdlICh0cnlpbmcgdG8gcmVzdG9yZSB0aGUgY2hpbGQpCisgICAgICAgIGtTdGF0ZVZhbGlkLCAgICAgICAgICAgICAgICAgICAgIC8vLzwgTGluayBpcyB2YWxpZAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3RhdGUuCisgICAgICoKKyAgICAgKi8KKyAgICBTdGF0ZSBHZXRTdGF0ZSh2b2lkKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0ZT4obVN0YXRlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBzdGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTdGF0ZSAgVGhlIHN0YXRlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdGF0ZShTdGF0ZSBhU3RhdGUpIHsgbVN0YXRlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oYVN0YXRlKTsgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIG5laWdoYm9yL2NoaWxkIGlzIGJlaW5nIHJlc3RvcmVkLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgbmVpZ2hib3IgaXMgYmVpbmcgcmVzdG9yZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNTdGF0ZVJlc3RvcmluZyh2b2lkKSBjb25zdCB7IHJldHVybiAobVN0YXRlID09IGtTdGF0ZVJlc3RvcmVkKSB8fCAobVN0YXRlID09IGtTdGF0ZUNoaWxkVXBkYXRlUmVxdWVzdCk7IH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBuZWlnaGJvci9jaGlsZCBpcyBpbiB2YWxpZCBzdGF0ZSBvciBpZiBpdCBpcyBiZWluZyByZXN0b3JlZC4KKyAgICAgKiBXaGVuIGluIHRoZXNlIHN0YXRlcyBtZXNzYWdlcyBjYW4gYmUgc2VudCB0byBhbmQvb3IgcmVjZWl2ZWQgZnJvbSB0aGUgbmVpZ2hib3IvY2hpbGQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoZSBuZWlnaGJvciBpcyBpbiB2YWxpZCwgcmVzdG9yZWQsIG9yIGJlaW5nIHJlc3RvcmVkIHN0YXRlcywgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1N0YXRlVmFsaWRPclJlc3RvcmluZyh2b2lkKSBjb25zdCB7IHJldHVybiAobVN0YXRlID09IGtTdGF0ZVZhbGlkKSB8fCBJc1N0YXRlUmVzdG9yaW5nKCk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGRldmljZSBtb2RlIGZsYWdzLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGRldmljZSBtb2RlIGZsYWdzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXREZXZpY2VNb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Nb2RlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBkZXZpY2UgbW9kZSBmbGFncy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNb2RlICBUaGUgZGV2aWNlIG1vZGUgZmxhZ3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldERldmljZU1vZGUodWludDhfdCBhTW9kZSkgeyBtTW9kZSA9IGFNb2RlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRldmljZSBpcyByeC1vbi13aGVuLWlkbGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHJ4LW9uLXdoZW4taWRsZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc1J4T25XaGVuSWRsZSh2b2lkKSBjb25zdCB7IHJldHVybiAobU1vZGUgJiBNbGU6Ok1vZGVUbHY6OmtNb2RlUnhPbldoZW5JZGxlKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRldmljZSBpcyBhIEZ1bGwgVGhyZWFkIERldmljZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgYSBGdWxsIFRocmVhZCBEZXZpY2UsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNGdWxsVGhyZWFkRGV2aWNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtTW9kZSAmIE1sZTo6TW9kZVRsdjo6a01vZGVGRkQpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIHVzZXMgc2VjdXJlIElFRUUgODAyLjE1LjQgRGF0YSBSZXF1ZXN0IG1lc3NhZ2VzLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiB1c2luZyBzZWN1cmUgSUVFRSA4MDIuMTUuNCBEYXRhIFJlcXVlc3QgbWVzc2FnZXMsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNTZWN1cmVEYXRhUmVxdWVzdCh2b2lkKSBjb25zdCB7IHJldHVybiAobU1vZGUgJiBNbGU6Ok1vZGVUbHY6OmtNb2RlU2VjdXJlRGF0YVJlcXVlc3QpICE9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIHJlcXVlc3RzIEZ1bGwgTmV0d29yayBEYXRhLgorICAgICAqCisgICAgICogQHJldHVybnMgVFJVRSBpZiByZXF1ZXN0cyBGdWxsIE5ldHdvcmsgRGF0YSwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0Z1bGxOZXR3b3JrRGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiAobU1vZGUgJiBNbGU6Ok1vZGVUbHY6OmtNb2RlRnVsbE5ldHdvcmtEYXRhKSAhPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCBieXRlcyBvZiB0aGUgRXh0ZW5kZWQgQWRkcmVzcyB0byB6ZXJvLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhckV4dEFkZHJlc3Modm9pZCkgeyBtZW1zZXQoJm1NYWNBZGRyLCAwLCBzaXplb2YobU1hY0FkZHIpKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgRXh0ZW5kZWQgQWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgTWFjOjpFeHRBZGRyZXNzICZHZXRFeHRBZGRyZXNzKHZvaWQpIHsgcmV0dXJuIG1NYWNBZGRyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBFeHRlbmRlZCBBZGRyZXNzLgorICAgICAqCisgICAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCBNYWM6OkV4dEFkZHJlc3MgJkdldEV4dEFkZHJlc3Modm9pZCkgY29uc3QgeyByZXR1cm4gbU1hY0FkZHI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIEV4dGVuZGVkIEFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQWRkcmVzcyAgVGhlIEV4dGVuZGVkIEFkZHJlc3MgdmFsdWUgdG8gc2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRFeHRBZGRyZXNzKGNvbnN0IE1hYzo6RXh0QWRkcmVzcyAmYUFkZHJlc3MpIHsgbU1hY0FkZHIgPSBhQWRkcmVzczsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGtleSBzZXF1ZW5jZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldEtleVNlcXVlbmNlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1LZXlTZXF1ZW5jZTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcm1hW2luXSAgYUtleVNlcXVlbmNlICBUaGUga2V5IHNlcXVlbmNlIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRLZXlTZXF1ZW5jZSh1aW50MzJfdCBhS2V5U2VxdWVuY2UpIHsgbUtleVNlcXVlbmNlID0gYUtleVNlcXVlbmNlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsYXN0IGhlYXJkIHRpbWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbGFzdCBoZWFyZCB0aW1lLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TGFzdEhlYXJkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MYXN0SGVhcmQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGxhc3QgaGVhcmQgdGltZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFMYXN0SGVhcmQgIFRoZSBsYXN0IGhlYXJkIHRpbWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldExhc3RIZWFyZCh1aW50MzJfdCBhTGFzdEhlYXJkKSB7IG1MYXN0SGVhcmQgPSBhTGFzdEhlYXJkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBsaW5rIGZyYW1lIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbGluayBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDMyX3QgR2V0TGlua0ZyYW1lQ291bnRlcih2b2lkKSBjb25zdCB7IHJldHVybiBtVmFsaWRQZW5kaW5nLm1WYWxpZC5tTGlua0ZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGluayBmcmFtZSBjb3VudGVyIHZhbHVlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQ291bnRlciAgVGhlIGxpbmsgZnJhbWUgY291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua0ZyYW1lQ291bnRlcih1aW50MzJfdCBhRnJhbWVDb3VudGVyKSB7IG1WYWxpZFBlbmRpbmcubVZhbGlkLm1MaW5rRnJhbWVDb3VudGVyID0gYUZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgTUxFIGZyYW1lIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTUxFIGZyYW1lIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRNbGVGcmFtZUNvdW50ZXIodm9pZCkgY29uc3QgeyByZXR1cm4gbVZhbGlkUGVuZGluZy5tVmFsaWQubU1sZUZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgTUxFIGZyYW1lIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVDb3VudGVyICBUaGUgTUxFIGZyYW1lIGNvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1sZUZyYW1lQ291bnRlcih1aW50MzJfdCBhRnJhbWVDb3VudGVyKSB7IG1WYWxpZFBlbmRpbmcubVZhbGlkLm1NbGVGcmFtZUNvdW50ZXIgPSBhRnJhbWVDb3VudGVyOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgUkxPQzE2IHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0UmxvYzE2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1WYWxpZFBlbmRpbmcubVZhbGlkLm1SbG9jMTY7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFJMT0MxNiB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFSbG9jMTYgIFRoZSBSTE9DMTYgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFJsb2MxNih1aW50MTZfdCBhUmxvYzE2KSB7IG1WYWxpZFBlbmRpbmcubVZhbGlkLm1SbG9jMTYgPSBhUmxvYzE2OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBhbiBJRUVFIDgwMi4xNS40IERhdGEgUmVxdWVzdCBtZXNzYWdlIHdhcyByZWNlaXZlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgYW4gSUVFRSA4MDIuMTUuNCBEYXRhIFJlcXVlc3QgbWVzc2FnZSB3YXMgcmVjZWl2ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIGJvb2wgSXNEYXRhUmVxdWVzdFBlbmRpbmcodm9pZCkgY29uc3QgeyByZXR1cm4gbURhdGFSZXF1ZXN0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBpbmRpY2F0b3IgZm9yIHdoZXRoZXIgYW4gSUVFRSA4MDIuMTUuNCBEYXRhIFJlcXVlc3QgbWVzc2FnZSB3YXMgcmVjZWl2ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUGVuZGluZyAgVFJVRSBpZiBhbiBJRUVFIDgwMi4xNS40IERhdGEgUmVxdWVzdCBtZXNzYWdlIHdhcyByZWNlaXZlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXREYXRhUmVxdWVzdFBlbmRpbmcoYm9vbCBhUGVuZGluZykgeyBtRGF0YVJlcXVlc3QgPSBhUGVuZGluZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGxpbmsgZmFpbHVyZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGxpbmsgZmFpbHVyZXMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtGYWlsdXJlcyh2b2lkKSBjb25zdCB7IHJldHVybiBtTGlua0ZhaWx1cmVzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmNyZW1lbnRzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgbGluayBmYWlsdXJlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50TGlua0ZhaWx1cmVzKHZvaWQpIHsgbUxpbmtGYWlsdXJlcysrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBsaW5rIGZhaWx1cmVzIHRvIHplcm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0TGlua0ZhaWx1cmVzKHZvaWQpIHsgbUxpbmtGYWlsdXJlcyA9IDA7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIExpbmtRdWFsaXR5SW5mbyBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgTGlua1F1YWxpdHlJbmZvIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIExpbmtRdWFsaXR5SW5mbyAmR2V0TGlua0luZm8odm9pZCkgeyByZXR1cm4gbUxpbmtJbmZvOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBuZXcgY2hhbGxlbmdlIHZhbHVlIGZvciBNTEUgTGluayBSZXF1ZXN0L1Jlc3BvbnNlIGV4Y2hhbmdlcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgR2VuZXJhdGVDaGFsbGVuZ2Uodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IGNoYWxsZW5nZSB2YWx1ZSBmb3IgTUxFIExpbmsgUmVxdWVzdC9SZXNwb25zZSBleGNoYW5nZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjaGFsbGVuZ2UgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICBjb25zdCB1aW50OF90ICpHZXRDaGFsbGVuZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbVZhbGlkUGVuZGluZy5tUGVuZGluZy5tQ2hhbGxlbmdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaXplIChieWV0cykgb2YgdGhlIGNoYWxsZW5nZSB2YWx1ZSBmb3IgTUxFIExpbmsgUmVxdWVzdC9SZXNwb25zZSBleGNoYW5nZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSAoYnlldHMpIG9mIHRoZSBjaGFsbGVuZ2UgdmFsdWUgZm9yIE1MRSBMaW5rIFJlcXVlc3QvUmVzcG9uc2UgZXhjaGFuZ2VzLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFsbGVuZ2VTaXplKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHNpemVvZihtVmFsaWRQZW5kaW5nLm1QZW5kaW5nLm1DaGFsbGVuZ2UpOyB9CisKK3ByaXZhdGU6CisgICAgTWFjOjpFeHRBZGRyZXNzIG1NYWNBZGRyOyAgICAgICAgICAgIC8vLzwgVGhlIElFRUUgODAyLjE1LjQgRXh0ZW5kZWQgQWRkcmVzcworICAgIHVpbnQzMl90ICAgICAgICBtTGFzdEhlYXJkOyAgICAgICAgICAvLy88IFRpbWUgd2hlbiBsYXN0IGhlYXJkLgorICAgIHVuaW9uCisgICAgeworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgbUxpbmtGcmFtZUNvdW50ZXI7ICAvLy88IFRoZSBMaW5rIEZyYW1lIENvdW50ZXIKKyAgICAgICAgICAgIHVpbnQzMl90IG1NbGVGcmFtZUNvdW50ZXI7ICAgLy8vPCBUaGUgTUxFIEZyYW1lIENvdW50ZXIKKyAgICAgICAgICAgIHVpbnQxNl90IG1SbG9jMTY7ICAgICAgICAgICAgLy8vPCBUaGUgUkxPQzE2CisgICAgICAgIH0gbVZhbGlkOworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCBtQ2hhbGxlbmdlW01sZTo6Q2hhbGxlbmdlVGx2OjprTWF4U2l6ZV07ICAvLy88IFRoZSBjaGFsbGVuZ2UgdmFsdWUKKyAgICAgICAgICAgIHVpbnQ4X3QgbUNoYWxsZW5nZUxlbmd0aDsgICAgLy8vPCBUaGUgY2hhbGxlbmdlIGxlbmd0aAorICAgICAgICB9IG1QZW5kaW5nOworICAgIH0gbVZhbGlkUGVuZGluZzsKKworICAgIHVpbnQzMl90ICAgICAgICBtS2V5U2VxdWVuY2U7ICAgICAgICAvLy88IEN1cnJlbnQga2V5IHNlcXVlbmNlCisgICAgdWludDhfdCAgICAgICAgIG1TdGF0ZSA6IDM7ICAgICAgICAgIC8vLzwgVGhlIGxpbmsgc3RhdGUKKyAgICB1aW50OF90ICAgICAgICAgbU1vZGUgOiA0OyAgICAgICAgICAgLy8vPCBUaGUgTUxFIGRldmljZSBtb2RlCisgICAgYm9vbCAgICAgICAgICAgIG1EYXRhUmVxdWVzdCA6IDE7ICAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGEgRGF0YSBQb2xsIHdhcyByZWNlaXZlZAorICAgIHVpbnQ4X3QgICAgICAgICBtTGlua0ZhaWx1cmVzOyAgICAgICAvLy88IENvbnNlY3V0aXZlIGxpbmsgZmFpbHVyZSBjb3VudAorICAgIExpbmtRdWFsaXR5SW5mbyBtTGlua0luZm87ICAgICAgICAgICAvLy88IExpbmsgcXVhbGl0eSBpbmZvIChjb250YWlucyBhdmVyYWdlIFJTUywgbGluayBtYXJnaW4gYW5kIGxpbmsgcXVhbGl0eSkKK307CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgVGhyZWFkIENoaWxkLgorICoKKyAqLworY2xhc3MgQ2hpbGQgOiBwdWJsaWMgTmVpZ2hib3IKK3sKK3B1YmxpYzoKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4SXA2QWRkcmVzc1BlckNoaWxkID0gT1BFTlRIUkVBRF9DT05GSUdfSVBfQUREUlNfUEVSX0NISUxELAorICAgICAgICBrTWF4UmVxdWVzdFRsdnMgICAgICAgID0gNSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBJUHY2IGFkZHJlc3NlcyBmb3IgdGhlIGNoaWxkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcklwNkFkZHJlc3Nlcyh2b2lkKSB7IG1lbXNldChtSXA2QWRkcmVzcywgMCwgc2l6ZW9mKG1JcDZBZGRyZXNzKSk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIElQdjYgYWRkcmVzcyBhdCBpbmRleCBAcCBhSW5kZXguCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5kZXggIFRoZSBpbmRleCBpbnRvIHRoZSBJUHY2IGFkZHJlc3MgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBJUHY2IGFkZHJlc3MgZW50cnkgYXQgaW5kZXggQHAgYUluZGV4LgorICAgICAqCisgICAgICovCisgICAgSXA2OjpBZGRyZXNzICZHZXRJcDZBZGRyZXNzKHVpbnQ4X3QgYUluZGV4KSB7IHJldHVybiBtSXA2QWRkcmVzc1thSW5kZXhdOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZWFyY2hlcyBmb3IgYSBnaXZlbiBJUHY2IGFkZHJlc3MgaW4gdGhlIGNoaWxkJ3MgSVB2NiBhZGRyZXNzIGxpc3QgYW5kIHByb3ZpZGVzIHRoZSBpbmRleCBvZiB0aGUKKyAgICAgKiBhZGRyZXNzIGluIHRoZSBsaXN0IGlmIGl0IGlzIGZvdW5kLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFkZHJlc3MgICAgICAgICAgIFRoZSBJUHY2IGFkZHJlc3MgdG8gc2VhcmNoIGZvciBpbiB0aGUgSVB2NiBhZGRyZXNzIGxpc3QuCisgICAgICogQHBhcmFtW291dF0gYUluZGV4ICAgICAgICAgICAgIFBvaW50ZXIgdG8gdmFyaWFibGUgd2hlcmUgdGhlIGluZGV4IG9mIGFkZHJlc3MgaXMgcHJvdmlkZWQgaWYgYWRkcmVzcyBpcyBmb3VuZCBpbgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdC4gQHAgYUluZGV4IGNhbiBiZSBzZXQgTlVMTCBpZiBpbmRleCBpcyBub3QgcmVxdWlyZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgICAgU3VjY2Vzc2Z1bGx5IGZvdW5kIHRoZSBhZGRyZXNzIGluIElQdjYgYWRkcmVzcyBsaXN0IGFuZCB1cGRhdGVkIEBwIGFJbmRleC4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgICAgQ291bGQgbm90IGZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEZpbmRJcDZBZGRyZXNzKGNvbnN0IElwNjo6QWRkcmVzcyAmYUFkZHJlc3MsIHVpbnQ4X3QgKmFJbmRleCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIHRoZSBhZGRyZXNzIGF0IGluZGV4IEBwIGFJbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUluZGV4ICAgVGhlIGluZGV4IGludG8gdGhlIElQdjYgYWRkcmVzcyBsaXN0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBSZW1vdmVJcDZBZGRyZXNzKHVpbnQ4X3QgYUluZGV4KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGNoaWxkIHRpbWVvdXQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY2hpbGQgdGltZW91dC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQzMl90IEdldFRpbWVvdXQodm9pZCkgY29uc3QgeyByZXR1cm4gbVRpbWVvdXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNoaWxkIHRpbWVvdXQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhVGltZW91dCAgVGhlIGNoaWxkIHRpbWVvdXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFRpbWVvdXQodWludDMyX3QgYVRpbWVvdXQpIHsgbVRpbWVvdXQgPSBhVGltZW91dDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbmV0d29yayBkYXRhIHZlcnNpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbmV0d29yayBkYXRhIHZlcnNpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldE5ldHdvcmtEYXRhVmVyc2lvbih2b2lkKSBjb25zdCB7IHJldHVybiBtTmV0d29ya0RhdGFWZXJzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBuZXR3b3JrIGRhdGEgdmVyc2lvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFWZXJzaW9uICBUaGUgbmV0d29yayBkYXRhIHZlcnNpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE5ldHdvcmtEYXRhVmVyc2lvbih1aW50OF90IGFWZXJzaW9uKSB7IG1OZXR3b3JrRGF0YVZlcnNpb24gPSBhVmVyc2lvbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbmV3IGNoYWxsZW5nZSB2YWx1ZSB0byB1c2UgZHVyaW5nIGEgY2hpbGQgYXR0YWNoLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZW5lcmF0ZUNoYWxsZW5nZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIGN1cnJlbnQgY2hhbGxlbmdlIHZhbHVlIHVzZWQgZHVyaW5nIGF0dGFjaC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGNoYWxsZW5nZSB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IHVpbnQ4X3QgKkdldENoYWxsZW5nZSh2b2lkKSBjb25zdCB7IHJldHVybiBtQXR0YWNoQ2hhbGxlbmdlOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBjaGFsbGVuZ2Ugc2l6ZSAoYnl0ZXMpIHVzZWQgZHVyaW5nIGF0dGFjaC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBjaGFsbGVuZ2Ugc2l6ZSAoYnl0ZXMpLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRDaGFsbGVuZ2VTaXplKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHNpemVvZihtQXR0YWNoQ2hhbGxlbmdlKTsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBGcmFtZSBDb3VudGVyIHVzZWQgZHVyaW5nIGluZGlyZWN0IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBJRUVFIDgwMi4xNS40IEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MzJfdCBHZXRJbmRpcmVjdEZyYW1lQ291bnRlcih2b2lkKSBjb25zdCB7IHJldHVybiBtSW5kaXJlY3RGcmFtZUNvdW50ZXI7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIElFRUUgODAyLjE1LjQgRnJhbWUgQ291bnRlciB0byB1c2UgZHVyaW5nIGluZGlyZWN0IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFtZUNvdW50ZXIgIFRoZSBJRUVFIDgwMi4xNS40IEZyYW1lIENvdW50ZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEluZGlyZWN0RnJhbWVDb3VudGVyKHVpbnQzMl90IGFGcmFtZUNvdW50ZXIpIHsgbUluZGlyZWN0RnJhbWVDb3VudGVyID0gYUZyYW1lQ291bnRlcjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbWVzc2FnZSBidWZmZXIgdG8gdXNlIGZvciBpbmRpcmVjdCB0cmFuc21pc3Npb25zLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG1lc3NhZ2UgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgTWVzc2FnZSAqR2V0SW5kaXJlY3RNZXNzYWdlKHZvaWQpIHsgcmV0dXJuIG1JbmRpcmVjdE1lc3NhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1lc3NhZ2UgYnVmZmVyIHRvIHVzZSBmb3IgaW5kaXJlY3QgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICBUaGUgbWVzc2FnZSBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEluZGlyZWN0TWVzc2FnZShNZXNzYWdlICphTWVzc2FnZSkgeyBtSW5kaXJlY3RNZXNzYWdlID0gYU1lc3NhZ2U7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIDZMb1dQQU4gRnJhZ21lbnQgT2Zmc2V0IHRvIHVzZSBmb3IgaW5kaXJlY3QgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSA2TG9XUEFOIEZyYWdtZW50IE9mZnNldCB2YWx1ZS4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldEluZGlyZWN0RnJhZ21lbnRPZmZzZXQodm9pZCkgY29uc3QgeyByZXR1cm4gbUluZGlyZWN0RnJhZ21lbnRPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIDZMb1dQQU4gRnJhZ21lbnQgT2Zmc2V0IHRvIHVzZSBmb3IgaW5kaXJlY3QgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFGcmFnbWVudE9mZnNldCAgVGhlIDZMb1dQQU4gRnJhZ21lbnQgT2Zmc2V0IHZhbHVlIHRvIHVzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SW5kaXJlY3RGcmFnbWVudE9mZnNldCh1aW50MTZfdCBhRnJhZ21lbnRPZmZzZXQpIHsgbUluZGlyZWN0RnJhZ21lbnRPZmZzZXQgPSBhRnJhZ21lbnRPZmZzZXQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIElFRUUgODAyLjE1LjQgS2V5IElEIHRvIHVzZSBmb3IgaW5kaXJlY3QgcmV0cmFuc21pc3Npb25zLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgS2V5IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXRJbmRpcmVjdEtleUlkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbmRpcmVjdEtleUlkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBJRUVFIDgwMi4xNS40IEtleSBJRCB2YWx1ZSB0byB1c2UgZm9yIGluZGlyZWN0IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFLZXlJZCAgVGhlIElFRUUgODAyLjE1LjQgS2V5IElEIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbmRpcmVjdEtleUlkKHVpbnQ4X3QgYUtleUlkKSB7IG1JbmRpcmVjdEtleUlkID0gYUtleUlkOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBudW1iZXIgb2YgaW5kaXJlY3QgdHJhbnNtaXNzaW9uIGF0dGVtcHRzIGZvciB0aGUgY3VycmVudCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBpbmRpcmVjdCB0cmFuc21pc3Npb24gYXR0ZW1wdHMuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEluZGlyZWN0VHhBdHRlbXB0cyh2b2lkKSBjb25zdCB7IHJldHVybiBtSW5kaXJlY3RUeEF0dGVtcHRzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIG51bWJlciBvZiBpbmRpcmVjdCB0cmFuc21pc3Npb24gYXR0ZW1wdHMgdG8gemVyby4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVzZXRJbmRpcmVjdFR4QXR0ZW1wdHModm9pZCkgeyBtSW5kaXJlY3RUeEF0dGVtcHRzID0gMDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgbnVtYmVyIG9mIGluZGlyZWN0IHRyYW5zbWlzc2lvbiBhdHRlbXB0cy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50SW5kaXJlY3RUeEF0dGVtcHRzKHZvaWQpIHsgbUluZGlyZWN0VHhBdHRlbXB0cysrOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXRzIHRoZSBJRUVFIDgwMi4xNS40IERhdGEgU2VxdWVuY2UgTnVtYmVyIHRvIHVzZSBkdXJpbmcgaW5kaXJlY3QgcmV0cmFuc21pc3Npb25zLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIElFRUUgODAyLjE1LjQgRGF0YSBTZXF1ZW5jZSBOdW1iZXIgdmFsdWUuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldEluZGlyZWN0RGF0YVNlcXVlbmNlTnVtYmVyKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbmRpcmVjdERzbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgSUVFRSA4MDIuMTUuNCBEYXRhIFNlcXVlbmNlIE51bWJlciB0byB1c2UgZHVyaW5nIGluZGlyZWN0IHJldHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFEc24gIFRoZSBJRUVFIDgwMi4xNS40IERhdGEgU2VxdWVuY2UgTnVtYmVyIHZhbHVlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRJbmRpcmVjdERhdGFTZXF1ZW5jZU51bWJlcih1aW50OF90IGFEc24pIHsgbUluZGlyZWN0RHNuID0gYURzbjsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHNvdXJjZSBtYXRjaCBvbiB0aGUgc2hvcnQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdXNpbmcgdGhlIHNob3J0IGFkZHJlc3MsIEZBTFNFIGlmIHVzaW5nIHRoZSBleHRlbmRlZCBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgYm9vbCBJc0luZGlyZWN0U291cmNlTWF0Y2hTaG9ydCh2b2lkKSBjb25zdCB7IHJldHVybiBtVXNlU2hvcnRBZGRyZXNzOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHdoZXRoZXIgb3Igbm90IHRvIHNvdXJjZSBtYXRjaCBvbiB0aGUgc2hvcnQgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFTaG9ydCAgVFJVRSBpZiB1c2luZyB0aGUgc2hvcnQgYWRkcmVzcywgRkFMU0UgaWYgdXNpbmcgdGhlIGV4dGVuZGVkIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEluZGlyZWN0U291cmNlTWF0Y2hTaG9ydChib29sIGFTaG9ydCkgeyBtVXNlU2hvcnRBZGRyZXNzID0gYVNob3J0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNoaWxkIG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSBzb3VyY2UgbWF0Y2ggdGFibGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoZSBjaGlsZCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgc291cmNlIG1hdGNoIHRhYmxlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzSW5kaXJlY3RTb3VyY2VNYXRjaFBlbmRpbmcodm9pZCkgY29uc3QgeyByZXR1cm4gbVNvdXJjZU1hdGNoUGVuZGluZzsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgY2hpbGQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBtYXRjaCB0YWJsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFQZW5kaW5nICBUUlVFIGlmIHRoZSBjaGlsZCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgc291cmNlIG1hdGNoIHRhYmxlLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEluZGlyZWN0U291cmNlTWF0Y2hQZW5kaW5nKGJvb2wgYVBlbmRpbmcpIHsgbVNvdXJjZU1hdGNoUGVuZGluZyA9IGFQZW5kaW5nOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcXVldWVkIG1lc3NhZ2UocykgZm9yIHRoZSBjaGlsZAorICAgICAqCisgICAgICogQHJldHVybnMgTnVtYmVyIG9mIHF1ZXVlcyBtZXNzYWdlKHMpLgorICAgICAqCisgICAgICovCisgICAgdWludDE2X3QgR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQodm9pZCkgY29uc3QgeyByZXR1cm4gbVF1ZXVlZE1lc3NhZ2VDb3VudDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5jcmVtZW50cyB0aGUgaW5kaXJlY3QgbWVzc2FnZSBjb3VudC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50SW5kaXJlY3RNZXNzYWdlQ291bnQodm9pZCkgeyBtUXVldWVkTWVzc2FnZUNvdW50Kys7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGRlY3JlbWVudHMgdGhlIGluZGlyZWN0IG1lc3NhZ2UgY291bnQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIERlY3JlbWVudEluZGlyZWN0TWVzc2FnZUNvdW50KHZvaWQpIHsgbVF1ZXVlZE1lc3NhZ2VDb3VudC0tOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIGluZGlyZWN0IG1lc3NhZ2UgY291bnQgdG8gemVyby4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgUmVzZXRJbmRpcmVjdE1lc3NhZ2VDb3VudCh2b2lkKSB7IG1RdWV1ZWRNZXNzYWdlQ291bnQgPSAwOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgdGhlIHJlcXVlc3RlZCBUTFYgbGlzdC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgQ2xlYXJSZXF1ZXN0VGx2cyh2b2lkKSB7IG1lbXNldChtUmVxdWVzdFRsdnMsIE1sZTo6VGx2OjprSW52YWxpZCwgc2l6ZW9mKG1SZXF1ZXN0VGx2cykpOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgVExWIGF0IGluZGV4IEBwIGFJbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbmRleCAgVGhlIGluZGV4IGludG8gdGhlIHJlcXVlc3RlZCBUTFYgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByZXF1ZXN0ZWQgVExWIGF0IGluZGV4IEBwIGFJbmRleC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0UmVxdWVzdFRsdih1aW50OF90IGFJbmRleCkgY29uc3QgeyByZXR1cm4gbVJlcXVlc3RUbHZzW2FJbmRleF07IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHJlcXVlc3RlZCBUTFYgYXQgaW5kZXggQHAgYUluZGV4LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluZGV4ICBUaGUgaW5kZXggaW50byB0aGUgcmVxdWVzdGVkIFRMViBsaXN0LgorICAgICAqIEBwYXJhbVtpbl0gIGFUeXBlICAgVGhlIFRMViB0eXBlLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRSZXF1ZXN0VGx2KHVpbnQ4X3QgYUluZGV4LCB1aW50OF90IGFUeXBlKSB7IG1SZXF1ZXN0VGx2c1thSW5kZXhdID0gYVR5cGU7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIG1hYyBhZGRyZXNzIG9mIGNoaWxkIChlaXRoZXIgcmxvYzE2IG9yIGV4dGVuZGVkIGFkZHJlc3MgZGVwZW5kaW5nIG9uIGBVc2VTaG9ydEFkZHJlc3NgIGZsYWcpLgorICAgICAqCisgICAgICogQHBhcmFtW291dF0gYU1hY0FkZHJlc3MgQSByZWZlcmVuY2UgdG8gYSBtYWMgYWRkcmVzcyBvYmplY3QgdG8gd2hpY2ggdGhlIGNoaWxkJ3MgYWRkcmVzcyBpcyBjb3BpZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBBIChjb25zdCkgcmVmZXJlbmNlIHRvIHRoZSBtYWMgYWRkcmVzcyBAYSBhTWFjQWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIGNvbnN0IE1hYzo6QWRkcmVzcyAmR2V0TWFjQWRkcmVzcyhNYWM6OkFkZHJlc3MgJmFNYWNBZGRyZXNzKSBjb25zdDsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbmNyZW1lbnRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBsYXN0IHN1cGVydmlzaW9uIG9mIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSW5jcmVtZW50U2Vjb25kc1NpbmNlTGFzdFN1cGVydmlzaW9uKHZvaWQpIHsgbVNlY29uZHNTaW5jZVN1cGVydmlzaW9uKys7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGxhc3Qgc3VwZXJ2aXNpb24gb2YgdGhlIGNoaWxkIChsYXN0IG1lc3NhZ2UgdG8gdGhlIGNoaWxkKQorICAgICAqCisgICAgICogQHJldHVybnMgTnVtYmVyIG9mIHNlY29uZHMgc2luY2UgbGFzdCBzdXBlcnZpc2lvbiBvZiB0aGUgY2hpbGQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTZWNvbmRzU2luY2VMYXN0U3VwZXJ2aXNpb24odm9pZCkgY29uc3QgeyByZXR1cm4gbVNlY29uZHNTaW5jZVN1cGVydmlzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGxhc3Qgc3VwZXJ2aXNpb24gb2YgdGhlIGNoaWxkIHRvIHplcm8uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFJlc2V0U2Vjb25kc1NpbmNlTGFzdFN1cGVydmlzaW9uKHZvaWQpIHsgbVNlY29uZHNTaW5jZVN1cGVydmlzaW9uID0gMDsgfQorCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKK3ByaXZhdGU6CisgICAgSXA2OjpBZGRyZXNzIG1JcDZBZGRyZXNzW2tNYXhJcDZBZGRyZXNzUGVyQ2hpbGRdOyAgLy8vPCBSZWdpc3RlcmVkIElQdjYgYWRkcmVzc2VzCisgICAgdWludDMyX3QgICAgIG1UaW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBDaGlsZCB0aW1lb3V0CisKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgdWludDhfdCBtUmVxdWVzdFRsdnNba01heFJlcXVlc3RUbHZzXTsgICAgICAgICAgICAgICAgIC8vLzwgUmVxdWVzdGVkIE1MRSBUTFZzCisgICAgICAgIHVpbnQ4X3QgbUF0dGFjaENoYWxsZW5nZVtNbGU6OkNoYWxsZW5nZVRsdjo6a01heFNpemVdOyAvLy88IFRoZSBjaGFsbGVuZ2UgdmFsdWUKKyAgICB9OworCisgICAgdWludDMyX3QgICAgIG1JbmRpcmVjdEZyYW1lQ291bnRlcjsgICAgICAgICAgICAgICAgLy8vPCBGcmFtZSBjb3VudGVyIGZvciBjdXJyZW50IGluZGlyZWN0IG1lc3NhZ2UgKHVzZWQgZm9yZSByZXR4KS4KKyAgICBNZXNzYWdlICAgICAqbUluZGlyZWN0TWVzc2FnZTsgICAgICAgICAgICAgICAgICAgICAvLy88IEN1cnJlbnQgaW5kaXJlY3QgbWVzc2FnZS4KKyAgICB1aW50MTZfdCAgICAgbUluZGlyZWN0RnJhZ21lbnRPZmZzZXQ7ICAgICAgICAgICAgICAvLy88IDZMb1dQQU4gZnJhZ21lbnQgb2Zmc2V0IGZvciB0aGUgaW5kaXJlY3QgbWVzc2FnZS4KKyAgICB1aW50OF90ICAgICAgbUluZGlyZWN0S2V5SWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IEtleSBJZCBmb3IgY3VycmVudCBpbmRpcmVjdCBtZXNzYWdlICh1c2VkIGZvciByZXR4KS4KKyAgICB1aW50OF90ICAgICAgbUluZGlyZWN0VHhBdHRlbXB0czsgICAgICAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBkYXRhIHBvbGwgdHJpZ2dlcmVkIHR4IGF0dGVtcHRzLgorICAgIHVpbnQ4X3QgICAgICBtSW5kaXJlY3REc247ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTUFDIGxldmVsIERhdGEgU2VxdWVuY2UgTnVtYmVyIChEU04pIGZvciByZXR4IGF0dGVtcHRzLgorICAgIHVpbnQ4X3QgICAgICBtTmV0d29ya0RhdGFWZXJzaW9uOyAgICAgICAgICAgICAgICAgIC8vLzwgQ3VycmVudCBOZXR3b3JrIERhdGEgdmVyc2lvbgorICAgIHVpbnQxNl90ICAgICBtUXVldWVkTWVzc2FnZUNvdW50IDogMTM7ICAgICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIHF1ZXVlZCBpbmRpcmVjdCBtZXNzYWdlcyBmb3IgdGhlIGNoaWxkLgorICAgIGJvb2wgICAgICAgICBtVXNlU2hvcnRBZGRyZXNzIDogMTsgICAgICAgICAgICAgICAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIHNob3J0IG9yIGV4dGVuZGVkIGFkZHJlc3MuCisgICAgYm9vbCAgICAgICAgIG1Tb3VyY2VNYXRjaFBlbmRpbmcgOiAxOyAgICAgICAgICAgICAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgcGVuZGluZyB0byBhZGQgdG8gc3JjIG1hdGNoIHRhYmxlLgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KKyAgICB1aW50MTZfdCAgICAgbVNlY29uZHNTaW5jZVN1cGVydmlzaW9uOyAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGxhc3Qgc3VwZXJ2aXNpb24gb2YgdGhlIGNoaWxkLgorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKK307CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgVGhyZWFkIFJvdXRlcgorICoKKyAqLworY2xhc3MgUm91dGVyIDogcHVibGljIE5laWdoYm9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgcm91dGVyIElEIG9mIHRoZSBuZXh0IGhvcCB0byB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSByb3V0ZXIgSUQgb2YgdGhlIG5leHQgaG9wIHRvIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICovCisgICAgdWludDhfdCBHZXROZXh0SG9wKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1OZXh0SG9wOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSByb3V0ZXIgSUQgb2YgdGhlIG5leHQgaG9wIHRvIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJvdXRlcklkICBUaGUgcm91dGVyIElEIG9mIHRoZSBuZXh0IGhvcCB0byB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TmV4dEhvcCh1aW50OF90IGFSb3V0ZXJJZCkgeyBtTmV4dEhvcCA9IGFSb3V0ZXJJZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZ2V0cyB0aGUgbGluayBxdWFsaXR5IG91dCB2YWx1ZSBmb3IgdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgbGluayBxdWFsaXR5IG91dCB2YWx1ZSBmb3IgdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50OF90IEdldExpbmtRdWFsaXR5T3V0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1MaW5rUXVhbGl0eU91dDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbGluayBxdWFsaXR5IG91dCB2YWx1ZSBmb3IgdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTGlua1F1YWxpdHkgIFRoZSBsaW5rIHF1YWxpdHkgb3V0IHZhbHVlIGZvciB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TGlua1F1YWxpdHlPdXQodWludDhfdCBhTGlua1F1YWxpdHkpIHsgbUxpbmtRdWFsaXR5T3V0ID0gYUxpbmtRdWFsaXR5OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBnZXQgdGhlIHJvdXRlIGNvc3QgdG8gdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgcm91dGUgY29zdCB0byB0aGlzIHJvdXRlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgR2V0Q29zdCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ29zdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcm91dGVyIGNvc3QgdG8gdGhpcyByb3V0ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29zdCAgVGhlIHJvdXRlciBjb3N0IHRvIHRoaXMgcm91dGVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRDb3N0KHVpbnQ4X3QgYUNvc3QpIHsgbUNvc3QgPSBhQ29zdDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcm91dGVyIElEIGhhcyBiZWVuIGFsbG9jYXRlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhpcyByb3V0ZXIgSUQgaGFzIGJlZW4gYWxsb2NhdGVkLCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQWxsb2NhdGVkKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1BbGxvY2F0ZWQ7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgd2hldGhlciBvciBub3QgdGhpcyByb3V0ZXIgSUQgaGFzIGJlZW4gYWxsb2NhdGVkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUFsbG9jYXRlZCAgVFJVRSBpZiB0aGlzIHJvdXRlciBJRCBoYXMgYmVlbiBhbGxvY2F0ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0QWxsb2NhdGVkKGJvb2wgYUFsbG9jYXRlZCkgeyBtQWxsb2NhdGVkID0gYUFsbG9jYXRlZDsgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2xhaW0gZGVsYXkgaXMgaW4gZWZmZWN0IGZvciB0aGlzIHJvdXRlciBJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIHJlY2xhaW0gZGVsYXkgaXMgaW4gZWZmZWN0LCBGQUxTRSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzUmVjbGFpbURlbGF5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1SZWNsYWltRGVsYXk7IH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgd2hldGhlciB0aGUgcmVjbGFpbSBkZWxheSBpcyBpbiBlZmZlY3QgZm9yIHRoaXMgcm91dGVyIElELgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVJlY2xhaW1EZWxheSAgVFJVRSBpZiB0aGUgcmVjbGFpbSBkZWxheSBpcyBpbiBlZmZlY3QsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UmVjbGFpbURlbGF5KGJvb2wgYVJlY2xhaW1EZWxheSkgeyBtUmVjbGFpbURlbGF5ID0gYVJlY2xhaW1EZWxheTsgfQorCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbU5leHRIb3A7ICAgICAgICAgICAgIC8vLzwgVGhlIG5leHQgaG9wIHRvd2FyZHMgdGhpcyByb3V0ZXIKKyAgICB1aW50OF90IG1MaW5rUXVhbGl0eU91dCA6IDI7ICAvLy88IFRoZSBsaW5rIHF1YWxpdHkgb3V0IGZvciB0aGlzIHJvdXRlcgorICAgIHVpbnQ4X3QgbUNvc3QgOiA0OyAgICAgICAgICAgIC8vLzwgVGhlIGNvc3QgdG8gdGhpcyByb3V0ZXIgdmlhIG5laWdoYm9yIHJvdXRlcgorICAgIGJvb2wgICAgbUFsbG9jYXRlZCA6IDE7ICAgICAgIC8vLzwgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgZW50cnkgaXMgYWxsb2NhdGVkCisgICAgYm9vbCAgICBtUmVjbGFpbURlbGF5IDogMTsgICAgLy8vPCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhpcyBlbnRyeSBpcyB3YWl0aW5nIHRvIGJlIHJlY2xhaW1lZAorfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gVE9QT0xPR1lfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uY3BwIGIvc3JjL2NvcmUvdXRpbHMvY2hpbGRfc3VwZXJ2aXNpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNDgwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy9jaGlsZF9zdXBlcnZpc2lvbi5jcHAKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGNoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJjaGlsZF9zdXBlcnZpc2lvbi5ocHAiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdGhyZWFkX25ldGlmLmhwcCIKKworbmFtZXNwYWNlIG90IHsKK25hbWVzcGFjZSBVdGlscyB7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCisjaWYgT1BFTlRIUkVBRF9GVEQKKworQ2hpbGRTdXBlcnZpc29yOjpDaGlsZFN1cGVydmlzb3IoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmQ2hpbGRTdXBlcnZpc29yOjpIYW5kbGVUaW1lciwgdGhpcyksCisgICAgbVN1cGVydmlzaW9uSW50ZXJ2YWwoa0RlZmF1bHRTdXBlcnZpc2lvbkludGVydmFsKQoreworfQorCit2b2lkIENoaWxkU3VwZXJ2aXNvcjo6U3RhcnQodm9pZCkKK3sKKyAgICBWZXJpZnlPckV4aXQobVN1cGVydmlzaW9uSW50ZXJ2YWwgIT0gMCk7CisgICAgVmVyaWZ5T3JFeGl0KCFtVGltZXIuSXNSdW5uaW5nKCkpOworICAgIG1UaW1lci5TdGFydChrT25lU2Vjb25kKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgQ2hpbGRTdXBlcnZpc29yOjpTdG9wKHZvaWQpCit7CisgICAgbVRpbWVyLlN0b3AoKTsKK30KKwordm9pZCBDaGlsZFN1cGVydmlzb3I6OlNldFN1cGVydmlzaW9uSW50ZXJ2YWwodWludDE2X3QgYUludGVydmFsKQoreworICAgIG1TdXBlcnZpc2lvbkludGVydmFsID0gYUludGVydmFsOworICAgIFN0YXJ0KCk7Cit9CisKK0NoaWxkICpDaGlsZFN1cGVydmlzb3I6OkdldERlc3RpbmF0aW9uKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdAoreworICAgIENoaWxkICpjaGlsZCA9IE5VTEw7CisgICAgdWludDhfdCBjaGlsZEluZGV4OworICAgIHVpbnQ4X3QgbnVtQ2hpbGRyZW47CisKKyAgICBWZXJpZnlPckV4aXQoYU1lc3NhZ2UuR2V0VHlwZSgpID09IE1lc3NhZ2U6OmtUeXBlU3VwZXJ2aXNpb24pOworCisgICAgYU1lc3NhZ2UuUmVhZCgwLCBzaXplb2YoY2hpbGRJbmRleCksICZjaGlsZEluZGV4KTsKKyAgICBjaGlsZCA9IEdldE5ldGlmKCkuR2V0TWxlKCkuR2V0Q2hpbGRyZW4oJm51bUNoaWxkcmVuKTsKKyAgICBWZXJpZnlPckV4aXQoY2hpbGRJbmRleCA8IG51bUNoaWxkcmVuLCBjaGlsZCA9IE5VTEwpOworICAgIGNoaWxkICs9IGNoaWxkSW5kZXg7CisKK2V4aXQ6CisgICAgcmV0dXJuIGNoaWxkOworfQorCit2b2lkIENoaWxkU3VwZXJ2aXNvcjo6U2VuZE1lc3NhZ2UoQ2hpbGQgJmFDaGlsZCkKK3sKKyAgICBUaHJlYWROZXRpZiAmbmV0aWYgPSBHZXROZXRpZigpOworICAgIE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgY2hpbGRJbmRleDsKKworICAgIFZlcmlmeU9yRXhpdChhQ2hpbGQuR2V0SW5kaXJlY3RNZXNzYWdlQ291bnQoKSA9PSAwKTsKKworICAgIG1lc3NhZ2UgPSBuZXRpZi5HZXRJcDYoKS5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlU3VwZXJ2aXNpb24sIHNpemVvZih1aW50OF90KSk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgICAvLyBTdXBlcnZpc2lvbiBtZXNzYWdlIGlzIGFuIGVtcHR5IHBheWxvYWQgMTUuNCBkYXRhIGZyYW1lLgorICAgIC8vIFRoZSBjaGlsZCBpbmRleCBpcyBzdG9yZWQgaGVyZSBpbiB0aGUgbWVzc2FnZSBjb250ZW50IHRvIGFsbG93CisgICAgLy8gdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBtZXNzYWdlIHRvIGJlIGxhdGVyIHJldHJpZXZlZCB1c2luZworICAgIC8vIGBDaGlsZFN1cGVydmlzb3I6OkdldERlc3RpbmF0aW9uKG1lc3NhZ2UpYC4KKworICAgIGNoaWxkSW5kZXggPSBuZXRpZi5HZXRNbGUoKS5HZXRDaGlsZEluZGV4KGFDaGlsZCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG1lc3NhZ2UtPkFwcGVuZCgmY2hpbGRJbmRleCwgc2l6ZW9mKGNoaWxkSW5kZXgpKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gbmV0aWYuU2VuZE1lc3NhZ2UoKm1lc3NhZ2UpKTsKKyAgICBtZXNzYWdlID0gTlVMTDsKKworICAgIG90TG9nSW5mb01sZShHZXRJbnN0YW5jZSgpLCAiU2VuZGluZyBzdXBlcnZpc2lvbiBtZXNzYWdlIHRvIGNoaWxkIDB4JTA0eCIsIGFDaGlsZC5HZXRSbG9jMTYoKSk7CisKK2V4aXQ6CisKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgIH0KK30KKwordm9pZCBDaGlsZFN1cGVydmlzb3I6OlVwZGF0ZU9uU2VuZChDaGlsZCAmYUNoaWxkKQoreworICAgIGFDaGlsZC5SZXNldFNlY29uZHNTaW5jZUxhc3RTdXBlcnZpc2lvbigpOworfQorCit2b2lkIENoaWxkU3VwZXJ2aXNvcjo6SGFuZGxlVGltZXIoVGltZXIgJmFUaW1lcikKK3sKKyAgICBHZXRPd25lcihhVGltZXIpLkhhbmRsZVRpbWVyKCk7Cit9CisKK3ZvaWQgQ2hpbGRTdXBlcnZpc29yOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIENoaWxkICpjaGlsZDsKKyAgICB1aW50OF90IG51bUNoaWxkcmVuOworCisgICAgVmVyaWZ5T3JFeGl0KG1TdXBlcnZpc2lvbkludGVydmFsICE9IDApOworCisgICAgY2hpbGQgPSBHZXROZXRpZigpLkdldE1sZSgpLkdldENoaWxkcmVuKCZudW1DaGlsZHJlbik7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgaSsrLCBjaGlsZCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+SXNTdGF0ZVZhbGlkT3JSZXN0b3JpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjaGlsZC0+SW5jcmVtZW50U2Vjb25kc1NpbmNlTGFzdFN1cGVydmlzaW9uKCk7CisKKyAgICAgICAgaWYgKChjaGlsZC0+R2V0U2Vjb25kc1NpbmNlTGFzdFN1cGVydmlzaW9uKCkgPj0gbVN1cGVydmlzaW9uSW50ZXJ2YWwpICYmIChjaGlsZC0+SXNSeE9uV2hlbklkbGUoKSA9PSBmYWxzZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNlbmRNZXNzYWdlKCpjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVGltZXIuU3RhcnQoa09uZVNlY29uZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCitDaGlsZFN1cGVydmlzb3IgJkNoaWxkU3VwZXJ2aXNvcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgQ2hpbGRTdXBlcnZpc29yICZzdXBlcnZpc29yID0gKnN0YXRpY19jYXN0PENoaWxkU3VwZXJ2aXNvciAqPihhQ29udGV4dC5HZXRDb250ZXh0KCkpOworI2Vsc2UKKyAgICBDaGlsZFN1cGVydmlzb3IgJnN1cGVydmlzb3IgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0Q2hpbGRTdXBlcnZpc29yKCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb250ZXh0KTsKKyNlbmRpZgorICAgIHJldHVybiBzdXBlcnZpc29yOworfQorCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRlRECisKK1N1cGVydmlzaW9uTGlzdGVuZXI6OlN1cGVydmlzaW9uTGlzdGVuZXIoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZikgOgorICAgIFRocmVhZE5ldGlmTG9jYXRvcihhVGhyZWFkTmV0aWYpLAorICAgIG1UaW1lcihhVGhyZWFkTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmU3VwZXJ2aXNpb25MaXN0ZW5lcjo6SGFuZGxlVGltZXIsIHRoaXMpLAorICAgIG1UaW1lb3V0KDApCit7CisgICAgU2V0VGltZW91dChrRGVmYXVsdFRpbWVvdXQpOworfQorCit2b2lkIFN1cGVydmlzaW9uTGlzdGVuZXI6OlN0YXJ0KHZvaWQpCit7CisgICAgUmVzdGFydFRpbWVyKCk7Cit9CisKK3ZvaWQgU3VwZXJ2aXNpb25MaXN0ZW5lcjo6U3RvcCh2b2lkKQoreworICAgIG1UaW1lci5TdG9wKCk7Cit9CisKK3ZvaWQgU3VwZXJ2aXNpb25MaXN0ZW5lcjo6U2V0VGltZW91dCh1aW50MTZfdCBhVGltZW91dCkKK3sKKyAgICBpZiAobVRpbWVvdXQgIT0gYVRpbWVvdXQpCisgICAgeworICAgICAgICBtVGltZW91dCA9IGFUaW1lb3V0OworICAgICAgICBSZXN0YXJ0VGltZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU3VwZXJ2aXNpb25MaXN0ZW5lcjo6VXBkYXRlT25SZWNlaXZlKGNvbnN0IE1hYzo6QWRkcmVzcyAmYVNvdXJjZUFkZHJlc3MsIGJvb2wgYUlzU2VjdXJlKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICAvLyBJZiBsaXN0ZW5lciBpcyBlbmFibGVkIGFuZCBkZXZpY2UgaXMgYSBjaGlsZCBhbmQgaXQgcmVjZWl2ZWQgYSBzZWN1cmUgZnJhbWUgZnJvbSBpdHMgcGFyZW50LCByZXN0YXJ0IHRoZSB0aW1lci4KKworICAgIFZlcmlmeU9yRXhpdChtVGltZXIuSXNSdW5uaW5nKCkgJiYgYUlzU2VjdXJlICAmJiAobmV0aWYuR2V0TWxlKCkuR2V0Um9sZSgpID09IE9UX0RFVklDRV9ST0xFX0NISUxEKSAmJgorICAgICAgICAgICAgICAgICAobmV0aWYuR2V0TWxlKCkuR2V0TmVpZ2hib3IoYVNvdXJjZUFkZHJlc3MpID09IG5ldGlmLkdldE1sZSgpLkdldFBhcmVudCgpKSk7CisKKyAgICBSZXN0YXJ0VGltZXIoKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgU3VwZXJ2aXNpb25MaXN0ZW5lcjo6UmVzdGFydFRpbWVyKHZvaWQpCit7CisgICAgVGhyZWFkTmV0aWYgJm5ldGlmID0gR2V0TmV0aWYoKTsKKworICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLCBpZiB0aGUgdGltZW91dCB2YWx1ZSBpcyBub24temVybyBhbmQgdGhlIGRldmljZSBpcyBhIHNsZWVweSBjaGlsZC4KKworICAgIGlmICgobVRpbWVvdXQgIT0gMCkgJiYgKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkgJiYKKyAgICAgICAgKG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXRSeE9uV2hlbklkbGUoKSA9PSBmYWxzZSkpCisgICAgeworICAgICAgICBtVGltZXIuU3RhcnQoVGltZXI6OlNlY1RvTXNlYyhtVGltZW91dCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVGltZXIuU3RvcCgpOworICAgIH0KK30KKwordm9pZCBTdXBlcnZpc2lvbkxpc3RlbmVyOjpIYW5kbGVUaW1lcihUaW1lciAmYVRpbWVyKQoreworICAgIEdldE93bmVyKGFUaW1lcikuSGFuZGxlVGltZXIoKTsKK30KKwordm9pZCBTdXBlcnZpc2lvbkxpc3RlbmVyOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIFRocmVhZE5ldGlmICZuZXRpZiA9IEdldE5ldGlmKCk7CisKKyAgICBWZXJpZnlPckV4aXQoKG5ldGlmLkdldE1sZSgpLkdldFJvbGUoKSA9PSBPVF9ERVZJQ0VfUk9MRV9DSElMRCkgJiYKKyAgICAgICAgICAgICAgICAgKG5ldGlmLkdldE1lc2hGb3J3YXJkZXIoKS5HZXRSeE9uV2hlbklkbGUoKSA9PSBmYWxzZSkpOworCisgICAgb3RMb2dXYXJuTWxlKG5ldGlmLkdldEluc3RhbmNlKCksICJTdXBlcnZpc2lvbiB0aW1lb3V0LiBObyBmcmFtZSBmcm9tIHBhcmVudCBpbiAlZCBzZWMiLCBtVGltZW91dCk7CisKKyAgICBuZXRpZi5HZXRNbGUoKS5TZW5kQ2hpbGRVcGRhdGVSZXF1ZXN0KCk7CisKK2V4aXQ6CisgICAgUmVzdGFydFRpbWVyKCk7Cit9CisKK1N1cGVydmlzaW9uTGlzdGVuZXIgJlN1cGVydmlzaW9uTGlzdGVuZXI6OkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KQoreworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIFN1cGVydmlzaW9uTGlzdGVuZXIgJmxpc3RlbmVyID0gKnN0YXRpY19jYXN0PFN1cGVydmlzaW9uTGlzdGVuZXIgKj4oYUNvbnRleHQuR2V0Q29udGV4dCgpKTsKKyNlbHNlCisgICAgU3VwZXJ2aXNpb25MaXN0ZW5lciAmbGlzdGVuZXIgPSBvdEdldFRocmVhZE5ldGlmKCkuR2V0U3VwZXJ2aXNpb25MaXN0ZW5lcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gbGlzdGVuZXI7Cit9CisKKyNlbmRpZiAvLyAjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04KKworfSAvLyBuYW1lc3BhY2UgVXRpbHMKK30gLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy9jaGlsZF9zdXBlcnZpc2lvbi5ocHAgYi9zcmMvY29yZS91dGlscy9jaGlsZF9zdXBlcnZpc2lvbi5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjMmRkMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL2NoaWxkX3N1cGVydmlzaW9uLmhwcApAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGNoaWxkIHN1cGVydmlzaW9uIGZlYXR1cmUuCisgKgorICovCisKKyNpZm5kZWYgQ0hJTERfU1VQRVJWSVNJT05fSFBQXworI2RlZmluZSBDSElMRF9TVVBFUlZJU0lPTl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2NhdG9yLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAiY29tbW9uL3RpbWVyLmhwcCIKKyNpbmNsdWRlICJtYWMvbWFjX2ZyYW1lLmhwcCIKKyNpbmNsdWRlICJ0aHJlYWQvdG9wb2xvZ3kuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRocmVhZE5ldGlmOworCituYW1lc3BhY2UgVXRpbHMgeworCisvKioKKyAqCisgKiBDaGlsZCBzdXBlcnZpc2lvbiBmZWF0dXJlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBwYXJlbnQKKyAqIHRvIGVuc3VyZSB0aGF0IGEgbWVzc2FnZSBpcyBzZW50IHRvIGVhY2ggc2xlZXB5IGNoaWxkIHdpdGhpbgorICogYSBmaXhlZCBpbnRlcnZhbCwgbmFtZWx5IHRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbC4gSWYgdGhlcmUKKyAqIGlzIG5vIHRyYW5zbWlzc2lvbiB0byB0aGUgY2hpbGQgd2l0aGluIHRoZSBzdXBlcnZpc2lvbgorICogaW50ZXJ2YWwsIGNoaWxkIHN1cGVydmlzb3IgZW5xdWV1ZXMgYW5kIHNlbmRzIGEgc3VwZXJ2aXNpb24KKyAqIG1lc3NhZ2UgKGEgZGF0YSBtZXNzYWdlIHdpdGggZW1wdHkgcGF5bG9hZCkgdG8gdGhlIGNoaWxkLgorICoKKyAqIE9uIHRoZSBjaGlsZCBzaWRlLCB0aGlzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIGNvbm5lY3Rpdml0eQorICogdG8gdGhlIHBhcmVudC4gSWYgdGhlIGNoaWxkIGRvZXMgbm90IGhlYXIgZnJvbSBpdHMgcGFyZW50CisgKiBmb3IgYSBwcmUtc3BlY2lmaWVkIHRpbWVvdXQgaW50ZXJ2YWwgaXQgYXNzdW1lcyB0aGF0IGl0IG1heQorICogYmUgZGlzY29ubmVjdGVkIGFuZCB0cmllcyB0byByZS1hdHRhY2ggdG8gdGhlIHBhcmVudC4KKyAqCisgKiBUaGUgY2hpbGQgc3VwZXJ2aXNpb24gcHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUsIG1vcmUKKyAqIGVuZXJneS1lZmZpY2llbnQgc29sdXRpb24gY29tcGFyZWQgdG8gcmVxdWlyaW5nIHRoZSBzbGVlcHkgY2hpbGQKKyAqIHRvIHBlcmlvZGljYWxseSBwZXJmb3JtIGFuIE1MRSBDaGlsZCBVcGRhdGUgUmVxdWVzdC9SZXNwb25zZQorICogZXhjaGFuZ2Ugd2l0aCB0aGUgcGFyZW50IChhcyBhIHdheSBvZiB2ZXJpZnlpbmcgdGhhdCBpdAorICogaXMgc3RpbGwgY29ubmVjdGVkIHRvIHRoZSBwYXJlbnQpLiBUaGUgY2hpbGQgc3VwZXJ2aXNpb24KKyAqIHNvbHV0aW9uIHB1dHMgdGhlIGJ1cmRlbiBvZiBtZXNzYWdlIHRyYW5zbWlzc2lvbnMgb24gdGhlCisgKiBwYXJlbnQgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbGx5IG1vcmUgZW5lcmd5LWNvbnN0cmFpbmVkIGNoaWxkLgorICoKKyAqIE5vdGUgdGhhdCBtb3N0IHJhZGlvcyBnZW5lcmF0ZSBhbiBhdXRvLWFjayBpbiBoYXJkd2FyZSBpbgorICogcmVzcG9uc2UgdG8gYSByZWNlaXZlZCBmcmFtZSwgc28gdGhlIGNoaWxkIGNhbm5vdCBzb2xlbHkgcmVseQorICogb24gdGhlIDE1LjQgYWNrbm93bGVkZ21lbnRzIGl0IHJlY2VpdmVzIGZyb20gcGFyZW50IGFzIGFuCisgKiBpbmRpY2F0b3IgdGhhdCBpdCBpcyBzdGlsbCBjb25uZWN0ZWQgYW5kIGlzIGluIHBhcmVudCdzCisgKiBjaGlsZCB0YWJsZS4KKyAqCisgKi8KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OICYmIE9QRU5USFJFQURfRlRECisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgY2hpbGQgc3VwZXJ2aXNvci4KKyAqCisgKi8KK2NsYXNzIENoaWxkU3VwZXJ2aXNvcjogcHVibGljIFRocmVhZE5ldGlmTG9jYXRvcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaHJlYWROZXRpZiAgQSByZWZlcmVuY2UgdG8gdGhlIFRocmVhZCBuZXR3b3JrIGludGVyZmFjZS4KKyAgICAgKgorICAgICAqLworICAgIGV4cGxpY2l0IENoaWxkU3VwZXJ2aXNvcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgY2hpbGQgc3VwZXJ2aXNpb24gcHJvY2VzcyBvbiBwYXJlbnQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0YXJ0KHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIGNoaWxkIHN1cGVydmlzaW9uIHByb2Nlc3Mgb24gcGFyZW50LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc3VwZXJ2aXNpb24gaW50ZXJ2YWwuCisgICAgICoKKyAgICAgKiBTZXR0aW5nIHRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbCB0byBhIG5vbi16ZXJvIHZhbHVlIHdpbGwgZW5zdXJlIHRvIHN0YXJ0IHRoZSBzdXBlcnZpc2lvbiBwcm9jZXNzIChpZiBub3QKKyAgICAgKiBhbHJlYWR5IHN0YXJ0ZWQpLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhSW50ZXJ2YWwgSWYgbm9uLXplcm8sIHRoZSBkZXNpcmVkIHN1cGVydmlzaW9uIGludGVydmFsIChpbiBzZWNvbmRzKSwgemVybyB0byBkaXNhYmxlIHN1cGVydmlzaW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRTdXBlcnZpc2lvbkludGVydmFsKHVpbnQxNl90IGFJbnRlcnZhbCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzdXBlcnZpc2lvbiBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBUaGUgY3VycmVudCBzdXBlcnZpc2lvbiBpbnRlcnZhbCAoc2Vjb25kcyksIG9yIHplcm8gaWYgc3VwZXJ2aXNpb24gaXMgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBHZXRTdXBlcnZpc2lvbkludGVydmFsKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1TdXBlcnZpc2lvbkludGVydmFsOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiBmb3IgYSBzdXBlcnZpc2lvbiBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSBhTWVzc2FnZSBUaGUgbWVzc2FnZSBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGNoaWxkIG9mIHRoZSBtZXNzYWdlLCBvciBOVUxMIGlmIEBwIGFNZXNzYWdlIGlzIG5vdCBvZiBzdXBlcnZpc2lvbiB0eXBlLgorICAgICAqCisgICAgICovCisgICAgQ2hpbGQgKkdldERlc3RpbmF0aW9uKGNvbnN0IE1lc3NhZ2UgJmFNZXNzYWdlKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHN1cGVydmlzaW9uIHN0YXRlIGZvciBhIGNoaWxkLiBJdCBpbmZvcm1zIHRoZSBjaGlsZCBzdXBlcnZpc29yIHRoYXQgYSBtZXNzYWdlIHdhcworICAgICAqIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gYUNoaWxkICAgICBUaGUgY2hpbGQgdG8gd2hpY2ggYSBtZXNzYWdlIHdhcyBzdWNjZXNzZnVsbHkgc2VudC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlT25TZW5kKENoaWxkICZhQ2hpbGQpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEZWZhdWx0U3VwZXJ2aXNpb25JbnRlcnZhbCA9IE9QRU5USFJFQURfQ09ORklHX0NISUxEX1NVUEVSVklTSU9OX0lOVEVSVkFMLCAgLy8gKHNlY29uZHMpCisgICAgICAgIGtPbmVTZWNvbmQgPSAxMDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25lIHNlY29uZCBpbnRlcnZhbCAoaW4gbXMpLgorICAgIH07CisKKyAgICB2b2lkIFNlbmRNZXNzYWdlKENoaWxkICZhQ2hpbGQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisgICAgc3RhdGljIENoaWxkU3VwZXJ2aXNvciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCisgICAgVGltZXIgICAgICAgIG1UaW1lcjsKKyAgICB1aW50MTZfdCAgICAgbVN1cGVydmlzaW9uSW50ZXJ2YWw7Cit9OworCisjZWxzZSAgLy8gI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OICYmIE9QRU5USFJFQURfRlRECisKK2NsYXNzIENoaWxkU3VwZXJ2aXNvcgoreworcHVibGljOgorICAgIGV4cGxpY2l0IENoaWxkU3VwZXJ2aXNvcihUaHJlYWROZXRpZiAmKSB7IH0KKyAgICB2b2lkIFN0YXJ0KHZvaWQpIHsgfQorICAgIHZvaWQgU3RvcCh2b2lkKSB7IH0KKyAgICB2b2lkIFNldFN1cGVydmlzaW9uSW50ZXJ2YWwodWludDE2X3QpIHsgfQorICAgIHVpbnQxNl90IEdldFN1cGVydmlzaW9uSW50ZXJ2YWwodm9pZCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIENoaWxkICpHZXREZXN0aW5hdGlvbihjb25zdCBNZXNzYWdlICYpIGNvbnN0IHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2b2lkIFVwZGF0ZU9uU2VuZChDaGlsZCAmKSB7IH0KK307CisKKyNlbmRpZiAvLyAjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ0hJTERfU1VQRVJWSVNJT04gJiYgT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgY2hpbGQgc3VwZXJ2aXNpb24gbGlzdGVuZXIuCisgKgorICovCitjbGFzcyBTdXBlcnZpc2lvbkxpc3RlbmVyOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgU3VwZXJ2aXNpb25MaXN0ZW5lcihUaHJlYWROZXRpZiAmYVRocmVhZE5ldGlmKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgc3VwZXJ2aXNpb24gbGlzdGVuZXIgb3BlcmF0aW9uLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTdGFydCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHRoZSBzdXBlcnZpc2lvbiBsaXN0ZW5lciBvcGVyYXRpb24uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFN0b3Aodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBzdXBlcnZpc2lvbiBjaGVjayB0aW1lb3V0IChpbiBzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIElmIHRoZSBjaGlsZCBkb2VzIG5vdCBoZWFyIGZyb20gaXRzIHBhcmVudCB3aXRoaW4gdGhlIGdpdmVuIGNoZWNrIHRpbWVvdXQgaW50ZXJ2YWwsIGl0IGluaXRpYXRlcyB0aGUgcmUtYXR0YWNoCisgICAgICogcHJvY2VzcyAoTUxFIENoaWxkIFVwZGF0ZSBSZXF1ZXN0L1Jlc3BvbnNlIGV4Y2hhbmdlIHdpdGggaXRzIHBhcmVudCkuIFNldHRpbmcgdGhlIHRpbWVvdXQgdG8gemVybywgZGlzYWJsZXMgdGhlCisgICAgICogc3VwZXJ2aXNpb24gY2hlY2sgb24gdGhlIGNoaWxkLgorICAgICAqCisgICAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gc2VsZWN0IGEgc3VwZXJ2aXNpb24gY2hlY2sgdGltZW91dCB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgcGFyZW50J3MgY2hpbGQgc3VwZXJ2aXNpb24KKyAgICAgKiBpbnRlcnZhbCBwbHVzIHRoZSBtYXhpbXVtIHRpbWUgYmV0d2VlbiB0aGUgY2hpbGQncyBkYXRhIHBvbGwgdHJhbnNtaXNzaW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFUaW1lb3V0ICAgVGhlIHRpbWVvdXQgaW50ZXJ2YWwgKGluIHNlY29uZHMpLCB6ZXJvIHRvIGRpc2FibGUgdGhlIHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0VGltZW91dCh1aW50MTZfdCBhVGltZW91dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzdXBlcnZpc2lvbiBjaGVjayB0aW1lb3V0IGludGVydmFsIChpbiBzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgVGhlIGNoZWNrIHRpbWVvdXQgaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9yIHplcm8gaWYgdGhlIHN1cGVydmlzaW9uIGNoZWNrIG9uIHRoZSBjaGlsZCBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IEdldFRpbWVvdXQodm9pZCkgY29uc3QgIHsgcmV0dXJuIG1UaW1lb3V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBzdXBlcnZpc2lvbiBsaXN0ZW5lciBzdGF0ZS4gSXQgaW5mb3JtcyB0aGUgbGlzdGVuZXIgb2YgYSByZWNlaXZlZCBmcmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICBhU291cmNlICAgIFRoZSBzb3VyY2UgTUFDIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmVkIGZyYW1lCisgICAgICogQHBhcmFtW2luXSAgIGFJc1NlY3VyZSAgVFJVRSB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZWNlaXZlZCBmcmFtZSBpcyBzZWN1cmUsIEZBTFNFIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgVXBkYXRlT25SZWNlaXZlKGNvbnN0IE1hYzo6QWRkcmVzcyAmYVNvdXJjZSwgYm9vbCBhSXNTZXVjcmUpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtEZWZhdWx0VGltZW91dCA9IE9QRU5USFJFQURfQ09ORklHX1NVUEVSVklTSU9OX0NIRUNLX1RJTUVPVVQsICAgLy8gKHNlY29uZHMpCisgICAgfTsKKworICAgIHZvaWQgUmVzdGFydFRpbWVyKHZvaWQpOworICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisgICAgc3RhdGljIFN1cGVydmlzaW9uTGlzdGVuZXIgJkdldE93bmVyKGNvbnN0IENvbnRleHQgJmFDb250ZXh0KTsKKworICAgIFRpbWVyIG1UaW1lcjsKKyAgICB1aW50MTZfdCBtVGltZW91dDsKK307CisKKyNlbHNlIC8vICNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DSElMRF9TVVBFUlZJU0lPTgorCitjbGFzcyBTdXBlcnZpc2lvbkxpc3RlbmVyCit7CitwdWJsaWM6CisgICAgU3VwZXJ2aXNpb25MaXN0ZW5lcihUaHJlYWROZXRpZiAmKSB7IH0KKyAgICB2b2lkIFN0YXJ0KHZvaWQpIHsgfQorICAgIHZvaWQgU3RvcCh2b2lkKSB7IH0KKyAgICB2b2lkIFNldFRpbWVvdXQodWludDE2X3QpIHsgfQorICAgIHVpbnQxNl90IEdldFRpbWVvdXQodm9pZCkgY29uc3QgIHsgcmV0dXJuIDA7IH0KKyAgICB2b2lkIFVwZGF0ZU9uUmVjZWl2ZShjb25zdCBNYWM6OkFkZHJlc3MgJiwgYm9vbCkgeyB9Cit9OworCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRU5BQkxFX0NISUxEX1NVUEVSVklTSU9OCisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAvLyBuYW1lc3BhY2UgVXRpbHMKK30gLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gQ0hJTERfU1VQRVJWSVNJT05fSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvamFtX2RldGVjdG9yLmNwcCBiL3NyYy9jb3JlL3V0aWxzL2phbV9kZXRlY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkYTg2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL2phbV9kZXRlY3Rvci5jcHAKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGphbSBkZXRlY3RvciBmZWF0dXJlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiamFtX2RldGVjdG9yLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIFV0aWxzIHsKKworSmFtRGV0ZWN0b3I6OkphbURldGVjdG9yKFRocmVhZE5ldGlmICZhTmV0aWYpIDoKKyAgICBUaHJlYWROZXRpZkxvY2F0b3IoYU5ldGlmKSwKKyAgICBtSGFuZGxlcihOVUxMKSwKKyAgICBtQ29udGV4dChOVUxMKSwKKyAgICBtUnNzaVRocmVzaG9sZChrRGVmYXVsdFJzc2lUaHJlc2hvbGQpLAorICAgIG1UaW1lcihhTmV0aWYuR2V0SXA2KCkubVRpbWVyU2NoZWR1bGVyLCAmSmFtRGV0ZWN0b3I6OkhhbmRsZVRpbWVyLCB0aGlzKSwKKyAgICBtSGlzdG9yeUJpdG1hcCgwKSwKKyAgICBtQ3VyU2Vjb25kU3RhcnRUaW1lKDApLAorICAgIG1TYW1wbGVJbnRlcnZhbCgwKSwKKyAgICBtV2luZG93KGtNYXhXaW5kb3cpLAorICAgIG1CdXN5UGVyaW9kKGtNYXhXaW5kb3cpLAorICAgIG1FbmFibGVkKGZhbHNlKSwKKyAgICBtQWx3YXlzQWJvdmVUaHJlc2hvbGQoZmFsc2UpLAorICAgIG1KYW1TdGF0ZShmYWxzZSkKK3sKK30KKworb3RFcnJvciBKYW1EZXRlY3Rvcjo6U3RhcnQoSGFuZGxlciBhSGFuZGxlciwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoIW1FbmFibGVkLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworICAgIFZlcmlmeU9yRXhpdChhSGFuZGxlciAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICBtSGFuZGxlciA9IGFIYW5kbGVyOworICAgIG1Db250ZXh0ID0gYUNvbnRleHQ7CisKKyAgICBtRW5hYmxlZCA9IHRydWU7CisKKyAgICBtQ3VyU2Vjb25kU3RhcnRUaW1lID0gVGltZXI6OkdldE5vdygpOworICAgIG1BbHdheXNBYm92ZVRocmVzaG9sZCA9IHRydWU7CisgICAgbUhpc3RvcnlCaXRtYXAgPSAwOworICAgIG1KYW1TdGF0ZSA9IGZhbHNlOworICAgIG1TYW1wbGVJbnRlcnZhbCA9IGtNYXhTYW1wbGVJbnRlcnZhbDsKKworICAgIG1UaW1lci5TdGFydChrTWluU2FtcGxlSW50ZXJ2YWwpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBKYW1EZXRlY3Rvcjo6U3RvcCh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1FbmFibGVkLCBlcnJvciA9IE9UX0VSUk9SX0FMUkVBRFkpOworCisgICAgbUVuYWJsZWQgPSBmYWxzZTsKKyAgICBtSmFtU3RhdGUgPSBmYWxzZTsKKworICAgIG1UaW1lci5TdG9wKCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIEphbURldGVjdG9yOjpTZXRSc3NpVGhyZXNob2xkKGludDhfdCBhVGhyZXNob2xkKQoreworICAgIG1Sc3NpVGhyZXNob2xkID0gYVRocmVzaG9sZDsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCitvdEVycm9yIEphbURldGVjdG9yOjpTZXRXaW5kb3codWludDhfdCBhV2luZG93KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFXaW5kb3cgIT0gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgIFZlcmlmeU9yRXhpdChhV2luZG93IDw9IGtNYXhXaW5kb3csIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIG1XaW5kb3cgPSBhV2luZG93OworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBKYW1EZXRlY3Rvcjo6U2V0QnVzeVBlcmlvZCh1aW50OF90IGFCdXN5UGVyaW9kKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KGFCdXN5UGVyaW9kICE9IDAsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBWZXJpZnlPckV4aXQoYUJ1c3lQZXJpb2QgPD0gbVdpbmRvdywgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgbUJ1c3lQZXJpb2QgPSBhQnVzeVBlcmlvZDsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgSmFtRGV0ZWN0b3I6OkhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpCit7CisgICAgR2V0T3duZXIoYVRpbWVyKS5IYW5kbGVUaW1lcigpOworfQorCit2b2lkIEphbURldGVjdG9yOjpIYW5kbGVUaW1lcih2b2lkKQoreworICAgIGludDhfdCByc3NpOworICAgIGJvb2wgZGlkRXhjZWVkVGhyZXNob2xkID0gdHJ1ZTsKKworICAgIFZlcmlmeU9yRXhpdChtRW5hYmxlZCk7CisKKyAgICByc3NpID0gb3RQbGF0UmFkaW9HZXRSc3NpKEdldE5ldGlmKCkuR2V0SW5zdGFuY2UoKSk7CisKKyAgICAvLyBJZiB0aGUgUlNTSSBpcyB2YWxpZCwgY2hlY2sgaWYgaXQgZXhjZWVkcyB0aGUgdGhyZXNob2xkCisgICAgLy8gYW5kIHRyeSB0byB1cGRhdGUgdGhlIGhpc3RvcnkgYml0IG1hcAorICAgIGlmIChyc3NpICE9IE9UX1JBRElPX1JTU0lfSU5WQUxJRCkKKyAgICB7CisgICAgICAgIGRpZEV4Y2VlZFRocmVzaG9sZCA9IChyc3NpID49IG1Sc3NpVGhyZXNob2xkKTsKKyAgICAgICAgVXBkYXRlSGlzdG9yeShkaWRFeGNlZWRUaHJlc2hvbGQpOworICAgIH0KKworICAgIC8vIElmIHRoZSBSU1NJIHNhbXBsZSBkb2VzIG5vdCBleGNlZWQgdGhlIHRocmVzaG9sZCwgZ28gYmFjayB0byBtYXggc2FtcGxlIGludGVydmFsCisgICAgLy8gT3RoZXJ3aXNlLCBkaXZpZGUgdGhlIHNhbXBsZSBpbnRlcnZhbCBieSBoYWxmIHdoaWxlIGVuc3VyaW5nIGl0IGRvZXMgbm90IGdvIGxvd2VyCisgICAgLy8gdGhhbiBtaW5pbXVtIHNhbXBsZSBpbnRlcnZhbC4KKworICAgIGlmICghZGlkRXhjZWVkVGhyZXNob2xkKQorICAgIHsKKyAgICAgICAgbVNhbXBsZUludGVydmFsID0ga01heFNhbXBsZUludGVydmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtU2FtcGxlSW50ZXJ2YWwgLz0gMjsKKworICAgICAgICBpZiAobVNhbXBsZUludGVydmFsIDwga01pblNhbXBsZUludGVydmFsKQorICAgICAgICB7CisgICAgICAgICAgICBtU2FtcGxlSW50ZXJ2YWwgPSBrTWluU2FtcGxlSW50ZXJ2YWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVGltZXIuU3RhcnQobVNhbXBsZUludGVydmFsICsgKG90UGxhdFJhbmRvbUdldCgpICUga01heFJhbmRvbURlbGF5KSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIEphbURldGVjdG9yOjpVcGRhdGVIaXN0b3J5KGJvb2wgYURpZEV4Y2VlZFRocmVzaG9sZCkKK3sKKyAgICB1aW50MzJfdCBub3cgPSBUaW1lcjo6R2V0Tm93KCk7CisKKyAgICAvLyBJZiB0aGUgUlNTSSBpcyBldmVyIGJlbG93IHRoZSB0aHJlc2hvbGQsIHVwZGF0ZSBtQWx3YXlzQWJvdmVUaHJlc2hvbGQKKyAgICAvLyBmb3IgY3VycmVudCBzZWNvbmQgaW50ZXJ2YWwuCisgICAgaWYgKCFhRGlkRXhjZWVkVGhyZXNob2xkKQorICAgIHsKKyAgICAgICAgbUFsd2F5c0Fib3ZlVGhyZXNob2xkID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgcmVhY2hlZCBlbmQgb2YgY3VycmVudCBvbmUgc2Vjb25kIGludGVydmFsLCB1cGRhdGUgdGhlIGhpc3RvcnkgYml0bWFwCisgICAgaWYgKG5vdyAtIG1DdXJTZWNvbmRTdGFydFRpbWUgPj0ga09uZVNlY29uZEludGVydmFsKQorICAgIHsKKyAgICAgICAgbUhpc3RvcnlCaXRtYXAgPDw9IDE7CisKKyAgICAgICAgaWYgKG1BbHdheXNBYm92ZVRocmVzaG9sZCkKKyAgICAgICAgeworICAgICAgICAgICAgbUhpc3RvcnlCaXRtYXAgfD0gMHgxOworICAgICAgICB9CisKKyAgICAgICAgbUFsd2F5c0Fib3ZlVGhyZXNob2xkID0gdHJ1ZTsKKworICAgICAgICB3aGlsZSAobm93IC0gbUN1clNlY29uZFN0YXJ0VGltZSA+PSBrT25lU2Vjb25kSW50ZXJ2YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1DdXJTZWNvbmRTdGFydFRpbWUgKz0ga09uZVNlY29uZEludGVydmFsOworICAgICAgICB9CisKKyAgICAgICAgVXBkYXRlSmFtU3RhdGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgSmFtRGV0ZWN0b3I6OlVwZGF0ZUphbVN0YXRlKHZvaWQpCit7CisgICAgdWludDhfdCBudW1KYW1tZWRTZWNvbmRzID0gMDsKKyAgICB1aW50NjRfdCBiaXRtYXAgPSBtSGlzdG9yeUJpdG1hcDsKKyAgICBib29sIG9sZEphbVN0YXRlID0gbUphbVN0YXRlOworCisgICAgLy8gQ2xlYXIgYWxsIGhpc3RvcnkgYml0cyBiZXlvbmQgdGhlIGN1cnJlbnQgd2luZG93IHNpemUKKyAgICBiaXRtYXAgJj0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCBtV2luZG93KSAtIDE7CisKKyAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcAorICAgIHdoaWxlIChiaXRtYXAgIT0gMCkKKyAgICB7CisgICAgICAgIG51bUphbW1lZFNlY29uZHMrKzsKKyAgICAgICAgYml0bWFwICY9IChiaXRtYXAgLSAxKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgdGhlIEphbSBzdGF0ZQorICAgIG1KYW1TdGF0ZSA9IChudW1KYW1tZWRTZWNvbmRzID49IG1CdXN5UGVyaW9kKTsKKworICAgIC8vIElmIHRoZXJlIGlzIGEgY2hhbmdlLCBpbnZva2UgdGhlIGhhbmRsZXIuCisgICAgaWYgKChtSmFtU3RhdGUgIT0gb2xkSmFtU3RhdGUpIHx8IChtSmFtU3RhdGUgPT0gdHJ1ZSkpCisgICAgeworICAgICAgICBtSGFuZGxlcihtSmFtU3RhdGUsIG1Db250ZXh0KTsKKyAgICB9Cit9CisKK0phbURldGVjdG9yICZKYW1EZXRlY3Rvcjo6R2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTVVMVElQTEVfSU5TVEFOQ0VTCisgICAgSmFtRGV0ZWN0b3IgJmRldGVjdG9yID0gKnN0YXRpY19jYXN0PEphbURldGVjdG9yICo+KGFDb250ZXh0LkdldENvbnRleHQoKSk7CisjZWxzZQorICAgIEphbURldGVjdG9yICZkZXRlY3RvciA9IG90R2V0VGhyZWFkTmV0aWYoKS5HZXRKYW1EZXRlY3RvcigpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gZGV0ZWN0b3I7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBVdGlscworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy9qYW1fZGV0ZWN0b3IuaHBwIGIvc3JjL2NvcmUvdXRpbHMvamFtX2RldGVjdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTMxNGUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvamFtX2RldGVjdG9yLmhwcApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGphbSBkZXRlY3Rvci4KKyAqLworCisjaWZuZGVmIEpBTV9ERVRFQ1RPUl9IUFBfCisjZGVmaW5lIEpBTV9ERVRFQ1RPUl9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xvY2F0b3IuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgVGhyZWFkTmV0aWY7CisKK25hbWVzcGFjZSBVdGlscyB7CisKK2NsYXNzIEphbURldGVjdG9yOiBwdWJsaWMgVGhyZWFkTmV0aWZMb2NhdG9yCit7CitwdWJsaWM6CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIGlmIGphbSBzdGF0ZSBjaGFuZ2VzIChhc3N1bWluZyBqYW1taW5nIGRldGVjdGlvbiBpcyBlbmFibGVkKS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFKYW1TdGF0ZSAgYHRydWVgIGlmIGphbSBpcyBkZXRlY3RlZCwgYGZhbHNlYCBpZiBqYW0gaXMgY2xlYXJlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgQSBwb2ludGVyIHRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbnRleHQuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIHZvaWQgKCpIYW5kbGVyKShib29sIGFKYW1TdGF0ZSwgdm9pZCAqYUNvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyB0aGUgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVRocmVhZE5ldGlmICBBIHJlZmVyZW5jZSB0byB0aGUgVGhyZWFkIG5ldHdvcmsgaW50ZXJmYWNlLgorICAgICAqCisgICAgICovCisgICAgZXhwbGljaXQgSmFtRGV0ZWN0b3IoVGhyZWFkTmV0aWYgJmFUaHJlYWROZXRpZik7CisKKyAgICAvKioKKyAgICAgKiBTdGFydCB0aGUgamFtbWluZyBkZXRlY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSGFuZGxlciAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBqYW1taW5nIGlzIGRldGVjdGVkLgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0LgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIGphbW1pbmcgZGV0ZWN0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgICAgIEphbSBkZXRlY3Rpb24gaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFN0YXJ0KEhhbmRsZXIgYUhhbmRsZXIsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFN0b3AgdGhlIGphbW1pbmcgZGV0ZWN0aW9uLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgdGhlIGphbW1pbmcgZGV0ZWN0aW9uLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfQUxSRUFEWSAgICAgICAgIEphbSBkZXRlY3Rpb24gaXMgYWxyZWFkeSBzdG9wcGVkLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBTdG9wKHZvaWQpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBKYW0gRGV0ZWN0aW9uIFN0YXR1cworICAgICAqCisgICAgICogQHJldHVybnMgVGhlIEphbSBEZXRlY3Rpb24gc3RhdHVzICh0cnVlIGlmIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZSkuCisgICAgICovCisgICAgYm9vbCBJc0VuYWJsZWQodm9pZCkgY29uc3QgeyByZXR1cm4gbUVuYWJsZWQ7IH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VycmVudCBqYW0gc3RhdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgamFtbWluZyBzdGF0ZSAoYHRydWVgIGlmIGphbSBpcyBkZXRlY3RlZCwgYGZhbHNlYCBvdGhlcndpc2UpLgorICAgICAqLworICAgIGJvb2wgR2V0U3RhdGUodm9pZCkgY29uc3QgeyByZXR1cm4gbUphbVN0YXRlOyB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIEphbSBEZXRlY3Rpb24gUlNTSSBUaHJlc2hvbGQgKGluIGRCbSkuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhUnNzaVRocmVzaG9sZCAgVGhlIFJTU0kgdGhyZXNob2xkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHRocmVzaG9sZC4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0UnNzaVRocmVzaG9sZChpbnQ4X3QgYVRocmVzaG9sZCk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIEphbSBEZXRlY3Rpb24gUlNTSSBUaHJlc2hvbGQgKGluIGRCbSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBSU1NJIFRocmVzaG9sZC4KKyAgICAgKi8KKyAgICBpbnQ4X3QgR2V0UnNzaVRocmVzaG9sZCh2b2lkKSBjb25zdCB7IHJldHVybiBtUnNzaVRocmVzaG9sZDsgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBKYW0gRGV0ZWN0aW9uIERldGVjdGlvbiBXaW5kb3cgKGluIHNlY29uZHMpLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYVdpbmRvdyAgICAgICAgICAgIFRoZSBKYW0gRGV0ZWN0aW9uIHdpbmRvdyAodmFsaWQgcmFuZ2UgaXMgMSB0byA2MykKKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICBTdWNjZXNzZnVsbHkgc2V0IHRoZSB3aW5kb3cuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9JTlZBTElEX0FSR1MgIFRoZSBnaXZlbiBpbnB1dCBwYXJhbWV0ZXIgbm90IHdpdGhpbiB2YWxpZCByYW5nZSAoMS02MykKKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgU2V0V2luZG93KHVpbnQ4X3QgYVdpbmRvdyk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIEphbSBEZXRlY3Rpb24gRGV0ZWN0aW9uIFdpbmRvdyAoaW4gc2Vjb25kcykuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBXaW5kb3cuCisgICAgICovCisgICAgdWludDhfdCBHZXRXaW5kb3codm9pZCkgY29uc3QgeyByZXR1cm4gbVdpbmRvdzsgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBKYW0gRGV0ZWN0aW9uIEJ1c3kgUGVyaW9kIChpbiBzZWNvbmRzKS4KKyAgICAgKgorICAgICAqIFRoZSBudW1iZXIgb2YgYWdncmVnYXRlIHNlY29uZHMgd2l0aGluIHRoZSBkZXRlY3Rpb24gd2luZG93IHdoZXJlIHRoZSBSU1NJIG11c3QgYmUgYWJvdmUKKyAgICAgKiB0aHJlc2hvbGQgdG8gdHJpZ2dlciBkZXRlY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQnVzeVBlcmlvZCAgICAgICAgICBUaGUgSmFtIERldGVjdGlvbiBidXN5IHBlcmlvZCAoc2hvdWxkIGJlIG5vbi16ZXJvIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiBvciBlcXVhbCB0byBKYW0gRGV0ZWN0aW9uIFdpbmRvdykKKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHdpbmRvdy4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX0lOVkFMSURfQVJHUyAgICBUaGUgZ2l2ZW4gaW5wdXQgaXMgbm90IHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIFNldEJ1c3lQZXJpb2QodWludDhfdCBhQnVzeVBlcmlvZCk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIEphbSBEZXRlY3Rpb24gQnVzeSBQZXJpb2QgKGluIHNlY29uZHMpCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgSmFtIERldGVjdGlvbiBCdXN5IFBlcmlvZAorICAgICAqLworICAgIHVpbnQ4X3QgR2V0QnVzeVBlcmlvZCh2b2lkKSBjb25zdCB7IHJldHVybiBtQnVzeVBlcmlvZDsgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXJyZW50IGhpc3RvcnkgYml0bWFwLgorICAgICAqCisgICAgICogVGhpcyB2YWx1ZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHN0YXRlIG9mIGphbW1pbmcgZGV0ZWN0aW9uCisgICAgICogbW9kdWxlIGZvciBtb25pdG9yaW5nL2RlYnVnZ2luZyBwdXJwb3NlLiBJdCBwcm92aWRlcyBhIDY0LWJpdCB2YWx1ZSB3aGVyZQorICAgICAqIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIG9uZSBzZWNvbmQgaW50ZXJ2YWwgc3RhcnRpbmcgd2l0aCBiaXQgMCBmb3IgdGhlCisgICAgICogbW9zdCByZWNlbnQgaW50ZXJ2YWwgYW5kIGJpdCA2MyBmb3IgdGhlIG9sZGVzdCBpbnRlcnZhbHMgKDYzIGVhcmxpZXIpLgorICAgICAqIFRoZSBiaXQgaXMgc2V0IHRvIDEgaWYgdGhlIGphbW1pbmcgZGV0ZWN0aW9uIG1vZHVsZSBvYnNlcnZlZC9kZXRlY3RlZAorICAgICAqIGhpZ2ggc2lnbmFsIGxldmVsIGR1cmluZyB0aGUgY29ycmVzcG9uZGluZyBvbmUgc2Vjb25kIGludGVydmFsLgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgaGlzdG9yeSBiaXRtYXAuCisgICAgICovCisgICAgdWludDY0X3QgR2V0SGlzdG9yeUJpdG1hcCh2b2lkKSBjb25zdCB7IHJldHVybiBtSGlzdG9yeUJpdG1hcDsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIEhhbmRsZVRpbWVyKFRpbWVyICZhVGltZXIpOworICAgIHZvaWQgSGFuZGxlVGltZXIodm9pZCk7CisgICAgdm9pZCBVcGRhdGVIaXN0b3J5KGJvb2wgYVRocmVzaG9sZEV4Y2VlZGVkKTsKKyAgICB2b2lkIFVwZGF0ZUphbVN0YXRlKHZvaWQpOworICAgIHN0YXRpYyBKYW1EZXRlY3RvciAmR2V0T3duZXIoY29uc3QgQ29udGV4dCAmYUNvbnRleHQpOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtNYXhXaW5kb3cgICAgICAgICAgICAgID0gNjMsICAgLy8gTWF4IHdpbmRvdyBzaXplCisgICAgICAgIGtEZWZhdWx0UnNzaVRocmVzaG9sZCAgID0gMCwKKworICAgICAgICBrTWF4U2FtcGxlSW50ZXJ2YWwgICAgICA9IDI1NiwgIC8vIGluIG1zCisgICAgICAgIGtNaW5TYW1wbGVJbnRlcnZhbCAgICAgID0gMiwgICAgLy8gaW4gbXMKKyAgICAgICAga01heFJhbmRvbURlbGF5ICAgICAgICAgPSA0LCAgICAvLyBpbiBtcworICAgICAgICBrT25lU2Vjb25kSW50ZXJ2YWwgICAgICA9IDEwMDAgIC8vIGluIG1zCisKKyAgICB9OworCisgICAgSGFuZGxlciAgICAgIG1IYW5kbGVyOyAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZXIvY2FsbGJhY2sgdG8gaW5mb3JtIGFib3V0IGphbW1pbmcgc3RhdGUKKyAgICB2b2lkICAgICAgICAqbUNvbnRleHQ7ICAgICAgICAgICAgICAgICAgLy8gQ29udGV4dCBmb3IgaGFuZGxlci9jYWxsYmFjaworICAgIGludDhfdCAgICAgICBtUnNzaVRocmVzaG9sZDsgICAgICAgICAgICAvLyBSU1NJIHRocmVzaG9sZCBmb3IgamFtIGRldGVjdGlvbgorICAgIFRpbWVyICAgICAgICBtVGltZXI7ICAgICAgICAgICAgICAgICAgICAvLyBSU1NJIHNhbXBsZSB0aW1lcgorICAgIHVpbnQ2NF90ICAgICBtSGlzdG9yeUJpdG1hcDsgICAgICAgICAgICAvLyBIaXN0b3J5IGJpdG1hcCwgZWFjaCBiaXQgY29ycmVzcG9uZCB0byAxIHNlYyBpbnRlcnZhbAorICAgIHVpbnQzMl90ICAgICBtQ3VyU2Vjb25kU3RhcnRUaW1lOyAgICAgICAvLyBTdGFydCB0aW1lIGZvciBjdXJyZW50IDEgc2VjIGludGVydmFsCisgICAgdWludDE2X3QgICAgIG1TYW1wbGVJbnRlcnZhbDsgICAgICAgICAgIC8vIEN1cnJlbnQgc2FtcGxlIGludGVydmFsCisgICAgdWludDhfdCAgICAgIG1XaW5kb3cgOiA2OyAgICAgICAgICAgICAgIC8vIFdpbmRvdyAoaW4gc2VjKSB0byBtb25pdG9yIGphbW1pbmcKKyAgICB1aW50OF90ICAgICAgbUJ1c3lQZXJpb2QgOiA2OyAgICAgICAgICAgLy8gQnVzeVBlcmlvZCAoaW4gc2VjKSB3aXRoIG1XaW5kb3cgdG8gYWxlcnQgamFtbWluZworICAgIGJvb2wgICAgICAgICBtRW5hYmxlZCA6IDE7ICAgICAgICAgICAgICAvLyBJZiBqYW0gZGV0ZWN0aW9uIGlzIGVuYWJsZWQKKyAgICBib29sICAgICAgICAgbUFsd2F5c0Fib3ZlVGhyZXNob2xkIDogMTsgLy8gU3RhdGUgZm9yIGN1cnJlbnQgMSBzZWMgaW50ZXJ2YWwKKyAgICBib29sICAgICAgICAgbUphbVN0YXRlIDogMTsgICAgICAgICAgICAgLy8gQ3VycmVudCBqYW0gc3RhdGUKK307CisKKy8qKgorICogQH0KKyAqCisgKi8KKworfSAgLy8gbmFtZXNwYWNlIFV0aWxzCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBKQU1fREVURUNUT1JfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvbWlzc2luZ19zdHJsY2F0LmMgYi9zcmMvY29yZS91dGlscy9taXNzaW5nX3N0cmxjYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzUyNjdhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvbWlzc2luZ19zdHJsY2F0LmMKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCitzaXplX3QgbWlzc2luZ19zdHJsY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihkZXN0KTsKKworICAgIGlmIChsZW4gPCBzaXplIC0gMSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuICsgc3RybGNweShkZXN0ICsgbGVuLCBzcmMsIHNpemUgLSBsZW4pKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuICsgc3RybGVuKHNyYyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy9taXNzaW5nX3N0cmxjcHkuYyBiL3NyYy9jb3JlL3V0aWxzL21pc3Npbmdfc3RybGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMmI0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy9taXNzaW5nX3N0cmxjcHkuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKK3NpemVfdCBtaXNzaW5nX3N0cmxjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBjb25zdCBzaXplX3Qgc2xlbiA9IHN0cmxlbihzcmMpOworCisgICAgaWYgKHNpemUgIT0gMCkKKyAgICB7CisgICAgICAgIHNpemUtLTsKKworICAgICAgICBpZiAoc2xlbiA8IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemUgPSBzbGVuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZXN0W3NpemVdID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc2xlbjsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3V0aWxzL21pc3Npbmdfc3Rybmxlbi5jIGIvc3JjL2NvcmUvdXRpbHMvbWlzc2luZ19zdHJubGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExY2UxYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL3V0aWxzL21pc3Npbmdfc3Rybmxlbi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworc2l6ZV90IG1pc3Npbmdfc3Rybmxlbihjb25zdCBjaGFyICpzLCBzaXplX3QgbWF4bGVuKQoreworICAgIHNpemVfdCByZXQ7CisKKyAgICBmb3IgKHJldCA9IDA7IChyZXQgPCBtYXhsZW4pICYmIChzW3JldF0gIT0gMCk7IHJldCsrKQorICAgIHsKKyAgICAgICAgLy8gRW1wdHkgbG9vcC4KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvdXRpbHMvc2xhYWNfYWRkcmVzcy5jcHAgYi9zcmMvY29yZS91dGlscy9zbGFhY19hZGRyZXNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjZlMzEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvc2xhYWNfYWRkcmVzcy5jcHAKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIFRocmVhZCBJUHY2IGdsb2JhbCBhZGRyZXNzZXMgY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJzbGFhY19hZGRyZXNzLmhwcCIKKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNyeXB0by9zaGEyNTYuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWMuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDZfYWRkcmVzcy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgVXRpbHMgeworCit2b2lkIFNsYWFjOjpVcGRhdGVBZGRyZXNzZXMob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3NlcywgdWludDMyX3QgYU51bUFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJaWRDcmVhdG9yIGFJaWRDcmVhdG9yLCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBvdE5ldHdvcmtEYXRhSXRlcmF0b3IgaXRlcmF0b3I7CisgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgY29uZmlnOworCisgICAgLy8gcmVtb3ZlIGFkZHJlc3NlcworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYU51bUFkZHJlc3NlczsgaSsrKQorICAgIHsKKyAgICAgICAgb3ROZXRpZkFkZHJlc3MgKmFkZHJlc3MgPSAmYUFkZHJlc3Nlc1tpXTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGlmICghYWRkcmVzcy0+bVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICAgICAgd2hpbGUgKG90TmV0RGF0YUdldE5leHRPbk1lc2hQcmVmaXgoYUluc3RhbmNlLCAmaXRlcmF0b3IsICZjb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb25maWcubVNsYWFjID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAob3RJcDZQcmVmaXhNYXRjaCgmY29uZmlnLm1QcmVmaXgubVByZWZpeCwgJmFkZHJlc3MtPm1BZGRyZXNzKSA+PSBjb25maWcubVByZWZpeC5tTGVuZ3RoICYmCisgICAgICAgICAgICAgICAgY29uZmlnLm1QcmVmaXgubUxlbmd0aCA9PSBhZGRyZXNzLT5tUHJlZml4TGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90SXA2UmVtb3ZlVW5pY2FzdEFkZHJlc3MoYUluc3RhbmNlLCAmYWRkcmVzcy0+bUFkZHJlc3MpOworICAgICAgICAgICAgYWRkcmVzcy0+bVZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBhZGQgYWRkcmVzc2VzCisgICAgaXRlcmF0b3IgPSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVDsKKworICAgIHdoaWxlIChvdE5ldERhdGFHZXROZXh0T25NZXNoUHJlZml4KGFJbnN0YW5jZSwgJml0ZXJhdG9yLCAmY29uZmlnKSA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIGlmIChjb25maWcubVNsYWFjID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYU51bUFkZHJlc3NlczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBvdE5ldGlmQWRkcmVzcyAqYWRkcmVzcyA9ICZhQWRkcmVzc2VzW2ldOworCisgICAgICAgICAgICBpZiAoIWFkZHJlc3MtPm1WYWxpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG90SXA2UHJlZml4TWF0Y2goJmNvbmZpZy5tUHJlZml4Lm1QcmVmaXgsICZhZGRyZXNzLT5tQWRkcmVzcykgPj0gY29uZmlnLm1QcmVmaXgubUxlbmd0aCAmJgorICAgICAgICAgICAgICAgIGNvbmZpZy5tUHJlZml4Lm1MZW5ndGggPT0gYWRkcmVzcy0+bVByZWZpeExlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFOdW1BZGRyZXNzZXM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdE5ldGlmQWRkcmVzcyAqYWRkcmVzcyA9ICZhQWRkcmVzc2VzW2ldOworCisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm1WYWxpZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplb2YoKmFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoJmFkZHJlc3MtPm1BZGRyZXNzLCAmY29uZmlnLm1QcmVmaXgubVByZWZpeCwgOCk7CisKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tUHJlZml4TGVuZ3RoID0gY29uZmlnLm1QcmVmaXgubUxlbmd0aDsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLT5tUHJlZmVycmVkID0gY29uZmlnLm1QcmVmZXJyZWQ7CisgICAgICAgICAgICAgICAgYWRkcmVzcy0+bVZhbGlkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmIChhSWlkQ3JlYXRvcihhSW5zdGFuY2UsIGFkZHJlc3MsIGFDb250ZXh0KSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlUmFuZG9tSWlkKGFJbnN0YW5jZSwgYWRkcmVzcywgYUNvbnRleHQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG90SXA2QWRkVW5pY2FzdEFkZHJlc3MoYUluc3RhbmNlLCBhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworb3RFcnJvciBTbGFhYzo6Q3JlYXRlUmFuZG9tSWlkKG90SW5zdGFuY2UgKiwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICopCit7CisgICAgZm9yIChzaXplX3QgaSA9IHNpemVvZihhQWRkcmVzc1tpXS5tQWRkcmVzcykgLSBPVF9JUDZfSUlEX1NJWkU7IGkgPCBzaXplb2YoYUFkZHJlc3NbaV0ubUFkZHJlc3MpOyBpKyspCisgICAgeworICAgICAgICBhQWRkcmVzcy0+bUFkZHJlc3MubUZpZWxkcy5tOFtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG90UGxhdFJhbmRvbUdldCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3I6OkNyZWF0ZUlpZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcykKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPD0ga01heFJldHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIGVycm9yID0gQ3JlYXRlSWlkT25jZShhSW5zdGFuY2UsIGFBZGRyZXNzKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUpOworCisgICAgICAgIG1EYWRDb3VudGVyKys7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3I6OkNyZWF0ZUlpZE9uY2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgQ3J5cHRvOjpTaGEyNTYgc2hhMjU2OworICAgIHVpbnQ4X3QgaGFzaFtDcnlwdG86OlNoYTI1Njo6a0hhc2hTaXplXTsKKyAgICBJcDY6OkFkZHJlc3MgKmFkZHJlc3MgPSBzdGF0aWNfY2FzdDxJcDY6OkFkZHJlc3MgKj4oJmFBZGRyZXNzLT5tQWRkcmVzcyk7CisKKyAgICBzaGEyNTYuU3RhcnQoKTsKKworICAgIHNoYTI1Ni5VcGRhdGUoYUFkZHJlc3MtPm1BZGRyZXNzLm1GaWVsZHMubTgsIGFBZGRyZXNzLT5tUHJlZml4TGVuZ3RoIC8gOCk7CisKKyAgICBWZXJpZnlPckV4aXQobUludGVyZmFjZUlkICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBzaGEyNTYuVXBkYXRlKG1JbnRlcmZhY2VJZCwgbUludGVyZmFjZUlkTGVuZ3RoKTsKKworICAgIGlmIChtTmV0d29ya0lkTGVuZ3RoKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1OZXR3b3JrSWQgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzaGEyNTYuVXBkYXRlKG1OZXR3b3JrSWQsIG1OZXR3b3JrSWRMZW5ndGgpOworICAgIH0KKworICAgIHNoYTI1Ni5VcGRhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCAqPigmbURhZENvdW50ZXIpLCBzaXplb2YobURhZENvdW50ZXIpKTsKKworICAgIFZlcmlmeU9yRXhpdChtU2VjcmV0S2V5ICE9IE5VTEwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBzaGEyNTYuVXBkYXRlKG1TZWNyZXRLZXksIG1TZWNyZXRLZXlMZW5ndGgpOworCisgICAgc2hhMjU2LkZpbmlzaChoYXNoKTsKKworICAgIG1lbWNweSgmYUFkZHJlc3MtPm1BZGRyZXNzLm1GaWVsZHMubThbT1RfSVA2X0FERFJFU1NfU0laRSAtIE9UX0lQNl9JSURfU0laRV0sCisgICAgICAgICAgICZoYXNoW3NpemVvZihoYXNoKSAtIE9UX0lQNl9JSURfU0laRV0sIE9UX0lQNl9JSURfU0laRSk7CisKKyAgICBWZXJpZnlPckV4aXQoIUlzQWRkcmVzc1JlZ2lzdGVyZWQoYUluc3RhbmNlLCBhQWRkcmVzcyksIGVycm9yID0gT1RfRVJST1JfSVA2X0FERFJFU1NfQ1JFQVRJT05fRkFJTFVSRSk7CisgICAgVmVyaWZ5T3JFeGl0KCFhZGRyZXNzLT5Jc0lpZFJlc2VydmVkKCksIGVycm9yID0gT1RfRVJST1JfSVA2X0FERFJFU1NfQ1JFQVRJT05fRkFJTFVSRSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIFNlbWFudGljYWxseU9wYXF1ZUlpZEdlbmVyYXRvcjo6SXNBZGRyZXNzUmVnaXN0ZXJlZChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQ3JlYXRlZEFkZHJlc3MpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBjb25zdCBvdE5ldGlmQWRkcmVzcyAqYWRkcmVzcyA9IG90SXA2R2V0VW5pY2FzdEFkZHJlc3NlcyhhSW5zdGFuY2UpOworCisgICAgd2hpbGUgKGFkZHJlc3MgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmICgwID09IG1lbWNtcChhQ3JlYXRlZEFkZHJlc3MtPm1BZGRyZXNzLm1GaWVsZHMubTgsIGFkZHJlc3MtPm1BZGRyZXNzLm1GaWVsZHMubTgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkcmVzcy0+bUFkZHJlc3MubUZpZWxkcykpKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KHJlc3VsdCA9IHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3MtPm1OZXh0OworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK30gIC8vIG5hbWVzcGFjZSBTbGFhYworfSAgLy8gbmFtZXNwYWNlIG90CmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy9zbGFhY19hZGRyZXNzLmhwcCBiL3NyYy9jb3JlL3V0aWxzL3NsYWFjX2FkZHJlc3MuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODE2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy9zbGFhY19hZGRyZXNzLmhwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRocmVhZCBnbG9iYWwgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gd2l0aCBTTEFBQy4KKyAqLworCisjaWZuZGVmIFNMQUFDX0FERFJFU1NfSFBQXworI2RlZmluZSBTTEFBQ19BRERSRVNTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL3JhbmRvbS5oPgorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIFV0aWxzIHsKKworLyoqCisgKiBAYWRkdG9ncm91cCBjb3JlLXNsYWFjLWFkZHJlc3MKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBtb2R1bGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIFRocmVhZCBnbG9iYWwgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gd2l0aCBTTEFBQy4KKyAqCisgKiBAeworICovCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBTTEFBQyB1dGlsaXR5IGZvciBUaHJlYWQgcHJvdG9jb2wuCisgKgorICovCitjbGFzcyBTbGFhYworeworcHVibGljOgorICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBjYWxsZWQgd2hlbiBTTEFBQyBjcmVhdGVzIGdsb2JhbCBhZGRyZXNzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgICAgYUluc3RhbmNlICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAgICAgKiBAcGFyYW1baW5vdXRdICBhQWRkcmVzcyAgIEEgcG9pbnRlciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBJUHY2IGFkZHJlc3MgZm9yIHdoaWNoIElJRCBpcyBiZWluZyBjcmVhdGVkLgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFDb250ZXh0ICAgQSBwb2ludGVyIHRvIGNyZWF0b3Itc3BlY2lmaWMgY29udGV4dC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgaWYgZ2VuZXJhdGVkIHZhbGlkIElJRC4KKyAgICAgKiBAcmV0dmFsICBPVF9FUlJPUl9GQUlMRUQgIGlmIGNyZWF0aW5nIElJRCBmYWlsZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIG90RXJyb3IoKklpZENyZWF0b3IpKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzLCB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZSBhZGRyZXNzZXMgdGhhdCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdXNpbmcgU0xBQUMuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICAgICBhSW5zdGFuY2UgICAgIEEgcG9pbnRlciB0byBvcGVuVGhyZWFkIGluc3RhbmNlLgorICAgICAqIEBwYXJhbVtpbm91dF0gIGFBZGRyZXNzZXMgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgYWRkcmVzc2VzIGNyZWF0ZWQgYnkgdGhpcyBtb2R1bGUuCisgICAgICogQHBhcmFtW2luXSAgICAgYU51bUFkZHJlc3NlcyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFBZGRyZXNzZXMgYXJyYXkuCisgICAgICogQHBhcmFtW2luXSAgICAgYUlpZENyZWF0b3IgICBBIHBvaW50ZXIgdG8gZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIElJRCBmb3IgSVB2NiBhZGRyZXNzZXMuCisgICAgICogQHBhcmFtW2luXSAgICAgYUNvbnRleHQgICAgICBBIHBvaW50ZXIgdG8gSUlEIGNyZWF0b3Itc3BlY2lmaWMgY29udGV4dCBkYXRhLgorICAgICAqCisgICAgICovCisgICAgc3RhdGljIHZvaWQgVXBkYXRlQWRkcmVzc2VzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzZXMsIHVpbnQzMl90IGFOdW1BZGRyZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElpZENyZWF0b3IgYUlpZENyZWF0b3IsIHZvaWQgKmFDb250ZXh0KTsKKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyByYW5kb21seSBnZW5lcmF0ZWQgSVB2NiBJSUQgZm9yIGdpdmVuIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3MgICBBIHBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzIGZvciB3aGljaCBJSUQgaXMgYmVpbmcgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW1baW5dICAgICBhQ29udGV4dCAgIFVudXNlZCBwb2ludGVyLgorICAgICAqCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfTk9ORSAgR2VuZXJhdGVkIHZhbGlkIElJRC4KKyAgICAgKi8KKyAgICBzdGF0aWMgb3RFcnJvciBDcmVhdGVSYW5kb21JaWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUFkZHJlc3MsIHZvaWQgKmFDb250ZXh0KTsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBNZXRob2QgZm9yIEdlbmVyYXRpbmcgU2VtYW50aWNhbGx5IE9wYXF1ZSBJSURzIHdpdGggSVB2NiBTTEFBQyAoUkZDIDcyMTcpLgorICoKKyAqLworY2xhc3MgU2VtYW50aWNhbGx5T3BhcXVlSWlkR2VuZXJhdG9yOiBwdWJsaWMgb3RTZW1hbnRpY2FsbHlPcGFxdWVJaWRHZW5lcmF0b3JEYXRhCit7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBzZW1hbnRpY2FsbHkgb3BhcXVlIElJRCBmb3IgZ2l2ZW4gSVB2NiBhZGRyZXNzIGFuZCBjb250ZXh0LgorICAgICAqCisgICAgICogVGhlIGdlbmVyYXRvciBzdGFydHMgd2l0aCBEQUQgY291bnRlciBwcm92aWRlZCBhcyBhIGNsYXNzIG1lbWJlciBmaWVsZC4gVGhlIERBRCBjb3VudGVyIGlzIGF1dG9tYXRpY2FsbHkKKyAgICAgKiBpbmNyZW1lbnRlZCBhdCBtb3N0IGtNYXhSZXRyaWVzIHRpbWVzIGlmIGNyZWF0aW9uIG9mIHZhbGlkIElQdjYgYWRkcmVzcyBmYWlscy4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3MgICBBIHBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzIGZvciB3aGljaCBJSUQgaXMgYmVpbmcgY3JlYXRlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCB2YWxpZCBJSUQuCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgICAgICAgICAgICAgICAgQW55IGdpdmVuIHBhcmFtZXRlciBpcyBpbnZhbGlkLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgIENvdWxkIG5vdCBnZW5lcmF0ZSBJSUQgZHVlIHRvIFJGQyA3MjE3IHJlc3RyaWN0aW9ucy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQ3JlYXRlSWlkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3ROZXRpZkFkZHJlc3MgKmFBZGRyZXNzKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICBrTWF4UmV0cmllcyA9IDI1NSwKKyAgICB9OworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBzZW1hbnRpY2FsbHkgb3BhcXVlIElJRCBmb3IgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIElJRCBvbmx5IGZvciBnaXZlbiBEQUQgY291bnRlciB2YWx1ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgIGFJbnN0YW5jZSAgQSBwb2ludGVyIHRvIGFuIE9wZW5UaHJlYWQgaW5zdGFuY2UuCisgICAgICogQHBhcmFtW2lub3V0XSAgYUFkZHJlc3MgICBBIHBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzIGZvciB3aGljaCBJSUQgaXMgYmVpbmcgY3JlYXRlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCB2YWxpZCBJSUQuCisgICAgICogQHJldHZhbCAgT1RfRVJST1JfSU5WQUxJRF9BUkdTICAgICAgICAgICAgICAgICAgQW55IGdpdmVuIHBhcmFtZXRlciBpcyBpbnZhbGlkLgorICAgICAqIEByZXR2YWwgIE9UX0VSUk9SX0lQNl9BRERSRVNTX0NSRUFUSU9OX0ZBSUxVUkUgIENvdWxkIG5vdCBnZW5lcmF0ZSBJSUQgZHVlIHRvIFJGQyA3MjE3IHJlc3RyaWN0aW9ucy4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgQ3JlYXRlSWlkT25jZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90TmV0aWZBZGRyZXNzICphQWRkcmVzcyk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgY3JlYXRlZCBJUHY2IGFkZHJlc3MgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSBUaHJlYWQgaW50ZXJmYWNlLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUluc3RhbmNlICAgICAgICBBIHBvaW50ZXIgdG8gYW4gT3BlblRocmVhZCBpbnN0YW5jZS4KKyAgICAgKiBAcGFyYW1baW5dICBhQ3JlYXRlZEFkZHJlc3MgIEEgcG9pbnRlciB0byBjcmVhdGVkIElQdjYgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgIHRydWUgICBHaXZlbiBhZGRyZXNzIGlzIHByZXNlbnQgaW4gdGhlIGFkZHJlc3MgbGlzdC4KKyAgICAgKiBAcmV0dmFsICBmYWxzZSAgR2l2ZW4gYWRkcmVzcyBpcyBtaXNzaW5nIGluIHRoZSBhZGRyZXNzIGxpc3QuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzQWRkcmVzc1JlZ2lzdGVyZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdE5ldGlmQWRkcmVzcyAqYUNyZWF0ZWRBZGRyZXNzKTsKK307CisKKy8qKgorICogQH0KKyAqLworCit9ICAvLyBuYW1lc3BhY2UgU2xhYWMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIFNMQUFDX0FERFJFU1NfSFBQXworCmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy93cmFwX3N0ZGJvb2wuaCBiL3NyYy9jb3JlL3V0aWxzL3dyYXBfc3RkYm9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDU4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy93cmFwX3N0ZGJvb2wuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBzdGFuZGFyZCAic3RyaW5nLmgiIGZpbGUKKyAqICAgVGhlIHB1cnBvc2UgaXMgYWRkIGFueSBtaXNzaW5nIGZ1bmN0aW9uIHByb3RvdHlwZXMgbm90CisgKiAgIHByb3ZpZGVkIGJ5IGEgc3BlY2lmaWMgY29tcGlsZXIuCisgKi8KKworI2lmICFkZWZpbmVkKFdSQVBfU1REQk9PTF9IKQorI2RlZmluZSBXUkFQX1NUREJPT0xfSAorCisjaWYgSEFWRV9TVERCT09MX0gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZWxzZQorCisvKiBTdXBwbHkgb3VyIG93biAqLworI2lmIF9fY3BsdXNwbHVzCisvKiBjKysgaGFzIGEgYnVpbHQgaW4gYm9vbCAqLworI2Vsc2UKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIGJvb2wgX0Jvb2wKKyNlbHNlCit0eXBlZGVmIF9Cb29sIGJvb2w7CisjZW5kaWYgLy8gdmlzdWFsIHN0dWRpbyBoYXMgYSBib29sCisKKyNpZiAhZGVmaW5lZChfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCkKKyNkZWZpbmUgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgMQorI2RlZmluZSBmYWxzZSAwCisjZGVmaW5lIHRydWUgMQorI2VuZGlmIC8vIGJvb2wgZGVmaW5lZAorCisjZW5kaWYgLy8gX19jcGx1c3BsdXMKKworI2VuZGlmIC8vIEhBVkVfU1REQk9PTF9ICisKKworI2VuZGlmIC8vIFdSQVBfU1REQk9PTF9ICmRpZmYgLS1naXQgYS9zcmMvY29yZS91dGlscy93cmFwX3N0ZGludC5oIGIvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWI1OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvdXRpbHMvd3JhcF9zdGRpbnQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmICFkZWZpbmVkKFdSQVBfU1RESU5UX0gpCisjZGVmaW5lIFdSQVBfU1RESU5UX0gKKworLyogZ2VuZXJhbGx5IGFsbCBjb21waWxlcnMgc3VwcG9ydCB0aGlzICovCisvKiBWaXN1YWwgU3R1ZGlvIG9ubHkgYWZ0ZXIgVlMyMDE1IChha2E6IDE5LjAwKSAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSIDwgMTkwMCkKKy8qIHR5cGVzIGZyb20gdGhpcyBwYWdlOiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzI5ZGgxdzd6LmFzcHggKi8KKwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDggIHVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgdWludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CisKK3R5cGVkZWYgX19pbnQ4ICBpbnQ4X3Q7Cit0eXBlZGVmIF9faW50MTYgaW50MTZfdDsKK3R5cGVkZWYgX19pbnQzMiBpbnQzMl90OwordHlwZWRlZiBfX2ludDY0IGludDY0X3Q7CisKKyNlbHNlCisvKiB1c2UgdGhlIGNvbXBpbGVyIHN1cHBsaWVkIHNvbHV0aW9uICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2VuZGlmIC8vIFdSQVBfU1RESU5UX0gKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3V0aWxzL3dyYXBfc3RyaW5nLmggYi9zcmMvY29yZS91dGlscy93cmFwX3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmE1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29yZS91dGlscy93cmFwX3N0cmluZy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGlzIGEgd3JhcHBlciBmb3IgdGhlIHN0YW5kYXJkICJzdHJpbmcuaCIgZmlsZQorICogICBTb21lIHBsYXRmb3JtcyBwcm92aWRlIGFsbCByZXF1aXJlZCBmdW5jdGlvbnMsIHNvbWUgZG8gbm90LgorICogICBUaGlzIHNvbHZlcyB0aGUgbWlzc2luZyBmdW5jdGlvbnMgaW4gI2luY2x1ZGUgPHN0cmluZy5oPgorICovCisKKyNpZiAhZGVmaW5lZChXUkFQX1NUUklOR19IKQorI2RlZmluZSBXUkFQX1NUUklOR19ICisKKy8qIHN5c3RlbSBwcm92aWRlZCBzdHJpbmcuaCAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKy8qIFRoZXNlIGFyZSBDIGZ1bmN0aW9ucyAqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIFdSQVBfRVhURVJOX0MgIGV4dGVybiAiQyIKKyNlbHNlCisjZGVmaW5lIFdSQVBfRVhURVJOX0MgIGV4dGVybgorI2VuZGlmCisKKy8qIFByb3RvdHlwZXMgZm9yIG91ciBtaXNzaW5nIGZ1bmN0aW9uIHJlcGxhY2VtZW50cyAqLworCisvKiBTZWU6IGh0dHBzOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9tYW4uY2dpP3F1ZXJ5PXN0cmxjcHkgKi8KK1dSQVBfRVhURVJOX0Mgc2l6ZV90IG1pc3Npbmdfc3RybGNweShjaGFyICAgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0c2l6ZSk7CisvKiBTZWU6IGh0dHBzOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9tYW4uY2dpP3F1ZXJ5PXN0cmxjYXQgKi8KK1dSQVBfRVhURVJOX0Mgc2l6ZV90IG1pc3Npbmdfc3RybGNhdChjaGFyICAgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0c2l6ZSk7CisvKiBTZWU6IGh0dHBzOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9tYW4uY2dpP3F1ZXJ5PXN0cm5sZW4gKi8KK1dSQVBfRVhURVJOX0Mgc2l6ZV90IG1pc3Npbmdfc3Rybmxlbihjb25zdCBjaGFyICpzLCBzaXplX3QgbWF4bGVuKTsKKworI3VuZGVmIFdSQVBfRVhURVJOX0MKKworCisKKyNpZiAoIUhBVkVfU1RSTkxFTikKKyNkZWZpbmUgc3RybmxlbiggUywgTiApICAgICBtaXNzaW5nX3N0cm5sZW4oIFMsIE4gKQorI2VuZGlmCisKKyNpZiAoIUhBVkVfU1RSTENQWSkKKyNkZWZpbmUgc3RybGNweSggRCwgUywgTiApICBtaXNzaW5nX3N0cmxjcHkoIEQsIFMsIE4gKQorI2VuZGlmCisKKyNpZiAoIUhBVkVfU1RSTENBVCkKKyNkZWZpbmUgc3RybGNhdCggRCwgUywgTiApICBtaXNzaW5nX3N0cmxjYXQoIEQsIFMsIE4gKQorI2VuZGlmCisKKyNlbmRpZiAgLy8gV1JBUF9TVFJJTkdfSApkaWZmIC0tZ2l0IGEvc3JjL2RpYWcvTWFrZWZpbGUuYW0gYi9zcmMvZGlhZy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODcxN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RpYWcvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1MyBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitsaWJfTElCUkFSSUVTICAgICAgICAgICAgICAgICAgICAgICA9IGxpYm9wZW50aHJlYWQtZGlhZy5hCisKK2xpYm9wZW50aHJlYWRfZGlhZ19hX0NQUEZMQUdTID0gICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgIFwKKyAgICAkKE9QRU5USFJFQURfVEFSR0VUX0RFRklORVMpICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfZGlhZ19hX1NPVVJDRVMgICAgICAgICA9IFwKKyAgICBvcGVudGhyZWFkLWRpYWcuY3BwICAgICAgICAgICAgICAgIFwKKyAgICBkaWFnX3Byb2Nlc3MuY3BwICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK25vaW5zdF9IRUFERVJTICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBkaWFnX3Byb2Nlc3MuaHBwICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh3aWxkY2FyZCAqLmdjZGEgKi5nY25vKQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvc3JjL2RpYWcvUkVBRE1FLm1kIGIvc3JjL2RpYWcvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNmUzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGlhZy9SRUFETUUubWQKQEAgLTAsMCArMSwxNDEgQEAKKyMgT3BlblRocmVhZCBEaWFnbm9zdGljcyBNb2R1bGUgUmVmZXJlbmNlCisKK1RoZSBPcGVuVGhyZWFkIGRpYWdub3N0aWNzIG1vZHVsZSBpcyBhIHRvb2wgZm9yIGRlYnVnZ2luZyBwbGF0Zm9ybSBoYXJkd2FyZSBtYW51YWxseSwgYW5kIGl0IHdpbGwgYWxzbyBiZSB1c2VkIGR1cmluZyBtYW51ZmFjdHVyaW5nIHByb2Nlc3MsIHRvIHZlcmlmeSBwbGF0Zm9ybSBoYXJkd2FyZSBwZXJmb3JtYW5jZS4KKworVGhlIGRpYWdub3N0aWNzIG1vZHVsZSBzdXBwb3J0cyBjb21tb24gZGlhZ25vc3RpY3MgZmVhdHVyZXMgdGhhdCBhcmUgbGlzdGVkIGJlbG93LCBhbmQgaXQgYWxzbyBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgZXhwYW5kaW5nIHBsYXRmb3JtIHNwZWNpZmljIGRpYWdub3N0aWNzIGZlYXR1cmVzLgorCisKKyMjIENvbW1vbiBEaWFnbm9zdGljcyBDb21tYW5kIExpc3QKKworKiBbZGlhZ10oI2RpYWcpCisqIFtkaWFnIHN0YXJ0XSgjZGlhZy1zdGFydCkKKyogW2RpYWcgY2hhbm5lbF0oI2RpYWctY2hhbm5lbCkKKyogW2RpYWcgcG93ZXJdKCNkaWFnLXBvd2VyKQorKiBbZGlhZyBzZW5kXSgjZGlhZy1zZW5kLXBhY2tldHMtbGVuZ3RoKQorKiBbZGlhZyByZXBlYXRdKCNkaWFnLXJlcGVhdC1kZWxheS1sZW5ndGgpCisqIFtkaWFnIHNsZWVwXSgjZGlhZy1zbGVlcCkKKyogW2RpYWcgc3RhdHNdKCNkaWFnLXN0YXRzKQorKiBbZGlhZyBzdG9wXSgjZGlhZy1zdG9wKQorCisKKyMjIyBkaWFnCisKK1Nob3cgZGlhZ25vc3RpY3MgbW9kZSBzdGF0dXMuCisKK2BgYGJhc2gKKz4gZGlhZworZGlhZ25vc3RpY3MgbW9kZSBpcyBkaXNhYmxlZAorYGBgCisKKyMjIyBkaWFnIHN0YXJ0CisKK1N0YXJ0IGRpYWdub3N0aWNzIG1vZGUuCisKK2BgYGJhc2gKKz4gZGlhZyBzdGFydAorc3RhcnQgZGlhZ25vc3RpY3MgbW9kZQorc3RhdHVzIDB4MDAKK2BgYAorCisjIyMgZGlhZyBjaGFubmVsCisKK0dldCB0aGUgSUVFRSA4MDIuMTUuNCBDaGFubmVsIHZhbHVlIGZvciBkaWFnbm9zdGljcyBtb2R1bGUuCisKK2BgYGJhc2gKKz4gZGlhZyBjaGFubmVsCitjaGFubmVsOiAxMQorYGBgCisKKyMjIyBkaWFnIGNoYW5uZWwgXDxjaGFubmVsXD4KKworU2V0IHRoZSBJRUVFIDgwMi4xNS40IENoYW5uZWwgdmFsdWUgZm9yIGRpYWdub3N0aWNzIG1vZHVsZS4KKworYGBgYmFzaAorPiBkaWFnIGNoYW5uZWwgMTEKK3NldCBjaGFubmVsIHRvIDExCitzdGF0dXMgMHgwMAorYGBgCisKKyMjIyBkaWFnIHBvd2VyCisKK0dldCB0aGUgdHggcG93ZXIgdmFsdWUoZEJtKSBmb3IgZGlhZ25vc3RpY3MgbW9kdWxlLgorCitgYGBiYXNoCis+IGRpYWcgcG93ZXIKK3R4IHBvd2VyOiAtMTAgZEJtCitgYGAKKworIyMjIGRpYWcgcG93ZXIgXDxwb3dlclw+CisKK1NldCB0aGUgdHggcG93ZXIgdmFsdWUoZEJtKSBmb3IgZGlhZ25vc3RpY3MgbW9kdWxlLgorCitgYGBiYXNoCis+IGRpYWcgcG93ZXIgLTEwCitzZXQgdHggcG93ZXIgdG8gLTEwIGRCbQorc3RhdHVzIDB4MDAKK2BgYAorCisjIyMgZGlhZyBzZW5kIFw8cGFja2V0c1w+IFw8bGVuZ3RoXD4KKworVHJhbnNtaXQgYSBmaXhlZCBudW1iZXIgb2YgcGFja2V0cyB3aXRoIGZpeGVkIGxlbmd0aC4KKworYGBgYmFzaAorPiBkaWFnIHNlbmQgMjAgMTAwCitzZW5kaW5nIDB4MTQgcGFja2V0KHMpLCBsZW5ndGggMHg2NAorc3RhdHVzIDB4MDAKK2BgYAorCisjIyMgZGlhZyByZXBlYXQgXDxkZWxheVw+IFw8bGVuZ3RoXD4KKworVHJhbnNtaXQgcGFja2V0cyByZXBlYXRlZGx5IHdpdGggYSBmaXhlZCBpbnRlcnZhbC4KKworYGBgYmFzaAorPiBkaWFnIHJlcGVhdCAxMDAgMTAwCitzZW5kaW5nIHBhY2tldHMgb2YgbGVuZ3RoIDB4NjQgYXQgdGhlIGRlbGF5IG9mIDB4NjQgbXMKK3N0YXR1cyAweDAwCitgYGAKKworIyMjIGRpYWcgcmVwZWF0IHN0b3AKKworU3RvcCByZXBlYXRlZCBwYWNrZXQgdHJhbnNtaXNzaW9uLgorCitgYGBiYXNoCis+IGRpYWcgcmVwZWF0IHN0b3AKK3JlcGVhdGVkIHBhY2tldCB0cmFuc21pc3Npb24gaXMgc3RvcHBlZAorc3RhdHVzIDB4MDAKK2BgYAorCisjIyMgZGlhZyBzbGVlcAorCitFbnRlciByYWRpbyBzbGVlcCBtb2RlLgorCitgYGBiYXNoCis+IGRpYWcgc2xlZXAKK3NsZWVwaW5nIG5vdy4uLgorYGBgCisKKyMjIyBkaWFnIHN0YXRzCisKK1ByaW50IHN0YXRpc3RpY3MgZHVyaW5nIGRpYWdub3N0aWNzIG1vZGUuCisKK2BgYGJhc2gKKz4gZGlhZyBzdGF0cworcmVjZWl2ZWQgcGFja2V0czogMTAKK3NlbnQgcGFja2V0czogMTAKK2ZpcnN0IHJlY2VpdmVkIHBhY2tldDogcnNzaT0tNjUsIGxxaT0xMDEKK2BgYAorCisjIyMgZGlhZyBzdG9wCisKK1N0b3AgZGlhZ25vc3RpY3MgbW9kZSBhbmQgcHJpbnQgc3RhdGlzdGljcy4KKworYGBgYmFzaAorPiBkaWFnIHN0b3AKK3JlY2VpdmVkIHBhY2tldHM6IDEwCitzZW50IHBhY2tldHM6IDEwCitmaXJzdCByZWNlaXZlZCBwYWNrZXQ6IHJzc2k9LTY1LCBscWk9MTAxCisKK3N0b3AgZGlhZ25vc3RpY3MgbW9kZQorc3RhdHVzIDB4MDAKK2BgYAorCmRpZmYgLS1naXQgYS9zcmMvZGlhZy9kaWFnX3Byb2Nlc3MuY3BwIGIvc3JjL2RpYWcvZGlhZ19wcm9jZXNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjVlM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RpYWcvZGlhZ19wcm9jZXNzLmNwcApAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgZGlhZ25vc3RpY3MgbW9kdWxlLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAiZGlhZ19wcm9jZXNzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CituYW1lc3BhY2UgRGlhZ25vc3RpY3MgeworCitjb25zdCBzdHJ1Y3QgQ29tbWFuZCBEaWFnOjpzQ29tbWFuZHNbXSA9Cit7CisgICAgeyAic3RhcnQiLCAmUHJvY2Vzc1N0YXJ0IH0sCisgICAgeyAic3RvcCIsICZQcm9jZXNzU3RvcCB9LAorICAgIHsgImNoYW5uZWwiLCAmUHJvY2Vzc0NoYW5uZWwgfSwKKyAgICB7ICJwb3dlciIsICZQcm9jZXNzUG93ZXIgfSwKKyAgICB7ICJzZW5kIiwgJlByb2Nlc3NTZW5kIH0sCisgICAgeyAicmVwZWF0IiwgJlByb2Nlc3NSZXBlYXQgfSwKKyAgICB7ICJzbGVlcCIsICZQcm9jZXNzU2xlZXAgfSwKKyAgICB7ICJzdGF0cyIsICZQcm9jZXNzU3RhdHMgfSwKK307CisKK2NoYXIgRGlhZzo6c0RpYWdPdXRwdXRbTUFYX0RJQUdfT1VUUFVUXTsKK3N0cnVjdCBEaWFnU3RhdHMgRGlhZzo6c1N0YXRzOworCitpbnQ4X3QgRGlhZzo6c1R4UG93ZXI7Cit1aW50OF90IERpYWc6OnNDaGFubmVsOwordWludDhfdCBEaWFnOjpzVHhMZW47Cit1aW50MzJfdCBEaWFnOjpzVHhQZXJpb2Q7Cit1aW50MzJfdCBEaWFnOjpzVHhQYWNrZXRzOworb3RSYWRpb0ZyYW1lICogRGlhZzo6c1R4UGFja2V0OworYm9vbCBEaWFnOjpzUmVwZWF0QWN0aXZlOworCitvdEluc3RhbmNlICpEaWFnOjpzQ29udGV4dDsKKwordm9pZCBEaWFnOjpJbml0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBzQ29udGV4dCA9IGFJbnN0YW5jZTsKKyAgICBzQ2hhbm5lbCA9IDIwOworICAgIHNUeFBvd2VyID0gMDsKKyAgICBzVHhQZXJpb2QgPSAwOworICAgIHNUeExlbiA9IDA7CisgICAgc1R4UGFja2V0cyA9IDA7CisgICAgc1JlcGVhdEFjdGl2ZSA9IGZhbHNlOworICAgIG1lbXNldCgmc1N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IERpYWdTdGF0cykpOworICAgIHNUeFBhY2tldCA9IG90UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIoc0NvbnRleHQpOworICAgIG90UGxhdERpYWdDaGFubmVsU2V0KHNDaGFubmVsKTsKKyAgICBvdFBsYXREaWFnVHhQb3dlclNldChzVHhQb3dlcik7Cit9CisKK2NoYXIgKkRpYWc6OlByb2Nlc3NDbWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBzbnByaW50ZihzRGlhZ091dHB1dCwgc2l6ZW9mKHNEaWFnT3V0cHV0KSwgImRpYWdub3N0aWNzIG1vZGUgaXMgJXNcclxuIiwgb3RQbGF0RGlhZ01vZGVHZXQoKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNDb21tYW5kcykgLyBzaXplb2Yoc0NvbW1hbmRzWzBdKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sIHNDb21tYW5kc1tpXS5tTmFtZSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzQ29tbWFuZHNbaV0ubUNvbW1hbmQoYXJnYyAtIDEsIGFyZ2MgPiAxID8gJmFyZ3ZbMV0gOiBOVUxMLCBzRGlhZ091dHB1dCwgc2l6ZW9mKHNEaWFnT3V0cHV0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGZlYXR1cmVzIHdpbGwgYmUgcHJvY2Vzc2VkIHVuZGVyIHBsYXRmb3JtIGxheWVyCisgICAgICAgIGlmIChpID09IHNpemVvZihzQ29tbWFuZHMpIC8gc2l6ZW9mKHNDb21tYW5kc1swXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90UGxhdERpYWdQcm9jZXNzKHNDb250ZXh0LCBhcmdjLCBhcmd2LCBzRGlhZ091dHB1dCwgc2l6ZW9mKHNEaWFnT3V0cHV0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc0RpYWdPdXRwdXQ7Cit9CisKK2Jvb2wgRGlhZzo6aXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gb3RQbGF0RGlhZ01vZGVHZXQoKTsKK30KKwordm9pZCBEaWFnOjpBcHBlbmRFcnJvclJlc3VsdChvdEVycm9yIGFFcnJvciwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgaWYgKGFFcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgImZhaWxlZFxyXG5zdGF0dXMgJSN4XHJcbiIsIGFFcnJvcik7CisgICAgfQorfQorCit2b2lkIERpYWc6OlByb2Nlc3NTdGFydChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIGVuYWJsZSByYWRpbworICAgIG90UGxhdFJhZGlvRW5hYmxlKHNDb250ZXh0KTsKKworICAgIC8vIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlCisgICAgb3RQbGF0UmFkaW9TZXRQcm9taXNjdW91cyhzQ29udGV4dCwgdHJ1ZSk7CisKKyAgICAvLyBzdG9wIHRpbWVyCisgICAgb3RQbGF0QWxhcm1TdG9wKHNDb250ZXh0KTsKKworICAgIC8vIHN0YXJ0IHRvIGxpc3RlbiBvbiB0aGUgZGVmYXVsdCBjaGFubmVsCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90UGxhdFJhZGlvUmVjZWl2ZShzQ29udGV4dCwgc0NoYW5uZWwpKTsKKworICAgIC8vIGVuYWJsZSBkaWFnbm9zdGljcyBtb2RlCisgICAgb3RQbGF0RGlhZ01vZGVTZXQodHJ1ZSk7CisKKyAgICBtZW1zZXQoJnNTdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBEaWFnU3RhdHMpKTsKKworICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzdGFydCBkaWFnbm9zdGljcyBtb2RlXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgZXJyb3IpOworCitleGl0OgorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmdjKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYXJndik7CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCit2b2lkIERpYWc6OlByb2Nlc3NTdG9wKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBvdFBsYXRBbGFybVN0b3Aoc0NvbnRleHQpOworICAgIG90UGxhdERpYWdNb2RlU2V0KGZhbHNlKTsKKyAgICBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKHNDb250ZXh0LCBmYWxzZSk7CisKKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAicmVjZWl2ZWQgcGFja2V0czogJWRcclxuc2VudCBwYWNrZXRzOiAlZFxyXG5maXJzdCByZWNlaXZlZCBwYWNrZXQ6IHJzc2k9JWQsIGxxaT0lZFxyXG5cbnN0b3AgZGlhZ25vc3RpY3MgbW9kZVxyXG5zdGF0dXMgMHglMDJ4XHJcbiIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNTdGF0cy5yZWNlaXZlZF9wYWNrZXRzKSwgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMuc2VudF9wYWNrZXRzKSwgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMuZmlyc3RfcnNzaSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNTdGF0cy5maXJzdF9scWkpLCBlcnJvcik7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRFcnJvclJlc3VsdChlcnJvciwgYU91dHB1dCwgYU91dHB1dE1heExlbik7Cit9CisKK290RXJyb3IgRGlhZzo6UGFyc2VMb25nKGNoYXIgKmFyZ3YsIGxvbmcgJnZhbHVlKQoreworICAgIGNoYXIgKmVuZHB0cjsKKyAgICB2YWx1ZSA9IHN0cnRvbChhcmd2LCAmZW5kcHRyLCAwKTsKKyAgICByZXR1cm4gKCplbmRwdHIgPT0gJ1wwJykgPyBPVF9FUlJPUl9OT05FIDogT1RfRVJST1JfUEFSU0U7Cit9CisKK3ZvaWQgRGlhZzo6VHhQYWNrZXQoKQoreworICAgIHNUeFBhY2tldC0+bUxlbmd0aCA9IHNUeExlbjsKKyAgICBzVHhQYWNrZXQtPm1DaGFubmVsID0gc0NoYW5uZWw7CisgICAgc1R4UGFja2V0LT5tUG93ZXIgPSBzVHhQb3dlcjsKKworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IHNUeExlbjsgaSsrKQorICAgIHsKKyAgICAgICAgc1R4UGFja2V0LT5tUHNkdVtpXSA9IGk7CisgICAgfQorICAgIG90UGxhdFJhZGlvVHJhbnNtaXQoc0NvbnRleHQsIHNUeFBhY2tldCk7Cit9CisKK3ZvaWQgRGlhZzo6UHJvY2Vzc0NoYW5uZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQob3RQbGF0RGlhZ01vZGVHZXQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGlmIChhcmdjID09IDApCisgICAgeworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAiY2hhbm5lbDogJWRcclxuIiwgc0NoYW5uZWwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHZhbHVlID49IE9UX1JBRElPX0NIQU5ORUxfTUlOICYmIHZhbHVlIDw9IE9UX1JBRElPX0NIQU5ORUxfTUFYLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisgICAgICAgIHNDaGFubmVsID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworCisgICAgICAgIC8vIGxpc3RlbiBvbiB0aGUgc2V0IGNoYW5uZWwgaW1tZWRpYXRlbHkKKyAgICAgICAgb3RQbGF0UmFkaW9SZWNlaXZlKHNDb250ZXh0LCBzQ2hhbm5lbCk7CisgICAgICAgIG90UGxhdERpYWdDaGFubmVsU2V0KHNDaGFubmVsKTsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInNldCBjaGFubmVsIHRvICVkXHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc0NoYW5uZWwsIGVycm9yKTsKKyAgICB9CisKK2V4aXQ6CisgICAgQXBwZW5kRXJyb3JSZXN1bHQoZXJyb3IsIGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4pOworfQorCit2b2lkIERpYWc6OlByb2Nlc3NQb3dlcihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworCisgICAgaWYgKGFyZ2MgPT0gMCkKKyAgICB7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJ0eCBwb3dlcjogJWQgZEJtXHJcbiIsIHNUeFBvd2VyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMF0sIHZhbHVlKSk7CisgICAgICAgIHNUeFBvd2VyID0gc3RhdGljX2Nhc3Q8aW50OF90Pih2YWx1ZSk7CisgICAgICAgIG90UGxhdERpYWdUeFBvd2VyU2V0KHNUeFBvd2VyKTsKKyAgICAgICAgc25wcmludGYoYU91dHB1dCwgYU91dHB1dE1heExlbiwgInNldCB0eCBwb3dlciB0byAlZCBkQm1cclxuc3RhdHVzIDB4JTAyeFxyXG4iLCBzVHhQb3dlciwgZXJyb3IpOworICAgIH0KKworZXhpdDoKKyAgICBBcHBlbmRFcnJvclJlc3VsdChlcnJvciwgYU91dHB1dCwgYU91dHB1dE1heExlbik7Cit9CisKK3ZvaWQgRGlhZzo6UHJvY2Vzc1NlbmQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgbG9uZyB2YWx1ZTsKKworICAgIFZlcmlmeU9yRXhpdChvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdChhcmdjID09IDIsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICBzVHhQYWNrZXRzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlsxXSwgdmFsdWUpKTsKKyAgICBWZXJpZnlPckV4aXQodmFsdWUgPD0gT1RfUkFESU9fRlJBTUVfTUFYX1NJWkUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICBzVHhMZW4gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisKKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAic2VuZGluZyAlI3ggcGFja2V0KHMpLCBsZW5ndGggJSN4XHJcbnN0YXR1cyAweCUwMnhcclxuIiwgc3RhdGljX2Nhc3Q8aW50PihzVHhQYWNrZXRzKSwgc3RhdGljX2Nhc3Q8aW50PihzVHhMZW4pLCBlcnJvcik7CisgICAgVHhQYWNrZXQoKTsKKworZXhpdDoKKyAgICBBcHBlbmRFcnJvclJlc3VsdChlcnJvciwgYU91dHB1dCwgYU91dHB1dE1heExlbik7Cit9CisKK3ZvaWQgRGlhZzo6UHJvY2Vzc1JlcGVhdChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChvdFBsYXREaWFnTW9kZUdldCgpLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfU1RBVEUpOworICAgIFZlcmlmeU9yRXhpdChhcmdjID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgaWYgKHN0cmNtcChhcmd2WzBdLCAic3RvcCIpID09IDApCisgICAgeworICAgICAgICBvdFBsYXRBbGFybVN0b3Aoc0NvbnRleHQpOworICAgICAgICBzUmVwZWF0QWN0aXZlID0gZmFsc2U7CisgICAgICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJyZXBlYXRlZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzIHN0b3BwZWRcclxuc3RhdHVzIDB4JTAyeFxyXG4iLCBlcnJvcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KGFyZ2MgPT0gMiwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBQYXJzZUxvbmcoYXJndlswXSwgdmFsdWUpKTsKKyAgICAgICAgc1R4UGVyaW9kID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gUGFyc2VMb25nKGFyZ3ZbMV0sIHZhbHVlKSk7CisgICAgICAgIFZlcmlmeU9yRXhpdCh2YWx1ZSA8PSBPVF9SQURJT19GUkFNRV9NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworICAgICAgICBzVHhMZW4gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisKKyAgICAgICAgc1JlcGVhdEFjdGl2ZSA9IHRydWU7CisgICAgICAgIHVpbnQzMl90IG5vdyA9IG90UGxhdEFsYXJtR2V0Tm93KCk7CisgICAgICAgIG90UGxhdEFsYXJtU3RhcnRBdChzQ29udGV4dCwgbm93LCBzVHhQZXJpb2QpOworICAgICAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAic2VuZGluZyBwYWNrZXRzIG9mIGxlbmd0aCAlI3ggYXQgdGhlIGRlbGF5IG9mICUjeCBtc1xyXG5zdGF0dXMgMHglMDJ4XHJcbiIsIHN0YXRpY19jYXN0PGludD4oc1R4TGVuKSwgc3RhdGljX2Nhc3Q8aW50PihzVHhQZXJpb2QpLCBlcnJvcik7CisgICAgfQorCitleGl0OgorICAgIEFwcGVuZEVycm9yUmVzdWx0KGVycm9yLCBhT3V0cHV0LCBhT3V0cHV0TWF4TGVuKTsKK30KKwordm9pZCBEaWFnOjpQcm9jZXNzU2xlZXAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQob3RQbGF0RGlhZ01vZGVHZXQoKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIG90UGxhdFJhZGlvU2xlZXAoc0NvbnRleHQpOworICAgIHNucHJpbnRmKGFPdXRwdXQsIGFPdXRwdXRNYXhMZW4sICJzbGVlcGluZyBub3cuLi5cclxuIik7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRFcnJvclJlc3VsdChlcnJvciwgYU91dHB1dCwgYU91dHB1dE1heExlbik7Cit9CisKK3ZvaWQgRGlhZzo6UHJvY2Vzc1N0YXRzKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG90UGxhdERpYWdNb2RlR2V0KCksIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBzbnByaW50ZihhT3V0cHV0LCBhT3V0cHV0TWF4TGVuLCAicmVjZWl2ZWQgcGFja2V0czogJWRcclxuc2VudCBwYWNrZXRzOiAlZFxyXG5maXJzdCByZWNlaXZlZCBwYWNrZXQ6IHJzc2k9JWQsIGxxaT0lZFxyXG4iLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMucmVjZWl2ZWRfcGFja2V0cyksIHN0YXRpY19jYXN0PGludD4oc1N0YXRzLnNlbnRfcGFja2V0cyksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNTdGF0cy5maXJzdF9yc3NpKSwgc3RhdGljX2Nhc3Q8aW50PihzU3RhdHMuZmlyc3RfbHFpKSk7CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFyZ2MpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhcmd2KTsKKyAgICBBcHBlbmRFcnJvclJlc3VsdChlcnJvciwgYU91dHB1dCwgYU91dHB1dE1heExlbik7Cit9CisKK3ZvaWQgRGlhZzo6RGlhZ1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RXJyb3IgYUVycm9yKQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHNTdGF0cy5zZW50X3BhY2tldHMrKzsKKworICAgICAgICBpZiAoc1R4UGFja2V0cyA+IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNUeFBhY2tldHMtLTsKKyAgICAgICAgICAgIFR4UGFja2V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVHhQYWNrZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlhZzo6RGlhZ1JlY2VpdmVEb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIG90RXJyb3IgYUVycm9yKQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSW5zdGFuY2UpOworICAgIGlmIChhRXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIC8vIGZvciBzZW5zaXRpdml0eSB0ZXN0LCBvbmx5IHJlY29yZCB0aGUgcnNzaSBhbmQgbHFpIGZvciB0aGUgZmlyc3QgcGFja2V0CisgICAgICAgIGlmIChzU3RhdHMucmVjZWl2ZWRfcGFja2V0cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzU3RhdHMuZmlyc3RfcnNzaSA9IGFGcmFtZS0+bVBvd2VyOworICAgICAgICAgICAgc1N0YXRzLmZpcnN0X2xxaSA9IGFGcmFtZS0+bUxxaTsKKyAgICAgICAgfQorCisgICAgICAgIHNTdGF0cy5yZWNlaXZlZF9wYWNrZXRzKys7CisgICAgfQorICAgIG90UGxhdERpYWdSYWRpb1JlY2VpdmVkKGFJbnN0YW5jZSwgYUZyYW1lLCBhRXJyb3IpOworICAgIG90UGxhdFJhZGlvUmVjZWl2ZShhSW5zdGFuY2UsIHNDaGFubmVsKTsKK30KKwordm9pZCBEaWFnOjpBbGFybUZpcmVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBpZihzUmVwZWF0QWN0aXZlKQorICAgIHsKKyAgICAgICAgdWludDMyX3Qgbm93ID0gb3RQbGF0QWxhcm1HZXROb3coKTsKKworICAgICAgICBUeFBhY2tldCgpOworICAgICAgICBvdFBsYXRBbGFybVN0YXJ0QXQoYUluc3RhbmNlLCBub3csIHNUeFBlcmlvZCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG90UGxhdERpYWdBbGFybUNhbGxiYWNrKGFJbnN0YW5jZSk7CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0RGlhZ0FsYXJtRmlyZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQoreworICAgIERpYWc6OkFsYXJtRmlyZWQoYUluc3RhbmNlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdERpYWdSYWRpb1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUZyYW1lKTsKKworICAgIERpYWc6OkRpYWdUcmFuc21pdERvbmUoYUluc3RhbmNlLCBhRXJyb3IpOworfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZURvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgRGlhZzo6RGlhZ1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgYUZyYW1lLCBhRXJyb3IpOworfQorCit9ICAvLyBuYW1lc3BhY2UgRGlhZ25vc3RpY3MKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL2RpYWcvZGlhZ19wcm9jZXNzLmhwcCBiL3NyYy9kaWFnL2RpYWdfcHJvY2Vzcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2OWEwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaWFnL2RpYWdfcHJvY2Vzcy5ocHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGlhZ25vc3RpY3MgbW9kdWxlLgorICovCisKKyNpZm5kZWYgRElBR19QUk9DRVNTX0hQUF8KKyNkZWZpbmUgRElBR19QUk9DRVNTX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvdHlwZXMuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorCituYW1lc3BhY2Ugb3QgeworCituYW1lc3BhY2UgRGlhZ25vc3RpY3MgeworCisjZGVmaW5lIE1BWF9ESUFHX09VVFBVVCAyNTYKKworc3RydWN0IENvbW1hbmQKK3sKKyAgICBjb25zdCBjaGFyICptTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgc3RyaW5nLgorICAgIHZvaWQgKCptQ29tbWFuZCkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOyAgLy8vPCBBIGZ1bmN0aW9uIHBvaW50ZXIgdG8gcHJvY2VzcyB0aGUgY29tbWFuZC4KK307CisKK3N0cnVjdCBEaWFnU3RhdHMKK3sKKyAgICB1aW50MzJfdCByZWNlaXZlZF9wYWNrZXRzOworICAgIHVpbnQzMl90IHNlbnRfcGFja2V0czsKKyAgICBpbnQ4X3QgZmlyc3RfcnNzaTsKKyAgICB1aW50OF90IGZpcnN0X2xxaTsKK307CisKK2NsYXNzIERpYWcKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBJbml0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk7CisgICAgc3RhdGljIGNoYXIgKlByb2Nlc3NDbWQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisgICAgc3RhdGljIGJvb2wgaXNFbmFibGVkKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgRGlhZ1RyYW5zbWl0RG9uZShvdEluc3RhbmNlICphSW5zdGFuY2UsIG90RXJyb3IgYUVycm9yKTsKKyAgICBzdGF0aWMgdm9pZCBEaWFnUmVjZWl2ZURvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpOworICAgIHN0YXRpYyB2b2lkIEFsYXJtRmlyZWQob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBBcHBlbmRFcnJvclJlc3VsdChvdEVycm9yIGVycm9yLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc1NsZWVwKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKTsKKyAgICBzdGF0aWMgdm9pZCBQcm9jZXNzU3RhcnQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqYU91dHB1dCwgc2l6ZV90IGFPdXRwdXRNYXhMZW4pOworICAgIHN0YXRpYyB2b2lkIFByb2Nlc3NTdG9wKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKTsKKyAgICBzdGF0aWMgdm9pZCBQcm9jZXNzU2VuZChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc1JlcGVhdChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc1N0YXRzKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKTsKKyAgICBzdGF0aWMgdm9pZCBQcm9jZXNzQ2hhbm5lbChpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0LCBzaXplX3QgYU91dHB1dE1heExlbik7CisgICAgc3RhdGljIHZvaWQgUHJvY2Vzc1Bvd2VyKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmFPdXRwdXQsIHNpemVfdCBhT3V0cHV0TWF4TGVuKTsKKyAgICBzdGF0aWMgdm9pZCBUeFBhY2tldCh2b2lkKTsKKyAgICBzdGF0aWMgb3RFcnJvciBQYXJzZUxvbmcoY2hhciAqYVN0cmluZywgbG9uZyAmYUxvbmcpOworCisgICAgc3RhdGljIGNoYXIgc0RpYWdPdXRwdXRbXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IENvbW1hbmQgc0NvbW1hbmRzW107CisgICAgc3RhdGljIHN0cnVjdCBEaWFnU3RhdHMgc1N0YXRzOworICAgIHN0YXRpYyBpbnQ4X3Qgc1R4UG93ZXI7CisgICAgc3RhdGljIHVpbnQ4X3Qgc0NoYW5uZWw7CisgICAgc3RhdGljIHVpbnQ4X3Qgc1R4TGVuOworICAgIHN0YXRpYyB1aW50MzJfdCBzVHhQZXJpb2Q7CisgICAgc3RhdGljIHVpbnQzMl90IHNUeFBhY2tldHM7CisgICAgc3RhdGljIG90UmFkaW9GcmFtZSAqc1R4UGFja2V0OworICAgIHN0YXRpYyBvdEluc3RhbmNlICpzQ29udGV4dDsKKyAgICBzdGF0aWMgYm9vbCBzUmVwZWF0QWN0aXZlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIERpYWdub3N0aWNzCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBDTElfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL2RpYWcvb3BlbnRocmVhZC1kaWFnLmNwcCBiL3NyYy9kaWFnL29wZW50aHJlYWQtZGlhZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlMmEwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaWFnL29wZW50aHJlYWQtZGlhZy5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdG9wLWxldmVsIGludGVyZmFjZSB0byBkaWFnbm9zdGljcyBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2RpYWcuaD4KKworI2luY2x1ZGUgImRpYWdfcHJvY2Vzcy5ocHAiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDo6RGlhZ25vc3RpY3M7CisKK3ZvaWQgb3REaWFnSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgRGlhZzo6SW5pdChhSW5zdGFuY2UpOworfQorCitjaGFyICpvdERpYWdQcm9jZXNzQ21kKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgcmV0dXJuIERpYWc6OlByb2Nlc3NDbWQoYXJnYywgYXJndik7Cit9CisKK2NoYXIgKm90RGlhZ1Byb2Nlc3NDbWRMaW5lKGNoYXIgKnN0cmluZykKK3sKKyAgICBjaGFyICphcmd2WzhdOworICAgIGludCBhcmdjID0gMDsKKyAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4oc3RyaW5nKSk7CisgICAgY2hhciAqY21kOworCisgICAgZm9yICg7ICpzdHJpbmcgPT0gJyAnOyBzdHJpbmcrKywgbGVuZ3RoLS0pOworCisgICAgZm9yIChjbWQgPSBzdHJpbmcgKyAxOyAoY21kIDwgc3RyaW5nICsgbGVuZ3RoKSAmJiAoY21kICE9IE5VTEwpOyArK2NtZCkKKyAgICB7CisgICAgICAgIGlmICgqY21kID09ICcgJyB8fCAqY21kID09ICdccicgfHwgKmNtZCA9PSAnXG4nKQorICAgICAgICB7CisgICAgICAgICAgICAqY21kID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqKGNtZCAtIDEpID09ICdcMCcgJiYgKmNtZCAhPSAnICcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFyZ3ZbYXJnYysrXSA9IGNtZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBEaWFnOjpQcm9jZXNzQ21kKGFyZ2MsIGFyZ3YpOworfQorCitib29sIG90RGlhZ0lzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIERpYWc6OmlzRW5hYmxlZCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL25jcC9NYWtlZmlsZS5hbSBiL3NyYy9uY3AvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4N2NmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMTEgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBQUk9UT0NPTC5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIFB1bGwgaW4gdGhlIHNvdXJjZXMgdGhhdCBjb21wcmlzZSB0aGUgT3BlblRocmVhZCBOQ1AgbGlicmFyeS4KKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBsaWJvcGVudGhyZWFkLW5jcC1tdGQuYSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbGlib3BlbnRocmVhZC1uY3AtZnRkLmEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworCitDT01NT05fQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtRF9HTlVfU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURTUElORUxfUExBVEZPUk1fSEVBREVSPVwic3BpbmVsX3BsYXRmb3JtLmhcIiAgXAorICAgICQoT1BFTlRIUkVBRF9UQVJHRVRfREVGSU5FUykgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbmNwX210ZF9hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURPUEVOVEhSRUFEX01URD0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoQ09NTU9OX0NQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbmNwX2Z0ZF9hX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURPUEVOVEhSRUFEX0ZURD0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoQ09NTU9OX0NQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0NPTU1PTl9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbmNwX2Jhc2UuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcF9iYXNlLmhwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuY3BfYnVmZmVyLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwX2J1ZmZlci5ocHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5lbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluZWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3BpbmVsX3BsYXRmb3JtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5jcF9zcGkuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuY3Bfc3BpLmhwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaGRsYy5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGhkbGMuaHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuY3BfdWFydC5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmNwX3VhcnQuaHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGlib3BlbnRocmVhZF9uY3BfbXRkX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICA9IFwKKyAgICQoQ09NTU9OX1NPVVJDRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAkKE5VTEwpCisKK2xpYm9wZW50aHJlYWRfbmNwX2Z0ZF9hX1NPVVJDRVMgICAgICAgICAgICAgICAgICAgPSBcCisgICAkKENPTU1PTl9TT1VSQ0VTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgJChOVUxMKQorCitpbmNsdWRlX0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9URVNUUworCitub2luc3RfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc3BpbmVsLXRlc3QKK3NwaW5lbF90ZXN0X1NPVVJDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzcGluZWwuYworc3BpbmVsX3Rlc3RfQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKENPTU1PTl9DUFBGTEFHUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLURTUElORUxfU0VMRl9URVNUPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1EX0dOVV9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjL2NvcmUgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworVEVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNwaW5lbC10ZXN0CisKK2luc3RhbGwtaGVhZGVyczogaW5zdGFsbC1pbmNsdWRlSEVBREVSUworCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJCh3aWxkY2FyZCAqLmdjZGEgKi5nY25vKQorZW5kaWYgIyBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfVEVTVFMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS9zcmMvbmNwL1BST1RPQ09MLm1kIGIvc3JjL25jcC9QUk9UT0NPTC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWFmZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9QUk9UT0NPTC5tZApAQCAtMCwwICsxLDcgQEAKK1NwaW5lbCBOQ1AgUHJvdG9jb2wgRG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgaGFzIG1vdmVkIGludG8gdGhlIHRvcCBsZXZlbCBgZG9jYCBmb2xkZXIgYW5kIHJlbmFtZWQKK1tgZHJhZnQtc3BpbmVsLXByb3RvY29sLnR4dGBdKC4uLy4uL2RvYy9kcmFmdC1zcGluZWwtcHJvdG9jb2wudHh0KQorYW5kIFtgZHJhZnQtc3BpbmVsLXByb3RvY29sLmh0bWxgXSguLi8uLi9kb2MvZHJhZnQtc3BpbmVsLXByb3RvY29sLmh0bWwpLgorCmRpZmYgLS1naXQgYS9zcmMvbmNwL2hkbGMuY3BwIGIvc3JjL25jcC9oZGxjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjBmYWUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9oZGxjLmNwcApAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhbiBIRExDLWxpdGUgZW5jb2RlciBhbmQgZGVjb2Rlci4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgImhkbGMuaHBwIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9OQ1BfVUFSVAorCituYW1lc3BhY2Ugb3QgeworbmFtZXNwYWNlIEhkbGMgeworCisvKioKKyAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgYW4gRkNTLgorICoKKyAqIEBwYXJhbVtpbl0gIGFGY3MgICBUaGUgRkNTIHRvIHVwZGF0ZS4KKyAqIEBwYXJhbVtpbl0gIGFCeXRlICBUaGUgaW5wdXQgYnl0ZSB2YWx1ZS4KKyAqCisgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBGQ1MuCisgKgorICovCitzdGF0aWMgdWludDE2X3QgVXBkYXRlRmNzKHVpbnQxNl90IGFGY3MsIHVpbnQ4X3QgYUJ5dGUpOworCitlbnVtCit7CisgICAga0ZsYWdYT24gICAgICAgID0gMHgxMSwKKyAgICBrRmxhZ1hPZmYgICAgICAgPSAweDEzLAorICAgIGtGbGFnU2VxdWVuY2UgICA9IDB4N2UsICAvLy88IEhETEMgRmxhZyB2YWx1ZQorICAgIGtFc2NhcGVTZXF1ZW5jZSA9IDB4N2QsICAvLy88IEhETEMgRXNjYXBlIHZhbHVlCisgICAga0ZsYWdTcGVjaWFsICAgID0gMHhmOCwKK307CisKKy8qKgorICogRkNTIGxvb2t1cCB0YWJsZQorICoKKyAqLworZW51bQoreworICAgIGtJbml0RmNzID0gMHhmZmZmLCAgLy8vPCBJbml0aWFsIEZDUyB2YWx1ZS4KKyAgICBrR29vZEZjcyA9IDB4ZjBiOCwgIC8vLzwgR29vZCBGQ1MgdmFsdWUuCit9OworCit1aW50MTZfdCBVcGRhdGVGY3ModWludDE2X3QgYUZjcywgdWludDhfdCBhQnl0ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc0Zjc1RhYmxlWzI1Nl0gPQorICAgIHsKKyAgICAgICAgMHgwMDAwLCAweDExODksIDB4MjMxMiwgMHgzMjliLCAweDQ2MjQsIDB4NTdhZCwgMHg2NTM2LCAweDc0YmYsCisgICAgICAgIDB4OGM0OCwgMHg5ZGMxLCAweGFmNWEsIDB4YmVkMywgMHhjYTZjLCAweGRiZTUsIDB4ZTk3ZSwgMHhmOGY3LAorICAgICAgICAweDEwODEsIDB4MDEwOCwgMHgzMzkzLCAweDIyMWEsIDB4NTZhNSwgMHg0NzJjLCAweDc1YjcsIDB4NjQzZSwKKyAgICAgICAgMHg5Y2M5LCAweDhkNDAsIDB4YmZkYiwgMHhhZTUyLCAweGRhZWQsIDB4Y2I2NCwgMHhmOWZmLCAweGU4NzYsCisgICAgICAgIDB4MjEwMiwgMHgzMDhiLCAweDAyMTAsIDB4MTM5OSwgMHg2NzI2LCAweDc2YWYsIDB4NDQzNCwgMHg1NWJkLAorICAgICAgICAweGFkNGEsIDB4YmNjMywgMHg4ZTU4LCAweDlmZDEsIDB4ZWI2ZSwgMHhmYWU3LCAweGM4N2MsIDB4ZDlmNSwKKyAgICAgICAgMHgzMTgzLCAweDIwMGEsIDB4MTI5MSwgMHgwMzE4LCAweDc3YTcsIDB4NjYyZSwgMHg1NGI1LCAweDQ1M2MsCisgICAgICAgIDB4YmRjYiwgMHhhYzQyLCAweDllZDksIDB4OGY1MCwgMHhmYmVmLCAweGVhNjYsIDB4ZDhmZCwgMHhjOTc0LAorICAgICAgICAweDQyMDQsIDB4NTM4ZCwgMHg2MTE2LCAweDcwOWYsIDB4MDQyMCwgMHgxNWE5LCAweDI3MzIsIDB4MzZiYiwKKyAgICAgICAgMHhjZTRjLCAweGRmYzUsIDB4ZWQ1ZSwgMHhmY2Q3LCAweDg4NjgsIDB4OTllMSwgMHhhYjdhLCAweGJhZjMsCisgICAgICAgIDB4NTI4NSwgMHg0MzBjLCAweDcxOTcsIDB4NjAxZSwgMHgxNGExLCAweDA1MjgsIDB4MzdiMywgMHgyNjNhLAorICAgICAgICAweGRlY2QsIDB4Y2Y0NCwgMHhmZGRmLCAweGVjNTYsIDB4OThlOSwgMHg4OTYwLCAweGJiZmIsIDB4YWE3MiwKKyAgICAgICAgMHg2MzA2LCAweDcyOGYsIDB4NDAxNCwgMHg1MTlkLCAweDI1MjIsIDB4MzRhYiwgMHgwNjMwLCAweDE3YjksCisgICAgICAgIDB4ZWY0ZSwgMHhmZWM3LCAweGNjNWMsIDB4ZGRkNSwgMHhhOTZhLCAweGI4ZTMsIDB4OGE3OCwgMHg5YmYxLAorICAgICAgICAweDczODcsIDB4NjIwZSwgMHg1MDk1LCAweDQxMWMsIDB4MzVhMywgMHgyNDJhLCAweDE2YjEsIDB4MDczOCwKKyAgICAgICAgMHhmZmNmLCAweGVlNDYsIDB4ZGNkZCwgMHhjZDU0LCAweGI5ZWIsIDB4YTg2MiwgMHg5YWY5LCAweDhiNzAsCisgICAgICAgIDB4ODQwOCwgMHg5NTgxLCAweGE3MWEsIDB4YjY5MywgMHhjMjJjLCAweGQzYTUsIDB4ZTEzZSwgMHhmMGI3LAorICAgICAgICAweDA4NDAsIDB4MTljOSwgMHgyYjUyLCAweDNhZGIsIDB4NGU2NCwgMHg1ZmVkLCAweDZkNzYsIDB4N2NmZiwKKyAgICAgICAgMHg5NDg5LCAweDg1MDAsIDB4Yjc5YiwgMHhhNjEyLCAweGQyYWQsIDB4YzMyNCwgMHhmMWJmLCAweGUwMzYsCisgICAgICAgIDB4MThjMSwgMHgwOTQ4LCAweDNiZDMsIDB4MmE1YSwgMHg1ZWU1LCAweDRmNmMsIDB4N2RmNywgMHg2YzdlLAorICAgICAgICAweGE1MGEsIDB4YjQ4MywgMHg4NjE4LCAweDk3OTEsIDB4ZTMyZSwgMHhmMmE3LCAweGMwM2MsIDB4ZDFiNSwKKyAgICAgICAgMHgyOTQyLCAweDM4Y2IsIDB4MGE1MCwgMHgxYmQ5LCAweDZmNjYsIDB4N2VlZiwgMHg0Yzc0LCAweDVkZmQsCisgICAgICAgIDB4YjU4YiwgMHhhNDAyLCAweDk2OTksIDB4ODcxMCwgMHhmM2FmLCAweGUyMjYsIDB4ZDBiZCwgMHhjMTM0LAorICAgICAgICAweDM5YzMsIDB4Mjg0YSwgMHgxYWQxLCAweDBiNTgsIDB4N2ZlNywgMHg2ZTZlLCAweDVjZjUsIDB4NGQ3YywKKyAgICAgICAgMHhjNjBjLCAweGQ3ODUsIDB4ZTUxZSwgMHhmNDk3LCAweDgwMjgsIDB4OTFhMSwgMHhhMzNhLCAweGIyYjMsCisgICAgICAgIDB4NGE0NCwgMHg1YmNkLCAweDY5NTYsIDB4NzhkZiwgMHgwYzYwLCAweDFkZTksIDB4MmY3MiwgMHgzZWZiLAorICAgICAgICAweGQ2OGQsIDB4YzcwNCwgMHhmNTlmLCAweGU0MTYsIDB4OTBhOSwgMHg4MTIwLCAweGIzYmIsIDB4YTIzMiwKKyAgICAgICAgMHg1YWM1LCAweDRiNGMsIDB4NzlkNywgMHg2ODVlLCAweDFjZTEsIDB4MGQ2OCwgMHgzZmYzLCAweDJlN2EsCisgICAgICAgIDB4ZTcwZSwgMHhmNjg3LCAweGM0MWMsIDB4ZDU5NSwgMHhhMTJhLCAweGIwYTMsIDB4ODIzOCwgMHg5M2IxLAorICAgICAgICAweDZiNDYsIDB4N2FjZiwgMHg0ODU0LCAweDU5ZGQsIDB4MmQ2MiwgMHgzY2ViLCAweDBlNzAsIDB4MWZmOSwKKyAgICAgICAgMHhmNzhmLCAweGU2MDYsIDB4ZDQ5ZCwgMHhjNTE0LCAweGIxYWIsIDB4YTAyMiwgMHg5MmI5LCAweDgzMzAsCisgICAgICAgIDB4N2JjNywgMHg2YTRlLCAweDU4ZDUsIDB4NDk1YywgMHgzZGUzLCAweDJjNmEsIDB4MWVmMSwgMHgwZjc4CisgICAgfTsKKyAgICByZXR1cm4gKGFGY3MgPj4gOCkgXiBzRmNzVGFibGVbKGFGY3MgXiBhQnl0ZSkgJiAweGZmXTsKK30KKworYm9vbCBIZGxjQnl0ZU5lZWRzRXNjYXBlKHVpbnQ4X3QgYUJ5dGUpCit7CisgICAgc3dpdGNoIChhQnl0ZSkKKyAgICB7CisgICAgY2FzZSBrRmxhZ1hPbjoKKyAgICBjYXNlIGtGbGFnWE9mZjoKKyAgICBjYXNlIGtFc2NhcGVTZXF1ZW5jZToKKyAgICBjYXNlIGtGbGFnU2VxdWVuY2U6CisgICAgY2FzZSBrRmxhZ1NwZWNpYWw6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworRW5jb2Rlcjo6QnVmZmVyV3JpdGVJdGVyYXRvcjo6QnVmZmVyV3JpdGVJdGVyYXRvcih2b2lkKQoreworICAgIG1Xcml0ZVBvaW50ZXIgPSBOVUxMOworICAgIG1SZW1haW5pbmdMZW5ndGggPSAwOworfQorCitvdEVycm9yIEVuY29kZXI6OkJ1ZmZlcldyaXRlSXRlcmF0b3I6OldyaXRlQnl0ZSh1aW50OF90IGFCeXRlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgVmVyaWZ5T3JFeGl0KG1SZW1haW5pbmdMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgKm1Xcml0ZVBvaW50ZXIrKyA9IGFCeXRlOworICAgIG1SZW1haW5pbmdMZW5ndGgtLTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK2Jvb2wgRW5jb2Rlcjo6QnVmZmVyV3JpdGVJdGVyYXRvcjo6Q2FuV3JpdGUodWludDE2X3QgYVdyaXRlTGVuZ3RoKSBjb25zdAoreworICAgIHJldHVybiAobVJlbWFpbmluZ0xlbmd0aCA+PSBhV3JpdGVMZW5ndGgpOworfQorCitFbmNvZGVyOjpFbmNvZGVyKHZvaWQpOgorICAgIG1GY3MoMCkKK3sKK30KKworb3RFcnJvciBFbmNvZGVyOjpJbml0KEJ1ZmZlcldyaXRlSXRlcmF0b3IgJmFJdGVyYXRvcikKK3sKKyAgICBtRmNzID0ga0luaXRGY3M7CisKKyAgICByZXR1cm4gYUl0ZXJhdG9yLldyaXRlQnl0ZShrRmxhZ1NlcXVlbmNlKTsKK30KKworb3RFcnJvciBFbmNvZGVyOjpFbmNvZGUodWludDhfdCBhSW5CeXRlLCBCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBpZiAoSGRsY0J5dGVOZWVkc0VzY2FwZShhSW5CeXRlKSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhSXRlcmF0b3IuQ2FuV3JpdGUoMikgLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgICAgIGFJdGVyYXRvci5Xcml0ZUJ5dGUoa0VzY2FwZVNlcXVlbmNlKTsKKyAgICAgICAgYUl0ZXJhdG9yLldyaXRlQnl0ZShhSW5CeXRlIF4gMHgyMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhSXRlcmF0b3IuV3JpdGVCeXRlKGFJbkJ5dGUpKTsKKyAgICB9CisKKyAgICBtRmNzID0gVXBkYXRlRmNzKG1GY3MsIGFJbkJ5dGUpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBFbmNvZGVyOjpFbmNvZGUoY29uc3QgdWludDhfdCAqYUluQnVmLCB1aW50MTZfdCBhSW5MZW5ndGgsIEJ1ZmZlcldyaXRlSXRlcmF0b3IgJmFJdGVyYXRvcikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBCdWZmZXJXcml0ZUl0ZXJhdG9yIG9sZEl0ZXJhdG9yKGFJdGVyYXRvcik7CisgICAgdWludDE2X3Qgb2xkRmNzID0gbUZjczsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYUluTGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRW5jb2RlKGFJbkJ1ZltpXSwgYUl0ZXJhdG9yKSk7CisgICAgfQorCitleGl0OgorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBhSXRlcmF0b3IgPSBvbGRJdGVyYXRvcjsKKyAgICAgICAgbUZjcyA9IG9sZEZjczsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgRW5jb2Rlcjo6RmluYWxpemUoQnVmZmVyV3JpdGVJdGVyYXRvciAmYUl0ZXJhdG9yKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIEJ1ZmZlcldyaXRlSXRlcmF0b3Igb2xkSXRlcmF0b3IoYUl0ZXJhdG9yKTsKKyAgICB1aW50MTZfdCBvbGRGY3MgPSBtRmNzOworICAgIHVpbnQxNl90IGZjcyA9IG1GY3M7CisKKyAgICBmY3MgXj0gMHhmZmZmOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEVuY29kZShmY3MgJiAweGZmLCBhSXRlcmF0b3IpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gRW5jb2RlKGZjcyA+PiA4LCBhSXRlcmF0b3IpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhSXRlcmF0b3IuV3JpdGVCeXRlKGtGbGFnU2VxdWVuY2UpKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgYUl0ZXJhdG9yID0gb2xkSXRlcmF0b3I7CisgICAgICAgIG1GY3MgPSBvbGRGY3M7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitEZWNvZGVyOjpEZWNvZGVyKHVpbnQ4X3QgKmFPdXRCdWYsIHVpbnQxNl90IGFPdXRMZW5ndGgsIEZyYW1lSGFuZGxlciBhRnJhbWVIYW5kbGVyLCBFcnJvckhhbmRsZXIgYUVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAgdm9pZCAqYUNvbnRleHQpOgorICAgIG1TdGF0ZShrU3RhdGVOb1N5bmMpLAorICAgIG1GcmFtZUhhbmRsZXIoYUZyYW1lSGFuZGxlciksCisgICAgbUVycm9ySGFuZGxlcihhRXJyb3JIYW5kbGVyKSwKKyAgICBtQ29udGV4dChhQ29udGV4dCksCisgICAgbU91dEJ1ZihhT3V0QnVmKSwKKyAgICBtT3V0T2Zmc2V0KDApLAorICAgIG1PdXRMZW5ndGgoYU91dExlbmd0aCksCisgICAgbUZjcygwKQoreworfQorCit2b2lkIERlY29kZXI6OkRlY29kZShjb25zdCB1aW50OF90ICphSW5CdWYsIHVpbnQxNl90IGFJbkxlbmd0aCkKK3sKKyAgICB1aW50OF90IGJ5dGU7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFJbkxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgYnl0ZSA9IGFJbkJ1ZltpXTsKKworICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIGtTdGF0ZU5vU3luYzoKKyAgICAgICAgICAgIGlmIChieXRlID09IGtGbGFnU2VxdWVuY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlU3luYzsKKyAgICAgICAgICAgICAgICBtT3V0T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBtRmNzID0ga0luaXRGY3M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1N0YXRlU3luYzoKKyAgICAgICAgICAgIHN3aXRjaCAoYnl0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Uga0VzY2FwZVNlcXVlbmNlOgorICAgICAgICAgICAgICAgIG1TdGF0ZSA9IGtTdGF0ZUVzY2FwZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Uga0ZsYWdTZXF1ZW5jZToKKworICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBmcmFtZXMgd2hpY2ggYXJlIHNtYWxsZXIKKyAgICAgICAgICAgICAgICAvLyB0aGFuIHRoZSBzaXplIG9mIHRoZSBDUkMgY2hlY2suCisgICAgICAgICAgICAgICAgaWYgKG1PdXRPZmZzZXQgPiBzaXplb2YodWludDE2X3QpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1GY3MgPT0ga0dvb2RGY3MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1GcmFtZUhhbmRsZXIobUNvbnRleHQsIG1PdXRCdWYsIG1PdXRPZmZzZXQgLSBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtRXJyb3JIYW5kbGVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1FcnJvckhhbmRsZXIobUNvbnRleHQsIE9UX0VSUk9SX1BBUlNFLCBtT3V0QnVmLCBtT3V0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1PdXRPZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIG1GY3MgPSBrSW5pdEZjczsKKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtT3V0T2Zmc2V0IDwgbU91dExlbmd0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1GY3MgPSBVcGRhdGVGY3MobUZjcywgYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgIG1PdXRCdWZbbU91dE9mZnNldCsrXSA9IGJ5dGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtRXJyb3JIYW5kbGVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1FcnJvckhhbmRsZXIobUNvbnRleHQsIE9UX0VSUk9SX05PX0JVRlMsIG1PdXRCdWYsIG1PdXRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbVN0YXRlID0ga1N0YXRlTm9TeW5jOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0ZUVzY2FwZWQ6CisgICAgICAgICAgICBpZiAobU91dE9mZnNldCA8IG1PdXRMZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnl0ZSBePSAweDIwOworICAgICAgICAgICAgICAgIG1GY3MgPSBVcGRhdGVGY3MobUZjcywgYnl0ZSk7CisgICAgICAgICAgICAgICAgbU91dEJ1ZlttT3V0T2Zmc2V0KytdID0gYnl0ZTsKKyAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVTeW5jOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtRXJyb3JIYW5kbGVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtRXJyb3JIYW5kbGVyKG1Db250ZXh0LCBPVF9FUlJPUl9OT19CVUZTLCBtT3V0QnVmLCBtT3V0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtU3RhdGUgPSBrU3RhdGVOb1N5bmM7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBIZGxjCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUCmRpZmYgLS1naXQgYS9zcmMvbmNwL2hkbGMuaHBwIGIvc3JjL25jcC9oZGxjLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjA5Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9oZGxjLmhwcApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIGFuIEhETEMtbGl0ZSBlbmNvZGVyIGFuZCBkZWNvZGVyLgorICovCisKKyNpZm5kZWYgSERMQ19IUFBfCisjZGVmaW5lIEhETENfSFBQXworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworCisvKioKKyAqIEBuYW1lc3BhY2Ugb3Q6OkhkbGMKKyAqCisgKiBAYnJpZWYKKyAqICAgVGhpcyBuYW1lc3BhY2UgaW5jbHVkZXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBIRExDLWxpdGUgZW5jb2RlciBhbmQgZGVjb2Rlci4KKyAqCisgKi8KK25hbWVzcGFjZSBIZGxjIHsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIEhETEMtbGl0ZSBlbmNvZGVyLgorICoKKyAqLworY2xhc3MgRW5jb2RlcgoreworcHVibGljOgorCisgICAgLyoqCisgICAgICogVGhpcyBjbGFzcyBkZWZpbmVzIGEgd3JpdGUgaXRlcmF0b3IgaW50byBhIGJ1ZmZlciB1c2VkIGJ5IEVuY29kZXIuCisgICAgICoKKyAgICAgKiBIZGxjIHVzZXJzIHNob3VsZCBzdWItY2xhc3MgdGhpcyB0byBhZGQgdGhlIGFjdHVhbCBidWZmZXIgc3BhY2UuCisgICAgICovCisgICAgY2xhc3MgQnVmZmVyV3JpdGVJdGVyYXRvcgorICAgIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIHdyaXRlcyBhIGJ5dGUgdG8gdGhlIGJ1ZmZlciBhbmQgdXBkYXRlcyB0aGUgaXRlcmF0b3IgKGlmIHNwYWNlIGlzIGF2YWlsYWJsZSkuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHdyb3RlIHRoZSBieXRlIGFuZCB1cGRhdGVzIHRoZSBpdGVyYXRvci4KKyAgICAgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlLgorICAgICAgICAgKgorICAgICAgICAgKi8KKyAgICAgICAgb3RFcnJvciBXcml0ZUJ5dGUodWludDhfdCBhQnl0ZSk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGVyZSBpcyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIHdyaXRlIEBwIGFXcml0ZUxlbmd0aCBieXRlcy4KKyAgICAgICAgICoKKyAgICAgICAgICogcGFyYW1baW5dIGFXcml0ZUxlbmd0aCAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR2YWwgdHJ1ZSAgICAgICAgICAgICAgICAgRW5vdWdoIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gd3JpdGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCisgICAgICAgICAqIEByZXR2YWwgZmFsc2UgICAgICAgICAgICAgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSB0byB3cml0ZSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGJvb2wgQ2FuV3JpdGUodWludDE2X3QgYVdyaXRlTGVuZ3RoKSBjb25zdDsKKworICAgIHByb3RlY3RlZDoKKworICAgICAgICBCdWZmZXJXcml0ZUl0ZXJhdG9yKHZvaWQpOyAgIC8vLzwgUHJvdGVjdGVkIGNvbnN0cnVjdG9yIHRvIGVuc3VyZSBubyBkaXJlY3QgaW5zdGFudGlhdGlvbi4KKworICAgICAgICB1aW50OF90ICAqbVdyaXRlUG9pbnRlcjsgICAgIC8vLzwgQSBwb2ludGVyIHRvIGN1cnJlbnQgd3JpdGUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgdWludDE2X3QgIG1SZW1haW5pbmdMZW5ndGg7ICAvLy88IE51bWJlciBvZiByZW1haW5pbmcgYnl0ZXMgYXZhaWxhYmxlIHRvIHdyaXRlLgorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKi8KKyAgICBFbmNvZGVyKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYmVnaW5zIGFuIEhETEMgZnJhbWUgYW5kIHB1dHMgdGhlIGluaXRpYWwgYnl0ZXMgaW50byBhIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gQHAgYUl0ZXJhdG9yLgorICAgICAqCisgICAgICogQHBhcmFtW2lub3V0XSBhSXRlcmF0b3IgICAgICBBIHJlZmVyZW5jZSB0byBhIGJ1ZmZlciB3cml0ZSBpdGVyYXRvci4gT24gc3VjY2Vzc2Z1bCBleGl0LCB0aGUgaXRlcmF0b3IgaXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIEhETEMgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBzdGFydCB0aGUgSERMQyBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5pdChCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5jb2RlcyBhIHNpbmdsZSBieXRlIGludG8gYSBidWZmZXIgYXQgQHAgYUl0ZXJhdG9yLgorICAgICAqCisgICAgICogSWYgdGhlcmUgaXMgbm8gc3BhY2UgdG8gYWRkIHRoZSBieXRlLCB0aGUgd3JpdGUgaXRlcmF0b3IgcmVtYWlucyB0aGUgc2FtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gICAgYUluQnl0ZSAgICAgICAgQSBieXRlIHRvIGVuY29kZSBhbmQgYWRkLgorICAgICAqIEBwYXJhbVtpbm91dF0gYUl0ZXJhdG9yICAgICAgQSByZWZlcmVuY2UgdG8gYSB3cml0ZSBidWZmZXIgaXRlcmF0b3IuIE9uIHN1Y2Nlc3NmdWwgZXhpdCwgdGhlIGl0ZXJhdG9yIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgIFN1Y2Nlc3NmdWxseSBlbmNvZGVkIGFuZCBhZGRlZCB0aGUgYnl0ZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGVuY29kZSBhbmQgYWRkIHRoZSBieXRlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBFbmNvZGUodWludDhfdCBhSW5CeXRlLCBCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgZnJhbWUgaW50byBhIGJ1ZmZlciBhdCBAcCBhSXRlcmF0b3IuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHN1Y2Nlc3Mgb25seSBpZiB0aGVyZSBpcyBzcGFjZSBpbiBidWZmZXIgdG8gZW5jb2RlIHRoZSBlbnRpcmUgZnJhbWUuIElmIHRoZXJlIGlzIG5vIHNwYWNlCisgICAgICogdG8gZW5jb2RlIHRoZSBlbnRpcmUgZnJhbWUsIHRoZSB3cml0ZSBpdGVyYXRvciByZW1haW5zIHRoZSBzYW1lLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgICBhSW5CdWYgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICAgIGFJbkxlbmd0aCAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gQHAgYUluQnVmIHRvIGVuY29kZS4KKyAgICAgKiBAcGFyYW1baW5vdXRdIGFJdGVyYXRvciAgICAgIEEgcmVmZXJlbmNlIHRvIGEgd3JpdGUgYnVmZmVyIGl0ZXJhdG9yLiBPbiBzdWNjZXNzZnVsIGV4aXQsIHRoZSBpdGVyYXRvciBpcyB1cGRhdGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5jb2RlZCB0aGUgSERMQyBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGVuY29kZSB0aGUgSERMQyBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgRW5jb2RlKGNvbnN0IHVpbnQ4X3QgKmFJbkJ1ZiwgdWludDE2X3QgYUluTGVuZ3RoLCBCdWZmZXJXcml0ZUl0ZXJhdG9yICZhSXRlcmF0b3IpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgZmluYWxpemVzIGFuIEhETEMgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5vdXRdIGFJdGVyYXRvciAgICAgIEEgcmVmZXJlbmNlIHRvIGEgd3JpdGUgYnVmZmVyIGl0ZXJhdG9yLiBPbiBzdWNjZXNzZnVsIGV4aXQsIHRoZSBpdGVyYXRvciBpcyB1cGRhdGVkLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgZW5kZWQgdGhlIEhETEMgZnJhbWUuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT19CVUZTICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBlbmQgdGhlIEhETEMgZnJhbWUuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIEZpbmFsaXplKEJ1ZmZlcldyaXRlSXRlcmF0b3IgJmFJdGVyYXRvcik7CisKK3ByaXZhdGU6CisgICAgdWludDE2X3QgbUZjczsKK307CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBIRExDLWxpdGUgZGVjb2Rlci4KKyAqCisgKi8KK2NsYXNzIERlY29kZXIKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY2FsbGVkIHdoZW4gYSBjb21wbGV0ZSBmcmFtZSBoYXMgYmVlbiBmb3JtZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhQ29udGV4dCAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lTGVuZ3RoICBUaGUgZnJhbWUgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqRnJhbWVIYW5kbGVyKSh2b2lkICphQ29udGV4dCwgdWludDhfdCAqYUZyYW1lLCB1aW50MTZfdCBhRnJhbWVMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIGNhbGxlZCB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFDb250ZXh0ICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbVtpbl0gIGFFcnJvciAgICAgICAgQW4gZXJyb3IgY29kZSBkZXNjcmliaW5nIHRoZSBlcnJvci4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZnJhbWUuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lTGVuZ3RoICBUaGUgZnJhbWUgbGVuZ3RoIGluIGJ5dGVzLgorICAgICAqCisgICAgICovCisgICAgdHlwZWRlZiB2b2lkICgqRXJyb3JIYW5kbGVyKSh2b2lkICphQ29udGV4dCwgb3RFcnJvciBhRXJyb3IsIHVpbnQ4X3QgKmFGcmFtZSwgdWludDE2X3QgYUZyYW1lTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIGRlY29kZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhT3V0QnVmICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYU91dExlbmd0aCAgICAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBpbiBieXRlcy4KKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVIYW5kbGVyICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgY29tcGxldGUgZnJhbWUgaXMgcmVjZWl2ZWQuCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgQSBwb2ludGVyIHRvIGFyYml0cmFyeSBjb250ZXh0IGluZm9ybWF0aW9uLgorICAgICAqCisgICAgICovCisgICAgRGVjb2Rlcih1aW50OF90ICphT3V0QnVmLCB1aW50MTZfdCBhT3V0TGVuZ3RoLCBGcmFtZUhhbmRsZXIgYUZyYW1lSGFuZGxlciwgRXJyb3JIYW5kbGVyIGFFcnJvckhhbmRsZXIsCisgICAgICAgICAgICB2b2lkICphQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzdHJlYW1zIGJ5dGVzIGludG8gdGhlIGRlY29kZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5CdWYgICAgIEEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFJbkxlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyBpbiBAcCBhSW5CdWYuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIERlY29kZShjb25zdCB1aW50OF90ICphSW5CdWYsIHVpbnQxNl90IGFJbkxlbmd0aCk7CisKK3ByaXZhdGU6CisgICAgZW51bSBTdGF0ZQorICAgIHsKKyAgICAgICAga1N0YXRlTm9TeW5jID0gMCwKKyAgICAgICAga1N0YXRlU3luYywKKyAgICAgICAga1N0YXRlRXNjYXBlZCwKKyAgICB9OworICAgIFN0YXRlIG1TdGF0ZTsKKworICAgIEZyYW1lSGFuZGxlciBtRnJhbWVIYW5kbGVyOworICAgIEVycm9ySGFuZGxlciBtRXJyb3JIYW5kbGVyOworICAgIHZvaWQgKm1Db250ZXh0OworCisgICAgdWludDhfdCAqbU91dEJ1ZjsKKyAgICB1aW50MTZfdCBtT3V0T2Zmc2V0OworICAgIHVpbnQxNl90IG1PdXRMZW5ndGg7CisKKyAgICB1aW50MTZfdCBtRmNzOworfTsKKworfSAgLy8gbmFtZXNwYWNlIEhkbGMKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgIC8vIEhETENfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3BfYmFzZS5jcHAgYi9zcmMvbmNwL25jcF9iYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTE4MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9uY3BfYmFzZS5jcHAKQEAgLTAsMCArMSw3NTg3IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgU3BpbmVsIGludGVyZmFjZSB0byB0aGUgT3BlblRocmVhZCBzdGFjay4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgIm5jcF9iYXNlLmhwcCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSA8b3BlbnRocmVhZC90bWZfcHJveHkuaD4KKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorI2luY2x1ZGUgPG9wZW50aHJlYWQvYm9yZGVyX3JvdXRlci5oPgorI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyNpbmNsdWRlIDxtZXNoY29wL2NvbW1pc3Npb25lci5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvZGlhZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvaWNtcDYuaD4KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyNpbmNsdWRlIDxvcGVudGhyZWFkL2phbV9kZXRlY3Rpb24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9uY3AuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2lmIE9QRU5USFJFQURfRlRECisjaW5jbHVkZSA8b3BlbnRocmVhZC90aHJlYWRfZnRkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vbWlzYy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2LmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworI2RlZmluZSBOQ1BfSU5WQUxJRF9TQ0FOX0NIQU5ORUwgICAgICAgICAgICAgICgtMSkKKworI2RlZmluZSBOQ1BfQ0hBTkdFRF9QTEFURk9STV9SRVNFVCAgICAgICAgICAgICgxVSA8PCAzMSkKKyNkZWZpbmUgTkNQX0NIQU5HRURfVEhSRUFEX09OX01FU0hfTkVUUyAgICAgICAoMVUgPDwgMzApCisjZGVmaW5lIE5DUF9DSEFOR0VEX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMgICAgKDFVIDw8IDI5KQorCisjZGVmaW5lIFJTU0lfT1ZFUlJJREVfRElTQUJMRUQgICAgICAgIDEyNyAvLyBVc2VkIGZvciBQUk9QX01BQ19XSElURUxJU1QKKworI2RlZmluZSBJR05PUkVfUkVUVVJOX1ZBTFVFKHMpICAgICAgICBkbyB7IGlmIChzKXt9IH0gd2hpbGUgKDApCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IENvbW1hbmQvUHJvcGVydHkgSnVtcCBUYWJsZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkobmFtZSkgIHsgU1BJTkVMX0NNRF8jI25hbWUsICZOY3BCYXNlOjpDb21tYW5kSGFuZGxlcl8jI25hbWUgfQorCitjb25zdCBOY3BCYXNlOjpDb21tYW5kSGFuZGxlckVudHJ5IE5jcEJhc2U6Om1Db21tYW5kSGFuZGxlclRhYmxlW10gPQoreworICAgIE5DUF9DTURfSEFORExFUl9FTlRSWShOT09QKSwKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoUkVTRVQpLAorICAgIE5DUF9DTURfSEFORExFUl9FTlRSWShQUk9QX1ZBTFVFX0dFVCksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKFBST1BfVkFMVUVfU0VUKSwKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoUFJPUF9WQUxVRV9JTlNFUlQpLAorICAgIE5DUF9DTURfSEFORExFUl9FTlRSWShQUk9QX1ZBTFVFX1JFTU9WRSksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKE5FVF9TQVZFKSwKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoTkVUX0NMRUFSKSwKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoTkVUX1JFQ0FMTCksCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKyAgICBOQ1BfQ01EX0hBTkRMRVJfRU5UUlkoUEVFSyksCisgICAgTkNQX0NNRF9IQU5ETEVSX0VOVFJZKFBPS0UpLAorI2VuZGlmCit9OworCisjZGVmaW5lIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKG5hbWUpICAgICAgICAgICAgICAgICB7IFNQSU5FTF9QUk9QXyMjbmFtZSwgJk5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl8jI25hbWUgfQorI2RlZmluZSBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QobmFtZSwgbWV0aG9kKSAgeyBTUElORUxfUFJPUF8jI25hbWUsICZOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfIyNtZXRob2QgfQorCitjb25zdCBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJFbnRyeSBOY3BCYXNlOjptR2V0UHJvcGVydHlIYW5kbGVyVGFibGVbXSA9Cit7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTEFTVF9TVEFUVVMpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBST1RPQ09MX1ZFUlNJT04pLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElOVEVSRkFDRV9UWVBFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShWRU5ET1JfSUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKENBUFMpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5DUF9WRVJTSU9OKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShJTlRFUkZBQ0VfQ09VTlQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBPV0VSX1NUQVRFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShIV0FERFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKExPQ0spLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEhPU1RfUE9XRVJfU1RBVEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9FTkFCTEVEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShQSFlfRlJFUSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX0NIQU5fU1VQUE9SVEVEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShQSFlfQ0hBTiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX1JTU0kpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9UWF9QT1dFUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX1JYX1NFTlNJVElWSVRZKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfU0NBTl9TVEFURSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NDQU5fTUFTSyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NDQU5fUEVSSU9EKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfMTVfNF9QQU5JRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDXzE1XzRfTEFERFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ18xNV80X1NBRERSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfUkFXX1NUUkVBTV9FTkFCTEVEKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfUFJPTUlTQ1VPVVNfTU9ERSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0VYVEVOREVEX0FERFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19EQVRBX1BPTExfUEVSSU9EKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfU0FWRUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9JRl9VUCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1NUQUNLX1VQKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfUk9MRSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX05FVFdPUktfTkFNRSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1hQQU5JRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX01BU1RFUl9LRVkpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1BBUlRJVElPTl9JRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTEVBREVSX0FERFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9QQVJFTlQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ORUlHSEJPUl9UQUJMRSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0xFQURFUl9SSUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9MRUFERVJfV0VJR0hUKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX05FVFdPUktfREFUQSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEpLAorI2VuZGlmCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfTEVBREVSX05FVFdPUktfREFUQSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1NUQUJMRV9MRUFERVJfTkVUV09SS19EQVRBKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfT0ZGX01FU0hfUk9VVEVTKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQVNTSVNUSU5HX1BPUlRTKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19XSElURUxJU1QpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19XSElURUxJU1RfRU5BQkxFRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0JMQUNLTElTVCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0JMQUNLTElTVF9FTkFCTEVEKSwKKyNlbmRpZgorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9NT0RFKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQ0hJTERfVElNRU9VVCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JMT0MxNiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX09OX01FU0hfTkVUUyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSVBWNl9NTF9QUkVGSVgpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfTUxfQUREUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSVBWNl9MTF9BRERSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShJUFY2X0FERFJFU1NfVEFCTEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfUk9VVEVfVEFCTEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfSUNNUF9QSU5HX09GRkxPQUQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRyksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9QQU5JRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoU1RSRUFNX05FVCksCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQ0hJTERfVEFCTEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9MT0NBTF9MRUFERVJfV0VJR0hUKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX1BTS0MpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9DSElMRF9DT1VOVF9NQVgpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUiksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9FTkFCTEUpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RFRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9XSU5ET1cpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfQlVTWSksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9ISVNUT1JZX0JJVE1BUCksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfVE1GX1BST1hZX0VOQUJMRUQpLAorI2VuZGlmCisgICAgLy8gTUFDIGNvdW50ZXJzCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX1RPVEFMLCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9BQ0tfUkVRLCAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfQUNLRUQsICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX05PX0FDS19SRVEsICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9EQVRBLCAgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfREFUQV9QT0xMLCAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX0JFQUNPTiwgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9CRUFDT05fUkVRLCAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfT1RIRVIsICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfUEtUX1JFVFJZLCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1BLVF9VTklDQVNULCAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9QS1RfQlJPQURDQVNULCAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfRVJSX0NDQSwgICAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX0VSUl9BQk9SVCwgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfVE9UQUwsICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0RBVEEsICAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9EQVRBX1BPTEwsICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfQkVBQ09OLCAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0JFQUNPTl9SRVEsICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9PVEhFUiwgICAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfRklMVF9XTCwgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0ZJTFRfREEsICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX1BLVF9VTklDQVNULCAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9QS1RfQlJPQURDQVNULCAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfRVJSX0VNUFRZLCAgICAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX0VSUl9VS1dOX05CUiwgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9FUlJfTlZMRF9TQUREUiwgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfRVJSX1NFQ1VSSVRZLCAgICAgTUFDX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX0VSUl9CQURfRkNTLCAgICAgIE1BQ19DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9FUlJfT1RIRVIsICAgICAgICBNQUNfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfUEtUX0RVUCwgICAgICAgICAgTUFDX0NOVFIpLAorICAgIC8vIE5DUCBjb3VudGVycworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX0lQX1NFQ19UT1RBTCwgICAgIE5DUF9DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9UWF9JUF9JTlNFQ19UT1RBTCwgICBOQ1BfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfVFhfSVBfRFJPUFBFRCwgICAgICAgTkNQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1JYX0lQX1NFQ19UT1RBTCwgICAgIE5DUF9DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9JUF9JTlNFQ19UT1RBTCwgICBOQ1BfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfSVBfRFJPUFBFRCwgICAgICAgTkNQX0NOVFIpLAorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSX0VOVFJZX01FVEhPRChDTlRSX1RYX1NQSU5FTF9UT1RBTCwgICAgIE5DUF9DTlRSKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWV9NRVRIT0QoQ05UUl9SWF9TUElORUxfVE9UQUwsICAgICBOQ1BfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfUlhfU1BJTkVMX0VSUiwgICAgICAgTkNQX0NOVFIpLAorICAgIC8vIElQIGNvdW50ZXJzCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfSVBfVFhfU1VDQ0VTUywgICAgICAgSVBfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfSVBfUlhfU1VDQ0VTUywgICAgICAgSVBfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfSVBfVFhfRkFJTFVSRSwgICAgICAgSVBfQ05UUiksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUllfTUVUSE9EKENOVFJfSVBfUlhfRkFJTFVSRSwgICAgICAgSVBfQ05UUiksCisKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShNU0dfQlVGRkVSX0NPVU5URVJTKSwKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUl9FTlRSWShERUJVR19URVNUX0FTU0VSVCksCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoREVCVUdfTkNQX0xPR19MRVZFTCksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVTVF9MRUdBQ1lfVUxBX1BSRUZJWCksCisjZW5kaWYKK307CisKKyNkZWZpbmUgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkobmFtZSkgIHsgU1BJTkVMX1BST1BfIyNuYW1lLCAmTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyXyMjbmFtZSB9CisKK2NvbnN0IE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlckVudHJ5IE5jcEJhc2U6Om1TZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtdID0KK3sKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShQT1dFUl9TVEFURSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSE9TVF9QT1dFUl9TVEFURSksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoUEhZX0VOQUJMRUQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ18xNV80X1NBRERSKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShTVFJFQU1fUkFXKSwKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShQSFlfVFhfUE9XRVIpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFBIWV9DSEFOKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfUFJPTUlTQ1VPVVNfTU9ERSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NDQU5fTUFTSyksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NDQU5fU1RBVEUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ19TQ0FOX1BFUklPRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDXzE1XzRfUEFOSUQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE1BQ18xNV80X0xBRERSKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfREFUQV9QT0xMX1BFUklPRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1JBV19TVFJFQU1fRU5BQkxFRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX0lGX1VQKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfU1RBQ0tfVVApLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9ST0xFKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfTkVUV09SS19OQU1FKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfWFBBTklEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfTUFTVEVSX0tFWSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9BU1NJU1RJTkdfUE9SVFMpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFNUUkVBTV9ORVRfSU5TRUNVUkUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFNUUkVBTV9ORVQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKElQVjZfTUxfUFJFRklYKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShJUFY2X0lDTVBfUElOR19PRkZMT0FEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1dISVRFTElTVCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1dISVRFTElTVF9FTkFCTEVEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfQkxBQ0tMSVNUKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfQkxBQ0tMSVNUX0VOQUJMRUQpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9FTkFCTEVEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShNQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMpLAorI2VuZGlmCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX01PREUpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKE5FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKERFQlVHX05DUF9MT0dfTEVWRUwpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRyksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0VOQUJMRV9GSUxURVJJTkcpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9QQU5JRCksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9BTExPV19MT0NBTF9ORVRfREFUQV9DSEFOR0UpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVRfUFNLQyksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NISUxEX1RJTUVPVVQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9MT0NBTF9MRUFERVJfV0VJR0hUKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX0NISUxEX0NPVU5UX01BWCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JPVVRFUl9VUEdSQURFX1RIUkVTSE9MRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSKSwKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRCksCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9TVEVFUklOR19EQVRBKSwKKyNlbmRpZgorI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0ZURAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShKQU1fREVURUNUX0VOQUJMRSksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRCksCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoSkFNX0RFVEVDVF9XSU5ET1cpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKEpBTV9ERVRFQ1RfQlVTWSksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfVE1GX1BST1hZX0VOQUJMRUQpLAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9UTUZfUFJPWFlfU1RSRUFNKSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShORVNUX1NUUkVBTV9NRkcpLAorI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVJfRU5UUlkoTkVTVF9MRUdBQ1lfVUxBX1BSRUZJWCksCisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRCksCisjZW5kaWYKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUl9FTlRSWShDTlRSX1JFU0VUKSwKK307CisKKyNkZWZpbmUgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkobmFtZSkgIHsgU1BJTkVMX1BST1BfIyNuYW1lLCAmTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyXyMjbmFtZSB9CisKK2NvbnN0IE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlckVudHJ5IE5jcEJhc2U6Om1JbnNlcnRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtdID0KK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICBOQ1BfSU5TRVJUX1BST1BfSEFORExFUl9FTlRSWShNQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyksCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMpLAorI2VuZGlmCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoSVBWNl9BRERSRVNTX1RBQkxFKSwKKyAgICBOQ1BfSU5TRVJUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQVNTSVNUSU5HX1BPUlRTKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX09GRl9NRVNIX1JPVVRFUyksCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX09OX01FU0hfTkVUUyksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfSU5TRVJUX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfSk9JTkVSUyksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1dISVRFTElTVCksCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0JMQUNLTElTVCksCisjZW5kaWYKK307CisKKyNkZWZpbmUgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkobmFtZSkgIHsgU1BJTkVMX1BST1BfIyNuYW1lLCAmTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyXyMjbmFtZSB9CisKK2NvbnN0IE5jcEJhc2U6OlJlbW92ZVByb3BlcnR5SGFuZGxlckVudHJ5IE5jcEJhc2U6Om1SZW1vdmVQcm9wZXJ0eUhhbmRsZXJUYWJsZVtdID0KK3sKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUl9FTlRSWShNQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyksCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMpLAorI2VuZGlmCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoSVBWNl9BRERSRVNTX1RBQkxFKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX09GRl9NRVNIX1JPVVRFUyksCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoVEhSRUFEX09OX01FU0hfTkVUUyksCisjZW5kaWYKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUl9FTlRSWShUSFJFQURfQVNTSVNUSU5HX1BPUlRTKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX1dISVRFTElTVCksCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVJfRU5UUlkoTUFDX0JMQUNLTElTVCksCisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSX0VOVFJZKFRIUkVBRF9BQ1RJVkVfUk9VVEVSX0lEUyksCisjZW5kaWYKK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IFV0aWxpdHkgRnVuY3Rpb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBzcGluZWxfc3RhdHVzX3QgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhvdEVycm9yIGFFcnJvcikKK3sKKyAgICBzcGluZWxfc3RhdHVzX3QgcmV0OworCisgICAgc3dpdGNoIChhRXJyb3IpCisgICAgeworICAgIGNhc2UgT1RfRVJST1JfTk9ORToKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0ZBSUxFRDoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19GQUlMVVJFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRFJPUDoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19EUk9QUEVEOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9fQlVGUzoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19OT01FTTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0JVU1k6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfQlVTWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX1BBUlNFOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfSU5WQUxJRF9BUkdTOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9OT1RfSU1QTEVNRU5URUQ6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX0lOVkFMSURfU1RBVEU6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0VSUk9SX05PX0FDSzoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19OT19BQ0s7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9FUlJPUl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX0NDQV9GQUlMVVJFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfQUxSRUFEWToKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19BTFJFQURZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX0lURU1fTk9UX0ZPVU5EOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfRVJST1JfRElTQUJMRURfRkVBVFVSRToKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1A7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVW5rbm93biBlcnJvciBjb2RlLiBXcmFwIGl0IGFzIGEgU3BpbmVsIHN0YXR1cyBhbmQgcmV0dXJuIHRoYXQuCisgICAgICAgIHJldCA9IHN0YXRpY19jYXN0PHNwaW5lbF9zdGF0dXNfdD4oU1BJTkVMX1NUQVRVU19TVEFDS19OQVRJVkVfX0JFR0lOICsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFFcnJvcikpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3BpbmVsX3N0YXR1c190IFJlc2V0UmVhc29uVG9TcGluZWxTdGF0dXMob3RQbGF0UmVzZXRSZWFzb24gYVJlYXNvbikKK3sKKyAgICBzcGluZWxfc3RhdHVzX3QgcmV0OworCisgICAgc3dpdGNoIChhUmVhc29uKQorICAgIHsKKyAgICBjYXNlIE9UX1BMQVRfUkVTRVRfUkVBU09OX1BPV0VSX09OOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX1BPV0VSX09OOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUExBVF9SRVNFVF9SRUFTT05fRVhURVJOQUw6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfRVhURVJOQUw7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9TT0ZUV0FSRToKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19SRVNFVF9TT0ZUV0FSRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX1BMQVRfUkVTRVRfUkVBU09OX0ZBVUxUOgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX0ZBVUxUOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUExBVF9SRVNFVF9SRUFTT05fQ1JBU0g6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfQ1JBU0g7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9BU1NFUlQ6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfQVNTRVJUOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfUExBVF9SRVNFVF9SRUFTT05fV0FUQ0hET0c6CisgICAgICAgIHJldCA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfV0FUQ0hET0c7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9QTEFUX1JFU0VUX1JFQVNPTl9PVEhFUjoKKyAgICAgICAgcmV0ID0gU1BJTkVMX1NUQVRVU19SRVNFVF9PVEhFUjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXQgPSBTUElORUxfU1RBVFVTX1JFU0VUX1VOS05PV047CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1aW50OF90IEJvcmRlclJvdXRlckNvbmZpZ1RvRmxhZ0J5dGUoY29uc3Qgb3RCb3JkZXJSb3V0ZXJDb25maWcgJmFDb25maWcpCit7CisgICAgdWludDhfdCBmbGFncygwKTsKKworICAgIGlmIChhQ29uZmlnLm1QcmVmZXJyZWQpCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfTkVUX0ZMQUdfUFJFRkVSUkVEOworICAgIH0KKworICAgIGlmIChhQ29uZmlnLm1TbGFhYykKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9ORVRfRkxBR19TTEFBQzsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tRGhjcCkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9ORVRfRkxBR19ESENQOworICAgIH0KKworICAgIGlmIChhQ29uZmlnLm1EZWZhdWx0Um91dGUpCisgICAgeworICAgICAgICBmbGFncyB8PSBTUElORUxfTkVUX0ZMQUdfREVGQVVMVF9ST1VURTsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tQ29uZmlndXJlKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX05FVF9GTEFHX0NPTkZJR1VSRTsKKyAgICB9CisKKyAgICBpZiAoYUNvbmZpZy5tT25NZXNoKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX05FVF9GTEFHX09OX01FU0g7CisgICAgfQorCisgICAgZmxhZ3MgfD0gKGFDb25maWcubVByZWZlcmVuY2UgPDwgU1BJTkVMX05FVF9GTEFHX1BSRUZFUkVOQ0VfT0ZGU0VUKTsKKworICAgIHJldHVybiBmbGFnczsKK30KKworc3RhdGljIHVpbnQ4X3QgTGlua0ZsYWdzVG9GbGFnQnl0ZShib29sIGFSeE9uV2hlbklkbGUsIGJvb2wgYVNlY3VyZURhdGFSZXF1ZXN0cywgYm9vbCBhRGV2aWNlVHlwZSwgYm9vbCBhTmV0d29ya0RhdGEpCit7CisgICAgdWludDhfdCBmbGFncygwKTsKKworICAgIGlmIChhUnhPbldoZW5JZGxlKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX1RIUkVBRF9NT0RFX1JYX09OX1dIRU5fSURMRTsKKyAgICB9CisKKyAgICBpZiAoYVNlY3VyZURhdGFSZXF1ZXN0cykKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9USFJFQURfTU9ERV9TRUNVUkVfREFUQV9SRVFVRVNUOworICAgIH0KKworICAgIGlmIChhRGV2aWNlVHlwZSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9USFJFQURfTU9ERV9GVUxMX0ZVTkNUSU9OX0RFVjsKKyAgICB9CisKKyAgICBpZiAoYU5ldHdvcmtEYXRhKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX1RIUkVBRF9NT0RFX0ZVTExfTkVUV09SS19EQVRBOworICAgIH0KKworICAgIHJldHVybiBmbGFnczsKK30KKworc3RhdGljIHVpbnQ4X3QgRXh0ZXJuYWxSb3V0ZVByZWZlcmVuY2VUb0ZsYWdCeXRlKGludCBhUHJlZmVyZW5jZSkKK3sKKyAgICB1aW50OF90IGZsYWdzOworCisgICAgc3dpdGNoIChhUHJlZmVyZW5jZSkKKyAgICB7CisgICAgY2FzZSBPVF9ST1VURV9QUkVGRVJFTkNFX0xPVzoKKyAgICAgICAgZmxhZ3MgPSBTUElORUxfUk9VVEVfUFJFRkVSRU5DRV9MT1c7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ST1VURV9QUkVGRVJFTkNFX01FRDoKKyAgICAgICAgZmxhZ3MgPSBTUElORUxfUk9VVEVfUFJFRkVSRU5DRV9NRURJVU07CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ST1VURV9QUkVGRVJFTkNFX0hJR0g6CisgICAgICAgIGZsYWdzID0gU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfSElHSDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBmbGFncyA9IFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX01FRElVTTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZsYWdzOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCitzdGF0aWMgaW50IEZsYWdCeXRlVG9FeHRlcm5hbFJvdXRlUHJlZmVyZW5jZSh1aW50OF90IGFGbGFncykKK3sKKyAgICBpbnQgcm91dGVfcHJlZmVyZW5jZSA9IDA7CisKKyAgICBzd2l0Y2ggKGFGbGFncyAmIFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX01BU0spCisgICAgeworICAgIGNhc2UgU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfSElHSDoKKyAgICAgICAgcm91dGVfcHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfSElHSDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX01FRElVTToKKyAgICAgICAgcm91dGVfcHJlZmVyZW5jZSA9IE9UX1JPVVRFX1BSRUZFUkVOQ0VfTUVEOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfTE9XOgorICAgICAgICByb3V0ZV9wcmVmZXJlbmNlID0gT1RfUk9VVEVfUFJFRkVSRU5DRV9MT1c7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByb3V0ZV9wcmVmZXJlbmNlOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBDbGFzcyBCb2lsZXJwbGF0ZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOY3BCYXNlICpOY3BCYXNlOjpzTmNwSW5zdGFuY2UgPSBOVUxMOworCitOY3BCYXNlOjpOY3BCYXNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSk6CisgICAgbUluc3RhbmNlKGFJbnN0YW5jZSksCisgICAgbVR4RnJhbWVCdWZmZXIobVR4QnVmZmVyLCBzaXplb2YobVR4QnVmZmVyKSksCisgICAgbUxhc3RTdGF0dXMoU1BJTkVMX1NUQVRVU19PSyksCisgICAgbVN1cHBvcnRlZENoYW5uZWxNYXNrKE9UX1JBRElPX1NVUFBPUlRFRF9DSEFOTkVMUyksCisgICAgbUNoYW5uZWxNYXNrKE9UX1JBRElPX1NVUFBPUlRFRF9DSEFOTkVMUyksCisgICAgbVNjYW5QZXJpb2QoMjAwKSwgLy8gbXMKKyAgICBtRGlzY292ZXJ5U2NhbkpvaW5lckZsYWcoZmFsc2UpLAorICAgIG1EaXNjb3ZlcnlTY2FuRW5hYmxlRmlsdGVyaW5nKGZhbHNlKSwKKyAgICBtRGlzY292ZXJ5U2NhblBhbklkKDB4ZmZmZiksCisgICAgbVVwZGF0ZUNoYW5nZWRQcm9wc1Rhc2soYUluc3RhbmNlLT5tSXA2Lm1UYXNrbGV0U2NoZWR1bGVyLCAmTmNwQmFzZTo6VXBkYXRlQ2hhbmdlZFByb3BzLCB0aGlzKSwKKyAgICBtQ2hhbmdlZEZsYWdzKE5DUF9DSEFOR0VEX1BMQVRGT1JNX1JFU0VUKSwKKyAgICBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuKGZhbHNlKSwKKyAgICBtSG9zdFBvd2VyU3RhdGUoU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfT05MSU5FKSwKKyAgICBtSG9zdFBvd2VyU3RhdGVJblByb2dyZXNzKGZhbHNlKSwKKyAgICBtSG9zdFBvd2VyUmVwbHlGcmFtZVRhZyhOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWcpLAorICAgIG1Ib3N0UG93ZXJTdGF0ZUhlYWRlcigwKSwKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgbVNob3VsZFNpZ25hbEphbVN0YXRlQ2hhbmdlKGZhbHNlKSwKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgICAgbUFsbG93UGVla0RlbGVnYXRlKE5VTEwpLAorICAgIG1BbGxvd1Bva2VEZWxlZ2F0ZShOVUxMKSwKKyNlbmRpZgorICAgIG1Ecm9wcGVkUmVwbHlUaWQoMCksCisgICAgbURyb3BwZWRSZXBseVRpZEJpdFNldCgwKSwKKyAgICBtTmV4dEV4cGVjdGVkVGlkKDApLAorICAgIG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UoZmFsc2UpLAorICAgIG1SZXF1aXJlSm9pbkV4aXN0aW5nTmV0d29yayhmYWxzZSksCisgICAgbUlzUmF3U3RyZWFtRW5hYmxlZChmYWxzZSksCisgICAgbURpc2FibGVTdHJlYW1Xcml0ZShmYWxzZSksCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgbUN1clRyYW5zbWl0VElEKDApLAorICAgIG1DdXJSZWNlaXZlQ2hhbm5lbChPUEVOVEhSRUFEX0NPTkZJR19ERUZBVUxUX0NIQU5ORUwpLAorICAgIG1DdXJTY2FuQ2hhbm5lbChOQ1BfSU5WQUxJRF9TQ0FOX0NIQU5ORUwpLAorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgbUZyYW1pbmdFcnJvckNvdW50ZXIoMCksCisgICAgbVJ4U3BpbmVsRnJhbWVDb3VudGVyKDApLAorICAgIG1SeFNwaW5lbE91dE9mT3JkZXJUaWRDb3VudGVyKDApLAorICAgIG1UeFNwaW5lbEZyYW1lQ291bnRlcigwKSwKKyAgICBtSW5ib3VuZFNlY3VyZUlwRnJhbWVDb3VudGVyKDApLAorICAgIG1JbmJvdW5kSW5zZWN1cmVJcEZyYW1lQ291bnRlcigwKSwKKyAgICBtT3V0Ym91bmRTZWN1cmVJcEZyYW1lQ291bnRlcigwKSwKKyAgICBtT3V0Ym91bmRJbnNlY3VyZUlwRnJhbWVDb3VudGVyKDApLAorICAgIG1Ecm9wcGVkT3V0Ym91bmRJcEZyYW1lQ291bnRlcigwKSwKKyAgICBtRHJvcHBlZEluYm91bmRJcEZyYW1lQ291bnRlcigwKQoreworICAgIGFzc2VydChtSW5zdGFuY2UgIT0gTlVMTCk7CisKKyAgICBzTmNwSW5zdGFuY2UgPSB0aGlzOworCisgICAgbVR4RnJhbWVCdWZmZXIuU2V0RnJhbWVSZW1vdmVkQ2FsbGJhY2soJk5jcEJhc2U6OkhhbmRsZUZyYW1lUmVtb3ZlZEZyb21OY3BCdWZmZXIsIHRoaXMpOworCisgICAgb3RTZXRTdGF0ZUNoYW5nZWRDYWxsYmFjayhtSW5zdGFuY2UsICZOY3BCYXNlOjpIYW5kbGVOZXRpZlN0YXRlQ2hhbmdlZCwgdGhpcyk7CisgICAgb3RJcDZTZXRSZWNlaXZlQ2FsbGJhY2sobUluc3RhbmNlLCAmTmNwQmFzZTo6SGFuZGxlRGF0YWdyYW1Gcm9tU3RhY2ssIHRoaXMpOworICAgIG90SXA2U2V0UmVjZWl2ZUZpbHRlckVuYWJsZWQobUluc3RhbmNlLCB0cnVlKTsKKyAgICBvdExpbmtTZXRQY2FwQ2FsbGJhY2sobUluc3RhbmNlLCAmTmNwQmFzZTo6SGFuZGxlUmF3RnJhbWUsIHN0YXRpY19jYXN0PHZvaWQgKj4odGhpcykpOworICAgIG90SWNtcDZTZXRFY2hvRW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKTsKKworICAgIG1VcGRhdGVDaGFuZ2VkUHJvcHNUYXNrLlBvc3QoKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIG1MZWdhY3lOb2RlRGlkSm9pbiA9IGZhbHNlOworICAgIG1MZWdhY3lIYW5kbGVycyA9IE5VTEw7CisgICAgbWVtc2V0KG1MZWdhY3lVbGFQcmVmaXgsIDAsIHNpemVvZihtTGVnYWN5VWxhUHJlZml4KSk7CisjZW5kaWYKK30KKworTmNwQmFzZSAqTmNwQmFzZTo6R2V0TmNwSW5zdGFuY2Uodm9pZCkKK3sKKyAgICByZXR1cm4gc05jcEluc3RhbmNlOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBPdXRib3VuZCBGcmFtZSBtZXRob2RzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK290RXJyb3IgTmNwQmFzZTo6T3V0Ym91bmRGcmFtZUJlZ2luKHZvaWQpCit7CisgICAgcmV0dXJuIG1UeEZyYW1lQnVmZmVyLkluRnJhbWVCZWdpbigpOworfQorCitvdEVycm9yIE5jcEJhc2U6Ok91dGJvdW5kRnJhbWVGZWVkRGF0YShjb25zdCB1aW50OF90ICphRGF0YUJ1ZmZlciwgdWludDE2X3QgYURhdGFCdWZmZXJMZW5ndGgpCit7CisgICAgcmV0dXJuIG1UeEZyYW1lQnVmZmVyLkluRnJhbWVGZWVkRGF0YShhRGF0YUJ1ZmZlciwgYURhdGFCdWZmZXJMZW5ndGgpOworfQorCitvdEVycm9yIE5jcEJhc2U6Ok91dGJvdW5kRnJhbWVGZWVkTWVzc2FnZShvdE1lc3NhZ2UgKmFNZXNzYWdlKQoreworICAgIHJldHVybiBtVHhGcmFtZUJ1ZmZlci5JbkZyYW1lRmVlZE1lc3NhZ2UoYU1lc3NhZ2UpOworfQorCitvdEVycm9yIE5jcEJhc2U6Ok91dGJvdW5kRnJhbWVFbmQodm9pZCkKK3sKKyAgICByZXR1cm4gbVR4RnJhbWVCdWZmZXIuSW5GcmFtZUVuZCgpOworfQorCitOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgTmNwQmFzZTo6R2V0TGFzdE91dGJvdW5kRnJhbWVUYWcodm9pZCkKK3sKKyAgICByZXR1cm4gbVR4RnJhbWVCdWZmZXIuSW5GcmFtZUdldExhc3RUYWcoKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAordm9pZCBOY3BCYXNlOjpIYW5kbGVUbWZQcm94eVN0cmVhbShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhTG9jYXRvciwgdWludDE2X3QgYVBvcnQsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5jcEJhc2UgKj4oYUNvbnRleHQpLT5IYW5kbGVUbWZQcm94eVN0cmVhbShhTWVzc2FnZSwgYUxvY2F0b3IsIGFQb3J0KTsKK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVUbWZQcm94eVN0cmVhbShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhTG9jYXRvciwgdWludDE2X3QgYVBvcnQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgbGVuZ3RoID0gb3RNZXNzYWdlR2V0TGVuZ3RoKGFNZXNzYWdlKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9UTUZfUFJPWFlfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICBsZW5ndGgKKyAgICAgICAgICAgICAgICApKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZE1lc3NhZ2UoYU1lc3NhZ2UpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgIGFMb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICBhUG9ydAorICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gU2V0IHRoZSBgYU1lc3NhZ2VgIHBvaW50ZXIgdG8gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IGl0IGRvZXMKKyAgICAvLyBub3QgbmVlZCB0byBiZSBmcmVlZCBhdCB0aGUgZXhpdC4gVGhlIGBhTWVzc2FnZWAgaXMgbm93IG93bmVkCisgICAgLy8gYnkgdGhlIE91dGJvdW5kRnJhbWUgYW5kIHdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgZnJhbWUgaXMgZWl0aGVyCisgICAgLy8gc3VjY2Vzc2Z1bGx5IHNlbnQgYW5kIHRoZW4gcmVtb3ZlZCwgb3IgaWYgdGhlIGZyYW1lIGdldHMKKyAgICAvLyBkaXNjYXJkZWQuCisgICAgYU1lc3NhZ2UgPSBOVUxMOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorCisgICAgaWYgKGFNZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKGFNZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFNlbmRMYXN0U3RhdHVzKFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsIFNQSU5FTF9TVEFUVVNfRFJPUFBFRCk7CisgICAgfQorfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBPdXRib3VuZCBEYXRhZ3JhbSBIYW5kbGluZworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZURhdGFncmFtRnJvbVN0YWNrKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHZvaWQgKmFDb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5jcEJhc2UgKj4oYUNvbnRleHQpLT5IYW5kbGVEYXRhZ3JhbUZyb21TdGFjayhhTWVzc2FnZSk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlRGF0YWdyYW1Gcm9tU3RhY2sob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBib29sIGlzU2VjdXJlID0gb3RNZXNzYWdlSXNMaW5rU2VjdXJpdHlFbmFibGVkKGFNZXNzYWdlKTsKKyAgICB1aW50MTZfdCBsZW5ndGggPSBvdE1lc3NhZ2VHZXRMZW5ndGgoYU1lc3NhZ2UpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUyBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgaXNTZWN1cmUgPyBTUElORUxfUFJPUF9TVFJFQU1fTkVUIDogU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSwKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRNZXNzYWdlKGFNZXNzYWdlKSk7CisKKyAgICAvLyBTZXQgdGhlIGBhTWVzc2FnZWAgcG9pbnRlciB0byBOVUxMIHRvIGluZGljYXRlIHRoYXQgaXQgZG9lcworICAgIC8vIG5vdCBuZWVkIHRvIGJlIGZyZWVkIGF0IHRoZSBleGl0LiBUaGUgYGFNZXNzYWdlYCBpcyBub3cgb3duZWQKKyAgICAvLyBieSB0aGUgT3V0Ym91bmRGcmFtZSBhbmQgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSBmcmFtZSBpcyBlaXRoZXIKKyAgICAvLyBzdWNjZXNzZnVsbHkgc2VudCBhbmQgdGhlbiByZW1vdmVkLCBvciBpZiB0aGUgZnJhbWUgZ2V0cworICAgIC8vIGRpc2NhcmRlZC4KKyAgICBhTWVzc2FnZSA9IE5VTEw7CisKKyAgICAvLyBBcHBlbmQgYW55IG1ldGFkYXRhIChyc3NpLCBscWksIGNoYW5uZWwsIGV0YykgaGVyZSEKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKworICAgIGlmIChhTWVzc2FnZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShhTWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBTZW5kTGFzdFN0YXR1cyhTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLCBTUElORUxfU1RBVFVTX0RST1BQRUQpOworICAgICAgICBtRHJvcHBlZE91dGJvdW5kSXBGcmFtZUNvdW50ZXIrKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGlzU2VjdXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0Ym91bmRTZWN1cmVJcEZyYW1lQ291bnRlcisrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbU91dGJvdW5kSW5zZWN1cmVJcEZyYW1lQ291bnRlcisrOworICAgICAgICB9CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBSYXcgZnJhbWUgaGFuZGxpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVSYXdGcmFtZShjb25zdCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwQmFzZSAqPihhQ29udGV4dCktPkhhbmRsZVJhd0ZyYW1lKGFGcmFtZSk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlUmF3RnJhbWUoY29uc3Qgb3RSYWRpb0ZyYW1lICphRnJhbWUpCit7CisgICAgdWludDE2X3QgZmxhZ3MgPSAwOworCisgICAgaWYgKCFtSXNSYXdTdHJlYW1FbmFibGVkKQorICAgIHsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworCisgICAgaWYgKGFGcmFtZS0+bURpZFRYKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX01EX0ZMQUdfVFg7CisgICAgfQorCisgICAgLy8gQXBwZW5kIGZyYW1lIGhlYWRlciBhbmQgZnJhbWUgbGVuZ3RoCisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9SQVcsCisgICAgICAgICAgICBhRnJhbWUtPm1MZW5ndGgKKyAgICAgICAgKSk7CisKKyAgICAvLyBBcHBlbmQgdGhlIGZyYW1lIGNvbnRlbnRzCisgICAgU3VjY2Vzc09yRXhpdChPdXRib3VuZEZyYW1lRmVlZERhdGEoYUZyYW1lLT5tUHNkdSwgYUZyYW1lLT5tTGVuZ3RoKSk7CisKKyAgICAvLyBBcHBlbmQgbWV0YWRhdGEgKHJzc2ksIGV0YykKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUworICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKCAgLy8gUEhZLWRhdGEKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfTlVMTF9TIC8vIEVtcHR5IGZvciBub3cKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyggIC8vIFZlbmRvci1kYXRhCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX05VTExfUyAvLyBFbXB0eSBmb3Igbm93CisgICAgICAgICAgICApLAorICAgICAgICAgICAgYUZyYW1lLT5tUG93ZXIsICAgLy8gVFggUG93ZXIKKyAgICAgICAgICAgIC0xMjgsICAgICAgICAgICAgIC8vIE5vaXNlIEZsb29yIChDdXJyZW50bHkgdW51c2VkKQorICAgICAgICAgICAgZmxhZ3MgICAgICAgICAgICAgLy8gRmxhZ3MKKworICAgICAgICAgICAvLyBTa2lwIFBIWSBhbmQgVmVuZG9yIGRhdGEgZm9yIG5vdworICAgICAgICApKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IFNjYW4gUmVzdWx0cyBHbHVlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlQWN0aXZlU2NhblJlc3VsdF9KdW1wKG90QWN0aXZlU2NhblJlc3VsdCAqYVJlc3VsdCwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwQmFzZSAqPihhQ29udGV4dCktPkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQoYVJlc3VsdCk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlQWN0aXZlU2NhblJlc3VsdChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGlmIChhUmVzdWx0KQorICAgIHsKKyAgICAgICAgdWludDhfdCBmbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFSZXN1bHQtPm1WZXJzaW9uIDw8IFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfVkVSU0lPTl9TSElGVCk7CisKKyAgICAgICAgaWYgKGFSZXN1bHQtPm1Jc0pvaW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBTUElORUxfQkVBQ09OX1RIUkVBRF9GTEFHX0pPSU5BQkxFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFSZXN1bHQtPm1Jc05hdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgZmxhZ3MgfD0gU1BJTkVMX0JFQUNPTl9USFJFQURfRkxBR19OQVRJVkU7CisgICAgICAgIH0KKworICAgICAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fQkVBQ09OLAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9TKAorICAgICAgICAgICAgICAgIFNQSU5FTF84MDJfMTVfNF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfVjFfUywKKyAgICAgICAgICAgICAgICBTUElORUxfTkVUX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMl9TCisgICAgICAgICAgICApLAorICAgICAgICAgICAgYVJlc3VsdC0+bUNoYW5uZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5uZWwKKyAgICAgICAgICAgIGFSZXN1bHQtPm1Sc3NpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSU1NJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIm1hYy1sYXllciBkYXRhIgorICAgICAgICAgICAgYVJlc3VsdC0+bUV4dEFkZHJlc3MubTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgbGFkZHIKKyAgICAgICAgICAgIDB4RkZGRiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHNhZGRyLCBub3QgZ2l2ZW4KKyAgICAgICAgICAgIGFSZXN1bHQtPm1QYW5JZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHBhbmlkCisgICAgICAgICAgICBhUmVzdWx0LT5tTHFpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBscWkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAibmV0LWxheWVyIGRhdGEiCisgICAgICAgICAgICBTUElORUxfUFJPVE9DT0xfVFlQRV9USFJFQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICB0eXBlCisgICAgICAgICAgICBmbGFncywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBmbGFncworICAgICAgICAgICAgYVJlc3VsdC0+bU5ldHdvcmtOYW1lLm04LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgbmV0d29yayBuYW1lCisgICAgICAgICAgICBhUmVzdWx0LT5tRXh0ZW5kZWRQYW5JZC5tOCwgT1RfRVhUX1BBTl9JRF9TSVpFLCAgICAgICAgICAgICAgICAgLy8gICAgICB4cGFuaWQKKyAgICAgICAgICAgIGFSZXN1bHQtPm1TdGVlcmluZ0RhdGEubTgsIGFSZXN1bHQtPm1TdGVlcmluZ0RhdGEubUxlbmd0aCAgICAgICAvLyAgICAgIHN0ZWVyaW5nIGRhdGEKKyAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gV2UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIHNjYW4sIHNvIHNlbmQgb3V0CisgICAgICAgIC8vIGEgcHJvcGVydHkgdXBkYXRlIGluZGljYXRpbmcgc3VjaC4KKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fU1RBVEUsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9JRExFCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAvLyBJZiB3ZSBjb3VsZCBub3Qgc2VuZCB0aGUgZW5kIG9mIHNjYW4gaW5kaWNhdG9yIG1lc3NhZ2Ugbm93IChubworICAgICAgICAvLyBidWZmZXIgc3BhY2UpLCB3ZSBzZXQgYG1TaG91bGRTaWduYWxFbmRPZlNjYW5gIHRvIHRydWUgdG8gc2VuZAorICAgICAgICAvLyBpdCBvdXQgd2hlbiBidWZmZXIgc3BhY2UgYmVjb21lcyBhdmFpbGFibGUuCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0X0p1bXAob3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0LCB2b2lkICphQ29udGV4dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxOY3BCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlRW5lcmd5U2NhblJlc3VsdChhUmVzdWx0KTsKK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVFbmVyZ3lTY2FuUmVzdWx0KG90RW5lcmd5U2NhblJlc3VsdCAqYVJlc3VsdCkKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgaWYgKGFSZXN1bHQpCisgICAgeworICAgICAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgU1BJTkVMX1BST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCwKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgIC8vIENoYW5uZWwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TICAgIC8vIFJzc2kKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBhUmVzdWx0LT5tQ2hhbm5lbCwKKyAgICAgICAgICAgIGFSZXN1bHQtPm1NYXhSc3NpCisgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBzY2FuLCBzbyBzZW5kIG91dAorICAgICAgICAvLyBhIHByb3BlcnR5IHVwZGF0ZSBpbmRpY2F0aW5nIHN1Y2guCisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1NDQU5fU1RBVEVfSURMRQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgLy8gSWYgd2UgY291bGQgbm90IHNlbmQgdGhlIGVuZCBvZiBzY2FuIGluZGljYXRvciBtZXNzYWdlIG5vdyAobm8KKyAgICAgICAgLy8gYnVmZmVyIHNwYWNlKSwgd2Ugc2V0IGBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuYCB0byB0cnVlIHRvIHNlbmQKKyAgICAgICAgLy8gaXQgb3V0IHdoZW4gYnVmZmVyIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlLgorICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbVNob3VsZFNpZ25hbEVuZE9mU2NhbiA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IFJhdyBMaW5rLUxheWVyIERhdGFwYXRoIEdsdWUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCit2b2lkIE5jcEJhc2U6OkxpbmtSYXdSZWNlaXZlRG9uZShvdEluc3RhbmNlICosIG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBzTmNwSW5zdGFuY2UtPkxpbmtSYXdSZWNlaXZlRG9uZShhRnJhbWUsIGFFcnJvcik7Cit9CisKK3ZvaWQgTmNwQmFzZTo6TGlua1Jhd1JlY2VpdmVEb25lKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICB1aW50MTZfdCBmbGFncyA9IDA7CisKKyAgICBTdWNjZXNzT3JFeGl0KE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKworICAgIGlmIChhRnJhbWUtPm1EaWRUWCkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IFNQSU5FTF9NRF9GTEFHX1RYOworICAgIH0KKworICAgIC8vIEFwcGVuZCBmcmFtZSBoZWFkZXIgYW5kIGZyYW1lIGxlbmd0aAorICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICBTUElORUxfUFJPUF9TVFJFQU1fUkFXLAorICAgICAgICAgICAgKGFFcnJvciA9PSBPVF9FUlJPUl9OT05FKSA/IGFGcmFtZS0+bUxlbmd0aCA6IDAKKyAgICAgICAgKSk7CisKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICAvLyBBcHBlbmQgdGhlIGZyYW1lIGNvbnRlbnRzCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZUZlZWREYXRhKGFGcmFtZS0+bVBzZHUsIGFGcmFtZS0+bUxlbmd0aCkpOworICAgIH0KKworICAgIC8vIEFwcGVuZCBtZXRhZGF0YSAocnNzaSwgZXRjKQorICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUworICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUworICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TCisgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoIC8vIFBIWS1kYXRhCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgLy8gODAyLjE1LjQgY2hhbm5lbAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TIC8vIDgwMi4xNS40IExRSQorICAgICAgICAgICAgKQorICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKCAvLyBWZW5kb3ItZGF0YQorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TCisgICAgICAgICAgICApLAorICAgICAgICAgICAgYUZyYW1lLT5tUG93ZXIsICAgIC8vIFRYIFBvd2VyCisgICAgICAgICAgICAtMTI4LCAgICAgICAgICAgICAgLy8gTm9pc2UgRmxvb3IgKEN1cnJlbnRseSB1bnVzZWQpCisgICAgICAgICAgICBmbGFncywgICAgICAgICAgICAgLy8gRmxhZ3MKKyAgICAgICAgICAgIGFGcmFtZS0+bUNoYW5uZWwsICAvLyBSZWNlaXZlIGNoYW5uZWwKKyAgICAgICAgICAgIGFGcmFtZS0+bUxxaSwgICAgICAvLyBMaW5rIHF1YWxpdHkgaW5kaWNhdG9yCisgICAgICAgICAgICBhRXJyb3IgICAgICAgICAgICAgLy8gUmVjZWl2ZSBlcnJvcgorICAgICAgICApKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCit2b2lkIE5jcEJhc2U6OkxpbmtSYXdUcmFuc21pdERvbmUob3RJbnN0YW5jZSAqLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgYm9vbCBhRnJhbWVQZW5kaW5nLCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBzTmNwSW5zdGFuY2UtPkxpbmtSYXdUcmFuc21pdERvbmUoYUZyYW1lLCBhRnJhbWVQZW5kaW5nLCBhRXJyb3IpOworfQorCit2b2lkIE5jcEJhc2U6OkxpbmtSYXdUcmFuc21pdERvbmUob3RSYWRpb0ZyYW1lICosIGJvb2wgYUZyYW1lUGVuZGluZywgb3RFcnJvciBhRXJyb3IpCit7CisgICAgaWYgKG1DdXJUcmFuc21pdFRJRCkKKyAgICB7CisgICAgICAgIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAgfCBtQ3VyVHJhbnNtaXRUSUQsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICBTUElORUxfUFJPUF9MQVNUX1NUQVRVUywKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGFFcnJvciksCisgICAgICAgICAgICBhRnJhbWVQZW5kaW5nCisgICAgICAgICk7CisKKyAgICAgICAgLy8gQ2xlYXIgY2FjaGVkIHRyYW5zbWl0IFRJRAorICAgICAgICBtQ3VyVHJhbnNtaXRUSUQgPSAwOworICAgIH0KK30KKwordm9pZCBOY3BCYXNlOjpMaW5rUmF3RW5lcmd5U2NhbkRvbmUob3RJbnN0YW5jZSAqLCBpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKQoreworICAgIHNOY3BJbnN0YW5jZS0+TGlua1Jhd0VuZXJneVNjYW5Eb25lKGFFbmVyZ3lTY2FuTWF4UnNzaSk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6TGlua1Jhd0VuZXJneVNjYW5Eb25lKGludDhfdCBhRW5lcmd5U2Nhbk1heFJzc2kpCit7CisgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgIFNQSU5FTF9QUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQsCisgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TCisgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgIG1DdXJTY2FuQ2hhbm5lbCwKKyAgICAgICAgYUVuZXJneVNjYW5NYXhSc3NpCisgICAgKTsKKworICAgIC8vIENsZWFyIGN1cnJlbnQgc2NhbiBjaGFubmVsCisgICAgbUN1clNjYW5DaGFubmVsID0gTkNQX0lOVkFMSURfU0NBTl9DSEFOTkVMOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBiYWNrIGxpc3RlbmluZyBvbiB0aGUgb3JpZ2luYWwgcmVjZWl2ZSBjaGFubmVsLAorICAgIC8vIHNpbmNlIHRoZSBlbmVyZ3kgc2NhbiBjb3VsZCBoYXZlIGJlZW4gb24gYSBkaWZmZXJlbnQgY2hhbm5lbC4KKyAgICBvdExpbmtSYXdSZWNlaXZlKG1JbnN0YW5jZSwgbUN1clJlY2VpdmVDaGFubmVsLCAmTmNwQmFzZTo6TGlua1Jhd1JlY2VpdmVEb25lKTsKKworICAgIC8vIFdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBzY2FuLCBzbyBzZW5kIG91dAorICAgIC8vIGEgcHJvcGVydHkgdXBkYXRlIGluZGljYXRpbmcgc3VjaC4KKyAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgU1BJTkVMX1BST1BfTUFDX1NDQU5fU1RBVEUsCisgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICBTUElORUxfU0NBTl9TVEFURV9JRExFCisgICAgKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBBZGRyZXNzIFRhYmxlIENoYW5nZWQgR2x1ZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZU5ldGlmU3RhdGVDaGFuZ2VkKHVpbnQzMl90IGFGbGFncywgdm9pZCAqYUNvbnRleHQpCit7CisgICAgTmNwQmFzZSAqb2JqID0gc3RhdGljX2Nhc3Q8TmNwQmFzZSAqPihhQ29udGV4dCk7CisKKyAgICBvYmotPm1DaGFuZ2VkRmxhZ3MgfD0gYUZsYWdzOworCisgICAgb2JqLT5tVXBkYXRlQ2hhbmdlZFByb3BzVGFzay5Qb3N0KCk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6VXBkYXRlQ2hhbmdlZFByb3BzKFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhVGFza2xldCk7CisgICAgR2V0TmNwSW5zdGFuY2UoKS0+VXBkYXRlQ2hhbmdlZFByb3BzKCk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6VXBkYXRlQ2hhbmdlZFByb3BzKHZvaWQpCit7CisgICAgd2hpbGUgKG1DaGFuZ2VkRmxhZ3MgIT0gMCkKKyAgICB7CisgICAgICAgIGlmICgobUNoYW5nZWRGbGFncyAmIE5DUF9DSEFOR0VEX1BMQVRGT1JNX1JFU0VUKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIFNlbmRMYXN0U3RhdHVzKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBSZXNldFJlYXNvblRvU3BpbmVsU3RhdHVzKG90UGxhdEdldFJlc2V0UmVhc29uKG1JbnN0YW5jZSkpCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihOQ1BfQ0hBTkdFRF9QTEFURk9STV9SRVNFVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1BST1BfSVBWNl9MTF9BRERSCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihPVF9DSEFOR0VEX1RIUkVBRF9MTF9BRERSKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX01MX0FERFIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9JUFY2X01MX0FERFIKKyAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfVEhSRUFEX01MX0FERFIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChtQ2hhbmdlZEZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfUk9MRSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1SZXF1aXJlSm9pbkV4aXN0aW5nTmV0d29yaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG90VGhyZWFkR2V0RGV2aWNlUm9sZShtSW5zdGFuY2UpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICAgICAgICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfRElTQUJMRUQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgbVJlcXVpcmVKb2luRXhpc3RpbmdOZXR3b3JrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgob3RUaHJlYWRHZXREZXZpY2VSb2xlKG1JbnN0YW5jZSkgPT0gT1RfREVWSUNFX1JPTEVfTEVBREVSKQorICAgICAgICAgICAgICAgICAgJiYgb3RUaHJlYWRJc1NpbmdsZXRvbihtSW5zdGFuY2UpCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgICAgICAgICAgICAgICAgICYmICFtTGVnYWN5Tm9kZURpZEpvaW4KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQpOworICAgICAgICAgICAgICAgICAgICBvdFRocmVhZFNldEVuYWJsZWQobUluc3RhbmNlLCBmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGluZGljYXRlCisgICAgICAgICAgICAgICAgICAgIC8vICAgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdGhhbiBTUElORUxfU1RBVFVTX0pPSU5fRkFJTFVSRQorICAgICAgICAgICAgICAgICAgICAvLyAgIGhlcmUsIGJ1dCBpdCBpc24ndCBjbGVhciBob3cgdGhhdCB3b3VsZCB3b3JrCisgICAgICAgICAgICAgICAgICAgIC8vICAgd2l0aCB0aGUgY3VycmVudCBPcGVuVGhyZWFkIEFQSS4KKworICAgICAgICAgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgU2VuZExhc3RTdGF0dXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfU1RBVFVTX0pPSU5fRkFJTFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9TVEFDS19VUAorICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcKKyAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUk9MRQorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9USFJFQURfUk9MRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiBPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfUEFSVElUSU9OX0lECisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihPVF9DSEFOR0VEX1RIUkVBRF9QQVJUSVRJT05fSUQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChtQ2hhbmdlZEZsYWdzICYgT1RfQ0hBTkdFRF9USFJFQURfS0VZX1NFUVVFTkNFX0NPVU5URVIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIKKyAgICAgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfVEhSRUFEX0tFWV9TRVFVRU5DRV9DT1VOVEVSKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIChPVF9DSEFOR0VEX0lQNl9BRERSRVNTX0FEREVEIHwgT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19SRU1PVkVEKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0lQVjZfQUREUkVTU19UQUJMRQorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9JUDZfQUREUkVTU19BRERFRCB8IE9UX0NIQU5HRURfSVA2X0FERFJFU1NfUkVNT1ZFRCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1DaGFuZ2VkRmxhZ3MgJiAoT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfQURERUQgfCBPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9UQUJMRQorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9USFJFQURfQ0hJTERfQURERUQgfCBPVF9DSEFOR0VEX1RIUkVBRF9DSElMRF9SRU1PVkVEKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIE9UX0NIQU5HRURfVEhSRUFEX05FVERBVEEpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQQorICAgICAgICAgICAgICAgICkpOworCisgICAgICAgICAgICBtQ2hhbmdlZEZsYWdzICY9IH5zdGF0aWNfY2FzdDx1aW50MzJfdD4oT1RfQ0hBTkdFRF9USFJFQURfTkVUREFUQSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBuZXR3b3JrIGRhdGEgaXMgdXBkYXRlZCwgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNlbmRpbmcgKG9yIHF1ZXVpbmcpIHRoZQorICAgICAgICAgICAgLy8gbmV0d29yayBkYXRhIHNwaW5lbCBtZXNzYWdlLCB3ZSBhZGQgYE5DUF9DSEFOR0VEX1RIUkVBRF9PTl9NRVNIX05FVFNgIGFuZAorICAgICAgICAgICAgLy8gYE5DUF9DSEFOR0VEX1RIUkVBRF9PRkZfTUVTSF9ST1VURVNgIHRvIHRoZSBgbUNoYW5nZWRGbGFnc2Agc28gdGhhdCB3ZQorICAgICAgICAgICAgLy8gc2VwYXJhdGVseSBzZW5kIHRoZSBsaXN0IG9mIG9uLW1lc2ggcHJlZml4ZXMgYW5kIG9mZi1tZXNoIHJvdXRlcy4KKworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyB8PSBOQ1BfQ0hBTkdFRF9USFJFQURfT05fTUVTSF9ORVRTIHwgTkNQX0NIQU5HRURfVEhSRUFEX09GRl9NRVNIX1JPVVRFUzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIE5DUF9DSEFOR0VEX1RIUkVBRF9PTl9NRVNIX05FVFMpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihOQ1BfQ0hBTkdFRF9USFJFQURfT05fTUVTSF9ORVRTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIE5DUF9DSEFOR0VEX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9USFJFQURfT0ZGX01FU0hfUk9VVEVTCisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAgICAgICAgIG1DaGFuZ2VkRmxhZ3MgJj0gfnN0YXRpY19jYXN0PHVpbnQzMl90PihOQ1BfQ0hBTkdFRF9USFJFQURfT0ZGX01FU0hfUk9VVEVTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobUNoYW5nZWRGbGFncyAmIChPVF9DSEFOR0VEX1RIUkVBRF9STE9DX0FEREVEIHwgT1RfQ0hBTkdFRF9USFJFQURfUkxPQ19SRU1PVkVEKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUNoYW5nZWRGbGFncyAmPSB+c3RhdGljX2Nhc3Q8dWludDMyX3Q+KE9UX0NIQU5HRURfVEhSRUFEX1JMT0NfQURERUQgfCBPVF9DSEFOR0VEX1RIUkVBRF9STE9DX1JFTU9WRUQpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogU2VyaWFsIFRyYWZmaWMgR2x1ZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvdEVycm9yIE5jcEJhc2U6Ok91dGJvdW5kRnJhbWVTZW5kKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRW5kKCkpOworCisgICAgbVR4U3BpbmVsRnJhbWVDb3VudGVyKys7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZVJlY2VpdmUoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCkKK3sKKyAgICB1aW50OF90IGhlYWRlciA9IDA7CisgICAgdW5zaWduZWQgaW50IGNvbW1hbmQgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBjb25zdCB1aW50OF90ICphcmdQdHIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBhcmdMZW4gPSAwOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF90aWRfdCB0aWQgPSAwOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgYUJ1Zkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUyBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAmY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFyZ0xlbgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICB0aWQgPSBTUElORUxfSEVBREVSX0dFVF9USUQoaGVhZGVyKTsKKworICAgIC8vIFJlY2VpdmluZyBhbnkgbWVzc2FnZSBmcm9tIHRoZSBob3N0IGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgdHJhbnNpdGlvbmluZyB0aGUgaG9zdCBwb3dlciBzdGF0ZSB0byBvbmxpbmUuCisgICAgbUhvc3RQb3dlclN0YXRlID0gU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfT05MSU5FOworICAgIG1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPT0gYUJ1Zkxlbmd0aCkKKyAgICB7CisgICAgICAgIGVycm9yID0gSGFuZGxlQ29tbWFuZChoZWFkZXIsIGNvbW1hbmQsIGFyZ1B0ciwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFyZ0xlbikpOworCisgICAgICAgIC8vIENoZWNrIGlmIHdlIG1heSBoYXZlIG1pc3NlZCBhIGB0aWRgIGluIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAgaWYgKChtTmV4dEV4cGVjdGVkVGlkICE9IDApICYmICh0aWQgIT0gbU5leHRFeHBlY3RlZFRpZCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SeFNwaW5lbE91dE9mT3JkZXJUaWRDb3VudGVyKys7CisgICAgICAgIH0KKworICAgICAgICBtTmV4dEV4cGVjdGVkVGlkID0gU1BJTkVMX0dFVF9ORVhUX1RJRCh0aWQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGhlYWRlciwgU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisgICAgfQorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PX0JVRlMpCisgICAgeworICAgICAgICAvLyBJZiB3ZSBjYW5ub3Qgc2VuZCBhIHJlc3BvbnNlIGR1ZSB0byBidWZmZXIgc3BhY2Ugbm90IGJlaW5nCisgICAgICAgIC8vIGF2YWlsYWJsZSwgd2UgcmVtZW1iZXIgdGhlIFRJRCBvZiBjb21tYW5kIHNvIHRvIHNlbmQgYW4KKyAgICAgICAgLy8gZXJyb3Igc3RhdHVzIHdoZW4gYnVmZmVyIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlIGxhdGVyLgorCisgICAgICAgIC8vIFZhbGlkIFRJRCByYW5nZSBpcyAxLTE1ICh6ZXJvIGJlaW5nIHVzZWQgYXMgc3BlY2lhbCBjYXNlCisgICAgICAgIC8vIHdoZXJlIG5vIHJlcGx5IGlzIGV4cGVjdGVkKS4gVElEcyBmb3IgZHJvcHBlZCByZXBseSBhcmUKKyAgICAgICAgLy8gc3RvcmVkIGluIHR3byB2YXJpYWJsZXM6ICBgbURyb3BwZWRSZXBseVRpZEJpdFNldGAgd2hpY2gKKyAgICAgICAgLy8gaXMgYSBiaXQgc2V0IChiaXRzIDEtMTUgY29ycmVzcG9uZCB0byBUSUQgdmFsdWVzIDEtMTUpLgorICAgICAgICAvLyBUaGUgZmlyc3QvbmV4dCBkcm9wcGVkIFRJRCB2YWx1ZSBpbiB0aGUgc2V0IGlzIHN0b3JlZCBpbgorICAgICAgICAvLyBgbURyb3BwZWRSZXBseVRpZGAgKHdpdGggdmFsdWUgemVybyBpbmRpY2F0aW5nIHRoYXQgdGhlcmUKKyAgICAgICAgLy8gaXMgbm8gZHJvcHBlZCByZXBseSkuCisKKyAgICAgICAgaWYgKHRpZCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobURyb3BwZWRSZXBseVRpZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Ecm9wcGVkUmVwbHlUaWQgPSB0aWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1Ecm9wcGVkUmVwbHlUaWRCaXRTZXQgIHw9ICgxIDw8IHRpZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUnhTcGluZWxGcmFtZUNvdW50ZXIrKzsKK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVGcmFtZVJlbW92ZWRGcm9tTmNwQnVmZmVyKHZvaWQgKmFDb250ZXh0LCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYUZyYW1lVGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5jcEZyYW1lQnVmZmVyICphTmNwQnVmZmVyKQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTmNwQnVmZmVyKTsKKyAgICBzdGF0aWNfY2FzdDxOY3BCYXNlICo+KGFDb250ZXh0KS0+SGFuZGxlRnJhbWVSZW1vdmVkRnJvbU5jcEJ1ZmZlcihhRnJhbWVUYWcpOworfQorCit2b2lkIE5jcEJhc2U6OkhhbmRsZUZyYW1lUmVtb3ZlZEZyb21OY3BCdWZmZXIoTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFGcmFtZVRhZykKK3sKKyAgICBpZiAobUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzcyA9PSB0cnVlKQorICAgIHsKKyAgICAgICAgaWYgKGFGcmFtZVRhZyA9PSBtSG9zdFBvd2VyUmVwbHlGcmFtZVRhZykKKyAgICAgICAgeworICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU3BhY2UgaXMgbm93IGF2YWlsYWJsZSBpbiBuY3AgdHggZnJhbWUgYnVmZmVyLgorCisgICAgd2hpbGUgKG1Ecm9wcGVkUmVwbHlUaWQgIT0gMCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBTZW5kTGFzdFN0YXR1cygKKyAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wIHwgbURyb3BwZWRSZXBseVRpZCwKKyAgICAgICAgICAgICAgICBTUElORUxfU1RBVFVTX05PTUVNCisgICAgICAgICAgICApKTsKKworICAgICAgICBtRHJvcHBlZFJlcGx5VGlkQml0U2V0ICY9IH4oMSA8PCBtRHJvcHBlZFJlcGx5VGlkKTsKKworICAgICAgICBpZiAobURyb3BwZWRSZXBseVRpZEJpdFNldCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtRHJvcHBlZFJlcGx5VGlkID0gMDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBtRHJvcHBlZFJlcGx5VGlkID0gU1BJTkVMX0dFVF9ORVhUX1RJRChtRHJvcHBlZFJlcGx5VGlkKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoKG1Ecm9wcGVkUmVwbHlUaWRCaXRTZXQgJiAoMSA8PCBtRHJvcHBlZFJlcGx5VGlkKSkgPT0gMCk7CisgICAgfQorCisgICAgaWYgKG1TaG91bGRTaWduYWxFbmRPZlNjYW4pCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFLAorICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0lETEUKKyAgICAgICAgICAgICkpOworCisgICAgICAgIG1TaG91bGRTaWduYWxFbmRPZlNjYW4gPSBmYWxzZTsKKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisKKyAgICBpZiAobVNob3VsZFNpZ25hbEphbVN0YXRlQ2hhbmdlKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9KQU1fREVURUNURUQsCisgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICBvdEphbURldGVjdGlvbkdldFN0YXRlKG1JbnN0YW5jZSkKKyAgICAgICAgICAgICkpOworCisgICAgICAgIG1TaG91bGRTaWduYWxKYW1TdGF0ZUNoYW5nZSA9IGZhbHNlOworICAgIH0KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisKKyAgICBpZiAobUhvc3RQb3dlclN0YXRlSGVhZGVyKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgIEdldFByb3BlcnR5SGFuZGxlcl9IT1NUX1BPV0VSX1NUQVRFKAorICAgICAgICAgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfUFJPUF9IT1NUX1BPV0VSX1NUQVRFCisgICAgICAgICAgICApKTsKKworICAgICAgICBtSG9zdFBvd2VyU3RhdGVIZWFkZXIgPSAwOworCisgICAgICAgIGlmIChtSG9zdFBvd2VyU3RhdGUgIT0gU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfT05MSU5FKQorICAgICAgICB7CisgICAgICAgICAgICBtSG9zdFBvd2VyUmVwbHlGcmFtZVRhZyA9IEdldExhc3RPdXRib3VuZEZyYW1lVGFnKCk7CisgICAgICAgICAgICBtSG9zdFBvd2VyU3RhdGVJblByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFVwZGF0ZUNoYW5nZWRQcm9wcygpOworCitleGl0OgorICAgIHJldHVybjsKK30KKworYm9vbCBOY3BCYXNlOjpTaG91bGRXYWtlSG9zdCh2b2lkKQoreworICAgIHJldHVybiAobUhvc3RQb3dlclN0YXRlICE9IFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09OTElORSAmJiAhbUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzcyk7Cit9CisKK2Jvb2wgTmNwQmFzZTo6U2hvdWxkRGVmZXJIb3N0U2VuZCh2b2lkKQoreworICAgIHJldHVybiAobUhvc3RQb3dlclN0YXRlID09IFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVAgJiYgIW1Ib3N0UG93ZXJTdGF0ZUluUHJvZ3Jlc3MpOworfQorCit2b2lkIE5jcEJhc2U6OkluY3JlbWVudEZyYW1lRXJyb3JDb3VudGVyKHZvaWQpCit7CisgICAgbUZyYW1pbmdFcnJvckNvdW50ZXIrKzsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogSW5ib3VuZCBDb21tYW5kIEhhbmRsZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK290RXJyb3IgTmNwQmFzZTo6SGFuZGxlQ29tbWFuZCh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICB1bnNpZ25lZCBpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gU2tpcCBpZiB0aGlzIGlzbid0IGEgc3BpbmVsIGZyYW1lCisgICAgVmVyaWZ5T3JFeGl0KChTUElORUxfSEVBREVSX0ZMQUcgJiBhSGVhZGVyKSA9PSBTUElORUxfSEVBREVSX0ZMQUcsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKworICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBJSUQgemVybyBmb3Igbm93LgorICAgIFZlcmlmeU9yRXhpdCgKKyAgICAgICAgU1BJTkVMX0hFQURFUl9HRVRfSUlEKGFIZWFkZXIpID09IDAsCisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19JTlZBTElEX0lOVEVSRkFDRSkKKyAgICApOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihtQ29tbWFuZEhhbmRsZXJUYWJsZSkgLyBzaXplb2YobUNvbW1hbmRIYW5kbGVyVGFibGVbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAobUNvbW1hbmRIYW5kbGVyVGFibGVbaV0ubUNvbW1hbmQgPT0gYUNvbW1hbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPCBzaXplb2YobUNvbW1hbmRIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1Db21tYW5kSGFuZGxlclRhYmxlWzBdKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gKHRoaXMtPiptQ29tbWFuZEhhbmRsZXJUYWJsZVtpXS5tSGFuZGxlcikoYUhlYWRlciwgYUNvbW1hbmQsIGFBcmdQdHIsIGFBcmdMZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9DT01NQU5EKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YobUdldFByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtR2V0UHJvcGVydHlIYW5kbGVyVGFibGVbMF0pOyBpKyspCisgICAgeworICAgICAgICBpZiAobUdldFByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1Qcm9wS2V5ID09IGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGkgPCBzaXplb2YobUdldFByb3BlcnR5SGFuZGxlclRhYmxlKSAvIHNpemVvZihtR2V0UHJvcGVydHlIYW5kbGVyVGFibGVbMF0pKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSAodGhpcy0+Km1HZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtpXS5tSGFuZGxlcikoYUhlYWRlciwgYUtleSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19QUk9QX05PVF9GT1VORCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkhhbmRsZUNvbW1hbmRQcm9wZXJ0eVNldCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1bnNpZ25lZCBpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihtU2V0UHJvcGVydHlIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1TZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVswXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtU2V0UHJvcGVydHlIYW5kbGVyVGFibGVbaV0ubVByb3BLZXkgPT0gYUtleSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA8IHNpemVvZihtU2V0UHJvcGVydHlIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1TZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVswXSkpCisgICAgeworICAgICAgICBlcnJvciA9ICh0aGlzLT4qbVNldFByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1IYW5kbGVyKShhSGVhZGVyLCBhS2V5LCBhVmFsdWVQdHIsIGFWYWx1ZUxlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19QUk9QX05PVF9GT1VORCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkhhbmRsZUNvbW1hbmRQcm9wZXJ0eUluc2VydCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1bnNpZ25lZCBpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihtSW5zZXJ0UHJvcGVydHlIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1JbnNlcnRQcm9wZXJ0eUhhbmRsZXJUYWJsZVswXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtSW5zZXJ0UHJvcGVydHlIYW5kbGVyVGFibGVbaV0ubVByb3BLZXkgPT0gYUtleSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA8IHNpemVvZihtSW5zZXJ0UHJvcGVydHlIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1JbnNlcnRQcm9wZXJ0eUhhbmRsZXJUYWJsZVswXSkpCisgICAgeworICAgICAgICBlcnJvciA9ICh0aGlzLT4qbUluc2VydFByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1IYW5kbGVyKShhSGVhZGVyLCBhS2V5LCBhVmFsdWVQdHIsIGFWYWx1ZUxlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19QUk9QX05PVF9GT1VORCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkhhbmRsZUNvbW1hbmRQcm9wZXJ0eVJlbW92ZSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1bnNpZ25lZCBpOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihtUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1SZW1vdmVQcm9wZXJ0eUhhbmRsZXJUYWJsZVswXSk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChtUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGVbaV0ubVByb3BLZXkgPT0gYUtleSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaSA8IHNpemVvZihtUmVtb3ZlUHJvcGVydHlIYW5kbGVyVGFibGUpIC8gc2l6ZW9mKG1SZW1vdmVQcm9wZXJ0eUhhbmRsZXJUYWJsZVswXSkpCisgICAgeworICAgICAgICBlcnJvciA9ICh0aGlzLT4qbVJlbW92ZVByb3BlcnR5SGFuZGxlclRhYmxlW2ldLm1IYW5kbGVyKShhSGVhZGVyLCBhS2V5LCBhVmFsdWVQdHIsIGFWYWx1ZUxlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19QUk9QX05PVF9GT1VORCk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1BUks6IE91dGJvdW5kIENvbW1hbmQgSGFuZGxlcnMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitvdEVycm9yIE5jcEJhc2U6OlNlbmRMYXN0U3RhdHVzKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3N0YXR1c190IGFMYXN0U3RhdHVzKQoreworICAgIGlmIChTUElORUxfSEVBREVSX0dFVF9JSUQoYUhlYWRlcikgPT0gMCkKKyAgICB7CisgICAgICAgIG1MYXN0U3RhdHVzID0gYUxhc3RTdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBTUElORUxfUFJPUF9MQVNUX1NUQVRVUywKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLAorICAgICAgICAgICAgICAgYUxhc3RTdGF0dXMKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZW5kUHJvcGVydHlVcGRhdGUodWludDhfdCBhSGVhZGVyLCB1aW50OF90IGFDb21tYW5kLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVBhY2tGb3JtYXQsIC4uLikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICB2YV9zdGFydChhcmdzLCBhUGFja0Zvcm1hdCk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLCBhSGVhZGVyLCBhQ29tbWFuZCwgYUtleSkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFZQYWNrZWQoYVBhY2tGb3JtYXQsIGFyZ3MpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZW5kUHJvcGVydHlVcGRhdGUodWludDhfdCBhSGVhZGVyLCB1aW50OF90IGFDb21tYW5kLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsIGFIZWFkZXIsIGFDb21tYW5kLCBhS2V5KSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkRGF0YShhVmFsdWVQdHIsIGFWYWx1ZUxlbikpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2VuZFByb3BlcnR5VXBkYXRlKHVpbnQ4X3QgYUhlYWRlciwgdWludDhfdCBhQ29tbWFuZCwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgb3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywgYUhlYWRlciwgYUNvbW1hbmQsIGFLZXkpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRNZXNzYWdlKGFNZXNzYWdlKSk7CisKKyAgICAvLyBTZXQgdGhlIGBhTWVzc2FnZWAgcG9pbnRlciB0byBOVUxMIHRvIGluZGljYXRlIHRoYXQgaXQgZG9lcworICAgIC8vIG5vdCBuZWVkIHRvIGJlIGZyZWVkIGF0IHRoZSBleGl0LiBUaGUgYGFNZXNzYWdlYCBpcyBub3cgb3duZWQKKyAgICAvLyBieSB0aGUgT3V0Ym91bmRGcmFtZSBhbmQgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSBmcmFtZSBpcyBlaXRoZXIKKyAgICAvLyBzdWNjZXNzZnVsbHkgc2VudCBhbmQgdGhlbiByZW1vdmVkLCBvciBpZiB0aGUgZnJhbWUgZ2V0cworICAgIC8vIGRpc2NhcmRlZC4KKyAgICBhTWVzc2FnZSA9IE5VTEw7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisKKyAgICBpZiAoYU1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TWVzc2FnZUZyZWUoYU1lc3NhZ2UpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpPdXRib3VuZEZyYW1lRmVlZFZQYWNrZWQoY29uc3QgY2hhciAqYVBhY2tGb3JtYXQsIHZhX2xpc3QgYUFyZ3MpCit7CisgICAgdWludDhfdCBidWZbOTZdOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTOworICAgIHNwaW5lbF9zc2l6ZV90IHBhY2tlZExlbjsKKworICAgIHBhY2tlZExlbiA9IHNwaW5lbF9kYXRhdHlwZV92cGFjayhidWYsIHNpemVvZihidWYpLCBhUGFja0Zvcm1hdCwgYUFyZ3MpOworCisgICAgaWYgKChwYWNrZWRMZW4gPiAwKSAmJiAocGFja2VkTGVuIDw9IHN0YXRpY19jYXN0PHNwaW5lbF9zc2l6ZV90PihzaXplb2YoYnVmKSkpKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZERhdGEoYnVmLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocGFja2VkTGVuKSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6Ok91dGJvdW5kRnJhbWVGZWVkUGFja2VkKGNvbnN0IGNoYXIgKmFQYWNrRm9ybWF0LCAuLi4pCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICB2YV9zdGFydChhcmdzLCBhUGFja0Zvcm1hdCk7CisgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFZQYWNrZWQoYVBhY2tGb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogSW5kaXZpZHVhbCBDb21tYW5kIEhhbmRsZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfTk9PUCh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQXJnUHRyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ0xlbik7CisKKyAgICByZXR1cm4gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19PSyk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfUkVTRVQodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBXZSBhcmVuJ3QgdXNpbmcgYW55IG9mIHRoZSBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUhlYWRlcik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb21tYW5kKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ1B0cik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdMZW4pOworCisgICAgLy8gU2lnbmFsIGEgcGxhdGZvcm0gcmVzZXQuIElmIGltcGxlbWVudGVkLCB0aGlzIGZ1bmN0aW9uCisgICAgLy8gc2hvdWxkbid0IHJldHVybi4KKyAgICBvdEluc3RhbmNlUmVzZXQobUluc3RhbmNlKTsKKworICAgIC8vIFdlIG9ubHkgZ2V0IHRvIHRoaXMgcG9pbnQgaWYgdGhlCisgICAgLy8gcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IHJlc2V0dGluZy4KKyAgICAvLyBJbiBzdWNoIGEgY2FzZSB3ZSBmYWtlIGl0LgorCisgICAgb3RUaHJlYWRTZXRFbmFibGVkKG1JbnN0YW5jZSwgZmFsc2UpOworICAgIG90SXA2U2V0RW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKTsKKworICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwgU1BJTkVMX1NUQVRVU19SRVNFVF9TT0ZUV0FSRSk7CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1DaGFuZ2VkRmxhZ3MgfD0gTkNQX0NIQU5HRURfUExBVEZPUk1fUkVTRVQ7CisgICAgICAgIG1VcGRhdGVDaGFuZ2VkUHJvcHNUYXNrLlBvc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfUFJPUF9WQUxVRV9HRVQodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgdW5zaWduZWQgaW50IHByb3BLZXkgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soYUFyZ1B0ciwgYUFyZ0xlbiwgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsICZwcm9wS2V5KTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoYUhlYWRlciwgc3RhdGljX2Nhc3Q8c3BpbmVsX3Byb3Bfa2V5X3Q+KHByb3BLZXkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkNvbW1hbmRIYW5kbGVyX1BST1BfVkFMVUVfU0VUKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIHVuc2lnbmVkIGludCBwcm9wS2V5ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgY29uc3QgdWludDhfdCAqdmFsdWVQdHI7CisgICAgdW5zaWduZWQgaW50IHZhbHVlTGVuOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYUFyZ0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnByb3BLZXksCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlTGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPT0gYUFyZ0xlbikKKyAgICB7CisgICAgICAgIGVycm9yID0gSGFuZGxlQ29tbWFuZFByb3BlcnR5U2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNwaW5lbF9wcm9wX2tleV90Pihwcm9wS2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlTGVuKQorICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfUFJPUF9WQUxVRV9JTlNFUlQodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgdW5zaWduZWQgaW50IHByb3BLZXkgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBjb25zdCB1aW50OF90ICp2YWx1ZVB0cjsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWVMZW47CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUyBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcHJvcEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVMZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgaWYgKHBhcnNlZExlbmd0aCA9PSBhQXJnTGVuKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBIYW5kbGVDb21tYW5kUHJvcGVydHlJbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNwaW5lbF9wcm9wX2tleV90Pihwcm9wS2V5KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZUxlbikKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfUFJPUF9WQUxVRV9SRU1PVkUodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgdW5zaWduZWQgaW50IHByb3BLZXkgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBjb25zdCB1aW50OF90ICp2YWx1ZVB0cjsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWVMZW47CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUyBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcHJvcEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWVMZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgaWYgKHBhcnNlZExlbmd0aCA9PSBhQXJnTGVuKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBIYW5kbGVDb21tYW5kUHJvcGVydHlSZW1vdmUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNwaW5lbF9wcm9wX2tleV90Pihwcm9wS2V5KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZUxlbikKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfTkVUX1NBVkUodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pCit7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFDb21tYW5kKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ1B0cik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdMZW4pOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfTkVUX0NMRUFSKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQXJnUHRyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUFyZ0xlbik7CisKKyAgICByZXR1cm4gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhvdEluc3RhbmNlRXJhc2VQZXJzaXN0ZW50SW5mbyhtSW5zdGFuY2UpKSk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfTkVUX1JFQ0FMTCh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFBcmdQdHIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQXJnTGVuKTsKKworICAgIHJldHVybiBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX1VOSU1QTEVNRU5URUQpOworfQorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKworb3RFcnJvciBOY3BCYXNlOjpDb21tYW5kSGFuZGxlcl9QRUVLKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLCB1aW50MTZfdCBhQXJnTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICB1aW50MzJfdCBhZGRyZXNzOworICAgIHVpbnQxNl90IGNvdW50OworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhQXJnTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAvLyBBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAvLyBDb3VudAorICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50CisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPT0gYUFyZ0xlbiwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIFZlcmlmeU9yRXhpdChjb3VudCAhPSAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9BUkdVTUVOVCk7CisKKyAgICBpZiAobUFsbG93UGVla0RlbGVnYXRlICE9IE5VTEwpCisgICAgeworICAgICAgICBWZXJpZnlPckV4aXQobUFsbG93UGVla0RlbGVnYXRlKGFkZHJlc3MsIGNvdW50KSwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUyAgIC8vIEhlYWRlciBhbmQgQ29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgIC8vIEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBDb3VudAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BFRUtfUkVULAorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICBjb3VudAorICAgICAgICAgICAgICAgICkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGFkZHJlc3MpLCBjb3VudCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQ29tbWFuZCk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6Q29tbWFuZEhhbmRsZXJfUE9LRSh1aW50OF90IGFIZWFkZXIsIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwgdWludDE2X3QgYUFyZ0xlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgdWludDMyX3QgYWRkcmVzczsKKyAgICB1aW50MTZfdCBjb3VudDsKKyAgICBjb25zdCB1aW50OF90ICpkYXRhUHRyID0gTlVMTDsKKyAgICBzcGluZWxfc2l6ZV90IGRhdGFMZW47CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFBcmdMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgIC8vIEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgIC8vIENvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TICAgICAvLyBCeXRlcworICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAmZGF0YVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFMZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA9PSBhQXJnTGVuLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgVmVyaWZ5T3JFeGl0KGNvdW50ICE9IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UKTsKKyAgICBWZXJpZnlPckV4aXQoY291bnQgPD0gZGF0YUxlbiwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQpOworCisgICAgaWYgKG1BbGxvd1Bva2VEZWxlZ2F0ZSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd1Bva2VEZWxlZ2F0ZShhZGRyZXNzLCBjb3VudCksIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UKTsKKyAgICB9CisKKyAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGFkZHJlc3MpLCBkYXRhUHRyLCBjb3VudCk7CisKK2V4aXQ6CisgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUNvbW1hbmQpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogSW5kaXZpZHVhbCBQcm9wZXJ0eSBHZXR0ZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTEFTVF9TVEFUVVModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoYUhlYWRlciwgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLCBhS2V5LCBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgbUxhc3RTdGF0dXMpOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9QUk9UT0NPTF9WRVJTSU9OKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgICAvLyBNYWpvcgorICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TICAgLy8gTWlub3IKKyAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUFKT1IsCisgICAgICAgICAgICAgICBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUlOT1IKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSU5URVJGQUNFX1RZUEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLAorICAgICAgICAgICAgICAgU1BJTkVMX1BST1RPQ09MX1RZUEVfVEhSRUFECisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1ZFTkRPUl9JRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsCisgICAgICAgICAgICAgICAwIC8vIFZlbmRvciBJRC4gWmVybyBmb3IgdW5rbm93bi4KKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfQ0FQUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBCZWdpbiBhZGRpbmcgY2FwYWJpbGl0aWVzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9ORVRfVEhSRUFEXzFfMCkpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9DT1VOVEVSUykpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9NQUNfV0hJVEVMSVNUKSk7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9NQUNfUkFXKSk7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfSkFNX0RFVEVDVCkpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQX09PQl9TVEVFUklOR19EQVRBKSk7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQX1BFRUtfUE9LRSkpOworI2VuZGlmCisKKyAgICAvLyBUT0RPOiBTb21laG93IGdldCB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdHkgZnJvbSB0aGUgcmFkaW8uCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQXzgwMl8xNV80XzI0NTBNSFpfT1FQU0spKTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX01BWF9DSElMRFJFTiA+IDAKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfUk9MRV9ST1VURVIpKTsKKyNlbmRpZgorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLCBTUElORUxfQ0FQX1JPTEVfU0xFRVBZKSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MsIFNQSU5FTF9DQVBfTkVTVF9MRUdBQ1lfSU5URVJGQUNFKSk7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZChTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfUywgU1BJTkVMX0NBUF9USFJFQURfVE1GX1BST1hZKSk7CisjZW5kaWYKKworICAgIC8vIEVuZCBhZGRpbmcgY2FwYWJpbGl0aWVzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05DUF9WRVJTSU9OKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TLAorICAgICAgICAgICAgICAgb3RHZXRWZXJzaW9uU3RyaW5nKCkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSU5URVJGQUNFX0NPVU5UKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIDEgLy8gT25seSBvbmUgaW50ZXJmYWNlIGZvciBub3cKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUE9XRVJfU1RBVEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIC8vIEFsd2F5cyBvbmxpbmUgYXQgdGhlIG1vbWVudAorICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgU1BJTkVMX1BPV0VSX1NUQVRFX09OTElORQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9IV0FERFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXh0QWRkcmVzcyBod0FkZHI7CisgICAgb3RMaW5rR2V0RmFjdG9yeUFzc2lnbmVkSWVlZUV1aTY0KG1JbnN0YW5jZSwgJmh3QWRkcik7CisKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICAgIGh3QWRkci5tOAorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9MT0NLKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgcHJvcGVydHkgbG9jayAoTmVlZHMgQVBJISkKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUtleSk7CisKKyAgICByZXR1cm4gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19VTklNUExFTUVOVEVEKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSE9TVF9QT1dFUl9TVEFURSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBtSG9zdFBvd2VyU3RhdGUKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgICAgICAgICBvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKQorI2Vsc2UKKyAgICAgICAgICAgICAgIGZhbHNlCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1BIWV9GUkVRKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICB1aW50MzJfdCBmcmVxX2toeigwKTsKKyAgICBjb25zdCB1aW50OF90IGNoYW4ob3RMaW5rR2V0Q2hhbm5lbChtSW5zdGFuY2UpKTsKKworICAgIGlmIChjaGFuID09IDApCisgICAgeworICAgICAgICBmcmVxX2toeiA9IDg2ODMwMDsKKyAgICB9CisgICAgZWxzZSBpZiAoY2hhbiA8IDExKQorICAgIHsKKyAgICAgICAgZnJlcV9raHogPSA5MDYwMDAgLSAoMjAwMCAqIDEpICsgMjAwMCAqIChjaGFuKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2hhbiA8IDI2KQorICAgIHsKKyAgICAgICAgZnJlcV9raHogPSAyNDA1MDAwIC0gKDUwMDAgKiAxMSkgKyA1MDAwICogKGNoYW4pOworICAgIH0KKworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgIGZyZXFfa2h6CisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1BIWV9DSEFOX1NVUFBPUlRFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIEdldFByb3BlcnR5SGFuZGxlcl9DaGFubmVsTWFza0hlbHBlcihhSGVhZGVyLCBhS2V5LCBtU3VwcG9ydGVkQ2hhbm5lbE1hc2spOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9QSFlfQ0hBTih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdExpbmtHZXRDaGFubmVsKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX1JTU0kodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICBvdFBsYXRSYWRpb0dldFJzc2kobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9QSFlfVFhfUE9XRVIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICBvdExpbmtHZXRNYXhUcmFuc21pdFBvd2VyKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX1JYX1NFTlNJVElWSVRZKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgb3RQbGF0UmFkaW9HZXRSZWNlaXZlU2Vuc2l0aXZpdHkobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfU0NBTl9TVEFURSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworICAgIGlmIChvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKSkKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2FuQ2hhbm5lbCA9PSBOQ1BfSU5WQUxJRF9TQ0FOX0NIQU5ORUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNQSU5FTF9TQ0FOX1NUQVRFX0lETEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNQSU5FTF9TQ0FOX1NUQVRFX0VORVJHWQorICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworICAgIHsKKyAgICAgICAgaWYgKG90TGlua0lzQWN0aXZlU2NhbkluUHJvZ3Jlc3MobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfU0NBTl9TVEFURV9CRUFDT04KKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob3RMaW5rSXNFbmVyZ3lTY2FuSW5Qcm9ncmVzcyhtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0VORVJHWQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChvdFRocmVhZElzRGlzY292ZXJJblByb2dyZXNzKG1JbnN0YW5jZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX1NDQU5fU1RBVEVfRElTQ09WRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0lETEUKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19TQ0FOX1BFUklPRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgbVNjYW5QZXJpb2QKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfQ2hhbm5lbE1hc2tIZWxwZXIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCB1aW50MzJfdCBhQ2hhbm5lbE1hc2spCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspCisgICAgeworICAgICAgICBpZiAoMCAhPSAoYUNoYW5uZWxNYXNrICYgKDEgPDwgaSkpKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsIGkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19TQ0FOX01BU0sodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBHZXRQcm9wZXJ0eUhhbmRsZXJfQ2hhbm5lbE1hc2tIZWxwZXIoYUhlYWRlciwgYUtleSwgbUNoYW5uZWxNYXNrKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDXzE1XzRfUEFOSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgIG90TGlua0dldFBhbklkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1BST01JU0NVT1VTX01PREUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG1JbnN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICA/IFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9GVUxMCisgICAgICAgICAgICAgICAgICAgOiBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfT0ZGCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ18xNV80X0xBRERSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICAgIG90TGlua0dldEV4dGVuZGVkQWRkcmVzcyhtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ18xNV80X1NBRERSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICBvdExpbmtHZXRTaG9ydEFkZHJlc3MobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfRVhURU5ERURfQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICBvdExpbmtHZXRFeHRlbmRlZEFkZHJlc3MobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfREFUQV9QT0xMX1BFUklPRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgb3RMaW5rR2V0UG9sbFBlcmlvZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBtSXNSYXdTdHJlYW1FbmFibGVkCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9TQVZFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90RGF0YXNldElzQ29tbWlzc2lvbmVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX0lGX1VQKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgb3RJcDZJc0VuYWJsZWQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfU1RBQ0tfVVAodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldERldmljZVJvbGUobUluc3RhbmNlKSAhPSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRAorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfUk9MRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgc3BpbmVsX25ldF9yb2xlX3Qgcm9sZShTUElORUxfTkVUX1JPTEVfREVUQUNIRUQpOworCisgICAgc3dpdGNoIChvdFRocmVhZEdldERldmljZVJvbGUobUluc3RhbmNlKSkKKyAgICB7CisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ESVNBQkxFRDoKKyAgICBjYXNlIE9UX0RFVklDRV9ST0xFX0RFVEFDSEVEOgorICAgICAgICByb2xlID0gU1BJTkVMX05FVF9ST0xFX0RFVEFDSEVEOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfQ0hJTEQ6CisgICAgICAgIHJvbGUgPSBTUElORUxfTkVUX1JPTEVfQ0hJTEQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9ERVZJQ0VfUk9MRV9ST1VURVI6CisgICAgICAgIHJvbGUgPSBTUElORUxfTkVUX1JPTEVfUk9VVEVSOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfREVWSUNFX1JPTEVfTEVBREVSOgorICAgICAgICByb2xlID0gU1BJTkVMX05FVF9ST0xFX0xFQURFUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICByb2xlCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9ORVRXT1JLX05BTUUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldE5ldHdvcmtOYW1lKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX1hQQU5JRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0RXh0ZW5kZWRQYW5JZChtSW5zdGFuY2UpLAorICAgICAgICAgICAgICAgc2l6ZW9mKHNwaW5lbF9uZXRfeHBhbmlkX3QpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9NQVNURVJfS0VZKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRNYXN0ZXJLZXkobUluc3RhbmNlKS0+bTgsCisgICAgICAgICAgICAgICBPVF9NQVNURVJfS0VZX1NJWkUKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldEtleVNlcXVlbmNlQ291bnRlcihtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9QQVJUSVRJT05fSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0UGFydGl0aW9uSWQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0S2V5U3dpdGNoR3VhcmRUaW1lKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIG90TmV0RGF0YUdldFZlcnNpb24obUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQV9WRVJTSU9OKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIG90TmV0RGF0YUdldFN0YWJsZVZlcnNpb24obUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX05FVFdPUktfREFUQSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBuZXR3b3JrRGF0YVsyNTVdOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFMZW4gPSAyNTU7CisKKyAgICBvdEJvcmRlclJvdXRlckdldE5ldERhdGEoCisgICAgICAgIG1JbnN0YW5jZSwKKyAgICAgICAgZmFsc2UsIC8vIFN0YWJsZT8KKyAgICAgICAgbmV0d29ya0RhdGEsCisgICAgICAgICZuZXR3b3JrRGF0YUxlbgorICAgICk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkRGF0YShuZXR3b3JrRGF0YSwgbmV0d29ya0RhdGFMZW4pKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBuZXR3b3JrRGF0YVsyNTVdOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFMZW4gPSAyNTU7CisKKyAgICBvdEJvcmRlclJvdXRlckdldE5ldERhdGEoCisgICAgICAgIG1JbnN0YW5jZSwKKyAgICAgICAgdHJ1ZSwgLy8gU3RhYmxlPworICAgICAgICBuZXR3b3JrRGF0YSwKKyAgICAgICAgJm5ldHdvcmtEYXRhTGVuCisgICAgKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXkKKyAgICAgICAgICAgICAgICApKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWREYXRhKG5ldHdvcmtEYXRhLCBuZXR3b3JrRGF0YUxlbikpOworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTEVBREVSX05FVFdPUktfREFUQSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCBuZXR3b3JrRGF0YVsyNTVdOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFMZW4gPSAyNTU7CisKKyAgICBvdE5ldERhdGFHZXQoCisgICAgICAgIG1JbnN0YW5jZSwKKyAgICAgICAgZmFsc2UsIC8vIFN0YWJsZT8KKyAgICAgICAgbmV0d29ya0RhdGEsCisgICAgICAgICZuZXR3b3JrRGF0YUxlbgorICAgICk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkRGF0YShuZXR3b3JrRGF0YSwgbmV0d29ya0RhdGFMZW4pKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEEodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgbmV0d29ya0RhdGFbMjU1XTsKKyAgICB1aW50OF90IG5ldHdvcmtEYXRhTGVuID0gMjU1OworCisgICAgb3ROZXREYXRhR2V0KAorICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgIHRydWUsIC8vIFN0YWJsZT8KKyAgICAgICAgbmV0d29ya0RhdGEsCisgICAgICAgICZuZXR3b3JrRGF0YUxlbgorICAgICk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkRGF0YShuZXR3b3JrRGF0YSwgbmV0d29ya0RhdGFMZW4pKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTEVBREVSX1JJRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldExlYWRlclJvdXRlcklkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldExvY2FsTGVhZGVyV2VpZ2h0KG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0xFQURFUl9XRUlHSFQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRMZWFkZXJXZWlnaHQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTEVBREVSX0FERFIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90SXA2QWRkcmVzcyBhZGRyZXNzOworCisgICAgZXJyb3IgPSBvdFRocmVhZEdldExlYWRlclJsb2MobUluc3RhbmNlLCAmYWRkcmVzcyk7CisKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TLAorICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcworICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1BBUkVOVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3RSb3V0ZXJJbmZvIHBhcmVudEluZm87CisKKyAgICBlcnJvciA9IG90VGhyZWFkR2V0UGFyZW50SW5mbyhtSW5zdGFuY2UsICZwYXJlbnRJbmZvKTsKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MgICAvLyBQYXJlbnQncyBleHRlbmRlZCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgIC8vIFBhcmVudCdzIHJsb2MxNgorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbmZvLm1FeHRBZGRyZXNzLm04LAorICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbmZvLm1SbG9jMTYKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0NISUxEX1RBQkxFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdENoaWxkSW5mbyBjaGlsZEluZm87CisgICAgdWludDhfdCBtYXhDaGlsZHJlbjsKKyAgICB1aW50OF90IG1vZGVGbGFnczsKKworICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgbWF4Q2hpbGRyZW4gPSBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihtSW5zdGFuY2UpOworCisgICAgZm9yICh1aW50OF90IGluZGV4ID0gMDsgaW5kZXggPCBtYXhDaGlsZHJlbjsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRHZXRDaGlsZEluZm9CeUluZGV4KG1JbnN0YW5jZSwgaW5kZXgsICZjaGlsZEluZm8pOworCisgICAgICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1vZGVGbGFncyA9IExpbmtGbGFnc1RvRmxhZ0J5dGUoY2hpbGRJbmZvLm1SeE9uV2hlbklkbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1TZWN1cmVEYXRhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZm8ubUZ1bGxGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZm8ubUZ1bGxOZXR3b3JrRGF0YSk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MgICAgICAgICAvLyBFVUk2NCBBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgICAgICAvLyBSbG9jMTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgICAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgICAgIC8vIEFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAgLy8gTmV0d29yayBEYXRhIFZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIExpbmsgUXVhbGl0eSBJbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MgICAgICAgICAgLy8gQXZlcmFnZSBSU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIE1vZGUgKGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MgICAgICAgICAgLy8gTW9zdCByZWNlbnQgUlNTCisgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1FeHRBZGRyZXNzLm04LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1SbG9jMTYsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZm8ubVRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEluZm8ubUFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tTmV0d29ya0RhdGFWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1MaW5rUXVhbGl0eUluLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmZvLm1BdmVyYWdlUnNzaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5mby5tTGFzdFJzc2kKKyAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSBmYWxzZTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ORUlHSEJPUl9UQUJMRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgb3ROZWlnaGJvckluZm9JdGVyYXRvciBpdGVyID0gT1RfTkVJR0hCT1JfSU5GT19JVEVSQVRPUl9JTklUOworICAgIG90TmVpZ2hib3JJbmZvIG5laWdoSW5mbzsKKyAgICB1aW50OF90IG1vZGVGbGFnczsKKworICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLCBhSGVhZGVyLCBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhS2V5KSk7CisKKyAgICB3aGlsZSAob3RUaHJlYWRHZXROZXh0TmVpZ2hib3JJbmZvKG1JbnN0YW5jZSwgJml0ZXIsICZuZWlnaEluZm8pID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtb2RlRmxhZ3MgPSBMaW5rRmxhZ3NUb0ZsYWdCeXRlKG5laWdoSW5mby5tUnhPbldoZW5JZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tU2VjdXJlRGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1GdWxsRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1GdWxsTmV0d29ya0RhdGEpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TICAgICAgICAgLy8gRVVJNjQgQWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAgICAgLy8gUmxvYzE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgICAvLyBBZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIExpbmsgUXVhbGl0eSBJbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MgICAgICAgICAgLy8gQXZlcmFnZSBSU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIE1vZGUgKGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gSXMgQ2hpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgICAgIC8vIExpbmsgRnJhbWUgQ291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgICAgICAgLy8gTUxFIEZyYW1lIENvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TICAgICAgICAgIC8vIE1vc3QgcmVjZW50IFJTUworICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tRXh0QWRkcmVzcy5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoSW5mby5tUmxvYzE2LAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1BZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaEluZm8ubUxpbmtRdWFsaXR5SW4sCisgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaEluZm8ubUF2ZXJhZ2VSc3NpLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1Jc0NoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1MaW5rRnJhbWVDb3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hJbmZvLm1NbGVGcmFtZUNvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaEluZm8ubUxhc3RSc3NpCisgICAgICAgICAgICAgICAgICAgICkpOworICAgIH0KKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gZmFsc2U7CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQVNTSVNUSU5HX1BPUlRTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50OF90IG51bUVudHJpZXMgPSAwOworICAgIGNvbnN0IHVpbnQxNl90ICpwb3J0cyA9IG90SXA2R2V0VW5zZWN1cmVQb3J0cyhtSW5zdGFuY2UsICZudW1FbnRyaWVzKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywgYUhlYWRlciwgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUtleSkpOworCisgICAgZm9yICg7IG51bUVudHJpZXMgIT0gMDsgcG9ydHMrKywgbnVtRW50cmllcy0tKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgKnBvcnRzKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UKKyAgICAgICAgICAgKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkSXNSb3V0ZXJSb2xlRW5hYmxlZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9PTl9NRVNIX05FVFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIG90Qm9yZGVyUm91dGVyQ29uZmlnIGJvcmRlclJvdXRlckNvbmZpZzsKKyAgICB1aW50OF90IGZsYWdzOworCisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IHRydWU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGaWxsIGZyb20gbm9uLWxvY2FsIG5ldHdvcmsgZGF0YSBmaXJzdAorICAgIGZvciAob3ROZXR3b3JrRGF0YUl0ZXJhdG9yIGl0ZXIgPSBPVF9ORVRXT1JLX0RBVEFfSVRFUkFUT1JfSU5JVCA7OykKKyAgICB7CisgICAgICAgIGVycm9yID0gb3ROZXREYXRhR2V0TmV4dE9uTWVzaFByZWZpeChtSW5zdGFuY2UsICZpdGVyLCAmYm9yZGVyUm91dGVyQ29uZmlnKTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmbGFncyA9IEJvcmRlclJvdXRlckNvbmZpZ1RvRmxhZ0J5dGUoYm9yZGVyUm91dGVyQ29uZmlnKTsKKworICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgICAgIC8vIElQdjYgUHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAgLy8gUHJlZml4IExlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgICAgICAvLyBpc1N0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gaXNMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvcmRlclJvdXRlckNvbmZpZy5tUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJvdXRlckNvbmZpZy5tU3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgLy8gRmlsbCBmcm9tIGxvY2FsIG5ldHdvcmsgZGF0YSBsYXN0CisgICAgZm9yIChvdE5ldHdvcmtEYXRhSXRlcmF0b3IgaXRlciA9IE9UX05FVFdPUktfREFUQV9JVEVSQVRPUl9JTklUIDs7KQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlckdldE5leHRPbk1lc2hQcmVmaXgobUluc3RhbmNlLCAmaXRlciwgJmJvcmRlclJvdXRlckNvbmZpZyk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZmxhZ3MgPSBCb3JkZXJSb3V0ZXJDb25maWdUb0ZsYWdCeXRlKGJvcmRlclJvdXRlckNvbmZpZyk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgICAgICAvLyBJUHY2IFByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIFByZWZpeCBMZW5ndGggKGluIGJpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gaXNTdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIGlzTG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib3JkZXJSb3V0ZXJDb25maWcubVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSb3V0ZXJDb25maWcubVN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSBmYWxzZTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlTY2FuSm9pbmVyRmxhZworICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG1EaXNjb3ZlcnlTY2FuRW5hYmxlRmlsdGVyaW5nCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9QQU5JRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgbURpc2NvdmVyeVNjYW5QYW5JZAorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9JUFY2X01MX1BSRUZJWCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3QgdWludDhfdCAqbWxQcmVmaXggPSBvdFRocmVhZEdldE1lc2hMb2NhbFByZWZpeChtSW5zdGFuY2UpOworCisgICAgaWYgKG1sUHJlZml4KQorICAgIHsKKyAgICAgICAgb3RJcDZBZGRyZXNzIGFkZHI7CisKKyAgICAgICAgbWVtY3B5KGFkZHIubUZpZWxkcy5tOCwgbWxQcmVmaXgsIDgpOworCisgICAgICAgIC8vIFplcm8gb3V0IHRoZSBsYXN0IDggYnl0ZXMuCisgICAgICAgIG1lbXNldChhZGRyLm1GaWVsZHMubTggKyA4LCAwLCA4KTsKKworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgLy8gTWVzaC1sb2NhbCBJUHY2IGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAvLyBQcmVmaXggbGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAmYWRkciwKKyAgICAgICAgICAgICAgICAgICAgNjQKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVk9JRF9TCisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0lQVjZfTUxfQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICptbDY0ID0gb3RUaHJlYWRHZXRNZXNoTG9jYWxFaWQobUluc3RhbmNlKTsKKworICAgIGlmIChtbDY0KQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MsCisgICAgICAgICAgICAgICAgICAgIG1sNjQKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVk9JRF9TCisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0lQVjZfTExfQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgY29uc3Qgb3RJcDZBZGRyZXNzICphZGRyZXNzID0gb3RUaHJlYWRHZXRMaW5rTG9jYWxJcDZBZGRyZXNzKG1JbnN0YW5jZSk7CisKKyAgICBpZiAoYWRkcmVzcykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TLAorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzCisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1ZPSURfUworICAgICAgICAgICAgICAgICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9JUFY2X0FERFJFU1NfVEFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IHRydWU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICBmb3IgKGNvbnN0IG90TmV0aWZBZGRyZXNzICphZGRyZXNzID0gb3RJcDZHZXRVbmljYXN0QWRkcmVzc2VzKG1JbnN0YW5jZSk7IGFkZHJlc3M7IGFkZHJlc3MgPSBhZGRyZXNzLT5tTmV4dCkKKyAgICB7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgIC8vIElQdjYgYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAvLyBQcmVmaXggbGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgICAvLyBQcmVmZXJyZWQgbGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgLy8gVmFsaWQgbGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcy0+bUFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLT5tUHJlZml4TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy0+bVByZWZlcnJlZCA/IDB4ZmZmZmZmZmYgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy0+bVZhbGlkID8gMHhmZmZmZmZmZiA6IDAKKyAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgfQorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSBmYWxzZTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0lQVjZfUk9VVEVfVEFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIC8vIFRPRE86IEltcGxlbWVudCBnZXQgcm91dGUgdGFibGUKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUtleSk7CisKKyAgICByZXR1cm4gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19VTklNUExFTUVOVEVEKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90SWNtcDZJc0VjaG9FbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JMT0MxNl9ERUJVR19QQVNTVEhSVSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgLy8gTm90ZSByZXZlcnNlIGxvZ2ljOiBwYXNzdGhydSBlbmFibGVkID0gZmlsdGVyIGRpc2FibGVkCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICFvdElwNklzUmVjZWl2ZUZpbHRlckVuYWJsZWQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfT0ZGX01FU0hfUk9VVEVTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEV4dGVybmFsUm91dGVDb25maWcgZXh0ZXJuYWxfcm91dGVfY29uZmlnOworICAgIG90TmV0d29ya0RhdGFJdGVyYXRvciBpdGVyID0gT1RfTkVUV09SS19EQVRBX0lURVJBVE9SX0lOSVQ7CisKKyAgICBtRGlzYWJsZVN0cmVhbVdyaXRlID0gdHJ1ZTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUFJPUF9TLAorICAgICAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIGFLZXkKKyAgICAgICAgICAgICAgICApKTsKKworICAgIHdoaWxlIChvdE5ldERhdGFHZXROZXh0Um91dGUobUluc3RhbmNlLCAmaXRlciwgJmV4dGVybmFsX3JvdXRlX2NvbmZpZykgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAgICAgLy8gSVB2NiBQcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIFByZWZpeCBMZW5ndGggKGluIGJpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgICAgICAvLyBJc1N0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAgICAgLy8gUm91dGUgUHJlZmVyZW5jZSBGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gSXNMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gTmV4dEhvcElzVGhpc0RldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZleHRlcm5hbF9yb3V0ZV9jb25maWcubVByZWZpeC5tUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfcm91dGVfY29uZmlnLm1QcmVmaXgubUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3JvdXRlX2NvbmZpZy5tU3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZXJuYWxSb3V0ZVByZWZlcmVuY2VUb0ZsYWdCeXRlKGV4dGVybmFsX3JvdXRlX2NvbmZpZy5tUHJlZmVyZW5jZSksCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3JvdXRlX2NvbmZpZy5tTmV4dEhvcElzVGhpc0RldmljZQorICAgICAgICAgICAgICAgICAgICApKTsKKyAgICB9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgd2hpbGUgKG90Qm9yZGVyUm91dGVyR2V0TmV4dFJvdXRlKG1JbnN0YW5jZSwgJml0ZXIsICZleHRlcm5hbF9yb3V0ZV9jb25maWcpID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgZXJyb3IgPSBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUyAgICAgIC8vIElQdjYgUHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAvLyBQcmVmaXggTGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MgICAgICAgICAgLy8gSXNTdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgIC8vIFJvdXRlIFByZWZlcmVuY2UgRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIElzTG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgICAgIC8vIE5leHRIb3BJc1RoaXNEZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAmZXh0ZXJuYWxfcm91dGVfY29uZmlnLm1QcmVmaXgubVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3JvdXRlX2NvbmZpZy5tUHJlZml4Lm1MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF9yb3V0ZV9jb25maWcubVN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsUm91dGVQcmVmZXJlbmNlVG9GbGFnQnl0ZShleHRlcm5hbF9yb3V0ZV9jb25maWcubVByZWZlcmVuY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3JvdXRlX2NvbmZpZy5tTmV4dEhvcElzVGhpc0RldmljZQorICAgICAgICAgICAgICAgICAgICApKTsKKyAgICB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSBmYWxzZTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1NUUkVBTV9ORVQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIC8vIFRPRE86IEltcGxlbWVudCBleHBsaWNpdCBkYXRhIHBvbGwuCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9UTUZfUFJPWFlfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90VG1mUHJveHlJc0VuYWJsZWQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX0VOQUJMRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgIG90SmFtRGV0ZWN0aW9uSXNFbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgb3RKYW1EZXRlY3Rpb25HZXRTdGF0ZShtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICBvdEphbURldGVjdGlvbkdldFJzc2lUaHJlc2hvbGQobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX1dJTkRPVyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdEphbURldGVjdGlvbkdldFdpbmRvdyhtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX0pBTV9ERVRFQ1RfQlVTWSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdEphbURldGVjdGlvbkdldEJ1c3lQZXJpb2QobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICB1aW50NjRfdCBoaXN0b3J5Qml0bWFwID0gb3RKYW1EZXRlY3Rpb25HZXRIaXN0b3J5Qml0bWFwKG1JbnN0YW5jZSk7CisKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgLy8gSGlzdG9yeSBiaXRtYXAgLSBiaXRzIDAtMzEKKyAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAvLyBIaXN0b3J5IGJpdG1hcCAtIGJpdHMgMzItNjMKKyAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGlzdG9yeUJpdG1hcCAmIDB4ZmZmZmZmZmYpLAorICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhpc3RvcnlCaXRtYXAgPj4gMzIpCisgICAgICAgICAgICk7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX01BQ19DTlRSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICBjb25zdCBvdE1hY0NvdW50ZXJzICptYWNDb3VudGVyczsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG1hY0NvdW50ZXJzID0gb3RMaW5rR2V0Q291bnRlcnMobUluc3RhbmNlKTsKKworICAgIGFzc2VydChtYWNDb3VudGVycyAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAoYUtleSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9UT1RBTDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4VG90YWw7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9BQ0tfUkVROgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhBY2tSZXF1ZXN0ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9BQ0tFRDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4QWNrZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9OT19BQ0tfUkVROgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhOb0Fja1JlcXVlc3RlZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0RBVEE6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeERhdGE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9EQVRBX1BPTEw6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeERhdGFQb2xsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQkVBQ09OOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhCZWFjb247CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9CRUFDT05fUkVROgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhCZWFjb25SZXF1ZXN0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfT1RIRVI6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeE90aGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfUkVUUlk6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1UeFJldHJ5OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9FUlJfQ0NBOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhFcnJDY2E7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9VTklDQVNUOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhVbmljYXN0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQlJPQURDQVNUOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tVHhCcm9hZGNhc3Q7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX0VSUl9BQk9SVDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVR4RXJyQWJvcnQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9UT1RBTDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4VG90YWw7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EQVRBOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhEYXRhOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfREFUQV9QT0xMOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhEYXRhUG9sbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JFQUNPTjoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4QmVhY29uOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfQkVBQ09OX1JFUToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4QmVhY29uUmVxdWVzdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX09USEVSOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhPdGhlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0ZJTFRfV0w6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeFdoaXRlbGlzdEZpbHRlcmVkOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfRklMVF9EQToKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4RGVzdEFkZHJGaWx0ZXJlZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0RVUDoKKyAgICAgICAgdmFsdWUgPSBtYWNDb3VudGVycy0+bVJ4RHVwbGljYXRlZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX1VOSUNBU1Q6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeFVuaWNhc3Q7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9CUk9BRENBU1Q6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEJyb2FkY2FzdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX0VNUFRZOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhFcnJOb0ZyYW1lOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfVUtXTl9OQlI6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEVyclVua25vd25OZWlnaGJvcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX05WTERfU0FERFI6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEVyckludmFsaWRTcmNBZGRyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfU0VDVVJJVFk6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEVyclNlYzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX0JBRF9GQ1M6CisgICAgICAgIHZhbHVlID0gbWFjQ291bnRlcnMtPm1SeEVyckZjczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX09USEVSOgorICAgICAgICB2YWx1ZSA9IG1hY0NvdW50ZXJzLT5tUnhFcnJPdGhlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfSU5URVJOQUxfRVJST1IpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICAgdmFsdWUKKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9OQ1BfQ05UUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdWludDMyX3QgdmFsdWU7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBzd2l0Y2ggKGFLZXkpCisgICAgeworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9TRUNfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbUluYm91bmRTZWN1cmVJcEZyYW1lQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfSU5TRUNfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbUluYm91bmRJbnNlY3VyZUlwRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9EUk9QUEVEOgorICAgICAgICB2YWx1ZSA9IG1Ecm9wcGVkSW5ib3VuZElwRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9JUF9TRUNfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbU91dGJvdW5kU2VjdXJlSXBGcmFtZUNvdW50ZXI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0lQX0lOU0VDX1RPVEFMOgorICAgICAgICB2YWx1ZSA9IG1PdXRib3VuZEluc2VjdXJlSXBGcmFtZUNvdW50ZXI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0lQX0RST1BQRUQ6CisgICAgICAgIHZhbHVlID0gbURyb3BwZWRPdXRib3VuZElwRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9TUElORUxfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbVR4U3BpbmVsRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9TUElORUxfVE9UQUw6CisgICAgICAgIHZhbHVlID0gbVJ4U3BpbmVsRnJhbWVDb3VudGVyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9TUElORUxfT1VUX09GX09SREVSX1RJRDoKKyAgICAgICAgdmFsdWUgPSBtUnhTcGluZWxPdXRPZk9yZGVyVGlkQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX0VSUjoKKyAgICAgICAgdmFsdWUgPSBtRnJhbWluZ0Vycm9yQ291bnRlcjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfSU5URVJOQUxfRVJST1IpOworICAgICAgICBFeGl0Tm93KCk7CisgICAgfQorCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICAgdmFsdWUKKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9JUF9DTlRSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGNvbnN0IG90SXBDb3VudGVycyAqY291bnRlcnMgPSBvdFRocmVhZEdldElwNkNvdW50ZXJzKG1JbnN0YW5jZSk7CisKKyAgICBzd2l0Y2ggKGFLZXkpCisgICAgeworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9JUF9UWF9TVUNDRVNTOgorICAgICAgICB2YWx1ZSA9IGNvdW50ZXJzLT5tVHhTdWNjZXNzOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9JUF9SWF9TVUNDRVNTOgorICAgICAgICB2YWx1ZSA9IGNvdW50ZXJzLT5tUnhTdWNjZXNzOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9JUF9UWF9GQUlMVVJFOgorICAgICAgICB2YWx1ZSA9IGNvdW50ZXJzLT5tVHhGYWlsdXJlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9JUF9SWF9GQUlMVVJFOgorICAgICAgICB2YWx1ZSA9IGNvdW50ZXJzLT5tUnhGYWlsdXJlOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19JTlRFUk5BTF9FUlJPUik7CisgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICAgdmFsdWUKKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NU0dfQlVGRkVSX0NPVU5URVJTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBvdEJ1ZmZlckluZm8gYnVmZmVySW5mbzsKKworICAgIG90TWVzc2FnZUdldEJ1ZmZlckluZm8obUluc3RhbmNlLCAmYnVmZmVySW5mbyk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gVG90YWwgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIEZyZWUgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIExvd3BhbiBzZW5kIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gTG93cGFuIHNlbmQgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIExvd3BhbiByZWFzc2VtYmx5IG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gTG93cGFuIHJlYXNzZW1ibHkgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIElwNiBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIElwNiBidWZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gTXBsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gTXBsIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBNbGUgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAvLyBNbGUgYnVmZmVycworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIEFycCBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIEFycCBidWZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MgICAgLy8gQ29hcCBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgIC8vIENvYXAgYnVmZmVycworICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1Ub3RhbEJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubUZyZWVCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm02bG9TZW5kTWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubTZsb1NlbmRCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm02bG9SZWFzc2VtYmx5TWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubTZsb1JlYXNzZW1ibHlCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1JcDZNZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tSXA2QnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tTXBsTWVzc2FnZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubU1wbEJ1ZmZlcnMsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8ubU1sZU1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1NbGVCdWZmZXJzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1BcnBNZXNzYWdlcywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tQXJwQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mby5tQ29hcE1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmZvLm1Db2FwQnVmZmVycworICAgICAgICAgICAgICAgICkpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVTZW5kKCkpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfREVCVUdfVEVTVF9BU1NFUlQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIGFzc2VydChmYWxzZSk7CisKKyAgICAvLyBXZSBvbmx5IGdldCB0byB0aGlzIHBvaW50IGlmIGBhc3NlcnQoZmFsc2UpYAorICAgIC8vIGRvZXMgbm90IGNhdXNlIGFuIE5DUCByZXNldCBvbiB0aGUgcGxhdGZvcm0uCisgICAgLy8gSW4gc3VjaCBhIGNhc2Ugd2UgcmV0dXJuIGBmYWxzZWAgYXMgdGhlCisgICAgLy8gcHJvcGVydHkgdmFsdWUgdG8gaW5kaWNhdGUgdGhpcy4KKworICAgIE9UX1VOUkVBQ0hBQkxFX0NPREUoCisgICAgICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICApOworICAgICkKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfREVCVUdfTkNQX0xPR19MRVZFTCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgdWludDhfdCBsb2dMZXZlbCA9IDA7CisKKyAgICBzd2l0Y2ggKG90R2V0RHluYW1pY0xvZ0xldmVsKG1JbnN0YW5jZSkpCisgICAgeworICAgIGNhc2UgT1RfTE9HX0xFVkVMX05PTkU6CisgICAgICAgIGxvZ0xldmVsID0gU1BJTkVMX05DUF9MT0dfTEVWRUxfRU1FUkc7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfTEVWRUxfQ1JJVDoKKyAgICAgICAgbG9nTGV2ZWwgPSBTUElORUxfTkNQX0xPR19MRVZFTF9DUklUOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1RfTE9HX0xFVkVMX1dBUk46CisgICAgICAgIGxvZ0xldmVsID0gU1BJTkVMX05DUF9MT0dfTEVWRUxfV0FSTjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9UX0xPR19MRVZFTF9JTkZPOgorICAgICAgICBsb2dMZXZlbCA9IFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0lORk87CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPVF9MT0dfTEVWRUxfREVCRzoKKyAgICAgICAgbG9nTGV2ZWwgPSBTUElORUxfTkNQX0xPR19MRVZFTF9ERUJVRzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBsb2dMZXZlbAorICAgICAgICAgICApOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9NQUNfV0hJVEVMSVNUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICBvdE1hY1doaXRlbGlzdEVudHJ5IGVudHJ5OworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IHRydWU7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZUJlZ2luKCkpOworICAgIFN1Y2Nlc3NPckV4aXQoCisgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUywKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgICAgICBhS2V5CisgICAgICAgICAgICAgICAgKSk7CisKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IChpICE9IDI1NSkgJiYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpOyBpKyspCisgICAgeworICAgICAgICBlcnJvciA9IG90TGlua0dldFdoaXRlbGlzdEVudHJ5KG1JbnN0YW5jZSwgaSwgJmVudHJ5KTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW50cnkubVZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVudHJ5Lm1GaXhlZFJzc2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW50cnkubVJzc2kgPSBSU1NJX09WRVJSSURFX0RJU0FCTEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICAgICAgICAgIGVycm9yID0gT3V0Ym91bmRGcmFtZUZlZWRQYWNrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUyAgIC8vIEV4dGVuZGVkIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUyAgICAvLyBSc3NpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5tRXh0QWRkcmVzcy5tOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5tUnNzaQorICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IGZhbHNlOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1dISVRFTElTVF9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgb3RMaW5rSXNXaGl0ZWxpc3RFbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0JMQUNLTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgb3RNYWNCbGFja2xpc3RFbnRyeSBlbnRyeTsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIG1EaXNhYmxlU3RyZWFtV3JpdGUgPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IE91dGJvdW5kRnJhbWVCZWdpbigpKTsKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MsCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgYUtleQorICAgICAgICAgICAgICAgICkpOworCisgICAgZm9yICh1aW50OF90IGkgPSAwOyAoaSAhPSAyNTUpICYmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKTsgaSsrKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdExpbmtHZXRCbGFja2xpc3RFbnRyeShtSW5zdGFuY2UsIGksICZlbnRyeSk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVudHJ5Lm1WYWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgU3VjY2Vzc09yRXhpdCgKKyAgICAgICAgICAgICAgICBlcnJvciA9IE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MgICAvLyBFeHRlbmRlZCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5tRXh0QWRkcmVzcy5tOAorICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgbURpc2FibGVTdHJlYW1Xcml0ZSA9IGZhbHNlOworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0JMQUNLTElTVF9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgb3RMaW5rSXNCbGFja2xpc3RFbmFibGVkKG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9QU0tDKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgb3RUaHJlYWRHZXRQU0tjKG1JbnN0YW5jZSksCisgICAgICAgICAgICAgICBzaXplb2Yoc3BpbmVsX25ldF9wc2tjX3QpCisgICAgICAgICAgICk7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX01PREUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHVpbnQ4X3QgbnVtZXJpY01vZGU7CisgICAgb3RMaW5rTW9kZUNvbmZpZyBtb2RlQ29uZmlnID0gb3RUaHJlYWRHZXRMaW5rTW9kZShtSW5zdGFuY2UpOworCisgICAgbnVtZXJpY01vZGUgPSBMaW5rRmxhZ3NUb0ZsYWdCeXRlKG1vZGVDb25maWcubVJ4T25XaGVuSWRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZUNvbmZpZy5tU2VjdXJlRGF0YVJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlQ29uZmlnLm1EZXZpY2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlQ29uZmlnLm1OZXR3b3JrRGF0YSk7CisKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIG51bWVyaWNNb2RlCisgICAgICAgICAgICk7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0NISUxEX0NPVU5UX01BWCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldE1heEFsbG93ZWRDaGlsZHJlbihtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DSElMRF9USU1FT1VUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldENoaWxkVGltZW91dChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9STE9DMTYodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0UmxvYzE2KG1JbnN0YW5jZSkKKyAgICAgICAgICAgKTsKK30KKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldFJvdXRlclNlbGVjdGlvbkppdHRlcihtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICBvdFRocmVhZEdldENvbnRleHRJZFJldXNlRGVsYXkobUluc3RhbmNlKQorICAgICAgICAgICApOworfQorCitvdEVycm9yIE5jcEJhc2U6OkdldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTkVUV09SS19JRF9USU1FT1VUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSkKK3sKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgIG90VGhyZWFkR2V0TmV0d29ya0lkVGltZW91dChtSW5zdGFuY2UpCisgICAgICAgICAgICk7Cit9CisjZW5kaWYgIC8vIE9QRU5USFJFQURfRlRECisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgYm9vbCBlbmFibGVkID0gZmFsc2U7CisKKyAgICBpZiAob3RDb21taXNzaW9uZXJHZXRTdGF0ZShtSW5zdGFuY2UpID09IE9UX0NPTU1JU1NJT05FUl9TVEFURV9BQ1RJVkUpCisgICAgeworICAgICAgICBlbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgZW5hYmxlZAorICAgICAgICAgICApOworfQorI2VuZGlmCisKK290RXJyb3IgTmNwQmFzZTo6R2V0UHJvcGVydHlIYW5kbGVyX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5KQoreworICAgIHJldHVybiBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICBtUmVxdWlyZUpvaW5FeGlzdGluZ05ldHdvcmsKKyAgICAgICAgICAgKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorb3RFcnJvciBOY3BCYXNlOjpHZXRQcm9wZXJ0eUhhbmRsZXJfTkVTVF9MRUdBQ1lfVUxBX1BSRUZJWCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpCit7CisgICAgcmV0dXJuIFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgIG1MZWdhY3lVbGFQcmVmaXgsCisgICAgICAgICAgICAgICBzaXplb2YobUxlZ2FjeVVsYVByZWZpeCkKKyAgICAgICAgICAgKTsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogSW5kaXZpZHVhbCBQcm9wZXJ0eSBTZXR0ZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK290RXJyb3IgTmNwQmFzZTo6U2VuZFNldFByb3BlcnR5UmVzcG9uc2UodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBvdEVycm9yIGFFcnJvcikKK3sKKyAgICBpZiAoYUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBhRXJyb3IgPSBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoYUhlYWRlciwgYUtleSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFFcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoYUVycm9yKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFFcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfUE9XRVJfU1RBVEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgLy8gVE9ETzogSW1wbGVtZW50IFBPV0VSX1NUQVRFCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhVmFsdWVQdHIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhVmFsdWVMZW4pOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX0hPU1RfUE9XRVJfU1RBVEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHZhbHVlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChwYXJzZWRMZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09GRkxJTkU6CisgICAgICAgIGNhc2UgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfREVFUF9TTEVFUDoKKyAgICAgICAgY2FzZSBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9MT1dfUE9XRVI6CisgICAgICAgIGNhc2UgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfT05MSU5FOgorICAgICAgICAgICAgLy8gQWRvcHQgdGhlIHJlcXVlc3RlZCBwb3dlciBzdGF0ZS4KKyAgICAgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZSA9IHN0YXRpY19jYXN0PHNwaW5lbF9ob3N0X3Bvd2VyX3N0YXRlX3Q+KHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfUkVTRVJWRUQ6CisgICAgICAgICAgICAvLyBQZXIgdGhlIHNwZWNpZmljYXRpb24sIHRyZWF0IHRoaXMgYXMgc3lub255bW91cyB3aXRoIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVAuCisgICAgICAgICAgICBtSG9zdFBvd2VyU3RhdGUgPSBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9ERUVQX1NMRUVQOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFBlciB0aGUgc3BlY2lmaWNhdGlvbiwgdHJlYXQgdW5yZWNvZ25pemVkIHZhbHVlcyBhcyBzeW5vbnltb3VzIHdpdGggU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfTE9XX1BPV0VSLgorICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlID0gU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfTE9XX1BPV0VSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIG1Ib3N0UG93ZXJTdGF0ZUhlYWRlciA9IDA7CisKKyAgICAgICAgZXJyb3IgPSBIYW5kbGVDb21tYW5kUHJvcGVydHlHZXQoYUhlYWRlciwgYUtleSk7CisKKyAgICAgICAgaWYgKG1Ib3N0UG93ZXJTdGF0ZSAhPSBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9PTkxJTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Ib3N0UG93ZXJSZXBseUZyYW1lVGFnID0gR2V0TGFzdE91dGJvdW5kRnJhbWVUYWcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSG9zdFBvd2VyUmVwbHlGcmFtZVRhZyA9IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgbUhvc3RQb3dlclN0YXRlSGVhZGVyID0gYUhlYWRlcjsKKworICAgICAgICAgICAgLy8gVGhlIHJlcGx5IHdpbGwgYmUgcXVldWVkIHdoZW4gYnVmZmVyIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlCisgICAgICAgICAgICAvLyBpbiB0aGUgTkNQIHR4IGJ1ZmZlciBzbyB3ZSByZXR1cm4gYHN1Y2Nlc3NgIHRvIGF2b2lkIHNlbmRpbmcgYQorICAgICAgICAgICAgLy8gTk9NRU0gc3RhdHVzIGZvciB0aGUgc2FtZSB0aWQgdGhyb3VnaCBgbURyb3BwZWRSZXBseVRpZGAgbGlzdC4KKworICAgICAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9QSFlfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIHZhbHVlID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBpZiAodmFsdWUgPT0gZmFsc2UpCisgICAgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIHJhdyBzdHJlYW0gZW5hYmxlZCBzdG9wIHJlY2VpdmluZworICAgICAgICBpZiAobUlzUmF3U3RyZWFtRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3RMaW5rUmF3U2xlZXAobUluc3RhbmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yID0gb3RMaW5rUmF3U2V0RW5hYmxlKG1JbnN0YW5jZSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90TGlua1Jhd1NldEVuYWJsZShtSW5zdGFuY2UsIHRydWUpOworCisgICAgICAgIC8vIElmIHdlIGhhdmUgcmF3IHN0cmVhbSBlbmFibGVkIGFscmVhZHksIHN0YXJ0IHJlY2VpdmluZworICAgICAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSAmJiBtSXNSYXdTdHJlYW1FbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90TGlua1Jhd1JlY2VpdmUobUluc3RhbmNlLCBtQ3VyUmVjZWl2ZUNoYW5uZWwsICZOY3BCYXNlOjpMaW5rUmF3UmVjZWl2ZURvbmUpOworICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfUEhZX1RYX1BPV0VSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBpbnQ4X3QgdmFsdWUgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RMaW5rU2V0TWF4VHJhbnNtaXRQb3dlcihtSW5zdGFuY2UsIHZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9QSFlfQ0hBTih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90TGlua1NldENoYW5uZWwobUluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50OF90PihjaGFubmVsKSk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworCisgICAgLy8gQ2FjaGUgdGhlIGNoYW5uZWwuIElmIHRoZSByYXcgbGluayBsYXllciBpc24ndCBlbmFibGVkIHlldCwgdGhlIG90U2V0Q2hhbm5lbCBjYWxsCisgICAgLy8gZG9lc24ndCBjYWxsIGludG8gdGhlIHJhZGlvIGxheWVyIHRvIHNldCB0aGUgY2hhbm5lbC4gV2Ugd2lsbCBoYXZlIHRvIGRvIGl0CisgICAgLy8gbWFudWFsbHkgd2hlbmV2ZXIgdGhlIHJhZGlvcyBhcmUgZW5hYmxlZCBhbmQvb3IgcmF3IHN0cmVhbSBpcyBlbmFibGVkLgorICAgIG1DdXJSZWNlaXZlQ2hhbm5lbCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNoYW5uZWwpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSB1cGRhdGUgdGhlIHJlY2VpdmluZyBjaGFubmVsIGlmIHJhdyBsaW5rIGlzIGVuYWJsZWQgYW5kIHdlIGhhdmUgcmF3CisgICAgLy8gc3RyZWFtIGVuYWJsZWQgYWxyZWFkeQorICAgIGlmIChvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKSAmJiBtSXNSYXdTdHJlYW1FbmFibGVkKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdSZWNlaXZlKG1JbnN0YW5jZSwgbUN1clJlY2VpdmVDaGFubmVsLCAmTmNwQmFzZTo6TGlua1Jhd1JlY2VpdmVEb25lKTsKKyAgICB9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfUFJPTUlTQ1VPVVNfTU9ERSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IG1vZGUgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJm1vZGUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9PRkY6CisgICAgICAgIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMobUluc3RhbmNlLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfTkVUV09SSzoKKyAgICBjYXNlIFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9GVUxMOgorICAgICAgICBvdFBsYXRSYWRpb1NldFByb21pc2N1b3VzKG1JbnN0YW5jZSwgdHJ1ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1M7CisgICAgICAgIGJyZWFrOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfU0NBTl9NQVNLKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDMyX3QgbmV3TWFzayA9IDA7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBmb3IgKDsgYVZhbHVlTGVuICE9IDA7IGFWYWx1ZUxlbi0tLCBhVmFsdWVQdHIrKykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yRXhpdChhVmFsdWVQdHJbMF0gPD0gMzEsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgVmVyaWZ5T3JFeGl0KChtU3VwcG9ydGVkQ2hhbm5lbE1hc2sgJiAoMSA8PCBhVmFsdWVQdHJbMF0pKSAhPSAwLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAgICAgbmV3TWFzayB8PSAoMSA8PCBhVmFsdWVQdHJbMF0pOworICAgIH0KKworICAgIG1DaGFubmVsTWFzayA9IG5ld01hc2s7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1NDQU5fUEVSSU9EKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50MTZfdCBwZXJpb2QgPSBtU2NhblBlcmlvZDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcGVyaW9kCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1TY2FuUGVyaW9kID0gcGVyaW9kOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIHZhbHVlID0gbVJlcXVpcmVKb2luRXhpc3RpbmdOZXR3b3JrOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdmFsdWUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbVJlcXVpcmVKb2luRXhpc3RpbmdOZXR3b3JrID0gdmFsdWU7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworc3RhdGljIGJvb2wgSGFzT25seTFCaXRTZXQodWludDMyX3QgYVZhbHVlKQoreworICAgIHJldHVybiBhVmFsdWUgIT0gMCAmJiAoKGFWYWx1ZSAmIChhVmFsdWUgLSAxKSkgPT0gMCk7Cit9CisKK3N0YXRpYyB1aW50OF90IEluZGV4T2ZNU0IodWludDMyX3QgYVZhbHVlKQoreworICAgIHVpbnQ4X3QgaW5kZXggPSAwOworCisgICAgd2hpbGUgKGFWYWx1ZSA+Pj0gMSkKKyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgfQorCisgICAgcmV0dXJuIGluZGV4OworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfU0NBTl9TVEFURSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHN0YXRlID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZzdGF0ZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9TQ0FOX1NUQVRFX0lETEU6CisgICAgICAgIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TQ0FOX1NUQVRFX0JFQUNPTjoKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICAgICAgaWYgKG90TGlua1Jhd0lzRW5hYmxlZChtSW5zdGFuY2UpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gb3RMaW5rQWN0aXZlU2NhbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuUGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHRfSnVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworICAgICAgICBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU0NBTl9TVEFURV9FTkVSR1k6CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgIGlmIChvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCBzY2FuQ2hhbm5lbDsKKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZW4ndCBhbHJlYWR5IHNjYW5uaW5nIGFuZCB0aGF0IHdlIGhhdmUKKyAgICAgICAgICAgIC8vIG9ubHkgMSBiaXQgc2V0IGZvciB0aGUgY2hhbm5lbCBtYXNrLgorICAgICAgICAgICAgVmVyaWZ5T3JFeGl0KG1DdXJTY2FuQ2hhbm5lbCA9PSBOQ1BfSU5WQUxJRF9TQ0FOX0NIQU5ORUwsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisgICAgICAgICAgICBWZXJpZnlPckV4aXQoSGFzT25seTFCaXRTZXQobUNoYW5uZWxNYXNrKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgICAgICBzY2FuQ2hhbm5lbCA9IEluZGV4T2ZNU0IobUNoYW5uZWxNYXNrKTsKKyAgICAgICAgICAgIG1DdXJTY2FuQ2hhbm5lbCA9IChpbnQ4X3Qpc2NhbkNoYW5uZWw7CisKKyAgICAgICAgICAgIGVycm9yID0gb3RMaW5rUmF3RW5lcmd5U2NhbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNjYW5QZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUmF3RW5lcmd5U2NhbkRvbmUKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yID0gb3RMaW5rRW5lcmd5U2NhbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TY2FuUGVyaW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZUVuZXJneVNjYW5SZXN1bHRfSnVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IpOworICAgICAgICBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU0NBTl9TVEFURV9ESVNDT1ZFUjoKKyAgICAgICAgZXJyb3IgPSBvdFRocmVhZERpc2NvdmVyKAorICAgICAgICAgICAgICAgICAgICBtSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIG1DaGFubmVsTWFzaywKKyAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVNjYW5QYW5JZCwKKyAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVNjYW5Kb2luZXJGbGFnLAorICAgICAgICAgICAgICAgICAgICBtRGlzY292ZXJ5U2NhbkVuYWJsZUZpbHRlcmluZywKKyAgICAgICAgICAgICAgICAgICAgJkhhbmRsZUFjdGl2ZVNjYW5SZXN1bHRfSnVtcCwKKyAgICAgICAgICAgICAgICAgICAgdGhpcworICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvcik7CisgICAgICAgIG1TaG91bGRTaWduYWxFbmRPZlNjYW4gPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ18xNV80X1BBTklEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQxNl90IHBhbmlkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwYW5pZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90TGlua1NldFBhbklkKG1JbnN0YW5jZSwgcGFuaWQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ18xNV80X0xBRERSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIG90RXh0QWRkcmVzcyAqZXh0QWRkcmVzczsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RMaW5rU2V0RXh0ZW5kZWRBZGRyZXNzKG1JbnN0YW5jZSwgZXh0QWRkcmVzcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0RBVEFfUE9MTF9QRVJJT0QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDMyX3QgcG9sbFBlcmlvZDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcG9sbFBlcmlvZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdExpbmtTZXRQb2xsUGVyaW9kKG1JbnN0YW5jZSwgcG9sbFBlcmlvZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgaWYgKG90TGlua1Jhd0lzRW5hYmxlZChtSW5zdGFuY2UpKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90TGlua1Jhd1JlY2VpdmUobUluc3RhbmNlLCBtQ3VyUmVjZWl2ZUNoYW5uZWwsICZOY3BCYXNlOjpMaW5rUmF3UmVjZWl2ZURvbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdTbGVlcChtSW5zdGFuY2UpOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICBtSXNSYXdTdHJlYW1FbmFibGVkID0gdmFsdWU7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfMTVfNF9TQUREUih1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50MTZfdCBzaG9ydEFkZHJlc3M7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnNob3J0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90TGlua1Jhd1NldFNob3J0QWRkcmVzcyhtSW5zdGFuY2UsIHNob3J0QWRkcmVzcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfU1RSRUFNX1JBVyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3QgKmZyYW1lX2J1ZmZlciA9IE5VTEw7CisgICAgb3RSYWRpb0ZyYW1lICpmcmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgZnJhbWVMZW4gPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIFZlcmlmeU9yRXhpdChvdExpbmtSYXdJc0VuYWJsZWQobUluc3RhbmNlKSwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFKTsKKworICAgIGZyYW1lID0gb3RMaW5rUmF3R2V0VHJhbnNtaXRCdWZmZXIobUluc3RhbmNlKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX1MKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWUtPm1DaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWUtPm1Qb3dlcgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCAmJiBmcmFtZUxlbiA8PSBPVF9SQURJT19GUkFNRV9NQVhfU0laRSwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBDYWNoZSB0aGUgdHJhbnNhY3Rpb24gSUQgZm9yIGFzeW5jIHJlc3BvbnNlCisgICAgbUN1clRyYW5zbWl0VElEID0gU1BJTkVMX0hFQURFUl9HRVRfVElEKGFIZWFkZXIpOworCisgICAgLy8gVXBkYXRlIGZyYW1lIGJ1ZmZlciBhbmQgbGVuZ3RoCisgICAgZnJhbWUtPm1MZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50OF90PihmcmFtZUxlbik7CisgICAgbWVtY3B5KGZyYW1lLT5tUHNkdSwgZnJhbWVfYnVmZmVyLCBmcmFtZS0+bUxlbmd0aCk7CisKKyAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBiZSBsYXRlciBhZGRlZCBpbiB0aGUgU1RSRUFNX1JBVyBhcmd1bWVudCB0byBhbGxvdyB1c2VyIHRvIGRpcmVjdGx5IHNwZWNpZnkgaXQuCisgICAgZnJhbWUtPm1NYXhUeEF0dGVtcHRzID0gT1BFTlRIUkVBRF9DT05GSUdfTUFYX1RYX0FUVEVNUFRTX0RJUkVDVDsKKworICAgIC8vIFBhc3MgZnJhbWUgdG8gdGhlIHJhZGlvIGxheWVyLiBOb3RlLCB0aGlzIGZhaWxzIGlmIHdlCisgICAgLy8gaGF2ZW4ndCBlbmFibGVkIHJhdyBzdHJlYW0gb3IgYXJlIGFscmVhZHkgdHJhbnNtaXR0aW5nLgorICAgIGVycm9yID0gb3RMaW5rUmF3VHJhbnNtaXQobUluc3RhbmNlLCBmcmFtZSwgJk5jcEJhc2U6OkxpbmtSYXdUcmFuc21pdERvbmUpOworCitleGl0OgorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBoZXJlIHlldC4gV2Ugd2lsbCBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gd2hlbiB3ZSBnZXQgYSB0cmFuc21pdCBkb25lIGNhbGxiYWNrCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhS2V5KTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVRfSUZfVVAodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90SXA2U2V0RW5hYmxlZChtSW5zdGFuY2UsIGVuYWJsZWQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9TVEFDS19VUCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIElmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC4uLgorICAgIGlmICgoZW5hYmxlZCAhPSBmYWxzZSkgIT0gKG90VGhyZWFkR2V0RGV2aWNlUm9sZShtSW5zdGFuY2UpICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEKSkKKyAgICB7CisgICAgICAgIGlmIChlbmFibGVkICE9IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90VGhyZWFkU2V0RW5hYmxlZChtSW5zdGFuY2UsIHRydWUpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgICAgICAgICBtTGVnYWN5Tm9kZURpZEpvaW4gPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKChtTGVnYWN5SGFuZGxlcnMgIT0gTlVMTCkgJiYgKG1MZWdhY3lIYW5kbGVycy0+bVN0YXJ0TGVnYWN5ICE9IE5VTEwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1MZWdhY3lIYW5kbGVycy0+bVN0YXJ0TGVnYWN5KCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvciA9IG90VGhyZWFkU2V0RW5hYmxlZChtSW5zdGFuY2UsIGZhbHNlKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgICAgICAgICAgbUxlZ2FjeU5vZGVEaWRKb2luID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgobUxlZ2FjeUhhbmRsZXJzICE9IE5VTEwpICYmIChtTGVnYWN5SGFuZGxlcnMtPm1TdG9wTGVnYWN5ICE9IE5VTEwpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1MZWdhY3lIYW5kbGVycy0+bVN0b3BMZWdhY3koKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ORVRfUk9MRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1bnNpZ25lZCBpbnQgcm9sZSA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcm9sZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKworICAgIHN3aXRjaCAocm9sZSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRCZWNvbWVEZXRhY2hlZChtSW5zdGFuY2UpOworICAgICAgICBicmVhazsKKworI2lmIE9QRU5USFJFQURfRlRECisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfUk9VVEVSOgorICAgICAgICBlcnJvciA9IG90VGhyZWFkQmVjb21lUm91dGVyKG1JbnN0YW5jZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfTEVBREVSOgorICAgICAgICBlcnJvciA9IG90VGhyZWFkQmVjb21lTGVhZGVyKG1JbnN0YW5jZSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfQ0hJTEQ6CisgICAgICAgIGVycm9yID0gb3RUaHJlYWRCZWNvbWVDaGlsZChtSW5zdGFuY2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX05FVFdPUktfTkFNRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IE5VTEw7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZzdHJpbmcKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KChwYXJzZWRMZW5ndGggPiAwKSAmJiAoc3RyaW5nICE9IE5VTEwpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXROZXR3b3JrTmFtZShtSW5zdGFuY2UsIHN0cmluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX1hQQU5JRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IE5VTEw7CisgICAgc3BpbmVsX3NpemVfdCBsZW47CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZsZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KChwYXJzZWRMZW5ndGggPiAwKSAmJiAobGVuID09IHNpemVvZihzcGluZWxfbmV0X3hwYW5pZF90KSksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdFRocmVhZFNldEV4dGVuZGVkUGFuSWQobUluc3RhbmNlLCBwdHIpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9NQVNURVJfS0VZKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IE5VTEw7CisgICAgc3BpbmVsX3NpemVfdCBsZW47CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZsZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KChwYXJzZWRMZW5ndGggPiAwKSAmJiAobGVuID09IE9UX01BU1RFUl9LRVlfU0laRSksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdFRocmVhZFNldE1hc3RlcktleShtSW5zdGFuY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgb3RNYXN0ZXJLZXkgKj4ocHRyKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1bnNpZ25lZCBpbnQga2V5U2VxQ291bnRlcjsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICAgICAgICAma2V5U2VxQ291bnRlcgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldEtleVNlcXVlbmNlQ291bnRlcihtSW5zdGFuY2UsIGtleVNlcUNvdW50ZXIpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FVF9LRVlfU1dJVENIX0dVQVJEVElNRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdW5zaWduZWQgaW50IGtleUd1YXJkVGltZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICAgICAgICAma2V5R3VhcmRUaW1lCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90VGhyZWFkU2V0S2V5U3dpdGNoR3VhcmRUaW1lKG1JbnN0YW5jZSwga2V5R3VhcmRUaW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9MT0NBTF9MRUFERVJfV0VJR0hUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3Qgd2VpZ2h0OworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJndlaWdodAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldExvY2FsTGVhZGVyV2VpZ2h0KG1JbnN0YW5jZSwgd2VpZ2h0KTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9TVFJFQU1fTkVUX0lOU0VDVVJFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgY29uc3QgdWludDhfdCAqZnJhbWVQdHIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBmcmFtZUxlbiA9IDA7CisgICAgY29uc3QgdWludDhfdCAqbWV0YVB0ciA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IG1ldGFMZW4gPSAwOworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBTVFJFQU1fTkVUX0lOU0VDVVJFIHBhY2tldHMgYXJlIG5vdCBzZWN1cmVkIGF0IGxheWVyIDIuCisgICAgbWVzc2FnZSA9IG90SXA2TmV3TWVzc2FnZShtSW5zdGFuY2UsIGZhbHNlKTsKKyAgICBWZXJpZnlPckV4aXQobWVzc2FnZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PX0JVRlMpOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fUyAgIC8vIEZyYW1lIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MgICAgICAgIC8vIE1ldGEgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZtZXRhTGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIC8vIFdlIGlnbm9yZSBtZXRhZGF0YSBmb3Igbm93LgorICAgIC8vIE1heSBsYXRlciBpbmNsdWRlIFRYIHBvd2VyLCBhbGxvdyByZXRyYW5zbWl0cywgZXRjLi4uCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKG1ldGFQdHIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShtZXRhTGVuKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUocGFyc2VkTGVuZ3RoKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdE1lc3NhZ2VBcHBlbmQobWVzc2FnZSwgZnJhbWVQdHIsIHN0YXRpY19jYXN0PHVpbnQxNl90PihmcmFtZUxlbikpKTsKKworICAgIC8vIEVuc3VyZSB0aGUgaW5zZWN1cmUgbWVzc2FnZSBpcyBmb3J3YXJkZWQgdXNpbmcgZGlyZWN0IHRyYW5zbWlzc2lvbi4KKyAgICBvdE1lc3NhZ2VTZXREaXJlY3RUcmFuc21pc3Npb24obWVzc2FnZSwgdHJ1ZSk7CisKKyAgICBlcnJvciA9IG90SXA2U2VuZChtSW5zdGFuY2UsIG1lc3NhZ2UpOworCisgICAgLy8gYG90SXA2U2VuZCgpYCB0YWtlcyBvd25lcnNoaXAgb2YgYG1lc3NhZ2VgIChpbiBib3RoIHN1Y2Nlc3Mgb3IKKyAgICAvLyBmYWlsdXJlIGNhc2VzKS4gYG1lc3NhZ2VgIGlzIHNldCB0byBOVUxMIHNvIGl0IGlzIG5vdCBmcmVlZCBhdAorICAgIC8vIGV4aXQuCisgICAgbWVzc2FnZSA9IE5VTEw7CisKK2V4aXQ6CisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TWVzc2FnZUZyZWUobWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtSW5ib3VuZEluc2VjdXJlSXBGcmFtZUNvdW50ZXIrKzsKKworICAgICAgICBpZiAoU1BJTkVMX0hFQURFUl9HRVRfVElEKGFIZWFkZXIpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9ubHkgc2VuZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIHVwZGF0ZSBpZgorICAgICAgICAgICAgLy8gdGhlcmUgd2FzIGEgdHJhbnNhY3Rpb24gaWQgaW4gdGhlIGFIZWFkZXIuCisgICAgICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFNQSU5FTF9TVEFUVVNfT0spOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1Ecm9wcGVkSW5ib3VuZElwRnJhbWVDb3VudGVyKys7CisKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisgICAgfQorCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfVE1GX1BST1hZX1NUUkVBTSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGNvbnN0IHVpbnQ4X3QgKmZyYW1lUHRyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgZnJhbWVMZW4gPSAwOworICAgIHVpbnQxNl90IGxvY2F0b3I7CisgICAgdWludDE2X3QgcG9ydDsKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU0gcmVxdWlyZXMgbGF5ZXIgMiBzZWN1cml0eS4KKyAgICBtZXNzYWdlID0gb3RJcDZOZXdNZXNzYWdlKG1JbnN0YW5jZSwgdHJ1ZSk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX1MgIC8vIEZyYW1lIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAgICAgLy8gTG9jYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgICAvLyBQb3J0CisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAmbG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgJnBvcnQKKyAgICAgICAgICAgICAgICAgICApOworCisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RNZXNzYWdlQXBwZW5kKG1lc3NhZ2UsIGZyYW1lUHRyLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZnJhbWVMZW4pKSk7CisKKyAgICBlcnJvciA9IG90VG1mUHJveHlTZW5kKG1JbnN0YW5jZSwgbWVzc2FnZSwgbG9jYXRvciwgcG9ydCk7CisKKyAgICAvLyBgb3RUbWZQcm94eVNlbmQoKWAgdGFrZXMgb3duZXJzaGlwIG9mIGBtZXNzYWdlYCAoaW4gYm90aCBzdWNjZXNzCisgICAgLy8gb3IgZmFpbHVyZSBjYXNlcykuIGBtZXNzYWdlYCBpcyBzZXQgdG8gTlVMTCBzbyBpdCBpcyBub3QgZnJlZWQgYXQKKyAgICAvLyBleGl0LgorICAgIG1lc3NhZ2UgPSBOVUxMOworCitleGl0OgorICAgIGlmIChtZXNzYWdlICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgaWYgKFNQSU5FTF9IRUFERVJfR0VUX1RJRChhSGVhZGVyKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBPbmx5IHNlbmQgYSBzdWNjZXNzZnVsIHN0YXR1cyB1cGRhdGUgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlIHdhcyBhIHRyYW5zYWN0aW9uIGlkIGluIHRoZSBhSGVhZGVyLgorICAgICAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX09LKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUtleSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1NUUkVBTV9ORVQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBjb25zdCB1aW50OF90ICpmcmFtZVB0ciA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGZyYW1lTGVuID0gMDsKKyAgICBjb25zdCB1aW50OF90ICptZXRhUHRyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgbWV0YUxlbiA9IDA7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIFNUUkVBTV9ORVQgcmVxdWlyZXMgbGF5ZXIgMiBzZWN1cml0eS4KKyAgICBtZXNzYWdlID0gb3RJcDZOZXdNZXNzYWdlKG1JbnN0YW5jZSwgdHJ1ZSk7CisgICAgVmVyaWZ5T3JFeGl0KG1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX1MgIC8vIEZyYW1lIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1MgICAgICAgLy8gTWV0YSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAmbWV0YVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFMZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgLy8gV2UgaWdub3JlIG1ldGFkYXRhIGZvciBub3cuCisgICAgLy8gTWF5IGxhdGVyIGluY2x1ZGUgVFggcG93ZXIsIGFsbG93IHJldHJhbnNtaXRzLCBldGMuLi4KKyAgICBPVF9VTlVTRURfVkFSSUFCTEUobWV0YVB0cik7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKG1ldGFMZW4pOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShwYXJzZWRMZW5ndGgpOworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90TWVzc2FnZUFwcGVuZChtZXNzYWdlLCBmcmFtZVB0ciwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGZyYW1lTGVuKSkpOworCisgICAgZXJyb3IgPSBvdElwNlNlbmQobUluc3RhbmNlLCBtZXNzYWdlKTsKKworICAgIC8vIGBvdElwNlNlbmQoKWAgdGFrZXMgb3duZXJzaGlwIG9mIGBtZXNzYWdlYCAoaW4gYm90aCBzdWNjZXNzIG9yCisgICAgLy8gZmFpbHVyZSBjYXNlcykuIGBtZXNzYWdlYCBpcyBzZXQgdG8gTlVMTCBzbyBpdCBpcyBub3QgZnJlZWQgYXQKKyAgICAvLyBleGl0LgorICAgIG1lc3NhZ2UgPSBOVUxMOworCitleGl0OgorCisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TWVzc2FnZUZyZWUobWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtSW5ib3VuZFNlY3VyZUlwRnJhbWVDb3VudGVyKys7CisKKyAgICAgICAgaWYgKFNQSU5FTF9IRUFERVJfR0VUX1RJRChhSGVhZGVyKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBPbmx5IHNlbmQgYSBzdWNjZXNzZnVsIHN0YXR1cyB1cGRhdGUgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlIHdhcyBhIHRyYW5zYWN0aW9uIGlkIGluIHRoZSBhSGVhZGVyLgorICAgICAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBTUElORUxfU1RBVFVTX09LKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRHJvcHBlZEluYm91bmRJcEZyYW1lQ291bnRlcisrOworCisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhS2V5KTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfSVBWNl9NTF9QUkVGSVgodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBWZXJpZnlPckV4aXQoYVZhbHVlTGVuID49IDgsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdFRocmVhZFNldE1lc2hMb2NhbFByZWZpeChtSW5zdGFuY2UsIGFWYWx1ZVB0cik7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdEljbXA2U2V0RWNob0VuYWJsZWQobUluc3RhbmNlLCBlbmFibGVkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIE5vdGUgcmV2ZXJzZSBsb2dpYzogcGFzc3RocnUgZW5hYmxlZCA9IGZpbHRlciBkaXNhYmxlZAorICAgIG90SXA2U2V0UmVjZWl2ZUZpbHRlckVuYWJsZWQobUluc3RhbmNlLCAhZW5hYmxlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGpvaW5lckZsYWcgPSBmYWxzZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmpvaW5lckZsYWcKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbURpc2NvdmVyeVNjYW5Kb2luZXJGbGFnID0gam9pbmVyRmxhZzsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkID0gZmFsc2U7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1EaXNjb3ZlcnlTY2FuRW5hYmxlRmlsdGVyaW5nID0gZW5hYmxlZDsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQxNl90IHBhbmlkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZwYW5pZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBtRGlzY292ZXJ5U2NhblBhbklkID0gcGFuaWQ7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0FTU0lTVElOR19QT1JUUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3QgbnVtRW50cmllcyA9IDA7CisgICAgY29uc3QgdWludDE2X3QgKnBvcnRzID0gb3RJcDZHZXRVbnNlY3VyZVBvcnRzKG1JbnN0YW5jZSwgJm51bUVudHJpZXMpOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBib29sIHBvcnRzQ2hhbmdlZCA9IGZhbHNlOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCBvZiB0aGUgY3VycmVudCBhc3Npc3RpbmcgcG9ydHMuCisgICAgZm9yICg7IG51bUVudHJpZXMgIT0gMDsgcG9ydHMrKywgbnVtRW50cmllcy0tKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2UmVtb3ZlVW5zZWN1cmVQb3J0KG1JbnN0YW5jZSwgKnBvcnRzKSk7CisgICAgICAgIHBvcnRzQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgd2hpbGUgKGFWYWx1ZUxlbiA+PSAyKQorICAgIHsKKyAgICAgICAgdWludDE2X3QgcG9ydDsKKworICAgICAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IG90SXA2QWRkVW5zZWN1cmVQb3J0KG1JbnN0YW5jZSwgcG9ydCkpOworCisgICAgICAgIGFWYWx1ZVB0ciArPSBwYXJzZWRMZW5ndGg7CisgICAgICAgIGFWYWx1ZUxlbiAtPSBwYXJzZWRMZW5ndGg7CisKKyAgICAgICAgcG9ydHNDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBObyBlcnJvciBoYXBwZW5lZCBzbyB0aGUgbmV3IHN0YXRlIG9mIHBvcnRzIHdpbGwKKyAgICAvLyBiZSByZXBvcnRlZCBpbiB0aGUgcmVzcG9uc2UuCisgICAgcG9ydHNDaGFuZ2VkID0gZmFsc2U7CisKK2V4aXQ6CisgICAgZXJyb3IgPSBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7CisKKyAgICBpZiAocG9ydHNDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgLy8gV2UgaGFkIGFuIGVycm9yLCBidXQgd2UndmUgYWN0dWFsbHkgY2hhbmdlZAorICAgICAgICAvLyB0aGUgc3RhdGUgb2YgdGhlc2UgcG9ydHMtLS1zbyB3ZSBuZWVkIHRvIHJlcG9ydAorICAgICAgICAvLyB0aG9zZSBpbmNvbXBsZXRlIGNoYW5nZXMgdmlhIGFuIGFzeW5jaHJvbm91cworICAgICAgICAvLyBjaGFuZ2UgZXZlbnQuCisgICAgICAgIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eUdldChTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLCBhS2V5KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBib29sIHNob3VsZFJlZ2lzdGVyV2l0aExlYWRlciA9IGZhbHNlOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBSZWdpc3RlciBhbnkgbmV0IGRhdGEgY2hhbmdlcyBvbiB0cmFuc2l0aW9uIGZyb20gYHRydWVgIHRvIGBmYWxzZWAuCisgICAgc2hvdWxkUmVnaXN0ZXJXaXRoTGVhZGVyID0gKG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPT0gdHJ1ZSkgJiYgKHZhbHVlID09IGZhbHNlKTsKKworICAgIG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPSB2YWx1ZTsKKworZXhpdDoKKyAgICBlcnJvciA9IFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKKworICAgIGlmIChzaG91bGRSZWdpc3RlcldpdGhMZWFkZXIpCisgICAgeworICAgICAgICBvdEJvcmRlclJvdXRlclJlZ2lzdGVyKG1JbnN0YW5jZSk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX1JPTEVfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQ7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90VGhyZWFkU2V0Um91dGVyUm9sZUVuYWJsZWQobUluc3RhbmNlLCBlbmFibGVkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfRU5BQkxFX1NURUVSSU5HX0RBVEFfU0VUX09PQgorb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1NURUVSSU5HX0RBVEEodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIG90RXh0QWRkcmVzcyAqZXh0QWRkcmVzczsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRTdGVlcmluZ0RhdGEobUluc3RhbmNlLCBleHRBZGRyZXNzKTsKKworZXhpdDoKKworICAgIGlmIChlcnJvciA9PSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGdldCBoYW5kbGVyIGZvciB0aGlzIHByb3BlcnR5LgorICAgICAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRBZGRyZXNzLT5tOAorICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9TVEVFUklOR19EQVRBX1NFVF9PT0IKKyNlbmRpZiAvLyAjaWYgT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfQ05UUl9SRVNFVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3QgdmFsdWUgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIFZlcmlmeU9yRXhpdCh2YWx1ZSA9PSAxLCBlcnJvciA9IE9UX0VSUk9SX0lOVkFMSURfQVJHUyk7CisKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY291bnRlciByZXNldCEKKyAgICBlcnJvciA9IE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKworZXhpdDoKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYUtleSk7CisKKyAgICAvLyBUaGVyZSBpcyBjdXJyZW50bHkgbm8gZ2V0dGVyIGZvciBQUk9QX0NOVFJfUkVTRVQsIHNvIHdlIGp1c3QKKyAgICAvLyByZXR1cm4gU1BJTkVMX1NUQVRVU19PSyBmb3Igc3VjY2VzcyB3aGVuIHRoZSBjb3VudGVycyBhcmUgcmVzZXQuCisKKyAgICByZXR1cm4gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQ09NTUlTU0lPTkVSICYmIE9QRU5USFJFQURfRlRECisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKGVuYWJsZWQgPT0gZmFsc2UpCisgICAgeworICAgICAgICBlcnJvciA9IG90Q29tbWlzc2lvbmVyU3RvcChtSW5zdGFuY2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnJvciA9IG90Q29tbWlzc2lvbmVyU3RhcnQobUluc3RhbmNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFLZXkpOworCisgICAgcmV0dXJuIFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUiAmJiBPUEVOVEhSRUFEX0ZURAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfV0hJVEVMSVNUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCByZXBvcnRBc3luYzsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBGaXJzdCwgY2xlYXIgdGhlIHdoaXRlbGlzdC4KKyAgICBvdExpbmtDbGVhcldoaXRlbGlzdChtSW5zdGFuY2UpOworCisgICAgd2hpbGUgKGFWYWx1ZUxlbiA+IDApCisgICAgeworICAgICAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3MgPSBOVUxMOworICAgICAgICBpbnQ4X3QgcnNzaSA9IFJTU0lfT1ZFUlJJREVfRElTQUJMRUQ7CisKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZyc3NpCisgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKHBhcnNlZExlbmd0aCA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByc3NpID0gUlNTSV9PVkVSUklERV9ESVNBQkxFRDsKKyAgICAgICAgICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgICAgICBpZiAocnNzaSA9PSBSU1NJX09WRVJSSURFX0RJU0FCTEVEKQorICAgICAgICB7CisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gb3RMaW5rQWRkV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcmVzcy0+bTgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdExpbmtBZGRXaGl0ZWxpc3RSc3NpKG1JbnN0YW5jZSwgZXh0QWRkcmVzcy0+bTgsIHJzc2kpKTsKKyAgICAgICAgfQorCisgICAgICAgIGFWYWx1ZVB0ciArPSBwYXJzZWRMZW5ndGg7CisgICAgICAgIGFWYWx1ZUxlbiAtPSBwYXJzZWRMZW5ndGg7CisgICAgfQorCitleGl0OgorICAgIC8vIElmIHdlIGhhZCBhbiBlcnJvciwgd2UgbWF5IGhhdmUgYWN0dWFsbHkgY2hhbmdlZAorICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGUgd2hpdGVsaXN0LS0tc28gd2UgbmVlZCB0byByZXBvcnQKKyAgICAvLyB0aG9zZSBpbmNvbXBsZXRlIGNoYW5nZXMgdmlhIGFuIGFzeW5jaHJvbm91cworICAgIC8vIGNoYW5nZSBldmVudC4KKyAgICByZXBvcnRBc3luYyA9IChlcnJvciAhPSBPVF9FUlJPUl9OT05FKTsKKworICAgIGVycm9yID0gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworCisgICAgaWYgKHJlcG9ydEFzeW5jKQorICAgIHsKKyAgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsIGFLZXkpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1dISVRFTElTVF9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQ7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TGlua1NldFdoaXRlbGlzdEVuYWJsZWQobUluc3RhbmNlLCBlbmFibGVkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9NQUNfQkxBQ0tMSVNUKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCByZXBvcnRBc3luYzsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICAvLyBGaXJzdCwgY2xlYXIgdGhlIGJsYWNrbGlzdC4KKyAgICBvdExpbmtDbGVhckJsYWNrbGlzdChtSW5zdGFuY2UpOworCisgICAgd2hpbGUgKGFWYWx1ZUxlbiA+IDApCisgICAgeworICAgICAgICBvdEV4dEFkZHJlc3MgKmV4dF9hZGRyID0gTlVMTDsKKworICAgICAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TCisgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dF9hZGRyCisgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdExpbmtBZGRCbGFja2xpc3QobUluc3RhbmNlLCBleHRfYWRkci0+bTgpKTsKKworICAgICAgICBhVmFsdWVQdHIgKz0gcGFyc2VkTGVuZ3RoOworICAgICAgICBhVmFsdWVMZW4gLT0gcGFyc2VkTGVuZ3RoOworICAgIH0KKworZXhpdDoKKyAgICAvLyBJZiB3ZSBoYWQgYW4gZXJyb3IsIHdlIG1heSBoYXZlIGFjdHVhbGx5IGNoYW5nZWQKKyAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIGJsYWNrbGlzdC0tLXNvIHdlIG5lZWQgdG8gcmVwb3J0CisgICAgLy8gdGhvc2UgaW5jb21wbGV0ZSBjaGFuZ2VzIHZpYSBhbiBhc3luY2hyb25vdXMKKyAgICAvLyBjaGFuZ2UgZXZlbnQuCisgICAgcmVwb3J0QXN5bmMgPSAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSk7CisKKyAgICBlcnJvciA9IFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKKworICAgIGlmIChyZXBvcnRBc3luYykKKyAgICB7CisgICAgICAgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsIGFLZXkpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX0JMQUNLTElTVF9FTkFCTEVEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQ7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90TGlua1NldEJsYWNrbGlzdEVuYWJsZWQobUluc3RhbmNlLCBlbmFibGVkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19TUkNfTUFUQ0hfRU5BQkxFRCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgYm9vbCBlbmFibGVkOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90TGlua1Jhd1NyY01hdGNoRW5hYmxlKG1JbnN0YW5jZSwgZW5hYmxlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBjb25zdCB1aW50OF90ICpkYXRhID0gYVZhbHVlUHRyOworICAgIHVpbnQxNl90IGRhdGFMZW4gPSBhVmFsdWVMZW47CisKKyAgICAvLyBDbGVhciB0aGUgbGlzdCBmaXJzdAorICAgIGVycm9yID0gb3RMaW5rUmF3U3JjTWF0Y2hDbGVhclNob3J0RW50cmllcyhtSW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBhZGRyZXNzZXMgYW5kIGFkZCB0aGVtCisgICAgd2hpbGUgKGRhdGFMZW4gPj0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICB7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICAgICAgdWludDE2X3Qgc2hvcnRfYWRkcmVzczsKKworICAgICAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hvcnRfYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgICAgIGRhdGEgKz0gcGFyc2VkTGVuZ3RoOworICAgICAgICBkYXRhTGVuIC09ICh1aW50MTZfdClwYXJzZWRMZW5ndGg7CisKKyAgICAgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaEFkZFNob3J0RW50cnkobUluc3RhbmNlLCBzaG9ydF9hZGRyZXNzKTsKKworICAgICAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisgICAgfQorCisgICAgZXJyb3IgPQorICAgICAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX01BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IGFWYWx1ZVB0cjsKKyAgICB1aW50MTZfdCBkYXRhTGVuID0gYVZhbHVlTGVuOworCisgICAgLy8gQ2xlYXIgdGhlIGxpc3QgZmlyc3QKKyAgICBlcnJvciA9IG90TGlua1Jhd1NyY01hdGNoQ2xlYXJFeHRFbnRyaWVzKG1JbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICAvLyBMb29wIHRocm91Z2ggdGhlIGFkZHJlc3NlcyBhbmQgYWRkIHRoZW0KKyAgICB3aGlsZSAoZGF0YUxlbiA+PSBzaXplb2Yob3RFeHRBZGRyZXNzKSkKKyAgICB7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICAgICAgdWludDhfdCAqZXh0QWRkcmVzczsKKworICAgICAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICAgICAgZGF0YSArPSBwYXJzZWRMZW5ndGg7CisgICAgICAgIGRhdGFMZW4gLT0gKHVpbnQxNl90KXBhcnNlZExlbmd0aDsKKworICAgICAgICBlcnJvciA9IG90TGlua1Jhd1NyY01hdGNoQWRkRXh0RW50cnkobUluc3RhbmNlLCBleHRBZGRyZXNzKTsKKworICAgICAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisgICAgfQorCisgICAgZXJyb3IgPQorICAgICAgICBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lTLAorICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZgorCisjaWYgT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfTkVUX1BTS0ModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgY29uc3QgdWludDhfdCAqcHRyID0gTlVMTDsKKyAgICBzcGluZWxfc2l6ZV90IGxlbjsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmxlbgorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQoKHBhcnNlZExlbmd0aCA+IDApICYmIChsZW4gPT0gc2l6ZW9mKHNwaW5lbF9uZXRfcHNrY190KSksIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdFRocmVhZFNldFBTS2MobUluc3RhbmNlLCBwdHIpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfTU9ERSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IG51bWVyaWNNb2RlID0gMDsKKyAgICBvdExpbmtNb2RlQ29uZmlnIG1vZGVDb25maWc7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJpY01vZGUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgbW9kZUNvbmZpZy5tUnhPbldoZW5JZGxlID0gKChudW1lcmljTW9kZSAmIFNQSU5FTF9USFJFQURfTU9ERV9SWF9PTl9XSEVOX0lETEUpID09IFNQSU5FTF9USFJFQURfTU9ERV9SWF9PTl9XSEVOX0lETEUpOworICAgIG1vZGVDb25maWcubVNlY3VyZURhdGFSZXF1ZXN0cyA9CisgICAgICAgICgobnVtZXJpY01vZGUgJiBTUElORUxfVEhSRUFEX01PREVfU0VDVVJFX0RBVEFfUkVRVUVTVCkgPT0gU1BJTkVMX1RIUkVBRF9NT0RFX1NFQ1VSRV9EQVRBX1JFUVVFU1QpOworICAgIG1vZGVDb25maWcubURldmljZVR5cGUgPSAoKG51bWVyaWNNb2RlICYgU1BJTkVMX1RIUkVBRF9NT0RFX0ZVTExfRlVOQ1RJT05fREVWKSA9PSBTUElORUxfVEhSRUFEX01PREVfRlVMTF9GVU5DVElPTl9ERVYpOworICAgIG1vZGVDb25maWcubU5ldHdvcmtEYXRhID0gKChudW1lcmljTW9kZSAmIFNQSU5FTF9USFJFQURfTU9ERV9GVUxMX05FVFdPUktfREFUQSkgPT0gU1BJTkVMX1RIUkVBRF9NT0RFX0ZVTExfTkVUV09SS19EQVRBKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRMaW5rTW9kZShtSW5zdGFuY2UsIG1vZGVDb25maWcpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQ0hJTERfQ09VTlRfTUFYKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCBtYXhDaGlsZHJlbiA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmbWF4Q2hpbGRyZW4KKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgZXJyb3IgPSBvdFRocmVhZFNldE1heEFsbG93ZWRDaGlsZHJlbihtSW5zdGFuY2UsIG1heENoaWxkcmVuKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfQ0hJTERfVElNRU9VVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50MzJfdCB0aW1lb3V0ID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdGltZW91dAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldENoaWxkVGltZW91dChtSW5zdGFuY2UsIHRpbWVvdXQpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHRocmVzaG9sZCA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdGhyZXNob2xkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90VGhyZWFkU2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChtSW5zdGFuY2UsIHRocmVzaG9sZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHRocmVzaG9sZCA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmdGhyZXNob2xkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG90VGhyZWFkU2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKG1JbnN0YW5jZSwgdGhyZXNob2xkKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3Qgaml0dGVyID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZqaXR0ZXIKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RUaHJlYWRTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIobUluc3RhbmNlLCBqaXR0ZXIpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3Qgcm91dGVySWQgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnJvdXRlcklkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRTZXRQcmVmZXJyZWRSb3V0ZXJJZChtSW5zdGFuY2UsIHJvdXRlcklkKTsKKworZXhpdDoKKyAgICBpZiAoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcklkCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2VuZGlmICAvLyBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9ERUJVR19OQ1BfTE9HX0xFVkVMKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCBzcGluZWxOY3BMb2dMZXZlbCA9IDA7CisgICAgb3RMb2dMZXZlbCBsb2dMZXZlbDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZzcGluZWxOY3BMb2dMZXZlbAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBzd2l0Y2ggKHNwaW5lbE5jcExvZ0xldmVsKQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0VNRVJHOgorICAgIGNhc2UgU1BJTkVMX05DUF9MT0dfTEVWRUxfQUxFUlQ6CisgICAgICAgIGxvZ0xldmVsID0gT1RfTE9HX0xFVkVMX05PTkU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkNQX0xPR19MRVZFTF9DUklUOgorICAgICAgICBsb2dMZXZlbCA9IE9UX0xPR19MRVZFTF9DUklUOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX05DUF9MT0dfTEVWRUxfRVJSOgorICAgIGNhc2UgU1BJTkVMX05DUF9MT0dfTEVWRUxfV0FSTjoKKyAgICAgICAgbG9nTGV2ZWwgPSBPVF9MT0dfTEVWRUxfV0FSTjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX05PVElDRToKKyAgICBjYXNlIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0lORk86CisgICAgICAgIGxvZ0xldmVsID0gT1RfTE9HX0xFVkVMX0lORk87CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkNQX0xPR19MRVZFTF9ERUJVRzoKKyAgICAgICAgbG9nTGV2ZWwgPSBPVF9MT0dfTEVWRUxfREVCRzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFeGl0Tm93KGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9BUkdTKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZXJyb3IgPSBvdFNldER5bmFtaWNMb2dMZXZlbChtSW5zdGFuY2UsIGxvZ0xldmVsKTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjaWYgT1BFTlRIUkVBRF9GVEQKKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDMyX3QgZGVsYXkgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZkZWxheQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBvdFRocmVhZFNldENvbnRleHRJZFJldXNlRGVsYXkobUluc3RhbmNlLCBkZWxheSk7CisKKyBleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICB1aW50OF90IHRpbWVvdXQgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgb3RUaHJlYWRTZXROZXR3b3JrSWRUaW1lb3V0KG1JbnN0YW5jZSwgdGltZW91dCk7CisKKyBleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9USFJFQURfVE1GX1BST1hZX0VOQUJMRUQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIGJvb2wgZW5hYmxlZDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIGVycm9yID0gT1RfRVJST1JfUEFSU0UpOworCisgICAgaWYgKGVuYWJsZWQpCisgICAgeworICAgICAgICBlcnJvciA9IG90VG1mUHJveHlTdGFydChtSW5zdGFuY2UsICZOY3BCYXNlOjpIYW5kbGVUbWZQcm94eVN0cmVhbSwgdGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RUbWZQcm94eVN0b3AobUluc3RhbmNlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1RNRl9QUk9YWSAmJiBPUEVOVEhSRUFEX0ZURAorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfSkFNX0RFVEVDVElPTgorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX0VOQUJMRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBib29sIGVuYWJsZWQ7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9CT09MX1MsCisgICAgICAgICAgICAgICAgICAgICAgICZlbmFibGVkCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIGlmIChlbmFibGVkKQorICAgIHsKKyAgICAgICAgb3RKYW1EZXRlY3Rpb25TdGFydChtSW5zdGFuY2UsICZOY3BCYXNlOjpIYW5kbGVKYW1TdGF0ZUNoYW5nZV9KdW1wLCB0aGlzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3RKYW1EZXRlY3Rpb25TdG9wKG1JbnN0YW5jZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX0pBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBpbnQ4X3QgdGhyZXNob2xkID0gMDsKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnRocmVzaG9sZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90SmFtRGV0ZWN0aW9uU2V0UnNzaVRocmVzaG9sZChtSW5zdGFuY2UsIHRocmVzaG9sZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIFNlbmRTZXRQcm9wZXJ0eVJlc3BvbnNlKGFIZWFkZXIsIGFLZXksIGVycm9yKTsKK30KKworb3RFcnJvciBOY3BCYXNlOjpTZXRQcm9wZXJ0eUhhbmRsZXJfSkFNX0RFVEVDVF9XSU5ET1codWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgdWludDhfdCB3aW5kb3cgPSAwOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvdworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90SmFtRGV0ZWN0aW9uU2V0V2luZG93KG1JbnN0YW5jZSwgd2luZG93KTsKKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCitvdEVycm9yIE5jcEJhc2U6OlNldFByb3BlcnR5SGFuZGxlcl9KQU1fREVURUNUX0JVU1kodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHVpbnQ4X3QgYnVzeSA9IDA7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmYnVzeQorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9QQVJTRSk7CisKKyAgICBlcnJvciA9IG90SmFtRGV0ZWN0aW9uU2V0QnVzeVBlcmlvZChtSW5zdGFuY2UsIGJ1c3kpOworCitleGl0OgorICAgIHJldHVybiBTZW5kU2V0UHJvcGVydHlSZXNwb25zZShhSGVhZGVyLCBhS2V5LCBlcnJvcik7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlSmFtU3RhdGVDaGFuZ2VfSnVtcChib29sIGFKYW1TdGF0ZSwgdm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwQmFzZSAqPihhQ29udGV4dCktPkhhbmRsZUphbVN0YXRlQ2hhbmdlKGFKYW1TdGF0ZSk7Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlSmFtU3RhdGVDaGFuZ2UoYm9vbCBhSmFtU3RhdGUpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RFRCwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUywKKyAgICAgICAgICAgICAgICAgICAgYUphbVN0YXRlCisgICAgICAgICAgICAgICAgKTsKKworICAgIC8vIElmIHdlIGNvdWxkIG5vdCBzZW5kIHRoZSBqYW0gc3RhdGUgY2hhbmdlIGluZGljYXRvciAobm8KKyAgICAvLyBidWZmZXIgc3BhY2UpLCB3ZSBzZXQgYG1TaG91bGRTaWduYWxKYW1TdGF0ZUNoYW5nZWAgdG8gdHJ1ZSB0byBzZW5kCisgICAgLy8gaXQgb3V0IHdoZW4gYnVmZmVyIHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlLgorICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbVNob3VsZFNpZ25hbEphbVN0YXRlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FU1RfU1RSRUFNX01GRyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgY2hhciAqc3RyaW5nID0gTlVMTDsKKyAgICBjaGFyICpvdXRwdXQgPSBOVUxMOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TLAorICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5nCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmICgocGFyc2VkTGVuZ3RoID4gMCkgJiYgKHN0cmluZyAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIC8vIGFsbCBkaWFnbm9zdGljcyByZWxhdGVkIGZlYXR1cmVzIGFyZSBwcm9jZXNzZWQgd2l0aGluIGRpYWdub3N0aWNzIG1vZHVsZQorICAgICAgICBvdXRwdXQgPSBvdERpYWdQcm9jZXNzQ21kTGluZShzdHJpbmcpOworCisgICAgICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4ob3V0cHV0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihzdHJsZW4ob3V0cHV0KSArIDEpCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfRElBRworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisKK290RXJyb3IgTmNwQmFzZTo6U2V0UHJvcGVydHlIYW5kbGVyX05FU1RfTEVHQUNZX1VMQV9QUkVGSVgodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBjb25zdCB1aW50OF90ICpwdHIgPSBOVUxMOworICAgIHNwaW5lbF9zaXplX3QgbGVuOworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgICAgICAgICAgICAmcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmbGVuCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdCgocGFyc2VkTGVuZ3RoID4gMCkgJiYgKGxlbiA8PSBzaXplb2YobUxlZ2FjeVVsYVByZWZpeCkpLCBlcnJvciA9IE9UX0VSUk9SX1BBUlNFKTsKKworICAgIG1lbXNldChtTGVnYWN5VWxhUHJlZml4LCAwLCBzaXplb2YobUxlZ2FjeVVsYVByZWZpeCkpOworICAgIG1lbWNweShtTGVnYWN5VWxhUHJlZml4LCBwdHIsIGxlbik7CisKKyAgICBpZiAoKG1MZWdhY3lIYW5kbGVycyAhPSBOVUxMKSAmJiAobUxlZ2FjeUhhbmRsZXJzLT5tU2V0TGVnYWN5VWxhUHJlZml4ICE9IE5VTEwpKQorICAgIHsKKyAgICAgICAgbUxlZ2FjeUhhbmRsZXJzLT5tU2V0TGVnYWN5VWxhUHJlZml4KG1MZWdhY3lVbGFQcmVmaXgpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gU2VuZFNldFByb3BlcnR5UmVzcG9uc2UoYUhlYWRlciwgYUtleSwgZXJyb3IpOworfQorCisjZW5kaWYgIC8vIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBJbmRpdmlkdWFsIFByb3BlcnR5IEluc2VydGVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIHVpbnQxNl90IHNob3J0X2FkZHJlc3M7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmc2hvcnRfYWRkcmVzcworICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGVycm9yID0gb3RMaW5rUmF3U3JjTWF0Y2hBZGRTaG9ydEVudHJ5KG1JbnN0YW5jZSwgc2hvcnRfYWRkcmVzcyk7CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwKKyAgICAgICAgICAgICAgICAgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpJbnNlcnRQcm9wZXJ0eUhhbmRsZXJfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgdWludDhfdCAqZXh0QWRkcmVzcyA9IE5VTEw7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaEFkZEV4dEVudHJ5KG1JbnN0YW5jZSwgZXh0QWRkcmVzcyk7CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwKKyAgICAgICAgICAgICAgICAgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2VuZGlmCisKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX0lQVjZfQUREUkVTU19UQUJMRSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgb3ROZXRpZkFkZHJlc3MgbmV0aWZBZGRyOworICAgIG90SXA2QWRkcmVzcyAqYWRkclB0cjsKKyAgICB1aW50MzJfdCBwcmVmZXJyZWRMaWZldGltZTsKKyAgICB1aW50MzJfdCB2YWxpZExpZmV0aW1lOworICAgIHVpbnQ4X3QgIHByZWZpeExlbjsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAgIC8vIElQdjYgYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAvLyBQcmVmaXggbGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX1MgICAgICAvLyBQcmVmZXJyZWQgbGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgLy8gVmFsaWQgbGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZwcmVmaXhMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICZwcmVmZXJyZWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJnZhbGlkTGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBuZXRpZkFkZHIubUFkZHJlc3MgPSAqYWRkclB0cjsKKyAgICBuZXRpZkFkZHIubVByZWZpeExlbmd0aCA9IHByZWZpeExlbjsKKyAgICBuZXRpZkFkZHIubVByZWZlcnJlZCA9IHByZWZlcnJlZExpZmV0aW1lICE9IDA7CisgICAgbmV0aWZBZGRyLm1WYWxpZCA9IHZhbGlkTGlmZXRpbWUgIT0gMDsKKworICAgIGVycm9yID0gb3RJcDZBZGRVbmljYXN0QWRkcmVzcyhtSW5zdGFuY2UsICZuZXRpZkFkZHIpOworCisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsCisgICAgICAgICAgICAgICAgIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICAgICApOworCisgICAgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9USFJFQURfT0ZGX01FU0hfUk9VVEVTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgb3RFeHRlcm5hbFJvdXRlQ29uZmlnIHJvdXRlQ29uZmlnOworICAgIG90SXA2QWRkcmVzcyAqYWRkclB0cjsKKyAgICBib29sIHN0YWJsZSA9IGZhbHNlOworICAgIHVpbnQ4X3QgZmxhZ3MgPSAwOworCisgICAgbWVtc2V0KCZyb3V0ZUNvbmZpZywgMCwgc2l6ZW9mKG90RXh0ZXJuYWxSb3V0ZUNvbmZpZykpOworCisgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPT0gdHJ1ZSwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfU1RBVEUpOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAvLyBSb3V0ZSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UOF9TICAgICAvLyBQcmVmaXggbGVuZ3RoIChpbiBiaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgIC8vIFN0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgIC8vIEZsYWdzIChSb3V0ZSBQcmVmZXJlbmNlKQorICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAmYWRkclB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgJnJvdXRlQ29uZmlnLm1QcmVmaXgubUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgJnN0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmZsYWdzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgcm91dGVDb25maWcubVByZWZpeC5tUHJlZml4ID0gKmFkZHJQdHI7CisgICAgcm91dGVDb25maWcubVN0YWJsZSA9IHN0YWJsZTsKKyAgICByb3V0ZUNvbmZpZy5tUHJlZmVyZW5jZSA9IEZsYWdCeXRlVG9FeHRlcm5hbFJvdXRlUHJlZmVyZW5jZShmbGFncyk7CisKKyAgICBlcnJvciA9IG90Qm9yZGVyUm91dGVyQWRkUm91dGUobUluc3RhbmNlLCAmcm91dGVDb25maWcpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEJhc2U6Okluc2VydFByb3BlcnR5SGFuZGxlcl9USFJFQURfT05fTUVTSF9ORVRTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgb3RCb3JkZXJSb3V0ZXJDb25maWcgYm9yZGVyUm91dGVyQ29uZmlnOworICAgIG90SXA2QWRkcmVzcyAqYWRkclB0cjsKKyAgICBib29sIHN0YWJsZSA9IGZhbHNlOworICAgIHVpbnQ4X3QgZmxhZ3MgPSAwOworCisgICAgbWVtc2V0KCZib3JkZXJSb3V0ZXJDb25maWcsIDAsIHNpemVvZihvdEJvcmRlclJvdXRlckNvbmZpZykpOworCisgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPT0gdHJ1ZSwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX0lOVkFMSURfU1RBVEUpOworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9TICAvLyBPbi1tZXNoIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgIC8vIFByZWZpeCBsZW5ndGggKGluIGJpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfQk9PTF9TICAgICAgLy8gU3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgLy8gRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZib3JkZXJSb3V0ZXJDb25maWcubVByZWZpeC5tTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAmc3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBib3JkZXJSb3V0ZXJDb25maWcubVByZWZpeC5tUHJlZml4ID0gKmFkZHJQdHI7CisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1TdGFibGUgPSBzdGFibGU7CisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1QcmVmZXJlbmNlID0KKyAgICAgICAgKChmbGFncyAmIFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX01BU0spID4+IFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX09GRlNFVCk7CisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1QcmVmZXJyZWQgPSAoKGZsYWdzICYgU1BJTkVMX05FVF9GTEFHX1BSRUZFUlJFRCkgIT0gMCk7CisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1TbGFhYyA9ICgoZmxhZ3MgJiBTUElORUxfTkVUX0ZMQUdfU0xBQUMpICE9IDApOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tRGhjcCA9ICgoZmxhZ3MgJiBTUElORUxfTkVUX0ZMQUdfREhDUCkgIT0gMCk7CisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1Db25maWd1cmUgPSAoKGZsYWdzICYgU1BJTkVMX05FVF9GTEFHX0NPTkZJR1VSRSkgIT0gMCk7CisgICAgYm9yZGVyUm91dGVyQ29uZmlnLm1EZWZhdWx0Um91dGUgPSAoKGZsYWdzICYgU1BJTkVMX05FVF9GTEFHX0RFRkFVTFRfUk9VVEUpICE9IDApOworICAgIGJvcmRlclJvdXRlckNvbmZpZy5tT25NZXNoID0gKChmbGFncyAmIFNQSU5FTF9ORVRfRkxBR19PTl9NRVNIKSAhPSAwKTsKKworICAgIGVycm9yID0gb3RCb3JkZXJSb3V0ZXJBZGRPbk1lc2hQcmVmaXgobUluc3RhbmNlLCAmYm9yZGVyUm91dGVyQ29uZmlnKTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICB1aW50MTZfdCBwb3J0OworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnBvcnQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBlcnJvciA9IG90SXA2QWRkVW5zZWN1cmVQb3J0KG1JbnN0YW5jZSwgcG9ydCk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX01BQ19XSElURUxJU1QodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICBvdEV4dEFkZHJlc3MgKmV4dEFkZHJlc3MgPSBOVUxMOworICAgIGludDhfdCByc3NpID0gUlNTSV9PVkVSUklERV9ESVNBQkxFRDsKKworICAgIGlmIChhVmFsdWVMZW4gPiBzdGF0aWNfY2FzdDxzcGluZWxfc3NpemVfdD4oc2l6ZW9mKG90RXh0QWRkcmVzcykpKQorICAgIHsKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZyc3NpCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBpZiAocnNzaSA9PSBSU1NJX09WRVJSSURFX0RJU0FCTEVEKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBvdExpbmtBZGRXaGl0ZWxpc3QobUluc3RhbmNlLCBleHRBZGRyZXNzLT5tOCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yID0gb3RMaW5rQWRkV2hpdGVsaXN0UnNzaShtSW5zdGFuY2UsIGV4dEFkZHJlc3MtPm04LCByc3NpKTsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpJbnNlcnRQcm9wZXJ0eUhhbmRsZXJfTUFDX0JMQUNLTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90RXh0QWRkcmVzcyAqZXh0QWRkcmVzcyA9IE5VTEw7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdExpbmtBZGRCbGFja2xpc3QobUluc3RhbmNlLCBleHRBZGRyZXNzLT5tOCk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSU5TRVJURUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKK290RXJyb3IgTmNwQmFzZTo6SW5zZXJ0UHJvcGVydHlIYW5kbGVyX1RIUkVBRF9KT0lORVJTKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90RXh0QWRkcmVzcyAqZXh0QWRkcmVzcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqYVBTS2QgPSBOVUxMOworICAgIHVpbnQzMl90IGpvaW5lclRpbWVvdXQgPSAwOworCisgICAgVmVyaWZ5T3JFeGl0KG1BbGxvd0xvY2FsTmV0d29ya0RhdGFDaGFuZ2UgPT0gdHJ1ZSwgc3BpbmVsRXJyb3IgPSAgU1BJTkVMX1NUQVRVU19JTlZBTElEX1NUQVRFKTsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVVRGOF9TICAgICAvLyBQU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfUyAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9FVUk2NF9TICAgIC8vIEV4dGVuZGVkIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFQU0tkLAorICAgICAgICAgICAgICAgICAgICAgICAmam9pbmVyVGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgJmV4dEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgaWYgKHBhcnNlZExlbmd0aCA8PSAwKQorICAgIHsKKyAgICAgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MgICAgIC8vIFBTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgLy8gVGltZW91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZhUFNLZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZqb2luZXJUaW1lb3V0CisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGV4dEFkZHJlc3MgPSBOVUxMOworICAgIH0KKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdENvbW1pc3Npb25lckFkZEpvaW5lcihtSW5zdGFuY2UsIGV4dEFkZHJlc3MsIGFQU0tkLCBqb2luZXJUaW1lb3V0KTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JTlNFUlRFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIgJiYgT1BFTlRIUkVBRF9GVEQKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogSW5kaXZpZHVhbCBQcm9wZXJ0eSBSZW1vdmVycworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCitvdEVycm9yIE5jcEJhc2U6OlJlbW92ZVByb3BlcnR5SGFuZGxlcl9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICB1aW50MTZfdCBzaG9ydEFkZHJlc3M7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLAorICAgICAgICAgICAgICAgICAgICAgICAmc2hvcnRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgZXJyb3IgPSBvdExpbmtSYXdTcmNNYXRjaENsZWFyU2hvcnRFbnRyeShtSW5zdGFuY2UsIHNob3J0QWRkcmVzcyk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCB1aW50MTZfdCBhVmFsdWVMZW4pCit7CisgICAgc3BpbmVsX3NzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHNwaW5lbF9zdGF0dXNfdCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfT0s7CisgICAgdWludDhfdCAqZXh0QWRkcmVzczsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmV4dEFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBlcnJvciA9IG90TGlua1Jhd1NyY01hdGNoQ2xlYXJFeHRFbnRyeShtSW5zdGFuY2UsIGV4dEFkZHJlc3MpOworICAgIFZlcmlmeU9yRXhpdChlcnJvciA9PSBPVF9FUlJPUl9OT05FLCBzcGluZWxFcnJvciA9IFRocmVhZEVycm9yVG9TcGluZWxTdGF0dXMoZXJyb3IpKTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCitvdEVycm9yIE5jcEJhc2U6OlJlbW92ZVByb3BlcnR5SGFuZGxlcl9JUFY2X0FERFJFU1NfVEFCTEUodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90SXA2QWRkcmVzcyAqYWRkclB0cjsKKworICAgIHBhcnNlZExlbmd0aCA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJQdHIKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBlcnJvciA9IG90SXA2UmVtb3ZlVW5pY2FzdEFkZHJlc3MobUluc3RhbmNlLCBhZGRyUHRyKTsKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX09GRl9NRVNIX1JPVVRFUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90SXA2UHJlZml4IGlwNlByZWZpeDsKKyAgICBvdElwNkFkZHJlc3MgKmFkZHJQdHI7CisKKyAgICBtZW1zZXQoJmlwNlByZWZpeCwgMCwgc2l6ZW9mKG90SXA2UHJlZml4KSk7CisKKyAgICBWZXJpZnlPckV4aXQobUFsbG93TG9jYWxOZXR3b3JrRGF0YUNoYW5nZSA9PSB0cnVlLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURSk7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgICAgIC8vIFJvdXRlIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgIC8vIFByZWZpeCBsZW5ndGggKGluIGJpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICZhZGRyUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAmaXA2UHJlZml4Lm1MZW5ndGgKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBpcDZQcmVmaXgubVByZWZpeCA9ICphZGRyUHRyOworCisgICAgZXJyb3IgPSBvdEJvcmRlclJvdXRlclJlbW92ZVJvdXRlKG1JbnN0YW5jZSwgJmlwNlByZWZpeCk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfVEhSRUFEX09OX01FU0hfTkVUUyh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90SXA2UHJlZml4IGlwNlByZWZpeDsKKyAgICBvdElwNkFkZHJlc3MgKmFkZHJQdHI7CisKKyAgICBtZW1zZXQoJmlwNlByZWZpeCwgMCwgc2l6ZW9mKG90SXA2UHJlZml4KSk7CisKKyAgICBWZXJpZnlPckV4aXQobUFsbG93TG9jYWxOZXR3b3JrRGF0YUNoYW5nZSA9PSB0cnVlLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9TVEFURSk7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgICAgIC8vIE9uLW1lc2ggcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAgLy8gUHJlZml4IGxlbmd0aCAoaW4gYml0cykKKyAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICZpcDZQcmVmaXgubUxlbmd0aAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGlwNlByZWZpeC5tUHJlZml4ID0gKmFkZHJQdHI7CisKKyAgICBlcnJvciA9IG90Qm9yZGVyUm91dGVyUmVtb3ZlT25NZXNoUHJlZml4KG1JbnN0YW5jZSwgJmlwNlByZWZpeCk7CisKKyAgICBWZXJpZnlPckV4aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9ORSwgc3BpbmVsRXJyb3IgPSBUaHJlYWRFcnJvclRvU3BpbmVsU3RhdHVzKGVycm9yKSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBhSGVhZGVyLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkVELAorICAgICAgICAgICAgICAgIGFLZXksCisgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgIGFWYWx1ZUxlbgorICAgICAgICAgICAgKTsKKworZXhpdDoKKworICAgIGlmIChzcGluZWxFcnJvciAhPSBTUElORUxfU1RBVFVTX09LKQorICAgIHsKKyAgICAgICAgZXJyb3IgPSBTZW5kTGFzdFN0YXR1cyhhSGVhZGVyLCBzcGluZWxFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmCisKK290RXJyb3IgTmNwQmFzZTo6UmVtb3ZlUHJvcGVydHlIYW5kbGVyX1RIUkVBRF9BU1NJU1RJTkdfUE9SVFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbikKK3sKKyAgICBzcGluZWxfc3NpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgc3BpbmVsX3N0YXR1c190IHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19PSzsKKyAgICB1aW50MTZfdCBwb3J0OworCisgICAgcGFyc2VkTGVuZ3RoID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywKKyAgICAgICAgICAgICAgICAgICAgICAgJnBvcnQKKyAgICAgICAgICAgICAgICAgICApOworCisgICAgVmVyaWZ5T3JFeGl0KHBhcnNlZExlbmd0aCA+IDAsIHNwaW5lbEVycm9yID0gU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUik7CisKKyAgICBlcnJvciA9IG90SXA2UmVtb3ZlVW5zZWN1cmVQb3J0KG1JbnN0YW5jZSwgcG9ydCk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfRlRECitvdEVycm9yIE5jcEJhc2U6OlJlbW92ZVByb3BlcnR5SGFuZGxlcl9USFJFQURfQUNUSVZFX1JPVVRFUl9JRFModWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIHVpbnQ4X3Qgcm91dGVySWQ7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZyb3V0ZXJJZAorICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBWZXJpZnlPckV4aXQocGFyc2VkTGVuZ3RoID4gMCwgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX1BBUlNFX0VSUk9SKTsKKworICAgIGVycm9yID0gb3RUaHJlYWRSZWxlYXNlUm91dGVySWQobUluc3RhbmNlLCByb3V0ZXJJZCk7CisgICAgVmVyaWZ5T3JFeGl0KGVycm9yID09IE9UX0VSUk9SX05PTkUsIHNwaW5lbEVycm9yID0gVGhyZWFkRXJyb3JUb1NwaW5lbFN0YXR1cyhlcnJvcikpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZiAgLy8gT1BFTlRIUkVBRF9GVEQKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKworb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfTUFDX1dISVRFTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90RXh0QWRkcmVzcyAqZXh0QWRkcmVzcyA9IE5VTEw7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgb3RMaW5rUmVtb3ZlV2hpdGVsaXN0KG1JbnN0YW5jZSwgZXh0QWRkcmVzcy0+bTgpOworCisgICAgZXJyb3IgPSBTZW5kUHJvcGVydHlVcGRhdGUoCisgICAgICAgICAgICAgICAgYUhlYWRlciwKKyAgICAgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfUkVNT1ZFRCwKKyAgICAgICAgICAgICAgICBhS2V5LAorICAgICAgICAgICAgICAgIGFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICBhVmFsdWVMZW4KKyAgICAgICAgICAgICk7CisKK2V4aXQ6CisKKyAgICBpZiAoc3BpbmVsRXJyb3IgIT0gU1BJTkVMX1NUQVRVU19PSykKKyAgICB7CisgICAgICAgIGVycm9yID0gU2VuZExhc3RTdGF0dXMoYUhlYWRlciwgc3BpbmVsRXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBOY3BCYXNlOjpSZW1vdmVQcm9wZXJ0eUhhbmRsZXJfTUFDX0JMQUNLTElTVCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgdWludDE2X3QgYVZhbHVlTGVuKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICBzcGluZWxfc3RhdHVzX3Qgc3BpbmVsRXJyb3IgPSBTUElORUxfU1RBVFVTX09LOworICAgIG90RXh0QWRkcmVzcyAqZXh0QWRkcmVzcyA9IE5VTEw7CisKKyAgICBwYXJzZWRMZW5ndGggPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MsCisgICAgICAgICAgICAgICAgICAgICAgICZleHRBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFZlcmlmeU9yRXhpdChwYXJzZWRMZW5ndGggPiAwLCBzcGluZWxFcnJvciA9IFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1IpOworCisgICAgICAgIG90TGlua1JlbW92ZUJsYWNrbGlzdChtSW5zdGFuY2UsIGV4dEFkZHJlc3MtPm04KTsKKworICAgIGVycm9yID0gU2VuZFByb3BlcnR5VXBkYXRlKAorICAgICAgICAgICAgICAgIGFIZWFkZXIsCisgICAgICAgICAgICAgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX1JFTU9WRUQsCisgICAgICAgICAgICAgICAgYUtleSwKKyAgICAgICAgICAgICAgICBhVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgYVZhbHVlTGVuCisgICAgICAgICAgICApOworCitleGl0OgorCisgICAgaWYgKHNwaW5lbEVycm9yICE9IFNQSU5FTF9TVEFUVVNfT0spCisgICAgeworICAgICAgICBlcnJvciA9IFNlbmRMYXN0U3RhdHVzKGFIZWFkZXIsIHNwaW5lbEVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKwordm9pZCBOY3BCYXNlOjpSZWdpc3RlckxlZ2FjeUhhbmRsZXJzKGNvbnN0IG90TmNwTGVnYWN5SGFuZGxlcnMgKmFIYW5kbGVycykKK3sKKyAgICBtTGVnYWN5SGFuZGxlcnMgPSBhSGFuZGxlcnM7CisgICAgYm9vbCBpc0VuYWJsZWQ7CisKKyAgICBWZXJpZnlPckV4aXQobUxlZ2FjeUhhbmRsZXJzICE9IE5VTEwpOworCisgICAgaXNFbmFibGVkID0gKG90VGhyZWFkR2V0RGV2aWNlUm9sZShtSW5zdGFuY2UpICE9IE9UX0RFVklDRV9ST0xFX0RJU0FCTEVEKTsKKworICAgIGlmIChpc0VuYWJsZWQpCisgICAgeworICAgICAgICBpZiAobUxlZ2FjeUhhbmRsZXJzLT5tU3RhcnRMZWdhY3kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZWdhY3lIYW5kbGVycy0+bVN0YXJ0TGVnYWN5KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1MZWdhY3lIYW5kbGVycy0+bVN0b3BMZWdhY3kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1MZWdhY3lIYW5kbGVycy0+bVN0b3BMZWdhY3koKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtTGVnYWN5SGFuZGxlcnMtPm1TZXRMZWdhY3lVbGFQcmVmaXgpCisgICAgeworICAgICAgICBtTGVnYWN5SGFuZGxlcnMtPm1TZXRMZWdhY3lVbGFQcmVmaXgobUxlZ2FjeVVsYVByZWZpeCk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybjsKK30KKwordm9pZCBOY3BCYXNlOjpIYW5kbGVEaWRSZWNlaXZlTmV3TGVnYWN5VWxhUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFVbGFQcmVmaXgpCit7CisgICAgbWVtY3B5KG1MZWdhY3lVbGFQcmVmaXgsIGFVbGFQcmVmaXgsIE9UX05DUF9MRUdBQ1lfVUxBX1BSRUZJWF9MRU5HVEgpOworCisgICAgU3VjY2Vzc09yRXhpdChPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUyBTUElORUxfREFUQVRZUEVfREFUQV9TLAorICAgICAgICAgICAgU1BJTkVMX0hFQURFUl9GTEFHIHwgU1BJTkVMX0hFQURFUl9JSURfMCwKKyAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgIFNQSU5FTF9QUk9QX05FU1RfTEVHQUNZX1VMQV9QUkVGSVgsCisgICAgICAgICAgICBhVWxhUHJlZml4LCBPVF9OQ1BfTEVHQUNZX1VMQV9QUkVGSVhfTEVOR1RICisgICAgICAgICkpOworCisgICAgU3VjY2Vzc09yRXhpdChPdXRib3VuZEZyYW1lU2VuZCgpKTsKKworZXhpdDoKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgTmNwQmFzZTo6SGFuZGxlTGVnYWN5Tm9kZURpZEpvaW4oY29uc3Qgb3RFeHRBZGRyZXNzICphRXh0QWRkcikKK3sKKyAgICBtTGVnYWN5Tm9kZURpZEpvaW4gPSB0cnVlOworCisgICAgU3VjY2Vzc09yRXhpdChPdXRib3VuZEZyYW1lQmVnaW4oKSk7CisKKyAgICBTdWNjZXNzT3JFeGl0KAorICAgICAgICBPdXRib3VuZEZyYW1lRmVlZFBhY2tlZCgKKyAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1BST1BfUyBTUElORUxfREFUQVRZUEVfRVVJNjRfUywKKyAgICAgICAgICAgIFNQSU5FTF9IRUFERVJfRkxBRyB8IFNQSU5FTF9IRUFERVJfSUlEXzAsCisgICAgICAgICAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMsCisgICAgICAgICAgICBTUElORUxfUFJPUF9ORVNUX0xFR0FDWV9KT0lORURfTk9ERSwKKyAgICAgICAgICAgIGFFeHRBZGRyLT5tOAorICAgICAgICApKTsKKworICAgIFN1Y2Nlc3NPckV4aXQoT3V0Ym91bmRGcmFtZVNlbmQoKSk7CisKK2V4aXQ6CisgICAgcmV0dXJuOworfQorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisKK290RXJyb3IgTmNwQmFzZTo6U3RyZWFtV3JpdGUoaW50IGFTdHJlYW1JZCwgY29uc3QgdWludDhfdCAqYURhdGFQdHIsIGludCBhRGF0YUxlbikKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIGlmIChhU3RyZWFtSWQgPT0gMCkKKyAgICB7CisgICAgICAgIGFTdHJlYW1JZCA9IFNQSU5FTF9QUk9QX1NUUkVBTV9ERUJVRzsKKyAgICB9CisKKyAgICBWZXJpZnlPckV4aXQoIW1EaXNhYmxlU3RyZWFtV3JpdGUsIGVycm9yID0gT1RfRVJST1JfSU5WQUxJRF9TVEFURSk7CisKKyAgICBlcnJvciA9IFNlbmRQcm9wZXJ0eVVwZGF0ZSgKKyAgICAgICAgICAgICAgICBTUElORUxfSEVBREVSX0ZMQUcgfCBTUElORUxfSEVBREVSX0lJRF8wLAorICAgICAgICAgICAgICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9JUywKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzcGluZWxfcHJvcF9rZXlfdD4oYVN0cmVhbUlkKSwKKyAgICAgICAgICAgICAgICBhRGF0YVB0ciwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYURhdGFMZW4pCisgICAgICAgICAgICApOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisKK3ZvaWQgTmNwQmFzZTo6UmVnaXN0ZXJQZWVrUG9rZURlbGFnYXRlcyhvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSBhQWxsb3dQZWVrRGVsZWdhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ROY3BEZWxlZ2F0ZUFsbG93UGVla1Bva2UgYUFsbG93UG9rZURlbGVnYXRlKQoreworICAgIG1BbGxvd1BlZWtEZWxlZ2F0ZSA9IGFBbGxvd1BlZWtEZWxlZ2F0ZTsKKyAgICBtQWxsb3dQb2tlRGVsZWdhdGUgPSBhQWxsb3dQb2tlRGVsZWdhdGU7Cit9CisKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogVmlydHVhbCBEYXRhc3RyZWFtIEkvTyAoUHVibGljIEFQSSkKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworb3RFcnJvciBvdE5jcFN0cmVhbVdyaXRlKGludCBhU3RyZWFtSWQsIGNvbnN0IHVpbnQ4X3QgKmFEYXRhUHRyLCBpbnQgYURhdGFMZW4pCit7CisgICAgb3RFcnJvciBlcnJvciAgPSBPVF9FUlJPUl9JTlZBTElEX1NUQVRFOworICAgIG90OjpOY3BCYXNlICpuY3AgPSBvdDo6TmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKTsKKworICAgIGlmIChuY3AgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGVycm9yID0gbmNwLT5TdHJlYW1Xcml0ZShhU3RyZWFtSWQsIGFEYXRhUHRyLCBhRGF0YUxlbik7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiBQZWVrL1Bva2UgZGVsZWdhdGUgQVBJCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK290RXJyb3Igb3ROY3BSZWdpc3RlclBlZWtQb2tlRGVsYWdhdGVzKG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1BlZWtEZWxlZ2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIGFBbGxvd1Bva2VEZWxlZ2F0ZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgICAgb3Q6Ok5jcEJhc2UgKm5jcCA9IG90OjpOY3BCYXNlOjpHZXROY3BJbnN0YW5jZSgpOworCisgICAgaWYgKG5jcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmNwLT5SZWdpc3RlclBlZWtQb2tlRGVsYWdhdGVzKGFBbGxvd1BlZWtEZWxlZ2F0ZSwgYUFsbG93UG9rZURlbGVnYXRlKTsKKyAgICB9CisjZWxzZQorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQWxsb3dQZWVrRGVsZWdhdGUpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhQWxsb3dQb2tlRGVsZWdhdGUpOworCisgICAgZXJyb3IgPSBPVF9FUlJPUl9ESVNBQkxFRF9GRUFUVVJFOworCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKworICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogTGVnYWN5IG5ldHdvcmsgQVBJcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIG90TmNwUmVnaXN0ZXJMZWdhY3lIYW5kbGVycyhjb25zdCBvdE5jcExlZ2FjeUhhbmRsZXJzICphSGFuZGxlcnMpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgb3Q6Ok5jcEJhc2UgKm5jcCA9IG90OjpOY3BCYXNlOjpHZXROY3BJbnN0YW5jZSgpOworCisgICAgaWYgKG5jcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmNwLT5SZWdpc3RlckxlZ2FjeUhhbmRsZXJzKGFIYW5kbGVycyk7CisgICAgfQorCisjZWxzZQorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhSGFuZGxlcnMpOworI2VuZGlmCit9CisKK3ZvaWQgb3ROY3BIYW5kbGVEaWRSZWNlaXZlTmV3TGVnYWN5VWxhUHJlZml4KGNvbnN0IHVpbnQ4X3QgKmFVbGFQcmVmaXgpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgb3Q6Ok5jcEJhc2UgKm5jcCA9IG90OjpOY3BCYXNlOjpHZXROY3BJbnN0YW5jZSgpOworCisgICAgaWYgKG5jcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmNwLT5IYW5kbGVEaWRSZWNlaXZlTmV3TGVnYWN5VWxhUHJlZml4KGFVbGFQcmVmaXgpOworICAgIH0KKworI2Vsc2UKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVVsYVByZWZpeCk7CisjZW5kaWYKK30KKwordm9pZCBvdE5jcEhhbmRsZUxlZ2FjeU5vZGVEaWRKb2luKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHIpCit7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgb3Q6Ok5jcEJhc2UgKm5jcCA9IG90OjpOY3BCYXNlOjpHZXROY3BJbnN0YW5jZSgpOworCisgICAgaWYgKG5jcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmNwLT5IYW5kbGVMZWdhY3lOb2RlRGlkSm9pbihhRXh0QWRkcik7CisgICAgfQorCisjZWxzZQorICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhRXh0QWRkcik7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NyYy9uY3AvbmNwX2Jhc2UuaHBwIGIvc3JjL25jcC9uY3BfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzYTE4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvbmNwX2Jhc2UuaHBwCkBAIC0wLDAgKzEsNjYyIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBhIHNwaW5lbCBpbnRlcmZhY2UgdG8gdGhlIE9wZW5UaHJlYWQgc3RhY2suCisgKi8KKworI2lmbmRlZiBOQ1BfQkFTRV9IUFBfCisjZGVmaW5lIE5DUF9CQVNFX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2lwNi5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbWVzc2FnZS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvbmNwLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1jb3JlLWNvbmZpZy5oIgorI2luY2x1ZGUgInNwaW5lbC5oIgorI2luY2x1ZGUgImNvbW1vbi90YXNrbGV0LmhwcCIKKyNpbmNsdWRlICJuY3AvbmNwX2J1ZmZlci5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKKyNkZWZpbmUgTkNQX0NPTU1BTkRfSEFORExFUihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3RFcnJvciBDb21tYW5kSGFuZGxlcl8jI25hbWUoICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFIZWFkZXIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhQ29tbWFuZCwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUFyZ1B0ciwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhQXJnTGVuICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKQorCisKKyNkZWZpbmUgTkNQX0dFVF9QUk9QX0hBTkRMRVIobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3RFcnJvciBHZXRQcm9wZXJ0eUhhbmRsZXJfIyNuYW1lKCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFIZWFkZXIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IGFLZXkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICApCisKKyNkZWZpbmUgTkNQX1NFVF9QUk9QX0hBTkRMRVIobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgb3RFcnJvciBTZXRQcm9wZXJ0eUhhbmRsZXJfIyNuYW1lKCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFIZWFkZXIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5lbF9wcm9wX2tleV90IGFLZXksICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4gICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKQorCisjZGVmaW5lIE5DUF9JTlNFUlRfUFJPUF9IQU5ETEVSKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG90RXJyb3IgSW5zZXJ0UHJvcGVydHlIYW5kbGVyXyMjbmFtZSggICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhSGVhZGVyLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICkKKworI2RlZmluZSBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdEVycm9yIFJlbW92ZVByb3BlcnR5SGFuZGxlcl8jI25hbWUoICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYUhlYWRlciwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbiAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICApCisKK2NsYXNzIE5jcEJhc2UKK3sKK3B1YmxpYzoKKworICAgIC8qKgorICAgICAqIFRoaXMgY29uc3RydWN0b3IgY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYW4gTmNwQmFzZSBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgTmNwQmFzZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHNpbmdsZSBOQ1AgaW5zdGFuY2UuCisgICAgICoKKyAgICAgQHJldHVybnMgUG9pbnRlciB0byB0aGUgc2luZ2xlIE5DUCBpbnN0YW5jZS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBOY3BCYXNlICpHZXROY3BJbnN0YW5jZSh2b2lkKTsKKworcHJvdGVjdGVkOgorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHN0YXJ0IGEgbmV3IG91dGJvdW5kIGZyYW1lLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSBzdGFydGVkIGEgbmV3IGZyYW1lLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBzdGFydCBhIG5ldyBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgT3V0Ym91bmRGcmFtZUJlZ2luKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBkYXRhIHRvIHRoZSBjdXJyZW50IG91dGJvdW5kIGZyYW1lIGJlaW5nIHdyaXR0ZW4uCisgICAgICoKKyAgICAgKiBJZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLCB0aGlzIG1ldGhvZCBzaG91bGQgZGlzY2FyZCBhbmQgY2xlYXIgdGhlIGZyYW1lIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFCdWZmZXIgICAgICAgIEEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YUJ1ZmZlckxlbmd0aCAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIG5ldyBkYXRhIHRvIHRoZSBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gYWRkIGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE91dGJvdW5kRnJhbWVGZWVkRGF0YShjb25zdCB1aW50OF90ICphRGF0YUJ1ZmZlciwgdWludDE2X3QgYURhdGFCdWZmZXJMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBhIG1lc3NhZ2UgdG8gdGhlIGN1cnJlbnQgb3V0Ym91bmQgZnJhbWUgYmVpbmcgd3JpdHRlbi4KKyAgICAgKgorICAgICAqIElmIG5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUsIHRoaXMgbWV0aG9kIHNob3VsZCBkaXNjYXJkIGFuZCBjbGVhciB0aGUgZnJhbWUgYmVmb3JlIHJldHVybmluZyBhbiBlcnJvciBzdGF0dXMuCisgICAgICogSW4gY2FzZSBvZiBzdWNjZXNzLCB0aGUgcGFzc2VkLWluIG1lc3NhZ2UgQGFNZXNzYWdlIHNob3VsZCBiZSBvd25lZCBieSBvdXRib3VuZCBidWZmZXIgYW5kIHNob3VsZCBiZSBmcmVlZAorICAgICAqIHdoZW4gZWl0aGVyIHRoZSB0aGUgZnJhbWUgaXMgc3VjY2Vzc2Z1bGx5IHNlbnQgYW5kIHJlbW92ZWQgb3IgaWYgdGhlIGZyYW1lIGlzIGRpc2NhcmRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFNZXNzYWdlICAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIG1lc3NhZ2UgdG8gYmUgYWRkZWQgdG8gY3VycmVudCBmcmFtZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGFkZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBPdXRib3VuZEZyYW1lRmVlZE1lc3NhZ2Uob3RNZXNzYWdlICphTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmaW5hbGl6ZXMgYW5kIHNlbmRzIHRoZSBjdXJyZW50IG91dGJvdW5kIGZyYW1lCisgICAgICoKKyAgICAgKiBJZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLCB0aGlzIG1ldGhvZCBzaG91bGQgZGlzY2FyZCBhbmQgY2xlYXIgdGhlIGZyYW1lIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIG1lc3NhZ2UgdG8gdGhlIGZyYW1lLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgSW5zdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgdG8gYWRkIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE91dGJvdW5kRnJhbWVFbmQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGZyYW1lciB3aGVuZXZlciBhIGZyYW1pbmcgZXJyb3IKKyAgICAgKiBpcyBkZXRlY3RlZC4KKyAgICAgKi8KKyAgICB2b2lkIEluY3JlbWVudEZyYW1lRXJyb3JDb3VudGVyKHZvaWQpOworCitwcm90ZWN0ZWQ6CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHN1YmNsYXNzIHRvIGluZGljYXRlIHdoZW4gYSBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZC4KKyAgICAgKi8KKyAgICB2b2lkIEhhbmRsZVJlY2VpdmUoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIHN1YmNsYXNzIHRvIGxlYXJuIHdoZW4gdGhlIGhvc3Qgd2FrZSBvcGVyYXRpb24gbXVzdCBiZSBpc3N1ZWQuCisgICAgICovCisgICAgYm9vbCBTaG91bGRXYWtlSG9zdCh2b2lkKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgc3ViY2xhc3MgdG8gbGVhcm4gd2hlbiB0aGUgdHJhbnNmZXIgdG8gdGhlIGhvc3Qgc2hvdWxkIGJlIGRlZmVycmVkLgorICAgICAqLworICAgIGJvb2wgU2hvdWxkRGVmZXJIb3N0U2VuZCh2b2lkKTsKKworcHJpdmF0ZToKKworICAgIG90RXJyb3IgT3V0Ym91bmRGcmFtZVNlbmQodm9pZCk7CisKKyAgICBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgR2V0TGFzdE91dGJvdW5kRnJhbWVUYWcodm9pZCk7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9UTUZfUFJPWFkgJiYgT1BFTlRIUkVBRF9GVEQKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVUbWZQcm94eVN0cmVhbShvdE1lc3NhZ2UgKmFNZXNzYWdlLCB1aW50MTZfdCBhTG9jYXRvciwgdWludDE2X3QgYVBvcnQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZVRtZlByb3h5U3RyZWFtKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHVpbnQxNl90IGFMb2NhdG9yLCB1aW50MTZfdCBhUG9ydCk7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfVE1GX1BST1hZICYmIE9QRU5USFJFQURfRlRECisKKyAgICBzdGF0aWMgdm9pZCBIYW5kbGVGcmFtZVJlbW92ZWRGcm9tTmNwQnVmZmVyKHZvaWQgKmFDb250ZXh0LCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYUZyYW1lVGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmNwRnJhbWVCdWZmZXIgKmFOY3BCdWZmZXIpOworICAgIHZvaWQgSGFuZGxlRnJhbWVSZW1vdmVkRnJvbU5jcEJ1ZmZlcihOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYUZyYW1lVGFnKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZURhdGFncmFtRnJvbVN0YWNrKG90TWVzc2FnZSAqYU1lc3NhZ2UsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZURhdGFncmFtRnJvbVN0YWNrKG90TWVzc2FnZSAqYU1lc3NhZ2UpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlUmF3RnJhbWUoY29uc3Qgb3RSYWRpb0ZyYW1lICphRnJhbWUsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZVJhd0ZyYW1lKGNvbnN0IG90UmFkaW9GcmFtZSAqYUZyYW1lKTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHRfSnVtcChvdEFjdGl2ZVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZUFjdGl2ZVNjYW5SZXN1bHQob3RBY3RpdmVTY2FuUmVzdWx0ICphUmVzdWx0KTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUVuZXJneVNjYW5SZXN1bHRfSnVtcChvdEVuZXJneVNjYW5SZXN1bHQgKmFSZXN1bHQsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZUVuZXJneVNjYW5SZXN1bHQob3RFbmVyZ3lTY2FuUmVzdWx0ICphUmVzdWx0KTsKKworICAgIHN0YXRpYyB2b2lkIEhhbmRsZUphbVN0YXRlQ2hhbmdlX0p1bXAoYm9vbCBhSmFtU3RhdGUsIHZvaWQgKmFDb250ZXh0KTsKKyAgICB2b2lkIEhhbmRsZUphbVN0YXRlQ2hhbmdlKGJvb2wgYUphbVN0YXRlKTsKKworICAgIHN0YXRpYyB2b2lkIFVwZGF0ZUNoYW5nZWRQcm9wcyhUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBVcGRhdGVDaGFuZ2VkUHJvcHModm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCBTZW5kRG9uZVRhc2sodm9pZCAqYUNvbnRleHQpOworICAgIHZvaWQgU2VuZERvbmVUYXNrKHZvaWQpOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICBzdGF0aWMgdm9pZCBMaW5rUmF3UmVjZWl2ZURvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpOworICAgIHZvaWQgTGlua1Jhd1JlY2VpdmVEb25lKG90UmFkaW9GcmFtZSAqYUZyYW1lLCBvdEVycm9yIGFFcnJvcik7CisKKyAgICBzdGF0aWMgdm9pZCBMaW5rUmF3VHJhbnNtaXREb25lKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgb3RSYWRpb0ZyYW1lICphRnJhbWUsIGJvb2wgYUZyYW1lUGVuZGluZywgb3RFcnJvciBhRXJyb3IpOworICAgIHZvaWQgTGlua1Jhd1RyYW5zbWl0RG9uZShvdFJhZGlvRnJhbWUgKmFGcmFtZSwgYm9vbCBhRnJhbWVQZW5kaW5nLCBvdEVycm9yIGFFcnJvcik7CisKKyAgICBzdGF0aWMgdm9pZCBMaW5rUmF3RW5lcmd5U2NhbkRvbmUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKTsKKyAgICB2b2lkIExpbmtSYXdFbmVyZ3lTY2FuRG9uZShpbnQ4X3QgYUVuZXJneVNjYW5NYXhSc3NpKTsKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorCisgICAgc3RhdGljIHZvaWQgSGFuZGxlTmV0aWZTdGF0ZUNoYW5nZWQodWludDMyX3QgYUZsYWdzLCB2b2lkICphQ29udGV4dCk7CisKK3ByaXZhdGU6CisKKyAgICBvdEVycm9yIE91dGJvdW5kRnJhbWVGZWVkUGFja2VkKGNvbnN0IGNoYXIgKmFQYWNrRm9ybWF0LCAuLi4pOworCisgICAgb3RFcnJvciBPdXRib3VuZEZyYW1lRmVlZFZQYWNrZWQoY29uc3QgY2hhciAqYVBhY2tGb3JtYXQsIHZhX2xpc3QgYUFyZ3MpOworCitwcml2YXRlOgorCisgICAgb3RFcnJvciBIYW5kbGVDb21tYW5kKHVpbnQ4X3QgYUhlYWRlciwgdW5zaWduZWQgaW50IGFDb21tYW5kLCBjb25zdCB1aW50OF90ICphQXJnUHRyLCB1aW50MTZfdCBhQXJnTGVuKTsKKworICAgIG90RXJyb3IgSGFuZGxlQ29tbWFuZFByb3BlcnR5R2V0KHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSk7CisKKyAgICBvdEVycm9yIEhhbmRsZUNvbW1hbmRQcm9wZXJ0eVNldCh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhVmFsdWVMZW4pOworCisgICAgb3RFcnJvciBIYW5kbGVDb21tYW5kUHJvcGVydHlJbnNlcnQodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYVZhbHVlTGVuKTsKKworICAgIG90RXJyb3IgSGFuZGxlQ29tbWFuZFByb3BlcnR5UmVtb3ZlKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbik7CisKKyAgICBvdEVycm9yIFNlbmRMYXN0U3RhdHVzKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3N0YXR1c190IGFMYXN0U3RhdHVzKTsKKworICAgIG90RXJyb3IgR2V0UHJvcGVydHlIYW5kbGVyX0NoYW5uZWxNYXNrSGVscGVyKHVpbnQ4X3QgYUhlYWRlciwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgdWludDMyX3QgY2hhbm5lbF9tYXNrKTsKKworcHJpdmF0ZToKKworICAgIG90RXJyb3IgU2VuZFByb3BlcnR5VXBkYXRlKHVpbnQ4X3QgYUhlYWRlciwgdWludDhfdCBhQ29tbWFuZCwgc3BpbmVsX3Byb3Bfa2V5X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFWYWx1ZUxlbik7CisKKyAgICBvdEVycm9yIFNlbmRQcm9wZXJ0eVVwZGF0ZSh1aW50OF90IGFIZWFkZXIsIHVpbnQ4X3QgYUNvbW1hbmQsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIG90TWVzc2FnZSAqbWVzc2FnZSk7CisKKyAgICBvdEVycm9yIFNlbmRQcm9wZXJ0eVVwZGF0ZSh1aW50OF90IGFIZWFkZXIsIHVpbnQ4X3QgYUNvbW1hbmQsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworICAgIG90RXJyb3IgU2VuZFNldFByb3BlcnR5UmVzcG9uc2UodWludDhfdCBhSGVhZGVyLCBzcGluZWxfcHJvcF9rZXlfdCBhS2V5LCBvdEVycm9yIGFFcnJvcik7CisKK3ByaXZhdGU6CisKKyAgICB0eXBlZGVmIG90RXJyb3IoTmNwQmFzZTo6KkNvbW1hbmRIYW5kbGVyVHlwZSkodWludDhfdCBhSGVhZGVyLCB1bnNpZ25lZCBpbnQgYUNvbW1hbmQsIGNvbnN0IHVpbnQ4X3QgKmFBcmdQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFBcmdMZW4pOworCisgICAgdHlwZWRlZiBvdEVycm9yKE5jcEJhc2U6OipHZXRQcm9wZXJ0eUhhbmRsZXJUeXBlKSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXkpOworCisgICAgdHlwZWRlZiBvdEVycm9yKE5jcEJhc2U6OipTZXRQcm9wZXJ0eUhhbmRsZXJUeXBlKSh1aW50OF90IGFIZWFkZXIsIHNwaW5lbF9wcm9wX2tleV90IGFLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphVmFsdWVQdHIsIHVpbnQxNl90IGFWYWx1ZUxlbik7CisKKyAgICBzdHJ1Y3QgQ29tbWFuZEhhbmRsZXJFbnRyeQorICAgIHsKKyAgICAgICAgc3BpbmVsX2NpZF90IG1Db21tYW5kOworICAgICAgICBDb21tYW5kSGFuZGxlclR5cGUgbUhhbmRsZXI7CisgICAgfTsKKworICAgIHN0cnVjdCBHZXRQcm9wZXJ0eUhhbmRsZXJFbnRyeQorICAgIHsKKyAgICAgICAgc3BpbmVsX3Byb3Bfa2V5X3QgbVByb3BLZXk7CisgICAgICAgIEdldFByb3BlcnR5SGFuZGxlclR5cGUgbUhhbmRsZXI7CisgICAgfTsKKworICAgIHN0cnVjdCBTZXRQcm9wZXJ0eUhhbmRsZXJFbnRyeQorICAgIHsKKyAgICAgICAgc3BpbmVsX3Byb3Bfa2V5X3QgbVByb3BLZXk7CisgICAgICAgIFNldFByb3BlcnR5SGFuZGxlclR5cGUgbUhhbmRsZXI7CisgICAgfTsKKworICAgIHN0cnVjdCBJbnNlcnRQcm9wZXJ0eUhhbmRsZXJFbnRyeQorICAgIHsKKyAgICAgICAgc3BpbmVsX3Byb3Bfa2V5X3QgbVByb3BLZXk7CisgICAgICAgIFNldFByb3BlcnR5SGFuZGxlclR5cGUgbUhhbmRsZXI7CisgICAgfTsKKworICAgIHN0cnVjdCBSZW1vdmVQcm9wZXJ0eUhhbmRsZXJFbnRyeQorICAgIHsKKyAgICAgICAgc3BpbmVsX3Byb3Bfa2V5X3QgbVByb3BLZXk7CisgICAgICAgIFNldFByb3BlcnR5SGFuZGxlclR5cGUgbUhhbmRsZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBDb21tYW5kSGFuZGxlckVudHJ5IG1Db21tYW5kSGFuZGxlclRhYmxlW107CisgICAgc3RhdGljIGNvbnN0IEdldFByb3BlcnR5SGFuZGxlckVudHJ5IG1HZXRQcm9wZXJ0eUhhbmRsZXJUYWJsZVtdOworICAgIHN0YXRpYyBjb25zdCBTZXRQcm9wZXJ0eUhhbmRsZXJFbnRyeSBtU2V0UHJvcGVydHlIYW5kbGVyVGFibGVbXTsKKyAgICBzdGF0aWMgY29uc3QgSW5zZXJ0UHJvcGVydHlIYW5kbGVyRW50cnkgbUluc2VydFByb3BlcnR5SGFuZGxlclRhYmxlW107CisgICAgc3RhdGljIGNvbnN0IFJlbW92ZVByb3BlcnR5SGFuZGxlckVudHJ5IG1SZW1vdmVQcm9wZXJ0eUhhbmRsZXJUYWJsZVtdOworCisgICAgLy8gQ29tbWFuZCBIYW5kbGVycworCisgICAgTkNQX0NPTU1BTkRfSEFORExFUihOT09QKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKFJFU0VUKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKFBST1BfVkFMVUVfR0VUKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKFBST1BfVkFMVUVfU0VUKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKFBST1BfVkFMVUVfSU5TRVJUKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKFBST1BfVkFMVUVfUkVNT1ZFKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKE5FVF9TQVZFKTsKKyAgICBOQ1BfQ09NTUFORF9IQU5ETEVSKE5FVF9DTEVBUik7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihORVRfUkVDQUxMKTsKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfRU5BQkxFX1BFRUtfUE9LRQorICAgIE5DUF9DT01NQU5EX0hBTkRMRVIoUEVFSyk7CisgICAgTkNQX0NPTU1BTkRfSEFORExFUihQT0tFKTsKKyNlbmRpZgorCisgICAgLy8gUHJvcGVydHkgR2V0IEhhbmRsZXJzCisKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihMQVNUX1NUQVRVUyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUFJPVE9DT0xfVkVSU0lPTik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSU5URVJGQUNFX1RZUEUpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFZFTkRPUl9JRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoQ0FQUyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkNQX1ZFUlNJT04pOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKElOVEVSRkFDRV9DT1VOVCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUE9XRVJfU1RBVEUpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKEhXQUREUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTE9DSyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSE9TVF9QT1dFUl9TVEFURSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUEhZX0VOQUJMRUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFBIWV9GUkVRKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihQSFlfQ0hBTl9TVVBQT1JURUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFBIWV9DSEFOKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihQSFlfUlNTSSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoUEhZX1RYX1BPV0VSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihQSFlfUlhfU0VOU0lUSVZJVFkpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ19TQ0FOX1NUQVRFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfMTVfNF9QQU5JRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDXzE1XzRfTEFERFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ18xNV80X1NBRERSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfUkFXX1NUUkVBTV9FTkFCTEVEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfRVhURU5ERURfQUREUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTUFDX0RBVEFfUE9MTF9QRVJJT0QpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FVF9TQVZFRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX0lGX1VQKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfU1RBQ0tfVVApOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FVF9ST0xFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfTkVUV09SS19OQU1FKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfWFBBTklEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfTUFTVEVSX0tFWSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfUEFSVElUSU9OX0lEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9MRUFERVIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKElQVjZfTUxfUFJFRklYKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJUFY2X01MX0FERFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKElQVjZfTExfQUREUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSVBWNl9BRERSRVNTX1RBQkxFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJUFY2X1JPVVRFX1RBQkxFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihJUFY2X0lDTVBfUElOR19PRkZMT0FEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfT0ZGX01FU0hfUk9VVEVTKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihTVFJFQU1fTkVUKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfU0NBTl9NQVNLKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfU0NBTl9QRVJJT0QpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9MRUFERVJfQUREUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1BBUkVOVCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX05FSUdIQk9SX1RBQkxFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTEVBREVSX1JJRCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0xFQURFUl9XRUlHSFQpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0JPUkRFUl9ST1VURVIKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTkVUV09SS19EQVRBKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfU1RBQkxFX05FVFdPUktfREFUQSk7CisjZW5kaWYKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT04pOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9TVEFCTEVfTkVUV09SS19EQVRBX1ZFUlNJT04pOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEEpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ19QUk9NSVNDVU9VU19NT0RFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfQVNTSVNUSU5HX1BPUlRTKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfQ05UUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoTkNQX0NOVFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKElQX0NOVFIpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1TR19CVUZGRVJfQ09VTlRFUlMpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX01BQ19XSElURUxJU1QKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfV0hJVEVMSVNUKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihNQUNfV0hJVEVMSVNUX0VOQUJMRUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ19CTEFDS0xJU1QpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE1BQ19CTEFDS0xJU1RfRU5BQkxFRCk7CisjZW5kaWYKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTU9ERSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NISUxEX1RJTUVPVVQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9STE9DMTYpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9PTl9NRVNIX05FVFMpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKERFQlVHX1RFU1RfQVNTRVJUKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihERUJVR19OQ1BfTE9HX0xFVkVMKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfRElTQ09WRVJZX1NDQU5fSk9JTkVSX0ZMQUcpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQpOworI2lmIE9QRU5USFJFQURfRlRECisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NISUxEX1RBQkxFKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FVF9QU0tDKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfQ0hJTERfQ09VTlRfTUFYKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUik7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NPTlRFWFRfUkVVU0VfREVMQVkpOworICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQpOworI2VuZGlmIC8vICNpZiBPUEVOVEhSRUFEX0ZURAorI2lmIE9QRU5USFJFQURfRU5BQkxFX0NPTU1JU1NJT05FUgorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRCk7CisjZW5kaWYKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihUSFJFQURfVE1GX1BST1hZX0VOQUJMRUQpOworI2lmIE9QRU5USFJFQURfRU5BQkxFX0pBTV9ERVRFQ1RJT04KKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX0VOQUJMRSk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVEVEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX1dJTkRPVyk7CisgICAgTkNQX0dFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9CVVNZKTsKKyAgICBOQ1BfR0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX0hJU1RPUllfQklUTUFQKTsKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX0xFR0FDWQorICAgIE5DUF9HRVRfUFJPUF9IQU5ETEVSKE5FU1RfTEVHQUNZX1VMQV9QUkVGSVgpOworI2VuZGlmCisKKyAgICAvLyBQcm9wZXJ0eSBTZXQgSGFuZGxlcnMKKworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFBPV0VSX1NUQVRFKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihIT1NUX1BPV0VSX1NUQVRFKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihQSFlfVFhfUE9XRVIpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFBIWV9DSEFOKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfU0NBTl9NQVNLKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfU0NBTl9TVEFURSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDXzE1XzRfUEFOSUQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ18xNV80X0xBRERSKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihNQUNfREFUQV9QT0xMX1BFUklPRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX1JBV19TVFJFQU1fRU5BQkxFRCk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDXzE1XzRfU0FERFIpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFNUUkVBTV9SQVcpOworI2VuZGlmCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX0lGX1VQKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfU1RBQ0tfVVApOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE5FVF9ST0xFKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfTkVUV09SS19OQU1FKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfWFBBTklEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfTUFTVEVSX0tFWSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTkVUX0tFWV9TRVFVRU5DRV9DT1VOVEVSKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFNUUkVBTV9ORVRfSU5TRUNVUkUpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFNUUkVBTV9ORVQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKElQVjZfTUxfUFJFRklYKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihJUFY2X0lDTVBfUElOR19PRkZMT0FEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfUkxPQzE2X0RFQlVHX1BBU1NUSFJVKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfVE1GX1BST1hZX1NUUkVBTSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoUEhZX0VOQUJMRUQpOworI2VuZGlmCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX1BST01JU0NVT1VTX01PREUpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19TQ0FOX1BFUklPRCk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19XSElURUxJU1QpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19XSElURUxJU1RfRU5BQkxFRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX0JMQUNLTElTVCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX0JMQUNLTElTVF9FTkFCTEVEKTsKKyNlbmRpZgorI2lmIE9QRU5USFJFQURfRU5BQkxFX1JBV19MSU5LX0FQSQorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19TUkNfTUFUQ0hfRU5BQkxFRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE1BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKTsKKyNlbmRpZgorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9NT0RFKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0FMTE9XX0xPQ0FMX05FVF9EQVRBX0NIQU5HRSk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0ZURAorICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE5FVF9QU0tDKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NISUxEX0NPVU5UX01BWCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0NISUxEX1RJTUVPVVQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX05FVFdPUktfSURfVElNRU9VVCk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1BSRUZFUlJFRF9ST1VURVJfSUQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKFRIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVEKTsKKyNpZiBPUEVOVEhSRUFEX0NPTkZJR19FTkFCTEVfU1RFRVJJTkdfREFUQV9TRVRfT09CCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1NURUVSSU5HX0RBVEEpOworI2VuZGlmCisjZW5kaWYgLy8gI2lmIE9QRU5USFJFQURfRlRECisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyk7CisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklEKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfQVNTSVNUSU5HX1BPUlRTKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihDTlRSX1JFU0VUKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihERUJVR19OQ1BfTE9HX0xFVkVMKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihUSFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQpOworI2VuZGlmCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgTkNQX1NFVF9QUk9QX0hBTkRMRVIoSkFNX0RFVEVDVF9FTkFCTEUpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKEpBTV9ERVRFQ1RfUlNTSV9USFJFU0hPTEQpOworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKEpBTV9ERVRFQ1RfV0lORE9XKTsKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihKQU1fREVURUNUX0JVU1kpOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfRElBRworICAgIE5DUF9TRVRfUFJPUF9IQU5ETEVSKE5FU1RfU1RSRUFNX01GRyk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKKyAgICBOQ1BfU0VUX1BST1BfSEFORExFUihORVNUX0xFR0FDWV9VTEFfUFJFRklYKTsKKyNlbmRpZgorCisgICAgLy8gUHJvcGVydHkgSW5zZXJ0IEhhbmRsZXJzCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9SQVdfTElOS19BUEkKKyAgICBOQ1BfSU5TRVJUX1BST1BfSEFORExFUihNQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyk7CisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMpOworI2VuZGlmCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoSVBWNl9BRERSRVNTX1RBQkxFKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9CT1JERVJfUk9VVEVSCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoVEhSRUFEX09GRl9NRVNIX1JPVVRFUyk7CisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoVEhSRUFEX09OX01FU0hfTkVUUyk7CisjZW5kaWYKKyAgICBOQ1BfSU5TRVJUX1BST1BfSEFORExFUihUSFJFQURfQVNTSVNUSU5HX1BPUlRTKTsKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NQUNfV0hJVEVMSVNUCisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoTUFDX1dISVRFTElTVCk7CisgICAgTkNQX0lOU0VSVF9QUk9QX0hBTkRMRVIoTUFDX0JMQUNLTElTVCk7CisjZW5kaWYKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9DT01NSVNTSU9ORVIKKyAgICBOQ1BfSU5TRVJUX1BST1BfSEFORExFUihUSFJFQURfSk9JTkVSUyk7CisjZW5kaWYKKworICAgIC8vIFByb3BlcnR5IFJlbW92ZSBIYW5kbGVycworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVIoTUFDX1NSQ19NQVRDSF9TSE9SVF9BRERSRVNTRVMpOworICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKE1BQ19TUkNfTUFUQ0hfRVhURU5ERURfQUREUkVTU0VTKTsKKyNlbmRpZgorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKElQVjZfQUREUkVTU19UQUJMRSk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfQk9SREVSX1JPVVRFUgorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKFRIUkVBRF9PRkZfTUVTSF9ST1VURVMpOworICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKFRIUkVBRF9PTl9NRVNIX05FVFMpOworI2VuZGlmCisgICAgTkNQX1JFTU9WRV9QUk9QX0hBTkRMRVIoVEhSRUFEX0FTU0lTVElOR19QT1JUUyk7CisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTUFDX1dISVRFTElTVAorICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKE1BQ19XSElURUxJU1QpOworICAgIE5DUF9SRU1PVkVfUFJPUF9IQU5ETEVSKE1BQ19CTEFDS0xJU1QpOworI2VuZGlmCisjaWYgT1BFTlRIUkVBRF9GVEQKKyAgICBOQ1BfUkVNT1ZFX1BST1BfSEFORExFUihUSFJFQURfQUNUSVZFX1JPVVRFUl9JRFMpOworI2VuZGlmCisKK3B1YmxpYzoKKyAgICBvdEVycm9yIFN0cmVhbVdyaXRlKGludCBhU3RyZWFtSWQsIGNvbnN0IHVpbnQ4X3QgKmFEYXRhUHRyLCBpbnQgYURhdGFMZW4pOworCisjaWYgT1BFTlRIUkVBRF9DT05GSUdfTkNQX0VOQUJMRV9QRUVLX1BPS0UKKyAgICB2b2lkIFJlZ2lzdGVyUGVla1Bva2VEZWxhZ2F0ZXMob3ROY3BEZWxlZ2F0ZUFsbG93UGVla1Bva2UgYUFsbG93UGVla0RlbGVnYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdE5jcERlbGVnYXRlQWxsb3dQZWVrUG9rZSBhQWxsb3dQb2tlRGVsZWdhdGUpOworI2VuZGlmCisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9MRUdBQ1kKK3B1YmxpYzoKKyAgICB2b2lkIEhhbmRsZUxlZ2FjeU5vZGVEaWRKb2luKGNvbnN0IG90RXh0QWRkcmVzcyAqYUV4dEFkZHIpOworICAgIHZvaWQgSGFuZGxlRGlkUmVjZWl2ZU5ld0xlZ2FjeVVsYVByZWZpeChjb25zdCB1aW50OF90ICphVWxhUHJlZml4KTsKKyAgICB2b2lkIFJlZ2lzdGVyTGVnYWN5SGFuZGxlcnMoY29uc3Qgb3ROY3BMZWdhY3lIYW5kbGVycyAqYUhhbmRsZXJzKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIE5jcEJhc2UgKnNOY3BJbnN0YW5jZTsKKyAgICBvdEluc3RhbmNlICptSW5zdGFuY2U7CisgICAgTmNwRnJhbWVCdWZmZXIgIG1UeEZyYW1lQnVmZmVyOworCitwcml2YXRlOgorICAgIGVudW0KKyAgICB7CisgICAgICAgIGtUeEJ1ZmZlclNpemUgPSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfVFhfQlVGRkVSX1NJWkUsICAvLyBUeCBCdWZmZXIgc2l6ZSAodXNlZCBieSBtVHhGcmFtZUJ1ZmZlcikuCisgICAgfTsKKworICAgIHNwaW5lbF9zdGF0dXNfdCBtTGFzdFN0YXR1czsKKyAgICB1aW50MzJfdCBtU3VwcG9ydGVkQ2hhbm5lbE1hc2s7CisgICAgdWludDMyX3QgbUNoYW5uZWxNYXNrOworICAgIHVpbnQxNl90IG1TY2FuUGVyaW9kOworICAgIGJvb2wgbURpc2NvdmVyeVNjYW5Kb2luZXJGbGFnOworICAgIGJvb2wgbURpc2NvdmVyeVNjYW5FbmFibGVGaWx0ZXJpbmc7CisgICAgdWludDE2X3QgbURpc2NvdmVyeVNjYW5QYW5JZDsKKyAgICBUYXNrbGV0IG1VcGRhdGVDaGFuZ2VkUHJvcHNUYXNrOworICAgIHVpbnQzMl90IG1DaGFuZ2VkRmxhZ3M7CisgICAgYm9vbCBtU2hvdWxkU2lnbmFsRW5kT2ZTY2FuOworICAgIHNwaW5lbF9ob3N0X3Bvd2VyX3N0YXRlX3QgbUhvc3RQb3dlclN0YXRlOworICAgIGJvb2wgbUhvc3RQb3dlclN0YXRlSW5Qcm9ncmVzczsKKyAgICBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgbUhvc3RQb3dlclJlcGx5RnJhbWVUYWc7CisgICAgdWludDhfdCBtSG9zdFBvd2VyU3RhdGVIZWFkZXI7CisKKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9KQU1fREVURUNUSU9OCisgICAgYm9vbCBtU2hvdWxkU2lnbmFsSmFtU3RhdGVDaGFuZ2U7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfQ09ORklHX05DUF9FTkFCTEVfUEVFS19QT0tFCisgICAgb3ROY3BEZWxlZ2F0ZUFsbG93UGVla1Bva2UgbUFsbG93UGVla0RlbGVnYXRlOworICAgIG90TmNwRGVsZWdhdGVBbGxvd1BlZWtQb2tlIG1BbGxvd1Bva2VEZWxlZ2F0ZTsKKyNlbmRpZgorCisgICAgc3BpbmVsX3RpZF90IG1Ecm9wcGVkUmVwbHlUaWQ7CisgICAgdWludDE2X3QgbURyb3BwZWRSZXBseVRpZEJpdFNldDsKKyAgICBzcGluZWxfdGlkX3QgbU5leHRFeHBlY3RlZFRpZDsKKyAgICB1aW50OF90IG1UeEJ1ZmZlcltrVHhCdWZmZXJTaXplXTsKKworICAgIGJvb2wgbUFsbG93TG9jYWxOZXR3b3JrRGF0YUNoYW5nZTsKKyAgICBib29sIG1SZXF1aXJlSm9pbkV4aXN0aW5nTmV0d29yazsKKyAgICBib29sIG1Jc1Jhd1N0cmVhbUVuYWJsZWQ7CisgICAgYm9vbCBtRGlzYWJsZVN0cmVhbVdyaXRlOworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisgICAgdWludDhfdCBtQ3VyVHJhbnNtaXRUSUQ7CisgICAgdWludDhfdCBtQ3VyUmVjZWl2ZUNoYW5uZWw7CisgICAgaW50OF90ICBtQ3VyU2NhbkNoYW5uZWw7CisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfUkFXX0xJTktfQVBJCisKKyAgICB1aW50MzJfdCBtRnJhbWluZ0Vycm9yQ291bnRlcjsgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIGltcHJvcGVybHkgZm9ybWVkIHJlY2VpdmVkIHNwaW5lbCBmcmFtZXMuCisgICAgdWludDMyX3QgbVJ4U3BpbmVsRnJhbWVDb3VudGVyOyAgICAgICAgICAgIC8vIE51bWJlciBvZiByZWNlaXZlZCAoaW5ib3VuZCkgc3BpbmVsIGZyYW1lcy4KKyAgICB1aW50MzJfdCBtUnhTcGluZWxPdXRPZk9yZGVyVGlkQ291bnRlcjsgICAgLy8gTnVtYmVyIG9mIG91dCBvZiBvcmRlciByZWNlaXZlZCBzcGluZWwgZnJhbWVzICh0aWQgaW5jcmVhc2UgPiAxKS4KKyAgICB1aW50MzJfdCBtVHhTcGluZWxGcmFtZUNvdW50ZXI7ICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHNlbnQgKG91dGJvdW5kKSBzcGluZWwgZnJhbWVzLgorICAgIHVpbnQzMl90IG1JbmJvdW5kU2VjdXJlSXBGcmFtZUNvdW50ZXI7ICAgICAvLyBOdW1iZXIgb2Ygc2VjdXJlIGluYm91bmQgZGF0YS9JUCBmcmFtZXMuCisgICAgdWludDMyX3QgbUluYm91bmRJbnNlY3VyZUlwRnJhbWVDb3VudGVyOyAgIC8vIE51bWJlciBvZiBpbnNlY3VyZSBpbmJvdW5kIGRhdGEvSVAgZnJhbWVzLgorICAgIHVpbnQzMl90IG1PdXRib3VuZFNlY3VyZUlwRnJhbWVDb3VudGVyOyAgICAvLyBOdW1iZXIgb2Ygc2VjdXJlIG91dGJvdW5kIGRhdGEvSVAgZnJhbWVzLgorICAgIHVpbnQzMl90IG1PdXRib3VuZEluc2VjdXJlSXBGcmFtZUNvdW50ZXI7ICAvLyBOdW1iZXIgb2YgaW5zZWN1cmUgb3V0Ym91bmQgZGF0YS9JUCBmcmFtZXMuCisgICAgdWludDMyX3QgbURyb3BwZWRPdXRib3VuZElwRnJhbWVDb3VudGVyOyAgIC8vIE51bWJlciBvZiBkcm9wcGVkIG91dGJvdW5kIGRhdGEvSVAgZnJhbWVzLgorICAgIHVpbnQzMl90IG1Ecm9wcGVkSW5ib3VuZElwRnJhbWVDb3VudGVyOyAgICAvLyBOdW1iZXIgb2YgZHJvcHBlZCBpbmJvdW5kIGRhdGEvSVAgZnJhbWVzLgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTEVHQUNZCisgICAgY29uc3Qgb3ROY3BMZWdhY3lIYW5kbGVycyAqbUxlZ2FjeUhhbmRsZXJzOworICAgIHVpbnQ4X3QgbUxlZ2FjeVVsYVByZWZpeFtPVF9OQ1BfTEVHQUNZX1VMQV9QUkVGSVhfTEVOR1RIXTsKKyAgICBib29sIG1MZWdhY3lOb2RlRGlkSm9pbjsKKyNlbmRpZgorCit9OworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmICAvLyBOQ1BfQkFTRV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvbmNwL25jcF9idWZmZXIuY3BwIGIvc3JjL25jcC9uY3BfYnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ4MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9uY3BfYnVmZmVyLmNwcApAQCAtMCwwICsxLDY3MyBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBOQ1AgZnJhbWUgYnVmZmVyIGNsYXNzLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmNwX2J1ZmZlci5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NvbnN0IE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWcgPSBOVUxMOworCitOY3BGcmFtZUJ1ZmZlcjo6TmNwRnJhbWVCdWZmZXIodWludDhfdCAqYUJ1ZmZlciwgdWludDE2X3QgYUJ1ZmZlckxlbikgOgorICAgIG1CdWZmZXIoYUJ1ZmZlciksCisgICAgbUJ1ZmZlckVuZChhQnVmZmVyICsgYUJ1ZmZlckxlbiksCisgICAgbUJ1ZmZlckxlbmd0aChhQnVmZmVyTGVuKQoreworICAgIG90TWVzc2FnZVF1ZXVlSW5pdCgmbU1lc3NhZ2VRdWV1ZSk7CisgICAgb3RNZXNzYWdlUXVldWVJbml0KCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSk7CisgICAgU2V0RnJhbWVBZGRlZENhbGxiYWNrKE5VTEwsIE5VTEwpOworICAgIFNldEZyYW1lUmVtb3ZlZENhbGxiYWNrKE5VTEwsIE5VTEwpOworICAgIENsZWFyKCk7Cit9CisKK3ZvaWQgTmNwRnJhbWVCdWZmZXI6OkNsZWFyKHZvaWQpCit7CisgICAgb3RNZXNzYWdlICptZXNzYWdlOworCisgICAgLy8gV3JpdGUgKEluRnJhbWUpIHJlbGF0ZWQgdmFyaWFibGVzCisgICAgbVdyaXRlRnJhbWVTdGFydCA9IG1CdWZmZXI7CisgICAgbVdyaXRlU2VnbWVudEhlYWQgPSBtQnVmZmVyOworICAgIG1Xcml0ZVNlZ21lbnRUYWlsID0gbUJ1ZmZlcjsKKyAgICBtV3JpdGVGcmFtZVRhZyA9IGtJbnZhbGlkVGFnOworCisgICAgLy8gUmVhZCAoT3V0RnJhbWUpIHJlbGF0ZWQgdmFyaWFibGVzCisgICAgbVJlYWRTdGF0ZSA9IGtSZWFkU3RhdGVEb25lOworICAgIG1SZWFkRnJhbWVMZW5ndGggPSBrVW5rbm93bkZyYW1lTGVuZ3RoOworCisgICAgbVJlYWRGcmFtZVN0YXJ0ID0gbUJ1ZmZlcjsKKyAgICBtUmVhZFNlZ21lbnRIZWFkID0gbUJ1ZmZlcjsKKyAgICBtUmVhZFNlZ21lbnRUYWlsID0gbUJ1ZmZlcjsKKyAgICBtUmVhZFBvaW50ZXIgPSBtQnVmZmVyOworCisgICAgbVJlYWRNZXNzYWdlID0gTlVMTDsKKyAgICBtUmVhZE1lc3NhZ2VPZmZzZXQgPSAwOworICAgIG1SZWFkTWVzc2FnZVRhaWwgPSBtTWVzc2FnZUJ1ZmZlcjsKKworICAgIC8vIEZyZWUgYWxsIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZXMuCisKKyAgICB3aGlsZSAoKG1lc3NhZ2UgPSBvdE1lc3NhZ2VRdWV1ZUdldEhlYWQoJm1Xcml0ZUZyYW1lTWVzc2FnZVF1ZXVlKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG90TWVzc2FnZVF1ZXVlRGVxdWV1ZSgmbVdyaXRlRnJhbWVNZXNzYWdlUXVldWUsIG1lc3NhZ2UpOworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KKworICAgIHdoaWxlICgobWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0SGVhZCgmbU1lc3NhZ2VRdWV1ZSkpICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJm1NZXNzYWdlUXVldWUsIG1lc3NhZ2UpOworICAgICAgICBvdE1lc3NhZ2VGcmVlKG1lc3NhZ2UpOworICAgIH0KK30KKwordm9pZCBOY3BGcmFtZUJ1ZmZlcjo6U2V0RnJhbWVBZGRlZENhbGxiYWNrKEJ1ZmZlckNhbGxiYWNrIGFGcmFtZUFkZGVkQ2FsbGJhY2ssIHZvaWQgKmFGcmFtZUFkZGVkQ29udGV4dCkKK3sKKyAgICBtRnJhbWVBZGRlZENhbGxiYWNrID0gYUZyYW1lQWRkZWRDYWxsYmFjazsKKyAgICBtRnJhbWVBZGRlZENvbnRleHQgPSBhRnJhbWVBZGRlZENvbnRleHQ7Cit9CisKK3ZvaWQgTmNwRnJhbWVCdWZmZXI6OlNldEZyYW1lUmVtb3ZlZENhbGxiYWNrKEJ1ZmZlckNhbGxiYWNrIGFGcmFtZVJlbW92ZWRDYWxsYmFjaywgdm9pZCAqYUZyYW1lUmVtb3ZlZENvbnRleHQpCit7CisgICAgbUZyYW1lUmVtb3ZlZENhbGxiYWNrID0gYUZyYW1lUmVtb3ZlZENhbGxiYWNrOworICAgIG1GcmFtZVJlbW92ZWRDb250ZXh0ID0gYUZyYW1lUmVtb3ZlZENvbnRleHQ7Cit9CisKKy8vIEluY3JlbWVudHMgdGhlIGJ1ZmZlciBwb2ludGVyIGJ5IG9uZSBieXRlIHdoaWxlIGhhbmRsaW5nIHRoZSB0aGUgd3JhcC1hcm91bmQgYXQgdGhlIGVuZCBvZiBidWZmZXIuCit1aW50OF90ICpOY3BGcmFtZUJ1ZmZlcjo6TmV4dCh1aW50OF90ICphQnVmUHRyKSBjb25zdAoreworICAgIGFCdWZQdHIrKzsKKyAgICByZXR1cm4gKGFCdWZQdHIgPT0gbUJ1ZmZlckVuZCkgPyBtQnVmZmVyIDogYUJ1ZlB0cjsKK30KKworLy8gUmV0dXJucyBhbiBhZHZhbmNlZCAobW92ZWQgZm9yd2FyZCkgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyIHBvaW50ZXIgYnkgdGhlIGdpdmVuIG9mZnNldC4KK3VpbnQ4X3QgKk5jcEZyYW1lQnVmZmVyOjpBZHZhbmNlKHVpbnQ4X3QgKmFCdWZQdHIsIHVpbnQxNl90IGFPZmZzZXQpIGNvbnN0Cit7CisgICAgYUJ1ZlB0ciArPSBhT2Zmc2V0OworCisgICAgd2hpbGUgKGFCdWZQdHIgPj0gbUJ1ZmZlckVuZCkKKyAgICB7CisgICAgICAgIGFCdWZQdHIgLT0gbUJ1ZmZlckxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gYUJ1ZlB0cjsKK30KKworLy8gR2V0cyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gYnVmZmVyIHBvaW50ZXJzIChhZGp1c3RzIGZvciB0aGUgd3JhcC1hcm91bmQpLgordWludDE2X3QgTmNwRnJhbWVCdWZmZXI6OkdldERpc3RhbmNlKHVpbnQ4X3QgKmFTdGFydFB0ciwgdWludDhfdCAqYUVuZFB0cikgY29uc3QKK3sKKyAgICBzaXplX3QgZGlzdGFuY2U7CisKKyAgICBpZiAoYUVuZFB0ciA+PSBhU3RhcnRQdHIpCisgICAgeworICAgICAgICBkaXN0YW5jZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oYUVuZFB0ciAtIGFTdGFydFB0cik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRpc3RhbmNlICA9IHN0YXRpY19jYXN0PHNpemVfdD4obUJ1ZmZlckVuZCAtIGFTdGFydFB0cik7CisgICAgICAgIGRpc3RhbmNlICs9IHN0YXRpY19jYXN0PHNpemVfdD4oYUVuZFB0ciAtIG1CdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZGlzdGFuY2UpOworfQorCisvLyBXcml0ZXMgYSB1aW50MTYgdmFsdWUgYXQgdGhlIGdpdmVuIGJ1ZmZlciBwb2ludGVyIChiaWctZW5kaWFuIHN0eWxlKS4KK3ZvaWQgTmNwRnJhbWVCdWZmZXI6OldyaXRlVWludDE2QXQodWludDhfdCAqYUJ1ZlB0ciwgdWludDE2X3QgYVZhbHVlKQoreworICAgICphQnVmUHRyID0gKGFWYWx1ZSA+PiA4KTsKKyAgICAqTmV4dChhQnVmUHRyKSA9IChhVmFsdWUgJiAweGZmKTsKK30KKworLy8gUmVhZHMgYSB1aW50MTYgdmFsdWUgYXQgdGhlIGdpdmVuIGJ1ZmZlciBwb2ludGVyIChiaWctZW5kaWFuIHN0eWxlKS4KK3VpbnQxNl90IE5jcEZyYW1lQnVmZmVyOjpSZWFkVWludDE2QXQodWludDhfdCAqYUJ1ZlB0cikKK3sKKyAgICB1aW50MTZfdCB2YWx1ZTsKKworICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KCgqYUJ1ZlB0cikgPDwgOCk7CisgICAgdmFsdWUgKz0gKk5leHQoYUJ1ZlB0cik7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKKy8vIFdyaXRlcyBhIGJ5dGVzIGF0IHRoZSB3cml0ZSB0YWlsLCBkaXNjYXJkcyB0aGUgZnJhbWUgaWYgYnVmZmVyIGdldHMgZnVsbC4KK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6OkluRnJhbWVGZWVkQnl0ZSh1aW50OF90IGFCeXRlKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQ4X3QgKm5ld1RhaWwgPSBOZXh0KG1Xcml0ZVNlZ21lbnRUYWlsKTsKKworICAgIFZlcmlmeU9yRXhpdChuZXdUYWlsICE9IG1SZWFkRnJhbWVTdGFydCwgZXJyb3IgPSBPVF9FUlJPUl9OT19CVUZTKTsKKworICAgICptV3JpdGVTZWdtZW50VGFpbCA9IGFCeXRlOworICAgIG1Xcml0ZVNlZ21lbnRUYWlsID0gbmV3VGFpbDsKKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgSW5GcmFtZURpc2NhcmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGJlZ2lucyBhIG5ldyBzZWdtZW50IChpZiBvbmUgaXMgbm90IGFscmVhZHkgb3BlbikKK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6OkluRnJhbWVCZWdpblNlZ21lbnQodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKyAgICB1aW50MTZfdCBoZWFkZXJGbGFncyA9IGtTZWdtZW50SGVhZGVyTm9GbGFnOworCisgICAgLy8gVmVyaWZ5IHRoYXQgc2VnbWVudCBpcyBub3QgeWV0IHN0YXJ0ZWQgKGkuZS4sIGhlYWQgYW5kIHRhaWwgYXJlIHRoZSBzYW1lKS4KKyAgICBWZXJpZnlPckV4aXQobVdyaXRlU2VnbWVudEhlYWQgPT0gbVdyaXRlU2VnbWVudFRhaWwpOworCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBuZXcgZnJhbWUgKGkuZS4sIGZyYW1lIHN0YXJ0IGlzIHNhbWUgYXMgc2VnbWVudCBoZWFkKQorICAgIGlmIChtV3JpdGVGcmFtZVN0YXJ0ID09IG1Xcml0ZVNlZ21lbnRIZWFkKQorICAgIHsKKyAgICAgICAgaGVhZGVyRmxhZ3MgfD0ga1NlZ21lbnRIZWFkZXJOZXdGcmFtZUZsYWc7CisgICAgfQorCisgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHNlZ21lbnQgaGVhZGVyLgorICAgIGZvciAodWludDE2X3QgaSA9IGtTZWdtZW50SGVhZGVyU2l6ZTsgaTsgaS0tKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEluRnJhbWVGZWVkQnl0ZSgwKSk7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIGZsYWdzIGF0IHRoZSBzZWdtZW50IGhlYWQKKyAgICBXcml0ZVVpbnQxNkF0KG1Xcml0ZVNlZ21lbnRIZWFkLCBoZWFkZXJGbGFncyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNsb3Nlcy9lbmRzIHRoZSBjdXJyZW50IHNlZ21lbnQuCit2b2lkIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lRW5kU2VnbWVudCh1aW50MTZfdCBhSGVhZGVyRmxhZ3MpCit7CisgICAgdWludDE2X3Qgc2VnbWVudExlbmd0aDsKKyAgICB1aW50MTZfdCBoZWFkZXI7CisKKyAgICBzZWdtZW50TGVuZ3RoID0gR2V0RGlzdGFuY2UobVdyaXRlU2VnbWVudEhlYWQsIG1Xcml0ZVNlZ21lbnRUYWlsKTsKKworICAgIGlmIChzZWdtZW50TGVuZ3RoID49IGtTZWdtZW50SGVhZGVyU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIFJlZHVjZSB0aGUgaGVhZGVyIHNpemUuCisgICAgICAgIHNlZ21lbnRMZW5ndGggLT0ga1NlZ21lbnRIZWFkZXJTaXplOworCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgbGVuZ3RoIGFuZCB0aGUgZmxhZ3MgaW4gc2VnbWVudCBoZWFkZXIgKGF0IHNlZ21lbnQgaGVhZCBwb2ludGVyKS4KKyAgICAgICAgaGVhZGVyID0gUmVhZFVpbnQxNkF0KG1Xcml0ZVNlZ21lbnRIZWFkKTsKKyAgICAgICAgaGVhZGVyIHw9IChzZWdtZW50TGVuZ3RoICYga1NlZ21lbnRIZWFkZXJMZW5ndGhNYXNrKTsKKyAgICAgICAgaGVhZGVyIHw9IGFIZWFkZXJGbGFnczsKKyAgICAgICAgV3JpdGVVaW50MTZBdChtV3JpdGVTZWdtZW50SGVhZCwgaGVhZGVyKTsKKworICAgICAgICAvLyBNb3ZlIHRoZSBzZWdtZW50IGhlYWQgdG8gY3VycmVudCB0YWlsICh0byBiZSByZWFkeSBmb3IgYSBwb3NzaWJsZSBuZXh0IHNlZ21lbnQpLgorICAgICAgICBtV3JpdGVTZWdtZW50SGVhZCA9IG1Xcml0ZVNlZ21lbnRUYWlsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBSZW1vdmUgdGhlIGN1cnJlbnQgc2VnbWVudCAobW92ZSB0aGUgdGFpbCBiYWNrIHRvIGhlYWQpLgorICAgICAgICBtV3JpdGVTZWdtZW50VGFpbCA9IG1Xcml0ZVNlZ21lbnRIZWFkOworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgZGlzY2FyZHMgdGhlIGN1cnJlbnQgZnJhbWUuCit2b2lkIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lRGlzY2FyZCh2b2lkKQoreworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKworICAgIC8vIE1vdmUgdGhlIHdyaXRlIHNlZ21lbnQgaGVhZCBhbmQgdGFpbCBwb2ludGVycyBiYWNrIHRvIGZyYW1lIHN0YXJ0LgorICAgIG1Xcml0ZVNlZ21lbnRIZWFkID0gbVdyaXRlU2VnbWVudFRhaWwgPSBtV3JpdGVGcmFtZVN0YXJ0OworCisgICAgLy8gRnJlZSBhbnkgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIGN1cnJlbnQgZnJhbWUuCisgICAgd2hpbGUgKChtZXNzYWdlID0gb3RNZXNzYWdlUXVldWVHZXRIZWFkKCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSkpICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJm1Xcml0ZUZyYW1lTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKyAgICAgICAgb3RNZXNzYWdlRnJlZShtZXNzYWdlKTsKKyAgICB9Cit9CisKK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6OkluRnJhbWVCZWdpbih2b2lkKQoreworICAgIC8vIERpc2NhcmQgYW55IHByZXZpb3VzIGZyYW1lLgorICAgIEluRnJhbWVEaXNjYXJkKCk7CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciBOY3BGcmFtZUJ1ZmZlcjo6SW5GcmFtZUZlZWREYXRhKGNvbnN0IHVpbnQ4X3QgKmFEYXRhQnVmZmVyLCB1aW50MTZfdCBhRGF0YUJ1ZmZlckxlbmd0aCkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIEJlZ2luIGEgbmV3IHNlZ21lbnQgKGlmIHdlIGFyZSBub3QgaW4gbWlkZGxlIG9mIHNlZ21lbnQgYWxyZWFkeSkuCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEluRnJhbWVCZWdpblNlZ21lbnQoKSk7CisKKyAgICAvLyBXcml0ZSB0aGUgZGF0YSBidWZmZXIKKyAgICB3aGlsZSAoYURhdGFCdWZmZXJMZW5ndGgtLSkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBJbkZyYW1lRmVlZEJ5dGUoKmFEYXRhQnVmZmVyKyspKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lRmVlZE1lc3NhZ2Uob3RNZXNzYWdlICphTWVzc2FnZSkKK3sKKyAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgIC8vIEJlZ2luIGEgbmV3IHNlZ21lbnQgKGlmIHdlIGFyZSBub3QgaW4gbWlkZGxlIG9mIHNlZ21lbnQgYWxyZWFkeSkuCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IEluRnJhbWVCZWdpblNlZ21lbnQoKSk7CisKKyAgICAvLyBFbnF1ZXVlIHRoZSBtZXNzYWdlIGluIHRoZSBjdXJyZW50IHdyaXRlIGZyYW1lIHF1ZXVlLgorICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBvdE1lc3NhZ2VRdWV1ZUVucXVldWUoJm1Xcml0ZUZyYW1lTWVzc2FnZVF1ZXVlLCBhTWVzc2FnZSkpOworCisgICAgLy8gRW5kL0Nsb3NlIHRoZSBjdXJyZW50IHNlZ21lbnQgbWFya2luZyB0aGUgZmxhZyB0aGF0IGl0IGNvbnRhaW5zIGFuIGFzc29jaWF0ZWQgbWVzc2FnZS4KKyAgICBJbkZyYW1lRW5kU2VnbWVudChrU2VnbWVudEhlYWRlck1lc3NhZ2VJbmRpY2F0b3JGbGFnKTsKKworZXhpdDoKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6OkluRnJhbWVFbmQodm9pZCkKK3sKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICAvLyBFbmQvQ2xvc2UgdGhlIGN1cnJlbnQgc2VnbWVudCAoaWYgYW55KS4KKyAgICBJbkZyYW1lRW5kU2VnbWVudChrU2VnbWVudEhlYWRlck5vRmxhZyk7CisKKyAgICAvLyBTYXZlIGFuZCB1c2UgdGhlIGZyYW1lIHN0YXJ0IHBvaW50ZXIgYXMgdGhlIHRhZyBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lLgorICAgIG1Xcml0ZUZyYW1lVGFnID0gbVdyaXRlRnJhbWVTdGFydDsKKworICAgIC8vIFVwZGF0ZSB0aGUgZnJhbWUgc3RhcnQgcG9pbnRlciB0byBjdXJyZW50IHNlZ21lbnQgaGVhZCB0byBiZSByZWFkeSBmb3IgbmV4dCBmcmFtZS4KKyAgICBtV3JpdGVGcmFtZVN0YXJ0ID0gbVdyaXRlU2VnbWVudEhlYWQ7CisKKyAgICAvLyBNb3ZlIGFsbCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgZnJhbWUgcXVldWUgdG8gdGhlIG1haW4gcXVldWUuCisgICAgd2hpbGUgKChtZXNzYWdlID0gb3RNZXNzYWdlUXVldWVHZXRIZWFkKCZtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZSkpICE9IE5VTEwpCisgICAgeworICAgICAgICBvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJm1Xcml0ZUZyYW1lTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKyAgICAgICAgb3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZtTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAobUZyYW1lQWRkZWRDYWxsYmFjayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUZyYW1lQWRkZWRDYWxsYmFjayhtRnJhbWVBZGRlZENvbnRleHQsIG1Xcml0ZUZyYW1lVGFnLCB0aGlzKTsKKyAgICB9CisKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIE5jcEZyYW1lQnVmZmVyOjpJbkZyYW1lR2V0TGFzdFRhZyh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtV3JpdGVGcmFtZVRhZzsKK30KKworYm9vbCBOY3BGcmFtZUJ1ZmZlcjo6SXNFbXB0eSh2b2lkKSBjb25zdAoreworICAgIHJldHVybiAobVJlYWRGcmFtZVN0YXJ0ID09IG1Xcml0ZUZyYW1lU3RhcnQpOworfQorCisvLyBTdGFydC9QcmVwYXJlIGEgbmV3IHNlZ21lbnQgZm9yIHJlYWRpbmcuCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpPdXRGcmFtZVByZXBhcmVTZWdtZW50KHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgaGVhZGVyOworCisgICAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgICAvLyBHbyB0byB0aGUgbmV4dCBzZWdtZW50IChzZXQgdGhlIHNlZ21lbnQgaGVhZCB0byBjdXJyZW50IHNlZ21lbnQncyBlbmQvdGFpbCkuCisgICAgICAgIG1SZWFkU2VnbWVudEhlYWQgPSBtUmVhZFNlZ21lbnRUYWlsOworCisgICAgICAgIC8vIEVuc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCAoaS5lLiBzZWdtZW50IGhlYWQgaXMgbm90IGF0IHN0YXJ0IG9mIGZyYW1lIGJlaW5nIHdyaXR0ZW4pLgorICAgICAgICBWZXJpZnlPckV4aXQobVJlYWRTZWdtZW50SGVhZCAhPSBtV3JpdGVGcmFtZVN0YXJ0LCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICAgICAgLy8gUmVhZCB0aGUgc2VnbWVudCBoZWFkZXIuCisgICAgICAgIGhlYWRlciA9IFJlYWRVaW50MTZBdChtUmVhZFNlZ21lbnRIZWFkKTsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHNlZ21lbnQgaXMgdGhlIHN0YXJ0IG9mIGEgZnJhbWUuCisgICAgICAgIGlmIChoZWFkZXIgJiBrU2VnbWVudEhlYWRlck5ld0ZyYW1lRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhpcyBzZWdtZW50IGlzIHN0YXJ0IG9mIGN1cnJlbnQgZnJhbWUsIG90aGVyd2lzZSB0aGUgY3VycmVudCBmcmFtZSBpcyBmaW5pc2hlZC4KKyAgICAgICAgICAgIFZlcmlmeU9yRXhpdChtUmVhZFNlZ21lbnRIZWFkID09IG1SZWFkRnJhbWVTdGFydCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluZCB0YWlsL2VuZCBvZiBjdXJyZW50IHNlZ21lbnQuCisgICAgICAgIG1SZWFkU2VnbWVudFRhaWwgPSBBZHZhbmNlKG1SZWFkU2VnbWVudEhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTZWdtZW50SGVhZGVyU2l6ZSArIChoZWFkZXIgJiBrU2VnbWVudEhlYWRlckxlbmd0aE1hc2spKTsKKworICAgICAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnQgcmVhZCBwb2ludGVyIHRvIHNraXAgdGhlIHNlZ21lbnQgaGVhZGVyLgorICAgICAgICBtUmVhZFBvaW50ZXIgPSBBZHZhbmNlKG1SZWFkU2VnbWVudEhlYWQsIGtTZWdtZW50SGVhZGVyU2l6ZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGRhdGEgYnl0ZXMgdG8gYmUgcmVhZCBpbiB0aGlzIHNlZ21lbnQgKGkuZS4gcmVhZCBwb2ludGVyIG5vdCBhdCB0aGUgdGFpbCkuCisgICAgICAgIGlmIChtUmVhZFBvaW50ZXIgIT0gbVJlYWRTZWdtZW50VGFpbCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSB0byBgSW5TZWdtZW50YCBhbmQgcmV0dXJuLgorICAgICAgICAgICAgbVJlYWRTdGF0ZSA9IGtSZWFkU3RhdGVJblNlZ21lbnQ7CisKKyAgICAgICAgICAgIEV4aXROb3coKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vIGRhdGEgaW4gdGhpcyBzZWdtZW50LCAgcHJlcGFyZSBhbnkgYXBwZW5kZWQvYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoaXMgc2VnbWVudC4KKyAgICAgICAgaWYgKE91dEZyYW1lUHJlcGFyZU1lc3NhZ2UoKSA9PSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBFeGl0Tm93KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBtZXNzYWdlIChgUHJlcGFyZU1lc3NhZ2UoKWAgcmV0dXJuZWQgYW4gZXJyb3IpLCBsb29wIGJhY2sgdG8gcHJlcGFyZSB0aGUgbmV4dCBzZWdtZW50LgorICAgIH0KKworZXhpdDoKKworICAgIGlmIChlcnJvciAhPSBPVF9FUlJPUl9OT05FKQorICAgIHsKKyAgICAgICAgbVJlYWRTdGF0ZSA9IGtSZWFkU3RhdGVEb25lOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gVGhpcyBtZXRob2QgcHJlcGFyZXMgYW4gYXNzb2NpYXRlZCBtZXNzYWdlIGluIGN1cnJlbnQgc2VnbWVudCBhbmQgZmlsbHMgdGhlIG1lc3NhZ2UgYnVmZmVyLiBJdCByZXR1cm5zCisvLyBUaHJlYWRFcnJvcl9Ob3RGb3VuZCBpZiB0aGVyZSBpcyBubyBtZXNzYWdlIG9yIGlmIHRoZSBtZXNzYWdlIGhhcyBubyBjb250ZW50Lgorb3RFcnJvciBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVQcmVwYXJlTWVzc2FnZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIHVpbnQxNl90IGhlYWRlcjsKKworICAgIC8vIFJlYWQgdGhlIHNlZ21lbnQgaGVhZGVyCisgICAgaGVhZGVyID0gUmVhZFVpbnQxNkF0KG1SZWFkU2VnbWVudEhlYWQpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIHNlZ21lbnQgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgbWVzc2FnZSBvciByZXR1cm4gYE5vdEZvdW5kYCBlcnJvci4KKyAgICBWZXJpZnlPckV4aXQoKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTWVzc2FnZUluZGljYXRvckZsYWcpICE9IDAsIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlLgorICAgIG1SZWFkTWVzc2FnZSA9IChtUmVhZE1lc3NhZ2UgPT0gTlVMTCkgPworICAgICAgICAgICAgICAgICAgIG90TWVzc2FnZVF1ZXVlR2V0SGVhZCgmbU1lc3NhZ2VRdWV1ZSkgOgorICAgICAgICAgICAgICAgICAgIG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgmbU1lc3NhZ2VRdWV1ZSwgbVJlYWRNZXNzYWdlKTsKKworICAgIFZlcmlmeU9yRXhpdChtUmVhZE1lc3NhZ2UgIT0gTlVMTCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgLy8gUmVzZXQgdGhlIG9mZnNldCBmb3IgcmVhZGluZyB0aGUgbWVzc2FnZS4KKyAgICBtUmVhZE1lc3NhZ2VPZmZzZXQgPSAwOworCisgICAgLy8gRmlsbCB0aGUgY29udGVudCBmcm9tIGN1cnJlbnQgbWVzc2FnZSBpbnRvIHRoZSBtZXNzYWdlIGJ1ZmZlci4KKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gT3V0RnJhbWVGaWxsTWVzc2FnZUJ1ZmZlcigpKTsKKworICAgIC8vIElmIGFsbCBzdWNjZXNzZnVsLCBzZXQgdGhlIHN0YXRlIHRvIGBJbk1lc3NhZ2VgLgorICAgIG1SZWFkU3RhdGUgPSBrUmVhZFN0YXRlSW5NZXNzYWdlOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gVGhpcyBtZXRob2QgZmlsbHMgY29udGVudCBmcm9tIGN1cnJlbnQgbWVzc2FnZSBpbnRvIHRoZSBtZXNzYWdlIGJ1ZmZlci4gSXQgcmV0dXJucyBPVF9FUlJPUl9OT1RfRk9VTkQgaWYgbm8gbW9yZQorLy8gY29udGVudCBpbiB0aGUgY3VycmVudCBtZXNzYWdlLgorb3RFcnJvciBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVGaWxsTWVzc2FnZUJ1ZmZlcih2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3IgPSBPVF9FUlJPUl9OT05FOworICAgIGludCByZWFkTGVuZ3RoOworCisgICAgVmVyaWZ5T3JFeGl0KG1SZWFkTWVzc2FnZSAhPSBOVUxMLCBlcnJvciA9IE9UX0VSUk9SX05PVF9GT1VORCk7CisKKyAgICBWZXJpZnlPckV4aXQobVJlYWRNZXNzYWdlT2Zmc2V0IDwgb3RNZXNzYWdlR2V0TGVuZ3RoKG1SZWFkTWVzc2FnZSksIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFJlYWQgcG9ydGlvbiBvZiBjdXJyZW50IG1lc3NhZ2UgZnJvbSB0aGUgb2Zmc2V0IGludG8gbWVzc2FnZSBidWZmZXIuCisgICAgcmVhZExlbmd0aCA9IG90TWVzc2FnZVJlYWQobVJlYWRNZXNzYWdlLCBtUmVhZE1lc3NhZ2VPZmZzZXQsIG1NZXNzYWdlQnVmZmVyLCBzaXplb2YobU1lc3NhZ2VCdWZmZXIpKTsKKworICAgIFZlcmlmeU9yRXhpdChyZWFkTGVuZ3RoID4gMCwgZXJyb3IgPSBPVF9FUlJPUl9OT1RfRk9VTkQpOworCisgICAgLy8gVXBkYXRlIHRoZSBtZXNzYWdlIG9mZnNldCwgc2V0IHVwIHRoZSBtZXNzYWdlIHRhaWwsIGFuZCBzZXQgcmVhZCBwb2ludGVyIHRvIHN0YXJ0IG9mIG1lc3NhZ2UgYnVmZmVyLgorCisgICAgbVJlYWRNZXNzYWdlT2Zmc2V0ICs9IHJlYWRMZW5ndGg7CisKKyAgICBtUmVhZE1lc3NhZ2VUYWlsID0gbU1lc3NhZ2VCdWZmZXIgKyByZWFkTGVuZ3RoOworCisgICAgbVJlYWRQb2ludGVyID0gbU1lc3NhZ2VCdWZmZXI7CisKK2V4aXQ6CisgICAgcmV0dXJuIGVycm9yOworfQorCitvdEVycm9yIE5jcEZyYW1lQnVmZmVyOjpPdXRGcmFtZUJlZ2luKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisKKyAgICBtUmVhZE1lc3NhZ2UgPSBOVUxMOworCisgICAgLy8gTW92ZSB0aGUgc2VnbWVudCBoZWFkIGFuZCB0YWlsIHRvIHN0YXJ0IG9mIGZyYW1lLgorICAgIG1SZWFkU2VnbWVudEhlYWQgPSBtUmVhZFNlZ21lbnRUYWlsID0gbVJlYWRGcmFtZVN0YXJ0OworCisgICAgLy8gUHJlcGFyZSB0aGUgY3VycmVudCBzZWdtZW50IGZvciByZWFkaW5nLgorICAgIGVycm9yID0gT3V0RnJhbWVQcmVwYXJlU2VnbWVudCgpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCitib29sIE5jcEZyYW1lQnVmZmVyOjpPdXRGcmFtZUhhc0VuZGVkKHZvaWQpCit7CisgICAgcmV0dXJuIChtUmVhZFN0YXRlID09IGtSZWFkU3RhdGVEb25lKTsKK30KKwordWludDhfdCBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVSZWFkQnl0ZSh2b2lkKQoreworICAgIG90RXJyb3IgZXJyb3I7CisgICAgdWludDhfdCByZXR2YWwgPSBrUmVhZEJ5dGVBZnRlckZyYW1lSGFzRW5kZWQ7CisKKyAgICBzd2l0Y2ggKG1SZWFkU3RhdGUpCisgICAgeworICAgIGNhc2Uga1JlYWRTdGF0ZURvbmU6CisKKyAgICAgICAgcmV0dmFsID0ga1JlYWRCeXRlQWZ0ZXJGcmFtZUhhc0VuZGVkOworCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrUmVhZFN0YXRlSW5TZWdtZW50OgorCisgICAgICAgIC8vIFJlYWQgYSBieXRlIGZyb20gY3VycmVudCByZWFkIHBvaW50ZXIgYW5kIG1vdmUgdGhlIHJlYWQgcG9pbnRlciBmb3J3YXJkLgorICAgICAgICByZXR2YWwgPSAqbVJlYWRQb2ludGVyOworICAgICAgICBtUmVhZFBvaW50ZXIgPSBOZXh0KG1SZWFkUG9pbnRlcik7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgYXQgZW5kIG9mIGN1cnJlbnQgc2VnbWVudC4KKyAgICAgICAgaWYgKG1SZWFkUG9pbnRlciA9PSBtUmVhZFNlZ21lbnRUYWlsKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBQcmVwYXJlIGFueSBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlZ21lbnQuCisgICAgICAgICAgICBlcnJvciA9IE91dEZyYW1lUHJlcGFyZU1lc3NhZ2UoKTsKKworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbWVzc2FnZSwgbW92ZSB0byBuZXh0IHNlZ21lbnQgKGlmIGFueSkuCisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPdXRGcmFtZVByZXBhcmVTZWdtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1JlYWRTdGF0ZUluTWVzc2FnZToKKworICAgICAgICAvLyBSZWFkIGEgYnl0ZSBmcm9tIGN1cnJlbnQgcmVhZCBwb2ludGVyIGFuZCBtb3ZlIHRoZSByZWFkIHBvaW50ZXIgZm9yd2FyZC4KKyAgICAgICAgcmV0dmFsID0gKm1SZWFkUG9pbnRlcjsKKyAgICAgICAgbVJlYWRQb2ludGVyKys7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgYXQgdGhlIGVuZCBvZiBjb250ZW50IGluIG1lc3NhZ2UgYnVmZmVyLgorICAgICAgICBpZiAobVJlYWRQb2ludGVyID09IG1SZWFkTWVzc2FnZVRhaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZpbGwgbW9yZSBieXRlcyBmcm9tIGN1cnJlbnQgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgYnVmZmVyLgorICAgICAgICAgICAgZXJyb3IgPSBPdXRGcmFtZUZpbGxNZXNzYWdlQnVmZmVyKCk7CisKKyAgICAgICAgICAgIC8vIElmIG5vIG1vcmUgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UsIG1vdmUgdG8gbmV4dCBzZWdtZW50IChpZiBhbnkpLgorICAgICAgICAgICAgaWYgKGVycm9yICE9IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgT3V0RnJhbWVQcmVwYXJlU2VnbWVudCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKwordWludDE2X3QgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lUmVhZCh1aW50MTZfdCBhUmVhZExlbmd0aCwgdWludDhfdCAqYURhdGFCdWZmZXIpCit7CisgICAgdWludDE2X3QgYnl0ZXNSZWFkID0gMDsKKworICAgIGZvciAoYnl0ZXNSZWFkID0gMDsgKGJ5dGVzUmVhZCA8IGFSZWFkTGVuZ3RoKSAmJiAhT3V0RnJhbWVIYXNFbmRlZCgpOyBieXRlc1JlYWQrKykKKyAgICB7CisgICAgICAgICphRGF0YUJ1ZmZlcisrID0gT3V0RnJhbWVSZWFkQnl0ZSgpOworICAgIH0KKworICAgIHJldHVybiBieXRlc1JlYWQ7Cit9CisKK290RXJyb3IgTmNwRnJhbWVCdWZmZXI6Ok91dEZyYW1lUmVtb3ZlKHZvaWQpCit7CisgICAgb3RFcnJvciBlcnJvciA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDhfdCAqYnVmUHRyOworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKyAgICB1aW50MTZfdCBoZWFkZXI7CisgICAgRnJhbWVUYWcgdGFnOworCisgICAgVmVyaWZ5T3JFeGl0KCFJc0VtcHR5KCksIGVycm9yID0gT1RfRVJST1JfTk9UX0ZPVU5EKTsKKworICAgIC8vIFNhdmUgdGhlIGZyYW1lIHN0YXJ0IHBvaW50ZXIgYXMgdGhlIHRhZyBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lIGJlaW5nIHJlbW92ZWQuCisgICAgdGFnID0gbVJlYWRGcmFtZVN0YXJ0OworCisgICAgLy8gQmVnaW4gYXQgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgZnJhbWUgYW5kIG1vdmUgdGhyb3VnaCBhbGwgc2VnbWVudHMuCisKKyAgICBidWZQdHIgPSBtUmVhZEZyYW1lU3RhcnQ7CisKKyAgICB3aGlsZSAoYnVmUHRyICE9IG1Xcml0ZUZyYW1lU3RhcnQpCisgICAgeworICAgICAgICAvLyBSZWFkIHRoZSBzZWdtZW50IGhlYWRlcgorICAgICAgICBoZWFkZXIgPSBSZWFkVWludDE2QXQoYnVmUHRyKTsKKworICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzZWdtZW50IGRlZmluZXMgYSBuZXcgZnJhbWUsIGFuZCBpdCBpcyBub3QgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgZnJhbWUsIHRoZW4gd2UgaGF2ZSByZWFjaGVkCisgICAgICAgIC8vIGVuZCBvZiBjdXJyZW50IGZyYW1lLgorICAgICAgICBpZiAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJOZXdGcmFtZUZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChidWZQdHIgIT0gbVJlYWRGcmFtZVN0YXJ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgY3VycmVudCBzZWdtZW50IGhhcyBhbiBhcHBlbmRlZCBtZXNzYWdlLCByZW1vdmUgaXQgZnJvbSBtZXNzYWdlIHF1ZXVlIGFuZCBmcmVlIGl0LgorICAgICAgICBpZiAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJNZXNzYWdlSW5kaWNhdG9yRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChtZXNzYWdlID0gb3RNZXNzYWdlUXVldWVHZXRIZWFkKCZtTWVzc2FnZVF1ZXVlKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJm1NZXNzYWdlUXVldWUsIG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIG90TWVzc2FnZUZyZWUobWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBNb3ZlIHRoZSBwb2ludGVyIHRvIG5leHQgc2VnbWVudC4KKyAgICAgICAgYnVmUHRyID0gQWR2YW5jZShidWZQdHIsIGtTZWdtZW50SGVhZGVyU2l6ZSArIChoZWFkZXIgJiBrU2VnbWVudEhlYWRlckxlbmd0aE1hc2spKTsKKyAgICB9CisKKyAgICBtUmVhZEZyYW1lU3RhcnQgPSBidWZQdHI7CisKKyAgICBtUmVhZFN0YXRlID0ga1JlYWRTdGF0ZURvbmU7CisgICAgbVJlYWRGcmFtZUxlbmd0aCA9IGtVbmtub3duRnJhbWVMZW5ndGg7CisKKyAgICBpZiAobUZyYW1lUmVtb3ZlZENhbGxiYWNrICE9IE5VTEwpCisgICAgeworICAgICAgICBtRnJhbWVSZW1vdmVkQ2FsbGJhY2sobUZyYW1lUmVtb3ZlZENvbnRleHQsIHRhZywgdGhpcyk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworCit1aW50MTZfdCBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVHZXRMZW5ndGgodm9pZCkKK3sKKyAgICB1aW50MTZfdCBmcmFtZUxlbmd0aCA9IDA7CisgICAgdWludDE2X3QgaGVhZGVyOworICAgIHVpbnQ4X3QgKmJ1ZlB0cjsKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworCisgICAgLy8gSWYgdGhlIGZyYW1lIGxlbmd0aCB3YXMgY2FsY3VsYXRlZCBiZWZvcmUsIHJldHVybiB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIGxlbmd0aC4KKyAgICBWZXJpZnlPckV4aXQobVJlYWRGcmFtZUxlbmd0aCA9PSBrVW5rbm93bkZyYW1lTGVuZ3RoLCBmcmFtZUxlbmd0aCA9IG1SZWFkRnJhbWVMZW5ndGgpOworCisgICAgVmVyaWZ5T3JFeGl0KCFJc0VtcHR5KCksIGZyYW1lTGVuZ3RoID0gMCk7CisKKyAgICAvLyBDYWxjdWxhdGUgZnJhbWUgbGVuZ3RoIGJ5IGFkZGluZyBsZW5ndGggb2YgYWxsIHNlZ21lbnRzIGFuZCBtZXNzYWdlcyB3aXRoaW4gdGhlIGN1cnJlbnQgZnJhbWUuCisKKyAgICBidWZQdHIgPSBtUmVhZEZyYW1lU3RhcnQ7CisKKyAgICB3aGlsZSAoYnVmUHRyICE9IG1Xcml0ZUZyYW1lU3RhcnQpCisgICAgeworICAgICAgICAvLyBSZWFkIHRoZSBzZWdtZW50IGhlYWRlcgorICAgICAgICBoZWFkZXIgPSBSZWFkVWludDE2QXQoYnVmUHRyKTsKKworICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzZWdtZW50IGRlZmluZXMgYSBuZXcgZnJhbWUsIGFuZCBpdCBpcyBub3QgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgZnJhbWUsIHRoZW4gd2UgaGF2ZSByZWFjaGVkCisgICAgICAgIC8vIGVuZCBvZiBjdXJyZW50IGZyYW1lLgorICAgICAgICBpZiAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJOZXdGcmFtZUZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChidWZQdHIgIT0gbVJlYWRGcmFtZVN0YXJ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgY3VycmVudCBzZWdtZW50IGhhcyBhbiBhc3NvY2lhdGVkIG1lc3NhZ2UsIGFkZCBpdHMgbGVuZ3RoIHRvIGZyYW1lIGxlbmd0aC4KKyAgICAgICAgaWYgKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTWVzc2FnZUluZGljYXRvckZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAobWVzc2FnZSA9PSBOVUxMKSA/CisgICAgICAgICAgICAgICAgICAgICAgb3RNZXNzYWdlUXVldWVHZXRIZWFkKCZtTWVzc2FnZVF1ZXVlKSA6CisgICAgICAgICAgICAgICAgICAgICAgb3RNZXNzYWdlUXVldWVHZXROZXh0KCZtTWVzc2FnZVF1ZXVlLCBtZXNzYWdlKTsKKworICAgICAgICAgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZUxlbmd0aCArPSBvdE1lc3NhZ2VHZXRMZW5ndGgobWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgdGhlIGxlbmd0aCBvZiBjdXJyZW50IHNlZ21lbnQgdG8gdGhlIGZyYW1lIGxlbmd0aC4KKyAgICAgICAgZnJhbWVMZW5ndGggKz0gKGhlYWRlciAmIGtTZWdtZW50SGVhZGVyTGVuZ3RoTWFzayk7CisKKyAgICAgICAgLy8gTW92ZSB0aGUgcG9pbnRlciB0byBuZXh0IHNlZ21lbnQuCisgICAgICAgIGJ1ZlB0ciA9IEFkdmFuY2UoYnVmUHRyLCBrU2VnbWVudEhlYWRlclNpemUgKyAoaGVhZGVyICYga1NlZ21lbnRIZWFkZXJMZW5ndGhNYXNrKSk7CisgICAgfQorCisgICAgLy8gUmVtZW1iZXIgdGhlIGNhbGN1bGF0ZWQgZnJhbWUgbGVuZ3RoIGZvciBjdXJyZW50IGZyYW1lLgorICAgIG1SZWFkRnJhbWVMZW5ndGggPSBmcmFtZUxlbmd0aDsKKworZXhpdDoKKyAgICByZXR1cm4gZnJhbWVMZW5ndGg7Cit9CisKK05jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBOY3BGcmFtZUJ1ZmZlcjo6T3V0RnJhbWVHZXRUYWcodm9pZCkgY29uc3QKK3sKKyAgICAvLyBJZiBidWZmZXIgaXMgZW1wdHkgdXNlIGBrSW52YWxpZFRhZ2AsIG90aGVyd2lzZSB1c2UgdGhlIGZyYW1lIHN0YXJ0IHBvaW50ZXIgYXMgdGhlIHRhZyBhc3NvY2lhdGVkIHdpdGgKKyAgICAvLyBjdXJyZW50IG91dCBmcmFtZSBiZWluZyByZWFkCisKKyAgICByZXR1cm4gSXNFbXB0eSgpID8ga0ludmFsaWRUYWcgOiBtUmVhZEZyYW1lU3RhcnQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdApkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3BfYnVmZmVyLmhwcCBiL3NyYy9uY3AvbmNwX2J1ZmZlci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZmEzOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvbmNwX2J1ZmZlci5ocHAKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgTkNQIGZyYW1lIGJ1ZmZlciBjbGFzcy4KKyAqLworCisjaWZuZGVmIE5DUF9GUkFNRV9CVUZGRVJfSFBQXworI2RlZmluZSBOQ1BfRlJBTUVfQlVGRkVSX0hQUF8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9tZXNzYWdlLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCituYW1lc3BhY2Ugb3QgeworCitjbGFzcyBOY3BGcmFtZUJ1ZmZlcgoreworcHVibGljOgorICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIGZyYW1lIHRhZyB0eXBlLiBGcmFtZSB0YWdzIGNhbiBiZSBjb21wYXJlZCB3aXRoIG9uZSBhbm90aGVyIHVzaW5nIG9wZXJhdG9yIGA9PWAuCisgICAgICoKKyAgICAgKi8KKyAgICB0eXBlZGVmIGNvbnN0IHZvaWQgKkZyYW1lVGFnOworCisgICAgLyoqCisgICAgICogRGVmaW5lcyB0aGUgdGFnIHRvIGluZGljYXRlIGFuIGludmFsaWQgdGFnIChlLmcuLCB3aGVuIHRoZXJlIGlzIG5vIGZyYW1lKS4KKyAgICAgKgorICAgICAqLworICAgIHN0YXRpYyBjb25zdCBGcmFtZVRhZyBrSW52YWxpZFRhZzsKKworICAgIC8qKgorICAgICAqIERlZmluZXMgYSBmdW5jdGlvbiBwb2ludGVyIGNhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgdG8gaW5mb3JtIGEgY2hhbmdlIGluIGBOY3BGcmFtZUJ1ZmZlcmAgZWl0aGVyIHdoZW4gYSBuZXcKKyAgICAgKiBmcmFtZSBpcyBhZGRlZC93cml0dGVuIHRvIGBOY3BGcmFtZUJ1ZmZlcmAgb3Igd2hlbiBhIGZyYW1lIGlzIHJlbW92ZWQgZnJvbSBgTmNwRnJhbWVCdWZmZXJgLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUNvbnRleHQgICAgICAgICBBIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGNvbnRleHQgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFtW2luXSAgYVRhZyAgICAgICAgICAgICBUaGUgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnJhbWUgd2hpY2ggaXMgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICAgKiBAcGFyYW1baW5dICBhTmNwRnJhbWVCdWZmZXIgIEEgcG9pbnRlciB0byB0aGUgYE5jcEZyYW1lQnVmZmVyYC4KKyAgICAgKgorICAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKkJ1ZmZlckNhbGxiYWNrKSh2b2lkICphQ29udGV4dCwgRnJhbWVUYWcgYVRhZywgTmNwRnJhbWVCdWZmZXIgKmFOY3BGcmFtZUJ1ZmZlcik7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYW4gTkNQIGZyYW1lIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFCdWZmZXIgICAgICAgIEEgcG9pbnRlciB0byBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIHVzZWQgYnkgTkNQIGZyYW1lIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhQnVmZmVyTGVuZ3RoICBUaGUgYnVmZmVyIHNpemUgKGluIGJ5dGVzKS4KKyAgICAgKgorICAgICAqLworICAgIE5jcEZyYW1lQnVmZmVyKHVpbnQ4X3QgKmFCdWZmZXIsIHVpbnQxNl90IGFCdWZmZXJMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIHRoZSBOQ1AgZnJhbWUgYnVmZmVyLiBBbGwgdGhlIGZyYW1lcyBhcmUgY2xlYXJlZC9yZW1vdmVkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBDbGVhcih2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGBGcmFtZUFkZGVkYCBjYWxsYmFjayBhbmQgaXRzIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgbWV0aG9kIHdpbGwgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBjYWxsYmFjayBhbmQgaXRzIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhRnJhbWVBZGRlZENhbGxiYWNrICAgICAgQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGEgbmV3IGZyYW1lIGlzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lQWRkZWRDb250ZXh0ICAgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCB1c2VkIHdpdGggZnJhbWUgYWRkZWQgY2FsbGJhY2suCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEZyYW1lQWRkZWRDYWxsYmFjayhCdWZmZXJDYWxsYmFjayBhRnJhbWVBZGRlZENhbGxiYWNrLCB2b2lkICphRnJhbWVBZGRlZENvbnRleHQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgYEZyYW1lUmVtb3ZlZGAgY2FsbGJhY2sgYW5kIGl0cyBjb250ZXh0LgorICAgICAqCisgICAgICogU3Vic2VxdWVudCBjYWxscyB0byB0aGlzIG1ldGhvZCB3aWxsIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgY2FsbGJhY2sgYW5kIGl0cyBjb250ZXh0LgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lUmVtb3ZlZENhbGxiYWNrICAgIENhbGxiYWNrIGludm9rZWQgd2hlbiBhIGZyYW1lIGlzIHJlbW92ZWQgZnJvbSBidWZmZXIuCisgICAgICogQHBhcmFtW2luXSAgYUZyYW1lUmVtb3ZlZENvbnRleHQgICAgIEEgcG9pbnRlciB0byBhcmJpdHJhcnkgY29udGV4dCB1c2VkIHdpdGggZnJhbWUgcmVtb3ZlZCBjYWxsYmFjay4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RnJhbWVSZW1vdmVkQ2FsbGJhY2soQnVmZmVyQ2FsbGJhY2sgYUZyYW1lUmVtb3ZlZENhbGxiYWNrLCB2b2lkICphRnJhbWVSZW1vdmVkQ29udGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBiZWdpbnMgYSBuZXcgaW5wdXQgZnJhbWUgdG8gYmUgYWRkZWQvd3JpdHRlbiB0byB0aGUgZnJhbWUgYnVmZmVyLgorCisgICAgICogSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBmcmFtZSBiZWluZyB3cml0dGVuIChgSW5GcmFtZUVuZCgpYCBoYXMgbm90IHlldCBiZWVuIGNhbGxlZCBvbiB0aGUgZnJhbWUpLCB0aGlzIG1ldGhvZAorICAgICAqIHdpbGwgZGlzY2FyZCBhbmQgY2xlYXIgdGhlIHByZXZpb3VzIHVuZmluaXNoZWQgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZCBhIG5ldyBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgICBJbnN1ZmZpY2llbnQgYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSB0byBzdGFydCBhIG5ldyBmcmFtZS4KKyAgICAgKgorICAgICAqLworICAgIG90RXJyb3IgSW5GcmFtZUJlZ2luKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgYWRkcyBkYXRhIHRvIHRoZSBjdXJyZW50IGlucHV0IGZyYW1lIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIElmIG5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUsIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbmQgY2xlYXIgdGhlIGZyYW1lIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFCdWZmZXIgICAgICAgIEEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KKyAgICAgKiBAcGFyYW1baW5dICBhRGF0YUJ1ZmZlckxlbmd0aCAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PTkUgICAgICBTdWNjZXNzZnVsbHkgYWRkZWQgbmV3IGRhdGEgdG8gdGhlIGZyYW1lLgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9fQlVGUyAgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGFkZCBkYXRhLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbkZyYW1lRmVlZERhdGEoY29uc3QgdWludDhfdCAqYURhdGFCdWZmZXIsIHVpbnQxNl90IGFEYXRhQnVmZmVyTGVuZ3RoKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgYSBtZXNzYWdlIHRvIHRoZSBjdXJyZW50IGlucHV0IGZyYW1lIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIElmIG5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUsIHRoaXMgbWV0aG9kIHdpbGwgZGlzY2FyZCBhbmQgY2xlYXIgdGhlIGZyYW1lIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgorICAgICAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgdGhlIHBhc3NlZC1pbiBtZXNzYWdlIEBwIGFNZXNzYWdlIHdpbGwgYmUgb3duZWQgYnkgdGhlIGZyYW1lIGJ1ZmZlciBpbnN0YW5jZSBhbmQgd2lsbCBiZQorICAgICAqIGZyZWVkIHdoZW4gZWl0aGVyIHRoZSB0aGUgZnJhbWUgaXMgcmVtb3ZlZCBvciBkaXNjYXJkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhTWVzc2FnZSAgICAgICAgIEEgIG1lc3NhZ2UgdG8gYmUgYWRkZWQgdG8gY3VycmVudCBmcmFtZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGFkZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbkZyYW1lRmVlZE1lc3NhZ2Uob3RNZXNzYWdlICphTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBmaW5hbGl6ZXMvZW5kcyB0aGUgY3VycmVudCBpbnB1dCBmcmFtZSBiZWluZyB3cml0dGVuIHRvIHRoZSBidWZmZXIuCisgICAgICoKKyAgICAgKiBJZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLCB0aGlzIG1ldGhvZCB3aWxsIGRpc2NhcmQgYW5kIGNsZWFyIHRoZSBmcmFtZSBiZWZvcmUgcmV0dXJuaW5nIGFuIGVycm9yIHN0YXR1cy4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgU3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBtZXNzYWdlIHRvIHRoZSBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PX0JVRlMgIEluc3VmZmljaWVudCBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIHRvIGFkZCBtZXNzYWdlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBJbkZyYW1lRW5kKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGFnIGFzc2lnbmVkIHRvIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4vYWRkZWQgZnJhbWUgdG8gTmNwQnVmZmVyIChpLmUuLCBsYXN0IGlucHV0CisgICAgICogZnJhbWUgZm9yIHdoaWNoIGBJbkZyYW1lRW5kKClgIHdhcyBjYWxsZWQgYW5kIHJldHVybmVkIHN1Y2Nlc3Mgc3RhdHVzKS4gVGhlIHRhZyBpcyBhIHVuaXF1ZSB2YWx1ZSAod2l0aGluCisgICAgICogY3VycmVudGx5IHF1ZXVlZCBmcmFtZXMpIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGZyYW1lIGluIHRoZSBgTmNwRnJhbWVCdWZmZXJgLiBUaGUgdGFnIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZQorICAgICAqIHNhbWUgZnJhbWUgd2hlbiBpdCBpcyByZWFkIGFuZCByZW1vdmVkIGZyb20gdGhlIE5jcEJ1ZmZlci4gVGFncyBjYW4gYmUgY29tcGFyZWQgdXNpbmcgb3BlcmF0b3IgYD09YC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSB0YWcgb2YgbGFzdCBzdWNjZXNzZnVsbHkgd3JpdHRlbiBmcmFtZSwgb3IgYGtJbnZhbGlkVGFnYCBpZiBubyBmcmFtZSBpcyB3cml0dGVuIHNvIGZhci4KKyAgICAgKi8KKyAgICBGcmFtZVRhZyBJbkZyYW1lR2V0TGFzdFRhZyh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LiBBbiBub24tZW1wdHkgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBmdWxsIGZyYW1lIGZvciByZWFkaW5nLgorICAgICAqCisgICAgICogQHJldHZhbCB0cnVlICAgICAgICAgICAgICAgICBCdWZmZXIgaXMgbm90IGVtcHR5IGFuZCBjb250YWlucyBhdCBsZWFzdCBvbmUgZnVsbCBmcmFtZSBmb3IgcmVhZGluZy4KKyAgICAgKiBAcmV0dmFsIGZhbHNlICAgICAgICAgICAgICAgIEJ1ZmZlciBpcyBlbXB0eSBhbmQgY29udGFpbnMgbm8gZnJhbWUgZm9yIHJlYWRpbmcuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIElzRW1wdHkodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBiZWdpbnMvcHJlcGFyZXMgYSBuZXcgb3V0cHV0IGZyYW1lIHRvIGJlIHJlYWQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLgorICAgICAqCisgICAgICogVGhlIE5DUCBidWZmZXIgbWFpbnRhaW5zIGEgcmVhZCBvZmZzZXQgZm9yIHRoZSBjdXJyZW50IGZyYW1lIGJlaW5nIHJlYWQuIEJlZm9yZSByZWFkaW5nIGFueSBieXRlcyBmcm9tIHRoZSBmcmFtZQorICAgICAqIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgZnJhbWUgYW5kIHNldCB0aGUgcmVhZCBvZmZzZXQuCisgICAgICoKKyAgICAgKiBJZiBwYXJ0IG9mIGN1cnJlbnQgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiByZWFkLCBhIHN1Yi1zZXF1ZW50IGNhbGwgdG8gdGhpcyBtZXRob2Qgd2lsbCByZXNldCB0aGUgcmVhZCBvZmZzZXQKKyAgICAgKiBiYWNrIHRvIGJlZ2lubmluZyBvZiBjdXJyZW50IG91dHB1dCBmcmFtZS4KKyAgICAgKgorICAgICAqIEByZXR2YWwgT1RfRVJST1JfTk9ORSAgICAgICBTdWNjZXNzZnVsbHkgc3RhcnRlZC9wcmVwYXJlZCBhIG5ldyBvdXRwdXQgZnJhbWUgZm9yIHJlYWRpbmcuCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT1RfRk9VTkQgIE5vIGZyYW1lIGF2YWlsYWJsZSBpbiBidWZmZXIgZm9yIHJlYWRpbmcuCisgICAgICoKKyAgICAgKi8KKyAgICBvdEVycm9yIE91dEZyYW1lQmVnaW4odm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lIChiZWluZyByZWFkKSBoYXMgZW5kZWQuCisgICAgICoKKyAgICAgKiBUaGUgTkNQIGJ1ZmZlciBtYWludGFpbnMgYSByZWFkIG9mZnNldCBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lIGJlaW5nIHJlYWQuIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUKKyAgICAgKiByZWFkIG9mZnNldCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQgZnJvbSBjdXJyZW50IGZyYW1lLgorICAgICAqCisgICAgICogQHJldHZhbCB0cnVlICAgICAgICAgICAgICAgICAgIEZyYW1lIGhhcyBlbmRlZCAobm8gbW9yZSBieXRlcyBhdmFpbGFibGUgdG8gcmVhZCBmcm9tIGN1cnJlbnQgb3V0cHV0IGZyYW1lKS4KKyAgICAgKiBAcmV0dmFsIGZhbHNlICAgICAgICAgICAgICAgICAgRnJhbWUgaGFzIGRhdGEgKGNhbiByZWFkIG1vcmUgYnl0ZXMgZnJvbSBjdXJyZW50IG91dHB1dCBmcmFtZSkuCisgICAgICoKKyAgICAgKi8KKyAgICBib29sIE91dEZyYW1lSGFzRW5kZWQodm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZWFkcyBhbmQgcmV0dXJucyB0aGUgbmV4dCBieXRlIGZyb20gdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lLgorICAgICAqCisgICAgICogVGhlIE5DUCBidWZmZXIgbWFpbnRhaW5zIGEgcmVhZCBvZmZzZXQgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSBiZWluZyByZWFkLiBUaGlzIG1ldGhvZCByZWFkcyBhbmQgcmV0dXJucworICAgICAqIHRoZSBuZXh0IGJ5dGUgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBhbmQgbW92ZXMgdGhlIHJlYWQgb2Zmc2V0IGZvcndhcmQuIElmIHJlYWQgb2Zmc2V0IGlzIGFscmVhZHkgYXQgdGhlIGVuZAorICAgICAqIGN1cnJlbnQgb3V0cHV0IGZyYW1lLCB0aGlzIG1ldGhvZCByZXR1cm5zIHplcm8uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyAgICAgVGhlIG5leHQgYnl0ZSBmcm9tIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSBvciB6ZXJvIGlmIGZyYW1lIGhhcyBlbmRlZC4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQ4X3QgT3V0RnJhbWVSZWFkQnl0ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlYWRzIGJ5dGVzIGZyb20gdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lLgorICAgICAqCisgICAgICogVGhlIE5DUCBidWZmZXIgbWFpbnRhaW5zIGEgcmVhZCBvZmZzZXQgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSBiZWluZyByZWFkLiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZWFkCisgICAgICogdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyAoQHAgYURhdGFCdWZmZXJMZW5ndGgpIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGNvcGllcyB0aGUgYnl0ZXMgaW50byB0aGUgZ2l2ZW4KKyAgICAgKiBkYXRhIGJ1ZmZlciAoQHAgYURhdGFCdWZmZXIpLiBJdCBhbHNvIG1vdmVzIHRoZSByZWFkIG9mZnNldCBmb3J3YXJkIGFjY29yZGluZ2x5LiBJZiB0aGVyZSBhcmUgbGVzcyBieXRlcworICAgICAqIHJlbWFpbmluZyBpbiBjdXJyZW50IGZyYW1lLCB0aGUgYXZhaWxhYmxlIGJ5dGVzIGFyZSByZWFkL2NvcGllZC4gVGhpcyBtZXRob2RzIHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMKKyAgICAgKiByZWFkLgorICAgICAqCisgICAgICogQHBhcmFtW2luXSAgYURhdGFCdWZmZXIgICAgICAgIEEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyLgorICAgICAqIEBwYXJhbVtpbl0gIGFSZWFkTGVuZ3RoICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBhbmQgY29waWVkIGludG8gZGF0YSBidWZmZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCBPdXRGcmFtZVJlYWQodWludDE2X3QgYVJlYWRMZW5ndGgsIHVpbnQ4X3QgKmFEYXRhQnVmZmVyKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGN1cnJlbnQvZnJvbnQgb3V0cHV0IGZyYW1lIGZyb20gdGhlIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIFRoZSBOQ1AgYnVmZmVyIHN0b3JlcyB0aGUgZnJhbWVzIGluIEZJRk8gb3JkZXIuIFRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGZyb250IGZyYW1lICh3aGljaCBtYXkgYmUgdGhlIGN1cnJlbnQKKyAgICAgKiBvdXRwdXQgZnJhbWUgYmVpbmcgcmVhZCkgZnJvbSB0aGUgYnVmZmVyLiBUaGVyZSBpcyBubyBuZWVkIHRvIHByZXBhcmUvYmVnaW4gcmVhZGluZyB0aGUgY3VycmVudCBmcmFtZSBiZWZvcmUKKyAgICAgKiByZW1vdmluZyBpdCwgc28gdGhlIGZyb250IGZyYW1lIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgYSBwcmV2aW91cyBjYWxsIHRvIGBPdXRGcmFtZUJlZ2luKClgLgorICAgICAqCisgICAgICogV2hlbiBhIGZyYW1lIGlzIHJlbW92ZWQgYWxsIGl0cyBhc3NvY2lhdGVkIG1lc3NhZ2VzIHdpbGwgYmUgZnJlZWQuCisgICAgICoKKyAgICAgKiBJZiB0aGUgcmVtb3ZlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGlzIG1ldGhvZCB3aWxsIGludm9rZSB0aGUgYEZyYW1lUmVtb3ZlZENhbGxiYWNrYCAoaWYgcHJvdmlkZWQpLgorICAgICAqCisgICAgICogQHJldHZhbCBPVF9FUlJPUl9OT05FICAgICAgIFN1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBmcm9udCBmcmFtZS4KKyAgICAgKiBAcmV0dmFsIE9UX0VSUk9SX05PVF9GT1VORCAgTm8gZnJhbWUgYXZhaWxhYmxlIGluIE5DUCBmcmFtZSBidWZmZXIgdG8gcmVtb3ZlLgorICAgICAqCisgICAgICovCisgICAgb3RFcnJvciBPdXRGcmFtZVJlbW92ZSh2b2lkKTsKKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyAobGVuZ3RoKSBvZiBjdXJyZW50L2Zyb250IGZyYW1lIGluIHRoZSBOQ1AgZnJhbWUgYnVmZmVyLgorICAgICAqCisgICAgICogVGhlIE5DUCBidWZmZXIgc3RvcmVzIHRoZSBmcmFtZXMgaW4gRklGTyBvcmRlci4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBmcm9udCBmcmFtZSAod2hpY2ggbWF5CisgICAgICogYmUgdGhlIGN1cnJlbnQgb3V0cHV0IGZyYW1lIGJlaW5nIHJlYWQpIGZyb20gdGhlIGJ1ZmZlci4gVGhlcmUgaXMgbm8gbmVlZCB0byBwcmVwYXJlL2JlZ2luIHJlYWRpbmcgdGhlIGN1cnJlbnQKKyAgICAgKiBmcmFtZSBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCBzbyB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB3aXRob3V0IGEgcHJldmlvdXMgY2FsbCB0byBgT3V0RnJhbWVCZWdpbigpYC4KKyAgICAgKgorICAgICAqIElmIHRoZXJlIGlzIG5vIGZyYW1lIGluIGJ1ZmZlciwgdGhpcyBtZXRob2QgcmV0dXJucyB6ZXJvLgorICAgICAqCisgICAgICogQHJldHVybnMgICAgVGhlIG51bWJlciBvZiBieXRlcyAobGVuZ3RoKSBvZiBjdXJyZW50L2Zyb250IGZyYW1lLCBvciB6ZXJvIGlmIG5vIGZyYW1lIGluIGJ1ZmZlci4KKyAgICAgKgorICAgICAqLworICAgIHVpbnQxNl90IE91dEZyYW1lR2V0TGVuZ3RoKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGFnIHZhbHVlIGFzc29jaWF0ZWQgdG8gY3VycmVudC9mcm9udCBmcmFtZSBpbiB0aGUgTkNQIGZyYW1lIGJ1ZmZlci4KKyAgICAgKgorICAgICAqIFRoZSBOQ1AgYnVmZmVyIHN0b3JlcyB0aGUgZnJhbWVzIGluIEZJRk8gb3JkZXIuIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBvZiB0aGUgZnJvbnQgZnJhbWUgKHdoaWNoIG1heQorICAgICAqIGJlIHRoZSBjdXJyZW50IG91dHB1dCBmcmFtZSBiZWluZyByZWFkKSBmcm9tIHRoZSBidWZmZXIuIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlcGFyZS9iZWdpbiByZWFkaW5nIHRoZSBjdXJyZW50CisgICAgICogZnJhbWUgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2Qgc28gdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG8gYE91dEZyYW1lQmVnaW4oKWAuCisgICAgICoKKyAgICAgKiBJZiB0aGVyZSBpcyBubyBmcmFtZSBpbiBidWZmZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgYGtJbnZhbGlkVGFnYC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zICAgIFRoZSB0YWcgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQvZnJvbSBvdXRwdXQgZnJhbWUsIG9yIGBrSW52YWxpZFRhZ2AgaWYgbm8gZnJhbWUgaW4gYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgRnJhbWVUYWcgT3V0RnJhbWVHZXRUYWcodm9pZCkgY29uc3Q7CisKK3ByaXZhdGU6CisKKyAgICAvKgorICAgICAqIE5jcEZyYW1lQnVmZmVyIEltcGxlbWVudGF0aW9uCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKgorICAgICAqIE5jcEZyYW1lQnVmZmVyIGludGVybmFsbHkgc3RvcmVzIGEgZnJhbWUgYXMgYSBzZXF1ZW5jZSBvZiBkYXRhIHNlZ21lbnRzLiBUaGUgZGF0YSBzZWdtZW50cyBhcmUgc3RvcmVkIGluIHRoZQorICAgICAqIHRoZSBtYWluIGJ1ZmZlciBgbUJ1ZmZlcmAuIG1CdWZmZXIgaXMgdXRpbGl6ZWQgYXMgYSBjaXJjdWxhciBidWZmZXIuCisKKyAgICAgKiBNZXNzYWdlcyAod2hpY2ggYXJlIGFkZGVkIHVzaW5nIGBJbkZyYW1lRmVlZE1lc3NhZ2VkKClgKSBhcmUgbm90IGNvcGllZCBpbiB0aGUgYG1CdWZmZXJgIGJ1dCBpbnN0ZWFkIGFyZQorICAgICAqIGVucXVldWVkIGluIGEgbWVzc2FnZSBxdWV1ZSBgbU1lc3NhZ2VRdWV1ZWAuCisgICAgICoKKyAgICAgKiBUaGUgZGF0YSBzZWdtZW50cyBpbmNsdWRlIGEgaGVhZGVyIGJlZm9yZSB0aGUgZGF0YSBwb3J0aW9uLiBUaGUgaGVhZGVyIGlzIDIgYnl0ZXMgbG9uZyBpcyBmb3JtYXRlZCBhcyBmb2xsb3dzCisgICAgICoKKyAgICAgKiAgICBCaXQgMC0xMzogR2l2ZSB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHNlZ21lbnQgKG1heCBzZWdtZW50IGxlbiBpcyAyXjE0ID0gMTYsMzg0IGJ5dGVzKS4KKyAgICAgKiAgICBCaXQgMTQ6ICAgRmxhZyBiaXQgc2V0IHRvIGluZGljYXRlIHRoYXQgdGhpcyBzZWdtZW50IGhhcyBhbiBhc3NvY2lhdGVkIGBNZXNzYWdlYCAoYXBwZW5kZWQgdG8gaXRzIGVuZCkuCisgICAgICogICAgQml0IDE1OiAgIEZsYWcgYml0IHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgc2VnbWVudCBkZWZpbmVzIHRoZSBzdGFydCBvZiBhIG5ldyBmcmFtZS4KKyAgICAgKgorICAgICAqICAgICAgICBCaXQgIDE1ICAgICAgICAgQml0IDE0ICAgICAgICAgICAgQml0czogMCAtIDEzCisgICAgICogICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqICAgIHwgICBOZXcgRnJhbWUgIHwgIEhhcyBNZXNzYWdlIHwgIExlbmd0aCBvZiBzZWdtZW50IChleGNsdWRpbmcgdGhlIGhlYWRlcikgICAgICAgICAgICAgIHwKKyAgICAgKiAgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICoKKyAgICAgKiBUaGUgaGVhZGVyIGlzIGVuY29kZWQgaW4gYmlnLWVuZGlhbiAobXNiIGZpcnN0KSBzdHlsZS4KKworICAgICAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FsbHMgdG8gY3JlYXRlIGEgZnJhbWU6CisgICAgICoKKyAgICAgKiAgICBuY3BCdWZmZXIuSW5GcmFtZUJlZ2luKCk7CisgICAgICogICAgbmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YSgiSGVsbG8iLCA1KTsKKyAgICAgKiAgICBuY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKCJUaGVyZSIsIDUpOworICAgICAqICAgIG5jcEJ1ZmZlci5JbkZyYW1lRmVlZE1lc3NhZ2UoKnNvbWVNZXNzYWdlKTsKKyAgICAgKiAgICBuY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKCJCeWUiLCAzKTsKKyAgICAgKiAgICBuY3BCdWZmZXIuSW5GcmFtZUVuZCgpOworICAgICAqCisgICAgICogVGhpcyBmcmFtZSBpcyBzdG9yZWQgYXMgdHdvIHNlZ21lbnRzOgorICAgICAqCisgICAgICogICAgLSBTZWdtZW50ICMxIGNvbnRhaW5zICJIZWxsb1RoZXJlIiB3aXRoIGEgaGVhZGVyIG9mIGAweEMwMEFgIHdoaWNoIHNob3dzIHRoYXQgdGhpcyBzZWdtZW50IGNvbnRhaW5zIDEwIGRhdGEKKyAgICAgKiAgICAgIGJ5dGVzLCBhbmQgaXQgc3RhcnRzIGEgbmV3IGZyYW1lLCBhbmQgYWxzbyBtdXN0IGluY2x1ZGUgYSBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgcXVldWUuCisgICAgICoKKyAgICAgKiAgICAtIFNlZ21lbnQgIzIgY29udGFpbnMgIkJ5ZSIgd2l0aCBhIGhlYWRlciB2YWx1ZSBvZiBgMHgwMDAzYCBzaG93aW5nIGxlbmd0aCBvZiAzIGFuZCBubyBhcHBlbmRlZCBtZXNzYWdlLgorICAgICAqCisgICAgICogICAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworICAgICAqICAgIHwgQzAgIHwgMEEgIHwgYEhgIHwgJ2UnIHwgJ2wnIHwgJ2wnIHwgJ28nIHwgJ1QnIHwgJ2gnIHwgJ2UnIHwgJ3InIHwgJ2UnIHwgMDAgIHwgMDMgIHwgJ0InIHwgJ3knIHwgJ2UnIHwKKyAgICAgKiAgICArLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgICAgICogICAgIFwgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAvCisgICAgICogICBTZWdtZW50ICMxIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZ21lbnQgIzIgSGVhZGVyCisgICAgICoKKyAgICAgKgorICAgICAqIEJ1ZmZlciBwb2ludGVyczoKKyAgICAgKgorICAgICAqICAgICAgICAgIG1SZWFkRnJhbWVTdGFydAorICAgICAqICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICB8ICAgICAgICAgbVJlYWRTZWdtZW50SGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdyaXRlRnJhbWVTdGFydAorICAgICAqICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgfCAgICAgICAgIHwgICBtUmVhZFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICBtV3JpdGVTZWdtZW50SGVhZAorICAgICAqICAgICAgICAgIHwgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgICAqICBtQnVmZmVyIHwgICAgICAgICB8ICAgfCAgICAgbVJlYWRTZWdtZW50VGFpbCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIG1Xcml0ZVNlZ21lbnRUYWlsIG1CdWZmZXJFbmQKKyAgICAgKiAgfCAgICAgICB8ICAgICAgICAgfCAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgViAgICAgICBWICAgICAgICAgViAgIFYgICAgIFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgViAgICAgICAgIFYgICAgICAgICBWICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgKiArLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0KKyAgICAgKiB8IC4uLiAgIHwgU2VnIDEgICB8IFNlZyAyICAgfCBTZWcgMyB8ICAgLiAuIC4gICAgICAgICAgICAgICAgICB8IFNlZyAxICAgfCBTZWcgMiAgIDogICAuIC4gLiAgICAgICAgICAgICAgfAorICAgICAqICstLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLQorICAgICAqICAgICAgICAgXCAgICAgICAgICBcICAgICAgICAvICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgLworICAgICAqICAgICAgICAgfCAgICAgICAgIEN1ciBzZWdtZW50ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgQ3VycmVudCBPdXRGcmFtZSAoYmVpbmcgcmVhZCkgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBJbkZyYW1lIChiZWluZyB3cml0dGVuKQorICAgICAqCisgICAgICovCisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrUmVhZEJ5dGVBZnRlckZyYW1lSGFzRW5kZWQgICAgICAgID0gMCwgICAgICAgICAgLy8gVmFsdWUgcmV0dXJuZWQgYnkgUmVhZEJ5dGUoKSB3aGVuIGZyYW1lIGhhcyBlbmRlZC4KKyAgICAgICAga01lc3NhZ2VSZWFkQnVmZmVyU2l6ZSAgICAgICAgICAgICA9IDE2LCAgICAgICAgIC8vIFNpemUgb2YgbWVzc2FnZSBidWZmZXIgYXJyYXkuCisgICAgICAgIGtVbmtub3duRnJhbWVMZW5ndGggICAgICAgICAgICAgICAgPSAweGZmZmYsICAgICAvLyBWYWx1ZSB1c2VkIHdoZW4gZnJhbWUgbGVuZ3RoIGlzIHVua25vd24uCisgICAgICAgIGtTZWdtZW50SGVhZGVyU2l6ZSAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAvLyBMZW5ndGggb2YgdGhlIHNlZ21lbnQgaGVhZGVyLgorICAgICAgICBrU2VnbWVudEhlYWRlckxlbmd0aE1hc2sgICAgICAgICAgID0gMHgzZmZmLCAgICAgLy8gQml0IG1hc2sgdG8gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc2VnbWVudCBoZWFkZXIKKworICAgICAgICBrU2VnbWVudEhlYWRlck5vRmxhZyAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgLy8gTm8gZmxhZ3MgYXJlIHNldC4KKyAgICAgICAga1NlZ21lbnRIZWFkZXJOZXdGcmFtZUZsYWcgICAgICAgICA9ICgxIDw8IDE1KSwgIC8vIEluZGljYXRlcyB0aGF0IHRoaXMgc2VnbWVudCBzdGFydHMgYSBuZXcgZnJhbWUuCisgICAgICAgIGtTZWdtZW50SGVhZGVyTWVzc2FnZUluZGljYXRvckZsYWcgPSAoMSA8PCAxNCksICAvLyBJbmRpY2F0ZXMgdGhpcyBzZWdtZW50IGVuZHMgd2l0aCBhIE1lc3NhZ2UuCisgICAgfTsKKworICAgIGVudW0gUmVhZFN0YXRlCisgICAgeworICAgICAgICBrUmVhZFN0YXRlSW5TZWdtZW50LCAgICAgICAgLy8gSW4gbWlkZGxlIG9mIGEgZGF0YSBzZWdtZW50IHdoaWxlIHJlYWRpbmcgY3VycmVudCAob3V0KSBmcmFtZS4KKyAgICAgICAga1JlYWRTdGF0ZUluTWVzc2FnZSwgICAgICAgIC8vIEluIG1pZGRsZSBvZiBhIG1lc3NhZ2Ugd2hpbGUgcmVhZGluZyBjdXJyZW50IChvdXQpIGZyYW1lLgorICAgICAgICBrUmVhZFN0YXRlRG9uZSwgICAgICAgICAgICAgLy8gQ3VycmVudCAob3V0KSBmcmFtZSBpcyByZWFkIGZ1bGx5LgorICAgIH07CisKKyAgICAvLyBQcml2YXRlIG1ldGhvZHMKKworICAgIHVpbnQ4X3QgKiAgICAgICBOZXh0KHVpbnQ4X3QgKmFCdWZmZXJQdHIpIGNvbnN0OworICAgIHVpbnQ4X3QgKiAgICAgICBBZHZhbmNlKHVpbnQ4X3QgKmFCdWZQdHIsIHVpbnQxNl90IGFPZmZzZXQpIGNvbnN0OworICAgIHVpbnQxNl90ICAgICAgICBHZXREaXN0YW5jZSh1aW50OF90ICphU3RhcnRQdHIsIHVpbnQ4X3QgKmFFbmRQdHIpIGNvbnN0OworCisgICAgdWludDE2X3QgICAgICAgIFJlYWRVaW50MTZBdCh1aW50OF90ICphQnVmUHRyKTsKKyAgICB2b2lkICAgICAgICAgICAgV3JpdGVVaW50MTZBdCh1aW50OF90ICphQnVmUHRyLCB1aW50MTZfdCBhVmFsdWUpOworCisgICAgb3RFcnJvciAgICAgICAgIEluRnJhbWVGZWVkQnl0ZSh1aW50OF90IGFCeXRlKTsKKyAgICBvdEVycm9yICAgICAgICAgSW5GcmFtZUJlZ2luU2VnbWVudCh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgSW5GcmFtZUVuZFNlZ21lbnQodWludDE2X3QgYVNlZ21lbnRIZWFkZXJGbGFncyk7CisgICAgdm9pZCAgICAgICAgICAgIEluRnJhbWVEaXNjYXJkKHZvaWQpOworCisgICAgb3RFcnJvciAgICAgICAgIE91dEZyYW1lUHJlcGFyZVNlZ21lbnQodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIE91dEZyYW1lTW92ZVRvTmV4dFNlZ21lbnQodm9pZCk7CisgICAgb3RFcnJvciAgICAgICAgIE91dEZyYW1lUHJlcGFyZU1lc3NhZ2Uodm9pZCk7CisgICAgb3RFcnJvciAgICAgICAgIE91dEZyYW1lRmlsbE1lc3NhZ2VCdWZmZXIodm9pZCk7CisKKyAgICB1aW50OF90ICogY29uc3QgIG1CdWZmZXI7ICAgICAgICAgICAgICAgICAgICAvLyBQb2ludGVyIHRvIHRoZSBidWZmZXIgdXNlZCB0byBzdG9yZSB0aGUgZGF0YS4KKyAgICB1aW50OF90ICogY29uc3QgIG1CdWZmZXJFbmQ7ICAgICAgICAgICAgICAgICAvLyBQb2ludHMgdG8gYWZ0ZXIgdGhlIGVuZCBvZiBidWZmZXIuCisgICAgY29uc3QgdWludDE2X3QgICBtQnVmZmVyTGVuZ3RoOyAgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoZSB0aGUgYnVmZmVyLgorCisgICAgQnVmZmVyQ2FsbGJhY2sgICBtRnJhbWVBZGRlZENhbGxiYWNrOyAgICAgICAgLy8gQ2FsbGJhY2sgdG8gc2lnbmFsIHdoZW4gYSBuZXcgZnJhbWUgaXMgYWRkZWQKKyAgICB2b2lkICogICAgICAgICAgIG1GcmFtZUFkZGVkQ29udGV4dDsgICAgICAgICAvLyBDb250ZXh0IHBhc3NlZCB0byBgbUZyYW1lQWRkZWRDYWxsYmFja2AuCisgICAgQnVmZmVyQ2FsbGJhY2sgICBtRnJhbWVSZW1vdmVkQ2FsbGJhY2s7ICAgICAgLy8gQ2FsbGJhY2sgdG8gc2lnbmFsIHdoZW4gYSBmcmFtZSBpcyByZW1vdmVkLgorICAgIHZvaWQgKiAgICAgICAgICAgbUZyYW1lUmVtb3ZlZENvbnRleHQ7ICAgICAgIC8vIENvbnRleHQgcGFzc2VkIHRvIGBtRnJhbWVSZW1vdmVkQ2FsbGJhY2tgLgorCisgICAgb3RNZXNzYWdlUXVldWUgICBtTWVzc2FnZVF1ZXVlOyAgICAgICAgICAgICAgLy8gTWFpbiBtZXNzYWdlIHF1ZXVlLgorCisgICAgb3RNZXNzYWdlUXVldWUgICBtV3JpdGVGcmFtZU1lc3NhZ2VRdWV1ZTsgICAgLy8gTWVzc2FnZSBxdWV1ZSBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgYmVpbmcgd3JpdHRlbi4KKyAgICB1aW50OF90ICogICAgICAgIG1Xcml0ZUZyYW1lU3RhcnQ7ICAgICAgICAgICAvLyBQb2ludGVyIHRvIHN0YXJ0IG9mIGN1cnJlbnQgZnJhbWUgYmVpbmcgd3JpdHRlbi4KKyAgICB1aW50OF90ICogICAgICAgIG1Xcml0ZVNlZ21lbnRIZWFkOyAgICAgICAgICAvLyBQb2ludGVyIHRvIHN0YXJ0IG9mIGN1cnJlbnQgc2VnbWVudCBpbiB0aGUgZnJhbWUgYmVpbmcgd3JpdHRlbi4KKyAgICB1aW50OF90ICogICAgICAgIG1Xcml0ZVNlZ21lbnRUYWlsOyAgICAgICAgICAvLyBQb2ludGVyIHRvIGVuZCBvZiBjdXJyZW50IHNlZ21lbnQgaW4gdGhlIGZyYW1lIGJlaW5nIHdyaXR0ZW4uCisgICAgRnJhbWVUYWcgICAgICAgICBtV3JpdGVGcmFtZVRhZzsgICAgICAgICAgICAgLy8gVGFnIGFzc29jaWF0ZWQgd2l0aCBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIGZyYW1lLgorCisgICAgUmVhZFN0YXRlICAgICAgICBtUmVhZFN0YXRlOyAgICAgICAgICAgICAgICAgLy8gUmVhZCBzdGF0ZS4KKyAgICB1aW50MTZfdCAgICAgICAgIG1SZWFkRnJhbWVMZW5ndGg7ICAgICAgICAgICAvLyBMZW5ndGggb2YgY3VycmVudCBmcmFtZSBiZWluZyByZWFkLgorCisgICAgdWludDhfdCAqICAgICAgICBtUmVhZEZyYW1lU3RhcnQ7ICAgICAgICAgICAgLy8gUG9pbnRlciB0byBzdGFydCBvZiBjdXJyZW50IGZyYW1lIGJlaW5nIHJlYWQuCisgICAgdWludDhfdCAqICAgICAgICBtUmVhZFNlZ21lbnRIZWFkOyAgICAgICAgICAgLy8gUG9pbnRlciB0byBzdGFydCBvZiBjdXJyZW50IHNlZ21lbnQgaW4gdGhlIGZyYW1lIGJlaW5nIHJlYWQuCisgICAgdWludDhfdCAqICAgICAgICBtUmVhZFNlZ21lbnRUYWlsOyAgICAgICAgICAgLy8gUG9pbnRlciB0byBlbmQgb2YgY3VycmVudCBzZWdtZW50IGluIHRoZSBmcmFtZSBiZWluZyByZWFkLgorICAgIHVpbnQ4X3QgKiAgICAgICAgbVJlYWRQb2ludGVyOyAgICAgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gbmV4dCBieXRlIHRvIHJlYWQgKGVpdGhlciBpbiBzZWdtZW50IG9yIGluIG1zZyBidWZmZXIpLgorCisgICAgb3RNZXNzYWdlICogICAgICBtUmVhZE1lc3NhZ2U7ICAgICAgICAgICAgICAgLy8gQ3VycmVudCBNZXNzYWdlIGluIHRoZSBmcmFtZSBiZWluZyByZWFkLgorICAgIHVpbnQxNl90ICAgICAgICAgbVJlYWRNZXNzYWdlT2Zmc2V0OyAgICAgICAgIC8vIE9mZnNldCB3aXRoaW4gY3VycmVudCBtZXNzYWdlIGJlaW5nIHJlYWQuCisKKyAgICB1aW50OF90ICAgICAgICAgIG1NZXNzYWdlQnVmZmVyW2tNZXNzYWdlUmVhZEJ1ZmZlclNpemVdOyAgIC8vIEJ1ZmZlciB0byBob2xkIHBhcnQgb2YgY3VycmVudCBtZXNzYWdlIGJlaW5nIHJlYWQuCisgICAgdWludDhfdCAqICAgICAgICBtUmVhZE1lc3NhZ2VUYWlsOyAgICAgICAgICAgLy8gUG9pbnRlciB0byBlbmQgb2YgY3VycmVudCBwYXJ0IGluIG1NZXNzYWdlQnVmZmVyLgorfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkNQX0ZSQU1FX0JVRkZFUl9IUFBfCmRpZmYgLS1naXQgYS9zcmMvbmNwL25jcF9zcGkuY3BwIGIvc3JjL25jcC9uY3Bfc3BpLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVlOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9uY3Bfc3BpLmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIFNQSSBpbnRlcmZhY2UgdG8gdGhlIE9wZW5UaHJlYWQgc3RhY2suCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlICJuY3Bfc3BpLmhwcCIKKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbmNwLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9zcGktc2xhdmUuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL21pc2MuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtY29yZS1jb25maWcuaCIKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvZGVfdXRpbHMuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5ocHAiCisjaW5jbHVkZSAiY29tbW9uL25ldy5ocHAiCisjaW5jbHVkZSAibmV0L2lwNi5ocHAiCisKKyNkZWZpbmUgU1BJX1JFU0VUX0ZMQUcgICAgICAgICAgMHg4MAorI2RlZmluZSBTUElfQ1JDX0ZMQUcgICAgICAgICAgICAweDQwCisjZGVmaW5lIFNQSV9QQVRURVJOX1ZBTFVFICAgICAgIDB4MDIKKyNkZWZpbmUgU1BJX1BBVFRFUk5fTUFTSyAgICAgICAgMHgwMworCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSQorCituYW1lc3BhY2Ugb3QgeworCitzdGF0aWMgb3RERUZJTkVfQUxJR05FRF9WQVIoc05jcFJhdywgc2l6ZW9mKE5jcFNwaSksIHVpbnQ2NF90KTsKKworZXh0ZXJuICJDIiB2b2lkIG90TmNwSW5pdChvdEluc3RhbmNlICphSW5zdGFuY2UpCit7CisgICAgTmNwU3BpICpuY3BTcGkgPSBOVUxMOworCisgICAgbmNwU3BpID0gbmV3KCZzTmNwUmF3KSBOY3BTcGkoYUluc3RhbmNlKTsKKworICAgIGlmIChuY3BTcGkgPT0gTlVMTCB8fCBuY3BTcGkgIT0gTmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKSkKKyAgICB7CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzcGlfaGVhZGVyX3NldF9mbGFnX2J5dGUodWludDhfdCAqaGVhZGVyLCB1aW50OF90IHZhbHVlKQoreworICAgIGhlYWRlclswXSA9IHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKHVpbnQ4X3QgKmhlYWRlciwgdWludDE2X3QgbGVuKQoreworICAgIGhlYWRlclsxXSA9ICgobGVuID4+IDApICYgMHhmZik7CisgICAgaGVhZGVyWzJdID0gKChsZW4gPj4gOCkgJiAweGZmKTsKK30KKworc3RhdGljIHZvaWQgc3BpX2hlYWRlcl9zZXRfZGF0YV9sZW4odWludDhfdCAqaGVhZGVyLCB1aW50MTZfdCBsZW4pCit7CisgICAgaGVhZGVyWzNdID0gKChsZW4gPj4gMCkgJiAweGZmKTsKKyAgICBoZWFkZXJbNF0gPSAoKGxlbiA+PiA4KSAmIDB4ZmYpOworfQorCitzdGF0aWMgdWludDhfdCBzcGlfaGVhZGVyX2dldF9mbGFnX2J5dGUoY29uc3QgdWludDhfdCAqaGVhZGVyKQoreworICAgIHJldHVybiBoZWFkZXJbMF07Cit9CisKK3N0YXRpYyB1aW50MTZfdCBzcGlfaGVhZGVyX2dldF9hY2NlcHRfbGVuKGNvbnN0IHVpbnQ4X3QgKmhlYWRlcikKK3sKKyAgICByZXR1cm4gKCBoZWFkZXJbMV0gKyBzdGF0aWNfY2FzdDx1aW50MTZfdD4oaGVhZGVyWzJdIDw8IDgpICk7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBzcGlfaGVhZGVyX2dldF9kYXRhX2xlbihjb25zdCB1aW50OF90ICpoZWFkZXIpCit7CisgICAgcmV0dXJuICggaGVhZGVyWzNdICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGhlYWRlcls0XSA8PCA4KSApOworfQorCitOY3BTcGk6Ok5jcFNwaShvdEluc3RhbmNlICphSW5zdGFuY2UpIDoKKyAgICBOY3BCYXNlKGFJbnN0YW5jZSksCisgICAgbVR4U3RhdGUoa1R4U3RhdGVJZGxlKSwKKyAgICBtSGFuZGxpbmdSeEZyYW1lKGZhbHNlKSwKKyAgICBtUmVzZXRGbGFnKHRydWUpLAorICAgIG1QcmVwYXJlVHhGcmFtZVRhc2soYUluc3RhbmNlLT5tSXA2Lm1UYXNrbGV0U2NoZWR1bGVyLCAmTmNwU3BpOjpQcmVwYXJlVHhGcmFtZSwgdGhpcyksCisgICAgbVNlbmRGcmFtZUxlbigwKQoreworICAgIG1lbXNldChtU2VuZEZyYW1lLCAwLCBrU3BpSGVhZGVyTGVuZ3RoKTsKKyAgICBtZW1zZXQobUVtcHR5U2VuZEZyYW1lWmVyb0FjY2VwdCwgMCwga1NwaUhlYWRlckxlbmd0aCk7CisgICAgbWVtc2V0KG1FbXB0eVNlbmRGcmFtZUZ1bGxBY2NlcHQsIDAsIGtTcGlIZWFkZXJMZW5ndGgpOworCisgICAgbVR4RnJhbWVCdWZmZXIuU2V0RnJhbWVBZGRlZENhbGxiYWNrKEhhbmRsZUZyYW1lQWRkZWRUb1R4QnVmZmVyLCB0aGlzKTsKKworICAgIHNwaV9oZWFkZXJfc2V0X2ZsYWdfYnl0ZShtU2VuZEZyYW1lLCBTUElfUkVTRVRfRkxBRyB8IFNQSV9QQVRURVJOX1ZBTFVFKTsKKyAgICBzcGlfaGVhZGVyX3NldF9mbGFnX2J5dGUobUVtcHR5U2VuZEZyYW1lWmVyb0FjY2VwdCwgU1BJX1JFU0VUX0ZMQUcgfCBTUElfUEFUVEVSTl9WQUxVRSk7CisgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKG1FbXB0eVNlbmRGcmFtZUZ1bGxBY2NlcHQsIFNQSV9SRVNFVF9GTEFHIHwgU1BJX1BBVFRFUk5fVkFMVUUpOworCisgICAgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbihtU2VuZEZyYW1lLCBzaXplb2YobVJlY2VpdmVGcmFtZSkgLSBrU3BpSGVhZGVyTGVuZ3RoKTsKKyAgICBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKG1FbXB0eVNlbmRGcmFtZUZ1bGxBY2NlcHQsIHNpemVvZihtUmVjZWl2ZUZyYW1lKSAtIGtTcGlIZWFkZXJMZW5ndGgpOworICAgIHNwaV9oZWFkZXJfc2V0X2FjY2VwdF9sZW4obUVtcHR5U2VuZEZyYW1lWmVyb0FjY2VwdCwgMCk7CisKKyAgICBvdFBsYXRTcGlTbGF2ZUVuYWJsZSgmTmNwU3BpOjpTcGlUcmFuc2FjdGlvbkNvbXBsZXRlLCAmTmNwU3BpOjpTcGlUcmFuc2FjdGlvblByb2Nlc3MsIHRoaXMpOworCisgICAgLy8gV2Ugc2lnbmFsIGFuIGludGVycnVwdCBvbiB0aGlzIGZpcnN0IHRyYW5zYWN0aW9uIHRvCisgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGhvc3QgcHJvY2Vzc29yIGtub3dzIHRoYXQgb3VyCisgICAgLy8gcmVzZXQgZmxhZyB3YXMgc2V0LgorCisgICAgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24obUVtcHR5U2VuZEZyYW1lWmVyb0FjY2VwdCwga1NwaUhlYWRlckxlbmd0aCwgbUVtcHR5UmVjZWl2ZUZyYW1lLCBrU3BpSGVhZGVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworfQorCitib29sIE5jcFNwaTo6U3BpVHJhbnNhY3Rpb25Db21wbGV0ZSh2b2lkICphQ29udGV4dCwgdWludDhfdCAqYU91dHB1dEJ1ZiwgdWludDE2X3QgYU91dHB1dEJ1ZkxlbiwgdWludDhfdCAqYUlucHV0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYUlucHV0QnVmTGVuLCB1aW50MTZfdCBhVHJhbnNhY3Rpb25MZW5ndGgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5jcFNwaSAqPihhQ29udGV4dCktPlNwaVRyYW5zYWN0aW9uQ29tcGxldGUoYU91dHB1dEJ1ZiwgYU91dHB1dEJ1ZkxlbiwgYUlucHV0QnVmLCBhSW5wdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUcmFuc2FjdGlvbkxlbmd0aCk7Cit9CisKK2Jvb2wgTmNwU3BpOjpTcGlUcmFuc2FjdGlvbkNvbXBsZXRlKHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFJbnB1dEJ1ZkxlbiwgdWludDE2X3QgYVRyYW5zYWN0aW9uTGVuZ3RoKQoreworICAgIC8vIFRoaXMgbWF5IGJlIGV4ZWN1dGVkIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgICAgLy8gTXVzdCByZXR1cm4gYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKworICAgIHVpbnQxNl90IHJ4X2RhdGFfbGVuID0gMDsKKyAgICB1aW50MTZfdCByeF9hY2NlcHRfbGVuID0gMDsKKyAgICB1aW50MTZfdCB0eF9kYXRhX2xlbiA9IDA7CisgICAgdWludDE2X3QgdHhfYWNjZXB0X2xlbiA9IDA7CisgICAgYm9vbCBzaG91bGRQcm9jZXNzID0gZmFsc2U7CisKKyAgICAvLyBUT0RPOiBDaGVjayBgUEFUVEVSTmAgYml0cyBvZiBgSERSYCBhbmQgaWdub3JlIGZyYW1lIGlmIG5vdCBzZXQuCisgICAgLy8gICAgICAgSG9sZGluZyBvZmYgb24gaW1wbGVtZW50aW5nIHRoaXMgc28gYXMgdG8gbm90IGNhdXNlIGltbWVkaWF0ZQorICAgIC8vICAgICAgIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMsIGV2ZW4gdGhvdWdoIGl0IGlzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjLgorCisgICAgaWYgKGFUcmFuc2FjdGlvbkxlbmd0aCA+PSBrU3BpSGVhZGVyTGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKGFPdXRwdXRCdWZMZW4gPj0ga1NwaUhlYWRlckxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcnhfYWNjZXB0X2xlbiA9IHNwaV9oZWFkZXJfZ2V0X2FjY2VwdF9sZW4oYU91dHB1dEJ1Zik7CisgICAgICAgICAgICB0eF9kYXRhX2xlbiA9IHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKGFPdXRwdXRCdWYpOworICAgICAgICAgICAgKHZvaWQpc3BpX2hlYWRlcl9nZXRfZmxhZ19ieXRlKGFPdXRwdXRCdWYpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFJbnB1dEJ1ZkxlbiA+PSBrU3BpSGVhZGVyTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICByeF9kYXRhX2xlbiA9IHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKGFJbnB1dEJ1Zik7CisgICAgICAgICAgICB0eF9hY2NlcHRfbGVuID0gc3BpX2hlYWRlcl9nZXRfYWNjZXB0X2xlbihhSW5wdXRCdWYpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtSGFuZGxpbmdSeEZyYW1lICYmCisgICAgICAgICAgICAocnhfZGF0YV9sZW4gPiAwKSAmJgorICAgICAgICAgICAgKHJ4X2RhdGFfbGVuIDw9IGFUcmFuc2FjdGlvbkxlbmd0aCAtIGtTcGlIZWFkZXJMZW5ndGgpICYmCisgICAgICAgICAgICAocnhfZGF0YV9sZW4gPD0gcnhfYWNjZXB0X2xlbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1IYW5kbGluZ1J4RnJhbWUgPSB0cnVlOworICAgICAgICAgICAgc2hvdWxkUHJvY2VzcyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG1UeFN0YXRlID09IGtUeFN0YXRlU2VuZGluZykgJiYKKyAgICAgICAgICAgICh0eF9kYXRhX2xlbiA+IDApICYmCisgICAgICAgICAgICAodHhfZGF0YV9sZW4gPD0gYVRyYW5zYWN0aW9uTGVuZ3RoIC0ga1NwaUhlYWRlckxlbmd0aCkgJiYKKyAgICAgICAgICAgICh0eF9kYXRhX2xlbiA8PSB0eF9hY2NlcHRfbGVuKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVR4U3RhdGUgPSBrVHhTdGF0ZUhhbmRsaW5nU2VuZERvbmU7CisgICAgICAgICAgICBzaG91bGRQcm9jZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtUmVzZXRGbGFnICYmIChhVHJhbnNhY3Rpb25MZW5ndGggPiAwKSAmJiAoYU91dHB1dEJ1ZkxlbiA+IDApKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgdGhlIHJlc2V0IGZsYWcuCisgICAgICAgIG1SZXNldEZsYWcgPSBmYWxzZTsKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKG1TZW5kRnJhbWUsIFNQSV9QQVRURVJOX1ZBTFVFKTsKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHQsIFNQSV9QQVRURVJOX1ZBTFVFKTsKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKG1FbXB0eVNlbmRGcmFtZUZ1bGxBY2NlcHQsIFNQSV9QQVRURVJOX1ZBTFVFKTsKKyAgICB9CisKKyAgICBpZiAobVR4U3RhdGUgPT0ga1R4U3RhdGVTZW5kaW5nKQorICAgIHsKKyAgICAgICAgYU91dHB1dEJ1ZiA9IG1TZW5kRnJhbWU7CisgICAgICAgIGFPdXRwdXRCdWZMZW4gPSBtU2VuZEZyYW1lTGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhT3V0cHV0QnVmID0gKG1IYW5kbGluZ1J4RnJhbWUpID8gbUVtcHR5U2VuZEZyYW1lWmVyb0FjY2VwdCA6IG1FbXB0eVNlbmRGcmFtZUZ1bGxBY2NlcHQ7CisgICAgICAgIGFPdXRwdXRCdWZMZW4gPSBrU3BpSGVhZGVyTGVuZ3RoOworICAgIH0KKworICAgIGlmIChtSGFuZGxpbmdSeEZyYW1lKQorICAgIHsKKyAgICAgICAgYUlucHV0QnVmID0gbUVtcHR5UmVjZWl2ZUZyYW1lOworICAgICAgICBhSW5wdXRCdWZMZW4gPSBrU3BpSGVhZGVyTGVuZ3RoOworICAgICAgICBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKG1TZW5kRnJhbWUsIDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhSW5wdXRCdWYgPSBtUmVjZWl2ZUZyYW1lOworICAgICAgICBhSW5wdXRCdWZMZW4gPSBzaXplb2YobVJlY2VpdmVGcmFtZSk7CisgICAgICAgIHNwaV9oZWFkZXJfc2V0X2FjY2VwdF9sZW4obVNlbmRGcmFtZSwgc2l6ZW9mKG1SZWNlaXZlRnJhbWUpIC0ga1NwaUhlYWRlckxlbmd0aCk7CisgICAgfQorCisgICAgb3RQbGF0U3BpU2xhdmVQcmVwYXJlVHJhbnNhY3Rpb24oYU91dHB1dEJ1ZiwgYU91dHB1dEJ1ZkxlbiwgYUlucHV0QnVmLCBhSW5wdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UeFN0YXRlID09IGtUeFN0YXRlU2VuZGluZykpOworCisgICAgcmV0dXJuIHNob3VsZFByb2Nlc3M7Cit9CisKK3ZvaWQgTmNwU3BpOjpTcGlUcmFuc2FjdGlvblByb2Nlc3Modm9pZCAqYUNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwU3BpICo+KGFDb250ZXh0KS0+U3BpVHJhbnNhY3Rpb25Qcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmNwU3BpOjpTcGlUcmFuc2FjdGlvblByb2Nlc3Modm9pZCkKK3sKKyAgICBpZiAobVR4U3RhdGUgPT0ga1R4U3RhdGVIYW5kbGluZ1NlbmREb25lKQorICAgIHsKKyAgICAgICAgbVByZXBhcmVUeEZyYW1lVGFzay5Qb3N0KCk7CisgICAgfQorCisgICAgaWYgKG1IYW5kbGluZ1J4RnJhbWUpCisgICAgeworICAgICAgICBIYW5kbGVSeEZyYW1lKCk7CisgICAgfQorfQorCit2b2lkIE5jcFNwaTo6SGFuZGxlRnJhbWVBZGRlZFRvVHhCdWZmZXIodm9pZCAqYUNvbnRleHQsIE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhVGFnLCBOY3BGcmFtZUJ1ZmZlciAqYU5jcEZyYW1lQnVmZmVyKQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhTmNwRnJhbWVCdWZmZXIpOworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhVGFnKTsKKworICAgIHN0YXRpY19jYXN0PE5jcFNwaSAqPihhQ29udGV4dCktPm1QcmVwYXJlVHhGcmFtZVRhc2suUG9zdCgpOworfQorCitvdEVycm9yIE5jcFNwaTo6UHJlcGFyZU5leHRTcGlTZW5kRnJhbWUodm9pZCkKK3sKKyAgICBvdEVycm9yIGVycm9yQ29kZSA9IE9UX0VSUk9SX05PTkU7CisgICAgdWludDE2X3QgZnJhbWVMZW5ndGg7CisgICAgdWludDE2X3QgcmVhZExlbmd0aDsKKworICAgIFZlcmlmeU9yRXhpdCghbVR4RnJhbWVCdWZmZXIuSXNFbXB0eSgpKTsKKworICAgIGlmIChTaG91bGRXYWtlSG9zdCgpKQorICAgIHsKKyAgICAgICAgb3RQbGF0V2FrZUhvc3QoKTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yQ29kZSA9IG1UeEZyYW1lQnVmZmVyLk91dEZyYW1lQmVnaW4oKSk7CisKKyAgICBmcmFtZUxlbmd0aCA9IG1UeEZyYW1lQnVmZmVyLk91dEZyYW1lR2V0TGVuZ3RoKCk7CisgICAgYXNzZXJ0KGZyYW1lTGVuZ3RoIDw9IHNpemVvZihtU2VuZEZyYW1lKSAtIGtTcGlIZWFkZXJMZW5ndGgpOworCisgICAgc3BpX2hlYWRlcl9zZXRfZGF0YV9sZW4obVNlbmRGcmFtZSwgZnJhbWVMZW5ndGgpOworCisgICAgLy8gVGhlICJhY2NlcHQgbGVuZ3RoIiBpbiBgbVNlbmRGcmFtZWAgaXMgYWxyZWFkeSB1cGRhdGVkIGJhc2VkCisgICAgLy8gb24gY3VycmVudCBzdGF0ZSBvZiByZWNlaXZlLiBJdCBpcyBjaGFuZ2VkIGVpdGhlciBmcm9tIHRoZQorICAgIC8vIGBTcGlUcmFuc2FjdGlvbkNvbXBsZXRlKClgIGNhbGxiYWNrIG9yIGZyb20gYEhhbmRsZVJ4RnJhbWUoKWAuCisKKyAgICByZWFkTGVuZ3RoID0gbVR4RnJhbWVCdWZmZXIuT3V0RnJhbWVSZWFkKGZyYW1lTGVuZ3RoLCBtU2VuZEZyYW1lICsga1NwaUhlYWRlckxlbmd0aCk7CisgICAgYXNzZXJ0KHJlYWRMZW5ndGggPT0gZnJhbWVMZW5ndGgpOworCisgICAgbVNlbmRGcmFtZUxlbiA9IGZyYW1lTGVuZ3RoICsga1NwaUhlYWRlckxlbmd0aDsKKworICAgIG1UeFN0YXRlID0ga1R4U3RhdGVTZW5kaW5nOworCisgICAgLy8gUHJlcGFyZSBuZXcgdHJhbnNhY3Rpb24gYnkgdXNpbmcgYG1TZW5kRnJhbWVgIGFzIHRoZSBvdXRwdXQKKyAgICAvLyBidWZmZXIgd2hpbGUga2VlcGluZyB0aGUgaW5wdXQgYnVmZmVyIHVuY2hhbmdlZC4KKworICAgIGVycm9yQ29kZSA9IG90UGxhdFNwaVNsYXZlUHJlcGFyZVRyYW5zYWN0aW9uKG1TZW5kRnJhbWUsIG1TZW5kRnJhbWVMZW4sIE5VTEwsIDAsIHRydWUpOworCisgICAgaWYgKGVycm9yQ29kZSA9PSBPVF9FUlJPUl9CVVNZKQorICAgIHsKKyAgICAgICAgLy8gQmVpbmcgYnVzeSBpcyBPSy4gV2Ugd2lsbCBnZXQgdGhlIHRyYW5zYWN0aW9uCisgICAgICAgIC8vIHNldCB1cCBwcm9wZXJseSB3aGVuIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uCisgICAgICAgIC8vIGlzIGNvbXBsZXRlZC4KKyAgICAgICAgZXJyb3JDb2RlID0gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3JDb2RlICE9IE9UX0VSUk9SX05PTkUpCisgICAgeworICAgICAgICBtVHhTdGF0ZSA9IGtUeFN0YXRlSWRsZTsKKyAgICAgICAgbVByZXBhcmVUeEZyYW1lVGFzay5Qb3N0KCk7CisgICAgICAgIEV4aXROb3coKTsKKyAgICB9CisKKyAgICBtVHhGcmFtZUJ1ZmZlci5PdXRGcmFtZVJlbW92ZSgpOworCitleGl0OgorICAgIHJldHVybiBlcnJvckNvZGU7Cit9CisKK3ZvaWQgTmNwU3BpOjpQcmVwYXJlVHhGcmFtZShUYXNrbGV0ICZhVGFza2xldCkKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVRhc2tsZXQpOworICAgIHN0YXRpY19jYXN0PE5jcFNwaSAqPihHZXROY3BJbnN0YW5jZSgpKS0+UHJlcGFyZVR4RnJhbWUoKTsKK30KKwordm9pZCBOY3BTcGk6OlByZXBhcmVUeEZyYW1lKHZvaWQpCit7CisgICAgc3dpdGNoIChtVHhTdGF0ZSkKKyAgICB7CisgICAgY2FzZSBrVHhTdGF0ZUhhbmRsaW5nU2VuZERvbmU6CisgICAgICAgIG1UeFN0YXRlID0ga1R4U3RhdGVJZGxlOworCisgICAgICAgIC8vIEZhbGwtdGhyb3VnaCB0byBuZXh0IGNhc2UgdG8gcHJlcGFyZSB0aGUgbmV4dCBmcmFtZSAoaWYgYW55KS4KKworICAgIGNhc2Uga1R4U3RhdGVJZGxlOgorICAgICAgICBQcmVwYXJlTmV4dFNwaVNlbmRGcmFtZSgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga1R4U3RhdGVTZW5kaW5nOgorICAgICAgICAvLyBUaGUgbmV4dCBmcmFtZSBpbiBxdWV1ZSAoaWYgYW55KSB3aWxsIGJlIHByZXBhcmVkIHdoZW4gdGhlCisgICAgICAgIC8vIGN1cnJlbnQgZnJhbWUgaXMgc3VjY2Vzc2Z1bGx5IHNlbnQgYW5kIHRoaXMgdGFzayBpcyBwb3N0ZWQKKyAgICAgICAgLy8gYWdhaW4gZnJvbSB0aGUgYFNwaVRyYW5zYWN0aW9uQ29tcGxldGUoKWAgY2FsbGJhY2suCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBOY3BTcGk6OkhhbmRsZVJ4RnJhbWUodm9pZCkKK3sKKyAgICAvLyBQYXNzIHRoZSByZWNlaXZlZCBmcmFtZSB0byBiYXNlIGNsYXNzIHRvIHByb2Nlc3MuCisgICAgSGFuZGxlUmVjZWl2ZShtUmVjZWl2ZUZyYW1lICsga1NwaUhlYWRlckxlbmd0aCwgc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4obVJlY2VpdmVGcmFtZSkpOworCisgICAgLy8gVGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYmVsb3cgaXMgaW1wb3J0YW50LiBXZSBzaG91bGQgY2xlYXIKKyAgICAvLyB0aGUgYG1IYW5kbGluZ1J4RnJhbWVgIGJlZm9yZSBjaGVja2luZyBgbVR4U3RhdGVgIGFuZCBwb3NzaWJseQorICAgIC8vIHByZXBhcmluZyB0aGUgbmV4dCB0cmFuc2FjdGlvbi4gTm90ZSB0aGF0IHRoZSBjYWxsYmFjaworICAgIC8vIGBTcGlUcmFuc2FjdGlvbkNvbXBsZXRlKClgIGNhbiBiZSBpbnZva2VkIGZyb20gSVNSIGF0IGFueSBwb2ludC4KKyAgICAvLworICAgIC8vIElmIHdlIHN3aXRjaCB0aGUgb3JkZXIsIHdlIGhhdmUgdGhlIGZvbGxvd2luZyByYWNlIHNpdHVhdGlvbjoKKyAgICAvLyBXZSBjaGVjayBgbVR4U3RhdGVgIGFuZCBpdCBpcyBpbiBga1R4U3RhdGVTZW5kaW5nYCwgc28gd2Ugc2tpcAorICAgIC8vIHByZXBhcmluZyB0aGUgdHJhbnNhY3Rpb24gaGVyZS4gQnV0IGJlZm9yZSB3ZSBzZXQgdGhlCisgICAgLy8gYG1IYW5kbGluZ1J4RnJhbWVgIHRvIGBmYWxzZWAsIHRoZSBgU3BpVHJhbnNhY3Rpb25Db21wbGV0ZSgpYAorICAgIC8vIGhhcHBlbnMgYW5kIHByZXBhcmVzIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGFuZCBzZXRzIHRoZSBhY2NlcHQKKyAgICAvLyBsZW5ndGggdG8gemVybyBvbiBgbVNlbmRGcmFtZWAgKHNpbmNlIGl0IGFzc3VtZXMgd2UgYXJlIHN0aWxsCisgICAgLy8gaGFuZGxpbmcgdGhlIHByZXZpb3VzIHJlY2VpdmVkIGZyYW1lKS4KKworICAgIG1IYW5kbGluZ1J4RnJhbWUgPSBmYWxzZTsKKworICAgIC8vIElmIHR4IHN0YXRlIGlzIGluIGBrVHhTdGF0ZVNlbmRpbmdgLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sKKyAgICAvLyBgU3BpVHJhbnNhY3Rpb25Db21wbGV0ZSgpYCAgd2hpY2ggd2lsbCB0aGVuIHNldCB1cCBldmVyeXRoaW5nCisgICAgLy8gYW5kIHByZXBhcmUgdGhlIG5leHQgdHJhbnNhY3Rpb24uCisKKyAgICBpZiAobVR4U3RhdGUgIT0ga1R4U3RhdGVTZW5kaW5nKQorICAgIHsKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbihtU2VuZEZyYW1lLCBzaXplb2YobVJlY2VpdmVGcmFtZSkgLSBrU3BpSGVhZGVyTGVuZ3RoKTsKKworICAgICAgICBvdFBsYXRTcGlTbGF2ZVByZXBhcmVUcmFuc2FjdGlvbihtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0LCBrU3BpSGVhZGVyTGVuZ3RoLCBtUmVjZWl2ZUZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobVJlY2VpdmVGcmFtZSksIGZhbHNlKTsKKworICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIHRoZSBlcnJvciBzdGF0dXMuIEdldHRpbmcgYE9UX0VSUk9SX0JVU1lgCisgICAgICAgIC8vIGlzIE9LIGFzIGV2ZXJ5dGhpbmcgd2lsbCBiZSBzZXQgdXAgcHJvcGVybHkgZnJvbSBjYWxsYmFjayB3aGVuCisgICAgICAgIC8vIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZC4KKyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1NQSQpkaWZmIC0tZ2l0IGEvc3JjL25jcC9uY3Bfc3BpLmhwcCBiL3NyYy9uY3AvbmNwX3NwaS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwNTE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3AvbmNwX3NwaS5ocHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBhIFNQSSBpbnRlcmZhY2UgdG8gdGhlIE9wZW5UaHJlYWQgc3RhY2suCisgKi8KKworI2lmbmRlZiBOQ1BfU1BJX0hQUF8KKyNkZWZpbmUgTkNQX1NQSV9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmNwL25jcF9iYXNlLmhwcCIKKworbmFtZXNwYWNlIG90IHsKKworY2xhc3MgTmNwU3BpIDogcHVibGljIE5jcEJhc2UKK3sKK3B1YmxpYzoKKyAgICAvKioKKyAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW1baW5dICBhSW5zdGFuY2UgIEEgcG9pbnRlciB0byB0aGUgT3BlblRocmVhZCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKi8KKyAgICBOY3BTcGkob3RJbnN0YW5jZSAqYUluc3RhbmNlKTsKKworcHJpdmF0ZToKKyAgICBlbnVtCisgICAgeworICAgICAgICAvKioKKyAgICAgICAgICogU1BJIHR4IGFuZCByeCBidWZmZXIgc2l6ZSAoc2hvdWxkIGZpdCBhIG1heCBsZW5ndGggZnJhbWUgKyBTUEkgaGVhZGVyKS4KKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGtTcGlCdWZmZXJTaXplICAgPSBPUEVOVEhSRUFEX0NPTkZJR19OQ1BfU1BJX0JVRkZFUl9TSVpFLAorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTaXplIG9mIFNQSSBoZWFkZXIgaW4gYnl0ZXMuCisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBrU3BpSGVhZGVyTGVuZ3RoID0gNSwKKyAgICB9OworCisgICAgZW51bSBUeFN0YXRlCisgICAgeworICAgICAgICBrVHhTdGF0ZUlkbGUsICAgICAgICAgICAgICAgLy8gTm8gZnJhbWUgdG8gc2VuZC4KKyAgICAgICAga1R4U3RhdGVTZW5kaW5nLCAgICAgICAgICAgIC8vIEEgZnJhbWUgaXMgcmVhZHkgdG8gYmUgc2VudC4KKyAgICAgICAga1R4U3RhdGVIYW5kbGluZ1NlbmREb25lICAgIC8vIFRoZSBmcmFtZSB3YXMgc2VudCBzdWNjZXNzZnVsbHksIHdhaXRpbmcgdG8gcHJlcGFyZSB0aGUgbmV4dCBvbmUgKGlmIGFueSkuCisgICAgfTsKKworICAgIHN0YXRpYyBib29sIFNwaVRyYW5zYWN0aW9uQ29tcGxldGUodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFPdXRwdXRCdWYsIHVpbnQxNl90IGFPdXRwdXRCdWZMZW4sIHVpbnQ4X3QgKmFJbnB1dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFJbnB1dEJ1ZkxlbiwgdWludDE2X3QgYVRyYW5zYWN0aW9uTGVuZ3RoKTsKKyAgICBib29sIFNwaVRyYW5zYWN0aW9uQ29tcGxldGUodWludDhfdCAqYU91dHB1dEJ1ZiwgdWludDE2X3QgYU91dHB1dEJ1ZkxlbiwgdWludDhfdCAqYUlucHV0QnVmLCB1aW50MTZfdCBhSW5wdXRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFUcmFuc2FjdGlvbkxlbmd0aCk7CisKKyAgICBzdGF0aWMgdm9pZCBTcGlUcmFuc2FjdGlvblByb2Nlc3Modm9pZCAqYUNvbnRleHQpOworICAgIHZvaWQgU3BpVHJhbnNhY3Rpb25Qcm9jZXNzKHZvaWQpOworCisgICAgc3RhdGljIHZvaWQgSGFuZGxlRnJhbWVBZGRlZFRvVHhCdWZmZXIodm9pZCAqYUNvbnRleHQsIE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhRnJhbWVUYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmNwRnJhbWVCdWZmZXIgKmFOY3BGcmFtZUJ1ZmZlcik7CisKKyAgICBzdGF0aWMgdm9pZCBQcmVwYXJlVHhGcmFtZShUYXNrbGV0ICZhVGFza2xldCk7CisgICAgdm9pZCBQcmVwYXJlVHhGcmFtZSh2b2lkKTsKKyAgICB2b2lkIEhhbmRsZVJ4RnJhbWUodm9pZCk7CisKKyAgICBvdEVycm9yIFByZXBhcmVOZXh0U3BpU2VuZEZyYW1lKHZvaWQpOworCisgICAgdm9sYXRpbGUgVHhTdGF0ZSBtVHhTdGF0ZTsKKyAgICB2b2xhdGlsZSBib29sIG1IYW5kbGluZ1J4RnJhbWU7CisgICAgdm9sYXRpbGUgYm9vbCBtUmVzZXRGbGFnOworCisgICAgVGFza2xldCBtUHJlcGFyZVR4RnJhbWVUYXNrOworCisgICAgdWludDE2X3QgbVNlbmRGcmFtZUxlbjsKKyAgICB1aW50OF90IG1TZW5kRnJhbWVba1NwaUJ1ZmZlclNpemVdOworICAgIHVpbnQ4X3QgbVJlY2VpdmVGcmFtZVtrU3BpQnVmZmVyU2l6ZV07CisKKyAgICB1aW50OF90IG1FbXB0eVNlbmRGcmFtZVplcm9BY2NlcHRba1NwaUhlYWRlckxlbmd0aF07CisgICAgdWludDhfdCBtRW1wdHlTZW5kRnJhbWVGdWxsQWNjZXB0W2tTcGlIZWFkZXJMZW5ndGhdOworICAgIHVpbnQ4X3QgbUVtcHR5UmVjZWl2ZUZyYW1lW2tTcGlIZWFkZXJMZW5ndGhdOworfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkNQX1NQSV9IUFBfCmRpZmYgLS1naXQgYS9zcmMvbmNwL25jcF91YXJ0LmNwcCBiL3NyYy9uY3AvbmNwX3VhcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWJlOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL25jcF91YXJ0LmNwcApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIGEgVUFSVCBiYXNlZCBOQ1AgaW50ZXJmYWNlIHRvIHRoZSBPcGVuVGhyZWFkIHN0YWNrLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmNwX3VhcnQuaHBwIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvbmNwLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS91YXJ0Lmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWNvcmUtY29uZmlnLmgiCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbmV3LmhwcCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgIm5ldC9pcDYuaHBwIgorCisjaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQX1VBUlQKKworbmFtZXNwYWNlIG90IHsKKworc3RhdGljIG90REVGSU5FX0FMSUdORURfVkFSKHNOY3BSYXcsIHNpemVvZihOY3BVYXJ0KSwgdWludDY0X3QpOworCitleHRlcm4gIkMiIHZvaWQgb3ROY3BJbml0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBOY3BVYXJ0ICpuY3BVYXJ0ID0gTlVMTDsKKyAgICBuY3BVYXJ0ID0gbmV3KCZzTmNwUmF3KSBOY3BVYXJ0KGFJbnN0YW5jZSk7CisKKyAgICBpZiAobmNwVWFydCA9PSBOVUxMIHx8IG5jcFVhcnQgIT0gTmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKSkKKyAgICB7CisgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorfQorCitOY3BVYXJ0OjpVYXJ0VHhCdWZmZXI6OlVhcnRUeEJ1ZmZlcih2b2lkKQorICAgIDogSGRsYzo6RW5jb2Rlcjo6QnVmZmVyV3JpdGVJdGVyYXRvcigpCit7CisgICAgQ2xlYXIoKTsKK30KKwordm9pZCBOY3BVYXJ0OjpVYXJ0VHhCdWZmZXI6OkNsZWFyKHZvaWQpCit7CisgICAgbVdyaXRlUG9pbnRlciA9IG1CdWZmZXI7CisgICAgbVJlbWFpbmluZ0xlbmd0aCA9IHNpemVvZihtQnVmZmVyKTsKK30KKworYm9vbCBOY3BVYXJ0OjpVYXJ0VHhCdWZmZXI6OklzRW1wdHkodm9pZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVdyaXRlUG9pbnRlciA9PSBtQnVmZmVyOworfQorCit1aW50MTZfdCBOY3BVYXJ0OjpVYXJ0VHhCdWZmZXI6OkdldExlbmd0aCh2b2lkKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4obVdyaXRlUG9pbnRlciAtIG1CdWZmZXIpOworfQorCitjb25zdCB1aW50OF90ICpOY3BVYXJ0OjpVYXJ0VHhCdWZmZXI6OkdldEJ1ZmZlcih2b2lkKSBjb25zdAoreworICAgIHJldHVybiBtQnVmZmVyOworfQorCitOY3BVYXJ0OjpOY3BVYXJ0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSk6CisgICAgTmNwQmFzZShhSW5zdGFuY2UpLAorICAgIG1GcmFtZURlY29kZXIobVJ4QnVmZmVyLCBzaXplb2YobVJ4QnVmZmVyKSwgJk5jcFVhcnQ6OkhhbmRsZUZyYW1lLCAmTmNwVWFydDo6SGFuZGxlRXJyb3IsIHRoaXMpLAorICAgIG1VYXJ0QnVmZmVyKCksCisgICAgbVN0YXRlKGtTdGFydGluZ0ZyYW1lKSwKKyAgICBtQnl0ZSgwKSwKKyAgICBtVWFydFNlbmRUYXNrKGFJbnN0YW5jZS0+bUlwNi5tVGFza2xldFNjaGVkdWxlciwgRW5jb2RlQW5kU2VuZFRvVWFydCwgdGhpcykKK3sKKyAgICBtVHhGcmFtZUJ1ZmZlci5TZXRGcmFtZUFkZGVkQ2FsbGJhY2soSGFuZGxlRnJhbWVBZGRlZFRvTmNwQnVmZmVyLCB0aGlzKTsKKworICAgIG90UGxhdFVhcnRFbmFibGUoKTsKK30KKwordm9pZCBOY3BVYXJ0OjpIYW5kbGVGcmFtZUFkZGVkVG9OY3BCdWZmZXIodm9pZCAqYUNvbnRleHQsIE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhVGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmNwRnJhbWVCdWZmZXIgKmFOY3BGcmFtZUJ1ZmZlcikKK3sKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYU5jcEZyYW1lQnVmZmVyKTsKKyAgICBPVF9VTlVTRURfVkFSSUFCTEUoYVRhZyk7CisKKyAgICBzdGF0aWNfY2FzdDxOY3BVYXJ0ICo+KGFDb250ZXh0KS0+SGFuZGxlRnJhbWVBZGRlZFRvTmNwQnVmZmVyKCk7Cit9CisKK3ZvaWQgTmNwVWFydDo6SGFuZGxlRnJhbWVBZGRlZFRvTmNwQnVmZmVyKHZvaWQpCit7CisgICAgaWYgKG1VYXJ0QnVmZmVyLklzRW1wdHkoKSkKKyAgICB7CisgICAgICAgIG1VYXJ0U2VuZFRhc2suUG9zdCgpOworICAgIH0KK30KKwordm9pZCBOY3BVYXJ0OjpFbmNvZGVBbmRTZW5kVG9VYXJ0KFRhc2tsZXQgJmFUYXNrbGV0KQoreworICAgIE9UX1VOVVNFRF9WQVJJQUJMRShhVGFza2xldCk7CisgICAgc3RhdGljX2Nhc3Q8TmNwVWFydCAqPihHZXROY3BJbnN0YW5jZSgpKS0+RW5jb2RlQW5kU2VuZFRvVWFydCgpOworfQorCisvLyBUaGlzIG1ldGhvZCBlbmNvZGVzIGEgZnJhbWUgZnJvbSB0aGUgdHggZnJhbWUgYnVmZmVyIChtVHhGcmFtZUJ1ZmZlcikgaW50byB0aGUgdWFydCBidWZmZXIgYW5kIHNlbmRzIGl0IG92ZXIgdWFydC4KKy8vIElmIHRoZSB1YXJ0IGJ1ZmZlciBnZXRzIGZ1bGwsIGl0IHNlbmRzIHRoZSBjdXJyZW50IGVuY29kZWQgcG9ydGlvbi4gVGhpcyBtZXRob2QgcmVtZW1iZXJzIGN1cnJlbnQgc3RhdGUsIHNvIG9uCisvLyBzdWItc2VxdWVudCBjYWxscywgaXQgcmVzdGFydHMgZW5jb2RpbmcgdGhlIGJ5dGVzIGZyb20gd2hlcmUgaXQgbGVmdCBvZiBpbiB0aGUgZnJhbWUgLgordm9pZCBOY3BVYXJ0OjpFbmNvZGVBbmRTZW5kVG9VYXJ0KHZvaWQpCit7CisgICAgdWludDE2X3QgbGVuOworCisgICAgd2hpbGUgKCFtVHhGcmFtZUJ1ZmZlci5Jc0VtcHR5KCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIGtTdGFydGluZ0ZyYW1lOgorCisgICAgICAgICAgICBpZiAoc3VwZXJfdDo6U2hvdWxkV2FrZUhvc3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdFBsYXRXYWtlSG9zdCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZXJpZnlPckV4aXQoc3VwZXJfdDo6U2hvdWxkRGVmZXJIb3N0U2VuZCgpID09IGZhbHNlKTsKKyAgICAgICAgICAgIFN1Y2Nlc3NPckV4aXQobUZyYW1lRW5jb2Rlci5Jbml0KG1VYXJ0QnVmZmVyKSk7CisKKyAgICAgICAgICAgIG1UeEZyYW1lQnVmZmVyLk91dEZyYW1lQmVnaW4oKTsKKworICAgICAgICAgICAgbVN0YXRlID0ga0VuY29kaW5nRnJhbWU7CisKKyAgICAgICAgICAgIHdoaWxlICghbVR4RnJhbWVCdWZmZXIuT3V0RnJhbWVIYXNFbmRlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1CeXRlID0gbVR4RnJhbWVCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpOworCisgICAgICAgICAgICBjYXNlIGtFbmNvZGluZ0ZyYW1lOgorCisgICAgICAgICAgICAgICAgU3VjY2Vzc09yRXhpdChtRnJhbWVFbmNvZGVyLkVuY29kZShtQnl0ZSwgbVVhcnRCdWZmZXIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVR4RnJhbWVCdWZmZXIuT3V0RnJhbWVSZW1vdmUoKTsKKworICAgICAgICAgICAgbVN0YXRlID0ga0ZpbmFsaXppbmdGcmFtZTsKKworICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisKKyAgICAgICAgY2FzZSBrRmluYWxpemluZ0ZyYW1lOgorCisgICAgICAgICAgICBTdWNjZXNzT3JFeGl0KG1GcmFtZUVuY29kZXIuRmluYWxpemUobVVhcnRCdWZmZXIpKTsKKworICAgICAgICAgICAgbVN0YXRlID0ga1N0YXJ0aW5nRnJhbWU7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgbGVuID0gbVVhcnRCdWZmZXIuR2V0TGVuZ3RoKCk7CisKKyAgICBpZiAobGVuID4gMCkKKyAgICB7CisgICAgICAgIGlmIChvdFBsYXRVYXJ0U2VuZChtVWFydEJ1ZmZlci5HZXRCdWZmZXIoKSwgbGVuKSAhPSBPVF9FUlJPUl9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0VWFydFNlbmREb25lKHZvaWQpCit7CisgICAgTmNwVWFydCAqbmNwVWFydCA9IHN0YXRpY19jYXN0PE5jcFVhcnQgKj4oTmNwQmFzZTo6R2V0TmNwSW5zdGFuY2UoKSk7CisKKyAgICBpZiAobmNwVWFydCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbmNwVWFydC0+SGFuZGxlVWFydFNlbmREb25lKCk7CisgICAgfQorfQorCit2b2lkIE5jcFVhcnQ6OkhhbmRsZVVhcnRTZW5kRG9uZSh2b2lkKQoreworICAgIG1VYXJ0QnVmZmVyLkNsZWFyKCk7CisKKyAgICBtVWFydFNlbmRUYXNrLlBvc3QoKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFVhcnRSZWNlaXZlZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgIE5jcFVhcnQgKm5jcFVhcnQgPSBzdGF0aWNfY2FzdDxOY3BVYXJ0ICo+KE5jcEJhc2U6OkdldE5jcEluc3RhbmNlKCkpOworCisgICAgaWYgKG5jcFVhcnQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG5jcFVhcnQtPkhhbmRsZVVhcnRSZWNlaXZlRG9uZShhQnVmLCBhQnVmTGVuZ3RoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmNwVWFydDo6SGFuZGxlVWFydFJlY2VpdmVEb25lKGNvbnN0IHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgbUZyYW1lRGVjb2Rlci5EZWNvZGUoYUJ1ZiwgYUJ1Zkxlbmd0aCk7Cit9CisKK3ZvaWQgTmNwVWFydDo6SGFuZGxlRnJhbWUodm9pZCAqYUNvbnRleHQsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwVWFydCAqPihhQ29udGV4dCktPkhhbmRsZUZyYW1lKGFCdWYsIGFCdWZMZW5ndGgpOworfQorCit2b2lkIE5jcFVhcnQ6OkhhbmRsZUZyYW1lKHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgc3VwZXJfdDo6SGFuZGxlUmVjZWl2ZShhQnVmLCBhQnVmTGVuZ3RoKTsKK30KKwordm9pZCBOY3BVYXJ0OjpIYW5kbGVFcnJvcih2b2lkICphQ29udGV4dCwgb3RFcnJvciBhRXJyb3IsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgc3RhdGljX2Nhc3Q8TmNwVWFydCAqPihhQ29udGV4dCktPkhhbmRsZUVycm9yKGFFcnJvciwgYUJ1ZiwgYUJ1Zkxlbmd0aCk7Cit9CisKK3ZvaWQgTmNwVWFydDo6SGFuZGxlRXJyb3Iob3RFcnJvciBhRXJyb3IsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpCit7CisgICAgY2hhciBoZXhidWZbMTI4XTsKKyAgICB1aW50MTZfdCBpID0gMDsKKworICAgIHN1cGVyX3Q6OkluY3JlbWVudEZyYW1lRXJyb3JDb3VudGVyKCk7CisKKyAgICAvLyBXZSBjYW4gZ2V0IGF3YXkgd2l0aCBzcHJpbnRmIGJlY2F1c2Ugd2Uga25vdworICAgIC8vIGBoZXhidWZgIGlzIGxhcmdlIGVub3VnaC4KKyAgICBzbnByaW50ZihoZXhidWYsIHNpemVvZihoZXhidWYpLCAiRnJhbWluZyBlcnJvciAlZDogWyIsIGFFcnJvcik7CisKKyAgICAvLyBXcml0ZSBvdXQgdGhlIGZpcnN0IHBhcnQgb2Ygb3VyIGxvZyBtZXNzYWdlLgorICAgIG90TmNwU3RyZWFtV3JpdGUoMCwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGhleGJ1ZiksIHN0YXRpY19jYXN0PGludD4oc3RybGVuKGhleGJ1ZikpKTsKKworICAgIC8vIFRoZSBmaXJzdCAnMycgY29tZXMgZnJvbSB0aGUgdHJhaWxpbmcgIl1cblwwMDAiIGF0IHRoZSBlbmQgbyB0aGUgc3RyaW5nLgorICAgIC8vIFRoZSBzZWNvbmQgJzMnIGNvbWVzIGZyb20gdGhlIGxlbmd0aCBvZiB0d28gaGV4IGRpZ2l0cyBhbmQgYSBzcGFjZS4KKyAgICBmb3IgKGkgPSAwOyAoaSA8IGFCdWZMZW5ndGgpICYmIChpIDwgKHNpemVvZihoZXhidWYpIC0gMykgLyAzKTsgaSsrKQorICAgIHsKKyAgICAgICAgLy8gV2UgY2FuIGdldCBhd2F5IHdpdGggc3ByaW50ZiBiZWNhdXNlIHdlIGtub3cKKyAgICAgICAgLy8gYGhleGJ1ZmAgaXMgbGFyZ2UgZW5vdWdoLCBiYXNlZCBvbiBvdXIgY2FsY3VsYXRpb25zCisgICAgICAgIC8vIGFib3ZlLgorICAgICAgICBzbnByaW50ZigmaGV4YnVmW2kgKiAzXSwgc2l6ZW9mKGhleGJ1ZikgLSBpICogMywgIiAlMDJYIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYUJ1ZltpXSkpOworICAgIH0KKworICAgIC8vIEFwcGVuZCBhIGZpbmFsIGNsb3NpbmcgYnJhY2tldCBhbmQgbmV3bGluZSBjaGFyYWN0ZXIKKyAgICAvLyBzbyBvdXIgbG9nIGxpbmUgbG9va3MgbmljZS4KKyAgICBzbnByaW50ZigmaGV4YnVmW2kgKiAzXSwgc2l6ZW9mKGhleGJ1ZikgLSBpICogMywgIl1cbiIpOworCisgICAgLy8gV3JpdGUgb3V0IHRoZSBzZWNvbmQgcGFydCBvZiBvdXIgbG9nIG1lc3NhZ2UuCisgICAgLy8gV2Ugc2tpcCB0aGUgZmlyc3QgYnl0ZSBzaW5jZSBpdCBoYXMgYSBzcGFjZSBpbiBpdC4KKyAgICBvdE5jcFN0cmVhbVdyaXRlKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihoZXhidWYgKyAxKSwgc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4oaGV4YnVmKSAtIDEpKTsKK30KKworI2lmIE9QRU5USFJFQURfQ09ORklHX0VOQUJMRV9ERUZBVUxUX0xPR19PVVRQVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3ZvaWQgb3RQbGF0TG9nKG90TG9nTGV2ZWwgYUxvZ0xldmVsLCBvdExvZ1JlZ2lvbiBhTG9nUmVnaW9uLCBjb25zdCBjaGFyICphRm9ybWF0LCAuLi4pCit7CisgICAgY2hhciBsb2dTdHJpbmdbMTI4XTsKKyAgICBpbnQgY2hhcnNXcml0dGVuOworICAgIHZhX2xpc3QgYXJnczsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGFGb3JtYXQpOworCisgICAgaWYgKChjaGFyc1dyaXR0ZW4gPSB2c25wcmludGYobG9nU3RyaW5nLCBzaXplb2YobG9nU3RyaW5nKSwgYUZvcm1hdCwgYXJncykpID4gMCkKKyAgICB7CisgICAgICAgIGlmIChjaGFyc1dyaXR0ZW4gPiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihsb2dTdHJpbmcpIC0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXJzV3JpdHRlbiA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKGxvZ1N0cmluZykgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIG90TmNwU3RyZWFtV3JpdGUoMCwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KGxvZ1N0cmluZyksIGNoYXJzV3JpdHRlbik7CisgICAgfQorCisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dMZXZlbCk7CisgICAgT1RfVU5VU0VEX1ZBUklBQkxFKGFMb2dSZWdpb24pOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKyNlbmRpZiAvLyBPUEVOVEhSRUFEX0VOQUJMRV9DTElfTE9HR0lORworCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2VuZGlmIC8vIE9QRU5USFJFQURfRU5BQkxFX05DUF9VQVJUCmRpZmYgLS1naXQgYS9zcmMvbmNwL25jcF91YXJ0LmhwcCBiL3NyYy9uY3AvbmNwX3VhcnQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMWZhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmNwL25jcF91YXJ0LmhwcApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICAgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIGEgVUFSVCBiYXNlZCBOQ1AgaW50ZXJmYWNlIHRvIHRoZSBPcGVuVGhyZWFkIHN0YWNrLgorICovCisKKyNpZm5kZWYgTkNQX1VBUlRfSFBQXworI2RlZmluZSBOQ1BfVUFSVF9IUFBfCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSAibmNwL2hkbGMuaHBwIgorI2luY2x1ZGUgIm5jcC9uY3BfYmFzZS5ocHAiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIE5jcFVhcnQgOiBwdWJsaWMgTmNwQmFzZQoreworICAgIHR5cGVkZWYgTmNwQmFzZSBzdXBlcl90OworCitwdWJsaWM6CisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbVtpbl0gIGFJbnN0YW5jZSAgVGhlIE9wZW5UaHJlYWQgaW5zdGFuY2Ugc3RydWN0dXJlLgorICAgICAqCisgICAgICovCisgICAgTmNwVWFydChvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdWFydCB0eCBpcyBmaW5pc2hlZC4gSXQgcHJlcGFyZXMgYW5kIHNlbmRzIHRoZSBuZXh0IGRhdGEgY2h1bmsgKGlmIGFueSkgdG8gdWFydC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgSGFuZGxlVWFydFNlbmREb25lKHZvaWQpOworCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdWFydCByZWNlaXZlZCBhIGRhdGEgYnVmZmVyLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBIYW5kbGVVYXJ0UmVjZWl2ZURvbmUoY29uc3QgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisKK3ByaXZhdGU6CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBrVWFydFR4QnVmZmVyU2l6ZSA9IE9QRU5USFJFQURfQ09ORklHX05DUF9VQVJUX1RYX0NIVU5LX1NJWkUsICAvLyBVYXJ0IHR4IGJ1ZmZlciBzaXplLgorICAgICAgICBrUnhCdWZmZXJTaXplID0gT1BFTlRIUkVBRF9DT05GSUdfTkNQX1VBUlRfUlhfQlVGRkVSX1NJWkUsICAgICAvLyBSeCBidWZmZXIgc2l6ZSAoc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBmaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIHdob2xlIChkZWNvZGVkKSByZWNlaXZlZCBmcmFtZSkuCisgICAgfTsKKworICAgIGVudW0gVWFydFR4U3RhdGUKKyAgICB7CisgICAgICAgIGtTdGFydGluZ0ZyYW1lLCAgICAgICAgICAvLyBTdGFydGluZyBhIG5ldyBmcmFtZS4KKyAgICAgICAga0VuY29kaW5nRnJhbWUsICAgICAgICAgIC8vIEluIG1pZGRsZSBvZiBlbmNvZGluZyBhIGZyYW1lLgorICAgICAgICBrRmluYWxpemluZ0ZyYW1lLCAgICAgICAgLy8gRmluYWxpemluZyBhIGZyYW1lLgorICAgIH07CisKKyAgICBjbGFzcyBVYXJ0VHhCdWZmZXIgOiBwdWJsaWMgSGRsYzo6RW5jb2Rlcjo6QnVmZmVyV3JpdGVJdGVyYXRvcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFVhcnRUeEJ1ZmZlcih2b2lkKTsKKworICAgICAgICB2b2lkICAgICAgICAgICBDbGVhcih2b2lkKTsKKyAgICAgICAgYm9vbCAgICAgICAgICAgSXNFbXB0eSh2b2lkKSBjb25zdDsKKyAgICAgICAgdWludDE2X3QgICAgICAgR2V0TGVuZ3RoKHZvaWQpIGNvbnN0OworICAgICAgICBjb25zdCB1aW50OF90ICpHZXRCdWZmZXIodm9pZCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50OF90ICAgICAgICBtQnVmZmVyW2tVYXJ0VHhCdWZmZXJTaXplXTsKKyAgICB9OworCisgICAgdm9pZCAgICAgICAgICAgIEVuY29kZUFuZFNlbmRUb1VhcnQodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIEhhbmRsZUZyYW1lKHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworICAgIHZvaWQgICAgICAgICAgICBIYW5kbGVFcnJvcihvdEVycm9yIGFFcnJvciwgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisgICAgdm9pZCAgICAgICAgICAgIFR4RnJhbWVCdWZmZXJIYXNEYXRhKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBIYW5kbGVGcmFtZUFkZGVkVG9OY3BCdWZmZXIodm9pZCk7CisKKyAgICBzdGF0aWMgdm9pZCAgICAgRW5jb2RlQW5kU2VuZFRvVWFydChUYXNrbGV0ICZhVGFza2xldCk7CisgICAgc3RhdGljIHZvaWQgICAgIEhhbmRsZUZyYW1lKHZvaWQgKmNvbnRleHQsIHVpbnQ4X3QgKmFCdWYsIHVpbnQxNl90IGFCdWZMZW5ndGgpOworICAgIHN0YXRpYyB2b2lkICAgICBIYW5kbGVFcnJvcih2b2lkICpjb250ZXh0LCBvdEVycm9yIGFFcnJvciwgdWludDhfdCAqYUJ1ZiwgdWludDE2X3QgYUJ1Zkxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgICAgIEhhbmRsZUZyYW1lQWRkZWRUb05jcEJ1ZmZlcih2b2lkICphQ29udGV4dCwgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFUYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOY3BGcmFtZUJ1ZmZlciAqYU5jcEZyYW1lQnVmZmVyKTsKKworICAgIEhkbGM6OkVuY29kZXIgICBtRnJhbWVFbmNvZGVyOworICAgIEhkbGM6OkRlY29kZXIgICBtRnJhbWVEZWNvZGVyOworICAgIFVhcnRUeEJ1ZmZlciAgICBtVWFydEJ1ZmZlcjsKKyAgICBVYXJ0VHhTdGF0ZSAgICAgbVN0YXRlOworICAgIHVpbnQ4X3QgICAgICAgICBtQnl0ZTsKKyAgICB1aW50OF90ICAgICAgICAgbVJ4QnVmZmVyW2tSeEJ1ZmZlclNpemVdOworICAgIFRhc2tsZXQgICAgICAgICBtVWFydFNlbmRUYXNrOworfTsKKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNlbmRpZiAgLy8gTkNQX1VBUlRfSFBQXwpkaWZmIC0tZ2l0IGEvc3JjL25jcC9zcGluZWwuYyBiL3NyYy9uY3Avc3BpbmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1OGY4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3Avc3BpbmVsLmMKQEAgLTAsMCArMSwyMDQ5IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIyMgVW5pdCBUZXN0ICMjCisgKgorICogIFRoaXMgZmlsZSBpbmNsdWRlcyBpdHMgb3duIHVuaXQgdGVzdC4gVG8gY29tcGlsZSB0aGUgdW5pdCB0ZXN0LAorICogIHNpbXBseSBjb21waWxlIHRoaXMgZmlsZSB3aXRoIHRoZSBtYWNybyBTUElORUxfU0VMRl9URVNUIHNldCB0byAxLgorICogIEZvciBleGFtcGxlOgorICoKKyAqICAgICAgY2Mgc3BpbmVsLmMgLVdhbGwgLURTUElORUxfU0VMRl9URVNUPTEgLW8gc3BpbmVsCisgKgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiAtCisvLyBNQVJLOiBIZWFkZXJzCisKKyNpbmNsdWRlICJzcGluZWwuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZm5kZWYgU1BJTkVMX1BMQVRGT1JNX0hFQURFUgorLyogVGhlc2UgYXJlIGFsbCBhbHJlYWR5IGluY2x1ZGVkIGluIHRoZSBzcGluZWwgcGxhdGZvcm0gaGVhZGVyCisgKiBpZiBTUElORUxfUExBVEZPUk1fSEVBREVSIHdhcyBkZWZpbmVkLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZiAvLyAjaWZuZGVmIFNQSU5FTF9QTEFURk9STV9IRUFERVIKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogLQorCisvLyBJQVIncyBlcnJuby5oIGFwcGFyZW50bHkgZG9lc24ndCBkZWZpbmUgRU9WRVJGTE9XLgorI2lmbmRlZiBFT1ZFUkZMT1cKKy8vIFRoZXJlIGlzIG5vIHJlYWwgZ29vZCBjaG9pY2UgZm9yIHdoYXQgdG8gc2V0CisvLyBlcnJubyB0byBpbiB0aGlzIGNhc2UsIHNvIHdlIGp1c3QgcGljayB0aGUKKy8vIHZhbHVlICcxJyBzb21ld2hhdCBhcmJpdHJhcmlseS4KKyNkZWZpbmUgRU9WRVJGTE9XIDEKKyNlbmRpZgorCisvLyBJQVIncyBlcnJuby5oIGFwcGFyZW50bHkgZG9lc24ndCBkZWZpbmUgRUlOVkFMLgorI2lmbmRlZiBFSU5WQUwKKy8vIFRoZXJlIGlzIG5vIHJlYWwgZ29vZCBjaG9pY2UgZm9yIHdoYXQgdG8gc2V0CisvLyBlcnJubyB0byBpbiB0aGlzIGNhc2UsIHNvIHdlIGp1c3QgcGljayB0aGUKKy8vIHZhbHVlICcxJyBzb21ld2hhdCBhcmJpdHJhcmlseS4KKyNkZWZpbmUgRUlOVkFMIDEKKyNlbmRpZgorCisjaWZkZWYgX0tFUk5FTF9NT0RFCisjZGVmaW5lIHZhX2NvcHkoZGVzdGluYXRpb24sIHNvdXJjZSkgKChkZXN0aW5hdGlvbikgPSAoc291cmNlKSkKKyN1bmRlZiBlcnJubworI2RlZmluZSBhc3NlcnRfcHJpbnRmKGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKGVycm5vKSAmJiBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9FUlJOT19WQVIKKyNlcnJvciAiU1BJTkVMX1BMQVRGT1JNX0RPRVNOVF9JTVBMRU1FTlRfRVJSTk9fVkFSIGlzIHNldCBidXQgZXJybm8gaXMgYWxyZWFkeSBkZWZpbmVkLiIKKyNlbmRpZgorCisvLyBXb3JrLWFyb3VuZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZSBgZXJybm9gIHZhcmlhYmxlLgorI2lmICFkZWZpbmVkKGVycm5vKSAmJiBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9FUlJOT19WQVIKK3N0YXRpYyBpbnQgc3BpbmVsX2Vycm5vX3dvcmthcm91bmRfOworI2RlZmluZSBlcnJubyBzcGluZWxfZXJybm9fd29ya2Fyb3VuZF8KKyNlbmRpZiAvLyBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9FUlJOT19WQVIKKworI2lmbmRlZiBhc3NlcnRfcHJpbnRmCisjaWYgU1BJTkVMX1BMQVRGT1JNX0RPRVNOVF9JTVBMRU1FTlRfRlBSSU5URgorI2RlZmluZSBhc3NlcnRfcHJpbnRmKGZtdCwgLi4uKSBcCisgICAgcHJpbnRmKF9fRklMRV9fICI6JWQ6ICIgZm10ICJcbiIsIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNlbHNlIC8vIGlmIFNQSU5FTF9QTEFURk9STV9ET0VTTlRfSU1QTEVNRU5UX0ZQUklOVEYKKyNkZWZpbmUgYXNzZXJ0X3ByaW50ZihmbXQsIC4uLikgXAorICAgIGZwcmludGYoc3RkZXJyLCBfX0ZJTEVfXyAiOiVkOiAiIGZtdCAiXG4iLCBfX0xJTkVfXywgX19WQV9BUkdTX18pCisjZW5kaWYgLy8gZWxzZSBTUElORUxfUExBVEZPUk1fRE9FU05UX0lNUExFTUVOVF9GUFJJTlRGCisjZW5kaWYKKworCisjaWZuZGVmIHJlcXVpcmVfYWN0aW9uCisjaWYgU1BJTkVMX1BMQVRGT1JNX1NIT1VMRF9MT0dfQVNTRVJUUworI2RlZmluZSByZXF1aXJlX2FjdGlvbihjLCBsLCBhKSBcCisgICAgZG8geyBpZiAoIShjKSkgeyBcCisgICAgICAgIGFzc2VydF9wcmludGYoIlJlcXVpcmVtZW50IEZhaWxlZCAoJXMpIiwgIyBjKTsgXAorICAgICAgICBhOyBcCisgICAgICAgIGdvdG8gbDsgXAorICAgIH0gfSB3aGlsZSAoMCkKKyNlbHNlIC8vIGlmIERFQlVHCisjZGVmaW5lIHJlcXVpcmVfYWN0aW9uKGMsIGwsIGEpIFwKKyAgICBkbyB7IGlmICghKGMpKSB7IFwKKyAgICAgICAgYTsgXAorICAgICAgICBnb3RvIGw7IFwKKyAgICB9IH0gd2hpbGUgKDApCisjZW5kaWYgLy8gZWxzZSBERUJVRworI2VuZGlmIC8vIGlmbmRlZiByZXF1aXJlX2FjdGlvbgorCisjaWZuZGVmIHJlcXVpcmUKKyNkZWZpbmUgcmVxdWlyZShjLCBsKSAgIHJlcXVpcmVfYWN0aW9uKGMsIGwsIHt9KQorI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHZhX2xpc3Qgb2JqOworfSB2YV9saXN0X29iajsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUFSSzogLQorCitzcGluZWxfc3NpemVfdAorc3BpbmVsX3BhY2tlZF91aW50X2RlY29kZShjb25zdCB1aW50OF90ICpieXRlcywgc3BpbmVsX3NpemVfdCBsZW4sIHVuc2lnbmVkIGludCAqdmFsdWVfcHRyKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHJldCA9IDA7CisgICAgdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKworICAgIGludCBpID0gMDsKKworICAgIGRvCisgICAgeworICAgICAgICBpZiAobGVuIDwgc2l6ZW9mKHVpbnQ4X3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWUgfD0gKHVuc2lnbmVkIGludCkoKGJ5dGVzWzBdICYgMHg3RikgPDwgaSk7CisgICAgICAgIGkgKz0gNzsKKyAgICAgICAgcmV0ICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgYnl0ZXMgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICBsZW4gLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgIH0KKyAgICB3aGlsZSAoKGJ5dGVzWy0xXSAmIDB4ODApID09IDB4ODApOworCisgICAgaWYgKChyZXQgPiAwKSAmJiAodmFsdWVfcHRyICE9IE5VTEwpKQorICAgIHsKKyAgICAgICAgKnZhbHVlX3B0ciA9IHZhbHVlOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3NwaW5lbF9zc2l6ZV90CitzcGluZWxfcGFja2VkX3VpbnRfc2l6ZSh1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisgICAgc3BpbmVsX3NzaXplX3QgcmV0OworCisgICAgaWYgKHZhbHVlIDwgKDEgPDwgNykpCisgICAgeworICAgICAgICByZXQgPSAxOworICAgIH0KKyAgICBlbHNlIGlmICh2YWx1ZSA8ICgxIDw8IDE0KSkKKyAgICB7CisgICAgICAgIHJldCA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHZhbHVlIDwgKDEgPDwgMjEpKQorICAgIHsKKyAgICAgICAgcmV0ID0gMzsKKyAgICB9CisgICAgZWxzZSBpZiAodmFsdWUgPCAoMSA8PCAyOCkpCisgICAgeworICAgICAgICByZXQgPSA0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXQgPSA1OworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3NwaW5lbF9zc2l6ZV90CitzcGluZWxfcGFja2VkX3VpbnRfZW5jb2RlKHVpbnQ4X3QgKmJ5dGVzLCBzcGluZWxfc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IHZhbHVlKQoreworICAgIGNvbnN0IHNwaW5lbF9zc2l6ZV90IGVuY29kZWRfc2l6ZSA9IHNwaW5lbF9wYWNrZWRfdWludF9zaXplKHZhbHVlKTsKKworICAgIGlmICgoc3BpbmVsX3NzaXplX3QpbGVuID49IGVuY29kZWRfc2l6ZSkKKyAgICB7CisgICAgICAgIHNwaW5lbF9zc2l6ZV90IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSAhPSBlbmNvZGVkX3NpemUgLSAxOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgICpieXRlcysrID0gKHZhbHVlICYgMHg3RikgfCAweDgwOworICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPj4gNyk7CisgICAgICAgIH0KKworICAgICAgICAqYnl0ZXMrKyA9ICh2YWx1ZSAmIDB4N0YpOworICAgIH0KKworICAgIHJldHVybiBlbmNvZGVkX3NpemU7Cit9CisKK2NvbnN0IGNoYXIgKgorc3BpbmVsX25leHRfcGFja2VkX2RhdGF0eXBlKGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0KQoreworICAgIGludCBkZXB0aCA9IDA7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgc3dpdGNoICgqKytwYWNrX2Zvcm1hdCkKKyAgICAgICAgeworICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgIGRlcHRoKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgICAgIGRlcHRoLS07CisKKyAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhY2tfZm9ybWF0Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICgoZGVwdGggPiAwKSAmJiAqcGFja19mb3JtYXQgIT0gMCk7CisKKyAgICByZXR1cm4gcGFja19mb3JtYXQ7Cit9CisKK3N0YXRpYyBzcGluZWxfc3NpemVfdAorc3BpbmVsX2RhdGF0eXBlX3Z1bnBhY2tfKGNvbnN0IHVpbnQ4X3QgKmRhdGFfcHRyLCBzcGluZWxfc2l6ZV90IGRhdGFfbGVuLCBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgdmFfbGlzdF9vYmogKmFyZ3MpCit7CisgICAgc3BpbmVsX3NzaXplX3QgcmV0ID0gMDsKKworICAgIGZvciAoOyAqcGFja19mb3JtYXQgIT0gMDsgcGFja19mb3JtYXQgPSBzcGluZWxfbmV4dF9wYWNrZWRfZGF0YXR5cGUocGFja19mb3JtYXQpKQorICAgIHsKKyAgICAgICAgaWYgKCpwYWNrX2Zvcm1hdCA9PSAnKScpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERvbid0IGdvIHBhc3QgdGhlIGVuZCBvZiBhIHN0cnVjdC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICgoc3BpbmVsX2RhdGF0eXBlX3QpcGFja19mb3JtYXRbMF0pCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfQk9PTF9DOgorICAgICAgICB7CisgICAgICAgICAgICBib29sICphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgYm9vbCAqKTsKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGRhdGFfbGVuID49IHNpemVvZih1aW50OF90KSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoYXJnX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYXJnX3B0ciA9IGRhdGFfcHRyWzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X0M6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCB1aW50OF90ICopOworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oZGF0YV9sZW4gPj0gc2l6ZW9mKHVpbnQ4X3QpLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChhcmdfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICphcmdfcHRyID0gZGF0YV9wdHJbMF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0lOVDE2X0M6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9DOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZfdCAqYXJnX3B0ciA9IHZhX2FyZyhhcmdzLT5vYmosIHVpbnQxNl90ICopOworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oZGF0YV9sZW4gPj0gc2l6ZW9mKHVpbnQxNl90KSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoYXJnX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYXJnX3B0ciA9ICh1aW50MTZfdCkoKGRhdGFfcHRyWzFdIDw8IDgpIHwgZGF0YV9wdHJbMF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50MTZfdCk7CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBzaXplb2YodWludDE2X3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JTlQzMl9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UMzJfQzoKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCB1aW50MzJfdCAqKTsKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGRhdGFfbGVuID49IHNpemVvZih1aW50MzJfdCksIGJhaWwsIChyZXQgPSAtMSwgZXJybm8gPSBFT1ZFUkZMT1cpKTsKKworICAgICAgICAgICAgaWYgKGFyZ19wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmFyZ19wdHIgPSAodWludDMyX3QpKChkYXRhX3B0clszXSA8PCAyNCkgfCAoZGF0YV9wdHJbMl0gPDwgMTYpIHwgKGRhdGFfcHRyWzFdIDw8IDgpIHwgZGF0YV9wdHJbMF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9DOgorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfaXB2NmFkZHJfdCAqKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCBzcGluZWxfaXB2NmFkZHJfdCAqKik7CisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihkYXRhX2xlbiA+PSBzaXplb2Yoc3BpbmVsX2lwdjZhZGRyX3QpLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChhcmdfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICphcmdfcHRyID0gKHNwaW5lbF9pcHY2YWRkcl90ICopZGF0YV9wdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSBzaXplb2Yoc3BpbmVsX2lwdjZhZGRyX3QpOworICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KTsKKyAgICAgICAgICAgIGRhdGFfbGVuIC09IHNpemVvZihzcGluZWxfaXB2NmFkZHJfdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaW5lbF9ldWk2NF90ICoqYXJnX3B0ciA9IHZhX2FyZyhhcmdzLT5vYmosIHNwaW5lbF9ldWk2NF90ICoqKTsKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKGRhdGFfbGVuID49IHNpemVvZihzcGluZWxfZXVpNjRfdCksIGJhaWwsIChyZXQgPSAtMSwgZXJybm8gPSBFT1ZFUkZMT1cpKTsKKworICAgICAgICAgICAgaWYgKGFyZ19wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmFyZ19wdHIgPSAoc3BpbmVsX2V1aTY0X3QgKilkYXRhX3B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IHNpemVvZihzcGluZWxfZXVpNjRfdCk7CisgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2Yoc3BpbmVsX2V1aTY0X3QpOworICAgICAgICAgICAgZGF0YV9sZW4gLT0gc2l6ZW9mKHNwaW5lbF9ldWk2NF90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfRVVJNDhfQzoKKyAgICAgICAgeworICAgICAgICAgICAgc3BpbmVsX2V1aTQ4X3QgKiphcmdfcHRyID0gdmFfYXJnKGFyZ3MtPm9iaiwgc3BpbmVsX2V1aTQ4X3QgKiopOworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oZGF0YV9sZW4gPj0gc2l6ZW9mKHNwaW5lbF9ldWk0OF90KSwgYmFpbCwgKHJldCA9IC0xLCBlcnJubyA9IEVPVkVSRkxPVykpOworCisgICAgICAgICAgICBpZiAoYXJnX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYXJnX3B0ciA9IChzcGluZWxfZXVpNDhfdCAqKWRhdGFfcHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHNwaW5lbF9ldWk0OF90KTsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZihzcGluZWxfZXVpNDhfdCk7CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBzaXplb2Yoc3BpbmVsX2V1aTQ4X3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9DOgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCB1bnNpZ25lZCBpbnQgKik7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBwdWlfbGVuID0gc3BpbmVsX3BhY2tlZF91aW50X2RlY29kZShkYXRhX3B0ciwgZGF0YV9sZW4sIGFyZ19wdHIpOworCisgICAgICAgICAgICAvLyBSYW5nZSBjaGVjaworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oTlVMTCA9PSBhcmdfcHRyIHx8ICgqYXJnX3B0ciA8IFNQSU5FTF9NQVhfVUlOVF9QQUNLRUQpLCBiYWlsLCB7cmV0ID0gLTE7IGVycm5vID0gRVJBTkdFO30pOworCisgICAgICAgICAgICByZXF1aXJlKHB1aV9sZW4gPiAwLCBiYWlsKTsKKworICAgICAgICAgICAgcmVxdWlyZShwdWlfbGVuIDw9IChzcGluZWxfc3NpemVfdClkYXRhX2xlbiwgYmFpbCk7CisKKyAgICAgICAgICAgIHJldCArPSBwdWlfbGVuOworICAgICAgICAgICAgZGF0YV9wdHIgKz0gcHVpX2xlbjsKKyAgICAgICAgICAgIGRhdGFfbGVuIC09IChzcGluZWxfc2l6ZV90KXB1aV9sZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1VURjhfQzoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqKmFyZ19wdHIgPSB2YV9hcmcoYXJncy0+b2JqLCBjb25zdCBjaGFyICoqKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJubGVuKChjb25zdCBjaGFyICopZGF0YV9wdHIsIGRhdGFfbGVuKSArIDE7CisKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKChsZW4gPD0gZGF0YV9sZW4pIHx8IChkYXRhX3B0cltkYXRhX2xlbiAtIDFdICE9IDApLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChhcmdfcHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICphcmdfcHRyID0gKGNvbnN0IGNoYXIgKilkYXRhX3B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IChzcGluZWxfc2l6ZV90KWxlbjsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IGxlbjsKKyAgICAgICAgICAgIGRhdGFfbGVuIC09IChzcGluZWxfc2l6ZV90KWxlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfREFUQV9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fQzoKKyAgICAgICAgeworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3QgcHVpX2xlbiA9IDA7CisgICAgICAgICAgICB1aW50MTZfdCBibG9ja19sZW4gPSAwOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYmxvY2tfcHRyID0gZGF0YV9wdHI7CisgICAgICAgICAgICBjb25zdCB1aW50OF90ICoqYmxvY2tfcHRyX3B0ciA9ICB2YV9hcmcoYXJncy0+b2JqLCBjb25zdCB1aW50OF90ICoqKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCAqYmxvY2tfbGVuX3B0ciA9IHZhX2FyZyhhcmdzLT5vYmosIHVuc2lnbmVkIGludCAqKTsKKyAgICAgICAgICAgIGNoYXIgbmV4dGZvcm1hdCA9ICpzcGluZWxfbmV4dF9wYWNrZWRfZGF0YXR5cGUocGFja19mb3JtYXQpOworCisgICAgICAgICAgICBpZiAoIChwYWNrX2Zvcm1hdFswXSA9PSBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX0MpCisgICAgICAgICAgICAgIHx8ICggKG5leHRmb3JtYXQgIT0gMCkgJiYgKG5leHRmb3JtYXQgIT0gJyknKSApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBwdWlfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3VucGFjayhkYXRhX3B0ciwgZGF0YV9sZW4sIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUywgJmJsb2NrX2xlbik7CisgICAgICAgICAgICAgICAgYmxvY2tfcHRyICs9IHB1aV9sZW47CisKKyAgICAgICAgICAgICAgICByZXF1aXJlKHB1aV9sZW4gPiAwLCBiYWlsKTsKKyAgICAgICAgICAgICAgICByZXF1aXJlKGJsb2NrX2xlbiA8IFNQSU5FTF9GUkFNRV9NQVhfU0laRSwgYmFpbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmxvY2tfbGVuID0gKHVpbnQxNl90KWRhdGFfbGVuOworICAgICAgICAgICAgICAgIHB1aV9sZW4gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbigoc3BpbmVsX3NzaXplX3QpZGF0YV9sZW4gPj0gKGJsb2NrX2xlbiArIHB1aV9sZW4pLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChOVUxMICE9IGJsb2NrX3B0cl9wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmJsb2NrX3B0cl9wdHIgPSBibG9ja19wdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChOVUxMICE9IGJsb2NrX2xlbl9wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmJsb2NrX2xlbl9wdHIgPSBibG9ja19sZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJsb2NrX2xlbiArPSAodWludDE2X3QpcHVpX2xlbjsKKyAgICAgICAgICAgIHJldCArPSBibG9ja19sZW47CisgICAgICAgICAgICBkYXRhX3B0ciArPSBibG9ja19sZW47CisgICAgICAgICAgICBkYXRhX2xlbiAtPSBibG9ja19sZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKyAgICAgICAgY2FzZSAnVCc6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9DOgorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBwdWlfbGVuID0gMDsKKyAgICAgICAgICAgIHVpbnQxNl90IGJsb2NrX2xlbiA9IDA7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBhY3R1YWxfbGVuID0gMDsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJsb2NrX3B0ciA9IGRhdGFfcHRyOworICAgICAgICAgICAgY2hhciBuZXh0Zm9ybWF0ID0gKnNwaW5lbF9uZXh0X3BhY2tlZF9kYXRhdHlwZShwYWNrX2Zvcm1hdCk7CisKKyAgICAgICAgICAgIGlmICggKHBhY2tfZm9ybWF0WzBdID09IFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfQykKKyAgICAgICAgICAgICAgfHwgKCAobmV4dGZvcm1hdCAhPSAwKSAmJiAobmV4dGZvcm1hdCAhPSAnKScpICkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHB1aV9sZW4gPSBzcGluZWxfZGF0YXR5cGVfdW5wYWNrKGRhdGFfcHRyLCBkYXRhX2xlbiwgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCAmYmxvY2tfbGVuKTsKKyAgICAgICAgICAgICAgICBibG9ja19wdHIgKz0gcHVpX2xlbjsKKworICAgICAgICAgICAgICAgIHJlcXVpcmUocHVpX2xlbiA+IDAsIGJhaWwpOworICAgICAgICAgICAgICAgIHJlcXVpcmUoYmxvY2tfbGVuIDwgU1BJTkVMX0ZSQU1FX01BWF9TSVpFLCBiYWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBibG9ja19sZW4gPSAodWludDE2X3QpZGF0YV9sZW47CisgICAgICAgICAgICAgICAgcHVpX2xlbiA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKChzcGluZWxfc3NpemVfdClkYXRhX2xlbiA+PSAoYmxvY2tfbGVuICsgcHVpX2xlbiksIGJhaWwsIChyZXQgPSAtMSwgZXJybm8gPSBFT1ZFUkZMT1cpKTsKKworICAgICAgICAgICAgYWN0dWFsX2xlbiA9IHNwaW5lbF9kYXRhdHlwZV92dW5wYWNrXyhibG9ja19wdHIsIGJsb2NrX2xlbiwgcGFja19mb3JtYXQgKyAyLCBhcmdzKTsKKworICAgICAgICAgICAgcmVxdWlyZV9hY3Rpb24oYWN0dWFsX2xlbiA+IC0xLCBiYWlsLCAocmV0ID0gLTEsIGVycm5vID0gRU9WRVJGTE9XKSk7CisKKyAgICAgICAgICAgIGlmIChwdWlfbGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJsb2NrX2xlbiArPSAodWludDE2X3QpcHVpX2xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBibG9ja19sZW4gPSAodWludDE2X3QpYWN0dWFsX2xlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ICs9IGJsb2NrX2xlbjsKKyAgICAgICAgICAgIGRhdGFfcHRyICs9IGJsb2NrX2xlbjsKKyAgICAgICAgICAgIGRhdGFfbGVuIC09IGJsb2NrX2xlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAvLyBTa2lwLgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfQVJSQVlfQzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFVuc3VwcG9ydGVkIFR5cGUhCisgICAgICAgICAgICByZXQgPSAtMTsKKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKKworYmFpbDoKKyAgICByZXR1cm4gcmV0OworfQorCitzcGluZWxfc3NpemVfdAorc3BpbmVsX2RhdGF0eXBlX3VucGFjayhjb25zdCB1aW50OF90ICpkYXRhX3B0ciwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbiwgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIC4uLikKK3sKKyAgICBzcGluZWxfc3NpemVfdCByZXQ7CisgICAgdmFfbGlzdF9vYmogYXJnczsKKyAgICB2YV9zdGFydChhcmdzLm9iaiwgcGFja19mb3JtYXQpOworCisgICAgcmV0ID0gc3BpbmVsX2RhdGF0eXBlX3Z1bnBhY2tfKGRhdGFfcHRyLCBkYXRhX2xlbiwgcGFja19mb3JtYXQsICZhcmdzKTsKKworICAgIHZhX2VuZChhcmdzLm9iaik7CisgICAgcmV0dXJuIHJldDsKK30KKworCitzcGluZWxfc3NpemVfdAorc3BpbmVsX2RhdGF0eXBlX3Z1bnBhY2soY29uc3QgdWludDhfdCAqZGF0YV9wdHIsIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgc3BpbmVsX3NzaXplX3QgcmV0OworICAgIHZhX2xpc3Rfb2JqIGFyZ3Nfb2JqOworICAgIHZhX2NvcHkoYXJnc19vYmoub2JqLCBhcmdzKTsKKworICAgIHJldCA9IHNwaW5lbF9kYXRhdHlwZV92dW5wYWNrXyhkYXRhX3B0ciwgZGF0YV9sZW4sIHBhY2tfZm9ybWF0LCAmYXJnc19vYmopOworCisgICAgdmFfZW5kKGFyZ3Nfb2JqLm9iaik7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNwaW5lbF9zc2l6ZV90CitzcGluZWxfZGF0YXR5cGVfdnBhY2tfKHVpbnQ4X3QgKmRhdGFfcHRyLCBzcGluZWxfc2l6ZV90IGRhdGFfbGVuX21heCwgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIHZhX2xpc3Rfb2JqICphcmdzKQoreworICAgIHNwaW5lbF9zc2l6ZV90IHJldCA9IDA7CisKKyAgICBmb3IgKDsgKnBhY2tfZm9ybWF0ICE9IDA7IHBhY2tfZm9ybWF0ID0gc3BpbmVsX25leHRfcGFja2VkX2RhdGF0eXBlKHBhY2tfZm9ybWF0KSkKKyAgICB7CisgICAgICAgIGlmICgqcGFja19mb3JtYXQgPT0gJyknKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEb24ndCBnbyBwYXN0IHRoZSBlbmQgb2YgYSBzdHJ1Y3QuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoKHNwaW5lbF9kYXRhdHlwZV90KSpwYWNrX2Zvcm1hdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9CT09MX0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgYXJnID0gKGJvb2wpdmFfYXJnKGFyZ3MtPm9iaiwgaW50KTsKKyAgICAgICAgICAgIHJldCArPSBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfcHRyWzBdID0gKGFyZyAhPSBmYWxzZSk7CisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSBzaXplb2YodWludDhfdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JTlQ4X0M6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYXJnID0gKHVpbnQ4X3QpdmFfYXJnKGFyZ3MtPm9iaiwgaW50KTsKKyAgICAgICAgICAgIHJldCArPSBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gc2l6ZW9mKHVpbnQ4X3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfcHRyWzBdID0gYXJnOworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50OF90KTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gc2l6ZW9mKHVpbnQ4X3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfSU5UMTZfQzoKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfVUlOVDE2X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGFyZyA9ICh1aW50MTZfdCl2YV9hcmcoYXJncy0+b2JqLCBpbnQpOworICAgICAgICAgICAgcmV0ICs9IHNpemVvZih1aW50MTZfdCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gc2l6ZW9mKHVpbnQxNl90KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX3B0clsxXSA9IChhcmcgPj4gOCkgJiAweGZmOworICAgICAgICAgICAgICAgIGRhdGFfcHRyWzBdID0gKGFyZyA+PiAwKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0lOVDMyX0M6CisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9DOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBhcmcgPSAodWludDMyX3QpdmFfYXJnKGFyZ3MtPm9iaiwgaW50KTsKKyAgICAgICAgICAgIHJldCArPSBzaXplb2YodWludDMyX3QpOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IHNpemVvZih1aW50MzJfdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9wdHJbM10gPSAoYXJnID4+IDI0KSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgZGF0YV9wdHJbMl0gPSAoYXJnID4+IDE2KSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgZGF0YV9wdHJbMV0gPSAoYXJnID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICBkYXRhX3B0clswXSA9IChhcmcgPj4gMCkgJiAweGZmOworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9JUHY2QUREUl9DOgorICAgICAgICB7CisgICAgICAgICAgICBzcGluZWxfaXB2NmFkZHJfdCAqYXJnID0gdmFfYXJnKGFyZ3MtPm9iaiwgc3BpbmVsX2lwdjZhZGRyX3QgKik7CisgICAgICAgICAgICByZXQgKz0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KTsKKworICAgICAgICAgICAgaWYgKGRhdGFfbGVuX21heCA+PSBzaXplb2Yoc3BpbmVsX2lwdjZhZGRyX3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICooc3BpbmVsX2lwdjZhZGRyX3QgKilkYXRhX3B0ciA9ICphcmc7CisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KTsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gc2l6ZW9mKHNwaW5lbF9pcHY2YWRkcl90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0VVSTQ4X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaW5lbF9ldWk0OF90ICphcmcgPSB2YV9hcmcoYXJncy0+b2JqLCBzcGluZWxfZXVpNDhfdCAqKTsKKyAgICAgICAgICAgIHJldCArPSBzaXplb2Yoc3BpbmVsX2V1aTQ4X3QpOworCisgICAgICAgICAgICBpZiAoZGF0YV9sZW5fbWF4ID49IHNpemVvZihzcGluZWxfZXVpNDhfdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKihzcGluZWxfZXVpNDhfdCAqKWRhdGFfcHRyID0gKmFyZzsKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplb2Yoc3BpbmVsX2V1aTQ4X3QpOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSBzaXplb2Yoc3BpbmVsX2V1aTQ4X3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfRVVJNjRfQzoKKyAgICAgICAgeworICAgICAgICAgICAgc3BpbmVsX2V1aTY0X3QgKmFyZyA9IHZhX2FyZyhhcmdzLT5vYmosIHNwaW5lbF9ldWk2NF90ICopOworICAgICAgICAgICAgcmV0ICs9IHNpemVvZihzcGluZWxfZXVpNjRfdCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gc2l6ZW9mKHNwaW5lbF9ldWk2NF90KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqKHNwaW5lbF9ldWk2NF90ICopZGF0YV9wdHIgPSAqYXJnOworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVvZihzcGluZWxfZXVpNjRfdCk7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IHNpemVvZihzcGluZWxfZXVpNjRfdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9DOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBhcmcgPSB2YV9hcmcoYXJncy0+b2JqLCB1aW50MzJfdCk7CisgICAgICAgICAgICBzcGluZWxfc3NpemVfdCBlbmNvZGVkX3NpemU7CisKKyAgICAgICAgICAgIC8vIFJhbmdlIENoZWNrCisgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihhcmcgPCBTUElORUxfTUFYX1VJTlRfUEFDS0VELCBiYWlsLCB7cmV0ID0gLTE7IGVycm5vID0gRUlOVkFMO30pOworCisgICAgICAgICAgICBlbmNvZGVkX3NpemUgPSBzcGluZWxfcGFja2VkX3VpbnRfZW5jb2RlKGRhdGFfcHRyLCBkYXRhX2xlbl9tYXgsIGFyZyk7CisgICAgICAgICAgICByZXQgKz0gZW5jb2RlZF9zaXplOworCisgICAgICAgICAgICBpZiAoKHNwaW5lbF9zc2l6ZV90KWRhdGFfbGVuX21heCA+PSBlbmNvZGVkX3NpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gZW5jb2RlZF9zaXplOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSAoc3BpbmVsX3NpemVfdCllbmNvZGVkX3NpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9VVEY4X0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZ19hcmcgPSB2YV9hcmcoYXJncy0+b2JqLCBjb25zdCBjaGFyICopOworICAgICAgICAgICAgc2l6ZV90IHN0cmluZ19hcmdfbGVuID0gMDsKKworICAgICAgICAgICAgaWYgKHN0cmluZ19hcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RyaW5nX2FyZ19sZW4gPSBzdHJsZW4oc3RyaW5nX2FyZykgKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cmluZ19hcmcgPSAiIjsKKyAgICAgICAgICAgICAgICBzdHJpbmdfYXJnX2xlbiA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSAoc3BpbmVsX3NpemVfdClzdHJpbmdfYXJnX2xlbjsKKworICAgICAgICAgICAgaWYgKGRhdGFfbGVuX21heCA+PSBzdHJpbmdfYXJnX2xlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YV9wdHIsIHN0cmluZ19hcmcsIHN0cmluZ19hcmdfbGVuKTsKKworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHN0cmluZ19hcmdfbGVuOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSAoc3BpbmVsX3NpemVfdClzdHJpbmdfYXJnX2xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9DOgorICAgICAgICBjYXNlIFNQSU5FTF9EQVRBVFlQRV9EQVRBX0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFyZyA9IHZhX2FyZyhhcmdzLT5vYmosIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhX3NpemVfYXJnID0gdmFfYXJnKGFyZ3MtPm9iaiwgdWludDMyX3QpOworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3Qgc2l6ZV9sZW4gPSAwOworICAgICAgICAgICAgY2hhciBuZXh0Zm9ybWF0ID0gKnNwaW5lbF9uZXh0X3BhY2tlZF9kYXRhdHlwZShwYWNrX2Zvcm1hdCk7CisKKyAgICAgICAgICAgIGlmICggKHBhY2tfZm9ybWF0WzBdID09IFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fQykKKyAgICAgICAgICAgICAgfHwgKCAobmV4dGZvcm1hdCAhPSAwKSAmJiAobmV4dGZvcm1hdCAhPSAnKScpICkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHNpemVfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3BhY2soZGF0YV9wdHIsIGRhdGFfbGVuX21heCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCBkYXRhX3NpemVfYXJnKTsKKyAgICAgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihzaXplX2xlbiA+IDAsIGJhaWwsIHtyZXQgPSAtMTsgZXJybm8gPSBFSU5WQUw7fSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSAoc3BpbmVsX3NpemVfdClzaXplX2xlbiArIGRhdGFfc2l6ZV9hcmc7CisKKyAgICAgICAgICAgIGlmIChkYXRhX2xlbl9tYXggPj0gKHNwaW5lbF9zaXplX3Qpc2l6ZV9sZW4gKyBkYXRhX3NpemVfYXJnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IHNpemVfbGVuOworICAgICAgICAgICAgICAgIGRhdGFfbGVuX21heCAtPSAoc3BpbmVsX3NpemVfdClzaXplX2xlbjsKKworICAgICAgICAgICAgICAgIG1lbWNweShkYXRhX3B0ciwgYXJnLCBkYXRhX3NpemVfYXJnKTsKKworICAgICAgICAgICAgICAgIGRhdGFfcHRyICs9IGRhdGFfc2l6ZV9hcmc7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4IC09IGRhdGFfc2l6ZV9hcmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YV9sZW5fbWF4ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgY2FzZSBTUElORUxfREFUQVRZUEVfU1RSVUNUX0M6CisgICAgICAgIHsKKyAgICAgICAgICAgIHNwaW5lbF9zc2l6ZV90IHN0cnVjdF9sZW4gPSAwOworICAgICAgICAgICAgc3BpbmVsX3NzaXplX3Qgc2l6ZV9sZW4gPSAwOworICAgICAgICAgICAgY2hhciBuZXh0Zm9ybWF0ID0gKnNwaW5lbF9uZXh0X3BhY2tlZF9kYXRhdHlwZShwYWNrX2Zvcm1hdCk7CisKKyAgICAgICAgICAgIHJlcXVpcmVfYWN0aW9uKHBhY2tfZm9ybWF0WzFdID09ICcoJywgYmFpbCwge3JldCA9IC0xOyBlcnJubyA9IEVJTlZBTDt9KTsKKworICAgICAgICAgICAgLy8gRmlyc3Qgd2UgZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFfbGlzdF9vYmogc3ViYXJnczsKKyAgICAgICAgICAgICAgICB2YV9jb3B5KHN1YmFyZ3Mub2JqLCBhcmdzLT5vYmopOworICAgICAgICAgICAgICAgIHN0cnVjdF9sZW4gPSBzcGluZWxfZGF0YXR5cGVfdnBhY2tfKE5VTEwsIDAsIHBhY2tfZm9ybWF0ICsgMiwgJnN1YmFyZ3MpOworICAgICAgICAgICAgICAgIHZhX2VuZChzdWJhcmdzLm9iaik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggKHBhY2tfZm9ybWF0WzBdID09IFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfQykKKyAgICAgICAgICAgICAgfHwgKCAobmV4dGZvcm1hdCAhPSAwKSAmJiAobmV4dGZvcm1hdCAhPSAnKScpICkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHNpemVfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3BhY2soZGF0YV9wdHIsIGRhdGFfbGVuX21heCwgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TLCBzdHJ1Y3RfbGVuKTsKKyAgICAgICAgICAgICAgICByZXF1aXJlX2FjdGlvbihzaXplX2xlbiA+IDAsIGJhaWwsIHtyZXQgPSAtMTsgZXJybm8gPSBFSU5WQUw7fSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCArPSBzaXplX2xlbiArIHN0cnVjdF9sZW47CisKKyAgICAgICAgICAgIGlmIChzdHJ1Y3RfbGVuICsgc2l6ZV9sZW4gPD0gKHNwaW5lbF9zc2l6ZV90KWRhdGFfbGVuX21heCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX3B0ciArPSBzaXplX2xlbjsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gKHNwaW5lbF9zaXplX3Qpc2l6ZV9sZW47CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3RfbGVuID0gc3BpbmVsX2RhdGF0eXBlX3ZwYWNrXyhkYXRhX3B0ciwgZGF0YV9sZW5fbWF4LCBwYWNrX2Zvcm1hdCArIDIsIGFyZ3MpOworCisgICAgICAgICAgICAgICAgZGF0YV9wdHIgKz0gc3RydWN0X2xlbjsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggLT0gKHNwaW5lbF9zaXplX3Qpc3RydWN0X2xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkYXRhX2xlbl9tYXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgLy8gU2tpcC4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBVbnN1cHBvcnRlZCBUeXBlIQorICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKworICAgICAgICB9CisgICAgfQorCitiYWlsOgorICAgIHJldHVybiByZXQ7Cit9CisKK3NwaW5lbF9zc2l6ZV90CitzcGluZWxfZGF0YXR5cGVfcGFjayh1aW50OF90ICpkYXRhX3B0ciwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbl9tYXgsIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCAuLi4pCit7CisgICAgaW50IHJldDsKKyAgICB2YV9saXN0X29iaiBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3Mub2JqLCBwYWNrX2Zvcm1hdCk7CisKKyAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdnBhY2tfKGRhdGFfcHRyLCBkYXRhX2xlbl9tYXgsIHBhY2tfZm9ybWF0LCAmYXJncyk7CisKKyAgICB2YV9lbmQoYXJncy5vYmopOworICAgIHJldHVybiByZXQ7Cit9CisKKworc3BpbmVsX3NzaXplX3QKK3NwaW5lbF9kYXRhdHlwZV92cGFjayh1aW50OF90ICpkYXRhX3B0ciwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbl9tYXgsIGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IHJldDsKKyAgICB2YV9saXN0X29iaiBhcmdzX29iajsKKyAgICB2YV9jb3B5KGFyZ3Nfb2JqLm9iaiwgYXJncyk7CisKKyAgICByZXQgPSBzcGluZWxfZGF0YXR5cGVfdnBhY2tfKGRhdGFfcHRyLCBkYXRhX2xlbl9tYXgsIHBhY2tfZm9ybWF0LCAmYXJnc19vYmopOworCisgICAgdmFfZW5kKGFyZ3Nfb2JqLm9iaik7CisgICAgcmV0dXJuIHJldDsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNQVJLOiAtCisKKy8vICoqKiogTENPVl9FWENMX1NUQVJUICoqKioKKworY29uc3QgY2hhciAqCitzcGluZWxfcHJvcF9rZXlfdG9fY3N0cihzcGluZWxfcHJvcF9rZXlfdCBwcm9wX2tleSkKK3sKKyAgICBjb25zdCBjaGFyICpyZXQgPSAiVU5LTk9XTiI7CisKKyAgICBzd2l0Y2ggKHByb3Bfa2V5KQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0xBU1RfU1RBVFVTOgorICAgICAgICByZXQgPSAiUFJPUF9MQVNUX1NUQVRVUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QUk9UT0NPTF9WRVJTSU9OOgorICAgICAgICByZXQgPSAiUFJPUF9QUk9UT0NPTF9WRVJTSU9OIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05DUF9WRVJTSU9OOgorICAgICAgICByZXQgPSAiUFJPUF9OQ1BfVkVSU0lPTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9JTlRFUkZBQ0VfVFlQRToKKyAgICAgICAgcmV0ID0gIlBST1BfSU5URVJGQUNFX1RZUEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVkVORE9SX0lEOgorICAgICAgICByZXQgPSAiUFJPUF9WRU5ET1JfSUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ0FQUzoKKyAgICAgICAgcmV0ID0gIlBST1BfQ0FQUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9JTlRFUkZBQ0VfQ09VTlQ6CisgICAgICAgIHJldCA9ICJQUk9QX0lOVEVSRkFDRV9DT1VOVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QT1dFUl9TVEFURToKKyAgICAgICAgcmV0ID0gIlBST1BfUE9XRVJfU1RBVEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSFdBRERSOgorICAgICAgICByZXQgPSAiUFJPUF9IV0FERFIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTE9DSzoKKyAgICAgICAgcmV0ID0gIlBST1BfTE9DSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9IQk9fTUVNX01BWDoKKyAgICAgICAgcmV0ID0gIlBST1BfSEJPX01FTV9NQVgiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSEJPX0JMT0NLX01BWDoKKyAgICAgICAgcmV0ID0gIlBST1BfSEJPX0JMT0NLX01BWCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9IT1NUX1BPV0VSX1NUQVRFOgorICAgICAgICByZXQgPSAiUFJPUF9IT1NUX1BPV0VSX1NUQVRFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0dQSU9fQ09ORklHOgorICAgICAgICByZXQgPSAiUFJPUF9HUElPX0NPTkZJRyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9HUElPX1NUQVRFOgorICAgICAgICByZXQgPSAiUFJPUF9HUElPX1NUQVRFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0dQSU9fU1RBVEVfU0VUOgorICAgICAgICByZXQgPSAiUFJPUF9HUElPX1NUQVRFX1NFVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9HUElPX1NUQVRFX0NMRUFSOgorICAgICAgICByZXQgPSAiUFJPUF9HUElPX1NUQVRFX0NMRUFSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RSTkdfMzI6CisgICAgICAgIHJldCA9ICJQUk9QX1RSTkdfMzIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVFJOR18xMjg6CisgICAgICAgIHJldCA9ICJQUk9QX1RSTkdfMTI4IjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RSTkdfUkFXXzMyOgorICAgICAgICByZXQgPSAiUFJPUF9UUk5HX1JBV18zMiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QSFlfRU5BQkxFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfUEhZX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUEhZX0NIQU46CisgICAgICAgIHJldCA9ICJQUk9QX1BIWV9DSEFOIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1BIWV9DSEFOX1NVUFBPUlRFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfUEhZX0NIQU5fU1VQUE9SVEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1BIWV9GUkVROgorICAgICAgICByZXQgPSAiUFJPUF9QSFlfRlJFUSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9QSFlfQ0NBX1RIUkVTSE9MRDoKKyAgICAgICAgcmV0ID0gIlBST1BfUEhZX0NDQV9USFJFU0hPTEQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUEhZX1RYX1BPV0VSOgorICAgICAgICByZXQgPSAiUFJPUF9QSFlfVFhfUE9XRVIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfUEhZX1JTU0k6CisgICAgICAgIHJldCA9ICJQUk9QX1BIWV9SU1NJIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1BIWV9SWF9TRU5TSVRJVklUWToKKyAgICAgICAgcmV0ID0gIlBST1BfUEhZX1JYX1NFTlNJVElWSVRZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RfRU5BQkxFOgorICAgICAgICByZXQgPSAiUFJPUF9KQU1fREVURUNUX0VOQUJMRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9KQU1fREVURUNURUQ6CisgICAgICAgIHJldCA9ICJQUk9QX0pBTV9ERVRFQ1RFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEOgorICAgICAgICByZXQgPSAiUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RfV0lORE9XOgorICAgICAgICByZXQgPSAiUFJPUF9KQU1fREVURUNUX1dJTkRPVyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9KQU1fREVURUNUX0JVU1k6CisgICAgICAgIHJldCA9ICJQUk9QX0pBTV9ERVRFQ1RfQlVTWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQOgorICAgICAgICByZXQgPSAiUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1NUQVRFOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfU0NBTl9TVEFURSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU0NBTl9NQVNLOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfU0NBTl9NQVNLIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19TQ0FOX1BFUklPRDoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NDQU5fUEVSSU9EIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19TQ0FOX0JFQUNPTjoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NDQU5fQkVBQ09OIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ18xNV80X0xBRERSOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfMTVfNF9MQUREUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfMTVfNF9TQUREUjoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDXzE1XzRfU0FERFIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQ6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ18xNV80X1BBTklEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQ6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19SQVdfU1RSRUFNX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX1BST01JU0NVT1VTX01PREU6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19QUk9NSVNDVU9VU19NT0RFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQ6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19FTkVSR1lfU0NBTl9SRVNVTFQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX0RBVEFfUE9MTF9QRVJJT0Q6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19EQVRBX1BPTExfUEVSSU9EIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19XSElURUxJU1Q6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19XSElURUxJU1QiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVF9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX0VYVEVOREVEX0FERFI6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19FWFRFTkRFRF9BRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfRU5BQkxFRDoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NSQ19NQVRDSF9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTOgorICAgICAgICByZXQgPSAiUFJPUF9NQUNfU1JDX01BVENIX1NIT1JUX0FERFJFU1NFUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUzoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX1NSQ19NQVRDSF9FWFRFTkRFRF9BRERSRVNTRVMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTUFDX0JMQUNLTElTVDoKKyAgICAgICAgcmV0ID0gIlBST1BfTUFDX0JMQUNLTElTVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9NQUNfQkxBQ0tMSVNUX0VOQUJMRUQ6CisgICAgICAgIHJldCA9ICJQUk9QX01BQ19CTEFDS0xJU1RfRU5BQkxFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfU0FWRUQ6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9TQVZFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfSUZfVVA6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9JRl9VUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfU1RBQ0tfVVA6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9TVEFDS19VUCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfUk9MRToKKyAgICAgICAgcmV0ID0gIlBST1BfTkVUX1JPTEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX05FVFdPUktfTkFNRToKKyAgICAgICAgcmV0ID0gIlBST1BfTkVUX05FVFdPUktfTkFNRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfWFBBTklEOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfWFBBTklEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FVF9NQVNURVJfS0VZOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfTUFTVEVSX0tFWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVI6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9LRVlfU0VRVUVOQ0VfQ09VTlRFUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVRfUEFSVElUSU9OX0lEOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfUEFSVElUSU9OX0lEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkc6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX0tFWV9TV0lUQ0hfR1VBUkRUSU1FOgorICAgICAgICByZXQgPSAiUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVUX1BTS0M6CisgICAgICAgIHJldCA9ICJQUk9QX05FVF9QU0tDIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfQUREUjoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0xFQURFUl9BRERSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9QQVJFTlQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9QQVJFTlQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0NISUxEX1RBQkxFOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfQ0hJTERfVEFCTEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9SSUQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9MRUFERVJfUklEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfV0VJR0hUOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTEVBREVSX1dFSUdIVCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTE9DQUxfTEVBREVSX1dFSUdIVDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfREFUQToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX05FVFdPUktfREFUQSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTkVUV09SS19EQVRBX1ZFUlNJT046CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEFfVkVSU0lPTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTjoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfT05fTUVTSF9ORVRTOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfT05fTUVTSF9ORVRTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVM6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUzoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfQUxMT1dfTE9DQUxfTkVUX0RBVEFfQ0hBTkdFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9NT0RFOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTU9ERSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0NISUxEX1RJTUVPVVQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1JMT0MxNjoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1JMT0MxNiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfUk9VVEVSX1VQR1JBREVfVEhSRVNIT0xEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfQ09OVEVYVF9SRVVTRV9ERUxBWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VUOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTkVUV09SS19JRF9USU1FT1VUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9BQ1RJVkVfUk9VVEVSX0lEUzoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlU6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ST1VURVJfUk9MRV9FTkFCTEVEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRDoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1JPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfU0VMRUNUSU9OX0pJVFRFUjoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1JPVVRFUl9TRUxFQ1RJT05fSklUVEVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9QUkVGRVJSRURfUk9VVEVSX0lEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEU6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ORUlHSEJPUl9UQUJMRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfQ0hJTERfQ09VTlRfTUFYIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfTkVUV09SS19EQVRBOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfTEVBREVSX05FVFdPUktfREFUQSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEE6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9TVEFCTEVfTEVBREVSX05FVFdPUktfREFUQSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfSk9JTkVSUzoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0pPSU5FUlMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX0NPTU1JU1NJT05FUl9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfQ09NTUlTU0lPTkVSX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfVE1GX1BST1hZX0VOQUJMRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfVEhSRUFEX1RNRl9QUk9YWV9TVFJFQU06CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9UTUZfUFJPWFlfU1RSRUFNIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRzoKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX0pPSU5FUl9GTEFHIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HOgorICAgICAgICByZXQgPSAiUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fRU5BQkxFX0ZJTFRFUklORyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfRElTQ09WRVJZX1NDQU5fUEFOSUQ6CisgICAgICAgIHJldCA9ICJQUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9QQU5JRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9USFJFQURfU1RFRVJJTkdfREFUQToKKyAgICAgICAgcmV0ID0gIlBST1BfVEhSRUFEX1NURUVSSU5HX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSVBWNl9MTF9BRERSOgorICAgICAgICByZXQgPSAiUFJPUF9JUFY2X0xMX0FERFIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSOgorICAgICAgICByZXQgPSAiUFJPUF9JUFY2X01MX0FERFIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSVBWNl9NTF9QUkVGSVg6CisgICAgICAgIHJldCA9ICJQUk9QX0lQVjZfTUxfUFJFRklYIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0lQVjZfQUREUkVTU19UQUJMRToKKyAgICAgICAgcmV0ID0gIlBST1BfSVBWNl9BRERSRVNTX1RBQkxFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0lQVjZfUk9VVEVfVEFCTEU6CisgICAgICAgIHJldCA9ICJQUk9QX0lQVjZfUk9VVEVfVEFCTEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRDoKKyAgICAgICAgcmV0ID0gIlBST1BfSVBWNl9JQ01QX1BJTkdfT0ZGTE9BRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9TVFJFQU1fREVCVUc6CisgICAgICAgIHJldCA9ICJQUk9QX1NUUkVBTV9ERUJVRyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9TVFJFQU1fUkFXOgorICAgICAgICByZXQgPSAiUFJPUF9TVFJFQU1fUkFXIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX1NUUkVBTV9ORVQ6CisgICAgICAgIHJldCA9ICJQUk9QX1NUUkVBTV9ORVQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRToKKyAgICAgICAgcmV0ID0gIlBST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9VQVJUX0JJVFJBVEU6CisgICAgICAgIHJldCA9ICJQUk9QX1VBUlRfQklUUkFURSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9VQVJUX1hPTl9YT0ZGOgorICAgICAgICByZXQgPSAiUFJPUF9VQVJUX1hPTl9YT0ZGIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QXzE1XzRfUElCX1BIWV9DSEFOTkVMU19TVVBQT1JURUQ6CisgICAgICAgIHJldCA9ICJQUk9QXzE1XzRfUElCX1BIWV9DSEFOTkVMU19TVVBQT1JURUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfMTVfNF9QSUJfTUFDX1BST01JU0NVT1VTX01PREU6CisgICAgICAgIHJldCA9ICJQUk9QXzE1XzRfUElCX01BQ19QUk9NSVNDVU9VU19NT0RFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QXzE1XzRfUElCX01BQ19TRUNVUklUWV9FTkFCTEVEOgorICAgICAgICByZXQgPSAiUFJPUF8xNV80X1BJQl9NQUNfU0VDVVJJVFlfRU5BQkxFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JFU0VUOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JFU0VUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9UT1RBTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9BQ0tfUkVROgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9BQ0tfUkVRIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0FDS0VEOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9BQ0tFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9OT19BQ0tfUkVROgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9OT19BQ0tfUkVRIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0RBVEE6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfUEtUX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfREFUQV9QT0xMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9EQVRBX1BPTEwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQkVBQ09OOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9CRUFDT04iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQkVBQ09OX1JFUToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfQkVBQ09OX1JFUSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9PVEhFUjoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9QS1RfT1RIRVIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfUkVUUlk6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfUEtUX1JFVFJZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfRVJSX0NDQToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9UWF9FUlJfQ0NBIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX1VOSUNBU1Q6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfUEtUX1VOSUNBU1QiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfQlJPQURDQVNUOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX1BLVF9CUk9BRENBU1QiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9FUlJfQUJPUlQ6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfRVJSX0FCT1JUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9UT1RBTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EQVRBOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9EQVRBIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0RBVEFfUE9MTDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfREFUQV9QT0xMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JFQUNPTjoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfQkVBQ09OIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JFQUNPTl9SRVE6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX0JFQUNPTl9SRVEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfT1RIRVI6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX09USEVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0ZJTFRfV0w6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX0ZJTFRfV0wiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfRklMVF9EQToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfRklMVF9EQSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9FTVBUWToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9FUlJfRU1QVFkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfVUtXTl9OQlI6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfRVJSX1VLV05fTkJSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX05WTERfU0FERFI6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfRVJSX05WTERfU0FERFIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfU0VDVVJJVFk6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfRVJSX1NFQ1VSSVRZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX0JBRF9GQ1M6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfRVJSX0JBRF9GQ1MiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfT1RIRVI6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfRVJSX09USEVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0RVUDoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9SWF9QS1RfRFVQIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX1VOSUNBU1Q6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfUEtUX1VOSUNBU1QiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfQlJPQURDQVNUOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1BLVF9CUk9BRENBU1QiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9TRUNfVE9UQUw6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfSVBfU0VDX1RPVEFMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfVFhfSVBfSU5TRUNfVE9UQUw6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfSVBfSU5TRUNfVE9UQUwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9EUk9QUEVEOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1RYX0lQX0RST1BQRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9JUF9TRUNfVE9UQUw6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfSVBfU0VDX1RPVEFMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfSU5TRUNfVE9UQUw6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfSVBfSU5TRUNfVE9UQUwiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9SWF9JUF9EUk9QUEVEOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX0lQX0RST1BQRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfQ05UUl9UWF9TUElORUxfVE9UQUw6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfVFhfU1BJTkVMX1RPVEFMIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX1RPVEFMOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1NQSU5FTF9UT1RBTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1NQSU5FTF9FUlI6CisgICAgICAgIHJldCA9ICJQUk9QX0NOVFJfUlhfU1BJTkVMX0VSUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9DTlRSX1JYX1NQSU5FTF9PVVRfT0ZfT1JERVJfVElEOgorICAgICAgICByZXQgPSAiUFJPUF9DTlRSX1JYX1NQSU5FTF9PVVRfT0ZfT1JERVJfVElEIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfVFhfU1VDQ0VTUzoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9JUF9UWF9TVUNDRVNTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfUlhfU1VDQ0VTUzoKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9JUF9SWF9TVUNDRVNTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfVFhfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9JUF9UWF9GQUlMVVJFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0NOVFJfSVBfUlhfRkFJTFVSRToKKyAgICAgICAgcmV0ID0gIlBST1BfQ05UUl9JUF9SWF9GQUlMVVJFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX01TR19CVUZGRVJfQ09VTlRFUlM6CisgICAgICAgIHJldCA9ICJQUk9QX01TR19CVUZGRVJfQ09VTlRFUlMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVTVF9TVFJFQU1fTUZHOgorICAgICAgICByZXQgPSAiUFJPUF9ORVNUX1NUUkVBTV9NRkciOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfTkVTVF9MRUdBQ1lfVUxBX1BSRUZJWDoKKyAgICAgICAgcmV0ID0gIlBST1BfTkVTVF9MRUdBQ1lfVUxBX1BSRUZJWCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfUFJPUF9ORVNUX0xFR0FDWV9KT0lORURfTk9ERToKKyAgICAgICAgcmV0ID0gIlBST1BfTkVTVF9MRUdBQ1lfSk9JTkVEX05PREUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1BST1BfREVCVUdfVEVTVF9BU1NFUlQ6CisgICAgICAgIHJldCA9ICJQUk9QX0RFQlVHX1RFU1RfQVNTRVJUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9QUk9QX0RFQlVHX05DUF9MT0dfTEVWRUw6CisgICAgICAgIHJldCA9ICJQUk9QX0RFQlVHX05DUF9MT0dfTEVWRUwiOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKnNwaW5lbF9uZXRfcm9sZV90b19jc3RyKHVpbnQ4X3QgbmV0X3JvbGUpCit7CisgICAgY29uc3QgY2hhciAqcmV0ID0gIk5FVF9ST0xFX1VOS05PTlciOworCisgICAgc3dpdGNoIChuZXRfcm9sZSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfREVUQUNIRUQ6CisgICAgICAgIHJldCA9ICJORVRfUk9MRV9ERVRBQ0hFRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfQ0hJTEQ6CisgICAgICAgIHJldCA9ICJORVRfUk9MRV9DSElMRCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfTkVUX1JPTEVfUk9VVEVSOgorICAgICAgICByZXQgPSAiTkVUX1JPTEVfUk9VVEVSIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9ORVRfUk9MRV9MRUFERVI6CisgICAgICAgIHJldCA9ICJORVRfUk9MRV9MRUFERVIiOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKnNwaW5lbF9zdGF0dXNfdG9fY3N0cihzcGluZWxfc3RhdHVzX3Qgc3RhdHVzKQoreworICAgIGNvbnN0IGNoYXIgKnJldCA9ICJVTktOT1dOIjsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfT0s6CisgICAgICAgIHJldCA9ICJTVEFUVVNfT0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19GQUlMVVJFOgorICAgICAgICByZXQgPSAiU1RBVFVTX0ZBSUxVUkUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19VTklNUExFTUVOVEVEOgorICAgICAgICByZXQgPSAiU1RBVFVTX1VOSU1QTEVNRU5URUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UOgorICAgICAgICByZXQgPSAiU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlZBTElEX1NUQVRFOgorICAgICAgICByZXQgPSAiU1RBVFVTX0lOVkFMSURfU1RBVEUiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlZBTElEX0NPTU1BTkQ6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSU5WQUxJRF9DT01NQU5EIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0U6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSU5WQUxJRF9JTlRFUkZBQ0UiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlRFUk5BTF9FUlJPUjoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19JTlRFUk5BTF9FUlJPUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1NFQ1VSSVRZX0VSUk9SOgorICAgICAgICByZXQgPSAiU1RBVFVTX1NFQ1VSSVRZX0VSUk9SIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUEFSU0VfRVJST1I6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUEFSU0VfRVJST1IiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTl9QUk9HUkVTUzoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19JTl9QUk9HUkVTUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX05PTUVNOgorICAgICAgICByZXQgPSAiU1RBVFVTX05PTUVNIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfQlVTWToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19CVVNZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUFJPUF9OT1RfRk9VTkQ6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUFJPUF9OT1RfRk9VTkQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19EUk9QUEVEOgorICAgICAgICByZXQgPSAiU1RBVFVTX0RST1BQRUQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19FTVBUWToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19FTVBUWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0NNRF9UT09fQklHOgorICAgICAgICByZXQgPSAiU1RBVFVTX0NNRF9UT09fQklHIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfTk9fQUNLOgorICAgICAgICByZXQgPSAiU1RBVFVTX05PX0FDSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0NDQV9GQUlMVVJFOgorICAgICAgICByZXQgPSAiU1RBVFVTX0NDQV9GQUlMVVJFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfQUxSRUFEWToKKyAgICAgICAgcmV0ID0gIlNUQVRVU19BTFJFQURZIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSVRFTV9OT1RfRk9VTkQ6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSVRFTV9OT1RfRk9VTkQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1A6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSU5WQUxJRF9DT01NQU5EX0ZPUl9QUk9QIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfSk9JTl9GQUlMVVJFOgorICAgICAgICByZXQgPSAiU1RBVFVTX0pPSU5fRkFJTFVSRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0pPSU5fU0VDVVJJVFk6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSk9JTl9TRUNVUklUWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0pPSU5fTk9fUEVFUlM6CisgICAgICAgIHJldCA9ICJTVEFUVVNfSk9JTl9OT19QRUVSUyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX0pPSU5fSU5DT01QQVRJQkxFOgorICAgICAgICByZXQgPSAiU1RBVFVTX0pPSU5fSU5DT01QQVRJQkxFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUkVTRVRfUE9XRVJfT046CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfUE9XRVJfT04iOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9FWFRFUk5BTDoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19SRVNFVF9FWFRFUk5BTCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1JFU0VUX1NPRlRXQVJFOgorICAgICAgICByZXQgPSAiU1RBVFVTX1JFU0VUX1NPRlRXQVJFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9TVEFUVVNfUkVTRVRfRkFVTFQ6CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfRkFVTFQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9DUkFTSDoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19SRVNFVF9DUkFTSCI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1JFU0VUX0FTU0VSVDoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19SRVNFVF9BU1NFUlQiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX1NUQVRVU19SRVNFVF9PVEhFUjoKKyAgICAgICAgcmV0ID0gIlNUQVRVU19SRVNFVF9PVEhFUiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1JFU0VUX1VOS05PV046CisgICAgICAgIHJldCA9ICJTVEFUVVNfUkVTRVRfVU5LTk9XTiI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfU1RBVFVTX1JFU0VUX1dBVENIRE9HOgorICAgICAgICByZXQgPSAiU1RBVFVTX1JFU0VUX1dBVENIRE9HIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyICpzcGluZWxfY2FwYWJpbGl0eV90b19jc3RyKHVuc2lnbmVkIGludCBjYXBhYmlsaXR5KQoreworICAgIGNvbnN0IGNoYXIgKnJldCA9ICJVTktOT1dOIjsKKworICAgIHN3aXRjaCAoY2FwYWJpbGl0eSkKKyAgICB7CisgICAgY2FzZSBTUElORUxfQ0FQX0xPQ0s6CisgICAgICAgIHJldCA9ICJDQVBfTE9DSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX05FVF9TQVZFOgorICAgICAgICByZXQgPSAiQ0FQX05FVF9TQVZFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfSEJPOgorICAgICAgICByZXQgPSAiQ0FQX0hCTyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX1BPV0VSX1NBVkU6CisgICAgICAgIHJldCA9ICJDQVBfUE9XRVJfU0FWRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX0NPVU5URVJTOgorICAgICAgICByZXQgPSAiQ0FQX0NPVU5URVJTIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfSkFNX0RFVEVDVDoKKyAgICAgICAgcmV0ID0gIkNBUF9KQU1fREVURUNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfUEVFS19QT0tFOgorICAgICAgICByZXQgPSAiQ0FQX1BFRUtfUE9LRSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX1dSSVRBQkxFX1JBV19TVFJFQU06CisgICAgICAgIHJldCA9ICJDQVBfV1JJVEFCTEVfUkFXX1NUUkVBTSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX0dQSU86CisgICAgICAgIHJldCA9ICJDQVBfR1BJTyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX1RSTkc6CisgICAgICAgIHJldCA9ICJDQVBfVFJORyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX0NNRF9NVUxUSToKKyAgICAgICAgcmV0ID0gIkNBUF9DTURfTVVMVEkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF8yMDAzOgorICAgICAgICByZXQgPSAiQ0FQXzgwMl8xNV80XzIwMDMiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF8yMDA2OgorICAgICAgICByZXQgPSAiQ0FQXzgwMl8xNV80XzIwMDYiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF8yMDExOgorICAgICAgICByZXQgPSAiQ0FQXzgwMl8xNV80XzIwMTEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF9QSUI6CisgICAgICAgIHJldCA9ICJDQVBfODAyXzE1XzRfUElCIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfMjQ1ME1IWl9PUVBTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF8yNDUwTUhaX09RUFNLIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfOTE1TUhaX09RUFNLOgorICAgICAgICByZXQgPSAiQ0FQXzgwMl8xNV80XzkxNU1IWl9PUVBTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQXzgwMl8xNV80Xzg2OE1IWl9PUVBTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF84NjhNSFpfT1FQU0siOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF84MDJfMTVfNF85MTVNSFpfQlBTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF85MTVNSFpfQlBTSyI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQXzgwMl8xNV80Xzg2OE1IWl9CUFNLOgorICAgICAgICByZXQgPSAiQ0FQXzgwMl8xNV80Xzg2OE1IWl9CUFNLIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfOTE1TUhaX0FTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF85MTVNSFpfQVNLIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfODAyXzE1XzRfODY4TUhaX0FTSzoKKyAgICAgICAgcmV0ID0gIkNBUF84MDJfMTVfNF84NjhNSFpfQVNLIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfUk9MRV9ST1VURVI6CisgICAgICAgIHJldCA9ICJDQVBfUk9MRV9ST1VURVIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9ST0xFX1NMRUVQWToKKyAgICAgICAgcmV0ID0gIkNBUF9ST0xFX1NMRUVQWSI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUElORUxfQ0FQX05FVF9USFJFQURfMV8wOgorICAgICAgICByZXQgPSAiQ0FQX05FVF9USFJFQURfMV8wIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfTUFDX1dISVRFTElTVDoKKyAgICAgICAgcmV0ID0gIkNBUF9NQUNfV0hJVEVMSVNUIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfTUFDX1JBVzoKKyAgICAgICAgcmV0ID0gIkNBUF9NQUNfUkFXIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfT09CX1NURUVSSU5HX0RBVEE6CisgICAgICAgIHJldCA9ICJDQVBfT09CX1NURUVSSU5HX0RBVEEiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9USFJFQURfQ09NTUlTU0lPTkVSOgorICAgICAgICByZXQgPSAiQ0FQX1RIUkVBRF9DT01NSVNTSU9ORVIiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9USFJFQURfVE1GX1BST1hZOgorICAgICAgICByZXQgPSAiQ0FQX1RIUkVBRF9UTUZfUFJPWFkiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9ORVNUX0xFR0FDWV9JTlRFUkZBQ0U6CisgICAgICAgIHJldCA9ICJDQVBfTkVTVF9MRUdBQ1lfSU5URVJGQUNFIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNQSU5FTF9DQVBfTkVTVF9MRUdBQ1lfTkVUX1dBS0U6CisgICAgICAgIHJldCA9ICJDQVBfTkVTVF9MRUdBQ1lfTkVUX1dBS0UiOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1BJTkVMX0NBUF9ORVNUX1RSQU5TTUlUX0hPT0s6CisgICAgICAgIHJldCA9ICJDQVBfTkVTVF9UUkFOU01JVF9IT09LIjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvLyAqKioqIExDT1ZfRVhDTF9TVE9QICoqKioKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFNQSU5FTF9TRUxGX1RFU1QKKworaW50CittYWluKHZvaWQpCit7CisgICAgaW50IHJldCA9IC0xOworCisgICAgY29uc3QgY2hhciBzdGF0aWNfc3RyaW5nW10gPSAic3RhdGljX3N0cmluZyI7CisgICAgdWludDhfdCBidWZmZXJbMTAyNF07CisgICAgc3NpemVfdCBsZW47CisKKyAgICBsZW4gPSBzcGluZWxfZGF0YXR5cGVfcGFjayhidWZmZXIsIHNpemVvZihidWZmZXIpLCAiQ2lpTFUiLCAweDg4LCA5LCAweEEzLCAweERFQURCRUVGLCBzdGF0aWNfc3RyaW5nKTsKKworICAgIGlmIChsZW4gIT0gMjIpCisgICAgeworICAgICAgICBwcmludGYoImVycm9yOiVkOiBsZW4gIT0gMjI7ICglZClcbiIsIF9fTElORV9fLCAoaW50KWxlbik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBpMSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBpMiA9IDA7CisgICAgICAgIHVpbnQzMl90IGwgPSAwOworICAgICAgICBjb25zdCBjaGFyICpzdHIgPSBOVUxMOworCisgICAgICAgIGxlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soYnVmZmVyLCAoc3BpbmVsX3NpemVfdClsZW4sICJDaWlMVSIsICZjLCAmaTEsICZpMiwgJmwsICZzdHIpOworCisgICAgICAgIGlmIChsZW4gIT0gMjIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6JWQ6IGxlbiAhPSAyMjsgKCVkKVxuIiwgX19MSU5FX18sIChpbnQpbGVuKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjICE9IDB4ODgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IHggIT0gMHg4ODsgKCVkKVxuIiwgYyk7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaTEgIT0gOSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogaTEgIT0gOTsgKCVkKVxuIiwgaTEpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkyICE9IDB4QTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IGkyICE9IDB4QTM7ICgweCUwMlgpXG4iLCBpMik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAobCAhPSAweERFQURCRUVGKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiBsICE9IDB4REVBREJFRUY7ICgweCUwOFgpXG4iLCAodW5zaWduZWQgaW50KWwpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cmNtcChzdHIsIHN0YXRpY19zdHJpbmcpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6JWQ6IHN0cmNtcChzdHIsc3RhdGljX3N0cmluZykgIT0gMFxuIiwgX19MSU5FX18pOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIG1lbXNldChidWZmZXIsIDB4QUEsIHNpemVvZihidWZmZXIpKTsKKworICAgIGxlbiA9IHNwaW5lbF9kYXRhdHlwZV9wYWNrKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJDaXQoaUwpVSIsIDB4ODgsIDksIDB4QTMsIDB4REVBREJFRUYsIHN0YXRpY19zdHJpbmcpOworCisgICAgaWYgKGxlbiAhPSAyNCkKKyAgICB7CisgICAgICAgIHByaW50ZigiZXJyb3I6JWQ6IGxlbiAhPSAyNDsgKCVkKVxuIiwgX19MSU5FX18sIChpbnQpbGVuKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworCisKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBpMSA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBpMiA9IDA7CisgICAgICAgIHVpbnQzMl90IGwgPSAwOworICAgICAgICBjb25zdCBjaGFyICpzdHIgPSBOVUxMOworCisgICAgICAgIGxlbiA9IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soYnVmZmVyLCAoc3BpbmVsX3NpemVfdClsZW4sICJDaXQoaUwpVSIsICZjLCAmaTEsICZpMiwgJmwsICZzdHIpOworCisgICAgICAgIGlmIChsZW4gIT0gMjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6JWQ6IGxlbiAhPSAyNDsgKCVkKVxuIiwgX19MSU5FX18sIChpbnQpbGVuKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjICE9IDB4ODgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IHggIT0gMHg4ODsgKCVkKVxuIiwgYyk7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaTEgIT0gOSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvcjogaTEgIT0gOTsgKCVkKVxuIiwgaTEpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkyICE9IDB4QTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6IGkyICE9IDB4QTM7ICgweCUwMlgpXG4iLCBpMik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAobCAhPSAweERFQURCRUVGKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yOiBsICE9IDB4REVBREJFRUY7ICgweCUwOFgpXG4iLCAodW5zaWduZWQgaW50KWwpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cmNtcChzdHIsIHN0YXRpY19zdHJpbmcpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiZXJyb3I6JWQ6IHN0cmNtcChzdHIsc3RhdGljX3N0cmluZykgIT0gMFxuIiwgX19MSU5FX18pOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisKKworICAgIHByaW50ZigiT0tcbiIpOworICAgIHJldCA9IDA7CisgICAgcmV0dXJuIHJldDsKKworYmFpbDoKKyAgICBwcmludGYoIkZBSUxVUkVcbiIpOworICAgIHJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvLyAjaWYgU1BJTkVMX1NFTEZfVEVTVApkaWZmIC0tZ2l0IGEvc3JjL25jcC9zcGluZWwuaCBiL3NyYy9uY3Avc3BpbmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxMmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uY3Avc3BpbmVsLmgKQEAgLTAsMCArMSwxNDM1IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNQSU5FTF9IRUFERVJfSU5DTFVERUQKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9JTkNMVURFRCAxCisKKyNpZmRlZiBTUElORUxfUExBVEZPUk1fSEVBREVSCisjaW5jbHVkZSBTUElORUxfUExBVEZPUk1fSEVBREVSCisjZWxzZSAvLyBpZmRlZiBTUElORUxfUExBVEZPUk1fSEVBREVSCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmIC8vIGVsc2UgU1BJTkVMX1BMQVRGT1JNX0hFQURFUgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTCisKKyMgaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGRlZmluZSBTUElORUxfQVBJX0VYVEVSTiAgICAgICAgICAgICBleHRlcm4gX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorIyAgZGVmaW5lIFNQSU5FTF9BUElfTk9OTlVMTF9BTEwgICAgICAgIF9fYXR0cmlidXRlX18oKG5vbm51bGwpKQorIyAgZGVmaW5lIFNQSU5FTF9BUElfV0FSTl9VTlVTRURfUkVTVUxUIF9fYXR0cmlidXRlX18oKHdhcm5fdW51c2VkX3Jlc3VsdCkpCisjIGVuZGlmIC8vIGlmZGVmIF9fR05VQ19fCisKKyMgaWYgIWRlZmluZWQoX19CRUdJTl9ERUNMUykgfHwgIWRlZmluZWQoX19FTkRfREVDTFMpCisjICBpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgIGRlZmluZSBfX0JFR0lOX0RFQ0xTICAgZXh0ZXJuICJDIiB7CisjICAgZGVmaW5lIF9fRU5EX0RFQ0xTICAgICB9CisjICBlbHNlIC8vIGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICAgZGVmaW5lIF9fQkVHSU5fREVDTFMKKyMgICBkZWZpbmUgX19FTkRfREVDTFMKKyMgIGVuZGlmIC8vIGVsc2UgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgZW5kaWYgLy8gaWYgIWRlZmluZWQoX19CRUdJTl9ERUNMUykgfHwgIWRlZmluZWQoX19FTkRfREVDTFMpCisKKyNlbmRpZiAvLyBpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTCisKKyNpZm5kZWYgU1BJTkVMX0FQSV9FWFRFUk4KKyMgZGVmaW5lIFNQSU5FTF9BUElfRVhURVJOICAgICAgICAgICAgICBleHRlcm4KKyNlbmRpZgorCisjaWZuZGVmIFNQSU5FTF9BUElfTk9OTlVMTF9BTEwKKyMgZGVmaW5lIFNQSU5FTF9BUElfTk9OTlVMTF9BTEwKKyNlbmRpZgorCisjaWZuZGVmIFNQSU5FTF9BUElfV0FSTl9VTlVTRURfUkVTVUxUCisjIGRlZmluZSBTUElORUxfQVBJX1dBUk5fVU5VU0VEX1JFU1VMVAorI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUFKT1IgICAgNAorI2RlZmluZSBTUElORUxfUFJPVE9DT0xfVkVSU0lPTl9USFJFQURfTUlOT1IgICAgMworCisjZGVmaW5lIFNQSU5FTF9GUkFNRV9NQVhfU0laRSAgICAgICAgICAgMTMwMAorCisvLy8gTWFjcm8gZm9yIGdlbmVyYXRpbmcgYml0IG1hc2tzIHVzaW5nIGJpdCBpbmRleCBmcm9tIHRoZSBzcGVjCisjZGVmaW5lIFNQSU5FTF9CSVRfTUFTSyhiaXRfaW5kZXgsZmllbGRfYml0X2NvdW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgxIDw8ICgoZmllbGRfYml0X2NvdW50KSAtIDEpKSA+PiAoYml0X2luZGV4KSApCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTUElORUxfU1RBVFVTX09LICAgICAgICAgICAgICAgICAgICA9IDAsIC8vLzwgT3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIFNQSU5FTF9TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAgID0gMSwgLy8vPCBPcGVyYXRpb24gaGFzIGZhaWxlZCBmb3Igc29tZSB1bmRlZmluZWQgcmVhc29uLgorCisgICAgU1BJTkVMX1NUQVRVU19VTklNUExFTUVOVEVEICAgICAgICAgPSAyLCAvLy88IEdpdmVuIG9wZXJhdGlvbiBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuCisgICAgU1BJTkVMX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UICAgICAgPSAzLCAvLy88IEFuIGFyZ3VtZW50IHRvIHRoZSBvcGVyYXRpb24gaXMgaW52YWxpZC4KKyAgICBTUElORUxfU1RBVFVTX0lOVkFMSURfU1RBVEUgICAgICAgICA9IDQsIC8vLzwgVGhpcyBvcGVyYXRpb24gaXMgaW52YWxpZCBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlIHN0YXRlLgorICAgIFNQSU5FTF9TVEFUVVNfSU5WQUxJRF9DT01NQU5EICAgICAgID0gNSwgLy8vPCBUaGlzIGNvbW1hbmQgaXMgbm90IHJlY29nbml6ZWQuCisgICAgU1BJTkVMX1NUQVRVU19JTlZBTElEX0lOVEVSRkFDRSAgICAgPSA2LCAvLy88IFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgU1BJTkVMX1NUQVRVU19JTlRFUk5BTF9FUlJPUiAgICAgICAgPSA3LCAvLy88IEFuIGludGVybmFsIHJ1bnRpbWUgZXJyb3IgaGFzIG9jY3VyZWQuCisgICAgU1BJTkVMX1NUQVRVU19TRUNVUklUWV9FUlJPUiAgICAgICAgPSA4LCAvLy88IEEgc2VjdXJpdHkvYXV0aGVudGljYXRpb24gZXJyb3IgaGFzIG9jY3VyZWQuCisgICAgU1BJTkVMX1NUQVRVU19QQVJTRV9FUlJPUiAgICAgICAgICAgPSA5LCAvLy88IEEgZXJyb3IgaGFzIG9jY3VyZWQgd2hpbGUgcGFyc2luZyB0aGUgY29tbWFuZC4KKyAgICBTUElORUxfU1RBVFVTX0lOX1BST0dSRVNTICAgICAgICAgICA9IDEwLCAvLy88IFRoaXMgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLgorICAgIFNQSU5FTF9TVEFUVVNfTk9NRU0gICAgICAgICAgICAgICAgID0gMTEsIC8vLzwgT3BlcmF0aW9uIHByZXZlbnRlZCBkdWUgdG8gbWVtb3J5IHByZXNzdXJlLgorICAgIFNQSU5FTF9TVEFUVVNfQlVTWSAgICAgICAgICAgICAgICAgID0gMTIsIC8vLzwgVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcGVyYXRpb24KKyAgICBTUElORUxfU1RBVFVTX1BST1BfTk9UX0ZPVU5EICAgICAgICA9IDEzLCAvLy88IFRoZSBnaXZlbiBwcm9wZXJ0eSBpcyBub3QgcmVjb2duaXplZC4KKyAgICBTUElORUxfU1RBVFVTX0RST1BQRUQgICAgICAgICAgICAgICA9IDE0LCAvLy88IEEvVGhlIHBhY2tldCB3YXMgZHJvcHBlZC4KKyAgICBTUElORUxfU1RBVFVTX0VNUFRZICAgICAgICAgICAgICAgICA9IDE1LCAvLy88IFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBpcyBlbXB0eS4KKyAgICBTUElORUxfU1RBVFVTX0NNRF9UT09fQklHICAgICAgICAgICA9IDE2LCAvLy88IFRoZSBjb21tYW5kIHdhcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSBpbnRlcm5hbCBidWZmZXIuCisgICAgU1BJTkVMX1NUQVRVU19OT19BQ0sgICAgICAgICAgICAgICAgPSAxNywgLy8vPCBUaGUgcGFja2V0IHdhcyBub3QgYWNrbm93bGVkZ2VkLgorICAgIFNQSU5FTF9TVEFUVVNfQ0NBX0ZBSUxVUkUgICAgICAgICAgID0gMTgsIC8vLzwgVGhlIHBhY2tldCB3YXMgbm90IHNlbnQgZHVlIHRvIGEgQ0NBIGZhaWx1cmUuCisgICAgU1BJTkVMX1NUQVRVU19BTFJFQURZICAgICAgICAgICAgICAgPSAxOSwgLy8vPCBUaGUgb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCisgICAgU1BJTkVMX1NUQVRVU19JVEVNX05PVF9GT1VORCAgICAgICAgPSAyMCwgLy8vPCBUaGUgZ2l2ZW4gaXRlbSBjb3VsZCBub3QgYmUgZm91bmQuCisgICAgU1BJTkVMX1NUQVRVU19JTlZBTElEX0NPTU1BTkRfRk9SX1BST1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDIxLCAvLy88IFRoZSBnaXZlbiBjb21tYW5kIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gdGhpcyBwcm9wZXJ0eS4KKworICAgIFNQSU5FTF9TVEFUVVNfSk9JTl9fQkVHSU4gICAgICAgICAgID0gMTA0LAorCisgICAgLy8vIEdlbmVyaWMgZmFpbHVyZSB0byBhc3NvY2lhdGUgd2l0aCBvdGhlciBwZWVycy4KKyAgICAvKioKKyAgICAgKiAgVGhpcyBzdGF0dXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGltcGxlbWVudG9ycyBpZgorICAgICAqICBlbm91Z2ggaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGF0IG9uZSBvZiB0aGUKKyAgICAgKiAgbGF0ZXIgam9pbiBmYWlsdXJlIHN0YXR1cyBjb2RlcyB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlLgorICAgICAqCisgICAgICogIFxzYSBTUElORUxfUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HCisgICAgICovCisgICAgU1BJTkVMX1NUQVRVU19KT0lOX0ZBSUxVUkUgICAgICAgICAgPSBTUElORUxfU1RBVFVTX0pPSU5fX0JFR0lOICsgMCwKKworICAgIC8vLyBUaGUgbm9kZSBmb3VuZCBvdGhlciBwZWVycyBidXQgd2FzIHVuYWJsZSB0byBkZWNvZGUgdGhlaXIgcGFja2V0cy4KKyAgICAvKioKKyAgICAgKiAgVHlwaWNhbGx5IHRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmV0d29yaworICAgICAqICBrZXkgaGFzIGJlZW4gc2V0IGluY29ycmVjdGx5LgorICAgICAqCisgICAgICogIFxzYSBTUElORUxfUFJPUF9ORVRfUkVRVUlSRV9KT0lOX0VYSVNUSU5HCisgICAgICovCisgICAgU1BJTkVMX1NUQVRVU19KT0lOX1NFQ1VSSVRZICAgICAgICAgPSBTUElORUxfU1RBVFVTX0pPSU5fX0JFR0lOICsgMSwKKworICAgIC8vLyBUaGUgbm9kZSB3YXMgdW5hYmxlIHRvIGZpbmQgYW55IG90aGVyIHBlZXJzIG9uIHRoZSBuZXR3b3JrLgorICAgIC8qKgorICAgICAqICBcc2EgU1BJTkVMX1BST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORworICAgICAqLworICAgIFNQSU5FTF9TVEFUVVNfSk9JTl9OT19QRUVSUyAgICAgICAgID0gU1BJTkVMX1NUQVRVU19KT0lOX19CRUdJTiArIDIsCisKKyAgICAvLy8gVGhlIG9ubHkgcG90ZW50aWFsIHBlZXIgbm9kZXMgZm91bmQgYXJlIGluY29tcGF0aWJsZS4KKyAgICAvKioKKyAgICAgKiAgXHNhIFNQSU5FTF9QUk9QX05FVF9SRVFVSVJFX0pPSU5fRVhJU1RJTkcKKyAgICAgKi8KKyAgICBTUElORUxfU1RBVFVTX0pPSU5fSU5DT01QQVRJQkxFICAgICA9IFNQSU5FTF9TVEFUVVNfSk9JTl9fQkVHSU4gKyAzLAorCisgICAgU1BJTkVMX1NUQVRVU19KT0lOX19FTkQgICAgICAgICAgICAgPSAxMTIsCisKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX19CRUdJTiAgICAgICAgICA9IDExMiwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX1BPV0VSX09OICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgMCwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX0VYVEVSTkFMICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgMSwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX1NPRlRXQVJFICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgMiwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX0ZBVUxUICAgICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgMywKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX0NSQVNIICAgICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgNCwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX0FTU0VSVCAgICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgNSwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX09USEVSICAgICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgNiwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX1VOS05PV04gICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgNywKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX1dBVENIRE9HICAgICAgICA9IFNQSU5FTF9TVEFUVVNfUkVTRVRfX0JFR0lOICsgOCwKKyAgICBTUElORUxfU1RBVFVTX1JFU0VUX19FTkQgICAgICAgICAgICA9IDEyOCwKKworICAgIFNQSU5FTF9TVEFUVVNfVkVORE9SX19CRUdJTiAgICAgICAgID0gMTUzNjAsCisgICAgU1BJTkVMX1NUQVRVU19WRU5ET1JfX0VORCAgICAgICAgICAgPSAxNjM4NCwKKworICAgIFNQSU5FTF9TVEFUVVNfU1RBQ0tfTkFUSVZFX19CRUdJTiAgID0gMTYzODQsCisgICAgU1BJTkVMX1NUQVRVU19TVEFDS19OQVRJVkVfX0VORCAgICAgPSA4MTkyMCwKKworICAgIFNQSU5FTF9TVEFUVVNfRVhQRVJJTUVOVEFMX19CRUdJTiAgID0gMjAwMDAwMCwKKyAgICBTUElORUxfU1RBVFVTX0VYUEVSSU1FTlRBTF9fRU5EICAgICA9IDIwOTcxNTIsCit9IHNwaW5lbF9zdGF0dXNfdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU1BJTkVMX05FVF9ST0xFX0RFVEFDSEVEICAgICAgICAgICAgPSAwLAorICAgIFNQSU5FTF9ORVRfUk9MRV9DSElMRCAgICAgICAgICAgICAgID0gMSwKKyAgICBTUElORUxfTkVUX1JPTEVfUk9VVEVSICAgICAgICAgICAgICA9IDIsCisgICAgU1BJTkVMX05FVF9ST0xFX0xFQURFUiAgICAgICAgICAgICAgPSAzLAorfSBzcGluZWxfbmV0X3JvbGVfdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU1BJTkVMX1NDQU5fU1RBVEVfSURMRSAgICAgICAgICAgICAgPSAwLAorICAgIFNQSU5FTF9TQ0FOX1NUQVRFX0JFQUNPTiAgICAgICAgICAgID0gMSwKKyAgICBTUElORUxfU0NBTl9TVEFURV9FTkVSR1kgICAgICAgICAgICA9IDIsCisgICAgU1BJTkVMX1NDQU5fU1RBVEVfRElTQ09WRVIgICAgICAgICAgPSAzLAorfSBzcGluZWxfc2Nhbl9zdGF0ZV90OworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTUElORUxfUE9XRVJfU1RBVEVfT0ZGTElORSAgICAgICAgICA9IDAsCisgICAgU1BJTkVMX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVAgICAgICAgPSAxLAorICAgIFNQSU5FTF9QT1dFUl9TVEFURV9TVEFOREJZICAgICAgICAgID0gMiwKKyAgICBTUElORUxfUE9XRVJfU1RBVEVfTE9XX1BPV0VSICAgICAgICA9IDMsCisgICAgU1BJTkVMX1BPV0VSX1NUQVRFX09OTElORSAgICAgICAgICAgPSA0LAorfSBzcGluZWxfcG93ZXJfc3RhdGVfdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfT0ZGTElORSAgICAgPSAwLAorICAgIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX0RFRVBfU0xFRVAgID0gMSwKKyAgICBTUElORUxfSE9TVF9QT1dFUl9TVEFURV9SRVNFUlZFRCAgICA9IDIsCisgICAgU1BJTkVMX0hPU1RfUE9XRVJfU1RBVEVfTE9XX1BPV0VSICAgPSAzLAorICAgIFNQSU5FTF9IT1NUX1BPV0VSX1NUQVRFX09OTElORSAgICAgID0gNCwKK30gc3BpbmVsX2hvc3RfcG93ZXJfc3RhdGVfdDsKKworZW51bQoreworICAgIFNQSU5FTF9ORVRfRkxBR19PTl9NRVNIICAgICAgICAgICAgID0gKDEgPDwgMCksCisgICAgU1BJTkVMX05FVF9GTEFHX0RFRkFVTFRfUk9VVEUgICAgICAgPSAoMSA8PCAxKSwKKyAgICBTUElORUxfTkVUX0ZMQUdfQ09ORklHVVJFICAgICAgICAgICA9ICgxIDw8IDIpLAorICAgIFNQSU5FTF9ORVRfRkxBR19ESENQICAgICAgICAgICAgICAgID0gKDEgPDwgMyksCisgICAgU1BJTkVMX05FVF9GTEFHX1NMQUFDICAgICAgICAgICAgICAgPSAoMSA8PCA0KSwKKyAgICBTUElORUxfTkVUX0ZMQUdfUFJFRkVSUkVEICAgICAgICAgICA9ICgxIDw8IDUpLAorCisgICAgU1BJTkVMX05FVF9GTEFHX1BSRUZFUkVOQ0VfT0ZGU0VUICAgPSA2LAorICAgIFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX01BU0sgICAgID0gKDMgPDwgU1BJTkVMX05FVF9GTEFHX1BSRUZFUkVOQ0VfT0ZGU0VUKSwKK307CisKK2VudW0KK3sKKyAgICBTUElORUxfUk9VVEVfUFJFRkVSRU5DRV9ISUdIICAgICAgICA9ICgxIDw8IFNQSU5FTF9ORVRfRkxBR19QUkVGRVJFTkNFX09GRlNFVCksCisgICAgU1BJTkVMX1JPVVRFX1BSRUZFUkVOQ0VfTUVESVVNICAgICAgPSAoMCA8PCBTUElORUxfTkVUX0ZMQUdfUFJFRkVSRU5DRV9PRkZTRVQpLAorICAgIFNQSU5FTF9ST1VURV9QUkVGRVJFTkNFX0xPVyAgICAgICAgID0gKDMgPDwgU1BJTkVMX05FVF9GTEFHX1BSRUZFUkVOQ0VfT0ZGU0VUKSwKK307CisKK2VudW0KK3sKKyAgICBTUElORUxfVEhSRUFEX01PREVfRlVMTF9ORVRXT1JLX0RBVEEgICAgPSAoMSA8PCAwKSwKKyAgICBTUElORUxfVEhSRUFEX01PREVfRlVMTF9GVU5DVElPTl9ERVYgICAgPSAoMSA8PCAxKSwKKyAgICBTUElORUxfVEhSRUFEX01PREVfU0VDVVJFX0RBVEFfUkVRVUVTVCAgPSAoMSA8PCAyKSwKKyAgICBTUElORUxfVEhSRUFEX01PREVfUlhfT05fV0hFTl9JRExFICAgICAgPSAoMSA8PCAzKSwKK307CisKK2VudW0geworICAgIFNQSU5FTF9HUElPX0ZMQUdfRElSX0lOUFVUICAgICAgICAgID0gMCwKKyAgICBTUElORUxfR1BJT19GTEFHX0RJUl9PVVRQVVQgICAgICAgICA9IFNQSU5FTF9CSVRfTUFTSygwLCA4KSwKKyAgICBTUElORUxfR1BJT19GTEFHX1BVTExfVVAgICAgICAgICAgICA9IFNQSU5FTF9CSVRfTUFTSygxLCA4KSwKKyAgICBTUElORUxfR1BJT19GTEFHX1BVTExfRE9XTiAgICAgICAgICA9IFNQSU5FTF9CSVRfTUFTSygyLCA4KSwKKyAgICBTUElORUxfR1BJT19GTEFHX09QRU5fRFJBSU4gICAgICAgICA9IFNQSU5FTF9CSVRfTUFTSygyLCA4KSwKKyAgICBTUElORUxfR1BJT19GTEFHX1RSSUdHRVJfTk9ORSAgICAgICA9IDAsCisgICAgU1BJTkVMX0dQSU9fRkxBR19UUklHR0VSX1JJU0lORyAgICAgPSBTUElORUxfQklUX01BU0soMywgOCksCisgICAgU1BJTkVMX0dQSU9fRkxBR19UUklHR0VSX0ZBTExJTkcgICAgPSBTUElORUxfQklUX01BU0soNCwgOCksCisgICAgU1BJTkVMX0dQSU9fRkxBR19UUklHR0VSX0FOWSAgICAgICAgPSBTUElORUxfR1BJT19GTEFHX1RSSUdHRVJfUklTSU5HCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUElORUxfR1BJT19GTEFHX1RSSUdHRVJfRkFMTElORywKK307CisKK2VudW0KK3sKKyAgICBTUElORUxfUFJPVE9DT0xfVFlQRV9CT09UTE9BREVSICAgICA9IDAsCisgICAgU1BJTkVMX1BST1RPQ09MX1RZUEVfWklHQkVFX0lQICAgICAgPSAyLAorICAgIFNQSU5FTF9QUk9UT0NPTF9UWVBFX1RIUkVBRCAgICAgICAgID0gMywKK307CisKK2VudW0KK3sKKyAgICBTUElORUxfTUFDX1BST01JU0NVT1VTX01PREVfT0ZGICAgICA9IDAsIC8vLzwgTm9ybWFsIE1BQyBmaWx0ZXJpbmcgaXMgaW4gcGxhY2UuCisgICAgU1BJTkVMX01BQ19QUk9NSVNDVU9VU19NT0RFX05FVFdPUksgPSAxLCAvLy88IEFsbCBNQUMgcGFja2V0cyBtYXRjaGluZyBuZXR3b3JrIGFyZSBwYXNzZWQgdXAgdGhlIHN0YWNrLgorICAgIFNQSU5FTF9NQUNfUFJPTUlTQ1VPVVNfTU9ERV9GVUxMICAgID0gMiwgLy8vPCBBbGwgZGVjb2RlZCBNQUMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4KK307CisKK2VudW0KK3sKKyAgICBTUElORUxfTkNQX0xPR19MRVZFTF9FTUVSRyAgICAgICAgICA9IDAsCisgICAgU1BJTkVMX05DUF9MT0dfTEVWRUxfQUxFUlQgICAgICAgICAgPSAxLAorICAgIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX0NSSVQgICAgICAgICAgID0gMiwKKyAgICBTUElORUxfTkNQX0xPR19MRVZFTF9FUlIgICAgICAgICAgICA9IDMsCisgICAgU1BJTkVMX05DUF9MT0dfTEVWRUxfV0FSTiAgICAgICAgICAgPSA0LAorICAgIFNQSU5FTF9OQ1BfTE9HX0xFVkVMX05PVElDRSAgICAgICAgID0gNSwKKyAgICBTUElORUxfTkNQX0xPR19MRVZFTF9JTkZPICAgICAgICAgICA9IDYsCisgICAgU1BJTkVMX05DUF9MT0dfTEVWRUxfREVCVUcgICAgICAgICAgPSA3LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90IGJ5dGVzWzhdOworfSBzcGluZWxfZXVpNjRfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90IGJ5dGVzWzhdOworfSBzcGluZWxfbmV0X3hwYW5pZF90OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ4X3QgYnl0ZXNbMTZdOworfSBzcGluZWxfbmV0X3Bza2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90IGJ5dGVzWzZdOworfSBzcGluZWxfZXVpNDhfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90IGJ5dGVzWzE2XTsKK30gc3BpbmVsX2lwdjZhZGRyX3Q7CisKK3R5cGVkZWYgaW50IHNwaW5lbF9zc2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc3BpbmVsX3NpemVfdDsKK3R5cGVkZWYgdWludDhfdCBzcGluZWxfdGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBzcGluZWxfY2lkX3Q7CisKK2VudW0KK3sKKyAgICBTUElORUxfTURfRkxBR19UWCAgICAgICAgICAgICAgICAgICA9IDB4MDAwMSwgLy8hPCBQYWNrZXQgd2FzIHRyYW5zbWl0dGVkLCBub3QgcmVjZWl2ZWQuCisgICAgU1BJTkVMX01EX0ZMQUdfQkFEX0ZDUyAgICAgICAgICAgICAgPSAweDAwMDQsIC8vITwgUGFja2V0IHdhcyByZWNlaXZlZCB3aXRoIGJhZCBGQ1MKKyAgICBTUElORUxfTURfRkxBR19EVVBFICAgICAgICAgICAgICAgICA9IDB4MDAwOCwgLy8hPCBQYWNrZXQgc2VlbXMgdG8gYmUgYSBkdXBsaWNhdGUKKyAgICBTUElORUxfTURfRkxBR19SRVNFUlZFRCAgICAgICAgICAgICA9IDB4RkZGMiwgLy8hPCBGbGFncyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KK307CisKK2VudW0KK3sKKyAgICBTUElORUxfQ01EX05PT1AgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgU1BJTkVMX0NNRF9SRVNFVCAgICAgICAgICAgICAgICAgICAgPSAxLAorICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9HRVQgICAgICAgICAgID0gMiwKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfU0VUICAgICAgICAgICA9IDMsCisgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVCAgICAgICAgPSA0LAorICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkUgICAgICAgID0gNSwKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfSVMgICAgICAgICAgICA9IDYsCisgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX0lOU0VSVEVEICAgICAgPSA3LAorICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRV9SRU1PVkVEICAgICAgID0gOCwKKworICAgIFNQSU5FTF9DTURfTkVUX1NBVkUgICAgICAgICAgICAgICAgID0gOSwKKyAgICBTUElORUxfQ01EX05FVF9DTEVBUiAgICAgICAgICAgICAgICA9IDEwLAorICAgIFNQSU5FTF9DTURfTkVUX1JFQ0FMTCAgICAgICAgICAgICAgID0gMTEsCisKKyAgICBTUElORUxfQ01EX0hCT19PRkZMT0FEICAgICAgICAgICAgICA9IDEyLAorICAgIFNQSU5FTF9DTURfSEJPX1JFQ0xBSU0gICAgICAgICAgICAgID0gMTMsCisgICAgU1BJTkVMX0NNRF9IQk9fRFJPUCAgICAgICAgICAgICAgICAgPSAxNCwKKyAgICBTUElORUxfQ01EX0hCT19PRkZMT0FERUQgICAgICAgICAgICA9IDE1LAorICAgIFNQSU5FTF9DTURfSEJPX1JFQ0xBSU1FRCAgICAgICAgICAgID0gMTYsCisgICAgU1BJTkVMX0NNRF9IQk9fRFJPUEVEICAgICAgICAgICAgICAgPSAxNywKKworICAgIFNQSU5FTF9DTURfUEVFSyAgICAgICAgICAgICAgICAgICAgID0gMTgsCisgICAgU1BJTkVMX0NNRF9QRUVLX1JFVCAgICAgICAgICAgICAgICAgPSAxOSwKKyAgICBTUElORUxfQ01EX1BPS0UgICAgICAgICAgICAgICAgICAgICA9IDIwLAorCisgICAgU1BJTkVMX0NNRF9QUk9QX1ZBTFVFX01VTFRJX0dFVCAgICAgPSAyMSwKKyAgICBTUElORUxfQ01EX1BST1BfVkFMVUVfTVVMVElfU0VUICAgICA9IDIyLAorICAgIFNQSU5FTF9DTURfUFJPUF9WQUxVRVNfQVJFICAgICAgICAgID0gMjMsCisKKyAgICBTUElORUxfQ01EX05FU1RfX0JFR0lOICAgICAgICAgICAgICA9IDE1Mjk2LAorICAgIFNQSU5FTF9DTURfTkVTVF9fRU5EICAgICAgICAgICAgICAgID0gMTUzNjAsCisKKyAgICBTUElORUxfQ01EX1ZFTkRPUl9fQkVHSU4gICAgICAgICAgICA9IDE1MzYwLAorICAgIFNQSU5FTF9DTURfVkVORE9SX19FTkQgICAgICAgICAgICAgID0gMTYzODQsCisKKyAgICBTUElORUxfQ01EX0VYUEVSSU1FTlRBTF9fQkVHSU4gICAgICA9IDIwMDAwMDAsCisgICAgU1BJTkVMX0NNRF9FWFBFUklNRU5UQUxfX0VORCAgICAgICAgPSAyMDk3MTUyLAorfTsKKworZW51bQoreworICAgIFNQSU5FTF9DQVBfTE9DSyAgICAgICAgICAgICAgICAgICAgID0gMSwKKyAgICBTUElORUxfQ0FQX05FVF9TQVZFICAgICAgICAgICAgICAgICA9IDIsCisgICAgU1BJTkVMX0NBUF9IQk8gICAgICAgICAgICAgICAgICAgICAgPSAzLAorICAgIFNQSU5FTF9DQVBfUE9XRVJfU0FWRSAgICAgICAgICAgICAgID0gNCwKKworICAgIFNQSU5FTF9DQVBfQ09VTlRFUlMgICAgICAgICAgICAgICAgID0gNSwKKyAgICBTUElORUxfQ0FQX0pBTV9ERVRFQ1QgICAgICAgICAgICAgICA9IDYsCisKKyAgICBTUElORUxfQ0FQX1BFRUtfUE9LRSAgICAgICAgICAgICAgICA9IDcsCisKKyAgICBTUElORUxfQ0FQX1dSSVRBQkxFX1JBV19TVFJFQU0gICAgICA9IDgsCisgICAgU1BJTkVMX0NBUF9HUElPICAgICAgICAgICAgICAgICAgICAgPSA5LAorICAgIFNQSU5FTF9DQVBfVFJORyAgICAgICAgICAgICAgICAgICAgID0gMTAsCisgICAgU1BJTkVMX0NBUF9DTURfTVVMVEkgICAgICAgICAgICAgICAgPSAxMSwKKworICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICAgICAgICAgID0gMTYsCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF8yMDAzICAgICAgICAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAwKSwKKyAgICBTUElORUxfQ0FQXzgwMl8xNV80XzIwMDYgICAgICAgICAgICA9IChTUElORUxfQ0FQXzgwMl8xNV80X19CRUdJTiArIDEpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfMjAxMSAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgMiksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF9QSUIgICAgICAgICAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyA1KSwKKyAgICBTUElORUxfQ0FQXzgwMl8xNV80XzI0NTBNSFpfT1FQU0sgICA9IChTUElORUxfQ0FQXzgwMl8xNV80X19CRUdJTiArIDgpLAorICAgIFNQSU5FTF9DQVBfODAyXzE1XzRfOTE1TUhaX09RUFNLICAgID0gKFNQSU5FTF9DQVBfODAyXzE1XzRfX0JFR0lOICsgOSksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF84NjhNSFpfT1FQU0sgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAxMCksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF85MTVNSFpfQlBTSyAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAxMSksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF84NjhNSFpfQlBTSyAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAxMiksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF85MTVNSFpfQVNLICAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAxMyksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF84NjhNSFpfQVNLICAgICAgPSAoU1BJTkVMX0NBUF84MDJfMTVfNF9fQkVHSU4gKyAxNCksCisgICAgU1BJTkVMX0NBUF84MDJfMTVfNF9fRU5EICAgICAgICAgICAgPSAzMiwKKworICAgIFNQSU5FTF9DQVBfUk9MRV9fQkVHSU4gICAgICAgICAgICAgID0gNDgsCisgICAgU1BJTkVMX0NBUF9ST0xFX1JPVVRFUiAgICAgICAgICAgICAgPSAoU1BJTkVMX0NBUF9ST0xFX19CRUdJTiArIDApLAorICAgIFNQSU5FTF9DQVBfUk9MRV9TTEVFUFkgICAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfUk9MRV9fQkVHSU4gKyAxKSwKKyAgICBTUElORUxfQ0FQX1JPTEVfX0VORCAgICAgICAgICAgICAgICA9IDUyLAorCisgICAgU1BJTkVMX0NBUF9ORVRfX0JFR0lOICAgICAgICAgICAgICAgPSA1MiwKKyAgICBTUElORUxfQ0FQX05FVF9USFJFQURfMV8wICAgICAgICAgICA9IChTUElORUxfQ0FQX05FVF9fQkVHSU4gKyAwKSwKKyAgICBTUElORUxfQ0FQX05FVF9fRU5EICAgICAgICAgICAgICAgICA9IDY0LAorCisgICAgU1BJTkVMX0NBUF9PUEVOVEhSRUFEX19CRUdJTiAgICAgICAgPSA1MTIsCisgICAgU1BJTkVMX0NBUF9NQUNfV0hJVEVMSVNUICAgICAgICAgICAgPSAoU1BJTkVMX0NBUF9PUEVOVEhSRUFEX19CRUdJTiArIDApLAorICAgIFNQSU5FTF9DQVBfTUFDX1JBVyAgICAgICAgICAgICAgICAgID0gKFNQSU5FTF9DQVBfT1BFTlRIUkVBRF9fQkVHSU4gKyAxKSwKKyAgICBTUElORUxfQ0FQX09PQl9TVEVFUklOR19EQVRBICAgICAgICA9IChTUElORUxfQ0FQX09QRU5USFJFQURfX0JFR0lOICsgMiksCisgICAgU1BJTkVMX0NBUF9PUEVOVEhSRUFEX19FTkQgICAgICAgICAgPSA2NDAsCisKKyAgICBTUElORUxfQ0FQX1RIUkVBRF9fQkVHSU4gICAgICAgICAgICA9IDEwMjQsCisgICAgU1BJTkVMX0NBUF9USFJFQURfQ09NTUlTU0lPTkVSICAgICAgPSAoU1BJTkVMX0NBUF9USFJFQURfX0JFR0lOICsgMCksCisgICAgU1BJTkVMX0NBUF9USFJFQURfVE1GX1BST1hZICAgICAgICAgPSAoU1BJTkVMX0NBUF9USFJFQURfX0JFR0lOICsgMSksCisgICAgU1BJTkVMX0NBUF9USFJFQURfX0VORCAgICAgICAgICAgICAgPSAxMTUyLAorCisgICAgU1BJTkVMX0NBUF9ORVNUX19CRUdJTiAgICAgICAgICAgICAgPSAxNTI5NiwKKyAgICBTUElORUxfQ0FQX05FU1RfTEVHQUNZX0lOVEVSRkFDRSAgICA9IChTUElORUxfQ0FQX05FU1RfX0JFR0lOICsgMCksCisgICAgU1BJTkVMX0NBUF9ORVNUX0xFR0FDWV9ORVRfV0FLRSAgICAgPSAoU1BJTkVMX0NBUF9ORVNUX19CRUdJTiArIDEpLAorICAgIFNQSU5FTF9DQVBfTkVTVF9UUkFOU01JVF9IT09LICAgICAgID0gKFNQSU5FTF9DQVBfTkVTVF9fQkVHSU4gKyAyKSwKKyAgICBTUElORUxfQ0FQX05FU1RfX0VORCAgICAgICAgICAgICAgICA9IDE1MzYwLAorCisgICAgU1BJTkVMX0NBUF9WRU5ET1JfX0JFR0lOICAgICAgICAgICAgPSAxNTM2MCwKKyAgICBTUElORUxfQ0FQX1ZFTkRPUl9fRU5EICAgICAgICAgICAgICA9IDE2Mzg0LAorCisgICAgU1BJTkVMX0NBUF9FWFBFUklNRU5UQUxfX0JFR0lOICAgICAgPSAyMDAwMDAwLAorICAgIFNQSU5FTF9DQVBfRVhQRVJJTUVOVEFMX19FTkQgICAgICAgID0gMjA5NzE1MiwKK307CisKK3R5cGVkZWYgZW51bQoreworICAgIFNQSU5FTF9QUk9QX0xBU1RfU1RBVFVTICAgICAgICAgICAgID0gMCwgICAgICAgIC8vLzwgc3RhdHVzIFtpXQorICAgIFNQSU5FTF9QUk9QX1BST1RPQ09MX1ZFUlNJT04gICAgICAgID0gMSwgICAgICAgIC8vLzwgbWFqb3IsIG1pbm9yIFtpLGldCisgICAgU1BJTkVMX1BST1BfTkNQX1ZFUlNJT04gICAgICAgICAgICAgPSAyLCAgICAgICAgLy8vPCB2ZXJzaW9uIHN0cmluZyBbVV0KKyAgICBTUElORUxfUFJPUF9JTlRFUkZBQ0VfVFlQRSAgICAgICAgICA9IDMsICAgICAgICAvLy88IFtpXQorICAgIFNQSU5FTF9QUk9QX1ZFTkRPUl9JRCAgICAgICAgICAgICAgID0gNCwgICAgICAgIC8vLzwgW2ldCisgICAgU1BJTkVMX1BST1BfQ0FQUyAgICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgLy8vPCBjYXBhYmlsaXR5IGxpc3QgW0EoaSldCisgICAgU1BJTkVMX1BST1BfSU5URVJGQUNFX0NPVU5UICAgICAgICAgPSA2LCAgICAgICAgLy8vPCBJbnRlcmZhY2UgY291bnQgW0NdCisgICAgU1BJTkVMX1BST1BfUE9XRVJfU1RBVEUgICAgICAgICAgICAgPSA3LCAgICAgICAgLy8vPCBQb3dlclN0YXRlIFtDXQorICAgIFNQSU5FTF9QUk9QX0hXQUREUiAgICAgICAgICAgICAgICAgID0gOCwgICAgICAgIC8vLzwgUGVybUVVSTY0IFtFXQorICAgIFNQSU5FTF9QUk9QX0xPQ0sgICAgICAgICAgICAgICAgICAgID0gOSwgICAgICAgIC8vLzwgUHJvcExvY2sgW2JdCisgICAgU1BJTkVMX1BST1BfSEJPX01FTV9NQVggICAgICAgICAgICAgPSAxMCwgICAgICAgLy8vPCBNYXggb2ZmbG9hZCBtZW0gW1NdCisgICAgU1BJTkVMX1BST1BfSEJPX0JMT0NLX01BWCAgICAgICAgICAgPSAxMSwgICAgICAgLy8vPCBNYXggb2ZmbG9hZCBibG9jayBbU10KKyAgICBTUElORUxfUFJPUF9IT1NUX1BPV0VSX1NUQVRFICAgICAgICA9IDEyLCAgICAgICAvLy88IEhvc3QgTUNVIHBvd2VyIHN0YXRlIFtDXQorCisgICAgU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICAgICAgICAgPSAweDEwMDAsCisKKyAgICAvLy8gR1BJTyBDb25maWd1cmF0aW9uCisgICAgLyoqIEZvcm1hdDogYEEoQ0NVKWAKKyAgICAgKiAgVHlwZTogUmVhZC1Pbmx5IChPcHRpb25hbGx5IFJlYWQtd3JpdGUgdXNpbmcgYENNRF9QUk9QX1ZBTFVFX0lOU0VSVGApCisgICAgICoKKyAgICAgKiBBbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgICoKKyAgICAgKiAqICAgYENgOiBHUElPIE51bWJlcgorICAgICAqICogICBgQ2A6IEdQSU8gQ29uZmlndXJhdGlvbiBGbGFncworICAgICAqICogICBgVWA6IEh1bWFuLXJlYWRhYmxlIEdQSU8gbmFtZQorICAgICAqCisgICAgICogR1BJT3Mgd2hpY2ggZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVudHJ5IGFyZSBub3Qgc3VwcG9ydGVkLgorICAgICAqCisgICAgICogVGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGZvciB0aGUKKyAgICAgKiBHUElPOgorICAgICAqCisgICAgICogICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcKKyAgICAgKiAgICAgKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCisgICAgICogICAgIHxESVJ8UFVQfFBETnxUUklHR0VSfCAgUkVTRVJWRUQgfAorICAgICAqICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgKiAgICAgICAgICAgICB8Ty9EfAorICAgICAqICAgICAgICAgICAgICstLS0rCisgICAgICoKKyAgICAgKiAqICAgYERJUmA6IFBpbiBkaXJlY3Rpb24uIENsZWFyICgwKSBmb3IgaW5wdXQsIHNldCAoMSkgZm9yIG91dHB1dC4KKyAgICAgKiAqICAgYFBVUGA6IFB1bGwtdXAgZW5hYmxlZCBmbGFnLgorICAgICAqICogICBgUEROYC9gTy9EYDogRmxhZyBtZWFuaW5nIGRlcGVuZHMgb24gcGluIGRpcmVjdGlvbjoKKyAgICAgKiAgICAgKiAgIElucHV0OiBQdWxsLWRvd24gZW5hYmxlZC4KKyAgICAgKiAgICAgKiAgIE91dHB1dDogT3V0cHV0IGlzIGFuIG9wZW4tZHJhaW4uCisgICAgICogKiAgIGBUUklHR0VSYDogRW51bWVyYXRpb24gZGVzY3JpYmluZyBob3cgcGluIGNoYW5nZXMgZ2VuZXJhdGUKKyAgICAgKiAgICAgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiBjb21tYW5kcyAoVEJEKSBmcm9tIHRoZSBOQ1AgdG8gdGhlIGhvc3QuCisgICAgICogICAgICogICAwOiBGZWF0dXJlIGRpc2FibGVkIGZvciB0aGlzIHBpbgorICAgICAqICAgICAqICAgMTogVHJpZ2dlciBvbiBmYWxsaW5nIGVkZ2UKKyAgICAgKiAgICAgKiAgIDI6IFRyaWdnZXIgb24gcmlzaW5nIGVkZ2UKKyAgICAgKiAgICAgKiAgIDM6IFRyaWdnZXIgb24gbGV2ZWwgY2hhbmdlCisgICAgICogKiAgIGBSRVNFUlZFRGA6IEJpdHMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIEFsd2F5cyBjbGVhcmVkIHRvIHplcm8KKyAgICAgKiAgICAgYW5kIGlnbm9yZWQgd2hlbiByZWFkLgorICAgICAqCisgICAgICogQXMgYW4gb3B0aW9uYWwgZmVhdHVyZSwgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaW5kaXZpZHVhbCBwaW5zIG1heSBiZQorICAgICAqIG1vZGlmaWVkIHVzaW5nIHRoZSBgQ01EX1BST1BfVkFMVUVfSU5TRVJUYCBjb21tYW5kLiBPbmx5IHRoZSBHUElPCisgICAgICogbnVtYmVyIGFuZCBmbGFncyBmaWVsZHMgTVVTVCBiZSBwcmVzZW50LCB0aGUgR1BJTyBuYW1lIChpZiBwcmVzZW50KQorICAgICAqIHdvdWxkIGJlIGlnbm9yZWQuIFRoaXMgY29tbWFuZCBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUKKyAgICAgKiBjb25maWd1cmF0aW9uIG9mIEdQSU9zIHdoaWNoIGFyZSBhbHJlYWR5IGV4cG9zZWQtLS1pdCBjYW5ub3QgYmUgdXNlZAorICAgICAqIGJ5IHRoZSBob3N0IHRvIGFkZCBhZGRpdGlvbmFsIEdQSU9zLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0dQSU9fQ09ORklHICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgMCwKKworICAgIC8vLyBHUElPIFN0YXRlIEJpdG1hc2sKKyAgICAvKiogRm9ybWF0OiBgRGAKKyAgICAgKiAgVHlwZTogUmVhZC1Xcml0ZQorICAgICAqCisgICAgICogQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlIHN0YXRlIG9mIHRoZSBHUElPcy4gVGhlIGxlbmd0aCBvZgorICAgICAqIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBwcm9wZXJ0aWVzIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZgorICAgICAqIEdQSU9zLiBJZiB5b3UgaGF2ZSAxMCBHUElPcywgeW91J2QgaGF2ZSB0d28gYnl0ZXMuIEdQSU9zIGFyZSBudW1iZXJlZAorICAgICAqIGZyb20gbW9zdCBzaWduaWZpY2FudCBiaXQgdG8gbGVhc3Qgc2lnbmlmaWNhbnQgYml0LCBzbyAweDgwIGlzIEdQSU8gMCwKKyAgICAgKiAweDQwIGlzIEdQSU8gMSwgZXRjLgorICAgICAqCisgICAgICogRm9yIEdQSU9zIGNvbmZpZ3VyZWQgYXMgaW5wdXRzOgorICAgICAqCisgICAgICogKiAgIGBDTURfUFJPUF9WQVVFX0dFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgZGVzY3JpYmVzIHRoZQorICAgICAqICAgICBsb2dpYyBsZXZlbCByZWFkIGZyb20gdGhlIHBpbi4KKyAgICAgKiAqICAgYENNRF9QUk9QX1ZBTFVFX1NFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgaWdub3JlZAorICAgICAqICAgICBmb3IgdGhlc2UgcGlucy4KKyAgICAgKgorICAgICAqIEZvciBHUElPcyBjb25maWd1cmVkIGFzIG91dHB1dHM6CisgICAgICoKKyAgICAgKiAqICAgYENNRF9QUk9QX1ZBVUVfR0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBpcworICAgICAqICAgICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KKyAgICAgKiAqICAgYENNRF9QUk9QX1ZBTFVFX1NFVGA6IFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBiaXQgZGV0ZXJtaW5lcworICAgICAqICAgICB0aGUgbmV3IGxvZ2ljIGxldmVsIG9mIHRoZSBvdXRwdXQuIElmIHRoaXMgcGluIGlzIGNvbmZpZ3VyZWQgYXMgYW4KKyAgICAgKiAgICAgb3Blbi1kcmFpbiwgc2V0dGluZyB0aGUgYXNzb2NpYXRlZCBiaXQgdG8gMSB3aWxsIGNhdXNlIHRoZSBwaW4gdG8KKyAgICAgKiAgICAgZW50ZXIgYSBIaS1aIHN0YXRlLgorICAgICAqCisgICAgICogRm9yIEdQSU9zIHdoaWNoIGFyZSBub3Qgc3BlY2lmaWVkIGluIGBQUk9QX0dQSU9fQ09ORklHYDoKKyAgICAgKgorICAgICAqICogICBgQ01EX1BST1BfVkFVRV9HRVRgOiBUaGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgYml0IGlzCisgICAgICogICAgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLgorICAgICAqICogICBgQ01EX1BST1BfVkFMVUVfU0VUYDogVGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIGJpdCBNVVNUIGJlCisgICAgICogICAgIGlnbm9yZWQgYnkgdGhlIE5DUC4KKyAgICAgKgorICAgICAqIFdoZW4gd3JpdGluZywgdW5zcGVjaWZpZWQgYml0cyBhcmUgYXNzdW1lZCB0byBiZSB6ZXJvLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0dQSU9fU1RBVEUgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgMiwKKworICAgIC8vLyBHUElPIFN0YXRlIFNldC1Pbmx5IEJpdG1hc2sKKyAgICAvKiogRm9ybWF0OiBgRGAKKyAgICAgKiAgVHlwZTogV3JpdGUtT25seQorICAgICAqCisgICAgICogQWxsb3dzIGZvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBvdXRwdXQgR1BJT3MgdG8gYmUgc2V0IHdpdGhvdXQgYWZmZWN0aW5nCisgICAgICogb3RoZXIgR1BJTyBzdGF0ZXMuIENvbnRhaW5zIGEgYml0IGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBvdXRwdXQgR1BJT3MgdGhhdAorICAgICAqIHNob3VsZCBoYXZlIHRoZWlyIHN0YXRlIHNldCB0byAxLgorICAgICAqCisgICAgICogV2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZgorICAgICAqIGFueSBiaXRzIGZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiBgUFJPUF9HUElPX0NPTkZJR2AgTVVTVAorICAgICAqIGJlIGlnbm9yZWQuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfR1BJT19TVEFURV9TRVQgICAgICAgICAgPSBTUElORUxfUFJPUF9CQVNFX0VYVF9fQkVHSU4gKyAzLAorCisgICAgLy8vIEdQSU8gU3RhdGUgQ2xlYXItT25seSBCaXRtYXNrCisgICAgLyoqIEZvcm1hdDogYERgCisgICAgICogIFR5cGU6IFdyaXRlLU9ubHkKKyAgICAgKgorICAgICAqIEFsbG93cyBmb3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgb3V0cHV0IEdQSU9zIHRvIGJlIGNsZWFyZWQgd2l0aG91dCBhZmZlY3RpbmcKKyAgICAgKiBvdGhlciBHUElPIHN0YXRlcy4gQ29udGFpbnMgYSBiaXQgZmllbGQgaWRlbnRpZnlpbmcgdGhlIG91dHB1dCBHUElPcyB0aGF0CisgICAgICogc2hvdWxkIGhhdmUgdGhlaXIgc3RhdGUgY2xlYXJlZCB0byAwLgorICAgICAqCisgICAgICogV2hlbiB3cml0aW5nLCB1bnNwZWNpZmllZCBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHplcm8uIFRoZSB2YWx1ZSBvZgorICAgICAqIGFueSBiaXRzIGZvciBHUElPcyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiBgUFJPUF9HUElPX0NPTkZJR2AgTVVTVAorICAgICAqIGJlIGlnbm9yZWQuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfR1BJT19TVEFURV9DTEVBUiAgICAgICAgPSBTUElORUxfUFJPUF9CQVNFX0VYVF9fQkVHSU4gKyA0LAorCisgICAgLy8vIDMyLWJpdCByYW5kb20gbnVtYmVyIGZyb20gVFJORywgcmVhZHktdG8tdXNlLgorICAgIFNQSU5FTF9QUk9QX1RSTkdfMzIgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgNSwKKworICAgIC8vLyAxNiByYW5kb20gYnl0ZXMgZnJvbSBUUk5HLCByZWFkeS10by11c2UuCisgICAgU1BJTkVMX1BST1BfVFJOR18xMjggICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9CQVNFX0VYVF9fQkVHSU4gKyA2LAorCisgICAgLy8vIFJhdyBzYW1wbGVzIGZyb20gVFJORyBlbnRyb3B5IHNvdXJjZSByZXByZXNlbnRpbmcgMzIgYml0cyBvZiBlbnRyb3B5LgorICAgIFNQSU5FTF9QUk9QX1RSTkdfUkFXXzMyICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQkFTRV9FWFRfX0JFR0lOICsgNywKKworICAgIFNQSU5FTF9QUk9QX0JBU0VfRVhUX19FTkQgICAgICAgICAgID0gMHgxMTAwLAorCisgICAgU1BJTkVMX1BST1BfUEhZX19CRUdJTiAgICAgICAgICAgICAgPSAweDIwLAorICAgIFNQSU5FTF9QUk9QX1BIWV9FTkFCTEVEICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDAsIC8vLzwgW2JdCisgICAgU1BJTkVMX1BST1BfUEhZX0NIQU4gICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9QSFlfX0JFR0lOICsgMSwgLy8vPCBbQ10KKyAgICBTUElORUxfUFJPUF9QSFlfQ0hBTl9TVVBQT1JURUQgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9fQkVHSU4gKyAyLCAvLy88IFtBKEMpXQorICAgIFNQSU5FTF9QUk9QX1BIWV9GUkVRICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDMsIC8vLzwga0h6IFtMXQorICAgIFNQSU5FTF9QUk9QX1BIWV9DQ0FfVEhSRVNIT0xEICAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDQsIC8vLzwgZEJtIFtjXQorICAgIFNQSU5FTF9QUk9QX1BIWV9UWF9QT1dFUiAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX19CRUdJTiArIDUsIC8vLzwgW2NdCisgICAgU1BJTkVMX1BST1BfUEhZX1JTU0kgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9QSFlfX0JFR0lOICsgNiwgLy8vPCBkQm0gW2NdCisgICAgU1BJTkVMX1BST1BfUEhZX1JYX1NFTlNJVElWSVRZICAgICAgPSBTUElORUxfUFJPUF9QSFlfX0JFR0lOICsgNywgLy8vPCBkQm0gW2NdCisgICAgU1BJTkVMX1BST1BfUEhZX19FTkQgICAgICAgICAgICAgICAgPSAweDMwLAorCisgICAgU1BJTkVMX1BST1BfUEhZX0VYVF9fQkVHSU4gICAgICAgICAgPSAweDEyMDAsCisKKyAgICAvLy8gU2lnbmFsIEphbW1pbmcgRGV0ZWN0aW9uIEVuYWJsZQorICAgIC8qKiBGb3JtYXQ6IGBiYAorICAgICAqCisgICAgICogSW5kaWNhdGVzIGlmIGphbW1pbmcgZGV0ZWN0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFNldCB0byB0cnVlCisgICAgICogdG8gZW5hYmxlIGphbW1pbmcgZGV0ZWN0aW9uLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RfRU5BQkxFICAgICAgID0gU1BJTkVMX1BST1BfUEhZX0VYVF9fQkVHSU4gKyAwLAorCisgICAgLy8vIFNpZ25hbCBKYW1taW5nIERldGVjdGVkIEluZGljYXRvcgorICAgIC8qKiBGb3JtYXQ6IGBiYCAoUmVhZC1Pbmx5KQorICAgICAqCisgICAgICogU2V0IHRvIHRydWUgaWYgcmFkaW8gamFtbWluZyBpcyBkZXRlY3RlZC4gU2V0IHRvIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIFdoZW4gamFtbWluZyBkZXRlY3Rpb24gaXMgZW5hYmxlZCwgY2hhbmdlcyB0byB0aGUgdmFsdWUgb2YgdGhpcworICAgICAqIHByb3BlcnR5IGFyZSBlbWl0dGVkIGFzeW5jaHJvbm91c2x5IHZpYSBgQ01EX1BST1BfVkFMVUVfSVNgLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RFRCAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX0VYVF9fQkVHSU4gKyAxLAorCisgICAgLy8vIEphbW1pbmcgZGV0ZWN0aW9uIFJTU0kgdGhyZXNob2xkCisgICAgLyoqIEZvcm1hdDogYGNgCisgICAgICogIFVuaXRzOiBkQm0KKyAgICAgKgorICAgICAqIFRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgdGhyZXNob2xkIFJTU0kgbGV2ZWwgKG1lYXN1cmVkIGluCisgICAgICogZEJtKSBhYm92ZSB3aGljaCB0aGUgamFtbWluZyBkZXRlY3Rpb24gd2lsbCBjb25zaWRlciB0aGUKKyAgICAgKiBjaGFubmVsIGJsb2NrZWQuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfSkFNX0RFVEVDVF9SU1NJX1RIUkVTSE9MRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX0VYVF9fQkVHSU4gKyAyLAorCisgICAgLy8vIEphbW1pbmcgZGV0ZWN0aW9uIHdpbmRvdyBzaXplCisgICAgLyoqIEZvcm1hdDogYENgCisgICAgICogIFVuaXRzOiBTZWNvbmRzICgxLTYzKQorICAgICAqCisgICAgICogVGhpcyBwYXJhbWV0ZXIgZGVzY3JpYmVzIHRoZSB3aW5kb3cgcGVyaW9kIGZvciBzaWduYWwgamFtbWluZworICAgICAqIGRldGVjdGlvbi4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9KQU1fREVURUNUX1dJTkRPVyAgICAgICA9IFNQSU5FTF9QUk9QX1BIWV9FWFRfX0JFR0lOICsgMywKKworICAgIC8vLyBKYW1taW5nIGRldGVjdGlvbiBidXN5IHBlcmlvZAorICAgIC8qKiBGb3JtYXQ6IGBDYAorICAgICAqICBVbml0czogU2Vjb25kcyAoMS02MykKKyAgICAgKgorICAgICAqIFRoaXMgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgbnVtYmVyIG9mIGFnZ3JlZ2F0ZSBzZWNvbmRzIHdpdGhpbgorICAgICAqIHRoZSBkZXRlY3Rpb24gd2luZG93IHdoZXJlIHRoZSBSU1NJIG11c3QgYmUgYWJvdmUKKyAgICAgKiBgUFJPUF9KQU1fREVURUNUX1JTU0lfVEhSRVNIT0xEYCB0byB0cmlnZ2VyIGRldGVjdGlvbi4KKyAgICAgKgorICAgICAqIFRoZSBiZWhhdmlvciBvZiB0aGUgamFtbWluZyBkZXRlY3Rpb24gZmVhdHVyZSB3aGVuIGBQUk9QX0pBTV9ERVRFQ1RfQlVTWWAKKyAgICAgKiBpcyBsYXJnZXIgdGhhbiBgUFJPUF9KQU1fREVURUNUX1dJTkRPV2AgaXMgdW5kZWZpbmVkLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0pBTV9ERVRFQ1RfQlVTWSAgICAgICAgID0gU1BJTkVMX1BST1BfUEhZX0VYVF9fQkVHSU4gKyA0LAorCisgICAgLy8vIEphbW1pbmcgZGV0ZWN0aW9uIGhpc3RvcnkgYml0bWFwIChmb3IgZGVidWdnaW5nKQorICAgIC8qKiBGb3JtYXQ6IGBMTGAgKHJlYWQtb25seSkKKyAgICAgKgorICAgICAqIFRoaXMgdmFsdWUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBzdGF0ZSBvZiBqYW1taW5nIGRldGVjdGlvbgorICAgICAqIG1vZHVsZSBmb3IgbW9uaXRvcmluZy9kZWJ1Z2dpbmcgcHVycG9zZS4gSXQgcmV0dXJucyBhIDY0LWJpdCB2YWx1ZSB3aGVyZQorICAgICAqIGVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIG9uZSBzZWNvbmQgaW50ZXJ2YWwgc3RhcnRpbmcgd2l0aCBiaXQgMCBmb3IgdGhlCisgICAgICogbW9zdCByZWNlbnQgaW50ZXJ2YWwgYW5kIGJpdCA2MyBmb3IgdGhlIG9sZGVzdCBpbnRlcnZhbHMgKDYzIHNlYyBlYXJsaWVyKS4KKyAgICAgKiBUaGUgYml0IGlzIHNldCB0byAxIGlmIHRoZSBqYW1taW5nIGRldGVjdGlvbiBtb2R1bGUgb2JzZXJ2ZWQvZGV0ZWN0ZWQKKyAgICAgKiBoaWdoIHNpZ25hbCBsZXZlbCBkdXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgb25lIHNlY29uZCBpbnRlcnZhbC4KKyAgICAgKgorICAgICAqIFRoZSB2YWx1ZSBpcyByZWFkLW9ubHkgYW5kIGlzIGVuY29kZWQgYXMgdHdvIHVpbnQzMiB2YWx1ZXMgaW4KKyAgICAgKiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAoZmlyc3QgdWludDMyIGdpdmVzIHRoZSBsb3dlciBiaXRzIGNvcnJlc3BvbmRpbmcgdG8KKyAgICAgKiBtb3JlIHJlY2VudCBoaXN0b3J5KS4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9KQU1fREVURUNUX0hJU1RPUllfQklUTUFQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9QSFlfRVhUX19CRUdJTiArIDUsCisKKyAgICBTUElORUxfUFJPUF9QSFlfRVhUX19FTkQgICAgICAgICAgICA9IDB4MTMwMCwKKworICAgIFNQSU5FTF9QUk9QX01BQ19fQkVHSU4gICAgICAgICAgICAgID0gMHgzMCwKKyAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9TVEFURSAgICAgICAgICA9IFNQSU5FTF9QUk9QX01BQ19fQkVHSU4gKyAwLCAgLy8vPCBbQ10KKyAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9NQVNLICAgICAgICAgICA9IFNQSU5FTF9QUk9QX01BQ19fQkVHSU4gKyAxLCAgLy8vPCBbQShDKV0KKyAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9QRVJJT0QgICAgICAgICA9IFNQSU5FTF9QUk9QX01BQ19fQkVHSU4gKyAyLCAgLy8vPCBtcy1wZXItY2hhbm5lbCBbU10KKyAgICBTUElORUxfUFJPUF9NQUNfU0NBTl9CRUFDT04gICAgICAgICA9IFNQSU5FTF9QUk9QX01BQ19fQkVHSU4gKyAzLCAgLy8vPCBjaGFuLHJzc2ksbWFjX2RhdGEsbmV0X2RhdGEgW0NjZERdCisgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfTEFERFIgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgNCwgIC8vLzwgW0VdCisgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfU0FERFIgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgNSwgIC8vLzwgW1NdCisgICAgU1BJTkVMX1BST1BfTUFDXzE1XzRfUEFOSUQgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgNiwgIC8vLzwgW1NdCisgICAgU1BJTkVMX1BST1BfTUFDX1JBV19TVFJFQU1fRU5BQkxFRCAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgNywgIC8vLzwgW0NdCisgICAgU1BJTkVMX1BST1BfTUFDX1BST01JU0NVT1VTX01PREUgICAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgOCwgIC8vLzwgW0NdCisgICAgU1BJTkVMX1BST1BfTUFDX0VORVJHWV9TQ0FOX1JFU1VMVCAgPSBTUElORUxfUFJPUF9NQUNfX0JFR0lOICsgOSwgIC8vLzwgY2hhbixtYXhSc3NpIFtDY10KKyAgICBTUElORUxfUFJPUF9NQUNfREFUQV9QT0xMX1BFUklPRCAgICA9IFNQSU5FTF9QUk9QX01BQ19fQkVHSU4gKyAxMCwgLy8vPCBwb2xsUGVyaW9kIChpbiBtcykgW0xdCisgICAgU1BJTkVMX1BST1BfTUFDX19FTkQgICAgICAgICAgICAgICAgPSAweDQwLAorCisgICAgU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gICAgICAgICAgPSAweDEzMDAsCisgICAgLy8vIE1BQyBXaGl0ZWxpc3QKKyAgICAvKiogRm9ybWF0OiBgQSh0KEVjKSlgCisgICAgICoKKyAgICAgKiBTdHJ1Y3R1cmUgUGFyYW1ldGVyczoKKyAgICAgKgorICAgICAqICogYEVgOiBFVUk2NCBhZGRyZXNzIG9mIG5vZGUKKyAgICAgKiAqIGBjYDogT3B0aW9uYWwgZml4ZWQgUlNTSS4gMTI3IG1lYW5zIG5vdCBzZXQuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTUFDX1dISVRFTElTVCAgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfRVhUX19CRUdJTiArIDAsCisKKyAgICAvLy8gTUFDIFdoaXRlbGlzdCBFbmFibGVkIEZsYWcKKyAgICAvKiogRm9ybWF0OiBgYmAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9NQUNfV0hJVEVMSVNUX0VOQUJMRUQgICA9IFNQSU5FTF9QUk9QX01BQ19FWFRfX0JFR0lOICsgMSwKKworICAgIC8vLyBNQUMgRXh0ZW5kZWQgQWRkcmVzcworICAgIC8qKiBGb3JtYXQ6IGBFYAorICAgICAqCisgICAgICogIFNwZWNpZmllZCBieSBUaHJlYWQuIFJhbmRvbWx5LWNob3NlbiwgYnV0IG5vbi12b2xhdGlsZSBFVUktNjQuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTUFDX0VYVEVOREVEX0FERFIgICAgICAgPSBTUElORUxfUFJPUF9NQUNfRVhUX19CRUdJTiArIDIsCisKKyAgICAvLy8gTUFDIFNvdXJjZSBNYXRjaCBFbmFibGVkIEZsYWcKKyAgICAvKiogRm9ybWF0OiBgYmAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VOQUJMRUQgICA9IFNQSU5FTF9QUk9QX01BQ19FWFRfX0JFR0lOICsgMywKKworICAgIC8vLyBNQUMgU291cmNlIE1hdGNoIFNob3J0IEFkZHJlc3MgTGlzdAorICAgIC8qKiBGb3JtYXQ6IGBBKFMpYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX01BQ19TUkNfTUFUQ0hfU0hPUlRfQUREUkVTU0VTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9NQUNfRVhUX19CRUdJTiArIDQsCisKKyAgICAvLy8gTUFDIFNvdXJjZSBNYXRjaCBFeHRlbmRlZCBBZGRyZXNzIExpc3QKKyAgICAvKiogRm9ybWF0OiBgQShFKWAKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9NQUNfU1JDX01BVENIX0VYVEVOREVEX0FERFJFU1NFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gKyA1LAorCisgICAgLy8vIE1BQyBCbGFja2xpc3QKKyAgICAvKiogRm9ybWF0OiBgQSh0KEUpKWAKKyAgICAgKgorICAgICAqIFN0cnVjdHVyZSBQYXJhbWV0ZXJzOgorICAgICAqCisgICAgICogKiBgRWA6IEVVSTY0IGFkZHJlc3Mgb2Ygbm9kZQorICAgICAqLworICAgIFNQSU5FTF9QUk9QX01BQ19CTEFDS0xJU1QgICAgICAgICAgID0gU1BJTkVMX1BST1BfTUFDX0VYVF9fQkVHSU4gKyA2LAorCisgICAgLy8vIE1BQyBCbGFja2xpc3QgRW5hYmxlZCBGbGFnCisgICAgLyoqIEZvcm1hdDogYGJgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTUFDX0JMQUNLTElTVF9FTkFCTEVEICAgPSBTUElORUxfUFJPUF9NQUNfRVhUX19CRUdJTiArIDcsCisgICAgU1BJTkVMX1BST1BfTUFDX0VYVF9fRU5EICAgICAgICAgICAgPSAweDE0MDAsCisKKyAgICBTUElORUxfUFJPUF9ORVRfX0JFR0lOICAgICAgICAgICAgICA9IDB4NDAsCisgICAgU1BJTkVMX1BST1BfTkVUX1NBVkVEICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgMCwgLy8vPCBbYl0KKyAgICBTUElORUxfUFJPUF9ORVRfSUZfVVAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyAxLCAvLy88IFtiXQorICAgIFNQSU5FTF9QUk9QX05FVF9TVEFDS19VUCAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDIsIC8vLzwgW2JdCisgICAgU1BJTkVMX1BST1BfTkVUX1JPTEUgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgMywgLy8vPCBbQ10KKyAgICBTUElORUxfUFJPUF9ORVRfTkVUV09SS19OQU1FICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyA0LCAvLy88IFtVXQorICAgIFNQSU5FTF9QUk9QX05FVF9YUEFOSUQgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDUsIC8vLzwgW0RdCisgICAgU1BJTkVMX1BST1BfTkVUX01BU1RFUl9LRVkgICAgICAgICAgPSBTUElORUxfUFJPUF9ORVRfX0JFR0lOICsgNiwgLy8vPCBbRF0KKyAgICBTUElORUxfUFJPUF9ORVRfS0VZX1NFUVVFTkNFX0NPVU5URVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyA3LCAvLy88IFtMXQorICAgIFNQSU5FTF9QUk9QX05FVF9QQVJUSVRJT05fSUQgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDgsIC8vLzwgW0xdCisKKyAgICAvLy8gUmVxdWlyZSBKb2luIEV4aXN0aW5nCisgICAgLyoqIEZvcm1hdDogYGJgCisgICAgICogIERlZmF1bHQgVmFsdWU6IGBmYWxzZWAKKyAgICAgKgorICAgICAqIFRoaXMgZmxhZyBpcyB0eXBpY2FsbHkgdXNlZCBmb3Igbm9kZXMgdGhhdCBhcmUgYXNzb2NpYXRpbmcgd2l0aCBhbgorICAgICAqIGV4aXN0aW5nIG5ldHdvcmsgZm9yIHRoZSBmaXJzdCB0aW1lLiBJZiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAgYmVmb3JlCisgICAgICogYFBST1BfTkVUX1NUQUNLX1VQYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUKKyAgICAgKiBjcmVhdGlvbiBvZiBhIG5ldyBwYXJ0aXRpb24gYXQgYXNzb2NpYXRpb24gaXMgcHJldmVudGVkLiBJZiB0aGUgbm9kZQorICAgICAqIGNhbm5vdCBhc3NvY2lhdGUgd2l0aCBhbiBleGlzdGluZyBwYXJ0aXRpb24sIGBQUk9QX0xBU1RfU1RBVFVTYCB3aWxsCisgICAgICogZW1pdCBhIHN0YXR1cyB0aGF0IGluZGljYXRlcyB3aHkgdGhlIGFzc29jaWF0aW9uIGZhaWxlZCBhbmQKKyAgICAgKiBgUFJPUF9ORVRfU1RBQ0tfVVBgIHdpbGwgYXV0b21hdGljYWxseSByZXZlcnQgdG8gYGZhbHNlYC4KKyAgICAgKgorICAgICAqIE9uY2UgYXNzb2NpYXRlZCB3aXRoIGFuIGV4aXN0aW5nIHBhcnRpdGlvbiwgdGhpcyBmbGFnIGF1dG9tYXRpY2FsbHkKKyAgICAgKiByZXZlcnRzIHRvIGBmYWxzZWAuCisgICAgICoKKyAgICAgKiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBwcm9wZXJ0eSBiZWluZyBzZXQgdG8gYHRydWVgIHdoZW4KKyAgICAgKiBgUFJPUF9ORVRfU1RBQ0tfVVBgIGlzIGFscmVhZHkgc2V0IHRvIGB0cnVlYCBpcyB1bmRlZmluZWQuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfTkVUX1JFUVVJUkVfSk9JTl9FWElTVElORworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDksCisKKyAgICBTUElORUxfUFJPUF9ORVRfS0VZX1NXSVRDSF9HVUFSRFRJTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX05FVF9fQkVHSU4gKyAxMCwgLy8vPCBbTF0KKworICAgIFNQSU5FTF9QUk9QX05FVF9QU0tDICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfTkVUX19CRUdJTiArIDExLCAvLy88IFtEXQorCisgICAgU1BJTkVMX1BST1BfTkVUX19FTkQgICAgICAgICAgICAgICAgPSAweDUwLAorCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiAgICAgICAgICAgPSAweDUwLAorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfQUREUiAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDAsIC8vLzwgWzZdCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1BBUkVOVCAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfX0JFR0lOICsgMSwgLy8vPCBMQUREUiwgU0FERFIgW0VTXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9UQUJMRSAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDIsIC8vLzwgYXJyYXkoRVVJNjQscmxvYzE2LHRpbWVvdXQsYWdlLG5ldERhdGFWZXIsaW5McWksYXZlUlNTLG1vZGUpIFtBKHQoRVNMTENDY0MpKV0KKyAgICBTUElORUxfUFJPUF9USFJFQURfTEVBREVSX1JJRCAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAzLCAvLy88IFtDXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9MRUFERVJfV0VJR0hUICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDQsIC8vLzwgW0NdCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xPQ0FMX0xFQURFUl9XRUlHSFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyA1LCAvLy88IFtDXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0RBVEEgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDYsIC8vLzwgW0RdCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX05FVFdPUktfREFUQV9WRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfX0JFR0lOICsgNywgLy8vPCBbU10KKyAgICBTUElORUxfUFJPUF9USFJFQURfU1RBQkxFX05FVFdPUktfREFUQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDgsIC8vLzwgW0RdCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1NUQUJMRV9ORVRXT1JLX0RBVEFfVkVSU0lPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDksICAvLy88IFtTXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PTl9NRVNIX05FVFMgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDEwLCAvLy88IGFycmF5KGlwdjZwcmVmaXgscHJlZml4bGVuLHN0YWJsZSxmbGFncyxpc0xvY2FsKSBbQSh0KDZDYkNiKSldCisKKyAgICAvLy8gT2ZmLW1lc2ggcm91dGVzCisgICAgLyoqIEZvcm1hdDogW0EodCg2Q2JDYmIpKV0KKyAgICAgKgorICAgICAqIERhdGEgcGVyIGl0ZW0gaXM6CisgICAgICoKKyAgICAgKiAgYDZgOiBSb3V0ZSBQcmVmaXgKKyAgICAgKiAgYENgOiBQcmVmaXggbGVuZ3RoIGluIGJpdHMKKyAgICAgKiAgYGJgOiBTdGFibGUgZmxhZworICAgICAqICBgQ2A6IFJvdXRlIHByZWZlcmVuY2UgZmxhZ3MKKyAgICAgKiAgYGJgOiAiSXMgZGVmaW5lZCBsb2NhbGx5IiBmbGFnLiBTZXQgaWYgdGhpcyByb3V0ZSBpbmZvIHdhcyBsb2NhbGx5CisgICAgICogICAgICAgZGVmaW5lZCBhcyBwYXJ0IG9mIGxvY2FsIG5ldHdvcmsgZGF0YS4gQXNzdW1lZCB0byBiZSB0cnVlIGZvciBzZXQsCisgICAgICogICAgICAgaW5zZXJ0IGFuZCByZXBsYWNlLiBDbGVhciBpZiB0aGUgcm91dGUgaXMgcGFydCBvZiBwYXJ0aXRpb24ncyBuZXR3b3JrCisgICAgICogICAgICAgZGF0YS4KKyAgICAgKiAgYGJgOiAiTmV4dCBob3AgaXMgdGhpcyBkZXZpY2UiIGZsYWcuIFNldCBpZiB0aGUgbmV4dCBob3AgZm9yIHRoZQorICAgICAqICAgICAgIHJvdXRlIGlzIHRoaXMgZGV2aWNlIGl0c2VsZiAoaS5lLiwgcm91dGUgd2FzIGFkZGVkIGJ5IHRoaXMgZGV2aWNlKQorICAgICAqICAgICAgIFRoaXMgdmFsdWUgaXMgaWdub3JlZCB3aGVuIGFkZGluZyBhbiBleHRlcm5hbCByb3V0ZS4gRm9yIGFueSBhZGRlZAorICAgICAqICAgICAgIHJvdXRlIHRoZSBuZXh0IGhvcCBpcyB0aGlzIGRldmljZS4KKyAgICAgKgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9PRkZfTUVTSF9ST1VURVMgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDExLAorCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0FTU0lTVElOR19QT1JUUyAgPSBTUElORUxfUFJPUF9USFJFQURfX0JFR0lOICsgMTIsIC8vLzwgYXJyYXkocG9ydG4pIFtBKFMpXQorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9BTExPV19MT0NBTF9ORVRfREFUQV9DSEFOR0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9fQkVHSU4gKyAxMywgLy8vPCBbYl0KKworICAgIC8vLyBUaHJlYWQgTW9kZQorICAgIC8qKiBGb3JtYXQ6IGBDYAorICAgICAqCisgICAgICogIFRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBtb2RlCisgICAgICogIFRMViBmb3IgdGhpcyBub2RlLiBUaGUgbWVhbmluZyBvZiB0aGUgYml0cyBpbiB0aGlzCisgICAgICogIGJpdGZpZWxkIGFyZSBkZWZpbmVkIGJ5IHNlY3Rpb24gNC41LjIgb2YgdGhlIFRocmVhZAorICAgICAqICBzcGVjaWZpY2F0aW9uLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9NT0RFICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX19CRUdJTiArIDE0LAorICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9fRU5EICAgICAgICAgICAgID0gMHg2MCwKKworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICAgICAgID0gMHgxNTAwLAorCisgICAgLy8vIFRocmVhZCBDaGlsZCBUaW1lb3V0CisgICAgLyoqIEZvcm1hdDogYExgCisgICAgICoKKyAgICAgKiAgVXNlZCB3aGVuIG9wZXJhdGluZyBpbiB0aGUgQ2hpbGQgcm9sZS4KKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfQ0hJTERfVElNRU9VVCAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMCwKKworICAgIC8vLyBUaHJlYWQgUkxPQzE2CisgICAgLyoqIEZvcm1hdDogYFNgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JMT0MxNiAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDEsCisKKyAgICAvLy8gVGhyZWFkIFJvdXRlciBVcGdyYWRlIFRocmVzaG9sZAorICAgIC8qKiBGb3JtYXQ6IGBDYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ST1VURVJfVVBHUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMiwKKworICAgIC8vLyBUaHJlYWQgQ29udGV4dCBSZXVzZSBEZWxheQorICAgIC8qKiBGb3JtYXQ6IGBMYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DT05URVhUX1JFVVNFX0RFTEFZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDMsCisKKyAgICAvLy8gVGhyZWFkIE5ldHdvcmsgSUQgVGltZW91dAorICAgIC8qKiBGb3JtYXQ6IGBDYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ORVRXT1JLX0lEX1RJTUVPVVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgNCwKKworICAgIC8vLyBMaXN0IG9mIGFjdGl2ZSB0aHJlYWQgcm91dGVyIGlkcworICAgIC8qKiBGb3JtYXQ6IGBBKEMpYAorICAgICAqCisgICAgICogTm90ZSB0aGF0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBub3Qgc3VwcG9ydCBDTURfR0VUX1ZBTFVFCisgICAgICogcm91dGVyaWRzLCBidXQgbWF5IHN1cHBvcnQgQ01EX1JFTU9WRV9WQUxVRSB3aGVuIHRoZSBub2RlIGlzCisgICAgICogYSBsZWFkZXIuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0FDVElWRV9ST1VURVJfSURTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDUsCisKKyAgICAvLy8gRm9yd2FyZCBJUHY2IHBhY2tldHMgdGhhdCB1c2UgUkxPQzE2IGFkZHJlc3NlcyB0byBIT1NULgorICAgIC8qKiBGb3JtYXQ6IGBiYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9STE9DMTZfREVCVUdfUEFTU1RIUlUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgNiwKKworICAgIC8vLyBUaGlzIHByb3BlcnR5IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYFJvdXRlciBSb2xlYCBpcyBlbmFibGVkLgorICAgIC8qKiBGb3JtYXQgYGJgCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1JPVVRFUl9ST0xFX0VOQUJMRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgNywKKworICAgIC8vLyBUaHJlYWQgUm91dGVyIERvd25ncmFkZSBUaHJlc2hvbGQKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgOCwKKworICAgIC8vLyBUaHJlYWQgUm91dGVyIFNlbGVjdGlvbiBKaXR0ZXIKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfUk9VVEVSX1NFTEVDVElPTl9KSVRURVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgOSwKKworICAgIC8vLyBUaHJlYWQgUHJlZmVycmVkIFJvdXRlciBJZAorICAgIC8qKiBGb3JtYXQ6IGBDYCAtIFdyaXRlIG9ubHkKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfUFJFRkVSUkVEX1JPVVRFUl9JRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxMCwKKworICAgIC8vLyBUaHJlYWQgTmVpZ2hib3IgVGFibGUKKyAgICAvKiogRm9ybWF0OiBgQSh0KEVTTENjQ2JMTCkpYAorICAgICAqICBldWk2NCwgcmxvYzE2LCBhZ2UsIGluTHFpICxhdmVSU1MsIG1vZGUsIGlzQ2hpbGQuIGxpbmtGcmFtZUNvdW50ZXIsIG1sZUNvdW50ZXIKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfTkVJR0hCT1JfVEFCTEUgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTEsCisKKyAgICAvLy8gVGhyZWFkIE1heCBDaGlsZCBDb3VudAorICAgIC8qKiBGb3JtYXQ6IGBDYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DSElMRF9DT1VOVF9NQVggID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxMiwKKworICAgIC8vLyBMZWFkZXIgbmV0d29yayBkYXRhCisgICAgLyoqIEZvcm1hdDogYERgIC0gUmVhZCBvbmx5CisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0xFQURFUl9ORVRXT1JLX0RBVEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTMsCisKKyAgICAvLy8gU3RhYmxlIGxlYWRlciBuZXR3b3JrIGRhdGEKKyAgICAvKiogRm9ybWF0OiBgRGAgLSBSZWFkIG9ubHkKKyAgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfU1RBQkxFX0xFQURFUl9ORVRXT1JLX0RBVEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTQsCisKKyAgICAvLy8gVGhyZWFkIGpvaW5lciBkYXRhCisgICAgLyoqIEZvcm1hdCBgQShUKFVMRSkpYAorICAgICogIFBTS2QsIGpvaW5lciB0aW1lb3V0LCBldWk2NCAob3B0aW9uYWwpCisgICAgKi8KKyAgICBTUElORUxfUFJPUF9USFJFQURfSk9JTkVSUyAgICAgICAgICA9IFNQSU5FTF9QUk9QX1RIUkVBRF9FWFRfX0JFR0lOICsgMTUsCisKKyAgICAvLy8gVGhyZWFkIGNvbW1pc3Npb25lciBlbmFibGUKKyAgICAvKiogRm9ybWF0IGBiYAorICAgICAqCisgICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9DT01NSVNTSU9ORVJfRU5BQkxFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxNiwKKworICAgIC8vLyBUaHJlYWQgVE1GIHByb3h5IGVuYWJsZQorICAgIC8qKiBGb3JtYXQgYGJgCisgICAgICoKKyAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1RNRl9QUk9YWV9FTkFCTEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDE3LAorCisgICAgLy8vIFRocmVhZCBUTUYgcHJveHkgc3RyZWFtCisgICAgLyoqIEZvcm1hdCBgZFNTYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9UTUZfUFJPWFlfU1RSRUFNID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxOCwKKworICAgIC8vLyBUaHJlYWQgImpvaW5lciIgZmxhZyB1c2VkIGR1cmluZyBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24KKyAgICAvKiogRm9ybWF0IGBiYAorICAgICAqCisgICAgICogVGhpcyBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBKb2luZXIgRmxhZyB2YWx1ZSBpbiB0aGUgRGlzY292ZXJ5IFJlcXVlc3QgVExWLgorICAgICAqCisgICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9KT0lORVJfRkxBRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fQkVHSU4gKyAxOSwKKworICAgIC8vLyBFbmFibGUgRVVJNjQgZmlsdGVyaW5nIGZvciBkaXNjb3Zlcnkgc2NhbiBvcGVyYXRpb24uCisgICAgLyoqIEZvcm1hdCBgYmAKKyAgICAgKgorICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYAorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1RIUkVBRF9ESVNDT1ZFUllfU0NBTl9FTkFCTEVfRklMVEVSSU5HCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDIwLAorCisgICAgLy8vIFBBTklEIHVzZWQgZm9yIERpc2NvdmVyeSBzY2FuIG9wZXJhdGlvbiAodXNlZCBmb3IgUEFOSUQgZmlsdGVyaW5nKS4KKyAgICAvKiogRm9ybWF0OiBgU2AKKyAgICAgKgorICAgICAqIERlZmF1bHQgdmFsdWUgaXMgMHhmZmZmIChCcm9hZGNhc3QgUEFOKSB0byBkaXNhYmxlIFBBTklEIGZpbHRlcmluZworICAgICAqCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0RJU0NPVkVSWV9TQ0FOX1BBTklECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDIxLAorCisgICAgLy8vIFRocmVhZCAob3V0IG9mIGJhbmQpIHN0ZWVyaW5nIGRhdGEgZm9yIE1MRSBEaXNjb3ZlcnkgUmVzcG9uc2UuCisgICAgLyoqIEZvcm1hdCBgRWAgLSBXcml0ZSBvbmx5CisgICAgICoKKyAgICAgKiBSZXF1aXJlZCBjYXBhYmlsaXR5OiBTUElORUxfQ0FQX09PQl9TVEVFUklOR19EQVRBLgorICAgICAqCisgICAgICogV3JpdGluZyB0byB0aGlzIHByb3BlcnR5IGFsbG93cyB0byBzZXQvdXBkYXRlIHRoZSB0aGUgTUxFIERpc2NvdmVyeSBSZXNwb25zZSBzdGVlcmluZyBkYXRhIG91dCBvZiBiYW5kLgorICAgICAqCisgICAgICogIC0gQWxsIHplcm9zIHRvIGNsZWFyIHRoZSBzdGVlcmluZyBkYXRhIChpbmRpY2F0aW5nIHRoYXQgdGhlcmUgaXMgbm8gc3RlZXJpbmcgZGF0YSkuCisgICAgICogIC0gQWxsIDB4RkZzIHRvIHNldCBzdGVlcmluZyBkYXRhL2Jsb29tIGZpbHRlciB0byBhY2NlcHQvYWxsb3cgYWxsLgorICAgICAqICAtIEEgc3BlY2lmaWMgRVVJNjQgd2hpY2ggaXMgdGhlbiBhZGRlZCB0byBjdXJyZW50IHN0ZWVyaW5nIGRhdGEvYmxvb20gZmlsdGVyLgorICAgICAqCisgICAgICovCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX1NURUVSSU5HX0RBVEEgICAgPSBTUElORUxfUFJPUF9USFJFQURfRVhUX19CRUdJTiArIDIyLAorCisgICAgU1BJTkVMX1BST1BfVEhSRUFEX0VYVF9fRU5EICAgICAgICAgPSAweDE2MDAsCisKKyAgICBTUElORUxfUFJPUF9JUFY2X19CRUdJTiAgICAgICAgICAgICA9IDB4NjAsCisgICAgU1BJTkVMX1BST1BfSVBWNl9MTF9BRERSICAgICAgICAgICAgPSBTUElORUxfUFJPUF9JUFY2X19CRUdJTiArIDAsIC8vLzwgWzZdCisgICAgU1BJTkVMX1BST1BfSVBWNl9NTF9BRERSICAgICAgICAgICAgPSBTUElORUxfUFJPUF9JUFY2X19CRUdJTiArIDEsIC8vLzwgWzZDXQorICAgIFNQSU5FTF9QUk9QX0lQVjZfTUxfUFJFRklYICAgICAgICAgID0gU1BJTkVMX1BST1BfSVBWNl9fQkVHSU4gKyAyLCAvLy88IFs2Q10KKyAgICBTUElORUxfUFJPUF9JUFY2X0FERFJFU1NfVEFCTEUgICAgICA9IFNQSU5FTF9QUk9QX0lQVjZfX0JFR0lOICsgMywgLy8vPCBhcnJheShpcHY2YWRkcixwcmVmaXhsZW4sdmFsaWQscHJlZmVycmVkLGZsYWdzKSBbQSh0KDZDTExDKSldCisgICAgU1BJTkVMX1BST1BfSVBWNl9ST1VURV9UQUJMRSAgICAgICAgPSBTUElORUxfUFJPUF9JUFY2X19CRUdJTiArIDQsIC8vLzwgYXJyYXkoaXB2NnByZWZpeCxwcmVmaXhsZW4saWZhY2UsZmxhZ3MpIFtBKHQoNkNDQykpXQorCisgICAgLy8vIElQdjYgSUNNUCBQaW5nIE9mZmxvYWQKKyAgICAvKiogRm9ybWF0OiBgYmAKKyAgICAgKgorICAgICAqIEFsbG93IHRoZSBOQ1AgdG8gZGlyZWN0bHkgcmVzcG9uZCB0byBJQ01QIHBpbmcgcmVxdWVzdHMuIElmIHRoaXMgaXMKKyAgICAgKiB0dXJuZWQgb24sIHBpbmcgcmVxdWVzdCBJQ01QIHBhY2tldHMgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LgorICAgICAqCisgICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX0lQVjZfSUNNUF9QSU5HX09GRkxPQUQgID0gU1BJTkVMX1BST1BfSVBWNl9fQkVHSU4gKyA1LCAvLy88IFtiXQorCisgICAgU1BJTkVMX1BST1BfSVBWNl9fRU5EICAgICAgICAgICAgICAgPSAweDcwLAorCisgICAgU1BJTkVMX1BST1BfU1RSRUFNX19CRUdJTiAgICAgICAgICAgPSAweDcwLAorICAgIFNQSU5FTF9QUk9QX1NUUkVBTV9ERUJVRyAgICAgICAgICAgID0gU1BJTkVMX1BST1BfU1RSRUFNX19CRUdJTiArIDAsIC8vLzwgW1VdCisgICAgU1BJTkVMX1BST1BfU1RSRUFNX1JBVyAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9TVFJFQU1fX0JFR0lOICsgMSwgLy8vPCBbZERdCisgICAgU1BJTkVMX1BST1BfU1RSRUFNX05FVCAgICAgICAgICAgICAgPSBTUElORUxfUFJPUF9TVFJFQU1fX0JFR0lOICsgMiwgLy8vPCBbZERdCisgICAgU1BJTkVMX1BST1BfU1RSRUFNX05FVF9JTlNFQ1VSRSAgICAgPSBTUElORUxfUFJPUF9TVFJFQU1fX0JFR0lOICsgMywgLy8vPCBbZERdCisgICAgU1BJTkVMX1BST1BfU1RSRUFNX19FTkQgICAgICAgICAgICAgPSAweDgwLAorCisgICAgLy8vIFVBUlQgQml0cmF0ZQorICAgIC8qKiBGb3JtYXQ6IGBMYAorICAgICAqCisgICAgICogIElmIHRoZSBOQ1AgaXMgdXNpbmcgYSBVQVJUIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QsCisgICAgICogIHRoaXMgcHJvcGVydHkgYWxsb3dzIHRoZSBob3N0IHRvIGNoYW5nZSB0aGUgYml0cmF0ZQorICAgICAqICBvZiB0aGUgc2VyaWFsIGNvbm5lY3Rpb24uIFRoZSB2YWx1ZSBlbmNvZGluZyBpcyBgTGAsCisgICAgICogIHdoaWNoIGlzIGEgbGl0dGxlLWVuZGlhbiAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAgICAgKiAgVGhlIGhvc3Qgc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCBhbGwgcG9zc2libGUgbnVtZXJpYyB2YWx1ZXMKKyAgICAgKiAgYXJlIHN1cHBvcnRlZC4KKyAgICAgKgorICAgICAqICBJZiBpbXBsZW1lbnRlZCBieSB0aGUgTkNQLCB0aGlzIHByb3BlcnR5IHNob3VsZCBiZSBwZXJzaXN0ZW50CisgICAgICogIGFjcm9zcyBzb2Z0d2FyZSByZXNldHMgYW5kIGZvcmdvdHRlbiB1cG9uIGhhcmR3YXJlIHJlc2V0cy4KKyAgICAgKgorICAgICAqICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgaW1wbGVtZW50ZWQgd2hlbiBhIFVBUlQgaXMgYmVpbmcKKyAgICAgKiAgdXNlZCBmb3IgU3BpbmVsLiBUaGlzIHByb3BlcnR5IGlzIG9wdGlvbmFsLgorICAgICAqCisgICAgICogIFdoZW4gY2hhbmdpbmcgdGhlIGJpdHJhdGUsIGFsbCBmcmFtZXMgd2lsbCBiZSByZWNlaXZlZAorICAgICAqICBhdCB0aGUgcHJldmlvdXMgYml0cmF0ZSB1bnRpbCB0aGUgcmVzcG9uc2UgZnJhbWUgdG8gdGhpcyBjb21tYW5kCisgICAgICogIGlzIHJlY2VpdmVkLiBPbmNlIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBmcmFtZSBpcyByZWNlaXZlZCBieQorICAgICAqICB0aGUgaG9zdCwgYWxsIGZ1cnRoZXIgZnJhbWVzIHdpbGwgYmUgdHJhbnNtaXR0ZWQgYXQgdGhlIG5ldworICAgICAqICBiaXRyYXRlLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1VBUlRfQklUUkFURSAgICAgICAgICAgID0gMHgxMDAsCisKKyAgICAvLy8gVUFSVCBTb2Z0d2FyZSBGbG93IENvbnRyb2wKKyAgICAvKiogRm9ybWF0OiBgYmAKKyAgICAgKgorICAgICAqICBJZiB0aGUgTkNQIGlzIHVzaW5nIGEgVUFSVCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LAorICAgICAqICB0aGlzIHByb3BlcnR5IGFsbG93cyB0aGUgaG9zdCB0byBkZXRlcm1pbmUgaWYgc29mdHdhcmUgZmxvdworICAgICAqICBjb250cm9sIChYT04vWE9GRiBzdHlsZSkgc2hvdWxkIGJlIHVzZWQgYW5kIChvcHRpb25hbGx5KSB0bworICAgICAqICB0dXJuIGl0IG9uIG9yIG9mZi4KKyAgICAgKgorICAgICAqICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgaW1wbGVtZW50ZWQgd2hlbiBhIFVBUlQgaXMgYmVpbmcKKyAgICAgKiAgdXNlZCBmb3IgU3BpbmVsLiBUaGlzIHByb3BlcnR5IGlzIG9wdGlvbmFsLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX1VBUlRfWE9OX1hPRkYgICAgICAgICAgID0gMHgxMDEsCisKKyAgICBTUElORUxfUFJPUF8xNV80X1BJQl9fQkVHSU4gICAgICAgICA9IDEwMjQsCisgICAgLy8gRm9yIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIDgwMi4xNS40IFBJRC4KKyAgICAvLyBJbmRpdmlkdWFsIHJlZ2lzdGVycyBhcmUgZmV0Y2hlZCB1c2luZworICAgIC8vIGBTUElORUxfUFJPUF8xNV80X1BJQl9fQkVHSU4rW1BJQl9JREVOVElGSUVSXWAKKyAgICAvLyBPbmx5IHN1cHBvcnRlZCBpZiBTUElORUxfQ0FQXzE1XzRfUElCIGlzIHNldC4KKyAgICAvLworICAgIC8vIEZvciBicmV2aXR5LCB0aGUgZW50aXJlIDgwMi4xNS40IFBJQiBzcGFjZSBpcworICAgIC8vIG5vdCBkZWZpbmVkIGhlcmUsIGJ1dCBhIGZldyBjaG9pY2UgYXR0cmlidXRlcworICAgIC8vIGFyZSBkZWZpbmVkIGZvciBpbGx1c3RyYXRpb24gYW5kIGNvbnZlbmllbmNlLgorICAgIFNQSU5FTF9QUk9QXzE1XzRfUElCX1BIWV9DSEFOTkVMU19TVVBQT1JURUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QXzE1XzRfUElCX19CRUdJTiArIDB4MDEsIC8vLzwgW0EoTCldCisgICAgU1BJTkVMX1BST1BfMTVfNF9QSUJfTUFDX1BST01JU0NVT1VTX01PREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QXzE1XzRfUElCX19CRUdJTiArIDB4NTEsIC8vLzwgW2JdCisgICAgU1BJTkVMX1BST1BfMTVfNF9QSUJfTUFDX1NFQ1VSSVRZX0VOQUJMRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNQSU5FTF9QUk9QXzE1XzRfUElCX19CRUdJTiArIDB4NWQsIC8vLzwgW2JdCisgICAgU1BJTkVMX1BST1BfMTVfNF9QSUJfX0VORCAgICAgICAgICAgPSAxMjgwLAorCisgICAgU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gICAgICAgICAgICAgPSAxMjgwLAorCisgICAgLy8vIENvdW50ZXIgcmVzZXQgYmVoYXZpb3IKKyAgICAvKiogRm9ybWF0OiBgQ2AKKyAgICAgKiAgV3JpdGluZyBhICcxJyB0byB0aGlzIHByb3BlcnR5IHdpbGwgcmVzZXQKKyAgICAgKiAgYWxsIG9mIHRoZSBjb3VudGVycyB0byB6ZXJvLiAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUkVTRVQgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAwLAorCisgICAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9UT1RBTCAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgd2l0aCBhY2sgcmVxdWVzdC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9BQ0tfUkVRICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMiwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgdGhhdCB3ZXJlIGFja2VkLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0FDS0VEICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyB3aXRob3V0IGFjayByZXF1ZXN0LgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX05PX0FDS19SRVEgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyA0LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgZGF0YS4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9EQVRBICAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgNSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGRhdGEgcG9sbC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9EQVRBX1BPTEwgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgNiwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGJlYWNvbi4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX1BLVF9CRUFDT04gICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgNywKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGJlYWNvbiByZXF1ZXN0LgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JFQUNPTl9SRVEgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyA4LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgb3RoZXIgdHlwZXMgb2YgZnJhbWVzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX09USEVSICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyA5LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb24gdGltZXMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9QS1RfUkVUUlkgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEwLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgQ0NBIGZhaWx1cmUgdGltZXMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9FUlJfQ0NBICAgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgdW5pY2FzdCBwYWNrZXRzIHRyYW5zbWl0dGVkLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX1VOSUNBU1QgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMiwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIGJyb2FkY2FzdCBwYWNrZXRzIHRyYW5zbWl0dGVkLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfUEtUX0JST0FEQ0FTVCAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMywKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIGZyYW1lIHRyYW5zbWlzc2lvbiBmYWlsdXJlcyBkdWUgdG8gYWJvcnQgZXJyb3IuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9FUlJfQUJPUlQgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDE0LAorCisgICAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9UT1RBTCAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTAwLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZGF0YS4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9EQVRBICAgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTAxLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZGF0YSBwb2xsLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0RBVEFfUE9MTCAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDIsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBiZWFjb24uCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfQkVBQ09OICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEwMywKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJlYWNvbiByZXF1ZXN0LgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0JFQUNPTl9SRVEgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDQsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBvdGhlciB0eXBlcyBvZiBmcmFtZXMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfT1RIRVIgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDEwNSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgZmlsdGVyZWQgYnkgd2hpdGVsaXN0LgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0ZJTFRfV0wgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDYsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIGZpbHRlcmVkIGJ5IGRlc3RpbmF0aW9uIGNoZWNrLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfUEtUX0ZJTFRfREEgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDcsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHRoYXQgYXJlIGVtcHR5LgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX0VNUFRZICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMDgsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIGZyb20gYW4gdW5rbm93biBuZWlnaGJvci4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9VS1dOX05CUiAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTA5LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB3aG9zZSBzb3VyY2UgYWRkcmVzcyBpcyBpbnZhbGlkLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfRVJSX05WTERfU0FERFIgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAxMTAsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzIHdpdGggYSBzZWN1cml0eSBlcnJvci4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX0VSUl9TRUNVUklUWSAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTExLAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB3aXRoIGEgY2hlY2tzdW0gZXJyb3IuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfQkFEX0ZDUyAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExMiwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgd2l0aCBvdGhlciBlcnJvcnMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9FUlJfT1RIRVIgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExMywKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHJlY2VpdmVkIGR1cGxpY2F0ZWQuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfRFVQICAgICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExNCwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHVuaWNhc3QgcGFja2V0cyByZWNlaXZlZC4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1JYX1BLVF9VTklDQVNUICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMTE1LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2YgYnJvYWRjYXN0IHBhY2tldHMgcmVjZWl2ZWQuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9QS1RfQlJPQURDQVNUICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDExNiwKKworICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHNlY3VyZSB0cmFuc21pdHRlZCBJUCBtZXNzYWdlcy4KKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX1RYX0lQX1NFQ19UT1RBTCAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMjAwLAorCisgICAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgaW5zZWN1cmUgdHJhbnNtaXR0ZWQgSVAgbWVzc2FnZXMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9JTlNFQ19UT1RBTCAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDIwMSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIGRyb3BwZWQgKG5vdCB0cmFuc21pdHRlZCkgSVAgbWVzc2FnZXMuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9UWF9JUF9EUk9QUEVEICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDIwMiwKKworICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHNlY3VyZSByZWNlaXZlZCBJUCBtZXNzYWdlLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfU0VDX1RPVEFMICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAyMDMsCisKKyAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBpbnNlY3VyZSByZWNlaXZlZCBJUCBtZXNzYWdlLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfSU5TRUNfVE9UQUwgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAyMDQsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBkcm9wcGVkIHJlY2VpdmVkIElQIG1lc3NhZ2VzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfSVBfRFJPUFBFRCAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAyMDUsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBzcGluZWwgZnJhbWVzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfVFhfU1BJTkVMX1RPVEFMICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDAsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBzcGluZWwgZnJhbWVzLgorICAgIC8qKiBGb3JtYXQ6IGBMYCAoUmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0NOVFJfUlhfU1BJTkVMX1RPVEFMICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDEsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiByZWNlaXZlZCBzcGluZWwgZnJhbWVzIHdpdGggZXJyb3IuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9TUElORUxfRVJSICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDMwMiwKKworICAgIC8vLyBOdW1iZXIgb2Ygb3V0IG9mIG9yZGVyIHJlY2VpdmVkIHNwaW5lbCBmcmFtZXMgKHRpZCBpbmNyZWFzZSBieSBtb3JlIHRoYW4gMSkuCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9SWF9TUElORUxfT1VUX09GX09SREVSX1RJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyAzMDMsCisKKyAgICAvLy8gVGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIFR4IElQIHBhY2tldHMKKyAgICAvKiogRm9ybWF0OiBgTGAgKFJlYWQtb25seSkgKi8KKyAgICBTUElORUxfUFJPUF9DTlRSX0lQX1RYX1NVQ0NFU1MgICAgICA9IFNQSU5FTF9QUk9QX0NOVFJfX0JFR0lOICsgMzA0LAorCisgICAgLy8vIFRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCBSeCBJUCBwYWNrZXRzCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9JUF9SWF9TVUNDRVNTICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDMwNSwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIGZhaWxlZCBUeCBJUCBwYWNrZXRzCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9JUF9UWF9GQUlMVVJFICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDMwNiwKKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIGZhaWxlZCBSeCBJUCBwYWNrZXRzCisgICAgLyoqIEZvcm1hdDogYExgIChSZWFkLW9ubHkpICovCisgICAgU1BJTkVMX1BST1BfQ05UUl9JUF9SWF9GQUlMVVJFICAgICAgPSBTUElORUxfUFJPUF9DTlRSX19CRUdJTiArIDMwNywKKworICAgIC8vLyBUaGUgbWVzc2FnZSBidWZmZXIgY291bnRlciBpbmZvCisgICAgLyoqIEZvcm1hdDogYFNTU1NTU1NTU1NTU1NTU1NgIChSZWFkLW9ubHkpCisgICAgICogICAgICBgU2AsIChUb3RhbEJ1ZmZlcnMpICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHBvb2wuCisgICAgICogICAgICBgU2AsIChGcmVlQnVmZmVycykgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGZyZWUgbWVzc2FnZSBidWZmZXJzLgorICAgICAqICAgICAgYFNgLCAoNmxvU2VuZE1lc3NhZ2VzKSAgICAgICAgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgNmxvIHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsICg2bG9TZW5kQnVmZmVycykgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIDZsbyBzZW5kIHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoNmxvUmVhc3NlbWJseU1lc3NhZ2VzKSAgVGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgNkxvV1BBTiByZWFzc2VtYmx5IHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoNmxvUmVhc3NlbWJseUJ1ZmZlcnMpICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSA2TG9XUEFOIHJlYXNzZW1ibHkgcXVldWUuCisgICAgICogICAgICBgU2AsIChJcDZNZXNzYWdlcykgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBJUHY2IHNlbmQgcXVldWUuCisgICAgICogICAgICBgU2AsIChJcDZCdWZmZXJzKSAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIElQdjYgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKE1wbE1lc3NhZ2VzKSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIE1QTCBzZW5kIHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoTXBsQnVmZmVycykgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBNUEwgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKE1sZU1lc3NhZ2VzKSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIE1MRSBzZW5kIHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoTWxlQnVmZmVycykgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBNTEUgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKEFycE1lc3NhZ2VzKSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIEFSUCBzZW5kIHF1ZXVlLgorICAgICAqICAgICAgYFNgLCAoQXJwQnVmZmVycykgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBBUlAgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKENvYXBNZXNzYWdlcykgICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIENvQVAgc2VuZCBxdWV1ZS4KKyAgICAgKiAgICAgIGBTYCwgKENvYXBCdWZmZXJzKSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgQ29BUCBzZW5kIHF1ZXVlLgorICAgICAqLworICAgIFNQSU5FTF9QUk9QX01TR19CVUZGRVJfQ09VTlRFUlMgICAgID0gU1BJTkVMX1BST1BfQ05UUl9fQkVHSU4gKyA0MDAsCisKKyAgICBTUElORUxfUFJPUF9DTlRSX19FTkQgICAgICAgICAgICAgICA9IDIwNDgsCisKKyAgICBTUElORUxfUFJPUF9ORVNUX19CRUdJTiAgICAgICAgICAgICA9IDE1Mjk2LAorICAgIFNQSU5FTF9QUk9QX05FU1RfU1RSRUFNX01GRyAgICAgICAgID0gU1BJTkVMX1BST1BfTkVTVF9fQkVHSU4gKyAwLAorCisgICAgLy8vIFRoZSBsZWdhY3kgbmV0d29yayBVTEEgcHJlZml4ICg4IGJ5dGVzKQorICAgIC8qKiBGb3JtYXQ6ICdEJyAqLworICAgIFNQSU5FTF9QUk9QX05FU1RfTEVHQUNZX1VMQV9QUkVGSVggID0gU1BJTkVMX1BST1BfTkVTVF9fQkVHSU4gKyAxLAorCisgICAgLy8vIEEgKG5ld2x5KSBqb2luZWQgbGVnYWN5IG5vZGUgKHRoaXMgaXMgc2lnbmFsZWQgZnJvbSBOQ1ApCisgICAgLyoqIEZvcm1hdDogJ0UnICovCisgICAgU1BJTkVMX1BST1BfTkVTVF9MRUdBQ1lfSk9JTkVEX05PREUgPSBTUElORUxfUFJPUF9ORVNUX19CRUdJTiArIDIsCisKKyAgICBTUElORUxfUFJPUF9ORVNUX19FTkQgICAgICAgICAgICAgICA9IDE1MzYwLAorCisgICAgU1BJTkVMX1BST1BfVkVORE9SX19CRUdJTiAgICAgICAgICAgPSAxNTM2MCwKKyAgICBTUElORUxfUFJPUF9WRU5ET1JfX0VORCAgICAgICAgICAgICA9IDE2Mzg0LAorCisgICAgU1BJTkVMX1BST1BfREVCVUdfX0JFR0lOICAgICAgICAgICAgPSAxNjM4NCwKKworICAgIC8vLyBSZWFkaW5nIHRoaXMgcHJvcGVydHkgd2lsbCBjYXVzZSBhbiBhc3NlcnQgb24gdGhlIE5DUC4KKyAgICAvLy8gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyB0aGUgYXNzZXJ0IGZ1bmN0aW9uYWxpdHkgb2YKKyAgICAvLy8gdW5kZXJseWluZyBwbGF0Zm9ybS9OQ1AuIEFzc2VydCBzaG91bGQgaWRlYWxseSBjYXVzZSB0aGUKKyAgICAvLy8gTkNQIHRvIHJlc2V0LCBidXQgaWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGEgYGZhbHNlYCBib29sZWFuCisgICAgLy8vIGlzIHJldHVybmVkIGluIHJlc3BvbnNlLgorICAgIC8qKiBGb3JtYXQ6ICdiJyAocmVhZC1vbmx5KSAqLworICAgIFNQSU5FTF9QUk9QX0RFQlVHX1RFU1RfQVNTRVJUICAgICAgID0gU1BJTkVMX1BST1BfREVCVUdfX0JFR0lOICsgMCwKKworICAgIC8vLyBUaGUgTkNQIGxvZyBsZXZlbC4KKyAgICAvKiogRm9ybWF0OiBgQ2AgKi8KKyAgICBTUElORUxfUFJPUF9ERUJVR19OQ1BfTE9HX0xFVkVMICAgICA9IFNQSU5FTF9QUk9QX0RFQlVHX19CRUdJTiArIDEsCisKKyAgICBTUElORUxfUFJPUF9ERUJVR19fRU5EICAgICAgICAgICAgICA9IDE3NDA4LAorCisgICAgU1BJTkVMX1BST1BfRVhQRVJJTUVOVEFMX19CRUdJTiAgICAgPSAyMDAwMDAwLAorICAgIFNQSU5FTF9QUk9QX0VYUEVSSU1FTlRBTF9fRU5EICAgICAgID0gMjA5NzE1MiwKK30gc3BpbmVsX3Byb3Bfa2V5X3Q7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBTUElORUxfSEVBREVSX0ZMQUcgICAgICAgICAgICAgIDB4ODAKKworI2RlZmluZSBTUElORUxfSEVBREVSX1RJRF9TSElGVCAgICAgICAgIDAKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9USURfTUFTSyAgICAgICAgICAoMTUgPDwgU1BJTkVMX0hFQURFUl9USURfU0hJRlQpCisKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9JSURfU0hJRlQgICAgICAgICA0CisjZGVmaW5lIFNQSU5FTF9IRUFERVJfSUlEX01BU0sgICAgICAgICAgKDMgPDwgU1BJTkVMX0hFQURFUl9JSURfU0hJRlQpCisKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9JSURfMCAgICAgICAgICAgICAoMCA8PCBTUElORUxfSEVBREVSX0lJRF9TSElGVCkKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9JSURfMSAgICAgICAgICAgICAoMSA8PCBTUElORUxfSEVBREVSX0lJRF9TSElGVCkKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9JSURfMiAgICAgICAgICAgICAoMiA8PCBTUElORUxfSEVBREVSX0lJRF9TSElGVCkKKyNkZWZpbmUgU1BJTkVMX0hFQURFUl9JSURfMyAgICAgICAgICAgICAoMyA8PCBTUElORUxfSEVBREVSX0lJRF9TSElGVCkKKworI2RlZmluZSBTUElORUxfSEVBREVSX0dFVF9JSUQoeCkgICAgICAgICgoKHgpICYgU1BJTkVMX0hFQURFUl9JSURfTUFTSykgPj4gU1BJTkVMX0hFQURFUl9JSURfU0hJRlQpCisjZGVmaW5lIFNQSU5FTF9IRUFERVJfR0VUX1RJRCh4KSAgICAgICAgKHNwaW5lbF90aWRfdCkoKCh4KSZTUElORUxfSEVBREVSX1RJRF9NQVNLKT4+U1BJTkVMX0hFQURFUl9USURfU0hJRlQpCisKKyNkZWZpbmUgU1BJTkVMX0dFVF9ORVhUX1RJRCh4KSAgICAgICAgICAoc3BpbmVsX3RpZF90KSgoeCk+PTB4Rj8xOih4KSsxKQorCisjZGVmaW5lIFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfVkVSU0lPTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgU1BJTkVMX0JFQUNPTl9USFJFQURfRkxBR19WRVJTSU9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweGYgPDwgU1BJTkVMX0JFQUNPTl9USFJFQURfRkxBR19WRVJTSU9OX1NISUZUKQorCisjZGVmaW5lIFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfSk9JTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisjZGVmaW5lIFNQSU5FTF9CRUFDT05fVEhSRUFEX0ZMQUdfTkFUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bQoreworICAgIFNQSU5FTF9EQVRBVFlQRV9OVUxMX0MgICAgICAgICAgICAgID0gMCwKKyAgICBTUElORUxfREFUQVRZUEVfVk9JRF9DICAgICAgICAgICAgICA9ICcuJywKKyAgICBTUElORUxfREFUQVRZUEVfQk9PTF9DICAgICAgICAgICAgICA9ICdiJywKKyAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfQyAgICAgICAgICAgICA9ICdDJywKKyAgICBTUElORUxfREFUQVRZUEVfSU5UOF9DICAgICAgICAgICAgICA9ICdjJywKKyAgICBTUElORUxfREFUQVRZUEVfVUlOVDE2X0MgICAgICAgICAgICA9ICdTJywKKyAgICBTUElORUxfREFUQVRZUEVfSU5UMTZfQyAgICAgICAgICAgICA9ICdzJywKKyAgICBTUElORUxfREFUQVRZUEVfVUlOVDMyX0MgICAgICAgICAgICA9ICdMJywKKyAgICBTUElORUxfREFUQVRZUEVfSU5UMzJfQyAgICAgICAgICAgICA9ICdsJywKKyAgICBTUElORUxfREFUQVRZUEVfVUlOVF9QQUNLRURfQyAgICAgICA9ICdpJywKKyAgICBTUElORUxfREFUQVRZUEVfSVB2NkFERFJfQyAgICAgICAgICA9ICc2JywKKyAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfQyAgICAgICAgICAgICA9ICdFJywKKyAgICBTUElORUxfREFUQVRZUEVfRVVJNDhfQyAgICAgICAgICAgICA9ICdlJywKKyAgICBTUElORUxfREFUQVRZUEVfREFUQV9XTEVOX0MgICAgICAgICA9ICdkJywKKyAgICBTUElORUxfREFUQVRZUEVfREFUQV9DICAgICAgICAgICAgICA9ICdEJywKKyAgICBTUElORUxfREFUQVRZUEVfVVRGOF9DICAgICAgICAgICAgICA9ICdVJywgLy8hPCBaZXJvLVRlcm1pbmF0ZWQgVVRGOC1FbmNvZGVkIFN0cmluZworICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfQyAgICAgICAgICAgID0gJ3QnLAorICAgIFNQSU5FTF9EQVRBVFlQRV9BUlJBWV9DICAgICAgICAgICAgID0gJ0EnLAorfTsKKwordHlwZWRlZiBjaGFyIHNwaW5lbF9kYXRhdHlwZV90OworCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9OVUxMX1MgICAgICAgICAgIiIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1ZPSURfUyAgICAgICAgICAiLiIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0JPT0xfUyAgICAgICAgICAiYiIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgICAgICAgICAiQyIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0lOVDhfUyAgICAgICAgICAiYyIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TICAgICAgICAiUyIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0lOVDE2X1MgICAgICAgICAicyIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1VJTlQzMl9TICAgICAgICAiTCIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0lOVDMyX1MgICAgICAgICAibCIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgICAiaSIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0lQdjZBRERSX1MgICAgICAiNiIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0VVSTY0X1MgICAgICAgICAiRSIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0VVSTQ4X1MgICAgICAgICAiZSIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TICAgICAiZCIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0RBVEFfUyAgICAgICAgICAiRCIKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX1VURjhfUyAgICAgICAgICAiVSIgLy8hPCBaZXJvLVRlcm1pbmF0ZWQgVVRGOC1FbmNvZGVkIFN0cmluZworCisjZGVmaW5lIFNQSU5FTF9EQVRBVFlQRV9BUlJBWV9TKHgpICAgICAgIkEoIiB4ICIpIgorI2RlZmluZSBTUElORUxfREFUQVRZUEVfU1RSVUNUX1MoeCkgICAgICJ0KCIgeCAiKSIKKworI2RlZmluZSBTUElORUxfREFUQVRZUEVfQVJSQVlfU1RSVUNUX1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0FSUkFZX1MoU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9XTEVOX1MoeCkpCisKKyNkZWZpbmUgU1BJTkVMX0RBVEFUWVBFX0NPTU1BTkRfUyAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgICAgICAvKiBoZWFkZXIgICovICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UX1BBQ0tFRF9TIC8qIGNvbW1hbmQgKi8KKworI2RlZmluZSBTUElORUxfREFUQVRZUEVfQ09NTUFORF9QUk9QX1MgIFNQSU5FTF9EQVRBVFlQRV9DT01NQU5EX1MgICAgIC8qIHByb3AgY29tbWFuZCAgKi8gICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgLyogcHJvcGVydHkgaWQgKi8KKworI2RlZmluZSBTUElORUxfREFUQVRZUEVfTUFDX1NDQU5fUkVTVUxUX1MobWFjX2Zvcm1hdF9zdHIsIG5ldF9mb3JtYXRfc3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQ4X1MgLyogQ2hhbm5lbCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfSU5UOF9TICAvKiBSU1NJICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9TVFJVQ1RfUyhtYWNfZm9ybWF0X3N0cikgLyogbWFjLWxheWVyIGRhdGEgKi8gICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1NUUlVDVF9TKG5ldF9mb3JtYXRfc3RyKSAvKiBuZXQtbGF5ZXIgZGF0YSAqLworCisjZGVmaW5lIFNQSU5FTF84MDJfMTVfNF9EQVRBVFlQRV9NQUNfU0NBTl9SRVNVTFRfVjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfRVVJNjRfUyAgLyogbGFkZHIgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VSU5UMTZfUyAvKiBzYWRkciAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlQxNl9TIC8qIHBhbmlkICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAgLyogbHFpICAgKi8KKworI2RlZmluZSBTUElORUxfTkVUX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX1VJTlRfUEFDS0VEX1MgLyogdHlwZSAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfREFUQVRZUEVfVUlOVDhfUyAvKiBmbGFncyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9VVEY4X1MgLyogbmV0d29yayBuYW1lICovICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJTkVMX0RBVEFUWVBFX0RBVEFfV0xFTl9TIC8qIHhwYW5pZCAqLworCisjZGVmaW5lIFNQSU5FTF9ORVRfREFUQVRZUEVfTUFDX1NDQU5fUkVTVUxUX1YyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElORUxfTkVUX0RBVEFUWVBFX01BQ19TQ0FOX1JFU1VMVF9WMV9TICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSU5FTF9EQVRBVFlQRV9EQVRBX1dMRU5fUyAvKiBzdGVlcmluZyBkYXRhICovCisKKworI2RlZmluZSBTUElORUxfTUFYX1VJTlRfUEFDS0VEICAgICAgICAgIDIwOTcxNTEKKworU1BJTkVMX0FQSV9FWFRFUk4gc3BpbmVsX3NzaXplX3Qgc3BpbmVsX2RhdGF0eXBlX3BhY2sodWludDhfdCAqZGF0YV9vdXQsIHNwaW5lbF9zaXplX3QgZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgLi4uKTsKK1NQSU5FTF9BUElfRVhURVJOIHNwaW5lbF9zc2l6ZV90IHNwaW5lbF9kYXRhdHlwZV92cGFjayh1aW50OF90ICpkYXRhX291dCwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYWNrX2Zvcm1hdCwgdmFfbGlzdCBhcmdzKTsKK1NQSU5FTF9BUElfRVhURVJOIHNwaW5lbF9zc2l6ZV90IHNwaW5lbF9kYXRhdHlwZV91bnBhY2soY29uc3QgdWludDhfdCAqZGF0YV9pbiwgc3BpbmVsX3NpemVfdCBkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIC4uLik7CitTUElORUxfQVBJX0VYVEVSTiBzcGluZWxfc3NpemVfdCBzcGluZWxfZGF0YXR5cGVfdnVucGFjayhjb25zdCB1aW50OF90ICpkYXRhX2luLCBzcGluZWxfc2l6ZV90IGRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFja19mb3JtYXQsIHZhX2xpc3QgYXJncyk7CisKK1NQSU5FTF9BUElfRVhURVJOIHNwaW5lbF9zc2l6ZV90IHNwaW5lbF9wYWNrZWRfdWludF9kZWNvZGUoY29uc3QgdWludDhfdCAqYnl0ZXMsIHNwaW5lbF9zaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlKTsKK1NQSU5FTF9BUElfRVhURVJOIHNwaW5lbF9zc2l6ZV90IHNwaW5lbF9wYWNrZWRfdWludF9lbmNvZGUodWludDhfdCAqYnl0ZXMsIHNwaW5lbF9zaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworU1BJTkVMX0FQSV9FWFRFUk4gc3BpbmVsX3NzaXplX3Qgc3BpbmVsX3BhY2tlZF91aW50X3NpemUodW5zaWduZWQgaW50IHZhbHVlKTsKKworU1BJTkVMX0FQSV9FWFRFUk4gY29uc3QgY2hhciAqc3BpbmVsX25leHRfcGFja2VkX2RhdGF0eXBlKGNvbnN0IGNoYXIgKnBhY2tfZm9ybWF0KTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTUElORUxfQVBJX0VYVEVSTiBjb25zdCBjaGFyICpzcGluZWxfcHJvcF9rZXlfdG9fY3N0cihzcGluZWxfcHJvcF9rZXlfdCBwcm9wX2tleSk7CisKK1NQSU5FTF9BUElfRVhURVJOIGNvbnN0IGNoYXIgKnNwaW5lbF9uZXRfcm9sZV90b19jc3RyKHVpbnQ4X3QgbmV0X3JvbGUpOworCitTUElORUxfQVBJX0VYVEVSTiBjb25zdCBjaGFyICpzcGluZWxfc3RhdHVzX3RvX2NzdHIoc3BpbmVsX3N0YXR1c190IHN0YXR1cyk7CisKK1NQSU5FTF9BUElfRVhURVJOIGNvbnN0IGNoYXIgKnNwaW5lbF9jYXBhYmlsaXR5X3RvX2NzdHIodW5zaWduZWQgaW50IGNhcGFiaWxpdHkpOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBkZWZpbmVkKFNQSU5FTF9IRUFERVJfSU5DTFVERUQpICovCmRpZmYgLS1naXQgYS9zcmMvbmNwL3NwaW5lbF9wbGF0Zm9ybS5oIGIvc3JjL25jcC9zcGluZWxfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU3Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25jcC9zcGluZWxfcGxhdGZvcm0uaApAQCAtMCwwICsxLDYxIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE3LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogICAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogICAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNQSU5FTF9QTEFURk9STV9PUEVOVEhSRUFEX0hfCisjZGVmaW5lIFNQSU5FTF9QTEFURk9STV9PUEVOVEhSRUFEX0hfCisKKy8qKgorICogVGhpcyBpcyB0aGUgcGxhdGZvcm0gaGVhZGVyIGZpbGUgdXNlZCBmb3Igc3BpbmVsIG9uCisgKiBPcGVuVGhyZWFkLgorICoKKyAqIFRvIG1ha2Ugc3BpbmVsIGNvZGUgbW9yZSBwb3J0YWJsZSwgYWxsIGhlYWRlciBmaWxlCisgKiBgI2luY2x1ZGVgcyBhcmUgZGVmaW5lZCBpbiBhIHBsYXRmb3JtIHNwZWNpZmljIGhlYWRlcgorICogZmlsZSAic3BpbmVsX3BsYXRmb3JtLmgiIHdoaWNoIGlzIHRoZW4gaW5jbHVkZWQgZnJvbQorICogInNwaW5lbC5oIi4KKyAqCisgKiBUaGlzIGZpbGUgc2hvdWxkIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBoZWFkZXIgZmlsZXMgKG9yCisgKiB0aGVpciBlcXVpdmFsZW50IG9uIHRoZSBwbGF0Zm9ybSk6CisgKgorICogICAjaW5jbHVkZSA8c3RkYXJnLmg+CisgKiAgICNpbmNsdWRlIDxzdGRib29sLmg+CisgKiAgICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAqICAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgKiAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAqICAgI2luY2x1ZGUgPHN0cmluZy5oPgorICoKKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkYm9vbC5oIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjZW5kaWYgLy8gU1BJTkVMX1BMQVRGT1JNX09QRU5USFJFQURfSF8KZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0ZTRiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODQgQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2NyaXB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIEFsd2F5cyBidWlsZCAoZS5nLiBmb3IgJ21ha2UgYWxsJykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK2lmIE9QRU5USFJFQURfRVhBTVBMRVNfUE9TSVgKK2lmIE9QRU5USFJFQURfRU5BQkxFX0NMSQorU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNjcmlwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKK2VuZGlmCitlbmRpZgorCisjIEFsd2F5cyBwcmV0dHkgKGUuZy4gZm9yICdtYWtlIHByZXR0eScpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitQUkVUVFlfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0JVSUxEX1RFU1RTCitpZiBPUEVOVEhSRUFEX0JVSUxEX0NPVkVSQUdFCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTCisjIFRoZSBidW5kbGUgc2hvdWxkIHBvc2l0aXZlbHkgYmUgcXVhbGlmaWVkIHdpdGggdGhlIGFic29sdXRlIGJ1aWxkCisjIHBhdGguIE90aGVyd2lzZSwgVlBBVEggd2lsbCBnZXQgYXV0by1wcmVmaXhlZCB0byBpdCBpZiB0aGVyZSBpcworIyBhbHJlYWR5IHN1Y2ggYSBkaXJlY3RvcnkgaW4gdGhlIG5vbi1jb2xvY2F0ZWQgc291cmNlIHRyZWUuCisKK09QRU5USFJFQURfQ09WRVJBR0VfQlVORExFICAgICAgICAgICAgID0gJHthYnNfYnVpbGRkaXJ9LyR7UEFDS0FHRX0ke05MX0NPVkVSQUdFX0JVTkRMRV9TVUZGSVh9CitPUEVOVEhSRUFEX0NPVkVSQUdFX0lORk8gICAgICAgICAgICAgICA9ICR7T1BFTlRIUkVBRF9DT1ZFUkFHRV9CVU5ETEV9LyR7UEFDS0FHRX0ke05MX0NPVkVSQUdFX0lORk9fU1VGRklYfQorCiskKE9QRU5USFJFQURfQ09WRVJBR0VfQlVORExFKToKKwkkKGNhbGwgY3JlYXRlLWRpcmVjdG9yeSkKKworJChPUEVOVEhSRUFEX0NPVkVSQUdFX0lORk8pOiBjaGVjayB8ICQoZGlyICQoT1BFTlRIUkVBRF9DT1ZFUkFHRV9JTkZPKSkKKwkkKGNhbGwgZ2VuZXJhdGUtY292ZXJhZ2UtcmVwb3J0LCR7dG9wX2J1aWxkZGlyfSkKKworY292ZXJhZ2UtbG9jYWw6ICQoT1BFTlRIUkVBRF9DT1ZFUkFHRV9JTkZPKQorCitjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtY292ZXJhZ2UKKworLlBIT05ZOiBjbGVhbi1sb2NhbC1jb3ZlcmFnZQorY2xlYW4tbG9jYWwtY292ZXJhZ2U6CisJLSQoQU1fVl9hdClybSAtcmYgJChPUEVOVEhSRUFEX0NPVkVSQUdFX0JVTkRMRSkKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9URVNUUworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3Rlc3RzL290VGVzdFJ1bm5lci9BcHAuY29uZmlnIGIvdGVzdHMvb3RUZXN0UnVubmVyL0FwcC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmYTQwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL290VGVzdFJ1bm5lci9BcHAuY29uZmlnCkBAIC0wLDAgKzEsNiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+Cis8Y29uZmlndXJhdGlvbj4KKyAgICA8c3RhcnR1cD4gCisgICAgICAgIDxzdXBwb3J0ZWRSdW50aW1lIHZlcnNpb249InY0LjAiIHNrdT0iLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjUuMiIgLz4KKyAgICA8L3N0YXJ0dXA+Cis8L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3RUZXN0UnVubmVyL0Fzc2VtYmx5SW5mby5jcyBiL3Rlc3RzL290VGVzdFJ1bm5lci9Bc3NlbWJseUluZm8uY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmMmI3YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL290VGVzdFJ1bm5lci9Bc3NlbWJseUluZm8uY3MKQEAgLTAsMCArMSw2NCBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyB1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXM7Cit1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7CisKKy8vIEdlbmVyYWwgSW5mb3JtYXRpb24gYWJvdXQgYW4gYXNzZW1ibHkgaXMgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgCisvLyBzZXQgb2YgYXR0cmlidXRlcy4gQ2hhbmdlIHRoZXNlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZSBpbmZvcm1hdGlvbgorLy8gYXNzb2NpYXRlZCB3aXRoIGFuIGFzc2VtYmx5LgorW2Fzc2VtYmx5OiBBc3NlbWJseVRpdGxlKCJvdFRlc3RSdW5uZXIiKV0KK1thc3NlbWJseTogQXNzZW1ibHlEZXNjcmlwdGlvbigiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29uZmlndXJhdGlvbigiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29tcGFueSgiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5UHJvZHVjdCgib3RUZXN0UnVubmVyIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29weXJpZ2h0KCJDb3B5cmlnaHQgwqkgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycyAyMDE2IildCitbYXNzZW1ibHk6IEFzc2VtYmx5VHJhZGVtYXJrKCIiKV0KK1thc3NlbWJseTogQXNzZW1ibHlDdWx0dXJlKCIiKV0KKworLy8gU2V0dGluZyBDb21WaXNpYmxlIHRvIGZhbHNlIG1ha2VzIHRoZSB0eXBlcyBpbiB0aGlzIGFzc2VtYmx5IG5vdCB2aXNpYmxlIAorLy8gdG8gQ09NIGNvbXBvbmVudHMuICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgYSB0eXBlIGluIHRoaXMgYXNzZW1ibHkgZnJvbSAKKy8vIENPTSwgc2V0IHRoZSBDb21WaXNpYmxlIGF0dHJpYnV0ZSB0byB0cnVlIG9uIHRoYXQgdHlwZS4KK1thc3NlbWJseTogQ29tVmlzaWJsZShmYWxzZSldCisKKy8vIFRoZSBmb2xsb3dpbmcgR1VJRCBpcyBmb3IgdGhlIElEIG9mIHRoZSB0eXBlbGliIGlmIHRoaXMgcHJvamVjdCBpcyBleHBvc2VkIHRvIENPTQorW2Fzc2VtYmx5OiBHdWlkKCJkNTU3N2U1MS1mYTMxLTQ4MDItODY2OS0xZGIzMjgwNTkzNWUiKV0KKworLy8gVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgYW4gYXNzZW1ibHkgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmb3VyIHZhbHVlczoKKy8vCisvLyAgICAgIE1ham9yIFZlcnNpb24KKy8vICAgICAgTWlub3IgVmVyc2lvbiAKKy8vICAgICAgQnVpbGQgTnVtYmVyCisvLyAgICAgIFJldmlzaW9uCisvLworLy8gWW91IGNhbiBzcGVjaWZ5IGFsbCB0aGUgdmFsdWVzIG9yIHlvdSBjYW4gZGVmYXVsdCB0aGUgQnVpbGQgYW5kIFJldmlzaW9uIE51bWJlcnMgCisvLyBieSB1c2luZyB0aGUgJyonIGFzIHNob3duIGJlbG93OgorLy8gW2Fzc2VtYmx5OiBBc3NlbWJseVZlcnNpb24oIjEuMC4qIildCitbYXNzZW1ibHk6IEFzc2VtYmx5VmVyc2lvbigiMS4wLjAuMCIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseUZpbGVWZXJzaW9uKCIxLjAuMC4wIildCmRpZmYgLS1naXQgYS90ZXN0cy9vdFRlc3RSdW5uZXIvUHJvZ3JhbS5jcyBiL3Rlc3RzL290VGVzdFJ1bm5lci9Qcm9ncmFtLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTdmZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vdFRlc3RSdW5uZXIvUHJvZ3JhbS5jcwpAQCAtMCwwICsxLDM5MiBAQAor77u/LyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uTmV0OwordXNpbmcgU3lzdGVtLlRleHQ7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIG90VGVzdFJ1bm5lcgoreworICAgIGNsYXNzIFByb2dyYW0KKyAgICB7CisgICAgICAgIHN0cnVjdCBUZXN0UmVzdWx0cworICAgICAgICB7CisgICAgICAgICAgICBwdWJsaWMgYm9vbCBQYXNzOworICAgICAgICAgICAgcHVibGljIExpc3Q8c3RyaW5nPiBPdXRwdXQ7CisgICAgICAgICAgICBwdWJsaWMgc3RyaW5nIEVycm9yOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHN0cmluZyBFc2NhcGVKc29uKHN0cmluZyBkYXRhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5SZXBsYWNlKCJcXCIsICJcXFxcIikuUmVwbGFjZSgiXCIiLCAiXFxcIiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gRXhlY3V0ZXMgYW4gZXhlIHdpdGggdGhlIGdpdmVuIGFyZ3MgYW5kIGNhcHR1cmVzIHRoZSBvdXRwdXQKKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgc3RhdGljIGFzeW5jIFRhc2s8VGVzdFJlc3VsdHM+IEV4ZWN1dGVBc3luYyhzdHJpbmcgbmFtZSwgc3RyaW5nIGFyZ3MgPSBudWxsLCBpbnQgdGltZW91dE1pbGxpc2Vjb25kcyA9IC0xLCBpbnQgaW5zdGFuY2VJbmRleCA9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBQcm9jZXNzU3RhcnRJbmZvIHN0YXJ0SW5mbyA9IG5ldyBQcm9jZXNzU3RhcnRJbmZvKCk7CisgICAgICAgICAgICBzdGFydEluZm8uV2luZG93U3R5bGUgPSBQcm9jZXNzV2luZG93U3R5bGUuSGlkZGVuOworICAgICAgICAgICAgc3RhcnRJbmZvLkNyZWF0ZU5vV2luZG93ID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0YXJ0SW5mby5Vc2VTaGVsbEV4ZWN1dGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0YXJ0SW5mby5SZWRpcmVjdFN0YW5kYXJkRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgc3RhcnRJbmZvLlJlZGlyZWN0U3RhbmRhcmRPdXRwdXQgPSB0cnVlOworICAgICAgICAgICAgc3RhcnRJbmZvLkZpbGVOYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHN0YXJ0SW5mby5Bcmd1bWVudHMgPSBhcmdzOworCisgICAgICAgICAgICBzdGFydEluZm8uRW52aXJvbm1lbnRWYXJpYWJsZXNbIk5PREVfVFlQRSJdID0gIndpbi1zaW0iOworCisgICAgICAgICAgICBpZiAoaW5zdGFuY2VJbmRleCAhPSAtMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGFydEluZm8uRW52aXJvbm1lbnRWYXJpYWJsZXNbIklOU1RBTkNFIl0gPSBpbnN0YW5jZUluZGV4LlRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRlc3RSZXN1bHRzIFJlc3VsdHMgPSBuZXcgVGVzdFJlc3VsdHMoKTsKKyAgICAgICAgICAgIFJlc3VsdHMuUGFzcyA9IGZhbHNlOworICAgICAgICAgICAgUmVzdWx0cy5PdXRwdXQgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CisgICAgICAgICAgICBSZXN1bHRzLkVycm9yID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBFcnJvcnMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CisKKyAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0LkFkZChzdHJpbmcuRm9ybWF0KCI+IHNldCBOT0RFX1RZUEU9d2luLXNpbSIpKTsKKyAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0LkFkZChzdHJpbmcuRm9ybWF0KCI+IHswfSB7MX0iLCBuYW1lLCBhcmdzKSk7CisgICAgICAgICAgICBSZXN1bHRzLk91dHB1dC5BZGQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSBwcm9jZXNzCisgICAgICAgICAgICAgICAgdXNpbmcgKFByb2Nlc3MgcHJvY2VzcyA9IFByb2Nlc3MuU3RhcnQoc3RhcnRJbmZvKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuT3V0cHV0RGF0YVJlY2VpdmVkICs9CisgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0IHNlbmRlciwgRGF0YVJlY2VpdmVkRXZlbnRBcmdzIGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5EYXRhICE9IG51bGwgJiYgZS5EYXRhLkxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2sgKFJlc3VsdHMuT3V0cHV0KSB7IFJlc3VsdHMuT3V0cHV0LkFkZChlLkRhdGEpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLkVycm9yRGF0YVJlY2VpdmVkICs9CisgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0IHNlbmRlciwgRGF0YVJlY2VpdmVkRXZlbnRBcmdzIGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5EYXRhICE9IG51bGwgJiYgZS5EYXRhLkxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2sgKFJlc3VsdHMuT3V0cHV0KSB7IEVycm9ycy5BZGQoZS5EYXRhKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLkJlZ2luRXJyb3JSZWFkTGluZSgpOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLkJlZ2luT3V0cHV0UmVhZExpbmUoKTsKKworI2lmIERFQlVHCisgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJTdGFydGluZyB7MH0gezF9IiwgbmFtZSwgYXJncyk7CisjZW5kaWYKKworICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciBwcm9jZXNzIHRvIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgIGF3YWl0IFRhc2suUnVuKAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0TWlsbGlzZWNvbmRzID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLldhaXRGb3JFeGl0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXByb2Nlc3MuV2FpdEZvckV4aXQodGltZW91dE1pbGxpc2Vjb25kcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLktpbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0cy5PdXRwdXQuQWRkKHN0cmluZy5Gb3JtYXQoIktpbGxlZCB7MH0gb24gZXhlY3V0aW9uIHRpbWVvdXQhIiwgbmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgYSBiaXQgZm9yIGFueSBvdXRwdXQgdG8gY29sbGVjdAorICAgICAgICAgICAgICAgICAgICBhd2FpdCBUYXNrLkRlbGF5KDEwMDApOworCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuQ2FuY2VsT3V0cHV0UmVhZCgpOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLkNhbmNlbEVycm9yUmVhZCgpOworCisgICAgICAgICAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0LkFkZFJhbmdlKEVycm9ycyk7CisgICAgICAgICAgICAgICAgICAgIFJlc3VsdHMuUGFzcyA9IEVycm9ycy5Db3VudCA+IDAgJiYgRXJyb3JzW0Vycm9ycy5Db3VudCAtIDFdID09ICJPSyI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFSZXN1bHRzLlBhc3MpIFJlc3VsdHMuRXJyb3IgPSBFc2NhcGVKc29uKHN0cmluZy5Kb2luKCJcXHJcXG4iLCBFcnJvcnMpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHByb2Nlc3MgaXMga2lsbGVkCisgICAgICAgICAgICAgICAgICAgIHRyeSB7IHByb2Nlc3MuS2lsbCgpOyB9IGNhdGNoIChFeGNlcHRpb24pIHsgfQorCisjaWYgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkNvbXBsZXRlZCB7MH0gezF9IiwgbmFtZSwgYXJncyk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVzdWx0cy5PdXRwdXQuQWRkKCJFbmNvdW50ZXJlZCBleGNlcHRpb246ICIgKyBlLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgIFJlc3VsdHMuT3V0cHV0LkFkZChlLlN0YWNrVHJhY2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gUmVzdWx0czsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIFZlcmJvc2VPdXRwdXQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGludCBSZXRpcmVzT25GYWlsdXJlID0gMDsKKyAgICAgICAgc3RhdGljIGJvb2wgQXBwVmV5b3JNb2RlID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBzdHJpbmcgQXBwVmV5b3JBcGlVcmwgPSBudWxsOworICAgICAgICBzdGF0aWMgc3RyaW5nIFJlc3VsdHNGb2xkZXIgPSAiUmVzdWx0c18iICsgRGF0ZVRpbWUuTm93LlRvU3RyaW5nKCJ5eXl5TU1kZF9ISC5tbS5zcyIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIFVwbG9hZEFwcFZleW9yVGVzdFJlc3VsdChzdHJpbmcgbmFtZSwgYm9vbCBwYXNzZWQsIGxvbmcgZHVyYXRpb25NUywgc3RyaW5nIGVycm9yID0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEFwcFZleW9yQXBpVXJsID09IG51bGwpIHJldHVybjsKKworICAgICAgICAgICAgc3RyaW5nIGpzb25EYXRhID0gbnVsbDsKKworICAgICAgICAgICAgdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSAoSHR0cFdlYlJlcXVlc3QpV2ViUmVxdWVzdC5DcmVhdGUoUGF0aC5Db21iaW5lKEFwcFZleW9yQXBpVXJsLCAiYXBpL3Rlc3RzIikpOworCisgICAgICAgICAgICAgICAganNvbkRhdGEgPQorICAgICAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgInt7IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwidGVzdE5hbWVcIjogXCJ7MH1cIiwgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwidGVzdEZyYW1ld29ya1wiOiBcIk1TVGVzdFwiLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJmaWxlTmFtZVwiOiBcInswfS5weVwiLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJvdXRjb21lXCI6IFwiezF9XCIsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcImR1cmF0aW9uTWlsbGlzZWNvbmRzXCI6IFwiezJ9XCIsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIkVycm9yTWVzc2FnZVwiOiBcInszfVwiIiArCisgICAgICAgICAgICAgICAgICAgICAgICAifX0iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCA/ICJQYXNzZWQiIDogIkZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbk1TLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT0gbnVsbCA/ICIiIDogZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEVuY29kaW5nLlVURjguR2V0Qnl0ZXMoanNvbkRhdGEpOworCisgICAgICAgICAgICAgICAgcmVxdWVzdC5NZXRob2QgPSAiUE9TVCI7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5Db250ZW50VHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIjsKKyAgICAgICAgICAgICAgICByZXF1ZXN0LkNvbnRlbnRMZW5ndGggPSBkYXRhLkxlbmd0aDsKKworICAgICAgICAgICAgICAgIHVzaW5nICh2YXIgc3RyZWFtID0gcmVxdWVzdC5HZXRSZXF1ZXN0U3RyZWFtKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdHJlYW0uV3JpdGUoZGF0YSwgMCwgZGF0YS5MZW5ndGgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IChIdHRwV2ViUmVzcG9uc2UpcmVxdWVzdC5HZXRSZXNwb25zZSgpOworICAgICAgICAgICAgICAgIHZhciByZXNwb25zZVN0cmluZyA9IG5ldyBTdHJlYW1SZWFkZXIocmVzcG9uc2UuR2V0UmVzcG9uc2VTdHJlYW0oKSkuUmVhZFRvRW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkVuY291bnRlcmVkIGV4Y2VwdGlvbiBmb3IgaHR0cCBwb3N0OiIpOworICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGUuTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoZS5TdGFja1RyYWNlKTsKKworICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJKc29uIGNvbnRlbnQ6Iik7CisgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoanNvbkRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZW51bSBUZXN0UmVzdWx0CisgICAgICAgIHsKKyAgICAgICAgICAgIEZhaWwsCisgICAgICAgICAgICBQYXNzLAorICAgICAgICAgICAgUGFzc1dpdGhSZXRyeQorICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUnVucyBhIHB5dGhvbiB0ZXN0IGZpbGUgYW5kIHJldHVybnMgc3VjY2Vzcy9mYWlsdXJlCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHN0YXRpYyBhc3luYyBUYXNrPFRlc3RSZXN1bHQ+IFJ1blRlc3Qoc3RyaW5nIGZpbGUsIGludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nIHB5dGhvblBhdGggPSAicHl0aG9uLmV4ZSI7CisgICAgICAgICAgICBpZiAoQXBwVmV5b3JNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChFbnZpcm9ubWVudC5HZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJQbGF0Zm9ybSIpLlRvTG93ZXIoKSA9PSAieDY0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHB5dGhvblBhdGggPSBAImM6XHB5dGhvbjM1LXg2NFxweXRob24uZXhlIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHl0aG9uUGF0aCA9IEAiYzpccHl0aG9uMzVccHl0aG9uLmV4ZSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgdHJpZXMgPSAwOworICAgICAgICAgICAgU3RvcHdhdGNoIFRpbWVyOworICAgICAgICAgICAgVGVzdFJlc3VsdHMgUmVzdWx0czsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaW1lciA9IG5ldyBTdG9wd2F0Y2goKTsKKyAgICAgICAgICAgICAgICBUaW1lci5TdGFydCgpOworCisgICAgICAgICAgICAgICAgUmVzdWx0cyA9IGF3YWl0IEV4ZWN1dGVBc3luYyhweXRob25QYXRoLCBmaWxlLCAzMCAqIDYwICogMTAwMCwgaW5kZXgpOworCisgICAgICAgICAgICAgICAgVGltZXIuU3RvcCgpOworCisgICAgICAgICAgICB9IHdoaWxlICgrK3RyaWVzIDwgUmV0aXJlc09uRmFpbHVyZSArIDEgJiYgUmVzdWx0cy5QYXNzID09IGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKFZlcmJvc2VPdXRwdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9jayAoUmVzdWx0c0ZvbGRlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBsaW5lIGluIFJlc3VsdHMuT3V0cHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUobGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBVcGxvYWRBcHBWZXlvclRlc3RSZXN1bHQoUGF0aC5HZXRGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24oZmlsZSksIFJlc3VsdHMuUGFzcywgVGltZXIuRWxhcHNlZE1pbGxpc2Vjb25kcywgUmVzdWx0cy5FcnJvcik7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBvdXRwdXQgdG8gYSBmaWxlCisgICAgICAgICAgICB2YXIgZmlsZVByZWZpeCA9IFJlc3VsdHMuUGFzcyA/ICJQXyIgOiAiRl8iOworICAgICAgICAgICAgdmFyIG91dHB1dEZpbGVQYXRoID0gUGF0aC5Db21iaW5lKFJlc3VsdHNGb2xkZXIsIGZpbGVQcmVmaXggKyBQYXRoLkdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbihmaWxlKSArICIudHh0Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIEZpbGUuV3JpdGVBbGxMaW5lcyhvdXRwdXRGaWxlUGF0aCwgUmVzdWx0cy5PdXRwdXQpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgdG8gd3JpdGUgezB9OlxuezF9ISIsIG91dHB1dEZpbGVQYXRoLCBlLk1lc3NhZ2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gUmVzdWx0cy5QYXNzID8KKyAgICAgICAgICAgICAgICAodHJpZXMgPT0gMSA/IFRlc3RSZXN1bHQuUGFzcyA6IFRlc3RSZXN1bHQuUGFzc1dpdGhSZXRyeSkgOgorICAgICAgICAgICAgICAgIFRlc3RSZXN1bHQuRmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFJ1bnMgYWxsIHRoZSB0ZXN0cyBhcyBpbmRpY2F0ZWQgYnkgaW5wdXQgYXJndW1lbnRzCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoIDwgMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVXNhZ2U6IG90VGVzdFJ1bm5lci5leGUgW3BhdGhdIFtzZWFyY2ggcGF0dGVybl0gKHBhcmFsbGVsOm4pICh2ZXJib3NlKSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZpbGVzID0gRGlyZWN0b3J5LkdldEZpbGVzKGFyZ3NbMF0sIGFyZ3NbMV0pOworICAgICAgICAgICAgaWYgKGZpbGVzLkxlbmd0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJObyB0ZXN0cyBmb3VuZCB3aXRoIHRoYXQgcGF0aCAmIHBhdHRlcm4hIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgTnVtYmVyT2ZUZXN0c1RvUnVuSW5QYXJhbGxlbCA9IDE7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3MuTGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3NbaV0uU3RhcnRzV2l0aCgicGFyYWxsZWw6IikpCisgICAgICAgICAgICAgICAgICAgIE51bWJlck9mVGVzdHNUb1J1bkluUGFyYWxsZWwgPSBpbnQuUGFyc2UoYXJnc1tpXS5TdWJzdHJpbmcoOSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3NbaV0uU3RhcnRzV2l0aCgicmV0cnk6IikpCisgICAgICAgICAgICAgICAgICAgIFJldGlyZXNPbkZhaWx1cmUgPSBpbnQuUGFyc2UoYXJnc1tpXS5TdWJzdHJpbmcoNikpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3NbaV0uU3RhcnRzV2l0aCgidmVyYm9zZSIpKQorICAgICAgICAgICAgICAgICAgICBWZXJib3NlT3V0cHV0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmdzW2ldLlN0YXJ0c1dpdGgoImFwcHZleW9yIikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBcHBWZXlvck1vZGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBBcHBWZXlvckFwaVVybCA9IEVudmlyb25tZW50LkdldEVudmlyb25tZW50VmFyaWFibGUoIkFQUFZFWU9SX0FQSV9VUkwiKTsKKyAgICAgICAgICAgICAgICAgICAgLy9Db25zb2xlLldyaXRlTGluZSgiQXBwVmV5b3JBcGlVcmwgPSB7MH0iLCBBcHBWZXlvckFwaVVybCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgQ3VyTnVtVGVzdHNSdW5uaW5nID0gMDsKKyAgICAgICAgICAgIHZhciBSZWFkeVRvUnVuRXZlbnQgPSBuZXcgTWFudWFsUmVzZXRFdmVudCh0cnVlKTsKKworICAgICAgICAgICAgdmFyIFRlc3RQYXNzQ291bnQgPSAwOworICAgICAgICAgICAgU3RvcHdhdGNoIFRpbWVyID0gbmV3IFN0b3B3YXRjaCgpOworCisgICAgICAgICAgICBEaXJlY3RvcnkuQ3JlYXRlRGlyZWN0b3J5KFJlc3VsdHNGb2xkZXIpOworICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlRlc3QgcmVzdWx0cyBzYXZlZDogLlxcezB9IiwgUmVzdWx0c0ZvbGRlcik7CisKKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJSdW5uaW5nIHswfSB0ZXN0cywgezF9IGF0IGEgdGltZToiLCBmaWxlcy5MZW5ndGgsIE51bWJlck9mVGVzdHNUb1J1bkluUGFyYWxsZWwpOworICAgICAgICAgICAgLypmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLkxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKFBhdGguR2V0RmlsZU5hbWUoZmlsZXNbaV0pKTsqLworICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIiIpOworCisgICAgICAgICAgICBUaW1lci5TdGFydCgpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5MZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgZXZlbnQgdG8gYmUgc2V0LCBpZiBub3QgYWxyZWFkeQorICAgICAgICAgICAgICAgIFJlYWR5VG9SdW5FdmVudC5XYWl0T25lKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBhIGJpdCB0byBzdGFnZ2VyIHRoZSBzdGFydHMKKyAgICAgICAgICAgICAgICAgICAgVGFzay5EZWxheSgxMDAwKS5XYWl0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbG9jayAoUmVzdWx0c0ZvbGRlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK0N1ck51bVRlc3RzUnVubmluZyA9PSBOdW1iZXJPZlRlc3RzVG9SdW5JblBhcmFsbGVsKQorICAgICAgICAgICAgICAgICAgICAgICAgUmVhZHlUb1J1bkV2ZW50LlJlc2V0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlc1tpXTsKKworICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSB0ZXN0LCBidXQgZG9uJ3Qgd2FpdCBmb3IgaXQKKyAgICAgICAgICAgICAgICBUYXNrLlJ1bigKKyAgICAgICAgICAgICAgICAgICAgYXN5bmMgKCkgPT4KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IFJ1blRlc3QoZmlsZU5hbWUsIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2sgKFJlc3VsdHNGb2xkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFByZXZDb2xvciA9IENvbnNvbGUuRm9yZWdyb3VuZENvbG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gVGVzdFJlc3VsdC5GYWlsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBUZXN0UmVzdWx0LlBhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuRm9yZWdyb3VuZENvbG9yID0gQ29uc29sZUNvbG9yLkdyZWVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Gb3JlZ3JvdW5kQ29sb3IgPSBDb25zb2xlQ29sb3IuWWVsbG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoIlBBU1MiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFBhc3NDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLkZvcmVncm91bmRDb2xvciA9IENvbnNvbGVDb2xvci5SZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoIkZBSUwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Gb3JlZ3JvdW5kQ29sb3IgPSBQcmV2Q29sb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIjogezB9IiwgUGF0aC5HZXRGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJOdW1UZXN0c1J1bm5pbmctLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkeVRvUnVuRXZlbnQuU2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXYWl0IGZvciBhbGwgdGhlIHRlc3RzIHRvIGNvbXBsZXRlCisgICAgICAgICAgICB3aGlsZSAoQ3VyTnVtVGVzdHNSdW5uaW5nICE9IDApCisgICAgICAgICAgICAgICAgUmVhZHlUb1J1bkV2ZW50LldhaXRPbmUoKTsKKworICAgICAgICAgICAgVGltZXIuU3RvcCgpOworICAgICAgICAgICAgVGltZVNwYW4gdHMgPSBUaW1lci5FbGFwc2VkOworICAgICAgICAgICAgc3RyaW5nIGVsYXBzZWRUaW1lID0gCisgICAgICAgICAgICAgICAgU3RyaW5nLkZvcm1hdCgiezA6MDB9OnsxOjAwfTp7MjowMH0uezM6MDB9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzLkhvdXJzLCB0cy5NaW51dGVzLCB0cy5TZWNvbmRzLCB0cy5NaWxsaXNlY29uZHMgLyAxMCk7CisKKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gdGVzdHMgcnVuIGluIHsxfSIsIGZpbGVzLkxlbmd0aCwgZWxhcHNlZFRpbWUpOworICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSBwYXNzZWQgYW5kIHsxfSBmYWlsZWQiLCBUZXN0UGFzc0NvdW50LCBmaWxlcy5MZW5ndGggLSBUZXN0UGFzc0NvdW50KTsKKworICAgICAgICAgICAgaWYgKCFBcHBWZXlvck1vZGUpCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuRXhpdENvZGUgPSBmaWxlcy5MZW5ndGggPT0gVGVzdFBhc3NDb3VudCA/IDAgOiAxOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL3NjcmlwdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmYzM3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1NiBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKKyMgQWx3YXlzIHBhY2thZ2UgKGUuZy4gZm9yICdtYWtlIGRpc3QnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworRElTVF9TVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHRocmVhZC1jZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBBbHdheXMgYnVpbGQgKGUuZy4gZm9yICdtYWtlIGFsbCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitTVUJESVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX1BPU0lYCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9DTEkKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICB0aHJlYWQtY2VydCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZgorZW5kaWYKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCisKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDFfUm91dGVyQXR0YWNoLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wMV9Sb3V0ZXJBdHRhY2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZhZTZiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDFfUm91dGVyQXR0YWNoLnB5CkBAIC0wLDAgKzEsMTkxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbmV0d29ya19sYXllcgoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorU05JRkZFUiA9IDMKKworCitjbGFzcyBDZXJ0XzVfMV8wMV9Sb3V0ZXJBdHRhY2godW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIpCisKKyAgICAgICAgIyAxIC0gTGVhZGVyCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjEiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Sb3V0ZTY0KQorCisgICAgICAgICMgMiAtIFJvdXRlcgorICAgICAgICBtc2cgPSByb3V0ZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgc2Nhbl9tYXNrX3RsdiA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzY2FuX21hc2tfdGx2LmVuZF9kZXZpY2UpCisKKyAgICAgICAgIyAzIC0gTGVhZGVyCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua01hcmdpbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ29ubmVjdGl2aXR5KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgICMgNCAtIFJvdXRlcgorICAgICAgICBtc2cgPSByb3V0ZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tMRUFERVJdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGltZW91dCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VEb2VzTm90Q29udGFpblRsdihtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikKKworICAgICAgICAjIDUgLSBMZWFkZXIKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUl0pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkFkZHJlc3MxNikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5OZXR3b3JrRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5Sb3V0ZTY0KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24pCisKKyAgICAgICAgIyA2IC0gUm91dGVyCisgICAgICAgIG1zZyA9IHJvdXRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KG5ldHdvcmtfbGF5ZXIuTWFjRXh0ZW5kZWRBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihuZXR3b3JrX2xheWVyLlN0YXR1cykKKworICAgICAgICAjIDcgLSBMZWFkZXIKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKQorCisgICAgICAgIHN0YXR1c190bHYgPSBtc2cuZ2V0X2NvYXBfbWVzc2FnZV90bHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV0d29ya19sYXllci5TdGF0dXNWYWx1ZXMuU1VDQ0VTUywgc3RhdHVzX3Rsdi5zdGF0dXMpCisKKyAgICAgICAgIyA4IC0gUm91dGVyCisgICAgICAgIG1zZyA9IHJvdXRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5MSU5LX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKworICAgICAgICB0bHZfcmVxdWVzdCA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5UbHZSZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1sZS5UbHZUeXBlLkxJTktfTUFSR0lOLCB0bHZfcmVxdWVzdC50bHZzKQorCisgICAgICAgICMgOSAtIExlYWRlcgorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFRfQU5EX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJlc3BvbnNlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtNYXJnaW4pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuTWxlRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLkNoYWxsZW5nZSkKKworICAgICAgICAjIDEwIC0gUm91dGVyCisgICAgICAgIG1zZyA9IHJvdXRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjEiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Sb3V0ZTY0KQorCisgICAgICAgICMgMTEgLSBMZWFkZXIsIFJvdXRlcjEKKyAgICAgICAgZm9yIGFkZHIgaW4gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRycygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSXS5waW5nKGFkZHIpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzAyX0NoaWxkQWRkcmVzc1RpbWVvdXQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzAyX0NoaWxkQWRkcmVzc1RpbWVvdXQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzg1NTQ1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDJfQ2hpbGRBZGRyZXNzVGltZW91dC5weQpAQCAtMCwwICsxLDE3MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZworaW1wb3J0IG1sZQoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQgPSAzCitTRUQgPSA0CitTTklGRkVSID0gNQorCisKK2NsYXNzIENlcnRfNV8xXzAyX0NoaWxkQWRkcmVzc1RpbWVvdXQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3RpbWVvdXQoMykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnNldF9tb2RlKCdzbicpCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zZXRfdGltZW91dCgzKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgZWRfYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWRfYWRkcnMgPSBzZWxmLm5vZGVzW1NFRF0uZ2V0X2FkZHJzKCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBmb3IgYWRkciBpbiBlZF9hZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgZm9yIGFkZHIgaW4gc2VkX2FkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSKQorICAgICAgICBlZF9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShFRCkKKyAgICAgICAgc2VkX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFNFRCkKKworICAgICAgICAjIDEgLSBBbGwKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICBlZF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIGVkX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgc2VkX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgc2VkX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgIyAzIC0gTGVhZGVyCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcSIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FxIikKKworICAgICAgICAjIDQgLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMuZG9lc19ub3RfY29udGFpbl9jb2FwX21lc3NhZ2UoKQorCisgICAgICAgICMgNiAtIExlYWRlcgorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXEiKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcSIpCisKKyAgICAgICAgIyA3IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLmRvZXNfbm90X2NvbnRhaW5fY29hcF9tZXNzYWdlKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wM19Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wM19Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQwNjhiYmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzAzX1JvdXRlckFkZHJlc3NSZWFsbG9jYXRpb24ucHkKQEAgLTAsMCArMSwyMDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBuZXR3b3JrX2xheWVyCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1NOSUZGRVIgPSA0CisKKworY2xhc3MgQ2VydF81XzFfMDNfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgcmxvYzE2ID0gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9uZXR3b3JrX2lkX3RpbWVvdXQoMTEwKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCksIHJsb2MxNikKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMikKKworICAgICAgICAjIDIgLSBBbGwKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisKKyAgICAgICAgIyBMZWFkZXIgb3IgUm91dGVyMSBjYW4gYmUgcGFyZW50IG9mIFJvdXRlcjIKKyAgICAgICAgaWYgbGVhZGVyX21lc3NhZ2VzLmNvbnRhaW5zX21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSk6CisgICAgICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICBlbGlmIHJvdXRlcjFfbWVzc2FnZXMuY29udGFpbnNfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKToKKyAgICAgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICAjIDUgLSBSb3V0ZXIxCisgICAgICAgICMgUm91dGVyMSBtYWtlIHR3byBhdHRlbXB0cyB0byByZWNvbm5lY3QgdG8gaXRzIGN1cnJlbnQgUGFydGl0aW9uLgorICAgICAgICBmb3IgXyBpbiByYW5nZSg0KToKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoyIikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYucm91dGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LmVuZF9kZXZpY2UpCisKKyAgICAgICAgIyA2IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgNyAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjJdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGltZW91dCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VEb2VzTm90Q29udGFpblRsdihtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikKKworICAgICAgICAjIDggLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihuZXR3b3JrX2xheWVyLlJsb2MxNikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisKKyAgICAgICAgIyA4IC0gUm91dGVyMgorICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wNF9Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wNF9Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlNWZhZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA0X1JvdXRlckFkZHJlc3NSZWFsbG9jYXRpb24ucHkKQEAgLTAsMCArMSwyMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBuZXR3b3JrX2xheWVyCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1NOSUZGRVIgPSA0CisKKworY2xhc3MgQ2VydF81XzFfMDRfUm91dGVyQWRkcmVzc1JlYWxsb2NhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgcmxvYzE2ID0gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9uZXR3b3JrX2lkX3RpbWVvdXQoMjAwKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMjIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHIxNigpLCBybG9jMTYpCisKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KExFQURFUikKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisKKyAgICAgICAgIyAyIC0gQWxsCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorCisgICAgICAgICMgTGVhZGVyIG9yIFJvdXRlcjEgY2FuIGJlIHBhcmVudCBvZiBSb3V0ZXIyCisgICAgICAgIGlmIGxlYWRlcl9tZXNzYWdlcy5jb250YWluc19tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpOgorICAgICAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgZWxpZiByb3V0ZXIxX21lc3NhZ2VzLmNvbnRhaW5zX21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSk6CisgICAgICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgIyA1IC0gUm91dGVyMQorICAgICAgICAjIFJvdXRlcjEgbWFrZSB0d28gYXR0ZW1wdHMgdG8gcmVjb25uZWN0IHRvIGl0cyBjdXJyZW50IFBhcnRpdGlvbi4KKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgICAgICBzY2FuX21hc2tfdGx2ID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLlNjYW5NYXNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgNiAtIFJvdXRlcjEKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoyIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICBzY2FuX21hc2tfdGx2ID0gbXNnLmdldF9tbGVfbWVzc2FnZV90bHYobWxlLlNjYW5NYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNjYW5fbWFza190bHYucm91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNjYW5fbWFza190bHYuZW5kX2RldmljZSkKKworICAgICAgICAjIDggLSBSb3V0ZXIyCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKworICAgICAgICAjIDkgLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjJdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuTWxlRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTWFyZ2luKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Db25uZWN0aXZpdHkpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIyXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQWRkcmVzczE2KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk5ldHdvcmtEYXRhKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLlJvdXRlNjQpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikKKworICAgICAgICAjIDEwIC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKQorCisgICAgICAgIHN0YXR1c190bHYgPSBtc2cuZ2V0X2NvYXBfbWVzc2FnZV90bHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV0d29ya19sYXllci5TdGF0dXNWYWx1ZXMuU1VDQ0VTUywgc3RhdHVzX3Rsdi5zdGF0dXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDVfUm91dGVyQWRkcmVzc1RpbWVvdXQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA1X1JvdXRlckFkZHJlc3NUaW1lb3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzYzQ4NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA1X1JvdXRlckFkZHJlc3NUaW1lb3V0LnB5CkBAIC0wLDAgKzEsMTU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbmV0d29ya19sYXllcgoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1NOSUZGRVIgPSAzCisKKworY2xhc3MgQ2VydF81XzFfMDVfUm91dGVyQWRkcmVzc1RpbWVvdXQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIxKCkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiBfc2V0VXBSb3V0ZXIxKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBybG9jMTYgPSBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyMTYoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjEoKQorICAgICAgICB0aW1lLnNsZWVwKDIwMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyMTYoKSwgcmxvYzE2KQorCisgICAgICAgIHJsb2MxNiA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHIxNigpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjEoKQorICAgICAgICB0aW1lLnNsZWVwKDMwMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyMTYoKSwgcmxvYzE2KQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKworICAgICAgICAjIDIgLSBBbGwKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICAjIDMgLSBSb3V0ZXIxCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgIyA0IC0gTGVhZGVyCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihuZXR3b3JrX2xheWVyLlN0YXR1cykKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihuZXR3b3JrX2xheWVyLlJvdXRlck1hc2spCisKKyAgICAgICAgc3RhdHVzX3RsdiA9IG1zZy5nZXRfY29hcF9tZXNzYWdlX3RsdihuZXR3b3JrX2xheWVyLlN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXR3b3JrX2xheWVyLlN0YXR1c1ZhbHVlcy5TVUNDRVNTLCBzdGF0dXNfdGx2LnN0YXR1cykKKworICAgICAgICAjIDYgLSBSb3V0ZXIxCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisKKyAgICAgICAgbXNnID0gcm91dGVyMV9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgIyA3IC0gTGVhZGVyCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihuZXR3b3JrX2xheWVyLlN0YXR1cykKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihuZXR3b3JrX2xheWVyLlJvdXRlck1hc2spCisKKyAgICAgICAgc3RhdHVzX3RsdiA9IG1zZy5nZXRfY29hcF9tZXNzYWdlX3RsdihuZXR3b3JrX2xheWVyLlN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXR3b3JrX2xheWVyLlN0YXR1c1ZhbHVlcy5TVUNDRVNTLCBzdGF0dXNfdGx2LnN0YXR1cykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wNl9SZW1vdmVSb3V0ZXJJZC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDZfUmVtb3ZlUm91dGVySWQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDZfUmVtb3ZlUm91dGVySWQucHkKQEAgLTAsMCArMSwxMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBuZXR3b3JrX2xheWVyCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorU05JRkZFUiA9IDMKKworCitjbGFzcyBDZXJ0XzVfMV8wNl9SZW1vdmVSb3V0ZXJJZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5zbmlmZmVyCisKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgcmxvYzE2ID0gc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjE2KCkKKworICAgICAgICBmb3IgYWRkciBpbiBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRycygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZWxlYXNlX3JvdXRlcl9pZChybG9jMTYgPj4gMTApCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBmb3IgYWRkciBpbiBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRycygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKworICAgICAgICAjIDEgLSBBbGwKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgICMgMyAtIFJvdXRlcjEKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIxXSkKKyAgICAgICAgICAgIAorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKGNvZGU9IjAuMDIiLCB1cmlfcGF0aD0iL2EvYXMiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VDb250YWluc1RsdihuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNUbHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKQorCisgICAgICAgIHN0YXR1c190bHYgPSBtc2cuZ2V0X2NvYXBfbWVzc2FnZV90bHYobmV0d29ya19sYXllci5TdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV0d29ya19sYXllci5TdGF0dXNWYWx1ZXMuU1VDQ0VTUywgc3RhdHVzX3Rsdi5zdGF0dXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDdfTWF4Q2hpbGRDb3VudC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDdfTWF4Q2hpbGRDb3VudC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNDYwOTRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wN19NYXhDaGlsZENvdW50LnB5CkBAIC0wLDAgKzEsMTAyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitTRUQxID0gNworCitjbGFzcyBDZXJ0XzVfMV8wN19NYXhDaGlsZENvdW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbWF4X2NoaWxkcmVuKDEwKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMsIDEzKToKKyAgICAgICAgICAgIGlmIGkgaW4gcmFuZ2UoMywgNyk6CisgICAgICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfbW9kZSgncycpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbaV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMywgMTMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbaV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCcgYW5kICdmZjpmZTAwJyBub3QgaW4gYWRkcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkciwgc2l6ZT0xMjMyKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMsIDEzKToKKyAgICAgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW2ldLmdldF9hZGRycygpCisgICAgICAgICAgICBmb3IgYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCcgYW5kICdmZjpmZTAwJyBub3QgaW4gYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIsIHNpemU9MTA2KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wOF9Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA4X1JvdXRlckF0dGFjaENvbm5lY3Rpdml0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzE3NTUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8wOF9Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkKQEAgLTAsMCArMSwxNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKK1JPVVRFUjQgPSA1CitTTklGRkVSID0gNgorCisKK2NsYXNzIENlcnRfNV8xXzA4X1JvdXRlckF0dGFjaENvbm5lY3Rpdml0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjRdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVI0XS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVI0XS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbaV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIyKQorICAgICAgICByb3V0ZXIzX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjMpCisgICAgICAgIHJvdXRlcjRfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSNCkKKworICAgICAgICAjIDEgLSBMZWFkZXIsIFJvdXRlcjEsIFJvdXRlcjIsIFJvdXRlcjMKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorICAgICAgICByb3V0ZXIzX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisKKyAgICAgICAgIyAyIC0gUm91dGVyNAorICAgICAgICBtc2cgPSByb3V0ZXI0X21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgMyAtIFJvdXRlcjIsIFJvdXRlcjMKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSNF0pCisKKyAgICAgICAgbXNnID0gcm91dGVyM19tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSNF0pCisKKyAgICAgICAgIyA0IC0gUm91dGVyNAorICAgICAgICBtc2cgPSByb3V0ZXI0X21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSM10pCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJlc3BvbnNlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuTWxlRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5UaW1lb3V0KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5UbHZSZXF1ZXN0KQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZURvZXNOb3RDb250YWluVGx2KG1sZS5BZGRyZXNzUmVnaXN0cmF0aW9uKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA5X1JFRURBdHRhY2hDb25uZWN0aXZpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzA5X1JFRURBdHRhY2hDb25uZWN0aXZpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzE3NTg0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMDlfUkVFREF0dGFjaENvbm5lY3Rpdml0eS5weQpAQCAtMCwwICsxLDE4MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZworaW1wb3J0IG1sZQoraW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JFRUQwID0gMworUkVFRDEgPSA0CitST1VURVIyID0gNQorU05JRkZFUiA9IDYKKworCitjbGFzcyBDZXJ0XzVfMV8wOV9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDBdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMSkKKyAgICAgICAgcmVlZDBfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUkVFRDApCisgICAgICAgIHJlZWQxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJFRUQxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisKKyAgICAgICAgIyAxIC0gTGVhZGVyLCBSb3V0ZXIxLCBSRUVEMSwgUkVFRDIKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICAjIDIgLSBSb3V0ZXIyCisgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgc2Nhbl9tYXNrX3RsdiA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzY2FuX21hc2tfdGx2LmVuZF9kZXZpY2UpCisKKyAgICAgICAgIyA0IC0gUm91dGVyMgorICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFdpdGhIb3BMaW1pdCgyNTUpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3MoImZmMDI6OjIiKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Nb2RlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5DaGFsbGVuZ2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNjYW5NYXNrKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5WZXJzaW9uKQorCisgICAgICAgIHNjYW5fbWFza190bHYgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2Nhbl9tYXNrX3Rsdi5lbmRfZGV2aWNlKQorCisgICAgICAgICMgNSAtIFJFRUQxLCBSRUVEMgorICAgICAgICBtc2cgPSByZWVkMF9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisgICAgICAgIGNvbm5lY3Rpdml0eV90bHZfcmVlZDAgPSBtc2cuZ2V0X21sZV9tZXNzYWdlX3RsdihtbGUuQ29ubmVjdGl2aXR5KQorCisgICAgICAgIG1zZyA9IHJlZWQxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgY29ubmVjdGl2aXR5X3Rsdl9yZWVkMSA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5Db25uZWN0aXZpdHkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGNvbm5lY3Rpdml0eV90bHZfcmVlZDEubGlua19xdWFsaXR5XzMsIGNvbm5lY3Rpdml0eV90bHZfcmVlZDAubGlua19xdWFsaXR5XzMpCisKKyAgICAgICAgIyA2IC0gUm91dGVyMgorICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUkVFRDFdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGltZW91dCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VEb2VzTm90Q29udGFpblRsdihtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xMF9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTBfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBkMTNmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTBfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkKQEAgLTAsMCArMSwxNzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKK1NOSUZGRVIgPSA1CisKKworY2xhc3MgQ2VydF81XzFfMTBfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCksIHJzc2k9LTg1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYuc25pZmZlciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF90aHJlYWRfc25pZmZlcihTTklGRkVSKQorICAgICAgICBzZWxmLnNuaWZmZXIuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMikKKyAgICAgICAgcm91dGVyM19tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIzKQorCisgICAgICAgICMgMSAtIExlYWRlciwgUm91dGVyMSwgUm91dGVyMgorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKworICAgICAgICByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVNQT05TRSkKKworICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIwLjAyIikKKyAgICAgICAgbXNnLmFzc2VydENvYXBNZXNzYWdlUmVxdWVzdFVyaVBhdGgoIi9hL2FzIikKKworICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjIuMDQiKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5BRFZFUlRJU0VNRU5UKQorCisgICAgICAgICMgMyAtIFJvdXRlcjMKKyAgICAgICAgbXNnID0gcm91dGVyM19tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRXaXRoSG9wTGltaXQoMjU1KQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvRGVzdGluYXRpb25BZGRyZXNzKCJmZjAyOjoyIikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKworICAgICAgICAjIDQgLSBSb3V0ZXIxLCBSb3V0ZXIyCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjNdKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjNdKQorCisgICAgICAgICMgNSAtIFJvdXRlcjMKKyAgICAgICAgbXNnID0gcm91dGVyM19tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW1JPVVRFUjFdKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5SZXNwb25zZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKQorICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zT3B0aW9uYWxUbHYobWxlLk1sZUZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTW9kZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGltZW91dCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VEb2VzTm90Q29udGFpblRsdihtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xMV9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzExX1JFRURBdHRhY2hMaW5rUXVhbGl0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNWJiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xMV9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkKQEAgLTAsMCArMSwxNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcKK2ltcG9ydCBtbGUKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JFRUQgPSAyCitST1VURVIyID0gMworUk9VVEVSMSA9IDQKK1NOSUZGRVIgPSA1CisKKworY2xhc3MgQ2VydF81XzFfMTFfUkVFREF0dGFjaExpbmtRdWFsaXR5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpLCByc3NpPS04NSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgdGltZS5zbGVlcCg0KQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJlZWRfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUkVFRCkKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisKKyAgICAgICAgIyAxIC0gTGVhZGVyLiBSRUVEMSwgUm91dGVyMgorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICByZWVkX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorCisgICAgICAgIHJlZWRfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5QQVJFTlRfUkVTUE9OU0UpCisKKyAgICAgICAgcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5DSElMRF9JRF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVTUE9OU0UpCisKKyAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMC4wMiIpCisgICAgICAgIG1zZy5hc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKCIvYS9hcyIpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfY29hcF9tZXNzYWdlKCIyLjA0IikKKworICAgICAgICByZWVkX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICAjIDMgLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgc2Nhbl9tYXNrX3RsdiA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzY2FuX21hc2tfdGx2LmVuZF9kZXZpY2UpCisKKyAgICAgICAgIyA0IC0gUm91dGVyMgorICAgICAgICBtc2cgPSByb3V0ZXIyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVNQT05TRSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb05vZGUoc2VsZi5ub2Rlc1tST1VURVIxXSkKKworICAgICAgICAjIDUgLSBSb3V0ZXIxCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFUVVFU1QpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLk1vZGUpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU2Nhbk1hc2spCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlZlcnNpb24pCisKKyAgICAgICAgc2Nhbl9tYXNrX3RsdiA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5TY2FuTWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LnJvdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzY2FuX21hc2tfdGx2LmVuZF9kZXZpY2UpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTJfTmV3Um91dGVyTmVpZ2hib3JTeW5jLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMV8xMl9OZXdSb3V0ZXJOZWlnaGJvclN5bmMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2E2NzdmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTJfTmV3Um91dGVyTmVpZ2hib3JTeW5jLnB5CkBAIC0wLDAgKzEsMTU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1NOSUZGRVIgPSA0CisKKworY2xhc3MgQ2VydF81XzFfMTJfTmV3Um91dGVyU3luYyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5zbmlmZmVyID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X3RocmVhZF9zbmlmZmVyKFNOSUZGRVIpCisgICAgICAgIHNlbGYuc25pZmZlci5zdGFydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc25pZmZlci5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYuc25pZmZlcgorCisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHZlcmlmeV9zdGVwXzQoc2VsZiwgcm91dGVyMV9tZXNzYWdlcywgcm91dGVyMl9tZXNzYWdlcywgcmVxX3JlY2VpdmVyLCBhY2NlcHRfcmVjZWl2ZXIpOgorICAgICAgICBpZiByb3V0ZXIyX21lc3NhZ2VzLmNvbnRhaW5zX21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5MSU5LX1JFUVVFU1QpIGFuZCBcCisgICAgICAgICAgICAocm91dGVyMV9tZXNzYWdlcy5jb250YWluc19tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFQpIG9yCisgICAgICAgICAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5jb250YWluc19tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFRfQU5EX1JFUVVFU1QpKToKKworICAgICAgICAgICAgbXNnID0gcm91dGVyMl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5MSU5LX1JFUVVFU1QpCisKKyAgICAgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbcmVxX3JlY2VpdmVyXSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5MZWFkZXJEYXRhKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuQ2hhbGxlbmdlKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlRsdlJlcXVlc3QpCisKKyAgICAgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZV9vZl9vbmVfb2ZfY29tbWFuZF90eXBlcyhtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFRfQU5EX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobXNnKQorCisgICAgICAgICAgICBtc2cuYXNzZXJ0U2VudFRvTm9kZShzZWxmLm5vZGVzW2FjY2VwdF9yZWNlaXZlcl0pCisgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5Tb3VyY2VBZGRyZXNzKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihtbGUuTWxlRnJhbWVDb3VudGVyKQorICAgICAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtNYXJnaW4pCisKKyAgICAgICAgICAgIGlmIG1zZy5tbGUuY29tbWFuZC50eXBlID09IG1sZS5Db21tYW5kVHlwZS5MSU5LX0FDQ0VQVF9BTkRfUkVRVUVTVDoKKyAgICAgICAgICAgICAgICBtc2cuYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KG1sZS5UbHZSZXF1ZXN0KQorICAgICAgICAgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKworICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KExFQURFUikKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShST1VURVIxKQorICAgICAgICByb3V0ZXIyX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjIpCisKKyAgICAgICAgIyAyIC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MSIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJvdXRlNjQpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisKKyAgICAgICAgdGltZS5zbGVlcCgzNSkKKworICAgICAgICBsZWFkZXJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoTEVBREVSKQorICAgICAgICByb3V0ZXIxX21lc3NhZ2VzID0gc2VsZi5zbmlmZmVyLmdldF9tZXNzYWdlc19zZW50X2J5KFJPVVRFUjEpCisgICAgICAgIHJvdXRlcjJfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSMikKKworICAgICAgICAjIDQgLSBSb3V0ZXIxLCBSb3V0ZXIyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnZlcmlmeV9zdGVwXzQocm91dGVyMV9tZXNzYWdlcywgcm91dGVyMl9tZXNzYWdlcywgUk9VVEVSMSwgUk9VVEVSMikgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmVyaWZ5X3N0ZXBfNChyb3V0ZXIyX21lc3NhZ2VzLCByb3V0ZXIxX21lc3NhZ2VzLCBST1VURVIyLCBST1VURVIxKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzFfMTNfUm91dGVyUmVzZXQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEzX1JvdXRlclJlc2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmOTA3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8xXzEzX1JvdXRlclJlc2V0LnB5CkBAIC0wLDAgKzEsMTU4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbWxlCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitTTklGRkVSID0gMworCisKK2NsYXNzIENlcnRfNV8xXzEzX1JvdXRlclJlc2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyKCkKKworICAgICAgICBzZWxmLnNuaWZmZXIgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIoU05JRkZFUikKKyAgICAgICAgc2VsZi5zbmlmZmVyLnN0YXJ0KCkKKworICAgIGRlZiBfc2V0VXBSb3V0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNuaWZmZXIuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLnNuaWZmZXIKKworICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBybG9jMTYgPSBzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHIxNigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyMTYoKSwgcmxvYzE2KQorCisgICAgICAgIGxlYWRlcl9tZXNzYWdlcyA9IHNlbGYuc25pZmZlci5nZXRfbWVzc2FnZXNfc2VudF9ieShMRUFERVIpCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMgPSBzZWxmLnNuaWZmZXIuZ2V0X21lc3NhZ2VzX3NlbnRfYnkoUk9VVEVSKQorCisgICAgICAgICMgMSAtIEFsbAorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQURWRVJUSVNFTUVOVCkKKworICAgICAgICByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLlBBUkVOVF9SRVFVRVNUKQorICAgICAgICBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuUEFSRU5UX1JFU1BPTlNFKQorCisgICAgICAgIHJvdXRlcjFfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuQ0hJTERfSURfUkVRVUVTVCkKKyAgICAgICAgbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkNISUxEX0lEX1JFU1BPTlNFKQorCisgICAgICAgIG1zZyA9IHJvdXRlcjFfbWVzc2FnZXMubmV4dF9jb2FwX21lc3NhZ2UoIjAuMDIiKQorICAgICAgICBtc2cuYXNzZXJ0Q29hcE1lc3NhZ2VSZXF1ZXN0VXJpUGF0aCgiL2EvYXMiKQorCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X2NvYXBfbWVzc2FnZSgiMi4wNCIpCisKKyAgICAgICAgcm91dGVyMV9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlKG1sZS5Db21tYW5kVHlwZS5MSU5LX1JFUVVFU1QpCisgICAgICAgIG1zZyA9IGxlYWRlcl9tZXNzYWdlcy5uZXh0X21sZV9tZXNzYWdlX29mX29uZV9vZl9jb21tYW5kX3R5cGVzKG1sZS5Db21tYW5kVHlwZS5MSU5LX0FDQ0VQVF9BTkRfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxlLkNvbW1hbmRUeXBlLkxJTktfQUNDRVBUKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtc2cpCisKKyAgICAgICAgIyAyIC0gUm91dGVyMSAvIExlYWRlcgorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MSIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJvdXRlNjQpCisKKyAgICAgICAgbXNnID0gbGVhZGVyX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkFEVkVSVElTRU1FTlQpCisgICAgICAgIG1zZy5hc3NlcnRTZW50V2l0aEhvcExpbWl0KDI1NSkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MSIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlNvdXJjZUFkZHJlc3MpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxlYWRlckRhdGEpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLlJvdXRlNjQpCisKKyAgICAgICAgIyA0IC0gUm91dGVyMQorICAgICAgICBtc2cgPSByb3V0ZXIxX21lc3NhZ2VzLm5leHRfbWxlX21lc3NhZ2UobWxlLkNvbW1hbmRUeXBlLkxJTktfUkVRVUVTVCkKKyAgICAgICAgbXNnLmFzc2VydFNlbnRUb0Rlc3RpbmF0aW9uQWRkcmVzcygiZmYwMjo6MiIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkNoYWxsZW5nZSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVGx2UmVxdWVzdCkKKworICAgICAgICB0bHZfcmVxdWVzdCA9IG1zZy5nZXRfbWxlX21lc3NhZ2VfdGx2KG1sZS5UbHZSZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1sZS5UbHZUeXBlLlJPVVRFNjQsIHRsdl9yZXF1ZXN0LnRsdnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWxlLlRsdlR5cGUuQUREUkVTUzE2LCB0bHZfcmVxdWVzdC50bHZzKQorCisgICAgICAgICMgNSAtIExlYWRlcgorICAgICAgICBtc2cgPSBsZWFkZXJfbWVzc2FnZXMubmV4dF9tbGVfbWVzc2FnZShtbGUuQ29tbWFuZFR5cGUuTElOS19BQ0NFUFQpCisgICAgICAgIG1zZy5hc3NlcnRTZW50VG9Ob2RlKHNlbGYubm9kZXNbUk9VVEVSXSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuU291cmNlQWRkcmVzcykKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuTGVhZGVyRGF0YSkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUmVzcG9uc2UpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkxpbmtMYXllckZyYW1lQ291bnRlcikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5NbGVGcmFtZUNvdW50ZXIpCisgICAgICAgIG1zZy5hc3NlcnRNbGVNZXNzYWdlQ29udGFpbnNUbHYobWxlLkFkZHJlc3MxNikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuVmVyc2lvbikKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc1RsdihtbGUuUm91dGU2NCkKKyAgICAgICAgbXNnLmFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KG1sZS5DaGFsbGVuZ2UpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDFfQmVjb21lQWN0aXZlUm91dGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wMV9CZWNvbWVBY3RpdmVSb3V0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzNmODllYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDFfQmVjb21lQWN0aXZlUm91dGVyLnB5CkBAIC0wLDAgKzEsODIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitSRUVEID0gMworCitjbGFzcyBDZXJ0XzVfMl8xX0JlY29tZUFjdGl2ZVJvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDJfTGVhZGVyUmVqZWN0MUhvcC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDJfTGVhZGVyUmVqZWN0MUhvcC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjA3NzRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wMl9MZWFkZXJSZWplY3QxSG9wLnB5CkBAIC0wLDAgKzEsODAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0RVVCA9IDMzCisKK2NsYXNzIENlcnRfNV8yXzJfTGVhZGVyUmVqZWN0MUhvcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0gPSBub2RlLk5vZGUoTEVBREVSKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgzMikKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfZG93bmdyYWRlX3RocmVzaG9sZCgzMykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLDM0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW2ldLmdldF9hZGRyNjQoKSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMzMpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfZG93bmdyYWRlX3RocmVzaG9sZCgzMykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAzMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tpXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRFVUXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDNfTGVhZGVyUmVqZWN0MkhvcHMucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAzX0xlYWRlclJlamVjdDJIb3BzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiZWQ5NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzAzX0xlYWRlclJlamVjdDJIb3BzLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0RVVCA9IDMzCisKK2NsYXNzIENlcnRfNV8yXzNfTGVhZGVyUmVqZWN0MkhvcHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdID0gbm9kZS5Ob2RlKExFQURFUikKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMzIpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoMzMpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwzMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDMzKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoMzMpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRFVUXSA9IG5vZGUuTm9kZShEVVQpCisgICAgICAgIHNlbGYubm9kZXNbRFVUXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0RVVF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbRFVUXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDMzKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uc2V0X3JvdXRlcl9kb3duZ3JhZGVfdGhyZXNob2xkKDMzKQorICAgICAgICBzZWxmLm5vZGVzW0RVVF0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAzMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tpXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tEVVRdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRFVUXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDRfUkVFRFVwZ3JhZGUucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA0X1JFRURVcGdyYWRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyZmM5ODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA0X1JFRURVcGdyYWRlLnB5CkBAIC0wLDAgKzEsOTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDE2CitSRUVEID0gMTcKK0VEID0gMTgKKworY2xhc3MgQ2VydF81XzJfNF9SRUVEVXBncmFkZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwxOSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLDE3KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW2ldLmdldF9hZGRyNjQoKSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwgMTcpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbaV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDVfQWRkcmVzc1F1ZXJ5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wNV9BZGRyZXNzUXVlcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzZiYjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDVfQWRkcmVzc1F1ZXJ5LnB5CkBAIC0wLDAgKzEsMTM5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitFRDEgPSAxCitCUjEgPSAyCitMRUFERVIgPSAzCitST1VURVIyID0gNAorUkVFRCA9IDUKK0VEMiA9IDYKK0VEMyA9IDcKKworY2xhc3MgQ2VydF81XzJfNV9BZGRyZXNzUXVlcnkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsOCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQlIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbQlIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0JSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0JSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0JSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0JSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQlIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0JSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDApCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQlIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0JSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQlIxXS5hZGRfcHJlZml4KCcyMDAxOjI6MDozOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0JSMV0uYWRkX3ByZWZpeCgnMjAwMToyOjA6NDo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUjFdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDNdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRUQyXS5waW5nKGFkZHIpKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDZfUm91dGVyRG93bmdyYWRlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wNl9Sb3V0ZXJEb3duZ3JhZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVhMzliMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzJfMDZfUm91dGVyRG93bmdyYWRlLnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCisKK2NsYXNzIENlcnRfNV8yXzA2X1JvdXRlckRvd25ncmFkZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMjYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorICAgICAgICAgICAgaWYgaSAhPSBST1VURVIxOgorICAgICAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgzMikKKyAgICAgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLnNldF9yb3V0ZXJfZG93bmdyYWRlX3RocmVzaG9sZCgzMikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIDI1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW2ldLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzWzI1XS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzWzI1XS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wN19SRUVEU3luY2hyb25pemF0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfMl8wN19SRUVEU3luY2hyb25pemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllZGE3MWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8yXzA3X1JFRURTeW5jaHJvbml6YXRpb24ucHkKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitSRUVEID0gMworUk9VVEVSMiA9IDQKK1JPVVRFUjMgPSA1CisKK2NsYXNzIENlcnRfNV8yXzdfUkVFRFN5bmNocm9uaXphdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAxX0xpbmtMb2NhbC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDFfTGlua0xvY2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiMjZiM2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAxX0xpbmtMb2NhbC5weQpAQCAtMCwwICsxLDgyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorCitjbGFzcyBDZXJ0XzVfM18xX0xpbmtMb2NhbCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdID09ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkciwgc2l6ZT0yNTYpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDI6OjEnLCBzaXplPTI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMjo6MScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMjo6MicsIHNpemU9MjU2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAyOjoyJykpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAyX1JlYWxtTG9jYWwucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAyX1JlYWxtTG9jYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODdkOWI5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDJfUmVhbG1Mb2NhbC5weQpAQCAtMCwwICsxLDEwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitTRUQxID0gNAorCitjbGFzcyBDZXJ0XzVfM18yX1JlYWxtTG9jYWwodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3NuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIsIHNpemU9MjU2KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAzOjoxJywgbnVtX3Jlc3BvbnNlcz0yLCBzaXplPTI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMzo6MScsIG51bV9yZXNwb25zZXM9MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAzOjoyJywgbnVtX3Jlc3BvbnNlcz0yLCBzaXplPTI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMzo6MicsIG51bV9yZXNwb25zZXM9MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjMzOjAwNDA6ZmRkZTphZDAwOmJlZWY6MDowOjEnLCBudW1fcmVzcG9uc2VzPTMsIHNpemU9MjU2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjMzOjAwNDA6ZmRkZTphZDAwOmJlZWY6MDowOjEnLCBudW1fcmVzcG9uc2VzPTMpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wM19BZGRyZXNzUXVlcnkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzAzX0FkZHJlc3NRdWVyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTI0NDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wM19BZGRyZXNzUXVlcnkucHkKQEAgLTAsMCArMSwxNTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0JSID0gMQorTEVBREVSID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitFRDIgPSA1CisKK2NsYXNzIENlcnRfNV8zXzNfQWRkcmVzc1F1ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0JSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF90aW1lb3V0KDMpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQlJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0JSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDozOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDo0OjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0VEMl0ucGluZyhhZGRyKSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0JSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRUQyXS5waW5nKGFkZHIpKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0VEMl0ucGluZyhhZGRyKSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbRUQyXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tCUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDRfQWRkcmVzc01hcENhY2hlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNF9BZGRyZXNzTWFwQ2FjaGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDIwY2FlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDRfQWRkcmVzc01hcENhY2hlLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorU0VEMSA9IDMKK0VEMiA9IDQKK0VEMyA9IDUKK0VENCA9IDYKK0VENSA9IDcKKworY2xhc3MgQ2VydF81XzNfNF9BZGRyZXNzTWFwQ2FjaGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsOCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VENF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VENV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VENF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VENV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDVdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VENV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VENV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEM10uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDRdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQ0XS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VENV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDVdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDQsIDgpOgorICAgICAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW2ldLmdldF9hZGRycygpCisgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tTRUQxXS5waW5nKGFkZHIpKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDQsIDgpOgorICAgICAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW2ldLmdldF9hZGRycygpCisgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tTRUQxXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNV9Sb3V0aW5nTGlua1F1YWxpdHkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA1X1JvdXRpbmdMaW5rUXVhbGl0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45N2UyYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNV9Sb3V0aW5nTGlua1F1YWxpdHkucHkKQEAgLTAsMCArMSwxMzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKKworY2xhc3MgQ2VydF81XzNfNV9Sb3V0aW5nTGlua1F1YWxpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCksIHJzc2k9LTk1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSwgcnNzaT0tOTUpCisKKyAgICAgICAgdGltZS5zbGVlcCg3MCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpLCByc3NpPS04NSkKKworICAgICAgICB0aW1lLnNsZWVwKDcwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpLCByc3NpPS0xMDApCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpLCByc3NpPS0xMDApCisKKyAgICAgICAgdGltZS5zbGVlcCg3MCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNl9Sb3V0ZXJJZE1hc2sucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA2X1JvdXRlcklkTWFzay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2YzYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNl9Sb3V0ZXJJZE1hc2sucHkKQEAgLTAsMCArMSw5NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCisKK2NsYXNzIENlcnRfNV8zXzZfUm91dGVySWRNYXNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIyKCkKKworICAgIGRlZiBfc2V0VXBSb3V0ZXIyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMigpCisKKyAgICAgICAgdGltZS5zbGVlcCgzMDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDZiX1JvdXRlcklkTWFzay5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDZiX1JvdXRlcklkTWFzay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNmI5Y2JkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wNmJfUm91dGVySWRNYXNrLnB5CkBAIC0wLDAgKzEsODcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworCitjbGFzcyBDZXJ0XzVfM182X1JvdXRlcklkTWFzayh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0b3AoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0b3AoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMzAwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wN19EdXBsaWNhdGVBZGRyZXNzLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wN19EdXBsaWNhdGVBZGRyZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2NTRhNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA3X0R1cGxpY2F0ZUFkZHJlc3MucHkKQEAgLTAsMCArMSwxMjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworRUQxID0gNAorRUQyID0gNQorRUQzID0gNgorCitjbGFzcyBDZXJ0XzVfM183X0R1cGxpY2F0ZUFkZHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQzXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF9pcGFkZHIoJzIwMDE6MjowOjE6OjEnKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX2lwYWRkcignMjAwMToyOjA6MTo6MScpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRDNdLnBpbmcoJzIwMDE6MjowOjE6OjEnKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDhfQ2hpbGRBZGRyZXNzU2V0LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18wOF9DaGlsZEFkZHJlc3NTZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWZiNDE2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDhfQ2hpbGRBZGRyZXNzU2V0LnB5CkBAIC0wLDAgKzEsMTA4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRDEgPSAyCitFRDIgPSAzCitFRDMgPSA0CitFRDQgPSA1CisKK2NsYXNzIENlcnRfNV8zXzhfQ2hpbGRBZGRyZXNzU2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VENF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDNdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDRdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQ0XS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDRdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDRdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEM10uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDRdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQ0XS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyLDYpOgorICAgICAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW2ldLmdldF9hZGRycygpCisgICAgICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA5X0FkZHJlc3NRdWVyeS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzNfMDlfQWRkcmVzc1F1ZXJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0ZGVmNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzA5X0FkZHJlc3NRdWVyeS5weQpAQCAtMCwwICsxLDE0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitST1VURVIzID0gNAorU0VEMSA9IDUKKworY2xhc3MgQ2VydF81XzNfMDlfQWRkcmVzc1F1ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgnc24nKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGRyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bkcm8nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgICMgd2FpdCBmb3Igc2VkIGdvdCByZXBsaWVkCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1NFRDFdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjFdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tTRUQxXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMzAwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW1NFRDFdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tST1VURVIxXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18xMF9BZGRyZXNzUXVlcnkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV8zXzEwX0FkZHJlc3NRdWVyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDQ4ZmZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfM18xMF9BZGRyZXNzUXVlcnkucHkKQEAgLTAsMCArMSwxNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0JSID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitTRUQyID0gNQorCitjbGFzcyBDZXJ0XzVfM18xMF9BZGRyZXNzUXVlcnkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQlJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0JSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF9tb2RlKCdzbicpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfdGltZW91dCgzKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tCUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tCUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQlJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjM6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjQ6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbQlJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tTRUQyXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbQlJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tTRUQyXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMzAwKQorICAgICAgICAKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbU0VEMl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm5vZGVzW0JSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wMV9MZWFkZXJSZXNldC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDFfTGVhZGVyUmVzZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQxOTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDFfTGVhZGVyUmVzZXQucHkKQEAgLTAsMCArMSw4NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorCitjbGFzcyBDZXJ0XzVfNV8xX0xlYWRlclJlc2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIF9zZXRVcExlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgcmxvYzE2ID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyMTYoKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZXNldCgpOworICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHIxNigpLCBybG9jMTYpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAyX0xlYWRlclJlYm9vdC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDJfTGVhZGVyUmVib290LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3YWMzZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzAyX0xlYWRlclJlYm9vdC5weQpAQCAtMCwwICsxLDk4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRCA9IDMKKworY2xhc3MgQ2VydF81XzVfMl9MZWFkZXJSZWJvb3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwTGVhZGVyKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiBfc2V0VXBMZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKSAgICAgICAgCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisgICAgICAgIHRpbWUuc2xlZXAoMTQwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDNfU3BsaXRNZXJnZUNoaWxkcmVuLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wM19TcGxpdE1lcmdlQ2hpbGRyZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWI2MWFiZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDNfU3BsaXRNZXJnZUNoaWxkcmVuLnB5CkBAIC0wLDAgKzEsMTQwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK0VEMSA9IDQKK0VEMiA9IDUKK0VEMyA9IDYKKworY2xhc3MgQ2VydF81XzVfM19TcGxpdE1lcmdlQ2hpbGRyZW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwTGVhZGVyKCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEM10uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgX3NldFVwTGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEM10uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDNdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwTGVhZGVyKCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgdGltZS5zbGVlcCgzMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSMl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDRfU3BsaXRNZXJnZVJvdXRlcnMucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA0X1NwbGl0TWVyZ2VSb3V0ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5NmQ1NDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA0X1NwbGl0TWVyZ2VSb3V0ZXJzLnB5CkBAIC0wLDAgKzEsMTI0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIxID0gMgorUk9VVEVSMiA9IDMKK1JPVVRFUjMgPSA0CitST1VURVI0ID0gNQorCitjbGFzcyBDZXJ0XzVfNV80X1NwbGl0TWVyZ2VSb3V0ZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSNF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSNF0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgX3NldFVwTGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKSAgICAgICAgCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjRdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSNF0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwTGVhZGVyKCkKKyAgICAgICAgdGltZS5zbGVlcCgxNTApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1MCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUjRdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVIzXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wNV9TcGxpdE1lcmdlUkVFRC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDVfU3BsaXRNZXJnZVJFRUQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzQ1NmQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDVfU3BsaXRNZXJnZVJFRUQucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKK1JPVVRFUjE1ID0gMTYKK1JFRUQxID0gMTcKKworY2xhc3MgQ2VydF81XzVfNV9TcGxpdE1lcmdlUkVFRCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwxOCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIGZvciBpIGluIHJhbmdlKFJPVVRFUjIsIFJPVVRFUjE1KzEpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tpXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkgICAgICAgICAgICAKKworICAgICAgICBmb3IgaSBpbiByYW5nZShST1VURVIyLCBST1VURVIxNSsxKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBmb3IgaSBpbiByYW5nZShST1VURVIyLCBST1VURVIxNSsxKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0uc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW2ldLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRDFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSMV0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDdfU3BsaXRNZXJnZVRocmVlV2F5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNV8wN19TcGxpdE1lcmdlVGhyZWVXYXkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVlMWU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDdfU3BsaXRNZXJnZVRocmVlV2F5LnB5CkBAIC0wLDAgKzEsMTIwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIxID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitST1VURVIzID0gNAorCitjbGFzcyBDZXJ0XzVfNV83X1NwbGl0TWVyZ2VUaHJlZVdheSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcExlYWRlcjEoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIF9zZXRVcExlYWRlcjEoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBMZWFkZXIxKCkKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMzApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVIxXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSMV0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjFdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA4X1NwbGl0Um91dGVyc0xvc3RMZWFkZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV81XzA4X1NwbGl0Um91dGVyc0xvc3RMZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGU4NDAwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzVfMDhfU3BsaXRSb3V0ZXJzTG9zdExlYWRlci5weQpAQCAtMCwwICsxLDEyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSMSA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworUk9VVEVSMyA9IDQKK0VEMSA9IDUKKworY2xhc3MgQ2VydF81XzVfOF9TcGxpdFJvdXRlcnNMb3N0TGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjMoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIF9zZXRVcFJvdXRlcjMoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVIxXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFJvdXRlcjMoKQorICAgICAgICB0aW1lLnNsZWVwKDE0MCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkgICAgICAgIAorICAgICAgICB0aW1lLnNsZWVwKDYwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjRdICE9ICdmZTgwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVIxXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wMV9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoTGVhZGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wMV9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoTGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxNmU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzAxX05ldHdvcmtEYXRhUmVnaXN0ZXJCZWZvcmVBdHRhY2hMZWFkZXIucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEMSA9IDMKK1NFRDEgPSA0CisKK2NsYXNzIENlcnRfNV82XzFfTmV0d29ya0RhdGFMZWFkZXJBc0JyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzAyX05ldHdvcmtEYXRhUmVnaXN0ZXJCZWZvcmVBdHRhY2hSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzAyX05ldHdvcmtEYXRhUmVnaXN0ZXJCZWZvcmVBdHRhY2hSb3V0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBkZDllYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDJfTmV0d29ya0RhdGFSZWdpc3RlckJlZm9yZUF0dGFjaFJvdXRlci5weQpAQCAtMCwwICsxLDExMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQxID0gMworU0VEMSA9IDQKKworY2xhc3MgQ2VydF81XzZfMl9OZXR3b3JrRGF0YVJvdXRlckFzQnIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFybycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDNfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoTGVhZGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wM19OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hMZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI2YjBhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDNfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoTGVhZGVyLnB5CkBAIC0wLDAgKzEsMTEzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDEgPSAzCitTRUQxID0gNAorCitjbGFzcyBDZXJ0XzVfNl8zX05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaExlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA0X05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaFJvdXRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDRfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxNzEyZDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA0X05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaFJvdXRlci5weQpAQCAtMCwwICsxLDExMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQxID0gMworU0VEMSA9IDQKKworY2xhc3MgQ2VydF81XzZfNF9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFybycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wNV9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA1X05ldHdvcmtEYXRhUmVnaXN0ZXJBZnRlckF0dGFjaFJvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2NkOGIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wNV9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkKQEAgLTAsMCArMSwxMzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEMSA9IDMKK1NFRDEgPSA0CisKK2NsYXNzIENlcnRfNV82XzVfTmV0d29ya0RhdGFSZWdpc3RlckFmdGVyQXR0YWNoUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDozOjovNjQnLCAncGFjcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDZfTmV0d29ya0RhdGFFeHBpcmF0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wNl9OZXR3b3JrRGF0YUV4cGlyYXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGFjYmE5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDZfTmV0d29ya0RhdGFFeHBpcmF0aW9uLnB5CkBAIC0wLDAgKzEsMTU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDEgPSAzCitTRUQxID0gNAorCitjbGFzcyBDZXJ0XzVfNl82X05ldHdvcmtEYXRhRXhwaXJhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF90aW1lb3V0KDMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3BhY3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlbW92ZV9wcmVmaXgoJzIwMDE6MjowOjM6Oi82NCcpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDozJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RvcCgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA3X05ldHdvcmtEYXRhUmVxdWVzdFJFRUQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA3X05ldHdvcmtEYXRhUmVxdWVzdFJFRUQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjM0MDRiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzZfMDdfTmV0d29ya0RhdGFSZXF1ZXN0UkVFRC5weQpAQCAtMCwwICsxLDEwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorUkVFRCA9IDMKKworY2xhc3MgQ2VydF81XzZfN19OZXR3b3JrRGF0YVJlcXVlc3RSRUVEKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDozOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisKKyAgICAgICAgdGltZS5zbGVlcCgyKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDozJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDozJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA4X0NvbnRleHRNYW5hZ2VtZW50LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wOF9Db250ZXh0TWFuYWdlbWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZWZmMWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wOF9Db250ZXh0TWFuYWdlbWVudC5weQpAQCAtMCwwICsxLDEyNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorRUQgPSAzCisKK2NsYXNzIENlcnRfNV82XzhfQ29udGV4dE1hbmFnZW1lbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2NvbnRleHRfcmV1c2VfZGVsYXkoMTApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCgyKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRF0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVtb3ZlX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDozXSA9PSAnMjAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRF0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6M10gPT0gJzIwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbRURdLnBpbmcoYWRkcikpCisKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MycgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjNdID09ICcyMDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0VEXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wOV9OZXR3b3JrRGF0YUZvcndhcmRpbmcucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNV82XzA5X05ldHdvcmtEYXRhRm9yd2FyZGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzM2Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfNl8wOV9OZXR3b3JrRGF0YUZvcndhcmRpbmcucHkKQEAgLTAsMCArMSwxMzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitST1VURVIyID0gMworRUQgPSA0CitTRUQgPSA1CisKK2NsYXNzIENlcnRfNV82XzlfTmV0d29ya0RhdGFGb3J3YXJkaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnLCAnbWVkJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9yb3V0ZSgnMjAwMToyOjA6Mjo6LzY0JywgJ21lZCcpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycsICdsb3cnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF9yb3V0ZSgnMjAwMToyOjA6Mjo6LzY0JywgJ2hpZ2gnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tTRURdLnBpbmcoJzIwMDE6MjowOjI6OjEnKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbU0VEXS5waW5nKCcyMDA3OjoxJykpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZW1vdmVfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycsICdoaWdoJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubm9kZXNbU0VEXS5waW5nKCcyMDA3OjoxJykpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZW1vdmVfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycsICdtZWQnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tTRURdLnBpbmcoJzIwMDc6OjEnKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDFfS2V5U3luY2hyb25pemF0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfOF8wMV9LZXlTeW5jaHJvbml6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDU4MzQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDFfS2V5U3luY2hyb25pemF0aW9uLnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0VEID0gMgorCitjbGFzcyBDZXJ0XzVfOF8xX0tleVN5bmNocm9uaXphdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmICdmZjpmZTAwJyBub3QgaW4gYWRkcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tFRF0ucGluZyhhZGRyKSkKKworICAgICAgICBrZXlfc2VxdWVuY2VfY291bnRlciA9IHNlbGYubm9kZXNbRURdLmdldF9rZXlfc2VxdWVuY2VfY291bnRlcigpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9rZXlfc2VxdWVuY2VfY291bnRlcihrZXlfc2VxdWVuY2VfY291bnRlciArIDEwKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgJ2ZmOmZlMDAnIG5vdCBpbiBhZGRyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ub2Rlc1tFRF0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDJfS2V5SW5jcmVtZW50LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfOF8wMl9LZXlJbmNyZW1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWI0Mjg1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDJfS2V5SW5jcmVtZW50LnB5CkBAIC0wLDAgKzEsODIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKKworY2xhc3MgQ2VydF81XzhfMl9LZXlJbmNyZW1lbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICJyb3V0ZXIiKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGtleV9zZXF1ZW5jZV9jb3VudGVyID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9rZXlfc2VxdWVuY2VfY291bnRlcigpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoa2V5X3NlcXVlbmNlX2NvdW50ZXIgKyAxKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzVfOF8wM19LZXlJbmNyZW1lbnRSb2xsT3Zlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDNfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWY5YTlkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF81XzhfMDNfS2V5SW5jcmVtZW50Um9sbE92ZXIucHkKQEAgLTAsMCArMSw4NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorCitjbGFzcyBDZXJ0XzVfOF8zX0tleUluY3JlbWVudFJvbGxPdmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9rZXlfc2VxdWVuY2VfY291bnRlcigxMjcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9rZXlfc3dpdGNoX2d1YXJkdGltZSgwKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBrZXlfc2VxdWVuY2VfY291bnRlciA9IHNlbGYubm9kZXNbTEVBREVSXS5nZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKGtleV9zZXF1ZW5jZV9jb3VudGVyICsgMSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDFfUm91dGVyQXR0YWNoLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wMV9Sb3V0ZXJBdHRhY2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGJlMzEzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDFfUm91dGVyQXR0YWNoLnB5CkBAIC0wLDAgKzEsNjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0VEID0gMgorCitjbGFzcyBDZXJ0XzZfMV8xX1JvdXRlckF0dGFjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDJfUkVFREF0dGFjaC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDJfUkVFREF0dGFjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDA0YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wMl9SRUVEQXR0YWNoLnB5CkBAIC0wLDAgKzEsODIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JFRUQgPSAyCitFRCA9IDMKKworY2xhc3MgQ2VydF82XzFfMl9SRUVEQXR0YWNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQoMCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAzX1JvdXRlckF0dGFjaENvbm5lY3Rpdml0eS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDNfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlNDE1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzAzX1JvdXRlckF0dGFjaENvbm5lY3Rpdml0eS5weQpAQCAtMCwwICsxLDEwNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitST1VURVIzID0gNAorRUQgPSA1CisKK2NsYXNzIENlcnRfNl8xXzNfUm91dGVyQXR0YWNoQ29ubmVjdGl2aXR5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXS5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbaV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tST1VURVIzXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wNF9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wNF9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkNDQxOGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA0X1JFRURBdHRhY2hDb25uZWN0aXZpdHkucHkKQEAgLTAsMCArMSwxMTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitSRUVEMCA9IDMKK1JFRUQxID0gNAorRUQgPSA1CisKK2NsYXNzIENlcnRfNl8xXzRfUkVFREF0dGFjaENvbm5lY3Rpdml0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUkVFRDBdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQwXS5zZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKDApCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDBdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRDFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorICAgICAgICBzZWxmLm5vZGVzW1JFRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRUQwXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEMF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tSRUVEMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wNV9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDVfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYzYWU1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDVfUm91dGVyQXR0YWNoTGlua1F1YWxpdHkucHkKQEAgLTAsMCArMSw5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitFRCA9IDQKKworY2xhc3MgQ2VydF82XzFfNV9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCksIHJzc2k9LTg1KQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpLCByc3NpPS04NSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA2X1JFRURBdHRhY2hMaW5rUXVhbGl0eS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDZfUkVFREF0dGFjaExpbmtRdWFsaXR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlZmVhMjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8xXzA2X1JFRURBdHRhY2hMaW5rUXVhbGl0eS5weQpAQCAtMCwwICsxLDk2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitSRUVEID0gMgorUk9VVEVSMiA9IDMKK0VEID0gNAorCitjbGFzcyBDZXJ0XzZfMV82X1JFRURBdHRhY2hMaW5rUXVhbGl0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tSRUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUkVFRF0uc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZCgwKQorICAgICAgICBzZWxmLm5vZGVzW1JFRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpLCByc3NpPS04NSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JFRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSwgcnNzaT0tODUpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tSRUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JFRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUkVFRF0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMV8wN19FRFN5bmNocm9uaXphdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDdfRURTeW5jaHJvbml6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTdjYmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzFfMDdfRURTeW5jaHJvbml6YXRpb24ucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUjEgPSAyCitFRCA9IDMKK1JPVVRFUjIgPSA0CitST1VURVIzID0gNQorCitjbGFzcyBDZXJ0XzZfMV83X0VEU3luY2hyb25pemF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIzXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjNdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSM10uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIzXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjNdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSM10uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMl8wMV9OZXdQYXJ0aXRpb24ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8yXzAxX05ld1BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYWMwNzNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfMl8wMV9OZXdQYXJ0aXRpb24ucHkKQEAgLTAsMCArMSw5MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK0VEID0gMworCitjbGFzcyBDZXJ0XzZfMl8xX05ld1BhcnRpdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw0KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW1JPVVRFUjFdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8yXzAyX05ld1BhcnRpdGlvbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzJfMDJfTmV3UGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExYzNmM2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8yXzAyX05ld1BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDEwNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSMSA9IDIKK1JPVVRFUjIgPSAzCitFRCA9IDQKKworY2xhc3MgQ2VydF82XzJfMl9OZXdQYXJ0aXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbmV0d29ya19pZF90aW1lb3V0KDExMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0b3AoKQorICAgICAgICB0aW1lLnNsZWVwKDE0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbUk9VVEVSMV0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzNfMDFfT3JwaGFuUmVhdHRhY2gucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8zXzAxX09ycGhhblJlYXR0YWNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxZTUyMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8zXzAxX09ycGhhblJlYXR0YWNoLnB5CkBAIC0wLDAgKzEsOTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEID0gMworCitjbGFzcyBDZXJ0XzZfM18xX09ycGhhblJlYXR0YWNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF90aW1lb3V0KDEwKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0b3AoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgdGltZS5zbGVlcCgyMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl8zXzAyX05ldHdvcmtEYXRhVXBkYXRlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfM18wMl9OZXR3b3JrRGF0YVVwZGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hM2I5YWQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfM18wMl9OZXR3b3JrRGF0YVVwZGF0ZS5weQpAQCAtMCwwICsxLDk4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRCA9IDIKKworY2xhc3MgQ2VydF81XzZfMl9OZXR3b3JrRGF0YVVwZGF0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF90aW1lb3V0KDEwKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MSc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZW1vdmVfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl80XzAxX0xpbmtMb2NhbC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzRfMDFfTGlua0xvY2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiZjhlZDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl80XzAxX0xpbmtMb2NhbC5weQpAQCAtMCwwICsxLDc4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRCA9IDIKKworY2xhc3MgQ2VydF82XzRfMV9MaW5rTG9jYWwodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSA9PSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIsIHNpemU9MjU2KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKCdmZjAyOjoxJywgc2l6ZT0yNTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDI6OjEnKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzRfMDJfUmVhbG1Mb2NhbC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzRfMDJfUmVhbG1Mb2NhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wM2Y4MzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNF8wMl9SZWFsbUxvY2FsLnB5CkBAIC0wLDAgKzEsOTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEID0gMworCitjbGFzcyBDZXJ0XzVfM18yX1JlYWxtTG9jYWwodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyLCBzaXplPTI1NikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYwMzo6MScsIG51bV9yZXNwb25zZXM9Miwgc2l6ZT0yNTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoJ2ZmMDM6OjEnLCBudW1fcmVzcG9uc2VzPTIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYzMzowMDQwOmZkZGU6YWQwMDpiZWVmOjA6MDoxJywgbnVtX3Jlc3BvbnNlcz0yLCBzaXplPTI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZygnZmYzMzowMDQwOmZkZGU6YWQwMDpiZWVmOjA6MDoxJywgbnVtX3Jlc3BvbnNlcz0yKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzVfMDFfQ2hpbGRSZXNldFN5bmNocm9uaXplLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNV8wMV9DaGlsZFJlc2V0U3luY2hyb25pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg0YTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF82XzVfMDFfQ2hpbGRSZXNldFN5bmNocm9uaXplLnB5CkBAIC0wLDAgKzEsOTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK0VEID0gMgorCitjbGFzcyBDZXJ0XzZfNV8xX0NoaWxkUmVzZXRTeW5jaHJvbml6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF90aW1lb3V0KDMpCisgICAgICAgIHNlbGYuX3NldFVwRWQoKQorCisgICAgZGVmIF9zZXRVcEVkKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKSAgICAgICAgCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwRWQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X3RpbWVvdXQoMTAwKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwRWQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF90aW1lb3V0KDEwMCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSA9PSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNV8wMl9DaGlsZFJlc2V0UmVhdHRhY2gucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl81XzAyX0NoaWxkUmVzZXRSZWF0dGFjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MWNiODIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNV8wMl9DaGlsZFJlc2V0UmVhdHRhY2gucHkKQEAgLTAsMCArMSw5MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorRUQgPSAyCisKK2NsYXNzIENlcnRfNl81XzJfQ2hpbGRSZXNldFJlYXR0YWNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5fc2V0VXBFZCgpCisKKyAgICBkZWYgX3NldFVwRWQoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwRWQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKworICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRURdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDo0XSA9PSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNl8wMV9LZXlJbmNyZW1lbnQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl82XzAxX0tleUluY3JlbWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDNjYWYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNl8wMV9LZXlJbmNyZW1lbnQucHkKQEAgLTAsMCArMSw4MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorRUQgPSAyCisKK2NsYXNzIENlcnRfNl82XzFfS2V5SW5jcmVtZW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9rZXlfc3dpdGNoX2d1YXJkdGltZSgwKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbRURdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoMCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgImNoaWxkIikKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGtleV9zZXF1ZW5jZV9jb3VudGVyID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9rZXlfc2VxdWVuY2VfY291bnRlcigpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoa2V5X3NlcXVlbmNlX2NvdW50ZXIgKyAxKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfNl82XzAyX0tleUluY3JlbWVudFJvbGxPdmVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNl8wMl9LZXlJbmNyZW1lbnRSb2xsT3Zlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOTQ3YzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzZfNl8wMl9LZXlJbmNyZW1lbnRSb2xsT3Zlci5weQpAQCAtMCwwICsxLDgzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitFRCA9IDIKKworY2xhc3MgQ2VydF82XzZfMl9LZXlJbmNyZW1lbnQxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDMpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9rZXlfc3dpdGNoX2d1YXJkdGltZSgwKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKDEyNykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKDApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRURdLmdldF9hZGRycygpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGtleV9zZXF1ZW5jZV9jb3VudGVyID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9rZXlfc2VxdWVuY2VfY291bnRlcigpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoa2V5X3NlcXVlbmNlX2NvdW50ZXIgKyAxKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzAxX0JvcmRlclJvdXRlckFzTGVhZGVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wMV9Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZGJkOTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wMV9Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weQpAQCAtMCwwICsxLDExMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSID0gMQorUk9VVEVSID0gMgorU0VEMSA9IDMKK0VEMSA9IDQKKworY2xhc3MgQ2VydF83XzFfMV9Cb3JkZXJSb3V0ZXJBc0xlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6MTo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjI6Oi82NCcsICdwYXJvJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzdfMV8wMl9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDJfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJkZGIwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDJfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKK1JPVVRFUiA9IDIKK0VEMiA9IDMKK1NFRDIgPSA0CisKK2NsYXNzIENlcnRfN18xXzJfQm9yZGVyUm91dGVyQXNSb3V0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF9wcmVmaXgoJzIwMDE6MjowOjE6Oi82NCcsICdwYXJvcycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoyOjovNjQnLCAncGFybycpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZWdpc3Rlcl9uZXRkYXRhKCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQyXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDNfQm9yZGVyUm91dGVyQXNMZWFkZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzAzX0JvcmRlclJvdXRlckFzTGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyMWMwYTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzAzX0JvcmRlclJvdXRlckFzTGVhZGVyLnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitTRUQxID0gMworRUQxID0gNAorCitjbGFzcyBDZXJ0XzdfMV8zX0JvcmRlclJvdXRlckFzTGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbU0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYW55KCcyMDAxOjI6MDoyJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDRfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzA0X0JvcmRlclJvdXRlckFzUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZDE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzA0X0JvcmRlclJvdXRlckFzUm91dGVyLnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDIgPSAzCitTRUQyID0gNAorCitjbGFzcyBDZXJ0XzdfMV80X0JvcmRlclJvdXRlckFzUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF83XzFfMDVfQm9yZGVyUm91dGVyQXNSb3V0ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzA1X0JvcmRlclJvdXRlckFzUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3M2EwM2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfN18xXzA1X0JvcmRlclJvdXRlckFzUm91dGVyLnB5CkBAIC0wLDAgKzEsMTMyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCitFRDIgPSAzCitTRUQyID0gNAorCitjbGFzcyBDZXJ0XzdfMV81X0JvcmRlclJvdXRlckFzUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbU0VEMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDJdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDJdLnNldF9tb2RlKCdzJykKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMl0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMl0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRDJdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfcHJlZml4KCcyMDAxOjI6MDoxOjovNjQnLCAncGFyb3MnKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mjo6LzY0JywgJ3Bhcm8nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0ucmVnaXN0ZXJfbmV0ZGF0YSgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBhZGRycyA9IHNlbGYubm9kZXNbRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIGZvciBhZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6MScgb3IgYWRkclswOjEwXSA9PSAnMjAwMToyOjA6Mic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGFkZHIpKQorCisgICAgICAgIGFkZHJzID0gc2VsZi5ub2Rlc1tTRUQyXS5nZXRfYWRkcnMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDoxJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3ByZWZpeCgnMjAwMToyOjA6Mzo6LzY0JywgJ3Bhcm9zJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlZ2lzdGVyX25ldGRhdGEoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW0VEMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnMjAwMToyOjA6MScgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjInIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCcyMDAxOjI6MDozJyBpbiBhZGRyWzA6MTBdIGZvciBhZGRyIGluIGFkZHJzKSkKKyAgICAgICAgZm9yIGFkZHIgaW4gYWRkcnM6CisgICAgICAgICAgICBpZiBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoxJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDoyJyBvciBhZGRyWzA6MTBdID09ICcyMDAxOjI6MDozJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoYWRkcikpCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLm5vZGVzW1NFRDJdLmdldF9hZGRycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjEnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSgnMjAwMToyOjA6MicgaW4gYWRkclswOjEwXSBmb3IgYWRkciBpbiBhZGRycykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoJzIwMDE6MjowOjMnIGluIGFkZHJbMDoxMF0gZm9yIGFkZHIgaW4gYWRkcnMpKQorICAgICAgICBmb3IgYWRkciBpbiBhZGRyczoKKyAgICAgICAgICAgIGlmIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjEnIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjInIG9yIGFkZHJbMDoxMF0gPT0gJzIwMDE6MjowOjMnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZy5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYWRmZjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzhfMV8wMV9Db21taXNzaW9uaW5nLnB5CkBAIC0wLDAgKzEsNzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NPTU1JU1NJT05FUiA9IDEKK0pPSU5FUiA9IDIKKworY2xhc3MgQ2VydF84XzFfMDFfQ29tbWlzc2lvbmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tYXN0ZXJrZXkoJ2RlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmJykKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uc2V0X21hc3RlcmtleSgnMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYnKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X2hhc2htYWNhZGRyKCksICdvcGVudGhyZWFkJykKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmpvaW5lcl9zdGFydCgnb3BlbnRocmVhZCcpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9tYXN0ZXJrZXkoKSwgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8xXzAyX0NvbW1pc3Npb25pbmcucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8xXzAyX0NvbW1pc3Npb25pbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjE1ZmUyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF84XzFfMDJfQ29tbWlzc2lvbmluZy5weQpAQCAtMCwwICsxLDcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDT01NSVNTSU9ORVIgPSAxCitKT0lORVIgPSAyCisKK2NsYXNzIENlcnRfOF8xXzAyX0NvbW1pc3Npb25pbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbWFzdGVya2V5KCdkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tYXN0ZXJrZXkoJzAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnRocmVhZF9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX2FkZF9qb2luZXIoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9oYXNobWFjYWRkcigpLCAnb3BlbnRocmVhZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmludGVyZmFjZV91cCgpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5qb2luZXJfc3RhcnQoJ2RhZXJodG5lcG8nKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfbWFzdGVya2V5KCksIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfbWFzdGVya2V5KCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8yXzAxX0pvaW5lclJvdXRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF84XzJfMDFfSm9pbmVyUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0MjZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8yXzAxX0pvaW5lclJvdXRlci5weQpAQCAtMCwwICsxLDEwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ09NTUlTU0lPTkVSID0gMQorSk9JTkVSX1JPVVRFUiA9IDIKK0pPSU5FUiA9IDMKKworY2xhc3MgQ2VydF84XzJfMDFfSm9pbmVyUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21hc3RlcmtleSgnZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYnKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5zZXRfbWFzdGVya2V5KCcwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tYXN0ZXJrZXkoJzAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2hhc2htYWNhZGRyKCksICdvcGVudGhyZWFkJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfaGFzaG1hY2FkZHIoKSwgJ29wZW50aHJlYWQyJykKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2hhc2htYWNhZGRyKCkpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5qb2luZXJfc3RhcnQoJ29wZW50aHJlYWQnKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X21hc3RlcmtleSgpLCBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X21hc3RlcmtleSgpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X2hhc2htYWNhZGRyKCkpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uam9pbmVyX3N0YXJ0KCdvcGVudGhyZWFkMicpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9tYXN0ZXJrZXkoKSwgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9hZGRyNjQoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8yXzAyX0pvaW5lclJvdXRlci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF84XzJfMDJfSm9pbmVyUm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhMDBjNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOF8yXzAyX0pvaW5lclJvdXRlci5weQpAQCAtMCwwICsxLDEwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ09NTUlTU0lPTkVSID0gMQorSk9JTkVSX1JPVVRFUiA9IDIKK0pPSU5FUiA9IDMKKworY2xhc3MgQ2VydF84XzJfMDJfSm9pbmVyUm91dGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21hc3RlcmtleSgnZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYnKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl9ST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5zZXRfbWFzdGVya2V5KCcwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZicpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLnNldF9tYXN0ZXJrZXkoJzAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2hhc2htYWNhZGRyKCksICdvcGVudGhyZWFkJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYubm9kZXNbSk9JTkVSXS5nZXRfaGFzaG1hY2FkZHIoKSwgJ29wZW50aHJlYWQyJykKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2hhc2htYWNhZGRyKCkpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uaW50ZXJmYWNlX3VwKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tKT0lORVJfUk9VVEVSXS5qb2luZXJfc3RhcnQoJ29wZW50aHJlYWQnKQorICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X21hc3RlcmtleSgpLCBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X21hc3RlcmtleSgpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0udGhyZWFkX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0pPSU5FUl0uZ2V0X2hhc2htYWNhZGRyKCkpCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbSk9JTkVSX1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHNlbGYubm9kZXNbSk9JTkVSXS5pbnRlcmZhY2VfdXAoKQorICAgICAgICBzZWxmLm5vZGVzW0pPSU5FUl0uam9pbmVyX3N0YXJ0KCcyZGFlcmh0bmVwbycpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5ub2Rlc1tKT0lORVJdLmdldF9tYXN0ZXJrZXkoKSwgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDRfQWN0aXZlRGF0YXNldC5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDRfQWN0aXZlRGF0YXNldC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YWMzYmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wNF9BY3RpdmVEYXRhc2V0LnB5CkBAIC0wLDAgKzEsMTYzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCisKK2NsYXNzIENlcnRfOV8yXzE1X1BlbmRpbmdQYXJ0aXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsMyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgcGFuaWQ9MHhmYWNlLCBtYXN0ZXJfa2V5PScwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBwYW5pZD0weGZhY2UsIG1hc3Rlcl9rZXk9JzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hc2s9MHgwMDFmZmZlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkPScwMDBkYjcwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0nR1JMJykKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbmV0d29ya19uYW1lKCksICdHUkwnKQorCisgICAgICAgICMgU3RlcCA2CisgICAgICAgICMgQXR0ZW1wdCB0byBzZXQgQ2hhbm5lbCBUTFYKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9hY3RpdmVfc2V0KGFjdGl2ZV90aW1lc3RhbXA9MTAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD0xOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSd0aHJlYWRjZXJ0JykKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbmV0d29ya19uYW1lKCksICdHUkwnKQorCisgICAgICAgICMgU3RlcCA4CisgICAgICAgICMgQXR0ZW1wdCB0byBzZXQgTWVzaCBMb2NhbCBQcmVmaXggVExWCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZWUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaF9sb2NhbD0nZmQwMDowZGI3OjonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdVTCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgMTAKKyAgICAgICAgIyBBdHRlbXB0IHRvIHNldCBOZXR3b3JrIE1hc3RlciBLZXkgVExWCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleT0nMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaF9sb2NhbD0nZmQwMDowZGI3OjonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdVTCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgMTIKKyAgICAgICAgIyBBdHRlbXB0IHRvIHNldCBQQU4gSUQgVExWCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleT0nMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaF9sb2NhbD0nZmQwMDowZGI3OjonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdVTCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD0weGFmY2UpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgMTQKKyAgICAgICAgIyBJbnZhbGlkIENvbW1pc3Npb25lciBTZXNzaW9uIElECisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdVTCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnk9JzBiMDJhYmNkJykKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfbmV0d29ya19uYW1lKCksICdHUkwnKQorCisgICAgICAgICMgU3RlcCAxNgorICAgICAgICAjIE9sZCBBY3RpdmUgVGltZXN0YW1wCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdVTCcpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICAjIFN0ZXAgMTgKKyAgICAgICAgIyBVbmV4cGVjdGVkIFN0ZWVyaW5nIERhdGEgVExWCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdVTCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnk9JzA4MDYxMTMzMjA0NDAwMDAnKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgJ1VMJykKKworICAgICAgICAjIFN0ZXAgMjAKKyAgICAgICAgIyBVbmRlZmluZWQgVExWCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wPTEwOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaz0weDAwMWZmZmUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfcGFuaWQ9JzAwMGRiNzAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdHUkwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5PSc4MjAyYWE1NScpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCAnR1JMJykKKworICAgICAgICBpcGFkZHJzID0gc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRycygpCisgICAgICAgIGZvciBpcGFkZHIgaW4gaXBhZGRyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wN19EZWxheVRpbWVyLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wN19EZWxheVRpbWVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzNDdiNjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA3X0RlbGF5VGltZXIucHkKQEAgLTAsMCArMSwxMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK1BBTklEX0lOSVQgPSAweGZhY2UKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSID0gMgorUk9VVEVSID0gMworCitMRUFERVJfQUNUSVZFX1RJTUVTVEFNUCA9IDEwCitST1VURVJfQUNUSVZFX1RJTUVTVEFNUCA9IDIwCitST1VURVJfUEVORElOR19USU1FU1RBTVAgPSAzMAorUk9VVEVSX1BFTkRJTkdfQUNUSVZFX1RJTUVTVEFNUCA9IDI1CisKK0NPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwgPSAyMAorQ09NTUlTU0lPTkVSX1BFTkRJTkdfUEFOSUQgPSAweGFmY2UKKworY2xhc3MgQ2VydF85XzJfN19EZWxheVRpbWVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDQpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoTEVBREVSX0FDVElWRV9USU1FU1RBTVApCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcGFuaWQoUEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYW5pZChQQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhcnRpdGlvbl9pZCgweGZmZmZmZmZmKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KFJPVVRFUl9BQ1RJVkVfVElNRVNUQU1QKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BlbmRpbmdfZGF0YXNldChST1VURVJfUEVORElOR19USU1FU1RBTVAsIFJPVVRFUl9QRU5ESU5HX0FDVElWRV9USU1FU1RBTVApCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcGFuaWQoUEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9wYXJ0aXRpb25faWQoMHgxKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorCisgICAgICAgIHRpbWUuc2xlZXAoMzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD00MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTEwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9Q09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1DT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKyAgICAgICAgdGltZS5zbGVlcCg0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3BhbmlkKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfcGFuaWQoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfUEFOSUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9wYW5pZCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfY2hhbm5lbCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfY2hhbm5lbCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfY2hhbm5lbCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wOF9QZXJzaXN0ZW50RGF0YXNldHMucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA4X1BlcnNpc3RlbnREYXRhc2V0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MWEyOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8wOF9QZXJzaXN0ZW50RGF0YXNldHMucHkKQEAgLTAsMCArMSwxOTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUiA9IDMKK0VEID0gNAorU0VEID0gNQorCitDSEFOTkVMX0lOSVQgPSAxOQorUEFOSURfSU5JVCA9IDB4ZmFjZQorTEVBREVSX0FDVElWRV9USU1FU1RBTVAgPSAxMAorCitDT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMID0gMjAKK0NPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEID0gMHhhZmNlCisKK2NsYXNzIENlcnRfOV8yXzhfUGVyc2lzdGVudERhdGFzZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDYpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoTEVBREVSX0FDVElWRV9USU1FU1RBTVAsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWw9Q0hBTk5FTF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KExFQURFUl9BQ1RJVkVfVElNRVNUQU1QLCBwYW5pZD1QQU5JRF9JTklULCBjaGFubmVsPUNIQU5ORUxfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRF0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9hY3RpdmVfZGF0YXNldChMRUFERVJfQUNUSVZFX1RJTUVTVEFNUCwgcGFuaWQ9UEFOSURfSU5JVCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyKCkKKworICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfYWN0aXZlX2RhdGFzZXQoTEVBREVSX0FDVElWRV9USU1FU1RBTVAsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWw9Q0hBTk5FTF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5fc2V0VXBFZCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLnNldF9hY3RpdmVfZGF0YXNldChMRUFERVJfQUNUSVZFX1RJTUVTVEFNUCwgcGFuaWQ9UEFOSURfSU5JVCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYuX3NldFVwU2VkKCkKKworICAgIGRlZiBfc2V0VXBSb3V0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIF9zZXRVcEVkKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0VEXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0VEXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIF9zZXRVcFNlZChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRURdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRURdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9NzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZXI9NjAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD1DT01NSVNTSU9ORVJfUEVORElOR19DSEFOTkVMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPUNPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0ucmVzZXQoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0ucmVzZXQoKQorCisgICAgICAgIHRpbWUuc2xlZXAoNjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3BhbmlkKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfcGFuaWQoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfUEFOSUQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKyAgICAgICAgCisgICAgICAgICMgcmVzZXQgdGhlIGRldmljZXMgaGVyZSBhZ2FpbiB0byBzaW11bGF0ZSB0aGUgZmFjdCB0aGF0IHRoZSBkZXZpY2VzIHdlcmUgZGlzYWJsZWQgdGhlIGVudGlyZSB0aW1lCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcEVkKCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRF0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW1NFRF0ucmVzZXQoKQorICAgICAgICBzZWxmLl9zZXRVcFNlZCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEXS5zdGFydCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3BhbmlkKCksIFBBTklEX0lOSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X3BhbmlkKCksIFBBTklEX0lOSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9wYW5pZCgpLCBQQU5JRF9JTklUKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9jaGFubmVsKCksIENIQU5ORUxfSU5JVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0lOSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRURdLmdldF9jaGFubmVsKCksIENIQU5ORUxfSU5JVCkKKworICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3BhbmlkKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRURdLmdldF9wYW5pZCgpLCBDT01NSVNTSU9ORVJfUEVORElOR19QQU5JRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRF0uZ2V0X3BhbmlkKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX1BBTklEKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9jaGFubmVsKCksIENPTU1JU1NJT05FUl9QRU5ESU5HX0NIQU5ORUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRF0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1NFRF0uZ2V0X2NoYW5uZWwoKSwgQ09NTUlTU0lPTkVSX1BFTkRJTkdfQ0hBTk5FTCkKKworICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisgCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbU0VEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA5X1BlbmRpbmdQYXJ0aXRpb24ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzA5X1BlbmRpbmdQYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWMxY2I1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMDlfUGVuZGluZ1BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDE1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ0hBTk5FTF9JTklUID0gMTkKK1BBTklEX0lOSVQgPSAweGZhY2UKKworQ0hBTk5FTF9GSU5BTCA9IDE5CitQQU5JRF9GSU5BTCA9IDB4YWJjZAorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCitST1VURVIxID0gMworUk9VVEVSMiA9IDQKKworY2xhc3MgQ2VydF85XzJfMDlfUGVuZGluZ1BhcnRpdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFydGl0aW9uX2lkKDB4ZmZmZmZmZmYpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbmV0d29ya19pZF90aW1lb3V0KDEwMCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9MjEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTUwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPTB4YWZjZSkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5yZW1vdmVfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnJlbW92ZV93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgdGltZS5zbGVlcCgxNDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD01MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcD00MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTIwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbD1DSEFOTkVMX0ZJTkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1QQU5JRF9GSU5BTCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgdGltZS5zbGVlcCgyMDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9jaGFubmVsKCksIENIQU5ORUxfRklOQUwpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzEwX1BlbmRpbmdQYXJ0aXRpb24ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzEwX1BlbmRpbmdQYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNkYmQzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTBfUGVuZGluZ1BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDE2NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ0hBTk5FTF9JTklUID0gMTkKK1BBTklEX0lOSVQgPSAweGZhY2UKKworQ0hBTk5FTF9GSU5BTCA9IDE2CitQQU5JRF9GSU5BTCA9IDB4YWZjZQorCitDT01NSVNTSU9ORVIgPSAxCitMRUFERVIgPSAyCitST1VURVIxID0gMworRUQxID0gNAorU0VEMSA9IDUKKworY2xhc3MgQ2VydF85XzJfMTBfUGVuZGluZ1BhcnRpdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFydGl0aW9uX2lkKDB4ZmZmZmZmZmYpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9hY3RpdmVfZGF0YXNldCgxNSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfbW9kZSgncycpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfdGltZW91dCgzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9MTY1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTE1MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsPUNIQU5ORUxfRklOQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9UEFOSURfRklOQUwpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBwcmludChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2NoYW5uZWwoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9jaGFubmVsKCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2NoYW5uZWwoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tFRDFdLmdldF9jaGFubmVsKCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbU0VEMV0uZ2V0X2NoYW5uZWwoKSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0ucmVtb3ZlX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5yZW1vdmVfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoMTYwKQorCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfY2hhbm5lbCgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2NoYW5uZWwoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfY2hhbm5lbCgpKQorICAgICAgICBwcmludChzZWxmLm5vZGVzW0VEMV0uZ2V0X2NoYW5uZWwoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfY2hhbm5lbCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfY2hhbm5lbCgpLCBDSEFOTkVMX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTF9GSU5BTCkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHRpbWUuc2xlZXAoNjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5ub2Rlc1tMRUFERVJdLnBpbmcoaXBhZGRyKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTFfTWFzdGVyS2V5LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xMV9NYXN0ZXJLZXkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWUyODIyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTFfTWFzdGVyS2V5LnB5CkBAIC0wLDAgKzEsMTYwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitLRVkxID0gJzAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmJworS0VZMiA9ICcwZjBlMGQwYzBiMGEwOTA4MDcwNjA1MDQwMzAyMDEwMCcKKworQ0hBTk5FTF9JTklUID0gMTkKK1BBTklEX0lOSVQgPSAweGZhY2UKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSID0gMgorUk9VVEVSMSA9IDMKK0VEMSA9IDQKK1NFRDEgPSA1CisKK2NsYXNzIENlcnRfOV8yXzExX01hc3RlcktleSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSw2KToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklULCBtYXN0ZXJfa2V5PUtFWTEpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEwLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X21vZGUoJ3JzbicpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tTRUQxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklULCBtYXN0ZXJfa2V5PUtFWTEpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0xMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTcwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTEwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXk9S0VZMikKKyAgICAgICAgdGltZS5zbGVlcCgzMTApCisKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9tYXN0ZXJrZXkoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbRUQxXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbU0VEMV0uZ2V0X21hc3RlcmtleSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfbWFzdGVya2V5KCksIEtFWTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfbWFzdGVya2V5KCksIEtFWTIpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTEwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgdGltZS5zbGVlcCgzMTApCisKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9tYXN0ZXJrZXkoKSkKKyAgICAgICAgcHJpbnQoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbRUQxXS5nZXRfbWFzdGVya2V5KCkpCisgICAgICAgIHByaW50KHNlbGYubm9kZXNbU0VEMV0uZ2V0X21hc3RlcmtleSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X21hc3RlcmtleSgpLCBLRVkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfbWFzdGVya2V5KCksIEtFWTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfbWFzdGVya2V5KCksIEtFWTEpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzEyX0Fubm91bmNlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xMl9Bbm5vdW5jZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzE2ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xMl9Bbm5vdW5jZS5weQpAQCAtMCwwICsxLDEzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworTEVBREVSMSA9IDEKK1JPVVRFUjEgPSAyCitMRUFERVIyID0gMworUk9VVEVSMiA9IDQKK01FRCA9IDUKKworREFUQVNFVDFfVElNRVNUQU1QID0gMjAKK0RBVEFTRVQxX0NIQU5ORUwgPSAxMQorREFUQVNFVDFfUEFOSUQgPSAweGZhY2UKKworREFUQVNFVDJfVElNRVNUQU1QID0gMTAKK0RBVEFTRVQyX0NIQU5ORUwgPSAxMgorREFUQVNFVDJfUEFOSUQgPSAweGFmY2UKKworY2xhc3MgQ2VydF85XzJfMTJfQW5ub3VuY2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNik6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfYWN0aXZlX2RhdGFzZXQoREFUQVNFVDFfVElNRVNUQU1QLCBjaGFubmVsPURBVEFTRVQxX0NIQU5ORUwsIHBhbmlkPURBVEFTRVQxX1BBTklEKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KERBVEFTRVQxX1RJTUVTVEFNUCwgY2hhbm5lbD1EQVRBU0VUMV9DSEFOTkVMLCBwYW5pZD1EQVRBU0VUMV9QQU5JRCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc2V0X2FjdGl2ZV9kYXRhc2V0KERBVEFTRVQyX1RJTUVTVEFNUCwgY2hhbm5lbD1EQVRBU0VUMl9DSEFOTkVMLCBwYW5pZD1EQVRBU0VUMV9QQU5JRCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X2FjdGl2ZV9kYXRhc2V0KERBVEFTRVQyX1RJTUVTVEFNUCwgY2hhbm5lbD1EQVRBU0VUMl9DSEFOTkVMLCBwYW5pZD1EQVRBU0VUMV9QQU5JRCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTUVEXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tNRURdLnNldF9hY3RpdmVfZGF0YXNldChEQVRBU0VUMl9USU1FU1RBTVAsIGNoYW5uZWw9REFUQVNFVDJfQ0hBTk5FTCwgcGFuaWQ9REFUQVNFVDFfUEFOSUQpCisgICAgICAgIHNlbGYubm9kZXNbTUVEXS5zZXRfbW9kZSgncnNuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tNRURdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTUVEXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSMV0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTUVEXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW01FRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5hbm5vdW5jZV9iZWdpbigweDEwMDAsIDEsIDEwMDAsIGlwYWRkcikKKyAgICAgICAgdGltZS5zbGVlcCgzMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW01FRF0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbTUVEXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSMV0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xM19FbmVyZ3lTY2FuLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xM19FbmVyZ3lTY2FuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkZTQwOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzEzX0VuZXJneVNjYW4ucHkKQEAgLTAsMCArMSwxMTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUjEgPSAzCitFRDEgPSA0CisKK2NsYXNzIENlcnRfOV8yXzEzX0VuZXJneVNjYW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdycycpCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5waW5nKGlwYWRkcikpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmVyZ3lfc2NhbigweDUwMDAwLCAweDAyLCAweDIwLCAweDNlOCwgaXBhZGRyKQorCisgICAgICAgIGlwYWRkcnMgPSBzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5waW5nKGlwYWRkcikpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmVyZ3lfc2NhbigweDUwMDAwLCAweDAyLCAweDIwLCAweDNlOCwgaXBhZGRyKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5lbmVyZ3lfc2NhbigweDUwMDAwLCAweDAyLCAweDIwLCAweDNlOCwgJ2ZmMzM6MDA0MDpmZGRlOmFkMDA6YmVlZjowOjA6MScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5waW5nKGlwYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE0X1BhbklkUXVlcnkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE0X1BhbklkUXVlcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNhYzNiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTRfUGFuSWRRdWVyeS5weQpAQCAtMCwwICsxLDEwNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSMSA9IDIKK1JPVVRFUjEgPSAzCitMRUFERVIyID0gNAorCitjbGFzcyBDZXJ0XzlfMl8xNF9QYW5JZFF1ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfcGFuaWQoMHhmYWNlKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9wYW5pZCgweGZhY2UpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9wYW5pZCgweGRlYWQpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVIyXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnBhbmlkX3F1ZXJ5KDB4ZGVhZCwgMHhmZmZmZmZmZiwgaXBhZGRyKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5wYW5pZF9xdWVyeSgweGRlYWQsIDB4ZmZmZmZmZmYsICdmZjMzOjAwNDA6ZmRkZTphZDAwOmJlZWY6MDowOjEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyMDZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE1X1BlbmRpbmdQYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwxMzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NIQU5ORUxfSU5JVCA9IDE5CitQQU5JRF9JTklUID0gMHhmYWNlCisKK1BBTklEX0ZJTkFMID0gMHhhYmNkCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUjEgPSAzCitST1VURVIyID0gNAorCitjbGFzcyBDZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXMgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLDUpOgorICAgICAgICAgICAgc2VsZi5ub2Rlc1tpXSA9IG5vZGUuTm9kZShpKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTUsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYXJ0aXRpb25faWQoMHhmZmZmZmZmZikKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDE1LCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTUsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIyKCkKKworICAgIGRlZiBfc2V0VXBSb3V0ZXIyKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfc3RhdGUoJ2xlYWRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmNvbW1pc3Npb25lcl9zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZW5kX21nbXRfcGVuZGluZ19zZXQocGVuZGluZ190aW1lc3RhbXA9MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcD03MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lcj02MDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaF9sb2NhbD0nZmQwMDowZGI5OjonKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fc2V0VXBSb3V0ZXIyKCkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9ODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZXI9MjAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hfbG9jYWw9J2ZkMDA6MGRiNzo6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1QQU5JRF9GSU5BTCkKKyAgICAgICAgdGltZS5zbGVlcCgxMDApCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKyAgICAgICAgdGltZS5zbGVlcCgxMDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3BhbmlkKCksIFBBTklEX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisKKyAgICAgICAgaXBhZGRycyA9IHNlbGYubm9kZXNbUk9VVEVSMl0uZ2V0X2FkZHJzKCkKKyAgICAgICAgZm9yIGlwYWRkciBpbiBpcGFkZHJzOgorICAgICAgICAgICAgaWYgaXBhZGRyWzA6NF0gIT0gJ2ZlODAnOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5vZGVzW0xFQURFUl0ucGluZyhpcGFkZHIpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3ZjlhMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE2X0FjdGl2ZVBlbmRpbmdQYXJ0aXRpb24ucHkKQEAgLTAsMCArMSwxNDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0NIQU5ORUxfSU5JVCA9IDE5CitQQU5JRF9JTklUID0gMHhmYWNlCisKK05FVFdPUktfTkFNRV9GSU5BTCA9ICd0aHJlYWRDZXJ0JworUEFOSURfRklOQUwgPSAweGFiY2QKKworQ09NTUlTU0lPTkVSID0gMQorTEVBREVSID0gMgorUk9VVEVSMSA9IDMKK1JPVVRFUjIgPSA0CisKK2NsYXNzIENlcnRfOV8yXzE2X0FjdGl2ZVBlbmRpbmdQYXJ0aXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9wYXJ0aXRpb25faWQoMHhmZmZmZmZmZikKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklUKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMigpCisKKyAgICBkZWYgX3NldFVwUm91dGVyMihzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KHNlbGYubm9kZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgbm9kZS5zdG9wKCkKKyAgICAgICAgZGVsIHNlbGYubm9kZXMKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSXS5nZXRfc3RhdGUoKSwgJ2xlYWRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5jb21taXNzaW9uZXJfc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9zdGF0ZSgpLCAncm91dGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZXI9NjAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2hfbG9jYWw9J2ZkMDA6MGRiOTo6JykKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5yZXNldCgpCisgICAgICAgIHNlbGYuX3NldFVwUm91dGVyMigpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9wZW5kaW5nX3NldChwZW5kaW5nX3RpbWVzdGFtcD0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfdGltZXN0YW1wPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5X3RpbWVyPTIwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoX2xvY2FsPSdmZDAwOjBkYjc6OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9UEFOSURfRklOQUwpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X2FjdGl2ZV9zZXQoYWN0aXZlX3RpbWVzdGFtcD0xNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfbmFtZT0ndGhyZWFkQ2VydCcpCisgICAgICAgIHRpbWUuc2xlZXAoMTAwKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMl0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X25ldHdvcmtfbmFtZSgpLCBORVRXT1JLX05BTUVfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9uZXR3b3JrX25hbWUoKSwgTkVUV09SS19OQU1FX0ZJTkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X25ldHdvcmtfbmFtZSgpLCBORVRXT1JLX05BTUVfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfbmV0d29ya19uYW1lKCksIE5FVFdPUktfTkFNRV9GSU5BTCkKKworICAgICAgICB0aW1lLnNsZWVwKDEwMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfcGFuaWQoKSwgUEFOSURfRklOQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9wYW5pZCgpLCBQQU5JRF9GSU5BTCkKKworICAgICAgICBpcGFkZHJzID0gc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfYWRkcnMoKQorICAgICAgICBmb3IgaXBhZGRyIGluIGlwYWRkcnM6CisgICAgICAgICAgICBpZiBpcGFkZHJbMDo0XSAhPSAnZmU4MCc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubm9kZXNbTEVBREVSXS5waW5nKGlwYWRkcikpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE3X09ycGhhbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvQ2VydF85XzJfMTdfT3JwaGFuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyZDczZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE3X09ycGhhbi5weQpAQCAtMCwwICsxLDk0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitDSEFOTkVMMSA9IDExCitDSEFOTkVMMiA9IDE4CitDSEFOTkVMX01BU0sgPSAxIDw8IDE4CitQQU5JRF9JTklUID0gMHhmYWNlCisKK0xFQURFUjEgPSAxCitMRUFERVIyID0gMgorRUQxID0gMworCitjbGFzcyBDZXJ0XzlfMl8xN19PcnBoYW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNCk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMTAsIGNoYW5uZWw9Q0hBTk5FTDEsIHBhbmlkPVBBTklEX0lOSVQsIGNoYW5uZWxfbWFzaz1DSEFOTkVMX01BU0spCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9hY3RpdmVfZGF0YXNldCgyMCwgY2hhbm5lbD1DSEFOTkVMMiwgcGFuaWQ9UEFOSURfSU5JVCwgY2hhbm5lbF9tYXNrPUNIQU5ORUxfTUFTSykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIyXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKDEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9hY3RpdmVfZGF0YXNldCgxMCwgY2hhbm5lbD1DSEFOTkVMMSwgcGFuaWQ9UEFOSURfSU5JVCwgY2hhbm5lbF9tYXNrPUNIQU5ORUxfTUFTSykKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVIxXS5zdGFydCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc2V0X3N0YXRlKCdsZWFkZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbTEVBREVSMV0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uc3RhcnQoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUjJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworICAgICAgICBzZWxmLm5vZGVzW0VEMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tFRDFdLmdldF9zdGF0ZSgpLCAnY2hpbGQnKQorCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMV0uc3RvcCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSMl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0VEMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgdGltZS5zbGVlcCgyMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0VEMV0uZ2V0X2NoYW5uZWwoKSwgQ0hBTk5FTDIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L0NlcnRfOV8yXzE4X1JvbGxCYWNrQWN0aXZlVGltZXN0YW1wLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xOF9Sb2xsQmFja0FjdGl2ZVRpbWVzdGFtcC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODdjNzJjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9DZXJ0XzlfMl8xOF9Sb2xsQmFja0FjdGl2ZVRpbWVzdGFtcC5weQpAQCAtMCwwICsxLDE1MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG5vZGUKKworS0VZMSA9ICcwMDExMjIzMzQ0NTU2Njc3ODg5OWFhYmJjY2RkZWVmZicKK0tFWTIgPSAnZmZlZWRkY2NiYmFhOTk4ODc3NjY1NTQ0MzMyMjExMDAnCisKK0NIQU5ORUxfSU5JVCA9IDE5CitQQU5JRF9JTklUID0gMHhmYWNlCisKK0NPTU1JU1NJT05FUiA9IDEKK0xFQURFUiA9IDIKK1JPVVRFUjEgPSAzCitST1VURVIyID0gNAorRUQxID0gNQorU0VEMSA9IDYKKworY2xhc3MgQ2VydF85XzJfMThfUm9sbEJhY2tBY3RpdmVUaW1lc3RhbXAodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsNyk6CisgICAgICAgICAgICBzZWxmLm5vZGVzW2ldID0gbm9kZS5Ob2RlKGkpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2V0X21vZGUoJ3JzZG4nKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklULCBtYXN0ZXJfa2V5PUtFWTEpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbW9kZSgncnNkbicpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcGFydGl0aW9uX2lkKDB4ZmZmZmZmZmYpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjFdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbTEVBREVSXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbRUQxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1NFRDFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5lbmFibGVfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIxXS5zZXRfcm91dGVyX3NlbGVjdGlvbl9qaXR0ZXIoMSkKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9hY3RpdmVfZGF0YXNldCgxLCBjaGFubmVsPUNIQU5ORUxfSU5JVCwgcGFuaWQ9UEFOSURfSU5JVCwgbWFzdGVyX2tleT1LRVkxKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5hZGRfd2hpdGVsaXN0KHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X2FkZHI2NCgpKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUjJdLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcigxKQorCisgICAgICAgIHNlbGYubm9kZXNbRUQxXS5zZXRfYWN0aXZlX2RhdGFzZXQoMSwgY2hhbm5lbD1DSEFOTkVMX0lOSVQsIHBhbmlkPVBBTklEX0lOSVQsIG1hc3Rlcl9rZXk9S0VZMSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnNldF9tb2RlKCdyc24nKQorICAgICAgICBzZWxmLm5vZGVzW0VEMV0uYWRkX3doaXRlbGlzdChzZWxmLm5vZGVzW1JPVVRFUjFdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X2FjdGl2ZV9kYXRhc2V0KDEsIGNoYW5uZWw9Q0hBTk5FTF9JTklULCBwYW5pZD1QQU5JRF9JTklULCBtYXN0ZXJfa2V5PUtFWTEpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X21vZGUoJ3MnKQorICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfYWRkcjY0KCkpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uZW5hYmxlX3doaXRlbGlzdCgpCisgICAgICAgIHNlbGYubm9kZXNbU0VEMV0uc2V0X3RpbWVvdXQoMykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbQ09NTUlTU0lPTkVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uY29tbWlzc2lvbmVyX3N0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSMV0uc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIxXS5nZXRfc3RhdGUoKSwgJ3JvdXRlcicpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfc3RhdGUoKSwgJ2NoaWxkJykKKworICAgICAgICBzZWxmLm5vZGVzW1NFRDFdLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbU0VEMV0uZ2V0X3N0YXRlKCksICdjaGlsZCcpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLnNlbmRfbWdtdF9hY3RpdmVfc2V0KGFjdGl2ZV90aW1lc3RhbXA9MjAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrX25hbWU9J0dSTCcpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZXI9MjAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdTaG91bGRub3RiZScpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKworICAgICAgICBzZWxmLm5vZGVzW0NPTU1JU1NJT05FUl0uc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wPTIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXA9MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlfdGltZXI9MjAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19uYW1lPSdNeUhvdXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJfa2V5PUtFWTIpCisgICAgICAgIHRpbWUuc2xlZXAoMzEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tDT01NSVNTSU9ORVJdLmdldF9tYXN0ZXJrZXkoKSwgS0VZMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbUk9VVEVSMV0uZ2V0X21hc3RlcmtleSgpLCBLRVkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubm9kZXNbRUQxXS5nZXRfbWFzdGVya2V5KCksIEtFWTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tTRUQxXS5nZXRfbWFzdGVya2V5KCksIEtFWTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ub2Rlc1tST1VURVIyXS5nZXRfbWFzdGVya2V5KCksIEtFWTEpCisKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVIyXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUjJdLmdldF9zdGF0ZSgpLCAnbGVhZGVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvTWFrZWZpbGUuYW0gYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MmVjZjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjg3IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworTE9HX0RSSVZFUj0kKGFic190b3Bfc3JjZGlyKS90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL3Rlc3QtZHJpdmVyCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBDZXJ0XzVfMV8wMV9Sb3V0ZXJBdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wMl9DaGlsZEFkZHJlc3NUaW1lb3V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wM19Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wNF9Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wNV9Sb3V0ZXJBZGRyZXNzVGltZW91dC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wNl9SZW1vdmVSb3V0ZXJJZC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wN19NYXhDaGlsZENvdW50LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wOF9Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wOV9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xMF9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xMV9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xMl9OZXdSb3V0ZXJOZWlnaGJvclN5bmMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xM19Sb3V0ZXJSZXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wMV9CZWNvbWVBY3RpdmVSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wMl9MZWFkZXJSZWplY3QxSG9wLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wM19MZWFkZXJSZWplY3QySG9wcy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wNF9SRUVEVXBncmFkZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wNV9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wNl9Sb3V0ZXJEb3duZ3JhZGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wN19SRUVEU3luY2hyb25pemF0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wMV9MaW5rTG9jYWwucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wMl9SZWFsbUxvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wM19BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNF9BZGRyZXNzTWFwQ2FjaGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNV9Sb3V0aW5nTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNl9Sb3V0ZXJJZE1hc2sucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNmJfUm91dGVySWRNYXNrLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wN19EdXBsaWNhdGVBZGRyZXNzLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wOF9DaGlsZEFkZHJlc3NTZXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wOV9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18xMF9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wMV9MZWFkZXJSZXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wMl9MZWFkZXJSZWJvb3QucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wM19TcGxpdE1lcmdlQ2hpbGRyZW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wNF9TcGxpdE1lcmdlUm91dGVycy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wNV9TcGxpdE1lcmdlUkVFRC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wN19TcGxpdE1lcmdlVGhyZWVXYXkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wOF9TcGxpdFJvdXRlcnNMb3N0TGVhZGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wMV9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoTGVhZGVyLnB5ICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wMl9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoUm91dGVyLnB5ICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wM19OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hMZWFkZXIucHkgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wNF9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wNV9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wNl9OZXR3b3JrRGF0YUV4cGlyYXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wN19OZXR3b3JrRGF0YVJlcXVlc3RSRUVELnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wOF9Db250ZXh0TWFuYWdlbWVudC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wOV9OZXR3b3JrRGF0YUZvcndhcmRpbmcucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfOF8wMV9LZXlTeW5jaHJvbml6YXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfOF8wMl9LZXlJbmNyZW1lbnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfOF8wM19LZXlJbmNyZW1lbnRSb2xsT3Zlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wMV9Sb3V0ZXJBdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wMl9SRUVEQXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wM19Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wNF9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wNV9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wNl9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wN19FRFN5bmNocm9uaXphdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMl8wMV9OZXdQYXJ0aXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMl8wMl9OZXdQYXJ0aXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfM18wMV9PcnBoYW5SZWF0dGFjaC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfM18wMl9OZXR3b3JrRGF0YVVwZGF0ZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNF8wMV9MaW5rTG9jYWwucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNF8wMl9SZWFsbUxvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNV8wMV9DaGlsZFJlc2V0U3luY2hyb25pemUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNV8wMl9DaGlsZFJlc2V0UmVhdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNl8wMV9LZXlJbmNyZW1lbnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNl8wMl9LZXlJbmNyZW1lbnRSb2xsT3Zlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wMV9Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wMl9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wM19Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wNF9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wNV9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMV8wMV9Db21taXNzaW9uaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMV8wMl9Db21taXNzaW9uaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMl8wMV9Kb2luZXJSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMl8wMl9Kb2luZXJSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wNF9BY3RpdmVEYXRhc2V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wN19EZWxheVRpbWVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wOF9QZXJzaXN0ZW50RGF0YXNldHMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wOV9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMF9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMV9NYXN0ZXJLZXkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMl9Bbm5vdW5jZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xM19FbmVyZ3lTY2FuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNF9QYW5JZFF1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xN19PcnBoYW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xOF9Sb2xsQmFja0FjdGl2ZVRpbWVzdGFtcC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb2FwLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb21tb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25maWcucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpcHY2LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb3dwYW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYWM4MDIxNTQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZXNzYWdlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtbGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXRfY3J5cHRvLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXR3b3JrX2RhdGEucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZXR3b3JrX2xheWVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBub2RlLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBub2RlX2NsaS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzbmlmZmVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzbmlmZmVyX3RyYW5zcG9ydC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2NvYXAucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2NvbW1vbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2NyeXB0by5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2lwdjYucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2xvd3Bhbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X21hYzgwMjE1NC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X21sZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X25ldHdvcmtfZGF0YS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X25ldHdvcmtfbGF5ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2NoZWNrX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2NoZWNrX1NDUklQVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICB0ZXN0X2NvYXAucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2NvbW1vbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2NyeXB0by5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2lwdjYucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2xvd3Bhbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X21hYzgwMjE1NC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X21sZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X25ldHdvcmtfZGF0YS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X25ldHdvcmtfbGF5ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wMV9Sb3V0ZXJBdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wMl9DaGlsZEFkZHJlc3NUaW1lb3V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wM19Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wNF9Sb3V0ZXJBZGRyZXNzUmVhbGxvY2F0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wNV9Sb3V0ZXJBZGRyZXNzVGltZW91dC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wNl9SZW1vdmVSb3V0ZXJJZC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wN19NYXhDaGlsZENvdW50LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wOF9Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8wOV9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xMF9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xMV9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xMl9OZXdSb3V0ZXJOZWlnaGJvclN5bmMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMV8xM19Sb3V0ZXJSZXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wMV9CZWNvbWVBY3RpdmVSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wMl9MZWFkZXJSZWplY3QxSG9wLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wM19MZWFkZXJSZWplY3QySG9wcy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wNF9SRUVEVXBncmFkZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wNV9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wNl9Sb3V0ZXJEb3duZ3JhZGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfMl8wN19SRUVEU3luY2hyb25pemF0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wMV9MaW5rTG9jYWwucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wMl9SZWFsbUxvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wM19BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNF9BZGRyZXNzTWFwQ2FjaGUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNV9Sb3V0aW5nTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNl9Sb3V0ZXJJZE1hc2sucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wNmJfUm91dGVySWRNYXNrLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wN19EdXBsaWNhdGVBZGRyZXNzLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wOF9DaGlsZEFkZHJlc3NTZXQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18wOV9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfM18xMF9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wMV9MZWFkZXJSZXNldC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wMl9MZWFkZXJSZWJvb3QucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wM19TcGxpdE1lcmdlQ2hpbGRyZW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wNF9TcGxpdE1lcmdlUm91dGVycy5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wNV9TcGxpdE1lcmdlUkVFRC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wN19TcGxpdE1lcmdlVGhyZWVXYXkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNV8wOF9TcGxpdFJvdXRlcnNMb3N0TGVhZGVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wMV9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoTGVhZGVyLnB5ICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wMl9OZXR3b3JrRGF0YVJlZ2lzdGVyQmVmb3JlQXR0YWNoUm91dGVyLnB5ICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wM19OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hMZWFkZXIucHkgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wNF9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wNV9OZXR3b3JrRGF0YVJlZ2lzdGVyQWZ0ZXJBdHRhY2hSb3V0ZXIucHkgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wNl9OZXR3b3JrRGF0YUV4cGlyYXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wN19OZXR3b3JrRGF0YVJlcXVlc3RSRUVELnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wOF9Db250ZXh0TWFuYWdlbWVudC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfNl8wOV9OZXR3b3JrRGF0YUZvcndhcmRpbmcucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfOF8wMV9LZXlTeW5jaHJvbml6YXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfOF8wMl9LZXlJbmNyZW1lbnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzVfOF8wM19LZXlJbmNyZW1lbnRSb2xsT3Zlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wMV9Sb3V0ZXJBdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wMl9SRUVEQXR0YWNoLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wM19Sb3V0ZXJBdHRhY2hDb25uZWN0aXZpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wNF9SRUVEQXR0YWNoQ29ubmVjdGl2aXR5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wNV9Sb3V0ZXJBdHRhY2hMaW5rUXVhbGl0eS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wNl9SRUVEQXR0YWNoTGlua1F1YWxpdHkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMV8wN19FRFN5bmNocm9uaXphdGlvbi5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMl8wMV9OZXdQYXJ0aXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfMl8wMl9OZXdQYXJ0aXRpb24ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfM18wMV9PcnBoYW5SZWF0dGFjaC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfM18wMl9OZXR3b3JrRGF0YVVwZGF0ZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNF8wMV9MaW5rTG9jYWwucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNF8wMl9SZWFsbUxvY2FsLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNV8wMV9DaGlsZFJlc2V0U3luY2hyb25pemUucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNV8wMl9DaGlsZFJlc2V0UmVhdHRhY2gucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNl8wMV9LZXlJbmNyZW1lbnQucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzZfNl8wMl9LZXlJbmNyZW1lbnRSb2xsT3Zlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wMV9Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wMl9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wM19Cb3JkZXJSb3V0ZXJBc0xlYWRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wNF9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzdfMV8wNV9Cb3JkZXJSb3V0ZXJBc1JvdXRlci5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMV8wMV9Db21taXNzaW9uaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMV8wMl9Db21taXNzaW9uaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMl8wMV9Kb2luZXJSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMl8wMl9Kb2luZXJSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wNF9BY3RpdmVEYXRhc2V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wN19EZWxheVRpbWVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wOF9QZXJzaXN0ZW50RGF0YXNldHMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wOV9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMF9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMV9NYXN0ZXJLZXkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMl9Bbm5vdW5jZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xM19FbmVyZ3lTY2FuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNF9QYW5JZFF1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xN19PcnBoYW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xOF9Sb2xsQmFja0FjdGl2ZVRpbWVzdGFtcC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1RFU1RTX0VOVklST05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBleHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0b3BfYnVpbGRkaXI9JyQodG9wX2J1aWxkZGlyKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWRVJCT1NFPTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1RFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKGNoZWNrX1BST0dSQU1TKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKGNoZWNrX1NDUklQVFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1hGQUlMX05DUF9URVNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBDZXJ0XzVfM18wOV9BZGRyZXNzUXVlcnkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMV8wMV9Db21taXNzaW9uaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMV8wMl9Db21taXNzaW9uaW5nLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMl8wMV9Kb2luZXJSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzhfMl8wMl9Kb2luZXJSb3V0ZXIucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wNF9BY3RpdmVEYXRhc2V0LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wN19EZWxheVRpbWVyLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wOF9QZXJzaXN0ZW50RGF0YXNldHMucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8wOV9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMF9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMV9NYXN0ZXJLZXkucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xMl9Bbm5vdW5jZS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xM19FbmVyZ3lTY2FuLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNF9QYW5JZFF1ZXJ5LnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNV9QZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xNl9BY3RpdmVQZW5kaW5nUGFydGl0aW9uLnB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xN19PcnBoYW4ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDZXJ0XzlfMl8xOF9Sb2xsQmFja0FjdGl2ZVRpbWVzdGFtcC5weSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1hGQUlMX1RFU1RTID0gJChpZiAkKGZpbHRlciAkKE5PREVfVFlQRSksbmNwLXNpbSksJChYRkFJTF9OQ1BfVEVTVFMpKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvVGVzdF9DbGkucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3RfQ2xpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5NzYyZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3RfQ2xpLnB5CkBAIC0wLDAgKzEsNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBub2RlCisKK0xFQURFUiA9IDEKKworY2xhc3MgQ2VydF9DbGkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ub2RlcyA9IHt9CisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXSA9IG5vZGUuTm9kZShMRUFERVIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBub2RlIGluIGxpc3Qoc2VsZi5ub2Rlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBub2RlLnN0b3AoKQorICAgICAgICBkZWwgc2VsZi5ub2RlcworCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9jb21tYW5kcygpCisKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6CisgICAgICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2VuZF9jb21tYW5kKGNvbW1hbmQgKyAnIC1oJykKKyAgICAgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3RfTWFjU2Nhbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvVGVzdF9NYWNTY2FuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczMTQyMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L1Rlc3RfTWFjU2Nhbi5weQpAQCAtMCwwICsxLDc2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbm9kZQorCitMRUFERVIgPSAxCitST1VURVIgPSAyCisKK2NsYXNzIFRlc3RfTWFjU2Nhbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5vZGVzID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwzKToKKyAgICAgICAgICAgIHNlbGYubm9kZXNbaV0gPSBub2RlLk5vZGUoaSkKKworICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tST1VURVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW0xFQURFUl0uc2V0X2NoYW5uZWwoMTIpCisgICAgICAgIHNlbGYubm9kZXNbTEVBREVSXS5zZXRfbmV0d29ya19uYW1lKCdPcGVuVGhyZWFkJykKKworICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X3BhbmlkKDB4ZmFjZSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLnNldF9tb2RlKCdyc2RuJykKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmFkZF93aGl0ZWxpc3Qoc2VsZi5ub2Rlc1tMRUFERVJdLmdldF9hZGRyNjQoKSkKKyAgICAgICAgc2VsZi5ub2Rlc1tST1VURVJdLmVuYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLm5vZGVzW1JPVVRFUl0uc2V0X2NoYW5uZWwoMTIpCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zZXRfbmV0d29ya19uYW1lKCdPcGVuVGhyZWFkJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5vZGUgaW4gbGlzdChzZWxmLm5vZGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpCisgICAgICAgIGRlbCBzZWxmLm5vZGVzCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ub2Rlc1tMRUFERVJdLnNldF9zdGF0ZSgnbGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW0xFQURFUl0uZ2V0X3N0YXRlKCksICdsZWFkZXInKQorCisgICAgICAgIHNlbGYubm9kZXNbUk9VVEVSXS5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5vZGVzW1JPVVRFUl0uZ2V0X3N0YXRlKCksICdyb3V0ZXInKQorCisgICAgICAgIHJlc3VsdHMgPSBzZWxmLm5vZGVzW0xFQURFUl0uc2NhbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMpLCAxNikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvVGVzdF9vdEx3Zi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvVGVzdF9vdEx3Zi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTY4NmJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9UZXN0X290THdmLnB5CkBAIC0wLDAgKzEsNzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBjdHlwZXMKKworY2xhc3MgR1VJRChjdHlwZXMuU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoIkRhdGExIiwgY3R5cGVzLmNfdWludCksCisgICAgICAgICAgICAgICAgKCJEYXRhMiIsIGN0eXBlcy5jX3VzaG9ydCksCisgICAgICAgICAgICAgICAgKCJEYXRhMyIsIGN0eXBlcy5jX3VzaG9ydCksCisgICAgICAgICAgICAgICAgKCJEYXRhNCIsIGN0eXBlcy5jX3VieXRlICogOCldCisgICAgCitjbGFzcyBvdERldmljZUxpc3QoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJhRGV2aWNlc0xlbmd0aCIsIGN0eXBlcy5jX3VzaG9ydCksCisgICAgICAgICAgICAgICAgKCJhRGV2aWNlcyIsIEdVSUQgKiA2NCldCisKK2NsYXNzIENlcnRfb3RMd2YodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKworICAgICAgICAjIExvYWQgdGhlIERMTAorICAgICAgICBzZWxmLkFwaSA9IGN0eXBlcy5XaW5ETEwoIm90QXBpLmRsbCIpCisgICAgICAgIGlmIHNlbGYuQXBpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJGYWlsZWQgdG8gbG9hZCBvdEFwaS5kbGwhIikKKyAgICAgICAgCisgICAgICAgICMgRGVmaW5lIHRoZSBmdW5jdGlvbnMKKyAgICAgICAgc2VsZi5BcGkub3RBcGlJbml0LnJlc3R5cGUgPSBjdHlwZXMuY192b2lkX3AKKyAgICAgICAgc2VsZi5BcGkub3RBcGlGaW5hbGl6ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90QXBpRmluYWxpemUucmVzdHlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5BcGkub3RGcmVlTWVtb3J5LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3RGcmVlTWVtb3J5LnJlc3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuQXBpLm90RW51bWVyYXRlRGV2aWNlcy5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90RW51bWVyYXRlRGV2aWNlcy5yZXN0eXBlID0gY3R5cGVzLlBPSU5URVIob3REZXZpY2VMaXN0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaUluc3RhbmNlOgorICAgICAgICAgICAgc2VsZi5BcGkub3RBcGlGaW5hbGl6ZShzZWxmLkFwaUluc3RhbmNlKQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICMgSW5zdGFudGlhdGUgdGhlIEFQSQorICAgICAgICBzZWxmLkFwaUluc3RhbmNlID0gc2VsZi5BcGkub3RBcGlJbml0KCkKKyAgICAgICAgIyBBc3NlcnQgdGhhdCBpdCBkaWRuJ3QgcmV0dXJuIE5VTEwKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLkFwaUluc3RhbmNlLCBOb25lKQorICAgICAgICAjIFF1ZXJ5IHRoZSBkZXZpY2UgbGlzdAorICAgICAgICBkZXZpY2VzID0gc2VsZi5BcGkub3RFbnVtZXJhdGVEZXZpY2VzKHNlbGYuQXBpSW5zdGFuY2UpCisgICAgICAgICMgQXNzZXJ0IHRoYXQgaXQgZGlkbid0IHJldHVybiBOVUxMCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGV2aWNlcywgTm9uZSkKKyAgICAgICAgIyBQcmludCB0aGUgbnVtYmVyIG9mIGRldmljZXMKKyAgICAgICAgcHJpbnQoImRldmljZXMgZm91bmQ6ICVkIiAlIGRldmljZXMuY29udGVudHMuYURldmljZXNMZW5ndGgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L19faW5pdF9fLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDE1NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb2FwLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb2FwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTNjYzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2NvYXAucHkKQEAgLTAsMCArMSwzODcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbworaW1wb3J0IHN0cnVjdAorCitmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5Citmcm9tIGVudW0gaW1wb3J0IEludEVudW0KKworCitjbGFzcyBDb2FwTWVzc2FnZVR5cGUoSW50RW51bSk6CisgICAgQ09OID0gMCAgIyBDb25maXJtYWJsZQorICAgIE5PTiA9IDEgICMgTm9uLWNvbmZpcm1hYmxlCisgICAgQUNLID0gMiAgIyBBY2tub3dsZWRnZW1lbnQKKyAgICBSU1QgPSAzICAjIFJlc2V0CisKKworY2xhc3MgQ29hcE9wdGlvbnNUeXBlcyhJbnRFbnVtKToKKyAgICBJRl9NQVRDSCA9IDEKKyAgICBVUklfSE9TVCA9IDMKKyAgICBFVEFHID0gNAorICAgIElGX05PVF9NQVRDSCA9IDUKKyAgICBVUklfUE9SVCA9IDcKKyAgICBMT0NBVElPTl9QQVRIID0gOAorICAgIFVSSV9QQVRIID0gMTEKKyAgICBDT05URU5UX0ZPUk1BVCA9IDEyCisgICAgTUFYX0FHRSA9IDE0CisgICAgVVJJX1FVRVJZID0gMTUKKyAgICBBQ0NFUFQgPSAxNworICAgIExPQ0FUSU9OX1FVRVJZID0gMjAKKyAgICBQUk9YWV9VUkkgPSAzNQorICAgIFBST1hZX1NDSEVNRSA9IDM5CisgICAgU0laRTEgPSA2MAorCisKK2NsYXNzIENvYXBPcHRpb25IZWFkZXIob2JqZWN0KToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgQ29BUCBvcHRpb25hIGhlYWRlci4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVsdGEsIGxlbmd0aCk6CisgICAgICAgIHNlbGYuX2RlbHRhID0gZGVsdGEKKyAgICAgICAgc2VsZi5fbGVuZ3RoID0gbGVuZ3RoCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVsdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZWx0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xlbmd0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX3BheWxvYWRfbWFya2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZWx0YSA9PSAweGYgYW5kIHNlbGYubGVuZ3RoID09IDB4ZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9yZWFkX2V4dGVuZGVkX3ZhbHVlKGNscywgZGF0YSwgdmFsdWUpOgorICAgICAgICBpZiB2YWx1ZSA9PSAxMzoKKyAgICAgICAgICAgIHJldHVybiBvcmQoZGF0YS5yZWFkKDEpKSArIDEzCisgICAgICAgIGVsaWYgdmFsdWUgPT0gMTQ6CisgICAgICAgICAgICBkYXRhLnJlYWQoMSkKKyAgICAgICAgICAgIHJldHVybiBvcmQoZGF0YS5yZWFkKDEpKSArIDI2OQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICBpbml0aWFsX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGRlbHRhID0gKGluaXRpYWxfYnl0ZSA+PiA0KSAmIDB4ZgorICAgICAgICBsZW5ndGggPSBpbml0aWFsX2J5dGUgJiAweGYKKworICAgICAgICBkZWx0YSA9IGNscy5fcmVhZF9leHRlbmRlZF92YWx1ZShkYXRhLCBkZWx0YSkKKyAgICAgICAgbGVuZ3RoID0gY2xzLl9yZWFkX2V4dGVuZGVkX3ZhbHVlKGRhdGEsIGxlbmd0aCkKKworICAgICAgICByZXR1cm4gY2xzKGRlbHRhLCBsZW5ndGgpCisKKworY2xhc3MgQ29hcE9wdGlvbihvYmplY3QpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBDb0FQIG9wdGlvbi4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX3R5cGUsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fdHlwZSA9IF90eXBlCisgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb2FwT3B0aW9uKHR5cGU9e30sIHZhbHVlPXt9KSIuZm9ybWF0KHNlbGYudHlwZSwgaGV4bGlmeShzZWxmLnZhbHVlKSkKKworCitjbGFzcyBDb2FwT3B0aW9uc0ZhY3Rvcnkob2JqZWN0KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgQ29BUCBvcHRpb25zLiAiIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBvcHRpb25zID0gW10KKworICAgICAgICBfdHlwZSA9IDAKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIG9wdGlvbl9oZWFkZXIgPSBDb2FwT3B0aW9uSGVhZGVyLmZyb21fYnl0ZXMoZGF0YSkKKyAgICAgICAgICAgIGlmIG9wdGlvbl9oZWFkZXIuaXNfcGF5bG9hZF9tYXJrZXI6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgX3R5cGUgKz0gb3B0aW9uX2hlYWRlci5kZWx0YQorICAgICAgICAgICAgdmFsdWUgPSBkYXRhLnJlYWQob3B0aW9uX2hlYWRlci5sZW5ndGgpCisKKyAgICAgICAgICAgIG9wdGlvbiA9IENvYXBPcHRpb24oX3R5cGUsIHZhbHVlKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQob3B0aW9uKQorCisgICAgICAgIHJldHVybiBvcHRpb25zCisKKworY2xhc3MgQ29hcENvZGUob2JqZWN0KToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgQ29BUCBjb2RlLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlKToKKyAgICAgICAgc2VsZi5fY29kZSA9IGNvZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29kZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9jbGFzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmNvZGUgPj4gNSkgJiAweDcKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZXRhaWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvZGUgJiAweDFmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9jbGFzc19hbmRfZGV0YWlsKGNscywgX2NsYXNzLCBkZXRhaWwpOgorICAgICAgICByZXR1cm4gY2xzKCgoX2NsYXNzICYgMHg3KSA8PCA1KSB8IChkZXRhaWwgJiAweDFmKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2RvdHRlZChjbHMsIGRvdHRlZF9zdHIpOgorICAgICAgICBfY2xhc3MsIGRldGFpbCA9IGRvdHRlZF9zdHIuc3BsaXQoIi4iKQorICAgICAgICByZXR1cm4gY2xzLmZyb21fY2xhc3NfYW5kX2RldGFpbChpbnQoX2NsYXNzKSwgaW50KGRldGFpbCkpCisKKyAgICBkZWYgaXNfZXF1YWxfZG90dGVkKHNlbGYsIGRvdHRlZF9jb2RlKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLmZyb21fZG90dGVkKGRvdHRlZF9jb2RlKQorICAgICAgICByZXR1cm4gc2VsZi5jb2RlID09IG90aGVyLmNvZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkb3R0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiAiLiIuam9pbihbIns6MDFkfSIuZm9ybWF0KHNlbGYuX2NsYXNzKSwgIns6MDJkfSIuZm9ybWF0KHNlbGYuZGV0YWlsKV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvZGUgPT0gb3RoZXIKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob3RoZXIsIHN0cik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5pc19lcXVhbF9kb3R0ZWQob3RoZXIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb2RlID09IG90aGVyLmNvZGUKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDb3VsZCBub3QgY29tcGFyZSB7fSBhbmQge30iLmZvcm1hdCh0eXBlKHNlbGYpLCB0eXBlKG90aGVyKSkpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRvdHRlZAorCisKK2NsYXNzIENvYXBNZXNzYWdlKG9iamVjdCk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIENvQVAgbWVzc2FnZS4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyc2lvbiwgX3R5cGUsIGNvZGUsIG1lc3NhZ2VfaWQsIHRva2VuLCBvcHRpb25zLCBwYXlsb2FkLCB1cmlfcGF0aD1Ob25lKToKKyAgICAgICAgc2VsZi5fdmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi5fdHlwZSA9IF90eXBlCisgICAgICAgIHNlbGYuX2NvZGUgPSBjb2RlCisgICAgICAgIHNlbGYuX21lc3NhZ2VfaWQgPSBtZXNzYWdlX2lkCisgICAgICAgIHNlbGYuX3Rva2VuID0gdG9rZW4KKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcGF5bG9hZCA9IHBheWxvYWQKKyAgICAgICAgc2VsZi5fdXJpX3BhdGggPSB1cmlfcGF0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3R5cGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29kZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1lc3NhZ2VfaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tZXNzYWdlX2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdG9rZW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90b2tlbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRrbChzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl90b2tlbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcHRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBheWxvYWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXlsb2FkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXJpX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91cmlfcGF0aAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBvcHRpb25zX3N0ciA9ICIsICIuam9pbihbcmVwcihvcHQpIGZvciBvcHQgaW4gc2VsZi5vcHRpb25zXSkKKyAgICAgICAgcmV0dXJuICJDb2FwTWVzc2FnZSh2ZXJzaW9uPXt9LCB0eXBlPXt9LCBjb2RlPXt9LCBtZXNzYWdlX2lkPXt9LCB0b2tlbj17fSwgb3B0aW9ucz1be31dLCBwYXlsb2FkPXt9LCB1cmktcGF0aD0ne30nKSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi52ZXJzaW9uLCBDb2FwTWVzc2FnZVR5cGUubmFtZVtzZWxmLnR5cGVdLCBzZWxmLmNvZGUsIHNlbGYubWVzc2FnZV9pZCwgaGV4bGlmeShzZWxmLnRva2VuKSwKKyAgICAgICAgICAgIG9wdGlvbnNfc3RyLCBzZWxmLnBheWxvYWQsIHNlbGYudXJpX3BhdGgpCisKKworY2xhc3MgQ29hcE1lc3NhZ2VQcm94eShvYmplY3QpOgorCisgICAgIiIiIFByb3h5IGNsYXNzIG9mIENvQVAgbWVzc2FnZS4gCisKKyAgICBUaGUgbWFpbiBpZGVhIGJlaGluZCB0aGlzIGNsYXNzIGlzIHRvIGRlbGF5IHBhcnNpbmcgcGF5bG9hZC4gRHVlIHRvIGFyY2hpdGVjdHVyZSBvZiB0aGUgZXhpc3Rpbmcgc29sdXRpb24gCisgICAgaXQgaXMgcG9zc2libGUgdG8gcHJvY2VzcyBjb25maXJtYXRpb24gbWVzc2FnZSBiZWZvcmUgYSByZXF1ZXN0IG1lc3NhZ2UuIEluIHN1Y2ggY2FzZSBpdCBpcyBub3QgcG9zc2libGUgCisgICAgdG8gZ2V0IFVSSSBwYXRoIHRvIGdldCBwcm9wZXIgcGF5bG9hZCBwYXJzZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29hcF9tZXNzYWdlLCBtZXNzYWdlX2luZm8sIG1pZF90b191cmlfcGF0aF9iaW5kZXIsIHVyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzKToKKyAgICAgICAgc2VsZi5fY29hcF9tZXNzYWdlID0gY29hcF9tZXNzYWdlCisgICAgICAgIHNlbGYuX21lc3NhZ2VfaW5mbyA9IG1lc3NhZ2VfaW5mbworICAgICAgICBzZWxmLl9taWRfdG9fdXJpX3BhdGhfYmluZGVyID0gbWlkX3RvX3VyaV9wYXRoX2JpbmRlcgorICAgICAgICBzZWxmLl91cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcyA9IHVyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXBfbWVzc2FnZS52ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXBfbWVzc2FnZS50eXBlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXBfbWVzc2FnZS5jb2RlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWVzc2FnZV9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXBfbWVzc2FnZS5tZXNzYWdlX2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdG9rZW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UudG9rZW4KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0a2woc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UudGtsCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXBfbWVzc2FnZS5vcHRpb25zCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF5bG9hZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmluZGVkX3VyaV9wYXRoID0gc2VsZi5fbWlkX3RvX3VyaV9wYXRoX2JpbmRlci5nZXRfdXJpX3BhdGhfZm9yKHNlbGYubWVzc2FnZV9pZCwgc2VsZi50b2tlbikKKworICAgICAgICAgICAgZmFjdG9yeSA9IHNlbGYuX3VyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzW2JpbmRlZF91cmlfcGF0aF0KKworICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhzZWxmLl9jb2FwX21lc3NhZ2UucGF5bG9hZCksIHNlbGYuX21lc3NhZ2VfaW5mbykKKworICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXBfbWVzc2FnZS5wYXlsb2FkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXJpX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2FwX21lc3NhZ2UudXJpX3BhdGgKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgb3B0aW9uc19zdHIgPSAiLCAiLmpvaW4oW3JlcHIob3B0KSBmb3Igb3B0IGluIHNlbGYub3B0aW9uc10pCisgICAgICAgIHJldHVybiAiQ29hcE1lc3NhZ2VQcm94eSh2ZXJzaW9uPXt9LCB0eXBlPXt9LCBjb2RlPXt9LCBtZXNzYWdlX2lkPXt9LCB0b2tlbj17fSwgb3B0aW9ucz1be31dLCBwYXlsb2FkPXt9LCB1cmktcGF0aD0ne30nKSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi52ZXJzaW9uLCBzZWxmLnR5cGUsIHNlbGYuY29kZSwgc2VsZi5tZXNzYWdlX2lkLCBoZXhsaWZ5KHNlbGYudG9rZW4pLAorICAgICAgICAgICAgb3B0aW9uc19zdHIsIHNlbGYucGF5bG9hZCwgc2VsZi51cmlfcGF0aCkKKworCitjbGFzcyBDb2FwTWVzc2FnZUlkVG9VcmlQYXRoQmluZGVyOgorCisgICAgIiIiIENsYXNzIGJpbmRzIG1lc3NhZ2UgaWQgYW5kIHRva2VuIHdpdGggVVJJIHBhdGguICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl91cmlfcGF0aF9iaW5kcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KQorCisgICAgZGVmIGFkZF91cmlfcGF0aF9mb3Ioc2VsZiwgbWVzc2FnZV9pZCwgdG9rZW4sIHVyaV9wYXRoKToKKyAgICAgICAgc2VsZi5fdXJpX3BhdGhfYmluZHNbbWVzc2FnZV9pZF1baGV4bGlmeSh0b2tlbildID0gdXJpX3BhdGgKKworICAgIGRlZiBnZXRfdXJpX3BhdGhfZm9yKHNlbGYsIG1lc3NhZ2VfaWQsIHRva2VuKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3VyaV9wYXRoX2JpbmRzW21lc3NhZ2VfaWRdW2hleGxpZnkodG9rZW4pXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBmaW5kIFVSSSBQQVRIIGZvciBtZXNzYWdlX2lkOiB7fSBhbmQgdG9rZW46IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgbWVzc2FnZV9pZCwgaGV4bGlmeSh0b2tlbikpKQorCisKK2NsYXNzIENvYXBNZXNzYWdlRmFjdG9yeShvYmplY3QpOgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBDb0FQIG1lc3NhZ2VzLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zX2ZhY3RvcnksIHVyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzLCBtZXNzYWdlX2lkX3RvX3VyaV9wYXRoX2JpbmRlcik6CisgICAgICAgIHNlbGYuX29wdGlvbnNfZmFjdG9yeSA9IG9wdGlvbnNfZmFjdG9yeQorICAgICAgICBzZWxmLl91cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcyA9IHVyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzCisgICAgICAgIHNlbGYuX21pZF90b191cmlfcGF0aF9iaW5kZXIgPSBtZXNzYWdlX2lkX3RvX3VyaV9wYXRoX2JpbmRlcgorCisgICAgZGVmIF91cmlfcGF0aF9mcm9tKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICB1cmlfcGF0aF9vcHRpb25zID0gW10KKworICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6CisgICAgICAgICAgICBpZiBvcHRpb24udHlwZSA9PSBDb2FwT3B0aW9uc1R5cGVzLlVSSV9QQVRIOgorICAgICAgICAgICAgICAgIHVyaV9wYXRoX29wdGlvbnMuYXBwZW5kKG9wdGlvbi52YWx1ZS5kZWNvZGUoInV0Zi04IikpCisKKyAgICAgICAgaWYgbm90IHVyaV9wYXRoX29wdGlvbnM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiAiLyIgKyAiLyIuam9pbih1cmlfcGF0aF9vcHRpb25zKQorCisgICAgZGVmIF9wYXJzZV9pbml0aWFsX2J5dGUoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaW5pdGlhbF9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICB2ZXJzaW9uID0gKGluaXRpYWxfYnl0ZSA+PiA2KSAmIDB4MworICAgICAgICBfdHlwZSA9IENvYXBNZXNzYWdlVHlwZSgoaW5pdGlhbF9ieXRlID4+IDQpICYgMHgzKQorICAgICAgICB0b2tlbl9sZW5ndGggPSBpbml0aWFsX2J5dGUgJiAweGYKKworICAgICAgICByZXR1cm4gdmVyc2lvbiwgX3R5cGUsIHRva2VuX2xlbmd0aAorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHZlcnNpb24sIF90eXBlLCB0b2tlbl9sZW5ndGggPSBzZWxmLl9wYXJzZV9pbml0aWFsX2J5dGUoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIGNvZGUgPSBDb2FwQ29kZShvcmQoZGF0YS5yZWFkKDEpKSkKKyAgICAgICAgbWVzc2FnZV9pZCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICB0b2tlbiA9IGRhdGEucmVhZCh0b2tlbl9sZW5ndGgpCisKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnNfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgdXJpX3BhdGggPSBzZWxmLl91cmlfcGF0aF9mcm9tKG9wdGlvbnMpCisgICAgICAgIGlmIHVyaV9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbWlkX3RvX3VyaV9wYXRoX2JpbmRlci5hZGRfdXJpX3BhdGhfZm9yKG1lc3NhZ2VfaWQsIHRva2VuLCB1cmlfcGF0aCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBDb2FwTWVzc2FnZSh2ZXJzaW9uLCBfdHlwZSwgY29kZSwgbWVzc2FnZV9pZCwgdG9rZW4sIG9wdGlvbnMsIGRhdGEucmVhZCgpLCB1cmlfcGF0aCkKKworICAgICAgICByZXR1cm4gQ29hcE1lc3NhZ2VQcm94eShjb2FwX21lc3NhZ2UsIG1lc3NhZ2VfaW5mbywgc2VsZi5fbWlkX3RvX3VyaV9wYXRoX2JpbmRlciwgc2VsZi5fdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXMpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2NvbW1vbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvY29tbW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Y2IwZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2NvbW1vbi5weQpAQCAtMCwwICsxLDE2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKKworZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisKK2ltcG9ydCBpcGFkZHJlc3MKKworCitkZWYgZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkV4cGVjdGVkIHRoZSBzYW1lIGNsYXNzLiBHb3Qge30gYW5kIHt9Ii5mb3JtYXQodHlwZShzZWxmKSwgdHlwZShvdGhlcikpKQorCisKK2NsYXNzIE1lc3NhZ2VJbmZvKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYXV4X3NlY19oZHIgPSBOb25lCisgICAgICAgIHNlbGYuYXV4X3NlY19oZHJfYnl0ZXMgPSBOb25lCisKKyAgICAgICAgc2VsZi5taHJfYnl0ZXMgPSBOb25lCisgICAgICAgIHNlbGYubm9ucGF5bG9hZF9maWVsZHMgPSBOb25lCisKKyAgICAgICAgc2VsZi5zb3VyY2VfbWFjX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBOb25lCisKKyAgICAgICAgc2VsZi5fc291cmNlX2lwdjYgPSBOb25lCisgICAgICAgIHNlbGYuX2Rlc3RpbmF0aW9uX2lwdjYgPSBOb25lCisKKyAgICAgICAgc2VsZi5fc3JjX3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2RzdF9wb3J0ID0gTm9uZQorCisgICAgICAgIHNlbGYuc3RhYmxlID0gTm9uZQorICAgICAgICBzZWxmLnBheWxvYWRfbGVuZ3RoID0gMAorCisgICAgZGVmIF9jb252ZXJ0X3ZhbHVlX3RvX2lwX2FkZHJlc3Moc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBieXRlYXJyYXkpOgorICAgICAgICAgICAgdmFsdWUgPSBieXRlcyh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cikgYW5kIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCJ1dGYtOCIpCisKKyAgICAgICAgcmV0dXJuIGlwYWRkcmVzcy5pcF9hZGRyZXNzKHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNvdXJjZV9pcHY2KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc291cmNlX2lwdjYKKworICAgIEBzb3VyY2VfaXB2Ni5zZXR0ZXIKKyAgICBkZWYgc291cmNlX2lwdjYoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zb3VyY2VfaXB2NiA9IHNlbGYuX2NvbnZlcnRfdmFsdWVfdG9faXBfYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZXN0aW5hdGlvbl9pcHY2KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzdGluYXRpb25faXB2NgorCisgICAgQGRlc3RpbmF0aW9uX2lwdjYuc2V0dGVyCisgICAgZGVmIGRlc3RpbmF0aW9uX2lwdjYoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9kZXN0aW5hdGlvbl9pcHY2ID0gc2VsZi5fY29udmVydF92YWx1ZV90b19pcF9hZGRyZXNzKHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNyY19wb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3JjX3BvcnQKKworICAgIEBzcmNfcG9ydC5zZXR0ZXIKKyAgICBkZWYgc3JjX3BvcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zcmNfcG9ydCA9IHZhbHVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZHN0X3BvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kc3RfcG9ydAorCisgICAgQGRzdF9wb3J0LnNldHRlcgorICAgIGRlZiBkc3RfcG9ydChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2RzdF9wb3J0ID0gdmFsdWUKKworCitjbGFzcyBNYWNBZGRyZXNzVHlwZShJbnRFbnVtKToKKyAgICBTSE9SVCA9IDAKKyAgICBMT05HID0gMQorCisKK2NsYXNzIE1hY0FkZHJlc3Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNfYWRkcmVzcywgX3R5cGUsIGJpZ19lbmRpYW49VHJ1ZSk6CisgICAgICAgIGlmIF90eXBlID09IE1hY0FkZHJlc3NUeXBlLlNIT1JUOgorICAgICAgICAgICAgbGVuZ3RoID0gMgorICAgICAgICBlbGlmIF90eXBlID09IE1hY0FkZHJlc3NUeXBlLkxPTkc6CisgICAgICAgICAgICBsZW5ndGggPSA4CisKKyAgICAgICAgaWYgbm90IGJpZ19lbmRpYW46CisgICAgICAgICAgICBtYWNfYWRkcmVzcyA9IG1hY19hZGRyZXNzWzo6LTFdCisKKyAgICAgICAgc2VsZi5fbWFjX2FkZHJlc3MgPSBieXRlYXJyYXkobWFjX2FkZHJlc3NbOmxlbmd0aF0pCisgICAgICAgIHNlbGYuX3R5cGUgPSBfdHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90eXBlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWFjX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tYWNfYWRkcmVzcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJsb2Moc2VsZik6CisgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI+SCIsIHNlbGYuX21hY19hZGRyZXNzKVswXQorCisgICAgZGVmIGNvbnZlcnRfdG9faWlkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl90eXBlID09IE1hY0FkZHJlc3NUeXBlLlNIT1JUOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMF0pICsgc2VsZi5fbWFjX2FkZHJlc3NbOjJdCisgICAgICAgIGVsaWYgc2VsZi5fdHlwZSA9PSBNYWNBZGRyZXNzVHlwZS5MT05HOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbc2VsZi5fbWFjX2FkZHJlc3NbMF0gXiAweDAyXSkgKyBzZWxmLl9tYWNfYWRkcmVzc1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgdG8gSUlELiBJbnZhbGlkIE1BQyBhZGRyZXNzIHR5cGU6IHt9Ii5mb3JtYXQoc2VsZi5fdHlwZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ldWk2NChjbHMsIGV1aTY0LCBiaWdfZW5kaWFuPVRydWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShldWk2NCwgYnl0ZWFycmF5KToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGNyZWF0ZSBNQUMgYWRkcmVzcyBmcm9tIEVVSTY0LiBJbnZhbGlkIGRhdGEgdHlwZToge30iLmZvcm1hdCh0eXBlKGV1aTY0KSkpCisKKyAgICAgICAgcmV0dXJuIGNscyhldWk2NCwgTWFjQWRkcmVzc1R5cGUuTE9ORykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3Jsb2MxNihjbHMsIHJsb2MxNiwgYmlnX2VuZGlhbj1UcnVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShybG9jMTYsIGludCk6CisgICAgICAgICAgICBtYWNfYWRkcmVzcyA9IHN0cnVjdC5wYWNrKCI+SCIsIHJsb2MxNikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJsb2MxNiwgYnl0ZWFycmF5KToKKyAgICAgICAgICAgIG1hY19hZGRyZXNzID0gcmxvYzE2WzoyXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgY3JlYXRlIE1BQyBhZGRyZXNzIGZyb20gUkxPQzE2LiBJbnZhbGlkIGRhdGEgdHlwZToge30iLmZvcm1hdCh0eXBlKHJsb2MxNikpKQorCisgICAgICAgIHJldHVybiBjbHMobWFjX2FkZHJlc3MsIE1hY0FkZHJlc3NUeXBlLlNIT1JUKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi50eXBlID09IG90aGVyLnR5cGUpIGFuZCAoc2VsZi5tYWNfYWRkcmVzcyA9PSBvdGhlci5tYWNfYWRkcmVzcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNYWNBZGRyZXNzKG1hY19hZGRyZXNzPWIne30nLCB0eXBlPXt9KSIuZm9ybWF0KGhleGxpZnkoc2VsZi5tYWNfYWRkcmVzcyksIE1hY0FkZHJlc3NUeXBlKHNlbGYuX3R5cGUpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb25maWcucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2NvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI3OGFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9jb25maWcucHkKQEAgLTAsMCArMSwzMDQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgY29hcAoraW1wb3J0IGlwdjYKK2ltcG9ydCBsb3dwYW4KK2ltcG9ydCBtZXNzYWdlCitpbXBvcnQgbWxlCitpbXBvcnQgbmV0X2NyeXB0bworaW1wb3J0IG5ldHdvcmtfZGF0YQoraW1wb3J0IG5ldHdvcmtfbGF5ZXIKK2ltcG9ydCBzbmlmZmVyCisKK0RFRkFVTFRfTUFTVEVSX0tFWSA9IGJ5dGVhcnJheShbMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZl0pCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9wcmVmaXhfc3ViX3RsdnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgbmV0d29ya19kYXRhLlRsdlR5cGUuSEFTX1JPVVRFOiBuZXR3b3JrX2RhdGEuSGFzUm91dGVGYWN0b3J5KAorICAgICAgICAgICAgcm91dGVzX2ZhY3Rvcnk9bmV0d29ya19kYXRhLlJvdXRlc0ZhY3RvcnkoCisgICAgICAgICAgICAgICAgcm91dGVfZmFjdG9yeT1uZXR3b3JrX2RhdGEuUm91dGVGYWN0b3J5KCkpCisgICAgICAgICksCisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLkJPUkRFUl9ST1VURVI6IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXJGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfZGF0YS5UbHZUeXBlLkxPV1BBTl9JRDogbmV0d29ya19kYXRhLkxvd3BhbklkRmFjdG9yeSgpCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfcHJlZml4X3N1Yl90bHZzX2ZhY3RvcnkoKToKKyAgICByZXR1cm4gbmV0d29ya19kYXRhLlByZWZpeFN1YlRsdnNGYWN0b3J5KAorICAgICAgICBzdWJfdGx2c19mYWN0b3JpZXM9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3ByZWZpeF9zdWJfdGx2c19mYWN0b3JpZXMoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3NlcnZpY2Vfc3ViX3RsdnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgbmV0d29ya19kYXRhLlRsdlR5cGUuU0VSVkVSOiBuZXR3b3JrX2RhdGEuU2VydmVyRmFjdG9yeSgpCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfc2VydmljZV9zdWJfdGx2c19mYWN0b3J5KCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5TZXJ2aWNlU3ViVGx2c0ZhY3RvcnkoCisgICAgICAgIHN1Yl90bHZzX2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfc2VydmljZV9zdWJfdGx2c19mYWN0b3JpZXMoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX2NvbW1pc3Npb25pbmdfZGF0YV9zdWJfdGx2c19mYWN0b3JpZXMoKToKKyAgICByZXR1cm4geworICAgICAgICBuZXR3b3JrX2RhdGEuTWVzaGNvcFRsdlR5cGUuU1RFRVJJTkdfREFUQTogbmV0d29ya19kYXRhLlN0ZWVyaW5nRGF0YUZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19kYXRhLk1lc2hjb3BUbHZUeXBlLkJPUkRFUl9BR0VOVF9MT0NBVE9SOiBuZXR3b3JrX2RhdGEuQm9yZGVyQWdlbnRMb2NhdG9yRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2RhdGEuTWVzaGNvcFRsdlR5cGUuQ09NTUlTU0lPTkVSX1NFU1NJT05fSUQ6IG5ldHdvcmtfZGF0YS5Db21taXNzaW9uZXJTZXNzaW9uSWRGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfZGF0YS5NZXNoY29wVGx2VHlwZS5DT01NSVNTSU9ORVJfVURQX1BPUlQ6IG5ldHdvcmtfZGF0YS5Db21taXNzaW9uZXJVZHBQb3J0RmFjdG9yeSgpLAorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX2NvbW1pc3Npb25pbmdfZGF0YV9zdWJfdGx2c19mYWN0b3J5KCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5Db21taXNzaW9uaW5nRGF0YVN1YlRsdnNGYWN0b3J5KAorICAgICAgICBzdWJfdGx2c19mYWN0b3JpZXM9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX2NvbW1pc3Npb25pbmdfZGF0YV9zdWJfdGx2c19mYWN0b3JpZXMoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgbmV0d29ya19kYXRhLlRsdlR5cGUuUFJFRklYOiBuZXR3b3JrX2RhdGEuUHJlZml4RmFjdG9yeSgKKyAgICAgICAgICAgIHN1Yl90bHZzX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3ByZWZpeF9zdWJfdGx2c19mYWN0b3J5KCkKKyAgICAgICAgKSwKKyAgICAgICAgbmV0d29ya19kYXRhLlRsdlR5cGUuU0VSVklDRTogbmV0d29ya19kYXRhLlNlcnZpY2VGYWN0b3J5KAorICAgICAgICAgICAgc3ViX3RsdnNfZmFjdG9yeT1jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfc2VydmljZV9zdWJfdGx2c19mYWN0b3J5KCkKKyAgICAgICAgKSwKKyAgICAgICAgbmV0d29ya19kYXRhLlRsdlR5cGUuQ09NTUlTU0lPTklORzogbmV0d29ya19kYXRhLkNvbW1pc3Npb25pbmdEYXRhRmFjdG9yeSgKKyAgICAgICAgICAgIHN1Yl90bHZzX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX2NvbW1pc3Npb25pbmdfZGF0YV9zdWJfdGx2c19mYWN0b3J5KCkKKyAgICAgICAgKSwKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcnkoKToKKyAgICByZXR1cm4gbmV0d29ya19kYXRhLk5ldHdvcmtEYXRhVGx2c0ZhY3RvcnkoCisgICAgICAgIHN1Yl90bHZzX2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfdGx2c19mYWN0b3JpZXMoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbWxlX3Rsdl9yb3V0ZTY0X2ZhY3RvcnkoKToKKyAgICByZXR1cm4gbWxlLlJvdXRlNjRGYWN0b3J5KAorICAgICAgICBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGFfZmFjdG9yeT1tbGUuTGlua1F1YWxpdHlBbmRSb3V0ZURhdGFGYWN0b3J5KCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X21sZV90bHZfbmV0d29ya19kYXRhX2ZhY3RvcnkoKToKKyAgICByZXR1cm4gbWxlLk5ldHdvcmtEYXRhRmFjdG9yeSgKKyAgICAgICAgbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yeT1jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5KCkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X21sZV90bHZfYWRkcmVzc19yZWdpc3RyYXRpb25fZmFjdG9yeSgpOgorICAgIHJldHVybiBtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbkZhY3RvcnkoCisgICAgICAgIGFkZHJfY29tcHJlc3NlZF9mYWN0b3J5PW1sZS5BZGRyZXNzQ29tcHJlc3NlZEZhY3RvcnkoKSwKKyAgICAgICAgYWRkcl9mdWxsX2ZhY3Rvcnk9bWxlLkFkZHJlc3NGdWxsRmFjdG9yeSgpKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9tbGVfdGx2c19mYWN0b3JpZXMoKToKKyAgICByZXR1cm4geworICAgICAgICBtbGUuVGx2VHlwZS5TT1VSQ0VfQUREUkVTUzogbWxlLlNvdXJjZUFkZHJlc3NGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLk1PREU6IG1sZS5Nb2RlRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5USU1FT1VUOiBtbGUuVGltZW91dEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuQ0hBTExFTkdFOiBtbGUuQ2hhbGxlbmdlRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5SRVNQT05TRTogbWxlLlJlc3BvbnNlRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5MSU5LX0xBWUVSX0ZSQU1FX0NPVU5URVI6IG1sZS5MaW5rTGF5ZXJGcmFtZUNvdW50ZXJGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLk1MRV9GUkFNRV9DT1VOVEVSOiBtbGUuTWxlRnJhbWVDb3VudGVyRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5ST1VURTY0OiBjcmVhdGVfZGVmYXVsdF9tbGVfdGx2X3JvdXRlNjRfZmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5BRERSRVNTMTY6IG1sZS5BZGRyZXNzMTZGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLkxFQURFUl9EQVRBOiBtbGUuTGVhZGVyRGF0YUZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuTkVUV09SS19EQVRBOiBjcmVhdGVfZGVmYXVsdF9tbGVfdGx2X25ldHdvcmtfZGF0YV9mYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLlRMVl9SRVFVRVNUOiBtbGUuVGx2UmVxdWVzdEZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuU0NBTl9NQVNLOiBtbGUuU2Nhbk1hc2tGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLkNPTk5FQ1RJVklUWTogbWxlLkNvbm5lY3Rpdml0eUZhY3RvcnkoKSwKKyAgICAgICAgbWxlLlRsdlR5cGUuTElOS19NQVJHSU46IG1sZS5MaW5rTWFyZ2luRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5TVEFUVVM6IG1sZS5TdGF0dXNGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLlZFUlNJT046IG1sZS5WZXJzaW9uRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5BRERSRVNTX1JFR0lTVFJBVElPTjogY3JlYXRlX2RlZmF1bHRfbWxlX3Rsdl9hZGRyZXNzX3JlZ2lzdHJhdGlvbl9mYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLkNIQU5ORUw6IG1sZS5DaGFubmVsRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5QQU5JRDogbWxlLlBhbklkRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5BQ1RJVkVfVElNRVNUQU1QOiBtbGUuQWN0aXZlVGltZXN0YW1wRmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5QRU5ESU5HX1RJTUVTVEFNUDogbWxlLlBlbmRpbmdUaW1lc3RhbXBGYWN0b3J5KCksCisgICAgICAgIG1sZS5UbHZUeXBlLkFDVElWRV9PUEVSQVRJT05BTF9EQVRBU0VUOiBtbGUuQWN0aXZlT3BlcmF0aW9uYWxEYXRhc2V0RmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5QRU5ESU5HX09QRVJBVElPTkFMX0RBVEFTRVQ6IG1sZS5QZW5kaW5nT3BlcmF0aW9uYWxEYXRhc2V0RmFjdG9yeSgpLAorICAgICAgICBtbGUuVGx2VHlwZS5USFJFQURfRElTQ09WRVJZOiBtbGUuVGhyZWFkRGlzY292ZXJ5RmFjdG9yeSgpCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9tbGVfY3J5cHRvX2VuZ2luZShtYXN0ZXJfa2V5KToKKyAgICByZXR1cm4gbmV0X2NyeXB0by5DcnlwdG9FbmdpbmUoY3J5cHRvX21hdGVyaWFsX2NyZWF0b3I9bmV0X2NyeXB0by5NbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X21sZV9tZXNzYWdlX2ZhY3RvcnkobWFzdGVyX2tleSk6CisgICAgcmV0dXJuIG1sZS5NbGVNZXNzYWdlRmFjdG9yeSgKKyAgICAgICAgYXV4X3NlY19oZHJfZmFjdG9yeT1uZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyRmFjdG9yeSgpLAorICAgICAgICBtbGVfY29tbWFuZF9mYWN0b3J5PW1sZS5NbGVDb21tYW5kRmFjdG9yeSgKKyAgICAgICAgICAgIHRsdnNfZmFjdG9yaWVzPWNyZWF0ZV9kZWZhdWx0X21sZV90bHZzX2ZhY3RvcmllcygpKSwKKyAgICAgICAgY3J5cHRvX2VuZ2luZT1jcmVhdGVfZGVmYXVsdF9tbGVfY3J5cHRvX2VuZ2luZShtYXN0ZXJfa2V5KSkKKworCitkZWYgY3JlYXRlX2RlYWZ1bHRfbmV0d29ya190bHZzX2ZhY3RvcmllcygpOgorICAgIHJldHVybiB7CisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5UQVJHRVRfRUlEOiBuZXR3b3JrX2xheWVyLlRhcmdldEVpZEZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19sYXllci5UbHZUeXBlLk1BQ19FWFRFTkRFRF9BRERSRVNTOiBuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzc0ZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19sYXllci5UbHZUeXBlLlJMT0MxNjogbmV0d29ya19sYXllci5SbG9jMTZGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5NTF9FSUQ6IG5ldHdvcmtfbGF5ZXIuTWxFaWRGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5TVEFUVVM6IG5ldHdvcmtfbGF5ZXIuU3RhdHVzRmFjdG9yeSgpLAorICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuVElNRV9TSU5DRV9MQVNUX1RSQU5TQUNUSU9OOiBuZXR3b3JrX2xheWVyLlRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbkZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19sYXllci5UbHZUeXBlLlJPVVRFUl9NQVNLOiBuZXR3b3JrX2xheWVyLlJvdXRlck1hc2tGYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5ORF9PUFRJT046IG5ldHdvcmtfbGF5ZXIuTmRPcHRpb25GYWN0b3J5KCksCisgICAgICAgIG5ldHdvcmtfbGF5ZXIuVGx2VHlwZS5ORF9EQVRBOiBuZXR3b3JrX2xheWVyLk5kRGF0YUZhY3RvcnkoKSwKKyAgICAgICAgbmV0d29ya19sYXllci5UbHZUeXBlLlRIUkVBRF9ORVRXT1JLX0RBVEE6IG5ldHdvcmtfbGF5ZXIuVGhyZWFkTmV0d29ya0RhdGFGYWN0b3J5KGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcnkpLAorCisgICAgICAgICMgUm91dGluZyBpbmZvcm1hdGlvbiBhcmUgZGlzdHJpYnV0ZWQgaW4gYSBUaHJlYWQgbmV0d29yayBieSBNTEUgUm91dGluZyBUTFYKKyAgICAgICAgIyB3aGljaCBpcyBpbiBmYWN0IE1MRSBSb3V0ZTY0IFRMVi4gVGhyZWFkIHNwZWNpZmljYXRvbiB2MS4xLiAtIENoYXB0ZXIgNS4yMAorICAgICAgICBuZXR3b3JrX2xheWVyLlRsdlR5cGUuTUxFX1JPVVRJTkc6IGNyZWF0ZV9kZWZhdWx0X21sZV90bHZfcm91dGU2NF9mYWN0b3J5KCkKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfdGx2c19mYWN0b3J5KCk6CisgICAgcmV0dXJuIG5ldHdvcmtfbGF5ZXIuTmV0d29ya0xheWVyVGx2c0ZhY3RvcnkoCisgICAgICAgIHRsdnNfZmFjdG9yaWVzPWNyZWF0ZV9kZWFmdWx0X25ldHdvcmtfdGx2c19mYWN0b3JpZXMoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXMoKToKKyAgICBuZXR3b3JrX2xheWVyX3RsdnNfZmFjdG9yeSA9IGNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfdGx2c19mYWN0b3J5KCkKKworICAgIHJldHVybiB7CisgICAgICAgICIvYS9hcyI6IG5ldHdvcmtfbGF5ZXJfdGx2c19mYWN0b3J5LAorICAgICAgICAiL2EvYXEiOiBuZXR3b3JrX2xheWVyX3RsdnNfZmFjdG9yeSwKKyAgICAgICAgIi9hL2FuIjogbmV0d29ya19sYXllcl90bHZzX2ZhY3RvcnkKKyAgICB9CisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2NvYXBfbWVzc2FnZV9mYWN0b3J5KCk6CisgICAgcmV0dXJuIGNvYXAuQ29hcE1lc3NhZ2VGYWN0b3J5KG9wdGlvbnNfZmFjdG9yeT1jb2FwLkNvYXBPcHRpb25zRmFjdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF91cmlfcGF0aF9iYXNlZF9wYXlsb2FkX2ZhY3RvcmllcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2lkX3RvX3VyaV9wYXRoX2JpbmRlcj1jb2FwLkNvYXBNZXNzYWdlSWRUb1VyaVBhdGhCaW5kZXIoKSkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfaXB2Nl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgMTA5OiBpcHY2Lk1QTE9wdGlvbkZhY3RvcnkoKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfaXB2Nl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeSgpOgorICAgIHJldHVybiBpcHY2LkhvcEJ5SG9wT3B0aW9uc0ZhY3RvcnkoCisgICAgICAgIG9wdGlvbnNfZmFjdG9yaWVzPWNyZWF0ZV9kZWZhdWx0X2lwdjZfaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcmllcygpKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9iYXNlZF9vbl9zcmNfZHN0X3BvcnRzX3VkcF9wYXlsb2FkX2ZhY3RvcnkobWFzdGVyX2tleSk6CisgICAgbWxlX21lc3NhZ2VfZmFjdG9yeSA9IGNyZWF0ZV9kZWZhdWx0X21sZV9tZXNzYWdlX2ZhY3RvcnkobWFzdGVyX2tleSkKKyAgICBjb2FwX21lc3NhZ2VfZmFjdG9yeSA9IGNyZWF0ZV9kZWZhdWx0X2NvYXBfbWVzc2FnZV9mYWN0b3J5KCkKKworICAgIHJldHVybiBpcHY2LlVkcEJhc2VkT25TcmNEc3RQb3J0c1BheWxvYWRGYWN0b3J5KAorICAgICAgICBzcmNfZHN0X3BvcnRfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXM9eworICAgICAgICAgICAgMTk3ODg6IG1sZV9tZXNzYWdlX2ZhY3RvcnksCisgICAgICAgICAgICA2MTYzMTogY29hcF9tZXNzYWdlX2ZhY3RvcnkKKyAgICAgICAgfQorICAgICkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfaXB2Nl9pY21wX2JvZHlfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgaXB2Ni5JQ01QX0RFU1RJTkFUSU9OX1VOUkVBQ0hBQkxFOiBpcHY2LklDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGVGYWN0b3J5KCksCisgICAgICAgIGlwdjYuSUNNUF9FQ0hPX1JFUVVFU1Q6IGlwdjYuSUNNUHY2RWNob0JvZHlGYWN0b3J5KCksCisgICAgICAgIGlwdjYuSUNNUF9FQ0hPX1JFU1BPTlNFOiBpcHY2LklDTVB2NkVjaG9Cb2R5RmFjdG9yeSgpLAorICAgICAgICAiZGVmYXVsdCI6IGlwdjYuQnl0ZXNQYXlsb2FkRmFjdG9yeSgpCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9pcHY2X3VwcGVyX2xheWVyX2ZhY3RvcmllcyhtYXN0ZXJfa2V5KToKKyAgICByZXR1cm4geworICAgICAgICBpcHY2LklQVjZfTkVYVF9IRUFERVJfVURQOiBpcHY2LlVEUERhdGFncmFtRmFjdG9yeSgKKyAgICAgICAgICAgIHVkcF9oZWFkZXJfZmFjdG9yeT1pcHY2LlVEUEhlYWRlckZhY3RvcnkoKSwKKyAgICAgICAgICAgIHVkcF9wYXlsb2FkX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfYmFzZWRfb25fc3JjX2RzdF9wb3J0c191ZHBfcGF5bG9hZF9mYWN0b3J5KG1hc3Rlcl9rZXkpCisgICAgICAgICksCisgICAgICAgIGlwdjYuSVBWNl9ORVhUX0hFQURFUl9JQ01QOiBpcHY2LklDTVB2NkZhY3RvcnkoCisgICAgICAgICAgICBib2R5X2ZhY3Rvcmllcz1jcmVhdGVfZGVmYXVsdF9pcHY2X2ljbXBfYm9keV9mYWN0b3JpZXMoKQorICAgICAgICApCisgICAgfQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yaWVzKCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgaXB2Ni5JUFY2X05FWFRfSEVBREVSX0hPUF9CWV9IT1A6IGxvd3Bhbi5Mb3dwYW5Ib3BCeUhvcEZhY3RvcnkoCisgICAgICAgICAgICBob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeT1jcmVhdGVfZGVmYXVsdF9pcHY2X2hvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5KCkKKyAgICAgICAgKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfaXB2Nl9leHRlbnNpb25faGVhZGVyc19mYWN0b3JpZXMoKToKKyAgICByZXR1cm4geworICAgICAgICBpcHY2LklQVjZfTkVYVF9IRUFERVJfSE9QX0JZX0hPUDogIGlwdjYuSG9wQnlIb3BGYWN0b3J5KAorICAgICAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3Rvcnk9Y3JlYXRlX2RlZmF1bHRfaXB2Nl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeSgpKQorICAgIH0KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfaXB2Nl9wYWNrZXRfZmFjdG9yeShtYXN0ZXJfa2V5KToKKyAgICByZXR1cm4gaXB2Ni5JUHY2UGFja2V0RmFjdG9yeSgKKyAgICAgICAgZWhmPWNyZWF0ZV9kZWZhdWx0X2lwdjZfZXh0ZW5zaW9uX2hlYWRlcnNfZmFjdG9yaWVzKCksCisgICAgICAgIHVscGY9Y3JlYXRlX2RlZmF1bHRfaXB2Nl91cHBlcl9sYXllcl9mYWN0b3JpZXMobWFzdGVyX2tleSkKKyAgICApCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9kZWNvbXByZXNzb3IoY29udGV4dF9tYW5hZ2VyKToKKyAgICByZXR1cm4gbG93cGFuLkxvd3BhbkRlY29tcHJlc3NvcigKKyAgICAgICAgbG93cGFuX2lwX2hlYWRlcl9mYWN0b3J5PWxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgKKyAgICAgICAgICAgIGNvbnRleHRfbWFuYWdlcj1jb250ZXh0X21hbmFnZXIKKyAgICAgICAgKSwKKyAgICAgICAgbG93cGFuX2V4dGVuc2lvbl9oZWFkZXJzX2ZhY3Rvcnk9bG93cGFuLkxvd3BhbkV4dGVuc2lvbkhlYWRlcnNGYWN0b3J5KAorICAgICAgICAgICAgZXh0X2hlYWRlcnNfZmFjdG9yaWVzPWNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9leHRlbnNpb25faGVhZGVyc19mYWN0b3JpZXMoKQorICAgICAgICApLAorICAgICAgICBsb3dwYW5fdWRwX2hlYWRlcl9mYWN0b3J5PWxvd3Bhbi5Mb3dwYW5VZHBIZWFkZXJGYWN0b3J5KCkKKyAgICApCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X3RocmVhZF9jb250ZXh0X21hbmFnZXIoKToKKyAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgIGNvbnRleHRfbWFuYWdlclswXSA9IGxvd3Bhbi5Db250ZXh0KCJmZDAwOjBkYjg6Oi82NCIpCisKKyAgICByZXR1cm4gY29udGV4dF9tYW5hZ2VyCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyLCBtYXN0ZXJfa2V5PURFRkFVTFRfTUFTVEVSX0tFWSk6CisgICAgcmV0dXJuIGxvd3Bhbi5Mb3dwYW5QYXJzZXIoCisgICAgICAgIGxvd3Bhbl9tZXNoX2hlYWRlcl9mYWN0b3J5PWxvd3Bhbi5Mb3dwYW5NZXNoSGVhZGVyRmFjdG9yeSgpLAorICAgICAgICBsb3dwYW5fZGVjb21wcmVzc29yPWNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9kZWNvbXByZXNzb3IoY29udGV4dF9tYW5hZ2VyKSwKKyAgICAgICAgbG93cGFuX2ZyYWdlbWVudHNfYnVmZmVyc19tYW5hZ2VyPWxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXJzTWFuYWdlcigpLAorICAgICAgICBpcHY2X3BhY2tldF9mYWN0b3J5PWNyZWF0ZV9kZWZhdWx0X2lwdjZfcGFja2V0X2ZhY3RvcnkobWFzdGVyX2tleSkKKyAgICApCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X3RocmVhZF9tZXNzYWdlX2ZhY3RvcnkobWFzdGVyX2tleT1ERUZBVUxUX01BU1RFUl9LRVkpOgorICAgIGNvbnRleHRfbWFuYWdlciA9IGNyZWF0ZV9kZWZhdWx0X3RocmVhZF9jb250ZXh0X21hbmFnZXIoKQorICAgIGxvd3Bhbl9wYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlciwgbWFzdGVyX2tleSkKKworICAgIHJldHVybiBtZXNzYWdlLk1lc3NhZ2VGYWN0b3J5KGxvd3Bhbl9wYXJzZXI9bG93cGFuX3BhcnNlcikKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfdGhyZWFkX3NuaWZmZXIobm9kZWlkKToKKyAgICByZXR1cm4gc25pZmZlci5TbmlmZmVyKG5vZGVpZCwgY3JlYXRlX2RlZmF1bHRfdGhyZWFkX21lc3NhZ2VfZmFjdG9yeSgpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9pcHY2LnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9pcHY2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDA0N2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L2lwdjYucHkKQEAgLTAsMCArMSwxMTQ4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGFiYworaW1wb3J0IGlvCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkKK2Zyb20gaXBhZGRyZXNzIGltcG9ydCBpcF9hZGRyZXNzCisKK3RyeToKKyAgICBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXppcF9sb25nZXN0IGFzIHppcF9sb25nZXN0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBpdGVydG9vbHMgaW1wb3J0IHppcF9sb25nZXN0CisKKworIyBOZXh0IGhlYWRlcnMgZm9yIElQdjYgcHJvdG9jb2xzCitJUFY2X05FWFRfSEVBREVSX0hPUF9CWV9IT1AgPSAwCitJUFY2X05FWFRfSEVBREVSX1RDUCA9IDYKK0lQVjZfTkVYVF9IRUFERVJfVURQID0gMTcKK0lQVjZfTkVYVF9IRUFERVJfSUNNUCA9IDU4CisKK1VQUEVSX0xBWUVSX1BST1RPQ09MUyA9IFsKKyAgICBJUFY2X05FWFRfSEVBREVSX1RDUCwKKyAgICBJUFY2X05FWFRfSEVBREVSX1VEUCwKKyAgICBJUFY2X05FWFRfSEVBREVSX0lDTVAsCitdCisKKyMgSUNNUCBQcm90b2NvbCBjb2RlcworSUNNUF9ERVNUSU5BVElPTl9VTlJFQUNIQUJMRSA9IDEKK0lDTVBfRUNIT19SRVFVRVNUID0gMTI4CitJQ01QX0VDSE9fUkVTUE9OU0UgPSAxMjkKKworIyBEZWZhdWx0IGhvcCBsaW1pdCBmb3IgSVB2NgorSE9QX0xJTUlUX0RFRkFVTFQgPSA2NAorCisKK2RlZiBjYWxjdWxhdGVfY2hlY2tzdW0oZGF0YSk6CisgICAgIiIiIENhbGN1bGF0ZSBjaGVja3N1bSBmcm9tIGRhdGEgYnl0ZXMuCisKKyAgICBIb3cgdG8gY2FsY3VsYXRlIGNoZWNrc3VtIChSRkMgMjQ2MCk6CisgICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNDYwI3BhZ2UtMjcKKworICAgIEFyZ3M6CisgICAgICAgIGRhdGEgKGJ5dGVzKTogaW5wdXQgZGF0YSBmcm9tIHdoaWNoIGNoZWNrc3VtIHdpbGwgYmUgY2FsY3VsYXRlZAorCisgICAgUmV0dXJuczoKKyAgICAgICAgaW50OiBjYWxjdWxhdGVkIGNoZWNrc3VtCisgICAgIiIiCisgICAgIyBDcmVhdGUgaGFsZndvcmRzIGZyb20gZGF0YSBieXRlcy4gRXhhbXBsZTogZGF0YVswXSA9IDB4MDEsIGRhdGFbMV0gPSAweGIyID0+IDB4MDFiMgorICAgIGhhbGZ3b3JkcyA9IFsoKGJ5dGUwIDw8IDgpIHwgYnl0ZTEpIGZvciBieXRlMCwgYnl0ZTEgaW4gemlwX2xvbmdlc3QoZGF0YVs6OjJdLCBkYXRhWzE6OjJdLCBmaWxsdmFsdWU9MHgwMCldCisKKyAgICBjaGVja3N1bSA9IDAKKyAgICBmb3IgaGFsZndvcmQgaW4gaGFsZndvcmRzOgorICAgICAgICBjaGVja3N1bSArPSBoYWxmd29yZAorICAgICAgICBjaGVja3N1bSA9IChjaGVja3N1bSAmIDB4RkZGRikgKyAoY2hlY2tzdW0gPj4gMTYpCisKKyAgICBjaGVja3N1bSBePSAweEZGRkYKKworICAgIGlmIGNoZWNrc3VtID09IDA6CisgICAgICAgIHJldHVybiAweEZGRkYKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gY2hlY2tzdW0KKworCitjbGFzcyBQYWNrZXRGYWN0b3J5KG9iamVjdCk6CisKKyAgICAiIiIgSW50ZXJmYWNlIGZvciBjbGFzc2VzIHRoYXQgcHJvZHVjZSBvYmplY3RzIGZyb20gZGF0YS4gIiIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgIiIiIENvbnZlcnQgZGF0YSB0byBvYmplY3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGEgKEJ5dGVzSU8pCisgICAgICAgICAgICBtZXNzYWdlX2luZm8gKE1lc3NhZ2VJbmZvKQorCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgQnVpbGRhYmxlRnJvbUJ5dGVzKG9iamVjdCk6CisKKyAgICAiIiIgSW50ZXJmYWNlIGZvciBjbGFzc2VzIHdoaWNoIGNhbiBiZSBidWlsdCBmcm9tIGJ5dGVzLiAiIiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YSk6CisgICAgICAgICIiIiBDb252ZXJ0IGRhdGEgdG8gb2JqZWN0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhIChieXRlcykKKworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIENvbnZlcnRpYmxlVG9CeXRlcyhvYmplY3QpOgorCisgICAgIiIiIEludGVyZmFjZSBmb3IgY2xhc3NlcyB3aGljaCBjYW4gYmUgY29udmVydGVkIHRvIGJ5dGVzLiAiIiIKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgIiIiIENvbnZlcnQgb2JqZWN0IHRvIGRhdGEuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJ5dGVzCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgIiIiIExlbmd0aCBvZiBkYXRhIChpbiBieXRlcykuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGludAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEhlYWRlcihvYmplY3QpOgorCisgICAgIiIiIEludGVyZmFjZSBmb3IgaGVhZGVyIGNsYXNzZXMuICIiIgorCisgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisKKyAgICBAYWJjLmFic3RyYWN0cHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgIiIiIE51bWJlciB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgbmV4dCBoZWFkZXIgZmllbGQgaW4gSVB2NiBoZWFkZXIgb3IgbmV4dCBoZWFkZXJzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBpbnQKKyAgICAgICAgIiIiCisKKworY2xhc3MgRXh0ZW5zaW9uSGVhZGVyKG9iamVjdCk6CisKKyAgICAiIiIgQmFzZSBmb3IgY2xhc3NlcyByZXByZXNlbnRpbmcgRXh0ZW5zaW9uIEhlYWRlcnMgaW4gSVB2NiBwYWNrZXRzLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXh0X2hlYWRlciwgaGRyX2V4dF9sZW49MCk6CisgICAgICAgIHNlbGYubmV4dF9oZWFkZXIgPSBuZXh0X2hlYWRlcgorICAgICAgICBzZWxmLmhkcl9leHRfbGVuID0gaGRyX2V4dF9sZW4KKworCitjbGFzcyBVcHBlckxheWVyUHJvdG9jb2woSGVhZGVyLCBDb252ZXJ0aWJsZVRvQnl0ZXMpOgorCisgICAgIiIiIEJhc2UgZm9yIGNsYXNzZXMgcmVwcmVzZW50aW5nIHVwcGVyIGxheWVyIHByb3RvY29sIHBheWxvYWQgaW4gSVB2NiBwYWNrZXRzLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXIpOgorICAgICAgICBzZWxmLmhlYWRlciA9IGhlYWRlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoZWNrc3VtKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJuIGNoZWNrc3VtIGZyb20gdXBwZXIgbGF5ZXIgcHJvdG9jb2wgaGVhZGVyLiAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaGVhZGVyLmNoZWNrc3VtCisKKyAgICBAY2hlY2tzdW0uc2V0dGVyCisgICAgZGVmIGNoZWNrc3VtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiIFNldCBjaGVja3N1bSB2YWx1ZSBpbiB1cHBlciBsYXllciBwcm90b2NvbCBoZWFkZXIuICIiIgorICAgICAgICBzZWxmLmhlYWRlci5jaGVja3N1bSA9IHZhbHVlCisKKyAgICBkZWYgaXNfdmFsaWRfY2hlY2tzdW0oc2VsZik6CisgICAgICAgICIiIiBSZXR1cm4gaW5mb3JtYXRpb24gaWYgc2V0IGNoZWNrc3VtIGlzIHZhbGlkLgorCisgICAgICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgemVybyBmcm9tIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgorICAgICAgICBaZXJvIGluZGljYXRlcyBpbnZhbGlkIGNoZWNrc3VtIHZhbHVlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBib29sCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jaGVja3N1bSAhPSAwCisKKworY2xhc3MgSVB2NlBzZXVkb0hlYWRlcihDb252ZXJ0aWJsZVRvQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBJUHY2IHBzZXVkbyBoZWFkZXIgd2hpY2ggaXMgcmVxdWlyZWQgdG8gY2FsY3VsYXRlCisgICAgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgKGxpa2UgZS5nLiBVRFAgb3IgSUNNUHY2KSBjaGVja3N1bS4KKworICAgIFRoaXMgY2xhc3MgaXMgdXNlZCBvbmx5IGR1cmluZyB1cHBlciBsYXllciBwcm90b2NvbCBjaGVja3N1bSBjYWxjdWxhdGlvbi4gRG8gbm90IHVzZSBpdCBvdXRzaWRlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX2FkZHJlc3MsIGRlc3RpbmF0aW9uX2FkZHJlc3MsIHBheWxvYWRfbGVuZ3RoLCBuZXh0X2hlYWRlcik6CisgICAgICAgIHNlbGYuX3NvdXJjZV9hZGRyZXNzID0gc2VsZi5fY29udmVydF90b19pcGFkZHJlc3Moc291cmNlX2FkZHJlc3MpCisgICAgICAgIHNlbGYuX2Rlc3RpbmF0aW9uX2FkZHJlc3MgPSBzZWxmLl9jb252ZXJ0X3RvX2lwYWRkcmVzcyhkZXN0aW5hdGlvbl9hZGRyZXNzKQorICAgICAgICBzZWxmLnBheWxvYWRfbGVuZ3RoID0gcGF5bG9hZF9sZW5ndGgKKyAgICAgICAgc2VsZi5uZXh0X2hlYWRlciA9IG5leHRfaGVhZGVyCisKKyAgICBkZWYgX2NvbnZlcnRfdG9faXBhZGRyZXNzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZWFycmF5KToKKyAgICAgICAgICAgIHZhbHVlID0gYnl0ZXModmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpIGFuZCBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmRlY29kZSgidXRmLTgiKQorCisgICAgICAgIHJldHVybiBpcF9hZGRyZXNzKHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNvdXJjZV9hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc291cmNlX2FkZHJlc3MKKworICAgIEBzb3VyY2VfYWRkcmVzcy5zZXR0ZXIKKyAgICBkZWYgc291cmNlX2FkZHJlc3Moc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zb3VyY2VfYWRkcmVzcyA9IHNlbGYuX2NvbnZlcnRfdG9faXBhZGRyZXNzKHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlc3RpbmF0aW9uX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXN0aW5hdGlvbl9hZGRyZXNzCisKKyAgICBAZGVzdGluYXRpb25fYWRkcmVzcy5zZXR0ZXIKKyAgICBkZWYgZGVzdGluYXRpb25fYWRkcmVzcyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NvdXJjZV9hZGRyZXNzID0gc2VsZi5fY29udmVydF90b19pcGFkZHJlc3ModmFsdWUpCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgICAgICBkYXRhICs9IHNlbGYuc291cmNlX2FkZHJlc3MucGFja2VkCisgICAgICAgIGRhdGEgKz0gc2VsZi5kZXN0aW5hdGlvbl9hZGRyZXNzLnBhY2tlZAorICAgICAgICBkYXRhICs9IHN0cnVjdC5wYWNrKCI+SSIsIHNlbGYucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIGRhdGEgKz0gc3RydWN0LnBhY2soIj5JIiwgc2VsZi5uZXh0X2hlYWRlcikKKworICAgICAgICByZXR1cm4gZGF0YQorCisKK2NsYXNzIElQdjZIZWFkZXIoQ29udmVydGlibGVUb0J5dGVzLCBCdWlsZGFibGVGcm9tQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBJUHY2IHBhY2tldCBoZWFkZXIuICIiIgorCisgICAgX3ZlcnNpb24gPSA2CisKKyAgICBfaGVhZGVyX2xlbmd0aCA9IDQwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX2FkZHJlc3MsIGRlc3RpbmF0aW9uX2FkZHJlc3MsIHRyYWZmaWNfY2xhc3M9MCwgZmxvd19sYWJlbD0wLCBob3BfbGltaXQ9NjQsCisgICAgICAgICAgICAgICAgIHBheWxvYWRfbGVuZ3RoPTAsIG5leHRfaGVhZGVyPTApOgorICAgICAgICBzZWxmLnZlcnNpb24gPSBzZWxmLl92ZXJzaW9uCisgICAgICAgIHNlbGYuX3NvdXJjZV9hZGRyZXNzID0gc2VsZi5fY29udmVydF90b19pcGFkZHJlc3Moc291cmNlX2FkZHJlc3MpCisgICAgICAgIHNlbGYuX2Rlc3RpbmF0aW9uX2FkZHJlc3MgPSBzZWxmLl9jb252ZXJ0X3RvX2lwYWRkcmVzcyhkZXN0aW5hdGlvbl9hZGRyZXNzKQorICAgICAgICBzZWxmLnRyYWZmaWNfY2xhc3MgPSB0cmFmZmljX2NsYXNzCisgICAgICAgIHNlbGYuZmxvd19sYWJlbCA9IGZsb3dfbGFiZWwKKyAgICAgICAgc2VsZi5ob3BfbGltaXQgPSBob3BfbGltaXQKKyAgICAgICAgc2VsZi5wYXlsb2FkX2xlbmd0aCA9IHBheWxvYWRfbGVuZ3RoCisgICAgICAgIHNlbGYubmV4dF9oZWFkZXIgPSBuZXh0X2hlYWRlcgorCisgICAgZGVmIF9jb252ZXJ0X3RvX2lwYWRkcmVzcyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSBhbmQgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5kZWNvZGUoInV0Zi04IikKKworICAgICAgICByZXR1cm4gaXBfYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzb3VyY2VfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZV9hZGRyZXNzCisKKyAgICBAc291cmNlX2FkZHJlc3Muc2V0dGVyCisgICAgZGVmIHNvdXJjZV9hZGRyZXNzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fc291cmNlX2FkZHJlc3MgPSBzZWxmLl9jb252ZXJ0X3RvX2lwYWRkcmVzcyh2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZXN0aW5hdGlvbl9hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzdGluYXRpb25fYWRkcmVzcworCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsKKyAgICAgICAgICAgICgoc2VsZi52ZXJzaW9uICYgMHgwRikgPDwgNCkgfCAoKHNlbGYudHJhZmZpY19jbGFzcyA+PiA0KSAmIDB4MEYpLAorICAgICAgICAgICAgKChzZWxmLnRyYWZmaWNfY2xhc3MgJiAweDBGKSA8PCA0KSB8ICgoc2VsZi5mbG93X2xhYmVsID4+IDE2KSAmIDB4MEYpLAorICAgICAgICAgICAgKChzZWxmLmZsb3dfbGFiZWwgPj4gOCkgJiAweEZGKSwKKyAgICAgICAgICAgICgoc2VsZi5mbG93X2xhYmVsICYgMHhGRikpCisgICAgICAgIF0pCisgICAgICAgIGRhdGEgKz0gc3RydWN0LnBhY2soIj5IIiwgc2VsZi5wYXlsb2FkX2xlbmd0aCkKKyAgICAgICAgZGF0YSArPSBieXRlYXJyYXkoW3NlbGYubmV4dF9oZWFkZXIsIHNlbGYuaG9wX2xpbWl0XSkKKyAgICAgICAgZGF0YSArPSBzZWxmLnNvdXJjZV9hZGRyZXNzLnBhY2tlZAorICAgICAgICBkYXRhICs9IHNlbGYuZGVzdGluYXRpb25fYWRkcmVzcy5wYWNrZWQKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShkYXRhLnJlYWQoNCkpCisKKyAgICAgICAgdmVyc2lvbiA9IChiWzBdID4+IDQpICYgMHgwRgorICAgICAgICB0cmFmZmljX2NsYXNzID0gKChiWzBdICYgMHgwRikgPDwgNCkgfCAoKGJbMV0gPj4gNCkgJiAweDBGKQorICAgICAgICBmbG93X2xhYmVsID0gKChiWzFdICYgMHgwRikgPDwgMTYpIHwgKGJbMl0gPDwgOCkgfCBiWzNdCisKKyAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgbmV4dF9oZWFkZXIgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBob3BfbGltaXQgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBzcmNfYWRkciA9IGJ5dGVhcnJheShkYXRhLnJlYWQoMTYpKQorICAgICAgICBkc3RfYWRkciA9IGJ5dGVhcnJheShkYXRhLnJlYWQoMTYpKQorCisgICAgICAgIHJldHVybiBjbHMoc3JjX2FkZHIsCisgICAgICAgICAgICAgICAgICAgZHN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgdHJhZmZpY19jbGFzcywKKyAgICAgICAgICAgICAgICAgICBmbG93X2xhYmVsLAorICAgICAgICAgICAgICAgICAgIGhvcF9saW1pdCwKKyAgICAgICAgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICBuZXh0X2hlYWRlcikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJJUHY2SGVhZGVyKHNvdXJjZV9hZGRyZXNzPXt9LCBkZXN0aW5hdGlvbl9hZGRyZXNzPXt9LCBuZXh0X2hlYWRlcj17fSwgcGF5bG9hZF9sZW5ndGg9e30sIFwKKyAgICAgICAgICAgIGhvcF9saW1pdD17fSwgdHJhZmZpY19jbGFzcz17fSwgZmxvd19sYWJlbD17fSkiLmZvcm1hdChzZWxmLnNvdXJjZV9hZGRyZXNzLmNvbXByZXNzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXN0aW5hdGlvbl9hZGRyZXNzLmNvbXByZXNzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0X2hlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBheWxvYWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG9wX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJhZmZpY19jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZsb3dfbGFiZWwpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlcl9sZW5ndGgKKworCitjbGFzcyBJUHY2UGFja2V0KENvbnZlcnRpYmxlVG9CeXRlcyk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIElQdjYgcGFja2V0LgorCisgICAgSVB2NiBwYWNrZXQgY29uc2lzdHMgb2YgSVB2NiBoZWFkZXIsIG9wdGlvbmFsIGV4dGVuc2lvbiBoZWFkZXIsIGFuZCB1cHBlciBsYXllciBwcm90b2NvbC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHY2IHBhY2tldAorCisgICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8IElQdjYgaGVhZGVyIHwgZXh0ZW5zaW9uIGhlYWRlcnMgKHplcm8gb3IgbW9yZSkgfCB1cHBlciBsYXllciBwcm90b2NvbCAoZS5nLiBVRFAsIFRDUCwgSUNNUHY2KSB8CisgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgIEV4dGVuc2lvbiBoZWFkZXJzOgorICAgICAgICAtIEhvcEJ5SG9wCisgICAgICAgIC0gUm91dGluZyBoZWFkZXIgKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIG1vZHVsZSkKKworICAgIFVwcGVyIGxheWVyIHByb3RvY29sczoKKyAgICAgICAgLSBJQ01QdjYKKyAgICAgICAgLSBVRFAKKyAgICAgICAgLSBUQ1AgKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIG1vZHVsZSkKKworICAgIEV4YW1wbGU6CisgICAgICAgIElQdjYgcGFja2V0IGNvbnN0cnVjdGlvbiB3aXRob3V0IGV4dGVuc2lvbiBoZWFkZXJzOgorCisgICAgICAgIGlwdjZfcGFja2V0ID0gSVB2NlBhY2tldChJUHY2SGVhZGVyKCJmZDAwOjEyMzQ6NDU1NTo6ZmY6ZmUwMDoxODAwIiwgImZmMDM6OjEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDTVB2NihJQ01QdjZIZWFkZXIoMTI4LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ01QdjZFY2hvQm9keSgwLCAyLCAgYnl0ZXMoWzB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pKSkpCisKKyAgICAgICAgSVB2NiBwYWNrZXQgY29uc3RydWN0aW9uIHdpdGggZXh0ZW5zaW9uIGhlYWRlcnM6CisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBJUHY2UGFja2V0KElQdjZIZWFkZXIoImZkMDA6MTIzNDo0NTU1OjpmZjpmZTAwOjE4MDAiLCAiZmYwMzo6MSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNNUHY2KElDTVB2NkhlYWRlcigxMjgsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDTVB2NkVjaG9Cb2R5KDAsIDIsICBieXRlcyhbMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hvcEJ5SG9wKG9wdGlvbnM9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvcEJ5SG9wT3B0aW9uKEhvcEJ5SG9wT3B0aW9uSGVhZGVyKF90eXBlPTB4NmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QTE9wdGlvbihTPTEsIE09MCwgVj0wLCBzZXF1ZW5jZT0yLCBzZWVkX2lkPWJ5dGVzKFsweDAwLCAweDE4XSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSldKQorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXB2Nl9oZWFkZXIsIHVwcGVyX2xheWVyX3Byb3RvY29sLCBleHRlbnNpb25faGVhZGVycz1Ob25lKToKKyAgICAgICAgc2VsZi5pcHY2X2hlYWRlciA9IGlwdjZfaGVhZGVyCisKKyAgICAgICAgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbCA9IHVwcGVyX2xheWVyX3Byb3RvY29sCisKKyAgICAgICAgc2VsZi5leHRlbnNpb25faGVhZGVycyA9IGV4dGVuc2lvbl9oZWFkZXJzIGlmIGV4dGVuc2lvbl9oZWFkZXJzIGlzIG5vdCBOb25lIGVsc2UgW10KKworICAgICAgICBzZWxmLl91cGRhdGVfbmV4dF9oZWFkZXJfdmFsdWVzX2luX2hlYWRlcnMoKQorCisgICAgICAgIGlmIG5vdCB1cHBlcl9sYXllcl9wcm90b2NvbC5pc192YWxpZF9jaGVja3N1bSgpOgorICAgICAgICAgICAgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC5jaGVja3N1bSA9IHNlbGYuY2FsY3VsYXRlX2NoZWNrc3VtKCkKKworICAgIGRlZiBfdmFsaWRhdGVfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIGNoZWNrc3VtID0gc2VsZi5jYWxjdWxhdGVfY2hlY2tzdW0oKQorCisgICAgICAgIGlmIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0gIT0gY2hlY2tzdW06CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgSVB2NiBwYWNrZXQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBjaGVja3N1bToge30hPXt9Ii5mb3JtYXQoc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC5jaGVja3N1bSwgY2hlY2tzdW0pKQorCisgICAgICAgIHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0gPSBjaGVja3N1bQorCisgICAgZGVmIF91cGRhdGVfcGF5bG9hZF9sZW5ndGhfdmFsdWVfaW5faXB2Nl9oZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYuaXB2Nl9oZWFkZXIucGF5bG9hZF9sZW5ndGggPSBsZW4oc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbCkgKyBcCisgICAgICAgICAgICBzdW0oW2xlbihleHRlbnNpb25faGVhZGVyKSBmb3IgZXh0ZW5zaW9uX2hlYWRlciBpbiBzZWxmLmV4dGVuc2lvbl9oZWFkZXJzXSkKKworICAgIGRlZiBfdXBkYXRlX25leHRfaGVhZGVyX3ZhbHVlc19pbl9oZWFkZXJzKHNlbGYpOgorICAgICAgICBsYXN0X2hlYWRlciA9IHNlbGYuaXB2Nl9oZWFkZXIKKworICAgICAgICBmb3IgZXh0ZW5zaW9uX2hlYWRlciBpbiBzZWxmLmV4dGVuc2lvbl9oZWFkZXJzOgorICAgICAgICAgICAgbGFzdF9oZWFkZXIubmV4dF9oZWFkZXIgPSBleHRlbnNpb25faGVhZGVyLnR5cGUKKyAgICAgICAgICAgIGxhc3RfaGVhZGVyID0gZXh0ZW5zaW9uX2hlYWRlcgorCisgICAgICAgIGxhc3RfaGVhZGVyLm5leHRfaGVhZGVyID0gc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC50eXBlCisKKyAgICBkZWYgY2FsY3VsYXRlX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBzYXZlZF9jaGVja3N1bSA9IHNlbGYudXBwZXJfbGF5ZXJfcHJvdG9jb2wuY2hlY2tzdW0KKworICAgICAgICBzZWxmLnVwcGVyX2xheWVyX3Byb3RvY29sLmNoZWNrc3VtID0gMAorCisgICAgICAgIHVwcGVyX2xheWVyX3Byb3RvY29sX2J5dGVzID0gc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC50b19ieXRlcygpCisKKyAgICAgICAgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC5jaGVja3N1bSA9IHNhdmVkX2NoZWNrc3VtCisKKyAgICAgICAgcHNldWRvX2hlYWRlciA9IElQdjZQc2V1ZG9IZWFkZXIoc2VsZi5pcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4odXBwZXJfbGF5ZXJfcHJvdG9jb2xfYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVwcGVyX2xheWVyX3Byb3RvY29sLnR5cGUpCisKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZV9jaGVja3N1bShwc2V1ZG9faGVhZGVyLnRvX2J5dGVzKCkgKyB1cHBlcl9sYXllcl9wcm90b2NvbF9ieXRlcykKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdXBkYXRlX3BheWxvYWRfbGVuZ3RoX3ZhbHVlX2luX2lwdjZfaGVhZGVyKCkKKyAgICAgICAgc2VsZi5fdXBkYXRlX25leHRfaGVhZGVyX3ZhbHVlc19pbl9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbC5jaGVja3N1bSA9IHNlbGYuY2FsY3VsYXRlX2NoZWNrc3VtKCkKKworICAgICAgICBpcHY2X3BhY2tldCA9IHNlbGYuaXB2Nl9oZWFkZXIudG9fYnl0ZXMoKQorCisgICAgICAgIGZvciBleHRlbnNpb25faGVhZGVyIGluIHNlbGYuZXh0ZW5zaW9uX2hlYWRlcnM6CisgICAgICAgICAgICBpcHY2X3BhY2tldCArPSBleHRlbnNpb25faGVhZGVyLnRvX2J5dGVzKCkKKworICAgICAgICBpcHY2X3BhY2tldCArPSBzZWxmLnVwcGVyX2xheWVyX3Byb3RvY29sLnRvX2J5dGVzKCkKKworICAgICAgICByZXR1cm4gaXB2Nl9wYWNrZXQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJJUHY2UGFja2V0KGhlYWRlcj17fSwgdXBwZXJfbGF5ZXJfcHJvdG9jb2w9e30pIi5mb3JtYXQoc2VsZi5pcHY2X2hlYWRlciwgc2VsZi51cHBlcl9sYXllcl9wcm90b2NvbCkKKworCitjbGFzcyBVRFBIZWFkZXIoQ29udmVydGlibGVUb0J5dGVzLCBCdWlsZGFibGVGcm9tQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBVRFAgZGF0YWdyYW0gaGVhZGVyLgorCisgICAgVGhpcyBoZWFkZXIgaXMgcmVxdWlyZWQgdG8gY29uc3RydWN0IFVEUCBkYXRhZ3JhbS4KKworICAgICIiIgorCisgICAgX2hlYWRlcl9sZW5ndGggPSA4CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjX3BvcnQsIGRzdF9wb3J0LCBwYXlsb2FkX2xlbmd0aD0wLCBjaGVja3N1bT0wKToKKyAgICAgICAgc2VsZi5zcmNfcG9ydCA9IHNyY19wb3J0CisgICAgICAgIHNlbGYuZHN0X3BvcnQgPSBkc3RfcG9ydAorCisgICAgICAgIHNlbGYuX3BheWxvYWRfbGVuZ3RoID0gcGF5bG9hZF9sZW5ndGgKKyAgICAgICAgc2VsZi5jaGVja3N1bSA9IGNoZWNrc3VtCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDE3CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF5bG9hZF9sZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXlsb2FkX2xlbmd0aAorCisgICAgQHBheWxvYWRfbGVuZ3RoLnNldHRlcgorICAgIGRlZiBwYXlsb2FkX2xlbmd0aChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3BheWxvYWRfbGVuZ3RoID0gc2VsZi5faGVhZGVyX2xlbmd0aCArIHZhbHVlCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkgiLCBzZWxmLnNyY19wb3J0KQorICAgICAgICBkYXRhICs9IHN0cnVjdC5wYWNrKCI+SCIsIHNlbGYuZHN0X3BvcnQpCisgICAgICAgIGRhdGEgKz0gc3RydWN0LnBhY2soIj5IIiwgc2VsZi5wYXlsb2FkX2xlbmd0aCkKKyAgICAgICAgZGF0YSArPSBzdHJ1Y3QucGFjaygiPkgiLCBzZWxmLmNoZWNrc3VtKQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICBzcmNfcG9ydCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBkc3RfcG9ydCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBjaGVja3N1bSA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIHJldHVybiBjbHMoc3JjX3BvcnQsIGRzdF9wb3J0LCBwYXlsb2FkX2xlbmd0aCwgY2hlY2tzdW0pCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlcl9sZW5ndGgKKworCitjbGFzcyBVRFBEYXRhZ3JhbShVcHBlckxheWVyUHJvdG9jb2wpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBVRFAgZGF0YWdyYW0uCisKKyAgICBVRFAgaXMgYW4gdXBwZXIgbGF5ZXIgcHJvdG9jb2wgZm9yIElQdjYgc28gaXQgY2FuIGJlIHBhc3NlZCB0byBJUHY2IHBhY2tldCBhcyB1cHBlcl9sYXllcl9wcm90b2NvbC4KKworICAgIFRoaXMgY2xhc3MgY29uc2lzdHMgb2YgYSBVRFAgaGVhZGVyIGFuZCBwYXlsb2FkLiBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgYSBVRFAgZGF0YWdyYW0gY2FuIGJlIGNvbnN0cnVjdGVkLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgdWRwX2RncmFtID0gVURQRGF0YWdyYW0oVURQSGVhZGVyKHNyY19wb3J0PTE5Nzg4LCBkc3RfcG9ydD0xOTc4OCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKFsweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgwMSwgMHgwYiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4YzYsIDB4NjksIDB4NzMsIDB4NTEsIDB4MGUsIDB4MDEsIDB4ODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDAyLCAweDAwLCAweDAxLCAweGRlLCAweGFkLCAweGJlLCAweGVmXSkpCisKKyAgICAiIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gMTcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXIsIHBheWxvYWQpOgorICAgICAgICBzdXBlcihVRFBEYXRhZ3JhbSwgc2VsZikuX19pbml0X18oaGVhZGVyKQorICAgICAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuaGVhZGVyLnBheWxvYWRfbGVuZ3RoID0gbGVuKHNlbGYucGF5bG9hZCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZGF0YSArPSBzZWxmLmhlYWRlci50b19ieXRlcygpCisgICAgICAgIGRhdGEgKz0gc2VsZi5wYXlsb2FkLnRvX2J5dGVzKCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuaGVhZGVyKSArIGxlbihzZWxmLnBheWxvYWQpCisKKworY2xhc3MgSUNNUHY2SGVhZGVyKENvbnZlcnRpYmxlVG9CeXRlcywgQnVpbGRhYmxlRnJvbUJ5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgSUNNUHY2IG1lc3NhZ2UgaGVhZGVyLgorCisgICAgVGhpcyBoZWFkZXIgaXMgcmVxdWlyZWQgdG8gY29uc3RydWN0IElDTVB2NiBtZXNzYWdlLgorCisgICAgIiIiCisKKyAgICBfaGVhZGVyX2xlbmd0aCA9IDQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfdHlwZSwgY29kZSwgY2hlY2tzdW09MCk6CisgICAgICAgIHNlbGYudHlwZSA9IF90eXBlCisgICAgICAgIHNlbGYuY29kZSA9IGNvZGUKKworICAgICAgICBzZWxmLmNoZWNrc3VtID0gY2hlY2tzdW0KKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbc2VsZi50eXBlLCBzZWxmLmNvZGVdKSArIHN0cnVjdC5wYWNrKCI+SCIsIHNlbGYuY2hlY2tzdW0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICBfdHlwZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIGNvZGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBjaGVja3N1bSA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIHJldHVybiBjbHMoX3R5cGUsIGNvZGUsIGNoZWNrc3VtKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoCisKKworY2xhc3MgSUNNUHY2KFVwcGVyTGF5ZXJQcm90b2NvbCk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIElDTVB2NiBtZXNzYWdlLgorCisgICAgSUNNUHY2IGlzIGFuIHVwcGVyIGxheWVyIHByb3RvY29sIGZvciBJUHY2IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gSVB2NiBwYWNrZXQgYXMgdXBwZXJfbGF5ZXJfcHJvdG9jb2wuCisKKyAgICBUaGlzIGNsYXNzIGNvbnNpc3RzIG9mIGFuIElDTVB2NiBoZWFkZXIgYW5kIGJvZHkuIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhbiBJQ01QdjYgbWVzc2FnZSBjYW4gYmUgY29uc3RydWN0ZWQuCisKKyAgICBFeGFtcGxlOgorICAgICAgICBpY21wdjZfbXNnID0gSUNNUHY2KElDTVB2NkhlYWRlcigxMjgsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDTVB2NkVjaG9Cb2R5KDAsIDIsIGJ5dGVzKFsweDgwLCAweDAwLCAweGM3LCAweGJmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxXSkpKQorCisgICAgIiIiCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiA1OAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlYWRlciwgYm9keSk6CisgICAgICAgIHN1cGVyKElDTVB2Niwgc2VsZikuX19pbml0X18oaGVhZGVyKQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBieXRlYXJyYXkoc2VsZi5oZWFkZXIudG9fYnl0ZXMoKSArIHNlbGYuYm9keS50b19ieXRlcygpKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5oZWFkZXIpICsgbGVuKHNlbGYuYm9keSkKKworCitjbGFzcyBIb3BCeUhvcChFeHRlbnNpb25IZWFkZXIpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBIb3BCeUhvcCBleHRlbnNpb24gaGVhZGVyLgorCisgICAgSG9wQnlIb3AgZXh0ZW5zaW9uIGhlYWRlciBjb25zaXN0cyBvZjoKKyAgICAgICAgLSBuZXh0X2hlYWRlciB0eXBlCisgICAgICAgIC0gZXh0ZW5zaW9uIGhlYWRlciBsZW5ndGggd2hpY2ggaXMgbXVsdGlwbGUgb2YgOAorICAgICAgICAtIG9wdGlvbnMKKworICAgICIiIgorICAgIF9vbmVfYnl0ZV9wYWRkaW5nID0gMHgwMAorICAgIF9tYW55X2J5dGVzX3BhZGRpbmcgPSAweDAxCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXh0X2hlYWRlcj1Ob25lLCBvcHRpb25zPU5vbmUsIGhkcl9leHRfbGVuPU5vbmUpOgorICAgICAgICBzdXBlcihIb3BCeUhvcCwgc2VsZikuX19pbml0X18obmV4dF9oZWFkZXIsIGhkcl9leHRfbGVuKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zIGlmIG9wdGlvbnMgaXMgbm90IE5vbmUgZWxzZSBbXQorCisgICAgICAgIGlmIGhkcl9leHRfbGVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5oZHJfZXh0X2xlbiA9IGhkcl9leHRfbGVuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IHNlbGYuX2NhbGN1bGF0ZV9wYXlsb2FkX2xlbmd0aCgpCisgICAgICAgICAgICBzZWxmLmhkcl9leHRfbGVuID0gc2VsZi5fY2FsY3VsYXRlX2hkcl9leHRfbGVuKHBheWxvYWRfbGVuZ3RoKQorCisgICAgZGVmIF9jYWxjdWxhdGVfcGF5bG9hZF9sZW5ndGgoc2VsZik6CisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gMgorCisgICAgICAgIGZvciBvcHRpb24gaW4gc2VsZi5vcHRpb25zOgorICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGggKz0gbGVuKG9wdGlvbikKKworICAgICAgICByZXR1cm4gcGF5bG9hZF9sZW5ndGgKKworICAgIGRlZiBfY2FsY3VsYXRlX2hkcl9leHRfbGVuKHNlbGYsIHBheWxvYWRfbGVuZ3RoKToKKyAgICAgICAgY291bnQgPSBwYXlsb2FkX2xlbmd0aCA+PiAzCisKKyAgICAgICAgaWYgKHBheWxvYWRfbGVuZ3RoICYgMHg3KSA9PSAwIGFuZCBjb3VudCA+IDA6CisgICAgICAgICAgICByZXR1cm4gY291bnQgLSAxCisKKyAgICAgICAgcmV0dXJuIGNvdW50CisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW3NlbGYubmV4dF9oZWFkZXIsIHNlbGYuaGRyX2V4dF9sZW5dKQorCisgICAgICAgIGZvciBvcHRpb24gaW4gc2VsZi5vcHRpb25zOgorICAgICAgICAgICAgZGF0YSArPSBvcHRpb24udG9fYnl0ZXMoKQorCisgICAgICAgICMgUGFkZGluZworICAgICAgICAjCisgICAgICAgICMgTW9yZSBkZXRhaWxzOgorICAgICAgICAjICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI0NjAjc2VjdGlvbi00LjIKKyAgICAgICAgIworICAgICAgICBleGNlc3NfYnl0ZXMgPSBsZW4oZGF0YSkgJiAweDcKKworICAgICAgICBpZiBleGNlc3NfYnl0ZXMgPiAwOgorICAgICAgICAgICAgcGFkZGluZ19sZW5ndGggPSA4IC0gZXhjZXNzX2J5dGVzCisKKyAgICAgICAgICAgIGlmIHBhZGRpbmdfbGVuZ3RoID09IDE6CisgICAgICAgICAgICAgICAgZGF0YSArPSBieXRlYXJyYXkoW3NlbGYuX29uZV9ieXRlX3BhZGRpbmddKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhZGRpbmdfbGVuZ3RoIC09IDIKKyAgICAgICAgICAgICAgICBkYXRhICs9IGJ5dGVhcnJheShbc2VsZi5fbWFueV9ieXRlc19wYWRkaW5nLCBwYWRkaW5nX2xlbmd0aF0pCisgICAgICAgICAgICAgICAgZGF0YSArPSBieXRlYXJyYXkoWzB4MDAgZm9yIF8gaW4gcmFuZ2UocGFkZGluZ19sZW5ndGgpXSkKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICIiIiBIb3BCeUhvcCBleHRlbnNpb24gaGVhZGVyIGxlbmd0aAorCisgICAgICAgIE1vcmUgZGV0YWlsczoKKyAgICAgICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNDYwI3NlY3Rpb24tNC4zCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5oZHJfZXh0X2xlbiArIDEpICogOAorCisKK2NsYXNzIEhvcEJ5SG9wT3B0aW9uSGVhZGVyKENvbnZlcnRpYmxlVG9CeXRlcywgQnVpbGRhYmxlRnJvbUJ5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgSG9wQnlIb3Agb3B0aW9uIGhlYWRlci4gIiIiCisKKyAgICBfaGVhZGVyX2xlbmd0aCA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfdHlwZSwgbGVuZ3RoPU5vbmUpOgorICAgICAgICBzZWxmLnR5cGUgPSBfdHlwZQorICAgICAgICBzZWxmLmxlbmd0aCA9IGxlbmd0aCBpZiBsZW5ndGggaXMgbm90IE5vbmUgZWxzZSAwCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBieXRlYXJyYXkoW3NlbGYudHlwZSwgc2VsZi5sZW5ndGhdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgX3R5cGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBsZW5ndGggPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByZXR1cm4gY2xzKF90eXBlLCBsZW5ndGgpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlcl9sZW5ndGgKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJIb3BCeUhvcE9wdGlvbkhlYWRlcih0eXBlPXt9LCBsZW5ndGg9e30pIi5mb3JtYXQoc2VsZi50eXBlLCBzZWxmLmxlbmd0aCkKKworCitjbGFzcyBIb3BCeUhvcE9wdGlvbihDb252ZXJ0aWJsZVRvQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBIb3BCeUhvcCBvcHRpb24uCisKKyAgICBDbGFzcyBjb25zaXN0cyBvZiB0d28gZWxlbWVudHM6IEhvcEJ5SG9wT3B0aW9uSGVhZGVyIGFuZCB2YWx1ZSAoZS5nLiBmb3IgTVBMT3B0aW9uKS4KKworICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgYW55IEhvcEJ5SG9wIG9wdGlvbiBjYW4gYmUgY29uc3RydWN0ZWQuCisKKyAgICBFeGFtcGxlOgorICAgICAgICBIb3BCeUhvcChuZXh0X2hlYWRlcj0weDNhLAorICAgICAgICAgICAgICAgICBvcHRpb25zPVtIb3BCeUhvcE9wdGlvbihIb3BCeUhvcE9wdGlvbkhlYWRlcihfdHlwZT0weDZkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBMT3B0aW9uKFM9MSwgTT0wLCBWPTAsIHNlcXVlbmNlPTIsIHNlZWRfaWQ9Ynl0ZXMoWzB4MDAsIDB4MThdKSkpCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXIsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICAgICAgc2VsZi5oZWFkZXIgPSBoZWFkZXIKKyAgICAgICAgc2VsZi5oZWFkZXIubGVuZ3RoID0gbGVuKHNlbGYudmFsdWUpCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhlYWRlci50b19ieXRlcygpICsgc2VsZi52YWx1ZS50b19ieXRlcygpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmhlYWRlcikgKyBsZW4oc2VsZi52YWx1ZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJIb3BCeUhvcE9wdGlvbihoZWFkZXI9e30sIHZhbHVlPXt9KSIuZm9ybWF0KHNlbGYuaGVhZGVyLCBzZWxmLnZhbHVlKQorCisKK2NsYXNzIE1QTE9wdGlvbihDb252ZXJ0aWJsZVRvQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBNUEwgb3B0aW9uLiAiIiIKKworICAgIF9oZWFkZXJfbGVuZ3RoID0gMgorCisgICAgX3NlZWRfaWRfbGVuZ3RoID0geworICAgICAgICAwOiAwLAorICAgICAgICAxOiAyLAorICAgICAgICAyOiA4LAorICAgICAgICAzOiAxNgorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBTLCBNLCBWLCBzZXF1ZW5jZSwgc2VlZF9pZCk6CisgICAgICAgIHNlbGYuUyA9IFMKKyAgICAgICAgc2VsZi5NID0gTQorICAgICAgICBzZWxmLlYgPSBWCisgICAgICAgIHNlbGYuc2VxdWVuY2UgPSBzZXF1ZW5jZQorICAgICAgICBzZWxmLnNlZWRfaWQgPSBzZWVkX2lkCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHNtdiA9ICgoc2VsZi5TICYgMHgwMykgPDwgNikgfCAoKHNlbGYuTSAmIDB4MDEpIDw8IDUpIHwgKChzZWxmLlYgJiAweDAxKSA8PCA0KQorCisgICAgICAgIHJldHVybiBieXRlYXJyYXkoW3Ntdiwgc2VsZi5zZXF1ZW5jZV0pICsgc2VsZi5zZWVkX2lkCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICBiID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBzID0gKChiID4+IDYpICYgMHgwMykKKyAgICAgICAgbSA9ICgoYiA+PiA1KSAmIDB4MDEpCisgICAgICAgIHYgPSAoKGIgPj4gNCkgJiAweDAxKQorCisgICAgICAgIHNlcXVlbmNlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgc2VlZF9pZCA9IGRhdGEucmVhZChjbHMuX3NlZWRfaWRfbGVuZ3RoW3NdKQorCisgICAgICAgIHJldHVybiBjbHMocywgbSwgdiwgc2VxdWVuY2UsIHNlZWRfaWQpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlcl9sZW5ndGggKyBzZWxmLl9zZWVkX2lkX2xlbmd0aFtzZWxmLlNdCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTVBMT3B0aW9uKFM9e30sIE09e30sIFY9e30sIHNlcXVlbmNlPXt9LCBzZWVkX2lkPXt9KSIuZm9ybWF0KHNlbGYuUywgc2VsZi5NLCBzZWxmLlYsIHNlbGYuc2VxdWVuY2UsIGhleGxpZnkoc2VsZi5zZWVkX2lkKSkKKworCitjbGFzcyBJUHY2UGFja2V0RmFjdG9yeShQYWNrZXRGYWN0b3J5KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgSVB2NiBwYWNrZXRzIGZyb20gZGF0YS4KKworICAgIFRoaXMgZmFjdG9yeSBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggZmFjdG9yaWVzIHdoaWNoIGFsbG93IHRvIHBhcnNlIGV4dGVuc2lvbiBoZWFkZXJzIGFuZCB1cHBlciBsYXllciBwcm90b2NvbHMuCisKKyAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgcHJlZmVyYWJsZSBzZXR1cCBvZiBJUHY2UGFja2V0RmFjdG9yeS4KKworICAgIEhlYWRlciB0eXBlczoKKyAgICAgICAgMDogSG9wQnlIb3AKKyAgICAgICAgMTc6IFVEUAorICAgICAgICA1ODogSUNNUHY2CisKKyAgICBPcHRpb24gdHlwZXM6CisgICAgICAgIDEwOTogTVBMCisKKyAgICBJQ01QdjYgYm9keSB0eXBlczoKKyAgICAgICAgMTI4OiBFY2hvIHJlcXVlc3QKKyAgICAgICAgMTI5OiBFY2hvIHJlc3BvbnNlCisKKyAgICBFeGFtcGxlIHVzYWdlOgorCisgICAgICAgIGlwdjZfZmFjdG9yeSA9IElQdjZQYWNrZXRGYWN0b3J5KAorICAgICAgICAgICAgZWhmPXsKKyAgICAgICAgICAgICAgICAwOiBIb3BCeUhvcEZhY3Rvcnkob3B0aW9uc19mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICAgICAxMDk6IE1QTE9wdGlvbkZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdWxwZj17CisgICAgICAgICAgICAgICAgMTc6IFVEUERhdGFncmFtRmFjdG9yeShkc3RfcG9ydF9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICAgICAxOTc4ODogTUxFTWVzc2FnZUZhY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgMTk3ODk6IENvQVBNZXNzYWdlRmFjdG9yeSgpCisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICAgICAgNTg6IElDTVB2NkZhY3RvcnkoYm9keV9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICAgICAxMjg6IElDTVB2NkVjaG9Cb2R5RmFjdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICAxMjk6IElDTVB2NkVjaG9Cb2R5RmFjdG9yeSgpCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWhmPU5vbmUsIHVscGY9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBlaGYgLSBFeHRlbnNpb24gSGVhZGVyIEZhY3RvcnkKKyAgICAgICAgdWxwZiAtIFVwcGVyIExheWVyIFByb3RvY29sIEZhY3RvcnkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZWhmKGRpY3RbaW50OiBQYWNrZXRGYWN0b3J5XSk6IERpY3Rpb25hcnkgbWFwcGluZyBleHRlbnNpb24gaGVhZGVyIHR5cGVzIG9uIHNwZWNpYWxpemVkIGZhY3Rvcmllcy4KKyAgICAgICAgICAgIHVscGYoZGljdFtpbnQ6IFBhY2tldEZhY3RvcnldKTogRGljdGlvbmFyeSBtYXBwaW5nIHVwcGVyIGxheWVyIHByb3RvY29sIHR5cGVzIG9uIHNwZWNpYWxpemVkIGZhY3Rvcmllcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2VoZiA9IGVoZiBpZiBlaGYgaXMgbm90IE5vbmUgZWxzZSB7fQorICAgICAgICBzZWxmLl91bHBmID0gdWxwZiBpZiB1bHBmIGlzIG5vdCBOb25lIGVsc2Uge30KKworICAgIGRlZiBfaXNfZXh0ZW5zaW9uX2hlYWRlcihzZWxmLCBoZWFkZXJfdHlwZSk6CisgICAgICAgIHJldHVybiBub3QgaGVhZGVyX3R5cGUgaW4gVVBQRVJfTEFZRVJfUFJPVE9DT0xTCisKKyAgICBkZWYgX2dldF9leHRlbnNpb25faGVhZGVyX2ZhY3RvcnlfZm9yKHNlbGYsIG5leHRfaGVhZGVyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2VoZltuZXh0X2hlYWRlcl0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZ2V0IEV4dGVuc2lvbiBIZWFkZXIgZmFjdG9yeSBmb3IgbmV4dF9oZWFkZXI9e30uIi5mb3JtYXQobmV4dF9oZWFkZXIpKQorCisgICAgZGVmIF9nZXRfdXBwZXJfbGF5ZXJfcHJvdG9jb2xfZmFjdG9yeV9mb3Ioc2VsZiwgbmV4dF9oZWFkZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdWxwZltuZXh0X2hlYWRlcl0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZ2V0IFVwcGVyIExheWVyIFByb3RvY29sIGZhY3RvcnkgZm9yIG5leHRfaGVhZGVyPXt9LiIuZm9ybWF0KG5leHRfaGVhZGVyKSkKKworICAgIGRlZiBfcGFyc2VfZXh0ZW5zaW9uX2hlYWRlcnMoc2VsZiwgZGF0YSwgbmV4dF9oZWFkZXIsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJzID0gW10KKworICAgICAgICB3aGlsZSBzZWxmLl9pc19leHRlbnNpb25faGVhZGVyKG5leHRfaGVhZGVyKToKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9nZXRfZXh0ZW5zaW9uX2hlYWRlcl9mYWN0b3J5X2ZvcihuZXh0X2hlYWRlcikKKworICAgICAgICAgICAgZXh0ZW5zaW9uX2hlYWRlciA9IGZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICAgICBuZXh0X2hlYWRlciA9IGV4dGVuc2lvbl9oZWFkZXIubmV4dF9oZWFkZXIKKworICAgICAgICAgICAgZXh0ZW5zaW9uX2hlYWRlcnMuYXBwZW5kKGV4dGVuc2lvbl9oZWFkZXIpCisKKyAgICAgICAgcmV0dXJuIG5leHRfaGVhZGVyLCBleHRlbnNpb25faGVhZGVycworCisgICAgZGVmIF9wYXJzZV91cHBlcl9sYXllcl9wcm90b2NvbChzZWxmLCBkYXRhLCBuZXh0X2hlYWRlciwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2dldF91cHBlcl9sYXllcl9wcm90b2NvbF9mYWN0b3J5X2ZvcihuZXh0X2hlYWRlcikKKworICAgICAgICByZXR1cm4gZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaXB2Nl9oZWFkZXIgPSBJUHY2SGVhZGVyLmZyb21fYnl0ZXMoZGF0YSkKKworICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSBpcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcworICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9IGlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MKKworICAgICAgICBuZXh0X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMgPSBzZWxmLl9wYXJzZV9leHRlbnNpb25faGVhZGVycyhkYXRhLCBpcHY2X2hlYWRlci5uZXh0X2hlYWRlciwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHVwcGVyX2xheWVyX3Byb3RvY29sID0gc2VsZi5fcGFyc2VfdXBwZXJfbGF5ZXJfcHJvdG9jb2woZGF0YSwgbmV4dF9oZWFkZXIsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICByZXR1cm4gSVB2NlBhY2tldChpcHY2X2hlYWRlciwgdXBwZXJfbGF5ZXJfcHJvdG9jb2wsIGV4dGVuc2lvbl9oZWFkZXJzKQorCisKK2NsYXNzIEhvcEJ5SG9wT3B0aW9uc0ZhY3Rvcnkob2JqZWN0KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgSG9wQnlIb3Agb3B0aW9ucy4gIiIiCisKKyAgICBfb25lX2J5dGVfcGFkZGluZyA9IDB4MDAKKyAgICBfbWFueV9ieXRlc19wYWRkaW5nID0gMHgwMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnNfZmFjdG9yaWVzPU5vbmUpOgorICAgICAgICBzZWxmLl9vcHRpb25zX2ZhY3RvcmllcyA9IG9wdGlvbnNfZmFjdG9yaWVzIGlmIG9wdGlvbnNfZmFjdG9yaWVzIGlzIG5vdCBOb25lIGVsc2Uge30KKworICAgIGRlZiBfZ2V0X0hvcEJ5SG9wT3B0aW9uX3ZhbHVlX2ZhY3Rvcnkoc2VsZiwgX3R5cGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9uc19mYWN0b3JpZXNbX3R5cGVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGZpbmQgSG9wQnlIb3BPcHRpb24gdmFsdWUgZmFjdG9yeSBmb3IgdHlwZT17fS4iLmZvcm1hdChfdHlwZSkpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIG9wdGlvbl9oZWFkZXIgPSBIb3BCeUhvcE9wdGlvbkhlYWRlci5mcm9tX2J5dGVzKGRhdGEpCisKKyAgICAgICAgICAgIGlmIG9wdGlvbl9oZWFkZXIudHlwZSA9PSBzZWxmLl9vbmVfYnl0ZV9wYWRkaW5nOgorICAgICAgICAgICAgICAgICMgc2tpcCBvbmUgYnl0ZSBwYWRkaW5nCisgICAgICAgICAgICAgICAgZGF0YS5yZWFkKDEpCisKKyAgICAgICAgICAgIGVsaWYgb3B0aW9uX2hlYWRlci50eXBlID09IHNlbGYuX21hbnlfYnl0ZXNfcGFkZGluZzoKKyAgICAgICAgICAgICAgICAjIHNraXAgbiBieXRlcyBwYWRkaW5nCisgICAgICAgICAgICAgICAgZGF0YS5yZWFkKG9wdGlvbl9oZWFkZXIubGVuZ3RoKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9nZXRfSG9wQnlIb3BPcHRpb25fdmFsdWVfZmFjdG9yeShvcHRpb25faGVhZGVyLnR5cGUpCisKKyAgICAgICAgICAgICAgICBvcHRpb25fZGF0YSA9IGRhdGEucmVhZChvcHRpb25faGVhZGVyLmxlbmd0aCkKKworICAgICAgICAgICAgICAgIG9wdGlvbiA9IEhvcEJ5SG9wT3B0aW9uKG9wdGlvbl9oZWFkZXIsIGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhvcHRpb25fZGF0YSksIG1lc3NhZ2VfaW5mbykpCisKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFwcGVuZChvcHRpb24pCisKKyAgICAgICAgcmV0dXJuIG9wdGlvbnMKKworCitjbGFzcyBIb3BCeUhvcEZhY3RvcnkoUGFja2V0RmFjdG9yeSk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIEhvcEJ5SG9wIGV4dGVuc2lvbiBoZWFkZXJzIGZyb20gZGF0YS4gIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl9ob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeSA9IGhvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5CisKKyAgICBkZWYgX2NhbGN1bGF0ZV9leHRlbnNpb25faGVhZGVyX2xlbmd0aChzZWxmLCBoZHJfZXh0X2xlbik6CisgICAgICAgIHJldHVybiAoaGRyX2V4dF9sZW4gKyAxKSAqIDgKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBuZXh0X2hlYWRlciA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgaGRyX2V4dF9sZW4gPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgICMgTm90ZSEgVHdvIGJ5dGVzIHdlcmUgcmVhZCAobmV4dF9oZWFkZXIgYW5kIGhkcl9leHRfbGVuKSBzbyB0aGV5IG11c3QgYmUgc3Vic3RyYWN0ZWQgZnJvbSBoZWFkZXIgbGVuZ3RoCisgICAgICAgIGhvcF9ieV9ob3BfbGVuZ3RoID0gc2VsZi5fY2FsY3VsYXRlX2V4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoKGhkcl9leHRfbGVuKSAtIDIKKworICAgICAgICBob3BfYnlfaG9wX2RhdGEgPSBkYXRhLnJlYWQoaG9wX2J5X2hvcF9sZW5ndGgpCisKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX2hvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oaG9wX2J5X2hvcF9kYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIGhvcF9ieV9ob3AgPSBIb3BCeUhvcChuZXh0X2hlYWRlciwgb3B0aW9ucywgaGRyX2V4dF9sZW4pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnBheWxvYWRfbGVuZ3RoICs9IGxlbihob3BfYnlfaG9wKQorCisgICAgICAgIHJldHVybiBob3BfYnlfaG9wCisKKworY2xhc3MgTVBMT3B0aW9uRmFjdG9yeShQYWNrZXRGYWN0b3J5KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgTVBMIG9wdGlvbnMgZm9yIEhvcEJ5SG9wIGV4dGVuc2lvbiBoZWFkZXIuICIiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJldHVybiBNUExPcHRpb24uZnJvbV9ieXRlcyhkYXRhKQorCisKK2NsYXNzIFVEUEhlYWRlckZhY3Rvcnk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIFVEUCBoZWFkZXIuICIiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJldHVybiBVRFBIZWFkZXIuZnJvbV9ieXRlcyhkYXRhKQorCisKK2NsYXNzIFVkcEJhc2VkT25TcmNEc3RQb3J0c1BheWxvYWRGYWN0b3J5OgorCisgICAgIyBUT0RPOiBVbml0dGVzdHMKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgVURQIHBheWxvYWQuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyY19kc3RfcG9ydF9iYXNlZF9wYXlsb2FkX2ZhY3Rvcmllcyk6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgc3JjX2RzdF9wb3J0X2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzIChQYWNrZXRGYWN0b3J5KTogRmFjdG9yaWVzIHBhcnNlIFVEUCBwYXlsb2FkIGJhc2VkIG9uIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwb3J0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZmFjdG9yaWVzID0gc3JjX2RzdF9wb3J0X2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZmFjdG9yeSA9IE5vbmUKKworICAgICAgICBpZiBtZXNzYWdlX2luZm8uZHN0X3BvcnQgaW4gc2VsZi5fZmFjdG9yaWVzOgorICAgICAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2ZhY3Rvcmllc1ttZXNzYWdlX2luZm8uZHN0X3BvcnRdCisKKyAgICAgICAgaWYgbWVzc2FnZV9pbmZvLnNyY19wb3J0IGluIHNlbGYuX2ZhY3RvcmllczoKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9mYWN0b3JpZXNbbWVzc2FnZV9pbmZvLnNyY19wb3J0XQorCisgICAgICAgIGlmIGZhY3RvcnkgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGZpbmQgZmFjdG9yeSB0byBidWlsZCBVRFAgcGF5bG9hZC4iKQorCisgICAgICAgIHJldHVybiBmYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworCitjbGFzcyBVRFBEYXRhZ3JhbUZhY3RvcnkoUGFja2V0RmFjdG9yeSk6CisKKyAgICAjIFRPRE86IFVuaXR0ZXN0cworCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBVRFAgZGF0YWdyYW1zLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1ZHBfaGVhZGVyX2ZhY3RvcnksIHVkcF9wYXlsb2FkX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl91ZHBfaGVhZGVyX2ZhY3RvcnkgPSB1ZHBfaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgc2VsZi5fdWRwX3BheWxvYWRfZmFjdG9yeSA9IHVkcF9wYXlsb2FkX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBoZWFkZXIgPSBzZWxmLl91ZHBfaGVhZGVyX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVXBkYXRlIG1lc3NhZ2UgcGF5bG9hZCBsZW5ndGg6IFVEUCBoZWFkZXIgKDhCKSArIHBheWxvYWQgbGVuZ3RoCisgICAgICAgIG1lc3NhZ2VfaW5mby5wYXlsb2FkX2xlbmd0aCArPSBsZW4oaGVhZGVyKSArIChsZW4oZGF0YS5nZXR2YWx1ZSgpKSAtIGRhdGEudGVsbCgpKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5zcmNfcG9ydCA9IGhlYWRlci5zcmNfcG9ydAorICAgICAgICBtZXNzYWdlX2luZm8uZHN0X3BvcnQgPSBoZWFkZXIuZHN0X3BvcnQKKworICAgICAgICBwYXlsb2FkID0gc2VsZi5fdWRwX3BheWxvYWRfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIFVEUERhdGFncmFtKGhlYWRlciwgcGF5bG9hZCkKKworCitjbGFzcyBJQ01QdjZGYWN0b3J5KFBhY2tldEZhY3RvcnkpOgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBJQ01QdjYgbWVzc2FnZXMgZnJvbSBkYXRhLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBib2R5X2ZhY3Rvcmllcz1Ob25lKToKKyAgICAgICAgc2VsZi5fYm9keV9mYWN0b3JpZXMgPSBib2R5X2ZhY3RvcmllcyBpZiBib2R5X2ZhY3RvcmllcyBpcyBub3QgTm9uZSBlbHNlIHt9CisKKyAgICBkZWYgX2dldF9pY21wdjZfYm9keV9mYWN0b3J5KHNlbGYsIF90eXBlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2JvZHlfZmFjdG9yaWVzW190eXBlXQorCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmICJkZWZhdWx0IiBub3QgaW4gc2VsZi5fYm9keV9mYWN0b3JpZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZmluZCBzcGVjaWFsaXplZCBmYWN0b3J5IHRvIHBhcnNlIElDTVAgYm9keS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgSUNNUCB0eXBlOiB7fSIuZm9ybWF0KF90eXBlKSkKKworICAgICAgICAgICAgZGVmYXVsdF9mYWN0b3J5ID0gc2VsZi5fYm9keV9mYWN0b3JpZXNbImRlZmF1bHQiXQorCisgICAgICAgICAgICBwcmludCgiQ291bGQgbm90IGZpbmQgc3BlY2lhbGl6ZWQgZmFjdG9yeSB0byBwYXJzZSBJQ01QIGJvZHkuICIKKyAgICAgICAgICAgICAgICAgICJUYWtlIHRoZSBkZWZhdWx0IG9uZToge30iLmZvcm1hdCh0eXBlKGRlZmF1bHRfZmFjdG9yeSkpKQorCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF9mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaGVhZGVyID0gSUNNUHY2SGVhZGVyLmZyb21fYnl0ZXMoZGF0YSkKKworICAgICAgICBmYWN0b3J5ID0gc2VsZi5fZ2V0X2ljbXB2Nl9ib2R5X2ZhY3RvcnkoaGVhZGVyLnR5cGUpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnBheWxvYWRfbGVuZ3RoICs9IGxlbihoZWFkZXIpICsgKGxlbihkYXRhLmdldHZhbHVlKCkpIC0gZGF0YS50ZWxsKCkpCisKKyAgICAgICAgcmV0dXJuIElDTVB2NihoZWFkZXIsIGZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKSkKKworCitjbGFzcyBJQ01QdjZFY2hvQm9keUZhY3RvcnkoUGFja2V0RmFjdG9yeSk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIElDTVB2NiBlY2hvIG1lc3NhZ2UgYm9keS4gIiIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIElDTVB2NkVjaG9Cb2R5LmZyb21fYnl0ZXMoZGF0YSkKKworCitjbGFzcyBCeXRlc1BheWxvYWQoQ29udmVydGlibGVUb0J5dGVzLCBCdWlsZGFibGVGcm9tQnl0ZXMpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBieXRlcyBwYXlsb2FkLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorCisgICAgZGVmIHRvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gYnl0ZWFycmF5KHNlbGYuZGF0YSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YSk6CisgICAgICAgIHJldHVybiBjbHMoZGF0YSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkKKworCitjbGFzcyBCeXRlc1BheWxvYWRGYWN0b3J5KFBhY2tldEZhY3RvcnkpOgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBieXRlcyBwYXlsb2FkLiAiIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gQnl0ZXNQYXlsb2FkKGRhdGEucmVhZCgpKQorCisKK2NsYXNzIElDTVB2NkVjaG9Cb2R5KENvbnZlcnRpYmxlVG9CeXRlcywgQnVpbGRhYmxlRnJvbUJ5dGVzKToKKworICAgICIiIiBDbGFzcyByZXByZXNlbnRpbmcgYm9keSBvZiBJQ01QdjYgZWNobyBtZXNzYWdlcy4gIiIiCisKKyAgICBfaGVhZGVyX2xlbmd0aCA9IDQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpZGVudGlmaWVyLCBzZXF1ZW5jZV9udW1iZXIsIGRhdGEpOgorICAgICAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyCisgICAgICAgIHNlbGYuc2VxdWVuY2VfbnVtYmVyID0gc2VxdWVuY2VfbnVtYmVyCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+SCIsIHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgZGF0YSArPSBzdHJ1Y3QucGFjaygiPkgiLCBzZWxmLnNlcXVlbmNlX251bWJlcikKKyAgICAgICAgZGF0YSArPSBzZWxmLmRhdGEKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YSk6CisgICAgICAgIGlkZW50aWZpZXIgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgc2VxdWVuY2VfbnVtYmVyID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgcmV0dXJuIGNscyhpZGVudGlmaWVyLCBzZXF1ZW5jZV9udW1iZXIsIGRhdGEucmVhZCgpKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoICsgbGVuKHNlbGYuZGF0YSkKKworCitjbGFzcyBJQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlRmFjdG9yeShQYWNrZXRGYWN0b3J5KToKKworICAgICIiIiBGYWN0b3J5IHRoYXQgcHJvZHVjZXMgSUNNUHY2IGVjaG8gbWVzc2FnZSBib2R5LiAiIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZS5mcm9tX2J5dGVzKGRhdGEpCisKKworY2xhc3MgSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZShDb252ZXJ0aWJsZVRvQnl0ZXMsIEJ1aWxkYWJsZUZyb21CeXRlcyk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIGJvZHkgb2YgSUNNUHY2IERlc3RpbmF0aW9uIFVucmVhY2hhYmxlIG1lc3NhZ2VzLiAiIiIKKworICAgIF9oZWFkZXJfbGVuZ3RoID0gNAorICAgIF91bnVzZWQgPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzdHJ1Y3QucGFjaygiPkkiLCBzZWxmLl91bnVzZWQpKQorICAgICAgICBkYXRhICs9IHNlbGYuZGF0YQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnl0ZXMoY2xzLCBkYXRhKToKKyAgICAgICAgdW51c2VkID0gc3RydWN0LnVucGFjaygiPkkiLCBkYXRhLnJlYWQoNCkpWzBdCisgICAgICAgIGlmIHVudXNlZCAhPSAwOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICJJbnZhbGlkIHZhbHVlIG9mIHVudXNlZCBmaWVsZCBpbiB0aGUgSUNNUHY2IERlc3RpbmF0aW9uIFVucmVhY2hhYmxlIGRhdGEuIEV4cGVjdGVkIHZhbHVlOiAwLiIpCisKKyAgICAgICAgcmV0dXJuIGNscyhieXRlYXJyYXkoZGF0YS5yZWFkKCkpKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJfbGVuZ3RoICsgbGVuKHNlbGYuZGF0YSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbG93cGFuLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9sb3dwYW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ODMwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbG93cGFuLnB5CkBAIC0wLDAgKzEsMTEwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCitpbXBvcnQgaXBhZGRyZXNzCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBjb25maWcKK2ltcG9ydCBpcHY2CisKKworY2xhc3MgTG93cGFuSVBIQzoKKyAgICAiIiIKKyAgICBDbGFzcyByZXByZXNlbnRpbmcgYSBjb21wcmVzc2VkIElQIGhlYWRlci4KKworICAgIE1vcmUgZGV0YWlsczoKKyAgICAgICAgLSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjgyCisgICAgICAgIC0gc2VjdGlvbjogMy4xLiBMT1dQQU5fSVBIQyBFbmNvZGluZyBGb3JtYXQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZiwgbmgsIGhsaW0sIGNpZCwgc2FjLCBzYW0sIG0sIGRhYywgZGFtKToKKyAgICAgICAgc2VsZi5fdGYgPSB0ZgorICAgICAgICBzZWxmLl9uaCA9IG5oCisgICAgICAgIHNlbGYuX2hsaW0gPSBobGltCisgICAgICAgIHNlbGYuX2NpZCA9IGNpZAorICAgICAgICBzZWxmLl9zYWMgPSBzYWMKKyAgICAgICAgc2VsZi5fc2FtID0gc2FtCisgICAgICAgIHNlbGYuX20gPSBtCisgICAgICAgIHNlbGYuX2RhYyA9IGRhYworICAgICAgICBzZWxmLl9kYW0gPSBkYW0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0ZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RmCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uaAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhsaW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9obGltCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2FjKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2FjCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2FtKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2FtCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX20KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkYWMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYWMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYW0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YV9ieXRlcyk6CisgICAgICAgIGRhdGFfYnl0ZSA9IGRhdGFfYnl0ZXNbMF0KKworICAgICAgICBoZHIgPSAoZGF0YV9ieXRlID4+IDUpICYgMHgwNworICAgICAgICBpZiBoZHIgIT0gMHgwMzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTm90IGEgNkxvd1BBTiBwYWNrZXQuIikKKworICAgICAgICB0ZiA9IChkYXRhX2J5dGUgPj4gMykgJiAweDAzCisgICAgICAgIG5oID0gKGRhdGFfYnl0ZSA+PiAyKSAmIDB4MDEKKyAgICAgICAgaGxpbSA9IGRhdGFfYnl0ZSAmIDB4MDMKKworICAgICAgICBkYXRhX2J5dGUgPSBkYXRhX2J5dGVzWzFdCisKKyAgICAgICAgY2lkID0gKGRhdGFfYnl0ZSA+PiA3KSAmIDB4MDEKKyAgICAgICAgc2FjID0gKGRhdGFfYnl0ZSA+PiA2KSAmIDB4MDEKKyAgICAgICAgc2FtID0gKGRhdGFfYnl0ZSA+PiA0KSAmIDB4MDMKKyAgICAgICAgbSA9IChkYXRhX2J5dGUgPj4gMykgJiAweDAxCisgICAgICAgIGRhYyA9IChkYXRhX2J5dGUgPj4gMikgJiAweDAxCisgICAgICAgIGRhbSA9IGRhdGFfYnl0ZSAmIDB4MDMKKworICAgICAgICByZXR1cm4gY2xzKHRmLCBuaCwgaGxpbSwgY2lkLCBzYWMsIHNhbSwgbSwgZGFjLCBkYW0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTG93cGFuSVBIQyh0Zj17fSwgbmg9e30sIGhsaW09e30sIGNpZD17fSwgc2FjPXt9LCBzYW09e30sIG09e30sIGRhYz17fSwgZGFtPXt9KSIuZm9ybWF0KHNlbGYudGYsIHNlbGYubmgsIHNlbGYuaGxpbSwgc2VsZi5jaWQsIHNlbGYuc2FjLCBzZWxmLnNhbSwgc2VsZi5tLCBzZWxmLmRhYywgc2VsZi5kYW0pCisKKworY2xhc3MgTG93cGFuTkhDOgorICAgICIiIgorICAgIENsYXNzIHJlcHJlc2VudGluZyBhIGNvbXByZXNzZWQgZXh0ZW5zaW9uIGhlYWRlci4KKworICAgIE1vcmUgZGV0YWlsczoKKyAgICAgICAgLSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjgyCisgICAgICAgIC0gc2VjdGlvbjogNC4xLiBMT1dQQU5fTkhDIEZvcm1hdAorCisgICAgIiIiCisKKyAgICBOSENfRUlEX0hPUF9CWV9IT1AgPSAwCisgICAgTkhDX0VJRF9ST1VUSU5HID0gMQorICAgIE5IQ19FSURfRlJBR01FTlQgPSAyCisgICAgTkhDX0VJRF9EU1RfT1BUID0gMworICAgIE5IQ19FSURfTU9CSUxJVFkgPSA0CisgICAgTkhDX0VJRF9JUFY2X0hEUiA9IDcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlaWQsIG5oKToKKyAgICAgICAgc2VsZi5fZWlkID0gZWlkCisgICAgICAgIHNlbGYuX25oID0gbmgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9laWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25oCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGFfYnl0ZXMpOgorICAgICAgICBoZWFkZXJfYnl0ZSA9IGRhdGFfYnl0ZXNbMF0KKworICAgICAgICBlaWQgPSAoaGVhZGVyX2J5dGUgPj4gMSkgJiAweDA3CisgICAgICAgIG5oID0gaGVhZGVyX2J5dGUgJiAweDAxCisKKyAgICAgICAgcmV0dXJuIGNscyhlaWQsIG5oKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxvd3Bhbk5IQyhlaWQ9e30sIG5oPXt9KSIuZm9ybWF0KHNlbGYuZWlkLCBzZWxmLm5oKQorCisKK2NsYXNzIExvd3BhblVEUEhDOgorICAgICIiIgorICAgIENsYXNzIHJlcHJlc2VudGluZyBjb21wcmVzc2VkIFVEUCBoZWFkZXIuCisKKyAgICBNb3JlIGRldGFpbHM6CisgICAgICAgIC0gVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjI4MgorICAgICAgICAtIHNlY3Rpb246IDQuMy4zLiBVRFAgTE9XUEFOX05IQyBGb3JtYXQKKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGMsIHApOgorICAgICAgICBzZWxmLl9jID0gYworICAgICAgICBzZWxmLl9wID0gcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3AKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2J5dGVzKGNscywgZGF0YV9ieXRlcyk6CisgICAgICAgIGRhdGFfYnl0ZSA9IGRhdGFfYnl0ZXNbMF0KKworICAgICAgICBoZHIgPSAoZGF0YV9ieXRlID4+IDMpICYgMHgxZgorICAgICAgICBpZiBoZHIgIT0gMHgxZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTm90IGEgNkxvd1BBTiBVRFAgaGVhZGVyLiIpCisKKyAgICAgICAgYyA9IChkYXRhX2J5dGUgPj4gMikgJiAweDAxCisgICAgICAgIHAgPSBkYXRhX2J5dGUgJiAweDAzCisKKyAgICAgICAgcmV0dXJuIGNscyhjLCBwKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxvd3BhblVEUEhDKGM9e30sIHA9e30pIi5mb3JtYXQoc2VsZi5jLCBzZWxmLnApCisKKworY2xhc3MgTG93cGFuSG9wQnlIb3BGYWN0b3J5OgorCisgICAgIiIiIEZhY3RvcnkgdGhhdCBwcm9kdWNlcyBIb3BCeUhvcCBleHRlbnNpb24gaGVhZGVyLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX2hvcF9ieV9ob3Bfb3B0aW9uc19mYWN0b3J5ID0gaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBuZXh0X2hlYWRlciwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZXh0X2hlYWRlcl9sZW5ndGggPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGV4dF9oZWFkZXJfZGF0YSA9IGRhdGEucmVhZChleHRfaGVhZGVyX2xlbmd0aCkKKworICAgICAgICBvcHRpb25zID0gc2VsZi5faG9wX2J5X2hvcF9vcHRpb25zX2ZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhleHRfaGVhZGVyX2RhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgZXh0X2hlYWRlciA9IGlwdjYuSG9wQnlIb3AobmV4dF9oZWFkZXIsIG9wdGlvbnMpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnBheWxvYWRfbGVuZ3RoICs9IGxlbihleHRfaGVhZGVyKQorCisgICAgICAgIHJldHVybiBleHRfaGVhZGVyCisKKworY2xhc3MgTG93cGFuRXh0ZW5zaW9uSGVhZGVyc0ZhY3Rvcnk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIGV4dGVuc2lvbiBoZWFkZXJzLiAiIiIKKworICAgIE5IQ19OSF9JTkxJTkUgPSAwCisgICAgTkhDX05IX0NPTVBSRVNTRUQgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0X2hlYWRlcnNfZmFjdG9yaWVzKToKKyAgICAgICAgc2VsZi5fZXh0X2hlYWRlcnNfZmFjdG9yaWVzID0gZXh0X2hlYWRlcnNfZmFjdG9yaWVzIGlmIGV4dF9oZWFkZXJzX2ZhY3RvcmllcyBpcyBub3QgTm9uZSBlbHNlIHt9CisKKyAgICBkZWYgX2RlY29tcHJlc3Nfbmgoc2VsZiwgaGMsIGRhdGEpOgorICAgICAgICBpZiBoYy5uaCA9PSBzZWxmLk5IQ19OSF9JTkxJTkU6CisgICAgICAgICAgICByZXR1cm4gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBlbGlmIGhjLm5oID09IHNlbGYuTkhDX05IX0NPTVBSRVNTRUQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9nZXRfZXh0X2hlYWRlcnNfZmFjdG9yeShzZWxmLCBlaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXh0X2hlYWRlcnNfZmFjdG9yaWVzW2VpZF0KKworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGFuIGV4dGVuc2lvbiBoZWFkZXIgZmFjdG9yeSBmb3IgdGhlIEVJRCB0eXBlOiB7fSIuZm9ybWF0KGVpZCkpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgbmhjID0gTG93cGFuTkhDLmZyb21fYnl0ZXMoYnl0ZWFycmF5KGRhdGEucmVhZCgxKSkpCisKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBzZWxmLl9kZWNvbXByZXNzX25oKG5oYywgZGF0YSkKKworICAgICAgICBmYWN0b3J5ID0gc2VsZi5fZ2V0X2V4dF9oZWFkZXJzX2ZhY3RvcnkobmhjLmVpZCkKKworICAgICAgICByZXR1cm4gZmFjdG9yeS5wYXJzZShkYXRhLCBuZXh0X2hlYWRlciwgbWVzc2FnZV9pbmZvKQorCisKK2NsYXNzIExvd3BhblVkcEhlYWRlckZhY3Rvcnk6CisKKyAgICAiIiIgRmFjdG9yeSBwcm9kdWNpbmcgVURQIGhlYWRlci4gIiIiCisKKyAgICBVRFBfSENfQ19JTkxJTkUgPSAwCisgICAgVURQX0hDX0NfRUxJREVEID0gMQorCisgICAgVURQX0hDX1BfQk9USF9GVUxMID0gMAorICAgIFVEUF9IQ19QX0RTVF9DT01QUiA9IDEKKyAgICBVRFBfSENfUF9TUkNfQ09NUFIgPSAyCisgICAgVURQX0hDX1BfQk9USF9DT01QUiA9IDMKKworICAgIGRlZiBfZGVjb21wcmVzc191ZHBfcG9ydHMoc2VsZiwgdWRwaGMsIGRhdGEpOgorICAgICAgICBpZiB1ZHBoYy5wID09IHNlbGYuVURQX0hDX1BfQk9USF9GVUxMOgorICAgICAgICAgICAgc3JjX3BvcnQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgICAgIGRzdF9wb3J0ID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgZWxpZiB1ZHBoYy5wID09IHNlbGYuVURQX0hDX1BfRFNUX0NPTVBSOgorICAgICAgICAgICAgc3JjX3BvcnQgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgICAgIGRzdF9wb3J0ID0gMHhmMDAwICsgb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBlbGlmIHVkcGhjLnAgPT0gc2VsZi5VRFBfSENfUF9TUkNfQ09NUFI6CisgICAgICAgICAgICBzcmNfcG9ydCA9IDB4ZjAwMCArIG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgICAgICBkc3RfcG9ydCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIGVsaWYgdWRwaGMucCA9PSBzZWxmLlVEUF9IQ19QX0JPVEhfQ09NUFI6CisgICAgICAgICAgICB1ZHBfcG9ydHNfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgICAgICBzcmNfcG9ydCA9IDB4ZjBiMCArICgodWRwX3BvcnRzX2J5dGUgPj4gNCkgJiAweDBGKQorICAgICAgICAgICAgZHN0X3BvcnQgPSAweGYwYjAgKyAodWRwX3BvcnRzX2J5dGUgJiAweDBGKQorCisgICAgICAgIHJldHVybiBzcmNfcG9ydCwgZHN0X3BvcnQKKworICAgIGRlZiBfZGVjb21wcmVzc191ZHBfY2hlY2tzdW0oc2VsZiwgdWRwaGMsIGRhdGEpOgorICAgICAgICBpZiB1ZHBoYy5jID09IHNlbGYuVURQX0hDX0NfSU5MSU5FOgorICAgICAgICAgICAgY2hlY2tzdW0gPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICBpZiB1ZHBoYy5jID09IHNlbGYuVURQX0hDX0NfRUxJREVEOgorICAgICAgICAgICAgY2hlY2tzdW0gPSAwCisKKyAgICAgICAgcmV0dXJuIGNoZWNrc3VtCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgdWRwaGMgPSBMb3dwYW5VRFBIQy5mcm9tX2J5dGVzKGJ5dGVhcnJheShkYXRhLnJlYWQoMSkpKQorCisgICAgICAgIHNyY19wb3J0LCBkc3RfcG9ydCA9IHNlbGYuX2RlY29tcHJlc3NfdWRwX3BvcnRzKHVkcGhjLCBkYXRhKQorCisgICAgICAgIGNoZWNrc3VtID0gc2VsZi5fZGVjb21wcmVzc191ZHBfY2hlY2tzdW0odWRwaGMsIGRhdGEpCisKKyAgICAgICAgaGVhZGVyID0gaXB2Ni5VRFBIZWFkZXIoc3JjX3BvcnQsIGRzdF9wb3J0LCBjaGVja3N1bT1jaGVja3N1bSkKKworICAgICAgICByZXR1cm4gaGVhZGVyCisKKworY2xhc3MgQ29udGV4dCgpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByZWZpeCwgcHJlZml4X2xlbmd0aD1Ob25lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwcmVmaXgsIHN0cik6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LmRlY29kZSgidXRmLTgiKQorCisgICAgICAgICAgICBwcmVmaXgsIHByZWZpeF9sZW5ndGggPSBwcmVmaXguc3BsaXQoIi8iKQorICAgICAgICAgICAgcHJlZml4X2xlbmd0aCA9IGludChwcmVmaXhfbGVuZ3RoKQorCisgICAgICAgICAgICBhID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MocHJlZml4KQorCisgICAgICAgICAgICBzZWxmLl9wcmVmaXggPSBieXRlYXJyYXkoYS5wYWNrZWQpCisgICAgICAgICAgICBzZWxmLl9wcmVmaXhfbGVuZ3RoID0gcHJlZml4X2xlbmd0aAorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwcmVmaXgsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICBzZWxmLl9wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgICAgIHNlbGYuX3ByZWZpeF9sZW5ndGggPSBwcmVmaXhfbGVuZ3RoIGlmIHByZWZpeF9sZW5ndGggaXMgbm90IE5vbmUgZWxzZSBsZW4oc2VsZi5fcHJlZml4KSAqIDgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcmVmaXhbOnNlbGYucHJlZml4X2xlbmd0aF9hbGxfYnl0ZXNdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJlZml4X2Z1bGxfYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcmVmaXhbOnNlbGYucHJlZml4X2xlbmd0aF9mdWxsX2J5dGVzXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeF9sZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcmVmaXhfbGVuZ3RoCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJlZml4X2xlbmd0aF9mdWxsX2J5dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ByZWZpeF9sZW5ndGggLyA4KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeF9sZW5ndGhfcmVzdF9iaXRzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ByZWZpeF9sZW5ndGggJSA4KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeF9sZW5ndGhfYWxsX2J5dGVzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnByZWZpeF9sZW5ndGhfcmVzdF9iaXRzID4gMDoKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5wcmVmaXhfbGVuZ3RoX2Z1bGxfYnl0ZXMgKyAxKQorCisgICAgICAgIHJldHVybiBzZWxmLnByZWZpeF9sZW5ndGhfZnVsbF9ieXRlcworCisKK2NsYXNzIENvbnRleHRNYW5hZ2VyKGRpY3QpOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyBDb250ZXh0IE1hbmFnZXIuICIiIgorCisgICAgZGVmIF9fY2hlY2tfaW5kZXgoc2VsZiwgaW5kZXgpOgorICAgICAgICBpZiBpbmRleCA8IDAgb3IgaW5kZXggPiAxNToKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoIkludmFsaWQgaW5kZXg6IHt9LiBWYWxpZCBpbmRleCBpcyBpbiByYW5nZSBbMCwgMTVdIi5mb3JtYXQoaW5kZXgpKQorCisgICAgZGVmIF9fY2hlY2tfdHlwZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDb250ZXh0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiSW52YWxpZCB2YWx1ZSB0eXBlOiB7fSIuZm9ybWF0KHR5cGUodmFsdWUpKSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHNlbGYuX19jaGVja19pbmRleChpbmRleCkKKworICAgICAgICByZXR1cm4gc3VwZXIoQ29udGV4dE1hbmFnZXIsIHNlbGYpLl9fZ2V0aXRlbV9fKGluZGV4KQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX19jaGVja19pbmRleChpbmRleCkKKyAgICAgICAgc2VsZi5fX2NoZWNrX3R5cGUodmFsdWUpCisKKyAgICAgICAgcmV0dXJuIHN1cGVyKENvbnRleHRNYW5hZ2VyLCBzZWxmKS5fX3NldGl0ZW1fXyhpbmRleCwgdmFsdWUpCisKKworY2xhc3MgTG93cGFuSXB2NkhlYWRlckZhY3Rvcnk6CisKKyAgICAiIiIgRmFjdG9yeSB0aGF0IHByb2R1Y2VzIElQdjYgaGVhZGVyLiAiIiIKKworICAgIElQVjZfTElOS0xPQ0FMX1BSRUZJWCA9IGJ5dGVhcnJheShbMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pCisKKyAgICBTSE9SVF9BRERSX1BBRERJTkdfQllURVMgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDBdKQorCisgICAgSVBIQ19URl80QiA9IDAKKyAgICBJUEhDX1RGXzNCID0gMQorICAgIElQSENfVEZfMUIgPSAyCisgICAgSVBIQ19URl9FTElERUQgPSAzCisKKyAgICBJUEhDX05IX0lOTElORSA9IDAKKyAgICBJUEhDX05IX0NPTVBSRVNTRUQgPSAxCisKKyAgICBJUEhDX0hMSU1fQ0FMQ1VMQVRFID0gLTEKKyAgICBJUEhDX0hMSU1fSU5MSU5FID0gMAorICAgIElQSENfSExJTV8xID0gMQorICAgIElQSENfSExJTV82NCA9IDIKKyAgICBJUEhDX0hMSU1fMjU1ID0gMworCisgICAgSVBIQ19DSURfQ0xFQVIgPSAwCisgICAgSVBIQ19DSURfU0VUID0gMQorCisgICAgSVBIQ19TQUNfU1RBVEVMRVNTID0gMAorICAgIElQSENfU0FDX1NUQVRFRlVMID0gMQorCisgICAgSVBIQ19TQU1fMTI4QiA9IDAKKyAgICBJUEhDX1NBTV9VTlNQRUNJRklFRCA9IDAKKyAgICBJUEhDX1NBTV82NEIgPSAxCisgICAgSVBIQ19TQU1fMTZCID0gMgorICAgIElQSENfU0FNXzBCID0gMworICAgIElQSENfU0FNX0VMSURFRCA9IDMKKworICAgIElQSENfTV9OTyA9IDAKKyAgICBJUEhDX01fWUVTID0gMQorCisgICAgSVBIQ19EQUNfU1RBVEVMRVNTID0gMAorICAgIElQSENfREFDX1NUQVRFRlVMID0gMQorCisgICAgSVBIQ19EQU1fMTI4QiA9IDAKKyAgICBJUEhDX0RBTV82NEIgPSAxCisgICAgSVBIQ19EQU1fNDhCID0gMQorICAgIElQSENfREFNXzMyQiA9IDIKKyAgICBJUEhDX0RBTV8xNkIgPSAyCisgICAgSVBIQ19EQU1fOEIgPSAzCisgICAgSVBIQ19EQU1fMEIgPSAzCisgICAgSVBIQ19EQU1fRUxJREVEID0gMworCisgICAgSVBIQ19NX0RBTV8wMCA9IDAKKyAgICBJUEhDX01fREFNXzAxID0gMQorICAgIElQSENfTV9EQU1fMTAgPSAyCisgICAgSVBIQ19NX0RBTV8xMSA9IDMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0X21hbmFnZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX2NvbnRleHRfbWFuYWdlciA9IGNvbnRleHRfbWFuYWdlcgorCisgICAgZGVmIF9mbG93X2xhYmVsKHNlbGYsIGRhdGFfYnl0ZXMpOgorICAgICAgICBmbG93X2xhYmVsID0gKGRhdGFfYnl0ZXNbMF0gJiAweDBGKSA8PCAxNgorICAgICAgICBmbG93X2xhYmVsICs9IGRhdGFfYnl0ZXNbMV0gPDwgOAorICAgICAgICBmbG93X2xhYmVsICs9IGRhdGFfYnl0ZXNbMl0KKyAgICAgICAgcmV0dXJuIGZsb3dfbGFiZWwKKworICAgIGRlZiBfdHJhZmZpY19jbGFzcyhzZWxmLCBkc2NwLCBlY24pOgorICAgICAgICByZXR1cm4gKGRzY3AgPDwgMikgfCBlY24KKworICAgIGRlZiBfdW5wYWNrX2RzY3Aoc2VsZiwgZGF0YV9ieXRlKToKKyAgICAgICAgcmV0dXJuIChkYXRhX2J5dGUgJiAweDNGKQorCisgICAgZGVmIF91bnBhY2tfZWNuKHNlbGYsIGRhdGFfYnl0ZSk6CisgICAgICAgIHJldHVybiAoZGF0YV9ieXRlID4+IDYpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfdGZfNGJ5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICBkYXRhX2J5dGVzID0gW2IgZm9yIGIgaW4gYnl0ZWFycmF5KGRhdGEucmVhZCg0KSldCisKKyAgICAgICAgZHNjcCA9IHNlbGYuX3VucGFja19kc2NwKGRhdGFfYnl0ZXNbMF0pCisgICAgICAgIGVjbiA9IHNlbGYuX3VucGFja19lY24oZGF0YV9ieXRlc1swXSkKKworICAgICAgICB0cmFmZmljX2NsYXNzID0gc2VsZi5fdHJhZmZpY19jbGFzcyhkc2NwLCBlY24pCisgICAgICAgIGZsb3dfbGFiZWwgPSBzZWxmLl9mbG93X2xhYmVsKGRhdGFfYnl0ZXNbMTpdKQorCisgICAgICAgIHJldHVybiB0cmFmZmljX2NsYXNzLCBmbG93X2xhYmVsCisKKyAgICBkZWYgX2RlY29tcHJlc3NfdGZfM2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICBkYXRhX2J5dGVzID0gW2IgZm9yIGIgaW4gYnl0ZWFycmF5KGRhdGEucmVhZCgzKSldCisKKyAgICAgICAgZWNuID0gc2VsZi5fdW5wYWNrX2VjbihkYXRhX2J5dGVzWzBdKQorCisgICAgICAgIHRyYWZmaWNfY2xhc3MgPSBzZWxmLl90cmFmZmljX2NsYXNzKGRzY3A9MCwgZWNuPWVjbikKKyAgICAgICAgZmxvd19sYWJlbCA9IHNlbGYuX2Zsb3dfbGFiZWwoZGF0YV9ieXRlcykKKworICAgICAgICByZXR1cm4gdHJhZmZpY19jbGFzcywgZmxvd19sYWJlbAorCisgICAgZGVmIF9kZWNvbXByZXNzX3RmXzFieXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBkYXRhX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGRzY3AgPSBzZWxmLl91bnBhY2tfZHNjcChkYXRhX2J5dGUpCisgICAgICAgIGVjbiA9IHNlbGYuX3VucGFja19lY24oZGF0YV9ieXRlKQorCisgICAgICAgIHRyYWZmaWNfY2xhc3MgPSBzZWxmLl90cmFmZmljX2NsYXNzKGRzY3AsIGVjbikKKyAgICAgICAgZmxvd19sYWJlbCA9IDAKKworICAgICAgICByZXR1cm4gdHJhZmZpY19jbGFzcywgZmxvd19sYWJlbAorCisgICAgZGVmIF9kZWNvbXByZXNzX3RmKHNlbGYsIGlwaGMsIGRhdGEpOgorICAgICAgICBpZiBpcGhjLnRmID09IHNlbGYuSVBIQ19URl80QjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX3RmXzRieXRlcyhkYXRhKQorCisgICAgICAgIGVsaWYgaXBoYy50ZiA9PSBzZWxmLklQSENfVEZfM0I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc190Zl8zYnl0ZXMoZGF0YSkKKworICAgICAgICBlbGlmIGlwaGMudGYgPT0gc2VsZi5JUEhDX1RGXzFCOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlY29tcHJlc3NfdGZfMWJ5dGUoZGF0YSkKKworICAgICAgICBlbGlmIGlwaGMudGYgPT0gc2VsZi5JUEhDX1RGX0VMSURFRDoKKyAgICAgICAgICAgIHJldHVybiAwLCAwCisKKyAgICBkZWYgX2RlY29tcHJlc3Nfbmgoc2VsZiwgaGMsIGRhdGEpOgorICAgICAgICBpZiBoYy5uaCA9PSBzZWxmLklQSENfTkhfSU5MSU5FOgorICAgICAgICAgICAgcmV0dXJuIG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgZWxpZiBoYy5uaCA9PSBzZWxmLklQSENfTkhfQ09NUFJFU1NFRDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2RlY29tcHJlc3NfaGxpbShzZWxmLCBpcGhjLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5obGltID09IHNlbGYuSVBIQ19ITElNX0lOTElORToKKyAgICAgICAgICAgIHJldHVybiBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGVsaWYgaXBoYy5obGltID09IHNlbGYuSVBIQ19ITElNXzE6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGVsaWYgaXBoYy5obGltID09IHNlbGYuSVBIQ19ITElNXzY0OgorICAgICAgICAgICAgcmV0dXJuIDY0CisKKyAgICAgICAgZWxpZiBpcGhjLmhsaW0gPT0gc2VsZi5JUEhDX0hMSU1fMjU1OgorICAgICAgICAgICAgcmV0dXJuIDI1NQorCisgICAgZGVmIF9kZWNvbXByZXNzX2NpZChzZWxmLCBpcGhjLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5jaWQgPT0gc2VsZi5JUEhDX0NJRF9TRVQ6CisgICAgICAgICAgICBjaWQgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgICAgICBzY2kgPSAoY2lkID4+IDQpICYgMHgwZgorICAgICAgICAgICAgZGNpID0gY2lkICYgMHgwZgorCisgICAgICAgICAgICByZXR1cm4gc2NpLCBkY2kKKworICAgICAgICBlbGlmIGlwaGMuY2lkID09IHNlbGYuSVBIQ19DSURfQ0xFQVI6CisgICAgICAgICAgICByZXR1cm4gMCwgMAorCisgICAgZGVmIF9kZWNvbXByZXNzX3NyY19hZGRyX3N0YXRlbGVzcyhzZWxmLCBpcGhjLCBzcmNfbWFjX2FkZHIsIGRhdGEpOgorICAgICAgICBpZiBpcGhjLnNhbSA9PSBzZWxmLklQSENfU0FNXzEyOEI6CisgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KGRhdGEucmVhZCgxNikpCisKKyAgICAgICAgZWxpZiBpcGhjLnNhbSA9PSBzZWxmLklQSENfU0FNXzY0QjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArIGJ5dGVhcnJheShkYXRhLnJlYWQoOCkpCisKKyAgICAgICAgZWxpZiBpcGhjLnNhbSA9PSBzZWxmLklQSENfU0FNXzE2QjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArIHNlbGYuU0hPUlRfQUREUl9QQURESU5HX0JZVEVTICsgYnl0ZWFycmF5KGRhdGEucmVhZCgyKSkKKworICAgICAgICBlbGlmIGlwaGMuc2FtID09IHNlbGYuSVBIQ19TQU1fRUxJREVEOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsgc3JjX21hY19hZGRyLmNvbnZlcnRfdG9faWlkKCkKKworICAgIGRlZiBfbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhzZWxmLCBwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGFkZHJlc3NfYnl0ZXMpOgorICAgICAgICByZXF1aXJlZF9ieXRlcyA9IDE2CisKKyAgICAgICAgcHJlZml4X2xlbmd0aF9mdWxsX2J5dGVzID0gaW50KHByZWZpeF9sZW5ndGggLyA4KQorICAgICAgICBwcmVmaXhfbGVuZ3RoX3Jlc3RfYml0cyA9IGludChwcmVmaXhfbGVuZ3RoICUgOCkKKworICAgICAgICBwcmVmaXhfbGVuZ3RoX2FsbF9ieXRlcyA9IHByZWZpeF9sZW5ndGhfZnVsbF9ieXRlcworCisgICAgICAgIGlmIHByZWZpeF9sZW5ndGhfcmVzdF9iaXRzID4gMDoKKyAgICAgICAgICAgIHByZWZpeF9sZW5ndGhfYWxsX2J5dGVzICs9IDEKKworICAgICAgICAjIENhc2UgaW4gd2hpY2ggc29tZSBieXRlcyBvdmVybGFwCisgICAgICAgIGlmIChwcmVmaXhfbGVuZ3RoX2FsbF9ieXRlcyArIGxlbihhZGRyZXNzX2J5dGVzKSkgPiByZXF1aXJlZF9ieXRlczoKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAjIEV4YW1wbGU6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRvdGFsIGFkZHJlc3MgbGVuZ3RoOiAxMjggYml0cworICAgICAgICAgICAgIyAgICogcHJlZml4IGxlbmd0aDogNjggYml0cworICAgICAgICAgICAgIyAgICogYWRkcmVzcyBsZW5ndGg6IDY0IGJpdHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgICBvdmVybGFwOiA0IGJpdHMgPT0+IHRoZSBsYXN0IDQgYml0cyBvZiB0aGUgYWRkcmVzcyBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSBsYXN0IDQgYml0cyBvZiBwcmVmaXgKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgUmVzdWx0OgorICAgICAgICAgICAgIyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICMgIHwgIHByZWZpeCAoNjggYml0cykgIHwgIGFkZHJlc3MgKDY0IGJpdHMpICB8CisgICAgICAgICAgICAjICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICAgICAgc3JjX2FkZHIgPSBwcmVmaXhbOnByZWZpeF9sZW5ndGhfZnVsbF9ieXRlc10KKyAgICAgICAgICAgIHJlcXVpcmVkX2J5dGVzIC09IHByZWZpeF9sZW5ndGhfZnVsbF9ieXRlcworCisgICAgICAgICAgICBpZiBwcmVmaXhfbGVuZ3RoX3Jlc3RfYml0cyA+IDA6CisgICAgICAgICAgICAgICAgcHJlZml4X292ZXJsYXBwaW5nX2J5dGUgPSBwcmVmaXhbcHJlZml4X2xlbmd0aF9hbGxfYnl0ZXMgLSAxXQorICAgICAgICAgICAgICAgIGFkZHJlc3Nfb3ZlcmxhcHBpbmdfYnl0ZSA9IGFkZHJlc3NfYnl0ZXNbLXJlcXVpcmVkX2J5dGVzXQorCisgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmdfYnl0ZSA9IHByZWZpeF9vdmVybGFwcGluZ19ieXRlICYgfigweGZmID4+IHByZWZpeF9sZW5ndGhfcmVzdF9iaXRzKQorICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nX2J5dGUgfD0gYWRkcmVzc19vdmVybGFwcGluZ19ieXRlICYgKDB4ZmYgPj4gcHJlZml4X2xlbmd0aF9yZXN0X2JpdHMpCisKKyAgICAgICAgICAgICAgICBzcmNfYWRkciArPSBieXRlYXJyYXkoW292ZXJsYXBwaW5nX2J5dGVdKQorICAgICAgICAgICAgICAgIHJlcXVpcmVkX2J5dGVzIC09IDEKKworICAgICAgICAgICAgaWYgcmVxdWlyZWRfYnl0ZXMgPiAwOgorICAgICAgICAgICAgICAgIHNyY19hZGRyICs9IGFkZHJlc3NfYnl0ZXNbLXJlcXVpcmVkX2J5dGVzOl0KKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVxdWlyZWRfYnl0ZXMgLT0gcHJlZml4X2xlbmd0aF9hbGxfYnl0ZXMKKyAgICAgICAgICAgIHJlcXVpcmVkX2J5dGVzIC09IGxlbihhZGRyZXNzX2J5dGVzKQorCisgICAgICAgICAgICBzcmNfYWRkciA9IHByZWZpeFs6cHJlZml4X2xlbmd0aF9hbGxfYnl0ZXNdICsgYnl0ZWFycmF5KFsweDAwXSAqIHJlcXVpcmVkX2J5dGVzKSArIGFkZHJlc3NfYnl0ZXMKKworICAgICAgICByZXR1cm4gc3JjX2FkZHIKKworICAgIGRlZiBfZGVjb21wcmVzc19zcmNfYWRkcl9zdGF0ZWZ1bChzZWxmLCBpcGhjLCBzcmNfbWFjX2FkZHIsIHNjaSwgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuc2FtID09IHNlbGYuSVBIQ19TQU1fVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KFsweDAwXSAqIDE2KQorCisgICAgICAgIGVsaWYgaXBoYy5zYW0gPT0gc2VsZi5JUEhDX1NBTV82NEI6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW3NjaV0KKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3MocHJlZml4PWNvbnRleHQucHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aD1jb250ZXh0LnByZWZpeF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2J5dGVzPWJ5dGVhcnJheShkYXRhLnJlYWQoOCkpKQorCisgICAgICAgIGVsaWYgaXBoYy5zYW0gPT0gc2VsZi5JUEhDX1NBTV8xNkI6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW3NjaV0KKyAgICAgICAgICAgIGFkZHJlc3NfYnl0ZXMgPSBzZWxmLlNIT1JUX0FERFJfUEFERElOR19CWVRFUyArIGJ5dGVhcnJheShkYXRhLnJlYWQoMikpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzKHByZWZpeD1jb250ZXh0LnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9sZW5ndGg9Y29udGV4dC5wcmVmaXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19ieXRlcz1hZGRyZXNzX2J5dGVzKQorCisgICAgICAgIGVsaWYgaXBoYy5zYW0gPT0gc2VsZi5JUEhDX1NBTV8wQjoKKyAgICAgICAgICAgIGNvbnRleHQgPSBzZWxmLl9jb250ZXh0X21hbmFnZXJbc2NpXQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhwcmVmaXg9Y29udGV4dC5wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfbGVuZ3RoPWNvbnRleHQucHJlZml4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYnl0ZXM9c3JjX21hY19hZGRyLmNvbnZlcnRfdG9faWlkKCkpCisKKyAgICBkZWYgX2RlY29tcHJlc3Nfc3JjX2FkZHIoc2VsZiwgaXBoYywgc3JjX21hY19hZGRyLCBzY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLnNhYyA9PSBzZWxmLklQSENfU0FDX1NUQVRFTEVTUzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX3NyY19hZGRyX3N0YXRlbGVzcyhpcGhjLCBzcmNfbWFjX2FkZHIsIGRhdGEpCisKKyAgICAgICAgZWxpZiBpcGhjLnNhYyA9PSBzZWxmLklQSENfU0FDX1NUQVRFRlVMOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlY29tcHJlc3Nfc3JjX2FkZHJfc3RhdGVmdWwoaXBoYywgc3JjX21hY19hZGRyLCBzY2ksIGRhdGEpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfdW5pY2FzdF9kc3RfYWRkcl9zdGF0ZWxlc3Moc2VsZiwgaXBoYywgZHN0X21hY19hZGRyLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV8xMjhCOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShkYXRhLnJlYWQoMTYpKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV82NEI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBieXRlYXJyYXkoZGF0YS5yZWFkKDgpKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV8xNkI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBzZWxmLlNIT1JUX0FERFJfUEFERElOR19CWVRFUyArIGJ5dGVhcnJheShkYXRhLnJlYWQoMikpCisKKyAgICAgICAgZWxpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfREFNX0VMSURFRDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArIGRzdF9tYWNfYWRkci5jb252ZXJ0X3RvX2lpZCgpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfdW5pY2FzdF9kc3RfYWRkcl9zdGF0ZWZ1bChzZWxmLCBpcGhjLCBkc3RfbWFjX2FkZHIsIGRjaSwgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19EQU1fMTI4QjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVzZXJ2ZWQiKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV82NEI6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW2RjaV0KKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3MocHJlZml4PWNvbnRleHQucHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aD1jb250ZXh0LnByZWZpeF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2J5dGVzPWJ5dGVhcnJheShkYXRhLnJlYWQoOCkpKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV8xNkI6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW2RjaV0KKyAgICAgICAgICAgIGFkZHJlc3NfYnl0ZXMgPSBzZWxmLlNIT1JUX0FERFJfUEFERElOR19CWVRFUyArIGJ5dGVhcnJheShkYXRhLnJlYWQoMikpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzKHByZWZpeD1jb250ZXh0LnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9sZW5ndGg9Y29udGV4dC5wcmVmaXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19ieXRlcz1hZGRyZXNzX2J5dGVzKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV8wQjoKKyAgICAgICAgICAgIGNvbnRleHQgPSBzZWxmLl9jb250ZXh0X21hbmFnZXJbZGNpXQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhwcmVmaXg9Y29udGV4dC5wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfbGVuZ3RoPWNvbnRleHQucHJlZml4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYnl0ZXM9ZHN0X21hY19hZGRyLmNvbnZlcnRfdG9faWlkKCkpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfdW5pY2FzdF9kc3RfYWRkcihzZWxmLCBpcGhjLCBkc3RfbWFjX2FkZHIsIGRjaSwgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuZGFjID09IHNlbGYuSVBIQ19EQUNfU1RBVEVMRVNTOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlY29tcHJlc3NfdW5pY2FzdF9kc3RfYWRkcl9zdGF0ZWxlc3MoaXBoYywgZHN0X21hY19hZGRyLCBkYXRhKQorCisgICAgICAgIGVsaWYgaXBoYy5kYWMgPT0gc2VsZi5JUEhDX0RBQ19TVEFURUZVTDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX3VuaWNhc3RfZHN0X2FkZHJfc3RhdGVmdWwoaXBoYywgZHN0X21hY19hZGRyLCBkY2ksIGRhdGEpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfbXVsdGljYXN0X2RzdF9hZGRyX3N0YXRlbGVzcyhzZWxmLCBpcGhjLCBkYXRhKToKKyAgICAgICAgaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV8xMjhCOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShkYXRhLnJlYWQoMTYpKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX0RBTV80OEI6CisgICAgICAgICAgICBhZGRyNDhiID0gYnl0ZWFycmF5KGRhdGEucmVhZCg2KSkKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4ZmYsIGFkZHI0OGJbMF1dKSArIGJ5dGVhcnJheShbMHgwMF0gKiA5KSArIGFkZHI0OGJbMTpdCisKKyAgICAgICAgZWxpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfREFNXzMyQjoKKyAgICAgICAgICAgIGFkZHIzMmIgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDQpKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHhGRiwgYWRkcjMyYlswXV0pICsgYnl0ZWFycmF5KFsweDAwXSAqIDExKSArIGFkZHIzMmJbMTpdCisKKyAgICAgICAgZWxpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfREFNXzhCOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHhGRiwgMHgwMl0pICsgYnl0ZWFycmF5KFsweDAwXSAqIDEzKSArIGRhdGEucmVhZCgxKQorCisgICAgZGVmIF9kZWNvbXByZXNzX211bHRpY2FzdF9kc3RfYWRkcl9zdGF0ZWZ1bChzZWxmLCBpcGhjLCBkY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfTV9EQU1fMDA6CisgICAgICAgICAgICBjb250ZXh0ID0gc2VsZi5fY29udGV4dF9tYW5hZ2VyW2RjaV0KKworICAgICAgICAgICAgYWRkcjQ4YiA9IGJ5dGVhcnJheShkYXRhLnJlYWQoNikpCisKKyAgICAgICAgICAgIHBfYnl0ZXNfY291bnQgPSA4CisKKyAgICAgICAgICAgIHByZWZpeCA9IGNvbnRleHQucHJlZml4WzpwX2J5dGVzX2NvdW50XQorICAgICAgICAgICAgcHJlZml4X2xlbmd0aCA9IGNvbnRleHQucHJlZml4X2xlbmd0aAorCisgICAgICAgICAgICBtaXNzaW5nX2J5dGVzID0gcF9ieXRlc19jb3VudCAtIGxlbihwcmVmaXgpCisKKyAgICAgICAgICAgIGlmIG1pc3NpbmdfYnl0ZXMgPiAwOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBieXRlYXJyYXkoWzB4MDBdICogbWlzc2luZ19ieXRlcykKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHhmZl0pICsgYWRkcjQ4Yls6Ml0gKyBieXRlYXJyYXkoW3ByZWZpeF9sZW5ndGhdKSArIHByZWZpeCArIGFkZHI0OGJbMjpdCisKKyAgICAgICAgZWxpZiBpcGhjLmRhbSA9PSBzZWxmLklQSENfTV9EQU1fMDE6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlc2VydmVkIikKKworICAgICAgICBlbGlmIGlwaGMuZGFtID09IHNlbGYuSVBIQ19NX0RBTV8xMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVzZXJ2ZWQiKQorCisgICAgICAgIGVsaWYgaXBoYy5kYW0gPT0gc2VsZi5JUEhDX01fREFNXzExOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJSZXNlcnZlZCIpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfbXVsdGljYXN0X2RzdF9hZGRyKHNlbGYsIGlwaGMsIGRjaSwgZGF0YSk6CisgICAgICAgIGlmIGlwaGMuZGFjID09IHNlbGYuSVBIQ19EQUNfU1RBVEVMRVNTOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlY29tcHJlc3NfbXVsdGljYXN0X2RzdF9hZGRyX3N0YXRlbGVzcyhpcGhjLCBkYXRhKQorCisgICAgICAgIGVsaWYgaXBoYy5kYWMgPT0gc2VsZi5JUEhDX0RBQ19TVEFURUZVTDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX211bHRpY2FzdF9kc3RfYWRkcl9zdGF0ZWZ1bChpcGhjLCBkY2ksIGRhdGEpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfZHN0X2FkZHIoc2VsZiwgaXBoYywgZHN0X21hY19hZGRyLCBkY2ksIGRhdGEpOgorICAgICAgICBpZiBpcGhjLm0gPT0gc2VsZi5JUEhDX01fTk86CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVjb21wcmVzc191bmljYXN0X2RzdF9hZGRyKGlwaGMsIGRzdF9tYWNfYWRkciwgZGNpLCBkYXRhKQorCisgICAgICAgIGVsaWYgaXBoYy5tID09IHNlbGYuSVBIQ19NX1lFUzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWNvbXByZXNzX211bHRpY2FzdF9kc3RfYWRkcihpcGhjLCBkY2ksIGRhdGEpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgaXBoYyA9IExvd3BhbklQSEMuZnJvbV9ieXRlcyhieXRlYXJyYXkoZGF0YS5yZWFkKDIpKSkKKworICAgICAgICBzY2ksIGRjaSA9IHNlbGYuX2RlY29tcHJlc3NfY2lkKGlwaGMsIGRhdGEpCisKKyAgICAgICAgdHJhZmZpY19jbGFzcywgZmxvd19sYWJlbCA9IHNlbGYuX2RlY29tcHJlc3NfdGYoaXBoYywgZGF0YSkKKworICAgICAgICBuZXh0X2hlYWRlciA9IHNlbGYuX2RlY29tcHJlc3NfbmgoaXBoYywgZGF0YSkKKworICAgICAgICBob3BfbGltaXQgPSBzZWxmLl9kZWNvbXByZXNzX2hsaW0oaXBoYywgZGF0YSkKKworICAgICAgICBzcmNfYWRkcmVzcyA9IHNlbGYuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcywgc2NpLCBkYXRhKQorCisgICAgICAgIGRzdF9hZGRyZXNzID0gc2VsZi5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MsIGRjaSwgZGF0YSkKKworICAgICAgICBoZWFkZXIgPSBpcHY2LklQdjZIZWFkZXIoc3JjX2FkZHJlc3MsIGRzdF9hZGRyZXNzLCB0cmFmZmljX2NsYXNzLCBmbG93X2xhYmVsLCBob3BfbGltaXQpCisKKyAgICAgICAgaGVhZGVyLm5leHRfaGVhZGVyID0gbmV4dF9oZWFkZXIKKworICAgICAgICByZXR1cm4gaGVhZGVyCisKKworY2xhc3MgTG93cGFuRGVjb21wcmVzc29yOgorCisgICAgIiIiIENsYXNzIGRlY29tcHJlc3NpbmcgNkxvV1BBTiBwYWNrZXRzLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb3dwYW5faXBfaGVhZGVyX2ZhY3RvcnksIGxvd3Bhbl9leHRlbnNpb25faGVhZGVyc19mYWN0b3J5LCBsb3dwYW5fdWRwX2hlYWRlcl9mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fbG93cGFuX2lwX2hlYWRlcl9mYWN0b3J5ID0gbG93cGFuX2lwX2hlYWRlcl9mYWN0b3J5CisgICAgICAgIHNlbGYuX2xvd3Bhbl9leHRlbnNpb25faGVhZGVyc19mYWN0b3J5ID0gbG93cGFuX2V4dGVuc2lvbl9oZWFkZXJzX2ZhY3RvcnkKKyAgICAgICAgc2VsZi5fbG93cGFuX3VkcF9oZWFkZXJfZmFjdG9yeSA9IGxvd3Bhbl91ZHBfaGVhZGVyX2ZhY3RvcnkKKworICAgIGRlZiBfaXNfaXB2Nl9leHRlbnNpb25faGVhZGVyKHNlbGYsIGhlYWRlcl9maXJzdF9ieXRlKToKKyAgICAgICAgcmV0dXJuICgoaGVhZGVyX2ZpcnN0X2J5dGUgPj4gNCkgJiAweDBmKSA9PSAweDBlCisKKyAgICBkZWYgX2lzX3VkcF9oZWFkZXIoc2VsZiwgaGVhZGVyX2ZpcnN0X2J5dGUpOgorICAgICAgICByZXR1cm4gKChoZWFkZXJfZmlyc3RfYnl0ZSA+PiA0KSAmIDB4MGYpID09IDB4MGYKKworICAgIGRlZiBfcGVla19uX2J5dGVzKHNlbGYsIGRhdGEsIG4pOgorICAgICAgICByZWFkX2RhdGEgPSBkYXRhLnJlYWQobikKKyAgICAgICAgZGF0YS5zZWVrKC1uLCBpby5TRUVLX0NVUikKKyAgICAgICAgcmV0dXJuIHJlYWRfZGF0YQorCisgICAgZGVmIF9pc19uZXh0X2hlYWRlcl9jb21wcmVzc2VkKHNlbGYsIGhlYWRlcik6CisgICAgICAgIHJldHVybiAoaGVhZGVyLm5leHRfaGVhZGVyIGlzIE5vbmUpCisKKyAgICBkZWYgZGVjb21wcmVzcyhzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBpcHY2X2hlYWRlciA9IHNlbGYuX2xvd3Bhbl9pcF9oZWFkZXJfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcHJldmlvdXNfaGVhZGVyID0gaXB2Nl9oZWFkZXIKKworICAgICAgICBleHRlbnNpb25faGVhZGVycyA9IFtdCisgICAgICAgIHVkcF9oZWFkZXIgPSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5faXNfbmV4dF9oZWFkZXJfY29tcHJlc3NlZChpcHY2X2hlYWRlcik6CisKKyAgICAgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICAgICAgaGVhZGVyX2ZpcnN0X2J5dGUgPSBvcmQoc2VsZi5fcGVla19uX2J5dGVzKGRhdGEsIDEpKQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5faXNfaXB2Nl9leHRlbnNpb25faGVhZGVyKGhlYWRlcl9maXJzdF9ieXRlKToKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX2hlYWRlciA9IHNlbGYuX2xvd3Bhbl9leHRlbnNpb25faGVhZGVyc19mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX2hlYWRlcnMuYXBwZW5kKGV4dGVuc2lvbl9oZWFkZXIpCisKKyAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgbmV4dCBoZWFkZXIgZmllbGQgaW4gdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19oZWFkZXIubmV4dF9oZWFkZXIgPSBleHRlbnNpb25faGVhZGVyLnR5cGUKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaGVhZGVyID0gZXh0ZW5zaW9uX2hlYWRlcgorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pc19uZXh0X2hlYWRlcl9jb21wcmVzc2VkKGV4dGVuc2lvbl9oZWFkZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBub3QgbW9yZSBjb21wcmVzc2VkIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2lzX3VkcF9oZWFkZXIoaGVhZGVyX2ZpcnN0X2J5dGUpOgorICAgICAgICAgICAgICAgICAgICB1ZHBfaGVhZGVyID0gc2VsZi5fbG93cGFuX3VkcF9oZWFkZXJfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgbmV4dCBoZWFkZXIgZmllbGQgaW4gdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19oZWFkZXIubmV4dF9oZWFkZXIgPSB1ZHBfaGVhZGVyLnR5cGUKKworICAgICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIG5vdCBtb3JlIGhlYWRlcnMgYWZ0ZXIgVURQIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBpcHY2X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMsIHVkcF9oZWFkZXIKKworCitjbGFzcyBMb3dwYW5NZXNoSGVhZGVyKG9iamVjdCk6CisKKyAgICAiIiIgQ2xhc3MgcmVwcmVzZW50aW5nIDZMb1dQQU4gbWVzaCBoZWFkZXIgKFJGQyA0OTQ0IDUuMikuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvcHNfbGVmdCwgb3JpZ2luYXRvcl9hZGRyZXNzLCBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzKToKKyAgICAgICAgc2VsZi5faG9wc19sZWZ0ID0gaG9wc19sZWZ0CisgICAgICAgIHNlbGYuX29yaWdpbmF0b3JfYWRkcmVzcyA9IG9yaWdpbmF0b3JfYWRkcmVzcworICAgICAgICBzZWxmLl9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzID0gZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhvcHNfbGVmdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hvcHNfbGVmdAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG9yaWdpbmF0b3JfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29yaWdpbmF0b3JfYWRkcmVzcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzCisKKworY2xhc3MgTG93cGFuTWVzaEhlYWRlckZhY3Rvcnk6CisKKyAgICBkZWYgX3BhcnNlX2FkZHJlc3Moc2VsZiwgZGF0YSwgaXNfc2hvcnQpOgorICAgICAgICBpZiBpc19zaG9ydDoKKyAgICAgICAgICAgIHJldHVybiBjb21tb24uTWFjQWRkcmVzcy5mcm9tX3Jsb2MxNihieXRlYXJyYXkoZGF0YS5yZWFkKDIpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGJ5dGVhcnJheShkYXRhLnJlYWQoOCkpKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGRhdGFfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgaXNfc2hvcnRfb3JpZ2luYXRvcl9hZGRyZXNzID0gYm9vbChkYXRhX2J5dGUgJiAweDIwKQorICAgICAgICBpc19zaG9ydF9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzID0gYm9vbChkYXRhX2J5dGUgJiAweDEwKQorCisgICAgICAgIGlmIChkYXRhX2J5dGUgJiAweDBmKSAhPSAweDBmOgorICAgICAgICAgICAgaG9wc19sZWZ0ID0gKGRhdGFfYnl0ZSAmIDB4MGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBob3BzX2xlZnQgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIG9yaWdpbmF0b3JfYWRkcmVzcyA9IHNlbGYuX3BhcnNlX2FkZHJlc3MoZGF0YSwgaXNfc2hvcnRfb3JpZ2luYXRvcl9hZGRyZXNzKQorICAgICAgICBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzID0gc2VsZi5fcGFyc2VfYWRkcmVzcyhkYXRhLCBpc19zaG9ydF9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzKQorCisgICAgICAgIHJldHVybiBMb3dwYW5NZXNoSGVhZGVyKGhvcHNfbGVmdCwgb3JpZ2luYXRvcl9hZGRyZXNzLCBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzKQorCisKK2NsYXNzIExvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhZ3JhbV9zaXplLCBkYXRhZ3JhbV90YWcsIGRhdGFncmFtX29mZnNldD0wKToKKyAgICAgICAgc2VsZi5fZGF0YWdyYW1fc2l6ZSA9IGRhdGFncmFtX3NpemUKKyAgICAgICAgc2VsZi5fZGF0YWdyYW1fdGFnID0gZGF0YWdyYW1fdGFnCisgICAgICAgIHNlbGYuX2RhdGFncmFtX29mZnNldCA9IGRhdGFncmFtX29mZnNldAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGFncmFtX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhZ3JhbV9zaXplCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF0YWdyYW1fdGFnKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YWdyYW1fdGFnCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF0YWdyYW1fb2Zmc2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YWdyYW1fb2Zmc2V0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZmlyc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGFncmFtX29mZnNldCA9PSAwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9ieXRlcyhjbHMsIGRhdGEpOgorICAgICAgICBkYXRhZ3JhbV9zaXplID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIGhhc19vZmZzZXQgPSAoKGRhdGFncmFtX3NpemUgPj4gMTEpICYgMHgxZikgPT0gMHgxYworCisgICAgICAgIGRhdGFncmFtX3NpemUgJj0gMHg3ZmYKKyAgICAgICAgZGF0YWdyYW1fdGFnID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIGRhdGFncmFtX29mZnNldCA9IDAKKworICAgICAgICBpZiBoYXNfb2Zmc2V0OgorICAgICAgICAgICAgZGF0YWdyYW1fb2Zmc2V0ID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICByZXR1cm4gY2xzKGRhdGFncmFtX3NpemUsIGRhdGFncmFtX3RhZywgZGF0YWdyYW1fb2Zmc2V0KQorCisKK2NsYXNzIExvd3BhbkZyYWdtZW50c0J1ZmZlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1ZmZlcl9zaXplKToKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW05vbmVdICogYnVmZmVyX3NpemUKKyAgICAgICAgc2VsZi5fcG9zaXRpb24gPSAwCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIChzZWxmLl9wb3NpdGlvbiArIGxlbihkYXRhKSkgPiBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldyaXRlIGZhaWx1cmUuIERhdGEgbGVuZ3RoIGlzIGJpZ2dlciB0aGFuIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbGVuZ3RoLiIpCisKKyAgICAgICAgZm9yIGksIGJ5dGUgaW4gZW51bWVyYXRlKGRhdGEpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyW3NlbGYuX3Bvc2l0aW9uICsgaV0gPSBieXRlCisKKyAgICAgICAgc2VsZi5fcG9zaXRpb24gKz0gbGVuKGRhdGEpCisgICAgICAgIHJldHVybiBsZW4oZGF0YSkKKworICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCk6CisgICAgICAgIGlmIG9mZnNldCA+PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNvdWxkIG5vdCBzZWVrIGN1cnJlbnQgb2Zmc2V0LiBPZmZzZXQgdmFsdWUgaXMgYmlnZ2VyIHRoYW4gdGhlIGJ1ZmZlciBsZW5ndGguIikKKworICAgICAgICBzZWxmLl9wb3NpdGlvbiA9IG9mZnNldAorCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wb3NpdGlvbgorCisgICAgZGVmIHdob2xlX3BhY2tldF9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGFsbChbYnl0ZSBpcyBub3QgTm9uZSBmb3IgYnl0ZSBpbiBzZWxmLl9idWZmZXJdKQorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLndob2xlX3BhY2tldF9yZWNlaXZlZCgpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSBhIHBhcnQgb2YgdGhlIHBhY2tldCBoYXMgYmVlbiBzdG9yZWQgaW4gdGhlIGJ1ZmZlci4iKQorCisgICAgICAgIHJldHVybiBieXRlYXJyYXkoc2VsZi5fYnVmZmVyKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fYnVmZmVyKQorCisKK2NsYXNzIExvd3BhbkZyYWdtZW50c0J1ZmZlcnNNYW5hZ2VyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2ZyYWdtZW50c19idWZmZXJzID0ge30KKworICAgIGRlZiBfY3JlYXRlX2tleShzZWxmLCBtZXNzYWdlX2luZm8sIGRhdGFncmFtX3RhZyk6CisgICAgICAgIGtleSA9IGJ5dGVzKG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MubWFjX2FkZHJlc3MpICtcCisgICAgICAgICAgICBieXRlcyhtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MubWFjX2FkZHJlc3MpICtcCisgICAgICAgICAgICBieXRlcyhkYXRhZ3JhbV90YWcpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBfYWxsb2NhdGVfZnJhZ21lbnRzX2J1ZmZlcihzZWxmLCBrZXksIGRhdGFncmFtX3NpemUpOgorICAgICAgICBpZiBkYXRhZ3JhbV9zaXplIGlzIE5vbmUgb3IgZGF0YWdyYW1fc2l6ZSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgZnJhZ21lbnRzIGJ1ZmZlci4gSW52YWxpZCBkYXRhZ3JhbSBzaXplOiB7fSIuZm9ybWF0KGRhdGFncmFtX3NpemUpKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBMb3dwYW5GcmFnbWVudHNCdWZmZXIoZGF0YWdyYW1fc2l6ZSkKKworICAgICAgICBzZWxmLl9mcmFnbWVudHNfYnVmZmVyc1trZXldID0gZnJhZ21lbnRzX2J1ZmZlcgorICAgICAgICByZXR1cm4gZnJhZ21lbnRzX2J1ZmZlcgorCisgICAgZGVmIGdldF9mcmFnbWVudHNfYnVmZmVyKHNlbGYsIG1lc3NhZ2VfaW5mbywgZGF0YWdyYW1fdGFnLCBkYXRhZ3JhbV9zaXplPU5vbmUpOgorICAgICAgICBrZXkgPSBzZWxmLl9jcmVhdGVfa2V5KG1lc3NhZ2VfaW5mbywgZGF0YWdyYW1fdGFnKQorCisgICAgICAgIGlmIG5vdCBrZXkgaW4gc2VsZi5fZnJhZ21lbnRzX2J1ZmZlcnM6CisgICAgICAgICAgICBzZWxmLl9hbGxvY2F0ZV9mcmFnbWVudHNfYnVmZmVyKGtleSwgZGF0YWdyYW1fc2l6ZSkKKworICAgICAgICByZXR1cm4gc2VsZi5fZnJhZ21lbnRzX2J1ZmZlcnNba2V5XQorCisgICAgZGVmIGZyZWVfZnJhZ21lbnRzX2J1ZmZlcihzZWxmLCBtZXNzYWdlX2luZm8sIGRhdGFncmFtX3RhZyk6CisgICAgICAgIGtleSA9IHNlbGYuX2NyZWF0ZV9rZXkobWVzc2FnZV9pbmZvLCBkYXRhZ3JhbV90YWcpCisKKyAgICAgICAgZGVsIHNlbGYuX2ZyYWdtZW50c19idWZmZXJzW2tleV0KKworCitjbGFzcyBMb3dwYW5QYXJzZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb3dwYW5fbWVzaF9oZWFkZXJfZmFjdG9yeSwgbG93cGFuX2RlY29tcHJlc3NvciwgbG93cGFuX2ZyYWdlbWVudHNfYnVmZmVyc19tYW5hZ2VyLCBpcHY2X3BhY2tldF9mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fbG93cGFuX21lc2hfaGVhZGVyX2ZhY3RvcnkgPSBsb3dwYW5fbWVzaF9oZWFkZXJfZmFjdG9yeQorICAgICAgICBzZWxmLl9sb3dwYW5fZGVjb21wcmVzc29yID0gbG93cGFuX2RlY29tcHJlc3NvcgorICAgICAgICBzZWxmLl9sb3dwYW5fZnJhZ21lbnRzX2J1ZmZlcnNfbWFuYWdlciA9IGxvd3Bhbl9mcmFnZW1lbnRzX2J1ZmZlcnNfbWFuYWdlcgorICAgICAgICBzZWxmLl9pcHY2X3BhY2tldF9mYWN0b3J5ID0gaXB2Nl9wYWNrZXRfZmFjdG9yeQorCisgICAgZGVmIF9wZWVrX25fYnl0ZXMoc2VsZiwgZGF0YSwgbik6CisgICAgICAgIGRhdGFfYnl0ZXMgPSBkYXRhLnJlYWQobikKKyAgICAgICAgZGF0YS5zZWVrKC1uLCBpby5TRUVLX0NVUikKKyAgICAgICAgcmV0dXJuIGRhdGFfYnl0ZXMKKworICAgIGRlZiBfaXNfbWVzaF9oZWFkZXIoc2VsZiwgZmlyc3RfYnl0ZSk6CisgICAgICAgIHJldHVybiAoKChmaXJzdF9ieXRlID4+IDYpICYgMHgwMykgPT0gMHgwMikKKworICAgIGRlZiBfaXNfZmlyc3RfZnJhZ21lbnRhdGlvbl9oZWFkZXIoc2VsZiwgZmlyc3RfYnl0ZSk6CisgICAgICAgIHJldHVybiAoKChmaXJzdF9ieXRlID4+IDMpICYgMHgxZikgPT0gMHgxOCkKKworICAgIGRlZiBfaXNfc3Vic2VxdWVudF9mcmFnbWVudGF0aW9uX2hlYWRlcihzZWxmLCBmaXJzdF9ieXRlKToKKyAgICAgICAgcmV0dXJuICgoKGZpcnN0X2J5dGUgPj4gMykgJiAweDFmKSA9PSAweDFjKQorCisgICAgZGVmIF9pc19pcGhjKHNlbGYsIGZpcnN0X2J5dGUpOgorICAgICAgICByZXR1cm4gKCgoZmlyc3RfYnl0ZSA+PiA1KSAmIDB4MDcpID09IDB4MDMpCisKKyAgICBkZWYgX2RlY29tcHJlc3NfaXBoYyhzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gc2VsZi5fbG93cGFuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgIGRlZiBfaGFuZGxlX2ZpcnN0X2ZyYWdtZW50YXRpb25faGVhZGVyKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gTG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlci5mcm9tX2J5dGVzKGRhdGEpCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlciA9IHNlbGYuX2xvd3Bhbl9mcmFnbWVudHNfYnVmZmVyc19tYW5hZ2VyLmdldF9mcmFnbWVudHNfYnVmZmVyKAorICAgICAgICAgICAgbWVzc2FnZV9pbmZvLCBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV90YWcsIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3NpemUpCisKKyAgICAgICAgaXB2Nl9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzLCB1ZHBfaGVhZGVyID0gc2VsZi5fZGVjb21wcmVzc19pcGhjKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICB1bmNvbXByZXNzZWRfZGF0YSA9IGRhdGEucmVhZCgpCisKKyAgICAgICAgIyBVcGRhdGUgcGF5bG9hZCBsZW5ndGhzCisgICAgICAgIGlwdjZfaGVhZGVyLnBheWxvYWRfbGVuZ3RoID0gZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fc2l6ZSAtIGxlbihpcHY2X2hlYWRlcikKKworICAgICAgICBmcmFnbWVudHNfYnVmZmVyLnNlZWsoMCkKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShpcHY2X2hlYWRlci50b19ieXRlcygpKQorCisgICAgICAgIGZvciBleHRlbnNpb25faGVhZGVyIGluIGV4dGVuc2lvbl9oZWFkZXJzOgorICAgICAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShleHRlbnNpb25faGVhZGVyLnRvX2J5dGVzKCkpCisKKyAgICAgICAgaWYgdWRwX2hlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUodWRwX2hlYWRlci50b19ieXRlcygpKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUodW5jb21wcmVzc2VkX2RhdGEpCisKKyAgICAgICAgaWYgZnJhZ21lbnRzX2J1ZmZlci53aG9sZV9wYWNrZXRfcmVjZWl2ZWQoKToKKyAgICAgICAgICAgIGRhdGEgPSBpby5CeXRlc0lPKGZyYWdtZW50c19idWZmZXIucmVhZCgpKQorCisgICAgICAgICAgICBzZWxmLl9sb3dwYW5fZnJhZ21lbnRzX2J1ZmZlcnNfbWFuYWdlci5mcmVlX2ZyYWdtZW50c19idWZmZXIobWVzc2FnZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3RhZykKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lwdjZfcGFja2V0X2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2hhbmRsZV9zdWJzZXF1ZW50X2ZyYWdtZW50YXRpb25faGVhZGVyKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gTG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlci5mcm9tX2J5dGVzKGRhdGEpCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlciA9IHNlbGYuX2xvd3Bhbl9mcmFnbWVudHNfYnVmZmVyc19tYW5hZ2VyLmdldF9mcmFnbWVudHNfYnVmZmVyKAorICAgICAgICAgICAgbWVzc2FnZV9pbmZvLCBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV90YWcsIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3NpemUpCisKKyAgICAgICAgb2Zmc2V0ID0gKGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX29mZnNldCAqIDgpCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci5zZWVrKG9mZnNldCkKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShkYXRhLnJlYWQoKSkKKworICAgICAgICBpZiBmcmFnbWVudHNfYnVmZmVyLndob2xlX3BhY2tldF9yZWNlaXZlZCgpOgorICAgICAgICAgICAgZGF0YSA9IGlvLkJ5dGVzSU8oZnJhZ21lbnRzX2J1ZmZlci5yZWFkKCkpCisKKyAgICAgICAgICAgIHNlbGYuX2xvd3Bhbl9mcmFnbWVudHNfYnVmZmVyc19tYW5hZ2VyLmZyZWVfZnJhZ21lbnRzX2J1ZmZlcihtZXNzYWdlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fdGFnKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXB2Nl9wYWNrZXRfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfaGFuZGxlX2lwaGNfaGVhZGVyKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGlwdjZfaGVhZGVyLCBleHRlbnNpb25faGVhZGVycywgdWRwX2hlYWRlciA9IHNlbGYuX2RlY29tcHJlc3NfaXBoYyhkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgdW5jb21wcmVzc2VkX2RhdGEgPSBkYXRhLnJlYWQoKQorCisgICAgICAgIGRlY29tcHJlc3NlZF9kYXRhID0gYnl0ZWFycmF5KFtdKQorCisgICAgICAgIGZvciBleHRlbnNpb25faGVhZGVyIGluIGV4dGVuc2lvbl9oZWFkZXJzOgorICAgICAgICAgICAgZGVjb21wcmVzc2VkX2RhdGEgKz0gZXh0ZW5zaW9uX2hlYWRlci50b19ieXRlcygpCisKKyAgICAgICAgaWYgdWRwX2hlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHVkcF9oZWFkZXIucGF5bG9hZF9sZW5ndGggPSBsZW4odW5jb21wcmVzc2VkX2RhdGEpCisKKyAgICAgICAgICAgIGRlY29tcHJlc3NlZF9kYXRhICs9IHVkcF9oZWFkZXIudG9fYnl0ZXMoKQorCisgICAgICAgIGRlY29tcHJlc3NlZF9kYXRhICs9IHVuY29tcHJlc3NlZF9kYXRhCisKKyAgICAgICAgaXB2Nl9oZWFkZXIucGF5bG9hZF9sZW5ndGggPSBsZW4oZGVjb21wcmVzc2VkX2RhdGEpCisKKyAgICAgICAgZGVjb21wcmVzc2VkX2RhdGEgPSBpcHY2X2hlYWRlci50b19ieXRlcygpICsgZGVjb21wcmVzc2VkX2RhdGEKKworICAgICAgICByZXR1cm4gc2VsZi5faXB2Nl9wYWNrZXRfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRlY29tcHJlc3NlZF9kYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIGZpcnN0X2J5dGUgPSBvcmQoc2VsZi5fcGVla19uX2J5dGVzKGRhdGEsIG49MSkpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzX21lc2hfaGVhZGVyKGZpcnN0X2J5dGUpOgorICAgICAgICAgICAgICAgIG1lc2hfaGVhZGVyID0gc2VsZi5fbG93cGFuX21lc2hfaGVhZGVyX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IG1lc2hfaGVhZGVyLm9yaWdpbmF0b3JfYWRkcmVzcworICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IG1lc2hfaGVhZGVyLmZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MKKworICAgICAgICAgICAgZWxpZiBzZWxmLl9pc19maXJzdF9mcmFnbWVudGF0aW9uX2hlYWRlcihmaXJzdF9ieXRlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX2ZpcnN0X2ZyYWdtZW50YXRpb25faGVhZGVyKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgZWxpZiBzZWxmLl9pc19zdWJzZXF1ZW50X2ZyYWdtZW50YXRpb25faGVhZGVyKGZpcnN0X2J5dGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfc3Vic2VxdWVudF9mcmFnbWVudGF0aW9uX2hlYWRlcihkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgIGVsaWYgc2VsZi5faXNfaXBoYyhmaXJzdF9ieXRlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX2lwaGNfaGVhZGVyKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlVuc3VwcG9ydGVkIGhlYWRlciB0eXBlOiAweHs6MDJ4fSIuZm9ybWF0KGZpcnN0X2J5dGUpKQorICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9tYWM4MDIxNTQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L21hYzgwMjE1NC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY2ZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9tYWM4MDIxNTQucHkKQEAgLTAsMCArMSwyNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisiIiIKKyAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzaW1wbGUgODAyLjE1LjQgTUFDIHBhcnNlci4KKyIiIgorCitpbXBvcnQgaW8KK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IGNvbmZpZworZnJvbSBjb21tb24gaW1wb3J0IE1hY0FkZHJlc3MsIE1hY0FkZHJlc3NUeXBlLCBNZXNzYWdlSW5mbworZnJvbSBuZXRfY3J5cHRvIGltcG9ydCBBdXhpbGlhcnlTZWN1cml0eUhlYWRlciwgQ3J5cHRvRW5naW5lLCBNYWNDcnlwdG9NYXRlcmlhbENyZWF0b3IKKworCitjbGFzcyBEZXZpY2VEZXNjcmlwdG9yczoKKworICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyA4MDIuMTUuNCBEZXZpY2UgRGVzY3JpcHRvcnMuIiIiCisKKyAgICBkZXZpY2VfZGVzY3JpcHRvcnMgPSB7fQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZChjbHMsIHNob3J0X2FkZHJlc3MsIGV4dGVuZGVkX2FkZHJlc3MpOgorICAgICAgICBzaG9ydF9hZGRyZXNzID0gY2xzLl9nZXRfc2hvcnRfYWRkcmVzc192YWx1ZShzaG9ydF9hZGRyZXNzKQorICAgICAgICBjbHMuZGV2aWNlX2Rlc2NyaXB0b3JzW3Nob3J0X2FkZHJlc3NdID0gZXh0ZW5kZWRfYWRkcmVzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9leHRlbmRlZChjbHMsIHNob3J0X2FkZHJlc3MpOgorICAgICAgICBzaG9ydF9hZGRyZXNzID0gY2xzLl9nZXRfc2hvcnRfYWRkcmVzc192YWx1ZShzaG9ydF9hZGRyZXNzKQorICAgICAgICByZXR1cm4gY2xzLmRldmljZV9kZXNjcmlwdG9yc1tzaG9ydF9hZGRyZXNzXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X3Nob3J0X2FkZHJlc3NfdmFsdWUoc2hvcnRfYWRkcmVzcyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2hvcnRfYWRkcmVzcywgTWFjQWRkcmVzcyk6CisgICAgICAgICAgICBzaG9ydF9hZGRyZXNzID0gc2hvcnRfYWRkcmVzcy5ybG9jCisgICAgICAgIHJldHVybiBzaG9ydF9hZGRyZXNzCisKKworY2xhc3MgTWFjSGVhZGVyOgorCisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIDgwMi4xNS40IE1BQyBoZWFkZXIuIiIiCisKKyAgICBjbGFzcyBGcmFtZVR5cGU6CisgICAgICAgIEJFQUNPTiA9IDAKKyAgICAgICAgREFUQSA9IDEKKyAgICAgICAgQUNLID0gMgorICAgICAgICBDT01NQU5EID0gMworCisgICAgY2xhc3MgQWRkcmVzc01vZGU6CisgICAgICAgIE5PVF9QUkVTRU5UID0gMAorICAgICAgICBTSE9SVCA9IDIKKyAgICAgICAgRVhURU5ERUQgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWVfdHlwZSwgZnJhbWVfcGVuZGluZywgYWNrX3JlcXVlc3QsIGZyYW1lX3ZlcnNpb24sIHNlcSwKKyAgICAgICAgICAgICAgICAgZGVzdF9wYW5faWQ9Tm9uZSwgZGVzdF9hZGRyZXNzPU5vbmUsIHNyY19wYW5faWQ9Tm9uZSwgc3JjX2FkZHJlc3M9Tm9uZSwgY29tbWFuZF90eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgIGF1eF9zZWNfaGVhZGVyPU5vbmUsIG1pYz1Ob25lLAorICAgICAgICAgICAgICAgICBmY3M9Tm9uZSk6CisKKyAgICAgICAgc2VsZi5mcmFtZV90eXBlID0gZnJhbWVfdHlwZQorICAgICAgICBzZWxmLmZyYW1lX3BlbmRpbmcgPSBmcmFtZV9wZW5kaW5nCisgICAgICAgIHNlbGYuYWNrX3JlcXVlc3QgPSBhY2tfcmVxdWVzdAorICAgICAgICBzZWxmLmZyYW1lX3ZlcnNpb24gPSBmcmFtZV92ZXJzaW9uCisgICAgICAgIHNlbGYuc2VxID0gc2VxCisKKyAgICAgICAgc2VsZi5kZXN0X3Bhbl9pZCA9IGRlc3RfcGFuX2lkCisgICAgICAgIHNlbGYuZGVzdF9hZGRyZXNzID0gZGVzdF9hZGRyZXNzCisgICAgICAgIHNlbGYuc3JjX3Bhbl9pZCA9IHNyY19wYW5faWQKKyAgICAgICAgc2VsZi5zcmNfYWRkcmVzcyA9IHNyY19hZGRyZXNzCisKKyAgICAgICAgc2VsZi5hdXhfc2VjX2hlYWRlciA9IGF1eF9zZWNfaGVhZGVyCisgICAgICAgIHNlbGYubWljID0gbWljCisKKyAgICAgICAgc2VsZi5mY3MgPSBmY3MKKworCitjbGFzcyBNYWNQYXlsb2FkOgorCisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIDgwMi4xNS40IE1BQyBwYXlsb2FkLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBieXRlYXJyYXkoZGF0YSkKKworCitjbGFzcyBNYWNGcmFtZToKKworICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyA4MDIuMTUuNCBNQUMgZnJhbWUuIiIiCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSk6CisgICAgICAgIG1ocl9zdGFydCA9IGRhdGEudGVsbCgpCisKKyAgICAgICAgZmMsIHNlcSA9IHN0cnVjdC51bnBhY2soIjxIQiIsIGRhdGEucmVhZCgzKSkKKworICAgICAgICBmcmFtZV90eXBlID0gZmMgJiAweDAwMDcKKyAgICAgICAgc2VjdXJpdHlfZW5hYmxlZCA9IGJvb2woZmMgJiAweDAwMDgpCisgICAgICAgIGZyYW1lX3BlbmRpbmcgPSBib29sKGZjICYgMHgwMDEwKQorICAgICAgICBhY2tfcmVxdWVzdCA9IGJvb2woZmMgJiAweDAwMjApCisgICAgICAgIHBhbmlkX2NvbXByZXNzaW9uID0gYm9vbChmYyAmIDB4MDA0MCkKKyAgICAgICAgZGVzdF9hZGRyX21vZGUgPSAoZmMgJiAweDBjMDApID4+IDEwCisgICAgICAgIGZyYW1lX3ZlcnNpb24gPSAoZmMgJiAweDMwMDApID4+IDEyCisgICAgICAgIHNvdXJjZV9hZGRyX21vZGUgPSAoZmMgJiAweGMwMDApID4+IDE0CisKKyAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSBNYWNIZWFkZXIuRnJhbWVUeXBlLkFDSzoKKyAgICAgICAgICAgIGZjcyA9IHNlbGYuX3BhcnNlX2ZjcyhkYXRhLCBkYXRhLnRlbGwoKSkKKyAgICAgICAgICAgIHNlbGYuaGVhZGVyID0gTWFjSGVhZGVyKGZyYW1lX3R5cGUsIGZyYW1lX3BlbmRpbmcsIGFja19yZXF1ZXN0LCBmcmFtZV92ZXJzaW9uLCBzZXEsIGZjcz1mY3MpCisgICAgICAgICAgICBzZWxmLnBheWxvYWQgPSBOb25lCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFByZXNlbmNlIG9mIFBBTiBJZHMgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIHlldCBidXQgc2hvdWxkIGJlIGVub3VnaCBmb3IgVGhyZWFkLgorICAgICAgICBkZXN0X3Bhbl9pZCA9IHN0cnVjdC51bnBhY2soIjxIIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIGRlc3RfYWRkcmVzcyA9IHNlbGYuX3BhcnNlX2FkZHJlc3MoZGF0YSwgZGVzdF9hZGRyX21vZGUpCisKKyAgICAgICAgaWYgbm90IHBhbmlkX2NvbXByZXNzaW9uOgorICAgICAgICAgICAgc3JjX3Bhbl9pZCA9IHN0cnVjdC51bnBhY2soIjxIIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3JjX3Bhbl9pZCA9IGRlc3RfcGFuX2lkCisKKyAgICAgICAgc3JjX2FkZHJlc3MgPSBzZWxmLl9wYXJzZV9hZGRyZXNzKGRhdGEsIHNvdXJjZV9hZGRyX21vZGUpCisKKyAgICAgICAgbWhyX2VuZCA9IGRhdGEudGVsbCgpCisKKyAgICAgICAgaWYgc2VjdXJpdHlfZW5hYmxlZDoKKyAgICAgICAgICAgIGF1eF9zZWNfaGVhZGVyID0gc2VsZi5fcGFyc2VfYXV4X3NlY19oZWFkZXIoZGF0YSkKKyAgICAgICAgICAgIGF1eF9zZWNfaGVhZGVyX2VuZCA9IGRhdGEudGVsbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhdXhfc2VjX2hlYWRlciA9IE5vbmUKKworICAgICAgICAjIENoZWNrIGVuZCBvZiBNQUMgZnJhbWUKKyAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSBNYWNIZWFkZXIuRnJhbWVUeXBlLkNPTU1BTkQ6CisgICAgICAgICAgICBjb21tYW5kX3R5cGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZF90eXBlID0gTm9uZQorCisgICAgICAgIHBheWxvYWRfcG9zID0gZGF0YS50ZWxsKCkKKworICAgICAgICBkYXRhLnNlZWsoLTIsIGlvLlNFRUtfRU5EKQorICAgICAgICBmY3Nfc3RhcnQgPSBkYXRhLnRlbGwoKQorCisgICAgICAgIGlmIGF1eF9zZWNfaGVhZGVyIGFuZCBhdXhfc2VjX2hlYWRlci5zZWN1cml0eV9sZXZlbDoKKyAgICAgICAgICAgIG1pYywgcGF5bG9hZF9lbmQgPSBzZWxmLl9wYXJzZV9taWMoZGF0YSwgYXV4X3NlY19oZWFkZXIuc2VjdXJpdHlfbGV2ZWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXlsb2FkX2VuZCA9IGRhdGEudGVsbCgpCisgICAgICAgICAgICBtaWMgPSBOb25lCisKKyAgICAgICAgZmNzID0gc2VsZi5fcGFyc2VfZmNzKGRhdGEsIGZjc19zdGFydCkKKworICAgICAgICAjIENyZWF0ZSBIZWFkZXIgb2JqZWN0CisgICAgICAgIHNlbGYuaGVhZGVyID0gTWFjSGVhZGVyKGZyYW1lX3R5cGUsIGZyYW1lX3BlbmRpbmcsIGFja19yZXF1ZXN0LCBmcmFtZV92ZXJzaW9uLCBzZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcGFuX2lkLCBkZXN0X2FkZHJlc3MsIHNyY19wYW5faWQsIHNyY19hZGRyZXNzLCBjb21tYW5kX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eF9zZWNfaGVhZGVyLCBtaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjcykKKworICAgICAgICAjIENyZWF0ZSBQYXlsb2FkIG9iamVjdAorICAgICAgICBwYXlsb2FkX2xlbiA9IHBheWxvYWRfZW5kIC0gcGF5bG9hZF9wb3MKKyAgICAgICAgZGF0YS5zZWVrKHBheWxvYWRfcG9zKQorCisgICAgICAgIHBheWxvYWQgPSBkYXRhLnJlYWQocGF5bG9hZF9sZW4pCisKKyAgICAgICAgaWYgc2VjdXJpdHlfZW5hYmxlZDoKKyAgICAgICAgICAgIG1ocl9sZW4gPSBtaHJfZW5kIC0gbWhyX3N0YXJ0CisgICAgICAgICAgICBkYXRhLnNlZWsobWhyX3N0YXJ0KQorICAgICAgICAgICAgbWhyX2J5dGVzID0gZGF0YS5yZWFkKG1ocl9sZW4pCisKKyAgICAgICAgICAgIGF1eF9zZWNfaGVhZGVyX2xlbiA9IGF1eF9zZWNfaGVhZGVyX2VuZCAtIG1ocl9lbmQKKyAgICAgICAgICAgIGF1eF9zZWNfaGRyX2J5dGVzID0gZGF0YS5yZWFkKGF1eF9zZWNfaGVhZGVyX2xlbikKKworICAgICAgICAgICAgbm9uX3BheWxvYWRfZmllbGRzID0gYnl0ZWFycmF5KFtdKQorCisgICAgICAgICAgICBpZiBjb21tYW5kX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbm9uX3BheWxvYWRfZmllbGRzLmFwcGVuZChjb21tYW5kX3R5cGUpCisKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mbyA9IE1lc3NhZ2VJbmZvKCkKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkciA9IGF1eF9zZWNfaGVhZGVyCisgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHJfYnl0ZXMgPSBhdXhfc2VjX2hkcl9ieXRlcworICAgICAgICAgICAgbWVzc2FnZV9pbmZvLm5vbnBheWxvYWRfZmllbGRzID0gbm9uX3BheWxvYWRfZmllbGRzCisgICAgICAgICAgICBtZXNzYWdlX2luZm8ubWhyX2J5dGVzID0gbWhyX2J5dGVzCisgICAgICAgICAgICBpZiBzcmNfYWRkcmVzcy50eXBlID09IE1hY0FkZHJlc3NUeXBlLlNIT1JUOgorICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBEZXZpY2VEZXNjcmlwdG9ycy5nZXRfZXh0ZW5kZWQoc3JjX2FkZHJlc3MpLm1hY19hZGRyZXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBzcmNfYWRkcmVzcy5tYWNfYWRkcmVzcworCisgICAgICAgICAgICBzZWNfb2JqID0gQ3J5cHRvRW5naW5lKE1hY0NyeXB0b01hdGVyaWFsQ3JlYXRvcihjb25maWcuREVGQVVMVF9NQVNURVJfS0VZKSkKKyAgICAgICAgICAgIHNlbGYucGF5bG9hZCA9IE1hY1BheWxvYWQoc2VjX29iai5kZWNyeXB0KHBheWxvYWQsIG1pYywgbWVzc2FnZV9pbmZvKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wYXlsb2FkID0gTWFjUGF5bG9hZChwYXlsb2FkKQorCisgICAgZGVmIF9wYXJzZV9hZGRyZXNzKHNlbGYsIGRhdGEsIG1vZGUpOgorICAgICAgICBpZiBtb2RlID09IE1hY0hlYWRlci5BZGRyZXNzTW9kZS5TSE9SVDoKKyAgICAgICAgICAgIHJldHVybiBNYWNBZGRyZXNzKGRhdGEucmVhZCgyKSwgTWFjQWRkcmVzc1R5cGUuU0hPUlQsIGJpZ19lbmRpYW49RmFsc2UpCisKKyAgICAgICAgaWYgbW9kZSA9PSBNYWNIZWFkZXIuQWRkcmVzc01vZGUuRVhURU5ERUQ6CisgICAgICAgICAgICByZXR1cm4gTWFjQWRkcmVzcyhkYXRhLnJlYWQoOCksIE1hY0FkZHJlc3NUeXBlLkxPTkcsIGJpZ19lbmRpYW49RmFsc2UpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3BhcnNlX2F1eF9zZWNfaGVhZGVyKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWN1cml0eV9jb250cm9sLCBmcmFtZV9jb3VudGVyID0gc3RydWN0LnVucGFjaygiPEJMIiwgZGF0YS5yZWFkKDUpKQorCisgICAgICAgIHNlY3VyaXR5X2xldmVsID0gc2VjdXJpdHlfY29udHJvbCAmIDB4MDcKKyAgICAgICAga2V5X2lkX21vZGUgPSAoc2VjdXJpdHlfY29udHJvbCAmIDB4MTgpID4+IDMKKworICAgICAgICBpZiBrZXlfaWRfbW9kZSA9PSAxOgorICAgICAgICAgICAga2V5X2lkID0gZGF0YS5yZWFkKDEpCisgICAgICAgIGVsaWYga2V5X2lkX21vZGUgPT0gMjoKKyAgICAgICAgICAgIGtleV9pZCA9IGRhdGEucmVhZCg1KQorICAgICAgICBlbGlmIGtleV9pZF9tb2RlID09IDM6CisgICAgICAgICAgICBrZXlfaWQgPSBkYXRhLnJlYWQoOSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleV9zb3VyY2UgPSBOb25lCisgICAgICAgICAgICBrZXlfaW5kZXggPSBOb25lCisKKyAgICAgICAgcmV0dXJuIEF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKGtleV9pZF9tb2RlLCBzZWN1cml0eV9sZXZlbCwgZnJhbWVfY291bnRlciwga2V5X2lkLCBiaWdfZW5kaWFuPUZhbHNlKQorCisgICAgZGVmIF9wYXJzZV9taWMoc2VsZiwgZGF0YSwgc2VjdXJpdHlfbGV2ZWwpOgorICAgICAgICBpZiBzZWN1cml0eV9sZXZlbCBpbiAoMSwgNSk6CisgICAgICAgICAgICBkYXRhLnNlZWsoLTQsIGlvLlNFRUtfQ1VSKQorICAgICAgICAgICAgcGF5bG9hZF9lbmQgPSBkYXRhLnRlbGwoKQorICAgICAgICAgICAgbWljID0gZGF0YS5yZWFkKDQpCisgICAgICAgIGVsaWYgc2VjdXJpdHlfbGV2ZWwgaW4gKDIsIDYpOgorICAgICAgICAgICAgZGF0YS5zZWVrKC04LCBpby5TRUVLX0NVUikKKyAgICAgICAgICAgIHBheWxvYWRfZW5kID0gZGF0YS50ZWxsKCkKKyAgICAgICAgICAgIG1pYyA9IGRhdGEucmVhZCg4KQorICAgICAgICBlbGlmIHNlY3VyaXR5X2xldmVsIGluICgzLCA3KToKKyAgICAgICAgICAgIGRhdGEuc2VlaygtMTYsIGlvLlNFRUtfQ1VSKQorICAgICAgICAgICAgcGF5bG9hZF9lbmQgPSBkYXRhLnRlbGwoKQorICAgICAgICAgICAgbWljID0gZGF0YS5yZWFkKDE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF5bG9hZF9lbmQgPSBkYXRhLnRlbGwoKQorCisgICAgICAgIHJldHVybiBtaWMsIHBheWxvYWRfZW5kCisKKyAgICBkZWYgX3BhcnNlX2ZjcyhzZWxmLCBkYXRhLCBmY3Nfc3RhcnQpOgorICAgICAgICBkYXRhLnNlZWsoZmNzX3N0YXJ0KQorICAgICAgICBmY3MgPSBieXRlYXJyYXkoZGF0YS5yZWFkKDIpKQorICAgICAgICByZXR1cm4gZmNzCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L21lc3NhZ2UucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L21lc3NhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliODBjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbWVzc2FnZS5weQpAQCAtMCwwICsxLDM4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IGlwYWRkcmVzcworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworCitpbXBvcnQgY29hcAoraW1wb3J0IGNvbW1vbgoraW1wb3J0IGlwdjYKK2ltcG9ydCBsb3dwYW4KK2ltcG9ydCBtYWM4MDIxNTQKK2ltcG9ydCBtbGUKKworZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisKK2NsYXNzIE1lc3NhZ2VUeXBlKEludEVudW0pOgorICAgIE1MRSA9IDAKKyAgICBDT0FQID0gMQorICAgIElDTVAgPSAyCisgICAgQUNLID0gMyAKKyAgICBCRUFDT04gPSA0CisgICAgREFUQSA9IDUKKworCitjbGFzcyBNZXNzYWdlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuX2NoYW5uZWwgPSBOb25lCisgICAgICAgIHNlbGYuX21hY19oZWFkZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2lwdjZfcGFja2V0ID0gTm9uZQorICAgICAgICBzZWxmLl9jb2FwID0gTm9uZQorICAgICAgICBzZWxmLl9tbGUgPSBOb25lCisgICAgICAgIHNlbGYuX2ljbXAgPSBOb25lCisKKyAgICBkZWYgX2V4dHJhY3RfdWRwX2RhdGFncmFtKHNlbGYsIHVkcF9kYXRhZ3JhbSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodWRwX2RhdGFncmFtLnBheWxvYWQsIG1sZS5NbGVNZXNzYWdlKToKKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBNZXNzYWdlVHlwZS5NTEUKKyAgICAgICAgICAgIHNlbGYuX21sZSA9IHVkcF9kYXRhZ3JhbS5wYXlsb2FkCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHVkcF9kYXRhZ3JhbS5wYXlsb2FkLCAoY29hcC5Db2FwTWVzc2FnZSwgY29hcC5Db2FwTWVzc2FnZVByb3h5KSk6CisgICAgICAgICAgICBzZWxmLl90eXBlID0gTWVzc2FnZVR5cGUuQ09BUAorICAgICAgICAgICAgc2VsZi5fY29hcCA9IHVkcF9kYXRhZ3JhbS5wYXlsb2FkCisKKyAgICBkZWYgX2V4dHJhY3RfdXBwZXJfbGF5ZXJfcHJvdG9jb2woc2VsZiwgdXBwZXJfbGF5ZXJfcHJvdG9jb2wpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHVwcGVyX2xheWVyX3Byb3RvY29sLCBpcHY2LklDTVB2Nik6CisgICAgICAgICAgICBzZWxmLl90eXBlID0gTWVzc2FnZVR5cGUuSUNNUAorICAgICAgICAgICAgc2VsZi5faWNtcCA9IHVwcGVyX2xheWVyX3Byb3RvY29sCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHVwcGVyX2xheWVyX3Byb3RvY29sLCBpcHY2LlVEUERhdGFncmFtKToKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfdWRwX2RhdGFncmFtKHVwcGVyX2xheWVyX3Byb3RvY29sKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90eXBlCisKKyAgICBAdHlwZS5zZXR0ZXIKKyAgICBkZWYgdHlwZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3R5cGUgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoYW5uZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaGFubmVsCisKKyAgICBAY2hhbm5lbC5zZXR0ZXIKKyAgICBkZWYgY2hhbm5lbChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2NoYW5uZWwgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1hY19oZWFkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tYWNfaGVhZGVyCisKKyAgICBAbWFjX2hlYWRlci5zZXR0ZXIKKyAgICBkZWYgbWFjX2hlYWRlcihzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX21hY19oZWFkZXIgPSB2YWx1ZQorCisgICAgICAgIGlmIHNlbGYuX21hY19oZWFkZXIuZnJhbWVfdHlwZSA9PSBtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5CRUFDT046CisgICAgICAgICAgICBzZWxmLl90eXBlID0gTWVzc2FnZVR5cGUuQkVBQ09OCisKKyAgICAgICAgZWxpZiBzZWxmLl9tYWNfaGVhZGVyLmZyYW1lX3R5cGUgPT0gbWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuQUNLOgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IE1lc3NhZ2VUeXBlLkFDSworCisgICAgICAgIGVsaWYgc2VsZi5fbWFjX2hlYWRlci5mcmFtZV90eXBlID09IG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkRBVEE6CisgICAgICAgICAgICBzZWxmLl90eXBlID0gTWVzc2FnZVR5cGUuREFUQQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlwdjZfcGFja2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXB2Nl9wYWNrZXQKKworICAgIEBpcHY2X3BhY2tldC5zZXR0ZXIKKyAgICBkZWYgaXB2Nl9wYWNrZXQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9pcHY2X3BhY2tldCA9IHZhbHVlCisgICAgICAgIHNlbGYuX2V4dHJhY3RfdXBwZXJfbGF5ZXJfcHJvdG9jb2wodmFsdWUudXBwZXJfbGF5ZXJfcHJvdG9jb2wpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYXAKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tbGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpY21wKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWNtcAorCisgICAgQGljbXAuc2V0dGVyCisgICAgZGVmIGljbXAoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9pY21wID0gdmFsdWUKKworICAgIGRlZiBnZXRfbWxlX21lc3NhZ2VfdGx2KHNlbGYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBNTEUgbWVzc2FnZS4iKQorCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5tbGUuY29tbWFuZC50bHZzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGx2CisKKyAgICBkZWYgYXNzZXJ0TWxlTWVzc2FnZUlzVHlwZShzZWxmLCBjb21tYW5kX3R5cGUpOgorICAgICAgICBpZiBzZWxmLnR5cGUgIT0gTWVzc2FnZVR5cGUuTUxFOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtZXNzYWdlIHR5cGUuIEV4cGVjdGVkIE1MRSBtZXNzYWdlLiIpCisKKyAgICAgICAgYXNzZXJ0KHNlbGYubWxlLmNvbW1hbmQudHlwZSA9PSBjb21tYW5kX3R5cGUpCisKKyAgICBkZWYgYXNzZXJ0TWxlTWVzc2FnZUNvbnRhaW5zVGx2KHNlbGYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBNTEUgbWVzc2FnZS4iKQorCisgICAgICAgIGNvbnRhaW5zX3RsdiA9IEZhbHNlCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5tbGUuY29tbWFuZC50bHZzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgICAgICAgICBjb250YWluc190bHYgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBhc3NlcnQoY29udGFpbnNfdGx2ID09IFRydWUpCisKKyAgICBkZWYgYXNzZXJ0TWxlTWVzc2FnZURvZXNOb3RDb250YWluVGx2KHNlbGYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBNTEUgbWVzc2FnZS4iKQorCisgICAgICAgIGNvbnRhaW5zX3RsdiA9IEZhbHNlCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5tbGUuY29tbWFuZC50bHZzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgICAgICAgICBjb250YWluc190bHYgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBhc3NlcnQoY29udGFpbnNfdGx2ID09IEZhbHNlKQorCisgICAgZGVmIGFzc2VydE1sZU1lc3NhZ2VDb250YWluc09wdGlvbmFsVGx2KHNlbGYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbWVzc2FnZSB0eXBlLiBFeHBlY3RlZCBNTEUgbWVzc2FnZS4iKQorCisgICAgICAgIGNvbnRhaW5zX3RsdiA9IEZhbHNlCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5tbGUuY29tbWFuZC50bHZzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgICAgICAgICBjb250YWluc190bHYgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBwcmludCgiTWxlTWVzc2FnZSBkb2Vzbid0IGNvbnRhaW4gb3B0aW9uYWwgVExWOiB7fSIuZm9ybWF0KHRsdl9jbGFzc190eXBlKSkKKworICAgIGRlZiBnZXRfY29hcF9tZXNzYWdlX3RsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5DT0FQOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtZXNzYWdlIHR5cGUuIEV4cGVjdGVkIENvQVAgbWVzc2FnZS4iKQorCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5jb2FwLnBheWxvYWQ6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRsdiwgdGx2X2NsYXNzX3R5cGUpOgorICAgICAgICAgICAgICAgIHJldHVybiB0bHYKKworICAgIGRlZiBhc3NlcnRDb2FwTWVzc2FnZUNvbnRhaW5zVGx2KHNlbGYsIHRsdl9jbGFzc190eXBlKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLkNPQVA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZS4gRXhwZWN0ZWQgQ29BUCBtZXNzYWdlLiIpCisKKyAgICAgICAgY29udGFpbnNfdGx2ID0gRmFsc2UKKyAgICAgICAgZm9yIHRsdiBpbiBzZWxmLmNvYXAucGF5bG9hZDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgICAgICAgICAgY29udGFpbnNfdGx2ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgYXNzZXJ0KGNvbnRhaW5zX3RsdiA9PSBUcnVlKQorCisgICAgZGVmIGFzc2VydENvYXBNZXNzYWdlQ29udGFpbnNPcHRpb25hbFRsdihzZWxmLCB0bHZfY2xhc3NfdHlwZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5DT0FQOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtZXNzYWdlIHR5cGUuIEV4cGVjdGVkIENvQVAgbWVzc2FnZS4iKQorCisgICAgICAgIGNvbnRhaW5zX3RsdiA9IEZhbHNlCisgICAgICAgIGZvciB0bHYgaW4gc2VsZi5jb2FwLnBheWxvYWQ6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRsdiwgdGx2X2NsYXNzX3R5cGUpOgorICAgICAgICAgICAgICAgIGNvbnRhaW5zX3RsdiA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHByaW50KCJDb2FwTWVzc2FnZSBkb2Vzbid0IGNvbnRhaW4gb3B0aW9uYWwgVExWOiB7fSIuZm9ybWF0KHRsdl9jbGFzc190eXBlKSkKKworICAgIGRlZiBhc3NlcnRDb2FwTWVzc2FnZVJlcXVlc3RVcmlQYXRoKHNlbGYsIHVyaV9wYXRoKToKKyAgICAgICAgaWYgc2VsZi50eXBlICE9IE1lc3NhZ2VUeXBlLkNPQVA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1lc3NhZ2UgdHlwZS4gRXhwZWN0ZWQgQ29BUCBtZXNzYWdlLiIpCisKKyAgICAgICAgYXNzZXJ0KHVyaV9wYXRoID09IHNlbGYuY29hcC51cmlfcGF0aCkKKworICAgIGRlZiBhc3NlcnRDb2FwTWVzc2FnZUNvZGUoc2VsZiwgY29kZSk6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSBNZXNzYWdlVHlwZS5DT0FQOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtZXNzYWdlIHR5cGUuIEV4cGVjdGVkIENvQVAgbWVzc2FnZS4iKQorCisgICAgICAgIGFzc2VydChjb2RlID09IHNlbGYuY29hcC5jb2RlKQorCisgICAgZGVmIGFzc2VydFNlbnRUb05vZGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbnRfdG9fbm9kZSA9IEZhbHNlCisgICAgICAgIGRzdF9hZGRyID0gc2VsZi5pcHY2X3BhY2tldC5pcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzCisKKyAgICAgICAgZm9yIGFkZHIgaW4gbm9kZS5nZXRfYWRkcnMoKToKKyAgICAgICAgICAgIGlmIGRzdF9hZGRyID09IGlwYWRkcmVzcy5pcF9hZGRyZXNzKGFkZHIpOgorICAgICAgICAgICAgICAgIHNlbnRfdG9fbm9kZSA9IFRydWUKKworICAgICAgICBhc3NlcnQgc2VudF90b19ub2RlID09IFRydWUKKworICAgIGRlZiBhc3NlcnRTZW50VG9EZXN0aW5hdGlvbkFkZHJlc3Moc2VsZiwgaXB2Nl9hZGRyZXNzKToKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgorICAgICAgICAgICAgaXB2Nl9hZGRyZXNzID0gaXB2Nl9hZGRyZXNzLmRlY29kZSgidXRmLTgiKQorCisgICAgICAgIGFzc2VydCBzZWxmLmlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MgPT0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoaXB2Nl9hZGRyZXNzKQorCisgICAgZGVmIGFzc2VydFNlbnRXaXRoSG9wTGltaXQoc2VsZiwgaG9wX2xpbWl0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuaG9wX2xpbWl0ID09IGhvcF9saW1pdAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1lc3NhZ2UodHlwZT17fSkiLmZvcm1hdChNZXNzYWdlVHlwZShzZWxmLnR5cGUpLm5hbWUpCisKKworY2xhc3MgTWVzc2FnZXNTZXQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlcyk6CisgICAgICAgIHNlbGYuX21lc3NhZ2VzID0gbWVzc2FnZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtZXNzYWdlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21lc3NhZ2VzCisKKyAgICBkZWYgbmV4dF9jb2FwX21lc3NhZ2Uoc2VsZiwgY29kZSwgdXJpX3BhdGg9Tm9uZSwgYXNzZXJ0X2VuYWJsZWQ9VHJ1ZSk6CisgICAgICAgIG1lc3NhZ2UgPSBOb25lCisKKyAgICAgICAgd2hpbGUgc2VsZi5tZXNzYWdlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2VzLnBvcCgwKQorCisgICAgICAgICAgICBpZiBtLnR5cGUgIT0gTWVzc2FnZVR5cGUuQ09BUDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB1cmlfcGF0aCBpcyBub3QgTm9uZSBhbmQgbS5jb2FwLnVyaV9wYXRoICE9IHVyaV9wYXRoOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IG0uY29hcC5jb2RlLmlzX2VxdWFsX2RvdHRlZChjb2RlKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbWVzc2FnZSA9IG0KKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgYXNzZXJ0X2VuYWJsZWQ6CisgICAgICAgICAgICBhc3NlcnQgbWVzc2FnZSBpcyBub3QgTm9uZSwgIkNvdWxkIG5vdCBmaW5kIENvYXBNZXNzYWdlIHdpdGggY29kZToge30iLmZvcm1hdChjb2RlKQorCisgICAgICAgIHJldHVybiBtZXNzYWdlCisKKyAgICBkZWYgbmV4dF9tbGVfbWVzc2FnZShzZWxmLCBjb21tYW5kX3R5cGUsIGFzc2VydF9lbmFibGVkPVRydWUpOgorICAgICAgICBtZXNzYWdlID0gc2VsZi5uZXh0X21sZV9tZXNzYWdlX29mX29uZV9vZl9jb21tYW5kX3R5cGVzKGNvbW1hbmRfdHlwZSwpCisKKyAgICAgICAgaWYgYXNzZXJ0X2VuYWJsZWQ6CisgICAgICAgICAgICBhc3NlcnQgbWVzc2FnZSBpcyBub3QgTm9uZSwgIkNvdWxkIG5vdCBmaW5kIE1sZU1lc3NhZ2Ugb2YgdGhlIHR5cGU6IHt9Ii5mb3JtYXQoY29tbWFuZF90eXBlKQorCisgICAgICAgIHJldHVybiBtZXNzYWdlCisKKyAgICBkZWYgbmV4dF9tbGVfbWVzc2FnZV9vZl9vbmVfb2ZfY29tbWFuZF90eXBlcyhzZWxmLCAqY29tbWFuZF90eXBlcyk6CisgICAgICAgIG1lc3NhZ2UgPSBOb25lCisKKyAgICAgICAgd2hpbGUgc2VsZi5tZXNzYWdlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2VzLnBvcCgwKQorCisgICAgICAgICAgICBpZiBtLnR5cGUgIT0gTWVzc2FnZVR5cGUuTUxFOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNvbW1hbmRfZm91bmQgPSBGYWxzZQorCisgICAgICAgICAgICBmb3IgY29tbWFuZF90eXBlIGluIGNvbW1hbmRfdHlwZXM6CisgICAgICAgICAgICAgICAgaWYgbS5tbGUuY29tbWFuZC50eXBlID09IGNvbW1hbmRfdHlwZToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgY29tbWFuZF9mb3VuZDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UKKworICAgIGRlZiBjb250YWluc19tbGVfbWVzc2FnZShzZWxmLCBjb21tYW5kX3R5cGUpOgorICAgICAgICBmb3IgbSBpbiBzZWxmLm1lc3NhZ2VzOgorICAgICAgICAgICAgaWYgbS50eXBlICE9IE1lc3NhZ2VUeXBlLk1MRToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBtLm1sZS5jb21tYW5kLnR5cGUgPT0gY29tbWFuZF90eXBlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZG9lc19ub3RfY29udGFpbl9jb2FwX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZvciBtIGluIHNlbGYubWVzc2FnZXM6CisgICAgICAgICAgICBpZiBtLnR5cGUgIT0gTWVzc2FnZVR5cGUuQ09BUDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIE1lc3NhZ2VGYWN0b3J5OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvd3Bhbl9wYXJzZXIpOgorICAgICAgICBzZWxmLl9sb3dwYW5fcGFyc2VyID0gbG93cGFuX3BhcnNlcgorCisgICAgZGVmIF9hZGRfZGV2aWNlX2Rlc2NyaXB0b3JzKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBmb3IgdGx2IGluIG1lc3NhZ2UubWxlLmNvbW1hbmQudGx2czoKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0bHYsIG1sZS5Tb3VyY2VBZGRyZXNzKToKKyAgICAgICAgICAgICAgICBtYWM4MDIxNTQuRGV2aWNlRGVzY3JpcHRvcnMuYWRkKHRsdi5hZGRyZXNzLCBtZXNzYWdlLm1hY19oZWFkZXIuc3JjX2FkZHJlc3MpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGx2LCBtbGUuQWRkcmVzczE2KToKKyAgICAgICAgICAgICAgICBtYWM4MDIxNTQuRGV2aWNlRGVzY3JpcHRvcnMuYWRkKHRsdi5hZGRyZXNzLCBtZXNzYWdlLm1hY19oZWFkZXIuZGVzdF9hZGRyZXNzKQorCisgICAgZGVmIF9wYXJzZV9tYWNfZnJhbWUoc2VsZiwgZGF0YSk6CisgICAgICAgIG1hY19mcmFtZSA9IG1hYzgwMjE1NC5NYWNGcmFtZSgpCisgICAgICAgIG1hY19mcmFtZS5wYXJzZShkYXRhKQorICAgICAgICByZXR1cm4gbWFjX2ZyYW1lCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBtZXNzYWdlID0gTWVzc2FnZSgpCisgICAgICAgIG1lc3NhZ2UuY2hhbm5lbCA9IHN0cnVjdC51bnBhY2soIj5CIiwgZGF0YS5yZWFkKDEpKQorCisgICAgICAgICMgUGFyc2UgTUFDIGhlYWRlcgorICAgICAgICBtYWNfZnJhbWUgPSBzZWxmLl9wYXJzZV9tYWNfZnJhbWUoZGF0YSkKKyAgICAgICAgbWVzc2FnZS5tYWNfaGVhZGVyID0gbWFjX2ZyYW1lLmhlYWRlcgorCisgICAgICAgIGlmIG1lc3NhZ2UubWFjX2hlYWRlci5mcmFtZV90eXBlICE9IG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkRBVEE6CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBtZXNzYWdlLm1hY19oZWFkZXIuc3JjX2FkZHJlc3MKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gbWVzc2FnZS5tYWNfaGVhZGVyLmRlc3RfYWRkcmVzcworCisgICAgICAgICMgQ3JlYXRlIHN0cmVhbSB3aXRoIDZMb1dQQU4gZGF0YWdyYW0KKyAgICAgICAgbG93cGFuX3BheWxvYWQgPSBpby5CeXRlc0lPKG1hY19mcmFtZS5wYXlsb2FkLmRhdGEpCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBzZWxmLl9sb3dwYW5fcGFyc2VyLnBhcnNlKGxvd3Bhbl9wYXlsb2FkLCBtZXNzYWdlX2luZm8pCisgICAgICAgIGlmIGlwdjZfcGFja2V0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZQorCisgICAgICAgIG1lc3NhZ2UuaXB2Nl9wYWNrZXQgPSBpcHY2X3BhY2tldAorCisgICAgICAgIGlmIG1lc3NhZ2UudHlwZSA9PSBNZXNzYWdlVHlwZS5NTEU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGV2aWNlX2Rlc2NyaXB0b3JzKG1lc3NhZ2UpCisKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbWxlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9tbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQxMzVkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbWxlLnB5CkBAIC0wLDAgKzEsMTE1MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IGlwYWRkcmVzcworaW1wb3J0IHN0cnVjdAorCitmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CisKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBuZXR3b3JrX2RhdGEKKworZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisKKworY2xhc3MgQ29tbWFuZFR5cGUoSW50RW51bSk6CisgICAgTElOS19SRVFVRVNUID0gMAorICAgIExJTktfQUNDRVBUID0gMQorICAgIExJTktfQUNDRVBUX0FORF9SRVFVRVNUID0gMgorICAgIExJTktfUkVKRUNUID0gMworICAgIEFEVkVSVElTRU1FTlQgPSA0CisgICAgVVBEQVRFID0gNQorICAgIFVQREFURV9SRVFVRVNUID0gNgorICAgIERBVEFfUkVRVUVTVCA9IDcKKyAgICBEQVRBX1JFU1BPTlNFID0gOAorICAgIFBBUkVOVF9SRVFVRVNUID0gOQorICAgIFBBUkVOVF9SRVNQT05TRSA9IDEwCisgICAgQ0hJTERfSURfUkVRVUVTVCA9IDExCisgICAgQ0hJTERfSURfUkVTUE9OU0UgPSAxMgorICAgIENISUxEX1VQREFURV9SRVFVRVNUID0gMTMKKyAgICBDSElMRF9VUERBVEVfUkVTUE9OU0UgPSAxNAorICAgIEFOTk9VTkNFID0gMTUKKyAgICBESVNDT1ZFUllfUkVRVUVTVCA9IDE2CisgICAgRElTQ09WRVJZX1JFU1BPTlNFID0gMTcKKworCitjbGFzcyBUbHZUeXBlKEludEVudW0pOgorICAgIFNPVVJDRV9BRERSRVNTID0gMAorICAgIE1PREUgPSAxCisgICAgVElNRU9VVCA9IDIKKyAgICBDSEFMTEVOR0UgPSAzCisgICAgUkVTUE9OU0UgPSA0CisgICAgTElOS19MQVlFUl9GUkFNRV9DT1VOVEVSID0gNQorICAgIE1MRV9GUkFNRV9DT1VOVEVSID0gOAorICAgIFJPVVRFNjQgPSA5CisgICAgQUREUkVTUzE2ID0gMTAKKyAgICBMRUFERVJfREFUQSA9IDExCisgICAgTkVUV09SS19EQVRBID0gMTIKKyAgICBUTFZfUkVRVUVTVCA9IDEzCisgICAgU0NBTl9NQVNLID0gMTQKKyAgICBDT05ORUNUSVZJVFkgPSAxNQorICAgIExJTktfTUFSR0lOID0gMTYKKyAgICBTVEFUVVMgPSAxNworICAgIFZFUlNJT04gPSAxOAorICAgIEFERFJFU1NfUkVHSVNUUkFUSU9OID0gMTkKKyAgICBDSEFOTkVMID0gMjAKKyAgICBQQU5JRCA9IDIxCisgICAgQUNUSVZFX1RJTUVTVEFNUCA9IDIyCisgICAgUEVORElOR19USU1FU1RBTVAgPSAyMworICAgIEFDVElWRV9PUEVSQVRJT05BTF9EQVRBU0VUID0gMjQKKyAgICBQRU5ESU5HX09QRVJBVElPTkFMX0RBVEFTRVQgPSAyNQorICAgIFRIUkVBRF9ESVNDT1ZFUlkgPSAyNgorCisKK2NsYXNzIFNvdXJjZUFkZHJlc3Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWRkcmVzcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuYWRkcmVzcyA9PSBvdGhlci5hZGRyZXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU291cmNlQWRkcmVzcyhhZGRyZXNzPXt9KSIuZm9ybWF0KGhleChzZWxmLl9hZGRyZXNzKSkKKworCitjbGFzcyBTb3VyY2VBZGRyZXNzRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBhZGRyZXNzID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBTb3VyY2VBZGRyZXNzKGFkZHJlc3MpCisKKworY2xhc3MgTW9kZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY2VpdmVyLCBzZWN1cmUsIGRldmljZV90eXBlLCBuZXR3b3JrX2RhdGEpOgorICAgICAgICBzZWxmLl9yZWNlaXZlciA9IHJlY2VpdmVyCisgICAgICAgIHNlbGYuX3NlY3VyZSA9IHNlY3VyZQorICAgICAgICBzZWxmLl9kZXZpY2VfdHlwZSA9IGRldmljZV90eXBlCisgICAgICAgIHNlbGYuX25ldHdvcmtfZGF0YSA9IG5ldHdvcmtfZGF0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlY2VpdmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVjZWl2ZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZWN1cmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZWN1cmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZXZpY2VfdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZV90eXBlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV0d29ya19kYXRhKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmV0d29ya19kYXRhCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5yZWNlaXZlciA9PSBvdGhlci5yZWNlaXZlciBhbmQgXAorICAgICAgICAgICAgc2VsZi5zZWN1cmUgPT0gb3RoZXIuc2VjdXJlIGFuZCBcCisgICAgICAgICAgICBzZWxmLmRldmljZV90eXBlID09IG90aGVyLmRldmljZV90eXBlIGFuZCBcCisgICAgICAgICAgICBzZWxmLm5ldHdvcmtfZGF0YSA9PSBvdGhlci5uZXR3b3JrX2RhdGEKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNb2RlKHJlY2VpdmVyPXt9LCBzZWN1cmU9e30sIGRldmljZV90eXBlPXt9LCBuZXR3b3JrX2RhdGE9e30pIi5mb3JtYXQoc2VsZi5yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWN1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2aWNlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV0d29ya19kYXRhKQorCisKK2NsYXNzIE1vZGVGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIG1vZGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByZWNlaXZlciA9IChtb2RlID4+IDMpICYgMHgwMQorICAgICAgICBzZWN1cmUgPSAobW9kZSA+PiAyKSAmIDB4MDEKKyAgICAgICAgZGV2aWNlX3R5cGUgPSAobW9kZSA+PiAxKSAmIDB4MDEKKyAgICAgICAgbmV0d29ya19kYXRhID0gKG1vZGUgPj4gMCkgJiAweDAxCisgICAgICAgIHJldHVybiBNb2RlKHJlY2VpdmVyLCBzZWN1cmUsIGRldmljZV90eXBlLCBuZXR3b3JrX2RhdGEpCisKKworY2xhc3MgVGltZW91dChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLl90aW1lb3V0ID0gdGltZW91dAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRpbWVvdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aW1lb3V0CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi50aW1lb3V0ID09IG90aGVyLnRpbWVvdXQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUaW1lb3V0KHRpbWVvdXQ9e30pIi5mb3JtYXQoc2VsZi50aW1lb3V0KQorCisKK2NsYXNzIFRpbWVvdXRGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHRpbWVvdXQgPSBzdHJ1Y3QudW5wYWNrKCI+SSIsIGRhdGEucmVhZCg0KSlbMF0KKyAgICAgICAgcmV0dXJuIFRpbWVvdXQodGltZW91dCkKKworCitjbGFzcyBDaGFsbGVuZ2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFsbGVuZ2UpOgorICAgICAgICBzZWxmLl9jaGFsbGVuZ2UgPSBjaGFsbGVuZ2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaGFsbGVuZ2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaGFsbGVuZ2UKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmNoYWxsZW5nZSA9PSBvdGhlci5jaGFsbGVuZ2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDaGFsbGVuZ2UoY2hhbGxlbmdlPXt9KSIuZm9ybWF0KGhleGxpZnkoc2VsZi5jaGFsbGVuZ2UpKQorCisKK2NsYXNzIENoYWxsZW5nZUZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgY2hhbGxlbmdlID0gZGF0YS5yZWFkKCkKKyAgICAgICAgcmV0dXJuIENoYWxsZW5nZShjaGFsbGVuZ2UpCisKKworY2xhc3MgUmVzcG9uc2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXNwb25zZSk6CisgICAgICAgIHNlbGYuX3Jlc3BvbnNlID0gcmVzcG9uc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXNwb25zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3BvbnNlCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5yZXNwb25zZSA9PSBvdGhlci5yZXNwb25zZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlJlc3BvbnNlKHJlc3BvbnNlPXt9KSIuZm9ybWF0KGhleGxpZnkoc2VsZi5yZXNwb25zZSkpCisKKworY2xhc3MgUmVzcG9uc2VGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHJlc3BvbnNlID0gZGF0YS5yZWFkKCkKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlKQorCisKK2NsYXNzIExpbmtMYXllckZyYW1lQ291bnRlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lX2NvdW50ZXIpOgorICAgICAgICBzZWxmLl9mcmFtZV9jb3VudGVyID0gZnJhbWVfY291bnRlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZyYW1lX2NvdW50ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZV9jb3VudGVyCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5mcmFtZV9jb3VudGVyID09IG90aGVyLmZyYW1lX2NvdW50ZXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMaW5rTGF5ZXJGcmFtZUNvdW50ZXIoZnJhbWVfY291bnRlcj17fSkiLmZvcm1hdChzZWxmLmZyYW1lX2NvdW50ZXIpCisKKworY2xhc3MgTGlua0xheWVyRnJhbWVDb3VudGVyRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBmcmFtZV9jb3VudGVyID0gc3RydWN0LnVucGFjaygiPkkiLCBkYXRhLnJlYWQoNCkpWzBdCisgICAgICAgIHJldHVybiBMaW5rTGF5ZXJGcmFtZUNvdW50ZXIoZnJhbWVfY291bnRlcikKKworCitjbGFzcyBNbGVGcmFtZUNvdW50ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZV9jb3VudGVyKToKKyAgICAgICAgc2VsZi5fZnJhbWVfY291bnRlciA9IGZyYW1lX2NvdW50ZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmcmFtZV9jb3VudGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVfY291bnRlcgorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZnJhbWVfY291bnRlciA9PSBvdGhlci5mcmFtZV9jb3VudGVyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTWxlRnJhbWVDb3VudGVyKGZyYW1lX2NvdW50ZXI9e30pIi5mb3JtYXQoc2VsZi5mcmFtZV9jb3VudGVyKQorCisKK2NsYXNzIE1sZUZyYW1lQ291bnRlckZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgZnJhbWVfY291bnRlciA9IHN0cnVjdC51bnBhY2soIj5JIiwgZGF0YS5yZWFkKDQpKVswXQorICAgICAgICByZXR1cm4gTWxlRnJhbWVDb3VudGVyKGZyYW1lX2NvdW50ZXIpCisKKworY2xhc3MgTGlua1F1YWxpdHlBbmRSb3V0ZURhdGEob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQsIF9pbnB1dCwgcm91dGUpOgorICAgICAgICBzZWxmLl9vdXRwdXQgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5faW5wdXQgPSBfaW5wdXQKKyAgICAgICAgc2VsZi5fcm91dGUgPSByb3V0ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG91dHB1dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlucHV0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faW5wdXQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb3V0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JvdXRlCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5vdXRwdXQgPT0gb3RoZXIub3V0cHV0IGFuZCBzZWxmLmlucHV0ID09IG90aGVyLmlucHV0IGFuZCBzZWxmLnJvdXRlID09IG90aGVyLnJvdXRlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTGlua1F1YWxpdHlBbmRSb3V0ZURhdGEob3VwdXQ9e30sIGlucHV0PXt9LCByb3V0ZT17fSkiLmZvcm1hdChzZWxmLm91dHB1dCwgc2VsZi5pbnB1dCwgc2VsZi5yb3V0ZSkKKworCitjbGFzcyBMaW5rUXVhbGl0eUFuZFJvdXRlRGF0YUZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgbHFyZCA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIG91dHB1dCA9IChscXJkID4+IDYpICYgMHgzCisgICAgICAgIF9pbnB1dCA9IChscXJkID4+IDQpICYgMHgzCisgICAgICAgIHJvdXRlID0gbHFyZCAmIDB4MGYKKyAgICAgICAgcmV0dXJuIExpbmtRdWFsaXR5QW5kUm91dGVEYXRhKG91dHB1dCwgX2lucHV0LCByb3V0ZSkKKworCitjbGFzcyBSb3V0ZTY0KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaWRfc2VxdWVuY2UsIHJvdXRlcl9pZF9tYXNrLCBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEpOgorICAgICAgICBzZWxmLl9pZF9zZXF1ZW5jZSA9IGlkX3NlcXVlbmNlCisgICAgICAgIHNlbGYuX3JvdXRlcl9pZF9tYXNrID0gcm91dGVyX2lkX21hc2sKKyAgICAgICAgc2VsZi5fbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhID0gbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWRfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZF9zZXF1ZW5jZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvdXRlcl9pZF9tYXNrKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcm91dGVyX2lkX21hc2sKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmlkX3NlcXVlbmNlID09IG90aGVyLmlkX3NlcXVlbmNlIGFuZCBcCisgICAgICAgICAgICBzZWxmLnJvdXRlcl9pZF9tYXNrID09IG90aGVyLnJvdXRlcl9pZF9tYXNrIGFuZCBcCisgICAgICAgICAgICBzZWxmLmxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSA9PSBvdGhlci5saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgbHFyZF9zdHIgPSAiLCAiLmpvaW4oWyJ7fSIuZm9ybWF0KGxxcmQpIGZvciBscXJkIGluIHNlbGYubGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhXSkKKyAgICAgICAgcmV0dXJuICJSb3V0ZTY0KGlkX3NlcXVlbmNlPXt9LCByb3V0ZXJfaWRfbWFzaz17fSwgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhPVt7fV0pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmlkX3NlcXVlbmNlLCBoZXgoc2VsZi5yb3V0ZXJfaWRfbWFzayksIGxxcmRfc3RyKQorCisKK2NsYXNzIFJvdXRlNjRGYWN0b3J5OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YV9mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fbHFyZF9mYWN0b3J5ID0gbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBpZF9zZXF1ZW5jZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHJvdXRlcl9pZF9tYXNrID0gc3RydWN0LnVucGFjaygiPlEiLCBkYXRhLnJlYWQoOCkpWzBdCisKKyAgICAgICAgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhID0gW10KKworICAgICAgICB3aGlsZSBkYXRhLnRlbGwoKSA8IGxlbihkYXRhLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhLmFwcGVuZChzZWxmLl9scXJkX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKSkKKworICAgICAgICByZXR1cm4gUm91dGU2NChpZF9zZXF1ZW5jZSwgcm91dGVyX2lkX21hc2ssIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSkKKworCitjbGFzcyBBZGRyZXNzMTYob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYWRkcmVzcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuYWRkcmVzcyA9PSBvdGhlci5hZGRyZXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQWRkcmVzczE2KGFkZHJlc3M9e30pIi5mb3JtYXQoaGV4KHNlbGYuYWRkcmVzcykpCisKKworY2xhc3MgQWRkcmVzczE2RmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBhZGRyZXNzID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBBZGRyZXNzMTYoYWRkcmVzcykKKworCitjbGFzcyBMZWFkZXJEYXRhKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGl0aW9uX2lkLCB3ZWlnaHRpbmcsIGRhdGFfdmVyc2lvbiwgc3RhYmxlX2RhdGFfdmVyc2lvbiwgbGVhZGVyX3JvdXRlcl9pZCk6CisgICAgICAgIHNlbGYuX3BhcnRpdGlvbl9pZCA9IHBhcnRpdGlvbl9pZAorICAgICAgICBzZWxmLl93ZWlnaHRpbmcgPSB3ZWlnaHRpbmcKKyAgICAgICAgc2VsZi5fZGF0YV92ZXJzaW9uID0gZGF0YV92ZXJzaW9uCisgICAgICAgIHNlbGYuX3N0YWJsZV9kYXRhX3ZlcnNpb24gPSBzdGFibGVfZGF0YV92ZXJzaW9uCisgICAgICAgIHNlbGYuX2xlYWRlcl9yb3V0ZXJfaWQgPSBsZWFkZXJfcm91dGVyX2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFydGl0aW9uX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGFydGl0aW9uX2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2VpZ2h0aW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2VpZ2h0aW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF0YV92ZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YV92ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RhYmxlX2RhdGFfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YWJsZV9kYXRhX3ZlcnNpb24KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsZWFkZXJfcm91dGVyX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGVhZGVyX3JvdXRlcl9pZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucGFydGl0aW9uX2lkID09IG90aGVyLnBhcnRpdGlvbl9pZCBhbmQgXAorICAgICAgICAgICAgc2VsZi53ZWlnaHRpbmcgPT0gb3RoZXIud2VpZ2h0aW5nIGFuZCBcCisgICAgICAgICAgICBzZWxmLmRhdGFfdmVyc2lvbiA9PSBvdGhlci5kYXRhX3ZlcnNpb24gYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc3RhYmxlX2RhdGFfdmVyc2lvbiA9PSBvdGhlci5zdGFibGVfZGF0YV92ZXJzaW9uIGFuZCBcCisgICAgICAgICAgICBzZWxmLmxlYWRlcl9yb3V0ZXJfaWQgPT0gb3RoZXIubGVhZGVyX3JvdXRlcl9pZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxlYWRlckRhdGEocGFydGl0aW9uX2lkPXt9LCB3ZWlnaHRpbmc9e30sIGRhdGFfdmVyc2lvbj17fSwgc3RhYmxlX2RhdGFfdmVyc2lvbj17fSwgbGVhZGVyX3JvdXRlcl9pZD17fSkiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYucGFydGl0aW9uX2lkLCBzZWxmLndlaWdodGluZywgc2VsZi5kYXRhX3ZlcnNpb24sIHNlbGYuc3RhYmxlX2RhdGFfdmVyc2lvbiwgc2VsZi5sZWFkZXJfcm91dGVyX2lkKQorCisKK2NsYXNzIExlYWRlckRhdGFGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHBhcnRpdGlvbl9pZCA9IHN0cnVjdC51bnBhY2soIj5JIiwgZGF0YS5yZWFkKDQpKVswXQorICAgICAgICB3ZWlnaHRpbmcgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBkYXRhX3ZlcnNpb24gPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBzdGFibGVfZGF0YV92ZXJzaW9uID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgbGVhZGVyX3JvdXRlcl9pZCA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHJldHVybiBMZWFkZXJEYXRhKHBhcnRpdGlvbl9pZCwgd2VpZ2h0aW5nLCBkYXRhX3ZlcnNpb24sIHN0YWJsZV9kYXRhX3ZlcnNpb24sIGxlYWRlcl9yb3V0ZXJfaWQpCisKKworY2xhc3MgTmV0d29ya0RhdGEob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0bHZzKToKKyAgICAgICAgc2VsZi5fdGx2cyA9IHRsdnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGx2cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGx2cyA9PSBvdGhlci50bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHRsdnNfc3RyID0gIiwgIi5qb2luKFsie30iLmZvcm1hdCh0bHYpIGZvciB0bHYgaW4gc2VsZi50bHZzXSkKKyAgICAgICAgcmV0dXJuICJOZXR3b3JrRGF0YSh0bHZzPVt7fV0pIi5mb3JtYXQodGx2c19zdHIpCisKKworY2xhc3MgTmV0d29ya0RhdGFGYWN0b3J5OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl90bHZzX2ZhY3RvcnkgPSBuZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgdGx2cyA9IHNlbGYuX3RsdnNfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisgICAgICAgIHJldHVybiBOZXR3b3JrRGF0YSh0bHZzKQorCisKK2NsYXNzIFRsdlJlcXVlc3Qob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0bHZzKToKKyAgICAgICAgc2VsZi5fdGx2cyA9IHRsdnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGx2cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGx2cyA9PSBvdGhlci50bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHRsdnNfc3RyID0gIiwgIi5qb2luKFsie30iLmZvcm1hdCh0bHYpIGZvciB0bHYgaW4gc2VsZi50bHZzXSkKKyAgICAgICAgcmV0dXJuICJUbHZSZXF1ZXN0KHRsdnM9W3t9XSkiLmZvcm1hdCh0bHZzX3N0cikKKworCitjbGFzcyBUbHZSZXF1ZXN0RmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICB0bHZzID0gW2IgZm9yIGIgaW4gYnl0ZWFycmF5KGRhdGEucmVhZCgpKV0KKyAgICAgICAgcmV0dXJuIFRsdlJlcXVlc3QodGx2cykKKworCitjbGFzcyBTY2FuTWFzayhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgZW5kX2RldmljZSk6CisgICAgICAgIHNlbGYuX3JvdXRlciA9IHJvdXRlcgorICAgICAgICBzZWxmLl9lbmRfZGV2aWNlID0gZW5kX2RldmljZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvdXRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JvdXRlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVuZF9kZXZpY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9lbmRfZGV2aWNlCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5yb3V0ZXIgPT0gb3RoZXIucm91dGVyIGFuZCBzZWxmLmVuZF9kZXZpY2UgPT0gb3RoZXIuZW5kX2RldmljZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlNjYW5NYXNrKHJvdXRlcj17fSwgZW5kX2RldmljZT17fSkiLmZvcm1hdChzZWxmLnJvdXRlciwgc2VsZi5lbmRfZGV2aWNlKQorCisKK2NsYXNzIFNjYW5NYXNrRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzY2FuX21hc2sgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICByb3V0ZXIgPSAoc2Nhbl9tYXNrID4+IDcpICYgMHgwMQorICAgICAgICBlbmRfZGV2aWNlID0gKHNjYW5fbWFzayA+PiA2KSAmIDB4MDEKKyAgICAgICAgcmV0dXJuIFNjYW5NYXNrKHJvdXRlciwgZW5kX2RldmljZSkKKworCitjbGFzcyBDb25uZWN0aXZpdHkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBwcCwKKyAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzMsCisgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8yLAorICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMSwKKyAgICAgICAgICAgICAgICAgbGVhZGVyX2Nvc3QsCisgICAgICAgICAgICAgICAgIGlkX3NlcXVlbmNlLAorICAgICAgICAgICAgICAgICBhY3RpdmVfcm91dGVycywKKyAgICAgICAgICAgICAgICAgc2VkX2J1ZmZlcl9zaXplPU5vbmUsCisgICAgICAgICAgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudD1Ob25lKToKKyAgICAgICAgc2VsZi5fcHAgPSBwcAorICAgICAgICBzZWxmLl9saW5rX3F1YWxpdHlfMyA9IGxpbmtfcXVhbGl0eV8zCisgICAgICAgIHNlbGYuX2xpbmtfcXVhbGl0eV8yID0gbGlua19xdWFsaXR5XzIKKyAgICAgICAgc2VsZi5fbGlua19xdWFsaXR5XzEgPSBsaW5rX3F1YWxpdHlfMQorICAgICAgICBzZWxmLl9sZWFkZXJfY29zdCA9IGxlYWRlcl9jb3N0CisgICAgICAgIHNlbGYuX2lkX3NlcXVlbmNlID0gaWRfc2VxdWVuY2UKKyAgICAgICAgc2VsZi5fYWN0aXZlX3JvdXRlcnMgPSBhY3RpdmVfcm91dGVycworICAgICAgICBzZWxmLl9zZWRfYnVmZmVyX3NpemUgPSBzZWRfYnVmZmVyX3NpemUKKyAgICAgICAgc2VsZi5fc2VkX2RhdGFncmFtX2NvdW50ID0gc2VkX2RhdGFncmFtX2NvdW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmtfcXVhbGl0eV8zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlua19xdWFsaXR5XzMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5rX3F1YWxpdHlfMihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpbmtfcXVhbGl0eV8yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGlua19xdWFsaXR5XzEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9saW5rX3F1YWxpdHlfMQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxlYWRlcl9jb3N0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGVhZGVyX2Nvc3QKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpZF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lkX3NlcXVlbmNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWN0aXZlX3JvdXRlcnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hY3RpdmVfcm91dGVycworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlZF9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlZF9idWZmZXJfc2l6ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlZF9kYXRhZ3JhbV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlZF9kYXRhZ3JhbV9jb3VudAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucHAgPT0gb3RoZXIucHAgYW5kIFwKKyAgICAgICAgICAgIHNlbGYubGlua19xdWFsaXR5XzMgPT0gb3RoZXIubGlua19xdWFsaXR5XzMgYW5kIFwKKyAgICAgICAgICAgIHNlbGYubGlua19xdWFsaXR5XzIgPT0gb3RoZXIubGlua19xdWFsaXR5XzIgYW5kIFwKKyAgICAgICAgICAgIHNlbGYubGlua19xdWFsaXR5XzEgPT0gb3RoZXIubGlua19xdWFsaXR5XzEgYW5kIFwKKyAgICAgICAgICAgIHNlbGYubGVhZGVyX2Nvc3QgPT0gb3RoZXIubGVhZGVyX2Nvc3QgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuaWRfc2VxdWVuY2UgPT0gb3RoZXIuaWRfc2VxdWVuY2UgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX3JvdXRlcnMgPT0gb3RoZXIuYWN0aXZlX3JvdXRlcnMgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc2VkX2J1ZmZlcl9zaXplID09IG90aGVyLnNlZF9idWZmZXJfc2l6ZSBhbmQgXAorICAgICAgICAgICAgc2VsZi5zZWRfZGF0YWdyYW1fY291bnQgPT0gb3RoZXIuc2VkX2RhdGFncmFtX2NvdW50CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByIkNvbm5lY3Rpdml0eShwcD17fSwgXAorICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMz17fSwgXAorICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMj17fSwgXAorICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMT17fSwgXAorICAgICAgICAgICAgICAgICBsZWFkZXJfY29zdD17fSwgXAorICAgICAgICAgICAgICAgICBpZF9zZXF1ZW5jZT17fSwgXAorICAgICAgICAgICAgICAgICBhY3RpdmVfcm91dGVycz17fSwgXAorICAgICAgICAgICAgICAgICBzZWRfYnVmZmVyX3NpemU9e30sIFwKKyAgICAgICAgICAgICAgICAgc2VkX2RhdGFncmFtX2NvdW50PXt9KSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5wcCwKKyAgICAgICAgICAgIHNlbGYubGlua19xdWFsaXR5XzMsCisgICAgICAgICAgICBzZWxmLmxpbmtfcXVhbGl0eV8yLAorICAgICAgICAgICAgc2VsZi5saW5rX3F1YWxpdHlfMSwKKyAgICAgICAgICAgIHNlbGYubGVhZGVyX2Nvc3QsCisgICAgICAgICAgICBzZWxmLmlkX3NlcXVlbmNlLAorICAgICAgICAgICAgc2VsZi5hY3RpdmVfcm91dGVycywKKyAgICAgICAgICAgIHNlbGYuc2VkX2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgc2VsZi5zZWRfZGF0YWdyYW1fY291bnQKKyAgICAgICAgKQorCisKK2NsYXNzIENvbm5lY3Rpdml0eUZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcHAgPSBvcmQoZGF0YS5yZWFkKDEpKSAmIDB4MDMKKyAgICAgICAgbGlua19xdWFsaXR5XzMgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBsaW5rX3F1YWxpdHlfMiA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIGxpbmtfcXVhbGl0eV8xID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgbGVhZGVyX2Nvc3QgPSBvcmQoZGF0YS5yZWFkKDEpKQorICAgICAgICBpZF9zZXF1ZW5jZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIGFjdGl2ZV9yb3V0ZXJzID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBzZWRfZGF0YSA9IGlvLkJ5dGVzSU8oZGF0YS5yZWFkKDMpKQorCisgICAgICAgIGlmIGxlbihzZWRfZGF0YS5nZXR2YWx1ZSgpKSA+IDA6CisgICAgICAgICAgICBzZWRfYnVmZmVyX3NpemUgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIHNlZF9kYXRhLnJlYWQoMikpWzBdCisgICAgICAgICAgICBzZWRfZGF0YWdyYW1fY291bnQgPSBvcmQoc2VkX2RhdGEucmVhZCgxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlZF9idWZmZXJfc2l6ZSA9IE5vbmUKKyAgICAgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudCA9IE5vbmUKKworICAgICAgICByZXR1cm4gQ29ubmVjdGl2aXR5KHBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRlcl9jb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkX3NlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9yb3V0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZF9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWRfZGF0YWdyYW1fY291bnQpCisKKworY2xhc3MgTGlua01hcmdpbihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmtfbWFyZ2luKToKKyAgICAgICAgc2VsZi5fbGlua19tYXJnaW4gPSBsaW5rX21hcmdpbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmtfbWFyZ2luKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlua19tYXJnaW4KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmxpbmtfbWFyZ2luID09IG90aGVyLmxpbmtfbWFyZ2luCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTGlua01hcmdpbihsaW5rX21hcmdpbj17fSkiLmZvcm1hdChzZWxmLmxpbmtfbWFyZ2luKQorCisKK2NsYXNzIExpbmtNYXJnaW5GYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGxpbmtfbWFyZ2luID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgcmV0dXJuIExpbmtNYXJnaW4obGlua19tYXJnaW4pCisKKworY2xhc3MgU3RhdHVzKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5fc3RhdHVzID0gc3RhdHVzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RhdHVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdHVzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5zdGF0dXMgPT0gb3RoZXIuc3RhdHVzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiU3RhdHVzKHN0YXR1cz17fSkiLmZvcm1hdChzZWxmLnN0YXR1cykKKworCitjbGFzcyBTdGF0dXNGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHN0YXR1cyA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHJldHVybiBTdGF0dXMoc3RhdHVzKQorCisKK2NsYXNzIFZlcnNpb24ob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgc2VsZi5fdmVyc2lvbiA9IHZlcnNpb24KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmVyc2lvbgorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudmVyc2lvbiA9PSBvdGhlci52ZXJzaW9uCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVmVyc2lvbih2ZXJzaW9uPXt9KSIuZm9ybWF0KHNlbGYudmVyc2lvbikKKworCitjbGFzcyBWZXJzaW9uRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICB2ZXJzaW9uID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBWZXJzaW9uKHZlcnNpb24pCisKKworY2xhc3MgQWRkcmVzc0Z1bGwob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcHY2X2FkZHJlc3MpOgorICAgICAgICBzZWxmLl9pcHY2X2FkZHJlc3MgPSBpcHY2X2FkZHJlc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpcHY2X2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pcHY2X2FkZHJlc3MKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmlwdjZfYWRkcmVzcyA9PSBvdGhlci5pcHY2X2FkZHJlc3MKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJBZGRyZXNzRnVsbChpcHY2X2FkZHJlc3M9e30nKSIuZm9ybWF0KGhleGxpZnkoc2VsZi5pcHY2X2FkZHJlc3MpKQorCisKK2NsYXNzIEFkZHJlc3NGdWxsRmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBkYXRhLnJlYWQoMSkgICMgZmlyc3QgYnl0ZSBpcyBpZ25vcmVkCisgICAgICAgIGlwdjZfYWRkcmVzcyA9IGRhdGEucmVhZCgxNikKKyAgICAgICAgcmV0dXJuIEFkZHJlc3NGdWxsKGlwdjZfYWRkcmVzcykKKworCitjbGFzcyBBZGRyZXNzQ29tcHJlc3NlZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNpZCwgaWlkKToKKyAgICAgICAgc2VsZi5fY2lkID0gY2lkCisgICAgICAgIHNlbGYuX2lpZCA9IGlpZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NpZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lpZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY2lkID09IG90aGVyLmNpZCBhbmQgc2VsZi5paWQgPT0gb3RoZXIuaWlkCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQWRkcmVzc0NvbXByZXNzZWQoY2lkPXt9LCBpaWQ9e30nKSIuZm9ybWF0KHNlbGYuY2lkLCBoZXhsaWZ5KHNlbGYuaWlkKSkKKworCitjbGFzcyBBZGRyZXNzQ29tcHJlc3NlZEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgY2lkID0gKG9yZChkYXRhLnJlYWQoMSkpICYgMHgwRikKKyAgICAgICAgaWlkID0gYnl0ZWFycmF5KGRhdGEucmVhZCg4KSkKKyAgICAgICAgcmV0dXJuIEFkZHJlc3NDb21wcmVzc2VkKGNpZCwgaWlkKQorCisKK2NsYXNzIEFkZHJlc3NSZWdpc3RyYXRpb24ob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzZXMpOgorICAgICAgICBzZWxmLl9hZGRyZXNzZXMgPSBhZGRyZXNzZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRyZXNzZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9hZGRyZXNzZXMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmFkZHJlc3NlcyA9PSBvdGhlci5hZGRyZXNzZXMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYWRkcmVzc2VzX3N0ciA9ICIsICIuam9pbihbInt9Ii5mb3JtYXQoYWRkcmVzcykgZm9yIGFkZHJlc3MgaW4gc2VsZi5hZGRyZXNzZXNdKQorICAgICAgICByZXR1cm4gIkFkZHJlc3NSZWdpc3RyYXRpb24oYWRkcmVzc2VzPVt7fV0pIi5mb3JtYXQoYWRkcmVzc2VzX3N0cikKKworCitjbGFzcyBBZGRyZXNzUmVnaXN0cmF0aW9uRmFjdG9yeToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyX2NvbXByZXNzZWRfZmFjdG9yeSwgYWRkcl9mdWxsX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl9hZGRyX2NvbXByZXNzZWRfZmFjdG9yeSA9IGFkZHJfY29tcHJlc3NlZF9mYWN0b3J5CisgICAgICAgIHNlbGYuX2FkZHJfZnVsbF9mYWN0b3J5ID0gYWRkcl9mdWxsX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBhZGRyZXNzZXMgPSBbXQorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBjb21wcmVzc2VkID0gKG9yZChkYXRhLnJlYWQoMSkpID4+IDcpICYgMHgwMQorICAgICAgICAgICAgZGF0YS5zZWVrKC0xLCBpby5TRUVLX0NVUikKKworICAgICAgICAgICAgaWYgY29tcHJlc3NlZDoKKyAgICAgICAgICAgICAgICBhZGRyZXNzZXMuYXBwZW5kKHNlbGYuX2FkZHJfY29tcHJlc3NlZF9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy5hcHBlbmQoc2VsZi5fYWRkcl9mdWxsX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKSkKKworICAgICAgICByZXR1cm4gQWRkcmVzc1JlZ2lzdHJhdGlvbihhZGRyZXNzZXMpCisKKworY2xhc3MgQ2hhbm5lbChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWxfcGFnZSwgY2hhbm5lbCk6CisgICAgICAgIHNlbGYuX2NoYW5uZWxfcGFnZSA9IGNoYW5uZWxfcGFnZQorICAgICAgICBzZWxmLl9jaGFubmVsID0gY2hhbm5lbAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoYW5uZWxfcGFnZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NoYW5uZWxfcGFnZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoYW5uZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaGFubmVsCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5jaGFubmVsX3BhZ2UgPT0gb3RoZXIuY2hhbm5lbF9wYWdlIGFuZCBcCisgICAgICAgICAgICBzZWxmLmNoYW5uZWwgPT0gb3RoZXIuY2hhbm5lbAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNoYW5uZWwoY2hhbm5lbF9wYWdlPXt9LCBjaGFubmVsPXt9KSIuZm9ybWF0KHNlbGYuY2hhbm5lbF9wYWdlLCBjaGFubmVsKQorCisKK2NsYXNzIENoYW5uZWxGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGNoYW5uZWxfcGFnZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIGNoYW5uZWwgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKyAgICAgICAgcmV0dXJuIENoYW5uZWwoY2hhbm5lbF9wYWdlLCBjaGFubmVsKQorCisKK2NsYXNzIFBhbklkOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhbl9pZCk6CisgICAgICAgIHNlbGYuX3Bhbl9pZCA9IHBhbl9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhbl9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Bhbl9pZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucGFuX2lkID09IG90aGVyLnBhbl9pZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlBhbklkKHBhbl9pZD17fSkiLmZvcm1hdChzZWxmLnBhbl9pZCkKKworCitjbGFzcyBQYW5JZEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcGFuX2lkID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBQYW5JZChwYW5faWQpCisKKworY2xhc3MgQWN0aXZlVGltZXN0YW1wKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wX3NlY29uZHMsIHRpbWVzdGFtcF90aWNrcywgdSk6CisgICAgICAgIHNlbGYuX3RpbWVzdGFtcF9zZWNvbmRzID0gdGltZXN0YW1wX3NlY29uZHMKKyAgICAgICAgc2VsZi5fdGltZXN0YW1wX3RpY2tzID0gdGltZXN0YW1wX3RpY2tzCisgICAgICAgIHNlbGYuX3UgPSB1CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGltZXN0YW1wX3NlY29uZHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aW1lc3RhbXBfc2Vjb25kcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRpbWVzdGFtcF90aWNrcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVzdGFtcF90aWNrcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi50aW1lc3RhbXBfc2Vjb25kcyA9PSBvdGhlci50aW1lc3RhbXBfc2Vjb25kcyBhbmQgXAorICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfdGlja3MgPT0gb3RoZXIudGltZXN0YW1wX3RpY2tzIGFuZCBcCisgICAgICAgICAgICBzZWxmLnUgPT0gb3RoZXIudQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkFjdGl2ZVRpbWVzdGFtcCh0aW1lc3RhbXBfc2Vjb25kcz17fSwgdGltZXN0YW1wX3RpY2tzPXt9LCB1PXt9KSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfc2Vjb25kcywgc2VsZi50aW1lc3RhbXBfdGlja3MsIHNlbGYudSkKKworCitjbGFzcyBBY3RpdmVUaW1lc3RhbXBGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHNlY29uZHMgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDBdKSArIGJ5dGVhcnJheShkYXRhLnJlYWQoNikpCisgICAgICAgIHRpY2tzID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgdGltZXN0YW1wX3NlY29uZHMgPSBzdHJ1Y3QudW5wYWNrKCI+USIsIGJ5dGVzKHNlY29uZHMpKVswXQorICAgICAgICB0aW1lc3RhbXBfdGlja3MgPSAodGlja3MgPj4gMSkKKyAgICAgICAgdSA9IHRpY2tzICYgMHgwMQorICAgICAgICByZXR1cm4gQWN0aXZlVGltZXN0YW1wKHRpbWVzdGFtcF9zZWNvbmRzLCB0aW1lc3RhbXBfdGlja3MsIHUpCisKKworY2xhc3MgUGVuZGluZ1RpbWVzdGFtcChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVzdGFtcF9zZWNvbmRzLCB0aW1lc3RhbXBfdGlja3MsIHUpOgorICAgICAgICBzZWxmLl90aW1lc3RhbXBfc2Vjb25kcyA9IHRpbWVzdGFtcF9zZWNvbmRzCisgICAgICAgIHNlbGYuX3RpbWVzdGFtcF90aWNrcyA9IHRpbWVzdGFtcF90aWNrcworICAgICAgICBzZWxmLl91ID0gdQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRpbWVzdGFtcF9zZWNvbmRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGltZXN0YW1wX3NlY29uZHMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0aW1lc3RhbXBfdGlja3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aW1lc3RhbXBfdGlja3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYudGltZXN0YW1wX3NlY29uZHMgPT0gb3RoZXIudGltZXN0YW1wX3NlY29uZHMgYW5kIFwKKyAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX3RpY2tzID09IG90aGVyLnRpbWVzdGFtcF90aWNrcyBhbmQgXAorICAgICAgICAgICAgc2VsZi51ID09IG90aGVyLnUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJQZW5kaW5nVGltZXN0YW1wKHRpbWVzdGFtcF9zZWNvbmRzPXt9LCB0aW1lc3RhbXBfdGlja3M9e30sIHU9e30pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLnRpbWVzdGFtcF9zZWNvbmRzLCBzZWxmLnRpbWVzdGFtcF90aWNrcywgc2VsZi51KQorCisKK2NsYXNzIFBlbmRpbmdUaW1lc3RhbXBGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHNlY29uZHMgPSBieXRlYXJyYXkoWzB4MDAsIDB4MDBdKSArIGJ5dGVhcnJheShkYXRhLnJlYWQoNikpCisgICAgICAgIHRpY2tzID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgdGltZXN0YW1wX3NlY29uZHMgPSBzdHJ1Y3QudW5wYWNrKCI+USIsIGJ5dGVzKHNlY29uZHMpKVswXQorICAgICAgICB0aW1lc3RhbXBfdGlja3MgPSAodGlja3MgPj4gMSkKKyAgICAgICAgdSA9IHRpY2tzICYgMHgwMQorICAgICAgICByZXR1cm4gUGVuZGluZ1RpbWVzdGFtcCh0aW1lc3RhbXBfc2Vjb25kcywgdGltZXN0YW1wX3RpY2tzLCB1KQorCisKK2NsYXNzIEFjdGl2ZU9wZXJhdGlvbmFsRGF0YXNldDoKKyAgICAjIFRPRE86IE5vdCBpbXBsZW1lbnRlZCB5ZXQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcHJpbnQoIkFjdGl2ZU9wZXJhdGlvbmFsRGF0YXNldCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpCisKKworY2xhc3MgQWN0aXZlT3BlcmF0aW9uYWxEYXRhc2V0RmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gQWN0aXZlT3BlcmF0aW9uYWxEYXRhc2V0KCkKKworCitjbGFzcyBQZW5kaW5nT3BlcmF0aW9uYWxEYXRhc2V0OgorICAgICMgVE9ETzogTm90IGltcGxlbWVudGVkIHlldAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwcmludCgiUGVuZGluZ09wZXJhdGlvbmFsRGF0YXNldCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpCisKKworY2xhc3MgUGVuZGluZ09wZXJhdGlvbmFsRGF0YXNldEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcmV0dXJuIFBlbmRpbmdPcGVyYXRpb25hbERhdGFzZXQoKQorCisKK2NsYXNzIFRocmVhZERpc2NvdmVyeToKKyAgICAjIFRPRE86IE5vdCBpbXBsZW1lbnRlZCB5ZXQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcHJpbnQoIlRocmVhZERpc2NvdmVyeSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpCisKKworY2xhc3MgVGhyZWFkRGlzY292ZXJ5RmFjdG9yeToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByZXR1cm4gVGhyZWFkRGlzY292ZXJ5KCkKKworCitjbGFzcyBNbGVDb21tYW5kKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX3R5cGUsIHRsdnMpOgorICAgICAgICBzZWxmLl90eXBlID0gX3R5cGUKKyAgICAgICAgc2VsZi5fdGx2cyA9IHRsdnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRsdnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHRsdnNfc3RyID0gIiwgIi5qb2luKFsie30iLmZvcm1hdCh0bHYpIGZvciB0bHYgaW4gc2VsZi50bHZzXSkKKyAgICAgICAgcmV0dXJuICJNbGVDb21tYW5kKHR5cGU9e30sIHRsdnM9W3t9XSkiLmZvcm1hdChzZWxmLnR5cGUubmFtZSwgdGx2c19zdHIpCisKKworY2xhc3MgTWxlQ29tbWFuZEZhY3Rvcnk6CisKKyAgICBfTUFSS0VSX0VYVEVOREVEX0xFTkdUSCA9IDB4ZmYKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0bHZzX2ZhY3Rvcmllcyk6CisgICAgICAgIHNlbGYuX3RsdnNfZmFjdG9yaWVzID0gdGx2c19mYWN0b3JpZXMKKworICAgIGRlZiBfZ2V0X2xlbmd0aChzZWxmLCBkYXRhKToKKyAgICAgICAgbGVuZ3RoID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICBpZiBsZW5ndGggPT0gc2VsZi5fTUFSS0VSX0VYVEVOREVEX0xFTkdUSDoKKyAgICAgICAgICAgIGxlbmd0aCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIHJldHVybiBsZW5ndGgKKworICAgIGRlZiBfZ2V0X3Rsdl9mYWN0b3J5KHNlbGYsIF90eXBlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RsdnNfZmFjdG9yaWVzW190eXBlXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigiQ291bGQgbm90IGZpbmQgVExWIGZhY3RvcnkuIFVuc3VwcG9ydGVkIFRMViB0eXBlOiB7fSIuZm9ybWF0KF90eXBlKSkKKworICAgIGRlZiBfcGFyc2VfdGx2KHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIF90eXBlID0gVGx2VHlwZShvcmQoZGF0YS5yZWFkKDEpKSkKKyAgICAgICAgbGVuZ3RoID0gc2VsZi5fZ2V0X2xlbmd0aChkYXRhKQorICAgICAgICB2YWx1ZSA9IGRhdGEucmVhZChsZW5ndGgpCisKKyAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2dldF90bHZfZmFjdG9yeShfdHlwZSkKKworICAgICAgICByZXR1cm4gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKHZhbHVlKSwgbWVzc2FnZV9pbmZvKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGNtZF90eXBlID0gQ29tbWFuZFR5cGUob3JkKGRhdGEucmVhZCgxKSkpCisgICAgICAgIHRsdnMgPSBbXQorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICB0bHYgPSBzZWxmLl9wYXJzZV90bHYoZGF0YSwgbWVzc2FnZV9pbmZvKQorICAgICAgICAgICAgdGx2cy5hcHBlbmQodGx2KQorCisgICAgICAgIHJldHVybiBNbGVDb21tYW5kKGNtZF90eXBlLCB0bHZzKQorCisKK2NsYXNzIE1sZU1lc3NhZ2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kKToKKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IGNvbW1hbmQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29tbWFuZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1sZU1lc3NhZ2UoY29tbWFuZD17fSkiLmZvcm1hdChzZWxmLmNvbW1hbmQpCisKKworY2xhc3MgTWxlTWVzc2FnZVNlY3VyZWQoTWxlTWVzc2FnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXV4X3NlY19oZHIsIGNvbW1hbmQsIG1pYyk6CisgICAgICAgIHN1cGVyKE1sZU1lc3NhZ2VTZWN1cmVkLCBzZWxmKS5fX2luaXRfXyhjb21tYW5kKQorICAgICAgICBzZWxmLl9hdXhfc2VjX2hkciA9IGF1eF9zZWNfaGRyCisgICAgICAgIHNlbGYuX21pYyA9IG1pYworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGF1eF9zZWNfaGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYXV4X3NlY19oZHIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtaWMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9taWMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNbGVNZXNzYWdlU2VjdXJlZChhdXhfc2VjX2hkcj17fSwgY29tbWFuZD17fSwgbWljPVwie31cIikiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuYXV4X3NlY19oZHIsIHNlbGYuY29tbWFuZCwgaGV4bGlmeShzZWxmLm1pYykpCisKKworY2xhc3MgTWxlTWVzc2FnZUZhY3Rvcnk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXV4X3NlY19oZHJfZmFjdG9yeSwgbWxlX2NvbW1hbmRfZmFjdG9yeSwgY3J5cHRvX2VuZ2luZSk6CisgICAgICAgIHNlbGYuX2F1eF9zZWNfaGRyX2ZhY3RvcnkgPSBhdXhfc2VjX2hkcl9mYWN0b3J5CisgICAgICAgIHNlbGYuX21sZV9jb21tYW5kX2ZhY3RvcnkgPSBtbGVfY29tbWFuZF9mYWN0b3J5CisgICAgICAgIHNlbGYuX2NyeXB0b19lbmdpbmUgPSBjcnlwdG9fZW5naW5lCisKKyAgICBkZWYgX2NyZWF0ZV9tbGVfc2VjdXJlZF9tZXNzYWdlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGF1eF9zZWNfaGRyID0gc2VsZi5fYXV4X3NlY19oZHJfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgZW5jX2RhdGFfbGVuZ3RoID0gbGVuKGRhdGEuZ2V0dmFsdWUoKSkKKworICAgICAgICBlbmNfZGF0YSA9IGJ5dGVhcnJheShkYXRhLnJlYWQoZW5jX2RhdGFfbGVuZ3RoIC0gZGF0YS50ZWxsKCkgLSBzZWxmLl9jcnlwdG9fZW5naW5lLm1pY19sZW5ndGgpKQorICAgICAgICBtaWMgPSBieXRlYXJyYXkoZGF0YS5yZWFkKCkpCisKKyAgICAgICAgZGVjX2RhdGEgPSBzZWxmLl9jcnlwdG9fZW5naW5lLmRlY3J5cHQoZW5jX2RhdGEsIG1pYywgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIGNvbW1hbmQgPSBzZWxmLl9tbGVfY29tbWFuZF9mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGVjX2RhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIE1sZU1lc3NhZ2VTZWN1cmVkKGF1eF9zZWNfaGRyLCBjb21tYW5kLCBtaWMpCisKKyAgICBkZWYgX2NyZWF0ZV9tbGVfbWVzc2FnZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBjb21tYW5kID0gc2VsZi5fbWxlX2NvbW1hbmRfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIE1sZU1lc3NhZ2UoY29tbWFuZCkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzZWN1cml0eV9pbmRpY2F0b3IgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGlmIHNlY3VyaXR5X2luZGljYXRvciA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZV9tbGVfc2VjdXJlZF9tZXNzYWdlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICBlbGlmIHNlY3VyaXR5X2luZGljYXRvciA9PSAyNTU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX21sZV9tZXNzYWdlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIE1MRSBtZXNzYWdlLiBVbmtub3duIHNlY3VyaXR5IGluZGljYXRvciB2YWx1ZToge30iLmZvcm1hdChzZWN1cml0eV9pbmRpY2F0b3IpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXRfY3J5cHRvLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9uZXRfY3J5cHRvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OWEyMzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldF9jcnlwdG8ucHkKQEAgLTAsMCArMSwzNTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaG1hYworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBzdHJ1Y3QKKworZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorCitmcm9tIENyeXB0by5DaXBoZXIgaW1wb3J0IEFFUworCisKK2NsYXNzIENyeXB0b0VuZ2luZToKKworICAgICIiIiBDbGFzcyByZXNwb25zaWJsZSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvZiBkYXRhLiAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcnlwdG9fbWF0ZXJpYWxfY3JlYXRvcik6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgbWFzdGVyX2tleSAoYnl0ZWFycmF5KQorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jcnlwdG9fbWF0ZXJpYWxfY3JlYXRvciA9IGNyeXB0b19tYXRlcmlhbF9jcmVhdG9yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWljX2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NyeXB0b19tYXRlcmlhbF9jcmVhdG9yLm1pY19sZW5ndGgKKworICAgIGRlZiBlbmNyeXB0KHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgICIiIiBFbmNyeXB0IG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGEgKGJ5dGVhcnJheSkKKyAgICAgICAgICAgIG1lc3NhZ2VfaW5mbyAoTWVzc2FnZUluZm8pCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIHR1cGxlOiBFbmNyeXB0ZWQgbWVzc2FnZSAoYnl0ZWFycmF5KSwgTUlDIChieXRlYXJyYXkpCisKKyAgICAgICAgIiIiCisgICAgICAgIGtleSwgbm9uY2UsIGF1dGhfZGF0YSA9IHNlbGYuX2NyeXB0b19tYXRlcmlhbF9jcmVhdG9yLmNyZWF0ZV9rZXlfYW5kX25vbmNlX2FuZF9hdXRoZW50aWNhdGVkX2RhdGEobWVzc2FnZV9pbmZvKQorCisgICAgICAgIGNpcGhlciA9IEFFUy5uZXcoa2V5LCBBRVMuTU9ERV9DQ00sIG5vbmNlLCBtYWNfbGVuPXNlbGYubWljX2xlbmd0aCkKKyAgICAgICAgY2lwaGVyLnVwZGF0ZShhdXRoX2RhdGEpCisKKyAgICAgICAgcmV0dXJuIGNpcGhlci5lbmNyeXB0X2FuZF9kaWdlc3QoYnl0ZXMoZGF0YSkpCisKKyAgICBkZWYgZGVjcnlwdChzZWxmLCBlbmNfZGF0YSwgbWljLCBtZXNzYWdlX2luZm8pOgorICAgICAgICAiIiIgRGVjcnlwdCBNTEUgbWVzc2FnZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZW5jX2RhdGEgKGJ5dGVhcnJheSkKKyAgICAgICAgICAgIG1pYyAoYnl0ZWFycmF5KQorICAgICAgICAgICAgbWVzc2FnZV9pbmZvIChNZXNzYWdlSW5mbykKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYnl0ZWFycmF5OiBEZWNyeXB0ZWQgbWVzc2FnZS4KKworICAgICAgICAiIiIKKyAgICAgICAga2V5LCBub25jZSwgYXV0aF9kYXRhID0gc2VsZi5fY3J5cHRvX21hdGVyaWFsX2NyZWF0b3IuY3JlYXRlX2tleV9hbmRfbm9uY2VfYW5kX2F1dGhlbnRpY2F0ZWRfZGF0YShtZXNzYWdlX2luZm8pCisKKyAgICAgICAgY2lwaGVyID0gQUVTLm5ldyhrZXksIEFFUy5NT0RFX0NDTSwgbm9uY2UsIG1hY19sZW49c2VsZi5taWNfbGVuZ3RoKQorICAgICAgICBjaXBoZXIudXBkYXRlKGF1dGhfZGF0YSkKKworICAgICAgICBkZWNfZGF0YSA9IGNpcGhlci5kZWNyeXB0X2FuZF92ZXJpZnkoYnl0ZXMoZW5jX2RhdGEpLCBieXRlcyhtaWMpKQorICAgICAgICByZXR1cm4gYnl0ZWFycmF5KGRlY19kYXRhKQorCisKK2NsYXNzIENyeXB0b01hdGVyaWFsQ3JlYXRvcihvYmplY3QpOgorCisgICAgX3NhbHQgPSBiJ1RocmVhZCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXJfa2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtYXN0ZXJfa2V5IChieXRlYXJyYXkpCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubWFzdGVyX2tleSA9IG1hc3Rlcl9rZXkKKworICAgIGRlZiBfZ2VuZXJhdGVfa2V5cyhzZWxmLCBzZXF1ZW5jZV9jb3VudGVyKToKKyAgICAgICAgIiIiIEdlbmVyYXRlIE1MRSBhbmQgTUFDIGtleXMuCisKKyAgICAgICAgUmVhZCBtb3JlOiA3LjEuNC4gS2V5IEdlbmVyYXRpb24gLSBUaHJlYWQgdjEuMSBTcGVjaWZpY2F0aW9uIEZpbmFsCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNlcXVlbmNlX2NvdW50ZXIgKGludCkKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgdHVwbGU6IE1MRSBhbmQgTUFDIGFzIGJ5dGVzCisKKyAgICAgICAgIiIiCisgICAgICAgIGsgPSBzZWxmLm1hc3Rlcl9rZXkKKyAgICAgICAgcyA9IHN0cnVjdC5wYWNrKCI+TCIsIHNlcXVlbmNlX2NvdW50ZXIpICsgc2VsZi5fc2FsdAorICAgICAgICBkID0gaG1hYy5uZXcoaywgcywgZGlnZXN0bW9kPWhhc2hsaWIuc2hhMjU2KS5kaWdlc3QoKQorCisgICAgICAgIG1sZSA9IGRbOjE2XQorICAgICAgICBtYWMgPSBkWzE2Ol0KKyAgICAgICAgcmV0dXJuIG1sZSwgbWFjCisKKyAgICBkZWYgY3JlYXRlX2tleV9hbmRfbm9uY2VfYW5kX2F1dGhlbnRpY2F0ZWRfZGF0YShzZWxmLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWljX2xlbmd0aChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIE1hY0NyeXB0b01hdGVyaWFsQ3JlYXRvcihDcnlwdG9NYXRlcmlhbENyZWF0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcl9rZXkpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1hc3Rlcl9rZXkgKGJ5dGVhcnJheSkKKworICAgICAgICAiIiIKKyAgICAgICAgc3VwZXIoTWFjQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yLCBzZWxmKS5fX2luaXRfXyhtYXN0ZXJfa2V5KQorCisgICAgZGVmIF9jcmVhdGVfbm9uY2Uoc2VsZiwgZXVpNjQsIGZyYW1lX2NvdW50ZXIsIHNlY3VyaXR5X2xldmVsKToKKyAgICAgICAgIiIiIENyZWF0ZSBDQ00gTm9uY2UgcmVxdWlyZWQgYnkgQUVTLTEyOCBDQ00gZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCisKKyAgICAgICAgUmVhZCBtb3JlOiA3LjYuMy4yIENDTSBOb25jZSAtIFN0ZCA4MDIuMTUuNC0yMDA2CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGV1aTY0IChieXRlcykKKyAgICAgICAgICAgIGZyYW1lX2NvdW50ZXIgKGludCkKKyAgICAgICAgICAgIHNlY3VyaXR5X2xldmVsIChpbnQpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJ5dGVzOiBjcmVhdGVkIE5vbmNlCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBieXRlcyhldWk2NCArIHN0cnVjdC5wYWNrKCI+TEIiLCBmcmFtZV9jb3VudGVyLCBzZWN1cml0eV9sZXZlbCkpCisKKyAgICBkZWYgX2NyZWF0ZV9hdXRoZW50aWNhdGVkX2RhdGEoc2VsZiwgbWhyLCBhdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyLCBub25wYXlsb2FkX2ZpZWxkcyk6CisgICAgICAgICIiIiBDcmVhdGUgQXV0aGVudGljYXRlZCBEYXRhCisKKyAgICAgICAgUmVhZCBtb3JlOiA3LjYuMy4zIENDTSBwcmVyZXF1aXNpdGVzIC0gU3RkIDgwMi4xNS40LTIwMDYKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbWhyIChieXRlcykKKyAgICAgICAgICAgIGF1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXIgKGJ5dGVzKQorICAgICAgICAgICAgbm9ucGF5bG9hZF9maWVsZHMgKGJ5dGVzKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBieXRlczogQXV0aGVudGljYXRlZCBEYXRhCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBieXRlcyhtaHIgKyBhdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyICsgbm9ucGF5bG9hZF9maWVsZHMpCisKKyAgICBkZWYgY3JlYXRlX2tleV9hbmRfbm9uY2VfYW5kX2F1dGhlbnRpY2F0ZWRfZGF0YShzZWxmLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBfLCBtYWNfa2V5ID0gc2VsZi5fZ2VuZXJhdGVfa2V5cyhtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIuc2VxdWVuY2VfY291bnRlcikKKworICAgICAgICBub25jZSA9IHNlbGYuX2NyZWF0ZV9ub25jZShtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIuZnJhbWVfY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLnNlY3VyaXR5X2xldmVsKQorCisgICAgICAgIGF1dGhfZGF0YSA9IHNlbGYuX2NyZWF0ZV9hdXRoZW50aWNhdGVkX2RhdGEobWVzc2FnZV9pbmZvLm1ocl9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHJfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLm5vbnBheWxvYWRfZmllbGRzKQorCisgICAgICAgIHJldHVybiBtYWNfa2V5LCBub25jZSwgYXV0aF9kYXRhCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWljX2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKworCitjbGFzcyBNbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IoQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXJfa2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtYXN0ZXJfa2V5IChieXRlYXJyYXkpCisKKyAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKE1sZUNyeXB0b01hdGVyaWFsQ3JlYXRvciwgc2VsZikuX19pbml0X18obWFzdGVyX2tleSkKKworICAgIGRlZiBfY3JlYXRlX25vbmNlKHNlbGYsIHNvdXJjZV9ldWk2NCwgZnJhbWVfY291bnRlciwgc2VjdXJpdHlfbGV2ZWwpOgorICAgICAgICAiIiIgQ3JlYXRlIENDTSBOb25jZSByZXF1aXJlZCBieSBBRVMtMTI4IENDTSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4KKworICAgICAgICBSZWFkIG1vcmU6IDcuNi4zLjIgQ0NNIE5vbmNlIC0gU3RkIDgwMi4xNS40LTIwMDYKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZXVpNjQgKGJ5dGVhcnJheSkKKyAgICAgICAgICAgIGZyYW1lX2NvdW50ZXIgKGludCkKKyAgICAgICAgICAgIHNlY3VyaXR5X2xldmVsIChpbnQpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJ5dGVzOiBjcmVhdGVkIE5vbmNlCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBieXRlcyhzb3VyY2VfZXVpNjRbOjhdICsgc3RydWN0LnBhY2soIj5MQiIsIGZyYW1lX2NvdW50ZXIsIHNlY3VyaXR5X2xldmVsKSkKKworICAgIGRlZiBfY3JlYXRlX2F1dGhlbnRpY2F0ZWRfZGF0YShzZWxmLCBzb3VyY2VfYWRkcmVzcywgZGVzdGluYXRpb25fYWRkcmVzcywgYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlcik6CisgICAgICAgICIiIiBDcmVhdGUgQXV0aGVudGljYXRlZCBEYXRhCisKKyAgICAgICAgUmVhZCBtb3JlOiA0LjggLSBUaHJlYWQgdjEuMCBTcGVjaWZpY2F0aW9uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzIChpcF9hZGRyZXNzKQorICAgICAgICAgICAgZGVzdGluYXRpb25fYWRkcmVzcyAoaXBfYWRkcmVzcykKKyAgICAgICAgICAgIGF1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXIgKGJ5dGVhcnJheSkKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgYnl0ZXM6IEF1dGhlbnRpY2F0ZWQgRGF0YQorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYnl0ZXMoc291cmNlX2FkZHJlc3MucGFja2VkICsgZGVzdGluYXRpb25fYWRkcmVzcy5wYWNrZWQgKyBhdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyKQorCisgICAgZGVmIGNyZWF0ZV9rZXlfYW5kX25vbmNlX2FuZF9hdXRoZW50aWNhdGVkX2RhdGEoc2VsZiwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgbWxlX2tleSwgXyA9IHNlbGYuX2dlbmVyYXRlX2tleXMobWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLnNlcXVlbmNlX2NvdW50ZXIpCisKKyAgICAgICAgbm9uY2UgPSBzZWxmLl9jcmVhdGVfbm9uY2UobWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcy5tYWNfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyLmZyYW1lX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkci5zZWN1cml0eV9sZXZlbCkKKworICAgICAgICBhdXRoX2RhdGEgPSBzZWxmLl9jcmVhdGVfYXV0aGVudGljYXRlZF9kYXRhKG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHJfYnl0ZXMpCisKKyAgICAgICAgcmV0dXJuIG1sZV9rZXksIG5vbmNlLCBhdXRoX2RhdGEKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtaWNfbGVuZ3RoKHNlbGYpOgorICAgICAgICByZXR1cm4gNAorCisKK2NsYXNzIEF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtleV9pZF9tb2RlLCBzZWN1cml0eV9sZXZlbCwgZnJhbWVfY291bnRlciwga2V5X2lkLCBiaWdfZW5kaWFuPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGtleV9pZF9tb2RlIChpbnQpCisgICAgICAgICAgICBzZWN1cml0eV9sZXZlbCAoaW50KQorICAgICAgICAgICAgZnJhbWVfY291bnRlciAoaW50KQorICAgICAgICAgICAga2V5X2lkIChieXRlYXJyYXkpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9rZXlfaWRfbW9kZSA9IGtleV9pZF9tb2RlCisgICAgICAgIHNlbGYuX3NlY3VyaXR5X2xldmVsID0gc2VjdXJpdHlfbGV2ZWwKKyAgICAgICAgc2VsZi5fZnJhbWVfY291bnRlciA9IGZyYW1lX2NvdW50ZXIKKyAgICAgICAgc2VsZi5fa2V5X2lkID0ga2V5X2lkCisgICAgICAgIHNlbGYuX2JpZ19lbmRpYW4gPSBiaWdfZW5kaWFuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2VxdWVuY2VfY291bnRlcihzZWxmKToKKyAgICAgICAgIiIiIENvbXB1dGUgb3IgZXh0cmFjdCBzZXF1ZW5jZSBjb3VudGVyIGJhc2VkIG9uIGN1cnJlbnRseSBzZXQgS2V5IEluZGV4IE1vZGUuICIiIgorCisgICAgICAgIGlmIHNlbGYua2V5X2lkX21vZGUgPT0gMToKKyAgICAgICAgICAgICMgVHJ5IHRvIGd1ZXNzIHZhbGlkIEtleSBTZXF1ZW5jZSBDb3VudGVyIGJhc2VkIG9uIEtleSBJbmRleC4gVGhpcyBvbmUgc2hvdWxkIHdvcmsgZm9yIG5vdy4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLmtleV9pbmRleCAtIDEKKyAgICAgICAgZWxpZiBzZWxmLmtleV9pZF9tb2RlID09IDI6CisgICAgICAgICAgICAjIEluIHRoaXMgbW9kZSBzZXF1ZW5jZSBjb3VudGVyIGlzIHN0b3JlZCBvbiB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiBLZXkgSUQuCisgICAgICAgICAgICBrZXlfc291cmNlID0gc2VsZi5rZXlfaWRbOjRdCisgICAgICAgICAgICBmb3JtYXQgPSAiPkkiIGlmIHNlbGYuX2JpZ19lbmRpYW4gZWxzZSAiPEkiCisgICAgICAgIGVsaWYgc2VsZi5rZXlfaWRfbW9kZSA9PSAzOgorICAgICAgICAgICAga2V5X3NvdXJjZSA9IHNlbGYua2V5X2lkWzo4XQorICAgICAgICAgICAgZm9ybWF0ID0gIj5RIiBpZiBzZWxmLl9iaWdfZW5kaWFuIGVsc2UgIjxRIgorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBLZXkgSW5kZXggTW9kZToge30iLmZvcm1hdChzZWxmLmtleV9pZF9tb2RlKSkKKworICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjayhmb3JtYXQsIGtleV9zb3VyY2UpWzBdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYga2V5X2luZGV4KHNlbGYpOgorICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygiPkIiLCBzZWxmLmtleV9pZFstMTpdKVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtleV9pZF9tb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fa2V5X2lkX21vZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZWN1cml0eV9sZXZlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlY3VyaXR5X2xldmVsCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnJhbWVfY291bnRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYW1lX2NvdW50ZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBrZXlfaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9rZXlfaWQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJBdXhpbGlhcnlTZWN1cml0eUhlYWRlcihrZXlfaWRfbW9kZT17fSwgc2VjdXJpdHlfbGV2ZWw9e30sIGZyYW1lX2NvdW50ZXI9e30sIGtleV9pZD17fSkiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYua2V5X2lkX21vZGUsIHNlbGYuc2VjdXJpdHlfbGV2ZWwsIHNlbGYuZnJhbWVfY291bnRlciwgaGV4bGlmeShzZWxmLmtleV9pZCkpCisKKworY2xhc3MgQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXJGYWN0b3J5OgorCisgICAgX1NFQ1VSSVRZX0NPTlRST0xfTEVOR1RIID0gMQorICAgIF9GUkFNRV9DT1VOVEVSX0xFTkdUSCA9IDQKKworICAgIF9LRVlfSURfTEVOR1RIX0tFWV9JRF8wID0gMAorICAgIF9LRVlfSURfTEVOR1RIX0tFWV9JRF8xID0gMQorICAgIF9LRVlfSURfTEVOR1RIX0tFWV9JRF8yID0gNQorICAgIF9LRVlfSURfTEVOR1RIX0tFWV9JRF8zID0gOQorCisgICAgX2tleV9pZF9sZW5ndGhzID0geworICAgICAgICAwOiBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMCwKKyAgICAgICAgMTogX0tFWV9JRF9MRU5HVEhfS0VZX0lEXzEsCisgICAgICAgIDI6IF9LRVlfSURfTEVOR1RIX0tFWV9JRF8yLAorICAgICAgICAzOiBfS0VZX0lEX0xFTkdUSF9LRVlfSURfMworICAgIH0KKworICAgIGRlZiBfcGFyc2Vfc2VjdXJpdHlfY29udHJvbChzZWxmLCBzZWN1cml0eV9jb250cm9sX2J5dGUpOgorICAgICAgICBzZWN1cml0eV9sZXZlbCA9IChzZWN1cml0eV9jb250cm9sX2J5dGUgJiAweDA3KQorICAgICAgICBrZXlfaWRfbW9kZSA9IChzZWN1cml0eV9jb250cm9sX2J5dGUgPj4gMykgJiAweDAzCisKKyAgICAgICAgcmV0dXJuIHNlY3VyaXR5X2xldmVsLCBrZXlfaWRfbW9kZQorCisgICAgZGVmIF9wYXJzZV9mcmFtZV9jb3VudGVyKHNlbGYsIGZyYW1lX2NvdW50ZXJfYnl0ZXMpOgorICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygiPEkiLCBmcmFtZV9jb3VudGVyX2J5dGVzKVswXQorCisgICAgZGVmIF9rZXlfaWRfbGVuZ3RoKHNlbGYsIGtleV9pZF9tb2RlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2tleV9pZF9sZW5ndGhzW2tleV9pZF9tb2RlXQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHNlY3VyaXR5X2NvbnRyb2xfYnl0ZXMgPSBieXRlYXJyYXkoZGF0YS5yZWFkKHNlbGYuX1NFQ1VSSVRZX0NPTlRST0xfTEVOR1RIKSkKKyAgICAgICAgZnJhbWVfY291bnRlcl9ieXRlcyA9IGJ5dGVhcnJheShkYXRhLnJlYWQoc2VsZi5fRlJBTUVfQ09VTlRFUl9MRU5HVEgpKQorCisgICAgICAgIHNlY3VyaXR5X2xldmVsLCBrZXlfaWRfbW9kZSA9IHNlbGYuX3BhcnNlX3NlY3VyaXR5X2NvbnRyb2woc2VjdXJpdHlfY29udHJvbF9ieXRlc1swXSkKKyAgICAgICAgZnJhbWVfY291bnRlciA9IHNlbGYuX3BhcnNlX2ZyYW1lX2NvdW50ZXIoZnJhbWVfY291bnRlcl9ieXRlcykKKworICAgICAgICBrZXlfaWRfbGVuZ3RoID0gc2VsZi5fa2V5X2lkX2xlbmd0aChrZXlfaWRfbW9kZSkKKyAgICAgICAga2V5X2lkX2J5dGVzID0gYnl0ZWFycmF5KGRhdGEucmVhZChrZXlfaWRfbGVuZ3RoKSkKKworICAgICAgICBhdXhfc2VjX2hkciA9IEF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKGtleV9pZF9tb2RlLCBzZWN1cml0eV9sZXZlbCwgZnJhbWVfY291bnRlciwga2V5X2lkX2J5dGVzKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcl9ieXRlcyA9IHNlY3VyaXR5X2NvbnRyb2xfYnl0ZXMgKyBmcmFtZV9jb3VudGVyX2J5dGVzICsga2V5X2lkX2J5dGVzCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkciA9IGF1eF9zZWNfaGRyCisKKyAgICAgICAgcmV0dXJuIGF1eF9zZWNfaGRyCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldHdvcmtfZGF0YS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbmV0d29ya19kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDc3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldHdvcmtfZGF0YS5weQpAQCAtMCwwICsxLDY1MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IG1hdGgKK2ltcG9ydCBzdHJ1Y3QKKworZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQorZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisKK2ltcG9ydCBjb21tb24KKworCitjbGFzcyBUbHZUeXBlKEludEVudW0pOgorICAgIEhBU19ST1VURSA9IDAKKyAgICBQUkVGSVggPSAxCisgICAgQk9SREVSX1JPVVRFUiA9IDIKKyAgICBMT1dQQU5fSUQgPSAzCisgICAgQ09NTUlTU0lPTklORyA9IDQKKyAgICBTRVJWSUNFID0gNQorICAgIFNFUlZFUiA9IDYKKworCitjbGFzcyBNZXNoY29wVGx2VHlwZShJbnRFbnVtKToKKyAgICBTVEVFUklOR19EQVRBID0gOAorICAgIEJPUkRFUl9BR0VOVF9MT0NBVE9SID0gOQorICAgIENPTU1JU1NJT05FUl9TRVNTSU9OX0lEID0gMTEKKyAgICBDT01NSVNTSU9ORVJfVURQX1BPUlQgPSAxNQorCisKK2NsYXNzIE5ldHdvcmtEYXRhKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhYmxlKToKKyAgICAgICAgc2VsZi5fc3RhYmxlID0gc3RhYmxlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhYmxlCisKKworY2xhc3MgU3ViVGx2c0ZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzZWxmLl9zdWJfdGx2c19mYWN0b3JpZXMgPSBzdWJfdGx2c19mYWN0b3JpZXMKKworICAgIGRlZiBfZ2V0X2ZhY3Rvcnkoc2VsZiwgX3R5cGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3ViX3RsdnNfZmFjdG9yaWVzW190eXBlXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZhY3RvcnkuIEZhY3RvcnkgdHlwZSA9IHt9LiIuZm9ybWF0KF90eXBlKSkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzdWJfdGx2cyA9IFtdCisKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIF90eXBlID0gb3JkKGRhdGEucmVhZCgxKSkKKworICAgICAgICAgICAgbGVuZ3RoID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgICAgIHZhbHVlID0gZGF0YS5yZWFkKGxlbmd0aCkKKworICAgICAgICAgICAgZmFjdG9yeSA9IHNlbGYuX2dldF9mYWN0b3J5KF90eXBlKQorCisgICAgICAgICAgICBtZXNzYWdlX2luZm8ubGVuZ3RoID0gbGVuZ3RoCisgICAgICAgICAgICB0bHYgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8odmFsdWUpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgICAgIHN1Yl90bHZzLmFwcGVuZCh0bHYpCisKKyAgICAgICAgcmV0dXJuIHN1Yl90bHZzCisKKworY2xhc3MgTmV0d29ya0RhdGFTdWJUbHZzRmFjdG9yeShTdWJUbHZzRmFjdG9yeSk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc3ViX3RsdnMgPSBbXQorCisgICAgICAgIHdoaWxlIGRhdGEudGVsbCgpIDwgbGVuKGRhdGEuZ2V0dmFsdWUoKSk6CisgICAgICAgICAgICBkYXRhX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgICAgICBzdGFibGUgPSBkYXRhX2J5dGUgJiAweDAxCisgICAgICAgICAgICBfdHlwZSA9IChkYXRhX2J5dGUgPj4gMSkgJiAweDdmCisKKyAgICAgICAgICAgIGxlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgICAgICB2YWx1ZSA9IGRhdGEucmVhZChsZW5ndGgpCisKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl9nZXRfZmFjdG9yeShfdHlwZSkKKworICAgICAgICAgICAgbWVzc2FnZV9pbmZvLnN0YWJsZSA9IHN0YWJsZQorICAgICAgICAgICAgdGx2ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKHZhbHVlKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICAgICBzdWJfdGx2cy5hcHBlbmQodGx2KQorCisgICAgICAgIHJldHVybiBzdWJfdGx2cworCisKK2NsYXNzIFJvdXRlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYm9yZGVyX3JvdXRlcl8xNiwgcHJmKToKKyAgICAgICAgc2VsZi5fYm9yZGVyX3JvdXRlcl8xNiA9IGJvcmRlcl9yb3V0ZXJfMTYKKyAgICAgICAgc2VsZi5fcHJmID0gcHJmCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYm9yZGVyX3JvdXRlcl8xNihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2JvcmRlcl9yb3V0ZXJfMTYKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcmYKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmJvcmRlcl9yb3V0ZXJfMTYgPT0gb3RoZXIuYm9yZGVyX3JvdXRlcl8xNiBhbmQgc2VsZi5wcmYgPT0gb3RoZXIucHJmCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUm91dGUoYm9yZGVyX3JvdXRlcl8xNj17fSwgcHJmPXt9KSIuZm9ybWF0KHNlbGYuYm9yZGVyX3JvdXRlcl8xNiwgc2VsZi5wcmYpCisKKworY2xhc3MgUm91dGVGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgYm9yZGVyX3JvdXRlcl8xNiA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorCisgICAgICAgIGRhdGFfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHByZiA9IChkYXRhX2J5dGUgPj4gNikgJiAweDAzCisKKyAgICAgICAgcmV0dXJuIFJvdXRlKGJvcmRlcl9yb3V0ZXJfMTYsIHByZikKKworCitjbGFzcyBSb3V0ZXNGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm91dGVfZmFjdG9yeSk6CisgICAgICAgIHNlbGYuX3JvdXRlX2ZhY3RvcnkgPSByb3V0ZV9mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcm91dGVzID0gW10KKworICAgICAgICB3aGlsZSBkYXRhLnRlbGwoKSA8IGxlbihkYXRhLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgcm91dGUgPSBzZWxmLl9yb3V0ZV9mYWN0b3J5LnBhcnNlKGRhdGEsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgcm91dGVzLmFwcGVuZChyb3V0ZSkKKworICAgICAgICByZXR1cm4gcm91dGVzCisKKworY2xhc3MgSGFzUm91dGUoTmV0d29ya0RhdGEpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlcywgc3RhYmxlKToKKyAgICAgICAgc3VwZXIoSGFzUm91dGUsIHNlbGYpLl9faW5pdF9fKHN0YWJsZSkKKyAgICAgICAgc2VsZi5fcm91dGVzID0gcm91dGVzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm91dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcm91dGVzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5yb3V0ZXMgPT0gb3RoZXIucm91dGVzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJvdXRlc19zdHIgPSAiLCAiLmpvaW4oWyJ7fSIuZm9ybWF0KHJvdXRlKSBmb3Igcm91dGUgaW4gc2VsZi5yb3V0ZXNdKQorICAgICAgICByZXR1cm4gIkhhc1JvdXRlKHN0YWJsZT17fSwgcm91dGVzPVt7fV0pIi5mb3JtYXQoc2VsZi5zdGFibGUsIHJvdXRlc19zdHIpCisKKworY2xhc3MgSGFzUm91dGVGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm91dGVzX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl9yb3V0ZXNfZmFjdG9yeSA9IHJvdXRlc19mYWN0b3J5CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgcm91dGVzID0gc2VsZi5fcm91dGVzX2ZhY3RvcnkucGFyc2UoZGF0YSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgIHJldHVybiBIYXNSb3V0ZShyb3V0ZXMsIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgUHJlZml4KE5ldHdvcmtEYXRhKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5faWQsIHByZWZpeF9sZW5ndGgsIHByZWZpeCwgc3ViX3RsdnMsIHN0YWJsZSk6CisgICAgICAgIHN1cGVyKFByZWZpeCwgc2VsZikuX19pbml0X18oc3RhYmxlKQorICAgICAgICBzZWxmLl9kb21haW5faWQgPSBkb21haW5faWQKKyAgICAgICAgc2VsZi5fcHJlZml4X2xlbmd0aCA9IHByZWZpeF9sZW5ndGgKKyAgICAgICAgc2VsZi5fcHJlZml4ID0gcHJlZml4CisgICAgICAgIHNlbGYuX3N1Yl90bHZzID0gc3ViX3RsdnMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkb21haW5faWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW5faWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXhfbGVuZ3RoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJlZml4X2xlbmd0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ByZWZpeAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1Yl90bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3ViX3RsdnMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLmRvbWFpbl9pZCA9PSBvdGhlci5kb21haW5faWQgYW5kIFwKKyAgICAgICAgICAgIHNlbGYucHJlZml4X2xlbmd0aCA9PSBvdGhlci5wcmVmaXhfbGVuZ3RoIGFuZCBcCisgICAgICAgICAgICBzZWxmLnByZWZpeCA9PSBvdGhlci5wcmVmaXggYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc3ViX3RsdnMgPT0gb3RoZXIuc3ViX3RsdnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc3ViX3RsdnNfc3RyID0gIiwgIi5qb2luKFsie30iLmZvcm1hdCh0bHYpIGZvciB0bHYgaW4gc2VsZi5zdWJfdGx2c10pCisgICAgICAgIHJldHVybiAiUHJlZml4KHN0YWJsZT17fSwgZG9tYWluX2lkPXt9LCBwcmVmaXhfbGVuZ3RoPXt9LCBwcmVmaXg9e30sIHN1Yl90bHZzPVt7fV0pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLnN0YWJsZSwgc2VsZi5kb21haW5faWQsIHNlbGYucHJlZml4X2xlbmd0aCwgaGV4bGlmeShzZWxmLnByZWZpeCksIHN1Yl90bHZzX3N0cikKKworCitjbGFzcyBQcmVmaXhTdWJUbHZzRmFjdG9yeShOZXR3b3JrRGF0YVN1YlRsdnNGYWN0b3J5KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzdXBlcihQcmVmaXhTdWJUbHZzRmFjdG9yeSwgc2VsZikuX19pbml0X18oc3ViX3RsdnNfZmFjdG9yaWVzKQorCisKK2NsYXNzIFByZWZpeEZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fc3ViX3RsdnNfZmFjdG9yeSA9IHN1Yl90bHZzX2ZhY3RvcnkKKworICAgIGRlZiBfYml0c190b19ieXRlcyhzZWxmLCBiaXRzKToKKyAgICAgICAgcmV0dXJuIGludChtYXRoLmNlaWwoYml0cyAvIDgpKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGRvbWFpbl9pZCA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgcHJlZml4ID0gYnl0ZWFycmF5KGRhdGEucmVhZChzZWxmLl9iaXRzX3RvX2J5dGVzKHByZWZpeF9sZW5ndGgpKSkKKworICAgICAgICBzdWJfdGx2cyA9IHNlbGYuX3N1Yl90bHZzX2ZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhLnJlYWQoKSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICByZXR1cm4gUHJlZml4KGRvbWFpbl9pZCwgcHJlZml4X2xlbmd0aCwgcHJlZml4LCBzdWJfdGx2cywgbWVzc2FnZV9pbmZvLnN0YWJsZSkKKworCitjbGFzcyBCb3JkZXJSb3V0ZXIoTmV0d29ya0RhdGEpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJvcmRlcl9yb3V0ZXJfMTYsIHByZiwgcCwgcywgZCwgYywgciwgbywgbiwgc3RhYmxlKToKKyAgICAgICAgc3VwZXIoQm9yZGVyUm91dGVyLCBzZWxmKS5fX2luaXRfXyhzdGFibGUpCisgICAgICAgIHNlbGYuX2JvcmRlcl9yb3V0ZXJfMTYgPSBib3JkZXJfcm91dGVyXzE2CisgICAgICAgIHNlbGYuX3ByZiA9IHByZgorICAgICAgICBzZWxmLl9wID0gcAorICAgICAgICBzZWxmLl9zID0gcworICAgICAgICBzZWxmLl9kID0gZAorICAgICAgICBzZWxmLl9jID0gYworICAgICAgICBzZWxmLl9yID0gcgorICAgICAgICBzZWxmLl9vID0gbworICAgICAgICBzZWxmLl9uID0gbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJvcmRlcl9yb3V0ZXJfMTYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ib3JkZXJfcm91dGVyXzE2CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJmKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJmCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3AKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX24KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiAgc2VsZi5ib3JkZXJfcm91dGVyXzE2ID09IG90aGVyLmJvcmRlcl9yb3V0ZXJfMTYgYW5kIFwKKyAgICAgICAgICAgIHNlbGYucHJmID09IG90aGVyLnByZiBhbmQgXAorICAgICAgICAgICAgc2VsZi5wID09IG90aGVyLnAgYW5kIFwKKyAgICAgICAgICAgIHNlbGYucyA9PSBvdGhlci5zIGFuZCBcCisgICAgICAgICAgICBzZWxmLmQgPT0gb3RoZXIuZCBhbmQgXAorICAgICAgICAgICAgc2VsZi5jID09IG90aGVyLmMgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuciA9PSBvdGhlci5yIGFuZCBcCisgICAgICAgICAgICBzZWxmLm8gPT0gb3RoZXIubyBhbmQgXAorICAgICAgICAgICAgc2VsZi5uID09IG90aGVyLm4KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJCb3JkZXJSb3V0ZXIoc3RhYmxlPXt9LCBib3JkZXJfcm91dGVyXzE2PXt9LCBwcmY9e30sIHA9e30sIHM9e30sIGQ9e30sIGM9e30sIHI9e30sIG89e30sIG49e30pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLnN0YWJsZSwgc2VsZi5ib3JkZXJfcm91dGVyXzE2LCBzZWxmLnByZiwgc2VsZi5wLCBzZWxmLnMsIHNlbGYuZCwgc2VsZi5jLCBzZWxmLnIsIHNlbGYubywgc2VsZi5uKQorCisKK2NsYXNzIEJvcmRlclJvdXRlckZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBib3JkZXJfcm91dGVyXzE2ID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisKKyAgICAgICAgZGF0YV9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgbyA9IChkYXRhX2J5dGUgJiAweDAxKQorICAgICAgICByID0gKGRhdGFfYnl0ZSA+PiAxKSAmIDB4MDEKKyAgICAgICAgYyA9IChkYXRhX2J5dGUgPj4gMikgJiAweDAxCisgICAgICAgIGQgPSAoZGF0YV9ieXRlID4+IDMpICYgMHgwMQorICAgICAgICBzID0gKGRhdGFfYnl0ZSA+PiA0KSAmIDB4MDEKKyAgICAgICAgcCA9IChkYXRhX2J5dGUgPj4gNSkgJiAweDAxCisgICAgICAgIHByZiA9IChkYXRhX2J5dGUgPj4gNikgJiAweDAzCisKKyAgICAgICAgZGF0YV9ieXRlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgbiA9IChkYXRhX2J5dGUgPj4gNykgJiAweDAxCisKKyAgICAgICAgcmV0dXJuIEJvcmRlclJvdXRlcihib3JkZXJfcm91dGVyXzE2LCBwcmYsIHAsIHMsIGQsIGMsIHIsIG8sIG4sIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgTG93cGFuSWQoTmV0d29ya0RhdGEpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGMsIGNpZCwgY29udGV4dF9sZW5ndGgsIHN0YWJsZSk6CisgICAgICAgIHN1cGVyKExvd3BhbklkLCBzZWxmKS5fX2luaXRfXyhzdGFibGUpCisgICAgICAgIHNlbGYuX2MgPSBjCisgICAgICAgIHNlbGYuX2NpZCA9IGNpZAorICAgICAgICBzZWxmLl9jb250ZXh0X2xlbmd0aCA9IGNvbnRleHRfbGVuZ3RoCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jaWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb250ZXh0X2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRleHRfbGVuZ3RoCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gIHNlbGYuYyA9PSBvdGhlci5jIGFuZCBcCisgICAgICAgICAgICBzZWxmLmNpZCA9PSBvdGhlci5jaWQgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuY29udGV4dF9sZW5ndGggPT0gb3RoZXIuY29udGV4dF9sZW5ndGgKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMb3dwYW5JZChzdGFibGU9e30sIGM9e30sIGNpZD17fSwgY29udGV4dF9sZW5ndGg9e30pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLnN0YWJsZSwgc2VsZi5jLCBzZWxmLmNpZCwgc2VsZi5jb250ZXh0X2xlbmd0aCkKKworCitjbGFzcyBMb3dwYW5JZEZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBkYXRhX2J5dGUgPSBvcmQoZGF0YS5yZWFkKDEpKQorCisgICAgICAgIGNpZCA9IChkYXRhX2J5dGUgJiAweDBmKQorICAgICAgICBjID0gKGRhdGFfYnl0ZSA+PiA0KSAmIDB4MDEKKworICAgICAgICBjb250ZXh0X2xlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgcmV0dXJuIExvd3BhbklkKGMsIGNpZCwgY29udGV4dF9sZW5ndGgsIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgQ29tbWlzc2lvbmluZ0RhdGEoTmV0d29ya0RhdGEpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1Yl90bHZzLCBzdGFibGUpOgorICAgICAgICBzdXBlcihDb21taXNzaW9uaW5nRGF0YSwgc2VsZikuX19pbml0X18oc3RhYmxlKQorICAgICAgICBzZWxmLl9zdWJfdGx2cyA9IHN1Yl90bHZzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3ViX3RsdnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdWJfdGx2cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuICBzZWxmLnN1Yl90bHZzID09IG90aGVyLnN1Yl90bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHN1Yl90bHZzX3N0ciA9ICIsICIuZm9ybWF0KFsie30iLmZvcm1hdCh0bHYpIGZvciB0bHYgaW4gc2VsZi5fc3ViX3RsdnNdKQorICAgICAgICByZXR1cm4gIkNvbW1pc3Npb25pbmdEYXRhKHN0YWJsZT17fSwgc3ViX3RsdnM9W3t9XSkiLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuX3N0YWJsZSwgc3ViX3RsdnNfc3RyKQorCisKK2NsYXNzIENvbW1pc3Npb25pbmdEYXRhU3ViVGx2c0ZhY3RvcnkoU3ViVGx2c0ZhY3RvcnkpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1Yl90bHZzX2ZhY3Rvcmllcyk6CisgICAgICAgIHN1cGVyKENvbW1pc3Npb25pbmdEYXRhU3ViVGx2c0ZhY3RvcnksIHNlbGYpLl9faW5pdF9fKHN1Yl90bHZzX2ZhY3RvcmllcykKKworCitjbGFzcyBDb21taXNzaW9uaW5nRGF0YUZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fc3ViX3RsdnNfZmFjdG9yeSA9IHN1Yl90bHZzX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzdWJfdGx2cyA9IHNlbGYuX3N1Yl90bHZzX2ZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhLnJlYWQoKSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICByZXR1cm4gQ29tbWlzc2lvbmluZ0RhdGEoc3ViX3RsdnMsIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgU3RlZXJpbmdEYXRhKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmxvb21fZmlsdGVyKToKKyAgICAgICAgc2VsZi5fYmxvb21fZmlsdGVyID0gYmxvb21fZmlsdGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYmxvb21fZmlsdGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYmxvb21fZmlsdGVyCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKworICAgICAgICByZXR1cm4gc2VsZi5fYmxvb21fZmlsdGVyID09IG90aGVyLl9ibG9vbV9maWx0ZXIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJTdGVlcmluZ0RhdGEoYmxvb21fZmlsdGVyPXt9KSIuZm9ybWF0KGhleGxpZnkoc2VsZi5fYmxvb21fZmlsdGVyKSkKKworCitjbGFzcyBTdGVlcmluZ0RhdGFGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGJsb29tX2ZpbHRlciA9IGRhdGEucmVhZChtZXNzYWdlX2luZm8ubGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RlZXJpbmdEYXRhKGJsb29tX2ZpbHRlcikKKworCitjbGFzcyBCb3JkZXJBZ2VudExvY2F0b3Iob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fdWRwX3BvcnQgPSBhZGRyZXNzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdWRwX3BvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91ZHBfcG9ydAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VkcF9wb3J0ID09IG90aGVyLl91ZHBfcG9ydAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkJvcmRlckFnZW50TG9jYXRvcihybG9jMTY9e30pIi5mb3JtYXQoaGV4KHNlbGYuX3VkcF9wb3J0KSkKKworCitjbGFzcyBCb3JkZXJBZ2VudExvY2F0b3JGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGJvcmRlcl9hZ2VudF9sb2NhdG9yID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBCb3JkZXJBZ2VudExvY2F0b3IoYm9yZGVyX2FnZW50X2xvY2F0b3IpCisKKworY2xhc3MgQ29tbWlzc2lvbmVyU2Vzc2lvbklkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWlzc2lvbmVyX3Nlc3Npb25faWQpOgorICAgICAgICBzZWxmLl91ZHBfcG9ydCA9IGNvbW1pc3Npb25lcl9zZXNzaW9uX2lkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdWRwX3BvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91ZHBfcG9ydAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VkcF9wb3J0ID09IG90aGVyLl91ZHBfcG9ydAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNvbW1pc3Npb25lclNlc3Npb25JZChpZD17fSkiLmZvcm1hdChoZXgoc2VsZi5fdWRwX3BvcnQpKQorCisKK2NsYXNzIENvbW1pc3Npb25lclNlc3Npb25JZEZhY3Rvcnk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgc2Vzc2lvbl9pZCA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICByZXR1cm4gQ29tbWlzc2lvbmVyU2Vzc2lvbklkKHNlc3Npb25faWQpCisKKworY2xhc3MgQ29tbWlzc2lvbmVyVWRwUG9ydChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVkcF9wb3J0KToKKyAgICAgICAgc2VsZi5fdWRwX3BvcnQgPSB1ZHBfcG9ydAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHVkcF9wb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdWRwX3BvcnQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLl91ZHBfcG9ydCA9PSBvdGhlci5fdWRwX3BvcnQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21taXNzaW9uZXJVZHBQb3J0KHVkcF9wb3J0PXt9KSIuZm9ybWF0KHNlbGYuX3VkcF9wb3J0KQorCisKK2NsYXNzIENvbW1pc3Npb25lclVkcFBvcnRGYWN0b3J5OgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHVkcF9wb3J0ID0gc3RydWN0LnVucGFjaygiPkgiLCBkYXRhLnJlYWQoMikpWzBdCisgICAgICAgIHJldHVybiBDb21taXNzaW9uZXJVZHBQb3J0KHVkcF9wb3J0KQorCisKK2NsYXNzIFNlcnZpY2UoTmV0d29ya0RhdGEpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHQsIF9pZCwgZW50ZXJwcmlzZV9udW1iZXIsIHNlcnZpY2VfZGF0YV9sZW5ndGgsIHNlcnZpY2VfZGF0YSwgc3ViX3RsdnMsIHN0YWJsZSk6CisgICAgICAgIHN1cGVyKFNlcnZpY2UsIHNlbGYpLl9faW5pdF9fKHN0YWJsZSkKKyAgICAgICAgc2VsZi5fdCA9IHQKKyAgICAgICAgc2VsZi5faWQgPSBfaWQKKyAgICAgICAgc2VsZi5fZW50ZXJwcmlzZV9udW1iZXIgPSBlbnRlcnByaXNlX251bWJlcgorICAgICAgICBzZWxmLl9zZXJ2aWNlX2RhdGFfbGVuZ3RoID0gc2VydmljZV9kYXRhX2xlbmd0aAorICAgICAgICBzZWxmLl9zZXJ2aWNlX2RhdGEgPSBzZXJ2aWNlX2RhdGEKKyAgICAgICAgc2VsZi5fc3ViX3RsdnMgPSBzdWJfdGx2cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVudGVycHJpc2VfbnVtYmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW50ZXJwcmlzZV9udW1iZXIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZXJ2aWNlX2RhdGFfbGVuZ3RoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2VydmljZV9kYXRhX2xlbmd0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlcnZpY2VfZGF0YShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlcnZpY2VfZGF0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1Yl90bHZzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3ViX3RsdnMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiAgc2VsZi50ID09IG90aGVyLnQgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuaWQgPT0gb3RoZXIuaWQgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuZW50ZXJwcmlzZV9udW1iZXIgPT0gb3RoZXIuZW50ZXJwcmlzZV9udW1iZXIgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc2VydmljZV9kYXRhX2xlbmd0aCA9PSBvdGhlci5zZXJ2aWNlX2RhdGFfbGVuZ3RoIGFuZCBcCisgICAgICAgICAgICBzZWxmLnNlcnZpY2VfZGF0YSA9PSBvdGhlci5zZXJ2aWNlX2RhdGEgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc3ViX3RsdnMgPT0gb3RoZXIuc3ViX3RsdnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc3ViX3RsdnNfc3RyID0gIiwgIi5mb3JtYXQoWyJ7fSIuZm9ybWF0KHRsdikgZm9yIHRsdiBpbiBzZWxmLnN1Yl90bHZzXSkKKyAgICAgICAgcmV0dXJuICJMb3dwYW5JZChzdGFibGU9e30sIHQ9e30sIGlkPXt9LCBlbnRlcnByaXNlX251bWJlcj17fSwgc2VydmljZV9kYXRhX2xlbmd0aD17fSwgc2VydmljZV9kYXRhPXt9LCBzdWJfdGx2cz1be31dKSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5zdGFibGUsIHNlbGYudCwgc2VsZi5pZCwgc2VsZi5lbnRlcnByaXNlX251bWJlciwgc2VsZi5zZXJ2aWNlX2RhdGFfbGVuZ3RoLCBzZWxmLnNlcnZpY2VfZGF0YSwgc3ViX3RsdnNfc3RyKQorCisKK2NsYXNzIFNlcnZpY2VTdWJUbHZzRmFjdG9yeShOZXR3b3JrRGF0YVN1YlRsdnNGYWN0b3J5KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzdXBlcihTZXJ2aWNlU3ViVGx2c0ZhY3RvcnksIHNlbGYpLl9faW5pdF9fKHN1Yl90bHZzX2ZhY3RvcmllcykKKworCitjbGFzcyBTZXJ2aWNlRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1Yl90bHZzX2ZhY3RvcnkpOgorICAgICAgICBzZWxmLl9zdWJfdGx2c19mYWN0b3J5ID0gc3ViX3RsdnNfZmFjdG9yeQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGRhdGFfYnl0ZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHQgPSAoZGF0YV9ieXRlID4+IDcpICYgMHgwMQorICAgICAgICBfaWQgPSAoZGF0YV9ieXRlICYgMHgwZikKKworICAgICAgICBlbnRlcnByaXNlX251bWJlciA9IHN0cnVjdC51bnBhY2soIj5MIiwgZGF0YS5yZWFkKDQpKVswXQorICAgICAgICBzZXJ2aWNlX2RhdGFfbGVuZ3RoID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgc2VydmljZV9kYXRhID0gZGF0YS5yZWFkKHNlcnZpY2VfZGF0YV9sZW5ndGgpCisKKyAgICAgICAgc3ViX3RsdnMgPSBzZWxmLl9zdWJfdGx2c19mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YS5yZWFkKCkpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgcmV0dXJuIFNlcnZpY2UodCwgX2lkLCBlbnRlcnByaXNlX251bWJlciwgc2VydmljZV9kYXRhX2xlbmd0aCwgc2VydmljZV9kYXRhLCBzdWJfdGx2cywgbWVzc2FnZV9pbmZvLnN0YWJsZSkKKworCitjbGFzcyBTZXJ2ZXIoTmV0d29ya0RhdGEpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl8xNiwgc2VydmVyX2RhdGEsIHN0YWJsZSk6CisgICAgICAgIHN1cGVyKFNlcnZlciwgc2VsZikuX19pbml0X18oc3RhYmxlKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfMTYgPSBzZXJ2ZXJfMTYKKyAgICAgICAgc2VsZi5fc2VydmVyX2RhdGEgPSBzZXJ2ZXJfZGF0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlcnZlcl8xNihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlcnZlcl8xNgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlcnZlcl9kYXRhKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2VydmVyX2RhdGEKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorCisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlcl8xNiA9PSBvdGhlci5zZXJ2ZXJfMTYgYW5kIFwKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX2RhdGEgPT0gb3RoZXIuc2VydmVyX2RhdGEKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJMb3dwYW5JZChzdGFibGU9e30sIHNlcnZlcl8xNj17fSwgc2VydmVyX2RhdGE9Yid7fScpIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLnN0YWJsZSwgc2VsZi5zZXJ2ZXJfMTYsIGhleGxpZnkoc2VsZi5zZXJ2ZXJfZGF0YSkpCisKKworY2xhc3MgU2VydmVyRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHNlcnZlcl8xNiA9IHN0cnVjdC51bnBhY2soIj5IIiwgZGF0YS5yZWFkKDIpKVswXQorICAgICAgICBzZXJ2ZXJfZGF0YSA9IGJ5dGVhcnJheShkYXRhLnJlYWQoKSkKKworICAgICAgICByZXR1cm4gU2VydmVyKHNlcnZlcl8xNiwgc2VydmVyX2RhdGEsIG1lc3NhZ2VfaW5mby5zdGFibGUpCisKKworY2xhc3MgTmV0d29ya0RhdGFUbHZzRmFjdG9yeShOZXR3b3JrRGF0YVN1YlRsdnNGYWN0b3J5KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWJfdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzdXBlcihOZXR3b3JrRGF0YVRsdnNGYWN0b3J5LCBzZWxmKS5fX2luaXRfXyhzdWJfdGx2c19mYWN0b3JpZXMpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldHdvcmtfbGF5ZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25ldHdvcmtfbGF5ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYjYzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbmV0d29ya19sYXllci5weQpAQCAtMCwwICsxLDMyMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IHN0cnVjdAorCitmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5Citmcm9tIGVudW0gaW1wb3J0IEludEVudW0KKworaW1wb3J0IGNvbW1vbgorCisKK2NsYXNzIFRsdlR5cGUoSW50RW51bSk6CisgICAgVEFSR0VUX0VJRCA9IDAKKyAgICBNQUNfRVhURU5ERURfQUREUkVTUyA9IDEKKyAgICBSTE9DMTYgPSAyCisgICAgTUxfRUlEID0gMworICAgIFNUQVRVUyA9IDQKKyAgICBUSU1FX1NJTkNFX0xBU1RfVFJBTlNBQ1RJT04gPSA2CisgICAgUk9VVEVSX01BU0sgPSA3CisgICAgTkRfT1BUSU9OID0gOAorICAgIE5EX0RBVEEgPSA5CisgICAgVEhSRUFEX05FVFdPUktfREFUQSA9IDEwCisgICAgTUxFX1JPVVRJTkcgPSAxMQorCisKK2NsYXNzIFN0YXR1c1ZhbHVlcyhJbnRFbnVtKToKKyAgICBTVUNDRVNTID0gMAorICAgIE5PX0FERFJFU1NfQVZBSUxBQkxFID0gMQorICAgIFRPT19GRVdfUk9VVEVSUyA9IDIKKyAgICBIQVZFX0NISUxEX0lEX1JFUVVFU1QgPSAzCisgICAgUEFSRU5UX1BBUlRJVElPTl9DSEFOR0UgPSA0CisKKworY2xhc3MgVGFyZ2V0RWlkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWlkKToKKyAgICAgICAgc2VsZi5fZWlkID0gZWlkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZWlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZWlkCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuZWlkID09IG90aGVyLmVpZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlRhcmdldEVpZChlaWQ9e30pIi5mb3JtYXQoaGV4bGlmeShzZWxmLmVpZCkpCisKKworY2xhc3MgVGFyZ2V0RWlkRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIGVpZCA9IGJ5dGVhcnJheShkYXRhLnJlYWQoMTYpKQorCisgICAgICAgIHJldHVybiBUYXJnZXRFaWQoZWlkKQorCisKK2NsYXNzIE1hY0V4dGVuZGVkQWRkcmVzcyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hY19hZGRyZXNzKToKKyAgICAgICAgc2VsZi5fbWFjX2FkZHJlc3MgPSBtYWNfYWRkcmVzcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1hY19hZGRyZXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFjX2FkZHJlc3MKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5tYWNfYWRkcmVzcyA9PSBvdGhlci5tYWNfYWRkcmVzcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1hY0V4dGVuZGVkQWRkcmVzcyhtYWNfYWRkcmVzcz17fSkiLmZvcm1hdChoZXhsaWZ5KHNlbGYubWFjX2FkZHJlc3MpKQorCisKK2NsYXNzIE1hY0V4dGVuZGVkQWRkcmVzc0ZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBtYWNfYWRkcmVzcyA9IGJ5dGVhcnJheShkYXRhLnJlYWQoOCkpCisKKyAgICAgICAgcmV0dXJuIE1hY0V4dGVuZGVkQWRkcmVzcyhtYWNfYWRkcmVzcykKKworCitjbGFzcyBSbG9jMTYob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBybG9jMTYpOgorICAgICAgICBzZWxmLl9ybG9jMTYgPSBybG9jMTYKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBybG9jMTYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ybG9jMTYKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5ybG9jMTYgPT0gb3RoZXIucmxvYzE2CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUmxvYzE2KHJsb2MxNj17fSkiLmZvcm1hdChoZXgoc2VsZi5ybG9jMTYpKQorCisKK2NsYXNzIFJsb2MxNkZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBybG9jMTYgPSBzdHJ1Y3QudW5wYWNrKCI+SCIsIGRhdGEucmVhZCgyKSlbMF0KKworICAgICAgICByZXR1cm4gUmxvYzE2KHJsb2MxNikKKworCitjbGFzcyBNbEVpZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1sX2VpZCk6CisgICAgICAgIHNlbGYuX21sX2VpZCA9IG1sX2VpZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1sX2VpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21sX2VpZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLm1sX2VpZCA9PSBvdGhlci5tbF9laWQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJNbEVpZChtbF9laWQ9e30pIi5mb3JtYXQoaGV4bGlmeShzZWxmLm1sX2VpZCkpCisKKworY2xhc3MgTWxFaWRGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgbWxfZWlkID0gYnl0ZWFycmF5KGRhdGEucmVhZCg4KSkKKworICAgICAgICByZXR1cm4gTWxFaWQobWxfZWlkKQorCisKK2NsYXNzIFN0YXR1cyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuX3N0YXR1cyA9IHN0YXR1cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0YXR1cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXR1cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGNvbW1vbi5leHBlY3RfdGhlX3NhbWVfY2xhc3Moc2VsZiwgb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLnN0YXR1cyA9PSBvdGhlci5zdGF0dXMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJTdGF0dXMoc3RhdHVzPXt9KSIuZm9ybWF0KHNlbGYuc3RhdHVzKQorCisKK2NsYXNzIFN0YXR1c0ZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBzdGF0dXMgPSBTdGF0dXNWYWx1ZXMob3JkKGRhdGEucmVhZCgxKSkpCisKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhzdGF0dXMpCisKKworY2xhc3MgVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcyk6CisgICAgICAgIHNlbGYuX3NlY29uZHMgPSBzZWNvbmRzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2Vjb25kcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlY29uZHMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5zZWNvbmRzID09IG90aGVyLnNlY29uZHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUaW1lU2luY2VMYXN0VHJhbnNhY3Rpb24oc2Vjb25kcz17fSkiLmZvcm1hdChzZWxmLnNlY29uZHMpCisKKworY2xhc3MgVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIHNlY29uZHMgPSBzdHJ1Y3QudW5wYWNrKCI+TCIsIGRhdGEucmVhZCg0KSlbMF0KKworICAgICAgICByZXR1cm4gVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uKHNlY29uZHMpCisKKworY2xhc3MgUm91dGVyTWFzayhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlkX3NlcXVlbmNlLCByb3V0ZXJfaWRfbWFzayk6CisgICAgICAgIHNlbGYuX2lkX3NlcXVlbmNlID0gaWRfc2VxdWVuY2UKKyAgICAgICAgc2VsZi5fcm91dGVyX2lkX21hc2sgPSByb3V0ZXJfaWRfbWFzaworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlkX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWRfc2VxdWVuY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb3V0ZXJfaWRfbWFzayhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JvdXRlcl9pZF9tYXNrCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuaWRfc2VxdWVuY2UgPT0gb3RoZXIuaWRfc2VxdWVuY2UgYW5kIHNlbGYucm91dGVyX2lkX21hc2sgPT0gb3RoZXIucm91dGVyX2lkX21hc2sKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJSb3V0ZXJNYXNrKGlkX3NlcXVlbmNlPXt9LCByb3V0ZXJfaWRfbWFzaz17fSkiLmZvcm1hdChzZWxmLmlkX3NlcXVlbmNlLCBoZXgoc2VsZi5yb3V0ZXJfaWRfbWFzaykpCisKKworY2xhc3MgUm91dGVyTWFza0ZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICBpZF9zZXF1ZW5jZSA9IG9yZChkYXRhLnJlYWQoMSkpCisgICAgICAgIHJvdXRlcl9pZF9tYXNrID0gc3RydWN0LnVucGFjaygiPlEiLCBkYXRhLnJlYWQoOCkpWzBdCisKKyAgICAgICAgcmV0dXJuIFJvdXRlck1hc2soaWRfc2VxdWVuY2UsIHJvdXRlcl9pZF9tYXNrKQorCisKK2NsYXNzIE5kT3B0aW9uKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBjb21tb24uZXhwZWN0X3RoZV9zYW1lX2NsYXNzKHNlbGYsIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zID09IG90aGVyLm9wdGlvbnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJOZE9wdGlvbihvcHRpb25zPVt7fV0pIi5mb3JtYXQoIiwgIi5qb2luKFtzdHIob3B0KSBmb3Igb3B0IGluIHNlbGYub3B0aW9uc10pKQorCisKK2NsYXNzIE5kT3B0aW9uRmFjdG9yeShvYmplY3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgIG9wdGlvbnMgPSBbb3B0IGZvciBvcHQgaW4gYnl0ZWFycmF5KGRhdGEucmVhZCgpKV0KKyAgICAgICAgcmV0dXJuIE5kT3B0aW9uKG9wdGlvbnMpCisKKworY2xhc3MgTmREYXRhKG9iamVjdCk6CisgICAgIyBUT0RPOiBOb3QgaW1wbGVtZW50ZWQgeWV0CisgICAgcGFzcworCisKK2NsYXNzIE5kRGF0YUZhY3Rvcnkob2JqZWN0KToKKyAgICAjIFRPRE86IE5vdCBpbXBsZW1lbnRlZCB5ZXQKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJUT0RPOiBOb3QgaW1wbGVtZW50ZWQgeWV0IikKKworCitjbGFzcyBUaHJlYWROZXR3b3JrRGF0YShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRsdnMpOgorICAgICAgICBzZWxmLl90bHZzID0gdGx2cworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRsdnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90bHZzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgY29tbW9uLmV4cGVjdF90aGVfc2FtZV9jbGFzcyhzZWxmLCBvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYudGx2cyA9PSBvdGhlci50bHZzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVGhyZWFkTmV0d29ya0RhdGEodGx2cz1be31dKSIuZm9ybWF0KCIsICIuam9pbihbc3RyKHRsdikgZm9yIHRsdiBpbiBzZWxmLnRsdnNdKSkKKworCitjbGFzcyBUaHJlYWROZXR3b3JrRGF0YUZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXR3b3JrX2RhdGFfdGx2c19mYWN0b3J5KToKKyAgICAgICAgc2VsZi5fbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yeSA9IG5ldHdvcmtfZGF0YV90bHZzX2ZhY3RvcnkKKworICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICB0bHZzID0gc2VsZi5fbmV0d29ya19kYXRhX3RsdnNfZmFjdG9yeS5wYXJzZShkYXRhLCBtZXNzYWdlX2luZm8pCisgICAgICAgIHJldHVybiBUaHJlYWROZXR3b3JrRGF0YSh0bHZzKQorCisKK2NsYXNzIE5ldHdvcmtMYXllclRsdnNGYWN0b3J5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGx2c19mYWN0b3JpZXMpOgorICAgICAgICBzZWxmLl90bHZzX2ZhY3RvcmllcyA9IHRsdnNfZmFjdG9yaWVzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgbWVzc2FnZV9pbmZvKToKKyAgICAgICAgdGx2cyA9IFtdCisKKyAgICAgICAgd2hpbGUgZGF0YS50ZWxsKCkgPCBsZW4oZGF0YS5nZXR2YWx1ZSgpKToKKyAgICAgICAgICAgIF90eXBlID0gb3JkKGRhdGEucmVhZCgxKSkKKyAgICAgICAgICAgIGxlbmd0aCA9IG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgICAgIGZhY3RvcnkgPSBzZWxmLl90bHZzX2ZhY3Rvcmllc1tfdHlwZV0KKyAgICAgICAgICAgIHRsdiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhLnJlYWQobGVuZ3RoKSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAgICAgdGx2cy5hcHBlbmQodGx2KQorCisgICAgICAgIHJldHVybiB0bHZzCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25vZGUucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25vZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGI4ZjQwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbm9kZS5weQpAQCAtMCwwICsxLDI0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIGltcG9ydCBub2RlX2NsaQorZWxzZToKKyAgICBpbXBvcnQgbm9kZV9hcGkKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBOb2RlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlaWQpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gbm9kZV9jbGkub3RDbGkobm9kZWlkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pbnRlcmZhY2UgPSBub2RlX2FwaS5vdEFwaShub2RlaWQpCisKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuY2xlYXJfd2hpdGVsaXN0KCkKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuZGlzYWJsZV93aGl0ZWxpc3QoKQorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfdGltZW91dCgxMDApCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgZGVsIHNlbGYuaW50ZXJmYWNlCisKKyAgICBkZWYgc2V0X21vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9tb2RlKG1vZGUpCisKKyAgICBkZWYgZGVidWcoc2VsZiwgbGV2ZWwpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5kZWJ1ZyhsZXZlbCkKKworICAgIGRlZiBpbnRlcmZhY2VfdXAoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmludGVyZmFjZV91cCgpCisKKyAgICBkZWYgaW50ZXJmYWNlX2Rvd24oc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmludGVyZmFjZV9kb3duKCkKKworICAgIGRlZiB0aHJlYWRfc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnRocmVhZF9zdGFydCgpCisKKyAgICBkZWYgdGhyZWFkX3N0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnRocmVhZF9zdG9wKCkKKyAgICAgICAgICAgIAorICAgIGRlZiBjb21taXNzaW9uZXJfc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmNvbW1pc3Npb25lcl9zdGFydCgpCisKKyAgICBkZWYgY29tbWlzc2lvbmVyX2FkZF9qb2luZXIoc2VsZiwgYWRkciwgcHNrKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuY29tbWlzc2lvbmVyX2FkZF9qb2luZXIoYWRkciwgcHNrKQorCisgICAgZGVmIGpvaW5lcl9zdGFydChzZWxmLCBwc2tkPScnLCBwcm92aXNpb25pbmdfdXJsPScnKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuam9pbmVyX3N0YXJ0KHBza2QsIHByb3Zpc2lvbmluZ191cmwpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmludGVyZmFjZV91cCgpCisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnRocmVhZF9zdGFydCgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UudGhyZWFkX3N0b3AoKQorICAgICAgICBzZWxmLmludGVyZmFjZS5pbnRlcmZhY2VfZG93bigpCisKKyAgICBkZWYgY2xlYXJfd2hpdGVsaXN0KHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5jbGVhcl93aGl0ZWxpc3QoKQorCisgICAgZGVmIGVuYWJsZV93aGl0ZWxpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmVuYWJsZV93aGl0ZWxpc3QoKQorCisgICAgZGVmIGRpc2FibGVfd2hpdGVsaXN0KHNlbGYpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5kaXNhYmxlX3doaXRlbGlzdCgpCisKKyAgICBkZWYgYWRkX3doaXRlbGlzdChzZWxmLCBhZGRyLCByc3NpPU5vbmUpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5hZGRfd2hpdGVsaXN0KGFkZHIsIHJzc2kpCisKKyAgICBkZWYgcmVtb3ZlX3doaXRlbGlzdChzZWxmLCBhZGRyKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UucmVtb3ZlX3doaXRlbGlzdChhZGRyKQorCisgICAgZGVmIGdldF9hZGRyMTYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfYWRkcjE2KCkKKworICAgIGRlZiBnZXRfYWRkcjY0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X2FkZHI2NCgpCisKKyAgICBkZWYgZ2V0X2hhc2htYWNhZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X2hhc2htYWNhZGRyKCkKKworICAgIGRlZiBnZXRfY2hhbm5lbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9jaGFubmVsKCkKKworICAgIGRlZiBzZXRfY2hhbm5lbChzZWxmLCBjaGFubmVsKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X2NoYW5uZWwoY2hhbm5lbCkKKworICAgIGRlZiBnZXRfbWFzdGVya2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X21hc3RlcmtleSgpCisKKyAgICBkZWYgc2V0X21hc3RlcmtleShzZWxmLCBtYXN0ZXJrZXkpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfbWFzdGVya2V5KG1hc3RlcmtleSkKKworICAgIGRlZiBnZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoKQorCisgICAgZGVmIHNldF9rZXlfc2VxdWVuY2VfY291bnRlcihzZWxmLCBrZXlfc2VxdWVuY2VfY291bnRlcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9rZXlfc2VxdWVuY2VfY291bnRlcihrZXlfc2VxdWVuY2VfY291bnRlcikKKworICAgIGRlZiBzZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoc2VsZiwga2V5X3N3aXRjaF9ndWFyZHRpbWUpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfa2V5X3N3aXRjaF9ndWFyZHRpbWUoa2V5X3N3aXRjaF9ndWFyZHRpbWUpCisKKyAgICBkZWYgc2V0X25ldHdvcmtfaWRfdGltZW91dChzZWxmLCBuZXR3b3JrX2lkX3RpbWVvdXQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfbmV0d29ya19pZF90aW1lb3V0KG5ldHdvcmtfaWRfdGltZW91dCkKKworICAgIGRlZiBnZXRfbmV0d29ya19uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X25ldHdvcmtfbmFtZSgpCisKKyAgICBkZWYgc2V0X25ldHdvcmtfbmFtZShzZWxmLCBuZXR3b3JrX25hbWUpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfbmV0d29ya19uYW1lKG5ldHdvcmtfbmFtZSkKKworICAgIGRlZiBnZXRfcGFuaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfcGFuaWQoKQorCisgICAgZGVmIHNldF9wYW5pZChzZWxmLCBwYW5pZCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9wYW5pZChwYW5pZCkKKworICAgIGRlZiBnZXRfcGFydGl0aW9uX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X3BhcnRpdGlvbl9pZCgpCisKKyAgICBkZWYgc2V0X3BhcnRpdGlvbl9pZChzZWxmLCBwYXJ0aXRpb25faWQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfcGFydGl0aW9uX2lkKHBhcnRpdGlvbl9pZCkKKworICAgIGRlZiBzZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKHNlbGYsIHRocmVzaG9sZCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9yb3V0ZXJfdXBncmFkZV90aHJlc2hvbGQodGhyZXNob2xkKQorCisgICAgZGVmIHNldF9yb3V0ZXJfZG93bmdyYWRlX3RocmVzaG9sZChzZWxmLCB0aHJlc2hvbGQpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQodGhyZXNob2xkKQorCisgICAgZGVmIHJlbGVhc2Vfcm91dGVyX2lkKHNlbGYsIHJvdXRlcl9pZCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnJlbGVhc2Vfcm91dGVyX2lkKHJvdXRlcl9pZCkKKworICAgIGRlZiBnZXRfc3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfc3RhdGUoKQorCisgICAgZGVmIHNldF9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9zdGF0ZShzdGF0ZSkKKworICAgIGRlZiBnZXRfdGltZW91dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF90aW1lb3V0KCkKKworICAgIGRlZiBzZXRfdGltZW91dChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X3RpbWVvdXQodGltZW91dCkKKworICAgIGRlZiBzZXRfbWF4X2NoaWxkcmVuKHNlbGYsIG51bWJlcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9tYXhfY2hpbGRyZW4obnVtYmVyKQorCisgICAgZGVmIGdldF93ZWlnaHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5nZXRfd2VpZ2h0KCkKKworICAgIGRlZiBzZXRfd2VpZ2h0KHNlbGYsIHdlaWdodCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF93ZWlnaHQod2VpZ2h0KQorCisgICAgZGVmIGFkZF9pcGFkZHIoc2VsZiwgaXBhZGRyKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuYWRkX2lwYWRkcihpcGFkZHIpCisKKyAgICBkZWYgZ2V0X2FkZHJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UuZ2V0X2FkZHJzKCkKKworICAgIGRlZiBnZXRfY29udGV4dF9yZXVzZV9kZWxheShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJmYWNlLmdldF9jb250ZXh0X3JldXNlX2RlbGF5KCkKKworICAgIGRlZiBzZXRfY29udGV4dF9yZXVzZV9kZWxheShzZWxmLCBkZWxheSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9jb250ZXh0X3JldXNlX2RlbGF5KGRlbGF5KQorCisgICAgZGVmIGFkZF9wcmVmaXgoc2VsZiwgcHJlZml4LCBmbGFncywgcHJmID0gJ21lZCcpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5hZGRfcHJlZml4KHByZWZpeCwgZmxhZ3MsIHByZikKKworICAgIGRlZiByZW1vdmVfcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnJlbW92ZV9wcmVmaXgocHJlZml4KQorCisgICAgZGVmIGFkZF9yb3V0ZShzZWxmLCBwcmVmaXgsIHByZiA9ICdtZWQnKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UuYWRkX3JvdXRlKHByZWZpeCwgcHJmKQorCisgICAgZGVmIHJlbW92ZV9yb3V0ZShzZWxmLCBwcmVmaXgpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5yZW1vdmVfcm91dGUocHJlZml4KQorCisgICAgZGVmIHJlZ2lzdGVyX25ldGRhdGEoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnJlZ2lzdGVyX25ldGRhdGEoKQorCisgICAgZGVmIGVuZXJneV9zY2FuKHNlbGYsIG1hc2ssIGNvdW50LCBwZXJpb2QsIHNjYW5fZHVyYXRpb24sIGlwYWRkcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmVuZXJneV9zY2FuKG1hc2ssIGNvdW50LCBwZXJpb2QsIHNjYW5fZHVyYXRpb24sIGlwYWRkcikKKworICAgIGRlZiBwYW5pZF9xdWVyeShzZWxmLCBwYW5pZCwgbWFzaywgaXBhZGRyKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UucGFuaWRfcXVlcnkocGFuaWQsIG1hc2ssIGlwYWRkcikKKworICAgIGRlZiBzY2FuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2Uuc2NhbigpCisKKyAgICBkZWYgcGluZyhzZWxmLCBpcGFkZHIsIG51bV9yZXNwb25zZXM9MSwgc2l6ZT1Ob25lLCB0aW1lb3V0PTUwMDApOgorICAgICAgICByZXR1cm4gc2VsZi5pbnRlcmZhY2UucGluZyhpcGFkZHIsIG51bV9yZXNwb25zZXMsIHNpemUsIHRpbWVvdXQpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludGVyZmFjZS5yZXNldCgpCisKKyAgICBkZWYgc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKHNlbGYsIGppdHRlcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLnNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcihqaXR0ZXIpCisKKyAgICBkZWYgc2V0X2FjdGl2ZV9kYXRhc2V0KHNlbGYsIHRpbWVzdGFtcCwgcGFuaWQ9Tm9uZSwgY2hhbm5lbD1Ob25lLCBjaGFubmVsX21hc2s9Tm9uZSwgbWFzdGVyX2tleT1Ob25lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X2FjdGl2ZV9kYXRhc2V0KHRpbWVzdGFtcCwgcGFuaWQsIGNoYW5uZWwsIGNoYW5uZWxfbWFzaywgbWFzdGVyX2tleSkKKworICAgIGRlZiBzZXRfcGVuZGluZ19kYXRhc2V0KHNlbGYsIHBlbmRpbmd0aW1lc3RhbXAsIGFjdGl2ZXRpbWVzdGFtcCwgcGFuaWQ9Tm9uZSwgY2hhbm5lbD1Ob25lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2V0X3BlbmRpbmdfZGF0YXNldChwZW5kaW5ndGltZXN0YW1wLCBhY3RpdmV0aW1lc3RhbXAsIHBhbmlkLCBjaGFubmVsKQorCisgICAgZGVmIGFubm91bmNlX2JlZ2luKHNlbGYsIG1hc2ssIGNvdW50LCBwZXJpb2QsIGlwYWRkcik6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlLmFubm91bmNlX2JlZ2luKG1hc2ssIGNvdW50LCBwZXJpb2QsIGlwYWRkcikKKworICAgIGRlZiBzZW5kX21nbXRfYWN0aXZlX3NldChzZWxmLCBhY3RpdmVfdGltZXN0YW1wPU5vbmUsIGNoYW5uZWw9Tm9uZSwgY2hhbm5lbF9tYXNrPU5vbmUsIGV4dGVuZGVkX3BhbmlkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSwgbWVzaF9sb2NhbD1Ob25lLCBuZXR3b3JrX25hbWU9Tm9uZSwgYmluYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLmludGVyZmFjZS5zZW5kX21nbXRfYWN0aXZlX3NldChhY3RpdmVfdGltZXN0YW1wLCBjaGFubmVsLCBjaGFubmVsX21hc2ssIGV4dGVuZGVkX3BhbmlkLCBwYW5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleSwgbWVzaF9sb2NhbCwgbmV0d29ya19uYW1lLCBiaW5hcnkpCisKKyAgICBkZWYgc2VuZF9tZ210X3BlbmRpbmdfc2V0KHNlbGYsIHBlbmRpbmdfdGltZXN0YW1wPU5vbmUsIGFjdGl2ZV90aW1lc3RhbXA9Tm9uZSwgZGVsYXlfdGltZXI9Tm9uZSwgY2hhbm5lbD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9Tm9uZSwgbWFzdGVyX2tleT1Ob25lLCBtZXNoX2xvY2FsPU5vbmUsIG5ldHdvcmtfbmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5pbnRlcmZhY2Uuc2VuZF9tZ210X3BlbmRpbmdfc2V0KHBlbmRpbmdfdGltZXN0YW1wLCBhY3RpdmVfdGltZXN0YW1wLCBkZWxheV90aW1lciwgY2hhbm5lbCwgcGFuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJfa2V5LCBtZXNoX2xvY2FsLCBuZXR3b3JrX25hbWUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L25vZGVfYXBpLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9ub2RlX2FwaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ1OTRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9ub2RlX2FwaS5weQpAQCAtMCwwICsxLDU5MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBjdHlwZXMKKworY2xhc3Mgb3RBcGk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCk6CisgICAgICAgIHNlbGYudmVyYm9zZSA9IGludChmbG9hdChvcy5nZXRlbnYoJ1ZFUkJPU0UnLCAwKSkpCisgICAgICAgIHNlbGYuX19pbml0X2RsbChub2RlaWQpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlRmluYWxpemUoc2VsZi5vdE5vZGUpCisKKyAgICBkZWYgc2V0X21vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldE1vZGUoc2VsZi5vdE5vZGUsIG1vZGUuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0TW9kZSBmYWlsZWQhIikKKworICAgIGRlZiBpbnRlcmZhY2VfdXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZUludGVyZmFjZVVwKHNlbGYub3ROb2RlKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlSW50ZXJmYWNlVXAgZmFpbGVkISIpCisKKyAgICBkZWYgaW50ZXJmYWNlX2Rvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZUludGVyZmFjZURvd24oc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVJbnRlcmZhY2VEb3duIGZhaWxlZCEiKQorCisgICAgZGVmIHRocmVhZF9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlVGhyZWFkU3RhcnQoc2VsZi5vdE5vZGUpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVUaHJlYWRTdGFydCBmYWlsZWQhIikKKworICAgIGRlZiB0aHJlYWRfc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlVGhyZWFkU3RvcChzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVRocmVhZFN0b3AgZmFpbGVkISIpCisgICAgICAgICAgICAKKyAgICBkZWYgY29tbWlzc2lvbmVyX3N0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVDb21taXNzaW9uZXJTdGFydChzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUNvbW1pc3Npb25lclN0YXJ0IGZhaWxlZCEiKQorCisgICAgZGVmIGNvbW1pc3Npb25lcl9hZGRfam9pbmVyKHNlbGYsIGFkZHIsIHBzayk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZUNvbW1pc3Npb25lckpvaW5lckFkZChzZWxmLm90Tm9kZSwgYWRkci5lbmNvZGUoJ3V0Zi04JyksIHBzay5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVDb21taXNzaW9uZXJKb2luZXJBZGQgZmFpbGVkISIpCisKKyAgICBkZWYgam9pbmVyX3N0YXJ0KHNlbGYsIHBza2Q9JycsIHByb3Zpc2lvbmluZ191cmw9JycpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVKb2luZXJTdGFydChzZWxmLm90Tm9kZSwgcHNrZC5lbmNvZGUoJ3V0Zi04JyksIHByb3Zpc2lvbmluZ191cmwuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlSm9pbmVyU3RhcnQgZmFpbGVkISIpCisKKyAgICBkZWYgY2xlYXJfd2hpdGVsaXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVDbGVhcldoaXRlbGlzdChzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUNsZWFyV2hpdGVsaXN0IGZhaWxlZCEiKQorCisgICAgZGVmIGVuYWJsZV93aGl0ZWxpc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZUVuYWJsZVdoaXRlbGlzdChzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUVuYWJsZVdoaXRlbGlzdCBmYWlsZWQhIikKKworICAgIGRlZiBkaXNhYmxlX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlRGlzYWJsZVdoaXRlbGlzdChzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZURpc2FibGVXaGl0ZWxpc3QgZmFpbGVkISIpCisKKyAgICBkZWYgYWRkX3doaXRlbGlzdChzZWxmLCBhZGRyLCByc3NpPU5vbmUpOgorICAgICAgICBpZiByc3NpID09IE5vbmU6CisgICAgICAgICAgICByc3NpID0gMAorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVBZGRXaGl0ZWxpc3Qoc2VsZi5vdE5vZGUsIGFkZHIuZW5jb2RlKCd1dGYtOCcpLCBjdHlwZXMuY19ieXRlKHJzc2kpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlQWRkV2hpdGVsaXN0IGZhaWxlZCEiKQorCisgICAgZGVmIHJlbW92ZV93aGl0ZWxpc3Qoc2VsZiwgYWRkcik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVJlbW92ZVdoaXRlbGlzdChzZWxmLm90Tm9kZSwgYWRkci5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVSZW1vdmVXaGl0ZWxpc3QgZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X2FkZHIxNihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZUdldEFkZHIxNihzZWxmLm90Tm9kZSkKKworICAgIGRlZiBnZXRfYWRkcjY0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlR2V0QWRkcjY0KHNlbGYub3ROb2RlKS5kZWNvZGUoJ3V0Zi04JykKKworICAgIGRlZiBnZXRfaGFzaG1hY2FkZHIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkFwaS5vdE5vZGVHZXRIYXNoTWFjQWRkcmVzcyhzZWxmLm90Tm9kZSkuZGVjb2RlKCd1dGYtOCcpCisKKyAgICBkZWYgZ2V0X2NoYW5uZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkFwaS5vdE5vZGVHZXRDaGFubmVsKHNlbGYub3ROb2RlKQorCisgICAgZGVmIHNldF9jaGFubmVsKHNlbGYsIGNoYW5uZWwpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRDaGFubmVsKHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZShjaGFubmVsKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldENoYW5uZWwgZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X21hc3RlcmtleShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZUdldE1hc3RlcmtleShzZWxmLm90Tm9kZSkuZGVjb2RlKCJ1dGYtOCIpCisKKyAgICBkZWYgc2V0X21hc3RlcmtleShzZWxmLCBtYXN0ZXJrZXkpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRNYXN0ZXJrZXkoc2VsZi5vdE5vZGUsIG1hc3RlcmtleS5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRNYXN0ZXJrZXkgZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlR2V0S2V5U2VxdWVuY2VDb3VudGVyKHNlbGYub3ROb2RlKQorCisgICAgZGVmIHNldF9rZXlfc2VxdWVuY2VfY291bnRlcihzZWxmLCBrZXlfc2VxdWVuY2VfY291bnRlcik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldEtleVNlcXVlbmNlQ291bnRlcihzZWxmLm90Tm9kZSwgY3R5cGVzLmNfdWludChrZXlfc2VxdWVuY2VfY291bnRlcikpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIgZmFpbGVkISIpCisKKyAgICBkZWYgc2V0X2tleV9zd2l0Y2hfZ3VhcmR0aW1lKHNlbGYsIGtleV9zd2l0Y2hfZ3VhcmR0aW1lKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0S2V5U3dpdGNoR3VhcmRUaW1lKHNlbGYub3ROb2RlLCBjdHlwZXMuY191aW50KGtleV9zd2l0Y2hfZ3VhcmR0aW1lKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldEtleVN3aXRjaEd1YXJkVGltZSBmYWlsZWQhIikKKworICAgIGRlZiBzZXRfbmV0d29ya19pZF90aW1lb3V0KHNlbGYsIG5ldHdvcmtfaWRfdGltZW91dCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldE5ldHdvcmtJZFRpbWVvdXQoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VieXRlKG5ldHdvcmtfaWRfdGltZW91dCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXROZXR3b3JrSWRUaW1lb3V0IGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9uZXR3b3JrX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkFwaS5vdE5vZGVHZXROZXR3b3JrTmFtZShzZWxmLm90Tm9kZSkuZGVjb2RlKCJ1dGYtOCIpCisKKyAgICBkZWYgc2V0X25ldHdvcmtfbmFtZShzZWxmLCBuZXR3b3JrX25hbWUpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXROZXR3b3JrTmFtZShzZWxmLm90Tm9kZSwgbmV0d29ya19uYW1lLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldE5ldHdvcmtOYW1lIGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9wYW5pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGludChzZWxmLkFwaS5vdE5vZGVHZXRQYW5JZChzZWxmLm90Tm9kZSkpCisKKyAgICBkZWYgc2V0X3BhbmlkKHNlbGYsIHBhbmlkKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0UGFuSWQoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VzaG9ydChwYW5pZCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRQYW5JZCBmYWlsZWQhIikKKworICAgIGRlZiBnZXRfcGFydGl0aW9uX2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuQXBpLm90Tm9kZUdldFBhcnRpdGlvbklkKHNlbGYub3ROb2RlKSkKKworICAgIGRlZiBzZXRfcGFydGl0aW9uX2lkKHNlbGYsIHBhcnRpdGlvbl9pZCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldFBhcnRpdGlvbklkKHNlbGYub3ROb2RlLCBjdHlwZXMuY191aW50KHBhcnRpdGlvbl9pZCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRQYXJ0aXRpb25JZCBmYWlsZWQhIikKKworICAgIGRlZiBzZXRfcm91dGVyX3VwZ3JhZGVfdGhyZXNob2xkKHNlbGYsIHRocmVzaG9sZCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VieXRlKHRocmVzaG9sZCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkIGZhaWxlZCEiKQorCisgICAgZGVmIHNldF9yb3V0ZXJfZG93bmdyYWRlX3RocmVzaG9sZChzZWxmLCB0aHJlc2hvbGQpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VieXRlKHRocmVzaG9sZCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQgZmFpbGVkISIpCisKKyAgICBkZWYgcmVsZWFzZV9yb3V0ZXJfaWQoc2VsZiwgcm91dGVyX2lkKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlUmVsZWFzZVJvdXRlcklkKHNlbGYub3ROb2RlLCBjdHlwZXMuY191Ynl0ZShyb3V0ZXJfaWQpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlUmVsZWFzZVJvdXRlcklkIGZhaWxlZCEiKQorCisgICAgZGVmIGdldF9zdGF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQXBpLm90Tm9kZUdldFN0YXRlKHNlbGYub3ROb2RlKS5kZWNvZGUoJ3V0Zi04JykKKworICAgIGRlZiBzZXRfc3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRTdGF0ZShzZWxmLm90Tm9kZSwgc3RhdGUuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlU2V0U3RhdGUgZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHJldHVybiBpbnQoc2VsZi5BcGkub3ROb2RlR2V0VGltZW91dChzZWxmLm90Tm9kZSkpCisKKyAgICBkZWYgc2V0X3RpbWVvdXQoc2VsZiwgdGltZW91dCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldFRpbWVvdXQoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VpbnQodGltZW91dCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRUaW1lb3V0IGZhaWxlZCEiKQorCisgICAgZGVmIHNldF9tYXhfY2hpbGRyZW4oc2VsZiwgbnVtYmVyKToKKyAgICAgICAgaWYgc2VsZi5BcGkub3ROb2RlU2V0TWF4Q2hpbGRyZW4oc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VieXRlKG51bWJlcikpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRNYXhDaGlsZHJlbiBmYWlsZWQhIikKKworICAgIGRlZiBnZXRfd2VpZ2h0KHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuQXBpLm90Tm9kZUdldFdlaWdodChzZWxmLm90Tm9kZSkpCisKKyAgICBkZWYgc2V0X3dlaWdodChzZWxmLCB3ZWlnaHQpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRXZWlnaHQoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VieXRlKHdlaWdodCkpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRXZWlnaHQgZmFpbGVkISIpCisKKyAgICBkZWYgYWRkX2lwYWRkcihzZWxmLCBpcGFkZHIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVBZGRJcEFkZHIoc2VsZi5vdE5vZGUsIGlwYWRkci5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVBZGRJcEFkZHIgZmFpbGVkISIpCisKKyAgICBkZWYgZ2V0X2FkZHJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlR2V0QWRkcnMoc2VsZi5vdE5vZGUpLmRlY29kZSgidXRmLTgiKS5zcGxpdCgiXG4iKQorCisgICAgZGVmIGdldF9jb250ZXh0X3JldXNlX2RlbGF5KHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuQXBpLm90Tm9kZUdldENvbnRleHRSZXVzZURlbGF5KHNlbGYub3ROb2RlKSkKKworICAgIGRlZiBzZXRfY29udGV4dF9yZXVzZV9kZWxheShzZWxmLCBkZWxheSk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldENvbnRleHRSZXVzZURlbGF5KHNlbGYub3ROb2RlLCBjdHlwZXMuY191aW50KGRlbGF5KSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldENvbnRleHRSZXVzZURlbGF5IGZhaWxlZCEiKQorCisgICAgZGVmIGFkZF9wcmVmaXgoc2VsZiwgcHJlZml4LCBmbGFncywgcHJmID0gJ21lZCcpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVBZGRQcmVmaXgoc2VsZi5vdE5vZGUsIHByZWZpeC5lbmNvZGUoJ3V0Zi04JyksIGZsYWdzLmVuY29kZSgndXRmLTgnKSwgcHJmLmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZUFkZFByZWZpeCBmYWlsZWQhIikKKworICAgIGRlZiByZW1vdmVfcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVJlbW92ZVByZWZpeChzZWxmLm90Tm9kZSwgcHJlZml4LmVuY29kZSgndXRmLTgnKSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVJlbW92ZVByZWZpeCBmYWlsZWQhIikKKworICAgIGRlZiBhZGRfcm91dGUoc2VsZiwgcHJlZml4LCBwcmYgPSAnbWVkJyk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZUFkZFJvdXRlKHNlbGYub3ROb2RlLCBwcmVmaXguZW5jb2RlKCd1dGYtOCcpLCBwcmYuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlQWRkUm91dGUgZmFpbGVkISIpCisKKyAgICBkZWYgcmVtb3ZlX3JvdXRlKHNlbGYsIHByZWZpeCk6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVJlbW92ZVJvdXRlKHNlbGYub3ROb2RlLCBwcmVmaXguZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlUmVtb3ZlUHJlZml4IGZhaWxlZCEiKQorCisgICAgZGVmIHJlZ2lzdGVyX25ldGRhdGEoc2VsZik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVJlZ2lzdGVyTmV0ZGF0YShzZWxmLm90Tm9kZSkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVJlZ2lzdGVyTmV0ZGF0YSBmYWlsZWQhIikKKworICAgIGRlZiBlbmVyZ3lfc2NhbihzZWxmLCBtYXNrLCBjb3VudCwgcGVyaW9kLCBzY2FuX2R1cmF0aW9uLCBpcGFkZHIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVFbmVyZ3lTY2FuKHNlbGYub3ROb2RlLCBjdHlwZXMuY191aW50KG1hc2spLCBjdHlwZXMuY191Ynl0ZShjb3VudCksIGN0eXBlcy5jX3VzaG9ydChwZXJpb2QpLCBjdHlwZXMuY191c2hvcnQoc2Nhbl9kdXJhdGlvbiksIGlwYWRkci5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVFbmVyZ3lTY2FuIGZhaWxlZCEiKQorCisgICAgZGVmIHBhbmlkX3F1ZXJ5KHNlbGYsIHBhbmlkLCBtYXNrLCBpcGFkZHIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVQYW5JZFF1ZXJ5KHNlbGYub3ROb2RlLCBjdHlwZXMuY191c2hvcnQocGFuaWQpLCBjdHlwZXMuY191aW50KG1hc2spLCBpcGFkZHIuZW5jb2RlKCd1dGYtOCcpKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigib3ROb2RlUGFuSWRRdWVyeSBmYWlsZWQhIikKKworICAgIGRlZiBzY2FuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5BcGkub3ROb2RlU2NhbihzZWxmLm90Tm9kZSkuZGVjb2RlKCJ1dGYtOCIpLnNwbGl0KCJcbiIpCisKKyAgICBkZWYgcGluZyhzZWxmLCBpcGFkZHIsIG51bV9yZXNwb25zZXM9MSwgc2l6ZT1Ob25lLCB0aW1lb3V0PTUwMDApOgorICAgICAgICBpZiBzaXplID09IE5vbmU6CisgICAgICAgICAgICBzaXplID0gMTAwCisgICAgICAgIG51bWJlck9mUmVzcG9uZGVycyA9IHNlbGYuQXBpLm90Tm9kZVBpbmcoc2VsZi5vdE5vZGUsIGlwYWRkci5lbmNvZGUoJ3V0Zi04JyksIGN0eXBlcy5jX3VzaG9ydChzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50KG51bV9yZXNwb25zZXMpLCBjdHlwZXMuY191aW50MTYodGltZW91dCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlc3BvbmRlcnMgPj0gbnVtX3Jlc3BvbnNlcworCisgICAgZGVmIHNldF9yb3V0ZXJfc2VsZWN0aW9uX2ppdHRlcihzZWxmLCBqaXR0ZXIpOgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIoc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VieXRlKGppdHRlcikpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXIgZmFpbGVkISIpCisKKyAgICBkZWYgc2V0X2FjdGl2ZV9kYXRhc2V0KHNlbGYsIHRpbWVzdGFtcCwgcGFuaWQ9Tm9uZSwgY2hhbm5lbD1Ob25lLCBjaGFubmVsX21hc2s9Tm9uZSwgbWFzdGVyX2tleT1Ob25lKToKKyAgICAgICAgaWYgcGFuaWQgPT0gTm9uZToKKyAgICAgICAgICAgIHBhbmlkID0gMAorICAgICAgICBpZiBjaGFubmVsID09IE5vbmU6CisgICAgICAgICAgICBjaGFubmVsID0gMAorICAgICAgICBpZiBjaGFubmVsX21hc2sgPT0gTm9uZToKKyAgICAgICAgICAgIGNoYW5uZWxfbWFzayA9IDAKKyAgICAgICAgaWYgbWFzdGVyX2tleSA9PSBOb25lOgorICAgICAgICAgICAgbWFzdGVyX2tleSA9ICIiCisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNldEFjdGl2ZURhdGFzZXQoCisgICAgICAgICAgICAgICAgc2VsZi5vdE5vZGUsCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nKHRpbWVzdGFtcCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KHBhbmlkKSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQoY2hhbm5lbCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludChjaGFubmVsX21hc2spLAorICAgICAgICAgICAgICAgIG1hc3Rlcl9rZXkuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICApICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZXRBY3RpdmVEYXRhc2V0IGZhaWxlZCEiKQorCisgICAgZGVmIHNldF9wZW5kaW5nX2RhdGFzZXQoc2VsZiwgcGVuZGluZ3RpbWVzdGFtcCwgYWN0aXZldGltZXN0YW1wLCBwYW5pZD1Ob25lLCBjaGFubmVsPU5vbmUpOgorICAgICAgICBpZiBwZW5kaW5ndGltZXN0YW1wID09IE5vbmU6CisgICAgICAgICAgICBwZW5kaW5ndGltZXN0YW1wID0gMAorICAgICAgICBpZiBhY3RpdmV0aW1lc3RhbXAgPT0gTm9uZToKKyAgICAgICAgICAgIGFjdGl2ZXRpbWVzdGFtcCA9IDAKKyAgICAgICAgaWYgcGFuaWQgPT0gTm9uZToKKyAgICAgICAgICAgIHBhbmlkID0gMAorICAgICAgICBpZiBjaGFubmVsID09IE5vbmU6CisgICAgICAgICAgICBjaGFubmVsID0gMAorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZXRQZW5kaW5nRGF0YXNldCgKKyAgICAgICAgICAgICAgICBzZWxmLm90Tm9kZSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcoYWN0aXZldGltZXN0YW1wKSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcocGVuZGluZ3RpbWVzdGFtcCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KHBhbmlkKSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQoY2hhbm5lbCkKKyAgICAgICAgICAgICkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm90Tm9kZVNldFBlbmRpbmdEYXRhc2V0IGZhaWxlZCEiKQorCisgICAgZGVmIGFubm91bmNlX2JlZ2luKHNlbGYsIG1hc2ssIGNvdW50LCBwZXJpb2QsIGlwYWRkcik6CisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZUNvbW1pc3Npb25lckFubm91bmNlQmVnaW4oc2VsZi5vdE5vZGUsIGN0eXBlcy5jX3VpbnQobWFzayksIGN0eXBlcy5jX3VieXRlKGNvdW50KSwgY3R5cGVzLmNfdXNob3J0KHBlcmlvZCksIGlwYWRkci5lbmNvZGUoJ3V0Zi04JykpICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVDb21taXNzaW9uZXJBbm5vdW5jZUJlZ2luIGZhaWxlZCEiKQorCisgICAgZGVmIHNlbmRfbWdtdF9hY3RpdmVfc2V0KHNlbGYsIGFjdGl2ZV90aW1lc3RhbXA9Tm9uZSwgY2hhbm5lbD1Ob25lLCBjaGFubmVsX21hc2s9Tm9uZSwgZXh0ZW5kZWRfcGFuaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWQ9Tm9uZSwgbWFzdGVyX2tleT1Ob25lLCBtZXNoX2xvY2FsPU5vbmUsIG5ldHdvcmtfbmFtZT1Ob25lLCBiaW5hcnk9Tm9uZSk6CisgICAgICAgIGlmIGFjdGl2ZV90aW1lc3RhbXAgPT0gTm9uZToKKyAgICAgICAgICAgIGFjdGl2ZV90aW1lc3RhbXAgPSAwCisgICAgICAgIGlmIHBhbmlkID09IE5vbmU6CisgICAgICAgICAgICBwYW5pZCA9IDAKKyAgICAgICAgaWYgY2hhbm5lbCA9PSBOb25lOgorICAgICAgICAgICAgY2hhbm5lbCA9IDAKKyAgICAgICAgaWYgY2hhbm5lbF9tYXNrID09IE5vbmU6CisgICAgICAgICAgICBjaGFubmVsX21hc2sgPSAwCisgICAgICAgIGlmIGV4dGVuZGVkX3BhbmlkID09IE5vbmU6CisgICAgICAgICAgICBleHRlbmRlZF9wYW5pZCA9ICIiCisgICAgICAgIGlmIG1hc3Rlcl9rZXkgPT0gTm9uZToKKyAgICAgICAgICAgIG1hc3Rlcl9rZXkgPSAiIgorICAgICAgICBpZiBtZXNoX2xvY2FsID09IE5vbmU6CisgICAgICAgICAgICBtZXNoX2xvY2FsID0gIiIKKyAgICAgICAgaWYgbmV0d29ya19uYW1lID09IE5vbmU6CisgICAgICAgICAgICBuZXR3b3JrX25hbWUgPSAiIgorICAgICAgICBpZiBiaW5hcnkgPT0gTm9uZToKKyAgICAgICAgICAgIGJpbmFyeSA9ICIiCisgICAgICAgIGlmIHNlbGYuQXBpLm90Tm9kZVNlbmRBY3RpdmVTZXQoCisgICAgICAgICAgICAgICAgc2VsZi5vdE5vZGUsIAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZyhhY3RpdmVfdGltZXN0YW1wKSwgCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KHBhbmlkKSwgCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0KGNoYW5uZWwpLCAKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50KGNoYW5uZWxfbWFzayksIAorICAgICAgICAgICAgICAgIGV4dGVuZGVkX3BhbmlkLmVuY29kZSgndXRmLTgnKSwgCisgICAgICAgICAgICAgICAgbWFzdGVyX2tleS5lbmNvZGUoJ3V0Zi04JyksIAorICAgICAgICAgICAgICAgIG1lc2hfbG9jYWwuZW5jb2RlKCd1dGYtOCcpLCAKKyAgICAgICAgICAgICAgICBuZXR3b3JrX25hbWUuZW5jb2RlKCd1dGYtOCcpLCAKKyAgICAgICAgICAgICAgICBiaW5hcnkuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICApICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZW5kQWN0aXZlU2V0IGZhaWxlZCEiKQorCisgICAgZGVmIHNlbmRfbWdtdF9wZW5kaW5nX3NldChzZWxmLCBwZW5kaW5nX3RpbWVzdGFtcD1Ob25lLCBhY3RpdmVfdGltZXN0YW1wPU5vbmUsIGRlbGF5X3RpbWVyPU5vbmUsIGNoYW5uZWw9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSwgbWVzaF9sb2NhbD1Ob25lLCBuZXR3b3JrX25hbWU9Tm9uZSk6CisgICAgICAgIGlmIHBlbmRpbmdfdGltZXN0YW1wID09IE5vbmU6CisgICAgICAgICAgICBwZW5kaW5nX3RpbWVzdGFtcCA9IDAKKyAgICAgICAgaWYgYWN0aXZlX3RpbWVzdGFtcCA9PSBOb25lOgorICAgICAgICAgICAgYWN0aXZlX3RpbWVzdGFtcCA9IDAKKyAgICAgICAgaWYgZGVsYXlfdGltZXIgPT0gTm9uZToKKyAgICAgICAgICAgIGRlbGF5X3RpbWVyID0gMAorICAgICAgICBpZiBwYW5pZCA9PSBOb25lOgorICAgICAgICAgICAgcGFuaWQgPSAwCisgICAgICAgIGlmIGNoYW5uZWwgPT0gTm9uZToKKyAgICAgICAgICAgIGNoYW5uZWwgPSAwCisgICAgICAgIGlmIG1hc3Rlcl9rZXkgPT0gTm9uZToKKyAgICAgICAgICAgIG1hc3Rlcl9rZXkgPSAiIgorICAgICAgICBpZiBtZXNoX2xvY2FsID09IE5vbmU6CisgICAgICAgICAgICBtZXNoX2xvY2FsID0gIiIKKyAgICAgICAgaWYgbmV0d29ya19uYW1lID09IE5vbmU6CisgICAgICAgICAgICBuZXR3b3JrX25hbWUgPSAiIgorICAgICAgICBpZiBzZWxmLkFwaS5vdE5vZGVTZW5kUGVuZGluZ1NldCgKKyAgICAgICAgICAgICAgICBzZWxmLm90Tm9kZSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcoYWN0aXZlX3RpbWVzdGFtcCksCisgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nKHBlbmRpbmdfdGltZXN0YW1wKSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50KGRlbGF5X3RpbWVyKSwKKyAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQocGFuaWQpLAorICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydChjaGFubmVsKSwKKyAgICAgICAgICAgICAgICBtYXN0ZXJfa2V5LmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgICAgICBtZXNoX2xvY2FsLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgICAgICBuZXR3b3JrX25hbWUuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICApICE9IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVTZW5kUGVuZGluZ1NldCBmYWlsZWQhIikKKworICAgIGRlZiBsb2coc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUxvZyhtZXNzYWdlKQorCisgICAgZGVmIF9faW5pdF9kbGwoc2VsZiwgbm9kZWlkKToKKyAgICAgICAgIiIiIEluaXRpYWxpemUgdGhlIEFQSSBmcm9tIGEgV2luZG93cyBETEwuICIiIgorCisgICAgICAgICMgTG9hZCB0aGUgRExMCisgICAgICAgIHNlbGYuQXBpID0gY3R5cGVzLldpbkRMTCgib3Rub2RlYXBpLmRsbCIpCisgICAgICAgIGlmIHNlbGYuQXBpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJGYWlsZWQgdG8gbG9hZCBvdG5vZGVhcGkuZGxsISIpCisgICAgICAgIAorICAgICAgICAjIERlZmluZSB0aGUgZnVuY3Rpb25zCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUxvZy5hcmd0eXBlcyA9IFtjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlSW5pdC5hcmd0eXBlcyA9IFtjdHlwZXMuY191aW50XQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVJbml0LnJlc3R5cGUgPSBjdHlwZXMuY192b2lkX3AKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVGaW5hbGl6ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0TW9kZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVJbnRlcmZhY2VVcC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlSW50ZXJmYWNlRG93bi5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlVGhyZWFkU3RhcnQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVRocmVhZFN0b3AuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUNvbW1pc3Npb25lclN0YXJ0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVDb21taXNzaW9uZXJKb2luZXJBZGQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVDb21taXNzaW9uZXJTdG9wLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVKb2luZXJTdGFydC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVKb2luZXJTdG9wLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVDbGVhcldoaXRlbGlzdC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlRW5hYmxlV2hpdGVsaXN0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVEaXNhYmxlV2hpdGVsaXN0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVBZGRXaGl0ZWxpc3QuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19ieXRlXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVJlbW92ZVdoaXRlbGlzdC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0QWRkcjE2LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0QWRkcjE2LnJlc3R5cGUgPSBjdHlwZXMuY191c2hvcnQKKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldEFkZHI2NC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldEFkZHI2NC5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRIYXNoTWFjQWRkcmVzcy5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldEhhc2hNYWNBZGRyZXNzLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRDaGFubmVsLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGVdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRDaGFubmVsLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0Q2hhbm5lbC5yZXN0eXBlID0gY3R5cGVzLmNfdWJ5dGUKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRNYXN0ZXJrZXkuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldE1hc3RlcmtleS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldE1hc3RlcmtleS5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRLZXlTZXF1ZW5jZUNvdW50ZXIuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRLZXlTZXF1ZW5jZUNvdW50ZXIucmVzdHlwZSA9IGN0eXBlcy5jX3VpbnQKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRLZXlTZXF1ZW5jZUNvdW50ZXIuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnRdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0S2V5U3dpdGNoR3VhcmRUaW1lLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50XQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldE5ldHdvcmtJZFRpbWVvdXQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191Ynl0ZV0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldE5ldHdvcmtOYW1lLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0TmV0d29ya05hbWUucmVzdHlwZSA9IGN0eXBlcy5jX2NoYXJfcAorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldE5ldHdvcmtOYW1lLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFBhbklkLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0UGFuSWQucmVzdHlwZSA9IGN0eXBlcy5jX3VzaG9ydAorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldFBhbklkLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydF0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFBhcnRpdGlvbklkLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0UGFydGl0aW9uSWQucmVzdHlwZSA9IGN0eXBlcy5jX3VpbnQKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRQYXJ0aXRpb25JZC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50XQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldFJvdXRlclVwZ3JhZGVUaHJlc2hvbGQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191Ynl0ZV0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VieXRlXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVJlbGVhc2VSb3V0ZXJJZC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGVdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRTdGF0ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFN0YXRlLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRTdGF0ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRUaW1lb3V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0VGltZW91dC5yZXN0eXBlID0gY3R5cGVzLmNfdWludAorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldFRpbWVvdXQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludF0KKyAgICAgICAgCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFdlaWdodC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldFdlaWdodC5yZXN0eXBlID0gY3R5cGVzLmNfdWJ5dGUKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRXZWlnaHQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VieXRlXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUFkZElwQWRkci5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorICAgICAgICAKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlR2V0QWRkcnMuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRBZGRycy5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisgICAgICAgIAorICAgICAgICBzZWxmLkFwaS5vdE5vZGVHZXRDb250ZXh0UmV1c2VEZWxheS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3BdCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUdldENvbnRleHRSZXVzZURlbGF5LnJlc3R5cGUgPSBjdHlwZXMuY191aW50CisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlU2V0Q29udGV4dFJldXNlRGVsYXkuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVBZGRQcmVmaXguYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVJlbW92ZVByZWZpeC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZUFkZFJvdXRlLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVSZW1vdmVSb3V0ZS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlUmVnaXN0ZXJOZXRkYXRhLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVFbmVyZ3lTY2FuLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3BdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlUGFuSWRRdWVyeS5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNjYW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wXQorICAgICAgICBzZWxmLkFwaS5vdE5vZGVTY2FuLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVQaW5nLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQxNl0KKyAgICAgICAgc2VsZi5BcGkub3ROb2RlUGluZy5yZXN0eXBlID0gY3R5cGVzLmNfdWludAorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldFJvdXRlclNlbGVjdGlvbkppdHRlci5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWJ5dGVdCisKKyAgICAgICAgc2VsZi5BcGkub3ROb2RlQ29tbWlzc2lvbmVyQW5ub3VuY2VCZWdpbi5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191Ynl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldEFjdGl2ZURhdGFzZXQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNldFBlbmRpbmdEYXRhc2V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0XQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNlbmRQZW5kaW5nU2V0LmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdWxvbmdsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191bG9uZ2xvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgICAgIHNlbGYuQXBpLm90Tm9kZVNlbmRBY3RpdmVTZXQuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3Vsb25nbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191c2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdXNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19jaGFyX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX2NoYXJfcF0KKworICAgICAgICBzZWxmLkFwaS5vdE5vZGVTZXRNYXhDaGlsZHJlbi5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191Ynl0ZV0KKyAgICAgICAgCisgICAgICAgICMgSW5pdGlhbGl6ZSBhIG5ldyBub2RlCisgICAgICAgIHNlbGYub3ROb2RlID0gc2VsZi5BcGkub3ROb2RlSW5pdChjdHlwZXMuY191aW50KG5vZGVpZCkpCisgICAgICAgIGlmIHNlbGYub3ROb2RlID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJvdE5vZGVJbml0IGZhaWxlZCEiKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9ub2RlX2NsaS5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbm9kZV9jbGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2ODdjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvbm9kZV9jbGkucHkKQEAgLTAsMCArMSw1NzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgcGV4cGVjdAorCitjbGFzcyBvdENsaToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkKToKKyAgICAgICAgc2VsZi5ub2RlaWQgPSBub2RlaWQKKyAgICAgICAgc2VsZi52ZXJib3NlID0gaW50KGZsb2F0KG9zLmdldGVudignVkVSQk9TRScsIDApKSkKKyAgICAgICAgc2VsZi5ub2RlX3R5cGUgPSBvcy5nZXRlbnYoJ05PREVfVFlQRScsICdzaW0nKQorCisgICAgICAgIGlmIHNlbGYubm9kZV90eXBlID09ICdzb2MnOgorICAgICAgICAgICAgc2VsZi5fX2luaXRfc29jKG5vZGVpZCkKKyAgICAgICAgZWxpZiBzZWxmLm5vZGVfdHlwZSA9PSAnbmNwLXNpbSc6CisgICAgICAgICAgICBzZWxmLl9faW5pdF9uY3Bfc2ltKG5vZGVpZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX19pbml0X3NpbShub2RlaWQpCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmxvZ2ZpbGVfcmVhZCA9IHN5cy5zdGRvdXQKKworICAgIGRlZiBfX2luaXRfc2ltKHNlbGYsIG5vZGVpZCk6CisgICAgICAgICIiIiBJbml0aWFsaXplIGEgc2ltdWxhdGlvbiBub2RlLiAiIiIKKyAgICAgICAgaWYgIk9UX0NMSV9QQVRIIiBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgIGNtZCA9IG9zLmVudmlyb25bJ09UX0NMSV9QQVRIJ10KKyAgICAgICAgZWxpZiAidG9wX2J1aWxkZGlyIiBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgIHNyY2RpciA9IG9zLmVudmlyb25bJ3RvcF9idWlsZGRpciddCisgICAgICAgICAgICBjbWQgPSAnJXMvZXhhbXBsZXMvYXBwcy9jbGkvb3QtY2xpLWZ0ZCcgJSBzcmNkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICcuL290LWNsaS1mdGQnCisgICAgICAgIGNtZCArPSAnICVkJyAlIG5vZGVpZAorICAgICAgICBwcmludCAoIiVzIiAlIGNtZCkKKworICAgICAgICBzZWxmLnBleHBlY3QgPSBwZXhwZWN0LnNwYXduKGNtZCwgdGltZW91dD00KQorCisgICAgICAgICMgQWRkIGRlbGF5IHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzIGlzIHJlYWR5IHRvIHJlY2VpdmUgY29tbWFuZHMuCisgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorCisKKyAgICBkZWYgX19pbml0X25jcF9zaW0oc2VsZiwgbm9kZWlkKToKKyAgICAgICAgIiIiIEluaXRpYWxpemUgYW4gTkNQIHNpbXVsYXRpb24gbm9kZS4gIiIiCisgICAgICAgIGlmICJ0b3BfYnVpbGRkaXIiIGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uWyd0b3BfYnVpbGRkaXInXQorICAgICAgICAgICAgY21kID0gJ3NwaW5lbC1jbGkucHkgLXAgJXMvZXhhbXBsZXMvYXBwcy9uY3Avb3QtbmNwLWZ0ZCAtbicgJSAoYnVpbGRkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAnLi9vdC1uY3AtZnRkJworICAgICAgICBjbWQgKz0gJyAlZCcgJSBub2RlaWQKKyAgICAgICAgcHJpbnQgKCIlcyIgJSBjbWQpCisKKyAgICAgICAgc2VsZi5wZXhwZWN0ID0gcGV4cGVjdC5zcGF3bihjbWQsIHRpbWVvdXQ9NCkKKyAgICAgICAgdGltZS5zbGVlcCgwLjIpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ3NwaW5lbC1jbGkgPicpCisgICAgICAgIHNlbGYuZGVidWcoaW50KG9zLmdldGVudignREVCVUcnLCAnMCcpKSkKKyAKKyAgICBkZWYgX19pbml0X3NvYyhzZWxmLCBub2RlaWQpOgorICAgICAgICAiIiIgSW5pdGlhbGl6ZSBhIFN5c3RlbS1vbi1hLWNoaXAgbm9kZSBjb25uZWN0ZWQgdmlhIFVBUlQuICIiIgorICAgICAgICBpbXBvcnQgZmRwZXhwZWN0CisgICAgICAgIHNlcmlhbFBvcnQgPSAnL2Rldi90dHlVU0IlZCcgJSAoKG5vZGVpZC0xKSoyKQorICAgICAgICBzZWxmLnBleHBlY3QgPSBmZHBleHBlY3QuZmRzcGF3bihvcy5vcGVuKHNlcmlhbFBvcnQsIG9zLk9fUkRXUnxvcy5PX05PTkJMT0NLfG9zLk9fTk9DVFRZKSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBleHBlY3QuaXNhbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2V4aXQnKQorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdChwZXhwZWN0LkVPRikKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC50ZXJtaW5hdGUoKQorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmNsb3NlKGZvcmNlPVRydWUpCisKKyAgICBkZWYgc2VuZF9jb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgIHByaW50ICgiJWQ6ICVzIiAlIChzZWxmLm5vZGVpZCwgY21kKSkKKyAgICAgICAgc2VsZi5wZXhwZWN0LnNlbmRsaW5lKGNtZCkKKworICAgIGRlZiBnZXRfY29tbWFuZHMoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCc/JykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnQ29tbWFuZHM6JykKKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoWydEb25lJywgJyhcUyspJ10pCisgICAgICAgICAgICBpZiBpICE9IDA6CisgICAgICAgICAgICAgICAgY29tbWFuZHMuYXBwZW5kKHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGNvbW1hbmRzCisKKyAgICBkZWYgc2V0X21vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgIGNtZCA9ICdtb2RlICcgKyBtb2RlCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZGVidWcoc2VsZiwgbGV2ZWwpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnZGVidWcgJytzdHIobGV2ZWwpKQorCisgICAgZGVmIGludGVyZmFjZV91cChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2lmY29uZmlnIHVwJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgaW50ZXJmYWNlX2Rvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdpZmNvbmZpZyBkb3duJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgdGhyZWFkX3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgndGhyZWFkIHN0YXJ0JykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgdGhyZWFkX3N0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCd0aHJlYWQgc3RvcCcpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICAgICAgCisgICAgZGVmIGNvbW1pc3Npb25lcl9zdGFydChzZWxmKToKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBzdGFydCcKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBjb21taXNzaW9uZXJfYWRkX2pvaW5lcihzZWxmLCBhZGRyLCBwc2spOgorICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIGpvaW5lciBhZGQgJyArIGFkZHIgKyAnICcgKyBwc2sKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBqb2luZXJfc3RhcnQoc2VsZiwgcHNrZD0nJywgcHJvdmlzaW9uaW5nX3VybD0nJyk6CisgICAgICAgIGNtZCA9ICdqb2luZXIgc3RhcnQgJyArIHBza2QgKyAnICcgKyBwcm92aXNpb25pbmdfdXJsCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgY2xlYXJfd2hpdGVsaXN0KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnd2hpdGVsaXN0IGNsZWFyJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZW5hYmxlX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3doaXRlbGlzdCBlbmFibGUnKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBkaXNhYmxlX3doaXRlbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3doaXRlbGlzdCBkaXNhYmxlJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgYWRkX3doaXRlbGlzdChzZWxmLCBhZGRyLCByc3NpPU5vbmUpOgorICAgICAgICBjbWQgPSAnd2hpdGVsaXN0IGFkZCAnICsgYWRkcgorICAgICAgICBpZiByc3NpICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJyAnICsgc3RyKHJzc2kpCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgcmVtb3ZlX3doaXRlbGlzdChzZWxmLCBhZGRyKToKKyAgICAgICAgY21kID0gJ3doaXRlbGlzdCByZW1vdmUgJyArIGFkZHIKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfYWRkcjE2KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgncmxvYzE2JykKKyAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoJyhbMC05YS1mQS1GXXs0fSknKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICBhZGRyMTYgPSBpbnQoc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdLCAxNikKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisgICAgICAgIHJldHVybiBhZGRyMTYKKworICAgIGRlZiBnZXRfYWRkcjY0KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnZXh0YWRkcicpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoWzAtOWEtZkEtRl17MTZ9KScpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIGFkZHI2NCA9IHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisgICAgICAgIHJldHVybiBhZGRyNjQKKworICAgIGRlZiBnZXRfaGFzaG1hY2FkZHIoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdoYXNobWFjYWRkcicpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoWzAtOWEtZkEtRl17MTZ9KScpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIGFkZHIgPSBzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gYWRkcgorCisgICAgZGVmIGdldF9jaGFubmVsKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnY2hhbm5lbCcpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoXGQrKVxyXG4nKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICBjaGFubmVsID0gaW50KHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXSkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisgICAgICAgIHJldHVybiBjaGFubmVsCisKKyAgICBkZWYgc2V0X2NoYW5uZWwoc2VsZiwgY2hhbm5lbCk6CisgICAgICAgIGNtZCA9ICdjaGFubmVsICVkJyAlIGNoYW5uZWwKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfbWFzdGVya2V5KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnbWFzdGVya2V5JykKKyAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoJyhbMC05YS1mQS1GXXszMn0pJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgbWFzdGVya2V5ID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdLmRlY29kZSgidXRmLTgiKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKyAgICAgICAgcmV0dXJuIG1hc3RlcmtleQorCisgICAgZGVmIHNldF9tYXN0ZXJrZXkoc2VsZiwgbWFzdGVya2V5KToKKyAgICAgICAgY21kID0gJ21hc3RlcmtleSAnICsgbWFzdGVya2V5CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZ2V0X2tleV9zZXF1ZW5jZV9jb3VudGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgna2V5c2VxdWVuY2UgY291bnRlcicpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoXGQrKVxyXG4nKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICBrZXlfc2VxdWVuY2VfY291bnRlciA9IGludChzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0pCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4ga2V5X3NlcXVlbmNlX2NvdW50ZXIKKworICAgIGRlZiBzZXRfa2V5X3NlcXVlbmNlX2NvdW50ZXIoc2VsZiwga2V5X3NlcXVlbmNlX2NvdW50ZXIpOgorICAgICAgICBjbWQgPSAna2V5c2VxdWVuY2UgY291bnRlciAlZCcgJSBrZXlfc2VxdWVuY2VfY291bnRlcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHNldF9rZXlfc3dpdGNoX2d1YXJkdGltZShzZWxmLCBrZXlfc3dpdGNoX2d1YXJkdGltZSk6CisgICAgICAgIGNtZCA9ICdrZXlzZXF1ZW5jZSBndWFyZHRpbWUgJWQnICUga2V5X3N3aXRjaF9ndWFyZHRpbWUKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBzZXRfbmV0d29ya19pZF90aW1lb3V0KHNlbGYsIG5ldHdvcmtfaWRfdGltZW91dCk6CisgICAgICAgIGNtZCA9ICduZXR3b3JraWR0aW1lb3V0ICVkJyAlIG5ldHdvcmtfaWRfdGltZW91dAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF9uZXR3b3JrX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCduZXR3b3JrbmFtZScpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdChbJ0RvbmUnLCAnKFxTKyknXSkKKyAgICAgICAgICAgIGlmIGkgIT0gMDoKKyAgICAgICAgICAgICAgICBuZXR3b3JrX25hbWUgPSBzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBuZXR3b3JrX25hbWUKKworICAgIGRlZiBzZXRfbmV0d29ya19uYW1lKHNlbGYsIG5ldHdvcmtfbmFtZSk6CisgICAgICAgIGNtZCA9ICduZXR3b3JrbmFtZSAnICsgbmV0d29ya19uYW1lCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgZ2V0X3BhbmlkKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgncGFuaWQnKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFswLTlhLWZBLUZdezR9KScpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIHBhbmlkID0gaW50KHNlbGYucGV4cGVjdC5tYXRjaC5ncm91cHMoKVswXSwgMTYpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gcGFuaWQKKworICAgIGRlZiBzZXRfcGFuaWQoc2VsZiwgcGFuaWQpOgorICAgICAgICBjbWQgPSAncGFuaWQgJWQnICUgcGFuaWQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBnZXRfcGFydGl0aW9uX2lkKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnbGVhZGVycGFydGl0aW9uaWQnKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFxkKylcclxuJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgd2VpZ2h0ID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gd2VpZ2h0CisKKyAgICBkZWYgc2V0X3BhcnRpdGlvbl9pZChzZWxmLCBwYXJ0aXRpb25faWQpOgorICAgICAgICBjbWQgPSAnbGVhZGVycGFydGl0aW9uaWQgJWQnICUgcGFydGl0aW9uX2lkCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgc2V0X3JvdXRlcl91cGdyYWRlX3RocmVzaG9sZChzZWxmLCB0aHJlc2hvbGQpOgorICAgICAgICBjbWQgPSAncm91dGVydXBncmFkZXRocmVzaG9sZCAlZCcgJSB0aHJlc2hvbGQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBzZXRfcm91dGVyX2Rvd25ncmFkZV90aHJlc2hvbGQoc2VsZiwgdGhyZXNob2xkKToKKyAgICAgICAgY21kID0gJ3JvdXRlcmRvd25ncmFkZXRocmVzaG9sZCAlZCcgJSB0aHJlc2hvbGQKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiByZWxlYXNlX3JvdXRlcl9pZChzZWxmLCByb3V0ZXJfaWQpOgorICAgICAgICBjbWQgPSAncmVsZWFzZXJvdXRlcmlkICVkJyAlIHJvdXRlcl9pZAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF9zdGF0ZShzZWxmKToKKyAgICAgICAgc3RhdGVzID0gWydkZXRhY2hlZCcsICdjaGlsZCcsICdyb3V0ZXInLCAnbGVhZGVyJ10KKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ3N0YXRlJykKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnBleHBlY3QuZXhwZWN0KHN0YXRlcykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisgICAgICAgIHJldHVybiBzdGF0ZXNbbWF0Y2hdCisKKyAgICBkZWYgc2V0X3N0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgY21kID0gJ3N0YXRlICcgKyBzdGF0ZQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnY2hpbGR0aW1lb3V0JykKKyAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoJyhcZCspXHJcbicpCisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF0KKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisgICAgICAgIHJldHVybiB0aW1lb3V0CisKKyAgICBkZWYgc2V0X3RpbWVvdXQoc2VsZiwgdGltZW91dCk6CisgICAgICAgIGNtZCA9ICdjaGlsZHRpbWVvdXQgJWQnICUgdGltZW91dAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHNldF9tYXhfY2hpbGRyZW4oc2VsZiwgbnVtYmVyKToKKyAgICAgICAgY21kID0gJ2NoaWxkbWF4ICVkJyAlIG51bWJlcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF93ZWlnaHQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdsZWFkZXJ3ZWlnaHQnKQorICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdCgnKFxkKylcclxuJykKKyAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgd2VpZ2h0ID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gd2VpZ2h0CisKKyAgICBkZWYgc2V0X3dlaWdodChzZWxmLCB3ZWlnaHQpOgorICAgICAgICBjbWQgPSAnbGVhZGVyd2VpZ2h0ICVkJyAlIHdlaWdodAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGFkZF9pcGFkZHIoc2VsZiwgaXBhZGRyKToKKyAgICAgICAgY21kID0gJ2lwYWRkciBhZGQgJyArIGlwYWRkcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGdldF9hZGRycyhzZWxmKToKKyAgICAgICAgYWRkcnMgPSBbXQorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnaXBhZGRyJykKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoWycoXFMrOlxTKylcclxuJywgJ0RvbmUnXSkKKyAgICAgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgICAgICBhZGRycy5hcHBlbmQoc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdLmRlY29kZSgidXRmLTgiKSkKKyAgICAgICAgICAgIGVsaWYgaSA9PSAxOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGFkZHJzCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfcmV1c2VfZGVsYXkoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdjb250ZXh0cmV1c2VkZWxheScpCisgICAgICAgIGkgPSBzZWxmLnBleHBlY3QuZXhwZWN0KCcoXGQrKVxyXG4nKQorICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpWzBdCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorICAgICAgICByZXR1cm4gdGltZW91dAorCisgICAgZGVmIHNldF9jb250ZXh0X3JldXNlX2RlbGF5KHNlbGYsIGRlbGF5KToKKyAgICAgICAgY21kID0gJ2NvbnRleHRyZXVzZWRlbGF5ICVkJyAlIGRlbGF5CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgYWRkX3ByZWZpeChzZWxmLCBwcmVmaXgsIGZsYWdzLCBwcmYgPSAnbWVkJyk6CisgICAgICAgIGNtZCA9ICdwcmVmaXggYWRkICcgKyBwcmVmaXggKyAnICcgKyBmbGFncyArICcgJyArIHByZgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHJlbW92ZV9wcmVmaXgoc2VsZiwgcHJlZml4KToKKyAgICAgICAgY21kID0gJ3ByZWZpeCByZW1vdmUgJyArIHByZWZpeAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIGFkZF9yb3V0ZShzZWxmLCBwcmVmaXgsIHByZiA9ICdtZWQnKToKKyAgICAgICAgY21kID0gJ3JvdXRlIGFkZCAnICsgcHJlZml4ICsgJyAnICsgcHJmCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgcmVtb3ZlX3JvdXRlKHNlbGYsIHByZWZpeCk6CisgICAgICAgIGNtZCA9ICdyb3V0ZSByZW1vdmUgJyArIHByZWZpeAorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHJlZ2lzdGVyX25ldGRhdGEoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCduZXRkYXRhcmVnaXN0ZXInKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBlbmVyZ3lfc2NhbihzZWxmLCBtYXNrLCBjb3VudCwgcGVyaW9kLCBzY2FuX2R1cmF0aW9uLCBpcGFkZHIpOgorICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIGVuZXJneSAnICsgc3RyKG1hc2spICsgJyAnICsgc3RyKGNvdW50KSArICcgJyArIHN0cihwZXJpb2QpICsgJyAnICsgc3RyKHNjYW5fZHVyYXRpb24pICsgJyAnICsgaXBhZGRyCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRW5lcmd5OicsIHRpbWVvdXQ9OCkKKworICAgIGRlZiBwYW5pZF9xdWVyeShzZWxmLCBwYW5pZCwgbWFzaywgaXBhZGRyKToKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBwYW5pZCAnICsgc3RyKHBhbmlkKSArICcgJyArIHN0cihtYXNrKSArICcgJyArIGlwYWRkcgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0NvbmZsaWN0OicsIHRpbWVvdXQ9OCkKKworICAgIGRlZiBzY2FuKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfY29tbWFuZCgnc2NhbicpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpID0gc2VsZi5wZXhwZWN0LmV4cGVjdChbJ1x8XHMoXFMrKVxzK1x8XHMoXFMrKVxzK1x8XHMoWzAtOWEtZkEtRl17NH0pXHNcfFxzKFswLTlhLWZBLUZdezE2fSlcc1x8XHMoXGQrKVxyXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEb25lJ10pCisgICAgICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc2VsZi5wZXhwZWN0Lm1hdGNoLmdyb3VwcygpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgcGluZyhzZWxmLCBpcGFkZHIsIG51bV9yZXNwb25zZXM9MSwgc2l6ZT1Ob25lLCB0aW1lb3V0PTUwMDApOgorICAgICAgICBjbWQgPSAncGluZyAnICsgaXBhZGRyCisgICAgICAgIGlmIHNpemUgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnICcgKyBzdHIoc2l6ZSkKKworICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisKKyAgICAgICAgcmVzdWx0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25kZXJzID0ge30KKyAgICAgICAgICAgIHdoaWxlIGxlbihyZXNwb25kZXJzKSA8IG51bV9yZXNwb25zZXM6CisgICAgICAgICAgICAgICAgaSA9IHNlbGYucGV4cGVjdC5leHBlY3QoWydmcm9tIChcUyspOiddKQorICAgICAgICAgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uZGVyc1tzZWxmLnBleHBlY3QubWF0Y2guZ3JvdXBzKClbMF1dID0gMQorICAgICAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnXG4nKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5USU1FT1VUOgorICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdyZXNldCcpCisKKyAgICBkZWYgc2V0X3JvdXRlcl9zZWxlY3Rpb25faml0dGVyKHNlbGYsIGppdHRlcik6CisgICAgICAgIGNtZCA9ICdyb3V0ZXJzZWxlY3Rpb25qaXR0ZXIgJWQnICUgaml0dGVyCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgc2V0X2FjdGl2ZV9kYXRhc2V0KHNlbGYsIHRpbWVzdGFtcCwgcGFuaWQ9Tm9uZSwgY2hhbm5lbD1Ob25lLCBjaGFubmVsX21hc2s9Tm9uZSwgbWFzdGVyX2tleT1Ob25lKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2RhdGFzZXQgY2xlYXInKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBjbWQgPSAnZGF0YXNldCBhY3RpdmV0aW1lc3RhbXAgJWQnICUgdGltZXN0YW1wCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgaWYgcGFuaWQgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IHBhbmlkICVkJyAlIHBhbmlkCisgICAgICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBpZiBjaGFubmVsICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBjaGFubmVsICVkJyAlIGNoYW5uZWwKKyAgICAgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgICAgIGlmIGNoYW5uZWxfbWFzayAhPSBOb25lOgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgY2hhbm5lbG1hc2sgJWQnICUgY2hhbm5lbF9tYXNrCisgICAgICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBpZiBtYXN0ZXJfa2V5ICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBtYXN0ZXJrZXkgJyArIG1hc3Rlcl9rZXkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdkYXRhc2V0IGNvbW1pdCBhY3RpdmUnKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgIGRlZiBzZXRfcGVuZGluZ19kYXRhc2V0KHNlbGYsIHBlbmRpbmd0aW1lc3RhbXAsIGFjdGl2ZXRpbWVzdGFtcCwgcGFuaWQ9Tm9uZSwgY2hhbm5lbD1Ob25lKToKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoJ2RhdGFzZXQgY2xlYXInKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBjbWQgPSAnZGF0YXNldCBwZW5kaW5ndGltZXN0YW1wICVkJyAlIHBlbmRpbmd0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBjbWQgPSAnZGF0YXNldCBhY3RpdmV0aW1lc3RhbXAgJWQnICUgYWN0aXZldGltZXN0YW1wCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICAgICAgaWYgcGFuaWQgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IHBhbmlkICVkJyAlIHBhbmlkCisgICAgICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKKworICAgICAgICBpZiBjaGFubmVsICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBjaGFubmVsICVkJyAlIGNoYW5uZWwKKyAgICAgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKCdkYXRhc2V0IGNvbW1pdCBwZW5kaW5nJykKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgYW5ub3VuY2VfYmVnaW4oc2VsZiwgbWFzaywgY291bnQsIHBlcmlvZCwgaXBhZGRyKToKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBhbm5vdW5jZSAnICsgc3RyKG1hc2spICsgJyAnICsgc3RyKGNvdW50KSArICcgJyArIHN0cihwZXJpb2QpICsgJyAnICsgaXBhZGRyCisgICAgICAgIHNlbGYuc2VuZF9jb21tYW5kKGNtZCkKKyAgICAgICAgc2VsZi5wZXhwZWN0LmV4cGVjdCgnRG9uZScpCisKKyAgICBkZWYgc2VuZF9tZ210X2FjdGl2ZV9zZXQoc2VsZiwgYWN0aXZlX3RpbWVzdGFtcD1Ob25lLCBjaGFubmVsPU5vbmUsIGNoYW5uZWxfbWFzaz1Ob25lLCBleHRlbmRlZF9wYW5pZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5pZD1Ob25lLCBtYXN0ZXJfa2V5PU5vbmUsIG1lc2hfbG9jYWw9Tm9uZSwgbmV0d29ya19uYW1lPU5vbmUsIGJpbmFyeT1Ob25lKToKKyAgICAgICAgY21kID0gJ2RhdGFzZXQgbWdtdHNldGNvbW1hbmQgYWN0aXZlICcKKworICAgICAgICBpZiBhY3RpdmVfdGltZXN0YW1wICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ2FjdGl2ZXRpbWVzdGFtcCAlZCAnICUgYWN0aXZlX3RpbWVzdGFtcAorCisgICAgICAgIGlmIGNoYW5uZWwgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnY2hhbm5lbCAlZCAnICUgY2hhbm5lbAorCisgICAgICAgIGlmIGNoYW5uZWxfbWFzayAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdjaGFubmVsbWFzayAlZCAnICUgY2hhbm5lbF9tYXNrCisKKyAgICAgICAgaWYgZXh0ZW5kZWRfcGFuaWQgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnZXh0cGFuaWQgJyArIGV4dGVuZGVkX3BhbmlkICsgJyAnCisKKyAgICAgICAgaWYgcGFuaWQgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAncGFuaWQgJWQgJyAlIHBhbmlkCisKKyAgICAgICAgaWYgbWFzdGVyX2tleSAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdtYXN0ZXJrZXkgJyArIG1hc3Rlcl9rZXkgKyAnICcKKworICAgICAgICBpZiBtZXNoX2xvY2FsICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ2xvY2FscHJlZml4ICcgKyBtZXNoX2xvY2FsICsgJyAnCisKKyAgICAgICAgaWYgbmV0d29ya19uYW1lICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ25ldHdvcmtuYW1lICcgKyBuZXR3b3JrX25hbWUgKyAnICcKKworICAgICAgICBpZiBiaW5hcnkgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnYmluYXJ5ICcgKyBiaW5hcnkgKyAnICcKKworICAgICAgICBzZWxmLnNlbmRfY29tbWFuZChjbWQpCisgICAgICAgIHNlbGYucGV4cGVjdC5leHBlY3QoJ0RvbmUnKQorCisgICAgZGVmIHNlbmRfbWdtdF9wZW5kaW5nX3NldChzZWxmLCBwZW5kaW5nX3RpbWVzdGFtcD1Ob25lLCBhY3RpdmVfdGltZXN0YW1wPU5vbmUsIGRlbGF5X3RpbWVyPU5vbmUsIGNoYW5uZWw9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmlkPU5vbmUsIG1hc3Rlcl9rZXk9Tm9uZSwgbWVzaF9sb2NhbD1Ob25lLCBuZXR3b3JrX25hbWU9Tm9uZSk6CisgICAgICAgIGNtZCA9ICdkYXRhc2V0IG1nbXRzZXRjb21tYW5kIHBlbmRpbmcgJworCisgICAgICAgIGlmIHBlbmRpbmdfdGltZXN0YW1wICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ3BlbmRpbmd0aW1lc3RhbXAgJWQgJyAlIHBlbmRpbmdfdGltZXN0YW1wCisKKyAgICAgICAgaWYgYWN0aXZlX3RpbWVzdGFtcCAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdhY3RpdmV0aW1lc3RhbXAgJWQgJyAlIGFjdGl2ZV90aW1lc3RhbXAKKworICAgICAgICBpZiBkZWxheV90aW1lciAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdkZWxheXRpbWVyICVkICcgJSBkZWxheV90aW1lcgorCisgICAgICAgIGlmIGNoYW5uZWwgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnY2hhbm5lbCAlZCAnICUgY2hhbm5lbAorCisgICAgICAgIGlmIHBhbmlkICE9IE5vbmU6CisgICAgICAgICAgICBjbWQgKz0gJ3BhbmlkICVkICcgJSBwYW5pZAorCisgICAgICAgIGlmIG1hc3Rlcl9rZXkgIT0gTm9uZToKKyAgICAgICAgICAgIGNtZCArPSAnbWFzdGVya2V5ICcgKyBtYXN0ZXJfa2V5ICsgJyAnCisKKyAgICAgICAgaWYgbWVzaF9sb2NhbCAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICdsb2NhbHByZWZpeCAnICsgbWVzaF9sb2NhbCArICcgJworCisgICAgICAgIGlmIG5ldHdvcmtfbmFtZSAhPSBOb25lOgorICAgICAgICAgICAgY21kICs9ICduZXR3b3JrbmFtZSAnICsgbmV0d29ya19uYW1lICsgJyAnCisKKyAgICAgICAgc2VsZi5zZW5kX2NvbW1hbmQoY21kKQorICAgICAgICBzZWxmLnBleHBlY3QuZXhwZWN0KCdEb25lJykKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvcmVxdWlyZW1lbnRzLnR4dCBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvcmVxdWlyZW1lbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDMwMmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC9yZXF1aXJlbWVudHMudHh0CkBAIC0wLDAgKzEsNCBAQAorZW51bTM0PT0xLjEuMgoraXBhZGRyZXNzPT0xLjAuMTYKK3BleHBlY3Q9PTQuMC4xCitweWNyeXB0b2RvbWU9PTMuNC4zCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3NuaWZmZXIucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3NuaWZmZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2OTVhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvc25pZmZlci5weQpAQCAtMCwwICsxLDEzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRocmVhZGluZworCit0cnk6CisgICAgaW1wb3J0IFF1ZXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHF1ZXVlIGFzIFF1ZXVlCisKK2ltcG9ydCBtZXNzYWdlCitpbXBvcnQgc25pZmZlcl90cmFuc3BvcnQKKworCitjbGFzcyBTbmlmZmVyOgorCisgICAgIiIiIENsYXNzIHJlcHJlc2VudGluZyB0aGUgU25pZmZpbmcgbm9kZSwgd2hvc2UgbWFpbiB0YXNrIGlzIGxpc3RlbmluZyBhbmQgbG9nZ2luZyBtZXNzYWdlIGV4Y2hhbmdlIHBlcmZvcm1lZCBieSBvdGhlciBub2Rlcy4gIiIiCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic25pZmZlci5TbmlmZmVyIikKKworICAgIFJFQ1ZfQlVGRkVSX1NJWkUgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCBtZXNzYWdlX2ZhY3RvcnkpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5vZGVpZCAoaW50KTogTm9kZSBpZGVudGlmaWVyCisgICAgICAgICAgICBtZXNzYWdlX2ZhY3RvcnkgKE1lc3NhZ2VGYWN0b3J5KTogQ2xhc3MgcHJvZHVjaW5nIG1lc3NhZ2VzIGZyb20gZGF0YSBieXRlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5ub2RlaWQgPSBub2RlaWQKKyAgICAgICAgc2VsZi5fbWVzc2FnZV9mYWN0b3J5ID0gbWVzc2FnZV9mYWN0b3J5CisKKyAgICAgICAgIyBDcmVhdGUgdHJhbnNwb3J0CisgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5ID0gc25pZmZlcl90cmFuc3BvcnQuU25pZmZlclRyYW5zcG9ydEZhY3RvcnkoKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnRfZmFjdG9yeS5jcmVhdGVfdHJhbnNwb3J0KG5vZGVpZCkKKworICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZF9hbGl2ZSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuX3RocmVhZF9hbGl2ZS5jbGVhcigpCisKKyAgICAgICAgc2VsZi5fYnVja2V0cyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KFF1ZXVlLlF1ZXVlKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGRlbCBzZWxmLl90cmFuc3BvcnQKKworICAgIGRlZiBfc25pZmZlcl9tYWluX2xvb3Aoc2VsZik6CisgICAgICAgICIiIiBTbmlmZmVyIG1haW4gbG9vcC4gIiIiCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlNuaWZmZXIgc3RhcnRlZC4iKQorCisgICAgICAgIHdoaWxlIHNlbGYuX3RocmVhZF9hbGl2ZS5pc19zZXQoKToKKyAgICAgICAgICAgIGRhdGEsIG5vZGVpZCA9IHNlbGYuX3RyYW5zcG9ydC5yZWN2KHNlbGYuUkVDVl9CVUZGRVJfU0laRSkKKworICAgICAgICAgICAgIyBJZ25vcmUgYW55IGV4Y2VwdGlvbnMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLl9tZXNzYWdlX2ZhY3RvcnkuY3JlYXRlKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgICAgICAgICBpZiBtc2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJSZWNlaXZlZCBtZXNzYWdlOiB7fSIuZm9ybWF0KG1zZykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1Y2tldHNbbm9kZWlkXS5wdXQobXNnKQorCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgIyBKdXN0IHByaW50IHRoZSBleGNlcHRpb24gdG8gdGhlIGNvbnNvbGUKKyAgICAgICAgICAgICAgICBwcmludCgiRVhDRVBUSU9OOiAlcyIgJSBlKQorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU25pZmZlciBzdG9wcGVkLiIpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIiIiBTdGFydCBzbmlmZmluZy4gIiIiCisKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc25pZmZlcl9tYWluX2xvb3ApCisgICAgICAgIHNlbGYuX3RocmVhZC5kYWVtb24gPSBUcnVlCisKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0Lm9wZW4oKQorCisgICAgICAgIHNlbGYuX3RocmVhZF9hbGl2ZS5zZXQoKQorICAgICAgICBzZWxmLl90aHJlYWQuc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIiBTdG9wIHNuaWZmaW5nLiAiIiIKKworICAgICAgICBzZWxmLl90aHJlYWRfYWxpdmUuY2xlYXIoKQorCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIAorICAgICAgICBzZWxmLl90aHJlYWQuam9pbigpCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBnZXRfbWVzc2FnZXNfc2VudF9ieShzZWxmLCBub2RlaWQpOgorICAgICAgICAiIiIgR2V0IHNuaWZmZWQgbWVzc2FnZXMuCisKKyAgICAgICAgTm90ZSEgVGhpcyBtZXRob2QgZmx1c2hlcyB0aGUgbWVzc2FnZSBxdWV1ZSBzbyBjYWxsaW5nIHRoaXMgbWV0aG9kIGFnYWluIHdpbGwgcmV0dXJuIG9ubHkgdGhlIG5ld2x5IGxvZ2dlZCBtZXNzYWdlcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbm9kZWlkIChpbnQpOiBub2RlIGlkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIE1lc3NhZ2VzU2V0OiBhIHNldCB3aXRoIHJlY2VpdmVkIG1lc3NhZ2VzLgorICAgICAgICAiIiIKKyAgICAgICAgYnVja2V0ID0gc2VsZi5fYnVja2V0c1tub2RlaWRdCisgICAgICAgIG1lc3NhZ2VzID0gW10KKworICAgICAgICB3aGlsZSBub3QgYnVja2V0LmVtcHR5KCk6CisgICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoYnVja2V0LmdldF9ub3dhaXQoKSkKKworICAgICAgICByZXR1cm4gbWVzc2FnZS5NZXNzYWdlc1NldChtZXNzYWdlcykKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvc25pZmZlcl90cmFuc3BvcnQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3NuaWZmZXJfdHJhbnNwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZmUxOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3NuaWZmZXJfdHJhbnNwb3J0LnB5CkBAIC0wLDAgKzEsMjE4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGN0eXBlcworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCisKK2NsYXNzIFNuaWZmZXJUcmFuc3BvcnQob2JqZWN0KToKKyAgICAiIiIgSW50ZXJmYWNlIGZvciB0cmFuc3BvcnQgdGhhdCBhbGxvd3MgZWF2ZXNkcm9wIG90aGVyIG5vZGVzLiAiIiIKKworICAgIGRlZiBvcGVuKHNlbGYpOgorICAgICAgICAiIiIgT3BlbiB0cmFuc3BvcnQuIAorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvcjogd2hlbiB0cmFuc3BvcnQgaXMgYWxyZWFkeSBvcGVuZWQgb3Igd2hlbiB0cmFuc3BvcnQgb3BlbmluZyBmYWlsZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIiBDbG9zZSB0cmFuc3BvcnQuIAorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvcjogd2hlbiB0cmFuc3BvcnQgaXMgYWxyZWFkeSBjbG9zZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfb3BlbmVkKHNlbGYpOgorICAgICAgICAiIiIgQ2hlY2sgaWYgdHJhbnNwb3J0IGlzIG9wZW5lZC4gCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJvb2w6IFRydWUgaWYgdGhlIHRyYW5zcG9ydCBpcyBvcGVuZWQsIEZhbHNlIGluIG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSwgbm9kZWlkKToKKyAgICAgICAgIiIiIFNlbmQgZGF0YSB0byB0aGUgbm9kZSB3aXRoIG5vZGVpZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGF0YSAoYnl0ZWFycmF5KTogb3V0Y29taW5nIGRhdGEuCisgICAgICAgICAgICBub2RlaWQgKGludCk6IG5vZGUgaWQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgaW50OiBudW1iZXIgb2Ygc2VudCBieXRlcworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlY3Yoc2VsZiwgYnVmc2l6ZSk6CisgICAgICAgICIiIiBSZWNlaXZlIGRhdGEgc2VudCBieSBvdGhlciBub2RlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBidWZzaXplIChpbnQpOiBzaXplIG9mIGJ1ZmZlciBmb3IgaW5jb21pbmcgZGF0YS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSB0dXBsZSBjb250YWlucyBkYXRhIGFuZCBub2RlIGlkLiAKKworICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAoYnl0ZWFycmF5KFsweDAwLCAweDAxLi4uXSwgMSkKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBTbmlmZmVyU29ja2V0VHJhbnNwb3J0KFNuaWZmZXJUcmFuc3BvcnQpOgorICAgICIiIiBTb2NrZXQgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc25pZmZlciB0cmFuc3BvcnQuICIiIgorCisgICAgQkFTRV9QT1JUID0gOTAwMAorCisgICAgV0VMTEtOT1dOX05PREVfSUQgPSAzNAorCisgICAgUE9SVF9PRkZTRVQgPSBpbnQob3MuZ2V0ZW52KCdQT1JUX09GRlNFVCcsICIwIikpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkKToKKyAgICAgICAgc2VsZi5fbm9kZWlkID0gbm9kZWlkCisgICAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfbm9kZWlkX3RvX2FkZHJlc3Moc2VsZiwgbm9kZWlkLCBpcF9hZGRyZXNzPSIiKToKKyAgICAgICAgcmV0dXJuIGlwX2FkZHJlc3MsIHNlbGYuQkFTRV9QT1JUICsgKHNlbGYuUE9SVF9PRkZTRVQgKiBzZWxmLldFTExLTk9XTl9OT0RFX0lEKSArIG5vZGVpZAorCisgICAgZGVmIF9hZGRyZXNzX3RvX25vZGVpZChzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgXywgcG9ydCA9IGFkZHJlc3MKKyAgICAgICAgcmV0dXJuIChwb3J0IC0gc2VsZi5CQVNFX1BPUlQgLSAoc2VsZi5QT1JUX09GRlNFVCAqIHNlbGYuV0VMTEtOT1dOX05PREVfSUQpKQorCisgICAgZGVmIG9wZW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfb3BlbmVkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUcmFuc3BvcnQgaXMgYWxyZWFkeSBvcGVuZWQuIikKKworICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKworICAgICAgICBpZiBub3Qgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRyYW5zcG9ydCBvcGVuaW5nIGZhaWxlZC4iKQorCisgICAgICAgIHNlbGYuX3NvY2tldC5iaW5kKHNlbGYuX25vZGVpZF90b19hZGRyZXNzKHNlbGYuX25vZGVpZCkpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX29wZW5lZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVHJhbnNwb3J0IGlzIGNsb3NlZC4iKQorCisgICAgICAgIHNlbGYuX3NvY2tldC5jbG9zZSgpCisgICAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19vcGVuZWQoc2VsZik6CisgICAgICAgIHJldHVybiBib29sKHNlbGYuX3NvY2tldCBpcyBub3QgTm9uZSkKKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEsIG5vZGVpZCk6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLl9ub2RlaWRfdG9fYWRkcmVzcyhub2RlaWQpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldC5zZW5kdG8oZGF0YSwgYWRkcmVzcykKKworICAgIGRlZiByZWN2KHNlbGYsIGJ1ZnNpemUpOgorICAgICAgICBkYXRhLCBhZGRyZXNzID0gc2VsZi5fc29ja2V0LnJlY3Zmcm9tKGJ1ZnNpemUpCisKKyAgICAgICAgbm9kZWlkID0gc2VsZi5fYWRkcmVzc190b19ub2RlaWQoYWRkcmVzcykKKworICAgICAgICByZXR1cm4gYnl0ZWFycmF5KGRhdGEpLCBub2RlaWQKKworCitjbGFzcyBNYWNGcmFtZShjdHlwZXMuU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoImJ1ZmZlciIsIGN0eXBlcy5jX3VieXRlICogMTI4KSwKKyAgICAgICAgICAgICAgICAoImxlbmd0aCIsIGN0eXBlcy5jX3VieXRlKSwKKyAgICAgICAgICAgICAgICAoIm5vZGVpZCIsIGN0eXBlcy5jX3VpbnQpXQorCitjbGFzcyBTbmlmZmVyVmlydHVhbFRyYW5zcG9ydChTbmlmZmVyVHJhbnNwb3J0KToKKyAgICAiIiIgVmlydHVhbCBpbnRlcmZhY2UgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc25pZmZlciB0cmFuc3BvcnQuICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGVpZCk6CisgICAgICAgIHNlbGYuSGFuZGxlID0gTm9uZQorCisgICAgICAgICMgTG9hZCB0aGUgRExMCisgICAgICAgIHNlbGYuQXBpID0gY3R5cGVzLldpbkRMTCgib3Rub2RlYXBpLmRsbCIpCisgICAgICAgIGlmIHNlbGYuQXBpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJGYWlsZWQgdG8gbG9hZCBvdG5vZGVhcGkuZGxsISIpCisKKyAgICAgICAgIyBEZWZpbmUgdGhlIGZ1bmN0aW9ucworICAgICAgICBzZWxmLkFwaS5vdExpc3RlbmVySW5pdC5hcmd0eXBlcyA9IFtjdHlwZXMuY191aW50XQorICAgICAgICBzZWxmLkFwaS5vdExpc3RlbmVySW5pdC5yZXN0eXBlID0gY3R5cGVzLmNfdm9pZF9wCisKKyAgICAgICAgc2VsZi5BcGkub3RMaXN0ZW5lckZpbmFsaXplLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3ZvaWRfcF0KKworICAgICAgICBzZWxmLkFwaS5vdExpc3RlbmVyUmVhZC5hcmd0eXBlcyA9IFtjdHlwZXMuY192b2lkX3AsIGN0eXBlcy5QT0lOVEVSKE1hY0ZyYW1lKV0KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19vcGVuZWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBvcGVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX29wZW5lZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVHJhbnNwb3J0IGlzIGFscmVhZHkgb3BlbmVkLiIpCisKKyAgICAgICAgIyBJbml0aWFsaXplIGEgbGlzdGVuZXIKKyAgICAgICAgc2VsZi5IYW5kbGUgPSBzZWxmLkFwaS5vdExpc3RlbmVySW5pdCgwKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX29wZW5lZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVHJhbnNwb3J0IG9wZW5pbmcgZmFpbGVkLiIpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX29wZW5lZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVHJhbnNwb3J0IGlzIGNsb3NlZC4iKQorCisgICAgICAgIHNlbGYuQXBpLm90TGlzdGVuZXJGaW5hbGl6ZShzZWxmLkhhbmRsZSk7CisgICAgICAgIHNlbGYuSGFuZGxlID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX29wZW5lZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5IYW5kbGUgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgcmVjdihzZWxmLCBidWZzaXplKToKKyAgICAgICAgZnJhbWUgPSBNYWNGcmFtZSgpCisgICAgICAgIHBGcmFtZSA9IGN0eXBlcy5wb2ludGVyKGZyYW1lKTsKKworICAgICAgICBzZWxmLkFwaS5vdExpc3RlbmVyUmVhZChzZWxmLkhhbmRsZSwgcEZyYW1lKQorCisgICAgICAgIHJldHVybiBieXRlYXJyYXkoZnJhbWUuYnVmZmVyKVs6ZnJhbWUubGVuZ3RoXSwgZnJhbWUubm9kZWlkCisKKworY2xhc3MgU25pZmZlclRyYW5zcG9ydEZhY3Rvcnkob2JqZWN0KToKKworICAgIGRlZiBjcmVhdGVfdHJhbnNwb3J0KHNlbGYsIG5vZGVpZCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgorICAgICAgICAgICAgcmV0dXJuIFNuaWZmZXJTb2NrZXRUcmFuc3BvcnQobm9kZWlkKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gU25pZmZlclZpcnR1YWxUcmFuc3BvcnQobm9kZWlkKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NvYXAucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfY29hcC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kN2ViYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NvYXAucHkKQEAgLTAsMCArMSw1MjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29hcAoraW1wb3J0IGNvbmZpZworCisKK2RlZiBhbnlfZGVsdGEoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9jb2FwX29wdGlvbl90eXBlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg0KQorCisKK2RlZiBhbnlfdmFsdWUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV80Yml0c192YWx1ZV9kaWZmZXJlbnRfdGhhbl8xM19hbmRfMTQoKToKKyAgICB2YWx1ZSA9IE5vbmUKKyAgICB3aGlsZSB2YWx1ZSBpcyBOb25lOgorICAgICAgICB2YWx1ZSA9IHJhbmRvbS5nZXRyYW5kYml0cyg0KQorICAgICAgICBpZiB2YWx1ZSA9PSAxMyBvciB2YWx1ZSA9PSAxNDoKKyAgICAgICAgICAgIHZhbHVlID0gTm9uZQorCisgICAgcmV0dXJuIHZhbHVlCisKKworZGVmIGFueV80Yml0c192YWx1ZV9sb3dlcl9vcl9lcXVhbF90aGFuXzEyKCk6CisgICAgdmFsdWUgPSBOb25lCisgICAgd2hpbGUgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgdmFsdWUgPSByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKyAgICAgICAgaWYgdmFsdWUgPiAxMjoKKyAgICAgICAgICAgIHZhbHVlID0gTm9uZQorCisgICAgcmV0dXJuIHZhbHVlCisKKworZGVmIGFueV9ieXRlYXJyYXkobGVuZ3RoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisKKworZGVmIGFueV92ZXJzaW9uKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfdHlwZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X2NvZGUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9tZXNzYWdlX2lkKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X3Rva2VuKCk6CisgICAgbGVuZ3RoID0gcmFuZG9tLnJhbmRpbnQoMCwgOCkKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisKKworZGVmIGFueV9vcHRpb25zKCk6CisgICAgcmV0dXJuIFtdCisKKworZGVmIGFueV9wYXlsb2FkKGxlbmd0aD1Ob25lKToKKyAgICBsZW5ndGggPSBsZW5ndGggaWYgbGVuZ3RoIGlzIG5vdCBOb25lIGVsc2UgcmFuZG9tLnJhbmRpbnQoMCwgNjQpCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorCisKK2RlZiBhbnlfdXJpX3BhdGgoKToKKyAgICByZXR1cm4gIi8iICsgcmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbG93ZXJjYXNlKQorCisKK2NsYXNzIFRlc3RDb2FwTWVzc2FnZU9wdGlvbkhlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Bhc3NlZF9vbl92YWx1ZV93aGVuX3JlYWRfZXh0ZW5kZWRfdmFsdWVfaXNfY2FsbGVkX3dpdGhfdmFsdWVfZGlmZmVyZW50X3RoYW5fMTNfYW5kXzE0KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHZhbHVlID0gYW55XzRiaXRzX3ZhbHVlX2RpZmZlcmVudF90aGFuXzEzX2FuZF8xNCgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF92YWx1ZSA9IGNvYXAuQ29hcE9wdGlvbkhlYWRlci5fcmVhZF9leHRlbmRlZF92YWx1ZShOb25lLCB2YWx1ZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgYWN0dWFsX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl92YWx1ZV9zdG9yZWRfaW5fZmlyc3RfYnl0ZV9wbHVzXzEzX3doZW5fcmVhZF9leHRlbmRlZF92YWx1ZV9pc19jYWxsZWRfd2l0aF92YWx1ZV9lcXVhbF8xMyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB2YWx1ZSA9IDEzCisgICAgICAgIGV4dGVuZGVkX3ZhbHVlID0gYW55X3ZhbHVlKCkKKworICAgICAgICBkYXRhID0gaW8uQnl0ZXNJTyhieXRlYXJyYXkoW2V4dGVuZGVkX3ZhbHVlXSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF92YWx1ZSA9IGNvYXAuQ29hcE9wdGlvbkhlYWRlci5fcmVhZF9leHRlbmRlZF92YWx1ZShkYXRhLCB2YWx1ZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRlbmRlZF92YWx1ZSArIDEzLCBhY3R1YWxfdmFsdWUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ZhbHVlX3N0b3JlZF9pbl9maXJzdF9ieXRlX3BsdXNfMjY5X3doZW5fcmVhZF9leHRlbmRlZF92YWx1ZV9pc19jYWxsZWRfd2l0aF92YWx1ZV9lcXVhbF8xNChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB2YWx1ZSA9IDE0CisgICAgICAgIGV4dGVuZGVkX3ZhbHVlID0gYW55X3ZhbHVlKCkKKworICAgICAgICBkYXRhID0gaW8uQnl0ZXNJTyhieXRlYXJyYXkoW2FueV92YWx1ZSgpLCBleHRlbmRlZF92YWx1ZV0pKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmFsdWUgPSBjb2FwLkNvYXBPcHRpb25IZWFkZXIuX3JlYWRfZXh0ZW5kZWRfdmFsdWUoZGF0YSwgdmFsdWUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0ZW5kZWRfdmFsdWUgKyAyNjksIGFjdHVhbF92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ29hcE9wdGlvbkhlYWRlcl93aGVuX2Zyb21fYnl0ZXNfY2xhc3NtZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRlbHRhID0gYW55XzRiaXRzX3ZhbHVlX2RpZmZlcmVudF90aGFuXzEzX2FuZF8xNCgpCisgICAgICAgIGxlbmd0aCA9IGFueV80Yml0c192YWx1ZV9kaWZmZXJlbnRfdGhhbl8xM19hbmRfMTQoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2RlbHRhIDw8IDQgfCBsZW5ndGhdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBvcHRpb25faGVhZGVyID0gY29hcC5Db2FwT3B0aW9uSGVhZGVyLmZyb21fYnl0ZXMoaW8uQnl0ZXNJTyhkYXRhKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YSwgb3B0aW9uX2hlYWRlci5kZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGgsIG9wdGlvbl9oZWFkZXIubGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5faXNfcGF5bG9hZF9tYXJrZXJfcHJvcGVydHlfY2FsbGVkX3dpdGhfZGVsdGFfYW5kX2xlbmd0aF9lcXVhbF8xNShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkZWx0YSA9IDE1CisgICAgICAgIGxlbmd0aCA9IDE1CisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbZGVsdGEgPDwgNCB8IGxlbmd0aF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG9wdGlvbl9oZWFkZXIgPSBjb2FwLkNvYXBPcHRpb25IZWFkZXIuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9uX2hlYWRlci5pc19wYXlsb2FkX21hcmtlcikKKworCitjbGFzcyBUZXN0Q29hcE9wdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3R5cGVfdmFsdWVfd2hlbl90eXBlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV9jb2FwX29wdGlvbl90eXBlKCkKKworICAgICAgICBjb2FwX29wdCA9IGNvYXAuQ29hcE9wdGlvbihfdHlwZSwgYW55X3ZhbHVlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90eXBlID0gY29hcF9vcHQudHlwZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90eXBlLCBhY3R1YWxfdHlwZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdmFsdWVfdmFsdWVfd2hlbl92YWx1ZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdmFsdWUgPSBhbnlfdmFsdWUoKQorCisgICAgICAgIGNvYXBfb3B0ID0gY29hcC5Db2FwT3B0aW9uKGFueV9jb2FwX29wdGlvbl90eXBlKCksIHZhbHVlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmFsdWUgPSBjb2FwX29wdC52YWx1ZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBhY3R1YWxfdmFsdWUpCisKKworY2xhc3MgVGVzdENvYXBPcHRpb25zRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX2xpc3Rfb2ZfQ29hcE9wdGlvbl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGVsdGEgPSBhbnlfNGJpdHNfdmFsdWVfbG93ZXJfb3JfZXF1YWxfdGhhbl8xMigpCisgICAgICAgIGxlbmd0aCA9IGFueV80Yml0c192YWx1ZV9sb3dlcl9vcl9lcXVhbF90aGFuXzEyKCkKKyAgICAgICAgdmFsdWUgPSBhbnlfYnl0ZWFycmF5KGxlbmd0aCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtkZWx0YSA8PCA0IHwgbGVuZ3RoXSkgKyB2YWx1ZQorCisgICAgICAgIGZhY3RvcnkgPSBjb2FwLkNvYXBPcHRpb25zRmFjdG9yeSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGNvYXBfb3B0aW9ucyA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgTm9uZSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oY29hcF9vcHRpb25zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YSwgY29hcF9vcHRpb25zWzBdLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGNvYXBfb3B0aW9uc1swXS52YWx1ZSkKKworCitjbGFzcyBUZXN0Q29hcENvZGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jb2RlX3ZhbHVlX3doZW5fY29kZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKworICAgICAgICBjb2RlX29iaiA9IGNvYXAuQ29hcENvZGUoY29kZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NvZGUgPSBjb2RlX29iai5jb2RlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgYWN0dWFsX2NvZGUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NsYXNzX3ZhbHVlX3doZW5fY2xhc3NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisKKyAgICAgICAgY29kZV9vYmogPSBjb2FwLkNvYXBDb2RlKGNvZGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jbGFzcyA9IGNvZGVfb2JqLl9jbGFzcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb2RlID4+IDUpICYgMHg3LCBhY3R1YWxfY2xhc3MpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2RldGFpbF92YWx1ZV93aGVuX2RldGFpbF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKworICAgICAgICBjb2RlX29iaiA9IGNvYXAuQ29hcENvZGUoY29kZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RldGFpbCA9IGNvZGVfb2JqLmRldGFpbAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUgJiAweDFmLCBhY3R1YWxfZGV0YWlsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kb3R0ZWRfdmFsdWVfd2hlbl9kb3R0ZWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisKKyAgICAgICAgY29kZV9vYmogPSBjb2FwLkNvYXBDb2RlKGNvZGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kb3R0ZWQgPSBjb2RlX29iai5kb3R0ZWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgX2NsYXNzLCBkZXRhaWwgPSBhY3R1YWxfZG90dGVkLnNwbGl0KCIuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCAoaW50KF9jbGFzcykgPDwgNSkgfCBpbnQoZGV0YWlsKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ29hcENvZGVfd2hlbl9mcm9tX2NsYXNzX2FuZF9kZXRhaWxfY2xhc3NtZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisKKyAgICAgICAgX2NsYXNzID0gKGNvZGUgPj4gNSkgJiAweDcKKyAgICAgICAgZGV0YWlsID0gY29kZSAmIDB4MWYKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NvYXBfb2JqID0gY29hcC5Db2FwQ29kZS5mcm9tX2NsYXNzX2FuZF9kZXRhaWwoX2NsYXNzLCBkZXRhaWwpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgYWN0dWFsX2NvYXBfb2JqLmNvZGUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0NvYXBDb2RlX3doZW5fZnJvbV9kb3R0ZWRfc3RyaW5nX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorCisgICAgICAgIGNvZGVfb2JqID0gY29hcC5Db2FwQ29kZShjb2RlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY29hcF9vYmogPSBjb2FwLkNvYXBDb2RlLmZyb21fZG90dGVkKGNvZGVfb2JqLmRvdHRlZCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCBhY3R1YWxfY29hcF9vYmouY29kZSkKKworCitjbGFzcyBUZXN0Q29hcE1lc3NhZ2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl92ZXJzaW9uX3ZhbHVlX3doZW5fdmVyc2lvbl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdmVyc2lvbiA9IGFueV92ZXJzaW9uKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKHZlcnNpb24sIGFueV90eXBlKCksIGFueV9jb2RlKCksIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIGFueV9vcHRpb25zKCksIGFueV9wYXlsb2FkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF92ZXJzaW9uID0gY29hcF9tZXNzYWdlLnZlcnNpb24KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uLCBhY3R1YWxfdmVyc2lvbikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdHlwZV92YWx1ZV93aGVuX3R5cGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIF90eXBlID0gYW55X3R5cGUoKQorCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGNvYXAuQ29hcE1lc3NhZ2UoYW55X3ZlcnNpb24oKSwgX3R5cGUsIGFueV9jb2RlKCksIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIGFueV9vcHRpb25zKCksIGFueV9wYXlsb2FkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90eXBlID0gY29hcF9tZXNzYWdlLnR5cGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdHlwZSwgYWN0dWFsX3R5cGUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NvZGVfdmFsdWVfd2hlbl9jb2RlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb2RlID0gYW55X2NvZGUoKQorCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGNvYXAuQ29hcE1lc3NhZ2UoYW55X3ZlcnNpb24oKSwgYW55X3R5cGUoKSwgY29kZSwgYW55X21lc3NhZ2VfaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfdG9rZW4oKSwgYW55X29wdGlvbnMoKSwgYW55X3BheWxvYWQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NvZGUgPSBjb2FwX21lc3NhZ2UuY29kZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIGFjdHVhbF9jb2RlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9tZXNzYWdlX2lkX3ZhbHVlX3doZW5fbWVzc2FnZV9pZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pZCA9IGFueV9tZXNzYWdlX2lkKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIGFueV90eXBlKCksIGFueV9jb2RlKCksIG1lc3NhZ2VfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIGFueV9vcHRpb25zKCksIGFueV9wYXlsb2FkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9tZXNzYWdlX2lkID0gY29hcF9tZXNzYWdlLm1lc3NhZ2VfaWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2lkLCBhY3R1YWxfbWVzc2FnZV9pZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdG9rZW5fdmFsdWVfd2hlbl90b2tlbl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdG9rZW4gPSBhbnlfdG9rZW4oKQorCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGNvYXAuQ29hcE1lc3NhZ2UoYW55X3ZlcnNpb24oKSwgYW55X3R5cGUoKSwgYW55X2NvZGUoKSwgYW55X21lc3NhZ2VfaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgYW55X29wdGlvbnMoKSwgYW55X3BheWxvYWQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3Rva2VuID0gY29hcF9tZXNzYWdlLnRva2VuCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW4sIGFjdHVhbF90b2tlbikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGtsX3ZhbHVlX3doZW5fdGtsX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0b2tlbiA9IGFueV90b2tlbigpCisKKyAgICAgICAgY29hcF9tZXNzYWdlID0gY29hcC5Db2FwTWVzc2FnZShhbnlfdmVyc2lvbigpLCBhbnlfdHlwZSgpLCBhbnlfY29kZSgpLCBhbnlfbWVzc2FnZV9pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCBhbnlfb3B0aW9ucygpLCBhbnlfcGF5bG9hZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGtsID0gY29hcF9tZXNzYWdlLnRrbAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0b2tlbiksIGFjdHVhbF90a2wpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX29wdGlvbnNfdmFsdWVfd2hlbl9vcHRpb25zX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBvcHRpb25zID0gYW55X29wdGlvbnMoKQorCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGNvYXAuQ29hcE1lc3NhZ2UoYW55X3ZlcnNpb24oKSwgYW55X3R5cGUoKSwgYW55X2NvZGUoKSwgYW55X21lc3NhZ2VfaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfdG9rZW4oKSwgb3B0aW9ucywgYW55X3BheWxvYWQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX29wdGlvbnMgPSBjb2FwX21lc3NhZ2Uub3B0aW9ucworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMsIGFjdHVhbF9vcHRpb25zKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wYXlsb2FkX3ZhbHVlX3doZW5fcGF5bG9hZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcGF5bG9hZCA9IGFueV9wYXlsb2FkKCkKKworICAgICAgICBjb2FwX21lc3NhZ2UgPSBjb2FwLkNvYXBNZXNzYWdlKGFueV92ZXJzaW9uKCksIGFueV90eXBlKCksIGFueV9jb2RlKCksIGFueV9tZXNzYWdlX2lkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3Rva2VuKCksIGFueV9vcHRpb25zKCksIHBheWxvYWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9wYXlsb2FkID0gY29hcF9tZXNzYWdlLnBheWxvYWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkLCBhY3R1YWxfcGF5bG9hZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdXJpX3BhdGhfdmFsdWVfd2hlbl91cmlfcGF0aF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdXJpX3BhdGggPSBhbnlfdXJpX3BhdGgoKQorCisgICAgICAgIGNvYXBfbWVzc2FnZSA9IGNvYXAuQ29hcE1lc3NhZ2UoYW55X3ZlcnNpb24oKSwgYW55X3R5cGUoKSwgYW55X2NvZGUoKSwgYW55X21lc3NhZ2VfaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfdG9rZW4oKSwgYW55X29wdGlvbnMoKSwgYW55X3BheWxvYWQoKSwgdXJpX3BhdGgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF91cmlfcGF0aCA9IGNvYXBfbWVzc2FnZS51cmlfcGF0aAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaV9wYXRoLCBhY3R1YWxfdXJpX3BhdGgpCisKKworY2xhc3MgVGVzdENvYXBNZXNzYWdlSWRUb1VyaVBhdGhCaW5kZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2FkZF91cmlfcGF0aF90b19iaW5kc193aGVuX2FkZF91cmlfcGF0aF9mb3JfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2lkID0gYW55X21lc3NhZ2VfaWQoKQorICAgICAgICB0b2tlbiA9IGFueV90b2tlbigpCisgICAgICAgIHVyaV9wYXRoID0gYW55X3VyaV9wYXRoKCkKKworICAgICAgICBiaW5kZXIgPSBjb2FwLkNvYXBNZXNzYWdlSWRUb1VyaVBhdGhCaW5kZXIoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBiaW5kZXIuYWRkX3VyaV9wYXRoX2ZvcihtZXNzYWdlX2lkLCB0b2tlbiwgdXJpX3BhdGgpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpX3BhdGgsIGJpbmRlci5nZXRfdXJpX3BhdGhfZm9yKG1lc3NhZ2VfaWQsIHRva2VuKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9LZXlFcnJvcl93aGVuX2dldF91cmlfcGF0aF9mb3JfaXNfY2FsbGVkX2J1dF9pdF9pc19ub3RfcHJlc2VudF9pbl9kYXRhYmFzZShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2lkID0gYW55X21lc3NhZ2VfaWQoKQorICAgICAgICB0b2tlbiA9IGFueV90b2tlbigpCisgICAgICAgIHVyaV9wYXRoID0gYW55X3VyaV9wYXRoKCkKKworICAgICAgICBiaW5kZXIgPSBjb2FwLkNvYXBNZXNzYWdlSWRUb1VyaVBhdGhCaW5kZXIoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGJpbmRlci5nZXRfdXJpX3BhdGhfZm9yLCBtZXNzYWdlX2lkLCB0b2tlbikKKworCitjbGFzcyBUZXN0Q29hcE1lc3NhZ2VGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY3JlYXRlX2R1bW15X3BheWxvYWRfZmFjdG9yeShzZWxmKToKKyAgICAgICAgY2xhc3MgRHVtbXlQYXlsb2FkRmFjdG9yeToKKworICAgICAgICAgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVhZCgpCisKKyAgICAgICAgcmV0dXJuIER1bW15UGF5bG9hZEZhY3RvcnkoKQorCisgICAgZGVmIF9jcmVhdGVfY29hcF9tZXNzYWdlX2ZhY3Rvcnkoc2VsZik6CisgICAgICAgIHJldHVybiBjb2FwLkNvYXBNZXNzYWdlRmFjdG9yeSgKKyAgICAgICAgICAgIG9wdGlvbnNfZmFjdG9yeT1jb2FwLkNvYXBPcHRpb25zRmFjdG9yeSgpLAorICAgICAgICAgICAgdXJpX3BhdGhfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICIvYS9hcyI6IHNlbGYuX2NyZWF0ZV9kdW1teV9wYXlsb2FkX2ZhY3RvcnkoKQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG1lc3NhZ2VfaWRfdG9fdXJpX3BhdGhfYmluZGVyPWNvYXAuQ29hcE1lc3NhZ2VJZFRvVXJpUGF0aEJpbmRlcigpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Db2FwTWVzc2FnZV9mcm9tX3NvbGljaXRfcmVxdWVzdF9kYXRhX3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDQyLCAweDAyLCAweDAwLCAweGJkLCAweDY1LCAweGVlLCAweGIxLCAweDYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDYxLCAweDczLCAweGZmLCAweDAxLCAweDA4LCAweDE2LCAweDZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyXSkKKworICAgICAgICBmYWN0b3J5ID0gc2VsZi5fY3JlYXRlX2NvYXBfbWVzc2FnZV9mYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgY29hcF9tZXNzYWdlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGNvYXBfbWVzc2FnZS52ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGNvYXBfbWVzc2FnZS50eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGNvYXBfbWVzc2FnZS50a2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgY29hcF9tZXNzYWdlLmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTg5LCBjb2FwX21lc3NhZ2UubWVzc2FnZV9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4NjUsIDB4ZWVdKSwgY29hcF9tZXNzYWdlLnRva2VuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgY29hcF9tZXNzYWdlLm9wdGlvbnNbMF0udmFsdWUuZGVjb2RlKCJ1dGYtOCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhcyIsIGNvYXBfbWVzc2FnZS5vcHRpb25zWzFdLnZhbHVlLmRlY29kZSgidXRmLTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiL2EvYXMiLCBjb2FwX21lc3NhZ2UudXJpX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDAxLCAweDA4LCAweDE2LCAweDZlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMl0pLCBjb2FwX21lc3NhZ2UucGF5bG9hZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ29hcE1lc3NhZ2VfZnJvbV9zb2xpY2l0X3Jlc3BvbnNlX2RhdGFfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4NjIsIDB4NDQsIDB4MDAsIDB4YmQsIDB4NjUsIDB4ZWUsIDB4ZmYsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzYsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBdKQorCisgICAgICAgIG1pZF9iaW5kZXIgPSBjb2FwLkNvYXBNZXNzYWdlSWRUb1VyaVBhdGhCaW5kZXIoKQorICAgICAgICBtaWRfYmluZGVyLmFkZF91cmlfcGF0aF9mb3IoMTg5LCBieXRlYXJyYXkoWzB4NjUsIDB4ZWVdKSwgIi9hL2FzIikKKworICAgICAgICBmYWN0b3J5ID0gY29hcC5Db2FwTWVzc2FnZUZhY3RvcnkoCisgICAgICAgICAgICBvcHRpb25zX2ZhY3Rvcnk9Y29hcC5Db2FwT3B0aW9uc0ZhY3RvcnkoKSwKKyAgICAgICAgICAgIHVyaV9wYXRoX2Jhc2VkX3BheWxvYWRfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAiL2EvYXMiOiBzZWxmLl9jcmVhdGVfZHVtbXlfcGF5bG9hZF9mYWN0b3J5KCkKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBtZXNzYWdlX2lkX3RvX3VyaV9wYXRoX2JpbmRlcj1taWRfYmluZGVyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBjb2FwX21lc3NhZ2UgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIE5vbmUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgY29hcF9tZXNzYWdlLnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgY29hcF9tZXNzYWdlLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgY29hcF9tZXNzYWdlLnRrbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMi4wNCIsIGNvYXBfbWVzc2FnZS5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE4OSwgY29hcF9tZXNzYWdlLm1lc3NhZ2VfaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDY1LCAweGVlXSksIGNvYXBfbWVzc2FnZS50b2tlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjb2FwX21lc3NhZ2UudXJpX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDA0LCAweDAxLCAweDAwLCAweDAyLCAweDAyLCAweDAwLCAweDAwLCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwgMHg3NiwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDBdKSwgY29hcF9tZXNzYWdlLnBheWxvYWQpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfY29tbW9uLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NvbW1vbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40Y2U0YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2NvbW1vbi5weQpAQCAtMCwwICsxLDE2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpcGFkZHJlc3MKKworaW1wb3J0IGNvbW1vbgorCisKK2RlZiBhbnlfZXVpNjQoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfcmxvYzE2X2ludCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9ybG9jMTZfYnl0ZWFycmF5KCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDIpXSkKKworCitkZWYgYW55X2lwdjZfYWRkcmVzcygpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgxNildKQorCisKK2NsYXNzIFRlc3RNZXNzYWdlSW5mbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NvdXJjZV9pcHY2X3ZhbHVlX3doZW5fc291cmNlX2lwdjZfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNvdXJjZV9pcHY2ID0gYW55X2lwdjZfYWRkcmVzcygpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gc291cmNlX2lwdjYKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NvdXJjZV9pcHY2ID0gbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLmlwX2FkZHJlc3MoYnl0ZXMoc291cmNlX2lwdjYpKSwgYWN0dWFsX3NvdXJjZV9pcHY2KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kZXN0aW5hdGlvbl9pcHY2X3ZhbHVlX3doZW5fZGVzdGluYXRpb25faXB2Nl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGVzdGluYXRpb25faXB2NiA9IGFueV9pcHY2X2FkZHJlc3MoKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9pcHY2ID0gZGVzdGluYXRpb25faXB2NgorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGVzdGluYXRpb25faXB2NiA9IG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9pcHY2CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLmlwX2FkZHJlc3MoYnl0ZXMoZGVzdGluYXRpb25faXB2NikpLCBhY3R1YWxfZGVzdGluYXRpb25faXB2NikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc291cmNlX2V1aTY0X3ZhbHVlX3doZW5fc291cmNlX2V1aTY0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzb3VyY2VfbWFjX2FkZHJlc3MgPSBhbnlfZXVpNjQoKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBzb3VyY2VfbWFjX2FkZHJlc3MKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NvdXJjZV9tYWNfYWRkcmVzcyA9IG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VyY2VfbWFjX2FkZHJlc3MsIGFjdHVhbF9zb3VyY2VfbWFjX2FkZHJlc3MpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2Rlc3RpbmF0aW9uX2V1aTY0X3ZhbHVlX3doZW5fZGVzdGluYXRpb25fZXVpNjRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gYW55X2V1aTY0KCkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBkZXN0aW5hdGlvbl9tYWNfYWRkcmVzcworCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0aW5hdGlvbl9tYWNfYWRkcmVzcywgYWN0dWFsX2Rlc3RpbmF0aW9uX21hY19hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RNYWNBZGRyZXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWFjQWRkcmVzc19mcm9tX2V1aTY0X3doZW5fZnJvbV9ldWk2NF9jbGFzc21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZXVpNjQgPSBhbnlfZXVpNjQoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoZXVpNjQpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLk1hY0FkZHJlc3NUeXBlLkxPTkcsIG1hY19hZGRyZXNzLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXVpNjQsIG1hY19hZGRyZXNzLm1hY19hZGRyZXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NYWNBZGRyZXNzX2Zyb21fcmxvYzE2X2ludF93aGVuX2Zyb21fcmxvYzE2X2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2X2ludCgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ybG9jMTYoaW50KHJsb2MxNikpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbW9uLk1hY0FkZHJlc3NUeXBlLlNIT1JULCBtYWNfYWRkcmVzcy50eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5wYWNrKCI+SCIsIHJsb2MxNiksIG1hY19hZGRyZXNzLm1hY19hZGRyZXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NYWNBZGRyZXNzX2Zyb21fcmxvYzE2X2J5dGVhcnJheV93aGVuX2Zyb21fcmxvYzE2X2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2X2J5dGVhcnJheSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ybG9jMTYocmxvYzE2KQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1vbi5NYWNBZGRyZXNzVHlwZS5TSE9SVCwgbWFjX2FkZHJlc3MudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChybG9jMTYsIG1hY19hZGRyZXNzLm1hY19hZGRyZXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfc2hvcnRfTWFjQWRkcmVzc190b19paWRfd2hlbl9jb252ZXJ0X21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNl9ieXRlYXJyYXkoKQorCisgICAgICAgIG1hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ybG9jMTYocmxvYzE2KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpaWQgPSBtYWNfYWRkcmVzcy5jb252ZXJ0X3RvX2lpZCgpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwXSkgKyBybG9jMTYsIGlpZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X3Nob3J0X01hY0FkZHJlc3NfdG9faWlkX3doZW5fY29udmVydF9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGV1aTY0ID0gYW55X2V1aTY0KCkKKworICAgICAgICBtYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoZXVpNjQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlpZCA9IG1hY19hZGRyZXNzLmNvbnZlcnRfdG9faWlkKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoW2V1aTY0WzBdIF4gMHgwMl0pICsgZXVpNjRbMTpdLCBpaWQpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9jcnlwdG8ucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfY3J5cHRvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0Zjg2M2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfY3J5cHRvLnB5CkBAIC0wLDAgKzEsNDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGlvCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpcGFkZHJlc3MKKworaW1wb3J0IGNvbW1vbgoraW1wb3J0IG5ldF9jcnlwdG8KK2ltcG9ydCBtbGUKKworbWFzdGVyX2tleSA9IGJ5dGVhcnJheShbMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmZdKQorCisKK2RlZiBjb252ZXJ0X2F1eF9zZWNfaGRyX3RvX2J5dGVhcnJheShhdXhfc2VjX2hkcik6CisgICAgZGF0YSA9IGJ5dGVhcnJheShbYXV4X3NlY19oZHIuc2VjdXJpdHlfbGV2ZWwgfCAoKGF1eF9zZWNfaGRyLmtleV9pZF9tb2RlICYgMHgwMykgPDwgMyldKQorICAgIGRhdGEgKz0gc3RydWN0LnBhY2soIjxMIiwgYXV4X3NlY19oZHIuZnJhbWVfY291bnRlcikKKyAgICBkYXRhICs9IGF1eF9zZWNfaGRyLmtleV9pZAorICAgIHJldHVybiBkYXRhCisKKworZGVmIGFueV9ldWk2NCgpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg4KV0pCisKKworZGVmIGFueV9zZWN1cml0eV9sZXZlbCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMykKKworCitkZWYgYW55X2tleV9pZF9tb2RlKCk6CisgICAgIiIiCisgICAgT25seSBrZXkgaWQgbW9kZSAyLgorICAgICIiIgorICAgIHJldHVybiAyCisKKworZGVmIGFueV9rZXlfaWQoa2V5X2lkX21vZGUpOgorICAgIGlmIGtleV9pZF9tb2RlID09IDI6CisgICAgICAgIGxlbmd0aCA9IDUKKworICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKworCitkZWYgYW55X2F1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXIoKToKKyAgICBrZXlfaWRfbW9kZSA9IGFueV9rZXlfaWRfbW9kZSgpCisgICAga2V5X2lkID0gYW55X2tleV9pZChrZXlfaWRfbW9kZSkKKworICAgIHJldHVybiBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKGtleV9pZF9tb2RlLCBhbnlfc2VjdXJpdHlfbGV2ZWwoKSwgYW55X2ZyYW1lX2NvdW50ZXIoKSwga2V5X2lkKQorCisKK2RlZiBhbnlfZnJhbWVfY291bnRlcigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMzIpCisKKworZGVmIGFueV9pcF9hZGRyZXNzKCk6CisgICAgaXBfYWRkcmVzc19ieXRlcyA9IGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDE2KV0pCisgICAgcmV0dXJuIGlwYWRkcmVzcy5pcF9hZGRyZXNzKGJ5dGVzKGlwX2FkZHJlc3NfYnl0ZXMpKQorCisKK2RlZiBhbnlfZGF0YShsZW5ndGg9Tm9uZSk6CisgICAgbGVuZ3RoID0gbGVuZ3RoIGlmIGxlbmd0aCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5yYW5kaW50KDAsIDEyOCkKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisKKworZGVmIGFueV9tYXN0ZXJfa2V5KCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDE2KV0pCisKKworY2xhc3MgVGVzdENyeXB0b0VuZ2luZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfZGVjcnlwdF9ieXRlYXJyYXlfdG9fbWxlX21lc3NhZ2Vfd2hlbl9kZWNyeXB0X21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4MzUsIDB4Y2MsIDB4OTQsIDB4ZDcsIDB4N2EsIDB4MDcsIDB4ZThdKSkKKworICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSAiZmU4MDo6MjM1OmNjOTQ6ZDc3YTowN2U4IgorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9ICJmZjAyOjoyIgorCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkciA9IG5ldF9jcnlwdG8uQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIoa2V5X2lkX21vZGU9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9sZXZlbD01LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2NvdW50ZXI9MjYyMTY1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9pZD1ieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzID0gY29udmVydF9hdXhfc2VjX2hkcl90b19ieXRlYXJyYXkobWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4OWEsIDB4NWEsIDB4OWEsIDB4NWIsIDB4YmEsIDB4MjUsIDB4OWMsIDB4NWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTgsIDB4YTIsIDB4N2UsIDB4NzUsIDB4NzQsIDB4ZWYsIDB4NzksIDB4YmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGYsIDB4YTMsIDB4ZjksIDB4YWUsIDB4YTgsIDB4MzQsIDB4ZjYsIDB4ZjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzcsIDB4MjEsIDB4OTMsIDB4NjBdKQorCisgICAgICAgIG1pYyA9IGJ5dGVhcnJheShbMHhlMSwgMHhiNSwgMHhhMiwgMHg1M10pCisKKyAgICAgICAgbmV0X2NyeXB0b19lbmdpbmUgPSBuZXRfY3J5cHRvLkNyeXB0b0VuZ2luZShuZXRfY3J5cHRvLk1sZUNyeXB0b01hdGVyaWFsQ3JlYXRvcihtYXN0ZXJfa2V5KSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWxlX21zZyA9IG5ldF9jcnlwdG9fZW5naW5lLmRlY3J5cHQoZGF0YSwgbWljLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX21sZV9tc2cgPSBieXRlYXJyYXkoWzB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGIsIDB4OGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4ZjEsIDB4MGIsIDB4MDgsIDB4NjUsIDB4NWUsIDB4MGYsIDB4ODMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAsIDB4YzcsIDB4ODMsIDB4MzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX21sZV9tc2csIG1sZV9tc2cpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfZW5jcnlwdF9tbGVfbWVzc2FnZV90b19ieXRlYXJyYXlfd2hlbl9lbmNyeXB0X21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4MzUsIDB4Y2MsIDB4OTQsIDB4ZDcsIDB4N2EsIDB4MDcsIDB4ZThdKSkKKworICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSAiZmU4MDo6MjM1OmNjOTQ6ZDc3YTowN2U4IgorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9ICJmZjAyOjoyIgorCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkciA9IG5ldF9jcnlwdG8uQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIoa2V5X2lkX21vZGU9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9sZXZlbD01LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2NvdW50ZXI9MjYyMTY1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9pZD1ieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzID0gY29udmVydF9hdXhfc2VjX2hkcl90b19ieXRlYXJyYXkobWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyKQorCisgICAgICAgIG1sZV9tc2cgPSBieXRlYXJyYXkoWzB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4MGIsIDB4OGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4ZjEsIDB4MGIsIDB4MDgsIDB4NjUsIDB4NWUsIDB4MGYsIDB4ODMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAsIDB4YzcsIDB4ODMsIDB4MzFdKQorCisgICAgICAgIG5ldF9jcnlwdG9fZW5naW5lID0gbmV0X2NyeXB0by5DcnlwdG9FbmdpbmUobmV0X2NyeXB0by5NbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGVuY3J5cHRlZF9kYXRhLCBtaWMgPSBuZXRfY3J5cHRvX2VuZ2luZS5lbmNyeXB0KG1sZV9tc2csIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWRfZW5jcnlwdGVkX2RhdGEgPSBieXRlYXJyYXkoWzB4OWEsIDB4NWEsIDB4OWEsIDB4NWIsIDB4YmEsIDB4MjUsIDB4OWMsIDB4NWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDU4LCAweGEyLCAweDdlLCAweDc1LCAweDc0LCAweGVmLCAweDc5LCAweGJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZiwgMHhhMywgMHhmOSwgMHhhZSwgMHhhOCwgMHgzNCwgMHhmNiwgMHhmMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzcsIDB4MjEsIDB4OTMsIDB4NjAsIDB4ZTEsIDB4YjUsIDB4YTIsIDB4NTNdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZW5jcnlwdGVkX2RhdGEsIGVuY3J5cHRlZF9kYXRhICsgbWljKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2VuY3J5cHRfYW5kX2RlY3J5cHRfcmFuZG9tX2RhdGFfY29udGVudF93aGVuX3Byb3Blcl9tZXRob2RzX2FyZV9jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBtYXN0ZXJfa2V5ID0gYW55X21hc3Rlcl9rZXkoKQorCisgICAgICAgIGtleV9pZF9tb2RlID0gMgorICAgICAgICBzZWN1cml0eV9sZXZlbCA9IDUKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChhbnlfZXVpNjQoKSkKKworICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSBhbnlfaXBfYWRkcmVzcygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9pcHY2ID0gYW55X2lwX2FkZHJlc3MoKQorCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkciA9IG5ldF9jcnlwdG8uQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIoa2V5X2lkX21vZGU9a2V5X2lkX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlfbGV2ZWw9c2VjdXJpdHlfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfY291bnRlcj1hbnlfZnJhbWVfY291bnRlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9pZD1hbnlfa2V5X2lkKGtleV9pZF9tb2RlKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzID0gY29udmVydF9hdXhfc2VjX2hkcl90b19ieXRlYXJyYXkobWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyKQorCisgICAgICAgIG5ldF9jcnlwdG9fZW5naW5lID0gbmV0X2NyeXB0by5DcnlwdG9FbmdpbmUobmV0X2NyeXB0by5NbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGVuY19kYXRhLCBtaWMgPSBuZXRfY3J5cHRvX2VuZ2luZS5lbmNyeXB0KGRhdGEsIG1lc3NhZ2VfaW5mbykKKyAgICAgICAgZGVjX2RhdGEgPSBuZXRfY3J5cHRvX2VuZ2luZS5kZWNyeXB0KGVuY19kYXRhLCBtaWMsIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkZWNfZGF0YSkKKworCitjbGFzcyBUZXN0Q3J5cHRvTWF0ZXJpYWxDcmVhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIiBLZXkgZ2VuZXJhaW9uIHdhcyBkZXNjcmliZWQgaW4gVGhyZWFkIHNwZWNpZmljYXRpb24uCisKKyAgICBSZWFkIG1vcmU6IFRocmVhZCAxLjEuMCBTcGVjaWZpY2F0aW9uIENhbmRpZGF0ZSBGaW5hbCAtIDcuMS40IEtleSBHZW5lcmF0aW9uCisKKyAgICBUZXN0IHZlY3RvcnMgd2FzIHRha2VuIGZyb20gdGhyZWFkIHNwZWNpZmljYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaG91bGRfZ2VuZXJhdGVfbWxlX2FuZF9tYWNfa2V5X3doZW5fZ2VuZXJhdGVfa2V5c19tZXRob2RfaXNfY2FsbGVkX3dpdGhfc2VxdWVuY2VfY291bnRlcl9lcXVhbF8wKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgNy4xLjQuMSBUZXN0IFZlY3RvciAxCisgICAgICAgICIiIgorCisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VxdWVuY2VfY291bnRlciA9IDAKKworICAgICAgICBjcmVhdG9yID0gbmV0X2NyeXB0by5DcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWxlX2tleSwgbWFjX2tleSA9IGNyZWF0b3IuX2dlbmVyYXRlX2tleXMoc2VxdWVuY2VfY291bnRlcikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGVfa2V5LCBieXRlYXJyYXkoWzB4NTQsIDB4NDUsIDB4ZjQsIDB4MTUsIDB4OGYsIDB4ZDcsIDB4NTksIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3LCAweDU4LCAweDA5LCAweGY4LCAweGI1LCAweDdhLCAweDY2LCAweGE0XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjX2tleSwgYnl0ZWFycmF5KFsweGRlLCAweDg5LCAweGM1LCAweDNhLCAweGYzLCAweDgyLCAweGI0LCAweDIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMCwgMHhmZCwgMHhlNSwgMHhhOSwgMHhiYSwgMHhlMywgMHhiZSwgMHhmMF0pKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2dlbmVyYXRlX21sZV9hbmRfbWFjX2tleV93aGVuX2dlbmVyYXRlX2tleXNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX3NlcXVlbmNlX2NvdW50ZXJfZXF1YWxfMShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIDcuMS40LjIgVGVzdCBWZWN0b3IgMgorICAgICAgICAiIiIKKworICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcXVlbmNlX2NvdW50ZXIgPSAxCisKKyAgICAgICAgY3JlYXRvciA9IG5ldF9jcnlwdG8uQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1sZV9rZXksIG1hY19rZXkgPSBjcmVhdG9yLl9nZW5lcmF0ZV9rZXlzKHNlcXVlbmNlX2NvdW50ZXIpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlX2tleSwgYnl0ZWFycmF5KFsweDhmLCAweDRjLCAweGQxLCAweGEyLCAweDdkLCAweDk1LCAweGMwLCAweDdkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHhkYiwgMHg4OSwgMHg3NCwgMHhiZCwgMHg2MSwgMHg1YywgMHgxM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY19rZXksIGJ5dGVhcnJheShbMHg5YiwgMHhlMCwgMHhkMSwgMHhhZiwgMHg3YiwgMHhkOCwgMHg3MywgMHg1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGUsIDB4YWIsIDB4Y2QsIDB4ZDAsIDB4N2YsIDB4ZWIsIDB4YjksIDB4ZDVdKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9nZW5lcmF0ZV9tbGVfYW5kX21hY19rZXlfd2hlbl9nZW5lcmF0ZV9rZXlzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9zZXF1ZW5jZV9jb3VudGVyX2VxdWFsXzIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICA3LjEuNC4zIFRlc3QgVmVjdG9yIDMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZXF1ZW5jZV9jb3VudGVyID0gMgorCisgICAgICAgIGNyZWF0b3IgPSBuZXRfY3J5cHRvLkNyeXB0b01hdGVyaWFsQ3JlYXRvcihtYXN0ZXJfa2V5KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtbGVfa2V5LCBtYWNfa2V5ID0gY3JlYXRvci5fZ2VuZXJhdGVfa2V5cyhzZXF1ZW5jZV9jb3VudGVyKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZV9rZXksIGJ5dGVhcnJheShbMHgwMSwgMHg2ZSwgMHgyYSwgMHhiOCwgMHhlYywgMHg4OCwgMHg4NywgMHg5NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcsIDB4YTcsIDB4MmUsIDB4MGEsIDB4MzUsIDB4N2UsIDB4Y2YsIDB4MmFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNfa2V5LCBieXRlYXJyYXkoWzB4NTYsIDB4NDEsIDB4MDksIDB4ZTksIDB4ZDIsIDB4YWEsIDB4ZDcsIDB4ZjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIzLCAweGVjLCAweDNiLCAweDk2LCAweDExLCAweDBlLCAweGVmLCAweGEzXSkpCisKKworY2xhc3MgVGVzdE1sZUNyeXB0b01hdGVyaWFsQ3JlYXRvcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX25vbmNlX3doZW5fY3JlYXRlX25vbmNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc291cmNlX2V1aTY0ID0gYW55X2V1aTY0KCkKKyAgICAgICAgZnJhbWVfY291bnRlciA9IGFueV9mcmFtZV9jb3VudGVyKCkKKyAgICAgICAgc2VjdXJpdHlfbGV2ZWwgPSBhbnlfc2VjdXJpdHlfbGV2ZWwoKQorCisgICAgICAgIGNyZWF0b3IgPSBuZXRfY3J5cHRvLk1sZUNyeXB0b01hdGVyaWFsQ3JlYXRvcihtYXN0ZXJfa2V5KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBub25jZSA9IGNyZWF0b3IuX2NyZWF0ZV9ub25jZShzb3VyY2VfZXVpNjQsIGZyYW1lX2NvdW50ZXIsIHNlY3VyaXR5X2xldmVsKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBub25jZV9ieXRlcyA9IGlvLkJ5dGVzSU8obm9uY2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VyY2VfZXVpNjQsIG5vbmNlX2J5dGVzLnJlYWQoOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LnBhY2soIj5MIiwgZnJhbWVfY291bnRlciksIG5vbmNlX2J5dGVzLnJlYWQoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VjdXJpdHlfbGV2ZWwsIG9yZChub25jZV9ieXRlcy5yZWFkKDEpKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfYXV0aGVudGljYXRlZF9kYXRhX3doZW5fY3JlYXRlX2F1dGhlbnRpY2F0ZWRfZGF0YV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgT25seSBLZXkgaWQgbW9kZSAyLgorICAgICAgICBMZW5ndGggb2YgdGhlIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgaXMgY29uc3RhbnRseSBlcXVhbCAxMC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzb3VyY2VfYWRkcmVzcyA9IGFueV9pcF9hZGRyZXNzKCkKKyAgICAgICAgZGVzdGluYXRpb25fYWRkcmVzcyA9IGFueV9pcF9hZGRyZXNzKCkKKyAgICAgICAgYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlcl9ieXRlcyA9IGNvbnZlcnRfYXV4X3NlY19oZHJfdG9fYnl0ZWFycmF5KGFueV9hdXhpbGlhcnlfc2VjdXJpdHlfaGVhZGVyKCkpCisKKyAgICAgICAgY3JlYXRvciA9IG5ldF9jcnlwdG8uTWxlQ3J5cHRvTWF0ZXJpYWxDcmVhdG9yKG1hc3Rlcl9rZXkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGF1dGhlbnRpY2F0ZWRfZGF0YSA9IGNyZWF0b3IuX2NyZWF0ZV9hdXRoZW50aWNhdGVkX2RhdGEoCisgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcywgZGVzdGluYXRpb25fYWRkcmVzcywgYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlcl9ieXRlcykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgYXV0aGVudGljYXRlZF9kYXRhX2J5dGVzID0gaW8uQnl0ZXNJTyhhdXRoZW50aWNhdGVkX2RhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VyY2VfYWRkcmVzcy5wYWNrZWQsIGF1dGhlbnRpY2F0ZWRfZGF0YV9ieXRlcy5yZWFkKDE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0aW5hdGlvbl9hZGRyZXNzLnBhY2tlZCwgYXV0aGVudGljYXRlZF9kYXRhX2J5dGVzLnJlYWQoMTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1eGlsaWFyeV9zZWN1cml0eV9oZWFkZXJfYnl0ZXMsIGF1dGhlbnRpY2F0ZWRfZGF0YV9ieXRlcy5yZWFkKDEwKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfa2V5X2FuZF9ub25jZV9hbmRfYXV0aGVudGljYXRlZF9kYXRhX3doZW5fY3JlYXRlX2tleV9hbmRfbm9uY2VfYW5kX2F1dGhlbnRpY2F0ZWRfZGF0YV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoYW55X2V1aTY0KCkpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9pcHY2ID0gYW55X2lwX2FkZHJlc3MoKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9IGFueV9pcF9hZGRyZXNzKCkKKworICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIgPSBhbnlfYXV4aWxpYXJ5X3NlY3VyaXR5X2hlYWRlcigpCisgICAgICAgIG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcl9ieXRlcyA9IGNvbnZlcnRfYXV4X3NlY19oZHJfdG9fYnl0ZWFycmF5KG1lc3NhZ2VfaW5mby5hdXhfc2VjX2hkcikKKworICAgICAgICBjcmVhdG9yID0gbmV0X2NyeXB0by5NbGVDcnlwdG9NYXRlcmlhbENyZWF0b3IobWFzdGVyX2tleSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAga2V5LCBub25jZSwgYXV0aF9kYXRhID0gY3JlYXRvci5jcmVhdGVfa2V5X2FuZF9ub25jZV9hbmRfYXV0aGVudGljYXRlZF9kYXRhKG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzLm1hY19hZGRyZXNzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPkxCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIuZnJhbWVfY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2luZm8uYXV4X3NlY19oZHIuc2VjdXJpdHlfbGV2ZWwpLCBub25jZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2Ni5wYWNrZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9pcHY2LnBhY2tlZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLmF1eF9zZWNfaGRyX2J5dGVzLCBhdXRoX2RhdGEpCisKKworY2xhc3MgVGVzdEF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fa2V5X2lkX21vZGVfdmFsdWVfd2hlbl9rZXlfaWRfbW9kZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAga2V5X2lkX21vZGUgPSBhbnlfa2V5X2lkX21vZGUoKQorCisgICAgICAgIGF1eF9zZWNfaGRyX29iaiA9IG5ldF9jcnlwdG8uQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIoCisgICAgICAgICAgICBrZXlfaWRfbW9kZSwgYW55X3NlY3VyaXR5X2xldmVsKCksIGFueV9mcmFtZV9jb3VudGVyKCksIGFueV9rZXlfaWQoa2V5X2lkX21vZGUpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfa2V5X2lkX21vZGUgPSBhdXhfc2VjX2hkcl9vYmoua2V5X2lkX21vZGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlfaWRfbW9kZSwgYWN0dWFsX2tleV9pZF9tb2RlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zZWN1cml0eV9sZXZlbF92YWx1ZV93aGVuX3NlY3VyaXR5X2xldmVsX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZWN1cml0eV9sZXZlbCA9IGFueV9zZWN1cml0eV9sZXZlbCgpCisgICAgICAgIGtleV9pZF9tb2RlID0gYW55X2tleV9pZF9tb2RlKCkKKworICAgICAgICBhdXhfc2VjX2hkcl9vYmogPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKAorICAgICAgICAgICAga2V5X2lkX21vZGUsIHNlY3VyaXR5X2xldmVsLCBhbnlfZnJhbWVfY291bnRlcigpLCBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlY3VyaXR5X2xldmVsID0gYXV4X3NlY19oZHJfb2JqLnNlY3VyaXR5X2xldmVsCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VjdXJpdHlfbGV2ZWwsIGFjdHVhbF9zZWN1cml0eV9sZXZlbCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZnJhbWVfY291bnRlcl92YWx1ZV93aGVuX2ZyYW1lX2NvdW50ZXJfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZyYW1lX2NvdW50ZXIgPSBhbnlfZnJhbWVfY291bnRlcigpCisgICAgICAgIGtleV9pZF9tb2RlID0gYW55X2tleV9pZF9tb2RlKCkKKworICAgICAgICBhdXhfc2VjX2hkcl9vYmogPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKAorICAgICAgICAgICAga2V5X2lkX21vZGUsIGFueV9zZWN1cml0eV9sZXZlbCgpLCBmcmFtZV9jb3VudGVyLCBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2ZyYW1lX2NvdW50ZXIgPSBhdXhfc2VjX2hkcl9vYmouZnJhbWVfY291bnRlcgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYW1lX2NvdW50ZXIsIGFjdHVhbF9mcmFtZV9jb3VudGVyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9rZXlfaWRfdmFsdWVfd2hlbl9rZXlfaWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGtleV9pZF9tb2RlID0gYW55X2tleV9pZF9tb2RlKCkKKyAgICAgICAga2V5X2lkID0gYW55X2tleV9pZChrZXlfaWRfbW9kZSkKKworICAgICAgICBhdXhfc2VjX2hkcl9vYmogPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyKAorICAgICAgICAgICAga2V5X2lkX21vZGUsIGFueV9zZWN1cml0eV9sZXZlbCgpLCBhbnlfZnJhbWVfY291bnRlcigpLCBrZXlfaWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9rZXlfaWQgPSBhdXhfc2VjX2hkcl9vYmoua2V5X2lkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5X2lkLCBhY3R1YWxfa2V5X2lkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zZXF1ZW5jZV9jb3VudGVyX3ZhbHVlX3doZW5fc2VxdWVuY2VfY291bnRlcl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAga2V5X2lkX21vZGUgPSAyCisgICAgICAgIGtleV9pZCA9IGFueV9rZXlfaWQoa2V5X2lkX21vZGUpCisKKyAgICAgICAgYXV4X3NlY19oZHJfb2JqID0gbmV0X2NyeXB0by5BdXhpbGlhcnlTZWN1cml0eUhlYWRlcigKKyAgICAgICAgICAgIGtleV9pZF9tb2RlLCBhbnlfc2VjdXJpdHlfbGV2ZWwoKSwgYW55X2ZyYW1lX2NvdW50ZXIoKSwga2V5X2lkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VxdWVuY2VfY291bnRlciA9IGF1eF9zZWNfaGRyX29iai5zZXF1ZW5jZV9jb3VudGVyCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LnVucGFjaygiPkkiLCBrZXlfaWRbOjRdKVswXSwgYWN0dWFsX3NlcXVlbmNlX2NvdW50ZXIpCisKKworY2xhc3MgVGVzdEF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0F1eGlsaWFyeVNlY3VyaXR5SGVhZGVyX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBrZXlfaWRfbW9kZSA9IGFueV9rZXlfaWRfbW9kZSgpCisgICAgICAgIHNlY19sdmwgPSBhbnlfc2VjdXJpdHlfbGV2ZWwoKQorICAgICAgICBmcmFtZV9jb3VudGVyID0gYW55X2ZyYW1lX2NvdW50ZXIoKQorICAgICAgICBrZXlfaWQgPSBhbnlfa2V5X2lkKGtleV9pZF9tb2RlKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXRfY3J5cHRvLkF1eGlsaWFyeVNlY3VyaXR5SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbc2VjX2x2bCB8IGtleV9pZF9tb2RlIDw8IDNdKSArIHN0cnVjdC5wYWNrKCI8SSIsIGZyYW1lX2NvdW50ZXIpICsga2V5X2lkCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGF1eF9zZWNfaGRyID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYXV4X3NlY19oZHIsIG5ldF9jcnlwdG8uQXV4aWxpYXJ5U2VjdXJpdHlIZWFkZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleV9pZF9tb2RlLCBhdXhfc2VjX2hkci5rZXlfaWRfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWNfbHZsLCBhdXhfc2VjX2hkci5zZWN1cml0eV9sZXZlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFtZV9jb3VudGVyLCBhdXhfc2VjX2hkci5mcmFtZV9jb3VudGVyKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2lwdjYucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfaXB2Ni5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDM3OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2lwdjYucHkKQEAgLTAsMCArMSwxMzY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGlvCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBpcGFkZHJlc3MgaW1wb3J0IGlwX2FkZHJlc3MKKworZnJvbSBpcHY2IGltcG9ydCBJQ01QdjZIZWFkZXIsIFVEUEhlYWRlciwgSVB2NkhlYWRlciwgSVB2NlBhY2tldEZhY3RvcnksIFVEUERhdGFncmFtLCBcCisgICAgVURQRGF0YWdyYW1GYWN0b3J5LCBJQ01QdjZGYWN0b3J5LCBIb3BCeUhvcEZhY3RvcnksIE1QTE9wdGlvbkZhY3RvcnksIElDTVB2NiwgSG9wQnlIb3BPcHRpb25IZWFkZXIsIEhvcEJ5SG9wT3B0aW9uLCBcCisgICAgSG9wQnlIb3AsIE1QTE9wdGlvbiwgSG9wQnlIb3BGYWN0b3J5LCBJUHY2UGFja2V0LCBJQ01QdjZFY2hvQm9keSwgQnl0ZXNQYXlsb2FkLCBJQ01QdjZFY2hvQm9keUZhY3RvcnksIFwKKyAgICBVcHBlckxheWVyUHJvdG9jb2wsIFVEUEhlYWRlckZhY3RvcnksIEhvcEJ5SG9wT3B0aW9uc0ZhY3RvcnksIElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGVGYWN0b3J5LCBcCisgICAgQnl0ZXNQYXlsb2FkRmFjdG9yeSwgSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZSwgVWRwQmFzZWRPblNyY0RzdFBvcnRzUGF5bG9hZEZhY3RvcnkKKworaW1wb3J0IGNvbW1vbgorCisKK2NsYXNzIEhvcEJ5SG9wT3B0aW9uQnl0ZXNWYWx1ZToKKworICAgICIiIiBUZXN0IGhlbHBlciBjbGFzcyAiIiIKKworICAgIF92YWx1ZSA9ICJ2YWx1ZSIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfYnl0ZXMpOgorICAgICAgICBzZWxmLmJ5dGVzID0gX2J5dGVzCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ5dGVzCisKKyAgICBkZWYgdG9fZGljdChzZWxmLCBkPU5vbmUpOgorICAgICAgICBkID0gZCBpZiBkIGlzIG5vdCBOb25lIGVsc2UgZGljdCgpCisKKyAgICAgICAgZFtzZWxmLl92YWx1ZV0gPSBzZWxmLmJ5dGVzCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmJ5dGVzKQorCisKK2NsYXNzIElDTVB2NkJ5dGVzQm9keToKKworICAgICIiIiBUZXN0IGhlbHBlciBjbGFzcyAiIiIKKworICAgIF9pY21wX2JvZHkgPSAiaWNtcF9ib2R5IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIF9ieXRlcyk6CisgICAgICAgIHNlbGYuYnl0ZXMgPSBfYnl0ZXMKKworICAgIGRlZiB0b19ieXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZXMKKworICAgIGRlZiB0b19kaWN0KHNlbGYsIGQ9Tm9uZSk6CisKKyAgICAgICAgZFtzZWxmLl9pY21wX2JvZHldID0gc2VsZi5ieXRlcworICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5ieXRlcykKKworCitjbGFzcyBJQ01QdjZCeXRlc0JvZHlGYWN0b3J5OgorCisgICAgIiIiIFRlc3QgaGVscGVyIGNsYXNzICIiIgorCisgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIGNvbnRleHQpOgorICAgICAgICByZXR1cm4gSUNNUHY2Qnl0ZXNCb2R5KGRhdGEucmVhZCgpKQorCisKK2NsYXNzIER1bW15SGVhZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrc3VtID0gMAorCisKK2NsYXNzIER1bW15VXBwZXJMYXllclByb3RvY29sKFVwcGVyTGF5ZXJQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVyLCBkYXRhLCBfdHlwZSk6CisgICAgICAgIHN1cGVyKER1bW15VXBwZXJMYXllclByb3RvY29sLCBzZWxmKS5fX2luaXRfXyhoZWFkZXIpCisgICAgICAgIHNlbGYuX2RhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuX3R5cGUgPSBfdHlwZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90eXBlCisKKyAgICBkZWYgdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9kYXRhKQorCisKK2RlZiBhbnlfdWludChiaXRzKToKKyAgICByZXR1cm4gcmFuZG9tLnJhbmRpbnQoMCwgKDEgPDwgYml0cykgLSAxKQorCisKK2RlZiBhbnlfdHlwZSgpOgorICAgIHJldHVybiBhbnlfdWludCg4KQorCisKK2RlZiBhbnlfY29kZSgpOgorICAgIHJldHVybiBhbnlfdWludCg4KQorCisKK2RlZiBhbnlfY2hlY2tzdW0oKToKKyAgICByZXR1cm4gYW55X3VpbnQoMTYpCisKKworZGVmIGFueV9pY21wX3BheWxvYWQoX3R5cGUsIGNvZGUsIGNoZWNrc3VtLCBib2R5KToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtfdHlwZSwgY29kZSwgKGNoZWNrc3VtID4+IDgpICYgMHhGRiwgY2hlY2tzdW0gJiAweEZGXSkgKyBib2R5CisKKworZGVmIGFueV91ZHBfcGF5bG9hZChzcmNfcG9ydCwgZHN0X3BvcnQsIHBheWxvYWQsIGNoZWNrc3VtKToKKyAgICBwYXlsb2FkX2xlbiA9IGxlbihwYXlsb2FkKSArIDgKKyAgICByZXR1cm4gYnl0ZWFycmF5KFsoc3JjX3BvcnQgPj4gOCkgJiAweEZGLCBzcmNfcG9ydCAmIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgKGRzdF9wb3J0ID4+IDgpICYgMHhGRiwgZHN0X3BvcnQgJiAweEZGLAorICAgICAgICAgICAgICAgICAgICAgIChwYXlsb2FkX2xlbiA+PiA4KSAmIDB4RkYsIHBheWxvYWRfbGVuICYgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tzdW0gPj4gOCkgJiAweEZGLCBjaGVja3N1bSAmIDB4RkZdKSArIHBheWxvYWQKKworCitkZWYgYW55X2hvcF9ieV9ob3BfcGF5bG9hZChuZXh0X2hlYWRlciwgaGRyX2V4dF9sZW4sIHBheWxvYWQpOgorICAgIHJldHVybiBieXRlYXJyYXkoW25leHRfaGVhZGVyLCBoZHJfZXh0X2xlbl0pICsgcGF5bG9hZAorCisKK2RlZiBhbnlfYm9keSgpOgorICAgIGxlbmd0aCA9IGFueV91aW50KDgpCisgICAgYm9keSA9ICIiLmpvaW4oW3JhbmRvbS5jaG9pY2Uoc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzICsgc3RyaW5nLmhleGRpZ2l0cykgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0pCisgICAgcmV0dXJuIGJ5dGVhcnJheShib2R5LmVuY29kZSgidXRmLTgiKSkKKworCitkZWYgYW55X3BheWxvYWQoKToKKyAgICBsZW5ndGggPSBhbnlfdWludCg4KQorICAgIHBheWxvYWQgPSAiIi5qb2luKFtyYW5kb20uY2hvaWNlKHN0cmluZy5wcmludGFibGUpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorICAgIHJldHVybiBieXRlYXJyYXkocGF5bG9hZC5lbmNvZGUoInV0Zi04IikpCisKKworZGVmIGFueV9pcF9hZGRyZXNzKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbMHhmZSwgMHg4MF0pICsgYnl0ZWFycmF5KFsweDAwXSAqIDYpICsgYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCldICogOCkKKworCitkZWYgYW55X3BvcnQoKToKKyAgICByZXR1cm4gYW55X3VpbnQoMTYpCisKKworZGVmIGFueV9tcGxfb3B0X3R5cGUoKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X21wbF9vcHRfZGF0YV9sZW4oKToKKyAgICByZXR1cm4gYW55X3VpbnQoOCkKKworCitkZWYgYW55X21wbF9TKCk6CisgICAgcmV0dXJuIGFueV91aW50KDIpCisKKworZGVmIGFueV9tcGxfTSgpOgorICAgIHJldHVybiBhbnlfdWludCgxKQorCisKK2RlZiBhbnlfbXBsX1YoKToKKyAgICByZXR1cm4gYW55X3VpbnQoMSkKKworCitkZWYgYW55X21wbF9zZXF1ZW5jZSgpOgorICAgIHJldHVybiBhbnlfdWludCg4KQorCisKK2RlZiBhbnlfbXBsX3NlZWRfaWQoUyk6CisgICAgbGVuZ3RoID0gTVBMT3B0aW9uLl9zZWVkX2lkX2xlbmd0aFtTXQorICAgIHNlZWRfaWQgPSAiIi5qb2luKFtyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArIHN0cmluZy5oZXhkaWdpdHMpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorICAgIHJldHVybiBieXRlYXJyYXkoc2VlZF9pZC5lbmNvZGUoInV0Zi04IikpCisKKworZGVmIGFueV9uZXh0X2hlYWRlcigpOgorICAgIHJldHVybiBhbnlfdWludCg4KQorCisKK2RlZiBhbnlfdHJhZmZpY19jbGFzcygpOgorICAgIHJldHVybiBhbnlfdWludCg4KQorCisKK2RlZiBhbnlfZmxvd19sYWJlbCgpOgorICAgIHJldHVybiBhbnlfdWludCgyMCkKKworCitkZWYgYW55X2hvcF9saW1pdCgpOgorICAgIHJldHVybiBhbnlfdWludCg4KQorCisKK2RlZiBhbnlfcGF5bG9hZF9sZW5ndGgoKToKKyAgICByZXR1cm4gYW55X3VpbnQoMTYpCisKKworZGVmIGFueV9oZHJfZXh0X2xlbigpOgorICAgIHJldHVybiBhbnlfdWludCgzKQorCisKK2RlZiBhbnlfbGVuZ3RoKCk6CisgICAgcmV0dXJuIGFueV91aW50KDQpCisKKworZGVmIGFueV9zdHIobGVuZ3RoPTgpOgorICAgIHMgPSAiIi5qb2luKHJhbmRvbS5jaG9pY2Uoc3RyaW5nLnByaW50YWJsZSkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKKyAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IikKKworCitkZWYgYW55X2J5dGVzKGxlbmd0aD00KToKKyAgICByZXR1cm4gYnl0ZWFycmF5KGFueV9zdHIobGVuZ3RoKSkKKworCitkZWYgYW55X2RpY3Qoa2V5c19jb3VudD00KToKKyAgICBrZXlzID0gW2FueV9zdHIoKSBmb3IgXyBpbiByYW5nZShrZXlzX2NvdW50KV0KKworICAgIGQgPSB7fQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgZFtrZXldID0gYW55X2J5dGVzKCkKKworICAgIHJldHVybiBkCisKKworZGVmIGFueV9tcGxfb3B0aW9uKCk6CisgICAgUyA9IGFueV9tcGxfUygpCisgICAgTSA9IGFueV9tcGxfTSgpCisgICAgViA9IGFueV9tcGxfVigpCisgICAgc2VxdWVuY2UgPSBhbnlfbXBsX3NlcXVlbmNlKCkKKyAgICBzZWVkX2lkID0gYW55X21wbF9zZWVkX2lkKFMpCisKKyAgICByZXR1cm4gTVBMT3B0aW9uKFMsIE0sIFYsIHNlcXVlbmNlLCBzZWVkX2lkKQorCisKK2RlZiBhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb25faGVhZGVyKGxlbmd0aD00KToKKyAgICBfdHlwZSA9IGFueV90eXBlKCkKKworICAgICMgMCBvciAxIG1lYW5zIHBhZGRpbmcsIHNvIHR5cGUgaGF2ZSB0byBiZSBoaWdoZXIgdGhhbiAxCisgICAgd2hpbGUgX3R5cGUgPD0gMToKKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisKKyAgICByZXR1cm4gSG9wQnlIb3BPcHRpb25IZWFkZXIoX3R5cGUsIGxlbmd0aCkKKworCitkZWYgYW55X2hvcF9ieV9ob3BfYnl0ZXNfdmFsdWUobGVuZ3RoPTIpOgorICAgIHJldHVybiBIb3BCeUhvcE9wdGlvbkJ5dGVzVmFsdWUoYW55X2J5dGVzKGxlbmd0aCkpCisKKworZGVmIGFueV9ob3BfYnlfaG9wX2J5dGVzX29wdGlvbigpOgorICAgIGxlbmd0aCA9IGFueV9sZW5ndGgoKQorICAgIHJldHVybiBIb3BCeUhvcE9wdGlvbihhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb25faGVhZGVyKGxlbmd0aCksIGFueV9ob3BfYnlfaG9wX2J5dGVzX3ZhbHVlKGxlbmd0aCkpCisKKworZGVmIGFueV9ob3BfYnlfaG9wX21wbF9vcHRpb24oKToKKyAgICBtcGxfb3B0aW9uID0gYW55X21wbF9vcHRpb24oKQorICAgIHJldHVybiBIb3BCeUhvcE9wdGlvbihhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb25faGVhZGVyKGxlbihtcGxfb3B0aW9uKSksIG1wbF9vcHRpb24pCisKKworZGVmIGFueV9pZGVudGlmaWVyKCk6CisgICAgcmV0dXJuIGFueV91aW50KDE2KQorCisKK2RlZiBhbnlfc2VxdWVuY2VfbnVtYmVyKCk6CisgICAgcmV0dXJuIGFueV91aW50KDE2KQorCisKK2RlZiBhbnlfZGF0YSgpOgorICAgIHJldHVybiBhbnlfYnl0ZXMocmFuZG9tLnJhbmRpbnQoMCwgMzIpKQorCisKK2RlZiBhbnlfdXBwZXJfbGF5ZXJfcGF5bG9hZChkYXRhLCBfdHlwZSk6CisgICAgcmV0dXJuIER1bW15VXBwZXJMYXllclByb3RvY29sKER1bW15SGVhZGVyKCksIGRhdGEsIF90eXBlKQorCisKK2RlZiBhbnlfZXh0ZW5zaW9uX2hlYWRlcnMoKToKKyAgICByZXR1cm4gW10KKworCitkZWYgYW55X21lc3NhZ2VfaW5mbygpOgorICAgIHJldHVybiBjb21tb24uTWVzc2FnZUluZm8oKQorCisKK2NsYXNzIFRlc3RJUHY2SGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X0lQdjZfaGVhZGVyX3RvX2J5dGVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0cmFmZmljX2NsYXNzID0gYW55X3RyYWZmaWNfY2xhc3MoKQorICAgICAgICBmbG93X2xhYmVsID0gYW55X2Zsb3dfbGFiZWwoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGFueV9wYXlsb2FkX2xlbmd0aCgpCisgICAgICAgIG5leHRfaGVhZGVyID0gYW55X25leHRfaGVhZGVyKCkKKyAgICAgICAgaG9wX2xpbWl0ID0gYW55X2hvcF9saW1pdCgpCisgICAgICAgIHNvdXJjZV9hZGRyZXNzID0gYW55X2lwX2FkZHJlc3MoKQorICAgICAgICBkZXN0aW5hdGlvbl9hZGRyZXNzID0gYW55X2lwX2FkZHJlc3MoKQorCisgICAgICAgIGlwdjZfaGVhZGVyID0gSVB2NkhlYWRlcihzb3VyY2VfYWRkcmVzcywgZGVzdGluYXRpb25fYWRkcmVzcywgdHJhZmZpY19jbGFzcywgZmxvd19sYWJlbCwgaG9wX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGgsIG5leHRfaGVhZGVyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBkYXRhID0gaXB2Nl9oZWFkZXIudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGRhdGFbMF0gPj4gNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFmZmljX2NsYXNzLCAoKGRhdGFbMF0gPDwgOCB8IGRhdGFbMV0pID4+IDQpICYgMHhGRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG93X2xhYmVsLCAoKGRhdGFbMV0gJiAweDBGKSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhWzJdIDw8IDgpIHwgZGF0YVszXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkX2xlbmd0aCwgc3RydWN0LnVucGFjaygiIUgiLCBkYXRhWzQ6Nl0pWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHRfaGVhZGVyLCBkYXRhWzZdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9saW1pdCwgZGF0YVs3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VyY2VfYWRkcmVzcywgZGF0YVs4OjI0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0aW5hdGlvbl9hZGRyZXNzLCBkYXRhWzI0OjQwXSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSVB2NkhlYWRlcl93aGVuX2Zyb21fYnl0ZXNfY2xhc3NtZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRyYWZmaWNfY2xhc3MgPSBhbnlfdHJhZmZpY19jbGFzcygpCisgICAgICAgIGZsb3dfbGFiZWwgPSBhbnlfZmxvd19sYWJlbCgpCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gYW55X3BheWxvYWRfbGVuZ3RoKCkKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBhbnlfbmV4dF9oZWFkZXIoKQorICAgICAgICBob3BfbGltaXQgPSBhbnlfaG9wX2xpbWl0KCkKKyAgICAgICAgc291cmNlX2FkZHJlc3MgPSBhbnlfaXBfYWRkcmVzcygpCisgICAgICAgIGRlc3RpbmF0aW9uX2FkZHJlc3MgPSBhbnlfaXBfYWRkcmVzcygpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbKDYgPDwgNCkgfCAodHJhZmZpY19jbGFzcyA+PiA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYWZmaWNfY2xhc3MgJiAweEYpIDw8IDQgfCAoZmxvd19sYWJlbCA+PiAxNikgJiAweEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG93X2xhYmVsID4+IDgpICYgMHhGRiwgZmxvd19sYWJlbCAmIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRfbGVuZ3RoID4+IDgsIHBheWxvYWRfbGVuZ3RoICYgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9oZWFkZXIsIGhvcF9saW1pdF0pCisgICAgICAgIGRhdGEgKz0gaXBfYWRkcmVzcyhieXRlcyhzb3VyY2VfYWRkcmVzcykpLnBhY2tlZCArIGlwX2FkZHJlc3MoYnl0ZXMoZGVzdGluYXRpb25fYWRkcmVzcykpLnBhY2tlZAorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X2hlYWRlciA9IElQdjZIZWFkZXIuZnJvbV9ieXRlcyhpby5CeXRlc0lPKGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGlwdjZfaGVhZGVyLnZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhZmZpY19jbGFzcywgaXB2Nl9oZWFkZXIudHJhZmZpY19jbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG93X2xhYmVsLCBpcHY2X2hlYWRlci5mbG93X2xhYmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWRfbGVuZ3RoLCBpcHY2X2hlYWRlci5wYXlsb2FkX2xlbmd0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0X2hlYWRlciwgaXB2Nl9oZWFkZXIubmV4dF9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wX2xpbWl0LCBpcHY2X2hlYWRlci5ob3BfbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cmNlX2FkZHJlc3MsIGlwdjZfaGVhZGVyLnNvdXJjZV9hZGRyZXNzLnBhY2tlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0aW5hdGlvbl9hZGRyZXNzLCBpcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzLnBhY2tlZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcHJvcGVyX2hlYWRlcl9sZW5ndGhfd2hlbl9JUHY2UGFja2V0X29iamVjdF9pc19jYWxsZWRfaW5fbGVuKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlwdjZfaGVhZGVyID0gSVB2NkhlYWRlcihhbnlfdHJhZmZpY19jbGFzcygpLCBhbnlfZmxvd19sYWJlbCgpLCBhbnlfcGF5bG9hZF9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9uZXh0X2hlYWRlcigpLCBhbnlfaG9wX2xpbWl0KCksIGFueV9pcF9hZGRyZXNzKCksIGFueV9pcF9hZGRyZXNzKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfaGVhZGVyX2xlbmd0aCA9IGxlbihpcHY2X2hlYWRlcikKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MCwgaXB2Nl9oZWFkZXJfbGVuZ3RoKQorCisKK2NsYXNzIFRlc3RVRFBIZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfVURQX2hlYWRlcl90b19ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3JjX3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIGRzdF9wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IGFueV9wYXlsb2FkX2xlbmd0aCgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKworICAgICAgICB1ZHBfaGVhZGVyID0gVURQSGVhZGVyKHNyY19wb3J0LCBkc3RfcG9ydCwgcGF5bG9hZF9sZW5ndGgsIGNoZWNrc3VtKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBkYXRhID0gdWRwX2hlYWRlci50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX3BvcnQsIHN0cnVjdC51bnBhY2soIiFIIiwgZGF0YVswOjJdKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfcG9ydCwgc3RydWN0LnVucGFjaygiIUgiLCBkYXRhWzI6NF0pWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWRfbGVuZ3RoLCBzdHJ1Y3QudW5wYWNrKCIhSCIsIGRhdGFbNDo2XSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tzdW0sIHN0cnVjdC51bnBhY2soIiFIIiwgZGF0YVs2Ol0pWzBdKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9VRFBIZWFkZXJfd2hlbl9mcm9tX2J5dGVzX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzcmNfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gYW55X3BheWxvYWRfbGVuZ3RoKCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiIUgiLCBzcmNfcG9ydCkgKyBzdHJ1Y3QucGFjaygiIUgiLCBkc3RfcG9ydCkgKyBcCisgICAgICAgICAgICBzdHJ1Y3QucGFjaygiIUgiLCBwYXlsb2FkX2xlbmd0aCkgKyBzdHJ1Y3QucGFjaygiIUgiLCBjaGVja3N1bSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdWRwX2hlYWRlciA9IFVEUEhlYWRlci5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX3BvcnQsIHVkcF9oZWFkZXIuc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X3BvcnQsIHVkcF9oZWFkZXIuZHN0X3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF5bG9hZF9sZW5ndGgsIHVkcF9oZWFkZXIucGF5bG9hZF9sZW5ndGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tzdW0sIHVkcF9oZWFkZXIuY2hlY2tzdW0pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Byb3Blcl9oZWFkZXJfbGVuZ3RoX3doZW5fVURQSGVhZGVyX29iamVjdF9pc19jYWxsZWRfaW5fbGVuKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHVkcF9oZWFkZXIgPSBVRFBIZWFkZXIoYW55X3BvcnQoKSwgYW55X3BvcnQoKSwgYW55X3BheWxvYWRfbGVuZ3RoKCksIGFueV9jaGVja3N1bSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICB1ZHBfaGVhZGVyX2xlbmd0aCA9IGxlbih1ZHBfaGVhZGVyKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIHVkcF9oZWFkZXJfbGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl8xN193aGVuX3R5cGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHVkcF9oZWFkZXIgPSBVRFBIZWFkZXIoYW55X3BvcnQoKSwgYW55X3BvcnQoKSwgYW55X3BheWxvYWRfbGVuZ3RoKCksIGFueV9jaGVja3N1bSgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE3LCB1ZHBfaGVhZGVyLnR5cGUpCisKKworY2xhc3MgVGVzdElDTVB2NkhlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY29udmVydF9pY21wX21lc3NhZ2VfaGVhZGVyX3RvX2J5dGVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIGljbXB2Nl9oZWFkZXIgPSBJQ01QdjZIZWFkZXIoX3R5cGUsIGNvZGUsIGNoZWNrc3VtKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBkYXRhID0gaWNtcHY2X2hlYWRlci50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3R5cGUsIGRhdGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgZGF0YVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3N1bSwgc3RydWN0LnVucGFjaygiIUgiLCBkYXRhWzI6XSlbMF0pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0lDTVB2NkhlYWRlcl93aGVuX3RvX2J5dGVzX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW190eXBlLCBjb2RlXSkgKyBzdHJ1Y3QucGFjaygiIUgiLCBjaGVja3N1bSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaWNtcHY2X2hlYWRlciA9IElDTVB2NkhlYWRlci5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3R5cGUsIGljbXB2Nl9oZWFkZXIudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCBpY21wdjZfaGVhZGVyLmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tzdW0sIGljbXB2Nl9oZWFkZXIuY2hlY2tzdW0pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Byb3Blcl9oZWFkZXJfbGVuZ3RoX3doZW5fSUNNUHY2SGVhZGVyX29iamVjdF9pc19jYWxsZWRfaW5fbGVuKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGljbXB2Nl9oZWFkZXIgPSBJQ01QdjZIZWFkZXIoYW55X3R5cGUoKSwgYW55X2NvZGUoKSwgYW55X2NoZWNrc3VtKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGljbXB2Nl9oZWFkZXJfbGVuZ3RoID0gbGVuKGljbXB2Nl9oZWFkZXIpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgaWNtcHY2X2hlYWRlcl9sZW5ndGgpCisKKworY2xhc3MgVGVzdElQdjZQYWNrZXQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2J1aWxkX0lQdjZQYWNrZXRfd2l0aF9JQ01QX3BheWxvYWRfZnJvbV93ZWxsX2tub3dfdmFsdWVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorCisgICAgICAgIGlwdjZfcGFja2V0ID0gSVB2NlBhY2tldChJUHY2SGVhZGVyKHNvdXJjZV9hZGRyZXNzPSJmZDAwOjEyMzQ6NDU1NTo6ZmY6ZmUwMDoxODAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25fYWRkcmVzcz0iZmYwMzo6MSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNNUHY2KElDTVB2NkhlYWRlcigxMjgsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDTVB2NkVjaG9Cb2R5KDAsIDIsIGJ5dGVhcnJheShbMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxXSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIb3BCeUhvcChvcHRpb25zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3BCeUhvcE9wdGlvbihIb3BCeUhvcE9wdGlvbkhlYWRlcihfdHlwZT0weDZkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUExPcHRpb24oUz0xLCBNPTAsIFY9MCwgc2VxdWVuY2U9Miwgc2VlZF9pZD1ieXRlYXJyYXkoWzB4MDAsIDB4MThdKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfcGFja2V0X2J5dGVzID0gaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF9pcHY2X3BhY2tldF9ieXRlcyA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmQsIDB4MDAsIDB4MTIsIDB4MzQsIDB4NDUsIDB4NTUsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwLCAweDE4LCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNhLCAweDAwLCAweDZkLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4YzcsIDB4YmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9pcHY2X3BhY2tldF9ieXRlcywgaXB2Nl9wYWNrZXRfYnl0ZXMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfYnVpbGRfSVB2NlBhY2tldF93aXRoX1VEUF9wYXlsb2FkX2Zyb21fd2VsbF9rbm93X3ZhbHVlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaXB2Nl9oZWFkZXIgPSBJUHY2SGVhZGVyKHNvdXJjZV9hZGRyZXNzPSJmZTgwOjoxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX2FkZHJlc3M9ImZmMDI6OjIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9wX2xpbWl0PTI1NSkKKworICAgICAgICB1ZHBfZGdyYW0gPSBVRFBEYXRhZ3JhbShVRFBIZWFkZXIoc3JjX3BvcnQ9MTk3ODgsIGRzdF9wb3J0PTE5Nzg4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZXNQYXlsb2FkKGJ5dGVhcnJheShbMHgwMCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgwMSwgMHgwYiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHhjNiwgMHg2OSwgMHg3MywgMHg1MSwgMHgwZSwgMHgwMSwgMHg4MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgwMiwgMHgwMCwgMHgwMSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZl0pKSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IElQdjZQYWNrZXQoaXB2Nl9oZWFkZXIsIHVkcF9kZ3JhbSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXB2Nl9wYWNrZXRfYnl0ZXMgPSBpcHY2X3BhY2tldC50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX2lwdjZfcGFja2V0X2J5dGVzID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDExLCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGQsIDB4NGMsIDB4NGQsIDB4NGMsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ZjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHgwMSwgMHgwMSwgMHgwYiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4YzYsIDB4NjksIDB4NzMsIDB4NTEsIDB4MGUsIDB4MDEsIDB4ODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDAyLCAweDAwLCAweDAxLCAweGRlLCAweGFkLCAweGJlLCAweGVmXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2lwdjZfcGFja2V0X2J5dGVzLCBpcHY2X3BhY2tldF9ieXRlcykKKworCitjbGFzcyBUZXN0SVB2NlBhY2tldEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9JUHY2UGFja2V0X3dpdGhfTVBMX2V4dGVuc2lvbl9oZWFkZXJfYW5kX0lDTVBfdXBwZXJfbGF5ZXJfcHJvdG9jb2xfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlwdjZfcGFja2V0X2J5dGVzID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZCwgMHgwMCwgMHgxMiwgMHgzNCwgMHg0NSwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MTgsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2EsIDB4MDAsIDB4NmQsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDg3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxXSkKKworICAgICAgICBpcHY2X2ZhY3RvcnkgPSBJUHY2UGFja2V0RmFjdG9yeSgKKyAgICAgICAgICAgIGVoZj17CisgICAgICAgICAgICAgICAgMDogSG9wQnlIb3BGYWN0b3J5KAorICAgICAgICAgICAgICAgICAgICBob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeT1Ib3BCeUhvcE9wdGlvbnNGYWN0b3J5KAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc19mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOTogTVBMT3B0aW9uRmFjdG9yeSgpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdWxwZj17CisgICAgICAgICAgICAgICAgNTg6IElDTVB2NkZhY3RvcnkoYm9keV9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICAgICAxMjg6IElDTVB2NkVjaG9Cb2R5RmFjdG9yeSgpCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfcGFja2V0ID0gaXB2Nl9mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oaXB2Nl9wYWNrZXRfYnl0ZXMpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZkMDA6MTIzNDo0NTU1OjpmZjpmZTAwOjE4MDAnLCAgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZmYwMzo6MScsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2NCwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuaG9wX2xpbWl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLm5leHRfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDM0LCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5wYXlsb2FkX2xlbmd0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5mbG93X2xhYmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLnRyYWZmaWNfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIudmVyc2lvbikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGlwdjZfcGFja2V0LmV4dGVuc2lvbl9oZWFkZXJzWzBdLm9wdGlvbnNbMF0udmFsdWUuUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC5leHRlbnNpb25faGVhZGVyc1swXS5vcHRpb25zWzBdLnZhbHVlLk0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaXB2Nl9wYWNrZXQuZXh0ZW5zaW9uX2hlYWRlcnNbMF0ub3B0aW9uc1swXS52YWx1ZS5WKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGlwdjZfcGFja2V0LmV4dGVuc2lvbl9oZWFkZXJzWzBdLm9wdGlvbnNbMF0udmFsdWUuc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDAwLCAweDE4XSksIGlwdjZfcGFja2V0LmV4dGVuc2lvbl9oZWFkZXJzWzBdLm9wdGlvbnNbMF0udmFsdWUuc2VlZF9pZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDM0NTc4LCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5oZWFkZXIuY2hlY2tzdW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTI4LCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5oZWFkZXIudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5oZWFkZXIuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5ib2R5LmlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuYm9keS5zZXF1ZW5jZV9udW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDgwXHgwMFx4YzdceGJmXHgwMFx4MDBceDAwXHgwMUFBQUFBQUFBQUEnLCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5ib2R5LmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0lQdjZQYWNrZXRfd2l0aG91dF9hbnlfZXh0ZW5zaW9uX2hlYWRlcl93aXRoX0lDTVBfdXBwZXJfbGF5ZXJfcHJvdG9jb2xfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlwdjZfcGFja2V0X2J5dGVzID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFBLCAweDNBLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZCwgMHgwMCwgMHgxMiwgMHgzNCwgMHg0NSwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MTgsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGM3LCAweGJmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4NDFdKQorCisgICAgICAgIGlwdjZfZmFjdG9yeSA9IElQdjZQYWNrZXRGYWN0b3J5KAorICAgICAgICAgICAgdWxwZj17CisgICAgICAgICAgICAgICAgNTg6IElDTVB2NkZhY3RvcnkoYm9keV9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgICAgICAxMjg6IElDTVB2NkVjaG9Cb2R5RmFjdG9yeSgpCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfcGFja2V0ID0gaXB2Nl9mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oaXB2Nl9wYWNrZXRfYnl0ZXMpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisgICAgICAgIGlwdjZfcGFja2V0Ll92YWxpZGF0ZV9jaGVja3N1bSgpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZkMDA6MTIzNDo0NTU1OjpmZjpmZTAwOjE4MDAnLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmZjAzOjoxJywgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDY0LCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5ob3BfbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNTgsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLm5leHRfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI2LCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5wYXlsb2FkX2xlbmd0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC5pcHY2X2hlYWRlci5mbG93X2xhYmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGlwdjZfcGFja2V0LmlwdjZfaGVhZGVyLnRyYWZmaWNfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgaXB2Nl9wYWNrZXQuaXB2Nl9oZWFkZXIudmVyc2lvbikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDM0NTc4LCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5oZWFkZXIuY2hlY2tzdW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTI4LCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5oZWFkZXIudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5oZWFkZXIuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5ib2R5LmlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgaXB2Nl9wYWNrZXQudXBwZXJfbGF5ZXJfcHJvdG9jb2wuYm9keS5zZXF1ZW5jZV9udW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDgwXHgwMFx4YzdceGJmXHgwMFx4MDBceDAwXHgwMUFBQUFBQUFBQUEnLCBpcHY2X3BhY2tldC51cHBlcl9sYXllcl9wcm90b2NvbC5ib2R5LmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfc2V0X21lc3NhZ2VfaW5mb19maWVsZF93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaXB2Nl9wYWNrZXRfZGF0YSA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQSwgMHgzQSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZCwgMHgwMCwgMHgxMiwgMHgzNCwgMHg0NSwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMCwgMHgxOCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHg0MV0pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gYW55X21lc3NhZ2VfaW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2NiA9ICJmZjo6IgorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fYWRkcmVzcyA9ICJmZjo6IgorCisgICAgICAgIGZhY3RvcnkgPSBJUHY2UGFja2V0RmFjdG9yeSgKKyAgICAgICAgICAgIHVscGY9eworICAgICAgICAgICAgICAgIDU4OiBJQ01QdjZGYWN0b3J5KGJvZHlfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgMTI4OiBJQ01QdjZFY2hvQm9keUZhY3RvcnkoKQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oaXB2Nl9wYWNrZXRfZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmQwMDoxMjM0OjQ1NTU6OmZmOmZlMDA6MTgwMCIsIG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2Ni5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZjAzOjoxIiwgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYuY29tcHJlc3NlZCkKKworCitjbGFzcyBUZXN0VURQRGF0YWdyYW0odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZXNfYnl0ZXNfZnJvbV9VRFBIZWFkZXJfYW5kX3BheWxvYWRfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNyY19wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBkc3RfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIHBheWxvYWQgPSBhbnlfcGF5bG9hZCgpCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gbGVuKHBheWxvYWQpICsgOCAgIyBVRFAgbGVuZ3RoIGNvbnNpc3RzIG9mIFVEUCBoZWFkZXIgbGVuZ3RoIGFuZCBwYXlsb2FkIGxlbmd0aAorCisgICAgICAgIHVkcF9oZWFkZXIgPSBVRFBIZWFkZXIoc3JjX3BvcnQsIGRzdF9wb3J0LCBwYXlsb2FkX2xlbmd0aCwgY2hlY2tzdW0pCisgICAgICAgIHVkcF9wYXlsb2FkID0gQnl0ZXNQYXlsb2FkKHBheWxvYWQpCisgICAgICAgIHVkcF9kZ3JhbSA9IFVEUERhdGFncmFtKHVkcF9oZWFkZXIsIHVkcF9wYXlsb2FkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICB1ZHBfZGdyYW1fYnl0ZXMgPSB1ZHBfZGdyYW0udG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF91ZHBfZGdyYW1fYnl0ZXMgPSBzdHJ1Y3QucGFjaygiIUgiLCBzcmNfcG9ydCkgKyBzdHJ1Y3QucGFjaygiIUgiLCBkc3RfcG9ydCkgKyBcCisgICAgICAgICAgICBzdHJ1Y3QucGFjaygiIUgiLCBwYXlsb2FkX2xlbmd0aCkgKyBzdHJ1Y3QucGFjaygiIUgiLCBjaGVja3N1bSkgKyBwYXlsb2FkCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF91ZHBfZGdyYW1fYnl0ZXMsIHVkcF9kZ3JhbV9ieXRlcykKKworCitjbGFzcyBUZXN0SUNNUHY2KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVzX2J5dGVzX2Zyb21fSUNNUHY2SGVhZGVyX2FuZF9ib2R5X3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKyAgICAgICAgY29kZSA9IGFueV9jb2RlKCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorICAgICAgICBib2R5ID0gYW55X2JvZHkoKQorCisgICAgICAgIGljbXB2Nl9oZWFkZXIgPSBJQ01QdjZIZWFkZXIoX3R5cGUsIGNvZGUsIGNoZWNrc3VtKQorICAgICAgICBpY21wdjZfYm9keSA9IElDTVB2NkJ5dGVzQm9keShib2R5KQorICAgICAgICBpY21wdjZfbXNnID0gSUNNUHY2KGljbXB2Nl9oZWFkZXIsIGljbXB2Nl9ib2R5KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBpY21wdjZfbXNnLnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWQgPSBieXRlYXJyYXkoW190eXBlLCBjb2RlXSkgKyBzdHJ1Y3QucGFjaygiIUgiLCBjaGVja3N1bSkgKyBib2R5CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisKK2NsYXNzIFRlc3RIb3BCeUhvcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbihzZWxmLCBwYXlsb2FkX2xlbik6CisgICAgICAgIGNvdW50ID0gcGF5bG9hZF9sZW4gLy8gOAorICAgICAgICByZXN0ID0gcGF5bG9hZF9sZW4gJSA4CisKKyAgICAgICAgaWYgcmVzdCAhPSAwOgorICAgICAgICAgICAgY291bnQgKz0gMQorCisgICAgICAgIGlmIGNvdW50ID09IDAgYW5kIHJlc3QgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBjb3VudAorCisgICAgICAgIHJldHVybiBjb3VudCAtIDEKKworICAgIGRlZiBfY2FsY3VsYXRlX3JlcXVpcmVkX3BhZGRpbmcoc2VsZiwgY29udGVudF9sZW5ndGgpOgorICAgICAgICBleGNlc3NfYnl0ZXMgPSBjb250ZW50X2xlbmd0aCAmIDB4NworCisgICAgICAgIGlmIGV4Y2Vzc19ieXRlcyA+IDA6CisgICAgICAgICAgICByZXR1cm4gOCAtIGV4Y2Vzc19ieXRlcworCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgY3JlYXRlX3BhZGRpbmcoc2VsZiwgcGFkZGluZ19sZW5ndGgpOgorICAgICAgICBpZiBwYWRkaW5nX2xlbmd0aCA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHgwMF0pCisgICAgICAgIGVsaWYgcGFkZGluZ19sZW5ndGggPiAxOgorICAgICAgICAgICAgcGFkZGluZ19sZW5ndGggLT0gMgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShbMHgwMSwgcGFkZGluZ19sZW5ndGhdKSArIGJ5dGVhcnJheShbMHgwMCBmb3IgXyBpbiByYW5nZShwYWRkaW5nX2xlbmd0aCldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheSgpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX2J5dGVzX2Zyb21fSG9wQnlIb3Bfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG5leHRfaGVhZGVyID0gYW55X25leHRfaGVhZGVyKCkKKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb24gPSBhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb24oKQorICAgICAgICBoZHJfZXh0X2xlbiA9IHNlbGYuX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbigyICsgbGVuKGhvcF9ieV9ob3Bfb3B0aW9uKSkKKworICAgICAgICBob3BfYnlfaG9wID0gSG9wQnlIb3AobmV4dF9oZWFkZXIsIFtob3BfYnlfaG9wX29wdGlvbl0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGRhdGEgPSBob3BfYnlfaG9wLnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGJ5dGVhcnJheShbbmV4dF9oZWFkZXIsIGhkcl9leHRfbGVuXSkgKyBob3BfYnlfaG9wX29wdGlvbi50b19ieXRlcygpCisgICAgICAgIHBhZGRpbmdfbGVuZ3RoID0gc2VsZi5fY2FsY3VsYXRlX3JlcXVpcmVkX3BhZGRpbmcobGVuKGV4cGVjdGVkX2RhdGEpKQorICAgICAgICBleHBlY3RlZF9kYXRhICs9IHNlbGYuY3JlYXRlX3BhZGRpbmcocGFkZGluZ19sZW5ndGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kYXRhLCBkYXRhKQorCisKK2NsYXNzIFRlc3RNUExPcHRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfTVBMT3B0aW9uX3RvX2J5dGVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBTID0gYW55X21wbF9TKCkKKyAgICAgICAgTSA9IGFueV9tcGxfTSgpCisgICAgICAgIFYgPSBhbnlfbXBsX1YoKQorICAgICAgICBzZXF1ZW5jZSA9IGFueV9tcGxfc2VxdWVuY2UoKQorICAgICAgICBzZWVkX2lkID0gYW55X21wbF9zZWVkX2lkKFMpCisKKyAgICAgICAgbXBsX29wdGlvbiA9IE1QTE9wdGlvbihTLCBNLCBWLCBzZXF1ZW5jZSwgc2VlZF9pZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZGF0YSA9IG1wbF9vcHRpb24udG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZF9kYXRhID0gYnl0ZWFycmF5KFsoUyA8PCA2KSB8IChNIDw8IDUpIHwgKFYgPDwgNCksIHNlcXVlbmNlXSkgKyBzZWVkX2lkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGF0YSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTVBMT3B0aW9uX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2RhdGEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgUyA9IGFueV9tcGxfUygpCisgICAgICAgIE0gPSBhbnlfbXBsX00oKQorICAgICAgICBWID0gYW55X21wbF9WKCkKKyAgICAgICAgc2VxdWVuY2UgPSBhbnlfbXBsX3NlcXVlbmNlKCkKKyAgICAgICAgc2VlZF9pZCA9IGFueV9tcGxfc2VlZF9pZChTKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWyhTIDw8IDYpIHwgKE0gPDwgNSkgfCAoViA8PCA0KSwgc2VxdWVuY2VdKSArIHNlZWRfaWQKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbXBsX29wdGlvbiA9IE1QTE9wdGlvbi5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUywgbXBsX29wdGlvbi5TKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE0sIG1wbF9vcHRpb24uTSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWLCBtcGxfb3B0aW9uLlYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxdWVuY2UsIG1wbF9vcHRpb24uc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VlZF9pZCwgbXBsX29wdGlvbi5zZWVkX2lkKQorCisgICAgZGVmIHRlc3RfY2hlY2tfaWZfbXBsX3NlZWRfaWRfbGVuZ3RoX3ZhbHVlc193YXNfbm90X2NoYW5nZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgTVBMT3B0aW9uLl9zZWVkX2lkX2xlbmd0aFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBNUExPcHRpb24uX3NlZWRfaWRfbGVuZ3RoWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIE1QTE9wdGlvbi5fc2VlZF9pZF9sZW5ndGhbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTYsIE1QTE9wdGlvbi5fc2VlZF9pZF9sZW5ndGhbM10pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3Byb3Blcl9sZW5ndGhfd2hlbl9sZW5faXNfY2FsbGVkX3dpdGhfbXBsX29wdGlvbl9vYmplY3Qoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgUyA9IGFueV9tcGxfUygpCisgICAgICAgIE0gPSBhbnlfbXBsX00oKQorICAgICAgICBWID0gYW55X21wbF9WKCkKKyAgICAgICAgc2VxdWVuY2UgPSBhbnlfbXBsX3NlcXVlbmNlKCkKKyAgICAgICAgc2VlZF9pZCA9IGFueV9tcGxfc2VlZF9pZChTKQorCisgICAgICAgIG1wbF9vcHRpb24gPSBNUExPcHRpb24oUywgTSwgViwgc2VxdWVuY2UsIHNlZWRfaWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG1wbF9vcHRpb25fbGVuZ3RoID0gbGVuKG1wbF9vcHRpb24pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIFNNVl9hbmRfc2VxdWVuY2VfbGVuZ3RoID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNNVl9hbmRfc2VxdWVuY2VfbGVuZ3RoICsgbGVuKHNlZWRfaWQpLCBtcGxfb3B0aW9uX2xlbmd0aCkKKworCitjbGFzcyBUZXN0Y2xhc3NIb3BCeUhvcE9wdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY29udmVydF9Ib3BCeUhvcE9wdGlvbl90b19ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGVuZ3RoID0gYW55X2xlbmd0aCgpCisgICAgICAgIGhlYWRlciA9IGFueV9ob3BfYnlfaG9wX2J5dGVzX29wdGlvbl9oZWFkZXIobGVuZ3RoKQorICAgICAgICB2YWx1ZSA9IGFueV9ob3BfYnlfaG9wX2J5dGVzX3ZhbHVlKGxlbmd0aCkKKworICAgICAgICBob3BfYnlfaG9wX29wdGlvbiA9IEhvcEJ5SG9wT3B0aW9uKGhlYWRlciwgdmFsdWUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGRhdGEgPSBob3BfYnlfaG9wX29wdGlvbi50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBoZWFkZXIudG9fYnl0ZXMoKSArIHZhbHVlLnRvX2J5dGVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kYXRhLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9sZW5ndGhfb2ZfSG9wQnlIb3BPcHRpb25fd2hlbl9sZW5faXNfY2FsbGVkX3dpdGhfaG9wX2J5X2hvcF9vcHRpb25fb2JqZWN0KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxlbmd0aCA9IGFueV9sZW5ndGgoKQorICAgICAgICBoZWFkZXIgPSBhbnlfaG9wX2J5X2hvcF9ieXRlc19vcHRpb25faGVhZGVyKGxlbmd0aCkKKyAgICAgICAgdmFsdWUgPSBhbnlfaG9wX2J5X2hvcF9ieXRlc192YWx1ZShsZW5ndGgpCisKKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb24gPSBIb3BCeUhvcE9wdGlvbihoZWFkZXIsIHZhbHVlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBob3BfYnlfaG9wX29wdGlvbl9sZW5ndGggPSBsZW4oaG9wX2J5X2hvcF9vcHRpb24pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGhlYWRlcl9sZW5ndGggPSAyCisgICAgICAgIGV4cGVjdGVkX2hvcF9ieV9ob3Bfb3B0aW9uX2xlbmd0aCA9IGhlYWRlcl9sZW5ndGggKyBsZW5ndGgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9ob3BfYnlfaG9wX29wdGlvbl9sZW5ndGgsIGhvcF9ieV9ob3Bfb3B0aW9uX2xlbmd0aCkKKworCitjbGFzcyBUZXN0SG9wQnlIb3BPcHRpb25IZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NvbnZlcnRfSG9wQnlIb3BPcHRpb25IZWFkZXJfdG9fYnl0ZXNfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIF90eXBlID0gYW55X3R5cGUoKQorICAgICAgICBsZW5ndGggPSBhbnlfbGVuZ3RoKCkKKworICAgICAgICBob3BfYnlfaG9wX29wdGlvbl9oZWFkZXIgPSBIb3BCeUhvcE9wdGlvbkhlYWRlcihfdHlwZSwgbGVuZ3RoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBkYXRhID0gaG9wX2J5X2hvcF9vcHRpb25faGVhZGVyLnRvX2J5dGVzKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGJ5dGVhcnJheShbX3R5cGUsIGxlbmd0aF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGF0YSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSG9wQnlIb3BPcHRpb25IZWFkZXJfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkX3dpdGhfZGF0YShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKyAgICAgICAgbGVuZ3RoID0gYW55X2xlbmd0aCgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbX3R5cGUsIGxlbmd0aF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG9wdGlvbl9oZWFkZXIgPSBIb3BCeUhvcE9wdGlvbkhlYWRlci5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3R5cGUsIG9wdGlvbl9oZWFkZXIudHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGgsIG9wdGlvbl9oZWFkZXIubGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9wcm9wZXJfbGVuZ3RoX3doZW5fbGVuX2lzX2NhbGxlZF93aXRoX0hvcEJ5SG9wT3B0aW9uSGVhZGVyX29iamVjdChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfdHlwZSA9IGFueV90eXBlKCkKKyAgICAgICAgbGVuZ3RoID0gYW55X2xlbmd0aCgpCisKKyAgICAgICAgb3B0aW9uX2hlYWRlciA9IEhvcEJ5SG9wT3B0aW9uSGVhZGVyKF90eXBlLCBsZW5ndGgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIG9wdGlvbl9oZWFkZXJfbGVuZ3RoID0gbGVuKG9wdGlvbl9oZWFkZXIpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGV4cGVjdGVkX29wdGlvbl9oZWFkZXJfbGVuZ3RoID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX29wdGlvbl9oZWFkZXJfbGVuZ3RoLCBvcHRpb25faGVhZGVyX2xlbmd0aCkKKworCitjbGFzcyBUZXN0SG9wQnlIb3BGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY2FsY3VsYXRlX2hkcl9leHRfbGVuKHNlbGYsIHBheWxvYWRfbGVuZ3RoKToKKyAgICAgICAgY291bnQgPSBwYXlsb2FkX2xlbmd0aCA+PiAzCisKKyAgICAgICAgaWYgKHBheWxvYWRfbGVuZ3RoICYgMHg3KSA9PSAwIGFuZCBjb3VudCA+IDA6CisgICAgICAgICAgICByZXR1cm4gY291bnQgLSAxCisKKyAgICAgICAgcmV0dXJuIGNvdW50CisKKyAgICBkZWYgcGFkZGluZyhzZWxmLCBjb250ZW50X2xlbmd0aCk6CisgICAgICAgIGV4Y2Vzc19ieXRlcyA9IGNvbnRlbnRfbGVuZ3RoICYgMHg3CisKKyAgICAgICAgaWYgZXhjZXNzX2J5dGVzID4gMDoKKyAgICAgICAgICAgIHBhZGRpbmdfbGVuZ3RoID0gOCAtIGV4Y2Vzc19ieXRlcworCisgICAgICAgICAgICBpZiBwYWRkaW5nX2xlbmd0aCA9PSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4MDBdKQorICAgICAgICAgICAgZWxpZiBwYWRkaW5nX2xlbmd0aCA+IDE6CisgICAgICAgICAgICAgICAgcGFkZGluZ19sZW5ndGggLT0gMgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoWzB4MDEsIHBhZGRpbmdfbGVuZ3RoXSkgKyBieXRlYXJyYXkoWzB4MDAgZm9yIF8gaW4gcmFuZ2UocGFkZGluZ19sZW5ndGgpXSkKKworICAgICAgICByZXR1cm4gYnl0ZWFycmF5KCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSG9wQnlIb3Bfb2JqZWN0X2luc3RhbmNlX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2RhdGEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb24gPSBhbnlfaG9wX2J5X2hvcF9tcGxfb3B0aW9uKCkKKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25fdHlwZSA9IGhvcF9ieV9ob3Bfb3B0aW9uLmhlYWRlci50eXBlCisKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBhbnlfbmV4dF9oZWFkZXIoKQorICAgICAgICBoZHJfZXh0X2xlbiA9IHNlbGYuX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbigyICsgbGVuKGhvcF9ieV9ob3Bfb3B0aW9uKSkKKworICAgICAgICBob3BfYnlfaG9wX2ZhY3RvcnkgPSBIb3BCeUhvcEZhY3RvcnkoCisgICAgICAgICAgICBob3BfYnlfaG9wX29wdGlvbnNfZmFjdG9yeT1Ib3BCeUhvcE9wdGlvbnNGYWN0b3J5KAorICAgICAgICAgICAgICAgIG9wdGlvbnNfZmFjdG9yaWVzPXsKKyAgICAgICAgICAgICAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25fdHlwZTogTVBMT3B0aW9uRmFjdG9yeSgpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbbmV4dF9oZWFkZXIsIGhkcl9leHRfbGVuXSkgKyBob3BfYnlfaG9wX29wdGlvbi50b19ieXRlcygpCisgICAgICAgIGRhdGEgKz0gc2VsZi5wYWRkaW5nKGxlbihkYXRhKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaG9wX2J5X2hvcCA9IGhvcF9ieV9ob3BfZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wX2J5X2hvcF9vcHRpb24udmFsdWUuUywgaG9wX2J5X2hvcC5vcHRpb25zWzBdLnZhbHVlLlMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wX2J5X2hvcF9vcHRpb24udmFsdWUuViwgaG9wX2J5X2hvcC5vcHRpb25zWzBdLnZhbHVlLlYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wX2J5X2hvcF9vcHRpb24udmFsdWUuTSwgaG9wX2J5X2hvcC5vcHRpb25zWzBdLnZhbHVlLk0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wX2J5X2hvcF9vcHRpb24udmFsdWUuc2VxdWVuY2UsIGhvcF9ieV9ob3Aub3B0aW9uc1swXS52YWx1ZS5zZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3BfYnlfaG9wX29wdGlvbi52YWx1ZS5zZWVkX2lkLCBob3BfYnlfaG9wLm9wdGlvbnNbMF0udmFsdWUuc2VlZF9pZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9SdW50aW1lRXJyb3Jfd2hlbl9ub19vcHRpb25fZmFjdG9yeV9pc19zZXRfYW5kX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb24gPSBhbnlfaG9wX2J5X2hvcF9tcGxfb3B0aW9uKCkKKyAgICAgICAgaG9wX2J5X2hvcF9vcHRpb25fdHlwZSA9IGhvcF9ieV9ob3Bfb3B0aW9uLmhlYWRlci50eXBlCisKKyAgICAgICAgbmV4dF9oZWFkZXIgPSBhbnlfbmV4dF9oZWFkZXIoKQorICAgICAgICBoZHJfZXh0X2xlbiA9IHNlbGYuX2NhbGN1bGF0ZV9oZHJfZXh0X2xlbigyICsgbGVuKGhvcF9ieV9ob3Bfb3B0aW9uKSkKKworICAgICAgICBob3BfYnlfaG9wX2ZhY3RvcnkgPSBIb3BCeUhvcEZhY3RvcnkoaG9wX2J5X2hvcF9vcHRpb25zX2ZhY3Rvcnk9SG9wQnlIb3BPcHRpb25zRmFjdG9yeSgpKQorCisgICAgICAgIGRhdGEgPSBieXRlcyhbbmV4dF9oZWFkZXIsIGhkcl9leHRfbGVuXSkgKyBob3BfYnlfaG9wX29wdGlvbi50b19ieXRlcygpCisgICAgICAgIGRhdGEgKz0gc2VsZi5wYWRkaW5nKGxlbihkYXRhKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBob3BfYnlfaG9wX2ZhY3RvcnkucGFyc2UsIGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworCitjbGFzcyBUZXN0TVBMT3B0aW9uRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcHJvZHVjZV9NUExPcHRpb25fZnJvbV9ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9kYXRhKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIFMgPSBhbnlfbXBsX1MoKQorICAgICAgICBNID0gYW55X21wbF9NKCkKKyAgICAgICAgViA9IGFueV9tcGxfVigpCisgICAgICAgIHNlcXVlbmNlID0gYW55X21wbF9zZXF1ZW5jZSgpCisgICAgICAgIHNlZWRfaWQgPSBhbnlfbXBsX3NlZWRfaWQoUykKKworICAgICAgICBTTVYgPSAoUyA8PCA2KSB8IChNIDw8IDUpIHwgKFYgPDwgNCkKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbU01WLCBzZXF1ZW5jZV0pICsgc2VlZF9pZAorCisgICAgICAgIGZhY3RvcnkgPSBNUExPcHRpb25GYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbXBsX29wdCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1wbF9vcHQuUywgUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcGxfb3B0Lk0sIE0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXBsX29wdC5WLCBWKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1wbF9vcHQuc2VxdWVuY2UsIHNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1wbF9vcHQuc2VlZF9pZCwgc2VlZF9pZCkKKworCitjbGFzcyBUZXN0VWRwQmFzZWRPblNyY0RzdFBvcnRzUGF5bG9hZEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9wYXlsb2FkX2Zyb21fZGF0YV93aGVuX3NyY19wb3J0X2ZhY3RvcnlfaXNfZGVmaW5lZF9hbmRfcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zcmNfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRzdF9wb3J0ID0gYW55X3BvcnQoKQorCisgICAgICAgIGZhY3RvcnkgPSBVZHBCYXNlZE9uU3JjRHN0UG9ydHNQYXlsb2FkRmFjdG9yeSgKKyAgICAgICAgICAgIHNyY19kc3RfcG9ydF9iYXNlZF9wYXlsb2FkX2ZhY3Rvcmllcz17CisgICAgICAgICAgICAgICAgbWVzc2FnZV9pbmZvLnNyY19wb3J0OiBCeXRlc1BheWxvYWRGYWN0b3J5KCkKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kYXRhID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYWN0dWFsX2RhdGEuZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfcGF5bG9hZF9mcm9tX2RhdGFfd2hlbl9kc3RfcG9ydF9mYWN0b3J5X2lzX2RlZmluZWRfYW5kX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3JjX3BvcnQgPSBhbnlfcG9ydCgpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kc3RfcG9ydCA9IGFueV9wb3J0KCkKKworICAgICAgICBmYWN0b3J5ID0gVWRwQmFzZWRPblNyY0RzdFBvcnRzUGF5bG9hZEZhY3RvcnkoCisgICAgICAgICAgICBzcmNfZHN0X3BvcnRfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXM9eworICAgICAgICAgICAgICAgIG1lc3NhZ2VfaW5mby5kc3RfcG9ydDogQnl0ZXNQYXlsb2FkRmFjdG9yeSgpCisgICAgICAgICAgICB9KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGF0YSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGFjdHVhbF9kYXRhLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfUnVudGltZUVycm9yX3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZF9idXRfcmVxdWlyZWRfZmFjdG9yeV9pc19ub3RfZGVmaW5lZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zcmNfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRzdF9wb3J0ID0gYW55X3BvcnQoKQorCisgICAgICAgIGZhY3RvcnkgPSBVZHBCYXNlZE9uU3JjRHN0UG9ydHNQYXlsb2FkRmFjdG9yeShzcmNfZHN0X3BvcnRfYmFzZWRfcGF5bG9hZF9mYWN0b3JpZXM9e30pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZmFjdG9yeS5wYXJzZSwgaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisKK2NsYXNzIFRlc3RVRFBEYXRhZ3JhbUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3Byb2R1Y2VfVURQRGF0YWdyYW1fZnJvbV9ieXRlc193aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWRfd2l0aF9kYXRhKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNyY19wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBkc3RfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIHBheWxvYWQgPSBhbnlfcGF5bG9hZCgpCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gbGVuKHBheWxvYWQpICsgbGVuKFVEUEhlYWRlcigwLCAwKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsoc3JjX3BvcnQgPj4gOCksIChzcmNfcG9ydCAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZHN0X3BvcnQgPj4gOCksIChkc3RfcG9ydCAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAocGF5bG9hZF9sZW5ndGggPj4gOCksIChwYXlsb2FkX2xlbmd0aCAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tzdW0gPj4gOCksIChjaGVja3N1bSAmIDB4RkYpXSkgKyBwYXlsb2FkCisKKyAgICAgICAgZmFjdG9yeSA9IFVEUERhdGFncmFtRmFjdG9yeShVRFBIZWFkZXJGYWN0b3J5KCksIEJ5dGVzUGF5bG9hZEZhY3RvcnkoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdWRwX2RncmFtID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBhbnlfbWVzc2FnZV9pbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWRwX2RncmFtLmhlYWRlci5zcmNfcG9ydCwgc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWRwX2RncmFtLmhlYWRlci5kc3RfcG9ydCwgZHN0X3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWRwX2RncmFtLmhlYWRlci5wYXlsb2FkX2xlbmd0aCwgcGF5bG9hZF9sZW5ndGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWRwX2RncmFtLmhlYWRlci5jaGVja3N1bSwgY2hlY2tzdW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWRwX2RncmFtLnBheWxvYWQuZGF0YSwgcGF5bG9hZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9zZXRfc3JjX2FuZF9kc3RfcG9ydF9pbl9tZXNzYWdlX2luZm9fd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGFueV9tZXNzYWdlX2luZm8oKQorCisgICAgICAgIHNyY19wb3J0ID0gYW55X3BvcnQoKQorICAgICAgICBkc3RfcG9ydCA9IGFueV9wb3J0KCkKKyAgICAgICAgY2hlY2tzdW0gPSBhbnlfY2hlY2tzdW0oKQorCisgICAgICAgIHBheWxvYWQgPSBhbnlfcGF5bG9hZCgpCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gbGVuKHBheWxvYWQpICsgbGVuKFVEUEhlYWRlcigwLCAwKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsoc3JjX3BvcnQgPj4gOCksIChzcmNfcG9ydCAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZHN0X3BvcnQgPj4gOCksIChkc3RfcG9ydCAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAocGF5bG9hZF9sZW5ndGggPj4gOCksIChwYXlsb2FkX2xlbmd0aCAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tzdW0gPj4gOCksIChjaGVja3N1bSAmIDB4RkYpXSkgKyBwYXlsb2FkCisKKyAgICAgICAgZmFjdG9yeSA9IFVEUERhdGFncmFtRmFjdG9yeShVRFBIZWFkZXJGYWN0b3J5KCksIEJ5dGVzUGF5bG9hZEZhY3RvcnkoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdWRwX2RncmFtID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjX3BvcnQsIG1lc3NhZ2VfaW5mby5zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfcG9ydCwgbWVzc2FnZV9pbmZvLmRzdF9wb3J0KQorCisKK2NsYXNzIFRlc3RJQ01QdjZGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wcm9kdWNlX0lDTVB2Nl9mcm9tX2J5dGVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2RhdGEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKyAgICAgICAgYm9keSA9IGFueV9ib2R5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtfdHlwZSwgY29kZSwgKGNoZWNrc3VtID4+IDgpLCAoY2hlY2tzdW0gJiAweEZGKV0pICsgYm9keQorCisgICAgICAgIGZhY3RvcnkgPSBJQ01QdjZGYWN0b3J5KGJvZHlfZmFjdG9yaWVzPXtfdHlwZTogSUNNUHY2Qnl0ZXNCb2R5RmFjdG9yeSgpfSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaWNtcHY2X21zZyA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGljbXB2Nl9tc2cuaGVhZGVyLnR5cGUsIF90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGljbXB2Nl9tc2cuaGVhZGVyLmNvZGUsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWNtcHY2X21zZy5oZWFkZXIuY2hlY2tzdW0sIGNoZWNrc3VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGljbXB2Nl9tc2cuYm9keS5ieXRlcywgYm9keSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9SdW50aW1lRXJyb3Jfd2hlbl9tZXRob2RfcGFyc2VfaXNfY2FsbGVkX2J1dF9ib2R5X2ZhY3RvcnlfaXNfbm90X3ByZXNlbnQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgX3R5cGUgPSBhbnlfdHlwZSgpCisgICAgICAgIGNvZGUgPSBhbnlfY29kZSgpCisgICAgICAgIGNoZWNrc3VtID0gYW55X2NoZWNrc3VtKCkKKyAgICAgICAgYm9keSA9IGFueV9ib2R5KCkKKworICAgICAgICBkYXRhID0gYnl0ZXMoW190eXBlLCBjb2RlLCAoY2hlY2tzdW0gPj4gOCksIChjaGVja3N1bSAmIDB4RkYpXSkgKyBib2R5CisKKyAgICAgICAgZmFjdG9yeSA9IElDTVB2NkZhY3RvcnkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZhY3RvcnkucGFyc2UsIGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworCitjbGFzcyBUZXN0Qnl0ZXNQYXlsb2FkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQnl0ZXNQYXlsb2FkX3doZW5fZnJvbV9ieXRlc19jbGFzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbCA9IEJ5dGVzUGF5bG9hZC5mcm9tX2J5dGVzKGRhdGEpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYWN0dWFsLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2V4YWN0bHlfdGhlX3NhbWVfZGF0YV9hc19wYXNzZWRfdG9fY29uc3RydWN0b3Jfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisgICAgICAgIHBheWxvYWQgPSBCeXRlc1BheWxvYWQoZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsID0gcGF5bG9hZC50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYWN0dWFsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90aGVfc2FtZV9sZW5ndGhfYXNfZGF0YV9wYXNzZWRfdG9fY29uc3RydWN0b3Jfd2hlbl9sZW5faXNfY2FsbGVkX29uX0J5dGVzUGF5bG9hZF9vYmplY3Qoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKyAgICAgICAgcGF5bG9hZCA9IEJ5dGVzUGF5bG9hZChkYXRhKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBsZW4ocGF5bG9hZCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGF0YSksIGFjdHVhbCkKKworCitjbGFzcyBUZXN0SUNNUHY2RWNob0JvZHkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29udmVydF9JQ01QdjZfZWNob19ib2R5X3RvX2RhdGFfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlkZW50aWZpZXIgPSBhbnlfaWRlbnRpZmllcigpCisgICAgICAgIHNlcXVlbmNlX251bWJlciA9IGFueV9zZXF1ZW5jZV9udW1iZXIoKQorICAgICAgICBkYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIGJvZHkgPSBJQ01QdjZFY2hvQm9keShpZGVudGlmaWVyLCBzZXF1ZW5jZV9udW1iZXIsIGRhdGEpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbCA9IGJvZHkudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZCA9IGJ5dGVhcnJheShbaWRlbnRpZmllciA+PiA4LCBpZGVudGlmaWVyICYgMHhGRiwgc2VxdWVuY2VfbnVtYmVyID4+IDgsIHNlcXVlbmNlX251bWJlciAmIDB4RkZdKSArIGRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9JQ01QdjZFY2hvQm9keV9mcm9tX2RhdGFfd2hlbl9mcm9tX2J5dGVzX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZGVudGlmaWVyID0gYW55X2lkZW50aWZpZXIoKQorICAgICAgICBzZXF1ZW5jZV9udW1iZXIgPSBhbnlfc2VxdWVuY2VfbnVtYmVyKCkKKyAgICAgICAgYm9keV9kYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWyhpZGVudGlmaWVyID4+IDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoaWRlbnRpZmllciAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VxdWVuY2VfbnVtYmVyID4+IDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VxdWVuY2VfbnVtYmVyICYgMHhGRildKQorICAgICAgICBkYXRhICs9IGJvZHlfZGF0YQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBJQ01QdjZFY2hvQm9keS5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRlbnRpZmllciwgYWN0dWFsLmlkZW50aWZpZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxdWVuY2VfbnVtYmVyLCBhY3R1YWwuc2VxdWVuY2VfbnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvZHlfZGF0YSwgYWN0dWFsLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfYnVpbGRfSUNNUHY2RWNob0JvZHlfZnJvbV93ZWxsX2tub3dfdmFsdWVzX3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBib2R5ID0gSUNNUHY2RWNob0JvZHkoMCwgMiwgYnl0ZWFycmF5KFsweDgwLCAweDAwLCAweGM3LCAweGJmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxXSkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbCA9IGJvZHkudG9fYnl0ZXMoKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBleHBlY3RlZCA9IGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMCwgMHhjNywgMHhiZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxLCAweDQxXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCisKKworY2xhc3MgVGVzdElDTVB2NkVjaG9Cb2R5RmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfYnVpbGRfSUNNUHY2RWNob0JvZHlfd2hlbl90b19ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlkZW50aWZpZXIgPSBhbnlfaWRlbnRpZmllcigpCisgICAgICAgIHNlcXVlbmNlX251bWJlciA9IGFueV9zZXF1ZW5jZV9udW1iZXIoKQorICAgICAgICBib2R5X2RhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbKGlkZW50aWZpZXIgPj4gOCkgJiAweEZGLCBpZGVudGlmaWVyICYgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcXVlbmNlX251bWJlciA+PiA4KSAmIDB4RkYsIHNlcXVlbmNlX251bWJlciAmIDB4RkZdKSArIGJvZHlfZGF0YQorCisgICAgICAgIGZhY3RvcnkgPSBJQ01QdjZFY2hvQm9keUZhY3RvcnkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWwgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGFueV9tZXNzYWdlX2luZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsLCBJQ01QdjZFY2hvQm9keSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZGVudGlmaWVyLCBhY3R1YWwuaWRlbnRpZmllcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXF1ZW5jZV9udW1iZXIsIGFjdHVhbC5zZXF1ZW5jZV9udW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9keV9kYXRhLCBhY3R1YWwuZGF0YSkKKworCitjbGFzcyBUZXN0SUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY29udmVydF9JQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlX3RvX2J5dGVhcnJheV93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKCkKKworICAgICAgICBpY21wdjZfZGVzdF91bnJlYWNoYWJsZSA9IElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGUoZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RhdGEgPSBpY21wdjZfZGVzdF91bnJlYWNoYWJsZS50b19ieXRlcygpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAwXSkgKyBkYXRhLCBhY3R1YWxfZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jb252ZXJ0X2J5dGVhcnJheV90b19JQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlX3doZW5fZnJvbV9ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGljbXB2Nl9kZXN0X3VucmVhY2hhYmxlID0gSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZS5mcm9tX2J5dGVzKAorICAgICAgICAgICAgaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSArIGRhdGEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGljbXB2Nl9kZXN0X3VucmVhY2hhYmxlLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfUnVudGltZUVycm9yX3doZW5fZnJvbV9ieXRlc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YSgpCisKKyAgICAgICAgdW51c2VkID0gcmFuZG9tLnJhbmRpbnQoMSwgMSA8PCAzMikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBJQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlLmZyb21fYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlvLkJ5dGVzSU8oYnl0ZWFycmF5KHN0cnVjdC5wYWNrKCI+SSIsIHVudXNlZCkpICsgZGF0YSkpCisKKworY2xhc3MgVGVzdElDTVB2NkRlc3RpbmF0aW9uVW5yZWFjaGFibGVGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSUNNUHY2RGVzdGluYXRpb25VbnJlYWNoYWJsZV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaWNtcF9kYXRhID0gYW55X2RhdGEoKQorCisgICAgICAgIGZhY3RvcnkgPSBJQ01QdjZEZXN0aW5hdGlvblVucmVhY2hhYmxlRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pICsgaWNtcF9kYXRhCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGljbXB2Nl9kZXN0X3VucmVhY2hhYmxlPWZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGljbXBfZGF0YSwgaWNtcHY2X2Rlc3RfdW5yZWFjaGFibGUuZGF0YSkKKworCitjbGFzcyBUZXN0VURQSGVhZGVyRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1VEUEhlYWRlcl93aGVuX3RvX2J5dGVzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeT1VRFBIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBzcmNfcG9ydD1hbnlfcG9ydCgpCisgICAgICAgIGRzdF9wb3J0PWFueV9wb3J0KCkKKyAgICAgICAgcGF5bG9hZF9sZW5ndGg9YW55X3BheWxvYWRfbGVuZ3RoKCkKKyAgICAgICAgY2hlY2tzdW09YW55X2NoZWNrc3VtKCkKKworICAgICAgICBkYXRhPXN0cnVjdC5wYWNrKCIhSCIsIHNyY19wb3J0KSArIHN0cnVjdC5wYWNrKCIhSCIsIGRzdF9wb3J0KSArIFwKKyAgICAgICAgICAgIHN0cnVjdC5wYWNrKCIhSCIsIHBheWxvYWRfbGVuZ3RoKSArIHN0cnVjdC5wYWNrKCIhSCIsIGNoZWNrc3VtKQorCisgICAgICAgICMgV0hFTgorICAgICAgICB1ZHBfaGVhZGVyPWZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY19wb3J0LCB1ZHBfaGVhZGVyLnNyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9wb3J0LCB1ZHBfaGVhZGVyLmRzdF9wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWRfbGVuZ3RoLCB1ZHBfaGVhZGVyLnBheWxvYWRfbGVuZ3RoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrc3VtLCB1ZHBfaGVhZGVyLmNoZWNrc3VtKQorCisKK2NsYXNzIFRlc3RIb3BCeUhvcE9wdGlvbnNGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfb3B0aW9uX2Zyb21fYnl0ZWFycmF5X3doZW5fdG9fYnl0ZXNfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorCisgICAgICAgIGNsYXNzIER1bW15T3B0aW9uRmFjdG9yeToKKworICAgICAgICAgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVhZCgpCisKKyAgICAgICAgZmFjdG9yeT1Ib3BCeUhvcE9wdGlvbnNGYWN0b3J5KG9wdGlvbnNfZmFjdG9yaWVzID0gezI6IER1bW15T3B0aW9uRmFjdG9yeSgpfSkKKworICAgICAgICBkYXRhPWJ5dGVhcnJheShbMHgwMiwgMHgwMywgMHgxMSwgMHgyMiwgMHgzMywgMHgwMSwgMHgwMF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9vcHRpb25zPWZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgYW55X21lc3NhZ2VfaW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihhY3R1YWxfb3B0aW9ucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYWN0dWFsX29wdGlvbnNbMF0uaGVhZGVyLnR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYWN0dWFsX29wdGlvbnNbMF0uaGVhZGVyLmxlbmd0aCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X2xvd3Bhbi5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9sb3dwYW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlmNWIyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9sb3dwYW4ucHkKQEAgLTAsMCArMSwyNjk0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGlvCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbW1vbgoraW1wb3J0IGNvbmZpZworaW1wb3J0IGlwdjYKK2ltcG9ydCBsb3dwYW4KKworCitkZWYgY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpOgorICAgIHJldHVybiBsb3dwYW4uTG93cGFuUGFyc2VyKAorICAgICAgICBsb3dwYW5fbWVzaF9oZWFkZXJfZmFjdG9yeT1sb3dwYW4uTG93cGFuTWVzaEhlYWRlckZhY3RvcnkoKSwKKyAgICAgICAgbG93cGFuX2RlY29tcHJlc3Nvcj1jb25maWcuY3JlYXRlX2RlZmF1bHRfbG93cGFuX2RlY29tcHJlc3Nvcihjb250ZXh0X21hbmFnZXIpLAorICAgICAgICBsb3dwYW5fZnJhZ2VtZW50c19idWZmZXJzX21hbmFnZXI9bG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcnNNYW5hZ2VyKCksCisgICAgICAgIGlwdjZfcGFja2V0X2ZhY3Rvcnk9aXB2Ni5JUHY2UGFja2V0RmFjdG9yeSgKKyAgICAgICAgICAgIGVoZj1jb25maWcuY3JlYXRlX2RlZmF1bHRfaXB2Nl9leHRlbnNpb25faGVhZGVyc19mYWN0b3JpZXMoKSwKKyAgICAgICAgICAgIHVscGY9eworICAgICAgICAgICAgICAgIDE3OiBpcHY2LlVEUERhdGFncmFtRmFjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgdWRwX2hlYWRlcl9mYWN0b3J5PWlwdjYuVURQSGVhZGVyRmFjdG9yeSgpLAorICAgICAgICAgICAgICAgICAgICB1ZHBfcGF5bG9hZF9mYWN0b3J5PWlwdjYuQnl0ZXNQYXlsb2FkRmFjdG9yeSgpKSwKKyAgICAgICAgICAgICAgICA1ODogaXB2Ni5JQ01QdjZGYWN0b3J5KAorICAgICAgICAgICAgICAgICAgICBib2R5X2ZhY3Rvcmllcz1jb25maWcuY3JlYXRlX2RlZmF1bHRfaXB2Nl9pY21wX2JvZHlfZmFjdG9yaWVzKCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICB9CisgICAgICAgICkKKyAgICApCisKKworZGVmIGFueV90ZigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X25oKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfaGxpbSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X2NpZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3NhYygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3NhbSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X20oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9kYWMoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9kYW0oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9lY24oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9kc2NwKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg2KQorCisKK2RlZiBhbnlfZmxvd19sYWJlbCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNikKKworCitkZWYgYW55X2hvcF9saW1pdCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X3NyY19hZGRyKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDE2KV0pCisKKworZGVmIGFueV9kc3RfYWRkcigpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSgxNildKQorCisKK2RlZiBhbnlfZXVpNjQoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfcmxvYzE2KCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDIpXSkKKworCitkZWYgYW55XzQ4Yml0c19hZGRyKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDYpXSkKKworCitkZWYgYW55XzMyYml0c19hZGRyKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDQpXSkKKworCitkZWYgYW55XzhiaXRzX2FkZHIoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCldKQorCisKK2RlZiBhbnlfYygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3AoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9zcmNfcG9ydCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9kc3RfcG9ydCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9jb21wcmVzc2FibGVfc3JjX3BvcnQoKToKKyAgICByZXR1cm4gMHhmMDAwICsgcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9jb21wcmVzc2FibGVfZHN0X3BvcnQoKToKKyAgICByZXR1cm4gMHhmMDAwICsgcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9uaWJibGVfc3JjX3BvcnQoKToKKyAgICByZXR1cm4gMHhmMGIwICsgcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9uaWJibGVfZHN0X3BvcnQoKToKKyAgICByZXR1cm4gMHhmMGIwICsgcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9jaGVja3N1bSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9uZXh0X2hlYWRlcigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X3NjaSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X2RjaSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X3NyY19tYWNfYWRkcigpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg4KV0pCisKKworZGVmIGFueV9kc3RfbWFjX2FkZHIoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfY29udGV4dCgpOgorICAgIHByZWZpeCA9IGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKHJhbmRvbS5yYW5kaW50KDIsIDE1KSldKQorICAgIHByZWZpeF9sZW5ndGggPSBsZW4ocHJlZml4KQorICAgIHJldHVybiBsb3dwYW4uQ29udGV4dChwcmVmaXgsIHByZWZpeF9sZW5ndGggKiA4KQorCisKK2RlZiBhbnlfbWFjX2FkZHJlc3MoKToKKyAgICBsZW5ndGggPSByYW5kb20uY2hvaWNlKFsyLCA4XSkKKyAgICBpZiBsZW5ndGggPT0gMjoKKyAgICAgICAgcmV0dXJuIGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fcmxvYzE2KGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKSkKKyAgICBlbGlmIGxlbmd0aCA9PSA4OgorICAgICAgICByZXR1cm4gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkpCisKKworZGVmIGFueV9ob3BzX2xlZnQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9kYXRhKGxlbmd0aD1Ob25lKToKKyAgICBsZW5ndGggPSBsZW5ndGggaWYgbGVuZ3RoIGlzIG5vdCBOb25lIGVsc2UgcmFuZG9tLnJhbmRpbnQoMSwgNjQpCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCldKQorCisKK2RlZiBhbnlfZGF0YWdyYW1fc2l6ZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTEpCisKKworZGVmIGFueV9kYXRhZ3JhbV90YWcoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfZGF0YWdyYW1fb2Zmc2V0KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2NsYXNzIFRlc3RMb3dwYW5JUEhDKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTG93cGFuSVBIQ19vYmplY3Rfd2hlbl9mcm9tX2J5dGVzX2NsYXNzbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0ZiA9IGFueV90ZigpCisgICAgICAgIG5oID0gYW55X25oKCkKKyAgICAgICAgaGxpbSA9IGFueV9obGltKCkKKyAgICAgICAgY2lkID0gYW55X2NpZCgpCisgICAgICAgIHNhYyA9IGFueV9zYWMoKQorICAgICAgICBzYW0gPSBhbnlfc2FtKCkKKyAgICAgICAgbSA9IGFueV9tKCkKKyAgICAgICAgZGFjID0gYW55X2RhYygpCisgICAgICAgIGRhbSA9IGFueV9kYW0oKQorCisgICAgICAgIGJ5dGUwID0gKDMgPDwgNSkgfCAodGYgPDwgMykgfCAobmggPDwgMikgfCBobGltCisgICAgICAgIGJ5dGUxID0gKGNpZCA8PCA3KSB8IChzYWMgPDwgNikgfCAoc2FtIDw8IDQpIHwgKG0gPDwgMykgfCAoZGFjIDw8IDIpIHwgZGFtCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbYnl0ZTAsIGJ5dGUxXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsID0gbG93cGFuLkxvd3BhbklQSEMuZnJvbV9ieXRlcyhkYXRhX2J5dGVzKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRmLCBhY3R1YWwudGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmgsIGFjdHVhbC5uaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChobGltLCBhY3R1YWwuaGxpbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaWQsIGFjdHVhbC5jaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FjLCBhY3R1YWwuc2FjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbSwgYWN0dWFsLnNhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBhY3R1YWwubSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYWMsIGFjdHVhbC5kYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtLCBhY3R1YWwuZGFtKQorCisKK2NsYXNzIFRlc3RMb3dwYW5QYXJzZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfbWVzaF9oZWFkZXJfdGhhdF9jb250YWluc19ob3BfbGltaXRfc3RvcmVkX29uX3R3b19ieXRlc193aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweGJmLCAweDEzLCAweDkwLCAweDAwLCAweDQ4LCAweDAxLCAweDdjLCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmLCAweGYyLCAweGJmLCAweGMwLCAweDAwLCAweDI0LCAweGIxLCAweDYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDAyLCAweGYwLCAweGJhLCAweDBkLCAweGZmLCAweDA0LCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAyLCAweDAyLCAweDA4LCAweDAwLCAweDA3LCAweDA5LCAweDUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDAwLCAweDIwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgxMSwgMHgzZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmQsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwLCAweDkwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4NDgsIDB4MDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYwLCAweGJmLCAweGMwLCAweDAwLCAweDAwLCAweDIxLCAweGUyLCAweGRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MiwgMHg0NCwgMHgwMiwgMHhmMCwgMHhiYSwgMHgwZCwgMHhmZiwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDcsIDB4MDksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwLCAweDIwLCAweDAwLCAweDIwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMF0pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclswXSA9IGxvd3Bhbi5Db250ZXh0KHByZWZpeD0iZmQwMDpkYjg6Oi82NCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfbm90X2NvbXByZXNzZWRfdWRwX2FuZF93aXRob3V0X2hvcF9ieV9ob3BfZXh0ZW5zaW9uX2hlYWRlcl93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweDMzLCAweDExLCAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweGNmLCAweDYzLCAweDgwLCAweDAwLCAweGZhLCAweGE1LCAweDBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLCAweDE0LCAweGNmLCAweDYzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX2NvbXByZXNzZWRfdWRwX2FuZF93aXRob3V0X2hvcF9ieV9ob3BfZXh0ZW5zaW9uX2hlYWRlcl93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdlLCAweDMzLCAweGYwLCAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGQyLCAweDgwLCAweDAwLCAweGZhLCAweGE1LCAweDBiLCAweGMwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLCAweDE0LCAweGNmLCAweDYzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX25vdF9jb21wcmVzc2VkX3VkcF9hbmRfd2l0aF9ub3RfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHgzMywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2ZCwgMHgwNCwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxOCwgMHgxNiwgMHgzMywgMHgxNiwgMHgzNCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYywgMHgwNCwgMHhkMiwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHg5OSwgMHg5OSwgMHhmZiwgMHhmZSwgMHgyMiwgMHgxMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2LCAweDI5LCAweDk2LCAweGZmLCAweGZlLCAweGFjLCAweGZmLCAweDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgwMCwgMHg2ZCwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgxOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYsIDB4MzMsIDB4MTYsIDB4MzQsIDB4MDAsIDB4MTQsIDB4Y2YsIDB4NjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGZhLCAweGE1LCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyPU5vbmUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfbm90X2NvbXByZXNzZWRfdWRwX2FuZF93aXRoX2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxvd3Bhbl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4N2UsIDB4MzMsIDB4ZTAsIDB4MTEsIDB4MDYsIDB4NmQsIDB4MDQsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MTgsIDB4MTYsIDB4MzMsIDB4MTYsIDB4MzQsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMsIDB4MDQsIDB4ZDIsIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzAsIDB4MDAsIDB4MDQsIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIGlwdjZfcGFja2V0ID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MDAsIDB4NmQsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLCAweDE0LCAweGNmLCAweDYzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX2NvbXByZXNzZWRfdWRwX2FuZF93aXRoX2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxvd3Bhbl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4N2UsIDB4MzMsIDB4ZTEsIDB4MDYsIDB4NmQsIDB4MDQsIDB4NDAsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MTgsIDB4ZjAsIDB4MTYsIDB4MzMsIDB4MTYsIDB4MzQsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZDIsIDB4ODAsIDB4MDAsIDB4ZmEsIDB4YTUsIDB4MGIsIDB4YzAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIGlwdjZfcGFja2V0ID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNiwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MDAsIDB4NmQsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweDAwLCAweDE0LCAweGNmLCAweDYzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhsb3dwYW5fcGFja2V0KSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwdjZfcGFja2V0LCBhY3R1YWxfaXB2Nl9wYWNrZXQudG9fYnl0ZXMoKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV82bG93cGFuX3BhY2tldF93aXRoX2NvbXByZXNzZWRfaWNtcF9hbmRfd2l0aG91dF9jb21wcmVzc2VkX2hvcF9ieV9ob3BfZXh0ZW5zaW9uX2hlYWRlcl93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGQ1LCAweGFhLCAweDNhLCAweDAyLCAweDk5LCAweDk5LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDIyLCAweDExLCAweDAxLCAweDM2LCAweDI5LCAweDk2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGFjLCAweGZmLCAweDE4LCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDk3LCAweGYzLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMDA6MGRiODo6LzY0IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfMShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGQ1LCAweGFhLCAweDNhLCAweDAyLCAweDk5LCAweDk5LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDIyLCAweDExLCAweDAxLCAweDM2LCAweDI5LCAweDk2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGFjLCAweGZmLCAweDE4LCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDk3LCAweGYzLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMDA6MGRiODo6LzY0IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGYwLCAweGEwLCAweDNhLCAweDIwLCAweDBkLCAweDE0LCAweDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDU1LCAweDAwLCAweDAwLCAweDI1LCAweDE0LCAweDQ2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGRkLCAweDJhLCAweGZlLCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUsIDB4MTQsIDB4NDYsIDB4ZmYsIDB4ZmUsIDB4ZGQsIDB4MmEsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGIzLCAweGYzLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMDA6MGRiODo6LzY0IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfMyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGQ1LCAweGFhLCAweDNhLCAweDAyLCAweDk5LCAweDk5LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDIyLCAweDExLCAweDAxLCAweDM2LCAweDI5LCAweDk2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGFjLCAweGZmLCAweDE4LCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDk3LCAweGYzLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMDA6MGRiODo6LzY0IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfNChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGY1LCAweGFhLCAweDNhLCAweDM2LCAweDI5LCAweDk2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGFjLCAweGZmLCAweDE4LCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweDk3LCAweGY0LCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMDA6MGRiODo6LzY0IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfNShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGY3LCAweGFjLCAweDNhLCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUsIDB4MTQsIDB4NDYsIDB4ZmYsIDB4ZmUsIDB4ZGQsIDB4MmEsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGIzLCAweGYzLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxMF0gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IjIwMDA6MGRiODo6LzY0IikKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyWzEyXSA9IGxvd3Bhbi5Db250ZXh0KHByZWZpeD0iMjAwZDoxNDU2OjEyNTU6MDAwMDoyNTE0OjQ2ZmY6ZmVkZDoyYWZlLzEyOCIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlXzZsb3dwYW5fcGFja2V0X3dpdGhfY29tcHJlc3NlZF9pY21wX2FuZF93aXRob3V0X2NvbXByZXNzZWRfaG9wX2J5X2hvcF9leHRlbnNpb25faGVhZGVyX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkXzYoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbG93cGFuX3BhY2tldCA9IGJ5dGVhcnJheShbMHg3YSwgMHhmMCwgMHhjMCwgMHgzYSwgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHg1NCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg1NCwgMHgxMSwgMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHgxYywgMHg3ZSwgMHhmZiwgMHg4MCwgMHgwMCwgMHhmYSwgMHhhNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgaXB2Nl9wYWNrZXQgPSBieXRlYXJyYXkoWzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4M2EsIDB4NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDBkLCAweDE0LCAweDU2LCAweDEyLCAweDU1LCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNSwgMHgxNCwgMHg0NiwgMHhmZiwgMHhmZSwgMHhkZCwgMHgyYSwgMHhmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4MGQsIDB4MTQsIDB4NTYsIDB4MTIsIDB4NTQsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDU0LCAweDExLCAweGZmLCAweGZlLCAweDFjLCAweDdlLCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhhNSwgMHg0MCwgMHgwYiwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NGUsIDB4OTIsIDB4YmIsIDB4NTNdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwXSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MzQsIDB4MjksIDB4OTYsIDB4ZmYsIDB4ZmUsIDB4YWMsIDB4ZmYsIDB4MTddKSkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTJdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSIyMDBkOjE0NTY6MTI1NTowMDAwOjI1MTQ6NDZmZjpmZWRkOjJhZmUvMTI4IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfNyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGQwLCAweGQwLCAweDNhLCAweDAwLCAweDAyLCAweDk4LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDIyLCAweDEyLCAweDAwLCAweDIwLCAweDBkLCAweDE0LCAweDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDU1LCAweDAwLCAweDAwLCAweDI1LCAweDE0LCAweDQ2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGRkLCAweDJhLCAweGZlLCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc3LCAweDgyLCAweDk4LCAweGZmLCAweGZlLCAweDIyLCAweDEyLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUsIDB4MTQsIDB4NDYsIDB4ZmYsIDB4ZmUsIDB4ZGQsIDB4MmEsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGY1LCAweDI4LCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxM10gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IkFBQkI6Q0NERDowMDAwOjAwMDA6Nzc5Njo6Lzc1IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfOChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGYwLCAweGQwLCAweDNhLCAweDIwLCAweDBkLCAweDE0LCAweDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDU1LCAweDAwLCAweDAwLCAweDI1LCAweDE0LCAweDQ2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGRkLCAweDJhLCAweGZlLCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc3LCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUsIDB4MTQsIDB4NDYsIDB4ZmYsIDB4ZmUsIDB4ZGQsIDB4MmEsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGY1LCAweDExLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlclsxM10gPSBsb3dwYW4uQ29udGV4dChwcmVmaXg9IkFBQkI6Q0NERDowMDAwOjAwMDA6Nzc5Njo6Lzc1IikKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8obG93cGFuX3BhY2tldCksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfNmxvd3Bhbl9wYWNrZXRfd2l0aF9jb21wcmVzc2VkX2ljbXBfYW5kX3dpdGhvdXRfY29tcHJlc3NlZF9ob3BfYnlfaG9wX2V4dGVuc2lvbl9oZWFkZXJfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWRfOShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsb3dwYW5fcGFja2V0ID0gYnl0ZWFycmF5KFsweDdhLCAweGYwLCAweGQwLCAweDNhLCAweDIwLCAweDBkLCAweDE0LCAweDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDU1LCAweDAwLCAweDAwLCAweDI1LCAweDE0LCAweDQ2LCAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGRkLCAweDJhLCAweGZlLCAweDgwLCAweDAwLCAweGZhLCAweGE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBiLCAweGMwLCAweDAwLCAweDA0LCAweDRlLCAweDkyLCAweGJiLCAweDUzXSkKKworICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgzYSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc3LCAweDk5LCAweDk5LCAweGZmLCAweGZlLCAweDIyLCAweDExLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHgwZCwgMHgxNCwgMHg1NiwgMHgxMiwgMHg1NSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUsIDB4MTQsIDB4NDYsIDB4ZmYsIDB4ZmUsIDB4ZGQsIDB4MmEsIDB4ZmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweGY1LCAweDExLCAweDBiLCAweGMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ZSwgMHg5MiwgMHhiYiwgMHg1M10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4OTksIDB4OTksIDB4ZmYsIDB4ZmUsIDB4MjIsIDB4MTEsIDB4MDBdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzNCwgMHgyOSwgMHg5NiwgMHhmZiwgMHhmZSwgMHhhYywgMHhmZiwgMHgxN10pKQorICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbMTNdID0gbG93cGFuLkNvbnRleHQocHJlZml4PSJBQUJCOkNDREQ6MDAwMDowMDAwOjc3OTY6Oi83NSIpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX2RlZmF1bHRfbG93cGFuX3BhcnNlcihjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X3BhY2tldCA9IHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGxvd3Bhbl9wYWNrZXQpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2RlZnJhZ21lbnRfYmlnX0lQdjZfcGFja2V0X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2ZyYWdtZW50c19pbl9yYW5kb21fb3JkZXIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZnJhZ21lbnRfMSA9IGJ5dGVhcnJheShbMHhDNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg3QSwgMHgzMywgMHgzQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0QywgMHg2NiwgMHg0RV0pCisKKyAgICAgICAgZnJhZ21lbnRfMiA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHgxQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQV0pCisKKyAgICAgICAgZnJhZ21lbnRfMyA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhEMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHhDQywgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3N10pCisKKyAgICAgICAgZnJhZ21lbnRfNCA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHgyOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OV0pCisKKyAgICAgICAgZnJhZ21lbnRfNSA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHgzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0QywgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQV0pCisKKyAgICAgICAgZnJhZ21lbnRfNiA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHgxQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NywgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhEMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMCwgMHgwMCwgMHhGQSwgMHgxNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHhDQywgMHg0RV0pCisKKyAgICAgICAgZnJhZ21lbnRfNyA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg0RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQSwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzQSwgMHg2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pCisKKyAgICAgICAgZnJhZ21lbnRfOCA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg1OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxQSwgMHgyQSwgMHgzRiwgMHgwOSwgMHhBQiwgMHg0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MCwgMHgwMCwgMHhGMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzQSwgMHg2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxQSwgMHgyQSwgMHgzRiwgMHgwOSwgMHhBQiwgMHg0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3N10pCisKKyAgICAgICAgZnJhZ21lbnRfOSA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg2NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0QywgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0RCwgMHg2NiwgMHg3NywgMHg5OV0pCisKKyAgICAgICAgZnJhZ21lbnRfMTAgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4NzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweDFCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHhCQiwgMHg1MSwgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweEQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUFdKQorCisgICAgICAgIGZyYWdtZW50XzExID0gYnl0ZWFycmF5KFsweEU1LCAweDAwLCAweDMxLCAweDlGLCAweDdELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4Q0MsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NEEsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJDLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFXSkKKworICAgICAgICBmcmFnbWVudF8xMiA9IGJ5dGVhcnJheShbMHhFNSwgMHgwMCwgMHgzMSwgMHg5RiwgMHg4OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4M0EsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQV0pCisKKyAgICAgICAgZnJhZ21lbnRfMTMgPSBieXRlYXJyYXkoWzB4RTUsIDB4MDAsIDB4MzEsIDB4OUYsIDB4OTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweGEzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDFCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHgxQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhEMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2Nl0pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTVdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgxQSwgMHgyQSwgMHgzRiwgMHgwOSwgMHhBQiwgMHg0M10pKQorCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9wYXJzZXIoY29udGV4dF9tYW5hZ2VyPU5vbmUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzQpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF8yKSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfMyksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzEzKSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfNSksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzYpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF83KSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfOCksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzkpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF8xMCksIG1lc3NhZ2VfaW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzExKSwgbWVzc2FnZV9pbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfMTIpLCBtZXNzYWdlX2luZm8pKQorICAgICAgICBhY3R1YWxfaXB2Nl9wYWNrZXQgPSBwYXJzZXIucGFyc2UoaW8uQnl0ZXNJTyhmcmFnbWVudF8xKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBpcHY2X3BhY2tldCA9IGJ5dGVhcnJheShbMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhEOCwgMHgzQSwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDMsICAjIC8gKiA0MCAqIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4QUIsIDB4NjQsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweDQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsICAjIC8gKiAxMjAgKiAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0QywgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAgIyAvICogMjAwICogLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4MUIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4RDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgICMgLyAqIDI4MCAqIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweENDLCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweDQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsICAjIC8gKiAzNjAgKiAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NEMsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4YTMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweDFCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NywgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweEQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwLCAweDAwLCAweEZBLCAweDE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHhDQywgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHg0MywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkMsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJBLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzQSwgMHg2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDMsICAjIC8gKiA3MjAgKiAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwLCAweDAwLCAweEYwLCAweDAwLCAweDAwLCAweDEwLCAweDNBLCAweDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxQSwgMHgyQSwgMHgzRiwgMHgwOSwgMHhBQiwgMHg0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweDQzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDBCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0QywgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhhMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk5LCAweDFBLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0RCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDQ0LCAweDY2LCAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4MUIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweEJCLCAweDUxLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4RDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDQ0LCAweENDLCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweDRBLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHhCQywgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsICAjIC8gKiAxMDgwICogLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHhGQSwgMHhBNSwgMHgwQiwgMHhDMCwgMHgwMCwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQsIDB4NTQsIDB4MTIsIDB4NDMsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDNBLCAweDQ0LCAweDY2LCAweDc3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OSwgMHgxQSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4RkEsIDB4QTUsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDRDLCAweDY2LCAweDRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUsIDB4QjMsIDB4MDAsIDB4NTQsIDB4Q0MsIDB4NTQsIDB4MDEsIDB4QUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ0LCAweDU0LCAweDEyLCAweGEzLCAweDUzLCAweDExLCAweDQ0LCAweDY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRSwgMHg5MiwgMHhCQiwgMHg1MywgMHgxQSwgMHg0NCwgMHg2NiwgMHg3NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4MUEsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MTEsIDB4NDQsIDB4NjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyLCAweEJCLCAweDUzLCAweDFBLCAweDQ0LCAweDY2LCAweDc3LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHhCMywgMHgwMCwgMHg1NCwgMHhDQywgMHg1NCwgMHgwMSwgMHhBQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4NDQsIDB4NjYsIDB4NEUsIDB4OTIsIDB4QkIsIDB4NTMsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLCAweDAwLCAweEZBLCAweEE1LCAweDFCLCAweEMwLCAweDAwLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0RSwgMHg5MiwgMHgxQiwgMHg1MywgMHgxMSwgMHg0NCwgMHg2NiwgMHg0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4QkIsIDB4NTMsIDB4MUEsIDB4NDQsIDB4NjYsIDB4NzcsIDB4OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1LCAweEIzLCAweDAwLCAweDU0LCAweENDLCAweDU0LCAweDAxLCAweEFBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0NCwgMHg1NCwgMHgxMiwgMHhEMywgMHg1MywgMHgxMSwgMHg0NCwgMHg2Nl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9wYWNrZXQsIGFjdHVhbF9pcHY2X3BhY2tldC50b19ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2RlZnJhZ21lbnRfSVB2Nl9wYWNrZXRfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkX3dpdGhfZnJhZ21lbnRzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1XSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MUEsIDB4MkEsIDB4M0YsIDB4MDksIDB4QUIsIDB4NDNdKSkKKworICAgICAgICBmcmFnbWVudF8xID0gYnl0ZWFycmF5KFsweEMwLCAweDM4LCAweDEyLCAweDM0LCAweDdBLCAweDMzLCAweDNBLCAweDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDFBLCAweDMzLCAweDBCLCAweEMwLCAweDAwLCAweDA0XSkKKworICAgICAgICBmcmFnbWVudF8yID0gYnl0ZWFycmF5KFsweEUwLCAweDM4LCAweDEyLCAweDM0LCAweDA2LCAweDRFLCAweDkyLCAweEJCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUzLCAweDExLCAweDEyLCAweDEzLCAweDE0XSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfZGVmYXVsdF9sb3dwYW5fcGFyc2VyKE5vbmUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5wYXJzZShpby5CeXRlc0lPKGZyYWdtZW50XzEpLCBtZXNzYWdlX2luZm89bWVzc2FnZV9pbmZvKSkKKyAgICAgICAgYWN0dWFsX2lwdjZfcGFja2V0ID0gcGFyc2VyLnBhcnNlKGlvLkJ5dGVzSU8oZnJhZ21lbnRfMiksIG1lc3NhZ2VfaW5mbz1tZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIGlwdjZfcGFja2V0ID0gYnl0ZWFycmF5KFsweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDNBLCAweDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgMHgwMCwgMHgxQSwgMHgyQSwgMHgzRiwgMHgwOSwgMHhBQiwgMHg0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MUEsIDB4MzMsIDB4MEIsIDB4QzAsIDB4MDAsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRFLCAweDkyLCAweEJCLCAweDUzLCAweDExLCAweDEyLCAweDEzLCAweDE0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X3BhY2tldCwgYWN0dWFsX2lwdjZfcGFja2V0LnRvX2J5dGVzKCkpCisKKworY2xhc3MgVGVzdExvd3BhblVkcEhlYWRlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3VkcF9kYXRhZ3JhbV9wb3J0c193aGVuX2RlY29tcHJlc3NfdWRwX3BvcnRzX21ldGhvZF9pc19jYWxsZWRfd2l0aF91ZHBoY19wX2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5VZHBIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBwID0gZmFjdG9yeS5VRFBfSENfUF9CT1RIX0ZVTEwKKworICAgICAgICB1ZHBoYyA9IGxvd3Bhbi5Mb3dwYW5VRFBIQyhhbnlfYygpLCBwKQorCisgICAgICAgIHNyY19wb3J0ID0gYW55X3NyY19wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfZHN0X3BvcnQoKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBzdHJ1Y3QucGFjaygiPkgiLCBzcmNfcG9ydCkgKyBzdHJ1Y3QucGFjaygiPkgiLCBkc3RfcG9ydCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NyY19wb3J0LCBhY3R1YWxfZHN0X3BvcnQgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3VkcF9wb3J0cyh1ZHBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfcG9ydCwgYWN0dWFsX3NyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9wb3J0LCBhY3R1YWxfZHN0X3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV91ZHBfZGF0YWdyYW1fcG9ydHNfd2hlbl9kZWNvbXByZXNzX3VkcF9wb3J0c19tZXRob2RfaXNfY2FsbGVkX3dpdGhfdWRwaGNfcF9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcCA9IGZhY3RvcnkuVURQX0hDX1BfRFNUX0NPTVBSCisKKyAgICAgICAgdWRwaGMgPSBsb3dwYW4uTG93cGFuVURQSEMoYW55X2MoKSwgcCkKKworICAgICAgICBzcmNfcG9ydCA9IGFueV9zcmNfcG9ydCgpCisgICAgICAgIGRzdF9wb3J0ID0gYW55X2NvbXByZXNzYWJsZV9kc3RfcG9ydCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IHN0cnVjdC5wYWNrKCI+SCIsIHNyY19wb3J0KSArIGJ5dGVhcnJheShbc3RydWN0LnBhY2soIj5IIiwgZHN0X3BvcnQpWzFdXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NyY19wb3J0LCBhY3R1YWxfZHN0X3BvcnQgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3VkcF9wb3J0cyh1ZHBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY19wb3J0LCBhY3R1YWxfc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X3BvcnQsIGFjdHVhbF9kc3RfcG9ydCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV91ZHBfZGF0YWdyYW1fcG9ydHNfd2hlbl9kZWNvbXByZXNzX3VkcF9wb3J0c19tZXRob2RfaXNfY2FsbGVkX3dpdGhfdWRwaGNfcF9lcXVhbF8yKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcCA9IGZhY3RvcnkuVURQX0hDX1BfU1JDX0NPTVBSCisKKyAgICAgICAgdWRwaGMgPSBsb3dwYW4uTG93cGFuVURQSEMoYW55X2MoKSwgcCkKKworICAgICAgICBzcmNfcG9ydCA9IGFueV9jb21wcmVzc2FibGVfc3JjX3BvcnQoKQorICAgICAgICBkc3RfcG9ydCA9IGFueV9kc3RfcG9ydCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbc3RydWN0LnBhY2soIj5IIiwgc3JjX3BvcnQpWzFdXSkgKyBzdHJ1Y3QucGFjaygiPkgiLCBkc3RfcG9ydCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NyY19wb3J0LCBhY3R1YWxfZHN0X3BvcnQgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3VkcF9wb3J0cyh1ZHBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY19wb3J0LCBhY3R1YWxfc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X3BvcnQsIGFjdHVhbF9kc3RfcG9ydCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV91ZHBfZGF0YWdyYW1fcG9ydHNfd2hlbl9kZWNvbXByZXNzX3VkcF9wb3J0c19tZXRob2RfaXNfY2FsbGVkX3dpdGhfdWRwaGNfcF9lcXVhbF8zKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcCA9IGZhY3RvcnkuVURQX0hDX1BfQk9USF9DT01QUgorCisgICAgICAgIHVkcGhjID0gbG93cGFuLkxvd3BhblVEUEhDKGFueV9jKCksIHApCisKKyAgICAgICAgc3JjX3BvcnQgPSBhbnlfbmliYmxlX3NyY19wb3J0KCkKKyAgICAgICAgZHN0X3BvcnQgPSBhbnlfbmliYmxlX2RzdF9wb3J0KCkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KFsoKHNyY19wb3J0ICYgMHgwRikgPDwgNCkgfCAoZHN0X3BvcnQgJiAweDBGKV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfcG9ydCwgYWN0dWFsX2RzdF9wb3J0ID0gZmFjdG9yeS5fZGVjb21wcmVzc191ZHBfcG9ydHModWRwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfcG9ydCwgYWN0dWFsX3NyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9wb3J0LCBhY3R1YWxfZHN0X3BvcnQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdWRwX2RhdGFncmFtX2NoZWNrc3VtX3doZW5fZGVjb21wcmVzc191ZHBfY2hlY2tzdW1faXNfY2FsbGVkX3dpdGhfdWRwaGNfY19lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYyA9IGZhY3RvcnkuVURQX0hDX0NfSU5MSU5FCisKKyAgICAgICAgdWRwaGMgPSBsb3dwYW4uTG93cGFuVURQSEMoYywgYW55X3AoKSkKKworICAgICAgICBjaGVja3N1bSA9IGFueV9jaGVja3N1bSgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IHN0cnVjdC5wYWNrKCI+SCIsIGNoZWNrc3VtKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3VkcF9jaGVja3N1bSh1ZHBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrc3VtLCBhY3R1YWxfY2hlY2tzdW0pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdWRwX2RhdGFncmFtX2NoZWNrc3VtX3doZW5fZGVjb21wcmVzc191ZHBfY2hlY2tzdW1faXNfY2FsbGVkX3dpdGhfdWRwaGNfY19lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuVWRwSGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYyA9IGZhY3RvcnkuVURQX0hDX0NfRUxJREVECisKKyAgICAgICAgdWRwaGMgPSBsb3dwYW4uTG93cGFuVURQSEMoYywgYW55X3AoKSkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gZmFjdG9yeS5fZGVjb21wcmVzc191ZHBfY2hlY2tzdW0odWRwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBhY3R1YWxfY2hlY2tzdW0pCisKKworY2xhc3MgVGVzdExvd3BhbklwdjZIZWFkZXJGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIElQVjZfTElOS0xPQ0FMX1BSRUZJWCA9IGJ5dGVhcnJheShbMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdHJhZmZpY19jbGFzc19hbmRfZmxvd19sYWJlbF93aGVuX2RlY29tcHJlc3NfdGZfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2lwaGNfdGZfZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBlY24gPSBhbnlfZWNuKCkKKyAgICAgICAgZHNjcCA9IGFueV9kc2NwKCkKKyAgICAgICAgZmxvd19sYWJlbCA9IGFueV9mbG93X2xhYmVsKCkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZGF0YV9ieXRlcy5hcHBlbmQoKGVjbiA8PCA2KSB8IGRzY3ApCisgICAgICAgIGRhdGFfYnl0ZXMuYXBwZW5kKChmbG93X2xhYmVsID4+IDE2KSAmIDB4MEYpCisgICAgICAgIGRhdGFfYnl0ZXMuYXBwZW5kKChmbG93X2xhYmVsID4+IDgpICYgMHhGRikKKyAgICAgICAgZGF0YV9ieXRlcy5hcHBlbmQoZmxvd19sYWJlbCAmIDB4RkYpCisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgdGYgPSBmYWN0b3J5LklQSENfVEZfNEIKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKHRmLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdHJhZmZpY19jbGFzcywgYWN0dWFsX2Zsb3dfbGFiZWwgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3RmKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGRzY3AgPDwgMikgfCBlY24sIGFjdHVhbF90cmFmZmljX2NsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb3dfbGFiZWwsIGFjdHVhbF9mbG93X2xhYmVsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3RyYWZmaWNfY2xhc3NfYW5kX2Zsb3dfbGFiZWxfd2hlbl9kZWNvbXByZXNzX3RmX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pcGhjX3RmX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZWNuID0gYW55X2VjbigpCisgICAgICAgIGZsb3dfbGFiZWwgPSBhbnlfZmxvd19sYWJlbCgpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheSgpCisgICAgICAgIGRhdGFfYnl0ZXMuYXBwZW5kKChlY24gPDwgNikgfCAoZmxvd19sYWJlbCA+PiAxNikgJiAweDBGKQorICAgICAgICBkYXRhX2J5dGVzLmFwcGVuZCgoZmxvd19sYWJlbCA+PiA4KSAmIDB4RkYpCisgICAgICAgIGRhdGFfYnl0ZXMuYXBwZW5kKGZsb3dfbGFiZWwgJiAweEZGKQorCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHRmID0gZmFjdG9yeS5JUEhDX1RGXzNCCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyh0ZiwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RyYWZmaWNfY2xhc3MsIGFjdHVhbF9mbG93X2xhYmVsID0gZmFjdG9yeS5fZGVjb21wcmVzc190ZihpcGhjLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVjbiwgYWN0dWFsX3RyYWZmaWNfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvd19sYWJlbCwgYWN0dWFsX2Zsb3dfbGFiZWwpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdHJhZmZpY19jbGFzc19hbmRfZmxvd19sYWJlbF93aGVuX2RlY29tcHJlc3NfdGZfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2lwaGNfdGZfZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBlY24gPSBhbnlfZWNuKCkKKyAgICAgICAgZHNjcCA9IGFueV9kc2NwKCkKKyAgICAgICAgZmxvd19sYWJlbCA9IGFueV9mbG93X2xhYmVsKCkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KFsoZWNuIDw8IDYpIHwgZHNjcF0pCisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgdGYgPSBmYWN0b3J5LklQSENfVEZfMUIKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKHRmLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdHJhZmZpY19jbGFzcywgYWN0dWFsX2Zsb3dfbGFiZWwgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3RmKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgdGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGRzY3AgPDwgMikgfCBlY24sIGFjdHVhbF90cmFmZmljX2NsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFjdHVhbF9mbG93X2xhYmVsKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3RyYWZmaWNfY2xhc3NfYW5kX2Zsb3dfbGFiZWxfd2hlbl9kZWNvbXByZXNzX3RmX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pcGhjX3RmX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmxvd19sYWJlbCA9IGFueV9mbG93X2xhYmVsKCkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KCkKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICB0ZiA9IGZhY3RvcnkuSVBIQ19URl9FTElERUQKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKHRmLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdHJhZmZpY19jbGFzcywgYWN0dWFsX2Zsb3dfbGFiZWwgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3RmKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgdGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYWN0dWFsX3RyYWZmaWNfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYWN0dWFsX2Zsb3dfbGFiZWwpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfdHJhZmZpY19jbGFzc19hbmRfZmxvd19sYWJlbF93aGVuX2RlY29tcHJlc3NfbmhfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2lwaGNfbmhfZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBuZXh0X2hlYWRlciA9IGFueV9uZXh0X2hlYWRlcigpCisKKyAgICAgICAgbmggPSBmYWN0b3J5LklQSENfTkhfSU5MSU5FCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgbmgsIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KFtuZXh0X2hlYWRlcl0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9uZXh0X2hlYWRlciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfbmgoaXBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBuaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0X2hlYWRlciwgYWN0dWFsX25leHRfaGVhZGVyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3RyYWZmaWNfY2xhc3NfYW5kX2Zsb3dfbGFiZWxfd2hlbl9kZWNvbXByZXNzX25oX21ldGhvZF9pc19jYWxsZWRfd2l0aF9pcGhjX25oX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgbmggPSBmYWN0b3J5LklQSENfTkhfQ09NUFJFU1NFRAorICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIG5oLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9uZXh0X2hlYWRlciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfbmgoaXBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBuaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBhY3R1YWxfbmV4dF9oZWFkZXIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfaG9wX2xpbWl0X3doZW5fZGVjb21wcmVzc19obGltX2lzX2NhbGxlZF93aXRoX2lwaGNfaGxpbV9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGhvcF9saW1pdCA9IGFueV9ob3BfbGltaXQoKQorCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGhsaW0gPSBmYWN0b3J5LklQSENfSExJTV9JTkxJTkUKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgaGxpbSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoW2hvcF9saW1pdF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9ob3BfbGltaXQgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2hsaW0oaXBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBobGltKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvcF9saW1pdCwgYWN0dWFsX2hvcF9saW1pdCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9ob3BfbGltaXRfd2hlbl9kZWNvbXByZXNzX2hsaW1faXNfY2FsbGVkX3dpdGhfaXBoY19obGltX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgaGxpbSA9IGZhY3RvcnkuSVBIQ19ITElNXzEKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgaGxpbSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaG9wX2xpbWl0ID0gZmFjdG9yeS5fZGVjb21wcmVzc19obGltKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgaGxpbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBhY3R1YWxfaG9wX2xpbWl0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2hvcF9saW1pdF93aGVuX2RlY29tcHJlc3NfaGxpbV9pc19jYWxsZWRfd2l0aF9pcGhjX2hsaW1fZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBobGltID0gZmFjdG9yeS5JUEhDX0hMSU1fNjQKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgaGxpbSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaG9wX2xpbWl0ID0gZmFjdG9yeS5fZGVjb21wcmVzc19obGltKGlwaGMsIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgaGxpbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2NCwgYWN0dWFsX2hvcF9saW1pdCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9ob3BfbGltaXRfd2hlbl9kZWNvbXByZXNzX2hsaW1faXNfY2FsbGVkX3dpdGhfaXBoY19obGltX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgaGxpbSA9IGZhY3RvcnkuSVBIQ19ITElNXzI1NQorICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBobGltLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9ob3BfbGltaXQgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2hsaW0oaXBoYywgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBobGltKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI1NSwgYWN0dWFsX2hvcF9saW1pdCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9zb3VyY2VfYWRkcmVzc193aGVuX2RlY29tcHJlc3Nfc3JjX2FkZHJfaXNfY2FsbGVkX3dpdGhfc2FjX2VxdWFsXzBfYW5kX3NhbV9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHNyY19hZGRyID0gYW55X3NyY19hZGRyKCkKKworICAgICAgICBzYWMgPSBmYWN0b3J5LklQSENfU0FDX1NUQVRFTEVTUworICAgICAgICBzYW0gPSBmYWN0b3J5LklQSENfU0FNXzEyOEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgYW55X3NyY19tYWNfYWRkcigpLCBhbnlfc2NpKCksIGlvLkJ5dGVzSU8oc3JjX2FkZHIpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoc3JjX2FkZHIpLCBhY3R1YWxfc3JjX2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2Vfc291cmNlX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX3NyY19hZGRyX2lzX2NhbGxlZF93aXRoX3NhY19lcXVhbF8wX2FuZF9zYW1fZXF1YWxfMShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBldWk2NCA9IGFueV9ldWk2NCgpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUxFU1MKKyAgICAgICAgc2FtID0gZmFjdG9yeS5JUEhDX1NBTV82NEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgYW55X3NyY19tYWNfYWRkcigpLCBhbnlfc2NpKCksIGlvLkJ5dGVzSU8oZXVpNjQpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBldWk2NCwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMF9hbmRfc2FtX2VxdWFsXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgcmxvYzE2ID0gYW55X3Jsb2MxNigpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUxFU1MKKyAgICAgICAgc2FtID0gZmFjdG9yeS5JUEhDX1NBTV8xNkIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgYW55X3NyY19tYWNfYWRkcigpLCBhbnlfc2NpKCksIGlvLkJ5dGVzSU8ocmxvYzE2KSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2FtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmUsIDB4MDBdKSArIHJsb2MxNiwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMF9hbmRfc2FtX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgc3JjX21hY19hZGRyID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NChhbnlfc3JjX21hY19hZGRyKCkpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUxFU1MKKyAgICAgICAgc2FtID0gZmFjdG9yeS5JUEhDX1NBTV9FTElERUQKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NyY19hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19zcmNfYWRkcihpcGhjLCBzcmNfbWFjX2FkZHIsIGFueV9zY2koKSwgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2FtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuSVBWNl9MSU5LTE9DQUxfUFJFRklYICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoW3NyY19tYWNfYWRkci5tYWNfYWRkcmVzc1swXSBeIDB4MDJdKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX21hY19hZGRyLm1hY19hZGRyZXNzWzE6XSwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIF9tZXJnZV9wcmVmaXhfYW5kX2FkZHJlc3Moc2VsZiwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhZGRyZXNzKToKKyAgICAgICAgdG90YWxfYnl0ZXMgPSAxNgorCisgICAgICAgIHByZWZpeF9sZW5ndGhfaW5fYnl0ZXMgPSBpbnQocHJlZml4X2xlbmd0aCAvIDgpCisKKyAgICAgICAgaWYgKHByZWZpeF9sZW5ndGhfaW5fYnl0ZXMgKyBsZW4oYWRkcmVzcykpID4gdG90YWxfYnl0ZXM6CisgICAgICAgICAgICB0b3RhbF9ieXRlcyAtPSBwcmVmaXhfbGVuZ3RoX2luX2J5dGVzCisKKyAgICAgICAgICAgIHJldHVybiBwcmVmaXhbOnByZWZpeF9sZW5ndGhfaW5fYnl0ZXNdICsgYWRkcmVzc1stdG90YWxfYnl0ZXM6XQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0b3RhbF9ieXRlcyAtPSBwcmVmaXhfbGVuZ3RoX2luX2J5dGVzCisgICAgICAgICAgICB0b3RhbF9ieXRlcyAtPSBsZW4oYWRkcmVzcykKKworICAgICAgICAgICAgcmV0dXJuIHByZWZpeFs6cHJlZml4X2xlbmd0aF9pbl9ieXRlc10gKyBieXRlYXJyYXkoWzB4MDBdICogdG90YWxfYnl0ZXMpICsgYWRkcmVzcworCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMV9hbmRfc2FtX2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShOb25lKQorCisgICAgICAgIHNyY19hZGRyID0gYW55X3NyY19hZGRyKCkKKworICAgICAgICBzYWMgPSBmYWN0b3J5LklQSENfU0FDX1NUQVRFRlVMCisgICAgICAgIHNhbSA9IGZhY3RvcnkuSVBIQ19TQU1fVU5TUEVDSUZJRUQKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgYW55X3NyY19tYWNfYWRkcigpLCBhbnlfc2NpKCksIGlvLkJ5dGVzSU8oc3JjX2FkZHIpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDAwXSAqIDE2KSwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMV9hbmRfc2FtX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2NpID0gYW55X3NjaSgpCisKKyAgICAgICAgY29udGV4dCA9IGFueV9jb250ZXh0KCkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbc2NpXSA9IGNvbnRleHQKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICBldWk2NCA9IGFueV9ldWk2NCgpCisKKyAgICAgICAgc2FjID0gZmFjdG9yeS5JUEhDX1NBQ19TVEFURUZVTAorICAgICAgICBzYW0gPSBmYWN0b3J5LklQSENfU0FNXzY0QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgc2FjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtLCBhbnlfbSgpLCBhbnlfZGFjKCksIGFueV9kYW0oKSkKKworICAgICAgICBzcmNfYWRkciA9IHNlbGYuX21lcmdlX3ByZWZpeF9hbmRfYWRkcmVzcyhjb250ZXh0LnByZWZpeCwgY29udGV4dC5wcmVmaXhfbGVuZ3RoLCBldWk2NCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NyY19hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19zcmNfYWRkcihpcGhjLCBhbnlfc3JjX21hY19hZGRyKCksIHNjaSwgaW8uQnl0ZXNJTyhldWk2NCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2FjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfYWRkciwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMV9hbmRfc2FtX2VxdWFsXzIoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2NpID0gYW55X3NjaSgpCisKKyAgICAgICAgY29udGV4dCA9IGFueV9jb250ZXh0KCkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbc2NpXSA9IGNvbnRleHQKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2KCkKKworICAgICAgICBzYWMgPSBmYWN0b3J5LklQSENfU0FDX1NUQVRFRlVMCisgICAgICAgIHNhbSA9IGZhY3RvcnkuSVBIQ19TQU1fMTZCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIGFueV9tKCksIGFueV9kYWMoKSwgYW55X2RhbSgpKQorCisgICAgICAgIGlpZCA9IGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMF0pICsgcmxvYzE2CisKKyAgICAgICAgc3JjX2FkZHIgPSBzZWxmLl9tZXJnZV9wcmVmaXhfYW5kX2FkZHJlc3MoY29udGV4dC5wcmVmaXgsIGNvbnRleHQucHJlZml4X2xlbmd0aCwgaWlkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3JjX2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX3NyY19hZGRyKGlwaGMsIGFueV9zcmNfbWFjX2FkZHIoKSwgc2NpLCBpby5CeXRlc0lPKHJsb2MxNikpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2FjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfYWRkciwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX3NvdXJjZV9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19zcmNfYWRkcl9pc19jYWxsZWRfd2l0aF9zYWNfZXF1YWxfMV9hbmRfc2FtX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2NpID0gYW55X3NjaSgpCisKKyAgICAgICAgY29udGV4dCA9IGFueV9jb250ZXh0KCkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbc2NpXSA9IGNvbnRleHQKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICBzcmNfbWFjX2FkZHIgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGFueV9zcmNfbWFjX2FkZHIoKSkKKworICAgICAgICBzYWMgPSBmYWN0b3J5LklQSENfU0FDX1NUQVRFRlVMCisgICAgICAgIHNhbSA9IGZhY3RvcnkuSVBIQ19TQU1fMEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIHNhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbSwgYW55X20oKSwgYW55X2RhYygpLCBhbnlfZGFtKCkpCisKKyAgICAgICAgaWlkID0gYnl0ZWFycmF5KFtzcmNfbWFjX2FkZHIubWFjX2FkZHJlc3NbMF0gXiAweDAyXSkgKyBzcmNfbWFjX2FkZHIubWFjX2FkZHJlc3NbMTpdCisKKyAgICAgICAgc3JjX2FkZHIgPSBzZWxmLl9tZXJnZV9wcmVmaXhfYW5kX2FkZHJlc3MoY29udGV4dC5wcmVmaXgsIGNvbnRleHQucHJlZml4X2xlbmd0aCwgaWlkKQorCisgICAgICAgIGRhdGFfYnl0ZXMgPSBieXRlYXJyYXkoW10pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zcmNfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3Nfc3JjX2FkZHIoaXBoYywgc3JjX21hY19hZGRyLCBzY2ksIGlvLkJ5dGVzSU8oZGF0YV9ieXRlcykpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2FjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNfYWRkciwgYWN0dWFsX3NyY19hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMF9hbmRfZGFjX2VxdWFsXzBfYW5kX2RhbV9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGlwdjZfYWRkciA9IGFueV9kc3RfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX05PCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVMRVNTCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fMTI4QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBkc3RfbWFjX2FkZHIgPSBieXRlYXJyYXkoWzB4MDBdICogOCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBkc3RfbWFjX2FkZHIsIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhpcHY2X2FkZHIpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBldWk2NCA9IGFueV9ldWk2NCgpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX05PCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVMRVNTCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fNjRCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGFueV9kc3RfbWFjX2FkZHIoKSwgYW55X2RjaSgpLCBpby5CeXRlc0lPKGV1aTY0KSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKyBldWk2NCwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMF9hbmRfZGFjX2VxdWFsXzBfYW5kX2RhbV9lcXVhbF8yKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHJsb2MxNiA9IGFueV9ybG9jMTYoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9OTworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFTEVTUworICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzE2QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhybG9jMTYpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLklQVjZfTElOS0xPQ0FMX1BSRUZJWCArCisgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZlLCAweDAwXSkgKyBybG9jMTYsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBkc3RfbWFjX2FkZHIgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGFueV9kc3RfbWFjX2FkZHIoKSkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fTk8KKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUxFU1MKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV9FTElERUQKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgZGF0YV9ieXRlcyA9IGJ5dGVhcnJheShbXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBkc3RfbWFjX2FkZHIsIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhkYXRhX2J5dGVzKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5JUFY2X0xJTktMT0NBTF9QUkVGSVggKworICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShbZHN0X21hY19hZGRyLm1hY19hZGRyZXNzWzBdIF4gMHgwMl0pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfbWFjX2FkZHIubWFjX2FkZHJlc3NbMTpdLCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfUnVudGltZUVycm9yX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8xX2FuZF9kYW1fZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBpcHY2X2FkZHIgPSBhbnlfZHN0X2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9OTworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fMTI4QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyLCBpcGhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhpcHY2X2FkZHIpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMF9hbmRfZGFjX2VxdWFsXzFfYW5kX2RhbV9lcXVhbF8xKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRjaSA9IGFueV9kY2koKQorCisgICAgICAgIGNvbnRleHQgPSBhbnlfY29udGV4dCgpCisKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyID0gbG93cGFuLkNvbnRleHRNYW5hZ2VyKCkKKyAgICAgICAgY29udGV4dF9tYW5hZ2VyW2RjaV0gPSBjb250ZXh0CisKKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeShjb250ZXh0X21hbmFnZXIpCisKKyAgICAgICAgZXVpNjQgPSBhbnlfZXVpNjQoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9OTworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fNjRCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGRzdF9hZGRyID0gc2VsZi5fbWVyZ2VfcHJlZml4X2FuZF9hZGRyZXNzKGNvbnRleHQucHJlZml4LCBjb250ZXh0LnByZWZpeF9sZW5ndGgsIGV1aTY0KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGFueV9kc3RfbWFjX2FkZHIoKSwgZGNpLCBpby5CeXRlc0lPKGV1aTY0KSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHN0X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzBfYW5kX2RhY19lcXVhbF8xX2FuZF9kYW1fZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkY2kgPSBhbnlfZGNpKCkKKworICAgICAgICBjb250ZXh0ID0gYW55X2NvbnRleHQoKQorCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisgICAgICAgIGNvbnRleHRfbWFuYWdlcltkY2ldID0gY29udGV4dAorCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoY29udGV4dF9tYW5hZ2VyKQorCisgICAgICAgIHJsb2MxNiA9IGFueV9ybG9jMTYoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9OTworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fMTZCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGlpZCA9IGJ5dGVhcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZSwgMHgwMF0pICsgcmxvYzE2CisKKyAgICAgICAgZHN0X2FkZHIgPSBzZWxmLl9tZXJnZV9wcmVmaXhfYW5kX2FkZHJlc3MoY29udGV4dC5wcmVmaXgsIGNvbnRleHQucHJlZml4X2xlbmd0aCwgaWlkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGFueV9kc3RfbWFjX2FkZHIoKSwgZGNpLCBpby5CeXRlc0lPKHJsb2MxNikpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBkYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgZGFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzdF9hZGRyLCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8wX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGNpID0gYW55X2RjaSgpCisKKyAgICAgICAgY29udGV4dCA9IGFueV9jb250ZXh0KCkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbZGNpXSA9IGNvbnRleHQKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICBkc3RfbWFjX2FkZHIgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KGFueV9kc3RfbWFjX2FkZHIoKSkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fTk8KKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUZVTAorICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzBCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGlpZCA9IGJ5dGVhcnJheShbZHN0X21hY19hZGRyLm1hY19hZGRyZXNzWzBdIF4gMHgwMl0pICsgZHN0X21hY19hZGRyLm1hY19hZGRyZXNzWzE6XQorCisgICAgICAgIGRzdF9hZGRyID0gc2VsZi5fbWVyZ2VfcHJlZml4X2FuZF9hZGRyZXNzKGNvbnRleHQucHJlZml4LCBjb250ZXh0LnByZWZpeF9sZW5ndGgsIGlpZCkKKworICAgICAgICBkYXRhX2J5dGVzID0gYnl0ZWFycmF5KFtdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGRzdF9tYWNfYWRkciwgZGNpLCBpby5CeXRlc0lPKGRhdGFfYnl0ZXMpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfYWRkciwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMV9hbmRfZGFjX2VxdWFsXzBfYW5kX2RhbV9lcXVhbF8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGlwdjZfYWRkciA9IGFueV9kc3RfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFTEVTUworICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzEyOEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kc3RfYWRkciA9IGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIoaXBoYywgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oaXB2Nl9hZGRyKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9hZGRyLCBhY3R1YWxfZHN0X2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGVzdGluYXRpb25fYWRkcmVzc193aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8xX2FuZF9kYWNfZXF1YWxfMF9hbmRfZGFtX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYWRkcjQ4YiA9IGFueV80OGJpdHNfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFTEVTUworICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzQ4QgorCisgICAgICAgIGlwaGMgPSBsb3dwYW4uTG93cGFuSVBIQyhhbnlfdGYoKSwgYW55X25oKCksIGFueV9obGltKCksIGFueV9jaWQoKSwgYW55X3NhYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NhbSgpLCBtLCBkYWMsIGRhbSkKKworICAgICAgICBleHBlY3RlZF9kc3RfYWRkciA9IGJ5dGVhcnJheShbMHhmZiwgYWRkcjQ4YlswXSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIGFkZHI0OGJbMV0sIGFkZHI0OGJbMl0sIGFkZHI0OGJbM10sIGFkZHI0OGJbNF0sIGFkZHI0OGJbNV1dKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGFueV9kc3RfbWFjX2FkZHIoKSwgYW55X2RjaSgpLCBpby5CeXRlc0lPKGFkZHI0OGIpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kc3RfYWRkciwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2Rlc3RpbmF0aW9uX2FkZHJlc3Nfd2hlbl9kZWNvbXByZXNzX2RzdF9hZGRyX2lzX2NhbGxlZF93aXRoX21fZXF1YWxfMV9hbmRfZGFjX2VxdWFsXzBfYW5kX2RhbV9lcXVhbF8yKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIGFkZHIzMmIgPSBhbnlfMzJiaXRzX2FkZHIoKQorCisgICAgICAgIG0gPSBmYWN0b3J5LklQSENfTV9ZRVMKKyAgICAgICAgZGFjID0gZmFjdG9yeS5JUEhDX0RBQ19TVEFURUxFU1MKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV8zMkIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgZXhwZWN0ZWRfZHN0X2FkZHIgPSBieXRlYXJyYXkoWzB4ZmYsIGFkZHIzMmJbMF0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBhZGRyMzJiWzFdLCBhZGRyMzJiWzJdLCBhZGRyMzJiWzNdXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhhZGRyMzJiKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBkYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZHN0X2FkZHIsIGFjdHVhbF9kc3RfYWRkcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzFfYW5kX2RhY19lcXVhbF8wX2FuZF9kYW1fZXF1YWxfMyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBhZGRyOGIgPSBhbnlfOGJpdHNfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFTEVTUworICAgICAgICBkYW0gPSBmYWN0b3J5LklQSENfREFNXzhCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGV4cGVjdGVkX2RzdF9hZGRyID0gYnl0ZWFycmF5KFsweGZmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgYWRkcjhiWzBdXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RzdF9hZGRyID0gZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkcihpcGhjLCBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhhZGRyOGIpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kc3RfYWRkciwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1J1bnRpbWVFcnJvcl93aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8xX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzAoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGNpID0gYW55X2RjaSgpCisKKyAgICAgICAgY29udGV4dCA9IGFueV9jb250ZXh0KCkKKworICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorICAgICAgICBjb250ZXh0X21hbmFnZXJbZGNpXSA9IGNvbnRleHQKKworICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KGNvbnRleHRfbWFuYWdlcikKKworICAgICAgICBhZGRyNDhiID0gYW55XzQ4Yml0c19hZGRyKCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fWUVTCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVGVUwKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV8xMjhCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIHByZWZpeCA9IGNvbnRleHQucHJlZml4Wzo4XQorCisgICAgICAgIGlmIGxlbihwcmVmaXgpIDwgODoKKyAgICAgICAgICAgIG1pc3NpbmdfYnl0ZXNfY291bnQgPSA4IC0gbGVuKHByZWZpeCkKKyAgICAgICAgICAgIHByZWZpeCArPSBieXRlYXJyYXkoWzB4MDBdICogbWlzc2luZ19ieXRlc19jb3VudCkKKworICAgICAgICBwcmVmaXhfbGVuZ3RoID0gY29udGV4dC5wcmVmaXhfbGVuZ3RoCisKKyAgICAgICAgZHN0X2FkZHIgPSBieXRlYXJyYXkoWzB4ZmZdKSArIGFkZHI0OGJbOjJdICsgYnl0ZWFycmF5KFtwcmVmaXhfbGVuZ3RoXSkgKyBwcmVmaXggKyBhZGRyNDhiWzI6XQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZHN0X2FkZHIgPSBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyKGlwaGMsIGFueV9kc3RfbWFjX2FkZHIoKSwgZGNpLCBpby5CeXRlc0lPKGFkZHI0OGIpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGFjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGRhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3RfYWRkciwgYWN0dWFsX2RzdF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1J1bnRpbWVFcnJvcl93aGVuX2RlY29tcHJlc3NfZHN0X2FkZHJfaXNfY2FsbGVkX3dpdGhfbV9lcXVhbF8xX2FuZF9kYWNfZXF1YWxfMV9hbmRfZGFtX2VxdWFsXzEoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZmFjdG9yeSA9IGxvd3Bhbi5Mb3dwYW5JcHY2SGVhZGVyRmFjdG9yeSgpCisKKyAgICAgICAgYWRkcjQ4YiA9IGFueV80OGJpdHNfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fNDhCCisKKyAgICAgICAgaXBoYyA9IGxvd3Bhbi5Mb3dwYW5JUEhDKGFueV90ZigpLCBhbnlfbmgoKSwgYW55X2hsaW0oKSwgYW55X2NpZCgpLCBhbnlfc2FjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2FtKCksIG0sIGRhYywgZGFtKQorCisgICAgICAgIGV4cGVjdGVkX2RzdF9hZGRyID0gYnl0ZWFycmF5KFsweGZmLCBhZGRyNDhiWzBdLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgYWRkcjQ4YlsxXSwgYWRkcjQ4YlsyXSwgYWRkcjQ4YlszXSwgYWRkcjQ4Yls0XSwgYWRkcjQ4Yls1XV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZmFjdG9yeS5fZGVjb21wcmVzc19kc3RfYWRkciwgaXBoYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2RzdF9tYWNfYWRkcigpLCBhbnlfZGNpKCksIGlvLkJ5dGVzSU8oYWRkcjQ4YikpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfUnVudGltZUVycm9yX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzFfYW5kX2RhY19lcXVhbF8xX2FuZF9kYW1fZXF1YWxfMihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBhZGRyMzJiID0gYW55XzMyYml0c19hZGRyKCkKKworICAgICAgICBtID0gZmFjdG9yeS5JUEhDX01fWUVTCisgICAgICAgIGRhYyA9IGZhY3RvcnkuSVBIQ19EQUNfU1RBVEVGVUwKKyAgICAgICAgZGFtID0gZmFjdG9yeS5JUEhDX0RBTV8zMkIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgZXhwZWN0ZWRfZHN0X2FkZHIgPSBieXRlYXJyYXkoWzB4ZmYsIGFkZHIzMmJbMF0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBhZGRyMzJiWzFdLCBhZGRyMzJiWzJdLCBhZGRyMzJiWzNdXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmYWN0b3J5Ll9kZWNvbXByZXNzX2RzdF9hZGRyLCBpcGhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfZHN0X21hY19hZGRyKCksIGFueV9kY2koKSwgaW8uQnl0ZXNJTyhhZGRyMzJiKSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kZXN0aW5hdGlvbl9hZGRyZXNzX3doZW5fZGVjb21wcmVzc19kc3RfYWRkcl9pc19jYWxsZWRfd2l0aF9tX2VxdWFsXzFfYW5kX2RhY19lcXVhbF8xX2FuZF9kYW1fZXF1YWxfMyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBhZGRyOGIgPSBhbnlfOGJpdHNfYWRkcigpCisKKyAgICAgICAgbSA9IGZhY3RvcnkuSVBIQ19NX1lFUworICAgICAgICBkYWMgPSBmYWN0b3J5LklQSENfREFDX1NUQVRFRlVMCisgICAgICAgIGRhbSA9IGZhY3RvcnkuSVBIQ19EQU1fOEIKKworICAgICAgICBpcGhjID0gbG93cGFuLkxvd3BhbklQSEMoYW55X3RmKCksIGFueV9uaCgpLCBhbnlfaGxpbSgpLCBhbnlfY2lkKCksIGFueV9zYWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zYW0oKSwgbSwgZGFjLCBkYW0pCisKKyAgICAgICAgZXhwZWN0ZWRfZHN0X2FkZHIgPSBieXRlYXJyYXkoWzB4ZmYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBhZGRyOGJbMF1dKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZhY3RvcnkuX2RlY29tcHJlc3NfZHN0X2FkZHIsIGlwaGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9kc3RfbWFjX2FkZHIoKSwgYW55X2RjaSgpLCBpby5CeXRlc0lPKGFkZHI4YikpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzc19ieXRlc193aGVuX21lcmdlX21ldGhvZF9pc19jYWxsZWRfd2l0aF9wcmVmaXhfc2hvcnRlcl90aGFuX21pc3NpbmdfYml0cyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBwcmVmaXggPSBieXRlYXJyYXkoWzB4MjAsIDB4MDAsIDB4MGQsIDB4YjhdKQorICAgICAgICBwcmVmaXhfbGVuZ3RoID0gMzIKKworICAgICAgICBhZGRyZXNzX2J5dGVzID0gYnl0ZWFycmF5KFsweDFhLCAweDJiLCAweDNjLCAweDRkLCAweDVlLCAweDZmLCAweDcwLCAweDgxXSkKKworICAgICAgICBhZGRyID0gcHJlZml4ICsgYnl0ZWFycmF5KFsweDAwXSAqIDQpICsgYWRkcmVzc19ieXRlcworCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkciA9IGZhY3RvcnkuX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3MocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhZGRyZXNzX2J5dGVzKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHIsIGFjdHVhbF9hZGRyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX21lcmdlX3ByZWZpeF93aXRoX2FkZHJlc3NfYnl0ZXNfd2hlbl9tZXJnZV9tZXRob2RfaXNfY2FsbGVkX3dpdGhfcHJlZml4X2xvbmdlcl90aGFuX21pc3NpbmdfYml0c19vdmVybGFwcGluZyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmYWN0b3J5ID0gbG93cGFuLkxvd3BhbklwdjZIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICBwcmVmaXggPSBieXRlYXJyYXkoWzB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJdKQorICAgICAgICBwcmVmaXhfbGVuZ3RoID0gNjgKKworICAgICAgICBhZGRyZXNzX2J5dGVzID0gYnl0ZWFycmF5KFsweDFhLCAweDJiLCAweDNjLCAweDRkLCAweDVlLCAweDZmLCAweDcwLCAweDgxXSkKKworICAgICAgICBhZGRyID0gcHJlZml4WzotMV0gKyBieXRlYXJyYXkoWzB4MmFdKSArIGFkZHJlc3NfYnl0ZXNbMTpdCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9hZGRyID0gZmFjdG9yeS5fbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzcyhwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGFkZHJlc3NfYnl0ZXMpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkciwgYWN0dWFsX2FkZHIpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfbWVyZ2VfcHJlZml4X3dpdGhfYWRkcmVzc19ieXRlc193aGVuX21lcmdlX21ldGhvZF9pc19jYWxsZWRfd2l0aF9wcmVmaXhfbG9uZ2VyX3RoYW5fbWlzc2luZ19iaXRzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBsb3dwYW4uTG93cGFuSXB2NkhlYWRlckZhY3RvcnkoKQorCisgICAgICAgIHByZWZpeCA9IGJ5dGVhcnJheShbMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyLCAweDAwLCAweDAwLCAweDExLCAweDAxLCAweDExLCAweDAxLCAweDIyXSkKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IDEyOAorCisgICAgICAgIGFkZHJlc3NfYnl0ZXMgPSBieXRlYXJyYXkoWzB4MWEsIDB4MmIsIDB4M2MsIDB4NGQsIDB4NWUsIDB4NmYsIDB4NzAsIDB4ODFdKQorCisgICAgICAgIGFkZHIgPSBwcmVmaXgKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHIgPSBmYWN0b3J5Ll9tZXJnZV9wcmVmaXhfd2l0aF9hZGRyZXNzKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYWRkcmVzc19ieXRlcykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBhY3R1YWxfYWRkcikKKworCitjbGFzcyBUZXN0Q29udGV4dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfZXh0cmFjdF9jb250ZXh0X2Zyb21fc3RyX3JlcHJlc2VudGF0aW9uX3doZW5fY29uc3RydWN0b3JfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHByZWZpeCA9ICIyMDAwOmRiODo6LzY0IgorCisgICAgICAgICMgV0hFTgorICAgICAgICBjID0gbG93cGFuLkNvbnRleHQocHJlZml4KQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgyMCwgMHgwMCwgMHgwZCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pLCBjLnByZWZpeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2NCwgYy5wcmVmaXhfbGVuZ3RoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGMucHJlZml4X2xlbmd0aF9mdWxsX2J5dGVzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2V4dHJhY3RfY29udGV4dF9mcm9tX2J5dGVhcnJheV93aGVuX2NvbnN0cnVjdF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHJlZml4ID0gYnl0ZWFycmF5KFsweDIwLCAweDAwLCAweDBkLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYyA9IGxvd3Bhbi5Db250ZXh0KHByZWZpeCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MjAsIDB4MDAsIDB4MGQsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSwgYy5wcmVmaXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgYy5wcmVmaXhfbGVuZ3RoX2Z1bGxfYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNjQsIGMucHJlZml4X2xlbmd0aCkKKworCitjbGFzcyBUZXN0Q29udGV4dE1hbmFnZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX0luZGV4RXJyb3Jfd2hlbl9pbmRleF9pc19sYXJnZXJfdGhhbl8xNShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjb250ZXh0X21hbmFnZXIgPSBsb3dwYW4uQ29udGV4dE1hbmFnZXIoKQorCisgICAgICAgIGluZGV4ID0gcmFuZG9tLnJhbmRpbnQoMTYsIDI1NSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIGNvbnRleHRfbWFuYWdlcltpbmRleF0gPSBhbnlfY29udGV4dCgpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfSW5kZXhFcnJvcl93aGVuX2luZGV4X2lzX3NtYWxsZXJfdGhhbl8wKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisKKyAgICAgICAgaW5kZXggPSByYW5kb20ucmFuZGludCgtMjU1LCAtMSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIGNvbnRleHRfbWFuYWdlcltpbmRleF0gPSBhbnlfY29udGV4dCgpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfVHlwZUVycm9yX3doZW5fc2V0X3ZhbHVlX2lzX25vdF9Db250ZXh0KHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvbnRleHRfbWFuYWdlciA9IGxvd3Bhbi5Db250ZXh0TWFuYWdlcigpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNvbnRleHRfbWFuYWdlclswXSA9IGludAorCisKK2NsYXNzIFRlc3RMb3dwYW5NZXNoSGVhZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5faG9wc19sZWZ0X3ZhbHVlX3doZW5faG9wc19sZWZ0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBob3BzX2xlZnQgPSBhbnlfaG9wc19sZWZ0KCkKKworICAgICAgICBtZXNoX2hlYWRlciA9IGxvd3Bhbi5Mb3dwYW5NZXNoSGVhZGVyKGhvcHNfbGVmdCwgYW55X21hY19hZGRyZXNzKCksIGFueV9tYWNfYWRkcmVzcygpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaG9wc19sZWZ0ID0gbWVzaF9oZWFkZXIuaG9wc19sZWZ0CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wc19sZWZ0LCBhY3R1YWxfaG9wc19sZWZ0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9vcmlnaW5hdG9yX2FkZHJlc3NfdmFsdWVfd2hlbl9vcmlnaW5hdG9yX2FkZHJlc3NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG9yaWdpbmF0b3JfYWRkcmVzcyA9IGFueV9tYWNfYWRkcmVzcygpCisKKyAgICAgICAgbWVzaF9oZWFkZXIgPSBsb3dwYW4uTG93cGFuTWVzaEhlYWRlcihhbnlfaG9wc19sZWZ0KCksIG9yaWdpbmF0b3JfYWRkcmVzcywgYW55X21hY19hZGRyZXNzKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9vcmlnaW5hdG9yX2FkZHJlc3MgPSBtZXNoX2hlYWRlci5vcmlnaW5hdG9yX2FkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnaW5hdG9yX2FkZHJlc3MsIGFjdHVhbF9vcmlnaW5hdG9yX2FkZHJlc3MpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2ZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3NfdmFsdWVfd2hlbl9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBmaW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzID0gYW55X21hY19hZGRyZXNzKCkKKworICAgICAgICBtZXNoX2hlYWRlciA9IGxvd3Bhbi5Mb3dwYW5NZXNoSGVhZGVyKGFueV9ob3BzX2xlZnQoKSwgYW55X21hY19hZGRyZXNzKCksIGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzID0gbWVzaF9oZWFkZXIuZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MsIGFjdHVhbF9maW5hbF9kZXN0aW5hdGlvbl9hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RMb3dwYW5NZXNoSGVhZGVyRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0xvd3Bhbk1lc2hIZWFkZXJfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGhvcHNfbGVmdCA9IGFueV9ob3BzX2xlZnQoKQorCisgICAgICAgIG9yaWdpbmF0b3JfYWRkcmVzcyA9IGFueV9tYWNfYWRkcmVzcygpCisgICAgICAgIGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MgPSBhbnlfbWFjX2FkZHJlc3MoKQorCisgICAgICAgIHYgPSBpbnQob3JpZ2luYXRvcl9hZGRyZXNzLnR5cGUgPT0gY29tbW9uLk1hY0FkZHJlc3NUeXBlLlNIT1JUKQorICAgICAgICBmID0gaW50KGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MudHlwZSA9PSBjb21tb24uTWFjQWRkcmVzc1R5cGUuU0hPUlQpCisKKyAgICAgICAgbWVzaF9oZWFkZXJfZmlyc3RfYnl0ZSA9ICgyIDw8IDYpIHwgKHYgPDwgNSkgfCAoZiA8PCA0KQorCisgICAgICAgIGlmIGhvcHNfbGVmdCA+PSAweDBmOgorICAgICAgICAgICAgbWVzaF9oZWFkZXJfZGF0YSA9IGJ5dGVhcnJheShbbWVzaF9oZWFkZXJfZmlyc3RfYnl0ZSB8IDB4MGYsIGhvcHNfbGVmdF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtZXNoX2hlYWRlcl9kYXRhID0gYnl0ZWFycmF5KFttZXNoX2hlYWRlcl9maXJzdF9ieXRlIHwgaG9wc19sZWZ0XSkKKworICAgICAgICBtZXNoX2hlYWRlcl9kYXRhICs9IG9yaWdpbmF0b3JfYWRkcmVzcy5tYWNfYWRkcmVzcyArIGZpbmFsX2Rlc3RpbmF0aW9uX2FkZHJlc3MubWFjX2FkZHJlc3MKKworICAgICAgICBtZXNoX2hlYWRlcl9mYWN0b3J5ID0gbG93cGFuLkxvd3Bhbk1lc2hIZWFkZXJGYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWVzaF9oZWFkZXIgPSBtZXNoX2hlYWRlcl9mYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8obWVzaF9oZWFkZXJfZGF0YSksIE5vbmUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9wc19sZWZ0LCBtZXNoX2hlYWRlci5ob3BzX2xlZnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ2luYXRvcl9hZGRyZXNzLCBtZXNoX2hlYWRlci5vcmlnaW5hdG9yX2FkZHJlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcywgbWVzaF9oZWFkZXIuZmluYWxfZGVzdGluYXRpb25fYWRkcmVzcykKKworCitjbGFzcyBUZXN0TG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2RhdGFncmFtX3NpemVfdmFsdWVfd2hlbl9kYXRhZ3JhbV9zaXplX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhZ3JhbV9zaXplID0gYW55X2RhdGFncmFtX3NpemUoKQorCisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIoCisgICAgICAgICAgICBkYXRhZ3JhbV9zaXplLCBhbnlfZGF0YWdyYW1fdGFnKCksIGFueV9kYXRhZ3JhbV9vZmZzZXQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RhdGFncmFtX3NpemUgPSBmcmFnbWVudGF0aW9uX2hlYWRlci5kYXRhZ3JhbV9zaXplCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YWdyYW1fc2l6ZSwgYWN0dWFsX2RhdGFncmFtX3NpemUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2RhdGFncmFtX3RhZ192YWx1ZV93aGVuX2RhdGFncmFtX3RhZ19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YWdyYW1fdGFnID0gYW55X2RhdGFncmFtX3RhZygpCisKKyAgICAgICAgZnJhZ21lbnRhdGlvbl9oZWFkZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlcigKKyAgICAgICAgICAgIGFueV9kYXRhZ3JhbV9zaXplKCksIGRhdGFncmFtX3RhZywgYW55X2RhdGFncmFtX29mZnNldCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZGF0YWdyYW1fdGFnID0gZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fdGFnCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YWdyYW1fdGFnLCBhY3R1YWxfZGF0YWdyYW1fdGFnKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kYXRhZ3JhbV9vZmZzZXRfdmFsdWVfd2hlbl9kYXRhZ3JhbV9vZmZzZXRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGFncmFtX29mZnNldCA9IGFueV9kYXRhZ3JhbV9vZmZzZXQoKQorCisgICAgICAgIGZyYWdtZW50YXRpb25faGVhZGVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50YXRpb25IZWFkZXIoCisgICAgICAgICAgICBhbnlfZGF0YWdyYW1fc2l6ZSgpLCBhbnlfZGF0YWdyYW1fdGFnKCksIGRhdGFncmFtX29mZnNldCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RhdGFncmFtX29mZnNldCA9IGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX29mZnNldAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFncmFtX29mZnNldCwgYWN0dWFsX2RhdGFncmFtX29mZnNldCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fRmFsc2Vfd2hlbl9pc19maXJzdF9wcm9wZXJ0eV9pc19jYWxsZWRfYW5kX2RhdGFncmFtX29mZnNldF9pc19ub3RfZXF1YWxfMChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhZ3JhbV9vZmZzZXQgPSByYW5kb20ucmFuZGludCgxLCAoMSA8PCA4KSAtIDEpCisKKyAgICAgICAgZnJhZ21lbnRhdGlvbl9oZWFkZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlcigKKyAgICAgICAgICAgIGFueV9kYXRhZ3JhbV9zaXplKCksIGFueV9kYXRhZ3JhbV90YWcoKSwgZGF0YWdyYW1fb2Zmc2V0KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpc19maXJzdCA9IGZyYWdtZW50YXRpb25faGVhZGVyLmlzX2ZpcnN0CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfZmlyc3QpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfdG9fYnl0ZXNfTG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlcl9mcm9tX2J5dGVzX3doZW5fZnJvbV9ieXRlc19jbGFzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGFncmFtX3NpemUgPSBhbnlfZGF0YWdyYW1fc2l6ZSgpCisgICAgICAgIGRhdGFncmFtX3RhZyA9IGFueV9kYXRhZ3JhbV90YWcoKQorICAgICAgICBkYXRhZ3JhbV9vZmZzZXQgPSBhbnlfZGF0YWdyYW1fb2Zmc2V0KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5ISEIiLCAoKDMgPDwgMTQpIHwgKGludChkYXRhZ3JhbV9vZmZzZXQgIT0gMCkgPDwgMTMpIHwgZGF0YWdyYW1fc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhZ3JhbV90YWcsIGRhdGFncmFtX29mZnNldCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZnJhZ21lbnRhdGlvbl9oZWFkZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRhdGlvbkhlYWRlci5mcm9tX2J5dGVzKGlvLkJ5dGVzSU8oZGF0YSkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YWdyYW1fc2l6ZSwgZnJhZ21lbnRhdGlvbl9oZWFkZXIuZGF0YWdyYW1fc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhZ3JhbV90YWcsIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhZ3JhbV9vZmZzZXQsIGZyYWdtZW50YXRpb25faGVhZGVyLmRhdGFncmFtX29mZnNldCkKKworCitjbGFzcyBUZXN0TG93cGFuRGVjb21wcmVzc29yKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9wYXJlbnRfcmVxdWVzdF93aGVuX2RlY29tcHJlc3NfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDdmLCAweDNiLCAweDAyLCAweGYwLCAweDRkLCAweDRjLCAweDRkLCAweDRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDVlLCAweGFmLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDNiLCAweGZiLCAweDBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDNiLCAweDE1LCAweGExLCAweGY5LCAweGY1LCAweDY0LCAweGY0LCAweDk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGVmLCAweDcwLCAweDc4LCAweDZjLCAweDNjLCAweDBmLCAweDU0LCAweDRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDk1LCAweGU4LCAweGY1LCAweDI3LCAweDRjLCAweGZjXSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgxMiwgMHhjZiwgMHhkMywgMHg4YiwgMHgzYiwgMHg2MSwgMHg1NSwgMHg1OF0pKQorCisgICAgICAgIGRlY29tcHJlc3NvciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9sb3dwYW5fZGVjb21wcmVzc29yKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMsIHVkcF9oZWFkZXIgPSBkZWNvbXByZXNzb3IuZGVjb21wcmVzcyhpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZlODA6OjEwY2Y6ZDM4YjozYjYxOjU1NTgiLCBpcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZjAyOjoyIiwgaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE3LCBpcHY2X2hlYWRlci5uZXh0X2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNTUsIGlwdjZfaGVhZGVyLmhvcF9saW1pdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBleHRlbnNpb25faGVhZGVycykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9wYXJlbnRfcmVzcG9uc2Vfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHg3ZiwgMHgzMywgMHhmMCwgMHg0ZCwgMHg0YywgMHg0ZCwgMHg0YywgMHgwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlOCwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMSwgMHhiOCwgMHgxNiwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MSwgMHhjYywgMHg5OCwgMHg5MCwgMHhkNiwgMHhmZCwgMHg2OSwgMHhkMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OSwgMHhhMCwgMHgzMCwgMHg0OSwgMHg4MywgMHg3YywgMHhmNywgMHhiNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZiwgMHg4MywgMHgyYSwgMHgwNCwgMHhmNiwgMHgzYiwgMHg4YywgMHhlOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhiNiwgMHgzNywgMHg1MSwgMHg1YiwgMHgyOCwgMHg5YSwgMHgzYiwgMHhiZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZCwgMHhiMywgMHg0ZSwgMHg5ZiwgMHhkOCwgMHgxNCwgMHhjOCwgMHhjOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmNCwgMHgyOCwgMHhmNiwgMHg4ZCwgMHhiNywgMHhmMCwgMHg3ZCwgMHg0NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMywgMHhjMiwgMHhiMSwgMHg2OSwgMHg0ZCwgMHhhZSwgMHhjMSwgMHgyMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgMHg2MiwgMHg5MCwgMHhlYSwgMHhmZiwgMHgxYiwgMHhiNywgMHhkNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZSwgMHg1Y10pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4M2EsIDB4M2UsIDB4OWUsIDB4ZWQsIDB4N2EsIDB4MDEsIDB4MzYsIDB4YTVdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgxMiwgMHhjZiwgMHhkMywgMHg4YiwgMHgzYiwgMHg2MSwgMHg1NSwgMHg1OF0pKQorCisgICAgICAgIGRlY29tcHJlc3NvciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9sb3dwYW5fZGVjb21wcmVzc29yKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMsIHVkcF9oZWFkZXIgPSBkZWNvbXByZXNzb3IuZGVjb21wcmVzcyhpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZlODA6OjM4M2U6OWVlZDo3YTAxOjM2YTUiLCBpcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZTgwOjoxMGNmOmQzOGI6M2I2MTo1NTU4IiwgaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE3LCBpcHY2X2hlYWRlci5uZXh0X2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNTUsIGlwdjZfaGVhZGVyLmhvcF9saW1pdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBleHRlbnNpb25faGVhZGVycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE5Nzg4LCB1ZHBfaGVhZGVyLnNyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE5Nzg4LCB1ZHBfaGVhZGVyLmRzdF9wb3J0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2NoaWxkX2lkX3JlcXVlc3Rfd2hlbl9kZWNvbXByZXNzX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHg3ZiwgMHgzMywgMHhmMCwgMHg0ZCwgMHg0YywgMHg0ZCwgMHg0YywgMHg5YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MiwgMHgwMCwgMHgxNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxNCwgMHgwMywgMHhlMywgMHg3MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MCwgMHg0ZiwgMHg4YywgMHg1YywgMHg0MiwgMHg4MSwgMHg2OCwgMHhlMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHhmYywgMHhmNSwgMHg4YywgMHg2MiwgMHg4ZSwgMHg4MywgMHg5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlNywgMHgyNiwgMHg4NiwgMHgzNCwgMHgzYiwgMHhhNywgMHg2OCwgMHhjNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MywgMHhmYiwgMHg3MiwgMHhkOSwgMHhjYywgMHgxMywgMHg1ZSwgMHg1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NiwgMHgwZSwgMHhmMSwgMHg4MCwgMHgwMywgMHg1NSwgMHg0ZiwgMHgyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMiwgMHg5NiwgMHhmNCwgMHg5YywgMHg2NSwgMHg4MiwgMHg5NywgMHhjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NywgMHgzNSwgMHg4OSwgMHhjMl0pCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnNvdXJjZV9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MTIsIDB4Y2YsIDB4ZDMsIDB4OGIsIDB4M2IsIDB4NjEsIDB4NTUsIDB4NThdKSkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgzYSwgMHgzZSwgMHg5ZSwgMHhlZCwgMHg3YSwgMHgwMSwgMHgzNiwgMHhhNV0pKQorCisgICAgICAgIGRlY29tcHJlc3NvciA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9sb3dwYW5fZGVjb21wcmVzc29yKGNvbnRleHRfbWFuYWdlcj1Ob25lKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBpcHY2X2hlYWRlciwgZXh0ZW5zaW9uX2hlYWRlcnMsIHVkcF9oZWFkZXIgPSBkZWNvbXByZXNzb3IuZGVjb21wcmVzcyhpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZlODA6OjEwY2Y6ZDM4YjozYjYxOjU1NTgiLCBpcHY2X2hlYWRlci5zb3VyY2VfYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZTgwOjozODNlOjllZWQ6N2EwMTozNmE1IiwgaXB2Nl9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcy5jb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE3LCBpcHY2X2hlYWRlci5uZXh0X2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNTUsIGlwdjZfaGVhZGVyLmhvcF9saW1pdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBleHRlbnNpb25faGVhZGVycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE5Nzg4LCB1ZHBfaGVhZGVyLnNyY19wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE5Nzg4LCB1ZHBfaGVhZGVyLmRzdF9wb3J0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2NoaWxkX2lkX3Jlc3BvbnNlX3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4N2YsIDB4MzMsIDB4ZjAsIDB4NGQsIDB4NGMsIDB4NGQsIDB4NGMsIDB4N2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTMsIDB4MDAsIDB4MTUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4NTcsIDB4YmYsIDB4MmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzAsIDB4NGIsIDB4MWQsIDB4YWMsIDB4M2MsIDB4MjQsIDB4MTYsIDB4ZGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZWIsIDB4OTYsIDB4ZWIsIDB4ZGEsIDB4NDIsIDB4ZWIsIDB4MDAsIDB4ODksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NWYsIDB4MzksIDB4YzksIDB4MmIsIDB4N2QsIDB4MzEsIDB4ZDUsIDB4ODMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OWQsIDB4ZGIsIDB4YjcsIDB4YzgsIDB4ZTYsIDB4MjUsIDB4ZDMsIDB4N2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUsIDB4NWYsIDB4NjYsIDB4OWUsIDB4NjMsIDB4MmQsIDB4NDIsIDB4MjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTksIDB4NDEsIDB4ZGMsIDB4YzQsIDB4YzQsIDB4YzAsIDB4OGMsIDB4MDddKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDNhLCAweDNlLCAweDllLCAweGVkLCAweDdhLCAweDAxLCAweDM2LCAweGE1XSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4MTIsIDB4Y2YsIDB4ZDMsIDB4OGIsIDB4M2IsIDB4NjEsIDB4NTUsIDB4NThdKSkKKworICAgICAgICBkZWNvbXByZXNzb3IgPSBjb25maWcuY3JlYXRlX2RlZmF1bHRfbG93cGFuX2RlY29tcHJlc3Nvcihjb250ZXh0X21hbmFnZXI9Tm9uZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgaXB2Nl9oZWFkZXIsIGV4dGVuc2lvbl9oZWFkZXJzLCB1ZHBfaGVhZGVyID0gZGVjb21wcmVzc29yLmRlY29tcHJlc3MoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmZTgwOjozODNlOjllZWQ6N2EwMTozNmE1IiwgaXB2Nl9oZWFkZXIuc291cmNlX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmU4MDo6MTBjZjpkMzhiOjNiNjE6NTU1OCIsIGlwdjZfaGVhZGVyLmRlc3RpbmF0aW9uX2FkZHJlc3MuY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNywgaXB2Nl9oZWFkZXIubmV4dF9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjU1LCBpcHY2X2hlYWRlci5ob3BfbGltaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgZXh0ZW5zaW9uX2hlYWRlcnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxOTc4OCwgdWRwX2hlYWRlci5zcmNfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxOTc4OCwgdWRwX2hlYWRlci5kc3RfcG9ydCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9hZHZlcnRpc2VtZW50X3doZW5fZGVjb21wcmVzc19tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWzB4N2YsIDB4M2IsIDB4MDEsIDB4ZjAsIDB4NGQsIDB4NGMsIDB4NGQsIDB4NGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUsIDB4OWYsIDB4MDAsIDB4MTUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OWUsIDB4YjgsIDB4ZDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmYsIDB4MmEsIDB4ZTAsIDB4MDAsIDB4NWQsIDB4NjYsIDB4NjMsIDB4MDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YTAsIDB4NTksIDB4YjAsIDB4ZDQsIDB4OTUsIDB4N2YsIDB4ZTYsIDB4NzksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcsIDB4ODcsIDB4MmMsIDB4MWQsIDB4ODMsIDB4YWQsIDB4YzIsIDB4NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDcsIDB4MjAsIDB4N2EsIDB4ZTJdKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDNhLCAweDNlLCAweDllLCAweGVkLCAweDdhLCAweDAxLCAweDM2LCAweGE1XSkpCisKKyAgICAgICAgZGVjb21wcmVzc29yID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X2xvd3Bhbl9kZWNvbXByZXNzb3IoY29udGV4dF9tYW5hZ2VyPU5vbmUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGlwdjZfaGVhZGVyLCBleHRlbnNpb25faGVhZGVycywgdWRwX2hlYWRlciA9IGRlY29tcHJlc3Nvci5kZWNvbXByZXNzKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZmU4MDo6MzgzZTo5ZWVkOjdhMDE6MzZhNSIsIGlwdjZfaGVhZGVyLnNvdXJjZV9hZGRyZXNzLmNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZmMDI6OjEiLCBpcHY2X2hlYWRlci5kZXN0aW5hdGlvbl9hZGRyZXNzLmNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTcsIGlwdjZfaGVhZGVyLm5leHRfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI1NSwgaXB2Nl9oZWFkZXIuaG9wX2xpbWl0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGV4dGVuc2lvbl9oZWFkZXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTk3ODgsIHVkcF9oZWFkZXIuc3JjX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTk3ODgsIHVkcF9oZWFkZXIuZHN0X3BvcnQpCisKKworY2xhc3MgVGVzdExvd3BhbkZyYWdtZW50c0J1ZmZlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmFpc2VfVmFsdWVFcnJvcl93aGVuX3dyaXRlX21ldGhvZF9pc19jYWxsZWRfd2l0aF9kYXRhX2xlbmd0aF9iaWdnZXJfdGhhbl9idWZmZXJfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxlbmd0aCA9IHJhbmRvbS5yYW5kaW50KDEsIDEyODApCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXIoYnVmZmVyX3NpemU9KGxlbmd0aCAtIDEpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmcmFnbWVudHNfYnVmZmVyLndyaXRlLCBhbnlfZGF0YShsZW5ndGgpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX21vdmVfd3JpdGVfcG9zaXRpb25fYnlfdGhlX2RhdGFfbGVuZ3RoX3doZW5fd3JpdGVfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsZW5ndGggPSByYW5kb20ucmFuZGludCgxLCAxMjgwKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyKGJ1ZmZlcl9zaXplPWxlbmd0aCkKKworICAgICAgICBzdGFydF9wb3NpdGlvbiA9IGZyYWdtZW50c19idWZmZXIudGVsbCgpCisKKyAgICAgICAgZGF0YSA9IGFueV9kYXRhKGxlbmd0aD1yYW5kb20ucmFuZGludCgxLCBsZW5ndGgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBmcmFnbWVudHNfYnVmZmVyLndyaXRlKGRhdGEpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJhZ21lbnRzX2J1ZmZlci50ZWxsKCkgLSBzdGFydF9wb3NpdGlvbiwgbGVuKGRhdGEpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1ZhbHVlRXJyb3Jfd2hlbl9yZWFkX21ldGhvZF9pc19jYWxsZWRfYnV0X25vdF93aG9sZV9wYWNrZXRfaGFzX2JlZW5fc3RvcmVkX2luX2J1ZmZlcihzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkYXRhID0gYW55X2RhdGEobGVuZ3RoPTMpCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXIoYnVmZmVyX3NpemU9cmFuZG9tLnJhbmRpbnQoNCwgMTI4MCkpCisgICAgICAgIGZyYWdtZW50c19idWZmZXIud3JpdGUoZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnJhZ21lbnRzX2J1ZmZlci5yZWFkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JhaXNlX1ZhbHVlRXJyb3Jfd2hlbl9zZWVrX21ldGhvZF9pc19jYWxsZWRfd2l0aF9vZmZzZXRfYmlnZ2VyX3RoYW5fYnVmZmVyX2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBvZmZzZXQgPSByYW5kb20ucmFuZGludCgxMjgxLCAyNTAwKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyKGJ1ZmZlcl9zaXplPTEyODApCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZyYWdtZW50c19idWZmZXIuc2Vlaywgb2Zmc2V0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3NldF93cml0ZV9wb3NpdGlvbl93aGVuX3NlZWtfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsZW5ndGggPSByYW5kb20ucmFuZGludCgxLCAxMjgwKQorICAgICAgICBvZmZzZXQgPSByYW5kb20ucmFuZGludCgwLCBsZW5ndGggLSAxKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBsb3dwYW4uTG93cGFuRnJhZ21lbnRzQnVmZmVyKGJ1ZmZlcl9zaXplPWxlbmd0aCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci5zZWVrKG9mZnNldCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZmZzZXQsIGZyYWdtZW50c19idWZmZXIudGVsbCgpKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3dyaXRlX3dob2xlX3BhY2tldF90b19idWZmZXJfd2hlbl93cml0ZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRhdGEgPSBhbnlfZGF0YShsZW5ndGg9cmFuZG9tLnJhbmRpbnQoMSwgMTI4MCkpCisKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXIoYnVmZmVyX3NpemU9bGVuKGRhdGEpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBmcmFnbWVudHNfYnVmZmVyLndyaXRlKGRhdGEpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZnJhZ21lbnRzX2J1ZmZlci5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfd3JpdGVfbWFueV9mcmFnbWVudHNfdG9fdGhlX2J1ZmZlcl9hbmRfcmV0dXJuX3dob2xlX21lc3NhZ2Vfd2hlbl93cml0ZV9tZXRob2RfaXNfY2FsbGVkX21hbnlfdGltZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYnVmZmVyX3NpemUgPSA0MgorICAgICAgICBmcmFnbWVudHNfYnVmZmVyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcihidWZmZXJfc2l6ZT1idWZmZXJfc2l6ZSkKKworICAgICAgICBvZmZzZXRfMSA9IDAKKyAgICAgICAgZnJhZ21lbnRfMSA9IGJ5dGVhcnJheShbMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOF0pCisKKyAgICAgICAgb2Zmc2V0XzIgPSA4CisgICAgICAgIGZyYWdtZW50XzIgPSBieXRlYXJyYXkoWzB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTBdKQorCisgICAgICAgIG9mZnNldF8zID0gMTYKKyAgICAgICAgZnJhZ21lbnRfMyA9IGJ5dGVhcnJheShbMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOF0pCisKKyAgICAgICAgb2Zmc2V0XzQgPSAyNAorICAgICAgICBmcmFnbWVudF80ID0gYnl0ZWFycmF5KFsweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIwXSkKKworICAgICAgICBvZmZzZXRfNSA9IDMyCisgICAgICAgIGZyYWdtZW50XzUgPSBieXRlYXJyYXkoWzB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjhdKQorCisgICAgICAgIG9mZnNldF82ID0gNDAKKyAgICAgICAgZnJhZ21lbnRfNiA9IGJ5dGVhcnJheShbMHgyOSwgMHgyYV0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXRfMSkKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShmcmFnbWVudF8xKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXRfMikKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShmcmFnbWVudF8yKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXRfMykKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShmcmFnbWVudF8zKQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXRfNCkKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShmcmFnbWVudF80KQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXRfNSkKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShmcmFnbWVudF81KQorCisgICAgICAgIGZyYWdtZW50c19idWZmZXIuc2VlayhvZmZzZXRfNikKKyAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci53cml0ZShmcmFnbWVudF82KQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI5LCAweDJhXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzX2J1ZmZlci5yZWFkKCkpCisKKworY2xhc3MgVGVzdExvd3BhbkZyYWdtZW50c0J1ZmZlcnNNYW5hZ2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yYWlzZV9WYWx1ZUVycm9yX3doZW5fZ2V0X2ZyYWdtZW50c19idWZmZXJfbWV0aG9kX2lzX2NhbGxlZF93aXRoX2ludmFsaWRfZGF0YWdyYW1fc2l6ZShzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gYW55X21hY19hZGRyZXNzKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX21hY19hZGRyZXNzID0gYW55X21hY19hZGRyZXNzKCkKKworICAgICAgICBuZWdhdGl2ZV9pbnQgPSAtcmFuZG9tLnJhbmRpbnQoMSwgMTI4MCkKKworICAgICAgICBtYW5hZ2VyID0gbG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcnNNYW5hZ2VyKCkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFuYWdlci5nZXRfZnJhZ21lbnRzX2J1ZmZlciwgbWVzc2FnZV9pbmZvLCBhbnlfZGF0YWdyYW1fdGFnKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hbmFnZXIuZ2V0X2ZyYWdtZW50c19idWZmZXIsIG1lc3NhZ2VfaW5mbywgYW55X2RhdGFncmFtX3RhZygpLCBuZWdhdGl2ZV9pbnQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX0xvd3BhbkZyYWdtZW50c0J1ZmZlcl93aGVuX2dldF9mcmFnbWVudHNfYnVmZmVyX21ldGhvZF9pc19jYWxsZWRfd2l0aF92YWxpZF9kYXRhZ3JhbV9zaXplKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBhbnlfbWFjX2FkZHJlc3MoKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBhbnlfbWFjX2FkZHJlc3MoKQorCisgICAgICAgIGRhdGFncmFtX3NpemUgPSBhbnlfZGF0YWdyYW1fc2l6ZSgpCisKKyAgICAgICAgbWFuYWdlciA9IGxvd3Bhbi5Mb3dwYW5GcmFnbWVudHNCdWZmZXJzTWFuYWdlcigpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGZyYWdtZW50c19idWZmZXIgPSBtYW5hZ2VyLmdldF9mcmFnbWVudHNfYnVmZmVyKG1lc3NhZ2VfaW5mbywgYW55X2RhdGFncmFtX3RhZygpLCBkYXRhZ3JhbV9zaXplKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnJhZ21lbnRzX2J1ZmZlciwgbG93cGFuLkxvd3BhbkZyYWdtZW50c0J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhZ3JhbV9zaXplLCBsZW4oZnJhZ21lbnRzX2J1ZmZlcikpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9tYWM4MDIxNTQucHkgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbWFjODAyMTU0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4NDA0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbWFjODAyMTU0LnB5CkBAIC0wLDAgKzEsMjM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IGlvCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjb21tb24gaW1wb3J0IE1hY0FkZHJlc3MsIE1hY0FkZHJlc3NUeXBlCitpbXBvcnQgbWFjODAyMTU0CisKK2xvbmdhZGRycyA9IGJ5dGVhcnJheShbMHg2MSwgMHhjYywgMHgwMCwgMHhjZSwgMHhmYV0pCitzaG9ydGFkZHJzID0gYnl0ZWFycmF5KFsweDYxLCAweDg4LCAweDAwLCAweGNlLCAweGZhXSkKK2xvbmdzaG9ydGFkZHJzID0gYnl0ZWFycmF5KFsweDYxLCAweGM4LCAweDAwLCAweGNlLCAweGZhXSkKK3Nob3J0bG9uZ2FkZHJzID0gYnl0ZWFycmF5KFsweDYxLCAweDhjLCAweDAwLCAweGNlLCAweGZhXSkKKworCitjbGFzcyBUZXN0TWFjUGFyc2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9hY2tfZnJhbWUoc2VsZik6CisgICAgICAgIGZyYW1lID0gbWFjODAyMTU0Lk1hY0ZyYW1lKCkKKyAgICAgICAgZnJhbWUucGFyc2UoaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4MTIsIDB4MDAsIDB4MTIsIDB4MzQsIDB4NTZdKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5BQ0ssIGZyYW1lLmhlYWRlci5mcmFtZV90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGZyYW1lLmhlYWRlci5mcmFtZV9wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBmcmFtZS5oZWFkZXIuYWNrX3JlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmZyYW1lX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHgxMiwgZnJhbWUuaGVhZGVyLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MzQsIDB4NTZdKSwgZnJhbWUuaGVhZGVyLmZjcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmcmFtZS5wYXlsb2FkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2RhdGFfZnJhbWVfd2l0aF9zaG9ydF9hZGRyZXNzZXMoc2VsZik6CisgICAgICAgIGZyYW1lID0gbWFjODAyMTU0Lk1hY0ZyYW1lKCkKKyAgICAgICAgZnJhbWUucGFyc2UoaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4NjEsIDB4ODgsIDB4MzQsIDB4Y2UsIDB4ZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFkLCAweGRlLCAweGVmLCAweGJlLCAweDEyLCAweDM0LCAweGZlLCAweGRjXSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuREFUQSwgZnJhbWUuaGVhZGVyLmZyYW1lX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGZyYW1lLmhlYWRlci5mcmFtZV9wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGZyYW1lLmhlYWRlci5hY2tfcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmcmFtZS5oZWFkZXIuZnJhbWVfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDM0LCBmcmFtZS5oZWFkZXIuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHhmZSwgMHhkY10pLCBmcmFtZS5oZWFkZXIuZmNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLmRlc3RfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZGVhZCwgZnJhbWUuaGVhZGVyLmRlc3RfYWRkcmVzcy5ybG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLnNyY19wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhiZWVmLCBmcmFtZS5oZWFkZXIuc3JjX2FkZHJlc3MucmxvYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgxMiwgMHgzNF0pLCBmcmFtZS5wYXlsb2FkLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGF0YV9mcmFtZV93aXRoX2V4dGVuZGVkX2FkZHJlc3NlcyhzZWxmKToKKyAgICAgICAgZnJhbWUgPSBtYWM4MDIxNTQuTWFjRnJhbWUoKQorICAgICAgICBmcmFtZS5wYXJzZShpby5CeXRlc0lPKGJ5dGVhcnJheShbMHg2MSwgMHhjYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGNlLCAweGZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGIsIDB4YWQsIDB4ZjAsIDB4MGQsIDB4YmEsIDB4ZDAsIDB4ZDAsIDB4MGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkY10pKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkRBVEEsIGZyYW1lLmhlYWRlci5mcmFtZV90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBmcmFtZS5oZWFkZXIuZnJhbWVfcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBmcmFtZS5oZWFkZXIuYWNrX3JlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmZyYW1lX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHg1NiwgZnJhbWUuaGVhZGVyLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4ZmUsIDB4ZGNdKSwgZnJhbWUuaGVhZGVyLmZjcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5kZXN0X3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkocmV2ZXJzZWQoWzB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWZdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGVhZGVyLmRlc3RfYWRkcmVzcy5tYWNfYWRkcmVzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5zcmNfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShyZXZlcnNlZChbMHgwYiwgMHhhZCwgMHhmMCwgMHgwZCwgMHhiYSwgMHhkMCwgMHhkMCwgMHgwZF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oZWFkZXIuc3JjX2FkZHJlc3MubWFjX2FkZHJlc3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MTIsIDB4MzRdKSwgZnJhbWUucGF5bG9hZC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3BhcnNlX2RhdGFfZnJhbWVfd2l0aF9zaG9ydF9hbmRfZXh0ZW5kZWRfYWRkcmVzc2VzKHNlbGYpOgorICAgICAgICBmcmFtZSA9IG1hYzgwMjE1NC5NYWNGcmFtZSgpCisgICAgICAgIGZyYW1lLnBhcnNlKGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFsweDYxLCAweGM4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Y2UsIDB4ZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFkLCAweGRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYiwgMHhhZCwgMHhmMCwgMHgwZCwgMHhiYSwgMHhkMCwgMHhkMCwgMHgwZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlLCAweGRjXSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjODAyMTU0Lk1hY0hlYWRlci5GcmFtZVR5cGUuREFUQSwgZnJhbWUuaGVhZGVyLmZyYW1lX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGZyYW1lLmhlYWRlci5mcmFtZV9wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGZyYW1lLmhlYWRlci5hY2tfcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmcmFtZS5oZWFkZXIuZnJhbWVfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDU2LCBmcmFtZS5oZWFkZXIuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHhmZSwgMHhkY10pLCBmcmFtZS5oZWFkZXIuZmNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLmRlc3RfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZGVhZCwgZnJhbWUuaGVhZGVyLmRlc3RfYWRkcmVzcy5ybG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLnNyY19wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KHJldmVyc2VkKFsweDBiLCAweGFkLCAweGYwLCAweDBkLCAweGJhLCAweGQwLCAweGQwLCAweDBkXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmhlYWRlci5zcmNfYWRkcmVzcy5tYWNfYWRkcmVzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgxMiwgMHgzNF0pLCBmcmFtZS5wYXlsb2FkLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcGFyc2VfZGF0YV9mcmFtZV93aXRoX2V4dGVuZGVkX2FuZF9zaG9ydF9hZGRyZXNzZXMoc2VsZik6CisgICAgICAgIGZyYW1lID0gbWFjODAyMTU0Lk1hY0ZyYW1lKCkKKyAgICAgICAgZnJhbWUucGFyc2UoaW8uQnl0ZXNJTyhieXRlYXJyYXkoWzB4NjEsIDB4OGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjZSwgMHhmYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkLCAweGYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgzNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUsIDB4ZGNdKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5EQVRBLCBmcmFtZS5oZWFkZXIuZnJhbWVfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZnJhbWUuaGVhZGVyLmZyYW1lX3BlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgZnJhbWUuaGVhZGVyLmFja19yZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZyYW1lLmhlYWRlci5mcmFtZV92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4NTYsIGZyYW1lLmhlYWRlci5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweGZlLCAweGRjXSksIGZyYW1lLmhlYWRlci5mY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuZGVzdF9wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KHJldmVyc2VkKFsweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmhlYWRlci5kZXN0X2FkZHJlc3MubWFjX2FkZHJlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuc3JjX3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGYwMGQsIGZyYW1lLmhlYWRlci5zcmNfYWRkcmVzcy5ybG9jKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDEyLCAweDM0XSksIGZyYW1lLnBheWxvYWQuZGF0YSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9wYXJzZV9kYXRhX3JlcXVlc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZnJhbWUgPSBtYWM4MDIxNTQuTWFjRnJhbWUoKQorICAgICAgICBmcmFtZS5wYXJzZShpby5CeXRlc0lPKGJ5dGVhcnJheShbMHg2MywgMHg4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGNlLCAweGZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhZCwgMHhkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGQsIDB4ZjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhkY10pKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hYzgwMjE1NC5NYWNIZWFkZXIuRnJhbWVUeXBlLkNPTU1BTkQsIGZyYW1lLmhlYWRlci5mcmFtZV90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBmcmFtZS5oZWFkZXIuZnJhbWVfcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBmcmFtZS5oZWFkZXIuYWNrX3JlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmZyYW1lX3ZlcnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHg3OCwgZnJhbWUuaGVhZGVyLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4ZmUsIDB4ZGNdKSwgZnJhbWUuaGVhZGVyLmZjcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5kZXN0X3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGRlYWQsIGZyYW1lLmhlYWRlci5kZXN0X2FkZHJlc3MucmxvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5zcmNfcGFuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZjAwZCwgZnJhbWUuaGVhZGVyLnNyY19hZGRyZXNzLnJsb2MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoW10pLCBmcmFtZS5wYXlsb2FkLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfZGVjcnlwdF9kYXRhX2ZyYW1lKHNlbGYpOgorCisgICAgICAgIG1hYzgwMjE1NC5EZXZpY2VEZXNjcmlwdG9ycy5hZGQoMHgyMDAxLCBNYWNBZGRyZXNzKGJ5dGVhcnJheShbMHgxNiwgMHg2ZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwN10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNBZGRyZXNzVHlwZS5MT05HKSkKKworICAgICAgICBmcmFtZSA9IG1hYzgwMjE1NC5NYWNGcmFtZSgpCisgICAgICAgIGZyYW1lLnBhcnNlKGlvLkJ5dGVzSU8oYnl0ZWFycmF5KFsweDY5LCAweDk4LCAweDY4LCAgIyBGQywgc2VxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGNlLCAweGZhLCAgICAgICAjIFBhbiBJZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgyMCwgICAgICAgIyBEc3QgYWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgyMCwgICAgICAgIyBTcmMgYWRkcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgICAgICAgICAgICAgIyBBdXggU2VjdXJpdHkgSGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGI1LCAweDVhLCAweDBkLCAweDhlLCAweDE4LCAweDVjLCAweGIxLCAweDA2LCAgIyBQYXlsb2FkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGM0LCAweDZmLCAweDdkLCAweDZiLCAweGI1LCAweDRhLCAweDg3LCAweDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhZSwgMHhkZCwgMHg4ZSwgMHhiNywgMHgzNywgMHg2MiwgMHgyNywgMHg0OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzksIDB4NTMsIDB4MGMsIDB4NDQsIDB4MzEsIDB4NTksIDB4OGIsIDB4YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzLCAweDU5LCAweGExLCAweDQzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NCwgMHhlMCwgMHgyYSwgMHhmNiwgICMgTUlDICh2YWxpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTksIDB4ZmNdKSkpICAgICAgICAgICAjIEZDUyAodmFsaWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5EQVRBLCBmcmFtZS5oZWFkZXIuZnJhbWVfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZnJhbWUuaGVhZGVyLmZyYW1lX3BlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgZnJhbWUuaGVhZGVyLmFja19yZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZyYW1lLmhlYWRlci5mcmFtZV92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4NjgsIGZyYW1lLmhlYWRlci5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDk5LCAweGZjXSksIGZyYW1lLmhlYWRlci5mY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuZGVzdF9wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHgyMDAwLCBmcmFtZS5oZWFkZXIuZGVzdF9hZGRyZXNzLnJsb2MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmYWNlLCBmcmFtZS5oZWFkZXIuc3JjX3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDIwMDEsIGZyYW1lLmhlYWRlci5zcmNfYWRkcmVzcy5ybG9jKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmF1eF9zZWNfaGVhZGVyLmZyYW1lX2NvdW50ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgZnJhbWUuaGVhZGVyLmF1eF9zZWNfaGVhZGVyLnNlY3VyaXR5X2xldmVsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYnl0ZWFycmF5KFsweDdjLCAweDc3LCAweDgwLCAweGYwLCAweDRkLCAweDRkLCAweDRkLCAweDRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMCwgMHgwNCwgMHg0NCwgMHgwMiwgMHg0NCwgMHg2NiwgMHgxMywgMHg1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4ODAsIDB4YjEsIDB4NjEsIDB4MDIsIDB4NjEsIDB4NzMsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJhLCAweGZmLCAweDAxLCAweDA4LCAweDE2LCAweDZlLCAweDBhLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwN10pKSwgZnJhbWUucGF5bG9hZC5kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2RlY3J5cHRfY29tbWFuZF9mcmFtZShzZWxmKToKKyAgICAgICAgZnJhbWUgPSBtYWM4MDIxNTQuTWFjRnJhbWUoKQorICAgICAgICBmcmFtZS5wYXJzZShpby5CeXRlc0lPKGJ5dGVhcnJheShbMHg2YiwgMHhkYywgMHhjZSwgMHhjZSwgMHhmYSwgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MGEsIDB4NmUsIDB4MTYsIDB4MDMsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDBhLCAweDZlLCAweDE2LCAweDBkLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgyZCwgMHhiYywgMHgxMiwgMHhiZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGEsIDB4NGZdKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWM4MDIxNTQuTWFjSGVhZGVyLkZyYW1lVHlwZS5DT01NQU5ELCBmcmFtZS5oZWFkZXIuZnJhbWVfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZnJhbWUuaGVhZGVyLmZyYW1lX3BlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgZnJhbWUuaGVhZGVyLmFja19yZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZyYW1lLmhlYWRlci5mcmFtZV92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwNiwgZnJhbWUuaGVhZGVyLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MGEsIDB4NGZdKSwgZnJhbWUuaGVhZGVyLmZjcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZhY2UsIGZyYW1lLmhlYWRlci5kZXN0X3Bhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoWzB4MTYsIDB4NmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oZWFkZXIuZGVzdF9hZGRyZXNzLm1hY19hZGRyZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmFjZSwgZnJhbWUuaGVhZGVyLnNyY19wYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KFsweDE2LCAweDZlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGVhZGVyLnNyY19hZGRyZXNzLm1hY19hZGRyZXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZnJhbWUuaGVhZGVyLmF1eF9zZWNfaGVhZGVyLmZyYW1lX2NvdW50ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgZnJhbWUuaGVhZGVyLmF1eF9zZWNfaGVhZGVyLnNlY3VyaXR5X2xldmVsKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbWxlLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X21sZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGJhMjViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X21sZS5weQpAQCAtMCwwICsxLDE3OTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbXBvcnQgaW8KK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29tbW9uCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbmV0X2NyeXB0bworaW1wb3J0IG1sZQoraW1wb3J0IG5ldHdvcmtfZGF0YQorCitmcm9tIGlwYWRkcmVzcyBpbXBvcnQgaXBfYWRkcmVzcworCisKK2RlZiBhbnlfYWRkcmVzcygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9yZWNlaXZlcigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3NlY3VyZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X2RldmljZV90eXBlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfbmV0d29ya19kYXRhKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCittb2RlX21hcCA9IHsKKyAgICAweDAwOiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDA4OiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDA0OiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDBDOiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDAyOiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDBBOiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDA2OiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDBFOiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAwfSwKKyAgICAweDAxOiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDA5OiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDA1OiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDBEOiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDAsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDAzOiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDBCOiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDAsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDA3OiB7InJlY2VpdmVyIjogMCwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAxfSwKKyAgICAweDBGOiB7InJlY2VpdmVyIjogMSwgInNlY3VyZSI6IDEsICJkZXZpY2VfdHlwZSI6IDEsICJuZXR3b3JrX2RhdGEiOiAxfQorfQorCisKK2RlZiBhbnlfbW9kZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X3RpbWVvdXQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfY2hhbGxlbmdlKCk6CisgICAgbGVuZ3RoID0gcmFuZG9tLnJhbmRpbnQoNCwgOCkKKyAgICByZXR1cm4gYnl0ZWFycmF5KHJhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpKQorCisKK2RlZiBhbnlfcmVzcG9uc2UoKToKKyAgICBsZW5ndGggPSByYW5kb20ucmFuZGludCg0LCA4KQorICAgIHJldHVybiBieXRlYXJyYXkocmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGxlbmd0aCkpCisKKworZGVmIGFueV9saW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfbWxlX2ZyYW1lX2NvdW50ZXIoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDMyKQorCisKK2RlZiBhbnlfb3V0cHV0KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfaW5wdXQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9yb3V0ZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X2lkX3NlcXVlbmNlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfcm91dGVyX2lkX21hc2soKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDY0KQorCisKK2RlZiBhbnlfbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhKGxlbmd0aD1Ob25lKToKKyAgICBsZW5ndGggPSBsZW5ndGggaWYgbGVuZ3RoIGlzIG5vdCBOb25lIGVsc2UgcmFuZG9tLnJhbmRpbnQoMCwgNjMpCisgICAgcmV0dXJuIFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0KKworCitkZWYgYW55X3BhcnRpdGlvbl9pZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMzIpCisKKworZGVmIGFueV93ZWlnaHRpbmcoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9kYXRhX3ZlcnNpb24oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworc2Nhbl9tYXNrX21hcCA9IHsKKyAgICAweDAwOiB7InJvdXRlciI6IDAsICJlbmRfZGV2aWNlIjogMH0sCisgICAgMHg0MDogeyJyb3V0ZXIiOiAwLCAiZW5kX2RldmljZSI6IDF9LAorICAgIDB4ODA6IHsicm91dGVyIjogMSwgImVuZF9kZXZpY2UiOiAwfSwKKyAgICAweEMwOiB7InJvdXRlciI6IDEsICJlbmRfZGV2aWNlIjogMX0sCit9CisKKworZGVmIGFueV9zY2FuX21hc2tfcm91dGVyKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfc2Nhbl9tYXNrX2VuZF9kZXZpY2UoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9zY2FuX21hc2soKToKKyAgICByZXR1cm4gKHJhbmRvbS5nZXRyYW5kYml0cygyKSA8PCA2KQorCisKK2RlZiBhbnlfbGlua19tYXJnaW4oKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9zdGF0dXMoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV92ZXJzaW9uKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X2NoYW5uZWxfcGFnZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2NoYW5uZWwoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfcGFuX2lkKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxNikKKworCitkZWYgYW55X3RpbWVzdGFtcF9zZWNvbmRzKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg0OCkKKworCitkZWYgYW55X3RpbWVzdGFtcF90aWNrcygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTUpCisKKworZGVmIGFueV91KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfcHAoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDIpCisKKworZGVmIGFueV9saW5rX3F1YWxpdHlfMygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2xpbmtfcXVhbGl0eV8yKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfbGlua19xdWFsaXR5XzEoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9sZWFkZXJfY29zdCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X2lkX3NlcXVlbmNlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfYWN0aXZlX3JvdXRlcnMoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9zZWRfYnVmZmVyX3NpemUoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfdGx2cyhsZW5ndGg9Tm9uZSk6CisgICAgaWYgbGVuZ3RoIGlzIE5vbmU6CisgICAgICAgIGxlbmd0aCA9IHJhbmRvbS5yYW5kaW50KDAsIDE2KQorCisgICAgcmV0dXJuIFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKV0KKworCitkZWYgYW55X2NpZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X2lpZCgpOgorICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZSg4KV0pCisKKworZGVmIGFueV9pcHY2X2FkZHJlc3MoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoMTYpXSkKKworCitkZWYgYW55X2FkZHJlc3NlcygpOgorICAgIGFkZHJlc3NlcyA9IFsKKyAgICAgICAgbWxlLkFkZHJlc3NDb21wcmVzc2VkKGFueV9jaWQoKSwgYW55X2lpZCgpKSwKKyAgICAgICAgbWxlLkFkZHJlc3NGdWxsKGFueV9pcHY2X2FkZHJlc3MoKSkKKyAgICBdCisKKyAgICByZXR1cm4gYWRkcmVzc2VzCisKKworZGVmIGFueV9rZXlfaWRfbW9kZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMikKKworCitkZWYgYW55X3NlY3VyaXR5X2xldmVsKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygzKQorCisKK2RlZiBhbnlfZnJhbWVfY291bnRlcigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMzIpCisKKworZGVmIGFueV9rZXlfaWQoa2V5X2lkX21vZGUpOgorICAgIGlmIGtleV9pZF9tb2RlID09IDA6CisgICAgICAgIGxlbmd0aCA9IDAKKyAgICBlbGlmIGtleV9pZF9tb2RlID09IDE6CisgICAgICAgIGxlbmd0aCA9IDEKKyAgICBlbGlmIGtleV9pZF9tb2RlID09IDI6CisgICAgICAgIGxlbmd0aCA9IDUKKyAgICBlbGlmIGtleV9pZF9tb2RlID09IDM6CisgICAgICAgIGxlbmd0aCA9IDkKKworICAgIHJldHVybiBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKworCitkZWYgYW55X2V1aTY0KCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDgpXSkKKworCitjbGFzcyBUZXN0U291cmNlQWRkcmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2FkZHJlc3NfdmFsdWVfd2hlbl9hZGRyZXNzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBhZGRyZXNzID0gYW55X2FkZHJlc3MoKQorCisgICAgICAgIHNvdXJjZV9hZGRyZXNzID0gbWxlLlNvdXJjZUFkZHJlc3MoYWRkcmVzcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcy5hZGRyZXNzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcmVzcywgYWN0dWFsX2FkZHJlc3MpCisKKworY2xhc3MgVGVzdFNvdXJjZUFkZHJlc3NGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfU291cmNlQWRkcmVzc19mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYWRkcmVzcyA9IGFueV9hZGRyZXNzKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlNvdXJjZUFkZHJlc3NGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5IIiwgYWRkcmVzcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NvdXJjZV9hZGRyZXNzID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9zb3VyY2VfYWRkcmVzcywgbWxlLlNvdXJjZUFkZHJlc3MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3MsIGFjdHVhbF9zb3VyY2VfYWRkcmVzcy5hZGRyZXNzKQorCisKK2NsYXNzIFRlc3RNb2RlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcmVjZWl2ZXJfdmFsdWVfd2hlbl9yZWNlaXZlcl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmVjZWl2ZXIgPSBhbnlfcmVjZWl2ZXIoKQorCisgICAgICAgIG1vZGUgPSBtbGUuTW9kZShyZWNlaXZlciwgYW55X3NlY3VyZSgpLCBhbnlfZGV2aWNlX3R5cGUoKSwgYW55X25ldHdvcmtfZGF0YSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcmVjZWl2ZXIgPSBtb2RlLnJlY2VpdmVyCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjZWl2ZXIsIGFjdHVhbF9yZWNlaXZlcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VjdXJlX3ZhbHVlX3doZW5fc2VjdXJlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzZWN1cmUgPSBhbnlfc2VjdXJlKCkKKworICAgICAgICBtb2RlID0gbWxlLk1vZGUoYW55X3JlY2VpdmVyKCksIHNlY3VyZSwgYW55X2RldmljZV90eXBlKCksIGFueV9uZXR3b3JrX2RhdGEoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlY3VyZSA9IG1vZGUuc2VjdXJlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VjdXJlLCBhY3R1YWxfc2VjdXJlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9kZXZpY2VfdHlwZV92YWx1ZV93aGVuX2RldmljZV90eXBlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkZXZpY2VfdHlwZSA9IGFueV9kZXZpY2VfdHlwZSgpCisKKyAgICAgICAgbW9kZSA9IG1sZS5Nb2RlKGFueV9yZWNlaXZlcigpLCBhbnlfc2VjdXJlKCksIGRldmljZV90eXBlLCBhbnlfbmV0d29ya19kYXRhKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kZXZpY2VfdHlwZSA9IG1vZGUuZGV2aWNlX3R5cGUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXZpY2VfdHlwZSwgYWN0dWFsX2RldmljZV90eXBlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9uZXR3b3JrX2RhdGFfdmFsdWVfd2hlbl9uZXR3b3JrX2RhdGFfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG5ldHdvcmtfZGF0YSA9IGFueV9uZXR3b3JrX2RhdGEoKQorCisgICAgICAgIG1vZGUgPSBtbGUuTW9kZShhbnlfcmVjZWl2ZXIoKSwgYW55X3NlY3VyZSgpLCBhbnlfZGV2aWNlX3R5cGUoKSwgbmV0d29ya19kYXRhKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbmV0d29ya19kYXRhID0gbW9kZS5uZXR3b3JrX2RhdGEKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXR3b3JrX2RhdGEsIGFjdHVhbF9uZXR3b3JrX2RhdGEpCisKKworY2xhc3MgVGVzdE1vZGVGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTW9kZV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbW9kZSA9IGFueV9tb2RlKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLk1vZGVGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFttb2RlXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21vZGUgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX21vZGUsIG1sZS5Nb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlX21hcFttb2RlXVsicmVjZWl2ZXIiXSwgYWN0dWFsX21vZGUucmVjZWl2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZV9tYXBbbW9kZV1bInNlY3VyZSJdLCBhY3R1YWxfbW9kZS5zZWN1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZV9tYXBbbW9kZV1bImRldmljZV90eXBlIl0sIGFjdHVhbF9tb2RlLmRldmljZV90eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVfbWFwW21vZGVdWyJuZXR3b3JrX2RhdGEiXSwgYWN0dWFsX21vZGUubmV0d29ya19kYXRhKQorCisKK2NsYXNzIFRlc3RUaW1lb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGltZW91dF92YWx1ZV93aGVuX3RpbWVvdXRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRpbWVvdXQgPSBhbnlfdGltZW91dCgpCisKKyAgICAgICAgdGltZW91dF9vYmogPSBtbGUuVGltZW91dCh0aW1lb3V0KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGltZW91dCA9IHRpbWVvdXRfb2JqLnRpbWVvdXQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lb3V0LCBhY3R1YWxfdGltZW91dCkKKworCitjbGFzcyBUZXN0VGltZW91dEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9UaW1lb3V0X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lb3V0ID0gYW55X3RpbWVvdXQoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuVGltZW91dEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkkiLCB0aW1lb3V0KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGltZW91dCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfdGltZW91dCwgbWxlLlRpbWVvdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVvdXQsIGFjdHVhbF90aW1lb3V0LnRpbWVvdXQpCisKKworY2xhc3MgVGVzdENoYWxsZW5nZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NoYWxsZW5nZV92YWx1ZV93aGVuX2NoYWxsZW5nZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2hhbGxlbmdlID0gYW55X2NoYWxsZW5nZSgpCisKKyAgICAgICAgY2hhbGxlbmdlX29iaiA9IG1sZS5DaGFsbGVuZ2UoY2hhbGxlbmdlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY2hhbGxlbmdlID0gY2hhbGxlbmdlX29iai5jaGFsbGVuZ2UKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFsbGVuZ2UsIGFjdHVhbF9jaGFsbGVuZ2UpCisKKworY2xhc3MgVGVzdENoYWxsZW5nZUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9DaGFsbGVuZ2VfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNoYWxsZW5nZSA9IGFueV9jaGFsbGVuZ2UoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuQ2hhbGxlbmdlRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGNoYWxsZW5nZQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY2hhbGxlbmdlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9jaGFsbGVuZ2UsIG1sZS5DaGFsbGVuZ2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYWxsZW5nZSwgYWN0dWFsX2NoYWxsZW5nZS5jaGFsbGVuZ2UpCisKKworY2xhc3MgVGVzdFJlc3BvbnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcmVzcG9uc2VfdmFsdWVfd2hlbl9yZXNwb25zZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcmVzcG9uc2UgPSBhbnlfcmVzcG9uc2UoKQorCisgICAgICAgIHJlc3BvbnNlX29iaiA9IG1sZS5SZXNwb25zZShyZXNwb25zZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3Jlc3BvbnNlID0gcmVzcG9uc2Vfb2JqLnJlc3BvbnNlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UsIGFjdHVhbF9yZXNwb25zZSkKKworCitjbGFzcyBUZXN0UmVzcG9uc2VGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ2hhbGxlbmdlX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByZXNwb25zZSA9IGFueV9yZXNwb25zZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5SZXNwb25zZUZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSByZXNwb25zZQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcmVzcG9uc2UgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3Jlc3BvbnNlLCBtbGUuUmVzcG9uc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLCBhY3R1YWxfcmVzcG9uc2UucmVzcG9uc2UpCisKKworY2xhc3MgVGVzdExpbmtMYXllckZyYW1lQ291bnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2ZyYW1lX2NvdW50ZXJfdmFsdWVfd2hlbl9mcmFtZV9jb3VudGVyX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIgPSBhbnlfbGlua19sYXllcl9mcmFtZV9jb3VudGVyKCkKKworICAgICAgICBsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXJfb2JqID0gbWxlLkxpbmtMYXllckZyYW1lQ291bnRlcihsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIgPSBsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXJfb2JqLmZyYW1lX2NvdW50ZXIKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIsIGFjdHVhbF9saW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIpCisKKworY2xhc3MgVGVzdExpbmtMYXllckZyYW1lQ291bnRlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9MaW5rTGF5ZXJGcmFtZUNvdW50ZXJfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxpbmtfbGF5ZXJfZnJhbWVfY291bnRlciA9IGFueV9saW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+SSIsIGxpbmtfbGF5ZXJfZnJhbWVfY291bnRlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xpbmtfbGF5ZXJfZnJhbWVfY291bnRlciA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbGlua19sYXllcl9mcmFtZV9jb3VudGVyLCBtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIsIGFjdHVhbF9saW5rX2xheWVyX2ZyYW1lX2NvdW50ZXIuZnJhbWVfY291bnRlcikKKworCitjbGFzcyBUZXN0TWxlRnJhbWVDb3VudGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZnJhbWVfY291bnRlcl92YWx1ZV93aGVuX2ZyYW1lX2NvdW50ZXJfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1sZV9mcmFtZV9jb3VudGVyID0gYW55X21sZV9mcmFtZV9jb3VudGVyKCkKKworICAgICAgICBtbGVfZnJhbWVfY291bnRlcl9vYmogPSBtbGUuTWxlRnJhbWVDb3VudGVyKG1sZV9mcmFtZV9jb3VudGVyKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbWxlX2ZyYW1lX2NvdW50ZXIgPSBtbGVfZnJhbWVfY291bnRlcl9vYmouZnJhbWVfY291bnRlcgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZV9mcmFtZV9jb3VudGVyLCBhY3R1YWxfbWxlX2ZyYW1lX2NvdW50ZXIpCisKKworY2xhc3MgVGVzdE1sZUZyYW1lQ291bnRlckZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NbGVGcmFtZUNvdW50ZXJfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1sZV9mcmFtZV9jb3VudGVyID0gYW55X21sZV9mcmFtZV9jb3VudGVyKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLk1sZUZyYW1lQ291bnRlckZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkkiLCBtbGVfZnJhbWVfY291bnRlcikKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21sZV9mcmFtZV9jb3VudGVyID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9tbGVfZnJhbWVfY291bnRlciwgbWxlLk1sZUZyYW1lQ291bnRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlX2ZyYW1lX2NvdW50ZXIsIGFjdHVhbF9tbGVfZnJhbWVfY291bnRlci5mcmFtZV9jb3VudGVyKQorCisKK2NsYXNzIFRlc3RMaW5rUXVhbGl0eUFuZFJvdXRlRGF0YSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX291dHB1dF92YWx1ZV93aGVuX291dHB1dF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb3V0cHV0ID0gYW55X291dHB1dCgpCisKKyAgICAgICAgbHFyZCA9IG1sZS5MaW5rUXVhbGl0eUFuZFJvdXRlRGF0YShvdXRwdXQsIGFueV9pbnB1dCgpLCBhbnlfcm91dGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX291dHB1dCA9IGxxcmQub3V0cHV0CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBhY3R1YWxfb3V0cHV0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9pbnB1dF92YWx1ZV93aGVuX2lucHV0X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBfaW5wdXQgPSBhbnlfaW5wdXQoKQorCisgICAgICAgIGxxcmQgPSBtbGUuTGlua1F1YWxpdHlBbmRSb3V0ZURhdGEoYW55X291dHB1dCgpLCBfaW5wdXQsIGFueV9yb3V0ZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaW5wdXQgPSBscXJkLmlucHV0CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2lucHV0LCBhY3R1YWxfaW5wdXQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3JvdXRlX3ZhbHVlX3doZW5fcm91dGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJvdXRlID0gYW55X3JvdXRlKCkKKworICAgICAgICBscXJkID0gbWxlLkxpbmtRdWFsaXR5QW5kUm91dGVEYXRhKGFueV9vdXRwdXQoKSwgYW55X2lucHV0KCksIHJvdXRlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcm91dGUgPSBscXJkLnJvdXRlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGUsIGFjdHVhbF9yb3V0ZSkKKworCitjbGFzcyBUZXN0TGlua1F1YWxpdHlBbmRSb3V0ZURhdGFGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTGlua1F1YWxpdHlBbmRSb3V0ZURhdGFfZnJvbV93ZWxsX2tub3duX2J5dGVfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGZhY3RvcnkgPSBtbGUuTGlua1F1YWxpdHlBbmRSb3V0ZURhdGFGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDY2XSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xxcmQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBhY3R1YWxfbHFyZC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYWN0dWFsX2xxcmQuaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgYWN0dWFsX2xxcmQucm91dGUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0xpbmtRdWFsaXR5QW5kUm91dGVEYXRhX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBvdXRwdXQgPSBhbnlfb3V0cHV0KCkKKyAgICAgICAgX2lucHV0ID0gYW55X2lucHV0KCkKKyAgICAgICAgcm91dGUgPSBhbnlfcm91dGUoKQorCisgICAgICAgIGxxcmQgPSAob3V0cHV0IDw8IDYpIHwgKF9pbnB1dCA8PCA0KSB8IHJvdXRlCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5MaW5rUXVhbGl0eUFuZFJvdXRlRGF0YUZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2xxcmRdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbHFyZCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbHFyZCwgbWxlLkxpbmtRdWFsaXR5QW5kUm91dGVEYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGFjdHVhbF9scXJkLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfaW5wdXQsIGFjdHVhbF9scXJkLmlucHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlLCBhY3R1YWxfbHFyZC5yb3V0ZSkKKworCitjbGFzcyBUZXN0Um91dGU2NCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2lkX3NlcXVlbmNlX3ZhbHVlX3doZW5faWRfc2VxdWVuY2VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlkX3NlcXVlbmNlID0gYW55X2lkX3NlcXVlbmNlKCkKKworICAgICAgICByb3V0ZTY0X29iaiA9IG1sZS5Sb3V0ZTY0KGlkX3NlcXVlbmNlLCBhbnlfcm91dGVyX2lkX21hc2soKSwgYW55X2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaWRfc2VxdWVuY2UgPSByb3V0ZTY0X29iai5pZF9zZXF1ZW5jZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkX3NlcXVlbmNlLCBhY3R1YWxfaWRfc2VxdWVuY2UpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3JvdXRlcl9pZF9tYXNrX3ZhbHVlX3doZW5fcm91dGVyX2lkX21hc2tfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJvdXRlcl9pZF9tYXNrID0gYW55X3JvdXRlcl9pZF9tYXNrKCkKKworICAgICAgICByb3V0ZTY0X29iaiA9IG1sZS5Sb3V0ZTY0KGFueV9pZF9zZXF1ZW5jZSgpLCByb3V0ZXJfaWRfbWFzaywgYW55X2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcm91dGVyX2lkX21hc2sgPSByb3V0ZTY0X29iai5yb3V0ZXJfaWRfbWFzaworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlcl9pZF9tYXNrLCBhY3R1YWxfcm91dGVyX2lkX21hc2spCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YV92YWx1ZV93aGVuX2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhID0gYW55X2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSgpCisKKyAgICAgICAgcm91dGU2NF9vYmogPSBtbGUuUm91dGU2NChhbnlfaWRfc2VxdWVuY2UoKSwgYW55X3JvdXRlcl9pZF9tYXNrKCksIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSA9IHJvdXRlNjRfb2JqLmxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSwgYWN0dWFsX2xpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSkKKworCitjbGFzcyBUZXN0Um91dGU2NEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Sb3V0ZTY0X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjbGFzcyBEdW1teUxRUkRGYWN0b3J5OgorCisgICAgICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9yZChkYXRhLnJlYWQoMSkpCisKKyAgICAgICAgaWRfc2VxdWVuY2UgPSBhbnlfaWRfc2VxdWVuY2UoKQorICAgICAgICByb3V0ZXJfaWRfbWFzayA9IGFueV9yb3V0ZXJfaWRfbWFzaygpCisKKyAgICAgICAgcm91dGVyX2NvdW50ID0gMAorICAgICAgICBmb3IgaSBpbiByYW5nZSg2NCk6CisgICAgICAgICAgICByb3V0ZXJfY291bnQgKz0gKHJvdXRlcl9pZF9tYXNrID4+IGkpICYgMHgwMQorCisgICAgICAgIGxpbmtfcXVhbGl0eV9hbmRfcm91dGVfZGF0YSA9IGFueV9saW5rX3F1YWxpdHlfYW5kX3JvdXRlX2RhdGEocm91dGVyX2NvdW50KQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuUm91dGU2NEZhY3RvcnkoRHVtbXlMUVJERmFjdG9yeSgpKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2lkX3NlcXVlbmNlXSkgKyBzdHJ1Y3QucGFjaygiPlEiLCByb3V0ZXJfaWRfbWFzaykgKyBieXRlYXJyYXkobGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcm91dGU2NCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfcm91dGU2NCwgbWxlLlJvdXRlNjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkX3NlcXVlbmNlLCBhY3R1YWxfcm91dGU2NC5pZF9zZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZXJfaWRfbWFzaywgYWN0dWFsX3JvdXRlNjQucm91dGVyX2lkX21hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2IgZm9yIGIgaW4gbGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhXSwgYWN0dWFsX3JvdXRlNjQubGlua19xdWFsaXR5X2FuZF9yb3V0ZV9kYXRhKQorCisKK2NsYXNzIFRlc3RBZGRyZXNzMTYodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9hZGRyZXNzX3ZhbHVlX3doZW5fYWRkcmVzc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYWRkcmVzcyA9IGFueV9hZGRyZXNzKCkKKworICAgICAgICBhZGRyZXNzMTYgPSBtbGUuQWRkcmVzczE2KGFkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9hZGRyZXNzID0gYWRkcmVzczE2LmFkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyZXNzLCBhY3R1YWxfYWRkcmVzcykKKworCitjbGFzcyBUZXN0QWRkcmVzczE2RmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0FkZHJlc3MxNl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYWRkcmVzcyA9IGFueV9hZGRyZXNzKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkFkZHJlc3MxNkZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkgiLCBhZGRyZXNzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkcmVzczE2ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9hZGRyZXNzMTYsIG1sZS5BZGRyZXNzMTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3MsIGFjdHVhbF9hZGRyZXNzMTYuYWRkcmVzcykKKworCitjbGFzcyBUZXN0TGVhZGVyRGF0YSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3BhcnRpdGlvbl9pZF92YWx1ZV93aGVuX3BhcnRpdGlvbl9pZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcGFydGl0aW9uX2lkID0gYW55X3BhcnRpdGlvbl9pZCgpCisKKyAgICAgICAgbGVhZGVyX2RhdGEgPSBtbGUuTGVhZGVyRGF0YShwYXJ0aXRpb25faWQsIGFueV93ZWlnaHRpbmcoKSwgYW55X2RhdGFfdmVyc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCksIGFueV9sZWFkZXJfcm91dGVyX2lkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9wYXJ0aXRpb25faWQgPSBsZWFkZXJfZGF0YS5wYXJ0aXRpb25faWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0aXRpb25faWQsIGFjdHVhbF9wYXJ0aXRpb25faWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3dlaWdodGluZ192YWx1ZV93aGVuX3dlaWdodGluZ19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgd2VpZ2h0aW5nID0gYW55X3dlaWdodGluZygpCisKKyAgICAgICAgbGVhZGVyX2RhdGEgPSBtbGUuTGVhZGVyRGF0YShhbnlfcGFydGl0aW9uX2lkKCksIHdlaWdodGluZywgYW55X2RhdGFfdmVyc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCksIGFueV9sZWFkZXJfcm91dGVyX2lkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF93ZWlnaHRpbmcgPSBsZWFkZXJfZGF0YS53ZWlnaHRpbmcKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3ZWlnaHRpbmcsIGFjdHVhbF93ZWlnaHRpbmcpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2RhdGFfdmVyc2lvbl92YWx1ZV93aGVuX2RhdGFfdmVyc2lvbl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZGF0YV92ZXJzaW9uID0gYW55X2RhdGFfdmVyc2lvbigpCisKKyAgICAgICAgbGVhZGVyX2RhdGEgPSBtbGUuTGVhZGVyRGF0YShhbnlfcGFydGl0aW9uX2lkKCksIGFueV93ZWlnaHRpbmcoKSwgZGF0YV92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCksIGFueV9sZWFkZXJfcm91dGVyX2lkKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9kYXRhX3ZlcnNpb24gPSBsZWFkZXJfZGF0YS5kYXRhX3ZlcnNpb24KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhX3ZlcnNpb24sIGFjdHVhbF9kYXRhX3ZlcnNpb24pCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3N0YWJsZV9kYXRhX3ZlcnNpb25fdmFsdWVfd2hlbl9zdGFibGVfZGF0YV92ZXJzaW9uX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGFibGVfZGF0YV92ZXJzaW9uID0gYW55X3N0YWJsZV9kYXRhX3ZlcnNpb24oKQorCisgICAgICAgIGxlYWRlcl9kYXRhID0gbWxlLkxlYWRlckRhdGEoYW55X3BhcnRpdGlvbl9pZCgpLCBhbnlfd2VpZ2h0aW5nKCksIGFueV9kYXRhX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFibGVfZGF0YV92ZXJzaW9uLCBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhYmxlX2RhdGFfdmVyc2lvbiA9IGxlYWRlcl9kYXRhLnN0YWJsZV9kYXRhX3ZlcnNpb24KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGVfZGF0YV92ZXJzaW9uLCBhY3R1YWxfc3RhYmxlX2RhdGFfdmVyc2lvbikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbGVhZGVyX3JvdXRlcl9pZF92YWx1ZV93aGVuX2xlYWRlcl9yb3V0ZXJfaWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxlYWRlcl9yb3V0ZXJfaWQgPSBhbnlfbGVhZGVyX3JvdXRlcl9pZCgpCisKKyAgICAgICAgbGVhZGVyX2RhdGEgPSBtbGUuTGVhZGVyRGF0YShhbnlfcGFydGl0aW9uX2lkKCksIGFueV93ZWlnaHRpbmcoKSwgYW55X2RhdGFfdmVyc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCksIGxlYWRlcl9yb3V0ZXJfaWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9sZWFkZXJfcm91dGVyX2lkID0gbGVhZGVyX2RhdGEubGVhZGVyX3JvdXRlcl9pZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlYWRlcl9yb3V0ZXJfaWQsIGFjdHVhbF9sZWFkZXJfcm91dGVyX2lkKQorCisKK2NsYXNzIFRlc3RMZWFkZXJEYXRhRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0FkZHJlc3MxNl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcGFydGl0aW9uX2lkID0gYW55X3BhcnRpdGlvbl9pZCgpCisgICAgICAgIHdlaWdodGluZyA9IGFueV93ZWlnaHRpbmcoKQorICAgICAgICBkYXRhX3ZlcnNpb24gPSBhbnlfZGF0YV92ZXJzaW9uKCkKKyAgICAgICAgc3RhYmxlX2RhdGFfdmVyc2lvbiA9IGFueV9zdGFibGVfZGF0YV92ZXJzaW9uKCkKKyAgICAgICAgbGVhZGVyX3JvdXRlcl9pZCA9IGFueV9sZWFkZXJfcm91dGVyX2lkKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkxlYWRlckRhdGFGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHN0cnVjdC5wYWNrKCI+SSIsIHBhcnRpdGlvbl9pZCkpICsgXAorICAgICAgICAgICAgYnl0ZWFycmF5KFt3ZWlnaHRpbmcsIGRhdGFfdmVyc2lvbiwgc3RhYmxlX2RhdGFfdmVyc2lvbiwgbGVhZGVyX3JvdXRlcl9pZF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9sZWFkZXJfZGF0YSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbGVhZGVyX2RhdGEsIG1sZS5MZWFkZXJEYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0aXRpb25faWQsIGFjdHVhbF9sZWFkZXJfZGF0YS5wYXJ0aXRpb25faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2VpZ2h0aW5nLCBhY3R1YWxfbGVhZGVyX2RhdGEud2VpZ2h0aW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFfdmVyc2lvbiwgYWN0dWFsX2xlYWRlcl9kYXRhLmRhdGFfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGVfZGF0YV92ZXJzaW9uLCBhY3R1YWxfbGVhZGVyX2RhdGEuc3RhYmxlX2RhdGFfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZWFkZXJfcm91dGVyX2lkLCBhY3R1YWxfbGVhZGVyX2RhdGEubGVhZGVyX3JvdXRlcl9pZCkKKworCitjbGFzcyBUZXN0TmV0d29ya0RhdGEodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90bHZzX3ZhbHVlX3doZW5fdGx2c19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGx2cyA9IGFueV90bHZzKCkKKworICAgICAgICBuZXR3b3JrX2RhdGEgPSBtbGUuTmV0d29ya0RhdGEodGx2cykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RsdnMgPSBuZXR3b3JrX2RhdGEudGx2cworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRsdnMsIGFjdHVhbF90bHZzKQorCisKK2NsYXNzIFRlc3ROZXR3b3JrRGF0YUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9UbHZSZXF1ZXN0X2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjbGFzcyBEdW1teU5ldHdvcmtUbHZzRmFjdG9yeToKKworICAgICAgICAgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIGNvbnRleHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBbYiBmb3IgYiBpbiBieXRlYXJyYXkoZGF0YS5yZWFkKCkpXQorCisgICAgICAgIHRsdnMgPSBhbnlfdGx2cygpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5OZXR3b3JrRGF0YUZhY3RvcnkoRHVtbXlOZXR3b3JrVGx2c0ZhY3RvcnkoKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHRsdnMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9uZXR3b3JrX2RhdGEgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX25ldHdvcmtfZGF0YSwgbWxlLk5ldHdvcmtEYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bHZzLCBhY3R1YWxfbmV0d29ya19kYXRhLnRsdnMpCisKKworY2xhc3MgVGVzdFRsdlJlcXVlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90bHZzX3ZhbHVlX3doZW5fdGx2c19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGx2cyA9IGFueV90bHZzKCkKKworICAgICAgICB0bHZfcmVxdWVzdCA9IG1sZS5UbHZSZXF1ZXN0KHRsdnMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90bHZzID0gdGx2X3JlcXVlc3QudGx2cworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRsdnMsIGFjdHVhbF90bHZzKQorCisKK2NsYXNzIFRlc3RUbHZSZXF1ZXN0RmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1RsdlJlcXVlc3RfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRsdnMgPSBhbnlfdGx2cygpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5UbHZSZXF1ZXN0RmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSh0bHZzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGx2X3JlcXVlc3QgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3Rsdl9yZXF1ZXN0LCBtbGUuVGx2UmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGx2cywgYWN0dWFsX3Rsdl9yZXF1ZXN0LnRsdnMpCisKKworY2xhc3MgVGVzdFNjYW5NYXNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcm91dGVyX3ZhbHVlX3doZW5fcm91dGVyX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICByb3V0ZXIgPSBhbnlfc2Nhbl9tYXNrX3JvdXRlcigpCisKKyAgICAgICAgc2Nhbl9tYXNrID0gbWxlLlNjYW5NYXNrKHJvdXRlciwgYW55X3NjYW5fbWFza19lbmRfZGV2aWNlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yb3V0ZXIgPSBzY2FuX21hc2sucm91dGVyCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGVyLCBhY3R1YWxfcm91dGVyKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9lbmRfZGV2aWNlX3ZhbHVlX3doZW5fZW5kX2RldmljZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZW5kX2RldmljZSA9IGFueV9zY2FuX21hc2tfZW5kX2RldmljZSgpCisKKyAgICAgICAgc2Nhbl9tYXNrID0gbWxlLlNjYW5NYXNrKGFueV9zY2FuX21hc2tfcm91dGVyKCksIGVuZF9kZXZpY2UpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9lbmRfZGV2aWNlID0gc2Nhbl9tYXNrLmVuZF9kZXZpY2UKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmRfZGV2aWNlLCBhY3R1YWxfZW5kX2RldmljZSkKKworCitjbGFzcyBUZXN0U2Nhbk1hc2tGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfU2Nhbk1hc2tfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNjYW5fbWFzayA9IGFueV9zY2FuX21hc2soKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuU2Nhbk1hc2tGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtzY2FuX21hc2tdKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2Nhbl9tYXNrID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9zY2FuX21hc2ssIG1sZS5TY2FuTWFzaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Nhbl9tYXNrX21hcFtzY2FuX21hc2tdWyJyb3V0ZXIiXSwgYWN0dWFsX3NjYW5fbWFzay5yb3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Nhbl9tYXNrX21hcFtzY2FuX21hc2tdWyJlbmRfZGV2aWNlIl0sIGFjdHVhbF9zY2FuX21hc2suZW5kX2RldmljZSkKKworCitjbGFzcyBUZXN0Q29ubmVjdGl2aXR5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcHBfdmFsdWVfd2hlbl9wcF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHAgPSBhbnlfcHAoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KHBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2lkX3NlcXVlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9hY3RpdmVfcm91dGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2J1ZmZlcl9zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfZGF0YWdyYW1fY291bnQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3BwID0gY29ubmVjdGl2aXR5X29iai5wcAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBhY3R1YWxfcHApCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2xpbmtfcXVhbGl0eV8zX3ZhbHVlX3doZW5fbGlua19xdWFsaXR5XzNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxpbmtfcXVhbGl0eV8zID0gYW55X2xpbmtfcXVhbGl0eV8zKCkKKworICAgICAgICBjb25uZWN0aXZpdHlfb2JqID0gbWxlLkNvbm5lY3Rpdml0eShhbnlfcHAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19xdWFsaXR5XzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xlYWRlcl9jb3N0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9pZF9zZXF1ZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfYWN0aXZlX3JvdXRlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9idWZmZXJfc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX3F1YWxpdHlfMyA9IGNvbm5lY3Rpdml0eV9vYmoubGlua19xdWFsaXR5XzMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rX3F1YWxpdHlfMywgYWN0dWFsX2xpbmtfcXVhbGl0eV8zKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9saW5rX3F1YWxpdHlfMl92YWx1ZV93aGVuX2xpbmtfcXVhbGl0eV8yX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsaW5rX3F1YWxpdHlfMiA9IGFueV9saW5rX3F1YWxpdHlfMigpCisKKyAgICAgICAgY29ubmVjdGl2aXR5X29iaiA9IG1sZS5Db25uZWN0aXZpdHkoYW55X3BwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3F1YWxpdHlfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8xKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9sZWFkZXJfY29zdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfaWRfc2VxdWVuY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2FjdGl2ZV9yb3V0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfYnVmZmVyX3NpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbGlua19xdWFsaXR5XzIgPSBjb25uZWN0aXZpdHlfb2JqLmxpbmtfcXVhbGl0eV8yCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzIsIGFjdHVhbF9saW5rX3F1YWxpdHlfMikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbGlua19xdWFsaXR5XzFfdmFsdWVfd2hlbl9saW5rX3F1YWxpdHlfMV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGlua19xdWFsaXR5XzEgPSBhbnlfbGlua19xdWFsaXR5XzEoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KGFueV9wcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcXVhbGl0eV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2lkX3NlcXVlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9hY3RpdmVfcm91dGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2J1ZmZlcl9zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfZGF0YWdyYW1fY291bnQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xpbmtfcXVhbGl0eV8xID0gY29ubmVjdGl2aXR5X29iai5saW5rX3F1YWxpdHlfMQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfcXVhbGl0eV8xLCBhY3R1YWxfbGlua19xdWFsaXR5XzEpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2xlYWRlcl9jb3N0X3ZhbHVlX3doZW5fbGVhZGVyX2Nvc3RfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGxlYWRlcl9jb3N0ID0gYW55X2xlYWRlcl9jb3N0KCkKKworICAgICAgICBjb25uZWN0aXZpdHlfb2JqID0gbWxlLkNvbm5lY3Rpdml0eShhbnlfcHAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGVyX2Nvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9pZF9zZXF1ZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfYWN0aXZlX3JvdXRlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9idWZmZXJfc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2RhdGFncmFtX2NvdW50KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9sZWFkZXJfY29zdCA9IGNvbm5lY3Rpdml0eV9vYmoubGVhZGVyX2Nvc3QKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZWFkZXJfY29zdCwgYWN0dWFsX2xlYWRlcl9jb3N0KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9pZF9zZXF1ZW5jZV92YWx1ZV93aGVuX2lkX3NlcXVlbmNlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZF9zZXF1ZW5jZSA9IGFueV9pZF9zZXF1ZW5jZSgpCisKKyAgICAgICAgY29ubmVjdGl2aXR5X29iaiA9IG1sZS5Db25uZWN0aXZpdHkoYW55X3BwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8xKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9sZWFkZXJfY29zdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZF9zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2FjdGl2ZV9yb3V0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfYnVmZmVyX3NpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaWRfc2VxdWVuY2UgPSBjb25uZWN0aXZpdHlfb2JqLmlkX3NlcXVlbmNlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRfc2VxdWVuY2UsIGFjdHVhbF9pZF9zZXF1ZW5jZSkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fYWN0aXZlX3JvdXRlcnNfdmFsdWVfd2hlbl9hY3RpdmVfcm91dGVyc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYWN0aXZlX3JvdXRlcnMgPSBhbnlfYWN0aXZlX3JvdXRlcnMoKQorCisgICAgICAgIGNvbm5lY3Rpdml0eV9vYmogPSBtbGUuQ29ubmVjdGl2aXR5KGFueV9wcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGVhZGVyX2Nvc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2lkX3NlcXVlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9yb3V0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VkX2J1ZmZlcl9zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfZGF0YWdyYW1fY291bnQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FjdGl2ZV9yb3V0ZXJzID0gY29ubmVjdGl2aXR5X29iai5hY3RpdmVfcm91dGVycworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGl2ZV9yb3V0ZXJzLCBhY3R1YWxfYWN0aXZlX3JvdXRlcnMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NlZF9idWZmZXJfc2l6ZV92YWx1ZV93aGVuX3NlZF9idWZmZXJfc2l6ZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VkX2J1ZmZlcl9zaXplID0gYW55X3NlZF9idWZmZXJfc2l6ZSgpCisKKyAgICAgICAgY29ubmVjdGl2aXR5X29iaiA9IG1sZS5Db25uZWN0aXZpdHkoYW55X3BwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8xKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9sZWFkZXJfY29zdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfaWRfc2VxdWVuY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2FjdGl2ZV9yb3V0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZF9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VkX2J1ZmZlcl9zaXplID0gY29ubmVjdGl2aXR5X29iai5zZWRfYnVmZmVyX3NpemUKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWRfYnVmZmVyX3NpemUsIGFjdHVhbF9zZWRfYnVmZmVyX3NpemUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3NlZF9kYXRhZ3JhbV9jb3VudF92YWx1ZV93aGVuX3NlZF9kYXRhZ3JhbV9jb3VudF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VkX2RhdGFncmFtX2NvdW50ID0gYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpCisKKyAgICAgICAgY29ubmVjdGl2aXR5X29iaiA9IG1sZS5Db25uZWN0aXZpdHkoYW55X3BwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9saW5rX3F1YWxpdHlfMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfbGlua19xdWFsaXR5XzIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2xpbmtfcXVhbGl0eV8xKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9sZWFkZXJfY29zdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfaWRfc2VxdWVuY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X2FjdGl2ZV9yb3V0ZXJzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZWRfYnVmZmVyX3NpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkX2RhdGFncmFtX2NvdW50KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VkX2RhdGFncmFtX2NvdW50ID0gY29ubmVjdGl2aXR5X29iai5zZWRfZGF0YWdyYW1fY291bnQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWRfZGF0YWdyYW1fY291bnQsIGFjdHVhbF9zZWRfZGF0YWdyYW1fY291bnQpCisKKworY2xhc3MgVGVzdENvbm5lY3Rpdml0eUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Db25uZWN0aXZpdHlfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHBwID0gYW55X3BwKCkKKyAgICAgICAgbGlua19xdWFsaXR5XzMgPSBhbnlfbGlua19xdWFsaXR5XzMoKQorICAgICAgICBsaW5rX3F1YWxpdHlfMiA9IGFueV9saW5rX3F1YWxpdHlfMigpCisgICAgICAgIGxpbmtfcXVhbGl0eV8xID0gYW55X2xpbmtfcXVhbGl0eV8xKCkKKyAgICAgICAgbGVhZGVyX2Nvc3QgPSBhbnlfbGVhZGVyX2Nvc3QoKQorICAgICAgICBpZF9zZXF1ZW5jZSA9IGFueV9pZF9zZXF1ZW5jZSgpCisgICAgICAgIGFjdGl2ZV9yb3V0ZXJzID0gYW55X2FjdGl2ZV9yb3V0ZXJzKCkKKyAgICAgICAgc2VkX2J1ZmZlcl9zaXplID0gYW55X3NlZF9idWZmZXJfc2l6ZSgpCisgICAgICAgIHNlZF9kYXRhZ3JhbV9jb3VudCA9IGFueV9zZWRfZGF0YWdyYW1fY291bnQoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuQ29ubmVjdGl2aXR5RmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbcHAsIGxpbmtfcXVhbGl0eV8zLCBsaW5rX3F1YWxpdHlfMiwgbGlua19xdWFsaXR5XzEsIGxlYWRlcl9jb3N0LCBpZF9zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlX3JvdXRlcnNdKSArIHN0cnVjdC5wYWNrKCI+SCIsIHNlZF9idWZmZXJfc2l6ZSkgKyBieXRlYXJyYXkoW3NlZF9kYXRhZ3JhbV9jb3VudF0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jb25uZWN0aXZpdHkgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2Nvbm5lY3Rpdml0eSwgbWxlLkNvbm5lY3Rpdml0eSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIGFjdHVhbF9jb25uZWN0aXZpdHkucHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzMsIGFjdHVhbF9jb25uZWN0aXZpdHkubGlua19xdWFsaXR5XzMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzIsIGFjdHVhbF9jb25uZWN0aXZpdHkubGlua19xdWFsaXR5XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzEsIGFjdHVhbF9jb25uZWN0aXZpdHkubGlua19xdWFsaXR5XzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVhZGVyX2Nvc3QsIGFjdHVhbF9jb25uZWN0aXZpdHkubGVhZGVyX2Nvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRfc2VxdWVuY2UsIGFjdHVhbF9jb25uZWN0aXZpdHkuaWRfc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aXZlX3JvdXRlcnMsIGFjdHVhbF9jb25uZWN0aXZpdHkuYWN0aXZlX3JvdXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VkX2J1ZmZlcl9zaXplLCBhY3R1YWxfY29ubmVjdGl2aXR5LnNlZF9idWZmZXJfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWRfZGF0YWdyYW1fY291bnQsIGFjdHVhbF9jb25uZWN0aXZpdHkuc2VkX2RhdGFncmFtX2NvdW50KQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Db25uZWN0aXZpdHlfd2l0aG91dF9zZWRfZGF0YV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHAgPSBhbnlfcHAoKQorICAgICAgICBsaW5rX3F1YWxpdHlfMyA9IGFueV9saW5rX3F1YWxpdHlfMygpCisgICAgICAgIGxpbmtfcXVhbGl0eV8yID0gYW55X2xpbmtfcXVhbGl0eV8yKCkKKyAgICAgICAgbGlua19xdWFsaXR5XzEgPSBhbnlfbGlua19xdWFsaXR5XzEoKQorICAgICAgICBsZWFkZXJfY29zdCA9IGFueV9sZWFkZXJfY29zdCgpCisgICAgICAgIGlkX3NlcXVlbmNlID0gYW55X2lkX3NlcXVlbmNlKCkKKyAgICAgICAgYWN0aXZlX3JvdXRlcnMgPSBhbnlfYWN0aXZlX3JvdXRlcnMoKQorICAgICAgICBzZWRfYnVmZmVyX3NpemUgPSBhbnlfc2VkX2J1ZmZlcl9zaXplKCkKKyAgICAgICAgc2VkX2RhdGFncmFtX2NvdW50ID0gYW55X3NlZF9kYXRhZ3JhbV9jb3VudCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5Db25uZWN0aXZpdHlGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtwcCwgbGlua19xdWFsaXR5XzMsIGxpbmtfcXVhbGl0eV8yLCBsaW5rX3F1YWxpdHlfMSwgbGVhZGVyX2Nvc3QsIGlkX3NlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVfcm91dGVyc10pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9jb25uZWN0aXZpdHkgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2Nvbm5lY3Rpdml0eSwgbWxlLkNvbm5lY3Rpdml0eSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIGFjdHVhbF9jb25uZWN0aXZpdHkucHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzMsIGFjdHVhbF9jb25uZWN0aXZpdHkubGlua19xdWFsaXR5XzMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzIsIGFjdHVhbF9jb25uZWN0aXZpdHkubGlua19xdWFsaXR5XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlua19xdWFsaXR5XzEsIGFjdHVhbF9jb25uZWN0aXZpdHkubGlua19xdWFsaXR5XzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVhZGVyX2Nvc3QsIGFjdHVhbF9jb25uZWN0aXZpdHkubGVhZGVyX2Nvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRfc2VxdWVuY2UsIGFjdHVhbF9jb25uZWN0aXZpdHkuaWRfc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aXZlX3JvdXRlcnMsIGFjdHVhbF9jb25uZWN0aXZpdHkuYWN0aXZlX3JvdXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgYWN0dWFsX2Nvbm5lY3Rpdml0eS5zZWRfYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgYWN0dWFsX2Nvbm5lY3Rpdml0eS5zZWRfZGF0YWdyYW1fY291bnQpCisKKworY2xhc3MgVGVzdExpbmtNYXJnaW4odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9saW5rX21hcmdpbl92YWx1ZV93aGVuX2xpbmtfbWFyZ2luX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBsaW5rX21hcmdpbiA9IGFueV9saW5rX21hcmdpbigpCisKKyAgICAgICAgbGlua19tYXJnaW5fb2JqID0gbWxlLkxpbmtNYXJnaW4obGlua19tYXJnaW4pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9saW5rX21hcmdpbiA9IGxpbmtfbWFyZ2luX29iai5saW5rX21hcmdpbgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfbWFyZ2luLCBhY3R1YWxfbGlua19tYXJnaW4pCisKKworY2xhc3MgVGVzdExpbmtNYXJnaW5GYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTGlua01hcmdpbl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbGlua19tYXJnaW4gPSBhbnlfbGlua19tYXJnaW4oKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuTGlua01hcmdpbkZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2xpbmtfbWFyZ2luXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2xpbmtfbWFyZ2luID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBkaWN0KCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9saW5rX21hcmdpbiwgbWxlLkxpbmtNYXJnaW4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmtfbWFyZ2luLCBhY3R1YWxfbGlua19tYXJnaW4ubGlua19tYXJnaW4pCisKKworY2xhc3MgVGVzdFN0YXR1cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3N0YXR1c192YWx1ZV93aGVuX3N0YXR1c19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3RhdHVzID0gYW55X3N0YXR1cygpCisKKyAgICAgICAgc3RhdHVzX29iaiA9IG1sZS5TdGF0dXMoc3RhdHVzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhdHVzID0gc3RhdHVzX29iai5zdGF0dXMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIGFjdHVhbF9zdGF0dXMpCisKKworY2xhc3MgVGVzdFN0YXR1c0ZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9TdGF0dXNfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YXR1cyA9IGFueV9zdGF0dXMoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuU3RhdHVzRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbc3RhdHVzXSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YXR1cyA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfc3RhdHVzLCBtbGUuU3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIGFjdHVhbF9zdGF0dXMuc3RhdHVzKQorCisKK2NsYXNzIFRlc3RWZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdmVyc2lvbl92YWx1ZV93aGVuX3ZlcnNpb25fcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHZlcnNpb24gPSBhbnlfdmVyc2lvbigpCisKKyAgICAgICAgdmVyc2lvbl9vYmogPSBtbGUuVmVyc2lvbih2ZXJzaW9uKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmVyc2lvbiA9IHZlcnNpb25fb2JqLnZlcnNpb24KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uLCBhY3R1YWxfdmVyc2lvbikKKworCitjbGFzcyBUZXN0VmVyc2lvbkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9WZXJzaW9uX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB2ZXJzaW9uID0gYW55X3ZlcnNpb24oKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuVmVyc2lvbkZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkgiLCB2ZXJzaW9uKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdmVyc2lvbiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfdmVyc2lvbiwgbWxlLlZlcnNpb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb24sIGFjdHVhbF92ZXJzaW9uLnZlcnNpb24pCisKKworY2xhc3MgVGVzdEFkZHJlc3NSZWdpc3RyYXRpb25GdWxsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5faXB2Nl9hZGRyZXNzX3ZhbHVlX3doZW5faXB2Nl9hZGRyZXNzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpcHY2X2FkZHJlc3MgPSBhbnlfaXB2Nl9hZGRyZXNzKCkKKworICAgICAgICBhZGRyX3JlZ19mdWxsX29iaiA9IG1sZS5BZGRyZXNzRnVsbChpcHY2X2FkZHJlc3MpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9pcHY2X2FkZHJlc3MgPSBhZGRyX3JlZ19mdWxsX29iai5pcHY2X2FkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcHY2X2FkZHJlc3MsIGFjdHVhbF9pcHY2X2FkZHJlc3MpCisKKworY2xhc3MgVGVzdEFkZHJlc3NSZWdpc3RyYXRpb25GdWxsRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX0FkZHJlc3NGdWxsX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpcHY2X2FkZHJlc3MgPSBhbnlfaXB2Nl9hZGRyZXNzKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkFkZHJlc3NGdWxsRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHgwMF0pICsgYnl0ZWFycmF5KGlwdjZfYWRkcmVzcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2FkZHJfcmVnX2Z1bGwgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2FkZHJfcmVnX2Z1bGwsIG1sZS5BZGRyZXNzRnVsbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXB2Nl9hZGRyZXNzLCBhY3R1YWxfYWRkcl9yZWdfZnVsbC5pcHY2X2FkZHJlc3MpCisKKworY2xhc3MgVGVzdEFkZHJlc3NSZWdpc3RyYXRpb25Db21wcmVzc2VkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY2lkX3ZhbHVlX3doZW5fY2lkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjaWQgPSBhbnlfY2lkKCkKKworICAgICAgICBhZGRyX3JlZ19jb21wcmVzc2VkX29iaiA9IG1sZS5BZGRyZXNzQ29tcHJlc3NlZChjaWQsIGFueV9paWQoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NpZCA9IGFkZHJfcmVnX2NvbXByZXNzZWRfb2JqLmNpZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNpZCwgYWN0dWFsX2NpZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY2lkX3ZhbHVlX3doZW5faWlkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpaWQgPSBhbnlfaWlkKCkKKworICAgICAgICBhZGRyX3JlZ19jb21wcmVzc2VkX29iaiA9IG1sZS5BZGRyZXNzQ29tcHJlc3NlZChhbnlfY2lkKCksIGlpZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lpZCA9IGFkZHJfcmVnX2NvbXByZXNzZWRfb2JqLmlpZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlpZCwgYWN0dWFsX2lpZCkKKworCitjbGFzcyBUZXN0QWRkcmVzc1JlZ2lzdHJhdGlvbkNvbXByZXNzZWRGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQWRkcmVzc1JlZ2lzdHJhdGlvbkNvbXByZXNzZWRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNpZCA9IGFueV9jaWQoKQorICAgICAgICBpaWQgPSBhbnlfaWlkKCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLkFkZHJlc3NDb21wcmVzc2VkRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbKDEgPDwgNykgfCBjaWRdKSArIGlpZAorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkcl9yZWdfY29tcHJlc3NlZCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfYWRkcl9yZWdfY29tcHJlc3NlZCwgbWxlLkFkZHJlc3NDb21wcmVzc2VkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaWQsIGFjdHVhbF9hZGRyX3JlZ19jb21wcmVzc2VkLmNpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpaWQsIGFjdHVhbF9hZGRyX3JlZ19jb21wcmVzc2VkLmlpZCkKKworCitjbGFzcyBUZXN0QWRkcmVzc1JlZ2lzdHJhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2FkZHJlc3Nlc192YWx1ZV93aGVuX2FkZHJlc3Nlc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYWRkcmVzc2VzID0gYW55X2FkZHJlc3NlcygpCisKKyAgICAgICAgYWRkcl9yZWdfb2JqID0gbWxlLkFkZHJlc3NSZWdpc3RyYXRpb24oYWRkcmVzc2VzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkcmVzc2VzID0gYWRkcl9yZWdfb2JqLmFkZHJlc3NlcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHJlc3NlcywgYWN0dWFsX2FkZHJlc3NlcykKKworCitjbGFzcyBUZXN0QWRkcmVzc1JlZ2lzdHJhdGlvbkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9BZGRyZXNzUmVnaXN0cmF0aW9uX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjaWQgPSBhbnlfY2lkKCkKKyAgICAgICAgaWlkID0gYW55X2lpZCgpCisgICAgICAgIGlwdjZfYWRkcmVzcyA9IGFueV9pcHY2X2FkZHJlc3MoKQorCisgICAgICAgIGFkZHJlc3NlcyA9IFsKKyAgICAgICAgICAgIG1sZS5BZGRyZXNzQ29tcHJlc3NlZChjaWQsIGlpZCksCisgICAgICAgICAgICBtbGUuQWRkcmVzc0Z1bGwoaXB2Nl9hZGRyZXNzKQorICAgICAgICBdCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5BZGRyZXNzUmVnaXN0cmF0aW9uRmFjdG9yeShtbGUuQWRkcmVzc0NvbXByZXNzZWRGYWN0b3J5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxlLkFkZHJlc3NGdWxsRmFjdG9yeSgpKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoWygxIDw8IDcpIHwgY2lkXSkgKyBpaWQgKyBieXRlYXJyYXkoWzBdKSArIGlwdjZfYWRkcmVzcworCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYWRkcl9yZWcgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2FkZHJfcmVnLCBtbGUuQWRkcmVzc1JlZ2lzdHJhdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcmVzc2VzWzBdLmNpZCwgYWN0dWFsX2FkZHJfcmVnLmFkZHJlc3Nlc1swXS5jaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcmVzc2VzWzBdLmlpZCwgYWN0dWFsX2FkZHJfcmVnLmFkZHJlc3Nlc1swXS5paWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcmVzc2VzWzFdLmlwdjZfYWRkcmVzcywgYWN0dWFsX2FkZHJfcmVnLmFkZHJlc3Nlc1sxXS5pcHY2X2FkZHJlc3MpCisKKworY2xhc3MgVGVzdENoYW5uZWwodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jaGFubmVsX3BhZ2VfdmFsdWVfd2hlbl9jaGFubmVsX3BhZ2VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNoYW5uZWxfcGFnZSA9IGFueV9jaGFubmVsX3BhZ2UoKQorCisgICAgICAgIGNoYW5uZWxfb2JqID0gbWxlLkNoYW5uZWwoY2hhbm5lbF9wYWdlLCBhbnlfY2hhbm5lbCgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY2hhbm5lbF9wYWdlID0gY2hhbm5lbF9vYmouY2hhbm5lbF9wYWdlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhbm5lbF9wYWdlLCBhY3R1YWxfY2hhbm5lbF9wYWdlKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jaGFubmVsX3ZhbHVlX3doZW5fY2hhbm5lbF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2hhbm5lbCA9IGFueV9jaGFubmVsKCkKKworICAgICAgICBjaGFubmVsX29iaiA9IG1sZS5DaGFubmVsKGFueV9jaGFubmVsX3BhZ2UoKSwgY2hhbm5lbCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NoYW5uZWwgPSBjaGFubmVsX29iai5jaGFubmVsCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhbm5lbCwgYWN0dWFsX2NoYW5uZWwpCisKKworY2xhc3MgVGVzdENoYW5uZWxGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQ2hhbm5lbF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2hhbm5lbF9wYWdlID0gYW55X2NoYW5uZWxfcGFnZSgpCisgICAgICAgIGNoYW5uZWwgPSBhbnlfY2hhbm5lbCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5DaGFubmVsRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbY2hhbm5lbF9wYWdlXSkgKyBzdHJ1Y3QucGFjaygiPkgiLCBjaGFubmVsKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY2hhbm5lbCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfY2hhbm5lbCwgbWxlLkNoYW5uZWwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWxfcGFnZSwgYWN0dWFsX2NoYW5uZWwuY2hhbm5lbF9wYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWwsIGFjdHVhbF9jaGFubmVsLmNoYW5uZWwpCisKKworY2xhc3MgVGVzdFBhbklkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcGFuX2lkX3ZhbHVlX3doZW5fcGFuX2lkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBwYW5faWQgPSBhbnlfcGFuX2lkKCkKKworICAgICAgICBwYW5faWRfb2JqID0gbWxlLlBhbklkKHBhbl9pZCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3Bhbl9pZCA9IHBhbl9pZF9vYmoucGFuX2lkCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFuX2lkLCBhY3R1YWxfcGFuX2lkKQorCisKK2NsYXNzIFRlc3RQYW5JZEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9QYW5JZF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcGFuX2lkID0gYW55X3Bhbl9pZCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG1sZS5QYW5JZEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBzdHJ1Y3QucGFjaygiPkgiLCBwYW5faWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9wYW5faWQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGRpY3QoKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3Bhbl9pZCwgbWxlLlBhbklkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYW5faWQsIGFjdHVhbF9wYW5faWQucGFuX2lkKQorCisKK2NsYXNzIFRlc3RBY3RpdmVUaW1lc3RhbXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90aW1lc3RhbXBfc2Vjb25kc192YWx1ZV93aGVuX3RpbWVzdGFtcF9zZWNvbmRzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lc3RhbXBfc2Vjb25kcyA9IGFueV90aW1lc3RhbXBfc2Vjb25kcygpCisKKyAgICAgICAgYWN0aXZlX3RpbWVzdGFtcF9vYmogPSBtbGUuQWN0aXZlVGltZXN0YW1wKHRpbWVzdGFtcF9zZWNvbmRzLCBhbnlfdGltZXN0YW1wX3RpY2tzKCksIGFueV91KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90aW1lc3RhbXBfc2Vjb25kcyA9IGFjdGl2ZV90aW1lc3RhbXBfb2JqLnRpbWVzdGFtcF9zZWNvbmRzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXN0YW1wX3NlY29uZHMsIGFjdHVhbF90aW1lc3RhbXBfc2Vjb25kcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdGltZXN0YW1wX3RpY2tzX3ZhbHVlX3doZW5fdGltZXN0YW1wX3RpY2tzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lc3RhbXBfdGlja3MgPSBhbnlfdGltZXN0YW1wX3RpY2tzKCkKKworICAgICAgICBhY3RpdmVfdGltZXN0YW1wX29iaiA9IG1sZS5BY3RpdmVUaW1lc3RhbXAoYW55X3RpbWVzdGFtcF9zZWNvbmRzKCksIHRpbWVzdGFtcF90aWNrcywgYW55X3UoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3RpbWVzdGFtcF90aWNrcyA9IGFjdGl2ZV90aW1lc3RhbXBfb2JqLnRpbWVzdGFtcF90aWNrcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVzdGFtcF90aWNrcywgYWN0dWFsX3RpbWVzdGFtcF90aWNrcykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fdV92YWx1ZV93aGVuX3VfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHUgPSBhbnlfdSgpCisKKyAgICAgICAgYWN0aXZlX3RpbWVzdGFtcF9vYmogPSBtbGUuQWN0aXZlVGltZXN0YW1wKGFueV90aW1lc3RhbXBfc2Vjb25kcygpLCBhbnlfdGltZXN0YW1wX3RpY2tzKCksIHUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF91ID0gYWN0aXZlX3RpbWVzdGFtcF9vYmoudQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIGFjdHVhbF91KQorCisKK2NsYXNzIFRlc3RBY3RpdmVUaW1lc3RhbXBGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQWN0aXZlVGltZXN0YW1wX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0aW1lc3RhbXBfc2Vjb25kcyA9IGFueV90aW1lc3RhbXBfc2Vjb25kcygpCisgICAgICAgIHRpbWVzdGFtcF90aWNrcyA9IGFueV90aW1lc3RhbXBfdGlja3MoKQorICAgICAgICB1ID0gYW55X3UoKQorCisgICAgICAgIGZhY3RvcnkgPSBtbGUuQWN0aXZlVGltZXN0YW1wRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+USIsIHRpbWVzdGFtcF9zZWNvbmRzKVsyOl0gKyBzdHJ1Y3QucGFjaygiPkgiLCAodGltZXN0YW1wX3RpY2tzIDw8IDEpIHwgdSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0aXZlX3RpbWVzdGFtcCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3RpdmVfdGltZXN0YW1wLCBtbGUuQWN0aXZlVGltZXN0YW1wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lc3RhbXBfc2Vjb25kcywgYWN0aXZlX3RpbWVzdGFtcC50aW1lc3RhbXBfc2Vjb25kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lc3RhbXBfdGlja3MsIGFjdGl2ZV90aW1lc3RhbXAudGltZXN0YW1wX3RpY2tzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIGFjdGl2ZV90aW1lc3RhbXAudSkKKworCitjbGFzcyBUZXN0UGVuZGluZ1RpbWVzdGFtcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3RpbWVzdGFtcF9zZWNvbmRzX3ZhbHVlX3doZW5fdGltZXN0YW1wX3NlY29uZHNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRpbWVzdGFtcF9zZWNvbmRzID0gYW55X3RpbWVzdGFtcF9zZWNvbmRzKCkKKworICAgICAgICBwZW5kaW5nX3RpbWVzdGFtcF9vYmogPSBtbGUuUGVuZGluZ1RpbWVzdGFtcCh0aW1lc3RhbXBfc2Vjb25kcywgYW55X3RpbWVzdGFtcF90aWNrcygpLCBhbnlfdSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdGltZXN0YW1wX3NlY29uZHMgPSBwZW5kaW5nX3RpbWVzdGFtcF9vYmoudGltZXN0YW1wX3NlY29uZHMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lc3RhbXBfc2Vjb25kcywgYWN0dWFsX3RpbWVzdGFtcF9zZWNvbmRzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90aW1lc3RhbXBfdGlja3NfdmFsdWVfd2hlbl90aW1lc3RhbXBfdGlja3NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHRpbWVzdGFtcF90aWNrcyA9IGFueV90aW1lc3RhbXBfdGlja3MoKQorCisgICAgICAgIHBlbmRpbmdfdGltZXN0YW1wX29iaiA9IG1sZS5QZW5kaW5nVGltZXN0YW1wKGFueV90aW1lc3RhbXBfc2Vjb25kcygpLCB0aW1lc3RhbXBfdGlja3MsIGFueV91KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90aW1lc3RhbXBfdGlja3MgPSBwZW5kaW5nX3RpbWVzdGFtcF9vYmoudGltZXN0YW1wX3RpY2tzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXN0YW1wX3RpY2tzLCBhY3R1YWxfdGltZXN0YW1wX3RpY2tzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl91X3ZhbHVlX3doZW5fdV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdSA9IGFueV91KCkKKworICAgICAgICBwZW5kaW5nX3RpbWVzdGFtcF9vYmogPSBtbGUuUGVuZGluZ1RpbWVzdGFtcChhbnlfdGltZXN0YW1wX3NlY29uZHMoKSwgYW55X3RpbWVzdGFtcF90aWNrcygpLCB1KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfdSA9IHBlbmRpbmdfdGltZXN0YW1wX29iai51CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgYWN0dWFsX3UpCisKKworY2xhc3MgVGVzdFBlbmRpbmdUaW1lc3RhbXBGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUGVuZGluZ1RpbWVzdGFtcF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGltZXN0YW1wX3NlY29uZHMgPSBhbnlfdGltZXN0YW1wX3NlY29uZHMoKQorICAgICAgICB0aW1lc3RhbXBfdGlja3MgPSBhbnlfdGltZXN0YW1wX3RpY2tzKCkKKyAgICAgICAgdSA9IGFueV91KCkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLlBlbmRpbmdUaW1lc3RhbXBGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gc3RydWN0LnBhY2soIj5RIiwgdGltZXN0YW1wX3NlY29uZHMpWzI6XSArIHN0cnVjdC5wYWNrKCI+SCIsICh0aW1lc3RhbXBfdGlja3MgPDwgMSkgfCB1KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBwZW5kaW5nX3RpbWVzdGFtcCA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgZGljdCgpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwZW5kaW5nX3RpbWVzdGFtcCwgbWxlLlBlbmRpbmdUaW1lc3RhbXApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVzdGFtcF9zZWNvbmRzLCBwZW5kaW5nX3RpbWVzdGFtcC50aW1lc3RhbXBfc2Vjb25kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lc3RhbXBfdGlja3MsIHBlbmRpbmdfdGltZXN0YW1wLnRpbWVzdGFtcF90aWNrcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBwZW5kaW5nX3RpbWVzdGFtcC51KQorCisKK2NsYXNzIFRlc3RNbGVDb21tYW5kRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX01sZUNvbW1hbmRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDBiLCAweDA0LCAweDA4LCAweGE1LCAweGYyLCAweDliLCAweGRlLCAweGUzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGQ4LCAweGJlLCAweGI5LCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDBkLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDAyLCAweDAwLCAweDAyLCAweDEzLCAweDA5LCAweDgwLCAweDg2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGEyLCAweDFiLCAweDgxLCAweDZkLCAweGI4LCAweGI1LCAweGU4LCAweDBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDBhLCAweDBjLCAweDA5XSkKKworICAgICAgICBmYWN0b3J5ID0gbWxlLk1sZUNvbW1hbmRGYWN0b3J5KGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9tbGVfdGx2c19mYWN0b3JpZXMoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21sZV9jb21tYW5kID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfbWxlX2NvbW1hbmQsIG1sZS5NbGVDb21tYW5kKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDExLCBhY3R1YWxfbWxlX2NvbW1hbmQudHlwZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5SZXNwb25zZShieXRlYXJyYXkoWzB4YTUsIDB4ZjIsIDB4OWIsIDB4ZGUsIDB4ZTMsIDB4ZDgsIDB4YmUsIDB4YjldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX21sZV9jb21tYW5kLnRsdnNbMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKDApLCBhY3R1YWxfbWxlX2NvbW1hbmQudGx2c1sxXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5NbGVGcmFtZUNvdW50ZXIoMSksIGFjdHVhbF9tbGVfY29tbWFuZC50bHZzWzJdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLk1vZGUocmVjZWl2ZXI9MSwgc2VjdXJlPTEsIGRldmljZV90eXBlPTAsIG5ldHdvcmtfZGF0YT0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfbWxlX2NvbW1hbmQudGx2c1szXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5UaW1lb3V0KDI0MCksIGFjdHVhbF9tbGVfY29tbWFuZC50bHZzWzRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLlZlcnNpb24oMiksIGFjdHVhbF9tbGVfY29tbWFuZC50bHZzWzVdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLkFkZHJlc3NSZWdpc3RyYXRpb24oYWRkcmVzc2VzPVsKKyAgICAgICAgICAgIG1sZS5BZGRyZXNzQ29tcHJlc3NlZChjaWQ9MCwgaWlkPWJ5dGVhcnJheShbMHg4NiwgMHhhMiwgMHgxYiwgMHg4MSwgMHg2ZCwgMHhiOCwgMHhiNSwgMHhlOF0pKV0pLAorICAgICAgICAgICAgYWN0dWFsX21sZV9jb21tYW5kLnRsdnNbNl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuVGx2UmVxdWVzdCh0bHZzPVsxMCwgMTIsIDldKSwgYWN0dWFsX21sZV9jb21tYW5kLnRsdnNbN10pCisKKworY2xhc3MgVGVzdE1sZU1lc3NhZ2VGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfTWxlTWVzc2FnZVNlY3VyZWRfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfaXB2NiA9ICJmZTgwOjoxMGNmOmQzOGI6M2I2MTo1NTU4IgorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25faXB2NiA9ICJmZTgwOjozODNlOjllZWQ6N2EwMTozNmE1IgorCisgICAgICAgIG1lc3NhZ2VfaW5mby5zb3VyY2VfbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDEyLCAweGNmLCAweGQzLCAweDhiLCAweDNiLCAweDYxLCAweDU1LCAweDU4XSkpCisgICAgICAgIG1lc3NhZ2VfaW5mby5kZXN0aW5hdGlvbl9tYWNfYWRkcmVzcyA9IGNvbW1vbi5NYWNBZGRyZXNzLmZyb21fZXVpNjQoCisgICAgICAgICAgICBieXRlYXJyYXkoWzB4M2EsIDB4M2UsIDB4OWUsIDB4ZWQsIDB4N2EsIDB4MDEsIDB4MzYsIDB4YTVdKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFsweDAwLCAweDE1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAxLCAweDE0LCAweDAzLCAweGUzLCAweDcyLCAweDUwLCAweDRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjLCAweDVjLCAweDQyLCAweDgxLCAweDY4LCAweGUyLCAweDExLCAweGZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGY1LCAweDhjLCAweDYyLCAweDhlLCAweDgzLCAweDk5LCAweGU3LCAweDI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDg2LCAweDM0LCAweDNiLCAweGE3LCAweDY4LCAweGM3LCAweDkzLCAweGZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyLCAweGQ5LCAweGNjLCAweDEzLCAweDVlLCAweDViLCAweDk2LCAweDBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGYxLCAweDgwLCAweDAzLCAweDU1LCAweDRmLCAweDI3LCAweGMyLCAweDk2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweGY0LCAweDljLCAweDY1LCAweDgyLCAweDk3LCAweGNmLCAweDk3LCAweDM1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDg5LCAweGMyXSkKKworICAgICAgICBmYWN0b3J5ID0gY29uZmlnLmNyZWF0ZV9kZWZhdWx0X21sZV9tZXNzYWdlX2ZhY3RvcnkobWFzdGVyX2tleT1jb25maWcuREVGQVVMVF9NQVNURVJfS0VZKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbWxlX21lc3NhZ2UgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX21sZV9tZXNzYWdlLCBtbGUuTWxlTWVzc2FnZVNlY3VyZWQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTEsIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuUmVzcG9uc2UoYnl0ZWFycmF5KFsweGE1LCAweGYyLCAweDliLCAweGRlLCAweGUzLCAweGQ4LCAweGJlLCAweGI5XSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuTGlua0xheWVyRnJhbWVDb3VudGVyKDApLCBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50bHZzWzFdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLk1sZUZyYW1lQ291bnRlcigxKSwgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1syXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5Nb2RlKHJlY2VpdmVyPTEsIHNlY3VyZT0xLCBkZXZpY2VfdHlwZT0wLCBuZXR3b3JrX2RhdGE9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1szXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5UaW1lb3V0KDI0MCksIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbNF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuVmVyc2lvbigyKSwgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1s1XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1sZS5BZGRyZXNzUmVnaXN0cmF0aW9uKGFkZHJlc3Nlcz1bCisgICAgICAgICAgICBtbGUuQWRkcmVzc0NvbXByZXNzZWQoY2lkPTAsIGlpZD1ieXRlYXJyYXkoWzB4ODYsIDB4YTIsIDB4MWIsIDB4ODEsIDB4NmQsIDB4YjgsIDB4YjUsIDB4ZThdKSldKSwKKyAgICAgICAgICAgIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbNl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuVGx2UmVxdWVzdCh0bHZzPVsxMCwgMTIsIDldKSwgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1s3XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShkYXRhWy00Ol0pLCBhY3R1YWxfbWxlX21lc3NhZ2UubWljKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NbGVNZXNzYWdlU2VjdXJlZF93aXRoX01MRV9EYXRhX1Jlc3BvbnNlX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX2lwdjYgPSAiZmU4MDo6MjQxYzpiMTFiOjdiNjI6Y2FmMSIKKyAgICAgICAgbWVzc2FnZV9pbmZvLmRlc3RpbmF0aW9uX2lwdjYgPSAiZmYwMjo6MSIKKworICAgICAgICBtZXNzYWdlX2luZm8uc291cmNlX21hY19hZGRyZXNzID0gY29tbW9uLk1hY0FkZHJlc3MuZnJvbV9ldWk2NCgKKyAgICAgICAgICAgIGJ5dGVhcnJheShbMHgyNiwgMHgxYywgMHhiMSwgMHgxYiwgMHg3YiwgMHg2MiwgMHhjYSwgMHhmMV0pKQorICAgICAgICBtZXNzYWdlX2luZm8uZGVzdGluYXRpb25fbWFjX2FkZHJlc3MgPSBjb21tb24uTWFjQWRkcmVzcy5mcm9tX2V1aTY0KAorICAgICAgICAgICAgYnl0ZWFycmF5KFsweDNhLCAweGJhLCAweGFkLCAweGNhLCAweGZlLCAweGRlLCAweGZmLCAweGE1XSkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShbMHgwMCwgMHgxNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHhjYSwgMHhkMywgMHg0NSwgMHhlMiwgMHgzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZCwgMHgwMCwgMHgyZCwgMHg3MiwgMHg3MSwgMHhiMSwgMHgxOSwgMHhhZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YiwgMHgwNSwgMHhkOSwgMHg1MiwgMHg3NCwgMHhjZSwgMHhlNiwgMHgzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MywgMHhlYiwgMHhjNiwgMHgyNSwgMHg5NCwgMHgwMSwgMHg2ZCwgMHgyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhkZiwgMHgzMCwgMHg4MiwgMHhmOCwgMHhiYiwgMHgzNCwgMHg0NywgMHg0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MCwgMHhlOSwgMHg0MSwgMHhhNywgMHgzMywgMHhhNV0pCisKKyAgICAgICAgZmFjdG9yeSA9IGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9tbGVfbWVzc2FnZV9mYWN0b3J5KG1hc3Rlcl9rZXk9Y29uZmlnLkRFRkFVTFRfTUFTVEVSX0tFWSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21sZV9tZXNzYWdlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9tbGVfbWVzc2FnZSwgbWxlLk1sZU1lc3NhZ2VTZWN1cmVkKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuU291cmNlQWRkcmVzcyhhZGRyZXNzPTB4OTQwMCksIGFjdHVhbF9tbGVfbWVzc2FnZS5jb21tYW5kLnRsdnNbMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbGUuTGVhZGVyRGF0YSgKKyAgICAgICAgICAgIHBhcnRpdGlvbl9pZD0weDA2ZDAxNGNhLAorICAgICAgICAgICAgd2VpZ2h0aW5nPTY0LAorICAgICAgICAgICAgZGF0YV92ZXJzaW9uPTEzMSwKKyAgICAgICAgICAgIHN0YWJsZV9kYXRhX3ZlcnNpb249MTY4LAorICAgICAgICAgICAgbGVhZGVyX3JvdXRlcl9pZD0zNworICAgICAgICApLCBhY3R1YWxfbWxlX21lc3NhZ2UuY29tbWFuZC50bHZzWzFdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxlLk5ldHdvcmtEYXRhKHRsdnM9WworICAgICAgICAgICAgbmV0d29ya19kYXRhLlByZWZpeCgKKyAgICAgICAgICAgICAgICBkb21haW5faWQ9MCwKKyAgICAgICAgICAgICAgICBwcmVmaXhfbGVuZ3RoPTY0LAorICAgICAgICAgICAgICAgIHByZWZpeD1ieXRlYXJyYXkoWzB4MTIsIDB4MzQsIDB4MTIsIDB4MzQsIDB4MTIsIDB4MzQsIDB4MTIsIDB4MzRdKSwKKyAgICAgICAgICAgICAgICBzdWJfdGx2cz1bCisgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfZGF0YS5Mb3dwYW5JZChjPTEsIGNpZD0xLCBjb250ZXh0X2xlbmd0aD02NCwgc3RhYmxlPTEpLAorICAgICAgICAgICAgICAgICAgICBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGJvcmRlcl9yb3V0ZXJfMTY9Mzc4ODgsIHByZj0wLCBwPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcz0xLCBkPTAsIGM9MCwgcj0xLCBvPTEsIG49MCwgc3RhYmxlPTEpCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBzdGFibGU9MQorICAgICAgICAgICAgKQorICAgICAgICBdKSwgYWN0dWFsX21sZV9tZXNzYWdlLmNvbW1hbmQudGx2c1syXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShkYXRhWy00Ol0pLCBhY3R1YWxfbWxlX21lc3NhZ2UubWljKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbmV0d29ya19kYXRhLnB5IGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X25ldHdvcmtfZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYzQzNzMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2NyaXB0cy90aHJlYWQtY2VydC90ZXN0X25ldHdvcmtfZGF0YS5weQpAQCAtMCwwICsxLDk2NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IG1hdGgKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29tbW9uCitpbXBvcnQgY29uZmlnCitpbXBvcnQgbmV0d29ya19kYXRhCisKKworZGVmIGNvbnZlcnRfcm91dGVfdG9fYnl0ZWFycmF5KHJvdXRlKToKKyAgICByZXR1cm4gc3RydWN0LnBhY2soIj5IQiIsIHJvdXRlLmJvcmRlcl9yb3V0ZXJfMTYsICgocm91dGUucHJmICYgMHgwMykgPDwgNikpCisKKworZGVmIGNvbnZlcnRfcm91dGVzX3RvX2J5dGVhcnJheShyb3V0ZXMpOgorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgIGZvciByb3V0ZSBpbiByb3V0ZXM6CisgICAgICAgIGRhdGEgKz0gY29udmVydF9yb3V0ZV90b19ieXRlYXJyYXkocm91dGUpCisKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBjb252ZXJ0X2hhc19yb3V0ZV90b19ieXRlYXJyYXkoaGFzX3JvdXRlKToKKyAgICByZXR1cm4gY29udmVydF9yb3V0ZXNfdG9fYnl0ZWFycmF5KGhhc19yb3V0ZS5yb3V0ZXMpCisKKworZGVmIGNvbnZlcnRfYm9yZGVyX3JvdXRlcl90b19ieXRlYXJyYXkoYm9yZGVyX3JvdXRlcik6CisgICAgZGF0YSA9IHN0cnVjdC5wYWNrKCI+SEJCIiwgYm9yZGVyX3JvdXRlci5ib3JkZXJfcm91dGVyXzE2LAorICAgICAgICAgICAgICAgICAgICAgICAoYm9yZGVyX3JvdXRlci5vICYgMHgwMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAoKGJvcmRlcl9yb3V0ZXIuciAmIDB4MDEpIDw8IDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKChib3JkZXJfcm91dGVyLmMgJiAweDAxKSA8PCAyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgoYm9yZGVyX3JvdXRlci5kICYgMHgwMSkgPDwgMykgfAorICAgICAgICAgICAgICAgICAgICAgICAoKGJvcmRlcl9yb3V0ZXIucyAmIDB4MDEpIDw8IDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKChib3JkZXJfcm91dGVyLnAgJiAweDAxKSA8PCA1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICgoYm9yZGVyX3JvdXRlci5wcmYgJiAweDAzKSA8PCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChib3JkZXJfcm91dGVyLm4gJiAweDAxKSA8PCA3KSkKKworICAgIHJldHVybiBkYXRhCisKKworZGVmIGNvbnZlcnRfbG93cGFuX2lkX3RvX2J5dGVhcnJheShsb3dwYW5faWQpOgorICAgIHJldHVybiBieXRlYXJyYXkoW2xvd3Bhbl9pZC5jaWQgfCAobG93cGFuX2lkLmMgPDwgNCksIGxvd3Bhbl9pZC5jb250ZXh0X2xlbmd0aF0pCisKKworZGVmIGNvbnZlcnRfcHJlZml4X3N1Yl90bHZzX3RvX2J5dGVhcnJheShzdWJfdGx2cyk6CisgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisKKyAgICBmb3Igc3ViX3RsdiBpbiBzdWJfdGx2czoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdWJfdGx2LCBuZXR3b3JrX2RhdGEuSGFzUm91dGUpOgorICAgICAgICAgICAgdmFsdWUgPSBjb252ZXJ0X2hhc19yb3V0ZV90b19ieXRlYXJyYXkoc3ViX3RsdikKKyAgICAgICAgICAgIF90eXBlID0gc3ViX3Rsdi5zdGFibGUgfCAoKDAgJiAweDdmKSA8PCAxKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdWJfdGx2LCBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKToKKyAgICAgICAgICAgIHZhbHVlID0gY29udmVydF9ib3JkZXJfcm91dGVyX3RvX2J5dGVhcnJheShzdWJfdGx2KQorICAgICAgICAgICAgX3R5cGUgPSBzdWJfdGx2LnN0YWJsZSB8ICgoMiAmIDB4N2YpIDw8IDEpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN1Yl90bHYsIG5ldHdvcmtfZGF0YS5Mb3dwYW5JZCk6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbnZlcnRfbG93cGFuX2lkX3RvX2J5dGVhcnJheShzdWJfdGx2KQorICAgICAgICAgICAgX3R5cGUgPSBzdWJfdGx2LnN0YWJsZSB8ICgoMyAmIDB4N2YpIDw8IDEpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgICAgICBkYXRhICs9IGJ5dGVhcnJheShbX3R5cGUsIGxlbih2YWx1ZSldKSArIHZhbHVlCisKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBjb252ZXJ0X3NlcnZlcl90b19ieXRlYXJyYXkoc2VydmVyKToKKyAgICByZXR1cm4gc3RydWN0LnBhY2soIj5IIiwgc2VydmVyLnNlcnZlcl8xNikgKyBzZXJ2ZXIuc2VydmVyX2RhdGEKKworCitkZWYgY29udmVydF9zZXJ2aWNlX3N1Yl90bHZzX3RvX2J5dGVhcnJheShzdWJfdGx2cyk6CisgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisKKyAgICBmb3Igc3ViX3RsdiBpbiBzdWJfdGx2czoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdWJfdGx2LCBuZXR3b3JrX2RhdGEuU2VydmVyKToKKyAgICAgICAgICAgIHZhbHVlID0gY29udmVydF9zZXJ2ZXJfdG9fYnl0ZWFycmF5KHN1Yl90bHYpCisgICAgICAgICAgICBfdHlwZSA9IHN1Yl90bHYuc3RhYmxlIHwgKCg2ICYgMHg3ZikgPDwgMSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgICAgIGRhdGEgKz0gYnl0ZWFycmF5KFtfdHlwZSwgbGVuKHZhbHVlKV0pICsgdmFsdWUKKworICAgIHJldHVybiBkYXRhCisKKworZGVmIGNvbnZlcnRfc2VydmljZV90b19ieXRlYXJyYXkoc2VydmljZSk6CisgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCI+QkxCIiwgKChzZXJ2aWNlLnQgJiAweDAxKSA8PCA3KSB8ICgoc2VydmljZS5pZCkgJiAweDBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5lbnRlcnByaXNlX251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5zZXJ2aWNlX2RhdGFfbGVuZ3RoKSArIFwKKyAgICAgICAgc2VydmljZS5zZXJ2aWNlX2RhdGEgKyBcCisgICAgICAgIGNvbnZlcnRfc2VydmljZV9zdWJfdGx2c190b19ieXRlYXJyYXkoc2VydmljZS5zdWJfdGx2cykKKworCitkZWYgYW55X2JvcmRlcl9yb3V0ZXJfMTYoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDE2KQorCisKK2RlZiBhbnlfcHJmKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygyKQorCisKK2RlZiBhbnlfcm91dGUoKToKKyAgICByZXR1cm4gbmV0d29ya19kYXRhLlJvdXRlKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoKSkKKworCitkZWYgYW55X3JvdXRlcyhjb3VudD1Ob25lKToKKyAgICBpZiBjb3VudCBpcyBOb25lOgorICAgICAgICBjb3VudCA9IHJhbmRvbS5yYW5kaW50KDAsIDE2KQorCisgICAgcmV0dXJuIFthbnlfcm91dGUoKSBmb3IgXyBpbiByYW5nZSg2KV0KKworCitkZWYgYW55X2hhc19yb3V0ZSgpOgorICAgIHJldHVybiBuZXR3b3JrX2RhdGEuSGFzUm91dGUoYW55X3JvdXRlcygpLCBhbnlfc3RhYmxlKCkpCisKKworZGVmIGFueV9kb21haW5faWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDgpCisKKworZGVmIGFueV9wcmVmaXhfbGVuZ3RoKCk6CisgICAgcmV0dXJuIHJhbmRvbS5yYW5kaW50KDEsIDE2KQorCisKK2RlZiBhbnlfcHJlZml4KHByZWZpeF9sZW5ndGg9Tm9uZSk6CisgICAgaWYgcHJlZml4X2xlbmd0aCBpcyBOb25lOgorICAgICAgICBwcmVmaXhfbGVuZ3RoID0gYW55X3ByZWZpeF9sZW5ndGgoKQorCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGludChtYXRoLmNlaWwocHJlZml4X2xlbmd0aCAvIDgpKSldKQorCisKK2RlZiBhbnlfcCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3MoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9kKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfYygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X3IoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDEpCisKKworZGVmIGFueV9vKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfbigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMSkKKworCitkZWYgYW55X2NpZCgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNCkKKworCitkZWYgYW55X2NvbnRleHRfbGVuZ3RoKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfYm9yZGVyX3JvdXRlcigpOgorICAgIHJldHVybiBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoKSwgYW55X3AoKSwgYW55X3MoKSwgYW55X2QoKSwgYW55X2MoKSwgYW55X3IoKSwgYW55X28oKSwgYW55X24oKSwgYW55X3N0YWJsZSgpKQorCisKK2RlZiBhbnlfbG93cGFuX2lkKCk6CisgICAgcmV0dXJuIG5ldHdvcmtfZGF0YS5Mb3dwYW5JZChhbnlfYygpLCBhbnlfY2lkKCksIGFueV9jb250ZXh0X2xlbmd0aCgpLCBhbnlfc3RhYmxlKCkpCisKKworZGVmIGFueV9wcmVmaXhfc3ViX3RsdnMoKToKKyAgICBjcmVhdG9yID0gWworICAgICAgICBhbnlfaGFzX3JvdXRlLAorICAgICAgICBhbnlfYm9yZGVyX3JvdXRlciwKKyAgICAgICAgYW55X2xvd3Bhbl9pZAorICAgIF0KKworICAgIHN1Yl90bHZzID0gW10KKworICAgIGZvciBfaWQgaW4gcmFuZ2UocmFuZG9tLnJhbmRpbnQoMSwgMSkpOgorICAgICAgICBjID0gcmFuZG9tLmNob2ljZShjcmVhdG9yKQorICAgICAgICBzdWJfdGx2cy5hcHBlbmQoYygpKQorCisgICAgcmV0dXJuIHN1Yl90bHZzCisKKworZGVmIGFueV90KCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfaWQoKToKKyAgICByZXR1cm4gcmFuZG9tLmdldHJhbmRiaXRzKDQpCisKKworZGVmIGFueV9lbnRlcnByaXNlX251bWJlcigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMzIpCisKKworZGVmIGFueV9zZXJ2aWNlX2RhdGFfbGVuZ3RoKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg4KQorCisKK2RlZiBhbnlfc2VydmljZV9kYXRhKGRhdGFfbGVuZ3RoPU5vbmUpOgorICAgIGlmIGRhdGFfbGVuZ3RoIGlzIE5vbmU6CisgICAgICAgIGRhdGFfbGVuZ3RoID0gcmFuZG9tLnJhbmRpbnQoMCwgMTYpCisKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoZGF0YV9sZW5ndGgpXSkKKworCitkZWYgYW55X3NlcnZlcl8xNigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9zZXJ2ZXJfZGF0YShkYXRhX2xlbmd0aD1Ob25lKToKKyAgICBpZiBkYXRhX2xlbmd0aCBpcyBOb25lOgorICAgICAgICBkYXRhX2xlbmd0aCA9IHJhbmRvbS5yYW5kaW50KDAsIDMyKQorCisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKGRhdGFfbGVuZ3RoKV0pCisKKworZGVmIGFueV9zZXJ2ZXIoKToKKyAgICByZXR1cm4gbmV0d29ya19kYXRhLlNlcnZlcihhbnlfc2VydmVyXzE2KCksIGFueV9zZXJ2ZXJfZGF0YSgpLCBhbnlfc3RhYmxlKCkpCisKKworZGVmIGFueV9zZXJ2aWNlX3N1Yl90bHZzKCk6CisgICAgY3JlYXRvciA9IFsKKyAgICAgICAgYW55X3NlcnZlcgorICAgIF0KKworICAgIHN1Yl90bHZzID0gW10KKworICAgIGZvciBfaWQgaW4gcmFuZ2UocmFuZG9tLnJhbmRpbnQoMCwgMTYpKToKKyAgICAgICAgYyA9IHJhbmRvbS5jaG9pY2UoY3JlYXRvcikKKyAgICAgICAgc3ViX3RsdnMuYXBwZW5kKGMoKSkKKworICAgIHJldHVybiBzdWJfdGx2cworCisKK2RlZiBhbnlfc3RhYmxlKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2NsYXNzIFRlc3RSb3V0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2JvcmRlcl9yb3V0ZXJfMTZfdmFsdWVfd2hlbl9ib3JkZXJfcm91dGVyXzE2X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBib3JkZXJfcm91dGVyXzE2ID0gYW55X2JvcmRlcl9yb3V0ZXJfMTYoKQorCisgICAgICAgIHJvdXRlID0gbmV0d29ya19kYXRhLlJvdXRlKGJvcmRlcl9yb3V0ZXJfMTYsIGFueV9wcmYoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2JvcmRlcl9yb3V0ZXJfMTYgPSByb3V0ZS5ib3JkZXJfcm91dGVyXzE2CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9yZGVyX3JvdXRlcl8xNiwgYWN0dWFsX2JvcmRlcl9yb3V0ZXJfMTYpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ByZl92YWx1ZV93aGVuX3ByZl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHJmID0gYW55X3ByZigpCisKKyAgICAgICAgcm91dGUgPSBuZXR3b3JrX2RhdGEuUm91dGUoYW55X2JvcmRlcl9yb3V0ZXJfMTYoKSwgcHJmKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcHJmID0gcm91dGUucHJmCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJmLCBhY3R1YWxfcHJmKQorCisKK2NsYXNzIFRlc3RSb3V0ZUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Sb3V0ZV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYm9yZGVyX3JvdXRlcl8xNiA9IGFueV9ib3JkZXJfcm91dGVyXzE2KCkKKyAgICAgICAgcHJmID0gYW55X3ByZigpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5Sb3V0ZUZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBjb252ZXJ0X3JvdXRlX3RvX2J5dGVhcnJheShuZXR3b3JrX2RhdGEuUm91dGUoYm9yZGVyX3JvdXRlcl8xNiwgcHJmKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3JvdXRlID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBOb25lKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfcm91dGUsIG5ldHdvcmtfZGF0YS5Sb3V0ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9yZGVyX3JvdXRlcl8xNiwgYWN0dWFsX3JvdXRlLmJvcmRlcl9yb3V0ZXJfMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJmLCBhY3R1YWxfcm91dGUucHJmKQorCisKK2NsYXNzIFRlc3RSb3V0ZXNGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUm91dGVfbGlzdF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcm91dGVzID0gYW55X3JvdXRlcygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5Sb3V0ZXNGYWN0b3J5KG5ldHdvcmtfZGF0YS5Sb3V0ZUZhY3RvcnkoKSkKKworICAgICAgICBkYXRhID0gY29udmVydF9yb3V0ZXNfdG9fYnl0ZWFycmF5KHJvdXRlcykKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yb3V0ZXMgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIE5vbmUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9yb3V0ZXMsIGxpc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlcywgYWN0dWFsX3JvdXRlcykKKworCitjbGFzcyBUZXN0SGFzUm91dGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9yb3V0ZXNfdmFsdWVfd2hlbl9yb3V0ZXNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJvdXRlcyA9IGFueV9yb3V0ZXMoKQorCisgICAgICAgIGhhc19yb3V0ZSA9IG5ldHdvcmtfZGF0YS5IYXNSb3V0ZShyb3V0ZXMsIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3JvdXRlcyA9IGhhc19yb3V0ZS5yb3V0ZXMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZXMsIGFjdHVhbF9yb3V0ZXMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3N0YWJsZV92YWx1ZV93aGVuX3N0YWJsZV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgaGFzX3JvdXRlID0gbmV0d29ya19kYXRhLkhhc1JvdXRlKGFueV9yb3V0ZXMoKSwgc3RhYmxlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhYmxlID0gaGFzX3JvdXRlLnN0YWJsZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX3N0YWJsZSkKKworCitjbGFzcyBUZXN0SGFzUm91dGVGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfSGFzUm91dGVfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJvdXRlcyA9IGFueV9yb3V0ZXMoKQorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19kYXRhLkhhc1JvdXRlRmFjdG9yeShuZXR3b3JrX2RhdGEuUm91dGVzRmFjdG9yeShuZXR3b3JrX2RhdGEuUm91dGVGYWN0b3J5KCkpKQorCisgICAgICAgIGRhdGEgPSBjb252ZXJ0X3JvdXRlc190b19ieXRlYXJyYXkocm91dGVzKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zdGFibGUgPSBzdGFibGUKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2hhc19yb3V0ZSA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgbWVzc2FnZV9pbmZvKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfaGFzX3JvdXRlLCBuZXR3b3JrX2RhdGEuSGFzUm91dGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdXRlcywgYWN0dWFsX2hhc19yb3V0ZS5yb3V0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlLCBhY3R1YWxfaGFzX3JvdXRlLnN0YWJsZSkKKworCitjbGFzcyBUZXN0UHJlZml4KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fZG9tYWluX2lkX3ZhbHVlX3doZW5fZG9tYWluX2lkX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkb21haW5faWQgPSBhbnlfZG9tYWluX2lkKCkKKworICAgICAgICBwcmVmaXggPSBuZXR3b3JrX2RhdGEuUHJlZml4KGRvbWFpbl9pZCwgYW55X3ByZWZpeF9sZW5ndGgoKSwgYW55X3ByZWZpeCgpLCBhbnlfcHJlZml4X3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2RvbWFpbl9pZCA9IHByZWZpeC5kb21haW5faWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb21haW5faWQsIGFjdHVhbF9kb21haW5faWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ByZWZpeF9sZW5ndGhfdmFsdWVfd2hlbl9wcmVmaXhfbGVuZ3RoX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBwcmVmaXhfbGVuZ3RoID0gYW55X3ByZWZpeF9sZW5ndGgoKQorCisgICAgICAgIHByZWZpeCA9IG5ldHdvcmtfZGF0YS5QcmVmaXgoYW55X2RvbWFpbl9pZCgpLCBwcmVmaXhfbGVuZ3RoLCBhbnlfcHJlZml4KCksIGFueV9wcmVmaXhfc3ViX3RsdnMoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcHJlZml4X2xlbmd0aCA9IHByZWZpeC5wcmVmaXhfbGVuZ3RoCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJlZml4X2xlbmd0aCwgYWN0dWFsX3ByZWZpeF9sZW5ndGgpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3ByZWZpeF92YWx1ZV93aGVuX3ByZWZpeF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcHJlZml4ID0gYW55X3ByZWZpeCgpCisKKyAgICAgICAgcHJlZml4X29iaiA9IG5ldHdvcmtfZGF0YS5QcmVmaXgoYW55X2RvbWFpbl9pZCgpLCBhbnlfcHJlZml4X2xlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIGFueV9wcmVmaXhfc3ViX3RsdnMoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcHJlZml4ID0gcHJlZml4X29iai5wcmVmaXgKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmVmaXgsIGFjdHVhbF9wcmVmaXgpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3N1Yl90bHZzX3ZhbHVlX3doZW5fc3ViX3RsdnNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN1Yl90bHZzID0gYW55X3ByZWZpeF9zdWJfdGx2cygpCisKKyAgICAgICAgcHJlZml4X29iaiA9IG5ldHdvcmtfZGF0YS5QcmVmaXgoYW55X2RvbWFpbl9pZCgpLCBhbnlfcHJlZml4X2xlbmd0aCgpLCBhbnlfcHJlZml4KCksIHN1Yl90bHZzLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zdWJfdGx2cyA9IHByZWZpeF9vYmouc3ViX3RsdnMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJfdGx2cywgYWN0dWFsX3N1Yl90bHZzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGFibGVfdmFsdWVfd2hlbl9zdGFibGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIHByZWZpeF9vYmogPSBuZXR3b3JrX2RhdGEuUHJlZml4KGFueV9kb21haW5faWQoKSwgYW55X3ByZWZpeF9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3ByZWZpeCgpLCBhbnlfcHJlZml4X3N1Yl90bHZzKCksIHN0YWJsZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YWJsZSA9IHByZWZpeF9vYmouc3RhYmxlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlLCBhY3R1YWxfc3RhYmxlKQorCisKK2NsYXNzIFRlc3RQcmVmaXhTdWJUbHZzRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1N1YlRsdnNfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN1Yl90bHZzID0gYW55X3ByZWZpeF9zdWJfdGx2cygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5QcmVmaXhTdWJUbHZzRmFjdG9yeShjb25maWcuY3JlYXRlX2RlZmF1bHRfbmV0d29ya19kYXRhX3ByZWZpeF9zdWJfdGx2c19mYWN0b3JpZXMoKSkKKworICAgICAgICBkYXRhID0gY29udmVydF9wcmVmaXhfc3ViX3RsdnNfdG9fYnl0ZWFycmF5KHN1Yl90bHZzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3ViX3RsdnMgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfc3ViX3RsdnMsIGxpc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl90bHZzLCBhY3R1YWxfc3ViX3RsdnMpCisKKworY2xhc3MgVGVzdFByZWZpeEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9QcmVmaXhfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGRvbWFpbl9pZCA9IGFueV9kb21haW5faWQoKQorICAgICAgICBwcmVmaXhfbGVuZ3RoID0gYW55X3ByZWZpeF9sZW5ndGgoKQorICAgICAgICBwcmVmaXggPSBhbnlfcHJlZml4KHByZWZpeF9sZW5ndGgpCisgICAgICAgIHN1Yl90bHZzID0gYW55X3ByZWZpeF9zdWJfdGx2cygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5QcmVmaXhGYWN0b3J5KGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfcHJlZml4X3N1Yl90bHZzX2ZhY3RvcnkoKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KFtkb21haW5faWQsIHByZWZpeF9sZW5ndGhdKSArIHByZWZpeCArIGNvbnZlcnRfcHJlZml4X3N1Yl90bHZzX3RvX2J5dGVhcnJheShzdWJfdGx2cykKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcHJlZml4ID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9wcmVmaXgsIG5ldHdvcmtfZGF0YS5QcmVmaXgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbWFpbl9pZCwgYWN0dWFsX3ByZWZpeC5kb21haW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJlZml4X2xlbmd0aCwgYWN0dWFsX3ByZWZpeC5wcmVmaXhfbGVuZ3RoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZWZpeCwgYWN0dWFsX3ByZWZpeC5wcmVmaXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX3RsdnMsIGFjdHVhbF9wcmVmaXguc3ViX3RsdnMpCisKKworY2xhc3MgVGVzdEJvcmRlclJvdXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2JvcmRlcl9yb3V0ZXJfMTZfdmFsdWVfd2hlbl9ib3JkZXJfcm91dGVyXzE2X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBib3JkZXJfcm91dGVyXzE2ID0gYW55X2JvcmRlcl9yb3V0ZXJfMTYoKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGJvcmRlcl9yb3V0ZXJfMTYsIGFueV9wcmYoCisgICAgICAgICksIGFueV9wKCksIGFueV9zKCksIGFueV9kKCksIGFueV9jKCksIGFueV9yKCksIGFueV9vKCksIGFueV9uKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2JvcmRlcl9yb3V0ZXJfMTYgPSBib3JkZXJfcm91dGVyLmJvcmRlcl9yb3V0ZXJfMTYKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3JkZXJfcm91dGVyXzE2LCBhY3R1YWxfYm9yZGVyX3JvdXRlcl8xNikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcHJmX3ZhbHVlX3doZW5fcHJmX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBwcmYgPSBhbnlfcHJmKCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigKKyAgICAgICAgKSwgcHJmLCBhbnlfcCgpLCBhbnlfcygpLCBhbnlfZCgpLCBhbnlfYygpLCBhbnlfcigpLCBhbnlfbygpLCBhbnlfbigpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9wcmYgPSBib3JkZXJfcm91dGVyLnByZgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZiwgYWN0dWFsX3ByZikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcF92YWx1ZV93aGVuX3BfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHAgPSBhbnlfcCgpCisKKyAgICAgICAgYm9yZGVyX3JvdXRlciA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYW55X2JvcmRlcl9yb3V0ZXJfMTYoKSwgYW55X3ByZigKKyAgICAgICAgKSwgcCwgYW55X3MoKSwgYW55X2QoKSwgYW55X2MoKSwgYW55X3IoKSwgYW55X28oKSwgYW55X24oKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcCA9IGJvcmRlcl9yb3V0ZXIucAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIGFjdHVhbF9wKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zX3ZhbHVlX3doZW5fc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgcyA9IGFueV9zKCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKAorICAgICAgICApLCBhbnlfcCgpLCBzLCBhbnlfZCgpLCBhbnlfYygpLCBhbnlfcigpLCBhbnlfbygpLCBhbnlfbigpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zID0gYm9yZGVyX3JvdXRlci5zCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgYWN0dWFsX3MpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2RfdmFsdWVfd2hlbl9kX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBkID0gYW55X2QoKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoCisgICAgICAgICksIGFueV9wKCksIGFueV9zKCksIGQsIGFueV9jKCksIGFueV9yKCksIGFueV9vKCksIGFueV9uKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2QgPSBib3JkZXJfcm91dGVyLmQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBhY3R1YWxfZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fY192YWx1ZV93aGVuX2NfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGMgPSBhbnlfYygpCisKKyAgICAgICAgYm9yZGVyX3JvdXRlciA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYW55X2JvcmRlcl9yb3V0ZXJfMTYoKSwgYW55X3ByZigKKyAgICAgICAgKSwgYW55X3AoKSwgYW55X3MoKSwgYW55X2QoKSwgYywgYW55X3IoKSwgYW55X28oKSwgYW55X24oKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYyA9IGJvcmRlcl9yb3V0ZXIuYworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGFjdHVhbF9jKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9yX3ZhbHVlX3doZW5fcl9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgciA9IGFueV9yKCkKKworICAgICAgICBib3JkZXJfcm91dGVyID0gbmV0d29ya19kYXRhLkJvcmRlclJvdXRlcihhbnlfYm9yZGVyX3JvdXRlcl8xNigpLCBhbnlfcHJmKAorICAgICAgICApLCBhbnlfcCgpLCBhbnlfcygpLCBhbnlfZCgpLCBhbnlfYygpLCByLCBhbnlfbygpLCBhbnlfbigpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yID0gYm9yZGVyX3JvdXRlci5yCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgYWN0dWFsX3IpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX29fdmFsdWVfd2hlbl9vX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBvID0gYW55X28oKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoCisgICAgICAgICksIGFueV9wKCksIGFueV9zKCksIGFueV9kKCksIGFueV9jKCksIGFueV9yKCksIG8sIGFueV9uKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX28gPSBib3JkZXJfcm91dGVyLm8KKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLCBhY3R1YWxfbykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fbl92YWx1ZV93aGVuX25fcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIG4gPSBhbnlfbigpCisKKyAgICAgICAgYm9yZGVyX3JvdXRlciA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYW55X2JvcmRlcl9yb3V0ZXJfMTYoKSwgYW55X3ByZigKKyAgICAgICAgKSwgYW55X3AoKSwgYW55X3MoKSwgYW55X2QoKSwgYW55X2MoKSwgYW55X3IoKSwgYW55X28oKSwgbiwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbiA9IGJvcmRlcl9yb3V0ZXIubgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGFjdHVhbF9uKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGFibGVfdmFsdWVfd2hlbl9zdGFibGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIGJvcmRlcl9yb3V0ZXIgPSBuZXR3b3JrX2RhdGEuQm9yZGVyUm91dGVyKGFueV9ib3JkZXJfcm91dGVyXzE2KCksIGFueV9wcmYoCisgICAgICAgICksIGFueV9wKCksIGFueV9zKCksIGFueV9kKCksIGFueV9jKCksIGFueV9yKCksIGFueV9vKCksIGFueV9uKCksIHN0YWJsZSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3N0YWJsZSA9IGJvcmRlcl9yb3V0ZXIuc3RhYmxlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlLCBhY3R1YWxfc3RhYmxlKQorCisKK2NsYXNzIFRlc3RCb3JkZXJSb3V0ZXJGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfQm9yZGVyUm91dGVyX2Zyb21fYnl0ZWFycmF5X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBib3JkZXJfcm91dGVyXzE2ID0gYW55X2JvcmRlcl9yb3V0ZXJfMTYoKQorICAgICAgICBwcmYgPSBhbnlfcHJmKCkKKyAgICAgICAgcCA9IGFueV9wKCkKKyAgICAgICAgcyA9IGFueV9zKCkKKyAgICAgICAgZCA9IGFueV9kKCkKKyAgICAgICAgYyA9IGFueV9jKCkKKyAgICAgICAgciA9IGFueV9yKCkKKyAgICAgICAgbyA9IGFueV9vKCkKKyAgICAgICAgbiA9IGFueV9uKCkKKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXJGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gY29udmVydF9ib3JkZXJfcm91dGVyX3RvX2J5dGVhcnJheSgKKyAgICAgICAgICAgIG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIoYm9yZGVyX3JvdXRlcl8xNiwgcHJmLCBwLCBzLCBkLCBjLCByLCBvLCBuLCBzdGFibGUpKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zdGFibGUgPSBzdGFibGUKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2JvcmRlcl9yb3V0ZXIgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX2JvcmRlcl9yb3V0ZXIsIG5ldHdvcmtfZGF0YS5Cb3JkZXJSb3V0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvcmRlcl9yb3V0ZXJfMTYsIGFjdHVhbF9ib3JkZXJfcm91dGVyLmJvcmRlcl9yb3V0ZXJfMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJmLCBhY3R1YWxfYm9yZGVyX3JvdXRlci5wcmYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgYWN0dWFsX2JvcmRlcl9yb3V0ZXIucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBhY3R1YWxfYm9yZGVyX3JvdXRlci5zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGFjdHVhbF9ib3JkZXJfcm91dGVyLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYWN0dWFsX2JvcmRlcl9yb3V0ZXIuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBhY3R1YWxfYm9yZGVyX3JvdXRlci5yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8sIGFjdHVhbF9ib3JkZXJfcm91dGVyLm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgYWN0dWFsX2JvcmRlcl9yb3V0ZXIubikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGUsIGFjdHVhbF9ib3JkZXJfcm91dGVyLnN0YWJsZSkKKworCitjbGFzcyBUZXN0TG93cGFuSWQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9jX3ZhbHVlX3doZW5fY19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYyA9IGFueV9jKCkKKworICAgICAgICBsb3dwYW5faWQgPSBuZXR3b3JrX2RhdGEuTG93cGFuSWQoYywgYW55X2NpZCgpLCBhbnlfY29udGV4dF9sZW5ndGgoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfYyA9IGxvd3Bhbl9pZC5jCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYWN0dWFsX2MpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NpZF92YWx1ZV93aGVuX2NpZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgY2lkID0gYW55X2NpZCgpCisKKyAgICAgICAgbG93cGFuX2lkID0gbmV0d29ya19kYXRhLkxvd3BhbklkKGFueV9jKCksIGNpZCwgYW55X2NvbnRleHRfbGVuZ3RoKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2NpZCA9IGxvd3Bhbl9pZC5jaWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaWQsIGFjdHVhbF9jaWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2NvbnRleHRfbGVuZ3RoX3ZhbHVlX3doZW5fY29udGV4dF9sZW5ndGhfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGNvbnRleHRfbGVuZ3RoID0gYW55X2NvbnRleHRfbGVuZ3RoKCkKKworICAgICAgICBsb3dwYW5faWQgPSBuZXR3b3JrX2RhdGEuTG93cGFuSWQoYW55X2MoKSwgYW55X2NpZCgpLCBjb250ZXh0X2xlbmd0aCwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfY29udGV4dF9sZW5ndGggPSBsb3dwYW5faWQuY29udGV4dF9sZW5ndGgKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZXh0X2xlbmd0aCwgYWN0dWFsX2NvbnRleHRfbGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGFibGVfdmFsdWVfd2hlbl9zdGFibGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIGxvd3Bhbl9pZCA9IG5ldHdvcmtfZGF0YS5Mb3dwYW5JZChhbnlfYygpLCBhbnlfY2lkKCksIGFueV9jb250ZXh0X2xlbmd0aCgpLCBzdGFibGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zdGFibGUgPSBsb3dwYW5faWQuc3RhYmxlCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhYmxlLCBhY3R1YWxfc3RhYmxlKQorCisKK2NsYXNzIFRlc3RMb3dwYW5JZEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9Mb3dwYW5JZF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgYyA9IGFueV9jKCkKKyAgICAgICAgY2lkID0gYW55X2NpZCgpCisgICAgICAgIGNvbnRleHRfbGVuZ3RoID0gYW55X2NvbnRleHRfbGVuZ3RoKCkKKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5Mb3dwYW5JZEZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBjb252ZXJ0X2xvd3Bhbl9pZF90b19ieXRlYXJyYXkobmV0d29ya19kYXRhLkxvd3BhbklkKGMsIGNpZCwgY29udGV4dF9sZW5ndGgsIHN0YWJsZSkpCisKKyAgICAgICAgbWVzc2FnZV9pbmZvID0gY29tbW9uLk1lc3NhZ2VJbmZvKCkKKyAgICAgICAgbWVzc2FnZV9pbmZvLnN0YWJsZSA9IHN0YWJsZQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbG93cGFuX2lkID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBtZXNzYWdlX2luZm8pCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFjdHVhbF9sb3dwYW5faWQsIG5ldHdvcmtfZGF0YS5Mb3dwYW5JZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYWN0dWFsX2xvd3Bhbl9pZC5jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNpZCwgYWN0dWFsX2xvd3Bhbl9pZC5jaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dF9sZW5ndGgsIGFjdHVhbF9sb3dwYW5faWQuY29udGV4dF9sZW5ndGgpCisKKworY2xhc3MgVGVzdFNlcnZpY2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl90X3ZhbHVlX3doZW5fdF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdCA9IGFueV90KCkKKworICAgICAgICBzZXJ2aWNlID0gbmV0d29ya19kYXRhLlNlcnZpY2UodCwgYW55X2lkKCksIGFueV9lbnRlcnByaXNlX251bWJlcigpLCBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlcnZpY2VfZGF0YSgpLCBhbnlfc2VydmljZV9zdWJfdGx2cygpLCBhbnlfc3RhYmxlKCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90ID0gc2VydmljZS50CisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgYWN0dWFsX3QpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX2lkX3ZhbHVlX3doZW5faWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIF9pZCA9IGFueV9pZCgpCisKKyAgICAgICAgc2VydmljZSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlKGFueV90KCksIF9pZCwgYW55X2VudGVycHJpc2VfbnVtYmVyKCksIGFueV9zZXJ2aWNlX2RhdGFfbGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfc2VydmljZV9kYXRhKCksIGFueV9zZXJ2aWNlX3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX2lkID0gc2VydmljZS5pZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9pZCwgYWN0dWFsX2lkKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9lbnRlcnByaXNlX251bWJlcl92YWx1ZV93aGVuX2VudGVycHJpc2VfbnVtYmVyX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBlbnRlcnByaXNlX251bWJlciA9IGFueV9lbnRlcnByaXNlX251bWJlcigpCisKKyAgICAgICAgc2VydmljZSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlKGFueV90KCksIGFueV9pZCgpLCBlbnRlcnByaXNlX251bWJlciwgYW55X3NlcnZpY2VfZGF0YV9sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZXJ2aWNlX2RhdGEoKSwgYW55X3NlcnZpY2Vfc3ViX3RsdnMoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfZW50ZXJwcmlzZV9udW1iZXIgPSBzZXJ2aWNlLmVudGVycHJpc2VfbnVtYmVyCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50ZXJwcmlzZV9udW1iZXIsIGFjdHVhbF9lbnRlcnByaXNlX251bWJlcikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VydmljZV9kYXRhX2xlbmd0aF92YWx1ZV93aGVuX3NlcnZpY2VfZGF0YV9sZW5ndGhfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcnZpY2VfZGF0YV9sZW5ndGggPSBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpCisKKyAgICAgICAgc2VydmljZSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlKGFueV90KCksIGFueV9pZCgpLCBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKSwgc2VydmljZV9kYXRhX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9zZXJ2aWNlX2RhdGEoKSwgYW55X3NlcnZpY2Vfc3ViX3RsdnMoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VydmljZV9kYXRhX2xlbmd0aCA9IHNlcnZpY2Uuc2VydmljZV9kYXRhX2xlbmd0aAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZpY2VfZGF0YV9sZW5ndGgsIGFjdHVhbF9zZXJ2aWNlX2RhdGFfbGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zZXJ2aWNlX2RhdGFfdmFsdWVfd2hlbl9zZXJ2aWNlX2RhdGFfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcnZpY2VfZGF0YSA9IGFueV9zZXJ2aWNlX2RhdGEoKQorCisgICAgICAgIHNlcnZpY2UgPSBuZXR3b3JrX2RhdGEuU2VydmljZShhbnlfdCgpLCBhbnlfaWQoKSwgYW55X2VudGVycHJpc2VfbnVtYmVyKCksIGFueV9zZXJ2aWNlX2RhdGFfbGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX2RhdGEsIGFueV9zZXJ2aWNlX3N1Yl90bHZzKCksIGFueV9zdGFibGUoKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlcnZpY2VfZGF0YSA9IHNlcnZpY2Uuc2VydmljZV9kYXRhCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmljZV9kYXRhLCBhY3R1YWxfc2VydmljZV9kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdWJfdGx2c192YWx1ZV93aGVuX3N1Yl90bHZzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdWJfdGx2cyA9IGFueV9zZXJ2aWNlX3N1Yl90bHZzKCkKKworICAgICAgICBzZXJ2aWNlID0gbmV0d29ya19kYXRhLlNlcnZpY2UoYW55X3QoKSwgYW55X2lkKCksIGFueV9lbnRlcnByaXNlX251bWJlcigpLCBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlcnZpY2VfZGF0YSgpLCBzdWJfdGx2cywgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3ViX3RsdnMgPSBzZXJ2aWNlLnN1Yl90bHZzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX3RsdnMsIGFjdHVhbF9zdWJfdGx2cykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3RhYmxlX3ZhbHVlX3doZW5fc3RhYmxlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBzZXJ2aWNlID0gbmV0d29ya19kYXRhLlNlcnZpY2UoYW55X3QoKSwgYW55X2lkKCksIGFueV9lbnRlcnByaXNlX251bWJlcigpLCBhbnlfc2VydmljZV9kYXRhX2xlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55X3NlcnZpY2VfZGF0YSgpLCBhbnlfc2VydmljZV9zdWJfdGx2cygpLCBzdGFibGUpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zdGFibGUgPSBzZXJ2aWNlLnN0YWJsZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX3N0YWJsZSkKKworCitjbGFzcyBUZXN0U2VydmljZVN1YlRsdnNGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfU3ViVGx2c19mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc3ViX3RsdnMgPSBhbnlfc2VydmljZV9zdWJfdGx2cygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5TZXJ2aWNlU3ViVGx2c0ZhY3RvcnkoY29uZmlnLmNyZWF0ZV9kZWZhdWx0X25ldHdvcmtfZGF0YV9zZXJ2aWNlX3N1Yl90bHZzX2ZhY3RvcmllcygpKQorCisgICAgICAgIGRhdGEgPSBjb252ZXJ0X3NlcnZpY2Vfc3ViX3RsdnNfdG9fYnl0ZWFycmF5KHN1Yl90bHZzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3ViX3RsdnMgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhY3R1YWxfc3ViX3RsdnMsIGxpc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl90bHZzLCBhY3R1YWxfc3ViX3RsdnMpCisKKworY2xhc3MgVGVzdFNlcnZpY2VGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfU2VydmljZV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdCA9IGFueV90KCkKKyAgICAgICAgX2lkID0gYW55X2lkKCkKKyAgICAgICAgZW50ZXJwcmlzZV9udW1iZXIgPSBhbnlfZW50ZXJwcmlzZV9udW1iZXIoKQorICAgICAgICBzZXJ2aWNlX2RhdGFfbGVuZ3RoID0gYW55X3NlcnZpY2VfZGF0YV9sZW5ndGgoKQorICAgICAgICBzZXJ2aWNlX2RhdGEgPSBhbnlfc2VydmljZV9kYXRhKHNlcnZpY2VfZGF0YV9sZW5ndGgpCisgICAgICAgIHN1Yl90bHZzID0gYW55X3NlcnZpY2Vfc3ViX3RsdnMoKQorICAgICAgICBzdGFibGUgPSBhbnlfc3RhYmxlKCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19kYXRhLlNlcnZpY2VGYWN0b3J5KGNvbmZpZy5jcmVhdGVfZGVmYXVsdF9uZXR3b3JrX2RhdGFfc2VydmljZV9zdWJfdGx2c19mYWN0b3J5KCkpCisKKyAgICAgICAgZGF0YSA9IGNvbnZlcnRfc2VydmljZV90b19ieXRlYXJyYXkobmV0d29ya19kYXRhLlNlcnZpY2UoCisgICAgICAgICAgICB0LCBfaWQsIGVudGVycHJpc2VfbnVtYmVyLCBzZXJ2aWNlX2RhdGFfbGVuZ3RoLCBzZXJ2aWNlX2RhdGEsIHN1Yl90bHZzLCBzdGFibGUpKQorCisgICAgICAgIG1lc3NhZ2VfaW5mbyA9IGNvbW1vbi5NZXNzYWdlSW5mbygpCisgICAgICAgIG1lc3NhZ2VfaW5mby5zdGFibGUgPSBzdGFibGUKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlcnZpY2UgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3NlcnZpY2UsIG5ldHdvcmtfZGF0YS5TZXJ2aWNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBhY3R1YWxfc2VydmljZS50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9pZCwgYWN0dWFsX3NlcnZpY2UuaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50ZXJwcmlzZV9udW1iZXIsIGFjdHVhbF9zZXJ2aWNlLmVudGVycHJpc2VfbnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZpY2VfZGF0YV9sZW5ndGgsIGFjdHVhbF9zZXJ2aWNlLnNlcnZpY2VfZGF0YV9sZW5ndGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmljZV9kYXRhLCBhY3R1YWxfc2VydmljZS5zZXJ2aWNlX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX3RsdnMsIGFjdHVhbF9zZXJ2aWNlLnN1Yl90bHZzKQorCisKK2NsYXNzIFRlc3RTZXJ2ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zZXJ2ZXJfMTZfdmFsdWVfd2hlbl9zZXJ2ZXJfMTZfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlcnZlcl8xNiA9IGFueV9zZXJ2ZXJfMTYoKQorCisgICAgICAgIHNlcnZlciA9IG5ldHdvcmtfZGF0YS5TZXJ2ZXIoc2VydmVyXzE2LCBhbnlfc2VydmVyX2RhdGEoKSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VydmVyXzE2ID0gc2VydmVyLnNlcnZlcl8xNgorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl8xNiwgYWN0dWFsX3NlcnZlcl8xNikKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2VydmVyX2RhdGFfdmFsdWVfd2hlbl9zZXJ2ZXJfZGF0YV9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VydmVyX2RhdGEgPSBhbnlfc2VydmVyX2RhdGEoKQorCisgICAgICAgIHNlcnZlciA9IG5ldHdvcmtfZGF0YS5TZXJ2ZXIoYW55X3NlcnZlcl8xNigpLCBzZXJ2ZXJfZGF0YSwgYW55X3N0YWJsZSgpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc2VydmVyX2RhdGEgPSBzZXJ2ZXIuc2VydmVyX2RhdGEKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfZGF0YSwgYWN0dWFsX3NlcnZlcl9kYXRhKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9zdGFibGVfdmFsdWVfd2hlbl9zdGFibGVfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YWJsZSA9IGFueV9zdGFibGUoKQorCisgICAgICAgIHNlcnZlciA9IG5ldHdvcmtfZGF0YS5TZXJ2ZXIoYW55X3NlcnZlcl8xNigpLCBhbnlfc2VydmVyX2RhdGEoKSwgc3RhYmxlKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhYmxlID0gc2VydmVyLnN0YWJsZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YWJsZSwgYWN0dWFsX3N0YWJsZSkKKworCitjbGFzcyBUZXN0U2VydmVyRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1NlcnZlcl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2VydmVyXzE2ID0gYW55X3NlcnZlcl8xNigpCisgICAgICAgIHNlcnZlcl9kYXRhID0gYW55X3NlcnZlcl9kYXRhKCkKKyAgICAgICAgc3RhYmxlID0gYW55X3N0YWJsZSgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfZGF0YS5TZXJ2ZXJGYWN0b3J5KCkKKworICAgICAgICBkYXRhID0gY29udmVydF9zZXJ2ZXJfdG9fYnl0ZWFycmF5KG5ldHdvcmtfZGF0YS5TZXJ2ZXIoc2VydmVyXzE2LCBzZXJ2ZXJfZGF0YSwgc3RhYmxlKSkKKworICAgICAgICBtZXNzYWdlX2luZm8gPSBjb21tb24uTWVzc2FnZUluZm8oKQorICAgICAgICBtZXNzYWdlX2luZm8uc3RhYmxlID0gc3RhYmxlCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9zZXJ2ZXIgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIG1lc3NhZ2VfaW5mbykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYWN0dWFsX3NlcnZlciwgbmV0d29ya19kYXRhLlNlcnZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyXzE2LCBhY3R1YWxfc2VydmVyLnNlcnZlcl8xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfZGF0YSwgYWN0dWFsX3NlcnZlci5zZXJ2ZXJfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFibGUsIGFjdHVhbF9zZXJ2ZXIuc3RhYmxlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbmV0d29ya19sYXllci5weSBiL3Rlc3RzL3NjcmlwdHMvdGhyZWFkLWNlcnQvdGVzdF9uZXR3b3JrX2xheWVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQwYmFkMjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zY3JpcHRzL3RocmVhZC1jZXJ0L3Rlc3RfbmV0d29ya19sYXllci5weQpAQCAtMCwwICsxLDUwNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBpbworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBuZXR3b3JrX2xheWVyCisKKworZGVmIGFueV9laWQoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoMTYpXSkKKworCitkZWYgYW55X21hY19leHRlbmRlZF9hZGRyZXNzKCk6CisgICAgcmV0dXJuIGJ5dGVhcnJheShbcmFuZG9tLmdldHJhbmRiaXRzKDgpIGZvciBfIGluIHJhbmdlKDgpXSkKKworCitkZWYgYW55X3Jsb2MxNigpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMTYpCisKKworZGVmIGFueV9tbF9laWQoKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KFtyYW5kb20uZ2V0cmFuZGJpdHMoOCkgZm9yIF8gaW4gcmFuZ2UoOCldKQorCisKK2RlZiBhbnlfc3RhdHVzKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cygxKQorCisKK2RlZiBhbnlfc2Vjb25kcygpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoMzIpCisKKworZGVmIGFueV9pZF9zZXF1ZW5jZSgpOgorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKworCitkZWYgYW55X3JvdXRlcl9pZF9tYXNrKCk6CisgICAgcmV0dXJuIHJhbmRvbS5nZXRyYW5kYml0cyg2NCkKKworCitkZWYgYW55X29wdGlvbnMoY291bnQ9Tm9uZSk6CisgICAgY291bnQgPSBjb3VudCBpZiBjb3VudCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5yYW5kaW50KDAsIDI1NSkKKyAgICByZXR1cm4gW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShjb3VudCldCisKKworZGVmIGFueV90bHZfZGF0YShsZW5ndGg9Tm9uZSk6CisgICAgX3R5cGUgPSByYW5kb20uZ2V0cmFuZGJpdHMoOCkKKyAgICBsZW5ndGggPSBsZW5ndGggaWYgbGVuZ3RoIGlzIG5vdCBOb25lIGVsc2UgcmFuZG9tLmdldHJhbmRiaXRzKDgpCisgICAgdmFsdWUgPSBieXRlYXJyYXkoW3JhbmRvbS5nZXRyYW5kYml0cyg4KSBmb3IgXyBpbiByYW5nZShsZW5ndGgpXSkKKworICAgIHJldHVybiBieXRlYXJyYXkoW190eXBlLCBsZW5ndGhdKSArIHZhbHVlCisKKworZGVmIGFueV90bHZzX2RhdGEoY291bnQ9Tm9uZSk6CisgICAgY291bnQgPSBjb3VudCBpZiBjb3VudCBpcyBub3QgTm9uZSBlbHNlIHJhbmRvbS5yYW5kaW50KDAsIDE2KQorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorCisgICAgZm9yIF8gaW4gcmFuZ2UoY291bnQpOgorICAgICAgICBkYXRhICs9IGFueV90bHZfZGF0YShyYW5kb20ucmFuZGludCgxLCAxNSkpCisKKyAgICByZXR1cm4gZGF0YQorCisKK2NsYXNzIFRlc3RUYXJnZXRFaWQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9laWRfdmFsdWVfd2hlbl9laWRfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGVpZCA9IGFueV9laWQoKQorCisgICAgICAgIHRhcmdldF9laWQgPSBuZXR3b3JrX2xheWVyLlRhcmdldEVpZChlaWQpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9laWQgPSB0YXJnZXRfZWlkLmVpZAorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVpZCwgYWN0dWFsX2VpZCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fVHJ1ZV93aGVuX3RyeV90b19lcXVhbF90d29fdGhlX3NhbWVfdHlwZV9vYmplY3RzX3dpdGhfdGhlX3NhbWVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGVpZCA9IGFueV9laWQoKQorCisgICAgICAgIHRhcmdldF9laWQgPSBuZXR3b3JrX2xheWVyLlRhcmdldEVpZChlaWQpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0X2VpZCwgbmV0d29ya19sYXllci5UYXJnZXRFaWQoZWlkKSkKKworCitjbGFzcyBUZXN0VGFyZ2V0RWlkRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX1RhcmdldEVpZF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgZWlkID0gYW55X2VpZCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuVGFyZ2V0RWlkRmFjdG9yeSgpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHRhcmdldF9laWQgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZWlkKSwgY29tbW9uLk1lc3NhZ2VJbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRhcmdldF9laWQsIG5ldHdvcmtfbGF5ZXIuVGFyZ2V0RWlkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlaWQsIHRhcmdldF9laWQuZWlkKQorCisKK2NsYXNzIFRlc3RNYWNFeHRlbmRlZEFkZHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9tYWNfYWRkcmVzc192YWx1ZV93aGVuX21hY19hZGRyZXNzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtYWNfYWRkcmVzcyA9IGFueV9tYWNfZXh0ZW5kZWRfYWRkcmVzcygpCisKKyAgICAgICAgbWFjX2V4dGVuZGVkX2FkZHJlc3MgPSBuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzcyhtYWNfYWRkcmVzcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX21hY19hZGRyZXNzID0gbWFjX2V4dGVuZGVkX2FkZHJlc3MubWFjX2FkZHJlc3MKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNfYWRkcmVzcywgYWN0dWFsX21hY19hZGRyZXNzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWFjX2FkZHJlc3MgPSBhbnlfbWFjX2V4dGVuZGVkX2FkZHJlc3MoKQorCisgICAgICAgIG1hY19leHRlbmRlZF9hZGRyZXNzID0gbmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3MobWFjX2FkZHJlc3MpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjX2V4dGVuZGVkX2FkZHJlc3MsIG5ldHdvcmtfbGF5ZXIuTWFjRXh0ZW5kZWRBZGRyZXNzKG1hY19hZGRyZXNzKSkKKworCitjbGFzcyBUZXN0TWFjRXh0ZW5kZWRBZGRyZXNzRmFjdG9yeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfY3JlYXRlX01hY0V4dGVuZGVkQWRkcmVzc19mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWFjX2FkZHJlc3MgPSBhbnlfbWFjX2V4dGVuZGVkX2FkZHJlc3MoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLk1hY0V4dGVuZGVkQWRkcmVzc0ZhY3RvcnkoKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBtYWNfZXh0ZW5kZWRfYWRkcmVzcyA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhtYWNfYWRkcmVzcyksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtYWNfZXh0ZW5kZWRfYWRkcmVzcywgbmV0d29ya19sYXllci5NYWNFeHRlbmRlZEFkZHJlc3MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY19hZGRyZXNzLCBtYWNfZXh0ZW5kZWRfYWRkcmVzcy5tYWNfYWRkcmVzcykKKworCitjbGFzcyBUZXN0UmxvYzE2KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fcmxvYzE2X3ZhbHVlX3doZW5fcmxvYzE2X3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2KCkKKworICAgICAgICBybG9jMTZfb2JqID0gbmV0d29ya19sYXllci5SbG9jMTYocmxvYzE2KQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfcmxvYzE2ID0gcmxvYzE2X29iai5ybG9jMTYKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChybG9jMTYsIGFjdHVhbF9ybG9jMTYpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX1RydWVfd2hlbl90cnlfdG9fZXF1YWxfdHdvX3RoZV9zYW1lX3R5cGVfb2JqZWN0c193aXRoX3RoZV9zYW1lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBybG9jMTYgPSBhbnlfcmxvYzE2KCkKKworICAgICAgICBybG9jMTZfb2JqID0gbmV0d29ya19sYXllci5SbG9jMTYocmxvYzE2KQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJsb2MxNl9vYmosIG5ldHdvcmtfbGF5ZXIuUmxvYzE2KHJsb2MxNikpCisKKworY2xhc3MgVGVzdFJsb2MxNkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9SbG9jMTZfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJsb2MxNiA9IGFueV9ybG9jMTYoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLlJsb2MxNkZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoc3RydWN0LnBhY2soIj5IIiwgcmxvYzE2KSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgcmxvYzE2X29iaiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhkYXRhKSwgY29tbW9uLk1lc3NhZ2VJbmZvKCkpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJsb2MxNl9vYmosIG5ldHdvcmtfbGF5ZXIuUmxvYzE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChybG9jMTYsIHJsb2MxNl9vYmoucmxvYzE2KQorCisKK2NsYXNzIFRlc3RNbEVpZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX21sX2VpZF92YWx1ZV93aGVuX21sX2VpZF9wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWxfZWlkID0gYW55X21sX2VpZCgpCisKKyAgICAgICAgbWxfZWlkX29iaiA9IG5ldHdvcmtfbGF5ZXIuTWxFaWQobWxfZWlkKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfbWxfZWlkID0gbWxfZWlkX29iai5tbF9laWQKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbF9laWQsIGFjdHVhbF9tbF9laWQpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX1RydWVfd2hlbl90cnlfdG9fZXF1YWxfdHdvX3RoZV9zYW1lX3R5cGVfb2JqZWN0c193aXRoX3RoZV9zYW1lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBtbF9laWQgPSBhbnlfbWxfZWlkKCkKKworICAgICAgICBtbF9laWRfb2JqID0gbmV0d29ya19sYXllci5NbEVpZChtbF9laWQpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxfZWlkX29iaiwgbmV0d29ya19sYXllci5NbEVpZChtbF9laWQpKQorCisKK2NsYXNzIFRlc3RNbEVpZEZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9NbEVpZF9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgbWxfZWlkID0gYW55X21sX2VpZCgpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuTWxFaWRGYWN0b3J5KCkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbWxfZWlkX29iaiA9IGZhY3RvcnkucGFyc2UoaW8uQnl0ZXNJTyhtbF9laWQpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobWxfZWlkX29iaiwgbmV0d29ya19sYXllci5NbEVpZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWxfZWlkLCBtbF9laWRfb2JqLm1sX2VpZCkKKworCitjbGFzcyBUZXN0U3RhdHVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc3RhdHVzX3ZhbHVlX3doZW5fc3RhdHVzX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGF0dXMgPSBhbnlfc3RhdHVzKCkKKworICAgICAgICBzdGF0dXNfb2JqID0gbmV0d29ya19sYXllci5TdGF0dXMoc3RhdHVzKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfc3RhdHVzID0gc3RhdHVzX29iai5zdGF0dXMKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIGFjdHVhbF9zdGF0dXMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX1RydWVfd2hlbl90cnlfdG9fZXF1YWxfdHdvX3RoZV9zYW1lX3R5cGVfb2JqZWN0c193aXRoX3RoZV9zYW1lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBzdGF0dXMgPSBhbnlfc3RhdHVzKCkKKworICAgICAgICBzdGF0dXNfb2JqID0gbmV0d29ya19sYXllci5TdGF0dXMoc3RhdHVzKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1c19vYmosIG5ldHdvcmtfbGF5ZXIuU3RhdHVzKHN0YXR1cykpCisKKworY2xhc3MgVGVzdFN0YXR1c0ZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9TdGF0dXNfZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHN0YXR1cyA9IGFueV9zdGF0dXMoKQorCisgICAgICAgIGZhY3RvcnkgPSBuZXR3b3JrX2xheWVyLlN0YXR1c0ZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW3N0YXR1c10pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHN0YXR1c19vYmogPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0dXNfb2JqLCBuZXR3b3JrX2xheWVyLlN0YXR1cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBzdGF0dXNfb2JqLnN0YXR1cykKKworCitjbGFzcyBUZXN0VGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fc2Vjb25kc192YWx1ZV93aGVuX3NlY29uZHNfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlY29uZHMgPSBhbnlfc2Vjb25kcygpCisKKyAgICAgICAgdGltZV9zaW5jZV9sYXN0X3RyYW5zYWN0aW9uID0gbmV0d29ya19sYXllci5UaW1lU2luY2VMYXN0VHJhbnNhY3Rpb24oc2Vjb25kcykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX3NlY29uZHMgPSB0aW1lX3NpbmNlX2xhc3RfdHJhbnNhY3Rpb24uc2Vjb25kcworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZHMsIGFjdHVhbF9zZWNvbmRzKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgc2Vjb25kcyA9IGFueV9zZWNvbmRzKCkKKworICAgICAgICB0aW1lX3NpbmNlX2xhc3RfdHJhbnNhY3Rpb24gPSBuZXR3b3JrX2xheWVyLlRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbihzZWNvbmRzKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVfc2luY2VfbGFzdF90cmFuc2FjdGlvbiwgbmV0d29ya19sYXllci5UaW1lU2luY2VMYXN0VHJhbnNhY3Rpb24oc2Vjb25kcykpCisKKworY2xhc3MgVGVzdFRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9UaW1lU2luY2VMYXN0VHJhbnNhY3Rpb25fZnJvbV9ieXRlYXJyYXlfd2hlbl9wYXJzZV9tZXRob2RfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHNlY29uZHMgPSBhbnlfc2Vjb25kcygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuVGltZVNpbmNlTGFzdFRyYW5zYWN0aW9uRmFjdG9yeSgpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzdHJ1Y3QucGFjaygiPkwiLCBzZWNvbmRzKSkKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgdGltZV9zaW5jZV9sYXN0X3RyYW5zYWN0aW9uID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodGltZV9zaW5jZV9sYXN0X3RyYW5zYWN0aW9uLCBuZXR3b3JrX2xheWVyLlRpbWVTaW5jZUxhc3RUcmFuc2FjdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kcywgdGltZV9zaW5jZV9sYXN0X3RyYW5zYWN0aW9uLnNlY29uZHMpCisKKworY2xhc3MgVGVzdFJvdXRlck1hc2sodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9pZF9zZXF1ZW5jZV92YWx1ZV93aGVuX2lkX3NlcXVlbmNlX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBpZF9zZXF1ZW5jZSA9IGFueV9pZF9zZXF1ZW5jZSgpCisKKyAgICAgICAgcm91dGVyX21hc2sgPSBuZXR3b3JrX2xheWVyLlJvdXRlck1hc2soaWRfc2VxdWVuY2UsIGFueV9yb3V0ZXJfaWRfbWFzaygpKQorCisgICAgICAgICMgV0hFTgorICAgICAgICBhY3R1YWxfaWRfc2VxdWVuY2UgPSByb3V0ZXJfbWFzay5pZF9zZXF1ZW5jZQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkX3NlcXVlbmNlLCBhY3R1YWxfaWRfc2VxdWVuY2UpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX3JvdXRlcl9pZF9tYXNrX3ZhbHVlX3doZW5fcm91dGVyX2lkX21hc2tfcHJvcGVydHlfaXNfY2FsbGVkKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIHJvdXRlcl9pZF9tYXNrID0gYW55X3JvdXRlcl9pZF9tYXNrKCkKKworICAgICAgICByb3V0ZXJfbWFzayA9IG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFzayhhbnlfaWRfc2VxdWVuY2UoKSwgcm91dGVyX2lkX21hc2spCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF9yb3V0ZXJfaWRfbWFzayA9IHJvdXRlcl9tYXNrLnJvdXRlcl9pZF9tYXNrCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGVyX2lkX21hc2ssIGFjdHVhbF9yb3V0ZXJfaWRfbWFzaykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yZXR1cm5fVHJ1ZV93aGVuX3RyeV90b19lcXVhbF90d29fdGhlX3NhbWVfdHlwZV9vYmplY3RzX3dpdGhfdGhlX3NhbWVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIEdJVkVOCisgICAgICAgIGlkX3NlcXVlbmNlID0gYW55X2lkX3NlcXVlbmNlKCkKKyAgICAgICAgcm91dGVyX2lkX21hc2sgPSBhbnlfcm91dGVyX2lkX21hc2soKQorCisgICAgICAgIHJvdXRlcl9tYXNrID0gbmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKGlkX3NlcXVlbmNlLCByb3V0ZXJfaWRfbWFzaykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3V0ZXJfbWFzaywgbmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKGlkX3NlcXVlbmNlLCByb3V0ZXJfaWRfbWFzaykpCisKKworY2xhc3MgVGVzdFJvdXRlck1hc2tGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfUm91dGVyTWFza19mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgaWRfc2VxdWVuY2UgPSBhbnlfaWRfc2VxdWVuY2UoKQorICAgICAgICByb3V0ZXJfaWRfbWFzayA9IGFueV9yb3V0ZXJfaWRfbWFzaygpCisKKyAgICAgICAgZmFjdG9yeSA9IG5ldHdvcmtfbGF5ZXIuUm91dGVyTWFza0ZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoW2lkX3NlcXVlbmNlXSkgKyBzdHJ1Y3QucGFjaygiPlEiLCByb3V0ZXJfaWRfbWFzaykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgcm91dGVyX21hc2sgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8oZGF0YSksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShyb3V0ZXJfbWFzaywgbmV0d29ya19sYXllci5Sb3V0ZXJNYXNrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZF9zZXF1ZW5jZSwgcm91dGVyX21hc2suaWRfc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91dGVyX2lkX21hc2ssIHJvdXRlcl9tYXNrLnJvdXRlcl9pZF9tYXNrKQorCisKK2NsYXNzIFRlc3ROZE9wdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX29wdGlvbnNfdmFsdWVfd2hlbl9vcHRpb25zX3Byb3BlcnR5X2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBvcHRpb25zID0gYW55X29wdGlvbnMoKQorCisgICAgICAgIG5kX29wdGlvbiA9IG5ldHdvcmtfbGF5ZXIuTmRPcHRpb24ob3B0aW9ucykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgYWN0dWFsX29wdGlvbnMgPSBuZF9vcHRpb24ub3B0aW9ucworCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMsIGFjdHVhbF9vcHRpb25zKQorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9UcnVlX3doZW5fdHJ5X3RvX2VxdWFsX3R3b190aGVfc2FtZV90eXBlX29iamVjdHNfd2l0aF90aGVfc2FtZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb3B0aW9ucyA9IGFueV9vcHRpb25zKCkKKworICAgICAgICBuZF9vcHRpb24gPSBuZXR3b3JrX2xheWVyLk5kT3B0aW9uKG9wdGlvbnMpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRfb3B0aW9uLCBuZXR3b3JrX2xheWVyLk5kT3B0aW9uKG9wdGlvbnMpKQorCisKK2NsYXNzIFRlc3ROZE9wdGlvbkZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9OZE9wdGlvbl9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgb3B0aW9ucyA9IGFueV9vcHRpb25zKCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19sYXllci5OZE9wdGlvbkZhY3RvcnkoKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkob3B0aW9ucykKKworICAgICAgICAjIFdIRU4KKyAgICAgICAgbmRfb3B0aW9uID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKGRhdGEpLCBjb21tb24uTWVzc2FnZUluZm8oKSkKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobmRfb3B0aW9uLCBuZXR3b3JrX2xheWVyLk5kT3B0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLCBuZF9vcHRpb24ub3B0aW9ucykKKworCitjbGFzcyBUZXN0VGhyZWFkTmV0d29ya0RhdGEodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX3JldHVybl9vcHRpb25zX3ZhbHVlX3doZW5fb3B0aW9uc19wcm9wZXJ0eV9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGx2cyA9IGFueV90bHZzX2RhdGEoKQorCisgICAgICAgIHRocmVhZF9uZXR3b3JrX2RhdGEgPSBuZXR3b3JrX2xheWVyLlRocmVhZE5ldHdvcmtEYXRhKHRsdnMpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90bHZzID0gdGhyZWFkX25ldHdvcmtfZGF0YS50bHZzCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGx2cywgYWN0dWFsX3RsdnMpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfcmV0dXJuX1RydWVfd2hlbl90cnlfdG9fZXF1YWxfdHdvX3RoZV9zYW1lX3R5cGVfb2JqZWN0c193aXRoX3RoZV9zYW1lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICB0bHZzID0gYW55X3RsdnNfZGF0YSgpCisKKyAgICAgICAgdGhyZWFkX25ldHdvcmtfZGF0YSA9IG5ldHdvcmtfbGF5ZXIuVGhyZWFkTmV0d29ya0RhdGEodGx2cykKKworICAgICAgICAjIFRIRU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWRfbmV0d29ya19kYXRhLCBuZXR3b3JrX2xheWVyLlRocmVhZE5ldHdvcmtEYXRhKHRsdnMpKQorCisKK2NsYXNzIFRlc3RUaHJlYWROZXR3b3JrRGF0YUZhY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2hvdWxkX2NyZWF0ZV9UaHJlYWROZXR3b3JrRGF0YV9mcm9tX2J5dGVhcnJheV93aGVuX3BhcnNlX21ldGhvZF9pc19jYWxsZWQoc2VsZik6CisgICAgICAgICMgR0lWRU4KKyAgICAgICAgdGx2cyA9IGFueV90bHZzX2RhdGEoKQorCisgICAgICAgIGNsYXNzIER1bW15TmV0d29ya0RhdGFUbHZzRmFjdG9yeToKKworICAgICAgICAgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEsIG1lc3NhZ2VfaW5mbyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheShkYXRhLnJlYWQoKSkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19sYXllci5UaHJlYWROZXR3b3JrRGF0YUZhY3RvcnkoRHVtbXlOZXR3b3JrRGF0YVRsdnNGYWN0b3J5KCkpCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIHRocmVhZF9uZXR3b3JrX2RhdGEgPSBmYWN0b3J5LnBhcnNlKGlvLkJ5dGVzSU8odGx2cyksIGNvbW1vbi5NZXNzYWdlSW5mbygpKQorCisgICAgICAgICMgVEhFTgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0aHJlYWRfbmV0d29ya19kYXRhLCBuZXR3b3JrX2xheWVyLlRocmVhZE5ldHdvcmtEYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bHZzLCB0aHJlYWRfbmV0d29ya19kYXRhLnRsdnMpCisKKworY2xhc3MgVGVzdE5ldHdvcmtMYXllclRsdnNGYWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jcmVhdGVfdGx2X3doZW5fcGFyc2VfbWV0aG9kX2lzX2NhbGxlZChzZWxmKToKKyAgICAgICAgIyBHSVZFTgorICAgICAgICBjbGFzcyBEdW1teU5ldHdvcmtEYXRhVGx2c0ZhY3Rvcnk6CisKKyAgICAgICAgICAgIGRlZiBwYXJzZShzZWxmLCBkYXRhLCBtZXNzYWdlX2luZm8pOgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkoZGF0YS5yZWFkKCkpCisKKyAgICAgICAgdGx2ID0gYW55X3Rsdl9kYXRhKCkKKworICAgICAgICBmYWN0b3J5ID0gbmV0d29ya19sYXllci5OZXR3b3JrTGF5ZXJUbHZzRmFjdG9yeSh7dGx2WzBdOiBEdW1teU5ldHdvcmtEYXRhVGx2c0ZhY3RvcnkoKX0pCisKKyAgICAgICAgIyBXSEVOCisgICAgICAgIGFjdHVhbF90bHZzID0gZmFjdG9yeS5wYXJzZShpby5CeXRlc0lPKHRsdiksIE5vbmUpCisKKyAgICAgICAgIyBUSEVOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGx2WzI6XSwgYWN0dWFsX3RsdnNbMF0pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L01ha2VmaWxlLmFtIGIvdGVzdHMvdW5pdC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjMwMGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIwMCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCisjCisjIExvY2FsIGhlYWRlcnMgdG8gYnVpbGQgYWdhaW5zdCBhbmQgZGlzdHJpYnV0ZSBidXQgbm90IHRvIGluc3RhbGwKKyMgc2luY2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhlIHBhY2thZ2UuCisjCitub2luc3RfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHRlc3RfcGxhdGZvcm0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0X2xvd3Bhbi5ocHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdF91dGlsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3RfdXRpbC5ocHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMKKyMgT3RoZXIgZmlsZXMgd2UgZG8gd2FudCB0byBkaXN0cmlidXRlIHdpdGggdGhlIHBhY2thZ2UuCisjCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9URVNUUworIyBDIHByZXByb2Nlc3NvciBvcHRpb24gZmxhZ3MgdGhhdCB3aWxsIGFwcGx5IHRvIGFsbCBjb21waWxlZCBvYmplY3RzIGluIHRoaXMKKyMgbWFrZWZpbGUuCisKK0FNX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLURPUEVOVEhSRUFEX0ZURD0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtSSQodG9wX3NyY2Rpcikvc3JjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQCisKK0NPTU1PTl9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9uY3AvbGlib3BlbnRocmVhZC1uY3AtZnRkLmEgICAgICAgICAgICAgICAgICAgXAorICAgICQodG9wX2J1aWxkZGlyKS9zcmMvY29yZS9saWJvcGVudGhyZWFkLWZ0ZC5hICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtbHB0aHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitlbHNlCisKK0NPTU1PTl9MREFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJCh0b3BfYnVpbGRkaXIpL3NyYy9jb3JlL2xpYm9wZW50aHJlYWQtZnRkLmEgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC1scHRocmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2VuZGlmICMgT1BFTlRIUkVBRF9FTkFCTEVfTkNQCisKK2lmIE9QRU5USFJFQURfRU5BQkxFX0JVSUxUSU5fTUJFRFRMUworQU1fQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICAtSSQodG9wX3NyY2RpcikvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitDT01NT05fTERBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgICQodG9wX2J1aWxkZGlyKS90aGlyZF9wYXJ0eS9tYmVkdGxzL2xpYm1iZWRjcnlwdG8uYSAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX0JVSUxUSU5fTUJFRFRMUworCisjIFRlc3QgYXBwbGljYXRpb25zIHRoYXQgc2hvdWxkIGJlIHJ1biB3aGVuIHRoZSAnY2hlY2snIHRhcmdldCBpcyBydW4uCisKK2NoZWNrX1BST0dSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgdGVzdC1hZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtZnV6eiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LWhtYWMtc2hhMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1sb3dwYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtbGluay1xdWFsaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LW1hYy1mcmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1tZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtbWVzc2FnZS1xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LXByaW9yaXR5LXF1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC1zdHJsY2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3Qtc3RybGNweSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZXN0LXN0cm5sZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVzdC10aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3QtdG9vbGNoYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK1hGQUlMX1RFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCitjaGVja19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIHRlc3QtZGlhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX0RJQUcKKworaWYgT1BFTlRIUkVBRF9FTkFCTEVfTkNQCitjaGVja19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gXAorICAgIHRlc3QtbmNwLWJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX05DUAorCitpZiBPUEVOVEhSRUFEX1dJVEhfQUREUkVTU19TQU5JVElaRVIKK2NoZWNrX1BST0dSQU1TICAgICAgICAgICAgICAgICArPSB0ZXN0LWFkZHJlc3Mtc2FuaXRpemVyCitYRkFJTF9URVNUUyAgICAgICAgICAgICAgICAgICAgKz0gdGVzdC1hZGRyZXNzLXNhbml0aXplcgordGVzdF9hZGRyZXNzX3Nhbml0aXplcl9TT1VSQ0VTICA9IHRlc3RfYWRkcmVzc19zYW5pdGl6ZXIuY3BwCitlbmRpZiAjIE9QRU5USFJFQURfV0lUSF9BRERSRVNTX1NBTklUSVpFUgorCisKKyMgVGVzdCBhcHBsaWNhdGlvbnMgYW5kIHNjcmlwdHMgdGhhdCBzaG91bGQgYmUgYnVpbHQgYW5kIHJ1biB3aGVuIHRoZQorIyAnY2hlY2snIHRhcmdldCBpcyBydW4uCisKK1RFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChjaGVja19QUk9HUkFNUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBUaGUgYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZWlyIHZhbHVlcyB0aGF0IHdpbGwgYmUKKyMgbWFkZSBhdmFpbGFibGUgdG8gYWxsIHByb2dyYW1zIGFuZCBzY3JpcHRzIGluIFRFU1RTLgorCitURVNUU19FTlZJUk9OTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworIyBTb3VyY2UsIGNvbXBpbGVyLCBhbmQgbGlua2VyIG9wdGlvbnMgZm9yIHRlc3QgcHJvZ3JhbXMuCisKK3Rlc3RfYWVzX0xEQUREICAgICAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfYWVzX1NPVVJDRVMgICAgICAgICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X2Flcy5jcHAKKwordGVzdF9mdXp6X0xEQUREICAgICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9mdXp6X1NPVVJDRVMgICAgICAgICAgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfZnV6ei5jcHAKKwordGVzdF9obWFjX3NoYTI1Nl9MREFERCAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9obWFjX3NoYTI1Nl9TT1VSQ0VTICAgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfaG1hY19zaGEyNTYuY3BwCisKK3Rlc3RfbGlua19xdWFsaXR5X0xEQUREICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfbGlua19xdWFsaXR5X1NPVVJDRVMgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X2xpbmtfcXVhbGl0eS5jcHAKKwordGVzdF9sb3dwYW5fTERBREQgICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9sb3dwYW5fU09VUkNFUyAgICAgICAgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfbG93cGFuLmNwcCB0ZXN0X3V0aWwuY3BwCisKK3Rlc3RfbWFjX2ZyYW1lX0xEQUREICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfbWFjX2ZyYW1lX1NPVVJDRVMgICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X21hY19mcmFtZS5jcHAKKwordGVzdF9tZXNzYWdlX0xEQUREICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9tZXNzYWdlX1NPVVJDRVMgICAgICAgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfbWVzc2FnZS5jcHAKKwordGVzdF9tZXNzYWdlX3F1ZXVlX0xEQUREICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9tZXNzYWdlX3F1ZXVlX1NPVVJDRVMgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfbWVzc2FnZV9xdWV1ZS5jcHAKKwordGVzdF9uY3BfYnVmZmVyX0xEQUREICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9uY3BfYnVmZmVyX1NPVVJDRVMgICAgICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfbmNwX2J1ZmZlci5jcHAKKwordGVzdF9wcmlvcml0eV9xdWV1ZV9MREFERCAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9wcmlvcml0eV9xdWV1ZV9TT1VSQ0VTICA9IHRlc3RfcGxhdGZvcm0uY3BwIHRlc3RfcHJpb3JpdHlfcXVldWUuY3BwCisKK3Rlc3Rfc3RybGNhdF9MREFERCAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3Rfc3RybGNhdF9TT1VSQ0VTICAgICAgICAgPSB0ZXN0X3N0cmxjYXQuYworCit0ZXN0X3N0cmxjcHlfTERBREQgICAgICAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X3N0cmxjcHlfU09VUkNFUyAgICAgICAgID0gdGVzdF9zdHJsY3B5LmMKKwordGVzdF9zdHJubGVuX0xEQUREICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQordGVzdF9zdHJubGVuX1NPVVJDRVMgICAgICAgICA9IHRlc3Rfc3Rybmxlbi5jCisKK3Rlc3RfdGltZXJfTERBREQgICAgICAgICAgICAgPSAkKENPTU1PTl9MREFERCkKK3Rlc3RfdGltZXJfU09VUkNFUyAgICAgICAgICAgPSB0ZXN0X3BsYXRmb3JtLmNwcCB0ZXN0X3RpbWVyLmNwcAorCit0ZXN0X3Rvb2xjaGFpbl9MREFERCAgICAgICAgID0gJChDT01NT05fTERBREQpCit0ZXN0X3Rvb2xjaGFpbl9TT1VSQ0VTICAgICAgID0gdGVzdF9wbGF0Zm9ybS5jcHAgdGVzdF90b29sY2hhaW4uY3BwIHRlc3RfdG9vbGNoYWluX2MuYworCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9ESUFHCit0ZXN0X2RpYWdfTERBREQgICAgICAgICAgICAgID0gJCh0b3BfYnVpbGRkaXIpL3NyYy9kaWFnL2xpYm9wZW50aHJlYWQtZGlhZy5hICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodG9wX2J1aWxkZGlyKS9leGFtcGxlcy9wbGF0Zm9ybXMvcG9zaXgvbGlib3BlbnRocmVhZC1wb3NpeC5hIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKE5VTEwpCit0ZXN0X2RpYWdfU09VUkNFUyAgICAgICAgICAgID0gdGVzdF9kaWFnLmNwcAorZW5kaWYKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfVEVTVFMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfYWRkcmVzc19zYW5pdGl6ZXIuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X2FkZHJlc3Nfc2FuaXRpemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDgwNGJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2FkZHJlc3Nfc2FuaXRpemVyLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAodm9pZClhcmd2OworICAgIGludCBzdGFja19hcnJheVsxMDBdOworICAgIGludCBhcnJheV9pbmRleCA9IGFyZ2MgKyAxMDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHsKKwlzdGFja19hcnJheVtpXSA9IGk7CisgICAgfQorCisgICAgcHJpbnRmKCJzdGFja19hcnJheVslZF0gPSAlZFxuIiwgYXJyYXlfaW5kZXgsIHN0YWNrX2FycmF5W2FycmF5X2luZGV4XSk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X2Flcy5jcHAgYi90ZXN0cy91bml0L3Rlc3RfYWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY0ZDZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2Flcy5jcHAKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vYWVzX2NjbS5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworLyoqCisgKiBWZXJpZmllcyB0ZXN0IHZlY3RvcnMgZnJvbSBJRUVFIDgwMi4xNS40LTIwMDYgQW5uZXggQyBTZWN0aW9uIEMuMi4xCisgKi8KK3ZvaWQgVGVzdE1hY0JlYWNvbkZyYW1lKHZvaWQpCit7CisgICAgdWludDhfdCBrZXlbXSA9CisgICAgeworICAgICAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAorICAgICAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAorICAgIH07CisKKyAgICB1aW50OF90IHRlc3RbXSA9CisgICAgeworICAgICAgICAweDA4LCAweEQwLCAweDg0LCAweDIxLCAweDQzLCAweDAxLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDAyLCAweDA1LCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDU1LCAweENGLCAweDAwLCAweDAwLCAweDUxLCAweDUyLAorICAgICAgICAweDUzLCAweDU0LCAweDIyLCAweDNCLCAweEMxLCAweEVDLCAweDg0LCAweDFBLAorICAgICAgICAweEI1LCAweDUzCisgICAgfTsKKworICAgIHVpbnQ4X3QgZW5jcnlwdGVkW10gPQorICAgIHsKKyAgICAgICAgMHgwOCwgMHhEMCwgMHg4NCwgMHgyMSwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwMiwgMHgwNSwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg1NSwgMHhDRiwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MiwKKyAgICAgICAgMHg1MywgMHg1NCwgMHgyMiwgMHgzQiwgMHhDMSwgMHhFQywgMHg4NCwgMHgxQSwKKyAgICAgICAgMHhCNSwgMHg1MworICAgIH07CisKKyAgICB1aW50OF90IGRlY3J5cHRlZFtdID0KKyAgICB7CisgICAgICAgIDB4MDgsIDB4RDAsIDB4ODQsIDB4MjEsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDIsIDB4MDUsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NTUsIDB4Q0YsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTIsCisgICAgICAgIDB4NTMsIDB4NTQsIDB4MjIsIDB4M0IsIDB4QzEsIDB4RUMsIDB4ODQsIDB4MUEsCisgICAgICAgIDB4QjUsIDB4NTMKKyAgICB9OworCisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgb3Q6OkNyeXB0bzo6QWVzQ2NtIGFlc0NjbTsKKyAgICB1aW50MzJfdCBoZWFkZXJMZW5ndGggPSBzaXplb2YodGVzdCkgLSA4OworICAgIHVpbnQzMl90IHBheWxvYWRMZW5ndGggPSAwOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoID0gODsKKworICAgIHVpbnQ4X3Qgbm9uY2VbXSA9CisgICAgeworICAgICAgICAweEFDLCAweERFLCAweDQ4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAyLAorICAgIH07CisKKyAgICBWZXJpZnlPclF1aXQoaW5zdGFuY2UgIT0gTlVMTCwgIk51bGwgT3BlblRocmVhZCBpbnN0YW5jZSIpOworCisgICAgYWVzQ2NtLlNldEtleShrZXksIHNpemVvZihrZXkpKTsKKyAgICBhZXNDY20uSW5pdChoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIHRhZ0xlbmd0aCwgbm9uY2UsIHNpemVvZihub25jZSkpOworICAgIGFlc0NjbS5IZWFkZXIodGVzdCwgaGVhZGVyTGVuZ3RoKTsKKyAgICBhZXNDY20uRmluYWxpemUodGVzdCArIGhlYWRlckxlbmd0aCwgJnRhZ0xlbmd0aCk7CisKKyAgICBWZXJpZnlPclF1aXQobWVtY21wKHRlc3QsIGVuY3J5cHRlZCwgc2l6ZW9mKGVuY3J5cHRlZCkpID09IDAsCisgICAgICAgICAgICAgICAgICJUZXN0TWFjQmVhY29uRnJhbWUgZW5jcnlwdCBmYWlsZWQiKTsKKworICAgIGFlc0NjbS5Jbml0KGhlYWRlckxlbmd0aCwgcGF5bG9hZExlbmd0aCwgdGFnTGVuZ3RoLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisgICAgYWVzQ2NtLkhlYWRlcih0ZXN0LCBoZWFkZXJMZW5ndGgpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0ZXN0ICsgaGVhZGVyTGVuZ3RoLCAmdGFnTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yUXVpdChtZW1jbXAodGVzdCwgZGVjcnlwdGVkLCBzaXplb2YoZGVjcnlwdGVkKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgIlRlc3RNYWNCZWFjb25GcmFtZSBkZWNyeXB0IGZhaWxlZCIpOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKKy8qKgorICogVmVyaWZpZXMgdGVzdCB2ZWN0b3JzIGZyb20gSUVFRSA4MDIuMTUuNC0yMDA2IEFubmV4IEMgU2VjdGlvbiBDLjIuMQorICovCit2b2lkIFRlc3RNYWNEYXRhRnJhbWUoKQoreworICAgIHVpbnQ4X3Qga2V5W10gPQorICAgIHsKKyAgICAgICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKKyAgICAgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICB9OworCisgICAgdWludDhfdCB0ZXN0W10gPQorICAgIHsKKyAgICAgICAgMHg2OSwgMHhEQywgMHg4NCwgMHgyMSwgMHg0MywgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwNCwgMHgwNSwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NAorICAgIH07CisKKyAgICB1aW50OF90IGVuY3J5cHRlZFtdID0KKyAgICB7CisgICAgICAgIDB4NjksIDB4REMsIDB4ODQsIDB4MjEsIDB4NDMsIDB4MDIsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4NDgsIDB4REUsIDB4QUMsIDB4MDQsIDB4MDUsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4RDQsIDB4M0UsIDB4MDIsIDB4MkIKKyAgICB9OworCisgICAgdWludDhfdCBkZWNyeXB0ZWRbXSA9CisgICAgeworICAgICAgICAweDY5LCAweERDLCAweDg0LCAweDIxLCAweDQzLCAweDAyLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDAxLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDA0LCAweDA1LCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDYxLCAweDYyLCAweDYzLCAweDY0CisgICAgfTsKKworICAgIG90OjpDcnlwdG86OkFlc0NjbSBhZXNDY207CisgICAgdWludDMyX3QgaGVhZGVyTGVuZ3RoID0gc2l6ZW9mKHRlc3QpIC0gNDsKKyAgICB1aW50MzJfdCBwYXlsb2FkTGVuZ3RoID0gNDsKKyAgICB1aW50OF90IHRhZ0xlbmd0aCA9IDA7CisKKyAgICB1aW50OF90IG5vbmNlW10gPQorICAgIHsKKyAgICAgICAgMHhBQywgMHhERSwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwNCwKKyAgICB9OworCisgICAgYWVzQ2NtLlNldEtleShrZXksIHNpemVvZihrZXkpKTsKKyAgICBhZXNDY20uSW5pdChoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIHRhZ0xlbmd0aCwgbm9uY2UsIHNpemVvZihub25jZSkpOworICAgIGFlc0NjbS5IZWFkZXIodGVzdCwgaGVhZGVyTGVuZ3RoKTsKKyAgICBhZXNDY20uUGF5bG9hZCh0ZXN0ICsgaGVhZGVyTGVuZ3RoLCB0ZXN0ICsgaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCB0cnVlKTsKKyAgICBhZXNDY20uRmluYWxpemUodGVzdCArIGhlYWRlckxlbmd0aCArIHBheWxvYWRMZW5ndGgsICZ0YWdMZW5ndGgpOworCisgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcCh0ZXN0LCBlbmNyeXB0ZWQsIHNpemVvZihlbmNyeXB0ZWQpKSA9PSAwLAorICAgICAgICAgICAgICAgICAiVGVzdE1hY0RhdGFGcmFtZSBlbmNyeXB0IGZhaWxlZCIpOworCisgICAgYWVzQ2NtLkluaXQoaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCB0YWdMZW5ndGgsIG5vbmNlLCBzaXplb2Yobm9uY2UpKTsKKyAgICBhZXNDY20uSGVhZGVyKHRlc3QsIGhlYWRlckxlbmd0aCk7CisgICAgYWVzQ2NtLlBheWxvYWQodGVzdCArIGhlYWRlckxlbmd0aCwgdGVzdCArIGhlYWRlckxlbmd0aCwgcGF5bG9hZExlbmd0aCwgZmFsc2UpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0ZXN0ICsgaGVhZGVyTGVuZ3RoICsgcGF5bG9hZExlbmd0aCwgJnRhZ0xlbmd0aCk7CisKKyAgICBWZXJpZnlPclF1aXQobWVtY21wKHRlc3QsIGRlY3J5cHRlZCwgc2l6ZW9mKGRlY3J5cHRlZCkpID09IDAsCisgICAgICAgICAgICAgICAgICJUZXN0TWFjRGF0YUZyYW1lIGRlY3J5cHQgZmFpbGVkIik7Cit9CisKKy8qKgorICogVmVyaWZpZXMgdGVzdCB2ZWN0b3JzIGZyb20gSUVFRSA4MDIuMTUuNC0yMDA2IEFubmV4IEMgU2VjdGlvbiBDLjIuMworICovCit2b2lkIFRlc3RNYWNDb21tYW5kRnJhbWUoKQoreworICAgIHVpbnQ4X3Qga2V5W10gPQorICAgIHsKKyAgICAgICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKKyAgICAgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICB9OworCisgICAgdWludDhfdCB0ZXN0W10gPQorICAgIHsKKyAgICAgICAgMHgyQiwgMHhEQywgMHg4NCwgMHgyMSwgMHg0MywgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHhGRiwgMHhGRiwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwNiwKKyAgICAgICAgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhDRSwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICB9OworCisgICAgdWludDMyX3QgaGVhZGVyTGVuZ3RoID0gMjksIHBheWxvYWRMZW5ndGggPSAxOworICAgIHVpbnQ4X3QgdGFnTGVuZ3RoID0gODsKKworICAgIHVpbnQ4X3QgZW5jcnlwdGVkW10gPQorICAgIHsKKyAgICAgICAgMHgyQiwgMHhEQywgMHg4NCwgMHgyMSwgMHg0MywgMHgwMiwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHhGRiwgMHhGRiwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhERSwgMHhBQywgMHgwNiwKKyAgICAgICAgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhEOCwgMHg0RiwgMHhERSwKKyAgICAgICAgMHg1MiwgMHg5MCwgMHg2MSwgMHhGOSwgMHhDNiwgMHhGMSwKKyAgICB9OworCisgICAgdWludDhfdCBkZWNyeXB0ZWRbXSA9CisgICAgeworICAgICAgICAweDJCLCAweERDLCAweDg0LCAweDIxLCAweDQzLCAweDAyLCAweDAwLCAweDAwLAorICAgICAgICAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweEZGLCAweEZGLCAweDAxLAorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweERFLCAweEFDLCAweDA2LAorICAgICAgICAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweENFLCAweDRGLCAweERFLAorICAgICAgICAweDUyLCAweDkwLCAweDYxLCAweEY5LCAweEM2LCAweEYxLAorICAgIH07CisKKyAgICB1aW50OF90IG5vbmNlW10gPQorICAgIHsKKyAgICAgICAgMHhBQywgMHhERSwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwNiwKKyAgICB9OworCisgICAgb3Q6OkNyeXB0bzo6QWVzQ2NtIGFlc0NjbTsKKyAgICBhZXNDY20uU2V0S2V5KGtleSwgc2l6ZW9mKGtleSkpOworICAgIGFlc0NjbS5Jbml0KGhlYWRlckxlbmd0aCwgcGF5bG9hZExlbmd0aCwgdGFnTGVuZ3RoLCBub25jZSwgc2l6ZW9mKG5vbmNlKSk7CisgICAgYWVzQ2NtLkhlYWRlcih0ZXN0LCBoZWFkZXJMZW5ndGgpOworICAgIGFlc0NjbS5QYXlsb2FkKHRlc3QgKyBoZWFkZXJMZW5ndGgsIHRlc3QgKyBoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIHRydWUpOworICAgIGFlc0NjbS5GaW5hbGl6ZSh0ZXN0ICsgaGVhZGVyTGVuZ3RoICsgcGF5bG9hZExlbmd0aCwgJnRhZ0xlbmd0aCk7CisgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcCh0ZXN0LCBlbmNyeXB0ZWQsIHNpemVvZihlbmNyeXB0ZWQpKSA9PSAwLAorICAgICAgICAgICAgICAgICAiVGVzdE1hY0NvbW1hbmRGcmFtZSBlbmNyeXB0IGZhaWxlZFxuIik7CisKKyAgICBhZXNDY20uSW5pdChoZWFkZXJMZW5ndGgsIHBheWxvYWRMZW5ndGgsIHRhZ0xlbmd0aCwgbm9uY2UsIHNpemVvZihub25jZSkpOworICAgIGFlc0NjbS5IZWFkZXIodGVzdCwgaGVhZGVyTGVuZ3RoKTsKKyAgICBhZXNDY20uUGF5bG9hZCh0ZXN0ICsgaGVhZGVyTGVuZ3RoLCB0ZXN0ICsgaGVhZGVyTGVuZ3RoLCBwYXlsb2FkTGVuZ3RoLCBmYWxzZSk7CisgICAgYWVzQ2NtLkZpbmFsaXplKHRlc3QgKyBoZWFkZXJMZW5ndGggKyBwYXlsb2FkTGVuZ3RoLCAmdGFnTGVuZ3RoKTsKKworICAgIFZlcmlmeU9yUXVpdChtZW1jbXAodGVzdCwgZGVjcnlwdGVkLCBzaXplb2YoZGVjcnlwdGVkKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgIlRlc3RNYWNDb21tYW5kRnJhbWUgZGVjcnlwdCBmYWlsZWRcbiIpOworfQorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBUZXN0TWFjQmVhY29uRnJhbWUoKTsKKyAgICBUZXN0TWFjRGF0YUZyYW1lKCk7CisgICAgVGVzdE1hY0NvbW1hbmRGcmFtZSgpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9kaWFnLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9kaWFnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTE0YWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2RpYWcuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9kaWFnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFkaW8uaD4KKworI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworZXh0ZXJuICJDIiB2b2lkIG90VGFza2xldHNTaWduYWxQZW5kaW5nKG90SW5zdGFuY2UgKikKK3sKK30KKworZXh0ZXJuICJDIiBib29sIG90VGFza2xldHNBcmVQZW5kaW5nKG90SW5zdGFuY2UgKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBvdFBsYXRVYXJ0U2VuZERvbmUodm9pZCkKK3sKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFVhcnRSZWNlaXZlZChjb25zdCB1aW50OF90ICphQnVmLCB1aW50MTZfdCBhQnVmTGVuZ3RoKQoreworICAgICh2b2lkKWFCdWY7CisgICAgKHZvaWQpYUJ1Zkxlbmd0aDsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdEFsYXJtRmlyZWQob3RJbnN0YW5jZSAqKQoreworfQorCitleHRlcm4gIkMiIHZvaWQgb3RQbGF0UmFkaW9UeERvbmUob3RJbnN0YW5jZSAqLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RSYWRpb0ZyYW1lICphQWNrRnJhbWUsICBvdEVycm9yIGFFcnJvcikKK3sKKyAgICAodm9pZClhRnJhbWU7CisgICAgKHZvaWQpYUFja0ZyYW1lOworICAgICh2b2lkKWFFcnJvcjsKK30KKworZXh0ZXJuICJDIiB2b2lkIG90UGxhdFJhZGlvUmVjZWl2ZURvbmUob3RJbnN0YW5jZSAqLCBvdFJhZGlvRnJhbWUgKmFGcmFtZSwgb3RFcnJvciBhRXJyb3IpCit7CisgICAgKHZvaWQpYUZyYW1lOworICAgICh2b2lkKWFFcnJvcjsKK30KKworCisvKioKKyAqICBkaWFnbm9zdGljcyBtb2R1bGUgdGVzdHMKKyAqLwordm9pZCBUZXN0RGlhZygpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdAorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqY29tbWFuZDsKKyAgICAgICAgY29uc3QgY2hhciAqb3V0cHV0OworICAgIH0gdGVzdHNbXSA9CisgICAgeworICAgICAgICB7CisgICAgICAgICAgICAiZGlhZ1xuIiwKKyAgICAgICAgICAgICJkaWFnbm9zdGljcyBtb2RlIGlzIGRpc2FibGVkXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHNlbmQgMTAgMTAwXG4iLAorICAgICAgICAgICAgImZhaWxlZFxyXG5zdGF0dXMgMHhkXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHN0YXJ0XG4iLAorICAgICAgICAgICAgInN0YXJ0IGRpYWdub3N0aWNzIG1vZGVcclxuc3RhdHVzIDB4MDBcclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWdcbiIsCisgICAgICAgICAgICAiZGlhZ25vc3RpY3MgbW9kZSBpcyBlbmFibGVkXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIGNoYW5uZWwgMTBcbiIsCisgICAgICAgICAgICAiZmFpbGVkXHJcbnN0YXR1cyAweDdcclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgY2hhbm5lbCAxMVxuIiwKKyAgICAgICAgICAgICJzZXQgY2hhbm5lbCB0byAxMVxyXG5zdGF0dXMgMHgwMFxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBjaGFubmVsXG4iLAorICAgICAgICAgICAgImNoYW5uZWw6IDExXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHBvd2VyIC0xMFxuIiwKKyAgICAgICAgICAgICJzZXQgdHggcG93ZXIgdG8gLTEwIGRCbVxyXG5zdGF0dXMgMHgwMFxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBwb3dlclxuIiwKKyAgICAgICAgICAgICJ0eCBwb3dlcjogLTEwIGRCbVxyXG4iLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZGlhZyBzdGF0c1xuIiwKKyAgICAgICAgICAgICJyZWNlaXZlZCBwYWNrZXRzOiAwXHJcbnNlbnQgcGFja2V0czogMFxyXG5maXJzdCByZWNlaXZlZCBwYWNrZXQ6IHJzc2k9MCwgbHFpPTBcclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgc2VuZCAyMCAxMDBcbiIsCisgICAgICAgICAgICAic2VuZGluZyAweDE0IHBhY2tldChzKSwgbGVuZ3RoIDB4NjRcclxuc3RhdHVzIDB4MDBcclxuIiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgcmVwZWF0IDEwMCAxMDBcbiIsCisgICAgICAgICAgICAic2VuZGluZyBwYWNrZXRzIG9mIGxlbmd0aCAweDY0IGF0IHRoZSBkZWxheSBvZiAweDY0IG1zXHJcbnN0YXR1cyAweDAwXHJcbiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImRpYWcgc2xlZXBcbiIsCisgICAgICAgICAgICAic2xlZXBpbmcgbm93Li4uXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnIHN0b3BcbiIsCisgICAgICAgICAgICAicmVjZWl2ZWQgcGFja2V0czogMFxyXG5zZW50IHBhY2tldHM6IDBcclxuZmlyc3QgcmVjZWl2ZWQgcGFja2V0OiByc3NpPTAsIGxxaT0wXHJcblxuc3RvcCBkaWFnbm9zdGljcyBtb2RlXHJcbnN0YXR1cyAweDAwXHJcbiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJkaWFnXG4iLAorICAgICAgICAgICAgImRpYWdub3N0aWNzIG1vZGUgaXMgZGlzYWJsZWRcclxuIiwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgLy8gaW5pdGlhbGl6ZSBwbGF0Zm9ybSBsYXllcgorICAgIGludCBhcmdjID0gMjsKKyAgICBjaGFyICphcmd2WzhdID0geyhjaGFyICopInRlc3RfZGlhZyIsIChjaGFyICopIjEifTsKKyAgICBQbGF0Zm9ybUluaXQoYXJnYywgYXJndik7CisKKyAgICAvLyBpbml0aWFsaXplIGRpYWdub3N0aWNzIG1vZHVsZQorICAgIG90RGlhZ0luaXQoTlVMTCk7CisKKyAgICAvLyB0ZXN0IGRpYWdub3N0aWNzIGNvbW1hbmRzCisgICAgVmVyaWZ5T3JRdWl0KCFvdERpYWdJc0VuYWJsZWQoKSwgImRpYWdub3N0aWNzIG1vZGUgc2hvdWQgYmUgZGlzYWJsZWQgYXMgZGVmYXVsdFxuIik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZih0ZXN0cykgLyBzaXplb2YodGVzdHNbMF0pOyAgaSsrKQorICAgIHsKKyAgICAgICAgY2hhciBzdHJpbmdbNTBdOworICAgICAgICBjaGFyICpvdXRwdXQgPSBOVUxMOworCisgICAgICAgIG1lbWNweShzdHJpbmcsIHRlc3RzW2ldLmNvbW1hbmQsIHN0cmxlbih0ZXN0c1tpXS5jb21tYW5kKSArIDEpOworCisgICAgICAgIG91dHB1dCA9IG90RGlhZ1Byb2Nlc3NDbWRMaW5lKHN0cmluZyk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtZW1jbXAob3V0cHV0LCB0ZXN0c1tpXS5vdXRwdXQsIHN0cmxlbih0ZXN0c1tpXS5vdXRwdXQpKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgRGlhZ25vc3RpY3MgbW9kdWxlIGZhaWxlZFxyXG4iKTsKKyAgICB9Cit9CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3REaWFnKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X2Z1enouY3BwIGIvdGVzdHMvdW5pdC90ZXN0X2Z1enouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NGFiNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfZnV6ei5jcHAKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisvLyNpbmNsdWRlIDxtYWMvbWFjX2ZyYW1lLmhwcD4KKworLy8jZGVmaW5lIERCR19GVVpaIDEKKworYm9vbCBnX2ZSYWRpb0VuYWJsZWQgPSBmYWxzZTsKK3VpbnQ4X3QgZ19SZWN2Q2hhbm5lbCA9IDA7Cit1aW50OF90IGdfVHJhbnNtaXRQc2R1WzEyOF07CitvdFJhZGlvRnJhbWUgZ19UcmFuc21pdFJhZGlvRnJhbWU7Citib29sIGdfZlRyYW5zbWl0ID0gZmFsc2U7CisKK2Jvb2wgdGVzdEZ1enpSYWRpb0lzRW5hYmxlZChvdEluc3RhbmNlICopCit7CisgICAgcmV0dXJuIGdfZlJhZGlvRW5hYmxlZDsKK30KKworb3RFcnJvciB0ZXN0RnV6elJhZGlvRW5hYmxlKG90SW5zdGFuY2UgKikKK3sKKyNpZmRlZiBEQkdfRlVaWgorICAgIExvZygiUmFkaW8gZW5hYmxlZCIpOworI2VuZGlmCisgICAgZ19mUmFkaW9FbmFibGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciB0ZXN0RnV6elJhZGlvRGlzYWJsZShvdEluc3RhbmNlICopCit7CisjaWZkZWYgREJHX0ZVWloKKyAgICBMb2coIlJhZGlvIGRpc2FibGVkIik7CisjZW5kaWYKKyAgICBnX2ZSYWRpb0VuYWJsZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKK30KKworb3RFcnJvciB0ZXN0RnV6elJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICosIHVpbnQ4X3QgYUNoYW5uZWwpCit7CisjaWZkZWYgREJHX0ZVWloKKyAgICBMb2coIj09PiByZWNlaXZlIik7CisjZW5kaWYKKyAgICBnX1JlY3ZDaGFubmVsID0gYUNoYW5uZWw7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290RXJyb3IgdGVzdEZ1enpSYWRpb1RyYW5zbWl0KG90SW5zdGFuY2UgKikKK3sKKyNpZmRlZiBEQkdfRlVaWgorICAgIExvZygiPT0+IHRyYW5zbWl0Iik7CisjZW5kaWYKKyAgICBnX2ZUcmFuc21pdCA9IHRydWU7CisgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7Cit9CisKK290UmFkaW9GcmFtZSAqdGVzdEZ1enp0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihvdEluc3RhbmNlICopCit7CisgICAgcmV0dXJuICZnX1RyYW5zbWl0UmFkaW9GcmFtZTsKK30KKwordm9pZCBUZXN0RnV6eih1aW50MzJfdCBhU2Vjb25kcykKK3sKKyAgICAvLyBTZXQgdGhlIHJhZGlvIGNhcGFiaWxpdGllcyB0byBkaXNhYmxlIGFueSBNYWMgcmVsYXRlZCB0aW1lciBkZXBlbmRlbmNpZXMKKyAgICBnX3Rlc3RQbGF0UmFkaW9DYXBzID0gKG90UmFkaW9DYXBzKShPVF9SQURJT19DQVBTX0FDS19USU1FT1VUIHwgT1RfUkFESU9fQ0FQU19UUkFOU01JVF9SRVRSSUVTKTsKKworICAgIC8vIFNldCB0aGUgcGxhdGZvcm0gZnVuY3Rpb24gcG9pbnRlcnMKKyAgICBnX1RyYW5zbWl0UmFkaW9GcmFtZS5tUHNkdSA9IGdfVHJhbnNtaXRQc2R1OworICAgIGdfdGVzdFBsYXRSYWRpb0lzRW5hYmxlZCA9IHRlc3RGdXp6UmFkaW9Jc0VuYWJsZWQ7CisgICAgZ190ZXN0UGxhdFJhZGlvRW5hYmxlID0gdGVzdEZ1enpSYWRpb0VuYWJsZTsKKyAgICBnX3Rlc3RQbGF0UmFkaW9EaXNhYmxlID0gdGVzdEZ1enpSYWRpb0Rpc2FibGU7CisgICAgZ190ZXN0UGxhdFJhZGlvUmVjZWl2ZSA9IHRlc3RGdXp6UmFkaW9SZWNlaXZlOworICAgIGdfdGVzdFBsYXRSYWRpb1RyYW5zbWl0ID0gdGVzdEZ1enpSYWRpb1RyYW5zbWl0OworICAgIGdfdGVzdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyID0gdGVzdEZ1enp0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcjsKKworICAgIC8vIEluaXRpYWxpemUgb3VyIHRpbWluZyB2YXJpYWJsZXMKKyAgICB1aW50MzJfdCB0U3RhcnQgPSBvdFBsYXRBbGFybUdldE5vdygpOworICAgIHVpbnQzMl90IHRFbmQgPSB0U3RhcnQgKyAoYVNlY29uZHMgKiAxMDAwKTsKKworICAgIG90SW5zdGFuY2UgKmFJbnN0YW5jZTsKKworI2lmZGVmIF9XSU4zMgorICAgIHVpbnQzMl90IHNlZWQgPSAodWludDMyX3QpdGltZShOVUxMKTsKKyAgICBzcmFuZChzZWVkKTsKKyAgICBMb2coIkluaXRpYWxpemVkIHNlZWQgPSAweCVYIiwgc2VlZCk7CisjZW5kaWYKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHNpemVfdCBvdEluc3RhbmNlQnVmZmVyTGVuZ3RoID0gMDsKKyAgICB1aW50OF90ICpvdEluc3RhbmNlQnVmZmVyID0gTlVMTDsKKworICAgIC8vIENhbGwgdG8gcXVlcnkgdGhlIGJ1ZmZlciBzaXplCisgICAgKHZvaWQpb3RJbnN0YW5jZUluaXQoTlVMTCwgJm90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworCisgICAgLy8gQ2FsbCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyCisgICAgb3RJbnN0YW5jZUJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKG90SW5zdGFuY2VCdWZmZXJMZW5ndGgpOworICAgIFZlcmlmeU9yUXVpdChvdEluc3RhbmNlQnVmZmVyICE9IE5VTEwsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3RJbnN0YW5jZSIpOworICAgIG1lbXNldChvdEluc3RhbmNlQnVmZmVyLCAwLCBvdEluc3RhbmNlQnVmZmVyTGVuZ3RoKTsKKworICAgIC8vIEluaXRpYWxpemUgT3BlblRocmVhZCB3aXRoIHRoZSBidWZmZXIKKyAgICBhSW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdChvdEluc3RhbmNlQnVmZmVyLCAmb3RJbnN0YW5jZUJ1ZmZlckxlbmd0aCk7CisjZWxzZQorICAgIGFJbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0U2luZ2xlKCk7CisjZW5kaWYKKworICAgIFZlcmlmeU9yUXVpdChhSW5zdGFuY2UgIT0gTlVMTCwgIkZhaWxlZCB0byBpbml0aWFsaXplIG90SW5zdGFuY2UiKTsKKworICAgIC8vIFN0YXJ0IHRoZSBUaHJlYWQgbmV0d29yaworICAgIG90TGlua1NldFBhbklkKGFJbnN0YW5jZSwgKG90UGFuSWQpMHhGQUNFKTsKKyAgICBvdElwNlNldEVuYWJsZWQoYUluc3RhbmNlLCB0cnVlKTsKKyAgICBvdFRocmVhZFNldEVuYWJsZWQoYUluc3RhbmNlLCB0cnVlKTsKKworICAgIHVpbnQzMl90IGNvdW50UmVjdiA9IDA7CisKKyAgICB3aGlsZSAob3RQbGF0QWxhcm1HZXROb3coKSA8IHRFbmQpCisgICAgeworICAgICAgICBvdFRhc2tsZXRzUHJvY2VzcyhhSW5zdGFuY2UpOworCisgICAgICAgIGlmIChnX3Rlc3RQbGF0QWxhcm1TZXQgJiYgb3RQbGF0QWxhcm1HZXROb3coKSA+PSBnX3Rlc3RQbGF0QWxhcm1OZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIG90UGxhdEFsYXJtRmlyZWQoYUluc3RhbmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnX2ZSYWRpb0VuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChnX2ZUcmFuc21pdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnX2ZUcmFuc21pdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG90UGxhdFJhZGlvVHhEb25lKGFJbnN0YW5jZSwgJmdfVHJhbnNtaXRSYWRpb0ZyYW1lLCBOVUxMLCBPVF9FUlJPUl9OT05FKTsKKyNpZmRlZiBEQkdfRlVaWgorICAgICAgICAgICAgICAgIExvZygiPD09IHRyYW5zbWl0Iik7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGdfUmVjdkNoYW5uZWwgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGZ1enpSZWN2QnVmZlsxMjhdOworICAgICAgICAgICAgICAgIG90UmFkaW9GcmFtZSBmdXp6UGFja2V0OworCisgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmFkaW8gcGFja2V0IHdpdGggYSByYW5kb20gbGVuZ3RoCisgICAgICAgICAgICAgICAgbWVtc2V0KCZmdXp6UGFja2V0LCAwLCBzaXplb2YoZnV6elBhY2tldCkpOworICAgICAgICAgICAgICAgIGZ1enpQYWNrZXQubVBzZHUgPSBmdXp6UmVjdkJ1ZmY7CisgICAgICAgICAgICAgICAgZnV6elBhY2tldC5tQ2hhbm5lbCA9IGdfUmVjdkNoYW5uZWw7CisgICAgICAgICAgICAgICAgZnV6elBhY2tldC5tTGVuZ3RoID0gKHVpbnQ4X3QpKG90UGxhdFJhbmRvbUdldCgpICUgMTI3KTsKKworICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHRoZSBsZW5ndGggd2l0aCByYW5kb20KKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBmdXp6UGFja2V0Lm1MZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZ1enpSZWN2QnVmZltpXSA9ICh1aW50OF90KW90UGxhdFJhbmRvbUdldCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBnbG9iYWwgZmxhZworICAgICAgICAgICAgICAgIGdfUmVjdkNoYW5uZWwgPSAwOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhlIHJlY2VpdmUgY29tcGxldGUKKyAgICAgICAgICAgICAgICBvdFBsYXRSYWRpb1JlY2VpdmVEb25lKGFJbnN0YW5jZSwgJmZ1enpQYWNrZXQsIE9UX0VSUk9SX05PTkUpOworCisgICAgICAgICAgICAgICAgY291bnRSZWN2Kys7CisjaWZkZWYgREJHX0ZVWloKKyAgICAgICAgICAgICAgICBMb2coIjw9PSByZWNlaXZlICglbGx1LCAldSBieXRlcykiLCBjb3VudFJlY3YsIGZ1enpQYWNrZXQubUxlbmd0aCk7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIC8vIEhhY2sgdG8gZ2V0IGEgcmVjZWl2ZSBwb2xsIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgb3RMaW5rU2V0Q2hhbm5lbChhSW5zdGFuY2UsIDExKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIExvZygiJXUgcGFja2V0cyByZWNlaXZlZCIsIGNvdW50UmVjdik7CisKKyAgICAvLyBDbGVhbiB1cCB0aGUgaW5zdGFuY2UKKyAgICBvdEluc3RhbmNlRmluYWxpemUoYUluc3RhbmNlKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIGZyZWUob3RJbnN0YW5jZUJ1ZmZlcik7CisjZW5kaWYKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdEZ1enooMzApOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9obWFjX3NoYTI1Ni5jcHAgYi90ZXN0cy91bml0L3Rlc3RfaG1hY19zaGEyNTYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDg4MTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfaG1hY19zaGEyNTYuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjcnlwdG8vaG1hY19zaGEyNTYuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKK3ZvaWQgVGVzdEhtYWNTaGEyNTYodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0CisgICAgeworICAgICAgICBjb25zdCBjaGFyICprZXk7CisgICAgICAgIGNvbnN0IGNoYXIgKmRhdGE7CisgICAgICAgIHVpbnQ4X3QgaGFzaFtvdDo6Q3J5cHRvOjpIbWFjU2hhMjU2OjprSGFzaFNpemVdOworICAgIH0gdGVzdHNbXSA9CisgICAgeworICAgICAgICB7CisgICAgICAgICAgICAiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGJceDBiXHgwYlx4MGIiLAorICAgICAgICAgICAgIkhpIFRoZXJlIiwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAweGIwLCAweDM0LCAweDRjLCAweDYxLCAweGQ4LCAweGRiLCAweDM4LCAweDUzLAorICAgICAgICAgICAgICAgIDB4NWMsIDB4YTgsIDB4YWYsIDB4Y2UsIDB4YWYsIDB4MGIsIDB4ZjEsIDB4MmIsCisgICAgICAgICAgICAgICAgMHg4OCwgMHgxZCwgMHhjMiwgMHgwMCwgMHhjOSwgMHg4MywgMHgzZCwgMHhhNywKKyAgICAgICAgICAgICAgICAweDI2LCAweGU5LCAweDM3LCAweDZjLCAweDJlLCAweDMyLCAweGNmLCAweGY3LAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB7fSwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgb3Q6OkNyeXB0bzo6SG1hY1NoYTI1NiBobWFjOworICAgIHVpbnQ4X3QgaGFzaFtvdDo6Q3J5cHRvOjpIbWFjU2hhMjU2OjprSGFzaFNpemVdOworCisgICAgVmVyaWZ5T3JRdWl0KGluc3RhbmNlICE9IE5VTEwsICJOdWxsIE9wZW5UaHJlYWQgaW5zdGFuY2UiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyB0ZXN0c1tpXS5rZXkgIT0gTlVMTDsgaSsrKQorICAgIHsKKyAgICAgICAgaG1hYy5TdGFydChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4odGVzdHNbaV0ua2V5KSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbih0ZXN0c1tpXS5rZXkpKSk7CisgICAgICAgIGhtYWMuVXBkYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPih0ZXN0c1tpXS5kYXRhKSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHN0cmxlbih0ZXN0c1tpXS5kYXRhKSkpOworICAgICAgICBobWFjLkZpbmlzaChoYXNoKTsKKworICAgICAgICBWZXJpZnlPclF1aXQobWVtY21wKGhhc2gsIHRlc3RzW2ldLmhhc2gsIHNpemVvZih0ZXN0c1tpXS5oYXNoKSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJITUFDLVNIQS0yNTYgZmFpbGVkXG4iKTsKKyAgICB9CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKGluc3RhbmNlKTsKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdEhtYWNTaGEyNTYoKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfbGlua19xdWFsaXR5LmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9saW5rX3F1YWxpdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjFjMzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfbGlua19xdWFsaXR5LmNwcApAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAidGhyZWFkL2xpbmtfcXVhbGl0eS5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorCituYW1lc3BhY2Ugb3QgeworCitlbnVtCit7CisgICAga01heFJzc1ZhbHVlICAgICAgICA9IDAsCisgICAga01pblJzc1ZhbHVlICAgICAgICA9IC0xMjgsCisKKyAgICBrU3RyaW5nQnVmZmZlclNpemUgID0gODAsCisKKyAgICBrUnNzQXZlcmFnZU1heERpZmYgID0gMTYsCisgICAga051bVJzc0FkZHMgICAgICAgICA9IDMwMCwKKworICAgIGtFbmNvZGVkQXZlcmFnZUJpdFNoaWZ0ID0gMywKKyAgICBrRW5jb2RlZEF2ZXJhZ2VNdWx0aXBsZSA9ICgxIDw8IGtFbmNvZGVkQXZlcmFnZUJpdFNoaWZ0KSwKKyAgICBrRW5jb2RlZEF2ZXJhZ2VCaXRNYXNrICA9ICgxIDw8IGtFbmNvZGVkQXZlcmFnZUJpdFNoaWZ0KSAtIDEsCit9OworCisjZGVmaW5lIE1JTl9SU1MoX3JzczEsIF9yc3MyKSAgICgoKF9yc3MxKSA8IChfcnNzMikpID8gKF9yc3MxKSA6IChfcnNzMikpCisjZGVmaW5lIE1BWF9SU1MoX3JzczEsIF9yc3MyKSAgICgoKF9yc3MxKSA8IChfcnNzMikpID8gKF9yc3MyKSA6IChfcnNzMSkpCisjZGVmaW5lIEFCUyh2YWx1ZSkgICAgICAgICAgICAgICgoKHZhbHVlKSA+PSAwKSA/ICh2YWx1ZSkgOiAtKHZhbHVlKSkKKworLy8gVGhpcyBzdHJ1Y3QgY29udGFpbnMgUlNTIHZhbHVlcyBhbmQgdGVzdCBkYXRhIGZvciBjaGVja2luZyBsaW5rIHF1YWxpdHkgaW5mbyBjYWxzcy4KK3N0cnVjdCBSc3NUZXN0RGF0YQoreworICAgIGNvbnN0IGludDhfdCAqbVJzc0xpc3Q7ICAgICAgICAgICAgICAgICAvLyBBcnJheSBvZiBSU1MgdmFsdWVzLgorICAgIHNpemVfdCAgICAgICAgbVJzc0xpc3RTaXplOyAgICAgICAgICAgICAvLyBTaXplIG9mIFJTUyBsaXN0LgorICAgIHVpbnQ4X3QgICAgICAgbUV4cGVjdGVkTGlua1F1YWxpdHk7ICAgICAvLyBFeHBlY3RlZCBmaW5hbCBsaW5rIHF1YWxpdHkgdmFsdWUuCit9OworCitpbnQ4X3Qgc05vaXNlRmxvb3IgPSAtMTAwOyAgLy8gZEJtCisKKy8vIENoZWNrcyB0aGUgZW5jb2RlZCBhdmVyYWdlIFJTUyB2YWx1ZSB0byBtYXRjaCB0aGUgdmFsdWUgZnJvbSBHZXRBdmVyYWdlUnNzKCkuCit2b2lkIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShMaW5rUXVhbGl0eUluZm8gJmFMaW5rSW5mbykKK3sKKyAgICBpbnQ4X3QgICByc3MgPSBhTGlua0luZm8uR2V0QXZlcmFnZVJzcygpOworICAgIHVpbnQxNl90IGVuY29kZWRSc3MgPSBhTGlua0luZm8uR2V0QXZlcmFnZVJzc0FzRW5jb2RlZFdvcmQoKTsKKworICAgIGlmIChyc3MgIT0gT1RfUkFESU9fUlNTSV9JTlZBTElEKQorICAgIHsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KHJzcyA9PSAtc3RhdGljX2Nhc3Q8aW50MTZfdD4oKGVuY29kZWRSc3MgKyAoa0VuY29kZWRBdmVyYWdlTXVsdGlwbGUgLyAyKSkgPj4ga0VuY29kZWRBdmVyYWdlQml0U2hpZnQpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gRWNvZGVkIFJTUyBkb2VzIG5vdCBtYXRjaCB0aGUgdmFsdWUgZnJvbSBHZXRBdmVyYWdlUnNzKCkuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdChlbmNvZGVkUnNzID09IDAsCisgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBFY29kZWQgUlNTIGRvZXMgbm90IG1hdGNoIHRoZSB2YWx1ZSBmcm9tIEdldEF2ZXJhZ2VSc3MoKS4iKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gcHJpbnRzIHRoZSB2YWx1ZXMgaW4gdGhlIHBhc3NlZCBpbiBsaW5rIGluZm8gaW5zdGFuY2UuIEl0IGlzIGludm9rZWQgYXMgdGhlIGZpbmFsIHN0ZXAgaW4gdGVzdC1jYXNlLgordm9pZCBQcmludE91dGNvbWUoTGlua1F1YWxpdHlJbmZvICZhTGlua0luZm8pCit7CisgICAgY2hhciAgICAgc3RyaW5nQnVmW2tTdHJpbmdCdWZmZmVyU2l6ZV07CisKKyAgICBTdWNjZXNzT3JRdWl0KGFMaW5rSW5mby5HZXRBdmVyYWdlUnNzQXNTdHJpbmcoc3RyaW5nQnVmLCBzaXplb2Yoc3RyaW5nQnVmKSksCisgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzQXNTdHJpbmcoKSBmYWlsZWQuIik7CisKKyAgICBwcmludGYoIkF2ZVJzcyA9ICUtNGQsIFwiJS0xNHNcIiwgIiwgYUxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKSwgc3RyaW5nQnVmKTsKKyAgICBwcmludGYoIkxpbmtNYXJnaW4gPSAlLTRkLCBMaW5rUXVhbGl0eSA9ICVkIiwgYUxpbmtJbmZvLkdldExpbmtNYXJnaW4oc05vaXNlRmxvb3IpLAorICAgICAgICAgICBhTGlua0luZm8uR2V0TGlua1F1YWxpdHkoc05vaXNlRmxvb3IpKTsKKworICAgIC8vIFRoaXMgdGVzdC1jYXNlIHN1Y2NlZWRlZC4KKyAgICBwcmludGYoIiAtPiBQQVNTXG4iKTsKK30KKwordm9pZCBUZXN0TGlua1F1YWxpdHlEYXRhKFJzc1Rlc3REYXRhIGFuUnNzRGF0YSkKK3sKKyAgICBMaW5rUXVhbGl0eUluZm8gbGlua0luZm87CisgICAgaW50OF90IHJzcywgYXZlLCBtaW4sIG1heDsKKyAgICBzaXplX3QgaTsKKworICAgIHByaW50ZigiLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbiIpOworICAgIG1pbiA9IGtNaW5Sc3NWYWx1ZTsKKyAgICBtYXggPSBrTWF4UnNzVmFsdWU7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYW5Sc3NEYXRhLm1Sc3NMaXN0U2l6ZTsgaSsrKQorICAgIHsKKyAgICAgICAgcnNzID0gYW5Sc3NEYXRhLm1Sc3NMaXN0W2ldOworICAgICAgICBtaW4gPSBNSU5fUlNTKHJzcywgbWluKTsKKyAgICAgICAgbWF4ID0gTUFYX1JTUyhyc3MsIG1heCk7CisgICAgICAgIGxpbmtJbmZvLkFkZFJzcyhzTm9pc2VGbG9vciwgcnNzKTsKKyAgICAgICAgYXZlID0gbGlua0luZm8uR2V0QXZlcmFnZVJzcygpOworICAgICAgICBWZXJpZnlPclF1aXQoYXZlID49IG1pbiwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSBpcyBzbWFsbGVyIHRoYW4gbWluIHZhbHVlLiIpOworICAgICAgICBWZXJpZnlPclF1aXQoYXZlIDw9IG1heCwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSBpcyBsYXJnZXIgdGhhbiBtaW4gdmFsdWUiKTsKKyAgICAgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICAgICAgcHJpbnRmKCIlMDJ1KSBBZGRSc3MoJTRkKTogIiwgKHVuc2lnbmVkIGludClpLCByc3MpOworICAgICAgICBQcmludE91dGNvbWUobGlua0luZm8pOworICAgIH0KKworICAgIFZlcmlmeU9yUXVpdChsaW5rSW5mby5HZXRMaW5rUXVhbGl0eShzTm9pc2VGbG9vcikgPT0gYW5Sc3NEYXRhLm1FeHBlY3RlZExpbmtRdWFsaXR5LAorICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRMaW5rUXVhbGl0eSgpIGlzIGluY29ycmVjdCIpOworfQorCit2b2lkIFRlc3RSc3NBdmVyYWdpbmcodm9pZCkKK3sKKyAgICBMaW5rUXVhbGl0eUluZm8gbGlua0luZm87CisgICAgaW50OF90ICAgICAgICAgIHJzcywgcnNzMiwgYXZlOworICAgIGludDE2X3QgICAgICAgICBkaWZmOworICAgIHNpemVfdCAgICAgICAgICBpLCBqLCBrOworICAgIGNvbnN0IGludDhfdCAgICByc3NWYWx1ZXNbXSA9IHsga01pblJzc1ZhbHVlLCAtNzAsIC00MCwgLTQxLCAtMTAsIGtNYXhSc3NWYWx1ZX07CisKKyAgICAvLy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgIC8vIFZhbHVlcyBhZnRlciBpbml0aWFsaXphdGlvbi4KKworICAgIHByaW50ZigiXG5BZnRlciBJbml0aWFsaXphdGlvbjogIik7CisgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKSA9PSBPVF9SQURJT19SU1NJX0lOVkFMSUQsCisgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEluaXRhbCB2YWx1ZSBmcm9tIEdldEF2ZXJhZ2VSc3MoKSBpcyBpbmNvcnJlY3QuIik7CisgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldExpbmtNYXJnaW4oc05vaXNlRmxvb3IpID09IDAsCisgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEluaXRhbCB2YWx1ZSBmb3IgbGluayBtYXJnaW4gaXMgaW5jb3JyZWN0LiIpOworICAgIFZlcmlmeUVuY29kZWRSc3NWYWx1ZShsaW5rSW5mbyk7CisgICAgUHJpbnRPdXRjb21lKGxpbmtJbmZvKTsKKworICAgIC8vLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisgICAgLy8gQWRkaW5nIGEgc2luZ2xlIHZhbHVlCisgICAgcnNzID0gLTcwOworICAgIHByaW50ZigiQWRkUnNzKCVkKTogIiwgcnNzKTsKKyAgICBsaW5rSW5mby5BZGRSc3Moc05vaXNlRmxvb3IsIHJzcyk7CisgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKSA9PSByc3MsCisgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIC0gR2V0QXZlcmFnZVJzcygpIGZhaWxlZCBhZnRlciBhIHNpbmdsZSBBZGRSc3MoKS4iKTsKKyAgICBWZXJpZnlFbmNvZGVkUnNzVmFsdWUobGlua0luZm8pOworICAgIFByaW50T3V0Y29tZShsaW5rSW5mbyk7CisKKyAgICAvLy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgIC8vIENsZWFyCisKKyAgICBwcmludGYoIkNsZWFyKCk6ICIpOworICAgIGxpbmtJbmZvLkNsZWFyKCk7CisgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKSA9PSBPVF9SQURJT19SU1NJX0lOVkFMSUQsCisgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSBhZnRlciBDbGVhcigpIGlzIGluY29ycmVjdC4iKTsKKyAgICBWZXJpZnlPclF1aXQobGlua0luZm8uR2V0TGlua01hcmdpbihzTm9pc2VGbG9vcikgPT0gMCwKKyAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gbGluayBtYXJnaW4gdmFsdWUgYWZ0ZXIgQ2xlYXIoKSBpcyBpbmNvcnJlY3QuIik7CisgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICBQcmludE91dGNvbWUobGlua0luZm8pOworCisgICAgLy8tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyAgICAvLyBBZGRpbmcgdGhlIHNhbWUgdmFsdWUgbWFueSB0aW1lcy4KKworICAgIHByaW50ZigiLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbiIpOworCisgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZihyc3NWYWx1ZXMpOyBqKyspCisgICAgeworICAgICAgICBsaW5rSW5mby5DbGVhcigpOworICAgICAgICByc3MgPSByc3NWYWx1ZXNbal07CisgICAgICAgIHByaW50ZigiQWRkUnNzKCU0ZCkgJWQgdGltZXM6ICIsIHJzcywga051bVJzc0FkZHMpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrTnVtUnNzQWRkczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBsaW5rSW5mby5BZGRSc3Moc05vaXNlRmxvb3IsIHJzcyk7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobGlua0luZm8uR2V0QXZlcmFnZVJzcygpID09IHJzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgcmV0dXJuZWQgaW5jb3JyZWN0IHZhbHVlLiIpOworICAgICAgICAgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIFByaW50T3V0Y29tZShsaW5rSW5mbyk7CisKKyAgICB9CisKKyAgICAvLy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgIC8vIEFkZGluZyB0d28gUlNTIHZhbHVlczoKKworICAgIHByaW50ZigiLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1cbiIpOworCisgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZihyc3NWYWx1ZXMpOyBqKyspCisgICAgeworICAgICAgICByc3MgPSByc3NWYWx1ZXNbal07CisKKyAgICAgICAgZm9yIChrID0gMDsgayA8IHNpemVvZihyc3NWYWx1ZXMpOyBrKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChrID09IGopCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJzczIgPSByc3NWYWx1ZXNba107CisgICAgICAgICAgICBsaW5rSW5mby5DbGVhcigpOworICAgICAgICAgICAgbGlua0luZm8uQWRkUnNzKHNOb2lzZUZsb29yLCByc3MpOworICAgICAgICAgICAgbGlua0luZm8uQWRkUnNzKHNOb2lzZUZsb29yLCByc3MyKTsKKyAgICAgICAgICAgIHByaW50ZigiQWRkUnNzKCU0ZCksIEFkZFJzcyglNGQpOiAiLCByc3MsIHJzczIpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKSA9PSAoKHJzcyArIHJzczIpID4+IDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSByZXR1cm5lZCBpbmNvcnJlY3QgdmFsdWUuIik7CisgICAgICAgICAgICBWZXJpZnlFbmNvZGVkUnNzVmFsdWUobGlua0luZm8pOworICAgICAgICAgICAgUHJpbnRPdXRjb21lKGxpbmtJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisgICAgLy8gQWRkaW5nIG9uZSB2YWx1ZSBtYW55IHRpbWVzIGFuZCBhIGRpZmZlcmVudCB2YWx1ZSBvbmNlOgorCisgICAgcHJpbnRmKCItIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuIik7CisKKyAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKHJzc1ZhbHVlcyk7IGorKykKKyAgICB7CisgICAgICAgIHJzcyA9IHJzc1ZhbHVlc1tqXTsKKworICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZW9mKHJzc1ZhbHVlcyk7IGsrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGsgPT0gaikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcnNzMiA9IHJzc1ZhbHVlc1trXTsKKyAgICAgICAgICAgIGxpbmtJbmZvLkNsZWFyKCk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrTnVtUnNzQWRkczsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbmtJbmZvLkFkZFJzcyhzTm9pc2VGbG9vciwgcnNzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGlua0luZm8uQWRkUnNzKHNOb2lzZUZsb29yLCByc3MyKTsKKyAgICAgICAgICAgIHByaW50ZigiQWRkUnNzKCU0ZCkgJWQgdGltZXMsIEFkZFJzcyglNGQpOiAiLCByc3MsIGtOdW1Sc3NBZGRzLCByc3MyKTsKKyAgICAgICAgICAgIGF2ZSA9IGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChhdmUgPj0gTUlOX1JTUyhyc3MsIHJzczIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSByZXR1cm5lZCBpbmNvcnJlY3QgdmFsdWUuIik7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoYXZlIDw9IE1BWF9SU1MocnNzLCByc3MyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgcmV0dXJuZWQgaW5jb3JyZWN0IHZhbHVlLiIpOworICAgICAgICAgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICAgICAgICAgIFByaW50T3V0Y29tZShsaW5rSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgIC8vIEFkZGluZyB0d28gYWx0ZXJhaW5nIHZhbHVlcyBtYW55IHRpbWVzOgorCisgICAgcHJpbnRmKCItIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuIik7CisKKyAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKHJzc1ZhbHVlcyk7IGorKykKKyAgICB7CisgICAgICAgIHJzcyA9IHJzc1ZhbHVlc1tqXTsKKworICAgICAgICBmb3IgKGsgPSAwOyBrIDwgc2l6ZW9mKHJzc1ZhbHVlcyk7IGsrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGsgPT0gaikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcnNzMiA9IHJzc1ZhbHVlc1trXTsKKyAgICAgICAgICAgIGxpbmtJbmZvLkNsZWFyKCk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrTnVtUnNzQWRkczsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbmtJbmZvLkFkZFJzcyhzTm9pc2VGbG9vciwgcnNzKTsKKyAgICAgICAgICAgICAgICBsaW5rSW5mby5BZGRSc3Moc05vaXNlRmxvb3IsIHJzczIpOworICAgICAgICAgICAgICAgIGF2ZSA9IGxpbmtJbmZvLkdldEF2ZXJhZ2VSc3MoKTsKKyAgICAgICAgICAgICAgICBWZXJpZnlPclF1aXQoYXZlID49IE1JTl9SU1MocnNzLCByc3MyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RMaW5rUXVhbGl0eUluZm8gZmFpbGVkIC0gR2V0QXZlcmFnZVJzcygpIGlzIHNtYWxsZXIgdGhhbiBtaW4gdmFsdWUuIik7CisgICAgICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGF2ZSA8PSBNQVhfUlNTKHJzcywgcnNzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0TGlua1F1YWxpdHlJbmZvIGZhaWxlZCAtIEdldEF2ZXJhZ2VSc3MoKSBpcyBsYXJnZXIgdGhhbiBtaW4gdmFsdWUuIik7CisgICAgICAgICAgICAgICAgZGlmZiA9IGF2ZTsKKyAgICAgICAgICAgICAgICBkaWZmIC09IChyc3MgKyByc3MyKSA+PiAxOworICAgICAgICAgICAgICAgIFZlcmlmeU9yUXVpdChBQlMoZGlmZikgPD0ga1Jzc0F2ZXJhZ2VNYXhEaWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdExpbmtRdWFsaXR5SW5mbyBmYWlsZWQgLSBHZXRBdmVyYWdlUnNzKCkgaXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAgICAgICAgVmVyaWZ5RW5jb2RlZFJzc1ZhbHVlKGxpbmtJbmZvKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpbnRmKCJbQWRkUnNzKCU0ZCksICBBZGRSc3MoJTRkKV0gJWQgdGltZXM6ICIsIHJzcywgcnNzMiwga051bVJzc0FkZHMpOworICAgICAgICAgICAgUHJpbnRPdXRjb21lKGxpbmtJbmZvKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXN0TGlua1F1YWxpdHlDYWxjdWxhdGlvbnModm9pZCkKK3sKKyAgICBjb25zdCBpbnQ4X3QgIHJzc0xpc3QxW10gPSB7IC04MSwgLTgwLCAtNzksIC03OCwgLTc2LCAtODAsIC03NywgLTc1LCAtNzcsIC03NiwgLTc3LCAtNzR9OworICAgIGNvbnN0IFJzc1Rlc3REYXRhIHJzc0RhdGExID0KKyAgICB7CisgICAgICAgIHJzc0xpc3QxLCAgICAgICAgICAgLy8gbVJzc0xpc3QKKyAgICAgICAgc2l6ZW9mKHJzc0xpc3QxKSwgICAvLyBtUnNzTGlzdFNpemUKKyAgICAgICAgMyAgICAgICAgICAgICAgICAgICAvLyBtRXhwZWN0ZWRMaW5rUXVhbGl0eQorICAgIH07CisKKyAgICBjb25zdCBpbnQ4X3QgIHJzc0xpc3QyW10gPSB7IC05MCwgLTgwLCAtODUgfTsKKyAgICBjb25zdCBSc3NUZXN0RGF0YSByc3NEYXRhMiA9CisgICAgeworICAgICAgICByc3NMaXN0MiwgICAgICAgICAgIC8vIG1Sc3NMaXN0CisgICAgICAgIHNpemVvZihyc3NMaXN0MiksICAgLy8gbVJzc0xpc3RTaXplCisgICAgICAgIDIgICAgICAgICAgICAgICAgICAgLy8gbUV4cGVjdGVkTGlua1F1YWxpdHkKKyAgICB9OworCisgICAgY29uc3QgaW50OF90ICByc3NMaXN0M1tdID0geyAtOTUsIC05NiwgLTk4LCAtOTksIC0xMDAsIC0xMDAsIC05OCwgLTk5LCAtMTAwLCAtMTAwLCAtMTAwLCAtMTAwLCAtMTAwIH07CisgICAgY29uc3QgUnNzVGVzdERhdGEgcnNzRGF0YTMgPQorICAgIHsKKyAgICAgICAgcnNzTGlzdDMsICAgICAgICAgICAvLyBtUnNzTGlzdAorICAgICAgICBzaXplb2YocnNzTGlzdDMpLCAgIC8vIG1Sc3NMaXN0U2l6ZQorICAgICAgICAwICAgICAgICAgICAgICAgICAgIC8vIG1FeHBlY3RlZExpbmtRdWFsaXR5CisgICAgfTsKKworICAgIGNvbnN0IGludDhfdCAgcnNzTGlzdDRbXSA9IHsgLTc1LCAtMTAwLCAtMTAwLCAtMTAwLCAtMTAwLCAtMTAwLCAtOTUsIC05MiwgLTkzLCAtOTQsIC05MywgLTkzIH07CisgICAgY29uc3QgUnNzVGVzdERhdGEgcnNzRGF0YTQgPQorICAgIHsKKyAgICAgICAgcnNzTGlzdDQsICAgICAgICAgICAvLyBtUnNzTGlzdAorICAgICAgICBzaXplb2YocnNzTGlzdDQpLCAgIC8vIG1Sc3NMaXN0U2l6ZQorICAgICAgICAxICAgICAgICAgICAgICAgICAgIC8vIG1FeHBlY3RlZExpbmtRdWFsaXR5CisgICAgfTsKKworICAgIFRlc3RMaW5rUXVhbGl0eURhdGEocnNzRGF0YTEpOworICAgIFRlc3RMaW5rUXVhbGl0eURhdGEocnNzRGF0YTIpOworICAgIFRlc3RMaW5rUXVhbGl0eURhdGEocnNzRGF0YTMpOworICAgIFRlc3RMaW5rUXVhbGl0eURhdGEocnNzRGF0YTQpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgb3Q6OlRlc3RSc3NBdmVyYWdpbmcoKTsKKyAgICBvdDo6VGVzdExpbmtRdWFsaXR5Q2FsY3VsYXRpb25zKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X2xvd3Bhbi5jcHAgYi90ZXN0cy91bml0L3Rlc3RfbG93cGFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTdiMDAyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2xvd3Bhbi5jcHAKQEAgLTAsMCArMSwxOTY2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAidGVzdF9sb3dwYW4uaHBwIgorCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgInRlc3RfdXRpbC5ocHAiCisKK3VzaW5nIG5hbWVzcGFjZSBvdDsKK3VzaW5nIG90OjpFbmNvZGluZzo6QmlnRW5kaWFuOjpIb3N0U3dhcDE2OworCituYW1lc3BhY2Ugb3QgeworCitvdEluc3RhbmNlICpzSW5zdGFuY2U7CitJcDY6OklwNiAqc0lwNjsKK1RocmVhZE5ldGlmICpzVGhyZWFkTmV0aWY7CitMb3dwYW46Okxvd3BhbiAqc0xvd3BhbjsKKwordm9pZCBUZXN0SXBoY1ZlY3Rvcjo6R2V0Q29tcHJlc3NlZFN0cmVhbSh1aW50OF90ICphSXBoYywgdWludDE2X3QgJmFJcGhjTGVuZ3RoKQoreworICAgIG1lbWNweShhSXBoYywgbUlwaGNIZWFkZXIubURhdGEsIG1JcGhjSGVhZGVyLm1MZW5ndGgpOworICAgIG1lbWNweShhSXBoYyArIG1JcGhjSGVhZGVyLm1MZW5ndGgsIG1QYXlsb2FkLm1EYXRhLCBtUGF5bG9hZC5tTGVuZ3RoKTsKKworICAgIGFJcGhjTGVuZ3RoID0gbUlwaGNIZWFkZXIubUxlbmd0aCArIG1QYXlsb2FkLm1MZW5ndGg7Cit9CisKK3ZvaWQgVGVzdElwaGNWZWN0b3I6OkdldFVuY29tcHJlc3NlZFN0cmVhbSh1aW50OF90ICphSXA2LCB1aW50MTZfdCAmYUlwNkxlbmd0aCkKK3sKKyAgICBhSXA2TGVuZ3RoID0gMDsKKworICAgIG1lbWNweShhSXA2LCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJm1JcEhlYWRlciksIHNpemVvZihtSXBIZWFkZXIpKTsKKyAgICBhSXA2TGVuZ3RoICs9IHNpemVvZihtSXBIZWFkZXIpOworCisgICAgaWYgKG1FeHRIZWFkZXIubUxlbmd0aCkKKyAgICB7CisgICAgICAgIG1lbWNweShhSXA2ICsgYUlwNkxlbmd0aCwgbUV4dEhlYWRlci5tRGF0YSwgbUV4dEhlYWRlci5tTGVuZ3RoKTsKKyAgICAgICAgYUlwNkxlbmd0aCArPSBtRXh0SGVhZGVyLm1MZW5ndGg7CisgICAgfQorCisgICAgaWYgKG1JcFR1bm5lbGVkSGVhZGVyLkdldFBheWxvYWRMZW5ndGgoKSkKKyAgICB7CisgICAgICAgIG1lbWNweShhSXA2ICsgYUlwNkxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZtSXBUdW5uZWxlZEhlYWRlciksIHNpemVvZihtSXBUdW5uZWxlZEhlYWRlcikpOworICAgICAgICBhSXA2TGVuZ3RoICs9IHNpemVvZihtSXBUdW5uZWxlZEhlYWRlcik7CisgICAgfQorCisgICAgaWYgKG1VZHBIZWFkZXIuR2V0TGVuZ3RoKCkpCisgICAgeworICAgICAgICBtZW1jcHkoYUlwNiArIGFJcDZMZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbVVkcEhlYWRlciksIHNpemVvZihtVWRwSGVhZGVyKSk7CisgICAgICAgIGFJcDZMZW5ndGggKz0gc2l6ZW9mKG1VZHBIZWFkZXIpOworICAgIH0KKworICAgIG1lbWNweShhSXA2ICsgYUlwNkxlbmd0aCwgbVBheWxvYWQubURhdGEsIG1QYXlsb2FkLm1MZW5ndGgpOworICAgIGFJcDZMZW5ndGggKz0gbVBheWxvYWQubUxlbmd0aDsKK30KKwordm9pZCBUZXN0SXBoY1ZlY3Rvcjo6R2V0VW5jb21wcmVzc2VkU3RyZWFtKE1lc3NhZ2UgJmFNZXNzYWdlKQoreworICAgIFN1Y2Nlc3NPclF1aXQoYU1lc3NhZ2UuQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmbUlwSGVhZGVyKSwgc2l6ZW9mKG1JcEhlYWRlcikpLAorICAgICAgICAgICAgICAgICAgIjZsbzogTWVzc2FnZTo6QXBwZW5kIGZhaWxlZCIpOworCisgICAgaWYgKG1FeHRIZWFkZXIubUxlbmd0aCkKKyAgICB7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQoYU1lc3NhZ2UuQXBwZW5kKG1FeHRIZWFkZXIubURhdGEsIG1FeHRIZWFkZXIubUxlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgIjZsbzogTWVzc2FnZTo6QXBwZW5kIGZhaWxlZCIpOworICAgIH0KKworICAgIGlmIChtSXBUdW5uZWxlZEhlYWRlci5HZXRQYXlsb2FkTGVuZ3RoKCkpCisgICAgeworICAgICAgICBTdWNjZXNzT3JRdWl0KGFNZXNzYWdlLkFwcGVuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJm1JcFR1bm5lbGVkSGVhZGVyKSwgc2l6ZW9mKG1JcFR1bm5lbGVkSGVhZGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgIjZsbzogTWVzc2FnZTo6QXBwZW5kIGZhaWxlZCIpOworICAgIH0KKworICAgIGlmIChtVWRwSGVhZGVyLkdldExlbmd0aCgpKQorICAgIHsKKyAgICAgICAgU3VjY2Vzc09yUXVpdChhTWVzc2FnZS5BcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90ICo+KCZtVWRwSGVhZGVyKSwgc2l6ZW9mKG1VZHBIZWFkZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiNmxvOiBNZXNzYWdlOjpBcHBlbmQgZmFpbGVkIik7CisgICAgfQorCisgICAgU3VjY2Vzc09yUXVpdChhTWVzc2FnZS5BcHBlbmQobVBheWxvYWQubURhdGEsIG1QYXlsb2FkLm1MZW5ndGgpLCAiNmxvOiBNZXNzYWdlOjpBcHBlbmQgZmFpbGVkNSIpOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgVGhyZWFkIEludGVyZmFjZS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIEluaXQoKQoreworICAgIHVpbnQ4X3QgbWVzaExvY2FsUHJlZml4W10gPSB7MHhmZCwgMHgwMCwgMHhjYSwgMHhmZSwgMHhmYSwgMHhjZSwgMHgxMiwgMHgzNH07CisgICAgc1RocmVhZE5ldGlmLT5HZXRNbGUoKS5TZXRNZXNoTG9jYWxQcmVmaXgobWVzaExvY2FsUHJlZml4KTsKKworICAgIC8vIEVtdWxhdGUgZ2xvYmFsIHByZWZpeGVzIHdpdGggY29udGV4dGVzLgorICAgIHVpbnQ4X3QgbW9ja05ldHdvcmtEYXRhW10gPQorICAgIHsKKyAgICAgICAgLy8gUHJlZml4IDIwMDE6MjowOjE6Oi82NAorICAgICAgICAweDAzLCAweDBlLCAvLyBQcmVmaXggVExWCisgICAgICAgIDB4MDAsIDB4NDAsCisgICAgICAgIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisgICAgICAgIDB4MDcsIDB4MDIsIC8vIDZMb1dQQU4gQ29udGV4dCBJRCBUTFYKKyAgICAgICAgMHgxMSwgMHg0MCwgLy8gQ29udGV4dCBJRCA9IDEsIEMgPSBUUlVFCisKKyAgICAgICAgLy8gUHJlZml4IDIwMDE6MjowOjI6Oi82NAorICAgICAgICAweDAzLCAweDBlLCAvLyBQcmVmaXggVExWCisgICAgICAgIDB4MDAsIDB4NDAsCisgICAgICAgIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisgICAgICAgIDB4MDcsIDB4MDIsIC8vIDZMb1dQQU4gQ29udGV4dCBJRCBUTFYKKyAgICAgICAgMHgwMiwgMHg0MCAgLy8gQ29udGV4dCBJRCA9IDIsIEMgPSBGQUxTRQorICAgIH07CisKKyAgICBzVGhyZWFkTmV0aWYtPkdldE5ldHdvcmtEYXRhTGVhZGVyKCkuU2V0TmV0d29ya0RhdGEoMCwgMCwgdHJ1ZSwgbW9ja05ldHdvcmtEYXRhLCBzaXplb2YobW9ja05ldHdvcmtEYXRhKSk7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBjb21wcmVzc2lvbiBvci9hbmQgZGVjb21wcmVzc2lvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gdGVzdCB2ZWN0b3IuCisgKgorICogQG5vdGUgUGVyZm9ybWluZyBkZWNvbXByZXNzaW9uIGFuZCBjb21wcmVzc2lvbiBvbiB0aGUgc2FtZSBMT1dQQU5fSVBIQyBmcmFtZSBtYXkgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0LgorICogICAgICAgVGhpcyBzaXR1YXRpb24gbWF5IG9jY3VyIHdoZW4gc2VuZGVyIGRvZXMgbm90IHVzZSB0aGUgYmVzdCBwb3NzaWJsZSBjb21wcmVzc2lvbiwKKyAqICAgICAgIGUuZy4gZG9lc24ndCB1c2UgTE9XUEFOX05IQyBmb3IgVURQIC0gd2hpY2ggaXMgc3RpbGwgdmFsaWQuCisgKgorICogQHBhcmFtIGFWZWN0b3IgICAgIFRlc3QgdmVjdG9yIHRoYXQgaGFzIHRvIGJlIHRlc3RlZC4KKyAqIEBwYXJhbSBhQ29tcHJlc3MgICBTZXQgdG8gVFJVRSwgaWYgY29tcHJlc3Npb24gc2hvdWxkIGJlIHRlc3RlZC4KKyAqIEBwYXJhbSBhRGVjb21wcmVzcyBTZXQgdG8gVFJVRSwgaWYgZGVjb21ycGVzc2lvbiBzaG91bGQgYmUgdGVzdGVkLgorICovCitzdGF0aWMgdm9pZCBUZXN0KFRlc3RJcGhjVmVjdG9yICZhVmVjdG9yLCBib29sIGFDb21wcmVzcywgYm9vbCBhRGVjb21wcmVzcykKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgICB1aW50OF90IHJlc3VsdFs1MTJdOworICAgIHVpbnQ4X3QgaXBoY1s1MTJdOworICAgIHVpbnQ4X3QgaXA2WzUxMl07CisgICAgdWludDE2X3QgaXBoY0xlbmd0aDsKKyAgICB1aW50MTZfdCBpcDZMZW5ndGg7CisKKyAgICBhVmVjdG9yLkdldENvbXByZXNzZWRTdHJlYW0oaXBoYywgaXBoY0xlbmd0aCk7CisgICAgYVZlY3Rvci5HZXRVbmNvbXByZXNzZWRTdHJlYW0oaXA2LCBpcDZMZW5ndGgpOworCisgICAgcHJpbnRmKCJcbj09PSBUZXN0IG5hbWU6ICVzID09PVxuXG4iLCBhVmVjdG9yLm1UZXN0TmFtZSk7CisKKyAgICBwcmludGYoIkV4cGVjdGVkIGVycm9yIC0tLS0tLS0tLS0tLS0tICVzXG4iLCBhVmVjdG9yLm1FcnJvciA/ICJ5ZXMiIDogIm5vIik7CisgICAgcHJpbnRmKCJVRFAgcHJlc2VudCAtLS0tLS0tLS0tLS0tLS0tLSAlc1xuIiwgYVZlY3Rvci5tVWRwSGVhZGVyLkdldExlbmd0aCgpID8gInllcyIgOiAibm8iKTsKKyAgICBwcmludGYoIkV4dGVuc2lvbiBIZWFkZXJzIHByZXNlbnQgLS0tICVzXG4iLCBhVmVjdG9yLm1FeHRIZWFkZXIubUxlbmd0aCA/ICJ5ZXMiIDogIm5vIik7CisgICAgcHJpbnRmKCJJUC1pbi1JUCBwcmVzZW50IC0tLS0tLS0tLS0tLSAlc1xuIiwgYVZlY3Rvci5tSXBUdW5uZWxlZEhlYWRlci5HZXRQYXlsb2FkTGVuZ3RoKCkgPyAieWVzIiA6ICJubyIpOworICAgIHByaW50ZigiTE9XUEFOX0lQSEMgbGVuZ3RoIC0tLS0tLS0tLS0gJWRcbiIsIGFWZWN0b3IubUlwaGNIZWFkZXIubUxlbmd0aCk7CisgICAgcHJpbnRmKCJJUHY2IHVuY29tcHJlc3NlZCBvZmZzZXQgLS0tLSAlZFxuXG4iLCBhVmVjdG9yLm1QYXlsb2FkT2Zmc2V0KTsKKworICAgIHByaW50ZigiRXhwZWN0ZWQgSVB2NiB1bmNvbXByZXNzZWQgcGFja2V0OiBcbiIpOworICAgIG90VGVzdFByaW50SGV4KGlwNiwgaXA2TGVuZ3RoKTsKKyAgICBwcmludGYoIlxuIik7CisKKyAgICBwcmludGYoIkV4cGVjdGVkIExPV1BBTl9JUEhDIGNvbXByZXNzZWQgZnJhbWU6IFxuIik7CisgICAgb3RUZXN0UHJpbnRIZXgoaXBoYywgaXBoY0xlbmd0aCk7CisgICAgcHJpbnRmKCJcbiIpOworCisgICAgaWYgKGFDb21wcmVzcykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdCgobWVzc2FnZSA9IHNJcDYtPm1NZXNzYWdlUG9vbC5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgIjZsbzogSXA2OjpOZXdNZXNzYWdlIGZhaWxlZCIpOworCisgICAgICAgIGFWZWN0b3IuR2V0VW5jb21wcmVzc2VkU3RyZWFtKCptZXNzYWdlKTsKKworICAgICAgICBpbnQgY29tcHJlc3NCeXRlcyA9IHNMb3dwYW4tPkNvbXByZXNzKCptZXNzYWdlLCBhVmVjdG9yLm1NYWNTb3VyY2UsIGFWZWN0b3IubU1hY0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGFWZWN0b3IubUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEFwcGVuZCBwYXlsb2FkIHRvIHRoZSBMT1dQQU5fSVBIQy4KKyAgICAgICAgICAgIG1lc3NhZ2UtPlJlYWQobWVzc2FnZS0+R2V0T2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UtPkdldExlbmd0aCgpIC0gbWVzc2FnZS0+R2V0T2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArIGNvbXByZXNzQnl0ZXMpOworCisgICAgICAgICAgICBwcmludGYoIlJlc3VsdGVkIExPV1BBTl9JUEhDIGNvbXByZXNzZWQgZnJhbWU6IFxuIik7CisgICAgICAgICAgICBvdFRlc3RQcmludEhleChyZXN1bHQsIGNvbXByZXNzQnl0ZXMgKyBtZXNzYWdlLT5HZXRMZW5ndGgoKSAtIG1lc3NhZ2UtPkdldE9mZnNldCgpKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGNvbXByZXNzQnl0ZXMgPT0gYVZlY3Rvci5tSXBoY0hlYWRlci5tTGVuZ3RoLCAiNmxvOiBMb3dwYW46OkNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UtPkdldE9mZnNldCgpID09IGFWZWN0b3IubVBheWxvYWRPZmZzZXQsICI2bG86IExvd3Bhbjo6Q29tcHJlc3MgZmFpbGVkIik7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobWVtY21wKGlwaGMsIHJlc3VsdCwgaXBoY0xlbmd0aCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNmxvOiBMb3dwYW46OkNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGNvbXByZXNzQnl0ZXMgPCAwLCAiNmxvOiBMb3dwYW46OkNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZS0+RnJlZSgpOworICAgICAgICBtZXNzYWdlID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYURlY29tcHJlc3MpCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoKG1lc3NhZ2UgPSBzSXA2LT5tTWVzc2FnZVBvb2wuTmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKSkgIT0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICI2bG86IElwNjo6TmV3TWVzc2FnZSBmYWlsZWQiKTsKKworICAgICAgICBpbnQgZGVjb21wcmVzc2VkQnl0ZXMgPSBzTG93cGFuLT5EZWNvbXByZXNzKCptZXNzYWdlLCBhVmVjdG9yLm1NYWNTb3VyY2UsIGFWZWN0b3IubU1hY0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwaGMsIGlwaGNMZW5ndGgsIDApOworCisgICAgICAgIG1lc3NhZ2UtPlJlYWQoMCwgbWVzc2FnZS0+R2V0TGVuZ3RoKCksIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGFWZWN0b3IubUVycm9yID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEFwcGVuZCBwYXlsb2FkIHRvIHRoZSBJUHY2IFBhY2tldC4KKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQgKyBtZXNzYWdlLT5HZXRMZW5ndGgoKSwgaXBoYyArIGRlY29tcHJlc3NlZEJ5dGVzLAorICAgICAgICAgICAgICAgICAgIGlwaGNMZW5ndGggLSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZGVjb21wcmVzc2VkQnl0ZXMpKTsKKworICAgICAgICAgICAgcHJpbnRmKCJSZXN1bHRlZCBJUHY2IHVuY29tcHJlc3NlZCBwYWNrZXQ6IFxuIik7CisgICAgICAgICAgICBvdFRlc3RQcmludEhleChyZXN1bHQsIG1lc3NhZ2UtPkdldExlbmd0aCgpICsgaXBoY0xlbmd0aCAtIGRlY29tcHJlc3NlZEJ5dGVzKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGRlY29tcHJlc3NlZEJ5dGVzID09IGFWZWN0b3IubUlwaGNIZWFkZXIubUxlbmd0aCwgIjZsbzogTG93cGFuOjpEZWNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UtPkdldE9mZnNldCgpID09IGFWZWN0b3IubVBheWxvYWRPZmZzZXQsICI2bG86IExvd3Bhbjo6RGVjb21wcmVzcyBmYWlsZWQiKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlLT5HZXRPZmZzZXQoKSA9PSBtZXNzYWdlLT5HZXRMZW5ndGgoKSwgIjZsbzogTG93cGFuOjpEZWNvbXByZXNzIGZhaWxlZCIpOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1lbWNtcChpcDYsIHJlc3VsdCwgaXA2TGVuZ3RoKSA9PSAwLCAiNmxvOiBMb3dwYW46OkRlY29tcHJlc3MgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoZGVjb21wcmVzc2VkQnl0ZXMgPCAwLCAiNmxvOiBMb3dwYW46OkRlY29tcHJlc3MgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlLT5GcmVlKCk7CisgICAgICAgIG1lc3NhZ2UgPSBOVUxMOworICAgIH0KKworICAgIHByaW50ZigiUEFTU1xuXG4iKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gVGVzdCBjb25zdGFudHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3QgdWludDhfdCBzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nW10gPSB7MHgwMCwgMHgwMCwgMHg1ZSwgMHhlZiwgMHgxMCwgMHgyMiwgMHgxMSwgMHgwMH07CitzdGF0aWMgY29uc3QgdWludDhfdCBzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmdbXSA9IHsweDAwLCAweDAwLCAweDVlLCAweGVmLCAweDEwLCAweGFhLCAweGJiLCAweGNjfTsKKworc3RhdGljIHVpbnQxNl90IHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0ID0gMHgwMDAwOworc3RhdGljIHVpbnQxNl90IHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQgPSAweGMwMDM7CitzdGF0aWMgdWludDE2X3Qgc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCA9IDB4ZmZmZjsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc1Rlc3RQYXlsb2FkRGVmYXVsdFtdID0gezB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDZ9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEBzZWN0aW9uIFRlc3QgY2FzZXMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlTG9uZ0FkZHJlc3Nlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkZ1bGx5IGNvbXByZXNzYWJsZSBJUHY2IGFkZHJlc3NlcyB1c2luZyBsb25nIE1BQyBhZGRyZXNzZXMiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTBhYTpiYmNjIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzMsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlU2hvcnRBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJGdWxseSBjb21wcmVzc2FibGUgSVB2NiBhZGRyZXNzZXMgdXNpbmcgc2hvcnQgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDMzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RGdWxseUNvbXByZXNzYWJsZVNob3J0TG9uZ0FkZHJlc3Nlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkZ1bGx5IGNvbXByZXNzYWJsZSBJUHY2IGFkZHJlc3NlcyB1c2luZyBzaG9ydCBhbmQgbG9uZyBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzMywgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RnVsbHlDb21wcmVzc2FibGVMb25nU2hvcnRBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJGdWxseSBjb21wcmVzc2FibGUgSVB2NiBhZGRyZXNzZXMgdXNpbmcgbG9uZyBhbmQgc2hvcnQgTUFDIGFkZHJlc3NlcyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDpjMDAzIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzMsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFNvdXJjZVVuc3BlY2lmaWVkQWRkcmVzcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlVuc3BlY2lmaWVkIHNvdXJjZSBJUHY2IGFkZHJlc3MiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI6OiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDpjMDAzIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4NDMsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFNvdXJjZTEyOGJpdERlc3RpbmF0aW9uMTI4Yml0QWRkcmVzc2VzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSVB2NiBhZGRyZXNzZXMgaW5saW5lIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MzphYWFhOmJiYmI6Y2NjYzpkZGRkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxOjI6MDo0OjoiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgwMCwgMHgzYSwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAzLCAweGFhLCAweGFhLCAweGJiLCAweGJiLCAweGNjLAorICAgICAgICAgICAgICAgICAgICAgIDB4Y2MsIDB4ZGQsIDB4ZGQsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFNvdXJjZTY0Yml0RGVzdGluYXRpb242NGJpdExvbmdBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJJUHY2IGFkZHJlc3NlcyA2NC1iaXQgdXNpbmcgbG9uZyBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjZCIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDExLCAweDNhLCAweDAyLCAweDAwLCAweDVlLCAweGVmLCAweDEwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4MTEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NWUsIDB4ZWYsIDB4MTAsCisgICAgICAgICAgICAgICAgICAgICAgMHhhYSwgMHhiYiwgMHhjZAorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRTaG9ydEFkZHJlc3Nlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIklQdjYgYWRkcmVzc2VzIDY0LWJpdCB1c2luZyBzaG9ydCBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTBhYTpiYmNkIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MTEsIDB4M2EsIDB4MDIsIDB4MDAsIDB4NWUsIDB4ZWYsIDB4MTAsCisgICAgICAgICAgICAgICAgICAgICAgMHgyMiwgMHgxMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHg1ZSwgMHhlZiwgMHgxMCwKKyAgICAgICAgICAgICAgICAgICAgICAweGFhLCAweGJiLCAweGNkCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFNvdXJjZTE2Yml0RGVzdGluYXRpb24xNmJpdEFkZHJlc3Nlcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIklQdjYgYWRkcmVzc2VzIDE2LWJpdCB1c2luZyBzaG9ydCBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6MDAwMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDpjMDA0Iik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MjIsIDB4M2EsIDB4MDAsIDB4MDEsIDB4YzAsIDB4MDR9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFNvdXJjZUNvbXByZXNzZWREZXN0aW5hdGlvbjE2Yml0QWRkcmVzc2VzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRnVsbHkgY29tcHJlc3NhYmxlIElQdjYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAxNi1iaXQgdXNpbmcgbG9uZyBNQUMgYWRkcmVzc2VzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YmVhZiIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDMyLCAweDNhLCAweGJlLCAweGFmfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTb3VyY2VDb21wcmVzc2VkRGVzdGluYXRpb24xMjhiaXRBZGRyZXNzZXModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJGdWxseSBjb21wcmVzc2FibGUgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGlubGluZSB1c2luZyBsb25nIE1BQyBhZGRyZXNzZXMiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6NDo6Iik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzAsIDB4M2EsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworCitzdGF0aWMgdm9pZCBUZXN0TXVsdGljYXN0MTI4Yml0QWRkcmVzcyh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIk11bHRpY2FzdCBhZGRyZXNzIGlubGluZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwNTo6MTAwOjAwMzA6MDAwMSIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDM4LCAweDNhLCAweGZmLCAweDA1LCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgzMCwgMHgwMCwgMHgwMQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RNdWx0aWNhc3Q0OGJpdEFkZHJlc3Modm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJNdWx0aWNhc3QgYWRkcmVzcyA0OC1iaXQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDU6OjE6MDAzMDowMDAxIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzksIDB4M2EsIDB4MDUsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RNdWx0aWNhc3QzMmJpdEFkZHJlc3Modm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJNdWx0aWNhc3QgYWRkcmVzcyAzMi1iaXQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjpmYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDFhLCAweDNhLCAweDAyLCAweDAwLCAweDVlLCAweGVmLCAweDEwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MjIsIDB4MTEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZmMKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0TXVsdGljYXN0OGJpdEFkZHJlc3Modm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJNdWx0aWNhc3QgYWRkcmVzcyA4LWJpdCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMjo6MiIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDNiLCAweDNhLCAweDAyfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTdGF0ZWZ1bFNvdXJjZTY0Yml0RGVzdGluYXRpb242NGJpdENvbnRleHQwKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgNjQtYml0LCBjb250ZXh0IDAiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDphYmNkOmVmMDE6MjM0NTo2Nzg5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OmMzMWQ6YTcwMjowZDQxOmJlZWYiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHg1NSwgMHgzYSwgMHhhYiwgMHhjZCwgMHhlZiwgMHgwMSwgMHgyMywKKyAgICAgICAgICAgICAgICAgICAgICAweDQ1LCAweDY3LCAweDg5LCAweGMzLCAweDFkLCAweGE3LCAweDAyLCAweDBkLAorICAgICAgICAgICAgICAgICAgICAgIDB4NDEsIDB4YmUsIDB4ZWYKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRDb250ZXh0MElmQ29udGV4dEluTGluZSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIDY0LWJpdCwgY29udGV4dCAwIGlubGluZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OmFiY2Q6ZWYwMToyMzQ1OjY3ODkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6YzMxZDphNzAyOjBkNDE6YmVlZiIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweGQ1LCAweDAwLCAweDNhLCAweGFiLCAweGNkLCAweGVmLCAweDAxLCAweDIzLAorICAgICAgICAgICAgICAgICAgICAgIDB4NDUsIDB4NjcsIDB4ODksIDB4YzMsIDB4MWQsIDB4YTcsIDB4MDIsIDB4MGQsCisgICAgICAgICAgICAgICAgICAgICAgMHg0MSwgMHhiZSwgMHhlZgorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdCBvbmx5LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxTb3VyY2UxNmJpdERlc3RpbmF0aW9uMTZiaXRDb250ZXh0MCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzIDE2LWJpdCwgY29udGV4dCAwIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0U2hvcnQpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6ZmZmYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDpmZmZlIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4NjYsIDB4M2EsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmV9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsQ29tcHJlc3NhYmxlTG9uZ0FkZHJlc3Nlc0NvbnRleHQwKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gY29tcHJlc3NhYmxlIGxvbmcgYWRkcmVzc2VzLCBjb250ZXh0IDAiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6MDIwMDo1ZWVmOjEwMjI6MTEwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDowMjAwOjVlZWY6MTBhYTpiYmNjIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4NzcsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdFN0YXRlZnVsQ29tcHJlc3NhYmxlU2hvcnRBZGRyZXNzZXNDb250ZXh0MCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlN0YXRlZnVsIGNvbXByZXNzaW9uIGNvbXByZXNzYWJsZSBzaG9ydCBhZGRyZXNzZXMsIGNvbnRleHQgMCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDc3LCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTdGF0ZWZ1bENvbXByZXNzYWJsZUxvbmdTaG9ydEFkZHJlc3Nlc0NvbnRleHQwKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gY29tcHJlc3NhYmxlIGxvbmcgYW5kIHNob3J0IGFkZHJlc3NlcywgY29udGV4dCAwIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDowMjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOmMwMDMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHg3NywgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uMTI4Yml0Q29udGV4dDEodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJTdGF0ZWZ1bCBjb21wcmVzc2lvbiBzb3VyY2UgYWRkcmVzc2VzIDY0LWJpdCBhbmQgZGVzdGluYXRpb24gaW5saW5lLCBjb250ZXh0IDEiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MTphYmNkOmVmMDE6MjM0NTo2Nzg5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxOjI6MDozOmMzMWQ6YTcwMjowZDQxOmJlZWYiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHhkMCwgMHgxMCwgMHgzYSwgMHhhYiwgMHhjZCwgMHhlZiwgMHgwMSwgMHgyMywKKyAgICAgICAgICAgICAgICAgICAgICAweDQ1LCAweDY3LCAweDg5LCAweDIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDMsIDB4YzMsIDB4MWQsIDB4YTcsIDB4MDIsIDB4MGQsIDB4NDEsIDB4YmUsCisgICAgICAgICAgICAgICAgICAgICAgMHhlZgorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTdGF0ZWZ1bFNvdXJjZTY0Yml0RGVzdGluYXRpb242NGJpdENvbnRleHQxKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiU3RhdGVmdWwgY29tcHJlc3Npb24gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgNjQtYml0LCBjb250ZXh0IDEiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MTphYmNkOmVmMDE6MjM0NTo2Nzg5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxOjI6MDoxOmMzMWQ6YTcwMjowZDQxOmJlZWYiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHhkNSwgMHgxMSwgMHgzYSwgMHhhYiwgMHhjZCwgMHhlZiwgMHgwMSwgMHgyMywKKyAgICAgICAgICAgICAgICAgICAgICAweDQ1LCAweDY3LCAweDg5LCAweGMzLCAweDFkLCAweGE3LCAweDAyLCAweDBkLCAweDQxLAorICAgICAgICAgICAgICAgICAgICAgIDB4YmUsIDB4ZWYKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxTb3VyY2VEZXN0aW5hdGlvbklubGluZUNvbnRleHQyQ0lERmFsc2Uodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJTdGF0ZWZ1bCBjb21wcmVzc2lvbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBpbmxpbmUsIGNvbnRleHQgMiAoQz1GQUxTRSkiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMToyOjA6MjphYmNkOmVmMDE6MjM0NTo2Nzg5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIyMDAxOjI6MDoyOmMzMWQ6YTcwMjowZDQxOmJlZWYiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgwMCwgMHgzYSwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAyLCAweGFiLCAweGNkLCAweGVmLCAweDAxLCAweDIzLAorICAgICAgICAgICAgICAgICAgICAgIDB4NDUsIDB4NjcsIDB4ODksIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwgMHhjMywgMHgxZCwgMHhhNywgMHgwMiwgMHgwZCwKKyAgICAgICAgICAgICAgICAgICAgICAweDQxLCAweGJlLCAweGVmCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gdGVzdCBvbmx5LgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBUZXN0U3RhdGVmdWxNdWx0aWNhc3REZXN0aW5hdGlvbjQ4Yml0Q29udGV4dDAodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJTdGF0ZWZ1bCBjb21wcmVzc2lvbiBtdWx0aWNhc3QgYWRkcmVzcywgY29udGV4dCAwIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDowMjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjMzOjAwNDA6ZmQwMDpjYWZlOmZhY2U6MTIzNDowMDAwOjAwMDEiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHg3YywgMHgzYSwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAxCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VHJhZmZpY0NsYXNzRmxvd0xhYmVsM0J5dGVzKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVHJhZmZpYyBDbGFzcyBhbmQgRmxvdyBMYWJlbCAzIGJ5dGVzIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDExYWM1OSwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDZhLCAweDMzLCAweDQxLCAweGFjLCAweDU5LCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RUcmFmZmljQ2xhc3NGbG93TGFiZWwxQnl0ZSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlRyYWZmaWMgQ2xhc3MgYW5kIEZsb3cgTGFiZWwgMSBieXRlIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MGQwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDcyLCAweDMzLCAweDQzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RUcmFmZmljQ2xhc3NGbG93TGFiZWwxQnl0ZUVjbk9ubHkodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJUcmFmZmljIENsYXNzIGFuZCBGbG93IExhYmVsIDEgYnl0ZSB3aXRoIGVjbiBvbmx5Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDEwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDcyLCAweDMzLCAweDQwLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RUcmFmZmljQ2xhc3NGbG93TGFiZWxJbmxpbmUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJUcmFmZmljIENsYXNzIGFuZCBGbG93IExhYmVsIGlubGluZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NmVhMTIzNDUsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg2MiwgMHgzMywgMHhCQSwgMHgwMSwgMHgyMywgMHg0NSwgMHgzYX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0SG9wTGltaXQxKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSG9wIExpbWl0IDEiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDc5LCAweDMzLCAweDNhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RIb3BMaW1pdDI1NSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkhvcCBMaW1pdCAyNTUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRTaG9ydCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSwgSXA2OjprUHJvdG9JY21wNiwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDpjMDAzIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N0IsIDB4MzMsIDB4M2F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0MCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEhvcExpbWl0SW5saW5lKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSG9wIExpbWl0IElubGluZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b0ljbXA2LCA2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OmZmOmZlMDA6YzAwMyIpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDc4LCAweDMzLCAweDNhLCAweDNmfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RVZHBTb3VyY2VEZXN0aW5hdGlvbklubGluZSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlVEUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGlubGluZSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvVWRwLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0dXAgVURQIGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldFVEUEhlYWRlcig1NjgzLCA1Njg0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCAweGJlZWYpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDMzLCAweGYwLCAweDE2LCAweDMzLCAweDE2LCAweDM0LCAweGJlLCAweGVmfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDgpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RVZHBTb3VyY2VJbmxpbmVEZXN0aW5hdGlvbjhiaXQodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJVRFAgc291cmNlIGlubGluZSBkZXN0aW5hdGlvbiA4LWJpdCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvVWRwLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0dXAgVURQIGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldFVEUEhlYWRlcig1NjgzLCA2MTQ0MSwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgMHhiZWVmKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHhmMSwgMHgxNiwgMHgzMywgMHgwMSwgMHhiZSwgMHhlZn07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VWRwU291cmNlOGJpdERlc3RpbmF0aW9uSW5saW5lKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVURQIHNvdXJjZSA4LWJpdCBkZXN0aW5hdGlvbiA4LWJpdCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvVWRwLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlODA6OjIwMDo1ZWVmOjEwYWE6YmJjYyIpOworCisgICAgLy8gU2V0dXAgVURQIGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldFVEUEhlYWRlcig2MTY5NSwgNTY4Mywgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgMHhiZWVmKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHgzMywgMHhmMiwgMHhmZiwgMHgxNiwgMHgzMywgMHhiZSwgMHhlZn07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0VWRwRnVsbHlDb21wcmVzc2VkKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVURQIGZ1bGx5IGNvbXByZXNzZWQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b1VkcCwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTAyMjoxMTAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMGFhOmJiY2MiKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNjE2MTYsIDYxNjMxLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCAweGZhY2UpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDMzLCAweGYzLCAweDBmLCAweGZhLCAweGNlfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDgpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RVZHBGdWxseUNvbXByZXNzZWRNdWx0aWNhc3Qodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJVRFAgZnVsbHkgY29tcHJlc3NlZCB3aXRoIElQIG11bHRpY2FzdCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvVWRwLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDI6OjEiKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNjE2MTYsIDYxNjMxLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCAweGZhY2UpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDNiLCAweDAxLCAweGYzLCAweDBmLCAweGZhLCAweGNlfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDgpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RVZHBXaXRob3V0TmhjKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiVURQIHdpdGhvdXQgTE9XUEFOX05IQyBjb21wcmVzc2lvbiIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdFNob3J0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpLCBJcDY6OmtQcm90b1VkcCwgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjpmZjpmZTAwOmMwMDMiKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzMywgMHgxMX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQwKTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBvbmx5IGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wTm9QYWRkaW5nKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBubyBwYWRkaW5nIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4M2EsIDB4MDAsIDB4NmQsIDB4MDQsIDB4NjAsIDB4MTEsIDB4MDAsIDB4MGN9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDNhLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4NmQsIDB4MDQsIDB4NjAsIDB4MTEsIDB4MDAsIDB4MGMKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWQxKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBQYWQxIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4M2EsIDB4MDAsIDB4NmQsIDB4MDMsIDB4NjAsIDB4MTEsIDB4MDAsIDB4MDB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDNhLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDUsIDB4NmQsIDB4MDMsIDB4NjAsIDB4MTEsIDB4MDAKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWROMih2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkV4dGVuc2lvbiBIZWFkZXIgLSBIb3AtYnktSG9wIHdpdGggUGFkTjIiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIElwNjo6a1Byb3RvSG9wT3B0cywgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjoxIik7CisKKyAgICAvLyBTZXR1cCBleHRlbnNpb24gaGVhZGVyLgorICAgIHVpbnQ4X3QgZXh0SGVhZGVyW10gPSB7MHgzYSwgMHgwMCwgMHg2ZCwgMHgwMiwgMHg2MCwgMHgxMSwgMHgwMSwgMHgwMH07CisgICAgdGVzdFZlY3Rvci5TZXRFeHRIZWFkZXIoZXh0SGVhZGVyLCBzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4M2EsCisgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHg2ZCwgMHgwMiwgMHg2MCwgMHgxMQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNDgpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE4zKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBQYWROMyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDNhLCAweDAwLCAweDZkLCAweDAxLCAweDYwLCAweDAxLCAweDAxLCAweDAwfTsKKyAgICB0ZXN0VmVjdG9yLlNldEV4dEhlYWRlcihleHRIZWFkZXIsIHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHg3YSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHgzYSwKKyAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDZkLCAweDAxLCAweDYwCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg0OCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjQodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJFeHRlbnNpb24gSGVhZGVyIC0gSG9wLWJ5LUhvcCB3aXRoIFBhZE40Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA4LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4M2EsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDdhLCAweDAzLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDNhLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4NmQsIDB4MDAKKyAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkKHNUZXN0UGF5bG9hZERlZmF1bHQsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSk7CisgICAgdGVzdFZlY3Rvci5TZXRQYXlsb2FkT2Zmc2V0KDQ4KTsKKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX05PTkUpOworCisgICAgLy8gUGVyZm9ybSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIHRydWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWRONSh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIkV4dGVuc2lvbiBIZWFkZXIgLSBIb3AtYnktSG9wIHdpdGggUGFkTjUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDE2LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4M2EsIDB4MDEsIDB4NmQsIDB4MDcsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDMzLCAweDAxLCAweDAzLCAweDAwLCAweDAwLCAweDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRFeHRIZWFkZXIoZXh0SGVhZGVyLCBzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4M2EsCisgICAgICAgICAgICAgICAgICAgICAgMHgwOSwgMHg2ZCwgMHgwNywgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDMzCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg1Nik7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjYodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJFeHRlbnNpb24gSGVhZGVyIC0gSG9wLWJ5LUhvcCB3aXRoIFBhZE42Iik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyAyNCwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIGV4dGVuc2lvbiBoZWFkZXIuCisgICAgdWludDhfdCBleHRIZWFkZXJbXSA9IHsweDNhLCAweDAyLCAweDZkLCAweDBlLCAweDAxLCAweDAyLCAweDAxLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgzMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldEV4dEhlYWRlcihleHRIZWFkZXIsIHNpemVvZihleHRIZWFkZXIpKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHg3YSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHgzYSwKKyAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDZkLCAweDBlLCAweDAxLCAweDAyLCAweDAxLCAweDAwLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MzMsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgMHgwMAorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNjQpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE43KHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiRXh0ZW5zaW9uIEhlYWRlciAtIEhvcC1ieS1Ib3Agd2l0aCBQYWRONyIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRTaG9ydCk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uQnJvYWRjYXN0KTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgMjQsIElwNjo6a1Byb3RvSG9wT3B0cywgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZjAzOjoxIik7CisKKyAgICAvLyBTZXR1cCBleHRlbnNpb24gaGVhZGVyLgorICAgIHVpbnQ4X3QgZXh0SGVhZGVyW10gPSB7MHgzYSwgMHgwMiwgMHg2ZCwgMHgwZCwgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDAxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgdGVzdFZlY3Rvci5TZXRFeHRIZWFkZXIoZXh0SGVhZGVyLCBzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4M2EsCisgICAgICAgICAgICAgICAgICAgICAgMHgwZiwgMHg2ZCwgMHgwZCwgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDMzLCAweDAxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDExCisgICAgICAgICAgICAgICAgICAgICB9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZChzVGVzdFBheWxvYWREZWZhdWx0LCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkpOworICAgIHRlc3RWZWN0b3IuU2V0UGF5bG9hZE9mZnNldCg2NCk7CisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9OT05FKTsKKworICAgIC8vIFBlcmZvcm0gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjJVZHBGdWxseUNvbXByZXNzZWQodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJFeHRlbnNpb24gSGVhZGVyIC0gSG9wLWJ5LUhvcCB3aXRoIFBhZE4yIGFuZCBVRFAiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0U2hvcnQpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkJyb2FkY2FzdCk7CisKKyAgICAvLyBTZXR1cCBJUHY2IGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwSGVhZGVyKDB4NjAwMDAwMDAsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDE2LCBJcDY6OmtQcm90b0hvcE9wdHMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkMDA6Y2FmZTpmYWNlOjEyMzQ6OmZmOmZlMDA6MDAwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmYwMzo6MSIpOworCisgICAgLy8gU2V0dXAgZXh0ZW5zaW9uIGhlYWRlci4KKyAgICB1aW50OF90IGV4dEhlYWRlcltdID0gezB4MTEsIDB4MDAsIDB4NmQsIDB4MDIsIDB4NjAsIDB4MTEsIDB4MDEsIDB4MDB9OworICAgIHRlc3RWZWN0b3IuU2V0RXh0SGVhZGVyKGV4dEhlYWRlciwgc2l6ZW9mKGV4dEhlYWRlcikpOworCisgICAgLy8gU2V0dXAgVURQIGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldFVEUEhlYWRlcig2MTYxNiwgNjE2MzEsIHNpemVvZihzVGVzdFBheWxvYWREZWZhdWx0KSArIDgsIDB4ZmFjZSk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4N2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTEsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgICAgMHg2ZCwgMHgwMiwgMHg2MCwgMHgxMSwgMHhmMywgMHgwZiwgMHhmYSwgMHhjZQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoNTYpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RJcEluSXBIb3BCeUhvcFBhZE4yVWRwU291cmNlRGVzdGluYXRpb25JbmxpbmUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJJUC1pbi1JUCB3aXRoIEhvcC1ieS1Ib3Agd2l0aCBQYWROMiBhbmQgVURQIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdFNob3J0KTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25Ccm9hZGNhc3QpOworCisgICAgLy8gU2V0dXAgSVB2NiBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRJcEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCkgKyA1NiwgSXA2OjprUHJvdG9Ib3BPcHRzLCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZDAwOmNhZmU6ZmFjZToxMjM0OjpmZjpmZTAwOjAwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OmZjIik7CisKKyAgICAvLyBTZXR1cCBleHRlbnNpb24gaGVhZGVyLgorICAgIHVpbnQ4X3QgZXh0SGVhZGVyW10gPSB7MHgyOSwgMHgwMCwgMHg2ZCwgMHgwMiwgMHgwMCwgMHgxMSwgMHgwMSwgMHgwMH07CisgICAgdGVzdFZlY3Rvci5TZXRFeHRIZWFkZXIoZXh0SGVhZGVyLCBzaXplb2YoZXh0SGVhZGVyKSk7CisKKyAgICAvLyBTZXR1cCBJUHY2IHR1bm5lbGVkIGhlYWRlci4KKyAgICB0ZXN0VmVjdG9yLlNldElwVHVubmVsZWRIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgSXA2OjprUHJvdG9VZHAsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQwMDpjYWZlOmZhY2U6MTIzNDo6ZmY6ZmUwMDowMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDU6OjEiKTsKKworICAgIC8vIFNldHVwIFVEUCBoZWFkZXIuCisgICAgdGVzdFZlY3Rvci5TZXRVRFBIZWFkZXIoNTY4MywgNTY4NCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgOCwgMHhiZWVmKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3ZSwgMHg3YSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmYywgMHhlMSwgMHgwNCwKKyAgICAgICAgICAgICAgICAgICAgICAweDZkLCAweDAyLCAweDAwLCAweDExLCAweGVlLCAweDdlLCAweDdhLCAweDA1LAorICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4MTYsIDB4MzMsIDB4MTYsIDB4MzQsCisgICAgICAgICAgICAgICAgICAgICAgMHhiZSwgMHhlZgorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoOTYpOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RJcEluSXBXaXRob3V0RXh0ZW5zaW9uSGVhZGVyKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSVAtaW4tSVAgd2l0aG91dCBleHRlbnNpb24gaGVhZGVyIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldHVwIElQdjYgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBIZWFkZXIoMHg2MDAwMDAwMCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpICsgNDAsIElwNjo6a1Byb3RvSXA2LCA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZmMDM6OjEiKTsKKworICAgIC8vIFNldHVwIElQdjYgdHVubmVsZWQgaGVhZGVyLgorICAgIHRlc3RWZWN0b3IuU2V0SXBUdW5uZWxlZEhlYWRlcigweDYwMDAwMDAwLCBzaXplb2Yoc1Rlc3RQYXlsb2FkRGVmYXVsdCksIElwNjo6a1Byb3RvSWNtcDYsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZTgwOjoyMDA6NWVlZjoxMDIyOjExMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmU4MDo6MjAwOjVlZWY6MTBhYTpiYmNjIik7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2UsIDB4M2EsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4NzksCisgICAgICAgICAgICAgICAgICAgICAgMHgzMywgMHgzYQorICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWQoc1Rlc3RQYXlsb2FkRGVmYXVsdCwgc2l6ZW9mKHNUZXN0UGF5bG9hZERlZmF1bHQpKTsKKyAgICB0ZXN0VmVjdG9yLlNldFBheWxvYWRPZmZzZXQoODApOworICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfTk9ORSk7CisKKyAgICAvLyBQZXJmb3JtIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3QodGVzdFZlY3RvciwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFcnJvck5vSXBoY0Rpc3BhdGNoKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiSW52YWxpZCBkaXNwYXRjaCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4NDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDZ9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUGVyZm9ybSBkZWNvbXByZXNzaW9uIHRlc3QuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCBmYWxzZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFcnJvclRydW5jYXRlZElwaGModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJUcnVuY2F0ZWQgTE9XUEFOX0lQSEMiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDAwfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JSZXNlcnZlZFZhbHVlRGVzdGluYXRpb24wMTAwKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiUmVzZXJ2ZWQgdmFsdWUgb2YgTS1EQUMtREFNIC0gMDEwMCIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4MzQsIDB4M0F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUGVyZm9ybSBkZWNvbXByZXNzaW9uIHRlc3QuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCBmYWxzZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFcnJvclJlc2VydmVkVmFsdWVEZXN0aW5hdGlvbjExMDEodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJSZXNlcnZlZCB2YWx1ZSBvZiBNLURBQy1EQU0gLSAxMTAxIik7CisKKyAgICAvLyBTZXR1cCBNQUMgYWRkcmVzc2VzLgorICAgIHRlc3RWZWN0b3IuU2V0TWFjU291cmNlKHNUZXN0TWFjU291cmNlRGVmYXVsdExvbmcpOworICAgIHRlc3RWZWN0b3IuU2V0TWFjRGVzdGluYXRpb24oc1Rlc3RNYWNEZXN0aW5hdGlvbkRlZmF1bHRMb25nKTsKKworICAgIC8vIFNldCBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgdWludDhfdCBpcGhjW10gPSB7MHg3YSwgMHgzRCwgMHgzQX07CisgICAgdGVzdFZlY3Rvci5TZXRJcGhjSGVhZGVyKGlwaGMsIHNpemVvZihpcGhjKSk7CisKKyAgICAvLyBTZXQgcGF5bG9hZCBhbmQgZXJyb3IuCisgICAgdGVzdFZlY3Rvci5TZXRFcnJvcihPVF9FUlJPUl9QQVJTRSk7CisKKyAgICAvLyBQZXJmb3JtIGRlY29tcHJlc3Npb24gdGVzdC4KKyAgICBUZXN0KHRlc3RWZWN0b3IsIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEVycm9yUmVzZXJ2ZWRWYWx1ZURlc3RpbmF0aW9uMTExMCh2b2lkKQoreworICAgIFRlc3RJcGhjVmVjdG9yIHRlc3RWZWN0b3IoIlJlc2VydmVkIHZhbHVlIG9mIE0tREFDLURBTSAtIDExMTAiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdhLCAweDNFLCAweDNBfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JSZXNlcnZlZFZhbHVlRGVzdGluYXRpb24xMTExKHZvaWQpCit7CisgICAgVGVzdElwaGNWZWN0b3IgdGVzdFZlY3RvcigiUmVzZXJ2ZWQgdmFsdWUgb2YgTS1EQUMtREFNIC0gMTExMSIpOworCisgICAgLy8gU2V0dXAgTUFDIGFkZHJlc3Nlcy4KKyAgICB0ZXN0VmVjdG9yLlNldE1hY1NvdXJjZShzVGVzdE1hY1NvdXJjZURlZmF1bHRMb25nKTsKKyAgICB0ZXN0VmVjdG9yLlNldE1hY0Rlc3RpbmF0aW9uKHNUZXN0TWFjRGVzdGluYXRpb25EZWZhdWx0TG9uZyk7CisKKyAgICAvLyBTZXQgTE9XUEFOX0lQSEMgaGVhZGVyLgorICAgIHVpbnQ4X3QgaXBoY1tdID0gezB4N2EsIDB4M0YsIDB4M0F9OworICAgIHRlc3RWZWN0b3IuU2V0SXBoY0hlYWRlcihpcGhjLCBzaXplb2YoaXBoYykpOworCisgICAgLy8gU2V0IHBheWxvYWQgYW5kIGVycm9yLgorICAgIHRlc3RWZWN0b3IuU2V0RXJyb3IoT1RfRVJST1JfUEFSU0UpOworCisgICAgLy8gUGVyZm9ybSBkZWNvbXByZXNzaW9uIHRlc3QuCisgICAgVGVzdCh0ZXN0VmVjdG9yLCBmYWxzZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RFcnJvclVua25vd25OaGModm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJVbmtub3duIHZhbHVlIG9mIExPV1BBTl9OSEMgSUQiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDMzLCAweDAwfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JSZXNlcnZlZE5oYzUodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJSZXNlcnZlZCB2YWx1ZSBvZiBMT1dQQU5fTkhDIEVJRCAtIDB4MDUiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDMzLCAweGVhfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBUZXN0RXJyb3JSZXNlcnZlZE5oYzYodm9pZCkKK3sKKyAgICBUZXN0SXBoY1ZlY3RvciB0ZXN0VmVjdG9yKCJSZXNlcnZlZCB2YWx1ZSBvZiBMT1dQQU5fTkhDIEVJRCAtIDB4MDYiKTsKKworICAgIC8vIFNldHVwIE1BQyBhZGRyZXNzZXMuCisgICAgdGVzdFZlY3Rvci5TZXRNYWNTb3VyY2Uoc1Rlc3RNYWNTb3VyY2VEZWZhdWx0TG9uZyk7CisgICAgdGVzdFZlY3Rvci5TZXRNYWNEZXN0aW5hdGlvbihzVGVzdE1hY0Rlc3RpbmF0aW9uRGVmYXVsdExvbmcpOworCisgICAgLy8gU2V0IExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICB1aW50OF90IGlwaGNbXSA9IHsweDdlLCAweDMzLCAweGVjfTsKKyAgICB0ZXN0VmVjdG9yLlNldElwaGNIZWFkZXIoaXBoYywgc2l6ZW9mKGlwaGMpKTsKKworICAgIC8vIFNldCBwYXlsb2FkIGFuZCBlcnJvci4KKyAgICB0ZXN0VmVjdG9yLlNldEVycm9yKE9UX0VSUk9SX1BBUlNFKTsKKworICAgIC8vIFBlcmZvcm0gZGVjb21wcmVzc2lvbiB0ZXN0LgorICAgIFRlc3QodGVzdFZlY3RvciwgZmFsc2UsIHRydWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBNYWluIHRlc3QuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgVGVzdExvd3BhbklwaGModm9pZCkKK3sKKyAgICBzSW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisKKyAgICBWZXJpZnlPclF1aXQoc0luc3RhbmNlICE9IE5VTEwsICJOVUxMIGluc3RhbmNlIik7CisKKyAgICBzSXA2ID0gJnNJbnN0YW5jZS0+bUlwNjsKKyAgICBzVGhyZWFkTmV0aWYgPSAmc0luc3RhbmNlLT5tVGhyZWFkTmV0aWY7CisgICAgc0xvd3BhbiA9ICZzVGhyZWFkTmV0aWYtPkdldExvd3BhbigpOworCisgICAgSW5pdCgpOworCisgICAgLy8gU3RhdGVsZXNzIHVuaWNhc3QgYWRkcmVzc2VzIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0RnVsbHlDb21wcmVzc2FibGVMb25nQWRkcmVzc2VzKCk7CisgICAgVGVzdEZ1bGx5Q29tcHJlc3NhYmxlU2hvcnRBZGRyZXNzZXMoKTsKKyAgICBUZXN0RnVsbHlDb21wcmVzc2FibGVTaG9ydExvbmdBZGRyZXNzZXMoKTsKKyAgICBUZXN0RnVsbHlDb21wcmVzc2FibGVMb25nU2hvcnRBZGRyZXNzZXMoKTsKKyAgICBUZXN0U291cmNlVW5zcGVjaWZpZWRBZGRyZXNzKCk7CisgICAgVGVzdFNvdXJjZTEyOGJpdERlc3RpbmF0aW9uMTI4Yml0QWRkcmVzc2VzKCk7CisgICAgVGVzdFNvdXJjZTY0Yml0RGVzdGluYXRpb242NGJpdExvbmdBZGRyZXNzZXMoKTsKKyAgICBUZXN0U291cmNlNjRiaXREZXN0aW5hdGlvbjY0Yml0U2hvcnRBZGRyZXNzZXMoKTsKKyAgICBUZXN0U291cmNlMTZiaXREZXN0aW5hdGlvbjE2Yml0QWRkcmVzc2VzKCk7CisgICAgVGVzdFNvdXJjZUNvbXByZXNzZWREZXN0aW5hdGlvbjE2Yml0QWRkcmVzc2VzKCk7CisgICAgVGVzdFNvdXJjZUNvbXByZXNzZWREZXN0aW5hdGlvbjEyOGJpdEFkZHJlc3NlcygpOworCisgICAgLy8gU3RhdGVsZXNzIG11bHRpY2FzdCBhZGRyZXNzZXMgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIHRlc3RzLgorICAgIFRlc3RNdWx0aWNhc3QxMjhiaXRBZGRyZXNzKCk7CisgICAgVGVzdE11bHRpY2FzdDQ4Yml0QWRkcmVzcygpOworICAgIFRlc3RNdWx0aWNhc3QzMmJpdEFkZHJlc3MoKTsKKyAgICBUZXN0TXVsdGljYXN0OGJpdEFkZHJlc3MoKTsKKworICAgIC8vIFN0YXRlZnVsIHVuaWNhc3QgYWRkcmVzc2VzIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRDb250ZXh0MCgpOworICAgIFRlc3RTdGF0ZWZ1bFNvdXJjZTY0Yml0RGVzdGluYXRpb242NGJpdENvbnRleHQwSWZDb250ZXh0SW5MaW5lKCk7CisgICAgVGVzdFN0YXRlZnVsU291cmNlMTZiaXREZXN0aW5hdGlvbjE2Yml0Q29udGV4dDAoKTsKKyAgICBUZXN0U3RhdGVmdWxDb21wcmVzc2FibGVMb25nQWRkcmVzc2VzQ29udGV4dDAoKTsKKyAgICBUZXN0U3RhdGVmdWxDb21wcmVzc2FibGVTaG9ydEFkZHJlc3Nlc0NvbnRleHQwKCk7CisgICAgVGVzdFN0YXRlZnVsQ29tcHJlc3NhYmxlTG9uZ1Nob3J0QWRkcmVzc2VzQ29udGV4dDAoKTsKKyAgICBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uMTI4Yml0Q29udGV4dDEoKTsKKyAgICBUZXN0U3RhdGVmdWxTb3VyY2U2NGJpdERlc3RpbmF0aW9uNjRiaXRDb250ZXh0MSgpOworICAgIFRlc3RTdGF0ZWZ1bFNvdXJjZURlc3RpbmF0aW9uSW5saW5lQ29udGV4dDJDSURGYWxzZSgpOworCisgICAgLy8gU3RhdGVmdWwgbXVsdGljYXN0IGFkZHJlc3NlcyBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdFN0YXRlZnVsTXVsdGljYXN0RGVzdGluYXRpb240OGJpdENvbnRleHQwKCk7CisKKyAgICAvLyBUcmFmZmljIENsYXNzIGFuZCBGbG93IExhYmVsIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0VHJhZmZpY0NsYXNzRmxvd0xhYmVsM0J5dGVzKCk7CisgICAgVGVzdFRyYWZmaWNDbGFzc0Zsb3dMYWJlbDFCeXRlKCk7CisgICAgVGVzdFRyYWZmaWNDbGFzc0Zsb3dMYWJlbDFCeXRlRWNuT25seSgpOworICAgIFRlc3RUcmFmZmljQ2xhc3NGbG93TGFiZWxJbmxpbmUoKTsKKworICAgIC8vIEhvcCBMaW1pdCBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gdGVzdHMuCisgICAgVGVzdEhvcExpbWl0MSgpOworICAgIFRlc3RIb3BMaW1pdDI1NSgpOworICAgIFRlc3RIb3BMaW1pdElubGluZSgpOworCisgICAgLy8gVURQIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0VWRwU291cmNlRGVzdGluYXRpb25JbmxpbmUoKTsKKyAgICBUZXN0VWRwU291cmNlSW5saW5lRGVzdGluYXRpb244Yml0KCk7CisgICAgVGVzdFVkcFNvdXJjZThiaXREZXN0aW5hdGlvbklubGluZSgpOworICAgIFRlc3RVZHBGdWxseUNvbXByZXNzZWQoKTsKKyAgICBUZXN0VWRwRnVsbHlDb21wcmVzc2VkTXVsdGljYXN0KCk7CisgICAgVGVzdFVkcFdpdGhvdXROaGMoKTsKKworICAgIC8vIEV4dGVuc2lvbiBIZWFkZXJzIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BOb1BhZGRpbmcoKTsKKyAgICBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWQxKCk7CisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjIoKTsKKyAgICBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWROMygpOworICAgIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE40KCk7CisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjUoKTsKKyAgICBUZXN0RXh0ZW5zaW9uSGVhZGVySG9wQnlIb3BQYWRONigpOworICAgIFRlc3RFeHRlbnNpb25IZWFkZXJIb3BCeUhvcFBhZE43KCk7CisgICAgVGVzdEV4dGVuc2lvbkhlYWRlckhvcEJ5SG9wUGFkTjJVZHBGdWxseUNvbXByZXNzZWQoKTsKKworICAgIC8vIElQLWluLUlQIGNvbXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiB0ZXN0cy4KKyAgICBUZXN0SXBJbklwSG9wQnlIb3BQYWROMlVkcFNvdXJjZURlc3RpbmF0aW9uSW5saW5lKCk7CisgICAgVGVzdElwSW5JcFdpdGhvdXRFeHRlbnNpb25IZWFkZXIoKTsKKworICAgIC8vIEludmFsaWQgZnJhbWUgdG8gYmUgZGVjb21wcmVzc2VkLgorICAgIFRlc3RFcnJvck5vSXBoY0Rpc3BhdGNoKCk7CisgICAgVGVzdEVycm9yVHJ1bmNhdGVkSXBoYygpOworICAgIFRlc3RFcnJvclJlc2VydmVkVmFsdWVEZXN0aW5hdGlvbjAxMDAoKTsKKyAgICBUZXN0RXJyb3JSZXNlcnZlZFZhbHVlRGVzdGluYXRpb24xMTAxKCk7CisgICAgVGVzdEVycm9yUmVzZXJ2ZWRWYWx1ZURlc3RpbmF0aW9uMTExMCgpOworICAgIFRlc3RFcnJvclJlc2VydmVkVmFsdWVEZXN0aW5hdGlvbjExMTEoKTsKKyAgICBUZXN0RXJyb3JVbmtub3duTmhjKCk7CisgICAgVGVzdEVycm9yUmVzZXJ2ZWROaGM1KCk7CisgICAgVGVzdEVycm9yUmVzZXJ2ZWROaGM2KCk7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKHNJbnN0YW5jZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBUZXN0TG93cGFuSXBoYygpOworCisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X2xvd3Bhbi5ocHAgYi90ZXN0cy91bml0L3Rlc3RfbG93cGFuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2NlYjVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X2xvd3Bhbi5ocHAKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVEVTVF9MT1dQQU5fSFBQCisjZGVmaW5lIFRFU1RfTE9XUEFOX0hQUAorCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJtYWMvbWFjLmhwcCIKKyNpbmNsdWRlICJuZXQvaXA2X2hlYWRlcnMuaHBwIgorI2luY2x1ZGUgInRocmVhZC9sb3dwYW4uaHBwIgorI2luY2x1ZGUgInRocmVhZC90aHJlYWRfbmV0aWYuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RkaW50LmgiCisKK25hbWVzcGFjZSBvdCB7CisKK2NsYXNzIFRlc3RJcGhjVmVjdG9yCit7CitwdWJsaWM6CisgICAgZW51bQorICAgIHsKKyAgICAgICAga0NvbnRleHRVbnVzZWQgPSAyNTUsCisgICAgICAgIGtQYXlsb2FkTWF4TGVuZ3RoID0gNTEyCisgICAgfTsKKworICAgIHN0cnVjdCBQYXlsb2FkCisgICAgeworICAgICAgICB1aW50OF90IG1EYXRhW2tQYXlsb2FkTWF4TGVuZ3RoXTsKKyAgICAgICAgdWludDE2X3QgbUxlbmd0aDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhlIG9iamVjdC4KKyAgICAgKgorICAgICAqLworICAgIFRlc3RJcGhjVmVjdG9yKGNvbnN0IGNoYXIgKmFUZXN0TmFtZSkgeworICAgICAgICBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CisgICAgICAgIG1UZXN0TmFtZSA9IGFUZXN0TmFtZTsKKyAgICAgICAgbVNyY0NvbnRleHQubUNvbnRleHRJZCA9IGtDb250ZXh0VW51c2VkOworICAgICAgICBtRHN0Q29udGV4dC5tQ29udGV4dElkID0ga0NvbnRleHRVbnVzZWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyBsb25nIE1BQyBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhQWRkcmVzcyBQb2ludGVyIHRvIHRoZSBsb25nIE1BQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYWNTb3VyY2UoY29uc3QgdWludDhfdCAqYUFkZHJlc3MpIHsKKyAgICAgICAgbU1hY1NvdXJjZS5tTGVuZ3RoID0gT1RfRVhUX0FERFJFU1NfU0laRTsKKyAgICAgICAgbWVtY3B5KCZtTWFjU291cmNlLm1FeHRBZGRyZXNzLCBhQWRkcmVzcywgbU1hY1NvdXJjZS5tTGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHNob3J0IE1BQyBzb3VyY2UgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhQWRkcmVzcyBTaG9ydCBNQUMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0TWFjU291cmNlKHVpbnQxNl90IGFBZGRyZXNzKSB7CisgICAgICAgIG1NYWNTb3VyY2UubUxlbmd0aCA9IDI7CisgICAgICAgIG1NYWNTb3VyY2UubVNob3J0QWRkcmVzcyA9IGFBZGRyZXNzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgbG9uZyBNQUMgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhQWRkcmVzcyBQb2ludGVyIHRvIHRoZSBsb25nIE1BQyBhZGRyZXNzLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRNYWNEZXN0aW5hdGlvbihjb25zdCB1aW50OF90ICphQWRkcmVzcykgeworICAgICAgICBtTWFjRGVzdGluYXRpb24ubUxlbmd0aCA9IE9UX0VYVF9BRERSRVNTX1NJWkU7CisgICAgICAgIG1lbWNweSgmbU1hY0Rlc3RpbmF0aW9uLm1FeHRBZGRyZXNzLCBhQWRkcmVzcywgbU1hY0Rlc3RpbmF0aW9uLm1MZW5ndGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgc2hvcnQgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYUFkZHJlc3MgU2hvcnQgTUFDIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldE1hY0Rlc3RpbmF0aW9uKHVpbnQxNl90IGFBZGRyZXNzKSB7CisgICAgICAgIG1NYWNEZXN0aW5hdGlvbi5tTGVuZ3RoID0gMjsKKyAgICAgICAgbU1hY0Rlc3RpbmF0aW9uLm1TaG9ydEFkZHJlc3MgPSBhQWRkcmVzczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBJUHY2IEhlYWRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhVmVyc2lvbkNsYXNzRmxvdyBWYWx1ZSBvZiB0aGUgVmVyc2lvbiwgVHJhZmZpYyBjbGFzcyBhbmQgRmxvdyBjb250cm9sIGZpZWxkcy4KKyAgICAgKiBAcGFyYW0gYVBheWxvYWRMZW5ndGggICAgVmFsdWUgb2YgdGhlIHBheWxvYWQgbGVuZ3RoIGZpZWxkLgorICAgICAqIEBwYXJhbSBhTmV4dEhlYWRlciAgICAgICBWYWx1ZSBvZiB0aGUgbmV4dCBoZWFkZXIgZmllbGQuCisgICAgICogQHBhcmFtIGFIb3BMaW1pdCAgICAgICAgIFZhbHVlIG9mIHRoZSBob3AgbGltaXQgZmllbGQuCisgICAgICogQHBhcmFtIGFTb3VyY2UgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRzIElQdjYgc291cmNlIGFkZHJlc3MuCisgICAgICogQHBhcmFtIGFEZXN0aW5hdGlvbiAgICAgIFN0cmluZyByZXByZXNlbnRzIElQdjYgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SXBIZWFkZXIodWludDMyX3QgYVZlcnNpb25DbGFzc0Zsb3csIHVpbnQxNl90IGFQYXlsb2FkTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgSXA2OjpJcFByb3RvIGFOZXh0SGVhZGVyLCB1aW50OF90IGFIb3BMaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFTb3VyY2UsIGNvbnN0IGNoYXIgKmFEZXN0aW5hdGlvbikgeworICAgICAgICBtSXBIZWFkZXIuSW5pdChhVmVyc2lvbkNsYXNzRmxvdyk7CisgICAgICAgIG1JcEhlYWRlci5TZXRQYXlsb2FkTGVuZ3RoKGFQYXlsb2FkTGVuZ3RoKTsKKyAgICAgICAgbUlwSGVhZGVyLlNldE5leHRIZWFkZXIoYU5leHRIZWFkZXIpOworICAgICAgICBtSXBIZWFkZXIuU2V0SG9wTGltaXQoYUhvcExpbWl0KTsKKyAgICAgICAgbUlwSGVhZGVyLkdldFNvdXJjZSgpLkZyb21TdHJpbmcoYVNvdXJjZSk7CisgICAgICAgIG1JcEhlYWRlci5HZXREZXN0aW5hdGlvbigpLkZyb21TdHJpbmcoYURlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBJUHY2IEVuY2Fwc3VsYXRlZCBIZWFkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYVZlcnNpb25DbGFzc0Zsb3cgVmFsdWUgb2YgdGhlIFZlcnNpb24sIFRyYWZmaWMgY2xhc3MgYW5kIEZsb3cgY29udHJvbCBmaWVsZHMuCisgICAgICogQHBhcmFtIGFQYXlsb2FkTGVuZ3RoICAgIFZhbHVlIG9mIHRoZSBwYXlsb2FkIGxlbmd0aCBmaWVsZC4KKyAgICAgKiBAcGFyYW0gYU5leHRIZWFkZXIgICAgICAgVmFsdWUgb2YgdGhlIG5leHQgaGVhZGVyIGZpZWxkLgorICAgICAqIEBwYXJhbSBhSG9wTGltaXQgICAgICAgICBWYWx1ZSBvZiB0aGUgaG9wIGxpbWl0IGZpZWxkLgorICAgICAqIEBwYXJhbSBhU291cmNlICAgICAgICAgICBTdHJpbmcgcmVwcmVzZW50cyBJUHY2IHNvdXJjZSBhZGRyZXNzLgorICAgICAqIEBwYXJhbSBhRGVzdGluYXRpb24gICAgICBTdHJpbmcgcmVwcmVzZW50cyBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldElwVHVubmVsZWRIZWFkZXIodWludDMyX3QgYVZlcnNpb25DbGFzc0Zsb3csIHVpbnQxNl90IGFQYXlsb2FkTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJcDY6OklwUHJvdG8gYU5leHRIZWFkZXIsIHVpbnQ4X3QgYUhvcExpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphU291cmNlLCBjb25zdCBjaGFyICphRGVzdGluYXRpb24pIHsKKyAgICAgICAgbUlwVHVubmVsZWRIZWFkZXIuSW5pdChhVmVyc2lvbkNsYXNzRmxvdyk7CisgICAgICAgIG1JcFR1bm5lbGVkSGVhZGVyLlNldFBheWxvYWRMZW5ndGgoYVBheWxvYWRMZW5ndGgpOworICAgICAgICBtSXBUdW5uZWxlZEhlYWRlci5TZXROZXh0SGVhZGVyKGFOZXh0SGVhZGVyKTsKKyAgICAgICAgbUlwVHVubmVsZWRIZWFkZXIuU2V0SG9wTGltaXQoYUhvcExpbWl0KTsKKyAgICAgICAgbUlwVHVubmVsZWRIZWFkZXIuR2V0U291cmNlKCkuRnJvbVN0cmluZyhhU291cmNlKTsKKyAgICAgICAgbUlwVHVubmVsZWRIZWFkZXIuR2V0RGVzdGluYXRpb24oKS5Gcm9tU3RyaW5nKGFEZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgSVB2NiBFeHRlbnNpb24gSGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtIGFFeHRIZWFkZXIgICAgICAgIFBvaW50ZXIgdG8gdGhlIGV4dGVuc2lvbiBoZWFkZXIgZGF0YS4KKyAgICAgKiBAcGFyYW0gYUV4dEhlYWRlckxlbmd0aCAgTGVuZ3RoIG9mIHRoZSBleHRlbnNpb24gaGVhZGVyIGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldEV4dEhlYWRlcihjb25zdCB1aW50OF90ICphRXh0SGVhZGVyLCB1aW50MTZfdCBhRXh0SGVhZGVyTGVuZ3RoKSB7CisgICAgICAgIG1lbWNweShtRXh0SGVhZGVyLm1EYXRhLCBhRXh0SGVhZGVyLCBhRXh0SGVhZGVyTGVuZ3RoKTsKKyAgICAgICAgbUV4dEhlYWRlci5tTGVuZ3RoID0gYUV4dEhlYWRlckxlbmd0aDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBVRFAgSGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtIGFTb3VyY2UgICAgICAgVmFsdWUgb2YgdGhlIHNvdXJjZSBwb3J0LgorICAgICAqIEBwYXJhbSBhRGVzdGluYXRpb24gIFZhbHVlIG9mIHRoZSBkZXN0aW5hdGlvbiBwb3J0LgorICAgICAqIEBwYXJhbSBhTGVuZ3RoICAgICAgIFZhbHVlIG9mIHRoZSBsZW5ndGggZmllbGQuCisgICAgICogQHBhcmFtIGFDaGVja3N1bSAgICAgVmFsdWUgb2YgdGhlIGNoZWNrc3VtIGZpZWxkLgorICAgICAqCisgICAgICovCisgICAgdm9pZCBTZXRVRFBIZWFkZXIodWludDE2X3QgYVNvdXJjZSwgdWludDE2X3QgYURlc3RpbmF0aW9uLCB1aW50MTZfdCBhTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFDaGVja3N1bSkgeworICAgICAgICBtVWRwSGVhZGVyLlNldFNvdXJjZVBvcnQoYVNvdXJjZSk7CisgICAgICAgIG1VZHBIZWFkZXIuU2V0RGVzdGluYXRpb25Qb3J0KGFEZXN0aW5hdGlvbik7CisgICAgICAgIG1VZHBIZWFkZXIuU2V0TGVuZ3RoKGFMZW5ndGgpOworICAgICAgICBtVWRwSGVhZGVyLlNldENoZWNrc3VtKGFDaGVja3N1bSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgTE9XUEFOX0lQSEMgSGVhZGVyLgorICAgICAqCisgICAgICogQHBhcmFtIGFJcGhjICAgICAgICBQb2ludGVyIHRvIHRoZSBMT1dQQU5fSVBIQyBoZWFkZXIuCisgICAgICogQHBhcmFtIGFJcGhjTGVuZ3RoICBMZW5ndGggb2YgdGhlIExPV1BBTl9JUEhDIGhlYWRlci4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0SXBoY0hlYWRlcihjb25zdCB1aW50OF90ICphSXBoYywgdWludDE2X3QgYUlwaGNMZW5ndGgpIHsKKyAgICAgICAgbWVtY3B5KG1JcGhjSGVhZGVyLm1EYXRhLCBhSXBoYywgYUlwaGNMZW5ndGgpOworICAgICAgICBtSXBoY0hlYWRlci5tTGVuZ3RoID0gYUlwaGNMZW5ndGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZXhwZWN0IHJlc3VsdCBvZiB0aGUgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIHByb2NlZHVyZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhRXJyb3IgIEV4cGVjdGVkIHJlc3VsdC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0RXJyb3Iob3RFcnJvciBhRXJyb3IpIHsgbUVycm9yID0gYUVycm9yOyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBJUHY2IFBheWxvYWQgKHVuY29tcHJlc3NlZCBkYXRhKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhUGF5bG9hZCAgUG9pbnRlciB0byB0aGUgcGF5bG9hZCBkYXRhLgorICAgICAqIEBwYXJhbSBhTGVuZ3RoICAgTGVuZ3RoIG9mIHRoZSBwYXlsb2FkIGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIFNldFBheWxvYWQoY29uc3QgdWludDhfdCAqYVBheWxvYWQsIHVpbnQxNl90IGFMZW5ndGgpIHsKKyAgICAgICAgbWVtY3B5KG1QYXlsb2FkLm1EYXRhLCBhUGF5bG9hZCwgYUxlbmd0aCk7CisgICAgICAgIG1QYXlsb2FkLm1MZW5ndGggPSBhTGVuZ3RoOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIElQdjYgaGVhZGVyIHRvIHRoZSB1bmNvbXByZXNzZWQKKyAgICAgKiBwYXlsb2FkLgorICAgICAqCisgICAgICogQHBhcmFtIGFQYXlsb2FkT2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgSVB2NiBoZWFkZXIgdG8gdGhlIHVuY29tcHJlc3NlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC4KKyAgICAgKgorICAgICAqLworICAgIHZvaWQgU2V0UGF5bG9hZE9mZnNldCh1aW50MTZfdCBhUGF5bG9hZE9mZnNldCkgeyBtUGF5bG9hZE9mZnNldCA9IGFQYXlsb2FkT2Zmc2V0OyB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGNvbXByZXNzZWQgTE9XUEFOX0lQSEMgZnJhbWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgY29tcHJlc3NlZCBzdHJlYW0uCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdldENvbXByZXNzZWRTdHJlYW0odWludDhfdCAqYUlwaGMsIHVpbnQxNl90ICZhSXBoY0xlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIG1lc3NhZ2Ugb2JqZWN0IHdpdGggdGhlIHVuY29tcHJlc3NlZCBJUHY2IHBhY2tldC4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIG9iamVjdCB3aXRoIHRoZSB1bmNvbXByZXNzZWQgSVB2NiBwYWNrZXQuCisgICAgICoKKyAgICAgKi8KKyAgICB2b2lkIEdldFVuY29tcHJlc3NlZFN0cmVhbShNZXNzYWdlICZhTWVzc2FnZSk7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGRhdGEgd2l0aCB0aGUgdW5jb21wcmVzc2VkIElQdjYgcGFja2V0LgorICAgICAqCisgICAgICogQHJldHVybnMgVGhlIGRhdGEgd2l0aCB0aGUgdW5jb21wcmVzc2VkIElQdjYgcGFja2V0LgorICAgICAqCisgICAgICovCisgICAgdm9pZCBHZXRVbmNvbXByZXNzZWRTdHJlYW0odWludDhfdCAqYUlwNiwgdWludDE2X3QgJmFJcDZMZW5ndGgpOworCisgICAgLyoqCisgICAgICogVGhpcyBmaWVsZHMgcmVwcmVzZW50IHVuY29tcHJlc3NlZCBJUHY2IHBhY2tldC4KKyAgICAgKgorICAgICAqLworICAgIE1hYzo6QWRkcmVzcyAgIG1NYWNTb3VyY2U7CisgICAgTWFjOjpBZGRyZXNzICAgbU1hY0Rlc3RpbmF0aW9uOworICAgIElwNjo6SGVhZGVyICAgIG1JcEhlYWRlcjsKKyAgICBQYXlsb2FkICAgICAgICBtRXh0SGVhZGVyOworICAgIElwNjo6SGVhZGVyICAgIG1JcFR1bm5lbGVkSGVhZGVyOworICAgIElwNjo6VWRwSGVhZGVyIG1VZHBIZWFkZXI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZpZWxkcyByZXByZXNlbnQgY29tcHJlc3NlZCBJUHY2IHBhY2tldC4KKyAgICAgKgorICAgICAqLworICAgIFBheWxvYWQgICAgICAgICAgIG1JcGhjSGVhZGVyOworICAgIHVpbnQxNl90ICAgICAgICAgIG1QYXlsb2FkT2Zmc2V0OworICAgIExvd3Bhbjo6Q29udGV4dCAgIG1TcmNDb250ZXh0OworICAgIExvd3Bhbjo6Q29udGV4dCAgIG1Ec3RDb250ZXh0OworCisgICAgLyoqCisgICAgICogR2VuZXJhbCBwdXJwb3NlIGZpZWxkcy4KKyAgICAgKgorICAgICAqLworICAgIFBheWxvYWQgICAgICAgICAgIG1QYXlsb2FkOworICAgIG90RXJyb3IgICAgICAgbUVycm9yOworICAgIGNvbnN0IGNoYXIgICAgICAgKm1UZXN0TmFtZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBvdAorCisjZW5kaWYgLy8gVEVTVF9MT1dQQU5fSFBQCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfbWFjX2ZyYW1lLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9tYWNfZnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYmQ3NGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfbWFjX2ZyYW1lLmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgIm1hYy9tYWNfZnJhbWUuaHBwIgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworbmFtZXNwYWNlIG90IHsKKwordm9pZCBUZXN0TWFjSGVhZGVyKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdAorICAgIHsKKyAgICAgICAgdWludDE2X3QgZmNmOworICAgICAgICB1aW50OF90IHNlY0N0bDsKKyAgICAgICAgdWludDhfdCBoZWFkZXJMZW5ndGg7CisgICAgfSB0ZXN0c1tdID0KKyAgICB7CisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJOb25lIHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJOb25lLCAwLCAzIH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJOb25lIHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCwgMCwgNyB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyTm9uZSB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyRXh0LCAwLCAxMyB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkck5vbmUsIDAsIDcgfSwKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkckV4dCB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyTm9uZSwgMCwgMTMgfSwKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCwgMCwgMTEgfSwKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJFeHQsIDAsIDE3IH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0LCAwLCAxNyB9LAorICAgICAgICB7IE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyRXh0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJFeHQsIDAsIDIzIH0sCisKKyAgICAgICAgeyBNYWM6OkZyYW1lOjprRmNmRHN0QWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlNyY0FkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uLCAwLCA5IH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJTaG9ydCB8IE1hYzo6RnJhbWU6OmtGY2ZTcmNBZGRyRXh0IHwgTWFjOjpGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24sIDAsIDE1IH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24sIDAsIDE1IH0sCisgICAgICAgIHsgTWFjOjpGcmFtZTo6a0ZjZkRzdEFkZHJFeHQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkckV4dCB8IE1hYzo6RnJhbWU6OmtGY2ZQYW5pZENvbXByZXNzaW9uLCAwLCAyMSB9LAorCisgICAgICAgIHsKKyAgICAgICAgICAgIE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24gfAorICAgICAgICAgICAgTWFjOjpGcmFtZTo6a0ZjZlNlY3VyaXR5RW5hYmxlZCwgTWFjOjpGcmFtZTo6a1NlY01pYzMyIHwgTWFjOjpGcmFtZTo6a0tleUlkTW9kZTEsIDE1CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIE1hYzo6RnJhbWU6OmtGY2ZEc3RBZGRyU2hvcnQgfCBNYWM6OkZyYW1lOjprRmNmU3JjQWRkclNob3J0IHwgTWFjOjpGcmFtZTo6a0ZjZlBhbmlkQ29tcHJlc3Npb24gfAorICAgICAgICAgICAgTWFjOjpGcmFtZTo6a0ZjZlNlY3VyaXR5RW5hYmxlZCwgTWFjOjpGcmFtZTo6a1NlY01pYzMyIHwgTWFjOjpGcmFtZTo6a0tleUlkTW9kZTIsIDE5CisgICAgICAgIH0sCisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgdWludDhfdCBwc2R1W01hYzo6RnJhbWU6OmtNVFVdOworICAgICAgICBNYWM6OkZyYW1lIGZyYW1lOworCisgICAgICAgIGZyYW1lLm1Qc2R1ID0gcHNkdTsKKworICAgICAgICBmcmFtZS5Jbml0TWFjSGVhZGVyKHRlc3RzW2ldLmZjZiwgdGVzdHNbaV0uc2VjQ3RsKTsKKyAgICAgICAgcHJpbnRmKCIlZFxuIiwgZnJhbWUuR2V0SGVhZGVyTGVuZ3RoKCkpOworICAgICAgICBWZXJpZnlPclF1aXQoZnJhbWUuR2V0SGVhZGVyTGVuZ3RoKCkgPT0gdGVzdHNbaV0uaGVhZGVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIk1hY0hlYWRlciB0ZXN0IGZhaWxlZFxuIik7CisgICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2Ugb3QKKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgb3Q6OlRlc3RNYWNIZWFkZXIoKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfbWVzc2FnZS5jcHAgYi90ZXN0cy91bml0L3Rlc3RfbWVzc2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2ZWFlMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9tZXNzYWdlLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisKKyNpbmNsdWRlICJvcGVudGhyZWFkLWluc3RhbmNlLmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKwordm9pZCBUZXN0TWVzc2FnZSh2b2lkKQoreworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlOworICAgIG90OjpNZXNzYWdlUG9vbCAqbWVzc2FnZVBvb2w7CisgICAgb3Q6Ok1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgdWludDhfdCB3cml0ZUJ1ZmZlclsxMDI0XTsKKyAgICB1aW50OF90IHJlYWRCdWZmZXJbMTAyNF07CisKKyAgICBpbnN0YW5jZSA9IHRlc3RJbml0SW5zdGFuY2UoKTsKKyAgICBWZXJpZnlPclF1aXQoaW5zdGFuY2UgIT0gTlVMTCwgIk51bGwgT3BlblRocmVhZCBpbnN0YW5jZVxuIik7CisKKyAgICBtZXNzYWdlUG9vbCA9ICZpbnN0YW5jZS0+bUlwNi5tTWVzc2FnZVBvb2w7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHdyaXRlQnVmZmVyKTsgaSsrKQorICAgIHsKKyAgICAgICAgd3JpdGVCdWZmZXJbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihyYW5kb20oKSk7CisgICAgfQorCisgICAgVmVyaWZ5T3JRdWl0KChtZXNzYWdlID0gbWVzc2FnZVBvb2wtPk5ldyhvdDo6TWVzc2FnZTo6a1R5cGVJcDYsIDApKSAhPSBOVUxMLAorICAgICAgICAgICAgICAgICAiTWVzc2FnZTo6TmV3IGZhaWxlZFxuIik7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlLT5TZXRMZW5ndGgoc2l6ZW9mKHdyaXRlQnVmZmVyKSksCisgICAgICAgICAgICAgICAgICAiTWVzc2FnZTo6U2V0TGVuZ3RoIGZhaWxlZFxuIik7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UtPldyaXRlKDAsIHNpemVvZih3cml0ZUJ1ZmZlciksIHdyaXRlQnVmZmVyKSA9PSBzaXplb2Yod3JpdGVCdWZmZXIpLAorICAgICAgICAgICAgICAgICAiTWVzc2FnZTo6V3JpdGUgZmFpbGVkXG4iKTsKKyAgICBWZXJpZnlPclF1aXQobWVzc2FnZS0+UmVhZCgwLCBzaXplb2YocmVhZEJ1ZmZlciksIHJlYWRCdWZmZXIpID09IHNpemVvZihyZWFkQnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgIk1lc3NhZ2U6OlJlYWQgZmFpbGVkXG4iKTsKKyAgICBWZXJpZnlPclF1aXQobWVtY21wKHdyaXRlQnVmZmVyLCByZWFkQnVmZmVyLCBzaXplb2Yod3JpdGVCdWZmZXIpKSA9PSAwLAorICAgICAgICAgICAgICAgICAiTWVzc2FnZSBjb21wYXJlIGZhaWxlZFxuIik7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UtPkdldExlbmd0aCgpID09IDEwMjQsCisgICAgICAgICAgICAgICAgICJNZXNzYWdlOjpHZXRMZW5ndGggZmFpbGVkXG4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2UtPkZyZWUoKSwKKyAgICAgICAgICAgICAgICAgICJNZXNzYWdlOjpGcmVlIGZhaWxlZFxuIik7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKGluc3RhbmNlKTsKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdE1lc3NhZ2UoKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfbWVzc2FnZV9xdWV1ZS5jcHAgYi90ZXN0cy91bml0L3Rlc3RfbWVzc2FnZV9xdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0MWU5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaXQvdGVzdF9tZXNzYWdlX3F1ZXVlLmNwcApAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi9tZXNzYWdlLmhwcCIKKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisKKyNkZWZpbmUga051bVRlc3RNZXNzYWdlcyAgICAgIDUKKworc3RhdGljIG90SW5zdGFuY2UgKnNJbnN0YW5jZTsKK3N0YXRpYyBvdDo6TWVzc2FnZVBvb2wgKnNNZXNzYWdlUG9vbDsKKworLy8gVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBxdWV1ZSB0byBtYXRjaCB0aGUgcGFzc2VkIGluIG1lc3NhZ2VzCit2b2lkIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQob3Q6Ok1lc3NhZ2VRdWV1ZSAmYU1lc3NhZ2VRdWV1ZSwgaW50IGFFeHBlY3RlZExlbmd0aCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBvdDo6TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBvdDo6TWVzc2FnZSAqbXNnQXJnOworCisgICAgdmFfc3RhcnQoYXJncywgYUV4cGVjdGVkTGVuZ3RoKTsKKworICAgIGlmIChhRXhwZWN0ZWRMZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIG1lc3NhZ2UgPSBhTWVzc2FnZVF1ZXVlLkdldEhlYWQoKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgPT0gTlVMTCwgIk1lc3NhZ2VRdWV1ZSBpcyBub3QgZW1wdHkgd2hlbiBleHBlY3RlZCBsZW4gaXMgemVyby5cbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKG1lc3NhZ2UgPSBhTWVzc2FnZVF1ZXVlLkdldEhlYWQoKTsgbWVzc2FnZSAhPSBOVUxMOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoICE9IDAsICJNZXNzYWdlUXVldWUgY29udGFpbnMgbW9yZSBlbnRyaWVzIHRoYW4gZXhwZWN0ZWRcbiIpOworCisgICAgICAgICAgICBtc2dBcmcgPSB2YV9hcmcoYXJncywgb3Q6Ok1lc3NhZ2UgKik7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobXNnQXJnID09IG1lc3NhZ2UsICJNZXNzYWdlUXVldWUgY29udGVudCBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIGV4cGVjdGVkLlxuIik7CisKKyAgICAgICAgICAgIGFFeHBlY3RlZExlbmd0aC0tOworICAgICAgICB9CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCA9PSAwLCAiTWVzc2FnZVF1ZXVlIGNvbnRhaW5zIGxlc3MgZW50cmllcyB0aGFuIGV4cGVjdGVkXG4iKTsKKyAgICB9CisKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgVGVzdE1lc3NhZ2VRdWV1ZSh2b2lkKQoreworICAgIG90OjpNZXNzYWdlUXVldWUgbWVzc2FnZVF1ZXVlOworICAgIG90OjpNZXNzYWdlICptc2dba051bVRlc3RNZXNzYWdlc107CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICB1aW50MTZfdCBtc2dDb3VudCwgYnVmZmVyQ291bnQ7CisKKyAgICBzSW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgVmVyaWZ5T3JRdWl0KHNJbnN0YW5jZSAhPSBOVUxMLCAiTnVsbCBpbnN0YW5jZSIpOworCisgICAgc01lc3NhZ2VQb29sID0gJnNJbnN0YW5jZS0+bUlwNi5tTWVzc2FnZVBvb2w7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1UZXN0TWVzc2FnZXM7IGkrKykKKyAgICB7CisgICAgICAgIG1zZ1tpXSA9IHNNZXNzYWdlUG9vbC0+TmV3KG90OjpNZXNzYWdlOjprVHlwZUlwNiwgMCk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtc2dbaV0gIT0gTlVMTCwgIk1lc3NhZ2U6Ok5ldyBmYWlsZWRcbiIpOworICAgIH0KKworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAwKTsKKworICAgIC8vIEVucXVldWUgMSBtZXNzYWdlIGFuZCByZW1vdmUgaXQKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMF0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDEsIG1zZ1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnWzBdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAwKTsKKworICAgIC8vIEVucXVldWUgNSBtZXNzYWdlcworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ1swXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMSwgbXNnWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMV0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDIsIG1zZ1swXSwgbXNnWzFdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMl0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDMsIG1zZ1swXSwgbXNnWzFdLCBtc2dbMl0pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ1szXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgNCwgbXNnWzBdLCBtc2dbMV0sIG1zZ1syXSwgbXNnWzNdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbNF0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDUsIG1zZ1swXSwgbXNnWzFdLCBtc2dbMl0sIG1zZ1szXSwgbXNnWzRdKTsKKworICAgIC8vIENoZWNrIHRoZSBHZXRJbmZvKCkKKyAgICBtZXNzYWdlUXVldWUuR2V0SW5mbyhtc2dDb3VudCwgYnVmZmVyQ291bnQpOworICAgIFZlcmlmeU9yUXVpdChtc2dDb3VudCA9PSA1LCAiTWVzc2FnZVF1ZXVlOjpHZXRJbmZvKCkgZmFpbGVkLlxuIik7CisKKyAgICAvLyBSZW1vdmUgZnJvbSBoZWFkCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnWzBdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCA0LCBtc2dbMV0sIG1zZ1syXSwgbXNnWzNdLCBtc2dbNF0pOworCisgICAgLy8gUmVtb3ZlIGEgbWVzc2FnZSBpbiBtaWRkbGUKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dbM10pLCAiTWVzc2FnZVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDMsIG1zZ1sxXSwgbXNnWzJdLCBtc2dbNF0pOworCisgICAgLy8gUmVtb3ZlIGZyb20gdGFpbAorICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ1s0XSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMiwgbXNnWzFdLCBtc2dbMl0pOworCisgICAgLy8gQWRkIGFmdGVyIHJlbW92ZXMKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMF0pLCAiTWVzc2FnZVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDMsIG1zZ1sxXSwgbXNnWzJdLCBtc2dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ1szXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgNCwgbXNnWzFdLCBtc2dbMl0sIG1zZ1swXSwgbXNnWzNdKTsKKworICAgIC8vIFJlbW92ZSBhbGwgbWVzc2FnZXMKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dbMl0pLCAiTWVzc2FnZVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDMsIG1zZ1sxXSwgbXNnWzBdLCBtc2dbM10pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ1sxXSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMiwgbXNnWzBdLCBtc2dbM10pOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkRlcXVldWUoKm1zZ1szXSksICJNZXNzYWdlUXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMSwgbXNnWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dbMF0pLCAiTWVzc2FnZVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDApOworCisgICAgLy8gQ2hlY2sgdGhlIGZhaWx1cmUgY2FzZXM6IEVucXVldWUgYW4gYWxyZWFkeSBxdWV1ZWQgbWVzc2FnZSBvciBkZXF1ZXVlIGEgbWVzc2FnZSBub3QgaW4gdGhlIHF1ZXVlLgorICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZVF1ZXVlLkVucXVldWUoKm1zZ1swXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMSwgbXNnWzBdKTsKKyAgICBlcnJvciA9IG1lc3NhZ2VRdWV1ZS5FbnF1ZXVlKCptc2dbMF0pOworICAgIFZlcmlmeU9yUXVpdChlcnJvciA9PSBPVF9FUlJPUl9BTFJFQURZLCAiRW5xdWV1aW5nIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UgZGlkIG5vdCBmYWlsIGFzIGV4cGVjdGVkLlxuIik7CisgICAgZXJyb3IgPSBtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnWzFdKTsKKyAgICBWZXJpZnlPclF1aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAiRGVxdWV1aW5nIGEgbWVzc2FnZSBub3QgaW4gdGhlIHF1ZXVlIGRpZCBub3QgZmFpbCBhcyBleHBlY3RlZC5cbiIpOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShzSW5zdGFuY2UpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIHF1ZXVlIHRvIG1hdGNoIHRoZSBwYXNzZWQgaW4gbWVzc2FnZXMKK3ZvaWQgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkob3RNZXNzYWdlUXVldWUgKmFRdWV1ZSwgaW50IGFFeHBlY3RlZExlbmd0aCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBvdE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgb3RNZXNzYWdlICptc2dBcmc7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRXhwZWN0ZWRMZW5ndGgpOworCisgICAgaWYgKGFFeHBlY3RlZExlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgbWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0SGVhZChhUXVldWUpOworICAgICAgICBWZXJpZnlPclF1aXQobWVzc2FnZSA9PSBOVUxMLCAiTWVzc2FnZVF1ZXVlIGlzIG5vdCBlbXB0eSB3aGVuIGV4cGVjdGVkIGxlbiBpcyB6ZXJvLlxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAobWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0SGVhZChhUXVldWUpOworICAgICAgICAgICAgIG1lc3NhZ2UgIT0gTlVMTDsKKyAgICAgICAgICAgICBtZXNzYWdlID0gb3RNZXNzYWdlUXVldWVHZXROZXh0KGFRdWV1ZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCAhPSAwLCAiTWVzc2FnZVF1ZXVlIGNvbnRhaW5zIG1vcmUgZW50cmllcyB0aGFuIGV4cGVjdGVkXG4iKTsKKworICAgICAgICAgICAgbXNnQXJnID0gdmFfYXJnKGFyZ3MsIG90TWVzc2FnZSAqKTsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtc2dBcmcgPT0gbWVzc2FnZSwgIk1lc3NhZ2VRdWV1ZSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgZXhwZWN0ZWQuXG4iKTsKKworICAgICAgICAgICAgYUV4cGVjdGVkTGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoID09IDAsICJNZXNzYWdlUXVldWUgY29udGFpbnMgbGVzcyBlbnRyaWVzIHRoYW4gZXhwZWN0ZWRcbiIpOworICAgIH0KKworICAgIHZhX2VuZChhcmdzKTsKK30KKworLy8gVGhpcyB0ZXN0IGNoZWNrcyBhbGwgdGhlIE9wZW5UaHJlYWQgQyBBUElzIGZvciBgb3RNZXNzYWdlUXVldWVgCit2b2lkIFRlc3RNZXNzYWdlUXVldWVPdEFwaXModm9pZCkKK3sKKyAgICBvdE1lc3NhZ2UgKm1zZ1trTnVtVGVzdE1lc3NhZ2VzXTsKKyAgICBvdEVycm9yIGVycm9yOworICAgIG90TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBvdE1lc3NhZ2VRdWV1ZSBxdWV1ZSwgcXVldWUyOworCisgICAgc0luc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIFZlcmlmeU9yUXVpdChzSW5zdGFuY2UgIT0gTlVMTCwgIk51bGwgaW5zdGFuY2UiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVRlc3RNZXNzYWdlczsgaSsrKQorICAgIHsKKyAgICAgICAgbXNnW2ldID0gb3RJcDZOZXdNZXNzYWdlKHNJbnN0YW5jZSwgdHJ1ZSk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtc2dbaV0gIT0gTlVMTCwgIm90SXA2TmV3TWVzc2FnZSgpIGZhaWxlZC5cbiIpOworICAgIH0KKworICAgIG90TWVzc2FnZVF1ZXVlSW5pdCgmcXVldWUpOworICAgIG90TWVzc2FnZVF1ZXVlSW5pdCgmcXVldWUyKTsKKworICAgIC8vIENoZWNrIGFuIGVtcHR5IHF1ZXVlLgorICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMCk7CisKKyAgICAvLyBBZGQgbWVzc2FnZSB0byB0aGUgcXVldWUgYW5kIGNoZWNrIHRoZSBjb250ZW50CisgICAgU3VjY2Vzc09yUXVpdChvdE1lc3NhZ2VRdWV1ZUVucXVldWUoJnF1ZXVlLCBtc2dbMF0pLCAiRmFpbGVkIHRvIGVucXVldWUgYSBtZXNzYWdlIHRvIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlLCAxLCBtc2dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZxdWV1ZSwgbXNnWzFdKSwgIkZhaWxlZCB0byBlbnF1ZXVlIGEgbWVzc2FnZSB0byBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMiwgbXNnWzBdLCBtc2dbMV0pOworICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZxdWV1ZSwgbXNnWzJdKSwgIkZhaWxlZCB0byBlbnF1ZXVlIGEgbWVzc2FnZSB0byBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMywgbXNnWzBdLCBtc2dbMV0sIG1zZ1syXSk7CisgICAgU3VjY2Vzc09yUXVpdChvdE1lc3NhZ2VRdWV1ZUVucXVldWUoJnF1ZXVlLCBtc2dbM10pLCAiRmFpbGVkIHRvIGVucXVldWUgYSBtZXNzYWdlIHRvIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlLCA0LCBtc2dbMF0sIG1zZ1sxXSwgbXNnWzJdLCBtc2dbM10pOworCisgICAgLy8gUmVtb3ZlIGVsZW1lbnRzIGFuZCBjaGVjayB0aGUgY29udGVudAorICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZxdWV1ZSwgbXNnWzFdKSwgIkZhaWxlZCB0byBkZXF1ZXVlIGEgbWVzc2FnZSBmcm9tIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlLCAzLCBtc2dbMF0sIG1zZ1syXSwgbXNnWzNdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRGVxdWV1ZSgmcXVldWUsIG1zZ1swXSksICJGYWlsZWQgdG8gZGVxdWV1ZSBhIG1lc3NhZ2UgZnJvbSBvdE1lc3NhZ2VRdWV1ZS5cbiIpOworICAgIFZlcmlmeU1lc3NhZ2VRdWV1ZUNvbnRlbnRVc2luZ090QXBpKCZxdWV1ZSwgMiwgbXNnWzJdLCBtc2dbM10pOworICAgIFN1Y2Nlc3NPclF1aXQob3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZxdWV1ZSwgbXNnWzNdKSwgIkZhaWxlZCB0byBkZXF1ZXVlIGEgbWVzc2FnZSBmcm9tIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlLCAxLCBtc2dbMl0pOworCisgICAgLy8gQ2hlY2sgdGhlIGV4cGVjdGVkIGZhaWx1cmUgY2FzZXMgZm9yIHRoZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlOgorICAgIGVycm9yID0gb3RNZXNzYWdlUXVldWVFbnF1ZXVlKCZxdWV1ZSwgbXNnWzJdKTsKKyAgICBWZXJpZnlPclF1aXQoZXJyb3IgPT0gT1RfRVJST1JfQUxSRUFEWSwgIkVucXVldWluZyBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlIGRpZCBub3QgZmFpbCBhcyBleHBlY3RlZC5cbiIpOworICAgIGVycm9yID0gb3RNZXNzYWdlUXVldWVEZXF1ZXVlKCZxdWV1ZSwgbXNnWzBdKTsKKyAgICBWZXJpZnlPclF1aXQoZXJyb3IgPT0gT1RfRVJST1JfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAiRGVxdWV1aW5nIGEgbWVzc2FnZSBub3QgaW4gdGhlIHF1ZXVlIGRpZCBub3QgZmFpbCBhcyBleHBlY3RlZC5cbiIpOworCisgICAgLy8gQ2hlY2sgdGhlIGZhaWx1cmUgY2FzZXMgZm9yIG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgpCisgICAgbWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgmcXVldWUsIE5VTEwpOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlID09IE5VTEwsICJvdE1lc3NhZ2VRdWV1ZUdldE5leHQocXVldWUsIE5VTEwpIGRpZCBub3QgcmV0dXJuIE5VTEwuXG4iKTsKKyAgICBtZXNzYWdlID0gb3RNZXNzYWdlUXVldWVHZXROZXh0KCZxdWV1ZSwgbXNnWzFdKTsKKyAgICBWZXJpZnlPclF1aXQobWVzc2FnZSA9PSBOVUxMLCAib3RNZXNzYWdlUXVldWVHZXROZXh0KCkgZGlkIG5vdCByZXR1cm4gTlVMTCBmb3IgYSBtZXNzYWdlIG5vdCBpbiB0aGUgcXVldWUuXG4iKTsKKworICAgIC8vIENoZWNrIHRoZSBmYWlsdXJlIGNhc2Ugd2hlbiBhdHRlbXB0aW5nIHRvIGRvIG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgpIGJ1dCBwYXNzaW5nIGluIGEgd3JvbmcgcXVldWUgcG9pbnRlci4KKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRW5xdWV1ZSgmcXVldWUyLCBtc2dbMF0pLCAiRmFpbGVkIHRvIGVucXVldWUgYSBtZXNzYWdlIHRvIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlMiwgMSwgbXNnWzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KG90TWVzc2FnZVF1ZXVlRW5xdWV1ZSgmcXVldWUyLCBtc2dbMV0pLCAiRmFpbGVkIHRvIGVucXVldWUgYSBtZXNzYWdlIHRvIG90TWVzc2FnZVF1ZXVlLlxuIik7CisgICAgVmVyaWZ5TWVzc2FnZVF1ZXVlQ29udGVudFVzaW5nT3RBcGkoJnF1ZXVlMiwgMiwgbXNnWzBdLCBtc2dbMV0pOworCisgICAgbWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgmcXVldWUyLCBtc2dbMF0pOworICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlID09IG1zZ1sxXSwgIm90TWVzc2FnZVF1ZXVlR2V0TmV4dCgpIGZhaWxlZFxuIik7CisgICAgbWVzc2FnZSA9IG90TWVzc2FnZVF1ZXVlR2V0TmV4dCgmcXVldWUsIG1zZ1swXSk7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgPT0gTlVMTCwgIm90TWVzc2FnZVF1ZXVlR2V0TmV4dCgpIGRpZCBub3QgcmV0dXJuIE5VTEwgZm9yIG1lc3NhZ2Ugbm90IGluICB0aGUgcXVldWUuXG4iKTsKKworICAgIC8vIFJlbW92ZSBhbGwgZWxlbWVudCBhbmQgbWFrZSBzdXJlIHF1ZXVlIGlzIGVtcHR5CisgICAgU3VjY2Vzc09yUXVpdChvdE1lc3NhZ2VRdWV1ZURlcXVldWUoJnF1ZXVlLCBtc2dbMl0pLCAiRmFpbGVkIHRvIGRlcXVldWUgYSBtZXNzYWdlIGZyb20gb3RNZXNzYWdlUXVldWUuXG4iKTsKKyAgICBWZXJpZnlNZXNzYWdlUXVldWVDb250ZW50VXNpbmdPdEFwaSgmcXVldWUsIDApOworCisgICAgdGVzdEZyZWVJbnN0YW5jZShzSW5zdGFuY2UpOworfQorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBUZXN0TWVzc2FnZVF1ZXVlKCk7CisgICAgVGVzdE1lc3NhZ2VRdWV1ZU90QXBpcygpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9uY3BfYnVmZmVyLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF9uY3BfYnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTRjNGZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X25jcF9idWZmZXIuY3BwCkBAIC0wLDAgKzEsNzA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvb3BlbnRocmVhZC5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC1pbnN0YW5jZS5oIgorI2luY2x1ZGUgImNvbW1vbi9jb2RlX3V0aWxzLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAibmNwL25jcF9idWZmZXIuaHBwIgorCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorCituYW1lc3BhY2Ugb3QgeworCisvLyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHVuaXQtdGVzdCBmb3IgTmNwRnJhbWVCdWZmZXIgY2xhc3MuCisKK2VudW0KK3sKKyAgICBrVGVzdEJ1ZmZlclNpemUgPSAyNTAwLAorICAgIGtUZXN0SXRlcmF0aW9uQXR0ZW1wcyA9IDEwMDAwLAorICAgIGtUYWdBcnJheVNpemUgPSAxMDAwLAorfTsKKworLy8gIE1lc3NhZ2VzIHVzZWQgZm9yIGJ1aWxkaW5nIGZyYW1lcy4uLgorc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc09wZW5UaHJlYWRUZXh0W10gPSAiT3BlblRocmVhZCBSb2NrcyI7CitzdGF0aWMgY29uc3QgdWludDhfdCBzSGVsbG9UZXh0W10gICAgICA9ICJIZWxsbyB0aGVyZSEiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc01vdHRvVGV4dFtdICAgICAgPSAiVGhpbmsgZ29vZCB0aG91Z2h0cywgc2F5IGdvb2Qgd29yZHMsIGRvIGdvb2QgZGVlZHMhIjsKK3N0YXRpYyBjb25zdCB1aW50OF90IHNNeXN0ZXJ5VGV4dFtdICAgID0gIjQ4NzEoXFwpOnwoMyR9ezR8LzQvMiUxNChcXCkiOworCitzdGF0aWMgb3RJbnN0YW5jZSAqc0luc3RhbmNlOworc3RhdGljIE1lc3NhZ2VQb29sICpzTWVzc2FnZVBvb2w7CisKK3N0cnVjdCBDYWxsYmFja0NvbnRleHQKK3sKKyAgICB1aW50MzJfdCBtRnJhbWVBZGRlZENvdW50OyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHRpbWVzIEZyYW1lQWRkZWRDYWxsYmFjayBpcyBpbnZva2VkLgorICAgIHVpbnQzMl90IG1GcmFtZVJlbW92ZWRDb3VudDsgICAgICAgICAvLyBOdW1iZXIgb2YgdGltZXMgRnJhbWVSZW1vdmVkQ2FsbGJhY2sgaXMgaW52b2tlZC4KK307CisKK0NhbGxiYWNrQ29udGV4dCBzQ29udGV4dDsKKworTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIHNUYWdIaXN0b3J5QXJyYXlba1RhZ0FycmF5U2l6ZV07Cit1aW50MzJfdCBzVGFnSGlzdG9yeUhlYWQgPSAwOwordWludDMyX3Qgc1RhZ0hpc3RvcnlUYWlsID0gMDsKK05jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBzRXhwZWN0ZWRSZW1vdmVkVGFnID0gTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnOworCit2b2lkIENsZWFyVGFnSGlzdG9yeSh2b2lkKQoreworICAgIHNUYWdIaXN0b3J5SGVhZCA9IHNUYWdIaXN0b3J5VGFpbDsKK30KKwordm9pZCBBZGRUYWdUb0hpc3RvcnkoTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFUYWcpCit7CisgICAgc1RhZ0hpc3RvcnlBcnJheVtzVGFnSGlzdG9yeVRhaWxdID0gYVRhZzsKKworICAgIGlmICgrK3NUYWdIaXN0b3J5VGFpbCA9PSBrVGFnQXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgc1RhZ0hpc3RvcnlUYWlsID0gMDsKKyAgICB9CisKKyAgICBWZXJpZnlPclF1aXQoc1RhZ0hpc3RvcnlUYWlsICE9IHNUYWdIaXN0b3J5SGVhZCwgIlJhbiBvdXQgb2Ygc3BhY2UgaW4gYFRhZ0hpc3RvcnlBcnJheWAsIGluY3JlYXNlIGl0cyBzaXplLiIpOworfQorCit2b2lkIFZlcmlmeUFuZFJlbW92ZVRhZ0Zyb21IaXN0b3J5KE5jcEZyYW1lQnVmZmVyOjpGcmFtZVRhZyBhVGFnKQoreworICAgIFZlcmlmeU9yUXVpdChzVGFnSGlzdG9yeUhlYWQgIT0gc1RhZ0hpc3RvcnlUYWlsLCAiVGFnIGhpc3RvcnkgaXMgZW1wdHksIik7CisgICAgVmVyaWZ5T3JRdWl0KGFUYWcgPT0gc1RhZ0hpc3RvcnlBcnJheVtzVGFnSGlzdG9yeUhlYWRdLCAiUmVtb3ZlZCB0YWcgZG9lcyBub3QgbWF0Y2ggdGhlIGFkZGVkIG9uZSIpOworCisgICAgaWYgKCsrc1RhZ0hpc3RvcnlIZWFkID09IGtUYWdBcnJheVNpemUpCisgICAgeworICAgICAgICBzVGFnSGlzdG9yeUhlYWQgPSAwOworICAgIH0KKworICAgIGlmIChzRXhwZWN0ZWRSZW1vdmVkVGFnICE9IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdChzRXhwZWN0ZWRSZW1vdmVkVGFnID09IGFUYWcsICJSZW1vdmVkIHRhZyBkb2VzIG1hdGNoIHRoZSBwcmV2aW91cyBPdXRGcmFtZUdldFRhZygpIik7CisgICAgICAgIHNFeHBlY3RlZFJlbW92ZWRUYWcgPSBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWc7CisgICAgfQorfQorCit2b2lkIEZyYW1lQWRkZWRDYWxsYmFjayh2b2lkICphQ29udGV4dCwgTmNwRnJhbWVCdWZmZXI6OkZyYW1lVGFnIGFUYWcsIE5jcEZyYW1lQnVmZmVyICphTmNwQnVmZmVyKQoreworICAgIENhbGxiYWNrQ29udGV4dCAqY2FsbGJhY2tDb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxDYWxsYmFja0NvbnRleHQgKj4oYUNvbnRleHQpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIgIT0gTlVMTCwgIk51bGwgTmNwRnJhbWVCdWZmZXIgaW4gdGhlIGNhbGxiYWNrIik7CisgICAgVmVyaWZ5T3JRdWl0KGNhbGxiYWNrQ29udGV4dCAhPSBOVUxMLCAiTnVsbCBjb250ZXh0IGluIHRoZSBjYWxsYmFjayIpOworICAgIFZlcmlmeU9yUXVpdChhVGFnICE9IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZywgIkludmFsaWQgdGFnIGluIHRoZSBjYWxsYmFjayIpOworICAgIFZlcmlmeU9yUXVpdChhVGFnID09IGFOY3BCdWZmZXItPkluRnJhbWVHZXRMYXN0VGFnKCksICJJbkZyYW1lR2V0TGFzdFRhZygpIGRvZXMgbm90IG1hdGNoIHRoZSB0YWcgZnJvbSBjYWxsYmFjayIpOworICAgIEFkZFRhZ1RvSGlzdG9yeShhVGFnKTsKKworICAgIGNhbGxiYWNrQ29udGV4dC0+bUZyYW1lQWRkZWRDb3VudCsrOworfQorCit2b2lkIEZyYW1lUmVtb3ZlZENhbGxiYWNrKHZvaWQgKmFDb250ZXh0LCBOY3BGcmFtZUJ1ZmZlcjo6RnJhbWVUYWcgYVRhZywgTmNwRnJhbWVCdWZmZXIgKmFOY3BCdWZmZXIpCit7CisgICAgQ2FsbGJhY2tDb250ZXh0ICpjYWxsYmFja0NvbnRleHQgPSByZWludGVycHJldF9jYXN0PENhbGxiYWNrQ29udGV4dCAqPihhQ29udGV4dCk7CisKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlciAhPSBOVUxMLCAiTnVsbCBOY3BGcmFtZUJ1ZmZlciBpbiB0aGUgY2FsbGJhY2siKTsKKyAgICBWZXJpZnlPclF1aXQoY2FsbGJhY2tDb250ZXh0ICE9IE5VTEwsICJOdWxsIGNvbnRleHQgaW4gdGhlIGNhbGxiYWNrIik7CisgICAgVmVyaWZ5T3JRdWl0KGFUYWcgIT0gTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnLCAiSW52YWxpZCB0YWcgaW4gdGhlIGNhbGxiYWNrIik7CisgICAgVmVyaWZ5QW5kUmVtb3ZlVGFnRnJvbUhpc3RvcnkoYVRhZyk7CisKKyAgICBjYWxsYmFja0NvbnRleHQtPm1GcmFtZVJlbW92ZWRDb3VudCsrOworfQorCisvLyBEdW1wIHRoZSBidWZmZXIgY29udGVudCB0byBzY3JlZW4uCit2b2lkIER1bXBCdWZmZXIoY29uc3QgY2hhciAqYVRleHRNZXNzYWdlLCB1aW50OF90ICphQnVmZmVyLCB1aW50MTZfdCBhQnVmZmVyTGVuZ3RoKQoreworICAgIGVudW0KKyAgICB7CisgICAgICAgIGtCeXRlc1BlckxpbmUgPSAzMiwgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIHBlciBsaW5lLgorICAgIH07CisKKyAgICBjaGFyIGNoYXJCdWZmW2tCeXRlc1BlckxpbmUgKyAxXTsKKyAgICB1aW50MTZfdCBjb3VudGVyOworICAgIHVpbnQ4X3QgYnl0ZTsKKworICAgIHByaW50ZigiXG4lcyAtIGxlbiA9ICV1XG4gICAgIiwgYVRleHRNZXNzYWdlLCBhQnVmZmVyTGVuZ3RoKTsKKworICAgIGNvdW50ZXIgPSAwOworCisgICAgd2hpbGUgKGFCdWZmZXJMZW5ndGgtLSkKKyAgICB7CisgICAgICAgIGJ5dGUgPSAqYUJ1ZmZlcisrOworICAgICAgICBwcmludGYoIiUwMlggIiwgYnl0ZSk7CisgICAgICAgIGNoYXJCdWZmW2NvdW50ZXJdID0gaXNwcmludChieXRlKSA/IHN0YXRpY19jYXN0PGNoYXI+KGJ5dGUpIDogJy4nOworICAgICAgICBjb3VudGVyKys7CisKKyAgICAgICAgaWYgKGNvdW50ZXIgPT0ga0J5dGVzUGVyTGluZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhckJ1ZmZbY291bnRlcl0gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgICAgJXNcbiAgICAiLCBjaGFyQnVmZik7CisgICAgICAgICAgICBjb3VudGVyID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNoYXJCdWZmW2NvdW50ZXJdID0gMDsKKworICAgIHdoaWxlIChjb3VudGVyKysgPCBrQnl0ZXNQZXJMaW5lKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIgICAiKTsKKyAgICB9CisKKyAgICBwcmludGYoIiAgICAlc1xuIiwgY2hhckJ1ZmYpOworfQorCisvLyBSZWFkcyBieXRlcyBmcm9tIHRoZSBuY3AgYnVmZmVyLCBhbmQgdmVyaWZpZXMgdGhhdCBpdCBtYXRjaGVzIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQgYnVmZmVyLgordm9pZCBSZWFkQW5kVmVyaWZ5Q29udGVudChOY3BGcmFtZUJ1ZmZlciAmYU5jcEJ1ZmZlciwgY29uc3QgdWludDhfdCAqYUNvbnRlbnRCdWZmZXIsIHVpbnQxNl90IGFCdWZmZXJMZW5ndGgpCit7CisgICAgd2hpbGUgKGFCdWZmZXJMZW5ndGgtLSkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lSGFzRW5kZWQoKSA9PSBmYWxzZSwgIk91dCBmcmFtZSBlbmRlZCBiZWZvcmUgZW5kIG9mIGV4cGVjdGVkIGNvbnRlbnQuIik7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVSZWFkQnl0ZSgpID09ICphQ29udGVudEJ1ZmZlcisrLAorICAgICAgICAgICAgICAgICAgICAgIk91dCBmcmFtZSByZWFkIGJ5dGUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgY29udGVudCIpOworICAgIH0KK30KKwordm9pZCBXcml0ZVRlc3RGcmFtZTEoTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIpCit7CisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICBDYWxsYmFja0NvbnRleHQgb2xkQ29udGV4dDsKKworICAgIG1lc3NhZ2UgPSBzTWVzc2FnZVBvb2wtPk5ldyhNZXNzYWdlOjprVHlwZUlwNiwgMCk7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgIT0gTlVMTCwgIk51bGwgTWVzc2FnZSIpOworICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZS0+U2V0TGVuZ3RoKHNpemVvZihzTW90dG9UZXh0KSksICJDb3VsZCBub3Qgc2V0IHRoZSBsZW5ndGggb2YgbWVzc2FnZS4iKTsKKyAgICBtZXNzYWdlLT5Xcml0ZSgwLCBzaXplb2Yoc01vdHRvVGV4dCksIHNNb3R0b1RleHQpOworCisgICAgb2xkQ29udGV4dCA9IHNDb250ZXh0OworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lQmVnaW4oKSwgIkluRnJhbWVCZWdpbigpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKHNNb3R0b1RleHQsIHNpemVvZihzTW90dG9UZXh0KSksICJJbkZyYW1lRmVlZERhdGEoKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YShzTXlzdGVyeVRleHQsIHNpemVvZihzTXlzdGVyeVRleHQpKSwgIkluRnJhbWVGZWVkRGF0YSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKG1lc3NhZ2UpLCAiSW5GcmFtZUZlZWRNZXNzYWdlKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoc0hlbGxvVGV4dCwgc2l6ZW9mKHNIZWxsb1RleHQpKSwgIkluRnJhbWVGZWVkRGF0YSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUVuZCgpLCAiSW5GcmFtZUVuZCgpIGZhaWxlZC4iKTsKKworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQgKyAxID09IHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQsICJGcmFtZUFkZGVkQ2FsbGJhY2sgZmFpbGVkLiIpOworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCA9PSBzQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQsICJGcmFtZVJlbW92ZWRDYWxsYmFjayBmYWlsZWQuIik7Cit9CisKK3ZvaWQgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUxKE5jcEZyYW1lQnVmZmVyICZhTmNwQnVmZmVyKQoreworICAgIENhbGxiYWNrQ29udGV4dCBvbGRDb250ZXh0ID0gc0NvbnRleHQ7CisKKyAgICBzRXhwZWN0ZWRSZW1vdmVkVGFnID0gYU5jcEJ1ZmZlci5PdXRGcmFtZUdldFRhZygpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUJlZ2luKCksICJPdXRGcmFtZUJlZ2luKCkgZmFpbGVkIHVuZXhwZWN0ZWRseS4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0V4cGVjdGVkUmVtb3ZlZFRhZyA9PSBhTmNwQnVmZmVyLk91dEZyYW1lR2V0VGFnKCksICJPdXRGcmFtZUdldFRhZygpIHZhbHVlIGNoYW5nZWQgdW5leHBlY3RlZGx5LiIpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVHZXRMZW5ndGgoKSA9PSBzaXplb2Yoc01vdHRvVGV4dCkgKyBzaXplb2Yoc015c3RlcnlUZXh0KSArIHNpemVvZihzTW90dG9UZXh0KQorICAgICAgICAgICAgICAgICArIHNpemVvZihzSGVsbG9UZXh0KSwgIkdldExlbmd0aCgpIGlzIGluY29ycmVjdC4iKTsKKworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNNb3R0b1RleHQsIHNpemVvZihzTW90dG9UZXh0KSk7CisgICAgUmVhZEFuZFZlcmlmeUNvbnRlbnQoYU5jcEJ1ZmZlciwgc015c3RlcnlUZXh0LCBzaXplb2Yoc015c3RlcnlUZXh0KSk7CisgICAgUmVhZEFuZFZlcmlmeUNvbnRlbnQoYU5jcEJ1ZmZlciwgc01vdHRvVGV4dCwgc2l6ZW9mKHNNb3R0b1RleHQpKTsKKyAgICBSZWFkQW5kVmVyaWZ5Q29udGVudChhTmNwQnVmZmVyLCBzSGVsbG9UZXh0LCBzaXplb2Yoc0hlbGxvVGV4dCkpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVIYXNFbmRlZCgpID09IHRydWUsICJGcmFtZSBsb25nZXIgdGhhbiBleHBlY3RlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZVJlYWRCeXRlKCkgPT0gMCwgIlJlYWRCeXRlKCkgcmV0dXJuZWQgbm9uLXplcm8gYWZ0ZXIgZW5kIG9mIGZyYW1lLiIpOworICAgIFZlcmlmeU9yUXVpdChzRXhwZWN0ZWRSZW1vdmVkVGFnID09IGFOY3BCdWZmZXIuT3V0RnJhbWVHZXRUYWcoKSwgIk91dEZyYW1lR2V0VGFnKCkgdmFsdWUgY2hhbmdlZCB1bmV4cGVjdGVkbHkuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lUmVtb3ZlKCksICJSZW1vdmUoKSBmYWlsZWQuIik7CisKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ID09IHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQsICJGcmFtZUFkZGVkQ2FsbGJhY2sgZmFpbGVkLiIpOworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCArIDEgPT0gc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50LCAiRnJhbWVSZW1vdmVkQ2FsbGJhY2sgZmFpbGVkLiIpOworfQorCit2b2lkIFdyaXRlVGVzdEZyYW1lMihOY3BGcmFtZUJ1ZmZlciAmYU5jcEJ1ZmZlcikKK3sKKyAgICBNZXNzYWdlICptZXNzYWdlMTsKKyAgICBNZXNzYWdlICptZXNzYWdlMjsKKyAgICBDYWxsYmFja0NvbnRleHQgb2xkQ29udGV4dCA9IHNDb250ZXh0OworCisgICAgbWVzc2FnZTEgPSBzTWVzc2FnZVBvb2wtPk5ldyhNZXNzYWdlOjprVHlwZUlwNiwgMCk7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UxICE9IE5VTEwsICJOdWxsIE1lc3NhZ2UiKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2UxLT5TZXRMZW5ndGgoc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkpLCAiQ291bGQgbm90IHNldCB0aGUgbGVuZ3RoIG9mIG1lc3NhZ2UuIik7CisgICAgbWVzc2FnZTEtPldyaXRlKDAsIHNpemVvZihzTXlzdGVyeVRleHQpLCBzTXlzdGVyeVRleHQpOworCisgICAgbWVzc2FnZTIgPSBzTWVzc2FnZVBvb2wtPk5ldyhNZXNzYWdlOjprVHlwZUlwNiwgMCk7CisgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UyICE9IE5VTEwsICJOdWxsIE1lc3NhZ2UiKTsKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2UyLT5TZXRMZW5ndGgoc2l6ZW9mKHNIZWxsb1RleHQpKSwgIkNvdWxkIG5vdCBzZXQgdGhlIGxlbmd0aCBvZiBtZXNzYWdlLiIpOworICAgIG1lc3NhZ2UyLT5Xcml0ZSgwLCBzaXplb2Yoc0hlbGxvVGV4dCksIHNIZWxsb1RleHQpOworCisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVCZWdpbigpLCAiSW5GcmFtZUZlZWRCZWdpbigpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKG1lc3NhZ2UxKSwgIkluRnJhbWVGZWVkTWVzc2FnZSgpIGZhaWxlZC4iKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKHNPcGVuVGhyZWFkVGV4dCwgc2l6ZW9mKHNPcGVuVGhyZWFkVGV4dCkpLCAiSW5GcmFtZUZlZWREYXRhKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRmVlZE1lc3NhZ2UobWVzc2FnZTIpLCAiSW5GcmFtZUZlZWRNZXNzYWdlKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRW5kKCksICJJbkZyYW1lRW5kKCkgZmFpbGVkLiIpOworCisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lQWRkZWRDb3VudCArIDEgPT0gc0NvbnRleHQubUZyYW1lQWRkZWRDb3VudCwgIkZyYW1lQWRkZWRDYWxsYmFjayBmYWlsZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50ID09IHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCwgIkZyYW1lUmVtb3ZlZENhbGxiYWNrIGZhaWxlZC4iKTsKK30KKwordm9pZCBWZXJpZnlBbmRSZW1vdmVGcmFtZTIoTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIpCit7CisgICAgQ2FsbGJhY2tDb250ZXh0IG9sZENvbnRleHQgPSBzQ29udGV4dDsKKworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUJlZ2luKCksICJPdXRGcmFtZUJlZ2luKCkgZmFpbGVkIHVuZXhwZWN0ZWRseS4iKTsKKworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lR2V0TGVuZ3RoKCkgPT0gc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkgKyBzaXplb2Yoc0hlbGxvVGV4dCkgKyBzaXplb2Yoc09wZW5UaHJlYWRUZXh0KSwKKyAgICAgICAgICAgICAgICAgIkdldExlbmd0aCgpIGlzIGluY29ycmVjdC4iKTsKKworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNNeXN0ZXJ5VGV4dCwgc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkpOworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNPcGVuVGhyZWFkVGV4dCwgc2l6ZW9mKHNPcGVuVGhyZWFkVGV4dCkpOworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNIZWxsb1RleHQsIHNpemVvZihzSGVsbG9UZXh0KSk7CisKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUhhc0VuZGVkKCkgPT0gdHJ1ZSwgIkZyYW1lIGxvbmdlciB0aGFuIGV4cGVjdGVkLiIpOworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lUmVhZEJ5dGUoKSA9PSAwLCAiUmVhZEJ5dGUoKSByZXR1cm5lZCBub24temVybyBhZnRlciBlbmQgb2YgZnJhbWUuIik7CisgICAgc0V4cGVjdGVkUmVtb3ZlZFRhZyA9IGFOY3BCdWZmZXIuT3V0RnJhbWVHZXRUYWcoKTsKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVSZW1vdmUoKSwgIlJlbW92ZSgpIGZhaWxlZC4iKTsKKworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQgPT0gc0NvbnRleHQubUZyYW1lQWRkZWRDb3VudCwgIkZyYW1lQWRkZWRDYWxsYmFjayBmYWlsZWQuIik7CisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50ICsgMSA9PSBzQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQsICJGcmFtZVJlbW92ZWRDYWxsYmFjayBmYWlsZWQuIik7Cit9CisKK3ZvaWQgV3JpdGVUZXN0RnJhbWUzKE5jcEZyYW1lQnVmZmVyICZhTmNwQnVmZmVyKQoreworICAgIE1lc3NhZ2UgKm1lc3NhZ2UxOworICAgIENhbGxiYWNrQ29udGV4dCBvbGRDb250ZXh0ID0gc0NvbnRleHQ7CisKKyAgICBtZXNzYWdlMSA9IHNNZXNzYWdlUG9vbC0+TmV3KE1lc3NhZ2U6OmtUeXBlSXA2LCAwKTsKKyAgICBWZXJpZnlPclF1aXQobWVzc2FnZTEgIT0gTlVMTCwgIk51bGwgTWVzc2FnZSIpOworCisgICAgLy8gQW4gZW1wdHkgbWVzc2FnZSB3aXRoIG5vIGNvbnRlbnQuCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlMS0+U2V0TGVuZ3RoKDApLCAiQ291bGQgbm90IHNldCB0aGUgbGVuZ3RoIG9mIG1lc3NhZ2UuIik7CisKKyAgICBTdWNjZXNzT3JRdWl0KGFOY3BCdWZmZXIuSW5GcmFtZUJlZ2luKCksICJJbkZyYW1lRmVlZEJlZ2luKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRmVlZE1lc3NhZ2UobWVzc2FnZTEpLCAiSW5GcmFtZUZlZWRNZXNzYWdlKCkgZmFpbGVkLiIpOworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoc015c3RlcnlUZXh0LCBzaXplb2Yoc015c3RlcnlUZXh0KSksICJJbkZyYW1lRmVlZERhdGEoKSBmYWlsZWQuIik7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLkluRnJhbWVFbmQoKSwgIkluRnJhbWVFbmQoKSBmYWlsZWQuIik7CisKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ICsgMSA9PSBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50LCAiRnJhbWVBZGRlZENhbGxiYWNrIGZhaWxlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgPT0gc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50LCAiRnJhbWVSZW1vdmVkQ2FsbGJhY2sgZmFpbGVkLiIpOworfQorCit2b2lkIFZlcmlmeUFuZFJlbW92ZUZyYW1lMyhOY3BGcmFtZUJ1ZmZlciAmYU5jcEJ1ZmZlcikKK3sKKyAgICBDYWxsYmFja0NvbnRleHQgb2xkQ29udGV4dCA9IHNDb250ZXh0OworCisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lQmVnaW4oKSwgIk91dEZyYW1lQmVnaW4oKSBmYWlsZWQgdW5leHBlY3RlZGx5LiIpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVHZXRMZW5ndGgoKSA9PSBzaXplb2Yoc015c3RlcnlUZXh0KSwgIkdldExlbmd0aCgpIGlzIGluY29ycmVjdC4iKTsKKworICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNNeXN0ZXJ5VGV4dCwgc2l6ZW9mKHNNeXN0ZXJ5VGV4dCkpOworCisgICAgVmVyaWZ5T3JRdWl0KGFOY3BCdWZmZXIuT3V0RnJhbWVIYXNFbmRlZCgpID09IHRydWUsICJGcmFtZSBsb25nZXIgdGhhbiBleHBlY3RlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZVJlYWRCeXRlKCkgPT0gMCwgIlJlYWRCeXRlKCkgcmV0dXJuZWQgbm9uLXplcm8gYWZ0ZXIgZW5kIG9mIGZyYW1lLiIpOworICAgIHNFeHBlY3RlZFJlbW92ZWRUYWcgPSBhTmNwQnVmZmVyLk91dEZyYW1lR2V0VGFnKCk7CisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lUmVtb3ZlKCksICJSZW1vdmUoKSBmYWlsZWQuIik7CisKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ID09IHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQsICJGcmFtZUFkZGVkQ2FsbGJhY2sgZmFpbGVkLiIpOworICAgIFZlcmlmeU9yUXVpdChvbGRDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCArIDEgPT0gc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50LCAiRnJhbWVSZW1vdmVkQ2FsbGJhY2sgZmFpbGVkLiIpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIE5jcEZyYW1lQnVmZmVyIHRlc3RzCit2b2lkIFRlc3ROY3BGcmFtZUJ1ZmZlcih2b2lkKQoreworICAgIHVuc2lnbmVkIGksIGo7CisgICAgdWludDhfdCBidWZmZXJba1Rlc3RCdWZmZXJTaXplXTsKKyAgICBOY3BGcmFtZUJ1ZmZlciBuY3BCdWZmZXIoYnVmZmVyLCBrVGVzdEJ1ZmZlclNpemUpOworCisgICAgTWVzc2FnZSAqbWVzc2FnZTsKKyAgICB1aW50OF90IHJlYWRCdWZmZXJbMTZdOworICAgIHVpbnQxNl90IHJlYWRMZW4sIHJlYWRPZmZzZXQ7CisKKyAgICBzSW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgc01lc3NhZ2VQb29sID0gJnNJbnN0YW5jZS0+bUlwNi5tTWVzc2FnZVBvb2w7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1ZmZlcik7IGkrKykKKyAgICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IDA7CisgICAgfQorCisgICAgc0NvbnRleHQubUZyYW1lQWRkZWRDb3VudCA9IDA7CisgICAgc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50ID0gMDsKKyAgICBDbGVhclRhZ0hpc3RvcnkoKTsKKworICAgIC8vIFNldCB0aGUgY2FsbGJhY2tzLgorICAgIG5jcEJ1ZmZlci5TZXRGcmFtZUFkZGVkQ2FsbGJhY2soRnJhbWVBZGRlZENhbGxiYWNrLCAmc0NvbnRleHQpOworICAgIG5jcEJ1ZmZlci5TZXRGcmFtZVJlbW92ZWRDYWxsYmFjayhGcmFtZVJlbW92ZWRDYWxsYmFjaywgJnNDb250ZXh0KTsKKworICAgIHByaW50ZigiXG4tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIik7CisgICAgcHJpbnRmKCJcblRlc3QgMTogQ2hlY2sgaW5pdGlhbCBidWZmZXIgc3RhdGUiKTsKKworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJOb3QgZW1wdHkgYWZ0ZXIgaW5pdC4iKTsKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLkluRnJhbWVHZXRMYXN0VGFnKCkgPT0gTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnLCAiSW5jb3JyZWN0IHRhZyBhZnRlciBpbml0LiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuT3V0RnJhbWVHZXRUYWcoKSA9PSBOY3BGcmFtZUJ1ZmZlcjo6a0ludmFsaWRUYWcsICJJbmNvcnJlY3QgT3V0RnJhbWVUYWcgYWZ0ZXIgaW5pdC4iKTsKKworICAgIHByaW50ZigiXG4tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIik7CisgICAgcHJpbnRmKCJcblRlc3QgMjogV3JpdGUgYSBmcmFtZSAxICIpOworCisgICAgV3JpdGVUZXN0RnJhbWUxKG5jcEJ1ZmZlcik7CisgICAgRHVtcEJ1ZmZlcigiXG5CdWZmZXIgYWZ0ZXIgZnJhbWUxIiwgYnVmZmVyLCBrVGVzdEJ1ZmZlclNpemUpOworICAgIHByaW50ZigiXG5GcmFtZUxlbiBpcyAldSIsIG5jcEJ1ZmZlci5PdXRGcmFtZUdldExlbmd0aCgpKTsKKworICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMShuY3BCdWZmZXIpOworCisgICAgcHJpbnRmKCJcbkl0ZXJhdGlvbnM6ICIpOworCisgICAgLy8gUmVwZWF0IHRoaXMgbXVsdGlwbGUgdGltZXMuCisgICAgZm9yIChqID0gMDsgaiA8IGtUZXN0SXRlcmF0aW9uQXR0ZW1wczsgaisrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIqIik7CisgICAgICAgIFdyaXRlVGVzdEZyYW1lMShuY3BCdWZmZXIpOworICAgICAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLklzRW1wdHkoKSA9PSBmYWxzZSwgIklzRW1wdHkoKSBpcyBpbmNvcnJlY3Qgd2hlbiBidWZmZXIgaXMgbm9uLWVtcHR5Iik7CisKKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUxKG5jcEJ1ZmZlcik7CisgICAgICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJJc0VtcHR5KCkgaXMgaW5jb3JyZWN0IHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworICAgIH0KKworICAgIHByaW50ZigiIC0tIFBBU1NcbiIpOworCisgICAgcHJpbnRmKCJcbi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0iKTsKKyAgICBwcmludGYoIlxuVGVzdCAzOiBNdWx0aXBsZSBmcmFtZXMgd3JpdGUgYW5kIHJlYWQgIik7CisKKyAgICBXcml0ZVRlc3RGcmFtZTIobmNwQnVmZmVyKTsKKyAgICBXcml0ZVRlc3RGcmFtZTMobmNwQnVmZmVyKTsKKyAgICBXcml0ZVRlc3RGcmFtZTIobmNwQnVmZmVyKTsKKyAgICBXcml0ZVRlc3RGcmFtZTIobmNwQnVmZmVyKTsKKworICAgIER1bXBCdWZmZXIoIlxuQnVmZmVyIGFmdGVyIG11bHRpcGxlIGZyYW1lcyIsIGJ1ZmZlciwga1Rlc3RCdWZmZXJTaXplKTsKKworICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMihuY3BCdWZmZXIpOworICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMyhuY3BCdWZmZXIpOworICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMihuY3BCdWZmZXIpOworICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMihuY3BCdWZmZXIpOworCisgICAgcHJpbnRmKCJcbkl0ZXJhdGlvbnM6ICIpOworCisgICAgLy8gUmVwZWF0IHRoaXMgbXVsdGlwbGUgdGltZXMuCisgICAgZm9yIChqID0gMDsgaiA8IGtUZXN0SXRlcmF0aW9uQXR0ZW1wczsgaisrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIqIik7CisKKyAgICAgICAgV3JpdGVUZXN0RnJhbWUyKG5jcEJ1ZmZlcik7CisgICAgICAgIFdyaXRlVGVzdEZyYW1lMyhuY3BCdWZmZXIpOworICAgICAgICBXcml0ZVRlc3RGcmFtZTIobmNwQnVmZmVyKTsKKworICAgICAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUzKG5jcEJ1ZmZlcik7CisKKyAgICAgICAgV3JpdGVUZXN0RnJhbWUyKG5jcEJ1ZmZlcik7CisgICAgICAgIFdyaXRlVGVzdEZyYW1lMyhuY3BCdWZmZXIpOworCisgICAgICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMihuY3BCdWZmZXIpOworICAgICAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTIobmNwQnVmZmVyKTsKKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUzKG5jcEJ1ZmZlcik7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5Jc0VtcHR5KCkgPT0gdHJ1ZSwgIklzRW1wdHkoKSBpcyBpbmNvcnJlY3Qgd2hlbiBidWZmZXIgaXMgZW1wdHkuIik7CisgICAgfQorCisgICAgcHJpbnRmKCIgLS0gUEFTU1xuIik7CisKKyAgICBwcmludGYoIlxuLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSIpOworICAgIHByaW50ZigiXG5UZXN0IDQ6IEZyYW1lIGRpc2NhcmQgd2hlbiBidWZmZXIgZnVsbCBhbmQgcGFydGlhbCByZWFkIHJlc3RhcnQiKTsKKworICAgIGZvciAoaiA9IDA7IGogPCBrVGVzdEl0ZXJhdGlvbkF0dGVtcHM7IGorKykKKyAgICB7CisgICAgICAgIFdyaXRlVGVzdEZyYW1lMihuY3BCdWZmZXIpOworICAgICAgICBXcml0ZVRlc3RGcmFtZTMobmNwQnVmZmVyKTsKKworICAgICAgICBuY3BCdWZmZXIuSW5GcmFtZUJlZ2luKCk7CisgICAgICAgIG5jcEJ1ZmZlci5JbkZyYW1lRmVlZERhdGEoc0hlbGxvVGV4dCwgc2l6ZW9mKHNIZWxsb1RleHQpKTsKKworICAgICAgICBtZXNzYWdlID0gc01lc3NhZ2VQb29sLT5OZXcoTWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgICAgICBWZXJpZnlPclF1aXQobWVzc2FnZSAhPSBOVUxMLCAiTnVsbCBNZXNzYWdlIik7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQobWVzc2FnZS0+U2V0TGVuZ3RoKHNpemVvZihzTXlzdGVyeVRleHQpKSwgIkNvdWxkIG5vdCBzZXQgdGhlIGxlbmd0aCBvZiBtZXNzYWdlLiIpOworICAgICAgICBtZXNzYWdlLT5Xcml0ZSgwLCBzaXplb2Yoc015c3RlcnlUZXh0KSwgc015c3RlcnlUZXh0KTsKKworICAgICAgICBuY3BCdWZmZXIuSW5GcmFtZUZlZWRNZXNzYWdlKG1lc3NhZ2UpOworCisgICAgICAgIC8vIE5vdyBjYXVzZSBhIHJlc3RhcnQgdGhlIGN1cnJlbnQgZnJhbWUgYW5kIHRlc3QgaWYgaXQncyBkaXNjYXJkZWQgb2suCisgICAgICAgIFdyaXRlVGVzdEZyYW1lMihuY3BCdWZmZXIpOworCisgICAgICAgIGlmIChqID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIER1bXBCdWZmZXIoIlxuQWZ0ZXIgZnJhbWUgZ2V0cyBkaXNjYXJkZWQiLCBidWZmZXIsIGtUZXN0QnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBwcmludGYoIlxuSXRlcmF0aW9uczogIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIioiKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMihuY3BCdWZmZXIpOworCisgICAgICAgIC8vIFN0YXJ0IHJlYWRpbmcgZmV3IGJ5dGVzIGZyb20gdGhlIGZyYW1lCisgICAgICAgIG5jcEJ1ZmZlci5PdXRGcmFtZUJlZ2luKCk7CisgICAgICAgIG5jcEJ1ZmZlci5PdXRGcmFtZVJlYWRCeXRlKCk7CisgICAgICAgIG5jcEJ1ZmZlci5PdXRGcmFtZVJlYWRCeXRlKCk7CisgICAgICAgIG5jcEJ1ZmZlci5PdXRGcmFtZVJlYWRCeXRlKCk7CisKKyAgICAgICAgLy8gTm93IHJlc2V0IHRoZSByZWFkIHBvaW50ZXIgYW5kIHJlYWQvdmVyaWZ5IHRoZSBmcmFtZSBmcm9tIHN0YXJ0LgorICAgICAgICBWZXJpZnlBbmRSZW1vdmVGcmFtZTMobmNwQnVmZmVyKTsKKyAgICAgICAgVmVyaWZ5QW5kUmVtb3ZlRnJhbWUyKG5jcEJ1ZmZlcik7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5Jc0VtcHR5KCkgPT0gdHJ1ZSwgIklzRW1wdHkoKSBpcyBpbmNvcnJlY3Qgd2hlbiBidWZmZXIgaXMgZW1wdHkuIik7CisgICAgfQorCisgICAgcHJpbnRmKCIgLS0gUEFTU1xuIik7CisKKyAgICBwcmludGYoIlxuLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSIpOworICAgIHByaW50ZigiXG5UZXN0IDU6IENsZWFyKCkgYW5kIGVtcHR5IGJ1ZmZlciBtZXRob2QgdGVzdHMiKTsKKworICAgIFdyaXRlVGVzdEZyYW1lMShuY3BCdWZmZXIpOworCisgICAgbmNwQnVmZmVyLkNsZWFyKCk7CisgICAgQ2xlYXJUYWdIaXN0b3J5KCk7CisKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLkluRnJhbWVHZXRMYXN0VGFnKCkgPT0gTmNwRnJhbWVCdWZmZXI6OmtJbnZhbGlkVGFnLCAiSW5jb3JyZWN0IGxhc3QgdGFnIGFmdGVyIENsZWFyKCkuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5PdXRGcmFtZUdldFRhZygpID09IE5jcEZyYW1lQnVmZmVyOjprSW52YWxpZFRhZywgIkluY29ycmVjdCBPdXRGcmFtZVRhZyBhZnRlciBDbGVhcigpLiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuSXNFbXB0eSgpID09IHRydWUsICJJc0VtcHR5KCkgaXMgaW5jb3JyZWN0IHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworICAgIFZlcmlmeU9yUXVpdChuY3BCdWZmZXIuT3V0RnJhbWVIYXNFbmRlZCgpID09IHRydWUsICJPdXRGcmFtZUhhc0VuZGVkKCkgaXMgaW5jb3JyZWN0IHdoZW4gbm8gZGF0YSBpbiBidWZmZXIuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5PdXRGcmFtZVJlbW92ZSgpID09IE9UX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgIlJlbW92ZSgpIHJldHVybmVkIGluY29ycmVjdCBlcnJvciBzdGF0dXMgd2hlbiBidWZmZXIgaXMgZW1wdHkuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5PdXRGcmFtZUdldExlbmd0aCgpID09IDAsICJPdXRGcmFtZUdldExlbmd0aCgpIHJldHVybmVkIG5vbi16ZXJvIGxlbmd0aCB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4iKTsKKworICAgIFdyaXRlVGVzdEZyYW1lMShuY3BCdWZmZXIpOworICAgIFZlcmlmeUFuZFJlbW92ZUZyYW1lMShuY3BCdWZmZXIpOworCisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5Jc0VtcHR5KCkgPT0gdHJ1ZSwgIklzRW1wdHkoKSBpcyBpbmNvcnJlY3Qgd2hlbiBidWZmZXIgaXMgZW1wdHkuIik7CisgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5PdXRGcmFtZUhhc0VuZGVkKCkgPT0gdHJ1ZSwgIk91dEZyYW1lSGFzRW5kZWQoKSBpcyBpbmNvcnJlY3Qgd2hlbiBubyBkYXRhIGluIGJ1ZmZlci4iKTsKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLk91dEZyYW1lUmVtb3ZlKCkgPT0gT1RfRVJST1JfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAiUmVtb3ZlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IGVycm9yIHN0YXR1cyB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4iKTsKKyAgICBWZXJpZnlPclF1aXQobmNwQnVmZmVyLk91dEZyYW1lR2V0TGVuZ3RoKCkgPT0gMCwgIk91dEZyYW1lR2V0TGVuZ3RoKCkgcmV0dXJuZWQgbm9uLXplcm8gbGVuZ3RoIHdoZW4gYnVmZmVyIGlzIGVtcHR5LiIpOworCisgICAgcHJpbnRmKCIgLS0gUEFTU1xuIik7CisKKyAgICBwcmludGYoIlxuLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSIpOworICAgIHByaW50ZigiXG5UZXN0IDY6IE91dEZyYW1lUmVhZCgpIGluIHBhcnRzXG4iKTsKKworICAgIG5jcEJ1ZmZlci5JbkZyYW1lQmVnaW4oKTsKKyAgICBuY3BCdWZmZXIuSW5GcmFtZUZlZWREYXRhKHNNb3R0b1RleHQsIHNpemVvZihzTW90dG9UZXh0KSk7CisgICAgbmNwQnVmZmVyLkluRnJhbWVFbmQoKTsKKworICAgIG5jcEJ1ZmZlci5PdXRGcmFtZUJlZ2luKCk7CisgICAgcmVhZE9mZnNldCA9IDA7CisKKyAgICB3aGlsZSAoKHJlYWRMZW4gPSBuY3BCdWZmZXIuT3V0RnJhbWVSZWFkKHNpemVvZihyZWFkQnVmZmVyKSwgcmVhZEJ1ZmZlcikpICE9IDApCisgICAgeworICAgICAgICBEdW1wQnVmZmVyKCJSZWFkKCkgcmV0dXJuZWQiLCByZWFkQnVmZmVyLCByZWFkTGVuKTsKKworICAgICAgICBWZXJpZnlPclF1aXQobWVtY21wKHJlYWRCdWZmZXIsIHNNb3R0b1RleHQgKyByZWFkT2Zmc2V0LCByZWFkTGVuKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIlJlYWQoKSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBjb250ZW50LiIpOworCisgICAgICAgIHJlYWRPZmZzZXQgKz0gcmVhZExlbjsKKyAgICB9CisKKyAgICBWZXJpZnlPclF1aXQocmVhZE9mZnNldCA9PSBzaXplb2Yoc01vdHRvVGV4dCksICJSZWFkIGxlbiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBsZW5ndGguIik7CisgICAgcHJpbnRmKCJcbiAtLSBQQVNTXG4iKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2Uoc0luc3RhbmNlKTsKK30KKworLyoqCisgKiBOQ1AgQnVmZmVyIEZ1enogdGVzdGluZworICoKKyAqIFJhbmRvbWx5IGRlY2lkZSBpZiB0byByZWFkIG9yIHdyaXRlIGEgZnJhbWUgdG8gdGhlIE5DUCBidWZmZXIgKHVzZSBga1JlYWRQcm9iYWJpbGl0eWAgaW4gcGVyY2VudCB0byBjb250cm9sIHRoZQorICogYmVoYXZpb3IpLgorICoKKyAqIFdoZW4gd3JpdGluZyBhIGZyYW1lLCB1c2UgYSByYW5kb20gbGVuZ3RoICgxIHVwIHRvIGBrTWF4RnJhbWVMZW5gKSBhbmQgZ2VuZXJhdGUgcmFuZG9tIGJ5dGUgc2VxdWVuY2VzLgorICogV2hlbiByZWFkaW5nIGEgZnJhbWUgZW5zdXJlIHRoZSBsZW5ndGggYW5kIHRoZSBjb250ZW50IG1hdGNoZXMgd2hhdCB3YXMgd3JpdHRlbiBlYXJsaWVyLgorICogSGFuZGxlIHRoZSBjYXNlcyB3aGVyZSBidWZmZXIgZ2V0cyBmdWxsIG9yIGVtcHR5LgorICoKKyAqLworCitlbnVtCit7CisgICAga0Z1elRlc3RCdWZmZXJTaXplID0gMjAwMCwgICAgICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgYnVmZmVyIHVzZWQgZHVyaW5nIGZ1enogdGVzdGluZworICAgIGtGdXpUZXN0SXRlcmF0aW9uQXR0ZW1wdHMgPSA1MDAwMDAsICAgIC8vIE51bWJlciBvZiBpdGVyYXRpb25zICB0byBydW4KKyAgICBrTGVuc0FycmF5U2l6ZSA9IDUwMCwgICAgICAgICAgICAgICAgICAvLyBTaXplIG9mICJMZW5ndGhzIiBhcnJheS4KKyAgICBrTWF4RnJhbWVMZW4gPSA0MDAsICAgICAgICAgICAgICAgICAgICAvLyBNYXhpbXVtIGZyYW1lIGxlbmd0aAorICAgIGtSZWFkUHJvYmFiaWxpdHkgPSA1MCwgICAgICAgICAgICAgICAgIC8vIFByb2JhYmlsaXR5IChpbiBwZXJjZW50KSB0byByYW5kb21seSBjaG9vc2UgdG8gcmVhZCB2cyB3cml0ZSBmcmFtZQorICAgIGtVc2VUcnVlUmFuZG9tTnVtYmVyR2VuZXJhdG9yID0gMSwgICAgIC8vIFRvIHVzZSB0cnVlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9yIG5vdC4KK307CisKK3VpbnQ4X3Qgc0ZyYW1lQnVmZmVyW2tGdXpUZXN0QnVmZmVyU2l6ZV07Cit1aW50MzJfdCBzRnJhbWVCdWZmZXJUYWlsSW5kZXggPSAwOworCit1aW50MzJfdCBHZXRSYW5kb20odWludDMyX3QgbWF4KQoreworICAgIHVpbnQzMl90IHZhbHVlOworCisgICAgaWYgKGtVc2VUcnVlUmFuZG9tTnVtYmVyR2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgb3RQbGF0UmFuZG9tR2V0VHJ1ZShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHZhbHVlID0gb3RQbGF0UmFuZG9tR2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlICUgbWF4OworfQorCitvdEVycm9yIFdyaXRlUmFuZG9tRnJhbWUodWludDMyX3QgYUxlbmd0aCwgTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIpCit7CisgICAgb3RFcnJvciBlcnJvcjsKKyAgICB1aW50OF90IGJ5dGU7CisgICAgQ2FsbGJhY2tDb250ZXh0IG9sZENvbnRleHQgPSBzQ29udGV4dDsKKyAgICB1aW50MzJfdCB0YWlsID0gc0ZyYW1lQnVmZmVyVGFpbEluZGV4OworCisgICAgU3VjY2Vzc09yRXhpdChlcnJvciA9IGFOY3BCdWZmZXIuSW5GcmFtZUJlZ2luKCkpOworCisgICAgd2hpbGUgKGFMZW5ndGgtLSkKKyAgICB7CisgICAgICAgIGJ5dGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihHZXRSYW5kb20oMjU2KSk7CisgICAgICAgIFN1Y2Nlc3NPckV4aXQoZXJyb3IgPSBhTmNwQnVmZmVyLkluRnJhbWVGZWVkRGF0YSgmYnl0ZSwgc2l6ZW9mKGJ5dGUpKSk7CisgICAgICAgIHNGcmFtZUJ1ZmZlclt0YWlsKytdID0gYnl0ZTsKKyAgICB9CisKKyAgICBTdWNjZXNzT3JFeGl0KGVycm9yID0gYU5jcEJ1ZmZlci5JbkZyYW1lRW5kKCkpOworCisgICAgc0ZyYW1lQnVmZmVyVGFpbEluZGV4ID0gdGFpbDsKKworICAgIC8vIGNoZWNrIHRoZSBjYWxsYmFja3MKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVBZGRlZENvdW50ICsgMSA9PSBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50LCAiRnJhbWVBZGRlZENhbGxiYWNrIGZhaWxlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgPT0gc0NvbnRleHQubUZyYW1lUmVtb3ZlZENvdW50LCAiRnJhbWVSZW1vdmVkQ2FsbGJhY2sgZmFpbGVkLiIpOworCitleGl0OgorICAgIHJldHVybiBlcnJvcjsKK30KKworb3RFcnJvciBSZWFkUmFuZG9tRnJhbWUodWludDMyX3QgYUxlbmd0aCwgTmNwRnJhbWVCdWZmZXIgJmFOY3BCdWZmZXIpCit7CisgICAgQ2FsbGJhY2tDb250ZXh0IG9sZENvbnRleHQgPSBzQ29udGV4dDsKKworICAgIFN1Y2Nlc3NPclF1aXQoYU5jcEJ1ZmZlci5PdXRGcmFtZUJlZ2luKCksICJPdXRGcmFtZUJlZ2luIGZhaWxlZCIpOworICAgIFZlcmlmeU9yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lR2V0TGVuZ3RoKCkgPT0gYUxlbmd0aCwgIk91dEZyYW1lR2V0TGVuZ3RoKCkgZG9lcyBub3QgbWF0Y2giKTsKKworICAgIC8vIFJlYWQgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb250ZW50IGlzIHNhbWUgYXMgc0ZyYW1lQnVmZmVyIHZhbHVlcy4uLgorICAgIFJlYWRBbmRWZXJpZnlDb250ZW50KGFOY3BCdWZmZXIsIHNGcmFtZUJ1ZmZlciwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFMZW5ndGgpKTsKKyAgICBzRXhwZWN0ZWRSZW1vdmVkVGFnID0gYU5jcEJ1ZmZlci5PdXRGcmFtZUdldFRhZygpOworCisgICAgU3VjY2Vzc09yUXVpdChhTmNwQnVmZmVyLk91dEZyYW1lUmVtb3ZlKCksICJPdXRGcmFtZVJlbW92ZSBmYWlsZWQiKTsKKworICAgIHNGcmFtZUJ1ZmZlclRhaWxJbmRleCAtPSBhTGVuZ3RoOworICAgIG1lbW1vdmUoc0ZyYW1lQnVmZmVyLCBzRnJhbWVCdWZmZXIgKyBhTGVuZ3RoLCBzRnJhbWVCdWZmZXJUYWlsSW5kZXgpOworCisgICAgLy8gSWYgc3VjY2Vzc2Z1bCBjaGVjayB0aGUgY2FsbGJhY2tzCisgICAgVmVyaWZ5T3JRdWl0KG9sZENvbnRleHQubUZyYW1lQWRkZWRDb3VudCA9PSBzQ29udGV4dC5tRnJhbWVBZGRlZENvdW50LCAiRnJhbWVBZGRlZENhbGxiYWNrIGZhaWxlZC4iKTsKKyAgICBWZXJpZnlPclF1aXQob2xkQ29udGV4dC5tRnJhbWVSZW1vdmVkQ291bnQgKyAxID09IHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCwgIkZyYW1lUmVtb3ZlZENhbGxiYWNrIGZhaWxlZC4iKTsKKworICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworfQorCisKKy8vIFRoaXMgcnVucyBhIGZ1enogdGVzdCBvZiBOQ1AgYnVmZmVyCit2b2lkIFRlc3RGdXp6TmNwRnJhbWVCdWZmZXIodm9pZCkKK3sKKyAgICB1aW50OF90IGJ1ZmZlcltrRnV6VGVzdEJ1ZmZlclNpemVdOworICAgIE5jcEZyYW1lQnVmZmVyIG5jcEJ1ZmZlcihidWZmZXIsIGtGdXpUZXN0QnVmZmVyU2l6ZSk7CisKKyAgICB1aW50MzJfdCBsZW5zQXJyYXlba0xlbnNBcnJheVNpemVdOyAgICAgICAgICAvLyBLZWVwcyB0cmFjayBvZiBsZW5ndGggb2Ygd3JpdHRlbiBmcmFtZXMgc28gZmFyCisgICAgdWludDMyX3QgbGVuc0FycmF5U3RhcnQ7CisgICAgdWludDMyX3QgbGVuc0FycmF5Q291bnQ7CisKKyAgICBzSW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisgICAgc01lc3NhZ2VQb29sID0gJnNJbnN0YW5jZS0+bUlwNi5tTWVzc2FnZVBvb2w7CisKKyAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICBtZW1zZXQobGVuc0FycmF5LCAwLCBzaXplb2YobGVuc0FycmF5KSk7CisgICAgbGVuc0FycmF5U3RhcnQgPSAwOworICAgIGxlbnNBcnJheUNvdW50ID0gMDsKKworICAgIHNDb250ZXh0Lm1GcmFtZUFkZGVkQ291bnQgPSAwOworICAgIHNDb250ZXh0Lm1GcmFtZVJlbW92ZWRDb3VudCA9IDA7CisgICAgQ2xlYXJUYWdIaXN0b3J5KCk7CisKKyAgICBuY3BCdWZmZXIuU2V0RnJhbWVBZGRlZENhbGxiYWNrKEZyYW1lQWRkZWRDYWxsYmFjaywgJnNDb250ZXh0KTsKKyAgICBuY3BCdWZmZXIuU2V0RnJhbWVSZW1vdmVkQ2FsbGJhY2soRnJhbWVSZW1vdmVkQ2FsbGJhY2ssICZzQ29udGV4dCk7CisKKyAgICBmb3IgKHVpbnQzMl90IGl0ZXIgPSAwOyBpdGVyIDwga0Z1elRlc3RJdGVyYXRpb25BdHRlbXB0czsgaXRlcisrKQorICAgIHsKKyAgICAgICAgYm9vbCBzaG91bGRSZWFkOworCisgICAgICAgIGlmIChsZW5zQXJyYXlDb3VudCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzaG91bGRSZWFkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGVuc0FycmF5Q291bnQgPT0ga0xlbnNBcnJheVNpemUgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBzaG91bGRSZWFkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJhbmRvbWx5IGRlY2lkZSB0byByZWFkIG9yIHdyaXRlLgorICAgICAgICAgICAgc2hvdWxkUmVhZCA9IChHZXRSYW5kb20oMTAwKSA8IGtSZWFkUHJvYmFiaWxpdHkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNob3VsZFJlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGxlbiA9IGxlbnNBcnJheVtsZW5zQXJyYXlTdGFydF07CisKKyAgICAgICAgICAgIGxlbnNBcnJheVN0YXJ0ID0gKGxlbnNBcnJheVN0YXJ0ICsgMSkgJSBrTGVuc0FycmF5U2l6ZTsKKyAgICAgICAgICAgIGxlbnNBcnJheUNvdW50LS07CisKKyAgICAgICAgICAgIHByaW50ZigiUiVkICIsIGxlbik7CisKKyAgICAgICAgICAgIFN1Y2Nlc3NPclF1aXQoUmVhZFJhbmRvbUZyYW1lKGxlbiwgbmNwQnVmZmVyKSwgIkZhaWxlZCB0byByZWFkIHJhbmRvbSBmcmFtZS4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGxlbiA9IEdldFJhbmRvbShrTWF4RnJhbWVMZW4pICsgMTsKKworICAgICAgICAgICAgaWYgKFdyaXRlUmFuZG9tRnJhbWUobGVuLCBuY3BCdWZmZXIpID09IE9UX0VSUk9SX05PTkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuc0FycmF5WyhsZW5zQXJyYXlTdGFydCArIGxlbnNBcnJheUNvdW50KSAlIGtMZW5zQXJyYXlTaXplXSA9IGxlbjsKKyAgICAgICAgICAgICAgICBsZW5zQXJyYXlDb3VudCsrOworCisgICAgICAgICAgICAgICAgcHJpbnRmKCJXJWQgIiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkZVTEwgIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuc0FycmF5Q291bnQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG5jcEJ1ZmZlci5Jc0VtcHR5KCkgPT0gdHJ1ZSwgIklzRW1wdHkgZmFpbGVkLiIpOworICAgICAgICAgICAgcHJpbnRmKCJFTVBUWSAiKTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcHJpbnRmKCJcbiAtLSBQQVNTXG4iKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2Uoc0luc3RhbmNlKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIG90CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIG90OjpUZXN0TmNwRnJhbWVCdWZmZXIoKTsKKyAgICBvdDo6VGVzdEZ1enpOY3BGcmFtZUJ1ZmZlcigpOworICAgIHByaW50ZigiXG5BbGwgdGVzdHMgcGFzc2VkLlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9wbGF0Zm9ybS5jcHAgYi90ZXN0cy91bml0L3Rlc3RfcGxhdGZvcm0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2FmZGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfcGxhdGZvcm0uY3BwCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAidGVzdF9wbGF0Zm9ybS5oIgorCisjaWYgX1dJTjMyCitfX2ZvcmNlaW5saW5lIGludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKikKK3sKKyAgICBEV09SRCB0aWNrID0gR2V0VGlja0NvdW50KCk7CisgICAgdHYtPnR2X3NlYyA9IChsb25nKSh0aWNrIC8gMTAwMCk7CisgICAgdHYtPnR2X3VzZWMgPSAobG9uZykodGljayAqIDEwMDApOworICAgIHJldHVybiAwOworfQorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKK2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU2V0ID0gZmFsc2U7Cit1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybU5leHQgPSAwOwordGVzdFBsYXRBbGFybVN0b3AgICAgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TdG9wID0gTlVMTDsKK3Rlc3RQbGF0QWxhcm1TdGFydEF0ICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU3RhcnRBdCA9IE5VTEw7Cit0ZXN0UGxhdEFsYXJtR2V0Tm93ICAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybUdldE5vdyA9IE5VTEw7CisKK290UmFkaW9DYXBzICAgICAgICAgICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvQ2FwcyA9IE9UX1JBRElPX0NBUFNfTk9ORTsKK3Rlc3RQbGF0UmFkaW9TZXRQYW5JZCAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvU2V0UGFuSWQgPSBOVUxMOwordGVzdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyBnX3Rlc3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MgPSBOVUxMOwordGVzdFBsYXRSYWRpb0lzRW5hYmxlZCAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQgPSBOVUxMOwordGVzdFBsYXRSYWRpb0VuYWJsZSAgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9FbmFibGUgPSBOVUxMOwordGVzdFBsYXRSYWRpb0Rpc2FibGUgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9EaXNhYmxlID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3MgICAgZ190ZXN0UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9SZWNlaXZlICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvUmVjZWl2ZSA9IE5VTEw7Cit0ZXN0UGxhdFJhZGlvVHJhbnNtaXQgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1RyYW5zbWl0ID0gTlVMTDsKK3Rlc3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlciAgZ190ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIgPSBOVUxMOworCit2b2lkIHRlc3RQbGF0UmVzZXRUb0RlZmF1bHRzKHZvaWQpCit7CisgICAgZ190ZXN0UGxhdEFsYXJtU2V0ID0gZmFsc2U7CisgICAgZ190ZXN0UGxhdEFsYXJtTmV4dCA9IDA7CisgICAgZ190ZXN0UGxhdEFsYXJtU3RvcCA9IE5VTEw7CisgICAgZ190ZXN0UGxhdEFsYXJtU3RhcnRBdCA9IE5VTEw7CisgICAgZ190ZXN0UGxhdEFsYXJtR2V0Tm93ID0gTlVMTDsKKworICAgIGdfdGVzdFBsYXRSYWRpb0NhcHMgPSBPVF9SQURJT19DQVBTX05PTkU7CisgICAgZ190ZXN0UGxhdFJhZGlvU2V0UGFuSWQgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyA9IE5VTEw7CisgICAgZ190ZXN0UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzID0gTlVMTDsKKyAgICBnX3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb0VuYWJsZSA9IE5VTEw7CisgICAgZ190ZXN0UGxhdFJhZGlvRGlzYWJsZSA9IE5VTEw7CisgICAgZ190ZXN0UGxhdFJhZGlvUmVjZWl2ZSA9IE5VTEw7CisgICAgZ190ZXN0UGxhdFJhZGlvVHJhbnNtaXQgPSBOVUxMOworICAgIGdfdGVzdFBsYXRSYWRpb0dldFRyYW5zbWl0QnVmZmVyID0gTlVMTDsKK30KKworb3RJbnN0YW5jZSAqdGVzdEluaXRJbnN0YW5jZSh2b2lkKQoreworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gTlVMTDsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHNpemVfdCBpbnN0YW5lQnVmZmVyTGVuZ3RoID0gMDsKKyAgICB1aW50OF90ICppbnN0YW5jZUJ1ZmZlciA9IE5VTEw7CisKKyAgICAvLyBDYWxsIHRvIHF1ZXJ5IHRoZSBidWZmZXIgc2l6ZQorICAgICh2b2lkKW90SW5zdGFuY2VJbml0KE5VTEwsICZpbnN0YW5lQnVmZmVyTGVuZ3RoKTsKKworICAgIC8vIENhbGwgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlcgorICAgIGluc3RhbmNlQnVmZmVyID0gKHVpbnQ4X3QgKiltYWxsb2MoaW5zdGFuZUJ1ZmZlckxlbmd0aCk7CisgICAgVmVyaWZ5T3JRdWl0KGluc3RhbmNlQnVmZmVyICE9IE5VTEwsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3RJbnN0YW5jZSIpOworICAgIG1lbXNldChpbnN0YW5jZUJ1ZmZlciwgMCwgaW5zdGFuZUJ1ZmZlckxlbmd0aCk7CisKKyAgICAvLyBJbml0aWFsaXplIE9wZW5UaHJlYWQgd2l0aCB0aGUgYnVmZmVyCisgICAgaW5zdGFuY2UgPSBvdEluc3RhbmNlSW5pdChpbnN0YW5jZUJ1ZmZlciwgJmluc3RhbmVCdWZmZXJMZW5ndGgpOworI2Vsc2UKKyAgICBpbnN0YW5jZSA9IG90SW5zdGFuY2VJbml0U2luZ2xlKCk7CisjZW5kaWYKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCB0ZXN0RnJlZUluc3RhbmNlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKK3sKKyAgICBvdEluc3RhbmNlRmluYWxpemUoYUluc3RhbmNlKTsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIGZyZWUoYUluc3RhbmNlKTsKKyNlbmRpZgorfQorCitib29sIHNEaWFnTW9kZSA9IGZhbHNlOworCitleHRlcm4gIkMiIHsKKworI2lmIE9QRU5USFJFQURfRU5BQkxFX01VTFRJUExFX0lOU1RBTkNFUworICAgIHZvaWQgKm90UGxhdENBbGxvYyhzaXplX3QgYU51bSwgc2l6ZV90IGFTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxvYyhhTnVtLCBhU2l6ZSk7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRGcmVlKHZvaWQgKmFQdHIpCisgICAgeworICAgICAgICBmcmVlKGFQdHIpOworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCBvdFRhc2tsZXRzU2lnbmFsUGVuZGluZyhvdEluc3RhbmNlICopCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gQWxhcm0KKyAgICAvLworCisgICAgdm9pZCBvdFBsYXRBbGFybVN0b3Aob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRBbGFybVN0b3ApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybVN0b3AoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybVNldCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRBbGFybVN0YXJ0QXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MzJfdCBhVDAsIHVpbnQzMl90IGFEdCkKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0QWxhcm1TdGFydEF0KQorICAgICAgICB7CisgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TdGFydEF0KGFJbnN0YW5jZSwgYVQwLCBhRHQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybU5leHQgPSBhVDAgKyBhRHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1aW50MzJfdCBvdFBsYXRBbGFybUdldE5vdyh2b2lkKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRBbGFybUdldE5vdykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdGVzdFBsYXRBbGFybUdldE5vdygpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKyAgICAgICAgICAgIHJldHVybiAodWludDMyX3QpKCh0di50dl9zZWMgKiAxMDAwKSArICh0di50dl91c2VjIC8gMTAwMCkgKyAxMjM0NTYpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSYWRpbworICAgIC8vCisKKyAgICB2b2lkIG90UGxhdFJhZGlvR2V0SWVlZUV1aTY0KG90SW5zdGFuY2UgKiwgdWludDhfdCAqKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvU2V0UGFuSWQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhUGFuSWQpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvU2V0UGFuSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1NldFBhbklkKGFJbnN0YW5jZSwgYVBhbklkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50OF90ICphRXh0QWRkcikKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0UmFkaW9TZXRFeHRlbmRlZEFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyhhSW5zdGFuY2UsIGFFeHRBZGRyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3Mob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhU2hvcnRBZGRyKQorICAgIHsKKyAgICAgICAgaWYgKGdfdGVzdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKGFJbnN0YW5jZSwgYVNob3J0QWRkcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvU2V0UHJvbWlzY3VvdXMob3RJbnN0YW5jZSAqLCBib29sKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG90UGxhdFJhZGlvSXNFbmFibGVkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQoYUluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYWRpb0VuYWJsZShvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvRW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ190ZXN0UGxhdFJhZGlvRW5hYmxlKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFkaW9EaXNhYmxlKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGlmIChnX3Rlc3RQbGF0UmFkaW9FbmFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0UmFkaW9EaXNhYmxlKGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFkaW9TbGVlcChvdEluc3RhbmNlICopCisgICAgeworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvUmVjZWl2ZShvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQ4X3QgYUNoYW5uZWwpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvUmVjZWl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdGVzdFBsYXRSYWRpb1JlY2VpdmUoYUluc3RhbmNlLCBhQ2hhbm5lbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFkaW9UcmFuc21pdChvdEluc3RhbmNlICphSW5zdGFuY2UsIG90UmFkaW9GcmFtZSAqYUZyYW1lKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUZyYW1lOworCisgICAgICAgIGlmIChnX3Rlc3RQbGF0UmFkaW9UcmFuc21pdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdGVzdFBsYXRSYWRpb1RyYW5zbWl0KGFJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG90UmFkaW9GcmFtZSAqb3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICBpZiAoZ190ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3Rlc3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcihhSW5zdGFuY2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChvdFJhZGlvRnJhbWUgKikwOworICAgICAgICB9CisgICAgfQorCisgICAgaW50OF90IG90UGxhdFJhZGlvR2V0UnNzaShvdEluc3RhbmNlICopCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBvdFJhZGlvQ2FwcyBvdFBsYXRSYWRpb0dldENhcHMob3RJbnN0YW5jZSAqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdfdGVzdFBsYXRSYWRpb0NhcHM7CisgICAgfQorCisgICAgYm9vbCBvdFBsYXRSYWRpb0dldFByb21pc2N1b3VzKG90SW5zdGFuY2UgKikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvRW5hYmxlU3JjTWF0Y2gob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBib29sIGFFbmFibGUpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgICh2b2lkKWFFbmFibGU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYWRpb0FkZFNyY01hdGNoU2hvcnRFbnRyeShvdEluc3RhbmNlICphSW5zdGFuY2UsIGNvbnN0IHVpbnQxNl90IGFTaG9ydEFkZHJlc3MpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgICh2b2lkKWFTaG9ydEFkZHJlc3M7CisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0UmFkaW9BZGRTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgICh2b2lkKWFFeHRBZGRyZXNzOworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cnkob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBjb25zdCB1aW50MTZfdCBhU2hvcnRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhU2hvcnRBZGRyZXNzOworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaEV4dEVudHJ5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgY29uc3QgdWludDhfdCAqYUV4dEFkZHJlc3MpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgICh2b2lkKWFFeHRBZGRyZXNzOworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvQ2xlYXJTcmNNYXRjaFNob3J0RW50cmllcyhvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRSYWRpb0NsZWFyU3JjTWF0Y2hFeHRFbnRyaWVzKG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFJhZGlvRW5lcmd5U2NhbihvdEluc3RhbmNlICosIHVpbnQ4X3QsIHVpbnQxNl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdFJhZGlvU2V0RGVmYXVsdFR4UG93ZXIob3RJbnN0YW5jZSAqYUluc3RhbmNlLCBpbnQ4X3QgYVBvd2VyKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhUG93ZXI7CisgICAgfQorCisgICAgaW50OF90IG90UGxhdFJhZGlvR2V0UmVjZWl2ZVNlbnNpdGl2aXR5KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8vCisgICAgLy8gUmFuZG9tCisgICAgLy8KKworICAgIHVpbnQzMl90IG90UGxhdFJhbmRvbUdldCh2b2lkKQorICAgIHsKKyNpZiBfV0lOMzIKKyAgICAgICAgcmV0dXJuICh1aW50MzJfdClyYW5kKCk7CisjZWxzZQorICAgICAgICByZXR1cm4gKHVpbnQzMl90KXJhbmRvbSgpOworI2VuZGlmCisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRSYW5kb21HZXRUcnVlKHVpbnQ4X3QgKmFPdXRwdXQsIHVpbnQxNl90IGFPdXRwdXRMZW5ndGgpCisgICAgeworICAgICAgICBvdEVycm9yIGVycm9yID0gT1RfRVJST1JfTk9ORTsKKworICAgICAgICBWZXJpZnlPckV4aXQoYU91dHB1dCwgZXJyb3IgPSBPVF9FUlJPUl9JTlZBTElEX0FSR1MpOworCisgICAgICAgIGZvciAodWludDE2X3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgYU91dHB1dExlbmd0aDsgbGVuZ3RoKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGFPdXRwdXRbbGVuZ3RoXSA9ICh1aW50OF90KW90UGxhdFJhbmRvbUdldCgpOworICAgICAgICB9CisKK2V4aXQ6CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIERpYWcKKyAgICAvLworCisgICAgdm9pZCBvdFBsYXREaWFnUHJvY2VzcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICphT3V0cHV0KQorICAgIHsKKyAgICAgICAgLy8gbm8gbW9yZSBkaWFnbm9zdGljcyBmZWF0dXJlcyBmb3IgUG9zaXggcGxhdGZvcm0KKyAgICAgICAgc3ByaW50ZihhT3V0cHV0LCAiZGlhZyBmZWF0dXJlICclcycgaXMgbm90IHN1cHBvcnRlZFxyXG4iLCBhcmd2WzBdKTsKKyAgICAgICAgKHZvaWQpYXJnYzsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdERpYWdNb2RlU2V0KGJvb2wgYU1vZGUpCisgICAgeworICAgICAgICBzRGlhZ01vZGUgPSBhTW9kZTsKKyAgICB9CisKKyAgICBib29sIG90UGxhdERpYWdNb2RlR2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBzRGlhZ01vZGU7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXREaWFnQWxhcm1GaXJlZChvdEluc3RhbmNlICopCisgICAgeworICAgIH0KKworICAgIHZvaWQgb3RQbGF0RGlhZ1JhZGlvVHJhbnNtaXREb25lKG90SW5zdGFuY2UgKiwgb3RSYWRpb0ZyYW1lICosIG90RXJyb3IpCisgICAgeworICAgIH0KKworICAgIHZvaWQgb3RQbGF0RGlhZ1JhZGlvUmVjZWl2ZURvbmUob3RJbnN0YW5jZSAqLCBvdFJhZGlvRnJhbWUgKiwgb3RFcnJvcikKKyAgICB7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBVYXJ0CisgICAgLy8KKworICAgIHZvaWQgb3RQbGF0VWFydFNlbmREb25lKHZvaWQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgb3RQbGF0VWFydFJlY2VpdmVkKGNvbnN0IHVpbnQ4X3QgKiwgdWludDE2X3QpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gTWlzYworICAgIC8vCisKKyAgICB2b2lkIG90UGxhdFJlc2V0KG90SW5zdGFuY2UgKmFJbnN0YW5jZSkKKyAgICB7CisgICAgICAgICh2b2lkKWFJbnN0YW5jZTsKKyAgICB9CisKKyAgICBvdFBsYXRSZXNldFJlYXNvbiBvdFBsYXRHZXRSZXNldFJlYXNvbihvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgIHJldHVybiBPVF9QTEFUX1JFU0VUX1JFQVNPTl9QT1dFUl9PTjsKKyAgICB9CisKKyAgICB2b2lkIG90UGxhdExvZyhvdExvZ0xldmVsLCBvdExvZ1JlZ2lvbiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0dGluZ3MKKyAgICAvLworCisgICAgdm9pZCBvdFBsYXRTZXR0aW5nc0luaXQob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0U2V0dGluZ3NCZWdpbkNoYW5nZShvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRTZXR0aW5nc0NvbW1pdENoYW5nZShvdEluc3RhbmNlICphSW5zdGFuY2UpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRTZXR0aW5nc0FiYW5kb25DaGFuZ2Uob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0U2V0dGluZ3NHZXQob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4LCB1aW50OF90ICphVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqYVZhbHVlTGVuZ3RoKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhS2V5OworICAgICAgICAodm9pZClhSW5kZXg7CisgICAgICAgICh2b2lkKWFWYWx1ZTsKKyAgICAgICAgKHZvaWQpYVZhbHVlTGVuZ3RoOworCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT1RfRk9VTkQ7CisgICAgfQorCisgICAgb3RFcnJvciBvdFBsYXRTZXR0aW5nc1NldChvdEluc3RhbmNlICphSW5zdGFuY2UsIHVpbnQxNl90IGFLZXksIGNvbnN0IHVpbnQ4X3QgKmFWYWx1ZSwgdWludDE2X3QgYVZhbHVlTGVuZ3RoKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhS2V5OworICAgICAgICAodm9pZClhVmFsdWU7CisgICAgICAgICh2b2lkKWFWYWx1ZUxlbmd0aDsKKworICAgICAgICByZXR1cm4gT1RfRVJST1JfTk9ORTsKKyAgICB9CisKKyAgICBvdEVycm9yIG90UGxhdFNldHRpbmdzQWRkKG90SW5zdGFuY2UgKmFJbnN0YW5jZSwgdWludDE2X3QgYUtleSwgY29uc3QgdWludDhfdCAqYVZhbHVlLCB1aW50MTZfdCBhVmFsdWVMZW5ndGgpCisgICAgeworICAgICAgICAodm9pZClhSW5zdGFuY2U7CisgICAgICAgICh2b2lkKWFLZXk7CisgICAgICAgICh2b2lkKWFWYWx1ZTsKKyAgICAgICAgKHZvaWQpYVZhbHVlTGVuZ3RoOworCisgICAgICAgIHJldHVybiBPVF9FUlJPUl9OT05FOworICAgIH0KKworICAgIG90RXJyb3Igb3RQbGF0U2V0dGluZ3NEZWxldGUob3RJbnN0YW5jZSAqYUluc3RhbmNlLCB1aW50MTZfdCBhS2V5LCBpbnQgYUluZGV4KQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgICAgICAodm9pZClhS2V5OworICAgICAgICAodm9pZClhSW5kZXg7CisKKyAgICAgICAgcmV0dXJuIE9UX0VSUk9SX05PTkU7CisgICAgfQorCisgICAgdm9pZCBvdFBsYXRTZXR0aW5nc1dpcGUob3RJbnN0YW5jZSAqYUluc3RhbmNlKQorICAgIHsKKyAgICAgICAgKHZvaWQpYUluc3RhbmNlOworICAgIH0KKworfSAvLyBleHRlcm4gIkMiCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfcGxhdGZvcm0uaCBiL3Rlc3RzL3VuaXQvdGVzdF9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmZmNzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfcGxhdGZvcm0uaApAQCAtMCwwICsxLDk4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRFU1RfUExBVEZPUk1fSAorI2RlZmluZSBURVNUX1BMQVRGT1JNX0gKKworI2lmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9jb25maWcuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL29wZW50aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVudGhyZWFkL3BsYXRmb3JtL2FsYXJtLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9taXNjLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9yYWRpby5oPgorI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmg+CisKKyNpbmNsdWRlICJjb21tb24vY29kZV91dGlscy5ocHAiCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworLy8KKy8vIEFsYXJtIFBsYXRmb3JtCisvLworCit0eXBlZGVmIHZvaWQgKCp0ZXN0UGxhdEFsYXJtU3RvcCkob3RJbnN0YW5jZSAqKTsKK3R5cGVkZWYgdm9pZCAoKnRlc3RQbGF0QWxhcm1TdGFydEF0KShvdEluc3RhbmNlICosIHVpbnQzMl90LCB1aW50MzJfdCk7Cit0eXBlZGVmIHVpbnQzMl90ICgqdGVzdFBsYXRBbGFybUdldE5vdykodm9pZCk7CisKK2V4dGVybiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TZXQ7CitleHRlcm4gdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtTmV4dDsKK2V4dGVybiB0ZXN0UGxhdEFsYXJtU3RvcCAgICAgICAgICAgICAgICBnX3Rlc3RQbGF0QWxhcm1TdG9wOworZXh0ZXJuIHRlc3RQbGF0QWxhcm1TdGFydEF0ICAgICAgICAgICAgIGdfdGVzdFBsYXRBbGFybVN0YXJ0QXQ7CitleHRlcm4gdGVzdFBsYXRBbGFybUdldE5vdyAgICAgICAgICAgICAgZ190ZXN0UGxhdEFsYXJtR2V0Tm93OworCisvLworLy8gUmFkaW8gUGxhdGZvcm0KKy8vCisKK3R5cGVkZWYgdm9pZCAoKnRlc3RQbGF0UmFkaW9TZXRQYW5JZCkob3RJbnN0YW5jZSAqLCB1aW50MTZfdCk7Cit0eXBlZGVmIHZvaWQgKCp0ZXN0UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzKShvdEluc3RhbmNlICosIHVpbnQ4X3QgKik7Cit0eXBlZGVmIHZvaWQgKCp0ZXN0UGxhdFJhZGlvU2V0U2hvcnRBZGRyZXNzKShvdEluc3RhbmNlICosIHVpbnQxNl90KTsKKwordHlwZWRlZiBib29sKCp0ZXN0UGxhdFJhZGlvSXNFbmFibGVkKShvdEluc3RhbmNlICopOwordHlwZWRlZiBvdEVycm9yKCp0ZXN0UGxhdFJhZGlvRW5hYmxlKShvdEluc3RhbmNlICopOwordHlwZWRlZiBvdEVycm9yKCp0ZXN0UGxhdFJhZGlvRGlzYWJsZSkob3RJbnN0YW5jZSAqKTsKK3R5cGVkZWYgb3RFcnJvcigqdGVzdFBsYXRSYWRpb1JlY2VpdmUpKG90SW5zdGFuY2UgKiwgdWludDhfdCk7Cit0eXBlZGVmIG90RXJyb3IoKnRlc3RQbGF0UmFkaW9UcmFuc21pdCkob3RJbnN0YW5jZSAqKTsKK3R5cGVkZWYgb3RSYWRpb0ZyYW1lICooKnRlc3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcikob3RJbnN0YW5jZSAqKTsKKworZXh0ZXJuIG90UmFkaW9DYXBzICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb0NhcHM7CitleHRlcm4gdGVzdFBsYXRSYWRpb1NldFBhbklkICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvU2V0UGFuSWQ7CitleHRlcm4gdGVzdFBsYXRSYWRpb1NldEV4dGVuZGVkQWRkcmVzcyAgZ190ZXN0UGxhdFJhZGlvU2V0RXh0ZW5kZWRBZGRyZXNzOworZXh0ZXJuIHRlc3RQbGF0UmFkaW9TZXRTaG9ydEFkZHJlc3MgICAgIGdfdGVzdFBsYXRSYWRpb1NldFNob3J0QWRkcmVzczsKK2V4dGVybiB0ZXN0UGxhdFJhZGlvSXNFbmFibGVkICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9Jc0VuYWJsZWQ7CitleHRlcm4gdGVzdFBsYXRSYWRpb0VuYWJsZSAgICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvRW5hYmxlOworZXh0ZXJuIHRlc3RQbGF0UmFkaW9EaXNhYmxlICAgICAgICAgICAgIGdfdGVzdFBsYXRSYWRpb0Rpc2FibGU7CitleHRlcm4gdGVzdFBsYXRSYWRpb1JlY2VpdmUgICAgICAgICAgICAgZ190ZXN0UGxhdFJhZGlvUmVjZWl2ZTsKK2V4dGVybiB0ZXN0UGxhdFJhZGlvVHJhbnNtaXQgICAgICAgICAgICBnX3Rlc3RQbGF0UmFkaW9UcmFuc21pdDsKK2V4dGVybiB0ZXN0UGxhdFJhZGlvR2V0VHJhbnNtaXRCdWZmZXIgICBnX3Rlc3RQbGF0UmFkaW9HZXRUcmFuc21pdEJ1ZmZlcjsKKworb3RJbnN0YW5jZSAqdGVzdEluaXRJbnN0YW5jZSh2b2lkKTsKK3ZvaWQgdGVzdEZyZWVJbnN0YW5jZShvdEluc3RhbmNlICphSW5zdGFuY2UpOworCisvLyBSZXNldHMgcGxhdGZvcm0gZnVuY3Rpb25zIHRvIGRlZmF1bHRzCit2b2lkIHRlc3RQbGF0UmVzZXRUb0RlZmF1bHRzKHZvaWQpOworCisjZW5kaWYgLy8gVEVTVF9QTEFURk9STV9ICmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfcHJpb3JpdHlfcXVldWUuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTdjMWYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3ByaW9yaXR5X3F1ZXVlLmNwcApAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9vcGVudGhyZWFkLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC1pbnN0YW5jZS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmhwcCIKKyNpbmNsdWRlICJjb21tb24vbWVzc2FnZS5ocHAiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdHJpbmcuaCIKKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworI2RlZmluZSBrTnVtVGVzdE1lc3NhZ2VzICAgICAgMworCisvLyBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBjb250ZW50IG9mIHRoZSBwcmlvcml0eSBxdWV1ZSB0byBtYXRjaCB0aGUgcGFzc2VkIGluIG1lc3NhZ2VzCit2b2lkIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KG90OjpQcmlvcml0eVF1ZXVlICZhUHJpb3JpdHlRdWV1ZSwgaW50IGFFeHBlY3RlZExlbmd0aCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBvdDo6TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBvdDo6TWVzc2FnZSAqbXNnQXJnOworICAgIHVpbnQ4X3QgY3VyUHJpb3JpdHkgPSAweGZmOworICAgIHVpbnQxNl90IG1zZ0NvdW50LCBidWZDb3VudDsKKworICAgIC8vIENoZWNrIHRoZSBgR2V0SW5mb2AKKyAgICBhUHJpb3JpdHlRdWV1ZS5HZXRJbmZvKG1zZ0NvdW50LCBidWZDb3VudCk7CisgICAgVmVyaWZ5T3JRdWl0KG1zZ0NvdW50ID09IGFFeHBlY3RlZExlbmd0aCwgIkdldEluZm8oKSByZXN1bHQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgbGVuLlxuIik7CisKKyAgICB2YV9zdGFydChhcmdzLCBhRXhwZWN0ZWRMZW5ndGgpOworCisgICAgaWYgKGFFeHBlY3RlZExlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgbWVzc2FnZSA9IGFQcmlvcml0eVF1ZXVlLkdldEhlYWQoKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1lc3NhZ2UgPT0gTlVMTCwgIlByaW9yaXR5UXVldWUgaXMgbm90IGVtcHR5IHdoZW4gZXhwZWN0ZWQgbGVuIGlzIHplcm8uXG4iKTsKKworICAgICAgICBWZXJpZnlPclF1aXQoYVByaW9yaXR5UXVldWUuR2V0SGVhZEZvclByaW9yaXR5KDApID09IE5VTEwsICJHZXRIZWFkRm9yUHJpb3JpdHkoKSBub24tTlVMTCB3aGVuIGVtcHR5XG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFQcmlvcml0eVF1ZXVlLkdldEhlYWRGb3JQcmlvcml0eSgxKSA9PSBOVUxMLCAiR2V0SGVhZEZvclByaW9yaXR5KCkgbm9uLU5VTEwgd2hlbiBlbXB0eVxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkRm9yUHJpb3JpdHkoMikgPT0gTlVMTCwgIkdldEhlYWRGb3JQcmlvcml0eSgpIG5vbi1OVUxMIHdoZW4gZW1wdHlcbiIpOworICAgICAgICBWZXJpZnlPclF1aXQoYVByaW9yaXR5UXVldWUuR2V0SGVhZEZvclByaW9yaXR5KDMpID09IE5VTEwsICJHZXRIZWFkRm9yUHJpb3JpdHkoKSBub24tTlVMTCB3aGVuIGVtcHR5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgbWVzc2FnZXMgaW4gdGhlIHF1ZXVlIGFuZCB2ZXJpZnkgdGhleSBtYXRjaCB0aGUgcGFzc2VkLWluIG1lc3NhZ2VzCisgICAgICAgIGZvciAobWVzc2FnZSA9IGFQcmlvcml0eVF1ZXVlLkdldEhlYWQoKTsgbWVzc2FnZSAhPSBOVUxMOyBtZXNzYWdlID0gbWVzc2FnZS0+R2V0TmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoICE9IDAsICJQcmlvcml0eVF1ZXVlIGNvbnRhaW5zIG1vcmUgZW50cmllcyB0aGFuIGV4cGVjdGVkLlxuIik7CisKKyAgICAgICAgICAgIG1zZ0FyZyA9IHZhX2FyZyhhcmdzLCBvdDo6TWVzc2FnZSAqKTsKKworICAgICAgICAgICAgaWYgKG1zZ0FyZy0+R2V0UHJpb3JpdHkoKSAhPSBjdXJQcmlvcml0eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGN1clByaW9yaXR5Kys7IGN1clByaW9yaXR5ICE9IG1zZ0FyZy0+R2V0UHJpb3JpdHkoKTsgY3VyUHJpb3JpdHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBgR2V0SGVhZEZvclByaW9yaXR5YCBpcyBOVUxMIGlmIHRoZXJlIGFyZSBubyBleHBlY3RlZCBtZXNzYWdlIGZvciB0aGlzIHByaW9yaXR5IGxldmVsLgorICAgICAgICAgICAgICAgICAgICBWZXJpZnlPclF1aXQoCisgICAgICAgICAgICAgICAgICAgICAgICBhUHJpb3JpdHlRdWV1ZS5HZXRIZWFkRm9yUHJpb3JpdHkoY3VyUHJpb3JpdHkpID09IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHJpb3JpdHlRdWV1ZTo6R2V0SGVhZEZvclByaW9yaXR5IGlzIG5vbi1OVUxMIHdoZW4gbm8gZXhwZWN0ZWQgbXNnIGZvciB0aGlzIHByaW9yaXR5LlxuIgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBgR2V0SGVhZEZvclByaW9yaXR5YC4KKyAgICAgICAgICAgICAgICBWZXJpZnlPclF1aXQoCisgICAgICAgICAgICAgICAgICAgIGFQcmlvcml0eVF1ZXVlLkdldEhlYWRGb3JQcmlvcml0eShjdXJQcmlvcml0eSkgPT0gbXNnQXJnLAorICAgICAgICAgICAgICAgICAgICAiUHJpb3JpdHlRdWV1ZTo6R2V0SGVhZEZvclByaW9yaXR5IGZhaWxlZC5cbiIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayB0aGUgcXVldWVkIG1lc3NhZ2UgdG8gbWF0Y2ggdGhlIG9uZSBmcm9tIGFyZ3VtZW50IGxpc3QKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdChtc2dBcmcgPT0gbWVzc2FnZSwgIlByaW9yaXR5UXVldWUgY29udGVudCBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIGV4cGVjdGVkLlxuIik7CisKKyAgICAgICAgICAgIGFFeHBlY3RlZExlbmd0aC0tOworICAgICAgICB9CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCA9PSAwLCAiUHJpb3JpdHlRdWV1ZSBjb250YWlucyBsZXNzIGVudHJpZXMgdGhhbiBleHBlY3RlZC5cbiIpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBgR2V0SGVhZEZvclByaW9yaXR5YCBpcyBOVUxMIGlmIHRoZXJlIGFyZSBubyBleHBlY3RlZCBtZXNzYWdlIGZvciBhbnkgcmVtYWluaW5nIHByaW9yaXR5IGxldmVsLgorICAgICAgICBmb3IgKGN1clByaW9yaXR5Kys7IGN1clByaW9yaXR5IDwgNDsgY3VyUHJpb3JpdHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KAorICAgICAgICAgICAgICAgIGFQcmlvcml0eVF1ZXVlLkdldEhlYWRGb3JQcmlvcml0eShjdXJQcmlvcml0eSkgPT0gTlVMTCwKKyAgICAgICAgICAgICAgICAiUHJpb3JpdHlRdWV1ZTo6R2V0SGVhZEZvclByaW9yaXR5IGlzIG5vbi1OVUxMIHdoZW4gbm8gZXhwZWN0ZWQgbXNnIGZvciB0aGlzIHByaW9yaXR5LlxuIgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhX2VuZChhcmdzKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGUgY29udGVudCBvZiB0aGUgYWxsIG1lc3NhZ2UgcXVldWUgdG8gbWF0Y2ggdGhlIHBhc3NlZCBpbiBtZXNzYWdlcwordm9pZCBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQob3Q6Ok1lc3NhZ2VQb29sICphTWVzc2FnZVBvb2wsIGludCBhRXhwZWN0ZWRMZW5ndGgsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgb3Q6Ok1lc3NhZ2VQb29sOjpJdGVyYXRvciBpdDsKKyAgICBvdDo6TWVzc2FnZSAqbXNnQXJnOworCisgICAgdmFfc3RhcnQoYXJncywgYUV4cGVjdGVkTGVuZ3RoKTsKKworICAgIGlmIChhRXhwZWN0ZWRMZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdChhTWVzc2FnZVBvb2wtPkdldEFsbE1lc3NhZ2VzSGVhZCgpLklzRW1wdHkoKSwgIkhlYWQgaXMgbm90IGVtcHR5IHdoZW4gZXhwZWN0ZWQgbGVuIGlzIHplcm8uXG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KGFNZXNzYWdlUG9vbC0+R2V0QWxsTWVzc2FnZXNUYWlsKCkuSXNFbXB0eSgpLCAiVGFpbCBpcyBub3QgZW1wdHkgd2hlbiBleHBlY3RlZCBsZW4gaXMgemVyby5cbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGl0ID0gYU1lc3NhZ2VQb29sLT5HZXRBbGxNZXNzYWdlc0hlYWQoKTsgIWl0Lkhhc0VuZGVkKCkgOyBpdC5Hb1RvTmV4dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoICE9IDAsICJBbGxNZXNzYWdlc1F1ZXVlIGNvbnRhaW5zIG1vcmUgZW50cmllcyB0aGFuIGV4cGVjdGVkLlxuIik7CisgICAgICAgICAgICBtc2dBcmcgPSB2YV9hcmcoYXJncywgb3Q6Ok1lc3NhZ2UgKik7CisgICAgICAgICAgICBWZXJpZnlPclF1aXQobXNnQXJnID09IGl0LkdldE1lc3NhZ2UoKSwgIkFsbE1lc3NhZ2VzUXVldWUgY29udGVudCBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIGV4cGVjdGVkLlxuIik7CisgICAgICAgICAgICBhRXhwZWN0ZWRMZW5ndGgtLTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggPT0gMCwgIkFsbE1lc3NhZ2VzUXVldWUgY29udGFpbnMgbGVzcyBlbnRyaWVzIHRoYW4gZXhwZWN0ZWQuXG4iKTsKKyAgICB9CisKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGFsbCBtZXNzYWdlIHF1ZXVlIHRvIG1hdGNoIHRoZSBwYXNzZWQgaW4gbWVzc2FnZXMuIEl0IGdvZXMKKy8vIHRocm91Z2ggdGhlIEFsbE1lc3NhZ2VzIGxpc3QgaW4gcmV2ZXJzZS4KK3ZvaWQgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50SW5SZXZlcnNlKG90OjpNZXNzYWdlUG9vbCAqYU1lc3NhZ2VQb29sLCBpbnQgYUV4cGVjdGVkTGVuZ3RoLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIG90OjpNZXNzYWdlUG9vbDo6SXRlcmF0b3IgaXQ7CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ0FyZzsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGFFeHBlY3RlZExlbmd0aCk7CisKKyAgICBpZiAoYUV4cGVjdGVkTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQoYU1lc3NhZ2VQb29sLT5HZXRBbGxNZXNzYWdlc0hlYWQoKS5Jc0VtcHR5KCksICJIZWFkIGlzIG5vdCBlbXB0eSB3aGVuIGV4cGVjdGVkIGxlbiBpcyB6ZXJvLlxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChhTWVzc2FnZVBvb2wtPkdldEFsbE1lc3NhZ2VzVGFpbCgpLklzRW1wdHkoKSwgIlRhaWwgaXMgbm90IGVtcHR5IHdoZW4gZXhwZWN0ZWQgbGVuIGlzIHplcm8uXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpdCA9IGFNZXNzYWdlUG9vbC0+R2V0QWxsTWVzc2FnZXNUYWlsKCk7ICFpdC5IYXNFbmRlZCgpIDsgaXQuR29Ub1ByZXYoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCAhPSAwLCAiQWxsTWVzc2FnZXNRdWV1ZSBjb250YWlucyBtb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZC5cbiIpOworICAgICAgICAgICAgbXNnQXJnID0gdmFfYXJnKGFyZ3MsIG90OjpNZXNzYWdlICopOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ0FyZyA9PSBpdC5HZXRNZXNzYWdlKCksICJBbGxNZXNzYWdlc1F1ZXVlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZC5cbiIpOworICAgICAgICAgICAgYUV4cGVjdGVkTGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBWZXJpZnlPclF1aXQoYUV4cGVjdGVkTGVuZ3RoID09IDAsICJBbGxNZXNzYWdlc1F1ZXVlIGNvbnRhaW5zIGxlc3MgZW50cmllcyB0aGFuIGV4cGVjdGVkLlxuIik7CisgICAgfQorCisgICAgdmFfZW5kKGFyZ3MpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlIHF1ZXVlIHRvIG1hdGNoIHRoZSBwYXNzZWQgaW4gbWVzc2FnZXMKK3ZvaWQgVmVyaWZ5TXNnUXVldWVDb250ZW50KG90OjpNZXNzYWdlUXVldWUgJmFNZXNzYWdlUXVldWUsIGludCBhRXhwZWN0ZWRMZW5ndGgsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgb3Q6Ok1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ0FyZzsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGFFeHBlY3RlZExlbmd0aCk7CisKKyAgICBpZiAoYUV4cGVjdGVkTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBtZXNzYWdlID0gYU1lc3NhZ2VRdWV1ZS5HZXRIZWFkKCk7CisgICAgICAgIFZlcmlmeU9yUXVpdChtZXNzYWdlID09IE5VTEwsICJNZXNzYWdlUXVldWUgaXMgbm90IGVtcHR5IHdoZW4gZXhwZWN0ZWQgbGVuIGlzIHplcm8uXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChtZXNzYWdlID0gYU1lc3NhZ2VRdWV1ZS5HZXRIZWFkKCk7IG1lc3NhZ2UgIT0gTlVMTDsgbWVzc2FnZSA9IG1lc3NhZ2UtPkdldE5leHQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KGFFeHBlY3RlZExlbmd0aCAhPSAwLCAiTWVzc2FnZVF1ZXVlIGNvbnRhaW5zIG1vcmUgZW50cmllcyB0aGFuIGV4cGVjdGVkXG4iKTsKKworICAgICAgICAgICAgbXNnQXJnID0gdmFfYXJnKGFyZ3MsIG90OjpNZXNzYWdlICopOworICAgICAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ0FyZyA9PSBtZXNzYWdlLCAiTWVzc2FnZVF1ZXVlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBleHBlY3RlZC5cbiIpOworCisgICAgICAgICAgICBhRXhwZWN0ZWRMZW5ndGgtLTsKKyAgICAgICAgfQorCisgICAgICAgIFZlcmlmeU9yUXVpdChhRXhwZWN0ZWRMZW5ndGggPT0gMCwgIk1lc3NhZ2VRdWV1ZSBjb250YWlucyBsZXNzIGVudHJpZXMgdGhhbiBleHBlY3RlZFxuIik7CisgICAgfQorCisgICAgdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIFRlc3RQcmlvcml0eVF1ZXVlKHZvaWQpCit7CisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2U7CisgICAgb3Q6Ok1lc3NhZ2VQb29sICptZXNzYWdlUG9vbDsKKyAgICBvdDo6UHJpb3JpdHlRdWV1ZSBxdWV1ZTsKKyAgICBvdDo6TWVzc2FnZVF1ZXVlIG1lc3NhZ2VRdWV1ZTsKKyAgICBvdDo6TWVzc2FnZSAqbXNnSGlnaCAgICBba051bVRlc3RNZXNzYWdlc107CisgICAgb3Q6Ok1lc3NhZ2UgKm1zZ01lZCAgICAgW2tOdW1UZXN0TWVzc2FnZXNdOworICAgIG90OjpNZXNzYWdlICptc2dMb3cgICAgIFtrTnVtVGVzdE1lc3NhZ2VzXTsKKyAgICBvdDo6TWVzc2FnZSAqbXNnVmVyeUxvdyBba051bVRlc3RNZXNzYWdlc107CisgICAgb3Q6Ok1lc3NhZ2VQb29sOjpJdGVyYXRvciBpdDsKKworICAgIGluc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIFZlcmlmeU9yUXVpdChpbnN0YW5jZSAhPSBOVUxMLCAiTnVsbCBPcGVuVGhyZWFkIGluc3RhbmNlXG4iKTsKKworICAgIG1lc3NhZ2VQb29sID0gJmluc3RhbmNlLT5tSXA2Lm1NZXNzYWdlUG9vbDsKKworICAgIC8vIEFsbG9jYXRlIG1lc3NhZ2VzIHdpdGggZGlmZmVyZW50IHByaW9yaXRpZXMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtVGVzdE1lc3NhZ2VzOyBpKyspCisgICAgeworICAgICAgICBtc2dIaWdoW2ldID0gbWVzc2FnZVBvb2wtPk5ldyhvdDo6TWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgICAgICBWZXJpZnlPclF1aXQobXNnSGlnaFtpXSAhPSBOVUxMLCAiTWVzc2FnZTo6TmV3IGZhaWxlZFxuIik7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQobXNnSGlnaFtpXS0+U2V0UHJpb3JpdHkoMCksICJNZXNzYWdlOlNldFByaW9yaXR5IGZhaWxlZFxuIik7CisgICAgICAgIG1zZ01lZFtpXSA9IG1lc3NhZ2VQb29sLT5OZXcob3Q6Ok1lc3NhZ2U6OmtUeXBlSXA2LCAwKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ01lZFtpXSAhPSBOVUxMLCAiTWVzc2FnZTo6TmV3IGZhaWxlZFxuIik7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQobXNnTWVkW2ldLT5TZXRQcmlvcml0eSgxKSwgIk1lc3NhZ2U6U2V0UHJpb3JpdHkgZmFpbGVkXG4iKTsKKyAgICAgICAgbXNnTG93W2ldID0gbWVzc2FnZVBvb2wtPk5ldyhvdDo6TWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgICAgICBWZXJpZnlPclF1aXQobXNnTG93W2ldICE9IE5VTEwsICJNZXNzYWdlOjpOZXcgZmFpbGVkXG4iKTsKKyAgICAgICAgU3VjY2Vzc09yUXVpdChtc2dMb3dbaV0tPlNldFByaW9yaXR5KDIpLCAiTWVzc2FnZTpTZXRQcmlvcml0eSBmYWlsZWRcbiIpOworICAgICAgICBtc2dWZXJ5TG93W2ldID0gbWVzc2FnZVBvb2wtPk5ldyhvdDo6TWVzc2FnZTo6a1R5cGVJcDYsIDApOworICAgICAgICBWZXJpZnlPclF1aXQobXNnVmVyeUxvd1tpXSAhPSBOVUxMLCAiTWVzc2FnZTo6TmV3IGZhaWxlZFxuIik7CisgICAgICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1tpXS0+U2V0UHJpb3JpdHkoMyksICJNZXNzYWdlOlNldFByaW9yaXR5IGZhaWxlZFxuIik7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhlIGZhaWx1cmUgY2FzZSBmb3IgYFNldFByaW9yaXR5YCBmb3IgaW52YWxpZCBhcmd1bWVudC4KKyAgICBWZXJpZnlPclF1aXQoCisgICAgICAgIG1zZ0hpZ2hbMl0tPlNldFByaW9yaXR5KG90OjpNZXNzYWdlOjprTnVtUHJpb3JpdGllcykgPT0gT1RfRVJST1JfSU5WQUxJRF9BUkdTLAorICAgICAgICAiTWVzc2FnZTo6U2V0UHJpb3JpdHkoKSB3aXRoIG91dCBvZiByYW5nZSB2YWx1ZSBkaWQgbm90IGZhaWwgYXMgZXhwZWN0ZWQuXG4iCisgICAgKTsKKworICAgIC8vIENoZWNrIHRoZSBgR2V0UHJpb3JpdHkoKWAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1UZXN0TWVzc2FnZXM7IGkrKykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdChtc2dIaWdoW2ldLT5HZXRQcmlvcml0eSgpID09IDAsICJNZXNzYWdlOjpHZXRQcmlvcml0eSBmYWlsZWQuXG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KG1zZ01lZFtpXS0+R2V0UHJpb3JpdHkoKSA9PSAxLCAiTWVzc2FnZTo6R2V0UHJpb3JpdHkgZmFpbGVkLlxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChtc2dMb3dbaV0tPkdldFByaW9yaXR5KCkgPT0gMiwgIk1lc3NhZ2U6OkdldFByaW9yaXR5IGZhaWxlZC5cbiIpOworICAgICAgICBWZXJpZnlPclF1aXQobXNnVmVyeUxvd1tpXS0+R2V0UHJpb3JpdHkoKSA9PSAzLCAiTWVzc2FnZTo6R2V0UHJpb3JpdHkgZmFpbGVkLlxuIik7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IGNhc2Ugb2YgYW4gZW1wdHkgcXVldWUuCisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDApOworCisgICAgLy8gQWRkIG1zZ3MgaW4gZGlmZmVyZW50IG9yZGVycyBhbmQgY2hlY2sgdGhlIGNvbnRlbnQgb2YgcXVldWUuCisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dNZWRbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAxLCBtc2dNZWRbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRW5xdWV1ZSgqbXNnTWVkWzFdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMiwgbXNnTWVkWzBdLCBtc2dNZWRbMV0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRW5xdWV1ZSgqbXNnSGlnaFswXSksICJQcmlvcml0eVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ0hpZ2hbMF0sIG1zZ01lZFswXSwgbXNnTWVkWzFdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ0hpZ2hbMV0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCA0LCBtc2dIaWdoWzBdLCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dNZWRbMl0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCA1LCBtc2dIaWdoWzBdLCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSwgbXNnTWVkWzJdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ1ZlcnlMb3dbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCA2LCBtc2dIaWdoWzBdLCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0sIG1zZ01lZFsxXSwgbXNnTWVkWzJdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ0xvd1swXSksICJQcmlvcml0eVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDcsIG1zZ0hpZ2hbMF0sIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dNZWRbMl0sIG1zZ0xvd1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dWZXJ5TG93WzBdKTsKKworICAgIC8vIENoZWNrIHRoZSBNZXNzYWdlUG9vbDo6SXRlcmF0b3IgbWV0aG9kcy4KKyAgICBWZXJpZnlPclF1aXQoaXQuSXNFbXB0eSgpLCAiSXRlcmF0b3I6OklzRW1wdHkoKSBmYWlsZWQgdG8gcmV0dXJuIGB0cnVlYCBmb3IgYW4gZW1wdHkgaXRlcmF0b3IuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoaXQuR2V0TmV4dCgpLklzRW1wdHkoKSwgIkl0ZXJhdG9yOjpJc0VtcHR5KCkgZmFpbGVkIHRvIHJldHVybiBgdHJ1ZWAgZm9yIGFuIGVtcHR5IGl0ZXJhdG9yLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KGl0LkdldFByZXYoKS5Jc0VtcHR5KCksICJJdGVyYXRvcjo6SXNFbXB0eSgpIGZhaWxlZCB0byByZXR1cm4gYHRydWVgIGZvciBhbiBlbXB0eSBpdGVyYXRvci5cbiIpOworICAgIGl0LkdvVG9OZXh0KCk7CisgICAgVmVyaWZ5T3JRdWl0KGl0LklzRW1wdHkoKSwgIkl0ZXJhdG9yOjpJc0VtcHR5KCkgZmFpbGVkIHRvIHJldHVybiBgdHJ1ZWAgZm9yIGFuIGVtcHR5IGl0ZXJhdG9yLlxuIik7CisgICAgaXQuR29Ub05leHQoKTsKKyAgICBWZXJpZnlPclF1aXQoaXQuSXNFbXB0eSgpLCAiSXRlcmF0b3I6OklzRW1wdHkoKSBmYWlsZWQgdG8gcmV0dXJuIGB0cnVlYCBmb3IgYW4gZW1wdHkgaXRlcmF0b3IuXG4iKTsKKworICAgIGl0ID0gbWVzc2FnZVBvb2wtPkdldEFsbE1lc3NhZ2VzSGVhZCgpOworICAgIFZlcmlmeU9yUXVpdCghaXQuSXNFbXB0eSgpLCAiSXRlcmF0b3I6OklzRW1wdHkoKSBmYWlsZWQgdG8gcmV0dXJuIGBmYWxzZWAgd2hlbiBpdCBpcyBub3QgZW1wdHkuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoaXQuR2V0TWVzc2FnZSgpID09IG1zZ0hpZ2hbMF0sICJJdGVyYXRvcjo6R2V0TWVzc2FnZSgpIGZhaWxlZC5cbiIpOworICAgIGl0ID0gaXQuR2V0TmV4dCgpOworICAgIFZlcmlmeU9yUXVpdCghaXQuSXNFbXB0eSgpLCAiSXRlcmF0b3I6OklzRW1wdHkoKSBmYWlsZWQgdG8gcmV0dXJuIGBmYWxzZWAgd2hlbiBpdCBpcyBub3QgZW1wdHkuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoaXQuR2V0TWVzc2FnZSgpID09IG1zZ0hpZ2hbMV0sICJJdGVyYXRvcjo6R2V0TmV4dCgpIGZhaWxlZC5cbiIpOworICAgIGl0ID0gaXQuR2V0UHJldigpOworICAgIFZlcmlmeU9yUXVpdChpdC5HZXRNZXNzYWdlKCkgPT0gbXNnSGlnaFswXSwgIkl0ZXJhdG9yOjpHZXRQcmV2KCkgZmFpbGVkLlxuIik7CisgICAgaXQgPSBpdC5HZXRQcmV2KCk7CisgICAgVmVyaWZ5T3JRdWl0KGl0Lkhhc0VuZGVkKCksICJJdGVyYXRvcjo6R2V0UHJldigpIGZhaWxlZCB0byByZXR1cm4gZW1wdHkgYXQgaGVhZC5cbiIpOworICAgIGl0ID0gbWVzc2FnZVBvb2wtPkdldEFsbE1lc3NhZ2VzVGFpbCgpOworICAgIGl0ID0gaXQuR2V0TmV4dCgpOworICAgIFZlcmlmeU9yUXVpdChpdC5IYXNFbmRlZCgpLCAiSXRlcmF0b3I6OkdldE5leHQoKSBmYWlsZWQgdG8gcmV0dXJuIGVtcHR5IGF0IHRhaWwuXG4iKTsKKworICAgIC8vIENoZWNrIHRoZSBBbGxNZXNzYWdlIHF1ZXVlIGNvbnRlbnRzIChzaG91bGQgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgcHJpb3JpdHkgcXVldWUpLgorICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgNywgbXNnSGlnaFswXSwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ01lZFsyXSwgbXNnTG93WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dWZXJ5TG93WzBdKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnRJblJldmVyc2UobWVzc2FnZVBvb2wsIDcsIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSwgbXNnTWVkWzJdLCBtc2dNZWRbMV0sIG1zZ01lZFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnSGlnaFsxXSwgbXNnSGlnaFswXSk7CisKKyAgICAvLyBSZW1vdmUgbWVzc2FnZXMgaW4gZGlmZmVyZW50IG9yZGVyIGFuZCBjaGVjayB0aGUgY29udGVudCBvZiBxdWV1ZSBpbiBlYWNoIHN0ZXAuCisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dIaWdoWzBdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgNiwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ01lZFsyXSwgbXNnTG93WzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ01lZFsyXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDUsIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dMb3dbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRGVxdWV1ZSgqbXNnTG93WzBdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgNCwgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRGVxdWV1ZSgqbXNnTWVkWzFdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnSGlnaFsxXSwgbXNnTWVkWzBdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ1ZlcnlMb3dbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAyLCBtc2dIaWdoWzFdLCBtc2dNZWRbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRGVxdWV1ZSgqbXNnSGlnaFsxXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDEsIG1zZ01lZFswXSk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dNZWRbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAwKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDApOworCisgICAgLy8gQ2hlY2sgdGhlIGZhaWx1cmUgY2FzZXM6IEVucXVldWluZyBhbiBhbHJlYWR5IHF1ZXVlZCBtZXNzYWdlLCBvciBkZXF1ZXVpbmcgYSBtZXNzYWdlIG5vdCBxdWV1ZWQuCisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5FbnF1ZXVlKCptc2dIaWdoWzBdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMSwgbXNnSGlnaFswXSk7CisgICAgVmVyaWZ5T3JRdWl0KAorICAgICAgICBxdWV1ZS5FbnF1ZXVlKCptc2dIaWdoWzBdKSA9PSBPVF9FUlJPUl9BTFJFQURZLAorICAgICAgICAiRW5xdWV1aW5nIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UgZGlkIG5vdCBmYWlsIGFzIGV4cGVjdGVkLlxuIgorICAgICk7CisgICAgVmVyaWZ5T3JRdWl0KAorICAgICAgICBxdWV1ZS5EZXF1ZXVlKCptc2dNZWRbMF0pID09IE9UX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgIkRlcXVldWluZyBhIG1lc3NhZ2Ugbm90IHF1ZXVlZCwgZGlkIG5vdCBmYWlsIGFzIGV4cGVjdGVkLlxuIgorICAgICk7CisgICAgU3VjY2Vzc09yUXVpdChxdWV1ZS5EZXF1ZXVlKCptc2dIaWdoWzBdKSwgIlByaW9yaXR5UXVldWU6OkRlcXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMCk7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UgYW5kIGNoZWNrIHRoZSBvcmRlciBjaGFuZ2UgaW4gdGhlIHF1ZXVlLgorICAgIFN1Y2Nlc3NPclF1aXQocXVldWUuRW5xdWV1ZSgqbXNnTG93WzBdKSwgIlByaW9yaXR5UXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMSwgbXNnTG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ01lZFswXSksICJQcmlvcml0eVF1ZXVlOjpFbnF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDIsIG1zZ01lZFswXSwgbXNnTG93WzBdKTsKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkVucXVldWUoKm1zZ1ZlcnlMb3dbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAzLCBtc2dNZWRbMF0sIG1zZ0xvd1swXSwgbXNnVmVyeUxvd1swXSk7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG1lc3NhZ2VQb29sLCAzLCBtc2dNZWRbMF0sIG1zZ0xvd1swXSwgbXNnVmVyeUxvd1swXSk7CisKKyAgICBTdWNjZXNzT3JRdWl0KG1zZ0xvd1swXS0+U2V0UHJpb3JpdHkoMCksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTG93WzBdLCBtc2dNZWRbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1swXS0+U2V0UHJpb3JpdHkoMyksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTG93WzBdLCBtc2dNZWRbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1swXS0+U2V0UHJpb3JpdHkoMiksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTG93WzBdLCBtc2dNZWRbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1swXS0+U2V0UHJpb3JpdHkoMSksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTG93WzBdLCBtc2dNZWRbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgMywgbXNnTG93WzBdLCBtc2dNZWRbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1swXS0+U2V0UHJpb3JpdHkoMCksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTG93WzBdLCBtc2dWZXJ5TG93WzBdLCBtc2dNZWRbMF0pOworICAgIFN1Y2Nlc3NPclF1aXQobXNnTG93WzBdLT5TZXRQcmlvcml0eSgyKSwgIlNldFByaW9yaXR5IGZhaWxlZCBmb3IgYW4gYWxyZWFkeSBxdWV1ZWQgbWVzc2FnZS5cbiIpOworICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1swXS0+U2V0UHJpb3JpdHkoMyksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMywgbXNnTWVkWzBdLCBtc2dMb3dbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgMywgbXNnTWVkWzBdLCBtc2dMb3dbMF0sIG1zZ1ZlcnlMb3dbMF0pOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudEluUmV2ZXJzZShtZXNzYWdlUG9vbCwgMywgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdLCBtc2dNZWRbMF0pOworCisgICAgLy8gQ2hlY2tpbmcgdGhlIEFsbE1lc3NhZ2VzIHF1ZXVlIHdoZW4gYWRkaW5nIG1lc3NhZ2VzIGZyb20gc2FtZSBwb29sIHRvIGFub3RoZXIgcXVldWUuCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnTG93WzFdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgNCwgbXNnTWVkWzBdLCBtc2dMb3dbMF0sIG1zZ0xvd1sxXSwgbXNnVmVyeUxvd1swXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnTWVkWzFdKSwgIk1lc3NhZ2VRdWV1ZTo6RW5xdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgNSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ0xvd1swXSwgbXNnTG93WzFdLCBtc2dWZXJ5TG93WzBdKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnRJblJldmVyc2UobWVzc2FnZVBvb2wsIDUsIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1sxXSwgbXNnTG93WzBdLCBtc2dNZWRbMV0sIG1zZ01lZFswXSk7CisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRW5xdWV1ZSgqbXNnSGlnaFsxXSksICJNZXNzYWdlUXVldWU6OkVucXVldWUoKSBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDYsIG1zZ0hpZ2hbMV0sIG1zZ01lZFswXSwgbXNnTWVkWzFdLCBtc2dMb3dbMF0sIG1zZ0xvd1sxXSwgbXNnVmVyeUxvd1swXSk7CisgICAgVmVyaWZ5TXNnUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMywgbXNnTG93WzFdLCBtc2dNZWRbMV0sIG1zZ0hpZ2hbMV0pOworCisgICAgLy8gQ2hhbmdlIHByaW9yaXR5IG9mIG1lc3NhZ2UgYW5kIGNoZWNrIHRoYXQgb3JkZXIgY2hhbmdlcyBpbiB0aGUgQWxsTWVzc2FnZSBxdWV1ZSBhbmQgbm90IGluIG1lc3NhZ2VRdWV1ZS4KKyAgICBTdWNjZXNzT3JRdWl0KG1zZ0xvd1sxXS0+U2V0UHJpb3JpdHkoMCksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDYsIG1zZ0hpZ2hbMV0sIG1zZ0xvd1sxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ0xvd1swXSwgbXNnVmVyeUxvd1swXSk7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50SW5SZXZlcnNlKG1lc3NhZ2VQb29sLCA2LCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0sIG1zZ01lZFsxXSwgbXNnTWVkWzBdLCBtc2dMb3dbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0hpZ2hbMV0pOworICAgIFZlcmlmeU1zZ1F1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDMsIG1zZ0xvd1sxXSwgbXNnTWVkWzFdLCBtc2dIaWdoWzFdKTsKKworICAgIFN1Y2Nlc3NPclF1aXQobXNnVmVyeUxvd1swXS0+U2V0UHJpb3JpdHkoMSksICJTZXRQcmlvcml0eSBmYWlsZWQgZm9yIGFuIGFscmVhZHkgcXVldWVkIG1lc3NhZ2UuXG4iKTsKKyAgICBWZXJpZnlBbGxNZXNzYWdlc0NvbnRlbnQobWVzc2FnZVBvb2wsIDYsIG1zZ0hpZ2hbMV0sIG1zZ0xvd1sxXSwgbXNnTWVkWzBdLCBtc2dNZWRbMV0sIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSk7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDMsIG1zZ01lZFswXSwgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlNc2dRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dMb3dbMV0sIG1zZ01lZFsxXSwgbXNnSGlnaFsxXSk7CisKKyAgICAvLyBSZW1vdmUgbWVzc2FnZXMgZnJvbSB0aGUgdHdvIHF1ZXVlcyBhbmQgdmVyaWZ5IHRoYXQgQWxsTWVzc2FnZSBxdWV1ZSBpcyB1cGRhdGVkIGNvcnJlY3RseS4KKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ01lZFswXSksICJQcmlvcml0eVF1ZXVlOjpEZXF1ZXVlKCkgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5QWxsTWVzc2FnZXNDb250ZW50KG1lc3NhZ2VQb29sLCA1LCBtc2dIaWdoWzFdLCBtc2dMb3dbMV0sIG1zZ01lZFsxXSwgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlQcmlvcml0eVF1ZXVlQ29udGVudChxdWV1ZSwgMiwgbXNnVmVyeUxvd1swXSwgbXNnTG93WzBdKTsKKyAgICBWZXJpZnlNc2dRdWV1ZUNvbnRlbnQobWVzc2FnZVF1ZXVlLCAzLCBtc2dMb3dbMV0sIG1zZ01lZFsxXSwgbXNnSGlnaFsxXSk7CisKKyAgICBTdWNjZXNzT3JRdWl0KG1lc3NhZ2VRdWV1ZS5EZXF1ZXVlKCptc2dIaWdoWzFdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgNCwgbXNnTG93WzFdLCBtc2dNZWRbMV0sIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSk7CisgICAgVmVyaWZ5UHJpb3JpdHlRdWV1ZUNvbnRlbnQocXVldWUsIDIsIG1zZ1ZlcnlMb3dbMF0sIG1zZ0xvd1swXSk7CisgICAgVmVyaWZ5TXNnUXVldWVDb250ZW50KG1lc3NhZ2VRdWV1ZSwgMiwgbXNnTG93WzFdLCBtc2dNZWRbMV0pOworCisgICAgU3VjY2Vzc09yUXVpdChtZXNzYWdlUXVldWUuRGVxdWV1ZSgqbXNnTWVkWzFdKSwgIk1lc3NhZ2VRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgMywgbXNnTG93WzFdLCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAyLCBtc2dWZXJ5TG93WzBdLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeU1zZ1F1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDEsIG1zZ0xvd1sxXSk7CisKKyAgICBTdWNjZXNzT3JRdWl0KHF1ZXVlLkRlcXVldWUoKm1zZ1ZlcnlMb3dbMF0pLCAiUHJpb3JpdHlRdWV1ZTo6RGVxdWV1ZSgpIGZhaWxlZC5cbiIpOworICAgIFZlcmlmeUFsbE1lc3NhZ2VzQ29udGVudChtZXNzYWdlUG9vbCwgMiwgbXNnTG93WzFdLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeVByaW9yaXR5UXVldWVDb250ZW50KHF1ZXVlLCAxLCBtc2dMb3dbMF0pOworICAgIFZlcmlmeU1zZ1F1ZXVlQ29udGVudChtZXNzYWdlUXVldWUsIDEsIG1zZ0xvd1sxXSk7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKGluc3RhbmNlKTsKK30KKworI2lmZGVmIEVOQUJMRV9URVNUX01BSU4KK2ludCBtYWluKHZvaWQpCit7CisgICAgVGVzdFByaW9yaXR5UXVldWUoKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3Rfc3RybGNhdC5jIGIvdGVzdHMvdW5pdC90ZXN0X3N0cmxjYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE1NTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3N0cmxjYXQuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgY2hhciBzdHJpbmdfYVs4XSA9ICJmb28iOworICAgIGNoYXIgc3RyaW5nX2JbOF0gPSAiYmFyYmFyIjsKKyAgICBzaXplX3QgcmV0ID0gMDsKKyAgICBpbnQgZXJyb3JzID0gMDsKKworICAgICh2b2lkKWFyZ2M7CisgICAgKHZvaWQpYXJndjsKKworICAgIHJldCA9IG1pc3Npbmdfc3RybGNhdChzdHJpbmdfYSwgc3RyaW5nX2IsIHNpemVvZihzdHJpbmdfYSkpOworCisgICAgaWYgKDAgIT0gc3RyY21wKHN0cmluZ19hLCAiZm9vYmFyYiIpKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzdHJjbXAgZmFpbGVkXG4iKTsKKyAgICAgICAgZXJyb3JzKys7CisgICAgfQorCisgICAgaWYgKHJldCAhPSA5KQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzdHJsY2F0IHJldHVybiB2YWx1ZSBpcyB3cm9uZyAoJWQpXG4iLCAoaW50KXJldCk7CisgICAgICAgIGVycm9ycysrOworICAgIH0KKworICAgIGlmIChlcnJvcnMgIT0gMCkKKyAgICB7CisgICAgICAgIHByaW50ZigiRkFJTFxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgcHJpbnRmKCJPS1xuIik7CisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9zdHJsY3B5LmMgYi90ZXN0cy91bml0L3Rlc3Rfc3RybGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTNiYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3Rfc3RybGNweS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICAgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInV0aWxzL3dyYXBfc3RyaW5nLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBjaGFyIHN0cmluZ19hWzhdID0gImZvbyI7CisgICAgY2hhciBzdHJpbmdfYltdID0gImJhcmJhcmJhciI7CisgICAgc2l6ZV90IHJldCA9IDA7CisgICAgaW50IGVycm9ycyA9IDA7CisKKyAgICAodm9pZClhcmdjOworICAgICh2b2lkKWFyZ3Y7CisgICAgcmV0ID0gc3RybGNweShzdHJpbmdfYSwgc3RyaW5nX2IsIHNpemVvZihzdHJpbmdfYSkpOworCisgICAgaWYgKDAgIT0gc3RyY21wKHN0cmluZ19hLCAiYmFyYmFyYiIpKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzdHJjbXAgZmFpbGVkXG4iKTsKKyAgICAgICAgZXJyb3JzKys7CisgICAgfQorCisgICAgaWYgKHJldCAhPSA5KQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzdHJsY3B5IHJldHVybiB2YWx1ZSBpcyB3cm9uZyAoJWQpXG4iLCAoaW50KXJldCk7CisgICAgICAgIGVycm9ycysrOworICAgIH0KKworICAgIGlmIChlcnJvcnMgIT0gMCkKKyAgICB7CisgICAgICAgIHByaW50ZigiRkFJTFxuIik7CisgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgcHJpbnRmKCJPS1xuIik7CisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF9zdHJubGVuLmMgYi90ZXN0cy91bml0L3Rlc3Rfc3Rybmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYmU2MjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3Rfc3Rybmxlbi5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogICAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxvcGVudGhyZWFkL2NvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1dGlscy93cmFwX3N0cmluZy5oIgorCitzdGF0aWMgdm9pZCBmYWlsKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGNoYXIgc3RyaW5nX2FbNV0gPSAiXDBmb28iOworICAgIGNoYXIgc3RyaW5nX2JbOF0gPSAiZm9vXDBiYXIiOworCisgICAgKHZvaWQpYXJnYzsKKyAgICAodm9pZClhcmd2OworCisgICAgaWYgKDAgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19hLCAwKSkKKyAgICB7CisgICAgICAgIGZhaWwoIjBsZW4gMCBmYWlscyIpOworICAgIH0KKworICAgIGlmICgwICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYSwgMSkpCisgICAgeworICAgICAgICBmYWlsKCIwbGVuIDEgZmFpbHMiKTsKKyAgICB9CisKKyAgICBpZiAoMCAhPSBtaXNzaW5nX3N0cm5sZW4oc3RyaW5nX2EsIDIpKQorICAgIHsKKyAgICAgICAgZmFpbCgiMGxlbiAyIGZhaWxzIik7CisgICAgfQorCisgICAgaWYgKDAgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19iLCAwKSkKKyAgICB7CisgICAgICAgIGZhaWwoIjNsZW4gMCBmYWlscyIpOworICAgIH0KKworICAgIGlmICgxICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYiwgMSkpCisgICAgeworICAgICAgICBmYWlsKCIzbGVuIDEgZmFpbHMiKTsKKyAgICB9CisKKyAgICBpZiAoMiAhPSBtaXNzaW5nX3N0cm5sZW4oc3RyaW5nX2IsIDIpKQorICAgIHsKKyAgICAgICAgZmFpbCgiM2xlbiAyIGZhaWxzIik7CisgICAgfQorCisgICAgaWYgKDMgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19iLCAzKSkKKyAgICB7CisgICAgICAgIGZhaWwoIjNsZW4gMyBmYWlscyIpOworICAgIH0KKworICAgIGlmICgzICE9IG1pc3Npbmdfc3RybmxlbihzdHJpbmdfYiwgNCkpCisgICAgeworICAgICAgICBmYWlsKCIzbGVuIDQgZmFpbHMiKTsKKyAgICB9CisKKyAgICBpZiAoMyAhPSBtaXNzaW5nX3N0cm5sZW4oc3RyaW5nX2IsIDUpKQorICAgIHsKKyAgICAgICAgZmFpbCgiM2xlbiA1IGZhaWxzIik7CisgICAgfQorCisgICAgaWYgKDMgIT0gbWlzc2luZ19zdHJubGVuKHN0cmluZ19iLCA2KSkKKyAgICB7CisgICAgICAgIGZhaWwoIjNsZW4gNiBmYWlscyIpOworICAgIH0KKworICAgIHByaW50ZigiT0tcbiIpOworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfdGltZXIuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X3RpbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M0MTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3RpbWVyLmNwcApAQCAtMCwwICsxLDY2NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInRlc3RfcGxhdGZvcm0uaCIKKworI2luY2x1ZGUgIm9wZW50aHJlYWQtaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaHBwIgorI2luY2x1ZGUgImNvbW1vbi90aW1lci5ocHAiCisKK2VudW0KK3sKKyAgICBrQ2FsbENvdW50SW5kZXhBbGFybVN0b3AgPSAwLAorICAgIGtDYWxsQ291bnRJbmRleEFsYXJtU3RhcnQsCisgICAga0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyLAorCisgICAga0NhbGxDb3VudEluZGV4TWF4Cit9OworCit1aW50MzJfdCBzTm93OwordWludDMyX3Qgc1BsYXRUMDsKK3VpbnQzMl90IHNQbGF0RHQ7Citib29sICAgICBzVGltZXJPbjsKK3VpbnQzMl90IHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4TWF4XTsKKwordm9pZCB0ZXN0VGltZXJBbGFybVN0b3Aob3RJbnN0YW5jZSAqKQoreworICAgIHNUaW1lck9uID0gZmFsc2U7CisgICAgc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdKys7Cit9CisKK3ZvaWQgdGVzdFRpbWVyQWxhcm1TdGFydEF0KG90SW5zdGFuY2UgKiwgdWludDMyX3QgYVQwLCB1aW50MzJfdCBhRHQpCit7CisgICAgc1RpbWVyT24gPSB0cnVlOworICAgIHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0rKzsKKyAgICBzUGxhdFQwID0gYVQwOworICAgIHNQbGF0RHQgPSBhRHQ7Cit9CisKK3VpbnQzMl90IHRlc3RUaW1lckFsYXJtR2V0Tm93KHZvaWQpCit7CisgICAgcmV0dXJuIHNOb3c7Cit9CisKK3ZvaWQgSW5pdFRlc3RUaW1lcih2b2lkKQoreworICAgIGdfdGVzdFBsYXRBbGFybVN0b3AgPSB0ZXN0VGltZXJBbGFybVN0b3A7CisgICAgZ190ZXN0UGxhdEFsYXJtU3RhcnRBdCA9IHRlc3RUaW1lckFsYXJtU3RhcnRBdDsKKyAgICBnX3Rlc3RQbGF0QWxhcm1HZXROb3cgPSB0ZXN0VGltZXJBbGFybUdldE5vdzsKK30KKwordm9pZCBJbml0Q291bnRlcnModm9pZCkKK3sKKyAgICBtZW1zZXQoc0NhbGxDb3VudCwgMCwgc2l6ZW9mKHNDYWxsQ291bnQpKTsKK30KKworLyoqCisgKiBgVGVzdFRpbWVyYCBzdWItY2xhc3NlcyBgb3Q6OlRpbWVyYCBhbmQgcHJvdmlkZXMgYSBoYW5kbGVyIGFuZCBhIGNvdW50ZXIgdG8ga2VlcCB0cmFjayBvZiBudW1iZXIgb2YgdGltZXMgdGltZXIgZ2V0cworICogZmlyZWQuCisgKi8KK2NsYXNzIFRlc3RUaW1lcjogcHVibGljIG90OjpUaW1lcgoreworcHVibGljOgorICAgIFRlc3RUaW1lcihvdEluc3RhbmNlICphSW5zdGFuY2UpOgorICAgICAgICBvdDo6VGltZXIoYUluc3RhbmNlLT5tSXA2Lm1UaW1lclNjaGVkdWxlciwgVGVzdFRpbWVyOjpIYW5kbGVUaW1lckZpcmVkLCBOVUxMKSwKKyAgICAgICAgbUZpcmVkQ291bnRlcigwKQorICAgIHsgfQorCisgICAgc3RhdGljIHZvaWQgSGFuZGxlVGltZXJGaXJlZChvdDo6VGltZXIgJmFUaW1lcikgeworICAgICAgICBzdGF0aWNfY2FzdDxUZXN0VGltZXIgJj4oYVRpbWVyKS5IYW5kbGVUaW1lckZpcmVkKCk7CisgICAgfQorCisgICAgdm9pZCBIYW5kbGVUaW1lckZpcmVkKHZvaWQpIHsKKyAgICAgICAgc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdKys7CisgICAgICAgIG1GaXJlZENvdW50ZXIrKzsKKyAgICB9CisKKyAgICB1aW50MzJfdCBHZXRGaXJlZENvdW50ZXIodm9pZCkgeyByZXR1cm4gbUZpcmVkQ291bnRlcjsgfQorCisgICAgdm9pZCBSZXNldEZpcmVkQ291bnRlcih2b2lkKSB7IG1GaXJlZENvdW50ZXIgPSAwOyB9CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbUZpcmVkQ291bnRlcjsgIC8vPCBOdW1iZXIgb2YgdGltZXMgdGltZXIgaGFzIGJlZW4gZmlyZWQgc28gZmFyCit9OworCisvKioKKyAqIFRlc3QgdGhlIFRpbWVyU2NoZWR1bGVyJ3MgYmVoYXZpb3Igb2Ygb25lIHRpbWVyIHN0YXJ0ZWQgYW5kIGZpcmVkLgorICovCitpbnQgVGVzdE9uZVRpbWVyKHZvaWQpCit7CisgICAgY29uc3QgdWludDMyX3Qga1RpbWVUMCA9IDEwMDA7CisgICAgY29uc3QgdWludDMyX3Qga1RpbWVySW50ZXJ2YWwgPSAxMDsKKyAgICBvdEluc3RhbmNlICppbnN0YW5jZSA9IHRlc3RJbml0SW5zdGFuY2UoKTsKKyAgICBUZXN0VGltZXIgdGltZXIoaW5zdGFuY2UpOworCisgICAgLy8gVGVzdCBvbmUgVGltZXIgYmFzaWMgb3BlcmF0aW9uLgorCisgICAgSW5pdFRlc3RUaW1lcigpOworICAgIEluaXRDb3VudGVycygpOworCisgICAgcHJpbnRmKCJUZXN0T25lVGltZXIoKSAiKTsKKworICAgIHNOb3cgPSBrVGltZVQwOworICAgIHRpbWVyLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdE9uZVRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSAxMDAwICYmIHNQbGF0RHQgPT0gMTAsICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWw7CisKKyAgICBvdFBsYXRBbGFybUZpcmVkKGluc3RhbmNlKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgLy8gVGVzdCBvbmUgVGltZXIgdGhhdCBzcGFucyB0aGUgMzItYml0IHdyYXAuCisKKyAgICBJbml0Q291bnRlcnMoKTsKKworICAgIHNOb3cgPSAwIC0gKGtUaW1lckludGVydmFsIC0gMik7CisgICAgdGltZXIuU3RhcnQoa1RpbWVySW50ZXJ2YWwpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMSwgICAgICAgICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAgICAgICAgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgICAgICAgICJUZXN0T25lVGltZXI6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzUGxhdFQwID09IDAgLSAoa1RpbWVySW50ZXJ2YWwgLSAyKSAmJiBzUGxhdER0ID09IDEwLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgc05vdyArPSBrVGltZXJJbnRlcnZhbDsKKworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMSwgIlRlc3RPbmVUaW1lcjogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDEsICJUZXN0T25lVGltZXI6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lci5Jc1J1bm5pbmcoKSA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICAvLyBUZXN0IG9uZSBUaW1lciB0aGF0IGlzIGxhdGUgYnkgc2V2ZXJhbCBtc2VjCisKKyAgICBJbml0Q291bnRlcnMoKTsKKworICAgIHNOb3cgPSBrVGltZVQwOworICAgIHRpbWVyLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdE9uZVRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSAxMDAwICYmIHNQbGF0RHQgPT0gMTAsICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWwgKyA1OworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMSwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMSwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIC8vIFRlc3Qgb25lIFRpbWVyIHRoYXQgaXMgZWFybHkgYnkgc2V2ZXJhbCBtc2VjCisKKyAgICBJbml0Q291bnRlcnMoKTsKKworICAgIHNOb3cgPSBrVGltZVQwOworICAgIHRpbWVyLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdE9uZVRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSAxMDAwICYmIHNQbGF0RHQgPT0gMTAsICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWwgLSAyOworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAyLCAiVGVzdE9uZVRpbWVyOiBTdGFydCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0gMCwgIlRlc3RPbmVUaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgIlRlc3RPbmVUaW1lcjogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAgIlRlc3RPbmVUaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWw7CisKKyAgICBvdFBsYXRBbGFybUZpcmVkKGluc3RhbmNlKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDIsICJUZXN0T25lVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAxLCAiVGVzdE9uZVRpbWVyOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAiVGVzdE9uZVRpbWVyOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiA9PSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0T25lVGltZXI6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgcHJpbnRmKCIgLS0+IFBBU1NFRFxuIik7CisKKyAgICB0ZXN0RnJlZUluc3RhbmNlKGluc3RhbmNlKTsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIFRlc3QgdGhlIFRpbWVyU2NoZWR1bGVyJ3MgYmVoYXZpb3Igb2YgdHdvIHRpbWVycyBzdGFydGVkIGFuZCBmaXJlZC4KKyAqLworaW50IFRlc3RUd29UaW1lcnModm9pZCkKK3sKKyAgICBjb25zdCB1aW50MzJfdCBrVGltZVQwID0gMTAwMDsKKyAgICBjb25zdCB1aW50MzJfdCBrVGltZXJJbnRlcnZhbCA9IDEwOworICAgIG90SW5zdGFuY2UgKmluc3RhbmNlID0gdGVzdEluaXRJbnN0YW5jZSgpOworICAgIFRlc3RUaW1lciB0aW1lcjEoaW5zdGFuY2UpOworICAgIFRlc3RUaW1lciB0aW1lcjIoaW5zdGFuY2UpOworCisgICAgSW5pdFRlc3RUaW1lcigpOworICAgIHByaW50ZigiVGVzdFR3b1RpbWVycygpICIpOworCisgICAgLy8gVGVzdCB3aGVuIHNlY29uZCB0aW1lciBzdGFycyBhdCB0aGUgZmlyZSB0aW1lIG9mIGZpcnN0IHRpbWVyIChiZWZvcmUgYWxhcm0gY2FsbGJhY2spLgorCisgICAgSW5pdENvdW50ZXJzKCk7CisKKyAgICBzTm93ID0ga1RpbWVUMDsKKyAgICB0aW1lcjEuU3RhcnQoa1RpbWVySW50ZXJ2YWwpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMSwgICAiVGVzdFR3b1RpbWVyczogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDAsICAgIlRlc3RUd29UaW1lcnM6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICAgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzUGxhdFQwID09IGtUaW1lVDAgJiYgc1BsYXREdCA9PSBrVGltZXJJbnRlcnZhbCwgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsOworCisgICAgdGltZXIyLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSBrVGltZVQwICYmIHNQbGF0RHQgPT0ga1RpbWVySW50ZXJ2YWwsICJUZXN0VHdvVGltZXJzOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAyLCAiVGVzdFR3b1RpbWVyczogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDAsICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAxLCAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5HZXRGaXJlZENvdW50ZXIoKSA9PSAxLCAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IEZpcmUgQ291bnRlciBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSBzTm93ICYmIHNQbGF0RHQgPT0ga1RpbWVySW50ZXJ2YWwsICAiVGVzdFR3b1RpbWVyczogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuSXNSdW5uaW5nKCkgPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0ga1RpbWVySW50ZXJ2YWw7CisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAyLCAiVGVzdFR3b1RpbWVyczogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDEsICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAyLCAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5HZXRGaXJlZENvdW50ZXIoKSA9PSAxLCAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IEZpcmUgQ291bnRlciBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICAvLyBUZXN0IHdoZW4gc2Vjb25kIHRpbWVyIHN0YXJ0cyBhdCB0aGUgZmlyZSB0aW1lIG9mIGZpcnN0IHRpbWVyIChiZWZvcmUgb3RQbGF0QWxhcm1GaXJlZCgpKSBhbmQgaXRzIGZpcmUgdGltZQorICAgIC8vIGlzIGJlZm9yZSB0aGUgZmlyc3QgdGltZXIuIEVuc3VyZSB0aGF0IHRoZSBzZWNvbmQgdGltZXIgaGFuZGxlciBpcyBpbnZva2VkIGJlZm9yZSB0aGUgZmlyc3Qgb25lLgorCisgICAgSW5pdENvdW50ZXJzKCk7CisgICAgdGltZXIxLlJlc2V0RmlyZWRDb3VudGVyKCk7CisgICAgdGltZXIyLlJlc2V0RmlyZWRDb3VudGVyKCk7CisKKyAgICBzTm93ID0ga1RpbWVUMDsKKyAgICB0aW1lcjEuU3RhcnQoa1RpbWVySW50ZXJ2YWwpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMSwgICAiVGVzdFR3b1RpbWVyczogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDAsICAgIlRlc3RUd29UaW1lcnM6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICAgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzUGxhdFQwID09IGtUaW1lVDAgJiYgc1BsYXREdCA9PSBrVGltZXJJbnRlcnZhbCwgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBzTm93ICs9IGtUaW1lckludGVydmFsOworCisgICAgdGltZXIyLlN0YXJ0QXQoa1RpbWVUMCwga1RpbWVySW50ZXJ2YWwgLSAyKTsgIC8vIFRpbWVyIDIgaXMgZXZlbiBiZWZvcmUgdGltZXIgMQorCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMCwgICAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMSwgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuR2V0RmlyZWRDb3VudGVyKCkgPT0gMSwgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBGaXJlIENvdW50ZXIgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0gc05vdyAmJiBzUGxhdER0ID09IDAsICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IHRydWUsICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBvdFBsYXRBbGFybUZpcmVkKGluc3RhbmNlKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDEsICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAyLCAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5HZXRGaXJlZENvdW50ZXIoKSA9PSAxLCAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IEZpcmUgQ291bnRlciBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICAvLyBUaW1lciAxIGZpcmUgY2FsbGJhY2sgaXMgbGF0ZSBieSBzb21lIHRpY2tzL21zLCBhbmQgc2Vjb25kIHRpbWVyIGlzIHNjaGVkdWxlZCAoYmVmb3JlIGNhbGwgdG8gb3RQbGF0QWxhcm1GaXJlZCkKKyAgICAvLyB3aXRoIGEgbWF4aW11bSBpbnRlcnZhbC4gVGhpcyBpcyB0byB0ZXN0IChjb3JuZXItY2FzZSkgc2NlbmFyaW8gd2hlcmUgdGhlIGZpcmUgdGltZSBvZiB0d28gdGltZXJzIHNwYW5uaW5nIG92ZXIKKyAgICAvLyB0aGUgbWF4aW11bSBpbnRlcnZhbC4KKworICAgIEluaXRDb3VudGVycygpOworICAgIHRpbWVyMS5SZXNldEZpcmVkQ291bnRlcigpOworICAgIHRpbWVyMi5SZXNldEZpcmVkQ291bnRlcigpOworCisgICAgc05vdyA9IGtUaW1lVDA7CisgICAgdGltZXIxLlN0YXJ0KGtUaW1lckludGVydmFsKTsKKworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RhcnRdICAgID09IDEsICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAwLCAgICJUZXN0VHdvVGltZXJzOiBIYW5kbGVyIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXRUMCA9PSBrVGltZVQwICYmIHNQbGF0RHQgPT0ga1RpbWVySW50ZXJ2YWwsICJUZXN0VHdvVGltZXJzOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMS5Jc1J1bm5pbmcoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFBsYXRmb3JtIFRpbWVyIFN0YXRlIEZhaWxlZC5cbiIpOworCisgICAgc05vdyArPSBrVGltZXJJbnRlcnZhbCArIDU7CisKKyAgICB0aW1lcjIuU3RhcnQob3Q6OlRpbWVyOjprTWF4RHQpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMSwgICAiVGVzdFR3b1RpbWVyczogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDAsICAgIlRlc3RUd29UaW1lcnM6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICAgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuSXNSdW5uaW5nKCkgPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5Jc1J1bm5pbmcoKSA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIG90UGxhdEFsYXJtRmlyZWQoaW5zdGFuY2UpOworCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMiwgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0b3BdICAgICA9PSAwLCAiVGVzdFR3b1RpbWVyczogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4VGltZXJIYW5kbGVyXSAgPT0gMSwgIlRlc3RUd29UaW1lcnM6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuR2V0RmlyZWRDb3VudGVyKCkgPT0gMSwgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBGaXJlIENvdW50ZXIgZmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNQbGF0VDAgPT0gc05vdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXREdCA9PSBvdDo6VGltZXI6OmtNYXhEdCwgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogU3RhcnQgcGFyYW1zIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjEuSXNSdW5uaW5nKCkgPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdCh0aW1lcjIuSXNSdW5uaW5nKCkgPT0gdHJ1ZSwgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBUaW1lciBydW5uaW5nIEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzVGltZXJPbiA9PSB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0VHdvVGltZXJzOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgIHNOb3cgKz0gb3Q6OlRpbWVyOjprTWF4RHQ7CisgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhBbGFybVN0YXJ0XSAgICA9PSAyLCAiVGVzdFR3b1RpbWVyczogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDEsICJUZXN0VHdvVGltZXJzOiBTdG9wIENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc0NhbGxDb3VudFtrQ2FsbENvdW50SW5kZXhUaW1lckhhbmRsZXJdICA9PSAyLCAiVGVzdFR3b1RpbWVyczogSGFuZGxlciBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHRpbWVyMi5HZXRGaXJlZENvdW50ZXIoKSA9PSAxLCAgICAgICAgICAgICAgICAgIlRlc3RUd29UaW1lcnM6IEZpcmUgQ291bnRlciBmYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIxLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQodGltZXIyLklzUnVubmluZygpID09IGZhbHNlLCAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gPT0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFR3b1RpbWVyczogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBwcmludGYoIiAtLT4gUEFTU0VEXG4iKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogVGVzdCB0aGUgVGltZXJTY2hlZHVsZXIncyBiZWhhdmlvciBvZiB0ZW4gdGltZXJzIHN0YXJ0ZWQgYW5kIGZpcmVkLgorICoKKyAqIGBhVGltZVNoaWZ0YCBpcyBhZGRlZCB0byB0aGUgdDAgYW5kIHRyaWdnZXIgdGltZXMgZm9yIGFsbCB0aW1lcnMuIEl0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSB0ZW4gdGltZXIgYmVoYXZpb3IKKyAqIGF0IGRpZmZlcmVudCBzdGFydCB0aW1lIChlLmcuLCBhcm91bmQgYSAzMi1iaXQgd3JhcCkuCisgKi8KK3N0YXRpYyB2b2lkIFRlblRpbWVycyh1aW50MzJfdCBhVGltZVNoaWZ0KQoreworICAgIGNvbnN0IHVpbnQzMl90IGtOdW1UaW1lcnMgPSAxMDsKKyAgICBjb25zdCB1aW50MzJfdCBrTnVtVHJpZ2dlcnMgPSA3OworICAgIGNvbnN0IHVpbnQzMl90IGtUaW1lVDBba051bVRpbWVyc10gPQorICAgIHsKKyAgICAgICAgMTAwMCwKKyAgICAgICAgMTAwMCwKKyAgICAgICAgMTAwMSwKKyAgICAgICAgMTAwMiwKKyAgICAgICAgMTAwMywKKyAgICAgICAgMTAwNCwKKyAgICAgICAgMTAwNSwKKyAgICAgICAgMTAwNiwKKyAgICAgICAgMTAwNywKKyAgICAgICAgMTAwOAorICAgIH07CisgICAgY29uc3QgdWludDMyX3Qga1RpbWVySW50ZXJ2YWxba051bVRpbWVyc10gPQorICAgIHsKKyAgICAgICAgMjAsCisgICAgICAgIDEwMCwKKyAgICAgICAgKG90OjpUaW1lcjo6a01heER0IC0ga1RpbWVUMFsyXSksCisgICAgICAgIDEwMDAwMCwKKyAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgMTAsCisgICAgICAgIG90OjpUaW1lcjo6a01heER0LAorICAgICAgICAyMDAsCisgICAgICAgIDIwMCwKKyAgICAgICAgMjAwCisgICAgfTsKKyAgICAvLyBFeHBlY3RlZCB0aW1lciBmaXJlIG9yZGVyCisgICAgLy8gdGltZXIgIyAgICAgVHJpZ2dlciB0aW1lCisgICAgLy8gICA1ICAgICAgICAgICAgMTAxNAorICAgIC8vICAgMCAgICAgICAgICAgIDEwMjAKKyAgICAvLyAgIDEgICAgICAgICAgICAxMTAwCisgICAgLy8gICA3ICAgICAgICAgICAgMTIwNgorICAgIC8vICAgOCAgICAgICAgICAgIDEyMDcKKyAgICAvLyAgIDkgICAgICAgICAgICAxMjA4CisgICAgLy8gICAzICAgICAgICAgIDEwMTAwMgorICAgIC8vICAgNCAgICAgICAgIDEwMDEwMDMKKyAgICAvLyAgIDIgICAgICAgICAga01heER0CisgICAgLy8gICA2ICAga01heER0ICsgMTAwNQorICAgIGNvbnN0IHVpbnQzMl90IGtUcmlnZ2VyVGltZXNba051bVRyaWdnZXJzXSA9CisgICAgeworICAgICAgICAxMDE0LAorICAgICAgICAxMDIwLAorICAgICAgICAxMTAwLAorICAgICAgICAxMjA3LAorICAgICAgICAxMDEwMDQsCisgICAgICAgIG90OjpUaW1lcjo6a01heER0LAorICAgICAgICBvdDo6VGltZXI6OmtNYXhEdCArIGtUaW1lVDBbNl0KKyAgICB9OworICAgIC8vIEV4cGVjdGVkIHRpbWVycyBmaXJlZCBieSBlYWNoIGtUcmlnZ2VyVGltZXNbXSB2YWx1ZQorICAgIC8vICBUcmlnZ2VyICMgICAgVGltZXJzIEZpcmVkCisgICAgLy8gICAgMCAgICAgICAgICAgICA1CisgICAgLy8gICAgMSAgICAgICAgICAgICAwCisgICAgLy8gICAgMiAgICAgICAgICAgICAxCisgICAgLy8gICAgMyAgICAgICAgICAgICA3LCA4CisgICAgLy8gICAgNCAgICAgICAgICAgICA5LCAzCisgICAgLy8gICAgNSAgICAgICAgICAgICA0LCAyCisgICAgLy8gICAgNiAgICAgICAgICAgICA2CisgICAgY29uc3QgYm9vbCBrVGltZXJTdGF0ZUFmdGVyVHJpZ2dlciBba051bVRyaWdnZXJzXVtrTnVtVGltZXJzXSA9CisgICAgeworICAgICAgICB7ICB0cnVlLCAgdHJ1ZSwgIHRydWUsICB0cnVlLCAgdHJ1ZSwgZmFsc2UsIHRydWUsICAgdHJ1ZSwgIHRydWUsICB0cnVlfSwgIC8vIDUKKyAgICAgICAgeyBmYWxzZSwgIHRydWUsICB0cnVlLCAgdHJ1ZSwgIHRydWUsIGZhbHNlLCB0cnVlLCAgIHRydWUsICB0cnVlLCAgdHJ1ZX0sICAvLyAwCisgICAgICAgIHsgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgIHRydWUsICB0cnVlLCBmYWxzZSwgdHJ1ZSwgICB0cnVlLCAgdHJ1ZSwgIHRydWV9LCAgLy8gMQorICAgICAgICB7IGZhbHNlLCBmYWxzZSwgIHRydWUsICB0cnVlLCAgdHJ1ZSwgZmFsc2UsIHRydWUsICBmYWxzZSwgZmFsc2UsICB0cnVlfSwgIC8vIDcsIDgKKyAgICAgICAgeyBmYWxzZSwgZmFsc2UsICB0cnVlLCBmYWxzZSwgIHRydWUsIGZhbHNlLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZX0sICAvLyA5LCAzCisgICAgICAgIHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2V9LCAgLy8gNCwgMgorICAgICAgICB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfSAgIC8vIDYKKyAgICB9OworCisgICAgY29uc3QgYm9vbCBrU2NoZWR1bGVyU3RhdGVBZnRlclRyaWdnZXJba051bVRyaWdnZXJzXSA9CisgICAgeworICAgICAgICB0cnVlLAorICAgICAgICB0cnVlLAorICAgICAgICB0cnVlLAorICAgICAgICB0cnVlLAorICAgICAgICB0cnVlLAorICAgICAgICB0cnVlLAorICAgICAgICBmYWxzZQorICAgIH07CisKKyAgICBjb25zdCB1aW50MzJfdCBrVGltZXJIYW5kbGVyQ291bnRBZnRlclRyaWdnZXJba051bVRyaWdnZXJzXSA9CisgICAgeworICAgICAgICAxLAorICAgICAgICAyLAorICAgICAgICAzLAorICAgICAgICA1LAorICAgICAgICA3LAorICAgICAgICA5LAorICAgICAgICAxMAorICAgIH07CisKKyAgICBjb25zdCB1aW50MzJfdCBrVGltZXJTdG9wQ291bnRBZnRlclRyaWdnZXJba051bVRyaWdnZXJzXSA9CisgICAgeworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxCisgICAgfTsKKworICAgIGNvbnN0IHVpbnQzMl90IGtUaW1lclN0YXJ0Q291bnRBZnRlclRyaWdnZXJba051bVRyaWdnZXJzXSA9CisgICAgeworICAgICAgICAzLAorICAgICAgICA0LAorICAgICAgICA1LAorICAgICAgICA3LAorICAgICAgICA5LAorICAgICAgICAxMSwKKyAgICAgICAgMTEKKyAgICB9OworCisgICAgb3RJbnN0YW5jZSAqaW5zdGFuY2UgPSB0ZXN0SW5pdEluc3RhbmNlKCk7CisKKyAgICBUZXN0VGltZXIgdGltZXIwKGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXIxKGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXIyKGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXIzKGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXI0KGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXI1KGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXI2KGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXI3KGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXI4KGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgdGltZXI5KGluc3RhbmNlKTsKKyAgICBUZXN0VGltZXIgKnRpbWVyc1trTnVtVGltZXJzXSA9CisgICAgeworICAgICAgICAmdGltZXIwLAorICAgICAgICAmdGltZXIxLAorICAgICAgICAmdGltZXIyLAorICAgICAgICAmdGltZXIzLAorICAgICAgICAmdGltZXI0LAorICAgICAgICAmdGltZXI1LAorICAgICAgICAmdGltZXI2LAorICAgICAgICAmdGltZXI3LAorICAgICAgICAmdGltZXI4LAorICAgICAgICAmdGltZXI5CisgICAgfTsKKyAgICBzaXplX3QgaTsKKworICAgIHByaW50ZigiVGVzdFRlblRpbWVyKCkgd2l0aCBhVGltZVNoaWZ0PSUtMTB1ICIsIGFUaW1lU2hpZnQpOworCisgICAgLy8gU3RhcnQgdGhlIFRlbiB0aW1lcnMuCisKKyAgICBJbml0VGVzdFRpbWVyKCk7CisgICAgSW5pdENvdW50ZXJzKCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwga051bVRpbWVycyA7IGkrKykKKyAgICB7CisgICAgICAgIHNOb3cgPSBrVGltZVQwW2ldICsgYVRpbWVTaGlmdDsKKyAgICAgICAgdGltZXJzW2ldLT5TdGFydChrVGltZXJJbnRlcnZhbFtpXSk7CisgICAgfQorCisgICAgLy8gZ2l2ZW4gdGhlIG9yZGVyIGluIHdoaWNoIHRpbWVycyBhcmUgc3RhcnRlZCwgdGhlIFRpbWVyU2NoZWR1bGVyIHNob3VsZCBjYWxsIG90UGxhdEFsYXJtU3RhcnRBdCAyIHRpbWVzLgorICAgIC8vIG9uZSBmb3IgdGltZXJbMF0gYW5kIG9uZSBmb3IgdGltZXJbNV0gd2hpY2ggd2lsbCBzdXBlcmNlZGUgdGltZXJbMF0uCisgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0gMiwgIlRlc3RUZW5UaW1lcjogU3RhcnQgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleEFsYXJtU3RvcF0gICAgID09IDAsICJUZXN0VGVuVGltZXI6IFN0b3AgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IDAsICJUZXN0VGVuVGltZXI6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgIFZlcmlmeU9yUXVpdChzUGxhdFQwID09IGtUaW1lVDBbNV0gKyBhVGltZVNoaWZ0LCAgICAgICAgICAgICJUZXN0VGVuVGltZXI6IFN0YXJ0IHBhcmFtcyBGYWlsZWQuXG4iKTsKKyAgICBWZXJpZnlPclF1aXQoc1BsYXREdCA9PSBrVGltZXJJbnRlcnZhbFs1XSwgICAgICAgICAgICAgICAgICAiVGVzdFRlblRpbWVyOiBTdGFydCBwYXJhbXMgRmFpbGVkLlxuIik7CisgICAgVmVyaWZ5T3JRdWl0KHNUaW1lck9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RUZW5UaW1lcjogUGxhdGZvcm0gVGltZXIgU3RhdGUgRmFpbGVkLlxuIik7CisKKyAgICBmb3IgKGkgPSAwIDsgaSA8IGtOdW1UaW1lcnMgOyBpKyspCisgICAgeworICAgICAgICBWZXJpZnlPclF1aXQodGltZXJzW2ldLT5Jc1J1bm5pbmcoKSwgIlRlc3RUZW5UaW1lcjogVGltZXIgcnVubmluZyBGYWlsZWQuXG4iKTsKKyAgICB9CisKKyAgICAvLyBJc3N1ZSB0aGUgdHJpZ2dlcnMgYW5kIHRlc3QgdGhlIFN0YXRlIGFmdGVyIGVhY2ggdHJpZ2dlci4KKworICAgIGZvciAoc2l6ZV90IHRyaWdnZXIgPSAwIDsgdHJpZ2dlciA8IGtOdW1UcmlnZ2VycyA7IHRyaWdnZXIrKykKKyAgICB7CisgICAgICAgIHNOb3cgPSBrVHJpZ2dlclRpbWVzW3RyaWdnZXJdICsgYVRpbWVTaGlmdDsKKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICAvLyBCeSBkZXNpZ24sIGVhY2ggY2FsbCB0byBvdFBsYXRBbGFybUZpcmVkKCkgY2FuIHJlc3VsdCBpbiAwIG9yIDEgY2FsbHMgdG8gYSB0aW1lciBoYW5kbGVyLgorICAgICAgICAgICAgLy8gRm9yIHNvbWUgY29tYmluYXRpb25zIG9mIHNOb3cgYW5kIFRpbWVycyBxdWV1ZWQsIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIG90UGxhdEFsYXJtRmlyZWQoKQorICAgICAgICAgICAgLy8gbXVsdGlwbGUgdGltZXMgaW4gb3JkZXIgdG8gaGFuZGxlIGFsbCB0aGUgZXhwaXJlZCB0aW1lcnMuICBJdCBjYW4gYmUgZGV0ZXJtaW5lZCB0aGF0IGFub3RoZXIKKyAgICAgICAgICAgIC8vIHRpbWVyIGlzIHJlYWR5IHRvIGJlIHRyaWdnZXJlZCBieSBleGFtaW5pbmcgdGhlIGFEdCBhcmcgcGFzc2VkIGludG8gb3RQbGF0QWxhcm1TdGFydEF0KCkuICBJZgorICAgICAgICAgICAgLy8gdGhhdCB2YWx1ZSBpcyAwLCB0aGVuIG90UGxhdEFsYXJtRmlyZWQgc2hvdWxkIGJlIGZpcmVkIGltbWVkaWF0ZWx5LiBUaGlzIGxvb3AgY2FsbHMgb3RQbGF0QWxhcm1GaXJlZCgpCisgICAgICAgICAgICAvLyB0aGUgcmVxdWlzaXRlIG51bWJlciBvZiB0aW1lcyBiYXNlZCBvbiB0aGUgYUR0IGFyZ3VtZW50LgorICAgICAgICAgICAgb3RQbGF0QWxhcm1GaXJlZChpbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHNQbGF0RHQgPT0gMCk7CisKKyAgICAgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdGFydF0gICAgPT0ga1RpbWVyU3RhcnRDb3VudEFmdGVyVHJpZ2dlclt0cmlnZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0VGVuVGltZXI6IFN0YXJ0IENhbGxDb3VudCBGYWlsZWQuXG4iKTsKKyAgICAgICAgVmVyaWZ5T3JRdWl0KHNDYWxsQ291bnRba0NhbGxDb3VudEluZGV4QWxhcm1TdG9wXSAgICAgPT0ga1RpbWVyU3RvcENvdW50QWZ0ZXJUcmlnZ2VyW3RyaWdnZXJdLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3RUZW5UaW1lcjogU3RvcCBDYWxsQ291bnQgRmFpbGVkLlxuIik7CisgICAgICAgIFZlcmlmeU9yUXVpdChzQ2FsbENvdW50W2tDYWxsQ291bnRJbmRleFRpbWVySGFuZGxlcl0gID09IGtUaW1lckhhbmRsZXJDb3VudEFmdGVyVHJpZ2dlclt0cmlnZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0VGVuVGltZXI6IEhhbmRsZXIgQ2FsbENvdW50IEZhaWxlZC5cbiIpOworICAgICAgICBWZXJpZnlPclF1aXQoc1RpbWVyT24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBrU2NoZWR1bGVyU3RhdGVBZnRlclRyaWdnZXJbdHJpZ2dlcl0sCisgICAgICAgICAgICAgICAgICAgICAiVGVzdFRlblRpbWVyOiBQbGF0Zm9ybSBUaW1lciBTdGF0ZSBGYWlsZWQuXG4iKTsKKworICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IGtOdW1UaW1lcnMgOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcmlmeU9yUXVpdCgKKyAgICAgICAgICAgICAgICB0aW1lcnNbaV0tPklzUnVubmluZygpID09IGtUaW1lclN0YXRlQWZ0ZXJUcmlnZ2VyW3RyaWdnZXJdW2ldLAorICAgICAgICAgICAgICAgICJUZXN0VGVuVGltZXI6IFRpbWVyIHJ1bm5pbmcgRmFpbGVkLlxuIgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDAgOyBpIDwga051bVRpbWVycyA7IGkrKykKKyAgICB7CisgICAgICAgIFZlcmlmeU9yUXVpdCh0aW1lcnNbaV0tPkdldEZpcmVkQ291bnRlcigpID09IDEsICJUZXN0VGVuVGltZXI6IFRpbWVyIGZpcmVkIGNvdW50ZXIgRmFpbGVkLlxuIik7CisgICAgfQorCisgICAgcHJpbnRmKCItLT4gUEFTU0VEXG4iKTsKKworICAgIHRlc3RGcmVlSW5zdGFuY2UoaW5zdGFuY2UpOworfQorCitpbnQgVGVzdFRlblRpbWVycyh2b2lkKQoreworICAgIC8vIFRpbWUgc2hpZnQgdG8gY2hhbmdlIHRoZSBzdGFydC9maXJlIHRpbWUgb2YgdGVuIHRpbWVycy4KKyAgICBjb25zdCB1aW50MzJfdCBrVGltZVNoaWZ0W10gPQorICAgIHsKKyAgICAgICAgMCwKKyAgICAgICAgMTAwMDAwVSwKKyAgICAgICAgMFUgLSAxVSwKKyAgICAgICAgMFUgLSAxMTAwVSwKKyAgICAgICAgb3Q6OlRpbWVyOjprTWF4RHQsCisgICAgICAgIG90OjpUaW1lcjo6a01heER0ICsgMTAyMFUsCisgICAgfTsKKworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihrVGltZVNoaWZ0KSAvIHNpemVvZihrVGltZVNoaWZ0WzBdKTsgaSsrKQorICAgIHsKKyAgICAgICAgVGVuVGltZXJzKGtUaW1lU2hpZnRbaV0pOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIFJ1blRpbWVyVGVzdHModm9pZCkKK3sKKyAgICBUZXN0T25lVGltZXIoKTsKKyAgICBUZXN0VHdvVGltZXJzKCk7CisgICAgVGVzdFRlblRpbWVycygpOworfQorCisjaWZkZWYgRU5BQkxFX1RFU1RfTUFJTgoraW50IG1haW4odm9pZCkKK3sKKyAgICBSdW5UaW1lclRlc3RzKCk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3Rvb2xjaGFpbi5jcHAgYi90ZXN0cy91bml0L3Rlc3RfdG9vbGNoYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmJkZjEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3Rvb2xjaGFpbi5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS90b29sY2hhaW4uaD4KKworI2luY2x1ZGUgInRocmVhZC90b3BvbG9neS5ocHAiCisjaW5jbHVkZSAidGVzdF91dGlsLmgiCisjaW5jbHVkZSAidXRpbHMvd3JhcF9zdGRpbnQuaCIKKworZXh0ZXJuICJDIiB7CisgICAgdWludDMyX3Qgb3ROZXRpZkFkZHJlc3NfU2l6ZV9jKCk7CisgICAgdWludDMyX3Qgb3ROZXRpZkFkZHJlc3Nfb2Zmc2V0X21OZXh0X2MoKTsKKyAgICBvdE5ldGlmQWRkcmVzcyBDcmVhdGVOZXRpZl9jKCk7Cit9CisKK3ZvaWQgdGVzdF9wYWNrZWQxKCkKK3sKKyAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgIHN0cnVjdCBwYWNrZWRfdAorICAgIHsKKyAgICAgICAgdWludDhfdCAgbUJ5dGU7CisgICAgICAgIHVpbnQzMl90IG1Xb3JkOworICAgICAgICB1aW50MTZfdCBtU2hvcnQ7CisgICAgfSBPVF9UT09MX1BBQ0tFRF9FTkQ7CisKKyAgICBDb21waWxlVGltZUFzc2VydChzaXplb2YocGFja2VkX3QpID09IDcsICJwYWNrZWRfdCBzaG91bGQgYmUgcGFja2VkIHRvIDcgYnl0ZXMiKTsKKworICAgIFZlcmlmeU9yUXVpdChzaXplb2YocGFja2VkX3QpID09IDcsICJUb29sY2hhaW46Ok9UX1RPT0xfUEFDS0VEIGZhaWxlZCAxXG4iKTsKK30KKwordm9pZCB0ZXN0X3BhY2tlZDIoKQoreworICAgIE9UX1RPT0xfUEFDS0VEX0JFR0lOCisgICAgc3RydWN0IHBhY2tlZF90CisgICAgeworICAgICAgICB1aW50OF90IG1CeXRlc1szXTsKKyAgICAgICAgdWludDhfdCBtQnl0ZTsKKyAgICB9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworICAgIENvbXBpbGVUaW1lQXNzZXJ0KHNpemVvZihwYWNrZWRfdCkgPT0gNCwgInBhY2tlZF90IHNob3VsZCBiZSBwYWNrZWQgdG8gNCBieXRlcyIpOworCisgICAgVmVyaWZ5T3JRdWl0KHNpemVvZihwYWNrZWRfdCkgPT0gNCwgIlRvb2xjaGFpbjo6T1RfVE9PTF9QQUNLRUQgZmFpbGVkIDJcbiIpOworfQorCit2b2lkIHRlc3RfcGFja2VkX3VuaW9uKCkKK3sKKyAgICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgICAgdWludDE2X3QgbUZpZWxkOworICAgIH0gbmVzdGVkX3Q7CisKKyAgICBPVF9UT09MX1BBQ0tFRF9CRUdJTgorICAgIHN0cnVjdCBwYWNrZWRfdAorICAgIHsKKyAgICAgICAgdWludDhfdCBtQnl0ZXNbM107CisgICAgICAgIHVuaW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lc3RlZF90IG1OZXN0ZWRTdHJ1Y3Q7CisgICAgICAgICAgICB1aW50OF90ICBtQnl0ZTsKKyAgICAgICAgfSBPVF9UT09MX1BBQ0tFRF9GSUVMRDsKKyAgICB9IE9UX1RPT0xfUEFDS0VEX0VORDsKKworICAgIENvbXBpbGVUaW1lQXNzZXJ0KHNpemVvZihwYWNrZWRfdCkgPT0gNSwgInBhY2tlZF90IHNob3VsZCBiZSBwYWNrZWQgdG8gNSBieXRlcyIpOworCisgICAgVmVyaWZ5T3JRdWl0KHNpemVvZihwYWNrZWRfdCkgPT0gNSwgIlRvb2xjaGFpbjo6T1RfVE9PTF9QQUNLRUQgZmFpbGVkIDNcbiIpOworfQorCit2b2lkIHRlc3RfcGFja2VkX2VudW0oKQoreworICAgIG90OjpOZWlnaGJvciBuZWlnaGJvcjsKKyAgICBuZWlnaGJvci5TZXRTdGF0ZShvdDo6TmVpZ2hib3I6OmtTdGF0ZVZhbGlkKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdoZW4gd2UgcmVhZCB0aGUgMyBiaXQgZmllbGQgaXQgaXMgcmVhZCBhcyB1bnNpZ25lZCwgc28gaXQgcmV0dXJuICc0JworICAgIFZlcmlmeU9yUXVpdChuZWlnaGJvci5HZXRTdGF0ZSgpID09IG90OjpOZWlnaGJvcjo6a1N0YXRlVmFsaWQsICJUb29sY2hhaW46Ok9UX1RPT0xfUEFDS0VEIGZhaWxlZCA0XG4iKTsKK30KKwordm9pZCB0ZXN0X2FkZHJfc2l6ZXMoKQoreworICAgIFZlcmlmeU9yUXVpdChvZmZzZXRvZihvdE5ldGlmQWRkcmVzcywgbU5leHQpID09IG90TmV0aWZBZGRyZXNzX29mZnNldF9tTmV4dF9jKCksCisgICAgICAgICAgICAgICAgICJtTmV4dCBzaG91bGQgb2Zmc2V0IHRoZSBzYW1lIGluIEMgJiBDKysiKTsKKyAgICBWZXJpZnlPclF1aXQoc2l6ZW9mKG90TmV0aWZBZGRyZXNzKSA9PSBvdE5ldGlmQWRkcmVzc19TaXplX2MoKSwgIm90TmV0aWZBZGRyZXNzIHNob3VsZCB0aGUgc2FtZSBpbiBDICYgQysrIik7Cit9CisKK3ZvaWQgdGVzdF9hZGRyX2JpdGZpZWxkKCkKK3sKKyAgICBWZXJpZnlPclF1aXQoQ3JlYXRlTmV0aWZfYygpLm1TY29wZU92ZXJyaWRlVmFsaWQgPT0gdHJ1ZSwgIlRvb2xjaGFpbjo6dGVzdF9hZGRyX3NpemVfY3BwXG4iKTsKK30KKwordm9pZCBUZXN0VG9vbGNoYWluKHZvaWQpCit7CisgICAgdGVzdF9wYWNrZWQxKCk7CisgICAgdGVzdF9wYWNrZWQyKCk7CisgICAgdGVzdF9wYWNrZWRfdW5pb24oKTsKKyAgICB0ZXN0X3BhY2tlZF9lbnVtKCk7CisgICAgdGVzdF9hZGRyX3NpemVzKCk7CisgICAgdGVzdF9hZGRyX2JpdGZpZWxkKCk7Cit9CisKKyNpZmRlZiBFTkFCTEVfVEVTVF9NQUlOCitpbnQgbWFpbih2b2lkKQoreworICAgIFRlc3RUb29sY2hhaW4oKTsKKyAgICBwcmludGYoIkFsbCB0ZXN0cyBwYXNzZWRcbiIpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfdG9vbGNoYWluX2MuYyBiL3Rlc3RzL3VuaXQvdGVzdF90b29sY2hhaW5fYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDY1YTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfdG9vbGNoYWluX2MuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvcGxhdGZvcm0vdG9vbGNoYWluLmg+CisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKwordWludDMyX3Qgb3ROZXRpZkFkZHJlc3NfU2l6ZV9jKCkKK3sKKyAgICByZXR1cm4gc2l6ZW9mKG90TmV0aWZBZGRyZXNzKTsKK30KKwordWludDMyX3Qgb3ROZXRpZkFkZHJlc3Nfb2Zmc2V0X21OZXh0X2MoKQoreworICAgIHJldHVybiBvZmZzZXRvZihvdE5ldGlmQWRkcmVzcywgbU5leHQpOworfQorCitvdE5ldGlmQWRkcmVzcyBDcmVhdGVOZXRpZl9jKCkKK3sKKyAgICBvdE5ldGlmQWRkcmVzcyBhZGRyOworICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICBhZGRyLm1TY29wZU92ZXJyaWRlVmFsaWQgPSB0cnVlOworICAgIHJldHVybiBhZGRyOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0X3V0aWwuY3BwIGIvdGVzdHMvdW5pdC90ZXN0X3V0aWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOWQ0MjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bml0L3Rlc3RfdXRpbC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInRlc3RfdXRpbC5oIgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCit2b2lkIG90VGVzdEhleFRvVmVjdG9yKHN0ZDo6c3RyaW5nICZhSGV4LCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmYU91dEJ5dGVzKQoreworICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBzcyhhSGV4KTsKKyAgICBzdGQ6OnN0cmluZyB3b3JkOworCisgICAgd2hpbGUgKHNzID4+IHdvcmQpCisgICAgeworICAgICAgICB1aW50OF90IG4gPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdHJ0b2wod29yZC5kYXRhKCksIE5VTEwsIDE2KSk7CisgICAgICAgIGFPdXRCeXRlcy5wdXNoX2JhY2sobik7CisgICAgfQorfQorCit2b2lkIG90VGVzdFByaW50SGV4KHVpbnQ4X3QgKmFCdWZmZXIsIGludCBhTGVuZ3RoKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGFMZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiJTAyeCAiLCBhQnVmZmVyW2ldKTsKKworICAgICAgICBpZiAoaSAlIDE2ID09IDcpIHsgcHJpbnRmKCIgIik7IH0KKworICAgICAgICBpZiAoaSAlIDE2ID09IDE1ICYmIGFMZW5ndGggIT0gaSArIDEpIHsgcHJpbnRmKCJcbiIpOyB9CisgICAgfQorCisgICAgcHJpbnRmKCJcbiIpOworfQorCit2b2lkIG90VGVzdFByaW50SGV4KHN0ZDo6c3RyaW5nICZhU3RyaW5nKQoreworICAgIG90VGVzdFByaW50SGV4KCh1aW50OF90ICopYVN0cmluZy5kYXRhKCksIHN0YXRpY19jYXN0PGludD4oYVN0cmluZy5zaXplKCkpKTsKK30KKwordm9pZCBvdFRlc3RQcmludEhleChzdGQ6OnZlY3Rvcjx1aW50OF90PiAmYUJ5dGVzKQoreworICAgIG90VGVzdFByaW50SGV4KCh1aW50OF90ICopJmFCeXRlc1swXSwgc3RhdGljX2Nhc3Q8aW50PihhQnl0ZXMuc2l6ZSgpKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3Rlc3RfdXRpbC5oIGIvdGVzdHMvdW5pdC90ZXN0X3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNmYjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3V0aWwuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRFU1RfVVRJTF9ICisjZGVmaW5lIFRFU1RfVVRJTF9ICisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8b3BlbnRocmVhZC90eXBlcy5oPgorCisjaWZuZGVmIF9XSU4zMgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vIEVuYWJsZSBtYWluIGZ1bmN0aW9ucworI2RlZmluZSBFTkFCTEVfVEVTVF9NQUlOCisKKyNkZWZpbmUgU3VjY2Vzc09yUXVpdChFUlIsIE1TRykgICAgICAgICAgICAgICAgIFwKKyAgZG8geyBcCisgICAgaWYgKChFUlIpICE9IE9UX0VSUk9SX05PTkUpICAgICBcCisgICAgeyBcCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIEZBSUxFRDogIiwgX19GVU5DVElPTl9fKTsgXAorICAgICAgZnB1dHMoTVNHLCBzdGRlcnIpOyBcCisgICAgICBleGl0KC0xKTsgXAorICAgIH0gXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFZlcmlmeU9yUXVpdChUU1QsIE1TRykgXAorICBkbyB7IFwKKyAgICBpZiAoIShUU1QpKSBcCisgICAgeyBcCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIEZBSUxFRDogIiwgX19GVU5DVElPTl9fKTsgXAorICAgICAgZnB1dHMoTVNHLCBzdGRlcnIpOyBcCisgICAgICBleGl0KC0xKTsgXAorICAgIH0gXAorICB9IHdoaWxlICgwKQorCisvLyNkZWZpbmUgQ29tcGlsZVRpbWVBc3NlcnQoQ09ORCwgTVNHKSB0eXBlZGVmIGNoYXIgX19DX0FTU0VSVF9fWyhDT05EKT8xOi0xXQorCisvLyBJIHdvdWxkIHVzZSB0aGUgYWJvdmUgZGVmaW5pdGlvbiBmb3IgQ29tcGlsZVRpbWVBc3NlcnQsIGJ1dCBJIGFtIGdldHRpbmcgdGhlIGZvbGxvd2luZyBlcnJvcnMKKy8vIHdoZW4gSSBydW4gJ21ha2UgLWYgZXhhbXBsZXMvTWFrZWZpbGUtcG9zaXggZGlzdGNoZWNrJzoKKy8vCisvLyAgICAgIGVycm9yOiB0eXBlZGVmICJfX0NfQVNTRVJUX18iIGxvY2FsbHkgZGVmaW5lZCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWxvY2FsLXR5cGVkZWZzXQorLy8KKyNkZWZpbmUgQ29tcGlsZVRpbWVBc3NlcnQoQ09ORCwgTVNHKQorCisjZGVmaW5lIExvZyhhRm9ybWF0LCAuLi4pIHByaW50ZihhRm9ybWF0ICJcbiIsICMjIF9fVkFfQVJHU19fKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZQorCit0eXBlZGVmIHZvaWQgKCp1dEFzc2VydFRydWUpKGJvb2wgY29uZGl0aW9uLCBjb25zdCB3Y2hhcl90ICptZXNzYWdlKTsKK2V4dGVybiB1dEFzc2VydFRydWUgc19Bc3NlcnRUcnVlOworCit0eXBlZGVmIHZvaWQgKCp1dExvZ01lc3NhZ2UpKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKK2V4dGVybiB1dExvZ01lc3NhZ2Ugc19Mb2dNZXNzYWdlOworCisjZGVmaW5lIFN1Y2Nlc3NPclF1aXQoRVJSLCBNU0cpIHNfQXNzZXJ0VHJ1ZSgoRVJSKSA9PSBPVF9FUlJPUl9OT05FLCBMIyNNU0cpCisKKyNkZWZpbmUgVmVyaWZ5T3JRdWl0KEVSUiwgTVNHKSBzX0Fzc2VydFRydWUoRVJSLCBMIyNNU0cpCisKKyNkZWZpbmUgQ29tcGlsZVRpbWVBc3NlcnQoQ09ORCwgTVNHKSBzdGF0aWNfYXNzZXJ0KENPTkQsIE1TRykKKworI2RlZmluZSBMb2coYUZvcm1hdCwgLi4uKSBzX0xvZ01lc3NhZ2UoYUZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmhwcCBiL3Rlc3RzL3VuaXQvdGVzdF91dGlsLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI1ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3V0aWwuaHBwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisgKiAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVEVTVF9VVElMX0hQUAorI2RlZmluZSBURVNUX1VUSUxfSFBQCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKworLy8gU1RMIGlzIG9rYXkgaW4gdW5pdCB0ZXN0cy4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCit2b2lkIG90VGVzdEhleFRvVmVjdG9yKHN0ZDo6c3RyaW5nICZhSGV4LCBzdGQ6OnZlY3Rvcjx1aW50OF90PiAmYU91dEJ5dGVzKTsKKwordm9pZCBvdFRlc3RQcmludEhleCh1aW50OF90ICphQnVmZmVyLCBpbnQgYUxlbmd0aCk7CisKK3ZvaWQgb3RUZXN0UHJpbnRIZXgoc3RkOjp2ZWN0b3I8dWludDhfdD4gJmFCeXRlcyk7CisKK3ZvaWQgb3RUZXN0UHJpbnRIZXgoc3RkOjpzdHJpbmcgJmFTdHJpbmcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdGVzdF93aW5kb3dzLmNwcCBiL3Rlc3RzL3VuaXQvdGVzdF93aW5kb3dzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmMxNTExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5pdC90ZXN0X3dpbmRvd3MuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorICogICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8U0RLRERLVmVyLmg+CisjaW5jbHVkZSAiQ3BwVW5pdFRlc3QuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWwuaCIKKyNpbmNsdWRlICJ0ZXN0X3BsYXRmb3JtLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBNaWNyb3NvZnQ6OlZpc3VhbFN0dWRpbzo6Q3BwVW5pdFRlc3RGcmFtZXdvcms7CisKKyNwcmFnbWEgcmVnaW9uIFRlc3QgRGVjbGFyYXRpb25zCisKKy8vIHRlc3RfYWVzLmNwcAordm9pZCBUZXN0TWFjQmVhY29uRnJhbWUoKTsKK3ZvaWQgVGVzdE1hY0RhdGFGcmFtZSgpOwordm9pZCBUZXN0TWFjQ29tbWFuZEZyYW1lKCk7CisKKy8vIHRlc3RfaG1hY19zaGEyNTYuY3BwCit2b2lkIFRlc3RIbWFjU2hhMjU2KCk7CisKKy8vIHRlc3RfbGlua19xdWFsaXR5LmNwcAorbmFtZXNwYWNlIG90Cit7CisgICAgdm9pZCBUZXN0UnNzQXZlcmFnaW5nKCk7CisgICAgdm9pZCBUZXN0TGlua1F1YWxpdHlDYWxjdWxhdGlvbnMoKTsKK30KKworLy8gdGVzdF9sb3dwYW4uY3BwCituYW1lc3BhY2Ugb3QKK3sKKyAgICB2b2lkIFRlc3RMb3dwYW5JcGhjKCk7Cit9CisKKy8vIHRlc3RfbWFjX2ZyYW1lLmNwcAorbmFtZXNwYWNlIG90Cit7CisgICAgdm9pZCBUZXN0TWFjSGVhZGVyKCk7Cit9CisKKy8vIHRlc3RfbWVzc2FnZS5jcHAKK3ZvaWQgVGVzdE1lc3NhZ2UoKTsKKworLy8gdGVzdF9tZXNzYWdlX3F1ZXVlLmNwcAordm9pZCBUZXN0TWVzc2FnZVF1ZXVlKCk7CisKKy8vIHRlc3RfcHJpb3JpdHlfcXVldWUuY3BwCit2b2lkIFRlc3RQcmlvcml0eVF1ZXVlKCk7CisKKy8vIHRlc3RfbmNwX2J1ZmZlci5jcHAKK25hbWVzcGFjZSBvdAoreworICAgIHZvaWQgVGVzdE5jcEZyYW1lQnVmZmVyKHZvaWQpOworfQorCisvLyB0ZXN0X3RpbWVyLmNwcAoraW50IFRlc3RPbmVUaW1lcigpOworaW50IFRlc3RUd29UaW1lcnMoKTsKK2ludCBUZXN0VGVuVGltZXJzKCk7CisKKy8vIHRlc3RfdG9vbGNoYWluLmNwcAordm9pZCB0ZXN0X3BhY2tlZDEoKTsKK3ZvaWQgdGVzdF9wYWNrZWQyKCk7Cit2b2lkIHRlc3RfcGFja2VkX3VuaW9uKCk7Cit2b2lkIHRlc3RfcGFja2VkX2VudW0oKTsKK3ZvaWQgdGVzdF9hZGRyX3NpemVzKCk7Cit2b2lkIHRlc3RfYWRkcl9iaXRmaWVsZCgpOworCisvLyB0ZXN0X2Z1enouY3BwCit2b2lkIFRlc3RGdXp6KHVpbnQzMl90IGFTZWNvbmRzKTsKKworI3ByYWdtYSBlbmRyZWdpb24KKwordXRBc3NlcnRUcnVlIHNfQXNzZXJ0VHJ1ZTsKK3V0TG9nTWVzc2FnZSBzX0xvZ01lc3NhZ2U7CisKK25hbWVzcGFjZSBvdAoreworICAgIFRFU1RfQ0xBU1MoVW5pdFRlc3RzKQorICAgIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgVW5pdFRlc3RzKCkgeyBzX0Fzc2VydFRydWUgPSBBc3NlcnRUcnVlOyBzX0xvZ01lc3NhZ2UgPSBMb2dNZXNzYWdlOyB9CisKKyAgICAgICAgLy8gSGVscGVyIGZvciBvcGVudGhyZWFkIHRlc3QgY29kZSB0byBjYWxsCisgICAgICAgIHN0YXRpYyB2b2lkIEFzc2VydFRydWUoYm9vbCBjb25kaXRpb24sIGNvbnN0IHdjaGFyX3QqIG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydDo6SXNUcnVlKGNvbmRpdGlvbiwgbWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBIZWxwZXIgZm9yIGxvZ2dpbmcgYSBtZXNzYWdlCisgICAgICAgIHN0YXRpYyB2b2lkIExvZ01lc3NhZ2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgbWVzc2FnZVs1MTJdOworCisgICAgICAgICAgICB2YV9saXN0IGFyZ3M7CisgICAgICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICAgICAgdnNucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKKworICAgICAgICAgICAgTG9nZ2VyOjpXcml0ZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVzZXQgdGhlIHRlc3QgcGxhdGZvcm0gZnVuY3Rpb25zIGJlZm9yZSBlYWNoIHRlc3QKKyAgICAgICAgVEVTVF9NRVRIT0RfSU5JVElBTElaRShUZXN0TWV0aG9kSW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdFBsYXRSZXNldFRvRGVmYXVsdHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHRlc3RfYWVzLmNwcAorICAgICAgICBURVNUX01FVEhPRChUZXN0TWFjQmVhY29uRnJhbWUpIHsgOjpUZXN0TWFjQmVhY29uRnJhbWUoKTsgfQorICAgICAgICBURVNUX01FVEhPRChUZXN0TWFjRGF0YUZyYW1lKSB7IDo6VGVzdE1hY0RhdGFGcmFtZSgpOyB9CisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RNYWNDb21tYW5kRnJhbWUpIHsgOjpUZXN0TWFjQ29tbWFuZEZyYW1lKCk7IH0KKworICAgICAgICAvLyB0ZXN0X2htYWNfc2hhMjU2LmNwcAorICAgICAgICBURVNUX01FVEhPRChUZXN0SG1hY1NoYTI1NikgeyA6OlRlc3RIbWFjU2hhMjU2KCk7IH0KKworICAgICAgICAvLyB0ZXN0X2xpbmtfcXVhbGl0eS5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdFJzc0F2ZXJhZ2luZykgeyBvdDo6VGVzdFJzc0F2ZXJhZ2luZygpOyB9CisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RMaW5rUXVhbGl0eUNhbGN1bGF0aW9ucykgeyBvdDo6VGVzdExpbmtRdWFsaXR5Q2FsY3VsYXRpb25zKCk7IH0KKworICAgICAgICAvLyB0ZXN0X2xvd3Bhbi5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdExvd3BhbklwaGMpIHsgb3Q6OlRlc3RMb3dwYW5JcGhjKCk7IH0KKworICAgICAgICAvLyB0ZXN0X21hY19mcmFtZS5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdE1hY0hlYWRlcikgeyBvdDo6VGVzdE1hY0hlYWRlcigpOyB9CisKKyAgICAgICAgLy8gdGVzdF9tZXNzYWdlLmNwcAorICAgICAgICBURVNUX01FVEhPRChUZXN0TWVzc2FnZSkgeyA6OlRlc3RNZXNzYWdlKCk7IH0KKworICAgICAgICAvLyB0ZXN0X21lc3NhZ2VfcXVldWUuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RNZXNzYWdlUXVldWUpIHsgOjpUZXN0TWVzc2FnZVF1ZXVlKCk7IH0KKworICAgICAgICAvLyB0ZXN0X21lc3NhZ2VfcXVldWUuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RQcmlvcml0eVF1ZXVlKSB7IDo6VGVzdFByaW9yaXR5UXVldWUoKTsgfQorCisgICAgICAgIC8vIHRlc3RfdGltZXIuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RPbmVUaW1lcikgeyA6OlRlc3RPbmVUaW1lcigpOyB9CisgICAgICAgIFRFU1RfTUVUSE9EKFRlc3RUd29UaW1lcnMpIHsgOjpUZXN0VHdvVGltZXJzKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdFRlblRpbWVycykgeyA6OlRlc3RUZW5UaW1lcnMoKTsgfQorCisgICAgICAgIC8vIHRlc3RfbmNwX2J1ZmZlci5jcHAKKyAgICAgICAgVEVTVF9NRVRIT0QoVGVzdE5jcEZyYW1lQnVmZmVyKSB7IG90OjpUZXN0TmNwRnJhbWVCdWZmZXIoKTsgfQorCisgICAgICAgIC8vIHRlc3RfdG9vbGNoYWluLmNwcAorICAgICAgICBURVNUX01FVEhPRCh0ZXN0X3BhY2tlZDEpIHsgOjp0ZXN0X3BhY2tlZDEoKTsgfQorICAgICAgICBURVNUX01FVEhPRCh0ZXN0X3BhY2tlZDIpIHsgOjp0ZXN0X3BhY2tlZDIoKTsgfQorICAgICAgICBURVNUX01FVEhPRCh0ZXN0X3BhY2tlZF91bmlvbikgeyA6OnRlc3RfcGFja2VkX3VuaW9uKCk7IH0KKyAgICAgICAgVEVTVF9NRVRIT0QodGVzdF9wYWNrZWRfZW51bSkgeyA6OnRlc3RfcGFja2VkX2VudW0oKTsgfQorICAgICAgICBURVNUX01FVEhPRCh0ZXN0X2FkZHJfc2l6ZXMpIHsgOjp0ZXN0X2FkZHJfc2l6ZXMoKTsgfQorICAgICAgICBURVNUX01FVEhPRCh0ZXN0X2FkZHJfYml0ZmllbGQpIHsgOjp0ZXN0X2FkZHJfYml0ZmllbGQoKTsgfQorCisgICAgICAgIC8vIHRlc3Rfc2V0dGluZ3MuY3BwCisgICAgICAgIFRFU1RfTUVUSE9EKFJ1blRlc3RGdXp6KSB7IDo6VGVzdEZ1enooMzApOyB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5Ly5naXRhdHRyaWJ1dGVzIGIvdGhpcmRfcGFydHkvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjMDJlNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsNCBAQAorIyBEaXNhYmxlIGF1dG9tYXRpYyB0ZXh0IGZpbGUgbGluZS1lbmRpbmcKKyMgbm9ybWFsaXphdGlvbiBmb3IgdGhpcmQtcGFydHkgY29kZS4KKyogIXRleHQKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTWFrZWZpbGUuYW0gYi90aGlyZF9wYXJ0eS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWZmMzFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1OCBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgZGlhbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbnhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmxidWlsZC1hdXRvdG9vbHMgICAgICAgICAgICAgICAgICAgICBcCisgICAgb3BlbnRocmVhZC10ZXN0LWRyaXZlciAgICAgICAgICAgICAgICBcCisgICAgTm9yZGljU2VtaWNvbmR1Y3RvciAgICAgICAgICAgICAgICAgICBcCisgICAgc3lub3BzeXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCitFWFRSQV9ESVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgc2lsYWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYKKworIyBBbHdheXMgcGFja2FnZSAoZS5nLiBmb3IgJ21ha2UgZGlzdCcpIHRoZXNlIHN1YmRpcmVjdG9yaWVzLgorCitESVNUX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgbWJlZHRscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9CVUlMVElOX01CRURUTFMKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBtYmVkdGxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAjIE9QRU5USFJFQURfRU5BQkxFX0JVSUxUSU5fTUJFRFRMUworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3ZDI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTggQEAKK0Rlc2NyaXB0aW9uOgorVGhpcyBmb2xkZXIgY29uc2lzdHMgb2Ygc2VsZWN0ZWQgY29tcG9uZW50cyBmcm9tIHRoZSBuUkY1IFNESywgdGhhdCBhcmUgdXNlZAoraW4gcHJvY2VzcyBvZiBidWlsZGluZyB0aGUgT3BlblRocmVhZCdzIG5SRjUyODQwIHBsYXRmb3JtLgorCituUkY1IFNES3MgdXNlZDoKKyAtIG5SRjUgU0RLIDEyLjIuMDogW1VSTF1bbnJmNS1zZGstMTItMi0wXQorIC0gblJGNSBTREsgMTMuMC4wOiBbVVJMXVtucmY1LXNkay0xMy0wLTBdCisKK0RpcmVjdG9yeSBjb25zaXN0cyBvZiBmb2xsb3dpbmcgZm9sZGVyczoKKyAtIC9jbXNpcyAgICAgIC0gQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXJzIGZpbGVzIChuUkY1IFNESyAxMi4yLjApCisgLSAvZGV2aWNlICAgICAtIE1ESyBmb3IgdGhlIG5SRjUyODQwIGNoaXAgKG5SRjUgU0RLIDEyLjIuMCkKKyAtIC9kcml2ZXJzICAgIC0gRHJpdmVycyBmb3IgdGhlIG5SRjUyODQwIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHBsYXRmb3JtIChjdXN0b20gZmlsZXMpCisgLSAvaGFsICAgICAgICAtIEhhcmR3YXJlIEFjY2VzcyBMYXllciBmb3IgdGhlIG5SRjUyODQwIGNoaXAgKG5SRjUgU0RLIDEyLjIuMCkKKyAtIC9zZWdnZXJfcnR0IC0gTGlicmFyeSBmb3IgdGhlIFJUVCBjb21tdW5pY2F0aW9uIChuUkY1IFNESyAxMi4yLjApCisgLSAvc29mdGRldmljZSAtIFNvZnREZXZpY2UgczE0MCBoZWFkZXJzIChuUkY1IFNESyAxMy4wLjApCisKKyBbbnJmNS1zZGstMTItMi0wXTogaHR0cDovL2RldmVsb3Blci5ub3JkaWNzZW1pLmNvbS9uUkY1X1NESy9uUkY1X1NES192MTIueC54L25SRjVfU0RLXzEyLjIuMF9mMDEyZWZhLnppcAorIFtucmY1LXNkay0xMy0wLTBdOiBodHRwOi8vZGV2ZWxvcGVyLm5vcmRpY3NlbWkuY29tL25SRjVfU0RLL25SRjVfU0RLX3YxMy54LngvblJGNV9TREtfMTMuMC4wXzA0YTBiZmQuemlwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2FybV9tYXRoLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2FybV9tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5NTlmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvYXJtX21hdGguaApAQCAtMCwwICsxLDcxNjUgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyoNCisqICREYXRlOiAgICAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyogJFJldmlzaW9uOiAgICBWMS40LjUgYg0KKyoNCisqIFByb2plY3Q6ICAgICAgQ01TSVMgRFNQIExpYnJhcnkNCisqIFRpdGxlOiAgICAgICAgYXJtX21hdGguaA0KKyoNCisqIERlc2NyaXB0aW9uOiAgUHVibGljIGhlYWRlciBmaWxlIGZvciBDTVNJUyBEU1AgTGlicmFyeQ0KKyoNCisqIFRhcmdldCBQcm9jZXNzb3I6IENvcnRleC1NNy9Db3J0ZXgtTTQvQ29ydGV4LU0zL0NvcnRleC1NMA0KKyoNCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorKiBhcmUgbWV0Og0KKyogICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyogICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQorKiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyogICAgIGRpc3RyaWJ1dGlvbi4NCisqICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBMSU1JVEVEIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyogICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcw0KKyogICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyoNCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUw0KKyogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCisqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCisqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsDQorKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCisqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElODQorKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICAgXG1haW5wYWdlIENNU0lTIERTUCBTb2Z0d2FyZSBMaWJyYXJ5DQorICAgKg0KKyAgICogSW50cm9kdWN0aW9uDQorICAgKiAtLS0tLS0tLS0tLS0NCisgICAqDQorICAgKiBUaGlzIHVzZXIgbWFudWFsIGRlc2NyaWJlcyB0aGUgQ01TSVMgRFNQIHNvZnR3YXJlIGxpYnJhcnksDQorICAgKiBhIHN1aXRlIG9mIGNvbW1vbiBzaWduYWwgcHJvY2Vzc2luZyBmdW5jdGlvbnMgZm9yIHVzZSBvbiBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4NCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBpcyBkaXZpZGVkIGludG8gYSBudW1iZXIgb2YgZnVuY3Rpb25zIGVhY2ggY292ZXJpbmcgYSBzcGVjaWZpYyBjYXRlZ29yeToNCisgICAqIC0gQmFzaWMgbWF0aCBmdW5jdGlvbnMNCisgICAqIC0gRmFzdCBtYXRoIGZ1bmN0aW9ucw0KKyAgICogLSBDb21wbGV4IG1hdGggZnVuY3Rpb25zDQorICAgKiAtIEZpbHRlcnMNCisgICAqIC0gTWF0cml4IGZ1bmN0aW9ucw0KKyAgICogLSBUcmFuc2Zvcm1zDQorICAgKiAtIE1vdG9yIGNvbnRyb2wgZnVuY3Rpb25zDQorICAgKiAtIFN0YXRpc3RpY2FsIGZ1bmN0aW9ucw0KKyAgICogLSBTdXBwb3J0IGZ1bmN0aW9ucw0KKyAgICogLSBJbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucw0KKyAgICoNCisgICAqIFRoZSBsaWJyYXJ5IGhhcyBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIG9wZXJhdGluZyBvbiA4LWJpdCBpbnRlZ2VycywgMTYtYml0IGludGVnZXJzLA0KKyAgICogMzItYml0IGludGVnZXIgYW5kIDMyLWJpdCBmbG9hdGluZy1wb2ludCB2YWx1ZXMuDQorICAgKg0KKyAgICogVXNpbmcgdGhlIExpYnJhcnkNCisgICAqIC0tLS0tLS0tLS0tLQ0KKyAgICoNCisgICAqIFRoZSBsaWJyYXJ5IGluc3RhbGxlciBjb250YWlucyBwcmVidWlsdCB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyaWVzIGluIHRoZSA8Y29kZT5MaWI8L2NvZGU+IGZvbGRlci4NCisgICAqIC0gYXJtX2NvcnRleE03bGZkcF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBhbmQgRG91YmxlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNykNCisgICAqIC0gYXJtX2NvcnRleE03YmZkcF9tYXRoLmxpYiAoQmlnIGVuZGlhbiBhbmQgRG91YmxlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNykNCisgICAqIC0gYXJtX2NvcnRleE03bGZzcF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBhbmQgU2luZ2xlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNykNCisgICAqIC0gYXJtX2NvcnRleE03YmZzcF9tYXRoLmxpYiAoQmlnIGVuZGlhbiBhbmQgU2luZ2xlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNykNCisgICAqIC0gYXJtX2NvcnRleE03bF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTcpDQorICAgKiAtIGFybV9jb3J0ZXhNN2JfbWF0aC5saWIgKEJpZyBlbmRpYW4gb24gQ29ydGV4LU03KQ0KKyAgICogLSBhcm1fY29ydGV4TTRsZl9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBhbmQgRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTQpDQorICAgKiAtIGFybV9jb3J0ZXhNNGJmX21hdGgubGliIChCaWcgZW5kaWFuIGFuZCBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNCkNCisgICAqIC0gYXJtX2NvcnRleE00bF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTQpDQorICAgKiAtIGFybV9jb3J0ZXhNNGJfbWF0aC5saWIgKEJpZyBlbmRpYW4gb24gQ29ydGV4LU00KQ0KKyAgICogLSBhcm1fY29ydGV4TTNsX21hdGgubGliIChMaXR0bGUgZW5kaWFuIG9uIENvcnRleC1NMykNCisgICAqIC0gYXJtX2NvcnRleE0zYl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBvbiBDb3J0ZXgtTTMpDQorICAgKiAtIGFybV9jb3J0ZXhNMGxfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gb24gQ29ydGV4LU0wIC8gQ29ydGV4TTArKQ0KKyAgICogLSBhcm1fY29ydGV4TTBiX21hdGgubGliIChCaWcgZW5kaWFuIG9uIENvcnRleC1NMCAvIENvcnRleE0wKykNCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGluIHRoZSBwdWJsaWMgZmlsZSA8Y29kZT5hcm1fbWF0aC5oPC9jb2RlPiB3aGljaCBpcyBwbGFjZWQgaW4gdGhlIDxjb2RlPkluY2x1ZGU8L2NvZGU+IGZvbGRlci4NCisgICAqIFNpbXBseSBpbmNsdWRlIHRoaXMgZmlsZSBhbmQgbGluayB0aGUgYXBwcm9wcmlhdGUgbGlicmFyeSBpbiB0aGUgYXBwbGljYXRpb24gYW5kIGJlZ2luIGNhbGxpbmcgdGhlIGxpYnJhcnkgZnVuY3Rpb25zLiBUaGUgTGlicmFyeSBzdXBwb3J0cyBzaW5nbGUNCisgICAqIHB1YmxpYyBoZWFkZXIgZmlsZSA8Y29kZT4gYXJtX21hdGguaDwvY29kZT4gZm9yIENvcnRleC1NNy9NNC9NMy9NMC9NMCsgd2l0aCBsaXR0bGUgZW5kaWFuIGFuZCBiaWcgZW5kaWFuLiBTYW1lIGhlYWRlciBmaWxlIHdpbGwgYmUgdXNlZCBmb3IgZmxvYXRpbmcgcG9pbnQgdW5pdChGUFUpIHZhcmlhbnRzLg0KKyAgICogRGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBwcmUgcHJvY2Vzc29yIE1BQ1JPIEFSTV9NQVRIX0NNNyBvciBBUk1fTUFUSF9DTTQgb3IgIEFSTV9NQVRIX0NNMyBvcg0KKyAgICogQVJNX01BVEhfQ00wIG9yIEFSTV9NQVRIX0NNMFBMVVMgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yIGluIHRoZSBhcHBsaWNhdGlvbi4NCisgICAqDQorICAgKiBFeGFtcGxlcw0KKyAgICogLS0tLS0tLS0NCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBzaGlwcyB3aXRoIGEgbnVtYmVyIG9mIGV4YW1wbGVzIHdoaWNoIGRlbW9uc3RyYXRlIGhvdyB0byB1c2UgdGhlIGxpYnJhcnkgZnVuY3Rpb25zLg0KKyAgICoNCisgICAqIFRvb2xjaGFpbiBTdXBwb3J0DQorICAgKiAtLS0tLS0tLS0tLS0NCisgICAqDQorICAgKiBUaGUgbGlicmFyeSBoYXMgYmVlbiBkZXZlbG9wZWQgYW5kIHRlc3RlZCB3aXRoIE1ESy1BUk0gdmVyc2lvbiA1LjE0LjAuMA0KKyAgICogVGhlIGxpYnJhcnkgaXMgYmVpbmcgdGVzdGVkIGluIEdDQyBhbmQgSUFSIHRvb2xjaGFpbnMgYW5kIHVwZGF0ZXMgb24gdGhpcyBhY3Rpdml0eSB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHNob3J0bHkuDQorICAgKg0KKyAgICogQnVpbGRpbmcgdGhlIExpYnJhcnkNCisgICAqIC0tLS0tLS0tLS0tLQ0KKyAgICoNCisgICAqIFRoZSBsaWJyYXJ5IGluc3RhbGxlciBjb250YWlucyBhIHByb2plY3QgZmlsZSB0byByZSBidWlsZCBsaWJyYXJpZXMgb24gTURLLUFSTSBUb29sIGNoYWluIGluIHRoZSA8Y29kZT5DTVNJU1xcRFNQX0xpYlxcU291cmNlXFxBUk08L2NvZGU+IGZvbGRlci4NCisgICAqIC0gYXJtX2NvcnRleE1fbWF0aC51dnByb2p4DQorICAgKg0KKyAgICoNCisgICAqIFRoZSBsaWJyYXJpZXMgY2FuIGJlIGJ1aWx0IGJ5IG9wZW5pbmcgdGhlIGFybV9jb3J0ZXhNX21hdGgudXZwcm9qeCBwcm9qZWN0IGluIE1ESy1BUk0sIHNlbGVjdGluZyBhIHNwZWNpZmljIHRhcmdldCwgYW5kIGRlZmluaW5nIHRoZSBvcHRpb25hbCBwcmUgcHJvY2Vzc29yIE1BQ1JPcyBkZXRhaWxlZCBhYm92ZS4NCisgICAqDQorICAgKiBQcmUtcHJvY2Vzc29yIE1hY3Jvcw0KKyAgICogLS0tLS0tLS0tLS0tDQorICAgKg0KKyAgICogRWFjaCBsaWJyYXJ5IHByb2plY3QgaGF2ZSBkaWZmZXJhbnQgcHJlLXByb2Nlc3NvciBtYWNyb3MuDQorICAgKg0KKyAgICogLSBVTkFMSUdORURfU1VQUE9SVF9ESVNBQkxFOg0KKyAgICoNCisgICAqIERlZmluZSBtYWNybyBVTkFMSUdORURfU1VQUE9SVF9ESVNBQkxFLCBJZiB0aGUgc2lsaWNvbiBkb2VzIG5vdCBzdXBwb3J0IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzDQorICAgKg0KKyAgICogLSBBUk1fTUFUSF9CSUdfRU5ESUFOOg0KKyAgICoNCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9CSUdfRU5ESUFOIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGZvciBiaWcgZW5kaWFuIHRhcmdldHMuIEJ5IGRlZmF1bHQgbGlicmFyeSBidWlsZHMgZm9yIGxpdHRsZSBlbmRpYW4gdGFyZ2V0cy4NCisgICAqDQorICAgKiAtIEFSTV9NQVRIX01BVFJJWF9DSEVDSzoNCisgICAqDQorICAgKiBEZWZpbmUgbWFjcm8gQVJNX01BVEhfTUFUUklYX0NIRUNLIGZvciBjaGVja2luZyBvbiB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaXplcyBvZiBtYXRyaWNlcw0KKyAgICoNCisgICAqIC0gQVJNX01BVEhfUk9VTkRJTkc6DQorICAgKg0KKyAgICogRGVmaW5lIG1hY3JvIEFSTV9NQVRIX1JPVU5ESU5HIGZvciByb3VuZGluZyBvbiBzdXBwb3J0IGZ1bmN0aW9ucw0KKyAgICoNCisgICAqIC0gQVJNX01BVEhfQ014Og0KKyAgICoNCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9DTTQgZm9yIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IG9uIENvcnRleC1NNCB0YXJnZXQsIEFSTV9NQVRIX0NNMyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvbiBDb3J0ZXgtTTMgdGFyZ2V0DQorICAgKiBhbmQgQVJNX01BVEhfQ00wIGZvciBidWlsZGluZyBsaWJyYXJ5IG9uIENvcnRleC1NMCB0YXJnZXQsIEFSTV9NQVRIX0NNMFBMVVMgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb24gQ29ydGV4LU0wKyB0YXJnZXQsIGFuZA0KKyAgICogQVJNX01BVEhfQ003IGZvciBidWlsZGluZyB0aGUgbGlicmFyeSBvbiBjb3J0ZXgtTTcuDQorICAgKg0KKyAgICogLSBfX0ZQVV9QUkVTRU5UOg0KKyAgICoNCisgICAqIEluaXRpYWxpemUgbWFjcm8gX19GUFVfUFJFU0VOVCA9IDEgd2hlbiBidWlsZGluZyBvbiBGUFUgc3VwcG9ydGVkIFRhcmdldHMuIEVuYWJsZSB0aGlzIG1hY3JvIGZvciBNNGJmIGFuZCBNNGxmIGxpYnJhcmllcw0KKyAgICoNCisgICAqIDxocj4NCisgICAqIENNU0lTLURTUCBpbiBBUk06OkNNU0lTIFBhY2sNCisgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgKg0KKyAgICogVGhlIGZvbGxvd2luZyBmaWxlcyByZWxldmFudCB0byBDTVNJUy1EU1AgYXJlIHByZXNlbnQgaW4gdGhlIDxiPkFSTTo6Q01TSVM8L2I+IFBhY2sgZGlyZWN0b3JpZXM6DQorICAgKiB8RmlsZS9Gb2xkZXIgICAgICAgICAgICAgICAgICAgfENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KKyAgICogfFxiIENNU0lTXFxEb2N1bWVudGF0aW9uXFxEU1AgIHwgVGhpcyBkb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgKiB8XGIgQ01TSVNcXERTUF9MaWIgICAgICAgICAgICAgfCBTb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCAobGljZW5zZS50eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAqIHxcYiBDTVNJU1xcRFNQX0xpYlxcRXhhbXBsZXMgICB8IEV4YW1wbGUgcHJvamVjdHMgZGVtb25zdHJhdGluZyB0aGUgdXNhZ2Ugb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zICAgICAgfA0KKyAgICogfFxiIENNU0lTXFxEU1BfTGliXFxTb3VyY2UgICAgIHwgU291cmNlIGZpbGVzIGZvciByZWJ1aWxkaW5nIHRoZSBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgKg0KKyAgICogPGhyPg0KKyAgICogUmV2aXNpb24gSGlzdG9yeSBvZiBDTVNJUy1EU1ANCisgICAqIC0tLS0tLS0tLS0tLQ0KKyAgICogUGxlYXNlIHJlZmVyIHRvIFxyZWYgQ2hhbmdlTG9nX3BnLg0KKyAgICoNCisgICAqIENvcHlyaWdodCBOb3RpY2UNCisgICAqIC0tLS0tLS0tLS0tLQ0KKyAgICoNCisgICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgICovDQorDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwTWF0aCBCYXNpYyBNYXRoIEZ1bmN0aW9ucw0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBncm91cEZhc3RNYXRoIEZhc3QgTWF0aCBGdW5jdGlvbnMNCisgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgcHJvdmlkZXMgYSBmYXN0IGFwcHJveGltYXRpb24gdG8gc2luZSwgY29zaW5lLCBhbmQgc3F1YXJlIHJvb3QuDQorICogQXMgY29tcGFyZWQgdG8gbW9zdCBvZiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBDTVNJUyBtYXRoIGxpYnJhcnksIHRoZSBmYXN0IG1hdGggZnVuY3Rpb25zDQorICogb3BlcmF0ZSBvbiBpbmRpdmlkdWFsIHZhbHVlcyBhbmQgbm90IGFycmF5cy4NCisgKiBUaGVyZSBhcmUgc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBRMTUsIFEzMSwgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEuDQorICoNCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBDbXBseE1hdGggQ29tcGxleCBNYXRoIEZ1bmN0aW9ucw0KKyAqIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyBvcGVyYXRlcyBvbiBjb21wbGV4IGRhdGEgdmVjdG9ycy4NCisgKiBUaGUgZGF0YSBpbiB0aGUgY29tcGxleCBhcnJheXMgaXMgc3RvcmVkIGluIGFuIGludGVybGVhdmVkIGZhc2hpb24NCisgKiAocmVhbCwgaW1hZywgcmVhbCwgaW1hZywgLi4uKS4NCisgKiBJbiB0aGUgQVBJIGZ1bmN0aW9ucywgdGhlIG51bWJlciBvZiBzYW1wbGVzIGluIGEgY29tcGxleCBhcnJheSByZWZlcnMNCisgKiB0byB0aGUgbnVtYmVyIG9mIGNvbXBsZXggdmFsdWVzOyB0aGUgYXJyYXkgY29udGFpbnMgdHdpY2UgdGhpcyBudW1iZXIgb2YNCisgKiByZWFsIHZhbHVlcy4NCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBGaWx0ZXJzIEZpbHRlcmluZyBGdW5jdGlvbnMNCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBNYXRyaXggTWF0cml4IEZ1bmN0aW9ucw0KKyAqDQorICogVGhpcyBzZXQgb2YgZnVuY3Rpb25zIHByb3ZpZGVzIGJhc2ljIG1hdHJpeCBtYXRoIG9wZXJhdGlvbnMuDQorICogVGhlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIG1hdHJpeCBkYXRhIHN0cnVjdHVyZXMuICBGb3IgZXhhbXBsZSwNCisgKiB0aGUgdHlwZQ0KKyAqIGRlZmluaXRpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlIGlzIHNob3duDQorICogYmVsb3c6DQorICogPHByZT4NCisgKiAgICAgdHlwZWRlZiBzdHJ1Y3QNCisgKiAgICAgew0KKyAqICAgICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvLyBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4Lg0KKyAqICAgICAgIHVpbnQxNl90IG51bUNvbHM7ICAgICAvLyBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4Lg0KKyAqICAgICAgIGZsb2F0MzJfdCAqcERhdGE7ICAgICAvLyBwb2ludHMgdG8gdGhlIGRhdGEgb2YgdGhlIG1hdHJpeC4NCisgKiAgICAgfSBhcm1fbWF0cml4X2luc3RhbmNlX2YzMjsNCisgKiA8L3ByZT4NCisgKiBUaGVyZSBhcmUgc2ltaWxhciBkZWZpbml0aW9ucyBmb3IgUTE1IGFuZCBRMzEgZGF0YSB0eXBlcy4NCisgKg0KKyAqIFRoZSBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBtYXRyaXggYW5kIHRoZW4gcG9pbnRzIHRvDQorICogYW4gYXJyYXkgb2YgZGF0YS4gIFRoZSBhcnJheSBpcyBvZiBzaXplIDxjb2RlPm51bVJvd3MgWCBudW1Db2xzPC9jb2RlPg0KKyAqIGFuZCB0aGUgdmFsdWVzIGFyZSBhcnJhbmdlZCBpbiByb3cgb3JkZXIuICBUaGF0IGlzLCB0aGUNCisgKiBtYXRyaXggZWxlbWVudCAoaSwgaikgaXMgc3RvcmVkIGF0Og0KKyAqIDxwcmU+DQorICogICAgIHBEYXRhW2kqbnVtQ29scyArIGpdDQorICogPC9wcmU+DQorICoNCisgKiBccGFyIEluaXQgRnVuY3Rpb25zDQorICogVGhlcmUgaXMgYW4gYXNzb2NpYXRlZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCB0eXBlIG9mIG1hdHJpeA0KKyAqIGRhdGEgc3RydWN0dXJlLg0KKyAqIFRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGludGVybmFsIHN0cnVjdHVyZSBmaWVsZHMuDQorICogUmVmZXIgdG8gdGhlIGZ1bmN0aW9uIDxjb2RlPmFybV9tYXRfaW5pdF9mMzIoKTwvY29kZT4sIDxjb2RlPmFybV9tYXRfaW5pdF9xMzEoKTwvY29kZT4NCisgKiBhbmQgPGNvZGU+YXJtX21hdF9pbml0X3ExNSgpPC9jb2RlPiBmb3IgZmxvYXRpbmctcG9pbnQsIFEzMSBhbmQgUTE1IHR5cGVzLCAgcmVzcGVjdGl2ZWx5Lg0KKyAqDQorICogXHBhcg0KKyAqIFVzZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgb3B0aW9uYWwuIEhvd2V2ZXIsIGlmIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQNCisgKiB0aGVuIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgY2Fubm90IGJlIHBsYWNlZCBpbnRvIGEgY29uc3QgZGF0YSBzZWN0aW9uLg0KKyAqIFRvIHBsYWNlIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgaW4gYSBjb25zdCBkYXRhDQorICogc2VjdGlvbiwgbWFudWFsbHkgaW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUuICBGb3IgZXhhbXBsZToNCisgKiA8cHJlPg0KKyAqIDxjb2RlPmFybV9tYXRyaXhfaW5zdGFuY2VfZjMyIFMgPSB7blJvd3MsIG5Db2x1bW5zLCBwRGF0YX07PC9jb2RlPg0KKyAqIDxjb2RlPmFybV9tYXRyaXhfaW5zdGFuY2VfcTMxIFMgPSB7blJvd3MsIG5Db2x1bW5zLCBwRGF0YX07PC9jb2RlPg0KKyAqIDxjb2RlPmFybV9tYXRyaXhfaW5zdGFuY2VfcTE1IFMgPSB7blJvd3MsIG5Db2x1bW5zLCBwRGF0YX07PC9jb2RlPg0KKyAqIDwvcHJlPg0KKyAqIHdoZXJlIDxjb2RlPm5Sb3dzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb3dzLCA8Y29kZT5uQ29sdW1uczwvY29kZT4NCisgKiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zLCBhbmQgPGNvZGU+cERhdGE8L2NvZGU+IHBvaW50cyB0byB0aGUNCisgKiBkYXRhIGFycmF5Lg0KKyAqDQorICogXHBhciBTaXplIENoZWNraW5nDQorICogQnkgZGVmYXVsdCBhbGwgb2YgdGhlIG1hdHJpeCBmdW5jdGlvbnMgcGVyZm9ybSBzaXplIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBhbmQNCisgKiBvdXRwdXQgbWF0cmljZXMuICBGb3IgZXhhbXBsZSwgdGhlIG1hdHJpeCBhZGRpdGlvbiBmdW5jdGlvbiB2ZXJpZmllcyB0aGF0IHRoZQ0KKyAqIHR3byBpbnB1dCBtYXRyaWNlcyBhbmQgdGhlIG91dHB1dCBtYXRyaXggYWxsIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJvd3MgYW5kDQorICogY29sdW1ucy4gIElmIHRoZSBzaXplIGNoZWNrIGZhaWxzIHRoZSBmdW5jdGlvbnMgcmV0dXJuOg0KKyAqIDxwcmU+DQorICogICAgIEFSTV9NQVRIX1NJWkVfTUlTTUFUQ0gNCisgKiA8L3ByZT4NCisgKiBPdGhlcndpc2UgdGhlIGZ1bmN0aW9ucyByZXR1cm4NCisgKiA8cHJlPg0KKyAqICAgICBBUk1fTUFUSF9TVUNDRVNTDQorICogPC9wcmU+DQorICogVGhlcmUgaXMgc29tZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXRyaXggc2l6ZSBjaGVja2luZy4NCisgKiBUaGUgbWF0cml4IHNpemUgY2hlY2tpbmcgaXMgZW5hYmxlZCB2aWEgdGhlIFwjZGVmaW5lDQorICogPHByZT4NCisgKiAgICAgQVJNX01BVEhfTUFUUklYX0NIRUNLDQorICogPC9wcmU+DQorICogd2l0aGluIHRoZSBsaWJyYXJ5IHByb2plY3Qgc2V0dGluZ3MuICBCeSBkZWZhdWx0IHRoaXMgbWFjcm8gaXMgZGVmaW5lZA0KKyAqIGFuZCBzaXplIGNoZWNraW5nIGlzIGVuYWJsZWQuICBCeSBjaGFuZ2luZyB0aGUgcHJvamVjdCBzZXR0aW5ncyBhbmQNCisgKiB1bmRlZmluaW5nIHRoaXMgbWFjcm8gc2l6ZSBjaGVja2luZyBpcyBlbGltaW5hdGVkIGFuZCB0aGUgZnVuY3Rpb25zDQorICogcnVuIGEgYml0IGZhc3Rlci4gIFdpdGggc2l6ZSBjaGVja2luZyBkaXNhYmxlZCB0aGUgZnVuY3Rpb25zIGFsd2F5cw0KKyAqIHJldHVybiA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPi4NCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBUcmFuc2Zvcm1zIFRyYW5zZm9ybSBGdW5jdGlvbnMNCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBDb250cm9sbGVyIENvbnRyb2xsZXIgRnVuY3Rpb25zDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwU3RhdHMgU3RhdGlzdGljcyBGdW5jdGlvbnMNCisgKi8NCisvKioNCisgKiBAZGVmZ3JvdXAgZ3JvdXBTdXBwb3J0IFN1cHBvcnQgRnVuY3Rpb25zDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwSW50ZXJwb2xhdGlvbiBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9ucw0KKyAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIDEtIGFuZCAyLWRpbWVuc2lvbmFsIGludGVycG9sYXRpb24gb2YgZGF0YS4NCisgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIGZvciAxLWRpbWVuc2lvbmFsIGRhdGEgYW5kDQorICogYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIGZvciAyLWRpbWVuc2lvbmFsIGRhdGEuDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGdyb3VwRXhhbXBsZXMgRXhhbXBsZXMNCisgKi8NCisjaWZuZGVmIF9BUk1fTUFUSF9IDQorI2RlZmluZSBfQVJNX01BVEhfSA0KKw0KKy8qIGlnbm9yZSBzb21lIEdDQyB3YXJuaW5ncyAqLw0KKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbnZlcnNpb24iDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiDQorI2VuZGlmDQorDQorI2RlZmluZSBfX0NNU0lTX0dFTkVSSUMgICAgICAgICAvKiBkaXNhYmxlIE5WSUMgYW5kIFN5c3RpY2sgZnVuY3Rpb25zICovDQorDQorI2lmIGRlZmluZWQoQVJNX01BVEhfQ003KQ0KKyNpbmNsdWRlICJjb3JlX2NtNy5oIg0KKyNlbGlmIGRlZmluZWQgKEFSTV9NQVRIX0NNNCkNCisjaW5jbHVkZSAiY29yZV9jbTQuaCINCisjZWxpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTMpDQorI2luY2x1ZGUgImNvcmVfY20zLmgiDQorI2VsaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00wKQ0KKyNpbmNsdWRlICJjb3JlX2NtMC5oIg0KKyNkZWZpbmUgQVJNX01BVEhfQ00wX0ZBTUlMWQ0KKyNlbGlmIGRlZmluZWQgKEFSTV9NQVRIX0NNMFBMVVMpDQorI2luY2x1ZGUgImNvcmVfY20wcGx1cy5oIg0KKyNkZWZpbmUgQVJNX01BVEhfQ00wX0ZBTUlMWQ0KKyNlbHNlDQorI2Vycm9yICJEZWZpbmUgYWNjb3JkaW5nIHRoZSB1c2VkIENvcnRleCBjb3JlIEFSTV9NQVRIX0NNNywgQVJNX01BVEhfQ000LCBBUk1fTUFUSF9DTTMsIEFSTV9NQVRIX0NNMFBMVVMgb3IgQVJNX01BVEhfQ00wIg0KKyNlbmRpZg0KKw0KKyN1bmRlZiAgX19DTVNJU19HRU5FUklDICAgICAgICAgLyogZW5hYmxlIE5WSUMgYW5kIFN5c3RpY2sgZnVuY3Rpb25zICovDQorI2luY2x1ZGUgInN0cmluZy5oIg0KKyNpbmNsdWRlICJtYXRoLmgiDQorI2lmZGVmICAgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisNCisvKioNCisgKiBAYnJpZWYgTWFjcm9zIHJlcXVpcmVkIGZvciByZWNpcHJvY2FsIGNhbGN1bGF0aW9uIGluIE5vcm1hbGl6ZWQgTE1TDQorICovDQorDQorI2RlZmluZSBERUxUQV9RMzEgICAgICAgICAgKDB4MTAwKQ0KKyNkZWZpbmUgREVMVEFfUTE1ICAgICAgICAgIDB4NQ0KKyNkZWZpbmUgSU5ERVhfTUFTSyAgICAgICAgIDB4MDAwMDAwM0YNCisjaWZuZGVmIFBJDQorI2RlZmluZSBQSSAgICAgICAgICAgICAgICAgMy4xNDE1OTI2NTM1ODk3OWYNCisjZW5kaWYNCisNCisvKioNCisgKiBAYnJpZWYgTWFjcm9zIHJlcXVpcmVkIGZvciBTSU5FIGFuZCBDT1NJTkUgRmFzdCBtYXRoIGFwcHJveGltYXRpb25zDQorICovDQorDQorI2RlZmluZSBGQVNUX01BVEhfVEFCTEVfU0laRSAgNTEyDQorI2RlZmluZSBGQVNUX01BVEhfUTMxX1NISUZUICAgKDMyIC0gMTApDQorI2RlZmluZSBGQVNUX01BVEhfUTE1X1NISUZUICAgKDE2IC0gMTApDQorI2RlZmluZSBDT05UUk9MTEVSX1EzMV9TSElGVCAgKDMyIC0gOSkNCisjZGVmaW5lIFRBQkxFX1NJWkUgIDI1Ng0KKyNkZWZpbmUgVEFCTEVfU1BBQ0lOR19RMzEgICAgIDB4NDAwMDAwDQorI2RlZmluZSBUQUJMRV9TUEFDSU5HX1ExNSAgICAgMHg4MA0KKw0KKy8qKg0KKyAqIEBicmllZiBNYWNyb3MgcmVxdWlyZWQgZm9yIFNJTkUgYW5kIENPU0lORSBDb250cm9sbGVyIGZ1bmN0aW9ucw0KKyAqLw0KKy8qIDEuMzEocTMxKSBGaXhlZCB2YWx1ZSBvZiAyLzM2MCAqLw0KKy8qIC0xIHRvICsxIGlzIGRpdmlkZWQgaW50byAzNjAgdmFsdWVzIHNvIHRvdGFsIHNwYWNpbmcgaXMgKDIvMzYwKSAqLw0KKyNkZWZpbmUgSU5QVVRfU1BBQ0lORyAgICAgICAgIDB4QjYwQjYxDQorDQorLyoqDQorICogQGJyaWVmIE1hY3JvIGZvciBVbmFsaWduZWQgU3VwcG9ydA0KKyAqLw0KKyNpZm5kZWYgVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRQ0KKyNkZWZpbmUgQUxJR040DQorI2Vsc2UNCisjaWYgZGVmaW5lZCAgKF9fR05VQ19fKQ0KKyNkZWZpbmUgQUxJR040IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKQ0KKyNlbHNlDQorI2RlZmluZSBBTElHTjQgX19hbGlnbig0KQ0KKyNlbmRpZg0KKyNlbmRpZiAgIC8qICNpZm5kZWYgVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRSAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBFcnJvciBzdGF0dXMgcmV0dXJuZWQgYnkgc29tZSBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkuDQorICovDQorDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBBUk1fTUFUSF9TVUNDRVNTID0gMCwgICAgICAgICAgICAgICAgLyoqPCBObyBlcnJvciAqLw0KKyAgICBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiA9IC0xLCAgICAgICAgLyoqPCBPbmUgb3IgbW9yZSBhcmd1bWVudHMgYXJlIGluY29ycmVjdCAqLw0KKyAgICBBUk1fTUFUSF9MRU5HVEhfRVJST1IgPSAtMiwgICAgICAgICAgLyoqPCBMZW5ndGggb2YgZGF0YSBidWZmZXIgaXMgaW5jb3JyZWN0ICovDQorICAgIEFSTV9NQVRIX1NJWkVfTUlTTUFUQ0ggPSAtMywgICAgICAgICAvKio8IFNpemUgb2YgbWF0cmljZXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgb3BlcmF0aW9uLiAqLw0KKyAgICBBUk1fTUFUSF9OQU5JTkYgPSAtNCwgICAgICAgICAgICAgICAgLyoqPCBOb3QtYS1udW1iZXIgKE5hTikgb3IgaW5maW5pdHkgaXMgZ2VuZXJhdGVkICovDQorICAgIEFSTV9NQVRIX1NJTkdVTEFSID0gLTUsICAgICAgICAgICAgICAvKio8IEdlbmVyYXRlZCBieSBtYXRyaXggaW52ZXJzaW9uIGlmIHRoZSBpbnB1dCBtYXRyaXggaXMgc2luZ3VsYXIgYW5kIGNhbm5vdCBiZSBpbnZlcnRlZC4gKi8NCisgICAgQVJNX01BVEhfVEVTVF9GQUlMVVJFID0gLTYgICAgICAgICAgIC8qKjwgVGVzdCBGYWlsZWQgICovDQorfSBhcm1fc3RhdHVzOw0KKw0KKy8qKg0KKyAqIEBicmllZiA4LWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjcgZm9ybWF0Lg0KKyAqLw0KK3R5cGVkZWYgaW50OF90IHE3X3Q7DQorDQorLyoqDQorICogQGJyaWVmIDE2LWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjE1IGZvcm1hdC4NCisgKi8NCit0eXBlZGVmIGludDE2X3QgcTE1X3Q7DQorDQorLyoqDQorICogQGJyaWVmIDMyLWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjMxIGZvcm1hdC4NCisgKi8NCit0eXBlZGVmIGludDMyX3QgcTMxX3Q7DQorDQorLyoqDQorICogQGJyaWVmIDY0LWJpdCBmcmFjdGlvbmFsIGRhdGEgdHlwZSBpbiAxLjYzIGZvcm1hdC4NCisgKi8NCit0eXBlZGVmIGludDY0X3QgcTYzX3Q7DQorDQorLyoqDQorICogQGJyaWVmIDMyLWJpdCBmbG9hdGluZy1wb2ludCB0eXBlIGRlZmluaXRpb24uDQorICovDQordHlwZWRlZiBmbG9hdCBmbG9hdDMyX3Q7DQorDQorLyoqDQorICogQGJyaWVmIDY0LWJpdCBmbG9hdGluZy1wb2ludCB0eXBlIGRlZmluaXRpb24uDQorICovDQordHlwZWRlZiBkb3VibGUgZmxvYXQ2NF90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBkZWZpbml0aW9uIHRvIHJlYWQvd3JpdGUgdHdvIDE2IGJpdCB2YWx1ZXMuDQorICovDQorI2lmIGRlZmluZWQgX19DQ19BUk0NCisjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdCBfX3BhY2tlZA0KKyNkZWZpbmUgQ01TSVNfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpDQorDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdA0KKyNkZWZpbmUgQ01TSVNfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpDQorDQorI2VsaWYgZGVmaW5lZCBfX0dOVUNfXw0KKyNkZWZpbmUgX19TSU1EMzJfVFlQRSBpbnQzMl90DQorI2RlZmluZSBDTVNJU19VTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkNCisNCisjZWxpZiBkZWZpbmVkIF9fSUNDQVJNX18NCisjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdCBfX3BhY2tlZA0KKyNkZWZpbmUgQ01TSVNfVU5VU0VEDQorDQorI2VsaWYgZGVmaW5lZCBfX0NTTUNfXw0KKyNkZWZpbmUgX19TSU1EMzJfVFlQRSBpbnQzMl90DQorI2RlZmluZSBDTVNJU19VTlVTRUQNCisNCisjZWxpZiBkZWZpbmVkIF9fVEFTS0lOR19fDQorI2RlZmluZSBfX1NJTUQzMl9UWVBFIF9fdW5hbGlnbmVkIGludDMyX3QNCisjZGVmaW5lIENNU0lTX1VOVVNFRA0KKw0KKyNlbHNlDQorI2Vycm9yIFVua25vd24gY29tcGlsZXINCisjZW5kaWYNCisNCisjZGVmaW5lIF9fU0lNRDMyKGFkZHIpICAgICAgICAoKihfX1NJTUQzMl9UWVBFICoqKSAmIChhZGRyKSkNCisjZGVmaW5lIF9fU0lNRDMyX0NPTlNUKGFkZHIpICAoKF9fU0lNRDMyX1RZUEUgKikoYWRkcikpDQorI2RlZmluZSBfU0lNRDMyX09GRlNFVChhZGRyKSAgKCooX19TSU1EMzJfVFlQRSAqKSAgKGFkZHIpKQ0KKyNkZWZpbmUgX19TSU1ENjQoYWRkcikgICAgICAgICgqKGludDY0X3QgKiopICYgKGFkZHIpKQ0KKw0KKyNpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTMpIHx8IGRlZmluZWQgKEFSTV9NQVRIX0NNMF9GQU1JTFkpDQorLyoqDQorICogQGJyaWVmIGRlZmluaXRpb24gdG8gcGFjayB0d28gMTYgYml0IHZhbHVlcy4NCisgKi8NCisjZGVmaW5lIF9fUEtIQlQoQVJHMSwgQVJHMiwgQVJHMykgICAgICAoICgoKGludDMyX3QpKEFSRzEpIDw8ICAwKSAmIChpbnQzMl90KTB4MDAwMEZGRkYpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkoQVJHMikgPDwgQVJHMykgJiAoaW50MzJfdCkweEZGRkYwMDAwKSAgKQ0KKyNkZWZpbmUgX19QS0hUQihBUkcxLCBBUkcyLCBBUkczKSAgICAgICggKCgoaW50MzJfdCkoQVJHMSkgPDwgIDApICYgKGludDMyX3QpMHhGRkZGMDAwMCkgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KShBUkcyKSA+PiBBUkczKSAmIChpbnQzMl90KTB4MDAwMEZGRkYpICApDQorDQorI2VuZGlmDQorDQorDQorLyoqDQorKiBAYnJpZWYgZGVmaW5pdGlvbiB0byBwYWNrIGZvdXIgOCBiaXQgdmFsdWVzLg0KKyovDQorI2lmbmRlZiBBUk1fTUFUSF9CSUdfRU5ESUFODQorDQorI2RlZmluZSBfX1BBQ0txNyh2MCx2MSx2Mix2MykgKCAoKChpbnQzMl90KSh2MCkgPDwgIDApICYgKGludDMyX3QpMHgwMDAwMDBGRikgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MSkgPDwgIDgpICYgKGludDMyX3QpMHgwMDAwRkYwMCkgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MikgPDwgMTYpICYgKGludDMyX3QpMHgwMEZGMDAwMCkgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MykgPDwgMjQpICYgKGludDMyX3QpMHhGRjAwMDAwMCkgICkNCisjZWxzZQ0KKw0KKyNkZWZpbmUgX19QQUNLcTcodjAsdjEsdjIsdjMpICggKCgoaW50MzJfdCkodjMpIDw8ICAwKSAmIChpbnQzMl90KTB4MDAwMDAwRkYpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjIpIDw8ICA4KSAmIChpbnQzMl90KTB4MDAwMEZGMDApIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjEpIDw8IDE2KSAmIChpbnQzMl90KTB4MDBGRjAwMDApIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjApIDw8IDI0KSAmIChpbnQzMl90KTB4RkYwMDAwMDApICApDQorDQorI2VuZGlmDQorDQorDQorLyoqDQorICogQGJyaWVmIENsaXBzIFE2MyB0byBRMzEgdmFsdWVzLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxMzFfdCBjbGlwX3E2M190b19xMzEoDQorICAgIHE2M190IHgpDQorew0KKyAgICByZXR1cm4gKChxMzFfdCkoeCA+PiAzMikgIT0gKChxMzFfdCkgeCA+PiAzMSkpID8NCisgICAgICAgICAgICgoMHg3RkZGRkZGRiBeICgocTMxX3QpKHggPj4gNjMpKSkpIDogKHEzMV90KSB4Ow0KK30NCisNCisvKioNCisgKiBAYnJpZWYgQ2xpcHMgUTYzIHRvIFExNSB2YWx1ZXMuDQorICovDQorc3RhdGljIF9fSU5MSU5FIHExNV90IGNsaXBfcTYzX3RvX3ExNSgNCisgICAgcTYzX3QgeCkNCit7DQorICAgIHJldHVybiAoKHEzMV90KSh4ID4+IDMyKSAhPSAoKHEzMV90KSB4ID4+IDMxKSkgPw0KKyAgICAgICAgICAgKCgweDdGRkYgXiAoKHExNV90KSh4ID4+IDYzKSkpKSA6IChxMTVfdCkoeCA+PiAxNSk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBDbGlwcyBRMzEgdG8gUTcgdmFsdWVzLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxN190IGNsaXBfcTMxX3RvX3E3KA0KKyAgICBxMzFfdCB4KQ0KK3sNCisgICAgcmV0dXJuICgocTMxX3QpKHggPj4gMjQpICE9ICgocTMxX3QpIHggPj4gMjMpKSA/DQorICAgICAgICAgICAoKDB4N0YgXiAoKHE3X3QpKHggPj4gMzEpKSkpIDogKHE3X3QpIHg7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBDbGlwcyBRMzEgdG8gUTE1IHZhbHVlcy4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgcTE1X3QgY2xpcF9xMzFfdG9fcTE1KA0KKyAgICBxMzFfdCB4KQ0KK3sNCisgICAgcmV0dXJuICgocTMxX3QpKHggPj4gMTYpICE9ICgocTMxX3QpIHggPj4gMTUpKSA/DQorICAgICAgICAgICAoKDB4N0ZGRiBeICgocTE1X3QpKHggPj4gMzEpKSkpIDogKHExNV90KSB4Ow0KK30NCisNCisvKioNCisgKiBAYnJpZWYgTXVsdGlwbGllcyAzMiBYIDY0IGFuZCByZXR1cm5zIDMyIGJpdCByZXN1bHQgaW4gMi4zMCBmb3JtYXQuDQorICovDQorDQorc3RhdGljIF9fSU5MSU5FIHE2M190IG11bHQzMng2NCgNCisgICAgcTYzX3QgeCwNCisgICAgcTMxX3QgeSkNCit7DQorICAgIHJldHVybiAoKCgocTYzX3QpKHggJiAweDAwMDAwMDAwRkZGRkZGRkYpICogeSkgPj4gMzIpICsNCisgICAgICAgICAgICAoKChxNjNfdCkoeCA+PiAzMikgKiB5KSkpOw0KK30NCisNCisvKg0KKyAgI2lmIGRlZmluZWQgKEFSTV9NQVRIX0NNMF9GQU1JTFkpICYmIGRlZmluZWQgKCBfX0NDX0FSTSAgICkNCisgICNkZWZpbmUgX19DTFogX19jbHoNCisgICNlbmRpZg0KKyAqLw0KKy8qIG5vdGU6IGZ1bmN0aW9uIGNhbiBiZSByZW1vdmVkIHdoZW4gYWxsIHRvb2xjaGFpbiBzdXBwb3J0IF9fQ0xaIGZvciBDb3J0ZXgtTTAgKi8NCisjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkgJiYgKChkZWZpbmVkIChfX0lDQ0FSTV9fKSkgICkNCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19DTFooDQorICAgIHEzMV90IGRhdGEpOw0KKw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX0NMWigNCisgICAgcTMxX3QgZGF0YSkNCit7DQorICAgIHVpbnQzMl90IGNvdW50ID0gMDsNCisgICAgdWludDMyX3QgbWFzayA9IDB4ODAwMDAwMDA7DQorDQorICAgIHdoaWxlICgoZGF0YSAmIG1hc2spID09IDApDQorICAgIHsNCisgICAgICAgIGNvdW50ICs9IDF1Ow0KKyAgICAgICAgbWFzayA9IG1hc2sgPj4gMXU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChjb3VudCk7DQorfQ0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiB0byBDYWxjdWxhdGVzIDEvaW4gKHJlY2lwcm9jYWwpIHZhbHVlIG9mIFEzMSBEYXRhIHR5cGUuDQorICovDQorDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IGFybV9yZWNpcF9xMzEoDQorICAgIHEzMV90IGluLA0KKyAgICBxMzFfdCAqZHN0LA0KKyAgICBxMzFfdCAqcFJlY2lwVGFibGUpDQorew0KKyAgICBxMzFfdCBvdXQ7DQorICAgIHVpbnQzMl90IHRlbXBWYWw7DQorICAgIHVpbnQzMl90IGluZGV4LCBpOw0KKyAgICB1aW50MzJfdCBzaWduQml0czsNCisNCisgICAgaWYgKGluID4gMCkNCisgICAgew0KKyAgICAgICAgc2lnbkJpdHMgPSAoKHVpbnQzMl90KShfX0NMWihpbikgLSAxKSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzaWduQml0cyA9ICgodWludDMyX3QpKF9fQ0xaKC1pbikgLSAxKSk7DQorICAgIH0NCisNCisgICAgLyogQ29udmVydCBpbnB1dCBzYW1wbGUgdG8gMS4zMSBmb3JtYXQgKi8NCisgICAgaW4gPSAoaW4gPDwgc2lnbkJpdHMpOw0KKw0KKyAgICAvKiBjYWxjdWxhdGlvbiBvZiBpbmRleCBmb3IgaW5pdGlhbCBhcHByb3hpbWF0ZWQgVmFsICovDQorICAgIGluZGV4ID0gKHVpbnQzMl90KShpbiA+PiAyNCk7DQorICAgIGluZGV4ID0gKGluZGV4ICYgSU5ERVhfTUFTSyk7DQorDQorICAgIC8qIDEuMzEgd2l0aCBleHAgMSAqLw0KKyAgICBvdXQgPSBwUmVjaXBUYWJsZVtpbmRleF07DQorDQorICAgIC8qIGNhbGN1bGF0aW9uIG9mIHJlY2lwcm9jYWwgdmFsdWUgKi8NCisgICAgLyogcnVubmluZyBhcHByb3hpbWF0aW9uIGZvciB0d28gaXRlcmF0aW9ucyAqLw0KKyAgICBmb3IgKGkgPSAwdTsgaSA8IDJ1OyBpKyspDQorICAgIHsNCisgICAgICAgIHRlbXBWYWwgPSAodWludDMyX3QpKCgocTYzX3QpIGluICogb3V0KSA+PiAzMSk7DQorICAgICAgICB0ZW1wVmFsID0gMHg3RkZGRkZGRnUgLSB0ZW1wVmFsOw0KKyAgICAgICAgLyogICAgICAxLjMxIHdpdGggZXhwIDEgKi8NCisgICAgICAgIC8qIG91dCA9IChxMzFfdCkgKCgocTYzX3QpIG91dCAqIHRlbXBWYWwpID4+IDMwKTsgKi8NCisgICAgICAgIG91dCA9IGNsaXBfcTYzX3RvX3EzMSgoKHE2M190KSBvdXQgKiB0ZW1wVmFsKSA+PiAzMCk7DQorICAgIH0NCisNCisgICAgLyogd3JpdGUgb3V0cHV0ICovDQorICAgICpkc3QgPSBvdXQ7DQorDQorICAgIC8qIHJldHVybiBudW0gb2Ygc2lnbmJpdHMgb2Ygb3V0ID0gMS9pbiB2YWx1ZSAqLw0KKyAgICByZXR1cm4gKHNpZ25CaXRzICsgMXUpOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gdG8gQ2FsY3VsYXRlcyAxL2luIChyZWNpcHJvY2FsKSB2YWx1ZSBvZiBRMTUgRGF0YSB0eXBlLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBhcm1fcmVjaXBfcTE1KA0KKyAgICBxMTVfdCBpbiwNCisgICAgcTE1X3QgKmRzdCwNCisgICAgcTE1X3QgKnBSZWNpcFRhYmxlKQ0KK3sNCisgICAgcTE1X3Qgb3V0ID0gMDsNCisgICAgdWludDMyX3QgdGVtcFZhbCA9IDA7DQorICAgIHVpbnQzMl90IGluZGV4ID0gMCwgaSA9IDA7DQorICAgIHVpbnQzMl90IHNpZ25CaXRzID0gMDsNCisNCisgICAgaWYgKGluID4gMCkNCisgICAgew0KKyAgICAgICAgc2lnbkJpdHMgPSAoKHVpbnQzMl90KShfX0NMWihpbikgLSAxNykpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgc2lnbkJpdHMgPSAoKHVpbnQzMl90KShfX0NMWigtaW4pIC0gMTcpKTsNCisgICAgfQ0KKw0KKyAgICAvKiBDb252ZXJ0IGlucHV0IHNhbXBsZSB0byAxLjE1IGZvcm1hdCAqLw0KKyAgICBpbiA9IChpbiA8PCBzaWduQml0cyk7DQorDQorICAgIC8qIGNhbGN1bGF0aW9uIG9mIGluZGV4IGZvciBpbml0aWFsIGFwcHJveGltYXRlZCBWYWwgKi8NCisgICAgaW5kZXggPSAodWludDMyX3QpKGluID4+ICA4KTsNCisgICAgaW5kZXggPSAoaW5kZXggJiBJTkRFWF9NQVNLKTsNCisNCisgICAgLyogICAgICAxLjE1IHdpdGggZXhwIDEgICovDQorICAgIG91dCA9IHBSZWNpcFRhYmxlW2luZGV4XTsNCisNCisgICAgLyogY2FsY3VsYXRpb24gb2YgcmVjaXByb2NhbCB2YWx1ZSAqLw0KKyAgICAvKiBydW5uaW5nIGFwcHJveGltYXRpb24gZm9yIHR3byBpdGVyYXRpb25zICovDQorICAgIGZvciAoaSA9IDB1OyBpIDwgMnU7IGkrKykNCisgICAgew0KKyAgICAgICAgdGVtcFZhbCA9ICh1aW50MzJfdCkoKChxMzFfdCkgaW4gKiBvdXQpID4+IDE1KTsNCisgICAgICAgIHRlbXBWYWwgPSAweDdGRkZ1IC0gdGVtcFZhbDsNCisgICAgICAgIC8qICAgICAgMS4xNSB3aXRoIGV4cCAxICovDQorICAgICAgICBvdXQgPSAocTE1X3QpKCgocTMxX3QpIG91dCAqIHRlbXBWYWwpID4+IDE0KTsNCisgICAgICAgIC8qIG91dCA9IGNsaXBfcTMxX3RvX3ExNSgoKHEzMV90KSBvdXQgKiB0ZW1wVmFsKSA+PiAxNCk7ICovDQorICAgIH0NCisNCisgICAgLyogd3JpdGUgb3V0cHV0ICovDQorICAgICpkc3QgPSBvdXQ7DQorDQorICAgIC8qIHJldHVybiBudW0gb2Ygc2lnbmJpdHMgb2Ygb3V0ID0gMS9pbiB2YWx1ZSAqLw0KKyAgICByZXR1cm4gKHNpZ25CaXRzICsgMSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgaW50cmluaXNpYyBmdW5jdGlvbiBmb3Igb25seSBNMCBwcm9jZXNzb3JzDQorICovDQorI2lmIGRlZmluZWQoQVJNX01BVEhfQ00wX0ZBTUlMWSkNCitzdGF0aWMgX19JTkxJTkUgcTMxX3QgX19TU0FUKA0KKyAgICBxMzFfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgaW50MzJfdCBwb3NNYXgsIG5lZ01pbjsNCisgICAgdWludDMyX3QgaTsNCisNCisgICAgcG9zTWF4ID0gMTsNCisNCisgICAgZm9yIChpID0gMDsgaSA8ICh5IC0gMSk7IGkrKykNCisgICAgew0KKyAgICAgICAgcG9zTWF4ID0gcG9zTWF4ICogMjsNCisgICAgfQ0KKw0KKyAgICBpZiAoeCA+IDApDQorICAgIHsNCisgICAgICAgIHBvc01heCA9IChwb3NNYXggLSAxKTsNCisNCisgICAgICAgIGlmICh4ID4gcG9zTWF4KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHggPSBwb3NNYXg7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBuZWdNaW4gPSAtcG9zTWF4Ow0KKw0KKyAgICAgICAgaWYgKHggPCBuZWdNaW4pDQorICAgICAgICB7DQorICAgICAgICAgICAgeCA9IG5lZ01pbjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKHgpOw0KK30NCisjZW5kaWYgLyogZW5kIG9mIEFSTV9NQVRIX0NNMF9GQU1JTFkgKi8NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIGludHJpbnNpYyBmdW5jdGlvbiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCisjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00zKSB8fCBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKQ0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUUFERDggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUUFERDgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzLCB0LCB1Ow0KKw0KKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDI0KSA+PiAyNCkgKyAoKChxMzFfdCl5IDw8IDI0KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7DQorICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDI0KSArICgoKHEzMV90KXkgPDwgMTYpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsNCisgICAgdCA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAgOCkgPj4gMjQpICsgKCgocTMxX3QpeSA8PCAgOCkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOw0KKyAgICB1ID0gX19TU0FUKCgoKChxMzFfdCl4KSA+PiAyNCkgKyAoKChxMzFfdCl5KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgodSA8PCAyNCkgfCAodCA8PCAxNikgfCAocyA8PCAgOCkgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRU1VCOCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19RU1VCOCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHMsIHQsIHU7DQorDQorICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMjQpID4+IDI0KSAtICgoKHEzMV90KXkgPDwgMjQpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsNCisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAxNikgPj4gMjQpIC0gKCgocTMxX3QpeSA8PCAxNikgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOw0KKyAgICB0ID0gX19TU0FUKCgoKChxMzFfdCl4IDw8ICA4KSA+PiAyNCkgLSAoKChxMzFfdCl5IDw8ICA4KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7DQorICAgIHUgPSBfX1NTQVQoKCgoKHEzMV90KXgpID4+IDI0KSAtICgoKHEzMV90KXkpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsNCisNCisgICAgcmV0dXJuICgodWludDMyX3QpKCh1IDw8IDI0KSB8ICh0IDw8IDE2KSB8IChzIDw8ICA4KSB8IChyKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBREQxNiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19RQUREMTYoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICAvKiAgcTMxX3QgciwgICAgIHM7ICB3aXRob3V0IGluaXRpYWxpc2F0aW9uICdhcm1fb2Zmc2V0X3ExNSB0ZXN0JyBmYWlscyAgYnV0ICdpbnRyaW5zaWMnIHRlc3RzIHBhc3MhIGZvciBhcm1DQyAqLw0KKyAgICBxMzFfdCByID0gMCwgcyA9IDA7DQorDQorICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSArICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXgpID4+IDE2KSArICgoKHEzMV90KXkpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTSEFERDE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NIQUREMTYoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICBxMzFfdCByLCBzOw0KKw0KKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisgICAgcyA9ICgoKCgocTMxX3QpeCkgPj4gMTYpICsgKCgocTMxX3QpeSkgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRU1VCMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUVNVQjE2KA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcTMxX3QgciwgczsNCisNCisgICAgciA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpIC0gKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCkgPj4gMTYpIC0gKCgocTMxX3QpeSkgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisNCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNIU1VCMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU0hTVUIxNigNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHM7DQorDQorICAgIHIgPSAoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKyAgICBzID0gKCgoKChxMzFfdCl4KSA+PiAxNikgLSAoKChxMzFfdCl5KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisNCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBU1ggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUUFTWCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHM7DQorDQorICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXgpID4+IDE2KSArICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTSEFTWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TSEFTWCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHM7DQorDQorICAgIHIgPSAoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkpID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKyAgICBzID0gKCgoKChxMzFfdCl4KSA+PiAxNikgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisNCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFTQVggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUVNBWCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHM7DQorDQorICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSArICgoKHEzMV90KXkpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXgpID4+IDE2KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7DQorDQorICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAocikpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTSFNBWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TSFNBWCgNCisgICAgdWludDMyX3QgeCwNCisgICAgdWludDMyX3QgeSkNCit7DQorICAgIHEzMV90IHIsIHM7DQorDQorICAgIHIgPSAoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSArICgoKHEzMV90KXkpID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOw0KKyAgICBzID0gKCgoKChxMzFfdCl4KSA+PiAxNikgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsNCisNCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNVVNEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTVVTRFgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkpID4+IDE2KSkgLQ0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXgpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkpKTsNCit9DQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTVVBRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01VQURYKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5KSA+PiAxNikpICsNCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUUFERCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBfX1FBREQoDQorICAgIGludDMyX3QgeCwNCisgICAgaW50MzJfdCB5KQ0KK3sNCisgICAgcmV0dXJuICgoaW50MzJfdCkoY2xpcF9xNjNfdG9fcTMxKChxNjNfdCl4ICsgKHEzMV90KXkpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUVNVQiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgaW50MzJfdCBfX1FTVUIoDQorICAgIGludDMyX3QgeCwNCisgICAgaW50MzJfdCB5KQ0KK3sNCisgICAgcmV0dXJuICgoaW50MzJfdCkoY2xpcF9xNjNfdG9fcTMxKChxNjNfdCl4IC0gKHEzMV90KXkpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01MQUQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01MQUQoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHksDQorICAgIHVpbnQzMl90IHN1bSkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKChxMzFfdClzdW0pKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTEFEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTUxBRFgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHksDQorICAgIHVpbnQzMl90IHN1bSkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKChxMzFfdClzdW0pKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTFNEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTUxTRFgoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHksDQorICAgIHVpbnQzMl90IHN1bSkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSAtDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKChxMzFfdClzdW0pKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTEFMRCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDY0X3QgX19TTUxBTEQoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHksDQorICAgIHVpbnQ2NF90IHN1bSkNCit7DQorICAgIC8qICByZXR1cm4gKHN1bSArICgocTE1X3QpICh4ID4+IDE2KSAqIChxMTVfdCkgKHkgPj4gMTYpKSArICgocTE1X3QpIHggKiAocTE1X3QpIHkpKTsgKi8NCisgICAgcmV0dXJuICgodWludDY0X3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsNCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4KSA+PiAxNikgKiAoKChxMzFfdCl5KSA+PiAxNikpICsNCisgICAgICAgICAgICAgICAgICAgICAgICgoKHE2M190KXN1bSkpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01MQUxEWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdWludDY0X3QgX19TTUxBTERYKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5LA0KKyAgICB1aW50NjRfdCBzdW0pDQorew0KKyAgICAvKiAgcmV0dXJuIChzdW0gKyAoKHExNV90KSAoeCA+PiAxNikgKiAocTE1X3QpIHkpKSArICgocTE1X3QpIHggKiAocTE1X3QpICh5ID4+IDE2KSk7ICovDQorICAgIHJldHVybiAoKHVpbnQ2NF90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSkgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArDQorICAgICAgICAgICAgICAgICAgICAgICAoKChxNjNfdClzdW0pKSkpOw0KK30NCisNCisNCisvKg0KKyAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNVUFEIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycw0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNVUFEKA0KKyAgICB1aW50MzJfdCB4LA0KKyAgICB1aW50MzJfdCB5KQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsNCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4KSA+PiAxNikgKiAoKChxMzFfdCl5KSA+PiAxNikpKSk7DQorfQ0KKw0KKw0KKy8qDQorICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01VU0QgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01VU0QoDQorICAgIHVpbnQzMl90IHgsDQorICAgIHVpbnQzMl90IHkpDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgLQ0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXgpID4+IDE2KSAqICgoKHEzMV90KXkpID4+IDE2KSkpKTsNCit9DQorDQorDQorLyoNCisgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTWFRCMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzDQorICovDQorc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU1hUQjE2KA0KKyAgICB1aW50MzJfdCB4KQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDI0KSA+PiAyNCkgJiAocTMxX3QpMHgwMDAwRkZGRikgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggPDwgIDgpID4+ICA4KSAmIChxMzFfdCkweEZGRkYwMDAwKSkpOw0KK30NCisNCisjZW5kaWYgLyogZGVmaW5lZCAoQVJNX01BVEhfQ00zKSB8fCBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKSAqLw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRNyBGSVIgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxN190ICpwU3RhdGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTdfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovDQorfSBhcm1fZmlyX2luc3RhbmNlX3E3Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgRklSIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLw0KK30gYXJtX2Zpcl9pbnN0YW5jZV9xMTU7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBGSVIgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KK30gYXJtX2Zpcl9pbnN0YW5jZV9xMzE7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorfSBhcm1fZmlyX2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFE3IEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFE3IEZJUiBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX3E3KA0KKyAgICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3E3ICpTLA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRNyBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRNyBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgTnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCBhcmUgcHJvY2Vzc2VkLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9pbml0X3E3KA0KKyAgICBhcm1fZmlyX2luc3RhbmNlX3E3ICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxN190ICpwQ29lZmZzLA0KKyAgICBxN190ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfcTE1KA0KKyAgICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmFzdCBRMTUgRklSIGZpbHRlciBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9mYXN0X3ExNSgNCisgICAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuIE11c3QgYmUgZXZlbiBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDQuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhdCBhIHRpbWUuDQorICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmDQorICogPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2Zpcl9pbml0X3ExNSgNCisgICAgYXJtX2Zpcl9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHExNV90ICpwQ29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9xMzEoDQorICAgIGNvbnN0IGFybV9maXJfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmYXN0IFEzMSBGSVIgZmlsdGVyIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfZmFzdF9xMzEoDQorICAgIGNvbnN0IGFybV9maXJfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhdCBhIHRpbWUuDQorICovDQordm9pZCBhcm1fZmlyX2luaXRfcTMxKA0KKyAgICBhcm1fZmlyX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fZmlyX2YzMigNCisgICAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhdCBhIHRpbWUuDQorICovDQordm9pZCBhcm1fZmlyX2luaXRfZjMyKA0KKyAgICBhcm1fZmlyX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgaW50OF90IG51bVN0YWdlczsgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA0Km51bVN0YWdlcy4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLw0KKyAgICBpbnQ4X3QgcG9zdFNoaWZ0OyAgICAgICAgLyoqPCBBZGRpdGlvbmFsIHNoaWZ0LCBpbiBiaXRzLCBhcHBsaWVkIHRvIGVhY2ggb3V0cHV0IHNhbXBsZS4gKi8NCit9IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMTU7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQzMl90IG51bVN0YWdlczsgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovDQorICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8NCisgICAgdWludDhfdCBwb3N0U2hpZnQ7ICAgICAgIC8qKjwgQWRkaXRpb25hbCBzaGlmdCwgaW4gYml0cywgYXBwbGllZCB0byBlYWNoIG91dHB1dCBzYW1wbGUuICovDQorfSBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTMxOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQzMl90IG51bVN0YWdlczsgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovDQorICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8NCit9IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX3ExNSgNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBvc3RTaGlmdCAgU2hpZnQgdG8gYmUgYXBwbGllZCB0byB0aGUgb3V0cHV0LiBWYXJpZXMgYWNjb3JkaW5nIHRvIHRoZSBjb2VmZmljaWVudHMgZm9ybWF0DQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2luaXRfcTE1KA0KKyAgICBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTE1ICpTLA0KKyAgICB1aW50OF90IG51bVN0YWdlcywNCisgICAgcTE1X3QgKnBDb2VmZnMsDQorICAgIHExNV90ICpwU3RhdGUsDQorICAgIGludDhfdCBwb3N0U2hpZnQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGYXN0IGJ1dCBsZXNzIHByZWNpc2UgcHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00Lg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2Zhc3RfcTE1KA0KKyAgICBjb25zdCBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfcTMxKA0KKyAgICBjb25zdCBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZhc3QgYnV0IGxlc3MgcHJlY2lzZSBwcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlciBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfZmFzdF9xMzEoDQorICAgIGNvbnN0IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwb3N0U2hpZnQgIFNoaWZ0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIG91dHB1dC4gVmFyaWVzIGFjY29yZGluZyB0byB0aGUgY29lZmZpY2llbnRzIGZvcm1hdA0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9pbml0X3EzMSgNCisgICAgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMSAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIHEzMV90ICpwQ29lZmZzLA0KKyAgICBxMzFfdCAqcFN0YXRlLA0KKyAgICBpbnQ4X3QgcG9zdFNoaWZ0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2YzMigNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9pbml0X2YzMigNCisgICAgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X2YzMiAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLyoqPCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LiAgICAgKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovDQorICAgIGZsb2F0MzJfdCAqcERhdGE7ICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLw0KK30gYXJtX21hdHJpeF9pbnN0YW5jZV9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvKio8IG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguICAgICAqLw0KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4LiAgKi8NCisgICAgZmxvYXQ2NF90ICpwRGF0YTsgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguICovDQorfSBhcm1fbWF0cml4X2luc3RhbmNlX2Y2NDsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvKio8IG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguICAgICAqLw0KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4LiAgKi8NCisgICAgcTE1X3QgKnBEYXRhOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguICovDQorfSBhcm1fbWF0cml4X2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIG1hdHJpeCBzdHJ1Y3R1cmUuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvKio8IG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguICAgICAqLw0KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4LiAgKi8NCisgICAgcTMxX3QgKnBEYXRhOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguICovDQorfSBhcm1fbWF0cml4X2luc3RhbmNlX3EzMTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9hZGRfZjMyKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgbWF0cml4IGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9hZGRfcTE1KA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgbWF0cml4IGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9hZGRfcTMxKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCwgY29tcGxleCwgbWF0cml4IG11bHRpcGxpY2F0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9jbXBseF9tdWx0X2YzMigNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1LCBjb21wbGV4LCAgbWF0cml4IG11bHRpcGxpY2F0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9jbXBseF9tdWx0X3ExNSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwRHN0LA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEsIGNvbXBsZXgsIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfY21wbHhfbXVsdF9xMzEoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQSwNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmNCLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCB0cmFuc3Bvc2UuDQorICogQHBhcmFtW2luXSAgcFNyYyAgcG9pbnRzIHRvIHRoZSBpbnB1dCBtYXRyaXgNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICBwb2ludHMgdG8gdGhlIG91dHB1dCBtYXRyaXgNCisgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAgPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4NCisgKiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF90cmFuc19mMzIoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwU3JjLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSBtYXRyaXggdHJhbnNwb3NlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgaW5wdXQgbWF0cml4DQorICogQHBhcmFtW291dF0gcERzdCAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgbWF0cml4DQorICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+DQorICogb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfdHJhbnNfcTE1KA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyYywNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgbWF0cml4IHRyYW5zcG9zZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICBwb2ludHMgdG8gdGhlIGlucHV0IG1hdHJpeA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeA0KKyAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyICA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPg0KKyAqIG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X3RyYW5zX3EzMSgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmMsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X211bHRfZjMyKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgbWF0cml4IG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTdGF0ZSAgcG9pbnRzIHRvIHRoZSBhcnJheSBmb3Igc3RvcmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cw0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X211bHRfcTE1KA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBEc3QsDQorICAgIHExNV90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgbWF0cml4IG11bHRpcGxpY2F0aW9uIChmYXN0IHZhcmlhbnQpIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNA0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3RhdGUgIHBvaW50cyB0byB0aGUgYXJyYXkgZm9yIHN0b3JpbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9tdWx0X2Zhc3RfcTE1KA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBEc3QsDQorICAgIHExNV90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgbWF0cml4IG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X211bHRfcTMxKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgbWF0cml4IG11bHRpcGxpY2F0aW9uIChmYXN0IHZhcmlhbnQpIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNA0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9tdWx0X2Zhc3RfcTMxKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggc3VidHJhY3Rpb24NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfc3ViX2YzMigNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnBTcmNBLA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyY0IsDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IG1hdHJpeCBzdWJ0cmFjdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9zdWJfcTE1KA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcFNyY0EsDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwU3JjQiwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgbWF0cml4IHN1YnRyYWN0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQ0KKyAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcg0KKyAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuDQorICovDQorYXJtX3N0YXR1cyBhcm1fbWF0X3N1Yl9xMzEoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICpwU3JjQSwNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBTcmNCLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBzY2FsaW5nLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICBwb2ludHMgdG8gdGhlIGlucHV0IG1hdHJpeA0KKyAqIEBwYXJhbVtpbl0gIHNjYWxlICBzY2FsZSBmYWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgbWF0cml4DQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfc2NhbGVfZjMyKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcFNyYywNCisgICAgZmxvYXQzMl90IHNjYWxlLA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSBtYXRyaXggc2NhbGluZy4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gaW5wdXQgbWF0cml4DQorICogQHBhcmFtW2luXSAgc2NhbGVGcmFjdCAgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIHRoZSBzY2FsZSBmYWN0b3INCisgKiBAcGFyYW1baW5dICBzaGlmdCAgICAgICBudW1iZXIgb2YgYml0cyB0byBzaGlmdCB0aGUgcmVzdWx0IGJ5DQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXgNCisgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXINCisgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9zY2FsZV9xMTUoDQorICAgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpwU3JjLA0KKyAgICBxMTVfdCBzY2FsZUZyYWN0LA0KKyAgICBpbnQzMl90IHNoaWZ0LA0KKyAgICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFEzMSBtYXRyaXggc2NhbGluZy4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gaW5wdXQgbWF0cml4DQorICogQHBhcmFtW2luXSAgc2NhbGVGcmFjdCAgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIHRoZSBzY2FsZSBmYWN0b3INCisgKiBAcGFyYW1baW5dICBzaGlmdCAgICAgICBudW1iZXIgb2YgYml0cyB0byBzaGlmdCB0aGUgcmVzdWx0IGJ5DQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlDQorICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyDQorICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4NCisgKi8NCithcm1fc3RhdHVzIGFybV9tYXRfc2NhbGVfcTMxKA0KKyAgICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqcFNyYywNCisgICAgcTMxX3Qgc2NhbGVGcmFjdCwNCisgICAgaW50MzJfdCBzaGlmdCwNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIG1hdHJpeCBpbml0aWFsaXphdGlvbi4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG5Sb3dzICAgICBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4Lg0KKyAqIEBwYXJhbVtpbl0gICAgIG5Db2x1bW5zICBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4Lg0KKyAqIEBwYXJhbVtpbl0gICAgIHBEYXRhICAgICBwb2ludHMgdG8gdGhlIG1hdHJpeCBkYXRhIGFycmF5Lg0KKyAqLw0KK3ZvaWQgYXJtX21hdF9pbml0X3EzMSgNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG5Sb3dzLA0KKyAgICB1aW50MTZfdCBuQ29sdW1ucywNCisgICAgcTMxX3QgKnBEYXRhKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFExNSBtYXRyaXggaW5pdGlhbGl6YXRpb24uDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBuUm93cyAgICAgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4NCisgKiBAcGFyYW1baW5dICAgICBuQ29sdW1ucyAgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4NCisgKiBAcGFyYW1baW5dICAgICBwRGF0YSAgICAgcG9pbnRzIHRvIHRoZSBtYXRyaXggZGF0YSBhcnJheS4NCisgKi8NCit2b2lkIGFybV9tYXRfaW5pdF9xMTUoDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBuUm93cywNCisgICAgdWludDE2X3QgbkNvbHVtbnMsDQorICAgIHExNV90ICpwRGF0YSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBtYXRyaXggaW5pdGlhbGl6YXRpb24uDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBuUm93cyAgICAgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4NCisgKiBAcGFyYW1baW5dICAgICBuQ29sdW1ucyAgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4NCisgKiBAcGFyYW1baW5dICAgICBwRGF0YSAgICAgcG9pbnRzIHRvIHRoZSBtYXRyaXggZGF0YSBhcnJheS4NCisgKi8NCit2b2lkIGFybV9tYXRfaW5pdF9mMzIoDQorICAgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICpTLA0KKyAgICB1aW50MTZfdCBuUm93cywNCisgICAgdWludDE2X3QgbkNvbHVtbnMsDQorICAgIGZsb2F0MzJfdCAqcERhdGEpOw0KKw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgUElEIENvbnRyb2wuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHExNV90IEEwOyAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMCA9IEtwICsgS2kgKyBLZCAuICovDQorI2lmZGVmIEFSTV9NQVRIX0NNMF9GQU1JTFkNCisgICAgcTE1X3QgQTE7DQorICAgIHExNV90IEEyOw0KKyNlbHNlDQorICAgIHEzMV90IEExOyAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluIEExID0gLUtwIC0gMktkIHwgS2QuKi8NCisjZW5kaWYNCisgICAgcTE1X3Qgc3RhdGVbM107ICAgICAvKio8IFRoZSBzdGF0ZSBhcnJheSBvZiBsZW5ndGggMy4gKi8NCisgICAgcTE1X3QgS3A7ICAgICAgICAgICAvKio8IFRoZSBwcm9wb3J0aW9uYWwgZ2Fpbi4gKi8NCisgICAgcTE1X3QgS2k7ICAgICAgICAgICAvKio8IFRoZSBpbnRlZ3JhbCBnYWluLiAqLw0KKyAgICBxMTVfdCBLZDsgICAgICAgICAgIC8qKjwgVGhlIGRlcml2YXRpdmUgZ2Fpbi4gKi8NCit9IGFybV9waWRfaW5zdGFuY2VfcTE1Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgUElEIENvbnRyb2wuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHEzMV90IEEwOyAgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTAgPSBLcCArIEtpICsgS2QgLiAqLw0KKyAgICBxMzFfdCBBMTsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEExID0gLUtwIC0gMktkLiAqLw0KKyAgICBxMzFfdCBBMjsgICAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEEyID0gS2QgLiAqLw0KKyAgICBxMzFfdCBzdGF0ZVszXTsgICAgICAvKio8IFRoZSBzdGF0ZSBhcnJheSBvZiBsZW5ndGggMy4gKi8NCisgICAgcTMxX3QgS3A7ICAgICAgICAgICAgLyoqPCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uICovDQorICAgIHEzMV90IEtpOyAgICAgICAgICAgIC8qKjwgVGhlIGludGVncmFsIGdhaW4uICovDQorICAgIHEzMV90IEtkOyAgICAgICAgICAgIC8qKjwgVGhlIGRlcml2YXRpdmUgZ2Fpbi4gKi8NCit9IGFybV9waWRfaW5zdGFuY2VfcTMxOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgZmxvYXQzMl90IEEwOyAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEEwID0gS3AgKyBLaSArIEtkIC4gKi8NCisgICAgZmxvYXQzMl90IEExOyAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEExID0gLUtwIC0gMktkLiAqLw0KKyAgICBmbG9hdDMyX3QgQTI7ICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTIgPSBLZCAuICovDQorICAgIGZsb2F0MzJfdCBzdGF0ZVszXTsgICAgLyoqPCBUaGUgc3RhdGUgYXJyYXkgb2YgbGVuZ3RoIDMuICovDQorICAgIGZsb2F0MzJfdCBLcDsgICAgICAgICAgLyoqPCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uICovDQorICAgIGZsb2F0MzJfdCBLaTsgICAgICAgICAgLyoqPCBUaGUgaW50ZWdyYWwgZ2Fpbi4gKi8NCisgICAgZmxvYXQzMl90IEtkOyAgICAgICAgICAvKio8IFRoZSBkZXJpdmF0aXZlIGdhaW4uICovDQorfSBhcm1fcGlkX2luc3RhbmNlX2YzMjsNCisNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUElEIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICByZXNldFN0YXRlRmxhZyAgZmxhZyB0byByZXNldCB0aGUgc3RhdGUuIDAgPSBubyBjaGFuZ2UgaW4gc3RhdGUgMSA9IHJlc2V0IHRoZSBzdGF0ZS4NCisgKi8NCit2b2lkIGFybV9waWRfaW5pdF9mMzIoDQorICAgIGFybV9waWRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBpbnQzMl90IHJlc2V0U3RhdGVGbGFnKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFJlc2V0IGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wuDQorICogQHBhcmFtW2luLG91dF0gUyAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sIHN0cnVjdHVyZQ0KKyAqLw0KK3ZvaWQgYXJtX3BpZF9yZXNldF9mMzIoDQorICAgIGFybV9waWRfaW5zdGFuY2VfZjMyICpTKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBQSUQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIHJlc2V0U3RhdGVGbGFnICBmbGFnIHRvIHJlc2V0IHRoZSBzdGF0ZS4gMCA9IG5vIGNoYW5nZSBpbiBzdGF0ZSAxID0gcmVzZXQgdGhlIHN0YXRlLg0KKyAqLw0KK3ZvaWQgYXJtX3BpZF9pbml0X3EzMSgNCisgICAgYXJtX3BpZF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIGludDMyX3QgcmVzZXRTdGF0ZUZsYWcpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUmVzZXQgZnVuY3Rpb24gZm9yIHRoZSBRMzEgUElEIENvbnRyb2wuDQorICogQHBhcmFtW2luLG91dF0gUyAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIFBJRCBDb250cm9sIHN0cnVjdHVyZQ0KKyAqLw0KKw0KK3ZvaWQgYXJtX3BpZF9yZXNldF9xMzEoDQorICAgIGFybV9waWRfaW5zdGFuY2VfcTMxICpTKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBQSUQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIHJlc2V0U3RhdGVGbGFnICBmbGFnIHRvIHJlc2V0IHRoZSBzdGF0ZS4gMCA9IG5vIGNoYW5nZSBpbiBzdGF0ZSAxID0gcmVzZXQgdGhlIHN0YXRlLg0KKyAqLw0KK3ZvaWQgYXJtX3BpZF9pbml0X3ExNSgNCisgICAgYXJtX3BpZF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIGludDMyX3QgcmVzZXRTdGF0ZUZsYWcpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUmVzZXQgZnVuY3Rpb24gZm9yIHRoZSBRMTUgUElEIENvbnRyb2wuDQorICogQHBhcmFtW2luLG91dF0gUyAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBxMTUgUElEIENvbnRyb2wgc3RydWN0dXJlDQorICovDQordm9pZCBhcm1fcGlkX3Jlc2V0X3ExNSgNCisgICAgYXJtX3BpZF9pbnN0YW5jZV9xMTUgKlMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBMaW5lYXIgSW50ZXJwb2xhdGUgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQzMl90IG5WYWx1ZXM7ICAgICAgICAgICAvKio8IG5WYWx1ZXMgKi8NCisgICAgZmxvYXQzMl90IHgxOyAgICAgICAgICAgICAgIC8qKjwgeDEgKi8NCisgICAgZmxvYXQzMl90IHhTcGFjaW5nOyAgICAgICAgIC8qKjwgeFNwYWNpbmcgKi8NCisgICAgZmxvYXQzMl90ICpwWURhdGE7ICAgICAgICAgIC8qKjwgcG9pbnRlciB0byB0aGUgdGFibGUgb2YgWSB2YWx1ZXMgKi8NCit9IGFybV9saW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMjsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtUm93czsgICAvKio8IG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRhdGEgdGFibGUuICovDQorICAgIGZsb2F0MzJfdCAqcERhdGE7ICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgdGFibGUuICovDQorfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMjsNCisNCisvKioNCisqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4NCisqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgIC8qKjwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGRhdGEgdGFibGUuICovDQorICAgIHVpbnQxNl90IG51bUNvbHM7ICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8NCisgICAgcTMxX3QgKnBEYXRhOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSB0YWJsZS4gKi8NCit9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTMxOw0KKw0KKy8qKg0KKyogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLg0KKyovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVJvd3M7ICAgLyoqPCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgbnVtQ29sczsgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkYXRhIHRhYmxlLiAqLw0KKyAgICBxMTVfdCAqcERhdGE7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIHRhYmxlLiAqLw0KK30gYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xMTU7DQorDQorLyoqDQorKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb24uDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtUm93czsgICAvKio8IG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRhdGEgdGFibGUuICovDQorICAgIHE3X3QgKnBEYXRhOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgdGFibGUuICovDQorfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3E3Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRNyB2ZWN0b3IgbXVsdGlwbGljYXRpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fbXVsdF9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgdmVjdG9yIG11bHRpcGxpY2F0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX211bHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFEzMSB2ZWN0b3IgbXVsdGlwbGljYXRpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fbXVsdF9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgdmVjdG9yIG11bHRpcGxpY2F0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX211bHRfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8NCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovDQorICAgIHExNV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBTaW4gdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KK30gYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3ExNTsNCisNCisvKiBEZXByZWNhdGVkICovDQorYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDJfaW5pdF9xMTUoDQorICAgIGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbiwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK3ZvaWQgYXJtX2NmZnRfcmFkaXgyX3ExNSgNCisgICAgY29uc3QgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KK30gYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNTsNCisNCisvKiBEZXByZWNhdGVkICovDQorYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDRfaW5pdF9xMTUoDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbiwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK3ZvaWQgYXJtX2NmZnRfcmFkaXg0X3ExNSgNCisgICAgY29uc3QgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBSYWRpeC0yIFEzMSBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8NCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovDQorICAgIHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorfSBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTMxOw0KKw0KKy8qIERlcHJlY2F0ZWQgKi8NCithcm1fc3RhdHVzIGFybV9jZmZ0X3JhZGl4Ml9pbml0X3EzMSgNCisgICAgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgZmZ0TGVuLA0KKyAgICB1aW50OF90IGlmZnRGbGFnLA0KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsNCisNCisvKiBEZXByZWNhdGVkICovDQordm9pZCBhcm1fY2ZmdF9yYWRpeDJfcTMxKA0KKyAgICBjb25zdCBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYyk7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLw0KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8NCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovDQorICAgIHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorfSBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxOw0KKw0KKy8qIERlcHJlY2F0ZWQgKi8NCit2b2lkIGFybV9jZmZ0X3JhZGl4NF9xMzEoDQorICAgIGNvbnN0IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjKTsNCisNCisvKiBEZXByZWNhdGVkICovDQorYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDRfaW5pdF9xMzEoDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbiwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8NCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8NCisgICAgZmxvYXQzMl90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHVpbnQxNl90IGJpdFJldkZhY3RvcjsgICAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KKyAgICBmbG9hdDMyX3Qgb25lYnlmZnRMZW47ICAgICAgICAgICAgIC8qKjwgdmFsdWUgb2YgMS9mZnRMZW4uICovDQorfSBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfZjMyOw0KKw0KKy8qIERlcHJlY2F0ZWQgKi8NCithcm1fc3RhdHVzIGFybV9jZmZ0X3JhZGl4Ml9pbml0X2YzMigNCisgICAgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgZmZ0TGVuLA0KKyAgICB1aW50OF90IGlmZnRGbGFnLA0KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsNCisNCisvKiBEZXByZWNhdGVkICovDQordm9pZCBhcm1fY2ZmdF9yYWRpeDJfZjMyKA0KKyAgICBjb25zdCBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovDQorICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWc9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovDQorICAgIGZsb2F0MzJfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgZmxvYXQzMl90IG9uZWJ5ZmZ0TGVuOyAgICAgICAgICAgICAvKio8IHZhbHVlIG9mIDEvZmZ0TGVuLiAqLw0KK30gYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMjsNCisNCisvKiBEZXByZWNhdGVkICovDQorYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDRfaW5pdF9mMzIoDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIHVpbnQxNl90IGZmdExlbiwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyogRGVwcmVjYXRlZCAqLw0KK3ZvaWQgYXJtX2NmZnRfcmFkaXg0X2YzMigNCisgICAgY29uc3QgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjKTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZml4ZWQtcG9pbnQgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLw0KKyAgICBjb25zdCBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgY29uc3QgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLw0KKyAgICB1aW50MTZfdCBiaXRSZXZMZW5ndGg7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIHRhYmxlIGxlbmd0aC4gKi8NCit9IGFybV9jZmZ0X2luc3RhbmNlX3ExNTsNCisNCit2b2lkIGFybV9jZmZ0X3ExNSgNCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcDEsDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcsDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaXhlZC1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovDQorICAgIGNvbnN0IHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBjb25zdCB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovDQorICAgIHVpbnQxNl90IGJpdFJldkxlbmd0aDsgICAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgdGFibGUgbGVuZ3RoLiAqLw0KK30gYXJtX2NmZnRfaW5zdGFuY2VfcTMxOw0KKw0KK3ZvaWQgYXJtX2NmZnRfcTMxKA0KKyAgICBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwMSwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8NCisgICAgY29uc3QgZmxvYXQzMl90ICpwVHdpZGRsZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIGNvbnN0IHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8NCisgICAgdWludDE2X3QgYml0UmV2TGVuZ3RoOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCB0YWJsZSBsZW5ndGguICovDQorfSBhcm1fY2ZmdF9pbnN0YW5jZV9mMzI7DQorDQordm9pZCBhcm1fY2ZmdF9mMzIoDQorICAgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwMSwNCisgICAgdWludDhfdCBpZmZ0RmxhZywNCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBSRkZUL1JJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBmZnRMZW5SZWFsOyAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgcmVhbCBGRlQuICovDQorICAgIHVpbnQ4X3QgaWZmdEZsYWdSOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWdSPTApIG9yIGludmVyc2UgKGlmZnRGbGFnUj0xKSB0cmFuc2Zvcm0uICovDQorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWdSOyAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovDQorICAgIHVpbnQzMl90IHR3aWRDb2VmUk1vZGlmaWVyOyAgICAgICAgICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgcTE1X3QgKnBUd2lkZGxlQVJlYWw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHExNV90ICpwVHdpZGRsZUJSZWFsOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBpbWFnIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgKnBDZmZ0OyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovDQorfSBhcm1fcmZmdF9pbnN0YW5jZV9xMTU7DQorDQorYXJtX3N0YXR1cyBhcm1fcmZmdF9pbml0X3ExNSgNCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MzJfdCBmZnRMZW5SZWFsLA0KKyAgICB1aW50MzJfdCBpZmZ0RmxhZ1IsDQorICAgIHVpbnQzMl90IGJpdFJldmVyc2VGbGFnKTsNCisNCit2b2lkIGFybV9yZmZ0X3ExNSgNCisgICAgY29uc3QgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgUkZGVC9SSUZGVCBmdW5jdGlvbi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDMyX3QgZmZ0TGVuUmVhbDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgcmVhbCBGRlQuICovDQorICAgIHVpbnQ4X3QgaWZmdEZsYWdSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZ1I9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWdSPTEpIHRyYW5zZm9ybS4gKi8NCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZ1I7ICAgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZ1I9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICB1aW50MzJfdCB0d2lkQ29lZlJNb2RpZmllcjsgICAgICAgICAgICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgcTMxX3QgKnBUd2lkZGxlQVJlYWw7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVhbCB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgcTMxX3QgKnBUd2lkZGxlQlJlYWw7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgaW1hZyB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8NCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxICpwQ2ZmdDsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovDQorfSBhcm1fcmZmdF9pbnN0YW5jZV9xMzE7DQorDQorYXJtX3N0YXR1cyBhcm1fcmZmdF9pbml0X3EzMSgNCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICB1aW50MzJfdCBmZnRMZW5SZWFsLA0KKyAgICB1aW50MzJfdCBpZmZ0RmxhZ1IsDQorICAgIHVpbnQzMl90IGJpdFJldmVyc2VGbGFnKTsNCisNCit2b2lkIGFybV9yZmZ0X3EzMSgNCisgICAgY29uc3QgYXJtX3JmZnRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBSRkZUL1JJRkZUIGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBmZnRMZW5SZWFsOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSByZWFsIEZGVC4gKi8NCisgICAgdWludDE2X3QgZmZ0TGVuQnkyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgY29tcGxleCBGRlQuICovDQorICAgIHVpbnQ4X3QgaWZmdEZsYWdSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZ1I9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWdSPTEpIHRyYW5zZm9ybS4gKi8NCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZ1I7ICAgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZ1I9MSkgb3IgZGlzYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLw0KKyAgICB1aW50MzJfdCB0d2lkQ29lZlJNb2RpZmllcjsgICAgICAgICAgICAgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIGZsb2F0MzJfdCAqcFR3aWRkbGVBUmVhbDsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIGZsb2F0MzJfdCAqcFR3aWRkbGVCUmVhbDsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGltYWcgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKnBDZmZ0OyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLw0KK30gYXJtX3JmZnRfaW5zdGFuY2VfZjMyOw0KKw0KK2FybV9zdGF0dXMgYXJtX3JmZnRfaW5pdF9mMzIoDQorICAgIGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqUywNCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqU19DRkZULA0KKyAgICB1aW50MzJfdCBmZnRMZW5SZWFsLA0KKyAgICB1aW50MzJfdCBpZmZ0RmxhZ1IsDQorICAgIHVpbnQzMl90IGJpdFJldmVyc2VGbGFnKTsNCisNCit2b2lkIGFybV9yZmZ0X2YzMigNCisgICAgY29uc3QgYXJtX3JmZnRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCk7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFJGRlQvUklGRlQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGFybV9jZmZ0X2luc3RhbmNlX2YzMiBTaW50OyAgICAgIC8qKjwgSW50ZXJuYWwgQ0ZGVCBzdHJ1Y3R1cmUuICovDQorICAgIHVpbnQxNl90IGZmdExlblJGRlQ7ICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSByZWFsIHNlcXVlbmNlICovDQorICAgIGZsb2F0MzJfdCAqcFR3aWRkbGVSRkZUOyAgICAgICAgIC8qKjwgVHdpZGRsZSBmYWN0b3JzIHJlYWwgc3RhZ2UgICovDQorfSBhcm1fcmZmdF9mYXN0X2luc3RhbmNlX2YzMiA7DQorDQorYXJtX3N0YXR1cyBhcm1fcmZmdF9mYXN0X2luaXRfZjMyKA0KKyAgICBhcm1fcmZmdF9mYXN0X2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgZmZ0TGVuKTsNCisNCit2b2lkIGFybV9yZmZ0X2Zhc3RfZjMyKA0KKyAgICBhcm1fcmZmdF9mYXN0X2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwLCBmbG9hdDMyX3QgKnBPdXQsDQorICAgIHVpbnQ4X3QgaWZmdEZsYWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0IGZ1bmN0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIERDVDQuICovDQorICAgIHVpbnQxNl90IE5ieTI7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4gKi8NCisgICAgZmxvYXQzMl90IG5vcm1hbGl6ZTsgICAgICAgICAgICAgICAgIC8qKjwgbm9ybWFsaXppbmcgZmFjdG9yLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb3NGYWN0b3I7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvc0ZhY3RvciB0YWJsZS4gKi8NCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfZjMyICpwUmZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIEZGVCBpbnN0YW5jZS4gKi8NCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqcENmZnQ7IC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8NCit9IGFybV9kY3Q0X2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0IHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBTX1JGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBmbG9hdGluZy1wb2ludCBSRkZUL1JJRkZUIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBTX0NGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBmbG9hdGluZy1wb2ludCBDRkZUL0NJRkZUIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBOICAgICAgICAgIGxlbmd0aCBvZiB0aGUgRENUNC4NCisgKiBAcGFyYW1baW5dICAgICBOYnkyICAgICAgIGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4NCisgKiBAcGFyYW1baW5dICAgICBub3JtYWxpemUgIG5vcm1hbGl6aW5nIGZhY3Rvci4NCisgKiBAcmV0dXJuICAgICAgYXJtX3N0YXR1cyBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiA8Y29kZT5mZnRMZW5SZWFsPC9jb2RlPiBpcyBub3QgYSBzdXBwb3J0ZWQgdHJhbnNmb3JtIGxlbmd0aC4NCisgKi8NCithcm1fc3RhdHVzIGFybV9kY3Q0X2luaXRfZjMyKA0KKyAgICBhcm1fZGN0NF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqU19SRkZULA0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfZjMyICpTX0NGRlQsDQorICAgIHVpbnQxNl90IE4sDQorICAgIHVpbnQxNl90IE5ieTIsDQorICAgIGZsb2F0MzJfdCBub3JtYWxpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRENUNC9JRENUNC4NCisgKiBAcGFyYW1baW5dICAgICBTICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IERDVDQvSURDVDQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luLG91dF0gcElubGluZUJ1ZmZlciAgcG9pbnRzIHRvIHRoZSBpbi1wbGFjZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlci4NCisgKi8NCit2b2lkIGFybV9kY3Q0X2YzMigNCisgICAgY29uc3QgYXJtX2RjdDRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgZmxvYXQzMl90ICpwSW5saW5lQnVmZmVyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIERDVDQvSURDVDQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IE47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRENUNC4gKi8NCisgICAgdWludDE2X3QgTmJ5MjsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0LiAqLw0KKyAgICBxMzFfdCBub3JtYWxpemU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBub3JtYWxpemluZyBmYWN0b3IuICovDQorICAgIHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHEzMV90ICpwQ29zRmFjdG9yOyAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29zRmFjdG9yIHRhYmxlLiAqLw0KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9xMzEgKnBSZmZ0OyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgRkZUIGluc3RhbmNlLiAqLw0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxICpwQ2ZmdDsgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLw0KK30gYXJtX2RjdDRfaW5zdGFuY2VfcTMxOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRENUNC9JRENUNC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMzEgRENUNC9JRENUNCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgU19SRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTMxIFJGRlQvUklGRlQgc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgICAgU19DRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTMxIENGRlQvQ0lGRlQgc3RydWN0dXJlDQorICogQHBhcmFtW2luXSAgICAgTiAgICAgICAgICBsZW5ndGggb2YgdGhlIERDVDQuDQorICogQHBhcmFtW2luXSAgICAgTmJ5MiAgICAgICBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuDQorICogQHBhcmFtW2luXSAgICAgbm9ybWFsaXplICBub3JtYWxpemluZyBmYWN0b3IuDQorICogQHJldHVybiAgICAgIGFybV9zdGF0dXMgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgPGNvZGU+TjwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHRyYW5zZm9ybSBsZW5ndGguDQorICovDQorYXJtX3N0YXR1cyBhcm1fZGN0NF9pbml0X3EzMSgNCisgICAgYXJtX2RjdDRfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9xMzEgKlNfUkZGVCwNCisgICAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMSAqU19DRkZULA0KKyAgICB1aW50MTZfdCBOLA0KKyAgICB1aW50MTZfdCBOYnkyLA0KKyAgICBxMzFfdCBub3JtYWxpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIERDVDQvSURDVDQuDQorICogQHBhcmFtW2luXSAgICAgUyAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRENUNCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW4sb3V0XSBwSW5saW5lQnVmZmVyICBwb2ludHMgdG8gdGhlIGluLXBsYWNlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX2RjdDRfcTMxKA0KKyAgICBjb25zdCBhcm1fZGN0NF9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIHEzMV90ICpwSW5saW5lQnVmZmVyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IERDVDQvSURDVDQgZnVuY3Rpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IE47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRENUNC4gKi8NCisgICAgdWludDE2X3QgTmJ5MjsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0LiAqLw0KKyAgICBxMTVfdCBub3JtYWxpemU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBub3JtYWxpemluZyBmYWN0b3IuICovDQorICAgIHExNV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovDQorICAgIHExNV90ICpwQ29zRmFjdG9yOyAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29zRmFjdG9yIHRhYmxlLiAqLw0KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9xMTUgKnBSZmZ0OyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgRkZUIGluc3RhbmNlLiAqLw0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTE1ICpwQ2ZmdDsgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLw0KK30gYXJtX2RjdDRfaW5zdGFuY2VfcTE1Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgRENUNC9JRENUNC4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMTUgRENUNC9JRENUNCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgU19SRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTE1IFJGRlQvUklGRlQgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIFNfQ0ZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFExNSBDRkZUL0NJRkZUIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBOICAgICAgICAgIGxlbmd0aCBvZiB0aGUgRENUNC4NCisgKiBAcGFyYW1baW5dICAgICBOYnkyICAgICAgIGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4NCisgKiBAcGFyYW1baW5dICAgICBub3JtYWxpemUgIG5vcm1hbGl6aW5nIGZhY3Rvci4NCisgKiBAcmV0dXJuICAgICAgYXJtX3N0YXR1cyBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiA8Y29kZT5OPC9jb2RlPiBpcyBub3QgYSBzdXBwb3J0ZWQgdHJhbnNmb3JtIGxlbmd0aC4NCisgKi8NCithcm1fc3RhdHVzIGFybV9kY3Q0X2luaXRfcTE1KA0KKyAgICBhcm1fZGN0NF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIGFybV9yZmZ0X2luc3RhbmNlX3ExNSAqU19SRkZULA0KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTE1ICpTX0NGRlQsDQorICAgIHVpbnQxNl90IE4sDQorICAgIHVpbnQxNl90IE5ieTIsDQorICAgIHExNV90IG5vcm1hbGl6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRENUNC9JRENUNC4NCisgKiBAcGFyYW1baW5dICAgICBTICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBEQ1Q0IHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIHBJbmxpbmVCdWZmZXIgIHBvaW50cyB0byB0aGUgaW4tcGxhY2UgaW5wdXQgYW5kIG91dHB1dCBidWZmZXIuDQorICovDQordm9pZCBhcm1fZGN0NF9xMTUoDQorICAgIGNvbnN0IGFybV9kY3Q0X2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTdGF0ZSwNCisgICAgcTE1X3QgKnBJbmxpbmVCdWZmZXIpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCB2ZWN0b3IgYWRkaXRpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fYWRkX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjQSwNCisgICAgZmxvYXQzMl90ICpwU3JjQiwNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRNyB2ZWN0b3IgYWRkaXRpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fYWRkX3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSB2ZWN0b3IgYWRkaXRpb24uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fYWRkX3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgdmVjdG9yIGFkZGl0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2FkZF9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgdmVjdG9yIHN1YnRyYWN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX3N1Yl9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0EsDQorICAgIGZsb2F0MzJfdCAqcFNyY0IsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTcgdmVjdG9yIHN1YnRyYWN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX3N1Yl9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgdmVjdG9yIHN1YnRyYWN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX3N1Yl9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUTMxIHZlY3RvciBzdWJ0cmFjdGlvbi4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zdWJfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIE11bHRpcGxpZXMgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgYnkgYSBzY2FsYXIuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHNjYWxlICAgICAgc2NhbGUgZmFjdG9yIHRvIGJlIGFwcGxpZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX3NjYWxlX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3Qgc2NhbGUsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgTXVsdGlwbGllcyBhIFE3IHZlY3RvciBieSBhIHNjYWxhci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgdmFsdWUNCisgKiBAcGFyYW1baW5dICBzaGlmdCAgICAgICBudW1iZXIgb2YgYml0cyB0byBzaGlmdCB0aGUgcmVzdWx0IGJ5DQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX3NjYWxlX3E3KA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxN190IHNjYWxlRnJhY3QsDQorICAgIGludDhfdCBzaGlmdCwNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgTXVsdGlwbGllcyBhIFExNSB2ZWN0b3IgYnkgYSBzY2FsYXIuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIHZhbHVlDQorICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQ0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zY2FsZV9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCBzY2FsZUZyYWN0LA0KKyAgICBpbnQ4X3Qgc2hpZnQsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBNdWx0aXBsaWVzIGEgUTMxIHZlY3RvciBieSBhIHNjYWxhci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgdmFsdWUNCisgKiBAcGFyYW1baW5dICBzaGlmdCAgICAgICBudW1iZXIgb2YgYml0cyB0byBzaGlmdCB0aGUgcmVzdWx0IGJ5DQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX3NjYWxlX3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90IHNjYWxlRnJhY3QsDQorICAgIGludDhfdCBzaGlmdCwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFE3IHZlY3RvciBhYnNvbHV0ZSB2YWx1ZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCBidWZmZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fYWJzX3E3KA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCB2ZWN0b3IgYWJzb2x1dGUgdmFsdWUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2Fic19mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMTUgdmVjdG9yIGFic29sdXRlIHZhbHVlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9hYnNfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFEzMSB2ZWN0b3IgYWJzb2x1dGUgdmFsdWUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2Fic19xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgRG90IHByb2R1Y3Qgb2YgZmxvYXRpbmctcG9pbnQgdmVjdG9ycy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9kb3RfcHJvZF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0EsDQorICAgIGZsb2F0MzJfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgZmxvYXQzMl90ICpyZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBEb3QgcHJvZHVjdCBvZiBRNyB2ZWN0b3JzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIG91dHB1dCByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX2RvdF9wcm9kX3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTMxX3QgKnJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIERvdCBwcm9kdWN0IG9mIFExNSB2ZWN0b3JzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIG91dHB1dCByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX2RvdF9wcm9kX3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTYzX3QgKnJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIERvdCBwcm9kdWN0IG9mIFEzMSB2ZWN0b3JzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIG91dHB1dCByZXN1bHQgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX2RvdF9wcm9kX3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTYzX3QgKnJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTaGlmdHMgdGhlIGVsZW1lbnRzIG9mIGEgUTcgdmVjdG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzaGlmdEJpdHMgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LiAgQSBwb3NpdGl2ZSB2YWx1ZSBzaGlmdHMgbGVmdDsgYSBuZWdhdGl2ZSB2YWx1ZSBzaGlmdHMgcmlnaHQuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zaGlmdF9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgaW50OF90IHNoaWZ0Qml0cywNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFNoaWZ0cyB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzaGlmdEJpdHMgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LiAgQSBwb3NpdGl2ZSB2YWx1ZSBzaGlmdHMgbGVmdDsgYSBuZWdhdGl2ZSB2YWx1ZSBzaGlmdHMgcmlnaHQuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zaGlmdF9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBpbnQ4X3Qgc2hpZnRCaXRzLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFNoaWZ0cyB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBzaGlmdEJpdHMgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LiAgQSBwb3NpdGl2ZSB2YWx1ZSBzaGlmdHMgbGVmdDsgYSBuZWdhdGl2ZSB2YWx1ZSBzaGlmdHMgcmlnaHQuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9zaGlmdF9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBpbnQ4X3Qgc2hpZnRCaXRzLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEFkZHMgYSBjb25zdGFudCBvZmZzZXQgdG8gYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG9mZnNldCAgICAgaXMgdGhlIG9mZnNldCB0byBiZSBhZGRlZA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fb2Zmc2V0X2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3Qgb2Zmc2V0LA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBBZGRzIGEgY29uc3RhbnQgb2Zmc2V0IHRvIGEgUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBvZmZzZXQgICAgIGlzIHRoZSBvZmZzZXQgdG8gYmUgYWRkZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX29mZnNldF9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgcTdfdCBvZmZzZXQsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBBZGRzIGEgY29uc3RhbnQgb2Zmc2V0IHRvIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9vZmZzZXRfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3Qgb2Zmc2V0LA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEFkZHMgYSBjb25zdGFudCBvZmZzZXQgdG8gYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBvZmZzZXQgICAgIGlzIHRoZSBvZmZzZXQgdG8gYmUgYWRkZWQNCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX29mZnNldF9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCBvZmZzZXQsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTmVnYXRlcyB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fbmVnYXRlX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBOZWdhdGVzIHRoZSBlbGVtZW50cyBvZiBhIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9uZWdhdGVfcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBOZWdhdGVzIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yDQorICovDQordm9pZCBhcm1fbmVnYXRlX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTmVnYXRlcyB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX25lZ2F0ZV9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX2NvcHlfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBRNyB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX2NvcHlfcTcoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb3BpZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fY29weV9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9jb3B5X3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmlsbHMgYSBjb25zdGFudCB2YWx1ZSBpbnRvIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHZhbHVlICAgICAgaW5wdXQgdmFsdWUgdG8gYmUgZmlsbGVkDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX2ZpbGxfZjMyKA0KKyAgICBmbG9hdDMyX3QgdmFsdWUsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIFE3IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICB2YWx1ZSAgICAgIGlucHV0IHZhbHVlIHRvIGJlIGZpbGxlZA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9maWxsX3E3KA0KKyAgICBxN190IHZhbHVlLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmlsbHMgYSBjb25zdGFudCB2YWx1ZSBpbnRvIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICB2YWx1ZSAgICAgIGlucHV0IHZhbHVlIHRvIGJlIGZpbGxlZA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9maWxsX3ExNSgNCisgICAgcTE1X3QgdmFsdWUsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmlsbHMgYSBjb25zdGFudCB2YWx1ZSBpbnRvIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICB2YWx1ZSAgICAgIGlucHV0IHZhbHVlIHRvIGJlIGZpbGxlZA0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9maWxsX3EzMSgNCisgICAgcTMxX3QgdmFsdWUsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBmbG9hdGluZy1wb2ludCBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIG91dHB1dCByZXN1bHQgaXMgd3JpdHRlbi4gIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyAqLw0KK3ZvaWQgYXJtX2NvbnZfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4gKyBzcmNCTGVuLTEuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuDQorICovDQordm9pZCBhcm1fY29udl9vcHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaDEsDQorICAgIHExNV90ICpwU2NyYXRjaDIpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBvdXRwdXQgcmVzdWx0IGlzIHdyaXR0ZW4uICBMZW5ndGggc3JjQUxlbiArIHNyY0JMZW4tMS4NCisgKi8NCit2b2lkIGFybV9jb252X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4gKyBzcmNCTGVuLTEuDQorICovDQordm9pZCBhcm1fY29udl9mYXN0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLg0KKyAqLw0KK3ZvaWQgYXJtX2NvbnZfZmFzdF9vcHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaDEsDQorICAgIHExNV90ICpwU2NyYXRjaDIpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMzEgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbiArIHNyY0JMZW4tMS4NCisgKi8NCit2b2lkIGFybV9jb252X3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHEzMV90ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTMxIHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4gKyBzcmNCTGVuLTEuDQorICovDQordm9pZCBhcm1fY29udl9mYXN0X3EzMSgNCisgICAgcTMxX3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMzFfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHEzMV90ICpwRHN0KTsNCisNCisNCisvKioNCisqIEBicmllZiBDb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMuDQorKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1baW5dICBzcmNBTGVuICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyogQHBhcmFtW2luXSAgc3JjQkxlbiAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4gKyBzcmNCTGVuLTEuDQorKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlcihvZiB0eXBlIHExNV90KSBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIChvZiB0eXBlIHExNV90KSBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4NCisqLw0KK3ZvaWQgYXJtX2NvbnZfb3B0X3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaDEsDQorICAgIHExNV90ICpwU2NyYXRjaDIpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuICsgc3JjQkxlbi0xLg0KKyAqLw0KK3ZvaWQgYXJtX2NvbnZfcTcoDQorICAgIHE3X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxN190ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTdfdCAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgZmxvYXRpbmctcG9pbnQgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4NCisgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuDQorICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4gKyBzcmNCTGVuLTJdLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIGZsb2F0MzJfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgZmlyc3RJbmRleCwNCisgICAgdWludDMyX3QgbnVtUG9pbnRzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4NCisgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4NCisgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbiArIHNyY0JMZW4tMl0uDQorICovDQorYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX29wdF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgZmlyc3RJbmRleCwNCisgICAgdWludDMyX3QgbnVtUG9pbnRzLA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gxLA0KKyAgICBxMTVfdCAqcFNjcmF0Y2gyKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4NCisgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuDQorICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4gKyBzcmNCTGVuLTJdLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgZmlyc3RJbmRleCwNCisgICAgdWludDMyX3QgbnVtUG9pbnRzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNA0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4NCisgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuDQorICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4gKyBzcmNCTGVuLTJdLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9mYXN0X3ExNSgNCisgICAgcTE1X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxMTVfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBmaXJzdEluZGV4LA0KKyAgICB1aW50MzJfdCBudW1Qb2ludHMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFExNSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00DQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLg0KKyAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZmFzdF9vcHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cywNCisgICAgcTE1X3QgKnBTY3JhdGNoMSwNCisgICAgcTE1X3QgKnBTY3JhdGNoMik7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTMxIHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTMxIHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZmFzdF9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgZmlyc3RJbmRleCwNCisgICAgdWludDMyX3QgbnVtUG9pbnRzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguDQorICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlcihvZiB0eXBlIHExNV90KSBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLg0KKyAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuICsgc3JjQkxlbi0yXS4NCisgKi8NCithcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfb3B0X3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cywNCisgICAgcTE1X3QgKnBTY3JhdGNoMSwNCisgICAgcTE1X3QgKnBTY3JhdGNoMik7DQorDQorDQorLyoqDQorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMuDQorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICAgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLg0KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLg0KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4gKyBzcmNCTGVuLTJdLg0KKyAgICovDQorYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX3E3KA0KKyAgICBxN190ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTdfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGZpcnN0SW5kZXgsDQorICAgIHVpbnQzMl90IG51bVBvaW50cyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgZGVjaW1hdG9yLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IE07ICAgICAgICAgICAgICAgICAgLyoqPCBkZWNpbWF0aW9uIGZhY3Rvci4gKi8NCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMTVfdCAqcENvZWZmczsgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorfSBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQ4X3QgTTsgICAgICAgICAgICAgICAgICAvKio8IGRlY2ltYXRpb24gZmFjdG9yLiAqLw0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCit9IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTMxOw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZGVjaW1hdG9yLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IE07ICAgICAgICAgICAgICAgICAgLyoqPCBkZWNpbWF0aW9uIGZhY3Rvci4gKi8NCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorfSBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3IuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfZGVjaW1hdGVfZjMyKA0KKyAgICBjb25zdCBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3IuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIE0gICAgICAgICAgZGVjaW1hdGlvbiBmYWN0b3IuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmDQorICogPGNvZGU+YmxvY2tTaXplPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiA8Y29kZT5NPC9jb2RlPi4NCisgKi8NCithcm1fc3RhdHVzIGFybV9maXJfZGVjaW1hdGVfaW5pdF9mMzIoDQorICAgIGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfZjMyICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICB1aW50OF90IE0sDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGRlY2ltYXRvci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfZGVjaW1hdGVfcTE1KA0KKyAgICBjb25zdCBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3ExNSAqUywNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHExNV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBkZWNpbWF0b3IgKGZhc3QgdmFyaWFudCkgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00Lg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9kZWNpbWF0ZV9mYXN0X3ExNSgNCisgICAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBkZWNpbWF0b3IuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBNICAgICAgICAgIGRlY2ltYXRpb24gZmFjdG9yLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZg0KKyAqIDxjb2RlPmJsb2NrU2l6ZTwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgPGNvZGU+TTwvY29kZT4uDQorICovDQorYXJtX3N0YXR1cyBhcm1fZmlyX2RlY2ltYXRlX2luaXRfcTE1KA0KKyAgICBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3ExNSAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgdWludDhfdCBNLA0KKyAgICBxMTVfdCAqcENvZWZmcywNCisgICAgcTE1X3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgZGVjaW1hdG9yLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfZGVjaW1hdGVfcTMxKA0KKyAgICBjb25zdCBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IgKGZhc3QgdmFyaWFudCkgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00Lg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9kZWNpbWF0ZV9mYXN0X3EzMSgNCisgICAgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEZJUiBkZWNpbWF0b3IuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBNICAgICAgICAgIGRlY2ltYXRpb24gZmFjdG9yLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZg0KKyAqIDxjb2RlPmJsb2NrU2l6ZTwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgPGNvZGU+TTwvY29kZT4uDQorICovDQorYXJtX3N0YXR1cyBhcm1fZmlyX2RlY2ltYXRlX2luaXRfcTMxKA0KKyAgICBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgdWludDhfdCBNLA0KKyAgICBxMzFfdCAqcENvZWZmcywNCisgICAgcTMxX3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3IuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQ4X3QgTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCB1cHNhbXBsZSBmYWN0b3IuICovDQorICAgIHVpbnQxNl90IHBoYXNlTGVuZ3RoOyAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgZWFjaCBwb2x5cGhhc2UgZmlsdGVyIGNvbXBvbmVudC4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggTCpwaGFzZUxlbmd0aC4gKi8NCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggYmxvY2tTaXplICsgcGhhc2VMZW5ndGgtMS4gKi8NCit9IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTE1Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGludGVycG9sYXRvci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDhfdCBMOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHVwc2FtcGxlIGZhY3Rvci4gKi8NCisgICAgdWludDE2X3QgcGhhc2VMZW5ndGg7ICAgICAgICAgICAvKio8IGxlbmd0aCBvZiBlYWNoIHBvbHlwaGFzZSBmaWx0ZXIgY29tcG9uZW50LiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBMKnBoYXNlTGVuZ3RoLiAqLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBibG9ja1NpemUgKyBwaGFzZUxlbmd0aC0xLiAqLw0KK30gYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMzE7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBpbnRlcnBvbGF0b3IuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQ4X3QgTDsgICAgICAgICAgICAgICAgICAgICAvKio8IHVwc2FtcGxlIGZhY3Rvci4gKi8NCisgICAgdWludDE2X3QgcGhhc2VMZW5ndGg7ICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIGVhY2ggcG9seXBoYXNlIGZpbHRlciBjb21wb25lbnQuICovDQorICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggTCpwaGFzZUxlbmd0aC4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBwaGFzZUxlbmd0aCArIG51bVRhcHMtMS4gKi8NCit9IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfZjMyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3IuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9xMTUoDQorICAgIGNvbnN0IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgTCAgICAgICAgICB1cHNhbXBsZSBmYWN0b3IuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqIEByZXR1cm4gICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYNCisgKiB0aGUgZmlsdGVyIGxlbmd0aCA8Y29kZT5udW1UYXBzPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBmYWN0b3IgPGNvZGU+TDwvY29kZT4uDQorICovDQorYXJtX3N0YXR1cyBhcm1fZmlyX2ludGVycG9sYXRlX2luaXRfcTE1KA0KKyAgICBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3ExNSAqUywNCisgICAgdWludDhfdCBMLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxMTVfdCAqcENvZWZmcywNCisgICAgcTE1X3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgaW50ZXJwb2xhdG9yLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfaW50ZXJwb2xhdGVfcTMxKA0KKyAgICBjb25zdCBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGludGVycG9sYXRvci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIEwgICAgICAgICAgdXBzYW1wbGUgZmFjdG9yLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKiBAcmV0dXJuICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmDQorICogdGhlIGZpbHRlciBsZW5ndGggPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGludGVycG9sYXRpb24gZmFjdG9yIDxjb2RlPkw8L2NvZGU+Lg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbml0X3EzMSgNCisgICAgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQ4X3QgTCwNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9mMzIoDQorICAgIGNvbnN0IGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgTCAgICAgICAgICB1cHNhbXBsZSBmYWN0b3IuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqIEByZXR1cm4gICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYNCisgKiB0aGUgZmlsdGVyIGxlbmd0aCA8Y29kZT5udW1UYXBzPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBmYWN0b3IgPGNvZGU+TDwvY29kZT4uDQorICovDQorYXJtX3N0YXR1cyBhcm1fZmlyX2ludGVycG9sYXRlX2luaXRfZjMyKA0KKyAgICBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDhfdCBMLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBoaWdoIHByZWNpc2lvbiBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IG51bVN0YWdlczsgICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8NCisgICAgcTYzX3QgKnBTdGF0ZTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovDQorICAgIHVpbnQ4X3QgcG9zdFNoaWZ0OyAgICAgICAvKio8IGFkZGl0aW9uYWwgc2hpZnQsIGluIGJpdHMsIGFwcGxpZWQgdG8gZWFjaCBvdXRwdXQgc2FtcGxlLiAqLw0KK30gYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X2luc19xMzE7DQorDQorDQorLyoqDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGhpZ2ggcHJlY2lzaW9uIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzX2RmMV8zMng2NF9xMzEoDQorICAgIGNvbnN0IGFybV9iaXF1YWRfY2FzX2RmMV8zMng2NF9pbnNfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGhpZ2ggcHJlY2lzaW9uIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBvc3RTaGlmdCAgc2hpZnQgdG8gYmUgYXBwbGllZCB0byB0aGUgb3V0cHV0LiBWYXJpZXMgYWNjb3JkaW5nIHRvIHRoZSBjb2VmZmljaWVudHMgZm9ybWF0DQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfaW5pdF9xMzEoDQorICAgIGFybV9iaXF1YWRfY2FzX2RmMV8zMng2NF9pbnNfcTMxICpTLA0KKyAgICB1aW50OF90IG51bVN0YWdlcywNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHE2M190ICpwU3RhdGUsDQorICAgIHVpbnQ4X3QgcG9zdFNoaWZ0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8NCit9IGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2YzMjsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8NCit9IGFybV9iaXF1YWRfY2FzY2FkZV9zdGVyZW9fZGYyVF9pbnN0YW5jZV9mMzI7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90IG51bVN0YWdlczsgICAgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLw0KKyAgICBmbG9hdDY0X3QgKnBTdGF0ZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCAyKm51bVN0YWdlcy4gKi8NCisgICAgZmxvYXQ2NF90ICpwQ29lZmZzOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovDQorfSBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mNjQ7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2YzMigNCisgICAgY29uc3QgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLiAyIGNoYW5uZWxzDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGENCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfZjMyKA0KKyAgICBjb25zdCBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfZjY0KA0KKyAgICBjb25zdCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mNjQgKlMsDQorICAgIGZsb2F0NjRfdCAqcFNyYywNCisgICAgZmxvYXQ2NF90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5pdF9mMzIoDQorICAgIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDhfdCBudW1TdGFnZXMsDQorICAgIGZsb2F0MzJfdCAqcENvZWZmcywNCisgICAgZmxvYXQzMl90ICpwU3RhdGUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVN0YWdlcyAgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luaXRfZjMyKA0KKyAgICBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfaW5zdGFuY2VfZjMyICpTLA0KKyAgICB1aW50OF90IG51bVN0YWdlcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICovDQordm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbml0X2Y2NCgNCisgICAgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjY0ICpTLA0KKyAgICB1aW50OF90IG51bVN0YWdlcywNCisgICAgZmxvYXQ2NF90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDY0X3QgKnBTdGF0ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgbGF0dGljZSBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVN0YWdlczsgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgc3RhZ2VzLiAqLw0KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovDQorfSBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4gKi8NCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovDQorICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLw0KK30gYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3EzMTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovDQorICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLw0KK30gYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX2YzMjsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBmaWx0ZXIgc3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9sYXR0aWNlX2luaXRfcTE1KA0KKyAgICBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICB1aW50MTZfdCBudW1TdGFnZXMsDQorICAgIHExNV90ICpwQ29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfbGF0dGljZV9xMTUoDQorICAgIGNvbnN0IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBmaWx0ZXIgc3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4gICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4NCisgKi8NCit2b2lkIGFybV9maXJfbGF0dGljZV9pbml0X3EzMSgNCisgICAgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzLA0KKyAgICBxMzFfdCAqcENvZWZmcywNCisgICAgcTMxX3QgKnBTdGF0ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfbGF0dGljZV9xMzEoDQorICAgIGNvbnN0IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMzEgKlMsDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4NCisgKi8NCit2b2lkIGFybV9maXJfbGF0dGljZV9pbml0X2YzMigNCisgICAgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzLA0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGxhdHRpY2Ugc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9maXJfbGF0dGljZV9mMzIoDQorICAgIGNvbnN0IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgSUlSIGxhdHRpY2UgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHExNV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgYmxvY2tTaXplLiAqLw0KKyAgICBxMTVfdCAqcGtDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLiAqLw0KKyAgICBxMTVfdCAqcHZDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGxhZGRlciBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyAxLiAqLw0KK30gYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3ExNTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIElJUiBsYXR0aWNlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIGJsb2NrU2l6ZS4gKi8NCisgICAgcTMxX3QgKnBrQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8NCisgICAgcTMxX3QgKnB2Q29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgMS4gKi8NCit9IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMzE7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIGJsb2NrU2l6ZS4gKi8NCisgICAgZmxvYXQzMl90ICpwa0NvZWZmczsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8NCisgICAgZmxvYXQzMl90ICpwdkNvZWZmczsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgMS4gKi8NCit9IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9mMzI7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2lpcl9sYXR0aWNlX2YzMigNCisgICAgY29uc3QgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgSUlSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVN0YWdlcyAgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gcGtDb2VmZnMgICBwb2ludHMgdG8gdGhlIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuDQorICogQHBhcmFtW2luXSBwdkNvZWZmcyAgIHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgMS4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIGJsb2NrU2l6ZS0xLg0KKyAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2lpcl9sYXR0aWNlX2luaXRfZjMyKA0KKyAgICBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyICpTLA0KKyAgICB1aW50MTZfdCBudW1TdGFnZXMsDQorICAgIGZsb2F0MzJfdCAqcGtDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcHZDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIElJUiBsYXR0aWNlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIElJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2lpcl9sYXR0aWNlX3EzMSgNCisgICAgY29uc3QgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBJSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIElJUiBsYXR0aWNlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVN0YWdlcyAgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gcGtDb2VmZnMgICBwb2ludHMgdG8gdGhlIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuDQorICogQHBhcmFtW2luXSBwdkNvZWZmcyAgIHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzICsgMS4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcyArIGJsb2NrU2l6ZS4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9paXJfbGF0dGljZV9pbml0X3EzMSgNCisgICAgYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgbnVtU3RhZ2VzLA0KKyAgICBxMzFfdCAqcGtDb2VmZnMsDQorICAgIHEzMV90ICpwdkNvZWZmcywNCisgICAgcTMxX3QgKnBTdGF0ZSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBJSVIgbGF0dGljZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9paXJfbGF0dGljZV9xMTUoDQorICAgIGNvbnN0IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgSUlSIGxhdHRpY2UgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpeGVkLXBvaW50IFExNSBJSVIgbGF0dGljZSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIHBrQ29lZmZzICAgcG9pbnRzIHRvIHJlZmxlY3Rpb24gY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuDQorICogQHBhcmFtW2luXSBwdkNvZWZmcyAgIHBvaW50cyB0byBsYWRkZXIgY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyAxLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMgKyBibG9ja1NpemUuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1faWlyX2xhdHRpY2VfaW5pdF9xMTUoDQorICAgIGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IG51bVN0YWdlcywNCisgICAgcTE1X3QgKnBrQ29lZmZzLA0KKyAgICBxMTVfdCAqcHZDb2VmZnMsDQorICAgIHExNV90ICpwU3RhdGUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCisgICAgZmxvYXQzMl90IG11OyAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8NCit9IGFybV9sbXNfaW5zdGFuY2VfZjMyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuDQorICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfZjMyKA0KKyAgICBjb25zdCBhcm1fbG1zX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBSZWYsDQorICAgIGZsb2F0MzJfdCAqcE91dCwNCisgICAgZmxvYXQzMl90ICpwRXJyLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfaW5pdF9mMzIoDQorICAgIGFybV9sbXNfaW5zdGFuY2VfZjMyICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnMsDQorICAgIGZsb2F0MzJfdCAqcFN0YXRlLA0KKyAgICBmbG9hdDMyX3QgbXUsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBMTVMgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorICAgIHExNV90IG11OyAgICAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovDQorICAgIHVpbnQzMl90IHBvc3RTaGlmdDsgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLw0KK30gYXJtX2xtc19pbnN0YW5jZV9xMTU7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuDQorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKiBAcGFyYW1baW5dIHBvc3RTaGlmdCAgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLg0KKyAqLw0KK3ZvaWQgYXJtX2xtc19pbml0X3ExNSgNCisgICAgYXJtX2xtc19pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHExNV90ICpwQ29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlLA0KKyAgICBxMTVfdCBtdSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICB1aW50MzJfdCBwb3N0U2hpZnQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMTUgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwT3V0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2xtc19xMTUoDQorICAgIGNvbnN0IGFybV9sbXNfaW5zdGFuY2VfcTE1ICpTLA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBSZWYsDQorICAgIHExNV90ICpwT3V0LA0KKyAgICBxMTVfdCAqcEVyciwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIExNUyBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCisgICAgcTMxX3QgbXU7ICAgICAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8NCisgICAgdWludDMyX3QgcG9zdFNoaWZ0OyAgLyoqPCBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuICovDQorfSBhcm1fbG1zX2luc3RhbmNlX3EzMTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgUTMxIExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuDQorICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfcTMxKA0KKyAgICBjb25zdCBhcm1fbG1zX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwUmVmLA0KKyAgICBxMzFfdCAqcE91dCwNCisgICAgcTMxX3QgKnBFcnIsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBRMzEgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKiBAcGFyYW1baW5dIHBvc3RTaGlmdCAgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLg0KKyAqLw0KK3ZvaWQgYXJtX2xtc19pbml0X3EzMSgNCisgICAgYXJtX2xtc19pbnN0YW5jZV9xMzEgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHEzMV90ICpwQ29lZmZzLA0KKyAgICBxMzFfdCAqcFN0YXRlLA0KKyAgICBxMzFfdCBtdSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICB1aW50MzJfdCBwb3N0U2hpZnQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBub3JtYWxpemVkIExNUyBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzICsgYmxvY2tTaXplLTEuICovDQorICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCisgICAgZmxvYXQzMl90IG11OyAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbCBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8NCisgICAgZmxvYXQzMl90IGVuZXJneTsgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgZnJhbWUgZW5lcmd5LiAqLw0KKyAgICBmbG9hdDMyX3QgeDA7ICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBpbnB1dCBzYW1wbGUuICovDQorfSBhcm1fbG1zX25vcm1faW5zdGFuY2VfZjMyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBub3JtYWxpemVkIExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4NCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICovDQordm9pZCBhcm1fbG1zX25vcm1fZjMyKA0KKyAgICBhcm1fbG1zX25vcm1faW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcFJlZiwNCisgICAgZmxvYXQzMl90ICpwT3V0LA0KKyAgICBmbG9hdDMyX3QgKnBFcnIsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBub3JtYWxpemVkIExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4NCisgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfbm9ybV9pbml0X2YzMigNCisgICAgYXJtX2xtc19ub3JtX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgZmxvYXQzMl90IG11LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcyArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorICAgIHEzMV90IG11OyAgICAgICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLw0KKyAgICB1aW50OF90IHBvc3RTaGlmdDsgICAgLyoqPCBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuICovDQorICAgIHEzMV90ICpyZWNpcFRhYmxlOyAgICAvKio8IHBvaW50cyB0byB0aGUgcmVjaXByb2NhbCBpbml0aWFsIHZhbHVlIHRhYmxlLiAqLw0KKyAgICBxMzFfdCBlbmVyZ3k7ICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBmcmFtZSBlbmVyZ3kuICovDQorICAgIHEzMV90IHgwOyAgICAgICAgICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGlucHV0IHNhbXBsZS4gKi8NCit9IGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMzE7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwT3V0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqLw0KK3ZvaWQgYXJtX2xtc19ub3JtX3EzMSgNCisgICAgYXJtX2xtc19ub3JtX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwUmVmLA0KKyAgICBxMzFfdCAqcE91dCwNCisgICAgcTMxX3QgKnBFcnIsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIGNvZWZmaWNpZW50IGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuDQorICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuDQorICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4NCisgKi8NCit2b2lkIGFybV9sbXNfbm9ybV9pbml0X3EzMSgNCisgICAgYXJtX2xtc19ub3JtX2luc3RhbmNlX3EzMSAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTMxX3QgKnBDb2VmZnMsDQorICAgIHEzMV90ICpwU3RhdGUsDQorICAgIHEzMV90IG11LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHVpbnQ4X3QgcG9zdFNoaWZ0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgIC8qKjwgTnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KKyAgICBxMTVfdCBtdTsgICAgICAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8NCisgICAgdWludDhfdCBwb3N0U2hpZnQ7ICAgIC8qKjwgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLiAqLw0KKyAgICBxMTVfdCAqcmVjaXBUYWJsZTsgICAgLyoqPCBQb2ludHMgdG8gdGhlIHJlY2lwcm9jYWwgaW5pdGlhbCB2YWx1ZSB0YWJsZS4gKi8NCisgICAgcTE1X3QgZW5lcmd5OyAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgZnJhbWUgZW5lcmd5LiAqLw0KKyAgICBxMTVfdCB4MDsgICAgICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBpbnB1dCBzYW1wbGUuICovDQorfSBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTE1Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMTUgbm9ybWFsaXplZCBMTVMgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuDQorICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4NCisgKi8NCit2b2lkIGFybV9sbXNfbm9ybV9xMTUoDQorICAgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcFJlZiwNCisgICAgcTE1X3QgKnBPdXQsDQorICAgIHExNV90ICpwRXJyLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4NCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byBjb2VmZmljaWVudCBidWZmZXIuDQorICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLg0KKyAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLg0KKyAqIEBwYXJhbVtpbl0gcG9zdFNoaWZ0ICBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuDQorICovDQordm9pZCBhcm1fbG1zX25vcm1faW5pdF9xMTUoDQorICAgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHVpbnQxNl90IG51bVRhcHMsDQorICAgIHExNV90ICpwQ29lZmZzLA0KKyAgICBxMTVfdCAqcFN0YXRlLA0KKyAgICBxMTVfdCBtdSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICB1aW50OF90IHBvc3RTaGlmdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIGZsb2F0aW5nLXBvaW50IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAqLw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIGZsb2F0MzJfdCAqcFNyY0IsDQorICAgIHVpbnQzMl90IHNyY0JMZW4sDQorICAgIGZsb2F0MzJfdCAqcERzdCk7DQorDQorDQorLyoqDQorKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTE1IHNlcXVlbmNlcw0KKyogQHBhcmFtW2luXSAgcFNyY0EgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorKiBAcGFyYW1baW5dICBzcmNBTGVuICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisqIEBwYXJhbVtpbl0gIHBTcmNCICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisqIEBwYXJhbVtvdXRdIHBEc3QgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuDQorKiBAcGFyYW1baW5dICBwU2NyYXRjaCAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLg0KKyovDQordm9pZCBhcm1fY29ycmVsYXRlX29wdF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgcTE1X3QgKnBTY3JhdGNoKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTE1IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAqLw0KKw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgdWludDMyX3Qgc3JjQUxlbiwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxMTVfdCAqcERzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFExNSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00Lg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuDQorICovDQorDQordm9pZCBhcm1fY29ycmVsYXRlX2Zhc3RfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2ggIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4NCisgKi8NCit2b2lkIGFybV9jb3JyZWxhdGVfZmFzdF9vcHRfcTE1KA0KKyAgICBxMTVfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHExNV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHExNV90ICpwU2NyYXRjaCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFEzMSBzZXF1ZW5jZXMuDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4NCisgKi8NCit2b2lkIGFybV9jb3JyZWxhdGVfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTMxX3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMzEgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNA0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuDQorICovDQordm9pZCBhcm1fY29ycmVsYXRlX2Zhc3RfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTMxX3QgKnBEc3QpOw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTcgc2VxdWVuY2VzLg0KKyAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4NCisgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4NCisgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuDQorICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLg0KKyAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciAob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuDQorICAqLw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9vcHRfcTcoDQorICAgIHE3X3QgKnBTcmNBLA0KKyAgICB1aW50MzJfdCBzcmNBTGVuLA0KKyAgICBxN190ICpwU3JjQiwNCisgICAgdWludDMyX3Qgc3JjQkxlbiwNCisgICAgcTdfdCAqcERzdCwNCisgICAgcTE1X3QgKnBTY3JhdGNoMSwNCisgICAgcTE1X3QgKnBTY3JhdGNoMik7DQorDQorDQorLyoqDQorICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFE3IHNlcXVlbmNlcy4NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLg0KKyAqLw0KK3ZvaWQgYXJtX2NvcnJlbGF0ZV9xNygNCisgICAgcTdfdCAqcFNyY0EsDQorICAgIHVpbnQzMl90IHNyY0FMZW4sDQorICAgIHE3X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBzcmNCTGVuLA0KKyAgICBxN190ICpwRHN0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLw0KKyAgICB1aW50MTZfdCBzdGF0ZUluZGV4OyAgICAgICAgICAvKio8IHN0YXRlIGJ1ZmZlciBpbmRleC4gIFBvaW50cyB0byB0aGUgb2xkZXN0IHNhbXBsZSBpbiB0aGUgc3RhdGUgYnVmZmVyLiAqLw0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG1heERlbGF5ICsgYmxvY2tTaXplLTEuICovDQorICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovDQorICAgIHVpbnQxNl90IG1heERlbGF5OyAgICAgICAgICAgIC8qKjwgbWF4aW11bSBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBwVGFwRGVsYXkgYXJyYXkuICovDQorICAgIGludDMyX3QgKnBUYXBEZWxheTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBkZWxheSB2YWx1ZXMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovDQorfSBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9mMzI7DQorDQorLyoqDQorICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBzcGFyc2UgRklSIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHVpbnQxNl90IHN0YXRlSW5kZXg7ICAgICAgICAgIC8qKjwgc3RhdGUgYnVmZmVyIGluZGV4LiAgUG9pbnRzIHRvIHRoZSBvbGRlc3Qgc2FtcGxlIGluIHRoZSBzdGF0ZSBidWZmZXIuICovDQorICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbWF4RGVsYXkgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCisgICAgdWludDE2X3QgbWF4RGVsYXk7ICAgICAgICAgICAgLyoqPCBtYXhpbXVtIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIHBUYXBEZWxheSBhcnJheS4gKi8NCisgICAgaW50MzJfdCAqcFRhcERlbGF5OyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGRlbGF5IHZhbHVlcy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCit9IGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3EzMTsNCisNCisvKioNCisgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IHNwYXJzZSBGSVIgZmlsdGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8NCisgICAgdWludDE2X3Qgc3RhdGVJbmRleDsgICAgICAgICAgLyoqPCBzdGF0ZSBidWZmZXIgaW5kZXguICBQb2ludHMgdG8gdGhlIG9sZGVzdCBzYW1wbGUgaW4gdGhlIHN0YXRlIGJ1ZmZlci4gKi8NCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlciBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBtYXhEZWxheSArIGJsb2NrU2l6ZS0xLiAqLw0KKyAgICBxMTVfdCAqcENvZWZmczsgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLw0KKyAgICB1aW50MTZfdCBtYXhEZWxheTsgICAgICAgICAgICAvKio8IG1heGltdW0gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgcFRhcERlbGF5IGFycmF5LiAqLw0KKyAgICBpbnQzMl90ICpwVGFwRGVsYXk7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZGVsYXkgdmFsdWVzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLw0KK30gYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTE1Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRNyBzcGFyc2UgRklSIGZpbHRlci4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovDQorICAgIHVpbnQxNl90IHN0YXRlSW5kZXg7ICAgICAgICAgIC8qKjwgc3RhdGUgYnVmZmVyIGluZGV4LiAgUG9pbnRzIHRvIHRoZSBvbGRlc3Qgc2FtcGxlIGluIHRoZSBzdGF0ZSBidWZmZXIuICovDQorICAgIHE3X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbWF4RGVsYXkgKyBibG9ja1NpemUtMS4gKi8NCisgICAgcTdfdCAqcENvZWZmczsgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8NCisgICAgdWludDE2X3QgbWF4RGVsYXk7ICAgICAgICAgICAgLyoqPCBtYXhpbXVtIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIHBUYXBEZWxheSBhcnJheS4gKi8NCisgICAgaW50MzJfdCAqcFRhcERlbGF5OyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGRlbGF5IHZhbHVlcy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8NCit9IGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3E3Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfc3BhcnNlX2YzMigNCisgICAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfZjMyICpTLA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgZmxvYXQzMl90ICpwU2NyYXRjaEluLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2Ygbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBUYXBEZWxheSAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBvZmZzZXQgdGltZXMuDQorICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgcGVyIGJsb2NrLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9mMzIoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX2YzMiAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgZmxvYXQzMl90ICpwQ29lZmZzLA0KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZSwNCisgICAgaW50MzJfdCAqcFRhcERlbGF5LA0KKyAgICB1aW50MTZfdCBtYXhEZWxheSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBzcGFyc2UgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBzcGFyc2UgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4NCisgKi8NCit2b2lkIGFybV9maXJfc3BhcnNlX3EzMSgNCisgICAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTMxICpTLA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTMxX3QgKnBEc3QsDQorICAgIHEzMV90ICpwU2NyYXRjaEluLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBzcGFyc2UgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuDQorICogQHBhcmFtW2luXSAgICAgcFRhcERlbGF5ICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9mZnNldCB0aW1lcy4NCisgKiBAcGFyYW1baW5dICAgICBtYXhEZWxheSAgIG1heGltdW0gb2Zmc2V0IHRpbWUgc3VwcG9ydGVkLg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBwZXIgYmxvY2suDQorICovDQordm9pZCBhcm1fZmlyX3NwYXJzZV9pbml0X3EzMSgNCisgICAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTMxICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxMzFfdCAqcENvZWZmcywNCisgICAgcTMxX3QgKnBTdGF0ZSwNCisgICAgaW50MzJfdCAqcFRhcERlbGF5LA0KKyAgICB1aW50MTZfdCBtYXhEZWxheSwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBzcGFyc2UgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4NCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQ0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoT3V0ICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9zcGFyc2VfcTE1KA0KKyAgICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgcTE1X3QgKnBTY3JhdGNoSW4sDQorICAgIHEzMV90ICpwU2NyYXRjaE91dCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IHNwYXJzZSBGSVIgZmlsdGVyLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2Ygbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4NCisgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqIEBwYXJhbVtpbl0gICAgIHBUYXBEZWxheSAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBvZmZzZXQgdGltZXMuDQorICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4NCisgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgcGVyIGJsb2NrLg0KKyAqLw0KK3ZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9xMTUoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3ExNSAqUywNCisgICAgdWludDE2X3QgbnVtVGFwcywNCisgICAgcTE1X3QgKnBDb2VmZnMsDQorICAgIHExNV90ICpwU3RhdGUsDQorICAgIGludDMyX3QgKnBUYXBEZWxheSwNCisgICAgdWludDE2X3QgbWF4RGVsYXksDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRNyBzcGFyc2UgRklSIGZpbHRlci4NCisgKiBAcGFyYW1baW5dICBTICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRNyBzcGFyc2UgRklSIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2hJbiAgIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuDQorICogQHBhcmFtW2luXSAgcFNjcmF0Y2hPdXQgIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuDQorICovDQordm9pZCBhcm1fZmlyX3NwYXJzZV9xNygNCisgICAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTcgKlMsDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHE3X3QgKnBEc3QsDQorICAgIHE3X3QgKnBTY3JhdGNoSW4sDQorICAgIHEzMV90ICpwU2NyYXRjaE91dCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTcgc3BhcnNlIEZJUiBmaWx0ZXIuDQorICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFE3IHNwYXJzZSBGSVIgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuDQorICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGZpbHRlciBjb2VmZmljaWVudHMuDQorICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4NCisgKiBAcGFyYW1baW5dICAgICBwVGFwRGVsYXkgIHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygb2Zmc2V0IHRpbWVzLg0KKyAqIEBwYXJhbVtpbl0gICAgIG1heERlbGF5ICAgbWF4aW11bSBvZmZzZXQgdGltZSBzdXBwb3J0ZWQuDQorICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4NCisgKi8NCit2b2lkIGFybV9maXJfc3BhcnNlX2luaXRfcTcoDQorICAgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3E3ICpTLA0KKyAgICB1aW50MTZfdCBudW1UYXBzLA0KKyAgICBxN190ICpwQ29lZmZzLA0KKyAgICBxN190ICpwU3RhdGUsDQorICAgIGludDMyX3QgKnBUYXBEZWxheSwNCisgICAgdWludDE2X3QgbWF4RGVsYXksDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBzaW5fY29zIGZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gIHRoZXRhICAgaW5wdXQgdmFsdWUgaW4gZGVncmVlcw0KKyAqIEBwYXJhbVtvdXRdIHBTaW5WYWwgIHBvaW50cyB0byB0aGUgcHJvY2Vzc2VkIHNpbmUgb3V0cHV0Lg0KKyAqIEBwYXJhbVtvdXRdIHBDb3NWYWwgIHBvaW50cyB0byB0aGUgcHJvY2Vzc2VkIGNvcyBvdXRwdXQuDQorICovDQordm9pZCBhcm1fc2luX2Nvc19mMzIoDQorICAgIGZsb2F0MzJfdCB0aGV0YSwNCisgICAgZmxvYXQzMl90ICpwU2luVmFsLA0KKyAgICBmbG9hdDMyX3QgKnBDb3NWYWwpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIHNpbl9jb3MgZnVuY3Rpb24uDQorICogQHBhcmFtW2luXSAgdGhldGEgICAgc2NhbGVkIGlucHV0IHZhbHVlIGluIGRlZ3JlZXMNCisgKiBAcGFyYW1bb3V0XSBwU2luVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBzaW5lIG91dHB1dC4NCisgKiBAcGFyYW1bb3V0XSBwQ29zVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBjb3NpbmUgb3V0cHV0Lg0KKyAqLw0KK3ZvaWQgYXJtX3Npbl9jb3NfcTMxKA0KKyAgICBxMzFfdCB0aGV0YSwNCisgICAgcTMxX3QgKnBTaW5WYWwsDQorICAgIHEzMV90ICpwQ29zVmFsKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXggY29uanVnYXRlLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X2NvbmpfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorLyoqDQorICogQGJyaWVmICBRMzEgY29tcGxleCBjb25qdWdhdGUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfY29ual9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgY29tcGxleCBjb25qdWdhdGUuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfY29ual9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IG1hZ25pdHVkZSBzcXVhcmVkDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbWFnX3NxdWFyZWRfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMzEgY29tcGxleCBtYWduaXR1ZGUgc3F1YXJlZA0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X21hZ19zcXVhcmVkX3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFExNSBjb21wbGV4IG1hZ25pdHVkZSBzcXVhcmVkDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbWFnX3NxdWFyZWRfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAgKiBAaW5ncm91cCBncm91cENvbnRyb2xsZXINCisgICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIFBJRCBQSUQgTW90b3IgQ29udHJvbA0KKyAqDQorICogQSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgRGVyaXZhdGl2ZSAoUElEKSBjb250cm9sbGVyIGlzIGEgZ2VuZXJpYyBmZWVkYmFjayBjb250cm9sDQorICogbG9vcCBtZWNoYW5pc20gd2lkZWx5IHVzZWQgaW4gaW5kdXN0cmlhbCBjb250cm9sIHN5c3RlbXMuDQorICogQSBQSUQgY29udHJvbGxlciBpcyB0aGUgbW9zdCBjb21tb25seSB1c2VkIHR5cGUgb2YgZmVlZGJhY2sgY29udHJvbGxlci4NCisgKg0KKyAqIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyBpbXBsZW1lbnRzIChQSUQpIGNvbnRyb2xsZXJzDQorICogZm9yIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4gIFRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIHNpbmdsZSBzYW1wbGUNCisgKiBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzaW5nbGUgcHJvY2Vzc2VkIHZhbHVlLg0KKyAqIDxjb2RlPlM8L2NvZGU+IHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUElEIGNvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUuICA8Y29kZT5pbjwvY29kZT4NCisgKiBpcyB0aGUgaW5wdXQgc2FtcGxlIHZhbHVlLiBUaGUgZnVuY3Rpb25zIHJldHVybiB0aGUgb3V0cHV0IHZhbHVlLg0KKyAqDQorICogXHBhciBBbGdvcml0aG06DQorICogPHByZT4NCisgKiAgICB5W25dID0geVtuLTFdICsgQTAgKiB4W25dICsgQTEgKiB4W24tMV0gKyBBMiAqIHhbbi0yXQ0KKyAqICAgIEEwID0gS3AgKyBLaSArIEtkDQorICogICAgQTEgPSAoLUtwICkgLSAoMiAqIEtkICkNCisgKiAgICBBMiA9IEtkICA8L3ByZT4NCisgKg0KKyAqIFxwYXINCisgKiB3aGVyZSBcYyBLcCBpcyBwcm9wb3J0aW9uYWwgY29uc3RhbnQsIFxjIEtpIGlzIEludGVncmFsIGNvbnN0YW50IGFuZCBcYyBLZCBpcyBEZXJpdmF0aXZlIGNvbnN0YW50DQorICoNCisgKiBccGFyDQorICogXGltYWdlIGh0bWwgUElELmdpZiAiUHJvcG9ydGlvbmFsIEludGVncmFsIERlcml2YXRpdmUgQ29udHJvbGxlciINCisgKg0KKyAqIFxwYXINCisgKiBUaGUgUElEIGNvbnRyb2xsZXIgY2FsY3VsYXRlcyBhbiAiZXJyb3IiIHZhbHVlIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4NCisgKiB0aGUgbWVhc3VyZWQgb3V0cHV0IGFuZCB0aGUgcmVmZXJlbmNlIGlucHV0Lg0KKyAqIFRoZSBjb250cm9sbGVyIGF0dGVtcHRzIHRvIG1pbmltaXplIHRoZSBlcnJvciBieSBhZGp1c3RpbmcgdGhlIHByb2Nlc3MgY29udHJvbCBpbnB1dHMuDQorICogVGhlIHByb3BvcnRpb25hbCB2YWx1ZSBkZXRlcm1pbmVzIHRoZSByZWFjdGlvbiB0byB0aGUgY3VycmVudCBlcnJvciwNCisgKiB0aGUgaW50ZWdyYWwgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgcmVhY3Rpb24gYmFzZWQgb24gdGhlIHN1bSBvZiByZWNlbnQgZXJyb3JzLA0KKyAqIGFuZCB0aGUgZGVyaXZhdGl2ZSB2YWx1ZSBkZXRlcm1pbmVzIHRoZSByZWFjdGlvbiBiYXNlZCBvbiB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgZXJyb3IgaGFzIGJlZW4gY2hhbmdpbmcuDQorICoNCisgKiBccGFyIEluc3RhbmNlIFN0cnVjdHVyZQ0KKyAqIFRoZSBHYWlucyBBMCwgQTEsIEEyIGFuZCBzdGF0ZSB2YXJpYWJsZXMgZm9yIGEgUElEIGNvbnRyb2xsZXIgYXJlIHN0b3JlZCB0b2dldGhlciBpbiBhbiBpbnN0YW5jZSBkYXRhIHN0cnVjdHVyZS4NCisgKiBBIHNlcGFyYXRlIGluc3RhbmNlIHN0cnVjdHVyZSBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggUElEIENvbnRyb2xsZXIuDQorICogVGhlcmUgYXJlIHNlcGFyYXRlIGluc3RhbmNlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgZm9yIGVhY2ggb2YgdGhlIDMgc3VwcG9ydGVkIGRhdGEgdHlwZXMuDQorICoNCisgKiBccGFyIFJlc2V0IEZ1bmN0aW9ucw0KKyAqIFRoZXJlIGlzIGFsc28gYW4gYXNzb2NpYXRlZCByZXNldCBmdW5jdGlvbiBmb3IgZWFjaCBkYXRhIHR5cGUgd2hpY2ggY2xlYXJzIHRoZSBzdGF0ZSBhcnJheS4NCisgKg0KKyAqIFxwYXIgSW5pdGlhbGl6YXRpb24gRnVuY3Rpb25zDQorICogVGhlcmUgaXMgYWxzbyBhbiBhc3NvY2lhdGVkIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBlYWNoIGRhdGEgdHlwZS4NCisgKiBUaGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOg0KKyAqIC0gSW5pdGlhbGl6ZXMgdGhlIEdhaW5zIEEwLCBBMSwgQTIgZnJvbSBLcCxLaSwgS2QgZ2FpbnMuDQorICogLSBaZXJvcyBvdXQgdGhlIHZhbHVlcyBpbiB0aGUgc3RhdGUgYnVmZmVyLg0KKyAqDQorICogXHBhcg0KKyAqIEluc3RhbmNlIHN0cnVjdHVyZSBjYW5ub3QgYmUgcGxhY2VkIGludG8gYSBjb25zdCBkYXRhIHNlY3Rpb24gYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uDQorICoNCisgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yDQorICogQ2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gdXNpbmcgdGhlIGZpeGVkLXBvaW50IHZlcnNpb25zIG9mIHRoZSBQSUQgQ29udHJvbGxlciBmdW5jdGlvbnMuDQorICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIGluIGVhY2ggZnVuY3Rpb24gbXVzdCBiZSBjb25zaWRlcmVkLg0KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIFBJRA0KKyAqIEB7DQorICovDQorDQorLyoqDQorICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wuDQorICogQHBhcmFtW2luLG91dF0gUyAgIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICAgICBpbiAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MNCisgKiBAcmV0dXJuIG91dCBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgZmxvYXQzMl90IGFybV9waWRfZjMyKA0KKyAgICBhcm1fcGlkX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90IGluKQ0KK3sNCisgICAgZmxvYXQzMl90IG91dDsNCisNCisgICAgLyogeVtuXSA9IHlbbi0xXSArIEEwICogeFtuXSArIEExICogeFtuLTFdICsgQTIgKiB4W24tMl0gICovDQorICAgIG91dCA9IChTLT5BMCAqIGluKSArDQorICAgICAgICAgIChTLT5BMSAqIFMtPnN0YXRlWzBdKSArIChTLT5BMiAqIFMtPnN0YXRlWzFdKSArIChTLT5zdGF0ZVsyXSk7DQorDQorICAgIC8qIFVwZGF0ZSBzdGF0ZSAqLw0KKyAgICBTLT5zdGF0ZVsxXSA9IFMtPnN0YXRlWzBdOw0KKyAgICBTLT5zdGF0ZVswXSA9IGluOw0KKyAgICBTLT5zdGF0ZVsyXSA9IG91dDsNCisNCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovDQorICAgIHJldHVybiAob3V0KTsNCisNCit9DQorDQorLyoqDQorICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIFBJRCBDb250cm9sIHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbl0gICAgIGluICBpbnB1dCBzYW1wbGUgdG8gcHJvY2Vzcw0KKyAqIEByZXR1cm4gb3V0IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLg0KKyAqDQorICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPg0KKyAqIFxwYXINCisgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgNjQtYml0IGFjY3VtdWxhdG9yLg0KKyAqIFRoZSBhY2N1bXVsYXRvciBoYXMgYSAyLjYyIGZvcm1hdCBhbmQgbWFpbnRhaW5zIGZ1bGwgcHJlY2lzaW9uIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gcmVzdWx0cyBidXQgcHJvdmlkZXMgb25seSBhIHNpbmdsZSBndWFyZCBiaXQuDQorICogVGh1cywgaWYgdGhlIGFjY3VtdWxhdG9yIHJlc3VsdCBvdmVyZmxvd3MgaXQgd3JhcHMgYXJvdW5kIHJhdGhlciB0aGFuIGNsaXAuDQorICogSW4gb3JkZXIgdG8gYXZvaWQgb3ZlcmZsb3dzIGNvbXBsZXRlbHkgdGhlIGlucHV0IHNpZ25hbCBtdXN0IGJlIHNjYWxlZCBkb3duIGJ5IDIgYml0cyBhcyB0aGVyZSBhcmUgZm91ciBhZGRpdGlvbnMuDQorICogQWZ0ZXIgYWxsIG11bHRpcGx5LWFjY3VtdWxhdGVzIGFyZSBwZXJmb3JtZWQsIHRoZSAyLjYyIGFjY3VtdWxhdG9yIGlzIHRydW5jYXRlZCB0byAxLjMyIGZvcm1hdCBhbmQgdGhlbiBzYXR1cmF0ZWQgdG8gMS4zMSBmb3JtYXQuDQorICovDQorc3RhdGljIF9fSU5MSU5FIHEzMV90IGFybV9waWRfcTMxKA0KKyAgICBhcm1fcGlkX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgaW4pDQorew0KKyAgICBxNjNfdCBhY2M7DQorICAgIHEzMV90IG91dDsNCisNCisgICAgLyogYWNjID0gQTAgKiB4W25dICAqLw0KKyAgICBhY2MgPSAocTYzX3QpIFMtPkEwICogaW47DQorDQorICAgIC8qIGFjYyArPSBBMSAqIHhbbi0xXSAqLw0KKyAgICBhY2MgKz0gKHE2M190KSBTLT5BMSAqIFMtPnN0YXRlWzBdOw0KKw0KKyAgICAvKiBhY2MgKz0gQTIgKiB4W24tMl0gICovDQorICAgIGFjYyArPSAocTYzX3QpIFMtPkEyICogUy0+c3RhdGVbMV07DQorDQorICAgIC8qIGNvbnZlcnQgb3V0cHV0IHRvIDEuMzEgZm9ybWF0IHRvIGFkZCB5W24tMV0gKi8NCisgICAgb3V0ID0gKHEzMV90KShhY2MgPj4gMzF1KTsNCisNCisgICAgLyogb3V0ICs9IHlbbi0xXSAqLw0KKyAgICBvdXQgKz0gUy0+c3RhdGVbMl07DQorDQorICAgIC8qIFVwZGF0ZSBzdGF0ZSAqLw0KKyAgICBTLT5zdGF0ZVsxXSA9IFMtPnN0YXRlWzBdOw0KKyAgICBTLT5zdGF0ZVswXSA9IGluOw0KKyAgICBTLT5zdGF0ZVsyXSA9IG91dDsNCisNCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovDQorICAgIHJldHVybiAob3V0KTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICAgICBpbiAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MNCisgKiBAcmV0dXJuIG91dCBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4NCisgKg0KKyAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4NCisgKiBccGFyDQorICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgNjQtYml0IGludGVybmFsIGFjY3VtdWxhdG9yLg0KKyAqIEJvdGggR2FpbnMgYW5kIHN0YXRlIHZhcmlhYmxlcyBhcmUgcmVwcmVzZW50ZWQgaW4gMS4xNSBmb3JtYXQgYW5kIG11bHRpcGxpY2F0aW9ucyB5aWVsZCBhIDIuMzAgcmVzdWx0Lg0KKyAqIFRoZSAyLjMwIGludGVybWVkaWF0ZSByZXN1bHRzIGFyZSBhY2N1bXVsYXRlZCBpbiBhIDY0LWJpdCBhY2N1bXVsYXRvciBpbiAzNC4zMCBmb3JtYXQuDQorICogVGhlcmUgaXMgbm8gcmlzayBvZiBpbnRlcm5hbCBvdmVyZmxvdyB3aXRoIHRoaXMgYXBwcm9hY2ggYW5kIHRoZSBmdWxsIHByZWNpc2lvbiBvZiBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb25zIGlzIHByZXNlcnZlZC4NCisgKiBBZnRlciBhbGwgYWRkaXRpb25zIGhhdmUgYmVlbiBwZXJmb3JtZWQsIHRoZSBhY2N1bXVsYXRvciBpcyB0cnVuY2F0ZWQgdG8gMzQuMTUgZm9ybWF0IGJ5IGRpc2NhcmRpbmcgbG93IDE1IGJpdHMuDQorICogTGFzdGx5LCB0aGUgYWNjdW11bGF0b3IgaXMgc2F0dXJhdGVkIHRvIHlpZWxkIGEgcmVzdWx0IGluIDEuMTUgZm9ybWF0Lg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBxMTVfdCBhcm1fcGlkX3ExNSgNCisgICAgYXJtX3BpZF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHExNV90IGluKQ0KK3sNCisgICAgcTYzX3QgYWNjOw0KKyAgICBxMTVfdCBvdXQ7DQorDQorI2lmbmRlZiBBUk1fTUFUSF9DTTBfRkFNSUxZDQorICAgIF9fU0lNRDMyX1RZUEUgKnZzdGF0ZTsNCisNCisgICAgLyogSW1wbGVtZW50YXRpb24gb2YgUElEIGNvbnRyb2xsZXIgKi8NCisNCisgICAgLyogYWNjID0gQTAgKiB4W25dICAqLw0KKyAgICBhY2MgPSAocTMxX3QpIF9fU01VQUQoKHVpbnQzMl90KVMtPkEwLCAodWludDMyX3QpaW4pOw0KKw0KKyAgICAvKiBhY2MgKz0gQTEgKiB4W24tMV0gKyBBMiAqIHhbbi0yXSAgKi8NCisgICAgdnN0YXRlID0gX19TSU1EMzJfQ09OU1QoUy0+c3RhdGUpOw0KKyAgICBhY2MgPSAocTYzX3QpX19TTUxBTEQoKHVpbnQzMl90KVMtPkExLCAodWludDMyX3QpICogdnN0YXRlLCAodWludDY0X3QpYWNjKTsNCisjZWxzZQ0KKyAgICAvKiBhY2MgPSBBMCAqIHhbbl0gICovDQorICAgIGFjYyA9ICgocTMxX3QpIFMtPkEwKSAqIGluOw0KKw0KKyAgICAvKiBhY2MgKz0gQTEgKiB4W24tMV0gKyBBMiAqIHhbbi0yXSAgKi8NCisgICAgYWNjICs9IChxMzFfdCkgUy0+QTEgKiBTLT5zdGF0ZVswXTsNCisgICAgYWNjICs9IChxMzFfdCkgUy0+QTIgKiBTLT5zdGF0ZVsxXTsNCisjZW5kaWYNCisNCisgICAgLyogYWNjICs9IHlbbi0xXSAqLw0KKyAgICBhY2MgKz0gKHEzMV90KSBTLT5zdGF0ZVsyXSA8PCAxNTsNCisNCisgICAgLyogc2F0dXJhdGUgdGhlIG91dHB1dCAqLw0KKyAgICBvdXQgPSAocTE1X3QpKF9fU1NBVCgoYWNjID4+IDE1KSwgMTYpKTsNCisNCisgICAgLyogVXBkYXRlIHN0YXRlICovDQorICAgIFMtPnN0YXRlWzFdID0gUy0+c3RhdGVbMF07DQorICAgIFMtPnN0YXRlWzBdID0gaW47DQorICAgIFMtPnN0YXRlWzJdID0gb3V0Ow0KKw0KKyAgICAvKiByZXR1cm4gdG8gYXBwbGljYXRpb24gKi8NCisgICAgcmV0dXJuIChvdXQpOw0KK30NCisNCisvKioNCisgKiBAfSBlbmQgb2YgUElEIGdyb3VwDQorICovDQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBpbnZlcnNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyYyAgIHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGlucHV0IGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW291dF0gZHN0ICAgcG9pbnRzIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgb3V0cHV0IGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TSVpFX01JU01BVENILCBpZiB0aGUgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guDQorICogSWYgdGhlIGlucHV0IG1hdHJpeCBpcyBzaW5ndWxhciAoZG9lcyBub3QgaGF2ZSBhbiBpbnZlcnNlKSwgdGhlbiB0aGUgYWxnb3JpdGhtIHRlcm1pbmF0ZXMgYW5kIHJldHVybnMgZXJyb3Igc3RhdHVzIEFSTV9NQVRIX1NJTkdVTEFSLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9pbnZlcnNlX2YzMigNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKnNyYywNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKmRzdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBpbnZlcnNlLg0KKyAqIEBwYXJhbVtpbl0gIHNyYyAgIHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGlucHV0IGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW291dF0gZHN0ICAgcG9pbnRzIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgb3V0cHV0IGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuDQorICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TSVpFX01JU01BVENILCBpZiB0aGUgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guDQorICogSWYgdGhlIGlucHV0IG1hdHJpeCBpcyBzaW5ndWxhciAoZG9lcyBub3QgaGF2ZSBhbiBpbnZlcnNlKSwgdGhlbiB0aGUgYWxnb3JpdGhtIHRlcm1pbmF0ZXMgYW5kIHJldHVybnMgZXJyb3Igc3RhdHVzIEFSTV9NQVRIX1NJTkdVTEFSLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX21hdF9pbnZlcnNlX2Y2NCgNCisgICAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mNjQgKnNyYywNCisgICAgYXJtX21hdHJpeF9pbnN0YW5jZV9mNjQgKmRzdCk7DQorDQorDQorDQorLyoqDQorICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGNsYXJrZSBWZWN0b3IgQ2xhcmtlIFRyYW5zZm9ybQ0KKyAqIEZvcndhcmQgQ2xhcmtlIHRyYW5zZm9ybSBjb252ZXJ0cyB0aGUgaW5zdGFudGFuZW91cyBzdGF0b3IgcGhhc2VzIGludG8gYSB0d28tY29vcmRpbmF0ZSB0aW1lIGludmFyaWFudCB2ZWN0b3IuDQorICogR2VuZXJhbGx5IHRoZSBDbGFya2UgdHJhbnNmb3JtIHVzZXMgdGhyZWUtcGhhc2UgY3VycmVudHMgPGNvZGU+SWEsIEliIGFuZCBJYzwvY29kZT4gdG8gY2FsY3VsYXRlIGN1cnJlbnRzDQorICogaW4gdGhlIHR3by1waGFzZSBvcnRob2dvbmFsIHN0YXRvciBheGlzIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIDxjb2RlPkliZXRhPC9jb2RlPi4NCisgKiBXaGVuIDxjb2RlPklhbHBoYTwvY29kZT4gaXMgc3VwZXJwb3NlZCB3aXRoIDxjb2RlPklhPC9jb2RlPiBhcyBzaG93biBpbiB0aGUgZmlndXJlIGJlbG93DQorICogXGltYWdlIGh0bWwgY2xhcmtlLmdpZiBTdGF0b3IgY3VycmVudCBzcGFjZSB2ZWN0b3IgYW5kIGl0cyBjb21wb25lbnRzIGluIChhLGIpLg0KKyAqIGFuZCA8Y29kZT5JYSArIEliICsgSWMgPSAwPC9jb2RlPiwgaW4gdGhpcyBjb25kaXRpb24gPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+SWJldGE8L2NvZGU+DQorICogY2FuIGJlIGNhbGN1bGF0ZWQgdXNpbmcgb25seSA8Y29kZT5JYTwvY29kZT4gYW5kIDxjb2RlPkliPC9jb2RlPi4NCisgKg0KKyAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0Lg0KKyAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLg0KKyAqIFxwYXIgQWxnb3JpdGhtDQorICogXGltYWdlIGh0bWwgY2xhcmtlRm9ybXVsYS5naWYNCisgKiB3aGVyZSA8Y29kZT5JYTwvY29kZT4gYW5kIDxjb2RlPkliPC9jb2RlPiBhcmUgdGhlIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcyBhbmQNCisgKiA8Y29kZT5wSWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+cEliZXRhPC9jb2RlPiBhcmUgdGhlIHR3byBjb29yZGluYXRlcyBvZiB0aW1lIGludmFyaWFudCB2ZWN0b3IuDQorICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcg0KKyAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgQ2xhcmtlIHRyYW5zZm9ybS4NCisgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgb3ZlcmZsb3cgYW5kIHNhdHVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGFjY3VtdWxhdG9yIHVzZWQgbXVzdCBiZSBjb25zaWRlcmVkLg0KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIGNsYXJrZQ0KKyAqIEB7DQorICovDQorDQorLyoqDQorICoNCisgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IENsYXJrZSB0cmFuc2Zvcm0NCisgKiBAcGFyYW1baW5dICBJYSAgICAgICBpbnB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+DQorICogQHBhcmFtW2luXSAgSWIgICAgICAgaW5wdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5iPC9jb2RlPg0KKyAqIEBwYXJhbVtvdXRdIHBJYWxwaGEgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGENCisgKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGENCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2xhcmtlX2YzMigNCisgICAgZmxvYXQzMl90IElhLA0KKyAgICBmbG9hdDMyX3QgSWIsDQorICAgIGZsb2F0MzJfdCAqcElhbHBoYSwNCisgICAgZmxvYXQzMl90ICpwSWJldGEpDQorew0KKyAgICAvKiBDYWxjdWxhdGUgcElhbHBoYSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYWxwaGEgPSBJYSAqLw0KKyAgICAqcElhbHBoYSA9IElhOw0KKw0KKyAgICAvKiBDYWxjdWxhdGUgcEliZXRhIHVzaW5nIHRoZSBlcXVhdGlvbiwgcEliZXRhID0gKDEvc3FydCgzKSkgKiBJYSArICgyL3NxcnQoMykpICogSWIgKi8NCisgICAgKnBJYmV0YSA9ICgoZmxvYXQzMl90KSAwLjU3NzM1MDI2OTE5ICogSWEgKyAoZmxvYXQzMl90KSAxLjE1NDcwMDUzODM4ICogSWIpOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgIENsYXJrZSB0cmFuc2Zvcm0gZm9yIFEzMSB2ZXJzaW9uDQorICogQHBhcmFtW2luXSAgSWEgICAgICAgaW5wdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5hPC9jb2RlPg0KKyAqIEBwYXJhbVtpbl0gIEliICAgICAgIGlucHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YjwvY29kZT4NCisgKiBAcGFyYW1bb3V0XSBwSWFscGhhICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGFscGhhDQorICogQHBhcmFtW291dF0gcEliZXRhICAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhDQorICoNCisgKiA8Yj5TY2FsaW5nIGFuZCBPdmVyZmxvdyBCZWhhdmlvcjo8L2I+DQorICogXHBhcg0KKyAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhbiBpbnRlcm5hbCAzMi1iaXQgYWNjdW11bGF0b3IuDQorICogVGhlIGFjY3VtdWxhdG9yIG1haW50YWlucyAxLjMxIGZvcm1hdCBieSB0cnVuY2F0aW5nIGxvd2VyIDMxIGJpdHMgb2YgdGhlIGludGVybWVkaWF0ZSBtdWx0aXBsaWNhdGlvbiBpbiAyLjYyIGZvcm1hdC4NCisgKiBUaGVyZSBpcyBzYXR1cmF0aW9uIG9uIHRoZSBhZGRpdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2xhcmtlX3EzMSgNCisgICAgcTMxX3QgSWEsDQorICAgIHEzMV90IEliLA0KKyAgICBxMzFfdCAqcElhbHBoYSwNCisgICAgcTMxX3QgKnBJYmV0YSkNCit7DQorICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLw0KKw0KKyAgICAvKiBDYWxjdWxhdGluZyBwSWFscGhhIGZyb20gSWEgYnkgZXF1YXRpb24gcElhbHBoYSA9IElhICovDQorICAgICpwSWFscGhhID0gSWE7DQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKDEvKHNxcnQoMykpICogSWEpICovDQorICAgIHByb2R1Y3QxID0gKHEzMV90KSgoKHE2M190KSBJYSAqIDB4MjRGMzRFOEIpID4+IDMwKTsNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoMi9zcXJ0KDMpICogSWIpICovDQorICAgIHByb2R1Y3QyID0gKHEzMV90KSgoKHE2M190KSBJYiAqIDB4NDlFNjlEMTYpID4+IDMwKTsNCisNCisgICAgLyogcEliZXRhIGlzIGNhbGN1bGF0ZWQgYnkgYWRkaW5nIHRoZSBpbnRlcm1lZGlhdGUgcHJvZHVjdHMgKi8NCisgICAgKnBJYmV0YSA9IF9fUUFERChwcm9kdWN0MSwgcHJvZHVjdDIpOw0KK30NCisNCisvKioNCisgKiBAfSBlbmQgb2YgY2xhcmtlIGdyb3VwDQorICovDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFE3IHZlY3RvciB0byBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xN190b19xMzEoDQorICAgIHE3X3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKw0KKy8qKg0KKyAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBpbnZfY2xhcmtlIFZlY3RvciBJbnZlcnNlIENsYXJrZSBUcmFuc2Zvcm0NCisgKiBJbnZlcnNlIENsYXJrZSB0cmFuc2Zvcm0gY29udmVydHMgdGhlIHR3by1jb29yZGluYXRlIHRpbWUgaW52YXJpYW50IHZlY3RvciBpbnRvIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcy4NCisgKg0KKyAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0Lg0KKyAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLg0KKyAqIFxwYXIgQWxnb3JpdGhtDQorICogXGltYWdlIGh0bWwgY2xhcmtlSW52Rm9ybXVsYS5naWYNCisgKiB3aGVyZSA8Y29kZT5wSWE8L2NvZGU+IGFuZCA8Y29kZT5wSWI8L2NvZGU+IGFyZSB0aGUgaW5zdGFudGFuZW91cyBzdGF0b3IgcGhhc2VzIGFuZA0KKyAqIDxjb2RlPklhbHBoYTwvY29kZT4gYW5kIDxjb2RlPkliZXRhPC9jb2RlPiBhcmUgdGhlIHR3byBjb29yZGluYXRlcyBvZiB0aW1lIGludmFyaWFudCB2ZWN0b3IuDQorICogXHBhciBGaXhlZC1Qb2ludCBCZWhhdmlvcg0KKyAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgQ2xhcmtlIHRyYW5zZm9ybS4NCisgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgb3ZlcmZsb3cgYW5kIHNhdHVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGFjY3VtdWxhdG9yIHVzZWQgbXVzdCBiZSBjb25zaWRlcmVkLg0KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIGludl9jbGFya2UNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyogQGJyaWVmICBGbG9hdGluZy1wb2ludCBJbnZlcnNlIENsYXJrZSB0cmFuc2Zvcm0NCisqIEBwYXJhbVtpbl0gIElhbHBoYSAgaW5wdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGENCisqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYmV0YQ0KKyogQHBhcmFtW291dF0gcElhICAgICBwb2ludHMgdG8gb3V0cHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YTwvY29kZT4NCisqIEBwYXJhbVtvdXRdIHBJYiAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmI8L2NvZGU+DQorKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1faW52X2NsYXJrZV9mMzIoDQorICAgIGZsb2F0MzJfdCBJYWxwaGEsDQorICAgIGZsb2F0MzJfdCBJYmV0YSwNCisgICAgZmxvYXQzMl90ICpwSWEsDQorICAgIGZsb2F0MzJfdCAqcEliKQ0KK3sNCisgICAgLyogQ2FsY3VsYXRpbmcgcElhIGZyb20gSWFscGhhIGJ5IGVxdWF0aW9uIHBJYSA9IElhbHBoYSAqLw0KKyAgICAqcElhID0gSWFscGhhOw0KKw0KKyAgICAvKiBDYWxjdWxhdGluZyBwSWIgZnJvbSBJYWxwaGEgYW5kIEliZXRhIGJ5IGVxdWF0aW9uIHBJYiA9IC0oMS8yKSAqIElhbHBoYSArIChzcXJ0KDMpLzIpICogSWJldGEgKi8NCisgICAgKnBJYiA9IC0wLjVmICogSWFscGhhICsgMC44NjYwMjU0MDM5ZiAqIEliZXRhOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgIEludmVyc2UgQ2xhcmtlIHRyYW5zZm9ybSBmb3IgUTMxIHZlcnNpb24NCisgKiBAcGFyYW1baW5dICBJYWxwaGEgIGlucHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGFscGhhDQorICogQHBhcmFtW2luXSAgSWJldGEgICBpbnB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhDQorICogQHBhcmFtW291dF0gcElhICAgICBwb2ludHMgdG8gb3V0cHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YTwvY29kZT4NCisgKiBAcGFyYW1bb3V0XSBwSWIgICAgIHBvaW50cyB0byBvdXRwdXQgdGhyZWUtcGhhc2UgY29vcmRpbmF0ZSA8Y29kZT5iPC9jb2RlPg0KKyAqDQorICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPg0KKyAqIFxwYXINCisgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgMzItYml0IGFjY3VtdWxhdG9yLg0KKyAqIFRoZSBhY2N1bXVsYXRvciBtYWludGFpbnMgMS4zMSBmb3JtYXQgYnkgdHJ1bmNhdGluZyBsb3dlciAzMSBiaXRzIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gaW4gMi42MiBmb3JtYXQuDQorICogVGhlcmUgaXMgc2F0dXJhdGlvbiBvbiB0aGUgc3VidHJhY3Rpb24sIGhlbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuDQorICovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2ludl9jbGFya2VfcTMxKA0KKyAgICBxMzFfdCBJYWxwaGEsDQorICAgIHEzMV90IEliZXRhLA0KKyAgICBxMzFfdCAqcElhLA0KKyAgICBxMzFfdCAqcEliKQ0KK3sNCisgICAgcTMxX3QgcHJvZHVjdDEsIHByb2R1Y3QyOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovDQorDQorICAgIC8qIENhbGN1bGF0aW5nIHBJYSBmcm9tIElhbHBoYSBieSBlcXVhdGlvbiBwSWEgPSBJYWxwaGEgKi8NCisgICAgKnBJYSA9IElhbHBoYTsNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoMS8oMipzcXJ0KDMpKSAqIElhKSAqLw0KKyAgICBwcm9kdWN0MSA9IChxMzFfdCkoKChxNjNfdCkoSWFscGhhKSAqICgweDQwMDAwMDAwKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5ICgxL3NxcnQoMykgKiBwSWIpICovDQorICAgIHByb2R1Y3QyID0gKHEzMV90KSgoKHE2M190KShJYmV0YSkgKiAoMHg2RUQ5RUJBMSkpID4+IDMxKTsNCisNCisgICAgLyogcEliIGlzIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgdGhlIHByb2R1Y3RzICovDQorICAgICpwSWIgPSBfX1FTVUIocHJvZHVjdDIsIHByb2R1Y3QxKTsNCit9DQorDQorLyoqDQorICogQH0gZW5kIG9mIGludl9jbGFya2UgZ3JvdXANCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTcgdmVjdG9yIHRvIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX3E3X3RvX3ExNSgNCisgICAgcTdfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorDQorLyoqDQorICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIHBhcmsgVmVjdG9yIFBhcmsgVHJhbnNmb3JtDQorICoNCisgKiBGb3J3YXJkIFBhcmsgdHJhbnNmb3JtIGNvbnZlcnRzIHRoZSBpbnB1dCB0d28tY29vcmRpbmF0ZSB2ZWN0b3IgdG8gZmx1eCBhbmQgdG9ycXVlIGNvbXBvbmVudHMuDQorICogVGhlIFBhcmsgdHJhbnNmb3JtIGNhbiBiZSB1c2VkIHRvIHJlYWxpemUgdGhlIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSA8Y29kZT5JYWxwaGE8L2NvZGU+IGFuZCB0aGUgPGNvZGU+SWJldGE8L2NvZGU+IGN1cnJlbnRzDQorICogZnJvbSB0aGUgc3RhdGlvbmFyeSB0byB0aGUgbW92aW5nIHJlZmVyZW5jZSBmcmFtZSBhbmQgY29udHJvbCB0aGUgc3BhdGlhbCByZWxhdGlvbnNoaXAgYmV0d2Vlbg0KKyAqIHRoZSBzdGF0b3IgdmVjdG9yIGN1cnJlbnQgYW5kIHJvdG9yIGZsdXggdmVjdG9yLg0KKyAqIElmIHdlIGNvbnNpZGVyIHRoZSBkIGF4aXMgYWxpZ25lZCB3aXRoIHRoZSByb3RvciBmbHV4LCB0aGUgZGlhZ3JhbSBiZWxvdyBzaG93cyB0aGUNCisgKiBjdXJyZW50IHZlY3RvciBhbmQgdGhlIHJlbGF0aW9uc2hpcCBmcm9tIHRoZSB0d28gcmVmZXJlbmNlIGZyYW1lczoNCisgKiBcaW1hZ2UgaHRtbCBwYXJrLmdpZiAiU3RhdG9yIGN1cnJlbnQgc3BhY2UgdmVjdG9yIGFuZCBpdHMgY29tcG9uZW50IGluIChhLGIpIGFuZCBpbiB0aGUgZCxxIHJvdGF0aW5nIHJlZmVyZW5jZSBmcmFtZSINCisgKg0KKyAqIFRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIHNpbmdsZSBzYW1wbGUgb2YgZGF0YSBhbmQgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9jZXNzZWQgb3V0cHV0Lg0KKyAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLg0KKyAqIFxwYXIgQWxnb3JpdGhtDQorICogXGltYWdlIGh0bWwgcGFya0Zvcm11bGEuZ2lmDQorICogd2hlcmUgPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+SWJldGE8L2NvZGU+IGFyZSB0aGUgc3RhdG9yIHZlY3RvciBjb21wb25lbnRzLA0KKyAqIDxjb2RlPnBJZDwvY29kZT4gYW5kIDxjb2RlPnBJcTwvY29kZT4gYXJlIHJvdG9yIHZlY3RvciBjb21wb25lbnRzIGFuZCA8Y29kZT5jb3NWYWw8L2NvZGU+IGFuZCA8Y29kZT5zaW5WYWw8L2NvZGU+IGFyZSB0aGUNCisgKiBjb3NpbmUgYW5kIHNpbmUgdmFsdWVzIG9mIHRoZXRhIChyb3RvciBmbHV4IHBvc2l0aW9uKS4NCisgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yDQorICogQ2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gdXNpbmcgdGhlIFEzMSB2ZXJzaW9uIG9mIHRoZSBQYXJrIHRyYW5zZm9ybS4NCisgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgb3ZlcmZsb3cgYW5kIHNhdHVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGFjY3VtdWxhdG9yIHVzZWQgbXVzdCBiZSBjb25zaWRlcmVkLg0KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIHBhcmsNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBGbG9hdGluZy1wb2ludCBQYXJrIHRyYW5zZm9ybQ0KKyAqIEBwYXJhbVtpbl0gIElhbHBoYSAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGFscGhhDQorICogQHBhcmFtW2luXSAgSWJldGEgICBpbnB1dCB0d28tcGhhc2UgdmVjdG9yIGNvb3JkaW5hdGUgYmV0YQ0KKyAqIEBwYXJhbVtvdXRdIHBJZCAgICAgcG9pbnRzIHRvIG91dHB1dCAgIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkDQorICogQHBhcmFtW291dF0gcElxICAgICBwb2ludHMgdG8gb3V0cHV0ICAgcm90b3IgcmVmZXJlbmNlIGZyYW1lIHENCisgKiBAcGFyYW1baW5dICBzaW5WYWwgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisgKiBAcGFyYW1baW5dICBjb3NWYWwgIGNvc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQ0KKyAqDQorICogVGhlIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIGZvcndhcmQgUGFyayB0cmFuc2Zvcm0uDQorICoNCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fcGFya19mMzIoDQorICAgIGZsb2F0MzJfdCBJYWxwaGEsDQorICAgIGZsb2F0MzJfdCBJYmV0YSwNCisgICAgZmxvYXQzMl90ICpwSWQsDQorICAgIGZsb2F0MzJfdCAqcElxLA0KKyAgICBmbG9hdDMyX3Qgc2luVmFsLA0KKyAgICBmbG9hdDMyX3QgY29zVmFsKQ0KK3sNCisgICAgLyogQ2FsY3VsYXRlIHBJZCB1c2luZyB0aGUgZXF1YXRpb24sIHBJZCA9IElhbHBoYSAqIGNvc1ZhbCArIEliZXRhICogc2luVmFsICovDQorICAgICpwSWQgPSBJYWxwaGEgKiBjb3NWYWwgKyBJYmV0YSAqIHNpblZhbDsNCisNCisgICAgLyogQ2FsY3VsYXRlIHBJcSB1c2luZyB0aGUgZXF1YXRpb24sIHBJcSA9IC0gSWFscGhhICogc2luVmFsICsgSWJldGEgKiBjb3NWYWwgKi8NCisgICAgKnBJcSA9IC1JYWxwaGEgKiBzaW5WYWwgKyBJYmV0YSAqIGNvc1ZhbDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmICBQYXJrIHRyYW5zZm9ybSBmb3IgUTMxIHZlcnNpb24NCisgKiBAcGFyYW1baW5dICBJYWxwaGEgIGlucHV0IHR3by1waGFzZSB2ZWN0b3IgY29vcmRpbmF0ZSBhbHBoYQ0KKyAqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGJldGENCisgKiBAcGFyYW1bb3V0XSBwSWQgICAgIHBvaW50cyB0byBvdXRwdXQgcm90b3IgcmVmZXJlbmNlIGZyYW1lIGQNCisgKiBAcGFyYW1bb3V0XSBwSXEgICAgIHBvaW50cyB0byBvdXRwdXQgcm90b3IgcmVmZXJlbmNlIGZyYW1lIHENCisgKiBAcGFyYW1baW5dICBzaW5WYWwgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisgKiBAcGFyYW1baW5dICBjb3NWYWwgIGNvc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQ0KKyAqDQorICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPg0KKyAqIFxwYXINCisgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgMzItYml0IGFjY3VtdWxhdG9yLg0KKyAqIFRoZSBhY2N1bXVsYXRvciBtYWludGFpbnMgMS4zMSBmb3JtYXQgYnkgdHJ1bmNhdGluZyBsb3dlciAzMSBiaXRzIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gaW4gMi42MiBmb3JtYXQuDQorICogVGhlcmUgaXMgc2F0dXJhdGlvbiBvbiB0aGUgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uLCBoZW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93Lg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9wYXJrX3EzMSgNCisgICAgcTMxX3QgSWFscGhhLA0KKyAgICBxMzFfdCBJYmV0YSwNCisgICAgcTMxX3QgKnBJZCwNCisgICAgcTMxX3QgKnBJcSwNCisgICAgcTMxX3Qgc2luVmFsLA0KKyAgICBxMzFfdCBjb3NWYWwpDQorew0KKyAgICBxMzFfdCBwcm9kdWN0MSwgcHJvZHVjdDI7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8NCisgICAgcTMxX3QgcHJvZHVjdDMsIHByb2R1Y3Q0OyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovDQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElhbHBoYSAqIGNvc1ZhbCkgKi8NCisgICAgcHJvZHVjdDEgPSAocTMxX3QpKCgocTYzX3QpKElhbHBoYSkgKiAoY29zVmFsKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYmV0YSAqIHNpblZhbCkgKi8NCisgICAgcHJvZHVjdDIgPSAocTMxX3QpKCgocTYzX3QpKEliZXRhKSAqIChzaW5WYWwpKSA+PiAzMSk7DQorDQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElhbHBoYSAqIHNpblZhbCkgKi8NCisgICAgcHJvZHVjdDMgPSAocTMxX3QpKCgocTYzX3QpKElhbHBoYSkgKiAoc2luVmFsKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYmV0YSAqIGNvc1ZhbCkgKi8NCisgICAgcHJvZHVjdDQgPSAocTMxX3QpKCgocTYzX3QpKEliZXRhKSAqIChjb3NWYWwpKSA+PiAzMSk7DQorDQorICAgIC8qIENhbGN1bGF0ZSBwSWQgYnkgYWRkaW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDEgYW5kIDIgKi8NCisgICAgKnBJZCA9IF9fUUFERChwcm9kdWN0MSwgcHJvZHVjdDIpOw0KKw0KKyAgICAvKiBDYWxjdWxhdGUgcElxIGJ5IHN1YnRyYWN0aW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDMgZnJvbSA0ICovDQorICAgICpwSXEgPSBfX1FTVUIocHJvZHVjdDQsIHByb2R1Y3QzKTsNCit9DQorDQorLyoqDQorICogQH0gZW5kIG9mIHBhcmsgZ3JvdXANCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTcgdmVjdG9yIHRvIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX3E3X3RvX2Zsb2F0KA0KKyAgICBxN190ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyDQorICovDQorDQorLyoqDQorICogQGRlZmdyb3VwIGludl9wYXJrIFZlY3RvciBJbnZlcnNlIFBhcmsgdHJhbnNmb3JtDQorICogSW52ZXJzZSBQYXJrIHRyYW5zZm9ybSBjb252ZXJ0cyB0aGUgaW5wdXQgZmx1eCBhbmQgdG9ycXVlIGNvbXBvbmVudHMgdG8gdHdvLWNvb3JkaW5hdGUgdmVjdG9yLg0KKyAqDQorICogVGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uIGEgc2luZ2xlIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2Nlc3NlZCBvdXRwdXQuDQorICogVGhlIGxpYnJhcnkgcHJvdmlkZXMgc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBRMzEgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuDQorICogXHBhciBBbGdvcml0aG0NCisgKiBcaW1hZ2UgaHRtbCBwYXJrSW52Rm9ybXVsYS5naWYNCisgKiB3aGVyZSA8Y29kZT5wSWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+cEliZXRhPC9jb2RlPiBhcmUgdGhlIHN0YXRvciB2ZWN0b3IgY29tcG9uZW50cywNCisgKiA8Y29kZT5JZDwvY29kZT4gYW5kIDxjb2RlPklxPC9jb2RlPiBhcmUgcm90b3IgdmVjdG9yIGNvbXBvbmVudHMgYW5kIDxjb2RlPmNvc1ZhbDwvY29kZT4gYW5kIDxjb2RlPnNpblZhbDwvY29kZT4gYXJlIHRoZQ0KKyAqIGNvc2luZSBhbmQgc2luZSB2YWx1ZXMgb2YgdGhldGEgKHJvdG9yIGZsdXggcG9zaXRpb24pLg0KKyAqIFxwYXIgRml4ZWQtUG9pbnQgQmVoYXZpb3INCisgKiBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGUgUTMxIHZlcnNpb24gb2YgdGhlIFBhcmsgdHJhbnNmb3JtLg0KKyAqIEluIHBhcnRpY3VsYXIsIHRoZSBvdmVyZmxvdyBhbmQgc2F0dXJhdGlvbiBiZWhhdmlvciBvZiB0aGUgYWNjdW11bGF0b3IgdXNlZCBtdXN0IGJlIGNvbnNpZGVyZWQuDQorICogUmVmZXIgdG8gdGhlIGZ1bmN0aW9uIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYmVsb3cgZm9yIHVzYWdlIGd1aWRlbGluZXMuDQorICovDQorDQorLyoqDQorICogQGFkZHRvZ3JvdXAgaW52X3BhcmsNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyogQGJyaWVmICBGbG9hdGluZy1wb2ludCBJbnZlcnNlIFBhcmsgdHJhbnNmb3JtDQorKiBAcGFyYW1baW5dICBJZCAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkDQorKiBAcGFyYW1baW5dICBJcSAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxDQorKiBAcGFyYW1bb3V0XSBwSWFscGhhICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGFscGhhDQorKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGENCisqIEBwYXJhbVtpbl0gIHNpblZhbCAgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisqIEBwYXJhbVtpbl0gIGNvc1ZhbCAgIGNvc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQ0KKyovDQorc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2ludl9wYXJrX2YzMigNCisgICAgZmxvYXQzMl90IElkLA0KKyAgICBmbG9hdDMyX3QgSXEsDQorICAgIGZsb2F0MzJfdCAqcElhbHBoYSwNCisgICAgZmxvYXQzMl90ICpwSWJldGEsDQorICAgIGZsb2F0MzJfdCBzaW5WYWwsDQorICAgIGZsb2F0MzJfdCBjb3NWYWwpDQorew0KKyAgICAvKiBDYWxjdWxhdGUgcElhbHBoYSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYWxwaGEgPSBJZCAqIGNvc1ZhbCAtIElxICogc2luVmFsICovDQorICAgICpwSWFscGhhID0gSWQgKiBjb3NWYWwgLSBJcSAqIHNpblZhbDsNCisNCisgICAgLyogQ2FsY3VsYXRlIHBJYmV0YSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYmV0YSA9IElkICogc2luVmFsICsgSXEgKiBjb3NWYWwgKi8NCisgICAgKnBJYmV0YSA9IElkICogc2luVmFsICsgSXEgKiBjb3NWYWw7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgSW52ZXJzZSBQYXJrIHRyYW5zZm9ybSBmb3IgICBRMzEgdmVyc2lvbg0KKyAqIEBwYXJhbVtpbl0gIElkICAgICAgIGlucHV0IGNvb3JkaW5hdGUgb2Ygcm90b3IgcmVmZXJlbmNlIGZyYW1lIGQNCisgKiBAcGFyYW1baW5dICBJcSAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxDQorICogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQ0KKyAqIEBwYXJhbVtvdXRdIHBJYmV0YSAgIHBvaW50cyB0byBvdXRwdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYmV0YQ0KKyAqIEBwYXJhbVtpbl0gIHNpblZhbCAgIHNpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisgKiBAcGFyYW1baW5dICBjb3NWYWwgICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGENCisgKg0KKyAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4NCisgKiBccGFyDQorICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDMyLWJpdCBhY2N1bXVsYXRvci4NCisgKiBUaGUgYWNjdW11bGF0b3IgbWFpbnRhaW5zIDEuMzEgZm9ybWF0IGJ5IHRydW5jYXRpbmcgbG93ZXIgMzEgYml0cyBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIGluIDIuNjIgZm9ybWF0Lg0KKyAqIFRoZXJlIGlzIHNhdHVyYXRpb24gb24gdGhlIGFkZGl0aW9uLCBoZW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93Lg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfcGFya19xMzEoDQorICAgIHEzMV90IElkLA0KKyAgICBxMzFfdCBJcSwNCisgICAgcTMxX3QgKnBJYWxwaGEsDQorICAgIHEzMV90ICpwSWJldGEsDQorICAgIHEzMV90IHNpblZhbCwNCisgICAgcTMxX3QgY29zVmFsKQ0KK3sNCisgICAgcTMxX3QgcHJvZHVjdDEsIHByb2R1Y3QyOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovDQorICAgIHEzMV90IHByb2R1Y3QzLCBwcm9kdWN0NDsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJZCAqIGNvc1ZhbCkgKi8NCisgICAgcHJvZHVjdDEgPSAocTMxX3QpKCgocTYzX3QpKElkKSAqIChjb3NWYWwpKSA+PiAzMSk7DQorDQorICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElxICogc2luVmFsKSAqLw0KKyAgICBwcm9kdWN0MiA9IChxMzFfdCkoKChxNjNfdCkoSXEpICogKHNpblZhbCkpID4+IDMxKTsNCisNCisNCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWQgKiBzaW5WYWwpICovDQorICAgIHByb2R1Y3QzID0gKHEzMV90KSgoKHE2M190KShJZCkgKiAoc2luVmFsKSkgPj4gMzEpOw0KKw0KKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJcSAqIGNvc1ZhbCkgKi8NCisgICAgcHJvZHVjdDQgPSAocTMxX3QpKCgocTYzX3QpKElxKSAqIChjb3NWYWwpKSA+PiAzMSk7DQorDQorICAgIC8qIENhbGN1bGF0ZSBwSWFscGhhIGJ5IHVzaW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDEgYW5kIDIgKi8NCisgICAgKnBJYWxwaGEgPSBfX1FTVUIocHJvZHVjdDEsIHByb2R1Y3QyKTsNCisNCisgICAgLyogQ2FsY3VsYXRlIHBJYmV0YSBieSB1c2luZyB0aGUgdHdvIGludGVybWVkaWF0ZSBwcm9kdWN0cyAzIGFuZCA0ICovDQorICAgICpwSWJldGEgPSBfX1FBREQocHJvZHVjdDQsIHByb2R1Y3QzKTsNCit9DQorDQorLyoqDQorICogQH0gZW5kIG9mIEludmVyc2UgcGFyayBncm91cA0KKyAqLw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRMzEgdmVjdG9yIHRvIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX3EzMV90b19mbG9hdCgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIGZsb2F0MzJfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisvKioNCisgKiBAaW5ncm91cCBncm91cEludGVycG9sYXRpb24NCisgKi8NCisNCisvKioNCisgKiBAZGVmZ3JvdXAgTGluZWFySW50ZXJwb2xhdGUgTGluZWFyIEludGVycG9sYXRpb24NCisgKg0KKyAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGlzIGEgbWV0aG9kIG9mIGN1cnZlIGZpdHRpbmcgdXNpbmcgbGluZWFyIHBvbHlub21pYWxzLg0KKyAqIExpbmVhciBpbnRlcnBvbGF0aW9uIHdvcmtzIGJ5IGVmZmVjdGl2ZWx5IGRyYXdpbmcgYSBzdHJhaWdodCBsaW5lIGJldHdlZW4gdHdvIG5laWdoYm9yaW5nIHNhbXBsZXMgYW5kIHJldHVybmluZyB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgYWxvbmcgdGhhdCBsaW5lDQorICoNCisgKiBccGFyDQorICogXGltYWdlIGh0bWwgTGluZWFySW50ZXJwLmdpZiAiTGluZWFyIGludGVycG9sYXRpb24iDQorICoNCisgKiBccGFyDQorICogQSAgTGluZWFyIEludGVycG9sYXRlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW4gb3V0cHV0IHZhbHVlKHkpLCBmb3IgdGhlIGlucHV0KHgpDQorICogdXNpbmcgbGluZWFyIGludGVycG9sYXRpb24gb2YgdGhlIGlucHV0IHZhbHVlcyB4MCwgeDEoIG5lYXJlc3QgaW5wdXQgdmFsdWVzKSBhbmQgdGhlIG91dHB1dCB2YWx1ZXMgeTAgYW5kIHkxKG5lYXJlc3Qgb3V0cHV0IHZhbHVlcykNCisgKg0KKyAqIFxwYXIgQWxnb3JpdGhtOg0KKyAqIDxwcmU+DQorICogICAgICAgeSA9IHkwICsgKHggLSB4MCkgKiAoKHkxIC0geTApLyh4MS14MCkpDQorICogICAgICAgd2hlcmUgeDAsIHgxIGFyZSBuZWFyZXN0IHZhbHVlcyBvZiBpbnB1dCB4DQorICogICAgICAgICAgICAgeTAsIHkxIGFyZSBuZWFyZXN0IHZhbHVlcyB0byBvdXRwdXQgeQ0KKyAqIDwvcHJlPg0KKyAqDQorICogXHBhcg0KKyAqIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyBpbXBsZW1lbnRzIExpbmVhciBpbnRlcnBvbGF0aW9uIHByb2Nlc3MNCisgKiBmb3IgUTcsIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4gIFRoZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIHNpbmdsZQ0KKyAqIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzaW5nbGUgcHJvY2Vzc2VkIHZhbHVlLg0KKyAqIDxjb2RlPlM8L2NvZGU+IHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgTGluZWFyIEludGVycG9sYXRlIGZ1bmN0aW9uIGRhdGEgc3RydWN0dXJlLg0KKyAqIDxjb2RlPng8L2NvZGU+IGlzIHRoZSBpbnB1dCBzYW1wbGUgdmFsdWUuIFRoZSBmdW5jdGlvbnMgcmV0dXJucyB0aGUgb3V0cHV0IHZhbHVlLg0KKyAqDQorICogXHBhcg0KKyAqIGlmIHggaXMgb3V0c2lkZSBvZiB0aGUgdGFibGUgYm91bmRhcnksIExpbmVhciBpbnRlcnBvbGF0aW9uIHJldHVybnMgZmlyc3QgdmFsdWUgb2YgdGhlIHRhYmxlDQorICogaWYgeCBpcyBiZWxvdyBpbnB1dCByYW5nZSBhbmQgcmV0dXJucyBsYXN0IHZhbHVlIG9mIHRhYmxlIGlmIHggaXMgYWJvdmUgcmFuZ2UuDQorICovDQorDQorLyoqDQorICogQGFkZHRvZ3JvdXAgTGluZWFySW50ZXJwb2xhdGUNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbixvdXRdIFMgIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBMaW5lYXIgSW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICAgICB4ICBpbnB1dCBzYW1wbGUgdG8gcHJvY2Vzcw0KKyAqIEByZXR1cm4geSBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4NCisgKg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSBmbG9hdDMyX3QgYXJtX2xpbmVhcl9pbnRlcnBfZjMyKA0KKyAgICBhcm1fbGluZWFyX2ludGVycF9pbnN0YW5jZV9mMzIgKlMsDQorICAgIGZsb2F0MzJfdCB4KQ0KK3sNCisgICAgZmxvYXQzMl90IHk7DQorICAgIGZsb2F0MzJfdCB4MCwgeDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3QgaW5wdXQgdmFsdWVzICovDQorICAgIGZsb2F0MzJfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLw0KKyAgICBmbG9hdDMyX3QgeFNwYWNpbmcgPSBTLT54U3BhY2luZzsgICAgICAgICAgICAvKiBzcGFjaW5nIGJldHdlZW4gaW5wdXQgdmFsdWVzICovDQorICAgIGludDMyX3QgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHZhcmlhYmxlICovDQorICAgIGZsb2F0MzJfdCAqcFlEYXRhID0gUy0+cFlEYXRhOyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gb3V0cHV0IHRhYmxlICovDQorDQorICAgIC8qIENhbGN1bGF0aW9uIG9mIGluZGV4ICovDQorICAgIGkgPSAoaW50MzJfdCkoKHggLSBTLT54MSkgLyB4U3BhY2luZyk7DQorDQorICAgIGlmIChpIDwgMCkNCisgICAgew0KKyAgICAgICAgLyogSW5pYXRpbGl6ZSBvdXRwdXQgZm9yIGJlbG93IHNwZWNpZmllZCByYW5nZSBhcyBsZWFzdCBvdXRwdXQgdmFsdWUgb2YgdGFibGUgKi8NCisgICAgICAgIHkgPSBwWURhdGFbMF07DQorICAgIH0NCisgICAgZWxzZSBpZiAoKHVpbnQzMl90KWkgPj0gUy0+blZhbHVlcykNCisgICAgew0KKyAgICAgICAgLyogSW5pYXRpbGl6ZSBvdXRwdXQgZm9yIGFib3ZlIHNwZWNpZmllZCByYW5nZSBhcyBsYXN0IG91dHB1dCB2YWx1ZSBvZiB0YWJsZSAqLw0KKyAgICAgICAgeSA9IHBZRGF0YVtTLT5uVmFsdWVzIC0gMV07DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiBuZWFyZXN0IGlucHV0IHZhbHVlcyAqLw0KKyAgICAgICAgeDAgPSBTLT54MSArICBpICAgICAgKiB4U3BhY2luZzsNCisgICAgICAgIHgxID0gUy0+eDEgKyAoaSArIDEpICogeFNwYWNpbmc7DQorDQorICAgICAgICAvKiBSZWFkIG9mIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLw0KKyAgICAgICAgeTAgPSBwWURhdGFbaV07DQorICAgICAgICB5MSA9IHBZRGF0YVtpICsgMV07DQorDQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiBvdXRwdXQgKi8NCisgICAgICAgIHkgPSB5MCArICh4IC0geDApICogKCh5MSAtIHkwKSAvICh4MSAtIHgwKSk7DQorDQorICAgIH0NCisNCisgICAgLyogcmV0dXJucyBvdXRwdXQgdmFsdWUgKi8NCisgICAgcmV0dXJuICh5KTsNCit9DQorDQorDQorLyoqDQorKg0KKyogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTMxIExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLg0KKyogQHBhcmFtW2luXSBwWURhdGEgICBwb2ludGVyIHRvIFEzMSBMaW5lYXIgSW50ZXJwb2xhdGlvbiB0YWJsZQ0KKyogQHBhcmFtW2luXSB4ICAgICAgICBpbnB1dCBzYW1wbGUgdG8gcHJvY2Vzcw0KKyogQHBhcmFtW2luXSBuVmFsdWVzICBudW1iZXIgb2YgdGFibGUgdmFsdWVzDQorKiBAcmV0dXJuIHkgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuDQorKg0KKyogXHBhcg0KKyogSW5wdXQgc2FtcGxlIDxjb2RlPng8L2NvZGU+IGlzIGluIDEyLjIwIGZvcm1hdCB3aGljaCBjb250YWlucyAxMiBiaXRzIGZvciB0YWJsZSBpbmRleCBhbmQgMjAgYml0cyBmb3IgZnJhY3Rpb25hbCBwYXJ0Lg0KKyogVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCBtYXhpbXVtIG9mIHRhYmxlIHNpemUgMl4xMi4NCisqDQorKi8NCitzdGF0aWMgX19JTkxJTkUgcTMxX3QgYXJtX2xpbmVhcl9pbnRlcnBfcTMxKA0KKyAgICBxMzFfdCAqcFlEYXRhLA0KKyAgICBxMzFfdCB4LA0KKyAgICB1aW50MzJfdCBuVmFsdWVzKQ0KK3sNCisgICAgcTMxX3QgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovDQorICAgIHEzMV90IHkwLCB5MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLw0KKyAgICBxMzFfdCBmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmFjdGlvbmFsIHBhcnQgKi8NCisgICAgaW50MzJfdCBpbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggdG8gcmVhZCBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisNCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLw0KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLw0KKyAgICBpbmRleCA9ICgoeCAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7DQorDQorICAgIGlmIChpbmRleCA+PSAoaW50MzJfdCkoblZhbHVlcyAtIDEpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKHBZRGF0YVtuVmFsdWVzIC0gMV0pOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGluZGV4IDwgMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIChwWURhdGFbMF0pOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAgICAgLyogc2hpZnQgbGVmdCBieSAxMSB0byBrZWVwIGZyYWN0IGluIDEuMzEgZm9ybWF0ICovDQorICAgICAgICBmcmFjdCA9ICh4ICYgMHgwMDBGRkZGRikgPDwgMTE7DQorDQorICAgICAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggaW4gMS4zMShxMzEpIGZvcm1hdCAqLw0KKyAgICAgICAgeTAgPSBwWURhdGFbaW5kZXhdOw0KKyAgICAgICAgeTEgPSBwWURhdGFbaW5kZXggKyAxXTsNCisNCisgICAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHkwICogKDEtZnJhY3QpIGFuZCB5IGlzIGluIDIuMzAgZm9ybWF0ICovDQorICAgICAgICB5ID0gKChxMzFfdCkoKHE2M190KSB5MCAqICgweDdGRkZGRkZGIC0gZnJhY3QpID4+IDMyKSk7DQorDQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MCAqICgxLWZyYWN0KSArIHkxICpmcmFjdCBhbmQgeSBpcyBpbiAyLjMwIGZvcm1hdCAqLw0KKyAgICAgICAgeSArPSAoKHEzMV90KSgoKHE2M190KSB5MSAqIGZyYWN0KSA+PiAzMikpOw0KKw0KKyAgICAgICAgLyogQ29udmVydCB5IHRvIDEuMzEgZm9ybWF0ICovDQorICAgICAgICByZXR1cm4gKHkgPDwgMXUpOw0KKyAgICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAqDQorICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTE1IExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gcFlEYXRhICAgcG9pbnRlciB0byBRMTUgTGluZWFyIEludGVycG9sYXRpb24gdGFibGUNCisgKiBAcGFyYW1baW5dIHggICAgICAgIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzDQorICogQHBhcmFtW2luXSBuVmFsdWVzICBudW1iZXIgb2YgdGFibGUgdmFsdWVzDQorICogQHJldHVybiB5IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLg0KKyAqDQorICogXHBhcg0KKyAqIElucHV0IHNhbXBsZSA8Y29kZT54PC9jb2RlPiBpcyBpbiAxMi4yMCBmb3JtYXQgd2hpY2ggY29udGFpbnMgMTIgYml0cyBmb3IgdGFibGUgaW5kZXggYW5kIDIwIGJpdHMgZm9yIGZyYWN0aW9uYWwgcGFydC4NCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IG1heGltdW0gb2YgdGFibGUgc2l6ZSAyXjEyLg0KKyAqDQorICovDQorc3RhdGljIF9fSU5MSU5FIHExNV90IGFybV9saW5lYXJfaW50ZXJwX3ExNSgNCisgICAgcTE1X3QgKnBZRGF0YSwNCisgICAgcTMxX3QgeCwNCisgICAgdWludDMyX3QgblZhbHVlcykNCit7DQorICAgIHE2M190IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLw0KKyAgICBxMTVfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgcTMxX3QgZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJhY3Rpb25hbCBwYXJ0ICovDQorICAgIGludDMyX3QgaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHRvIHJlYWQgbmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgaW5kZXggPSAoKHggJiAoaW50MzJfdCkweEZGRjAwMDAwKSA+PiAyMCk7DQorDQorICAgIGlmIChpbmRleCA+PSAoaW50MzJfdCkoblZhbHVlcyAtIDEpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKHBZRGF0YVtuVmFsdWVzIC0gMV0pOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGluZGV4IDwgMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIChwWURhdGFbMF0pOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAgICAgLyogZnJhY3QgaXMgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgICAgICBmcmFjdCA9ICh4ICYgMHgwMDBGRkZGRik7DQorDQorICAgICAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8NCisgICAgICAgIHkwID0gcFlEYXRhW2luZGV4XTsNCisgICAgICAgIHkxID0gcFlEYXRhW2luZGV4ICsgMV07DQorDQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MCAqICgxLWZyYWN0KSBhbmQgeSBpcyBpbiAxMy4zNSBmb3JtYXQgKi8NCisgICAgICAgIHkgPSAoKHE2M190KSB5MCAqICgweEZGRkZGIC0gZnJhY3QpKTsNCisNCisgICAgICAgIC8qIENhbGN1bGF0aW9uIG9mICh5MCAqICgxLWZyYWN0KSArIHkxICogZnJhY3QpIGFuZCB5IGlzIGluIDEzLjM1IGZvcm1hdCAqLw0KKyAgICAgICAgeSArPSAoKHE2M190KSB5MSAqIChmcmFjdCkpOw0KKw0KKyAgICAgICAgLyogY29udmVydCB5IHRvIDEuMTUgZm9ybWF0ICovDQorICAgICAgICByZXR1cm4gKHExNV90KSh5ID4+IDIwKTsNCisgICAgfQ0KK30NCisNCisNCisvKioNCisgKg0KKyAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFE3IExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLg0KKyAqIEBwYXJhbVtpbl0gcFlEYXRhICAgcG9pbnRlciB0byBRNyBMaW5lYXIgSW50ZXJwb2xhdGlvbiB0YWJsZQ0KKyAqIEBwYXJhbVtpbl0geCAgICAgICAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1baW5dIG5WYWx1ZXMgIG51bWJlciBvZiB0YWJsZSB2YWx1ZXMNCisgKiBAcmV0dXJuIHkgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuDQorICoNCisgKiBccGFyDQorICogSW5wdXQgc2FtcGxlIDxjb2RlPng8L2NvZGU+IGlzIGluIDEyLjIwIGZvcm1hdCB3aGljaCBjb250YWlucyAxMiBiaXRzIGZvciB0YWJsZSBpbmRleCBhbmQgMjAgYml0cyBmb3IgZnJhY3Rpb25hbCBwYXJ0Lg0KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgbWF4aW11bSBvZiB0YWJsZSBzaXplIDJeMTIuDQorICovDQorc3RhdGljIF9fSU5MSU5FIHE3X3QgYXJtX2xpbmVhcl9pbnRlcnBfcTcoDQorICAgIHE3X3QgKnBZRGF0YSwNCisgICAgcTMxX3QgeCwNCisgICAgdWludDMyX3QgblZhbHVlcykNCit7DQorICAgIHEzMV90IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLw0KKyAgICBxN190IHkwLCB5MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgcTMxX3QgZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJhY3Rpb25hbCBwYXJ0ICovDQorICAgIHVpbnQzMl90IGluZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHRvIHJlYWQgbmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgaWYgKHggPCAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKHBZRGF0YVswXSk7DQorICAgIH0NCisNCisgICAgaW5kZXggPSAoeCA+PiAyMCkgJiAweGZmZjsNCisNCisgICAgaWYgKGluZGV4ID49IChuVmFsdWVzIC0gMSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAocFlEYXRhW25WYWx1ZXMgLSAxXSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovDQorICAgICAgICAvKiBmcmFjdCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgICAgIGZyYWN0ID0gKHggJiAweDAwMEZGRkZGKTsNCisNCisgICAgICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCBhbmQgYXJlIGluIDEuNyhxNykgZm9ybWF0ICovDQorICAgICAgICB5MCA9IHBZRGF0YVtpbmRleF07DQorICAgICAgICB5MSA9IHBZRGF0YVtpbmRleCArIDFdOw0KKw0KKyAgICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTAgKiAoMS1mcmFjdCApIGFuZCB5IGlzIGluIDEzLjI3KHEyNykgZm9ybWF0ICovDQorICAgICAgICB5ID0gKCh5MCAqICgweEZGRkZGIC0gZnJhY3QpKSk7DQorDQorICAgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MSAqIGZyYWN0ICsgeTAgKiAoMS1mcmFjdCkgYW5kIHkgaXMgaW4gMTMuMjcocTI3KSBmb3JtYXQgKi8NCisgICAgICAgIHkgKz0gKHkxICogZnJhY3QpOw0KKw0KKyAgICAgICAgLyogY29udmVydCB5IHRvIDEuNyhxNykgZm9ybWF0ICovDQorICAgICAgICByZXR1cm4gKHE3X3QpKHkgPj4gMjApOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIEB9IGVuZCBvZiBMaW5lYXJJbnRlcnBvbGF0ZSBncm91cA0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIHNpbmUgZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IGRhdGEuDQorICogQHBhcmFtW2luXSB4ICBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLg0KKyAqIEByZXR1cm4gIHNpbih4KS4NCisgKi8NCitmbG9hdDMyX3QgYXJtX3Npbl9mMzIoDQorICAgIGZsb2F0MzJfdCB4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBzaW5lIGZ1bmN0aW9uIGZvciBRMzEgZGF0YS4NCisgKiBAcGFyYW1baW5dIHggIFNjYWxlZCBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLg0KKyAqIEByZXR1cm4gIHNpbih4KS4NCisgKi8NCitxMzFfdCBhcm1fc2luX3EzMSgNCisgICAgcTMxX3QgeCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgc2luZSBmdW5jdGlvbiBmb3IgUTE1IGRhdGEuDQorICogQHBhcmFtW2luXSB4ICBTY2FsZWQgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4NCisgKiBAcmV0dXJuICBzaW4oeCkuDQorICovDQorcTE1X3QgYXJtX3Npbl9xMTUoDQorICAgIHExNV90IHgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIGNvc2luZSBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgZGF0YS4NCisgKiBAcGFyYW1baW5dIHggIGlucHV0IHZhbHVlIGluIHJhZGlhbnMuDQorICogQHJldHVybiAgY29zKHgpLg0KKyAqLw0KK2Zsb2F0MzJfdCBhcm1fY29zX2YzMigNCisgICAgZmxvYXQzMl90IHgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgY29zaW5lIGZ1bmN0aW9uIGZvciBRMzEgZGF0YS4NCisgKiBAcGFyYW1baW5dIHggIFNjYWxlZCBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLg0KKyAqIEByZXR1cm4gIGNvcyh4KS4NCisgKi8NCitxMzFfdCBhcm1fY29zX3EzMSgNCisgICAgcTMxX3QgeCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgY29zaW5lIGZ1bmN0aW9uIGZvciBRMTUgZGF0YS4NCisgKiBAcGFyYW1baW5dIHggIFNjYWxlZCBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLg0KKyAqIEByZXR1cm4gIGNvcyh4KS4NCisgKi8NCitxMTVfdCBhcm1fY29zX3ExNSgNCisgICAgcTE1X3QgeCk7DQorDQorDQorLyoqDQorICogQGluZ3JvdXAgZ3JvdXBGYXN0TWF0aA0KKyAqLw0KKw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBTUVJUIFNxdWFyZSBSb290DQorICoNCisgKiBDb21wdXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIuDQorICogVGhlcmUgYXJlIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTE1LCBRMzEsIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLg0KKyAqIFRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBpcyBjb21wdXRlZCB1c2luZyB0aGUgTmV3dG9uLVJhcGhzb24gYWxnb3JpdGhtLg0KKyAqIFRoaXMgaXMgYW4gaXRlcmF0aXZlIGFsZ29yaXRobSBvZiB0aGUgZm9ybToNCisgKiA8cHJlPg0KKyAqICAgICAgeDEgPSB4MCAtIGYoeDApL2YnKHgwKQ0KKyAqIDwvcHJlPg0KKyAqIHdoZXJlIDxjb2RlPngxPC9jb2RlPiBpcyB0aGUgY3VycmVudCBlc3RpbWF0ZSwNCisgKiA8Y29kZT54MDwvY29kZT4gaXMgdGhlIHByZXZpb3VzIGVzdGltYXRlLCBhbmQNCisgKiA8Y29kZT5mJyh4MCk8L2NvZGU+IGlzIHRoZSBkZXJpdmF0aXZlIG9mIDxjb2RlPmYoKTwvY29kZT4gZXZhbHVhdGVkIGF0IDxjb2RlPngwPC9jb2RlPi4NCisgKiBGb3IgdGhlIHNxdWFyZSByb290IGZ1bmN0aW9uLCB0aGUgYWxnb3JpdGhtIHJlZHVjZXMgdG86DQorICogPHByZT4NCisgKiAgICAgeDAgPSBpbi8yICAgICAgICAgICAgICAgICAgICAgICAgIFtpbml0aWFsIGd1ZXNzXQ0KKyAqICAgICB4MSA9IDEvMiAqICggeDAgKyBpbiAvIHgwKSAgICAgICAgW2VhY2ggaXRlcmF0aW9uXQ0KKyAqIDwvcHJlPg0KKyAqLw0KKw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIFNRUlQNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgc3F1YXJlIHJvb3QgZnVuY3Rpb24uDQorICogQHBhcmFtW2luXSAgaW4gICAgaW5wdXQgdmFsdWUuDQorICogQHBhcmFtW291dF0gcE91dCAgc3F1YXJlIHJvb3Qgb2YgaW5wdXQgdmFsdWUuDQorICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGlucHV0IHZhbHVlIGlzIHBvc2l0aXZlIHZhbHVlIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmDQorICogPGNvZGU+aW48L2NvZGU+IGlzIG5lZ2F0aXZlIHZhbHVlIGFuZCByZXR1cm5zIHplcm8gb3V0cHV0IGZvciBuZWdhdGl2ZSB2YWx1ZXMuDQorICovDQorc3RhdGljIF9fSU5MSU5FIGFybV9zdGF0dXMgYXJtX3NxcnRfZjMyKA0KKyAgICBmbG9hdDMyX3QgaW4sDQorICAgIGZsb2F0MzJfdCAqcE91dCkNCit7DQorICAgIGlmIChpbiA+PSAwLjBmKQ0KKyAgICB7DQorDQorI2lmICAgKF9fRlBVX1VTRUQgPT0gMSkgJiYgZGVmaW5lZCAoIF9fQ0NfQVJNICAgKQ0KKyAgICAgICAgKnBPdXQgPSBfX3NxcnRmKGluKTsNCisjZWxpZiAoX19GUFVfVVNFRCA9PSAxKSAmJiAoZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkpDQorICAgICAgICAqcE91dCA9IF9fYnVpbHRpbl9zcXJ0Zihpbik7DQorI2VsaWYgKF9fRlBVX1VTRUQgPT0gMSkgJiYgZGVmaW5lZChfX0dOVUNfXykNCisgICAgICAgICpwT3V0ID0gX19idWlsdGluX3NxcnRmKGluKTsNCisjZWxpZiAoX19GUFVfVVNFRCA9PSAxKSAmJiBkZWZpbmVkICggX19JQ0NBUk1fXyApICYmIChfX1ZFUl9fID49IDYwNDAwMDApDQorICAgICAgICBfX0FTTSgiVlNRUlQuRjMyICUwLCUxIiA6ICI9dCIoKnBPdXQpIDogInQiKGluKSk7DQorI2Vsc2UNCisgICAgICAgICpwT3V0ID0gc3FydGYoaW4pOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgcmV0dXJuIChBUk1fTUFUSF9TVUNDRVNTKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgICpwT3V0ID0gMC4wZjsNCisgICAgICAgIHJldHVybiAoQVJNX01BVEhfQVJHVU1FTlRfRVJST1IpOw0KKyAgICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRMzEgc3F1YXJlIHJvb3QgZnVuY3Rpb24uDQorICogQHBhcmFtW2luXSAgaW4gICAgaW5wdXQgdmFsdWUuICBUaGUgcmFuZ2Ugb2YgdGhlIGlucHV0IHZhbHVlIGlzIFswICsxKSBvciAweDAwMDAwMDAwIHRvIDB4N0ZGRkZGRkYuDQorICogQHBhcmFtW291dF0gcE91dCAgc3F1YXJlIHJvb3Qgb2YgaW5wdXQgdmFsdWUuDQorICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGlucHV0IHZhbHVlIGlzIHBvc2l0aXZlIHZhbHVlIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmDQorICogPGNvZGU+aW48L2NvZGU+IGlzIG5lZ2F0aXZlIHZhbHVlIGFuZCByZXR1cm5zIHplcm8gb3V0cHV0IGZvciBuZWdhdGl2ZSB2YWx1ZXMuDQorICovDQorYXJtX3N0YXR1cyBhcm1fc3FydF9xMzEoDQorICAgIHEzMV90IGluLA0KKyAgICBxMzFfdCAqcE91dCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgc3F1YXJlIHJvb3QgZnVuY3Rpb24uDQorICogQHBhcmFtW2luXSAgaW4gICAgaW5wdXQgdmFsdWUuICBUaGUgcmFuZ2Ugb2YgdGhlIGlucHV0IHZhbHVlIGlzIFswICsxKSBvciAweDAwMDAgdG8gMHg3RkZGLg0KKyAqIEBwYXJhbVtvdXRdIHBPdXQgIHNxdWFyZSByb290IG9mIGlucHV0IHZhbHVlLg0KKyAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbnB1dCB2YWx1ZSBpcyBwb3NpdGl2ZSB2YWx1ZSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZg0KKyAqIDxjb2RlPmluPC9jb2RlPiBpcyBuZWdhdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyB6ZXJvIG91dHB1dCBmb3IgbmVnYXRpdmUgdmFsdWVzLg0KKyAqLw0KK2FybV9zdGF0dXMgYXJtX3NxcnRfcTE1KA0KKyAgICBxMTVfdCBpbiwNCisgICAgcTE1X3QgKnBPdXQpOw0KKw0KKy8qKg0KKyAqIEB9IGVuZCBvZiBTUVJUIGdyb3VwDQorICovDQorDQorDQorLyoqDQorICogQGJyaWVmIGZsb2F0aW5nLXBvaW50IENpcmN1bGFyIHdyaXRlIGZ1bmN0aW9uLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhcldyaXRlX2YzMigNCisgICAgaW50MzJfdCAqY2lyY0J1ZmZlciwNCisgICAgaW50MzJfdCBMLA0KKyAgICB1aW50MTZfdCAqd3JpdGVPZmZzZXQsDQorICAgIGludDMyX3QgYnVmZmVySW5jLA0KKyAgICBjb25zdCBpbnQzMl90ICpzcmMsDQorICAgIGludDMyX3Qgc3JjSW5jLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpDQorew0KKyAgICB1aW50MzJfdCBpID0gMHU7DQorICAgIGludDMyX3Qgd09mZnNldDsNCisNCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cw0KKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSBjb3BpZWQgKi8NCisgICAgd09mZnNldCA9ICp3cml0ZU9mZnNldDsNCisNCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8NCisgICAgaSA9IGJsb2NrU2l6ZTsNCisNCisgICAgd2hpbGUgKGkgPiAwdSkNCisgICAgew0KKyAgICAgICAgLyogY29weSB0aGUgaW5wdXQgc2FtcGxlIHRvIHRoZSBjaXJjdWxhciBidWZmZXIgKi8NCisgICAgICAgIGNpcmNCdWZmZXJbd09mZnNldF0gPSAqc3JjOw0KKw0KKyAgICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovDQorICAgICAgICBzcmMgKz0gc3JjSW5jOw0KKw0KKyAgICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovDQorICAgICAgICB3T2Zmc2V0ICs9IGJ1ZmZlckluYzsNCisNCisgICAgICAgIGlmICh3T2Zmc2V0ID49IEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgd09mZnNldCAtPSBMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8NCisgICAgICAgIGktLTsNCisgICAgfQ0KKw0KKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8NCisgICAgKndyaXRlT2Zmc2V0ID0gKHVpbnQxNl90KXdPZmZzZXQ7DQorfQ0KKw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBmbG9hdGluZy1wb2ludCBDaXJjdWxhciBSZWFkIGZ1bmN0aW9uLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhclJlYWRfZjMyKA0KKyAgICBpbnQzMl90ICpjaXJjQnVmZmVyLA0KKyAgICBpbnQzMl90IEwsDQorICAgIGludDMyX3QgKnJlYWRPZmZzZXQsDQorICAgIGludDMyX3QgYnVmZmVySW5jLA0KKyAgICBpbnQzMl90ICpkc3QsDQorICAgIGludDMyX3QgKmRzdF9iYXNlLA0KKyAgICBpbnQzMl90IGRzdF9sZW5ndGgsDQorICAgIGludDMyX3QgZHN0SW5jLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpDQorew0KKyAgICB1aW50MzJfdCBpID0gMHU7DQorICAgIGludDMyX3Qgck9mZnNldCwgZHN0X2VuZDsNCisNCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cw0KKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBpbnB1dCBzYW1wbGVzIHRvIGJlIHJlYWQgKi8NCisgICAgck9mZnNldCA9ICpyZWFkT2Zmc2V0Ow0KKyAgICBkc3RfZW5kID0gKGludDMyX3QpKGRzdF9iYXNlICsgZHN0X2xlbmd0aCk7DQorDQorICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovDQorICAgIGkgPSBibG9ja1NpemU7DQorDQorICAgIHdoaWxlIChpID4gMHUpDQorICAgIHsNCisgICAgICAgIC8qIGNvcHkgdGhlIHNhbXBsZSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLw0KKyAgICAgICAgKmRzdCA9IGNpcmNCdWZmZXJbck9mZnNldF07DQorDQorICAgICAgICAvKiBVcGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgKi8NCisgICAgICAgIGRzdCArPSBkc3RJbmM7DQorDQorICAgICAgICBpZiAoZHN0ID09IChpbnQzMl90ICopIGRzdF9lbmQpDQorICAgICAgICB7DQorICAgICAgICAgICAgZHN0ID0gZHN0X2Jhc2U7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSByT2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgICovDQorICAgICAgICByT2Zmc2V0ICs9IGJ1ZmZlckluYzsNCisNCisgICAgICAgIGlmIChyT2Zmc2V0ID49IEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgck9mZnNldCAtPSBMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8NCisgICAgICAgIGktLTsNCisgICAgfQ0KKw0KKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8NCisgICAgKnJlYWRPZmZzZXQgPSByT2Zmc2V0Ow0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgUTE1IENpcmN1bGFyIHdyaXRlIGZ1bmN0aW9uLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhcldyaXRlX3ExNSgNCisgICAgcTE1X3QgKmNpcmNCdWZmZXIsDQorICAgIGludDMyX3QgTCwNCisgICAgdWludDE2X3QgKndyaXRlT2Zmc2V0LA0KKyAgICBpbnQzMl90IGJ1ZmZlckluYywNCisgICAgY29uc3QgcTE1X3QgKnNyYywNCisgICAgaW50MzJfdCBzcmNJbmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSkNCit7DQorICAgIHVpbnQzMl90IGkgPSAwdTsNCisgICAgaW50MzJfdCB3T2Zmc2V0Ow0KKw0KKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzDQorICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIHdoZXJlIHRoZSBpbnB1dCBzYW1wbGVzIHRvIGJlIGNvcGllZCAqLw0KKyAgICB3T2Zmc2V0ID0gKndyaXRlT2Zmc2V0Ow0KKw0KKyAgICAvKiBMb29wIG92ZXIgdGhlIGJsb2NrU2l6ZSAqLw0KKyAgICBpID0gYmxvY2tTaXplOw0KKw0KKyAgICB3aGlsZSAoaSA+IDB1KQ0KKyAgICB7DQorICAgICAgICAvKiBjb3B5IHRoZSBpbnB1dCBzYW1wbGUgdG8gdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLw0KKyAgICAgICAgY2lyY0J1ZmZlclt3T2Zmc2V0XSA9ICpzcmM7DQorDQorICAgICAgICAvKiBVcGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgKi8NCisgICAgICAgIHNyYyArPSBzcmNJbmM7DQorDQorICAgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSB3T2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgKi8NCisgICAgICAgIHdPZmZzZXQgKz0gYnVmZmVySW5jOw0KKw0KKyAgICAgICAgaWYgKHdPZmZzZXQgPj0gTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB3T2Zmc2V0IC09IEw7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLw0KKyAgICAgICAgaS0tOw0KKyAgICB9DQorDQorICAgIC8qIFVwZGF0ZSB0aGUgaW5kZXggcG9pbnRlciAqLw0KKyAgICAqd3JpdGVPZmZzZXQgPSAodWludDE2X3Qpd09mZnNldDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIFExNSBDaXJjdWxhciBSZWFkIGZ1bmN0aW9uLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhclJlYWRfcTE1KA0KKyAgICBxMTVfdCAqY2lyY0J1ZmZlciwNCisgICAgaW50MzJfdCBMLA0KKyAgICBpbnQzMl90ICpyZWFkT2Zmc2V0LA0KKyAgICBpbnQzMl90IGJ1ZmZlckluYywNCisgICAgcTE1X3QgKmRzdCwNCisgICAgcTE1X3QgKmRzdF9iYXNlLA0KKyAgICBpbnQzMl90IGRzdF9sZW5ndGgsDQorICAgIGludDMyX3QgZHN0SW5jLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpDQorew0KKyAgICB1aW50MzJfdCBpID0gMDsNCisgICAgaW50MzJfdCByT2Zmc2V0LCBkc3RfZW5kOw0KKw0KKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzDQorICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIGZyb20gd2hlcmUgdGhlIGlucHV0IHNhbXBsZXMgdG8gYmUgcmVhZCAqLw0KKyAgICByT2Zmc2V0ID0gKnJlYWRPZmZzZXQ7DQorDQorICAgIGRzdF9lbmQgPSAoaW50MzJfdCkoZHN0X2Jhc2UgKyBkc3RfbGVuZ3RoKTsNCisNCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8NCisgICAgaSA9IGJsb2NrU2l6ZTsNCisNCisgICAgd2hpbGUgKGkgPiAwdSkNCisgICAgew0KKyAgICAgICAgLyogY29weSB0aGUgc2FtcGxlIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyICovDQorICAgICAgICAqZHN0ID0gY2lyY0J1ZmZlcltyT2Zmc2V0XTsNCisNCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLw0KKyAgICAgICAgZHN0ICs9IGRzdEluYzsNCisNCisgICAgICAgIGlmIChkc3QgPT0gKHExNV90ICopIGRzdF9lbmQpDQorICAgICAgICB7DQorICAgICAgICAgICAgZHN0ID0gZHN0X2Jhc2U7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSB3T2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgKi8NCisgICAgICAgIHJPZmZzZXQgKz0gYnVmZmVySW5jOw0KKw0KKyAgICAgICAgaWYgKHJPZmZzZXQgPj0gTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByT2Zmc2V0IC09IEw7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBEZWNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLw0KKyAgICAgICAgaS0tOw0KKyAgICB9DQorDQorICAgIC8qIFVwZGF0ZSB0aGUgaW5kZXggcG9pbnRlciAqLw0KKyAgICAqcmVhZE9mZnNldCA9IHJPZmZzZXQ7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRNyBDaXJjdWxhciB3cml0ZSBmdW5jdGlvbi4NCisgKi8NCitzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJXcml0ZV9xNygNCisgICAgcTdfdCAqY2lyY0J1ZmZlciwNCisgICAgaW50MzJfdCBMLA0KKyAgICB1aW50MTZfdCAqd3JpdGVPZmZzZXQsDQorICAgIGludDMyX3QgYnVmZmVySW5jLA0KKyAgICBjb25zdCBxN190ICpzcmMsDQorICAgIGludDMyX3Qgc3JjSW5jLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpDQorew0KKyAgICB1aW50MzJfdCBpID0gMHU7DQorICAgIGludDMyX3Qgd09mZnNldDsNCisNCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cw0KKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSBjb3BpZWQgKi8NCisgICAgd09mZnNldCA9ICp3cml0ZU9mZnNldDsNCisNCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8NCisgICAgaSA9IGJsb2NrU2l6ZTsNCisNCisgICAgd2hpbGUgKGkgPiAwdSkNCisgICAgew0KKyAgICAgICAgLyogY29weSB0aGUgaW5wdXQgc2FtcGxlIHRvIHRoZSBjaXJjdWxhciBidWZmZXIgKi8NCisgICAgICAgIGNpcmNCdWZmZXJbd09mZnNldF0gPSAqc3JjOw0KKw0KKyAgICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovDQorICAgICAgICBzcmMgKz0gc3JjSW5jOw0KKw0KKyAgICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovDQorICAgICAgICB3T2Zmc2V0ICs9IGJ1ZmZlckluYzsNCisNCisgICAgICAgIGlmICh3T2Zmc2V0ID49IEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgd09mZnNldCAtPSBMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8NCisgICAgICAgIGktLTsNCisgICAgfQ0KKw0KKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8NCisgICAgKndyaXRlT2Zmc2V0ID0gKHVpbnQxNl90KXdPZmZzZXQ7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBRNyBDaXJjdWxhciBSZWFkIGZ1bmN0aW9uLg0KKyAqLw0KK3N0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhclJlYWRfcTcoDQorICAgIHE3X3QgKmNpcmNCdWZmZXIsDQorICAgIGludDMyX3QgTCwNCisgICAgaW50MzJfdCAqcmVhZE9mZnNldCwNCisgICAgaW50MzJfdCBidWZmZXJJbmMsDQorICAgIHE3X3QgKmRzdCwNCisgICAgcTdfdCAqZHN0X2Jhc2UsDQorICAgIGludDMyX3QgZHN0X2xlbmd0aCwNCisgICAgaW50MzJfdCBkc3RJbmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSkNCit7DQorICAgIHVpbnQzMl90IGkgPSAwOw0KKyAgICBpbnQzMl90IHJPZmZzZXQsIGRzdF9lbmQ7DQorDQorICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMNCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gZnJvbSB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSByZWFkICovDQorICAgIHJPZmZzZXQgPSAqcmVhZE9mZnNldDsNCisNCisgICAgZHN0X2VuZCA9IChpbnQzMl90KShkc3RfYmFzZSArIGRzdF9sZW5ndGgpOw0KKw0KKyAgICAvKiBMb29wIG92ZXIgdGhlIGJsb2NrU2l6ZSAqLw0KKyAgICBpID0gYmxvY2tTaXplOw0KKw0KKyAgICB3aGlsZSAoaSA+IDB1KQ0KKyAgICB7DQorICAgICAgICAvKiBjb3B5IHRoZSBzYW1wbGUgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKi8NCisgICAgICAgICpkc3QgPSBjaXJjQnVmZmVyW3JPZmZzZXRdOw0KKw0KKyAgICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovDQorICAgICAgICBkc3QgKz0gZHN0SW5jOw0KKw0KKyAgICAgICAgaWYgKGRzdCA9PSAocTdfdCAqKSBkc3RfZW5kKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRzdCA9IGRzdF9iYXNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgck9mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovDQorICAgICAgICByT2Zmc2V0ICs9IGJ1ZmZlckluYzsNCisNCisgICAgICAgIGlmIChyT2Zmc2V0ID49IEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgck9mZnNldCAtPSBMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8NCisgICAgICAgIGktLTsNCisgICAgfQ0KKw0KKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8NCisgICAgKnJlYWRPZmZzZXQgPSByT2Zmc2V0Ow0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgIFN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9wb3dlcl9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHE2M190ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgZWxlbWVudHMgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3Bvd2VyX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fcG93ZXJfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxNjNfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9wb3dlcl9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMzFfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBNZWFuIHZhbHVlIG9mIGEgUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV9tZWFuX3E3KA0KKyAgICBxN190ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHE3X3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTWVhbiB2YWx1ZSBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX21lYW5fcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMTVfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBNZWFuIHZhbHVlIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fbWVhbl9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHEzMV90ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE1lYW4gdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX21lYW5fZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgZmxvYXQzMl90ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFZhcmlhbmNlIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fdmFyX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBWYXJpYW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV92YXJfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMzFfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBWYXJpYW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4NCisgKi8NCit2b2lkIGFybV92YXJfcTE1KA0KKyAgICBxMTVfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMTVfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBSb290IE1lYW4gU3F1YXJlIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fcm1zX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBSb290IE1lYW4gU3F1YXJlIG9mIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3Jtc19xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHEzMV90ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFJvb3QgTWVhbiBTcXVhcmUgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fcm1zX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTE1X3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fc3RkX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcFJlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBTdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuDQorICovDQordm9pZCBhcm1fc3RkX3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTMxX3QgKnBSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLg0KKyAqLw0KK3ZvaWQgYXJtX3N0ZF9xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHExNV90ICpwUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXggbWFnbml0dWRlDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbWFnX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIGNvbXBsZXggbWFnbml0dWRlDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbWFnX3EzMSgNCisgICAgcTMxX3QgKnBTcmMsDQorICAgIHEzMV90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFExNSBjb21wbGV4IG1hZ25pdHVkZQ0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2NtcGx4X21hZ19xMTUoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgY29tcGxleCBkb3QgcHJvZHVjdA0KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHJlYWxSZXN1bHQgIHJlYWwgcGFydCBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGhlcmUNCisgKiBAcGFyYW1bb3V0XSBpbWFnUmVzdWx0ICBpbWFnaW5hcnkgcGFydCBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9jbXBseF9kb3RfcHJvZF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzLA0KKyAgICBxMzFfdCAqcmVhbFJlc3VsdCwNCisgICAgcTMxX3QgKmltYWdSZXN1bHQpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgUTMxIGNvbXBsZXggZG90IHByb2R1Y3QNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSByZWFsUmVzdWx0ICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICogQHBhcmFtW291dF0gaW1hZ1Jlc3VsdCAgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fY21wbHhfZG90X3Byb2RfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0EsDQorICAgIHEzMV90ICpwU3JjQiwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcywNCisgICAgcTYzX3QgKnJlYWxSZXN1bHQsDQorICAgIHE2M190ICppbWFnUmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXggZG90IHByb2R1Y3QNCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSByZWFsUmVzdWx0ICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICogQHBhcmFtW291dF0gaW1hZ1Jlc3VsdCAgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fY21wbHhfZG90X3Byb2RfZjMyKA0KKyAgICBmbG9hdDMyX3QgKnBTcmNBLA0KKyAgICBmbG9hdDMyX3QgKnBTcmNCLA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzLA0KKyAgICBmbG9hdDMyX3QgKnJlYWxSZXN1bHQsDQorICAgIGZsb2F0MzJfdCAqaW1hZ1Jlc3VsdCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgY29tcGxleC1ieS1yZWFsIG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0NtcGx4ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNSZWFsICAgIHBvaW50cyB0byB0aGUgcmVhbCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwQ21wbHhEc3QgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbXVsdF9yZWFsX3ExNSgNCisgICAgcTE1X3QgKnBTcmNDbXBseCwNCisgICAgcTE1X3QgKnBTcmNSZWFsLA0KKyAgICBxMTVfdCAqcENtcGx4RHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIFEzMSBjb21wbGV4LWJ5LXJlYWwgbXVsdGlwbGljYXRpb24NCisgKiBAcGFyYW1baW5dICBwU3JjQ21wbHggICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgcFNyY1JlYWwgICAgcG9pbnRzIHRvIHRoZSByZWFsIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBDbXBseERzdCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9jbXBseF9tdWx0X3JlYWxfcTMxKA0KKyAgICBxMzFfdCAqcFNyY0NtcGx4LA0KKyAgICBxMzFfdCAqcFNyY1JlYWwsDQorICAgIHEzMV90ICpwQ21wbHhEc3QsDQorICAgIHVpbnQzMl90IG51bVNhbXBsZXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleC1ieS1yZWFsIG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0NtcGx4ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNSZWFsICAgIHBvaW50cyB0byB0aGUgcmVhbCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwQ21wbHhEc3QgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbXVsdF9yZWFsX2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjQ21wbHgsDQorICAgIGZsb2F0MzJfdCAqcFNyY1JlYWwsDQorICAgIGZsb2F0MzJfdCAqcENtcGx4RHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE1pbmltdW0gdmFsdWUgb2YgYSBRNyB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCAgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBpbmRleCAgICAgIGlzIHRoZSBhcnJheSBpbmRleCBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgaW5wdXQgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX21pbl9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxN190ICpyZXN1bHQsDQorICAgIHVpbnQzMl90ICppbmRleCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBNaW5pbXVtIHZhbHVlIG9mIGEgUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIHBJbmRleCAgICAgaXMgdGhlIGFycmF5IGluZGV4IG9mIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBpbnB1dCBidWZmZXIuDQorICovDQordm9pZCBhcm1fbWluX3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTE1X3QgKnBSZXN1bHQsDQorICAgIHVpbnQzMl90ICpwSW5kZXgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgTWluaW11bSB2YWx1ZSBvZiBhIFEzMSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwSW5kZXggICAgIGlzIHRoZSBhcnJheSBpbmRleCBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgaW5wdXQgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX21pbl9xMzEoDQorICAgIHEzMV90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIHEzMV90ICpwUmVzdWx0LA0KKyAgICB1aW50MzJfdCAqcEluZGV4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIE1pbmltdW0gdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwSW5kZXggICAgIGlzIHRoZSBhcnJheSBpbmRleCBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgaW5wdXQgYnVmZmVyLg0KKyAqLw0KK3ZvaWQgYXJtX21pbl9mMzIoDQorICAgIGZsb2F0MzJfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBmbG9hdDMyX3QgKnBSZXN1bHQsDQorICAgIHVpbnQzMl90ICpwSW5kZXgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBNYXhpbXVtIHZhbHVlIG9mIGEgUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUNCisgKiBAcGFyYW1bb3V0XSBwSW5kZXggICAgIGluZGV4IG9mIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQ0KKyAqLw0KK3ZvaWQgYXJtX21heF9xNygNCisgICAgcTdfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxN190ICpwUmVzdWx0LA0KKyAgICB1aW50MzJfdCAqcEluZGV4KTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgTWF4aW11bSB2YWx1ZSBvZiBhIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaW5kZXggb2YgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fbWF4X3ExNSgNCisgICAgcTE1X3QgKnBTcmMsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSwNCisgICAgcTE1X3QgKnBSZXN1bHQsDQorICAgIHVpbnQzMl90ICpwSW5kZXgpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBNYXhpbXVtIHZhbHVlIG9mIGEgUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlDQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpbmRleCBvZiBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUNCisgKi8NCit2b2lkIGFybV9tYXhfcTMxKA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgdWludDMyX3QgYmxvY2tTaXplLA0KKyAgICBxMzFfdCAqcFJlc3VsdCwNCisgICAgdWludDMyX3QgKnBJbmRleCk7DQorDQorDQorLyoqDQorICogQGJyaWVmIE1heGltdW0gdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQ0KKyAqIEBwYXJhbVtvdXRdIHBJbmRleCAgICAgaW5kZXggb2YgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlDQorICovDQordm9pZCBhcm1fbWF4X2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUsDQorICAgIGZsb2F0MzJfdCAqcFJlc3VsdCwNCisgICAgdWludDMyX3QgKnBJbmRleCk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMTUgY29tcGxleC1ieS1jb21wbGV4IG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbXVsdF9jbXBseF9xMTUoDQorICAgIHExNV90ICpwU3JjQSwNCisgICAgcTE1X3QgKnBTcmNCLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBRMzEgY29tcGxleC1ieS1jb21wbGV4IG11bHRpcGxpY2F0aW9uDQorICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3INCisgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yDQorICovDQordm9pZCBhcm1fY21wbHhfbXVsdF9jbXBseF9xMzEoDQorICAgIHEzMV90ICpwU3JjQSwNCisgICAgcTMxX3QgKnBTcmNCLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgbnVtU2FtcGxlcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4LWJ5LWNvbXBsZXggbXVsdGlwbGljYXRpb24NCisgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9jbXBseF9tdWx0X2NtcGx4X2YzMigNCisgICAgZmxvYXQzMl90ICpwU3JjQSwNCisgICAgZmxvYXQzMl90ICpwU3JjQiwNCisgICAgZmxvYXQzMl90ICpwRHN0LA0KKyAgICB1aW50MzJfdCBudW1TYW1wbGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgdG8gUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgZmxvYXRpbmctcG9pbnQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIFEzMSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2Zsb2F0X3RvX3EzMSgNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgdG8gUTE1IHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgZmxvYXRpbmctcG9pbnQgaW5wdXQgdmVjdG9yDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIFExNSBvdXRwdXQgdmVjdG9yDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBsZW5ndGggb2YgdGhlIGlucHV0IHZlY3Rvcg0KKyAqLw0KK3ZvaWQgYXJtX2Zsb2F0X3RvX3ExNSgNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBxMTVfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgdG8gUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBmbG9hdGluZy1wb2ludCBpbnB1dCB2ZWN0b3INCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgUTcgb3V0cHV0IHZlY3Rvcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3INCisgKi8NCit2b2lkIGFybV9mbG9hdF90b19xNygNCisgICAgZmxvYXQzMl90ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRMzEgdmVjdG9yIHRvIFExNSB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xMzFfdG9fcTE1KA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTE1X3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFEzMSB2ZWN0b3IgdG8gUTcgdmVjdG9yLg0KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXINCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzDQorICovDQordm9pZCBhcm1fcTMxX3RvX3E3KA0KKyAgICBxMzFfdCAqcFNyYywNCisgICAgcTdfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTE1IHZlY3RvciB0byBmbG9hdGluZy1wb2ludCB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xMTVfdG9fZmxvYXQoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBmbG9hdDMyX3QgKnBEc3QsDQorICAgIHVpbnQzMl90IGJsb2NrU2l6ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFExNSB2ZWN0b3IgdG8gUTMxIHZlY3Rvci4NCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXINCisgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyDQorICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcw0KKyAqLw0KK3ZvaWQgYXJtX3ExNV90b19xMzEoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxMzFfdCAqcERzdCwNCisgICAgdWludDMyX3QgYmxvY2tTaXplKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTE1IHZlY3RvciB0byBRNyB2ZWN0b3IuDQorICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyDQorICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MNCisgKi8NCit2b2lkIGFybV9xMTVfdG9fcTcoDQorICAgIHExNV90ICpwU3JjLA0KKyAgICBxN190ICpwRHN0LA0KKyAgICB1aW50MzJfdCBibG9ja1NpemUpOw0KKw0KKw0KKy8qKg0KKyAqIEBpbmdyb3VwIGdyb3VwSW50ZXJwb2xhdGlvbg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBkZWZncm91cCBCaWxpbmVhckludGVycG9sYXRlIEJpbGluZWFyIEludGVycG9sYXRpb24NCisgKg0KKyAqIEJpbGluZWFyIGludGVycG9sYXRpb24gaXMgYW4gZXh0ZW5zaW9uIG9mIGxpbmVhciBpbnRlcnBvbGF0aW9uIGFwcGxpZWQgdG8gYSB0d28gZGltZW5zaW9uYWwgZ3JpZC4NCisgKiBUaGUgdW5kZXJseWluZyBmdW5jdGlvbiA8Y29kZT5mKHgsIHkpPC9jb2RlPiBpcyBzYW1wbGVkIG9uIGEgcmVndWxhciBncmlkIGFuZCB0aGUgaW50ZXJwb2xhdGlvbiBwcm9jZXNzDQorICogZGV0ZXJtaW5lcyB2YWx1ZXMgYmV0d2VlbiB0aGUgZ3JpZCBwb2ludHMuDQorICogQmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyBlcXVpdmFsZW50IHRvIHR3byBzdGVwIGxpbmVhciBpbnRlcnBvbGF0aW9uLCBmaXJzdCBpbiB0aGUgeC1kaW1lbnNpb24gYW5kIHRoZW4gaW4gdGhlIHktZGltZW5zaW9uLg0KKyAqIEJpbGluZWFyIGludGVycG9sYXRpb24gaXMgb2Z0ZW4gdXNlZCBpbiBpbWFnZSBwcm9jZXNzaW5nIHRvIHJlc2NhbGUgaW1hZ2VzLg0KKyAqIFRoZSBDTVNJUyBEU1AgbGlicmFyeSBwcm92aWRlcyBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBmb3IgUTcsIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4NCisgKg0KKyAqIDxiPkFsZ29yaXRobTwvYj4NCisgKiBccGFyDQorICogVGhlIGluc3RhbmNlIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBkZXNjcmliZXMgYSB0d28gZGltZW5zaW9uYWwgZGF0YSB0YWJsZS4NCisgKiBGb3IgZmxvYXRpbmctcG9pbnQsIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhczoNCisgKiA8cHJlPg0KKyAqICAgdHlwZWRlZiBzdHJ1Y3QNCisgKiAgIHsNCisgKiAgICAgdWludDE2X3QgbnVtUm93czsNCisgKiAgICAgdWludDE2X3QgbnVtQ29sczsNCisgKiAgICAgZmxvYXQzMl90ICpwRGF0YTsNCisgKiB9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfZjMyOw0KKyAqIDwvcHJlPg0KKyAqDQorICogXHBhcg0KKyAqIHdoZXJlIDxjb2RlPm51bVJvd3M8L2NvZGU+IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlOw0KKyAqIDxjb2RlPm51bUNvbHM8L2NvZGU+IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRhYmxlOw0KKyAqIGFuZCA8Y29kZT5wRGF0YTwvY29kZT4gcG9pbnRzIHRvIGFuIGFycmF5IG9mIHNpemUgPGNvZGU+bnVtUm93cypudW1Db2xzPC9jb2RlPiB2YWx1ZXMuDQorICogVGhlIGRhdGEgdGFibGUgPGNvZGU+cFRhYmxlPC9jb2RlPiBpcyBvcmdhbml6ZWQgaW4gcm93IG9yZGVyIGFuZCB0aGUgc3VwcGxpZWQgZGF0YSB2YWx1ZXMgZmFsbCBvbiBpbnRlZ2VyIGluZGV4ZXMuDQorICogVGhhdCBpcywgdGFibGUgZWxlbWVudCAoeCx5KSBpcyBsb2NhdGVkIGF0IDxjb2RlPnBUYWJsZVt4ICsgeSpudW1Db2xzXTwvY29kZT4gd2hlcmUgeCBhbmQgeSBhcmUgaW50ZWdlcnMuDQorICoNCisgKiBccGFyDQorICogTGV0IDxjb2RlPih4LCB5KTwvY29kZT4gc3BlY2lmeSB0aGUgZGVzaXJlZCBpbnRlcnBvbGF0aW9uIHBvaW50LiAgVGhlbiBkZWZpbmU6DQorICogPHByZT4NCisgKiAgICAgWEYgPSBmbG9vcih4KQ0KKyAqICAgICBZRiA9IGZsb29yKHkpDQorICogPC9wcmU+DQorICogXHBhcg0KKyAqIFRoZSBpbnRlcnBvbGF0ZWQgb3V0cHV0IHBvaW50IGlzIGNvbXB1dGVkIGFzOg0KKyAqIDxwcmU+DQorICogIGYoeCwgeSkgPSBmKFhGLCBZRikgKiAoMS0oeC1YRikpICogKDEtKHktWUYpKQ0KKyAqICAgICAgICAgICArIGYoWEYgKyAxLCBZRikgKiAoeC1YRikqKDEtKHktWUYpKQ0KKyAqICAgICAgICAgICArIGYoWEYsIFlGICsgMSkgKiAoMS0oeC1YRikpKih5LVlGKQ0KKyAqICAgICAgICAgICArIGYoWEYgKyAxLCBZRiArIDEpICogKHgtWEYpKih5LVlGKQ0KKyAqIDwvcHJlPg0KKyAqIE5vdGUgdGhhdCB0aGUgY29vcmRpbmF0ZXMgKHgsIHkpIGNvbnRhaW4gaW50ZWdlciBhbmQgZnJhY3Rpb25hbCBjb21wb25lbnRzLg0KKyAqIFRoZSBpbnRlZ2VyIGNvbXBvbmVudHMgc3BlY2lmeSB3aGljaCBwb3J0aW9uIG9mIHRoZSB0YWJsZSB0byB1c2Ugd2hpbGUgdGhlDQorICogZnJhY3Rpb25hbCBjb21wb25lbnRzIGNvbnRyb2wgdGhlIGludGVycG9sYXRpb24gcHJvY2Vzc29yLg0KKyAqDQorICogXHBhcg0KKyAqIGlmICh4LHkpIGFyZSBvdXRzaWRlIG9mIHRoZSB0YWJsZSBib3VuZGFyeSwgQmlsaW5lYXIgaW50ZXJwb2xhdGlvbiByZXR1cm5zIHplcm8gb3V0cHV0Lg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIEJpbGluZWFySW50ZXJwb2xhdGUNCisgKiBAew0KKyAqLw0KKw0KKw0KKy8qKg0KKyoNCisqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4NCisqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuDQorKiBAcGFyYW1baW5dICAgICBYICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUuDQorKiBAcGFyYW1baW5dICAgICBZICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUuDQorKiBAcmV0dXJuIG91dCBpbnRlcnBvbGF0ZWQgdmFsdWUuDQorKi8NCitzdGF0aWMgX19JTkxJTkUgZmxvYXQzMl90IGFybV9iaWxpbmVhcl9pbnRlcnBfZjMyKA0KKyAgICBjb25zdCBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMiAqUywNCisgICAgZmxvYXQzMl90IFgsDQorICAgIGZsb2F0MzJfdCBZKQ0KK3sNCisgICAgZmxvYXQzMl90IG91dDsNCisgICAgZmxvYXQzMl90IGYwMCwgZjAxLCBmMTAsIGYxMTsNCisgICAgZmxvYXQzMl90ICpwRGF0YSA9IFMtPnBEYXRhOw0KKyAgICBpbnQzMl90IHhJbmRleCwgeUluZGV4LCBpbmRleDsNCisgICAgZmxvYXQzMl90IHhkaWZmLCB5ZGlmZjsNCisgICAgZmxvYXQzMl90IGIxLCBiMiwgYjMsIGI0Ow0KKw0KKyAgICB4SW5kZXggPSAoaW50MzJfdCkgWDsNCisgICAgeUluZGV4ID0gKGludDMyX3QpIFk7DQorDQorICAgIC8qIENhcmUgdGFrZW4gZm9yIHRhYmxlIG91dHNpZGUgYm91bmRhcnkgKi8NCisgICAgLyogUmV0dXJucyB6ZXJvIG91dHB1dCB3aGVuIHZhbHVlcyBhcmUgb3V0c2lkZSB0YWJsZSBib3VuZGFyeSAqLw0KKyAgICBpZiAoeEluZGV4IDwgMCB8fCB4SW5kZXggPiAoUy0+bnVtUm93cyAtIDEpIHx8IHlJbmRleCA8IDAgfHwgeUluZGV4ID4gKFMtPm51bUNvbHMgLSAxKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgwKTsNCisgICAgfQ0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBpbmRleCBmb3IgdHdvIG5lYXJlc3QgcG9pbnRzIGluIFgtZGlyZWN0aW9uICovDQorICAgIGluZGV4ID0gKHhJbmRleCAtIDEpICsgKHlJbmRleCAtIDEpICogUy0+bnVtQ29sczsNCisNCisNCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBwb2ludHMgaW4gWC1kaXJlY3Rpb24gKi8NCisgICAgZjAwID0gcERhdGFbaW5kZXhdOw0KKyAgICBmMDEgPSBwRGF0YVtpbmRleCArIDFdOw0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBpbmRleCBmb3IgdHdvIG5lYXJlc3QgcG9pbnRzIGluIFktZGlyZWN0aW9uICovDQorICAgIGluZGV4ID0gKHhJbmRleCAtIDEpICsgKHlJbmRleCkgKiBTLT5udW1Db2xzOw0KKw0KKw0KKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IHBvaW50cyBpbiBZLWRpcmVjdGlvbiAqLw0KKyAgICBmMTAgPSBwRGF0YVtpbmRleF07DQorICAgIGYxMSA9IHBEYXRhW2luZGV4ICsgMV07DQorDQorICAgIC8qIENhbGN1bGF0aW9uIG9mIGludGVybWVkaWF0ZSB2YWx1ZXMgKi8NCisgICAgYjEgPSBmMDA7DQorICAgIGIyID0gZjAxIC0gZjAwOw0KKyAgICBiMyA9IGYxMCAtIGYwMDsNCisgICAgYjQgPSBmMDAgLSBmMDEgLSBmMTAgKyBmMTE7DQorDQorICAgIC8qIENhbGN1bGF0aW9uIG9mIGZyYWN0aW9uYWwgcGFydCBpbiBYICovDQorICAgIHhkaWZmID0gWCAtIHhJbmRleDsNCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgZnJhY3Rpb25hbCBwYXJ0IGluIFkgKi8NCisgICAgeWRpZmYgPSBZIC0geUluZGV4Ow0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBiaS1saW5lYXIgaW50ZXJwb2xhdGVkIG91dHB1dCAqLw0KKyAgICBvdXQgPSBiMSArIGIyICogeGRpZmYgKyBiMyAqIHlkaWZmICsgYjQgKiB4ZGlmZiAqIHlkaWZmOw0KKw0KKyAgICAvKiByZXR1cm4gdG8gYXBwbGljYXRpb24gKi8NCisgICAgcmV0dXJuIChvdXQpOw0KK30NCisNCisNCisvKioNCisqDQorKiBAYnJpZWYgIFEzMSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uLg0KKyogQHBhcmFtW2luLG91dF0gUyAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBpbnRlcnBvbGF0aW9uIHN0cnVjdHVyZS4NCisqIEBwYXJhbVtpbl0gICAgIFggIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuDQorKiBAcGFyYW1baW5dICAgICBZICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0Lg0KKyogQHJldHVybiBvdXQgaW50ZXJwb2xhdGVkIHZhbHVlLg0KKyovDQorc3RhdGljIF9fSU5MSU5FIHEzMV90IGFybV9iaWxpbmVhcl9pbnRlcnBfcTMxKA0KKyAgICBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3EzMSAqUywNCisgICAgcTMxX3QgWCwNCisgICAgcTMxX3QgWSkNCit7DQorICAgIHEzMV90IG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBvdXRwdXQgKi8NCisgICAgcTMxX3QgYWNjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovDQorICAgIHEzMV90IHhmcmFjdCwgeWZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFgsIFkgZnJhY3Rpb25hbCBwYXJ0cyAqLw0KKyAgICBxMzFfdCB4MSwgeDIsIHkxLCB5MjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgaW50MzJfdCBySSwgY0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUm93IGFuZCBjb2x1bW4gaW5kaWNlcyAqLw0KKyAgICBxMzFfdCAqcFlEYXRhID0gUy0+cERhdGE7ICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG91dHB1dCB0YWJsZSB2YWx1ZXMgKi8NCisgICAgdWludDMyX3QgbkNvbHMgPSBTLT5udW1Db2xzOyAgICAgICAgICAgICAgICAgLyogbnVtIG9mIHJvd3MgKi8NCisNCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLw0KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLw0KKyAgICBySSA9ICgoWCAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7DQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgY0kgPSAoKFkgJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOw0KKw0KKyAgICAvKiBDYXJlIHRha2VuIGZvciB0YWJsZSBvdXRzaWRlIGJvdW5kYXJ5ICovDQorICAgIC8qIFJldHVybnMgemVybyBvdXRwdXQgd2hlbiB2YWx1ZXMgYXJlIG91dHNpZGUgdGFibGUgYm91bmRhcnkgKi8NCisgICAgaWYgKHJJIDwgMCB8fCBySSA+IChTLT5udW1Sb3dzIC0gMSkgfHwgY0kgPCAwIHx8IGNJID4gKFMtPm51bUNvbHMgLSAxKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgwKTsNCisgICAgfQ0KKw0KKyAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovDQorICAgIC8qIHNoaWZ0IGxlZnQgeGZyYWN0IGJ5IDExIHRvIGtlZXAgMS4zMSBmb3JtYXQgKi8NCisgICAgeGZyYWN0ID0gKFggJiAweDAwMEZGRkZGKSA8PCAxMXU7DQorDQorICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLw0KKyAgICB4MSA9IHBZRGF0YVsockkpICsgKGludDMyX3QpbkNvbHMgKiAoY0kpICAgIF07DQorICAgIHgyID0gcFlEYXRhWyhySSkgKyAoaW50MzJfdCluQ29scyAqIChjSSkgKyAxXTsNCisNCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAvKiBzaGlmdCBsZWZ0IHlmcmFjdCBieSAxMSB0byBrZWVwIDEuMzEgZm9ybWF0ICovDQorICAgIHlmcmFjdCA9IChZICYgMHgwMDBGRkZGRikgPDwgMTF1Ow0KKw0KKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8NCisgICAgeTEgPSBwWURhdGFbKHJJKSArIChpbnQzMl90KW5Db2xzICogKGNJICsgMSkgICAgXTsNCisgICAgeTIgPSBwWURhdGFbKHJJKSArIChpbnQzMl90KW5Db2xzICogKGNJICsgMSkgKyAxXTsNCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgeDEgKiAoMS14ZnJhY3QgKSAqICgxLXlmcmFjdCkgYW5kIGFjYyBpcyBpbiAzLjI5KHEyOSkgZm9ybWF0ICovDQorICAgIG91dCA9ICgocTMxX3QpKCgocTYzX3QpIHgxICAqICgweDdGRkZGRkZGIC0geGZyYWN0KSkgPj4gMzIpKTsNCisgICAgYWNjID0gKChxMzFfdCkoKChxNjNfdCkgb3V0ICogKDB4N0ZGRkZGRkYgLSB5ZnJhY3QpKSA+PiAzMikpOw0KKw0KKyAgICAvKiB4MiAqICh4ZnJhY3QpICogKDEteWZyYWN0KSAgaW4gMy4yOShxMjkpIGFuZCBhZGRpbmcgdG8gYWNjICovDQorICAgIG91dCA9ICgocTMxX3QpKChxNjNfdCkgeDIgKiAoMHg3RkZGRkZGRiAtIHlmcmFjdCkgPj4gMzIpKTsNCisgICAgYWNjICs9ICgocTMxX3QpKChxNjNfdCkgb3V0ICogKHhmcmFjdCkgPj4gMzIpKTsNCisNCisgICAgLyogeTEgKiAoMSAtIHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMy4yOShxMjkpIGFuZCBhZGRpbmcgdG8gYWNjICovDQorICAgIG91dCA9ICgocTMxX3QpKChxNjNfdCkgeTEgKiAoMHg3RkZGRkZGRiAtIHhmcmFjdCkgPj4gMzIpKTsNCisgICAgYWNjICs9ICgocTMxX3QpKChxNjNfdCkgb3V0ICogKHlmcmFjdCkgPj4gMzIpKTsNCisNCisgICAgLyogeTIgKiAoeGZyYWN0KSAqICh5ZnJhY3QpICBpbiAzLjI5KHEyOSkgYW5kIGFkZGluZyB0byBhY2MgKi8NCisgICAgb3V0ID0gKChxMzFfdCkoKHE2M190KSB5MiAqICh4ZnJhY3QpID4+IDMyKSk7DQorICAgIGFjYyArPSAoKHEzMV90KSgocTYzX3QpIG91dCAqICh5ZnJhY3QpID4+IDMyKSk7DQorDQorICAgIC8qIENvbnZlcnQgYWNjIHRvIDEuMzEocTMxKSBmb3JtYXQgKi8NCisgICAgcmV0dXJuICgocTMxX3QpKGFjYyA8PCAyKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyogQGJyaWVmICBRMTUgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4NCisqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuDQorKiBAcGFyYW1baW5dICAgICBYICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0Lg0KKyogQHBhcmFtW2luXSAgICAgWSAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4NCisqIEByZXR1cm4gb3V0IGludGVycG9sYXRlZCB2YWx1ZS4NCisqLw0KK3N0YXRpYyBfX0lOTElORSBxMTVfdCBhcm1fYmlsaW5lYXJfaW50ZXJwX3ExNSgNCisgICAgYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xMTUgKlMsDQorICAgIHEzMV90IFgsDQorICAgIHEzMV90IFkpDQorew0KKyAgICBxNjNfdCBhY2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8NCisgICAgcTMxX3Qgb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IG91dHB1dCAqLw0KKyAgICBxMTVfdCB4MSwgeDIsIHkxLCB5MjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8NCisgICAgcTMxX3QgeGZyYWN0LCB5ZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgLyogWCwgWSBmcmFjdGlvbmFsIHBhcnRzICovDQorICAgIGludDMyX3QgckksIGNJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdyBhbmQgY29sdW1uIGluZGljZXMgKi8NCisgICAgcTE1X3QgKnBZRGF0YSA9IFMtPnBEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBvdXRwdXQgdGFibGUgdmFsdWVzICovDQorICAgIHVpbnQzMl90IG5Db2xzID0gUy0+bnVtQ29sczsgICAgICAgICAgICAgICAgIC8qIG51bSBvZiByb3dzICovDQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgckkgPSAoKFggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIGNJID0gKChZICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsNCisNCisgICAgLyogQ2FyZSB0YWtlbiBmb3IgdGFibGUgb3V0c2lkZSBib3VuZGFyeSAqLw0KKyAgICAvKiBSZXR1cm5zIHplcm8gb3V0cHV0IHdoZW4gdmFsdWVzIGFyZSBvdXRzaWRlIHRhYmxlIGJvdW5kYXJ5ICovDQorICAgIGlmIChySSA8IDAgfHwgckkgPiAoUy0+bnVtUm93cyAtIDEpIHx8IGNJIDwgMCB8fCBjSSA+IChTLT5udW1Db2xzIC0gMSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAoMCk7DQorICAgIH0NCisNCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAvKiB4ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICB4ZnJhY3QgPSAoWCAmIDB4MDAwRkZGRkYpOw0KKw0KKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8NCisgICAgeDEgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kpICAgIF07DQorICAgIHgyID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJKSArIDFdOw0KKw0KKyAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovDQorICAgIC8qIHlmcmFjdCBzaG91bGQgYmUgaW4gMTIuMjAgZm9ybWF0ICovDQorICAgIHlmcmFjdCA9IChZICYgMHgwMDBGRkZGRik7DQorDQorICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLw0KKyAgICB5MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSArIDEpICAgIF07DQorICAgIHkyID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJICsgMSkgKyAxXTsNCisNCisgICAgLyogQ2FsY3VsYXRpb24gb2YgeDEgKiAoMS14ZnJhY3QgKSAqICgxLXlmcmFjdCkgYW5kIGFjYyBpcyBpbiAxMy41MSBmb3JtYXQgKi8NCisNCisgICAgLyogeDEgaXMgaW4gMS4xNShxMTUpLCB4ZnJhY3QgaW4gMTIuMjAgZm9ybWF0IGFuZCBvdXQgaXMgaW4gMTMuMzUgZm9ybWF0ICovDQorICAgIC8qIGNvbnZlcnQgMTMuMzUgdG8gMTMuMzEgYnkgcmlnaHQgc2hpZnRpbmcgIGFuZCBvdXQgaXMgaW4gMS4zMSAqLw0KKyAgICBvdXQgPSAocTMxX3QpKCgocTYzX3QpIHgxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSA+PiA0dSk7DQorICAgIGFjYyA9ICgocTYzX3QpIG91dCAqICgweEZGRkZGIC0geWZyYWN0KSk7DQorDQorICAgIC8qIHgyICogKHhmcmFjdCkgKiAoMS15ZnJhY3QpICBpbiAxLjUxIGFuZCBhZGRpbmcgdG8gYWNjICovDQorICAgIG91dCA9IChxMzFfdCkoKChxNjNfdCkgeDIgKiAoMHhGRkZGRiAtIHlmcmFjdCkpID4+IDR1KTsNCisgICAgYWNjICs9ICgocTYzX3QpIG91dCAqICh4ZnJhY3QpKTsNCisNCisgICAgLyogeTEgKiAoMSAtIHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMS41MSBhbmQgYWRkaW5nIHRvIGFjYyAqLw0KKyAgICBvdXQgPSAocTMxX3QpKCgocTYzX3QpIHkxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSA+PiA0dSk7DQorICAgIGFjYyArPSAoKHE2M190KSBvdXQgKiAoeWZyYWN0KSk7DQorDQorICAgIC8qIHkyICogKHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMS41MSBhbmQgYWRkaW5nIHRvIGFjYyAqLw0KKyAgICBvdXQgPSAocTMxX3QpKCgocTYzX3QpIHkyICogKHhmcmFjdCkpID4+IDR1KTsNCisgICAgYWNjICs9ICgocTYzX3QpIG91dCAqICh5ZnJhY3QpKTsNCisNCisgICAgLyogYWNjIGlzIGluIDEzLjUxIGZvcm1hdCBhbmQgZG93biBzaGlmdCBhY2MgYnkgMzYgdGltZXMgKi8NCisgICAgLyogQ29udmVydCBvdXQgdG8gMS4xNSBmb3JtYXQgKi8NCisgICAgcmV0dXJuICgocTE1X3QpKGFjYyA+PiAzNikpOw0KK30NCisNCisNCisvKioNCisqIEBicmllZiAgUTcgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4NCisqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuDQorKiBAcGFyYW1baW5dICAgICBYICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0Lg0KKyogQHBhcmFtW2luXSAgICAgWSAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4NCisqIEByZXR1cm4gb3V0IGludGVycG9sYXRlZCB2YWx1ZS4NCisqLw0KK3N0YXRpYyBfX0lOTElORSBxN190IGFybV9iaWxpbmVhcl9pbnRlcnBfcTcoDQorICAgIGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTcgKlMsDQorICAgIHEzMV90IFgsDQorICAgIHEzMV90IFkpDQorew0KKyAgICBxNjNfdCBhY2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8NCisgICAgcTMxX3Qgb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IG91dHB1dCAqLw0KKyAgICBxMzFfdCB4ZnJhY3QsIHlmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLCBZIGZyYWN0aW9uYWwgcGFydHMgKi8NCisgICAgcTdfdCB4MSwgeDIsIHkxLCB5MjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovDQorICAgIGludDMyX3QgckksIGNJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdyBhbmQgY29sdW1uIGluZGljZXMgKi8NCisgICAgcTdfdCAqcFlEYXRhID0gUy0+cERhdGE7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBvdXRwdXQgdGFibGUgdmFsdWVzICovDQorICAgIHVpbnQzMl90IG5Db2xzID0gUy0+bnVtQ29sczsgICAgICAgICAgICAgICAgIC8qIG51bSBvZiByb3dzICovDQorDQorICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8NCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8NCisgICAgckkgPSAoKFggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOw0KKw0KKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8NCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovDQorICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovDQorICAgIGNJID0gKChZICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsNCisNCisgICAgLyogQ2FyZSB0YWtlbiBmb3IgdGFibGUgb3V0c2lkZSBib3VuZGFyeSAqLw0KKyAgICAvKiBSZXR1cm5zIHplcm8gb3V0cHV0IHdoZW4gdmFsdWVzIGFyZSBvdXRzaWRlIHRhYmxlIGJvdW5kYXJ5ICovDQorICAgIGlmIChySSA8IDAgfHwgckkgPiAoUy0+bnVtUm93cyAtIDEpIHx8IGNJIDwgMCB8fCBjSSA+IChTLT5udW1Db2xzIC0gMSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAoMCk7DQorICAgIH0NCisNCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAvKiB4ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICB4ZnJhY3QgPSAoWCAmIChxMzFfdCkweDAwMEZGRkZGKTsNCisNCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovDQorICAgIHgxID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJKSAgICBdOw0KKyAgICB4MiA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgKyAxXTsNCisNCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLw0KKyAgICAvKiB5ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLw0KKyAgICB5ZnJhY3QgPSAoWSAmIChxMzFfdCkweDAwMEZGRkZGKTsNCisNCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovDQorICAgIHkxID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJICsgMSkgICAgXTsNCisgICAgeTIgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kgKyAxKSArIDFdOw0KKw0KKyAgICAvKiBDYWxjdWxhdGlvbiBvZiB4MSAqICgxLXhmcmFjdCApICogKDEteWZyYWN0KSBhbmQgYWNjIGlzIGluIDE2LjQ3IGZvcm1hdCAqLw0KKyAgICBvdXQgPSAoKHgxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSk7DQorICAgIGFjYyA9ICgoKHE2M190KSBvdXQgKiAoMHhGRkZGRiAtIHlmcmFjdCkpKTsNCisNCisgICAgLyogeDIgKiAoeGZyYWN0KSAqICgxLXlmcmFjdCkgIGluIDIuMjIgYW5kIGFkZGluZyB0byBhY2MgKi8NCisgICAgb3V0ID0gKCh4MiAqICgweEZGRkZGIC0geWZyYWN0KSkpOw0KKyAgICBhY2MgKz0gKCgocTYzX3QpIG91dCAqICh4ZnJhY3QpKSk7DQorDQorICAgIC8qIHkxICogKDEgLSB4ZnJhY3QpICogKHlmcmFjdCkgIGluIDIuMjIgYW5kIGFkZGluZyB0byBhY2MgKi8NCisgICAgb3V0ID0gKCh5MSAqICgweEZGRkZGIC0geGZyYWN0KSkpOw0KKyAgICBhY2MgKz0gKCgocTYzX3QpIG91dCAqICh5ZnJhY3QpKSk7DQorDQorICAgIC8qIHkyICogKHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMi4yMiBhbmQgYWRkaW5nIHRvIGFjYyAqLw0KKyAgICBvdXQgPSAoKHkyICogKHlmcmFjdCkpKTsNCisgICAgYWNjICs9ICgoKHE2M190KSBvdXQgKiAoeGZyYWN0KSkpOw0KKw0KKyAgICAvKiBhY2MgaW4gMTYuNDcgZm9ybWF0IGFuZCBkb3duIHNoaWZ0IGJ5IDQwIHRvIGNvbnZlcnQgdG8gMS43IGZvcm1hdCAqLw0KKyAgICByZXR1cm4gKChxN190KShhY2MgPj4gNDApKTsNCit9DQorDQorLyoqDQorICogQH0gZW5kIG9mIEJpbGluZWFySW50ZXJwb2xhdGUgZ3JvdXANCisgKi8NCisNCisNCisvKiBTTU1MQVIgKi8NCisjZGVmaW5lIG11bHRBY2NfMzJ4MzJfa2VlcDMyX1IoYSwgeCwgeSkgXA0KKyAgICBhID0gKHEzMV90KSAoKCgoKHE2M190KSBhKSA8PCAzMikgKyAoKHE2M190KSB4ICogeSkgKyAweDgwMDAwMDAwTEwgKSA+PiAzMikNCisNCisvKiBTTU1MU1IgKi8NCisjZGVmaW5lIG11bHRTdWJfMzJ4MzJfa2VlcDMyX1IoYSwgeCwgeSkgXA0KKyAgICBhID0gKHEzMV90KSAoKCgoKHE2M190KSBhKSA8PCAzMikgLSAoKHE2M190KSB4ICogeSkgKyAweDgwMDAwMDAwTEwgKSA+PiAzMikNCisNCisvKiBTTU1VTFIgKi8NCisjZGVmaW5lIG11bHRfMzJ4MzJfa2VlcDMyX1IoYSwgeCwgeSkgXA0KKyAgICBhID0gKHEzMV90KSAoKChxNjNfdCkgeCAqIHkgKyAweDgwMDAwMDAwTEwgKSA+PiAzMikNCisNCisvKiBTTU1MQSAqLw0KKyNkZWZpbmUgbXVsdEFjY18zMngzMl9rZWVwMzIoYSwgeCwgeSkgXA0KKyAgICBhICs9IChxMzFfdCkgKCgocTYzX3QpIHggKiB5KSA+PiAzMikNCisNCisvKiBTTU1MUyAqLw0KKyNkZWZpbmUgbXVsdFN1Yl8zMngzMl9rZWVwMzIoYSwgeCwgeSkgXA0KKyAgICBhIC09IChxMzFfdCkgKCgocTYzX3QpIHggKiB5KSA+PiAzMikNCisNCisvKiBTTU1VTCAqLw0KKyNkZWZpbmUgbXVsdF8zMngzMl9rZWVwMzIoYSwgeCwgeSkgXA0KKyAgICBhID0gKHEzMV90KSAoKChxNjNfdCkgeCAqIHkgKSA+PiAzMikNCisNCisNCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkNCisvKiBFbnRlciBsb3cgb3B0aW1pemF0aW9uIHJlZ2lvbiAtIHBsYWNlIGRpcmVjdGx5IGFib3ZlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8NCisjaWYgZGVmaW5lZCggQVJNX01BVEhfQ000ICkgfHwgZGVmaW5lZCggQVJNX01BVEhfQ003KQ0KKyNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUiBcDQorICAgICAgIF9QcmFnbWEgKCJwdXNoIikgICAgICAgICBcDQorICAgICAgIF9QcmFnbWEgKCJPMSIpDQorI2Vsc2UNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVINCisjZW5kaWYNCisNCisvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8NCisjaWYgZGVmaW5lZCggQVJNX01BVEhfQ000ICkgfHwgZGVmaW5lZCggQVJNX01BVEhfQ003KQ0KKyNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUIFwNCisgICAgICAgX1ByYWdtYSAoInBvcCIpDQorI2Vsc2UNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVA0KKyNlbmRpZg0KKw0KKy8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKw0KKy8qIEV4aXQgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhZnRlciBlbmQgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVINCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVA0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIgX19hdHRyaWJ1dGVfXygoIG9wdGltaXplKCItTzEiKSApKQ0KKyNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUDQorI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VOVEVSDQorI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VYSVQNCisNCisjZWxpZiBkZWZpbmVkKF9fSUNDQVJNX18pDQorLyogRW50ZXIgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhYm92ZSBmdW5jdGlvbiBkZWZpbml0aW9uICovDQorI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIgXA0KKyAgICAgICBfUHJhZ21hICgib3B0aW1pemU9bG93IikNCisjZWxzZQ0KKyNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKyNlbmRpZg0KKw0KKy8qIEV4aXQgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhZnRlciBlbmQgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorLyogRW50ZXIgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhYm92ZSBmdW5jdGlvbiBkZWZpbml0aW9uICovDQorI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykNCisjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVIgXA0KKyAgICAgICBfUHJhZ21hICgib3B0aW1pemU9bG93IikNCisjZWxzZQ0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKyNlbmRpZg0KKw0KKy8qIEV4aXQgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhZnRlciBlbmQgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorI2VsaWYgZGVmaW5lZChfX0NTTUNfXykNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVINCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVA0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorI2VsaWYgZGVmaW5lZChfX1RBU0tJTkdfXykNCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVINCisjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVA0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUg0KKyNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUDQorDQorI2VuZGlmDQorDQorDQorI2lmZGVmICAgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorDQorI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3ANCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0FSTV9NQVRIX0ggKi8NCisNCisvKioNCisgKg0KKyAqIEVuZCBvZiBmaWxlLg0KKyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfYXJtY2MuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfYXJtY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTI0ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jbXNpc19hcm1jYy5oCkBAIC0wLDAgKzEsNzM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIGNtc2lzX2FybWNjLmgNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbi9JbnN0cnVjdGlvbiBIZWFkZXIgRmlsZQ0KKyAqIEB2ZXJzaW9uICBWNC4zMA0KKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1DQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVEDQorDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZA0KKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgICAqDQorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUNCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKyNpZm5kZWYgX19DTVNJU19BUk1DQ19IDQorI2RlZmluZSBfX0NNU0lTX0FSTUNDX0gNCisNCisNCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA0MDA2NzcpDQorI2Vycm9yICJQbGVhc2UgdXNlIEFSTSBDb21waWxlciBUb29sY2hhaW4gVjQuMC42Nzcgb3IgbGF0ZXIhIg0KKyNlbmRpZg0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQ0KKyAgICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgQ01TSVMgQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zDQorICBAew0KKyAqLw0KKw0KKy8qIGludHJpbnNpYyB2b2lkIF9fZW5hYmxlX2lycSgpOyAgICAgKi8NCisvKiBpbnRyaW5zaWMgdm9pZCBfX2Rpc2FibGVfaXJxKCk7ICAgICovDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgQ29udHJvbCBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0NPTlRST0wodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQ29udHJvbCAgICAgICAgIF9fQVNNKCJjb250cm9sIik7DQorICAgIHJldHVybiAoX19yZWdDb250cm9sKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgV3JpdGVzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQ29udHJvbCBSZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQ09OVFJPTCh1aW50MzJfdCBjb250cm9sKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdDb250cm9sICAgICAgICAgX19BU00oImNvbnRyb2wiKTsNCisgICAgX19yZWdDb250cm9sID0gY29udHJvbDsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgSVBTUiBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgSVBTUiBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBJUFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnSVBTUiAgICAgICAgICBfX0FTTSgiaXBzciIpOw0KKyAgICByZXR1cm4gKF9fcmVnSVBTUik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEFQU1IgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIEFQU1IgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9BUFNSKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0FQU1IgICAgICAgICAgX19BU00oImFwc3IiKTsNCisgICAgcmV0dXJuIChfX3JlZ0FQU1IpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfeFBTUih2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdYUFNSICAgICAgICAgIF9fQVNNKCJ4cHNyIik7DQorICAgIHJldHVybiAoX19yZWdYUFNSKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BTUCh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyICBfX0FTTSgicHNwIik7DQorICAgIHJldHVybiAoX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLg0KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZQcm9jU3RhY2sgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9QU1AodWludDMyX3QgdG9wT2ZQcm9jU3RhY2spDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1Byb2Nlc3NTdGFja1BvaW50ZXIgIF9fQVNNKCJwc3AiKTsNCisgICAgX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyID0gdG9wT2ZQcm9jU3RhY2s7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9NU1Aodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnTWFpblN0YWNrUG9pbnRlciAgICAgX19BU00oIm1zcCIpOw0KKyAgICByZXR1cm4gKF9fcmVnTWFpblN0YWNrUG9pbnRlcik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mTWFpblN0YWNrICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfTVNQKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdNYWluU3RhY2tQb2ludGVyICAgICBfX0FTTSgibXNwIik7DQorICAgIF9fcmVnTWFpblN0YWNrUG9pbnRlciA9IHRvcE9mTWFpblN0YWNrOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBNYXNrDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcmlvcml0eSBtYXNrIGJpdCBmcm9tIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFByaW9yaXR5IE1hc2sgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFJJTUFTSyh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdQcmlNYXNrICAgICAgICAgX19BU00oInByaW1hc2siKTsNCisgICAgcmV0dXJuIChfX3JlZ1ByaU1hc2spOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIHByaU1hc2sgIFByaW9yaXR5IE1hc2sNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9QUklNQVNLKHVpbnQzMl90IHByaU1hc2spDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1ByaU1hc2sgICAgICAgICBfX0FTTSgicHJpbWFzayIpOw0KKyAgICBfX3JlZ1ByaU1hc2sgPSAocHJpTWFzayk7DQorfQ0KKw0KKw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpDQorDQorLyoqDQorICBcYnJpZWYgICBFbmFibGUgRklRDQorICBcZGV0YWlscyBFbmFibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4NCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorI2RlZmluZSBfX2VuYWJsZV9mYXVsdF9pcnEgICAgICAgICAgICAgICAgX19lbmFibGVfZmlxDQorDQorDQorLyoqDQorICBcYnJpZWYgICBEaXNhYmxlIEZJUQ0KKyAgXGRldGFpbHMgRGlzYWJsZXMgRklRIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KKyNkZWZpbmUgX19kaXNhYmxlX2ZhdWx0X2lycSAgICAgICAgICAgICAgIF9fZGlzYWJsZV9maXENCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBCYXNlIFByaW9yaXR5DQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgIF9fZ2V0X0JBU0VQUkkodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQmFzZVByaSAgICAgICAgIF9fQVNNKCJiYXNlcHJpIik7DQorICAgIHJldHVybiAoX19yZWdCYXNlUHJpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldA0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUkkodWludDMyX3QgYmFzZVByaSkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQmFzZVByaSAgICAgICAgIF9fQVNNKCJiYXNlcHJpIik7DQorICAgIF9fcmVnQmFzZVByaSA9IChiYXNlUHJpICYgMHhGRlUpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3RlciBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwNCisgICAgICAgICAgIG9yIHRoZSBuZXcgdmFsdWUgaW5jcmVhc2VzIHRoZSBCQVNFUFJJIHByaW9yaXR5IGxldmVsLg0KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJX01BWCh1aW50MzJfdCBiYXNlUHJpKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdCYXNlUHJpTWF4ICAgICAgX19BU00oImJhc2VwcmlfbWF4Iik7DQorICAgIF9fcmVnQmFzZVByaU1heCA9IChiYXNlUHJpICYgMHhGRlUpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZhdWx0IE1hc2sgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRkFVTFRNQVNLKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0ZhdWx0TWFzayAgICAgICBfX0FTTSgiZmF1bHRtYXNrIik7DQorICAgIHJldHVybiAoX19yZWdGYXVsdE1hc2spOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBGYXVsdCBNYXNrDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGZhdWx0TWFzayAgRmF1bHQgTWFzayB2YWx1ZSB0byBzZXQNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GQVVMVE1BU0sodWludDMyX3QgZmF1bHRNYXNrKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdGYXVsdE1hc2sgICAgICAgX19BU00oImZhdWx0bWFzayIpOw0KKyAgICBfX3JlZ0ZhdWx0TWFzayA9IChmYXVsdE1hc2sgJiAodWludDMyX3QpMSk7DQorfQ0KKw0KKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpICovDQorDQorDQorI2lmICAgICAgIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkNCisNCisvKioNCisgIFxicmllZiAgIEdldCBGUFNDUg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRlBTQ1Iodm9pZCkNCit7DQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdmcHNjciAgICAgICAgIF9fQVNNKCJmcHNjciIpOw0KKyAgICByZXR1cm4gKF9fcmVnZnBzY3IpOw0KKyNlbHNlDQorICAgIHJldHVybiAoMFUpOw0KKyNlbmRpZg0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBGUFNDUg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLg0KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZQU0NSKHVpbnQzMl90IGZwc2NyKQ0KK3sNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQ0KKyAgICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ2Zwc2NyICAgICAgICAgX19BU00oImZwc2NyIik7DQorICAgIF9fcmVnZnBzY3IgPSAoZnBzY3IpOw0KKyNlbmRpZg0KK30NCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKSAqLw0KKw0KKw0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTm8gT3BlcmF0aW9uDQorICBcZGV0YWlscyBObyBPcGVyYXRpb24gZG9lcyBub3RoaW5nLiBUaGlzIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb2RlIGFsaWdubWVudCBwdXJwb3Nlcy4NCisgKi8NCisjZGVmaW5lIF9fTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vcA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgV2FpdCBGb3IgSW50ZXJydXB0DQorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLg0KKyAqLw0KKyNkZWZpbmUgX19XRkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2ZpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBXYWl0IEZvciBFdmVudA0KKyAgXGRldGFpbHMgV2FpdCBGb3IgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgcGVybWl0cyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyDQorICAgICAgICAgICBhIGxvdy1wb3dlciBzdGF0ZSB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4NCisgKi8NCisjZGVmaW5lIF9fV0ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dmZQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2VuZCBFdmVudA0KKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLg0KKyAqLw0KKyNkZWZpbmUgX19TRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V2DQorDQorDQorLyoqDQorICBcYnJpZWYgICBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllcg0KKyAgXGRldGFpbHMgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIgZmx1c2hlcyB0aGUgcGlwZWxpbmUgaW4gdGhlIHByb2Nlc3NvciwNCisgICAgICAgICAgIHNvIHRoYXQgYWxsIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgdGhlIElTQiBhcmUgZmV0Y2hlZCBmcm9tIGNhY2hlIG9yIG1lbW9yeSwNCisgICAgICAgICAgIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuDQorICovDQorI2RlZmluZSBfX0lTQigpIGRvIHtcDQorICAgICAgICAgICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpO1wNCisgICAgICAgICAgICAgICAgICAgX19pc2IoMHhGKTtcDQorICAgICAgICAgICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpO1wNCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoMFUpDQorDQorLyoqDQorICBcYnJpZWYgICBEYXRhIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyDQorICBcZGV0YWlscyBBY3RzIGFzIGEgc3BlY2lhbCBraW5kIG9mIERhdGEgTWVtb3J5IEJhcnJpZXIuDQorICAgICAgICAgICBJdCBjb21wbGV0ZXMgd2hlbiBhbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlLg0KKyAqLw0KKyNkZWZpbmUgX19EU0IoKSBkbyB7XA0KKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcDQorICAgICAgICAgICAgICAgICAgIF9fZHNiKDB4Rik7XA0KKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcDQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKDBVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGF0YSBNZW1vcnkgQmFycmllcg0KKyAgXGRldGFpbHMgRW5zdXJlcyB0aGUgYXBwYXJlbnQgb3JkZXIgb2YgdGhlIGV4cGxpY2l0IG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZQ0KKyAgICAgICAgICAgYW5kIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiwgd2l0aG91dCBlbnN1cmluZyB0aGVpciBjb21wbGV0aW9uLg0KKyAqLw0KKyNkZWZpbmUgX19ETUIoKSBkbyB7XA0KKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcDQorICAgICAgICAgICAgICAgICAgIF9fZG1iKDB4Rik7XA0KKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcDQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKDBVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBpbnRlZ2VyIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmV2DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDE2IGJpdCkNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIHR3byB1bnNpZ25lZCBzaG9ydCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorI2lmbmRlZiBfX05PX0VNQkVEREVEX0FTTQ0KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXYxNl90ZXh0IikpKSBfX1NUQVRJQ19JTkxJTkUgX19BU00gdWludDMyX3QgX19SRVYxNih1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHJldjE2IHIwLCByMA0KKyAgICBieCBscg0KK30NCisjZW5kaWYNCisNCisvKioNCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciBpbiBzaWduZWQgc2hvcnQgdmFsdWUNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGEgc2lnbmVkIHNob3J0IHZhbHVlIHdpdGggc2lnbiBleHRlbnNpb24gdG8gaW50ZWdlci4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUNCisgKi8NCisjaWZuZGVmIF9fTk9fRU1CRURERURfQVNNDQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldnNoX3RleHQiKSkpIF9fU1RBVElDX0lOTElORSBfX0FTTSBpbnQzMl90IF9fUkVWU0goaW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHJldnNoIHIwLCByMA0KKyAgICBieCBscg0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCBpbiB1bnNpZ25lZCB2YWx1ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgUm90YXRlIFJpZ2h0IChpbW1lZGlhdGUpIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciByb3RhdGVkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGJpdHMuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgTnVtYmVyIG9mIEJpdHMgdG8gcm90YXRlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19ST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcm9yDQorDQorDQorLyoqDQorICBcYnJpZWYgICBCcmVha3BvaW50DQorICBcZGV0YWlscyBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBlbnRlciBEZWJ1ZyBzdGF0ZS4NCisgICAgICAgICAgIERlYnVnIHRvb2xzIGNhbiB1c2UgdGhpcyB0byBpbnZlc3RpZ2F0ZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgaXMgcmVhY2hlZC4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBpcyBpZ25vcmVkIGJ5IHRoZSBwcm9jZXNzb3IuDQorICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgYSBkZWJ1Z2dlciBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJyZWFrcG9pbnQuDQorICovDQorI2RlZmluZSBfX0JLUFQodmFsdWUpICAgICAgICAgICAgICAgICAgICAgICBfX2JyZWFrcG9pbnQodmFsdWUpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQ0KKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJpdCBvcmRlciBvZiB0aGUgZ2l2ZW4gdmFsdWUuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkNCisjZGVmaW5lIF9fUkJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgX19yYml0DQorI2Vsc2UNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkJJVCh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisgICAgaW50MzJfdCBzID0gNCAvKnNpemVvZih2KSovICogOCAtIDE7IC8qIGV4dHJhIHNoaWZ0IG5lZWRlZCBhdCBlbmQgKi8NCisNCisgICAgcmVzdWx0ID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgIC8qIHIgd2lsbCBiZSByZXZlcnNlZCBiaXRzIG9mIHY7IGZpcnN0IGdldCBMU0Igb2YgdiAqLw0KKw0KKyAgICBmb3IgKHZhbHVlID4+PSAxVTsgdmFsdWU7IHZhbHVlID4+PSAxVSkNCisgICAgew0KKyAgICAgICAgcmVzdWx0IDw8PSAxVTsNCisgICAgICAgIHJlc3VsdCB8PSB2YWx1ZSAmIDFVOw0KKyAgICAgICAgcy0tOw0KKyAgICB9DQorDQorICAgIHJlc3VsdCA8PD0gczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGlmdCB3aGVuIHYncyBoaWdoZXN0IGJpdHMgYXJlIHplcm8gKi8NCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIENvdW50IGxlYWRpbmcgemVyb3MNCisgIFxkZXRhaWxzIENvdW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgYSBkYXRhIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBjb3VudCB0aGUgbGVhZGluZyB6ZXJvcw0KKyAgXHJldHVybiAgICAgICAgICAgICBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19DTFogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2x6DQorDQorDQorI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkNCisNCisvKioNCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikNCisgKi8NCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQ0KKyNkZWZpbmUgX19MRFJFWEIocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90ICkgX19sZHJleChwdHIpKQ0KKyNlbHNlDQorI2RlZmluZSBfX0xEUkVYQihwdHIpICAgICAgICAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSAoKHVpbnQ4X3QgKSBfX2xkcmV4KHB0cikpICBfUHJhZ21hKCJwb3AiKQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpDQorICovDQorI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNTA2MDAyMCkNCisjZGVmaW5lIF9fTERSRVhIKHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpIF9fbGRyZXgocHRyKSkNCisjZWxzZQ0KKyNkZWZpbmUgX19MRFJFWEgocHRyKSAgICAgICAgICBfUHJhZ21hKCJwdXNoIikgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzNzMxIikgKCh1aW50MTZfdCkgX19sZHJleChwdHIpKSAgX1ByYWdtYSgicG9wIikNCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQ0KKyAqLw0KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApDQorI2RlZmluZSBfX0xEUkVYVyhwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90ICkgX19sZHJleChwdHIpKQ0KKyNlbHNlDQorI2RlZmluZSBfX0xEUkVYVyhwdHIpICAgICAgICAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSAoKHVpbnQzMl90ICkgX19sZHJleChwdHIpKSAgX1ByYWdtYSgicG9wIikNCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApDQorI2RlZmluZSBfX1NUUkVYQih2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmV4KHZhbHVlLCBwdHIpDQorI2Vsc2UNCisjZGVmaW5lIF9fU1RSRVhCKHZhbHVlLCBwdHIpICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpIF9fc3RyZXgodmFsdWUsIHB0cikgICAgICAgIF9QcmFnbWEoInBvcCIpDQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApDQorI2RlZmluZSBfX1NUUkVYSCh2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmV4KHZhbHVlLCBwdHIpDQorI2Vsc2UNCisjZGVmaW5lIF9fU1RSRVhIKHZhbHVlLCBwdHIpICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpIF9fc3RyZXgodmFsdWUsIHB0cikgICAgICAgIF9QcmFnbWEoInBvcCIpDQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZA0KKyAqLw0KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApDQorI2RlZmluZSBfX1NUUkVYVyh2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmV4KHZhbHVlLCBwdHIpDQorI2Vsc2UNCisjZGVmaW5lIF9fU1RSRVhXKHZhbHVlLCBwdHIpICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpIF9fc3RyZXgodmFsdWUsIHB0cikgICAgICAgIF9QcmFnbWEoInBvcCIpDQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZW1vdmUgdGhlIGV4Y2x1c2l2ZSBsb2NrDQorICBcZGV0YWlscyBSZW1vdmVzIHRoZSBleGNsdXNpdmUgbG9jayB3aGljaCBpcyBjcmVhdGVkIGJ5IExEUkVYLg0KKyAqLw0KKyNkZWZpbmUgX19DTFJFWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFNpZ25lZCBTYXR1cmF0ZQ0KKyAgXGRldGFpbHMgU2F0dXJhdGVzIGEgc2lnbmVkIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQNCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgxLi4zMikNCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlDQorICovDQorI2RlZmluZSBfX1NTQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc2F0DQorDQorDQorLyoqDQorICBcYnJpZWYgICBVbnNpZ25lZCBTYXR1cmF0ZQ0KKyAgXGRldGFpbHMgU2F0dXJhdGVzIGFuIHVuc2lnbmVkIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQNCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgwLi4zMSkNCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlDQorICovDQorI2RlZmluZSBfX1VTQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2F0DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgd2l0aCBFeHRlbmQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIE1vdmVzIGVhY2ggYml0IG9mIGEgYml0c3RyaW5nIHJpZ2h0IGJ5IG9uZSBiaXQuDQorICAgICAgICAgICBUaGUgY2FycnkgaW5wdXQgaXMgc2hpZnRlZCBpbiBhdCB0aGUgbGVmdCBlbmQgb2YgdGhlIGJpdHN0cmluZy4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlDQorICovDQorI2lmbmRlZiBfX05PX0VNQkVEREVEX0FTTQ0KK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ycnhfdGV4dCIpKSkgX19TVEFUSUNfSU5MSU5FIF9fQVNNIHVpbnQzMl90IF9fUlJYKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgcnJ4IHIwLCByMA0KKyAgICBieCBscg0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KKyNkZWZpbmUgX19MRFJCVChwdHIpICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCApICBfX2xkcnQocHRyKSkNCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpDQorICovDQorI2RlZmluZSBfX0xEUkhUKHB0cikgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkgIF9fbGRydChwdHIpKQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lIF9fTERSVChwdHIpICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90ICkgX19sZHJ0KHB0cikpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCisjZGVmaW5lIF9fU1RSQlQodmFsdWUsIHB0cikgICAgICAgICAgICAgICBfX3N0cnQodmFsdWUsIHB0cikNCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorI2RlZmluZSBfX1NUUkhUKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgX19zdHJ0KHZhbHVlLCBwdHIpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KKyNkZWZpbmUgX19TVFJUKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgIF9fc3RydCh2YWx1ZSwgcHRyKQ0KKw0KKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpICovDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgQ01TSVMgU0lNRCBJbnRyaW5zaWNzDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIFNJTUQgaW5zdHJ1Y3Rpb25zDQorICBAew0KKyovDQorDQorI2lmIChfX0NPUlRFWF9NID49IDB4MDRVKSAgLyogb25seSBmb3IgQ29ydGV4LU00IGFuZCBhYm92ZSAqLw0KKw0KKyNkZWZpbmUgX19TQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2FkZDgNCisjZGVmaW5lIF9fUUFERDggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FhZGQ4DQorI2RlZmluZSBfX1NIQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaGFkZDgNCisjZGVmaW5lIF9fVUFERDggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VhZGQ4DQorI2RlZmluZSBfX1VRQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191cWFkZDgNCisjZGVmaW5lIF9fVUhBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VoYWRkOA0KKyNkZWZpbmUgX19TU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3N1YjgNCisjZGVmaW5lIF9fUVNVQjggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FzdWI4DQorI2RlZmluZSBfX1NIU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaHN1YjgNCisjZGVmaW5lIF9fVVNVQjggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzdWI4DQorI2RlZmluZSBfX1VRU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191cXN1YjgNCisjZGVmaW5lIF9fVUhTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Voc3ViOA0KKyNkZWZpbmUgX19TQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2FkZDE2DQorI2RlZmluZSBfX1FBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX19xYWRkMTYNCisjZGVmaW5lIF9fU0hBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3NoYWRkMTYNCisjZGVmaW5lIF9fVUFERDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VhZGQxNg0KKyNkZWZpbmUgX19VUUFERDE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFhZGQxNg0KKyNkZWZpbmUgX19VSEFERDE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhhZGQxNg0KKyNkZWZpbmUgX19TU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3N1YjE2DQorI2RlZmluZSBfX1FTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX19xc3ViMTYNCisjZGVmaW5lIF9fU0hTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Noc3ViMTYNCisjZGVmaW5lIF9fVVNVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzdWIxNg0KKyNkZWZpbmUgX19VUVNVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFzdWIxNg0KKyNkZWZpbmUgX19VSFNVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhzdWIxNg0KKyNkZWZpbmUgX19TQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2FzeA0KKyNkZWZpbmUgX19RQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcWFzeA0KKyNkZWZpbmUgX19TSEFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hhc3gNCisjZGVmaW5lIF9fVUFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Vhc3gNCisjZGVmaW5lIF9fVVFBU1ggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VxYXN4DQorI2RlZmluZSBfX1VIQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aGFzeA0KKyNkZWZpbmUgX19TU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3NheA0KKyNkZWZpbmUgX19RU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcXNheA0KKyNkZWZpbmUgX19TSFNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hzYXgNCisjZGVmaW5lIF9fVVNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzYXgNCisjZGVmaW5lIF9fVVFTQVggICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Vxc2F4DQorI2RlZmluZSBfX1VIU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aHNheA0KKyNkZWZpbmUgX19VU0FEOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNhZDgNCisjZGVmaW5lIF9fVVNBREE4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzYWRhOA0KKyNkZWZpbmUgX19TU0FUMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3NhdDE2DQorI2RlZmluZSBfX1VTQVQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2F0MTYNCisjZGVmaW5lIF9fVVhUQjE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3V4dGIxNg0KKyNkZWZpbmUgX19VWFRBQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXh0YWIxNg0KKyNkZWZpbmUgX19TWFRCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3h0YjE2DQorI2RlZmluZSBfX1NYVEFCMTYgICAgICAgICAgICAgICAgICAgICAgICAgX19zeHRhYjE2DQorI2RlZmluZSBfX1NNVUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVhZA0KKyNkZWZpbmUgX19TTVVBRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc211YWR4DQorI2RlZmluZSBfX1NNTEFEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxhZA0KKyNkZWZpbmUgX19TTUxBRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sYWR4DQorI2RlZmluZSBfX1NNTEFMRCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxhbGQNCisjZGVmaW5lIF9fU01MQUxEWCAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbGFsZHgNCisjZGVmaW5lIF9fU01VU0QgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtdXNkDQorI2RlZmluZSBfX1NNVVNEWCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVzZHgNCisjZGVmaW5lIF9fU01MU0QgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbHNkDQorI2RlZmluZSBfX1NNTFNEWCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxzZHgNCisjZGVmaW5lIF9fU01MU0xEICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbHNsZA0KKyNkZWZpbmUgX19TTUxTTERYICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sc2xkeA0KKyNkZWZpbmUgX19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VsDQorI2RlZmluZSBfX1FBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xYWRkDQorI2RlZmluZSBfX1FTVUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xc3ViDQorDQorI2RlZmluZSBfX1BLSEJUKEFSRzEsQVJHMixBUkczKSAgICAgICAgICAoICgoKCh1aW50MzJfdCkoQVJHMSkpICAgICAgICAgICkgJiAweDAwMDBGRkZGVUwpIHwgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShBUkcyKSkgPDwgKEFSRzMpKSAmIDB4RkZGRjAwMDBVTCkgICkNCisNCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpICAgICAgICAgICggKCgoKHVpbnQzMl90KShBUkcxKSkgICAgICAgICAgKSAmIDB4RkZGRjAwMDBVTCkgfCAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKEFSRzIpKSA+PiAoQVJHMykpICYgMHgwMDAwRkZGRlVMKSAgKQ0KKw0KKyNkZWZpbmUgX19TTU1MQShBUkcxLEFSRzIsQVJHMykgICAgICAgICAgKCAoaW50MzJfdCkoKCgoaW50NjRfdCkoQVJHMSkgKiAoQVJHMikpICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW50NjRfdCkoQVJHMykgPDwgMzJVKSAgICAgKSA+PiAzMlUpKQ0KKw0KKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDA0KSAqLw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyAqLw0KKw0KKw0KKyNlbmRpZiAvKiBfX0NNU0lTX0FSTUNDX0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjX1Y2LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2Ntc2lzX2FybWNjX1Y2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwZDNmNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfYXJtY2NfVjYuaApAQCAtMCwwICsxLDE4MTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioNCisgKiBAZmlsZSAgICAgY21zaXNfYXJtY2NfVjYuaA0KKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBDb3JlIEZ1bmN0aW9uL0luc3RydWN0aW9uIEhlYWRlciBGaWxlDQorICogQHZlcnNpb24gIFY0LjMwDQorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQNCisNCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkDQorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAgICoNCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQ0KKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorI2lmbmRlZiBfX0NNU0lTX0FSTUNDX1Y2X0gNCisjZGVmaW5lIF9fQ01TSVNfQVJNQ0NfVjZfSA0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQ0KKyAgICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgQ01TSVMgQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5hYmxlIElSUSBJbnRlcnJ1cHRzDQorICBcZGV0YWlscyBFbmFibGVzIElSUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4NCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZW5hYmxlX2lycSh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoImNwc2llIGkiIDogOiA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBEaXNhYmxlIElSUSBJbnRlcnJ1cHRzDQorICBcZGV0YWlscyBEaXNhYmxlcyBJUlEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4NCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZCBpIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQ09OVFJPTCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBjb250cm9sIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub24tc2VjdXJlIENvbnRyb2wgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgbW9kZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBub24tc2VjdXJlIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X0NPTlRST0xfTlModm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgY29udHJvbF9ucyIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IENvbnRyb2wgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuDQorICBccGFyYW0gW2luXSAgICBjb250cm9sICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9DT05UUk9MKHVpbnQzMl90IGNvbnRyb2wpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGNvbnRyb2wsICUwIiA6IDogInIiKGNvbnRyb2wpIDogIm1lbW9yeSIpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3RlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgQ29udHJvbCBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0NPTlRST0xfTlModWludDMyX3QgY29udHJvbCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgY29udHJvbF9ucywgJTAiIDogOiAiciIoY29udHJvbCkgOiAibWVtb3J5Iik7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IElQU1IgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfSVBTUih2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBpcHNyIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IElQU1IgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub24tc2VjdXJlIElQU1IgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfSVBTUl9OUyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBpcHNyX25zIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgQVBTUiBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9BUFNSKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGFwc3IiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3RlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG5vbi1zZWN1cmUgQVBTUiBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9BUFNSX05TKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGFwc3JfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X3hQU1Iodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgeHBzciIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgbm9uLXNlY3VyZSB4UFNSIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X3hQU1JfTlModm9pZCkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgeHBzcl9ucyIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFNQKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHBzcCIgIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9QU1BfTlModm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgcHNwX25zIiAgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUCh1aW50MzJfdCB0b3BPZlByb2NTdGFjaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHNwLCAlMCIgOiA6ICJyIih0b3BPZlByb2NTdGFjaykgOiAic3AiKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X1BTUF9OUyh1aW50MzJfdCB0b3BPZlByb2NTdGFjaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgcHNwX25zLCAlMCIgOiA6ICJyIih0b3BPZlByb2NTdGFjaykgOiAic3AiKTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgTWFpbiBTdGFjayBQb2ludGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkuDQorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9NU1Aodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgbXNwIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfTVNQX05TKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIG1zcF9ucyIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mTWFpblN0YWNrICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X01TUCh1aW50MzJfdCB0b3BPZk1haW5TdGFjaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgbXNwLCAlMCIgOiA6ICJyIih0b3BPZk1haW5TdGFjaykgOiAic3AiKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciAoTVNQKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mTWFpblN0YWNrICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X01TUF9OUyh1aW50MzJfdCB0b3BPZk1haW5TdGFjaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgbXNwX25zLCAlMCIgOiA6ICJyIih0b3BPZk1haW5TdGFjaykgOiAic3AiKTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaw0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgbWFzayBiaXQgZnJvbSB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QUklNQVNLKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHByaW1hc2siIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzayAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG5vbi1zZWN1cmUgcHJpb3JpdHkgbWFzayBiaXQgZnJvbSB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9QUklNQVNLX05TKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHByaW1hc2tfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIHByaU1hc2sgIFByaW9yaXR5IE1hc2sNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBwcmltYXNrLCAlMCIgOiA6ICJyIihwcmlNYXNrKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IFByaW9yaXR5IE1hc2sgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHJpTWFzayAgUHJpb3JpdHkgTWFzaw0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9QUklNQVNLX05TKHVpbnQzMl90IHByaU1hc2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIHByaW1hc2tfbnMsICUwIiA6IDogInIiKHByaU1hc2spIDogIm1lbW9yeSIpOw0KK30NCisjZW5kaWYNCisNCisNCisjaWYgKChfX0FSTV9BUkNIXzdNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgdGhpcyBpcyBvayBmb3IgY29ydGV4ID49MyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5hYmxlIEZJUQ0KKyAgXGRldGFpbHMgRW5hYmxlcyBGSVEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2VuYWJsZV9mYXVsdF9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZSBmIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGlzYWJsZSBGSVENCisgIFxkZXRhaWxzIERpc2FibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLg0KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19kaXNhYmxlX2ZhdWx0X2lycSh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoImNwc2lkIGYiIDogOiA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9CQVNFUFJJKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGJhc2VwcmkiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eSAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgQmFzZSBQcmlvcml0eSByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9CQVNFUFJJX05TKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGJhc2VwcmlfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5DQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUkkodWludDMyX3QgdmFsdWUpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGJhc2VwcmksICUwIiA6IDogInIiKHZhbHVlKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQ0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IEJhc2UgUHJpb3JpdHkgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfQkFTRVBSSV9OUyh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgYmFzZXByaV9ucywgJTAiIDogOiAiciIodmFsdWUpIDogIm1lbW9yeSIpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3RlciBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwNCisgICAgICAgICAgIG9yIHRoZSBuZXcgdmFsdWUgaW5jcmVhc2VzIHRoZSBCQVNFUFJJIHByaW9yaXR5IGxldmVsLg0KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQkFTRVBSSV9NQVgodWludDMyX3QgdmFsdWUpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGJhc2VwcmlfbWF4LCAlMCIgOiA6ICJyIih2YWx1ZSkgOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uIChub25fc2VjdXJlKQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgQmFzZSBQcmlvcml0eSByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZSBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwNCisgICAgICAgICAgIG9yIHRoZSBuZXcgdmFsdWUgaW5jcmVhc2VzIHRoZSBCQVNFUFJJIHByaW9yaXR5IGxldmVsLg0KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfQkFTRVBSSV9NQVhfTlModWludDMyX3QgdmFsdWUpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGJhc2VwcmlfbWF4X25zLCAlMCIgOiA6ICJyIih2YWx1ZSkgOiAibWVtb3J5Iik7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEZhdWx0IE1hc2sNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgRmF1bHQgTWFzayByZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRkFVTFRNQVNLKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGZhdWx0bWFzayIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkNCisvKioNCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBGYXVsdCBNYXNrIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZhdWx0IE1hc2sgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X0ZBVUxUTUFTS19OUyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBmYXVsdG1hc2tfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBGYXVsdCBNYXNrDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGZhdWx0TWFzayAgRmF1bHQgTWFzayB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRkFVTFRNQVNLKHVpbnQzMl90IGZhdWx0TWFzaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgZmF1bHRtYXNrLCAlMCIgOiA6ICJyIihmYXVsdE1hc2spIDogIm1lbW9yeSIpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzayAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIEZhdWx0IE1hc2sgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuDQorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0ZBVUxUTUFTS19OUyh1aW50MzJfdCBmYXVsdE1hc2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGZhdWx0bWFza19ucywgJTAiIDogOiAiciIoZmF1bHRNYXNrKSA6ICJtZW1vcnkiKTsNCit9DQorI2VuZGlmDQorDQorDQorI2VuZGlmIC8qICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgKi8NCisNCisNCisjaWYgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkNCisNCisvKioNCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQNCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1BMSU0gUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BTUExJTSh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBwc3BsaW0iICA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKSAmJiAoX19BUk1fQVJDSF9QUk9GSUxFID09ICdNJykgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgcHJlZGVmaW5lZCBtYWNybyBmb3IgbWFpbmxpbmUgKi8NCisvKioNCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAoUFNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1BMSU0gUmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X1BTUExJTV9OUyh2b2lkKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBwc3BsaW1fbnMiICA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0DQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChQU1BMSU0pLg0KKyAgXHBhcmFtIFtpbl0gICAgUHJvY1N0YWNrUHRyTGltaXQgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFNQTElNKHVpbnQzMl90IFByb2NTdGFja1B0ckxpbWl0KQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBwc3BsaW0sICUwIiA6IDogInIiKFByb2NTdGFja1B0ckxpbWl0KSk7DQorfQ0KKw0KKw0KKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgJiYgKF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScpICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIHByZWRlZmluZWQgbWFjcm8gZm9yIG1haW5saW5lICovDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIChub24tc2VjdXJlKQ0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChQU1BMSU0pIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHBhcmFtIFtpbl0gICAgUHJvY1N0YWNrUHRyTGltaXQgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfUFNQTElNX05TKHVpbnQzMl90IFByb2NTdGFja1B0ckxpbWl0KQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBwc3BsaW1fbnMsICUwXG4iIDogOiAiciIoUHJvY1N0YWNrUHRyTGltaXQpKTsNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgTWFpbiBTdGFjayBQb2ludGVyIExpbWl0DQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKE1TUExJTSkuDQorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQTElNIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9NU1BMSU0odm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgbXNwbGltIiA6ICI9ciIocmVzdWx0KSk7DQorDQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKSAmJiAoX19BUk1fQVJDSF9QUk9GSUxFID09ICdNJykgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgcHJlZGVmaW5lZCBtYWNybyBmb3IgbWFpbmxpbmUgKi8NCisvKioNCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdChNU1BMSU0pIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUExJTSBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfTVNQTElNX05TKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIG1zcGxpbV9ucyIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdA0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCAoTVNQTElNKS4NCisgIFxwYXJhbSBbaW5dICAgIE1haW5TdGFja1B0ckxpbWl0ICBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X01TUExJTSh1aW50MzJfdCBNYWluU3RhY2tQdHJMaW1pdCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgbXNwbGltLCAlMCIgOiA6ICJyIihNYWluU3RhY2tQdHJMaW1pdCkpOw0KK30NCisNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICYmIChfX0FSTV9BUkNIX1BST0ZJTEUgPT0gJ00nKSAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBwcmVkZWZpbmVkIG1hY3JvIGZvciBtYWlubGluZSAqLw0KKy8qKg0KKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCAobm9uLXNlY3VyZSkNCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCAoTVNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIE1haW5TdGFja1B0ckxpbWl0ICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X01TUExJTV9OUyh1aW50MzJfdCBNYWluU3RhY2tQdHJMaW1pdCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgbXNwbGltX25zLCAlMCIgOiA6ICJyIihNYWluU3RhY2tQdHJMaW1pdCkpOw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkgKi8NCisNCisNCisjaWYgKChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgdGhpcyBpcyBvayBmb3IgY29ydGV4ID49NCAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEZQU0NSDQorICBcZGV0YWlscyBldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlDQorICovDQorI2RlZmluZSBfX2dldF9GUFNDUiAgICAgIF9fYnVpbHRpbl9hcm1fZ2V0X2Zwc2NyDQorI2lmIDANCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpDQorew0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpDQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJWTVJTICUwLCBmcHNjciIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7DQorICAgIHJldHVybiAocmVzdWx0KTsNCisjZWxzZQ0KKyAgICByZXR1cm4gKDApOw0KKyNlbmRpZg0KK30NCisjZW5kaWYNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBHZXQgRlBTQ1IgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9GUFNDUl9OUyh2b2lkKQ0KK3sNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQ0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiVk1SUyAlMCwgZnBzY3JfbnMiIDogIj1yIihyZXN1bHQpKTsNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorI2Vsc2UNCisgICAgcmV0dXJuICgwKTsNCisjZW5kaWYNCit9DQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgRlBTQ1INCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQNCisgKi8NCisjZGVmaW5lIF9fc2V0X0ZQU0NSICAgICAgX19idWlsdGluX2FybV9zZXRfZnBzY3INCisjaWYgMA0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GUFNDUih1aW50MzJfdCBmcHNjcikNCit7DQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJWTVNSIGZwc2NyLCAlMCIgOiA6ICJyIihmcHNjcikgOiAidmZwY2MiKTsNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyNlbmRpZg0KK30NCisjZW5kaWYNCisNCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpDQorLyoqDQorICBcYnJpZWYgICBTZXQgRlBTQ1IgKG5vbi1zZWN1cmUpDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4NCisgIFxwYXJhbSBbaW5dICAgIGZwc2NyICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfRlBTQ1JfTlModWludDMyX3QgZnBzY3IpDQorew0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpDQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiVk1TUiBmcHNjcl9ucywgJTAiIDogOiAiciIoZnBzY3IpIDogInZmcGNjIik7DQorICAgIF9fQVNNIHZvbGF0aWxlKCIiKTsNCisjZW5kaWYNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qICgoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICovDQorDQorDQorDQorLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgKi8NCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGRlZmdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgQ01TSVMgQ29yZSBJbnN0cnVjdGlvbiBJbnRlcmZhY2UNCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgaW5zdHJ1Y3Rpb25zDQorICBAew0KKyovDQorDQorLyogRGVmaW5lIG1hY3JvcyBmb3IgcG9ydGluZyB0byBib3RoIHRodW1iMSBhbmQgdGh1bWIyLg0KKyAqIEZvciB0aHVtYjEsIHVzZSBsb3cgcmVnaXN0ZXIgKHIwLXI3KSwgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgImwiDQorICogT3RoZXJ3aXNlLCB1c2UgZ2VuZXJhbCByZWdpc3RlcnMsIHNwZWNpZmllZCBieSBjb25zdHJhaW50ICJyIiAqLw0KKyNpZiBkZWZpbmVkIChfX3RodW1iX18pICYmICFkZWZpbmVkIChfX3RodW1iMl9fKQ0KKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPWwiIChyKQ0KKyNkZWZpbmUgX19DTVNJU19HQ0NfVVNFX1JFRyhyKSAibCIgKHIpDQorI2Vsc2UNCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1yIiAocikNCisjZGVmaW5lIF9fQ01TSVNfR0NDX1VTRV9SRUcocikgInIiIChyKQ0KKyNlbmRpZg0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTm8gT3BlcmF0aW9uDQorICBcZGV0YWlscyBObyBPcGVyYXRpb24gZG9lcyBub3RoaW5nLiBUaGlzIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb2RlIGFsaWdubWVudCBwdXJwb3Nlcy4NCisgKi8NCisjZGVmaW5lIF9fTk9QICAgICAgICAgIF9fYnVpbHRpbl9hcm1fbm9wDQorDQorLyoqDQorICBcYnJpZWYgICBXYWl0IEZvciBJbnRlcnJ1cHQNCisgIFxkZXRhaWxzIFdhaXQgRm9yIEludGVycnVwdCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBzdXNwZW5kcyBleGVjdXRpb24gdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuDQorICovDQorI2RlZmluZSBfX1dGSSAgICAgICAgICBfX2J1aWx0aW5fYXJtX3dmaQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgV2FpdCBGb3IgRXZlbnQNCisgIFxkZXRhaWxzIFdhaXQgRm9yIEV2ZW50IGlzIGEgaGludCBpbnN0cnVjdGlvbiB0aGF0IHBlcm1pdHMgdGhlIHByb2Nlc3NvciB0byBlbnRlcg0KKyAgICAgICAgICAgYSBsb3ctcG93ZXIgc3RhdGUgdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuDQorICovDQorI2RlZmluZSBfX1dGRSAgICAgICAgICBfX2J1aWx0aW5fYXJtX3dmZQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2VuZCBFdmVudA0KKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLg0KKyAqLw0KKyNkZWZpbmUgX19TRVYgICAgICAgICAgX19idWlsdGluX2FybV9zZXYNCisNCisNCisvKioNCisgIFxicmllZiAgIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyDQorICBcZGV0YWlscyBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllciBmbHVzaGVzIHRoZSBwaXBlbGluZSBpbiB0aGUgcHJvY2Vzc29yLA0KKyAgICAgICAgICAgc28gdGhhdCBhbGwgaW5zdHJ1Y3Rpb25zIGZvbGxvd2luZyB0aGUgSVNCIGFyZSBmZXRjaGVkIGZyb20gY2FjaGUgb3IgbWVtb3J5LA0KKyAgICAgICAgICAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4NCisgKi8NCisjZGVmaW5lIF9fSVNCKCkgICAgICAgIF9fYnVpbHRpbl9hcm1faXNiKDB4Rik7DQorDQorLyoqDQorICBcYnJpZWYgICBEYXRhIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyDQorICBcZGV0YWlscyBBY3RzIGFzIGEgc3BlY2lhbCBraW5kIG9mIERhdGEgTWVtb3J5IEJhcnJpZXIuDQorICAgICAgICAgICBJdCBjb21wbGV0ZXMgd2hlbiBhbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlLg0KKyAqLw0KKyNkZWZpbmUgX19EU0IoKSAgICAgICAgX19idWlsdGluX2FybV9kc2IoMHhGKTsNCisNCisNCisvKioNCisgIFxicmllZiAgIERhdGEgTWVtb3J5IEJhcnJpZXINCisgIFxkZXRhaWxzIEVuc3VyZXMgdGhlIGFwcGFyZW50IG9yZGVyIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUNCisgICAgICAgICAgIGFuZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZW5zdXJpbmcgdGhlaXIgY29tcGxldGlvbi4NCisgKi8NCisjZGVmaW5lIF9fRE1CKCkgICAgICAgIF9fYnVpbHRpbl9hcm1fZG1iKDB4Rik7DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDMyIGJpdCkNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGludGVnZXIgdmFsdWUuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorI2RlZmluZSBfX1JFViAgICAgICAgICBfX2J1aWx0aW5fYnN3YXAzMg0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgxNiBiaXQpDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19SRVYxNiAgICAgICAgICBfX2J1aWx0aW5fYnN3YXAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgX19idWlsdGluX2Jzd2FwMTYgY291bGQgYmUgdXNlZCAqLw0KKyNpZiAwDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVjE2KHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicmV2MTYgJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcodmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisjZW5kaWYNCisNCisNCisvKioNCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciBpbiBzaWduZWQgc2hvcnQgdmFsdWUNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGEgc2lnbmVkIHNob3J0IHZhbHVlIHdpdGggc2lnbiBleHRlbnNpb24gdG8gaW50ZWdlci4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUNCisgKi8NCisvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIF9fYnVpbHRpbl9ic3dhcDE2IGNvdWxkIGJlIHVzZWQgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIGludDMyX3QgX19SRVZTSChpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgaW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJyZXZzaCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyhyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyh2YWx1ZSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IGluIHVuc2lnbmVkIHZhbHVlICgzMiBiaXQpDQorICBcZGV0YWlscyBSb3RhdGUgUmlnaHQgKGltbWVkaWF0ZSkgcHJvdmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHJvdGF0ZWQgYnkgYSB2YXJpYWJsZSBudW1iZXIgb2YgYml0cy4NCisgIFxwYXJhbSBbaW5dICAgIG9wMSAgVmFsdWUgdG8gcm90YXRlDQorICBccGFyYW0gW2luXSAgICBvcDIgIE51bWJlciBvZiBCaXRzIHRvIHJvdGF0ZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUk9SKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgcmV0dXJuIChvcDEgPj4gb3AyKSB8IChvcDEgPDwgKDMyVSAtIG9wMikpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEJyZWFrcG9pbnQNCisgIFxkZXRhaWxzIENhdXNlcyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyIERlYnVnIHN0YXRlLg0KKyAgICAgICAgICAgIERlYnVnIHRvb2xzIGNhbiB1c2UgdGhpcyB0byBpbnZlc3RpZ2F0ZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgaXMgcmVhY2hlZC4NCisgICAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIGlzIGlnbm9yZWQgYnkgdGhlIHByb2Nlc3Nvci4NCisgICAgICAgICAgICAgICAgICAgSWYgcmVxdWlyZWQsIGEgZGVidWdnZXIgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50Lg0KKyAqLw0KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJia3B0ICIjdmFsdWUpDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJpdCBvcmRlciBvZiB2YWx1ZQ0KKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJpdCBvcmRlciBvZiB0aGUgZ2l2ZW4gdmFsdWUuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBpZiBfX2J1aWx0aW5fYXJtX3JiaXQgaXMgc3VwcG9ydGVkICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JCSVQodWludDMyX3QgdmFsdWUpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorI2lmICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTMgKi8NCisgICAgX19BU00gdm9sYXRpbGUoInJiaXQgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJyIih2YWx1ZSkpOw0KKyNlbHNlDQorICAgIGludDMyX3QgcyA9IDQgLypzaXplb2YodikqLyAqIDggLSAxOyAvKiBleHRyYSBzaGlmdCBuZWVkZWQgYXQgZW5kICovDQorDQorICAgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8NCisNCisgICAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA8PD0gMVU7DQorICAgICAgICByZXN1bHQgfD0gdmFsdWUgJiAxVTsNCisgICAgICAgIHMtLTsNCisgICAgfQ0KKw0KKyAgICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovDQorI2VuZGlmDQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBDb3VudCBsZWFkaW5nIHplcm9zDQorICBcZGV0YWlscyBDb3VudHMgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIGEgZGF0YSB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MNCisgIFxyZXR1cm4gICAgICAgICAgICAgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4gdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgIF9fYnVpbHRpbl9jbHoNCisNCisNCisjaWYgKChfX0FSTV9BUkNIXzdNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgdGhpcyBpcyBvayBmb3IgY29ydGV4ID49MyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KKyNkZWZpbmUgX19MRFJFWEIgICAgICAgICh1aW50OF90KV9fYnVpbHRpbl9hcm1fbGRyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KKyNkZWZpbmUgX19MRFJFWEggICAgICAgICh1aW50MTZfdClfX2J1aWx0aW5fYXJtX2xkcmV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lIF9fTERSRVhXICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9sZHJleA0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorI2RlZmluZSBfX1NUUkVYQiAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorI2RlZmluZSBfX1NUUkVYSCAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorI2RlZmluZSBfX1NUUkVYVyAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFJlbW92ZSB0aGUgZXhjbHVzaXZlIGxvY2sNCisgIFxkZXRhaWxzIFJlbW92ZXMgdGhlIGV4Y2x1c2l2ZSBsb2NrIHdoaWNoIGlzIGNyZWF0ZWQgYnkgTERSRVguDQorICovDQorI2RlZmluZSBfX0NMUkVYICAgICAgICAgICAgIF9fYnVpbHRpbl9hcm1fY2xyZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFNpZ25lZCBTYXR1cmF0ZQ0KKyAgXGRldGFpbHMgU2F0dXJhdGVzIGEgc2lnbmVkIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQNCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgxLi4zMikNCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlDQorICovDQorLyojZGVmaW5lIF9fU1NBVCAgICAgICAgICAgICBfX2J1aWx0aW5fYXJtX3NzYXQqLw0KKyNkZWZpbmUgX19TU0FUKEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICBpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwNCisgIF9fQVNNICgic3NhdCAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCisNCisvKioNCisgIFxicmllZiAgIFVuc2lnbmVkIFNhdHVyYXRlDQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYW4gdW5zaWduZWQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZA0KKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDAuLjMxKQ0KKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fVVNBVCAgICAgICAgICAgICBfX2J1aWx0aW5fYXJtX3VzYXQNCisjaWYgMA0KKyNkZWZpbmUgX19VU0FUKEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInVzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorI2VuZGlmDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgd2l0aCBFeHRlbmQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIE1vdmVzIGVhY2ggYml0IG9mIGEgYml0c3RyaW5nIHJpZ2h0IGJ5IG9uZSBiaXQuDQorICAgICAgICAgICBUaGUgY2FycnkgaW5wdXQgaXMgc2hpZnRlZCBpbiBhdCB0aGUgbGVmdCBlbmQgb2YgdGhlIGJpdHN0cmluZy4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JSWCh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInJyeCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyhyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyh2YWx1ZSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSQlQodm9sYXRpbGUgdWludDhfdCAqcHRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyYnQgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqcHRyKSk7DQorICAgIHJldHVybiAoKHVpbnQ4X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBfX0xEUkhUKHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJodCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCpwdHIpKTsNCisgICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUlQodm9sYXRpbGUgdWludDMyX3QgKnB0cikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoImxkcnQgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqcHRyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJCVCh1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICpwdHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyYnQgJTEsICUwIiA6ICI9USIoKnB0cikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJIVCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKnB0cikNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdHJodCAlMSwgJTAiIDogIj1RIigqcHRyKSA6ICJyIigodWludDMyX3QpdmFsdWUpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUUlQodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICpwdHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RydCAlMSwgJTAiIDogIj1RIigqcHRyKSA6ICJyIih2YWx1ZSkpOw0KK30NCisNCisjZW5kaWYgLyogKChfX0FSTV9BUkNIXzdNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgKi8NCisNCisNCisjaWYgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkNCisNCisvKioNCisgIFxicmllZiAgIExvYWQtQWNxdWlyZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQUIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBfX0xEQUIodm9sYXRpbGUgdWludDhfdCAqcHRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRhYiAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCpwdHIpKTsNCisgICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBSCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgX19MREFIKHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZGFoICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKnB0cikpOw0KKyAgICByZXR1cm4gKCh1aW50MTZfdCkgcmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEQSh2b2xhdGlsZSB1aW50MzJfdCAqcHRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRhICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKnB0cikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSAoOCBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFNUTEIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUTEIodWludDhfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDhfdCAqcHRyKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInN0bGIgJTEsICUwIiA6ICI9USIoKnB0cikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVExIIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RMSCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKnB0cikNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdGxoICUxLCAlMCIgOiAiPVEiKCpwdHIpIDogInIiKCh1aW50MzJfdCl2YWx1ZSkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RMKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqcHRyKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInN0bCAlMSwgJTAiIDogIj1RIigqcHRyKSA6ICJyIigodWludDMyX3QpdmFsdWUpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgRXhjbHVzaXZlICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBQiBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQ0KKyAqLw0KKyNkZWZpbmUgICAgIF9fTERBRVhCICAgICAgICAgICAgICAgICAodWludDhfdClfX2J1aWx0aW5fYXJtX2xkYWV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgRXhjbHVzaXZlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQUggZXhjbHVzaXZlIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGENCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpDQorICovDQorI2RlZmluZSAgICAgX19MREFFWEggICAgICAgICAgICAgICAgICh1aW50MTZfdClfX2J1aWx0aW5fYXJtX2xkYWV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgRXhjbHVzaXZlICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQSBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikNCisgKi8NCisjZGVmaW5lICAgICBfX0xEQUVYICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fbGRhZXgNCisNCisNCisvKioNCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgRXhjbHVzaXZlICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMQiBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorI2RlZmluZSAgICAgX19TVExFWEIgICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0bGV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlIEV4Y2x1c2l2ZSAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVExIIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorI2RlZmluZSAgICAgX19TVExFWEggICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0bGV4DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTdG9yZS1SZWxlYXNlIEV4Y2x1c2l2ZSAoMzIgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVEwgZXhjbHVzaXZlIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZA0KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQNCisgKi8NCisjZGVmaW5lICAgICBfX1NUTEVYICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RsZXgNCisNCisjZW5kaWYgLyogKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkgKi8NCisNCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgKi8NCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjICBDb21waWxlciBzcGVjaWZpYyBJbnRyaW5zaWNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MNCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgU0lNRCBpbnN0cnVjdGlvbnMNCisgIEB7DQorKi8NCisNCisjaWYgKF9fQVJNX0ZFQVRVUkVfRFNQID09IDFVKSAgICAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBUaGlzIHNob3VsZCBiZSBBUkNIID49IEFSTXY3LU0gKyBTSU1EICovDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2FkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1YWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3N1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzdWI4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hzdWI4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1c3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaGFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaHN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhc3ggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVhc3ggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aGFzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzYXggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzYXggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aHNheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQUQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXNhZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FEQTgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzYWRhOCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisjZGVmaW5lIF9fU1NBVDE2KEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInNzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCisjZGVmaW5lIF9fVVNBVDE2KEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInVzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVhUQjE2KHVpbnQzMl90IG9wMSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInV4dGIxNiAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXh0YWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEIxNih1aW50MzJfdCBvcDEpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzeHRiMTYgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1hUQUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInN4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVBRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtdWFkICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQURYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic211YWR4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MQUQodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpDQorew0KKyAgICB1bmlvbiBsbHJlZ191DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IHczMlsyXTsNCisgICAgICAgIHVpbnQ2NF90IHc2NDsNCisgICAgfSBsbHI7DQorICAgIGxsci53NjQgPSBhY2M7DQorDQorI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWxkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlsxXSksICI9ciIobGxyLnczMlswXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzFdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMF0pKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIChsbHIudzY0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykNCit7DQorICAgIHVuaW9uIGxscmVnX3UNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgdzMyWzJdOw0KKyAgICAgICAgdWludDY0X3QgdzY0Ow0KKyAgICB9IGxscjsNCisgICAgbGxyLnc2NCA9IGFjYzsNCisNCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMV0pLCAiPXIiKGxsci53MzJbMF0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlsxXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzBdKSk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAobGxyLnc2NCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtdXNkICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VU0RYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic211c2R4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0QodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MU0xEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpDQorew0KKyAgICB1bmlvbiBsbHJlZ191DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IHczMlsyXTsNCisgICAgICAgIHVpbnQ2NF90IHc2NDsNCisgICAgfSBsbHI7DQorICAgIGxsci53NjQgPSBhY2M7DQorDQorI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlsxXSksICI9ciIobGxyLnczMlswXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzFdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMF0pKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIChsbHIudzY0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykNCit7DQorICAgIHVuaW9uIGxscmVnX3UNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgdzMyWzJdOw0KKyAgICAgICAgdWludDY0X3QgdzY0Ow0KKyAgICB9IGxscjsNCisgICAgbGxyLnc2NCA9IGFjYzsNCisNCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzBdKSwgIj1yIihsbHIudzMyWzFdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlsxXSkpOw0KKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2xkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMV0pLCAiPXIiKGxsci53MzJbMF0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlsxXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzBdKSk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiAobGxyLnc2NCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TRUwodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzZWwgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RQUREKGludDMyX3Qgb3AxLCAgaW50MzJfdCBvcDIpDQorew0KKyAgICBpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhZGQgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RU1VCKGludDMyX3Qgb3AxLCAgaW50MzJfdCBvcDIpDQorew0KKyAgICBpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzdWIgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKyNkZWZpbmUgX19QS0hCVChBUkcxLEFSRzIsQVJHMykgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpLCBfX0FSRzIgPSAoQVJHMik7IFwNCisgIF9fQVNNICgicGtoYnQgJTAsICUxLCAlMiwgbHNsICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCisjZGVmaW5lIF9fUEtIVEIoQVJHMSxBUkcyLEFSRzMpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcDQorICBpZiAoQVJHMyA9PSAwKSBcDQorICAgIF9fQVNNICgicGtodGIgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMikgICk7IFwNCisgIGVsc2UgXA0KKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIsIGFzciAlMyIgOiAiPXIiIChfX1JFUykgOiAgInIiIChfX0FSRzEpLCAiciIgKF9fQVJHMiksICJJIiAoQVJHMykgICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTUxBKGludDMyX3Qgb3AxLCBpbnQzMl90IG9wMiwgaW50MzJfdCBvcDMpDQorew0KKyAgICBpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNtbWxhICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KTogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorI2VuZGlmIC8qIChfX0FSTV9GRUFUVVJFX0RTUCA9PSAxVSkgKi8NCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgKi8NCisNCisNCisjZW5kaWYgLyogX19DTVNJU19BUk1DQ19WNl9IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jbXNpc19nY2MuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjOGYwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY21zaXNfZ2NjLmgKQEAgLTAsMCArMSwxMzg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIGNtc2lzX2djYy5oDQorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24vSW5zdHJ1Y3Rpb24gSGVhZGVyIEZpbGUNCisgKiBAdmVyc2lvbiAgVjQuMzANCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRA0KKw0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQNCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICAgKg0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWZuZGVmIF9fQ01TSVNfR0NDX0gNCisjZGVmaW5lIF9fQ01TSVNfR0NDX0gNCisNCisvKiBpZ25vcmUgc29tZSBHQ0Mgd2FybmluZ3MgKi8NCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2lnbi1jb252ZXJzaW9uIg0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIg0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcGFyYW1ldGVyIg0KKyNlbmRpZg0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQ0KKyAgICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgQ01TSVMgQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5hYmxlIElSUSBJbnRlcnJ1cHRzDQorICBcZGV0YWlscyBFbmFibGVzIElSUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4NCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZW5hYmxlX2lycSh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoImNwc2llIGkiIDogOiA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBEaXNhYmxlIElSUSBJbnRlcnJ1cHRzDQorICBcZGV0YWlscyBEaXNhYmxlcyBJUlEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBJLWJpdCBpbiB0aGUgQ1BTUi4NCisgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZCBpIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQ09OVFJPTCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBjb250cm9sIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQ29udHJvbCBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgV3JpdGVzIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQ29udHJvbCBSZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0NPTlRST0wodWludDMyX3QgY29udHJvbCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgY29udHJvbCwgJTAiIDogOiAiciIoY29udHJvbCkgOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IElQU1IgUmVnaXN0ZXINCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgSVBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfSVBTUih2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBpcHNyIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3Rlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgQVBTUiBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9BUFNSKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGFwc3IiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSB4UFNSIFJlZ2lzdGVyLg0KKw0KKyAgICBccmV0dXJuICAgICAgICAgICAgICAgeFBTUiBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfeFBTUih2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCB4cHNyIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuDQorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQIFJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QU1Aodm9pZCkNCit7DQorICAgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoIk1SUyAlMCwgcHNwXG4iICA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLg0KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZQcm9jU3RhY2sgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFNQKHVpbnQzMl90IHRvcE9mUHJvY1N0YWNrKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBwc3AsICUwXG4iIDogOiAiciIodG9wT2ZQcm9jU3RhY2spIDogInNwIik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlcg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUCBSZWdpc3RlciB2YWx1ZQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIG1zcFxuIiA6ICI9ciIocmVzdWx0KSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgTWFpbiBTdGFjayBQb2ludGVyDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLg0KKw0KKyAgICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1AodWludDMyX3QgdG9wT2ZNYWluU3RhY2spDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIG1zcCwgJTBcbiIgOiA6ICJyIih0b3BPZk1haW5TdGFjaykgOiAic3AiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaw0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJpb3JpdHkgbWFzayBiaXQgZnJvbSB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QUklNQVNLKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIHByaW1hc2siIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIHByaU1hc2sgIFByaW9yaXR5IE1hc2sNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBwcmltYXNrLCAlMCIgOiA6ICJyIihwcmlNYXNrKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5hYmxlIEZJUQ0KKyAgXGRldGFpbHMgRW5hYmxlcyBGSVEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuDQorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2VuYWJsZV9mYXVsdF9pcnEodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJjcHNpZSBmIiA6IDogOiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGlzYWJsZSBGSVENCisgIFxkZXRhaWxzIERpc2FibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLg0KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19kaXNhYmxlX2ZhdWx0X2lycSh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoImNwc2lkIGYiIDogOiA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQ0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9CQVNFUFJJKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJNUlMgJTAsIGJhc2VwcmkiIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5DQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUkkodWludDMyX3QgdmFsdWUpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVNSIGJhc2VwcmksICUwIiA6IDogInIiKHZhbHVlKSA6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgb25seSBpZiBCQVNFUFJJIG1hc2tpbmcgaXMgZGlzYWJsZWQsDQorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4NCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0DQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUklfTUFYKHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIk1TUiBiYXNlcHJpX21heCwgJTAiIDogOiAiciIodmFsdWUpIDogIm1lbW9yeSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrDQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZhdWx0IE1hc2sgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiTVJTICUwLCBmYXVsdG1hc2siIDogIj1yIihyZXN1bHQpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBGYXVsdCBNYXNrDQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4NCisgIFxwYXJhbSBbaW5dICAgIGZhdWx0TWFzayAgRmF1bHQgTWFzayB2YWx1ZSB0byBzZXQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRkFVTFRNQVNLKHVpbnQzMl90IGZhdWx0TWFzaykNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJNU1IgZmF1bHRtYXNrLCAlMCIgOiA6ICJyIihmYXVsdE1hc2spIDogIm1lbW9yeSIpOw0KK30NCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpICovDQorDQorDQorI2lmICAgICAgIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkNCisNCisvKioNCisgIFxicmllZiAgIEdldCBGUFNDUg0KKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuDQorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpDQorew0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpDQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJWTVJTICUwLCBmcHNjciIgOiAiPXIiKHJlc3VsdCkpOw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7DQorICAgIHJldHVybiAocmVzdWx0KTsNCisjZWxzZQ0KKyAgICByZXR1cm4gKDApOw0KKyNlbmRpZg0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBGUFNDUg0KKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLg0KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldA0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GUFNDUih1aW50MzJfdCBmcHNjcikNCit7DQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkNCisgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgiIik7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJWTVNSIGZwc2NyLCAlMCIgOiA6ICJyIihmcHNjcikgOiAidmZwY2MiKTsNCisgICAgX19BU00gdm9sYXRpbGUoIiIpOw0KKyNlbmRpZg0KK30NCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKSAqLw0KKw0KKw0KKw0KKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKy8qIERlZmluZSBtYWNyb3MgZm9yIHBvcnRpbmcgdG8gYm90aCB0aHVtYjEgYW5kIHRodW1iMi4NCisgKiBGb3IgdGh1bWIxLCB1c2UgbG93IHJlZ2lzdGVyIChyMC1yNyksIHNwZWNpZmllZCBieSBjb25zdHJhaW50ICJsIg0KKyAqIE90aGVyd2lzZSwgdXNlIGdlbmVyYWwgcmVnaXN0ZXJzLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAiciIgKi8NCisjaWYgZGVmaW5lZCAoX190aHVtYl9fKSAmJiAhZGVmaW5lZCAoX190aHVtYjJfXykNCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1sIiAocikNCisjZGVmaW5lIF9fQ01TSVNfR0NDX1VTRV9SRUcocikgImwiIChyKQ0KKyNlbHNlDQorI2RlZmluZSBfX0NNU0lTX0dDQ19PVVRfUkVHKHIpICI9ciIgKHIpDQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJyIiAocikNCisjZW5kaWYNCisNCisvKioNCisgIFxicmllZiAgIE5vIE9wZXJhdGlvbg0KKyAgXGRldGFpbHMgTm8gT3BlcmF0aW9uIGRvZXMgbm90aGluZy4gVGhpcyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBmb3IgY29kZSBhbGlnbm1lbnQgcHVycG9zZXMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fTk9QKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgibm9wIik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgV2FpdCBGb3IgSW50ZXJydXB0DQorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1dGSSh2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoIndmaSIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFdhaXQgRm9yIEV2ZW50DQorICBcZGV0YWlscyBXYWl0IEZvciBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBwZXJtaXRzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXINCisgICAgYSBsb3ctcG93ZXIgc3RhdGUgdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fV0ZFKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgid2ZlIik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2VuZCBFdmVudA0KKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NFVih2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoInNldiIpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyDQorICBcZGV0YWlscyBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllciBmbHVzaGVzIHRoZSBwaXBlbGluZSBpbiB0aGUgcHJvY2Vzc29yLA0KKyAgICAgICAgICAgc28gdGhhdCBhbGwgaW5zdHJ1Y3Rpb25zIGZvbGxvd2luZyB0aGUgSVNCIGFyZSBmZXRjaGVkIGZyb20gY2FjaGUgb3IgbWVtb3J5LA0KKyAgICAgICAgICAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19JU0Iodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJpc2IgMHhGIjo6OiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcg0KKyAgXGRldGFpbHMgQWN0cyBhcyBhIHNwZWNpYWwga2luZCBvZiBEYXRhIE1lbW9yeSBCYXJyaWVyLg0KKyAgICAgICAgICAgSXQgY29tcGxldGVzIHdoZW4gYWxsIGV4cGxpY2l0IG1lbW9yeSBhY2Nlc3NlcyBiZWZvcmUgdGhpcyBpbnN0cnVjdGlvbiBjb21wbGV0ZS4NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19EU0Iodm9pZCkNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJkc2IgMHhGIjo6OiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRGF0YSBNZW1vcnkgQmFycmllcg0KKyAgXGRldGFpbHMgRW5zdXJlcyB0aGUgYXBwYXJlbnQgb3JkZXIgb2YgdGhlIGV4cGxpY2l0IG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZQ0KKyAgICAgICAgICAgYW5kIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiwgd2l0aG91dCBlbnN1cmluZyB0aGVpciBjb21wbGV0aW9uLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX0RNQih2b2lkKQ0KK3sNCisgICAgX19BU00gdm9sYXRpbGUoImRtYiAweEYiOjo6ICJtZW1vcnkiKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDMyIGJpdCkNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGludGVnZXIgdmFsdWUuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVih1aW50MzJfdCB2YWx1ZSkNCit7DQorI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDUpDQorICAgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih2YWx1ZSk7DQorI2Vsc2UNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicmV2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHKHZhbHVlKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCisjZW5kaWYNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDE2IGJpdCkNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIHR3byB1bnNpZ25lZCBzaG9ydCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQ0KKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JFVjE2KHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicmV2MTYgJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcodmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciBpbiBzaWduZWQgc2hvcnQgdmFsdWUNCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGEgc2lnbmVkIHNob3J0IHZhbHVlIHdpdGggc2lnbiBleHRlbnNpb24gdG8gaW50ZWdlci4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIGludDMyX3QgX19SRVZTSChpbnQzMl90IHZhbHVlKQ0KK3sNCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkNCisgICAgcmV0dXJuIChzaG9ydClfX2J1aWx0aW5fYnN3YXAxNih2YWx1ZSk7DQorI2Vsc2UNCisgICAgaW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJyZXZzaCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyhyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyh2YWx1ZSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorI2VuZGlmDQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IGluIHVuc2lnbmVkIHZhbHVlICgzMiBiaXQpDQorICBcZGV0YWlscyBSb3RhdGUgUmlnaHQgKGltbWVkaWF0ZSkgcHJvdmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHJvdGF0ZWQgYnkgYSB2YXJpYWJsZSBudW1iZXIgb2YgYml0cy4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUNCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBOdW1iZXIgb2YgQml0cyB0byByb3RhdGUNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JPUih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHJldHVybiAob3AxID4+IG9wMikgfCAob3AxIDw8ICgzMlUgLSBvcDIpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBCcmVha3BvaW50DQorICBcZGV0YWlscyBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBlbnRlciBEZWJ1ZyBzdGF0ZS4NCisgICAgICAgICAgIERlYnVnIHRvb2xzIGNhbiB1c2UgdGhpcyB0byBpbnZlc3RpZ2F0ZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgaXMgcmVhY2hlZC4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBpcyBpZ25vcmVkIGJ5IHRoZSBwcm9jZXNzb3IuDQorICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgYSBkZWJ1Z2dlciBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJyZWFrcG9pbnQuDQorICovDQorI2RlZmluZSBfX0JLUFQodmFsdWUpICAgICAgICAgICAgICAgICAgICAgICBfX0FTTSB2b2xhdGlsZSAoImJrcHQgIiN2YWx1ZSkNCisNCisNCisvKioNCisgIFxicmllZiAgIFJldmVyc2UgYml0IG9yZGVyIG9mIHZhbHVlDQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYml0IG9yZGVyIG9mIHRoZSBnaXZlbiB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlDQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkJJVCh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisjaWYgICAgICAgKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKQ0KKyAgICBfX0FTTSB2b2xhdGlsZSgicmJpdCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogInIiKHZhbHVlKSk7DQorI2Vsc2UNCisgICAgaW50MzJfdCBzID0gNCAvKnNpemVvZih2KSovICogOCAtIDE7IC8qIGV4dHJhIHNoaWZ0IG5lZWRlZCBhdCBlbmQgKi8NCisNCisgICAgcmVzdWx0ID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgIC8qIHIgd2lsbCBiZSByZXZlcnNlZCBiaXRzIG9mIHY7IGZpcnN0IGdldCBMU0Igb2YgdiAqLw0KKw0KKyAgICBmb3IgKHZhbHVlID4+PSAxVTsgdmFsdWU7IHZhbHVlID4+PSAxVSkNCisgICAgew0KKyAgICAgICAgcmVzdWx0IDw8PSAxVTsNCisgICAgICAgIHJlc3VsdCB8PSB2YWx1ZSAmIDFVOw0KKyAgICAgICAgcy0tOw0KKyAgICB9DQorDQorICAgIHJlc3VsdCA8PD0gczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGlmdCB3aGVuIHYncyBoaWdoZXN0IGJpdHMgYXJlIHplcm8gKi8NCisjZW5kaWYNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIENvdW50IGxlYWRpbmcgemVyb3MNCisgIFxkZXRhaWxzIENvdW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2YgYSBkYXRhIHZhbHVlLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBjb3VudCB0aGUgbGVhZGluZyB6ZXJvcw0KKyAgXHJldHVybiAgICAgICAgICAgICBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19DTFogICAgICAgICAgICAgX19idWlsdGluX2Nseg0KKw0KKw0KKyNpZiAgICAgICAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSRVhCKHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJleGIgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqYWRkcikpOw0KKyNlbHNlDQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdA0KKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uDQorICAgICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJleGIgJTAsIFslMV0iIDogIj1yIihyZXN1bHQpIDogInIiKGFkZHIpIDogIm1lbW9yeSIpOw0KKyNlbmRpZg0KKyAgICByZXR1cm4gKCh1aW50OF90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8NCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgxNiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERSRVhIKHZvbGF0aWxlIHVpbnQxNl90ICphZGRyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQ0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyZXhoICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKmFkZHIpKTsNCisjZWxzZQ0KKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QNCisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLg0KKyAgICAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyZXhoICUwLCBbJTFdIiA6ICI9ciIocmVzdWx0KSA6ICJyIihhZGRyKSA6ICJtZW1vcnkiKTsNCisjZW5kaWYNCisgICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19MRFJFWFcodm9sYXRpbGUgdWludDMyX3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJsZHJleCAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogIlEiKCphZGRyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICg4IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZA0KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhCKHVpbnQ4X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdHJleGIgJTAsICUyLCAlMSIgOiAiPSZyIihyZXN1bHQpLCAiPVEiKCphZGRyKSA6ICJyIigodWludDMyX3QpdmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYSCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdHJleGggJTAsICUyLCAlMSIgOiAiPSZyIihyZXN1bHQpLCAiPVEiKCphZGRyKSA6ICJyIigodWludDMyX3QpdmFsdWUpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUNCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQNCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NUUkVYVyh1aW50MzJfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDMyX3QgKmFkZHIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdHJleCAlMCwgJTIsICUxIiA6ICI9JnIiKHJlc3VsdCksICI9USIoKmFkZHIpIDogInIiKHZhbHVlKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBSZW1vdmUgdGhlIGV4Y2x1c2l2ZSBsb2NrDQorICBcZGV0YWlscyBSZW1vdmVzIHRoZSBleGNsdXNpdmUgbG9jayB3aGljaCBpcyBjcmVhdGVkIGJ5IExEUkVYLg0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX0NMUkVYKHZvaWQpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgiY2xyZXgiIDo6OiAibWVtb3J5Iik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU2lnbmVkIFNhdHVyYXRlDQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYSBzaWduZWQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZA0KKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDEuLjMyKQ0KKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUNCisgKi8NCisjZGVmaW5lIF9fU1NBVChBUkcxLEFSRzIpIFwNCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXA0KKyAgX19BU00gKCJzc2F0ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgVW5zaWduZWQgU2F0dXJhdGUNCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhbiB1bnNpZ25lZCB2YWx1ZS4NCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkDQorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMC4uMzEpDQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQ0KKyAqLw0KKyNkZWZpbmUgX19VU0FUKEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcDQorICBfX0FTTSAoInVzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwNCisgIF9fUkVTOyBcDQorIH0pDQorDQorDQorLyoqDQorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgd2l0aCBFeHRlbmQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIE1vdmVzIGVhY2ggYml0IG9mIGEgYml0c3RyaW5nIHJpZ2h0IGJ5IG9uZSBiaXQuDQorICAgICAgICAgICBUaGUgY2FycnkgaW5wdXQgaXMgc2hpZnRlZCBpbiBhdCB0aGUgbGVmdCBlbmQgb2YgdGhlIGJpdHN0cmluZy4NCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUNCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JSWCh1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInJyeCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyhyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyh2YWx1ZSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERSQlQodm9sYXRpbGUgdWludDhfdCAqYWRkcikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkNCisgICAgX19BU00gdm9sYXRpbGUoImxkcmJ0ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKmFkZHIpKTsNCisjZWxzZQ0KKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QNCisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLg0KKyAgICAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyYnQgJTAsIFslMV0iIDogIj1yIihyZXN1bHQpIDogInIiKGFkZHIpIDogIm1lbW9yeSIpOw0KKyNlbmRpZg0KKyAgICByZXR1cm4gKCh1aW50OF90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8NCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4NCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhDQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQ0KKyAqLw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgX19MRFJIVCh2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkNCisgICAgX19BU00gdm9sYXRpbGUoImxkcmh0ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiUSIoKmFkZHIpKTsNCisjZWxzZQ0KKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QNCisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLg0KKyAgICAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgibGRyaHQgJTAsIFslMV0iIDogIj1yIihyZXN1bHQpIDogInIiKGFkZHIpIDogIm1lbW9yeSIpOw0KKyNlbmRpZg0KKyAgICByZXR1cm4gKCh1aW50MTZfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovDQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQ0KKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikNCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTERSVCh2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoImxkcnQgJTAsICUxIiA6ICI9ciIocmVzdWx0KSA6ICJRIigqYWRkcikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDggYml0KQ0KKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSQlQodWludDhfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDhfdCAqYWRkcikNCit7DQorICAgIF9fQVNNIHZvbGF0aWxlKCJzdHJidCAlMSwgJTAiIDogIj1RIigqYWRkcikgOiAiciIoKHVpbnQzMl90KXZhbHVlKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkNCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuDQorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlDQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24NCisgKi8NCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJIVCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKmFkZHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RyaHQgJTEsICUwIiA6ICI9USIoKmFkZHIpIDogInIiKCh1aW50MzJfdCl2YWx1ZSkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpDQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLg0KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQ0KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uDQorICovDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fU1RSVCh1aW50MzJfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDMyX3QgKmFkZHIpDQorew0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3RydCAlMSwgJTAiIDogIj1RIigqYWRkcikgOiAiciIodmFsdWUpKTsNCit9DQorDQorI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkgKi8NCisNCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgKi8NCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjICBDb21waWxlciBzcGVjaWZpYyBJbnRyaW5zaWNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MNCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgU0lNRCBpbnN0cnVjdGlvbnMNCisgIEB7DQorKi8NCisNCisjaWYgKF9fQ09SVEVYX00gPj0gMHgwNFUpICAvKiBvbmx5IGZvciBDb3J0ZXgtTTQgYW5kIGFib3ZlICovDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2FkZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1YWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3N1YjggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzdWI4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic2hzdWI4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1c3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaGFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzaHN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidWhzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFhc3ggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVhc3ggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUUFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxYXN4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aGFzeCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInFzYXggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNoc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzYXggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VUVNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVxc2F4ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1aHNheCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQUQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXNhZDggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FEQTgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInVzYWRhOCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisjZGVmaW5lIF9fU1NBVDE2KEFSRzEsQVJHMikgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICBpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwNCisgIF9fQVNNICgic3NhdDE2ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKw0KKyNkZWZpbmUgX19VU0FUMTYoQVJHMSxBUkcyKSBcDQorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwNCisgIF9fQVNNICgidXNhdDE2ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRCMTYodWludDMyX3Qgb3AxKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgidXh0YjE2ICUwLCAlMSIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VYVEFCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJ1eHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1hUQjE2KHVpbnQzMl90IG9wMSkNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInN4dGIxNiAlMCwgJTEiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSkpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic3h0YWIxNiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic211YWQgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVBRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbXVhZHggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTEFEWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxBTEQodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykNCit7DQorICAgIHVuaW9uIGxscmVnX3UNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgdzMyWzJdOw0KKyAgICAgICAgdWludDY0X3QgdzY0Ow0KKyAgICB9IGxscjsNCisgICAgbGxyLnc2NCA9IGFjYzsNCisNCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMF0pLCAiPXIiKGxsci53MzJbMV0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlswXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzFdKSk7DQorI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzFdKSwgIj1yIihsbHIudzMyWzBdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMV0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlswXSkpOw0KKyNlbmRpZg0KKw0KKyAgICByZXR1cm4gKGxsci53NjQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQ0KK3sNCisgICAgdW5pb24gbGxyZWdfdQ0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCB3MzJbMl07DQorICAgICAgICB1aW50NjRfdCB3NjQ7DQorICAgIH0gbGxyOw0KKyAgICBsbHIudzY0ID0gYWNjOw0KKw0KKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMF0pLCAiPXIiKGxsci53MzJbMV0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlswXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzFdKSk7DQorI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxhbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlsxXSksICI9ciIobGxyLnczMlswXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzFdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMF0pKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIChsbHIudzY0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic211c2QgJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRFgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpDQorew0KKyAgICB1aW50MzJfdCByZXN1bHQ7DQorDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbXVzZHggJTAsICUxLCAlMiIgOiAiPXIiKHJlc3VsdCkgOiAiciIob3AxKSwgInIiKG9wMikpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2QgJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpIDogInIiKG9wMSksICJyIihvcDIpLCAiciIob3AzKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTFNEWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQ0KK3sNCisgICAgdWludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2R4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSwgInIiKG9wMykpOw0KKyAgICByZXR1cm4gKHJlc3VsdCk7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxTTEQodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykNCit7DQorICAgIHVuaW9uIGxscmVnX3UNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgdzMyWzJdOw0KKyAgICAgICAgdWludDY0X3QgdzY0Ow0KKyAgICB9IGxscjsNCisgICAgbGxyLnc2NCA9IGFjYzsNCisNCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8NCisgICAgX19BU00gdm9sYXRpbGUoInNtbHNsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMF0pLCAiPXIiKGxsci53MzJbMV0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlswXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzFdKSk7DQorI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIihsbHIudzMyWzFdKSwgIj1yIihsbHIudzMyWzBdKTogInIiKG9wMSksICJyIihvcDIpICwgIjAiKGxsci53MzJbMV0pLA0KKyAgICAgICAgICAgICAgICAgICAiMSIobGxyLnczMlswXSkpOw0KKyNlbmRpZg0KKw0KKyAgICByZXR1cm4gKGxsci53NjQpOw0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MU0xEWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQ0KK3sNCisgICAgdW5pb24gbGxyZWdfdQ0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCB3MzJbMl07DQorICAgICAgICB1aW50NjRfdCB3NjQ7DQorICAgIH0gbGxyOw0KKyAgICBsbHIudzY0ID0gYWNjOw0KKw0KKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21sc2xkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiKGxsci53MzJbMF0pLCAiPXIiKGxsci53MzJbMV0pOiAiciIob3AxKSwgInIiKG9wMikgLCAiMCIobGxyLnczMlswXSksDQorICAgICAgICAgICAgICAgICAgICIxIihsbHIudzMyWzFdKSk7DQorI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovDQorICAgIF9fQVNNIHZvbGF0aWxlKCJzbWxzbGR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIobGxyLnczMlsxXSksICI9ciIobGxyLnczMlswXSk6ICJyIihvcDEpLCAiciIob3AyKSAsICIwIihsbHIudzMyWzFdKSwNCisgICAgICAgICAgICAgICAgICAgIjEiKGxsci53MzJbMF0pKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuIChsbHIudzY0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NFTCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikNCit7DQorICAgIHVpbnQzMl90IHJlc3VsdDsNCisNCisgICAgX19BU00gdm9sYXRpbGUoInNlbCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSAgaW50MzJfdCBfX1FBREQoaW50MzJfdCBvcDEsICBpbnQzMl90IG9wMikNCit7DQorICAgIGludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicWFkZCAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSAgaW50MzJfdCBfX1FTVUIoaW50MzJfdCBvcDEsICBpbnQzMl90IG9wMikNCit7DQorICAgIGludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgicXN1YiAlMCwgJTEsICUyIiA6ICI9ciIocmVzdWx0KSA6ICJyIihvcDEpLCAiciIob3AyKSk7DQorICAgIHJldHVybiAocmVzdWx0KTsNCit9DQorDQorI2RlZmluZSBfX1BLSEJUKEFSRzEsQVJHMixBUkczKSBcDQorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSksIF9fQVJHMiA9IChBUkcyKTsgXA0KKyAgX19BU00gKCJwa2hidCAlMCwgJTEsICUyLCBsc2wgJTMiIDogIj1yIiAoX19SRVMpIDogICJyIiAoX19BUkcxKSwgInIiIChfX0FSRzIpLCAiSSIgKEFSRzMpICApOyBcDQorICBfX1JFUzsgXA0KKyB9KQ0KKw0KKyNkZWZpbmUgX19QS0hUQihBUkcxLEFSRzIsQVJHMykgXA0KKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpLCBfX0FSRzIgPSAoQVJHMik7IFwNCisgIGlmIChBUkczID09IDApIFwNCisgICAgX19BU00gKCJwa2h0YiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSAgKTsgXA0KKyAgZWxzZSBcDQorICAgIF9fQVNNICgicGtodGIgJTAsICUxLCAlMiwgYXNyICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXA0KKyAgX19SRVM7IFwNCisgfSkNCisNCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01NTEEoaW50MzJfdCBvcDEsIGludDMyX3Qgb3AyLCBpbnQzMl90IG9wMykNCit7DQorICAgIGludDMyX3QgcmVzdWx0Ow0KKw0KKyAgICBfX0FTTSB2b2xhdGlsZSgic21tbGEgJTAsICUxLCAlMiwgJTMiIDogIj1yIihyZXN1bHQpOiAiciIob3AxKSwgInIiKG9wMiksICJyIihvcDMpKTsNCisgICAgcmV0dXJuIChyZXN1bHQpOw0KK30NCisNCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwNCkgKi8NCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgKi8NCisNCisNCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcA0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX0NNU0lTX0dDQ19IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtNC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NmVlZDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY200LmgKQEAgLTAsMCArMSwxOTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIGNvcmVfY200LmgNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU00IENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUNCisgKiBAdmVyc2lvbiAgVjQuMzANCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRA0KKw0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQNCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICAgKg0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19DT1JFX0NNNF9IX0dFTkVSSUMNCisjZGVmaW5lIF9fQ09SRV9DTTRfSF9HRU5FUklDDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucw0KKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6DQorDQorICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+DQorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4NCisNCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4NCisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLg0KKw0KKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+DQorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLg0KKyAqLw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioNCisgIFxpbmdyb3VwIENvcnRleF9NNA0KKyAgQHsNCisgKi8NCisNCisvKiAgQ01TSVMgQ000IGRlZmluaXRpb25zICovDQorI2RlZmluZSBfX0NNNF9DTVNJU19WRVJTSU9OX01BSU4gICgweDA0VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzMxOjE2XSBDTVNJUyBIQUwgbWFpbiB2ZXJzaW9uICovDQorI2RlZmluZSBfX0NNNF9DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8NCisjZGVmaW5lIF9fQ000X0NNU0lTX1ZFUlNJT04gICAgICAgKChfX0NNNF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NNNF9DTVNJU19WRVJTSU9OX1NVQiAgICAgICAgICAgKSAgICAgICAgLyohPCBDTVNJUyBIQUwgdmVyc2lvbiBudW1iZXIgKi8NCisNCisjZGVmaW5lIF9fQ09SVEVYX00gICAgICAgICAgICAgICAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXgtTSBDb3JlICovDQorDQorDQorI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkNCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLw0KKyNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovDQorI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQ0KKw0KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApDQorI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLw0KKyNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUNCisNCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgR05VIENvbXBpbGVyICovDQorI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8NCisjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQ0KKw0KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLw0KKyNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyLiBPbmx5IGF2YWlsYWJsZSBpbiBIaWdoIG9wdGltaXphdGlvbiBtb2RlISAqLw0KKyNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEkgQ0NTIENvbXBpbGVyICovDQorI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUNCisNCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLw0KKyNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLw0KKyNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkNCisjZGVmaW5lIF9fcGFja2VkDQorI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLw0KKyNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIuIFVzZSAtcGM5OSBvbiBjb21waWxlIGxpbmUgKi8NCisjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQ0KKw0KKyNlbHNlDQorI2Vycm9yIFVua25vd24gY29tcGlsZXINCisjZW5kaWYNCisNCisvKiogX19GUFVfVVNFRCBpbmRpY2F0ZXMgd2hldGhlciBhbiBGUFUgaXMgdXNlZCBvciBub3QuDQorICAgIEZvciB0aGlzLCBfX0ZQVV9QUkVTRU5UIGhhcyB0byBiZSBjaGVja2VkIHByaW9yIHRvIG1ha2luZyB1c2Ugb2YgRlBVIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgZnVuY3Rpb25zLg0KKyovDQorI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApDQorI2lmIGRlZmluZWQgX19UQVJHRVRfRlBVX1ZGUA0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUNCisjZWxzZQ0KKyNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSINCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUNCisjZW5kaWYNCisjZWxzZQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVDQorI2VuZGlmDQorDQorI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkNCisjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQDQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDEpDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVDQorI2Vsc2UNCisjd2FybmluZyAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSINCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUNCisjZW5kaWYNCisjZWxzZQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVDQorI2VuZGlmDQorDQorI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjaWYgZGVmaW5lZCAoX19WRlBfRlBfXykgJiYgIWRlZmluZWQoX19TT0ZURlBfXykNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVDQorI2Vsc2UNCisjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVDQorI2VuZGlmDQorI2Vsc2UNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQ0KKyNlbmRpZg0KKw0KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjaWYgZGVmaW5lZCBfX0FSTVZGUF9fDQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQ0KKyNlbHNlDQorI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIg0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQ0KKyNlbmRpZg0KKyNlbHNlDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUNCisjZW5kaWYNCisNCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApDQorI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fDQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQ0KKyNlbHNlDQorI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIg0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQ0KKyNlbmRpZg0KKyNlbHNlDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUNCisjZW5kaWYNCisNCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQ0KKyNpZiBkZWZpbmVkIF9fRlBVX1ZGUF9fDQorI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQ0KKyNlbHNlDQorI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIg0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQ0KKyNlbmRpZg0KKyNlbHNlDQorI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUNCisjZW5kaWYNCisNCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQ0KKyNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQ0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkNCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUNCisjZWxzZQ0KKyNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSINCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUNCisjZW5kaWYNCisjZWxzZQ0KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVDQorI2VuZGlmDQorDQorI2VuZGlmDQorDQorI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLw0KKyNpbmNsdWRlICJjb3JlX2NtRnVuYy5oIiAgICAgICAgICAgICAgICAgLyogQ29yZSBGdW5jdGlvbiBBY2Nlc3MgKi8NCisjaW5jbHVkZSAiY29yZV9jbVNpbWQuaCIgICAgICAgICAgICAgICAgIC8qIENvbXBpbGVyIHNwZWNpZmljIFNJTUQgSW50cmluc2ljcyAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX19DT1JFX0NNNF9IX0dFTkVSSUMgKi8NCisNCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQw0KKw0KKyNpZm5kZWYgX19DT1JFX0NNNF9IX0RFUEVOREFOVA0KKyNkZWZpbmUgX19DT1JFX0NNNF9IX0RFUEVOREFOVA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIGNoZWNrIGRldmljZSBkZWZpbmVzIGFuZCB1c2UgZGVmYXVsdHMgKi8NCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTDQorI2lmbmRlZiBfX0NNNF9SRVYNCisjZGVmaW5lIF9fQ000X1JFViAgICAgICAgICAgICAgIDB4MDAwMFUNCisjd2FybmluZyAiX19DTTRfUkVWIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0ZQVV9QUkVTRU5UDQorI2RlZmluZSBfX0ZQVV9QUkVTRU5UICAgICAgICAgICAgIDBVDQorI3dhcm5pbmcgIl9fRlBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISINCisjZW5kaWYNCisNCisjaWZuZGVmIF9fTVBVX1BSRVNFTlQNCisjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMFUNCisjd2FybmluZyAiX19NUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19OVklDX1BSSU9fQklUUw0KKyNkZWZpbmUgX19OVklDX1BSSU9fQklUUyAgICAgICAgICA0VQ0KKyN3YXJuaW5nICJfX05WSUNfUFJJT19CSVRTIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnDQorI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVDQorI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISINCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8NCisvKioNCisgICAgXGRlZmdyb3VwIENNU0lTX2dsb2JfZGVmcyBDTVNJUyBHbG9iYWwgRGVmaW5lcw0KKw0KKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZA0KKyAgICBcbGkgdG8gc3BlY2lmeSB0aGUgYWNjZXNzIHRvIHBlcmlwaGVyYWwgdmFyaWFibGVzLg0KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uDQorKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCisjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8NCisjZWxzZQ0KKyNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLw0KKyNlbmRpZg0KKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLw0KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovDQorDQorLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovDQorI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovDQorI2RlZmluZSAgICAgX19PTSAgICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAnd3JpdGUgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLw0KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLw0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENvcnRleF9NNCAqLw0KKw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFic3RyYWN0aW9uDQorICBDb3JlIFJlZ2lzdGVyIGNvbnRhaW46DQorICAtIENvcmUgUmVnaXN0ZXINCisgIC0gQ29yZSBOVklDIFJlZ2lzdGVyDQorICAtIENvcmUgU0NCIFJlZ2lzdGVyDQorICAtIENvcmUgU3lzVGljayBSZWdpc3Rlcg0KKyAgLSBDb3JlIERlYnVnIFJlZ2lzdGVyDQorICAtIENvcmUgTVBVIFJlZ2lzdGVyDQorICAtIENvcmUgRlBVIFJlZ2lzdGVyDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioNCisgIFxkZWZncm91cCBDTVNJU19jb3JlX3JlZ2lzdGVyIERlZmluZXMgYW5kIFR5cGUgRGVmaW5pdGlvbnMNCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4NCisqLw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwICAgQ01TSVNfQ09SRSAgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycw0KKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLg0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChBUFNSKS4NCisgKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgICBzdHJ1Y3QNCisgICAgew0KKyAgICAgICAgdWludDMyX3QgX3Jlc2VydmVkMDogMTY7ICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMTUgIFJlc2VydmVkICovDQorICAgICAgICB1aW50MzJfdCBHRTogNDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDE2Li4xOSAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIGZsYWdzICovDQorICAgICAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOiA3OyAgICAgICAgICAgICAgLyohPCBiaXQ6IDIwLi4yNiAgUmVzZXJ2ZWQgKi8NCisgICAgICAgIHVpbnQzMl90IFE6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBWOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLw0KKyAgICAgICAgdWludDMyX3QgQzogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8NCisgICAgICAgIHVpbnQzMl90IFo6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8NCisgICAgICAgIHVpbnQzMl90IE46IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovDQorICAgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovDQorICAgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovDQorfSBBUFNSX1R5cGU7DQorDQorLyogQVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQVBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBNYXNrICovDQorDQorI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovDQorI2RlZmluZSBBUFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIE1hc2sgKi8NCisNCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEFQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgTWFzayAqLw0KKw0KKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQVBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBNYXNrICovDQorDQorI2RlZmluZSBBUFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIFBvc2l0aW9uICovDQorI2RlZmluZSBBUFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIE1hc2sgKi8NCisNCisjZGVmaW5lIEFQU1JfR0VfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIFBvc2l0aW9uICovDQorI2RlZmluZSBBUFNSX0dFX01zayAgICAgICAgICAgICAgICAgICAgICAgICgweEZVTCA8PCBBUFNSX0dFX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBHRSBNYXNrICovDQorDQorDQorLyoqDQorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnRlcnJ1cHQgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKElQU1IpLg0KKyAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICAgIHN0cnVjdA0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCBJU1I6IDk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLw0KKyAgICAgICAgdWludDMyX3QgX3Jlc2VydmVkMDogMjM7ICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovDQorICAgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovDQorICAgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovDQorfSBJUFNSX1R5cGU7DQorDQorLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgSVBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIFBvc2l0aW9uICovDQorI2RlZmluZSBJUFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgSVBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgTWFzayAqLw0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuDQorICovDQordHlwZWRlZiB1bmlvbg0KK3sNCisgICAgc3RydWN0DQorICAgIHsNCisgICAgICAgIHVpbnQzMl90IElTUjogOTsgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovDQorICAgICAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOiA3OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4xNSAgUmVzZXJ2ZWQgKi8NCisgICAgICAgIHVpbnQzMl90IEdFOiA0OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMTYuLjE5ICBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgZmxhZ3MgKi8NCisgICAgICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6IDQ7ICAgICAgICAgICAgICAvKiE8IGJpdDogMjAuLjIzICBSZXNlcnZlZCAqLw0KKyAgICAgICAgdWludDMyX3QgVDogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjQgIFRodW1iIGJpdCAgICAgICAgKHJlYWQgMCkgKi8NCisgICAgICAgIHVpbnQzMl90IElUOiAyOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI2ICBzYXZlZCBJVCBzdGF0ZSAgIChyZWFkIDApICovDQorICAgICAgICB1aW50MzJfdCBROiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLw0KKyAgICAgICAgdWludDMyX3QgVjogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8NCisgICAgICAgIHVpbnQzMl90IEM6IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBaOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovDQorICAgICAgICB1aW50MzJfdCBOOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLw0KKyAgICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLw0KKyAgICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLw0KK30geFBTUl9UeXBlOw0KKw0KKy8qIHhQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIHhQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovDQorDQorI2RlZmluZSB4UFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIFBvc2l0aW9uICovDQorI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8NCisNCisjZGVmaW5lIHhQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgUG9zaXRpb24gKi8NCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBNYXNrICovDQorDQorI2RlZmluZSB4UFNSX0lUX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9JVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoM1VMIDw8IHhQU1JfSVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9UX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovDQorDQorI2RlZmluZSB4UFNSX0dFX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBHRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgeFBTUl9HRV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgeFBTUl9HRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgTWFzayAqLw0KKw0KKyNkZWZpbmUgeFBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIFBvc2l0aW9uICovDQorI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLw0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQ29udHJvbCBSZWdpc3RlcnMgKENPTlRST0wpLg0KKyAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICAgIHN0cnVjdA0KKyAgICB7DQorICAgICAgICB1aW50MzJfdCBuUFJJVjogMTsgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgRXhlY3V0aW9uIHByaXZpbGVnZSBpbiBUaHJlYWQgbW9kZSAqLw0KKyAgICAgICAgdWludDMyX3QgU1BTRUw6IDE7ICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDEgIFN0YWNrIHRvIGJlIHVzZWQgKi8NCisgICAgICAgIHVpbnQzMl90IEZQQ0E6IDE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAyICBGUCBleHRlbnNpb24gYWN0aXZlIGZsYWcgKi8NCisgICAgICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6IDI5OyAgICAgICAgICAgICAvKiE8IGJpdDogIDMuLjMxICBSZXNlcnZlZCAqLw0KKyAgICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLw0KKyAgICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLw0KK30gQ09OVFJPTF9UeXBlOw0KKw0KKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIENPTlRST0xfRlBDQV9Qb3MgICAgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IEZQQ0EgUG9zaXRpb24gKi8NCisjZGVmaW5lIENPTlRST0xfRlBDQV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX0ZQQ0FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IEZQQ0EgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8NCisjZGVmaW5lIENPTlRST0xfU1BTRUxfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX1NQU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIE1hc2sgKi8NCisNCisjZGVmaW5lIENPTlRST0xfblBSSVZfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIFBvc2l0aW9uICovDQorI2RlZmluZSBDT05UUk9MX25QUklWX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBDT05UUk9MX25QUklWX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLw0KKw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQ0KKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU9NIHVpbnQzMl90IElTRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQwWzI0VV07DQorICAgIF9fSU9NIHVpbnQzMl90IElDRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSU0VSVkVEMVsyNFVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBJU1BSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDJbMjRVXTsNCisgICAgX19JT00gdWludDMyX3QgSUNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjRVXTsNCisgICAgX19JT00gdWludDMyX3QgSUFCUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjAwIChSL1cpICBJbnRlcnJ1cHQgQWN0aXZlIGJpdCBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDRbNTZVXTsNCisgICAgX19JT00gdWludDhfdCAgSVBbMjQwVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKDhCaXQgd2lkZSkgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQ1WzY0NFVdOw0KKyAgICBfX09NICB1aW50MzJfdCBTVElSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKCAvVykgIFNvZnR3YXJlIFRyaWdnZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovDQorfSAgTlZJQ19UeXBlOw0KKw0KKy8qIFNvZnR3YXJlIFRyaWdnZXJlZCBJbnRlcnJ1cHQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovDQorI2RlZmluZSBOVklDX1NUSVJfSU5USURfTXNrICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgTlZJQ19TVElSX0lOVElEX1BvcyovKSAgICAgICAgLyohPCBTVElSOiBJTlRMSU5FU05VTSBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLw0KKw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCBDTVNJU19TQ0IgICAgIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpDQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycw0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgX19JTSAgdWludDMyX3QgQ1BVSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBDUFVJRCBCYXNlIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IElDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFZUT1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQ4X3QNCisgICAgU0hQWzEyVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzICg0LTcsIDgtMTEsIDEyLTE1KSAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBTSENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IENGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBIRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMkMgKFIvVykgIEhhcmRGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgREZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDMwIChSL1cpICBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgTU1GQVI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNZW1NYW5hZ2UgRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBCRkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEJ1c0ZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQUZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDNDIChSL1cpICBBdXhpbGlhcnkgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovDQorICAgIF9fSU0gIHVpbnQzMl90IFBGUlsyVV07ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0MCAoUi8gKSAgUHJvY2Vzc29yIEZlYXR1cmUgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgREZSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSLyApICBEZWJ1ZyBGZWF0dXJlIFJlZ2lzdGVyICovDQorICAgIF9fSU0gIHVpbnQzMl90IEFEUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0QyAoUi8gKSAgQXV4aWxpYXJ5IEZlYXR1cmUgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgTU1GUls0VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSLyApICBNZW1vcnkgTW9kZWwgRmVhdHVyZSBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBJU0FSWzVVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNjAgKFIvICkgIEluc3RydWN0aW9uIFNldCBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMFs1VV07DQorICAgIF9fSU9NIHVpbnQzMl90IENQQUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4OCAoUi9XKSAgQ29wcm9jZXNzb3IgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIgKi8NCit9IFNDQl9UeXBlOw0KKw0KKy8qIFNDQiBDUFVJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLw0KKw0KKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9JQ1NSX05NSVBFTkRTRVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBOTUlQRU5EU0VUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX01zayAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zKSAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUkVUVE9CQVNFX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovDQorDQorLyogU0NCIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Qb3MgICAgICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgTWFzayAqLw0KKw0KKy8qIFNDQiBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX1BvcyAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MgICAgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2sgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MqLykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgTWFzayAqLw0KKw0KKy8qIFNDQiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TRVZPTlBFTkRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUERFRVBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBPTkVYSVRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQT05FWElUIE1hc2sgKi8NCisNCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfQ0NSX1NUS0FMSUdOX1BvcyAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtBTElHTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfU1RLQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fUG9zICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9CRkhGTk1JR05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9ESVZfMF9UUlBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVU5BTElHTl9UUlAgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DQ1JfTk9OQkFTRVRIUkRFTkFfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IE5PTkJBU0VUSFJERU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX01zayAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBNYXNrICovDQorDQorLyogU0NCIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcyAgICAgICAxNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zICAgICAgIDEzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTWVNUSUNLQUNUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcyAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTU9OSVRPUkFDVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfUG9zICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIC8qPDwgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyovKSAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBNYXNrICovDQorDQorLyogU0NCIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9DRlNSX0JVU0ZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0NGU1JfTUVNRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIC8qPDwgU0NCX0NGU1JfTUVNRkFVTFRTUl9Qb3MqLykgICAgICAgIC8qITwgU0NCIENGU1I6IE1lbW9yeSBNYW5hZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8NCisNCisvKiBTQ0IgSGFyZCBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX1BvcyAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX0RFQlVHRVZUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Qb3MgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9GT1JDRURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0hGU1JfVkVDVFRCTF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IFZFQ1RUQkwgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9WRUNUVEJMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIE1hc2sgKi8NCisNCisvKiBTQ0IgRGVidWcgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfUG9zICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfVkNBVENIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRFdUVFJBUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBNYXNrICovDQorDQorI2RlZmluZSBTQ0JfREZTUl9CS1BUX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0JLUFRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0RGU1JfSEFMVEVEX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovDQorDQorDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX1NDblNDQiBTeXN0ZW0gQ29udHJvbHMgbm90IGluIFNDQiAoU0NuU0NCKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0INCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOw0KKyAgICBfX0lNICB1aW50MzJfdCBJQ1RSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvICkgIEludGVycnVwdCBDb250cm9sbGVyIFR5cGUgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQUNUTFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciAqLw0KK30gU0NuU0NCX1R5cGU7DQorDQorLyogSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUNUUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX01zayAgICAgICAgKDB4RlVMIC8qPDwgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zKi8pICAvKiE8IElDVFI6IElOVExJTkVTTlVNIE1hc2sgKi8NCisNCisvKiBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU09PRlBfUG9zICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU09PRlAgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNPT0ZQX01zayAgICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTT09GUF9Qb3MpICAgICAgICAgICAvKiE8IEFDVExSOiBESVNPT0ZQIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGUENBX1BvcyAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGUENBIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRlBDQV9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU0ZQQ0FfUG9zKSAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRlBDQSBNYXNrICovDQorDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Qb3MgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRk9MRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZPTERfTXNrICAgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNGT0xEX1BvcykgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZPTEQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0RFRldCVUYgUG9zaXRpb24gKi8NCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNERUZXQlVGX01zayAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTREVGV0JVRl9Qb3MpICAgICAgICAvKiE8IEFDVExSOiBESVNERUZXQlVGIE1hc2sgKi8NCisNCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIFBvc2l0aW9uICovDQorI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Nc2sgICAgICAgICgxVUwgLyo8PCBTQ25TQ0JfQUNUTFJfRElTTUNZQ0lOVF9Qb3MqLykgICAgLyohPCBBQ1RMUjogRElTTUNZQ0lOVCBNYXNrICovDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0Nub3RTQ0IgKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spDQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8NCit9IFN5c1RpY2tfVHlwZTsNCisNCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBNYXNrICovDQorDQorI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgTWFzayAqLw0KKw0KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgTWFzayAqLw0KKw0KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIE1hc2sgKi8NCisNCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8NCisNCisvKiBTeXNUaWNrIEN1cnJlbnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovDQorI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovDQorDQorLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8NCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfTXNrICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX05PUkVGX1BvcykgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIE1hc2sgKi8NCisNCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8NCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX1NLRVdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgTWFzayAqLw0KKw0KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8NCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIE1hc2sgKi8NCisNCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovDQorDQorDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX0lUTSAgICAgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgUmVnaXN0ZXIgKElUTSkuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIF9fT00gIHVuaW9uDQorICAgIHsNCisgICAgICAgIF9fT00gIHVpbnQ4X3QgICAgdTg7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDgtYml0ICovDQorICAgICAgICBfX09NICB1aW50MTZfdCAgIHUxNjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAxNi1iaXQgKi8NCisgICAgICAgIF9fT00gIHVpbnQzMl90ICAgdTMyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDMyLWJpdCAqLw0KKyAgICB9ICBQT1JUIFszMlVdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IFJlZ2lzdGVycyAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDBbODY0VV07DQorICAgIF9fSU9NIHVpbnQzMl90IFRFUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEUwMCAoUi9XKSAgSVRNIFRyYWNlIEVuYWJsZSBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDFbMTVVXTsNCisgICAgX19JT00gdWludDMyX3QgVFBSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTQwIChSL1cpICBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxNVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBUQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFODAgKFIvVykgIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEM1syOVVdOw0KKyAgICBfX09NICB1aW50MzJfdCBJV1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjggKCAvVykgIElUTSBJbnRlZ3JhdGlvbiBXcml0ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBJUlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRkMgKFIvICkgIElUTSBJbnRlZ3JhdGlvbiBSZWFkIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IElNQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEYwMCAoUi9XKSAgSVRNIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDRbNDNVXTsNCisgICAgX19PTSAgdWludDMyX3QgTEFSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkIwICggL1cpICBJVE0gTG9jayBBY2Nlc3MgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgTFNSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkI0IChSLyApICBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQ1WzZVXTsNCisgICAgX19JTSAgdWludDMyX3QgUElENDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNCAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQSUQ1OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM1ICovDQorICAgIF9fSU0gIHVpbnQzMl90IFBJRDY7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzYgKi8NCisgICAgX19JTSAgdWludDMyX3QgUElENzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkRDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNyAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTAgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovDQorICAgIF9fSU0gIHVpbnQzMl90IFBJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFNCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8NCisgICAgX19JTSAgdWludDMyX3QgUElEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkU4IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRUMgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovDQorICAgIF9fSU0gIHVpbnQzMl90IENJRDA7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGMCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzAgKi8NCisgICAgX19JTSAgdWludDMyX3QgQ0lEMTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY0IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMSAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBDSUQyOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjggKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMyICovDQorICAgIF9fSU0gIHVpbnQzMl90IENJRDM7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGQyAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzMgKi8NCit9IElUTV9UeXBlOw0KKw0KKy8qIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX01zayAgICAgICAgICAgICAgICgweEZVTCAvKjw8IElUTV9UUFJfUFJJVk1BU0tfUG9zKi8pICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBNYXNrICovDQorDQorLyogSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Qb3MgICAgICAgICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgTWFzayAqLw0KKw0KKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9UQ1JfVHJhY2VCdXNJRF9Nc2sgICAgICAgICAgICAgKDB4N0ZVTCA8PCBJVE1fVENSX1RyYWNlQnVzSURfUG9zKSAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEFUQklEIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Qb3MgICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX0dUU0ZSRVFfTXNrICAgICAgICAgICAgICAgICgzVUwgPDwgSVRNX1RDUl9HVFNGUkVRX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBHbG9iYWwgdGltZXN0YW1wIGZyZXF1ZW5jeSBNYXNrICovDQorDQorI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfTXNrICAgICAgICAgICAgICgzVUwgPDwgSVRNX1RDUl9UU1ByZXNjYWxlX1BvcykgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX1RDUl9TV09FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1dPRU5BX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1dPRU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX1BvcyAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX1RDUl9EV1RFTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfRFdURU5BX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogRFdURU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NZTkNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9UQ1JfVFNFTkFfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1RTRU5BX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTRU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fVENSX0lUTUVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fVENSX0lUTUVOQV9Qb3MqLykgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBJVE0gRW5hYmxlIGJpdCBNYXNrICovDQorDQorLyogSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBJVE1fSVdSX0FUVkFMSURNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVdSOiBBVFZBTElETSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lXUl9BVFZBTElETV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gTWFzayAqLw0KKw0KKy8qIElUTSBJbnRlZ3JhdGlvbiBSZWFkIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lSUl9BVFJFQURZTV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gTWFzayAqLw0KKw0KKy8qIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX0lNQ1JfSU5URUdSQVRJT05fTXNrICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lNQ1JfSU5URUdSQVRJT05fUG9zKi8pICAgICAgICAgIC8qITwgSVRNIElNQ1I6IElOVEVHUkFUSU9OIE1hc2sgKi8NCisNCisvKiBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgUG9zaXRpb24gKi8NCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0J5dGVBY2NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgTWFzayAqLw0KKw0KKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIFBvc2l0aW9uICovDQorI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9BY2Nlc3NfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgTWFzayAqLw0KKw0KKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0xTUl9QcmVzZW50X1BvcyovKSAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBNYXNrICovDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19JVE0gKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgQ01TSVNfRFdUICAgICBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpDQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkNCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSBSZWdpc3RlciAoRFdUKS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IENZQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3ljbGUgQ291bnQgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQ1BJQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBDUEkgQ291bnQgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgRVhDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgU0xFRVBDTlQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTbGVlcCBDb3VudCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBMU1VDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIExTVSBDb3VudCBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBGT0xEQ05UOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBQQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvICkgIFByb2dyYW0gQ291bnRlciBTYW1wbGUgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgQ09NUDA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDAgKi8NCisgICAgX19JT00gdWludDMyX3QgTUFTSzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDAgKi8NCisgICAgX19JT00gdWludDMyX3QgRlVOQ1RJT04wOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAwICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07DQorICAgIF9fSU9NIHVpbnQzMl90IENPTVAxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAxICovDQorICAgIF9fSU9NIHVpbnQzMl90IE1BU0sxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWFzayBSZWdpc3RlciAxICovDQorICAgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMSAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDFbMVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBDT01QMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMiAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBNQVNLMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMiAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQyWzFVXTsNCisgICAgX19JT00gdWludDMyX3QgQ09NUDM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDMgKi8NCisgICAgX19JT00gdWludDMyX3QgTUFTSzM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDMgKi8NCisgICAgX19JT00gdWludDMyX3QgRlVOQ1RJT04zOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAzICovDQorfSBEV1RfVHlwZTsNCisNCisvKiBEV1QgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfTlVNQ09NUF9Qb3MgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5VTUNPTVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX05VTUNPTVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX1BvcyAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9UUkNQS1RfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PRVhUVFJJR19Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfUG9zICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfUG9zICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcyAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcyAgICAgICAgICAgIDIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX1BvcyAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTFNVRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcykgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBNYXNrICovDQorDQorI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcyAgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfTXNrICAgICAgICAgICAgICAgKDB4M1VMIDw8IERXVF9DVFJMX1NZTkNUQVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Qb3MgICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ1RBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfUG9zICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfTXNrICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIE1hc2sgKi8NCisNCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIC8qPDwgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyovKSAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgTWFzayAqLw0KKw0KKy8qIERXVCBDUEkgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0NQSUNOVF9DUElDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIE1hc2sgKi8NCisNCisvKiBEV1QgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9FWENDTlRfRVhDQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBNYXNrICovDQorDQorLyogRFdUIFNsZWVwIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfTXNrICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zKi8pICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIE1hc2sgKi8NCisNCisvKiBEV1QgTFNVIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9MU1VDTlRfTFNVQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBNYXNrICovDQorDQorLyogRFdUIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zKi8pICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIE1hc2sgKi8NCisNCisvKiBEV1QgQ29tcGFyYXRvciBNYXNrIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBEV1RfTUFTS19NQVNLX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTUFTSzogTUFTSyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIC8qPDwgRFdUX01BU0tfTUFTS19Qb3MqLykgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgTWFzayAqLw0KKw0KKy8qIERXVCBDb21wYXJhdG9yIEZ1bmN0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSEVEX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9NQVRDSEVEX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0hFRCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIxX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIxX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMSBNYXNrICovDQorDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgUG9zaXRpb24gKi8NCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIwX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIwX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcyAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Nc2sgICAgICAgICAoMHgzVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IExOSzFFTkEgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIFBvc2l0aW9uICovDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Nc2sgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWTUFUQ0ggTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcyAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX01zayAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcykgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBNYXNrICovDQorDQorI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcyAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Nc2sgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX01zayAgICAgICAgICAoMHhGVUwgLyo8PCBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fUG9zKi8pICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBNYXNrICovDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19EV1QgKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgQ01TSVNfVFBJICAgICBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQ0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSBSZWdpc3RlciAoVFBJKS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgX19JT00gdWludDMyX3QgU1NQU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBTdXBwb3J0ZWQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IENTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3VycmVudCBQYXJhbGxlbCBQb3J0IFNpemUgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQwWzJVXTsNCisgICAgX19JT00gdWludDMyX3QgQUNQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBBc3luY2hyb25vdXMgQ2xvY2sgUHJlc2NhbGVyIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVEMVs1NVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBTUFBSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwRjAgKFIvVykgIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTMxVV07DQorICAgIF9fSU0gIHVpbnQzMl90IEZGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi8gKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgRkZDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzA0IChSL1cpICBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8NCisgICAgX19JTSAgdWludDMyX3QgRlNDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzA4IChSLyApICBGb3JtYXR0ZXIgU3luY2hyb25pemF0aW9uIENvdW50ZXIgUmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQzWzc1OVVdOw0KKyAgICBfX0lNICB1aW50MzJfdCBUUklHR0VSOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRTggKFIvICkgIFRSSUdHRVIgKi8NCisgICAgX19JTSAgdWludDMyX3QgRklGTzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUVDIChSLyApICBJbnRlZ3JhdGlvbiBFVE0gRGF0YSAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBJVEFUQkNUUjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjAgKFIvICkgIElUQVRCQ1RSMiAqLw0KKyAgICB1aW50MzJfdCBSRVNFUlZFRDRbMVVdOw0KKyAgICBfX0lNICB1aW50MzJfdCBJVEFUQkNUUjA7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjggKFIvICkgIElUQVRCQ1RSMCAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBGSUZPMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRkMgKFIvICkgIEludGVncmF0aW9uIElUTSBEYXRhICovDQorICAgIF9fSU9NIHVpbnQzMl90IElUQ1RSTDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEYwMCAoUi9XKSAgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sICovDQorICAgIHVpbnQzMl90IFJFU0VSVkVENVszOVVdOw0KKyAgICBfX0lPTSB1aW50MzJfdCBDTEFJTVNFVDsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQTAgKFIvVykgIENsYWltIHRhZyBzZXQgKi8NCisgICAgX19JT00gdWludDMyX3QgQ0xBSU1DTFI7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkE0IChSL1cpICBDbGFpbSB0YWcgY2xlYXIgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRUQ3WzhVXTsNCisgICAgX19JTSAgdWludDMyX3QgREVWSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkM4IChSLyApICBUUElVX0RFVklEICovDQorICAgIF9fSU0gIHVpbnQzMl90IERFVlRZUEU7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDQyAoUi8gKSAgVFBJVV9ERVZUWVBFICovDQorfSBUUElfVHlwZTsNCisNCisvKiBUUEkgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX01zayAgICAgICAgICAgICAoMHgxRkZGVUwgLyo8PCBUUElfQUNQUl9QUkVTQ0FMRVJfUG9zKi8pICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBNYXNrICovDQorDQorLyogVFBJIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX01zayAgICAgICAgICAgICAgICAoMHgzVUwgLyo8PCBUUElfU1BQUl9UWE1PREVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBNYXNrICovDQorDQorLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfUG9zICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdE5vblN0b3BfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcyAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBNYXNrICovDQorDQorI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX01zayAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0ZGU1JfRmxJblByb2dfUG9zKi8pICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBNYXNrICovDQorDQorLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX1BvcyAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfVHJpZ0luX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBNYXNrICovDQorDQorI2RlZmluZSBUUElfRkZDUl9FbkZDb250X1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Nc2sgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MpICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgTWFzayAqLw0KKw0KKy8qIFRQSSBUUklHR0VSIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX1RSSUdHRVJfVFJJR0dFUl9Nc2sgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyovKSAgICAgIC8qITwgVFBJIFRSSUdHRVI6IFRSSUdHRVIgTWFzayAqLw0KKw0KKy8qIFRQSSBJbnRlZ3JhdGlvbiBFVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzApICovDQorI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzBfRVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzBfRVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzBfRVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzBfRVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgTWFzayAqLw0KKw0KKy8qIFRQSSBJVEFUQkNUUjIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgTWFzayAqLw0KKw0KKy8qIFRQSSBJbnRlZ3JhdGlvbiBJVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzEpICovDQorI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9ieXRlY291bnQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzFfSVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8xX0lUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTIgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzFfSVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8xX0lUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTEgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfRklGTzFfSVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzFfSVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTAgTWFzayAqLw0KKw0KKy8qIFRQSSBJVEFUQkNUUjAgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgTWFzayAqLw0KKw0KKy8qIFRQSSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQ1RSTF9Nb2RlX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgTWFzayAqLw0KKw0KKy8qIFRQSSBERVZJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX05SWlZBTElEX1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBNYXNrICovDQorDQorI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX1BvcyAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9QVElOVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Nc2sgICAgICAgICAgICAgKDB4N1VMIDw8IFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZJRF9Bc3luQ2xrSW5fTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9Bc3luQ2xrSW5fUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogQXN5bkNsa0luIE1hc2sgKi8NCisNCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IFBvc2l0aW9uICovDQorI2RlZmluZSBUUElfREVWSURfTnJUcmFjZUlucHV0X01zayAgICAgICAgICgweDFGVUwgLyo8PCBUUElfREVWSURfTnJUcmFjZUlucHV0X1BvcyovKSAgLyohPCBUUEkgREVWSUQ6IE5yVHJhY2VJbnB1dCBNYXNrICovDQorDQorLyogVFBJIERFVlRZUEUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Nc2sgICAgICAgICAgKDB4RlVMIDw8IFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MpICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgTWFzayAqLw0KKw0KKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgUG9zaXRpb24gKi8NCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfTXNrICAgICAgICAgICAgKDB4RlVMIC8qPDwgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MqLykgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIE1hc2sgKi8NCisNCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX1RQSSAqLw0KKw0KKw0KKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkNCisvKioNCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyDQorICBcZGVmZ3JvdXAgQ01TSVNfTVBVICAgICBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpDQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkNCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgX19JTSAgdWludDMyX3QgVFlQRTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBNUFUgVHlwZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIE1QVSBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFJOUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgTVBVIFJlZ2lvbiBSTlJiZXIgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgUkJBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBSQVNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTVBVIEFsaWFzIDEgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBSQVNSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgUkJBUl9BMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBNUFUgQWxpYXMgMiBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLw0KKyAgICBfX0lPTSB1aW50MzJfdCBSQkFSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIE1QVSBBbGlhcyAzIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgUkFTUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovDQorfSBNUFVfVHlwZTsNCisNCisvKiBNUFUgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9JUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfRFJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBNYXNrICovDQorDQorI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX01zayAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9UWVBFX1NFUEFSQVRFX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBNYXNrICovDQorDQorLyogTVBVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX01zayAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBNYXNrICovDQorDQorI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX01zayAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBNYXNrICovDQorDQorI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIE1hc2sgKi8NCisNCisvKiBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfUk5SX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gTWFzayAqLw0KKw0KKy8qIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovDQorI2RlZmluZSBNUFVfUkJBUl9BRERSX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Nc2sgICAgICAgICAgICAgICAgICAoMHg3RkZGRkZGVUwgPDwgTVBVX1JCQVJfQUREUl9Qb3MpICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JCQVJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBNUFVfUkJBUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBNYXNrICovDQorDQorLyogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfTXNrICAgICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgTVBVX1JBU1JfQVRUUlNfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQVNSX1hOX1BvcyAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JBU1JfWE5fTXNrICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1hOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQVNSX0FQX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JBU1JfQVBfTXNrICAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfQVBfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Qb3MgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX1RFWF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JBU1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX1NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9TX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIE1hc2sgKi8NCisNCisjZGVmaW5lIE1QVV9SQVNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIFBvc2l0aW9uICovDQorI2RlZmluZSBNUFVfUkFTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9CX1BvcyAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JBU1JfQl9Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgTWFzayAqLw0KKw0KKyNkZWZpbmUgTVBVX1JBU1JfU1JEX1BvcyAgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgTVBVX1JBU1JfU1JEX01zayAgICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9SQVNSX1NSRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9TSVpFX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCA8PCBNUFVfUkFTUl9TSVpFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBNYXNrICovDQorDQorI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9SQVNSX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBEaXNhYmxlIE1hc2sgKi8NCisNCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8NCisjZW5kaWYNCisNCisNCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwIENNU0lTX0ZQVSAgICAgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKQ0KKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpDQorICBAew0KKyAqLw0KKw0KKy8qKg0KKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07DQorICAgIF9fSU9NIHVpbnQzMl90IEZQQ0NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgRmxvYXRpbmctUG9pbnQgQ29udGV4dCBDb250cm9sIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IEZQQ0FSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRmxvYXRpbmctUG9pbnQgQ29udGV4dCBBZGRyZXNzIFJlZ2lzdGVyICovDQorICAgIF9fSU9NIHVpbnQzMl90IEZQRFNDUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRmxvYXRpbmctUG9pbnQgRGVmYXVsdCBTdGF0dXMgQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgICBfX0lNICB1aW50MzJfdCBNVkZSMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvICkgIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDAgKi8NCisgICAgX19JTSAgdWludDMyX3QgTVZGUjE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSLyApICBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAxICovDQorfSBGUFVfVHlwZTsNCisNCisvKiBGbG9hdGluZy1Qb2ludCBDb250ZXh0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIEZQVV9GUENDUl9BU1BFTl9Qb3MgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBBU1BFTiBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUENDUl9BU1BFTl9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfQVNQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBBU1BFTiBiaXQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfTFNQRU5fTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0xTUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTFNQRU4gYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUENDUl9NT05SRFlfUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNT05SRFkgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUENDUl9NT05SRFlfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTU9OUkRZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNT05SRFkgYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUENDUl9CRlJEWV9Qb3MgICAgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBCRlJEWSBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0JGUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9CRlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEJGUkRZIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBDQ1JfTU1SRFlfUG9zICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU1SRFkgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUENDUl9NTVJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTU1SRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNTVJEWSBiaXQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0hGUkRZX1BvcyAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEhGUkRZIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfSEZSRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0hGUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogSEZSRFkgYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUENDUl9USFJFQURfUG9zICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcm9jZXNzb3IgbW9kZSBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUENDUl9USFJFQURfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfVEhSRUFEX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcm9jZXNzb3IgbW9kZSBhY3RpdmUgYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUENDUl9VU0VSX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcml2aWxlZ2UgbGV2ZWwgYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQ1JfVVNFUl9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1VTRVJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJpdmlsZWdlIGxldmVsIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBDQ1JfTFNQQUNUX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTGF6eSBzdGF0ZSBwcmVzZXJ2YXRpb24gYWN0aXZlIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEFDVF9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgRlBVX0ZQQ0NSX0xTUEFDVF9Qb3MqLykgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExhenkgc3RhdGUgcHJlc2VydmF0aW9uIGFjdGl2ZSBiaXQgTWFzayAqLw0KKw0KKy8qIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgRlBVX0ZQQ0FSX0FERFJFU1NfUG9zICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQVI6IEFERFJFU1MgYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBDQVJfQUREUkVTU19Nc2sgICAgICAgICAgICAgICgweDFGRkZGRkZGVUwgPDwgRlBVX0ZQQ0FSX0FERFJFU1NfUG9zKSAgICAgICAgLyohPCBGUENBUjogQUREUkVTUyBiaXQgTWFzayAqLw0KKw0KKy8qIEZsb2F0aW5nLVBvaW50IERlZmF1bHQgU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIEZQVV9GUERTQ1JfQUhQX1BvcyAgICAgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogQUhQIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQRFNDUl9BSFBfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfQUhQX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBBSFAgYml0IE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fUG9zICAgICAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfRlBEU0NSX0ROX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9ETl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEROIGJpdCBNYXNrICovDQorDQorI2RlZmluZSBGUFVfRlBEU0NSX0ZaX1BvcyAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX0ZQRFNDUl9GWl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfRlpfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBGWiBiaXQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Qb3MgICAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9GUERTQ1JfUk1vZGVfTXNrICAgICAgICAgICAgICAgKDNVTCA8PCBGUFVfRlBEU0NSX1JNb2RlX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogUk1vZGUgYml0IE1hc2sgKi8NCisNCisvKiBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAwIERlZmluaXRpb25zICovDQorI2RlZmluZSBGUFVfTVZGUjBfRlBfcm91bmRpbmdfbW9kZXNfUG9zICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlAgcm91bmRpbmcgbW9kZXMgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX3JvdW5kaW5nX21vZGVzX01zayAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQX3JvdW5kaW5nX21vZGVzX1BvcykgICAgIC8qITwgTVZGUjA6IEZQIHJvdW5kaW5nIG1vZGVzIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIwX1Nob3J0X3ZlY3RvcnNfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNob3J0IHZlY3RvcnMgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX1Nob3J0X3ZlY3RvcnNfTXNrICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1Nob3J0X3ZlY3RvcnNfUG9zKSAgICAgICAgIC8qITwgTVZGUjA6IFNob3J0IHZlY3RvcnMgYml0cyBNYXNrICovDQorDQorI2RlZmluZSBGUFVfTVZGUjBfU3F1YXJlX3Jvb3RfUG9zICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogU3F1YXJlIHJvb3QgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX1NxdWFyZV9yb290X01zayAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1NxdWFyZV9yb290X1BvcykgICAgICAgICAgIC8qITwgTVZGUjA6IFNxdWFyZSByb290IGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIwX0RpdmlkZV9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERpdmlkZSBiaXRzIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfTVZGUjBfRGl2aWRlX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRGl2aWRlX1BvcykgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRGl2aWRlIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX1BvcyAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQIGV4Y2VwdGlvbiB0cmFwcGluZyBiaXRzIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfTVZGUjBfRlBfZXhjZXBfdHJhcHBpbmdfTXNrICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRlBfZXhjZXBfdHJhcHBpbmdfUG9zKSAgICAgLyohPCBNVkZSMDogRlAgZXhjZXB0aW9uIHRyYXBwaW5nIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIwX0RvdWJsZV9wcmVjaXNpb25fUG9zICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERvdWJsZS1wcmVjaXNpb24gYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIwX0RvdWJsZV9wcmVjaXNpb25fTXNrICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0RvdWJsZV9wcmVjaXNpb25fUG9zKSAgICAgIC8qITwgTVZGUjA6IERvdWJsZS1wcmVjaXNpb24gYml0cyBNYXNrICovDQorDQorI2RlZmluZSBGUFVfTVZGUjBfU2luZ2xlX3ByZWNpc2lvbl9Qb3MgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogU2luZ2xlLXByZWNpc2lvbiBiaXRzIFBvc2l0aW9uICovDQorI2RlZmluZSBGUFVfTVZGUjBfU2luZ2xlX3ByZWNpc2lvbl9Nc2sgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfU2luZ2xlX3ByZWNpc2lvbl9Qb3MpICAgICAgLyohPCBNVkZSMDogU2luZ2xlLXByZWNpc2lvbiBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX1BvcyAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBBX1NJTUQgcmVnaXN0ZXJzIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX01zayAgICAgKDB4RlVMIC8qPDwgRlBVX01WRlIwX0FfU0lNRF9yZWdpc3RlcnNfUG9zKi8pICAvKiE8IE1WRlIwOiBBX1NJTUQgcmVnaXN0ZXJzIGJpdHMgTWFzayAqLw0KKw0KKy8qIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDEgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9mdXNlZF9NQUNfUG9zICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBmdXNlZCBNQUMgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Nc2sgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Qb3MpICAgICAgICAgIC8qITwgTVZGUjE6IEZQIGZ1c2VkIE1BQyBiaXRzIE1hc2sgKi8NCisNCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9IUEZQX1BvcyAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBIUEZQIGJpdHMgUG9zaXRpb24gKi8NCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9IUEZQX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUF9IUEZQX1BvcykgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBIUEZQIGJpdHMgTWFzayAqLw0KKw0KKyNkZWZpbmUgRlBVX01WRlIxX0RfTmFOX21vZGVfUG9zICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IERfTmFOIG1vZGUgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIxX0RfTmFOX21vZGVfTXNrICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0RfTmFOX21vZGVfUG9zKSAgICAgICAgICAgIC8qITwgTVZGUjE6IERfTmFOIG1vZGUgYml0cyBNYXNrICovDQorDQorI2RlZmluZSBGUFVfTVZGUjFfRnRaX21vZGVfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRnRaIG1vZGUgYml0cyBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgRlBVX01WRlIxX0Z0Wl9tb2RlX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBGUFVfTVZGUjFfRnRaX21vZGVfUG9zKi8pICAgICAgICAgIC8qITwgTVZGUjE6IEZ0WiBtb2RlIGJpdHMgTWFzayAqLw0KKw0KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0ZQVSAqLw0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCBDTVNJU19Db3JlRGVidWcgICAgICAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKENvcmVEZWJ1ZykNCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMNCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlciAoQ29yZURlYnVnKS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgX19JT00gdWludDMyX3QgREhDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBEZWJ1ZyBIYWx0aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLw0KKyAgICBfX09NICB1aW50MzJfdCBEQ1JTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKCAvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgRENSRFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIERhdGEgUmVnaXN0ZXIgKi8NCisgICAgX19JT00gdWludDMyX3QgREVNQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciAqLw0KK30gQ29yZURlYnVnX1R5cGU7DQorDQorLyogRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX01zayAgICAgICAgICgweEZGRkZVTCA8PCBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVNFVF9TVCBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfU0xFRVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcyAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX01zayAgICAgICgxVUwgLyo8PCBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBNYXNrICovDQorDQorLyogRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfRENSU1JfUkVHV25SX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHV25SIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHU0VMX01zayAgICAgICAgICgweDFGVUwgLyo8PCBDb3JlRGVidWdfRENSU1JfUkVHU0VMX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1NFTCBNYXNrICovDQorDQorLyogRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVFJDRU5BIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfUG9zICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Qb3MgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fRU4gUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcyAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSU5URVJSIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBNYXNrICovDQorDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcyAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0JVU0VSUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIFBvc2l0aW9uICovDQorI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DSEtFUlIgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcyAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBQb3NpdGlvbiAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIE1hc2sgKi8NCisNCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Qb3MgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgTWFzayAqLw0KKw0KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Qb3MgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DT1JFUkVTRVQgUG9zaXRpb24gKi8NCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfTXNrICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zKi8pICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIE1hc2sgKi8NCisNCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8NCisNCisNCisvKioNCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXINCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3Jvcw0KKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLg0KKyAgQHsNCisgKi8NCisNCisvKioNCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuDQorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuDQorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiB0aGUgYml0IGZpZWxkLg0KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLg0KKyovDQorI2RlZmluZSBfVkFMMkZMRChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgPDwgZmllbGQgIyMgX1BvcykgJiBmaWVsZCAjIyBfTXNrKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgICBNYXNrIGFuZCBzaGlmdCBhIHJlZ2lzdGVyIHZhbHVlIHRvIGV4dHJhY3QgYSBiaXQgZmlsZWQgdmFsdWUuDQorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuDQorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4NCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCBiaXQgZmllbGQgdmFsdWUuDQorKi8NCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLw0KKw0KKw0KKy8qKg0KKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3Rlcg0KKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iYXNlICAgICBDb3JlIERlZmluaXRpb25zDQorICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuDQorICBAew0KKyAqLw0KKw0KKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcnRleC1NNCBIYXJkd2FyZSAqLw0KKyNkZWZpbmUgU0NTX0JBU0UgICAgICAgICAgICAoMHhFMDAwRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUgSVRNX0JBU0UgICAgICAgICAgICAoMHhFMDAwMDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBCYXNlIEFkZHJlc3MgKi8NCisjZGVmaW5lIERXVF9CQVNFICAgICAgICAgICAgKDB4RTAwMDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQmFzZSBBZGRyZXNzICovDQorI2RlZmluZSBUUElfQkFTRSAgICAgICAgICAgICgweEUwMDQwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEJhc2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUgQ29yZURlYnVnX0JBU0UgICAgICAoMHhFMDAwRURGMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmUgRGVidWcgQmFzZSBBZGRyZXNzICovDQorI2RlZmluZSBTeXNUaWNrX0JBU0UgICAgICAgIChTQ1NfQkFTRSArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBCYXNlIEFkZHJlc3MgKi8NCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLw0KKw0KKyNkZWZpbmUgU0NuU0NCICAgICAgICAgICAgICAoKFNDblNDQl9UeXBlICAgICopICAgICBTQ1NfQkFTRSAgICAgICkgICAvKiE8IFN5c3RlbSBjb250cm9sIFJlZ2lzdGVyIG5vdCBpbiBTQ0IgKi8NCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8NCisjZGVmaW5lIFN5c1RpY2sgICAgICAgICAgICAgKChTeXNUaWNrX1R5cGUgICAqKSAgICAgU3lzVGlja19CQVNFICApICAgLyohPCBTeXNUaWNrIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovDQorI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLw0KKyNkZWZpbmUgSVRNICAgICAgICAgICAgICAgICAoKElUTV9UeXBlICAgICAgICopICAgICBJVE1fQkFTRSAgICAgICkgICAvKiE8IElUTSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLw0KKyNkZWZpbmUgRFdUICAgICAgICAgICAgICAgICAoKERXVF9UeXBlICAgICAgICopICAgICBEV1RfQkFTRSAgICAgICkgICAvKiE8IERXVCBjb25maWd1cmF0aW9uIHN0cnVjdCAqLw0KKyNkZWZpbmUgVFBJICAgICAgICAgICAgICAgICAoKFRQSV9UeXBlICAgICAgICopICAgICBUUElfQkFTRSAgICAgICkgICAvKiE8IFRQSSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLw0KKyNkZWZpbmUgQ29yZURlYnVnICAgICAgICAgICAoKENvcmVEZWJ1Z19UeXBlICopICAgICBDb3JlRGVidWdfQkFTRSkgICAvKiE8IENvcmUgRGVidWcgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8NCisNCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpDQorI2RlZmluZSBNUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDkwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8NCisjZGVmaW5lIE1QVSAgICAgICAgICAgICAgICgoTVBVX1R5cGUgICAgICAgKikgICAgIE1QVV9CQVNFICAgICAgKSAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLw0KKyNlbmRpZg0KKw0KKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkNCisjZGVmaW5lIEZQVV9CQVNFICAgICAgICAgIChTQ1NfQkFTRSArICAweDBGMzBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRmxvYXRpbmcgUG9pbnQgVW5pdCAqLw0KKyNkZWZpbmUgRlBVICAgICAgICAgICAgICAgKChGUFVfVHlwZSAgICAgICAqKSAgICAgRlBVX0JBU0UgICAgICApICAgLyohPCBGbG9hdGluZyBQb2ludCBVbml0ICovDQorI2VuZGlmDQorDQorLypAfSAqLw0KKw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXINCisgIENvcmUgRnVuY3Rpb24gSW50ZXJmYWNlIGNvbnRhaW5zOg0KKyAgLSBDb3JlIE5WSUMgRnVuY3Rpb25zDQorICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMNCisgIC0gQ29yZSBEZWJ1ZyBGdW5jdGlvbnMNCisgIC0gQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioNCisgIFxkZWZncm91cCBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlIEZ1bmN0aW9ucyBhbmQgSW5zdHJ1Y3Rpb25zIFJlZmVyZW5jZQ0KKyovDQorDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqDQorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQ0KKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucw0KKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBpbnRlcnJ1cHRzIGFuZCBleGNlcHRpb25zIHZpYSB0aGUgTlZJQy4NCisgIEB7DQorICovDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgR3JvdXBpbmcNCisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIHVzaW5nIHRoZSByZXF1aXJlZCB1bmxvY2sgc2VxdWVuY2UuDQorICAgICAgICAgICBUaGUgcGFyYW1ldGVyIFByaW9yaXR5R3JvdXAgaXMgYXNzaWduZWQgdG8gdGhlIGZpZWxkIFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkLg0KKyAgICAgICAgICAgT25seSB2YWx1ZXMgZnJvbSAwLi43IGFyZSB1c2VkLg0KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQ0KKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuDQorICBccGFyYW0gW2luXSAgICAgIFByaW9yaXR5R3JvdXAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHlHcm91cGluZyh1aW50MzJfdCBQcmlvcml0eUdyb3VwKQ0KK3sNCisgICAgdWludDMyX3QgcmVnX3ZhbHVlOw0KKyAgICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAgICAgICAgICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLw0KKw0KKyAgICByZWdfdmFsdWUgID0gIFNDQi0+QUlSQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZCBvbGQgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAgICAqLw0KKyAgICByZWdfdmFsdWUgJj0gfigodWludDMyX3QpKFNDQl9BSVJDUl9WRUNUS0VZX01zayB8IFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spKTsgLyogY2xlYXIgYml0cyB0byBjaGFuZ2UgICAgICAgICAgICAgICAqLw0KKyAgICByZWdfdmFsdWUgID0gKHJlZ192YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwNCisgICAgICAgICAgICAgICAgICAoUHJpb3JpdHlHcm91cFRtcCA8PCA4VSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluc2VydCB3cml0ZSBrZXkgYW5kIHByaW9ydHkgZ3JvdXAgKi8NCisgICAgU0NCLT5BSVJDUiA9ICByZWdfdmFsdWU7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IEdyb3VwaW5nDQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgZnJvbSB0aGUgTlZJQyBJbnRlcnJ1cHQgQ29udHJvbGxlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgKFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkKS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eUdyb3VwaW5nKHZvaWQpDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKFNDQi0+QUlSQ1IgJiBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSA+PiBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdA0KKyAgXGRldGFpbHMgRW5hYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0VuYWJsZUlSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICAgIE5WSUMtPklTRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0DQorICBcZGV0YWlscyBEaXNhYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0Rpc2FibGVJUlEoSVJRbl9UeXBlIElSUW4pDQorew0KKyAgICBOVklDLT5JQ0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQNCisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBOVklDIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuDQorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuDQorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuDQorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgcGVuZGluZy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgICAgcmV0dXJuICgodWludDMyX3QpKCgoTlZJQy0+SVNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBTZXQgUGVuZGluZyBJbnRlcnJ1cHQNCisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4NCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICAgIE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0DQorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4NCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgICAgTlZJQy0+SUNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEFjdGl2ZSBJbnRlcnJ1cHQNCisgIFxkZXRhaWxzIFJlYWRzIHRoZSBhY3RpdmUgcmVnaXN0ZXIgaW4gTlZJQyBhbmQgcmV0dXJucyB0aGUgYWN0aXZlIGJpdC4NCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgYWN0aXZlLg0KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIGFjdGl2ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRBY3RpdmUoSVJRbl9UeXBlIElSUW4pDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKChOVklDLT5JQUJSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOw0KK30NCisNCisNCisvKioNCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkNCisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4NCisgIFxub3RlICAgIFRoZSBwcmlvcml0eSBjYW5ub3QgYmUgc2V0IGZvciBldmVyeSBjb3JlIGludGVycnVwdC4NCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4NCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQ0KK3sNCisgICAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApDQorICAgIHsNCisgICAgICAgIFNDQi0+U0hQWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpIC0gNFVMXSA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpMHhGRlVMKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIE5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOw0KKyAgICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQ0KKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4NCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwNCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYW4gaW50ZXJuYWwgKGNvcmUpIGludGVycnVwdC4NCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5Lg0KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikNCit7DQorDQorICAgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKCgodWludDMyX3QpU0NCLT5TSFBbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCkgLSA0VUxdID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKCgodWludDMyX3QpTlZJQy0+SVBbKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOw0KKyAgICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgRW5jb2RlIFByaW9yaXR5DQorICBcZGV0YWlscyBFbmNvZGVzIHRoZSBwcmlvcml0eSBmb3IgYW4gaW50ZXJydXB0IHdpdGggdGhlIGdpdmVuIHByaW9yaXR5IGdyb3VwLA0KKyAgICAgICAgICAgcHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSwgYW5kIHN1YnByaW9yaXR5IHZhbHVlLg0KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQ0KKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuDQorICBccGFyYW0gW2luXSAgICAgUHJpb3JpdHlHcm91cCAgVXNlZCBwcmlvcml0eSBncm91cC4NCisgIFxwYXJhbSBbaW5dICAgUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLg0KKyAgXHBhcmFtIFtpbl0gICAgICAgU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLg0KKyAgXHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgIEVuY29kZWQgcHJpb3JpdHkuIFZhbHVlIGNhbiBiZSB1c2VkIGluIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfU2V0UHJpb3JpdHkoKS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19FbmNvZGVQcmlvcml0eSh1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90IFN1YlByaW9yaXR5KQ0KK3sNCisgICAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLw0KKyAgICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOw0KKyAgICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7DQorDQorICAgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7DQorICAgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7DQorDQorICAgIHJldHVybiAoDQorICAgICAgICAgICAgICAgKChQcmVlbXB0UHJpb3JpdHkgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCkpIDw8IFN1YlByaW9yaXR5Qml0cykgfA0KKyAgICAgICAgICAgICAgICgoU3ViUHJpb3JpdHkgICAgICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMpKSAtIDFVTCkpKQ0KKyAgICAgICAgICAgKTsNCit9DQorDQorDQorLyoqDQorICBcYnJpZWYgICBEZWNvZGUgUHJpb3JpdHkNCisgIFxkZXRhaWxzIERlY29kZXMgYW4gaW50ZXJydXB0IHByaW9yaXR5IHZhbHVlIHdpdGggYSBnaXZlbiBwcmlvcml0eSBncm91cCB0bw0KKyAgICAgICAgICAgcHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSBhbmQgc3VicHJpb3JpdHkgdmFsdWUuDQorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlDQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0Lg0KKyAgXHBhcmFtIFtpbl0gICAgICAgICBQcmlvcml0eSAgIFByaW9yaXR5IHZhbHVlLCB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHdpdGggdGhlIGZ1bmN0aW9uIFxyZWYgTlZJQ19HZXRQcmlvcml0eSgpLg0KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuDQorICBccGFyYW0gW291dF0gcFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4NCisgIFxwYXJhbSBbb3V0XSAgICAgcFN1YlByaW9yaXR5ICBTdWJwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0RlY29kZVByaW9yaXR5KHVpbnQzMl90IFByaW9yaXR5LCB1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCAqY29uc3QgcFByZWVtcHRQcmlvcml0eSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpjb25zdCBwU3ViUHJpb3JpdHkpDQorew0KKyAgICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovDQorICAgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7DQorICAgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsNCisNCisgICAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKTsNCisgICAgU3ViUHJpb3JpdHlCaXRzICAgICA9ICgoUHJpb3JpdHlHcm91cFRtcCArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpIDwgKHVpbnQzMl90KTdVTCkgPyAodWludDMyX3QpMFVMIDogKHVpbnQzMl90KSgoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlHcm91cFRtcCAtIDdVTCkgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKTsNCisNCisgICAgKnBQcmVlbXB0UHJpb3JpdHkgPSAoUHJpb3JpdHkgPj4gU3ViUHJpb3JpdHlCaXRzKSAmICh1aW50MzJfdCkoKDFVTCA8PCAoUHJlZW1wdFByaW9yaXR5Qml0cykpIC0gMVVMKTsNCisgICAgKnBTdWJQcmlvcml0eSAgICAgPSAoUHJpb3JpdHkpICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMpKSAtIDFVTCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU3lzdGVtIFJlc2V0DQorICBcZGV0YWlscyBJbml0aWF0ZXMgYSBzeXN0ZW0gcmVzZXQgcmVxdWVzdCB0byByZXNldCB0aGUgTUNVLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU3lzdGVtUmVzZXQodm9pZCkNCit7DQorICAgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLw0KKyAgICBTQ0ItPkFJUkNSICA9ICh1aW50MzJfdCkoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2spOyAgICAgICAgICAgICAvKiBLZWVwIHByaW9yaXR5IGdyb3VwIHVuY2hhbmdlZCAqLw0KKyAgICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovDQorDQorICAgIGZvciAoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovDQorICAgIHsNCisgICAgICAgIF9fTk9QKCk7DQorICAgIH0NCit9DQorDQorLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zICovDQorDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMNCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFN5c3RlbS4NCisgIEB7DQorICovDQorDQorI2lmIChfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnID09IDBVKQ0KKw0KKy8qKg0KKyAgXGJyaWVmICAgU3lzdGVtIFRpY2sgQ29uZmlndXJhdGlvbg0KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuDQorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuDQorICBccGFyYW0gW2luXSAgdGlja3MgIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLg0KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuDQorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4NCisgIFxub3RlICAgIFdoZW4gdGhlIHZhcmlhYmxlIDxiPl9fVmVuZG9yX1N5c1RpY2tDb25maWc8L2I+IGlzIHNldCB0byAxLCB0aGVuIHRoZQ0KKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+DQorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpDQorew0KKyAgICBpZiAoKHRpY2tzIC0gMVVMKSA+IFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8NCisgICAgfQ0KKw0KKyAgICBTeXNUaWNrLT5MT0FEICA9ICh1aW50MzJfdCkodGlja3MgLSAxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgcmVsb2FkIHJlZ2lzdGVyICovDQorICAgIE5WSUNfU2V0UHJpb3JpdHkoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgIC8qIHNldCBQcmlvcml0eSBmb3IgU3lzdGljayBJbnRlcnJ1cHQgKi8NCisgICAgU3lzVGljay0+VkFMICAgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgU3lzVGljayBDb3VudGVyIFZhbHVlICovDQorICAgIFN5c1RpY2stPkNUUkwgID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfA0KKyAgICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgIHwNCisgICAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIFN5c1RpY2sgSVJRIGFuZCBTeXNUaWNrIFRpbWVyICovDQorICAgIHJldHVybiAoMFVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHN1Y2Nlc3NmdWwgKi8NCit9DQorDQorI2VuZGlmDQorDQorLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovDQorDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEZWJ1ZyBJbi9PdXRwdXQgZnVuY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKg0KKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgIFxkZWZncm91cCBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zIElUTSBGdW5jdGlvbnMNCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIElUTSBkZWJ1ZyBpbnRlcmZhY2UuDQorICBAew0KKyAqLw0KKw0KK2V4dGVybiB2b2xhdGlsZSBpbnQzMl90IElUTV9SeEJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgdmFyaWFibGUgdG8gcmVjZWl2ZSBjaGFyYWN0ZXJzLiAqLw0KKyNkZWZpbmUgICAgICAgICAgICAgICAgIElUTV9SWEJVRkZFUl9FTVBUWSAgIDB4NUFBNTVBQTVVIC8qITwgVmFsdWUgaWRlbnRpZnlpbmcgXHJlZiBJVE1fUnhCdWZmZXIgaXMgcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyLiAqLw0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgSVRNIFNlbmQgQ2hhcmFjdGVyDQorICBcZGV0YWlscyBUcmFuc21pdHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBJVE0gY2hhbm5lbCAwLCBhbmQNCisgICAgICAgICAgIFxsaSBKdXN0IHJldHVybnMgd2hlbiBubyBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQgdGhhdCBoYXMgYm9va2VkIHRoZSBvdXRwdXQuDQorICAgICAgICAgICBcbGkgSXMgYmxvY2tpbmcgd2hlbiBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCwgYnV0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgc2VudCBoYXMgbm90IGJlZW4gdHJhbnNtaXR0ZWQuDQorICBccGFyYW0gW2luXSAgICAgY2ggIENoYXJhY3RlciB0byB0cmFuc21pdC4NCisgIFxyZXR1cm5zICAgICAgICAgICAgQ2hhcmFjdGVyIHRvIHRyYW5zbWl0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBJVE1fU2VuZENoYXIodWludDMyX3QgY2gpDQorew0KKyAgICBpZiAoKChJVE0tPlRDUiAmIElUTV9UQ1JfSVRNRU5BX01zaykgIT0gMFVMKSAmJiAgICAgIC8qIElUTSBlbmFibGVkICovDQorICAgICAgICAoKElUTS0+VEVSICYgMVVMKSAhPSAwVUwpKSAgICAgICAgICAgICAgICAgICAgICAgLyogSVRNIFBvcnQgIzAgZW5hYmxlZCAqLw0KKyAgICB7DQorICAgICAgICB3aGlsZSAoSVRNLT5QT1JUWzBVXS51MzIgPT0gMFVMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9fTk9QKCk7DQorICAgICAgICB9DQorDQorICAgICAgICBJVE0tPlBPUlRbMFVdLnU4ID0gKHVpbnQ4X3QpY2g7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChjaCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgSVRNIFJlY2VpdmUgQ2hhcmFjdGVyDQorICBcZGV0YWlscyBJbnB1dHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4NCisgIFxyZXR1cm4gICAgICAgICAgICAgUmVjZWl2ZWQgY2hhcmFjdGVyLg0KKyAgXHJldHVybiAgICAgICAgIC0xICBObyBjaGFyYWN0ZXIgcGVuZGluZy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBJVE1fUmVjZWl2ZUNoYXIodm9pZCkNCit7DQorICAgIGludDMyX3QgY2ggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovDQorDQorICAgIGlmIChJVE1fUnhCdWZmZXIgIT0gSVRNX1JYQlVGRkVSX0VNUFRZKQ0KKyAgICB7DQorICAgICAgICBjaCA9IElUTV9SeEJ1ZmZlcjsNCisgICAgICAgIElUTV9SeEJ1ZmZlciA9IElUTV9SWEJVRkZFUl9FTVBUWTsgICAgICAgLyogcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyICovDQorICAgIH0NCisNCisgICAgcmV0dXJuIChjaCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgXGJyaWVmICAgSVRNIENoZWNrIENoYXJhY3Rlcg0KKyAgXGRldGFpbHMgQ2hlY2tzIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgcGVuZGluZyBmb3IgcmVhZGluZyBpbiB0aGUgdmFyaWFibGUgXHJlZiBJVE1fUnhCdWZmZXIuDQorICBccmV0dXJuICAgICAgICAgIDAgIE5vIGNoYXJhY3RlciBhdmFpbGFibGUuDQorICBccmV0dXJuICAgICAgICAgIDEgIENoYXJhY3RlciBhdmFpbGFibGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX0NoZWNrQ2hhcih2b2lkKQ0KK3sNCisNCisgICAgaWYgKElUTV9SeEJ1ZmZlciA9PSBJVE1fUlhCVUZGRVJfRU1QVFkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBjaGFyYWN0ZXIgYXZhaWxhYmxlICovDQorICAgIH0NCit9DQorDQorLypAfSBlbmQgb2YgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyAqLw0KKw0KKw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX19DT1JFX0NNNF9IX0RFUEVOREFOVCAqLw0KKw0KKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21GdW5jLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21GdW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5Njg4NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbUZ1bmMuaApAQCAtMCwwICsxLDg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIGNvcmVfY21GdW5jLmgNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbiBBY2Nlc3MgSGVhZGVyIEZpbGUNCisgKiBAdmVyc2lvbiAgVjQuMzANCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQ0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRA0KKw0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQNCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICAgKg0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19DT1JFX0NNRlVOQ19IDQorI2RlZmluZSBfX0NPUkVfQ01GVU5DX0gNCisNCisNCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8NCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UNCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWxWaWV3IENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQ0KKyNpbmNsdWRlICJjbXNpc19hcm1jYy5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEFSTSBDb21waWxlciBWNiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNpbmNsdWRlICJjbXNpc19hcm1jY19WNi5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNpbmNsdWRlICJjbXNpc19nY2MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBJQ0MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KKyNpbmNsdWRlIDxjbXNpc19pYXIuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUSSBDQ1MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQ0KKyNpbmNsdWRlIDxjbXNpc19jY3MuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkNCisvKg0KKyAqIFRoZSBDTVNJUyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGludHJpbnNpY3MgaW4gdGhlIGNvbXBpbGVyLg0KKyAqIFBsZWFzZSB1c2UgImNhcm0gLT9pIiB0byBnZXQgYW4gdXAgdG8gZGF0ZSBsaXN0IG9mIGFsbCBpbnRyaW5zaWNzLA0KKyAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4NCisgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBDT1NNSUMgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkNCisjaW5jbHVkZSA8Y21zaXNfY3NtLmg+DQorDQorI2VuZGlmDQorDQorLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgKi8NCisNCisjZW5kaWYgLyogX19DT1JFX0NNRlVOQ19IICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9jbXNpcy9jb3JlX2NtSW5zdHIuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbUluc3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0YmQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbUluc3RyLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KKyAqIEBmaWxlICAgICBjb3JlX2NtSW5zdHIuaA0KKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyBIZWFkZXIgRmlsZQ0KKyAqIEB2ZXJzaW9uICBWNC4zMA0KKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1DQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVEDQorDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZA0KKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgICAqDQorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUNCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjcHJhZ21hIHN5c3RlbV9pbmNsdWRlICAgICAgICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlIGZvciBNSVNSQSBjaGVjayAqLw0KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApDQorI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlICovDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0NPUkVfQ01JTlNUUl9IDQorI2RlZmluZSBfX0NPUkVfQ01JTlNUUl9IDQorDQorDQorLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovDQorLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlDQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWxWaWV3IENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQ0KKyNpbmNsdWRlICJjbXNpc19hcm1jYy5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEFSTSBDb21waWxlciBWNiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNpbmNsdWRlICJjbXNpc19hcm1jY19WNi5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNpbmNsdWRlICJjbXNpc19nY2MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBJQ0MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KKyNpbmNsdWRlIDxjbXNpc19pYXIuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUSSBDQ1MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQ0KKyNpbmNsdWRlIDxjbXNpc19jY3MuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkNCisvKg0KKyAqIFRoZSBDTVNJUyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGludHJpbnNpY3MgaW4gdGhlIGNvbXBpbGVyLg0KKyAqIFBsZWFzZSB1c2UgImNhcm0gLT9pIiB0byBnZXQgYW4gdXAgdG8gZGF0ZSBsaXN0IG9mIGFsbCBpbnRyaW5zaWNzLA0KKyAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4NCisgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBDT1NNSUMgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkNCisjaW5jbHVkZSA8Y21zaXNfY3NtLmg+DQorDQorI2VuZGlmDQorDQorLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovDQorDQorI2VuZGlmIC8qIF9fQ09SRV9DTUlOU1RSX0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21TaW1kLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2Ntc2lzL2NvcmVfY21TaW1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3MmVkNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvY21zaXMvY29yZV9jbVNpbWQuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIGNvcmVfY21TaW1kLmgNCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gU0lNRCBIZWFkZXIgRmlsZQ0KKyAqIEB2ZXJzaW9uICBWNC4zMA0KKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1DQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVEDQorDQorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZA0KKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgICAqDQorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUNCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkNCisjcHJhZ21hIHN5c3RlbV9pbmNsdWRlICAgICAgICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlIGZvciBNSVNSQSBjaGVjayAqLw0KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApDQorI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlICovDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0NPUkVfQ01TSU1EX0gNCisjZGVmaW5lIF9fQ09SRV9DTVNJTURfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKw0KKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMgIENvbXBpbGVyIHNwZWNpZmljIEludHJpbnNpY3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLw0KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzIENNU0lTIFNJTUQgSW50cmluc2ljcw0KKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBTSU1EIGluc3RydWN0aW9ucw0KKyAgQHsNCisqLw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWxWaWV3IENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQ0KKyNpbmNsdWRlICJjbXNpc19hcm1jYy5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEFSTSBDb21waWxlciBWNiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQ0KKyNpbmNsdWRlICJjbXNpc19hcm1jY19WNi5oIg0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KKyNpbmNsdWRlICJjbXNpc19nY2MuaCINCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBJQ0MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KKyNpbmNsdWRlIDxjbXNpc19pYXIuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUSSBDQ1MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQ0KKyNpbmNsdWRlIDxjbXNpc19jY3MuaD4NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkNCisvKg0KKyAqIFRoZSBDTVNJUyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGludHJpbnNpY3MgaW4gdGhlIGNvbXBpbGVyLg0KKyAqIFBsZWFzZSB1c2UgImNhcm0gLT9pIiB0byBnZXQgYW4gdXAgdG8gZGF0ZSBsaXN0IG9mIGFsbCBpbnRyaW5zaWNzLA0KKyAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4NCisgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBDT1NNSUMgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkNCisjaW5jbHVkZSA8Y21zaXNfY3NtLmg+DQorDQorI2VuZGlmDQorDQorLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzICovDQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX0NPUkVfQ01TSU1EX0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9jb21waWxlcl9hYnN0cmFjdGlvbi5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvY29tcGlsZXJfYWJzdHJhY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWJiNzVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvY29tcGlsZXJfYWJzdHJhY3Rpb24uaApAQCAtMCwwICsxLDE0NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgX0NPTVBJTEVSX0FCU1RSQUNUSU9OX0gNCisjZGVmaW5lIF9DT01QSUxFUl9BQlNUUkFDVElPTl9IDQorDQorLypsaW50ICsrZmxiICJFbnRlciBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkNCisNCisjaWZuZGVmIF9fQVNNDQorI2RlZmluZSBfX0FTTSAgICAgICAgICAgICAgIF9fYXNtDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0lOTElORQ0KKyNkZWZpbmUgX19JTkxJTkUgICAgICAgICAgICBfX2lubGluZQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19XRUFLDQorI2RlZmluZSBfX1dFQUsgICAgICAgICAgICAgIF9fd2Vhaw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19BTElHTg0KKyNkZWZpbmUgX19BTElHTihuKSAgICAgICAgICBfX2FsaWduKG4pDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX1BBQ0tFRA0KKyNkZWZpbmUgX19QQUNLRUQgICAgICAgICAgICBfX3BhY2tlZA0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgR0VUX1NQKCkgICAgICAgICAgICAgICAgX19jdXJyZW50X3NwKCkNCisNCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorDQorI2lmbmRlZiBfX0FTTQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICAgICBfX2FzbQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19JTkxJTkUNCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgICAgaW5saW5lDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX1dFQUsNCisjZGVmaW5lIF9fV0VBSyAgICAgICAgICAgICAgX193ZWFrDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0FMSUdODQorI2RlZmluZSBTVFJJTkdfUFJBR01BKHgpIF9QcmFnbWEoI3gpDQorI2RlZmluZSBfX0FMSUdOKG4pIFNUUklOR19QUkFHTUEoZGF0YV9hbGlnbm1lbnQgPSBuKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19QQUNLRUQNCisjZGVmaW5lIF9fUEFDS0VEICAgICAgICAgICAgX19wYWNrZWQNCisjZW5kaWYNCisNCisjZGVmaW5lIEdFVF9TUCgpICAgICAgICAgICAgICAgIF9fZ2V0X1NQKCkNCisNCisjZWxpZiBkZWZpbmVkICAgKCBfX0dOVUNfXyApDQorDQorI2lmbmRlZiBfX0FTTQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICAgICBfX2FzbQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19JTkxJTkUNCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgICAgaW5saW5lDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX1dFQUsNCisjZGVmaW5lIF9fV0VBSyAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygod2VhaykpDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0FMSUdODQorI2RlZmluZSBfX0FMSUdOKG4pICAgICAgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQobikpKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19QQUNLRUQNCisjZGVmaW5lIF9fUEFDS0VEICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgR0VUX1NQKCkgICAgICAgICAgICAgICAgZ2NjX2N1cnJlbnRfc3AoKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdjY19jdXJyZW50X3NwKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1bnNpZ25lZCBzcCBfX0FTTSgic3AiKTsNCisgICAgcmV0dXJuIHNwOw0KK30NCisNCisjZWxpZiBkZWZpbmVkICAgKCBfX1RBU0tJTkdfXyApDQorDQorI2lmbmRlZiBfX0FTTQ0KKyNkZWZpbmUgX19BU00gICAgICAgICAgICAgICBfX2FzbQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgX19JTkxJTkUNCisjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgICAgaW5saW5lDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX1dFQUsNCisjZGVmaW5lIF9fV0VBSyAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygod2VhaykpDQorI2VuZGlmDQorDQorI2lmbmRlZiBfX0FMSUdODQorI2RlZmluZSBfX0FMSUdOKG4pICAgICAgICAgIF9fYWxpZ24obikNCisjZW5kaWYNCisNCisvKiBOb3QgZGVmaW5lZCBmb3IgVEFTS0lORy4gKi8NCisjaWZuZGVmIF9fUEFDS0VEDQorI2RlZmluZSBfX1BBQ0tFRA0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgR0VUX1NQKCkgICAgICAgICAgICAgICAgX19nZXRfTVNQKCkNCisNCisjZW5kaWYNCisNCisvKmxpbnQgLS1mbGIgIkxlYXZlIGxpYnJhcnkgcmVnaW9uIiAqLw0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL2djY19zdGFydHVwX25yZjUyODQwLlMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9nY2Nfc3RhcnR1cF9ucmY1Mjg0MC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDYyNzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9nY2Nfc3RhcnR1cF9ucmY1Mjg0MC5TCkBAIC0wLDAgKzEsNTM4IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTMgQVJNIExJTUlURUQNCisNCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkDQorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFDQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisuc3ludGF4IHVuaWZpZWQNCisuYXJjaCBhcm12N2UtbQ0KKw0KKyNpZmRlZiBfX1NUQVJUVVBfQ09ORklHDQorI2luY2x1ZGUgInN0YXJ0dXBfY29uZmlnLmgiDQorI2VuZGlmDQorDQorLnNlY3Rpb24gLnN0YWNrDQorLmFsaWduIDMNCisjaWYgZGVmaW5lZChfX1NUQVJUVVBfQ09ORklHKQ0KKy5lcXUgICAgU3RhY2tfU2l6ZSwgX19TVEFSVFVQX0NPTkZJR19TVEFDS19TSVpFDQorI2VsaWYgZGVmaW5lZChfX1NUQUNLX1NJWkUpDQorLmVxdSAgICBTdGFja19TaXplLCBfX1NUQUNLX1NJWkUNCisjZWxzZQ0KKy5lcXUgICAgU3RhY2tfU2l6ZSwgODE5Mg0KKyNlbmRpZg0KKy5nbG9ibCBfX1N0YWNrVG9wDQorLmdsb2JsIF9fU3RhY2tMaW1pdA0KK19fU3RhY2tMaW1pdDoNCisuc3BhY2UgU3RhY2tfU2l6ZQ0KKy5zaXplIF9fU3RhY2tMaW1pdCwgLiAtIF9fU3RhY2tMaW1pdA0KK19fU3RhY2tUb3A6DQorLnNpemUgX19TdGFja1RvcCwgLiAtIF9fU3RhY2tUb3ANCisNCisuc2VjdGlvbiAuaGVhcA0KKy5hbGlnbiAzDQorI2lmIGRlZmluZWQoX19TVEFSVFVQX0NPTkZJRykNCisuZXF1IEhlYXBfU2l6ZSwgX19TVEFSVFVQX0NPTkZJR19IRUFQX1NJWkUNCisjZWxpZiBkZWZpbmVkKF9fSEVBUF9TSVpFKQ0KKy5lcXUgSGVhcF9TaXplLCBfX0hFQVBfU0laRQ0KKyNlbHNlDQorLmVxdSAgICBIZWFwX1NpemUsIDgxOTINCisjZW5kaWYNCisuZ2xvYmwgX19IZWFwQmFzZQ0KKy5nbG9ibCBfX0hlYXBMaW1pdA0KK19fSGVhcEJhc2U6DQorLmlmIEhlYXBfU2l6ZQ0KKy5zcGFjZSBIZWFwX1NpemUNCisuZW5kaWYNCisuc2l6ZSBfX0hlYXBCYXNlLCAuIC0gX19IZWFwQmFzZQ0KK19fSGVhcExpbWl0Og0KKy5zaXplIF9fSGVhcExpbWl0LCAuIC0gX19IZWFwTGltaXQNCisNCisuc2VjdGlvbiAuaXNyX3ZlY3Rvcg0KKy5hbGlnbiAyDQorLmdsb2JsIF9faXNyX3ZlY3Rvcg0KK19faXNyX3ZlY3RvcjoNCisubG9uZyAgIF9fU3RhY2tUb3AgICAgICAgICAgICAgICAgICAvKiBUb3Agb2YgU3RhY2sgKi8NCisubG9uZyAgIFJlc2V0X0hhbmRsZXINCisubG9uZyAgIE5NSV9IYW5kbGVyDQorLmxvbmcgICBIYXJkRmF1bHRfSGFuZGxlcg0KKy5sb25nICAgTWVtb3J5TWFuYWdlbWVudF9IYW5kbGVyDQorLmxvbmcgICBCdXNGYXVsdF9IYW5kbGVyDQorLmxvbmcgICBVc2FnZUZhdWx0X0hhbmRsZXINCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICBTVkNfSGFuZGxlcg0KKy5sb25nICAgRGVidWdNb25fSGFuZGxlcg0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIFBlbmRTVl9IYW5kbGVyDQorLmxvbmcgICBTeXNUaWNrX0hhbmRsZXINCisNCisvKiBFeHRlcm5hbCBJbnRlcnJ1cHRzICovDQorLmxvbmcgICBQT1dFUl9DTE9DS19JUlFIYW5kbGVyDQorLmxvbmcgICBSQURJT19JUlFIYW5kbGVyDQorLmxvbmcgICBVQVJURTBfVUFSVDBfSVJRSGFuZGxlcg0KKy5sb25nICAgU1BJTTBfU1BJUzBfVFdJTTBfVFdJUzBfU1BJMF9UV0kwX0lSUUhhbmRsZXINCisubG9uZyAgIFNQSU0xX1NQSVMxX1RXSU0xX1RXSVMxX1NQSTFfVFdJMV9JUlFIYW5kbGVyDQorLmxvbmcgICBORkNUX0lSUUhhbmRsZXINCisubG9uZyAgIEdQSU9URV9JUlFIYW5kbGVyDQorLmxvbmcgICBTQUFEQ19JUlFIYW5kbGVyDQorLmxvbmcgICBUSU1FUjBfSVJRSGFuZGxlcg0KKy5sb25nICAgVElNRVIxX0lSUUhhbmRsZXINCisubG9uZyAgIFRJTUVSMl9JUlFIYW5kbGVyDQorLmxvbmcgICBSVEMwX0lSUUhhbmRsZXINCisubG9uZyAgIFRFTVBfSVJRSGFuZGxlcg0KKy5sb25nICAgUk5HX0lSUUhhbmRsZXINCisubG9uZyAgIEVDQl9JUlFIYW5kbGVyDQorLmxvbmcgICBDQ01fQUFSX0lSUUhhbmRsZXINCisubG9uZyAgIFdEVF9JUlFIYW5kbGVyDQorLmxvbmcgICBSVEMxX0lSUUhhbmRsZXINCisubG9uZyAgIFFERUNfSVJRSGFuZGxlcg0KKy5sb25nICAgQ09NUF9MUENPTVBfSVJRSGFuZGxlcg0KKy5sb25nICAgU1dJMF9FR1UwX0lSUUhhbmRsZXINCisubG9uZyAgIFNXSTFfRUdVMV9JUlFIYW5kbGVyDQorLmxvbmcgICBTV0kyX0VHVTJfSVJRSGFuZGxlcg0KKy5sb25nICAgU1dJM19FR1UzX0lSUUhhbmRsZXINCisubG9uZyAgIFNXSTRfRUdVNF9JUlFIYW5kbGVyDQorLmxvbmcgICBTV0k1X0VHVTVfSVJRSGFuZGxlcg0KKy5sb25nICAgVElNRVIzX0lSUUhhbmRsZXINCisubG9uZyAgIFRJTUVSNF9JUlFIYW5kbGVyDQorLmxvbmcgICBQV00wX0lSUUhhbmRsZXINCisubG9uZyAgIFBETV9JUlFIYW5kbGVyDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIE1XVV9JUlFIYW5kbGVyDQorLmxvbmcgICBQV00xX0lSUUhhbmRsZXINCisubG9uZyAgIFBXTTJfSVJRSGFuZGxlcg0KKy5sb25nICAgU1BJTTJfU1BJUzJfU1BJMl9JUlFIYW5kbGVyDQorLmxvbmcgICBSVEMyX0lSUUhhbmRsZXINCisubG9uZyAgIEkyU19JUlFIYW5kbGVyDQorLmxvbmcgICBGUFVfSVJRSGFuZGxlcg0KKy5sb25nICAgVVNCRF9JUlFIYW5kbGVyDQorLmxvbmcgICBVQVJURTFfSVJRSGFuZGxlcg0KKy5sb25nICAgUVNQSV9JUlFIYW5kbGVyDQorLmxvbmcgICBDUllQVE9DRUxMX0lSUUhhbmRsZXINCisubG9uZyAgIFNQSU0zX0lSUUhhbmRsZXINCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICBQV00zX0lSUUhhbmRsZXINCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKy5sb25nICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qUmVzZXJ2ZWQgKi8NCisubG9uZyAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlJlc2VydmVkICovDQorLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLypSZXNlcnZlZCAqLw0KKw0KKy5zaXplIF9faXNyX3ZlY3RvciwgLiAtIF9faXNyX3ZlY3Rvcg0KKw0KKy8qIFJlc2V0IEhhbmRsZXIgKi8NCisNCisNCisudGV4dA0KKy50aHVtYg0KKy50aHVtYl9mdW5jDQorLmFsaWduIDENCisuZ2xvYmwgUmVzZXRfSGFuZGxlcg0KKy50eXBlIFJlc2V0X0hhbmRsZXIsICUgZnVuY3Rpb24NCitSZXNldF9IYW5kbGVyOg0KKw0KKw0KKy8qIExvb3AgdG8gY29weSBkYXRhIGZyb20gcmVhZCBvbmx5IG1lbW9yeSB0byBSQU0uDQorICogVGhlIHJhbmdlcyBvZiBjb3B5IGZyb20vdG8gYXJlIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgc3ltYm9sczoNCisgKiAgICAgIF9fZXRleHQ6IExNQSBvZiBzdGFydCBvZiB0aGUgc2VjdGlvbiB0byBjb3B5IGZyb20uIFVzdWFsbHkgZW5kIG9mIHRleHQNCisgKiAgICAgIF9fZGF0YV9zdGFydF9fOiBWTUEgb2Ygc3RhcnQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSB0by4NCisgKiAgICAgIF9fYnNzX3N0YXJ0X186IFZNQSBvZiBlbmQgb2YgdGhlIHNlY3Rpb24gdG8gY29weSB0by4gTm9ybWFsbHkgX19kYXRhX2VuZF9fIGlzIHVzZWQsIGJ1dCBieSB1c2luZyBfX2Jzc19zdGFydF9fDQorICogICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIGNhbiBhZGQgdGhlaXIgb3duIGluaXRpYWxpemVkIGRhdGEgc2VjdGlvbiBiZWZvcmUgQlNTIHNlY3Rpb24gd2l0aCB0aGUgSU5URVJUIEFGVEVSIGNvbW1hbmQuDQorICoNCisgKiBBbGwgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5Lg0KKyAqLw0KK2xkciByMSwgPSBfX2V0ZXh0DQorICAgICAgICAgIGxkciByMiwgPSBfX2RhdGFfc3RhcnRfXw0KKyAgICAgICAgICAgICAgICAgICAgbGRyIHIzLCA9IF9fYnNzX3N0YXJ0X18NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzIHIzLCByMg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZSAuTF9sb29wMV9kb25lDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkxfbG9vcDE6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicyByMywgIzQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZHIgcjAsIFtyMSwgcjNdDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyIHIwLCBbcjIsIHIzXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJndCAuTF9sb29wMQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5MX2xvb3AxX2RvbmU6DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBwYXJ0IG9mIHdvcmsgdXN1YWxseSBpcyBkb25lIGluIEMgbGlicmFyeSBzdGFydHVwIGNvZGUuIE90aGVyd2lzZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWZpbmUgX19TVEFSVFVQX0NMRUFSX0JTUyB0byBlbmFibGUgaXQgaW4gdGhpcyBzdGFydHVwLiBUaGlzIHNlY3Rpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjbGVhcnMgdGhlIFJBTSB3aGVyZSBCU1MgZGF0YSBpcyBsb2NhdGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGhlIEJTUyBzZWN0aW9uIGlzIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgc3ltYm9scw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIF9fYnNzX3N0YXJ0X186IHN0YXJ0IG9mIHRoZSBCU1Mgc2VjdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBfX2Jzc19lbmRfXzogZW5kIG9mIHRoZSBCU1Mgc2VjdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEFsbCBhZGRyZXNzZXMgbXVzdCBiZSBhbGlnbmVkIHRvIDQgYnl0ZXMgYm91bmRhcnkuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2lmZGVmIF9fU1RBUlRVUF9DTEVBUl9CU1MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZHIgcjEsID0gX19ic3Nfc3RhcnRfXw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZHIgcjIsID0gX19ic3NfZW5kX18NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnMgcjAsIDANCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnMgcjIsIHIxDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGUgLkxfbG9vcDNfZG9uZQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkxfbG9vcDM6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzIHIyLCAjNA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyIHIwLCBbcjEsIHIyXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmd0IC5MX2xvb3AzDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuTF9sb29wM19kb25lOg0KKyNlbmRpZiAvKiBfX1NUQVJUVVBfQ0xFQVJfQlNTICovDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGVjdXRlIFN5c3RlbUluaXQgZnVuY3Rpb24uICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibCBTeXN0ZW1Jbml0DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsIF9zdGFydCBmdW5jdGlvbiBwcm92aWRlZCBieSBsaWJyYXJpZXMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aG9zZSBsaWJyYXJpZXMgYXJlIG5vdCBhY2Nlc3NpYmxlLCBkZWZpbmUgX19TVEFSVCBhcyB5b3VyIGVudHJ5IHBvaW50Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2lmbmRlZiBfX1NUQVJUDQorI2RlZmluZSBfX1NUQVJUIF9zdGFydA0KKyNlbmRpZg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmwgX19TVEFSVA0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBvb2wNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgUmVzZXRfSGFuZGxlciwgLiAtIFJlc2V0X0hhbmRsZXINCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZWN0aW9uICIudGV4dCINCisNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1bW15IEV4Y2VwdGlvbiBIYW5kbGVycyAoaW5maW5pdGUgbG9vcHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkKSAqLw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBOTUlfSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICBOTUlfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk1JX0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgTk1JX0hhbmRsZXIsIC4gLSBOTUlfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBIYXJkRmF1bHRfSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICBIYXJkRmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFyZEZhdWx0X0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgSGFyZEZhdWx0X0hhbmRsZXIsIC4gLSBIYXJkRmF1bHRfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBNZW1vcnlNYW5hZ2VtZW50X0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgTWVtb3J5TWFuYWdlbWVudF9IYW5kbGVyLCAlIGZ1bmN0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlNYW5hZ2VtZW50X0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgTWVtb3J5TWFuYWdlbWVudF9IYW5kbGVyLCAuIC0gTWVtb3J5TWFuYWdlbWVudF9IYW5kbGVyDQorDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2VhayAgIEJ1c0ZhdWx0X0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgQnVzRmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzRmF1bHRfSGFuZGxlcjoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgICAgICAgLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNpemUgICBCdXNGYXVsdF9IYW5kbGVyLCAuIC0gQnVzRmF1bHRfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBVc2FnZUZhdWx0X0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgVXNhZ2VGYXVsdF9IYW5kbGVyLCAlIGZ1bmN0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2FnZUZhdWx0X0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgVXNhZ2VGYXVsdF9IYW5kbGVyLCAuIC0gVXNhZ2VGYXVsdF9IYW5kbGVyDQorDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2VhayAgIFNWQ19IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIFNWQ19IYW5kbGVyLCAlIGZ1bmN0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVkNfSGFuZGxlcjoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgICAgICAgLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNpemUgICBTVkNfSGFuZGxlciwgLiAtIFNWQ19IYW5kbGVyDQorDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2VhayAgIERlYnVnTW9uX0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgRGVidWdNb25fSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdNb25fSGFuZGxlcjoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgICAgICAgLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNpemUgICBEZWJ1Z01vbl9IYW5kbGVyLCAuIC0gRGVidWdNb25fSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBQZW5kU1ZfSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICBQZW5kU1ZfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZFNWX0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgUGVuZFNWX0hhbmRsZXIsIC4gLSBQZW5kU1ZfSGFuZGxlcg0KKw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBTeXNUaWNrX0hhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgU3lzVGlja19IYW5kbGVyLCAlIGZ1bmN0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0hhbmRsZXI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiICAgICAgIC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaXplICAgU3lzVGlja19IYW5kbGVyLCAuIC0gU3lzVGlja19IYW5kbGVyDQorDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUlEgSGFuZGxlcnMgKi8NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nbG9ibCAgRGVmYXVsdF9IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgIERlZmF1bHRfSGFuZGxlciwgJSBmdW5jdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdF9IYW5kbGVyOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAgICAgICAuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2l6ZSAgIERlZmF1bHRfSGFuZGxlciwgLiAtIERlZmF1bHRfSGFuZGxlcg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hY3JvICBJUlEgaGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndlYWsgICBcaGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldCAgICBcaGFuZGxlciwgRGVmYXVsdF9IYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZW5kbQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBQT1dFUl9DTE9DS19JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFJBRElPX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgVUFSVEUwX1VBUlQwX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgU1BJTTBfU1BJUzBfVFdJTTBfVFdJUzBfU1BJMF9UV0kwX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgU1BJTTFfU1BJUzFfVFdJTTFfVFdJUzFfU1BJMV9UV0kxX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgTkZDVF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIEdQSU9URV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNBQURDX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgVElNRVIwX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgVElNRVIxX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgVElNRVIyX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUlRDMF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFRFTVBfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBSTkdfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBFQ0JfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBDQ01fQUFSX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgV0RUX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUlRDMV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFFERUNfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBDT01QX0xQQ09NUF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNXSTBfRUdVMF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNXSTFfRUdVMV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNXSTJfRUdVMl9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNXSTNfRUdVM19JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNXSTRfRUdVNF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNXSTVfRUdVNV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFRJTUVSM19JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFRJTUVSNF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFBXTTBfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBQRE1fSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBNV1VfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBQV00xX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgUFdNMl9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFNQSU0yX1NQSVMyX1NQSTJfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBSVEMyX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgSTJTX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgRlBVX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgVVNCRF9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFVBUlRFMV9JUlFIYW5kbGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUlEgIFFTUElfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBDUllQVE9DRUxMX0lSUUhhbmRsZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgU1BJTTNfSVJRSGFuZGxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRICBQV00zX0lSUUhhbmRsZXINCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lbmQNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmYuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDkzMGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmYuaApAQCAtMCwwICsxLDg0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfSA0KKyNkZWZpbmUgTlJGX0gNCisNCisvKiBNREsgdmVyc2lvbiAqLw0KKyNkZWZpbmUgTURLX01BSk9SX1ZFUlNJT04gICA4DQorI2RlZmluZSBNREtfTUlOT1JfVkVSU0lPTiAgIDExDQorI2RlZmluZSBNREtfTUlDUk9fVkVSU0lPTiAgIDENCisNCisvKiBSZWRlZmluZSAib2xkIiB0b28tZ2VuZXJpYyBuYW1lIE5SRjUyIHRvIE5SRjUyODMyX1hYQUEgdG8ga2VlcCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8NCisjaWYgZGVmaW5lZCAoTlJGNTIpDQorI2lmbmRlZiBOUkY1MjgzMl9YWEFBDQorI2RlZmluZSBOUkY1MjgzMl9YWEFBDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyogRGVmaW5lIE5SRjUyX1NFUklFUyBmb3IgY29tbW9uIHVzZSBpbiBuUkY1MiBzZXJpZXMgZGV2aWNlcy4gKi8NCisjaWYgZGVmaW5lZCAoTlJGNTI4MzJfWFhBQSkgfHwgZGVmaW5lZCAoTlJGNTI4NDBfWFhBQSkNCisjZGVmaW5lIE5SRjUyX1NFUklFUw0KKyNlbmRpZg0KKw0KKw0KKyNpZiBkZWZpbmVkKF9XSU4zMikNCisvKiBEbyBub3QgaW5jbHVkZSBucmYgc3BlY2lmaWMgZmlsZXMgd2hlbiBidWlsZGluZyBmb3IgUEMgaG9zdCAqLw0KKyNlbGlmIGRlZmluZWQoX191bml4KQ0KKy8qIERvIG5vdCBpbmNsdWRlIG5yZiBzcGVjaWZpYyBmaWxlcyB3aGVuIGJ1aWxkaW5nIGZvciBQQyBob3N0ICovDQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pDQorLyogRG8gbm90IGluY2x1ZGUgbnJmIHNwZWNpZmljIGZpbGVzIHdoZW4gYnVpbGRpbmcgZm9yIFBDIGhvc3QgKi8NCisjZWxzZQ0KKw0KKy8qIERldmljZSBzZWxlY3Rpb24gZm9yIGRldmljZSBpbmNsdWRlcy4gKi8NCisjaWYgZGVmaW5lZCAoTlJGNTEpDQorI2luY2x1ZGUgIm5yZjUxLmgiDQorI2luY2x1ZGUgIm5yZjUxX2JpdGZpZWxkcy5oIg0KKyNpbmNsdWRlICJucmY1MV9kZXByZWNhdGVkLmgiDQorI2VsaWYgZGVmaW5lZCAoTlJGNTI4NDBfWFhBQSkNCisjaW5jbHVkZSAibnJmNTI4NDAuaCINCisjaW5jbHVkZSAibnJmNTI4NDBfYml0ZmllbGRzLmgiDQorI2luY2x1ZGUgIm5yZjUxX3RvX25yZjUyODQwLmgiDQorI2luY2x1ZGUgIm5yZjUyX3RvX25yZjUyODQwLmgiDQorI2VsaWYgZGVmaW5lZCAoTlJGNTI4MzJfWFhBQSkNCisjaW5jbHVkZSAibnJmNTIuaCINCisjaW5jbHVkZSAibnJmNTJfYml0ZmllbGRzLmgiDQorI2luY2x1ZGUgIm5yZjUxX3RvX25yZjUyLmgiDQorI2luY2x1ZGUgIm5yZjUyX25hbWVfY2hhbmdlLmgiDQorI2Vsc2UNCisjZXJyb3IgIkRldmljZSBtdXN0IGJlIGRlZmluZWQuIFNlZSBucmYuaC4iDQorI2VuZGlmIC8qIE5SRjUxLCBOUkY1MjgzMl9YWEFBLCBOUkY1Mjg0MF9YWEFBICovDQorDQorI2luY2x1ZGUgImNvbXBpbGVyX2Fic3RyYWN0aW9uLmgiDQorDQorI2VuZGlmIC8qIF9XSU4zMiB8fCBfX3VuaXggfHwgX19BUFBMRV9fICovDQorDQorI2VuZGlmIC8qIE5SRl9IICovDQorDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTFfdG9fbnJmNTIuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUxX3RvX25yZjUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5OGI2YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUxX3RvX25yZjUyLmgKQEAgLTAsMCArMSw5NTIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIE5SRjUxX1RPX05SRjUyX0gNCisjZGVmaW5lIE5SRjUxX1RPX05SRjUyX0gNCisNCisvKmxpbnQgKytmbGIgIkVudGVyIGxpYnJhcnkgcmVnaW9uICovDQorDQorLyogVGhpcyBmaWxlIGlzIGdpdmVuIHRvIHByZXZlbnQgeW91ciBTVyBmcm9tIG5vdCBjb21waWxpbmcgd2l0aCB0aGUgbmFtZSBjaGFuZ2VzIGJldHdlZW4gblJGNTEgYW5kIG5SRjUyIGRldmljZXMuDQorICogSXQgcmVkZWZpbmVzIHRoZSBvbGQgblJGNTEgbmFtZXMgaW50byB0aGUgbmV3IG9uZXMgYXMgbG9uZyBhcyB0aGUgZnVuY3Rpb25hbGl0eSBpcyBzdGlsbCBzdXBwb3J0ZWQuIElmIHRoZQ0KKyAqIGZ1bmN0aW9uYWxpdHkgaXMgZ29uZSwgdGhlcmUgb2xkIG5hbWVzIGFyZSBub3QgZGVmaW5lZCwgc28gY29tcGlsYXRpb24gd2lsbCBmYWlsLiBOb3RlIHRoYXQgYWxzbyBpbmNsdWRlcyBtYWNyb3MNCisgKiBmcm9tIHRoZSBucmY1MV9kZXByZWNhdGVkLmggZmlsZS4gKi8NCisNCisNCisvKiBJUlEgKi8NCisvKiBTZXZlcmFsIHBlcmlwaGVyYWxzIGhhdmUgYmVlbiBhZGRlZCB0byBzZXZlcmFsIGluZGV4ZXMuIE5hbWVzIG9mIElSUSBoYW5kbGVycyBhbmQgSVJRIG51bWJlcnMgaGF2ZSBjaGFuZ2VkLiAqLw0KKyNkZWZpbmUgVUFSVDBfSVJRSGFuZGxlciAgICAgICAgVUFSVEUwX1VBUlQwX0lSUUhhbmRsZXINCisjZGVmaW5lIFNQSTBfVFdJMF9JUlFIYW5kbGVyICAgIFNQSU0wX1NQSVMwX1RXSU0wX1RXSVMwX1NQSTBfVFdJMF9JUlFIYW5kbGVyDQorI2RlZmluZSBTUEkxX1RXSTFfSVJRSGFuZGxlciAgICBTUElNMV9TUElTMV9UV0lNMV9UV0lTMV9TUEkxX1RXSTFfSVJRSGFuZGxlcg0KKyNkZWZpbmUgQURDX0lSUUhhbmRsZXIgICAgICAgICAgU0FBRENfSVJRSGFuZGxlcg0KKyNkZWZpbmUgTFBDT01QX0lSUUhhbmRsZXIgICAgICAgQ09NUF9MUENPTVBfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJMF9JUlFIYW5kbGVyICAgICAgICAgU1dJMF9FR1UwX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTFfSVJRSGFuZGxlciAgICAgICAgIFNXSTFfRUdVMV9JUlFIYW5kbGVyDQorI2RlZmluZSBTV0kyX0lSUUhhbmRsZXIgICAgICAgICBTV0kyX0VHVTJfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJM19JUlFIYW5kbGVyICAgICAgICAgU1dJM19FR1UzX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTRfSVJRSGFuZGxlciAgICAgICAgIFNXSTRfRUdVNF9JUlFIYW5kbGVyDQorI2RlZmluZSBTV0k1X0lSUUhhbmRsZXIgICAgICAgICBTV0k1X0VHVTVfSVJRSGFuZGxlcg0KKw0KKyNkZWZpbmUgVUFSVDBfSVJRbiAgICAgICAgICAgICAgVUFSVEUwX1VBUlQwX0lSUW4NCisjZGVmaW5lIFNQSTBfVFdJMF9JUlFuICAgICAgICAgIFNQSU0wX1NQSVMwX1RXSU0wX1RXSVMwX1NQSTBfVFdJMF9JUlFuDQorI2RlZmluZSBTUEkxX1RXSTFfSVJRbiAgICAgICAgICBTUElNMV9TUElTMV9UV0lNMV9UV0lTMV9TUEkxX1RXSTFfSVJRbg0KKyNkZWZpbmUgQURDX0lSUW4gICAgICAgICAgICAgICAgU0FBRENfSVJRbg0KKyNkZWZpbmUgTFBDT01QX0lSUW4gICAgICAgICAgICAgQ09NUF9MUENPTVBfSVJRbg0KKyNkZWZpbmUgU1dJMF9JUlFuICAgICAgICAgICAgICAgU1dJMF9FR1UwX0lSUW4NCisjZGVmaW5lIFNXSTFfSVJRbiAgICAgICAgICAgICAgIFNXSTFfRUdVMV9JUlFuDQorI2RlZmluZSBTV0kyX0lSUW4gICAgICAgICAgICAgICBTV0kyX0VHVTJfSVJRbg0KKyNkZWZpbmUgU1dJM19JUlFuICAgICAgICAgICAgICAgU1dJM19FR1UzX0lSUW4NCisjZGVmaW5lIFNXSTRfSVJRbiAgICAgICAgICAgICAgIFNXSTRfRUdVNF9JUlFuDQorI2RlZmluZSBTV0k1X0lSUW4gICAgICAgICAgICAgICBTV0k1X0VHVTVfSVJRbg0KKw0KKw0KKy8qIFVJQ1IgKi8NCisvKiBSZWdpc3RlciBSQlBDT05GIHdhcyByZW5hbWVkIHRvIEFQUFJPVEVDVC4gKi8NCisjZGVmaW5lIFJCUENPTkYgICAgIEFQUFJPVEVDVA0KKw0KKyNkZWZpbmUgVUlDUl9SQlBDT05GX1BBTExfUG9zICAgICAgICAgICBVSUNSX0FQUFJPVEVDVF9QQUxMX1Bvcw0KKyNkZWZpbmUgVUlDUl9SQlBDT05GX1BBTExfTXNrICAgICAgICAgICBVSUNSX0FQUFJPVEVDVF9QQUxMX01zaw0KKyNkZWZpbmUgVUlDUl9SQlBDT05GX1BBTExfRW5hYmxlZCAgICAgICBVSUNSX0FQUFJPVEVDVF9QQUxMX0VuYWJsZWQNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX0Rpc2FibGVkICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9EaXNhYmxlZA0KKw0KKw0KKy8qIEdQSU8gKi8NCisvKiBHUElPIHBvcnQgd2FzIHJlbmFtZWQgdG8gUDAuICovDQorI2RlZmluZSBOUkZfR1BJTyAgICAgICAgTlJGX1AwDQorI2RlZmluZSBOUkZfR1BJT19CQVNFICAgTlJGX1AwX0JBU0UNCisNCisNCisvKiBRREVDICovDQorLyogVGhlIHJlZ2lzdGVycyBQU0VMQSwgUFNFTEIgYW5kIFBTRUxMRUQgd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdC4gKi8NCisjZGVmaW5lIFBTRUxMRUQgICAgIFBTRUwuTEVEDQorI2RlZmluZSBQU0VMQSAgICAgICBQU0VMLkENCisjZGVmaW5lIFBTRUxCICAgICAgIFBTRUwuQg0KKw0KKw0KKy8qIFNQSVMgKi8NCisvKiBUaGUgcmVnaXN0ZXJzIFBTRUxTQ0ssIFBTRUxNSVNPLCBQU0VMTU9TSSwgUFNFTENTTiB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0LiAqLw0KKyNkZWZpbmUgUFNFTFNDSyAgICAgICBQU0VMLlNDSw0KKyNkZWZpbmUgUFNFTE1JU08gICAgICBQU0VMLk1JU08NCisjZGVmaW5lIFBTRUxNT1NJICAgICAgUFNFTC5NT1NJDQorI2RlZmluZSBQU0VMQ1NOICAgICAgIFBTRUwuQ1NODQorDQorLyogVGhlIHJlZ2lzdGVycyBSWERQVFIsIE1BWFJYLCBBTU9VTlRSWCB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0ICovDQorI2RlZmluZSBSWERQVFIgICAgICAgIFJYRC5QVFINCisjZGVmaW5lIE1BWFJYICAgICAgICAgUlhELk1BWENOVA0KKyNkZWZpbmUgQU1PVU5UUlggICAgICBSWEQuQU1PVU5UDQorDQorI2RlZmluZSBTUElTX01BWFJYX01BWFJYX1BvcyAgICAgICAgU1BJU19SWERfTUFYQ05UX01BWENOVF9Qb3MNCisjZGVmaW5lIFNQSVNfTUFYUlhfTUFYUlhfTXNrICAgICAgICBTUElTX1JYRF9NQVhDTlRfTUFYQ05UX01zaw0KKw0KKyNkZWZpbmUgU1BJU19BTU9VTlRSWF9BTU9VTlRSWF9Qb3MgIFNQSVNfUlhEX0FNT1VOVF9BTU9VTlRfUG9zDQorI2RlZmluZSBTUElTX0FNT1VOVFJYX0FNT1VOVFJYX01zayAgU1BJU19SWERfQU1PVU5UX0FNT1VOVF9Nc2sNCisNCisvKiBUaGUgcmVnaXN0ZXJzIFRYRFBUUiwgTUFYVFgsIEFNT1VOVFRYIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QgKi8NCisjZGVmaW5lIFRYRFBUUiAgICAgICAgVFhELlBUUg0KKyNkZWZpbmUgTUFYVFggICAgICAgICBUWEQuTUFYQ05UDQorI2RlZmluZSBBTU9VTlRUWCAgICAgIFRYRC5BTU9VTlQNCisNCisjZGVmaW5lIFNQSVNfTUFYVFhfTUFYVFhfUG9zICAgICAgICBTUElTX1RYRF9NQVhDTlRfTUFYQ05UX1Bvcw0KKyNkZWZpbmUgU1BJU19NQVhUWF9NQVhUWF9Nc2sgICAgICAgIFNQSVNfVFhEX01BWENOVF9NQVhDTlRfTXNrDQorDQorI2RlZmluZSBTUElTX0FNT1VOVFRYX0FNT1VOVFRYX1BvcyAgU1BJU19UWERfQU1PVU5UX0FNT1VOVF9Qb3MNCisjZGVmaW5lIFNQSVNfQU1PVU5UVFhfQU1PVU5UVFhfTXNrICBTUElTX1RYRF9BTU9VTlRfQU1PVU5UX01zaw0KKw0KKw0KKy8qIE1QVSAqLw0KKy8qIFBhcnQgb2YgTVBVIG1vZHVsZSB3YXMgcmVuYW1lZCBCUFJPVCwgd2hpbGUgdGhlIHJlc3Qgd2FzIGVsaW1pbmF0ZWQuICovDQorI2RlZmluZSBOUkZfTVBVICAgICBOUkZfQlBST1QNCisNCisvKiBSZWdpc3RlciBESVNBQkxFSU5ERUJVRyBtYWNyb3Mgd2VyZSBhZmZlY3RlZC4gKi8NCisjZGVmaW5lIE1QVV9ESVNBQkxFSU5ERUJVR19ESVNBQkxFSU5ERUJVR19Qb3MgICAgICAgQlBST1RfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfUG9zDQorI2RlZmluZSBNUFVfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfTXNrICAgICAgIEJQUk9UX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX01zaw0KKyNkZWZpbmUgTVBVX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX0VuYWJsZWQgICBCUFJPVF9ESVNBQkxFSU5ERUJVR19ESVNBQkxFSU5ERUJVR19FbmFibGVkDQorI2RlZmluZSBNUFVfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfRGlzYWJsZWQgIEJQUk9UX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX0Rpc2FibGVkDQorDQorLyogUmVnaXN0ZXJzIFBST1RFTlNFVDAgYW5kIFBST1RFTlNFVDEgd2VyZSBhZmZlY3RlZCBhbmQgcmVuYW1lZCBhcyBDT05GSUcwIGFuZCBDT05GSUcxLiAqLw0KKyNkZWZpbmUgUFJPVEVOU0VUMCAgQ09ORklHMA0KKyNkZWZpbmUgUFJPVEVOU0VUMSAgQ09ORklHMQ0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYzX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT042M19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2M19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjNfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYzX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYzX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2M19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYyX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT042Ml9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2Ml9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjJfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYyX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjJfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYyX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2Ml9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjJfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYxX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT042MV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2MV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYxX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYxX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2MV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzYwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT042MF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2MF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjBfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYwX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNjBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjYwX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc2MF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONjBfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU5X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041OV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1OV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTlfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTlfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU5X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTlfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU5X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1OV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTlfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU4X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041OF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1OF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONThfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNThfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU4X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNThfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU4X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1OF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONThfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU3X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041N19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1N19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTdfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTdfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU3X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTdfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU3X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1N19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTdfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU2X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041Nl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1Nl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTZfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTZfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU2X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTZfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU2X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1Nl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTZfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU1X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041NV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1NV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTVfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTVfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU1X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTVfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU1X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1NV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTVfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzU0X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041NF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1NF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTRfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTRfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU0X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTRfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjU0X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1NF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTRfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUzX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041M19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1M19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTNfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUzX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUzX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1M19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUyX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041Ml9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1Ml9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTJfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUyX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTJfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUyX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1Ml9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTJfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUxX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041MV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1MV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUxX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUxX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1MV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzUwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT041MF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1MF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTBfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUwX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNTBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjUwX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc1MF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONTBfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ5X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040OV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0OV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDlfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDlfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ5X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDlfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ5X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0OV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDlfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ4X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040OF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0OF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDhfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDhfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ4X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDhfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ4X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0OF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDhfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ3X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040N19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0N19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDdfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDdfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ3X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDdfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ3X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0N19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDdfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ2X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040Nl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0Nl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDZfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDZfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ2X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDZfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ2X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0Nl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDZfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ1X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040NV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0NV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDVfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDVfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ1X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDVfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ1X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0NV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDVfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQ0X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040NF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0NF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDRfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDRfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ0X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDRfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQ0X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0NF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDRfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQzX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040M19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0M19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDNfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQzX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQzX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0M19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQyX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040Ml9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0Ml9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDJfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQyX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDJfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQyX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0Ml9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDJfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQxX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040MV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0MV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQxX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQxX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0MV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzQwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT040MF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0MF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDBfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQwX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHNDBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjQwX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUc0MF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9ONDBfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM5X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zOV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczOV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzlfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzlfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM5X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzlfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM5X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczOV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzlfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM4X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zOF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczOF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzhfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzhfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM4X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzhfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM4X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczOF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzhfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM3X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zN19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczN19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzdfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzdfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM3X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzdfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM3X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczN19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzdfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM2X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zNl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzZfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzZfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM2X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzZfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM2X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzZfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM1X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zNV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzVfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzVfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM1X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzVfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM1X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzVfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzM0X1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zNF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzRfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzRfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM0X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzRfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjM0X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczNF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzRfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzMzX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zM19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczM19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzNfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMzX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMzX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczM19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDFfUFJPVFJFRzMyX1BvcyAgICAgICAgQlBST1RfQ09ORklHMV9SRUdJT04zMl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczMl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzJfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMyX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMV9QUk9UUkVHMzJfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcxX1JFR0lPTjMyX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQxX1BST1RSRUczMl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzFfUkVHSU9OMzJfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzMxX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04zMV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczMV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMzFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMxX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMxX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczMV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMzFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzMwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04zMF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczMF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMzBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzBfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMwX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMzBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjMwX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczMF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMzBfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI5X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yOV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyOV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjlfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjlfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI5X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjlfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI5X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyOV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjlfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI4X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yOF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyOF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjhfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjhfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI4X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjhfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI4X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyOF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjhfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI3X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yN19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyN19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjdfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjdfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI3X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjdfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI3X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyN19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjdfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI2X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yNl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjZfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjZfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI2X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjZfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI2X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjZfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI1X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yNV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjVfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjVfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI1X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjVfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI1X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjVfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzI0X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yNF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjRfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjRfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI0X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjRfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjI0X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyNF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjRfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIzX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yM19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyM19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjNfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIzX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIzX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyM19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIyX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yMl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjJfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIyX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjJfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIyX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjJfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIxX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yMV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIxX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIxX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzIwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yMF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjBfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIwX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMjBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjIwX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyMF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMjBfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE5X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xOV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxOV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTlfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTlfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE5X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTlfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE5X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxOV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTlfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE4X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xOF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxOF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMThfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMThfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE4X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMThfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE4X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxOF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMThfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE3X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xN19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxN19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTdfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTdfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE3X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTdfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE3X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxN19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTdfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE2X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xNl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTZfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTZfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE2X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTZfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE2X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTZfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE1X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xNV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTVfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTVfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE1X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTVfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE1X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTVfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzE0X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xNF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTRfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTRfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE0X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTRfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjE0X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxNF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTRfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEzX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xM19Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxM19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTNfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTNfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEzX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTNfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEzX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxM19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTNfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEyX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xMl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTJfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEyX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTJfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEyX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTJfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzExX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xMV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTFfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjExX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjExX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzEwX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xMF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTBfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTBfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEwX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMTBfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjEwX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxMF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMTBfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzlfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjlfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOV9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOV9Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc5X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT045X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOV9FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOV9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOV9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOV9FbmFibGVkDQorDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHOF9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OOF9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc4X01zayAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT044X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzhfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjhfRGlzYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc4X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT044X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc4X1NldCAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT044X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc3X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT043X1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzdfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjdfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHN19EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ON19EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzdfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjdfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzdfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjdfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzZfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjZfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNl9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONl9Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc2X0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT042X0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNl9FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONl9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNl9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONl9FbmFibGVkDQorDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNV9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONV9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc1X01zayAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT041X01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzVfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjVfRGlzYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc1X0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT041X0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc1X1NldCAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT041X0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUc0X1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT040X1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzRfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjRfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHNF9EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9ONF9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzRfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjRfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzRfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjRfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzNfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjNfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHM19Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OM19Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUczX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04zX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHM19FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OM19FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHM19TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OM19FbmFibGVkDQorDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMl9Qb3MgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMl9Qb3MNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyX01zayAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yX01zaw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzJfRGlzYWJsZWQgICBCUFJPVF9DT05GSUcwX1JFR0lPTjJfRGlzYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyX0VuYWJsZWQgICAgQlBST1RfQ09ORklHMF9SRUdJT04yX0VuYWJsZWQNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcyX1NldCAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04yX0VuYWJsZWQNCisNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcxX1BvcyAgICAgICAgQlBST1RfQ09ORklHMF9SRUdJT04xX1Bvcw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzFfTXNrICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjFfTXNrDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMV9EaXNhYmxlZCAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMV9EaXNhYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzFfRW5hYmxlZCAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjFfRW5hYmxlZA0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzFfU2V0ICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjFfRW5hYmxlZA0KKw0KKyNkZWZpbmUgTVBVX1BST1RFTlNFVDBfUFJPVFJFRzBfUG9zICAgICAgICBCUFJPVF9DT05GSUcwX1JFR0lPTjBfUG9zDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMF9Nc2sgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMF9Nc2sNCisjZGVmaW5lIE1QVV9QUk9URU5TRVQwX1BST1RSRUcwX0Rpc2FibGVkICAgQlBST1RfQ09ORklHMF9SRUdJT04wX0Rpc2FibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMF9FbmFibGVkICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMF9FbmFibGVkDQorI2RlZmluZSBNUFVfUFJPVEVOU0VUMF9QUk9UUkVHMF9TZXQgICAgICAgIEJQUk9UX0NPTkZJRzBfUkVHSU9OMF9FbmFibGVkDQorDQorDQorLyogRnJvbSBucmY1MV9kZXByZWNhdGVkLmggKi8NCisNCisvKiBOVk1DICovDQorLyogVGhlIHJlZ2lzdGVyIEVSQVNFUFJPVEVDVEVEUEFHRSBjaGFuZ2VkIG5hbWUgdG8gRVJBU0VQQ1IwIGluIHRoZSBkb2N1bWVudGF0aW9uLiAqLw0KKyNkZWZpbmUgRVJBU0VQUk9URUNURURQQUdFICAgICAgRVJBU0VQQ1IwDQorDQorDQorLyogSVJRICovDQorLyogQ09NUCBtb2R1bGUgd2FzIGVsaW1pbmF0ZWQuIEFkYXB0ZWQgdG8gbnJmNTIgaGVhZGVycy4gKi8NCisjZGVmaW5lIExQQ09NUF9DT01QX0lSUUhhbmRsZXIgIENPTVBfTFBDT01QX0lSUUhhbmRsZXINCisjZGVmaW5lIExQQ09NUF9DT01QX0lSUW4gICAgICAgIENPTVBfTFBDT01QX0lSUW4NCisNCisNCisvKiBSRUZTRUwgcmVnaXN0ZXIgcmVkZWZpbmVkIGVudW1lcmF0ZWQgdmFsdWVzIGFuZCBhZGRlZCBzb21lIG1vcmUuICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlPbmVFaWdodGhQcmVzY2FsaW5nICAgICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjFfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5VHdvRWlnaHRoc1ByZXNjYWxpbmcgICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYyXzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseVRocmVlRWlnaHRoc1ByZXNjYWxpbmcgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmM184VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlGb3VyRWlnaHRoc1ByZXNjYWxpbmcgICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjRfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5Rml2ZUVpZ2h0aHNQcmVzY2FsaW5nICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY1XzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseVNpeEVpZ2h0aHNQcmVzY2FsaW5nICAgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNl84VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlTZXZlbkVpZ2h0aHNQcmVzY2FsaW5nICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjdfOFZkZA0KKw0KKw0KKy8qIFJBRElPICovDQorLyogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIFNLSVBBRERSIHdhcyBjb3JyZWN0ZWQuIE9sZCBtYWNyb3MgYWRkZWQgZm9yIGNvbXBhdGliaWxpdHkuICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfU0tJUF9BRERSX1BvcyAgICAgIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Qb3MNCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQX0FERFJfTXNrICAgICAgUkFESU9fQ1JDQ05GX1NLSVBBRERSX01zaw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBfQUREUl9JbmNsdWRlICBSQURJT19DUkNDTkZfU0tJUEFERFJfSW5jbHVkZQ0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBfQUREUl9Ta2lwICAgICBSQURJT19DUkNDTkZfU0tJUEFERFJfU2tpcA0KKw0KKw0KKy8qIEZJQ1IgKi8NCisvKiBUaGUgcmVnaXN0ZXJzIEZJQ1IuREVWSUNFSUQwIGFuZCBGSUNSLkRFVklDRUlEMSB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheS4gKi8NCisjZGVmaW5lIERFVklDRUlEMCAgICAgICBERVZJQ0VJRFswXQ0KKyNkZWZpbmUgREVWSUNFSUQxICAgICAgIERFVklDRUlEWzFdDQorDQorLyogVGhlIHJlZ2lzdGVycyBGSUNSLkVSMCwgRklDUi5FUjEsIEZJQ1IuRVIyIGFuZCBGSUNSLkVSMyB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheS4gKi8NCisjZGVmaW5lIEVSMCAgICAgICAgICAgICBFUlswXQ0KKyNkZWZpbmUgRVIxICAgICAgICAgICAgIEVSWzFdDQorI2RlZmluZSBFUjIgICAgICAgICAgICAgRVJbMl0NCisjZGVmaW5lIEVSMyAgICAgICAgICAgICBFUlszXQ0KKw0KKy8qIFRoZSByZWdpc3RlcnMgRklDUi5JUjAsIEZJQ1IuSVIxLCBGSUNSLklSMiBhbmQgRklDUi5JUjMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBJUjAgICAgICAgICAgICAgSVJbMF0NCisjZGVmaW5lIElSMSAgICAgICAgICAgICBJUlsxXQ0KKyNkZWZpbmUgSVIyICAgICAgICAgICAgIElSWzJdDQorI2RlZmluZSBJUjMgICAgICAgICAgICAgSVJbM10NCisNCisvKiBUaGUgcmVnaXN0ZXJzIEZJQ1IuREVWSUNFQUREUjAgYW5kIEZJQ1IuREVWSUNFQUREUjEgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBERVZJQ0VBRERSMCAgICAgREVWSUNFQUREUlswXQ0KKyNkZWZpbmUgREVWSUNFQUREUjEgICAgIERFVklDRUFERFJbMV0NCisNCisNCisvKiBQUEkgKi8NCisvKiBUaGUgdGFza3MgUFBJLlRBU0tTX0NIR3hFTiBhbmQgUFBJLlRBU0tTX0NIR3hESVMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkgb2Ygc3RydWN0cy4gKi8NCisjZGVmaW5lIFRBU0tTX0NIRzBFTiAgICAgVEFTS1NfQ0hHWzBdLkVODQorI2RlZmluZSBUQVNLU19DSEcwRElTICAgIFRBU0tTX0NIR1swXS5ESVMNCisjZGVmaW5lIFRBU0tTX0NIRzFFTiAgICAgVEFTS1NfQ0hHWzFdLkVODQorI2RlZmluZSBUQVNLU19DSEcxRElTICAgIFRBU0tTX0NIR1sxXS5ESVMNCisjZGVmaW5lIFRBU0tTX0NIRzJFTiAgICAgVEFTS1NfQ0hHWzJdLkVODQorI2RlZmluZSBUQVNLU19DSEcyRElTICAgIFRBU0tTX0NIR1syXS5ESVMNCisjZGVmaW5lIFRBU0tTX0NIRzNFTiAgICAgVEFTS1NfQ0hHWzNdLkVODQorI2RlZmluZSBUQVNLU19DSEczRElTICAgIFRBU0tTX0NIR1szXS5ESVMNCisNCisvKiBUaGUgcmVnaXN0ZXJzIFBQSS5DSHhfRUVQIGFuZCBQUEkuQ0h4X1RFUCB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheSBvZiBzdHJ1Y3RzLiAqLw0KKyNkZWZpbmUgQ0gwX0VFUCAgICAgICAgICBDSFswXS5FRVANCisjZGVmaW5lIENIMF9URVAgICAgICAgICAgQ0hbMF0uVEVQDQorI2RlZmluZSBDSDFfRUVQICAgICAgICAgIENIWzFdLkVFUA0KKyNkZWZpbmUgQ0gxX1RFUCAgICAgICAgICBDSFsxXS5URVANCisjZGVmaW5lIENIMl9FRVAgICAgICAgICAgQ0hbMl0uRUVQDQorI2RlZmluZSBDSDJfVEVQICAgICAgICAgIENIWzJdLlRFUA0KKyNkZWZpbmUgQ0gzX0VFUCAgICAgICAgICBDSFszXS5FRVANCisjZGVmaW5lIENIM19URVAgICAgICAgICAgQ0hbM10uVEVQDQorI2RlZmluZSBDSDRfRUVQICAgICAgICAgIENIWzRdLkVFUA0KKyNkZWZpbmUgQ0g0X1RFUCAgICAgICAgICBDSFs0XS5URVANCisjZGVmaW5lIENINV9FRVAgICAgICAgICAgQ0hbNV0uRUVQDQorI2RlZmluZSBDSDVfVEVQICAgICAgICAgIENIWzVdLlRFUA0KKyNkZWZpbmUgQ0g2X0VFUCAgICAgICAgICBDSFs2XS5FRVANCisjZGVmaW5lIENINl9URVAgICAgICAgICAgQ0hbNl0uVEVQDQorI2RlZmluZSBDSDdfRUVQICAgICAgICAgIENIWzddLkVFUA0KKyNkZWZpbmUgQ0g3X1RFUCAgICAgICAgICBDSFs3XS5URVANCisjZGVmaW5lIENIOF9FRVAgICAgICAgICAgQ0hbOF0uRUVQDQorI2RlZmluZSBDSDhfVEVQICAgICAgICAgIENIWzhdLlRFUA0KKyNkZWZpbmUgQ0g5X0VFUCAgICAgICAgICBDSFs5XS5FRVANCisjZGVmaW5lIENIOV9URVAgICAgICAgICAgQ0hbOV0uVEVQDQorI2RlZmluZSBDSDEwX0VFUCAgICAgICAgIENIWzEwXS5FRVANCisjZGVmaW5lIENIMTBfVEVQICAgICAgICAgQ0hbMTBdLlRFUA0KKyNkZWZpbmUgQ0gxMV9FRVAgICAgICAgICBDSFsxMV0uRUVQDQorI2RlZmluZSBDSDExX1RFUCAgICAgICAgIENIWzExXS5URVANCisjZGVmaW5lIENIMTJfRUVQICAgICAgICAgQ0hbMTJdLkVFUA0KKyNkZWZpbmUgQ0gxMl9URVAgICAgICAgICBDSFsxMl0uVEVQDQorI2RlZmluZSBDSDEzX0VFUCAgICAgICAgIENIWzEzXS5FRVANCisjZGVmaW5lIENIMTNfVEVQICAgICAgICAgQ0hbMTNdLlRFUA0KKyNkZWZpbmUgQ0gxNF9FRVAgICAgICAgICBDSFsxNF0uRUVQDQorI2RlZmluZSBDSDE0X1RFUCAgICAgICAgIENIWzE0XS5URVANCisjZGVmaW5lIENIMTVfRUVQICAgICAgICAgQ0hbMTVdLkVFUA0KKyNkZWZpbmUgQ0gxNV9URVAgICAgICAgICBDSFsxNV0uVEVQDQorDQorLyogVGhlIHJlZ2lzdGVycyBQUEkuQ0hHMCwgUFBJLkNIRzEsIFBQSS5DSEcyIGFuZCBQUEkuQ0hHMyB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheS4gKi8NCisjZGVmaW5lIENIRzAgICAgICAgICAgICAgQ0hHWzBdDQorI2RlZmluZSBDSEcxICAgICAgICAgICAgIENIR1sxXQ0KKyNkZWZpbmUgQ0hHMiAgICAgICAgICAgICBDSEdbMl0NCisjZGVmaW5lIENIRzMgICAgICAgICAgICAgQ0hHWzNdDQorDQorLyogQWxsIGJpdGZpZWxkIG1hY3JvcyBmb3IgdGhlIENIR3ggcmVnaXN0ZXJzIHRoZXJlZm9yZSBjaGFuZ2VkIG5hbWUuICovDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorDQorDQorDQorLypsaW50IC0tZmxiICJMZWF2ZSBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjZW5kaWYgLyogTlJGNTFfVE9fTlJGNTJfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUxX3RvX25yZjUyODQwLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mjg0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZjllNzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1MV90b19ucmY1Mjg0MC5oCkBAIC0wLDAgKzEsNTY3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkY1MV9UT19OUkY1Mjg0MF9IDQorI2RlZmluZSBOUkY1MV9UT19OUkY1Mjg0MF9IDQorDQorLypsaW50ICsrZmxiICJFbnRlciBsaWJyYXJ5IHJlZ2lvbiAqLw0KKw0KKy8qIFRoaXMgZmlsZSBpcyBnaXZlbiB0byBwcmV2ZW50IHlvdXIgU1cgZnJvbSBub3QgY29tcGlsaW5nIHdpdGggdGhlIG5hbWUgY2hhbmdlcyBiZXR3ZWVuIG5SRjUxIGFuZCBuUkY1Mjg0MCBkZXZpY2VzLg0KKyAqIEl0IHJlZGVmaW5lcyB0aGUgb2xkIG5SRjUxIG5hbWVzIGludG8gdGhlIG5ldyBvbmVzIGFzIGxvbmcgYXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgc3RpbGwgc3VwcG9ydGVkLiBJZiB0aGUNCisgKiBmdW5jdGlvbmFsaXR5IGlzIGdvbmUsIHRoZXJlIG9sZCBuYW1lcyBhcmUgbm90IGRlZmluZWQsIHNvIGNvbXBpbGF0aW9uIHdpbGwgZmFpbC4gTm90ZSB0aGF0IGFsc28gaW5jbHVkZXMgbWFjcm9zDQorICogZnJvbSB0aGUgbnJmNTFfZGVwcmVjYXRlZC5oIGZpbGUuICovDQorDQorDQorLyogSVJRICovDQorLyogU2V2ZXJhbCBwZXJpcGhlcmFscyBoYXZlIGJlZW4gYWRkZWQgdG8gc2V2ZXJhbCBpbmRleGVzLiBOYW1lcyBvZiBJUlEgaGFuZGxlcnMgYW5kIElSUSBudW1iZXJzIGhhdmUgY2hhbmdlZC4gKi8NCisjZGVmaW5lIFVBUlQwX0lSUUhhbmRsZXIgICAgICAgIFVBUlRFMF9VQVJUMF9JUlFIYW5kbGVyDQorI2RlZmluZSBTUEkwX1RXSTBfSVJRSGFuZGxlciAgICBTUElNMF9TUElTMF9UV0lNMF9UV0lTMF9TUEkwX1RXSTBfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1BJMV9UV0kxX0lSUUhhbmRsZXIgICAgU1BJTTFfU1BJUzFfVFdJTTFfVFdJUzFfU1BJMV9UV0kxX0lSUUhhbmRsZXINCisjZGVmaW5lIEFEQ19JUlFIYW5kbGVyICAgICAgICAgIFNBQURDX0lSUUhhbmRsZXINCisjZGVmaW5lIExQQ09NUF9JUlFIYW5kbGVyICAgICAgIENPTVBfTFBDT01QX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTBfSVJRSGFuZGxlciAgICAgICAgIFNXSTBfRUdVMF9JUlFIYW5kbGVyDQorI2RlZmluZSBTV0kxX0lSUUhhbmRsZXIgICAgICAgICBTV0kxX0VHVTFfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJMl9JUlFIYW5kbGVyICAgICAgICAgU1dJMl9FR1UyX0lSUUhhbmRsZXINCisjZGVmaW5lIFNXSTNfSVJRSGFuZGxlciAgICAgICAgIFNXSTNfRUdVM19JUlFIYW5kbGVyDQorI2RlZmluZSBTV0k0X0lSUUhhbmRsZXIgICAgICAgICBTV0k0X0VHVTRfSVJRSGFuZGxlcg0KKyNkZWZpbmUgU1dJNV9JUlFIYW5kbGVyICAgICAgICAgU1dJNV9FR1U1X0lSUUhhbmRsZXINCisNCisjZGVmaW5lIFVBUlQwX0lSUW4gICAgICAgICAgICAgIFVBUlRFMF9VQVJUMF9JUlFuDQorI2RlZmluZSBTUEkwX1RXSTBfSVJRbiAgICAgICAgICBTUElNMF9TUElTMF9UV0lNMF9UV0lTMF9TUEkwX1RXSTBfSVJRbg0KKyNkZWZpbmUgU1BJMV9UV0kxX0lSUW4gICAgICAgICAgU1BJTTFfU1BJUzFfVFdJTTFfVFdJUzFfU1BJMV9UV0kxX0lSUW4NCisjZGVmaW5lIEFEQ19JUlFuICAgICAgICAgICAgICAgIFNBQURDX0lSUW4NCisjZGVmaW5lIExQQ09NUF9JUlFuICAgICAgICAgICAgIENPTVBfTFBDT01QX0lSUW4NCisjZGVmaW5lIFNXSTBfSVJRbiAgICAgICAgICAgICAgIFNXSTBfRUdVMF9JUlFuDQorI2RlZmluZSBTV0kxX0lSUW4gICAgICAgICAgICAgICBTV0kxX0VHVTFfSVJRbg0KKyNkZWZpbmUgU1dJMl9JUlFuICAgICAgICAgICAgICAgU1dJMl9FR1UyX0lSUW4NCisjZGVmaW5lIFNXSTNfSVJRbiAgICAgICAgICAgICAgIFNXSTNfRUdVM19JUlFuDQorI2RlZmluZSBTV0k0X0lSUW4gICAgICAgICAgICAgICBTV0k0X0VHVTRfSVJRbg0KKyNkZWZpbmUgU1dJNV9JUlFuICAgICAgICAgICAgICAgU1dJNV9FR1U1X0lSUW4NCisNCisNCisvKiBVSUNSICovDQorLyogUmVnaXN0ZXIgUkJQQ09ORiB3YXMgcmVuYW1lZCB0byBBUFBST1RFQ1QuICovDQorI2RlZmluZSBSQlBDT05GICAgICBBUFBST1RFQ1QNCisNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX1BvcyAgICAgICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9Qb3MNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX01zayAgICAgICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9Nc2sNCisjZGVmaW5lIFVJQ1JfUkJQQ09ORl9QQUxMX0VuYWJsZWQgICAgICAgVUlDUl9BUFBST1RFQ1RfUEFMTF9FbmFibGVkDQorI2RlZmluZSBVSUNSX1JCUENPTkZfUEFMTF9EaXNhYmxlZCAgICAgIFVJQ1JfQVBQUk9URUNUX1BBTExfRGlzYWJsZWQNCisNCisNCisvKiBHUElPICovDQorLyogR1BJTyBwb3J0IHdhcyByZW5hbWVkIHRvIFAwLiAqLw0KKyNkZWZpbmUgTlJGX0dQSU8gICAgICAgIE5SRl9QMA0KKyNkZWZpbmUgTlJGX0dQSU9fQkFTRSAgIE5SRl9QMF9CQVNFDQorDQorDQorLyogUURFQyAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTEEsIFBTRUxCIGFuZCBQU0VMTEVEIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QuICovDQorI2RlZmluZSBQU0VMTEVEICAgICBQU0VMLkxFRA0KKyNkZWZpbmUgUFNFTEEgICAgICAgUFNFTC5BDQorI2RlZmluZSBQU0VMQiAgICAgICBQU0VMLkINCisNCisNCisvKiBTUElTICovDQorLyogVGhlIHJlZ2lzdGVycyBQU0VMU0NLLCBQU0VMTUlTTywgUFNFTE1PU0ksIFBTRUxDU04gd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdC4gKi8NCisjZGVmaW5lIFBTRUxTQ0sgICAgICAgUFNFTC5TQ0sNCisjZGVmaW5lIFBTRUxNSVNPICAgICAgUFNFTC5NSVNPDQorI2RlZmluZSBQU0VMTU9TSSAgICAgIFBTRUwuTU9TSQ0KKyNkZWZpbmUgUFNFTENTTiAgICAgICBQU0VMLkNTTg0KKw0KKy8qIFRoZSByZWdpc3RlcnMgUlhEUFRSLCBNQVhSWCwgQU1PVU5UUlggd2VyZSByZXN0cnVjdHVyZWQgaW50byBhIHN0cnVjdCAqLw0KKyNkZWZpbmUgUlhEUFRSICAgICAgICBSWEQuUFRSDQorI2RlZmluZSBNQVhSWCAgICAgICAgIFJYRC5NQVhDTlQNCisjZGVmaW5lIEFNT1VOVFJYICAgICAgUlhELkFNT1VOVA0KKw0KKyNkZWZpbmUgU1BJU19NQVhSWF9NQVhSWF9Qb3MgICAgICAgIFNQSVNfUlhEX01BWENOVF9NQVhDTlRfUG9zDQorI2RlZmluZSBTUElTX01BWFJYX01BWFJYX01zayAgICAgICAgU1BJU19SWERfTUFYQ05UX01BWENOVF9Nc2sNCisNCisjZGVmaW5lIFNQSVNfQU1PVU5UUlhfQU1PVU5UUlhfUG9zICBTUElTX1JYRF9BTU9VTlRfQU1PVU5UX1Bvcw0KKyNkZWZpbmUgU1BJU19BTU9VTlRSWF9BTU9VTlRSWF9Nc2sgIFNQSVNfUlhEX0FNT1VOVF9BTU9VTlRfTXNrDQorDQorLyogVGhlIHJlZ2lzdGVycyBUWERQVFIsIE1BWFRYLCBBTU9VTlRUWCB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0ICovDQorI2RlZmluZSBUWERQVFIgICAgICAgIFRYRC5QVFINCisjZGVmaW5lIE1BWFRYICAgICAgICAgVFhELk1BWENOVA0KKyNkZWZpbmUgQU1PVU5UVFggICAgICBUWEQuQU1PVU5UDQorDQorI2RlZmluZSBTUElTX01BWFRYX01BWFRYX1BvcyAgICAgICAgU1BJU19UWERfTUFYQ05UX01BWENOVF9Qb3MNCisjZGVmaW5lIFNQSVNfTUFYVFhfTUFYVFhfTXNrICAgICAgICBTUElTX1RYRF9NQVhDTlRfTUFYQ05UX01zaw0KKw0KKyNkZWZpbmUgU1BJU19BTU9VTlRUWF9BTU9VTlRUWF9Qb3MgIFNQSVNfVFhEX0FNT1VOVF9BTU9VTlRfUG9zDQorI2RlZmluZSBTUElTX0FNT1VOVFRYX0FNT1VOVFRYX01zayAgU1BJU19UWERfQU1PVU5UX0FNT1VOVF9Nc2sNCisNCisNCisvKiBVQVJUICovDQorLyogVGhlIHJlZ2lzdGVycyBQU0VMUlRTLCBQU0VMVFhELCBQU0VMQ1RTLCBQU0VMUlhEIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QuICovDQorI2RlZmluZSBQU0VMUlRTICAgICAgIFBTRUwuUlRTDQorI2RlZmluZSBQU0VMVFhEICAgICAgIFBTRUwuVFhEDQorI2RlZmluZSBQU0VMQ1RTICAgICAgIFBTRUwuQ1RTDQorI2RlZmluZSBQU0VMUlhEICAgICAgIFBTRUwuUlhEDQorDQorLyogVFdJICovDQorLyogVGhlIHJlZ2lzdGVycyBQU0VMU0NMLCBQU0VMU0RBIHdlcmUgcmVzdHJ1Y3R1cmVkIGludG8gYSBzdHJ1Y3QuICovDQorI2RlZmluZSBQU0VMU0NMICAgICAgIFBTRUwuU0NMDQorI2RlZmluZSBQU0VMU0RBICAgICAgIFBTRUwuU0RBDQorDQorDQorDQorLyogRnJvbSBucmY1MV9kZXByZWNhdGVkLmggKi8NCisNCisvKiBOVk1DICovDQorLyogVGhlIHJlZ2lzdGVyIEVSQVNFUFJPVEVDVEVEUEFHRSBjaGFuZ2VkIG5hbWUgdG8gRVJBU0VQQ1IwIGluIHRoZSBkb2N1bWVudGF0aW9uLiAqLw0KKyNkZWZpbmUgRVJBU0VQUk9URUNURURQQUdFICAgICAgRVJBU0VQQ1IwDQorDQorDQorLyogSVJRICovDQorLyogQ09NUCBtb2R1bGUgd2FzIGVsaW1pbmF0ZWQuIEFkYXB0ZWQgdG8gbnJmNTI4NDAgaGVhZGVycy4gKi8NCisjZGVmaW5lIExQQ09NUF9DT01QX0lSUUhhbmRsZXIgIENPTVBfTFBDT01QX0lSUUhhbmRsZXINCisjZGVmaW5lIExQQ09NUF9DT01QX0lSUW4gICAgICAgIENPTVBfTFBDT01QX0lSUW4NCisNCisNCisvKiBSRUZTRUwgcmVnaXN0ZXIgcmVkZWZpbmVkIGVudW1lcmF0ZWQgdmFsdWVzIGFuZCBhZGRlZCBzb21lIG1vcmUuICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlPbmVFaWdodGhQcmVzY2FsaW5nICAgICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjFfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5VHdvRWlnaHRoc1ByZXNjYWxpbmcgICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYyXzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseVRocmVlRWlnaHRoc1ByZXNjYWxpbmcgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmM184VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlGb3VyRWlnaHRoc1ByZXNjYWxpbmcgICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjRfOFZkZA0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfU3VwcGx5Rml2ZUVpZ2h0aHNQcmVzY2FsaW5nICAgICAgICBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY1XzhWZGQNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1N1cHBseVNpeEVpZ2h0aHNQcmVzY2FsaW5nICAgICAgICAgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmNl84VmRkDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9TdXBwbHlTZXZlbkVpZ2h0aHNQcmVzY2FsaW5nICAgICAgIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjdfOFZkZA0KKw0KKw0KKy8qIFJBRElPICovDQorLyogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIFNLSVBBRERSIHdhcyBjb3JyZWN0ZWQuIE9sZCBtYWNyb3MgYWRkZWQgZm9yIGNvbXBhdGliaWxpdHkuICovDQorI2RlZmluZSBSQURJT19DUkNDTkZfU0tJUF9BRERSX1BvcyAgICAgIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Qb3MNCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQX0FERFJfTXNrICAgICAgUkFESU9fQ1JDQ05GX1NLSVBBRERSX01zaw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBfQUREUl9JbmNsdWRlICBSQURJT19DUkNDTkZfU0tJUEFERFJfSW5jbHVkZQ0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBfQUREUl9Ta2lwICAgICBSQURJT19DUkNDTkZfU0tJUEFERFJfU2tpcA0KKw0KKw0KKy8qIEZJQ1IgKi8NCisvKiBUaGUgcmVnaXN0ZXJzIEZJQ1IuREVWSUNFSUQwIGFuZCBGSUNSLkRFVklDRUlEMSB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheS4gKi8NCisjZGVmaW5lIERFVklDRUlEMCAgICAgICBERVZJQ0VJRFswXQ0KKyNkZWZpbmUgREVWSUNFSUQxICAgICAgIERFVklDRUlEWzFdDQorDQorLyogVGhlIHJlZ2lzdGVycyBGSUNSLkVSMCwgRklDUi5FUjEsIEZJQ1IuRVIyIGFuZCBGSUNSLkVSMyB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheS4gKi8NCisjZGVmaW5lIEVSMCAgICAgICAgICAgICBFUlswXQ0KKyNkZWZpbmUgRVIxICAgICAgICAgICAgIEVSWzFdDQorI2RlZmluZSBFUjIgICAgICAgICAgICAgRVJbMl0NCisjZGVmaW5lIEVSMyAgICAgICAgICAgICBFUlszXQ0KKw0KKy8qIFRoZSByZWdpc3RlcnMgRklDUi5JUjAsIEZJQ1IuSVIxLCBGSUNSLklSMiBhbmQgRklDUi5JUjMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBJUjAgICAgICAgICAgICAgSVJbMF0NCisjZGVmaW5lIElSMSAgICAgICAgICAgICBJUlsxXQ0KKyNkZWZpbmUgSVIyICAgICAgICAgICAgIElSWzJdDQorI2RlZmluZSBJUjMgICAgICAgICAgICAgSVJbM10NCisNCisvKiBUaGUgcmVnaXN0ZXJzIEZJQ1IuREVWSUNFQUREUjAgYW5kIEZJQ1IuREVWSUNFQUREUjEgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkuICovDQorI2RlZmluZSBERVZJQ0VBRERSMCAgICAgREVWSUNFQUREUlswXQ0KKyNkZWZpbmUgREVWSUNFQUREUjEgICAgIERFVklDRUFERFJbMV0NCisNCisNCisvKiBQUEkgKi8NCisvKiBUaGUgdGFza3MgUFBJLlRBU0tTX0NIR3hFTiBhbmQgUFBJLlRBU0tTX0NIR3hESVMgd2VyZSByZW5hbWVkIGludG8gYW4gYXJyYXkgb2Ygc3RydWN0cy4gKi8NCisjZGVmaW5lIFRBU0tTX0NIRzBFTiAgICAgVEFTS1NfQ0hHWzBdLkVODQorI2RlZmluZSBUQVNLU19DSEcwRElTICAgIFRBU0tTX0NIR1swXS5ESVMNCisjZGVmaW5lIFRBU0tTX0NIRzFFTiAgICAgVEFTS1NfQ0hHWzFdLkVODQorI2RlZmluZSBUQVNLU19DSEcxRElTICAgIFRBU0tTX0NIR1sxXS5ESVMNCisjZGVmaW5lIFRBU0tTX0NIRzJFTiAgICAgVEFTS1NfQ0hHWzJdLkVODQorI2RlZmluZSBUQVNLU19DSEcyRElTICAgIFRBU0tTX0NIR1syXS5ESVMNCisjZGVmaW5lIFRBU0tTX0NIRzNFTiAgICAgVEFTS1NfQ0hHWzNdLkVODQorI2RlZmluZSBUQVNLU19DSEczRElTICAgIFRBU0tTX0NIR1szXS5ESVMNCisNCisvKiBUaGUgcmVnaXN0ZXJzIFBQSS5DSHhfRUVQIGFuZCBQUEkuQ0h4X1RFUCB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheSBvZiBzdHJ1Y3RzLiAqLw0KKyNkZWZpbmUgQ0gwX0VFUCAgICAgICAgICBDSFswXS5FRVANCisjZGVmaW5lIENIMF9URVAgICAgICAgICAgQ0hbMF0uVEVQDQorI2RlZmluZSBDSDFfRUVQICAgICAgICAgIENIWzFdLkVFUA0KKyNkZWZpbmUgQ0gxX1RFUCAgICAgICAgICBDSFsxXS5URVANCisjZGVmaW5lIENIMl9FRVAgICAgICAgICAgQ0hbMl0uRUVQDQorI2RlZmluZSBDSDJfVEVQICAgICAgICAgIENIWzJdLlRFUA0KKyNkZWZpbmUgQ0gzX0VFUCAgICAgICAgICBDSFszXS5FRVANCisjZGVmaW5lIENIM19URVAgICAgICAgICAgQ0hbM10uVEVQDQorI2RlZmluZSBDSDRfRUVQICAgICAgICAgIENIWzRdLkVFUA0KKyNkZWZpbmUgQ0g0X1RFUCAgICAgICAgICBDSFs0XS5URVANCisjZGVmaW5lIENINV9FRVAgICAgICAgICAgQ0hbNV0uRUVQDQorI2RlZmluZSBDSDVfVEVQICAgICAgICAgIENIWzVdLlRFUA0KKyNkZWZpbmUgQ0g2X0VFUCAgICAgICAgICBDSFs2XS5FRVANCisjZGVmaW5lIENINl9URVAgICAgICAgICAgQ0hbNl0uVEVQDQorI2RlZmluZSBDSDdfRUVQICAgICAgICAgIENIWzddLkVFUA0KKyNkZWZpbmUgQ0g3X1RFUCAgICAgICAgICBDSFs3XS5URVANCisjZGVmaW5lIENIOF9FRVAgICAgICAgICAgQ0hbOF0uRUVQDQorI2RlZmluZSBDSDhfVEVQICAgICAgICAgIENIWzhdLlRFUA0KKyNkZWZpbmUgQ0g5X0VFUCAgICAgICAgICBDSFs5XS5FRVANCisjZGVmaW5lIENIOV9URVAgICAgICAgICAgQ0hbOV0uVEVQDQorI2RlZmluZSBDSDEwX0VFUCAgICAgICAgIENIWzEwXS5FRVANCisjZGVmaW5lIENIMTBfVEVQICAgICAgICAgQ0hbMTBdLlRFUA0KKyNkZWZpbmUgQ0gxMV9FRVAgICAgICAgICBDSFsxMV0uRUVQDQorI2RlZmluZSBDSDExX1RFUCAgICAgICAgIENIWzExXS5URVANCisjZGVmaW5lIENIMTJfRUVQICAgICAgICAgQ0hbMTJdLkVFUA0KKyNkZWZpbmUgQ0gxMl9URVAgICAgICAgICBDSFsxMl0uVEVQDQorI2RlZmluZSBDSDEzX0VFUCAgICAgICAgIENIWzEzXS5FRVANCisjZGVmaW5lIENIMTNfVEVQICAgICAgICAgQ0hbMTNdLlRFUA0KKyNkZWZpbmUgQ0gxNF9FRVAgICAgICAgICBDSFsxNF0uRUVQDQorI2RlZmluZSBDSDE0X1RFUCAgICAgICAgIENIWzE0XS5URVANCisjZGVmaW5lIENIMTVfRUVQICAgICAgICAgQ0hbMTVdLkVFUA0KKyNkZWZpbmUgQ0gxNV9URVAgICAgICAgICBDSFsxNV0uVEVQDQorDQorLyogVGhlIHJlZ2lzdGVycyBQUEkuQ0hHMCwgUFBJLkNIRzEsIFBQSS5DSEcyIGFuZCBQUEkuQ0hHMyB3ZXJlIHJlbmFtZWQgaW50byBhbiBhcnJheS4gKi8NCisjZGVmaW5lIENIRzAgICAgICAgICAgICAgQ0hHWzBdDQorI2RlZmluZSBDSEcxICAgICAgICAgICAgIENIR1sxXQ0KKyNkZWZpbmUgQ0hHMiAgICAgICAgICAgICBDSEdbMl0NCisjZGVmaW5lIENIRzMgICAgICAgICAgICAgQ0hHWzNdDQorDQorLyogQWxsIGJpdGZpZWxkIG1hY3JvcyBmb3IgdGhlIENIR3ggcmVnaXN0ZXJzIHRoZXJlZm9yZSBjaGFuZ2VkIG5hbWUuICovDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHMF9DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMF9DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcwX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMF9DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcwX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzBfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcwX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHMV9DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMV9DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcxX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMV9DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcxX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzFfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcxX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHMl9DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHMl9DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEcyX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHMl9DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEcyX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzJfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEcyX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X1BvcyAgICAgICBQUElfQ0hHX0NIMTVfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X01zayAgICAgICBQUElfQ0hHX0NIMTVfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDE1X0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTVfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxNV9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9Qb3MgICAgICAgUFBJX0NIR19DSDE0X1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9Nc2sgICAgICAgUFBJX0NIR19DSDE0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxNF9FeGNsdWRlZCAgUFBJX0NIR19DSDE0X0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDE0X0luY2x1ZGVkICBQUElfQ0hHX0NIMTRfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfUG9zICAgICAgIFBQSV9DSEdfQ0gxM19Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfTXNrICAgICAgIFBQSV9DSEdfQ0gxM19Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTNfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxM19FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxM19JbmNsdWRlZCAgUFBJX0NIR19DSDEzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX1BvcyAgICAgICBQUElfQ0hHX0NIMTJfUG9zDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX01zayAgICAgICBQUElfQ0hHX0NIMTJfTXNrDQorI2RlZmluZSBQUElfQ0hHM19DSDEyX0V4Y2x1ZGVkICBQUElfQ0hHX0NIMTJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMTJfSW5jbHVkZWQgIFBQSV9DSEdfQ0gxMl9JbmNsdWRlZA0KKw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9Qb3MgICAgICAgUFBJX0NIR19DSDExX1Bvcw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9Nc2sgICAgICAgUFBJX0NIR19DSDExX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMV9FeGNsdWRlZCAgUFBJX0NIR19DSDExX0V4Y2x1ZGVkDQorI2RlZmluZSBQUElfQ0hHM19DSDExX0luY2x1ZGVkICBQUElfQ0hHX0NIMTFfSW5jbHVkZWQNCisNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfUG9zICAgICAgIFBQSV9DSEdfQ0gxMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfTXNrICAgICAgIFBQSV9DSEdfQ0gxMF9Nc2sNCisjZGVmaW5lIFBQSV9DSEczX0NIMTBfRXhjbHVkZWQgIFBQSV9DSEdfQ0gxMF9FeGNsdWRlZA0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxMF9JbmNsdWRlZCAgUFBJX0NIR19DSDEwX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDlfUG9zICAgICAgICBQUElfQ0hHX0NIOV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIOV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g5X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g5X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDlfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIOV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g5X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDhfUG9zICAgICAgICBQUElfQ0hHX0NIOF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIOF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g4X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g4X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDhfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIOF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g4X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDdfUG9zICAgICAgICBQUElfQ0hHX0NIN19Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIN19Nc2sgICAgICAgIFBQSV9DSEdfQ0g3X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g3X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDdfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIN19JbmNsdWRlZCAgIFBQSV9DSEdfQ0g3X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDZfUG9zICAgICAgICBQUElfQ0hHX0NINl9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NINl9Nc2sgICAgICAgIFBQSV9DSEdfQ0g2X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g2X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDZfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NINl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g2X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDVfUG9zICAgICAgICBQUElfQ0hHX0NINV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NINV9Nc2sgICAgICAgIFBQSV9DSEdfQ0g1X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g1X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDVfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NINV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g1X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDRfUG9zICAgICAgICBQUElfQ0hHX0NINF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NINF9Nc2sgICAgICAgIFBQSV9DSEdfQ0g0X01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0g0X0V4Y2x1ZGVkICAgUFBJX0NIR19DSDRfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NINF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0g0X0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDNfUG9zICAgICAgICBQUElfQ0hHX0NIM19Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIM19Nc2sgICAgICAgIFBQSV9DSEdfQ0gzX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gzX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDNfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIM19JbmNsdWRlZCAgIFBQSV9DSEdfQ0gzX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDJfUG9zICAgICAgICBQUElfQ0hHX0NIMl9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMl9Nc2sgICAgICAgIFBQSV9DSEdfQ0gyX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gyX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDJfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMl9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gyX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDFfUG9zICAgICAgICBQUElfQ0hHX0NIMV9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMV9Nc2sgICAgICAgIFBQSV9DSEdfQ0gxX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gxX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDFfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMV9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gxX0luY2x1ZGVkDQorDQorI2RlZmluZSBQUElfQ0hHM19DSDBfUG9zICAgICAgICBQUElfQ0hHX0NIMF9Qb3MNCisjZGVmaW5lIFBQSV9DSEczX0NIMF9Nc2sgICAgICAgIFBQSV9DSEdfQ0gwX01zaw0KKyNkZWZpbmUgUFBJX0NIRzNfQ0gwX0V4Y2x1ZGVkICAgUFBJX0NIR19DSDBfRXhjbHVkZWQNCisjZGVmaW5lIFBQSV9DSEczX0NIMF9JbmNsdWRlZCAgIFBQSV9DSEdfQ0gwX0luY2x1ZGVkDQorDQorDQorDQorDQorLypsaW50IC0tZmxiICJMZWF2ZSBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjZW5kaWYgLyogTlJGNTFfVE9fTlJGNTI4NDBfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMWE3N2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9ucmY1Mjg0MC5oCkBAIC0wLDAgKzEsMjQyMCBAQAorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqDQorICogQGZpbGUgICAgIG5yZjUyODQwLmgNCisgKg0KKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUgZm9yDQorICogICAgICAgICAgIG5yZjUyODQwIGZyb20gTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKiBAdmVyc2lvbiAgVjENCisgKiBAZGF0ZSAgICAgMTguIE5vdmVtYmVyIDIwMTYNCisgKg0KKyAqIEBub3RlICAgICBHZW5lcmF0ZWQgd2l0aCBTVkRDb252IFYyLjgxZA0KKyAqICAgICAgICAgICBmcm9tIENNU0lTIFNWRCBGaWxlICducmY1Mjg0MC5zdmQnIFZlcnNpb24gMSwNCisgKg0KKyAqIEBwYXIgICAgICBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogICAgICAgICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqICAgICAgICAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgICAgICAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogICAgICAgICAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiAgICAgICAgICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogICAgICAgICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiAgICAgICAgICAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiAgICAgICAgICAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiAgICAgICAgICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiAgICAgICAgICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiAgICAgICAgICAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiAgICAgICAgICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQorDQorLyoqIEBhZGR0b2dyb3VwIE5vcmRpYyBTZW1pY29uZHVjdG9yDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBucmY1Mjg0MA0KKyAgKiBAew0KKyAgKi8NCisNCisjaWZuZGVmIE5SRjUyODQwX0gNCisjZGVmaW5lIE5SRjUyODQwX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJbnRlcnJ1cHQgTnVtYmVyIERlZmluaXRpb24gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KK3R5cGVkZWYgZW51bSB7DQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29ydGV4LU00IFByb2Nlc3NvciBFeGNlcHRpb25zIE51bWJlcnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisgIFJlc2V0X0lSUW4gICAgICAgICAgICAgICAgICAgID0gLTE1LCAgICAgICAgICAgICAgLyohPCAgIDEgIFJlc2V0IFZlY3RvciwgaW52b2tlZCBvbiBQb3dlciB1cCBhbmQgd2FybSByZXNldCAgICAgICAgICAgICAgICAgKi8NCisgIE5vbk1hc2thYmxlSW50X0lSUW4gICAgICAgICAgID0gLTE0LCAgICAgICAgICAgICAgLyohPCAgIDIgIE5vbiBtYXNrYWJsZSBJbnRlcnJ1cHQsIGNhbm5vdCBiZSBzdG9wcGVkIG9yIHByZWVtcHRlZCAgICAgICAgICAgKi8NCisgIEhhcmRGYXVsdF9JUlFuICAgICAgICAgICAgICAgID0gLTEzLCAgICAgICAgICAgICAgLyohPCAgIDMgIEhhcmQgRmF1bHQsIGFsbCBjbGFzc2VzIG9mIEZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE1lbW9yeU1hbmFnZW1lbnRfSVJRbiAgICAgICAgID0gLTEyLCAgICAgICAgICAgICAgLyohPCAgIDQgIE1lbW9yeSBNYW5hZ2VtZW50LCBNUFUgbWlzbWF0Y2gsIGluY2x1ZGluZyBBY2Nlc3MgVmlvbGF0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE5vIE1hdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBCdXNGYXVsdF9JUlFuICAgICAgICAgICAgICAgICA9IC0xMSwgICAgICAgICAgICAgIC8qITwgICA1ICBCdXMgRmF1bHQsIFByZS1GZXRjaC0sIE1lbW9yeSBBY2Nlc3MgRmF1bHQsIG90aGVyIGFkZHJlc3MvbWVtb3J5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCBGYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVc2FnZUZhdWx0X0lSUW4gICAgICAgICAgICAgICA9IC0xMCwgICAgICAgICAgICAgIC8qITwgICA2ICBVc2FnZSBGYXVsdCwgaS5lLiBVbmRlZiBJbnN0cnVjdGlvbiwgSWxsZWdhbCBTdGF0ZSBUcmFuc2l0aW9uICAgICovDQorICBTVkNhbGxfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAtNSwgICAgICAgICAgICAgIC8qITwgIDExICBTeXN0ZW0gU2VydmljZSBDYWxsIHZpYSBTVkMgaW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBEZWJ1Z01vbml0b3JfSVJRbiAgICAgICAgICAgICA9ICAtNCwgICAgICAgICAgICAgIC8qITwgIDEyICBEZWJ1ZyBNb25pdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQZW5kU1ZfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAtMiwgICAgICAgICAgICAgIC8qITwgIDE0ICBQZW5kYWJsZSByZXF1ZXN0IGZvciBzeXN0ZW0gc2VydmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTeXNUaWNrX0lSUW4gICAgICAgICAgICAgICAgICA9ICAtMSwgICAgICAgICAgICAgIC8qITwgIDE1ICBTeXN0ZW0gVGljayBUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBucmY1Mjg0MCBTcGVjaWZpYyBJbnRlcnJ1cHQgTnVtYmVycyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisgIFBPV0VSX0NMT0NLX0lSUW4gICAgICAgICAgICAgID0gICAwLCAgICAgICAgICAgICAgLyohPCAgIDAgIFBPV0VSX0NMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFJBRElPX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICAxLCAgICAgICAgICAgICAgLyohPCAgIDEgIFJBRElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVBUlRFMF9VQVJUMF9JUlFuICAgICAgICAgICAgID0gICAyLCAgICAgICAgICAgICAgLyohPCAgIDIgIFVBUlRFMF9VQVJUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNQSU0wX1NQSVMwX1RXSU0wX1RXSVMwX1NQSTBfVFdJMF9JUlFuPSAgIDMsICAgICAgLyohPCAgIDMgIFNQSU0wX1NQSVMwX1RXSU0wX1RXSVMwX1NQSTBfVFdJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNQSU0xX1NQSVMxX1RXSU0xX1RXSVMxX1NQSTFfVFdJMV9JUlFuPSAgIDQsICAgICAgLyohPCAgIDQgIFNQSU0xX1NQSVMxX1RXSU0xX1RXSVMxX1NQSTFfVFdJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE5GQ1RfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gICA1LCAgICAgICAgICAgICAgLyohPCAgIDUgIE5GQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEdQSU9URV9JUlFuICAgICAgICAgICAgICAgICAgID0gICA2LCAgICAgICAgICAgICAgLyohPCAgIDYgIEdQSU9URSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNBQURDX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICA3LCAgICAgICAgICAgICAgLyohPCAgIDcgIFNBQURDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTUVSMF9JUlFuICAgICAgICAgICAgICAgICAgID0gICA4LCAgICAgICAgICAgICAgLyohPCAgIDggIFRJTUVSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTUVSMV9JUlFuICAgICAgICAgICAgICAgICAgID0gICA5LCAgICAgICAgICAgICAgLyohPCAgIDkgIFRJTUVSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTUVSMl9JUlFuICAgICAgICAgICAgICAgICAgID0gIDEwLCAgICAgICAgICAgICAgLyohPCAgMTAgIFRJTUVSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFJUQzBfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDExLCAgICAgICAgICAgICAgLyohPCAgMTEgIFJUQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRFTVBfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDEyLCAgICAgICAgICAgICAgLyohPCAgMTIgIFRFTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFJOR19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDEzLCAgICAgICAgICAgICAgLyohPCAgMTMgIFJORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEVDQl9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDE0LCAgICAgICAgICAgICAgLyohPCAgMTQgIEVDQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENDTV9BQVJfSVJRbiAgICAgICAgICAgICAgICAgID0gIDE1LCAgICAgICAgICAgICAgLyohPCAgMTUgIENDTV9BQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFdEVF9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDE2LCAgICAgICAgICAgICAgLyohPCAgMTYgIFdEVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFJUQzFfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDE3LCAgICAgICAgICAgICAgLyohPCAgMTcgIFJUQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFERUNfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDE4LCAgICAgICAgICAgICAgLyohPCAgMTggIFFERUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENPTVBfTFBDT01QX0lSUW4gICAgICAgICAgICAgID0gIDE5LCAgICAgICAgICAgICAgLyohPCAgMTkgIENPTVBfTFBDT01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNXSTBfRUdVMF9JUlFuICAgICAgICAgICAgICAgID0gIDIwLCAgICAgICAgICAgICAgLyohPCAgMjAgIFNXSTBfRUdVMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNXSTFfRUdVMV9JUlFuICAgICAgICAgICAgICAgID0gIDIxLCAgICAgICAgICAgICAgLyohPCAgMjEgIFNXSTFfRUdVMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNXSTJfRUdVMl9JUlFuICAgICAgICAgICAgICAgID0gIDIyLCAgICAgICAgICAgICAgLyohPCAgMjIgIFNXSTJfRUdVMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNXSTNfRUdVM19JUlFuICAgICAgICAgICAgICAgID0gIDIzLCAgICAgICAgICAgICAgLyohPCAgMjMgIFNXSTNfRUdVMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNXSTRfRUdVNF9JUlFuICAgICAgICAgICAgICAgID0gIDI0LCAgICAgICAgICAgICAgLyohPCAgMjQgIFNXSTRfRUdVNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNXSTVfRUdVNV9JUlFuICAgICAgICAgICAgICAgID0gIDI1LCAgICAgICAgICAgICAgLyohPCAgMjUgIFNXSTVfRUdVNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTUVSM19JUlFuICAgICAgICAgICAgICAgICAgID0gIDI2LCAgICAgICAgICAgICAgLyohPCAgMjYgIFRJTUVSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTUVSNF9JUlFuICAgICAgICAgICAgICAgICAgID0gIDI3LCAgICAgICAgICAgICAgLyohPCAgMjcgIFRJTUVSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBXTTBfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDI4LCAgICAgICAgICAgICAgLyohPCAgMjggIFBXTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBETV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDI5LCAgICAgICAgICAgICAgLyohPCAgMjkgIFBETSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE1XVV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDMyLCAgICAgICAgICAgICAgLyohPCAgMzIgIE1XVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBXTTFfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDMzLCAgICAgICAgICAgICAgLyohPCAgMzMgIFBXTTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBXTTJfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDM0LCAgICAgICAgICAgICAgLyohPCAgMzQgIFBXTTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNQSU0yX1NQSVMyX1NQSTJfSVJRbiAgICAgICAgID0gIDM1LCAgICAgICAgICAgICAgLyohPCAgMzUgIFNQSU0yX1NQSVMyX1NQSTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFJUQzJfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDM2LCAgICAgICAgICAgICAgLyohPCAgMzYgIFJUQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEkyU19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDM3LCAgICAgICAgICAgICAgLyohPCAgMzcgIEkyUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEZQVV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDM4LCAgICAgICAgICAgICAgLyohPCAgMzggIEZQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVTQkRfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDM5LCAgICAgICAgICAgICAgLyohPCAgMzkgIFVTQkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVBUlRFMV9JUlFuICAgICAgICAgICAgICAgICAgID0gIDQwLCAgICAgICAgICAgICAgLyohPCAgNDAgIFVBUlRFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFTUElfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDQxLCAgICAgICAgICAgICAgLyohPCAgNDEgIFFTUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENSWVBUT0NFTExfSVJRbiAgICAgICAgICAgICAgID0gIDQyLCAgICAgICAgICAgICAgLyohPCAgNDIgIENSWVBUT0NFTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNQSU0zX0lSUW4gICAgICAgICAgICAgICAgICAgID0gIDQzLCAgICAgICAgICAgICAgLyohPCAgNDMgIFNQSU0zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBXTTNfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDQ1ICAgICAgICAgICAgICAgLyohPCAgNDUgIFBXTTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IElSUW5fVHlwZTsNCisNCisNCisvKiogQGFkZHRvZ3JvdXAgQ29uZmlndXJhdGlvbl9vZl9DTVNJUw0KKyAgKiBAew0KKyAgKi8NCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbCBTZWN0aW9uICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tQ29uZmlndXJhdGlvbiBvZiB0aGUgQ29ydGV4LU00IFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFscy0tLS0tLS0tLS0tLS0tLS0gKi8NCisjZGVmaW5lIF9fQ000X1JFViAgICAgICAgICAgICAgICAgMHgwMDAxICAgICAgICAgICAgLyohPCBDb3J0ZXgtTTQgQ29yZSBSZXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgLyohPCBNUFUgcHJlc2VudCBvciBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgICAgICAzICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgQml0cyB1c2VkIGZvciBQcmlvcml0eSBMZXZlbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgICAgICAwICAgICAgICAgICAgLyohPCBTZXQgdG8gMSBpZiBkaWZmZXJlbnQgU3lzVGljayBDb25maWcgaXMgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIF9fRlBVX1BSRVNFTlQgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgLyohPCBGUFUgcHJlc2VudCBvciBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiogQH0gKi8gLyogRW5kIG9mIGdyb3VwIENvbmZpZ3VyYXRpb25fb2ZfQ01TSVMgKi8NCisNCisjaWYgZGVmaW5lZCAoIF9fR05VQ19fICkNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcGVkYW50aWMiDQorI2VuZGlmDQorI2luY2x1ZGUgImNvcmVfY200LmgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29ydGV4LU00IHByb2Nlc3NvciBhbmQgY29yZSBwZXJpcGhlcmFscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3ANCisjZW5kaWYNCisNCisjaW5jbHVkZSAic3lzdGVtX25yZjUyODQwLmgiICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBucmY1Mjg0MCBTeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgRGV2aWNlIFNwZWNpZmljIFBlcmlwaGVyYWwgU2VjdGlvbiAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKiogQGFkZHRvZ3JvdXAgRGV2aWNlX1BlcmlwaGVyYWxfUmVnaXN0ZXJzDQorICAqIEB7DQorICAqLw0KKw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXJ0IG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2lmIGRlZmluZWQoX19DQ19BUk0pDQorICAjcHJhZ21hIHB1c2gNCisgICNwcmFnbWEgYW5vbl91bmlvbnMNCisjZWxpZiBkZWZpbmVkKF9fSUNDQVJNX18pDQorICAjcHJhZ21hIGxhbmd1YWdlPWV4dGVuZGVkDQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykNCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLw0KKyNlbGlmIGRlZmluZWQoX19UTVM0NzBfXykNCisvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8NCisjZWxpZiBkZWZpbmVkKF9fVEFTS0lOR19fKQ0KKyAgI3ByYWdtYSB3YXJuaW5nIDU4Ng0KKyNlbHNlDQorICAjd2FybmluZyBOb3Qgc3VwcG9ydGVkIGNvbXBpbGVyIHR5cGUNCisjZW5kaWYNCisNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0kgIHVpbnQzMl90ICBQQVJUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFydCBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBWQVJJQU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFydCB2YXJpYW50IChoYXJkd2FyZSB2ZXJzaW9uIGFuZCBwcm9kdWN0aW9uIGNvbmZpZ3VyYXRpb24pLiAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBQQUNLQUdFOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2FnZSBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSQU07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkFNIHZhcmlhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBGTEFTSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRmxhc2ggdmFyaWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBVTlVTRUQwWzNdOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBGSUNSX0lORk9fVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0kgIHVpbnQzMl90ICBBMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgZGVmaW5pdGlvbiBBMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgZGVmaW5pdGlvbiBBMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgZGVmaW5pdGlvbiBBMi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgZGVmaW5pdGlvbiBBMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgZGVmaW5pdGlvbiBBNC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgZGVmaW5pdGlvbiBBNS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgQjAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgQjEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgQjIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgQjMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgQjQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgQjUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VnbWVudCBlbmQgVDAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VnbWVudCBlbmQgVDEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VnbWVudCBlbmQgVDIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VnbWVudCBlbmQgVDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VnbWVudCBlbmQgVDQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBGSUNSX1RFTVBfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0kgIHVpbnQzMl90ICBUQUdIRUFERVIwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVmYXVsdCBoZWFkZXIgZm9yIE5GQyBUYWcuIFNvZnR3YXJlIGNhbiByZWFkIHRoZXNlIHZhbHVlcyB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlIE5GQ0lEMV8zUkRfTEFTVCwgTkZDSUQxXzJORF9MQVNUIGFuZCBORkNJRDFfTEFTVC4gICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgVEFHSEVBREVSMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlZmF1bHQgaGVhZGVyIGZvciBORkMgVGFnLiBTb2Z0d2FyZSBjYW4gcmVhZCB0aGVzZSB2YWx1ZXMgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZSBORkNJRDFfM1JEX0xBU1QsIE5GQ0lEMV8yTkRfTEFTVCBhbmQgTkZDSUQxX0xBU1QuICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFRBR0hFQURFUjI7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZWZhdWx0IGhlYWRlciBmb3IgTkZDIFRhZy4gU29mdHdhcmUgY2FuIHJlYWQgdGhlc2UgdmFsdWVzIHRvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGUgTkZDSUQxXzNSRF9MQVNULCBORkNJRDFfMk5EX0xBU1QgYW5kIE5GQ0lEMV9MQVNULiAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBUQUdIRUFERVIzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVmYXVsdCBoZWFkZXIgZm9yIE5GQyBUYWcuIFNvZnR3YXJlIGNhbiByZWFkIHRoZXNlIHZhbHVlcyB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlIE5GQ0lEMV8zUkRfTEFTVCwgTkZDSUQxXzJORF9MQVNUIGFuZCBORkNJRDFfTEFTVC4gICAgICAgICAgICAqLw0KK30gRklDUl9ORkNfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQT1dFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUkFNMCBwb3dlciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBQT1dFUlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUkFNMCBwb3dlciBjb250cm9sIHNldCByZWdpc3RlciAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBQT1dFUkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUkFNMCBwb3dlciBjb250cm9sIGNsZWFyIHJlZ2lzdGVyICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDA7DQorfSBQT1dFUl9SQU1fVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBSVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgUlRTIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgVFhEIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgQ1RTIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgUlhEIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBVQVJURV9QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAqLw0KK30gVUFSVEVfUlhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAqLw0KK30gVUFSVEVfVFhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFJUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFRYRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1RTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIENUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFJYRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gVUFSVF9QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU0NLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1PU0kgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUlTTzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1JU08gc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1NOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIENTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJTV9QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTElTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVhc3lETUEgbGlzdCB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJTV9SWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBMSVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRWFzeURNQSBsaXN0IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBTUElNX1RYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFJYREVMQVk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGUgZGVsYXkgZm9yIGlucHV0IHNlcmlhbCBkYXRhIG9uIE1JU08gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENTTkRVUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNaW5pbXVtIGR1cmF0aW9uIGJldHdlZW4gZWRnZSBvZiBDU04gYW5kIGVkZ2Ugb2YgU0NLIGFuZCBtaW5pbXVtDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gQ1NOIG11c3Qgc3RheSBoaWdoIGJldHdlZW4gdHJhbnNhY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICovDQorfSBTUElNX0lGVElNSU5HX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU0NLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUlTTzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1JU08gc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1PU0kgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1NOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIENTTiBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJU19QU0VMX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCBkYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBsYXN0IGdyYW50ZWQgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAqLw0KK30gU1BJU19SWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIGRhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIGxhc3QgZ3JhbnRlZCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICovDQorfSBTUElTX1RYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFNDTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTQ0wgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNEQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBTREEgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFRXSU1fUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExJU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYXN5RE1BIGxpc3QgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFRXSU1fUlhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTElTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVhc3lETUEgbGlzdCB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gVFdJTV9UWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBTQ0w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgU0NMIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTREE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgU0RBIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBUV0lTX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlhEIERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gUlhEIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IFJYRCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICovDQorfSBUV0lTX1JYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWEQgRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBUWEQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgVFhEIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgKi8NCit9IFRXSVNfVFhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU0NLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9TSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1PU0kgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUlTTzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1JU08gc2lnbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBTQ0w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTREE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBUV0lfUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFJYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXN1bHQgb2YgbGFzdCBpbmNvbWluZyBmcmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5GQ1RfRlJBTUVTVEFUVVNfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBGUkFNRUNPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiBvZiBvdXRnb2luZyBmcmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2l6ZSBvZiBvdXRnb2luZyBmcmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBORkNUX1RYRF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIEZSQU1FQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIG9mIGluY29taW5nIGZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIGxhc3QgaW5jb21pbmcgZnJhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5GQ1RfUlhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgTElNSVRIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IExhc3QgcmVzdWx0cyBpcyBlcXVhbCBvciBhYm92ZSBDSFswXS5MSU1JVC5ISUdIICovDQorICBfX0lPIHVpbnQzMl90ICBMSU1JVEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogTGFzdCByZXN1bHRzIGlzIGVxdWFsIG9yIGJlbG93IENIWzBdLkxJTUlULkxPVyAqLw0KK30gU0FBRENfRVZFTlRTX0NIX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFNFTFA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IElucHV0IHBvc2l0aXZlIHBpbiBzZWxlY3Rpb24gZm9yIENIWzBdICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFNFTE47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IElucHV0IG5lZ2F0aXZlIHBpbiBzZWxlY3Rpb24gZm9yIENIWzBdICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IElucHV0IGNvbmZpZ3VyYXRpb24gZm9yIENIWzBdICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTElNSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IEhpZ2gvbG93IGxpbWl0cyBmb3IgZXZlbnQgbW9uaXRvcmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU0FBRENfQ0hfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWF4aW11bSBudW1iZXIgb2YgYnVmZmVyIHdvcmRzIHRvIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIGJ1ZmZlciB3b3JkcyB0cmFuc2ZlcnJlZCBzaW5jZSBsYXN0IFNUQVJUICAgICAgICAgICAgICAgICAgICovDQorfSBTQUFEQ19SRVNVTFRfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBMRUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgTEVEIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgQSBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIHNlbGVjdCBmb3IgQiBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBRREVDX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQmVnaW5uaW5nIGFkZHJlc3MgaW4gRGF0YSBSQU0gb2Ygc2VxdWVuY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBBbW91bnQgb2YgdmFsdWVzIChkdXR5IGN5Y2xlcykgaW4gc2VxdWVuY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJFRlJFU0g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBBbW91bnQgb2YgYWRkaXRpb25hbCBQV00gcGVyaW9kcyBiZXR3ZWVuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyBsb2FkZWQgdG8gY29tcGFyZSByZWdpc3RlciAobG9hZCBldmVyeSBDTlQrMSBQV00gcGVyaW9kcykgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFTkRERUxBWTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogVGltZSBhZGRlZCBhZnRlciB0aGUgc2VxdWVuY2UgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNF07DQorfSBQV01fU0VRX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgT1VUWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IE91dHB1dCBwaW4gc2VsZWN0IGZvciBQV00gY2hhbm5lbA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUFdNX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBDTEs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIG51bWJlciBjb25maWd1cmF0aW9uIGZvciBQRE0gQ0xLIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBESU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGluIG51bWJlciBjb25maWd1cmF0aW9uIGZvciBQRE0gRElOIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBQRE1fUFNFTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSQU0gYWRkcmVzcyBwb2ludGVyIHRvIHdyaXRlIHNhbXBsZXMgdG8gd2l0aCBFYXN5RE1BICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2Ygc2FtcGxlcyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluIEVhc3lETUEgbW9kZSAgICAgICAgICAgICAgKi8NCit9IFBETV9TQU1QTEVfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBBRERSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQ29uZmlndXJlIHRoZSB3b3JkLWFsaWduZWQgc3RhcnQgYWRkcmVzcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHJlZ2lvbiAwIHRvIHByb3RlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFNpemUgb2YgcmVnaW9uIHRvIHByb3RlY3QgY291bnRpbmcgZnJvbQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgQUNMWzBdLkFERFIuIFdyaXRlICcwJyBhcyBubyBlZmZlY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUEVSTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IEFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgcmVnaW9uIDAgYXMgZGVmaW5lZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHN0YXJ0IGFkZHJlc3MgQUNMWzBdLkFERFIgYW5kIHNpemUgQUNMWzBdLlNJWkUgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVU5VU0VEMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gQUNMX0FDTF9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fTyAgdWludDMyX3QgIEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBFbmFibGUgY2hhbm5lbCBncm91cCAwICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIERJUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBEaXNhYmxlIGNoYW5uZWwgZ3JvdXAgMCAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFBQSV9UQVNLU19DSEdfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBFRVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQ2hhbm5lbCAwIGV2ZW50IGVuZC1wb2ludCAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBURVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQ2hhbm5lbCAwIHRhc2sgZW5kLXBvaW50ICAgICAgICAgICAgICAgICAgICAgICovDQorfSBQUElfQ0hfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBURVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogQ2hhbm5lbCAwIHRhc2sgZW5kLXBvaW50ICAgICAgICAgICAgICAgICAgICAgICovDQorfSBQUElfRk9SS19UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFdBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBXcml0ZSBhY2Nlc3MgdG8gcmVnaW9uIDAgZGV0ZWN0ZWQgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBSZWFkIGFjY2VzcyB0byByZWdpb24gMCBkZXRlY3RlZCAgICAgICAgICAgICAgKi8NCit9IE1XVV9FVkVOVFNfUkVHSU9OX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgV0E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFdyaXRlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHJlZ2lvbiAwDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogUmVhZCBhY2Nlc3MgdG8gcGVyaXBoZXJhbCByZWdpb24gMCBkZXRlY3RlZCAgICovDQorfSBNV1VfRVZFTlRTX1BSRUdJT05fVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBTVUJTVEFUV0E7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogU291cmNlIG9mIGV2ZW50L2ludGVycnVwdCBpbiByZWdpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB3cml0ZSBhY2Nlc3MgZGV0ZWN0ZWQgd2hpbGUgY29ycmVzcG9uZGluZyBzdWJyZWdpb24gd2FzIGVuYWJsZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdhdGNoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNVQlNUQVRSQTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBTb3VyY2Ugb2YgZXZlbnQvaW50ZXJydXB0IGluIHJlZ2lvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJlYWQgYWNjZXNzIGRldGVjdGVkIHdoaWxlIGNvcnJlc3BvbmRpbmcgc3VicmVnaW9uIHdhcyBlbmFibGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3YXRjaGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBNV1VfUEVSUkVHSU9OX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IFN0YXJ0IGFkZHJlc3MgZm9yIHJlZ2lvbiAwICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRU5EOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06IEVuZCBhZGRyZXNzIG9mIHJlZ2lvbiAwICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzJdOw0KK30gTVdVX1JFR0lPTl9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSSAgdWludDMyX3QgIFNUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEVORDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNVQlM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBTdWJyZWdpb25zIG9mIHJlZ2lvbiAwICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzsNCit9IE1XVV9QUkVHSU9OX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyUyBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUlhFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlY2VwdGlvbiAoUlgpIGVuYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVFhFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRyYW5zbWlzc2lvbiAoVFgpIGVuYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUNLRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZW5hYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUNLRlJFUTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZnJlcXVlbmN5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkFUSU87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1DSyAvIExSQ0sgcmF0aW8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU1dJRFRIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNhbXBsZSB3aWR0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQUxJR047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFsaWdubWVudCBvZiBzYW1wbGUgd2l0aGluIGEgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRk9STUFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZyYW1lIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ0hBTk5FTFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBjaGFubmVscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gSTJTX0NPTkZJR19UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIGJ1ZmZlciBSQU0gc3RhcnQgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IEkyU19SWERfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgYnVmZmVyIFJBTSBzdGFydCBhZGRyZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBJMlNfVFhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNpemUgb2YgUlhEIGFuZCBUWEQgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gSTJTX1JYVFhEX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgTUNLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIE1DSyBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0NLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNDSyBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTFJDSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIExSQ0sgc2lnbmFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0RJTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNESU4gc2lnbmFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0RPVVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgZm9yIFNET1VUIHNpZ25hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gSTJTX1BTRUxfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0kgIHVpbnQzMl90ICBFUElOWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogSU4gZW5kcG9pbnQgaGFsdGVkIHN0YXR1cy4gQ2FuIGJlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBhcyBpcyBhcyByZXNwb25zZSB0byBhIEdldFN0YXR1cygpIHJlcXVlc3QgdG8gZW5kcG9pbnQuICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ7DQorICBfX0kgIHVpbnQzMl90ICBFUE9VVFs4XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogT1VUIGVuZHBvaW50IGhhbHRlZCBzdGF0dXMuIENhbiBiZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgYXMgaXMgYXMgcmVzcG9uc2UgdG8gYSBHZXRTdGF0dXMoKSByZXF1ZXN0IHRvIGVuZHBvaW50LiAgICAgICAgICAqLw0KK30gVVNCRF9IQUxURURfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBFUE9VVFs4XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQW1vdW50IG9mIGJ5dGVzIHJlY2VpdmVkIGxhc3QgaW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YSBzdGFnZSBvZiB0aGlzIE9VVCBlbmRwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElTT09VVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbW91bnQgb2YgYnl0ZXMgcmVjZWl2ZWQgbGFzdCBvbiB0aGlzIGlzbyBPVVQgZGF0YSBlbmRwb2ludCAgICAgICAgICAgKi8NCit9IFVTQkRfU0laRV9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsyXTsNCit9IFVTQkRfRVBJTl9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWENOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEFNT1VOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgKi8NCit9IFVTQkRfSVNPSU5fVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogRGF0YSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNQVhDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBBTU9VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY2x1c3RlclswXTogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbMl07DQorfSBVU0JEX0VQT1VUX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQU1PVU5UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAqLw0KK30gVVNCRF9JU09PVVRfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBTUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRmxhc2ggbWVtb3J5IHNvdXJjZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBEU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkFNIGRlc3RpbmF0aW9uIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVhZCB0cmFuc2ZlciBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBRU1BJX1JFQURfVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBfX0lPIHVpbnQzMl90ICBEU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRmxhc2ggZGVzdGluYXRpb24gYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBTUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkFNIHNvdXJjZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV3JpdGUgdHJhbnNmZXIgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBRU1BJX1dSSVRFX1R5cGU7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgX19JTyB1aW50MzJfdCAgUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IGFkZHJlc3Mgb2YgZmxhc2ggYmxvY2sgdG8gYmUgZXJhc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNpemUgb2YgYmxvY2sgdG8gYmUgZXJhc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gUVNQSV9FUkFTRV9UeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIF9fSU8gdWludDMyX3QgIFNDSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBzZXJpYWwgY2xvY2sgU0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENTTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBjaGlwIHNlbGVjdCBzaWduYWwgQ1NOLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENzsNCisgIF9fSU8gdWludDMyX3QgIElPMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBzZXJpYWwgZGF0YSBNT1NJL0lPMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElPMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBzZXJpYWwgZGF0YSBNSVNPL0lPMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElPMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBzZXJpYWwgZGF0YSBJTzIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElPMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaW4gc2VsZWN0IGZvciBzZXJpYWwgZGF0YSBJTzMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFFTUElfUFNFTF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBGSUNSICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgRmFjdG9yeSBJbmZvcm1hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAoRklDUikNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRklDUiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNF07DQorICBfX0kgIHVpbnQzMl90ICBDT0RFUEFHRVNJWkU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29kZSBtZW1vcnkgcGFnZSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBDT0RFU0laRTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29kZSBtZW1vcnkgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMThdOw0KKyAgX19JICB1aW50MzJfdCAgREVWSUNFSURbMl07ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IERldmljZSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzZdOw0KKyAgX19JICB1aW50MzJfdCAgRVJbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IEVuY3J5cHRpb24gcm9vdCwgd29yZCAwICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgSVJbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IElkZW50aXR5IFJvb3QsIHdvcmQgMCAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgREVWSUNFQUREUlRZUEU7ICAgICAgICAgICAgICAgICAgICAvKiE8IERldmljZSBhZGRyZXNzIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgREVWSUNFQUREUlsyXTsgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IERldmljZSBhZGRyZXNzIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzIxXTsNCisgIEZJQ1JfSU5GT19UeXBlIElORk87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXZpY2UgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFsxODVdOw0KKyAgRklDUl9URU1QX1R5cGUgVEVNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZ2lzdGVycyBzdG9yaW5nIGZhY3RvcnkgVEVNUCBtb2R1bGUgbGluZWFyaXphdGlvbiBjb2VmZmljaWVudHMgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzJdOw0KKyAgRklDUl9ORkNfVHlwZSBORkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0ZJQ1JfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVUlDUiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFVzZXIgSW5mb3JtYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKFVJQ1IpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVJQ1IgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVU5VU0VEMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVU5VU0VEMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgVU5VU0VEMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwOw0KKyAgX19JTyB1aW50MzJfdCAgVU5VU0VEMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTlJGRldbMTVdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFJlc2VydmVkIGZvciBOb3JkaWMgZmlybXdhcmUgZGVzaWduICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTlJGSFdbMTJdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFJlc2VydmVkIGZvciBOb3JkaWMgaGFyZHdhcmUgZGVzaWduICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ1VTVE9NRVJbMzJdOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFJlc2VydmVkIGZvciBjdXN0b21lciAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzY0XTsNCisgIF9fSU8gdWludDMyX3QgIFBTRUxSRVNFVFsyXTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBNYXBwaW5nIG9mIHRoZSBuUkVTRVQgZnVuY3Rpb24gICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEFQUFJPVEVDVDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBY2Nlc3MgcG9ydCBwcm90ZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5GQ1BJTlM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXR0aW5nIG9mIHBpbnMgZGVkaWNhdGVkIHRvIE5GQyBmdW5jdGlvbmFsaXR5OiBORkMgYW50ZW5uYQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEdQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzYwXTsNCisgIF9fSU8gdWludDMyX3QgIEVYVFNVUFBMWTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgZXh0ZXJuYWwgY2lyY3VpdHJ5IHRvIGJlIHN1cHBsaWVkIGZyb20gVkREIHBpbi4gQXBwbGljYWJsZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluICdIaWdoIHZvbHRhZ2UgbW9kZScgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkVHT1VUMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gcmVmZXJlbmNlIHZvbHRhZ2UgLyBleHRlcm5hbCBvdXRwdXQgc3VwcGx5IHZvbHRhZ2UgaW4gJ0hpZ2gNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x0YWdlIG1vZGUnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9VSUNSX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFBPV0VSICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBQb3dlciBjb250cm9sIChQT1dFUikNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUE9XRVIgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbMzBdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ09OU1RMQVQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBjb25zdGFudCBsYXRlbmN5IG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfTE9XUFdSOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBsb3cgcG93ZXIgbW9kZSAodmFyaWFibGUgbGF0ZW5jeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzM0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19QT0ZXQVJOOyAgICAgICAgICAgICAgICAgICAgLyohPCBQb3dlciBmYWlsdXJlIHdhcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TTEVFUEVOVEVSOyAgICAgICAgICAgICAgICAgLyohPCBDUFUgZW50ZXJlZCBXRkkvV0ZFIHNsZWVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TTEVFUEVYSVQ7ICAgICAgICAgICAgICAgICAgLyohPCBDUFUgZXhpdGVkIFdGSS9XRkUgc2xlZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19VU0JERVRFQ1RFRDsgICAgICAgICAgICAgICAgLyohPCBWb2x0YWdlIHN1cHBseSBkZXRlY3RlZCBvbiBWQlVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19VU0JSRU1PVkVEOyAgICAgICAgICAgICAgICAgLyohPCBWb2x0YWdlIHN1cHBseSByZW1vdmVkIGZyb20gVkJVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19VU0JQV1JSRFk7ICAgICAgICAgICAgICAgICAgLyohPCBVU0IgMy4zIFYgc3VwcGx5IHJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1sxMTldOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzYxXTsNCisgIF9fSU8gdWludDMyX3QgIFJFU0VUUkVBUzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXNldCByZWFzb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs5XTsNCisgIF9fSSAgdWludDMyX3QgIFJBTVNUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXByZWNhdGVkIHJlZ2lzdGVyIC0gUkFNIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENlszXTsNCisgIF9fSSAgdWludDMyX3QgIFVTQlJFR1NUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0Igc3VwcGx5IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s0OV07DQorICBfX08gIHVpbnQzMl90ICBTWVNURU1PRkY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIE9GRiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbM107DQorICBfX0lPIHVpbnQzMl90ICBQT0ZDT047ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUG93ZXIgZmFpbHVyZSBjb21wYXJhdG9yIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDlbMl07DQorICBfX0lPIHVpbnQzMl90ICBHUFJFR1JFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBHUFJFR1JFVDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwWzIxXTsNCisgIF9fSU8gdWludDMyX3QgIERDRENFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgREMvREMgY29udmVydGVyIGZvciBSRUcxIHN0YWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTE7DQorICBfX0lPIHVpbnQzMl90ICBEQ0RDRU4wOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIERDL0RDIGNvbnZlcnRlciBmb3IgUkVHMCBzdGFnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyWzQ3XTsNCisgIF9fSSAgdWludDMyX3QgIE1BSU5SRUdTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgLyohPCBNYWluIHN1cHBseSBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTNbMTc1XTsNCisgIFBPV0VSX1JBTV9UeXBlIFJBTVs5XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9QT1dFUl9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBDTE9DSyAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQ2xvY2sgY29udHJvbCAoQ0xPQ0spDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENMT0NLIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfSEZDTEtTVEFSVDsgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IEhGQ0xLIGNyeXN0YWwgb3NjaWxsYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfSEZDTEtTVE9QOyAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgSEZDTEsgY3J5c3RhbCBvc2NpbGxhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfTEZDTEtTVEFSVDsgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IExGQ0xLIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfTEZDTEtTVE9QOyAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgTEZDTEsgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ0FMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IGNhbGlicmF0aW9uIG9mIExGUkMgb3IgTEZVTFAgb3NjaWxsYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ1RTVEFSVDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IGNhbGlicmF0aW9uIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ1RTVE9QOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgY2FsaWJyYXRpb24gdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzU3XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19IRkNMS1NUQVJURUQ7ICAgICAgICAgICAgICAgLyohPCBIRkNMSyBvc2NpbGxhdG9yIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19MRkNMS1NUQVJURUQ7ICAgICAgICAgICAgICAgLyohPCBMRkNMSyBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19ET05FOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDYWxpYnJhdGlvbiBvZiBMRkNMSyBSQyBvc2NpbGxhdG9yIGNvbXBsZXRlIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19DVFRPOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDYWxpYnJhdGlvbiB0aW1lciB0aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYzXTsNCisgIF9fSSAgdWludDMyX3QgIEhGQ0xLUlVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGF0dXMgaW5kaWNhdGluZyB0aGF0IEhGQ0xLU1RBUlQgdGFzayBoYXMgYmVlbiB0cmlnZ2VyZWQgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEhGQ0xLU1RBVDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBIRkNMSyBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDsNCisgIF9fSSAgdWludDMyX3QgIExGQ0xLUlVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGF0dXMgaW5kaWNhdGluZyB0aGF0IExGQ0xLU1RBUlQgdGFzayBoYXMgYmVlbiB0cmlnZ2VyZWQgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIExGQ0xLU1RBVDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMRkNMSyBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIExGQ0xLU1JDQ09QWTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3B5IG9mIExGQ0xLU1JDIHJlZ2lzdGVyLCBzZXQgd2hlbiBMRkNMS1NUQVJUIHRhc2sgd2FzIHRyaWdnZXJlZCAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs2Ml07DQorICBfX0lPIHVpbnQzMl90ICBMRkNMS1NSQzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2xvY2sgc291cmNlIGZvciB0aGUgTEZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbN107DQorICBfX0lPIHVpbnQzMl90ICBDVElWOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsaWJyYXRpb24gdGltZXIgaW50ZXJ2YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbOF07DQorICBfX0lPIHVpbnQzMl90ICBUUkFDRUNPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2xvY2tpbmcgb3B0aW9ucyBmb3IgdGhlIFRyYWNlIFBvcnQgZGVidWcgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfQ0xPQ0tfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgUkFESU8gICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIDIuNCBHSHogUmFkaW8gKFJBRElPKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSQURJTyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1RYRU47ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgUkFESU8gaW4gVFggbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JYRU47ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgUkFESU8gaW4gUlggbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBSQURJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFJBRElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0RJU0FCTEU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIFJBRElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JTU0lTVEFSVDsgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCB0aGUgUlNTSSBhbmQgdGFrZSBvbmUgc2luZ2xlIHNhbXBsZSBvZiB0aGUgcmVjZWl2ZSBzaWduYWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlbmd0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JTU0lTVE9QOyAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHRoZSBSU1NJIG1lYXN1cmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0JDU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCB0aGUgYml0IGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0JDU1RPUDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHRoZSBiaXQgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0VEU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCB0aGUgRW5lcmd5IERldGVjdCBtZWFzdXJlbWVudCB1c2VkIGluIElFRUUgODAyLjE1LjQgbW9kZSAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0VEU1RPUDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHRoZSBFbmVyZ3kgRGV0ZWN0IG1lYXN1cmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NDQVNUQVJUOyAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCB0aGUgQ2xlYXIgQ2hhbm5lbCBBc3Nlc3NtZW50IHVzZWQgaW4gSUVFRSA4MDIuMTUuNCBtb2RlICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NDQVNUT1A7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHRoZSBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs1MV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVBRFk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkFESU8gaGFzIHJhbXBlZCB1cCBhbmQgaXMgcmVhZHkgdG8gYmUgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQUREUkVTUzsgICAgICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyBzZW50IG9yIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUEFZTE9BRDsgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IHBheWxvYWQgc2VudCBvciByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IHNlbnQgb3IgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRElTQUJMRUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgUkFESU8gaGFzIGJlZW4gZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfREVWTUFUQ0g7ICAgICAgICAgICAgICAgICAgIC8qITwgQSBkZXZpY2UgYWRkcmVzcyBtYXRjaCBvY2N1cnJlZCBvbiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfREVWTUlTUzsgICAgICAgICAgICAgICAgICAgIC8qITwgTm8gZGV2aWNlIGFkZHJlc3MgbWF0Y2ggb2NjdXJyZWQgb24gdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlNTSUVORDsgICAgICAgICAgICAgICAgICAgIC8qITwgU2FtcGxpbmcgb2YgcmVjZWl2ZSBzaWduYWwgc3RyZW5ndGggY29tcGxldGUuICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQkNNQVRDSDsgICAgICAgICAgICAgICAgICAgIC8qITwgQml0IGNvdW50ZXIgcmVhY2hlZCBiaXQgY291bnQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI7DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1JDT0s7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIG9rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1JDRVJST1I7ICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRlJBTUVTVEFSVDsgICAgICAgICAgICAgICAgIC8qITwgSUVFRSA4MDIuMTUuNCBsZW5ndGggZmllbGQgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRURFTkQ7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2FtcGxpbmcgb2YgRW5lcmd5IERldGVjdGlvbiBjb21wbGV0ZS4gQSBuZXcgRUQgc2FtcGxlIGlzIHJlYWR5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJlYWRvdXQgZnJvbSB0aGUgUkFESU8uRURTQU1QTEUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRURTVE9QUEVEOyAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHNhbXBsaW5nIG9mIEVuZXJneSBEZXRlY3Rpb24gaGFzIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ0NBSURMRTsgICAgICAgICAgICAgICAgICAgIC8qITwgV2lyZWxlc3MgbWVkaXVtIGluIGlkbGUgLSBjbGVhciB0byBzZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ0NBQlVTWTsgICAgICAgICAgICAgICAgICAgIC8qITwgV2lyZWxlc3MgbWVkaXVtIGJ1c3kgLSBkbyBub3Qgc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ0NBU1RPUFBFRDsgICAgICAgICAgICAgICAgIC8qITwgVGhlIENDQSBoYXMgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkFURUJPT1NUOyAgICAgICAgICAgICAgICAgIC8qITwgQmxlX0xSIENJIGZpZWxkIHJlY2VpdmVkLCByZWNlaXZlIG1vZGUgaXMgY2hhbmdlZCBmcm9tIEJsZV9MUjEyNUtiaXQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBCbGVfTFI1MDBLYml0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWFJFQURZOyAgICAgICAgICAgICAgICAgICAgLyohPCBSQURJTyBoYXMgcmFtcGVkIHVwIGFuZCBpcyByZWFkeSB0byBiZSBzdGFydGVkIFRYIHBhdGggICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWFJFQURZOyAgICAgICAgICAgICAgICAgICAgLyohPCBSQURJTyBoYXMgcmFtcGVkIHVwIGFuZCBpcyByZWFkeSB0byBiZSBzdGFydGVkIFJYIHBhdGggICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19NSFJNQVRDSDsgICAgICAgICAgICAgICAgICAgLyohPCBNQUMgSGVhZGVyIG1hdGNoIGZvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s0MF07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzYxXTsNCisgIF9fSSAgdWludDMyX3QgIENSQ1NUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkMgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENjsNCisgIF9fSSAgdWludDMyX3QgIFJYTUFUQ0g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlZCBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJYQ1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkMgZmllbGQgb2YgcHJldmlvdXNseSByZWNlaXZlZCBwYWNrZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIERBSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXZpY2UgYWRkcmVzcyBtYXRjaCBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s2MF07DQorICBfX0lPIHVpbnQzMl90ICBQQUNLRVRQVFI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBGUkVRVUVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRnJlcXVlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUWFBPV0VSOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT3V0cHV0IHBvd2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNT0RFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSByYXRlIGFuZCBtb2R1bGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQQ05GMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQQ05GMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGFja2V0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCQVNFMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQmFzZSBhZGRyZXNzIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCQVNFMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQmFzZSBhZGRyZXNzIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQUkVGSVgwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJlZml4ZXMgYnl0ZXMgZm9yIGxvZ2ljYWwgYWRkcmVzc2VzIDAtMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQUkVGSVgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJlZml4ZXMgYnl0ZXMgZm9yIGxvZ2ljYWwgYWRkcmVzc2VzIDQtNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUWEFERFJFU1M7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgYWRkcmVzcyBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSWEFERFJFU1NFUzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBhZGRyZXNzIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDUkNDTkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDUkNQT0xZOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDIHBvbHlub21pYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDUkNJTklUOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDIGluaXRpYWwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDg7DQorICBfX0lPIHVpbnQzMl90ICBUSUZTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW50ZXIgRnJhbWUgU3BhY2luZyBpbiB1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSU1NJU0FNUExFOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlNTSSBzYW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDk7DQorICBfX0kgIHVpbnQzMl90ICBTVEFURTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ3VycmVudCByYWRpbyBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBEQVRBV0hJVEVJVjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSB3aGl0ZW5pbmcgaW5pdGlhbCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwWzJdOw0KKyAgX19JTyB1aW50MzJfdCAgQkNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJpdCBjb3VudGVyIGNvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMVszOV07DQorICBfX0lPIHVpbnQzMl90ICBEQUJbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogRGV2aWNlIGFkZHJlc3MgYmFzZSBzZWdtZW50IDAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBEQVBbOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogRGV2aWNlIGFkZHJlc3MgcHJlZml4IDAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBEQUNORjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGV2aWNlIGFkZHJlc3MgbWF0Y2ggY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNSFJNQVRDSENPTkY7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VhcmNoIFBhdHRlcm4gQ29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBNSFJNQVRDSE1BUzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGF0dGVybiBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyOw0KKyAgX19JTyB1aW50MzJfdCAgTU9ERUNORjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJhZGlvIG1vZGUgY29uZmlndXJhdGlvbiByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxM1szXTsNCisgIF9fSU8gdWludDMyX3QgIFNGRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJRUVFIDgwMi4xNS40IFN0YXJ0IG9mIEZyYW1lIERlbGltaXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVEQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJRUVFIDgwMi4xNS40IEVuZXJneSBEZXRlY3QgTG9vcCBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVEU0FNUExFOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJRUVFIDgwMi4xNS40IEVuZXJneSBEZXRlY3QgTGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENDQUNUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJRUVFIDgwMi4xNS40IENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCBDb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTRbNjExXTsNCisgIF9fSU8gdWludDMyX3QgIFBPV0VSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQZXJpcGhlcmFsIHBvd2VyIGNvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9SQURJT19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBVQVJURSAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgVUFSVCB3aXRoIEVhc3lETUEgMCAoVUFSVEUpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlRFIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRSWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFVBUlQgcmVjZWl2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUFJYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVUFSVCByZWNlaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRUWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFVBUlQgdHJhbnNtaXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUFRYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVUFSVCB0cmFuc21pdHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzddOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfRkxVU0hSWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEZsdXNoIFJYIEZJRk8gaW50byBSWCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzUyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19DVFM7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDVFMgaXMgYWN0aXZhdGVkIChzZXQgbG93KS4gQ2xlYXIgVG8gU2VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19OQ1RTOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDVFMgaXMgZGVhY3RpdmF0ZWQgKHNldCBoaWdoKS4gTm90IENsZWFyIFRvIFNlbmQuICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWERSRFk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHJlY2VpdmVkIGluIFJYRCAoYnV0IHBvdGVudGlhbGx5IG5vdCB5ZXQgdHJhbnNmZXJyZWQgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIFJBTSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMjsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRSWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIGJ1ZmZlciBpcyBmaWxsZWQgdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1syXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWERSRFk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHNlbnQgZnJvbSBUWEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRUWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBMYXN0IFRYIGJ5dGUgdHJhbnNtaXR0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBkZXRlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs3XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWFRPOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlciB0aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWFNUQVJURUQ7ICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIHJlY2VpdmVyIGhhcyBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWFNUQVJURUQ7ICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIHRyYW5zbWl0dGVyIGhhcyBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENjsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWFNUT1BQRUQ7ICAgICAgICAgICAgICAgICAgLyohPCBUcmFuc21pdHRlciBzdG9wcGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s0MV07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzkzXTsNCisgIF9fSU8gdWludDMyX3QgIEVSUk9SU1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBzb3VyY2UgTm90ZSA6IHRoaXMgcmVnaXN0ZXIgaXMgcmVhZCAvIHdyaXRlIG9uZSB0byBjbGVhci4gICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTBbMzFdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBVQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMTsNCisgIFVBUlRFX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTJbM107DQorICBfX0lPIHVpbnQzMl90ICBCQVVEUkFURTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQmF1ZCByYXRlLiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEzWzNdOw0KKyAgVUFSVEVfUlhEX1R5cGUgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCBFYXN5RE1BIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNDsNCisgIFVBUlRFX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWEQgRWFzeURNQSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTVbN107DQorICBfX0lPIHVpbnQzMl90ICBDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiBvZiBwYXJpdHkgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbCAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVUFSVEVfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVUFSVCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFVuaXZlcnNhbCBBc3luY2hyb25vdXMgUmVjZWl2ZXIvVHJhbnNtaXR0ZXIgKFVBUlQpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRSWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFVBUlQgcmVjZWl2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUFJYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVUFSVCByZWNlaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRUWDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFVBUlQgdHJhbnNtaXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUFRYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVUFSVCB0cmFuc21pdHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzNdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1VTUEVORDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN1c3BlbmQgVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzU2XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19DVFM7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDVFMgaXMgYWN0aXZhdGVkIChzZXQgbG93KS4gQ2xlYXIgVG8gU2VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19OQ1RTOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDVFMgaXMgZGVhY3RpdmF0ZWQgKHNldCBoaWdoKS4gTm90IENsZWFyIFRvIFNlbmQuICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWERSRFk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHJlY2VpdmVkIGluIFJYRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWERSRFk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIHNlbnQgZnJvbSBUWEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBkZXRlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs3XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWFRPOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlciB0aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs0Nl07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzkzXTsNCisgIF9fSU8gdWludDMyX3QgIEVSUk9SU1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFcnJvciBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOFszMV07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDk7DQorICBVQVJUX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlhEIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwOw0KKyAgX19JTyB1aW50MzJfdCAgQkFVRFJBVEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJhdWQgcmF0ZS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMVsxN107DQorICBfX0lPIHVpbnQzMl90ICBDT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJhdGlvbiBvZiBwYXJpdHkgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbCAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVUFSVF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBTUElNICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIE1hc3RlciB3aXRoIEVhc3lETUEgMCAoU1BJTSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJTSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNF07DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgU1BJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBTUEkgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVVNQRU5EOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3VzcGVuZCBTUEkgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SRVNVTUU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzdW1lIFNQSSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNTZdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSB0cmFuc2FjdGlvbiBoYXMgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORFJYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBvZiBSWEQgYnVmZmVyIHJlYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0Ow0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBvZiBSWEQgYnVmZmVyIGFuZCBUWEQgYnVmZmVyIHJlYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1Ow0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORFRYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZCBvZiBUWEQgYnVmZmVyIHJlYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzEwXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVEFSVEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBUcmFuc2FjdGlvbiBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s0NF07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzYxXTsNCisgIF9fSU8gdWludDMyX3QgIFNUQUxMU1RBVDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFsbCBzdGF0dXMgZm9yIEVhc3lETUEgUkFNIGFjY2Vzc2VzLiBUaGUgZmllbGRzIGluIHRoaXMgcmVnaXN0ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gU1RBTEwgYnkgaGFyZHdhcmUgd2hlbmV2ZXIgYSBzdGFsbCBvY2N1cnJlcyBhbmQgY2FuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGNsZWFyZWQgKHNldCB0byBOT1NUQUxMKSBieSB0aGUgQ1BVLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgU1BJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTE7DQorICBTUElNX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyWzNdOw0KKyAgX19JTyB1aW50MzJfdCAgRlJFUVVFTkNZOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxM1szXTsNCisgIFNQSU1fUlhEX1R5cGUgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWEQgRWFzeURNQSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNQSU1fVFhEX1R5cGUgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWEQgRWFzeURNQSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTRbMl07DQorICBTUElNX0lGVElNSU5HX1R5cGUgSUZUSU1JTkc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE1WzIyXTsNCisgIF9fSU8gdWludDMyX3QgIE9SQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCeXRlIHRyYW5zbWl0dGVkIGFmdGVyIFRYRC5NQVhDTlQgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGNhc2Ugd2hlbiBSWEQuTUFYQ05UIGlzIGdyZWF0ZXIgdGhhbiBUWEQuTUFYQ05UICAgICAgICAgICAgICAgICovDQorfSBOUkZfU1BJTV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBTUElTICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgU1BJIFNsYXZlIDAgKFNQSVMpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSVMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzldOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQUNRVUlSRTsgICAgICAgICAgICAgICAgICAgICAvKiE8IEFjcXVpcmUgU1BJIHNlbWFwaG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVMRUFTRTsgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlbGVhc2UgU1BJIHNlbWFwaG9yZSwgZW5hYmxpbmcgdGhlIFNQSSBzbGF2ZSB0byBhY3F1aXJlIGl0ICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzU0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBHcmFudGVkIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRSWDsgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmQgb2YgUlhEIGJ1ZmZlciByZWFjaGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s1XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19BQ1FVSVJFRDsgICAgICAgICAgICAgICAgICAgLyohPCBTZW1hcGhvcmUgYWNxdWlyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs1M107DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzYxXTsNCisgIF9fSSAgdWludDMyX3QgIFNFTVNUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZW1hcGhvcmUgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1sxNV07DQorICBfX0lPIHVpbnQzMl90ICBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdHVzIGZyb20gbGFzdCB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbNDddOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBTUEkgc2xhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5Ow0KKyAgU1BJU19QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFs3XTsNCisgIFNQSVNfUlhEX1R5cGUgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTE7DQorICBTUElTX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyOw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMzsNCisgIF9fSU8gdWludDMyX3QgIERFRjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZWZhdWx0IGNoYXJhY3Rlci4gQ2hhcmFjdGVyIGNsb2NrZWQgb3V0IGluIGNhc2Ugb2YgYW4gaWdub3JlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNFsyNF07DQorICBfX0lPIHVpbnQzMl90ICBPUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT3Zlci1yZWFkIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfU1BJU19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBUV0lNICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgSTJDIGNvbXBhdGlibGUgVHdvLVdpcmUgTWFzdGVyIEludGVyZmFjZSB3aXRoIEVhc3lETUEgMCAoVFdJTSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFdJTSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVFJYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgVFdJIHJlY2VpdmUgc2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDA7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVFRYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgVFdJIHRyYW5zbWl0IHNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMl07DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBUV0kgdHJhbnNhY3Rpb24uIE11c3QgYmUgaXNzdWVkIHdoaWxlIHRoZSBUV0kgbWFzdGVyIGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHN1c3BlbmRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVVNQRU5EOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3VzcGVuZCBUV0kgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SRVNVTUU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzdW1lIFRXSSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNTZdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBzdG9wcGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzddOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VSUk9SOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzhdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NVU1BFTkRFRDsgICAgICAgICAgICAgICAgICAvKiE8IExhc3QgYnl0ZSBoYXMgYmVlbiBzZW50IG91dCBhZnRlciB0aGUgU1VTUEVORCB0YXNrIGhhcyBiZWVuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVkLCBUV0kgdHJhZmZpYyBpcyBub3cgc3VzcGVuZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhTVEFSVEVEOyAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBzZXF1ZW5jZSBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhTVEFSVEVEOyAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgc2VxdWVuY2Ugc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTEFTVFJYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgQnl0ZSBib3VuZGFyeSwgc3RhcnRpbmcgdG8gcmVjZWl2ZSB0aGUgbGFzdCBieXRlICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTEFTVFRYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgQnl0ZSBib3VuZGFyeSwgc3RhcnRpbmcgdG8gdHJhbnNtaXQgdGhlIGxhc3QgYnl0ZSAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbMzldOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzYzXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOVsxMTBdOw0KKyAgX19JTyB1aW50MzJfdCAgRVJST1JTUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVycm9yIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsxNF07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFRXSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExOw0KKyAgVFdJTV9QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMls1XTsNCisgIF9fSU8gdWludDMyX3QgIEZSRVFVRU5DWTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgZnJlcXVlbmN5LiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTNbM107DQorICBUV0lNX1JYRF9UeXBlIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlhEIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUV0lNX1RYRF9UeXBlIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE0WzEzXTsNCisgIF9fSU8gdWludDMyX3QgIEFERFJFU1M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBZGRyZXNzIHVzZWQgaW4gdGhlIFRXSSB0cmFuc2ZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9UV0lNX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFRXSVMgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBJMkMgY29tcGF0aWJsZSBUd28tV2lyZSBTbGF2ZSBJbnRlcmZhY2Ugd2l0aCBFYXN5RE1BIDAgKFRXSVMpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSVMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzVdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVFdJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1VTUEVORDsgICAgICAgICAgICAgICAgICAgICAvKiE8IFN1c3BlbmQgVFdJIHRyYW5zYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVTVU1FOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlc3VtZSBUV0kgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzNdOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUFJFUEFSRVJYOyAgICAgICAgICAgICAgICAgICAvKiE8IFByZXBhcmUgdGhlIFRXSSBzbGF2ZSB0byByZXNwb25kIHRvIGEgd3JpdGUgY29tbWFuZCAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUFJFUEFSRVRYOyAgICAgICAgICAgICAgICAgICAvKiE8IFByZXBhcmUgdGhlIFRXSSBzbGF2ZSB0byByZXNwb25kIHRvIGEgcmVhZCBjb21tYW5kICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzUxXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVE9QUEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs3XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUV0kgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVs5XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWFNUQVJURUQ7ICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIHNlcXVlbmNlIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19UWFNUQVJURUQ7ICAgICAgICAgICAgICAgICAgLyohPCBUcmFuc21pdCBzZXF1ZW5jZSBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENls0XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19XUklURTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBXcml0ZSBjb21tYW5kIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SRUFEOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWFkIGNvbW1hbmQgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1szN107DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzExM107DQorICBfX0lPIHVpbnQzMl90ICBFUlJPUlNSQzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3Igc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBNQVRDSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdHVzIHJlZ2lzdGVyIGluZGljYXRpbmcgd2hpY2ggYWRkcmVzcyBoYWQgYSBtYXRjaCAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwWzEwXTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgVFdJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTE7DQorICBUV0lTX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyWzldOw0KKyAgVFdJU19SWERfVHlwZSBSWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYRCBFYXN5RE1BIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMzsNCisgIFRXSVNfVFhEX1R5cGUgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWEQgRWFzeURNQSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTRbMTRdOw0KKyAgX19JTyB1aW50MzJfdCAgQUREUkVTU1syXTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IFRXSSBzbGF2ZSBhZGRyZXNzIDAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNTsNCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgYWRkcmVzcyBtYXRjaCBtZWNoYW5pc20gICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTZbMTBdOw0KKyAgX19JTyB1aW50MzJfdCAgT1JDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE92ZXItcmVhZCBjaGFyYWN0ZXIuIENoYXJhY3RlciBzZW50IG91dCBpbiBjYXNlIG9mIGFuIG92ZXItcmVhZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0cmFuc21pdCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1RXSVNfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFNQSSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwIChTUEkpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzY2XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SRUFEWTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWEQgYnl0ZSBzZW50IGFuZCBSWEQgYnl0ZSByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsxMjZdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEyNV07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFNQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM7DQorICBTUElfUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ7DQorICBfX0kgIHVpbnQzMl90ICBSWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUlhEIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUWEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFhEIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDU7DQorICBfX0lPIHVpbnQzMl90ICBGUkVRVUVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIGZyZXF1ZW5jeS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbMTFdOw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1NQSV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgVFdJICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgSTJDIGNvbXBhdGlibGUgVHdvLVdpcmUgSW50ZXJmYWNlIDAgKFRXSSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFdJIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVFJYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgVFdJIHJlY2VpdmUgc2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDA7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVFRYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgVFdJIHRyYW5zbWl0IHNlcXVlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMl07DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RvcCBUV0kgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVVNQRU5EOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3VzcGVuZCBUV0kgdHJhbnNhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SRVNVTUU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzdW1lIFRXSSB0cmFuc2FjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNTZdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBzdG9wcGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JYRFJFQURZOyAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBSWEQgYnl0ZSByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzRdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RYRFNFTlQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBUWEQgYnl0ZSBzZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1Ow0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VSUk9SOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzRdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0JCOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRXSSBieXRlIGJvdW5kYXJ5LCBnZW5lcmF0ZWQgYmVmb3JlIGVhY2ggYnl0ZSB0aGF0IGlzIHNlbnQgb3INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1szXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVVNQRU5ERUQ7ICAgICAgICAgICAgICAgICAgLyohPCBUV0kgZW50ZXJlZCB0aGUgc3VzcGVuZGVkIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOFs0NV07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDlbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsxMTBdOw0KKyAgX19JTyB1aW50MzJfdCAgRVJST1JTUkM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVycm9yIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMVsxNF07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFRXSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyOw0KKyAgVFdJX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxM1syXTsNCisgIF9fSSAgdWludDMyX3QgIFJYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSWEQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUWEQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTQ7DQorICBfX0lPIHVpbnQzMl90ICBGUkVRVUVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFdJIGZyZXF1ZW5jeS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE1WzI0XTsNCisgIF9fSU8gdWludDMyX3QgIEFERFJFU1M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBZGRyZXNzIHVzZWQgaW4gdGhlIFRXSSB0cmFuc2ZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9UV0lfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgTkZDVCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIE5GQy1BIGNvbXBhdGlibGUgcmFkaW8gKE5GQ1QpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5GQ1QgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQUNUSVZBVEU7ICAgICAgICAgICAgICAgICAgICAvKiE8IEFjdGl2YXRlIE5GQ1QgcGVyaXBoZXJhbCBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIGZyYW1lcywgY2hhbmdlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgdG8gYWN0aXZhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19ESVNBQkxFOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBORkNUIHBlcmlwaGVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TRU5TRTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIE5GQyBzZW5zZSBmaWVsZCBtb2RlLCBjaGFuZ2Ugc3RhdGUgdG8gc2Vuc2UgbW9kZSAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVFRYOyAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdHJhbnNtaXNzaW9uIG9mIGFuIG91dGdvaW5nIGZyYW1lLCBjaGFuZ2Ugc3RhdGUgdG8gdHJhbnNtaXQgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbM107DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FTkFCTEVSWERBVEE7ICAgICAgICAgICAgICAgIC8qITwgSW5pdGlhbGl6ZXMgdGhlIEVhc3lETUEgZm9yIHJlY2VpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE7DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19HT0lETEU7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yY2Ugc3RhdGUgbWFjaGluZSB0byBJRExFIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19HT1NMRUVQOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yY2Ugc3RhdGUgbWFjaGluZSB0byBTTEVFUF9BIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNTNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFQURZOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBORkNUIHBlcmlwaGVyYWwgaXMgcmVhZHkgdG8gcmVjZWl2ZSBhbmQgc2VuZCBmcmFtZXMgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0ZJRUxEREVURUNURUQ7ICAgICAgICAgICAgICAvKiE8IFJlbW90ZSBORkMgZmllbGQgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0ZJRUxETE9TVDsgICAgICAgICAgICAgICAgICAvKiE8IFJlbW90ZSBORkMgZmllbGQgbG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RYRlJBTUVTVEFSVDsgICAgICAgICAgICAgICAvKiE8IE1hcmtzIHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc3ltYm9sIG9mIGEgdHJhbnNtaXR0ZWQgZnJhbWUgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RYRlJBTUVFTkQ7ICAgICAgICAgICAgICAgICAvKiE8IE1hcmtzIHRoZSBlbmQgb2YgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgb24tYWlyIHN5bWJvbCBvZiBhIGZyYW1lICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JYRlJBTUVTVEFSVDsgICAgICAgICAgICAgICAvKiE8IE1hcmtzIHRoZSBlbmQgb2YgdGhlIGZpcnN0IHN5bWJvbCBvZiBhIHJlY2VpdmVkIGZyYW1lICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JYRlJBTUVFTkQ7ICAgICAgICAgICAgICAgICAvKiE8IFJlY2VpdmVkIGRhdGEgaGFzIGJlZW4gY2hlY2tlZCAoQ1JDLCBwYXJpdHkpIGFuZCB0cmFuc2ZlcnJlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIFJBTSwgYW5kIEVhc3lETUEgaGFzIGVuZGVkIGFjY2Vzc2luZyB0aGUgUlggYnVmZmVyICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VSUk9SOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5GQyBlcnJvciByZXBvcnRlZC4gVGhlIEVSUk9SU1RBVFVTIHJlZ2lzdGVyIGNvbnRhaW5zIGRldGFpbHMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgc291cmNlIG9mIHRoZSBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1syXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SWEVSUk9SOyAgICAgICAgICAgICAgICAgICAgLyohPCBORkMgUlggZnJhbWUgZXJyb3IgcmVwb3J0ZWQuIFRoZSBGUkFNRVNUQVRVUy5SWCByZWdpc3RlciBjb250YWlucw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgb24gdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORFJYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJYIGJ1ZmZlciAoYXMgZGVmaW5lZCBieSBQQUNLRVRQVFIgYW5kIE1BWExFTikgaW4gRGF0YSBSQU0gZnVsbC4gICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORFRYOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRyYW5zbWlzc2lvbiBvZiBkYXRhIGluIFJBTSBoYXMgZW5kZWQsIGFuZCBFYXN5RE1BIGhhcyBlbmRlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB0aGUgVFggYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0Ow0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0FVVE9DT0xSRVNTVEFSVEVEOyAgICAgICAgICAvKiE8IEF1dG8gY29sbGlzaW9uIHJlc29sdXRpb24gcHJvY2VzcyBoYXMgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NPTExJU0lPTjsgICAgICAgICAgICAgICAgICAvKiE8IE5GQyBhdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIGVycm9yIHJlcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NFTEVDVEVEOyAgICAgICAgICAgICAgICAgICAvKiE8IE5GQyBhdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUQVJURUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IEVhc3lETUEgaXMgcmVhZHkgdG8gcmVjZWl2ZSBvciBzZW5kIGZyYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzQzXTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1s2M107DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDhbNjJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVJST1JTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5GQyBFcnJvciBTdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5Ow0KKyAgTkZDVF9GUkFNRVNUQVRVU19UeXBlIEZSQU1FU1RBVFVTOyAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgTkZDVEFHU1RBVEU7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5mY1RhZyBzdGF0ZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsxMF07DQorICBfX0kgIHVpbnQzMl90ICBGSUVMRFBSRVNFTlQ7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvciBub3Qgb2YgYSB2YWxpZCBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDExWzQ5XTsNCisgIF9fSU8gdWludDMyX3QgIEZSQU1FREVMQVlNSU47ICAgICAgICAgICAgICAgICAgICAgLyohPCBNaW5pbXVtIGZyYW1lIGRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEZSQU1FREVMQVlNQVg7ICAgICAgICAgICAgICAgICAgICAgLyohPCBNYXhpbXVtIGZyYW1lIGRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEZSQU1FREVMQVlNT0RFOyAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgRnJhbWUgRGVsYXkgVGltZXIgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFBBQ0tFVFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQYWNrZXQgcG9pbnRlciBmb3IgVFhEIGFuZCBSWEQgZGF0YSBzdG9yYWdlIGluIERhdGEgUkFNICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1BWExFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIHRoZSBSQU0gYnVmZmVyIGFsbG9jYXRlZCB0byBUWEQgYW5kIFJYRCBkYXRhIHN0b3JhZ2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE5GQ1RfVFhEX1R5cGUgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE5GQ1RfUlhEX1R5cGUgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTJbMjZdOw0KKyAgX19JTyB1aW50MzJfdCAgTkZDSUQxX0xBU1Q7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExhc3QgTkZDSUQxIHBhcnQgKDQsIDcgb3IgMTAgYnl0ZXMgSUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTkZDSUQxXzJORF9MQVNUOyAgICAgICAgICAgICAgICAgICAvKiE8IFNlY29uZCBsYXN0IE5GQ0lEMSBwYXJ0ICg3IG9yIDEwIGJ5dGVzIElEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTkZDSUQxXzNSRF9MQVNUOyAgICAgICAgICAgICAgICAgICAvKiE8IFRoaXJkIGxhc3QgTkZDSUQxIHBhcnQgKDEwIGJ5dGVzIElEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQVVUT0NPTFJFU0NPTkZJRzsgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2xzIHRoZSBhdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIGZ1bmN0aW9uLiBUaGlzIHNldHRpbmcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBORkNUIHBlcmlwaGVyYWwgaXMgZW5hYmxlZC4gICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNFTlNSRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBORkMtQSBTRU5TX1JFUyBhdXRvLXJlc3BvbnNlIHNldHRpbmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNFTFJFUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBORkMtQSBTRUxfUkVTIGF1dG8tcmVzcG9uc2Ugc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9ORkNUX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgR1BJT1RFICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBHUElPIFRhc2tzIGFuZCBFdmVudHMgKEdQSU9URSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BJT1RFIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19PVVRbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVGFzayBmb3Igd3JpdGluZyB0byBwaW4gc3BlY2lmaWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQ09ORklHWzBdLlBTRUwuIEFjdGlvbiBvbiBwaW4gaXMgY29uZmlndXJlZCBpbiBDT05GSUdbMF0uUE9MQVJJVFkuICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNF07DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TRVRbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVGFzayBmb3Igd3JpdGluZyB0byBwaW4gc3BlY2lmaWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQ09ORklHWzBdLlBTRUwuIEFjdGlvbiBvbiBwaW4gaXMgdG8gc2V0IGl0IGhpZ2guICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNF07DQorICBfX08gIHVpbnQzMl90ICBUQVNLU19DTFJbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVGFzayBmb3Igd3JpdGluZyB0byBwaW4gc3BlY2lmaWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQ09ORklHWzBdLlBTRUwuIEFjdGlvbiBvbiBwaW4gaXMgdG8gc2V0IGl0IGxvdy4gICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMzJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0lOWzhdOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IEV2ZW50IGdlbmVyYXRlZCBmcm9tIHBpbiBzcGVjaWZpZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBDT05GSUdbMF0uUFNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1syM107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUE9SVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXZlbnQgZ2VuZXJhdGVkIGZyb20gbXVsdGlwbGUgaW5wdXQgR1BJTyBwaW5zIHdpdGggU0VOU0UgbWVjaGFuaXNtDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbOTddOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzEyOV07DQorICBfX0lPIHVpbnQzMl90ICBDT05GSUdbOF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ29uZmlndXJhdGlvbiBmb3IgT1VUW25dLCBTRVRbbl0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQ0xSW25dIHRhc2tzIGFuZCBJTltuXSBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9HUElPVEVfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgU0FBREMgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRlciAoU0FBREMpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNBQURDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IHRoZSBBREMgYW5kIHByZXBhcmUgdGhlIHJlc3VsdCBidWZmZXIgaW4gUkFNICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU0FNUExFOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRha2Ugb25lIEFEQyBzYW1wbGUsIGlmIHNjYW4gaXMgZW5hYmxlZCBhbGwgY2hhbm5lbHMgYXJlIHNhbXBsZWQgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgdGhlIEFEQyBhbmQgdGVybWluYXRlIGFueSBvbi1nb2luZyBjb252ZXJzaW9uICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ0FMSUJSQVRFT0ZGU0VUOyAgICAgICAgICAgICAvKiE8IFN0YXJ0cyBvZmZzZXQgYXV0by1jYWxpYnJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYwXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVEFSVEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgQURDIGhhcyBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgQURDIGhhcyBmaWxsZWQgdXAgdGhlIFJlc3VsdCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19ET05FOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIGNvbnZlcnNpb24gdGFzayBoYXMgYmVlbiBjb21wbGV0ZWQuIERlcGVuZGluZyBvbiB0aGUgbW9kZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBjb252ZXJzaW9ucyBtaWdodCBiZSBuZWVkZWQgZm9yIGEgcmVzdWx0IHRvIGJlIHRyYW5zZmVycmVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIFJBTS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVTVUxURE9ORTsgICAgICAgICAgICAgICAgIC8qITwgQSByZXN1bHQgaXMgcmVhZHkgdG8gZ2V0IHRyYW5zZmVycmVkIHRvIFJBTS4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ0FMSUJSQVRFRE9ORTsgICAgICAgICAgICAgIC8qITwgQ2FsaWJyYXRpb24gaXMgY29tcGxldGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RPUFBFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIEFEQyBoYXMgc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTQUFEQ19FVkVOVFNfQ0hfVHlwZSBFVkVOVFNfQ0hbOF07ICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTA2XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2MV07DQorICBfX0kgIHVpbnQzMl90ICBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIEFEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzNdOw0KKyAgU0FBRENfQ0hfVHlwZSBDSFs4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzI0XTsNCisgIF9fSU8gdWludDMyX3QgIFJFU09MVVRJT047ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE9WRVJTQU1QTEU7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPdmVyc2FtcGxpbmcgY29uZmlndXJhdGlvbi4gT1ZFUlNBTVBMRSBzaG91bGQgbm90IGJlIGNvbWJpbmVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBTQ0FOLiBUaGUgUkVTT0xVVElPTiBpcyBhcHBsaWVkIGJlZm9yZSBhdmVyYWdpbmcsIHRodXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhpZ2ggT1ZFUlNBTVBMRSBhIGhpZ2hlciBSRVNPTFVUSU9OIHNob3VsZCBiZSB1c2VkLiAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNBTVBMRVJBVEU7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb250cm9scyBub3JtYWwgb3IgY29udGludW91cyBzYW1wbGUgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENlsxMl07DQorICBTQUFEQ19SRVNVTFRfVHlwZSBSRVNVTFQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkVTVUxUIEVhc3lETUEgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfU0FBRENfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVElNRVIgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFRpbWVyL0NvdW50ZXIgMCAoVElNRVIpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ09VTlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEluY3JlbWVudCBUaW1lciAoQ291bnRlciBtb2RlIG9ubHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfQ0xFQVI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENsZWFyIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU0hVVERPV047ICAgICAgICAgICAgICAgICAgICAvKiE8IERlcHJlY2F0ZWQgcmVnaXN0ZXIgLSBTaHV0IGRvd24gdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzExXTsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NBUFRVUkVbNl07ICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBDYXB0dXJlIFRpbWVyIHZhbHVlIHRvIENDWzBdIHJlZ2lzdGVyICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs1OF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ09NUEFSRVs2XTsgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ29tcGFyZSBldmVudCBvbiBDQ1swXSBtYXRjaCAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNDJdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs2MV07DQorICBfX0kgIHVpbnQzMl90ICBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGltZXIgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRpbWVyIG1vZGUgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQklUTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBieSB0aGUgVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2Ow0KKyAgX19JTyB1aW50MzJfdCAgUFJFU0NBTEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRpbWVyIHByZXNjYWxlciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzExXTsNCisgIF9fSU8gdWludDMyX3QgIENDWzZdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBDYXB0dXJlL0NvbXBhcmUgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9USU1FUl9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgUlRDICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgUmVhbCB0aW1lIGNvdW50ZXIgMCAoUlRDKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSVEMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBSVEMgQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIFJUQyBDT1VOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NMRUFSOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDbGVhciBSVEMgQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1RSSUdPVlJGTFc7ICAgICAgICAgICAgICAgICAgLyohPCBTZXQgQ09VTlRFUiB0byAweEZGRkZGMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2MF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVElDSzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXZlbnQgb24gQ09VTlRFUiBpbmNyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfT1ZSRkxXOyAgICAgICAgICAgICAgICAgICAgIC8qITwgRXZlbnQgb24gQ09VTlRFUiBvdmVyZmxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTRdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0NPTVBBUkVbNF07ICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENvbXBhcmUgZXZlbnQgb24gQ0NbMF0gbWF0Y2ggICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEwOV07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMTNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZURU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIGV2ZW50IHJvdXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZURU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBldmVudCByb3V0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZURU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgZXZlbnQgcm91dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzExMF07DQorICBfX0kgIHVpbnQzMl90ICBDT1VOVEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ3VycmVudCBDT1VOVEVSIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQUkVTQ0FMRVI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgMTIgYml0IHByZXNjYWxlciBmb3IgQ09VTlRFUiBmcmVxdWVuY3kgKDMyNzY4LyhQUkVTQ0FMRVIrMSkpLk11c3QNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB3cml0dGVuIHdoZW4gUlRDIGlzIHN0b3BwZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVsxM107DQorICBfX0lPIHVpbnQzMl90ICBDQ1s0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ29tcGFyZSByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUlRDX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFRFTVAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBUZW1wZXJhdHVyZSBTZW5zb3IgKFRFTVApDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRFTVAgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19EQVRBUkRZOyAgICAgICAgICAgICAgICAgICAgLyohPCBUZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBjb21wbGV0ZSwgZGF0YSByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsxMjhdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEyN107DQorICBfX0kgIGludDMyX3QgICBURU1QOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGVtcGVyYXR1cmUgaW4gZGVnQyAoMC4yNWRlZyBzdGVwcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbNV07DQorICBfX0lPIHVpbnQzMl90ICBBMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgb2YgMXN0IHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgb2YgMm5kIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgb2YgM3JkIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgb2YgNHRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgb2YgNXRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBBNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xvcGUgb2YgNnRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbMl07DQorICBfX0lPIHVpbnQzMl90ICBCMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgb2YgMXN0IHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgb2YgMm5kIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgb2YgM3JkIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgb2YgNHRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgb2YgNXRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBCNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeS1pbnRlcmNlcHQgb2YgNnRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbMl07DQorICBfX0lPIHVpbnQzMl90ICBUMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5kIHBvaW50IG9mIDFzdCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5kIHBvaW50IG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5kIHBvaW50IG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5kIHBvaW50IG9mIDR0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBUNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5kIHBvaW50IG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfVEVNUF9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgUk5HICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKFJORykNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUk5HIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGFzayBzdGFydGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVE9QOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGFzayBzdG9wcGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjJdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1ZBTFJEWTsgICAgICAgICAgICAgICAgICAgICAvKiE8IEV2ZW50IGJlaW5nIGdlbmVyYXRlZCBmb3IgZXZlcnkgbmV3IHJhbmRvbSBudW1iZXIgd3JpdHRlbiB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBWQUxVRSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2NF07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMTI2XTsNCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFZBTFVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPdXRwdXQgcmFuZG9tIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9STkdfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIEVDQiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEFFUyBFQ0IgTW9kZSBFbmNyeXB0aW9uIChFQ0IpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRFQ0I7ICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IEVDQiBibG9jayBlbmNyeXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUEVDQjsgICAgICAgICAgICAgICAgICAgICAvKiE8IEFib3J0IGEgcG9zc2libGUgZXhlY3V0aW5nIEVDQiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYyXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FTkRFQ0I7ICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0IgYmxvY2sgZW5jcnlwdCBjb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19FUlJPUkVDQjsgICAgICAgICAgICAgICAgICAgLyohPCBFQ0IgYmxvY2sgZW5jcnlwdCBhYm9ydGVkIGJlY2F1c2Ugb2YgYSBTVE9QRUNCIHRhc2sgb3IgZHVlIHRvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTI3XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMjZdOw0KKyAgX19JTyB1aW50MzJfdCAgRUNCREFUQVBUUjsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQiBibG9jayBlbmNyeXB0IG1lbW9yeSBwb2ludGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0VDQl9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgQ0NNICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQUVTIENDTSBNb2RlIEVuY3J5cHRpb24gKENDTSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0NNIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19LU0dFTjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgZ2VuZXJhdGlvbiBvZiBrZXktc3RyZWFtLiBUaGlzIG9wZXJhdGlvbiB3aWxsIHN0b3AgYnkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYgd2hlbiBjb21wbGV0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0NSWVBUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uIFRoaXMgb3BlcmF0aW9uIHdpbGwgc3RvcCBieSBpdHNlbGYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGNvbXBsZXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIGVuY3J5cHRpb24vZGVjcnlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1JBVEVPVkVSUklERTsgICAgICAgICAgICAgICAgLyohPCBPdmVycmlkZSBEQVRBUkFURSBzZXR0aW5nIGluIE1PREUgcmVnaXN0ZXIgd2l0aCB0aGUgY29udGVudHMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgUkFURU9WRVJSSURFIHJlZ2lzdGVyIGZvciBhbnkgb25nb2luZyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2MF07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5ES1NHRU47ICAgICAgICAgICAgICAgICAgIC8qITwgS2V5LXN0cmVhbSBnZW5lcmF0aW9uIGNvbXBsZXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EQ1JZUFQ7ICAgICAgICAgICAgICAgICAgIC8qITwgRW5jcnlwdC9kZWNyeXB0IGNvbXBsZXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVJST1I7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVwcmVjYXRlZCByZWdpc3RlciAtIENDTSBlcnJvciBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNjFdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzY0XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2MV07DQorICBfX0kgIHVpbnQzMl90ICBNSUNTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTUlDIGNoZWNrIHJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9wZXJhdGlvbiBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ05GUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyBBRVMga2V5IGFuZCBOT05DRSB2ZWN0b3IgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5QVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElucHV0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgT1VUUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE91dHB1dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0NSQVRDSFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gZGF0YSBhcmVhIHVzZWQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTUFYUEFDS0VUU0laRTsgICAgICAgICAgICAgICAgICAgICAvKiE8IExlbmd0aCBvZiBrZXktc3RyZWFtIGdlbmVyYXRlZCB3aGVuIE1PREUuTEVOR1RIID0gRXh0ZW5kZWQuICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkFURU9WRVJSSURFOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgcmF0ZSBvdmVycmlkZSBzZXR0aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0NDTV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgQUFSICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQWNjZWxlcmF0ZWQgQWRkcmVzcyBSZXNvbHZlciAoQUFSKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQVIgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCByZXNvbHZpbmcgYWRkcmVzc2VzIGJhc2VkIG9uIElSS3Mgc3BlY2lmaWVkIGluIHRoZSBJUksNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMDsNCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIHJlc29sdmluZyBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs2MV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyByZXNvbHV0aW9uIHByb2NlZHVyZSBjb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVTT0xWRUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyByZXNvbHZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfTk9UUkVTT0xWRUQ7ICAgICAgICAgICAgICAgIC8qITwgQWRkcmVzcyBub3QgcmVzb2x2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTI2XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2MV07DQorICBfX0kgIHVpbnQzMl90ICBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzb2x1dGlvbiBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBBQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTklSSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBJUktzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSVJLUFRSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gSVJLIGRhdGEgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1Ow0KKyAgX19JTyB1aW50MzJfdCAgQUREUlBUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gdGhlIHJlc29sdmFibGUgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgU0NSQVRDSFBUUjsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gZGF0YSBhcmVhIHVzZWQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0FBUl9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgV0RUICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgV2F0Y2hkb2cgVGltZXIgKFdEVCkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RUIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19TVEFSVDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdGhlIHdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RJTUVPVVQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFdhdGNoZG9nIHRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzEyOF07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNjFdOw0KKyAgX19JICB1aW50MzJfdCAgUlVOU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJ1biBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVRU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlcXVlc3Qgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIENSVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3VudGVyIHJlbG9hZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJSRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgcmVnaXN0ZXIgZm9yIHJlbG9hZCByZXF1ZXN0IHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENPTkZJRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs2MF07DQorICBfX08gIHVpbnQzMl90ICBSUls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogUmVsb2FkIHJlcXVlc3QgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfV0RUX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFFERUMgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBRdWFkcmF0dXJlIERlY29kZXIgKFFERUMpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFERUMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRhc2sgc3RhcnRpbmcgdGhlIHF1YWRyYXR1cmUgZGVjb2RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRhc2sgc3RvcHBpbmcgdGhlIHF1YWRyYXR1cmUgZGVjb2RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkVBRENMUkFDQzsgICAgICAgICAgICAgICAgICAvKiE8IFJlYWQgYW5kIGNsZWFyIEFDQyBhbmQgQUNDREJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkRDTFJBQ0M7ICAgICAgICAgICAgICAgICAgICAvKiE8IFJlYWQgYW5kIGNsZWFyIEFDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfUkRDTFJEQkw7ICAgICAgICAgICAgICAgICAgICAvKiE8IFJlYWQgYW5kIGNsZWFyIEFDQ0RCTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzU5XTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TQU1QTEVSRFk7ICAgICAgICAgICAgICAgICAgLyohPCBFdmVudCBiZWluZyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyBzYW1wbGUgdmFsdWUgd3JpdHRlbiB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTQU1QTEUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFUE9SVFJEWTsgICAgICAgICAgICAgICAgICAvKiE8IE5vbi1udWxsIHJlcG9ydCByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0FDQ09GOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDQyBvciBBQ0NEQkwgcmVnaXN0ZXIgb3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0RCTFJEWTsgICAgICAgICAgICAgICAgICAgICAvKiE8IERvdWJsZSBkaXNwbGFjZW1lbnQocykgZGV0ZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUT1BQRUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IFFERUMgaGFzIGJlZW4gc3RvcHBlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzU5XTsNCisgIF9fSU8gdWludDMyX3QgIFNIT1JUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaG9ydGN1dCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMls2NF07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMTI1XTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgdGhlIHF1YWRyYXR1cmUgZGVjb2RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIExFRFBPTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMRUQgb3V0cHV0IHBpbiBwb2xhcml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFNBTVBMRVBFUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGUgcGVyaW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgaW50MzJfdCAgIFNBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNb3Rpb24gc2FtcGxlIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJFUE9SVFBFUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2Ygc2FtcGxlcyB0byBiZSB0YWtlbiBiZWZvcmUgUkVQT1JUUkRZIGFuZCBEQkxSRFkgZXZlbnRzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGdlbmVyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIGludDMyX3QgICBBQ0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVnaXN0ZXIgYWNjdW11bGF0aW5nIHRoZSB2YWxpZCB0cmFuc2l0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIGludDMyX3QgICBBQ0NSRUFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU25hcHNob3Qgb2YgdGhlIEFDQyByZWdpc3RlciwgdXBkYXRlZCBieSB0aGUgUkVBRENMUkFDQyBvciBSRENMUkFDQw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgUURFQ19QU0VMX1R5cGUgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgREJGRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnB1dCBkZWJvdW5jZSBmaWx0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzVdOw0KKyAgX19JTyB1aW50MzJfdCAgTEVEUFJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRpbWUgcGVyaW9kIHRoZSBMRUQgaXMgc3dpdGNoZWQgT04gcHJpb3IgdG8gc2FtcGxpbmcgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQUNDREJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZ2lzdGVyIGFjY3VtdWxhdGluZyB0aGUgbnVtYmVyIG9mIGRldGVjdGVkIGRvdWJsZSB0cmFuc2l0aW9ucyAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgQUNDREJMUkVBRDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNuYXBzaG90IG9mIHRoZSBBQ0NEQkwsIHVwZGF0ZWQgYnkgdGhlIFJFQURDTFJBQ0Mgb3IgUkRDTFJEQkwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9RREVDX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIENPTVAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBDb21wYXJhdG9yIChDT01QKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT01QIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBjb21wYXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wIGNvbXBhcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NBTVBMRTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGUgY29tcGFyYXRvciB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2MV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUkVBRFk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09NUCBpcyByZWFkeSBhbmQgb3V0cHV0IGlzIHZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRE9XTjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRG93bndhcmQgY3Jvc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVXB3YXJkIGNyb3NzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfQ1JPU1M7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgRG93bndhcmQgb3IgdXB3YXJkIGNyb3NzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNjBdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s2MV07DQorICBfX0kgIHVpbnQzMl90ICBSRVNVTFQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29tcGFyZSByZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbNjNdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTVAgZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFNFTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBpbiBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkVGU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZmVyZW5jZSBzb3VyY2Ugc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVhUUkVGU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEV4dGVybmFsIHJlZmVyZW5jZSBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzhdOw0KKyAgX19JTyB1aW50MzJfdCAgVEg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRocmVzaG9sZCBjb25maWd1cmF0aW9uIGZvciBoeXN0ZXJlc2lzIHVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1vZGUgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSFlTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbXBhcmF0b3IgaHlzdGVyZXNpcyBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSVNPVVJDRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEN1cnJlbnQgc291cmNlIHNlbGVjdCBvbiBhbmFsb2cgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0NPTVBfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICBMUENPTVAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIExvdyBQb3dlciBDb21wYXJhdG9yIChMUENPTVApDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExQQ09NUCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXJ0IGNvbXBhcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3AgY29tcGFyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU0FNUExFOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNhbXBsZSBjb21wYXJhdG9yIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzYxXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19SRUFEWTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBMUENPTVAgaXMgcmVhZHkgYW5kIG91dHB1dCBpcyB2YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19ET1dOOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEb3dud2FyZCBjcm9zc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19VUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVcHdhcmQgY3Jvc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19DUk9TUzsgICAgICAgICAgICAgICAgICAgICAgLyohPCBEb3dud2FyZCBvciB1cHdhcmQgY3Jvc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs2MF07DQorICBfX0lPIHVpbnQzMl90ICBTSE9SVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2hvcnRjdXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYxXTsNCisgIF9fSSAgdWludDMyX3QgIFJFU1VMVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb21wYXJlIHJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs2M107DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIExQQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW5wdXQgcGluIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBSRUZTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVmZXJlbmNlIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFWFRSRUZTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgcmVmZXJlbmNlIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNF07DQorICBfX0lPIHVpbnQzMl90ICBBTkFERVRFQ1Q7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQW5hbG9nIGRldGVjdCBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbNV07DQorICBfX0lPIHVpbnQzMl90ICBIWVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29tcGFyYXRvciBoeXN0ZXJlc2lzIGVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfTFBDT01QX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBTV0kgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBTb2Z0d2FyZSBpbnRlcnJ1cHQgMCAoU1dJKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTV0kgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFVOVVNFRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9TV0lfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIEVHVSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEV2ZW50IEdlbmVyYXRvciBVbml0IDAgKEVHVSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRUdVIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19UUklHR0VSWzE2XTsgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVHJpZ2dlciAwIGZvciB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJJR0dFUkVEWzBdIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNDhdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1RSSUdHRVJFRFsxNl07ICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IEV2ZW50IG51bWJlciAwIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlswXSB0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTEyXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9FR1VfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFBXTSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gVW5pdCAwIChQV00pDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBXTSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3BzIFBXTSBwdWxzZSBnZW5lcmF0aW9uIG9uIGFsbCBjaGFubmVscyBhdCB0aGUgZW5kIG9mIGN1cnJlbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV00gcGVyaW9kLCBhbmQgc3RvcHMgc2VxdWVuY2UgcGxheWJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NFUVNUQVJUWzJdOyAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBMb2FkcyB0aGUgZmlyc3QgUFdNIHZhbHVlIG9uIGFsbA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgY2hhbm5lbHMgZnJvbSBzZXF1ZW5jZSAwLCBhbmQgc3RhcnRzIHBsYXlpbmcgdGhhdCBzZXF1ZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgcmF0ZSBkZWZpbmVkIGluIFNFUVswXVJFRlJFU0ggYW5kL29yIERFQ09ERVIuTU9ERS4gQ2F1c2VzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXTSBnZW5lcmF0aW9uIHRvIHN0YXJ0IGl0IHdhcyBub3QgcnVubmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19ORVhUU1RFUDsgICAgICAgICAgICAgICAgICAgIC8qITwgU3RlcHMgYnkgb25lIHZhbHVlIGluIHRoZSBjdXJyZW50IHNlcXVlbmNlIG9uIGFsbCBlbmFibGVkIGNoYW5uZWxzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgREVDT0RFUi5NT0RFPU5leHRTdGVwLiBEb2VzIG5vdCBjYXVzZSBQV00gZ2VuZXJhdGlvbiB0byBzdGFydA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3YXMgbm90IHJ1bm5pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzYwXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TVE9QUEVEOyAgICAgICAgICAgICAgICAgICAgLyohPCBSZXNwb25zZSB0byBTVE9QIHRhc2ssIGVtaXR0ZWQgd2hlbiBQV00gcHVsc2VzIGFyZSBubyBsb25nZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TRVFTVEFSVEVEWzJdOyAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBGaXJzdCBQV00gcGVyaW9kIHN0YXJ0ZWQgb24gc2VxdWVuY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TRVFFTkRbMl07ICAgICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBFbWl0dGVkIGF0IGVuZCBvZiBldmVyeSBzZXF1ZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHdoZW4gbGFzdCB2YWx1ZSBmcm9tIFJBTSBoYXMgYmVlbiBhcHBsaWVkIHRvIHdhdmUgY291bnRlciAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1BXTVBFUklPREVORDsgICAgICAgICAgICAgICAvKiE8IEVtaXR0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIFBXTSBwZXJpb2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0xPT1BTRE9ORTsgICAgICAgICAgICAgICAgICAvKiE8IENvbmNhdGVuYXRlZCBzZXF1ZW5jZXMgaGF2ZSBiZWVuIHBsYXllZCB0aGUgYW1vdW50IG9mIHRpbWVzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBpbiBMT09QLkNOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbNTZdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFsxMjVdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBXTSBtb2R1bGUgZW5hYmxlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdHMgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIHdhdmUgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgQ09VTlRFUlRPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFZhbHVlIHVwIHRvIHdoaWNoIHRoZSBwdWxzZSBnZW5lcmF0b3IgY291bnRlciBjb3VudHMgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUFJFU0NBTEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gZm9yIFBXTV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgREVDT0RFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gb2YgdGhlIGRlY29kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgTE9PUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFtb3VudCBvZiBwbGF5YmFjayBvZiBhIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzJdOw0KKyAgUFdNX1NFUV9UeXBlIFNFUVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgUFdNX1BTRUxfVHlwZSBQU0VMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1BXTV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgUERNICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgUHVsc2UgRGVuc2l0eSBNb2R1bGF0aW9uIChEaWdpdGFsIE1pY3JvcGhvbmUpIEludGVyZmFjZSAoUERNKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE0gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydHMgY29udGludW91cyBQRE0gdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUT1A7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdG9wcyBQRE0gdHJhbnNmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2Ml07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RBUlRFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgUERNIHRyYW5zZmVyIGhhcyBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RPUFBFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgUERNIHRyYW5zZmVyIGhhcyBmaW5pc2hlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5EOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIFBETSBoYXMgd3JpdHRlbiB0aGUgbGFzdCBzYW1wbGUgc3BlY2lmaWVkIGJ5IFNBTVBMRS5NQVhDTlQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGxhc3Qgc2FtcGxlIGFmdGVyIGEgU1RPUCB0YXNrIGhhcyBiZWVuIHJlY2VpdmVkKSB0bw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzEyNV07DQorICBfX0lPIHVpbnQzMl90ICBJTlRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJTlRFTkNMUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTI1XTsNCisgIF9fSU8gdWludDMyX3QgIEVOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE0gbW9kdWxlIGVuYWJsZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFBETUNMS0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQRE0gY2xvY2sgZ2VuZXJhdG9yIGNvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE1PREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZWZpbmVzIHRoZSByb3V0aW5nIG9mIHRoZSBjb25uZWN0ZWQgUERNIG1pY3JvcGhvbmVzJyBzaWduYWxzICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1szXTsNCisgIF9fSU8gdWludDMyX3QgIEdBSU5MOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMZWZ0IG91dHB1dCBnYWluIGFkanVzdG1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEdBSU5SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSaWdodCBvdXRwdXQgZ2FpbiBhZGp1c3RtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFJBVElPOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3RzIHRoZSByYXRpbyBiZXR3ZWVuIFBETV9DTEsgYW5kIG91dHB1dCBzYW1wbGUgcmF0ZS4gQ2hhbmdlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUERNQ0xLQ1RSTCBhY2NvcmRpbmdseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbN107DQorICBQRE1fUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNl07DQorICBQRE1fU0FNUExFX1R5cGUgU0FNUExFOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUERNX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIE5WTUMgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBOb24gVm9sYXRpbGUgTWVtb3J5IENvbnRyb2xsZXIgKE5WTUMpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5WTUMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzI1Nl07DQorICBfX0kgIHVpbnQzMl90ICBSRUFEWTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVhZHkgZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKw0KKyAgX19JTyB1aW50MzJfdCAgRVJBU0VQQUdFOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZ2lzdGVyIGZvciBlcmFzaW5nIGEgcGFnZSBpbiBDb2RlIGFyZWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVJBU0VBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZ2lzdGVyIGZvciBlcmFzaW5nIGFsbCBub24tdm9sYXRpbGUgdXNlciBtZW1vcnkgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVJBU0VQQ1IwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlcHJlY2F0ZWQgcmVnaXN0ZXIgLSBSZWdpc3RlciBmb3IgZXJhc2luZyBhIHBhZ2UgaW4gQ29kZSBhcmVhLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRVJBU0VQQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVJBU0VVSUNSOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJlZ2lzdGVyIGZvciBlcmFzaW5nIFVzZXIgSW5mb3JtYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzEwXTsNCisgIF9fSU8gdWludDMyX3QgIElDQUNIRUNORjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJLUNvZGUgY2FjaGUgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzsNCisgIF9fSU8gdWludDMyX3QgIElISVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJLUNvZGUgY2FjaGUgaGl0IGNvdW50ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElNSVNTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJLUNvZGUgY2FjaGUgbWlzcyBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9OVk1DX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBBQ0wgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBBY2Nlc3MgY29udHJvbCBsaXN0cyAoQUNMKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ0wgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs0NDldOw0KKyAgX19JTyB1aW50MzJfdCAgRElTQUJMRUlOREVCVUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgYWxsIEFDTCBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgZm9yIHJlZ2lvbnMgd2hpbGUgaW4gZGVidWcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVs2Ml07DQorICBBQ0xfQUNMX1R5cGUgQUNMWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfQUNMX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBQUEkgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBQcm9ncmFtbWFibGUgUGVyaXBoZXJhbCBJbnRlcmNvbm5lY3QgKFBQSSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUFBJIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQUElfVEFTS1NfQ0hHX1R5cGUgVEFTS1NfQ0hHWzZdOyAgICAgICAgICAgICAgICAgIC8qITwgQ2hhbm5lbCBncm91cCB0YXNrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbMzA4XTsNCisgIF9fSU8gdWludDMyX3QgIENIRU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFubmVsIGVuYWJsZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENIRU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFubmVsIGVuYWJsZSBzZXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIENIRU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDaGFubmVsIGVuYWJsZSBjbGVhciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTsNCisgIFBQSV9DSF9UeXBlIENIWzIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQUEkgQ2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxNDhdOw0KKyAgX19JTyB1aW50MzJfdCAgQ0hHWzZdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENoYW5uZWwgZ3JvdXAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYyXTsNCisgIFBQSV9GT1JLX1R5cGUgRk9SS1szMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3JrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IE5SRl9QUElfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIE1XVSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIE1lbW9yeSBXYXRjaCBVbml0IChNV1UpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1XVSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzY0XTsNCisgIE1XVV9FVkVOVFNfUkVHSU9OX1R5cGUgRVZFTlRTX1JFR0lPTls0XTsgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsxNl07DQorICBNV1VfRVZFTlRTX1BSRUdJT05fVHlwZSBFVkVOVFNfUFJFR0lPTlsyXTsgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMTAwXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s1XTsNCisgIF9fSU8gdWludDMyX3QgIE5NSUVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5NSUVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIE5NSUVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs1M107DQorICBNV1VfUEVSUkVHSU9OX1R5cGUgUEVSUkVHSU9OWzJdOyAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNjRdOw0KKyAgX19JTyB1aW50MzJfdCAgUkVHSU9ORU47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZS9kaXNhYmxlIHJlZ2lvbnMgd2F0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkVHSU9ORU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSByZWdpb25zIHdhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgUkVHSU9ORU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgcmVnaW9ucyB3YXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzU3XTsNCisgIE1XVV9SRUdJT05fVHlwZSBSRUdJT05bNF07ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1szMl07DQorICBNV1VfUFJFR0lPTl9UeXBlIFBSRUdJT05bMl07ICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfTVdVX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBJMlMgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBJbnRlci1JQyBTb3VuZCAoSTJTKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJMlMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydHMgY29udGludW91cyBJMlMgdHJhbnNmZXIuIEFsc28gc3RhcnRzIE1DSyBnZW5lcmF0b3Igd2hlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgZW5hYmxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RPUDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0b3BzIEkyUyB0cmFuc2Zlci4gQWxzbyBzdG9wcyBNQ0sgZ2VuZXJhdG9yLiBUcmlnZ2VyaW5nIHRoaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHdpbGwgY2F1c2UgdGhlIHtldmVudDpTVE9QUEVEfSBldmVudCB0byBiZSBnZW5lcmF0ZWQuICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFs2M107DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfUlhQVFJVUEQ7ICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIFJYRC5QVFIgcmVnaXN0ZXIgaGFzIGJlZW4gY29waWVkIHRvIGludGVybmFsIGRvdWJsZS1idWZmZXJzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIEkyUyBtb2R1bGUgaXMgc3RhcnRlZCBhbmQgUlggaXMgZW5hYmxlZCwgdGhpcyBldmVudA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZXZlcnkgUlhUWEQuTUFYQ05UIHdvcmRzIHRoYXQgYXJlIHJlY2VpdmVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBTRElOIHBpbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfU1RPUFBFRDsgICAgICAgICAgICAgICAgICAgIC8qITwgSTJTIHRyYW5zZmVyIHN0b3BwZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMl07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfVFhQVFJVUEQ7ICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIFREWC5QVFIgcmVnaXN0ZXIgaGFzIGJlZW4gY29waWVkIHRvIGludGVybmFsIGRvdWJsZS1idWZmZXJzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIEkyUyBtb2R1bGUgaXMgc3RhcnRlZCBhbmQgVFggaXMgZW5hYmxlZCwgdGhpcyBldmVudA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZXZlcnkgUlhUWEQuTUFYQ05UIHdvcmRzIHRoYXQgYXJlIHNlbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIFNET1VUIHBpbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMjJdOw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5TRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSU5URU5DTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERpc2FibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzEyNV07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIEkyUyBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBJMlNfQ09ORklHX1R5cGUgQ09ORklHOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbM107DQorICBJMlNfUlhEX1R5cGUgUlhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDU7DQorICBJMlNfVFhEX1R5cGUgVFhEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbM107DQorICBJMlNfUlhUWERfVHlwZSBSWFRYRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDdbM107DQorICBJMlNfUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfSTJTX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBGUFUgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBGUFUgKEZQVSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBVIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBVTlVTRUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfRlBVX1R5cGU7DQorDQorDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFVTQkQgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorDQorDQorLyoqDQorICAqIEBicmllZiBVbml2ZXJzYWwgU2VyaWFsIEJ1cyBkZXZpY2UgKFVTQkQpDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVTQkQgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwOw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfU1RBUlRFUElOWzhdOyAgICAgICAgICAgICAgICAvKiE8IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06IENhcHR1cmVzIHRoZSBFUElOWzBdLlBUUiwgRVBJTlswXS5NQVhDTlQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgRVBJTlswXS5DT05GSUcgcmVnaXN0ZXJzIHZhbHVlcywgYW5kIGVuYWJsZXMgZW5kcG9pbnQgSU4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB0byByZXNwb25kIHRvIHRyYWZmaWMgZnJvbSBob3N0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUSVNPSU47ICAgICAgICAgICAgICAgICAgLyohPCBDYXB0dXJlcyB0aGUgSVNPSU4uUFRSLCBJU09JTi5NQVhDTlQgYW5kIElTT0lOLkNPTkZJRyByZWdpc3RlcnMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsIGFuZCBlbmFibGVzIHNlbmRpbmcgZGF0YSBvbiBpc28gZW5kcG9pbnQgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJURVBPVVRbOF07ICAgICAgICAgICAgICAgLyohPCBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiBDYXB0dXJlcyB0aGUgRVBPVVRbMF0uUFRSLCBFUE9VVFswXS5NQVhDTlQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgRVBPVVRbMF0uQ09ORklHIHJlZ2lzdGVycyB2YWx1ZXMsIGFuZCBlbmFibGVzIGVuZHBvaW50IDANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcmVzcG9uZCB0byB0cmFmZmljIGZyb20gaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX1NUQVJUSVNPT1VUOyAgICAgICAgICAgICAgICAgLyohPCBDYXB0dXJlcyB0aGUgSVNPT1VULlBUUiwgSVNPT1VULk1BWENOVCBhbmQgSVNPT1VULkNPTkZJRyByZWdpc3RlcnMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsIGFuZCBlbmFibGVzIHJlY2VpdmluZyBvZiBkYXRhIG9uIGlzbyBlbmRwb2ludCAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0VQMFJDVk9VVDsgICAgICAgICAgICAgICAgICAgLyohPCBBbGxvd3MgT1VUIGRhdGEgc3RhZ2Ugb24gY29udHJvbCBlbmRwb2ludCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0VQMFNUQVRVUzsgICAgICAgICAgICAgICAgICAgLyohPCBBbGxvd3Mgc3RhdHVzIHN0YWdlIG9uIGNvbnRyb2wgZW5kcG9pbnQgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0VQMFNUQUxMOyAgICAgICAgICAgICAgICAgICAgLyohPCBTVEFMTHMgZGF0YSBhbmQgc3RhdHVzIHN0YWdlIG9uIGNvbnRyb2wgZW5kcG9pbnQgMCAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fTyAgdWludDMyX3QgIFRBU0tTX0RQRE1EUklWRTsgICAgICAgICAgICAgICAgICAgLyohPCBGb3JjZXMgRCsgYW5kIEQtbGluZXMgdG8gdGhlIHN0YXRlIGRlZmluZWQgaW4gdGhlIERQRE1WQUxVRQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgVEFTS1NfRFBETU5PRFJJVkU7ICAgICAgICAgICAgICAgICAvKiE8IFN0b3BzIGZvcmNpbmcgRCsgYW5kIEQtIGxpbmVzIHRvIGFueSBzdGF0ZSAoVVNCIGVuZ2luZSB0YWtlcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzQwXTsNCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19VU0JSRVNFVDsgICAgICAgICAgICAgICAgICAgLyohPCBTaWduYWxzIHRoYXQgYSBVU0IgcmVzZXQgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkIG9uIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQiBsaW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1NUQVJURUQ7ICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpcm1zIHRoYXQgdGhlIEVQSU5bbl0uUFRSLCBFUElOW25dLk1BWENOVCwgRVBJTltuXS5DT05GSUcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgRVBPVVRbbl0uUFRSLCBFUE9VVFtuXS5NQVhDTlQgYW5kIEVQT1VUW25dLkNPTkZJRyByZWdpc3RlcnMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIGNhcHR1cmVkIG9uIGFsbCBlbmRwb2ludHMgcmVwb3J0ZWQgaW4gdGhlIEVQU1RBVFVTDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5ERVBJTls4XTsgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVGhlIHdob2xlIEVQSU5bMF0gYnVmZmVyIGhhcyBiZWVuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZWQuIFRoZSBSQU0gYnVmZmVyIGNhbiBiZSBhY2Nlc3NlZCBzYWZlbHkgYnkgc29mdHdhcmUuICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVAwREFUQURPTkU7ICAgICAgICAgICAgICAgIC8qITwgQW4gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgaGFzIHRha2VuIHBsYWNlIG9uIHRoZSBjb250cm9sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5ESVNPSU47ICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIHdob2xlIElTT0lOIGJ1ZmZlciBoYXMgYmVlbiBjb25zdW1lZC4gVGhlIFJBTSBidWZmZXIgY2FuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYWNjZXNzZWQgc2FmZWx5IGJ5IHNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRU5ERVBPVVRbOF07ICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogVGhlIHdob2xlIEVQT1VUWzBdIGJ1ZmZlciBoYXMgYmVlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVkLiBUaGUgUkFNIGJ1ZmZlciBjYW4gYmUgYWNjZXNzZWQgc2FmZWx5IGJ5IHNvZnR3YXJlLiAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VORElTT09VVDsgICAgICAgICAgICAgICAgICAvKiE8IFRoZSB3aG9sZSBJU09PVVQgYnVmZmVyIGhhcyBiZWVuIGNvbnN1bWVkLiBUaGUgUkFNIGJ1ZmZlciBjYW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBhY2Nlc3NlZCBzYWZlbHkgYnkgc29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19TT0Y7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaWduYWxzIHRoYXQgYSBTT0YgKHN0YXJ0IG9mIGZyYW1lKSBjb25kaXRpb24gaGFzIGJlZW4gZGV0ZWN0ZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgVVNCIGxpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIEVWRU5UU19VU0JFVkVOVDsgICAgICAgICAgICAgICAgICAgLyohPCBBbiBldmVudCBvciBhbiBlcnJvciBub3QgY292ZXJlZCBieSBzcGVjaWZpYyBldmVudHMgaGFzIG9jY3VycmVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrIEVWRU5UQ0FVU0UgcmVnaXN0ZXIgdG8gZmluZCB0aGUgY2F1c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0VQMFNFVFVQOyAgICAgICAgICAgICAgICAgICAvKiE8IEEgdmFsaWQgU0VUVVAgdG9rZW4gaGFzIGJlZW4gcmVjZWl2ZWQgKGFuZCBhY2tub3dsZWRnZWQpIG9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRyb2wgZW5kcG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFVkVOVFNfRVBEQVRBOyAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBkYXRhIHRyYW5zZmVyIGhhcyBvY2N1cnJlZCBvbiBhIGRhdGEgZW5kcG9pbnQsIGluZGljYXRlZCBieQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFUERBVEFTVEFUVVMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX0FDQ0VTU0ZBVUxUOyAgICAgICAgICAgICAgICAvKiE8IEFjY2VzcyB0byBhbiB1bmF2YWlsYWJsZSBVU0IgcmVnaXN0ZXIgaGFzIGJlZW4gYXR0ZW1wdGVkIChzb2Z0d2FyZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEVhc3lETUEpLiBUaGlzIGV2ZW50IGNhbiBnZXQgZmlyZWQgZXZlbiB3aGVuIFVTQkQgaXMgbm90DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQUJMRWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMzhdOw0KKyAgX19JTyB1aW50MzJfdCAgU0hPUlRTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNob3J0Y3V0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzWzYzXTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFs2MV07DQorICBfX0lPIHVpbnQzMl90ICBFVkVOVENBVVNFOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGV0YWlscyBvbiBldmVudCB0aGF0IGNhdXNlZCB0aGUgVVNCRVZFTlQgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBCVVNTVEFURTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJvdmlkZXMgdGhlIGxvZ2ljIHN0YXRlIG9mIHRoZSBEKyBhbmQgRC0gbGluZXMgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbNl07DQorICBVU0JEX0hBTFRFRF9UeXBlIEhBTFRFRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVW5zcGVjaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDY7DQorICBfX0lPIHVpbnQzMl90ICBFUFNUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gd2hpY2ggZW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBjYXB0dXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBFUERBVEFTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gd2hpY2ggZW5kcG9pbnQocykgYW4gYWNrbm93bGVkZ2VkIGRhdGENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBoYXMgb2NjdXJyZWQgKEVQREFUQSBldmVudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFVTQkFERFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZXZpY2UgVVNCIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEN1szXTsNCisgIF9fSSAgdWludDMyX3QgIEJNUkVRVUVTVFRZUEU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDAsIGJtUmVxdWVzdFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIEJSRVFVRVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDEsIGJSZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFdWQUxVRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDIsIExTQiBvZiB3VmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFdWQUxVRUg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDMsIE1TQiBvZiB3VmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFdJTkRFWEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDQsIExTQiBvZiB3SW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFdJTkRFWEg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDUsIE1TQiBvZiB3SW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFdMRU5HVEhMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDYsIExTQiBvZiB3TGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFdMRU5HVEhIOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTRVRVUCBkYXRhLCBieXRlIDcsIE1TQiBvZiB3TGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVTQkRfU0laRV9UeXBlIFNJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEOFsxNV07DQorICBfX0lPIHVpbnQzMl90ICBFTkFCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIFVTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBVU0JQVUxMVVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29udHJvbCBvZiB0aGUgVVNCIHB1bGwtdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBEUERNVkFMVUU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdGUgYXQgd2hpY2ggdGhlIERQRE1EUklWRSB0YXNrIHdpbGwgZm9yY2UgRCsgYW5kIEQtLiBUaGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUERNTk9EUklWRSB0YXNrIHJldmVydHMgdGhlIGNvbnRyb2wgb2YgdGhlIGxpbmVzIHRvIE1BQyBJUA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm8gZm9yY2luZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRFRPR0dMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERhdGEgdG9nZ2xlIGNvbnRyb2wgYW5kIHN0YXR1cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVBJTkVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IElOIGVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgRVBPVVRFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IE9VVCBlbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19PICB1aW50MzJfdCAgRVBTVEFMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNUQUxMIGVuZHBvaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgSVNPU1BMSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2xzIHRoZSBzcGxpdCBvZiBJU08gYnVmZmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgRlJBTUVDTlRSOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIGZyYW1lIGNvdW50ZXIgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzNdOw0KKyAgX19JTyB1aW50MzJfdCAgSVNPSU5DT05GSUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2xzIHRoZSByZXNwb25zZSBvZiB0aGUgSVNPIElOIGVuZHBvaW50IHRvIGFuIElOIHRva2VuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBubyBkYXRhIGlzIHJlYWR5IHRvIGJlIHNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEwWzUxXTsNCisgIFVTQkRfRVBJTl9UeXBlIEVQSU5bOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVTQkRfSVNPSU5fVHlwZSBJU09JTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTFbMjFdOw0KKyAgVVNCRF9FUE9VVF9UeXBlIEVQT1VUWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVVNCRF9JU09PVVRfVHlwZSBJU09PVVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVuc3BlY2lmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX1VTQkRfVHlwZTsNCisNCisNCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgUVNQSSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisNCisNCisvKioNCisgICogQGJyaWVmIEV4dGVybmFsIGZsYXNoIGludGVyZmFjZSAoUVNQSSkNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUVNQSSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19BQ1RJVkFURTsgICAgICAgICAgICAgICAgICAgIC8qITwgQWN0aXZhdGUgUVNQSSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19SRUFEU1RBUlQ7ICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdHJhbnNmZXIgZnJvbSBleHRlcm5hbCBmbGFzaCBtZW1vcnkgdG8gaW50ZXJuYWwgUkFNICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19XUklURVNUQVJUOyAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgdHJhbnNmZXIgZnJvbSBpbnRlcm5hbCBSQU0gdG8gZXh0ZXJuYWwgZmxhc2ggbWVtb3J5ICAgICAgICAgICAgICovDQorICBfX08gIHVpbnQzMl90ICBUQVNLU19FUkFTRVNUQVJUOyAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgZXh0ZXJuYWwgZmxhc2ggbWVtb3J5IGVyYXNlIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDBbNjBdOw0KKyAgX19JTyB1aW50MzJfdCAgRVZFTlRTX1JFQURZOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUEkgcGVyaXBoZXJhbCBpcyByZWFkeS4gVGhpcyBldmVudCB3aWxsIGJlIGdlbmVyYXRlZCBhcyBhDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgdG8gYW55IFFTUEkgdGFzay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbMTI3XTsNCisgIF9fSU8gdWludDMyX3QgIElOVEVOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElOVEVOQ0xSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEaXNhYmxlIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMlsxMjVdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBRU1BJIHBlcmlwaGVyYWwgYW5kIGFjcXVpcmUgdGhlIHBpbnMgc2VsZWN0ZWQgaW4gUFNFTG4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFTUElfUkVBRF9UeXBlIFJFQUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFTUElfV1JJVEVfVHlwZSBXUklURTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFTUElfRVJBU0VfVHlwZSBFUkFTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFFTUElfUFNFTF9UeXBlIFBTRUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVbnNwZWNpZmllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIFhJUE9GRlNFVDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBZGRyZXNzIG9mZnNldCBpbnRvIHRoZSBleHRlcm5hbCBtZW1vcnkgZm9yIEV4ZWN1dGUgaW4gUGxhY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgIElGQ09ORklHMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJbnRlcmZhY2UgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1s0Nl07DQorICBfX0lPIHVpbnQzMl90ICBJRkNPTkZJRzE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhdHVzIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbM107DQorICBfX0lPIHVpbnQzMl90ICBEUE1EVVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IHRoZSBkdXJhdGlvbiByZXF1aXJlZCB0byBlbnRlci9leGl0IGRlZXAgcG93ZXItZG93biBtb2RlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERQTSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDVbM107DQorICBfX0lPIHVpbnQzMl90ICBBRERSQ09ORjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXh0ZW5kZWQgYWRkcmVzcyBjb25maWd1cmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbM107DQorICBfX0lPIHVpbnQzMl90ICBDSU5TVFJDT05GOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ3VzdG9tIGluc3RydWN0aW9uIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDSU5TVFJEQVQwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ3VzdG9tIGluc3RydWN0aW9uIGRhdGEgcmVnaXN0ZXIgMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBDSU5TVFJEQVQxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ3VzdG9tIGluc3RydWN0aW9uIGRhdGEgcmVnaXN0ZXIgMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBJRlRJTUlORzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIGludGVyZmFjZSB0aW1pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorfSBOUkZfUVNQSV9UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBHUElPICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgR1BJTyBQb3J0IDEgKEdQSU8pDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQwWzMyMV07DQorICBfX0lPIHVpbnQzMl90ICBPVVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgV3JpdGUgR1BJTyBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBPVVRTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0IGluZGl2aWR1YWwgYml0cyBpbiBHUElPIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBPVVRDTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2xlYXIgaW5kaXZpZHVhbCBiaXRzIGluIEdQSU8gcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgIHVpbnQzMl90ICBJTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVhZCBHUElPIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBESVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGlyZWN0aW9uIG9mIEdQSU8gcGlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBESVJTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRElSIHNldCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBESVJDTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRElSIGNsZWFyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICBMQVRDSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTGF0Y2ggcmVnaXN0ZXIgaW5kaWNhdGluZyB3aGF0IEdQSU8gcGlucyB0aGF0IGhhdmUgbWV0IHRoZSBjcml0ZXJpYQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBpbiB0aGUgUElOX0NORltuXS5TRU5TRSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgREVURUNUTU9ERTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCBiZXR3ZWVuIGRlZmF1bHQgREVURUNUIHNpZ25hbCBiZWhhdmlvdXIgYW5kIExERVRFQ1QgbW9kZSAgICAgICAqLw0KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzExOF07DQorICBfX0lPIHVpbnQzMl90ICBQSU5fQ05GWzMyXTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogQ29uZmlndXJhdGlvbiBvZiBHUElPIHBpbnMgICAgICAgICAgICAgICAgICovDQorfSBOUkZfR1BJT19UeXBlOw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICBDUllQVE9DRUxMICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgQVJNIENyeXB0b0NlbGwgcmVnaXN0ZXIgaW50ZXJmYWNlIChDUllQVE9DRUxMKQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDUllQVE9DRUxMIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMFszMjBdOw0KKyAgX19JTyB1aW50MzJfdCAgRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2wgcG93ZXIgYW5kIGNsb2NrIGZvciBBUk0gQ3J5cHRvQ2VsbCBzdWJzeXN0ZW0gICAgICAgICAgICAgICAgICAqLw0KK30gTlJGX0NSWVBUT0NFTExfVHlwZTsNCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgRW5kIG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQ0KKyAgI3ByYWdtYSBwb3ANCisjZWxpZiBkZWZpbmVkKF9fSUNDQVJNX18pDQorICAvKiBsZWF2ZSBhbm9ueW1vdXMgdW5pb25zIGVuYWJsZWQgKi8NCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQ0KKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovDQorI2VsaWYgZGVmaW5lZChfX1RNUzQ3MF9fKQ0KKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovDQorI2VsaWYgZGVmaW5lZChfX1RBU0tJTkdfXykNCisgICNwcmFnbWEgd2FybmluZyByZXN0b3JlDQorI2Vsc2UNCisgICN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQ0KKyNlbmRpZg0KKw0KKw0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgUGVyaXBoZXJhbCBtZW1vcnkgbWFwICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKyNkZWZpbmUgTlJGX0ZJQ1JfQkFTRSAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwVUwNCisjZGVmaW5lIE5SRl9VSUNSX0JBU0UgICAgICAgICAgICAgICAgICAgMHgxMDAwMTAwMFVMDQorI2RlZmluZSBOUkZfUE9XRVJfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDBVTA0KKyNkZWZpbmUgTlJGX0NMT0NLX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwVUwNCisjZGVmaW5lIE5SRl9SQURJT19CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwMTAwMFVMDQorI2RlZmluZSBOUkZfVUFSVEUwX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMDIwMDBVTA0KKyNkZWZpbmUgTlJGX1VBUlQwX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDAyMDAwVUwNCisjZGVmaW5lIE5SRl9TUElNMF9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwMzAwMFVMDQorI2RlZmluZSBOUkZfU1BJUzBfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDMwMDBVTA0KKyNkZWZpbmUgTlJGX1RXSU0wX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDAzMDAwVUwNCisjZGVmaW5lIE5SRl9UV0lTMF9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwMzAwMFVMDQorI2RlZmluZSBOUkZfU1BJMF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMDMwMDBVTA0KKyNkZWZpbmUgTlJGX1RXSTBfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDAzMDAwVUwNCisjZGVmaW5lIE5SRl9TUElNMV9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwNDAwMFVMDQorI2RlZmluZSBOUkZfU1BJUzFfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMDQwMDBVTA0KKyNkZWZpbmUgTlJGX1RXSU0xX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDA0MDAwVUwNCisjZGVmaW5lIE5SRl9UV0lTMV9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAwNDAwMFVMDQorI2RlZmluZSBOUkZfU1BJMV9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMDQwMDBVTA0KKyNkZWZpbmUgTlJGX1RXSTFfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDA0MDAwVUwNCisjZGVmaW5lIE5SRl9ORkNUX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAwNTAwMFVMDQorI2RlZmluZSBOUkZfR1BJT1RFX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMDYwMDBVTA0KKyNkZWZpbmUgTlJGX1NBQURDX0JBU0UgICAgICAgICAgICAgICAgICAweDQwMDA3MDAwVUwNCisjZGVmaW5lIE5SRl9USU1FUjBfQkFTRSAgICAgICAgICAgICAgICAgMHg0MDAwODAwMFVMDQorI2RlZmluZSBOUkZfVElNRVIxX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMDkwMDBVTA0KKyNkZWZpbmUgTlJGX1RJTUVSMl9CQVNFICAgICAgICAgICAgICAgICAweDQwMDBBMDAwVUwNCisjZGVmaW5lIE5SRl9SVEMwX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAwQjAwMFVMDQorI2RlZmluZSBOUkZfVEVNUF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMEMwMDBVTA0KKyNkZWZpbmUgTlJGX1JOR19CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDBEMDAwVUwNCisjZGVmaW5lIE5SRl9FQ0JfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAwRTAwMFVMDQorI2RlZmluZSBOUkZfQ0NNX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NDAwMEYwMDBVTA0KKyNkZWZpbmUgTlJGX0FBUl9CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDBGMDAwVUwNCisjZGVmaW5lIE5SRl9XRFRfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAxMDAwMFVMDQorI2RlZmluZSBOUkZfUlRDMV9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTEwMDBVTA0KKyNkZWZpbmUgTlJGX1FERUNfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDEyMDAwVUwNCisjZGVmaW5lIE5SRl9DT01QX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxMzAwMFVMDQorI2RlZmluZSBOUkZfTFBDT01QX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMTMwMDBVTA0KKyNkZWZpbmUgTlJGX1NXSTBfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE0MDAwVUwNCisjZGVmaW5lIE5SRl9FR1UwX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxNDAwMFVMDQorI2RlZmluZSBOUkZfU1dJMV9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTUwMDBVTA0KKyNkZWZpbmUgTlJGX0VHVTFfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE1MDAwVUwNCisjZGVmaW5lIE5SRl9TV0kyX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxNjAwMFVMDQorI2RlZmluZSBOUkZfRUdVMl9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTYwMDBVTA0KKyNkZWZpbmUgTlJGX1NXSTNfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE3MDAwVUwNCisjZGVmaW5lIE5SRl9FR1UzX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxNzAwMFVMDQorI2RlZmluZSBOUkZfU1dJNF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTgwMDBVTA0KKyNkZWZpbmUgTlJGX0VHVTRfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDE4MDAwVUwNCisjZGVmaW5lIE5SRl9TV0k1X0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxOTAwMFVMDQorI2RlZmluZSBOUkZfRUdVNV9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMTkwMDBVTA0KKyNkZWZpbmUgTlJGX1RJTUVSM19CQVNFICAgICAgICAgICAgICAgICAweDQwMDFBMDAwVUwNCisjZGVmaW5lIE5SRl9USU1FUjRfQkFTRSAgICAgICAgICAgICAgICAgMHg0MDAxQjAwMFVMDQorI2RlZmluZSBOUkZfUFdNMF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMUMwMDBVTA0KKyNkZWZpbmUgTlJGX1BETV9CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDFEMDAwVUwNCisjZGVmaW5lIE5SRl9OVk1DX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAxRTAwMFVMDQorI2RlZmluZSBOUkZfQUNMX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NDAwMUUwMDBVTA0KKyNkZWZpbmUgTlJGX1BQSV9CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDFGMDAwVUwNCisjZGVmaW5lIE5SRl9NV1VfQkFTRSAgICAgICAgICAgICAgICAgICAgMHg0MDAyMDAwMFVMDQorI2RlZmluZSBOUkZfUFdNMV9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMjEwMDBVTA0KKyNkZWZpbmUgTlJGX1BXTTJfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDIyMDAwVUwNCisjZGVmaW5lIE5SRl9TUElNMl9CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAyMzAwMFVMDQorI2RlZmluZSBOUkZfU1BJUzJfQkFTRSAgICAgICAgICAgICAgICAgIDB4NDAwMjMwMDBVTA0KKyNkZWZpbmUgTlJGX1NQSTJfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDIzMDAwVUwNCisjZGVmaW5lIE5SRl9SVEMyX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAyNDAwMFVMDQorI2RlZmluZSBOUkZfSTJTX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NDAwMjUwMDBVTA0KKyNkZWZpbmUgTlJGX0ZQVV9CQVNFICAgICAgICAgICAgICAgICAgICAweDQwMDI2MDAwVUwNCisjZGVmaW5lIE5SRl9VU0JEX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MDAyNzAwMFVMDQorI2RlZmluZSBOUkZfVUFSVEUxX0JBU0UgICAgICAgICAgICAgICAgIDB4NDAwMjgwMDBVTA0KKyNkZWZpbmUgTlJGX1FTUElfQkFTRSAgICAgICAgICAgICAgICAgICAweDQwMDI5MDAwVUwNCisjZGVmaW5lIE5SRl9TUElNM19CQVNFICAgICAgICAgICAgICAgICAgMHg0MDAyQjAwMFVMDQorI2RlZmluZSBOUkZfUFdNM19CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMkQwMDBVTA0KKyNkZWZpbmUgTlJGX1AwX0JBU0UgICAgICAgICAgICAgICAgICAgICAweDUwMDAwMDAwVUwNCisjZGVmaW5lIE5SRl9QMV9CQVNFICAgICAgICAgICAgICAgICAgICAgMHg1MDAwMDMwMFVMDQorI2RlZmluZSBOUkZfQ1JZUFRPQ0VMTF9CQVNFICAgICAgICAgICAgIDB4NTAwMkEwMDBVTA0KKw0KKw0KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQorLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICBQZXJpcGhlcmFsIGRlY2xhcmF0aW9uICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8NCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KKw0KKyNkZWZpbmUgTlJGX0ZJQ1IgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9GSUNSX1R5cGUgICAgICAgICAgICopIE5SRl9GSUNSX0JBU0UpDQorI2RlZmluZSBOUkZfVUlDUiAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1VJQ1JfVHlwZSAgICAgICAgICAgKikgTlJGX1VJQ1JfQkFTRSkNCisjZGVmaW5lIE5SRl9QT1dFUiAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUE9XRVJfVHlwZSAgICAgICAgICAqKSBOUkZfUE9XRVJfQkFTRSkNCisjZGVmaW5lIE5SRl9DTE9DSyAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfQ0xPQ0tfVHlwZSAgICAgICAgICAqKSBOUkZfQ0xPQ0tfQkFTRSkNCisjZGVmaW5lIE5SRl9SQURJTyAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUkFESU9fVHlwZSAgICAgICAgICAqKSBOUkZfUkFESU9fQkFTRSkNCisjZGVmaW5lIE5SRl9VQVJURTAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVUFSVEVfVHlwZSAgICAgICAgICAqKSBOUkZfVUFSVEUwX0JBU0UpDQorI2RlZmluZSBOUkZfVUFSVDAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1VBUlRfVHlwZSAgICAgICAgICAgKikgTlJGX1VBUlQwX0JBU0UpDQorI2RlZmluZSBOUkZfU1BJTTAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NQSU1fVHlwZSAgICAgICAgICAgKikgTlJGX1NQSU0wX0JBU0UpDQorI2RlZmluZSBOUkZfU1BJUzAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NQSVNfVHlwZSAgICAgICAgICAgKikgTlJGX1NQSVMwX0JBU0UpDQorI2RlZmluZSBOUkZfVFdJTTAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RXSU1fVHlwZSAgICAgICAgICAgKikgTlJGX1RXSU0wX0JBU0UpDQorI2RlZmluZSBOUkZfVFdJUzAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RXSVNfVHlwZSAgICAgICAgICAgKikgTlJGX1RXSVMwX0JBU0UpDQorI2RlZmluZSBOUkZfU1BJMCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NQSV9UeXBlICAgICAgICAgICAgKikgTlJGX1NQSTBfQkFTRSkNCisjZGVmaW5lIE5SRl9UV0kwICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVFdJX1R5cGUgICAgICAgICAgICAqKSBOUkZfVFdJMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSU0xICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElNX1R5cGUgICAgICAgICAgICopIE5SRl9TUElNMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSVMxICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElTX1R5cGUgICAgICAgICAgICopIE5SRl9TUElTMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RXSU0xICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9UV0lNX1R5cGUgICAgICAgICAgICopIE5SRl9UV0lNMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RXSVMxICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9UV0lTX1R5cGUgICAgICAgICAgICopIE5SRl9UV0lTMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSTEgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElfVHlwZSAgICAgICAgICAgICopIE5SRl9TUEkxX0JBU0UpDQorI2RlZmluZSBOUkZfVFdJMSAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RXSV9UeXBlICAgICAgICAgICAgKikgTlJGX1RXSTFfQkFTRSkNCisjZGVmaW5lIE5SRl9ORkNUICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfTkZDVF9UeXBlICAgICAgICAgICAqKSBOUkZfTkZDVF9CQVNFKQ0KKyNkZWZpbmUgTlJGX0dQSU9URSAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9HUElPVEVfVHlwZSAgICAgICAgICopIE5SRl9HUElPVEVfQkFTRSkNCisjZGVmaW5lIE5SRl9TQUFEQyAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU0FBRENfVHlwZSAgICAgICAgICAqKSBOUkZfU0FBRENfQkFTRSkNCisjZGVmaW5lIE5SRl9USU1FUjAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVElNRVJfVHlwZSAgICAgICAgICAqKSBOUkZfVElNRVIwX0JBU0UpDQorI2RlZmluZSBOUkZfVElNRVIxICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RJTUVSX1R5cGUgICAgICAgICAgKikgTlJGX1RJTUVSMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RJTUVSMiAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9USU1FUl9UeXBlICAgICAgICAgICopIE5SRl9USU1FUjJfQkFTRSkNCisjZGVmaW5lIE5SRl9SVEMwICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUlRDX1R5cGUgICAgICAgICAgICAqKSBOUkZfUlRDMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1RFTVAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9URU1QX1R5cGUgICAgICAgICAgICopIE5SRl9URU1QX0JBU0UpDQorI2RlZmluZSBOUkZfUk5HICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1JOR19UeXBlICAgICAgICAgICAgKikgTlJGX1JOR19CQVNFKQ0KKyNkZWZpbmUgTlJGX0VDQiAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9FQ0JfVHlwZSAgICAgICAgICAgICopIE5SRl9FQ0JfQkFTRSkNCisjZGVmaW5lIE5SRl9DQ00gICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfQ0NNX1R5cGUgICAgICAgICAgICAqKSBOUkZfQ0NNX0JBU0UpDQorI2RlZmluZSBOUkZfQUFSICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0FBUl9UeXBlICAgICAgICAgICAgKikgTlJGX0FBUl9CQVNFKQ0KKyNkZWZpbmUgTlJGX1dEVCAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9XRFRfVHlwZSAgICAgICAgICAgICopIE5SRl9XRFRfQkFTRSkNCisjZGVmaW5lIE5SRl9SVEMxICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUlRDX1R5cGUgICAgICAgICAgICAqKSBOUkZfUlRDMV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1FERUMgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9RREVDX1R5cGUgICAgICAgICAgICopIE5SRl9RREVDX0JBU0UpDQorI2RlZmluZSBOUkZfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0NPTVBfVHlwZSAgICAgICAgICAgKikgTlJGX0NPTVBfQkFTRSkNCisjZGVmaW5lIE5SRl9MUENPTVAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfTFBDT01QX1R5cGUgICAgICAgICAqKSBOUkZfTFBDT01QX0JBU0UpDQorI2RlZmluZSBOUkZfU1dJMCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NXSV9UeXBlICAgICAgICAgICAgKikgTlJGX1NXSTBfQkFTRSkNCisjZGVmaW5lIE5SRl9FR1UwICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRUdVX1R5cGUgICAgICAgICAgICAqKSBOUkZfRUdVMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NXSTEgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TV0lfVHlwZSAgICAgICAgICAgICopIE5SRl9TV0kxX0JBU0UpDQorI2RlZmluZSBOUkZfRUdVMSAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0VHVV9UeXBlICAgICAgICAgICAgKikgTlJGX0VHVTFfQkFTRSkNCisjZGVmaW5lIE5SRl9TV0kyICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1dJX1R5cGUgICAgICAgICAgICAqKSBOUkZfU1dJMl9CQVNFKQ0KKyNkZWZpbmUgTlJGX0VHVTIgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9FR1VfVHlwZSAgICAgICAgICAgICopIE5SRl9FR1UyX0JBU0UpDQorI2RlZmluZSBOUkZfU1dJMyAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1NXSV9UeXBlICAgICAgICAgICAgKikgTlJGX1NXSTNfQkFTRSkNCisjZGVmaW5lIE5SRl9FR1UzICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfRUdVX1R5cGUgICAgICAgICAgICAqKSBOUkZfRUdVM19CQVNFKQ0KKyNkZWZpbmUgTlJGX1NXSTQgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TV0lfVHlwZSAgICAgICAgICAgICopIE5SRl9TV0k0X0JBU0UpDQorI2RlZmluZSBOUkZfRUdVNCAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0VHVV9UeXBlICAgICAgICAgICAgKikgTlJGX0VHVTRfQkFTRSkNCisjZGVmaW5lIE5SRl9TV0k1ICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1dJX1R5cGUgICAgICAgICAgICAqKSBOUkZfU1dJNV9CQVNFKQ0KKyNkZWZpbmUgTlJGX0VHVTUgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9FR1VfVHlwZSAgICAgICAgICAgICopIE5SRl9FR1U1X0JBU0UpDQorI2RlZmluZSBOUkZfVElNRVIzICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1RJTUVSX1R5cGUgICAgICAgICAgKikgTlJGX1RJTUVSM19CQVNFKQ0KKyNkZWZpbmUgTlJGX1RJTUVSNCAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9USU1FUl9UeXBlICAgICAgICAgICopIE5SRl9USU1FUjRfQkFTRSkNCisjZGVmaW5lIE5SRl9QV00wICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUFdNX1R5cGUgICAgICAgICAgICAqKSBOUkZfUFdNMF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1BETSAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9QRE1fVHlwZSAgICAgICAgICAgICopIE5SRl9QRE1fQkFTRSkNCisjZGVmaW5lIE5SRl9OVk1DICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfTlZNQ19UeXBlICAgICAgICAgICAqKSBOUkZfTlZNQ19CQVNFKQ0KKyNkZWZpbmUgTlJGX0FDTCAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9BQ0xfVHlwZSAgICAgICAgICAgICopIE5SRl9BQ0xfQkFTRSkNCisjZGVmaW5lIE5SRl9QUEkgICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUFBJX1R5cGUgICAgICAgICAgICAqKSBOUkZfUFBJX0JBU0UpDQorI2RlZmluZSBOUkZfTVdVICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX01XVV9UeXBlICAgICAgICAgICAgKikgTlJGX01XVV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1BXTTEgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9QV01fVHlwZSAgICAgICAgICAgICopIE5SRl9QV00xX0JBU0UpDQorI2RlZmluZSBOUkZfUFdNMiAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX1BXTV9UeXBlICAgICAgICAgICAgKikgTlJGX1BXTTJfQkFTRSkNCisjZGVmaW5lIE5SRl9TUElNMiAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJTV9UeXBlICAgICAgICAgICAqKSBOUkZfU1BJTTJfQkFTRSkNCisjZGVmaW5lIE5SRl9TUElTMiAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJU19UeXBlICAgICAgICAgICAqKSBOUkZfU1BJUzJfQkFTRSkNCisjZGVmaW5lIE5SRl9TUEkyICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfU1BJX1R5cGUgICAgICAgICAgICAqKSBOUkZfU1BJMl9CQVNFKQ0KKyNkZWZpbmUgTlJGX1JUQzIgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9SVENfVHlwZSAgICAgICAgICAgICopIE5SRl9SVEMyX0JBU0UpDQorI2RlZmluZSBOUkZfSTJTICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0kyU19UeXBlICAgICAgICAgICAgKikgTlJGX0kyU19CQVNFKQ0KKyNkZWZpbmUgTlJGX0ZQVSAgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9GUFVfVHlwZSAgICAgICAgICAgICopIE5SRl9GUFVfQkFTRSkNCisjZGVmaW5lIE5SRl9VU0JEICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfVVNCRF9UeXBlICAgICAgICAgICAqKSBOUkZfVVNCRF9CQVNFKQ0KKyNkZWZpbmUgTlJGX1VBUlRFMSAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9VQVJURV9UeXBlICAgICAgICAgICopIE5SRl9VQVJURTFfQkFTRSkNCisjZGVmaW5lIE5SRl9RU1BJICAgICAgICAgICAgICAgICAgICAgICAgKChOUkZfUVNQSV9UeXBlICAgICAgICAgICAqKSBOUkZfUVNQSV9CQVNFKQ0KKyNkZWZpbmUgTlJGX1NQSU0zICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9TUElNX1R5cGUgICAgICAgICAgICopIE5SRl9TUElNM19CQVNFKQ0KKyNkZWZpbmUgTlJGX1BXTTMgICAgICAgICAgICAgICAgICAgICAgICAoKE5SRl9QV01fVHlwZSAgICAgICAgICAgICopIE5SRl9QV00zX0JBU0UpDQorI2RlZmluZSBOUkZfUDAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0dQSU9fVHlwZSAgICAgICAgICAgKikgTlJGX1AwX0JBU0UpDQorI2RlZmluZSBOUkZfUDEgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlJGX0dQSU9fVHlwZSAgICAgICAgICAgKikgTlJGX1AxX0JBU0UpDQorI2RlZmluZSBOUkZfQ1JZUFRPQ0VMTCAgICAgICAgICAgICAgICAgICgoTlJGX0NSWVBUT0NFTExfVHlwZSAgICAgKikgTlJGX0NSWVBUT0NFTExfQkFTRSkNCisNCisNCisvKiogQH0gKi8gLyogRW5kIG9mIGdyb3VwIERldmljZV9QZXJpcGhlcmFsX1JlZ2lzdGVycyAqLw0KKy8qKiBAfSAqLyAvKiBFbmQgb2YgZ3JvdXAgbnJmNTI4NDAgKi8NCisvKiogQH0gKi8gLyogRW5kIG9mIGdyb3VwIE5vcmRpYyBTZW1pY29uZHVjdG9yICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKw0KKyNlbmRpZiAgLyogbnJmNTI4NDBfSCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX2JpdGZpZWxkcy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTI4NDBfYml0ZmllbGRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmMWEwYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX2JpdGZpZWxkcy5oCkBAIC0wLDAgKzEsMTQ2MzMgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIF9fTlJGNTI4NDBfQklUU19IDQorI2RlZmluZSBfX05SRjUyODQwX0JJVFNfSA0KKw0KKy8qbGludCArK2ZsYiAiRW50ZXIgbGlicmFyeSByZWdpb24iICovDQorDQorLyogUGVyaXBoZXJhbDogQUFSICovDQorLyogRGVzY3JpcHRpb246IEFjY2VsZXJhdGVkIEFkZHJlc3MgUmVzb2x2ZXIgKi8NCisNCisvKiBSZWdpc3RlcjogQUFSX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBOT1RSRVNPTFZFRCBldmVudCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX05PVFJFU09MVkVEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIE5PVFJFU09MVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX05PVFJFU09MVkVEX01zayAoMHgxVUwgPDwgQUFSX0lOVEVOU0VUX05PVFJFU09MVkVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBOT1RSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9OT1RSRVNPTFZFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfTk9UUkVTT0xWRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9OT1RSRVNPTFZFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRVNPTFZFRCBldmVudCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX1JFU09MVkVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU09MVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX1JFU09MVkVEX01zayAoMHgxVUwgPDwgQUFSX0lOVEVOU0VUX1JFU09MVkVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9SRVNPTFZFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5TRVRfUkVTT0xWRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9SRVNPTFZFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9FTkRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX0VORF9Nc2sgKDB4MVVMIDw8IEFBUl9JTlRFTlNFVF9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTlNFVF9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOU0VUX0VORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogQUFSX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIE5PVFJFU09MVkVEIGV2ZW50ICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfTk9UUkVTT0xWRURfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgTk9UUkVTT0xWRUQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfTk9UUkVTT0xWRURfTXNrICgweDFVTCA8PCBBQVJfSU5URU5DTFJfTk9UUkVTT0xWRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5PVFJFU09MVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX05PVFJFU09MVkVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9OT1RSRVNPTFZFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX05PVFJFU09MVkVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRVNPTFZFRCBldmVudCAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX1JFU09MVkVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU09MVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lOVEVOQ0xSX1JFU09MVkVEX01zayAoMHgxVUwgPDwgQUFSX0lOVEVOQ0xSX1JFU09MVkVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNPTFZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9SRVNPTFZFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfUkVTT0xWRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9SRVNPTFZFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfRU5EX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9FTkRfTXNrICgweDFVTCA8PCBBQVJfSU5URU5DTFJfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBBQVJfSU5URU5DTFJfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEFBUl9JTlRFTkNMUl9FTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9TVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVzb2x1dGlvbiBzdGF0dXMgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBUaGUgSVJLIHRoYXQgd2FzIHVzZWQgbGFzdCB0aW1lIGFuIGFkZHJlc3Mgd2FzIHJlc29sdmVkICovDQorI2RlZmluZSBBQVJfU1RBVFVTX1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBBQVJfU1RBVFVTX1NUQVRVU19Nc2sgKDB4RlVMIDw8IEFBUl9TVEFUVVNfU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFUVVMgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIEFBUiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIEFBUiAqLw0KKyNkZWZpbmUgQUFSX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0VOQUJMRV9FTkFCTEVfTXNrICgweDNVTCA8PCBBQVJfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBBQVJfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgzVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEFBUl9OSVJLICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBJUktzICovDQorDQorLyogQml0cyA0Li4wIDogTnVtYmVyIG9mIElkZW50aXR5IHJvb3Qga2V5cyBhdmFpbGFibGUgaW4gdGhlIElSSyBkYXRhIHN0cnVjdHVyZSAqLw0KKyNkZWZpbmUgQUFSX05JUktfTklSS19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBOSVJLIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX05JUktfTklSS19Nc2sgKDB4MUZVTCA8PCBBQVJfTklSS19OSVJLX1BvcykgLyohPCBCaXQgbWFzayBvZiBOSVJLIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQVJfSVJLUFRSICovDQorLyogRGVzY3JpcHRpb246IFBvaW50ZXIgdG8gSVJLIGRhdGEgc3RydWN0dXJlICovDQorDQorLyogQml0cyAzMS4uMCA6IFBvaW50ZXIgdG8gdGhlIElSSyBkYXRhIHN0cnVjdHVyZSAqLw0KKyNkZWZpbmUgQUFSX0lSS1BUUl9JUktQVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSVJLUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUFSX0lSS1BUUl9JUktQVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgQUFSX0lSS1BUUl9JUktQVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElSS1BUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQUFSX0FERFJQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUG9pbnRlciB0byB0aGUgcmVzb2x2YWJsZSBhZGRyZXNzICovDQorDQorLyogQml0cyAzMS4uMCA6IFBvaW50ZXIgdG8gdGhlIHJlc29sdmFibGUgYWRkcmVzcyAoNi1ieXRlcykgKi8NCisjZGVmaW5lIEFBUl9BRERSUFRSX0FERFJQVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUlBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIEFBUl9BRERSUFRSX0FERFJQVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgQUFSX0FERFJQVFJfQUREUlBUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUlBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQUFSX1NDUkFUQ0hQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUG9pbnRlciB0byBkYXRhIGFyZWEgdXNlZCBmb3IgdGVtcG9yYXJ5IHN0b3JhZ2UgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUG9pbnRlciB0byBhIHNjcmF0Y2ggZGF0YSBhcmVhIHVzZWQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlIGR1cmluZyByZXNvbHV0aW9uLkEgc3BhY2Ugb2YgbWluaW11bSAzIGJ5dGVzIG11c3QgYmUgcmVzZXJ2ZWQuICovDQorI2RlZmluZSBBQVJfU0NSQVRDSFBUUl9TQ1JBVENIUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNDUkFUQ0hQVFIgZmllbGQuICovDQorI2RlZmluZSBBQVJfU0NSQVRDSFBUUl9TQ1JBVENIUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IEFBUl9TQ1JBVENIUFRSX1NDUkFUQ0hQVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNDUkFUQ0hQVFIgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogQUNMICovDQorLyogRGVzY3JpcHRpb246IEFjY2VzcyBjb250cm9sIGxpc3RzICovDQorDQorLyogUmVnaXN0ZXI6IEFDTF9ESVNBQkxFSU5ERUJVRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGFsbCBBQ0wgcHJvdGVjdGlvbiBtZWNoYW5pc21zIGZvciByZWdpb25zIHdoaWxlIGluIGRlYnVnIG1vZGUgKi8NCisNCisvKiBCaXQgMCA6IERpc2FibGUgdGhlIHByb3RlY3Rpb24gbWVjaGFuaXNtIGZvciByZWdpb25zIHdoaWxlIGluIGRlYnVnIG1vZGUuICovDQorI2RlZmluZSBBQ0xfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRElTQUJMRUlOREVCVUcgZmllbGQuICovDQorI2RlZmluZSBBQ0xfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfTXNrICgweDFVTCA8PCBBQ0xfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJU0FCTEVJTkRFQlVHIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUNMX0RJU0FCTEVJTkRFQlVHX0RJU0FCTEVJTkRFQlVHX0VuYWJsZWQgKDBVTCkgLyohPCBBQ0wgaXMgZW5hYmxlZCBpbiBkZWJ1ZyBtb2RlICovDQorI2RlZmluZSBBQ0xfRElTQUJMRUlOREVCVUdfRElTQUJMRUlOREVCVUdfRGlzYWJsZWQgKDFVTCkgLyohPCBBQ0wgaXMgZGlzYWJsZWQgaW4gZGVidWcgbW9kZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQ0xfQUNMX0FERFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIENvbmZpZ3VyZSB0aGUgd29yZC1hbGlnbmVkIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uIDAgdG8gcHJvdGVjdCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBWYWxpZCB3b3JkLWFsaWduZWQgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24gMCB0byBwcm90ZWN0LiBBZGRyZXNzIG11c3QgcG9pbnQgdG8gYSBmbGFzaCBwYWdlIGJvdW5kYXJ5LiAqLw0KKyNkZWZpbmUgQUNMX0FDTF9BRERSX0FERFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUiBmaWVsZC4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfQUREUl9BRERSX01zayAoMHhGRkZGRkZGRlVMIDw8IEFDTF9BQ0xfQUREUl9BRERSX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBBQ0xfQUNMX1NJWkUgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFNpemUgb2YgcmVnaW9uIHRvIHByb3RlY3QgY291bnRpbmcgZnJvbSBhZGRyZXNzIEFDTFswXS5BRERSLiBXcml0ZSAnMCcgYXMgbm8gZWZmZWN0LiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBTaXplIG9mIGZsYXNoIHJlZ2lvbiAwIGluIGJ5dGVzLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGZsYXNoIHBhZ2Ugc2l6ZS4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfU0laRV9TSVpFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNJWkUgZmllbGQuICovDQorI2RlZmluZSBBQ0xfQUNMX1NJWkVfU0laRV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBBQ0xfQUNMX1NJWkVfU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0laRSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQUNMX0FDTF9QRVJNICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBBY2Nlc3MgcGVybWlzc2lvbnMgZm9yIHJlZ2lvbiAwIGFzIGRlZmluZWQgYnkgc3RhcnQgYWRkcmVzcyBBQ0xbMF0uQUREUiBhbmQgc2l6ZSBBQ0xbMF0uU0laRSAqLw0KKw0KKy8qIEJpdCAyIDogQ29uZmlndXJlIHJlYWQgcGVybWlzc2lvbnMgZm9yIHJlZ2lvbiAwLiBXcml0ZSAnMCcgaGFzIG5vIGVmZmVjdC4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfUEVSTV9SRUFEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQUQgZmllbGQuICovDQorI2RlZmluZSBBQ0xfQUNMX1BFUk1fUkVBRF9Nc2sgKDB4MVVMIDw8IEFDTF9BQ0xfUEVSTV9SRUFEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUNMX0FDTF9QRVJNX1JFQURfRW5hYmxlICgwVUwpIC8qITwgQWxsb3cgcmVhZCBpbnN0cnVjdGlvbnMgdG8gcmVnaW9uIDAgKi8NCisjZGVmaW5lIEFDTF9BQ0xfUEVSTV9SRUFEX0Rpc2FibGUgKDFVTCkgLyohPCBCbG9jayByZWFkIGluc3RydWN0aW9ucyB0byByZWdpb24gMCAqLw0KKw0KKy8qIEJpdCAxIDogQ29uZmlndXJlIHdyaXRlIGFuZCBlcmFzZSBwZXJtaXNzaW9ucyBmb3IgcmVnaW9uIDAuIFdyaXRlICcwJyBoYXMgbm8gZWZmZWN0LiAqLw0KKyNkZWZpbmUgQUNMX0FDTF9QRVJNX1dSSVRFX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFdSSVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQUNMX0FDTF9QRVJNX1dSSVRFX01zayAoMHgxVUwgPDwgQUNMX0FDTF9QRVJNX1dSSVRFX1BvcykgLyohPCBCaXQgbWFzayBvZiBXUklURSBmaWVsZC4gKi8NCisjZGVmaW5lIEFDTF9BQ0xfUEVSTV9XUklURV9FbmFibGUgKDBVTCkgLyohPCBBbGxvdyB3cml0ZSBhbmQgZXJhc2UgaW5zdHJ1Y3Rpb25zIHRvIHJlZ2lvbiAwICovDQorI2RlZmluZSBBQ0xfQUNMX1BFUk1fV1JJVEVfRGlzYWJsZSAoMVVMKSAvKiE8IEJsb2NrIHdyaXRlIGFuZCBlcmFzZSBpbnN0cnVjdGlvbnMgdG8gcmVnaW9uIDAgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBDQ00gKi8NCisvKiBEZXNjcmlwdGlvbjogQUVTIENDTSBNb2RlIEVuY3J5cHRpb24gKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBFTkRLU0dFTiBldmVudCBhbmQgQ1JZUFQgdGFzayAqLw0KKyNkZWZpbmUgQ0NNX1NIT1JUU19FTkRLU0dFTl9DUllQVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRLU0dFTl9DUllQVCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9TSE9SVFNfRU5ES1NHRU5fQ1JZUFRfTXNrICgweDFVTCA8PCBDQ01fU0hPUlRTX0VOREtTR0VOX0NSWVBUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRLU0dFTl9DUllQVCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9TSE9SVFNfRU5ES1NHRU5fQ1JZUFRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBDQ01fU0hPUlRTX0VOREtTR0VOX0NSWVBUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VSUk9SX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VSUk9SX01zayAoMHgxVUwgPDwgQ0NNX0lOVEVOU0VUX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FUlJPUl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRDUllQVCBldmVudCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VORENSWVBUX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORENSWVBUIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VORENSWVBUX01zayAoMHgxVUwgPDwgQ0NNX0lOVEVOU0VUX0VORENSWVBUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRDUllQVCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRDUllQVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRU5EQ1JZUFRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRDUllQVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRLU0dFTiBldmVudCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VOREtTR0VOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREtTR0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOU0VUX0VOREtTR0VOX01zayAoMHgxVUwgPDwgQ0NNX0lOVEVOU0VUX0VOREtTR0VOX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRLU0dFTiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRLU0dFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5TRVRfRU5ES1NHRU5fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTlNFVF9FTkRLU0dFTl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRVJST1JfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRVJST1JfTXNrICgweDFVTCA8PCBDQ01fSU5URU5DTFJfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRDUllQVCBldmVudCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VORENSWVBUX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORENSWVBUIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VORENSWVBUX01zayAoMHgxVUwgPDwgQ0NNX0lOVEVOQ0xSX0VORENSWVBUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRDUllQVCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRDUllQVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5EQ1JZUFRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRDUllQVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ES1NHRU4gZXZlbnQgKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRLU0dFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRLU0dFTiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9JTlRFTkNMUl9FTkRLU0dFTl9Nc2sgKDB4MVVMIDw8IENDTV9JTlRFTkNMUl9FTkRLU0dFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ES1NHRU4gZmllbGQuICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5ES1NHRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0NNX0lOVEVOQ0xSX0VOREtTR0VOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDQ01fSU5URU5DTFJfRU5ES1NHRU5fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9NSUNTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogTUlDIGNoZWNrIHJlc3VsdCAqLw0KKw0KKy8qIEJpdCAwIDogVGhlIHJlc3VsdCBvZiB0aGUgTUlDIGNoZWNrIHBlcmZvcm1lZCBkdXJpbmcgdGhlIHByZXZpb3VzIGRlY3J5cHRpb24gb3BlcmF0aW9uICovDQorI2RlZmluZSBDQ01fTUlDU1RBVFVTX01JQ1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNSUNTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBDQ01fTUlDU1RBVFVTX01JQ1NUQVRVU19Nc2sgKDB4MVVMIDw8IENDTV9NSUNTVEFUVVNfTUlDU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBNSUNTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBDQ01fTUlDU1RBVFVTX01JQ1NUQVRVU19DaGVja0ZhaWxlZCAoMFVMKSAvKiE8IE1JQyBjaGVjayBmYWlsZWQgKi8NCisjZGVmaW5lIENDTV9NSUNTVEFUVVNfTUlDU1RBVFVTX0NoZWNrUGFzc2VkICgxVUwpIC8qITwgTUlDIGNoZWNrIHBhc3NlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIENDTSAqLw0KKyNkZWZpbmUgQ0NNX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0VOQUJMRV9FTkFCTEVfTXNrICgweDNVTCA8PCBDQ01fRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBDQ01fRU5BQkxFX0VOQUJMRV9FbmFibGVkICgyVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9NT0RFICovDQorLyogRGVzY3JpcHRpb246IE9wZXJhdGlvbiBtb2RlICovDQorDQorLyogQml0IDI0IDogUGFja2V0IGxlbmd0aCBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBDQ01fTU9ERV9MRU5HVEhfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIExFTkdUSCBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9NT0RFX0xFTkdUSF9Nc2sgKDB4MVVMIDw8IENDTV9NT0RFX0xFTkdUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEVOR1RIIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX01PREVfTEVOR1RIX0RlZmF1bHQgKDBVTCkgLyohPCBEZWZhdWx0IGxlbmd0aC4gRWZmZWN0aXZlIGxlbmd0aCBvZiBMRU5HVEggZmllbGQgaW4gZW5jcnlwdGVkL2RlY3J5cHRlZCBwYWNrZXQgaXMgNSBiaXRzLiBBIGtleS1zdHJlYW0gZm9yIHBhY2tldHMgdXAgdG8gMjcgYnl0ZXMgd2lsbCBiZSBnZW5lcmF0ZWQuICovDQorI2RlZmluZSBDQ01fTU9ERV9MRU5HVEhfRXh0ZW5kZWQgKDFVTCkgLyohPCBFeHRlbmRlZCBsZW5ndGguIEVmZmVjdGl2ZSBsZW5ndGggb2YgTEVOR1RIIGZpZWxkIGluIGVuY3J5cHRlZC9kZWNyeXB0ZWQgcGFja2V0IGlzIDggYml0cy4gQSBrZXktc3RyZWFtIGZvciBwYWNrZXRzIHVwIHRvIE1BWFBBQ0tFVFNJWkUgYnl0ZXMgd2lsbCBiZSBnZW5lcmF0ZWQuICovDQorDQorLyogQml0cyAxNy4uMTYgOiBSYWRpbyBkYXRhIHJhdGUgdGhhdCB0aGUgQ0NNIHNoYWxsIHJ1biBzeW5jaHJvbm91cyB3aXRoICovDQorI2RlZmluZSBDQ01fTU9ERV9EQVRBUkFURV9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgREFUQVJBVEUgZmllbGQuICovDQorI2RlZmluZSBDQ01fTU9ERV9EQVRBUkFURV9Nc2sgKDB4M1VMIDw8IENDTV9NT0RFX0RBVEFSQVRFX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQVRBUkFURSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9NT0RFX0RBVEFSQVRFXzFNYml0ICgwVUwpIC8qITwgMSBNYnBzICovDQorI2RlZmluZSBDQ01fTU9ERV9EQVRBUkFURV8yTWJpdCAoMVVMKSAvKiE8IDIgTWJwcyAqLw0KKyNkZWZpbmUgQ0NNX01PREVfREFUQVJBVEVfMTI1S2JwcyAoMlVMKSAvKiE8IDEyNSBLYnBzICovDQorI2RlZmluZSBDQ01fTU9ERV9EQVRBUkFURV81MDBLYnBzICgzVUwpIC8qITwgNTAwIEticHMgKi8NCisNCisvKiBCaXQgMCA6IFRoZSBtb2RlIG9mIG9wZXJhdGlvbiB0byBiZSB1c2VkLiBUaGUgc2V0dGluZ3MgaW4gdGhpcyByZWdpc3RlciBhcHBseSB3aGVuZXZlciBlaXRoZXIgdGhlIEtTR0VOIG9yIENSWVBUIHRhc2tzIGFyZSB0cmlnZ2VyZWQuICovDQorI2RlZmluZSBDQ01fTU9ERV9NT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBDQ01fTU9ERV9NT0RFX01zayAoMHgxVUwgPDwgQ0NNX01PREVfTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9NT0RFX01PREVfRW5jcnlwdGlvbiAoMFVMKSAvKiE8IEFFUyBDQ00gcGFja2V0IGVuY3J5cHRpb24gbW9kZSAqLw0KKyNkZWZpbmUgQ0NNX01PREVfTU9ERV9EZWNyeXB0aW9uICgxVUwpIC8qITwgQUVTIENDTSBwYWNrZXQgZGVjcnlwdGlvbiBtb2RlICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9DTkZQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUG9pbnRlciB0byBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIEFFUyBrZXkgYW5kIE5PTkNFIHZlY3RvciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQb2ludGVyIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBBRVMga2V5IGFuZCB0aGUgQ0NNIE5PTkNFIHZlY3RvciAoc2VlIFRhYmxlIDEgQ0NNIGRhdGEgc3RydWN0dXJlIG92ZXJ2aWV3KSAqLw0KKyNkZWZpbmUgQ0NNX0NORlBUUl9DTkZQVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ05GUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0NORlBUUl9DTkZQVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgQ0NNX0NORlBUUl9DTkZQVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENORlBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogQ0NNX0lOUFRSICovDQorLyogRGVzY3JpcHRpb246IElucHV0IHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogSW5wdXQgcG9pbnRlciAqLw0KKyNkZWZpbmUgQ0NNX0lOUFRSX0lOUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElOUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX0lOUFRSX0lOUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IENDTV9JTlBUUl9JTlBUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU5QVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9PVVRQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogT3V0cHV0IHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogT3V0cHV0IHBvaW50ZXIgKi8NCisjZGVmaW5lIENDTV9PVVRQVFJfT1VUUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9VVFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIENDTV9PVVRQVFJfT1VUUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IENDTV9PVVRQVFJfT1VUUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVVRQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IENDTV9TQ1JBVENIUFRSICovDQorLyogRGVzY3JpcHRpb246IFBvaW50ZXIgdG8gZGF0YSBhcmVhIHVzZWQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlICovDQorDQorLyogQml0cyAzMS4uMCA6IFBvaW50ZXIgdG8gYSBzY3JhdGNoIGRhdGEgYXJlYSB1c2VkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSBkdXJpbmcga2V5LXN0cmVhbSBnZW5lcmF0aW9uLCBNSUMgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLiAqLw0KKyNkZWZpbmUgQ0NNX1NDUkFUQ0hQVFJfU0NSQVRDSFBUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQ1JBVENIUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX1NDUkFUQ0hQVFJfU0NSQVRDSFBUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBDQ01fU0NSQVRDSFBUUl9TQ1JBVENIUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQ1JBVENIUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fTUFYUEFDS0VUU0laRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBMZW5ndGggb2Yga2V5LXN0cmVhbSBnZW5lcmF0ZWQgd2hlbiBNT0RFLkxFTkdUSCA9IEV4dGVuZGVkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IExlbmd0aCBvZiBrZXktc3RyZWFtIGdlbmVyYXRlZCB3aGVuIE1PREUuTEVOR1RIID0gRXh0ZW5kZWQuIFRoaXMgdmFsdWUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBzdWJzZXF1ZW50IHBhY2tldCB0byBiZSBlbmNyeXB0ZWQvZGVjcnlwdGVkLiAqLw0KKyNkZWZpbmUgQ0NNX01BWFBBQ0tFVFNJWkVfTUFYUEFDS0VUU0laRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhQQUNLRVRTSVpFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX01BWFBBQ0tFVFNJWkVfTUFYUEFDS0VUU0laRV9Nc2sgKDB4RkZVTCA8PCBDQ01fTUFYUEFDS0VUU0laRV9NQVhQQUNLRVRTSVpFX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhQQUNLRVRTSVpFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDQ01fUkFURU9WRVJSSURFICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcmF0ZSBvdmVycmlkZSBzZXR0aW5nLiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IERhdGEgcmF0ZSBvdmVycmlkZSBzZXR0aW5nLiAqLw0KKyNkZWZpbmUgQ0NNX1JBVEVPVkVSUklERV9SQVRFT1ZFUlJJREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkFURU9WRVJSSURFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX1JBVEVPVkVSUklERV9SQVRFT1ZFUlJJREVfTXNrICgweDNVTCA8PCBDQ01fUkFURU9WRVJSSURFX1JBVEVPVkVSUklERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFURU9WRVJSSURFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0NNX1JBVEVPVkVSUklERV9SQVRFT1ZFUlJJREVfMU1iaXQgKDBVTCkgLyohPCAxIE1icHMgKi8NCisjZGVmaW5lIENDTV9SQVRFT1ZFUlJJREVfUkFURU9WRVJSSURFXzJNYml0ICgxVUwpIC8qITwgMiBNYnBzICovDQorI2RlZmluZSBDQ01fUkFURU9WRVJSSURFX1JBVEVPVkVSUklERV8xMjVLYnBzICgyVUwpIC8qITwgMTI1IEticHMgKi8NCisjZGVmaW5lIENDTV9SQVRFT1ZFUlJJREVfUkFURU9WRVJSSURFXzUwMEticHMgKDNVTCkgLyohPCA1MDAgS2JwcyAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IENMT0NLICovDQorLyogRGVzY3JpcHRpb246IENsb2NrIGNvbnRyb2wgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENUVE8gZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0NUVE9fUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ1RUTyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0NUVE9fTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTlNFVF9DVFRPX1BvcykgLyohPCBCaXQgbWFzayBvZiBDVFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfQ1RUT19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9DVFRPX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9DVFRPX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0RPTkVfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0RPTkVfTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTlNFVF9ET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9ET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTlNFVF9ET05FX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIExGQ0xLU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfTEZDTEtTVEFSVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIExGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEZDTEtTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfTEZDTEtTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0xGQ0xLU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfTEZDTEtTVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEhGQ0xLU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfSEZDTEtTVEFSVEVEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEhGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0hGQ0xLU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IENMT0NLX0lOVEVOU0VUX0hGQ0xLU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSEZDTEtTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfSEZDTEtTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOU0VUX0hGQ0xLU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5TRVRfSEZDTEtTVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDTE9DS19JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDVFRPIGV2ZW50ICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9DVFRPX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUVE8gZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9DVFRPX01zayAoMHgxVUwgPDwgQ0xPQ0tfSU5URU5DTFJfQ1RUT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RUTyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0NUVE9fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfQ1RUT19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfQ1RUT19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfRE9ORV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfRE9ORV9Nc2sgKDB4MVVMIDw8IENMT0NLX0lOVEVOQ0xSX0RPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPTkUgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9ET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0RPTkVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIExGQ0xLU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfTEZDTEtTVEFSVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIExGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0xGQ0xLU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IENMT0NLX0lOVEVOQ0xSX0xGQ0xLU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEZDTEtTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfTEZDTEtTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0xGQ0xLU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSU5URU5DTFJfTEZDTEtTVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBIRkNMS1NUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0hGQ0xLU1RBUlRFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBIRkNMS1NUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9IRkNMS1NUQVJURURfTXNrICgweDFVTCA8PCBDTE9DS19JTlRFTkNMUl9IRkNMS1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEhGQ0xLU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0hGQ0xLU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDTE9DS19JTlRFTkNMUl9IRkNMS1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENMT0NLX0lOVEVOQ0xSX0hGQ0xLU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfSEZDTEtSVU4gKi8NCisvKiBEZXNjcmlwdGlvbjogU3RhdHVzIGluZGljYXRpbmcgdGhhdCBIRkNMS1NUQVJUIHRhc2sgaGFzIGJlZW4gdHJpZ2dlcmVkICovDQorDQorLyogQml0IDAgOiBIRkNMS1NUQVJUIHRhc2sgdHJpZ2dlcmVkIG9yIG5vdCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtSVU5fU1RBVFVTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLUlVOX1NUQVRVU19Nc2sgKDB4MVVMIDw8IENMT0NLX0hGQ0xLUlVOX1NUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtSVU5fU1RBVFVTX05vdFRyaWdnZXJlZCAoMFVMKSAvKiE8IFRhc2sgbm90IHRyaWdnZXJlZCAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtSVU5fU1RBVFVTX1RyaWdnZXJlZCAoMVVMKSAvKiE8IFRhc2sgdHJpZ2dlcmVkICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0hGQ0xLU1RBVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBIRkNMSyBzdGF0dXMgKi8NCisNCisvKiBCaXQgMTYgOiBIRkNMSyBzdGF0ZSAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtTVEFUX1NUQVRFX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFURSBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Nc2sgKDB4MVVMIDw8IENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBVEUgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19IRkNMS1NUQVRfU1RBVEVfTm90UnVubmluZyAoMFVMKSAvKiE8IEhGQ0xLIG5vdCBydW5uaW5nICovDQorI2RlZmluZSBDTE9DS19IRkNMS1NUQVRfU1RBVEVfUnVubmluZyAoMVVMKSAvKiE8IEhGQ0xLIHJ1bm5pbmcgKi8NCisNCisvKiBCaXQgMCA6IFNvdXJjZSBvZiBIRkNMSyAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUkMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19IRkNMS1NUQVRfU1JDX01zayAoMHgxVUwgPDwgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19SQyAoMFVMKSAvKiE8IDY0IE1IeiBpbnRlcm5hbCBvc2NpbGxhdG9yIChIRklOVCkgKi8NCisjZGVmaW5lIENMT0NLX0hGQ0xLU1RBVF9TUkNfWHRhbCAoMVVMKSAvKiE8IDY0IE1IeiBjcnlzdGFsIG9zY2lsbGF0b3IgKEhGWE8pICovDQorDQorLyogUmVnaXN0ZXI6IENMT0NLX0xGQ0xLUlVOICovDQorLyogRGVzY3JpcHRpb246IFN0YXR1cyBpbmRpY2F0aW5nIHRoYXQgTEZDTEtTVEFSVCB0YXNrIGhhcyBiZWVuIHRyaWdnZXJlZCAqLw0KKw0KKy8qIEJpdCAwIDogTEZDTEtTVEFSVCB0YXNrIHRyaWdnZXJlZCBvciBub3QgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLUlVOX1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1JVTl9TVEFUVVNfTXNrICgweDFVTCA8PCBDTE9DS19MRkNMS1JVTl9TVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLUlVOX1NUQVRVU19Ob3RUcmlnZ2VyZWQgKDBVTCkgLyohPCBUYXNrIG5vdCB0cmlnZ2VyZWQgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLUlVOX1NUQVRVU19UcmlnZ2VyZWQgKDFVTCkgLyohPCBUYXNrIHRyaWdnZXJlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDTE9DS19MRkNMS1NUQVQgKi8NCisvKiBEZXNjcmlwdGlvbjogTEZDTEsgc3RhdHVzICovDQorDQorLyogQml0IDE2IDogTEZDTEsgc3RhdGUgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1RBVF9TVEFURV9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgU1RBVEUgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NUQVRfU1RBVEVfTXNrICgweDFVTCA8PCBDTE9DS19MRkNMS1NUQVRfU1RBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NUQVRFX05vdFJ1bm5pbmcgKDBVTCkgLyohPCBMRkNMSyBub3QgcnVubmluZyAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NUQVRFX1J1bm5pbmcgKDFVTCkgLyohPCBMRkNMSyBydW5uaW5nICovDQorDQorLyogQml0cyAxLi4wIDogU291cmNlIG9mIExGQ0xLICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NUQVRfU1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1RBVF9TUkNfTXNrICgweDNVTCA8PCBDTE9DS19MRkNMS1NUQVRfU1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUkMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NUQVRfU1JDX1JDICgwVUwpIC8qITwgMzIuNzY4IGtIeiBSQyBvc2NpbGxhdG9yICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NUQVRfU1JDX1h0YWwgKDFVTCkgLyohPCAzMi43Njgga0h6IGNyeXN0YWwgb3NjaWxsYXRvciAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NSQ19TeW50aCAoMlVMKSAvKiE8IDMyLjc2OCBrSHogc3ludGhlc2l6ZWQgZnJvbSBIRkNMSyAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTVEFUX1NSQ19MRlVMUCAoM1VMKSAvKiE8IDMyLjc2OCBrSHogdWx0cmEgbG93IHBvd2VyIFJDIG9zY2lsbGF0b3IgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfTEZDTEtTUkNDT1BZICovDQorLyogRGVzY3JpcHRpb246IENvcHkgb2YgTEZDTEtTUkMgcmVnaXN0ZXIsIHNldCB3aGVuIExGQ0xLU1RBUlQgdGFzayB3YXMgdHJpZ2dlcmVkICovDQorDQorLyogQml0cyAxLi4wIDogQ2xvY2sgc291cmNlICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ0NPUFlfU1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDQ09QWV9TUkNfTXNrICgweDNVTCA8PCBDTE9DS19MRkNMS1NSQ0NPUFlfU1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUkMgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ0NPUFlfU1JDX1JDICgwVUwpIC8qITwgMzIuNzY4IGtIeiBSQyBvc2NpbGxhdG9yICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ0NPUFlfU1JDX1h0YWwgKDFVTCkgLyohPCAzMi43Njgga0h6IGNyeXN0YWwgb3NjaWxsYXRvciAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19TeW50aCAoMlVMKSAvKiE8IDMyLjc2OCBrSHogc3ludGhlc2l6ZWQgZnJvbSBIRkNMSyAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19MRlVMUCAoM1VMKSAvKiE8IDMyLjc2OCBrSHogdWx0cmEgbG93IHBvd2VyIFJDIG9zY2lsbGF0b3IgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfTEZDTEtTUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogQ2xvY2sgc291cmNlIGZvciB0aGUgTEZDTEsgKi8NCisNCisvKiBCaXQgMTcgOiBFbmFibGUgb3IgZGlzYWJsZSBleHRlcm5hbCBzb3VyY2UgZm9yIExGQ0xLICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19FWFRFUk5BTF9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgRVhURVJOQUwgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19FWFRFUk5BTF9Nc2sgKDB4MVVMIDw8IENMT0NLX0xGQ0xLU1JDX0VYVEVSTkFMX1BvcykgLyohPCBCaXQgbWFzayBvZiBFWFRFUk5BTCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX0VYVEVSTkFMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBleHRlcm5hbCBzb3VyY2UgKHVzZSB3aXRoIFh0YWwpICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19FWFRFUk5BTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHVzZSBvZiBleHRlcm5hbCBzb3VyY2UgaW5zdGVhZCBvZiBYdGFsIChTUkMgbmVlZHMgdG8gYmUgc2V0IHRvIFh0YWwpICovDQorDQorLyogQml0IDE2IDogRW5hYmxlIG9yIGRpc2FibGUgYnlwYXNzIG9mIExGQ0xLIGNyeXN0YWwgb3NjaWxsYXRvciB3aXRoIGV4dGVybmFsIGNsb2NrIHNvdXJjZSAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfQllQQVNTX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVBBU1MgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19CWVBBU1NfTXNrICgweDFVTCA8PCBDTE9DS19MRkNMS1NSQ19CWVBBU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZUEFTUyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX0JZUEFTU19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKHVzZSB3aXRoIFh0YWwgb3IgbG93LXN3aW5nIGV4dGVybmFsIHNvdXJjZSkgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX0JZUEFTU19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICh1c2Ugd2l0aCByYWlsLXRvLXJhaWwgZXh0ZXJuYWwgc291cmNlKSAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IENsb2NrIHNvdXJjZSAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfU1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSQyBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX1NSQ19Nc2sgKDB4M1VMIDw8IENMT0NLX0xGQ0xLU1JDX1NSQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfTEZDTEtTUkNfU1JDX1JDICgwVUwpIC8qITwgMzIuNzY4IGtIeiBSQyBvc2NpbGxhdG9yICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19TUkNfWHRhbCAoMVVMKSAvKiE8IDMyLjc2OCBrSHogY3J5c3RhbCBvc2NpbGxhdG9yICovDQorI2RlZmluZSBDTE9DS19MRkNMS1NSQ19TUkNfU3ludGggKDJVTCkgLyohPCAzMi43Njgga0h6IHN5bnRoZXNpemVkIGZyb20gSEZDTEsgKi8NCisjZGVmaW5lIENMT0NLX0xGQ0xLU1JDX1NSQ19MRlVMUCAoM1VMKSAvKiE8IDMyLjc2OCBrSHogdWx0cmEgbG93IHBvd2VyIFJDIG9zY2lsbGF0b3IgKi8NCisNCisvKiBSZWdpc3RlcjogQ0xPQ0tfQ1RJViAqLw0KKy8qIERlc2NyaXB0aW9uOiBDYWxpYnJhdGlvbiB0aW1lciBpbnRlcnZhbCAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IENhbGlicmF0aW9uIHRpbWVyIGludGVydmFsIGluIG11bHRpcGxlIG9mIDAuMjUgc2Vjb25kcy4gUmFuZ2U6IDAuMjUgc2Vjb25kcyB0byAzMS43NSBzZWNvbmRzLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfQ1RJVl9DVElWX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUSVYgZmllbGQuICovDQorI2RlZmluZSBDTE9DS19DVElWX0NUSVZfTXNrICgweDdGVUwgPDwgQ0xPQ0tfQ1RJVl9DVElWX1BvcykgLyohPCBCaXQgbWFzayBvZiBDVElWIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDTE9DS19UUkFDRUNPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDbG9ja2luZyBvcHRpb25zIGZvciB0aGUgVHJhY2UgUG9ydCBkZWJ1ZyBpbnRlcmZhY2UgKi8NCisNCisvKiBCaXRzIDE3Li4xNiA6IFBpbiBtdWx0aXBsZXhpbmcgb2YgdHJhY2Ugc2lnbmFscy4gKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBUUkFDRU1VWCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX01zayAoMHgzVUwgPDwgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSQUNFTVVYIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfR1BJTyAoMFVMKSAvKiE8IEdQSU9zIG11bHRpcGxleGVkIG9udG8gYWxsIHRyYWNlLXBpbnMgKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFTVVYX1NlcmlhbCAoMVVMKSAvKiE8IFNXTyBtdWx0aXBsZXhlZCBvbnRvIFAwLjE4LCBHUElPIG11bHRpcGxleGVkIG9udG8gb3RoZXIgdHJhY2UgcGlucyAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfUGFyYWxsZWwgKDJVTCkgLyohPCBUUkFDRUNMSyBhbmQgVFJBQ0VEQVRBIG11bHRpcGxleGVkIG9udG8gUDAuMjAsIFAwLjE4LCBQMC4xNiwgUDAuMTUgYW5kIFAwLjE0LiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFNwZWVkIG9mIFRyYWNlIFBvcnQgY2xvY2suIE5vdGUgdGhhdCB0aGUgVFJBQ0VDTEsgcGluIHdpbGwgb3V0cHV0IHRoaXMgY2xvY2sgZGl2aWRlZCBieSB0d28uICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRVBPUlRTUEVFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUUkFDRVBPUlRTUEVFRCBmaWVsZC4gKi8NCisjZGVmaW5lIENMT0NLX1RSQUNFQ09ORklHX1RSQUNFUE9SVFNQRUVEX01zayAoMHgzVUwgPDwgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VQT1JUU1BFRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSQUNFUE9SVFNQRUVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VQT1JUU1BFRURfMzJNSHogKDBVTCkgLyohPCAzMiBNSHogVHJhY2UgUG9ydCBjbG9jayAoVFJBQ0VDTEsgPSAxNiBNSHopICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRVBPUlRTUEVFRF8xNk1IeiAoMVVMKSAvKiE8IDE2IE1IeiBUcmFjZSBQb3J0IGNsb2NrIChUUkFDRUNMSyA9IDggTUh6KSAqLw0KKyNkZWZpbmUgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VQT1JUU1BFRURfOE1IeiAoMlVMKSAvKiE8IDggTUh6IFRyYWNlIFBvcnQgY2xvY2sgKFRSQUNFQ0xLID0gNCBNSHopICovDQorI2RlZmluZSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRVBPUlRTUEVFRF80TUh6ICgzVUwpIC8qITwgNCBNSHogVHJhY2UgUG9ydCBjbG9jayAoVFJBQ0VDTEsgPSAyIE1IeikgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBDT01QICovDQorLyogRGVzY3JpcHRpb246IENvbXBhcmF0b3IgKi8NCisNCisvKiBSZWdpc3RlcjogQ09NUF9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgNCA6IFNob3J0Y3V0IGJldHdlZW4gQ1JPU1MgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDUk9TU19TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9Nc2sgKDB4MVVMIDw8IENPTVBfU0hPUlRTX0NST1NTX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENST1NTX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19DUk9TU19TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIFVQIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1VQX1NUT1BfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgVVBfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1VQX1NUT1BfTXNrICgweDFVTCA8PCBDT01QX1NIT1JUU19VUF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBVUF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfVVBfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1VQX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAyIDogU2hvcnRjdXQgYmV0d2VlbiBET1dOIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX0RPV05fU1RPUF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBET1dOX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19ET1dOX1NUT1BfTXNrICgweDFVTCA8PCBDT01QX1NIT1JUU19ET1dOX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPV05fU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX0RPV05fU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX0RPV05fU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEgOiBTaG9ydGN1dCBiZXR3ZWVuIFJFQURZIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NUT1BfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NUT1BfTXNrICgweDFVTCA8PCBDT01QX1NIT1JUU19SRUFEWV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9TSE9SVFNfUkVBRFlfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBSRUFEWSBldmVudCBhbmQgU0FNUExFIHRhc2sgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NBTVBMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWV9TQU1QTEUgZmllbGQuICovDQorI2RlZmluZSBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfTXNrICgweDFVTCA8PCBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZX1NBTVBMRSBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NBTVBMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIENPTVBfU0hPUlRTX1JFQURZX1NBTVBMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENST1NTIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOX0NST1NTX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9DUk9TU19Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5fQ1JPU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9DUk9TU19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIENPTVBfSU5URU5fQ1JPU1NfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBVUCBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9VUF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBVUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5fVVBfTXNrICgweDFVTCA8PCBDT01QX0lOVEVOX1VQX1BvcykgLyohPCBCaXQgbWFzayBvZiBVUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5fVVBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBDT01QX0lOVEVOX1VQX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRE9XTiBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9ET1dOX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOX0RPV05fTXNrICgweDFVTCA8PCBDT01QX0lOVEVOX0RPV05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOX0RPV05fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBDT01QX0lOVEVOX0RPV05fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTl9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5fUkVBRFlfTXNrICgweDFVTCA8PCBDT01QX0lOVEVOX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5fUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBDT01QX0lOVEVOX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogQ09NUF9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ1JPU1MgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfQ1JPU1NfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0NST1NTX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTlNFVF9DUk9TU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0NST1NTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfQ1JPU1NfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfQ1JPU1NfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVAgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfVVBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1VQX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTlNFVF9VUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1VQX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfVVBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfVVBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRE9XTiBldmVudCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9ET1dOX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0RPV05fTXNrICgweDFVTCA8PCBDT01QX0lOVEVOU0VUX0RPV05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0RPV05fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTlNFVF9ET1dOX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX0RPV05fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1JFQURZX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTlNFVF9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOU0VUX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5TRVRfUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ1JPU1MgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfQ1JPU1NfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0NST1NTX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTkNMUl9DUk9TU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0NST1NTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfQ1JPU1NfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfQ1JPU1NfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVQIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1VQX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9VUF9Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5DTFJfVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JTlRFTkNMUl9VUF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1VQX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1VQX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBET1dOIGV2ZW50ICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0RPV05fUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRE9XTiBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfRE9XTl9Nc2sgKDB4MVVMIDw8IENPTVBfSU5URU5DTFJfRE9XTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE9XTiBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfRE9XTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX0RPV05fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfRE9XTl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1JFQURZX01zayAoMHgxVUwgPDwgQ09NUF9JTlRFTkNMUl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lOVEVOQ0xSX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSU5URU5DTFJfUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfUkVTVUxUICovDQorLyogRGVzY3JpcHRpb246IENvbXBhcmUgcmVzdWx0ICovDQorDQorLyogQml0IDAgOiBSZXN1bHQgb2YgbGFzdCBjb21wYXJlLiBEZWNpc2lvbiBwb2ludCBTQU1QTEUgdGFzay4gKi8NCisjZGVmaW5lIENPTVBfUkVTVUxUX1JFU1VMVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNVTFQgZmllbGQuICovDQorI2RlZmluZSBDT01QX1JFU1VMVF9SRVNVTFRfTXNrICgweDFVTCA8PCBDT01QX1JFU1VMVF9SRVNVTFRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFU1VMVCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfUkVTVUxUX1JFU1VMVF9CZWxvdyAoMFVMKSAvKiE8IElucHV0IHZvbHRhZ2UgaXMgYmVsb3cgdGhlIHRocmVzaG9sZCAoVklOKyAmbHQ7IFZJTi0pICovDQorI2RlZmluZSBDT01QX1JFU1VMVF9SRVNVTFRfQWJvdmUgKDFVTCkgLyohPCBJbnB1dCB2b2x0YWdlIGlzIGFib3ZlIHRoZSB0aHJlc2hvbGQgKFZJTisgJmd0OyBWSU4tKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBDT01QX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDT01QIGVuYWJsZSAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIENPTVAgKi8NCisjZGVmaW5lIENPTVBfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBDT01QX0VOQUJMRV9FTkFCTEVfTXNrICgweDNVTCA8PCBDT01QX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIENPTVBfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgyVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfUFNFTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0ICovDQorDQorLyogQml0cyAyLi4wIDogQW5hbG9nIHBpbiBzZWxlY3QgKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBTRUwgZmllbGQuICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9Nc2sgKDB4N1VMIDw8IENPTVBfUFNFTF9QU0VMX1BvcykgLyohPCBCaXQgbWFzayBvZiBQU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQwICgwVUwpIC8qITwgQUlOMCBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX0FuYWxvZ0lucHV0MSAoMVVMKSAvKiE8IEFJTjEgc2VsZWN0ZWQgYXMgYW5hbG9nIGlucHV0ICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDIgKDJVTCkgLyohPCBBSU4yIHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQzICgzVUwpIC8qITwgQUlOMyBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX0FuYWxvZ0lucHV0NCAoNFVMKSAvKiE8IEFJTjQgc2VsZWN0ZWQgYXMgYW5hbG9nIGlucHV0ICovDQorI2RlZmluZSBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDUgKDVVTCkgLyohPCBBSU41IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgQ09NUF9QU0VMX1BTRUxfQW5hbG9nSW5wdXQ2ICg2VUwpIC8qITwgQUlONiBzZWxlY3RlZCBhcyBhbmFsb2cgaW5wdXQgKi8NCisjZGVmaW5lIENPTVBfUFNFTF9QU0VMX0FuYWxvZ0lucHV0NyAoN1VMKSAvKiE8IEFJTjcgc2VsZWN0ZWQgYXMgYW5hbG9nIGlucHV0ICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfUkVGU0VMICovDQorLyogRGVzY3JpcHRpb246IFJlZmVyZW5jZSBzb3VyY2Ugc2VsZWN0ICovDQorDQorLyogQml0cyAyLi4wIDogUmVmZXJlbmNlIHNlbGVjdCAqLw0KKyNkZWZpbmUgQ09NUF9SRUZTRUxfUkVGU0VMX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFRlNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfUkVGU0VMX1JFRlNFTF9Nc2sgKDB4N1VMIDw8IENPTVBfUkVGU0VMX1JFRlNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9SRUZTRUxfUkVGU0VMX0ludDFWMiAoMFVMKSAvKiE8IFZSRUYgPSBpbnRlcm5hbCAxLjIgViByZWZlcmVuY2UgKFZERCAmZ3Q7PSAxLjcgVikgKi8NCisjZGVmaW5lIENPTVBfUkVGU0VMX1JFRlNFTF9JbnQxVjggKDFVTCkgLyohPCBWUkVGID0gaW50ZXJuYWwgMS44IFYgcmVmZXJlbmNlIChWREQgJmd0Oz0gVlJFRiArIDAuMiBWKSAqLw0KKyNkZWZpbmUgQ09NUF9SRUZTRUxfUkVGU0VMX0ludDJWNCAoMlVMKSAvKiE8IFZSRUYgPSBpbnRlcm5hbCAyLjQgViByZWZlcmVuY2UgKFZERCAmZ3Q7PSBWUkVGICsgMC4yIFYpICovDQorI2RlZmluZSBDT01QX1JFRlNFTF9SRUZTRUxfVkREICg0VUwpIC8qITwgVlJFRiA9IFZERCAqLw0KKyNkZWZpbmUgQ09NUF9SRUZTRUxfUkVGU0VMX0FSZWYgKDdVTCkgLyohPCBWUkVGID0gQVJFRiAoVkREICZndDs9IFZSRUYgJmd0Oz0gQVJFRk1JTikgKi8NCisNCisvKiBSZWdpc3RlcjogQ09NUF9FWFRSRUZTRUwgKi8NCisvKiBEZXNjcmlwdGlvbjogRXh0ZXJuYWwgcmVmZXJlbmNlIHNlbGVjdCAqLw0KKw0KKy8qIEJpdCAwIDogRXh0ZXJuYWwgYW5hbG9nIHJlZmVyZW5jZSBzZWxlY3QgKi8NCisjZGVmaW5lIENPTVBfRVhUUkVGU0VMX0VYVFJFRlNFTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFWFRSRUZTRUwgZmllbGQuICovDQorI2RlZmluZSBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfTXNrICgweDFVTCA8PCBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVYVFJFRlNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfRVhUUkVGU0VMX0VYVFJFRlNFTF9BbmFsb2dSZWZlcmVuY2UwICgwVUwpIC8qITwgVXNlIEFJTjAgYXMgZXh0ZXJuYWwgYW5hbG9nIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX0FuYWxvZ1JlZmVyZW5jZTEgKDFVTCkgLyohPCBVc2UgQUlOMSBhcyBleHRlcm5hbCBhbmFsb2cgcmVmZXJlbmNlICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfVEggKi8NCisvKiBEZXNjcmlwdGlvbjogVGhyZXNob2xkIGNvbmZpZ3VyYXRpb24gZm9yIGh5c3RlcmVzaXMgdW5pdCAqLw0KKw0KKy8qIEJpdHMgMTMuLjggOiBWVVAgPSAoVEhVUCsxKS82NCpWUkVGICovDQorI2RlZmluZSBDT01QX1RIX1RIVVBfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVEhVUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfVEhfVEhVUF9Nc2sgKDB4M0ZVTCA8PCBDT01QX1RIX1RIVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRIVVAgZmllbGQuICovDQorDQorLyogQml0cyA1Li4wIDogVkRPV04gPSAoVEhET1dOKzEpLzY0KlZSRUYgKi8NCisjZGVmaW5lIENPTVBfVEhfVEhET1dOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRIRE9XTiBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfVEhfVEhET1dOX01zayAoMHgzRlVMIDw8IENPTVBfVEhfVEhET1dOX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSERPV04gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IENPTVBfTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBNb2RlIGNvbmZpZ3VyYXRpb24gKi8NCisNCisvKiBCaXQgOCA6IE1haW4gb3BlcmF0aW9uIG1vZGUgKi8NCisjZGVmaW5lIENPTVBfTU9ERV9NQUlOX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BSU4gZmllbGQuICovDQorI2RlZmluZSBDT01QX01PREVfTUFJTl9Nc2sgKDB4MVVMIDw8IENPTVBfTU9ERV9NQUlOX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQUlOIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9NT0RFX01BSU5fU0UgKDBVTCkgLyohPCBTaW5nbGUgZW5kZWQgbW9kZSAqLw0KKyNkZWZpbmUgQ09NUF9NT0RFX01BSU5fRGlmZiAoMVVMKSAvKiE8IERpZmZlcmVudGlhbCBtb2RlICovDQorDQorLyogQml0cyAxLi4wIDogU3BlZWQgYW5kIHBvd2VyIG1vZGUgKi8NCisjZGVmaW5lIENPTVBfTU9ERV9TUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfTU9ERV9TUF9Nc2sgKDB4M1VMIDw8IENPTVBfTU9ERV9TUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1AgZmllbGQuICovDQorI2RlZmluZSBDT01QX01PREVfU1BfTG93ICgwVUwpIC8qITwgTG93IHBvd2VyIG1vZGUgKi8NCisjZGVmaW5lIENPTVBfTU9ERV9TUF9Ob3JtYWwgKDFVTCkgLyohPCBOb3JtYWwgbW9kZSAqLw0KKyNkZWZpbmUgQ09NUF9NT0RFX1NQX0hpZ2ggKDJVTCkgLyohPCBIaWdoIHNwZWVkIG1vZGUgKi8NCisNCisvKiBSZWdpc3RlcjogQ09NUF9IWVNUICovDQorLyogRGVzY3JpcHRpb246IENvbXBhcmF0b3IgaHlzdGVyZXNpcyBlbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IENvbXBhcmF0b3IgaHlzdGVyZXNpcyAqLw0KKyNkZWZpbmUgQ09NUF9IWVNUX0hZU1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSFlTVCBmaWVsZC4gKi8NCisjZGVmaW5lIENPTVBfSFlTVF9IWVNUX01zayAoMHgxVUwgPDwgQ09NUF9IWVNUX0hZU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEhZU1QgZmllbGQuICovDQorI2RlZmluZSBDT01QX0hZU1RfSFlTVF9Ob0h5c3QgKDBVTCkgLyohPCBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSFlTVF9IWVNUX0h5c3Q1MG1WICgxVUwpIC8qITwgQ29tcGFyYXRvciBoeXN0ZXJlc2lzIGVuYWJsZWQgKi8NCisNCisvKiBSZWdpc3RlcjogQ09NUF9JU09VUkNFICovDQorLyogRGVzY3JpcHRpb246IEN1cnJlbnQgc291cmNlIHNlbGVjdCBvbiBhbmFsb2cgaW5wdXQgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBDb21wYXJhdG9yIGh5c3RlcmVzaXMgKi8NCisjZGVmaW5lIENPTVBfSVNPVVJDRV9JU09VUkNFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElTT1VSQ0UgZmllbGQuICovDQorI2RlZmluZSBDT01QX0lTT1VSQ0VfSVNPVVJDRV9Nc2sgKDB4M1VMIDw8IENPTVBfSVNPVVJDRV9JU09VUkNFX1BvcykgLyohPCBCaXQgbWFzayBvZiBJU09VUkNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ09NUF9JU09VUkNFX0lTT1VSQ0VfT2ZmICgwVUwpIC8qITwgQ3VycmVudCBzb3VyY2UgZGlzYWJsZWQgKi8NCisjZGVmaW5lIENPTVBfSVNPVVJDRV9JU09VUkNFX0llbjJtQTUgKDFVTCkgLyohPCBDdXJyZW50IHNvdXJjZSBlbmFibGVkICgrLy0gMi41IHVBKSAqLw0KKyNkZWZpbmUgQ09NUF9JU09VUkNFX0lTT1VSQ0VfSWVuNW1BICgyVUwpIC8qITwgQ3VycmVudCBzb3VyY2UgZW5hYmxlZCAoKy8tIDUgdUEpICovDQorI2RlZmluZSBDT01QX0lTT1VSQ0VfSVNPVVJDRV9JZW4xMG1BICgzVUwpIC8qITwgQ3VycmVudCBzb3VyY2UgZW5hYmxlZCAoKy8tIDEwIHVBKSAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IENSWVBUT0NFTEwgKi8NCisvKiBEZXNjcmlwdGlvbjogQVJNIENyeXB0b0NlbGwgcmVnaXN0ZXIgaW50ZXJmYWNlICovDQorDQorLyogUmVnaXN0ZXI6IENSWVBUT0NFTExfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IENvbnRyb2wgcG93ZXIgYW5kIGNsb2NrIGZvciBBUk0gQ3J5cHRvQ2VsbCBzdWJzeXN0ZW0gKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBDcnlwdG9DZWxsIHN1YnN5c3RlbSAqLw0KKyNkZWZpbmUgQ1JZUFRPQ0VMTF9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIENSWVBUT0NFTExfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4MVVMIDw8IENSWVBUT0NFTExfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgQ1JZUFRPQ0VMTF9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgQ3J5cHRvQ2VsbCBzdWJzeXN0ZW0gZGlzYWJsZWQgKi8NCisjZGVmaW5lIENSWVBUT0NFTExfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgxVUwpIC8qITwgQ3J5cHRvQ2VsbCBzdWJzeXN0ZW0gZW5hYmxlZCAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEVDQiAqLw0KKy8qIERlc2NyaXB0aW9uOiBBRVMgRUNCIE1vZGUgRW5jcnlwdGlvbiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBFQ0JfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SRUNCIGV2ZW50ICovDQorI2RlZmluZSBFQ0JfSU5URU5TRVRfRVJST1JFQ0JfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1JFQ0IgZmllbGQuICovDQorI2RlZmluZSBFQ0JfSU5URU5TRVRfRVJST1JFQ0JfTXNrICgweDFVTCA8PCBFQ0JfSU5URU5TRVRfRVJST1JFQ0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SRUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VSUk9SRUNCX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVDQl9JTlRFTlNFVF9FUlJPUkVDQl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VSUk9SRUNCX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVDQiBldmVudCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VOREVDQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFQ0IgZmllbGQuICovDQorI2RlZmluZSBFQ0JfSU5URU5TRVRfRU5ERUNCX01zayAoMHgxVUwgPDwgRUNCX0lOVEVOU0VUX0VOREVDQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOU0VUX0VOREVDQl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFQ0JfSU5URU5TRVRfRU5ERUNCX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFQ0JfSU5URU5TRVRfRU5ERUNCX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBFQ0JfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1JFQ0IgZXZlbnQgKi8NCisjZGVmaW5lIEVDQl9JTlRFTkNMUl9FUlJPUkVDQl9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUkVDQiBmaWVsZC4gKi8NCisjZGVmaW5lIEVDQl9JTlRFTkNMUl9FUlJPUkVDQl9Nc2sgKDB4MVVMIDw8IEVDQl9JTlRFTkNMUl9FUlJPUkVDQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1JFQ0IgZmllbGQuICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRVJST1JFQ0JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VSUk9SRUNCX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRVJST1JFQ0JfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVDQiBldmVudCAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VOREVDQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFQ0IgZmllbGQuICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRU5ERUNCX01zayAoMHgxVUwgPDwgRUNCX0lOVEVOQ0xSX0VOREVDQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERUNCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUNCX0lOVEVOQ0xSX0VOREVDQl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRU5ERUNCX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFQ0JfSU5URU5DTFJfRU5ERUNCX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBFQ0JfRUNCREFUQVBUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFQ0IgYmxvY2sgZW5jcnlwdCBtZW1vcnkgcG9pbnRlcnMgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUG9pbnRlciB0byB0aGUgRUNCIGRhdGEgc3RydWN0dXJlIChzZWUgVGFibGUgMSBFQ0IgZGF0YSBzdHJ1Y3R1cmUgb3ZlcnZpZXcpICovDQorI2RlZmluZSBFQ0JfRUNCREFUQVBUUl9FQ0JEQVRBUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVDQkRBVEFQVFIgZmllbGQuICovDQorI2RlZmluZSBFQ0JfRUNCREFUQVBUUl9FQ0JEQVRBUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IEVDQl9FQ0JEQVRBUFRSX0VDQkRBVEFQVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVDQkRBVEFQVFIgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogRUdVICovDQorLyogRGVzY3JpcHRpb246IEV2ZW50IEdlbmVyYXRvciBVbml0IDAgKi8NCisNCisvKiBSZWdpc3RlcjogRUdVX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxNSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzE1XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxNSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxNV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQxNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzE0XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxNCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxNF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEzXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxM19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTNfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEyXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxMl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQxMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzExXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxMV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEwXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxMF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMTBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbOV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDkgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEOV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQ5X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ5IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEOV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs4XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEOCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ4X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOX1RSSUdHRVJFRDhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDggZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEOF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ4X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzddIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDdfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVENyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ3X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDYgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs1XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ1X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOX1RSSUdHRVJFRDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzRdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVENF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDRfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVENF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVENCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQ0X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbM10gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEM19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsyXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQyX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOX1RSSUdHRVJFRDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzFdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDFfTXNrICgweDFVTCA8PCBFR1VfSU5URU5fVFJJR0dFUkVEMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTl9UUklHR0VSRUQwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTl9UUklHR0VSRUQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOX1RSSUdHRVJFRDBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBFR1VfSU5URU5fVFJJR0dFUkVEMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEVHVV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxNV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTVfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE1X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTRdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE0X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxNCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxNF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEzXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxM19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTJfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEyX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTFdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDExX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDExX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEwXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDEwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzldIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ5IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDlfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEOSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ5X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbOF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDggZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ4X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ4X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs3XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ3X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDcgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDdfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzZdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDZfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVENl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVENiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ2X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbNV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENV9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ1X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs0XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ0X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzNdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDNfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEM19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMl0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMl9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQyX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzBdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDBfTXNrICgweDFVTCA8PCBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTlNFVF9UUklHR0VSRUQwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogRUdVX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTVdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE1X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE1X1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxNSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxNF0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTRfTXNrICgweDFVTCA8PCBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDE0X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEzXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxM19Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUUklHR0VSRURbMTJdIGV2ZW50ICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRSSUdHRVJFRDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEyX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBUUklHR0VSRUQxMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxMV0gZXZlbnQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMTEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTFfTXNrICgweDFVTCA8PCBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDExX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDExX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFJJR0dFUkVEWzEwXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBUUklHR0VSRUQxMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMF9Nc2sgKDB4MVVMIDw8IEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFJJR0dFUkVEMTAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDEwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMTBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs5XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEOSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ5X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDkgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEOV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEOV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs4XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEOCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ4X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDggZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEOF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEOF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs3XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ3X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDcgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDdfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs2XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ2X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDYgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDZfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs1XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ1X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDUgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFs0XSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVENCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQ0X01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDQgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVENF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFszXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMyBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQzX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDMgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsyXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMiBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQyX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDIgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFsxXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQxX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDEgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRSSUdHRVJFRFswXSBldmVudCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVFJJR0dFUkVEMCBmaWVsZC4gKi8NCisjZGVmaW5lIEVHVV9JTlRFTkNMUl9UUklHR0VSRUQwX01zayAoMHgxVUwgPDwgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRSSUdHRVJFRDAgZmllbGQuICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBFR1VfSU5URU5DTFJfVFJJR0dFUkVEMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgRUdVX0lOVEVOQ0xSX1RSSUdHRVJFRDBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorDQorLyogUGVyaXBoZXJhbDogRklDUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBGYWN0b3J5IEluZm9ybWF0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfQ09ERVBBR0VTSVpFICovDQorLyogRGVzY3JpcHRpb246IENvZGUgbWVtb3J5IHBhZ2Ugc2l6ZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBDb2RlIG1lbW9yeSBwYWdlIHNpemUgKi8NCisjZGVmaW5lIEZJQ1JfQ09ERVBBR0VTSVpFX0NPREVQQUdFU0laRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT0RFUEFHRVNJWkUgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0NPREVQQUdFU0laRV9DT0RFUEFHRVNJWkVfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9DT0RFUEFHRVNJWkVfQ09ERVBBR0VTSVpFX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT0RFUEFHRVNJWkUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfQ09ERVNJWkUgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29kZSBtZW1vcnkgc2l6ZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBDb2RlIG1lbW9yeSBzaXplIGluIG51bWJlciBvZiBwYWdlcyAqLw0KKyNkZWZpbmUgRklDUl9DT0RFU0laRV9DT0RFU0laRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT0RFU0laRSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfQ09ERVNJWkVfQ09ERVNJWkVfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9DT0RFU0laRV9DT0RFU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09ERVNJWkUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfREVWSUNFSUQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIERldmljZSBpZGVudGlmaWVyICovDQorDQorLyogQml0cyAzMS4uMCA6IDY0IGJpdCB1bmlxdWUgZGV2aWNlIGlkZW50aWZpZXIgKi8NCisjZGVmaW5lIEZJQ1JfREVWSUNFSURfREVWSUNFSURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgREVWSUNFSUQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0RFVklDRUlEX0RFVklDRUlEX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfREVWSUNFSURfREVWSUNFSURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVklDRUlEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0VSICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBFbmNyeXB0aW9uIHJvb3QsIHdvcmQgMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBFbmNyeXB0aW9uIHJvb3QsIHdvcmQgMCAqLw0KKyNkZWZpbmUgRklDUl9FUl9FUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUiBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfRVJfRVJfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9FUl9FUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfSVIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIElkZW50aXR5IFJvb3QsIHdvcmQgMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBJZGVudGl0eSBSb290LCB3b3JkIDAgKi8NCisjZGVmaW5lIEZJQ1JfSVJfSVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSVIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0lSX0lSX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfSVJfSVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0RFVklDRUFERFJUWVBFICovDQorLyogRGVzY3JpcHRpb246IERldmljZSBhZGRyZXNzIHR5cGUgKi8NCisNCisvKiBCaXQgMCA6IERldmljZSBhZGRyZXNzIHR5cGUgKi8NCisjZGVmaW5lIEZJQ1JfREVWSUNFQUREUlRZUEVfREVWSUNFQUREUlRZUEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgREVWSUNFQUREUlRZUEUgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0RFVklDRUFERFJUWVBFX0RFVklDRUFERFJUWVBFX01zayAoMHgxVUwgPDwgRklDUl9ERVZJQ0VBRERSVFlQRV9ERVZJQ0VBRERSVFlQRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREVWSUNFQUREUlRZUEUgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0RFVklDRUFERFJUWVBFX0RFVklDRUFERFJUWVBFX1B1YmxpYyAoMFVMKSAvKiE8IFB1YmxpYyBhZGRyZXNzICovDQorI2RlZmluZSBGSUNSX0RFVklDRUFERFJUWVBFX0RFVklDRUFERFJUWVBFX1JhbmRvbSAoMVVMKSAvKiE8IFJhbmRvbSBhZGRyZXNzICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfREVWSUNFQUREUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgRGV2aWNlIGFkZHJlc3MgMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiA0OCBiaXQgZGV2aWNlIGFkZHJlc3MgKi8NCisjZGVmaW5lIEZJQ1JfREVWSUNFQUREUl9ERVZJQ0VBRERSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERFVklDRUFERFIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0RFVklDRUFERFJfREVWSUNFQUREUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0RFVklDRUFERFJfREVWSUNFQUREUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREVWSUNFQUREUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9JTkZPX1BBUlQgKi8NCisvKiBEZXNjcmlwdGlvbjogUGFydCBjb2RlICovDQorDQorLyogQml0cyAzMS4uMCA6IFBhcnQgY29kZSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBUlRfUEFSVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBUlRfUEFSVF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0lORk9fUEFSVF9QQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBUlRfUEFSVF9ONTI4NDAgKDB4NTI4NDBVTCkgLyohPCBuUkY1Mjg0MCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1BBUlRfUEFSVF9VbnNwZWNpZmllZCAoMHhGRkZGRkZGRlVMKSAvKiE8IFVuc3BlY2lmaWVkICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfSU5GT19WQVJJQU5UICovDQorLyogRGVzY3JpcHRpb246IFBhcnQgdmFyaWFudCAoaGFyZHdhcmUgdmVyc2lvbiBhbmQgcHJvZHVjdGlvbiBjb25maWd1cmF0aW9uKS4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUGFydCB2YXJpYW50IChoYXJkd2FyZSB2ZXJzaW9uIGFuZCBwcm9kdWN0aW9uIGNvbmZpZ3VyYXRpb24pLiBFbmNvZGVkIGFzIEFTQ0lJLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBWQVJJQU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0lORk9fVkFSSUFOVF9WQVJJQU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBWQVJJQU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9BQUFBICgweDQxNDE0MTQxVUwpIC8qITwgQUFBQSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9BQUFCICgweDQxNDE0MTQyVUwpIC8qITwgQUFBQiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9BQUIwICgweDQxNDE0MjMwVUwpIC8qITwgQUFCMCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9BQUJBICgweDQxNDE0MjQxVUwpIC8qITwgQUFCQSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9BQUJCICgweDQxNDE0MjQyVUwpIC8qITwgQUFCQiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9BQkJBICgweDQxNDI0MjQxVUwpIC8qITwgQUJCQSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1ZBUklBTlRfVkFSSUFOVF9VbnNwZWNpZmllZCAoMHhGRkZGRkZGRlVMKSAvKiE8IFVuc3BlY2lmaWVkICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfSU5GT19QQUNLQUdFICovDQorLyogRGVzY3JpcHRpb246IFBhY2thZ2Ugb3B0aW9uICovDQorDQorLyogQml0cyAzMS4uMCA6IFBhY2thZ2Ugb3B0aW9uICovDQorI2RlZmluZSBGSUNSX0lORk9fUEFDS0FHRV9QQUNLQUdFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBQ0tBR0UgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0lORk9fUEFDS0FHRV9QQUNLQUdFX01zayAoMHhGRkZGRkZGRlVMIDw8IEZJQ1JfSU5GT19QQUNLQUdFX1BBQ0tBR0VfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBQ0tBR0UgZmllbGQuICovDQorI2RlZmluZSBGSUNSX0lORk9fUEFDS0FHRV9QQUNLQUdFX1FJICgweDIwMDRVTCkgLyohPCBRSXh4IC0gNzMtcGluIGFRRk4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19QQUNLQUdFX1BBQ0tBR0VfVW5zcGVjaWZpZWQgKDB4RkZGRkZGRkZVTCkgLyohPCBVbnNwZWNpZmllZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0lORk9fUkFNICovDQorLyogRGVzY3JpcHRpb246IFJBTSB2YXJpYW50ICovDQorDQorLyogQml0cyAzMS4uMCA6IFJBTSB2YXJpYW50ICovDQorI2RlZmluZSBGSUNSX0lORk9fUkFNX1JBTV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSQU0gZmllbGQuICovDQorI2RlZmluZSBGSUNSX0lORk9fUkFNX1JBTV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBGSUNSX0lORk9fUkFNX1JBTV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFNIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1JBTV9SQU1fSzE2ICgweDEwVUwpIC8qITwgMTYga0J5dGUgUkFNICovDQorI2RlZmluZSBGSUNSX0lORk9fUkFNX1JBTV9LMzIgKDB4MjBVTCkgLyohPCAzMiBrQnl0ZSBSQU0gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19SQU1fUkFNX0s2NCAoMHg0MFVMKSAvKiE8IDY0IGtCeXRlIFJBTSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1JBTV9SQU1fSzEyOCAoMHg4MFVMKSAvKiE8IDEyOCBrQnl0ZSBSQU0gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19SQU1fUkFNX0syNTYgKDB4MTAwVUwpIC8qITwgMjU2IGtCeXRlIFJBTSAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX1JBTV9SQU1fVW5zcGVjaWZpZWQgKDB4RkZGRkZGRkZVTCkgLyohPCBVbnNwZWNpZmllZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX0lORk9fRkxBU0ggKi8NCisvKiBEZXNjcmlwdGlvbjogRmxhc2ggdmFyaWFudCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBGbGFzaCB2YXJpYW50ICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRkxBU0ggZmllbGQuICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfTXNrICgweEZGRkZGRkZGVUwgPDwgRklDUl9JTkZPX0ZMQVNIX0ZMQVNIX1BvcykgLyohPCBCaXQgbWFzayBvZiBGTEFTSCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19GTEFTSF9GTEFTSF9LMTI4ICgweDgwVUwpIC8qITwgMTI4IGtCeXRlIEZMQVNIICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfSzI1NiAoMHgxMDBVTCkgLyohPCAyNTYga0J5dGUgRkxBU0ggKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19GTEFTSF9GTEFTSF9LNTEyICgweDIwMFVMKSAvKiE8IDUxMiBrQnl0ZSBGTEFTSCAqLw0KKyNkZWZpbmUgRklDUl9JTkZPX0ZMQVNIX0ZMQVNIX0sxMDI0ICgweDQwMFVMKSAvKiE8IDEgTUJ5dGUgRkxBU0ggKi8NCisjZGVmaW5lIEZJQ1JfSU5GT19GTEFTSF9GTEFTSF9LMjA0OCAoMHg4MDBVTCkgLyohPCAyIE1CeXRlIEZMQVNIICovDQorI2RlZmluZSBGSUNSX0lORk9fRkxBU0hfRkxBU0hfVW5zcGVjaWZpZWQgKDB4RkZGRkZGRkZVTCkgLyohPCBVbnNwZWNpZmllZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQTAgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgZGVmaW5pdGlvbiBBMC4gKi8NCisNCisvKiBCaXRzIDExLi4wIDogQSAoc2xvcGUgZGVmaW5pdGlvbikgcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQTBfQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0EwX0FfTXNrICgweEZGRlVMIDw8IEZJQ1JfVEVNUF9BMF9BX1BvcykgLyohPCBCaXQgbWFzayBvZiBBIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQTEgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgZGVmaW5pdGlvbiBBMS4gKi8NCisNCisvKiBCaXRzIDExLi4wIDogQSAoc2xvcGUgZGVmaW5pdGlvbikgcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQTFfQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0ExX0FfTXNrICgweEZGRlVMIDw8IEZJQ1JfVEVNUF9BMV9BX1BvcykgLyohPCBCaXQgbWFzayBvZiBBIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQTIgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgZGVmaW5pdGlvbiBBMi4gKi8NCisNCisvKiBCaXRzIDExLi4wIDogQSAoc2xvcGUgZGVmaW5pdGlvbikgcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQTJfQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0EyX0FfTXNrICgweEZGRlVMIDw8IEZJQ1JfVEVNUF9BMl9BX1BvcykgLyohPCBCaXQgbWFzayBvZiBBIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQTMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgZGVmaW5pdGlvbiBBMy4gKi8NCisNCisvKiBCaXRzIDExLi4wIDogQSAoc2xvcGUgZGVmaW5pdGlvbikgcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQTNfQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0EzX0FfTXNrICgweEZGRlVMIDw8IEZJQ1JfVEVNUF9BM19BX1BvcykgLyohPCBCaXQgbWFzayBvZiBBIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQTQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgZGVmaW5pdGlvbiBBNC4gKi8NCisNCisvKiBCaXRzIDExLi4wIDogQSAoc2xvcGUgZGVmaW5pdGlvbikgcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQTRfQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0E0X0FfTXNrICgweEZGRlVMIDw8IEZJQ1JfVEVNUF9BNF9BX1BvcykgLyohPCBCaXQgbWFzayBvZiBBIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQTUgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgZGVmaW5pdGlvbiBBNS4gKi8NCisNCisvKiBCaXRzIDExLi4wIDogQSAoc2xvcGUgZGVmaW5pdGlvbikgcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQTVfQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0E1X0FfTXNrICgweEZGRlVMIDw8IEZJQ1JfVEVNUF9BNV9BX1BvcykgLyohPCBCaXQgbWFzayBvZiBBIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQjAgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgQjAuICovDQorDQorLyogQml0cyAxMy4uMCA6IEIgKHktaW50ZXJjZXB0KSAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0IwX0JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQiBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CMF9CX01zayAoMHgzRkZGVUwgPDwgRklDUl9URU1QX0IwX0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9CMSAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBCMS4gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogQiAoeS1pbnRlcmNlcHQpICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjFfQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0IxX0JfTXNrICgweDNGRkZVTCA8PCBGSUNSX1RFTVBfQjFfQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0IyICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IEIyLiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiBCICh5LWludGVyY2VwdCkgKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CMl9CX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjJfQl9Nc2sgKDB4M0ZGRlVMIDw8IEZJQ1JfVEVNUF9CMl9CX1BvcykgLyohPCBCaXQgbWFzayBvZiBCIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfQjMgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgQjMuICovDQorDQorLyogQml0cyAxMy4uMCA6IEIgKHktaW50ZXJjZXB0KSAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0IzX0JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQiBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CM19CX01zayAoMHgzRkZGVUwgPDwgRklDUl9URU1QX0IzX0JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9CNCAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBCNC4gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogQiAoeS1pbnRlcmNlcHQpICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjRfQl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX0I0X0JfTXNrICgweDNGRkZVTCA8PCBGSUNSX1RFTVBfQjRfQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX0I1ICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IEI1LiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiBCICh5LWludGVyY2VwdCkgKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9CNV9CX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfQjVfQl9Nc2sgKDB4M0ZGRlVMIDw8IEZJQ1JfVEVNUF9CNV9CX1BvcykgLyohPCBCaXQgbWFzayBvZiBCIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfVDAgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VnbWVudCBlbmQgVDAuICovDQorDQorLyogQml0cyA3Li4wIDogVCAoc2VnbWVudCBlbmQpcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDBfVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1QwX1RfTXNrICgweEZGVUwgPDwgRklDUl9URU1QX1QwX1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9UMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWdtZW50IGVuZCBUMS4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBUIChzZWdtZW50IGVuZClyZWdpc3Rlci4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9UMV9UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDFfVF9Nc2sgKDB4RkZVTCA8PCBGSUNSX1RFTVBfVDFfVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9URU1QX1QyICovDQorLyogRGVzY3JpcHRpb246IFNlZ21lbnQgZW5kIFQyLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFQgKHNlZ21lbnQgZW5kKXJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1QyX1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9UMl9UX01zayAoMHhGRlVMIDw8IEZJQ1JfVEVNUF9UMl9UX1BvcykgLyohPCBCaXQgbWFzayBvZiBUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX1RFTVBfVDMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VnbWVudCBlbmQgVDMuICovDQorDQorLyogQml0cyA3Li4wIDogVCAoc2VnbWVudCBlbmQpcmVnaXN0ZXIuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDNfVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9URU1QX1QzX1RfTXNrICgweEZGVUwgPDwgRklDUl9URU1QX1QzX1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfVEVNUF9UNCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWdtZW50IGVuZCBUNC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBUIChzZWdtZW50IGVuZClyZWdpc3Rlci4gKi8NCisjZGVmaW5lIEZJQ1JfVEVNUF9UNF9UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX1RFTVBfVDRfVF9Nc2sgKDB4RkZVTCA8PCBGSUNSX1RFTVBfVDRfVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9ORkNfVEFHSEVBREVSMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZWZhdWx0IGhlYWRlciBmb3IgTkZDIFRhZy4gU29mdHdhcmUgY2FuIHJlYWQgdGhlc2UgdmFsdWVzIHRvIHBvcHVsYXRlIE5GQ0lEMV8zUkRfTEFTVCwgTkZDSUQxXzJORF9MQVNUIGFuZCBORkNJRDFfTEFTVC4gKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgMyAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMF9VRDNfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMyBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQzX01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDMgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDIgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQyX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX1VEMl9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIwX1VEMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQyIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDEgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQxX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQxX01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjBfVUQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDEgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogRGVmYXVsdCBNYW51ZmFjdHVyZXIgSUQ6IE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBoYXMgSUNNIDB4NUYgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjBfTUZHSURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUZHSUQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIwX01GR0lEX01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjBfTUZHSURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1GR0lEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBGSUNSX05GQ19UQUdIRUFERVIxICovDQorLyogRGVzY3JpcHRpb246IERlZmF1bHQgaGVhZGVyIGZvciBORkMgVGFnLiBTb2Z0d2FyZSBjYW4gcmVhZCB0aGVzZSB2YWx1ZXMgdG8gcG9wdWxhdGUgTkZDSUQxXzNSRF9MQVNULCBORkNJRDFfMk5EX0xBU1QgYW5kIE5GQ0lEMV9MQVNULiAqLw0KKw0KKy8qIEJpdHMgMzEuLjI0IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSA3ICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIxX1VEN19Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgVUQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMV9VRDdfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSMV9VRDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVENyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgNiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMV9VRDZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVENiBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ2X01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDYgZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgNSAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMV9VRDVfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVUQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMV9VRDVfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSMV9VRDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVENSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDQgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ0X1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVENCBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ0X01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjFfVUQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEZJQ1JfTkZDX1RBR0hFQURFUjIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVmYXVsdCBoZWFkZXIgZm9yIE5GQyBUYWcuIFNvZnR3YXJlIGNhbiByZWFkIHRoZXNlIHZhbHVlcyB0byBwb3B1bGF0ZSBORkNJRDFfM1JEX0xBU1QsIE5GQ0lEMV8yTkRfTEFTVCBhbmQgTkZDSUQxX0xBU1QuICovDQorDQorLyogQml0cyAzMS4uMjQgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDExICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIyX1VEMTFfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMTEgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIyX1VEMTFfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSMl9VRDExX1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDExIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAxMCAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDEwX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDEwX01zayAoMHhGRlVMIDw8IEZJQ1JfTkZDX1RBR0hFQURFUjJfVUQxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQxMCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSA5ICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIyX1VEOV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBVRDkgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIyX1VEOV9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIyX1VEOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVUQ5IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgOCAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDhfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVUQ4IGZpZWxkLiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSMl9VRDhfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSMl9VRDhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVEOCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogRklDUl9ORkNfVEFHSEVBREVSMyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZWZhdWx0IGhlYWRlciBmb3IgTkZDIFRhZy4gU29mdHdhcmUgY2FuIHJlYWQgdGhlc2UgdmFsdWVzIHRvIHBvcHVsYXRlIE5GQ0lEMV8zUkRfTEFTVCwgTkZDSUQxXzJORF9MQVNUIGFuZCBORkNJRDFfTEFTVC4gKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IFVuaXF1ZSBpZGVudGlmaWVyIGJ5dGUgMTUgKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjNfVUQxNV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgVUQxNSBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjNfVUQxNV9Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVEMTUgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDE0ICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTRfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMTQgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTRfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSM19VRDE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDE0IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBVbmlxdWUgaWRlbnRpZmllciBieXRlIDEzICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTNfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVUQxMyBmaWVsZC4gKi8NCisjZGVmaW5lIEZJQ1JfTkZDX1RBR0hFQURFUjNfVUQxM19Nc2sgKDB4RkZVTCA8PCBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVEMTMgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogVW5pcXVlIGlkZW50aWZpZXIgYnl0ZSAxMiAqLw0KKyNkZWZpbmUgRklDUl9ORkNfVEFHSEVBREVSM19VRDEyX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVEMTIgZmllbGQuICovDQorI2RlZmluZSBGSUNSX05GQ19UQUdIRUFERVIzX1VEMTJfTXNrICgweEZGVUwgPDwgRklDUl9ORkNfVEFHSEVBREVSM19VRDEyX1BvcykgLyohPCBCaXQgbWFzayBvZiBVRDEyIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEdQSU9URSAqLw0KKy8qIERlc2NyaXB0aW9uOiBHUElPIFRhc2tzIGFuZCBFdmVudHMgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT1RFX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMzEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUE9SVCBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX1BPUlRfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfUE9SVF9Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTlNFVF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX1BPUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX1BPUlRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9QT1JUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzddIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU43X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjdfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU43X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjdfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgSU5bNl0gZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONl9Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTlNFVF9JTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBJTls1XSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU41X01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOU0VUX0lONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lONV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU41X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU41X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzRdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU40X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjRfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU40X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgSU5bM10gZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOM19Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTlNFVF9JTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOM19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBJTlsyXSBldmVudCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4yX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOU0VUX0lOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4yX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4yX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzFdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4xX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjFfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5TRVRfSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5TRVRfSU4xX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgSU5bMF0gZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMF9Nc2sgKDB4MVVMIDw8IEdQSU9URV9JTlRFTlNFVF9JTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTlNFVF9JTjBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOU0VUX0lOMF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT1RFX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDMxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQT1JUIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfUE9SVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9QT1JUX01zayAoMHgxVUwgPDwgR1BJT1RFX0lOVEVOQ0xSX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfUE9SVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfUE9SVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT1RFX0lOVEVOQ0xSX1BPUlRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzddIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU43X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjdfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU43X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjdfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzZdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjZfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU42X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjZfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzVdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjVfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU41X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzRdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU40X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjRfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU40X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzNdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjNfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4zX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzJdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjJfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4yX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzFdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4xX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjFfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4xX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIElOWzBdIGV2ZW50ICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjBfTXNrICgweDFVTCA8PCBHUElPVEVfSU5URU5DTFJfSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPVEVfSU5URU5DTFJfSU4wX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEdQSU9URV9JTlRFTkNMUl9JTjBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9URV9DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIENvbmZpZ3VyYXRpb24gZm9yIE9VVFtuXSwgU0VUW25dIGFuZCBDTFJbbl0gdGFza3MgYW5kIElOW25dIGV2ZW50ICovDQorDQorLyogQml0IDIwIDogV2hlbiBpbiB0YXNrIG1vZGU6IEluaXRpYWwgdmFsdWUgb2YgdGhlIG91dHB1dCB3aGVuIHRoZSBHUElPVEUgY2hhbm5lbCBpcyBjb25maWd1cmVkLiBXaGVuIGluIGV2ZW50IG1vZGU6IE5vIGVmZmVjdC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfT1VUSU5JVF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgT1VUSU5JVCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfT1VUSU5JVF9Nc2sgKDB4MVVMIDw8IEdQSU9URV9DT05GSUdfT1VUSU5JVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUSU5JVCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfT1VUSU5JVF9Mb3cgKDBVTCkgLyohPCBUYXNrIG1vZGU6IEluaXRpYWwgdmFsdWUgb2YgcGluIGJlZm9yZSB0YXNrIHRyaWdnZXJpbmcgaXMgbG93ICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX09VVElOSVRfSGlnaCAoMVVMKSAvKiE8IFRhc2sgbW9kZTogSW5pdGlhbCB2YWx1ZSBvZiBwaW4gYmVmb3JlIHRhc2sgdHJpZ2dlcmluZyBpcyBoaWdoICovDQorDQorLyogQml0cyAxNy4uMTYgOiBXaGVuIEluIHRhc2sgbW9kZTogT3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBvdXRwdXQgd2hlbiBPVVRbbl0gdGFzayBpcyB0cmlnZ2VyZWQuIFdoZW4gSW4gZXZlbnQgbW9kZTogT3BlcmF0aW9uIG9uIGlucHV0IHRoYXQgc2hhbGwgdHJpZ2dlciBJTltuXSBldmVudC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPTEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Nc2sgKDB4M1VMIDw8IEdQSU9URV9DT05GSUdfUE9MQVJJVFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPTEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Ob25lICgwVUwpIC8qITwgVGFzayBtb2RlOiBObyBlZmZlY3Qgb24gcGluIGZyb20gT1VUW25dIHRhc2suIEV2ZW50IG1vZGU6IG5vIElOW25dIGV2ZW50IGdlbmVyYXRlZCBvbiBwaW4gYWN0aXZpdHkuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX1BPTEFSSVRZX0xvVG9IaSAoMVVMKSAvKiE8IFRhc2sgbW9kZTogU2V0IHBpbiBmcm9tIE9VVFtuXSB0YXNrLiBFdmVudCBtb2RlOiBHZW5lcmF0ZSBJTltuXSBldmVudCB3aGVuIHJpc2luZyBlZGdlIG9uIHBpbi4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfSGlUb0xvICgyVUwpIC8qITwgVGFzayBtb2RlOiBDbGVhciBwaW4gZnJvbSBPVVRbbl0gdGFzay4gRXZlbnQgbW9kZTogR2VuZXJhdGUgSU5bbl0gZXZlbnQgd2hlbiBmYWxsaW5nIGVkZ2Ugb24gcGluLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT0xBUklUWV9Ub2dnbGUgKDNVTCkgLyohPCBUYXNrIG1vZGU6IFRvZ2dsZSBwaW4gZnJvbSBPVVRbbl0uIEV2ZW50IG1vZGU6IEdlbmVyYXRlIElOW25dIHdoZW4gYW55IGNoYW5nZSBvbiBwaW4uICovDQorDQorLyogQml0cyAxNC4uMTMgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT1JUX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT1JUX01zayAoMHgzVUwgPDwgR1BJT1RFX0NPTkZJR19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTIuLjggOiBHUElPIG51bWJlciBhc3NvY2lhdGVkIHdpdGggU0VUW25dLCBDTFJbbl0gYW5kIE9VVFtuXSB0YXNrcyBhbmQgSU5bbl0gZXZlbnQgKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfUFNFTF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QU0VMX01zayAoMHgxRlVMIDw8IEdQSU9URV9DT05GSUdfUFNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFNFTCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBNb2RlICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX01PREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfTU9ERV9Nc2sgKDB4M1VMIDw8IEdQSU9URV9DT05GSUdfTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9URV9DT05GSUdfTU9ERV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkLiBQaW4gc3BlY2lmaWVkIGJ5IFBTRUwgd2lsbCBub3QgYmUgYWNxdWlyZWQgYnkgdGhlIEdQSU9URSBtb2R1bGUuICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX01PREVfRXZlbnQgKDFVTCkgLyohPCBFdmVudCBtb2RlICovDQorI2RlZmluZSBHUElPVEVfQ09ORklHX01PREVfVGFzayAoM1VMKSAvKiE8IFRhc2sgbW9kZSAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IEkyUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBJbnRlci1JQyBTb3VuZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYUFRSVVBEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5fVFhQVFJVUERfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgVFhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5fVFhQVFJVUERfTXNrICgweDFVTCA8PCBJMlNfSU5URU5fVFhQVFJVUERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1RYUFRSVVBEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1RYUFRSVVBEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOX1NUT1BQRURfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTl9TVE9QUEVEX01zayAoMHgxVUwgPDwgSTJTX0lOVEVOX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5fU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIEkyU19JTlRFTl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUlhQVFJVUEQgZXZlbnQgKi8NCisjZGVmaW5lIEkyU19JTlRFTl9SWFBUUlVQRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTl9SWFBUUlVQRF9Nc2sgKDB4MVVMIDw8IEkyU19JTlRFTl9SWFBUUlVQRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5fUlhQVFJVUERfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBJMlNfSU5URU5fUlhQVFJVUERfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYUFRSVVBEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfVFhQVFJVUERfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgVFhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfVFhQVFJVUERfTXNrICgweDFVTCA8PCBJMlNfSU5URU5TRVRfVFhQVFJVUERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1RYUFRSVVBEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9UWFBUUlVQRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1RYUFRSVVBEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9TVE9QUEVEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IEkyU19JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYUFRSVVBEIGV2ZW50ICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfUlhQVFJVUERfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUlhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5TRVRfUlhQVFJVUERfTXNrICgweDFVTCA8PCBJMlNfSU5URU5TRVRfUlhQVFJVUERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1JYUFRSVVBEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTlNFVF9SWFBUUlVQRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOU0VUX1JYUFRSVVBEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhQVFJVUEQgZXZlbnQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9UWFBUUlVQRF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9UWFBUUlVQRF9Nc2sgKDB4MVVMIDw8IEkyU19JTlRFTkNMUl9UWFBUUlVQRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhQVFJVUEQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfVFhQVFJVUERfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1RYUFRSVVBEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfVFhQVFJVUERfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9TVE9QUEVEX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IEkyU19JTlRFTkNMUl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9TVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWFBUUlVQRCBldmVudCAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1JYUFRSVVBEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYUFRSVVBEIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0lOVEVOQ0xSX1JYUFRSVVBEX01zayAoMHgxVUwgPDwgSTJTX0lOVEVOQ0xSX1JYUFRSVVBEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFBUUlVQRCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9SWFBUUlVQRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBJMlNfSU5URU5DTFJfUlhQVFJVUERfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIEkyU19JTlRFTkNMUl9SWFBUUlVQRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgSTJTIG1vZHVsZS4gKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBJMlMgbW9kdWxlLiAqLw0KKyNkZWZpbmUgSTJTX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0VOQUJMRV9FTkFCTEVfTXNrICgweDFVTCA8PCBJMlNfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBJMlNfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19DT05GSUdfTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBJMlMgbW9kZS4gKi8NCisNCisvKiBCaXQgMCA6IEkyUyBtb2RlLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NT0RFX01PREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTU9ERV9NT0RFX01zayAoMHgxVUwgPDwgSTJTX0NPTkZJR19NT0RFX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX01PREVfTU9ERV9NYXN0ZXIgKDBVTCkgLyohPCBNYXN0ZXIgbW9kZS4gU0NLIGFuZCBMUkNLIGdlbmVyYXRlZCBmcm9tIGludGVybmFsIG1hc3RlciBjbGNvayAoTUNLKSBhbmQgb3V0cHV0IG9uIHBpbnMgZGVmaW5lZCBieSBQU0VMLnh4eC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTU9ERV9NT0RFX1NsYXZlICgxVUwpIC8qITwgU2xhdmUgbW9kZS4gU0NLIGFuZCBMUkNLIGdlbmVyYXRlZCBieSBleHRlcm5hbCBtYXN0ZXIgYW5kIHJlY2VpdmVkIG9uIHBpbnMgZGVmaW5lZCBieSBQU0VMLnh4eCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX1JYRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogUmVjZXB0aW9uIChSWCkgZW5hYmxlLiAqLw0KKw0KKy8qIEJpdCAwIDogUmVjZXB0aW9uIChSWCkgZW5hYmxlLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SWEVOX1JYRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhFTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUlhFTl9SWEVOX01zayAoMHgxVUwgPDwgSTJTX0NPTkZJR19SWEVOX1JYRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRU4gZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JYRU5fUlhFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlY2VwdGlvbiBkaXNhYmxlZCBhbmQgbm93IGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBSWEQuUFRSIGFkZHJlc3MuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JYRU5fUlhFTl9FbmFibGVkICgxVUwpIC8qITwgUmVjZXB0aW9uIGVuYWJsZWQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19DT05GSUdfVFhFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBUcmFuc21pc3Npb24gKFRYKSBlbmFibGUuICovDQorDQorLyogQml0IDAgOiBUcmFuc21pc3Npb24gKFRYKSBlbmFibGUuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1RYRU5fVFhFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19UWEVOX1RYRU5fTXNrICgweDFVTCA8PCBJMlNfQ09ORklHX1RYRU5fVFhFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhFTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfVFhFTl9UWEVOX0Rpc2FibGVkICgwVUwpIC8qITwgVHJhbnNtaXNzaW9uIGRpc2FibGVkIGFuZCBub3cgZGF0YSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgUlhELlRYRCBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19UWEVOX1RYRU5fRW5hYmxlZCAoMVVMKSAvKiE8IFRyYW5zbWlzc2lvbiBlbmFibGVkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX01DS0VOICovDQorLyogRGVzY3JpcHRpb246IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZW5hYmxlLiAqLw0KKw0KKy8qIEJpdCAwIDogTWFzdGVyIGNsb2NrIGdlbmVyYXRvciBlbmFibGUuICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0VOX01DS0VOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1DS0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9Nc2sgKDB4MVVMIDw8IEkyU19DT05GSUdfTUNLRU5fTUNLRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1DS0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZGlzYWJsZWQgYW5kIFBTRUwuTUNLIG5vdCBjb25uZWN0ZWQoYXZhaWxhYmxlIGFzIEdQSU8pLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tFTl9NQ0tFTl9FbmFibGVkICgxVUwpIC8qITwgTWFzdGVyIGNsb2NrIGdlbmVyYXRvciBydW5uaW5nIGFuZCBNQ0sgb3V0cHV0IG9uIFBTRUwuTUNLLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX01DS0ZSRVEgKi8NCisvKiBEZXNjcmlwdGlvbjogTWFzdGVyIGNsb2NrIGdlbmVyYXRvciBmcmVxdWVuY3kuICovDQorDQorLyogQml0cyAzMS4uMCA6IE1hc3RlciBjbG9jayBnZW5lcmF0b3IgZnJlcXVlbmN5LiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUNLRlJFUSBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRX01zayAoMHhGRkZGRkZGRlVMIDw8IEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQ0tGUkVRIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMTI1ICgweDAyMEMwMDAwVUwpIC8qITwgMzIgTUh6IC8gMTI1ID0gMC4yNTYgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVY2MyAoMHgwNDEwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDYzID0gMC41MDc5MzY1IE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWNDIgKDB4MDYwMDAwMDBVTCkgLyohPCAzMiBNSHogLyA0MiA9IDAuNzYxOTA0OCBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjMyICgweDA4MDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMzIgPSAxLjAgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYzMSAoMHgwODQwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDMxID0gMS4wMzIyNTgxIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMzAgKDB4MDg4MDAwMDBVTCkgLyohPCAzMiBNSHogLyAzMCA9IDEuMDY2NjY2NyBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjIzICgweDBCMDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMjMgPSAxLjM5MTMwNDMgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYyMSAoMHgwQzAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDIxID0gMS41MjM4MDk1ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYxNiAoMHgxMDAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDE2ID0gMi4wIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWMTUgKDB4MTEwMDAwMDBVTCkgLyohPCAzMiBNSHogLyAxNSA9IDIuMTMzMzMzMyBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjExICgweDE2MDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMTEgPSAyLjkwOTA5MDkgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYxMCAoMHgxODAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDEwID0gMy4yIE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWOCAoMHgyMDAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDggPSA0LjAgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVY2ICgweDI4MDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gNiA9IDUuMzMzMzMzMyBNSHogKi8NCisjZGVmaW5lIEkyU19DT05GSUdfTUNLRlJFUV9NQ0tGUkVRXzMyTURJVjUgKDB4MzAwMDAwMDBVTCkgLyohPCAzMiBNSHogLyA1ID0gNi40IE1IeiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19NQ0tGUkVRX01DS0ZSRVFfMzJNRElWNCAoMHg0MDAwMDAwMFVMKSAvKiE8IDMyIE1IeiAvIDQgPSA4LjAgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYzICgweDUwMDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMyA9IDEwLjY2NjY2NjcgTUh6ICovDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0ZSRVFfTUNLRlJFUV8zMk1ESVYyICgweDgwMDAwMDAwVUwpIC8qITwgMzIgTUh6IC8gMiA9IDE2LjAgTUh6ICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19DT05GSUdfUkFUSU8gKi8NCisvKiBEZXNjcmlwdGlvbjogTUNLIC8gTFJDSyByYXRpby4gKi8NCisNCisvKiBCaXRzIDMuLjAgOiBNQ0sgLyBMUkNLIHJhdGlvLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSQVRJTyBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUkFUSU9fUkFUSU9fTXNrICgweEZVTCA8PCBJMlNfQ09ORklHX1JBVElPX1JBVElPX1BvcykgLyohPCBCaXQgbWFzayBvZiBSQVRJTyBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUkFUSU9fUkFUSU9fMzJYICgwVUwpIC8qITwgTFJDSyA9IE1DSyAvIDMyICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzQ4WCAoMVVMKSAvKiE8IExSQ0sgPSBNQ0sgLyA0OCAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19SQVRJT19SQVRJT182NFggKDJVTCkgLyohPCBMUkNLID0gTUNLIC8gNjQgKi8NCisjZGVmaW5lIEkyU19DT05GSUdfUkFUSU9fUkFUSU9fOTZYICgzVUwpIC8qITwgTFJDSyA9IE1DSyAvIDk2ICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzEyOFggKDRVTCkgLyohPCBMUkNLID0gTUNLIC8gMTI4ICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzE5MlggKDVVTCkgLyohPCBMUkNLID0gTUNLIC8gMTkyICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzI1NlggKDZVTCkgLyohPCBMUkNLID0gTUNLIC8gMjU2ICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzM4NFggKDdVTCkgLyohPCBMUkNLID0gTUNLIC8gMzg0ICovDQorI2RlZmluZSBJMlNfQ09ORklHX1JBVElPX1JBVElPXzUxMlggKDhVTCkgLyohPCBMUkNLID0gTUNLIC8gNTEyICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19DT05GSUdfU1dJRFRIICovDQorLyogRGVzY3JpcHRpb246IFNhbXBsZSB3aWR0aC4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBTYW1wbGUgd2lkdGguICovDQorI2RlZmluZSBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1dJRFRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIX01zayAoMHgzVUwgPDwgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBTV0lEVEggZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfOEJpdCAoMFVMKSAvKiE8IDggYml0LiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIXzE2Qml0ICgxVUwpIC8qITwgMTYgYml0LiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19TV0lEVEhfU1dJRFRIXzI0Qml0ICgyVUwpIC8qITwgMjQgYml0LiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX0FMSUdOICovDQorLyogRGVzY3JpcHRpb246IEFsaWdubWVudCBvZiBzYW1wbGUgd2l0aGluIGEgZnJhbWUuICovDQorDQorLyogQml0IDAgOiBBbGlnbm1lbnQgb2Ygc2FtcGxlIHdpdGhpbiBhIGZyYW1lLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19BTElHTl9BTElHTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTElHTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQUxJR05fQUxJR05fTXNrICgweDFVTCA8PCBJMlNfQ09ORklHX0FMSUdOX0FMSUdOX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTElHTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQUxJR05fQUxJR05fTGVmdCAoMFVMKSAvKiE8IExlZnQtYWxpZ25lZC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQUxJR05fQUxJR05fUmlnaHQgKDFVTCkgLyohPCBSaWdodC1hbGlnbmVkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfQ09ORklHX0ZPUk1BVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBGcmFtZSBmb3JtYXQuICovDQorDQorLyogQml0IDAgOiBGcmFtZSBmb3JtYXQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0ZPUk1BVF9GT1JNQVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRk9STUFUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX0NPTkZJR19GT1JNQVRfRk9STUFUX01zayAoMHgxVUwgPDwgSTJTX0NPTkZJR19GT1JNQVRfRk9STUFUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGT1JNQVQgZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0ZPUk1BVF9GT1JNQVRfSTJTICgwVUwpIC8qITwgT3JpZ2luYWwgSTJTIGZvcm1hdC4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfRk9STUFUX0ZPUk1BVF9BbGlnbmVkICgxVUwpIC8qITwgQWx0ZXJuYXRlIChsZWZ0LSBvciByaWdodC1hbGlnbmVkKSBmb3JtYXQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19DT05GSUdfQ0hBTk5FTFMgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGNoYW5uZWxzLiAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IEVuYWJsZSBjaGFubmVscy4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0hBTk5FTFMgZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX01zayAoMHgzVUwgPDwgSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0hBTk5FTFMgZmllbGQuICovDQorI2RlZmluZSBJMlNfQ09ORklHX0NIQU5ORUxTX0NIQU5ORUxTX1N0ZXJlbyAoMFVMKSAvKiE8IFN0ZXJlby4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfTGVmdCAoMVVMKSAvKiE8IExlZnQgb25seS4gKi8NCisjZGVmaW5lIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfUmlnaHQgKDJVTCkgLyohPCBSaWdodCBvbmx5LiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfUlhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWNlaXZlIGJ1ZmZlciBSQU0gc3RhcnQgYWRkcmVzcy4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUmVjZWl2ZSBidWZmZXIgRGF0YSBSQU0gc3RhcnQgYWRkcmVzcy4gV2hlbiByZWNlaXZpbmcsIHdvcmRzIGNvbnRhaW5pbmcgc2FtcGxlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhpcyBhZGRyZXNzLiBUaGlzIGFkZHJlc3MgaXMgYSB3b3JkIGFsaWduZWQgRGF0YSBSQU0gYWRkcmVzcy4gKi8NCisjZGVmaW5lIEkyU19SWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBJMlNfUlhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgSTJTX1JYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19UWERfUFRSICovDQorLyogRGVzY3JpcHRpb246IFRyYW5zbWl0IGJ1ZmZlciBSQU0gc3RhcnQgYWRkcmVzcy4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogVHJhbnNtaXQgYnVmZmVyIERhdGEgUkFNIHN0YXJ0IGFkZHJlc3MuIFdoZW4gdHJhbnNtaXR0aW5nLCB3b3JkcyBjb250YWluaW5nIHNhbXBsZXMgd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhpcyBhZGRyZXNzLiBUaGlzIGFkZHJlc3MgaXMgYSB3b3JkIGFsaWduZWQgRGF0YSBSQU0gYWRkcmVzcy4gKi8NCisjZGVmaW5lIEkyU19UWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBJMlNfVFhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgSTJTX1RYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19SWFRYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2l6ZSBvZiBSWEQgYW5kIFRYRCBidWZmZXJzLiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiBTaXplIG9mIFJYRCBhbmQgVFhEIGJ1ZmZlcnMgaW4gbnVtYmVyIG9mIDMyIGJpdCB3b3Jkcy4gKi8NCisjZGVmaW5lIEkyU19SWFRYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19SWFRYRF9NQVhDTlRfTUFYQ05UX01zayAoMHgzRkZGVUwgPDwgSTJTX1JYVFhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogSTJTX1BTRUxfTUNLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIE1DSyBzaWduYWwuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9NQ0tfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IEkyU19QU0VMX01DS19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9NQ0tfUE9SVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTUNLX1BPUlRfTXNrICgweDNVTCA8PCBJMlNfUFNFTF9NQ0tfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9NQ0tfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX01DS19QSU5fTXNrICgweDFGVUwgPDwgSTJTX1BTRUxfTUNLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBJMlNfUFNFTF9TQ0sgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgU0NLIHNpZ25hbC4gKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NDS19DT05ORUNUX01zayAoMHgxVUwgPDwgSTJTX1BTRUxfU0NLX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA5Li44IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIEkyU19QU0VMX1NDS19QT1JUX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9TQ0tfUE9SVF9Nc2sgKDB4M1VMIDw8IEkyU19QU0VMX1NDS19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIEkyU19QU0VMX1NDS19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0NLX1BJTl9Nc2sgKDB4MUZVTCA8PCBJMlNfUFNFTF9TQ0tfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19QU0VMX0xSQ0sgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgTFJDSyBzaWduYWwuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTFJDS19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTFJDS19DT05ORUNUX01zayAoMHgxVUwgPDwgSTJTX1BTRUxfTFJDS19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTFJDS19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA5Li44IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfUE9SVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfTFJDS19QT1JUX01zayAoMHgzVUwgPDwgSTJTX1BTRUxfTFJDS19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX0xSQ0tfUElOX01zayAoMHgxRlVMIDw8IEkyU19QU0VMX0xSQ0tfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19QU0VMX1NESU4gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgU0RJTiBzaWduYWwuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RJTl9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RJTl9DT05ORUNUX01zayAoMHgxVUwgPDwgSTJTX1BTRUxfU0RJTl9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RJTl9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA5Li44IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fUE9SVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RJTl9QT1JUX01zayAoMHgzVUwgPDwgSTJTX1BTRUxfU0RJTl9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIEkyU19QU0VMX1NESU5fUElOX01zayAoMHgxRlVMIDw8IEkyU19QU0VMX1NESU5fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IEkyU19QU0VMX1NET1VUICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNET1VUIHNpZ25hbC4gKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBJMlNfUFNFTF9TRE9VVF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IEkyU19QU0VMX1NET1VUX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9TRE9VVF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIEkyU19QU0VMX1NET1VUX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9TRE9VVF9QT1JUX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBJMlNfUFNFTF9TRE9VVF9QT1JUX01zayAoMHgzVUwgPDwgSTJTX1BTRUxfU0RPVVRfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBJMlNfUFNFTF9TRE9VVF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgSTJTX1BTRUxfU0RPVVRfUElOX01zayAoMHgxRlVMIDw8IEkyU19QU0VMX1NET1VUX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IExQQ09NUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBMb3cgUG93ZXIgQ29tcGFyYXRvciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIENST1NTIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfQ1JPU1NfU1RPUF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDUk9TU19TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19DUk9TU19TVE9QX01zayAoMHgxVUwgPDwgTFBDT01QX1NIT1JUU19DUk9TU19TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUk9TU19TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19DUk9TU19TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19DUk9TU19TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMyA6IFNob3J0Y3V0IGJldHdlZW4gVVAgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19VUF9TVE9QX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFVQX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1VQX1NUT1BfTXNrICgweDFVTCA8PCBMUENPTVBfU0hPUlRTX1VQX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVQX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1VQX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1VQX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAyIDogU2hvcnRjdXQgYmV0d2VlbiBET1dOIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfRE9XTl9TVE9QX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIERPV05fU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfRE9XTl9TVE9QX01zayAoMHgxVUwgPDwgTFBDT01QX1NIT1JUU19ET1dOX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPV05fU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfRE9XTl9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19ET1dOX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxIDogU2hvcnRjdXQgYmV0d2VlbiBSRUFEWSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1JFQURZX1NUT1BfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfUkVBRFlfU1RPUF9Nc2sgKDB4MVVMIDw8IExQQ09NUF9TSE9SVFNfUkVBRFlfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfUkVBRFlfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIExQQ09NUF9TSE9SVFNfUkVBRFlfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDAgOiBTaG9ydGN1dCBiZXR3ZWVuIFJFQURZIGV2ZW50IGFuZCBTQU1QTEUgdGFzayAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFlfU0FNUExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfTXNrICgweDFVTCA8PCBMUENPTVBfU0hPUlRTX1JFQURZX1NBTVBMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFlfU0FNUExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1NIT1JUU19SRUFEWV9TQU1QTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBMUENPTVBfU0hPUlRTX1JFQURZX1NBTVBMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IExQQ09NUF9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ1JPU1MgZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9DUk9TU19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDUk9TUyBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9DUk9TU19Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTlNFVF9DUk9TU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JPU1MgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfQ1JPU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0NST1NTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfQ1JPU1NfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVAgZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9VUF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBVUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9VUF9Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTlNFVF9VUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfVVBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX1VQX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfVVBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRE9XTiBldmVudCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0RPV05fUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRE9XTiBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9ET1dOX01zayAoMHgxVUwgPDwgTFBDT01QX0lOVEVOU0VUX0RPV05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfRE9XTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfRE9XTl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX0RPV05fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTlNFVF9SRUFEWV9Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTlNFVF9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOU0VUX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5TRVRfUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IExQQ09NUF9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDUk9TUyBldmVudCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX0NST1NTX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENST1NTIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX0NST1NTX01zayAoMHgxVUwgPDwgTFBDT01QX0lOVEVOQ0xSX0NST1NTX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUk9TUyBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9DUk9TU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfQ1JPU1NfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9DUk9TU19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVVAgZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9VUF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBVUCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9VUF9Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTkNMUl9VUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVAgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfVVBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX1VQX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfVVBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERPV04gZXZlbnQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9ET1dOX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIERPV04gZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfRE9XTl9Nc2sgKDB4MVVMIDw8IExQQ09NUF9JTlRFTkNMUl9ET1dOX1BvcykgLyohPCBCaXQgbWFzayBvZiBET1dOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX0RPV05fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX0RPV05fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9ET1dOX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0lOVEVOQ0xSX1JFQURZX01zayAoMHgxVUwgPDwgTFBDT01QX0lOVEVOQ0xSX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBMUENPTVBfSU5URU5DTFJfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9JTlRFTkNMUl9SRUFEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTFBDT01QX1JFU1VMVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb21wYXJlIHJlc3VsdCAqLw0KKw0KKy8qIEJpdCAwIDogUmVzdWx0IG9mIGxhc3QgY29tcGFyZS4gRGVjaXNpb24gcG9pbnQgU0FNUExFIHRhc2suICovDQorI2RlZmluZSBMUENPTVBfUkVTVUxUX1JFU1VMVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNVTFQgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfUkVTVUxUX1JFU1VMVF9Nc2sgKDB4MVVMIDw8IExQQ09NUF9SRVNVTFRfUkVTVUxUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNVTFQgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfUkVTVUxUX1JFU1VMVF9CZWxvdyAoMFVMKSAvKiE8IElucHV0IHZvbHRhZ2UgaXMgYmVsb3cgdGhlIHJlZmVyZW5jZSB0aHJlc2hvbGQgKFZJTisgJmx0OyBWSU4tKS4gKi8NCisjZGVmaW5lIExQQ09NUF9SRVNVTFRfUkVTVUxUX0Fib3ZlICgxVUwpIC8qITwgSW5wdXQgdm9sdGFnZSBpcyBhYm92ZSB0aGUgcmVmZXJlbmNlIHRocmVzaG9sZCAoVklOKyAmZ3Q7IFZJTi0pLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBMUENPTVAgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBMUENPTVAgKi8NCisjZGVmaW5lIExQQ09NUF9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9FTkFCTEVfRU5BQkxFX01zayAoMHgzVUwgPDwgTFBDT01QX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTFBDT01QX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfUFNFTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBJbnB1dCBwaW4gc2VsZWN0ICovDQorDQorLyogQml0cyAyLi4wIDogQW5hbG9nIHBpbiBzZWxlY3QgKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFNFTCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9QU0VMX1BTRUxfTXNrICgweDdVTCA8PCBMUENPTVBfUFNFTF9QU0VMX1BvcykgLyohPCBCaXQgbWFzayBvZiBQU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDAgKDBVTCkgLyohPCBBSU4wIHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDEgKDFVTCkgLyohPCBBSU4xIHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDIgKDJVTCkgLyohPCBBSU4yIHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDMgKDNVTCkgLyohPCBBSU4zIHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDQgKDRVTCkgLyohPCBBSU40IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDUgKDVVTCkgLyohPCBBSU41IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDYgKDZVTCkgLyohPCBBSU42IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKyNkZWZpbmUgTFBDT01QX1BTRUxfUFNFTF9BbmFsb2dJbnB1dDcgKDdVTCkgLyohPCBBSU43IHNlbGVjdGVkIGFzIGFuYWxvZyBpbnB1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBMUENPTVBfUkVGU0VMICovDQorLyogRGVzY3JpcHRpb246IFJlZmVyZW5jZSBzZWxlY3QgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBSZWZlcmVuY2Ugc2VsZWN0ICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUZTRUwgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9Nc2sgKDB4RlVMIDw8IExQQ09NUF9SRUZTRUxfUkVGU0VMX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUZTRUwgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYxXzhWZGQgKDBVTCkgLyohPCBWREQgKiAxLzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYyXzhWZGQgKDFVTCkgLyohPCBWREQgKiAyLzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYzXzhWZGQgKDJVTCkgLyohPCBWREQgKiAzLzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY0XzhWZGQgKDNVTCkgLyohPCBWREQgKiA0Lzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY1XzhWZGQgKDRVTCkgLyohPCBWREQgKiA1Lzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY2XzhWZGQgKDVVTCkgLyohPCBWREQgKiA2Lzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWY3XzhWZGQgKDZVTCkgLyohPCBWREQgKiA3Lzggc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9BUmVmICg3VUwpIC8qITwgRXh0ZXJuYWwgYW5hbG9nIHJlZmVyZW5jZSBzZWxlY3RlZCAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMV8xNlZkZCAoOFVMKSAvKiE8IFZERCAqIDEvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYzXzE2VmRkICg5VUwpIC8qITwgVkREICogMy8xNiBzZWxlY3RlZCBhcyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjVfMTZWZGQgKDEwVUwpIC8qITwgVkREICogNS8xNiBzZWxlY3RlZCBhcyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjdfMTZWZGQgKDExVUwpIC8qITwgVkREICogNy8xNiBzZWxlY3RlZCBhcyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjlfMTZWZGQgKDEyVUwpIC8qITwgVkREICogOS8xNiBzZWxlY3RlZCBhcyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVGU0VMX1JlZjExXzE2VmRkICgxM1VMKSAvKiE8IFZERCAqIDExLzE2IHNlbGVjdGVkIGFzIHJlZmVyZW5jZSAqLw0KKyNkZWZpbmUgTFBDT01QX1JFRlNFTF9SRUZTRUxfUmVmMTNfMTZWZGQgKDE0VUwpIC8qITwgVkREICogMTMvMTYgc2VsZWN0ZWQgYXMgcmVmZXJlbmNlICovDQorI2RlZmluZSBMUENPTVBfUkVGU0VMX1JFRlNFTF9SZWYxNV8xNlZkZCAoMTVVTCkgLyohPCBWREQgKiAxNS8xNiBzZWxlY3RlZCBhcyByZWZlcmVuY2UgKi8NCisNCisvKiBSZWdpc3RlcjogTFBDT01QX0VYVFJFRlNFTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFeHRlcm5hbCByZWZlcmVuY2Ugc2VsZWN0ICovDQorDQorLyogQml0IDAgOiBFeHRlcm5hbCBhbmFsb2cgcmVmZXJlbmNlIHNlbGVjdCAqLw0KKyNkZWZpbmUgTFBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVhUUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfTXNrICgweDFVTCA8PCBMUENPTVBfRVhUUkVGU0VMX0VYVFJFRlNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVhUUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0VYVFJFRlNFTF9FWFRSRUZTRUxfQW5hbG9nUmVmZXJlbmNlMCAoMFVMKSAvKiE8IFVzZSBBSU4wIGFzIGV4dGVybmFsIGFuYWxvZyByZWZlcmVuY2UgKi8NCisjZGVmaW5lIExQQ09NUF9FWFRSRUZTRUxfRVhUUkVGU0VMX0FuYWxvZ1JlZmVyZW5jZTEgKDFVTCkgLyohPCBVc2UgQUlOMSBhcyBleHRlcm5hbCBhbmFsb2cgcmVmZXJlbmNlICovDQorDQorLyogUmVnaXN0ZXI6IExQQ09NUF9BTkFERVRFQ1QgKi8NCisvKiBEZXNjcmlwdGlvbjogQW5hbG9nIGRldGVjdCBjb25maWd1cmF0aW9uICovDQorDQorLyogQml0cyAxLi4wIDogQW5hbG9nIGRldGVjdCBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBMUENPTVBfQU5BREVURUNUX0FOQURFVEVDVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTkFERVRFQ1QgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfQU5BREVURUNUX0FOQURFVEVDVF9Nc2sgKDB4M1VMIDw8IExQQ09NUF9BTkFERVRFQ1RfQU5BREVURUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTkFERVRFQ1QgZmllbGQuICovDQorI2RlZmluZSBMUENPTVBfQU5BREVURUNUX0FOQURFVEVDVF9Dcm9zcyAoMFVMKSAvKiE8IEdlbmVyYXRlIEFOQURFVEVDVCBvbiBjcm9zc2luZywgYm90aCB1cHdhcmQgY3Jvc3NpbmcgYW5kIGRvd253YXJkIGNyb3NzaW5nICovDQorI2RlZmluZSBMUENPTVBfQU5BREVURUNUX0FOQURFVEVDVF9VcCAoMVVMKSAvKiE8IEdlbmVyYXRlIEFOQURFVEVDVCBvbiB1cHdhcmQgY3Jvc3Npbmcgb25seSAqLw0KKyNkZWZpbmUgTFBDT01QX0FOQURFVEVDVF9BTkFERVRFQ1RfRG93biAoMlVMKSAvKiE8IEdlbmVyYXRlIEFOQURFVEVDVCBvbiBkb3dud2FyZCBjcm9zc2luZyBvbmx5ICovDQorDQorLyogUmVnaXN0ZXI6IExQQ09NUF9IWVNUICovDQorLyogRGVzY3JpcHRpb246IENvbXBhcmF0b3IgaHlzdGVyZXNpcyBlbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IENvbXBhcmF0b3IgaHlzdGVyZXNpcyBlbmFibGUgKi8NCisjZGVmaW5lIExQQ09NUF9IWVNUX0hZU1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSFlTVCBmaWVsZC4gKi8NCisjZGVmaW5lIExQQ09NUF9IWVNUX0hZU1RfTXNrICgweDFVTCA8PCBMUENPTVBfSFlTVF9IWVNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBIWVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTFBDT01QX0hZU1RfSFlTVF9Ob0h5c3QgKDBVTCkgLyohPCBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIExQQ09NUF9IWVNUX0hZU1RfSHlzdDUwbVYgKDFVTCkgLyohPCBDb21wYXJhdG9yIGh5c3RlcmVzaXMgZGlzYWJsZWQgKHR5cC4gNTAgbVYpICovDQorDQorDQorLyogUGVyaXBoZXJhbDogTVdVICovDQorLyogRGVzY3JpcHRpb246IE1lbW9yeSBXYXRjaCBVbml0ICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMVJBX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUFJFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9QUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjFXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1BSRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUFJFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMF0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMFdBX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUFJFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9QUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1BSRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9SRUdJT04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OM1JBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04zV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUkVHSU9OM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjNXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsyXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjJSQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMlJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1JFR0lPTjJSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjJSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04yUkFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9SRUdJT04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04yV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMldBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMVJBX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjFXQV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMVdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOX1JFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTl9SRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTl9SRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5fUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5fUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOX1JFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMV0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVJBX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUFJFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjFSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9QUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMVdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOU0VUX1BSRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04wUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMF0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMFdBX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1BSRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5TRVRfUFJFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9QUkVHSU9OMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5TRVRfUFJFR0lPTjBXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjNSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjNSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zV0FfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjNXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04zV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04zV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjNXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjNXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjJSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjJSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04yV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjJXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjJXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xUkFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjFSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xV0FfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjFXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjFXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjBSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wV0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTlNFVF9SRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTlNFVF9SRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOU0VUX1JFR0lPTjBXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1BSRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDI2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFXQV9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMVdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1BSRUdJT04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjFXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04xV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDI1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1BSRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDI0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBXQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9QUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1BSRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUFJFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1BSRUdJT04wV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlszXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNSQV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OM1JBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1JFR0lPTjNSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OM1JBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OM1JBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zV0FfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9SRUdJT04zV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04zV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjNXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMlJBX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04yUkFfTXNrICgweDFVTCA8PCBNV1VfSU5URU5DTFJfUkVHSU9OMlJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMlJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04yUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04yUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsyXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJXQV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMldBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1JFR0lPTjJXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjJXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMldBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMldBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xUkFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9SRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjFSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVdBX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfSU5URU5DTFJfUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04xV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBSQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX0lOVEVOQ0xSX1JFR0lPTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfSU5URU5DTFJfUkVHSU9OMFJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wV0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9JTlRFTkNMUl9SRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9JTlRFTkNMUl9SRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX0lOVEVOQ0xSX1JFR0lPTjBXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX05NSUVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjcgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1BSRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjYgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFXQV9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMVdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1BSRUdJT04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjUgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1BSRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBXQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1BSRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUFJFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9QUkVHSU9OMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlszXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjNSQV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OM1JBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1JFR0lPTjNSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjNSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04zUkFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04zV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5fUkVHSU9OM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjNXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9SRUdJT04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04yUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMlJBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsyXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjJXQV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMldBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1JFR0lPTjJXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjJXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04yV0FfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMVJBX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5fUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMV0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04xV0FfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTl9SRUdJT04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjBSQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMFJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOX1JFR0lPTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTl9SRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5fUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5fUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTVdVX05NSUVOX1JFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9OTUlFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNyA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xUkFfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9QUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNiA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9QUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMVdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9QUkVHSU9OMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUFJFR0lPTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9QUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1BSRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9QUkVHSU9OMFdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9SRUdJT04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjNSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjNSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzNdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUkVHSU9OM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04zV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsyXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJSQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMlJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOU0VUX1JFR0lPTjJSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMlJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMlJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9SRUdJT04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04yV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjJXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVJBX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04xUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUkVHSU9OMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04xUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFXQV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOU0VUX1JFR0lPTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMVdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTlNFVF9SRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOU0VUX1JFR0lPTjBSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5TRVRfUkVHSU9OMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5TRVRfUkVHSU9OMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTlNFVF9SRUdJT04wV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9OTUlFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzFdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1BSRUdJT04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDI2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUFJFR0lPTlsxXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9QUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVHSU9OMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMVdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMFJBX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04wUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUFJFR0lPTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBQUkVHSU9OWzBdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBXQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUFJFR0lPTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9QUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1BSRUdJT04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUFJFR0lPTjBXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1BSRUdJT04wV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bM10uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zUkFfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9SRUdJT04zUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjNSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04zUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlszXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNXQV9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OM1dBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1JFR0lPTjNXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjNXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OM1dBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OM1dBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzJdLlJBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMlJBX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yUkFfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUkVHSU9OMlJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMlJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMl0uV0EgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9SRUdJT04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04yV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjJXQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjJXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlsxXS5SQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVJBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1JFR0lPTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgbm9uLW1hc2thYmxlIGludGVycnVwdCBmb3IgUkVHSU9OWzFdLldBIGV2ZW50ICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVdBX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFR0lPTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04xV0FfTXNrICgweDFVTCA8PCBNV1VfTk1JRU5DTFJfUkVHSU9OMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUdJT04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04xV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBub24tbWFza2FibGUgaW50ZXJydXB0IGZvciBSRUdJT05bMF0uUkEgZXZlbnQgKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wUkFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUkVHSU9OMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9OTUlFTkNMUl9SRUdJT04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFR0lPTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9OTUlFTkNMUl9SRUdJT04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBSQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgZm9yIFJFR0lPTlswXS5XQSBldmVudCAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBXQV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUdJT04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMFdBX01zayAoMHgxVUwgPDwgTVdVX05NSUVOQ0xSX1JFR0lPTjBXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVHSU9OMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX05NSUVOQ0xSX1JFR0lPTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBNV1VfTk1JRU5DTFJfUkVHSU9OMFdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgU291cmNlIG9mIGV2ZW50L2ludGVycnVwdCBpbiByZWdpb24gMCwgd3JpdGUgYWNjZXNzIGRldGVjdGVkIHdoaWxlIGNvcnJlc3BvbmRpbmcgc3VicmVnaW9uIHdhcyBlbmFibGVkIGZvciB3YXRjaGluZyAqLw0KKw0KKy8qIEJpdCAzMSA6IFN1YnJlZ2lvbiAzMSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMzFfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDMwIDogU3VicmVnaW9uIDMwIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMzAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjMwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjMwX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjkgOiBTdWJyZWdpb24gMjkgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI5X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjlfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjlfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyOCA6IFN1YnJlZ2lvbiAyOCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjhfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyOF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyOF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI3IDogU3VicmVnaW9uIDI3IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyN19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI3X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI3X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjYgOiBTdWJyZWdpb24gMjYgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI2X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjZfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjZfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyNSA6IFN1YnJlZ2lvbiAyNSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjVfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI0IDogU3VicmVnaW9uIDI0IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyNF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI0X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjI0X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjMgOiBTdWJyZWdpb24gMjMgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIzX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjNfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjNfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyMiA6IFN1YnJlZ2lvbiAyMiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjJfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMl9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIxIDogU3VicmVnaW9uIDIxIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIxX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIxX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMjAgOiBTdWJyZWdpb24gMjAgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjIwX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjBfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMjBfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxOSA6IFN1YnJlZ2lvbiAxOSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTlfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE4IDogU3VicmVnaW9uIDE4IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxOF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE4X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE4X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTcgOiBTdWJyZWdpb24gMTcgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE3X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTdfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTdfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxNiA6IFN1YnJlZ2lvbiAxNiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTZfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNl9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE1IDogU3VicmVnaW9uIDE1IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE1X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE1X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTQgOiBTdWJyZWdpb24gMTQgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjE0X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTRfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTRfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMyA6IFN1YnJlZ2lvbiAxMyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTNfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxM19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxM19BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDEyIDogU3VicmVnaW9uIDEyIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEyX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEyX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMTEgOiBTdWJyZWdpb24gMTEgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMTEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjExX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTFfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTFfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxMCA6IFN1YnJlZ2lvbiAxMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMTBfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxMF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDkgOiBTdWJyZWdpb24gOSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I5X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjlfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA4IDogU3VicmVnaW9uIDggaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjhfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSOF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I4X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgNyA6IFN1YnJlZ2lvbiA3IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgU1I3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I3X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I3X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjdfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSN19BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDYgOiBTdWJyZWdpb24gNiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I2X05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjZfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA1IDogU3VicmVnaW9uIDUgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjVfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I1X0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgNCA6IFN1YnJlZ2lvbiA0IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU1I0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I0X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1I0X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjRfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSNF9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDMgOiBTdWJyZWdpb24gMyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSM19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IzX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjNfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyIDogU3VicmVnaW9uIDIgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjJfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMl9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHdyaXRlIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IyX0FjY2VzcyAoMVVMKSAvKiE8IFdyaXRlIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMSA6IFN1YnJlZ2lvbiAxIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjFfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyB3cml0ZSBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMV9BY2Nlc3MgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDAgOiBTdWJyZWdpb24gMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFdBX1NSMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUV0FfU1IwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gd3JpdGUgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRXQV9TUjBfQWNjZXNzICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgU291cmNlIG9mIGV2ZW50L2ludGVycnVwdCBpbiByZWdpb24gMCwgcmVhZCBhY2Nlc3MgZGV0ZWN0ZWQgd2hpbGUgY29ycmVzcG9uZGluZyBzdWJyZWdpb24gd2FzIGVuYWJsZWQgZm9yIHdhdGNoaW5nICovDQorDQorLyogQml0IDMxIDogU3VicmVnaW9uIDMxIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzMV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMzEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMxX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMzFfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDMwIDogU3VicmVnaW9uIDMwIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMzAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjMwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMzBfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI5IDogU3VicmVnaW9uIDI5IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyOV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI5X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjlfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI4IDogU3VicmVnaW9uIDI4IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyOF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI4X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjhfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI3IDogU3VicmVnaW9uIDI3IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyN19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI3X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjdfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI2IDogU3VicmVnaW9uIDI2IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI2X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjZfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI1IDogU3VicmVnaW9uIDI1IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI1X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjVfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDI0IDogU3VicmVnaW9uIDI0IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyNF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjI0X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjRfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIzIDogU3VicmVnaW9uIDIzIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyM19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIzX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjNfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIyIDogU3VicmVnaW9uIDIyIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIyX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjJfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIxIDogU3VicmVnaW9uIDIxIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIxX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjFfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDIwIDogU3VicmVnaW9uIDIwIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjIwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMjBfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE5IDogU3VicmVnaW9uIDE5IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxOV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE5X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTlfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE4IDogU3VicmVnaW9uIDE4IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxOF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE4X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMThfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE3IDogU3VicmVnaW9uIDE3IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxN19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE3X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTdfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE2IDogU3VicmVnaW9uIDE2IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE2X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTZfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE1IDogU3VicmVnaW9uIDE1IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE1X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTVfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDE0IDogU3VicmVnaW9uIDE0IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxNF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjE0X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTRfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDEzIDogU3VicmVnaW9uIDEzIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxM19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEzX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTNfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDEyIDogU3VicmVnaW9uIDEyIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEyX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTJfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDExIDogU3VicmVnaW9uIDExIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjExX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTFfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDEwIDogU3VicmVnaW9uIDEwIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IxMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMTAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjEwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMTBfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDkgOiBTdWJyZWdpb24gOSBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOV9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I5IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I5X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSOV9BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgOCA6IFN1YnJlZ2lvbiA4IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgU1I4IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I4X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I4X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjggZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjhfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyByZWFkIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I4X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA3IDogU3VicmVnaW9uIDcgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjcgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjdfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSN19Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjdfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDYgOiBTdWJyZWdpb24gNiBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNl9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I2IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I2X05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNl9BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgNSA6IFN1YnJlZ2lvbiA1IGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgU1I1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I1X01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I1X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjUgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjVfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyByZWFkIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1I1X0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA0IDogU3VicmVnaW9uIDQgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjQgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjRfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSNF9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjRfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDMgOiBTdWJyZWdpb24gMyBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSM19Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IzIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IzX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSM19BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBCaXQgMiA6IFN1YnJlZ2lvbiAyIGluIHJlZ2lvbiAwICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyX01zayAoMHgxVUwgPDwgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjIgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjJfTm9BY2Nlc3MgKDBVTCkgLyohPCBObyByZWFkIGFjY2VzcyBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IyX0FjY2VzcyAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzKGVzKSBvY2N1cnJlZCBpbiB0aGlzIHN1YnJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxIDogU3VicmVnaW9uIDEgaW4gcmVnaW9uIDAgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjFfTXNrICgweDFVTCA8PCBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMV9Ob0FjY2VzcyAoMFVMKSAvKiE8IE5vIHJlYWQgYWNjZXNzIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorI2RlZmluZSBNV1VfUEVSUkVHSU9OX1NVQlNUQVRSQV9TUjFfQWNjZXNzICgxVUwpIC8qITwgUmVhZCBhY2Nlc3MoZXMpIG9jY3VycmVkIGluIHRoaXMgc3VicmVnaW9uICovDQorDQorLyogQml0IDAgOiBTdWJyZWdpb24gMCBpbiByZWdpb24gMCAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMF9Nc2sgKDB4MVVMIDw8IE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BFUlJFR0lPTl9TVUJTVEFUUkFfU1IwX05vQWNjZXNzICgwVUwpIC8qITwgTm8gcmVhZCBhY2Nlc3Mgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QRVJSRUdJT05fU1VCU1RBVFJBX1NSMF9BY2Nlc3MgKDFVTCkgLyohPCBSZWFkIGFjY2Vzcyhlcykgb2NjdXJyZWQgaW4gdGhpcyBzdWJyZWdpb24gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1JFR0lPTkVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZS9kaXNhYmxlIHJlZ2lvbnMgd2F0Y2ggKi8NCisNCisvKiBCaXQgMjcgOiBFbmFibGUvZGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjFSQV9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMVJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOX1BSR04xUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjFSQV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMVJBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjYgOiBFbmFibGUvZGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04xV0FfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9QUkdOMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04xV0FfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04xV0FfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjUgOiBFbmFibGUvZGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzBdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjBSQV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMFJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOX1BSR04wUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjBSQV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9QUkdOMFJBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjQgOiBFbmFibGUvZGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUFJHTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9QUkdOMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04wV0FfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1BSR04wV0FfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZS9kaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblszXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjNSQV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOM1JBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOX1JHTjNSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjNSQV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjNSQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZS9kaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bM10gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04zV0FfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjNXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04zV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04zV0FfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOM1dBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNSA6IEVuYWJsZS9kaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsyXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjJSQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMlJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOX1JHTjJSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjJSQV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjJSQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZS9kaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMl0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04yV0FfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMldBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjJXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04yV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04yV0FfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMldBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZS9kaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMVJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOX1JHTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjFSQV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjFSQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZS9kaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04xV0FfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjFXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04xV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04xV0FfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMVdBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZS9kaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjBSQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMFJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOX1JHTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjBSQV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjBSQV9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZS9kaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04wV0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOX1JHTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTl9SR04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTl9SR04wV0FfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5fUkdOMFdBX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1JFR0lPTkVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSByZWdpb25zIHdhdGNoICovDQorDQorLyogQml0IDI3IDogRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVJBX1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04xUkFfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUFJHTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjFSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjYgOiBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04xV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUFJHTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04xV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjUgOiBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wUkFfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjBSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9QUkdOMFJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9QUkdOMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiAqLw0KKw0KKy8qIEJpdCAyNCA6IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wV0FfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9QUkdOMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1BSR04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjBXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUFJHTjBXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblszXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNSQV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1JBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1JHTjNSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1JBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1JBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bM10gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04zV0FfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOM1dBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjNXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9SR04zV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04zV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04zV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOM1dBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNSA6IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMl0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yUkFfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9SR04yUkFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjJSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJSQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzJdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04yV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUkdOMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMldBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMldBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjJXQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDMgOiBFbmFibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVJBX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjFSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xUkFfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5TRVRfUkdOMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xUkFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xUkFfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDIgOiBFbmFibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjFXQV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMVdBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1JHTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjFXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjFXQV9FbmFibGVkICgxVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04xV0FfU2V0ICgxVUwpIC8qITwgRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBSQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOU0VUX1JHTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFJBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiByZWdpb25bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04wV0FfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkdOMFdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOU0VUX1JHTjBXQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTlNFVF9SR04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04wV0FfRGlzYWJsZWQgKDBVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTlNFVF9SR04wV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5TRVRfUkdOMFdBX1NldCAoMVVMKSAvKiE8IEVuYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gKi8NCisNCisvKiBSZWdpc3RlcjogTVdVX1JFR0lPTkVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgcmVnaW9ucyB3YXRjaCAqLw0KKw0KKy8qIEJpdCAyNyA6IERpc2FibGUgcmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gUFJFR0lPTlsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xUkFfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjFSQV9Nc2sgKDB4MVVMIDw8IE1XVV9SRUdJT05FTkNMUl9QUkdOMVJBX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xUkFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xUkFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiAqLw0KKw0KKy8qIEJpdCAyNiA6IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMV0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVdBX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMVdBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUFJHTjFXQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgUFJFR0lPTiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xV0FfRW5hYmxlZCAoMVVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04xV0FfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjUgOiBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIFBSRUdJT05bMF0gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFJBX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1BSR04wUkFfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUFJHTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJHTjBSQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFJBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBSQV9FbmFibGVkICgxVUwpIC8qITwgUmVhZCBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gKi8NCisNCisvKiBCaXQgMjQgOiBEaXNhYmxlIHdyaXRlIGFjY2VzcyB3YXRjaCBpbiBQUkVHSU9OWzBdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBXQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFdBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1BSR04wV0FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUFJHTjBXQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFdyaXRlIGFjY2VzcyB3YXRjaCBpbiB0aGlzIFBSRUdJT04gaXMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9QUkdOMFdBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyBQUkVHSU9OICovDQorDQorLyogQml0IDcgOiBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblszXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNSQV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04zUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1JBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjNSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOM1JBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1JBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1JBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA2IDogRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzNdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1dBX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjNXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04zV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUkdOM1dBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04zV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1dBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOM1dBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjNXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDUgOiBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsyXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJSQV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04yUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMlJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjJSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMlJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMlJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMlJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCA0IDogRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzJdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMldBX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjJXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04yV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUkdOMldBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04yV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMldBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMldBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjJXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDMgOiBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblsxXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFSQV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04xUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjFSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMVJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAyIDogRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzFdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVdBX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjFXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04xV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUkdOMVdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04xV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVdBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMVdBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjFXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogQml0IDEgOiBEaXNhYmxlIHJlYWQgYWNjZXNzIHdhdGNoIGluIHJlZ2lvblswXSAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBSQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSR04wUkEgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFJBX01zayAoMHgxVUwgPDwgTVdVX1JFR0lPTkVOQ0xSX1JHTjBSQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkdOMFJBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBSQV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFJBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiBpcyBlbmFibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFJBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSByZWFkIGFjY2VzcyB3YXRjaCBpbiB0aGlzIHJlZ2lvbiAqLw0KKw0KKy8qIEJpdCAwIDogRGlzYWJsZSB3cml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gcmVnaW9uWzBdICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFdBX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJHTjBXQSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05FTkNMUl9SR04wV0FfTXNrICgweDFVTCA8PCBNV1VfUkVHSU9ORU5DTFJfUkdOMFdBX1BvcykgLyohPCBCaXQgbWFzayBvZiBSR04wV0EgZmllbGQuICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFdBX0Rpc2FibGVkICgwVUwpIC8qITwgV3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uIGlzIGRpc2FibGVkICovDQorI2RlZmluZSBNV1VfUkVHSU9ORU5DTFJfUkdOMFdBX0VuYWJsZWQgKDFVTCkgLyohPCBXcml0ZSBhY2Nlc3Mgd2F0Y2ggaW4gdGhpcyByZWdpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTkVOQ0xSX1JHTjBXQV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgd3JpdGUgYWNjZXNzIHdhdGNoIGluIHRoaXMgcmVnaW9uICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9SRUdJT05fU1RBUlQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFN0YXJ0IGFkZHJlc3MgZm9yIHJlZ2lvbiAwICovDQorDQorLyogQml0cyAzMS4uMCA6IFN0YXJ0IGFkZHJlc3MgZm9yIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTl9TVEFSVF9TVEFSVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9SRUdJT05fU1RBUlRfU1RBUlRfTXNrICgweEZGRkZGRkZGVUwgPDwgTVdVX1JFR0lPTl9TVEFSVF9TVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE1XVV9SRUdJT05fRU5EICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBFbmQgYWRkcmVzcyBvZiByZWdpb24gMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBFbmQgYWRkcmVzcyBvZiByZWdpb24uICovDQorI2RlZmluZSBNV1VfUkVHSU9OX0VORF9FTkRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1JFR0lPTl9FTkRfRU5EX01zayAoMHhGRkZGRkZGRlVMIDw8IE1XVV9SRUdJT05fRU5EX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUFJFR0lPTl9TVEFSVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NUQVJUX1NUQVJUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1RBUlRfU1RBUlRfTXNrICgweEZGRkZGRkZGVUwgPDwgTVdVX1BSRUdJT05fU1RBUlRfU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUFJFR0lPTl9FTkQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9FTkRfRU5EX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX0VORF9FTkRfTXNrICgweEZGRkZGRkZGVUwgPDwgTVdVX1BSRUdJT05fRU5EX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBNV1VfUFJFR0lPTl9TVUJTICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBTdWJyZWdpb25zIG9mIHJlZ2lvbiAwICovDQorDQorLyogQml0IDMxIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAzMSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IzMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IzMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjMxX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDMwIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAzMCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IzMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IzMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IzMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IzMF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjMwX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI5IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyOSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjI5X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI4IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyOCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyOF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjI4X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI3IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyNyBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyN19Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyN19FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjI3X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI2IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyNiBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNl9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNl9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjI2X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI1IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyNSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjI1X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI0IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyNCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgU1IyNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyNF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjI0X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIzIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyMyBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyM19Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyM19FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjIzX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIyIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyMiBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMl9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMl9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjIyX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIxIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyMSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjIxX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIwIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAyMCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IyMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IyMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IyMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyMF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjIwX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE5IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxOSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxOSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjE5X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE4IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxOCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxOF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjE4X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE3IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxNyBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxN19Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxN19FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjE3X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE2IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxNiBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNl9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNl9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjE2X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE1IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxNSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjE1X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE0IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxNCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgU1IxNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxNCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxNF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjE0X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDEzIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxMyBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxM19Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMyBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxM19FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjEzX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDEyIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxMiBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMl9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMl9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjEyX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDExIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxMSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjExX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDEwIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxMCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxMCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxMF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjEwX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDkgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDkgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOV9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOV9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1I5X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjkgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOV9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjlfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgOCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gOCBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I4X01zayAoMHgxVUwgPDwgTVdVX1BSRUdJT05fU1VCU19TUjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSOCBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I4X0V4Y2x1ZGUgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSOF9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA3IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiA3IGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgU1I3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjdfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I3IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjdfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I3X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDYgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDYgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNl9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1I2X1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjYgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNl9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjZfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgNSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gNSBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I1X01zayAoMHgxVUwgPDwgTVdVX1BSRUdJT05fU1VCU19TUjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSNSBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I1X0V4Y2x1ZGUgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSNV9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA0IDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiA0IGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU1I0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjRfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1I0IGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjRfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1I0X0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDMgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDMgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSM19Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IzX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjMgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSM19FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjNfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBzdWJyZWdpb24gMiBpbiByZWdpb24gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyX01zayAoMHgxVUwgPDwgTVdVX1BSRUdJT05fU1VCU19TUjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSMiBmaWVsZC4gKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IyX0V4Y2x1ZGUgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMl9JbmNsdWRlICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxIDogSW5jbHVkZSBvciBleGNsdWRlIHN1YnJlZ2lvbiAxIGluIHJlZ2lvbiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1IxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjFfTXNrICgweDFVTCA8PCBNV1VfUFJFR0lPTl9TVUJTX1NSMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1IxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjFfRXhjbHVkZSAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIE1XVV9QUkVHSU9OX1NVQlNfU1IxX0luY2x1ZGUgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDAgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgc3VicmVnaW9uIDAgaW4gcmVnaW9uICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMF9Nc2sgKDB4MVVMIDw8IE1XVV9QUkVHSU9OX1NVQlNfU1IwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUjAgZmllbGQuICovDQorI2RlZmluZSBNV1VfUFJFR0lPTl9TVUJTX1NSMF9FeGNsdWRlICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgTVdVX1BSRUdJT05fU1VCU19TUjBfSW5jbHVkZSAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBORkNUICovDQorLyogRGVzY3JpcHRpb246IE5GQy1BIGNvbXBhdGlibGUgcmFkaW8gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgNSA6IFNob3J0Y3V0IGJldHdlZW4gVFhGUkFNRUVORCBldmVudCBhbmQgRU5BQkxFUlhEQVRBIHRhc2sgKi8NCisjZGVmaW5lIE5GQ1RfU0hPUlRTX1RYRlJBTUVFTkRfRU5BQkxFUlhEQVRBX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRlJBTUVFTkRfRU5BQkxFUlhEQVRBIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfVFhGUkFNRUVORF9FTkFCTEVSWERBVEFfTXNrICgweDFVTCA8PCBORkNUX1NIT1JUU19UWEZSQU1FRU5EX0VOQUJMRVJYREFUQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhGUkFNRUVORF9FTkFCTEVSWERBVEEgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NIT1JUU19UWEZSQU1FRU5EX0VOQUJMRVJYREFUQV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIE5GQ1RfU0hPUlRTX1RYRlJBTUVFTkRfRU5BQkxFUlhEQVRBX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMSA6IFNob3J0Y3V0IGJldHdlZW4gRklFTERMT1NUIGV2ZW50IGFuZCBTRU5TRSB0YXNrICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRExPU1RfU0VOU0VfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRklFTERMT1NUX1NFTlNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TSE9SVFNfRklFTERMT1NUX1NFTlNFX01zayAoMHgxVUwgPDwgTkZDVF9TSE9SVFNfRklFTERMT1NUX1NFTlNFX1BvcykgLyohPCBCaXQgbWFzayBvZiBGSUVMRExPU1RfU0VOU0UgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRExPU1RfU0VOU0VfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRExPU1RfU0VOU0VfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBGSUVMRERFVEVDVEVEIGV2ZW50IGFuZCBBQ1RJVkFURSB0YXNrICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRERFVEVDVEVEX0FDVElWQVRFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxEREVURUNURURfQUNUSVZBVEUgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRERFVEVDVEVEX0FDVElWQVRFX01zayAoMHgxVUwgPDwgTkZDVF9TSE9SVFNfRklFTERERVRFQ1RFRF9BQ1RJVkFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRklFTERERVRFQ1RFRF9BQ1RJVkFURSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0hPUlRTX0ZJRUxEREVURUNURURfQUNUSVZBVEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBORkNUX1NIT1JUU19GSUVMRERFVEVDVEVEX0FDVElWQVRFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTRUxFQ1RFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9TRUxFQ1RFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgU0VMRUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1NFTEVDVEVEX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9TRUxFQ1RFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VMRUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1NFTEVDVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9TRUxFQ1RFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDT0xMSVNJT04gZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fQ09MTElTSU9OX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT0xMSVNJT04gZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0NPTExJU0lPTl9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fQ09MTElTSU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT0xMSVNJT04gZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0NPTExJU0lPTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fQ09MTElTSU9OX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEFVVE9DT0xSRVNTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX0FVVE9DT0xSRVNTVEFSVEVEX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBBVVRPQ09MUkVTU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fQVVUT0NPTFJFU1NUQVJURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0FVVE9DT0xSRVNTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBBVVRPQ09MUkVTU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fQVVUT0NPTFJFU1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0FVVE9DT0xSRVNTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFRYIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFRYX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRU5EVFhfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0VORFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRU5EVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFJYX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRU5EUlhfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0VORFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRU5EUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhFUlJPUl9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhFUlJPUl9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fUlhFUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhFUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhFUlJPUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX0VSUk9SX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FUlJPUl9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWEZSQU1FRU5EIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRlJBTUVFTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUlhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhGUkFNRUVORF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fUlhGUkFNRUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhGUkFNRUVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUlhGUkFNRUVORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRlJBTUVTVEFSVCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SWEZSQU1FU1RBUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUlhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SWEZSQU1FU1RBUlRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX1JYRlJBTUVTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SWEZSQU1FU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JYRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRlJBTUVFTkQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fVFhGUkFNRUVORF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEZSQU1FRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9UWEZSQU1FRU5EX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTl9UWEZSQU1FRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEZSQU1FRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9UWEZSQU1FRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9UWEZSQU1FRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFhGUkFNRVNUQVJUIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX1RYRlJBTUVTVEFSVF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1RYRlJBTUVTVEFSVF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fVFhGUkFNRVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX1RYRlJBTUVTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fVFhGUkFNRVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRklFTERMT1NUIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxETE9TVF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBGSUVMRExPU1QgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxETE9TVF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5fRklFTERMT1NUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGSUVMRExPU1QgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxETE9TVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fRklFTERMT1NUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRklFTERERVRFQ1RFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9GSUVMRERFVEVDVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxEREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxEREVURUNURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX0ZJRUxEREVURUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxEREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxEREVURUNURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX0ZJRUxEREVURUNURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTl9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUkVBRFlfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5fUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBORkNUX0lOVEVOX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0VMRUNURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfU0VMRUNURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFTEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9TRUxFQ1RFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfU0VMRUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFTEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9TRUxFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NFTEVDVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1NFTEVDVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT0xMSVNJT04gZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfQ09MTElTSU9OX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT0xMSVNJT04gZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0NPTExJU0lPTl9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfQ09MTElTSU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT0xMSVNJT04gZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0NPTExJU0lPTl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0NPTExJU0lPTl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9DT0xMSVNJT05fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEFVVE9DT0xSRVNTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0FVVE9DT0xSRVNTVEFSVEVEX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBBVVRPQ09MUkVTU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfQVVUT0NPTFJFU1NUQVJURURfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX0FVVE9DT0xSRVNTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBBVVRPQ09MUkVTU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfQVVUT0NPTFJFU1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9BVVRPQ09MUkVTU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9BVVRPQ09MUkVTU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRU5EVFhfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRUWF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfRU5EVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFRYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRSWCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FTkRSWF9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFJYX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRU5EUlhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhFUlJPUl9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhFUlJPUl9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfUlhFUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhFUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhFUlJPUl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FUlJPUl9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRVJST1JfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9FUlJPUl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWEZSQU1FRU5EIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVFTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUlhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRUVORF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfUlhGUkFNRUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRUVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRUVORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWEZSQU1FU1RBUlQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRVNUQVJUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRVNUQVJUX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9SWEZSQU1FU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRVNUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUlhGUkFNRVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1JYRlJBTUVTVEFSVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWEZSQU1FRU5EIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVFTkRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgVFhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRUVORF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfVFhGUkFNRUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRUVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRUVORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWEZSQU1FU1RBUlQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRVNUQVJUX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRVNUQVJUX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9UWEZSQU1FU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRVNUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfVFhGUkFNRVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX1RYRlJBTUVTVEFSVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBGSUVMRExPU1QgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERMT1NUX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEZJRUxETE9TVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERMT1NUX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTlNFVF9GSUVMRExPU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxETE9TVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERMT1NUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERMT1NUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxETE9TVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBGSUVMRERFVEVDVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxEREVURUNURURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRklFTERERVRFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERERVRFQ1RFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5TRVRfRklFTERERVRFQ1RFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRklFTERERVRFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERERVRFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOU0VUX0ZJRUxEREVURUNURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfRklFTERERVRFQ1RFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUkVBRFlfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOU0VUX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5TRVRfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTlNFVF9SRUFEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TVEFSVEVEX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0VMRUNURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfU0VMRUNURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFTEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TRUxFQ1RFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfU0VMRUNURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFTEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9TRUxFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1NFTEVDVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1NFTEVDVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09MTElTSU9OIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0NPTExJU0lPTl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09MTElTSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9DT0xMSVNJT05fTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0NPTExJU0lPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09MTElTSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9DT0xMSVNJT05fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9DT0xMSVNJT05fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQ09MTElTSU9OX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQVVUT0NPTFJFU1NUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfQVVUT0NPTFJFU1NUQVJURURfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFVVE9DT0xSRVNTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9BVVRPQ09MUkVTU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfQVVUT0NPTFJFU1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFVVE9DT0xSRVNTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9BVVRPQ09MUkVTU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0FVVE9DT0xSRVNTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0FVVE9DT0xSRVNTVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRU5EVFhfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRUWF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfRU5EVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VORFRYX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRU5EUlhfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRSWF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FTkRSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VORFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0VORFJYX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEVSUk9SX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBSWEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEVSUk9SX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9SWEVSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEVSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhFUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEVSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FUlJPUl9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRVJST1JfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9FUlJPUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhGUkFNRUVORCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FRU5EX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JYRlJBTUVFTkRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX1JYRlJBTUVFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRlJBTUVFTkQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JYRlJBTUVFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JYRlJBTUVFTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRlJBTUVTVEFSVCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FU1RBUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUlhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FU1RBUlRfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX1JYRlJBTUVTVEFSVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9SWEZSQU1FU1RBUlRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUlhGUkFNRVNUQVJUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWEZSQU1FRU5EIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVFTkRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgVFhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfVFhGUkFNRUVORF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfVFhGUkFNRUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhGUkFNRUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfVFhGUkFNRUVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfVFhGUkFNRUVORF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhGUkFNRVNUQVJUIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVTVEFSVF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVTVEFSVF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfVFhGUkFNRVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEZSQU1FU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1RYRlJBTUVTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9UWEZSQU1FU1RBUlRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEZJRUxETE9TVCBldmVudCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9GSUVMRExPU1RfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRklFTERMT1NUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9GSUVMRExPU1RfTXNrICgweDFVTCA8PCBORkNUX0lOVEVOQ0xSX0ZJRUxETE9TVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRklFTERMT1NUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9GSUVMRExPU1RfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9JTlRFTkNMUl9GSUVMRExPU1RfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERMT1NUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBGSUVMRERFVEVDVEVEIGV2ZW50ICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0ZJRUxEREVURUNURURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRklFTERERVRFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERERVRFQ1RFRF9Nc2sgKDB4MVVMIDw8IE5GQ1RfSU5URU5DTFJfRklFTERERVRFQ1RFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRklFTERERVRFQ1RFRCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERERVRFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX0ZJRUxEREVURUNURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfRklFTERERVRFQ1RFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUkVBRFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JFQURZX01zayAoMHgxVUwgPDwgTkZDVF9JTlRFTkNMUl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX0lOVEVOQ0xSX1JFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIE5GQ1RfSU5URU5DTFJfUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfRVJST1JTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogTkZDIEVycm9yIFN0YXR1cyByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogTm8gU1RBUlRUWCB0YXNrIHRyaWdnZXJlZCBiZWZvcmUgZXhwaXJhdGlvbiBvZiB0aGUgdGltZSBzZXQgaW4gRlJBTUVERUxBWU1BWCAqLw0KKyNkZWZpbmUgTkZDVF9FUlJPUlNUQVRVU19GUkFNRURFTEFZVElNRU9VVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkFNRURFTEFZVElNRU9VVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRVJST1JTVEFUVVNfRlJBTUVERUxBWVRJTUVPVVRfTXNrICgweDFVTCA8PCBORkNUX0VSUk9SU1RBVFVTX0ZSQU1FREVMQVlUSU1FT1VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRURFTEFZVElNRU9VVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9GUkFNRVNUQVRVU19SWCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZXN1bHQgb2YgbGFzdCBpbmNvbWluZyBmcmFtZSAqLw0KKw0KKy8qIEJpdCAzIDogT3ZlcnJ1biBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9PVkVSUlVOX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX09WRVJSVU5fTXNrICgweDFVTCA8PCBORkNUX0ZSQU1FU1RBVFVTX1JYX09WRVJSVU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX09WRVJSVU5fTm9PdmVycnVuICgwVUwpIC8qITwgTm8gb3ZlcnJ1biBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRVNUQVRVU19SWF9PVkVSUlVOX092ZXJydW4gKDFVTCkgLyohPCBPdmVycnVuIGVycm9yICovDQorDQorLyogQml0IDIgOiBQYXJpdHkgc3RhdHVzIG9mIHJlY2VpdmVkIGZyYW1lICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX1BBUklUWVNUQVRVU19Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQQVJJVFlTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX1BBUklUWVNUQVRVU19Nc2sgKDB4MVVMIDw8IE5GQ1RfRlJBTUVTVEFUVVNfUlhfUEFSSVRZU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVJJVFlTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX1BBUklUWVNUQVRVU19QYXJpdHlPSyAoMFVMKSAvKiE8IEZyYW1lIHJlY2VpdmVkIHdpdGggcGFyaXR5IE9LICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX1BBUklUWVNUQVRVU19QYXJpdHlFcnJvciAoMVVMKSAvKiE8IEZyYW1lIHJlY2VpdmVkIHdpdGggcGFyaXR5IGVycm9yICovDQorDQorLyogQml0IDAgOiBObyB2YWxpZCBlbmQgb2YgZnJhbWUgKEVvRikgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVTVEFUVVNfUlhfQ1JDRVJST1JfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX0NSQ0VSUk9SX01zayAoMHgxVUwgPDwgTkZDVF9GUkFNRVNUQVRVU19SWF9DUkNFUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDRVJST1IgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FU1RBVFVTX1JYX0NSQ0VSUk9SX0NSQ0NvcnJlY3QgKDBVTCkgLyohPCBWYWxpZCBDUkMgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVTVEFUVVNfUlhfQ1JDRVJST1JfQ1JDRXJyb3IgKDFVTCkgLyohPCBDUkMgcmVjZWl2ZWQgZG9lcyBub3QgbWF0Y2ggbG9jYWwgY2hlY2sgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9ORkNUQUdTVEFURSAqLw0KKy8qIERlc2NyaXB0aW9uOiBOZmNUYWcgc3RhdGUgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBOZmNUYWcgc3RhdGUgKi8NCisjZGVmaW5lIE5GQ1RfTkZDVEFHU1RBVEVfTkZDVEFHU1RBVEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTkZDVEFHU1RBVEUgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX01zayAoMHg3VUwgPDwgTkZDVF9ORkNUQUdTVEFURV9ORkNUQUdTVEFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDVEFHU1RBVEUgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgb3Igc2Vuc2UgKi8NCisjZGVmaW5lIE5GQ1RfTkZDVEFHU1RBVEVfTkZDVEFHU1RBVEVfUmFtcFVwICgyVUwpIC8qITwgUmFtcFVwICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX0lkbGUgKDNVTCkgLyohPCBJZGxlICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX1JlY2VpdmUgKDRVTCkgLyohPCBSZWNlaXZlICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX0ZyYW1lRGVsYXkgKDVVTCkgLyohPCBGcmFtZURlbGF5ICovDQorI2RlZmluZSBORkNUX05GQ1RBR1NUQVRFX05GQ1RBR1NUQVRFX1RyYW5zbWl0ICg2VUwpIC8qITwgVHJhbnNtaXQgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9GSUVMRFBSRVNFTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogSW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvciBub3Qgb2YgYSB2YWxpZCBmaWVsZCAqLw0KKw0KKy8qIEJpdCAxIDogSW5kaWNhdGVzIGlmIHRoZSBsb3cgbGV2ZWwgaGFzIGxvY2tlZCB0byB0aGUgZmllbGQgKi8NCisjZGVmaW5lIE5GQ1RfRklFTERQUkVTRU5UX0xPQ0tERVRFQ1RfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgTE9DS0RFVEVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRklFTERQUkVTRU5UX0xPQ0tERVRFQ1RfTXNrICgweDFVTCA8PCBORkNUX0ZJRUxEUFJFU0VOVF9MT0NLREVURUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT0NLREVURUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GSUVMRFBSRVNFTlRfTE9DS0RFVEVDVF9Ob3RMb2NrZWQgKDBVTCkgLyohPCBOb3QgbG9ja2VkIHRvIGZpZWxkICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9MT0NLREVURUNUX0xvY2tlZCAoMVVMKSAvKiE8IExvY2tlZCB0byBmaWVsZCAqLw0KKw0KKy8qIEJpdCAwIDogSW5kaWNhdGVzIGlmIGEgdmFsaWQgZmllbGQgaXMgcHJlc2VudC4gQXZhaWxhYmxlIG9ubHkgaW4gdGhlIGFjdGl2YXRlZCBzdGF0ZS4gKi8NCisjZGVmaW5lIE5GQ1RfRklFTERQUkVTRU5UX0ZJRUxEUFJFU0VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGSUVMRFBSRVNFTlQgZmllbGQuICovDQorI2RlZmluZSBORkNUX0ZJRUxEUFJFU0VOVF9GSUVMRFBSRVNFTlRfTXNrICgweDFVTCA8PCBORkNUX0ZJRUxEUFJFU0VOVF9GSUVMRFBSRVNFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZJRUxEUFJFU0VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRklFTERQUkVTRU5UX0ZJRUxEUFJFU0VOVF9Ob0ZpZWxkICgwVUwpIC8qITwgTm8gdmFsaWQgZmllbGQgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIE5GQ1RfRklFTERQUkVTRU5UX0ZJRUxEUFJFU0VOVF9GaWVsZFByZXNlbnQgKDFVTCkgLyohPCBWYWxpZCBmaWVsZCBkZXRlY3RlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX0ZSQU1FREVMQVlNSU4gKi8NCisvKiBEZXNjcmlwdGlvbjogTWluaW11bSBmcmFtZSBkZWxheSAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBNaW5pbXVtIGZyYW1lIGRlbGF5IGluIG51bWJlciBvZiAxMy41NiBNSHogY2xvY2tzICovDQorI2RlZmluZSBORkNUX0ZSQU1FREVMQVlNSU5fRlJBTUVERUxBWU1JTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkFNRURFTEFZTUlOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTUlOX0ZSQU1FREVMQVlNSU5fTXNrICgweEZGRkZVTCA8PCBORkNUX0ZSQU1FREVMQVlNSU5fRlJBTUVERUxBWU1JTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJBTUVERUxBWU1JTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9GUkFNRURFTEFZTUFYICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gZnJhbWUgZGVsYXkgKi8NCisNCisvKiBCaXRzIDE1Li4wIDogTWF4aW11bSBmcmFtZSBkZWxheSBpbiBudW1iZXIgb2YgMTMuNTYgTUh6IGNsb2NrcyAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTUFYX0ZSQU1FREVMQVlNQVhfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUVERUxBWU1BWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfRlJBTUVERUxBWU1BWF9GUkFNRURFTEFZTUFYX01zayAoMHhGRkZGVUwgPDwgTkZDVF9GUkFNRURFTEFZTUFYX0ZSQU1FREVMQVlNQVhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZSQU1FREVMQVlNQVggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfRlJBTUVERUxBWU1PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgdGhlIEZyYW1lIERlbGF5IFRpbWVyICovDQorDQorLyogQml0cyAxLi4wIDogQ29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgdGhlIEZyYW1lIERlbGF5IFRpbWVyICovDQorI2RlZmluZSBORkNUX0ZSQU1FREVMQVlNT0RFX0ZSQU1FREVMQVlNT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1FREVMQVlNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTU9ERV9GUkFNRURFTEFZTU9ERV9Nc2sgKDB4M1VMIDw8IE5GQ1RfRlJBTUVERUxBWU1PREVfRlJBTUVERUxBWU1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZSQU1FREVMQVlNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTU9ERV9GUkFNRURFTEFZTU9ERV9GcmVlUnVuICgwVUwpIC8qITwgVHJhbnNtaXNzaW9uIGlzIGluZGVwZW5kZW50IG9mIGZyYW1lIHRpbWVyIGFuZCB3aWxsIHN0YXJ0IHdoZW4gdGhlIFNUQVJUVFggdGFzayBpcyB0cmlnZ2VyZWQuIE5vIHRpbWVvdXQuICovDQorI2RlZmluZSBORkNUX0ZSQU1FREVMQVlNT0RFX0ZSQU1FREVMQVlNT0RFX1dpbmRvdyAoMVVMKSAvKiE8IEZyYW1lIGlzIHRyYW5zbWl0dGVkIGJldHdlZW4gRlJBTUVERUxBWU1JTiBhbmQgRlJBTUVERUxBWU1BWCAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTU9ERV9GUkFNRURFTEFZTU9ERV9FeGFjdFZhbCAoMlVMKSAvKiE8IEZyYW1lIGlzIHRyYW5zbWl0dGVkIGV4YWN0bHkgYXQgRlJBTUVERUxBWU1BWCAqLw0KKyNkZWZpbmUgTkZDVF9GUkFNRURFTEFZTU9ERV9GUkFNRURFTEFZTU9ERV9XaW5kb3dHcmlkICgzVUwpIC8qITwgRnJhbWUgaXMgdHJhbnNtaXR0ZWQgb24gYSBiaXQgZ3JpZCBiZXR3ZWVuIEZSQU1FREVMQVlNSU4gYW5kIEZSQU1FREVMQVlNQVggKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9QQUNLRVRQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUGFja2V0IHBvaW50ZXIgZm9yIFRYRCBhbmQgUlhEIGRhdGEgc3RvcmFnZSBpbiBEYXRhIFJBTSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQYWNrZXQgcG9pbnRlciBmb3IgVFhEIGFuZCBSWEQgZGF0YSBzdG9yYWdlIGluIERhdGEgUkFNLiBUaGlzIGFkZHJlc3MgaXMgYSBieXRlLWFsaWduZWQgUkFNIGFkZHJlc3MuICovDQorI2RlZmluZSBORkNUX1BBQ0tFVFBUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9QQUNLRVRQVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IE5GQ1RfUEFDS0VUUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX01BWExFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaXplIG9mIHRoZSBSQU0gYnVmZmVyIGFsbG9jYXRlZCB0byBUWEQgYW5kIFJYRCBkYXRhIHN0b3JhZ2UgZWFjaCAqLw0KKw0KKy8qIEJpdHMgOC4uMCA6IFNpemUgb2YgdGhlIFJBTSBidWZmZXIgYWxsb2NhdGVkIHRvIFRYRCBhbmQgUlhEIGRhdGEgc3RvcmFnZSBlYWNoICovDQorI2RlZmluZSBORkNUX01BWExFTl9NQVhMRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9NQVhMRU5fTUFYTEVOX01zayAoMHgxRkZVTCA8PCBORkNUX01BWExFTl9NQVhMRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWExFTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9UWERfRlJBTUVDT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiBvZiBvdXRnb2luZyBmcmFtZXMgKi8NCisNCisvKiBCaXQgNCA6IENSQyBtb2RlIGZvciBvdXRnb2luZyBmcmFtZXMgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX0NSQ01PREVUWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNNT0RFVFggZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19DUkNNT0RFVFhfTXNrICgweDFVTCA8PCBORkNUX1RYRF9GUkFNRUNPTkZJR19DUkNNT0RFVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ01PREVUWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX0NSQ01PREVUWF9Ob0NSQ1RYICgwVUwpIC8qITwgQ1JDIGlzIG5vdCBhZGRlZCB0byB0aGUgZnJhbWUgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX0NSQ01PREVUWF9DUkMxNlRYICgxVUwpIC8qITwgMTYgYml0IENSQyBhZGRlZCB0byB0aGUgZnJhbWUgYmFzZWQgb24gYWxsIHRoZSBkYXRhIHJlYWQgZnJvbSBSQU0gdGhhdCBpcyB1c2VkIGluIHRoZSBmcmFtZSAqLw0KKw0KKy8qIEJpdCAyIDogQWRkaW5nIFNvRiBvciBub3QgaW4gVFggZnJhbWVzICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19TT0ZfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfU09GX01zayAoMHgxVUwgPDwgTkZDVF9UWERfRlJBTUVDT05GSUdfU09GX1BvcykgLyohPCBCaXQgbWFzayBvZiBTT0YgZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19TT0ZfTm9Tb0YgKDBVTCkgLyohPCBTb0Ygc3ltYm9sIG5vdCBhZGRlZCAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfU09GX1NvRiAoMVVMKSAvKiE8IFNvRiBzeW1ib2wgYWRkZWQgKi8NCisNCisvKiBCaXQgMSA6IERpc2NhcmRpbmcgdW51c2VkIGJpdHMgYXQgc3RhcnQgb3IgZW5kIG9mIGEgZnJhbWUgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX0RJU0NBUkRNT0RFX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIERJU0NBUkRNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfRElTQ0FSRE1PREVfTXNrICgweDFVTCA8PCBORkNUX1RYRF9GUkFNRUNPTkZJR19ESVNDQVJETU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRElTQ0FSRE1PREUgZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19ESVNDQVJETU9ERV9EaXNjYXJkRW5kICgwVUwpIC8qITwgVW51c2VkIGJpdHMgYXJlIGRpc2NhcmRlZCBhdCBlbmQgb2YgZnJhbWUgKEVvRikgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0ZSQU1FQ09ORklHX0RJU0NBUkRNT0RFX0Rpc2NhcmRTdGFydCAoMVVMKSAvKiE8IFVudXNlZCBiaXRzIGFyZSBkaXNjYXJkZWQgYXQgc3RhcnQgb2YgZnJhbWUgKFNvRikgKi8NCisNCisvKiBCaXQgMCA6IEluZGljYXRlcyBpZiBwYXJpdHkgaXMgYWRkZWQgdG8gdGhlIGZyYW1lICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19QQVJJVFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfUEFSSVRZX01zayAoMHgxVUwgPDwgTkZDVF9UWERfRlJBTUVDT05GSUdfUEFSSVRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVJJVFkgZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9GUkFNRUNPTkZJR19QQVJJVFlfTm9QYXJpdHkgKDBVTCkgLyohPCBQYXJpdHkgaXMgbm90IGFkZGVkIHRvIFRYIGZyYW1lcyAqLw0KKyNkZWZpbmUgTkZDVF9UWERfRlJBTUVDT05GSUdfUEFSSVRZX1Bhcml0eSAoMVVMKSAvKiE8IFBhcml0eSBpcyBhZGRlZCB0byBUWCBmcmFtZXMgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9UWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IFNpemUgb2Ygb3V0Z29pbmcgZnJhbWUgKi8NCisNCisvKiBCaXRzIDExLi4zIDogTnVtYmVyIG9mIGNvbXBsZXRlIGJ5dGVzIHRoYXQgc2hhbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZyYW1lLCBleGNsdWRpbmcgQ1JDLCBwYXJpdHkgYW5kIGZyYW1pbmcgKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0FNT1VOVF9UWERBVEFCWVRFU19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBUWERBVEFCWVRFUyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0FNT1VOVF9UWERBVEFCWVRFU19Nc2sgKDB4MUZGVUwgPDwgTkZDVF9UWERfQU1PVU5UX1RYREFUQUJZVEVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWERBVEFCWVRFUyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIuLjAgOiBOdW1iZXIgb2YgYml0cyBpbiB0aGUgbGFzdCBvciBmaXJzdCBieXRlIHJlYWQgZnJvbSBSQU0gdGhhdCBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZnJhbWUgKGV4Y2x1ZGluZyBwYXJpdHkgYml0KS4gKi8NCisjZGVmaW5lIE5GQ1RfVFhEX0FNT1VOVF9UWERBVEFCSVRTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYREFUQUJJVFMgZmllbGQuICovDQorI2RlZmluZSBORkNUX1RYRF9BTU9VTlRfVFhEQVRBQklUU19Nc2sgKDB4N1VMIDw8IE5GQ1RfVFhEX0FNT1VOVF9UWERBVEFCSVRTX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWERBVEFCSVRTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX1JYRF9GUkFNRUNPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIG9mIGluY29taW5nIGZyYW1lcyAqLw0KKw0KKy8qIEJpdCA0IDogQ1JDIG1vZGUgZm9yIGluY29taW5nIGZyYW1lcyAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfQ1JDTU9ERVJYX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ01PREVSWCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX0NSQ01PREVSWF9Nc2sgKDB4MVVMIDw8IE5GQ1RfUlhEX0ZSQU1FQ09ORklHX0NSQ01PREVSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDTU9ERVJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfQ1JDTU9ERVJYX05vQ1JDUlggKDBVTCkgLyohPCBDUkMgaXMgbm90IGV4cGVjdGVkIGluIFJYIGZyYW1lcyAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfQ1JDTU9ERVJYX0NSQzE2UlggKDFVTCkgLyohPCBMYXN0IDE2IGJpdHMgaW4gUlggZnJhbWUgaXMgQ1JDLCBDUkMgaXMgY2hlY2tlZCBhbmQgQ1JDU1RBVFVTIHVwZGF0ZWQgKi8NCisNCisvKiBCaXQgMiA6IFNvRiBleHBlY3RlZCBvciBub3QgaW4gUlggZnJhbWVzICovDQorI2RlZmluZSBORkNUX1JYRF9GUkFNRUNPTkZJR19TT0ZfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfU09GX01zayAoMHgxVUwgPDwgTkZDVF9SWERfRlJBTUVDT05GSUdfU09GX1BvcykgLyohPCBCaXQgbWFzayBvZiBTT0YgZmllbGQuICovDQorI2RlZmluZSBORkNUX1JYRF9GUkFNRUNPTkZJR19TT0ZfTm9Tb0YgKDBVTCkgLyohPCBTb0Ygc3ltYm9sIGlzIG5vdCBleHBlY3RlZCBpbiBSWCBmcmFtZXMgKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1NPRl9Tb0YgKDFVTCkgLyohPCBTb0Ygc3ltYm9sIGlzIGV4cGVjdGVkIGluIFJYIGZyYW1lcyAqLw0KKw0KKy8qIEJpdCAwIDogSW5kaWNhdGVzIGlmIHBhcml0eSBleHBlY3RlZCBpbiBSWCBmcmFtZSAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfUEFSSVRZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1BBUklUWV9Nc2sgKDB4MVVMIDw8IE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1BBUklUWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9SWERfRlJBTUVDT05GSUdfUEFSSVRZX05vUGFyaXR5ICgwVUwpIC8qITwgUGFyaXR5IGlzIG5vdCBleHBlY3RlZCBpbiBSWCBmcmFtZXMgKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0ZSQU1FQ09ORklHX1BBUklUWV9QYXJpdHkgKDFVTCkgLyohPCBQYXJpdHkgaXMgZXhwZWN0ZWQgaW4gUlggZnJhbWVzICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfUlhEX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaXplIG9mIGxhc3QgaW5jb21pbmcgZnJhbWUgKi8NCisNCisvKiBCaXRzIDExLi4zIDogTnVtYmVyIG9mIGNvbXBsZXRlIGJ5dGVzIHJlY2VpdmVkIGluIHRoZSBmcmFtZSAoaW5jbHVkaW5nIENSQywgYnV0IGV4Y2x1ZGluZyBwYXJpdHkgYW5kIFNvRi9Fb0YgZnJhbWluZykgKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0FNT1VOVF9SWERBVEFCWVRFU19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERBVEFCWVRFUyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0FNT1VOVF9SWERBVEFCWVRFU19Nc2sgKDB4MUZGVUwgPDwgTkZDVF9SWERfQU1PVU5UX1JYREFUQUJZVEVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERBVEFCWVRFUyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIuLjAgOiBOdW1iZXIgb2YgYml0cyBpbiB0aGUgbGFzdCBieXRlIGluIHRoZSBmcmFtZSwgaWYgbGVzcyB0aGFuIDggKGluY2x1ZGluZyBDUkMsIGJ1dCBleGNsdWRpbmcgcGFyaXR5IGFuZCBTb0YvRW9GIGZyYW1pbmcpLiAqLw0KKyNkZWZpbmUgTkZDVF9SWERfQU1PVU5UX1JYREFUQUJJVFNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEQVRBQklUUyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfUlhEX0FNT1VOVF9SWERBVEFCSVRTX01zayAoMHg3VUwgPDwgTkZDVF9SWERfQU1PVU5UX1JYREFUQUJJVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYREFUQUJJVFMgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfTkZDSUQxX0xBU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogTGFzdCBORkNJRDEgcGFydCAoNCwgNyBvciAxMCBieXRlcyBJRCkgKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IE5GQ0lEMSBieXRlIFcgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1dfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEMV9XIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfV19Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9XX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfVyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IE5GQ0lEMSBieXRlIFggKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1hfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEMV9YIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfWF9Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9YX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfWCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogTkZDSUQxIGJ5dGUgWSAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfWV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfWSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1lfTXNrICgweEZGVUwgPDwgTkZDVF9ORkNJRDFfTEFTVF9ORkNJRDFfWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1kgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogTkZDSUQxIGJ5dGUgWiAodmVyeSBsYXN0IGJ5dGUgc2VudCkgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1pfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1ogZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV9MQVNUX05GQ0lEMV9aX01zayAoMHhGRlVMIDw8IE5GQ1RfTkZDSUQxX0xBU1RfTkZDSUQxX1pfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5GQ0lEMV9aIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBORkNUX05GQ0lEMV8yTkRfTEFTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWNvbmQgbGFzdCBORkNJRDEgcGFydCAoNyBvciAxMCBieXRlcyBJRCkgKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IE5GQ0lEMSBieXRlIFQgKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzJORF9MQVNUX05GQ0lEMV9UX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfVCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzJORF9MQVNUX05GQ0lEMV9UX01zayAoMHhGRlVMIDw8IE5GQ1RfTkZDSUQxXzJORF9MQVNUX05GQ0lEMV9UX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogTkZDSUQxIGJ5dGUgVSAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfMk5EX0xBU1RfTkZDSUQxX1VfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1UgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVV9Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1UgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogTkZDSUQxIGJ5dGUgViAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfMk5EX0xBU1RfTkZDSUQxX1ZfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTkZDSUQxX1YgZmllbGQuICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVl9Nc2sgKDB4RkZVTCA8PCBORkNUX05GQ0lEMV8yTkRfTEFTVF9ORkNJRDFfVl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTkZDSUQxX1YgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfTkZDSUQxXzNSRF9MQVNUICovDQorLyogRGVzY3JpcHRpb246IFRoaXJkIGxhc3QgTkZDSUQxIHBhcnQgKDEwIGJ5dGVzIElEKSAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogTkZDSUQxIGJ5dGUgUSAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfM1JEX0xBU1RfTkZDSUQxX1FfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEMV9RIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9ORkNJRDFfM1JEX0xBU1RfTkZDSUQxX1FfTXNrICgweEZGVUwgPDwgTkZDVF9ORkNJRDFfM1JEX0xBU1RfTkZDSUQxX1FfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5GQ0lEMV9RIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBORkNJRDEgYnl0ZSBSICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8zUkRfTEFTVF9ORkNJRDFfUl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9SX01zayAoMHhGRlVMIDw8IE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfUiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBORkNJRDEgYnl0ZSBTICovDQorI2RlZmluZSBORkNUX05GQ0lEMV8zUkRfTEFTVF9ORkNJRDFfU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBORkNJRDFfUyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9TX01zayAoMHhGRlVMIDw8IE5GQ1RfTkZDSUQxXzNSRF9MQVNUX05GQ0lEMV9TX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRDFfUyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9BVVRPQ09MUkVTQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbnRyb2xzIHRoZSBhdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIGZ1bmN0aW9uLiBUaGlzIHNldHRpbmcgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgTkZDVCBwZXJpcGhlcmFsIGlzIGVuYWJsZWQuICovDQorDQorLyogQml0IDAgOiBFbmFibGVzL2Rpc2FibGVzIGF1dG8gY29sbGlzaW9uIHJlc29sdXRpb24gKi8NCisjZGVmaW5lIE5GQ1RfQVVUT0NPTFJFU0NPTkZJR19NT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBORkNUX0FVVE9DT0xSRVNDT05GSUdfTU9ERV9Nc2sgKDB4MVVMIDw8IE5GQ1RfQVVUT0NPTFJFU0NPTkZJR19NT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9BVVRPQ09MUkVTQ09ORklHX01PREVfRW5hYmxlZCAoMFVMKSAvKiE8IEF1dG8gY29sbGlzaW9uIHJlc29sdXRpb24gZW5hYmxlZCAqLw0KKyNkZWZpbmUgTkZDVF9BVVRPQ09MUkVTQ09ORklHX01PREVfRGlzYWJsZWQgKDFVTCkgLyohPCBBdXRvIGNvbGxpc2lvbiByZXNvbHV0aW9uIGRpc2FibGVkICovDQorDQorLyogUmVnaXN0ZXI6IE5GQ1RfU0VOU1JFUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBORkMtQSBTRU5TX1JFUyBhdXRvLXJlc3BvbnNlIHNldHRpbmdzICovDQorDQorLyogQml0cyAxNS4uMTIgOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU2hhbGwgYmUgMC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19SRlU3NF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUkZVNzQgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfUkZVNzRfTXNrICgweEZVTCA8PCBORkNUX1NFTlNSRVNfUkZVNzRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJGVTc0IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTEuLjggOiBUYWcgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBhcyBkZWZpbmVkIGJ5IHRoZSBiNDpiMSBvZiBieXRlIDIgaW4gU0VOU19SRVMgcmVzcG9uc2UgaW4gdGhlIE5GQyBGb3J1bSwgTkZDIERpZ2l0YWwgUHJvdG9jb2wgVGVjaG5pY2FsIFNwZWNpZmljYXRpb24gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19QTEFURkNPTkZJR19Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQTEFURkNPTkZJRyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19QTEFURkNPTkZJR19Nc2sgKDB4RlVMIDw8IE5GQ1RfU0VOU1JFU19QTEFURkNPTkZJR19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUExBVEZDT05GSUcgZmllbGQuICovDQorDQorLyogQml0cyA3Li42IDogTkZDSUQxIHNpemUuIFRoaXMgdmFsdWUgaXMgdXNlZCBieSB0aGUgYXV0byBjb2xsaXNpb24gcmVzb2x1dGlvbiBlbmdpbmUuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfTkZDSURTSVpFX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQ0lEU0laRSBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19ORkNJRFNJWkVfTXNrICgweDNVTCA8PCBORkNUX1NFTlNSRVNfTkZDSURTSVpFX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkNJRFNJWkUgZmllbGQuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfTkZDSURTSVpFX05GQ0lEMVNpbmdsZSAoMFVMKSAvKiE8IE5GQ0lEMSBzaXplOiBzaW5nbGUgKDQgYnl0ZXMpICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfTkZDSURTSVpFX05GQ0lEMURvdWJsZSAoMVVMKSAvKiE8IE5GQ0lEMSBzaXplOiBkb3VibGUgKDcgYnl0ZXMpICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfTkZDSURTSVpFX05GQ0lEMVRyaXBsZSAoMlVMKSAvKiE8IE5GQ0lEMSBzaXplOiB0cmlwbGUgKDEwIGJ5dGVzKSAqLw0KKw0KKy8qIEJpdCA1IDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNoYWxsIGJlIDAuICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfUkZVNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBSRlU1IGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX1JGVTVfTXNrICgweDFVTCA8PCBORkNUX1NFTlNSRVNfUkZVNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkZVNSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBCaXQgZnJhbWUgU0REIGFzIGRlZmluZWQgYnkgdGhlIGI1OmIxIG9mIGJ5dGUgMSBpbiBTRU5TX1JFUyByZXNwb25zZSBpbiB0aGUgPGk+TkZDIEZvcnVtLCBORkMgRGlnaXRhbCBQcm90b2NvbCBUZWNobmljYWwgU3BlY2lmaWNhdGlvbjwvaT4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19CSVRGUkFNRVNERF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCSVRGUkFNRVNERCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19CSVRGUkFNRVNERF9Nc2sgKDB4MUZVTCA8PCBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJJVEZSQU1FU0REIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX0JJVEZSQU1FU0REX1NERDAwMDAwICgwVUwpIC8qITwgU0REIHBhdHRlcm4gMDAwMDAgKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19CSVRGUkFNRVNERF9TREQwMDAwMSAoMVVMKSAvKiE8IFNERCBwYXR0ZXJuIDAwMDAxICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfU0REMDAwMTAgKDJVTCkgLyohPCBTREQgcGF0dGVybiAwMDAxMCAqLw0KKyNkZWZpbmUgTkZDVF9TRU5TUkVTX0JJVEZSQU1FU0REX1NERDAwMTAwICg0VUwpIC8qITwgU0REIHBhdHRlcm4gMDAxMDAgKi8NCisjZGVmaW5lIE5GQ1RfU0VOU1JFU19CSVRGUkFNRVNERF9TREQwMTAwMCAoOFVMKSAvKiE8IFNERCBwYXR0ZXJuIDAxMDAwICovDQorI2RlZmluZSBORkNUX1NFTlNSRVNfQklURlJBTUVTRERfU0REMTAwMDAgKDE2VUwpIC8qITwgU0REIHBhdHRlcm4gMTAwMDAgKi8NCisNCisvKiBSZWdpc3RlcjogTkZDVF9TRUxSRVMgKi8NCisvKiBEZXNjcmlwdGlvbjogTkZDLUEgU0VMX1JFUyBhdXRvLXJlc3BvbnNlIHNldHRpbmdzICovDQorDQorLyogQml0IDcgOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU2hhbGwgYmUgMC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX1JGVTdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUkZVNyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX1JGVTdfTXNrICgweDFVTCA8PCBORkNUX1NFTFJFU19SRlU3X1BvcykgLyohPCBCaXQgbWFzayBvZiBSRlU3IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFByb3RvY29sIGFzIGRlZmluZWQgYnkgdGhlIGI3OmI2IG9mIFNFTF9SRVMgcmVzcG9uc2UgaW4gdGhlIE5GQyBGb3J1bSwgTkZDIERpZ2l0YWwgUHJvdG9jb2wgVGVjaG5pY2FsIFNwZWNpZmljYXRpb24gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX1BST1RPQ09MX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBST1RPQ09MIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TRUxSRVNfUFJPVE9DT0xfTXNrICgweDNVTCA8PCBORkNUX1NFTFJFU19QUk9UT0NPTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFJPVE9DT0wgZmllbGQuICovDQorDQorLyogQml0cyA0Li4zIDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNoYWxsIGJlIDAuICovDQorI2RlZmluZSBORkNUX1NFTFJFU19SRlU0M19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRlU0MyBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX1JGVTQzX01zayAoMHgzVUwgPDwgTkZDVF9TRUxSRVNfUkZVNDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJGVTQzIGZpZWxkLiAqLw0KKw0KKy8qIEJpdCAyIDogQ2FzY2FkZSBhcyBkZWZpbmVkIGJ5IHRoZSBiMyBvZiBTRUxfUkVTIHJlc3BvbnNlIGluIHRoZSBORkMgRm9ydW0sIE5GQyBEaWdpdGFsIFByb3RvY29sIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIChjb250cm9sbGVkIGJ5IGhhcmR3YXJlLCBzaGFsbCBiZSAwKSAqLw0KKyNkZWZpbmUgTkZDVF9TRUxSRVNfQ0FTQ0FERV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBDQVNDQURFIGZpZWxkLiAqLw0KKyNkZWZpbmUgTkZDVF9TRUxSRVNfQ0FTQ0FERV9Nc2sgKDB4MVVMIDw8IE5GQ1RfU0VMUkVTX0NBU0NBREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENBU0NBREUgZmllbGQuICovDQorDQorLyogQml0cyAxLi4wIDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNoYWxsIGJlIDAuICovDQorI2RlZmluZSBORkNUX1NFTFJFU19SRlUxMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRlUxMCBmaWVsZC4gKi8NCisjZGVmaW5lIE5GQ1RfU0VMUkVTX1JGVTEwX01zayAoMHgzVUwgPDwgTkZDVF9TRUxSRVNfUkZVMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJGVTEwIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IE5WTUMgKi8NCisvKiBEZXNjcmlwdGlvbjogTm9uIFZvbGF0aWxlIE1lbW9yeSBDb250cm9sbGVyICovDQorDQorLyogUmVnaXN0ZXI6IE5WTUNfUkVBRFkgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVhZHkgZmxhZyAqLw0KKw0KKy8qIEJpdCAwIDogTlZNQyBpcyByZWFkeSBvciBidXN5ICovDQorI2RlZmluZSBOVk1DX1JFQURZX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19SRUFEWV9SRUFEWV9Nc2sgKDB4MVVMIDw8IE5WTUNfUkVBRFlfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19SRUFEWV9SRUFEWV9CdXN5ICgwVUwpIC8qITwgTlZNQyBpcyBidXN5IChvbi1nb2luZyB3cml0ZSBvciBlcmFzZSBvcGVyYXRpb24pICovDQorI2RlZmluZSBOVk1DX1JFQURZX1JFQURZX1JlYWR5ICgxVUwpIC8qITwgTlZNQyBpcyByZWFkeSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovDQorDQorLyogQml0cyAxLi4wIDogUHJvZ3JhbSBtZW1vcnkgYWNjZXNzIG1vZGUuIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIG9ubHkgYWN0aXZhdGUgZXJhc2UgYW5kIHdyaXRlIG1vZGVzIHdoZW4gdGhleSBhcmUgYWN0aXZlbHkgdXNlZC4gRW5hYmxpbmcgd3JpdGUgb3IgZXJhc2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjYWNoZSBhbmQga2VlcCBpdCBpbnZhbGlkYXRlZC4gKi8NCisjZGVmaW5lIE5WTUNfQ09ORklHX1dFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBXRU4gZmllbGQuICovDQorI2RlZmluZSBOVk1DX0NPTkZJR19XRU5fTXNrICgweDNVTCA8PCBOVk1DX0NPTkZJR19XRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdFTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfQ09ORklHX1dFTl9SZW4gKDBVTCkgLyohPCBSZWFkIG9ubHkgYWNjZXNzICovDQorI2RlZmluZSBOVk1DX0NPTkZJR19XRU5fV2VuICgxVUwpIC8qITwgV3JpdGUgRW5hYmxlZCAqLw0KKyNkZWZpbmUgTlZNQ19DT05GSUdfV0VOX0VlbiAoMlVMKSAvKiE8IEVyYXNlIGVuYWJsZWQgKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19FUkFTRVBBR0UgKi8NCisvKiBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgZm9yIGVyYXNpbmcgYSBwYWdlIGluIENvZGUgYXJlYSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZWdpc3RlciBmb3Igc3RhcnRpbmcgZXJhc2Ugb2YgYSBwYWdlIGluIENvZGUgYXJlYSAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVBBR0VfRVJBU0VQQUdFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSQVNFUEFHRSBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VQQUdFX0VSQVNFUEFHRV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBOVk1DX0VSQVNFUEFHRV9FUkFTRVBBR0VfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSQVNFUEFHRSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogTlZNQ19FUkFTRVBDUjEgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVwcmVjYXRlZCByZWdpc3RlciAtICBSZWdpc3RlciBmb3IgZXJhc2luZyBhIHBhZ2UgaW4gQ29kZSBhcmVhLiBFcXVpdmFsZW50IHRvIEVSQVNFUEFHRS4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUmVnaXN0ZXIgZm9yIGVyYXNpbmcgYSBwYWdlIGluIENvZGUgYXJlYS4gRXF1aXZhbGVudCB0byBFUkFTRVBBR0UuICovDQorI2RlZmluZSBOVk1DX0VSQVNFUENSMV9FUkFTRVBDUjFfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVJBU0VQQ1IxIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVBDUjFfRVJBU0VQQ1IxX01zayAoMHhGRkZGRkZGRlVMIDw8IE5WTUNfRVJBU0VQQ1IxX0VSQVNFUENSMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJBU0VQQ1IxIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0VSQVNFQUxMICovDQorLyogRGVzY3JpcHRpb246IFJlZ2lzdGVyIGZvciBlcmFzaW5nIGFsbCBub24tdm9sYXRpbGUgdXNlciBtZW1vcnkgKi8NCisNCisvKiBCaXQgMCA6IEVyYXNlIGFsbCBub24tdm9sYXRpbGUgbWVtb3J5IGluY2x1ZGluZyBVSUNSIHJlZ2lzdGVycy4gTm90ZSB0aGF0IHRoZSBlcmFzZSBtdXN0IGJlIGVuYWJsZWQgdXNpbmcgQ09ORklHLldFTiBiZWZvcmUgdGhlIG5vbi12b2xhdGlsZSBtZW1vcnkgY2FuIGJlIGVyYXNlZC4gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VBTExfRVJBU0VBTExfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVJBU0VBTEwgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFQUxMX0VSQVNFQUxMX01zayAoMHgxVUwgPDwgTlZNQ19FUkFTRUFMTF9FUkFTRUFMTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJBU0VBTEwgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFQUxMX0VSQVNFQUxMX05vT3BlcmF0aW9uICgwVUwpIC8qITwgTm8gb3BlcmF0aW9uICovDQorI2RlZmluZSBOVk1DX0VSQVNFQUxMX0VSQVNFQUxMX0VyYXNlICgxVUwpIC8qITwgU3RhcnQgY2hpcCBlcmFzZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0VSQVNFUENSMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXByZWNhdGVkIHJlZ2lzdGVyIC0gIFJlZ2lzdGVyIGZvciBlcmFzaW5nIGEgcGFnZSBpbiBDb2RlIGFyZWEuIEVxdWl2YWxlbnQgdG8gRVJBU0VQQUdFLiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZWdpc3RlciBmb3Igc3RhcnRpbmcgZXJhc2Ugb2YgYSBwYWdlIGluIENvZGUgYXJlYS4gRXF1aXZhbGVudCB0byBFUkFTRVBBR0UuICovDQorI2RlZmluZSBOVk1DX0VSQVNFUENSMF9FUkFTRVBDUjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVJBU0VQQ1IwIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVBDUjBfRVJBU0VQQ1IwX01zayAoMHhGRkZGRkZGRlVMIDw8IE5WTUNfRVJBU0VQQ1IwX0VSQVNFUENSMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJBU0VQQ1IwIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0VSQVNFVUlDUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWdpc3RlciBmb3IgZXJhc2luZyBVc2VyIEluZm9ybWF0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovDQorDQorLyogQml0IDAgOiBSZWdpc3RlciBzdGFydGluZyBlcmFzZSBvZiBhbGwgVXNlciBJbmZvcm1hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVycy4gTm90ZSB0aGF0IHRoZSBlcmFzZSBtdXN0IGJlIGVuYWJsZWQgdXNpbmcgQ09ORklHLldFTiBiZWZvcmUgdGhlIFVJQ1IgY2FuIGJlIGVyYXNlZC4gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VVSUNSX0VSQVNFVUlDUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUkFTRVVJQ1IgZmllbGQuICovDQorI2RlZmluZSBOVk1DX0VSQVNFVUlDUl9FUkFTRVVJQ1JfTXNrICgweDFVTCA8PCBOVk1DX0VSQVNFVUlDUl9FUkFTRVVJQ1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSQVNFVUlDUiBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfRVJBU0VVSUNSX0VSQVNFVUlDUl9Ob09wZXJhdGlvbiAoMFVMKSAvKiE8IE5vIG9wZXJhdGlvbiAqLw0KKyNkZWZpbmUgTlZNQ19FUkFTRVVJQ1JfRVJBU0VVSUNSX0VyYXNlICgxVUwpIC8qITwgU3RhcnQgZXJhc2Ugb2YgVUlDUiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0lDQUNIRUNORiAqLw0KKy8qIERlc2NyaXB0aW9uOiBJLUNvZGUgY2FjaGUgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8NCisNCisvKiBCaXQgOCA6IENhY2hlIHByb2ZpbGluZyBlbmFibGUgKi8NCisjZGVmaW5lIE5WTUNfSUNBQ0hFQ05GX0NBQ0hFUFJPRkVOX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENBQ0hFUFJPRkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVQUk9GRU5fTXNrICgweDFVTCA8PCBOVk1DX0lDQUNIRUNORl9DQUNIRVBST0ZFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0FDSEVQUk9GRU4gZmllbGQuICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRVBST0ZFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2FjaGUgcHJvZmlsaW5nICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRVBST0ZFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNhY2hlIHByb2ZpbGluZyAqLw0KKw0KKy8qIEJpdCAwIDogQ2FjaGUgZW5hYmxlICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRUVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENBQ0hFRU4gZmllbGQuICovDQorI2RlZmluZSBOVk1DX0lDQUNIRUNORl9DQUNIRUVOX01zayAoMHgxVUwgPDwgTlZNQ19JQ0FDSEVDTkZfQ0FDSEVFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0FDSEVFTiBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfSUNBQ0hFQ05GX0NBQ0hFRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNhY2hlLiBJbnZhbGlkYXRlcyBhbGwgY2FjaGUgZW50cmllcy4gKi8NCisjZGVmaW5lIE5WTUNfSUNBQ0hFQ05GX0NBQ0hFRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjYWNoZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0lISVQgKi8NCisvKiBEZXNjcmlwdGlvbjogSS1Db2RlIGNhY2hlIGhpdCBjb3VudGVyLiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBOdW1iZXIgb2YgY2FjaGUgaGl0cyAqLw0KKyNkZWZpbmUgTlZNQ19JSElUX0hJVFNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSElUUyBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfSUhJVF9ISVRTX01zayAoMHhGRkZGRkZGRlVMIDw8IE5WTUNfSUhJVF9ISVRTX1BvcykgLyohPCBCaXQgbWFzayBvZiBISVRTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBOVk1DX0lNSVNTICovDQorLyogRGVzY3JpcHRpb246IEktQ29kZSBjYWNoZSBtaXNzIGNvdW50ZXIuICovDQorDQorLyogQml0cyAzMS4uMCA6IE51bWJlciBvZiBjYWNoZSBtaXNzZXMgKi8NCisjZGVmaW5lIE5WTUNfSU1JU1NfTUlTU0VTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1JU1NFUyBmaWVsZC4gKi8NCisjZGVmaW5lIE5WTUNfSU1JU1NfTUlTU0VTX01zayAoMHhGRkZGRkZGRlVMIDw8IE5WTUNfSU1JU1NfTUlTU0VTX1BvcykgLyohPCBCaXQgbWFzayBvZiBNSVNTRVMgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogR1BJTyAqLw0KKy8qIERlc2NyaXB0aW9uOiBHUElPIFBvcnQgMSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX09VVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBXcml0ZSBHUElPIHBvcnQgKi8NCisNCisvKiBCaXQgMzEgOiBQaW4gMzEgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMzFfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMxX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMzAgOiBQaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMzBfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjMwX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjkgOiBQaW4gMjkgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI5X1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI5X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjlfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI5X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjggOiBQaW4gMjggKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjhfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI4X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjcgOiBQaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjdfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI3X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjYgOiBQaW4gMjYgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI2X1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI2X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjZfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI2X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjUgOiBQaW4gMjUgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjVfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI1X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjQgOiBQaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjRfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjI0X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjMgOiBQaW4gMjMgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIzX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIzX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjNfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIzX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjIgOiBQaW4gMjIgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjJfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIyX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjEgOiBQaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjFfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIxX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjAgOiBQaW4gMjAgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIwX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIwX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMjBfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjIwX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTkgOiBQaW4gMTkgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTlfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE5X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTggOiBQaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMThfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE4X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTcgOiBQaW4gMTcgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE3X1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE3X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTdfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE3X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTYgOiBQaW4gMTYgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTZfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE2X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTUgOiBQaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTVfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE1X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTQgOiBQaW4gMTQgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE0X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE0X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTRfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjE0X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTMgOiBQaW4gMTMgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTNfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEzX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTIgOiBQaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTJfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEyX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTEgOiBQaW4gMTEgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjExX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjExX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTFfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjExX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTAgOiBQaW4gMTAgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMTBfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjEwX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgOSA6IFBpbiA5ICovDQorI2RlZmluZSBHUElPX09VVF9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU45X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjlfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjlfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA4IDogUGluIDggKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjhfTXNrICgweDFVTCA8PCBHUElPX09VVF9QSU44X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOOF9Mb3cgKDBVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOOF9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDcgOiBQaW4gNyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU43X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU43X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgNiA6IFBpbiA2ICovDQorI2RlZmluZSBHUElPX09VVF9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU42X01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjZfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjZfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA1IDogUGluIDUgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjVfTXNrICgweDFVTCA8PCBHUElPX09VVF9QSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONV9Mb3cgKDBVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONV9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDQgOiBQaW4gNCAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU40X0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU40X0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMyA6IFBpbiAzICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjNfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjNfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyIDogUGluIDIgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjJfTXNrICgweDFVTCA8PCBHUElPX09VVF9QSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMl9Mb3cgKDBVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMl9IaWdoICgxVUwpIC8qITwgUGluIGRyaXZlciBpcyBoaWdoICovDQorDQorLyogQml0IDEgOiBQaW4gMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRfUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUX1BJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xX0xvdyAoMFVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVF9QSU4xX0hpZ2ggKDFVTCkgLyohPCBQaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMCA6IFBpbiAwICovDQorI2RlZmluZSBHUElPX09VVF9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVF9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19PVVRfUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjBfTG93ICgwVUwpIC8qITwgUGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUX1BJTjBfSGlnaCAoMVVMKSAvKiE8IFBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX09VVFNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZXQgaW5kaXZpZHVhbCBiaXRzIGluIEdQSU8gcG9ydCAqLw0KKw0KKy8qIEJpdCAzMSA6IFBpbiAzMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzFfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4zMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4zMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzFfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAzMCA6IFBpbiAzMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzBfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4zMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4zMF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMzBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyOSA6IFBpbiAyOSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjlfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yOV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjlfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjlfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyOCA6IFBpbiAyOCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjhfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yOF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjhfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjhfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNyA6IFBpbiAyNyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjdfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yN19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjdfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNiA6IFBpbiAyNiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjZfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yNl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjZfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjZfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNSA6IFBpbiAyNSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjVfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yNV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjVfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjVfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNCA6IFBpbiAyNCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjRfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yNF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjRfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMyA6IFBpbiAyMyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjNfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yM19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjNfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjNfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMiA6IFBpbiAyMiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjJfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yMl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjJfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjJfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMSA6IFBpbiAyMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjFfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjFfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMCA6IFBpbiAyMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjBfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4yMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yMF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMjBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOSA6IFBpbiAxOSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTlfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xOV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTlfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTlfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOCA6IFBpbiAxOCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMThfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xOF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMThfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMThfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNyA6IFBpbiAxNyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTdfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xN19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTdfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNiA6IFBpbiAxNiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTZfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xNl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTZfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTZfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNSA6IFBpbiAxNSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTVfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xNV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTVfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTVfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNCA6IFBpbiAxNCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTRfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xNF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTRfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMyA6IFBpbiAxMyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTNfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xM19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTNfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTNfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMiA6IFBpbiAxMiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTJfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xMl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTJfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTJfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMSA6IFBpbiAxMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTFfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTFfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMCA6IFBpbiAxMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTBfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4xMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xMF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMTBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA5IDogUGluIDkgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjlfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU45X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOOV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOOV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU45X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgOCA6IFBpbiA4ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU44X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjhfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjhfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOOF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDcgOiBQaW4gNyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUU0VUX1BJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU43X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU43X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA2IDogUGluIDYgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjZfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONl9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU42X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgNSA6IFBpbiA1ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU41X01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjVfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjVfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDQgOiBQaW4gNCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUU0VUX1BJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU40X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU40X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAzIDogUGluIDMgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjNfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOM19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOM19IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4zX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMiA6IFBpbiAyICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19PVVRTRVRfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjJfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjJfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gaGlnaDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEgOiBQaW4gMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUU0VUX1BJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4xX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGhpZ2g7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAwIDogUGluIDAgKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUU0VUX1BJTjBfTXNrICgweDFVTCA8PCBHUElPX09VVFNFVF9QSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRTRVRfUElOMF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVFNFVF9QSU4wX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBoaWdoOyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT19PVVRDTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogQ2xlYXIgaW5kaXZpZHVhbCBiaXRzIGluIEdQSU8gcG9ydCAqLw0KKw0KKy8qIEJpdCAzMSA6IFBpbiAzMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMzFfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4zMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zMV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMzFfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMzFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMzAgOiBQaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMzBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMwX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjMwX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI5IDogUGluIDI5ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yOV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI5X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yOV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yOV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyOCA6IFBpbiAyOCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjhfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yOF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjhfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjhfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjcgOiBQaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjdfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI3X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI3X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI2IDogUGluIDI2ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNl9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI2X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNl9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNSA6IFBpbiAyNSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjVfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yNV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjVfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjVfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjQgOiBQaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjRfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI0X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjI0X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIzIDogUGluIDIzICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yM19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIzX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yM19IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yM19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMiA6IFBpbiAyMiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjJfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjJfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjJfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjEgOiBQaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMjFfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIxX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIxX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIwIDogUGluIDIwICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjIwX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOSA6IFBpbiAxOSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTlfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xOV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTlfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTggOiBQaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMThfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE4X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE4X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE3IDogUGluIDE3ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xN19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE3X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xN19IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xN19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNiA6IFBpbiAxNiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTZfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTZfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTUgOiBQaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTVfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE1X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE1X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE0IDogUGluIDE0ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjE0X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xNF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMyA6IFBpbiAxMyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTNfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xM19Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTNfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTIgOiBQaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTJfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEyX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjEyX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDExIDogUGluIDExICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjExX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjExX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMCA6IFBpbiAxMCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTBfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4xMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xMF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMTBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgOSA6IFBpbiA5ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU45X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjlfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjlfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOOV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA4IDogUGluIDggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjhfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU44X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOOF9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOOF9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU44X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDcgOiBQaW4gNyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU43X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU43X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjdfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgNiA6IFBpbiA2ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU42X01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjZfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjZfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCA1IDogUGluIDUgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjVfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONV9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONV9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU41X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDQgOiBQaW4gNCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU40X0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU40X0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjRfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMyA6IFBpbiAzICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjNfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjNfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOM19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyIDogUGluIDIgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjJfTXNrICgweDFVTCA8PCBHUElPX09VVENMUl9QSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMl9Mb3cgKDBVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMl9IaWdoICgxVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBoaWdoICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4yX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyB0aGUgcGluIGxvdzsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEgOiBQaW4gMSAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fT1VUQ0xSX1BJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xX0xvdyAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgbG93ICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4xX0hpZ2ggKDFVTCkgLyohPCBSZWFkOiBwaW4gZHJpdmVyIGlzIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHRoZSBwaW4gbG93OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMCA6IFBpbiAwICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX09VVENMUl9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19PVVRDTFJfUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjBfTG93ICgwVUwpIC8qITwgUmVhZDogcGluIGRyaXZlciBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fT1VUQ0xSX1BJTjBfSGlnaCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBkcml2ZXIgaXMgaGlnaCAqLw0KKyNkZWZpbmUgR1BJT19PVVRDTFJfUElOMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgdGhlIHBpbiBsb3c7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBHUElPX0lOICovDQorLyogRGVzY3JpcHRpb246IFJlYWQgR1BJTyBwb3J0ICovDQorDQorLyogQml0IDMxIDogUGluIDMxICovDQorI2RlZmluZSBHUElPX0lOX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMzFfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMzFfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zMV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMzAgOiBQaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zMF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4zMF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjMwX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyOSA6IFBpbiAyOSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI5X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI5X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjlfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDI4IDogUGluIDI4ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjhfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjhfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yOF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjcgOiBQaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yN19Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yN19Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI3X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyNiA6IFBpbiAyNiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI2X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI2X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjZfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDI1IDogUGluIDI1ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjVfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjVfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjQgOiBQaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yNF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjI0X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyMyA6IFBpbiAyMyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIzX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIzX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjNfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDIyIDogUGluIDIyICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjJfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjJfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMl9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMjEgOiBQaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMV9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMV9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIxX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAyMCA6IFBpbiAyMCAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIwX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4yMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjIwX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMjBfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDE5IDogUGluIDE5ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTlfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTlfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xOV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTggOiBQaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xOF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xOF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE4X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxNyA6IFBpbiAxNyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE3X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE3X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTdfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDE2IDogUGluIDE2ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTZfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTZfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNl9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTUgOiBQaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNV9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNV9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE1X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxNCA6IFBpbiAxNCAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE0X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjE0X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTRfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDEzIDogUGluIDEzICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTNfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTNfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xM19IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMTIgOiBQaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMl9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMl9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEyX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxMSA6IFBpbiAxMSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjExX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjExX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTFfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDEwIDogUGluIDEwICovDQorI2RlZmluZSBHUElPX0lOX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTBfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMTBfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xMF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgOSA6IFBpbiA5ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOOV9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOOV9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjlfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDggOiBQaW4gOCAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjhfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjhfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU44X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA3IDogUGluIDcgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU43X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU43X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElON19IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgNiA6IFBpbiA2ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONl9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONl9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjZfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDUgOiBQaW4gNSAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjVfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjVfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU41X0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCA0IDogUGluIDQgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU40X01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU40X0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElONF9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMyA6IFBpbiAzICovDQorI2RlZmluZSBHUElPX0lOX1BJTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOM19Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOM19Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjNfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogQml0IDIgOiBQaW4gMiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjJfTXNrICgweDFVTCA8PCBHUElPX0lOX1BJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0lOX1BJTjJfTG93ICgwVUwpIC8qITwgUGluIGlucHV0IGlzIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4yX0hpZ2ggKDFVTCkgLyohPCBQaW4gaW5wdXQgaXMgaGlnaCAqLw0KKw0KKy8qIEJpdCAxIDogUGluIDEgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xX01zayAoMHgxVUwgPDwgR1BJT19JTl9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19JTl9QSU4xX0xvdyAoMFVMKSAvKiE8IFBpbiBpbnB1dCBpcyBsb3cgKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMV9IaWdoICgxVUwpIC8qITwgUGluIGlucHV0IGlzIGhpZ2ggKi8NCisNCisvKiBCaXQgMCA6IFBpbiAwICovDQorI2RlZmluZSBHUElPX0lOX1BJTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMF9Nc2sgKDB4MVVMIDw8IEdQSU9fSU5fUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fSU5fUElOMF9Mb3cgKDBVTCkgLyohPCBQaW4gaW5wdXQgaXMgbG93ICovDQorI2RlZmluZSBHUElPX0lOX1BJTjBfSGlnaCAoMVVMKSAvKiE8IFBpbiBpbnB1dCBpcyBoaWdoICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fRElSICovDQorLyogRGVzY3JpcHRpb246IERpcmVjdGlvbiBvZiBHUElPIHBpbnMgKi8NCisNCisvKiBCaXQgMzEgOiBQaW4gMzEgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMzFfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zMV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAzMCA6IFBpbiAzMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMzBfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4zMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4zMF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjMwX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDI5IDogUGluIDI5ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yOV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI5X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjlfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMjggOiBQaW4gMjggKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjhfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yOF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyNyA6IFBpbiAyNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjdfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yN19JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI3X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDI2IDogUGluIDI2ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI2X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjZfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMjUgOiBQaW4gMjUgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjVfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyNCA6IFBpbiAyNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjRfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yNF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjI0X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDIzIDogUGluIDIzICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yM19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIzX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjNfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMjIgOiBQaW4gMjIgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjJfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMl9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAyMSA6IFBpbiAyMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjFfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4yMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMV9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIxX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDIwIDogUGluIDIwICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjIwX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMjBfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTkgOiBQaW4gMTkgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTlfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xOV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxOCA6IFBpbiAxOCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMThfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xOF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE4X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDE3IDogUGluIDE3ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xN19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE3X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTdfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTYgOiBQaW4gMTYgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTZfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNl9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxNSA6IFBpbiAxNSAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTVfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNV9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE1X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDE0IDogUGluIDE0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xNF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjE0X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTRfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTMgOiBQaW4gMTMgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTNfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xM19PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAxMiA6IFBpbiAxMiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTJfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4xMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMl9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEyX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDExIDogUGluIDExICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjExX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjExX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTFfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMTAgOiBQaW4gMTAgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMTBfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xMF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCA5IDogUGluIDkgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjlfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU45X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOOV9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjlfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgOCA6IFBpbiA4ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU44X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjhfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU44X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDcgOiBQaW4gNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElON19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU43X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElON19PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCA2IDogUGluIDYgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjZfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONl9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjZfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgNSA6IFBpbiA1ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU41X01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjVfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU41X091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDQgOiBQaW4gNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU40X0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElONF9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAzIDogUGluIDMgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjNfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOM19JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjNfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBCaXQgMiA6IFBpbiAyICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19ESVJfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjJfSW5wdXQgKDBVTCkgLyohPCBQaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4yX091dHB1dCAoMVVMKSAvKiE8IFBpbiBzZXQgYXMgb3V0cHV0ICovDQorDQorLyogQml0IDEgOiBQaW4gMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSX1BJTjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUl9QSU4xX0lucHV0ICgwVUwpIC8qITwgUGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMV9PdXRwdXQgKDFVTCkgLyohPCBQaW4gc2V0IGFzIG91dHB1dCAqLw0KKw0KKy8qIEJpdCAwIDogUGluIDAgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjBfTXNrICgweDFVTCA8PCBHUElPX0RJUl9QSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJfUElOMF9JbnB1dCAoMFVMKSAvKiE8IFBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX1BJTjBfT3V0cHV0ICgxVUwpIC8qITwgUGluIHNldCBhcyBvdXRwdXQgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT19ESVJTRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRElSIHNldCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzMSA6IFNldCBhcyBvdXRwdXQgcGluIDMxICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMxX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMzFfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMxX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDMwIDogU2V0IGFzIG91dHB1dCBwaW4gMzAgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMzBfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zMF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMzBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjkgOiBTZXQgYXMgb3V0cHV0IHBpbiAyOSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjlfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI5X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyOCA6IFNldCBhcyBvdXRwdXQgcGluIDI4ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yOF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI4X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjhfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI4X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI3IDogU2V0IGFzIG91dHB1dCBwaW4gMjcgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjdfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yN19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjYgOiBTZXQgYXMgb3V0cHV0IHBpbiAyNiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjZfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI2X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNl9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNSA6IFNldCBhcyBvdXRwdXQgcGluIDI1ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI1X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjVfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI1X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI0IDogU2V0IGFzIG91dHB1dCBwaW4gMjQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjRfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yNF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjMgOiBTZXQgYXMgb3V0cHV0IHBpbiAyMyAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjNfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yM19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIzX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yM19TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMiA6IFNldCBhcyBvdXRwdXQgcGluIDIyICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIyX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjJfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIyX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIxIDogU2V0IGFzIG91dHB1dCBwaW4gMjEgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjFfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjAgOiBTZXQgYXMgb3V0cHV0IHBpbiAyMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMjBfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4yMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjIwX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOSA6IFNldCBhcyBvdXRwdXQgcGluIDE5ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE5X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTlfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE5X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE4IDogU2V0IGFzIG91dHB1dCBwaW4gMTggKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMThfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xOF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMThfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTcgOiBTZXQgYXMgb3V0cHV0IHBpbiAxNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTdfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xN19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE3X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xN19TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNiA6IFNldCBhcyBvdXRwdXQgcGluIDE2ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE2X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTZfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE2X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE1IDogU2V0IGFzIG91dHB1dCBwaW4gMTUgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTVfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTVfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTQgOiBTZXQgYXMgb3V0cHV0IHBpbiAxNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTRfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjE0X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xNF9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMyA6IFNldCBhcyBvdXRwdXQgcGluIDEzICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xM19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEzX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTNfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEzX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEyIDogU2V0IGFzIG91dHB1dCBwaW4gMTIgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTJfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTJfU2V0ICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gb3V0cHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTEgOiBTZXQgYXMgb3V0cHV0IHBpbiAxMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTFfTXNrICgweDFVTCA8PCBHUElPX0RJUlNFVF9QSU4xMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjExX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMV9TZXQgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBvdXRwdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMCA6IFNldCBhcyBvdXRwdXQgcGluIDEwICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSU0VUX1BJTjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEwX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJTRVRfUElOMTBfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjEwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDkgOiBTZXQgYXMgb3V0cHV0IHBpbiA5ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU45X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjlfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU45X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU45X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDggOiBTZXQgYXMgb3V0cHV0IHBpbiA4ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU44X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU44X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjhfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU44X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU44X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDcgOiBTZXQgYXMgb3V0cHV0IHBpbiA3ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU43X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU43X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjdfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU43X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU43X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDYgOiBTZXQgYXMgb3V0cHV0IHBpbiA2ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU42X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjZfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU42X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU42X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDUgOiBTZXQgYXMgb3V0cHV0IHBpbiA1ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU41X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjVfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU41X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU41X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDQgOiBTZXQgYXMgb3V0cHV0IHBpbiA0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU40X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU40X01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjRfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU40X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU40X1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDMgOiBTZXQgYXMgb3V0cHV0IHBpbiAzICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjNfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4zX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIgOiBTZXQgYXMgb3V0cHV0IHBpbiAyICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjJfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4yX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEgOiBTZXQgYXMgb3V0cHV0IHBpbiAxICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjFfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4xX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDAgOiBTZXQgYXMgb3V0cHV0IHBpbiAwICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4wX01zayAoMHgxVUwgPDwgR1BJT19ESVJTRVRfUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSU0VUX1BJTjBfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4wX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUlNFVF9QSU4wX1NldCAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIG91dHB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fRElSQ0xSICovDQorLyogRGVzY3JpcHRpb246IERJUiBjbGVhciByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzMSA6IFNldCBhcyBpbnB1dCBwaW4gMzEgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMxX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzFfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zMV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDMwIDogU2V0IGFzIGlucHV0IHBpbiAzMCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMzBfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4zMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zMF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjMwX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4zMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjkgOiBTZXQgYXMgaW5wdXQgcGluIDI5ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI5X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjlfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI5X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyOCA6IFNldCBhcyBpbnB1dCBwaW4gMjggKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI4X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjhfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yOF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjhfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI3IDogU2V0IGFzIGlucHV0IHBpbiAyNyAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjdfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yN19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI3X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yN19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjYgOiBTZXQgYXMgaW5wdXQgcGluIDI2ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNl9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI2X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjZfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI2X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyNSA6IFNldCBhcyBpbnB1dCBwaW4gMjUgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI1X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjVfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjVfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDI0IDogU2V0IGFzIGlucHV0IHBpbiAyNCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjRfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjI0X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yNF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjMgOiBTZXQgYXMgaW5wdXQgcGluIDIzICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yM19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIzX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjNfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIzX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAyMiA6IFNldCBhcyBpbnB1dCBwaW4gMjIgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIyX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjJfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjJfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIxIDogU2V0IGFzIGlucHV0IHBpbiAyMSAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjFfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIxX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMjAgOiBTZXQgYXMgaW5wdXQgcGluIDIwICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4yMF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIwX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMjBfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjIwX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxOSA6IFNldCBhcyBpbnB1dCBwaW4gMTkgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE5X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTlfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xOV9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE4IDogU2V0IGFzIGlucHV0IHBpbiAxOCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMThfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xOF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE4X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xOF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTcgOiBTZXQgYXMgaW5wdXQgcGluIDE3ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xN19Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE3X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTdfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE3X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxNiA6IFNldCBhcyBpbnB1dCBwaW4gMTYgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE2X01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTZfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNl9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDE1IDogU2V0IGFzIGlucHV0IHBpbiAxNSAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTVfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE1X091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTQgOiBTZXQgYXMgaW5wdXQgcGluIDE0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xNF9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE0X0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTRfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjE0X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMyA6IFNldCBhcyBpbnB1dCBwaW4gMTMgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEzX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTNfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xM19PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEyIDogU2V0IGFzIGlucHV0IHBpbiAxMiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTJfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEyX091dHB1dCAoMVVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgb3V0cHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiB3cml0aW5nIGEgJzEnIHNldHMgcGluIHRvIGlucHV0OyB3cml0aW5nIGEgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisNCisvKiBCaXQgMTEgOiBTZXQgYXMgaW5wdXQgcGluIDExICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMV9Nc2sgKDB4MVVMIDw8IEdQSU9fRElSQ0xSX1BJTjExX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjExX0lucHV0ICgwVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBpbnB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTFfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjExX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IHdyaXRpbmcgYSAnMScgc2V0cyBwaW4gdG8gaW5wdXQ7IHdyaXRpbmcgYSAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKw0KKy8qIEJpdCAxMCA6IFNldCBhcyBpbnB1dCBwaW4gMTAgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjEwX01zayAoMHgxVUwgPDwgR1BJT19ESVJDTFJfUElOMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTBfSW5wdXQgKDBVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIGlucHV0ICovDQorI2RlZmluZSBHUElPX0RJUkNMUl9QSU4xMF9PdXRwdXQgKDFVTCkgLyohPCBSZWFkOiBwaW4gc2V0IGFzIG91dHB1dCAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMTBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDkgOiBTZXQgYXMgaW5wdXQgcGluIDkgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjlfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU45X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU45IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOOV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjlfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDggOiBTZXQgYXMgaW5wdXQgcGluIDggKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjhfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU44X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU44IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOOF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjhfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjhfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDcgOiBTZXQgYXMgaW5wdXQgcGluIDcgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjdfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElON19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjdfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjdfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDYgOiBTZXQgYXMgaW5wdXQgcGluIDYgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjZfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElONl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjZfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDUgOiBTZXQgYXMgaW5wdXQgcGluIDUgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjVfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElONV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjVfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjVfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDQgOiBTZXQgYXMgaW5wdXQgcGluIDQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjRfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElONF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjRfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjRfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDMgOiBTZXQgYXMgaW5wdXQgcGluIDMgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjNfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOM19JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjNfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDIgOiBTZXQgYXMgaW5wdXQgcGluIDIgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjJfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMl9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjJfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjJfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDEgOiBTZXQgYXMgaW5wdXQgcGluIDEgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjFfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMV9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjFfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogQml0IDAgOiBTZXQgYXMgaW5wdXQgcGluIDAgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjBfTXNrICgweDFVTCA8PCBHUElPX0RJUkNMUl9QSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19ESVJDTFJfUElOMF9JbnB1dCAoMFVMKSAvKiE8IFJlYWQ6IHBpbiBzZXQgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjBfT3V0cHV0ICgxVUwpIC8qITwgUmVhZDogcGluIHNldCBhcyBvdXRwdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSQ0xSX1BJTjBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogd3JpdGluZyBhICcxJyBzZXRzIHBpbiB0byBpbnB1dDsgd3JpdGluZyBhICcwJyBoYXMgbm8gZWZmZWN0ICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fTEFUQ0ggKi8NCisvKiBEZXNjcmlwdGlvbjogTGF0Y2ggcmVnaXN0ZXIgaW5kaWNhdGluZyB3aGF0IEdQSU8gcGlucyB0aGF0IGhhdmUgbWV0IHRoZSBjcml0ZXJpYSBzZXQgaW4gdGhlIFBJTl9DTkZbbl0uU0VOU0UgcmVnaXN0ZXJzICovDQorDQorLyogQml0IDMxIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMzEgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjMxLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMzFfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4zMSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMzFfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMzFfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAzMCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjMwIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYzMC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zMF9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMwX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4zMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMzAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMwX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjMwX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjkgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yOSBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjkuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yOV9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yOV9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yOV9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDI4IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjggaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjI4LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjhfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjhfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjhfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyNyA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjI3IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyNy5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yN19Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI3X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4yN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjcgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI3X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI3X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjYgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yNiBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjYuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNl9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNl9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNl9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDI1IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjUgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjI1LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjVfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yNSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjVfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjVfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyNCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjI0IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyNC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yNF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI0X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4yNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjQgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI0X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjI0X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjMgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yMyBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjMuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yM19Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yM19Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yM19MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDIyIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMjIgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjIyLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjJfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4yMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjJfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjJfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAyMSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjIxIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyMS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIxX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4yMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMjEgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIxX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjIxX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMjAgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yMCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMjAuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yMF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDE5IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTkgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjE5LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTlfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xOSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTlfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTlfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxOCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjE4IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxOC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xOF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE4X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTggZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE4X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE4X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMTcgOiBTdGF0dXMgb24gd2hldGhlciBQSU4xNyBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMTcuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xN19Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xN19Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xN19MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDE2IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTYgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjE2LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTZfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xNiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTZfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTZfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxNSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjE1IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxNS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNV9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE1X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE1X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjE1X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMTQgOiBTdGF0dXMgb24gd2hldGhlciBQSU4xNCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMTQuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xNF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDEzIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTMgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjEzLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTNfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMyBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTNfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTNfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAxMiA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjEyIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYxMi5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEyX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMTIgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEyX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEyX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMTEgOiBTdGF0dXMgb24gd2hldGhlciBQSU4xMSBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMTEuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMV9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjExIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMV9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xMV9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDEwIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMTAgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjEwLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTBfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xMCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTBfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMTBfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCA5IDogU3RhdHVzIG9uIHdoZXRoZXIgUElOOSBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GOS5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU45X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjlfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjkgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjlfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOOV9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDggOiBTdGF0dXMgb24gd2hldGhlciBQSU44IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkY4LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOOF9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOOF9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU44X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgNyA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjcgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjcuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU43X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU43X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjdfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCA2IDogU3RhdHVzIG9uIHdoZXRoZXIgUElONiBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GNi5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjZfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjYgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjZfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONl9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDUgOiBTdGF0dXMgb24gd2hldGhlciBQSU41IGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkY1LlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONV9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONV9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU41X0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgNCA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjQgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjQuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU40X01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU40X05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjRfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAzIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMyBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMy5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjNfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjMgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjNfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOM19MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogQml0IDIgOiBTdGF0dXMgb24gd2hldGhlciBQSU4yIGhhcyBtZXQgY3JpdGVyaWEgc2V0IGluIFBJTl9DTkYyLlNFTlNFIHJlZ2lzdGVyLiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMl9Nc2sgKDB4MVVMIDw8IEdQSU9fTEFUQ0hfUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMl9Ob3RMYXRjaGVkICgwVUwpIC8qITwgQ3JpdGVyaWEgaGFzIG5vdCBiZWVuIG1ldCAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4yX0xhdGNoZWQgKDFVTCkgLyohPCBDcml0ZXJpYSBoYXMgYmVlbiBtZXQgKi8NCisNCisvKiBCaXQgMSA6IFN0YXR1cyBvbiB3aGV0aGVyIFBJTjEgaGFzIG1ldCBjcml0ZXJpYSBzZXQgaW4gUElOX0NORjEuU0VOU0UgcmVnaXN0ZXIuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xX01zayAoMHgxVUwgPDwgR1BJT19MQVRDSF9QSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4xX05vdExhdGNoZWQgKDBVTCkgLyohPCBDcml0ZXJpYSBoYXMgbm90IGJlZW4gbWV0ICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjFfTGF0Y2hlZCAoMVVMKSAvKiE8IENyaXRlcmlhIGhhcyBiZWVuIG1ldCAqLw0KKw0KKy8qIEJpdCAwIDogU3RhdHVzIG9uIHdoZXRoZXIgUElOMCBoYXMgbWV0IGNyaXRlcmlhIHNldCBpbiBQSU5fQ05GMC5TRU5TRSByZWdpc3Rlci4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgR1BJT19MQVRDSF9QSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjBfTXNrICgweDFVTCA8PCBHUElPX0xBVENIX1BJTjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTjAgZmllbGQuICovDQorI2RlZmluZSBHUElPX0xBVENIX1BJTjBfTm90TGF0Y2hlZCAoMFVMKSAvKiE8IENyaXRlcmlhIGhhcyBub3QgYmVlbiBtZXQgKi8NCisjZGVmaW5lIEdQSU9fTEFUQ0hfUElOMF9MYXRjaGVkICgxVUwpIC8qITwgQ3JpdGVyaWEgaGFzIGJlZW4gbWV0ICovDQorDQorLyogUmVnaXN0ZXI6IEdQSU9fREVURUNUTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWxlY3QgYmV0d2VlbiBkZWZhdWx0IERFVEVDVCBzaWduYWwgYmVoYXZpb3VyIGFuZCBMREVURUNUIG1vZGUgKi8NCisNCisvKiBCaXQgMCA6IFNlbGVjdCBiZXR3ZWVuIGRlZmF1bHQgREVURUNUIHNpZ25hbCBiZWhhdmlvdXIgYW5kIExERVRFQ1QgbW9kZSAqLw0KKyNkZWZpbmUgR1BJT19ERVRFQ1RNT0RFX0RFVEVDVE1PREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgREVURUNUTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fREVURUNUTU9ERV9ERVRFQ1RNT0RFX01zayAoMHgxVUwgPDwgR1BJT19ERVRFQ1RNT0RFX0RFVEVDVE1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVEVDVE1PREUgZmllbGQuICovDQorI2RlZmluZSBHUElPX0RFVEVDVE1PREVfREVURUNUTU9ERV9EZWZhdWx0ICgwVUwpIC8qITwgREVURUNUIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBQSU4gREVURUNUIHNpZ25hbHMgKi8NCisjZGVmaW5lIEdQSU9fREVURUNUTU9ERV9ERVRFQ1RNT0RFX0xERVRFQ1QgKDFVTCkgLyohPCBVc2UgdGhlIGxhdGNoZWQgTERFVEVDVCBiZWhhdmlvdXIgKi8NCisNCisvKiBSZWdpc3RlcjogR1BJT19QSU5fQ05GICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBDb25maWd1cmF0aW9uIG9mIEdQSU8gcGlucyAqLw0KKw0KKy8qIEJpdHMgMTcuLjE2IDogUGluIHNlbnNpbmcgbWVjaGFuaXNtICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfU0VOU0VfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFTlNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1NFTlNFX01zayAoMHgzVUwgPDwgR1BJT19QSU5fQ05GX1NFTlNFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRU5TRSBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9TRU5TRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfU0VOU0VfSGlnaCAoMlVMKSAvKiE8IFNlbnNlIGZvciBoaWdoIGxldmVsICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfU0VOU0VfTG93ICgzVUwpIC8qITwgU2Vuc2UgZm9yIGxvdyBsZXZlbCAqLw0KKw0KKy8qIEJpdHMgMTAuLjggOiBEcml2ZSBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRFJJVkUgZmllbGQuICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfTXNrICgweDdVTCA8PCBHUElPX1BJTl9DTkZfRFJJVkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERSSVZFIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RSSVZFX1MwUzEgKDBVTCkgLyohPCBTdGFuZGFyZCAnMCcsIHN0YW5kYXJkICcxJyAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RSSVZFX0gwUzEgKDFVTCkgLyohPCBIaWdoIGRyaXZlICcwJywgc3RhbmRhcmQgJzEnICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfRFJJVkVfUzBIMSAoMlVMKSAvKiE8IFN0YW5kYXJkICcwJywgaGlnaCBkcml2ZSAnMScgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9IMEgxICgzVUwpIC8qITwgSGlnaCBkcml2ZSAnMCcsIGhpZ2ggJ2RyaXZlICcxJycgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9EMFMxICg0VUwpIC8qITwgRGlzY29ubmVjdCAnMCcgc3RhbmRhcmQgJzEnIChub3JtYWxseSB1c2VkIGZvciB3aXJlZC1vciBjb25uZWN0aW9ucykgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9EMEgxICg1VUwpIC8qITwgRGlzY29ubmVjdCAnMCcsIGhpZ2ggZHJpdmUgJzEnIChub3JtYWxseSB1c2VkIGZvciB3aXJlZC1vciBjb25uZWN0aW9ucykgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9EUklWRV9TMEQxICg2VUwpIC8qITwgU3RhbmRhcmQgJzAnLiBkaXNjb25uZWN0ICcxJyAobm9ybWFsbHkgdXNlZCBmb3Igd2lyZWQtYW5kIGNvbm5lY3Rpb25zKSAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RSSVZFX0gwRDEgKDdVTCkgLyohPCBIaWdoIGRyaXZlICcwJywgZGlzY29ubmVjdCAnMScgKG5vcm1hbGx5IHVzZWQgZm9yIHdpcmVkLWFuZCBjb25uZWN0aW9ucykgKi8NCisNCisvKiBCaXRzIDMuLjIgOiBQdWxsIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9QVUxMX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFBVTEwgZmllbGQuICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfUFVMTF9Nc2sgKDB4M1VMIDw8IEdQSU9fUElOX0NORl9QVUxMX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVUxMIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX1BVTExfRGlzYWJsZWQgKDBVTCkgLyohPCBObyBwdWxsICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfUFVMTF9QdWxsZG93biAoMVVMKSAvKiE8IFB1bGwgZG93biBvbiBwaW4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9QVUxMX1B1bGx1cCAoM1VMKSAvKiE8IFB1bGwgdXAgb24gcGluICovDQorDQorLyogQml0IDEgOiBDb25uZWN0IG9yIGRpc2Nvbm5lY3QgaW5wdXQgYnVmZmVyICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfSU5QVVRfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgSU5QVVQgZmllbGQuICovDQorI2RlZmluZSBHUElPX1BJTl9DTkZfSU5QVVRfTXNrICgweDFVTCA8PCBHUElPX1BJTl9DTkZfSU5QVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOUFVUIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0lOUFVUX0Nvbm5lY3QgKDBVTCkgLyohPCBDb25uZWN0IGlucHV0IGJ1ZmZlciAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0lOUFVUX0Rpc2Nvbm5lY3QgKDFVTCkgLyohPCBEaXNjb25uZWN0IGlucHV0IGJ1ZmZlciAqLw0KKw0KKy8qIEJpdCAwIDogUGluIGRpcmVjdGlvbi4gU2FtZSBwaHlzaWNhbCByZWdpc3RlciBhcyBESVIgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9ESVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRElSIGZpZWxkLiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RJUl9Nc2sgKDB4MVVMIDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJUiBmaWVsZC4gKi8NCisjZGVmaW5lIEdQSU9fUElOX0NORl9ESVJfSW5wdXQgKDBVTCkgLyohPCBDb25maWd1cmUgcGluIGFzIGFuIGlucHV0IHBpbiAqLw0KKyNkZWZpbmUgR1BJT19QSU5fQ05GX0RJUl9PdXRwdXQgKDFVTCkgLyohPCBDb25maWd1cmUgcGluIGFzIGFuIG91dHB1dCBwaW4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBQRE0gKi8NCisvKiBEZXNjcmlwdGlvbjogUHVsc2UgRGVuc2l0eSBNb2R1bGF0aW9uIChEaWdpdGFsIE1pY3JvcGhvbmUpIEludGVyZmFjZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX0VORF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5fRU5EX01zayAoMHgxVUwgPDwgUERNX0lOVEVOX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBETV9JTlRFTl9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5fU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX1NUT1BQRURfTXNrICgweDFVTCA8PCBQRE1fSU5URU5fU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5fU1RBUlRFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX1NUQVJURURfTXNrICgweDFVTCA8PCBQRE1fSU5URU5fU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTl9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUERNX0lOVEVOX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX0VORF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfRU5EX01zayAoMHgxVUwgPDwgUERNX0lOVEVOU0VUX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfRU5EX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFBETV9JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVEFSVEVEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5TRVRfU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFBETV9JTlRFTlNFVF9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOU0VUX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTlNFVF9TVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfRU5EX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9FTkRfTXNrICgweDFVTCA8PCBQRE1fSU5URU5DTFJfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9FTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFBETV9JTlRFTkNMUl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RBUlRFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0lOVEVOQ0xSX1NUQVJURURfTXNrICgweDFVTCA8PCBQRE1fSU5URU5DTFJfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBETV9JTlRFTkNMUl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQRE1fSU5URU5DTFJfU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUERNX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQRE0gbW9kdWxlIGVuYWJsZSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgUERNIG1vZHVsZSAqLw0KKyNkZWZpbmUgUERNX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0VOQUJMRV9FTkFCTEVfTXNrICgweDFVTCA8PCBQRE1fRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQRE1fRU5BQkxFX0VOQUJMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9QRE1DTEtDVFJMICovDQorLyogRGVzY3JpcHRpb246IFBETSBjbG9jayBnZW5lcmF0b3IgY29udHJvbCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQRE1fQ0xLIGZyZXF1ZW5jeSAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkVRIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBQRE1fUERNQ0xLQ1RSTF9GUkVRX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkVRIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV8xMDAwSyAoMHgwODAwMDAwMFVMKSAvKiE8IFBETV9DTEsgPSAzMiBNSHogLyAzMiA9IDEuMDAwIE1IeiAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV9EZWZhdWx0ICgweDA4NDAwMDAwVUwpIC8qITwgUERNX0NMSyA9IDMyIE1IeiAvIDMxID0gMS4wMzIgTUh6LiBOb21pbmFsIGNsb2NrIGZvciBSQVRJTz1SYXRpbzY0LiAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV8xMDY3SyAoMHgwODgwMDAwMFVMKSAvKiE8IFBETV9DTEsgPSAzMiBNSHogLyAzMCA9IDEuMDY3IE1IeiAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV8xMjMxSyAoMHgwOTgwMDAwMFVMKSAvKiE8IFBETV9DTEsgPSAzMiBNSHogLyAyNiA9IDEuMjMxIE1IeiAqLw0KKyNkZWZpbmUgUERNX1BETUNMS0NUUkxfRlJFUV8xMjgwSyAoMHgwQTAwMDAwMFVMKSAvKiE8IFBETV9DTEsgPSAzMiBNSHogLyAyNSA9IDEuMjgwIE1Iei4gTm9taW5hbCBjbG9jayBmb3IgUkFUSU89UmF0aW84MC4gKi8NCisjZGVmaW5lIFBETV9QRE1DTEtDVFJMX0ZSRVFfMTMzM0sgKDB4MEE4MDAwMDBVTCkgLyohPCBQRE1fQ0xLID0gMzIgTUh6IC8gMjQgPSAxLjMzMyBNSHogKi8NCisNCisvKiBSZWdpc3RlcjogUERNX01PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVmaW5lcyB0aGUgcm91dGluZyBvZiB0aGUgY29ubmVjdGVkIFBETSBtaWNyb3Bob25lcycgc2lnbmFscyAqLw0KKw0KKy8qIEJpdCAxIDogRGVmaW5lcyBvbiB3aGljaCBQRE1fQ0xLIGVkZ2UgTGVmdCAob3IgbW9ubykgaXMgc2FtcGxlZCAqLw0KKyNkZWZpbmUgUERNX01PREVfRURHRV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFREdFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX01PREVfRURHRV9Nc2sgKDB4MVVMIDw8IFBETV9NT0RFX0VER0VfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVER0UgZmllbGQuICovDQorI2RlZmluZSBQRE1fTU9ERV9FREdFX0xlZnRGYWxsaW5nICgwVUwpIC8qITwgTGVmdCAob3IgbW9ubykgaXMgc2FtcGxlZCBvbiBmYWxsaW5nIGVkZ2Ugb2YgUERNX0NMSyAqLw0KKyNkZWZpbmUgUERNX01PREVfRURHRV9MZWZ0UmlzaW5nICgxVUwpIC8qITwgTGVmdCAob3IgbW9ubykgaXMgc2FtcGxlZCBvbiByaXNpbmcgZWRnZSBvZiBQRE1fQ0xLICovDQorDQorLyogQml0IDAgOiBNb25vIG9yIHN0ZXJlbyBvcGVyYXRpb24gKi8NCisjZGVmaW5lIFBETV9NT0RFX09QRVJBVElPTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUEVSQVRJT04gZmllbGQuICovDQorI2RlZmluZSBQRE1fTU9ERV9PUEVSQVRJT05fTXNrICgweDFVTCA8PCBQRE1fTU9ERV9PUEVSQVRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9QRVJBVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9NT0RFX09QRVJBVElPTl9TdGVyZW8gKDBVTCkgLyohPCBTYW1wbGUgYW5kIHN0b3JlIG9uZSBwYWlyIChMZWZ0ICsgUmlnaHQpIG9mIDE2Yml0IHNhbXBsZXMgcGVyIFJBTSB3b3JkIFI9WzMxOjE2XTsgTD1bMTU6MF0gKi8NCisjZGVmaW5lIFBETV9NT0RFX09QRVJBVElPTl9Nb25vICgxVUwpIC8qITwgU2FtcGxlIGFuZCBzdG9yZSB0d28gc3VjY2Vzc2l2ZSBMZWZ0IHNhbXBsZXMgKDE2IGJpdCBlYWNoKSBwZXIgUkFNIHdvcmQgTDE9WzMxOjE2XTsgTDA9WzE1OjBdICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9HQUlOTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBMZWZ0IG91dHB1dCBnYWluIGFkanVzdG1lbnQgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBMZWZ0IG91dHB1dCBnYWluIGFkanVzdG1lbnQsIGluIDAuNSBkQiBzdGVwcywgYXJvdW5kIHRoZSBkZWZhdWx0IG1vZHVsZSBnYWluIChzZWUgZWxlY3RyaWNhbCBwYXJhbWV0ZXJzKSAweDAwICAgIC0yMCBkQiBnYWluIGFkanVzdCAweDAxICAtMTkuNSBkQiBnYWluIGFkanVzdCAoLi4uKSAweDI3ICAgLTAuNSBkQiBnYWluIGFkanVzdCAweDI4ICAgICAgMCBkQiBnYWluIGFkanVzdCAweDI5ICAgKzAuNSBkQiBnYWluIGFkanVzdCAoLi4uKSAweDRGICArMTkuNSBkQiBnYWluIGFkanVzdCAweDUwICAgICsyMCBkQiBnYWluIGFkanVzdCAqLw0KKyNkZWZpbmUgUERNX0dBSU5MX0dBSU5MX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEdBSU5MIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0dBSU5MX0dBSU5MX01zayAoMHg3RlVMIDw8IFBETV9HQUlOTF9HQUlOTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgR0FJTkwgZmllbGQuICovDQorI2RlZmluZSBQRE1fR0FJTkxfR0FJTkxfTWluR2FpbiAoMHgwMFVMKSAvKiE8IC0yMGRCIGdhaW4gYWRqdXN0bWVudCAobWluaW11bSkgKi8NCisjZGVmaW5lIFBETV9HQUlOTF9HQUlOTF9EZWZhdWx0R2FpbiAoMHgyOFVMKSAvKiE8IDBkQiBnYWluIGFkanVzdG1lbnQgKCcyNTAwIFJNUycgcmVxdWlyZW1lbnQpICovDQorI2RlZmluZSBQRE1fR0FJTkxfR0FJTkxfTWF4R2FpbiAoMHg1MFVMKSAvKiE8ICsyMGRCIGdhaW4gYWRqdXN0bWVudCAobWF4aW11bSkgKi8NCisNCisvKiBSZWdpc3RlcjogUERNX0dBSU5SICovDQorLyogRGVzY3JpcHRpb246IFJpZ2h0IG91dHB1dCBnYWluIGFkanVzdG1lbnQgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBSaWdodCBvdXRwdXQgZ2FpbiBhZGp1c3RtZW50LCBpbiAwLjUgZEIgc3RlcHMsIGFyb3VuZCB0aGUgZGVmYXVsdCBtb2R1bGUgZ2FpbiAoc2VlIGVsZWN0cmljYWwgcGFyYW1ldGVycykgKi8NCisjZGVmaW5lIFBETV9HQUlOUl9HQUlOUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBHQUlOUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9HQUlOUl9HQUlOUl9Nc2sgKDB4RkZVTCA8PCBQRE1fR0FJTlJfR0FJTlJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEdBSU5SIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX0dBSU5SX0dBSU5SX01pbkdhaW4gKDB4MDBVTCkgLyohPCAtMjBkQiBnYWluIGFkanVzdG1lbnQgKG1pbmltdW0pICovDQorI2RlZmluZSBQRE1fR0FJTlJfR0FJTlJfRGVmYXVsdEdhaW4gKDB4MjhVTCkgLyohPCAwZEIgZ2FpbiBhZGp1c3RtZW50ICgnMjUwMCBSTVMnIHJlcXVpcmVtZW50KSAqLw0KKyNkZWZpbmUgUERNX0dBSU5SX0dBSU5SX01heEdhaW4gKDB4NTBVTCkgLyohPCArMjBkQiBnYWluIGFkanVzdG1lbnQgKG1heGltdW0pICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9SQVRJTyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWxlY3RzIHRoZSByYXRpbyBiZXR3ZWVuIFBETV9DTEsgYW5kIG91dHB1dCBzYW1wbGUgcmF0ZS4gQ2hhbmdlIFBETUNMS0NUUkwgYWNjb3JkaW5nbHkuICovDQorDQorLyogQml0IDAgOiBTZWxlY3RzIHRoZSByYXRpbyBiZXR3ZWVuIFBETV9DTEsgYW5kIG91dHB1dCBzYW1wbGUgcmF0ZSAqLw0KKyNkZWZpbmUgUERNX1JBVElPX1JBVElPX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJBVElPIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1JBVElPX1JBVElPX01zayAoMHgxVUwgPDwgUERNX1JBVElPX1JBVElPX1BvcykgLyohPCBCaXQgbWFzayBvZiBSQVRJTyBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9SQVRJT19SQVRJT19SYXRpbzY0ICgwVUwpIC8qITwgUmF0aW8gb2YgNjQgKi8NCisjZGVmaW5lIFBETV9SQVRJT19SQVRJT19SYXRpbzgwICgxVUwpIC8qITwgUmF0aW8gb2YgODAgKi8NCisNCisvKiBSZWdpc3RlcjogUERNX1BTRUxfQ0xLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBudW1iZXIgY29uZmlndXJhdGlvbiBmb3IgUERNIENMSyBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QU0VMX0NMS19DT05ORUNUX01zayAoMHgxVUwgPDwgUERNX1BTRUxfQ0xLX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFBETV9QU0VMX0NMS19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBQRE1fUFNFTF9DTEtfUE9SVF9Nc2sgKDB4M1VMIDw8IFBETV9QU0VMX0NMS19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFBETV9QU0VMX0NMS19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfQ0xLX1BJTl9Nc2sgKDB4MUZVTCA8PCBQRE1fUFNFTF9DTEtfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9QU0VMX0RJTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gbnVtYmVyIGNvbmZpZ3VyYXRpb24gZm9yIFBETSBESU4gc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBQRE1fUFNFTF9ESU5fQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFBETV9QU0VMX0RJTl9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBQRE1fUFNFTF9ESU5fUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1BTRUxfRElOX1BPUlRfTXNrICgweDNVTCA8PCBQRE1fUFNFTF9ESU5fUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBQRE1fUFNFTF9ESU5fUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBETV9QU0VMX0RJTl9QSU5fTXNrICgweDFGVUwgPDwgUERNX1BTRUxfRElOX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQRE1fU0FNUExFX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSQU0gYWRkcmVzcyBwb2ludGVyIHRvIHdyaXRlIHNhbXBsZXMgdG8gd2l0aCBFYXN5RE1BICovDQorDQorLyogQml0cyAzMS4uMCA6IEFkZHJlc3MgdG8gd3JpdGUgUERNIHNhbXBsZXMgdG8gb3ZlciBETUEgKi8NCisjZGVmaW5lIFBETV9TQU1QTEVfUFRSX1NBTVBMRVBUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQU1QTEVQVFIgZmllbGQuICovDQorI2RlZmluZSBQRE1fU0FNUExFX1BUUl9TQU1QTEVQVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgUERNX1NBTVBMRV9QVFJfU0FNUExFUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQU1QTEVQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFBETV9TQU1QTEVfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBzYW1wbGVzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW4gRWFzeURNQSBtb2RlICovDQorDQorLyogQml0cyAxNC4uMCA6IExlbmd0aCBvZiBETUEgUkFNIGFsbG9jYXRpb24gaW4gbnVtYmVyIG9mIHNhbXBsZXMgKi8NCisjZGVmaW5lIFBETV9TQU1QTEVfTUFYQ05UX0JVRkZTSVpFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJVRkZTSVpFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUERNX1NBTVBMRV9NQVhDTlRfQlVGRlNJWkVfTXNrICgweDdGRkZVTCA8PCBQRE1fU0FNUExFX01BWENOVF9CVUZGU0laRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQlVGRlNJWkUgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogUE9XRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogUG93ZXIgY29udHJvbCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVNCUFdSUkRZIGV2ZW50ICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JQV1JSRFlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgVVNCUFdSUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUFdSUkRZX01zayAoMHgxVUwgPDwgUE9XRVJfSU5URU5TRVRfVVNCUFdSUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBVU0JQV1JSRFkgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JQV1JSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUFdSUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JQV1JSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVNCUkVNT1ZFRCBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUkVNT1ZFRF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JSRU1PVkVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCUkVNT1ZFRF9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOU0VUX1VTQlJFTU9WRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQlJFTU9WRUQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JSRU1PVkVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQlJFTU9WRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQlJFTU9WRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVVNCREVURUNURUQgZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1VTQkRFVEVDVEVEX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQkRFVEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCREVURUNURURfTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTlNFVF9VU0JERVRFQ1RFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JERVRFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9VU0JERVRFQ1RFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfVVNCREVURUNURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0xFRVBFWElUIGV2ZW50ICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9TTEVFUEVYSVRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgU0xFRVBFWElUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFWElUX01zayAoMHgxVUwgPDwgUE9XRVJfSU5URU5TRVRfU0xFRVBFWElUX1BvcykgLyohPCBCaXQgbWFzayBvZiBTTEVFUEVYSVQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9TTEVFUEVYSVRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFWElUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9TTEVFUEVYSVRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0xFRVBFTlRFUiBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFTlRFUl9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTTEVFUEVOVEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfU0xFRVBFTlRFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOU0VUX1NMRUVQRU5URVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNMRUVQRU5URVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9TTEVFUEVOVEVSX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1NMRUVQRU5URVJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1NMRUVQRU5URVJfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUE9GV0FSTiBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfUE9GV0FSTl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQT0ZXQVJOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5TRVRfUE9GV0FSTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOU0VUX1BPRldBUk5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPRldBUk4gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTlNFVF9QT0ZXQVJOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1BPRldBUk5fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOU0VUX1BPRldBUk5fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQlBXUlJEWSBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUFdSUkRZX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQlBXUlJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlBXUlJEWV9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOQ0xSX1VTQlBXUlJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCUFdSUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUFdSUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlBXUlJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUFdSUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBVU0JSRU1PVkVEIGV2ZW50ICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JSRU1PVkVEX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQlJFTU9WRUQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JSRU1PVkVEX01zayAoMHgxVUwgPDwgUE9XRVJfSU5URU5DTFJfVVNCUkVNT1ZFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCUkVNT1ZFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQlJFTU9WRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUkVNT1ZFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCUkVNT1ZFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVVNCREVURUNURUQgZXZlbnQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1VTQkRFVEVDVEVEX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQkRFVEVDVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCREVURUNURURfTXNrICgweDFVTCA8PCBQT1dFUl9JTlRFTkNMUl9VU0JERVRFQ1RFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCREVURUNURUQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JERVRFQ1RFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9VU0JERVRFQ1RFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfVVNCREVURUNURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNMRUVQRVhJVCBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFWElUX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFNMRUVQRVhJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRVhJVF9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOQ0xSX1NMRUVQRVhJVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0xFRVBFWElUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFWElUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRVhJVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFWElUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTTEVFUEVOVEVSIGV2ZW50ICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9TTEVFUEVOVEVSX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNMRUVQRU5URVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9TTEVFUEVOVEVSX01zayAoMHgxVUwgPDwgUE9XRVJfSU5URU5DTFJfU0xFRVBFTlRFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0xFRVBFTlRFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1NMRUVQRU5URVJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFTlRFUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfU0xFRVBFTlRFUl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUE9GV0FSTiBldmVudCAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfUE9GV0FSTl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBQT0ZXQVJOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfSU5URU5DTFJfUE9GV0FSTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX0lOVEVOQ0xSX1BPRldBUk5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPRldBUk4gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9JTlRFTkNMUl9QT0ZXQVJOX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1BPRldBUk5fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBPV0VSX0lOVEVOQ0xSX1BPRldBUk5fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1JFU0VUUkVBUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZXNldCByZWFzb24gKi8NCisNCisvKiBCaXQgMjAgOiBSZXNldCBkdWUgdG8gd2FrZSB1cCBmcm9tIFN5c3RlbSBPRkYgbW9kZSBieSBWYnVzIHJpc2luZyBpbnRvIHZhbGlkIHJhbmdlICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfVkJVU19Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVkJVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19WQlVTX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX1ZCVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZCVVMgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfVkJVU19Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1ZCVVNfRGV0ZWN0ZWQgKDFVTCkgLyohPCBEZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAxOSA6IFJlc2V0IGR1ZSB0byB3YWtlIHVwIGZyb20gU3lzdGVtIE9GRiBtb2RlIGJ5IE5GQyBmaWVsZCBkZXRlY3QgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ORkNfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIE5GQyBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19ORkNfTXNrICgweDFVTCA8PCBQT1dFUl9SRVNFVFJFQVNfTkZDX1BvcykgLyohPCBCaXQgbWFzayBvZiBORkMgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTkZDX05vdERldGVjdGVkICgwVUwpIC8qITwgTm90IGRldGVjdGVkICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTkZDX0RldGVjdGVkICgxVUwpIC8qITwgRGV0ZWN0ZWQgKi8NCisNCisvKiBCaXQgMTggOiBSZXNldCBkdWUgdG8gd2FrZSB1cCBmcm9tIFN5c3RlbSBPRkYgbW9kZSB3aGVuIHdha2V1cCBpcyB0cmlnZ2VyZWQgZnJvbSBlbnRlcmluZyBpbnRvIGRlYnVnIGludGVyZmFjZSBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfRElGX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBESUYgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfRElGX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX0RJRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRElGIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RJRl9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RJRl9EZXRlY3RlZCAoMVVMKSAvKiE8IERldGVjdGVkICovDQorDQorLyogQml0IDE3IDogUmVzZXQgZHVlIHRvIHdha2UgdXAgZnJvbSBTeXN0ZW0gT0ZGIG1vZGUgd2hlbiB3YWtldXAgaXMgdHJpZ2dlcmVkIGZyb20gQU5BREVURUNUIHNpZ25hbCBmcm9tIExQQ09NUCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0xQQ09NUF9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgTFBDT01QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0xQQ09NUF9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JFU0VUUkVBU19MUENPTVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExQQ09NUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19MUENPTVBfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBOb3QgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19MUENPTVBfRGV0ZWN0ZWQgKDFVTCkgLyohPCBEZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAxNiA6IFJlc2V0IGR1ZSB0byB3YWtlIHVwIGZyb20gU3lzdGVtIE9GRiBtb2RlIHdoZW4gd2FrZXVwIGlzIHRyaWdnZXJlZCBmcm9tIERFVEVDVCBzaWduYWwgZnJvbSBHUElPICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfT0ZGX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBPRkYgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfT0ZGX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX09GRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT0ZGIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX09GRl9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX09GRl9EZXRlY3RlZCAoMVVMKSAvKiE8IERldGVjdGVkICovDQorDQorLyogQml0IDMgOiBSZXNldCBmcm9tIENQVSBsb2NrLXVwIGRldGVjdGVkICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTE9DS1VQX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIExPQ0tVUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19MT0NLVVBfTXNrICgweDFVTCA8PCBQT1dFUl9SRVNFVFJFQVNfTE9DS1VQX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT0NLVVAgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTE9DS1VQX05vdERldGVjdGVkICgwVUwpIC8qITwgTm90IGRldGVjdGVkICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfTE9DS1VQX0RldGVjdGVkICgxVUwpIC8qITwgRGV0ZWN0ZWQgKi8NCisNCisvKiBCaXQgMiA6IFJlc2V0IGZyb20gc29mdCByZXNldCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1NSRVFfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU1JFUSBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19TUkVRX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX1NSRVFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSRVEgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfU1JFUV9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1NSRVFfRGV0ZWN0ZWQgKDFVTCkgLyohPCBEZXRlY3RlZCAqLw0KKw0KKy8qIEJpdCAxIDogUmVzZXQgZnJvbSB3YXRjaGRvZyBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RPR19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBET0cgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SRVNFVFJFQVNfRE9HX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX0RPR19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE9HIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RPR19Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX0RPR19EZXRlY3RlZCAoMVVMKSAvKiE8IERldGVjdGVkICovDQorDQorLyogQml0IDAgOiBSZXNldCBmcm9tIHBpbi1yZXNldCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1JFU0VUUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU0VUUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1JFU0VUUElOX01zayAoMHgxVUwgPDwgUE9XRVJfUkVTRVRSRUFTX1JFU0VUUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNFVFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JFU0VUUkVBU19SRVNFVFBJTl9Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IE5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgUE9XRVJfUkVTRVRSRUFTX1JFU0VUUElOX0RldGVjdGVkICgxVUwpIC8qITwgRGV0ZWN0ZWQgKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfUkFNU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IERlcHJlY2F0ZWQgcmVnaXN0ZXIgLSAgUkFNIHN0YXR1cyByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzIDogUkFNIGJsb2NrIDMgaXMgb24gb3Igb2ZmL3Bvd2VyaW5nIHVwICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0szX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJBTUJMT0NLMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzNfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0szX1BvcykgLyohPCBCaXQgbWFzayBvZiBSQU1CTE9DSzMgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0szX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLM19PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIgOiBSQU0gYmxvY2sgMiBpcyBvbiBvciBvZmYvcG93ZXJpbmcgdXAgKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkFNQkxPQ0syIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJBTUJMT0NLMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0syX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMSA6IFJBTSBibG9jayAxIGlzIG9uIG9yIG9mZi9wb3dlcmluZyB1cCAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSQU1CTE9DSzEgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0sxX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFNQkxPQ0sxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMV9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzFfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAwIDogUkFNIGJsb2NrIDAgaXMgb24gb3Igb2ZmL3Bvd2VyaW5nIHVwICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0swX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJBTUJMT0NLMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTVNUQVRVU19SQU1CTE9DSzBfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0swX1BvcykgLyohPCBCaXQgbWFzayBvZiBSQU1CTE9DSzAgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1TVEFUVVNfUkFNQkxPQ0swX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNU1RBVFVTX1JBTUJMT0NLMF9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1VTQlJFR1NUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBVU0Igc3VwcGx5IHN0YXR1cyAqLw0KKw0KKy8qIEJpdCAxIDogVVNCIHN1cHBseSBvdXRwdXQgc2V0dGxpbmcgdGltZSBlbGFwc2VkICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfT1VUUFVUUkRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE9VVFBVVFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1VTQlJFR1NUQVRVU19PVVRQVVRSRFlfTXNrICgweDFVTCA8PCBQT1dFUl9VU0JSRUdTVEFUVVNfT1VUUFVUUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVVRQVVRSRFkgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfT1VUUFVUUkRZX05vdFJlYWR5ICgwVUwpIC8qITwgVVNCUkVHIG91dHB1dCBzZXR0bGluZyB0aW1lIG5vdCBlbGFwc2VkICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfT1VUUFVUUkRZX1JlYWR5ICgxVUwpIC8qITwgVVNCUkVHIG91dHB1dCBzZXR0bGluZyB0aW1lIGVsYXBzZWQgKHNhbWUgaW5mb3JtYXRpb24gYXMgVVNCUFdSUkRZIGV2ZW50KSAqLw0KKw0KKy8qIEJpdCAwIDogVkJVUyBpbnB1dCBkZXRlY3Rpb24gc3RhdHVzIChVU0JERVRFQ1RFRCBhbmQgVVNCUkVNT1ZFRCBldmVudHMgYXJlIGRlcml2ZWQgZnJvbSB0aGlzIGluZm9ybWF0aW9uKSAqLw0KKyNkZWZpbmUgUE9XRVJfVVNCUkVHU1RBVFVTX1ZCVVNERVRFQ1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVkJVU0RFVEVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1VTQlJFR1NUQVRVU19WQlVTREVURUNUX01zayAoMHgxVUwgPDwgUE9XRVJfVVNCUkVHU1RBVFVTX1ZCVVNERVRFQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZCVVNERVRFQ1QgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfVkJVU0RFVEVDVF9Ob1ZidXMgKDBVTCkgLyohPCBWQlVTIHZvbHRhZ2UgYmVsb3cgdmFsaWQgdGhyZXNob2xkICovDQorI2RlZmluZSBQT1dFUl9VU0JSRUdTVEFUVVNfVkJVU0RFVEVDVF9WYnVzUHJlc2VudCAoMVVMKSAvKiE8IFZCVVMgdm9sdGFnZSBhYm92ZSB2YWxpZCB0aHJlc2hvbGQgKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfU1lTVEVNT0ZGICovDQorLyogRGVzY3JpcHRpb246IFN5c3RlbSBPRkYgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBTeXN0ZW0gT0ZGIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1NZU1RFTU9GRl9TWVNURU1PRkZfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1lTVEVNT0ZGIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfU1lTVEVNT0ZGX1NZU1RFTU9GRl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1NZU1RFTU9GRl9TWVNURU1PRkZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNZU1RFTU9GRiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1NZU1RFTU9GRl9TWVNURU1PRkZfRW50ZXIgKDFVTCkgLyohPCBFbmFibGUgU3lzdGVtIE9GRiBtb2RlICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1BPRkNPTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQb3dlciBmYWlsdXJlIGNvbXBhcmF0b3IgY29uZmlndXJhdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTEuLjggOiBQb3dlciBmYWlsdXJlIGNvbXBhcmF0b3IgdGhyZXNob2xkIHNldHRpbmcgZm9yIHZvbHRhZ2Ugc3VwcGx5IG9uIFZEREggKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRIUkVTSE9MRFZEREggZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9Nc2sgKDB4RlVMIDw8IFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSFJFU0hPTERWRERIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjI3ICgwVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjcgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjI4ICgxVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjggViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjI5ICgyVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjkgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjMwICgzVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjAgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjMxICg0VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjEgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjMyICg1VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjIgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjMzICg2VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjMgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjM0ICg3VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjQgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjM1ICg4VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjUgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjM2ICg5VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjYgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjM3ICgxMFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMy43IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1YzOCAoMTFVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDMuOCBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9WMzkgKDEyVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAzLjkgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRFZEREhfVjQwICgxM1VMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gNC4wIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERWRERIX1Y0MSAoMTRVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDQuMSBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEVkRESF9WNDIgKDE1VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byA0LjIgViAqLw0KKw0KKy8qIEJpdHMgNC4uMSA6IFBvd2VyIGZhaWx1cmUgY29tcGFyYXRvciB0aHJlc2hvbGQgc2V0dGluZyAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBUSFJFU0hPTEQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEX01zayAoMHhGVUwgPDwgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEhSRVNIT0xEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMTcgKDRVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDEuNyBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEX1YxOCAoNVVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMS44IFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjE5ICg2VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAxLjkgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjAgKDdVTCkgLyohPCBTZXQgdGhyZXNob2xkIHRvIDIuMCBWICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fVEhSRVNIT0xEX1YyMSAoOFVMKSAvKiE8IFNldCB0aHJlc2hvbGQgdG8gMi4xIFYgKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9USFJFU0hPTERfVjIyICg5VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjIgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjMgKDEwVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjMgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjQgKDExVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjQgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjUgKDEyVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjUgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjYgKDEzVUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjYgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjcgKDE0VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjcgViAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1RIUkVTSE9MRF9WMjggKDE1VUwpIC8qITwgU2V0IHRocmVzaG9sZCB0byAyLjggViAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgcG93ZXIgZmFpbHVyZSBjb21wYXJhdG9yICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fUE9GX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1BPRkNPTl9QT0ZfTXNrICgweDFVTCA8PCBQT1dFUl9QT0ZDT05fUE9GX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT0YgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9QT0ZDT05fUE9GX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUE9XRVJfUE9GQ09OX1BPRl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX0dQUkVHUkVUICovDQorLyogRGVzY3JpcHRpb246IEdlbmVyYWwgcHVycG9zZSByZXRlbnRpb24gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBHZW5lcmFsIHB1cnBvc2UgcmV0ZW50aW9uIHJlZ2lzdGVyICovDQorI2RlZmluZSBQT1dFUl9HUFJFR1JFVF9HUFJFR1JFVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBHUFJFR1JFVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX0dQUkVHUkVUX0dQUkVHUkVUX01zayAoMHhGRlVMIDw8IFBPV0VSX0dQUkVHUkVUX0dQUkVHUkVUX1BvcykgLyohPCBCaXQgbWFzayBvZiBHUFJFR1JFVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfR1BSRUdSRVQyICovDQorLyogRGVzY3JpcHRpb246IEdlbmVyYWwgcHVycG9zZSByZXRlbnRpb24gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBHZW5lcmFsIHB1cnBvc2UgcmV0ZW50aW9uIHJlZ2lzdGVyICovDQorI2RlZmluZSBQT1dFUl9HUFJFR1JFVDJfR1BSRUdSRVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgR1BSRUdSRVQgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9HUFJFR1JFVDJfR1BSRUdSRVRfTXNrICgweEZGVUwgPDwgUE9XRVJfR1BSRUdSRVQyX0dQUkVHUkVUX1BvcykgLyohPCBCaXQgbWFzayBvZiBHUFJFR1JFVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfRENEQ0VOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBEQy9EQyBjb252ZXJ0ZXIgZm9yIFJFRzEgc3RhZ2UuICovDQorDQorLyogQml0IDAgOiBFbmFibGUgREMvREMgY29udmVydGVyIGZvciBSRUcxIHN0YWdlLiAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOX0RDRENFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQ0RDRU4gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9EQ0RDRU5fRENEQ0VOX01zayAoMHgxVUwgPDwgUE9XRVJfRENEQ0VOX0RDRENFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRENEQ0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOX0RDRENFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBPV0VSX0RDRENFTl9EQ0RDRU5fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9EQ0RDRU4wICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBEQy9EQyBjb252ZXJ0ZXIgZm9yIFJFRzAgc3RhZ2UuICovDQorDQorLyogQml0IDAgOiBFbmFibGUgREMvREMgY29udmVydGVyIGZvciBSRUcwIHN0YWdlLiAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOMF9EQ0RDRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRENEQ0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOMF9EQ0RDRU5fTXNrICgweDFVTCA8PCBQT1dFUl9EQ0RDRU4wX0RDRENFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRENEQ0VOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfRENEQ0VOMF9EQ0RDRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQT1dFUl9EQ0RDRU4wX0RDRENFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX01BSU5SRUdTVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogTWFpbiBzdXBwbHkgc3RhdHVzICovDQorDQorLyogQml0IDAgOiBNYWluIHN1cHBseSBzdGF0dXMgKi8NCisjZGVmaW5lIFBPV0VSX01BSU5SRUdTVEFUVVNfTUFJTlJFR1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQUlOUkVHU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfTUFJTlJFR1NUQVRVU19NQUlOUkVHU1RBVFVTX01zayAoMHgxVUwgPDwgUE9XRVJfTUFJTlJFR1NUQVRVU19NQUlOUkVHU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQUlOUkVHU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfTUFJTlJFR1NUQVRVU19NQUlOUkVHU1RBVFVTX05vcm1hbCAoMFVMKSAvKiE8IE5vcm1hbCB2b2x0YWdlIG1vZGUuIFZvbHRhZ2Ugc3VwcGxpZWQgb24gVkRELiAqLw0KKyNkZWZpbmUgUE9XRVJfTUFJTlJFR1NUQVRVU19NQUlOUkVHU1RBVFVTX0hpZ2ggKDFVTCkgLyohPCBIaWdoIHZvbHRhZ2UgbW9kZS4gVm9sdGFnZSBzdXBwbGllZCBvbiBWRERILiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQT1dFUl9SQU1fUE9XRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIFJBTTAgcG93ZXIgY29udHJvbCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzMSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxNSB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNVJFVEVOVElPTl9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUzE1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTVSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTVSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE1UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMzAgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTQgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTRSRVRFTlRJT05fUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTRSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzE0UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE0UkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNFJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDI5IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEzIHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEzUkVURU5USU9OX1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEzUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxM1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxM1JFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTNSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyOCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMiB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMlJFVEVOVElPTl9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUzEyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMlJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTJSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTJSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEyUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjcgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTEgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTFSRVRFTlRJT05fUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTFSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzExUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzExUkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMVJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDI2IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEwIHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEwUkVURU5USU9OX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEwUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxMFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMFJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTBSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM5IHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzlSRVRFTlRJT05fUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM5UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M5UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1M5UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOVJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOVJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDI0IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzggd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOFJFVEVOVElPTl9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUzhSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzhSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzhSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM4UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M4UkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M4UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjMgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNyB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M3UkVURU5USU9OX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBTN1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TN1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TN1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzdSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzdSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzdSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyMiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM2IHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzZSRVRFTlRJT05fUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFM2UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M2UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1M2UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNlJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNlJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIxIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzUgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNVJFVEVOVElPTl9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUzVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzVSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzVSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M1UkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M1UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjAgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNCB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M0UkVURU5USU9OX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TNFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzRSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzRSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxOSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMzIHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzNSRVRFTlRJT05fUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MzUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MzUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TM1JFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TM1JFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE4IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzIgd2hlbiBSQU0gc2VjdGlvbiBpcyBpbiBPRkYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMlJFVEVOVElPTl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUzJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzJSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzJSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MyUkVURU5USU9OX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MyUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTcgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMSB3aGVuIFJBTSBzZWN0aW9uIGlzIGluIE9GRiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxUkVURU5USU9OX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBTMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzFSRVRFTlRJT05fT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzFSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxNiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMwIHdoZW4gUkFNIHNlY3Rpb24gaXMgaW4gT0ZGICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzBSRVRFTlRJT05fUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MwUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MwUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMFJFVEVOVElPTl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMFJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE1IDogS2VlcCBSQU0gc2VjdGlvbiBTMTUgT04gb3IgT0ZGIGluIFN5c3RlbSBPTiBtb2RlLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNVBPV0VSX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTVQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTVQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTVQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzE1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE1UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE1UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxNCA6IEtlZXAgUkFNIHNlY3Rpb24gUzE0IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTRQT1dFUl9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgUzE0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzE0UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzE0UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNFBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxNFBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTMgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMyBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEzUE9XRVJfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMxM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxM1BPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxM1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTNQT1dFUl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTNQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDEyIDogS2VlcCBSQU0gc2VjdGlvbiBTMTIgT04gb3IgT0ZGIGluIFN5c3RlbSBPTiBtb2RlLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMlBPV0VSX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTJQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTJQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMTJQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEyUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEyUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxMSA6IEtlZXAgUkFNIHNlY3Rpb24gUzExIE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTFQT1dFUl9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUzExUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzExUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJfUzExUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMVBPV0VSX09mZiAoMFVMKSAvKiE8IE9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMVBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTAgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMCBPTiBvciBPRkYgaW4gU3lzdGVtIE9OIG1vZGUuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzEwUE9XRVJfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxMFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSX1MxMFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTBQT1dFUl9PZmYgKDBVTCkgLyohPCBPZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMTBQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDkgOiBLZWVwIFJBTSBzZWN0aW9uIFM5IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOVBPV0VSX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM5UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzlQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TOVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M5UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzlQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDggOiBLZWVwIFJBTSBzZWN0aW9uIFM4IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TOFBPV0VSX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM4UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzhQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TOFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M4UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzhQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDcgOiBLZWVwIFJBTSBzZWN0aW9uIFM3IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TN1BPV0VSX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFM3UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzdQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TN1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTN1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M3UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzdQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDYgOiBLZWVwIFJBTSBzZWN0aW9uIFM2IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNlBPV0VSX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFM2UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzZQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TNlBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M2UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzZQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDUgOiBLZWVwIFJBTSBzZWN0aW9uIFM1IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNVBPV0VSX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzVQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TNVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M1UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzVQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDQgOiBLZWVwIFJBTSBzZWN0aW9uIFM0IE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TNFBPV0VSX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzRQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TNFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1M0UE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzRQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDMgOiBLZWVwIFJBTSBzZWN0aW9uIFMzIE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TM1BPV0VSX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzNQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TM1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MzUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzNQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIgOiBLZWVwIFJBTSBzZWN0aW9uIFMyIE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMlBPV0VSX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzJQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMlBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MyUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzJQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDEgOiBLZWVwIFJBTSBzZWN0aW9uIFMxIE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMVBPV0VSX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzFQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MxUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzFQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDAgOiBLZWVwIFJBTSBzZWN0aW9uIFMwIE9OIG9yIE9GRiBpbiBTeXN0ZW0gT04gbW9kZS4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUl9TMFBPV0VSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzBQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUl9TMFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSX1MwUE9XRVJfT2ZmICgwVUwpIC8qITwgT2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJfUzBQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogUmVnaXN0ZXI6IFBPV0VSX1JBTV9QT1dFUlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgUkFNMCBwb3dlciBjb250cm9sIHNldCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzMSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxNSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNVJFVEVOVElPTl9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgUzE1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTVSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTVSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAzMCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxNCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNFJFVEVOVElPTl9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgUzE0UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyOSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMyB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxM1JFVEVOVElPTl9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgUzEzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxM1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyOCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMiB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMlJFVEVOVElPTl9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgUzEyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMlJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTJSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTJSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNyA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMVJFVEVOVElPTl9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUzExUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMFJFVEVOVElPTl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUzEwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyNSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM5IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzlSRVRFTlRJT05fUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM5UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M5UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M5UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOVJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDI0IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzggd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOFJFVEVOVElPTl9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUzhSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzhSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzhSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM4UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M4UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjMgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNyB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M3UkVURU5USU9OX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBTN1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TN1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TN1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzdSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzdSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAyMiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM2IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzZSRVRFTlRJT05fUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFM2UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M2UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M2UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNlJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDIxIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzUgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNVJFVEVOVElPTl9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUzVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzVSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzVSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M1UkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMjAgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M0UkVURU5USU9OX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TNFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzRSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzRSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxOSA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMzIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzNSRVRFTlRJT05fUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MzUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MzUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TM1JFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE4IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzIgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMlJFVEVOVElPTl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUzJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzJSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzJSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MyUkVURU5USU9OX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTcgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxUkVURU5USU9OX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBTMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzFSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzFSRVRFTlRJT05fT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxNiA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMwIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzBSRVRFTlRJT05fUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MwUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MwUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMFJFVEVOVElPTl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDE1IDogS2VlcCBSQU0gc2VjdGlvbiBTMTUgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTVQT1dFUl9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUzE1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzE1UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzE1UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNVBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTQgOiBLZWVwIFJBTSBzZWN0aW9uIFMxNCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxNFBPV0VSX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTRQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzE0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzE0UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxMyA6IEtlZXAgUkFNIHNlY3Rpb24gUzEzIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEzUE9XRVJfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMxM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxM1BPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MxM1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTNQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDEyIDogS2VlcCBSQU0gc2VjdGlvbiBTMTIgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTJQT1dFUl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUzEyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEyUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzEyUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMlBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMTEgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMSBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMVBPV0VSX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMTFQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzExUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzExUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxMCA6IEtlZXAgUkFNIHNlY3Rpb24gUzEwIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzEwUE9XRVJfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MxMFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMTBQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDkgOiBLZWVwIFJBTSBzZWN0aW9uIFM5IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzlQT1dFUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBTOVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M5UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzlQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzlQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOVBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgOCA6IEtlZXAgUkFNIHNlY3Rpb24gUzggb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TOFBPV0VSX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM4UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzhQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TOFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTOFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M4UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA3IDogS2VlcCBSQU0gc2VjdGlvbiBTNyBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M3UE9XRVJfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUzdQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TN1BPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M3UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM3UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzdQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDYgOiBLZWVwIFJBTSBzZWN0aW9uIFM2IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzZQT1dFUl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTNlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M2UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzZQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzZQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNlBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgNSA6IEtlZXAgUkFNIHNlY3Rpb24gUzUgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNVBPV0VSX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFM1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzVQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TNVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M1UE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCA0IDogS2VlcCBSQU0gc2VjdGlvbiBTNCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1M0UE9XRVJfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUzRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TNFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1M0UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzRQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDMgOiBLZWVwIFJBTSBzZWN0aW9uIFMzIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzNQT1dFUl9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MzUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzNQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TM1BPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBCaXQgMiA6IEtlZXAgUkFNIHNlY3Rpb24gUzIgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMlBPV0VSX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFMyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzJQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUlNFVF9TMlBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MyUE9XRVJfT24gKDFVTCkgLyohPCBPbiAqLw0KKw0KKy8qIEJpdCAxIDogS2VlcCBSQU0gc2VjdGlvbiBTMSBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MxUE9XRVJfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUzFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSU0VUX1MxUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzFQT1dFUl9PbiAoMVVMKSAvKiE8IE9uICovDQorDQorLyogQml0IDAgOiBLZWVwIFJBTSBzZWN0aW9uIFMwIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJTRVRfUzBQT1dFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSU0VUX1MwUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJTRVRfUzBQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUlNFVF9TMFBPV0VSX09uICgxVUwpIC8qITwgT24gKi8NCisNCisvKiBSZWdpc3RlcjogUE9XRVJfUkFNX1BPV0VSQ0xSICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBSQU0wIHBvd2VyIGNvbnRyb2wgY2xlYXIgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTUgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTVSRVRFTlRJT05fUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTVSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAzMCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxNCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNFJFVEVOVElPTl9Qb3MgKDMwVUwpIC8qITwgUG9zaXRpb24gb2YgUzE0UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDI5IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEzIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEzUkVURU5USU9OX1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEzUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxM1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEzUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxM1JFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMjggOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMTIgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTJSRVRFTlRJT05fUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTJSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyNyA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxMSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMVJFVEVOVElPTl9Qb3MgKDI3VUwpIC8qITwgUG9zaXRpb24gb2YgUzExUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDI2IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzEwIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEwUkVURU5USU9OX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEwUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEwUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMFJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMjUgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTOSB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M5UkVURU5USU9OX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBTOVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOVJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TOVJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzlSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzlSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDI0IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzggd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOFJFVEVOVElPTl9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgUzhSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzhSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzhSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM4UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M4UkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyMyA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM3IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzdSRVRFTlRJT05fUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFM3UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M3UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M3UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTN1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TN1JFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMjIgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTNiB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M2UkVURU5USU9OX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBTNlJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNlJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TNlJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzZSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzZSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDIxIDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzUgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNVJFVEVOVElPTl9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgUzVSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzVSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzVSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM1UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M1UkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyMCA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFM0IHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzRSRVRFTlRJT05fUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM0UkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M0UkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M0UkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNFJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTkgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMyB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MzUkVURU5USU9OX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBTM1JFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TM1JFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TM1JFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzNSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzNSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDE4IDogS2VlcCByZXRlbnRpb24gb24gUkFNIHNlY3Rpb24gUzIgd2hlbiBSQU0gc2VjdGlvbiBpcyBzd2l0Y2hlZCBvZmYgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMlJFVEVOVElPTl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgUzJSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzJSRVRFTlRJT05fTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzJSRVRFTlRJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMyUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MyUkVURU5USU9OX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAxNyA6IEtlZXAgcmV0ZW50aW9uIG9uIFJBTSBzZWN0aW9uIFMxIHdoZW4gUkFNIHNlY3Rpb24gaXMgc3dpdGNoZWQgb2ZmICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzFSRVRFTlRJT05fUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFMxUkVURU5USU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxUkVURU5USU9OX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxUkVURU5USU9OX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMVJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMVJFVEVOVElPTl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTYgOiBLZWVwIHJldGVudGlvbiBvbiBSQU0gc2VjdGlvbiBTMCB3aGVuIFJBTSBzZWN0aW9uIGlzIHN3aXRjaGVkIG9mZiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MwUkVURU5USU9OX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBTMFJFVEVOVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMFJFVEVOVElPTl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMFJFVEVOVElPTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBSRVRFTlRJT04gZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzBSRVRFTlRJT05fT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDE1IDogS2VlcCBSQU0gc2VjdGlvbiBTMTUgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTVQT1dFUl9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgUzE1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzE1UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxNVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNVBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAxNCA6IEtlZXAgUkFNIHNlY3Rpb24gUzE0IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzE0UE9XRVJfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxNFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTRQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTRQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTMgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMyBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxM1BPV0VSX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTNQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTNQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEzUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEzUE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDEyIDogS2VlcCBSQU0gc2VjdGlvbiBTMTIgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTJQT1dFUl9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgUzEyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzEyUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxMlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMlBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAxMSA6IEtlZXAgUkFNIHNlY3Rpb24gUzExIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzExUE9XRVJfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMTFQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTFQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMTAgOiBLZWVwIFJBTSBzZWN0aW9uIFMxMCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxMFBPV0VSX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMTBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMTBQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMTBQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzEwUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzEwUE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDkgOiBLZWVwIFJBTSBzZWN0aW9uIFM5IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzlQT1dFUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBTOVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M5UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzlQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzlQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOVBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCA4IDogS2VlcCBSQU0gc2VjdGlvbiBTOCBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M4UE9XRVJfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUzhQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TOFBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M4UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM4UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzhQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgNyA6IEtlZXAgUkFNIHNlY3Rpb24gUzcgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TN1BPV0VSX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFM3UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzdQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TN1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTN1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M3UE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDYgOiBLZWVwIFJBTSBzZWN0aW9uIFM2IG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzZQT1dFUl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTNlBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M2UE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzZQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzZQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNlBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCA1IDogS2VlcCBSQU0gc2VjdGlvbiBTNSBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M1UE9XRVJfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUzVQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNVBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1M1UE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFM1UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzVQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgNCA6IEtlZXAgUkFNIHNlY3Rpb24gUzQgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TNFBPV0VSX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFM0UE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzRQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TNFBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTNFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1M0UE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDMgOiBLZWVwIFJBTSBzZWN0aW9uIFMzIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzNQT1dFUl9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTM1BPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MzUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzNQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzNQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TM1BPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKy8qIEJpdCAyIDogS2VlcCBSQU0gc2VjdGlvbiBTMiBvZiBSQU0wIG9uIG9yIG9mZiBpbiBTeXN0ZW0gT04gbW9kZSAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MyUE9XRVJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUzJQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMlBPV0VSX01zayAoMHgxVUwgPDwgUE9XRVJfUkFNX1BPV0VSQ0xSX1MyUE9XRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMyUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzJQT1dFUl9PZmYgKDFVTCkgLyohPCBPZmYgKi8NCisNCisvKiBCaXQgMSA6IEtlZXAgUkFNIHNlY3Rpb24gUzEgb2YgUkFNMCBvbiBvciBvZmYgaW4gU3lzdGVtIE9OIG1vZGUgKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMVBPV0VSX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFMxUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzFQT1dFUl9Nc2sgKDB4MVVMIDw8IFBPV0VSX1JBTV9QT1dFUkNMUl9TMVBPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMVBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MxUE9XRVJfT2ZmICgxVUwpIC8qITwgT2ZmICovDQorDQorLyogQml0IDAgOiBLZWVwIFJBTSBzZWN0aW9uIFMwIG9mIFJBTTAgb24gb3Igb2ZmIGluIFN5c3RlbSBPTiBtb2RlICovDQorI2RlZmluZSBQT1dFUl9SQU1fUE9XRVJDTFJfUzBQT1dFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUE9XRVJfUkFNX1BPV0VSQ0xSX1MwUE9XRVJfTXNrICgweDFVTCA8PCBQT1dFUl9SQU1fUE9XRVJDTFJfUzBQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUzBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBPV0VSX1JBTV9QT1dFUkNMUl9TMFBPV0VSX09mZiAoMVVMKSAvKiE8IE9mZiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFBQSSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQcm9ncmFtbWFibGUgUGVyaXBoZXJhbCBJbnRlcmNvbm5lY3QgKi8NCisNCisvKiBSZWdpc3RlcjogUFBJX0NIRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogQ2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDMxICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMzFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMzEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAzMCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMzAgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMzAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDMwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gzMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMzBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMzBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI5IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyOSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjlfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjggOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDI4ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMjhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI4X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI4X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNyA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjcgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI3X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI2IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyNiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjZfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjUgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDI1ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyNV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjQgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDI0X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIzIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyMyAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjNfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyM19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjIgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDIyICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMSA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMjEgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDIxX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gyMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAyMCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMjBfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTkgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDE5ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMTlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE5X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE5X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxOCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMTggKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE4X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMThfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMThfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE3IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxNyAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTdfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxN19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxN19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTYgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDE2ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE2X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE2X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNSA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMTUgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDE1X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE0IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxNCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTRfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxNF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTMgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDEzICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEzX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEzX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMiA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMTIgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEyX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gxMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDExIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAxMSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMTFfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDExX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTAgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDEwICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDEwX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCA5ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g5X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0g5X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDlfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIOV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgOCA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgOCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g4X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDcgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDdfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIN19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g3X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCA2ICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g2X01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0g2X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNSA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgNSAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NINV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDQgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDRfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NINF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0g0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAzICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gzX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMiA6IEVuYWJsZSBvciBkaXNhYmxlIGNoYW5uZWwgMiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOX0NIMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBjaGFubmVsICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBjaGFubmVsIDEgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDFfTXNrICgweDFVTCA8PCBQUElfQ0hFTl9DSDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgY2hhbm5lbCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgY2hhbm5lbCAwICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5fQ0gwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5fQ0gwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTl9DSDBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIGNoYW5uZWwgKi8NCisjZGVmaW5lIFBQSV9DSEVOX0NIMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBSZWdpc3RlcjogUFBJX0NIRU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogQ2hhbm5lbCBlbmFibGUgc2V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDMxIDogQ2hhbm5lbCAzMSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMV9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzFfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMzFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMzAgOiBDaGFubmVsIDMwIGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMzAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDMwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDMwX1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyOSA6IENoYW5uZWwgMjkgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjlfUG9zICgyOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI5X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjlfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI4IDogQ2hhbm5lbCAyOCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyOF9Qb3MgKDI4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjhfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyOF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyOF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjcgOiBDaGFubmVsIDI3IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI3X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI3X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNiA6IENoYW5uZWwgMjYgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjZfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI2X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjZfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI1IDogQ2hhbm5lbCAyNSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjVfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjQgOiBDaGFubmVsIDI0IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDI0X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMyA6IENoYW5uZWwgMjMgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjNfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIzX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjNfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIyIDogQ2hhbm5lbCAyMiBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMl9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjJfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMl9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjEgOiBDaGFubmVsIDIxIGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIxX1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMCA6IENoYW5uZWwgMjAgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjBfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gyMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDIwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMjBfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE5IDogQ2hhbm5lbCAxOSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOV9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTlfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTggOiBDaGFubmVsIDE4IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE4X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxOF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE4X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNyA6IENoYW5uZWwgMTcgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTdfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE3X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE3X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTdfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE2IDogQ2hhbm5lbCAxNiBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTZfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNl9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTUgOiBDaGFubmVsIDE1IGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxNV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE1X1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNCA6IENoYW5uZWwgMTQgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE0X01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDE0X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTRfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEzIDogQ2hhbm5lbCAxMyBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxM19Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTNfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxM19TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTIgOiBDaGFubmVsIDEyIGVuYWJsZSBzZXQgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDEyX1NldCAoMVVMKSAvKiE8IFdyaXRlOiBFbmFibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMSA6IENoYW5uZWwgMTEgZW5hYmxlIHNldCByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTFfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDExX01zayAoMHgxVUwgPDwgUFBJX0NIRU5TRVRfQ0gxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTlNFVF9DSDExX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTFfU2V0ICgxVUwpIC8qITwgV3JpdGU6IEVuYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEwIDogQ2hhbm5lbCAxMCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTBfTXNrICgweDFVTCA8PCBQUElfQ0hFTlNFVF9DSDEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMTBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgOSA6IENoYW5uZWwgOSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g5X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgOCA6IENoYW5uZWwgOCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g4X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g4X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIOF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNyA6IENoYW5uZWwgNyBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g3X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENINyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g3X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g3X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIN19TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNiA6IENoYW5uZWwgNiBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NINl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g2X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINl9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNSA6IENoYW5uZWwgNSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NINV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNCA6IENoYW5uZWwgNCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g0X1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENINCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NINF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0g0X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NINF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMyA6IENoYW5uZWwgMyBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIM19TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMiA6IENoYW5uZWwgMiBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMl9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMSA6IENoYW5uZWwgMSBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMV9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMCA6IENoYW5uZWwgMCBlbmFibGUgc2V0IHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOU0VUX0NIMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5TRVRfQ0gwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOU0VUX0NIMF9TZXQgKDFVTCkgLyohPCBXcml0ZTogRW5hYmxlIGNoYW5uZWwgKi8NCisNCisvKiBSZWdpc3RlcjogUFBJX0NIRU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogQ2hhbm5lbCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMzEgOiBDaGFubmVsIDMxIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMzFfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMzEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMxX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gzMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMzFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMzFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDMwIDogQ2hhbm5lbCAzMCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMwX1BvcyAoMzBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMzAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDMwX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyOSA6IENoYW5uZWwgMjkgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjlfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDI5X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyOV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyOV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjggOiBDaGFubmVsIDI4IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjhfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI4X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyOF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI4X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjhfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI3IDogQ2hhbm5lbCAyNyBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI3X1BvcyAoMjdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI3X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI3X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyNiA6IENoYW5uZWwgMjYgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjZfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDI2X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjUgOiBDaGFubmVsIDI1IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjVfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI1X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI1X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjVfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDI0IDogQ2hhbm5lbCAyNCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI0X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDI0X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMyA6IENoYW5uZWwgMjMgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjNfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDIzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyM19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMjIgOiBDaGFubmVsIDIyIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjJfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIyX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIyX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjJfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDIxIDogQ2hhbm5lbCAyMSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIxX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDIxX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAyMCA6IENoYW5uZWwgMjAgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjBfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDIwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMjBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTkgOiBDaGFubmVsIDE5IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTlfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTkgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE5X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTlfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE4IDogQ2hhbm5lbCAxOCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE4X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE4X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxOF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE4X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNyA6IENoYW5uZWwgMTcgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTdfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDE3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxN19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTYgOiBDaGFubmVsIDE2IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTYgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE2X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTZfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDE1IDogQ2hhbm5lbCAxNSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE1X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE1X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDE1X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxNCA6IENoYW5uZWwgMTQgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTRfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDE0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxNF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTMgOiBDaGFubmVsIDEzIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTNfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTMgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEzX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTNfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDEyIDogQ2hhbm5lbCAxMiBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEyX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEyX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxMSA6IENoYW5uZWwgMTEgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTFfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDExX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDExIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gxMV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMTAgOiBDaGFubmVsIDEwIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTBfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEwX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gxMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDEwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMTBfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDkgOiBDaGFubmVsIDkgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g5X1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g5X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g5X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIOV9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgOCA6IENoYW5uZWwgOCBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g4X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0g4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g4X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA3IDogQ2hhbm5lbCA3IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDdfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDdfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDYgOiBDaGFubmVsIDYgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g2X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENINiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NINl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g2X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINl9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgNSA6IENoYW5uZWwgNSBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDVfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g1X01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0g1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0g1X0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCA0IDogQ2hhbm5lbCA0IGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDRfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NINF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDRfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDMgOiBDaGFubmVsIDMgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIM19DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBCaXQgMiA6IENoYW5uZWwgMiBlbmFibGUgY2xlYXIgcmVnaXN0ZXIuICBXcml0aW5nICcwJyBoYXMgbm8gZWZmZWN0ICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDJfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyX01zayAoMHgxVUwgPDwgUFBJX0NIRU5DTFJfQ0gyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBjaGFubmVsIGRpc2FibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gyX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGRpc2FibGUgY2hhbm5lbCAqLw0KKw0KKy8qIEJpdCAxIDogQ2hhbm5lbCAxIGVuYWJsZSBjbGVhciByZWdpc3Rlci4gIFdyaXRpbmcgJzAnIGhhcyBubyBlZmZlY3QgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDFfTXNrICgweDFVTCA8PCBQUElfQ0hFTkNMUl9DSDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IGNoYW5uZWwgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogY2hhbm5lbCBlbmFibGVkICovDQorI2RlZmluZSBQUElfQ0hFTkNMUl9DSDFfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogZGlzYWJsZSBjaGFubmVsICovDQorDQorLyogQml0IDAgOiBDaGFubmVsIDAgZW5hYmxlIGNsZWFyIHJlZ2lzdGVyLiAgV3JpdGluZyAnMCcgaGFzIG5vIGVmZmVjdCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEVOQ0xSX0NIMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogY2hhbm5lbCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFBJX0NIRU5DTFJfQ0gwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBjaGFubmVsIGVuYWJsZWQgKi8NCisjZGVmaW5lIFBQSV9DSEVOQ0xSX0NIMF9DbGVhciAoMVVMKSAvKiE8IFdyaXRlOiBkaXNhYmxlIGNoYW5uZWwgKi8NCisNCisvKiBSZWdpc3RlcjogUFBJX0NIX0VFUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgQ2hhbm5lbCAwIGV2ZW50IGVuZC1wb2ludCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQb2ludGVyIHRvIGV2ZW50IHJlZ2lzdGVyLiBBY2NlcHRzIG9ubHkgYWRkcmVzc2VzIHRvIHJlZ2lzdGVycyBmcm9tIHRoZSBFdmVudCBncm91cC4gKi8NCisjZGVmaW5lIFBQSV9DSF9FRVBfRUVQX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVFUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSF9FRVBfRUVQX01zayAoMHhGRkZGRkZGRlVMIDw8IFBQSV9DSF9FRVBfRUVQX1BvcykgLyohPCBCaXQgbWFzayBvZiBFRVAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFBQSV9DSF9URVAgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIENoYW5uZWwgMCB0YXNrIGVuZC1wb2ludCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBQb2ludGVyIHRvIHRhc2sgcmVnaXN0ZXIuIEFjY2VwdHMgb25seSBhZGRyZXNzZXMgdG8gcmVnaXN0ZXJzIGZyb20gdGhlIFRhc2sgZ3JvdXAuICovDQorI2RlZmluZSBQUElfQ0hfVEVQX1RFUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBURVAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hfVEVQX1RFUF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBQUElfQ0hfVEVQX1RFUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEVQIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQUElfQ0hHICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBDaGFubmVsIGdyb3VwIDAgKi8NCisNCisvKiBCaXQgMzEgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAzMSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMxX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMxX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDMxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDMxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMxX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDMxX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAzMCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDMwICovDQorI2RlZmluZSBQUElfQ0hHX0NIMzBfUG9zICgzMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMzAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMzBfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMzBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMzAgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMzBfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMzBfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI5IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjkgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOV9Qb3MgKDI5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyOSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyOV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMjggOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyOCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI4X1BvcyAoMjhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI4X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDI4X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI4IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI4X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI4X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNyA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDI3ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjdfUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjdfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjdfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjdfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDI2IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjYgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNl9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNl9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyNiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNl9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyNl9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMjUgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyNSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI1X1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI1X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDI1X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI1X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDI1X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyNCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDI0ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjRfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjRfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjRfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjRfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIzIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjMgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyM19Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyM19Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyM19FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyM19JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMjIgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAyMiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIyX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIyX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDIyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIyX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDIyX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAyMSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDIxICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjFfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMjEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjFfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMjEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjFfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMjFfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDIwIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMjAgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gyMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMF9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyMF9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTkgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxOSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE5X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE5X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDE5X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE5X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE5X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxOCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDE4ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMThfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMThfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMThfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTggZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMThfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMThfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE3IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTcgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxN19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNyBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxN19FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxN19JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTYgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxNiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE2X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE2X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDE2X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxNSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDE1ICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTVfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTVfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTUgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTVfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTVfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDE0IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTQgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxNCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNF9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxNF9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTMgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxMyAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEzX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEzX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEzX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEzX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAxMiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDEyICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTJfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMTIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTJfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMTIgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTJfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMTJfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDExIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMTEgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxMV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMTAgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxMCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEwX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEwX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEwX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDEwX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA5IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgOSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDlfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDlfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIOV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g5IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDlfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIOV9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgOCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDggKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g4X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g4X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIOCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g4X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDhfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDcgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCA3ICovDQorI2RlZmluZSBQUElfQ0hHX0NIN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIN19Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0g3X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDcgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIN19FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g3X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCA2IDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgNiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDZfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NINl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDZfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NINl9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgNSA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g1X01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINSBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g1X0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDVfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDQgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCA0ICovDQorI2RlZmluZSBQUElfQ0hHX0NINF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NINF9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0g0X1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDQgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NINF9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0g0X0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAzIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMyAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDNfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDNfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIM19JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBCaXQgMiA6IEluY2x1ZGUgb3IgZXhjbHVkZSBjaGFubmVsIDIgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyX01zayAoMHgxVUwgPDwgUFBJX0NIR19DSDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMiBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gyX0V4Y2x1ZGVkICgwVUwpIC8qITwgRXhjbHVkZSAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDJfSW5jbHVkZWQgKDFVTCkgLyohPCBJbmNsdWRlICovDQorDQorLyogQml0IDEgOiBJbmNsdWRlIG9yIGV4Y2x1ZGUgY2hhbm5lbCAxICovDQorI2RlZmluZSBQUElfQ0hHX0NIMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMV9Nc2sgKDB4MVVMIDw8IFBQSV9DSEdfQ0gxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDEgZmllbGQuICovDQorI2RlZmluZSBQUElfQ0hHX0NIMV9FeGNsdWRlZCAoMFVMKSAvKiE8IEV4Y2x1ZGUgKi8NCisjZGVmaW5lIFBQSV9DSEdfQ0gxX0luY2x1ZGVkICgxVUwpIC8qITwgSW5jbHVkZSAqLw0KKw0KKy8qIEJpdCAwIDogSW5jbHVkZSBvciBleGNsdWRlIGNoYW5uZWwgMCAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDBfTXNrICgweDFVTCA8PCBQUElfQ0hHX0NIMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFBJX0NIR19DSDBfRXhjbHVkZWQgKDBVTCkgLyohPCBFeGNsdWRlICovDQorI2RlZmluZSBQUElfQ0hHX0NIMF9JbmNsdWRlZCAoMVVMKSAvKiE8IEluY2x1ZGUgKi8NCisNCisvKiBSZWdpc3RlcjogUFBJX0ZPUktfVEVQICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBDaGFubmVsIDAgdGFzayBlbmQtcG9pbnQgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUG9pbnRlciB0byB0YXNrIHJlZ2lzdGVyICovDQorI2RlZmluZSBQUElfRk9SS19URVBfVEVQX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRFUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBQSV9GT1JLX1RFUF9URVBfTXNrICgweEZGRkZGRkZGVUwgPDwgUFBJX0ZPUktfVEVQX1RFUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEVQIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFBXTSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIFVuaXQgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIExPT1BTRE9ORSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TVE9QX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIExPT1BTRE9ORV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU1RPUF9Nc2sgKDB4MVVMIDw8IFBXTV9TSE9SVFNfTE9PUFNET05FX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExPT1BTRE9ORV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAzIDogU2hvcnRjdXQgYmV0d2VlbiBMT09QU0RPTkUgZXZlbnQgYW5kIFNFUVNUQVJUWzFdIHRhc2sgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBMT09QU0RPTkVfU0VRU1RBUlQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU0VRU1RBUlQxX01zayAoMHgxVUwgPDwgUFdNX1NIT1JUU19MT09QU0RPTkVfU0VRU1RBUlQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT09QU0RPTkVfU0VRU1RBUlQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU0VRU1RBUlQxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19MT09QU0RPTkVfU0VRU1RBUlQxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMiA6IFNob3J0Y3V0IGJldHdlZW4gTE9PUFNET05FIGV2ZW50IGFuZCBTRVFTVEFSVFswXSB0YXNrICovDQorI2RlZmluZSBQV01fU0hPUlRTX0xPT1BTRE9ORV9TRVFTVEFSVDBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgTE9PUFNET05FX1NFUVNUQVJUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMF9Nc2sgKDB4MVVMIDw8IFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9PUFNET05FX1NFUVNUQVJUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfTE9PUFNET05FX1NFUVNUQVJUMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEgOiBTaG9ydGN1dCBiZXR3ZWVuIFNFUUVORFsxXSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDFfU1RPUF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQxX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDFfU1RPUF9Nc2sgKDB4MVVMIDw8IFBXTV9TSE9SVFNfU0VRRU5EMV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQxX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBQV01fU0hPUlRTX1NFUUVORDFfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfU0VRRU5EMV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gU0VRRU5EWzBdIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfU0VRRU5EMF9TVE9QX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUUVORDBfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfU0VRRU5EMF9TVE9QX01zayAoMHgxVUwgPDwgUFdNX1NIT1JUU19TRVFFTkQwX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUUVORDBfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TSE9SVFNfU0VRRU5EMF9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUFdNX1NIT1JUU19TRVFFTkQwX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIExPT1BTRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX0xPT1BTRE9ORV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBMT09QU0RPTkUgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fTE9PUFNET05FX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOX0xPT1BTRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9PUFNET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX0xPT1BTRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9MT09QU0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBQV01QRVJJT0RFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9QV01QRVJJT0RFTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUFdNUEVSSU9ERU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1BXTVBFUklPREVORF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTl9QV01QRVJJT0RFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBXTVBFUklPREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9QV01QRVJJT0RFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQV01fSU5URU5fUFdNUEVSSU9ERU5EX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU0VRRU5EWzFdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRRU5EMV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFFTkQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUUVORDFfTXNrICgweDFVTCA8PCBQV01fSU5URU5fU0VRRU5EMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRRU5EMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFFTkQxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUUVORDFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTRVFFTkRbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFFTkQwX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUUVORDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRRU5EMF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTl9TRVFFTkQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUUVORDBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRRU5EMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNFUVNUQVJURURbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFTVEFSVEVEMV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBTRVFTVEFSVEVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TRVFTVEFSVEVEMV9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTl9TRVFTVEFSVEVEMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0VRU1RBUlRFRDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRU1RBUlRFRDFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRU1RBUlRFRDFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTRVFTVEFSVEVEWzBdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRU1RBUlRFRDBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU0VRU1RBUlRFRDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU0VRU1RBUlRFRDBfTXNrICgweDFVTCA8PCBQV01fSU5URU5fU0VRU1RBUlRFRDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUVNUQVJURUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUVNUQVJURUQwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NFUVNUQVJURUQwX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TVE9QUEVEX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5fU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFBXTV9JTlRFTl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBMT09QU0RPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9MT09QU0RPTkVfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgTE9PUFNET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX0xPT1BTRE9ORV9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTlNFVF9MT09QU0RPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExPT1BTRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9MT09QU0RPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX0xPT1BTRE9ORV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX0xPT1BTRE9ORV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBQV01QRVJJT0RFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9QV01QRVJJT0RFTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUFdNUEVSSU9ERU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1BXTVBFUklPREVORF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTlNFVF9QV01QRVJJT0RFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBXTVBFUklPREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9QV01QRVJJT0RFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1BXTVBFUklPREVORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1BXTVBFUklPREVORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTRVFFTkRbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQxX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUUVORDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRRU5EMV9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTlNFVF9TRVFFTkQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQxX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNFUUVORFswXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDBfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU0VRRU5EMCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFFTkQwX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOU0VUX1NFUUVORDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUUVORDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRRU5EMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRRU5EMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUUVORDBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU0VRU1RBUlRFRFsxXSBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQxX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUVNUQVJURUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQxX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFTVEFSVEVEMSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTRVFTVEFSVEVEWzBdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU0VRU1RBUlRFRDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDBfTXNrICgweDFVTCA8PCBQV01fSU5URU5TRVRfU0VRU1RBUlRFRDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUVNUQVJURUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TRVFTVEFSVEVEMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NFUVNUQVJURUQwX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5TRVRfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOU0VUX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgTE9PUFNET05FIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfTE9PUFNET05FX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIExPT1BTRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9MT09QU0RPTkVfTXNrICgweDFVTCA8PCBQV01fSU5URU5DTFJfTE9PUFNET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT09QU0RPTkUgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfTE9PUFNET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9MT09QU0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9MT09QU0RPTkVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFBXTVBFUklPREVORCBldmVudCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1BXTVBFUklPREVORF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBQV01QRVJJT0RFTkQgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfUFdNUEVSSU9ERU5EX01zayAoMHgxVUwgPDwgUFdNX0lOVEVOQ0xSX1BXTVBFUklPREVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFdNUEVSSU9ERU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1BXTVBFUklPREVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfUFdNUEVSSU9ERU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfUFdNUEVSSU9ERU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTRVFFTkRbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQxX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUUVORDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRRU5EMV9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTkNMUl9TRVFFTkQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUUVORDFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUUVORDFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTRVFFTkRbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQwX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFUUVORDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRRU5EMF9Nc2sgKDB4MVVMIDw8IFBXTV9JTlRFTkNMUl9TRVFFTkQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRVFFTkQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUUVORDBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUUVORDBfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFFTkQwX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTRVFTVEFSVEVEWzFdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgU0VRU1RBUlRFRDEgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDFfTXNrICgweDFVTCA8PCBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUVNUQVJURUQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFTVEFSVEVEMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTRVFTVEFSVEVEWzBdIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgU0VRU1RBUlRFRDAgZmllbGQuICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDBfTXNrICgweDFVTCA8PCBQV01fSU5URU5DTFJfU0VRU1RBUlRFRDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNFUVNUQVJURUQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TRVFTVEFSVEVEMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NFUVNUQVJURUQwX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBQV01fSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFBXTV9JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBQV01fSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQV00gbW9kdWxlIGVuYWJsZSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgUFdNIG1vZHVsZSAqLw0KKyNkZWZpbmUgUFdNX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0VOQUJMRV9FTkFCTEVfTXNrICgweDFVTCA8PCBQV01fRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUFdNX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTZWxlY3RzIG9wZXJhdGluZyBtb2RlIG9mIHRoZSB3YXZlIGNvdW50ZXIgKi8NCisNCisvKiBCaXQgMCA6IFNlbGVjdHMgdXAgb3IgdXAgYW5kIGRvd24gYXMgd2F2ZSBjb3VudGVyIG1vZGUgKi8NCisjZGVmaW5lIFBXTV9NT0RFX1VQRE9XTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBVUERPV04gZmllbGQuICovDQorI2RlZmluZSBQV01fTU9ERV9VUERPV05fTXNrICgweDFVTCA8PCBQV01fTU9ERV9VUERPV05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVQRE9XTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9NT0RFX1VQRE9XTl9VcCAoMFVMKSAvKiE8IFVwIGNvdW50ZXIgLSBlZGdlIGFsaWduZWQgUFdNIGR1dHktY3ljbGUgKi8NCisjZGVmaW5lIFBXTV9NT0RFX1VQRE9XTl9VcEFuZERvd24gKDFVTCkgLyohPCBVcCBhbmQgZG93biBjb3VudGVyIC0gY2VudGVyIGFsaWduZWQgUFdNIGR1dHkgY3ljbGUgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX0NPVU5URVJUT1AgKi8NCisvKiBEZXNjcmlwdGlvbjogVmFsdWUgdXAgdG8gd2hpY2ggdGhlIHB1bHNlIGdlbmVyYXRvciBjb3VudGVyIGNvdW50cyAqLw0KKw0KKy8qIEJpdHMgMTQuLjAgOiBWYWx1ZSB1cCB0byB3aGljaCB0aGUgcHVsc2UgZ2VuZXJhdG9yIGNvdW50ZXIgY291bnRzLiBUaGlzIHJlZ2lzdGVyIGlzIGlnbm9yZWQgd2hlbiBERUNPREVSLk1PREU9V2F2ZUZvcm0gYW5kIG9ubHkgdmFsdWVzIGZyb20gUkFNIHdpbGwgYmUgdXNlZC4gKi8NCisjZGVmaW5lIFBXTV9DT1VOVEVSVE9QX0NPVU5URVJUT1BfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09VTlRFUlRPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9DT1VOVEVSVE9QX0NPVU5URVJUT1BfTXNrICgweDdGRkZVTCA8PCBQV01fQ09VTlRFUlRPUF9DT1VOVEVSVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT1VOVEVSVE9QIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fUFJFU0NBTEVSICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gZm9yIFBXTV9DTEsgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBQcmUtc2NhbGVyIG9mIFBXTV9DTEsgKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRVNDQUxFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX01zayAoMHg3VUwgPDwgUFdNX1BSRVNDQUxFUl9QUkVTQ0FMRVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBSRVNDQUxFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX0RJVl8xICgwVUwpIC8qITwgRGl2aWRlIGJ5ICAgMSAoMTZNSHopICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9ESVZfMiAoMVVMKSAvKiE8IERpdmlkZSBieSAgIDIgKCA4TUh6KSAqLw0KKyNkZWZpbmUgUFdNX1BSRVNDQUxFUl9QUkVTQ0FMRVJfRElWXzQgKDJVTCkgLyohPCBEaXZpZGUgYnkgICA0ICggNE1IeikgKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX0RJVl84ICgzVUwpIC8qITwgRGl2aWRlIGJ5ICAgOCAoIDJNSHopICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9ESVZfMTYgKDRVTCkgLyohPCBEaXZpZGUgYnkgIDE2ICggMU1IeikgKi8NCisjZGVmaW5lIFBXTV9QUkVTQ0FMRVJfUFJFU0NBTEVSX0RJVl8zMiAoNVVMKSAvKiE8IERpdmlkZSBieSAgMzIgKCA1MDBrSHopICovDQorI2RlZmluZSBQV01fUFJFU0NBTEVSX1BSRVNDQUxFUl9ESVZfNjQgKDZVTCkgLyohPCBEaXZpZGUgYnkgIDY0ICggMjUwa0h6KSAqLw0KKyNkZWZpbmUgUFdNX1BSRVNDQUxFUl9QUkVTQ0FMRVJfRElWXzEyOCAoN1VMKSAvKiE8IERpdmlkZSBieSAxMjggKCAxMjVrSHopICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9ERUNPREVSICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gb2YgdGhlIGRlY29kZXIgKi8NCisNCisvKiBCaXQgOCA6IFNlbGVjdHMgc291cmNlIGZvciBhZHZhbmNpbmcgdGhlIGFjdGl2ZSBzZXF1ZW5jZSAqLw0KKyNkZWZpbmUgUFdNX0RFQ09ERVJfTU9ERV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0RFQ09ERVJfTU9ERV9Nc2sgKDB4MVVMIDw8IFBXTV9ERUNPREVSX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBQV01fREVDT0RFUl9NT0RFX1JlZnJlc2hDb3VudCAoMFVMKSAvKiE8IFNFUVtuXS5SRUZSRVNIIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGxvYWRpbmcgaW50ZXJuYWwgY29tcGFyZSByZWdpc3RlcnMgKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX01PREVfTmV4dFN0ZXAgKDFVTCkgLyohPCBORVhUU1RFUCB0YXNrIGNhdXNlcyBhIG5ldyB2YWx1ZSB0byBiZSBsb2FkZWQgdG8gaW50ZXJuYWwgY29tcGFyZSByZWdpc3RlcnMgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBIb3cgYSBzZXF1ZW5jZSBpcyByZWFkIGZyb20gUkFNIGFuZCBzcHJlYWQgdG8gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX0xPQURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTE9BRCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX0xPQURfTXNrICgweDdVTCA8PCBQV01fREVDT0RFUl9MT0FEX1BvcykgLyohPCBCaXQgbWFzayBvZiBMT0FEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0RFQ09ERVJfTE9BRF9Db21tb24gKDBVTCkgLyohPCAxc3QgaGFsZiB3b3JkICgxNi1iaXQpIHVzZWQgaW4gYWxsIFBXTSBjaGFubmVscyAwLi4zICovDQorI2RlZmluZSBQV01fREVDT0RFUl9MT0FEX0dyb3VwZWQgKDFVTCkgLyohPCAxc3QgaGFsZiB3b3JkICgxNi1iaXQpIHVzZWQgaW4gY2hhbm5lbCAwLi4xOyAybmQgd29yZCBpbiBjaGFubmVsIDIuLjMgKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX0xPQURfSW5kaXZpZHVhbCAoMlVMKSAvKiE8IDFzdCBoYWxmIHdvcmQgKDE2LWJpdCkgaW4gY2guMDsgMm5kIGluIGNoLjE7IC4uLjsgNHRoIGluIGNoLjMgKi8NCisjZGVmaW5lIFBXTV9ERUNPREVSX0xPQURfV2F2ZUZvcm0gKDNVTCkgLyohPCAxc3QgaGFsZiB3b3JkICgxNi1iaXQpIGluIGNoLjA7IDJuZCBpbiBjaC4xOyAuLi47IDR0aCBpbiBDT1VOVEVSVE9QICovDQorDQorLyogUmVnaXN0ZXI6IFBXTV9MT09QICovDQorLyogRGVzY3JpcHRpb246IEFtb3VudCBvZiBwbGF5YmFjayBvZiBhIGxvb3AgKi8NCisNCisvKiBCaXRzIDE1Li4wIDogQW1vdW50IG9mIHBsYXliYWNrIG9mIHBhdHRlcm4gY3ljbGVzICovDQorI2RlZmluZSBQV01fTE9PUF9DTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX0xPT1BfQ05UX01zayAoMHhGRkZGVUwgPDwgUFdNX0xPT1BfQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBDTlQgZmllbGQuICovDQorI2RlZmluZSBQV01fTE9PUF9DTlRfRGlzYWJsZWQgKDBVTCkgLyohPCBMb29waW5nIGRpc2FibGVkIChzdG9wIGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fU0VRX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgQmVnaW5uaW5nIGFkZHJlc3MgaW4gRGF0YSBSQU0gb2Ygc2VxdWVuY2UgQSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBCZWdpbm5pbmcgYWRkcmVzcyBpbiBEYXRhIFJBTSBvZiBzZXF1ZW5jZSBBICovDQorI2RlZmluZSBQV01fU0VRX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NFUV9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFBXTV9TRVFfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fU0VRX0NOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgQW1vdW50IG9mIHZhbHVlcyAoZHV0eSBjeWNsZXMpIGluIHNlcXVlbmNlIEEgKi8NCisNCisvKiBCaXRzIDE0Li4wIDogQW1vdW50IG9mIHZhbHVlcyAoZHV0eSBjeWNsZXMpIGluIHNlcXVlbmNlIEEgKi8NCisjZGVmaW5lIFBXTV9TRVFfQ05UX0NOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDTlQgZmllbGQuICovDQorI2RlZmluZSBQV01fU0VRX0NOVF9DTlRfTXNrICgweDdGRkZVTCA8PCBQV01fU0VRX0NOVF9DTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TRVFfQ05UX0NOVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFNlcXVlbmNlIGlzIGRpc2FibGVkLCBhbmQgc2hhbGwgbm90IGJlIHN0YXJ0ZWQgYXMgaXQgaXMgZW1wdHkgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1NFUV9SRUZSRVNIICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBBbW91bnQgb2YgYWRkaXRpb25hbCBQV00gcGVyaW9kcyBiZXR3ZWVuIHNhbXBsZXMgbG9hZGVkIHRvIGNvbXBhcmUgcmVnaXN0ZXIgKGxvYWQgZXZlcnkgQ05UKzEgUFdNIHBlcmlvZHMpICovDQorDQorLyogQml0cyAyMy4uMCA6IEFtb3VudCBvZiBhZGRpdGlvbmFsIFBXTSBwZXJpb2RzIGJldHdlZW4gc2FtcGxlcyBsb2FkZWQgdG8gY29tcGFyZSByZWdpc3RlciAobG9hZCBldmVyeSBDTlQrMSBQV00gcGVyaW9kcykgKi8NCisjZGVmaW5lIFBXTV9TRVFfUkVGUkVTSF9DTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NFUV9SRUZSRVNIX0NOVF9Nc2sgKDB4RkZGRkZGVUwgPDwgUFdNX1NFUV9SRUZSRVNIX0NOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1NFUV9SRUZSRVNIX0NOVF9Db250aW51b3VzICgwVUwpIC8qITwgVXBkYXRlIGV2ZXJ5IFBXTSBwZXJpb2QgKi8NCisNCisvKiBSZWdpc3RlcjogUFdNX1NFUV9FTkRERUxBWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgVGltZSBhZGRlZCBhZnRlciB0aGUgc2VxdWVuY2UgKi8NCisNCisvKiBCaXRzIDIzLi4wIDogVGltZSBhZGRlZCBhZnRlciB0aGUgc2VxdWVuY2UgaW4gUFdNIHBlcmlvZHMgKi8NCisjZGVmaW5lIFBXTV9TRVFfRU5EREVMQVlfQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9TRVFfRU5EREVMQVlfQ05UX01zayAoMHhGRkZGRkZVTCA8PCBQV01fU0VRX0VORERFTEFZX0NOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBQV01fUFNFTF9PVVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIE91dHB1dCBwaW4gc2VsZWN0IGZvciBQV00gY2hhbm5lbCAwICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBQV01fUFNFTF9PVVRfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFBXTV9QU0VMX09VVF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBQV01fUFNFTF9PVVRfUE9SVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUFdNX1BTRUxfT1VUX1BPUlRfTXNrICgweDNVTCA8PCBQV01fUFNFTF9PVVRfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBQV01fUFNFTF9PVVRfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFBXTV9QU0VMX09VVF9QSU5fTXNrICgweDFGVUwgPDwgUFdNX1BTRUxfT1VUX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFFERUMgKi8NCisvKiBEZXNjcmlwdGlvbjogUXVhZHJhdHVyZSBEZWNvZGVyICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDYgOiBTaG9ydGN1dCBiZXR3ZWVuIFNBTVBMRVJEWSBldmVudCBhbmQgUkVBRENMUkFDQyB0YXNrICovDQorI2RlZmluZSBRREVDX1NIT1JUU19TQU1QTEVSRFlfUkVBRENMUkFDQ19Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBTQU1QTEVSRFlfUkVBRENMUkFDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1NBTVBMRVJEWV9SRUFEQ0xSQUNDX01zayAoMHgxVUwgPDwgUURFQ19TSE9SVFNfU0FNUExFUkRZX1JFQURDTFJBQ0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNBTVBMRVJEWV9SRUFEQ0xSQUNDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfU0FNUExFUkRZX1JFQURDTFJBQ0NfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBRREVDX1NIT1JUU19TQU1QTEVSRFlfUkVBRENMUkFDQ19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDUgOiBTaG9ydGN1dCBiZXR3ZWVuIERCTFJEWSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBRREVDX1NIT1JUU19EQkxSRFlfU1RPUF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBEQkxSRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX0RCTFJEWV9TVE9QX01zayAoMHgxVUwgPDwgUURFQ19TSE9SVFNfREJMUkRZX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERCTFJEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfREJMUkRZX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBRREVDX1NIT1JUU19EQkxSRFlfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIERCTFJEWSBldmVudCBhbmQgUkRDTFJEQkwgdGFzayAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfREJMUkRZX1JEQ0xSREJMX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIERCTFJEWV9SRENMUkRCTCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX0RCTFJEWV9SRENMUkRCTF9Nc2sgKDB4MVVMIDw8IFFERUNfU0hPUlRTX0RCTFJEWV9SRENMUkRCTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREJMUkRZX1JEQ0xSREJMIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfREJMUkRZX1JEQ0xSREJMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfREJMUkRZX1JEQ0xSREJMX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMyA6IFNob3J0Y3V0IGJldHdlZW4gUkVQT1JUUkRZIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9TVE9QX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJFUE9SVFJEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1NUT1BfTXNrICgweDFVTCA8PCBRREVDX1NIT1JUU19SRVBPUlRSRFlfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVQT1JUUkRZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMiA6IFNob3J0Y3V0IGJldHdlZW4gUkVQT1JUUkRZIGV2ZW50IGFuZCBSRENMUkFDQyB0YXNrICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfUkRDTFJBQ0NfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUkVQT1JUUkRZX1JEQ0xSQUNDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JEQ0xSQUNDX01zayAoMHgxVUwgPDwgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JEQ0xSQUNDX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVBPUlRSRFlfUkRDTFJBQ0MgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfUkRDTFJBQ0NfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfUkRDTFJBQ0NfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxIDogU2hvcnRjdXQgYmV0d2VlbiBTQU1QTEVSRFkgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfU0FNUExFUkRZX1NUT1BfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU0FNUExFUkRZX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19TQU1QTEVSRFlfU1RPUF9Nc2sgKDB4MVVMIDw8IFFERUNfU0hPUlRTX1NBTVBMRVJEWV9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQU1QTEVSRFlfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1NBTVBMRVJEWV9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfU0FNUExFUkRZX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBSRVBPUlRSRFkgZXZlbnQgYW5kIFJFQURDTFJBQ0MgdGFzayAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JFQURDTFJBQ0NfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVQT1JUUkRZX1JFQURDTFJBQ0MgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NIT1JUU19SRVBPUlRSRFlfUkVBRENMUkFDQ19Nc2sgKDB4MVVMIDw8IFFERUNfU0hPUlRTX1JFUE9SVFJEWV9SRUFEQ0xSQUNDX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVBPUlRSRFlfUkVBRENMUkFDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0hPUlRTX1JFUE9SVFJEWV9SRUFEQ0xSQUNDX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUURFQ19TSE9SVFNfUkVQT1JUUkRZX1JFQURDTFJBQ0NfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NUT1BQRURfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5TRVRfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU1RPUFBFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBEQkxSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfREJMUkRZX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIERCTFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfREJMUkRZX01zayAoMHgxVUwgPDwgUURFQ19JTlRFTlNFVF9EQkxSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERCTFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfREJMUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfREJMUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX0RCTFJEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBBQ0NPRiBldmVudCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9BQ0NPRl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ0NPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfQUNDT0ZfTXNrICgweDFVTCA8PCBRREVDX0lOVEVOU0VUX0FDQ09GX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfQUNDT0ZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9BQ0NPRl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTlNFVF9BQ0NPRl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRVBPUlRSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfUkVQT1JUUkRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFUE9SVFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfUkVQT1JUUkRZX01zayAoMHgxVUwgPDwgUURFQ19JTlRFTlNFVF9SRVBPUlRSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFUE9SVFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfUkVQT1JUUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfUkVQT1JUUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1JFUE9SVFJEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTQU1QTEVSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU0FNUExFUkRZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNBTVBMRVJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU0FNUExFUkRZX01zayAoMHgxVUwgPDwgUURFQ19JTlRFTlNFVF9TQU1QTEVSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNBTVBMRVJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU0FNUExFUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5TRVRfU0FNUExFUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOU0VUX1NBTVBMRVJEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NUT1BQRURfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgREJMUkRZIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0RCTFJEWV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBEQkxSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0RCTFJEWV9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5DTFJfREJMUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQkxSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0RCTFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0RCTFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9EQkxSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEFDQ09GIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0FDQ09GX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9BQ0NPRl9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5DTFJfQUNDT0ZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFDQ09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9BQ0NPRl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0FDQ09GX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX0FDQ09GX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRVBPUlRSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfUkVQT1JUUkRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFUE9SVFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfUkVQT1JUUkRZX01zayAoMHgxVUwgPDwgUURFQ19JTlRFTkNMUl9SRVBPUlRSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFUE9SVFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfUkVQT1JUUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfSU5URU5DTFJfUkVQT1JUUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1JFUE9SVFJEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU0FNUExFUkRZIGV2ZW50ICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NBTVBMRVJEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQU1QTEVSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NBTVBMRVJEWV9Nc2sgKDB4MVVMIDw8IFFERUNfSU5URU5DTFJfU0FNUExFUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQU1QTEVSRFkgZmllbGQuICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NBTVBMRVJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBRREVDX0lOVEVOQ0xSX1NBTVBMRVJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUURFQ19JTlRFTkNMUl9TQU1QTEVSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSB0aGUgcXVhZHJhdHVyZSBkZWNvZGVyICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgcXVhZHJhdHVyZSBkZWNvZGVyICovDQorI2RlZmluZSBRREVDX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgUURFQ19FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBRREVDX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBRREVDX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0xFRFBPTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBMRUQgb3V0cHV0IHBpbiBwb2xhcml0eSAqLw0KKw0KKy8qIEJpdCAwIDogTEVEIG91dHB1dCBwaW4gcG9sYXJpdHkgKi8NCisjZGVmaW5lIFFERUNfTEVEUE9MX0xFRFBPTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMRURQT0wgZmllbGQuICovDQorI2RlZmluZSBRREVDX0xFRFBPTF9MRURQT0xfTXNrICgweDFVTCA8PCBRREVDX0xFRFBPTF9MRURQT0xfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExFRFBPTCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfTEVEUE9MX0xFRFBPTF9BY3RpdmVMb3cgKDBVTCkgLyohPCBMZWQgYWN0aXZlIG9uIG91dHB1dCBwaW4gbG93ICovDQorI2RlZmluZSBRREVDX0xFRFBPTF9MRURQT0xfQWN0aXZlSGlnaCAoMVVMKSAvKiE8IExlZCBhY3RpdmUgb24gb3V0cHV0IHBpbiBoaWdoICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfU0FNUExFUEVSICovDQorLyogRGVzY3JpcHRpb246IFNhbXBsZSBwZXJpb2QgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBTYW1wbGUgcGVyaW9kLiBUaGUgU0FNUExFIHJlZ2lzdGVyIHdpbGwgYmUgdXBkYXRlZCBmb3IgZXZlcnkgbmV3IHNhbXBsZSAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVQRVJfU0FNUExFUEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNBTVBMRVBFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl9Nc2sgKDB4RlVMIDw8IFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0FNUExFUEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVQRVJfU0FNUExFUEVSXzEyOHVzICgwVUwpIC8qITwgMTI4IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfMjU2dXMgKDFVTCkgLyohPCAyNTYgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl81MTJ1cyAoMlVMKSAvKiE8IDUxMiB1cyAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVQRVJfU0FNUExFUEVSXzEwMjR1cyAoM1VMKSAvKiE8IDEwMjQgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl8yMDQ4dXMgKDRVTCkgLyohPCAyMDQ4IHVzICovDQorI2RlZmluZSBRREVDX1NBTVBMRVBFUl9TQU1QTEVQRVJfNDA5NnVzICg1VUwpIC8qITwgNDA5NiB1cyAqLw0KKyNkZWZpbmUgUURFQ19TQU1QTEVQRVJfU0FNUExFUEVSXzgxOTJ1cyAoNlVMKSAvKiE8IDgxOTIgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl8xNjM4NHVzICg3VUwpIC8qITwgMTYzODQgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl8zMm1zICg4VUwpIC8qITwgMzI3NjggdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl82NW1zICg5VUwpIC8qITwgNjU1MzYgdXMgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFUEVSX1NBTVBMRVBFUl8xMzFtcyAoMTBVTCkgLyohPCAxMzEwNzIgdXMgKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19TQU1QTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogTW90aW9uIHNhbXBsZSB2YWx1ZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBMYXN0IG1vdGlvbiBzYW1wbGUgKi8NCisjZGVmaW5lIFFERUNfU0FNUExFX1NBTVBMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQU1QTEUgZmllbGQuICovDQorI2RlZmluZSBRREVDX1NBTVBMRV9TQU1QTEVfTXNrICgweEZGRkZGRkZGVUwgPDwgUURFQ19TQU1QTEVfU0FNUExFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQU1QTEUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfUkVQT1JUUEVSICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBzYW1wbGVzIHRvIGJlIHRha2VuIGJlZm9yZSBSRVBPUlRSRFkgYW5kIERCTFJEWSBldmVudHMgY2FuIGJlIGdlbmVyYXRlZCAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gYmUgYWNjdW11bGF0ZWQgaW4gdGhlIEFDQyByZWdpc3RlciBiZWZvcmUgdGhlIFJFUE9SVFJEWSBhbmQgREJMUkRZIGV2ZW50cyBjYW4gYmUgZ2VuZXJhdGVkICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUkVQT1JUUEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSX01zayAoMHhGVUwgPDwgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVBPUlRQRVIgZmllbGQuICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMTBTbXBsICgwVUwpIC8qITwgMTAgc2FtcGxlcyAvIHJlcG9ydCAqLw0KKyNkZWZpbmUgUURFQ19SRVBPUlRQRVJfUkVQT1JUUEVSXzQwU21wbCAoMVVMKSAvKiE8IDQwIHNhbXBsZXMgLyByZXBvcnQgKi8NCisjZGVmaW5lIFFERUNfUkVQT1JUUEVSX1JFUE9SVFBFUl84MFNtcGwgKDJVTCkgLyohPCA4MCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMTIwU21wbCAoM1VMKSAvKiE8IDEyMCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMTYwU21wbCAoNFVMKSAvKiE8IDE2MCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMjAwU21wbCAoNVVMKSAvKiE8IDIwMCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMjQwU21wbCAoNlVMKSAvKiE8IDI0MCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMjgwU21wbCAoN1VMKSAvKiE8IDI4MCBzYW1wbGVzIC8gcmVwb3J0ICovDQorI2RlZmluZSBRREVDX1JFUE9SVFBFUl9SRVBPUlRQRVJfMVNtcGwgKDhVTCkgLyohPCAxIHNhbXBsZSAvIHJlcG9ydCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0FDQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWdpc3RlciBhY2N1bXVsYXRpbmcgdGhlIHZhbGlkIHRyYW5zaXRpb25zICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlZ2lzdGVyIGFjY3VtdWxhdGluZyBhbGwgdmFsaWQgc2FtcGxlcyAobm90IGRvdWJsZSB0cmFuc2l0aW9uKSByZWFkIGZyb20gdGhlIFNBTVBMRSByZWdpc3RlciAqLw0KKyNkZWZpbmUgUURFQ19BQ0NfQUNDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfQUNDX0FDQ19Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRREVDX0FDQ19BQ0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFDQyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19BQ0NSRUFEICovDQorLyogRGVzY3JpcHRpb246IFNuYXBzaG90IG9mIHRoZSBBQ0MgcmVnaXN0ZXIsIHVwZGF0ZWQgYnkgdGhlIFJFQURDTFJBQ0Mgb3IgUkRDTFJBQ0MgdGFzayAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBTbmFwc2hvdCBvZiB0aGUgQUNDIHJlZ2lzdGVyLiAqLw0KKyNkZWZpbmUgUURFQ19BQ0NSRUFEX0FDQ1JFQURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUNDUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfQUNDUkVBRF9BQ0NSRUFEX01zayAoMHhGRkZGRkZGRlVMIDw8IFFERUNfQUNDUkVBRF9BQ0NSRUFEX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NSRUFEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX1BTRUxfTEVEICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIExFRCBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBRREVDX1BTRUxfTEVEX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfTEVEX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBRREVDX1BTRUxfTEVEX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfTEVEX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfTEVEX1BPUlRfTXNrICgweDNVTCA8PCBRREVDX1BTRUxfTEVEX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0xFRF9QSU5fTXNrICgweDFGVUwgPDwgUURFQ19QU0VMX0xFRF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUURFQ19QU0VMX0EgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgQSBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBRREVDX1BTRUxfQV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFERUNfUFNFTF9BX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfQV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9BX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRREVDX1BTRUxfQV9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfQV9QT1JUX01zayAoMHgzVUwgPDwgUURFQ19QU0VMX0FfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRREVDX1BTRUxfQV9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0FfUElOX01zayAoMHgxRlVMIDw8IFFERUNfUFNFTF9BX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX1BTRUxfQiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBCIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFFERUNfUFNFTF9CX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9DT05ORUNUX01zayAoMHgxVUwgPDwgUURFQ19QU0VMX0JfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfUFNFTF9CX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUURFQ19QU0VMX0JfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9CX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFERUNfUFNFTF9CX1BPUlRfTXNrICgweDNVTCA8PCBRREVDX1BTRUxfQl9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFFERUNfUFNFTF9CX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBRREVDX1BTRUxfQl9QSU5fTXNrICgweDFGVUwgPDwgUURFQ19QU0VMX0JfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfREJGRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGlucHV0IGRlYm91bmNlIGZpbHRlcnMgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBpbnB1dCBkZWJvdW5jZSBmaWx0ZXJzICovDQorI2RlZmluZSBRREVDX0RCRkVOX0RCRkVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERCRkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19EQkZFTl9EQkZFTl9Nc2sgKDB4MVVMIDw8IFFERUNfREJGRU5fREJGRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERCRkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19EQkZFTl9EQkZFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERlYm91bmNlIGlucHV0IGZpbHRlcnMgZGlzYWJsZWQgKi8NCisjZGVmaW5lIFFERUNfREJGRU5fREJGRU5fRW5hYmxlZCAoMVVMKSAvKiE8IERlYm91bmNlIGlucHV0IGZpbHRlcnMgZW5hYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0xFRFBSRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBUaW1lIHBlcmlvZCB0aGUgTEVEIGlzIHN3aXRjaGVkIE9OIHByaW9yIHRvIHNhbXBsaW5nICovDQorDQorLyogQml0cyA4Li4wIDogUGVyaW9kIGluIHVzIHRoZSBMRUQgaXMgc3dpdGNoZWQgb24gcHJpb3IgdG8gc2FtcGxpbmcgKi8NCisjZGVmaW5lIFFERUNfTEVEUFJFX0xFRFBSRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMRURQUkUgZmllbGQuICovDQorI2RlZmluZSBRREVDX0xFRFBSRV9MRURQUkVfTXNrICgweDFGRlVMIDw8IFFERUNfTEVEUFJFX0xFRFBSRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEVEUFJFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRREVDX0FDQ0RCTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWdpc3RlciBhY2N1bXVsYXRpbmcgdGhlIG51bWJlciBvZiBkZXRlY3RlZCBkb3VibGUgdHJhbnNpdGlvbnMgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBSZWdpc3RlciBhY2N1bXVsYXRpbmcgdGhlIG51bWJlciBvZiBkZXRlY3RlZCBkb3VibGUgb3IgaWxsZWdhbCB0cmFuc2l0aW9ucy4gKCBTQU1QTEUgPSAyICkuICovDQorI2RlZmluZSBRREVDX0FDQ0RCTF9BQ0NEQkxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUNDREJMIGZpZWxkLiAqLw0KKyNkZWZpbmUgUURFQ19BQ0NEQkxfQUNDREJMX01zayAoMHhGVUwgPDwgUURFQ19BQ0NEQkxfQUNDREJMX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NEQkwgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFERUNfQUNDREJMUkVBRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTbmFwc2hvdCBvZiB0aGUgQUNDREJMLCB1cGRhdGVkIGJ5IHRoZSBSRUFEQ0xSQUNDIG9yIFJEQ0xSREJMIHRhc2sgKi8NCisNCisvKiBCaXRzIDMuLjAgOiBTbmFwc2hvdCBvZiB0aGUgQUNDREJMIHJlZ2lzdGVyLiBUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgd2hlbiB0aGUgUkVBRENMUkFDQyBvciBSRENMUkRCTCB0YXNrIGlzIHRyaWdnZXJlZC4gKi8NCisjZGVmaW5lIFFERUNfQUNDREJMUkVBRF9BQ0NEQkxSRUFEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ0RCTFJFQUQgZmllbGQuICovDQorI2RlZmluZSBRREVDX0FDQ0RCTFJFQURfQUNDREJMUkVBRF9Nc2sgKDB4RlVMIDw8IFFERUNfQUNDREJMUkVBRF9BQ0NEQkxSRUFEX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ0NEQkxSRUFEIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFFTUEkgKi8NCisvKiBEZXNjcmlwdGlvbjogRXh0ZXJuYWwgZmxhc2ggaW50ZXJmYWNlICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBRU1BJX0lOVEVOX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTl9SRUFEWV9Nc2sgKDB4MVVMIDw8IFFTUElfSU5URU5fUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTl9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFFTUElfSU5URU5fUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTlNFVF9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSU5URU5TRVRfUkVBRFlfTXNrICgweDFVTCA8PCBRU1BJX0lOVEVOU0VUX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSU5URU5TRVRfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTlNFVF9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTlNFVF9SRUFEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTkNMUl9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSU5URU5DTFJfUkVBRFlfTXNrICgweDFVTCA8PCBRU1BJX0lOVEVOQ0xSX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSU5URU5DTFJfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTkNMUl9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUVNQSV9JTlRFTkNMUl9SRUFEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFFTUEkgcGVyaXBoZXJhbCBhbmQgYWNxdWlyZSB0aGUgcGlucyBzZWxlY3RlZCBpbiBQU0VMbiByZWdpc3RlcnMgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIFFTUEkgKi8NCisjZGVmaW5lIFFTUElfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0VOQUJMRV9FTkFCTEVfTXNrICgweDFVTCA8PCBRU1BJX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgUVNQSSAqLw0KKyNkZWZpbmUgUVNQSV9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgUVNQSSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1JFQURfU1JDICovDQorLyogRGVzY3JpcHRpb246IEZsYXNoIG1lbW9yeSBzb3VyY2UgYWRkcmVzcyAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBXb3JkLWFsaWduZWQgZmxhc2ggbWVtb3J5IHNvdXJjZSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgUVNQSV9SRUFEX1NSQ19TUkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9SRUFEX1NSQ19TUkNfTXNrICgweEZGRkZGRkZGVUwgPDwgUVNQSV9SRUFEX1NSQ19TUkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSQyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9SRUFEX0RTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSQU0gZGVzdGluYXRpb24gYWRkcmVzcyAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBXb3JkLWFsaWduZWQgUkFNIGRlc3RpbmF0aW9uIGFkZHJlc3MuICovDQorI2RlZmluZSBRU1BJX1JFQURfRFNUX0RTVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEU1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1JFQURfRFNUX0RTVF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRU1BJX1JFQURfRFNUX0RTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRFNUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1JFQURfQ05UICovDQorLyogRGVzY3JpcHRpb246IFJlYWQgdHJhbnNmZXIgbGVuZ3RoICovDQorDQorLyogQml0cyAyMC4uMCA6IFJlYWQgdHJhbnNmZXIgbGVuZ3RoIGluIG51bWJlciBvZiBieXRlcy4gVGhlIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4gKi8NCisjZGVmaW5lIFFTUElfUkVBRF9DTlRfQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUkVBRF9DTlRfQ05UX01zayAoMHgxRkZGRkZVTCA8PCBRU1BJX1JFQURfQ05UX0NOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1dSSVRFX0RTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBGbGFzaCBkZXN0aW5hdGlvbiBhZGRyZXNzICovDQorDQorLyogQml0cyAzMS4uMCA6IFdvcmQtYWxpZ25lZCBmbGFzaCBkZXN0aW5hdGlvbiBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgUVNQSV9XUklURV9EU1RfRFNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfV1JJVEVfRFNUX0RTVF9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBRU1BJX1dSSVRFX0RTVF9EU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERTVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9XUklURV9TUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogUkFNIHNvdXJjZSBhZGRyZXNzICovDQorDQorLyogQml0cyAzMS4uMCA6IFdvcmQtYWxpZ25lZCBSQU0gc291cmNlIGFkZHJlc3MuICovDQorI2RlZmluZSBRU1BJX1dSSVRFX1NSQ19TUkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1JDIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9XUklURV9TUkNfU1JDX01zayAoMHhGRkZGRkZGRlVMIDw8IFFTUElfV1JJVEVfU1JDX1NSQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1JDIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1dSSVRFX0NOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBXcml0ZSB0cmFuc2ZlciBsZW5ndGggKi8NCisNCisvKiBCaXRzIDIwLi4wIDogV3JpdGUgdHJhbnNmZXIgbGVuZ3RoIGluIG51bWJlciBvZiBieXRlcy4gVGhlIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4gKi8NCisjZGVmaW5lIFFTUElfV1JJVEVfQ05UX0NOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDTlQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1dSSVRFX0NOVF9DTlRfTXNrICgweDFGRkZGRlVMIDw8IFFTUElfV1JJVEVfQ05UX0NOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0VSQVNFX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTdGFydCBhZGRyZXNzIG9mIGZsYXNoIGJsb2NrIHRvIGJlIGVyYXNlZCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBXb3JkLWFsaWduZWQgc3RhcnQgYWRkcmVzcyBvZiBibG9jayB0byBiZSBlcmFzZWQuICovDQorI2RlZmluZSBRU1BJX0VSQVNFX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9FUkFTRV9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFFTUElfRVJBU0VfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0VSQVNFX0xFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaXplIG9mIGJsb2NrIHRvIGJlIGVyYXNlZC4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBMRU4gKi8NCisjZGVmaW5lIFFTUElfRVJBU0VfTEVOX0xFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0VSQVNFX0xFTl9MRU5fTXNrICgweDNVTCA8PCBRU1BJX0VSQVNFX0xFTl9MRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfRVJBU0VfTEVOX0xFTl80S0IgKDBVTCkgLyohPCBFcmFzZSA0IGtCIGJsb2NrIChmbGFzaCBjb21tYW5kIDB4MjApICovDQorI2RlZmluZSBRU1BJX0VSQVNFX0xFTl9MRU5fNjRLQiAoMVVMKSAvKiE8IEVyYXNlIDY0IGtCIGJsb2NrIChmbGFzaCBjb21tYW5kIDB4RDgpICovDQorI2RlZmluZSBRU1BJX0VSQVNFX0xFTl9MRU5fQWxsICgyVUwpIC8qITwgRXJhc2UgYWxsIChmbGFzaCBjb21tYW5kIDB4QzcpICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfUFNFTF9TQ0sgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3Igc2VyaWFsIGNsb2NrIFNDSyAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9TQ0tfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9TQ0tfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFTUElfUFNFTF9TQ0tfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9TQ0tfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9TQ0tfUE9SVF9Nc2sgKDB4M1VMIDw8IFFTUElfUFNFTF9TQ0tfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfU0NLX1BJTl9Nc2sgKDB4MUZVTCA8PCBRU1BJX1BTRUxfU0NLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1BTRUxfQ1NOICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIGNoaXAgc2VsZWN0IHNpZ25hbCBDU04uICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0NTTl9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0NTTl9DT05ORUNUX01zayAoMHgxVUwgPDwgUVNQSV9QU0VMX0NTTl9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0NTTl9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0NTTl9QT1JUX01zayAoMHgzVUwgPDwgUVNQSV9QU0VMX0NTTl9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9DU05fUElOX01zayAoMHgxRlVMIDw8IFFTUElfUFNFTF9DU05fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfUFNFTF9JTzAgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgTU9TSS9JTzAuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMF9DT05ORUNUX01zayAoMHgxVUwgPDwgUVNQSV9QU0VMX0lPMF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMF9QT1JUX01zayAoMHgzVUwgPDwgUVNQSV9QU0VMX0lPMF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzBfUElOX01zayAoMHgxRlVMIDw8IFFTUElfUFNFTF9JTzBfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfUFNFTF9JTzEgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgTUlTTy9JTzEuICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMV9DT05ORUNUX01zayAoMHgxVUwgPDwgUVNQSV9QU0VMX0lPMV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPMV9QT1JUX01zayAoMHgzVUwgPDwgUVNQSV9QU0VMX0lPMV9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzFfUElOX01zayAoMHgxRlVMIDw8IFFTUElfUFNFTF9JTzFfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfUFNFTF9JTzIgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3Igc2VyaWFsIGRhdGEgSU8yLiAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzJfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzJfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFFTUElfUFNFTF9JTzJfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzJfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfUFNFTF9JTzJfUE9SVF9Nc2sgKDB4M1VMIDw8IFFTUElfUFNFTF9JTzJfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8yX1BJTl9Nc2sgKDB4MUZVTCA8PCBRU1BJX1BTRUxfSU8yX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX1BTRUxfSU8zICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIHNlcmlhbCBkYXRhIElPMy4gKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8zX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8zX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBRU1BJX1BTRUxfSU8zX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8zX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1BTRUxfSU8zX1BPUlRfTXNrICgweDNVTCA8PCBRU1BJX1BTRUxfSU8zX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9QU0VMX0lPM19QSU5fTXNrICgweDFGVUwgPDwgUVNQSV9QU0VMX0lPM19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9YSVBPRkZTRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogQWRkcmVzcyBvZmZzZXQgaW50byB0aGUgZXh0ZXJuYWwgbWVtb3J5IGZvciBFeGVjdXRlIGluIFBsYWNlIG9wZXJhdGlvbi4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQWRkcmVzcyBvZmZzZXQgaW50byB0aGUgZXh0ZXJuYWwgbWVtb3J5IGZvciBFeGVjdXRlIGluIFBsYWNlIG9wZXJhdGlvbi4gVmFsdWUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuICovDQorI2RlZmluZSBRU1BJX1hJUE9GRlNFVF9YSVBPRkZTRVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgWElQT0ZGU0VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9YSVBPRkZTRVRfWElQT0ZGU0VUX01zayAoMHhGRkZGRkZGRlVMIDw8IFFTUElfWElQT0ZGU0VUX1hJUE9GRlNFVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgWElQT0ZGU0VUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0lGQ09ORklHMCAqLw0KKy8qIERlc2NyaXB0aW9uOiBJbnRlcmZhY2UgY29uZmlndXJhdGlvbi4gKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBkZWVwIHBvd2VyLWRvd24gbW9kZSAoRFBNKSBmZWF0dXJlLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfRFBNRU5BQkxFX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIERQTUVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0RQTUVOQUJMRV9Nc2sgKDB4MVVMIDw8IFFTUElfSUZDT05GSUcwX0RQTUVOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRFBNRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfRFBNRU5BQkxFX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIERQTSBmZWF0dXJlLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfRFBNRU5BQkxFX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBEUE0gZmVhdHVyZS4gKi8NCisNCisvKiBCaXQgNiA6IEFkZHJlc3NpbmcgbW9kZS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX0FERFJNT0RFX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfQUREUk1PREVfTXNrICgweDFVTCA8PCBRU1BJX0lGQ09ORklHMF9BRERSTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUk1PREUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9BRERSTU9ERV8yNEJJVCAoMFVMKSAvKiE8IDI0LWJpdCBhZGRyZXNzaW5nLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfQUREUk1PREVfMzJCSVQgKDFVTCkgLyohPCAzMi1iaXQgYWRkcmVzc2luZy4gKi8NCisNCisvKiBCaXRzIDUuLjMgOiBDb25maWd1cmUgbnVtYmVyIG9mIGRhdGEgbGluZXMgYW5kIG9wY29kZSB1c2VkIGZvciB3cml0aW5nLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfV1JJVEVPQ19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBXUklURU9DIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfV1JJVEVPQ19Nc2sgKDB4N1VMIDw8IFFTUElfSUZDT05GSUcwX1dSSVRFT0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdSSVRFT0MgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9XUklURU9DX1BQICgwVUwpIC8qITwgU2luZ2xlIGRhdGEgbGluZSBTUEkuIFBQIChvcGNvZGUgMHgwMikuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9XUklURU9DX1BQMk8gKDFVTCkgLyohPCBEdWFsIGRhdGEgbGluZSBTUEkuIFBQMk8gKG9wY29kZSAweEEyKS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1dSSVRFT0NfUFA0TyAoMlVMKSAvKiE8IFF1YWQgZGF0YSBsaW5lIFNQSS4gUFA0TyAob3Bjb2RlIDB4MzIpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfV1JJVEVPQ19QUDRJTyAoM1VMKSAvKiE8IFF1YWQgZGF0YSBsaW5lIFNQSS4gUFA0SU8gKG9wY29kZSAweDM4KS4gKi8NCisNCisvKiBCaXRzIDIuLjAgOiBDb25maWd1cmUgbnVtYmVyIG9mIGRhdGEgbGluZXMgYW5kIG9wY29kZSB1c2VkIGZvciByZWFkaW5nLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfUkVBRE9DX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURPQyBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcwX1JFQURPQ19Nc2sgKDB4N1VMIDw8IFFTUElfSUZDT05GSUcwX1JFQURPQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRE9DIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfUkVBRE9DX0ZBU1RSRUFEICgwVUwpIC8qITwgU2luZ2xlIGRhdGEgbGluZSBTUEkuIEZBU1RfUkVBRCAob3Bjb2RlIDB4MEIpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfUkVBRE9DX1JFQUQyTyAoMVVMKSAvKiE8IER1YWwgZGF0YSBsaW5lIFNQSS4gUkVBRDJPIChvcGNvZGUgMHgzQikuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9SRUFET0NfUkVBRDJJTyAoMlVMKSAvKiE8IER1YWwgZGF0YSBsaW5lIFNQSS4gUkVBRDJJTyAob3Bjb2RlIDB4QkIpLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzBfUkVBRE9DX1JFQUQ0TyAoM1VMKSAvKiE8IFF1YWQgZGF0YSBsaW5lIFNQSS4gUkVBRDRPIChvcGNvZGUgMHg2QikuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMF9SRUFET0NfUkVBRDRJTyAoNFVMKSAvKiE8IFF1YWQgZGF0YSBsaW5lIFNQSS4gUkVBRDRJTyAob3Bjb2RlIDB4RUIpLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0lGQ09ORklHMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBJbnRlcmZhY2UgY29uZmlndXJhdGlvbi4gKi8NCisNCisvKiBCaXRzIDMxLi4yOCA6IFNDSyBmcmVxdWVuY3kgaXMgZ2l2ZW4gYXMgMzIgTUh6IC8gKFNDS0ZSRVEgKyAxKS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcxX1NDS0ZSRVFfUG9zICgyOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNDS0ZSRVEgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9TQ0tGUkVRX01zayAoMHhGVUwgPDwgUVNQSV9JRkNPTkZJRzFfU0NLRlJFUV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0NLRlJFUSBmaWVsZC4gKi8NCisNCisvKiBCaXQgMjUgOiBTZWxlY3QgU1BJIG1vZGUuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9TUElNT0RFX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBTUElNT0RFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfU1BJTU9ERV9Nc2sgKDB4MVVMIDw8IFFTUElfSUZDT05GSUcxX1NQSU1PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNQSU1PREUgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9TUElNT0RFX01PREUwICgwVUwpIC8qITwgTW9kZSAwOiBEYXRhIGFyZSBjYXB0dXJlZCBvbiB0aGUgY2xvY2sncyByaXNpbmcgZWRnZSBhbmQgZGF0YSBpcyBvdXRwdXQgb24gYSBmYWxsaW5nIGVkZ2UuIEJhc2UgbGV2ZWwgb2YgY2xvY2sgaXMgMCAoQ1BPTD0wLCBDUEhBPTApLiAqLw0KKyNkZWZpbmUgUVNQSV9JRkNPTkZJRzFfU1BJTU9ERV9NT0RFMyAoMVVMKSAvKiE8IE1vZGUgMzogRGF0YSBhcmUgY2FwdHVyZWQgb24gdGhlIGNsb2NrJ3MgZmFsbGluZyBlZGdlIGFuZCBkYXRhIGlzIG91dHB1dCBvbiBhIHJpc2luZyBlZGdlLiBCYXNlIGxldmVsIG9mIGNsb2NrIGlzIDEgKENQT0w9MSwgQ1BIQT0xKS4gKi8NCisNCisvKiBCaXQgMjQgOiBFbnRlci9leGl0IGRlZXAgcG93ZXItZG93biBtb2RlIChEUE0pIGZvciBleHRlcm5hbCBmbGFzaCBtZW1vcnkuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9EUE1FTl9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgRFBNRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9EUE1FTl9Nc2sgKDB4MVVMIDw8IFFTUElfSUZDT05GSUcxX0RQTUVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBEUE1FTiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcxX0RQTUVOX0V4aXQgKDBVTCkgLyohPCBFeGl0IERQTS4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcxX0RQTUVOX0VudGVyICgxVUwpIC8qITwgRW50ZXIgRFBNLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgQ1NOIHBpbiBtdXN0IHN0YXkgaGlnaCBiZWZvcmUgaXQgY2FuIGdvIGxvdyBhZ2Fpbi4gVmFsdWUgaXMgc3BlY2lmaWVkIGluIG51bWJlciBvZiAxNiBNSHogcGVyaW9kcyAoNjIuNSBucykuICovDQorI2RlZmluZSBRU1BJX0lGQ09ORklHMV9TQ0tERUxBWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTQ0tERUxBWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZDT05GSUcxX1NDS0RFTEFZX01zayAoMHhGRlVMIDw8IFFTUElfSUZDT05GSUcxX1NDS0RFTEFZX1BvcykgLyohPCBCaXQgbWFzayBvZiBTQ0tERUxBWSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUVNQSV9TVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogU3RhdHVzIHJlZ2lzdGVyLiAqLw0KKw0KKy8qIEJpdHMgMzEuLjI0IDogVmFsdWUgb2YgZXh0ZXJuYWwgZmxhc2ggZGV2aWNlcyBTdGF0dXMgUmVnaXN0ZXIuIFdoZW4gdGhlIGV4dGVybmFsIGZsYXNoIGhhcyB0d28gYnl0ZXMgc3RhdHVzIHJlZ2lzdGVyIHRoaXMgZmllbGQgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIHRoZSBsb3cgYnl0ZS4gKi8NCisjZGVmaW5lIFFTUElfU1RBVFVTX1NSRUdfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNSRUcgZmllbGQuICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19TUkVHX01zayAoMHhGRlVMIDw8IFFTUElfU1RBVFVTX1NSRUdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNSRUcgZmllbGQuICovDQorDQorLyogQml0IDMgOiBSZWFkeSBzdGF0dXMuICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19SRUFEWV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfU1RBVFVTX1JFQURZX01zayAoMHgxVUwgPDwgUVNQSV9TVEFUVVNfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfUkVBRFlfQlVTWSAoMFVMKSAvKiE8IFFTUEkgcGVyaXBoZXJhbCBpcyBidXN5LiBJdCBpcyBub3QgYWxsb3dlZCB0byB0cmlnZ2VyIGFueSBuZXcgdGFza3MsIHdyaXRpbmcgY3VzdG9tIGluc3RydWN0aW9ucyBvciBlbnRlci9leGl0IERQTS4gKi8NCisjZGVmaW5lIFFTUElfU1RBVFVTX1JFQURZX1JFQURZICgxVUwpIC8qITwgUVNQSSBwZXJpcGhlcmFsIGlzIHJlYWR5LiBJdCBpcyBhbGxvd2VkIHRvIHRyaWdnZXIgbmV3IHRhc2tzLCB3cml0aW5nIGN1c3RvbSBpbnN0cnVjdGlvbnMgb3IgZW50ZXIvZXhpdCBEUE0uICovDQorDQorLyogQml0IDIgOiBEZWVwIHBvd2VyLWRvd24gbW9kZSAoRFBNKSBzdGF0dXMgb2YgZXh0ZXJuYWwgZmxhc2guICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19EUE1fUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRFBNIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfRFBNX01zayAoMHgxVUwgPDwgUVNQSV9TVEFUVVNfRFBNX1BvcykgLyohPCBCaXQgbWFzayBvZiBEUE0gZmllbGQuICovDQorI2RlZmluZSBRU1BJX1NUQVRVU19EUE1fRGlzYWJsZWQgKDBVTCkgLyohPCBFeHRlcm5hbCBmbGFzaCBpcyBub3QgaW4gRFBNLiAqLw0KKyNkZWZpbmUgUVNQSV9TVEFUVVNfRFBNX0VuYWJsZWQgKDFVTCkgLyohPCBFeHRlcm5hbCBmbGFzaCBpcyBpbiBEUE0uICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfRFBNRFVSICovDQorLyogRGVzY3JpcHRpb246IFNldCB0aGUgZHVyYXRpb24gcmVxdWlyZWQgdG8gZW50ZXIvZXhpdCBkZWVwIHBvd2VyLWRvd24gbW9kZSAoRFBNKS4gKi8NCisNCisvKiBCaXRzIDMxLi4xNiA6IER1cmF0aW9uIG5lZWRlZCBieSBleHRlcm5hbCBmbGFzaCB0byBleGl0IERQTS4gRHVyYXRpb24gaXMgZ2l2ZW4gYXMgRVhJVCAqIDI1NiAqIDYyLjUgbnMuICovDQorI2RlZmluZSBRU1BJX0RQTURVUl9FWElUX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFWElUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9EUE1EVVJfRVhJVF9Nc2sgKDB4RkZGRlVMIDw8IFFTUElfRFBNRFVSX0VYSVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVYSVQgZmllbGQuICovDQorDQorLyogQml0cyAxNS4uMCA6IER1cmF0aW9uIG5lZWRlZCBieSBleHRlcm5hbCBmbGFzaCB0byBlbnRlciBEUE0uIER1cmF0aW9uIGlzIGdpdmVuIGFzIEVOVEVSICogMjU2ICogNjIuNSBucy4gKi8NCisjZGVmaW5lIFFTUElfRFBNRFVSX0VOVEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOVEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9EUE1EVVJfRU5URVJfTXNrICgweEZGRkZVTCA8PCBRU1BJX0RQTURVUl9FTlRFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5URVIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfQUREUkNPTkYgKi8NCisvKiBEZXNjcmlwdGlvbjogRXh0ZW5kZWQgYWRkcmVzcyBjb25maWd1cmF0aW9uLiAqLw0KKw0KKy8qIEJpdCAyNyA6IFNlbmQgV1JFTiAod3JpdGUgZW5hYmxlIG9wY29kZSAweDA2KSBiZWZvcmUgaW5zdHJ1Y3Rpb24uICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dSRU5fUG9zICgyN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFdSRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dSRU5fTXNrICgweDFVTCA8PCBRU1BJX0FERFJDT05GX1dSRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdSRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dSRU5fRGlzYWJsZSAoMFVMKSAvKiE8IERvIG5vdCBzZW5kIFdSRU4uICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dSRU5fRW5hYmxlICgxVUwpIC8qITwgU2VuZCBXUkVOLiAqLw0KKw0KKy8qIEJpdCAyNiA6IFdhaXQgZm9yIHdyaXRlIGNvbXBsZXRlIGJlZm9yZSBzZW5kaW5nIGNvbW1hbmQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dJUFdBSVRfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFdJUFdBSVQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dJUFdBSVRfTXNrICgweDFVTCA8PCBRU1BJX0FERFJDT05GX1dJUFdBSVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdJUFdBSVQgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dJUFdBSVRfRGlzYWJsZSAoMFVMKSAvKiE8IE5vIHdhaXQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX1dJUFdBSVRfRW5hYmxlICgxVUwpIC8qITwgV2FpdC4gKi8NCisNCisvKiBCaXRzIDI1Li4yNCA6IEV4dGVuZGVkIGFkZHJlc3NpbmcgbW9kZS4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfTU9ERV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfTU9ERV9Nc2sgKDB4M1VMIDw8IFFTUElfQUREUkNPTkZfTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfTU9ERV9Ob0luc3RyICgwVUwpIC8qITwgRG8gbm90IHNlbmQgYW55IGluc3RydWN0aW9uLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9NT0RFX09wY29kZSAoMVVMKSAvKiE8IFNlbmQgb3Bjb2RlLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9NT0RFX09wQnl0ZTAgKDJVTCkgLyohPCBTZW5kIG9wY29kZSwgYnl0ZTAuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX01PREVfQWxsICgzVUwpIC8qITwgU2VuZCBvcGNvZGUsIGJ5dGUwLCBieXRlMS4gKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IEJ5dGUgMSBmb2xsb3dpbmcgYnl0ZSAwLiAqLw0KKyNkZWZpbmUgUVNQSV9BRERSQ09ORl9CWVRFMV9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQllURTEgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX0JZVEUxX01zayAoMHhGRlVMIDw8IFFTUElfQUREUkNPTkZfQllURTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEUxIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBCeXRlIDAgZm9sbG93aW5nIG9wY29kZS4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfQllURTBfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQllURTAgZmllbGQuICovDQorI2RlZmluZSBRU1BJX0FERFJDT05GX0JZVEUwX01zayAoMHhGRlVMIDw8IFFTUElfQUREUkNPTkZfQllURTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEUwIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE9wY29kZSB0aGF0IGVudGVycyB0aGUgMzItYml0IGFkZHJlc3NpbmcgbW9kZS4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfT1BDT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9QQ09ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQUREUkNPTkZfT1BDT0RFX01zayAoMHhGRlVMIDw8IFFTUElfQUREUkNPTkZfT1BDT0RFX1BvcykgLyohPCBCaXQgbWFzayBvZiBPUENPREUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFFTUElfQ0lOU1RSQ09ORiAqLw0KKy8qIERlc2NyaXB0aW9uOiBDdXN0b20gaW5zdHJ1Y3Rpb24gY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8NCisNCisvKiBCaXQgMTUgOiBTZW5kIFdSRU4gKHdyaXRlIGVuYWJsZSBvcGNvZGUgMHgwNikgYmVmb3JlIGluc3RydWN0aW9uLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX1dSRU5fUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFdSRU4gZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfV1JFTl9Nc2sgKDB4MVVMIDw8IFFTUElfQ0lOU1RSQ09ORl9XUkVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBXUkVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX1dSRU5fRGlzYWJsZSAoMFVMKSAvKiE8IERvIG5vdCBzZW5kIFdSRU4uICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfV1JFTl9FbmFibGUgKDFVTCkgLyohPCBTZW5kIFdSRU4uICovDQorDQorLyogQml0IDE0IDogV2FpdCBmb3Igd3JpdGUgY29tcGxldGUgYmVmb3JlIHNlbmRpbmcgY29tbWFuZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9XSVBXQUlUX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBXSVBXQUlUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX1dJUFdBSVRfTXNrICgweDFVTCA8PCBRU1BJX0NJTlNUUkNPTkZfV0lQV0FJVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV0lQV0FJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9XSVBXQUlUX0Rpc2FibGUgKDBVTCkgLyohPCBObyB3YWl0LiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX1dJUFdBSVRfRW5hYmxlICgxVUwpIC8qITwgV2FpdC4gKi8NCisNCisvKiBCaXQgMTMgOiBMZXZlbCBvZiB0aGUgSU8zIHBpbiAoaWYgY29ubmVjdGVkKSBkdXJpbmcgdHJhbnNtaXNzaW9uIG9mIGN1c3RvbSBpbnN0cnVjdGlvbi4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MSU8zX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBMSU8zIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xJTzNfTXNrICgweDFVTCA8PCBRU1BJX0NJTlNUUkNPTkZfTElPM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTElPMyBmaWVsZC4gKi8NCisNCisvKiBCaXQgMTIgOiBMZXZlbCBvZiB0aGUgSU8yIHBpbiAoaWYgY29ubmVjdGVkKSBkdXJpbmcgdHJhbnNtaXNzaW9uIG9mIGN1c3RvbSBpbnN0cnVjdGlvbi4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MSU8yX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBMSU8yIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xJTzJfTXNrICgweDFVTCA8PCBRU1BJX0NJTlNUUkNPTkZfTElPMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTElPMiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDExLi44IDogTGVuZ3RoIG9mIGN1c3RvbSBpbnN0cnVjdGlvbiBpbiBudW1iZXIgb2YgYnl0ZXMuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIExFTkdUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfTXNrICgweEZVTCA8PCBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIX1BvcykgLyohPCBCaXQgbWFzayBvZiBMRU5HVEggZmllbGQuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzFCICgxVUwpIC8qITwgU2VuZCBvcGNvZGUgb25seS4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfMkIgKDJVTCkgLyohPCBTZW5kIG9wY29kZSwgQ0lOU1RSREFUMC5CWVRFMC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfM0IgKDNVTCkgLyohPCBTZW5kIG9wY29kZSwgQ0lOU1RSREFUMC5CWVRFMCAtJmd0OyBDSU5TVFJEQVQwLkJZVEUxLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF80QiAoNFVMKSAvKiE8IFNlbmQgb3Bjb2RlLCBDSU5TVFJEQVQwLkJZVEUwIC0mZ3Q7IENJTlNUUkRBVDAuQllURTIuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzVCICg1VUwpIC8qITwgU2VuZCBvcGNvZGUsIENJTlNUUkRBVDAuQllURTAgLSZndDsgQ0lOU1RSREFUMC5CWVRFMy4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfNkIgKDZVTCkgLyohPCBTZW5kIG9wY29kZSwgQ0lOU1RSREFUMC5CWVRFMCAtJmd0OyBDSU5TVFJEQVQxLkJZVEU0LiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJDT05GX0xFTkdUSF83QiAoN1VMKSAvKiE8IFNlbmQgb3Bjb2RlLCBDSU5TVFJEQVQwLkJZVEUwIC0mZ3Q7IENJTlNUUkRBVDEuQllURTUuICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfTEVOR1RIXzhCICg4VUwpIC8qITwgU2VuZCBvcGNvZGUsIENJTlNUUkRBVDAuQllURTAgLSZndDsgQ0lOU1RSREFUMS5CWVRFNi4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9MRU5HVEhfOUIgKDlVTCkgLyohPCBTZW5kIG9wY29kZSwgQ0lOU1RSREFUMC5CWVRFMCAtJmd0OyBDSU5TVFJEQVQxLkJZVEU3LiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE9wY29kZSBvZiBDdXN0b20gaW5zdHJ1Y3Rpb24uICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkNPTkZfT1BDT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9QQ09ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSQ09ORl9PUENPREVfTXNrICgweEZGVUwgPDwgUVNQSV9DSU5TVFJDT05GX09QQ09ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1BDT0RFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0NJTlNUUkRBVDAgKi8NCisvKiBEZXNjcmlwdGlvbjogQ3VzdG9tIGluc3RydWN0aW9uIGRhdGEgcmVnaXN0ZXIgMC4gKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IERhdGEgYnl0ZSAzICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDBfQllURTNfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJZVEUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQwX0JZVEUzX01zayAoMHhGRlVMIDw8IFFTUElfQ0lOU1RSREFUMF9CWVRFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQllURTMgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBEYXRhIGJ5dGUgMiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQwX0JZVEUyX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFMl9Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDBfQllURTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEUyIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBEYXRhIGJ5dGUgMSAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQwX0JZVEUxX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJZVEUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQwX0JZVEUxX01zayAoMHhGRlVMIDw8IFFTUElfQ0lOU1RSREFUMF9CWVRFMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQllURTEgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogRGF0YSBieXRlIDAgKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMF9CWVRFMF9Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDBfQllURTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEUwIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0NJTlNUUkRBVDEgKi8NCisvKiBEZXNjcmlwdGlvbjogQ3VzdG9tIGluc3RydWN0aW9uIGRhdGEgcmVnaXN0ZXIgMS4gKi8NCisNCisvKiBCaXRzIDMxLi4yNCA6IERhdGEgYnl0ZSA3ICovDQorI2RlZmluZSBRU1BJX0NJTlNUUkRBVDFfQllURTdfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJZVEU3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQxX0JZVEU3X01zayAoMHhGRlVMIDw8IFFTUElfQ0lOU1RSREFUMV9CWVRFN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQllURTcgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBEYXRhIGJ5dGUgNiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQxX0JZVEU2X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFNiBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFNl9Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDFfQllURTZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEU2IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBEYXRhIGJ5dGUgNSAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQxX0JZVEU1X1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJZVEU1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUVNQSV9DSU5TVFJEQVQxX0JZVEU1X01zayAoMHhGRlVMIDw8IFFTUElfQ0lOU1RSREFUMV9CWVRFNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQllURTUgZmllbGQuICovDQorDQorLyogQml0cyA3Li4wIDogRGF0YSBieXRlIDQgKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFNF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCWVRFNCBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfQ0lOU1RSREFUMV9CWVRFNF9Nc2sgKDB4RkZVTCA8PCBRU1BJX0NJTlNUUkRBVDFfQllURTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJZVEU0IGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBRU1BJX0lGVElNSU5HICovDQorLyogRGVzY3JpcHRpb246IFNQSSBpbnRlcmZhY2UgdGltaW5nLiAqLw0KKw0KKy8qIEJpdHMgMTAuLjggOiBUaW1pbmcgcmVsYXRlZCB0byBzYW1wbGluZyBvZiB0aGUgaW5wdXQgc2VyaWFsIGRhdGEuIFRoZSB2YWx1ZSBvZiBSWERFTEFZIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIDY0IE1IeiBjeWNsZXMgKDE1LjYyNSBucykgZGVsYXkgZnJvbSB0aGUgdGhlIHJpc2luZyBlZGdlIG9mIHRoZSBTUEkgQ2xvY2sgKFNDSykgdW50aWwgdGhlIGlucHV0IHNlcmlhbCBkYXRhIGlzIHNhbXBsZWQuIEFzIGVuIGV4YW1wbGUsIGlmIHNldCB0byAwIHRoZSBpbnB1dCBzZXJpYWwgZGF0YSBpcyBzYW1wbGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBTQ0suICovDQorI2RlZmluZSBRU1BJX0lGVElNSU5HX1JYREVMQVlfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUlhERUxBWSBmaWVsZC4gKi8NCisjZGVmaW5lIFFTUElfSUZUSU1JTkdfUlhERUxBWV9Nc2sgKDB4N1VMIDw8IFFTUElfSUZUSU1JTkdfUlhERUxBWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhERUxBWSBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBSQURJTyAqLw0KKy8qIERlc2NyaXB0aW9uOiAyLjQgR0h6IFJhZGlvICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAxOSA6IFNob3J0Y3V0IGJldHdlZW4gUlhSRUFEWSBldmVudCBhbmQgU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JYUkVBRFlfU1RBUlRfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYUkVBRFlfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUlhSRUFEWV9TVEFSVF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19SWFJFQURZX1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFJFQURZX1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JYUkVBRFlfU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUlhSRUFEWV9TVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDE4IDogU2hvcnRjdXQgYmV0d2VlbiBUWFJFQURZIGV2ZW50IGFuZCBTVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfVFhSRUFEWV9TVEFSVF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgVFhSRUFEWV9TVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19UWFJFQURZX1NUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX1RYUkVBRFlfU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYUkVBRFlfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfVFhSRUFEWV9TVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19UWFJFQURZX1NUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTcgOiBTaG9ydGN1dCBiZXR3ZWVuIENDQUlETEUgZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUlETEVfU1RPUF9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBSURMRV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUlETEVfU1RPUF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19DQ0FJRExFX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQUlETEVfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FJRExFX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBSURMRV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTYgOiBTaG9ydGN1dCBiZXR3ZWVuIEVERU5EIGV2ZW50IGFuZCBESVNBQkxFIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FREVORF9ESVNBQkxFX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFREVORF9ESVNBQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VERU5EX0RJU0FCTEVfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfRURFTkRfRElTQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRURFTkRfRElTQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FREVORF9ESVNBQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VERU5EX0RJU0FCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxNSA6IFNob3J0Y3V0IGJldHdlZW4gUkVBRFkgZXZlbnQgYW5kIEVEU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JFQURZX0VEU1RBUlRfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZX0VEU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUkVBRFlfRURTVEFSVF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19SRUFEWV9FRFNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWV9FRFNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JFQURZX0VEU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUkVBRFlfRURTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDE0IDogU2hvcnRjdXQgYmV0d2VlbiBGUkFNRVNUQVJUIGV2ZW50IGFuZCBCQ1NUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19GUkFNRVNUQVJUX0JDU1RBUlRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1FU1RBUlRfQkNTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19GUkFNRVNUQVJUX0JDU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfRlJBTUVTVEFSVF9CQ1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRVNUQVJUX0JDU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRlJBTUVTVEFSVF9CQ1NUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0ZSQU1FU1RBUlRfQkNTVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEzIDogU2hvcnRjdXQgYmV0d2VlbiBDQ0FCVVNZIGV2ZW50IGFuZCBESVNBQkxFIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FCVVNZX0RJU0FCTEVfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUJVU1lfRElTQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FCVVNZX0RJU0FCTEVfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfQ0NBQlVTWV9ESVNBQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FCVVNZX0RJU0FCTEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBQlVTWV9ESVNBQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUJVU1lfRElTQUJMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDEyIDogU2hvcnRjdXQgYmV0d2VlbiBDQ0FJRExFIGV2ZW50IGFuZCBUWEVOIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FJRExFX1RYRU5fUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUlETEVfVFhFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19DQ0FJRExFX1RYRU5fTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfQ0NBSURMRV9UWEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FJRExFX1RYRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQ0NBSURMRV9UWEVOX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0NDQUlETEVfVFhFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDExIDogU2hvcnRjdXQgYmV0d2VlbiBSWFJFQURZIGV2ZW50IGFuZCBDQ0FTVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUlhSRUFEWV9DQ0FTVEFSVF9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUlhSRUFEWV9DQ0FTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SWFJFQURZX0NDQVNUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX1JYUkVBRFlfQ0NBU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYUkVBRFlfQ0NBU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfUlhSRUFEWV9DQ0FTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SWFJFQURZX0NDQVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgOCA6IFNob3J0Y3V0IGJldHdlZW4gRElTQUJMRUQgZXZlbnQgYW5kIFJTU0lTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9SU1NJU1RPUF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBESVNBQkxFRF9SU1NJU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9SU1NJU1RPUF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19ESVNBQkxFRF9SU1NJU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRElTQUJMRURfUlNTSVNUT1AgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlNTSVNUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlNTSVNUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA2IDogU2hvcnRjdXQgYmV0d2VlbiBBRERSRVNTIGV2ZW50IGFuZCBCQ1NUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19BRERSRVNTX0JDU1RBUlRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgQUREUkVTU19CQ1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0FERFJFU1NfQkNTVEFSVF9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19BRERSRVNTX0JDU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJFU1NfQkNTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19BRERSRVNTX0JDU1RBUlRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQUREUkVTU19CQ1NUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgNSA6IFNob3J0Y3V0IGJldHdlZW4gRU5EIGV2ZW50IGFuZCBTVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX1NUQVJUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORF9TVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FTkRfU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfRU5EX1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX1NUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0VORF9TVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIEFERFJFU1MgZXZlbnQgYW5kIFJTU0lTVEFSVCB0YXNrICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQUREUkVTU19SU1NJU1RBUlRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQUREUkVTU19SU1NJU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfQUREUkVTU19SU1NJU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19TSE9SVFNfQUREUkVTU19SU1NJU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFJFU1NfUlNTSVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0FERFJFU1NfUlNTSVNUQVJUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0FERFJFU1NfUlNTSVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMyA6IFNob3J0Y3V0IGJldHdlZW4gRElTQUJMRUQgZXZlbnQgYW5kIFJYRU4gdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1JYRU5fUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRElTQUJMRURfUlhFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9SWEVOX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1JYRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJU0FCTEVEX1JYRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfUlhFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9SWEVOX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMiA6IFNob3J0Y3V0IGJldHdlZW4gRElTQUJMRUQgZXZlbnQgYW5kIFRYRU4gdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1RYRU5fUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRElTQUJMRURfVFhFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9UWEVOX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX0RJU0FCTEVEX1RYRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJU0FCTEVEX1RYRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRElTQUJMRURfVFhFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19ESVNBQkxFRF9UWEVOX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMSA6IFNob3J0Y3V0IGJldHdlZW4gRU5EIGV2ZW50IGFuZCBESVNBQkxFIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FTkRfRElTQUJMRV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRfRElTQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19FTkRfRElTQUJMRV9Nc2sgKDB4MVVMIDw8IFJBRElPX1NIT1JUU19FTkRfRElTQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EX0RJU0FCTEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX0RJU0FCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBSQURJT19TSE9SVFNfRU5EX0RJU0FCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBSRUFEWSBldmVudCBhbmQgU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JFQURZX1NUQVJUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZX1NUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU0hPUlRTX1JFQURZX1NUQVJUX01zayAoMHgxVUwgPDwgUkFESU9fU0hPUlRTX1JFQURZX1NUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWV9TVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SRUFEWV9TVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJBRElPX1NIT1JUU19SRUFEWV9TVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTUhSTUFUQ0ggZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX01IUk1BVENIX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBNSFJNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX01IUk1BVENIX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfTUhSTUFUQ0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1IUk1BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfTUhSTUFUQ0hfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfTUhSTUFUQ0hfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX01IUk1BVENIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SWFJFQURZX1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUlhSRUFEWV9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX1JYUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SWFJFQURZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JYUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JYUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1RYUkVBRFlfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9UWFJFQURZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfVFhSRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1RYUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfVFhSRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfVFhSRUFEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkFURUJPT1NUIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SQVRFQk9PU1RfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJBVEVCT09TVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JBVEVCT09TVF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX1JBVEVCT09TVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFURUJPT1NUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUkFURUJPT1NUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JBVEVCT09TVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUkFURUJPT1NUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDQ0FTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FTVE9QUEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDQ0FTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0NDQVNUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQVNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FTVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQVNUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQVNUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENDQUJVU1kgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUJVU1lfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENDQUJVU1kgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FCVVNZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfQ0NBQlVTWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBQlVTWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUJVU1lfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBQlVTWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBQlVTWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0NBSURMRSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBSURMRV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBSURMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NDQUlETEVfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9DQ0FJRExFX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FJRExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ0NBSURMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FJRExFX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DQ0FJRExFX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFRFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VEU1RPUFBFRF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgRURTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURTVE9QUEVEX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfRURTVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBFRFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FRFNUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRURTVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FRFNUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVERU5EIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FREVORF9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgRURFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FREVORF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0VERU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VERU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VERU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9FREVORF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRlJBTUVTVEFSVCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRlJBTUVTVEFSVF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0ZSQU1FU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9GUkFNRVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRlJBTUVTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9GUkFNRVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9GUkFNRVNUQVJUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDUkNFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ0VSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9DUkNFUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDRVJST1IgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNFUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNFUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQ1JDRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENSQ09LIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNPS19Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDT0sgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNPS19Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0NSQ09LX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUkNPSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NSQ09LX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0NSQ09LX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9DUkNPS19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQkNNQVRDSCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQkNNQVRDSF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQkNNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0JDTUFUQ0hfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9CQ01BVENIX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQ01BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQkNNQVRDSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9CQ01BVENIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9CQ01BVENIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJTU0lFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JTU0lFTkRfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUlNTSUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JTU0lFTkRfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9SU1NJRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBSU1NJRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUlNTSUVORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SU1NJRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SU1NJRU5EX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERFVk1JU1MgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1JU1NfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgREVWTUlTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1JU1NfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9ERVZNSVNTX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVZNSVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfREVWTUlTU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNSVNTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNSVNTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERFVk1BVENIIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ERVZNQVRDSF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBERVZNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1BVENIX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfREVWTUFUQ0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVk1BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfREVWTUFUQ0hfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfREVWTUFUQ0hfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RFVk1BVENIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIERJU0FCTEVEIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9ESVNBQkxFRF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBESVNBQkxFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RJU0FCTEVEX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfRElTQUJMRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJU0FCTEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRElTQUJMRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRElTQUJMRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0RJU0FCTEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRU5EX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VORF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOU0VUX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfRU5EX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFBBWUxPQUQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1BBWUxPQURfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUEFZTE9BRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1BBWUxPQURfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9QQVlMT0FEX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVlMT0FEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUEFZTE9BRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9QQVlMT0FEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9QQVlMT0FEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEFERFJFU1MgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0FERFJFU1NfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUkVTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX0FERFJFU1NfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTlNFVF9BRERSRVNTX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSRVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfQUREUkVTU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9BRERSRVNTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9BRERSRVNTX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQURZIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTlNFVF9SRUFEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JFQURZX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5TRVRfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5TRVRfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOU0VUX1JFQURZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgTUhSTUFUQ0ggZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX01IUk1BVENIX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBNSFJNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX01IUk1BVENIX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfTUhSTUFUQ0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1IUk1BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfTUhSTUFUQ0hfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfTUhSTUFUQ0hfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX01IUk1BVENIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlhSRUFEWV9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgUlhSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JYUkVBRFlfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9SWFJFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlhSRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SWFJFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SWFJFQURZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfVFhSRUFEWV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgVFhSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1RYUkVBRFlfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9UWFJFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfVFhSRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9UWFJFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9UWFJFQURZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkFURUJPT1NUIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SQVRFQk9PU1RfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJBVEVCT09TVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JBVEVCT09TVF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX1JBVEVCT09TVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkFURUJPT1NUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkFURUJPT1NUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JBVEVCT09TVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkFURUJPT1NUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0NBU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBU1RPUFBFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQVNUT1BQRURfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9DQ0FTVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FTVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FTVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0NBQlVTWSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBQlVTWV9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBQlVTWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQUJVU1lfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9DQ0FCVVNZX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FCVVNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBQlVTWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FCVVNZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FCVVNZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0NBSURMRSBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBSURMRV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBSURMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NDQUlETEVfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9DQ0FJRExFX1BvcykgLyohPCBCaXQgbWFzayBvZiBDQ0FJRExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ0NBSURMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FJRExFX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9DQ0FJRExFX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRURTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FRFNUT1BQRURfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVEU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VEU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0VEU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRURTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRURTVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VEU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRURTVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRURFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VERU5EX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBFREVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VERU5EX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfRURFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVERU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRURFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRURFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0VERU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRlJBTUVTVEFSVCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRlJBTUVTVEFSVF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUVTVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0ZSQU1FU1RBUlRfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9GUkFNRVNUQVJUX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRVNUQVJUIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRlJBTUVTVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9GUkFNRVNUQVJUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9GUkFNRVNUQVJUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ1JDRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ0VSUk9SX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ0VSUk9SX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQ1JDRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ0VSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ1JDRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ1JDRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ1JDT0sgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ09LX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNPSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ09LX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQ1JDT0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSQ09LIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ1JDT0tfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQ1JDT0tfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0NSQ09LX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQkNNQVRDSCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQkNNQVRDSF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQkNNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0JDTUFUQ0hfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9CQ01BVENIX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQ01BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQkNNQVRDSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9CQ01BVENIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9CQ01BVENIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSU1NJRU5EIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SU1NJRU5EX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJTU0lFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SU1NJRU5EX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfUlNTSUVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlNTSUVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JTU0lFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlNTSUVORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUlNTSUVORF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgREVWTUlTUyBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfREVWTUlTU19Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBERVZNSVNTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfREVWTUlTU19Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0RFVk1JU1NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVk1JU1MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ERVZNSVNTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1JU1NfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1JU1NfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERFVk1BVENIIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ERVZNQVRDSF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBERVZNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1BVENIX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfREVWTUFUQ0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFVk1BVENIIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfREVWTUFUQ0hfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfREVWTUFUQ0hfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RFVk1BVENIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBESVNBQkxFRCBldmVudCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRElTQUJMRURfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRElTQUJMRUQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ESVNBQkxFRF9Nc2sgKDB4MVVMIDw8IFJBRElPX0lOVEVOQ0xSX0RJU0FCTEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBESVNBQkxFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RJU0FCTEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0RJU0FCTEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9ESVNBQkxFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FTkRfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRU5EX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9FTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFBBWUxPQUQgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1BBWUxPQURfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUEFZTE9BRCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1BBWUxPQURfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9QQVlMT0FEX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQVlMT0FEIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUEFZTE9BRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9QQVlMT0FEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9QQVlMT0FEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBBRERSRVNTIGV2ZW50ICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9BRERSRVNTX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9BRERSRVNTX01zayAoMHgxVUwgPDwgUkFESU9fSU5URU5DTFJfQUREUkVTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX0FERFJFU1NfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQUREUkVTU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfQUREUkVTU19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFJBRElPX0lOVEVOQ0xSX1JFQURZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkVBRFlfTXNrICgweDFVTCA8PCBSQURJT19JTlRFTkNMUl9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19JTlRFTkNMUl9SRUFEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fSU5URU5DTFJfUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0NSQ1NUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDUkMgc3RhdHVzICovDQorDQorLyogQml0IDAgOiBDUkMgc3RhdHVzIG9mIHBhY2tldCByZWNlaXZlZCAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDU1RBVFVTX0NSQ1NUQVRVU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDUkNTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19DUkNTVEFUVVNfQ1JDU1RBVFVTX01zayAoMHgxVUwgPDwgUkFESU9fQ1JDU1RBVFVTX0NSQ1NUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDU1RBVFVTX0NSQ1NUQVRVU19DUkNFcnJvciAoMFVMKSAvKiE8IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBlcnJvciAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDU1RBVFVTX0NSQ1NUQVRVU19DUkNPayAoMVVMKSAvKiE8IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBvayAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19SWE1BVENIICovDQorLyogRGVzY3JpcHRpb246IFJlY2VpdmVkIGFkZHJlc3MgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBSZWNlaXZlZCBhZGRyZXNzICovDQorI2RlZmluZSBSQURJT19SWE1BVENIX1JYTUFUQ0hfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhNQVRDSCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYTUFUQ0hfUlhNQVRDSF9Nc2sgKDB4N1VMIDw8IFJBRElPX1JYTUFUQ0hfUlhNQVRDSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhNQVRDSCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUlhDUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogQ1JDIGZpZWxkIG9mIHByZXZpb3VzbHkgcmVjZWl2ZWQgcGFja2V0ICovDQorDQorLyogQml0cyAyMy4uMCA6IENSQyBmaWVsZCBvZiBwcmV2aW91c2x5IHJlY2VpdmVkIHBhY2tldCAqLw0KKyNkZWZpbmUgUkFESU9fUlhDUkNfUlhDUkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhDUkMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19SWENSQ19SWENSQ19Nc2sgKDB4RkZGRkZGVUwgPDwgUkFESU9fUlhDUkNfUlhDUkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYQ1JDIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19EQUkgKi8NCisvKiBEZXNjcmlwdGlvbjogRGV2aWNlIGFkZHJlc3MgbWF0Y2ggaW5kZXggKi8NCisNCisvKiBCaXRzIDIuLjAgOiBEZXZpY2UgYWRkcmVzcyBtYXRjaCBpbmRleCAqLw0KKyNkZWZpbmUgUkFESU9fREFJX0RBSV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBEQUkgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUlfREFJX01zayAoMHg3VUwgPDwgUkFESU9fREFJX0RBSV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREFJIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19QQUNLRVRQVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogUGFja2V0IHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUGFja2V0IHBvaW50ZXIgKi8NCisjZGVmaW5lIFJBRElPX1BBQ0tFVFBUUl9QQUNLRVRQVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUEFDS0VUUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUEFDS0VUUFRSX1BBQ0tFVFBUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBSQURJT19QQUNLRVRQVFJfUEFDS0VUUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQQUNLRVRQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0ZSRVFVRU5DWSAqLw0KKy8qIERlc2NyaXB0aW9uOiBGcmVxdWVuY3kgKi8NCisNCisvKiBCaXQgOCA6IENoYW5uZWwgbWFwIHNlbGVjdGlvbi4gKi8NCisjZGVmaW5lIFJBRElPX0ZSRVFVRU5DWV9NQVBfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgTUFQIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fRlJFUVVFTkNZX01BUF9Nc2sgKDB4MVVMIDw8IFJBRElPX0ZSRVFVRU5DWV9NQVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0ZSRVFVRU5DWV9NQVBfRGVmYXVsdCAoMFVMKSAvKiE8IENoYW5uZWwgbWFwIGJldHdlZW4gMjQwMCBNSFogLi4gMjUwMCBNSHogKi8NCisjZGVmaW5lIFJBRElPX0ZSRVFVRU5DWV9NQVBfTG93ICgxVUwpIC8qITwgQ2hhbm5lbCBtYXAgYmV0d2VlbiAyMzYwIE1IWiAuLiAyNDYwIE1IeiAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IFJhZGlvIGNoYW5uZWwgZnJlcXVlbmN5ICovDQorI2RlZmluZSBSQURJT19GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSRVFVRU5DWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTXNrICgweDdGVUwgPDwgUkFESU9fRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19UWFBPV0VSICovDQorLyogRGVzY3JpcHRpb246IE91dHB1dCBwb3dlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFJBRElPIG91dHB1dCBwb3dlci4gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFBPV0VSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX01zayAoMHhGRlVMIDw8IFJBRElPX1RYUE9XRVJfVFhQT1dFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl8wZEJtICgweDBVTCkgLyohPCAwIGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczJkQm0gKDB4MlVMKSAvKiE8ICsyIGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczNkQm0gKDB4M1VMKSAvKiE8ICszIGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczRkQm0gKDB4NFVMKSAvKiE8ICs0IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczVkQm0gKDB4NVVMKSAvKiE8ICs1IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczZkQm0gKDB4NlVMKSAvKiE8ICs2IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczdkQm0gKDB4N1VMKSAvKiE8ICs3IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczhkQm0gKDB4OFVMKSAvKiE8ICs4IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX1BvczlkQm0gKDB4OVVMKSAvKiE8ICs5IGRCbSAqLw0KKyNkZWZpbmUgUkFESU9fVFhQT1dFUl9UWFBPV0VSX05lZzMwZEJtICgweEQ4VUwpIC8qITwgRGVwcmVjYXRlZCBlbnVtZXJhdG9yIC0gIC00MCBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9OZWc0MGRCbSAoMHhEOFVMKSAvKiE8IC00MCBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9OZWcyMGRCbSAoMHhFQ1VMKSAvKiE8IC0yMCBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9OZWcxNmRCbSAoMHhGMFVMKSAvKiE8IC0xNiBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9OZWcxMmRCbSAoMHhGNFVMKSAvKiE8IC0xMiBkQm0gKi8NCisjZGVmaW5lIFJBRElPX1RYUE9XRVJfVFhQT1dFUl9OZWc4ZEJtICgweEY4VUwpIC8qITwgLTggZEJtICovDQorI2RlZmluZSBSQURJT19UWFBPV0VSX1RYUE9XRVJfTmVnNGRCbSAoMHhGQ1VMKSAvKiE8IC00IGRCbSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19NT0RFICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcmF0ZSBhbmQgbW9kdWxhdGlvbiAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IFJhZGlvIGRhdGEgcmF0ZSBhbmQgbW9kdWxhdGlvbiBzZXR0aW5nLiBUaGUgcmFkaW8gc3VwcG9ydHMgRnJlcXVlbmN5LXNoaWZ0IEtleWluZyAoRlNLKSBtb2R1bGF0aW9uLiAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfTXNrICgweEZVTCA8PCBSQURJT19NT0RFX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfTnJmXzFNYml0ICgwVUwpIC8qITwgMSBNYml0L3MgTm9yZGljIHByb3ByaWV0YXJ5IHJhZGlvIG1vZGUgKi8NCisjZGVmaW5lIFJBRElPX01PREVfTU9ERV9OcmZfMk1iaXQgKDFVTCkgLyohPCAyIE1iaXQvcyBOb3JkaWMgcHJvcHJpZXRhcnkgcmFkaW8gbW9kZSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX05yZl8yNTBLYml0ICgyVUwpIC8qITwgRGVwcmVjYXRlZCBlbnVtZXJhdG9yIC0gIDI1MCBrYml0L3MgTm9yZGljIHByb3ByaWV0YXJ5IHJhZGlvIG1vZGUgKi8NCisjZGVmaW5lIFJBRElPX01PREVfTU9ERV9CbGVfMU1iaXQgKDNVTCkgLyohPCAxIE1iaXQvcyBCbHVldG9vdGggTG93IEVuZXJneSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERV9NT0RFX0JsZV8yTWJpdCAoNFVMKSAvKiE8IDIgTWJpdC9zIEJsdWV0b290aCBMb3cgRW5lcmd5ICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfQmxlX0xSMTI1S2JpdCAoNVVMKSAvKiE8IExvbmcgcmFuZ2UgMTI1IGtiaXQvcyAoVFggT25seSAtIFJYIHN1cHBvcnRzIGJvdGgpICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfQmxlX0xSNTAwS2JpdCAoNlVMKSAvKiE8IExvbmcgcmFuZ2UgNTAwIGtiaXQvcyAoVFggT25seSAtIFJYIHN1cHBvcnRzIGJvdGgpICovDQorI2RlZmluZSBSQURJT19NT0RFX01PREVfSWVlZTgwMjE1NF8yNTBLYml0ICgxNVVMKSAvKiE8IElFRUUgODAyLjE1LjQtMjAwNiAyNTAga2JpdC9zICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1BDTkYwICovDQorLyogRGVzY3JpcHRpb246IFBhY2tldCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAgKi8NCisNCisvKiBCaXRzIDMwLi4yOSA6IExlbmd0aCBvZiBURVJNIGZpZWxkIGluIExvbmcgUmFuZ2Ugb3BlcmF0aW9uICovDQorI2RlZmluZSBSQURJT19QQ05GMF9URVJNTEVOX1BvcyAoMjlVTCkgLyohPCBQb3NpdGlvbiBvZiBURVJNTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfVEVSTUxFTl9Nc2sgKDB4M1VMIDw8IFJBRElPX1BDTkYwX1RFUk1MRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRFUk1MRU4gZmllbGQuICovDQorDQorLyogQml0IDI2IDogSW5kaWNhdGVzIGlmIExFTkdUSCBmaWVsZCBjb250YWlucyBDUkMgb3Igbm90ICovDQorI2RlZmluZSBSQURJT19QQ05GMF9DUkNJTkNfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENSQ0lOQyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0NSQ0lOQ19Nc2sgKDB4MVVMIDw8IFJBRElPX1BDTkYwX0NSQ0lOQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1JDSU5DIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfQ1JDSU5DX0V4Y2x1ZGUgKDBVTCkgLyohPCBMRU5HVEggZG9lcyBub3QgY29udGFpbiBDUkMgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0NSQ0lOQ19JbmNsdWRlICgxVUwpIC8qITwgTEVOR1RIIGluY2x1ZGVzIENSQyAqLw0KKw0KKy8qIEJpdHMgMjUuLjI0IDogTGVuZ3RoIG9mIHByZWFtYmxlIG9uIGFpci4gRGVjaXNpb24gcG9pbnQ6IFRBU0tTX1NUQVJUIHRhc2sgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1BMRU5fUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9QTEVOX01zayAoMHgzVUwgPDwgUkFESU9fUENORjBfUExFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1BMRU5fOGJpdCAoMFVMKSAvKiE8IDgtYml0IHByZWFtYmxlICovDQorI2RlZmluZSBSQURJT19QQ05GMF9QTEVOXzE2Yml0ICgxVUwpIC8qITwgMTYtYml0IHByZWFtYmxlICovDQorI2RlZmluZSBSQURJT19QQ05GMF9QTEVOXzMyYml0WmVybyAoMlVMKSAvKiE8IDMyLWJpdCB6ZXJvIHByZWFtYmxlIC0gdXNlZCBmb3IgSUVFRSA4MDIuMTUuNCAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUExFTl9Mb25nUmFuZ2UgKDNVTCkgLyohPCBQcmVhbWJsZSAtIHVzZWQgZm9yIEJUTEUgTG9uZyBSYW5nZSAqLw0KKw0KKy8qIEJpdHMgMjMuLjIyIDogTGVuZ3RoIG9mIENvZGUgSW5kaWNhdG9yIC0gTG9uZyBSYW5nZSAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfQ0lMRU5fUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENJTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfQ0lMRU5fTXNrICgweDNVTCA8PCBSQURJT19QQ05GMF9DSUxFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0lMRU4gZmllbGQuICovDQorDQorLyogQml0IDIwIDogSW5jbHVkZSBvciBleGNsdWRlIFMxIGZpZWxkIGluIFJBTSAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzFJTkNMX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBTMUlOQ0wgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9TMUlOQ0xfTXNrICgweDFVTCA8PCBSQURJT19QQ05GMF9TMUlOQ0xfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFMxSU5DTCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX1MxSU5DTF9BdXRvbWF0aWMgKDBVTCkgLyohPCBJbmNsdWRlIFMxIGZpZWxkIGluIFJBTSBvbmx5IGlmIFMxTEVOICZndDsgMCAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzFJTkNMX0luY2x1ZGUgKDFVTCkgLyohPCBBbHdheXMgaW5jbHVkZSBTMSBmaWVsZCBpbiBSQU0gaW5kZXBlbmRlbnQgb2YgUzFMRU4gKi8NCisNCisvKiBCaXRzIDE5Li4xNiA6IExlbmd0aCBvbiBhaXIgb2YgUzEgZmllbGQgaW4gbnVtYmVyIG9mIGJpdHMuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9TMUxFTl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgUzFMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9TMUxFTl9Nc2sgKDB4RlVMIDw8IFJBRElPX1BDTkYwX1MxTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMUxFTiBmaWVsZC4gKi8NCisNCisvKiBCaXQgOCA6IExlbmd0aCBvbiBhaXIgb2YgUzAgZmllbGQgaW4gbnVtYmVyIG9mIGJ5dGVzLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfUzBMRU5fUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgUzBMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMF9TMExFTl9Nc2sgKDB4MVVMIDw8IFJBRElPX1BDTkYwX1MwTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBTMExFTiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDMuLjAgOiBMZW5ndGggb24gYWlyIG9mIExFTkdUSCBmaWVsZCBpbiBudW1iZXIgb2YgYml0cy4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYwX0xGTEVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIExGTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjBfTEZMRU5fTXNrICgweEZVTCA8PCBSQURJT19QQ05GMF9MRkxFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEZMRU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1BDTkYxICovDQorLyogRGVzY3JpcHRpb246IFBhY2tldCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgKi8NCisNCisvKiBCaXQgMjUgOiBFbmFibGUgb3IgZGlzYWJsZSBwYWNrZXQgd2hpdGVuaW5nICovDQorI2RlZmluZSBSQURJT19QQ05GMV9XSElURUVOX1BvcyAoMjVVTCkgLyohPCBQb3NpdGlvbiBvZiBXSElURUVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfV0hJVEVFTl9Nc2sgKDB4MVVMIDw8IFJBRElPX1BDTkYxX1dISVRFRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdISVRFRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMV9XSElURUVOX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfV0hJVEVFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI0IDogT24gYWlyIGVuZGlhbm5lc3Mgb2YgcGFja2V0LCB0aGlzIGFwcGxpZXMgdG8gdGhlIFMwLCBMRU5HVEgsIFMxIGFuZCB0aGUgUEFZTE9BRCBmaWVsZHMuICovDQorI2RlZmluZSBSQURJT19QQ05GMV9FTkRJQU5fUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORElBTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX0VORElBTl9Nc2sgKDB4MVVMIDw8IFJBRElPX1BDTkYxX0VORElBTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ESUFOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfRU5ESUFOX0xpdHRsZSAoMFVMKSAvKiE8IExlYXN0IFNpZ25pZmljYW50IGJpdCBvbiBhaXIgZmlyc3QgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX0VORElBTl9CaWcgKDFVTCkgLyohPCBNb3N0IHNpZ25pZmljYW50IGJpdCBvbiBhaXIgZmlyc3QgKi8NCisNCisvKiBCaXRzIDE4Li4xNiA6IEJhc2UgYWRkcmVzcyBsZW5ndGggaW4gbnVtYmVyIG9mIGJ5dGVzICovDQorI2RlZmluZSBSQURJT19QQ05GMV9CQUxFTl9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQkFMRU4gZmllbGQuICovDQorI2RlZmluZSBSQURJT19QQ05GMV9CQUxFTl9Nc2sgKDB4N1VMIDw8IFJBRElPX1BDTkYxX0JBTEVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQUxFTiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogU3RhdGljIGxlbmd0aCBpbiBudW1iZXIgb2YgYnl0ZXMgKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX1NUQVRMRU5fUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgU1RBVExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX1NUQVRMRU5fTXNrICgweEZGVUwgPDwgUkFESU9fUENORjFfU1RBVExFTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBVExFTiBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBNYXhpbXVtIGxlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZC4gSWYgdGhlIHBhY2tldCBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIE1BWExFTiwgdGhlIHJhZGlvIHdpbGwgdHJ1bmNhdGUgdGhlIHBheWxvYWQgdG8gTUFYTEVOLiAqLw0KKyNkZWZpbmUgUkFESU9fUENORjFfTUFYTEVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BDTkYxX01BWExFTl9Nc2sgKDB4RkZVTCA8PCBSQURJT19QQ05GMV9NQVhMRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWExFTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fQkFTRTAgKi8NCisvKiBEZXNjcmlwdGlvbjogQmFzZSBhZGRyZXNzIDAgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQmFzZSBhZGRyZXNzIDAgKi8NCisjZGVmaW5lIFJBRElPX0JBU0UwX0JBU0UwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJBU0UwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQkFTRTBfQkFTRTBfTXNrICgweEZGRkZGRkZGVUwgPDwgUkFESU9fQkFTRTBfQkFTRTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJBU0UwIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19CQVNFMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBCYXNlIGFkZHJlc3MgMSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBCYXNlIGFkZHJlc3MgMSAqLw0KKyNkZWZpbmUgUkFESU9fQkFTRTFfQkFTRTFfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQkFTRTEgZmllbGQuICovDQorI2RlZmluZSBSQURJT19CQVNFMV9CQVNFMV9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBSQURJT19CQVNFMV9CQVNFMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkFTRTEgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX1BSRUZJWDAgKi8NCisvKiBEZXNjcmlwdGlvbjogUHJlZml4ZXMgYnl0ZXMgZm9yIGxvZ2ljYWwgYWRkcmVzc2VzIDAtMyAqLw0KKw0KKy8qIEJpdHMgMzEuLjI0IDogQWRkcmVzcyBwcmVmaXggMy4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDBfQVAzX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBBUDMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgwX0FQM19Nc2sgKDB4RkZVTCA8PCBSQURJT19QUkVGSVgwX0FQM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVAzIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMjMuLjE2IDogQWRkcmVzcyBwcmVmaXggMi4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDBfQVAyX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBBUDIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgwX0FQMl9Nc2sgKDB4RkZVTCA8PCBSQURJT19QUkVGSVgwX0FQMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVAyIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgMTUuLjggOiBBZGRyZXNzIHByZWZpeCAxLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMF9BUDFfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQVAxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMF9BUDFfTXNrICgweEZGVUwgPDwgUkFESU9fUFJFRklYMF9BUDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFQMSBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBBZGRyZXNzIHByZWZpeCAwLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMF9BUDBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQVAwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMF9BUDBfTXNrICgweEZGVUwgPDwgUkFESU9fUFJFRklYMF9BUDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFQMCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUFJFRklYMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQcmVmaXhlcyBieXRlcyBmb3IgbG9naWNhbCBhZGRyZXNzZXMgNC03ICovDQorDQorLyogQml0cyAzMS4uMjQgOiBBZGRyZXNzIHByZWZpeCA3LiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMV9BUDdfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFQNyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDFfQVA3X01zayAoMHhGRlVMIDw8IFJBRElPX1BSRUZJWDFfQVA3X1BvcykgLyohPCBCaXQgbWFzayBvZiBBUDcgZmllbGQuICovDQorDQorLyogQml0cyAyMy4uMTYgOiBBZGRyZXNzIHByZWZpeCA2LiAqLw0KKyNkZWZpbmUgUkFESU9fUFJFRklYMV9BUDZfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEFQNiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BSRUZJWDFfQVA2X01zayAoMHhGRlVMIDw8IFJBRElPX1BSRUZJWDFfQVA2X1BvcykgLyohPCBCaXQgbWFzayBvZiBBUDYgZmllbGQuICovDQorDQorLyogQml0cyAxNS4uOCA6IEFkZHJlc3MgcHJlZml4IDUuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgxX0FQNV9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBBUDUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgxX0FQNV9Nc2sgKDB4RkZVTCA8PCBSQURJT19QUkVGSVgxX0FQNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVA1IGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IEFkZHJlc3MgcHJlZml4IDQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgxX0FQNF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBUDQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QUkVGSVgxX0FQNF9Nc2sgKDB4RkZVTCA8PCBSQURJT19QUkVGSVgxX0FQNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQVA0IGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19UWEFERFJFU1MgKi8NCisvKiBEZXNjcmlwdGlvbjogVHJhbnNtaXQgYWRkcmVzcyBzZWxlY3QgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBUcmFuc21pdCBhZGRyZXNzIHNlbGVjdCAqLw0KKyNkZWZpbmUgUkFESU9fVFhBRERSRVNTX1RYQUREUkVTU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBSQURJT19UWEFERFJFU1NfVFhBRERSRVNTX01zayAoMHg3VUwgPDwgUkFESU9fVFhBRERSRVNTX1RYQUREUkVTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhBRERSRVNTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19SWEFERFJFU1NFUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZWNlaXZlIGFkZHJlc3Mgc2VsZWN0ICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDcuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSNyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI3X01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSN19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDYuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSNiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI2X01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDUuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSNSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI1X01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDQuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSNCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFI0X01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSNF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDMuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIzX01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDIuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIyX01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDEuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIxX01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSByZWNlcHRpb24gb24gbG9naWNhbCBhZGRyZXNzIDAuICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBRERSMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1JYQUREUkVTU0VTX0FERFIwX01zayAoMHgxVUwgPDwgUkFESU9fUlhBRERSRVNTRVNfQUREUjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFERFIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlhBRERSRVNTRVNfQUREUjBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSQURJT19SWEFERFJFU1NFU19BRERSMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0NSQ0NORiAqLw0KKy8qIERlc2NyaXB0aW9uOiBDUkMgY29uZmlndXJhdGlvbiAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IEluY2x1ZGUgb3IgZXhjbHVkZSBwYWNrZXQgYWRkcmVzcyBmaWVsZCBvdXQgb2YgQ1JDIGNhbGN1bGF0aW9uLiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBBRERSX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNLSVBBRERSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBBRERSX01zayAoMHgzVUwgPDwgUkFESU9fQ1JDQ05GX1NLSVBBRERSX1BvcykgLyohPCBCaXQgbWFzayBvZiBTS0lQQUREUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQQUREUl9JbmNsdWRlICgwVUwpIC8qITwgQ1JDIGNhbGN1bGF0aW9uIGluY2x1ZGVzIGFkZHJlc3MgZmllbGQgKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9TS0lQQUREUl9Ta2lwICgxVUwpIC8qITwgQ1JDIGNhbGN1bGF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYWRkcmVzcyBmaWVsZC4gVGhlIENSQyBjYWxjdWxhdGlvbiB3aWxsIHN0YXJ0IGF0IHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX1NLSVBBRERSX0llZWU4MDIxNTQgKDJVTCkgLyohPCBDUkMgY2FsY3VsYXRpb24gYXMgcGVyIDgwMi4xNS40IHN0YW5kYXJkLiBTdGFydGluZyBhdCBmaXJzdCBieXRlIGFmdGVyIGxlbmd0aCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBDUkMgbGVuZ3RoIGluIG51bWJlciBvZiBieXRlcy4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9MRU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTEVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX0xFTl9Nc2sgKDB4M1VMIDw8IFJBRElPX0NSQ0NORl9MRU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExFTiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9MRU5fRGlzYWJsZWQgKDBVTCkgLyohPCBDUkMgbGVuZ3RoIGlzIHplcm8gYW5kIENSQyBjYWxjdWxhdGlvbiBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX0xFTl9PbmUgKDFVTCkgLyohPCBDUkMgbGVuZ3RoIGlzIG9uZSBieXRlIGFuZCBDUkMgY2FsY3VsYXRpb24gaXMgZW5hYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fQ1JDQ05GX0xFTl9Ud28gKDJVTCkgLyohPCBDUkMgbGVuZ3RoIGlzIHR3byBieXRlcyBhbmQgQ1JDIGNhbGN1bGF0aW9uIGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0NSQ0NORl9MRU5fVGhyZWUgKDNVTCkgLyohPCBDUkMgbGVuZ3RoIGlzIHRocmVlIGJ5dGVzIGFuZCBDUkMgY2FsY3VsYXRpb24gaXMgZW5hYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19DUkNQT0xZICovDQorLyogRGVzY3JpcHRpb246IENSQyBwb2x5bm9taWFsICovDQorDQorLyogQml0cyAyMy4uMCA6IENSQyBwb2x5bm9taWFsICovDQorI2RlZmluZSBSQURJT19DUkNQT0xZX0NSQ1BPTFlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDUE9MWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ1BPTFlfQ1JDUE9MWV9Nc2sgKDB4RkZGRkZGVUwgPDwgUkFESU9fQ1JDUE9MWV9DUkNQT0xZX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUkNQT0xZIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19DUkNJTklUICovDQorLyogRGVzY3JpcHRpb246IENSQyBpbml0aWFsIHZhbHVlICovDQorDQorLyogQml0cyAyMy4uMCA6IENSQyBpbml0aWFsIHZhbHVlICovDQorI2RlZmluZSBSQURJT19DUkNJTklUX0NSQ0lOSVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JDSU5JVCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NSQ0lOSVRfQ1JDSU5JVF9Nc2sgKDB4RkZGRkZGVUwgPDwgUkFESU9fQ1JDSU5JVF9DUkNJTklUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUkNJTklUIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19USUZTICovDQorLyogRGVzY3JpcHRpb246IEludGVyIEZyYW1lIFNwYWNpbmcgaW4gdXMgKi8NCisNCisvKiBCaXRzIDkuLjAgOiBJbnRlciBGcmFtZSBTcGFjaW5nIGluIHVzICovDQorI2RlZmluZSBSQURJT19USUZTX1RJRlNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElGUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1RJRlNfVElGU19Nc2sgKDB4M0ZGVUwgPDwgUkFESU9fVElGU19USUZTX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSUZTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19SU1NJU0FNUExFICovDQorLyogRGVzY3JpcHRpb246IFJTU0kgc2FtcGxlICovDQorDQorLyogQml0cyA2Li4wIDogUlNTSSBzYW1wbGUgKi8NCisjZGVmaW5lIFJBRElPX1JTU0lTQU1QTEVfUlNTSVNBTVBMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSU1NJU0FNUExFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fUlNTSVNBTVBMRV9SU1NJU0FNUExFX01zayAoMHg3RlVMIDw8IFJBRElPX1JTU0lTQU1QTEVfUlNTSVNBTVBMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlNTSVNBTVBMRSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fU1RBVEUgKi8NCisvKiBEZXNjcmlwdGlvbjogQ3VycmVudCByYWRpbyBzdGF0ZSAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEN1cnJlbnQgcmFkaW8gc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfTXNrICgweEZVTCA8PCBSQURJT19TVEFURV9TVEFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBVEUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TVEFURV9TVEFURV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBEaXNhYmxlZCBzdGF0ZSAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfUnhSdSAoMVVMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBSWFJVIHN0YXRlICovDQorI2RlZmluZSBSQURJT19TVEFURV9TVEFURV9SeElkbGUgKDJVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgUlhJRExFIHN0YXRlICovDQorI2RlZmluZSBSQURJT19TVEFURV9TVEFURV9SeCAoM1VMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBSWCBzdGF0ZSAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfUnhEaXNhYmxlICg0VUwpIC8qITwgUkFESU8gaXMgaW4gdGhlIFJYRElTQUJMRUQgc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1R4UnUgKDlVTCkgLyohPCBSQURJTyBpcyBpbiB0aGUgVFhSVSBzdGF0ZSAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfVHhJZGxlICgxMFVMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBUWElETEUgc3RhdGUgKi8NCisjZGVmaW5lIFJBRElPX1NUQVRFX1NUQVRFX1R4ICgxMVVMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBUWCBzdGF0ZSAqLw0KKyNkZWZpbmUgUkFESU9fU1RBVEVfU1RBVEVfVHhEaXNhYmxlICgxMlVMKSAvKiE8IFJBRElPIGlzIGluIHRoZSBUWERJU0FCTEVEIHN0YXRlICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0RBVEFXSElURUlWICovDQorLyogRGVzY3JpcHRpb246IERhdGEgd2hpdGVuaW5nIGluaXRpYWwgdmFsdWUgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBEYXRhIHdoaXRlbmluZyBpbml0aWFsIHZhbHVlLiBCaXQgNiBpcyBoYXJkLXdpcmVkIHRvICcxJywgd3JpdGluZyAnMCcgdG8gaXQgaGFzIG5vIGVmZmVjdCwgYW5kIGl0IHdpbGwgYWx3YXlzIGJlIHJlYWQgYmFjayBhbmQgdXNlZCBieSB0aGUgZGV2aWNlIGFzICcxJy4gKi8NCisjZGVmaW5lIFJBRElPX0RBVEFXSElURUlWX0RBVEFXSElURUlWX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERBVEFXSElURUlWIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFUQVdISVRFSVZfREFUQVdISVRFSVZfTXNrICgweDdGVUwgPDwgUkFESU9fREFUQVdISVRFSVZfREFUQVdISVRFSVZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERBVEFXSElURUlWIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19CQ0MgKi8NCisvKiBEZXNjcmlwdGlvbjogQml0IGNvdW50ZXIgY29tcGFyZSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBCaXQgY291bnRlciBjb21wYXJlICovDQorI2RlZmluZSBSQURJT19CQ0NfQkNDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0JDQ19CQ0NfTXNrICgweEZGRkZGRkZGVUwgPDwgUkFESU9fQkNDX0JDQ19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkNDIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19EQUIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIERldmljZSBhZGRyZXNzIGJhc2Ugc2VnbWVudCAwICovDQorDQorLyogQml0cyAzMS4uMCA6IERldmljZSBhZGRyZXNzIGJhc2Ugc2VnbWVudCAwICovDQorI2RlZmluZSBSQURJT19EQUJfREFCX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERBQiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQl9EQUJfTXNrICgweEZGRkZGRkZGVUwgPDwgUkFESU9fREFCX0RBQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgREFCIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19EQVAgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIERldmljZSBhZGRyZXNzIHByZWZpeCAwICovDQorDQorLyogQml0cyAxNS4uMCA6IERldmljZSBhZGRyZXNzIHByZWZpeCAwICovDQorI2RlZmluZSBSQURJT19EQVBfREFQX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERBUCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBUF9EQVBfTXNrICgweEZGRkZVTCA8PCBSQURJT19EQVBfREFQX1BvcykgLyohPCBCaXQgbWFzayBvZiBEQVAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX0RBQ05GICovDQorLyogRGVzY3JpcHRpb246IERldmljZSBhZGRyZXNzIG1hdGNoIGNvbmZpZ3VyYXRpb24gKi8NCisNCisvKiBCaXQgMTUgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgNyAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ3X1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDcgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDdfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQURENyBmaWVsZC4gKi8NCisNCisvKiBCaXQgMTQgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgNiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ2X1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDYgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDZfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQURENiBmaWVsZC4gKi8NCisNCisvKiBCaXQgMTMgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgNSAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ1X1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDVfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQURENSBmaWVsZC4gKi8NCisNCisvKiBCaXQgMTIgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgNCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQ0X1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDRfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQURENCBmaWVsZC4gKi8NCisNCisvKiBCaXQgMTEgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgMyAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQzX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDMgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDNfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQUREMyBmaWVsZC4gKi8NCisNCisvKiBCaXQgMTAgOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgMiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQyX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEFERDIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDJfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9UWEFERDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYQUREMiBmaWVsZC4gKi8NCisNCisvKiBCaXQgOSA6IFR4QWRkIGZvciBkZXZpY2UgYWRkcmVzcyAxICovDQorI2RlZmluZSBSQURJT19EQUNORl9UWEFERDFfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgVFhBREQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQxX01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfVFhBREQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEFERDEgZmllbGQuICovDQorDQorLyogQml0IDggOiBUeEFkZCBmb3IgZGV2aWNlIGFkZHJlc3MgMCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfVFhBREQwX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYQUREMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX1RYQUREMF9Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX1RYQUREMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhBREQwIGZpZWxkLiAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgZGV2aWNlIGFkZHJlc3MgbWF0Y2hpbmcgdXNpbmcgZGV2aWNlIGFkZHJlc3MgNyAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkE3IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BN19Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX0VOQTdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQTcgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE3X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBCaXQgNiA6IEVuYWJsZSBvciBkaXNhYmxlIGRldmljZSBhZGRyZXNzIG1hdGNoaW5nIHVzaW5nIGRldmljZSBhZGRyZXNzIDYgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5BNiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTZfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9FTkE2X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkE2IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE2X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBkZXZpY2UgYWRkcmVzcyBtYXRjaGluZyB1c2luZyBkZXZpY2UgYWRkcmVzcyA1ICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQTUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE1X01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfRU5BNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BNSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgZGV2aWNlIGFkZHJlc3MgbWF0Y2hpbmcgdXNpbmcgZGV2aWNlIGFkZHJlc3MgNCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BNF9Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX0VOQTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQTQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkE0X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIGRldmljZSBhZGRyZXNzIG1hdGNoaW5nIHVzaW5nIGRldmljZSBhZGRyZXNzIDMgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTNfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9FTkEzX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkEzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BM19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEzX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBkZXZpY2UgYWRkcmVzcyBtYXRjaGluZyB1c2luZyBkZXZpY2UgYWRkcmVzcyAyICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQTIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEyX01zayAoMHgxVUwgPDwgUkFESU9fREFDTkZfRU5BMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgZGV2aWNlIGFkZHJlc3MgbWF0Y2hpbmcgdXNpbmcgZGV2aWNlIGFkZHJlc3MgMSAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkExIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMV9Nc2sgKDB4MVVMIDw8IFJBRElPX0RBQ05GX0VOQTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQTEgZmllbGQuICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkExX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZWQgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGRldmljZSBhZGRyZXNzIG1hdGNoaW5nIHVzaW5nIGRldmljZSBhZGRyZXNzIDAgKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0RBQ05GX0VOQTBfTXNrICgweDFVTCA8PCBSQURJT19EQUNORl9FTkEwX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkEwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fREFDTkZfRU5BMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSQURJT19EQUNORl9FTkEwX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogUmVnaXN0ZXI6IFJBRElPX01PREVDTkYwICovDQorLyogRGVzY3JpcHRpb246IFJhZGlvIG1vZGUgY29uZmlndXJhdGlvbiByZWdpc3RlciAwICovDQorDQorLyogQml0cyA5Li44IDogRGVmYXVsdCBUWCB2YWx1ZSAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERUNORjBfRFRYX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIERUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX01PREVDTkYwX0RUWF9Nc2sgKDB4M1VMIDw8IFJBRElPX01PREVDTkYwX0RUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERUNORjBfRFRYX0IxICgwVUwpIC8qITwgVHJhbnNtaXQgJzEnICovDQorI2RlZmluZSBSQURJT19NT0RFQ05GMF9EVFhfQjAgKDFVTCkgLyohPCBUcmFuc21pdCAnMCcgKi8NCisjZGVmaW5lIFJBRElPX01PREVDTkYwX0RUWF9DZW50ZXIgKDJVTCkgLyohPCBUcmFuc21pdCBjZW50ZXIgZnJlcXVlbmN5ICovDQorDQorLyogQml0IDAgOiBSYWRpbyByYW1wLXVwIHRpbWUgKi8NCisjZGVmaW5lIFJBRElPX01PREVDTkYwX1JVX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJVIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fTU9ERUNORjBfUlVfTXNrICgweDFVTCA8PCBSQURJT19NT0RFQ05GMF9SVV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlUgZmllbGQuICovDQorI2RlZmluZSBSQURJT19NT0RFQ05GMF9SVV9EZWZhdWx0ICgwVUwpIC8qITwgRGVmYXVsdCByYW1wLXVwIHRpbWUgKHRSWEVOKSwgY29tcGF0aWJsZSB3aXRoIGZpcm13YXJlIHdyaXR0ZW4gZm9yIG5SRjUxICovDQorI2RlZmluZSBSQURJT19NT0RFQ05GMF9SVV9GYXN0ICgxVUwpIC8qITwgRmFzdCByYW1wLXVwICh0UlhFTixGQVNUKSwgc2VlIGVsZWN0cmljYWwgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSQURJT19TRkQgKi8NCisvKiBEZXNjcmlwdGlvbjogSUVFRSA4MDIuMTUuNCBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBJRUVFIDgwMi4xNS40IFN0YXJ0IG9mIEZyYW1lIERlbGltaXRlciAqLw0KKyNkZWZpbmUgUkFESU9fU0ZEX1NGRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTRkQgZmllbGQuICovDQorI2RlZmluZSBSQURJT19TRkRfU0ZEX01zayAoMHhGRlVMIDw8IFJBRElPX1NGRF9TRkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNGRCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fRURDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogSUVFRSA4MDIuMTUuNCBFbmVyZ3kgRGV0ZWN0IExvb3AgQ291bnQgKi8NCisNCisvKiBCaXRzIDIwLi4wIDogSUVFRSA4MDIuMTUuNCBFbmVyZ3kgRGV0ZWN0IExvb3AgQ291bnQgKi8NCisjZGVmaW5lIFJBRElPX0VEQ05UX0VEQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVEQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fRURDTlRfRURDTlRfTXNrICgweDFGRkZGRlVMIDw8IFJBRElPX0VEQ05UX0VEQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBFRENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fRURTQU1QTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogSUVFRSA4MDIuMTUuNCBFbmVyZ3kgRGV0ZWN0IExldmVsICovDQorDQorLyogQml0cyA3Li4wIDogSUVFRSA4MDIuMTUuNCBFbmVyZ3kgRGV0ZWN0IExldmVsICovDQorI2RlZmluZSBSQURJT19FRFNBTVBMRV9FRExWTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFRExWTCBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0VEU0FNUExFX0VETFZMX01zayAoMHhGRlVMIDw8IFJBRElPX0VEU0FNUExFX0VETFZMX1BvcykgLyohPCBCaXQgbWFzayBvZiBFRExWTCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fQ0NBQ1RSTCAqLw0KKy8qIERlc2NyaXB0aW9uOiBJRUVFIDgwMi4xNS40IENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCBDb250cm9sICovDQorDQorLyogQml0cyAzMS4uMjQgOiBMaW1pdCBmb3Igb2NjdXJhbmNlcyBhYm92ZSBDQ0FDT1JSVEhSRVMuIFdoZW4gbm90IGVxdWFsIHRvIHplcm8gdGhlIGNvcnJvbGF0b3IgYmFzZWQgc2lnbmFsIGRldGVjdCBpcyBlbmFibGVkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FDT1JSQ05UX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBDQ0FDT1JSQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FDT1JSQ05UX01zayAoMHhGRlVMIDw8IFJBRElPX0NDQUNUUkxfQ0NBQ09SUkNOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBQ09SUkNOVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDIzLi4xNiA6IENDQSBDb3JyZWxhdG9yIEJ1c3kgVGhyZXNob2xkLiBPbmx5IHJlbGV2YW50IHRvIENhcnJpZXJNb2RlLCBDYXJyaWVyQW5kRWRNb2RlIGFuZCBDYXJyaWVyT3JFZE1vZGUuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQUNPUlJUSFJFU19Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBQ09SUlRIUkVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgUkFESU9fQ0NBQ1RSTF9DQ0FDT1JSVEhSRVNfTXNrICgweEZGVUwgPDwgUkFESU9fQ0NBQ1RSTF9DQ0FDT1JSVEhSRVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQUNPUlJUSFJFUyBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDE1Li44IDogQ0NBIEVuZXJneSBCdXN5IFRocmVzaG9sZC4gVXNlZCBpbiBhbGwgdGhlIENDQSBtb2RlcyBleGNlcHQgQ2Fycmllck1vZGUuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQUVEVEhSRVNfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBRURUSFJFUyBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBRURUSFJFU19Nc2sgKDB4RkZVTCA8PCBSQURJT19DQ0FDVFJMX0NDQUVEVEhSRVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDQUVEVEhSRVMgZmllbGQuICovDQorDQorLyogQml0cyAyLi4wIDogQ0NBIE1vZGUgT2YgT3BlcmF0aW9uICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0NBTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9Nc2sgKDB4N1VMIDw8IFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0NBTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9FZE1vZGUgKDBVTCkgLyohPCBFbmVyZ3kgQWJvdmUgVGhyZXNob2xkICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfQ2Fycmllck1vZGUgKDFVTCkgLyohPCBDYXJyaWVyIFNlZW4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9DYXJyaWVyQW5kRWRNb2RlICgyVUwpIC8qITwgRW5lcmd5IEFib3ZlIFRocmVzaG9sZCBBTkQgQ2FycmllciBTZWVuICovDQorI2RlZmluZSBSQURJT19DQ0FDVFJMX0NDQU1PREVfQ2Fycmllck9yRWRNb2RlICgzVUwpIC8qITwgRW5lcmd5IEFib3ZlIFRocmVzaG9sZCBPUiBDYXJyaWVyIFNlZW4gKi8NCisjZGVmaW5lIFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9FZE1vZGVUZXN0MSAoNFVMKSAvKiE8IEVuZXJneSBBYm92ZSBUaHJlc2hvbGQgdGVzdCBtb2RlIHRoYXQgd2lsbCBhYm9ydCB3aGVuIGZpcnN0IEVEIG1lYXN1cmVtZW50IG92ZXIgdGhyZXNob2xkIGlzIHNlZW4uIE5vIGF2ZXJhZ2luZy4gKi8NCisNCisvKiBSZWdpc3RlcjogUkFESU9fUE9XRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogUGVyaXBoZXJhbCBwb3dlciBjb250cm9sICovDQorDQorLyogQml0IDAgOiBQZXJpcGhlcmFsIHBvd2VyIGNvbnRyb2wuIFRoZSBwZXJpcGhlcmFsIGFuZCBpdHMgcmVnaXN0ZXJzIHdpbGwgYmUgcmVzZXQgdG8gaXRzIGluaXRpYWwgc3RhdGUgYnkgc3dpdGNoaW5nIHRoZSBwZXJpcGhlcmFsIG9mZiBhbmQgdGhlbiBiYWNrIG9uIGFnYWluLiAqLw0KKyNkZWZpbmUgUkFESU9fUE9XRVJfUE9XRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUE9XRVIgZmllbGQuICovDQorI2RlZmluZSBSQURJT19QT1dFUl9QT1dFUl9Nc2sgKDB4MVVMIDw8IFJBRElPX1BPV0VSX1BPV0VSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1dFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJBRElPX1BPV0VSX1BPV0VSX0Rpc2FibGVkICgwVUwpIC8qITwgUGVyaXBoZXJhbCBpcyBwb3dlcmVkIG9mZiAqLw0KKyNkZWZpbmUgUkFESU9fUE9XRVJfUE9XRVJfRW5hYmxlZCAoMVVMKSAvKiE8IFBlcmlwaGVyYWwgaXMgcG93ZXJlZCBvbiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFJORyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSTkdfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDAgOiBTaG9ydGN1dCBiZXR3ZWVuIFZBTFJEWSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBSTkdfU0hPUlRTX1ZBTFJEWV9TVE9QX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZBTFJEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX1NIT1JUU19WQUxSRFlfU1RPUF9Nc2sgKDB4MVVMIDw8IFJOR19TSE9SVFNfVkFMUkRZX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZBTFJEWV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX1NIT1JUU19WQUxSRFlfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFJOR19TSE9SVFNfVkFMUkRZX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSTkdfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFZBTFJEWSBldmVudCAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOU0VUX1ZBTFJEWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBWQUxSRFkgZmllbGQuICovDQorI2RlZmluZSBSTkdfSU5URU5TRVRfVkFMUkRZX01zayAoMHgxVUwgPDwgUk5HX0lOVEVOU0VUX1ZBTFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVkFMUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX0lOVEVOU0VUX1ZBTFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSTkdfSU5URU5TRVRfVkFMUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSTkdfSU5URU5TRVRfVkFMUkRZX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSTkdfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVkFMUkRZIGV2ZW50ICovDQorI2RlZmluZSBSTkdfSU5URU5DTFJfVkFMUkRZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZBTFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFJOR19JTlRFTkNMUl9WQUxSRFlfTXNrICgweDFVTCA8PCBSTkdfSU5URU5DTFJfVkFMUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBWQUxSRFkgZmllbGQuICovDQorI2RlZmluZSBSTkdfSU5URU5DTFJfVkFMUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJOR19JTlRFTkNMUl9WQUxSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJOR19JTlRFTkNMUl9WQUxSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJOR19DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogQmlhcyBjb3JyZWN0aW9uICovDQorI2RlZmluZSBSTkdfQ09ORklHX0RFUkNFTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBERVJDRU4gZmllbGQuICovDQorI2RlZmluZSBSTkdfQ09ORklHX0RFUkNFTl9Nc2sgKDB4MVVMIDw8IFJOR19DT05GSUdfREVSQ0VOX1BvcykgLyohPCBCaXQgbWFzayBvZiBERVJDRU4gZmllbGQuICovDQorI2RlZmluZSBSTkdfQ09ORklHX0RFUkNFTl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBSTkdfQ09ORklHX0RFUkNFTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBSTkdfVkFMVUUgKi8NCisvKiBEZXNjcmlwdGlvbjogT3V0cHV0IHJhbmRvbSBudW1iZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBHZW5lcmF0ZWQgcmFuZG9tIG51bWJlciAqLw0KKyNkZWZpbmUgUk5HX1ZBTFVFX1ZBTFVFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFZBTFVFIGZpZWxkLiAqLw0KKyNkZWZpbmUgUk5HX1ZBTFVFX1ZBTFVFX01zayAoMHhGRlVMIDw8IFJOR19WQUxVRV9WQUxVRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVkFMVUUgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogUlRDICovDQorLyogRGVzY3JpcHRpb246IFJlYWwgdGltZSBjb3VudGVyIDAgKi8NCisNCisvKiBSZWdpc3RlcjogUlRDX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVszXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUzX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFM19Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTlNFVF9DT01QQVJFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMl0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTJfTXNrICgweDFVTCA8PCBSVENfSU5URU5TRVRfQ09NUEFSRTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUyX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzFdIGV2ZW50ICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTFfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOU0VUX0NPTVBBUkUxX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVswXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUwX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9DT01QQVJFMF9Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTlNFVF9DT01QQVJFMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX0NPTVBBUkUwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfQ09NUEFSRTBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgT1ZSRkxXIGV2ZW50ICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfT1ZSRkxXX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WUkZMVyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9PVlJGTFdfTXNrICgweDFVTCA8PCBSVENfSU5URU5TRVRfT1ZSRkxXX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfT1ZSRkxXX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9PVlJGTFdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9PVlJGTFdfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVElDSyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX1RJQ0tfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTlNFVF9USUNLX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOU0VUX1RJQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRJQ0sgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfVElDS19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5TRVRfVElDS19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOU0VUX1RJQ0tfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVszXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUzX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFM19Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTkNMUl9DT01QQVJFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzJdIGV2ZW50ICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTJfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUyX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOQ0xSX0NPTVBBUkUyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTFfTXNrICgweDFVTCA8PCBSVENfSU5URU5DTFJfQ09NUEFSRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVswXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUwX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9DT01QQVJFMF9Nc2sgKDB4MVVMIDw8IFJUQ19JTlRFTkNMUl9DT01QQVJFMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX0NPTVBBUkUwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfQ09NUEFSRTBfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIE9WUkZMVyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX09WUkZMV19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfT1ZSRkxXX01zayAoMHgxVUwgPDwgUlRDX0lOVEVOQ0xSX09WUkZMV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX09WUkZMV19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfT1ZSRkxXX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfT1ZSRkxXX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUSUNLIGV2ZW50ICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfVElDS19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUSUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0lOVEVOQ0xSX1RJQ0tfTXNrICgweDFVTCA8PCBSVENfSU5URU5DTFJfVElDS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9USUNLX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19JTlRFTkNMUl9USUNLX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfSU5URU5DTFJfVElDS19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUlRDX0VWVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGV2ZW50IHJvdXRpbmcgKi8NCisNCisvKiBCaXQgMTkgOiBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzNdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTNfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUzX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOX0NPTVBBUkUzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFM19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogRW5hYmxlIG9yIGRpc2FibGUgZXZlbnQgcm91dGluZyBmb3IgQ09NUEFSRVsyXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUyX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMl9Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTl9DT01QQVJFMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IEVuYWJsZSBvciBkaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTFfTXNrICgweDFVTCA8PCBSVENfRVZURU5fQ09NUEFSRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTYgOiBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzBdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5fQ09NUEFSRTBfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX0NPTVBBUkUwX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOX0NPTVBBUkUwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBPVlJGTFcgZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9PVlJGTFdfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX09WUkZMV19Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTl9PVlJGTFdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WUkZMVyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9PVlJGTFdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSVENfRVZURU5fT1ZSRkxXX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIFRJQ0sgZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTl9USUNLX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRJQ0sgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5fVElDS19Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTl9USUNLX1BvcykgLyohPCBCaXQgbWFzayBvZiBUSUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOX1RJQ0tfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBSVENfRVZURU5fVElDS19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19FVlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgZXZlbnQgcm91dGluZyAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBFbmFibGUgZXZlbnQgcm91dGluZyBmb3IgQ09NUEFSRVszXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUzX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFM19Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTlNFVF9DT01QQVJFM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBldmVudCByb3V0aW5nIGZvciBDT01QQVJFWzJdIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTJfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUyX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOU0VUX0NPTVBBUkUyX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTFfTXNrICgweDFVTCA8PCBSVENfRVZURU5TRVRfQ09NUEFSRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUxX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBFbmFibGUgZXZlbnQgcm91dGluZyBmb3IgQ09NUEFSRVswXSBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUwX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9DT01QQVJFMF9Nc2sgKDB4MVVMIDw8IFJUQ19FVlRFTlNFVF9DT01QQVJFMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX0NPTVBBUkUwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfQ09NUEFSRTBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGV2ZW50IHJvdXRpbmcgZm9yIE9WUkZMVyBldmVudCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX09WUkZMV19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfT1ZSRkxXX01zayAoMHgxVUwgPDwgUlRDX0VWVEVOU0VUX09WUkZMV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZSRkxXIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX09WUkZMV19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfT1ZSRkxXX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfT1ZSRkxXX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBldmVudCByb3V0aW5nIGZvciBUSUNLIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfVElDS19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUSUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOU0VUX1RJQ0tfTXNrICgweDFVTCA8PCBSVENfRVZURU5TRVRfVElDS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9USUNLX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTlNFVF9USUNLX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5TRVRfVElDS19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUlRDX0VWVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgZXZlbnQgcm91dGluZyAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbM10gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTNfTXNrICgweDFVTCA8PCBSVENfRVZURU5DTFJfQ09NUEFSRTNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUzIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUzX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMl0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTJfTXNrICgweDFVTCA8PCBSVENfRVZURU5DTFJfQ09NUEFSRTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUyX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUyX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTFfTXNrICgweDFVTCA8PCBSVENfRVZURU5DTFJfQ09NUEFSRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUxX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGV2ZW50IHJvdXRpbmcgZm9yIENPTVBBUkVbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfQ09NUEFSRTBfTXNrICgweDFVTCA8PCBSVENfRVZURU5DTFJfQ09NUEFSRTBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUwIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9DT01QQVJFMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX0NPTVBBUkUwX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgZXZlbnQgcm91dGluZyBmb3IgT1ZSRkxXIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfT1ZSRkxXX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WUkZMVyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9PVlJGTFdfTXNrICgweDFVTCA8PCBSVENfRVZURU5DTFJfT1ZSRkxXX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVlJGTFcgZmllbGQuICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfT1ZSRkxXX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9PVlJGTFdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9PVlJGTFdfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBldmVudCByb3V0aW5nIGZvciBUSUNLIGV2ZW50ICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfVElDS19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUSUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX0VWVEVOQ0xSX1RJQ0tfTXNrICgweDFVTCA8PCBSVENfRVZURU5DTFJfVElDS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgVElDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9USUNLX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFJUQ19FVlRFTkNMUl9USUNLX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBSVENfRVZURU5DTFJfVElDS19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogUlRDX0NPVU5URVIgKi8NCisvKiBEZXNjcmlwdGlvbjogQ3VycmVudCBDT1VOVEVSIHZhbHVlICovDQorDQorLyogQml0cyAyMy4uMCA6IENvdW50ZXIgdmFsdWUgKi8NCisjZGVmaW5lIFJUQ19DT1VOVEVSX0NPVU5URVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09VTlRFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFJUQ19DT1VOVEVSX0NPVU5URVJfTXNrICgweEZGRkZGRlVMIDw8IFJUQ19DT1VOVEVSX0NPVU5URVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPVU5URVIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19QUkVTQ0FMRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogMTIgYml0IHByZXNjYWxlciBmb3IgQ09VTlRFUiBmcmVxdWVuY3kgKDMyNzY4LyhQUkVTQ0FMRVIrMSkpLk11c3QgYmUgd3JpdHRlbiB3aGVuIFJUQyBpcyBzdG9wcGVkICovDQorDQorLyogQml0cyAxMS4uMCA6IFByZXNjYWxlciB2YWx1ZSAqLw0KKyNkZWZpbmUgUlRDX1BSRVNDQUxFUl9QUkVTQ0FMRVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFJFU0NBTEVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgUlRDX1BSRVNDQUxFUl9QUkVTQ0FMRVJfTXNrICgweEZGRlVMIDw8IFJUQ19QUkVTQ0FMRVJfUFJFU0NBTEVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVTQ0FMRVIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFJUQ19DQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgQ29tcGFyZSByZWdpc3RlciAwICovDQorDQorLyogQml0cyAyMy4uMCA6IENvbXBhcmUgdmFsdWUgKi8NCisjZGVmaW5lIFJUQ19DQ19DT01QQVJFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUgZmllbGQuICovDQorI2RlZmluZSBSVENfQ0NfQ09NUEFSRV9Nc2sgKDB4RkZGRkZGVUwgPDwgUlRDX0NDX0NPTVBBUkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogU0FBREMgKi8NCisvKiBEZXNjcmlwdGlvbjogQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydGVyICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbN10uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDdMSU1JVExfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIN0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIN0xJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NIN0xJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g3TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g3TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g3TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzddLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g3TElNSVRIX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDdMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDdMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDdMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIN0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIN0xJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIN0xJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFs2XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINkxJTUlUTF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g2TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0g2TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDZMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDZMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDZMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNl0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDZMSU1JVEhfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENINkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINkxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NINkxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g2TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g2TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g2TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzVdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g1TElNSVRMX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDVMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDVMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDVMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINUxJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINUxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFs1XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINUxJTUlUSF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g1TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g1TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0g1TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDVMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDVMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDVMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbNF0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDRMSU1JVExfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIENINExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINExJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NINExJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g0TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g0TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g0TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzRdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0g0TElNSVRIX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDRMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDRMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDRMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINExJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NINExJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFszXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIM0xJTUlUTF9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gzTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0gzTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDNMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDNMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDNMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbM10uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDNMSU1JVEhfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIM0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIM0xJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NIM0xJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gzTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gzTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gzTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzJdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gyTElNSVRMX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDJMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDJMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDJMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMkxJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMkxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFsyXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMkxJTUlUSF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gyTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0gyTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDJMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDJMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDJMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFsxXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUTF9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDFMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDFMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDFMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzFdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gxTElNSVRIX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMUxJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX0NIMUxJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gxTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gxTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMF0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVExfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fQ0gwTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0gwTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDBMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDSFswXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMExJTUlUSF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDBMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DSDBMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9DSDBMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMExJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NIMExJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUT1BQRURfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUT1BQRURfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBDQUxJQlJBVEVET05FIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DQUxJQlJBVEVET05FX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENBTElCUkFURURPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DQUxJQlJBVEVET05FX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5fQ0FMSUJSQVRFRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0FMSUJSQVRFRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0NBTElCUkFURURPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9DQUxJQlJBVEVET05FX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUkVTVUxURE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fUkVTVUxURE9ORV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNVTFRET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fUkVTVUxURE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOX1JFU1VMVERPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFU1VMVERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9SRVNVTFRET05FX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fUkVTVUxURE9ORV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0RPTkVfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0RPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9ET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkQgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0VORF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTl9FTkRfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9FTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX0VORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUQVJURURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUQVJURURfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTl9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5fU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzddLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRMX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDdMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIN0xJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUTF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbN10uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDdMSU1JVEhfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENIN0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g3TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIN0xJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g3TElNSVRIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFs2XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINkxJTUlUTF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDZMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVExfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzZdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g2TElNSVRIX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDZMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINkxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINkxJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDZMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINkxJTUlUSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbNV0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVExfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENINUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NINUxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g1TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRMX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFs1XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINUxJTUlUSF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g1TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDVMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g1TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDVMSU1JVEhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzRdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRMX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDRMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVExfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENINExJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUTF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVExfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUTF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbNF0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDRMSU1JVEhfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIENINExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NINExJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0g0TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NINExJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0g0TElNSVRIX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFszXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUTF9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDNMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVExfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzNdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gzTElNSVRIX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDNMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIM0xJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDNMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIM0xJTUlUSF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbMl0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVExfUG9zICgxMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMkxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gyTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRMX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDSFsyXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NIMkxJTUlUSF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDJMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gyTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDJMSU1JVEhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbMV0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDFMSU1JVExfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDFMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDFMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDFMSU1JVExfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbMV0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDFMSU1JVEhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gxTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDFMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDFMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gxTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDFMSU1JVEhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbMF0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDBMSU1JVExfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDBMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDBMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDBMSU1JVExfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0hbMF0uTElNSVRIIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDBMSU1JVEhfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDBMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDBMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0gwTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DSDBMSU1JVEhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ0FMSUJSQVRFRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0FMSUJSQVRFRE9ORV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDQUxJQlJBVEVET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfQ0FMSUJSQVRFRE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0NBTElCUkFURURPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENBTElCUkFURURPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9DQUxJQlJBVEVET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NBTElCUkFURURPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0NBTElCUkFURURPTkVfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVTVUxURE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfUkVTVUxURE9ORV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSRVNVTFRET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfUkVTVUxURE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX1JFU1VMVERPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFU1VMVERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9SRVNVTFRET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1JFU1VMVERPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1JFU1VMVERPTkVfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRE9ORV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX0RPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9ET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0RPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX0RPTkVfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9FTkRfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRU5EX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5TRVRfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9FTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfU1RBUlRFRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5TRVRfU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOU0VUX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTlNFVF9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOU0VUX1NUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs3XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUTF9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDdMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDdMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDdMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs3XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIN0xJTUlUSF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0g3TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDdMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDdMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g3TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDdMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs2XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUTF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDZMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDZMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDZMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs2XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINkxJTUlUSF9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g2TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDZMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDZMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g2TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDZMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs1XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUTF9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g1TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDVMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDVMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDVMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs1XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINUxJTUlUSF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g1TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDVMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDVMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g1TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDVMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs0XS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINExJTUlUTF9Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0TElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDRMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDRMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDRMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFs0XS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NINExJTUlUSF9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgQ0g0TElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDRMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDRMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0g0TElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDRMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEzIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFszXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUTF9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDNMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDNMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDNMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFszXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIM0xJTUlUSF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gzTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDNMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDNMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gzTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDNMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDExIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFsyXS5MSU1JVEwgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUTF9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDJMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDJMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDJMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFsyXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMkxJTUlUSF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ0gyTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRIX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRIX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDJMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDJMSU1JVEhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gyTElNSVRIX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDJMSU1JVEhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzFdLkxJTUlUTCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gxTElNSVRMX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMUxJTUlUTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUTF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gxTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gxTElNSVRMX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUTF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gxTElNSVRMX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDSFsxXS5MSU1JVEggZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUSF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBDSDFMSU1JVEggZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVEhfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENIMUxJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUSF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDFMSU1JVEhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMUxJTUlUSF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0hbMF0uTElNSVRMIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDBMSU1JVExfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgQ0gwTElNSVRMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRMX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRMX1BvcykgLyohPCBCaXQgbWFzayBvZiBDSDBMSU1JVEwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDBMSU1JVExfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRMX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DSDBMSU1JVExfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENIWzBdLkxJTUlUSCBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRIX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIENIMExJTUlUSCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUSF9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ0gwTElNSVRIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRIX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NIMExJTUlUSF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0gwTElNSVRIX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVE9QUEVEX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVE9QUEVEX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ0FMSUJSQVRFRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0FMSUJSQVRFRE9ORV9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBDQUxJQlJBVEVET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfQ0FMSUJSQVRFRE9ORV9Nc2sgKDB4MVVMIDw8IFNBQURDX0lOVEVOQ0xSX0NBTElCUkFURURPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENBTElCUkFURURPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9DQUxJQlJBVEVET05FX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NBTElCUkFURURPTkVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0NBTElCUkFURURPTkVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFU1VMVERPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1JFU1VMVERPTkVfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUkVTVUxURE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1JFU1VMVERPTkVfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTkNMUl9SRVNVTFRET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNVTFRET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfUkVTVUxURE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9SRVNVTFRET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9SRVNVTFRET05FX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBET05FIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9ET05FX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIERPTkUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9ET05FX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX0RPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRE9ORV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRE9ORV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9FTkRfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRU5EX01zayAoMHgxVUwgPDwgU0FBRENfSU5URU5DTFJfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9FTkRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1NUQVJURURfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0lOVEVOQ0xSX1NUQVJURURfTXNrICgweDFVTCA8PCBTQUFEQ19JTlRFTkNMUl9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfSU5URU5DTFJfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTQUFEQ19JTlRFTkNMUl9TVEFSVEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19TVEFUVVMgKi8NCisvKiBEZXNjcmlwdGlvbjogU3RhdHVzICovDQorDQorLyogQml0IDAgOiBTdGF0dXMgKi8NCisjZGVmaW5lIFNBQURDX1NUQVRVU19TVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfU1RBVFVTX1NUQVRVU19Nc2sgKDB4MVVMIDw8IFNBQURDX1NUQVRVU19TVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1NUQVRVU19TVEFUVVNfUmVhZHkgKDBVTCkgLyohPCBBREMgaXMgcmVhZHkuIE5vIG9uLWdvaW5nIGNvbnZlcnNpb24uICovDQorI2RlZmluZSBTQUFEQ19TVEFUVVNfU1RBVFVTX0J1c3kgKDFVTCkgLyohPCBBREMgaXMgYnVzeS4gQ29udmVyc2lvbiBpbiBwcm9ncmVzcy4gKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIEFEQyAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgQURDICovDQorI2RlZmluZSBTQUFEQ19FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0VOQUJMRV9FTkFCTEVfTXNrICgweDFVTCA8PCBTQUFEQ19FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBBREMgKi8NCisjZGVmaW5lIFNBQURDX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBBREMgKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfQ0hfUFNFTFAgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIElucHV0IHBvc2l0aXZlIHBpbiBzZWxlY3Rpb24gZm9yIENIWzBdICovDQorDQorLyogQml0cyA0Li4wIDogQW5hbG9nIHBvc2l0aXZlIGlucHV0IGNoYW5uZWwgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxQX1BTRUxQX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBTRUxQIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfTXNrICgweDFGVUwgPDwgU0FBRENfQ0hfUFNFTFBfUFNFTFBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBTRUxQIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTFBfUFNFTFBfTkMgKDBVTCkgLyohPCBOb3QgY29ubmVjdGVkICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDAgKDFVTCkgLyohPCBBSU4wICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDEgKDJVTCkgLyohPCBBSU4xICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDIgKDNVTCkgLyohPCBBSU4yICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDMgKDRVTCkgLyohPCBBSU4zICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDQgKDVVTCkgLyohPCBBSU40ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDUgKDZVTCkgLyohPCBBSU41ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDYgKDdVTCkgLyohPCBBSU42ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9BbmFsb2dJbnB1dDcgKDhVTCkgLyohPCBBSU43ICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMUF9QU0VMUF9WREQgKDlVTCkgLyohPCBWREQgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxQX1BTRUxQX1ZEREhESVY1ICgweDExVUwpIC8qITwgVkRESC81ICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0NIX1BTRUxOICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBJbnB1dCBuZWdhdGl2ZSBwaW4gc2VsZWN0aW9uIGZvciBDSFswXSAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IEFuYWxvZyBuZWdhdGl2ZSBpbnB1dCwgZW5hYmxlcyBkaWZmZXJlbnRpYWwgY2hhbm5lbCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTE5fUFNFTE5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFNFTE4gZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9Nc2sgKDB4MUZVTCA8PCBTQUFEQ19DSF9QU0VMTl9QU0VMTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFNFTE4gZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9QU0VMTl9QU0VMTl9OQyAoMFVMKSAvKiE8IE5vdCBjb25uZWN0ZWQgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0MCAoMVVMKSAvKiE8IEFJTjAgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0MSAoMlVMKSAvKiE8IEFJTjEgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0MiAoM1VMKSAvKiE8IEFJTjIgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0MyAoNFVMKSAvKiE8IEFJTjMgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0NCAoNVVMKSAvKiE8IEFJTjQgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0NSAoNlVMKSAvKiE8IEFJTjUgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0NiAoN1VMKSAvKiE8IEFJTjYgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX0FuYWxvZ0lucHV0NyAoOFVMKSAvKiE8IEFJTjcgKi8NCisjZGVmaW5lIFNBQURDX0NIX1BTRUxOX1BTRUxOX1ZERCAoOVVMKSAvKiE8IFZERCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfUFNFTE5fUFNFTE5fVkRESERJVjUgKDB4MTFVTCkgLyohPCBWRERILzUgKi8NCisNCisvKiBSZWdpc3RlcjogU0FBRENfQ0hfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBJbnB1dCBjb25maWd1cmF0aW9uIGZvciBDSFswXSAqLw0KKw0KKy8qIEJpdCAyNCA6IEVuYWJsZSBidXJzdCBtb2RlICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfQlVSU1RfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJVUlNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0JVUlNUX01zayAoMHgxVUwgPDwgU0FBRENfQ0hfQ09ORklHX0JVUlNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBCVVJTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19CVVJTVF9EaXNhYmxlZCAoMFVMKSAvKiE8IEJ1cnN0IG1vZGUgaXMgZGlzYWJsZWQgKG5vcm1hbCBvcGVyYXRpb24pICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfQlVSU1RfRW5hYmxlZCAoMVVMKSAvKiE8IEJ1cnN0IG1vZGUgaXMgZW5hYmxlZC4gU0FBREMgdGFrZXMgMl5PVkVSU0FNUExFIG51bWJlciBvZiBzYW1wbGVzIGFzIGZhc3QgYXMgaXQgY2FuLCBhbmQgc2VuZHMgdGhlIGF2ZXJhZ2UgdG8gRGF0YSBSQU0uICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIGRpZmZlcmVudGlhbCBtb2RlICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfTU9ERV9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19NT0RFX01zayAoMHgxVUwgPDwgU0FBRENfQ0hfQ09ORklHX01PREVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1PREUgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfTU9ERV9TRSAoMFVMKSAvKiE8IFNpbmdsZSBlbmRlZCwgUFNFTE4gd2lsbCBiZSBpZ25vcmVkLCBuZWdhdGl2ZSBpbnB1dCB0byBBREMgc2hvcnRlZCB0byBHTkQgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19NT0RFX0RpZmYgKDFVTCkgLyohPCBEaWZmZXJlbnRpYWwgKi8NCisNCisvKiBCaXRzIDE4Li4xNiA6IEFjcXVpc2l0aW9uIHRpbWUsIHRoZSB0aW1lIHRoZSBBREMgdXNlcyB0byBzYW1wbGUgdGhlIGlucHV0IHZvbHRhZ2UgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBUQUNRIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1RBQ1FfTXNrICgweDdVTCA8PCBTQUFEQ19DSF9DT05GSUdfVEFDUV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVEFDUSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRXzN1cyAoMFVMKSAvKiE8IDMgdXMgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRXzV1cyAoMVVMKSAvKiE8IDUgdXMgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRXzEwdXMgKDJVTCkgLyohPCAxMCB1cyAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1RBQ1FfMTV1cyAoM1VMKSAvKiE8IDE1IHVzICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfVEFDUV8yMHVzICg0VUwpIC8qITwgMjAgdXMgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19UQUNRXzQwdXMgKDVVTCkgLyohPCA0MCB1cyAqLw0KKw0KKy8qIEJpdCAxMiA6IFJlZmVyZW5jZSBjb250cm9sICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVGU0VMX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUZTRUwgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVGU0VMX01zayAoMHgxVUwgPDwgU0FBRENfQ0hfQ09ORklHX1JFRlNFTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVGU0VMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFRlNFTF9JbnRlcm5hbCAoMFVMKSAvKiE8IEludGVybmFsIHJlZmVyZW5jZSAoMC42IFYpICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVGU0VMX1ZERDFfNCAoMVVMKSAvKiE8IFZERC80IGFzIHJlZmVyZW5jZSAqLw0KKw0KKy8qIEJpdHMgMTAuLjggOiBHYWluIGNvbnRyb2wgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEdBSU4gZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfR0FJTl9Nc2sgKDB4N1VMIDw8IFNBQURDX0NIX0NPTkZJR19HQUlOX1BvcykgLyohPCBCaXQgbWFzayBvZiBHQUlOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjFfNiAoMFVMKSAvKiE8IDEvNiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjFfNSAoMVVMKSAvKiE8IDEvNSAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjFfNCAoMlVMKSAvKiE8IDEvNCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjFfMyAoM1VMKSAvKiE8IDEvMyAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjFfMiAoNFVMKSAvKiE8IDEvMiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX0dBSU5fR2FpbjEgKDVVTCkgLyohPCAxICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfR0FJTl9HYWluMiAoNlVMKSAvKiE8IDIgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19HQUlOX0dhaW40ICg3VUwpIC8qITwgNCAqLw0KKw0KKy8qIEJpdHMgNS4uNCA6IE5lZ2F0aXZlIGNoYW5uZWwgcmVzaXN0b3IgY29udHJvbCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU05fUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUkVTTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNOX01zayAoMHgzVUwgPDwgU0FBRENfQ0hfQ09ORklHX1JFU05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFU04gZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTTl9CeXBhc3MgKDBVTCkgLyohPCBCeXBhc3MgcmVzaXN0b3IgbGFkZGVyICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTTl9QdWxsZG93biAoMVVMKSAvKiE8IFB1bGwtZG93biB0byBHTkQgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNOX1B1bGx1cCAoMlVMKSAvKiE8IFB1bGwtdXAgdG8gVkREICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTTl9WREQxXzIgKDNVTCkgLyohPCBTZXQgaW5wdXQgYXQgVkRELzIgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBQb3NpdGl2ZSBjaGFubmVsIHJlc2lzdG9yIGNvbnRyb2wgKi8NCisjZGVmaW5lIFNBQURDX0NIX0NPTkZJR19SRVNQX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU1AgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTUF9Nc2sgKDB4M1VMIDw8IFNBQURDX0NIX0NPTkZJR19SRVNQX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRVNQIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU1BfQnlwYXNzICgwVUwpIC8qITwgQnlwYXNzIHJlc2lzdG9yIGxhZGRlciAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU1BfUHVsbGRvd24gKDFVTCkgLyohPCBQdWxsLWRvd24gdG8gR05EICovDQorI2RlZmluZSBTQUFEQ19DSF9DT05GSUdfUkVTUF9QdWxsdXAgKDJVTCkgLyohPCBQdWxsLXVwIHRvIFZERCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfQ09ORklHX1JFU1BfVkREMV8yICgzVUwpIC8qITwgU2V0IGlucHV0IGF0IFZERC8yICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX0NIX0xJTUlUICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBIaWdoL2xvdyBsaW1pdHMgZm9yIGV2ZW50IG1vbml0b3JpbmcgYSBjaGFubmVsICovDQorDQorLyogQml0cyAzMS4uMTYgOiBIaWdoIGxldmVsIGxpbWl0ICovDQorI2RlZmluZSBTQUFEQ19DSF9MSU1JVF9ISUdIX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBISUdIIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfTElNSVRfSElHSF9Nc2sgKDB4RkZGRlVMIDw8IFNBQURDX0NIX0xJTUlUX0hJR0hfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEhJR0ggZmllbGQuICovDQorDQorLyogQml0cyAxNS4uMCA6IExvdyBsZXZlbCBsaW1pdCAqLw0KKyNkZWZpbmUgU0FBRENfQ0hfTElNSVRfTE9XX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIExPVyBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX0NIX0xJTUlUX0xPV19Nc2sgKDB4RkZGRlVMIDw8IFNBQURDX0NIX0xJTUlUX0xPV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTE9XIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19SRVNPTFVUSU9OICovDQorLyogRGVzY3JpcHRpb246IFJlc29sdXRpb24gY29uZmlndXJhdGlvbiAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IFNldCB0aGUgcmVzb2x1dGlvbiAqLw0KKyNkZWZpbmUgU0FBRENfUkVTT0xVVElPTl9WQUxfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVkFMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfUkVTT0xVVElPTl9WQUxfTXNrICgweDdVTCA8PCBTQUFEQ19SRVNPTFVUSU9OX1ZBTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVkFMIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfUkVTT0xVVElPTl9WQUxfOGJpdCAoMFVMKSAvKiE8IDggYml0ICovDQorI2RlZmluZSBTQUFEQ19SRVNPTFVUSU9OX1ZBTF8xMGJpdCAoMVVMKSAvKiE8IDEwIGJpdCAqLw0KKyNkZWZpbmUgU0FBRENfUkVTT0xVVElPTl9WQUxfMTJiaXQgKDJVTCkgLyohPCAxMiBiaXQgKi8NCisjZGVmaW5lIFNBQURDX1JFU09MVVRJT05fVkFMXzE0Yml0ICgzVUwpIC8qITwgMTQgYml0ICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX09WRVJTQU1QTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogT3ZlcnNhbXBsaW5nIGNvbmZpZ3VyYXRpb24uIE9WRVJTQU1QTEUgc2hvdWxkIG5vdCBiZSBjb21iaW5lZCB3aXRoIFNDQU4uIFRoZSBSRVNPTFVUSU9OIGlzIGFwcGxpZWQgYmVmb3JlIGF2ZXJhZ2luZywgdGh1cyBmb3IgaGlnaCBPVkVSU0FNUExFIGEgaGlnaGVyIFJFU09MVVRJT04gc2hvdWxkIGJlIHVzZWQuICovDQorDQorLyogQml0cyAzLi4wIDogT3ZlcnNhbXBsZSBjb250cm9sICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZFUlNBTVBMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX09WRVJTQU1QTEVfT1ZFUlNBTVBMRV9Nc2sgKDB4RlVMIDw8IFNBQURDX09WRVJTQU1QTEVfT1ZFUlNBTVBMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZFUlNBTVBMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX09WRVJTQU1QTEVfT1ZFUlNBTVBMRV9CeXBhc3MgKDBVTCkgLyohPCBCeXBhc3Mgb3ZlcnNhbXBsaW5nICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3ZlcjJ4ICgxVUwpIC8qITwgT3ZlcnNhbXBsZSAyeCAqLw0KKyNkZWZpbmUgU0FBRENfT1ZFUlNBTVBMRV9PVkVSU0FNUExFX092ZXI0eCAoMlVMKSAvKiE8IE92ZXJzYW1wbGUgNHggKi8NCisjZGVmaW5lIFNBQURDX09WRVJTQU1QTEVfT1ZFUlNBTVBMRV9PdmVyOHggKDNVTCkgLyohPCBPdmVyc2FtcGxlIDh4ICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3ZlcjE2eCAoNFVMKSAvKiE8IE92ZXJzYW1wbGUgMTZ4ICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3ZlcjMyeCAoNVVMKSAvKiE8IE92ZXJzYW1wbGUgMzJ4ICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3ZlcjY0eCAoNlVMKSAvKiE8IE92ZXJzYW1wbGUgNjR4ICovDQorI2RlZmluZSBTQUFEQ19PVkVSU0FNUExFX09WRVJTQU1QTEVfT3ZlcjEyOHggKDdVTCkgLyohPCBPdmVyc2FtcGxlIDEyOHggKi8NCisjZGVmaW5lIFNBQURDX09WRVJTQU1QTEVfT1ZFUlNBTVBMRV9PdmVyMjU2eCAoOFVMKSAvKiE8IE92ZXJzYW1wbGUgMjU2eCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19TQU1QTEVSQVRFICovDQorLyogRGVzY3JpcHRpb246IENvbnRyb2xzIG5vcm1hbCBvciBjb250aW51b3VzIHNhbXBsZSByYXRlICovDQorDQorLyogQml0IDEyIDogU2VsZWN0IG1vZGUgZm9yIHNhbXBsZSByYXRlIGNvbnRyb2wgKi8NCisjZGVmaW5lIFNBQURDX1NBTVBMRVJBVEVfTU9ERV9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1NBTVBMRVJBVEVfTU9ERV9Nc2sgKDB4MVVMIDw8IFNBQURDX1NBTVBMRVJBVEVfTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1NBTVBMRVJBVEVfTU9ERV9UYXNrICgwVUwpIC8qITwgUmF0ZSBpcyBjb250cm9sbGVkIGZyb20gU0FNUExFIHRhc2sgKi8NCisjZGVmaW5lIFNBQURDX1NBTVBMRVJBVEVfTU9ERV9UaW1lcnMgKDFVTCkgLyohPCBSYXRlIGlzIGNvbnRyb2xsZWQgZnJvbSBsb2NhbCB0aW1lciAodXNlIENDIHRvIGNvbnRyb2wgdGhlIHJhdGUpICovDQorDQorLyogQml0cyAxMC4uMCA6IENhcHR1cmUgYW5kIGNvbXBhcmUgdmFsdWUuIFNhbXBsZSByYXRlIGlzIDE2IE1Iei9DQyAqLw0KKyNkZWZpbmUgU0FBRENfU0FNUExFUkFURV9DQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDQyBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1NBTVBMRVJBVEVfQ0NfTXNrICgweDdGRlVMIDw8IFNBQURDX1NBTVBMRVJBVEVfQ0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19SRVNVTFRfUFRSICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFNBQURDX1JFU1VMVF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFNBQURDX1JFU1VMVF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFNBQURDX1JFU1VMVF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNBQURDX1JFU1VMVF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnVmZmVyIHdvcmRzIHRvIHRyYW5zZmVyICovDQorDQorLyogQml0cyAxNC4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlciB3b3JkcyB0byB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgU0FBRENfUkVTVUxUX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgU0FBRENfUkVTVUxUX01BWENOVF9NQVhDTlRfTXNrICgweDdGRkZVTCA8PCBTQUFEQ19SRVNVTFRfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTQUFEQ19SRVNVTFRfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBidWZmZXIgd29yZHMgdHJhbnNmZXJyZWQgc2luY2UgbGFzdCBTVEFSVCAqLw0KKw0KKy8qIEJpdHMgMTQuLjAgOiBOdW1iZXIgb2YgYnVmZmVyIHdvcmRzIHRyYW5zZmVycmVkIHNpbmNlIGxhc3QgU1RBUlQuIFRoaXMgcmVnaXN0ZXIgY2FuIGJlIHJlYWQgYWZ0ZXIgYW4gRU5EIG9yIFNUT1BQRUQgZXZlbnQuICovDQorI2RlZmluZSBTQUFEQ19SRVNVTFRfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBTQUFEQ19SRVNVTFRfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4N0ZGRlVMIDw8IFNBQURDX1JFU1VMVF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogU1BJICovDQorLyogRGVzY3JpcHRpb246IFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFNQSV9JTlRFTlNFVF9SRUFEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9JTlRFTlNFVF9SRUFEWV9Nc2sgKDB4MVVMIDw8IFNQSV9JTlRFTlNFVF9SRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBTUElfSU5URU5TRVRfUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJX0lOVEVOU0VUX1JFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElfSU5URU5TRVRfUkVBRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgU1BJX0lOVEVOQ0xSX1JFQURZX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0lOVEVOQ0xSX1JFQURZX01zayAoMHgxVUwgPDwgU1BJX0lOVEVOQ0xSX1JFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9JTlRFTkNMUl9SRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElfSU5URU5DTFJfUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSV9JTlRFTkNMUl9SRUFEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgU1BJICovDQorDQorLyogQml0cyAzLi4wIDogRW5hYmxlIG9yIGRpc2FibGUgU1BJICovDQorI2RlZmluZSBTUElfRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBTUElfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4RlVMIDw8IFNQSV9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBTUElfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgU1BJICovDQorI2RlZmluZSBTUElfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFNQSSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfUFNFTF9TQ0sgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgU0NLICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElfUFNFTF9TQ0tfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSV9QU0VMX1NDS19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElfUFNFTF9TQ0tfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfU0NLX1BPUlRfTXNrICgweDNVTCA8PCBTUElfUFNFTF9TQ0tfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElfUFNFTF9TQ0tfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX1NDS19QSU5fTXNrICgweDFGVUwgPDwgU1BJX1BTRUxfU0NLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElfUFNFTF9NT1NJICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIE1PU0kgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTU9TSV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTU9TSV9DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJX1BTRUxfTU9TSV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTU9TSV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTU9TSV9QT1JUX01zayAoMHgzVUwgPDwgU1BJX1BTRUxfTU9TSV9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9QU0VMX01PU0lfUElOX01zayAoMHgxRlVMIDw8IFNQSV9QU0VMX01PU0lfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9QU0VMX01JU08gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgTUlTTyBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBTUElfUFNFTF9NSVNPX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElfUFNFTF9NSVNPX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBTUElfUFNFTF9NSVNPX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElfUFNFTF9NSVNPX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBTUElfUFNFTF9NSVNPX1BPUlRfTXNrICgweDNVTCA8PCBTUElfUFNFTF9NSVNPX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX1BTRUxfTUlTT19QSU5fTXNrICgweDFGVUwgPDwgU1BJX1BTRUxfTUlTT19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJX1JYRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSWEQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBSWCBkYXRhIHJlY2VpdmVkLiBEb3VibGUgYnVmZmVyZWQgKi8NCisjZGVmaW5lIFNQSV9SWERfUlhEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9SWERfUlhEX01zayAoMHhGRlVMIDw8IFNQSV9SWERfUlhEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9UWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogVFhEIHJlZ2lzdGVyICovDQorDQorLyogQml0cyA3Li4wIDogVFggZGF0YSB0byBzZW5kLiBEb3VibGUgYnVmZmVyZWQgKi8NCisjZGVmaW5lIFNQSV9UWERfVFhEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9UWERfVFhEX01zayAoMHhGRlVMIDw8IFNQSV9UWERfVFhEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9GUkVRVUVOQ1kgKi8NCisvKiBEZXNjcmlwdGlvbjogU1BJIGZyZXF1ZW5jeS4gQWNjdXJhY3kgZGVwZW5kcyBvbiB0aGUgSEZDTEsgc291cmNlIHNlbGVjdGVkLiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBTUEkgbWFzdGVyIGRhdGEgcmF0ZSAqLw0KKyNkZWZpbmUgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRlJFUVVFTkNZIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTXNrICgweEZGRkZGRkZGVUwgPDwgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEZSRVFVRU5DWSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0sxMjUgKDB4MDIwMDAwMDBVTCkgLyohPCAxMjUga2JwcyAqLw0KKyNkZWZpbmUgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzI1MCAoMHgwNDAwMDAwMFVMKSAvKiE8IDI1MCBrYnBzICovDQorI2RlZmluZSBTUElfRlJFUVVFTkNZX0ZSRVFVRU5DWV9LNTAwICgweDA4MDAwMDAwVUwpIC8qITwgNTAwIGticHMgKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX00xICgweDEwMDAwMDAwVUwpIC8qITwgMSBNYnBzICovDQorI2RlZmluZSBTUElfRlJFUVVFTkNZX0ZSRVFVRU5DWV9NMiAoMHgyMDAwMDAwMFVMKSAvKiE8IDIgTWJwcyAqLw0KKyNkZWZpbmUgU1BJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTTQgKDB4NDAwMDAwMDBVTCkgLyohPCA0IE1icHMgKi8NCisjZGVmaW5lIFNQSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX004ICgweDgwMDAwMDAwVUwpIC8qITwgOCBNYnBzICovDQorDQorLyogUmVnaXN0ZXI6IFNQSV9DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAyIDogU2VyaWFsIGNsb2NrIChTQ0spIHBvbGFyaXR5ICovDQorI2RlZmluZSBTUElfQ09ORklHX0NQT0xfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQ1BPTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfQ1BPTF9Nc2sgKDB4MVVMIDw8IFNQSV9DT05GSUdfQ1BPTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1BPTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfQ1BPTF9BY3RpdmVIaWdoICgwVUwpIC8qITwgQWN0aXZlIGhpZ2ggKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfQ1BPTF9BY3RpdmVMb3cgKDFVTCkgLyohPCBBY3RpdmUgbG93ICovDQorDQorLyogQml0IDEgOiBTZXJpYWwgY2xvY2sgKFNDSykgcGhhc2UgKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfQ1BIQV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBDUEhBIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0NPTkZJR19DUEhBX01zayAoMHgxVUwgPDwgU1BJX0NPTkZJR19DUEhBX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUEhBIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJX0NPTkZJR19DUEhBX0xlYWRpbmcgKDBVTCkgLyohPCBTYW1wbGUgb24gbGVhZGluZyBlZGdlIG9mIGNsb2NrLCBzaGlmdCBzZXJpYWwgZGF0YSBvbiB0cmFpbGluZyBlZGdlICovDQorI2RlZmluZSBTUElfQ09ORklHX0NQSEFfVHJhaWxpbmcgKDFVTCkgLyohPCBTYW1wbGUgb24gdHJhaWxpbmcgZWRnZSBvZiBjbG9jaywgc2hpZnQgc2VyaWFsIGRhdGEgb24gbGVhZGluZyBlZGdlICovDQorDQorLyogQml0IDAgOiBCaXQgb3JkZXIgKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfT1JERVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1JERVIgZmllbGQuICovDQorI2RlZmluZSBTUElfQ09ORklHX09SREVSX01zayAoMHgxVUwgPDwgU1BJX0NPTkZJR19PUkRFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1JERVIgZmllbGQuICovDQorI2RlZmluZSBTUElfQ09ORklHX09SREVSX01zYkZpcnN0ICgwVUwpIC8qITwgTW9zdCBzaWduaWZpY2FudCBiaXQgc2hpZnRlZCBvdXQgZmlyc3QgKi8NCisjZGVmaW5lIFNQSV9DT05GSUdfT1JERVJfTHNiRmlyc3QgKDFVTCkgLyohPCBMZWFzdCBzaWduaWZpY2FudCBiaXQgc2hpZnRlZCBvdXQgZmlyc3QgKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBTUElNICovDQorLyogRGVzY3JpcHRpb246IFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSBNYXN0ZXIgd2l0aCBFYXN5RE1BIDAgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMTcgOiBTaG9ydGN1dCBiZXR3ZWVuIEVORCBldmVudCBhbmQgU1RBUlQgdGFzayAqLw0KKyNkZWZpbmUgU1BJTV9TSE9SVFNfRU5EX1NUQVJUX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRfU1RBUlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1NIT1JUU19FTkRfU1RBUlRfTXNrICgweDFVTCA8PCBTUElNX1NIT1JUU19FTkRfU1RBUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORF9TVEFSVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fU0hPUlRTX0VORF9TVEFSVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFNQSU1fU0hPUlRTX0VORF9TVEFSVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUQVJURURfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOU0VUX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUQVJURURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EVFhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFRYX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTlNFVF9FTkRUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFRYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EVFhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EVFhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORF9Nc2sgKDB4MVVMIDw8IFNQSU1fSU5URU5TRVRfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9FTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFJYX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTlNFVF9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5TRVRfRU5EUlhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOU0VUX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOU0VUX1NUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFNQSU1fSU5URU5DTFJfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EVFhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFRYX01zayAoMHgxVUwgPDwgU1BJTV9JTlRFTkNMUl9FTkRUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX0VORFRYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EVFhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EVFhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDYgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOQ0xSX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRSWCBldmVudCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRSWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EUlhfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOQ0xSX0VORFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSU5URU5DTFJfRU5EUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRSWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9FTkRSWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUT1BQRURfTXNrICgweDFVTCA8PCBTUElNX0lOVEVOQ0xSX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJTV9JTlRFTkNMUl9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBTUElNX0lOVEVOQ0xSX1NUT1BQRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fU1RBTExTVEFUICovDQorLyogRGVzY3JpcHRpb246IFN0YWxsIHN0YXR1cyBmb3IgRWFzeURNQSBSQU0gYWNjZXNzZXMuIFRoZSBmaWVsZHMgaW4gdGhpcyByZWdpc3RlciBpcyBzZXQgdG8gU1RBTEwgYnkgaGFyZHdhcmUgd2hlbmV2ZXIgYSBzdGFsbCBvY2N1cnJlcyBhbmQgY2FuIGJlIGNsZWFyZWQgKHNldCB0byBOT1NUQUxMKSBieSB0aGUgQ1BVLiAqLw0KKw0KKy8qIEJpdCAxIDogU3RhbGwgc3RhdHVzIGZvciBFYXN5RE1BIFJBTSB3cml0ZXMgKi8NCisjZGVmaW5lIFNQSU1fU1RBTExTVEFUX1JYX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9TVEFMTFNUQVRfUlhfTXNrICgweDFVTCA8PCBTUElNX1NUQUxMU1RBVF9SWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlggZmllbGQuICovDQorI2RlZmluZSBTUElNX1NUQUxMU1RBVF9SWF9OT1NUQUxMICgwVUwpIC8qITwgTm8gc3RhbGwgKi8NCisjZGVmaW5lIFNQSU1fU1RBTExTVEFUX1JYX1NUQUxMICgxVUwpIC8qITwgQSBzdGFsbCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMCA6IFN0YWxsIHN0YXR1cyBmb3IgRWFzeURNQSBSQU0gcmVhZHMgKi8NCisjZGVmaW5lIFNQSU1fU1RBTExTVEFUX1RYX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9TVEFMTFNUQVRfVFhfTXNrICgweDFVTCA8PCBTUElNX1NUQUxMU1RBVF9UWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFggZmllbGQuICovDQorI2RlZmluZSBTUElNX1NUQUxMU1RBVF9UWF9OT1NUQUxMICgwVUwpIC8qITwgTm8gc3RhbGwgKi8NCisjZGVmaW5lIFNQSU1fU1RBTExTVEFUX1RYX1NUQUxMICgxVUwpIC8qITwgQSBzdGFsbCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFNQSU0gKi8NCisNCisvKiBCaXRzIDMuLjAgOiBFbmFibGUgb3IgZGlzYWJsZSBTUElNICovDQorI2RlZmluZSBTUElNX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9FTkFCTEVfRU5BQkxFX01zayAoMHhGVUwgPDwgU1BJTV9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBTUElNX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFNQSU0gKi8NCisjZGVmaW5lIFNQSU1fRU5BQkxFX0VOQUJMRV9FbmFibGVkICg3VUwpIC8qITwgRW5hYmxlIFNQSU0gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9QU0VMX1NDSyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTQ0sgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBTUElNX1BTRUxfU0NLX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfU0NLX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBTUElNX1BTRUxfU0NLX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfU0NLX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfU0NLX1BPUlRfTXNrICgweDNVTCA8PCBTUElNX1BTRUxfU0NLX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX1NDS19QSU5fTXNrICgweDFGVUwgPDwgU1BJTV9QU0VMX1NDS19QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9QU0VMX01PU0kgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgTU9TSSBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBTUElNX1BTRUxfTU9TSV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSU1fUFNFTF9NT1NJX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfTU9TSV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NT1NJX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElNX1BTRUxfTU9TSV9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfTU9TSV9QT1JUX01zayAoMHgzVUwgPDwgU1BJTV9QU0VMX01PU0lfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElNX1BTRUxfTU9TSV9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01PU0lfUElOX01zayAoMHgxRlVMIDw8IFNQSU1fUFNFTF9NT1NJX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1BTRUxfTUlTTyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBNSVNPIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NSVNPX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJTV9QU0VMX01JU09fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NSVNPX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX01JU09fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NSVNPX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NSVNPX1BPUlRfTXNrICgweDNVTCA8PCBTUElNX1BTRUxfTUlTT19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9NSVNPX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElNX1BTRUxfTUlTT19QSU5fTXNrICgweDFGVUwgPDwgU1BJTV9QU0VMX01JU09fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fUFNFTF9DU04gKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgQ1NOICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX0NTTl9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX0NTTl9DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJTV9QU0VMX0NTTl9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX0NTTl9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9QU0VMX0NTTl9QT1JUX01zayAoMHgzVUwgPDwgU1BJTV9QU0VMX0NTTl9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUFNFTF9DU05fUElOX01zayAoMHgxRlVMIDw8IFNQSU1fUFNFTF9DU05fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fRlJFUVVFTkNZICovDQorLyogRGVzY3JpcHRpb246IFNQSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogU1BJIG1hc3RlciBkYXRhIHJhdGUgKi8NCisjZGVmaW5lIFNQSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTXNrICgweEZGRkZGRkZGVUwgPDwgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzEyNSAoMHgwMjAwMDAwMFVMKSAvKiE8IDEyNSBrYnBzICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzI1MCAoMHgwNDAwMDAwMFVMKSAvKiE8IDI1MCBrYnBzICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzUwMCAoMHgwODAwMDAwMFVMKSAvKiE8IDUwMCBrYnBzICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTTE2ICgweDBBMDAwMDAwVUwpIC8qITwgMTYgTWJwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX00xICgweDEwMDAwMDAwVUwpIC8qITwgMSBNYnBzICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTTMyICgweDE0MDAwMDAwVUwpIC8qITwgMzIgTWJwcyAqLw0KKyNkZWZpbmUgU1BJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX00yICgweDIwMDAwMDAwVUwpIC8qITwgMiBNYnBzICovDQorI2RlZmluZSBTUElNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTTQgKDB4NDAwMDAwMDBVTCkgLyohPCA0IE1icHMgKi8NCisjZGVmaW5lIFNQSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9NOCAoMHg4MDAwMDAwMFVMKSAvKiE8IDggTWJwcyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1JYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgU1BJTV9SWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBTUElNX1JYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFNQSU1fUlhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9SWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICovDQorDQorLyogQml0cyAxNS4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICovDQorI2RlZmluZSBTUElNX1JYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUlhEX01BWENOVF9NQVhDTlRfTXNrICgweEZGRkZVTCA8PCBTUElNX1JYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fUlhEX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDE1Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBTUElNX1JYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fUlhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGRkZVTCA8PCBTUElNX1JYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fUlhEX0xJU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogRWFzeURNQSBsaXN0IHR5cGUgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBMaXN0IHR5cGUgKi8NCisjZGVmaW5lIFNQSU1fUlhEX0xJU1RfTElTVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMSVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9SWERfTElTVF9MSVNUX01zayAoMHgzVUwgPDwgU1BJTV9SWERfTElTVF9MSVNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBMSVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9SWERfTElTVF9MSVNUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBFYXN5RE1BIGxpc3QgKi8NCisjZGVmaW5lIFNQSU1fUlhEX0xJU1RfTElTVF9BcnJheUxpc3QgKDFVTCkgLyohPCBVc2UgYXJyYXkgbGlzdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX1RYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgU1BJTV9UWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBTUElNX1RYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFNQSU1fVFhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJTV9UWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIgKi8NCisNCisvKiBCaXRzIDE1Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICovDQorI2RlZmluZSBTUElNX1RYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fVFhEX01BWENOVF9NQVhDTlRfTXNrICgweEZGRkZVTCA8PCBTUElNX1RYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fVFhEX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDE1Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBTUElNX1RYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fVFhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGRkZVTCA8PCBTUElNX1RYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fVFhEX0xJU1QgKi8NCisvKiBEZXNjcmlwdGlvbjogRWFzeURNQSBsaXN0IHR5cGUgKi8NCisNCisvKiBCaXRzIDEuLjAgOiBMaXN0IHR5cGUgKi8NCisjZGVmaW5lIFNQSU1fVFhEX0xJU1RfTElTVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBMSVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9UWERfTElTVF9MSVNUX01zayAoMHgzVUwgPDwgU1BJTV9UWERfTElTVF9MSVNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBMSVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9UWERfTElTVF9MSVNUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBFYXN5RE1BIGxpc3QgKi8NCisjZGVmaW5lIFNQSU1fVFhEX0xJU1RfTElTVF9BcnJheUxpc3QgKDFVTCkgLyohPCBVc2UgYXJyYXkgbGlzdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovDQorDQorLyogQml0IDIgOiBTZXJpYWwgY2xvY2sgKFNDSykgcG9sYXJpdHkgKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX0NQT0xfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgQ1BPTCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX0NQT0xfTXNrICgweDFVTCA8PCBTUElNX0NPTkZJR19DUE9MX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUE9MIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9DT05GSUdfQ1BPTF9BY3RpdmVIaWdoICgwVUwpIC8qITwgQWN0aXZlIGhpZ2ggKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX0NQT0xfQWN0aXZlTG93ICgxVUwpIC8qITwgQWN0aXZlIGxvdyAqLw0KKw0KKy8qIEJpdCAxIDogU2VyaWFsIGNsb2NrIChTQ0spIHBoYXNlICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUEhBX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENQSEEgZmllbGQuICovDQorI2RlZmluZSBTUElNX0NPTkZJR19DUEhBX01zayAoMHgxVUwgPDwgU1BJTV9DT05GSUdfQ1BIQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1BIQSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX0NQSEFfTGVhZGluZyAoMFVMKSAvKiE8IFNhbXBsZSBvbiBsZWFkaW5nIGVkZ2Ugb2YgY2xvY2ssIHNoaWZ0IHNlcmlhbCBkYXRhIG9uIHRyYWlsaW5nIGVkZ2UgKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX0NQSEFfVHJhaWxpbmcgKDFVTCkgLyohPCBTYW1wbGUgb24gdHJhaWxpbmcgZWRnZSBvZiBjbG9jaywgc2hpZnQgc2VyaWFsIGRhdGEgb24gbGVhZGluZyBlZGdlICovDQorDQorLyogQml0IDAgOiBCaXQgb3JkZXIgKi8NCisjZGVmaW5lIFNQSU1fQ09ORklHX09SREVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9SREVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9DT05GSUdfT1JERVJfTXNrICgweDFVTCA8PCBTUElNX0NPTkZJR19PUkRFUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1JERVIgZmllbGQuICovDQorI2RlZmluZSBTUElNX0NPTkZJR19PUkRFUl9Nc2JGaXJzdCAoMFVMKSAvKiE8IE1vc3Qgc2lnbmlmaWNhbnQgYml0IHNoaWZ0ZWQgb3V0IGZpcnN0ICovDQorI2RlZmluZSBTUElNX0NPTkZJR19PUkRFUl9Mc2JGaXJzdCAoMVVMKSAvKiE8IExlYXN0IHNpZ25pZmljYW50IGJpdCBzaGlmdGVkIG91dCBmaXJzdCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX0lGVElNSU5HX1JYREVMQVkgKi8NCisvKiBEZXNjcmlwdGlvbjogU2FtcGxlIGRlbGF5IGZvciBpbnB1dCBzZXJpYWwgZGF0YSBvbiBNSVNPICovDQorDQorLyogQml0cyAyLi4wIDogU2FtcGxlIGRlbGF5IGZvciBpbnB1dCBzZXJpYWwgZGF0YSBvbiBNSVNPLiBUaGUgdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgNjQgTUh6IGNsb2NrIGN5Y2xlcyAoMTUuNjI1IG5zKSBkZWxheSBmcm9tIHRoZSB0aGUgc2FtcGxpbmcgZWRnZSBvZiBTQ0sgKGxlYWRpbmcgZWRnZSBmb3IgQ09ORklHLkNQSEEgPSAwLCB0cmFpbGluZyBlZGdlIGZvciBDT05GSUcuQ1BIQSA9IDEpIHVudGlsIHRoZSBpbnB1dCBzZXJpYWwgZGF0YSBpcyBzYW1wbGVkLiBBcyBlbiBleGFtcGxlLCBpZiBSWERFTEFZID0gMCBhbmQgQ09ORklHLkNQSEEgPSAwLCB0aGUgaW5wdXQgc2VyaWFsIGRhdGEgaXMgc2FtcGxlZCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgU0NLLiAqLw0KKyNkZWZpbmUgU1BJTV9JRlRJTUlOR19SWERFTEFZX1JYREVMQVlfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlhERUxBWSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fSUZUSU1JTkdfUlhERUxBWV9SWERFTEFZX01zayAoMHg3VUwgPDwgU1BJTV9JRlRJTUlOR19SWERFTEFZX1JYREVMQVlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYREVMQVkgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSU1fSUZUSU1JTkdfQ1NORFVSICovDQorLyogRGVzY3JpcHRpb246IE1pbmltdW0gZHVyYXRpb24gYmV0d2VlbiBlZGdlIG9mIENTTiBhbmQgZWRnZSBvZiBTQ0sgYW5kIG1pbmltdW0gZHVyYXRpb24gQ1NOIG11c3Qgc3RheSBoaWdoIGJldHdlZW4gdHJhbnNhY3Rpb25zICovDQorDQorLyogQml0cyA3Li4wIDogTWluaW11bSBkdXJhdGlvbiBiZXR3ZWVuIGVkZ2Ugb2YgQ1NOIGFuZCBlZGdlIG9mIFNDSyBhbmQgbWluaW11bSBkdXJhdGlvbiBDU04gbXVzdCBzdGF5IGhpZ2ggYmV0d2VlbiB0cmFuc2FjdGlvbnMuIFRoZSB2YWx1ZSBpcyBzcGVjaWZpZWQgaW4gbnVtYmVyIG9mIDY0IE1IeiBjbG9jayBjeWNsZXMgKDE1LjYyNSBucykuICovDQorI2RlZmluZSBTUElNX0lGVElNSU5HX0NTTkRVUl9DU05EVVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1NORFVSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJTV9JRlRJTUlOR19DU05EVVJfQ1NORFVSX01zayAoMHhGRlVMIDw8IFNQSU1fSUZUSU1JTkdfQ1NORFVSX0NTTkRVUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1NORFVSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElNX09SQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBCeXRlIHRyYW5zbWl0dGVkIGFmdGVyIFRYRC5NQVhDTlQgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIGluIHRoZSBjYXNlIHdoZW4gUlhELk1BWENOVCBpcyBncmVhdGVyIHRoYW4gVFhELk1BWENOVCAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IEJ5dGUgdHJhbnNtaXR0ZWQgYWZ0ZXIgVFhELk1BWENOVCBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgaW4gdGhlIGNhc2Ugd2hlbiBSWEQuTUFYQ05UIGlzIGdyZWF0ZXIgdGhhbiBUWEQuTUFYQ05ULiAqLw0KKyNkZWZpbmUgU1BJTV9PUkNfT1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9SQyBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSU1fT1JDX09SQ19Nc2sgKDB4RkZVTCA8PCBTUElNX09SQ19PUkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9SQyBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBTUElTICovDQorLyogRGVzY3JpcHRpb246IFNQSSBTbGF2ZSAwICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDIgOiBTaG9ydGN1dCBiZXR3ZWVuIEVORCBldmVudCBhbmQgQUNRVUlSRSB0YXNrICovDQorI2RlZmluZSBTUElTX1NIT1JUU19FTkRfQUNRVUlSRV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRfQUNRVUlSRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfU0hPUlRTX0VORF9BQ1FVSVJFX01zayAoMHgxVUwgPDwgU1BJU19TSE9SVFNfRU5EX0FDUVVJUkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORF9BQ1FVSVJFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19TSE9SVFNfRU5EX0FDUVVJUkVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBTUElTX1NIT1JUU19FTkRfQUNRVUlSRV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBBQ1FVSVJFRCBldmVudCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9BQ1FVSVJFRF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQUNRVUlSRUQgZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0FDUVVJUkVEX01zayAoMHgxVUwgPDwgU1BJU19JTlRFTlNFVF9BQ1FVSVJFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNRVUlSRUQgZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0FDUVVJUkVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfQUNRVUlSRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfQUNRVUlSRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfRU5EUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORFJYX01zayAoMHgxVUwgPDwgU1BJU19JTlRFTlNFVF9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5TRVRfRU5EUlhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EIGV2ZW50ICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORF9Nc2sgKDB4MVVMIDw8IFNQSVNfSU5URU5TRVRfRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkQgZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBTUElTX0lOVEVOU0VUX0VORF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTlNFVF9FTkRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEFDUVVJUkVEIGV2ZW50ICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0FDUVVJUkVEX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBBQ1FVSVJFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfQUNRVUlSRURfTXNrICgweDFVTCA8PCBTUElTX0lOVEVOQ0xSX0FDUVVJUkVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBBQ1FVSVJFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfQUNRVUlSRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9BQ1FVSVJFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9BQ1FVSVJFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EUlhfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0VORFJYX01zayAoMHgxVUwgPDwgU1BJU19JTlRFTkNMUl9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBTUElTX0lOVEVOQ0xSX0VORFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EUlhfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORCBldmVudCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9FTkRfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9FTkRfTXNrICgweDFVTCA8PCBTUElTX0lOVEVOQ0xSX0VORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9FTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgU1BJU19JTlRFTkNMUl9FTkRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFNQSVNfSU5URU5DTFJfRU5EX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1NFTVNUQVQgKi8NCisvKiBEZXNjcmlwdGlvbjogU2VtYXBob3JlIHN0YXR1cyByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgMS4uMCA6IFNlbWFwaG9yZSBzdGF0dXMgKi8NCisjZGVmaW5lIFNQSVNfU0VNU1RBVF9TRU1TVEFUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNFTVNUQVQgZmllbGQuICovDQorI2RlZmluZSBTUElTX1NFTVNUQVRfU0VNU1RBVF9Nc2sgKDB4M1VMIDw8IFNQSVNfU0VNU1RBVF9TRU1TVEFUX1BvcykgLyohPCBCaXQgbWFzayBvZiBTRU1TVEFUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19TRU1TVEFUX1NFTVNUQVRfRnJlZSAoMFVMKSAvKiE8IFNlbWFwaG9yZSBpcyBmcmVlICovDQorI2RlZmluZSBTUElTX1NFTVNUQVRfU0VNU1RBVF9DUFUgKDFVTCkgLyohPCBTZW1hcGhvcmUgaXMgYXNzaWduZWQgdG8gQ1BVICovDQorI2RlZmluZSBTUElTX1NFTVNUQVRfU0VNU1RBVF9TUElTICgyVUwpIC8qITwgU2VtYXBob3JlIGlzIGFzc2lnbmVkIHRvIFNQSSBzbGF2ZSAqLw0KKyNkZWZpbmUgU1BJU19TRU1TVEFUX1NFTVNUQVRfQ1BVUGVuZGluZyAoM1VMKSAvKiE8IFNlbWFwaG9yZSBpcyBhc3NpZ25lZCB0byBTUEkgYnV0IGEgaGFuZG92ZXIgdG8gdGhlIENQVSBpcyBwZW5kaW5nICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IFN0YXR1cyBmcm9tIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXQgMSA6IFJYIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3RlZCwgYW5kIHByZXZlbnRlZCAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUkZMT1dfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZFUkZMT1cgZmllbGQuICovDQorI2RlZmluZSBTUElTX1NUQVRVU19PVkVSRkxPV19Nc2sgKDB4MVVMIDw8IFNQSVNfU1RBVFVTX09WRVJGTE9XX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSRkxPVyBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJGTE9XX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUkZMT1dfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJGTE9XX0NsZWFyICgxVUwpIC8qITwgV3JpdGU6IGNsZWFyIGVycm9yIG9uIHdyaXRpbmcgJzEnICovDQorDQorLyogQml0IDAgOiBUWCBidWZmZXIgb3Zlci1yZWFkIGRldGVjdGVkLCBhbmQgcHJldmVudGVkICovDQorI2RlZmluZSBTUElTX1NUQVRVU19PVkVSUkVBRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVkVSUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfU1RBVFVTX09WRVJSRUFEX01zayAoMHgxVUwgPDwgU1BJU19TVEFUVVNfT1ZFUlJFQURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUlJFQURfTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IGVycm9yIG5vdCBwcmVzZW50ICovDQorI2RlZmluZSBTUElTX1NUQVRVU19PVkVSUkVBRF9QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogZXJyb3IgcHJlc2VudCAqLw0KKyNkZWZpbmUgU1BJU19TVEFUVVNfT1ZFUlJFQURfQ2xlYXIgKDFVTCkgLyohPCBXcml0ZTogY2xlYXIgZXJyb3Igb24gd3JpdGluZyAnMScgKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFNQSSBzbGF2ZSAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFNQSSBzbGF2ZSAqLw0KKyNkZWZpbmUgU1BJU19FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4RlVMIDw8IFNQSVNfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBTUEkgc2xhdmUgKi8NCisjZGVmaW5lIFNQSVNfRU5BQkxFX0VOQUJMRV9FbmFibGVkICgyVUwpIC8qITwgRW5hYmxlIFNQSSBzbGF2ZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1BTRUxfU0NLICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNDSyAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9TQ0tfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9TQ0tfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFNQSVNfUFNFTF9TQ0tfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9TQ0tfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9TQ0tfUE9SVF9Nc2sgKDB4M1VMIDw8IFNQSVNfUFNFTF9TQ0tfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfU0NLX1BJTl9Nc2sgKDB4MUZVTCA8PCBTUElTX1BTRUxfU0NLX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1BTRUxfTUlTTyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBNSVNPIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NSVNPX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJU19QU0VMX01JU09fQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NSVNPX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01JU09fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NSVNPX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NSVNPX1BPUlRfTXNrICgweDNVTCA8PCBTUElTX1BTRUxfTUlTT19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NSVNPX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBTUElTX1BTRUxfTUlTT19QSU5fTXNrICgweDFGVUwgPDwgU1BJU19QU0VMX01JU09fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfUFNFTF9NT1NJICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIE1PU0kgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01PU0lfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBTUElTX1BTRUxfTU9TSV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01PU0lfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBTUElTX1BTRUxfTU9TSV9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01PU0lfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01PU0lfUE9SVF9Nc2sgKDB4M1VMIDw8IFNQSVNfUFNFTF9NT1NJX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX01PU0lfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9NT1NJX1BJTl9Nc2sgKDB4MUZVTCA8PCBTUElTX1BTRUxfTU9TSV9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19QU0VMX0NTTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBDU04gc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX0NTTl9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX0NTTl9DT05ORUNUX01zayAoMHgxVUwgPDwgU1BJU19QU0VMX0NTTl9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX0NTTl9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19QU0VMX0NTTl9QT1JUX01zayAoMHgzVUwgPDwgU1BJU19QU0VMX0NTTl9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUFNFTF9DU05fUElOX01zayAoMHgxRlVMIDw8IFNQSVNfUFNFTF9DU05fUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfUlhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBSWEQgZGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IFJYRCBkYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFNQSVNfUlhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19SWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBTUElTX1JYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfUlhEX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHJlY2VpdmUgYnVmZmVyICovDQorI2RlZmluZSBTUElTX1JYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUlhEX01BWENOVF9NQVhDTlRfTXNrICgweEZGVUwgPDwgU1BJU19SWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1JYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGxhc3QgZ3JhbnRlZCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiB0aGUgbGFzdCBncmFudGVkIHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBTUElTX1JYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfUlhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGVUwgPDwgU1BJU19SWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1RYRF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogVFhEIGRhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBUWEQgZGF0YSBwb2ludGVyICovDQorI2RlZmluZSBTUElTX1RYRF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfVFhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgU1BJU19UWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1RYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICovDQorDQorLyogQml0cyA3Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICovDQorI2RlZmluZSBTUElTX1RYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfVFhEX01BWENOVF9NQVhDTlRfTXNrICgweEZGVUwgPDwgU1BJU19UWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBTUElTX1RYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIGxhc3QgZ3JhbnRlZCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCBpbiBsYXN0IGdyYW50ZWQgdHJhbnNhY3Rpb24gKi8NCisjZGVmaW5lIFNQSVNfVFhEX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19UWERfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4RkZVTCA8PCBTUElTX1RYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMiA6IFNlcmlhbCBjbG9jayAoU0NLKSBwb2xhcml0eSAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfQ1BPTF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBDUE9MIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfQ1BPTF9Nc2sgKDB4MVVMIDw8IFNQSVNfQ09ORklHX0NQT0xfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENQT0wgZmllbGQuICovDQorI2RlZmluZSBTUElTX0NPTkZJR19DUE9MX0FjdGl2ZUhpZ2ggKDBVTCkgLyohPCBBY3RpdmUgaGlnaCAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfQ1BPTF9BY3RpdmVMb3cgKDFVTCkgLyohPCBBY3RpdmUgbG93ICovDQorDQorLyogQml0IDEgOiBTZXJpYWwgY2xvY2sgKFNDSykgcGhhc2UgKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQSEFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQ1BIQSBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX0NQSEFfTXNrICgweDFVTCA8PCBTUElTX0NPTkZJR19DUEhBX1BvcykgLyohPCBCaXQgbWFzayBvZiBDUEhBIGZpZWxkLiAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfQ1BIQV9MZWFkaW5nICgwVUwpIC8qITwgU2FtcGxlIG9uIGxlYWRpbmcgZWRnZSBvZiBjbG9jaywgc2hpZnQgc2VyaWFsIGRhdGEgb24gdHJhaWxpbmcgZWRnZSAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfQ1BIQV9UcmFpbGluZyAoMVVMKSAvKiE8IFNhbXBsZSBvbiB0cmFpbGluZyBlZGdlIG9mIGNsb2NrLCBzaGlmdCBzZXJpYWwgZGF0YSBvbiBsZWFkaW5nIGVkZ2UgKi8NCisNCisvKiBCaXQgMCA6IEJpdCBvcmRlciAqLw0KKyNkZWZpbmUgU1BJU19DT05GSUdfT1JERVJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1JERVIgZmllbGQuICovDQorI2RlZmluZSBTUElTX0NPTkZJR19PUkRFUl9Nc2sgKDB4MVVMIDw8IFNQSVNfQ09ORklHX09SREVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBPUkRFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX09SREVSX01zYkZpcnN0ICgwVUwpIC8qITwgTW9zdCBzaWduaWZpY2FudCBiaXQgc2hpZnRlZCBvdXQgZmlyc3QgKi8NCisjZGVmaW5lIFNQSVNfQ09ORklHX09SREVSX0xzYkZpcnN0ICgxVUwpIC8qITwgTGVhc3Qgc2lnbmlmaWNhbnQgYml0IHNoaWZ0ZWQgb3V0IGZpcnN0ICovDQorDQorLyogUmVnaXN0ZXI6IFNQSVNfREVGICovDQorLyogRGVzY3JpcHRpb246IERlZmF1bHQgY2hhcmFjdGVyLiBDaGFyYWN0ZXIgY2xvY2tlZCBvdXQgaW4gY2FzZSBvZiBhbiBpZ25vcmVkIHRyYW5zYWN0aW9uLiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IERlZmF1bHQgY2hhcmFjdGVyLiBDaGFyYWN0ZXIgY2xvY2tlZCBvdXQgaW4gY2FzZSBvZiBhbiBpZ25vcmVkIHRyYW5zYWN0aW9uLiAqLw0KKyNkZWZpbmUgU1BJU19ERUZfREVGX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERFRiBmaWVsZC4gKi8NCisjZGVmaW5lIFNQSVNfREVGX0RFRl9Nc2sgKDB4RkZVTCA8PCBTUElTX0RFRl9ERUZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERFRiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogU1BJU19PUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogT3Zlci1yZWFkIGNoYXJhY3RlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE92ZXItcmVhZCBjaGFyYWN0ZXIuIENoYXJhY3RlciBjbG9ja2VkIG91dCBhZnRlciBhbiBvdmVyLXJlYWQgb2YgdGhlIHRyYW5zbWl0IGJ1ZmZlci4gKi8NCisjZGVmaW5lIFNQSVNfT1JDX09SQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUkMgZmllbGQuICovDQorI2RlZmluZSBTUElTX09SQ19PUkNfTXNrICgweEZGVUwgPDwgU1BJU19PUkNfT1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBPUkMgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogVEVNUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBUZW1wZXJhdHVyZSBTZW5zb3IgKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgREFUQVJEWSBldmVudCAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTlNFVF9EQVRBUkRZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERBVEFSRFkgZmllbGQuICovDQorI2RlZmluZSBURU1QX0lOVEVOU0VUX0RBVEFSRFlfTXNrICgweDFVTCA8PCBURU1QX0lOVEVOU0VUX0RBVEFSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERBVEFSRFkgZmllbGQuICovDQorI2RlZmluZSBURU1QX0lOVEVOU0VUX0RBVEFSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTlNFVF9EQVRBUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBURU1QX0lOVEVOU0VUX0RBVEFSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgREFUQVJEWSBldmVudCAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTkNMUl9EQVRBUkRZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIERBVEFSRFkgZmllbGQuICovDQorI2RlZmluZSBURU1QX0lOVEVOQ0xSX0RBVEFSRFlfTXNrICgweDFVTCA8PCBURU1QX0lOVEVOQ0xSX0RBVEFSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERBVEFSRFkgZmllbGQuICovDQorI2RlZmluZSBURU1QX0lOVEVOQ0xSX0RBVEFSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVEVNUF9JTlRFTkNMUl9EQVRBUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBURU1QX0lOVEVOQ0xSX0RBVEFSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfVEVNUCAqLw0KKy8qIERlc2NyaXB0aW9uOiBUZW1wZXJhdHVyZSBpbiBkZWdDICgwLjI1ZGVnIHN0ZXBzKSAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBUZW1wZXJhdHVyZSBpbiBkZWdDICgwLjI1ZGVnIHN0ZXBzKSAqLw0KKyNkZWZpbmUgVEVNUF9URU1QX1RFTVBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVEVNUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfVEVNUF9URU1QX01zayAoMHhGRkZGRkZGRlVMIDw8IFRFTVBfVEVNUF9URU1QX1BvcykgLyohPCBCaXQgbWFzayBvZiBURU1QIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0EwICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIG9mIDFzdCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTEuLjAgOiBTbG9wZSBvZiAxc3QgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQTBfQTBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQTAgZmllbGQuICovDQorI2RlZmluZSBURU1QX0EwX0EwX01zayAoMHhGRkZVTCA8PCBURU1QX0EwX0EwX1BvcykgLyohPCBCaXQgbWFzayBvZiBBMCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9BMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBTbG9wZSBvZiAybmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDExLi4wIDogU2xvcGUgb2YgMm5kIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0ExX0ExX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEExIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9BMV9BMV9Nc2sgKDB4RkZGVUwgPDwgVEVNUF9BMV9BMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQTEgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQTIgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgb2YgM3JkIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMS4uMCA6IFNsb3BlIG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9BMl9BMl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBMiBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQTJfQTJfTXNrICgweEZGRlVMIDw8IFRFTVBfQTJfQTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEEyIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0EzICovDQorLyogRGVzY3JpcHRpb246IFNsb3BlIG9mIDR0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTEuLjAgOiBTbG9wZSBvZiA0dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQTNfQTNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQTMgZmllbGQuICovDQorI2RlZmluZSBURU1QX0EzX0EzX01zayAoMHhGRkZVTCA8PCBURU1QX0EzX0EzX1BvcykgLyohPCBCaXQgbWFzayBvZiBBMyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9BNCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTbG9wZSBvZiA1dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDExLi4wIDogU2xvcGUgb2YgNXRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0E0X0E0X1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEE0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9BNF9BNF9Nc2sgKDB4RkZGVUwgPDwgVEVNUF9BNF9BNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQTQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQTUgKi8NCisvKiBEZXNjcmlwdGlvbjogU2xvcGUgb2YgNnRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMS4uMCA6IFNsb3BlIG9mIDZ0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9BNV9BNV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBNSBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQTVfQTVfTXNrICgweEZGRlVMIDw8IFRFTVBfQTVfQTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEE1IGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0IwICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IG9mIDFzdCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiB5LWludGVyY2VwdCBvZiAxc3QgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQjBfQjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQjAgZmllbGQuICovDQorI2RlZmluZSBURU1QX0IwX0IwX01zayAoMHgzRkZGVUwgPDwgVEVNUF9CMF9CMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQjAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQjEgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgb2YgMm5kIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMy4uMCA6IHktaW50ZXJjZXB0IG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9CMV9CMV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQjFfQjFfTXNrICgweDNGRkZVTCA8PCBURU1QX0IxX0IxX1BvcykgLyohPCBCaXQgbWFzayBvZiBCMSBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9CMiAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBvZiAzcmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogeS1pbnRlcmNlcHQgb2YgM3JkIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0IyX0IyX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9CMl9CMl9Nc2sgKDB4M0ZGRlVMIDw8IFRFTVBfQjJfQjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEIyIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX0IzICovDQorLyogRGVzY3JpcHRpb246IHktaW50ZXJjZXB0IG9mIDR0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgMTMuLjAgOiB5LWludGVyY2VwdCBvZiA0dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfQjNfQjNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQjMgZmllbGQuICovDQorI2RlZmluZSBURU1QX0IzX0IzX01zayAoMHgzRkZGVUwgPDwgVEVNUF9CM19CM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQjMgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfQjQgKi8NCisvKiBEZXNjcmlwdGlvbjogeS1pbnRlcmNlcHQgb2YgNXRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyAxMy4uMCA6IHktaW50ZXJjZXB0IG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9CNF9CNF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCNCBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfQjRfQjRfTXNrICgweDNGRkZVTCA8PCBURU1QX0I0X0I0X1BvcykgLyohPCBCaXQgbWFzayBvZiBCNCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9CNSAqLw0KKy8qIERlc2NyaXB0aW9uOiB5LWludGVyY2VwdCBvZiA2dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDEzLi4wIDogeS1pbnRlcmNlcHQgb2YgNnRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX0I1X0I1X1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9CNV9CNV9Nc2sgKDB4M0ZGRlVMIDw8IFRFTVBfQjVfQjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEI1IGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX1QwICovDQorLyogRGVzY3JpcHRpb246IEVuZCBwb2ludCBvZiAxc3QgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBFbmQgcG9pbnQgb2YgMXN0IHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX1QwX1QwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9UMF9UMF9Nc2sgKDB4RkZVTCA8PCBURU1QX1QwX1QwX1BvcykgLyohPCBCaXQgbWFzayBvZiBUMCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9UMSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmQgcG9pbnQgb2YgMm5kIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogRW5kIHBvaW50IG9mIDJuZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9UMV9UMV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfVDFfVDFfTXNrICgweEZGVUwgPDwgVEVNUF9UMV9UMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVDEgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRFTVBfVDIgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5kIHBvaW50IG9mIDNyZCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IEVuZCBwb2ludCBvZiAzcmQgcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisjZGVmaW5lIFRFTVBfVDJfVDJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVDIgZmllbGQuICovDQorI2RlZmluZSBURU1QX1QyX1QyX01zayAoMHhGRlVMIDw8IFRFTVBfVDJfVDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFQyIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBURU1QX1QzICovDQorLyogRGVzY3JpcHRpb246IEVuZCBwb2ludCBvZiA0dGggcGllY2Ugd2lzZSBsaW5lYXIgZnVuY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBFbmQgcG9pbnQgb2YgNHRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorI2RlZmluZSBURU1QX1QzX1QzX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVEVNUF9UM19UM19Nc2sgKDB4RkZVTCA8PCBURU1QX1QzX1QzX1BvcykgLyohPCBCaXQgbWFzayBvZiBUMyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVEVNUF9UNCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmQgcG9pbnQgb2YgNXRoIHBpZWNlIHdpc2UgbGluZWFyIGZ1bmN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogRW5kIHBvaW50IG9mIDV0aCBwaWVjZSB3aXNlIGxpbmVhciBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgVEVNUF9UNF9UNF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUNCBmaWVsZC4gKi8NCisjZGVmaW5lIFRFTVBfVDRfVDRfTXNrICgweEZGVUwgPDwgVEVNUF9UNF9UNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVDQgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogVElNRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogVGltZXIvQ291bnRlciAwICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAxMyA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVs1XSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfU1RPUF9Qb3MgKDEzVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTVfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNV9TVE9QX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkU1X1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU1X1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNV9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTIgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbNF0gZXZlbnQgYW5kIFNUT1AgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X1NUT1BfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkU0X1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTRfU1RPUF9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFNF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFNF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTRfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDExIDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzNdIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19TVE9QX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFM19TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUzX1NUT1BfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTNfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTNfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUzX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxMCA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVsyXSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfU1RPUF9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTJfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMl9TVE9QX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkUyX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfU1RPUF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMl9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgOSA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVsxXSBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTFfU1RPUF9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMV9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX1NUT1BfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTFfU1RPUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTFfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMV9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA4IDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzBdIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMF9TVE9QX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUwX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTBfU1RPUF9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFMF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUwX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTBfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDUgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbNV0gZXZlbnQgYW5kIENMRUFSIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNV9DTEVBUl9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFNV9DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFNV9DTEVBUl9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFNV9DTEVBUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTVfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfQ0xFQVJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTVfQ0xFQVJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCA0IDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzRdIGV2ZW50IGFuZCBDTEVBUiB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTRfQ0xFQVJfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTRfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTRfQ0xFQVJfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTRfQ0xFQVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU0X0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X0NMRUFSX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkU0X0NMRUFSX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMyA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVszXSBldmVudCBhbmQgQ0xFQVIgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUzX0NMRUFSX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUzX0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUzX0NMRUFSX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkUzX0NMRUFSX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFM19DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19DTEVBUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFM19DTEVBUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDIgOiBTaG9ydGN1dCBiZXR3ZWVuIENPTVBBUkVbMl0gZXZlbnQgYW5kIENMRUFSIHRhc2sgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMl9DTEVBUl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMl9DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMl9DTEVBUl9Nc2sgKDB4MVVMIDw8IFRJTUVSX1NIT1JUU19DT01QQVJFMl9DTEVBUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTJfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfQ0xFQVJfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTJfQ0xFQVJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxIDogU2hvcnRjdXQgYmV0d2VlbiBDT01QQVJFWzFdIGV2ZW50IGFuZCBDTEVBUiB0YXNrICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTFfQ0xFQVJfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTFfQ0xFQVIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TSE9SVFNfQ09NUEFSRTFfQ0xFQVJfTXNrICgweDFVTCA8PCBUSU1FUl9TSE9SVFNfQ09NUEFSRTFfQ0xFQVJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxX0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX0NMRUFSX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUxX0NMRUFSX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gQ09NUEFSRVswXSBldmVudCBhbmQgQ0xFQVIgdGFzayAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUwX0NMRUFSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUwX0NMRUFSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfU0hPUlRTX0NPTVBBUkUwX0NMRUFSX01zayAoMHgxVUwgPDwgVElNRVJfU0hPUlRTX0NPTVBBUkUwX0NMRUFSX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMF9DTEVBUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMF9DTEVBUl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFRJTUVSX1NIT1JUU19DT01QQVJFMF9DTEVBUl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVs1XSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTVfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkU1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTVfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTlNFVF9DT01QQVJFNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTUgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFNV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFNV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTVfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbNF0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU0X1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFNCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU0X01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5TRVRfQ09NUEFSRTRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkU0X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzNdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFM19Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFM19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVsyXSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTJfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTJfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTIgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTJfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5TRVRfQ09NUEFSRTFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5TRVRfQ09NUEFSRTFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUxX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzBdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMF9Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOU0VUX0NPTVBBUkUwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTlNFVF9DT01QQVJFMF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVElNRVJfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbNV0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU1X1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFNSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU1X01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5DTFJfQ09NUEFSRTVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkU1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkU1X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVs0XSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTRfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkU0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTRfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTkNMUl9DT01QQVJFNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTQgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzNdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFM19Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTMgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFM19Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUzX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMyBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFM19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENPTVBBUkVbMl0gZXZlbnQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUyX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBDT01QQVJFMiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUyX01zayAoMHgxVUwgPDwgVElNRVJfSU5URU5DTFJfQ09NUEFSRTJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTVBBUkUyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUyX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQ09NUEFSRVsxXSBldmVudCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIENPTVBBUkUxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfTXNrICgweDFVTCA8PCBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09NUEFSRTEgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBDT01QQVJFWzBdIGV2ZW50ICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMF9Qb3MgKDE2VUwpIC8qITwgUG9zaXRpb24gb2YgQ09NUEFSRTAgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMF9Nc2sgKDB4MVVMIDw8IFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUwX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT01QQVJFMCBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRJTUVSX0lOVEVOQ0xSX0NPTVBBUkUwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUSU1FUl9JTlRFTkNMUl9DT01QQVJFMF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVElNRVJfU1RBVFVTICovDQorLyogRGVzY3JpcHRpb246IFRpbWVyIHN0YXR1cyAqLw0KKw0KKy8qIEJpdCAwIDogVGltZXIgc3RhdHVzICovDQorI2RlZmluZSBUSU1FUl9TVEFUVVNfU1RBVFVTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1NUQVRVU19TVEFUVVNfTXNrICgweDFVTCA8PCBUSU1FUl9TVEFUVVNfU1RBVFVTX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBUSU1FUl9TVEFUVVNfU1RBVFVTX1N0b3BwZWQgKDBVTCkgLyohPCBUaW1lciBpcyBzdG9wcGVkICovDQorI2RlZmluZSBUSU1FUl9TVEFUVVNfU1RBVFVTX1N0YXJ0ZWQgKDFVTCkgLyohPCBUaW1lciBpcyBzdGFydGVkICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX01PREUgKi8NCisvKiBEZXNjcmlwdGlvbjogVGltZXIgbW9kZSBzZWxlY3Rpb24gKi8NCisNCisvKiBCaXRzIDEuLjAgOiBUaW1lciBtb2RlICovDQorI2RlZmluZSBUSU1FUl9NT0RFX01PREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX01PREVfTU9ERV9Nc2sgKDB4M1VMIDw8IFRJTUVSX01PREVfTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX01PREVfTU9ERV9UaW1lciAoMFVMKSAvKiE8IFNlbGVjdCBUaW1lciBtb2RlICovDQorI2RlZmluZSBUSU1FUl9NT0RFX01PREVfQ291bnRlciAoMVVMKSAvKiE8IERlcHJlY2F0ZWQgZW51bWVyYXRvciAtICBTZWxlY3QgQ291bnRlciBtb2RlICovDQorI2RlZmluZSBUSU1FUl9NT0RFX01PREVfTG93UG93ZXJDb3VudGVyICgyVUwpIC8qITwgU2VsZWN0IExvdyBQb3dlciBDb3VudGVyIG1vZGUgKi8NCisNCisvKiBSZWdpc3RlcjogVElNRVJfQklUTU9ERSAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmUgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgYnkgdGhlIFRJTUVSICovDQorDQorLyogQml0cyAxLi4wIDogVGltZXIgYml0IHdpZHRoICovDQorI2RlZmluZSBUSU1FUl9CSVRNT0RFX0JJVE1PREVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQklUTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0JJVE1PREVfQklUTU9ERV9Nc2sgKDB4M1VMIDw8IFRJTUVSX0JJVE1PREVfQklUTU9ERV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQklUTU9ERSBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX0JJVE1PREVfQklUTU9ERV8xNkJpdCAoMFVMKSAvKiE8IDE2IGJpdCB0aW1lciBiaXQgd2lkdGggKi8NCisjZGVmaW5lIFRJTUVSX0JJVE1PREVfQklUTU9ERV8wOEJpdCAoMVVMKSAvKiE8IDggYml0IHRpbWVyIGJpdCB3aWR0aCAqLw0KKyNkZWZpbmUgVElNRVJfQklUTU9ERV9CSVRNT0RFXzI0Qml0ICgyVUwpIC8qITwgMjQgYml0IHRpbWVyIGJpdCB3aWR0aCAqLw0KKyNkZWZpbmUgVElNRVJfQklUTU9ERV9CSVRNT0RFXzMyQml0ICgzVUwpIC8qITwgMzIgYml0IHRpbWVyIGJpdCB3aWR0aCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUSU1FUl9QUkVTQ0FMRVIgKi8NCisvKiBEZXNjcmlwdGlvbjogVGltZXIgcHJlc2NhbGVyIHJlZ2lzdGVyICovDQorDQorLyogQml0cyAzLi4wIDogUHJlc2NhbGVyIHZhbHVlICovDQorI2RlZmluZSBUSU1FUl9QUkVTQ0FMRVJfUFJFU0NBTEVSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBSRVNDQUxFUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRJTUVSX1BSRVNDQUxFUl9QUkVTQ0FMRVJfTXNrICgweEZVTCA8PCBUSU1FUl9QUkVTQ0FMRVJfUFJFU0NBTEVSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUkVTQ0FMRVIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRJTUVSX0NDICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBDYXB0dXJlL0NvbXBhcmUgcmVnaXN0ZXIgMCAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBDYXB0dXJlL0NvbXBhcmUgdmFsdWUgKi8NCisjZGVmaW5lIFRJTUVSX0NDX0NDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENDIGZpZWxkLiAqLw0KKyNkZWZpbmUgVElNRVJfQ0NfQ0NfTXNrICgweEZGRkZGRkZGVUwgPDwgVElNRVJfQ0NfQ0NfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENDIGZpZWxkLiAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFRXSSAqLw0KKy8qIERlc2NyaXB0aW9uOiBJMkMgY29tcGF0aWJsZSBUd28tV2lyZSBJbnRlcmZhY2UgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDEgOiBTaG9ydGN1dCBiZXR3ZWVuIEJCIGV2ZW50IGFuZCBTVE9QIHRhc2sgKi8NCisjZGVmaW5lIFRXSV9TSE9SVFNfQkJfU1RPUF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBCQl9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVE9QX01zayAoMHgxVUwgPDwgVFdJX1NIT1JUU19CQl9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQl9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVE9QX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMCA6IFNob3J0Y3V0IGJldHdlZW4gQkIgZXZlbnQgYW5kIFNVU1BFTkQgdGFzayAqLw0KKyNkZWZpbmUgVFdJX1NIT1JUU19CQl9TVVNQRU5EX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJCX1NVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBUV0lfU0hPUlRTX0JCX1NVU1BFTkRfTXNrICgweDFVTCA8PCBUV0lfU0hPUlRTX0JCX1NVU1BFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJCX1NVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBUV0lfU0hPUlRTX0JCX1NVU1BFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUV0lfU0hPUlRTX0JCX1NVU1BFTkRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVVNQRU5ERUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVVNQRU5ERURfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNVU1BFTkRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVVNQRU5ERURfTXNrICgweDFVTCA8PCBUV0lfSU5URU5TRVRfU1VTUEVOREVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1VTUEVOREVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVVNQRU5ERURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVVNQRU5ERURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEJCIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfQkJfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJCIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX0JCX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOU0VUX0JCX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9CQl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfQkJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9CQl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX0VSUk9SX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOU0VUX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9FUlJPUl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWERTRU5UIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfVFhEU0VOVF9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBUWERTRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1RYRFNFTlRfTXNrICgweDFVTCA8PCBUV0lfSU5URU5TRVRfVFhEU0VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEU0VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9UWERTRU5UX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9UWERTRU5UX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfVFhEU0VOVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWERSRUFEWSBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1JYRFJFQURZX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1JYRFJFQURZX01zayAoMHgxVUwgPDwgVFdJX0lOVEVOU0VUX1JYRFJFQURZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9SWERSRUFEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfUlhEUkVBRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9SWERSRUFEWV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBUV0lfSU5URU5TRVRfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5TRVRfU1RPUFBFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVVNQRU5ERUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVVNQRU5ERURfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNVU1BFTkRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVVNQRU5ERURfTXNrICgweDFVTCA8PCBUV0lfSU5URU5DTFJfU1VTUEVOREVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1VTUEVOREVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVVNQRU5ERURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVVNQRU5ERURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBCQiBldmVudCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0JCX1BvcyAoMTRVTCkgLyohPCBQb3NpdGlvbiBvZiBCQiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9CQl9Nc2sgKDB4MVVMIDw8IFRXSV9JTlRFTkNMUl9CQl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkIgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfQkJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0JCX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfQkJfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfRVJST1JfTXNrICgweDFVTCA8PCBUV0lfSU5URU5DTFJfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWERTRU5UIGV2ZW50ICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfVFhEU0VOVF9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBUWERTRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1RYRFNFTlRfTXNrICgweDFVTCA8PCBUV0lfSU5URU5DTFJfVFhEU0VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEU0VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9UWERTRU5UX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9UWERTRU5UX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfVFhEU0VOVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgUlhEUkVBRFkgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9SWERSRUFEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERSRUFEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9SWERSRUFEWV9Nc2sgKDB4MVVMIDw8IFRXSV9JTlRFTkNMUl9SWERSRUFEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfUlhEUkVBRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1JYRFJFQURZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfUlhEUkVBRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lfSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFRXSV9JTlRFTkNMUl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSV9JTlRFTkNMUl9TVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfRVJST1JTUkMgKi8NCisvKiBEZXNjcmlwdGlvbjogRXJyb3Igc291cmNlICovDQorDQorLyogQml0IDIgOiBOQUNLIHJlY2VpdmVkIGFmdGVyIHNlbmRpbmcgYSBkYXRhIGJ5dGUgKHdyaXRlICcxJyB0byBjbGVhcikgKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19ETkFDS19Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBETkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19ETkFDS19Nc2sgKDB4MVVMIDw8IFRXSV9FUlJPUlNSQ19ETkFDS19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRE5BQ0sgZmllbGQuICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfRE5BQ0tfTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IGVycm9yIG5vdCBwcmVzZW50ICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfRE5BQ0tfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisNCisvKiBCaXQgMSA6IE5BQ0sgcmVjZWl2ZWQgYWZ0ZXIgc2VuZGluZyB0aGUgYWRkcmVzcyAod3JpdGUgJzEnIHRvIGNsZWFyKSAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX0FOQUNLX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFOQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX0FOQUNLX01zayAoMHgxVUwgPDwgVFdJX0VSUk9SU1JDX0FOQUNLX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTkFDSyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19BTkFDS19Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19BTkFDS19QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogZXJyb3IgcHJlc2VudCAqLw0KKw0KKy8qIEJpdCAwIDogT3ZlcnJ1biBlcnJvciAqLw0KKyNkZWZpbmUgVFdJX0VSUk9SU1JDX09WRVJSVU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZFUlJVTiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9FUlJPUlNSQ19PVkVSUlVOX01zayAoMHgxVUwgPDwgVFdJX0VSUk9SU1JDX09WRVJSVU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfT1ZFUlJVTl9Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogbm8gb3ZlcnJ1biBvY2N1cmVkICovDQorI2RlZmluZSBUV0lfRVJST1JTUkNfT1ZFUlJVTl9QcmVzZW50ICgxVUwpIC8qITwgUmVhZDogb3ZlcnJ1biBvY2N1cmVkICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9FTkFCTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIFRXSSAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFRXSSAqLw0KKyNkZWZpbmUgVFdJX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBUV0lfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFRXSSAqLw0KKyNkZWZpbmUgVFdJX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoNVVMKSAvKiE8IEVuYWJsZSBUV0kgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX1BTRUxfU0NMICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNDTCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0NMX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBUV0lfUFNFTF9TQ0xfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0NMX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NDTF9QT1JUX01zayAoMHgzVUwgPDwgVFdJX1BTRUxfU0NMX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0NMX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBUV0lfUFNFTF9TQ0xfUElOX01zayAoMHgxRlVMIDw8IFRXSV9QU0VMX1NDTF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX1BTRUxfU0RBICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNEQSAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0RBX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBUV0lfUFNFTF9TREFfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0RBX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9QU0VMX1NEQV9QT1JUX01zayAoMHgzVUwgPDwgVFdJX1BTRUxfU0RBX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVFdJX1BTRUxfU0RBX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBUV0lfUFNFTF9TREFfUElOX01zayAoMHgxRlVMIDw8IFRXSV9QU0VMX1NEQV9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJX1JYRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBSWEQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBSWEQgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFRXSV9SWERfUlhEX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9SWERfUlhEX01zayAoMHhGRlVMIDw8IFRXSV9SWERfUlhEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9UWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogVFhEIHJlZ2lzdGVyICovDQorDQorLyogQml0cyA3Li4wIDogVFhEIHJlZ2lzdGVyICovDQorI2RlZmluZSBUV0lfVFhEX1RYRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEQgZmllbGQuICovDQorI2RlZmluZSBUV0lfVFhEX1RYRF9Nc2sgKDB4RkZVTCA8PCBUV0lfVFhEX1RYRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lfRlJFUVVFTkNZICovDQorLyogRGVzY3JpcHRpb246IFRXSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogVFdJIG1hc3RlciBjbG9jayBmcmVxdWVuY3kgKi8NCisjZGVmaW5lIFRXSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSRVFVRU5DWSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX01zayAoMHhGRkZGRkZGRlVMIDw8IFRXSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBUV0lfRlJFUVVFTkNZX0ZSRVFVRU5DWV9LMTAwICgweDAxOTgwMDAwVUwpIC8qITwgMTAwIGticHMgKi8NCisjZGVmaW5lIFRXSV9GUkVRVUVOQ1lfRlJFUVVFTkNZX0syNTAgKDB4MDQwMDAwMDBVTCkgLyohPCAyNTAga2JwcyAqLw0KKyNkZWZpbmUgVFdJX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzQwMCAoMHgwNjY4MDAwMFVMKSAvKiE8IDQwMCBrYnBzIChhY3R1YWwgcmF0ZSA0MTAuMjU2IGticHMpICovDQorDQorLyogUmVnaXN0ZXI6IFRXSV9BRERSRVNTICovDQorLyogRGVzY3JpcHRpb246IEFkZHJlc3MgdXNlZCBpbiB0aGUgVFdJIHRyYW5zZmVyICovDQorDQorLyogQml0cyA2Li4wIDogQWRkcmVzcyB1c2VkIGluIHRoZSBUV0kgdHJhbnNmZXIgKi8NCisjZGVmaW5lIFRXSV9BRERSRVNTX0FERFJFU1NfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUkVTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSV9BRERSRVNTX0FERFJFU1NfTXNrICgweDdGVUwgPDwgVFdJX0FERFJFU1NfQUREUkVTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUyBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBUV0lNICovDQorLyogRGVzY3JpcHRpb246IEkyQyBjb21wYXRpYmxlIFR3by1XaXJlIE1hc3RlciBJbnRlcmZhY2Ugd2l0aCBFYXN5RE1BIDAgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMTIgOiBTaG9ydGN1dCBiZXR3ZWVuIExBU1RSWCBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUUlhfU1RPUF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFJYX1NUT1AgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUUlhfU1RPUF9Nc2sgKDB4MVVMIDw8IFRXSU1fU0hPUlRTX0xBU1RSWF9TVE9QX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUUlhfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RSWF9TVE9QX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFJYX1NUT1BfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAxMCA6IFNob3J0Y3V0IGJldHdlZW4gTEFTVFJYIGV2ZW50IGFuZCBTVEFSVFRYIHRhc2sgKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RSWF9TVEFSVFRYX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUUlhfU1RBUlRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RSWF9TVEFSVFRYX01zayAoMHgxVUwgPDwgVFdJTV9TSE9SVFNfTEFTVFJYX1NUQVJUVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RSWF9TVEFSVFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFJYX1NUQVJUVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUUlhfU1RBUlRUWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDkgOiBTaG9ydGN1dCBiZXR3ZWVuIExBU1RUWCBldmVudCBhbmQgU1RPUCB0YXNrICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1RPUF9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUVFhfU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RUWF9TVE9QX01zayAoMHgxVUwgPDwgVFdJTV9TSE9SVFNfTEFTVFRYX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RUWF9TVE9QIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NUT1BfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1RPUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDggOiBTaG9ydGN1dCBiZXR3ZWVuIExBU1RUWCBldmVudCBhbmQgU1VTUEVORCB0YXNrICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1VTUEVORF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUVFhfU1VTUEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RUWF9TVVNQRU5EX01zayAoMHgxVUwgPDwgVFdJTV9TSE9SVFNfTEFTVFRYX1NVU1BFTkRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RUWF9TVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NVU1BFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1VTUEVORF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDcgOiBTaG9ydGN1dCBiZXR3ZWVuIExBU1RUWCBldmVudCBhbmQgU1RBUlRSWCB0YXNrICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1RBUlRSWF9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUVFhfU1RBUlRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fU0hPUlRTX0xBU1RUWF9TVEFSVFJYX01zayAoMHgxVUwgPDwgVFdJTV9TSE9SVFNfTEFTVFRYX1NUQVJUUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RUWF9TVEFSVFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9TSE9SVFNfTEFTVFRYX1NUQVJUUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUV0lNX1NIT1JUU19MQVNUVFhfU1RBUlRSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fSU5URU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBMQVNUVFggZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fTEFTVFRYX1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUVFggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0xBU1RUWF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5fTEFTVFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUVFggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0xBU1RUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fTEFTVFRYX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIExBU1RSWCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9MQVNUUlhfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIExBU1RSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fTEFTVFJYX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTl9MQVNUUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fTEFTVFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9MQVNUUlhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1RYU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9UWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOX1RYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9UWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fUlhTVEFSVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5fUlhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1JYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNVU1BFTkRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9TVVNQRU5ERURfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNVU1BFTkRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fU1VTUEVOREVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTl9TVVNQRU5ERURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNVU1BFTkRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fU1VTUEVOREVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9TVVNQRU5ERURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fRVJST1JfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5fRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lNX0lOVEVOX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1NUT1BQRURfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lNX0lOVEVOX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTEFTVFRYIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0xBU1RUWF9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgTEFTVFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUVFhfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOU0VUX0xBU1RUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTEFTVFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUVFhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUVFhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfTEFTVFRYX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBMQVNUUlggZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfTEFTVFJYX1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBMQVNUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0xBU1RSWF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5TRVRfTEFTVFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBMQVNUUlggZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0xBU1RSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0xBU1RSWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9MQVNUUlhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9UWFNUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTlNFVF9UWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfVFhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfVFhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1RYU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1JYU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9SWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOU0VUX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9SWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9SWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfUlhTVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVVNQRU5ERUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfU1VTUEVOREVEX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NVU1BFTkRFRF9Nc2sgKDB4MVVMIDw8IFRXSU1fSU5URU5TRVRfU1VTUEVOREVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVVNQRU5ERUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NVU1BFTkRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NVU1BFTkRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVVNQRU5ERURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0VSUk9SX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTlNFVF9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5TRVRfRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NUT1BQRURfTXNrICgweDFVTCA8PCBUV0lNX0lOVEVOU0VUX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTlNFVF9TVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOU0VUX1NUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIExBU1RUWCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9MQVNUVFhfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIExBU1RUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFRYX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9MQVNUVFhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFRYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RUWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjMgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIExBU1RSWCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9MQVNUUlhfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIExBU1RSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFJYX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9MQVNUUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExBU1RSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFJYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfTEFTVFJYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0xBU1RSWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9UWFNUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9UWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfVFhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfVFhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1RYU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfUlhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9SWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1JYU1RBUlRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNVU1BFTkRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9TVVNQRU5ERURfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNVU1BFTkRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1VTUEVOREVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9TVVNQRU5ERURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNVU1BFTkRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1VTUEVOREVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1VTUEVOREVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX1NVU1BFTkRFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0VSUk9SX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0lOVEVOQ0xSX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfRVJST1JfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9TVE9QUEVEX01zayAoMHgxVUwgPDwgVFdJTV9JTlRFTkNMUl9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSU1fSU5URU5DTFJfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJTV9JTlRFTkNMUl9TVE9QUEVEX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX0VSUk9SU1JDICovDQorLyogRGVzY3JpcHRpb246IEVycm9yIHNvdXJjZSAqLw0KKw0KKy8qIEJpdCAyIDogTkFDSyByZWNlaXZlZCBhZnRlciBzZW5kaW5nIGEgZGF0YSBieXRlICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX0ROQUNLX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEROQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19ETkFDS19Nc2sgKDB4MVVMIDw8IFRXSU1fRVJST1JTUkNfRE5BQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEROQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19ETkFDS19Ob3RSZWNlaXZlZCAoMFVMKSAvKiE8IEVycm9yIGRpZCBub3Qgb2NjdXIgKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfRE5BQ0tfUmVjZWl2ZWQgKDFVTCkgLyohPCBFcnJvciBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAxIDogTkFDSyByZWNlaXZlZCBhZnRlciBzZW5kaW5nIHRoZSBhZGRyZXNzICh3cml0ZSAnMScgdG8gY2xlYXIpICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX0FOQUNLX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFOQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19BTkFDS19Nc2sgKDB4MVVMIDw8IFRXSU1fRVJST1JTUkNfQU5BQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFOQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19BTkFDS19Ob3RSZWNlaXZlZCAoMFVMKSAvKiE8IEVycm9yIGRpZCBub3Qgb2NjdXIgKi8NCisjZGVmaW5lIFRXSU1fRVJST1JTUkNfQU5BQ0tfUmVjZWl2ZWQgKDFVTCkgLyohPCBFcnJvciBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAwIDogT3ZlcnJ1biBlcnJvciAqLw0KKyNkZWZpbmUgVFdJTV9FUlJPUlNSQ19PVkVSUlVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX09WRVJSVU5fTXNrICgweDFVTCA8PCBUV0lNX0VSUk9SU1JDX09WRVJSVU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX09WRVJSVU5fTm90UmVjZWl2ZWQgKDBVTCkgLyohPCBFcnJvciBkaWQgbm90IG9jY3VyICovDQorI2RlZmluZSBUV0lNX0VSUk9SU1JDX09WRVJSVU5fUmVjZWl2ZWQgKDFVTCkgLyohPCBFcnJvciBvY2N1cnJlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgVFdJTSAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFRXSU0gKi8NCisjZGVmaW5lIFRXSU1fRU5BQkxFX0VOQUJMRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBUV0lNX0VOQUJMRV9FTkFCTEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fRU5BQkxFX0VOQUJMRV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgVFdJTSAqLw0KKyNkZWZpbmUgVFdJTV9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDZVTCkgLyohPCBFbmFibGUgVFdJTSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1BTRUxfU0NMICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNDTCBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0NMX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0NMX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBUV0lNX1BTRUxfU0NMX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0NMX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1BTRUxfU0NMX1BPUlRfTXNrICgweDNVTCA8PCBUV0lNX1BTRUxfU0NMX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NDTF9QSU5fTXNrICgweDFGVUwgPDwgVFdJTV9QU0VMX1NDTF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9QU0VMX1NEQSAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBTREEgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NEQV9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NEQV9DT05ORUNUX01zayAoMHgxVUwgPDwgVFdJTV9QU0VMX1NEQV9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NEQV9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJTV9QU0VMX1NEQV9QT1JUX01zayAoMHgzVUwgPDwgVFdJTV9QU0VMX1NEQV9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fUFNFTF9TREFfUElOX01zayAoMHgxRlVMIDw8IFRXSU1fUFNFTF9TREFfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fRlJFUVVFTkNZICovDQorLyogRGVzY3JpcHRpb246IFRXSSBmcmVxdWVuY3kuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogVFdJIG1hc3RlciBjbG9jayBmcmVxdWVuY3kgKi8NCisjZGVmaW5lIFRXSU1fRlJFUVVFTkNZX0ZSRVFVRU5DWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfTXNrICgweEZGRkZGRkZGVUwgPDwgVFdJTV9GUkVRVUVOQ1lfRlJFUVVFTkNZX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkVRVUVOQ1kgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzEwMCAoMHgwMTk4MDAwMFVMKSAvKiE8IDEwMCBrYnBzICovDQorI2RlZmluZSBUV0lNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzI1MCAoMHgwNDAwMDAwMFVMKSAvKiE8IDI1MCBrYnBzICovDQorI2RlZmluZSBUV0lNX0ZSRVFVRU5DWV9GUkVRVUVOQ1lfSzQwMCAoMHgwNjQwMDAwMFVMKSAvKiE8IDQwMCBrYnBzICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fUlhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRGF0YSBwb2ludGVyICovDQorI2RlZmluZSBUV0lNX1JYRF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fUlhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVFdJTV9SWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1JYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBidWZmZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAqLw0KKyNkZWZpbmUgVFdJTV9SWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1JYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRlVMIDw8IFRXSU1fUlhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9SWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbi4gSW4gY2FzZSBvZiBOQUNLIGVycm9yLCBpbmNsdWRlcyB0aGUgTkFDSydlZCBieXRlLiAqLw0KKyNkZWZpbmUgVFdJTV9SWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1JYRF9BTU9VTlRfQU1PVU5UX01zayAoMHhGRlVMIDw8IFRXSU1fUlhEX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9SWERfTElTVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFYXN5RE1BIGxpc3QgdHlwZSAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IExpc3QgdHlwZSAqLw0KKyNkZWZpbmUgVFdJTV9SWERfTElTVF9MSVNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIExJU1QgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1JYRF9MSVNUX0xJU1RfTXNrICgweDdVTCA8PCBUV0lNX1JYRF9MSVNUX0xJU1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIExJU1QgZmllbGQuICovDQorI2RlZmluZSBUV0lNX1JYRF9MSVNUX0xJU1RfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIEVhc3lETUEgbGlzdCAqLw0KKyNkZWZpbmUgVFdJTV9SWERfTElTVF9MSVNUX0FycmF5TGlzdCAoMVVMKSAvKiE8IFVzZSBhcnJheSBsaXN0ICovDQorDQorLyogUmVnaXN0ZXI6IFRXSU1fVFhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRGF0YSBwb2ludGVyICovDQorI2RlZmluZSBUV0lNX1RYRF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fVFhEX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVFdJTV9UWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1RYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICovDQorDQorLyogQml0cyA3Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyICovDQorI2RlZmluZSBUV0lNX1RYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fVFhEX01BWENOVF9NQVhDTlRfTXNrICgweEZGVUwgPDwgVFdJTV9UWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1RYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uLiBJbiBjYXNlIG9mIE5BQ0sgZXJyb3IsIGluY2x1ZGVzIHRoZSBOQUNLJ2VkIGJ5dGUuICovDQorI2RlZmluZSBUV0lNX1RYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fVFhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGVUwgPDwgVFdJTV9UWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lNX1RYRF9MSVNUICovDQorLyogRGVzY3JpcHRpb246IEVhc3lETUEgbGlzdCB0eXBlICovDQorDQorLyogQml0cyAyLi4wIDogTGlzdCB0eXBlICovDQorI2RlZmluZSBUV0lNX1RYRF9MSVNUX0xJU1RfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTElTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fVFhEX0xJU1RfTElTVF9Nc2sgKDB4N1VMIDw8IFRXSU1fVFhEX0xJU1RfTElTVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTElTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSU1fVFhEX0xJU1RfTElTVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgRWFzeURNQSBsaXN0ICovDQorI2RlZmluZSBUV0lNX1RYRF9MSVNUX0xJU1RfQXJyYXlMaXN0ICgxVUwpIC8qITwgVXNlIGFycmF5IGxpc3QgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJTV9BRERSRVNTICovDQorLyogRGVzY3JpcHRpb246IEFkZHJlc3MgdXNlZCBpbiB0aGUgVFdJIHRyYW5zZmVyICovDQorDQorLyogQml0cyA2Li4wIDogQWRkcmVzcyB1c2VkIGluIHRoZSBUV0kgdHJhbnNmZXIgKi8NCisjZGVmaW5lIFRXSU1fQUREUkVTU19BRERSRVNTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MgZmllbGQuICovDQorI2RlZmluZSBUV0lNX0FERFJFU1NfQUREUkVTU19Nc2sgKDB4N0ZVTCA8PCBUV0lNX0FERFJFU1NfQUREUkVTU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUyBmaWVsZC4gKi8NCisNCisNCisvKiBQZXJpcGhlcmFsOiBUV0lTICovDQorLyogRGVzY3JpcHRpb246IEkyQyBjb21wYXRpYmxlIFR3by1XaXJlIFNsYXZlIEludGVyZmFjZSB3aXRoIEVhc3lETUEgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX1NIT1JUUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBTaG9ydGN1dCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAxNCA6IFNob3J0Y3V0IGJldHdlZW4gUkVBRCBldmVudCBhbmQgU1VTUEVORCB0YXNrICovDQorI2RlZmluZSBUV0lTX1NIT1JUU19SRUFEX1NVU1BFTkRfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQURfU1VTUEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfU0hPUlRTX1JFQURfU1VTUEVORF9Nc2sgKDB4MVVMIDw8IFRXSVNfU0hPUlRTX1JFQURfU1VTUEVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRF9TVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19TSE9SVFNfUkVBRF9TVVNQRU5EX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVFdJU19TSE9SVFNfUkVBRF9TVVNQRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMTMgOiBTaG9ydGN1dCBiZXR3ZWVuIFdSSVRFIGV2ZW50IGFuZCBTVVNQRU5EIHRhc2sgKi8NCisjZGVmaW5lIFRXSVNfU0hPUlRTX1dSSVRFX1NVU1BFTkRfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIFdSSVRFX1NVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1NIT1JUU19XUklURV9TVVNQRU5EX01zayAoMHgxVUwgPDwgVFdJU19TSE9SVFNfV1JJVEVfU1VTUEVORF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1JJVEVfU1VTUEVORCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfU0hPUlRTX1dSSVRFX1NVU1BFTkRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBUV0lTX1NIT1JUU19XUklURV9TVVNQRU5EX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19JTlRFTiAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjYgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJFQUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUkVBRF9Qb3MgKDI2VUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUkVBRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5fUkVBRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVBRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUkVBRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUkVBRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI1IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBXUklURSBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9XUklURV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1dSSVRFX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTl9XUklURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1dSSVRFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9XUklURV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1RYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5fVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fVFhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUlhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTl9SWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9SWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fRVJST1JfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5fRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lTX0lOVEVOX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgU1RPUFBFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTl9TVE9QUEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1NUT1BQRURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOX1NUT1BQRURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1NUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBUV0lTX0lOVEVOX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX0lOVEVOU0VUICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMjYgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUkVBRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SRUFEX1BvcyAoMjZVTCkgLyohPCBQb3NpdGlvbiBvZiBSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SRUFEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTlNFVF9SRUFEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSRUFEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SRUFEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUkVBRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SRUFEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBXUklURSBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9XUklURV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1dSSVRFX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTlNFVF9XUklURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1dSSVRFX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfV1JJVEVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfV1JJVEVfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9UWFNUQVJURURfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTlNFVF9UWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfVFhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfVFhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1RYU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX1JYU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SWFNUQVJURURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOU0VUX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9SWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfUlhTVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9FUlJPUl9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5TRVRfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOU0VUX0VSUk9SX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfU1RPUFBFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9TVE9QUEVEX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTlNFVF9TVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9TVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5TRVRfU1RPUFBFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTlNFVF9TVE9QUEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDI2IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSRUFEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JFQURfUG9zICgyNlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JFQURfTXNrICgweDFVTCA8PCBUV0lTX0lOVEVOQ0xSX1JFQURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JFQURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SRUFEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JFQURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDI1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBXUklURSBldmVudCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9XUklURV9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1dSSVRFX01zayAoMHgxVUwgPDwgVFdJU19JTlRFTkNMUl9XUklURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1JJVEUgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1dSSVRFX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfV1JJVEVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfV1JJVEVfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1RYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5DTFJfVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9UWFNUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfUlhTVEFSVEVEX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5DTFJfUlhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1JYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9SWFNUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9FUlJPUl9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5DTFJfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19JTlRFTkNMUl9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX0VSUk9SX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1NUT1BQRURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFRXSVNfSU5URU5DTFJfU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfU1RPUFBFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0lOVEVOQ0xSX1NUT1BQRURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfSU5URU5DTFJfU1RPUFBFRF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19FUlJPUlNSQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBFcnJvciBzb3VyY2UgKi8NCisNCisvKiBCaXQgMyA6IFRYIGJ1ZmZlciBvdmVyLXJlYWQgZGV0ZWN0ZWQsIGFuZCBwcmV2ZW50ZWQgKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfT1ZFUlJFQURfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgT1ZFUlJFQUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX09WRVJSRUFEX01zayAoMHgxVUwgPDwgVFdJU19FUlJPUlNSQ19PVkVSUkVBRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZFUlJFQUQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX09WRVJSRUFEX05vdERldGVjdGVkICgwVUwpIC8qITwgRXJyb3IgZGlkIG5vdCBvY2N1ciAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19PVkVSUkVBRF9EZXRlY3RlZCAoMVVMKSAvKiE8IEVycm9yIG9jY3VycmVkICovDQorDQorLyogQml0IDIgOiBOQUNLIHNlbnQgYWZ0ZXIgcmVjZWl2aW5nIGEgZGF0YSBieXRlICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX0ROQUNLX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEROQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19ETkFDS19Nc2sgKDB4MVVMIDw8IFRXSVNfRVJST1JTUkNfRE5BQ0tfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEROQUNLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19ETkFDS19Ob3RSZWNlaXZlZCAoMFVMKSAvKiE8IEVycm9yIGRpZCBub3Qgb2NjdXIgKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfRE5BQ0tfUmVjZWl2ZWQgKDFVTCkgLyohPCBFcnJvciBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAwIDogUlggYnVmZmVyIG92ZXJmbG93IGRldGVjdGVkLCBhbmQgcHJldmVudGVkICovDQorI2RlZmluZSBUV0lTX0VSUk9SU1JDX09WRVJGTE9XX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJGTE9XIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19PVkVSRkxPV19Nc2sgKDB4MVVMIDw8IFRXSVNfRVJST1JTUkNfT1ZFUkZMT1dfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE9WRVJGTE9XIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FUlJPUlNSQ19PVkVSRkxPV19Ob3REZXRlY3RlZCAoMFVMKSAvKiE8IEVycm9yIGRpZCBub3Qgb2NjdXIgKi8NCisjZGVmaW5lIFRXSVNfRVJST1JTUkNfT1ZFUkZMT1dfRGV0ZWN0ZWQgKDFVTCkgLyohPCBFcnJvciBvY2N1cnJlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX01BVENIICovDQorLyogRGVzY3JpcHRpb246IFN0YXR1cyByZWdpc3RlciBpbmRpY2F0aW5nIHdoaWNoIGFkZHJlc3MgaGFkIGEgbWF0Y2ggKi8NCisNCisvKiBCaXQgMCA6IFdoaWNoIG9mIHRoZSBhZGRyZXNzZXMgaW4ge0FERFJFU1N9IG1hdGNoZWQgdGhlIGluY29taW5nIGFkZHJlc3MgKi8NCisjZGVmaW5lIFRXSVNfTUFUQ0hfTUFUQ0hfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFUQ0ggZmllbGQuICovDQorI2RlZmluZSBUV0lTX01BVENIX01BVENIX01zayAoMHgxVUwgPDwgVFdJU19NQVRDSF9NQVRDSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFUQ0ggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBUV0lTICovDQorDQorLyogQml0cyAzLi4wIDogRW5hYmxlIG9yIGRpc2FibGUgVFdJUyAqLw0KKyNkZWZpbmUgVFdJU19FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4RlVMIDw8IFRXSVNfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBUV0lTICovDQorI2RlZmluZSBUV0lTX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoOVVMKSAvKiE8IEVuYWJsZSBUV0lTICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfUFNFTF9TQ0wgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgU0NMIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TQ0xfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TQ0xfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFRXSVNfUFNFTF9TQ0xfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TQ0xfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfUFNFTF9TQ0xfUE9SVF9Nc2sgKDB4M1VMIDw8IFRXSVNfUFNFTF9TQ0xfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0NMX1BJTl9Nc2sgKDB4MUZVTCA8PCBUV0lTX1BTRUxfU0NMX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX1BTRUxfU0RBICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFNEQSBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0RBX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0RBX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBUV0lTX1BTRUxfU0RBX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0RBX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1BTRUxfU0RBX1BPUlRfTXNrICgweDNVTCA8PCBUV0lTX1BTRUxfU0RBX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19QU0VMX1NEQV9QSU5fTXNrICgweDFGVUwgPDwgVFdJU19QU0VMX1NEQV9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19SWERfUFRSICovDQorLyogRGVzY3JpcHRpb246IFJYRCBEYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogUlhEIERhdGEgcG9pbnRlciAqLw0KKyNkZWZpbmUgVFdJU19SWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1JYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFRXSVNfUlhEX1BUUl9QVFJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBUUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19SWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFJYRCBidWZmZXIgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBSWEQgYnVmZmVyICovDQorI2RlZmluZSBUV0lTX1JYRF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfUlhEX01BWENOVF9NQVhDTlRfTXNrICgweEZGVUwgPDwgVFdJU19SWERfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX1JYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IFJYRCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCBSWEQgdHJhbnNhY3Rpb24gKi8NCisjZGVmaW5lIFRXSVNfUlhEX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19SWERfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4RkZVTCA8PCBUV0lTX1JYRF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfVFhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBUWEQgRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IFRYRCBEYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFRXSVNfVFhEX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19UWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBUV0lTX1RYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFRXSVNfVFhEX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBUWEQgYnVmZmVyICovDQorDQorLyogQml0cyA3Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gVFhEIGJ1ZmZlciAqLw0KKyNkZWZpbmUgVFdJU19UWERfTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBUV0lTX1RYRF9NQVhDTlRfTUFYQ05UX01zayAoMHhGRlVMIDw8IFRXSVNfVFhEX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVFdJU19UWERfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCBUWEQgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgVFhEIHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBUV0lTX1RYRF9BTU9VTlRfQU1PVU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfVFhEX0FNT1VOVF9BTU9VTlRfTXNrICgweEZGVUwgPDwgVFdJU19UWERfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX0FERFJFU1MgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIFRXSSBzbGF2ZSBhZGRyZXNzIDAgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBUV0kgc2xhdmUgYWRkcmVzcyAqLw0KKyNkZWZpbmUgVFdJU19BRERSRVNTX0FERFJFU1NfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUkVTUyBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfQUREUkVTU19BRERSRVNTX01zayAoMHg3RlVMIDw8IFRXSVNfQUREUkVTU19BRERSRVNTX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSRVNTIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX0NPTkZJRyAqLw0KKy8qIERlc2NyaXB0aW9uOiBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgYWRkcmVzcyBtYXRjaCBtZWNoYW5pc20gKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGFkZHJlc3MgbWF0Y2hpbmcgb24gQUREUkVTU1sxXSAqLw0KKyNkZWZpbmUgVFdJU19DT05GSUdfQUREUkVTUzFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgQUREUkVTUzEgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0NPTkZJR19BRERSRVNTMV9Nc2sgKDB4MVVMIDw8IFRXSVNfQ09ORklHX0FERFJFU1MxX1BvcykgLyohPCBCaXQgbWFzayBvZiBBRERSRVNTMSBmaWVsZC4gKi8NCisjZGVmaW5lIFRXSVNfQ09ORklHX0FERFJFU1MxX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZWQgKi8NCisjZGVmaW5lIFRXSVNfQ09ORklHX0FERFJFU1MxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBhZGRyZXNzIG1hdGNoaW5nIG9uIEFERFJFU1NbMF0gKi8NCisjZGVmaW5lIFRXSVNfQ09ORklHX0FERFJFU1MwX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFJFU1MwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVFdJU19DT05GSUdfQUREUkVTUzBfTXNrICgweDFVTCA8PCBUV0lTX0NPTkZJR19BRERSRVNTMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUkVTUzAgZmllbGQuICovDQorI2RlZmluZSBUV0lTX0NPTkZJR19BRERSRVNTMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBUV0lTX0NPTkZJR19BRERSRVNTMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBUV0lTX09SQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBPdmVyLXJlYWQgY2hhcmFjdGVyLiBDaGFyYWN0ZXIgc2VudCBvdXQgaW4gY2FzZSBvZiBhbiBvdmVyLXJlYWQgb2YgdGhlIHRyYW5zbWl0IGJ1ZmZlci4gKi8NCisNCisvKiBCaXRzIDcuLjAgOiBPdmVyLXJlYWQgY2hhcmFjdGVyLiBDaGFyYWN0ZXIgc2VudCBvdXQgaW4gY2FzZSBvZiBhbiBvdmVyLXJlYWQgb2YgdGhlIHRyYW5zbWl0IGJ1ZmZlci4gKi8NCisjZGVmaW5lIFRXSVNfT1JDX09SQ19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPUkMgZmllbGQuICovDQorI2RlZmluZSBUV0lTX09SQ19PUkNfTXNrICgweEZGVUwgPDwgVFdJU19PUkNfT1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBPUkMgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogVUFSVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyL1RyYW5zbWl0dGVyICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIE5DVFMgZXZlbnQgYW5kIFNUT1BSWCB0YXNrICovDQorI2RlZmluZSBVQVJUX1NIT1JUU19OQ1RTX1NUT1BSWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBOQ1RTX1NUT1BSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfU0hPUlRTX05DVFNfU1RPUFJYX01zayAoMHgxVUwgPDwgVUFSVF9TSE9SVFNfTkNUU19TVE9QUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5DVFNfU1RPUFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9TSE9SVFNfTkNUU19TVE9QUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBVQVJUX1NIT1JUU19OQ1RTX1NUT1BSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIENUUyBldmVudCBhbmQgU1RBUlRSWCB0YXNrICovDQorI2RlZmluZSBVQVJUX1NIT1JUU19DVFNfU1RBUlRSWF9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBDVFNfU1RBUlRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfU0hPUlRTX0NUU19TVEFSVFJYX01zayAoMHgxVUwgPDwgVUFSVF9TSE9SVFNfQ1RTX1NUQVJUUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENUU19TVEFSVFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9TSE9SVFNfQ1RTX1NUQVJUUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBVQVJUX1NIT1JUU19DVFNfU1RBUlRSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWFRPIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYVE9fUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYVE9fTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOU0VUX1JYVE9fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYVE9fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWFRPX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYVE9fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0VSUk9SX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTlNFVF9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5TRVRfRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1RYRFJEWV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBUWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1RYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5TRVRfVFhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1RYRFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1RYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9UWERSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYRFJEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5TRVRfUlhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYRFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX1JYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9SWERSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTkNUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9OQ1RTX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX05DVFNfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOU0VUX05DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX05DVFNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9OQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX05DVFNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ1RTIGV2ZW50ICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0NUU19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0NUU19Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5TRVRfQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBDVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0NUU19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOU0VUX0NUU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTlNFVF9DVFNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfSU5URU5DTFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGlzYWJsZSBpbnRlcnJ1cHQgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYVE8gZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhUT19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUlhUTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhUT19Nc2sgKDB4MVVMIDw8IFVBUlRfSU5URU5DTFJfUlhUT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhUTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhUT19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYVE9fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhUT19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX0VSUk9SX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTkNMUl9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfRVJST1JfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9UWERSRFlfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9UWERSRFlfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOQ0xSX1RYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9UWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9UWERSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfVFhEUkRZX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWERSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhEUkRZX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhEUkRZX01zayAoMHgxVUwgPDwgVUFSVF9JTlRFTkNMUl9SWERSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhEUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfUlhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX1JYRFJEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgTkNUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9OQ1RTX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX05DVFNfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOQ0xSX05DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX05DVFNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9OQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJUX0lOVEVOQ0xSX05DVFNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9DVFNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9DVFNfTXNrICgweDFVTCA8PCBVQVJUX0lOVEVOQ0xSX0NUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9DVFNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVF9JTlRFTkNMUl9DVFNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRfSU5URU5DTFJfQ1RTX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJUX0VSUk9SU1JDICovDQorLyogRGVzY3JpcHRpb246IEVycm9yIHNvdXJjZSAqLw0KKw0KKy8qIEJpdCAzIDogQnJlYWsgY29uZGl0aW9uICovDQorI2RlZmluZSBVQVJUX0VSUk9SU1JDX0JSRUFLX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEJSRUFLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19CUkVBS19Nc2sgKDB4MVVMIDw8IFVBUlRfRVJST1JTUkNfQlJFQUtfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEJSRUFLIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19CUkVBS19Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfQlJFQUtfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisNCisvKiBCaXQgMiA6IEZyYW1pbmcgZXJyb3Igb2NjdXJyZWQgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfRlJBTUlOR19Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBGUkFNSU5HIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19GUkFNSU5HX01zayAoMHgxVUwgPDwgVUFSVF9FUlJPUlNSQ19GUkFNSU5HX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNSU5HIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19GUkFNSU5HX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19GUkFNSU5HX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDEgOiBQYXJpdHkgZXJyb3IgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfUEFSSVRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfUEFSSVRZX01zayAoMHgxVUwgPDwgVUFSVF9FUlJPUlNSQ19QQVJJVFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfUEFSSVRZX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19QQVJJVFlfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisNCisvKiBCaXQgMCA6IE92ZXJydW4gZXJyb3IgKi8NCisjZGVmaW5lIFVBUlRfRVJST1JTUkNfT1ZFUlJVTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19PVkVSUlVOX01zayAoMHgxVUwgPDwgVUFSVF9FUlJPUlNSQ19PVkVSUlVOX1BvcykgLyohPCBCaXQgbWFzayBvZiBPVkVSUlVOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19PVkVSUlVOX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVUFSVF9FUlJPUlNSQ19PVkVSUlVOX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfRU5BQkxFICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBVQVJUICovDQorDQorLyogQml0cyAzLi4wIDogRW5hYmxlIG9yIGRpc2FibGUgVUFSVCAqLw0KKyNkZWZpbmUgVUFSVF9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfRU5BQkxFX0VOQUJMRV9Nc2sgKDB4RlVMIDw8IFVBUlRfRU5BQkxFX0VOQUJMRV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBVQVJUICovDQorI2RlZmluZSBVQVJUX0VOQUJMRV9FTkFCTEVfRW5hYmxlZCAoNFVMKSAvKiE8IEVuYWJsZSBVQVJUICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfUFNFTF9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgUlRTICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JUU19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JUU19DT05ORUNUX01zayAoMHgxVUwgPDwgVUFSVF9QU0VMX1JUU19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JUU19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JUU19QT1JUX01zayAoMHgzVUwgPDwgVUFSVF9QU0VMX1JUU19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SVFNfUElOX01zayAoMHgxRlVMIDw8IFVBUlRfUFNFTF9SVFNfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfUFNFTF9UWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgVFhEICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1RYRF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1RYRF9DT05ORUNUX01zayAoMHgxVUwgPDwgVUFSVF9QU0VMX1RYRF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1RYRF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1RYRF9QT1JUX01zayAoMHgzVUwgPDwgVUFSVF9QU0VMX1RYRF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9UWERfUElOX01zayAoMHgxRlVMIDw8IFVBUlRfUFNFTF9UWERfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfUFNFTF9DVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgQ1RTICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX0NUU19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX0NUU19DT05ORUNUX01zayAoMHgxVUwgPDwgVUFSVF9QU0VMX0NUU19DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX0NUU19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX0NUU19QT1JUX01zayAoMHgzVUwgPDwgVUFSVF9QU0VMX0NUU19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9DVFNfUElOX01zayAoMHgxRlVMIDw8IFVBUlRfUFNFTF9DVFNfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfUFNFTF9SWEQgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgUlhEICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JYRF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JYRF9DT05ORUNUX01zayAoMHgxVUwgPDwgVUFSVF9QU0VMX1JYRF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JYRF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9QU0VMX1JYRF9QT1JUX01zayAoMHgzVUwgPDwgVUFSVF9QU0VMX1JYRF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfUFNFTF9SWERfUElOX01zayAoMHgxRlVMIDw8IFVBUlRfUFNFTF9SWERfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfUlhEICovDQorLyogRGVzY3JpcHRpb246IFJYRCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFJYIGRhdGEgcmVjZWl2ZWQgaW4gcHJldmlvdXMgdHJhbnNmZXJzLCBkb3VibGUgYnVmZmVyZWQgKi8NCisjZGVmaW5lIFVBUlRfUlhEX1JYRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSWEQgZmllbGQuICovDQorI2RlZmluZSBVQVJUX1JYRF9SWERfTXNrICgweEZGVUwgPDwgVUFSVF9SWERfUlhEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWEQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfVFhEICovDQorLyogRGVzY3JpcHRpb246IFRYRCByZWdpc3RlciAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFRYIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgKi8NCisjZGVmaW5lIFVBUlRfVFhEX1RYRF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWEQgZmllbGQuICovDQorI2RlZmluZSBVQVJUX1RYRF9UWERfTXNrICgweEZGVUwgPDwgVUFSVF9UWERfVFhEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWEQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRfQkFVRFJBVEUgKi8NCisvKiBEZXNjcmlwdGlvbjogQmF1ZCByYXRlLiBBY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBIRkNMSyBzb3VyY2Ugc2VsZWN0ZWQuICovDQorDQorLyogQml0cyAzMS4uMCA6IEJhdWQgcmF0ZSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCQVVEUkFURSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfTXNrICgweEZGRkZGRkZGVUwgPDwgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQkFVRFJBVEUgZmllbGQuICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMjAwICgweDAwMDRGMDAwVUwpIC8qITwgMTIwMCBiYXVkIChhY3R1YWwgcmF0ZTogMTIwNSkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDI0MDAgKDB4MDAwOUQwMDBVTCkgLyohPCAyNDAwIGJhdWQgKGFjdHVhbCByYXRlOiAyMzk2KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkNDgwMCAoMHgwMDEzQjAwMFVMKSAvKiE8IDQ4MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDQ4MDgpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ5NjAwICgweDAwMjc1MDAwVUwpIC8qITwgOTYwMCBiYXVkIChhY3R1YWwgcmF0ZTogOTU5OCkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDE0NDAwICgweDAwM0IwMDAwVUwpIC8qITwgMTQ0MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDE0NDE0KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTkyMDAgKDB4MDA0RUEwMDBVTCkgLyohPCAxOTIwMCBiYXVkIChhY3R1YWwgcmF0ZTogMTkyMDgpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyODgwMCAoMHgwMDc1RjAwMFVMKSAvKiE8IDI4ODAwIGJhdWQgKGFjdHVhbCByYXRlOiAyODgyOSkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDMxMjUwICgweDAwODAwMDAwVUwpIC8qITwgMzEyNTAgYmF1ZCAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMzg0MDAgKDB4MDA5RDUwMDBVTCkgLyohPCAzODQwMCBiYXVkIChhY3R1YWwgcmF0ZTogMzg0NjIpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ1NjAwMCAoMHgwMEU1MDAwMFVMKSAvKiE8IDU2MDAwIGJhdWQgKGFjdHVhbCByYXRlOiA1NTk0NCkgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDU3NjAwICgweDAwRUJGMDAwVUwpIC8qITwgNTc2MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDU3NzYyKSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkNzY4MDAgKDB4MDEzQTkwMDBVTCkgLyohPCA3NjgwMCBiYXVkIChhY3R1YWwgcmF0ZTogNzY5MjMpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMTUyMDAgKDB4MDFEN0UwMDBVTCkgLyohPCAxMTUyMDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDExNTk0MikgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDIzMDQwMCAoMHgwM0FGQjAwMFVMKSAvKiE8IDIzMDQwMCBiYXVkIChhY3R1YWwgcmF0ZTogMjMxODg0KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjUwMDAwICgweDA0MDAwMDAwVUwpIC8qITwgMjUwMDAwIGJhdWQgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDQ2MDgwMCAoMHgwNzVGNzAwMFVMKSAvKiE8IDQ2MDgwMCBiYXVkIChhY3R1YWwgcmF0ZTogNDcwNTg4KSAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkOTIxNjAwICgweDBFQkVEMDAwVUwpIC8qITwgOTIxNjAwIGJhdWQgKGFjdHVhbCByYXRlOiA5NDExNzYpICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxTSAoMHgxMDAwMDAwMFVMKSAvKiE8IDFNZWdhIGJhdWQgKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVF9DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiBvZiBwYXJpdHkgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLw0KKw0KKy8qIEJpdHMgMy4uMSA6IFBhcml0eSAqLw0KKyNkZWZpbmUgVUFSVF9DT05GSUdfUEFSSVRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUklUWV9Nc2sgKDB4N1VMIDw8IFVBUlRfQ09ORklHX1BBUklUWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9DT05GSUdfUEFSSVRZX0V4Y2x1ZGVkICgweDBVTCkgLyohPCBFeGNsdWRlIHBhcml0eSBiaXQgKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUklUWV9JbmNsdWRlZCAoMHg3VUwpIC8qITwgSW5jbHVkZSBwYXJpdHkgYml0ICovDQorDQorLyogQml0IDAgOiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX0hXRkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSFdGQyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRfQ09ORklHX0hXRkNfTXNrICgweDFVTCA8PCBVQVJUX0NPTkZJR19IV0ZDX1BvcykgLyohPCBCaXQgbWFzayBvZiBIV0ZDIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVF9DT05GSUdfSFdGQ19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBVQVJUX0NPTkZJR19IV0ZDX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGVkICovDQorDQorDQorLyogUGVyaXBoZXJhbDogVUFSVEUgKi8NCisvKiBEZXNjcmlwdGlvbjogVUFSVCB3aXRoIEVhc3lETUEgMCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9TSE9SVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogU2hvcnRjdXQgcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgNiA6IFNob3J0Y3V0IGJldHdlZW4gRU5EUlggZXZlbnQgYW5kIFNUT1BSWCB0YXNrICovDQorI2RlZmluZSBVQVJURV9TSE9SVFNfRU5EUlhfU1RPUFJYX1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYX1NUT1BSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1NIT1JUU19FTkRSWF9TVE9QUlhfTXNrICgweDFVTCA8PCBVQVJURV9TSE9SVFNfRU5EUlhfU1RPUFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWF9TVE9QUlggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9TSE9SVFNfRU5EUlhfU1RPUFJYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVUFSVEVfU0hPUlRTX0VORFJYX1NUT1BSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDUgOiBTaG9ydGN1dCBiZXR3ZWVuIEVORFJYIGV2ZW50IGFuZCBTVEFSVFJYIHRhc2sgKi8NCisjZGVmaW5lIFVBUlRFX1NIT1JUU19FTkRSWF9TVEFSVFJYX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYX1NUQVJUUlggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9TSE9SVFNfRU5EUlhfU1RBUlRSWF9Nc2sgKDB4MVVMIDw8IFVBUlRFX1NIT1JUU19FTkRSWF9TVEFSVFJYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRSWF9TVEFSVFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfU0hPUlRTX0VORFJYX1NUQVJUUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIHNob3J0Y3V0ICovDQorI2RlZmluZSBVQVJURV9TSE9SVFNfRU5EUlhfU1RBUlRSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVFhTVE9QUEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWFNUT1BQRURfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFRYU1RPUFBFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYU1RPUFBFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX1RYU1RPUFBFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVFhTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fVFhTVE9QUEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fVFhTVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWFNUQVJURURfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9UWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBSWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhTVEFSVEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5fUlhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9SWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9SWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgUlhUTyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhUT19Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgUlhUTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYVE9fTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9SWFRPX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhUT19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYVE9fRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFUlJPUiBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRVJST1JfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FUlJPUl9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX0VSUk9SX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VSUk9SX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRUWCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRU5EVFhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FTkRUWF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX0VORFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VORFRYX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRU5EVFhfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBUWERSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYRFJEWV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBUWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9UWERSRFlfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTl9UWERSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYRFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1RYRFJEWV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FTkRSWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0VORFJYX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5fRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fRU5EUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9FTkRSWF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFJYRFJEWSBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhEUkRZX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX1JYRFJEWV9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX1JYRFJEWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhEUkRZX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fUlhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgTkNUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fTkNUU19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fTkNUU19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX05DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTl9OQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fTkNUU19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fQ1RTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOX0NUU19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOX0NUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5fQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBUWFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYU1RPUFBFRF9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVE9QUEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfVFhTVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUT1BQRURfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFRYU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhTVEFSVEVEX1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUQVJURURfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9UWFNUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWFNUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1RYU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFNUQVJURURfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJYU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX1JYU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhTVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYU1RBUlRFRF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhTVEFSVEVEX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBSWFRPIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFRPX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhUT19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX1JYVE9fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWFRPX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYVE9fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX1JYVE9fU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVJST1IgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VSUk9SX1BvcyAoOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRVJST1JfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9FUlJPUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVJST1IgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FUlJPUl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FUlJPUl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRVJST1JfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EVFggZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VORFRYX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFRYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EVFhfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9FTkRUWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FTkRUWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FTkRUWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EVFhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVFhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWERSRFlfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhEUkRZX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfVFhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfVFhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9UWERSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5EUlggZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX0VORFJYX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EUlhfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTlNFVF9FTkRSWF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5EUlggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FTkRSWF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9FTkRSWF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfRU5EUlhfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgUlhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWERSRFlfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgUlhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhEUkRZX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfUlhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfUlhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9SWERSRFlfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgTkNUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfTkNUU19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfTkNUU19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOU0VUX05DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9OQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX05DVFNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOU0VUX05DVFNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgQ1RTIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9DVFNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfQ1RTX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5TRVRfQ1RTX1BvcykgLyohPCBCaXQgbWFzayBvZiBDVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9DVFNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5TRVRfQ1RTX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTlNFVF9DVFNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX0lOVEVOQ0xSICovDQorLyogRGVzY3JpcHRpb246IERpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDIyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWFNUT1BQRUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYU1RPUFBFRF9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVE9QUEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVE9QUEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfVFhTVE9QUEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUT1BQRUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWFNUT1BQRURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVE9QUEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWFNUT1BQRURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDIwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1RYU1RBUlRFRF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgVFhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVEFSVEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfVFhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWFNUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE5IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYU1RBUlRFRF9Qb3MgKDE5VUwpIC8qITwgUG9zaXRpb24gb2YgUlhTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhTVEFSVEVEX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfUlhTVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBSWFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFNUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhTVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFNUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWFRPIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFRPX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBSWFRPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfUlhUT19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX1JYVE9fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYVE8gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWFRPX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYVE9fRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYVE9fQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDkgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVSUk9SIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FUlJPUl9Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUlJPUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VSUk9SX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfRVJST1JfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVSUk9SIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRVJST1JfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRVJST1JfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VSUk9SX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRUWCBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRU5EVFhfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5EVFggZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRUWF9Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX0VORFRYX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRUWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFRYX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFRYX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRUWF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVFhEUkRZIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWERSRFlfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgVFhEUkRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhEUkRZX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfVFhEUkRZX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWERSRFlfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfVFhEUkRZX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9UWERSRFlfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORFJYIGV2ZW50ICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9FTkRSWF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRSWCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFJYX01zayAoMHgxVUwgPDwgVUFSVEVfSU5URU5DTFJfRU5EUlhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORFJYIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRU5EUlhfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfRU5EUlhfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0VORFJYX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBSWERSRFkgZXZlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYRFJEWV9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBSWERSRFkgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWERSRFlfTXNrICgweDFVTCA8PCBVQVJURV9JTlRFTkNMUl9SWERSRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJYRFJEWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYRFJEWV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9SWERSRFlfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX1JYRFJEWV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgTkNUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfTkNUU19Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBOQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfTkNUU19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX05DVFNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE5DVFMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9JTlRFTkNMUl9OQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX05DVFNfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX05DVFNfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIENUUyBldmVudCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfQ1RTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIENUUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0NUU19Nc2sgKDB4MVVMIDw8IFVBUlRFX0lOVEVOQ0xSX0NUU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1RTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfQ1RTX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVBUlRFX0lOVEVOQ0xSX0NUU19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVUFSVEVfSU5URU5DTFJfQ1RTX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9FUlJPUlNSQyAqLw0KKy8qIERlc2NyaXB0aW9uOiBFcnJvciBzb3VyY2UgTm90ZSA6IHRoaXMgcmVnaXN0ZXIgaXMgcmVhZCAvIHdyaXRlIG9uZSB0byBjbGVhci4gKi8NCisNCisvKiBCaXQgMyA6IEJyZWFrIGNvbmRpdGlvbiAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfQlJFQUtfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgQlJFQUsgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19CUkVBS19Nc2sgKDB4MVVMIDw8IFVBUlRFX0VSUk9SU1JDX0JSRUFLX1BvcykgLyohPCBCaXQgbWFzayBvZiBCUkVBSyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0JSRUFLX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfQlJFQUtfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisNCisvKiBCaXQgMiA6IEZyYW1pbmcgZXJyb3Igb2NjdXJyZWQgKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0ZSQU1JTkdfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRlJBTUlORyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0ZSQU1JTkdfTXNrICgweDFVTCA8PCBVQVJURV9FUlJPUlNSQ19GUkFNSU5HX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNSU5HIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfRlJBTUlOR19Ob3RQcmVzZW50ICgwVUwpIC8qITwgUmVhZDogZXJyb3Igbm90IHByZXNlbnQgKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX0ZSQU1JTkdfUHJlc2VudCAoMVVMKSAvKiE8IFJlYWQ6IGVycm9yIHByZXNlbnQgKi8NCisNCisvKiBCaXQgMSA6IFBhcml0eSBlcnJvciAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfUEFSSVRZX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX1BBUklUWV9Nc2sgKDB4MVVMIDw8IFVBUlRFX0VSUk9SU1JDX1BBUklUWV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfUEFSSVRZX05vdFByZXNlbnQgKDBVTCkgLyohPCBSZWFkOiBlcnJvciBub3QgcHJlc2VudCAqLw0KKyNkZWZpbmUgVUFSVEVfRVJST1JTUkNfUEFSSVRZX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogQml0IDAgOiBPdmVycnVuIGVycm9yICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19PVkVSUlVOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE9WRVJSVU4gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19PVkVSUlVOX01zayAoMHgxVUwgPDwgVUFSVEVfRVJST1JTUkNfT1ZFUlJVTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1ZFUlJVTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VSUk9SU1JDX09WRVJSVU5fTm90UHJlc2VudCAoMFVMKSAvKiE8IFJlYWQ6IGVycm9yIG5vdCBwcmVzZW50ICovDQorI2RlZmluZSBVQVJURV9FUlJPUlNSQ19PVkVSUlVOX1ByZXNlbnQgKDFVTCkgLyohPCBSZWFkOiBlcnJvciBwcmVzZW50ICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgVUFSVCAqLw0KKw0KKy8qIEJpdHMgMy4uMCA6IEVuYWJsZSBvciBkaXNhYmxlIFVBUlRFICovDQorI2RlZmluZSBVQVJURV9FTkFCTEVfRU5BQkxFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOQUJMRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0VOQUJMRV9FTkFCTEVfTXNrICgweEZVTCA8PCBVQVJURV9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9FTkFCTEVfRU5BQkxFX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBVQVJURSAqLw0KKyNkZWZpbmUgVUFSVEVfRU5BQkxFX0VOQUJMRV9FbmFibGVkICg4VUwpIC8qITwgRW5hYmxlIFVBUlRFICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1BTRUxfUlRTICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFJUUyBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JUU19DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRFX1BTRUxfUlRTX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JUU19DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfUlRTX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JUU19QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JUU19QT1JUX01zayAoMHgzVUwgPDwgVUFSVEVfUFNFTF9SVFNfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JUU19QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SVFNfUElOX01zayAoMHgxRlVMIDw8IFVBUlRFX1BTRUxfUlRTX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9QU0VMX1RYRCAqLw0KKy8qIERlc2NyaXB0aW9uOiBQaW4gc2VsZWN0IGZvciBUWEQgc2lnbmFsICovDQorDQorLyogQml0IDMxIDogQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9UWERfQ09OTkVDVF9Qb3MgKDMxVUwpIC8qITwgUG9zaXRpb24gb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX0NPTk5FQ1RfTXNrICgweDFVTCA8PCBVQVJURV9QU0VMX1RYRF9DT05ORUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9UWERfQ09OTkVDVF9Db25uZWN0ZWQgKDBVTCkgLyohPCBDb25uZWN0ICovDQorI2RlZmluZSBVQVJURV9QU0VMX1RYRF9DT05ORUNUX0Rpc2Nvbm5lY3RlZCAoMVVMKSAvKiE8IERpc2Nvbm5lY3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBQb3J0IG51bWJlciAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9UWERfUE9SVF9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBQT1JUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9UWERfUE9SVF9Nc2sgKDB4M1VMIDw8IFVBUlRFX1BTRUxfVFhEX1BPUlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBPUlQgZmllbGQuICovDQorDQorLyogQml0cyA0Li4wIDogUGluIG51bWJlciAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9UWERfUElOX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBJTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfVFhEX1BJTl9Nc2sgKDB4MUZVTCA8PCBVQVJURV9QU0VMX1RYRF9QSU5fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBJTiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfUFNFTF9DVFMgKi8NCisvKiBEZXNjcmlwdGlvbjogUGluIHNlbGVjdCBmb3IgQ1RTIHNpZ25hbCAqLw0KKw0KKy8qIEJpdCAzMSA6IENvbm5lY3Rpb24gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfQ1RTX0NPTk5FQ1RfUG9zICgzMVVMKSAvKiE8IFBvc2l0aW9uIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19DT05ORUNUX01zayAoMHgxVUwgPDwgVUFSVEVfUFNFTF9DVFNfQ09OTkVDVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ09OTkVDVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfQ1RTX0NPTk5FQ1RfQ29ubmVjdGVkICgwVUwpIC8qITwgQ29ubmVjdCAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9DVFNfQ09OTkVDVF9EaXNjb25uZWN0ZWQgKDFVTCkgLyohPCBEaXNjb25uZWN0ICovDQorDQorLyogQml0cyA2Li41IDogUG9ydCBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfQ1RTX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfQ1RTX1BPUlRfTXNrICgweDNVTCA8PCBVQVJURV9QU0VMX0NUU19QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfQ1RTX1BJTl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQSU4gZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX0NUU19QSU5fTXNrICgweDFGVUwgPDwgVUFSVEVfUFNFTF9DVFNfUElOX1BvcykgLyohPCBCaXQgbWFzayBvZiBQSU4gZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1BTRUxfUlhEICovDQorLyogRGVzY3JpcHRpb246IFBpbiBzZWxlY3QgZm9yIFJYRCBzaWduYWwgKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JYRF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVBUlRFX1BTRUxfUlhEX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JYRF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVBUlRFX1BTRUxfUlhEX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JYRF9QT1JUX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFBPUlQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JYRF9QT1JUX01zayAoMHgzVUwgPDwgVUFSVEVfUFNFTF9SWERfUE9SVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUE9SVCBmaWVsZC4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBQaW4gbnVtYmVyICovDQorI2RlZmluZSBVQVJURV9QU0VMX1JYRF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUFNFTF9SWERfUElOX01zayAoMHgxRlVMIDw8IFVBUlRFX1BTRUxfUlhEX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9CQVVEUkFURSAqLw0KKy8qIERlc2NyaXB0aW9uOiBCYXVkIHJhdGUuIEFjY3VyYWN5IGRlcGVuZHMgb24gdGhlIEhGQ0xLIHNvdXJjZSBzZWxlY3RlZC4gKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQmF1ZCByYXRlICovDQorI2RlZmluZSBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBCQVVEUkFURSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX01zayAoMHhGRkZGRkZGRlVMIDw8IFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX1BvcykgLyohPCBCaXQgbWFzayBvZiBCQVVEUkFURSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMjAwICgweDAwMDRGMDAwVUwpIC8qITwgMTIwMCBiYXVkIChhY3R1YWwgcmF0ZTogMTIwNSkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyNDAwICgweDAwMDlEMDAwVUwpIC8qITwgMjQwMCBiYXVkIChhY3R1YWwgcmF0ZTogMjM5NikgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0ODAwICgweDAwMTNCMDAwVUwpIC8qITwgNDgwMCBiYXVkIChhY3R1YWwgcmF0ZTogNDgwOCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ5NjAwICgweDAwMjc1MDAwVUwpIC8qITwgOTYwMCBiYXVkIChhY3R1YWwgcmF0ZTogOTU5OCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxNDQwMCAoMHgwMDNBRjAwMFVMKSAvKiE8IDE0NDAwIGJhdWQgKGFjdHVhbCByYXRlOiAxNDQwMSkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxOTIwMCAoMHgwMDRFQTAwMFVMKSAvKiE8IDE5MjAwIGJhdWQgKGFjdHVhbCByYXRlOiAxOTIwOCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyODgwMCAoMHgwMDc1QzAwMFVMKSAvKiE8IDI4ODAwIGJhdWQgKGFjdHVhbCByYXRlOiAyODc3NykgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQzMTI1MCAoMHgwMDgwMDAwMFVMKSAvKiE8IDMxMjUwIGJhdWQgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQzODQwMCAoMHgwMDlEMDAwMFVMKSAvKiE8IDM4NDAwIGJhdWQgKGFjdHVhbCByYXRlOiAzODM2OSkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ1NjAwMCAoMHgwMEU1MDAwMFVMKSAvKiE8IDU2MDAwIGJhdWQgKGFjdHVhbCByYXRlOiA1NTk0NCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ1NzYwMCAoMHgwMEVCMDAwMFVMKSAvKiE8IDU3NjAwIGJhdWQgKGFjdHVhbCByYXRlOiA1NzU1NCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ3NjgwMCAoMHgwMTNBOTAwMFVMKSAvKiE8IDc2ODAwIGJhdWQgKGFjdHVhbCByYXRlOiA3NjkyMykgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMTUyMDAgKDB4MDFENjAwMDBVTCkgLyohPCAxMTUyMDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDExNTEwOCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyMzA0MDAgKDB4MDNCMDAwMDBVTCkgLyohPCAyMzA0MDAgYmF1ZCAoYWN0dWFsIHJhdGU6IDIzMTg4NCkgKi8NCisjZGVmaW5lIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyNTAwMDAgKDB4MDQwMDAwMDBVTCkgLyohPCAyNTAwMDAgYmF1ZCAqLw0KKyNkZWZpbmUgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDQ2MDgwMCAoMHgwNzQwMDAwMFVMKSAvKiE8IDQ2MDgwMCBiYXVkIChhY3R1YWwgcmF0ZTogNDU3MTQzKSAqLw0KKyNkZWZpbmUgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDkyMTYwMCAoMHgwRjAwMDAwMFVMKSAvKiE8IDkyMTYwMCBiYXVkIChhY3R1YWwgcmF0ZTogOTQxMTc2KSAqLw0KKyNkZWZpbmUgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDFNICgweDEwMDAwMDAwVUwpIC8qITwgMU1lZ2EgYmF1ZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9SWERfUFRSICovDQorLyogRGVzY3JpcHRpb246IERhdGEgcG9pbnRlciAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBEYXRhIHBvaW50ZXIgKi8NCisjZGVmaW5lIFVBUlRFX1JYRF9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX1JYRF9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFVBUlRFX1JYRF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1JYRF9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcmVjZWl2ZSBidWZmZXIgKi8NCisNCisvKiBCaXRzIDkuLjAgOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiByZWNlaXZlIGJ1ZmZlciAqLw0KKyNkZWZpbmUgVUFSVEVfUlhEX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfUlhEX01BWENOVF9NQVhDTlRfTXNrICgweDNGRlVMIDw8IFVBUlRFX1JYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1JYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyA5Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBVQVJURV9SWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9SWERfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4M0ZGVUwgPDwgVUFSVEVfUlhEX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfVFhEX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEYXRhIHBvaW50ZXIgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogRGF0YSBwb2ludGVyICovDQorI2RlZmluZSBVQVJURV9UWERfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9UWERfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBVQVJURV9UWERfUFRSX1BUUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUFRSIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVQVJURV9UWERfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKyNkZWZpbmUgVUFSVEVfVFhEX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfVFhEX01BWENOVF9NQVhDTlRfTXNrICgweDNGRlVMIDw8IFVBUlRFX1RYRF9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVBUlRFX1RYRF9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyA5Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBVQVJURV9UWERfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9UWERfQU1PVU5UX0FNT1VOVF9Nc2sgKDB4M0ZGVUwgPDwgVUFSVEVfVFhEX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUFSVEVfQ09ORklHICovDQorLyogRGVzY3JpcHRpb246IENvbmZpZ3VyYXRpb24gb2YgcGFyaXR5IGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8NCisNCisvKiBCaXQgNCA6IFN0b3AgYml0cyAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX1NUT1BfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgU1RPUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19TVE9QX01zayAoMHgxVUwgPDwgVUFSVEVfQ09ORklHX1NUT1BfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUT1AgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfU1RPUF9PbmUgKDBVTCkgLyohPCBPbmUgc3RvcCBiaXQgKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19TVE9QX1R3byAoMVVMKSAvKiE8IFR3byBzdG9wIGJpdHMgKi8NCisNCisvKiBCaXRzIDMuLjEgOiBQYXJpdHkgKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19QQVJJVFlfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUEFSSVRZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX1BBUklUWV9Nc2sgKDB4N1VMIDw8IFVBUlRFX0NPTkZJR19QQVJJVFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFBBUklUWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19QQVJJVFlfRXhjbHVkZWQgKDB4MFVMKSAvKiE8IEV4Y2x1ZGUgcGFyaXR5IGJpdCAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX1BBUklUWV9JbmNsdWRlZCAoMHg3VUwpIC8qITwgSW5jbHVkZSBldmVuIHBhcml0eSBiaXQgKi8NCisNCisvKiBCaXQgMCA6IEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLw0KKyNkZWZpbmUgVUFSVEVfQ09ORklHX0hXRkNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgSFdGQyBmaWVsZC4gKi8NCisjZGVmaW5lIFVBUlRFX0NPTkZJR19IV0ZDX01zayAoMHgxVUwgPDwgVUFSVEVfQ09ORklHX0hXRkNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEhXRkMgZmllbGQuICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfSFdGQ19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGVkICovDQorI2RlZmluZSBVQVJURV9DT05GSUdfSFdGQ19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlZCAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFVJQ1IgKi8NCisvKiBEZXNjcmlwdGlvbjogVXNlciBJbmZvcm1hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVSUNSX05SRkZXICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBSZXNlcnZlZCBmb3IgTm9yZGljIGZpcm13YXJlIGRlc2lnbiAqLw0KKw0KKy8qIEJpdHMgMzEuLjAgOiBSZXNlcnZlZCBmb3IgTm9yZGljIGZpcm13YXJlIGRlc2lnbiAqLw0KKyNkZWZpbmUgVUlDUl9OUkZGV19OUkZGV19Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBOUkZGVyBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfTlJGRldfTlJGRldfTXNrICgweEZGRkZGRkZGVUwgPDwgVUlDUl9OUkZGV19OUkZGV19Qb3MpIC8qITwgQml0IG1hc2sgb2YgTlJGRlcgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVJQ1JfTlJGSFcgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIFJlc2VydmVkIGZvciBOb3JkaWMgaGFyZHdhcmUgZGVzaWduICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlc2VydmVkIGZvciBOb3JkaWMgaGFyZHdhcmUgZGVzaWduICovDQorI2RlZmluZSBVSUNSX05SRkhXX05SRkhXX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE5SRkhXIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9OUkZIV19OUkZIV19Nc2sgKDB4RkZGRkZGRkZVTCA8PCBVSUNSX05SRkhXX05SRkhXX1BvcykgLyohPCBCaXQgbWFzayBvZiBOUkZIVyBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVUlDUl9DVVNUT01FUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjb2xsZWN0aW9uWzBdOiAgUmVzZXJ2ZWQgZm9yIGN1c3RvbWVyICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlc2VydmVkIGZvciBjdXN0b21lciAqLw0KKyNkZWZpbmUgVUlDUl9DVVNUT01FUl9DVVNUT01FUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDVVNUT01FUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfQ1VTVE9NRVJfQ1VTVE9NRVJfTXNrICgweEZGRkZGRkZGVUwgPDwgVUlDUl9DVVNUT01FUl9DVVNUT01FUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQ1VTVE9NRVIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVJQ1JfUFNFTFJFU0VUICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBNYXBwaW5nIG9mIHRoZSBuUkVTRVQgZnVuY3Rpb24gKi8NCisNCisvKiBCaXQgMzEgOiBDb25uZWN0aW9uICovDQorI2RlZmluZSBVSUNSX1BTRUxSRVNFVF9DT05ORUNUX1BvcyAoMzFVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVSUNSX1BTRUxSRVNFVF9DT05ORUNUX0Nvbm5lY3RlZCAoMFVMKSAvKiE8IENvbm5lY3QgKi8NCisjZGVmaW5lIFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfRGlzY29ubmVjdGVkICgxVUwpIC8qITwgRGlzY29ubmVjdCAqLw0KKw0KKy8qIEJpdHMgNi4uNSA6IFBvcnQgbnVtYmVyIG9udG8gd2hpY2ggblJFU0VUIGlzIGV4cG9zZWQgKi8NCisjZGVmaW5lIFVJQ1JfUFNFTFJFU0VUX1BPUlRfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgUE9SVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfUFNFTFJFU0VUX1BPUlRfTXNrICgweDNVTCA8PCBVSUNSX1BTRUxSRVNFVF9QT1JUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQT1JUIGZpZWxkLiAqLw0KKw0KKy8qIEJpdHMgNC4uMCA6IFBpbiBudW1iZXIgb2YgUE9SVCBvbnRvIHdoaWNoIG5SRVNFVCBpcyBleHBvc2VkICovDQorI2RlZmluZSBVSUNSX1BTRUxSRVNFVF9QSU5fUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUElOIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9QU0VMUkVTRVRfUElOX01zayAoMHgxRlVMIDw8IFVJQ1JfUFNFTFJFU0VUX1BJTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUElOIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVSUNSX0FQUFJPVEVDVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBBY2Nlc3MgcG9ydCBwcm90ZWN0aW9uICovDQorDQorLyogQml0cyA3Li4wIDogRW5hYmxlIG9yIGRpc2FibGUgQWNjZXNzIFBvcnQgcHJvdGVjdGlvbi4gKi8NCisjZGVmaW5lIFVJQ1JfQVBQUk9URUNUX1BBTExfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUEFMTCBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfQVBQUk9URUNUX1BBTExfTXNrICgweEZGVUwgPDwgVUlDUl9BUFBST1RFQ1RfUEFMTF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUEFMTCBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfQVBQUk9URUNUX1BBTExfRW5hYmxlZCAoMHgwMFVMKSAvKiE8IEVuYWJsZSAqLw0KKyNkZWZpbmUgVUlDUl9BUFBST1RFQ1RfUEFMTF9EaXNhYmxlZCAoMHhGRlVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVUlDUl9ORkNQSU5TICovDQorLyogRGVzY3JpcHRpb246IFNldHRpbmcgb2YgcGlucyBkZWRpY2F0ZWQgdG8gTkZDIGZ1bmN0aW9uYWxpdHk6IE5GQyBhbnRlbm5hIG9yIEdQSU8gKi8NCisNCisvKiBCaXQgMCA6IFNldHRpbmcgb2YgcGlucyBkZWRpY2F0ZWQgdG8gTkZDIGZ1bmN0aW9uYWxpdHkgKi8NCisjZGVmaW5lIFVJQ1JfTkZDUElOU19QUk9URUNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBST1RFQ1QgZmllbGQuICovDQorI2RlZmluZSBVSUNSX05GQ1BJTlNfUFJPVEVDVF9Nc2sgKDB4MVVMIDw8IFVJQ1JfTkZDUElOU19QUk9URUNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBQUk9URUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVUlDUl9ORkNQSU5TX1BST1RFQ1RfRGlzYWJsZWQgKDBVTCkgLyohPCBPcGVyYXRpb24gYXMgR1BJTyBwaW5zLiBTYW1lIHByb3RlY3Rpb24gYXMgbm9ybWFsIEdQSU8gcGlucyAqLw0KKyNkZWZpbmUgVUlDUl9ORkNQSU5TX1BST1RFQ1RfTkZDICgxVUwpIC8qITwgT3BlcmF0aW9uIGFzIE5GQyBhbnRlbm5hIHBpbnMuIENvbmZpZ3VyZXMgdGhlIHByb3RlY3Rpb24gZm9yIE5GQyBvcGVyYXRpb24gKi8NCisNCisvKiBSZWdpc3RlcjogVUlDUl9FWFRTVVBQTFkgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGV4dGVybmFsIGNpcmN1aXRyeSB0byBiZSBzdXBwbGllZCBmcm9tIFZERCBwaW4uIEFwcGxpY2FibGUgaW4gJ0hpZ2ggdm9sdGFnZSBtb2RlJyBvbmx5LiAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIGV4dGVybmFsIGNpcmN1aXRyeSB0byBiZSBzdXBwbGllZCBmcm9tIFZERCBwaW4gKG91dHB1dCBvZiBSRUcwIHN0YWdlKS4gKi8NCisjZGVmaW5lIFVJQ1JfRVhUU1VQUExZX0VYVFNVUFBMWV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFWFRTVVBQTFkgZmllbGQuICovDQorI2RlZmluZSBVSUNSX0VYVFNVUFBMWV9FWFRTVVBQTFlfTXNrICgweDFVTCA8PCBVSUNSX0VYVFNVUFBMWV9FWFRTVVBQTFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVYVFNVUFBMWSBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfRVhUU1VQUExZX0VYVFNVUFBMWV9EaXNhYmxlZCAoMFVMKSAvKiE8IE5vIGN1cnJlbnQgY2FuIGJlIGRyYXduIGZyb20gdGhlIFZERCBwaW4uICovDQorI2RlZmluZSBVSUNSX0VYVFNVUFBMWV9FWFRTVVBQTFlfRW5hYmxlZCAoMVVMKSAvKiE8IEl0IGlzIGFsbG93ZWQgdG8gc3VwcGx5IGV4dGVybmFsIGNpcmN1aXRyeSBmcm9tIHRoZSBWREQgcGluLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVSUNSX1JFR09VVDAgKi8NCisvKiBEZXNjcmlwdGlvbjogR1BJTyByZWZlcmVuY2Ugdm9sdGFnZSAvIGV4dGVybmFsIG91dHB1dCBzdXBwbHkgdm9sdGFnZSBpbiAnSGlnaCB2b2x0YWdlIG1vZGUnLiAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IE91dHB1dCB2b2x0YWdlIGZyb20gb2YgUkVHMCByZWd1bGF0b3Igc3RhZ2UuIFRoZSBtYXhpbXVtIG91dHB1dCB2b2x0YWdlIGZyb20gdGhpcyBzdGFnZSBpcyBnaXZlbiBhcyBWRERIIC0gVkVYRElGLiAqLw0KKyNkZWZpbmUgVUlDUl9SRUdPVVQwX1ZPVVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVk9VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVJQ1JfUkVHT1VUMF9WT1VUX01zayAoMHg3VUwgPDwgVUlDUl9SRUdPVVQwX1ZPVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZPVVQgZmllbGQuICovDQorI2RlZmluZSBVSUNSX1JFR09VVDBfVk9VVF8xVjggKDBVTCkgLyohPCAxLjggViAqLw0KKyNkZWZpbmUgVUlDUl9SRUdPVVQwX1ZPVVRfMlYxICgxVUwpIC8qITwgMi4xIFYgKi8NCisjZGVmaW5lIFVJQ1JfUkVHT1VUMF9WT1VUXzJWNCAoMlVMKSAvKiE8IDIuNCBWICovDQorI2RlZmluZSBVSUNSX1JFR09VVDBfVk9VVF8yVjcgKDNVTCkgLyohPCAyLjcgViAqLw0KKyNkZWZpbmUgVUlDUl9SRUdPVVQwX1ZPVVRfM1YwICg0VUwpIC8qITwgMy4wIFYgKi8NCisjZGVmaW5lIFVJQ1JfUkVHT1VUMF9WT1VUXzNWMyAoNVVMKSAvKiE8IDMuMyBWICovDQorI2RlZmluZSBVSUNSX1JFR09VVDBfVk9VVF9ERUZBVUxUICg3VUwpIC8qITwgRGVmYXVsdCB2b2x0YWdlOiAxLjggViAqLw0KKw0KKw0KKy8qIFBlcmlwaGVyYWw6IFVTQkQgKi8NCisvKiBEZXNjcmlwdGlvbjogVW5pdmVyc2FsIFNlcmlhbCBCdXMgZGV2aWNlICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfU0hPUlRTICovDQorLyogRGVzY3JpcHRpb246IFNob3J0Y3V0IHJlZ2lzdGVyICovDQorDQorLyogQml0IDQgOiBTaG9ydGN1dCBiZXR3ZWVuIEVOREVQT1VUWzBdIGV2ZW50IGFuZCBFUDBSQ1ZPVVQgdGFzayAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFJDVk9VVF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDBfRVAwUkNWT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFJDVk9VVF9Nc2sgKDB4MVVMIDw8IFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBSQ1ZPVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMF9FUDBSQ1ZPVVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FTkRFUE9VVDBfRVAwUkNWT1VUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFJDVk9VVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDMgOiBTaG9ydGN1dCBiZXR3ZWVuIEVOREVQT1VUWzBdIGV2ZW50IGFuZCBFUDBTVEFUVVMgdGFzayAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFNUQVRVU19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDBfRVAwU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFNUQVRVU19Nc2sgKDB4MVVMIDw8IFVTQkRfU0hPUlRTX0VOREVQT1VUMF9FUDBTVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMF9FUDBTVEFUVVMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FTkRFUE9VVDBfRVAwU1RBVFVTX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRU5ERVBPVVQwX0VQMFNUQVRVU19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIHNob3J0Y3V0ICovDQorDQorLyogQml0IDIgOiBTaG9ydGN1dCBiZXR3ZWVuIEVQMERBVEFET05FIGV2ZW50IGFuZCBFUDBTVEFUVVMgdGFzayAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfRVAwU1RBVFVTX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMERBVEFET05FX0VQMFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX0VQMFNUQVRVU19Nc2sgKDB4MVVMIDw8IFVTQkRfU0hPUlRTX0VQMERBVEFET05FX0VQMFNUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAwREFUQURPTkVfRVAwU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfRVAwU1RBVFVTX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfRVAwU1RBVFVTX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgc2hvcnRjdXQgKi8NCisNCisvKiBCaXQgMSA6IFNob3J0Y3V0IGJldHdlZW4gRVAwREFUQURPTkUgZXZlbnQgYW5kIFNUQVJURVBPVVRbMF0gdGFzayAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfU1RBUlRFUE9VVDBfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRVAwREFUQURPTkVfU1RBUlRFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQT1VUMF9Nc2sgKDB4MVVMIDw8IFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBPVVQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUDBEQVRBRE9ORV9TVEFSVEVQT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBPVVQwX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBzaG9ydGN1dCAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfU1RBUlRFUE9VVDBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIEJpdCAwIDogU2hvcnRjdXQgYmV0d2VlbiBFUDBEQVRBRE9ORSBldmVudCBhbmQgU1RBUlRFUElOWzBdIHRhc2sgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBJTjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRVAwREFUQURPTkVfU1RBUlRFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBJTjBfTXNrICgweDFVTCA8PCBVU0JEX1NIT1JUU19FUDBEQVRBRE9ORV9TVEFSVEVQSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUDBEQVRBRE9ORV9TVEFSVEVQSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSE9SVFNfRVAwREFUQURPTkVfU1RBUlRFUElOMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgc2hvcnRjdXQgKi8NCisjZGVmaW5lIFVTQkRfU0hPUlRTX0VQMERBVEFET05FX1NUQVJURVBJTjBfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBzaG9ydGN1dCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lOVEVOICovDQorLyogRGVzY3JpcHRpb246IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgQUNDRVNTRkFVTFQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fQUNDRVNTRkFVTFRfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ0VTU0ZBVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9BQ0NFU1NGQVVMVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fQUNDRVNTRkFVTFRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFDQ0VTU0ZBVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9BQ0NFU1NGQVVMVF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fQUNDRVNTRkFVTFRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRVBEQVRBIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VQREFUQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgRVBEQVRBIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUERBVEFfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VQREFUQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBEQVRBIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUERBVEFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VQREFUQV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIzIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFUDBTRVRVUCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBTRVRVUF9Qb3MgKDIzVUwpIC8qITwgUG9zaXRpb24gb2YgRVAwU0VUVVAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VQMFNFVFVQX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FUDBTRVRVUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAwU0VUVVAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VQMFNFVFVQX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBTRVRVUF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIyIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBVU0JFVkVOVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JFVkVOVF9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgVVNCRVZFTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1VTQkVWRU5UX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9VU0JFVkVOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCRVZFTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1VTQkVWRU5UX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JFVkVOVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIxIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBTT0YgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fU09GX1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBTT0YgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1NPRl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fU09GX1BvcykgLyohPCBCaXQgbWFzayBvZiBTT0YgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1NPRl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fU09GX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORElTT09VVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRJU09PVVRfUG9zICgyMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVORElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ESVNPT1VUX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRJU09PVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVORElTT09VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ESVNPT1VUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRJU09PVVRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbN10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ3X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUN19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBPVVQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUN19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ3X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzZdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDZfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VOREVQT1VUNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDZfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs1XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDVfUG9zICgxN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ1X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUE9VVDVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDVfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbNF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ0X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBPVVQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUNF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQ0X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzNdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUM19Qb3MgKDE1VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDNfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VOREVQT1VUM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDNfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFsyXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDJfUG9zICgxNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQyX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUE9VVDJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDJfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQxX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5fRU5ERVBPVVQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMV9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBPVVQxX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzBdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMF9Qb3MgKDEyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDBfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOX0VOREVQT1VUMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUE9VVDBfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQT1VUMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDExIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFTkRJU09JTiBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRJU09JTl9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ESVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VORElTT0lOX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRJU09JTl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ESVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VORElTT0lOX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRJU09JTl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEwIDogRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJydXB0IGZvciBFUDBEQVRBRE9ORSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBEQVRBRE9ORV9Qb3MgKDEwVUwpIC8qITwgUG9zaXRpb24gb2YgRVAwREFUQURPTkUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VQMERBVEFET05FX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FUDBEQVRBRE9ORV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAwREFUQURPTkUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VQMERBVEFET05FX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FUDBEQVRBRE9ORV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDkgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bN10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjdfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU43X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU43X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElON19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjZfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU42X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU42X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDcgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjVfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU41X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU41X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDYgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU40X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU40X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElONF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bM10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjNfUG9zICg1VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4zX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4zX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDQgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjJfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4yX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4yX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDMgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4xX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4xX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMV9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fRU5ERVBJTjBfUG9zICgyVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4wX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9FTkRFUElOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX0VOREVQSU4wX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9FTkRFUElOMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDEgOiBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFNUQVJURUQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fU1RBUlRFRF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9TVEFSVEVEX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9TVEFSVEVEX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFSVEVEIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9TVEFSVEVEX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IEVuYWJsZSBvciBkaXNhYmxlIGludGVycnVwdCBmb3IgVVNCUkVTRVQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5fVVNCUkVTRVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVVNCUkVTRVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1VTQlJFU0VUX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTl9VU0JSRVNFVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCUkVTRVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOX1VTQlJFU0VUX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTl9VU0JSRVNFVF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSU5URU5TRVQgKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBBQ0NFU1NGQVVMVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9BQ0NFU1NGQVVMVF9Qb3MgKDI1VUwpIC8qITwgUG9zaXRpb24gb2YgQUNDRVNTRkFVTFQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0FDQ0VTU0ZBVUxUX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9BQ0NFU1NGQVVMVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUNDRVNTRkFVTFQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0FDQ0VTU0ZBVUxUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfQUNDRVNTRkFVTFRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfQUNDRVNTRkFVTFRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDI0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVQREFUQSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUERBVEFfUG9zICgyNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVBEQVRBX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FUERBVEFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQREFUQSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVBEQVRBX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVBEQVRBX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQREFUQV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjMgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVAwU0VUVVAgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVAwU0VUVVBfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMFNFVFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBTRVRVUF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRVAwU0VUVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQMFNFVFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBTRVRVUF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQMFNFVFVQX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQMFNFVFVQX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAyMiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBVU0JFVkVOVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9VU0JFVkVOVF9Qb3MgKDIyVUwpIC8qITwgUG9zaXRpb24gb2YgVVNCRVZFTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1VTQkVWRU5UX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9VU0JFVkVOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVVNCRVZFTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1VTQkVWRU5UX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCRVZFTlRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCRVZFTlRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIxIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIFNPRiBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9TT0ZfUG9zICgyMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU09GX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9TT0ZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNPRiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU09GX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU09GX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NPRl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMjAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ESVNPT1VUIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VORElTT09VVF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ESVNPT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09PVVRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VORElTT09VVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ESVNPT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09PVVRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09PVVRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPT1VUX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs3XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDdfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ3X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ3X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ3X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUN19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbNl0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ2X1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDZfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE3IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzVdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDVfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ1X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs0XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDRfUG9zICgxNlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ0X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ0X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQ0X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUNF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbM10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQzX1BvcyAoMTVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUM19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBPVVQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUM19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDNfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDE0IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzJdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMl9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDJfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQyX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFsxXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDFfUG9zICgxM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQxX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQxX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQxX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMV9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbMF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBPVVQwX1BvcyAoMTJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBPVVQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQT1VUMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUE9VVDBfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDExIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVORElTT0lOIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VORElTT0lOX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRJU09JTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPSU5fTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VORElTT0lOX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRJU09JTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ESVNPSU5fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09JTl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRJU09JTl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRVAwREFUQURPTkUgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRVAwREFUQURPTkVfUG9zICgxMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMERBVEFET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBEQVRBRE9ORV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRVAwREFUQURPTkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQMERBVEFET05FIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FUDBEQVRBRE9ORV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQMERBVEFET05FX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VQMERBVEFET05FX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA5IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bN10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjdfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU43X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUElON19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU43X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjdfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjdfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDggOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTls2XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjZfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONl9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzVdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU41X1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBJTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElONV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU41X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU41X1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCA2IDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bNF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjRfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU40X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUElONF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU40X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDUgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlszXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOM19Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjNfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOM19TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBFTkRFUElOWzJdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4yX1BvcyAoNFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMl9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfRU5ERVBJTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMl9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4yX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4yX1NldCAoMVVMKSAvKiE8IEVuYWJsZSAqLw0KKw0KKy8qIEJpdCAzIDogV3JpdGUgJzEnIHRvIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQSU5bMV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjFfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4xX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTlNFVF9FTkRFUElOMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX0VOREVQSU4xX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjFfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogQml0IDIgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlswXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjBfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX0VOREVQSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfRU5ERVBJTjBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9FTkRFUElOMF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBTVEFSVEVEIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NUQVJURURfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU1RBUlRFRF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5TRVRfU1RBUlRFRF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU1RBUlRFRCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU1RBUlRFRF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOU0VUX1NUQVJURURfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfU1RBUlRFRF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBCaXQgMCA6IFdyaXRlICcxJyB0byBFbmFibGUgaW50ZXJydXB0IGZvciBVU0JSRVNFVCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9VU0JSRVNFVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBVU0JSRVNFVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCUkVTRVRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOU0VUX1VTQlJFU0VUX1BvcykgLyohPCBCaXQgbWFzayBvZiBVU0JSRVNFVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5TRVRfVVNCUkVTRVRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9VU0JSRVNFVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTlNFVF9VU0JSRVNFVF9TZXQgKDFVTCkgLyohPCBFbmFibGUgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAyNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgQUNDRVNTRkFVTFQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfQUNDRVNTRkFVTFRfUG9zICgyNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEFDQ0VTU0ZBVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9BQ0NFU1NGQVVMVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfQUNDRVNTRkFVTFRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFDQ0VTU0ZBVUxUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9BQ0NFU1NGQVVMVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0FDQ0VTU0ZBVUxUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0FDQ0VTU0ZBVUxUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRVBEQVRBIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQREFUQV9Qb3MgKDI0VUwpIC8qITwgUG9zaXRpb24gb2YgRVBEQVRBIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUERBVEFfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VQREFUQV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBEQVRBIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUERBVEFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUERBVEFfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVBEQVRBX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRVAwU0VUVVAgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwU0VUVVBfUG9zICgyM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEVQMFNFVFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBTRVRVUF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRVAwU0VUVVBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQMFNFVFVQIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBTRVRVUF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQMFNFVFVQX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQMFNFVFVQX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgVVNCRVZFTlQgZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfVVNCRVZFTlRfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQkVWRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JFVkVOVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfVVNCRVZFTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQkVWRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JFVkVOVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1VTQkVWRU5UX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1VTQkVWRU5UX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU09GIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1NPRl9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TT0ZfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX1NPRl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU09GIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TT0ZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TT0ZfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfU09GX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAyMCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ESVNPT1VUIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VORElTT09VVF9Qb3MgKDIwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5ESVNPT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09PVVRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VORElTT09VVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ESVNPT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09PVVRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09PVVRfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPT1VUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbN10gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ3X1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUN19Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUN19EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUN19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDdfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE4IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFs2XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDZfUG9zICgxOFVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ2X01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ2X0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ2X0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTcgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzVdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNV9Qb3MgKDE3VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDVfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDVfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ1X0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbNF0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ0X1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRU5ERVBPVVQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUNF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDRfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDE1IDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFszXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDNfUG9zICgxNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQzX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQzX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQzX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUM19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTQgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVOREVQT1VUWzJdIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMl9Qb3MgKDE0VUwpIC8qITwgUG9zaXRpb24gb2YgRU5ERVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDJfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRU5ERVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDJfRW5hYmxlZCAoMVVMKSAvKiE8IFJlYWQ6IEVuYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQyX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIEJpdCAxMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBPVVRbMV0gZXZlbnQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQxX1BvcyAoMTNVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMV9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfRU5ERVBPVVQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMV9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDFfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDEyIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBFTkRFUE9VVFswXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDBfUG9zICgxMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVOREVQT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQwX01zayAoMHgxVUwgPDwgVVNCRF9JTlRFTkNMUl9FTkRFUE9VVDBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVOREVQT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQwX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBPVVQwX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VOREVQT1VUMF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTEgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVORElTT0lOIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VORElTT0lOX1BvcyAoMTFVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRJU09JTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPSU5fTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VORElTT0lOX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRJU09JTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ESVNPSU5fRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09JTl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRJU09JTl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMTAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIEVQMERBVEFET05FIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX0VQMERBVEFET05FX1BvcyAoMTBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUDBEQVRBRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwREFUQURPTkVfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VQMERBVEFET05FX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUDBEQVRBRE9ORSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRVAwREFUQURPTkVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBEQVRBRE9ORV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FUDBEQVRBRE9ORV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTls3XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElON19Qb3MgKDlVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjdfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjdfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElON19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElON19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgOCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTls2XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONl9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjZfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjZfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTls1XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONV9Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjVfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjVfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTls0XSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONF9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjRfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjRfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElONF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlszXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOM19Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjNfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjNfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOM19FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOM19DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgNCA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlsyXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMl9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjJfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjJfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMl9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMl9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMyA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlsxXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMV9Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjFfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjFfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMV9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMV9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMiA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgRU5ERVBJTlswXSBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMF9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFTkRFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjBfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX0VOREVQSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkRFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSU5URU5DTFJfRU5ERVBJTjBfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9FTkRFUElOMF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBCaXQgMSA6IFdyaXRlICcxJyB0byBEaXNhYmxlIGludGVycnVwdCBmb3IgU1RBUlRFRCBldmVudCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TVEFSVEVEX1BvcyAoMVVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1NUQVJURURfTXNrICgweDFVTCA8PCBVU0JEX0lOVEVOQ0xSX1NUQVJURURfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVJURUQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1NUQVJURURfRGlzYWJsZWQgKDBVTCkgLyohPCBSZWFkOiBEaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9TVEFSVEVEX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1NUQVJURURfQ2xlYXIgKDFVTCkgLyohPCBEaXNhYmxlICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRGlzYWJsZSBpbnRlcnJ1cHQgZm9yIFVTQlJFU0VUIGV2ZW50ICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1VTQlJFU0VUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFVTQlJFU0VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JSRVNFVF9Nc2sgKDB4MVVMIDw8IFVTQkRfSU5URU5DTFJfVVNCUkVTRVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFVTQlJFU0VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JTlRFTkNMUl9VU0JSRVNFVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1VTQlJFU0VUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBVU0JEX0lOVEVOQ0xSX1VTQlJFU0VUX0NsZWFyICgxVUwpIC8qITwgRGlzYWJsZSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VWRU5UQ0FVU0UgKi8NCisvKiBEZXNjcmlwdGlvbjogRGV0YWlscyBvbiBldmVudCB0aGF0IGNhdXNlZCB0aGUgVVNCRVZFTlQgZXZlbnQgKi8NCisNCisvKiBCaXQgMTEgOiBXcmFwcGVyIGhhcyByZS1pbml0aWFsaXplZCBTRlJzIHRvIHRoZSBwcm9wZXIgdmFsdWVzLiBNQUMgaXMgcmVhZHkgZm9yIG5vcm1hbCBvcGVyYXRpb24uIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9SRUFEWV9Qb3MgKDExVUwpIC8qITwgUG9zaXRpb24gb2YgUkVBRFkgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfUkVBRFlfTXNrICgweDFVTCA8PCBVU0JEX0VWRU5UQ0FVU0VfUkVBRFlfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFQURZIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1JFQURZX05vdERldGVjdGVkICgwVUwpIC8qITwgVVNCRVZFTlQgd2FzIG5vdCBpc3N1ZWQgZHVlIHRvIFVTQkQgcGVyaXBoZXJhbCByZWFkeSAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1JFQURZX1JlYWR5ICgxVUwpIC8qITwgVVNCRCBwZXJpcGhlcmFsIGlzIHJlYWR5ICovDQorDQorLyogQml0IDkgOiBTaWduYWxzIHRoYXQgYSBSRVNVTUUgY29uZGl0aW9uIChLIHN0YXRlIG9yIGFjdGl2aXR5IHJlc3RhcnQpIGhhcyBiZWVuIGRldGVjdGVkIG9uIHRoZSBVU0IgbGluZXMuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9SRVNVTUVfUG9zICg5VUwpIC8qITwgUG9zaXRpb24gb2YgUkVTVU1FIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1JFU1VNRV9Nc2sgKDB4MVVMIDw8IFVTQkRfRVZFTlRDQVVTRV9SRVNVTUVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFU1VNRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9SRVNVTUVfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBSZXN1bWUgbm90IGRldGVjdGVkICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfUkVTVU1FX0RldGVjdGVkICgxVUwpIC8qITwgUmVzdW1lIGRldGVjdGVkICovDQorDQorLyogQml0IDggOiBTaWduYWxzIHRoYXQgdGhlIFVTQiBsaW5lcyBoYXZlIGJlZW4gc2VlbiBpZGxlIGxvbmcgZW5vdWdoIGZvciB0aGUgZGV2aWNlIHRvIGVudGVyIHN1c3BlbmQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9TVVNQRU5EX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNVU1BFTkQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfU1VTUEVORF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVZFTlRDQVVTRV9TVVNQRU5EX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVVNQRU5EIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1NVU1BFTkRfTm90RGV0ZWN0ZWQgKDBVTCkgLyohPCBTdXNwZW5kIG5vdCBkZXRlY3RlZCAqLw0KKyNkZWZpbmUgVVNCRF9FVkVOVENBVVNFX1NVU1BFTkRfRGV0ZWN0ZWQgKDFVTCkgLyohPCBTdXNwZW5kIGRldGVjdGVkICovDQorDQorLyogQml0IDAgOiBDUkMgZXJyb3Igd2FzIGRldGVjdGVkIG9uIGlzb2Nocm9ub3VzIE9VVCBlbmRwb2ludCA4LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfSVNPT1VUQ1JDX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElTT09VVENSQyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9JU09PVVRDUkNfTXNrICgweDFVTCA8PCBVU0JEX0VWRU5UQ0FVU0VfSVNPT1VUQ1JDX1BvcykgLyohPCBCaXQgbWFzayBvZiBJU09PVVRDUkMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VWRU5UQ0FVU0VfSVNPT1VUQ1JDX05vdERldGVjdGVkICgwVUwpIC8qITwgTm8gZXJyb3IgZGV0ZWN0ZWQgKi8NCisjZGVmaW5lIFVTQkRfRVZFTlRDQVVTRV9JU09PVVRDUkNfRGV0ZWN0ZWQgKDFVTCkgLyohPCBFcnJvciBkZXRlY3RlZCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0JVU1NUQVRFICovDQorLyogRGVzY3JpcHRpb246IFByb3ZpZGVzIHRoZSBsb2dpYyBzdGF0ZSBvZiB0aGUgRCsgYW5kIEQtIGxpbmVzICovDQorDQorLyogQml0IDEgOiBTdGF0ZSBvZiB0aGUgRCsgbGluZSAqLw0KKyNkZWZpbmUgVVNCRF9CVVNTVEFURV9EUF9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBEUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQlVTU1RBVEVfRFBfTXNrICgweDFVTCA8PCBVU0JEX0JVU1NUQVRFX0RQX1BvcykgLyohPCBCaXQgbWFzayBvZiBEUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQlVTU1RBVEVfRFBfTG93ICgwVUwpIC8qITwgTG93ICovDQorI2RlZmluZSBVU0JEX0JVU1NUQVRFX0RQX0hpZ2ggKDFVTCkgLyohPCBIaWdoICovDQorDQorLyogQml0IDAgOiBTdGF0ZSBvZiB0aGUgRC0gbGluZSAqLw0KKyNkZWZpbmUgVVNCRF9CVVNTVEFURV9ETV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBETSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQlVTU1RBVEVfRE1fTXNrICgweDFVTCA8PCBVU0JEX0JVU1NUQVRFX0RNX1BvcykgLyohPCBCaXQgbWFzayBvZiBETSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQlVTU1RBVEVfRE1fTG93ICgwVUwpIC8qITwgTG93ICovDQorI2RlZmluZSBVU0JEX0JVU1NUQVRFX0RNX0hpZ2ggKDFVTCkgLyohPCBIaWdoICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSEFMVEVEX0VQSU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY29sbGVjdGlvblswXTogIElOIGVuZHBvaW50IGhhbHRlZCBzdGF0dXMuIENhbiBiZSB1c2VkIGFzIGlzIGFzIHJlc3BvbnNlIHRvIGEgR2V0U3RhdHVzKCkgcmVxdWVzdCB0byBlbmRwb2ludC4gKi8NCisNCisvKiBCaXRzIDE1Li4wIDogSU4gZW5kcG9pbnQgaGFsdGVkIHN0YXR1cy4gQ2FuIGJlIHVzZWQgYXMgaXMgYXMgcmVzcG9uc2UgdG8gYSBHZXRTdGF0dXMoKSByZXF1ZXN0IHRvIGVuZHBvaW50LiAqLw0KKyNkZWZpbmUgVVNCRF9IQUxURURfRVBJTl9HRVRTVEFUVVNfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgR0VUU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9IQUxURURfRVBJTl9HRVRTVEFUVVNfTXNrICgweEZGRkZVTCA8PCBVU0JEX0hBTFRFRF9FUElOX0dFVFNUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgR0VUU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9IQUxURURfRVBJTl9HRVRTVEFUVVNfTm90SGFsdGVkICgwVUwpIC8qITwgRW5kcG9pbnQgaXMgbm90IGhhbHRlZCAqLw0KKyNkZWZpbmUgVVNCRF9IQUxURURfRVBJTl9HRVRTVEFUVVNfSGFsdGVkICgxVUwpIC8qITwgRW5kcG9pbnQgaXMgaGFsdGVkICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSEFMVEVEX0VQT1VUICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBPVVQgZW5kcG9pbnQgaGFsdGVkIHN0YXR1cy4gQ2FuIGJlIHVzZWQgYXMgaXMgYXMgcmVzcG9uc2UgdG8gYSBHZXRTdGF0dXMoKSByZXF1ZXN0IHRvIGVuZHBvaW50LiAqLw0KKw0KKy8qIEJpdHMgMTUuLjAgOiBPVVQgZW5kcG9pbnQgaGFsdGVkIHN0YXR1cy4gQ2FuIGJlIHVzZWQgYXMgaXMgYXMgcmVzcG9uc2UgdG8gYSBHZXRTdGF0dXMoKSByZXF1ZXN0IHRvIGVuZHBvaW50LiAqLw0KKyNkZWZpbmUgVVNCRF9IQUxURURfRVBPVVRfR0VUU1RBVFVTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEdFVFNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQT1VUX0dFVFNUQVRVU19Nc2sgKDB4RkZGRlVMIDw8IFVTQkRfSEFMVEVEX0VQT1VUX0dFVFNUQVRVU19Qb3MpIC8qITwgQml0IG1hc2sgb2YgR0VUU1RBVFVTIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9IQUxURURfRVBPVVRfR0VUU1RBVFVTX05vdEhhbHRlZCAoMFVMKSAvKiE8IEVuZHBvaW50IGlzIG5vdCBoYWx0ZWQgKi8NCisjZGVmaW5lIFVTQkRfSEFMVEVEX0VQT1VUX0dFVFNUQVRVU19IYWx0ZWQgKDFVTCkgLyohPCBFbmRwb2ludCBpcyBoYWx0ZWQgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUFNUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGljaCBlbmRwb2ludCdzIEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCAqLw0KKw0KKy8qIEJpdCAyNCA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQ4X1BvcyAoMjRVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDggZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUOF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQ4X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDggZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUOF9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUOF9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAyMyA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQ3X1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUN19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQ3X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUN19Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUN19EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAyMiA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQ2X1BvcyAoMjJVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQ2X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDYgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNl9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNl9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAyMSA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQ1X1BvcyAoMjFVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNV9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNV9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNV9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAyMCA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQ0X1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQ0X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNF9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUNF9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAxOSA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQzX1BvcyAoMTlVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUM19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQzX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDMgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUM19Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUM19EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAxOCA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQyX1BvcyAoMThVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMl9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMl9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAxNyA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQxX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMV9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQxX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMV9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMV9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAxNiA6IEVuZHBvaW50J3MgRWFzeURNQSByZWdpc3RlcnMgY2FwdHVyZWQgc3RhdGUuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBPVVQwX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBTVEFUVVNfRVBPVVQwX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDAgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMF9Ob0RhdGEgKDBVTCkgLyohPCBFYXN5RE1BIHJlZ2lzdGVycyBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIGZvciB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQU1RBVFVTX0VQT1VUMF9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCA4IDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOOF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjhfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU44X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOOCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjhfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOOF9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCA3IDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElON19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjdfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjdfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElON19EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCA2IDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjZfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU42X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjZfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElONl9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCA1IDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjVfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU41X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjVfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElONV9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCA0IDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElONF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjRfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjRfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElONF9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAzIDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjNfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU4zX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjNfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOM19EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAyIDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjJfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU4yX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjJfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOMl9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAxIDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjFfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjFfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOMV9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdCAwIDogRW5kcG9pbnQncyBFYXN5RE1BIHJlZ2lzdGVycyBjYXB0dXJlZCBzdGF0ZS4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjBfTXNrICgweDFVTCA8PCBVU0JEX0VQU1RBVFVTX0VQSU4wX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFUVVNfRVBJTjBfTm9EYXRhICgwVUwpIC8qITwgRWFzeURNQSByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQVRVU19FUElOMF9EYXRhRG9uZSAoMVVMKSAvKiE8IEVhc3lETUEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBjYXB0dXJlZCBmb3IgdGhpcyBlbmRwb2ludCAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQREFUQVNUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGljaCBlbmRwb2ludChzKSBhbiBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBoYXMgb2NjdXJyZWQgKEVQREFUQSBldmVudCkgKi8NCisNCisvKiBCaXQgMjMgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIE9VVCBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ3X1BvcyAoMjNVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDdfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDdfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQT1VUNyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUN19Ob3RTdGFydGVkICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ3X1N0YXJ0ZWQgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAyMiA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgT1VUIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDZfUG9zICgyMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ2X05vdFN0YXJ0ZWQgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDZfU3RhcnRlZCAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDIxIDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBPVVQgZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNV9Qb3MgKDIxVUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ1X01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ1X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDVfTm90U3RhcnRlZCAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNV9TdGFydGVkICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMjAgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIE9VVCBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ0X1BvcyAoMjBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDRfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQT1VUNCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUNF9Ob3RTdGFydGVkICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQ0X1N0YXJ0ZWQgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAxOSA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgT1VUIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDNfUG9zICgxOVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUM19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQzX05vdFN0YXJ0ZWQgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDNfU3RhcnRlZCAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDE4IDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBPVVQgZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMl9Qb3MgKDE4VUwpIC8qITwgUG9zaXRpb24gb2YgRVBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQyX01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQyX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUE9VVDIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDJfTm90U3RhcnRlZCAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMl9TdGFydGVkICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMTcgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIE9VVCBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQxX1BvcyAoMTdVTCkgLyohPCBQb3NpdGlvbiBvZiBFUE9VVDEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDFfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUE9VVDFfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQT1VUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQT1VUMV9Ob3RTdGFydGVkICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBPVVQxX1N0YXJ0ZWQgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCA3IDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBJTiBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElON19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU43X05vdERvbmUgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElON19EYXRhRG9uZSAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDYgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIElOIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU42X01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjZfTm90RG9uZSAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU42X0RhdGFEb25lICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgNSA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgSU4gZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU41X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQSU41IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjVfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUElONV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONV9Ob3REb25lICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjVfRGF0YURvbmUgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCA0IDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBJTiBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElONCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU40X05vdERvbmUgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElONF9EYXRhRG9uZSAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogQml0IDMgOiBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIElOIGVuZHBvaW50LiBXcml0ZSAnMScgdG8gY2xlYXIuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBFUElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4zX01zayAoMHgxVUwgPDwgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEVQSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjNfTm90RG9uZSAoMFVMKSAvKiE8IE5vIGFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4zX0RhdGFEb25lICgxVUwpIC8qITwgQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCBoYXMgb2NjdXJyZWQgKi8NCisNCisvKiBCaXQgMiA6IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgSU4gZW5kcG9pbnQuIFdyaXRlICcxJyB0byBjbGVhci4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4yX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIEVQSU4yIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjJfTXNrICgweDFVTCA8PCBVU0JEX0VQREFUQVNUQVRVU19FUElOMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOMl9Ob3REb25lICgwVUwpIC8qITwgTm8gYWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjJfRGF0YURvbmUgKDFVTCkgLyohPCBBY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50IGhhcyBvY2N1cnJlZCAqLw0KKw0KKy8qIEJpdCAxIDogQWNrbm93bGVkZ2VkIGRhdGEgdHJhbnNmZXIgb24gdGhpcyBJTiBlbmRwb2ludC4gV3JpdGUgJzEnIHRvIGNsZWFyLiAqLw0KKyNkZWZpbmUgVVNCRF9FUERBVEFTVEFUVVNfRVBJTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgRVBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOMV9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBFUElOMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBEQVRBU1RBVFVTX0VQSU4xX05vdERvbmUgKDBVTCkgLyohPCBObyBhY2tub3dsZWRnZWQgZGF0YSB0cmFuc2ZlciBvbiB0aGlzIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX0VQREFUQVNUQVRVU19FUElOMV9EYXRhRG9uZSAoMVVMKSAvKiE8IEFja25vd2xlZGdlZCBkYXRhIHRyYW5zZmVyIG9uIHRoaXMgZW5kcG9pbnQgaGFzIG9jY3VycmVkICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfVVNCQUREUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXZpY2UgVVNCIGFkZHJlc3MgKi8NCisNCisvKiBCaXRzIDYuLjAgOiBEZXZpY2UgVVNCIGFkZHJlc3MgKi8NCisjZGVmaW5lIFVTQkRfVVNCQUREUl9BRERSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEFERFIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1VTQkFERFJfQUREUl9Nc2sgKDB4N0ZVTCA8PCBVU0JEX1VTQkFERFJfQUREUl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQUREUiBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9CTVJFUVVFU1RUWVBFICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgMCwgYm1SZXF1ZXN0VHlwZSAqLw0KKw0KKy8qIEJpdCA3IDogRGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9ESVJFQ1RJT05fUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgRElSRUNUSU9OIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX0RJUkVDVElPTl9Nc2sgKDB4MVVMIDw8IFVTQkRfQk1SRVFVRVNUVFlQRV9ESVJFQ1RJT05fUG9zKSAvKiE8IEJpdCBtYXNrIG9mIERJUkVDVElPTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9ESVJFQ1RJT05fSG9zdFRvRGV2aWNlICgwVUwpIC8qITwgSG9zdC10by1kZXZpY2UgKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9ESVJFQ1RJT05fRGV2aWNlVG9Ib3N0ICgxVUwpIC8qITwgRGV2aWNlLXRvLWhvc3QgKi8NCisNCisvKiBCaXRzIDYuLjUgOiBEYXRhIHRyYW5zZmVyIHR5cGUgKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9UWVBFX1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFRZUEUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfVFlQRV9Nc2sgKDB4M1VMIDw8IFVTQkRfQk1SRVFVRVNUVFlQRV9UWVBFX1BvcykgLyohPCBCaXQgbWFzayBvZiBUWVBFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1RZUEVfU3RhbmRhcmQgKDBVTCkgLyohPCBTdGFuZGFyZCAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1RZUEVfQ2xhc3MgKDFVTCkgLyohPCBDbGFzcyAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1RZUEVfVmVuZG9yICgyVUwpIC8qITwgVmVuZG9yICovDQorDQorLyogQml0cyA0Li4wIDogRGF0YSB0cmFuc2ZlciB0eXBlICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfUkVDSVBJRU5UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFQ0lQSUVOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9SRUNJUElFTlRfTXNrICgweDFGVUwgPDwgVVNCRF9CTVJFUVVFU1RUWVBFX1JFQ0lQSUVOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUkVDSVBJRU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9CTVJFUVVFU1RUWVBFX1JFQ0lQSUVOVF9EZXZpY2UgKDBVTCkgLyohPCBEZXZpY2UgKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9SRUNJUElFTlRfSW50ZXJmYWNlICgxVUwpIC8qITwgSW50ZXJmYWNlICovDQorI2RlZmluZSBVU0JEX0JNUkVRVUVTVFRZUEVfUkVDSVBJRU5UX0VuZHBvaW50ICgyVUwpIC8qITwgRW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfQk1SRVFVRVNUVFlQRV9SRUNJUElFTlRfT3RoZXIgKDNVTCkgLyohPCBPdGhlciAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0JSRVFVRVNUICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgMSwgYlJlcXVlc3QgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBTRVRVUCBkYXRhLCBieXRlIDEsIGJSZXF1ZXN0LiBWYWx1ZXMgcHJvdmlkZXMgZm9yIHN0YW5kYXJkIHJlcXVlc3RzIG9ubHksIHVzZXIgbXVzdCBpbXBsZW1lbnQgQ2xhc3MgYW5kIFZlbmRvciB2YWx1ZXMuICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEJSRVFVRVNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9Nc2sgKDB4RkZVTCA8PCBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1BvcykgLyohPCBCaXQgbWFzayBvZiBCUkVRVUVTVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX0dFVF9TVEFUVVMgKDBVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IEdFVF9TVEFUVVMgKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX0NMRUFSX0ZFQVRVUkUgKDFVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IENMRUFSX0ZFQVRVUkUgKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX1NFVF9GRUFUVVJFICgzVUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBTRVRfRkVBVFVSRSAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9TVERfU0VUX0FERFJFU1MgKDVVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IFNFVF9BRERSRVNTICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9HRVRfREVTQ1JJUFRPUiAoNlVMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgR0VUX0RFU0NSSVBUT1IgKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX1NFVF9ERVNDUklQVE9SICg3VUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBTRVRfREVTQ1JJUFRPUiAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9TVERfR0VUX0NPTkZJR1VSQVRJT04gKDhVTCkgLyohPCBTdGFuZGFyZCByZXF1ZXN0IEdFVF9DT05GSUdVUkFUSU9OICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9TRVRfQ09ORklHVVJBVElPTiAoOVVMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgU0VUX0NPTkZJR1VSQVRJT04gKi8NCisjZGVmaW5lIFVTQkRfQlJFUVVFU1RfQlJFUVVFU1RfU1REX0dFVF9JTlRFUkZBQ0UgKDEwVUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBHRVRfSU5URVJGQUNFICovDQorI2RlZmluZSBVU0JEX0JSRVFVRVNUX0JSRVFVRVNUX1NURF9TRVRfSU5URVJGQUNFICgxMVVMKSAvKiE8IFN0YW5kYXJkIHJlcXVlc3QgU0VUX0lOVEVSRkFDRSAqLw0KKyNkZWZpbmUgVVNCRF9CUkVRVUVTVF9CUkVRVUVTVF9TVERfU1lOQ0hfRlJBTUUgKDEyVUwpIC8qITwgU3RhbmRhcmQgcmVxdWVzdCBTWU5DSF9GUkFNRSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1dWQUxVRUwgKi8NCisvKiBEZXNjcmlwdGlvbjogU0VUVVAgZGF0YSwgYnl0ZSAyLCBMU0Igb2Ygd1ZhbHVlICovDQorDQorLyogQml0cyA3Li4wIDogU0VUVVAgZGF0YSwgYnl0ZSAyLCBMU0Igb2Ygd1ZhbHVlICovDQorI2RlZmluZSBVU0JEX1dWQUxVRUxfV1ZBTFVFTF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBXVkFMVUVMIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9XVkFMVUVMX1dWQUxVRUxfTXNrICgweEZGVUwgPDwgVVNCRF9XVkFMVUVMX1dWQUxVRUxfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdWQUxVRUwgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfV1ZBTFVFSCAqLw0KKy8qIERlc2NyaXB0aW9uOiBTRVRVUCBkYXRhLCBieXRlIDMsIE1TQiBvZiB3VmFsdWUgKi8NCisNCisvKiBCaXRzIDcuLjAgOiBTRVRVUCBkYXRhLCBieXRlIDMsIE1TQiBvZiB3VmFsdWUgKi8NCisjZGVmaW5lIFVTQkRfV1ZBTFVFSF9XVkFMVUVIX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFdWQUxVRUggZmllbGQuICovDQorI2RlZmluZSBVU0JEX1dWQUxVRUhfV1ZBTFVFSF9Nc2sgKDB4RkZVTCA8PCBVU0JEX1dWQUxVRUhfV1ZBTFVFSF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgV1ZBTFVFSCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9XSU5ERVhMICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgNCwgTFNCIG9mIHdJbmRleCAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFNFVFVQIGRhdGEsIGJ5dGUgNCwgTFNCIG9mIHdJbmRleCAqLw0KKyNkZWZpbmUgVVNCRF9XSU5ERVhMX1dJTkRFWExfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgV0lOREVYTCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfV0lOREVYTF9XSU5ERVhMX01zayAoMHhGRlVMIDw8IFVTQkRfV0lOREVYTF9XSU5ERVhMX1BvcykgLyohPCBCaXQgbWFzayBvZiBXSU5ERVhMIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1dJTkRFWEggKi8NCisvKiBEZXNjcmlwdGlvbjogU0VUVVAgZGF0YSwgYnl0ZSA1LCBNU0Igb2Ygd0luZGV4ICovDQorDQorLyogQml0cyA3Li4wIDogU0VUVVAgZGF0YSwgYnl0ZSA1LCBNU0Igb2Ygd0luZGV4ICovDQorI2RlZmluZSBVU0JEX1dJTkRFWEhfV0lOREVYSF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBXSU5ERVhIIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9XSU5ERVhIX1dJTkRFWEhfTXNrICgweEZGVUwgPDwgVVNCRF9XSU5ERVhIX1dJTkRFWEhfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdJTkRFWEggZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfV0xFTkdUSEwgKi8NCisvKiBEZXNjcmlwdGlvbjogU0VUVVAgZGF0YSwgYnl0ZSA2LCBMU0Igb2Ygd0xlbmd0aCAqLw0KKw0KKy8qIEJpdHMgNy4uMCA6IFNFVFVQIGRhdGEsIGJ5dGUgNiwgTFNCIG9mIHdMZW5ndGggKi8NCisjZGVmaW5lIFVTQkRfV0xFTkdUSExfV0xFTkdUSExfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgV0xFTkdUSEwgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1dMRU5HVEhMX1dMRU5HVEhMX01zayAoMHhGRlVMIDw8IFVTQkRfV0xFTkdUSExfV0xFTkdUSExfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFdMRU5HVEhMIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX1dMRU5HVEhIICovDQorLyogRGVzY3JpcHRpb246IFNFVFVQIGRhdGEsIGJ5dGUgNywgTVNCIG9mIHdMZW5ndGggKi8NCisNCisvKiBCaXRzIDcuLjAgOiBTRVRVUCBkYXRhLCBieXRlIDcsIE1TQiBvZiB3TGVuZ3RoICovDQorI2RlZmluZSBVU0JEX1dMRU5HVEhIX1dMRU5HVEhIX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFdMRU5HVEhIIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9XTEVOR1RISF9XTEVOR1RISF9Nc2sgKDB4RkZVTCA8PCBVU0JEX1dMRU5HVEhIX1dMRU5HVEhIX1BvcykgLyohPCBCaXQgbWFzayBvZiBXTEVOR1RISCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9TSVpFX0VQT1VUICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBBbW91bnQgb2YgYnl0ZXMgcmVjZWl2ZWQgbGFzdCBpbiB0aGUgZGF0YSBzdGFnZSBvZiB0aGlzIE9VVCBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IEFtb3VudCBvZiBieXRlcyByZWNlaXZlZCBsYXN0IGluIHRoZSBkYXRhIHN0YWdlIG9mIHRoaXMgT1VUIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX1NJWkVfRVBPVVRfU0laRV9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTSVpFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0VQT1VUX1NJWkVfTXNrICgweDdGVUwgPDwgVVNCRF9TSVpFX0VQT1VUX1NJWkVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNJWkUgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfU0laRV9JU09PVVQgKi8NCisvKiBEZXNjcmlwdGlvbjogQW1vdW50IG9mIGJ5dGVzIHJlY2VpdmVkIGxhc3Qgb24gdGhpcyBpc28gT1VUIGRhdGEgZW5kcG9pbnQgKi8NCisNCisvKiBCaXQgMTYgOiBaZXJvLWxlbmd0aCBkYXRhIHBhY2tldCByZWNlaXZlZCAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0lTT09VVF9aRVJPX1BvcyAoMTZVTCkgLyohPCBQb3NpdGlvbiBvZiBaRVJPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0lTT09VVF9aRVJPX01zayAoMHgxVUwgPDwgVVNCRF9TSVpFX0lTT09VVF9aRVJPX1BvcykgLyohPCBCaXQgbWFzayBvZiBaRVJPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9TSVpFX0lTT09VVF9aRVJPX05vcm1hbCAoMFVMKSAvKiE8IE5vIHplcm8tbGVuZ3RoIGRhdGEgcmVjZWl2ZWQsIHVzZSB2YWx1ZSBpbiBTSVpFICovDQorI2RlZmluZSBVU0JEX1NJWkVfSVNPT1VUX1pFUk9fWmVyb0RhdGEgKDFVTCkgLyohPCBaZXJvLWxlbmd0aCBkYXRhIHJlY2VpdmVkLCBpZ25vcmUgdmFsdWUgaW4gU0laRSAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IEFtb3VudCBvZiBieXRlcyByZWNlaXZlZCBsYXN0IG9uIHRoaXMgaXNvIE9VVCBkYXRhIGVuZHBvaW50ICovDQorI2RlZmluZSBVU0JEX1NJWkVfSVNPT1VUX1NJWkVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0laRSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfU0laRV9JU09PVVRfU0laRV9Nc2sgKDB4M0ZGVUwgPDwgVVNCRF9TSVpFX0lTT09VVF9TSVpFX1BvcykgLyohPCBCaXQgbWFzayBvZiBTSVpFIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VOQUJMRSAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgVVNCICovDQorDQorLyogQml0IDAgOiBFbmFibGUgVVNCICovDQorI2RlZmluZSBVU0JEX0VOQUJMRV9FTkFCTEVfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgRU5BQkxFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FTkFCTEVfRU5BQkxFX01zayAoMHgxVUwgPDwgVVNCRF9FTkFCTEVfRU5BQkxFX1BvcykgLyohPCBCaXQgbWFzayBvZiBFTkFCTEUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQgKDBVTCkgLyohPCBVU0IgcGVyaXBoZXJhbCBpcyBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgVVNCRF9FTkFCTEVfRU5BQkxFX0VuYWJsZWQgKDFVTCkgLyohPCBVU0IgcGVyaXBoZXJhbCBpcyBlbmFibGVkICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfVVNCUFVMTFVQICovDQorLyogRGVzY3JpcHRpb246IENvbnRyb2wgb2YgdGhlIFVTQiBwdWxsLXVwICovDQorDQorLyogQml0IDAgOiBDb250cm9sIG9mIHRoZSBVU0IgcHVsbC11cCBvbiB0aGUgRCsgbGluZSAqLw0KKyNkZWZpbmUgVVNCRF9VU0JQVUxMVVBfQ09OTkVDVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBDT05ORUNUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9VU0JQVUxMVVBfQ09OTkVDVF9Nc2sgKDB4MVVMIDw8IFVTQkRfVVNCUFVMTFVQX0NPTk5FQ1RfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENPTk5FQ1QgZmllbGQuICovDQorI2RlZmluZSBVU0JEX1VTQlBVTExVUF9DT05ORUNUX0Rpc2FibGVkICgwVUwpIC8qITwgUHVsbC11cCBpcyBkaXNjb25uZWN0ZWQgKi8NCisjZGVmaW5lIFVTQkRfVVNCUFVMTFVQX0NPTk5FQ1RfRW5hYmxlZCAoMVVMKSAvKiE8IFB1bGwtdXAgaXMgY29ubmVjdGVkIHRvIEQrICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRFBETVZBTFVFICovDQorLyogRGVzY3JpcHRpb246IFN0YXRlIGF0IHdoaWNoIHRoZSBEUERNRFJJVkUgdGFzayB3aWxsIGZvcmNlIEQrIGFuZCBELS4gVGhlIERQRE1OT0RSSVZFIHRhc2sgcmV2ZXJ0cyB0aGUgY29udHJvbCBvZiB0aGUgbGluZXMgdG8gTUFDIElQIChubyBmb3JjaW5nKS4gKi8NCisNCisvKiBCaXRzIDQuLjAgOiBTdGF0ZSBhdCB3aGljaCB0aGUgRFBETURSSVZFIHRhc2sgd2lsbCBmb3JjZSBEKyBhbmQgRC0gKi8NCisjZGVmaW5lIFVTQkRfRFBETVZBTFVFX1NUQVRFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9EUERNVkFMVUVfU1RBVEVfTXNrICgweDFGVUwgPDwgVVNCRF9EUERNVkFMVUVfU1RBVEVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFNUQVRFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9EUERNVkFMVUVfU1RBVEVfUmVzdW1lICgxVUwpIC8qITwgRCsgZm9yY2VkIGxvdywgRC0gZm9yY2VkIGhpZ2ggKEsgc3RhdGUpIGZvciBhIHRpbWluZyBwcmUtc2V0IGluIGhhcmR3YXJlICg1MCB1cyBvciA1IG1zLCBkZXBlbmRpbmcgb24gYnVzIHN0YXRlKSAqLw0KKyNkZWZpbmUgVVNCRF9EUERNVkFMVUVfU1RBVEVfSiAoMlVMKSAvKiE8IEQrIGZvcmNlZCBoaWdoLCBELSBmb3JjZWQgbG93IChKIHN0YXRlKSAqLw0KKyNkZWZpbmUgVVNCRF9EUERNVkFMVUVfU1RBVEVfSyAoNFVMKSAvKiE8IEQrIGZvcmNlZCBsb3csIEQtIGZvcmNlZCBoaWdoIChLIHN0YXRlKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0RUT0dHTEUgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSB0b2dnbGUgY29udHJvbCBhbmQgc3RhdHVzLiAqLw0KKw0KKy8qIEJpdHMgOS4uOCA6IERhdGEgdG9nZ2xlIHZhbHVlICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfVkFMVUVfUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgVkFMVUUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfVkFMVUVfTXNrICgweDNVTCA8PCBVU0JEX0RUT0dHTEVfVkFMVUVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFZBTFVFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9EVE9HR0xFX1ZBTFVFX05vcCAoMFVMKSAvKiE8IE5vIGFjdGlvbiBvbiBkYXRhIHRvZ2dsZSB3aGVuIHdyaXRpbmcgdGhlIHJlZ2lzdGVyIHdpdGggdGhpcyB2YWx1ZSAqLw0KKyNkZWZpbmUgVVNCRF9EVE9HR0xFX1ZBTFVFX0RhdGEwICgxVUwpIC8qITwgRGF0YSB0b2dnbGUgaXMgREFUQTAgb24gZW5kcG9pbnQgc2V0IGJ5IEVQIGFuZCBJTyAqLw0KKyNkZWZpbmUgVVNCRF9EVE9HR0xFX1ZBTFVFX0RhdGExICgyVUwpIC8qITwgRGF0YSB0b2dnbGUgaXMgREFUQTEgb24gZW5kcG9pbnQgc2V0IGJ5IEVQIGFuZCBJTyAqLw0KKw0KKy8qIEJpdCA3IDogU2VsZWN0cyBJTiBvciBPVVQgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9JT19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBJTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9JT19Nc2sgKDB4MVVMIDw8IFVTQkRfRFRPR0dMRV9JT19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU8gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0RUT0dHTEVfSU9fT3V0ICgwVUwpIC8qITwgU2VsZWN0cyBPVVQgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9JT19JbiAoMVVMKSAvKiE8IFNlbGVjdHMgSU4gZW5kcG9pbnQgKi8NCisNCisvKiBCaXRzIDIuLjAgOiBTZWxlY3QgYnVsayBlbmRwb2ludCBudW1iZXIgKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9FUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRFRPR0dMRV9FUF9Nc2sgKDB4N1VMIDw8IFVTQkRfRFRPR0dMRV9FUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRVBJTkVOICovDQorLyogRGVzY3JpcHRpb246IEVuZHBvaW50IElOIGVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogRW5hYmxlIGlzbyBJTiBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSVNPSU5fUG9zICg4VUwpIC8qITwgUG9zaXRpb24gb2YgSVNPSU4gZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JU09JTl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lTT0lOX1BvcykgLyohPCBCaXQgbWFzayBvZiBJU09JTiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lTT0lOX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGlzbyBJTiBlbmRwb2ludCA4ICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JU09JTl9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgaXNvIElOIGVuZHBvaW50IDggKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBJTiBlbmRwb2ludCA3ICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgSU43IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU43X01zayAoMHgxVUwgPDwgVVNCRF9FUElORU5fSU43X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjcgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjdfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgZW5kcG9pbnQgSU4gNyAobm8gcmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU43X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBJTiA3IChyZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorDQorLyogQml0IDYgOiBFbmFibGUgSU4gZW5kcG9pbnQgNiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU42X1BvcyAoNlVMKSAvKiE8IFBvc2l0aW9uIG9mIElONiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONl9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lONl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU42IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU42X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IElOIDYgKG5vIHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONl9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgZW5kcG9pbnQgSU4gNiAocmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIElOIGVuZHBvaW50IDUgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjUgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjVfTXNrICgweDFVTCA8PCBVU0JEX0VQSU5FTl9JTjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElONSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lONV9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBJTiA1IChubyByZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjVfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IElOIDUgKHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBJTiBlbmRwb2ludCA0ICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgSU40IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU40X01zayAoMHgxVUwgPDwgVVNCRF9FUElORU5fSU40X1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjRfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgZW5kcG9pbnQgSU4gNCAobm8gcmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU40X0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBJTiA0IChyZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorDQorLyogQml0IDMgOiBFbmFibGUgSU4gZW5kcG9pbnQgMyAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4zX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIElOMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOM19Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lOM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4zIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4zX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IElOIDMgKG5vIHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOM19FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgZW5kcG9pbnQgSU4gMyAocmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIElOIGVuZHBvaW50IDIgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBJTjIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjJfTXNrICgweDFVTCA8PCBVU0JEX0VQSU5FTl9JTjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIElOMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMl9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBlbmRwb2ludCBJTiAyIChubyByZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjJfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IElOIDIgKHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBJTiBlbmRwb2ludCAxICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgSU4xIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4xX01zayAoMHgxVUwgPDwgVVNCRF9FUElORU5fSU4xX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTjEgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQSU5FTl9JTjFfRGlzYWJsZSAoMFVMKSAvKiE8IERpc2FibGUgZW5kcG9pbnQgSU4gMSAobm8gcmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4xX0VuYWJsZSAoMVVMKSAvKiE8IEVuYWJsZSBlbmRwb2ludCBJTiAxIChyZXNwb25zZSB0byBJTiB0b2tlbnMpICovDQorDQorLyogQml0IDAgOiBFbmFibGUgSU4gZW5kcG9pbnQgMCAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4wX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIElOMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMF9Nc2sgKDB4MVVMIDw8IFVTQkRfRVBJTkVOX0lOMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSU4wIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElORU5fSU4wX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IElOIDAgKG5vIHJlc3BvbnNlIHRvIElOIHRva2VucykgKi8NCisjZGVmaW5lIFVTQkRfRVBJTkVOX0lOMF9FbmFibGUgKDFVTCkgLyohPCBFbmFibGUgZW5kcG9pbnQgSU4gMCAocmVzcG9uc2UgdG8gSU4gdG9rZW5zKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQT1VURU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5kcG9pbnQgT1VUIGVuYWJsZSAqLw0KKw0KKy8qIEJpdCA4IDogRW5hYmxlIGlzbyBPVVQgZW5kcG9pbnQgOCAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX0lTT09VVF9Qb3MgKDhVTCkgLyohPCBQb3NpdGlvbiBvZiBJU09PVVQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fSVNPT1VUX01zayAoMHgxVUwgPDwgVVNCRF9FUE9VVEVOX0lTT09VVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgSVNPT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX0lTT09VVF9EaXNhYmxlICgwVUwpIC8qITwgRGlzYWJsZSBpc28gT1VUIGVuZHBvaW50IDggKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9JU09PVVRfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGlzbyBPVVQgZW5kcG9pbnQgOCAqLw0KKw0KKy8qIEJpdCA3IDogRW5hYmxlIE9VVCBlbmRwb2ludCA3ICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQ3IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDdfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUN19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUNyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ3X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCA3IChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDdfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCA3IChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIE9VVCBlbmRwb2ludCA2ICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUNl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQ2IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDZfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUNiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ2X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCA2IChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDZfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCA2IChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCA1IDogRW5hYmxlIE9VVCBlbmRwb2ludCA1ICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUNV9Qb3MgKDVVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQ1IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDVfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUNSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ1X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCA1IChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDVfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCA1IChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCA0IDogRW5hYmxlIE9VVCBlbmRwb2ludCA0ICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUNF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQ0IGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDRfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUNF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUNCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQ0X0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCA0IChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDRfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCA0IChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIE9VVCBlbmRwb2ludCAzICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQzIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDNfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUMyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQzX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCAzIChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDNfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCAzIChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAyIDogRW5hYmxlIE9VVCBlbmRwb2ludCAyICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUMl9Qb3MgKDJVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQyIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDJfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUMiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQyX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCAyIChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDJfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCAyIChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAxIDogRW5hYmxlIE9VVCBlbmRwb2ludCAxICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQxIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDFfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUMV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUMSBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQxX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCAxIChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDFfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCAxIChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIE9VVCBlbmRwb2ludCAwICovDQorI2RlZmluZSBVU0JEX0VQT1VURU5fT1VUMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBPVVQwIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDBfTXNrICgweDFVTCA8PCBVU0JEX0VQT1VURU5fT1VUMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgT1VUMCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRFTl9PVVQwX0Rpc2FibGUgKDBVTCkgLyohPCBEaXNhYmxlIGVuZHBvaW50IE9VVCAwIChubyByZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVEVOX09VVDBfRW5hYmxlICgxVUwpIC8qITwgRW5hYmxlIGVuZHBvaW50IE9VVCAwIChyZXNwb25zZSB0byBPVVQgdG9rZW5zKSAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQU1RBTEwgKi8NCisvKiBEZXNjcmlwdGlvbjogU1RBTEwgZW5kcG9pbnRzICovDQorDQorLyogQml0IDggOiBTdGFsbCBzZWxlY3RlZCBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQUxMX1NUQUxMX1BvcyAoOFVMKSAvKiE8IFBvc2l0aW9uIG9mIFNUQUxMIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQUxMX1NUQUxMX01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQUxMX1NUQUxMX1BvcykgLyohPCBCaXQgbWFzayBvZiBTVEFMTCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9TVEFMTF9VblN0YWxsICgwVUwpIC8qITwgRG9uJ3Qgc3RhbGwgc2VsZWN0ZWQgZW5kcG9pbnQgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9TVEFMTF9TdGFsbCAoMVVMKSAvKiE8IFN0YWxsIHNlbGVjdGVkIGVuZHBvaW50ICovDQorDQorLyogQml0IDcgOiBTZWxlY3RzIElOIG9yIE9VVCBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQUxMX0lPX1BvcyAoN1VMKSAvKiE8IFBvc2l0aW9uIG9mIElPIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQUxMX0lPX01zayAoMHgxVUwgPDwgVVNCRF9FUFNUQUxMX0lPX1BvcykgLyohPCBCaXQgbWFzayBvZiBJTyBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9JT19PdXQgKDBVTCkgLyohPCBTZWxlY3RzIE9VVCBlbmRwb2ludCAqLw0KKyNkZWZpbmUgVVNCRF9FUFNUQUxMX0lPX0luICgxVUwpIC8qITwgU2VsZWN0cyBJTiBlbmRwb2ludCAqLw0KKw0KKy8qIEJpdHMgMi4uMCA6IFNlbGVjdCBlbmRwb2ludCBudW1iZXIgKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9FUF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBFUCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBTVEFMTF9FUF9Nc2sgKDB4N1VMIDw8IFVTQkRfRVBTVEFMTF9FUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgRVAgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSVNPU1BMSVQgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29udHJvbHMgdGhlIHNwbGl0IG9mIElTTyBidWZmZXJzICovDQorDQorLyogQml0cyAxNS4uMCA6IENvbnRyb2xzIHRoZSBzcGxpdCBvZiBJU08gYnVmZmVycyAqLw0KKyNkZWZpbmUgVVNCRF9JU09TUExJVF9TUExJVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBTUExJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSVNPU1BMSVRfU1BMSVRfTXNrICgweEZGRkZVTCA8PCBVU0JEX0lTT1NQTElUX1NQTElUX1BvcykgLyohPCBCaXQgbWFzayBvZiBTUExJVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSVNPU1BMSVRfU1BMSVRfT25lRGlyICgweDAwMDBVTCkgLyohPCBGdWxsIGJ1ZmZlciBkZWRpY2F0ZWQgdG8gZWl0aGVyIGlzbyBJTiBvciBPVVQgKi8NCisjZGVmaW5lIFVTQkRfSVNPU1BMSVRfU1BMSVRfSGFsZklOICgweDAwODBVTCkgLyohPCBMb3dlciBoYWxmIGZvciBJTiwgdXBwZXIgaGFsZiBmb3IgT1VUICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRlJBTUVDTlRSICovDQorLyogRGVzY3JpcHRpb246IFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIGZyYW1lIGNvdW50ZXIgKi8NCisNCisvKiBCaXRzIDEwLi4wIDogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3RhcnQgb2YgZnJhbWUgY291bnRlciAqLw0KKyNkZWZpbmUgVVNCRF9GUkFNRUNOVFJfRlJBTUVDTlRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIEZSQU1FQ05UUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRlJBTUVDTlRSX0ZSQU1FQ05UUl9Nc2sgKDB4N0ZGVUwgPDwgVVNCRF9GUkFNRUNOVFJfRlJBTUVDTlRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBGUkFNRUNOVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSVNPSU5DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29udHJvbHMgdGhlIHJlc3BvbnNlIG9mIHRoZSBJU08gSU4gZW5kcG9pbnQgdG8gYW4gSU4gdG9rZW4gd2hlbiBubyBkYXRhIGlzIHJlYWR5IHRvIGJlIHNlbnQgKi8NCisNCisvKiBCaXQgMCA6IENvbnRyb2xzIHRoZSByZXNwb25zZSBvZiB0aGUgSVNPIElOIGVuZHBvaW50IHRvIGFuIElOIHRva2VuIHdoZW4gbm8gZGF0YSBpcyByZWFkeSB0byBiZSBzZW50ICovDQorI2RlZmluZSBVU0JEX0lTT0lOQ09ORklHX1JFU1BPTlNFX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJFU1BPTlNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTkNPTkZJR19SRVNQT05TRV9Nc2sgKDB4MVVMIDw8IFVTQkRfSVNPSU5DT05GSUdfUkVTUE9OU0VfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJFU1BPTlNFIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTkNPTkZJR19SRVNQT05TRV9Ob1Jlc3AgKDBVTCkgLyohPCBFbmRwb2ludCBkb2VzIG5vdCByZXNwb25kIGluIHRoYXQgY2FzZSAqLw0KKyNkZWZpbmUgVVNCRF9JU09JTkNPTkZJR19SRVNQT05TRV9aZXJvRGF0YSAoMVVMKSAvKiE8IEVuZHBvaW50IHJlc3BvbmRzIHdpdGggYSB6ZXJvLWxlbmd0aCBkYXRhIHBhY2tldCBpbiB0aGF0IGNhc2UgKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9FUElOX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlci4gQWNjZXB0cyBhbnkgYWRkcmVzcyBpbiBEYXRhIFJBTS4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTl9QVFJfUFRSX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFBUUiBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTl9QVFJfUFRSX01zayAoMHhGRkZGRkZGRlVMIDw8IFVTQkRfRVBJTl9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRVBJTl9NQVhDTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICovDQorDQorLyogQml0cyA2Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8NCisjZGVmaW5lIFVTQkRfRVBJTl9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfRVBJTl9NQVhDTlRfTUFYQ05UX01zayAoMHg3RlVMIDw8IFVTQkRfRVBJTl9NQVhDTlRfTUFYQ05UX1BvcykgLyohPCBCaXQgbWFzayBvZiBNQVhDTlQgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRVBJTl9BTU9VTlQgKi8NCisvKiBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gY2x1c3RlclswXTogIE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgVVNCRF9FUElOX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUElOX0FNT1VOVF9BTU9VTlRfTXNrICgweDdGVUwgPDwgVVNCRF9FUElOX0FNT1VOVF9BTU9VTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEFNT1VOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9JU09JTl9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlci4gQWNjZXB0cyBhbnkgYWRkcmVzcyBpbiBEYXRhIFJBTS4gKi8NCisjZGVmaW5lIFVTQkRfSVNPSU5fUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT0lOX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVVNCRF9JU09JTl9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSVNPSU5fTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICovDQorDQorLyogQml0cyA5Li4wIDogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8NCisjZGVmaW5lIFVTQkRfSVNPSU5fTUFYQ05UX01BWENOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBNQVhDTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT0lOX01BWENOVF9NQVhDTlRfTXNrICgweDNGRlVMIDw8IFVTQkRfSVNPSU5fTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lTT0lOX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisNCisvKiBCaXRzIDkuLjAgOiBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaW4gdGhlIGxhc3QgdHJhbnNhY3Rpb24gKi8NCisjZGVmaW5lIFVTQkRfSVNPSU5fQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT0lOX0FNT1VOVF9BTU9VTlRfTXNrICgweDNGRlVMIDw8IFVTQkRfSVNPSU5fQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQT1VUX1BUUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlci4gQWNjZXB0cyBhbnkgYWRkcmVzcyBpbiBEYXRhIFJBTS4gKi8NCisjZGVmaW5lIFVTQkRfRVBPVVRfUFRSX1BUUl9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBQVFIgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0VQT1VUX1BUUl9QVFJfTXNrICgweEZGRkZGRkZGVUwgPDwgVVNCRF9FUE9VVF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfRVBPVVRfTUFYQ05UICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNsdXN0ZXJbMF06ICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgNi4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICovDQorI2RlZmluZSBVU0JEX0VQT1VUX01BWENOVF9NQVhDTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgTUFYQ05UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVF9NQVhDTlRfTUFYQ05UX01zayAoMHg3RlVMIDw8IFVTQkRfRVBPVVRfTUFYQ05UX01BWENOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgTUFYQ05UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0VQT1VUX0FNT1VOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBEZXNjcmlwdGlvbiBjbHVzdGVyWzBdOiAgTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorDQorLyogQml0cyA2Li4wIDogTnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGluIHRoZSBsYXN0IHRyYW5zYWN0aW9uICovDQorI2RlZmluZSBVU0JEX0VQT1VUX0FNT1VOVF9BTU9VTlRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQU1PVU5UIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9FUE9VVF9BTU9VTlRfQU1PVU5UX01zayAoMHg3RlVMIDw8IFVTQkRfRVBPVVRfQU1PVU5UX0FNT1VOVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgQU1PVU5UIGZpZWxkLiAqLw0KKw0KKy8qIFJlZ2lzdGVyOiBVU0JEX0lTT09VVF9QVFIgKi8NCisvKiBEZXNjcmlwdGlvbjogRGF0YSBwb2ludGVyICovDQorDQorLyogQml0cyAzMS4uMCA6IERhdGEgcG9pbnRlci4gQWNjZXB0cyBhbnkgYWRkcmVzcyBpbiBEYXRhIFJBTS4gKi8NCisjZGVmaW5lIFVTQkRfSVNPT1VUX1BUUl9QVFJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUFRSIGZpZWxkLiAqLw0KKyNkZWZpbmUgVVNCRF9JU09PVVRfUFRSX1BUUl9Nc2sgKDB4RkZGRkZGRkZVTCA8PCBVU0JEX0lTT09VVF9QVFJfUFRSX1BvcykgLyohPCBCaXQgbWFzayBvZiBQVFIgZmllbGQuICovDQorDQorLyogUmVnaXN0ZXI6IFVTQkRfSVNPT1VUX01BWENOVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyICovDQorI2RlZmluZSBVU0JEX0lTT09VVF9NQVhDTlRfTUFYQ05UX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIE1BWENOVCBmaWVsZC4gKi8NCisjZGVmaW5lIFVTQkRfSVNPT1VUX01BWENOVF9NQVhDTlRfTXNrICgweDNGRlVMIDw8IFVTQkRfSVNPT1VUX01BWENOVF9NQVhDTlRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIE1BWENOVCBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogVVNCRF9JU09PVVRfQU1PVU5UICovDQorLyogRGVzY3JpcHRpb246IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKw0KKy8qIEJpdHMgOS4uMCA6IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiB0aGUgbGFzdCB0cmFuc2FjdGlvbiAqLw0KKyNkZWZpbmUgVVNCRF9JU09PVVRfQU1PVU5UX0FNT1VOVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBBTU9VTlQgZmllbGQuICovDQorI2RlZmluZSBVU0JEX0lTT09VVF9BTU9VTlRfQU1PVU5UX01zayAoMHgzRkZVTCA8PCBVU0JEX0lTT09VVF9BTU9VTlRfQU1PVU5UX1BvcykgLyohPCBCaXQgbWFzayBvZiBBTU9VTlQgZmllbGQuICovDQorDQorDQorLyogUGVyaXBoZXJhbDogV0RUICovDQorLyogRGVzY3JpcHRpb246IFdhdGNoZG9nIFRpbWVyICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9JTlRFTlNFVCAqLw0KKy8qIERlc2NyaXB0aW9uOiBFbmFibGUgaW50ZXJydXB0ICovDQorDQorLyogQml0IDAgOiBXcml0ZSAnMScgdG8gRW5hYmxlIGludGVycnVwdCBmb3IgVElNRU9VVCBldmVudCAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOU0VUX1RJTUVPVVRfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgVElNRU9VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9JTlRFTlNFVF9USU1FT1VUX01zayAoMHgxVUwgPDwgV0RUX0lOVEVOU0VUX1RJTUVPVVRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFRJTUVPVVQgZmllbGQuICovDQorI2RlZmluZSBXRFRfSU5URU5TRVRfVElNRU9VVF9EaXNhYmxlZCAoMFVMKSAvKiE8IFJlYWQ6IERpc2FibGVkICovDQorI2RlZmluZSBXRFRfSU5URU5TRVRfVElNRU9VVF9FbmFibGVkICgxVUwpIC8qITwgUmVhZDogRW5hYmxlZCAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOU0VUX1RJTUVPVVRfU2V0ICgxVUwpIC8qITwgRW5hYmxlICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9JTlRFTkNMUiAqLw0KKy8qIERlc2NyaXB0aW9uOiBEaXNhYmxlIGludGVycnVwdCAqLw0KKw0KKy8qIEJpdCAwIDogV3JpdGUgJzEnIHRvIERpc2FibGUgaW50ZXJydXB0IGZvciBUSU1FT1VUIGV2ZW50ICovDQorI2RlZmluZSBXRFRfSU5URU5DTFJfVElNRU9VVF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBUSU1FT1VUIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0lOVEVOQ0xSX1RJTUVPVVRfTXNrICgweDFVTCA8PCBXRFRfSU5URU5DTFJfVElNRU9VVF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgVElNRU9VVCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9JTlRFTkNMUl9USU1FT1VUX0Rpc2FibGVkICgwVUwpIC8qITwgUmVhZDogRGlzYWJsZWQgKi8NCisjZGVmaW5lIFdEVF9JTlRFTkNMUl9USU1FT1VUX0VuYWJsZWQgKDFVTCkgLyohPCBSZWFkOiBFbmFibGVkICovDQorI2RlZmluZSBXRFRfSU5URU5DTFJfVElNRU9VVF9DbGVhciAoMVVMKSAvKiE8IERpc2FibGUgKi8NCisNCisvKiBSZWdpc3RlcjogV0RUX1JVTlNUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSdW4gc3RhdHVzICovDQorDQorLyogQml0IDAgOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHdhdGNoZG9nIGlzIHJ1bm5pbmcgKi8NCisjZGVmaW5lIFdEVF9SVU5TVEFUVVNfUlVOU1RBVFVTX1BvcyAoMFVMKSAvKiE8IFBvc2l0aW9uIG9mIFJVTlNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SVU5TVEFUVVNfUlVOU1RBVFVTX01zayAoMHgxVUwgPDwgV0RUX1JVTlNUQVRVU19SVU5TVEFUVVNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJVTlNUQVRVUyBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SVU5TVEFUVVNfUlVOU1RBVFVTX05vdFJ1bm5pbmcgKDBVTCkgLyohPCBXYXRjaGRvZyBub3QgcnVubmluZyAqLw0KKyNkZWZpbmUgV0RUX1JVTlNUQVRVU19SVU5TVEFUVVNfUnVubmluZyAoMVVMKSAvKiE8IFdhdGNoZG9nIGlzIHJ1bm5pbmcgKi8NCisNCisvKiBSZWdpc3RlcjogV0RUX1JFUVNUQVRVUyAqLw0KKy8qIERlc2NyaXB0aW9uOiBSZXF1ZXN0IHN0YXR1cyAqLw0KKw0KKy8qIEJpdCA3IDogUmVxdWVzdCBzdGF0dXMgZm9yIFJSWzddIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSN19Qb3MgKDdVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjcgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSN19Nc2sgKDB4MVVMIDw8IFdEVF9SRVFTVEFUVVNfUlI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjcgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSN19EaXNhYmxlZE9yUmVxdWVzdGVkICgwVUwpIC8qITwgUlJbN10gcmVnaXN0ZXIgaXMgbm90IGVuYWJsZWQsIG9yIGFyZSBhbHJlYWR5IHJlcXVlc3RpbmcgcmVsb2FkICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSN19FbmFibGVkQW5kVW5yZXF1ZXN0ZWQgKDFVTCkgLyohPCBSUls3XSByZWdpc3RlciBpcyBlbmFibGVkLCBhbmQgYXJlIG5vdCB5ZXQgcmVxdWVzdGluZyByZWxvYWQgKi8NCisNCisvKiBCaXQgNiA6IFJlcXVlc3Qgc3RhdHVzIGZvciBSUls2XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjZfUG9zICg2VUwpIC8qITwgUG9zaXRpb24gb2YgUlI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjZfTXNrICgweDFVTCA8PCBXRFRfUkVRU1RBVFVTX1JSNl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlI2IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjZfRGlzYWJsZWRPclJlcXVlc3RlZCAoMFVMKSAvKiE8IFJSWzZdIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkLCBvciBhcmUgYWxyZWFkeSByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjZfRW5hYmxlZEFuZFVucmVxdWVzdGVkICgxVUwpIC8qITwgUlJbNl0gcmVnaXN0ZXIgaXMgZW5hYmxlZCwgYW5kIGFyZSBub3QgeWV0IHJlcXVlc3RpbmcgcmVsb2FkICovDQorDQorLyogQml0IDUgOiBSZXF1ZXN0IHN0YXR1cyBmb3IgUlJbNV0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSNSBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI1X01zayAoMHgxVUwgPDwgV0RUX1JFUVNUQVRVU19SUjVfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSNSBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI1X0Rpc2FibGVkT3JSZXF1ZXN0ZWQgKDBVTCkgLyohPCBSUls1XSByZWdpc3RlciBpcyBub3QgZW5hYmxlZCwgb3IgYXJlIGFscmVhZHkgcmVxdWVzdGluZyByZWxvYWQgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlI1X0VuYWJsZWRBbmRVbnJlcXVlc3RlZCAoMVVMKSAvKiE8IFJSWzVdIHJlZ2lzdGVyIGlzIGVuYWJsZWQsIGFuZCBhcmUgbm90IHlldCByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKw0KKy8qIEJpdCA0IDogUmVxdWVzdCBzdGF0dXMgZm9yIFJSWzRdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNF9Qb3MgKDRVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjQgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNF9Nc2sgKDB4MVVMIDw8IFdEVF9SRVFTVEFUVVNfUlI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjQgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNF9EaXNhYmxlZE9yUmVxdWVzdGVkICgwVUwpIC8qITwgUlJbNF0gcmVnaXN0ZXIgaXMgbm90IGVuYWJsZWQsIG9yIGFyZSBhbHJlYWR5IHJlcXVlc3RpbmcgcmVsb2FkICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSNF9FbmFibGVkQW5kVW5yZXF1ZXN0ZWQgKDFVTCkgLyohPCBSUls0XSByZWdpc3RlciBpcyBlbmFibGVkLCBhbmQgYXJlIG5vdCB5ZXQgcmVxdWVzdGluZyByZWxvYWQgKi8NCisNCisvKiBCaXQgMyA6IFJlcXVlc3Qgc3RhdHVzIGZvciBSUlszXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjNfUG9zICgzVUwpIC8qITwgUG9zaXRpb24gb2YgUlIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjNfTXNrICgweDFVTCA8PCBXRFRfUkVRU1RBVFVTX1JSM19Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlIzIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjNfRGlzYWJsZWRPclJlcXVlc3RlZCAoMFVMKSAvKiE8IFJSWzNdIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkLCBvciBhcmUgYWxyZWFkeSByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjNfRW5hYmxlZEFuZFVucmVxdWVzdGVkICgxVUwpIC8qITwgUlJbM10gcmVnaXN0ZXIgaXMgZW5hYmxlZCwgYW5kIGFyZSBub3QgeWV0IHJlcXVlc3RpbmcgcmVsb2FkICovDQorDQorLyogQml0IDIgOiBSZXF1ZXN0IHN0YXR1cyBmb3IgUlJbMl0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSMiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIyX01zayAoMHgxVUwgPDwgV0RUX1JFUVNUQVRVU19SUjJfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSMiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIyX0Rpc2FibGVkT3JSZXF1ZXN0ZWQgKDBVTCkgLyohPCBSUlsyXSByZWdpc3RlciBpcyBub3QgZW5hYmxlZCwgb3IgYXJlIGFscmVhZHkgcmVxdWVzdGluZyByZWxvYWQgKi8NCisjZGVmaW5lIFdEVF9SRVFTVEFUVVNfUlIyX0VuYWJsZWRBbmRVbnJlcXVlc3RlZCAoMVVMKSAvKiE8IFJSWzJdIHJlZ2lzdGVyIGlzIGVuYWJsZWQsIGFuZCBhcmUgbm90IHlldCByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKw0KKy8qIEJpdCAxIDogUmVxdWVzdCBzdGF0dXMgZm9yIFJSWzFdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMV9Qb3MgKDFVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjEgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMV9Nc2sgKDB4MVVMIDw8IFdEVF9SRVFTVEFUVVNfUlIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjEgZmllbGQuICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMV9EaXNhYmxlZE9yUmVxdWVzdGVkICgwVUwpIC8qITwgUlJbMV0gcmVnaXN0ZXIgaXMgbm90IGVuYWJsZWQsIG9yIGFyZSBhbHJlYWR5IHJlcXVlc3RpbmcgcmVsb2FkICovDQorI2RlZmluZSBXRFRfUkVRU1RBVFVTX1JSMV9FbmFibGVkQW5kVW5yZXF1ZXN0ZWQgKDFVTCkgLyohPCBSUlsxXSByZWdpc3RlciBpcyBlbmFibGVkLCBhbmQgYXJlIG5vdCB5ZXQgcmVxdWVzdGluZyByZWxvYWQgKi8NCisNCisvKiBCaXQgMCA6IFJlcXVlc3Qgc3RhdHVzIGZvciBSUlswXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjBfTXNrICgweDFVTCA8PCBXRFRfUkVRU1RBVFVTX1JSMF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlIwIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjBfRGlzYWJsZWRPclJlcXVlc3RlZCAoMFVMKSAvKiE8IFJSWzBdIHJlZ2lzdGVyIGlzIG5vdCBlbmFibGVkLCBvciBhcmUgYWxyZWFkeSByZXF1ZXN0aW5nIHJlbG9hZCAqLw0KKyNkZWZpbmUgV0RUX1JFUVNUQVRVU19SUjBfRW5hYmxlZEFuZFVucmVxdWVzdGVkICgxVUwpIC8qITwgUlJbMF0gcmVnaXN0ZXIgaXMgZW5hYmxlZCwgYW5kIGFyZSBub3QgeWV0IHJlcXVlc3RpbmcgcmVsb2FkICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9DUlYgKi8NCisvKiBEZXNjcmlwdGlvbjogQ291bnRlciByZWxvYWQgdmFsdWUgKi8NCisNCisvKiBCaXRzIDMxLi4wIDogQ291bnRlciByZWxvYWQgdmFsdWUgaW4gbnVtYmVyIG9mIGN5Y2xlcyBvZiB0aGUgMzIuNzY4IGtIeiBjbG9jayAqLw0KKyNkZWZpbmUgV0RUX0NSVl9DUlZfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgQ1JWIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX0NSVl9DUlZfTXNrICgweEZGRkZGRkZGVUwgPDwgV0RUX0NSVl9DUlZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIENSViBmaWVsZC4gKi8NCisNCisvKiBSZWdpc3RlcjogV0RUX1JSRU4gKi8NCisvKiBEZXNjcmlwdGlvbjogRW5hYmxlIHJlZ2lzdGVyIGZvciByZWxvYWQgcmVxdWVzdCByZWdpc3RlcnMgKi8NCisNCisvKiBCaXQgNyA6IEVuYWJsZSBvciBkaXNhYmxlIFJSWzddIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjdfUG9zICg3VUwpIC8qITwgUG9zaXRpb24gb2YgUlI3IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI3X01zayAoMHgxVUwgPDwgV0RUX1JSRU5fUlI3X1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjcgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjdfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFJSWzddIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjdfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBSUls3XSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCA2IDogRW5hYmxlIG9yIGRpc2FibGUgUlJbNl0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNl9Qb3MgKDZVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjYgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjZfTXNrICgweDFVTCA8PCBXRFRfUlJFTl9SUjZfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSNiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNl9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgUlJbNl0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNl9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFJSWzZdIHJlZ2lzdGVyICovDQorDQorLyogQml0IDUgOiBFbmFibGUgb3IgZGlzYWJsZSBSUls1XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI1X1BvcyAoNVVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSNSBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSNV9Nc2sgKDB4MVVMIDw8IFdEVF9SUkVOX1JSNV9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlI1IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI1X0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBSUls1XSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI1X0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgUlJbNV0gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgNCA6IEVuYWJsZSBvciBkaXNhYmxlIFJSWzRdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjRfUG9zICg0VUwpIC8qITwgUG9zaXRpb24gb2YgUlI0IGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlI0X01zayAoMHgxVUwgPDwgV0RUX1JSRU5fUlI0X1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjQgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjRfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFJSWzRdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjRfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBSUls0XSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzIDogRW5hYmxlIG9yIGRpc2FibGUgUlJbM10gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSM19Qb3MgKDNVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjMgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjNfTXNrICgweDFVTCA8PCBXRFRfUlJFTl9SUjNfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSMyBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSM19EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgUlJbM10gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSM19FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFJSWzNdIHJlZ2lzdGVyICovDQorDQorLyogQml0IDIgOiBFbmFibGUgb3IgZGlzYWJsZSBSUlsyXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIyX1BvcyAoMlVMKSAvKiE8IFBvc2l0aW9uIG9mIFJSMiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMl9Nc2sgKDB4MVVMIDw8IFdEVF9SUkVOX1JSMl9Qb3MpIC8qITwgQml0IG1hc2sgb2YgUlIyIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIyX0Rpc2FibGVkICgwVUwpIC8qITwgRGlzYWJsZSBSUlsyXSByZWdpc3RlciAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIyX0VuYWJsZWQgKDFVTCkgLyohPCBFbmFibGUgUlJbMl0gcmVnaXN0ZXIgKi8NCisNCisvKiBCaXQgMSA6IEVuYWJsZSBvciBkaXNhYmxlIFJSWzFdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjFfUG9zICgxVUwpIC8qITwgUG9zaXRpb24gb2YgUlIxIGZpZWxkLiAqLw0KKyNkZWZpbmUgV0RUX1JSRU5fUlIxX01zayAoMHgxVUwgPDwgV0RUX1JSRU5fUlIxX1BvcykgLyohPCBCaXQgbWFzayBvZiBSUjEgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjFfRGlzYWJsZWQgKDBVTCkgLyohPCBEaXNhYmxlIFJSWzFdIHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjFfRW5hYmxlZCAoMVVMKSAvKiE8IEVuYWJsZSBSUlsxXSByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAwIDogRW5hYmxlIG9yIGRpc2FibGUgUlJbMF0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMF9Qb3MgKDBVTCkgLyohPCBQb3NpdGlvbiBvZiBSUjAgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJFTl9SUjBfTXNrICgweDFVTCA8PCBXRFRfUlJFTl9SUjBfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIFJSMCBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMF9EaXNhYmxlZCAoMFVMKSAvKiE8IERpc2FibGUgUlJbMF0gcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFdEVF9SUkVOX1JSMF9FbmFibGVkICgxVUwpIC8qITwgRW5hYmxlIFJSWzBdIHJlZ2lzdGVyICovDQorDQorLyogUmVnaXN0ZXI6IFdEVF9DT05GSUcgKi8NCisvKiBEZXNjcmlwdGlvbjogQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLw0KKw0KKy8qIEJpdCAzIDogQ29uZmlndXJlIHRoZSB3YXRjaGRvZyB0byBlaXRoZXIgYmUgcGF1c2VkLCBvciBrZXB0IHJ1bm5pbmcsIHdoaWxlIHRoZSBDUFUgaXMgaGFsdGVkIGJ5IHRoZSBkZWJ1Z2dlciAqLw0KKyNkZWZpbmUgV0RUX0NPTkZJR19IQUxUX1BvcyAoM1VMKSAvKiE8IFBvc2l0aW9uIG9mIEhBTFQgZmllbGQuICovDQorI2RlZmluZSBXRFRfQ09ORklHX0hBTFRfTXNrICgweDFVTCA8PCBXRFRfQ09ORklHX0hBTFRfUG9zKSAvKiE8IEJpdCBtYXNrIG9mIEhBTFQgZmllbGQuICovDQorI2RlZmluZSBXRFRfQ09ORklHX0hBTFRfUGF1c2UgKDBVTCkgLyohPCBQYXVzZSB3YXRjaGRvZyB3aGlsZSB0aGUgQ1BVIGlzIGhhbHRlZCBieSB0aGUgZGVidWdnZXIgKi8NCisjZGVmaW5lIFdEVF9DT05GSUdfSEFMVF9SdW4gKDFVTCkgLyohPCBLZWVwIHRoZSB3YXRjaGRvZyBydW5uaW5nIHdoaWxlIHRoZSBDUFUgaXMgaGFsdGVkIGJ5IHRoZSBkZWJ1Z2dlciAqLw0KKw0KKy8qIEJpdCAwIDogQ29uZmlndXJlIHRoZSB3YXRjaGRvZyB0byBlaXRoZXIgYmUgcGF1c2VkLCBvciBrZXB0IHJ1bm5pbmcsIHdoaWxlIHRoZSBDUFUgaXMgc2xlZXBpbmcgKi8NCisjZGVmaW5lIFdEVF9DT05GSUdfU0xFRVBfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgU0xFRVAgZmllbGQuICovDQorI2RlZmluZSBXRFRfQ09ORklHX1NMRUVQX01zayAoMHgxVUwgPDwgV0RUX0NPTkZJR19TTEVFUF9Qb3MpIC8qITwgQml0IG1hc2sgb2YgU0xFRVAgZmllbGQuICovDQorI2RlZmluZSBXRFRfQ09ORklHX1NMRUVQX1BhdXNlICgwVUwpIC8qITwgUGF1c2Ugd2F0Y2hkb2cgd2hpbGUgdGhlIENQVSBpcyBzbGVlcGluZyAqLw0KKyNkZWZpbmUgV0RUX0NPTkZJR19TTEVFUF9SdW4gKDFVTCkgLyohPCBLZWVwIHRoZSB3YXRjaGRvZyBydW5uaW5nIHdoaWxlIHRoZSBDUFUgaXMgc2xlZXBpbmcgKi8NCisNCisvKiBSZWdpc3RlcjogV0RUX1JSICovDQorLyogRGVzY3JpcHRpb246IERlc2NyaXB0aW9uIGNvbGxlY3Rpb25bMF06ICBSZWxvYWQgcmVxdWVzdCAwICovDQorDQorLyogQml0cyAzMS4uMCA6IFJlbG9hZCByZXF1ZXN0IHJlZ2lzdGVyICovDQorI2RlZmluZSBXRFRfUlJfUlJfUG9zICgwVUwpIC8qITwgUG9zaXRpb24gb2YgUlIgZmllbGQuICovDQorI2RlZmluZSBXRFRfUlJfUlJfTXNrICgweEZGRkZGRkZGVUwgPDwgV0RUX1JSX1JSX1BvcykgLyohPCBCaXQgbWFzayBvZiBSUiBmaWVsZC4gKi8NCisjZGVmaW5lIFdEVF9SUl9SUl9SZWxvYWQgKDB4NkU1MjQ2MzVVTCkgLyohPCBWYWx1ZSB0byByZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSB3YXRjaGRvZyB0aW1lciAqLw0KKw0KKw0KKy8qbGludCAtLWZsYiAiTGVhdmUgbGlicmFyeSByZWdpb24iICovDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTI4NDBfcGVyaXBoZXJhbHMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX3BlcmlwaGVyYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmM2FkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyODQwX3BlcmlwaGVyYWxzLmgKQEAgLTAsMCArMSwyNDAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIF9OUkY1Mjg0MF9QRVJJUEhFUkFMU19IDQorI2RlZmluZSBfTlJGNTI4NDBfUEVSSVBIRVJBTFNfSA0KKw0KKw0KKy8qIEZsb2F0aW5nIFBvaW50IFVuaXQgKi8NCisjZGVmaW5lIEZQVV9QUkVTRU5UDQorI2RlZmluZSBGUFVfQ09VTlQgMQ0KKw0KKy8qIFN5c3RpY2sgdGltZXIgKi8NCisjZGVmaW5lIFNZU1RJQ0tfUFJFU0VOVA0KKyNkZWZpbmUgU1lTVElDS19DT1VOVCAxDQorDQorLyogU29mdHdhcmUgSW50ZXJydXB0cyAqLw0KKyNkZWZpbmUgU1dJX1BSRVNFTlQNCisjZGVmaW5lIFNXSV9DT1VOVCA2DQorDQorLyogTWVtb3J5IFdhdGNoIFVuaXQgKi8NCisjZGVmaW5lIE1XVV9QUkVTRU5UDQorI2RlZmluZSBNV1VfQ09VTlQgMQ0KKw0KKy8qIEdQSU8gKi8NCisjZGVmaW5lIEdQSU9fUFJFU0VOVA0KKyNkZWZpbmUgR1BJT19DT1VOVCAyDQorDQorI2RlZmluZSBQMF9QSU5fTlVNIDMyDQorI2RlZmluZSBQMV9QSU5fTlVNIDE2DQorDQorLyogQUNMICovDQorI2RlZmluZSBBQ0xfUFJFU0VOVA0KKw0KKyNkZWZpbmUgQUNMX1JFR0lPTlNfQ09VTlQgOA0KKw0KKy8qIFJhZGlvICovDQorI2RlZmluZSBSQURJT19QUkVTRU5UDQorI2RlZmluZSBSQURJT19DT1VOVCAxDQorDQorLyogQWNjZWxlcmF0ZWQgQWRkcmVzcyBSZXNvbHZlciAqLw0KKyNkZWZpbmUgQUFSX1BSRVNFTlQNCisjZGVmaW5lIEFBUl9DT1VOVCAxDQorDQorI2RlZmluZSBBQVJfTUFYX0lSS19OVU0gMTYNCisNCisvKiBBRVMgRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlIGVuY3J5cHRpb24gKi8NCisjZGVmaW5lIEVDQl9QUkVTRU5UDQorI2RlZmluZSBFQ0JfQ09VTlQgMQ0KKw0KKy8qIEFFUyBDQ00gbW9kZSBlbmNyeXB0aW9uICovDQorI2RlZmluZSBDQ01fUFJFU0VOVA0KKyNkZWZpbmUgQ0NNX0NPVU5UIDENCisNCisvKiBORkMgVGFnICovDQorI2RlZmluZSBORkNUX1BSRVNFTlQNCisjZGVmaW5lIE5GQ1RfQ09VTlQgMQ0KKw0KKy8qIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbCBJbnRlcmNvbm5lY3QgKi8NCisjZGVmaW5lIFBQSV9QUkVTRU5UDQorI2RlZmluZSBQUElfQ09VTlQgMQ0KKw0KKyNkZWZpbmUgUFBJX0NIX05VTSAyMA0KKyNkZWZpbmUgUFBJX0dST1VQX05VTSA2DQorI2RlZmluZSBQUElfRkVBVFVSRV9GT1JLU19QUkVTRU5UDQorDQorLyogRXZlbnQgR2VuZXJhdG9yIFVuaXQgKi8NCisjZGVmaW5lIEVHVV9QUkVTRU5UDQorI2RlZmluZSBFR1VfQ09VTlQgNg0KKw0KKyNkZWZpbmUgRUdVMF9DSF9OVU0gMTYNCisjZGVmaW5lIEVHVTFfQ0hfTlVNIDE2DQorI2RlZmluZSBFR1UyX0NIX05VTSAxNg0KKyNkZWZpbmUgRUdVM19DSF9OVU0gMTYNCisjZGVmaW5lIEVHVTRfQ0hfTlVNIDE2DQorI2RlZmluZSBFR1U1X0NIX05VTSAxNg0KKw0KKy8qIFRpbWVyL0NvdW50ZXIgKi8NCisjZGVmaW5lIFRJTUVSX1BSRVNFTlQNCisjZGVmaW5lIFRJTUVSX0NPVU5UIDUNCisNCisjZGVmaW5lIFRJTUVSMF9NQVhfU0laRSAzMg0KKyNkZWZpbmUgVElNRVIxX01BWF9TSVpFIDMyDQorI2RlZmluZSBUSU1FUjJfTUFYX1NJWkUgMzINCisjZGVmaW5lIFRJTUVSM19NQVhfU0laRSAzMg0KKyNkZWZpbmUgVElNRVI0X01BWF9TSVpFIDMyDQorDQorI2RlZmluZSBUSU1FUjBfQ0NfTlVNIDQNCisjZGVmaW5lIFRJTUVSMV9DQ19OVU0gNA0KKyNkZWZpbmUgVElNRVIyX0NDX05VTSA0DQorI2RlZmluZSBUSU1FUjNfQ0NfTlVNIDYNCisjZGVmaW5lIFRJTUVSNF9DQ19OVU0gNg0KKw0KKy8qIFJlYWwgVGltZSBDb3VudGVyICovDQorI2RlZmluZSBSVENfUFJFU0VOVA0KKyNkZWZpbmUgUlRDX0NPVU5UIDMNCisNCisjZGVmaW5lIFJUQzBfQ0NfTlVNIDMNCisjZGVmaW5lIFJUQzFfQ0NfTlVNIDQNCisjZGVmaW5lIFJUQzJfQ0NfTlVNIDQNCisNCisvKiBSTkcgKi8NCisjZGVmaW5lIFJOR19QUkVTRU5UDQorI2RlZmluZSBSTkdfQ09VTlQgMQ0KKw0KKy8qIFdhdGNoZG9nIFRpbWVyICovDQorI2RlZmluZSBXRFRfUFJFU0VOVA0KKyNkZWZpbmUgV0RUX0NPVU5UIDENCisNCisvKiBUZW1wZXJhdHVyZSBTZW5zb3IgKi8NCisjZGVmaW5lIFRFTVBfUFJFU0VOVA0KKyNkZWZpbmUgVEVNUF9DT1VOVCAxDQorDQorLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIE1hc3RlciAqLw0KKyNkZWZpbmUgU1BJX1BSRVNFTlQNCisjZGVmaW5lIFNQSV9DT1VOVCAzDQorDQorLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIE1hc3RlciB3aXRoIERNQSAqLw0KKyNkZWZpbmUgU1BJTV9QUkVTRU5UDQorI2RlZmluZSBTUElNX0NPVU5UIDQNCisNCisjZGVmaW5lIFNQSU0wX01BWF9EQVRBUkFURSAgOA0KKyNkZWZpbmUgU1BJTTFfTUFYX0RBVEFSQVRFICA4DQorI2RlZmluZSBTUElNMl9NQVhfREFUQVJBVEUgIDgNCisjZGVmaW5lIFNQSU0zX01BWF9EQVRBUkFURSAgMzINCisNCisjZGVmaW5lIFNQSU0wX0ZFQVRVUkVfSEFSRFdBUkVfQ1NOX1BSRVNFTlQgIDANCisjZGVmaW5lIFNQSU0xX0ZFQVRVUkVfSEFSRFdBUkVfQ1NOX1BSRVNFTlQgIDANCisjZGVmaW5lIFNQSU0yX0ZFQVRVUkVfSEFSRFdBUkVfQ1NOX1BSRVNFTlQgIDANCisjZGVmaW5lIFNQSU0zX0ZFQVRVUkVfSEFSRFdBUkVfQ1NOX1BSRVNFTlQgIDENCisNCisvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgU2xhdmUgd2l0aCBETUEqLw0KKyNkZWZpbmUgU1BJU19QUkVTRU5UDQorI2RlZmluZSBTUElTX0NPVU5UIDMNCisNCisvKiBUd28gV2lyZSBJbnRlcmZhY2UgTWFzdGVyICovDQorI2RlZmluZSBUV0lfUFJFU0VOVA0KKyNkZWZpbmUgVFdJX0NPVU5UIDINCisNCisvKiBUd28gV2lyZSBJbnRlcmZhY2UgTWFzdGVyIHdpdGggRE1BICovDQorI2RlZmluZSBUV0lNX1BSRVNFTlQNCisjZGVmaW5lIFRXSU1fQ09VTlQgMg0KKw0KKy8qIFR3byBXaXJlIEludGVyZmFjZSBTbGF2ZSB3aXRoIERNQSAqLw0KKyNkZWZpbmUgVFdJU19QUkVTRU5UDQorI2RlZmluZSBUV0lTX0NPVU5UIDINCisNCisvKiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJlY2VpdmVyLVRyYW5zbWl0dGVyICovDQorI2RlZmluZSBVQVJUX1BSRVNFTlQNCisjZGVmaW5lIFVBUlRfQ09VTlQgMQ0KKw0KKy8qIFVuaXZlcnNhbCBBc3luY2hyb25vdXMgUmVjZWl2ZXItVHJhbnNtaXR0ZXIgd2l0aCBETUEgKi8NCisjZGVmaW5lIFVBUlRFX1BSRVNFTlQNCisjZGVmaW5lIFVBUlRFX0NPVU5UIDINCisNCisvKiBRdWFkcmF0dXJlIERlY29kZXIgKi8NCisjZGVmaW5lIFFERUNfUFJFU0VOVA0KKyNkZWZpbmUgUURFQ19DT1VOVCAxDQorDQorLyogU3VjY2Vzc2l2ZSBBcHByb3hpbWF0aW9uIEFuYWxvZyB0byBEaWdpdGFsIENvbnZlcnRlciAqLw0KKyNkZWZpbmUgU0FBRENfUFJFU0VOVA0KKyNkZWZpbmUgU0FBRENfQ09VTlQgMQ0KKw0KKy8qIEdQSU8gVGFza3MgYW5kIEV2ZW50cyAqLw0KKyNkZWZpbmUgR1BJT1RFX1BSRVNFTlQNCisjZGVmaW5lIEdQSU9URV9DT1VOVCAxDQorDQorI2RlZmluZSBHUElPVEVfQ0hfTlVNIDgNCisNCisjZGVmaW5lIEdQSU9URV9GRUFUVVJFX1NFVF9QUkVTRU5UDQorI2RlZmluZSBHUElPVEVfRkVBVFVSRV9DTFJfUFJFU0VOVA0KKw0KKy8qIExvdyBQb3dlciBDb21wYXJhdG9yICovDQorI2RlZmluZSBMUENPTVBfUFJFU0VOVA0KKyNkZWZpbmUgTFBDT01QX0NPVU5UIDENCisNCisjZGVmaW5lIExQQ09NUF9SRUZTRUxfUkVTT0xVVElPTiAxNg0KKw0KKyNkZWZpbmUgTFBDT01QX0ZFQVRVUkVfSFlTVF9QUkVTRU5UDQorDQorLyogQ29tcGFyYXRvciAqLw0KKyNkZWZpbmUgQ09NUF9QUkVTRU5UDQorI2RlZmluZSBDT01QX0NPVU5UIDENCisNCisvKiBQdWxzZSBXaWR0aCBNb2R1bGF0b3IgKi8NCisjZGVmaW5lIFBXTV9QUkVTRU5UDQorI2RlZmluZSBQV01fQ09VTlQgNA0KKw0KKyNkZWZpbmUgUFdNMF9DSF9OVU0gNA0KKyNkZWZpbmUgUFdNMV9DSF9OVU0gNA0KKyNkZWZpbmUgUFdNMl9DSF9OVU0gNA0KKyNkZWZpbmUgUFdNM19DSF9OVU0gNA0KKw0KKy8qIFB1bHNlIERlbnNpdHkgTW9kdWxhdG9yICovDQorI2RlZmluZSBQRE1fUFJFU0VOVA0KKyNkZWZpbmUgUERNX0NPVU5UIDENCisNCisvKiBJbnRlci1JQyBTb3VuZCBJbnRlcmZhY2UgKi8NCisjZGVmaW5lIEkyU19QUkVTRU5UDQorI2RlZmluZSBJMlNfQ09VTlQgMQ0KKw0KKy8qIFVuaXZlcnNhbCBTZXJpYWwgQnVzIERldmljZSAqLw0KKyNkZWZpbmUgVVNCRF9QUkVTRU5UDQorI2RlZmluZSBVU0JEX0NPVU5UIDENCisNCisvKiBBUk0gVHJ1c3Rab25lIENyeXB0b2NlbGwgMzEwICovDQorI2RlZmluZSBDUllQVE9DRUxMX1BSRVNFTlQNCisjZGVmaW5lIENSWVBUT0NFTExfQ09VTlQgMQ0KKw0KKy8qIFF1YWQgU1BJICovDQorI2RlZmluZSBRU1BJX1BSRVNFTlQNCisjZGVmaW5lIFFTUElfQ09VTlQgMQ0KKw0KKyNlbmRpZiAgICAgIC8vIF9OUkY1Mjg0MF9QRVJJUEhFUkFMU19IDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2UvbnJmNTJfdG9fbnJmNTI4NDAuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyX3RvX25yZjUyODQwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlM2M2ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL25yZjUyX3RvX25yZjUyODQwLmgKQEAgLTAsMCArMSw4OCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGNTJfVE9fTlJGNTI4NDBfSA0KKyNkZWZpbmUgTlJGNTJfVE9fTlJGNTI4NDBfSA0KKw0KKy8qbGludCArK2ZsYiAiRW50ZXIgbGlicmFyeSByZWdpb24gKi8NCisNCisvKiBUaGlzIGZpbGUgaXMgZ2l2ZW4gdG8gcHJldmVudCB5b3VyIFNXIGZyb20gbm90IGNvbXBpbGluZyB3aXRoIHRoZSBuYW1lIGNoYW5nZXMgYmV0d2VlbiBuUkY1MSBvciBuUkY1MjgzMiBhbmQgblJGNTI4NDAgZGV2aWNlcy4NCisgKiBJdCByZWRlZmluZXMgdGhlIG9sZCBuUkY1MSBvciBuUkY1MjgzMiBuYW1lcyBpbnRvIHRoZSBuZXcgb25lcyBhcyBsb25nIGFzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIHN0aWxsIHN1cHBvcnRlZC4gSWYgdGhlDQorICogZnVuY3Rpb25hbGl0eSBpcyBnb25lLCB0aGVyZSBvbGQgbmFtZXMgYXJlIG5vdCBkZWZpbmVkLCBzbyBjb21waWxhdGlvbiB3aWxsIGZhaWwuIE5vdGUgdGhhdCBhbHNvIGluY2x1ZGVzIG1hY3Jvcw0KKyAqIGZyb20gdGhlIG5yZjUyX25hbWVjaGFuZ2UuaCBmaWxlLiAqLw0KKw0KKy8qIERpZmZlcmVuY2VzIGJldHdlZW4gbGF0ZXN0IG5SRjUyIGhlYWRlcnMgYW5kIG5SRjUyODQwIGhlYWRlcnMuICovDQorDQorLyogVUFSVCAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTFJUUywgUFNFTFRYRCwgUFNFTENUUywgUFNFTFJYRCB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0LiAqLw0KKyNkZWZpbmUgUFNFTFJUUyAgICAgICBQU0VMLlJUUw0KKyNkZWZpbmUgUFNFTFRYRCAgICAgICBQU0VMLlRYRA0KKyNkZWZpbmUgUFNFTENUUyAgICAgICBQU0VMLkNUUw0KKyNkZWZpbmUgUFNFTFJYRCAgICAgICBQU0VMLlJYRA0KKw0KKy8qIFRXSSAqLw0KKy8qIFRoZSByZWdpc3RlcnMgUFNFTFNDTCwgUFNFTFNEQSB3ZXJlIHJlc3RydWN0dXJlZCBpbnRvIGEgc3RydWN0LiAqLw0KKyNkZWZpbmUgUFNFTFNDTCAgICAgICBQU0VMLlNDTA0KKyNkZWZpbmUgUFNFTFNEQSAgICAgICBQU0VMLlNEQQ0KKw0KKw0KKy8qIEZyb20gbnJmNTJfbmFtZV9jaGFuZ2UuaC4gU2V2ZXJhbCBtYWNyb3MgY2hhbmdlZCBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgblJGNTIgaGVhZGVycy4gQnkgZGVmaW5pbmcgdGhlIGZvbGxvd2luZywgYW55IGNvZGUgd3JpdHRlbiBmb3IgYW55IHZlcnNpb24gb2YgblJGNTIgaGVhZGVycyB3aWxsIHN0aWxsIGNvbXBpbGUuICovDQorDQorLyogSTJTICovDQorLyogU2V2ZXJhbCBlbnVtZXJhdGlvbnMgY2hhbmdlZCBjYXNlLiBBZGRpbmcgb2xkIG1hY3JvcyB0byBrZWVwIGNvbXBpbGF0aW9uIGNvbXBhdGliaWxpdHkuICovDQorI2RlZmluZSBJMlNfRU5BQkxFX0VOQUJMRV9ESVNBQkxFICAgICAgICAgICBJMlNfRU5BQkxFX0VOQUJMRV9EaXNhYmxlZA0KKyNkZWZpbmUgSTJTX0VOQUJMRV9FTkFCTEVfRU5BQkxFICAgICAgICAgICAgSTJTX0VOQUJMRV9FTkFCTEVfRW5hYmxlZA0KKyNkZWZpbmUgSTJTX0NPTkZJR19NT0RFX01PREVfTUFTVEVSICAgICAgICAgSTJTX0NPTkZJR19NT0RFX01PREVfTWFzdGVyDQorI2RlZmluZSBJMlNfQ09ORklHX01PREVfTU9ERV9TTEFWRSAgICAgICAgICBJMlNfQ09ORklHX01PREVfTU9ERV9TbGF2ZQ0KKyNkZWZpbmUgSTJTX0NPTkZJR19SWEVOX1JYRU5fRElTQUJMRSAgICAgICAgSTJTX0NPTkZJR19SWEVOX1JYRU5fRGlzYWJsZWQNCisjZGVmaW5lIEkyU19DT05GSUdfUlhFTl9SWEVOX0VOQUJMRSAgICAgICAgIEkyU19DT05GSUdfUlhFTl9SWEVOX0VuYWJsZWQNCisjZGVmaW5lIEkyU19DT05GSUdfVFhFTl9UWEVOX0RJU0FCTEUgICAgICAgIEkyU19DT05GSUdfVFhFTl9UWEVOX0Rpc2FibGVkDQorI2RlZmluZSBJMlNfQ09ORklHX1RYRU5fVFhFTl9FTkFCTEUgICAgICAgICBJMlNfQ09ORklHX1RYRU5fVFhFTl9FbmFibGVkDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0VOX01DS0VOX0RJU0FCTEUgICAgICBJMlNfQ09ORklHX01DS0VOX01DS0VOX0Rpc2FibGVkDQorI2RlZmluZSBJMlNfQ09ORklHX01DS0VOX01DS0VOX0VOQUJMRSAgICAgICBJMlNfQ09ORklHX01DS0VOX01DS0VOX0VuYWJsZWQNCisjZGVmaW5lIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF84QklUICAgICAgIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF84Qml0DQorI2RlZmluZSBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfMTZCSVQgICAgICBJMlNfQ09ORklHX1NXSURUSF9TV0lEVEhfMTZCaXQNCisjZGVmaW5lIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF8yNEJJVCAgICAgIEkyU19DT05GSUdfU1dJRFRIX1NXSURUSF8yNEJpdA0KKyNkZWZpbmUgSTJTX0NPTkZJR19BTElHTl9BTElHTl9MRUZUICAgICAgICAgSTJTX0NPTkZJR19BTElHTl9BTElHTl9MZWZ0DQorI2RlZmluZSBJMlNfQ09ORklHX0FMSUdOX0FMSUdOX1JJR0hUICAgICAgICBJMlNfQ09ORklHX0FMSUdOX0FMSUdOX1JpZ2h0DQorI2RlZmluZSBJMlNfQ09ORklHX0ZPUk1BVF9GT1JNQVRfQUxJR05FRCAgICBJMlNfQ09ORklHX0ZPUk1BVF9GT1JNQVRfQWxpZ25lZA0KKyNkZWZpbmUgSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19TVEVSRU8gSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19TdGVyZW8NCisjZGVmaW5lIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfTEVGVCAgIEkyU19DT05GSUdfQ0hBTk5FTFNfQ0hBTk5FTFNfTGVmdA0KKyNkZWZpbmUgSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19SSUdIVCAgSTJTX0NPTkZJR19DSEFOTkVMU19DSEFOTkVMU19SaWdodA0KKw0KKy8qIExQQ09NUCAqLw0KKy8qIENvcnJlY3RlZCB0eXBvIGluIFJFU1VMVCByZWdpc3Rlci4gKi8NCisjZGVmaW5lIExQQ09NUF9SRVNVTFRfUkVTVUxUX0JlbGxvdyAgICAgICAgIExQQ09NUF9SRVNVTFRfUkVTVUxUX0JlbG93DQorDQorDQorLypsaW50IC0tZmxiICJMZWF2ZSBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjZW5kaWYgLyogTlJGNTFfVE9fTlJGNTI4NDBfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL3N5c3RlbV9ucmY1Mjg0MC5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4N2NhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZGV2aWNlL3N5c3RlbV9ucmY1Mjg0MC5jCkBAIC0wLDAgKzEsMjQ4IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTIgQVJNIExJTUlURUQNCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8NCisgKiAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMNCisgKiAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAic3lzdGVtX25yZjUyODQwLmgiDQorDQorLypsaW50ICsrZmxiICJFbnRlciBsaWJyYXJ5IHJlZ2lvbiIgKi8NCisNCisjZGVmaW5lIF9fU1lTVEVNX0NMT0NLXzY0TSAgICAgICg2NDAwMDAwMFVMKQ0KKw0KK3N0YXRpYyBib29sIGVycmF0YV8zNih2b2lkKTsNCitzdGF0aWMgYm9vbCBlcnJhdGFfOTgodm9pZCk7DQorc3RhdGljIGJvb2wgZXJyYXRhXzEwMyh2b2lkKTsNCitzdGF0aWMgYm9vbCBlcnJhdGFfMTE1KHZvaWQpOw0KK3N0YXRpYyBib29sIGVycmF0YV8xMjAodm9pZCk7DQorDQorDQorI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApDQordWludDMyX3QgU3lzdGVtQ29yZUNsb2NrIF9fYXR0cmlidXRlX18oKHVzZWQpKSA9IF9fU1lTVEVNX0NMT0NLXzY0TTsNCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApDQorX19yb290IHVpbnQzMl90IFN5c3RlbUNvcmVDbG9jayA9IF9fU1lTVEVNX0NMT0NLXzY0TTsNCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQ0KK3VpbnQzMl90IFN5c3RlbUNvcmVDbG9jayBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkgPSBfX1NZU1RFTV9DTE9DS182NE07DQorI2VuZGlmDQorDQordm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUodm9pZCkNCit7DQorICAgIFN5c3RlbUNvcmVDbG9jayA9IF9fU1lTVEVNX0NMT0NLXzY0TTsNCit9DQorDQordm9pZCBTeXN0ZW1Jbml0KHZvaWQpDQorew0KKyAgICAvKiBXb3JrYXJvdW5kIGZvciBFcnJhdGEgMzYgIkNMT0NLOiBTb21lIHJlZ2lzdGVycyBhcmUgbm90IHJlc2V0IHdoZW4gZXhwZWN0ZWQiIGZvdW5kIGF0IHRoZSBFcnJhdGEgZG9jdW1lbnQNCisgICAgICAgZm9yIHlvdXIgZGV2aWNlIGxvY2F0ZWQgYXQgaHR0cHM6Ly9pbmZvY2VudGVyLm5vcmRpY3NlbWkuY29tLyAgKi8NCisgICAgaWYgKGVycmF0YV8zNigpKQ0KKyAgICB7DQorICAgICAgICBOUkZfQ0xPQ0stPkVWRU5UU19ET05FID0gMDsNCisgICAgICAgIE5SRl9DTE9DSy0+RVZFTlRTX0NUVE8gPSAwOw0KKyAgICAgICAgTlJGX0NMT0NLLT5DVElWID0gMDsNCisgICAgfQ0KKw0KKyAgICAvKiBXb3JrYXJvdW5kIGZvciBFcnJhdGEgOTggIk5GQ1Q6IE5vdCBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHBlZXIiIGZvdW5kIGF0IHRoZSBFcnJhdGEgZG9jdW1lbnQNCisgICAgICAgZm9yIHlvdXIgZGV2aWNlIGxvY2F0ZWQgYXQgaHR0cHM6Ly9pbmZvY2VudGVyLm5vcmRpY3NlbWkuY29tLyAgKi8NCisgICAgaWYgKGVycmF0YV85OCgpKQ0KKyAgICB7DQorICAgICAgICAqKHZvbGF0aWxlIHVpbnQzMl90ICopMHg0MDAwNTY4Q3VsID0gMHgwMDAzODE0OHVsOw0KKyAgICB9DQorDQorICAgIC8qIFdvcmthcm91bmQgZm9yIEVycmF0YSAxMDMgIkNDTTogV3JvbmcgcmVzZXQgdmFsdWUgb2YgQ0NNIE1BWFBBQ0tFVFNJWkUiIGZvdW5kIGF0IHRoZSBFcnJhdGEgZG9jdW1lbnQNCisgICAgICAgZm9yIHlvdXIgZGV2aWNlIGxvY2F0ZWQgYXQgaHR0cHM6Ly9pbmZvY2VudGVyLm5vcmRpY3NlbWkuY29tLyAgKi8NCisgICAgaWYgKGVycmF0YV8xMDMoKSkNCisgICAgew0KKyAgICAgICAgTlJGX0NDTS0+TUFYUEFDS0VUU0laRSA9IDB4RkJ1bDsNCisgICAgfQ0KKw0KKyAgICAvKiBXb3JrYXJvdW5kIGZvciBFcnJhdGEgMTE1ICJSQU06IFJBTSBjb250ZW50IGNhbm5vdCBiZSB0cnVzdGVkIHVwb24gd2FraW5nIHVwIGZyb20gU3lzdGVtIE9OIElkbGUgb3IgU3lzdGVtIE9GRiBtb2RlIiBmb3VuZCBhdCB0aGUgRXJyYXRhIGRvY3VtZW50DQorICAgICAgIGZvciB5b3VyIGRldmljZSBsb2NhdGVkIGF0IGh0dHBzOi8vaW5mb2NlbnRlci5ub3JkaWNzZW1pLmNvbS8gICovDQorICAgIGlmIChlcnJhdGFfMTE1KCkpDQorICAgIHsNCisgICAgICAgICoodm9sYXRpbGUgdWludDMyX3QgKikweDQwMDAwRUU0ID0gKCoodm9sYXRpbGUgdWludDMyX3QgKikweDQwMDAwRUU0ICYgMHhGRkZGRkZGMCkgfCAoKg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKikweDEwMDAwMjU4ICYgMHgwMDAwMDAwRik7DQorICAgIH0NCisNCisgICAgLyogV29ya2Fyb3VuZCBmb3IgRXJyYXRhIDEyMCAiUVNQSTogRGF0YSByZWFkIG9yIHdyaXR0ZW4gaXMgY29ycnVwdGVkIiBmb3VuZCBhdCB0aGUgRXJyYXRhIGRvY3VtZW50DQorICAgICAgIGZvciB5b3VyIGRldmljZSBsb2NhdGVkIGF0IGh0dHBzOi8vaW5mb2NlbnRlci5ub3JkaWNzZW1pLmNvbS8gICovDQorICAgIGlmIChlcnJhdGFfMTIwKCkpDQorICAgIHsNCisgICAgICAgICoodm9sYXRpbGUgdWludDMyX3QgKikweDQwMDI5NjQwdWwgPSAweDIwMHVsOw0KKyAgICB9DQorDQorICAgIC8qIEVuYWJsZSB0aGUgRlBVIGlmIHRoZSBjb21waWxlciB1c2VkIGZsb2F0aW5nIHBvaW50IHVuaXQgaW5zdHJ1Y3Rpb25zLiBfX0ZQVV9VU0VEIGlzIGEgTUFDUk8gZGVmaW5lZCBieSB0aGUNCisgICAgICogY29tcGlsZXIuIFNpbmNlIHRoZSBGUFUgY29uc3VtZXMgZW5lcmd5LCByZW1lbWJlciB0byBkaXNhYmxlIEZQVSB1c2UgaW4gdGhlIGNvbXBpbGVyIGlmIGZsb2F0aW5nIHBvaW50IHVuaXQNCisgICAgICogb3BlcmF0aW9ucyBhcmUgbm90IHVzZWQgaW4geW91ciBjb2RlLiAqLw0KKyNpZiAoX19GUFVfVVNFRCA9PSAxKQ0KKyAgICBTQ0ItPkNQQUNSIHw9ICgzVUwgPDwgMjApIHwgKDNVTCA8PCAyMik7DQorICAgIF9fRFNCKCk7DQorICAgIF9fSVNCKCk7DQorI2VuZGlmDQorDQorICAgIC8qIENvbmZpZ3VyZSBORkNUIHBpbnMgYXMgR1BJT3MgaWYgTkZDVCBpcyBub3QgdG8gYmUgdXNlZCBpbiB5b3VyIGNvZGUuIElmIENPTkZJR19ORkNUX1BJTlNfQVNfR1BJT1MgaXMgbm90IGRlZmluZWQsDQorICAgICAgIHR3byBHUElPcyAoc2VlIFByb2R1Y3QgU3BlY2lmaWNhdGlvbiB0byBzZWUgd2hpY2ggb25lcykgd2lsbCBiZSByZXNlcnZlZCBmb3IgTkZDIGFuZCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXMNCisgICAgICAgbm9ybWFsIEdQSU9zLiAqLw0KKyNpZiBkZWZpbmVkIChDT05GSUdfTkZDVF9QSU5TX0FTX0dQSU9TKQ0KKw0KKyAgICBpZiAoKE5SRl9VSUNSLT5ORkNQSU5TICYgVUlDUl9ORkNQSU5TX1BST1RFQ1RfTXNrKSA9PSAoVUlDUl9ORkNQSU5TX1BST1RFQ1RfTkZDIDw8IFVJQ1JfTkZDUElOU19QUk9URUNUX1BvcykpDQorICAgIHsNCisgICAgICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fV2VuIDw8IE5WTUNfQ09ORklHX1dFTl9Qb3M7DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkge30NCisNCisgICAgICAgIE5SRl9VSUNSLT5ORkNQSU5TICY9IH5VSUNSX05GQ1BJTlNfUFJPVEVDVF9Nc2s7DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkge30NCisNCisgICAgICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fUmVuIDw8IE5WTUNfQ09ORklHX1dFTl9Qb3M7DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkge30NCisNCisgICAgICAgIE5WSUNfU3lzdGVtUmVzZXQoKTsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKw0KKyAgICAvKiBDb25maWd1cmUgR1BJTyBwYWRzIGFzIHBQaW4gUmVzZXQgcGluIGlmIFBpbiBSZXNldCBjYXBhYmlsaXRpZXMgZGVzaXJlZC4gSWYgQ09ORklHX0dQSU9fQVNfUElOUkVTRVQgaXMgbm90DQorICAgICAgZGVmaW5lZCwgcGluIHJlc2V0IHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gT25lIEdQSU8gKHNlZSBQcm9kdWN0IFNwZWNpZmljYXRpb24gdG8gc2VlIHdoaWNoIG9uZSkgd2lsbCB0aGVuIGJlDQorICAgICAgcmVzZXJ2ZWQgZm9yIFBpblJlc2V0IGFuZCBub3QgYXZhaWxhYmxlIGFzIG5vcm1hbCBHUElPLiAqLw0KKyNpZiBkZWZpbmVkIChDT05GSUdfR1BJT19BU19QSU5SRVNFVCkNCisNCisgICAgaWYgKCgoTlJGX1VJQ1ItPlBTRUxSRVNFVFswXSAmIFVJQ1JfUFNFTFJFU0VUX0NPTk5FQ1RfTXNrKSAhPSAoVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Db25uZWN0ZWQgPDwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Qb3MpKSB8fA0KKyAgICAgICAgKChOUkZfVUlDUi0+UFNFTFJFU0VUWzFdICYgVUlDUl9QU0VMUkVTRVRfQ09OTkVDVF9Nc2spICE9IChVSUNSX1BTRUxSRVNFVF9DT05ORUNUX0Nvbm5lY3RlZCA8PA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSUNSX1BTRUxSRVNFVF9DT05ORUNUX1BvcykpKQ0KKyAgICB7DQorICAgICAgICBOUkZfTlZNQy0+Q09ORklHID0gTlZNQ19DT05GSUdfV0VOX1dlbiA8PCBOVk1DX0NPTkZJR19XRU5fUG9zOw0KKw0KKyAgICAgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpIHt9DQorDQorICAgICAgICBOUkZfVUlDUi0+UFNFTFJFU0VUWzBdID0gMTg7DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkge30NCisNCisgICAgICAgIE5SRl9VSUNSLT5QU0VMUkVTRVRbMV0gPSAxODsNCisNCisgICAgICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KSB7fQ0KKw0KKyAgICAgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9SZW4gPDwgTlZNQ19DT05GSUdfV0VOX1BvczsNCisNCisgICAgICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KSB7fQ0KKw0KKyAgICAgICAgTlZJQ19TeXN0ZW1SZXNldCgpOw0KKyAgICB9DQorDQorI2VuZGlmDQorDQorICAgIC8qIEVuYWJsZSBTV08gdHJhY2UgZnVuY3Rpb25hbGl0eS4gSWYgRU5BQkxFX1NXTyBpcyBub3QgZGVmaW5lZCwgU1dPIHBpbiB3aWxsIGJlIHVzZWQgYXMgR1BJTyAoc2VlIFByb2R1Y3QNCisgICAgICAgU3BlY2lmaWNhdGlvbiB0byBzZWUgd2hpY2ggb25lKS4gKi8NCisjaWYgZGVmaW5lZCAoRU5BQkxFX1NXTykNCisgICAgQ29yZURlYnVnLT5ERU1DUiB8PSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX01zazsNCisgICAgTlJGX0NMT0NLLT5UUkFDRUNPTkZJRyB8PSBDTE9DS19UUkFDRUNPTkZJR19UUkFDRU1VWF9TZXJpYWwgPDwgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfUG9zOw0KKyAgICBOUkZfUDEtPlBJTl9DTkZbMF0gPSAoR1BJT19QSU5fQ05GX0RSSVZFX0gwSDEgPDwgR1BJT19QSU5fQ05GX0RSSVZFX1BvcykgfCAoR1BJT19QSU5fQ05GX0lOUFVUX0Nvbm5lY3QgPDwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpIHwgKEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IDw8IEdQSU9fUElOX0NORl9ESVJfUG9zKTsNCisjZW5kaWYNCisNCisgICAgLyogRW5hYmxlIFRyYWNlIGZ1bmN0aW9uYWxpdHkuIElmIEVOQUJMRV9UUkFDRSBpcyBub3QgZGVmaW5lZCwgVFJBQ0UgcGlucyB3aWxsIGJlIHVzZWQgYXMgR1BJT3MgKHNlZSBQcm9kdWN0DQorICAgICAgIFNwZWNpZmljYXRpb24gdG8gc2VlIHdoaWNoIG9uZXMpLiAqLw0KKyNpZiBkZWZpbmVkIChFTkFCTEVfVFJBQ0UpDQorICAgIENvcmVEZWJ1Zy0+REVNQ1IgfD0gQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2s7DQorICAgIE5SRl9DTE9DSy0+VFJBQ0VDT05GSUcgfD0gQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfUGFyYWxsZWwgPDwgQ0xPQ0tfVFJBQ0VDT05GSUdfVFJBQ0VNVVhfUG9zOw0KKyAgICBOUkZfUDAtPlBJTl9DTkZbN10gID0gKEdQSU9fUElOX0NORl9EUklWRV9IMEgxIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QSU5fQ05GX0lOUFVUX1BvcykgfCAoR1BJT19QSU5fQ05GX0RJUl9PdXRwdXQgPDwgR1BJT19QSU5fQ05GX0RJUl9Qb3MpOw0KKyAgICBOUkZfUDEtPlBJTl9DTkZbMF0gID0gKEdQSU9fUElOX0NORl9EUklWRV9IMEgxIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QSU5fQ05GX0lOUFVUX1BvcykgfCAoR1BJT19QSU5fQ05GX0RJUl9PdXRwdXQgPDwgR1BJT19QSU5fQ05GX0RJUl9Qb3MpOw0KKyAgICBOUkZfUDAtPlBJTl9DTkZbMTJdID0gKEdQSU9fUElOX0NORl9EUklWRV9IMEgxIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QSU5fQ05GX0lOUFVUX1BvcykgfCAoR1BJT19QSU5fQ05GX0RJUl9PdXRwdXQgPDwgR1BJT19QSU5fQ05GX0RJUl9Qb3MpOw0KKyAgICBOUkZfUDAtPlBJTl9DTkZbMTFdID0gKEdQSU9fUElOX0NORl9EUklWRV9IMEgxIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QSU5fQ05GX0lOUFVUX1BvcykgfCAoR1BJT19QSU5fQ05GX0RJUl9PdXRwdXQgPDwgR1BJT19QSU5fQ05GX0RJUl9Qb3MpOw0KKyAgICBOUkZfUDEtPlBJTl9DTkZbOV0gID0gKEdQSU9fUElOX0NORl9EUklWRV9IMEgxIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpIHwgKEdQSU9fUElOX0NORl9JTlBVVF9Db25uZWN0IDw8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19QSU5fQ05GX0lOUFVUX1BvcykgfCAoR1BJT19QSU5fQ05GX0RJUl9PdXRwdXQgPDwgR1BJT19QSU5fQ05GX0RJUl9Qb3MpOw0KKyNlbmRpZg0KKw0KKyAgICBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKTsNCit9DQorDQorDQorc3RhdGljIGJvb2wgZXJyYXRhXzM2KHZvaWQpDQorew0KKyAgICBpZiAoKCoodWludDMyX3QgKikweDEwMDAwMTMwdWwgPT0gMHg4dWwpICYmICgqKHVpbnQzMl90ICopMHgxMDAwMDEzNHVsID09IDB4MHVsKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisNCitzdGF0aWMgYm9vbCBlcnJhdGFfOTgodm9pZCkNCit7DQorICAgIGlmICgoKih1aW50MzJfdCAqKTB4MTAwMDAxMzB1bCA9PSAweDh1bCkgJiYgKCoodWludDMyX3QgKikweDEwMDAwMTM0dWwgPT0gMHgwdWwpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKw0KK3N0YXRpYyBib29sIGVycmF0YV8xMDModm9pZCkNCit7DQorICAgIGlmICgoKih1aW50MzJfdCAqKTB4MTAwMDAxMzB1bCA9PSAweDh1bCkgJiYgKCoodWludDMyX3QgKikweDEwMDAwMTM0dWwgPT0gMHgwdWwpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKw0KK3N0YXRpYyBib29sIGVycmF0YV8xMTUodm9pZCkNCit7DQorICAgIGlmICgoKih1aW50MzJfdCAqKTB4MTAwMDAxMzB1bCA9PSAweDh1bCkgJiYgKCoodWludDMyX3QgKikweDEwMDAwMTM0dWwgPT0gMHgwdWwpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKw0KK3N0YXRpYyBib29sIGVycmF0YV8xMjAodm9pZCkNCit7DQorICAgIGlmICgoKih1aW50MzJfdCAqKTB4MTAwMDAxMzB1bCA9PSAweDh1bCkgJiYgKCoodWludDMyX3QgKikweDEwMDAwMTM0dWwgPT0gMHgwdWwpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qbGludCAtLWZsYiAiTGVhdmUgbGlicmFyeSByZWdpb24iICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RldmljZS9zeXN0ZW1fbnJmNTI4NDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ2YzE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kZXZpY2Uvc3lzdGVtX25yZjUyODQwLmgKQEAgLTAsMCArMSw2OSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyIEFSTSBMSU1JVEVEDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvDQorICogICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljDQorICogICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIFNZU1RFTV9OUkY1Mjg0MF9IDQorI2RlZmluZSBTWVNURU1fTlJGNTI4NDBfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisNCisNCitleHRlcm4gdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrOyAgICAvKiE8IFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgKENvcmUgQ2xvY2spICAqLw0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgdGhlIHN5c3RlbQ0KKyAqDQorICogQHBhcmFtICBub25lDQorICogQHJldHVybiBub25lDQorICoNCisgKiBAYnJpZWYgIFNldHVwIHRoZSBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtLg0KKyAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgU3lzdGVtIGFuZCB1cGRhdGUgdGhlIFN5c3RlbUNvcmVDbG9jayB2YXJpYWJsZS4NCisgKi8NCitleHRlcm4gdm9pZCBTeXN0ZW1Jbml0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUNCisgKg0KKyAqIEBwYXJhbSAgbm9uZQ0KKyAqIEByZXR1cm4gbm9uZQ0KKyAqDQorICogQGJyaWVmICBVcGRhdGVzIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgd2l0aCBjdXJyZW50IGNvcmUgQ2xvY2sNCisgKiAgICAgICAgIHJldHJpZXZlZCBmcm9tIGNwdSByZWdpc3RlcnMuDQorICovDQorZXh0ZXJuIHZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogU1lTVEVNX05SRjUyODQwX0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvY2xvY2svbnJmX2Rydl9jbG9jay5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk0NjljCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2Nsb2NrL25yZl9kcnZfY2xvY2suYwpAQCAtMCwwICsxLDE2NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2luY2x1ZGUgIm5yZl9kcnZfY2xvY2suaCINCisNCisjZGVmaW5lIE5SRl9FUlJPUl9NT0RVTEVfQUxSRUFEWV9JTklUSUFMSVpFRCAweDgwODUNCisNCisvKmxpbnQgLXNhdmUgLWU2NTIgKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRkNMS19SQyAgICBDTE9DS19MRkNMS1NSQ19TUkNfUkMNCisjZGVmaW5lIE5SRl9DTE9DS19MRkNMS19YdGFsICBDTE9DS19MRkNMS1NSQ19TUkNfWHRhbA0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGQ0xLX1N5bnRoIENMT0NLX0xGQ0xLU1JDX1NSQ19TeW50aA0KKy8qbGludCAtcmVzdG9yZSAqLw0KKw0KK3ZvbGF0aWxlIHVpbnQzMl90IG1faGZjbGtfcmVxdWVzdHM7ICAvKjwgSGlnaCBmcmVxdWVuY3kgY2xvY2sgcmVxdWVzdHMuICovDQordm9sYXRpbGUgdWludDMyX3QgbV9sZmNsa19yZXF1ZXN0czsgIC8qPCBMb3cgZnJlcXVlbmN5IGNsb2NrIHJlcXVlc3RzLiAqLw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3Igc3RhcnRpbmcgTEZDTEsuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciBzdGFydC4NCisgKi8NCitzdGF0aWMgdm9pZCBsZmNsa19zdGFydCh2b2lkKQ0KK3sNCisgICAgbnJmX2Nsb2NrX2V2ZW50X2NsZWFyKE5SRl9DTE9DS19FVkVOVF9MRkNMS1NUQVJURUQpOw0KKyAgICBucmZfY2xvY2tfdGFza190cmlnZ2VyKE5SRl9DTE9DS19UQVNLX0xGQ0xLU1RBUlQpOw0KK30NCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIHN0b3BwaW5nIExGQ0xLIGFuZCBjYWxpYnJhdGlvbiAoaWYgaXQgd2FzIHNldCB1cCkuDQorICovDQorc3RhdGljIHZvaWQgbGZjbGtfc3RvcCh2b2lkKQ0KK3sNCisgICAgbnJmX2Nsb2NrX3Rhc2tfdHJpZ2dlcihOUkZfQ0xPQ0tfVEFTS19MRkNMS1NUT1ApOw0KKw0KKyAgICB3aGlsZSAobnJmX2Nsb2NrX2xmX2lzX3J1bm5pbmcoKSkge30NCit9DQorDQorc3RhdGljIHZvaWQgaGZjbGtfc3RhcnQodm9pZCkNCit7DQorICAgIG5yZl9jbG9ja19ldmVudF9jbGVhcihOUkZfQ0xPQ0tfRVZFTlRfSEZDTEtTVEFSVEVEKTsNCisgICAgbnJmX2Nsb2NrX3Rhc2tfdHJpZ2dlcihOUkZfQ0xPQ0tfVEFTS19IRkNMS1NUQVJUKTsNCit9DQorDQorc3RhdGljIHZvaWQgaGZjbGtfc3RvcCh2b2lkKQ0KK3sNCisgICAgbnJmX2Nsb2NrX3Rhc2tfdHJpZ2dlcihOUkZfQ0xPQ0tfVEFTS19IRkNMS1NUT1ApOw0KKw0KKyAgICB3aGlsZSAobnJmX2Nsb2NrX2hmX2lzX3J1bm5pbmcoTlJGX0NMT0NLX0hGQ0xLX0hJR0hfQUNDVVJBQ1kpKSB7fQ0KK30NCisNCit1aW50MzJfdCBucmZfZHJ2X2Nsb2NrX2luaXQodm9pZCkNCit7DQorICAgIG5yZl9jbG9ja19sZl9zcmNfc2V0KE5SRl9DTE9DS19MRkNMS19YdGFsKTsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbnJmX2Rydl9jbG9ja191bmluaXQodm9pZCkNCit7DQorICAgIGxmY2xrX3N0b3AoKTsNCisgICAgaGZjbGtfc3RvcCgpOw0KK30NCisNCit2b2lkIG5yZl9kcnZfY2xvY2tfbGZjbGtfcmVxdWVzdChucmZfZHJ2X2Nsb2NrX2hhbmRsZXJfaXRlbV90ICpwX2hhbmRsZXJfaXRlbSkNCit7DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGxmY2xrX3JlcXVlc3RzOw0KKyAgICAodm9pZCkgcF9oYW5kbGVyX2l0ZW07DQorDQorICAgIGRvDQorICAgIHsNCisNCisgICAgICAgIGxmY2xrX3JlcXVlc3RzID0gX19MRFJFWFcoJm1fbGZjbGtfcmVxdWVzdHMpOw0KKyAgICAgICAgbGZjbGtfcmVxdWVzdHMgKz0gMTsNCisgICAgfQ0KKyAgICB3aGlsZSAoX19TVFJFWFcobGZjbGtfcmVxdWVzdHMsICZtX2xmY2xrX3JlcXVlc3RzKSk7DQorDQorICAgIGlmICghbnJmX2Nsb2NrX2xmX2lzX3J1bm5pbmcoKSkNCisgICAgew0KKyAgICAgICAgbGZjbGtfc3RhcnQoKTsNCisgICAgfQ0KK30NCisNCit2b2lkIG5yZl9kcnZfY2xvY2tfbGZjbGtfcmVsZWFzZSh2b2lkKQ0KK3sNCisgICAgdm9sYXRpbGUgdWludDMyX3QgbGZjbGtfcmVxdWVzdHM7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIGxmY2xrX3JlcXVlc3RzID0gX19MRFJFWFcoJm1fbGZjbGtfcmVxdWVzdHMpOw0KKyAgICAgICAgbGZjbGtfcmVxdWVzdHMgLT0gMTsNCisgICAgfQ0KKyAgICB3aGlsZSAoX19TVFJFWFcobGZjbGtfcmVxdWVzdHMsICZtX2xmY2xrX3JlcXVlc3RzKSk7DQorDQorICAgIGlmIChucmZfY2xvY2tfbGZfaXNfcnVubmluZygpICYmIG1fbGZjbGtfcmVxdWVzdHMgPT0gMCkNCisgICAgew0KKyAgICAgICAgbGZjbGtfc3RvcCgpOw0KKyAgICB9DQorfQ0KKw0KK2Jvb2wgbnJmX2Rydl9jbG9ja19sZmNsa19pc19ydW5uaW5nKHZvaWQpDQorew0KKyAgICByZXR1cm4gbnJmX2Nsb2NrX2xmX2lzX3J1bm5pbmcoKTsNCit9DQorDQordm9pZCBucmZfZHJ2X2Nsb2NrX2hmY2xrX3JlcXVlc3QobnJmX2Rydl9jbG9ja19oYW5kbGVyX2l0ZW1fdCAqcF9oYW5kbGVyX2l0ZW0pDQorew0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBoZmNsa19yZXF1ZXN0czsNCisgICAgKHZvaWQpIHBfaGFuZGxlcl9pdGVtOw0KKw0KKyAgICBkbw0KKyAgICB7DQorDQorICAgICAgICBoZmNsa19yZXF1ZXN0cyA9IF9fTERSRVhXKCZtX2hmY2xrX3JlcXVlc3RzKTsNCisgICAgICAgIGhmY2xrX3JlcXVlc3RzICs9IDE7DQorICAgIH0NCisgICAgd2hpbGUgKF9fU1RSRVhXKGhmY2xrX3JlcXVlc3RzLCAmbV9oZmNsa19yZXF1ZXN0cykpOw0KKw0KKyAgICBpZiAoIW5yZl9jbG9ja19oZl9pc19ydW5uaW5nKE5SRl9DTE9DS19IRkNMS19ISUdIX0FDQ1VSQUNZKSkNCisgICAgew0KKyAgICAgICAgaGZjbGtfc3RhcnQoKTsNCisgICAgfQ0KK30NCisNCit2b2lkIG5yZl9kcnZfY2xvY2tfaGZjbGtfcmVsZWFzZSh2b2lkKQ0KK3sNCisgICAgdm9sYXRpbGUgdWludDMyX3QgaGZjbGtfcmVxdWVzdHM7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIGhmY2xrX3JlcXVlc3RzID0gX19MRFJFWFcoJm1faGZjbGtfcmVxdWVzdHMpOw0KKyAgICAgICAgaGZjbGtfcmVxdWVzdHMgLT0gMTsNCisgICAgfQ0KKyAgICB3aGlsZSAoX19TVFJFWFcoaGZjbGtfcmVxdWVzdHMsICZtX2hmY2xrX3JlcXVlc3RzKSk7DQorDQorICAgIGlmIChucmZfY2xvY2tfaGZfaXNfcnVubmluZyhOUkZfQ0xPQ0tfSEZDTEtfSElHSF9BQ0NVUkFDWSkgJiYgbV9oZmNsa19yZXF1ZXN0cyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBoZmNsa19zdG9wKCk7DQorICAgIH0NCit9DQorDQorYm9vbCBucmZfZHJ2X2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcodm9pZCkNCit7DQorICAgIHJldHVybiBucmZfY2xvY2tfaGZfaXNfcnVubmluZyhOUkZfQ0xPQ0tfSEZDTEtfSElHSF9BQ0NVUkFDWSk7DQorfQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9jbG9jay9ucmZfZHJ2X2Nsb2NrLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvY2xvY2svbnJmX2Rydl9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjI3YzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvY2xvY2svbnJmX2Rydl9jbG9jay5oCkBAIC0wLDAgKzEsMTQzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIE5SRl9EUlZfQ0xPQ0tfSF9fDQorI2RlZmluZSBOUkZfRFJWX0NMT0NLX0hfXw0KKw0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxucmZfY2xvY2suaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBAYnJpZWYgU2ltcGxpZnkgdmVyc2lvbiB0byBrZWVwIEFQSSBvZiBTREsuDQorICovDQordHlwZWRlZiB2b2lkIG5yZl9kcnZfY2xvY2tfaGFuZGxlcl9pdGVtX3Q7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIG5yZl9kcnZfY2xvY2sgbW9kdWxlLg0KKyAqDQorICogQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIHRoZSBtb2R1bGUgaXMgaW4gcG93ZXIgb2ZmIHN0YXRlIChjbG9ja3MgYXJlIG5vdCByZXF1ZXN0ZWQpLg0KKyAqDQorICogQHJldHZhbCAgICAgTlJGX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgcHJvY2VkdXJlIHdhcyBzdWNjZXNzZnVsLg0KKyAqIEByZXR2YWwgICAgIE5SRl9FUlJPUl9NT0RVTEVfQUxSRUFEWV9JTklUSUFMSVpFRCAgSWYgdGhlIGRyaXZlciB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4NCisgKi8NCit1aW50MzJfdCBucmZfZHJ2X2Nsb2NrX2luaXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciB1bmluaXRpYWxpemluZyB0aGUgY2xvY2sgbW9kdWxlLg0KKyAqDQorICovDQordm9pZCBucmZfZHJ2X2Nsb2NrX3VuaW5pdCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlcXVlc3RpbmcgdGhlIExGQ0xLLg0KKyAqDQorICogVGhlIGxvdy1mcmVxdWVuY3kgY2xvY2sgY2FuIGJlIHJlcXVlc3RlZCBieSBkaWZmZXJlbnQgbW9kdWxlcw0KKyAqIG9yIGNvbnRleHRzLiBUaGUgZHJpdmVyIGVuc3VyZXMgdGhhdCB0aGUgY2xvY2sgd2lsbCBiZSBzdGFydGVkIG9ubHkgd2hlbiBpdCBpcyByZXF1ZXN0ZWQNCisgKiB0aGUgZmlyc3QgdGltZS4gSWYgdGhlIGNsb2NrIGlzIG5vdCByZWFkeSBidXQgaXQgd2FzIGFscmVhZHkgc3RhcnRlZCwgdGhlIGhhbmRsZXIgaXRlbSB0aGF0IGlzDQorICogcHJvdmlkZWQgYXMgYW4gaW5wdXQgcGFyYW1ldGVyIGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGhhbmRsZXJzIHRoYXQgd2lsbCBiZSBub3RpZmllZA0KKyAqIHdoZW4gdGhlIGNsb2NrIGlzIHN0YXJ0ZWQuIElmIHRoZSBjbG9jayBpcyBhbHJlYWR5IGVuYWJsZWQsIHVzZXIgY2FsbGJhY2sgaXMgY2FsbGVkIGZyb20gdGhlDQorICogY3VycmVudCBjb250ZXh0Lg0KKyAqDQorICogVGhlIGZpcnN0IHJlcXVlc3Qgd2lsbCBzdGFydCB0aGUgc2VsZWN0ZWQgTEZDTEsgc291cmNlLiBJZiBhbiBldmVudCBoYW5kbGVyIGlzDQorICogcHJvdmlkZWQsIGl0IHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlIExGQ0xLIGlzIHN0YXJ0ZWQuIElmIHRoZSBMRkNMSyB3YXMgYWxyZWFkeSBzdGFydGVkIGF0IHRoaXMNCisgKiB0aW1lLCB0aGUgZXZlbnQgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEFkZGl0aW9uYWxseSwNCisgKiB0aGUgQHJlZiBucmZfZHJ2X2Nsb2NrX2xmY2xrX2lzX3J1bm5pbmcgZnVuY3Rpb24gY2FuIGJlIHBvbGxlZCB0byBjaGVjayBpZiB0aGUgY2xvY2sgaGFzIHN0YXJ0ZWQuDQorICoNCisgKiBAbm90ZSBXaGVuIGEgU29mdERldmljZSBpcyBlbmFibGVkLCB0aGUgTEZDTEsgaXMgYWx3YXlzIHJ1bm5pbmcgYW5kIHRoZSBkcml2ZXIgY2Fubm90IGNvbnRyb2wgaXQuDQorICoNCisgKiBAbm90ZSBUaGUgaGFuZGxlciBpdGVtIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGNhbm5vdCBiZSBhbiBhdXRvbWF0aWMgdmFyaWFibGUuDQorICoNCisgKiBAcGFyYW1baW5dIHBfaGFuZGxlcl9pdGVtIEEgcG9pbnRlciB0byB0aGUgZXZlbnQgaGFuZGxlciBzdHJ1Y3R1cmUuDQorICovDQordm9pZCBucmZfZHJ2X2Nsb2NrX2xmY2xrX3JlcXVlc3QobnJmX2Rydl9jbG9ja19oYW5kbGVyX2l0ZW1fdCAqcF9oYW5kbGVyX2l0ZW0pOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVsZWFzaW5nIHRoZSBMRkNMSy4NCisgKg0KKyAqIElmIHRoZXJlIGFyZSBubyBtb3JlIHJlcXVlc3RzLCB0aGUgTEZDTEsgc291cmNlIHdpbGwgYmUgc3RvcHBlZC4NCisgKg0KKyAqIEBub3RlIFdoZW4gYSBTb2Z0RGV2aWNlIGlzIGVuYWJsZWQsIHRoZSBMRkNMSyBpcyBhbHdheXMgcnVubmluZy4NCisgKi8NCit2b2lkIG5yZl9kcnZfY2xvY2tfbGZjbGtfcmVsZWFzZSh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNoZWNraW5nIHRoZSBMRkNMSyBzdGF0ZS4NCisgKg0KKyAqIEByZXR2YWwgdHJ1ZSBJZiB0aGUgTEZDTEsgaXMgcnVubmluZy4NCisgKiBAcmV0dmFsIGZhbHNlIElmIHRoZSBMRkNMSyBpcyBub3QgcnVubmluZy4NCisgKi8NCitib29sIG5yZl9kcnZfY2xvY2tfbGZjbGtfaXNfcnVubmluZyh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlcXVlc3RpbmcgdGhlIGhpZ2gtYWNjdXJhY3kgc291cmNlIEhGQ0xLLg0KKyAqDQorICogVGhlIGhpZ2gtYWNjdXJhY3kgc291cmNlDQorICogY2FuIGJlIHJlcXVlc3RlZCBieSBkaWZmZXJlbnQgbW9kdWxlcyBvciBjb250ZXh0cy4gVGhlIGRyaXZlciBlbnN1cmVzIHRoYXQgdGhlIGhpZ2gtYWNjdXJhY3kNCisgKiBjbG9jayB3aWxsIGJlIHN0YXJ0ZWQgb25seSB3aGVuIGl0IGlzIHJlcXVlc3RlZCB0aGUgZmlyc3QgdGltZS4gSWYgdGhlIGNsb2NrIGlzIG5vdCByZWFkeQ0KKyAqIGJ1dCBpdCB3YXMgYWxyZWFkeSBzdGFydGVkLCB0aGUgaGFuZGxlciBpdGVtIHRoYXQgaXMgcHJvdmlkZWQgYXMgYW4gaW5wdXQgcGFyYW1ldGVyIGlzIGFkZGVkDQorICogdG8gdGhlIGxpc3Qgb2YgaGFuZGxlcnMgdGhhdCB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGNsb2NrIGlzIHN0YXJ0ZWQuDQorICoNCisgKiBJZiBhbiBldmVudCBoYW5kbGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBjbG9jayBpcyBzdGFydGVkLiBJZiB0aGUgY2xvY2sgd2FzIGFscmVhZHkNCisgKiBzdGFydGVkIGF0IHRoaXMgdGltZSwgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBBZGRpdGlvbmFsbHksDQorICogdGhlIEByZWYgbnJmX2Rydl9jbG9ja19oZmNsa19pc19ydW5uaW5nIGZ1bmN0aW9uIGNhbiBiZSBwb2xsZWQgdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGhhcyBzdGFydGVkLg0KKyAqDQorICogQG5vdGUgSWYgYSBTb2Z0RGV2aWNlIGlzIHJ1bm5pbmcsIHRoZSBjbG9jayBpcyBtYW5hZ2VkIGJ5IHRoZSBTb2Z0RGV2aWNlIGFuZCBhbGwgcmVxdWVzdHMgYXJlIGhhbmRsZWQgYnkNCisgKiAgICAgICB0aGUgU29mdERldmljZS4gVGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYWxsIGludGVycnVwdCBwcmlvcml0eSBsZXZlbHMgaW4gdGhhdCBjYXNlLg0KKyAqIEBub3RlIFRoZSBoYW5kbGVyIGl0ZW0gcHJvdmlkZWQgYnkgdGhlIHVzZXIgY2Fubm90IGJlIGFuIGF1dG9tYXRpYyB2YXJpYWJsZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9oYW5kbGVyX2l0ZW0gQSBwb2ludGVyIHRvIHRoZSBldmVudCBoYW5kbGVyIHN0cnVjdHVyZS4NCisgKi8NCit2b2lkIG5yZl9kcnZfY2xvY2tfaGZjbGtfcmVxdWVzdChucmZfZHJ2X2Nsb2NrX2hhbmRsZXJfaXRlbV90ICpwX2hhbmRsZXJfaXRlbSk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWxlYXNpbmcgdGhlIGhpZ2gtYWNjdXJhY3kgc291cmNlIEhGQ0xLLg0KKyAqDQorICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgcmVxdWVzdHMsIHRoZSBoaWdoLWFjY3VyYWN5IHNvdXJjZSB3aWxsIGJlIHJlbGVhc2VkLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9jbG9ja19oZmNsa19yZWxlYXNlKHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgdGhlIEhGQ0xLIHN0YXRlLg0KKyAqDQorICogQHJldHZhbCB0cnVlIElmIHRoZSBIRkNMSyBpcyBydW5uaW5nIChmb3IgXG5SRlhYIFhUQUwgc291cmNlKS4NCisgKiBAcmV0dmFsIGZhbHNlIElmIHRoZSBIRkNMSyBpcyBub3QgcnVubmluZy4NCisgKi8NCitib29sIG5yZl9kcnZfY2xvY2tfaGZjbGtfaXNfcnVubmluZyh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vIE5SRl9DTE9DS19IX18NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3JhZGlvX2ZzbS51bWwgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3JhZGlvX2ZzbS51bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyMjZkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvcmFkaW9fZnNtLnVtbApAQCAtMCwwICsxLDc2IEBACitAc3RhcnR1bWwNCisNCitza2lucGFyYW0gc3RhdGUgew0KKyAgICBCYWNrZ3JvdW5kQ29sb3I8PCBsb2NrZWQgPj4gcmVkDQorICAgIEJhY2tncm91bmRDb2xvcjw8IHVubG9ja2VkID4+IGdyZWVuDQorfQ0KKw0KKw0KK1sqXSAgICAgICAgIC0tPiBTbGVlcCA8PCB1bmxvY2tlZCA+Pg0KKw0KK1NsZWVwICAgICAgIC1kb3duLT4gUmVjZWl2ZSAgIDogQVBJOiBSZWNlaXZlKCkNCitSZWNlaXZlICAgICAtdXAtPiBTbGVlcCAgICAgOiBBUEk6IFNsZWVwKCkgLyBNVVRFWDogTG9jazsgVEFTSzogU1RPUDsgVEFTSzogRElTQUJMRVxuRVY6IERJU0FCTEVEIC8gTVVURVg6IFVubG9jaw0KKw0KK3N0YXRlIFJlY2VpdmUgew0KKyAgICBzdGF0ZSBXYWl0aW5nUnhGcmFtZSA8PCB1bmxvY2tlZCA+Pg0KKyAgICANCisgICAgc3RhdGUgUnhIZWFkZXIgPDwgbG9ja2VkID4+DQorICAgIHN0YXRlIFJ4RnJhbWUgIDw8IGxvY2tlZCA+Pg0KKyAgICBzdGF0ZSBUeEFjayAgICA8PCBsb2NrZWQgPj4NCisgICAgc3RhdGUgU2hvcnRBY2tUeCA8PCBsb2NrZWQgPj4NCisgICAgDQorICAgIEVudGVyICAgICAgICAgICAtZG93bi0+IFdhaXRpbmdSeEZyYW1lICA6IEVWOiBESVNBQkxFRCAvIFRBU0s6IFJYRU47IE1VVEVYOiBVbmxvY2sNCisgICAgV2FpdGluZ1J4RnJhbWUgICAgICAtLT4gV2FpdGluZ1J4RnJhbWUgIDogRVY6IFJFQURZIC8gQXV0b0FDSzogZW5hYmxlOyBUQVNLOiBTVEFSVA0KKyAgICANCisgICAgV2FpdGluZ1J4RnJhbWUgIC1kb3duLT4gUnhIZWFkZXIgICAgICAgIDogRVY6IEZSQU1FU1RBUlQgLyBNVVRFWDogTG9jaw0KKyAgICANCisgICAgUnhIZWFkZXIgICAgICAgIC1kb3duLT4gUnhGcmFtZSAgICAgICAgIDogRVY6IEJDTUFUQ0gsIEZyYW1lIHR5cGUgYW5kIGFkZHJlc3Mgb2sNCisgICAgUnhIZWFkZXIgICAgICAgICAgLXVwLT4gRW50ZXIgICAgICAgICAgIDogRVY6IEJDTUFUQ0gsIEZyYW1lIHR5cGUgaW52YWxpZCBvciBkc3QgYWRkcmVzcyBtaXNtYXRjaA0KKyAgICANCisgICAgUnhGcmFtZSAgICAgICAgIC1kb3duLT4gVHhBY2sgICAgICAgICAgIDogRVY6IEVORCwgQ1JDOiBPSywgQUNLOiByZXF1ZXN0ZWQNCisgICAgUnhGcmFtZSAgICAgICAgICAgLXVwLT4gRW50ZXIgICAgICAgICA6IEVWOiBFTkQsIENSQzogaW52YWxpZCAvIFRBU0s6IERJU0FCTEUNCisgICAgUnhGcmFtZSAgICAgICAgICAgLXVwLT4gRW50ZXIgICAgICAgICA6IEVWOiBFTkQsIENSQzogT0ssIEFDSzogbm90IHJlcXVlc3RlZCAvIFRBU0s6IERJU0FCTEU7IHJlY2VpdmVkKCkNCisgICAgIA0KKyAgICBUeEFjayAgICAgICAgICAgICAtdXAtPiBFbnRlciAgICAgICAgIDogRVY6IEVORCAvIEF1dG9BQ0s6IGRpc2FibGU7IFRBU0s6IERJU0FCTEU7IHJlY2VpdmVkKCkNCisgICAgDQorICAgIFJ4RnJhbWUgICAgICAgICAtbGVmdC0+IFNob3J0QWNrVHggICAgICAgOiBFVjogRU5EOyBBdXRvQUNLOiBlbmFibGVkIC8gU0hPUlQ6IERJU0FCTEUNCisgICAgU2hvcnRBY2tUeCAgICAgIC1sZWZ0LT4gU2hvcnRBY2tUeCAgICAgICA6IEVWOiBESVNBQkxFRDsgQXV0b0FDSzogZW5hYmxlZCAvIFNIT1JUOiBUWEVODQorICAgIFNob3J0QWNrVHggICAgICAtcmlnaHQtPiBTaG9ydEFja1R4ICAgICAgIDogRVY6IFJFQURZOyBBdXRvQUNLOmVuYWJsZWQgLyBBdXRvQUNLOiBkaXNhYmxlOyBTSE9SVDogU1RBUlQNCit9DQorDQorc3RhdGUgVHJhbnNtaXQgPDwgbG9ja2VkID4+ew0KKyAgICBbKl0gICAgICAgICAtLT4gQ0NBICAgICAgICAgICAgIDogRVY6IERJU0FCTEVEIC8gVEFTSzogUlhFTg0KKyAgICBDQ0EgICAgICAgICAtLT4gQ0NBICAgICAgICAgICAgIDogRVY6IFJFQURZIC8gVEFTSzogQ0NBX1NUQVJUDQorICAgIENDQSAgICAgICAtdXAtPiBSZWNlaXZlICAgICAgICAgOiBFVjogQ0NBQlVTWSAvIFRyYW5zbWl0RmFpbHVyZSgpOyBUQVNLOiBESVNBQkxFDQorICAgIENDQSAgICAgICAgIC0tPiBUeEZyYW1lICAgICAgICAgOiBFVjogQ0NBSURMRSAvIFNIT1JUOiBUWEVODQorICAgIFR4RnJhbWUgICAgIC0tPiBUeEZyYW1lICAgICAgICAgOiBFVjogUkVBRFkgLyBTSE9SVDogU1RBUlQNCisNCisgICAgc3RhdGUgUnhBY2sgew0KKyAgICAgICAgWypdICAgICAgICAgICAgIC0tPiBFbmFibGluZ0Fja1J4ICAgOiBUQVNLOiBSWEVODQorICAgICAgICBFbmFibGluZ0Fja1J4ICAgLS0+IFJlY2VpdmluZ0FjayAgICA6IEVWOiBSRUFEWSAvIFRBU0s6IFNUQVJUDQorICAgICAgICANCisgICAgICAgIFJlY2VpdmluZ0FjayAgICAtLT4gUmVjZWl2aW5nQWNrICAgIDogRVY6IEVORCAoQ1JDRVJSKSAvIFRBU0s6IFNUQVJUDQorICAgICAgICBSZWNlaXZpbmdBY2sgICAgLS0+IFJlY2VpdmluZ0FjayAgICA6IEVWOiBFTkQgKENSQ09LLCBOb3QgdmFsaWQgQUNLKSAvIFRBU0s6IFNUQVJUDQorICAgICAgICBSZWNlaXZpbmdBY2sgICAgLS0+IFdhaXRpbmdSeEZyYW1lICA6IEVWOiBFTkQgKENSQ09LLCBWYWxpZCBBQ0spIC8gTVVURVg6IFVubG9jazsgVEFTSzogU1RBUlQ7IHRyYW5zbWl0dGVkKCkNCisgICAgfQ0KKw0KKyAgICBUeEZyYW1lICAgICAgICAgLS0+IFJ4QWNrICAgICAgIDogRVY6IEVORCAoQUNLKQ0KKyAgICBUeEZyYW1lICAgICAgIC11cC0+IFJlY2VpdmUgICAgIDogRVY6IEVORCAoTk9BQ0spIC8gdHJhbnNtaXR0ZWQoT0spOyBTSE9SVDogRElTQUJMRQ0KK30NCisNCitzdGF0ZSBTaG9ydEFja1R4IHsNCit9DQorDQorc3RhdGUgRW5lcmd5RGV0ZWN0aW9uIDw8IGxvY2tlZCA+PiB7DQorICAgIFsqXSAgICAgIC0tPiBFRCAgICAgIDogRVY6IERJU0FCTEVEIC8gVEFTSzogUlhFTg0KKyAgICBFRCAgICAgICAtLT4gRUQgICAgICA6IEVWOiBSRUFEWSAvIFRBU0s6IEVEU1RBUlQNCisgICAgRUQgIC1yaWdodC0+IFJlY2VpdmUgOiBFVjogRURFTkQgLyBlbmVyZ3lfZGV0ZWN0ZWQoKTsgVEFTSzogRElTQUJMRQ0KK30NCisNCisNCitSZWNlaXZlICAgLWRvd24tPiBUcmFuc21pdCAgICAgICAgOiBBUEk6IFRyYW5zbWl0KCkgLyBNVVRFWDpMb2NrOyBBdXRvQUNLOiBkaXNhYmxlOyBUQVNLOiBESVNBQkxFDQorVHJhbnNtaXQgICAgLXVwLT4gUmVjZWl2ZSAgICAgICAgIDogQVBJOiBSZWNlaXZlKCkgLyBUQVNLOiBDQ0FTVE9QOyBUQVNLOiBTVE9QOyBUQVNLOiBESVNBQkxFDQorUmVjZWl2ZSAgICAgICAtLT4gUmVjZWl2ZSAgICAgICAgIDogQVBJOiBSZWNlaXZlKCkNCitSZWNlaXZlICAgLWxlZnQtPiBFbmVyZ3lEZXRlY3Rpb24gOiBBUEk6IEVuZXJneURldGVjdGlvbigpIC8gTVVURVg6IExvY2s7IEF1dG9BQ0s6IGRpc2FibGU7IFRBU0s6IERJU0FCTEUNCisNCitAZW5kdW1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF8wbGVuZ3RoX2ZyYW1lLnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfMGxlbmd0aF9mcmFtZS51bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjMDQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfMGxlbmd0aF9mcmFtZS51bWwKQEAgLTAsMCArMSwyMyBAQAorQHN0YXJ0dW1sDQorDQorcGFydGljaXBhbnQgUkFESU8NCitwYXJ0aWNpcGFudCBEcml2ZXINCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCithY3RpdmF0ZSBSQURJTw0KK1JBRElPICAtPiBEcml2ZXI6IEVWOiBFTkQNCitkZWFjdGl2YXRlIFJBRElPDQorRHJpdmVyIC0+IE11dGV4OiBsb2NrDQorYWN0aXZhdGUgTXV0ZXgNCisNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soV2FpdGluZ1J4RnJhbWUpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorICAgICANCisNCitAZW5kdW1sDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF9hY2sudW1sIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF9hY2sudW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDg0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X2Fjay51bWwKQEAgLTAsMCArMSwyNyBAQAorQHN0YXJ0dW1sDQorDQorcGFydGljaXBhbnQgUkFESU8NCitwYXJ0aWNpcGFudCBEcml2ZXINCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCitSQURJTyAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorRHJpdmVyIC0+IE11dGV4OiBsb2NrDQorYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgLT4gU3RhdGU6IFJ4SGVhZGVyDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBCQ01BVENIDQorRHJpdmVyIC0tPj4gUkFESU86IGdldF9iY2MoKQ0KK1JBRElPICAtLT4gRHJpdmVyOiBCQ0NfSU5JVA0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBmcmFtZSB0eXBlOiBBQ0sNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soV2FpdGluZ1J4RnJhbWUpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorICAgICANCisNCitAZW5kdW1sDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF9icm9hZGNhc3QudW1sIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF9icm9hZGNhc3QudW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODNhZjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X2Jyb2FkY2FzdC51bWwKQEAgLTAsMCArMSw0NSBAQAorQHN0YXJ0dW1sDQorDQorcGFydGljaXBhbnQgUkFESU8NCitwYXJ0aWNpcGFudCBEcml2ZXINCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCitSQURJTyAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorRHJpdmVyIC0+IE11dGV4OiBsb2NrDQorYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgLT4gU3RhdGU6IFJ4SGVhZGVyDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBCQ01BVENIDQorRHJpdmVyIC0tPj4gUkFESU86IGdldF9iY2MoKQ0KK1JBRElPICAtLT4gRHJpdmVyOiBCQ0NfSU5JVA0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBmcmFtZSB0eXBlOiBEYXRhDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIGRlc3QgYWRkcmVzczogc2hvcnQNCitEcml2ZXIgIC0+IFJBRElPOiAgc2V0X2JjYyhCQ0NfU0hPUlRfQUREUikNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEJDTUFUQ0gNCitEcml2ZXIgLS0+PiBSQURJTzogZ2V0X2JjYygpDQorUkFESU8gIC0tPiBEcml2ZXI6IEJDQ19TSE9SVF9BRERSDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIGRlc3QgYWRkcjogQnJvYWRjYXN0DQorRHJpdmVyICAtPiBGbGFnczogIFJlY2VpdmluZ0Jyb2FkY2FzdEZyYW1lID0gdHJ1ZQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBSeEZyYW1lDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBFTkQNCitkZWFjdGl2YXRlIFJBRElPDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIENSQzogT0sNCitEcml2ZXIgIC0+IERyaXZlcjogUHJlcGFyZSBBQ0sNCitEcml2ZXIgLS0+PiBGbGFnczogcmVjZWl2aWdCcm9hZGNhc3RGcmFtZT8NCitGbGFncyAgLS0+IERyaXZlcjogdHJ1ZQ0KKw0KK0RyaXZlciAgLT4gRHJpdmVyOiBzdG9wU2VuZGluZ0FjayhXYWl0aW5nUnhGcmFtZSkNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IERJU0FCTEVEDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFJYRU4NCitEcml2ZXIgIC0+IE11dGV4OiAgdW5sb2NrDQorZGVhY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChESVNBQkxFRCkNCisgICAgIA0KK0RyaXZlciAgLT4gSGlnaGVyX0xheWVyOiByZWNlaXZlZCgpDQorDQorQGVuZHVtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfdG9vX3Nob3J0X2ZyYW1lLnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfdG9vX3Nob3J0X2ZyYW1lLnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWQxMjBlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF90b29fc2hvcnRfZnJhbWUudW1sCkBAIC0wLDAgKzEsMjQgQEAKK0BzdGFydHVtbA0KKw0KK3BhcnRpY2lwYW50IFJBRElPDQorcGFydGljaXBhbnQgRHJpdmVyDQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorUkFESU8gIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyIC0+IFN0YXRlOiBSeEhlYWRlcg0KK0RyaXZlciAtPiBEcml2ZXI6ICBDaGVjayBmcmFtZSBsZW5ndGg6IDwgQUNLX0xFTkdUSA0KKw0KK0RyaXZlciAgLT4gRHJpdmVyOiBzdG9wU2VuZGluZ0FjayhXYWl0aW5nUnhGcmFtZSkNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IERJU0FCTEVEDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFJYRU4NCitEcml2ZXIgIC0+IE11dGV4OiAgdW5sb2NrDQorZGVhY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChESVNBQkxFRCkNCisgICAgIA0KKw0KK0BlbmR1bWwNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X3VuaWNhc3QudW1sIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF91bmljYXN0LnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE5NmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS9yeF91bmljYXN0LnVtbApAQCAtMCwwICsxLDgwIEBACitAc3RhcnR1bWwNCisNCitwYXJ0aWNpcGFudCBSQURJTw0KK3BhcnRpY2lwYW50IERyaXZlcg0KKw0KKyAgICAgIC0+IFN0YXRlOiBXYWl0aW5nUnhGcmFtZQ0KKyAgICAgIA0KK1JBRElPICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorYWN0aXZhdGUgRHJpdmVyDQorYWN0aXZhdGUgUkFESU8NCitEcml2ZXIgLT4gTXV0ZXg6IGxvY2sNCithY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAtPiBTdGF0ZTogUnhIZWFkZXINCitkZWFjdGl2YXRlIERyaXZlcg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogQkNNQVRDSA0KK2FjdGl2YXRlIERyaXZlcg0KK0RyaXZlciAtLT4+IFJBRElPOiBnZXRfYmNjKCkNCitSQURJTyAgLS0+IERyaXZlcjogQkNDX0lOSVQNCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZnJhbWUgdHlwZTogRGF0YQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBkZXN0IGFkZHJlc3M6IHNob3J0DQorRHJpdmVyICAtPiBSQURJTzogIHNldF9iY2MoQkNDX1NIT1JUX0FERFIpDQorZGVhY3RpdmF0ZSBEcml2ZXINCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEJDTUFUQ0gNCithY3RpdmF0ZSBEcml2ZXINCitEcml2ZXIgLS0+PiBSQURJTzogZ2V0X2JjYygpDQorUkFESU8gIC0tPiBEcml2ZXI6IEJDQ19TSE9SVF9BRERSDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIGRlc3QgYWRkcjogTWF0Y2hlZCB1bmljYXN0DQorRHJpdmVyICAtPiBGbGFnczogIFJlY2VpdmluZ0Jyb2FkY2FzdEZyYW1lID0gZmFsc2UNCitEcml2ZXIgIC0+IFN0YXRlOiAgUnhGcmFtZQ0KK2RlYWN0aXZhdGUgRHJpdmVyDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBFTkQgLyBUQVNLOiBESVNBQkxFDQorZGVhY3RpdmF0ZSBSQURJTw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorYWN0aXZhdGUgRHJpdmVyDQorRHJpdmVyICAtPiBEcml2ZXI6IENoZWNrIENSQzogT0sNCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IERJU0FCTEVEIC8gVEFTSzogVFhFTg0KK0RyaXZlciAgLT4gRHJpdmVyOiBQcmVwYXJlIEFDSw0KK0RyaXZlciAtLT4+IEZsYWdzOiByZWNlaXZpZ0Jyb2FkY2FzdEZyYW1lPw0KK0ZsYWdzICAtLT4gRHJpdmVyOiBmYWxzZQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBpZiBBQ0sgcmVxdWVzdGVkOiB0cnVlDQorDQorRHJpdmVyICAtPiBTdGF0ZTogIFR4QWNrDQorRHJpdmVyICAtPiBEcml2ZXI6IHNldCBwZW5kaW5nIGJpdCBpbiBBQ0soKQ0KK2RlYWN0aXZhdGUgRHJpdmVyDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KKw0KK1JBRElPICAgLT4gUkFESU86ICBFVjogUkVBRFkgLyBUQVNLOiBTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBSRUFEWQ0KK2FjdGl2YXRlIERyaXZlcg0KK0RyaXZlciAgLT4gUkFESU86ICBkaXNhYmxlX3RpZnNfc2hvcnRzX2FjaygpDQorZGVhY3RpdmF0ZSBEcml2ZXINCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IEVORCAvIFRBU0s6IERJU0FCTEUNCitkZWFjdGl2YXRlIFJBRElPDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBFTkQNCithY3RpdmF0ZSBEcml2ZXINCitEcml2ZXIgIC0+IFJBRElPOiAgZGlzYWJsZV90aWZzX3Nob3J0c19hbGwoKQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBXYWl0aW5nUnhGcmFtZQ0KK2RlYWN0aXZhdGUgRHJpdmVyDQorDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK2FjdGl2YXRlIERyaXZlcg0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRElTQUJMRUQpDQorZGVhY3RpdmF0ZSBEcml2ZXINCisgICAgIA0KK0RyaXZlciAgLT4gSGlnaGVyX0xheWVyOiByZWNlaXZlZCgpDQorDQorQGVuZHVtbA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvcnhfdW5pY2FzdF9vdGhlcl9kZXN0aW5hdGlvbi51bWwgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X3VuaWNhc3Rfb3RoZXJfZGVzdGluYXRpb24udW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzU0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3J4X3VuaWNhc3Rfb3RoZXJfZGVzdGluYXRpb24udW1sCkBAIC0wLDAgKzEsMzQgQEAKK0BzdGFydHVtbA0KKw0KK3BhcnRpY2lwYW50IFJBRElPDQorcGFydGljaXBhbnQgRHJpdmVyDQorDQorICAgICAgLT4gU3RhdGU6IFdhaXRpbmdSeEZyYW1lDQorICAgICAgDQorUkFESU8gIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCithY3RpdmF0ZSBSQURJTw0KK0RyaXZlciAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyIC0+IFN0YXRlOiBSeEhlYWRlcg0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogQkNNQVRDSA0KK0RyaXZlciAtLT4+IFJBRElPOiBnZXRfYmNjKCkNCitSQURJTyAgLS0+IERyaXZlcjogQkNDX0lOSVQNCitEcml2ZXIgIC0+IERyaXZlcjogQ2hlY2sgZnJhbWUgdHlwZTogRGF0YQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBkZXN0IGFkZHJlc3M6IHNob3J0DQorRHJpdmVyICAtPiBSQURJTzogIHNldF9iY2MoQkNDX1NIT1JUX0FERFIpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBCQ01BVENIDQorRHJpdmVyIC0tPj4gUkFESU86IGdldF9iY2MoKQ0KK1JBRElPICAtLT4gRHJpdmVyOiBCQ0NfU0hPUlRfQUREUg0KK0RyaXZlciAgLT4gRHJpdmVyOiBDaGVjayBkZXN0IGFkZHI6IE1pc3NlZCB1bmljYXN0DQorRHJpdmVyICAtPiBEcml2ZXI6IHN0b3BTZW5kaW5nQWNrKFdhaXRpbmdSeEZyYW1lKQ0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRElTQUJMRUQNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogUlhFTg0KK0RyaXZlciAgLT4gTXV0ZXg6ICB1bmxvY2sNCitkZWFjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KERJU0FCTEVEKQ0KKyAgICAgDQorDQorQGVuZHVtbA0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvdHhfYnJvYWRjYXN0LnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvdHhfYnJvYWRjYXN0LnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjU2Njc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS90eF9icm9hZGNhc3QudW1sCkBAIC0wLDAgKzEsNTEgQEAKK0BzdGFydHVtbA0KKw0KK3BhcnRpY2lwYW50IFJBRElPDQorcGFydGljaXBhbnQgRHJpdmVyDQorcGFydGljaXBhbnQgU3RhdGUNCitwYXJ0aWNpcGFudCBNdXRleA0KKw0KKyAgICAgIC0+IFN0YXRlOiBXYWl0aW5nUnhGcmFtZQ0KKyAgICAgIA0KK0hpZ2hlcl9MYXllciAtPiBEcml2ZXI6IHRyYW5zbWl0KCkNCisNCitEcml2ZXIgIC0+IE11dGV4OiBsb2NrDQorYWN0aXZhdGUgTXV0ZXgNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogU1RPUA0KK0RyaXZlciAgLT4gUkFESU86ICBzZXRfY2hhbm5lbCh0eF9jaGFubmVsKQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBzdG9wU2VuZGluZ0FjayhDY2EpDQorRHJpdmVyICAtPiBSQURJTzogIHNldF90eF9wb3dlcih0eF9wb3dlcikNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoRU5EKQ0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChSRUFEWSkNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IERJU0FCTEVEDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFJYRU4NCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IFJFQURZDQorRHJpdmVyICAtPiBTdGF0ZTogIFR4RnJhbWUNCitEcml2ZXIgIC0+IFJBRElPOiAgZW5hYmxlX3R4ZnJhbWVfc2hvcnRzKCkNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogQ0NBU1RBUlQNCisNCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IENDQUlETEUgLyBUQVNLOiBUWEVODQorUkFESU8gICAtPiBSQURJTzogIEVWOiBSRUFEWSAvIFRBU0s6IFNUQVJUDQorYWN0aXZhdGUgUkFESU8NCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IEZSQU1FU1RBUlQNCisNCitSQURJTyAgIC0+IFJBRElPOiAgRVY6IEVORCAvIFRBU0s6IERJU0FCTEUNCitkZWFjdGl2YXRlIFJBRElPDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBFTkQNCitEcml2ZXIgIC0+IFJBRElPOiAgZGlzYWJsZV90eGZyYW1lX3Nob3J0cygpDQorRHJpdmVyICAtPiBEcml2ZXI6IEFjayByZXF1ZXN0ZWQ/IGZhbHNlDQorRHJpdmVyICAtPiBTdGF0ZTogIFdhaXRpbmdSeEZyYW1lDQorDQorRHJpdmVyICAtPiBIaWdoZXJfTGF5ZXI6IHRyYW5zbWl0dGVkKCkNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IERJU0FCTEVEDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFJYRU4NCitEcml2ZXIgIC0+IE11dGV4OiAgdW5sb2NrDQorZGVhY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChESVNBQkxFRCkNCisgICAgIA0KKw0KK0BlbmR1bWwNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3R4X3VuaWNhc3QudW1sIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS90eF91bmljYXN0LnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM1NjlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9kaWFncmFtcy9zZXF1ZW5jZS90eF91bmljYXN0LnVtbApAQCAtMCwwICsxLDY4IEBACitAc3RhcnR1bWwNCisNCitwYXJ0aWNpcGFudCBSQURJTw0KK3BhcnRpY2lwYW50IERyaXZlcg0KK3BhcnRpY2lwYW50IFN0YXRlDQorcGFydGljaXBhbnQgTXV0ZXgNCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCitIaWdoZXJfTGF5ZXIgLT4gRHJpdmVyOiB0cmFuc21pdCgpDQorDQorRHJpdmVyICAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFNUT1ANCitEcml2ZXIgIC0+IFJBRElPOiAgc2V0X2NoYW5uZWwodHhfY2hhbm5lbCkNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soQ2NhKQ0KK0RyaXZlciAgLT4gUkFESU86ICBzZXRfdHhfcG93ZXIodHhfcG93ZXIpDQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KEVORCkNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoUkVBRFkpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBSRUFEWQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBUeEZyYW1lDQorRHJpdmVyICAtPiBSQURJTzogIGVuYWJsZV90eGZyYW1lX3Nob3J0cygpDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IENDQVNUQVJUDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBDQ0FJRExFIC8gVEFTSzogVFhFTg0KK1JBRElPICAgLT4gUkFESU86ICBFVjogUkVBRFkgLyBUQVNLOiBTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBFTkQgLyBUQVNLOiBESVNBQkxFDQorZGVhY3RpdmF0ZSBSQURJTw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorRHJpdmVyICAtPiBSQURJTzogIGRpc2FibGVfdHhmcmFtZV9zaG9ydHMoKQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBBY2sgcmVxdWVzdGVkPyB0cnVlDQorRHJpdmVyICAtPiBTdGF0ZTogIFJ4QWNrDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBSRUFEWQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBTVEFSVA0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBFTkQNCitkZWFjdGl2YXRlIFJBRElPDQorRHJpdmVyICAtPiBEcml2ZXI6IEFDSyBtYXRjaGVkPyBmYWxzZQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBTVEFSVA0KKw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRlJBTUVTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBFTkQNCitkZWFjdGl2YXRlIFJBRElPDQorRHJpdmVyICAtPiBEcml2ZXI6IEFDSyBtYXRjaGVkPyB0cnVlDQorRHJpdmVyICAtPiBTdGF0ZTogIFdhaW5pbmdSeEZyYW1lDQorRHJpdmVyICAtPiBSQURJTzogIGVuYWJsZV90aWZzX3Nob3J0cygpDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFNUQVJUDQorRHJpdmVyICAtPiBNdXRleDogIHVubG9jaw0KK2RlYWN0aXZhdGUgTXV0ZXgNCisNCitEcml2ZXIgIC0+IEhpZ2hlcl9MYXllcjogdHJhbnNtaXR0ZWQoKQ0KKw0KK0BlbmR1bWwNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3R4X3VuaWNhc3Rfbm9fYWNrLnVtbCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9kb2MvZGlhZ3JhbXMvc2VxdWVuY2UvdHhfdW5pY2FzdF9ub19hY2sudW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjc0NmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2RpYWdyYW1zL3NlcXVlbmNlL3R4X3VuaWNhc3Rfbm9fYWNrLnVtbApAQCAtMCwwICsxLDYyIEBACitAc3RhcnR1bWwNCisNCitwYXJ0aWNpcGFudCBSQURJTw0KK3BhcnRpY2lwYW50IERyaXZlcg0KK3BhcnRpY2lwYW50IFN0YXRlDQorcGFydGljaXBhbnQgTXV0ZXgNCisNCisgICAgICAtPiBTdGF0ZTogV2FpdGluZ1J4RnJhbWUNCisgICAgICANCitIaWdoZXJfTGF5ZXIgLT4gRHJpdmVyOiB0cmFuc21pdCgpDQorDQorRHJpdmVyICAtPiBNdXRleDogbG9jaw0KK2FjdGl2YXRlIE11dGV4DQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFNUT1ANCitEcml2ZXIgIC0+IFJBRElPOiAgc2V0X2NoYW5uZWwodHhfY2hhbm5lbCkNCitEcml2ZXIgIC0+IERyaXZlcjogc3RvcFNlbmRpbmdBY2soQ2NhKQ0KK0RyaXZlciAgLT4gUkFESU86ICBzZXRfdHhfcG93ZXIodHhfcG93ZXIpDQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KEVORCkNCitEcml2ZXIgIC0+IFJBRElPOiAgY2xlYXJfZXZlbnQoUkVBRFkpDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBSRUFEWQ0KK0RyaXZlciAgLT4gU3RhdGU6ICBUeEZyYW1lDQorRHJpdmVyICAtPiBSQURJTzogIGVuYWJsZV90eGZyYW1lX3Nob3J0cygpDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IENDQVNUQVJUDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBDQ0FJRExFIC8gVEFTSzogVFhFTg0KK1JBRElPICAgLT4gUkFESU86ICBFVjogUkVBRFkgLyBUQVNLOiBTVEFSVA0KK2FjdGl2YXRlIFJBRElPDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBGUkFNRVNUQVJUDQorDQorUkFESU8gICAtPiBSQURJTzogIEVWOiBFTkQgLyBUQVNLOiBESVNBQkxFDQorZGVhY3RpdmF0ZSBSQURJTw0KK1JBRElPICAgLT4gRHJpdmVyOiBFVjogRU5EDQorRHJpdmVyICAtPiBSQURJTzogIGRpc2FibGVfdHhmcmFtZV9zaG9ydHMoKQ0KK0RyaXZlciAgLT4gRHJpdmVyOiBBY2sgcmVxdWVzdGVkPyB0cnVlDQorRHJpdmVyICAtPiBTdGF0ZTogIFJ4QWNrDQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBESVNBQkxFRA0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBSWEVODQorDQorUkFESU8gICAtPiBEcml2ZXI6IEVWOiBSRUFEWQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBTVEFSVA0KKw0KKz09IFRpbWVvdXQgPT0NCisNCitIaWdoZXJfTGF5ZXIgLT4gRHJpdmVyOiByZWNlaXZlKCkNCitEcml2ZXIgIC0+IFJBRElPOiAgVEFTSzogU1RPUA0KK0RyaXZlciAgLT4gU3RhdGU6ICBXYWl0aW5nUnhGcmFtZQ0KK0RyaXZlciAgLT4gUkFESU86ICBUQVNLOiBESVNBQkxFDQorRHJpdmVyICAtPiBSQURJTzogIGNsZWFyX2V2ZW50KEVORCkNCisNCitSQURJTyAgIC0+IERyaXZlcjogRVY6IERJU0FCTEVEDQorRHJpdmVyICAtPiBSQURJTzogIFRBU0s6IFJYRU4NCitEcml2ZXIgIC0+IE11dGV4OiAgdW5sb2NrDQorZGVhY3RpdmF0ZSBNdXRleA0KK0RyaXZlciAgLT4gUkFESU86ICBjbGVhcl9ldmVudChESVNBQkxFRCkNCisNCitAZW5kdW1sDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9mc21fZGVzY3JpcHRpb24ucGRmIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL2RvYy9mc21fZGVzY3JpcHRpb24ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2FhNGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvZG9jL2ZzbV9kZXNjcmlwdGlvbi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkNDk1MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9SRUFETUUubWQKQEAgLTAsMCArMSwxMjggQEAKKyMgblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4NCisNCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIG9ubHkgX19ub24tYmVhY29uIG1vZGVfXyBvZiBvcGVyYXRpb24uDQorSXQgc3VwcG9ydHMgZm9sbG93aW5nIF9fZmVhdHVyZXNfXzoNCisgKiByZWNlcHRpb24gb2YgdW5pY2FzdCBhbmQgYnJvYWRjYXN0IGZyYW1lcyAod2l0aCBmaWx0ZXJpbmcpLA0KKyAqIGF1dG9tYXRpYyBzZW5kaW5nIEFDSyBmcmFtZXMsDQorICogc2V0dGluZyBwZW5kaW5nIGJpdCBpbiBBQ0sgZnJhbWUgYWNjb3JkaW5nIHRvIHBlbmRpbmcgZGF0YSBmb3IgZ2l2ZW4gDQorICAgZGVzdGluYXRpb24sDQorICogdHJhbnNtaXNzaW9uIG9mIHVuaWNhc3QgYW5kIGJyb2FkY2FzdCBmcmFtZXMsDQorICogYXV0b21hdGljIENDQSBwcm9jZWR1cmUgYmVmb3JlIHRyYW5zbWlzc2lvbiwNCisgKiBhdXRvbWF0aWMgcmVjZWl2aW5nIEFDSyBmcmFtZXMsDQorICogbG93IHBvd2VyIG1vZGUgKHNsZWVwKSwNCisgKiBlbmVyZ3kgZGV0ZWN0aW9uLA0KKyAqIHByb21pc2N1b3VzIG1vZGUuDQorDQorIyMgSW1wbGVtZW50YXRpb24gZGV0YWlscw0KKw0KK1RoZSBkcml2ZXIgaXMgYSBGU00uIEZyb20gQVBJIHBlcnNwZWN0aXZlIGl0IGhhcyA0IHN0YXRlcy4gTW9zdCBvZiB0aG9zZSBzdGF0ZXMNCitjb250YWlucyBzdWItc3RhdGVzIGluIGltcGxlbWVudGF0aW9uLg0KKw0KKyMjIyBGU00gZGVzY3JpcHRpb24NCisNCitgYGANCisgICAgICAgICAgcmVjZWl2ZSgpICAgICAgIHRyYW5zbWl0KCkNCisgICAgICAgICAgLS0tLS0tLS0+ICAgICAgIC0tLS0tLS0tPg0KKyAgICAgU2xlZXAgICAgICAgICBSZWNlaXZlICAgICAgICAgVHJhbnNtaXQNCisgICAgICAgICAgPC0tLS0tLS0tIHwgIC98XDwtLS0tLS0tLQ0KKyAgICAgICAgICAgc2xlZXAoKSAgfCAgIHwgICByZWNlaXZlKCkgLyB0cmFuc21pdHRlZCgpIC8gYnVzeV9jaGFubmVsKCkNCisgICAgICAgICAgICAgICAgICAgIHwgICB8DQorIGVuZXJneV9kZXRlY3Rpb24oKSB8ICAgfCBlbmVyZ3lfZGV0ZWN0ZWQoKQ0KKyAgICAgICAgICAgICAgICAgICBcfC8gIHwNCisgICAgICAgICAgICAgICBFbmVyZ3kgZGV0ZWN0aW9uDQorYGBgDQorDQorIyMjIyBUcmFuc2l0aW9ucw0KKw0KK1RoZSBkcml2ZXIgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIFNsZWVwIHN0YXRlLiBUaGUgaGlnaGVyIGxheWVyIHNob3VsZCBjYWxsIA0KK3RoZSByZWNlaXZlKCkgZnVuY3Rpb24gdG8gbWFrZSB0aGUgZHJpdmVyIGVudGVyIHRoZSBSZWNlaXZlIHN0YXRlIGFuZCBzdGFydCANCityYWRpbyBvcGVyYXRpb25zLg0KKw0KK0luIGJhc2ljIGFwcGxpY2F0aW9ucyByYWRpbyBzaG91bGQgYmUgbW9zdCB0aW1lIGluIGEgUmVjZWl2ZSBzdGF0ZS4gSW4gdGhpcyANCitzdGF0ZSB0aGUgcmFkaW8gcmVjZWl2ZXMgaW5jb21pbmcgZnJhbWVzLiBDaGFuZ2luZyB0byBhbnkgb3RoZXIgc3RhdGUgc2hvdWxkIGJlDQorcGVyZm9ybWVkIGZyb20gUmVjZWl2ZSBzdGF0ZS4NCisNCitXaGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQgaW4gUmVjZWl2ZSBzdGF0ZSB0aGUgZHJpdmVyIG5vdGlmaWVzIHRoZSBoaWdoZXIgbGF5ZXIgDQorYnkgY2FsbGluZyByZWNlaXZlZCgpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciByZWNlcHRpb24gb2YgYSANCiticm9hZGNhc3QgZnJhbWUgb3IgYWZ0ZXIgc2VuZGluZyBhbiBBQ0sgdG8gYSB1bmljYXN0IGZyYW1lLg0KK0luIHRoZSBwcm9taXNjdW91cyBtb2RlIHRoZSBoaWdoZXIgbGF5ZXIgaXMgbm90aWZpZWQgYWJvdXQgYWxsIG9mIHRoZSByZWNlaXZlZA0KK2ZyYW1lcy4gRXZlbiBpZiB0aGUgZnJhbWUgd2FzIG5vdCBkZXN0aW5lZCB0byB0aGUgcmVjZWl2aW5nIG5vZGUuDQorDQorVG8gdHJhbnNtaXQgYSBmcmFtZSB0aGUgaGlnaGVyIGxheWVyIHNob3VsZCBjYWxsIHRoZSB0cmFuc21pdCgpIGZ1bmN0aW9uLiBJZiANCitjaGFubmVsIGlzIGJ1c3kgdGhlIGRyaXZlciBnb2VzIGJhY2sgdG8gdGhlIFJlY2VpdmUgc3RhdGUgYW5kIG5vdGlmaWVzIHRoZSANCitoaWdoZXIgbGF5ZXIgYnkgY2FsbGluZyB0aGUgYnVzeV9jaGFubmVsKCkgZnVuY3Rpb24uIElmIGEgYnJvYWRjYXN0IGZyYW1lIHdhcyANCit0cmFuc21pdHRlZCB0aGUgZHJpdmVyIGdvZXMgYmFjayB0byB0aGUgUmVjZWl2ZSBzdGF0ZSBhbmQgbm90aWZpZXMgdGhlIGhpZ2hlciANCitsYXllciBieSBjYWxsaW5nIHRoZSB0cmFuc21pdHRlZCgpIGZ1bmN0aW9uLiBJZiBhIHVuaWNhc3QgZnJhbWUgd2FzIHRyYW5zbWl0dGVkIA0KK2FuZCBhbiBBQ0sgd2FzIHJlY2VpdmVkIHRoZSBkcml2ZXIgZ29lcyBiYWNrIHRvIHRoZSBSZWNlaXZlIHN0YXRlIGFuZCBub3RpZmllcyANCit0aGUgaGlnaGVyIGxheWVyIGJ5IGNhbGxpbmcgdGhlIHRyYW5zbWl0dGVkKCkgZnVuY3Rpb24uIElmIGEgdW5pY2FzdCBmcmFtZSB3YXMgDQordHJhbnNtaXR0ZWQgYW5kIHRoZXJlIHdhcyBubyBleHBlY3RlZCBBQ0sgcmVjZWl2ZWQgdGhlIGhpZ2hlciBsYXllciBzaGFsbCBjYWxsIA0KK3RoZSByZWNlaXZlKCkgZnVuY3Rpb24gYWZ0ZXIgdGhlIEFDSyB0aW1lb3V0IHRvIG1ha2UgdGhlIGRyaXZlciBnbyBiYWNrIHRvIHRoZQ0KK1JlY2VpdmUgc3RhdGUuDQorDQorVG8gcGVyZm9ybSBhbiBFbmVyZ3kgRGV0ZWN0aW9uIHByb2NlZHVyZSB0aGUgaGlnaGVyIGxheWVyIHNob3VsZCBjYWxsIHRoZQ0KK2VuZXJneV9kZXRlY3Rpb24oKSBmdW5jdGlvbi4gV2hlbiB0aGUgcHJvY2VkdXJlIGlzIGNvbXBsZXRlZCB0aGUgZHJpdmVyIGdvZXMNCithdXRvbWF0aWNhbGx5IGJhY2sgdG8gdGhlIFJlY2VpdmUgc3RhdGUgYW5kIG5vdGlmaWVzIHRoZSBoaWdoZXIgbGF5ZXIgd2l0aCB0aGUNCitlbmVyZ3lfZGV0ZWN0ZWQoKSBmdW5jdGlvbi4NCisNCisjIyMjIFN0YXRlcw0KKw0KKyMjIyMjIFNsZWVwDQorSW4gdGhpcyBzdGF0ZSB0aGUgcmFkaW8gaXMgaW4gbG93IHBvd2VyIG1vZGUuIEl0IGNhbm5vdCB0cmFuc21pdCBvciByZWNlaXZlIGFueQ0KK2ZyYW1lLg0KKw0KKyMjIyMjIFJlY2VpdmUNCitJbiB0aGlzIHN0YXRlIHRoZSByYWRpbyByZWNlaXZlcyA4MDIuMTUuNCBmcmFtZXMuIEl0IGZpbHRlcnMgb3V0IGZyYW1lcyB3aXRoDQoraW52YWxpZCBDUkMsIGxlbmd0aCwgdHlwZSwgZGVzdGluYXRpb24gYWRkcmVzcy4gDQorSWYgdGhlIGRyaXZlciByZWNlaXZlcyB1bmljYXN0IGZyYW1lIGRlc3RpbmVkIHRvIHRoZSByZWNlaXZpbmcgbm9kZSBpdCANCithdXRvbWF0aWNhbGx5IHRyYW5zbWl0cyBhbiBBQ0sgZnJhbWUuIEFjY29yZGluZyB0byA4MDIuMTUuNCBzdGFuZGFyZCwgYW4gQUNLDQorZnJhbWUgc2hvdWxkIGJlIGRlbGF5ZWQgYVR1cm5hcm91bmRUaW1lICgxOTIgdVMpIGFmdGVyIHJlY2VwdGlvbiBvZiB0aGUgQUNLZWQNCitmcmFtZS4gVG8gcGVyZm9ybSB0aGlzIGRlbGF5IHRoZSBkcml2ZXIgdXNlcyB0aGUgVElGUyB0aW1lciBpbiB0aGUgcmFkaW8NCitwZXJpcGhlcmFsLiBUaGlzIHRpbWVyIHJlcXVpcmVzIDMgc2hvcnRzIHRvIHdvcmsgY29ycmVjdGx5Og0KKzEuIEVORCAtPiBESVNBQkxFDQorMi4gRElTQUJMRSAtPiBUWEVODQorMy4gUkVBRFkgLT4gU1RBUlQNCitUaGUgZHJpdmVyIGhhcyBsaW1pdGVkIHRpbWUgYWZ0ZXIgcmVjZWl2aW5nIG9mIGEgZnJhbWUgdG8gZGVjaWRlIGlmIGFuIEFDSyANCitzaG91bGQgYmUgdHJhbnNtaXR0ZWQuIElmIEFDSyBzaG91bGQgbm90IGJlIHRyYW5zbWl0dGVkIHRoZSBkcml2ZXIgbXVzdCBhYm9ydA0KK3NlbmRpbmcgQUNLIGJ5IGRpc2FibGluZyB0aG9zZSBzaG9ydHMgYW5kIHRyaWdnZXJpbmcgRElTQUJMRSB0YXNrLg0KK1RvIHVzZSB0aGlzIGxpbWl0ZWQgdGltZSBtb3N0IGVmZmVjdGl2ZSB0aGUgZHJpdmVyIHVzZXMgdGhlIEJpdCBDb3VudGVyIGZlYXR1cmUNCitvZiB0aGUgcmFkaW8gcGVyaXBoZXJhbCB0byBnZXQgbm90aWZpY2F0aW9uIHdoZW4gdGhlIEZyYW1lIENvbnRyb2wgZmllbGQgaXMgDQorcmVjZWl2ZWQgYW5kIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcmVjZWl2ZWQuIFRob3NlIGZpZWxkcyBhcmUgdXNlZCB0bw0KK2ZpbHRlciB0aGUgZnJhbWUgYmVmb3JlIHdob2xlIGZyYW1lIGlzIHJlY2VpdmVkLg0KK0lmIGFsbCAzIHNob3J0cyB1c2VkIHRvIHNlbmQgQUNLIGF1dG9tYXRpY2FsbHkgYXJlIGVuYWJsZWQgdGhlIHJhZGlvIHBlcmlwaGVyYWwNCitzZW5kcyBBQ0sgZnJhbWVzIGluIGxvb3AuIFRvIHByZXZlbnQgdGhpcyBkdXJpbmcgZGVidWdnaW5nIHByb2Nlc3MgdGhlcmUgYXJlIA0KK29ubHkgMiBzaG9ydHMgZW5hYmxlZCB3aGVuIHdhaXRpbmcgZm9yIGZyYW1lICgxLiBhbmQgMi4pIGFuZCAyIG90aGVyIHNob3J0cyBhcmUNCitlbmFibGVkIGluIERJU0FCTEVEIGV2ZW50IGhhbmRsZXIgKDEuIGFuZCAzLikuIFRoZSBmaXJzdCBzaG9ydCBpcyBzdGlsbCBlbmFibGVkDQordG8gYXV0b21hdGljYWxseSBkaXNhYmxlIHRyYW5zbWl0dGVyIGFmdGVyIHRyYW5zbWlzc2lvbiBvZiB0aGUgQUNLIGZyYW1lLg0KKw0KKyMjIyMjIFRyYW5zbWl0DQorSW4gdGhpcyBzdGF0ZSB0aGUgcmFkaW8gcGVyZm9ybXMgdGhlIENDQSBwcm9jZWR1cmUuIElmIGNoYW5uZWwgaXMgZnJlZSB0aGUgcmFkaW8gDQordHJhbnNtaXRzIHJlcXVlc3RlZCBmcmFtZS4gSWYgYW4gQUNLIHdhcyByZXF1ZXN0ZWQgaW4gdGhlIHRyYW5zbWl0dGVkIGZyYW1lDQordGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIHRoZSBBQ0sgZnJhbWUgaW4gdGhpcyBzdGF0ZS4NCitUbyBwcmV2ZW50IHRoZSBUWElETEUgcGVyaXBoZXJhbCBzdGF0ZSB0aGUgZHJpdmVyIHVzZXMgMiBzaG9ydHMgaW4gVHJhbnNtaXQNCitzdGF0ZToNCisxLiBSRUFEWSAtPiBTVEFSVA0KKzIuIEVORCAtPiBESVNBQkxFDQorVGhvc2Ugc2hvcnRzIGF1dG9tYXRpY2FsbHkgc3RhcnQgdHJhbnNtaXNzaW9uIG9mIHRoZSBmcmFtZSB3aGVuIHRyYW5zbWl0dGVyIGlzDQorcmVhZHkgYW5kIGRpc2FibGUgdHJhbnNtaXR0ZXIgd2hlbiB0aGUgZnJhbWUgd2FzIHRyYW5zbWl0dGVkLg0KKw0KKyMjIyMjIEVuZXJneSBkZXRlY3Rpb24NCitJbiB0aGlzIHN0YXRlIHRoZSByYWRpbyBwZXJmb3JtcyB0aGUgRW5lcmd5IERldGVjdGlvbiBwcm9jZWR1cmUuIER1cmluZyB0aGlzDQorcHJvY2VkdXJlIHRoZSByYWRpbyBpcyBidXN5IGFuZCBjYW5ub3QgY2hhbmdlIHN0YXRlIHRvIGFueSBvdGhlci4gVGhlIGVuZCBvZg0KK3RoaXMgcHJvY2VkdXJlIGlzIG5vdGlmaWVkIHRvIHRoZSBoaWdoZXIgbGF5ZXIgYnkgYSBmdW5jdGlvbiBjYWxsLg0KKw0KKyMjIyBNdXRleCBhbmQgY3JpdGljYWwgc2VjdGlvbnMuDQorDQorU3RhdGUgdHJhbnNpdGlvbnMgaW4gdGhlIEZTTSBjYW4gYmUgcmVxdWVzdGVkIHNpbXVsdGFuZW91c2x5IGJ5IHRoZSBoaWdoZXIgbGF5ZXINCithbmQgdGhlIElSUSBoYW5kbGVyLiBUbyBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgZHJpdmVyIHRoZXJlIGlzIGEgbXV0ZXguDQorVGhlIG11dGV4IGlzIHVubG9ja2VkIG9ubHkgaW4gdGhlICpSZWNlaXZlKiBzdGF0ZSAoKldhaXRpbmdSeEZyYW1lKiBzdWJzdGF0ZSkuIA0KK0lmIHRoZXJlIGlzIHJlcXVlc3RlZCBzdGF0ZSB0cmFuc2l0aW9uLCB0aGUgcHJvY2VkdXJlIHNoYWxsIGxvY2sgdGhlIG11dGV4IA0KK2JlZm9yZSBzdGF0ZSBpcyBjaGFuZ2VkLiBJZiBtdXRleCBjYW5ub3QgYmUgbG9ja2VkLCBhbm90aGVyIHByb2NlZHVyZSBoYXMgbG9ja2VkDQoraXQgYW5kIGlzIGdvaW5nIHRvIGNoYW5nZSB0aGUgc3RhdGUuDQorVGhlIG11dGV4IGlzIHVubG9ja2VkIHdoZW4gdGhlIGRyaXZlciBlbnRlcnMgKlJlY2VpdmUqIHN0YXRlLg0KKw0KK0EgcmFjZSBjb25kaXRpb24gY291bGQgYWxzbyBvY2N1ciBkdXJpbmcgaGFuZGxlIG9mIGEgcmVxdWVzdHMgZnJvbSB0aGUgaGlnaGVyIA0KK2xheWVyLiBFdmVuIGlmIHRoZSByZWNlaXZlciBpcyBzdG9wcGVkIChUQVNLIFNUT1ApIHRoZSBFTkQgb3IgRElTQUJMRUQgZXZlbnQgY2FuIA0KK2JlIHJhaXNlZCBmb3IgYSBmZXcgdVMgYWZ0ZXIgdHJpZ2dlcmluZyB0aGUgdGFzay4gVG8gcHJldmVudCBpbnRlcnJ1cHQgb2YgdGhlDQoraGlnaGVyIGxheWVyIHJlcXVlc3QgaGFuZGxlciBieSBJUlEgaGFuZGxlciwgdGhlIGhpZ2hlciBsYXllciByZXF1ZXN0IGhhbmRsZXJzDQorYXJlIHBlcmZvcm1lbmQgaW4gY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYXMNCitzb2Z0d2FyZSBpbnRlcnJ1cHQgcmVxdWVzdHMgd2l0aCBwcmlvcml0eSBlcXVhbCB0byB0aGUgUkFESU8gSVJRLg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0LmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5Zjk0NTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NC5jCkBAIC0wLDAgKzEsMjg2IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBucmYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NC5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcGliLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0LmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCIKKyNpbmNsdWRlICJoYWwvbnJmX3JhZGlvLmgiCisjaW5jbHVkZSAicmFhbC9ucmZfcmFhbF9hcGkuaCIKKworI2luY2x1ZGUgPGNtc2lzL2NvcmVfY21GdW5jLmg+CisKKwordWludDhfdCBucmZfZHJ2X3JhZGlvODAyMTU0X2NoYW5uZWxfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfZ2V0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfdHhfcG93ZXJfc2V0KGludDhfdCBwb3dlcikKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl90eF9wb3dlcl9zZXQocG93ZXIpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGFuX2lkX3NldChjb25zdCB1aW50OF90ICogcF9wYW5faWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcGFuX2lkX3NldChwX3Bhbl9pZCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9leHRlbmRlZF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICogcF9leHRlbmRlZF9hZGRyZXNzKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2V4dGVuZGVkX2FkZHJlc3Nfc2V0KHBfZXh0ZW5kZWRfYWRkcmVzcyk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zaG9ydF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICogcF9zaG9ydF9hZGRyZXNzKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Nob3J0X2FkZHJlc3Nfc2V0KHBfc2hvcnRfYWRkcmVzcyk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9pbml0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfaW5pdCgpOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWdfaW5pdCgpOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2luaXQoKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9pbml0KCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfaW5pdCgpOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9pbml0KCk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2luaXQoKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcl9pbml0KCk7CisgICAgbnJmX3JhYWxfaW5pdCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZGVpbml0KHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fZGVpbml0KCk7Cit9CisKK25yZl9kcnZfcmFkaW84MDIxNTRfc3RhdGVfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3N0YXRlX2dldCh2b2lkKQoreworICAgIHN3aXRjaCAobnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fc3RhdGVfZ2V0KCkpCisgICAgeworICAgIGNhc2UgUkFESU9fU1RBVEVfRElTQUJMSU5HOgorICAgIGNhc2UgUkFESU9fU1RBVEVfU0xFRVA6CisgICAgICAgIHJldHVybiBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1NMRUVQOworCisgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UOgorICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0ZSQU1FOgorICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfQUNLOgorICAgICAgICByZXR1cm4gTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9SRUNFSVZFOworCisgICAgY2FzZSBSQURJT19TVEFURV9DQ0E6CisgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzoKKyAgICAgICAgcmV0dXJuIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfVFJBTlNNSVQ7CisKKyAgICBjYXNlIFJBRElPX1NUQVRFX0VEOgorICAgICAgICByZXR1cm4gTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9FTkVSR1lfREVURUNUSU9OOworICAgIH0KKworICAgIHJldHVybiBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX0lOVkFMSUQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9zbGVlcCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9TTEVFUCk7CisKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgICBzd2l0Y2ggKG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3N0YXRlX2dldCgpKQorICAgIHsKKyAgICBjYXNlIFJBRElPX1NUQVRFX0RJU0FCTElORzoKKyAgICBjYXNlIFJBRElPX1NUQVRFX1NMRUVQOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgY2FzZSBSQURJT19TVEFURV9SWF9GUkFNRToKKyAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3NsZWVwKCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9TTEVFUCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmUodWludDhfdCBjaGFubmVsKQoreworICAgIGJvb2wgcmVzdWx0OworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SRUNFSVZFKTsKKworICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9yZWNlaXZlKGNoYW5uZWwpOworICAgIGFzc2VydChyZXN1bHQgPT0gdHJ1ZSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SRUNFSVZFKTsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKiBwX2RhdGEsIHVpbnQ4X3QgY2hhbm5lbCwgaW50OF90IHBvd2VyLCBib29sIGNjYSkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fVFJBTlNNSVQpOworCisgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3RyYW5zbWl0KHBfZGF0YSwgY2hhbm5lbCwgcG93ZXIsIGNjYSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9UUkFOU01JVCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzKQoreworICAgIGJvb2wgcmVzdWx0OworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9FTkVSR1lfREVURUNUSU9OKTsKKworICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9lbmVyZ3lfZGV0ZWN0aW9uKGNoYW5uZWwsIHRpbWVfdXMpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRU5FUkdZX0RFVEVDVElPTik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKHVpbnQ4X3QgKiBwX2RhdGEpCit7CisgICAgcnhfYnVmZmVyX3QgKiBwX2J1ZmZlciA9IChyeF9idWZmZXJfdCAqKXBfZGF0YTsKKworICAgIGFzc2VydChwX2J1ZmZlci0+ZnJlZSA9PSBmYWxzZSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fQlVGRkVSX0ZSRUUpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2J1ZmZlcl9mcmVlKHBfZGF0YSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9CVUZGRVJfRlJFRSk7Cit9CisKK2ludDhfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3Jzc2lfbGFzdF9nZXQodm9pZCkKK3sKKyAgICB1aW50OF90IG1pbnVzX2RibSA9IG5yZl9yYWRpb19yc3NpX3NhbXBsZV9nZXQoKTsKKyAgICByZXR1cm4gLSAoaW50OF90KW1pbnVzX2RibTsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3Byb21pc2N1b3VzX2dldCh2b2lkKQoreworICAgIHJldHVybiBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9wcm9taXNjdW91c19nZXQoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3Byb21pc2N1b3VzX3NldChib29sIGVuYWJsZWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfc2V0KGVuYWJsZWQpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYXV0b19hY2tfc2V0KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9hdXRvX2Fja19zZXQoZW5hYmxlZCk7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hdXRvX2Fja19nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfYXV0b19hY2tfZ2V0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hdXRvX3BlbmRpbmdfYml0X3NldChib29sIGVuYWJsZWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfc2V0KGVuYWJsZWQpOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX2FkZHIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgcmV0dXJuIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2Zvcl9hZGRyX3NldChwX2FkZHIsIGV4dGVuZGVkKTsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3BlbmRpbmdfYml0X2Zvcl9hZGRyX2NsZWFyKGNvbnN0IHVpbnQ4X3QgKiBwX2FkZHIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgcmV0dXJuIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2Zvcl9hZGRyX2NsZWFyKHBfYWRkciwgZXh0ZW5kZWQpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoYm9vbCBleHRlbmRlZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9mb3JfYWRkcl9yZXNldChleHRlbmRlZCk7Cit9CisKK19fV0VBSyB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfc3RhcnRlZCh2b2lkKQoreworICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkKK30KKworX19XRUFLIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZWNlaXZlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgKHZvaWQpIHBvd2VyOworICAgICh2b2lkKSBscWk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKHBfZGF0YSk7Cit9CisKK19fV0VBSyB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfdHhfc3RhcnRlZCh2b2lkKQoreworICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkKK30KKworX19XRUFLIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF90cmFuc21pdHRlZCh1aW50OF90ICogcF9hY2ssIGludDhfdCBwb3dlciwgaW50OF90IGxxaSkKK3sKKyAgICAodm9pZCkgcG93ZXI7CisgICAgKHZvaWQpIGxxaTsKKworICAgIGlmIChwX2FjayAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9idWZmZXJfZnJlZShwX2Fjayk7CisgICAgfQorfQorCitfX1dFQUsgdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1c3lfY2hhbm5lbCh2b2lkKQoreworICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkKK30KKworX19XRUFLIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9lbmVyZ3lfZGV0ZWN0ZWQoaW50OF90IHJlc3VsdCkKK3sKKyAgICAodm9pZCkgcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTQuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjZTI4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0LmgKQEAgLTAsMCArMSw0MjcgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBUaGlzIG1vZHVsZSBjb250YWlucyBnZW5lcmljIDgwMi4xNS40IHJhZGlvIGRyaXZlciBmb3IgblJGIFNvQyBkZXZpY2VzLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfRFJWX1JBRElPODAyMTU0X0hfDQorI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X0hfDQorDQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogQGJyaWVmIFN0YXRlcyBvZiB0aGUgZHJpdmVyLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0RSVl9SQURJTzgwMjE1NF9TVEFURV9JTlZBTElELA0KKyAgICBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1NMRUVQLA0KKyAgICBOUkZfRFJWX1JBRElPODAyMTU0X1NUQVRFX1JFQ0VJVkUsDQorICAgIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfVFJBTlNNSVQsDQorICAgIE5SRl9EUlZfUkFESU84MDIxNTRfU1RBVEVfRU5FUkdZX0RFVEVDVElPTiwNCit9IG5yZl9kcnZfcmFkaW84MDIxNTRfc3RhdGVfdDsNCisNCisvKioNCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSA4MDIuMTUuNCBkcml2ZXIuDQorICoNCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBvbmNlLCBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uIGZyb20gdGhpcyBtb2R1bGUuDQorICoNCisgKiBJbml0aWFsaXplIHJhZGlvIHBlcmlwaGVyYWwgdG8gU2xlZXAgc3RhdGUuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2luaXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIERlaW5pdGlhbGl6ZSA4MDIuMTUuNCBkcml2ZXIuDQorICoNCisgKiBEZWluaXRpYWxpemUgcmFkaW8gcGVyaXBoZXJhbCBhbmQgcmVzZXQgaXQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2RlaW5pdCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgR2V0IGNoYW5uZWwgb24gd2hpY2ggdGhlIHJhZGlvIG9wZXJhdGVzIHJpZ2h0IG5vdy4NCisgKi8NCit1aW50OF90IG5yZl9kcnZfcmFkaW84MDIxNTRfY2hhbm5lbF9nZXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIFNldCB0cmFuc21pdCBwb3dlciB1c2VkIGZvciBBQ0sgZnJhbWVzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcG93ZXIgIFRyYW5zbWl0IHBvd2VyIFtkQm1dLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfdHhfcG93ZXJfc2V0KGludDhfdCBwb3dlcik7DQorDQorLyoqDQorICogQHNlY3Rpb24gU2V0dGluZyBhZGRyZXNzZXMgYW5kIFBhbiBJZCBvZiB0aGlzIGRldmljZS4NCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgU2V0IFBBTiBJZCB1c2VkIGJ5IHRoaXMgZGV2aWNlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9wYW5faWQgIFBvaW50ZXIgdG8gUEFOIElkICgyIGJ5dGVzLCBsaXR0bGUtZW5kaWFuKS4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgY29weSBvZiB0aGUgUEFOIElkLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wYW5faWRfc2V0KGNvbnN0IHVpbnQ4X3QgKnBfcGFuX2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgU2V0IEV4dGVuZGVkIEFkZHJlc3Mgb2YgdGhpcyBkZXZpY2UuDQorICoNCisgKiBAcGFyYW1baW5dICBwX2V4dGVuZGVkX2FkZHJlc3MgIFBvaW50ZXIgdG8gZXh0ZW5kZWQgYWRkcmVzcyAoOCBieXRlcywgbGl0dGxlLWVuZGlhbikuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGNvcHkgb2YgdGhlIGFkZHJlc3MuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2V4dGVuZGVkX2FkZHJlc3Nfc2V0KGNvbnN0IHVpbnQ4X3QgKnBfZXh0ZW5kZWRfYWRkcmVzcyk7DQorDQorLyoqDQorICogQGJyaWVmIFNldCBTaG9ydCBBZGRyZXNzIG9mIHRoaXMgZGV2aWNlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9zaG9ydF9hZGRyZXNzICBQb2ludGVyIHRvIHNob3J0IGFkZHJlc3MgKDIgYnl0ZXMsIGxpdHRsZS1lbmRpYW4pLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjb3B5IG9mIHRoZSBhZGRyZXNzLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zaG9ydF9hZGRyZXNzX3NldChjb25zdCB1aW50OF90ICpwX3Nob3J0X2FkZHJlc3MpOw0KKw0KKw0KKy8qKg0KKyAqIEBzZWN0aW9uIEZ1bmN0aW9ucyB0byByZXF1ZXN0IEZTTSB0cmFuc2l0aW9ucyBhbmQgY2hlY2sgY3VycmVudCBzdGF0ZS4NCisgKg0KKyAqICAgICAgICAgIHJlY2VpdmUoKSAgICAgICB0cmFuc21pdCgpDQorICogICAgICAgICAgLS0tLS0tLS0+ICAgICAgIC0tLS0tLS0tPg0KKyAqICAgICBTbGVlcCAgICAgICAgIFJlY2VpdmUgICAgICAgICBUcmFuc21pdA0KKyAqICAgICAgICAgIDwtLS0tLS0tLSB8ICAvfFw8LS0tLS0tLS0NCisgKiAgICAgICAgICAgc2xlZXAoKSAgfCAgIHwgICByZWNlaXZlKCkgLyB0cmFuc21pdHRlZCgpIC8gYnVzeV9jaGFubmVsKCkNCisgKiAgICAgICAgICAgICAgICAgICAgfCAgIHwNCisgKiBlbmVyZ3lfZGV0ZWN0aW9uKCkgfCAgIHwgZW5lcmd5X2RldGVjdGVkKCkNCisgKiAgICAgICAgICAgICAgICAgICBcfC8gIHwNCisgKiAgICAgICAgICAgICAgIEVuZXJneSBkZXRlY3Rpb24NCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgR2V0IGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJhZGlvLg0KKyAqLw0KK25yZl9kcnZfcmFkaW84MDIxNTRfc3RhdGVfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3N0YXRlX2dldCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgQ2hhbmdlIHJhZGlvIHN0YXRlIHRvIFNsZWVwLg0KKyAqDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgcmFkaW8gaXMgaW4gUmVjZWl2ZSBzdGF0ZS4NCisgKg0KKyAqIFNsZWVwIHN0YXRlIGlzIHRoZSBsb3dlc3QgcG93ZXIgc3RhdGUuIEluIHRoaXMgc3RhdGUgcmFkaW8gY2Fubm90IHRyYW5zbWl0IG9yIHJlY2VpdmUgZnJhbWVzLg0KKyAqDQorICogQHJldHVybiAgdHJ1ZSAgIElmIHRoZSByYWRpbyBjaGFuZ2VzIGl0J3Mgc3RhdGUgdG8gbG93IHBvd2VyIG1vZGUuDQorICogQHJldHVybiAgZmFsc2UgIElmIHRoZSBkcml2ZXIgY291bGQgbm90IHNjaGVkdWxlIGNoYW5naW5nIHN0YXRlLg0KKyAqLw0KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9zbGVlcCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgQ2hhbmdlIHJhZGlvIHN0YXRlIHRvIFJlY2VpdmUuDQorICoNCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gU2xlZXAgb3IgVHJhbnNtaXQgc3RhdGUuDQorICoNCisgKiBJbiBSZWNlaXZlIHN0YXRlIHJhZGlvIHJlY2VpdmVzIGZyYW1lcyBhbmQgYXV0b21hdGljYWxseSBzZW5kcyBBQ0sgZnJhbWVzIHdoZW4gYXBwcm9wcmlhdGUuDQorICogUmVjZWl2ZWQgZnJhbWUgaXMgcmVwb3J0ZWQgdG8gaGlnaGVyIGxheWVyIGJ5IG5yZl9yYWRpbzgwMjE1NF9yZWNlaXZlZCgpIGNhbGwuDQorICoNCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciBvbiB3aGljaCByYWRpbyB3aWxsIHJlY2VpdmUuDQorICovDQordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmUodWludDhfdCBjaGFubmVsKTsNCisNCisvKioNCisgKiBAYnJpZWYgQ2hhbmdlIHJhZGlvIHN0YXRlIHRvIFRyYW5zbWl0Lg0KKyAqDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIFJlY2VpdmUgc3RhdGUuIEluIG90aGVyIHN0YXRlcyB0cmFuc21pc3Npb24gd2lsbCBiZQ0KKyAqICAgICAgIHNjaGVkdWxlZC4NCisgKg0KKyAqIEluIFRyYW5zbWl0IHN0YXRlIHJhZGlvIHRyYW5zbWl0cyBnaXZlbiBmcmFtZS4gSWYgcmVxdWVzdGVkIGl0IHdhaXRzIGZvciBBQ0sgZnJhbWUuDQorICogUmFkaW8gZHJpdmVyIHdhaXQgaW5maW5pdGVseSBmb3IgQUNLIGZyYW1lLiBIaWdoZXIgbGF5ZXIgaXMgcmVzcG9uc2libGUgdG8gY2FsbA0KKyAqIG5yZl9yYWRpbzgwMjE1NF9yZWNlaXZlKCkgYWZ0ZXIgQUNLIHRpbWVvdXQuDQorICogVHJhbnNtaXNzaW9uIHJlc3VsdCBpcyByZXBvcnRlZCB0byBoaWdoZXIgbGF5ZXIgYnkgbnJmX3JhZGlvODAyMTU0X3RyYW5zbWl0dGVkKCkgb3INCisgKiBucmZfcmFkaW84MDIxNTRfYnVzeV9jaGFubmVsKCkgY2FsbHMuDQorICoNCisgKiBAcGFyYW1baW5dICBwX2RhdGEgICBQb2ludGVyIHRvIGFycmF5IGNvbnRhaW5pbmcgZGF0YSB0byB0cmFuc21pdC4gRmlyc3QgYnl0ZSBzaG91bGQgY29udGFpbg0KKyAqICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIGxlbmd0aCBhbmQgZm9sbG93aW5nIGJ5dGVzIHNob3VsZCBjb250YWluIGRhdGEuIENSQyBpcyBjb21wdXRlZA0KKyAqICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgcmFkaW8gaGFyZHdhcmUgYW5kIGNhbiBjb250YWluIGFueSBieXRlcy4NCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciBvbiB3aGljaCByYWRpbyB3aWxsIHRyYW5zbWl0IGdpdmVuIGZyYW1lLg0KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICAgIFRyYW5zbWlzc2lvbiBwb3dlciBbZEJtXS4gR2l2ZW4gdmFsdWUgaXMgcm91bmRlZCB1cCB0byBuZWFyZXN0IHBlcm1pdHRlZA0KKyAqICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLg0KKyAqIEBwYXJhbVtpbl0gIGNjYSAgICAgIElmIHRoZSBkcml2ZXIgc2hvdWxkIHBlcmZvcm0gQ0NBIHByb2NlZHVyZSBiZWZvcmUgdHJhbnNtaXNzaW9uLg0KKyAqDQorICogQHJldHVybiAgdHJ1ZSAgIElmIHRoZSB0cmFuc21pc3Npb24gcHJvY2VkdXJlIHdhcyBzY2hlZHVsZWQuDQorICogQHJldHVybiAgZmFsc2UgIElmIHRoZSBkcml2ZXIgY291bGQgbm90IHNjaGVkdWxlIHRoZSB0cmFuc21pc3Npb24gcHJvY2VkdXJlLg0KKyAqLw0KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF90cmFuc21pdChjb25zdCB1aW50OF90ICpwX2RhdGEsIHVpbnQ4X3QgY2hhbm5lbCwgaW50OF90IHBvd2VyLCBib29sIGNjYSk7DQorDQorLyoqDQorICogQGJyaWVmIENoYW5nZSByYWRpbyBzdGF0ZSB0byBFbmVyZ3kgRGV0ZWN0aW9uLg0KKyAqDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGluIFJlY2VpdmUgc3RhdGUgb3IgU2xlZXAgc3RhdGUuDQorICogQG5vdGUgSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gU2xlZXAgc3RhdGUgbnJmX2Rydl9yYWRpbzgwMjE1NF9lbmVyZ3lfZGV0ZWN0ZWQoKSBtYXkgYmUNCisgKiAgICAgICBjYWxsZWQgYmVmb3JlIG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGlvbigpIHJldHVybnMgcmVzdWx0Lg0KKyAqDQorICogSW4gRW5lcmd5IERldGVjdGlvbiBzdGF0ZSByYWRpbyBkZXRlY3RzIG1heGltdW0gZW5lcmd5IGZvciBnaXZlbiB0aW1lLiBSZXN1bHQgb2YgdGhlIGRldGVjdGlvbg0KKyAqIGlzIHJlcG9ydGVkIHRvIHRoZSBoaWdoZXIgbGF5ZXIgYnkgbnJmX2Rydl9yYWRpbzgwMjE1NF9lbmVyZ3lfZGV0ZWN0ZWQoKSBjYWxsLg0KKyAqDQorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgb24gd2hpY2ggcmFkaW8gd2lsbCBkZXRlY3QgZW5lcmd5Lg0KKyAqIEBwYXJhbVtpbl0gIHRpbWVfdXMgIER1cmF0aW9uIG9mIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlLiBHaXZlbiB2YWx1ZSBpcyByb3VuZGVkIHVwIHRvDQorICogICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGljYXRpb24gb2YgOHMgKDEyOCB1cykuDQorICoNCisgKiBAcmV0dXJuICB0cnVlICAgSWYgdGhlIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlIHdhcyBzY2hlZHVsZWQuDQorICogQHJldHVybiAgZmFsc2UgIElmIHRoZSBkcml2ZXIgY291bGQgbm90IHNjaGVkdWxlIHRoZSBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4NCisgKi8NCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGlvbih1aW50OF90IGNoYW5uZWwsIHVpbnQzMl90IHRpbWVfdXMpOw0KKw0KKw0KKy8qKg0KKyAqIEBzZWN0aW9uIENhbGxzIHRvIGhpZ2hlciBsYXllci4NCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IHRoYXQgcmVjZWl2aW5nIGZyYW1lIGhhcyBzdGFydGVkLg0KKyAqDQorICogQG5vdGUgSXQgaXMgcG9zc2libGUgdGhlIGZyYW1lIGlzIGRyb3BwZWQgZHVyaW5nIHJlY2VpdmUgcHJvY2VkdXJlIGFuZA0KKyAqICAgICAgIEBzYSBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmVkIHdvbid0IGJlIGNhbGxlZC4NCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB2ZXJ5IHNob3J0IHRvIHByZXZlbnQgZHJvcHBpbmcgZnJhbWVzIGJ5IHRoZSBkcml2ZXIuDQorICovDQorZXh0ZXJuIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9zdGFydGVkKHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBOb3RpZnkgdGhhdCBmcmFtZSB3YXMgcmVjZWl2ZWQuDQorICoNCisgKiBAbm90ZSBCdWZmZXIgcG9pbnRlZCBieSB0aGUgcF9kYXRhIHBvaW50ZXIgaXMgbm90IG1vZGlmaWVkIGJ5IHRoZSByYWRpbyBkcml2ZXIgKGFuZCBjYW4ndA0KKyAqICAgICAgIGJlIHVzZWQgdG8gcmVjZWl2ZSBhIGZyYW1lKSB1bnRpbCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKCkgZnVuY3Rpb24gaXMgY2FsbGVkLg0KKyAqIEBub3RlIEJ1ZmZlciBwb2ludGVkIGJ5IHRoZSBwX2RhdGEgcG9pbnRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIGZ1bmN0aW9uIGhhbmRsZXIgKGFuZCBvdGhlcg0KKyAqICAgICAgIG1vZHVsZXMpIHVudGlsIG5yZl9kcnZfcmFkaW84MDIxNTRfYnVmZmVyX2ZyZWUoKSBmdW5jdGlvbiBpcyBjYWxsZWQuDQorICoNCisgKiBAcGFyYW1baW5dICBwX2RhdGEgIFBvaW50ZXIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgcmVjZWl2ZWQgZGF0YS4gRmlyc3QgYnl0ZSBpbiB0aGUgYnVmZmVyIGlzDQorICogICAgICAgICAgICAgICAgICAgICBsZW5ndGggb2YgdGhlIGZyYW1lIGFuZCBmb2xsb3dpbmcgYnl0ZXMgaXMgdGhlIGZyYW1lIGl0c2VsZiAoYWZ0ZXIgUEhSKS4NCisgKiBAcGFyYW1baW5dICBwb3dlciAgIFJTU0kgb2YgcmVjZWl2ZWQgZnJhbWUuDQorICogQHBhcmFtW2luXSAgbHFpICAgICBMUUkgb2YgcmVjZWl2ZWQgZnJhbWUuDQorICovDQorZXh0ZXJuIHZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZWNlaXZlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBOb3RpZnkgdGhhdCB0cmFuc21pdHRpbmcgZnJhbWUgaGFzIHN0YXJ0ZWQuDQorICoNCisgKiBAbm90ZSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRyYW5zbWl0IHByb2NlZHVyZSBpcyBpbnRlcnJ1cHRlZCBhbmQNCisgKiAgICAgICBAc2EgbnJmX2Rydl9yYWRpbzgwMjE1NF90cmFuc21pdHRlZCB3b24ndCBiZSBjYWxsZWQuDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdmVyeSBzaG9ydCB0byBwcmV2ZW50IGRyb3BwaW5nIGZyYW1lcyBieSB0aGUgZHJpdmVyLg0KKyAqLw0KK2V4dGVybiB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfdHhfc3RhcnRlZCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IHRoYXQgZnJhbWUgd2FzIHRyYW5zbWl0dGVkLg0KKyAqDQorICogQG5vdGUgSWYgQUNLIHdhcyByZXF1ZXN0ZWQgZm9yIHRyYW5zbWl0dGVkIGZyYW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHByb3BlciBBQ0sgaXMNCisgKiAgICAgICByZWNlaXZlZC4gSWYgQUNLIHdhcyBub3QgcmVxdWVzdGVkIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgdHJhbnNtaXNzaW9uIGlzDQorICogICAgICAgZW5kZWQuDQorICogQG5vdGUgQnVmZmVyIHBvaW50ZWQgYnkgdGhlIHBfYWNrIHBvaW50ZXIgaXMgbm90IG1vZGlmaWVkIGJ5IHRoZSByYWRpbyBkcml2ZXIgKGFuZCBjYW4ndA0KKyAqICAgICAgIGJlIHVzZWQgdG8gcmVjZWl2ZSBhIGZyYW1lKSB1bnRpbCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1ZmZlcl9mcmVlKCkgZnVuY3Rpb24gaXMgY2FsbGVkLg0KKyAqIEBub3RlIEJ1ZmZlciBwb2ludGVkIGJ5IHRoZSBwX2FjayBwb2ludGVyIG1heSBiZSBtb2RpZmllZCBieSB0aGUgZnVuY3Rpb24gaGFuZGxlciAoYW5kIG90aGVyDQorICogICAgICAgbW9kdWxlcykgdW50aWwgbnJmX2Rydl9yYWRpbzgwMjE1NF9idWZmZXJfZnJlZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfYWNrICBQb2ludGVyIHRvIHJlY2VpdmVkIEFDSyBidWZmZXIuIEZpc3QgYnl0ZSBpbiB0aGUgYnVmZmVyIGlzIGxlbmd0aCBvZiB0aGUNCisgKiAgICAgICAgICAgICAgICAgICAgZnJhbWUgYW5kIGZvbGxvd2luZyBieXRlcyBhcmUgdGhlIEFDSyBmcmFtZSBpdHNlbGYgKGFmdGVyIFBIUikuDQorICogICAgICAgICAgICAgICAgICAgIElmIEFDSyB3YXMgbm90IHJlcXVlc3RlZCBAcCBwX2FjayBpcyBzZXQgdG8gTlVMTC4NCisgKiBAcGFyYW1baW5dICBwb3dlciAgUlNTSSBvZiByZWNlaXZlZCBmcmFtZSBvciAwIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4NCisgKiBAcGFyYW1baW5dICBscWkgICAgTFFJIG9mIHJlY2VpdmVkIGZyYW1lIG9yIDAgaWYgQUNLIHdhcyBub3QgcmVxdWVzdGVkLg0KKyAqLw0KK2V4dGVybiB2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfdHJhbnNtaXR0ZWQodWludDhfdCAqIHBfYWNrLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBOb3RpZnkgdGhhdCBmcmFtZSB3YXMgbm90IHRyYW5zbWl0dGVkIGR1ZSB0byBidXN5IGNoYW5uZWwuDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiBDQ0EgcHJvY2VkdXJlIChwZXJmb3JtZWQganVzdCBiZWZvcmUgdHJhbnNtaXNzaW9uKSBmYWlscy4NCisgKi8NCitleHRlcm4gdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2J1c3lfY2hhbm5lbCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IHRoYXQgRW5lcmd5IERldGVjdGlvbiBwcm9jZWR1cmUgZmluaXNoZWQuDQorICoNCisgKiBAcGFyYW1baW5dICByZXN1bHQgIE1heGltdW0gZW5lcmd5IGRldGVjdGVkIGR1cmluZyBFbmVyZ3kgRGV0ZWN0aW9uIHByb2NlZHVyZS4NCisgKi8NCitleHRlcm4gdm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2VuZXJneV9kZXRlY3RlZChpbnQ4X3QgcmVzdWx0KTsNCisNCisNCisvKioNCisgKiBAc2VjdGlvbiBEcml2ZXIgbWVtb3J5IG1hbmFnZW1lbnQNCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgTm90aWZ5IGRyaXZlciB0aGF0IGJ1ZmZlciBjb250YWluaW5nIHJlY2VpdmVkIGZyYW1lIGlzIG5vdCB1c2VkIGFueW1vcmUuDQorICoNCisgKiBAbm90ZSBUaGUgYnVmZmVyIHBvaW50ZWQgYnkgdGhlIEBwIHBfZGF0YSBwb2ludGVyIG1heSBiZSBtb2RpZmllZCBieSB0aGlzIGZ1bmN0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9kYXRhICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjb250YWluaW5nIHJlY2VpdmVkIGRhdGEgdGhhdCBpcyBubyBtb3JlIG5lZWRlZCBieQ0KKyAqICAgICAgICAgICAgICAgICAgICAgdGhlIGhpZ2hlciBsYXllci4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYnVmZmVyX2ZyZWUodWludDhfdCAqIHBfZGF0YSk7DQorDQorDQorLyoqDQorICogQHNlY3Rpb24gUlNTSSBtZWFzdXJlbWVudCBmdW5jdGlvbi4NCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgQmVnaW4gUlNTSSBtZWFzdXJlbWVudC4NCisgKg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiBSZWNlaXZlIHN0YXRlLg0KKyAqDQorICogQmVnaW4gUlNTSSBtZWFzdXJlbWVudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiA4IHVTLiBUaGUgcmVzdWx0IGNhbiBiZSByZWFkIGJ5DQorICogbnJmX3JhZGlvODAyMTU0X3Jzc2lfbGFzdF9nZXQoKSBmdW5jdGlvbi4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcnNzaV9tZWFzdXJlKHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBHZXQgcmVzdWx0IG9mIGxhc3QgUlNTSSBtZWFzdXJlbWVudC4NCisgKg0KKyAqIEByZXR1cm5zIFJTU0kgbWVhc3VyZW1lbnQgcmVzdWx0IFtkQm1dLg0KKyAqLw0KK2ludDhfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3Jzc2lfbGFzdF9nZXQodm9pZCk7DQorDQorDQorLyoqDQorICogQHNlY3Rpb24gUHJvbWlzY3VvdXMgbW9kZS4NCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgcmFkaW8gbW9kZS4NCisgKg0KKyAqIEBub3RlIFByb21pc2N1b3VzIG1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4NCisgKg0KKyAqIEluIHByb21pc2N1b3VzIG1vZGUgZHJpdmVyIG5vdGlmaWVzIGhpZ2hlciBsYXllciB0aGF0IGl0IHJlY2VpdmVkIGFueSBmcmFtZSAocmVnYXJkbGVzcw0KKyAqIGZyYW1lIHR5cGUgb3IgZGVzdGluYXRpb24gYWRkcmVzcykuDQorICogSW4gbm9ybWFsIG1vZGUgKG5vdCBwcm9taXNjdW91cykgaGlnaGVyIGxheWVyIGlzIG5vdCBub3RpZmllZCBhYm91dCBBQ0sgZnJhbWVzIGFuZCBmcmFtZXMgd2l0aA0KKyAqIHVua25vd24gdHlwZS4gQWxzbyBmcmFtZXMgd2l0aCBkZXN0aW5hdGlvbiBhZGRyZXNzIG5vdCBtYXRjaGluZyB0aGlzIGRldmljZSBhZGRyZXNzIGFyZSBpZ25vcmVkLg0KKyAqDQorICogQHBhcmFtW2luXSAgZW5hYmxlZCAgSWYgcHJvbWlzY3VvdXMgbW9kZSBzaG91bGQgYmUgZW5hYmxlZC4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcHJvbWlzY3VvdXNfc2V0KGJvb2wgZW5hYmxlZCk7DQorDQorLyoqDQorICogQGJyaWVmIENoZWNrIGlmIHJhZGlvIGlzIGluIHByb21pc2N1b3VzIG1vZGUuDQorICoNCisgKiBAcmV0dmFsIFRydWUgICBSYWRpbyBpcyBpbiBwcm9taXNjdW91cyBtb2RlLg0KKyAqIEByZXR2YWwgRmFsc2UgIFJhZGlvIGlzIG5vdCBpbiBwcm9taXNjdW91cyBtb2RlLg0KKyAqLw0KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcm9taXNjdW91c19nZXQodm9pZCk7DQorDQorDQorLyoqDQorICogQHNlY3Rpb24gQXV0byBBQ0sgbWFuYWdlbWVudC4NCisgKi8NCisNCisvKioNCisgKiBAYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgYXV0byBBQ0sgcHJvY2VkdXJlLg0KKyAqDQorICogQG5vdGUgQXV0byBBQ0sgcHJvY2VkdXJlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4NCisgKg0KKyAqIElmIGF1dG8gQUNLIHByb2NlZHVyZSBpcyBlbmFibGVkIHRoZSBkcml2ZXIgcHJlcGFyZXMgYW5kIHNlbmRzIEFDSyBmcmFtZXMgYXV0b21hdGljYWxseQ0KKyAqIGFUdXJuYXJvdW5kVGltZSAoMTkyIHVzKSBhZnRlciBwcm9wZXIgZnJhbWUgaXMgcmVjZWl2ZWQuIFRoZSBkcml2ZXIgc2V0cyBzZXF1ZW5jZSBudW1iZXIgaW4NCisgKiB0aGUgQUNLIGZyYW1lIGFuZCBwZW5kaW5nIGJpdCBhY2NvcmRpbmcgdG8gYXV0byBwZW5kaW5nIGJpdCBmZWF0dXJlIHNldHRpbmdzLiBXaGVuIGF1dG8gQUNLDQorICogcHJvY2VkdXJlIGlzIGVuYWJsZWQgdGhlIGRyaXZlciBub3RpZmllcyB0aGUgbmV4dCBoaWdoZXIgbGF5ZXIgYWJvdXQgcmVjZWl2ZWQgZnJhbWUgYWZ0ZXIgQUNLDQorICogZnJhbWUgaXMgdHJhbnNtaXR0ZWQuDQorICogSWYgYXV0byBBQ0sgcHJvY2VkdXJlIGlzIGRpc2FibGVkIHRoZSBkcml2ZXIgZG9lcyBub3QgdHJhbnNtaXQgQUNLIGZyYW1lcy4gSXQgbm90aWZpZXMgdGhlIG5leHQNCisgKiBoaWdoZXIgbGF5ZXIgYWJvdXQgcmVjZWl2ZWQgZnJhbWUgd2hlbiBhIGZyYW1lIGlzIHJlY2VpdmVkLiBJbiB0aGlzIG1vZGUgdGhlIG5leHQgaGlnaGVyIGxheWVyDQorICogaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgQUNLIGZyYW1lLiBBQ0sgZnJhbWVzIHNob3VsZCBiZSBzZW50IHVzaW5nDQorICogbnJmX2Rydl9yYWRpbzgwMjE1NF90cmFuc21pdCgpIGZ1bmN0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSAgZW5hYmxlZCAgSWYgYXV0byBBQ0sgcHJvY2VkdXJlIHNob3VsZCBiZSBlbmFibGVkLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hdXRvX2Fja19zZXQoYm9vbCBlbmFibGVkKTsNCisNCisvKioNCisgKiBAYnJpZWYgQ2hlY2sgaWYgYXV0byBBQ0sgcHJvY2VkdXJlIGlzIGVuYWJsZWQuDQorICoNCisgKiBAcmV0dmFsIFRydWUgICBBdXRvIEFDSyBwcm9jZWR1cmUgaXMgZW5hYmxlZC4NCisgKiBAcmV0dmFsIEZhbHNlICBBdXRvIEFDSyBwcm9jZWR1cmUgaXMgZGlzYWJsZWQuDQorICovDQorYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2F1dG9fYWNrX2dldCh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgc2V0dGluZyBwZW5kaW5nIGJpdCBpbiBhdXRvbWF0aWNhbGx5IHRyYW5zbWl0dGVkIEFDSyBmcmFtZXMuDQorICoNCisgKiBAbm90ZSBTZXR0aW5nIHBlbmRpbmcgYml0IGluIGF1dG9tYXRpY2FsbHkgdHJhbnNtaXR0ZWQgQUNLIGZyYW1lcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuDQorICoNCisgKiBSYWRpbyBkcml2ZXIgYXV0b21hdGljYWxseSBzZW5kcyBBQ0sgZnJhbWVzIGluIHJlc3BvbnNlIHRvIHVuaWNhc3QgZnJhbWVzIGRlc3RpbmVkIHRvIHRoaXMgbm9kZS4NCisgKiBQZW5kaW5nIGJpdCBpbiBBQ0sgZnJhbWUgY2FuIGJlIHNldCBvciBjbGVhcmVkIHJlZ2FyZGluZyBkYXRhIGluIHBlbmRpbmcgYnVmZmVyIGRlc3RpbmVkIHRvIEFDSw0KKyAqIGRlc3RpbmF0aW9uLg0KKyAqDQorICogSWYgc2V0dGluZyBwZW5kaW5nIGJpdCBpbiBBQ0sgZnJhbWVzIGlzIGRpc2FibGVkLCBwZW5kaW5nIGJpdCBpbiBldmVyeSBBQ0sgZnJhbWUgaXMgc2V0Lg0KKyAqIElmIHNldHRpbmcgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lcyBpcyBlbmFibGVkLCByYWRpbyBkcml2ZXIgY2hlY2tzIGlmIHRoZXJlIGlzIGRhdGENCisgKiBpbiBwZW5kaW5nIGJ1ZmZlciBkZXN0aW5lZCB0byBBQ0sgZGVzdGluYXRpb24uIElmIHRoZXJlIGlzIG5vIHN1Y2ggZGF0YSwgcGVuZGluZyBiaXQgaXMgY2xlYXJlZC4NCisgKg0KKyAqIEBub3RlIEl0IGlzIHBvc3NpYmxlIHRoYXQgaWYgdGhlcmUgaXMgYSBsb3Qgb2Ygc3VwcG9ydGVkIHBlZXJzIHJhZGlvIGRyaXZlciBjYW5ub3QgdmVyaWZ5DQorICogICAgICAgaWYgdGhlcmUgaXMgcGVuZGluZyBkYXRhIGJlZm9yZSBBQ0sgaXMgc2VudC4gSW4gdGhpcyBjYXNlIHBlbmRpbmcgYml0IGlzIHNldC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGVuYWJsZWQgIElmIHNldHRpbmcgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lcyBpcyBlbmFibGVkLg0KKyAqLw0KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hdXRvX3BlbmRpbmdfYml0X3NldChib29sIGVuYWJsZWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBBZGQgYWRkcmVzcyBvZiBwZWVyIG5vZGUgZm9yIHdoaWNoIHRoZXJlIGlzIHBlbmRpbmcgZGF0YSBpbiB0aGUgYnVmZmVyLg0KKyAqDQorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgZ2l2ZW4gYWRkcmVzcy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfYWRkciAgICBBcnJheSBvZiBieXRlcyBjb250YWluaW5nIGFkZHJlc3Mgb2YgdGhlIG5vZGUgKGxpdHRsZS1lbmRpYW4pLg0KKyAqIEBwYXJhbVtpbl0gIGV4dGVuZGVkICBJZiBnaXZlbiBhZGRyZXNzIGlzIEV4dGVuZGVkIE1BQyBBZGRyZXNzIG9yIFNob3J0IE1BQyBBZGRyZXNzLg0KKyAqDQorICogQHJldHZhbCBUcnVlICAgQWRkcmVzcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGxpc3QuDQorICogQHJldHZhbCBGYWxzZSAgVGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgdG8gc3RvcmUgdGhpcyBhZGRyZXNzIGluIHRoZSBsaXN0Lg0KKyAqLw0KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9zZXQoY29uc3QgdWludDhfdCAqcF9hZGRyLCBib29sIGV4dGVuZGVkKTsNCisNCisvKioNCisgKiBAYnJpZWYgUmVtb3ZlIGFkZHJlc3Mgb2YgcGVlciBub2RlIGZvciB3aGljaCB0aGVyZSBpcyBubyBtb3JlIHBlbmRpbmcgZGF0YSBpbiB0aGUgYnVmZmVyLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9hZGRyICAgIEFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgYWRkcmVzcyBvZiB0aGUgbm9kZSAobGl0dGxlLWVuZGlhbikuDQorICogQHBhcmFtW2luXSAgZXh0ZW5kZWQgIElmIGdpdmVuIGFkZHJlc3MgaXMgRXh0ZW5kZWQgTUFDIEFkZHJlc3Mgb3IgU2hvcnQgTUFDIEFkZHJlc3MuDQorICoNCisgKiBAcmV0dmFsIFRydWUgICBBZGRyZXNzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIGxpc3QuDQorICogQHJldHZhbCBGYWxzZSAgVGhlcmUgaXMgbm8gc3VjaCBhZGRyZXNzIGluIHRoZSBsaXN0Lg0KKyAqLw0KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9wZW5kaW5nX2JpdF9mb3JfYWRkcl9jbGVhcihjb25zdCB1aW50OF90ICpwX2FkZHIsIGJvb2wgZXh0ZW5kZWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBSZW1vdmUgYWxsIGFkZHJlc3NlcyBvZiBnaXZlbiB0eXBlIGZyb20gcGVuZGluZyBiaXQgbGlzdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGV4dGVuZGVkICBJZiBmdW5jdGlvbiBzaG91bGQgcmVtb3ZlIGFsbCBFeG50ZWRlZCBNQUMgQWRyZXNzZXMgb2YgYWxsIFNob3J0IEFkZHJlc3Nlcy4NCisgKi8NCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGVuZGluZ19iaXRfZm9yX2FkZHJfcmVzZXQoYm9vbCBleHRlbmRlZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBOUkZfRFJWX1JBRElPODAyMTU0X0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGM1OWUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmMKQEAgLTAsMCArMSwyMzggQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgcHJvY2VkdXJlcyB0byBzZXQgcGVuZGluZyBiaXQgaW4gblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmgiCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY29uc3QuaCIKKworI2luY2x1ZGUgImhhbC9ucmZfcmFkaW8uaCIKKworLy8vIE1heGltdW0gbnVtYmVyIG9mIFNob3J0IEFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggdGhlcmUgaXMgcGVuZGluZyBkYXRhIGluIGJ1ZmZlci4KKyNkZWZpbmUgTlVNX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTICAgICBSQURJT19QRU5ESU5HX1NIT1JUX0FERFJFU1NFUworLy8vIE1heGltdW0gbnVtYmVyIG9mIEV4dGVuZGVkIEFkZHJlc3NlcyBvZiBub2RlcyBmb3Igd2hpY2ggdGhlcmUgaXMgcGVuZGluZyBkYXRhIGluIGJ1ZmZlci4KKyNkZWZpbmUgTlVNX1BFTkRJTkdfRVhURU5ERURfQUREUkVTU0VTICBSQURJT19QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUworLy8vIFZhbHVlIHVzZWQgdG8gbWFyayBTaG9ydCBBZGRyZXNzIGFzIHVudXNlZC4KKyNkZWZpbmUgVU5VU0VEX1BFTkRJTkdfU0hPUlRfQUREUkVTUyAgICAoKHVpbnQ4X3QgW1NIT1JUX0FERFJFU1NfU0laRV0pIHsweGZmLCAweGZmfSkKKy8vLyBWYWx1ZSB1c2VkIHRvIG1hcmsgRXh0ZW5kZWQgQWRkcmVzcyBhcyB1bnVzZWQuCisjZGVmaW5lIFVOVVNFRF9QRU5ESU5HX0VYVEVOREVEX0FERFJFU1MgKCh1aW50OF90IFtFWFRFTkRFRF9BRERSRVNTX1NJWkVdKSB7MH0pCisKKy8vLyBJZiBwZW5kaW5nIGJpdCBpbiBBQ0sgZnJhbWUgc2hvdWxkIGJlIHNldCB0byB2YWxpZCBvciBkZWZhdWx0IHZhbHVlLgorc3RhdGljIGJvb2wgbV9zZXR0aW5nX3BlbmRpbmdfYml0X2VuYWJsZWQ7CisvLy8gQXJyYXkgb2YgU2hvcnQgQWRkcmVzc2VzIG9mIG5vZGVzIGZvciB3aGljaCB0aGVyZSBpcyBwZW5kaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4KK3N0YXRpYyB1aW50OF90IG1fcGVuZGluZ19zaG9ydFtOVU1fUEVORElOR19TSE9SVF9BRERSRVNTRVNdW1NIT1JUX0FERFJFU1NfU0laRV07CisvLy8gQXJyYXkgb2YgRXh0ZW5kZWQgQWRkcmVzc2VzIG9mIG5vZGVzIGZvciB3aGljaCB0aGVyZSBpcyBwZW5kaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4KK3N0YXRpYyB1aW50OF90IG1fcGVuZGluZ19leHRlbmRlZFtOVU1fUEVORElOR19FWFRFTkRFRF9BRERSRVNTRVNdW0VYVEVOREVEX0FERFJFU1NfU0laRV07CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfaW5pdCh2b2lkKQoreworICAgIG1lbXNldChtX3BlbmRpbmdfZXh0ZW5kZWQsIDAsIHNpemVvZihtX3BlbmRpbmdfZXh0ZW5kZWQpKTsKKyAgICBtZW1zZXQobV9wZW5kaW5nX3Nob3J0LCAweGZmLCBzaXplb2YobV9wZW5kaW5nX3Nob3J0KSk7CisgICAgbV9zZXR0aW5nX3BlbmRpbmdfYml0X2VuYWJsZWQgPSB0cnVlOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X3NldChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5nX3BlbmRpbmdfYml0X2VuYWJsZWQgPSBlbmFibGVkOworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0X2Zvcl9hZGRyX3NldChjb25zdCB1aW50OF90ICogcF9hZGRyLCBib29sIGV4dGVuZGVkKQoreworICAgIHVpbnQ4X3QgKiBwX2VtcHR5X3Nsb3QgPSBOVUxMOworCisgICAgaWYgKGV4dGVuZGVkKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCA9PSBtZW1jbXAobV9wZW5kaW5nX2V4dGVuZGVkW2ldLCBwX2FkZHIsIHNpemVvZihtX3BlbmRpbmdfZXh0ZW5kZWRbaV0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKDAgPT0gbWVtY21wKG1fcGVuZGluZ19leHRlbmRlZFtpXSwgVU5VU0VEX1BFTkRJTkdfRVhURU5ERURfQUREUkVTUywgc2l6ZW9mKG1fcGVuZGluZ19leHRlbmRlZFtpXSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBfZW1wdHlfc2xvdCA9IG1fcGVuZGluZ19leHRlbmRlZFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwX2VtcHR5X3Nsb3QgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHBfZW1wdHlfc2xvdCwgcF9hZGRyLCBFWFRFTkRFRF9BRERSRVNTX1NJWkUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9QRU5ESU5HX1NIT1JUX0FERFJFU1NFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCA9PSBtZW1jbXAobV9wZW5kaW5nX3Nob3J0W2ldLCBwX2FkZHIsIHNpemVvZihtX3BlbmRpbmdfc2hvcnRbaV0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKDAgPT0gbWVtY21wKG1fcGVuZGluZ19zaG9ydFtpXSwgVU5VU0VEX1BFTkRJTkdfU0hPUlRfQUREUkVTUywgc2l6ZW9mKG1fcGVuZGluZ19zaG9ydFtpXSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBfZW1wdHlfc2xvdCA9IG1fcGVuZGluZ19zaG9ydFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwX2VtcHR5X3Nsb3QgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHBfZW1wdHlfc2xvdCwgcF9hZGRyLCBTSE9SVF9BRERSRVNTX1NJWkUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfZm9yX2FkZHJfY2xlYXIoY29uc3QgdWludDhfdCAqIHBfYWRkciwgYm9vbCBleHRlbmRlZCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKGV4dGVuZGVkKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IE5VTV9QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCA9PSBtZW1jbXAobV9wZW5kaW5nX2V4dGVuZGVkW2ldLCBwX2FkZHIsIHNpemVvZihtX3BlbmRpbmdfZXh0ZW5kZWRbaV0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQobV9wZW5kaW5nX2V4dGVuZGVkW2ldLCAwLCBzaXplb2YobV9wZW5kaW5nX2V4dGVuZGVkW2ldKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgTlVNX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgwID09IG1lbWNtcChtX3BlbmRpbmdfc2hvcnRbaV0sIHBfYWRkciwgc2l6ZW9mKG1fcGVuZGluZ19zaG9ydFtpXSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbXNldChtX3BlbmRpbmdfc2hvcnRbaV0sIDB4ZmYsIHNpemVvZihtX3BlbmRpbmdfc2hvcnRbaV0pKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9mb3JfYWRkcl9yZXNldChib29sIGV4dGVuZGVkKQoreworICAgIGlmIChleHRlbmRlZCkKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BlbmRpbmdfZXh0ZW5kZWQsIDAsIHNpemVvZihtX3BlbmRpbmdfZXh0ZW5kZWQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtc2V0KG1fcGVuZGluZ19zaG9ydCwgMHhmZiwgc2l6ZW9mKG1fcGVuZGluZ19zaG9ydCkpOworICAgIH0KK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9zaG91bGRfYmVfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX3BzZHUpCit7CisgICAgY29uc3QgdWludDhfdCAqIHBfc3JjX2FkZHI7CisgICAgdWludDMyX3QgICAgICAgIGk7CisKKyAgICAvLyBJZiBhdXRvbWF0aWMgc2V0dGluZyBvZiBwZW5kaW5nIGJpdCBpbiBBQ0sgZnJhbWVzIGlzIGRpc2FibGVkIHRoZSBwZW5kaW5nIGJpdCBpcyBhbHdheXMgc2V0LgorICAgIGlmICghbV9zZXR0aW5nX3BlbmRpbmdfYml0X2VuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBfcHNkdVtERVNUX0FERFJfVFlQRV9PRkZTRVRdICYgREVTVF9BRERSX1RZUEVfTUFTSykKKyAgICB7CisgICAgICAgIGNhc2UgREVTVF9BRERSX1RZUEVfU0hPUlQ6CisgICAgICAgICAgICBwX3NyY19hZGRyID0gJnBfcHNkdVtTUkNfQUREUl9PRkZTRVRfU0hPUlRfRFNUXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREVTVF9BRERSX1RZUEVfRVhURU5ERUQ6CisgICAgICAgICAgICBwX3NyY19hZGRyID0gJnBfcHNkdVtTUkNfQUREUl9PRkZTRVRfRVhURU5ERURfRFNUXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoMCA9PSAocF9wc2R1W1BBTl9JRF9DT01QUl9PRkZTRVRdICYgUEFOX0lEX0NPTVBSX01BU0spKQorICAgIHsKKyAgICAgICAgcF9zcmNfYWRkciArPSAyOworICAgIH0KKworICAgIHN3aXRjaCAocF9wc2R1W1NSQ19BRERSX1RZUEVfT0ZGU0VUXSAmIFNSQ19BRERSX1RZUEVfTUFTSykKKyAgICB7CisgICAgICAgIGNhc2UgU1JDX0FERFJfVFlQRV9TSE9SVDoKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUEVORElOR19TSE9SVF9BRERSRVNTRVM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobnJmX3JhZGlvX3N0YXRlX2dldCgpICE9IE5SRl9SQURJT19TVEFURV9UWF9SVSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgwID09IG1lbWNtcChwX3NyY19hZGRyLCBtX3BlbmRpbmdfc2hvcnRbaV0sIHNpemVvZihtX3BlbmRpbmdfc2hvcnRbaV0pKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkNfQUREUl9UWVBFX0VYVEVOREVEOgorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgIT0gTlJGX1JBRElPX1NUQVRFX1RYX1JVKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKDAgPT0gbWVtY21wKHBfc3JjX2FkZHIsIG1fcGVuZGluZ19leHRlbmRlZFtpXSwgc2l6ZW9mKG1fcGVuZGluZ19leHRlbmRlZFtpXSkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZTUzMWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXQuaApAQCAtMCwwICsxLDExMSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmaWxlIGltcGxlbWVudHMgcHJvY2VkdXJlcyB0byBzZXQgcGVuZGluZyBiaXQgaW4gblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJWX1JBRElPODAyMTU0X0FDS19QRU5ESU5HX0JJVF9IXworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X0FDS19QRU5ESU5HX0JJVF9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgcHJvY2VkdXJlIG9mIHNldHRpbmcgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lLgorICoKKyAqIEBwYXJhbVtpbl0gIGVuYWJsZWQgIFRydWUgaWYgcHJvY2VkdXJlIHNob3VsZCBiZSBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfc2V0KGJvb2wgZW5hYmxlZCk7CisKKy8qKgorICogQGJyaWVmIEFkZCBhZGRyZXNzIHRvIEFDSyBwZW5kaW5nIGJpdCBsaXN0LgorICoKKyAqIEFDSyBmcmFtZXMgc2VudCBpbiByZXNwb25zZSB0byBmcmFtZXMgd2l0aCBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBhbnkgYWRkcmVzcyBmcm9tIEFDSyBwZW5kaW5nCisgKiBiaXQgbGlzdCB3aWxsIGhhdmUgcGVuZGluZyBiaXQgc2V0LiBJZiBzb3VyY2UgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFkZHJlc3NlcyBpbiB0aGUKKyAqIGxpc3QgdGhlIEFDSyBmcmFtZSB3aWxsIGhhdmUgcGVuZGluZyBiaXQgY2xlYXJlZC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2FkZHIgICAgUG9pbnRlciB0byBhZGRyZXNzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0LgorICogQHBhcmFtW2luXSAgZXh0ZW5kZWQgIEluZGljYXRpb24gaWYgQHAgcF9hZGRyIGlzIGV4dGVuZGVkIG9yIHNob3J0IGFkZHJlc3MuCisgKgorICogQHJldHZhbCB0cnVlICAgQWRkcmVzcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGxpc3QuCisgKiBAcmV0dmFsIGZhbHNlICBBZGRyZXNzIHdhcyBub3QgYWRkZWQgdG8gdGhlIGxpc3QgKGxpc3QgaXMgZnVsbCkuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfZm9yX2FkZHJfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX2FkZHIsIGJvb2wgZXh0ZW5kZWQpOworCisvKioKKyAqIEBicmllZiBSZW1vdmUgYWRkcmVzcyBmcm9tIEFDSyBwZW5kaW5nIGJpdCBsaXN0LgorICoKKyAqIEFDSyBmcmFtZXMgc2VudCBpbiByZXNwb25zZSB0byBmcmFtZXMgd2l0aCBzb3VyY2UgYWRkcmVzcyBtYXRjaGluZyBhbnkgYWRkcmVzcyBmcm9tIEFDSyBwZW5kaW5nCisgKiBiaXQgbGlzdCB3aWxsIGhhdmUgcGVuZGluZyBiaXQgc2V0LiBJZiBzb3VyY2UgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFkZHJlc3NlcyBpbiB0aGUKKyAqIGxpc3QgdGhlIEFDSyBmcmFtZSB3aWxsIGhhdmUgcGVuZGluZyBiaXQgY2xlYXJlZC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2FkZHIgICAgUG9pbnRlciB0byBhZGRyZXNzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4KKyAqIEBwYXJhbVtpbl0gIGV4dGVuZGVkICBJbmRpY2F0aW9uIGlmIEBwIHBfYWRkciBpcyBleHRlbmRlZCBvciBzaG9ydCBhZGRyZXNzLgorICoKKyAqIEByZXR2YWwgdHJ1ZSAgIEFkZHJlc3Mgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4KKyAqIEByZXR2YWwgZmFsc2UgIEFkZHJlc3Mgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhlIGxpc3QgKGFkZHJlc3MgaXMgbWlzc2luZyBpbiB0aGUgbGlzdCkuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9hY2tfcGVuZGluZ19iaXRfZm9yX2FkZHJfY2xlYXIoY29uc3QgdWludDhfdCAqIHBfYWRkciwgYm9vbCBleHRlbmRlZCk7CisKKy8qKgorICogQGJyaWVmIFJlbW92ZSBhbGwgYWRkcmVzc2VzIG9mIGdpdmVuIGxlbmd0aCBmcm9tIEFDSyBwZW5kaW5nIGJpdCBsaXN0LgorICoKKyAqIEBwYXJhbVtpbl0gIGV4dGVuZGVkICBJbmRpY2F0aW9uIGlmIGFsbCBleHRlbmRlZCBvciBhbGwgc2hvcnQgYWRkcmVzc2VzIHNob3VsZCBiZSByZW1vdmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9mb3JfYWRkcl9yZXNldChib29sIGV4dGVuZGVkKTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgaWYgcGVuZGluZyBiaXQgc2hvdWxkIGJlIHNldCBpbiBBQ0sgc2VudCBpbiByZXNwb25zZSB0byBnaXZlbiBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX3BzZHUgIFBTRFUgb2YgZnJhbWUgdG8gd2hpY2ggQUNLIGZyYW1lIGlzIGJlaW5nIHByZXBhcmVkLgorICoKKyAqIEByZXR2YWwgdHJ1ZSAgIFBlbmRpbmcgYml0IHNob3VsZCBiZSBzZXQuCisgKiBAcmV0dmFsIGZhbHNlICBQZW5kaW5nIGJpdCBzaG91bGQgYmUgY2xlYXJlZC4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9zaG91bGRfYmVfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX3BzZHUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTlJGX0RSVl9SQURJTzgwMjE1NF9BQ0tfUEVORElOR19CSVRfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY29uZmlnLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGMwYWNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY29uZmlnLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9DT05GSUdfSF9fCisjZGVmaW5lIE5SRl9EUklWRVJfUkFESU84MDIxNTRfQ09ORklHX0hfXworCisjaW5jbHVkZSA8bnJmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAZGVmZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NF9jb25maWcgODAyLjE1LjQgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyAqIEB7CisgKiBAaW5ncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0CisgKiBAYnJpZWYgQ29uZmlndXJhdGlvbiBvZiA4MDIuMTUuNCByYWRpbyBkcml2ZXIgZm9yIG5SRiBTb0MuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJhZGlvIERyaXZlciBDb25maWd1cmF0aW9uLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9NT0RFCisgKgorICogUkFESU8gQ0NBIE1vZGUuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9NT0RFICBOUkZfUkFESU9fQ0NBX01PREVfRUQKKworLyoqCisgKiBAZGVmIFJBRElPX0NDQV9FRF9USFJFU0hPTEQKKyAqCisgKiBSQURJTyBFbmVyZ3kgRGV0ZWN0aW9uIFRocmVzaG9sZC4KKyAqCisgKi8KKyNkZWZpbmUgUkFESU9fQ0NBX0VEX1RIUkVTSE9MRCAgMHgyRAorCisvKioKKyAqIEBkZWYgUkFESU9fQ0NBX0NPUlJfVEhSRVNIT0xECisgKgorICogUkFESU8gQ29ycmVsYXRvciBUaHJlc2hvbGQuCisgKgorICovCisjZGVmaW5lIFJBRElPX0NDQV9DT1JSX1RIUkVTSE9MRCAgMHgyRAorCisvKioKKyAqIEBkZWYgUkFESU9fQ0NBX0NPUlJfTElNSVQKKyAqCisgKiBSQURJTyBDb3JyZWxhdG9yIGxpbWl0LgorICoKKyAqLworI2RlZmluZSBSQURJT19DQ0FfQ09SUl9MSU1JVCAgMHgwMgorCisvKioKKyAqIEBkZWYgUkFESU9fSVJRX1BSSU9SSVRZCisgKgorICogUkFESU8gSW50ZXJydXB0IHByaW9yaXR5LgorICoKKyAqLworI2RlZmluZSBSQURJT19JUlFfUFJJT1JJVFkgIDAKKworLyoqCisgKiBAZGVmIFJBRElPX1BFTkRJTkdfU0hPUlRfQUREUkVTU0VTCisgKgorICogUkFESU8gTnVtYmVyIG9mIHNsb3RzIGNvbnRhaW5pbmcgc2hvcnQgYWRkcmVzc2VzIG9mIG5vZGVzIGZvciB3aGljaCBwZW5kaW5nIGRhdGEgaXMgc3RvcmVkLgorICoKKyAqLworI2RlZmluZSBSQURJT19QRU5ESU5HX1NIT1JUX0FERFJFU1NFUyAgMTAKKworLyoqCisgKiBAZGVmIFJBRElPX1BFTkRJTkdfRVhURU5ERURfQUREUkVTU0VTCisgKgorICogUkFESU8gTnVtYmVyIG9mIHNsb3RzIGNvbnRhaW5pbmcgZXh0ZW5kZWQgYWRkcmVzc2VzIG9mIG5vZGVzIGZvciB3aGljaCBwZW5kaW5nIGRhdGEgaXMgc3RvcmVkLgorICoKKyAqLworI2RlZmluZSBSQURJT19QRU5ESU5HX0VYVEVOREVEX0FERFJFU1NFUyAgMTAKKworLyoqCisgKiBAZGVmIFJBRElPX1JYX0JVRkZFUlMKKyAqCisgKiBSQURJTyBOdW1iZXIgb2YgYnVmZmVycyBpbiByZWNlaXZlIHF1ZXVlLgorICoKKyAqLworI2RlZmluZSBSQURJT19SWF9CVUZGRVJTICAxNgorCisvKioKKyAqIEBkZWYgUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOCisgKgorICogUkFESU8gY2FuIHN0YXJ0IHRyYW5zbWlzc2lvbiB1c2luZyBzaG9ydCBDQ0FJRExFLT5UWEVOIG9yIHVzaW5nIHNvZnR3YXJlIGludGVycnVwdCBoYW5kbGVyLgorICoKKyAqLworI2RlZmluZSBSQURJT19TSE9SVF9DQ0FJRExFX1RYRU4gIDEKKworLy8gVE9ETzogI2lmZGVmIHRvIGNoZWNrIGRpcmVjdCAvIFNXSSBub3RpZmljYXRpb25zCisvKioKKyAqIEBkZWYgUkFESU9fTk9USUZJQ0FUSU9OX1NXSV9QUklPUklUWQorICoKKyAqIFByaW9yaXR5IG9mIHNvZnR3YXJlIGludGVycnVwdCB1c2VkIHRvIGNhbGwgbm90aWZpY2F0aW9uIGZyb20gODAyLjE1LjQgZHJpdmVyLgorICoKKyAqLworI2RlZmluZSBSQURJT19OT1RJRklDQVRJT05fU1dJX1BSSU9SSVRZIDYKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBOUkZfRFJJVkVSX1JBRElPODAyMTU0X0NPTkZJR19IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NvbnN0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMGNmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvbnN0YW50IHZhbHVlcyBkZWZpbml0aW9ucyB1c2VkIGJ5IG5SRiA4MDIuMTUuNCBkcml2ZXIuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9DT05TVF9IXworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X0NPTlNUX0hfCisKKyNkZWZpbmUgQUNLX0hFQURFUl9XSVRIX1BFTkRJTkcgICAgICAweDEyICAvLy88IEZpcnN0IGJ5dGUgb2YgQUNLIGZyYW1lIGNvbnRhaW5pbmcgcGVuZGluZyBiaXQKKyNkZWZpbmUgQUNLX0hFQURFUl9XSVRIT1VUX1BFTkRJTkcgICAweDAyICAvLy88IEZpcnN0IGJ5dGUgb2YgQUNLIGZyYW1lIHdpdGhvdXQgcGVuZGluZyBiaXQKKworI2RlZmluZSBBQ0tfTEVOR1RIICAgICAgICAgICAgICAgICAgIDUgICAgICAgICAvLy88IExlbmd0aCBvZiBBQ0sgZnJhbWUKKyNkZWZpbmUgQUNLX1JFUVVFU1RfQklUICAgICAgICAgICAgICAoMSA8PCA1KSAgLy8vPCBBY2sgcmVxdWVzdCBiaXQKKyNkZWZpbmUgQUNLX1JFUVVFU1RfT0ZGU0VUICAgICAgICAgICAxICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgQWNrIHJlcXVlc3QgYml0ICgrMSBmb3IgZnJhbWUgbGVuZ3RoIGJ5dGUpCisjZGVmaW5lIERFU1RfQUREUl9UWVBFX0VYVEVOREVEICAgICAgMHgwYyAgICAgIC8vLzwgQml0cyBjb250YWluaW5nIGV4dGVuZGVkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdHlwZQorI2RlZmluZSBERVNUX0FERFJfVFlQRV9NQVNLICAgICAgICAgIDB4MGMgICAgICAvLy88IE1hc2sgb2YgYml0cyBjb250YWluaW5nIGRlc3RpbmF0aW9uIGFkZHJlc3MgdHlwZQorI2RlZmluZSBERVNUX0FERFJfVFlQRV9PRkZTRVQgICAgICAgIDIgICAgICAgICAvLy88IEJ5dGUgY29udGFpbmluZyBkZXN0aW5hdGlvbiBhZGRyZXNzIHR5cGUgKCsxIGZvciBmcmFtZSBsZW5ndGggYnl0ZSkKKyNkZWZpbmUgREVTVF9BRERSX1RZUEVfU0hPUlQgICAgICAgICAweDA4ICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgc2hvcnQgZGVzdGluYXRpb24gYWRkcmVzcyB0eXBlCisjZGVmaW5lIERFU1RfQUREUl9PRkZTRVQgICAgICAgICAgICAgNSAgICAgICAgIC8vLzwgT2Zmc2V0IG9mIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gRGF0YSBmcmFtZQorI2RlZmluZSBEU05fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAvLy88IEJ5dGUgY29udGFpbmluZyBEU04gdmFsdWUgKCsxIGZvciBmcmFtZSBsZW5ndGggYnl0ZSkKKyNkZWZpbmUgRlJBTUVfUEVORElOR19CSVQgICAgICAgICAgICAoMSA8PCA0KSAgLy8vPCBQZW5kaW5nIGJpdAorI2RlZmluZSBGUkFNRV9QRU5ESU5HX09GRlNFVCAgICAgICAgIDEgICAgICAgICAvLy88IEJ5dGUgY29udGFpbmluZyBwZW5kaW5nIGJpdCAoKzEgZm9yIGZyYW1lIGxlbmd0aCBieXRlKQorI2RlZmluZSBGUkFNRV9UWVBFX0FDSyAgICAgICAgICAgICAgIDB4MDIgICAgICAvLy88IEJpdHMgY29udGFpbmluZyBBQ0sgZnJhbWUgdHlwZQorI2RlZmluZSBGUkFNRV9UWVBFX0JFQUNPTiAgICAgICAgICAgIDB4MDAgICAgICAvLy88IEJpdHMgY29udGFpbmluZyBCZWFjb24gZnJhbWUgdHlwZQorI2RlZmluZSBGUkFNRV9UWVBFX0NPTU1BTkQgICAgICAgICAgIDB4MDMgICAgICAvLy88IEJpdHMgY29udGFpbmluZyBDb21tYW5kIGZyYW1lIHR5cGUKKyNkZWZpbmUgRlJBTUVfVFlQRV9EQVRBICAgICAgICAgICAgICAweDAxICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgRGF0YSBmcmFtZSB0eXBlCisjZGVmaW5lIEZSQU1FX1RZUEVfTUFTSyAgICAgICAgICAgICAgMHgwNyAgICAgIC8vLzwgTWFzayBvZiBiaXRzIGNvbnRhaW5pbmcgZnJhbWUgdHlwZQorI2RlZmluZSBGUkFNRV9UWVBFX09GRlNFVCAgICAgICAgICAgIDEgICAgICAgICAvLy88IEJ5dGUgY29udGFpbmluZyBmcmFtZSB0eXBlIGJpdHMgKCsxIGZvciBmcmFtZSBsZW5ndGggYnl0ZSkKKyNkZWZpbmUgUEFOX0lEX0NPTVBSX09GRlNFVCAgICAgICAgICAxICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgUGFuIElkIGNvbXByZXNzaW9uIGJpdCAoKzEgZm9yIGZyYW1lIGxlbmd0aCBieXRlKQorI2RlZmluZSBQQU5fSURfQ09NUFJfTUFTSyAgICAgICAgICAgIDB4NDAgICAgICAvLy88IFBhbiBJZCBjb21wcmVzc2lvbiBiaXQKKyNkZWZpbmUgUEFOX0lEX09GRlNFVCAgICAgICAgICAgICAgICAzICAgICAgICAgLy8vPCBPZmZzZXQgb2YgUGFuIElkIGluIERhdGEgZnJhbWUKKyNkZWZpbmUgU1JDX0FERFJfVFlQRV9FWFRFTkRFRCAgICAgICAweGMwICAgICAgLy8vPCBCaXRzIGNvbnRhaW5pbmcgZXh0ZW5kZWQgc291cmNlIGFkZHJlc3MgdHlwZQorI2RlZmluZSBTUkNfQUREUl9UWVBFX01BU0sgICAgICAgICAgIDB4YzAgICAgICAvLy88IE1hc2sgb2YgYml0cyBjb250YWluaW5nIHNvdXJjZSBhZGRyZXNzIHR5cGUKKyNkZWZpbmUgU1JDX0FERFJfVFlQRV9PRkZTRVQgICAgICAgICAyICAgICAgICAgLy8vPCBCeXRlIGNvbnRhaW5pbmcgc291cmNlIGFkZHJlc3MgdHlwZSAoKzEgZm9yIGZyYW1lIGxlbmd0aCBieXRlKQorI2RlZmluZSBTUkNfQUREUl9UWVBFX1NIT1JUICAgICAgICAgIDB4ODAgICAgICAvLy88IEJpdHMgY29udGFpbmluZyBzaG9ydCBzb3VyY2UgYWRkcmVzcyB0eXBlCisjZGVmaW5lIFNSQ19BRERSX09GRlNFVF9TSE9SVF9EU1QgICAgOCAgICAgICAgIC8vLzwgT2Zmc2V0IG9mIHNvdXJjZSBhZGRyZXNzIGluIERhdGEgZnJhbWUgaWYgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBzaG9ydAorI2RlZmluZSBTUkNfQUREUl9PRkZTRVRfRVhURU5ERURfRFNUIDE0ICAgICAgICAvLy88IE9mZnNldCBvZiBzb3VyY2UgYWRkcmVzcyBpbiBEYXRhIGZyYW1lIGlmIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgZXh0ZW5kZWQKKworI2RlZmluZSBQQU5fSURfU0laRSAgICAgICAgICAgMiAgICAvLy88IFNpemUgb2YgUGFuIElkCisjZGVmaW5lIFNIT1JUX0FERFJFU1NfU0laRSAgICAyICAgIC8vLzwgU2l6ZSBvZiBTaG9ydCBNYWMgQWRkcmVzcworI2RlZmluZSBFWFRFTkRFRF9BRERSRVNTX1NJWkUgOCAgICAvLy88IFNpemUgb2YgRXh0ZW5kZWQgTWFjIEFkZHJlc3MKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICAgICAgIDEyNyAgLy8vPCBNYXhpbWFsIHNpemUgb2YgcmFkaW8gcGFja2V0CisKKworI2VuZGlmIC8vIE5SRF9EUlZfUkFESU84MDIxNTRfQ09OU1RfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTAxYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5jCkBAIC0wLDAgKzEsMTE5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNyaXRpY2FsIHNlY3Rpb25zIHVzZWQgd2l0aCByZXF1ZXN0cyBieSA4MDIuMTUuNCBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24uaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Zy5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmgiCisjaW5jbHVkZSAiaGFsL25yZl9yYWRpby5oIgorI2luY2x1ZGUgInJhYWwvbnJmX3JhYWxfYXBpLmgiCisKKyNpbmNsdWRlIDxjbXNpcy9jb3JlX2NtRnVuYy5oPgorCisjaWYgUkFBTF9TT0ZUREVWSUNFCisvLyBXaGVuIFNvZnRkZXZpY2UgaXMgc2VsZWN0ZWQgYXMgYXJiaXRlciBjcml0aWNhbCBzZWN0aW9ucyBzaG91bGQgbm90IGJlIG5lc3RlZC4KKyNkZWZpbmUgUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUyAxCisjZW5kaWYgLy8gUkFBTF9TT0ZUREVWSUNFCisKKyNpZiBQUkVWRU5UX05FU1RFRF9DUklUX1NFQ1RJT05TCisvLy8gRmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkcml2ZXIgZW50ZXJlZCBjcml0aWNhbCBzZWN0aW9uLgorc3RhdGljIHZvbGF0aWxlIGJvb2wgbV9pbl9jcml0aWNhbF9zZWN0aW9uOworI2VuZGlmIC8vIFBSRVZFTlRfTkVTVEVEX0NSSVRfU0VDVElPTlMKKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fQ1JJVF9TRUNUX0VOVEVSKTsKKyAgICByYWRpb19zdGF0ZV90IHN0YXRlOworCisjaWYgUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworICAgIF9fZGlzYWJsZV9pcnEoKTsKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisKKyAgICBhc3NlcnQoIW1faW5fY3JpdGljYWxfc2VjdGlvbik7CisgICAgbV9pbl9jcml0aWNhbF9zZWN0aW9uID0gdHJ1ZTsKKyNlbmRpZiAvLyBQUkVWRU5UX05FU1RFRF9DUklUX1NFQ1RJT05TCisKKyAgICBucmZfcmFhbF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisKKyAgICBzdGF0ZSA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3N0YXRlX2dldCgpOworCisgICAgaWYgKHN0YXRlICE9IFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1QgJiYKKyAgICAgICAgc3RhdGUgIT0gUkFESU9fU1RBVEVfU0xFRVApCisgICAgeworICAgICAgICBOVklDX0Rpc2FibGVJUlEoUkFESU9fSVJRbik7CisjaWYgIVJBQUxfU09GVERFVklDRQorICAgICAgICBfX0RTQigpOworICAgICAgICBfX0lTQigpOworI2VuZGlmIC8vICFSQUFMX1NPRlRERVZJQ0UKKyAgICB9CisKKyNpZiBQUkVWRU5UX05FU1RFRF9DUklUX1NFQ1RJT05TCisgICAgX19lbmFibGVfaXJxKCk7CisjZW5kaWYgLy8gUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fQ1JJVF9TRUNUX0VOVEVSKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9DUklUX1NFQ1RfRVhJVCk7CisKKyNpZiBQUkVWRU5UX05FU1RFRF9DUklUX1NFQ1RJT05TCisgICAgYXNzZXJ0KG1faW5fY3JpdGljYWxfc2VjdGlvbik7CisgICAgbV9pbl9jcml0aWNhbF9zZWN0aW9uID0gZmFsc2U7CisjZW5kaWYgLy8gUFJFVkVOVF9ORVNURURfQ1JJVF9TRUNUSU9OUworCisgICAgcmFkaW9fc3RhdGVfdCBzdGF0ZTsKKworICAgIC8vIFJBQUwgY3JpdGljYWwgc2VjdGlvbiBzaGFsbCBiZSBleGl0ZWQgYmVmb3JlIFJBRElPIElSUSBoYW5kbGVyIGlzIGVuYWJsZWQuIEluIG90aGVyIGNhc2UKKyAgICAvLyBSQURJTyBJUlEgaGFuZGxlciBtYXkgYmUgY2FsbGVkIG91dCBvZiB0aW1lc2xvdC4KKyAgICBucmZfcmFhbF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKworICAgIHN0YXRlID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fc3RhdGVfZ2V0KCk7CisKKyAgICBpZiAoc3RhdGUgIT0gUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVCAmJgorICAgICAgICBzdGF0ZSAhPSBSQURJT19TVEFURV9TTEVFUCkKKyAgICB7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFJBRElPX0lSUW4pOworICAgIH0KKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0NSSVRfU0VDVF9FWElUKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGYxZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uLmgKQEAgLTAsMCArMSw2NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJJVkVSX1JBRElPODAyMTU0X0NSSVRJQ0FMX1NFQ1RJT05fSF9fCisjZGVmaW5lIE5SRl9EUklWRVJfUkFESU84MDIxNTRfQ1JJVElDQUxfU0VDVElPTl9IX18KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBkZWZncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb24gODAyLjE1LjQgZHJpdmVyIGNyaXRpY2FsIHNlY3Rpb24KKyAqIEB7CisgKiBAaW5ncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0CisgKiBAYnJpZWYgQ3JpdGljYWwgc2VjdGlvbiB1c2VkIHdpdGggcmVxdWVzdHMgdG8gdGhlIDgwMi4xNS40IGRyaXZlci4KKyAqLworCisvKioKKyAqIEBicmllZiBFbnRlciBjcml0aWNhbCBzZWN0aW9uIGluIHRoZSA4MDIuMTUuNCBkcml2ZXIuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKHZvaWQpOworCisvKioKKyAqIEBicmllZiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gaW4gdGhlIDgwMi4xNS40IGRyaXZlci4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCh2b2lkKTsKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBOUkZfRFJJVkVSX1JBRElPODAyMTU0X0NSSVRJQ0FMX1NFQ1RJT05fSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Zy5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgyMTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuYwpAQCAtMCwwICsxLDE0OCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBkZWJ1ZyBoZWxwZXJzIGZvciB0aGUgblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiaGFsL25yZl9ncGlvLmgiCisjaW5jbHVkZSAiaGFsL25yZl9ncGlvdGUuaCIKKyNpbmNsdWRlICJoYWwvbnJmX3BwaS5oIgorI2luY2x1ZGUgIm5yZi5oIgorCisjaWYgRU5BQkxFX0RFQlVHX0xPRworLy8vIEJ1ZmZlciB1c2VkIHRvIHN0b3JlIGRlYnVnIGxvZyBtZXNzYWdlcy4KK3ZvbGF0aWxlIHVpbnQzMl90IG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWdfbG9nX2J1ZmZlcltOUkZfRFJWX1JBRElPODAyMTU0X0RFQlVHX0xPR19CVUZGRVJfTEVOXTsKKy8vLyBJbmRleCBvZiB0aGUgbG9nIGJ1ZmZlciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0aGF0IHNob3VsZCBiZSBmaWxsZWQgd2l0aCBuZXh0IGxvZyBtZXNzYWdlLgordm9sYXRpbGUgdWludDMyX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Z19sb2dfcHRyID0gMDsKKyNlbmRpZgorCisjaWYgRU5BQkxFX0RFQlVHX0dQSU8KKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgUFBJIHRvIHRvZ2dsZSBHUElPIHBpbnMgb24gcmFkaW8gZXZlbnRzLgorICovCitzdGF0aWMgdm9pZCByYWRpb19ldmVudF9ncGlvX3RvZ2dsZV9pbml0KHZvaWQpCit7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1JBRElPX0VWVF9FTkQpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SQURJT19FVlRfRElTQUJMRUQpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SQURJT19FVlRfUkVBRFkpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SQURJT19FVlRfRlJBTUVTVEFSVCk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1JBRElPX0VWVF9FREVORCk7CisKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlndXJlKDAsIFBJTl9EQkdfUkFESU9fRVZUX0VORCwgTlJGX0dQSU9URV9QT0xBUklUWV9UT0dHTEUsIE5SRl9HUElPVEVfSU5JVElBTF9WQUxVRV9ISUdIKTsKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlndXJlKDEsIFBJTl9EQkdfUkFESU9fRVZUX0RJU0FCTEVELCBOUkZfR1BJT1RFX1BPTEFSSVRZX1RPR0dMRSwgTlJGX0dQSU9URV9JTklUSUFMX1ZBTFVFX0hJR0gpOworICAgIG5yZl9ncGlvdGVfdGFza19jb25maWd1cmUoMiwgUElOX0RCR19SQURJT19FVlRfUkVBRFksIE5SRl9HUElPVEVfUE9MQVJJVFlfVE9HR0xFLCBOUkZfR1BJT1RFX0lOSVRJQUxfVkFMVUVfSElHSCk7CisgICAgbnJmX2dwaW90ZV90YXNrX2NvbmZpZ3VyZSgzLCBQSU5fREJHX1JBRElPX0VWVF9GUkFNRVNUQVJULCBOUkZfR1BJT1RFX1BPTEFSSVRZX1RPR0dMRSwgTlJGX0dQSU9URV9JTklUSUFMX1ZBTFVFX0hJR0gpOworICAgIG5yZl9ncGlvdGVfdGFza19jb25maWd1cmUoNCwgUElOX0RCR19SQURJT19FVlRfRURFTkQsIE5SRl9HUElPVEVfUE9MQVJJVFlfVE9HR0xFLCBOUkZfR1BJT1RFX0lOSVRJQUxfVkFMVUVfSElHSCk7CisKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKDApOworICAgIG5yZl9ncGlvdGVfdGFza19lbmFibGUoMSk7CisgICAgbnJmX2dwaW90ZV90YXNrX2VuYWJsZSgyKTsKKyAgICBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKDMpOworICAgIG5yZl9ncGlvdGVfdGFza19lbmFibGUoNCk7CisKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoTlJGX1BQSV9DSEFOTkVMMCwgKHVpbnQzMl90KSAmTlJGX1JBRElPLT5FVkVOVFNfRU5ELCAgICAgICAgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KE5SRl9HUElPVEVfVEFTS1NfT1VUXzApKTsKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoTlJGX1BQSV9DSEFOTkVMMSwgKHVpbnQzMl90KSAmTlJGX1JBRElPLT5FVkVOVFNfRElTQUJMRUQsICAgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KE5SRl9HUElPVEVfVEFTS1NfT1VUXzEpKTsKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoTlJGX1BQSV9DSEFOTkVMMiwgKHVpbnQzMl90KSAmTlJGX1JBRElPLT5FVkVOVFNfUkVBRFksICAgICAgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KE5SRl9HUElPVEVfVEFTS1NfT1VUXzIpKTsKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoTlJGX1BQSV9DSEFOTkVMMywgKHVpbnQzMl90KSAmTlJGX1JBRElPLT5FVkVOVFNfRlJBTUVTVEFSVCwgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KE5SRl9HUElPVEVfVEFTS1NfT1VUXzMpKTsKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoTlJGX1BQSV9DSEFOTkVMNCwgKHVpbnQzMl90KSAmTlJGX1JBRElPLT5FVkVOVFNfRURFTkQsICAgICAgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KE5SRl9HUElPVEVfVEFTS1NfT1VUXzQpKTsKKworICAgIG5yZl9wcGlfY2hhbm5lbF9lbmFibGUoTlJGX1BQSV9DSEFOTkVMMCk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuYWJsZShOUkZfUFBJX0NIQU5ORUwxKTsKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5hYmxlKE5SRl9QUElfQ0hBTk5FTDIpOworICAgIG5yZl9wcGlfY2hhbm5lbF9lbmFibGUoTlJGX1BQSV9DSEFOTkVMMyk7CisgICAgbnJmX3BwaV9jaGFubmVsX2VuYWJsZShOUkZfUFBJX0NIQU5ORUw0KTsKK30KKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBHUElPIHRvIHNldCBpdCBzaW11bGF0ZWQgYXJiaXRlciBldmVudHMuCisgKi8KK3N0YXRpYyB2b2lkIHJhYWxfc2ltdWxhdG9yX2dwaW9faW5pdCh2b2lkKQoreworI2lmIFJBQUxfU0lNVUxBVE9SCisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX0FDVElWRSk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1JBQUxfQ1JJVElDQUxfU0VDVElPTik7CisjZW5kaWYKK30KKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBQUEkgdG8gdG9nZ2xlIEdQSU8gcGlucyBvbiBTb2Z0ZGV2aWNlIGV2ZW50cy4gSW5pdGlhbGl6ZSBHUElPIHRvIHNldCBpdAorICogICAgICAgIGFjY29yZGluZyB0byBTb2Z0ZGV2aWNlIGFyYml0ZXIgY2xpZW50IGV2ZW50cy4KKyAqLworc3RhdGljIHZvaWQgcmFhbF9zb2Z0ZGV2aWNlX2V2ZW50X2dwaW9fdG9nZ2xlX2luaXQodm9pZCkKK3sKKyNpZiBSQUFMX1NPRlRERVZJQ0UKKyAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KFBJTl9EQkdfVElNRVNMT1RfQUNUSVZFKTsKKyAgICBucmZfZ3Bpb19jZmdfb3V0cHV0KFBJTl9EQkdfVElNRVNMT1RfRVhURU5EX1JFUSk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX1NFU1NJT05fSURMRSk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX1JBRElPX0lSUSk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX0ZBSUxFRCk7CisgICAgbnJmX2dwaW9fY2ZnX291dHB1dChQSU5fREJHX1RJTUVTTE9UX0JMT0NLRUQpOworICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQoUElOX0RCR19SVEMwX0VWVF9SRU0pOworCisgICAgbnJmX2dwaW90ZV90YXNrX2NvbmZpZ3VyZSg1LCBQSU5fREJHX1JUQzBfRVZUX1JFTSwgTlJGX0dQSU9URV9QT0xBUklUWV9UT0dHTEUsIE5SRl9HUElPVEVfSU5JVElBTF9WQUxVRV9ISUdIKTsKKworICAgIG5yZl9ncGlvdGVfdGFza19lbmFibGUoNSk7CisKKyAgICBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAoTlJGX1BQSV9DSEFOTkVMNSwgKHVpbnQzMl90KSAmTlJGX1JUQzAtPkVWRU5UU19DT01QQVJFWzFdLCBucmZfZ3Bpb3RlX3Rhc2tfYWRkcl9nZXQoTlJGX0dQSU9URV9UQVNLU19PVVRfNSkpOworCisgICAgbnJmX3BwaV9jaGFubmVsX2VuYWJsZShOUkZfUFBJX0NIQU5ORUw1KTsKKyNlbmRpZiAvLyBSQUFMX1NPRlRERVZJQ0UKK30KKyNlbmRpZiAvLyBFTkFCTEVfREVCVUdfR1BJTworCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWdfaW5pdCh2b2lkKQoreworI2lmIEVOQUJMRV9ERUJVR19HUElPCisgICAgcmFkaW9fZXZlbnRfZ3Bpb190b2dnbGVfaW5pdCgpOworICAgIHJhYWxfc2ltdWxhdG9yX2dwaW9faW5pdCgpOworICAgIHJhYWxfc29mdGRldmljZV9ldmVudF9ncGlvX3RvZ2dsZV9pbml0KCk7CisjZW5kaWYgLy8gRU5BQkxFX0RFQlVHX0dQSU8KK30KKworI2lmIEVOQUJMRV9ERUJVR19BU1NFUlQKK3ZvaWQgX19hc3NlcnRfZnVuYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqY29uZCkKK3sKKyAgICAodm9pZCkgZmlsZTsKKyAgICAodm9pZCkgbGluZTsKKyAgICAodm9pZCkgZnVuYzsKKyAgICAodm9pZCkgY29uZDsKKworICAgIF9fZGlzYWJsZV9pcnEoKTsKKworICAgIHdoaWxlICgxKTsKK30KKyNlbmRpZiAvLyBFTkFCTEVfREVCVUdfQVNTRVJUCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Zy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY5YjYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaApAQCAtMCwwICsxLDE1MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgY29udGFpbnMgZGVidWcgaGVscGVycyBmb3IgODAyLjE1LjQgcmFkaW8gZHJpdmVyIGZvciBuUkYgU29DIGRldmljZXMuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSVl9SQURJTzgwMjE1NF9ERUJVR19IXworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X0RFQlVHX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIE5SRl9EUlZfUkFESU84MDIxNTRfREVCVUdfTE9HX0JVRkZFUl9MRU4gMTAyNAorCisjZGVmaW5lIEVWRU5UX1RSQUNFX0VOVEVSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMVVMCisjZGVmaW5lIEVWRU5UX1RSQUNFX0VYSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMlVMCisjZGVmaW5lIEVWRU5UX01VVEVYX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM1VMCisjZGVmaW5lIEVWRU5UX01VVEVYX1VOTE9DSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNFVMCisjZGVmaW5lIEVWRU5UX1NFVF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNVVMCisjZGVmaW5lIEVWRU5UX1JBRElPX1JFU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNlVMCisKKyNkZWZpbmUgRlVOQ1RJT05fU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkVDRUlWRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyVUwKKyNkZWZpbmUgRlVOQ1RJT05fVFJBTlNNSVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzVUwKKyNkZWZpbmUgRlVOQ1RJT05fRU5FUkdZX0RFVEVDVElPTiAgICAgICAgICAgICAgMHgwMDA0VUwKKyNkZWZpbmUgRlVOQ1RJT05fQlVGRkVSX0ZSRUUgICAgICAgICAgICAgICAgICAgMHgwMDA1VUwKKworI2RlZmluZSBGVU5DVElPTl9JUlFfSEFORExFUiAgICAgICAgICAgICAgICAgICAweDAxMDBVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9GUkFNRVNUQVJUICAgICAgICAgICAgICAweDAxMDFVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9CQ01BVENIICAgICAgICAgICAgICAgICAweDAxMDJVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9FTkQgICAgICAgICAgICAgICAgICAgICAweDAxMDNVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9ESVNBQkxFRCAgICAgICAgICAgICAgICAweDAxMDRVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9SRUFEWSAgICAgICAgICAgICAgICAgICAweDAxMDVVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9DQ0FJRExFICAgICAgICAgICAgICAgICAweDAxMDZVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9DQ0FCVVNZICAgICAgICAgICAgICAgICAweDAxMDdVTAorI2RlZmluZSBGVU5DVElPTl9FVkVOVF9FREVORCAgICAgICAgICAgICAgICAgICAweDAxMDhVTAorCisjZGVmaW5lIEZVTkNUSU9OX0FVVE9fQUNLX0FCT1JUICAgICAgICAgICAgICAgIDB4MDIwMVVMCisjZGVmaW5lIEZVTkNUSU9OX1RJTUVTTE9UX1NUQVJURUQgICAgICAgICAgICAgIDB4MDIwMlVMCisjZGVmaW5lIEZVTkNUSU9OX1RJTUVTTE9UX0VOREVEICAgICAgICAgICAgICAgIDB4MDIwM1VMCisjZGVmaW5lIEZVTkNUSU9OX0NSSVRfU0VDVF9FTlRFUiAgICAgICAgICAgICAgIDB4MDIwNFVMCisjZGVmaW5lIEZVTkNUSU9OX0NSSVRfU0VDVF9FWElUICAgICAgICAgICAgICAgIDB4MDIwNVVMCisKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9DUklUX1NFQ1RfRU5URVIgICAgICAgICAgMHgwMzAxVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9DUklUX1NFQ1RfRVhJVCAgICAgICAgICAgMHgwMzAyVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9DT05USU5VT1VTX0VOVEVSICAgICAgICAgMHgwMzAzVUwKKyNkZWZpbmUgRlVOQ1RJT05fUkFBTF9DT05USU5VT1VTX0VYSVQgICAgICAgICAgMHgwMzA0VUwKKworI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19IQU5ETEVSICAgICAgICAgICAgICAweDA0MDBVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9TVEFSVCAgICAgICAgICAweDA0MDFVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9NQVJHSU4gICAgICAgICAweDA0MDJVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWFRFTkQgICAgICAgICAweDA0MDNVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FTkRFRCAgICAgICAgICAweDA0MDRVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9SQURJTyAgICAgICAgICAweDA0MDVVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWENFRURfU1VDQ0VTUyAweDA0MDZVTAorI2RlZmluZSBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWENFRURfRkFJTCAgICAweDA0MDdVTAorCisjZGVmaW5lIFBJTl9EQkdfUkFESU9fRVZUX0VORCAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFBJTl9EQkdfUkFESU9fRVZUX0RJU0FCTEVEICAgICAgICAgICAgIDEyCisjZGVmaW5lIFBJTl9EQkdfUkFESU9fRVZUX1JFQURZICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFBJTl9EQkdfUkFESU9fRVZUX0ZSQU1FU1RBUlQgICAgICAgICAgIDE0CisjZGVmaW5lIFBJTl9EQkdfUkFESU9fRVZUX0VERU5EICAgICAgICAgICAgICAgIDI1CisKKyNkZWZpbmUgUElOX0RCR19USU1FU0xPVF9BQ1RJVkUgICAgICAgICAgICAgICAgMworI2RlZmluZSBQSU5fREJHX1RJTUVTTE9UX0VYVEVORF9SRVEgICAgICAgICAgICA0CisjZGVmaW5lIFBJTl9EQkdfVElNRVNMT1RfU0VTU0lPTl9JRExFICAgICAgICAgIDE2CisjZGVmaW5lIFBJTl9EQkdfVElNRVNMT1RfUkFESU9fSVJRICAgICAgICAgICAgIDI4CisjZGVmaW5lIFBJTl9EQkdfVElNRVNMT1RfRkFJTEVEICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFBJTl9EQkdfVElNRVNMT1RfQkxPQ0tFRCAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFBJTl9EQkdfUkFBTF9DUklUSUNBTF9TRUNUSU9OICAgICAgICAgIDE1CisKKyNkZWZpbmUgUElOX0RCR19SVEMwX0VWVF9SRU0gICAgICAgICAgICAgICAgICAgMzEKKworI2lmIEVOQUJMRV9ERUJVR19MT0cKK2V4dGVybiB2b2xhdGlsZSB1aW50MzJfdCBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2xvZ19idWZmZXJbCisgICAgICAgIE5SRl9EUlZfUkFESU84MDIxNTRfREVCVUdfTE9HX0JVRkZFUl9MRU5dOworZXh0ZXJuIHZvbGF0aWxlIHVpbnQzMl90IG5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWdfbG9nX3B0cjsKKworI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9DT0RFLCBFVkVOVF9BUkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1aW50MzJfdCBwdHIgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2xvZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2xvZ19idWZmZXJbcHRyXSA9ICgoRVZFTlRfQ09ERSkgfCAoKEVWRU5UX0FSRykgPDwgMTYpKTsgICAgICAgICAgXAorICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2RlYnVnX2xvZ19wdHIgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHB0ciA8IChOUkZfRFJWX1JBRElPODAyMTU0X0RFQlVHX0xPR19CVUZGRVJfTEVOIC0gMSkgPyBwdHIgKyAxIDogMDsgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNlbHNlIC8vIEVOQUJMRV9ERUJVR19MT0cKKworI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9DT0RFLCBFVkVOVF9BUkcpCisKKyNlbmRpZiAvLyBFTkFCTEVfREVCVUdfTE9HCisKKyNpZiBFTkFCTEVfREVCVUdfR1BJTworCisjZGVmaW5lIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3NldChwaW4pIE5SRl9QMC0+T1VUU0VUID0gKDFVTCA8PCAocGluKSkKKyNkZWZpbmUgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fY2xyKHBpbikgTlJGX1AwLT5PVVRDTFIgPSAoMVVMIDw8IChwaW4pKQorI2RlZmluZSBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl90Z2wocGluKSBkbyB7IHZvbGF0aWxlIHVpbnQzMl90IHBzID0gTlJGX1AwLT5PVVQ7ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9QMC0+T1VUU0VUID0gKH5wcyAmICgxVUwgPDwgKHBpbikpKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJGX1AwLT5PVVRDTFIgPSAocHMgJiAoMVVMIDw8IChwaW4pKSk7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApOworCisjZWxzZSAvLyBFTkFCTEVfREVCVUdfR1BJTworCisjZGVmaW5lIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3NldChwaW4pCisjZGVmaW5lIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX2NscihwaW4pCisjZGVmaW5lIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3RnbChwaW4pCisKKyNlbmRpZiAvLyBFTkFCTEVfREVCVUdfR1BJTworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIGRlYnVnIGhlbHBlcnMgZm9yIG5SRiA4MDIuMTUuNCBkcml2ZXIuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Z19pbml0KHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTlJGX0RSVl9SQURJTzgwMjE1NF9ERUJVR19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDU1YmEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmMKQEAgLTAsMCArMSwxODU5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEZpbml0ZSBTdGF0ZSBNYWNoaW5lIG9mIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NC5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfYWNrX3BlbmRpbmdfYml0LmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jb25maWcuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbnN0LmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Zy5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9waWIuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3AuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3Byb2NlZHVyZXNfZHVyYXRpb24uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5oIgorI2luY2x1ZGUgImhhbC9ucmZfcmFkaW8uaCIKKyNpbmNsdWRlICJyYWFsL25yZl9yYWFsX2FwaS5oIgorCisvLy8gVmFsdWUgc2V0IHRvIFNIT1JUUyByZWdpc3RlciB3aGVuIG5vIHNob3J0cyBzaG91bGQgYmUgZW5hYmxlZC4KKyNkZWZpbmUgU0hPUlRTX0lETEUgICAgICAgICAwCisvLy8gVmFsdWUgc2V0IHRvIFNIT1JUUyByZWdpc3RlciB3aGVuIHJlY2VpdmVyIGlzIHdhaXRpbmcgZm9yIGluY29taW5nIGZyYW1lLgorI2RlZmluZSBTSE9SVFNfUlhfSU5JVElBTCAgIChOUkZfUkFESU9fU0hPUlRfRU5EX0RJU0FCTEVfTUFTSyB8IE5SRl9SQURJT19TSE9SVF9ESVNBQkxFRF9UWEVOX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9SQURJT19TSE9SVF9GUkFNRVNUQVJUX0JDU1RBUlRfTUFTSykKKy8vLyBWYWx1ZSBzZXQgdG8gU0hPUlRTIHJlZ2lzdGVyIHdoZW4gcmVjZWl2ZXIgc3RhcnRlZCByZWNlaXZpbmcgYSBmcmFtZS4KKyNkZWZpbmUgU0hPUlRTX1JYX0ZPTExPV0lORyAoTlJGX1JBRElPX1NIT1JUX0VORF9ESVNBQkxFX01BU0sgfCBOUkZfUkFESU9fU0hPUlRfUkVBRFlfU1RBUlRfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJGX1JBRElPX1NIT1JUX0ZSQU1FU1RBUlRfQkNTVEFSVF9NQVNLKQorLy8vIFZhbHVlIHNldCB0byBTSE9SVFMgcmVnaXN0ZXIgd2hlbiByZWNlaXZlZCBmcmFtZSBzaG91bGQgYmUgYWNrbm93bGVkZ2VkLgorI2RlZmluZSBTSE9SVFNfVFhfQUNLICAgICAgIChOUkZfUkFESU9fU0hPUlRfRU5EX0RJU0FCTEVfTUFTSykKKyNpZiBSQURJT19TSE9SVF9DQ0FJRExFX1RYRU4KKy8vLyBWYWx1ZSBzZXQgdG8gU0hPUlRTIHJlZ2lzdGVyIGR1cmluZyB0cmFuc21pc3Npb24gb2YgYSBmcmFtZQorI2RlZmluZSBTSE9SVFNfVFhfRlJBTUUgICAgIChOUkZfUkFESU9fU0hPUlRfRU5EX0RJU0FCTEVfTUFTSyB8IE5SRl9SQURJT19TSE9SVF9SRUFEWV9TVEFSVF9NQVNLIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkZfUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOX01BU0spCisjZWxzZQorLy8vIFZhbHVlIHNldCB0byBTSE9SVFMgcmVnaXN0ZXIgZHVyaW5nIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lCisjZGVmaW5lIFNIT1JUU19UWF9GUkFNRSAgICAgKE5SRl9SQURJT19TSE9SVF9FTkRfRElTQUJMRV9NQVNLIHwgTlJGX1JBRElPX1NIT1JUX1JFQURZX1NUQVJUX01BU0spCisjZW5kaWYKKworLy8vIERlbGF5IGJlZm9yZSBzZW5kaW5nIEFDSyAoMTJzeW0gPSAxOTJ1UykKKyNkZWZpbmUgVElGU19BQ0tfVVMgICAgICAgICAxOTIKKy8vLyBEZWxheSBiZWZvcmUgZmlyc3QgY2hlY2sgb2YgcmVjZWl2ZWQgZnJhbWU6IDE2IGJpdHMgaXMgTUFDIEZyYW1lIENvbnRyb2wgZmllbGQuCisjZGVmaW5lIEJDQ19JTklUICAgICAgICAgICAgKDIgKiA4KQorLy8vIERlbGF5IGJlZm9yZSBzZWNvbmQgY2hlY2sgb2YgcmVjZWl2ZWQgZnJhbWUgaWYgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBzaG9ydC4KKyNkZWZpbmUgQkNDX1NIT1JUX0FERFIgICAgICAoKERFU1RfQUREUl9PRkZTRVQgKyBTSE9SVF9BRERSRVNTX1NJWkUpICogOCkKKy8vLyBEZWxheSBiZWZvcmUgc2Vjb25kIGNoZWNrIG9mIHJlY2VpdmVkIGZyYW1lIGlmIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgZXh0ZW5kZWQuCisjZGVmaW5lIEJDQ19FWFRFTkRFRF9BRERSICAgKChERVNUX0FERFJfT0ZGU0VUICsgRVhURU5ERURfQUREUkVTU19TSVpFKSAqIDgpCisKKy8vLyBEdXJhdGlvbiBvZiBzaW5nbGUgaXRlcmF0aW9uIG9mIEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlCisjZGVmaW5lIEVEX0lURVJfRFVSQVRJT04gICAxMjhVCisvLy8gT3ZlcmhlYWQgb2YgaGFyZHdhcmUgcHJlcGFyYXRpb24gZm9yIEVEIHByb2NlZHVyZSAoYVR1cm5hcm91bmRUaW1lKSBbbnVtYmVyIG9mIGl0ZXJhdGlvbnNdCisjZGVmaW5lIEVEX0lURVJTX09WRVJIRUFEICAyVQorCisjZGVmaW5lIENSQ19MRU5HVEggICAgICAyICAgICAgICAgLy8vPCBMZW5ndGggb2YgQ1JDIGluIDgwMi4xNS40IGZyYW1lcyBbYnl0ZXNdCisjZGVmaW5lIENSQ19QT0xZTk9NSUFMICAweDAxMTAyMSAgLy8vPCBQb2x5bm9taWFsIHVzZWQgZm9yIENSQyBjYWxjdWxhdGlvbiBpbiA4MDIuMTUuNCBmcmFtZXMKKworI2RlZmluZSBNSE1VX01BU0sgICAgICAgICAgICAgICAweGZmMDAwNzAwICAvLy88IE1hc2sgb2Yga25vd24gYnl0ZXMgaW4gQUNLIHBhY2tldAorI2RlZmluZSBNSE1VX1BBVFRFUk4gICAgICAgICAgICAweDAwMDAwMjAwICAvLy88IFZhbHVlcyBvZiBrbm93biBieXRlcyBpbiBBQ0sgcGFja2V0CisjZGVmaW5lIE1ITVVfUEFUVEVSTl9EU05fT0ZGU0VUIDI0ICAgICAgICAgIC8vLzwgT2Zmc2V0IG9mIERTTiBpbiBNSE1VX1BBVFRFUiBbYml0c10KKworLyoqIEdldCBMUUkgb2YgZ2l2ZW4gcmVjZWl2ZWQgcGFja2V0LiBJZiBDUkMgaXMgY2FsY3VsYXRlZCBieSBoYXJkd2FyZSBMUUkgaXMgaW5jbHVkZWQgaW5zdGVhZCBvZiBDUkMKKyAqICBpbiB0aGUgZnJhbWUuIExlbmd0aCBpcyBzdG9yZWQgaW4gYnl0ZSB3aXRoIGluZGV4IDA7IENSQyBpcyAyIGxhc3QgYnl0ZXMuCisgKi8KKyNkZWZpbmUgUlhfRlJBTUVfTFFJKHBzZHUpICAoKHBzZHUpWyhwc2R1KVswXSAtIDFdKQorCisjaWYgUkFESU9fUlhfQlVGRkVSUyA+IDEKKy8vLyBQb2ludGVyIHRvIGN1cnJlbnRseSB1c2VkIHJlY2VpdmUgYnVmZmVyLgorc3RhdGljIHJ4X2J1ZmZlcl90ICogbXBfY3VycmVudF9yeF9idWZmZXI7CisjZWxzZQorLy8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGJ1ZmZlciB1c2UgY29uc3QgcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBidWZmZXIuCitzdGF0aWMgcnhfYnVmZmVyX3QgKiBjb25zdCBtcF9jdXJyZW50X3J4X2J1ZmZlciA9ICZucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcnNbMF07CisjZW5kaWYKKworI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApCisKKy8vLyBBY2sgZnJhbWUgYnVmZmVyIChFYXN5RE1BIGNhbm5vdCBhZGRyZXNzIHdob2xlIFJBTS4gUGxhY2UgYnVmZmVyIGluIHRoZSBzcGVjaWFsIHNlY3Rpb24uKQorc3RhdGljIHVpbnQ4X3QgbV9hY2tfcHNkdVtBQ0tfTEVOR1RIICsgMV0KKyAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIm5yZl9yYWRpb19idWZmZXIubV9hY2tfcHNkdSIpKSk7CisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKworI3ByYWdtYSBsb2NhdGlvbj0iTlJGX1JBRElPX0JVRkZFUiIKK3N0YXRpYyB1aW50OF90IG1fYWNrX3BzZHVbQUNLX0xFTkdUSCArIDFdOworCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgKiBtcF90eF9kYXRhOyAgICAgIC8vLzwgUG9pbnRlciB0byBkYXRhIHRvIHRyYW5zbWl0Lgorc3RhdGljIHVpbnQzMl90ICAgICAgICBtX2VkX3RpbWVfbGVmdDsgIC8vLzwgUmVtYWluaW5nIHRpbWUgb2YgY3VycmVudCBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSBbdXNdLgorc3RhdGljIHVpbnQ4X3QgICAgICAgICBtX2VkX3Jlc3VsdDsgICAgIC8vLzwgUmVzdWx0IG9mIGN1cnJlbnQgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisKK3N0YXRpYyB2b2xhdGlsZSByYWRpb19zdGF0ZV90IG1fc3RhdGUgPSBSQURJT19TVEFURV9TTEVFUDsgIC8vLzwgU3RhdGUgb2YgdGhlIHJhZGlvIGRyaXZlcgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGJvb2wgcHJldmVudF9hY2sgOjE7ICAvLy88IElmIGZyYW1lIGJlaW5nIHJlY2VpdmVkIGlzIG5vdCBkZXN0aW5lZCB0byB0aGlzIG5vZGUgKHByb21pc2N1b3VzIG1vZGUpLgorfSBucmZfcmFkaW84MDIxNTRfZmxhZ3NfdDsKK3N0YXRpYyBucmZfcmFkaW84MDIxNTRfZmxhZ3NfdCBtX2ZsYWdzOyAgLy8vPCBGbGFncyB1c2VkIHRvIHN0b3JlIGN1cnJlbnQgZHJpdmVyIHN0YXRlLgorCitzdGF0aWMgdm9sYXRpbGUgdWludDhfdCBtX211dGV4OyAgLy8vPCBNdXRleCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9uLgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIE11dGV4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vLyBMb2NrIG11dGV4IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLgorc3RhdGljIGJvb2wgbXV0ZXhfbG9jayh2b2lkKQoreworICAgIGRvCisgICAgeworICAgICAgICB2b2xhdGlsZSB1aW50OF90IG11dGV4X3ZhbHVlID0gX19MRFJFWEIoJm1fbXV0ZXgpOworCisgICAgICAgIGlmIChtdXRleF92YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlIChfX1NUUkVYQigxLCAmbV9tdXRleCkpOworCisgICAgX19ETUIoKTsKKworICAgIC8vIERyaXZlciBtYXkgYmUgaW4gV0FJVElOR19USU1FU0xPVCBzdGF0ZSBpZiB0aW1lc2xvdCBlbmRlZCBkdXJpbmcgbXV0ZXggbG9ja2luZy4KKyAgICBhc3NlcnQobV9zdGF0ZSA9PSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FIHx8CisgICAgICAgICAgIG1fc3RhdGUgPT0gUkFESU9fU1RBVEVfU0xFRVAgfHwKKyAgICAgICAgICAgbV9zdGF0ZSA9PSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX01VVEVYX0xPQ0ssIDApOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vLyBVbmxvY2sgbXV0ZXguCitzdGF0aWMgdm9pZCBtdXRleF91bmxvY2sodm9pZCkKK3sKKyAgICBhc3NlcnQobV9zdGF0ZSA9PSBSQURJT19TVEFURV9TTEVFUCB8fAorICAgICAgICAgICBtX3N0YXRlID09IFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfTVVURVhfVU5MT0NLLCAwKTsKKworICAgIF9fRE1CKCk7CisgICAgbV9tdXRleCA9IDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gRlNNIGNvbW1vbiBvcGVyYXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBTZXQgZHJpdmVyIHN0YXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIHN0YXRlICBEcml2ZXIgc3RhdGUgdG8gc2V0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhdGVfc2V0KHJhZGlvX3N0YXRlX3Qgc3RhdGUpCit7CisgICAgbV9zdGF0ZSA9IHN0YXRlOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfU0VUX1NUQVRFLCAodWludDMyX3Qpc3RhdGUpOworfQorCisvLy8gQ29tbW9uIHByb2NlZHVyZSB3aGVuIHRoZSBkcml2ZXIgZW50ZXJzIFNMRUVQIHN0YXRlLgorc3RhdGljIGlubGluZSB2b2lkIHNsZWVwX3N0YXJ0KHZvaWQpCit7CisgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1NMRUVQKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3BfdGltZXNsb3RfZXhpdCgpOworICAgIG11dGV4X3VubG9jaygpOworfQorCisvLy8gU3RhcnQgcmVjZWl2ZXIgdG8gd2FpdCBmb3IgZnJhbWVzLgorc3RhdGljIGlubGluZSB2b2lkIHJ4X3N0YXJ0KHZvaWQpCit7CisgICAgbnJmX3JhZGlvX3BhY2tldF9wdHJfc2V0KG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1KTsKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX1NUQVJUKTsKK30KKworLy8vIFN0YXJ0IHJlY2VpdmVyIHRvIHdhaXQgZm9yIGZyYW1lIHRoYXQgY2FuIGJlIGFja25vd2xlZGdlZC4KK3N0YXRpYyBpbmxpbmUgdm9pZCByeF9mcmFtZV9zdGFydCh2b2lkKQoreworICAgIHJ4X3N0YXJ0KCk7CisKKyAgICAvLyBKdXN0IGFmdGVyIHN0YXJ0aW5nIHJlY2VpdmluZyB0byByZWNlaXZlIGJ1ZmZlciBzZXQgcGFja2V0IHBvaW50ZXIgdG8gQUNLIGZyYW1lIHRoYXQgY2FuIGJlCisgICAgLy8gc2VudCBhdXRvbWF0aWNhbGx5LgorICAgIG5yZl9yYWRpb19wYWNrZXRfcHRyX3NldChtX2Fja19wc2R1KTsKK30KKworLyoqIEdldCByZXN1bHQgb2YgbGFzdCBSU1NJIG1lYXN1cmVtZW50LgorICoKKyAqIEByZXR1cm5zICBSZXN1bHQgb2YgbGFzdCBSU1NJIG1lYXN1cmVtZW50IFtkQm1dLgorICovCitzdGF0aWMgaW5saW5lIGludDhfdCByc3NpX2xhc3RfbWVhc3VyZW1lbnRfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIC0oKGludDhfdClucmZfcmFkaW9fcnNzaV9zYW1wbGVfZ2V0KCkpOworfQorCisvLy8gTm90aWZ5IE1BQyBsYXllciB0aGF0IGEgZnJhbWUgd2FzIHJlY2VpdmVkLgorc3RhdGljIGlubGluZSB2b2lkIHJlY2VpdmVkX2ZyYW1lX25vdGlmeSh2b2lkKQoreworICAgIG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5mcmVlID0gZmFsc2U7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfcmVjZWl2ZWQobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHUsICAgICAgICAgICAgICAgIC8vIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3NpX2xhc3RfbWVhc3VyZW1lbnRfZ2V0KCksICAgICAgICAgICAgICAgLy8gcnNzaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJYX0ZSQU1FX0xRSShtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdSkpOyAvLyBscWkKK30KKworLyoqIFNldCBjdXJyZW50bHkgdXNlZCByeCBidWZmZXIgdG8gZ2l2ZW4gYWRkcmVzcy4KKyAqCisgKiBAcGFyYW1baW5dICBwX3J4X2J1ZmZlciAgUG9pbnRlciB0byByZWNlaXZlIGJ1ZmZlciB0aGF0IHNob3VsZCBiZSB1c2VkIG5vdy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJ4X2J1ZmZlcl9pbl91c2Vfc2V0KHJ4X2J1ZmZlcl90ICogcF9yeF9idWZmZXIpCit7CisjaWYgUkFESU9fUlhfQlVGRkVSUyA+IDEKKyAgICBtcF9jdXJyZW50X3J4X2J1ZmZlciA9IHBfcnhfYnVmZmVyOworI2Vsc2UKKyAgICAodm9pZCkgcF9yeF9idWZmZXI7CisjZW5kaWYKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBSYWRpbyBwYXJhbWV0ZXJzIGNhbGN1bGF0b3JzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBTZXQgcmFkaW8gY2hhbm5lbAorICoKKyAqICBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciB0byBzZXQgKDExLTI2KS4KKyAqLworc3RhdGljIHZvaWQgY2hhbm5lbF9zZXQodWludDhfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsID49IDExICYmIGNoYW5uZWwgPD0gMjYpOworCisgICAgbnJmX3JhZGlvX2ZyZXF1ZW5jeV9zZXQoNSArICg1ICogKGNoYW5uZWwgLSAxMSkpKTsKK30KKworLyoqIEdldCByYWRpbyBjaGFubmVsLgorICoKKyAqIEByZXR1cm5zICBDdXJyZW50bHkgc2V0IGNoYW5uZWwgbnVtYmVyLgorICovCitzdGF0aWMgdWludDhfdCBjaGFubmVsX2dldCh2b2lkKQoreworICAgIHJldHVybiAoKG5yZl9yYWRpb19mcmVxdWVuY3lfZ2V0KCkgLSA1KSAvIDUpICsgMTE7Cit9CisKKy8qKiBTZXQgdHJhbnNtaXQgcG93ZXIuCisgKgorICogQHBhcmFtW2luXSAgZGJtICBUcmFuc21pdCBwb3dlciB0byBzZXQgW2RibV0uCisgKi8KK3N0YXRpYyB2b2lkIHR4X3Bvd2VyX3NldChpbnQ4X3QgZGJtKQoreworICAgIGNvbnN0IGludDhfdCBhbGxvd2VkX3ZhbHVlc1tdID0gey00MCwgLTIwLCAtMTYsIC0xMiwgLTgsIC00LCAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5fTsKKyAgICBjb25zdCBpbnQ4X3QgaGlnaGVzdF92YWx1ZSAgICA9IGFsbG93ZWRfdmFsdWVzWyhzaXplb2YoYWxsb3dlZF92YWx1ZXMpIC8gc2l6ZW9mKGFsbG93ZWRfdmFsdWVzWzBdKSkgLSAxXTsKKyAgICBpZiAoZGJtID4gaGlnaGVzdF92YWx1ZSkKKyAgICB7CisgICAgICAgIGRibSA9IGhpZ2hlc3RfdmFsdWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplb2YoYWxsb3dlZF92YWx1ZXMpIC8gc2l6ZW9mKGFsbG93ZWRfdmFsdWVzWzBdKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGJtIDw9IGFsbG93ZWRfdmFsdWVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRibSA9IGFsbG93ZWRfdmFsdWVzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbnJmX3JhZGlvX3R4X3Bvd2VyX3NldChkYm0pOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFNob3J0cyBtYW5hZ2VtZW50CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vLyBEaXNhYmxlIHBlcmlwaGVyYWwgc2hvcnRzLgorc3RhdGljIGlubGluZSB2b2lkIHNob3J0c19kaXNhYmxlKHZvaWQpCit7CisgICAgbnJmX3JhZGlvX3Nob3J0c19zZXQoU0hPUlRTX0lETEUpOworICAgIG5yZl9yYWRpb19pZnNfc2V0KDApOworfQorCisvLy8gRW5hYmxlIHBlcmlwaGVyYWwgc2hvcnRzIHVzZWQgZHVyaW5nIGRhdGEgZnJhbWUgdHJhbnNtaXNzaW9uLgorc3RhdGljIGlubGluZSB2b2lkIHNob3J0c190eF9mcmFtZV9zZXQodm9pZCkKK3sKKyAgICBucmZfcmFkaW9fc2hvcnRzX3NldChTSE9SVFNfVFhfRlJBTUUpOworfQorCisvLy8gRW5hYmxlIHBlcmlwaGVyYWwgc2hvcnRzIHVzZWQgaW4gcmVjZWl2ZSBzdGF0ZSB0byBlbmFibGUgYXV0b21hdGljIEFDSyBwcm9jZWR1cmUuCitzdGF0aWMgaW5saW5lIHZvaWQgc2hvcnRzX3J4X2luaXRpYWxfc2V0KHZvaWQpCit7CisgICAgbnJmX3JhZGlvX2lmc19zZXQoVElGU19BQ0tfVVMpOworICAgIG5yZl9yYWRpb19iY2Nfc2V0KEJDQ19JTklUKTsKKworICAgIG5yZl9yYWRpb19zaG9ydHNfc2V0KFNIT1JUU19SWF9JTklUSUFMKTsKK30KKworLy8vIEVuYWJsZSBwZXJpcGhlcmFsIHNob3J0cyB1c2VkIGR1cmluZyBhdXRvbWF0aWMgQUNLIHRyYW5zbWlzc2lvbi4KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG9ydHNfcnhfZm9sbG93aW5nX3NldCh2b2lkKQoreworICAgIG5yZl9yYWRpb19zaG9ydHNfc2V0KFNIT1JUU19SWF9GT0xMT1dJTkcpOworfQorCisvLy8gRGlzYWJsZSBwZXJpcGhlcmFsIHNob3J0cyB1c2VkIGR1cmluZyBhdXRvbWF0aWMgQUNLIHRyYW5zbWlzc2lvbiB3aGVuIEFDSyBpcyBiZWluZyB0cmFuc21pdHRlZAorc3RhdGljIGlubGluZSB2b2lkIHNob3J0c190eF9hY2tfc2V0KHZvaWQpCit7CisgICAgLy8gSWYgQUNLIGlzIHNlbnQgRU5EX0RJU0FCTEUgc2hvcnQgc2hvdWxkIHBlcnNpc3QgdG8gZGlzYWJsZSB0cmFuc21pdHRlciBhdXRvbWF0aWNhbGx5LgorICAgIG5yZl9yYWRpb19zaG9ydHNfc2V0KFNIT1JUU19UWF9BQ0spOworICAgIG5yZl9yYWRpb19pZnNfc2V0KDApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIEFDSyB0cmFuc21pc3Npb24gbWFuYWdlbWVudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gU2V0IHZhbGlkIHNlcXVlbmNlIG51bWJlciBpbiBBQ0sgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX3ByZXBhcmUodm9pZCkKK3sKKyAgICAvLyBDb3B5IHNlcXVlbmNlIG51bWJlciBmcm9tIHJlY2VpdmVkIGZyYW1lIHRvIEFDSyBmcmFtZS4KKyAgICBtX2Fja19wc2R1W0RTTl9PRkZTRVRdID0gbXBfY3VycmVudF9yeF9idWZmZXItPnBzZHVbRFNOX09GRlNFVF07Cit9CisKKy8vLyBTZXQgcGVuZGluZyBiaXQgaW4gQUNLIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGFja19wZW5kaW5nX2JpdF9zZXQodm9pZCkKK3sKKyAgICBtX2Fja19wc2R1W0ZSQU1FX1BFTkRJTkdfT0ZGU0VUXSA9IEFDS19IRUFERVJfV0lUSF9QRU5ESU5HOworCisgICAgaWYgKCFucmZfZHJ2X3JhZGlvODAyMTU0X2Fja19wZW5kaW5nX2JpdF9zaG91bGRfYmVfc2V0KG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1KSkKKyAgICB7CisgICAgICAgIG1fYWNrX3BzZHVbRlJBTUVfUEVORElOR19PRkZTRVRdID0gQUNLX0hFQURFUl9XSVRIT1VUX1BFTkRJTkc7CisgICAgfQorfQorCisvKiogQ2hlY2sgaWYgQUNLIGlzIHJlcXVlc3RlZCBpbiBnaXZlbiBmcmFtZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX2ZyYW1lICBQb2ludGVyIHRvIGEgZnJhbWUgdG8gY2hlY2suCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIEFDSyBpcyByZXF1ZXN0ZWQgaW4gZ2l2ZW4gZnJhbWUuCisgKiBAcmV0dmFsICBmYWxzZSAgQUNLIGlzIG5vdCByZXF1ZXN0ZWQgaW4gZ2l2ZW4gZnJhbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhY2tfaXNfcmVxdWVzdGVkKGNvbnN0IHVpbnQ4X3QgKiBwX2ZyYW1lKQoreworICAgIHJldHVybiAocF9mcmFtZVtBQ0tfUkVRVUVTVF9PRkZTRVRdICYgQUNLX1JFUVVFU1RfQklUKSA/IHRydWUgOiBmYWxzZTsKK30KKworLyoqIEFib3J0IGF1dG9tYXRpYyBBQ0sgcHJvY2VkdXJlLgorICoKKyAqIEBwYXJhbVtpbl0gIHN0YXRlX3RvX3NldCAgRHJpdmVyIHN0YXRlIHRoYXQgc2hhbGwgYmUgc2V0IGFmdGVyIHRoZSBwcm9jZWR1cmUgaXMgYWJvcnRlZC4KKyAqLworc3RhdGljIHZvaWQgYXV0b19hY2tfYWJvcnQocmFkaW9fc3RhdGVfdCBzdGF0ZV90b19zZXQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0FVVE9fQUNLX0FCT1JUKTsKKworICAgIHNob3J0c19kaXNhYmxlKCk7CisKKyAgICBzd2l0Y2ggKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYOiAgICAgLy8gV2hlbiBzdG9wcGluZyBiZWZvcmUgd2hvbGUgZnJhbWUgcmVjZWl2ZWQuCisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX1JVOiAgLy8gV2hlbiB0cmFuc21pc3Npb24gaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIHJlY2VpdmVyIHJhbXAgdXAuCisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0lETEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX1JVOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9JRExFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWDoKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRElTQUJMRUQpOyAvLyBDbGVhciBkaXNhYmxlZCBldmVudCB0aGF0IHdhcyBzZXQgYnkgc2hvcnQuCisgICAgICAgICAgICBzdGF0ZV9zZXQoc3RhdGVfdG9fc2V0KTsKKyAgICAgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRElTQUJMRSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9ESVNBQkxFOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9ESVNBQkxFRDoKKyAgICAgICAgICAgIC8vIERvIG5vdCB0cmlnZ2VyIERJU0FCTEUgdGFzayBpbiB0aG9zZSBzdGF0ZXMgdG8gcHJldmVudCBkb3VibGUgRElTQUJMRUQgZXZlbnRzLgorICAgICAgICAgICAgc3RhdGVfc2V0KHN0YXRlX3RvX3NldCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9BVVRPX0FDS19BQk9SVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIEFDSyByZWNlaXZpbmcgbWFuYWdlbWVudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gRW5hYmxlIGhhcmR3YXJlIEFDSyBtYXRjaGluZyBhY2NlbGVyYXRvci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbWF0Y2hpbmdfZW5hYmxlKHZvaWQpCit7CisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9NSFJNQVRDSCk7CisgICAgbnJmX3JhZGlvX21obXVfc2VhcmNoX3BhdHRlcm5fc2V0KE1ITVVfUEFUVEVSTiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpIG1wX3R4X2RhdGFbRFNOX09GRlNFVF0gPDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ITVVfUEFUVEVSTl9EU05fT0ZGU0VUKSk7Cit9CisKKy8vLyBEaXNhYmxlIGhhcmR3YXJlIEFDSyBtYXRjaGluZyBhY2NlbGVyYXRvci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbWF0Y2hpbmdfZGlzYWJsZSh2b2lkKQoreworICAgIG5yZl9yYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuX3NldCgwKTsKKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX01IUk1BVENIKTsKK30KKworLyoqIENoZWNrIGlmIGhhcmR3YXJlIEFDSyBtYXRjaGluZyBhY2NlbGVyYXRvciBtYXRjaGVkIEFDSyBwYXR0ZXJuIGluIHJlY2VpdmVkIGZyYW1lLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBBQ0sgbWF0Y2hpbmcgYWNjZWxlcmF0b3IgbWF0Y2hlZCBBQ0sgcGF0dGVybi4KKyAqIEByZXR2YWwgIGZhbHNlICBBQ0sgbWF0Y2hpbmcgYWNjZWxlcmF0b3IgZGlkIG5vdCBtYXRjaCBBQ0sgcGF0dGVybi4KKyAqLworc3RhdGljIGlubGluZSBib29sIGFja19pc19tYXRjaGVkKHZvaWQpCit7CisgICAgcmV0dXJuIChucmZfcmFkaW9fZXZlbnRfZ2V0KE5SRl9SQURJT19FVkVOVF9NSFJNQVRDSCkpICYmCisgICAgICAgICAgICAobnJmX3JhZGlvX2NyY19zdGF0dXNfZ2V0KCkgPT0gTlJGX1JBRElPX0NSQ19TVEFUVVNfT0spOworfQorCisvLy8gU3RhcnQgcmVjZWl2ZXIgdG8gcmVjZWl2ZSBkYXRhIGFmdGVyIHJlY2VpdmluZyBvZiBBQ0sgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgZnJhbWVfcnhfc3RhcnRfYWZ0ZXJfYWNrX3J4KHZvaWQpCit7CisgICAgYWNrX21hdGNoaW5nX2Rpc2FibGUoKTsKKyAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19ESVNBQkxFKTsgLy8gRXJyYXRhIFsxMTBdCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJBRElPIHBlcmlwaGVyYWwgbWFuYWdlbWVudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy8gSW5pdGlhbGl6ZSByYWRpbyBwZXJpcGhlcmFsCitzdGF0aWMgdm9pZCBucmZfcmFkaW9faW5pdCh2b2lkKQoreworICAgIG5yZl9yYWRpb19tb2RlX3NldChOUkZfUkFESU9fTU9ERV9JRUVFODAyMTU0XzI1MEtCSVQpOworICAgIG5yZl9yYWRpb19jb25maWdfbGVuZ3RoX2ZpZWxkX2xlbmd0aF9zZXQoOCk7CisgICAgbnJmX3JhZGlvX2NvbmZpZ19wcmVhbWJsZV9sZW5ndGhfc2V0KE5SRl9SQURJT19QUkVBTUJMRV9MRU5HVEhfMzJCSVRfWkVSTyk7CisgICAgbnJmX3JhZGlvX2NvbmZpZ19jcmNfaW5jbHVkZWRfc2V0KHRydWUpOworICAgIG5yZl9yYWRpb19jb25maWdfbWF4X2xlbmd0aF9zZXQoTUFYX1BBQ0tFVF9TSVpFKTsKKworICAgIC8vIENvbmZpZ3VyZSBDUkMKKyAgICBucmZfcmFkaW9fY3JjX2xlbmd0aF9zZXQoQ1JDX0xFTkdUSCk7CisgICAgbnJmX3JhZGlvX2NyY19pbmNsdWRlc19hZGRyZXNzX3NldChOUkZfUkFESU9fQ1JDX0lOQ0xVREVTX0FERFJfSUVFRTgwMjE1NCk7CisgICAgbnJmX3JhZGlvX2NyY19wb2x5bm9taW5hbF9zZXQoQ1JDX1BPTFlOT01JQUwpOworCisgICAgLy8gQ29uZmlndXJlIENDQQorICAgIG5yZl9yYWRpb19jY2FfbW9kZV9zZXQoUkFESU9fQ0NBX01PREUpOworICAgIG5yZl9yYWRpb19jY2FfZWRfdGhyZXNob2xkX3NldChSQURJT19DQ0FfRURfVEhSRVNIT0xEKTsKKyAgICBucmZfcmFkaW9fY2NhX2NvcnJfdGhyZXNob2xkX3NldChSQURJT19DQ0FfQ09SUl9USFJFU0hPTEQpOworICAgIG5yZl9yYWRpb19jY2FfY29ycl9jb3VudGVyX3NldChSQURJT19DQ0FfQ09SUl9MSU1JVCk7CisKKyAgICAvLyBDb25maWd1cmUgTUFDIEhlYWRlciBNYXRjaCBVbml0CisgICAgbnJmX3JhZGlvX21obXVfc2VhcmNoX3BhdHRlcm5fc2V0KDApOworICAgIG5yZl9yYWRpb19taG11X3BhdHRlcm5fbWFza19zZXQoTUhNVV9NQVNLKTsKKworICAgIG5yZl9yYWRpb19pbnRfZW5hYmxlKE5SRl9SQURJT19JTlRfRlJBTUVTVEFSVF9NQVNLKTsKKyAgICBucmZfcmFkaW9faW50X2VuYWJsZShOUkZfUkFESU9fSU5UX0VORF9NQVNLKTsKKyAgICBucmZfcmFkaW9faW50X2VuYWJsZShOUkZfUkFESU9fSU5UX0RJU0FCTEVEX01BU0spOworI2lmICFSQURJT19TSE9SVF9DQ0FJRExFX1RYRU4KKyAgICBucmZfcmFkaW9faW50X2VuYWJsZShOUkZfUkFESU9fSU5UX0NDQUlETEVfTUFTSyk7CisjZW5kaWYKKyAgICBucmZfcmFkaW9faW50X2VuYWJsZShOUkZfUkFESU9fSU5UX0NDQUJVU1lfTUFTSyk7CisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9SRUFEWV9NQVNLKTsKKyAgICBucmZfcmFkaW9faW50X2VuYWJsZShOUkZfUkFESU9fSU5UX0JDTUFUQ0hfTUFTSyk7CisgICAgbnJmX3JhZGlvX2ludF9lbmFibGUoTlJGX1JBRElPX0lOVF9FREVORF9NQVNLKTsKK30KKworLy8vIFJlc2V0IHJhZGlvIHBlcmlwaGVyYWwKK3N0YXRpYyB2b2lkIG5yZl9yYWRpb19yZXNldCh2b2lkKQoreworICAgIG5yZl9yYWRpb19wb3dlcl9zZXQoZmFsc2UpOworICAgIG5yZl9yYWRpb19wb3dlcl9zZXQodHJ1ZSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9SQURJT19SRVNFVCwgMCk7Cit9CisKKy8vLyBJbml0aWFsaXplIGludGVycnVwdHMgZm9yIHJhZGlvIHBlcmlwaGVyYWwKK3N0YXRpYyB2b2lkIGlycV9pbml0KHZvaWQpCit7CisgICAgTlZJQ19TZXRQcmlvcml0eShSQURJT19JUlFuLCBSQURJT19JUlFfUFJJT1JJVFkpOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFJBRElPX0lSUW4pOworICAgIE5WSUNfRW5hYmxlSVJRKFJBRElPX0lSUW4pOworfQorCisvLy8gRGVpbml0aWFsaXplIGludGVycnVwdHMgZm9yIHJhZGlvIHBlcmlwaGVyYWwKK3N0YXRpYyB2b2lkIGlycV9kZWluaXQodm9pZCkKK3sKKyAgICBOVklDX0Rpc2FibGVJUlEoUkFESU9fSVJRbik7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUkFESU9fSVJRbik7CisgICAgTlZJQ19TZXRQcmlvcml0eShSQURJT19JUlFuLCAwKTsKKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBFbmVyZ3kgZGV0ZWN0aW9uIG1hbmFnZW1lbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIFNldHVwIG5leHQgaXRlcmF0aW9uIG9mIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlLgorICoKKyAqICBFbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSBpcyBwZXJmb3JtZWQgaW4gaXRlcmF0aW9ucyB0byBtYWtlIHN1cmUgaXQgaXMgcGVyZm9ybWVkIGZvciByZXF1ZXN0ZWQKKyAqICB0aW1lIHJlZ2FyZGxlc3MgcmFkaW8gYXJiaXRyYXRpb24uCisgKgorICogIEBwYXJhbVtpbl0gIFJlbWFpbmluZyB0aW1lIG9mIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlIFt1c10uCisgKgorICogIEByZXR2YWwgIHRydWUgICBOZXh0IGl0ZXJhdGlvbiBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSB3aWxsIGJlIHBlcmZvcm1lZCBub3cuCisgKiAgQHJldHZhbCAgZmFsc2UgIE5leHQgaXRlcmF0aW9uIG9mIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlIHdpbGwgbm90IGJlIHBlcmZvcm1lZCBub3cgZHVlIHRvCisgKiAgICAgICAgICAgICAgICAgIGVuZGluZyB0aW1lc2xvdC4KKyAqLworc3RhdGljIGlubGluZSBib29sIGVkX2l0ZXJfc2V0dXAodWludDMyX3QgdGltZV91cykKK3sKKyAgICB1aW50MzJfdCB1c19sZWZ0X2luX3RpbWVzbG90ID0gbnJmX3JhYWxfdGltZXNsb3RfdXNfbGVmdF9nZXQoKTsKKyAgICB1aW50MzJfdCBuZXh0X2VkX2l0ZXJzICAgICAgID0gdXNfbGVmdF9pbl90aW1lc2xvdCAvIEVEX0lURVJfRFVSQVRJT047CisKKyAgICBpZiAobmV4dF9lZF9pdGVycyA+IEVEX0lURVJTX09WRVJIRUFEKQorICAgIHsKKyAgICAgICAgbmV4dF9lZF9pdGVycyAtPSBFRF9JVEVSU19PVkVSSEVBRDsKKworICAgICAgICBpZiAoKHRpbWVfdXMgLyBFRF9JVEVSX0RVUkFUSU9OKSA8IG5leHRfZWRfaXRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZWRfdGltZV9sZWZ0ID0gMDsKKyAgICAgICAgICAgIG5leHRfZWRfaXRlcnMgID0gdGltZV91cyAvIEVEX0lURVJfRFVSQVRJT047CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtX2VkX3RpbWVfbGVmdCA9IHRpbWVfdXMgLSAobmV4dF9lZF9pdGVycyAqIEVEX0lURVJfRFVSQVRJT04pOworICAgICAgICAgICAgbmV4dF9lZF9pdGVycy0tOyAvLyBUaW1lIG9mIEVEIHByb2NlZHVyZSBpcyAobmV4dF9lZF9pdGVycyArIDEpICogMTI4dXMKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9yYWRpb19lZF9sb29wX2NvdW50X3NldChuZXh0X2VkX2l0ZXJzKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaXJxX2RlaW5pdCgpOworICAgICAgICBucmZfcmFkaW9fcmVzZXQoKTsKKworICAgICAgICBtX2VkX3RpbWVfbGVmdCA9IHRpbWVfdXM7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBSQUFMIG5vdGlmaWNhdGlvbiBoYW5kbGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIG5yZl9yYWFsX3RpbWVzbG90X3N0YXJ0ZWQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fVElNRVNMT1RfU1RBUlRFRCk7CisKKyAgICBucmZfcmFkaW9fcmVzZXQoKTsKKyAgICBucmZfcmFkaW9faW5pdCgpOworICAgIGlycV9pbml0KCk7CisKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisKKyAgICBjaGFubmVsX3NldChucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX2dldCgpKTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRElTQUJMRSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0VEOgorICAgICAgICAgICAgaWYgKGVkX2l0ZXJfc2V0dXAobV9lZF90aW1lX2xlZnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRElTQUJMRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1RJTUVTTE9UX1NUQVJURUQpOworfQorCit2b2lkIG5yZl9yYWFsX3RpbWVzbG90X2VuZGVkKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1RJTUVTTE9UX0VOREVEKTsKKworICAgIGlycV9kZWluaXQoKTsKKyAgICBucmZfcmFkaW9fcmVzZXQoKTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzoKKyAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2J1c3lfY2hhbm5lbCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfRElTQUJMSU5HOgorICAgICAgICAgICAgc2xlZXBfc3RhcnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfU0xFRVA6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9FRDoKKyAgICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkuCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfSEVBREVSOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9DQ0E6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfRlJBTUU6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfQUNLOgorICAgICAgICAgICAgbXV0ZXhfbG9jaygpOworICAgICAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fVElNRVNMT1RfRU5ERUQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBzZWN0aW9uIFJBRElPIGludGVycnVwdCBoYW5kbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vLyBUaGlzIGV2ZW50IGlzIGhhbmRsZWQgd2hlbiB0aGUgcmFkaW8gc3RhcnRzIHJlY2VpdmluZyBhIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9mcmFtZXN0YXJ0X3N0YXRlX3dhaXRpbmdfcnhfZnJhbWUodm9pZCkKK3sKKyAgICBpZiAobXV0ZXhfbG9jaygpKQorICAgIHsKKyAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1JYX0hFQURFUik7CisgICAgICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19SWF9JTklUSUFMKTsKKworICAgICAgICBpZiAoKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1WzBdIDwgQUNLX0xFTkdUSCkgfHwKKyAgICAgICAgICAgIChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdVswXSA+IE1BWF9QQUNLRVRfU0laRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9CQ01BVENIKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19SU1NJU1RBUlQpOworCisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X3N0YXJ0ZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAobnJmX3JhZGlvX3N0YXRlX2dldCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfUlg6CisKKyAgICAgICAgLy8gSWYgdGhlIHJlY2VpdmVkIGZyYW1lIHdhcyBzaG9ydCB0aGUgcmFkaW8gY291bGQgaGF2ZSBjaGFuZ2VkIGl0J3Mgc3RhdGUuCisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0lETEU6CisKKyAgICAgICAgLy8gVGhlIHJhZGlvIGNvdWxkIGhhdmUgY2hhbmdlZCBzdGF0ZSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBkdWUgdG8gZW5hYmxlZCBzaG9ydHMuCisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0RJU0FCTEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9SVToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIElmIHNvbWV0aGluZyBoYWQgc3RvcHBlZCB0aGUgQ1BVIHRvbyBsb25nLiBUcnkgdG8gcmVjb3ZlciByYWRpbyBzdGF0ZS4KKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfSURMRToKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfRElTQUJMRToKKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9CQ01BVENIKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorfQorCisvLy8gVGhpcyBldmVudCBpcyBoYW5kbGVkIHdoZW4gdGhlIHJhZGlvIHN0YXJ0cyByZWNlaXZpbmcgYW4gQUNLIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9mcmFtZXN0YXJ0X3N0YXRlX3J4X2Fjayh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKworICAgIGlmICgobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHVbMF0gPCBBQ0tfTEVOR1RIKSB8fAorICAgICAgICAobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHVbMF0gPiBNQVhfUEFDS0VUX1NJWkUpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKCk7CisKKyAgICAgICAgZnJhbWVfcnhfc3RhcnRfYWZ0ZXJfYWNrX3J4KCk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsgLy8gSW4gY2FzZSBmcmFtZSBlbmRlZCBiZWZvcmUgdGFzayBESVNBQkxFCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfUlNTSVNUQVJUKTsKKyAgICB9Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGhhbmRsZWQgd2hlbiB0aGUgcmFkaW8gc3RhcnRzIHRyYW5zbWl0dGluZyBhIHJlcXVlc3RlZCBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZnJhbWVzdGFydF9zdGF0ZV90eF9mcmFtZSh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfdHhfc3RhcnRlZCgpOworfQorCisvLy8gVGhpcyBldmVudCBpcyBoYW5kbGVkIHdoZW4gTUhSIGlzIHJlY2VpdmVkCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2JjbWF0Y2hfbWhyKHZvaWQpCit7CisgICAgLy8gVmVyaWZ5IGlmIHRpbWUgc2xvdCBmb3IgcmVjZWl2aW5nIGlzIGF2YWlsYWJsZS4KKyAgICBpZiAobnJmX3JhYWxfdGltZXNsb3RfcmVxdWVzdChucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2R1cmF0aW9uX2dldCgKKyAgICAgICAgICAgIG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1WzBdLAorICAgICAgICAgICAgYWNrX2lzX3JlcXVlc3RlZChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdSkpKSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIEZyYW1lIENvbnRyb2wgZmllbGQuCisgICAgICAgIHN3aXRjaCAobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHVbRlJBTUVfVFlQRV9PRkZTRVRdICYgRlJBTUVfVFlQRV9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEZSQU1FX1RZUEVfQkVBQ09OOgorICAgICAgICAgICAgICAgIC8vIEJlYWNvbiBpcyBicm9hZGNhc3QgZnJhbWUuCisgICAgICAgICAgICAgICAgbV9mbGFncy5wcmV2ZW50X2FjayA9IGZhbHNlOworICAgICAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9SWF9GUkFNRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRlJBTUVfVFlQRV9EQVRBOgorICAgICAgICAgICAgY2FzZSBGUkFNRV9UWVBFX0NPTU1BTkQ6CisKKyAgICAgICAgICAgICAgICAvLyBGb3IgZGF0YSBvciBjb21tYW5kIGNoZWNrIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgc3dpdGNoIChtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdVtERVNUX0FERFJfVFlQRV9PRkZTRVRdICYKKyAgICAgICAgICAgICAgICAgICAgICAgIERFU1RfQUREUl9UWVBFX01BU0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIERFU1RfQUREUl9UWVBFX1NIT1JUOgorICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3JhZGlvX2JjY19zZXQoQkNDX1NIT1JUX0FERFIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBERVNUX0FERFJfVFlQRV9FWFRFTkRFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19iY2Nfc2V0KEJDQ19FWFRFTkRFRF9BRERSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorCisgICAgICAgICAgICAgICAgLy8gRm9yIEFDSyBhbmQgb3RoZXIgdHlwZXM6IGluIHByb21pc2N1b3VzIG1vZGUgYWNjZXB0IGl0IGFzIGJyb2FkY2FzdDsKKyAgICAgICAgICAgICAgICAvLyBpbiBub3JtYWwgbW9kZSBkcm9wIHRoZSBmcmFtZS4KKyAgICAgICAgICAgICAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfZ2V0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX2ZsYWdzLnByZXZlbnRfYWNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlycV9kZWluaXQoKTsKKyAgICAgICAgbnJmX3JhZGlvX3Jlc2V0KCk7CisKKyAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1QpOworICAgIH0KK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gZGVzdGluYXRpb24gYWRkcmVzcyBmaWVsZHMgYXJlIHJlY2VpdmVkLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9iY21hdGNoX2FkZHJlc3Modm9pZCkKK3sKKyAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfZGVzdF9hZGRyX21hdGNoZXMobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHUpKQorICAgIHsKKyAgICAgICAgbV9mbGFncy5wcmV2ZW50X2FjayA9IGZhbHNlOworICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfUlhfRlJBTUUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZmxhZ3MucHJldmVudF9hY2sgPSB0cnVlOworICAgICAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1JYX0ZSQU1FKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB0d2ljZSBkdXJpbmcgZnJhbWUgcmVjZXB0aW9uOgorICogIHdoZW4gTUhSIGlzIHJlY2VpdmVkIGFuZCB3aGVuIGRlc3RpbmF0aW9uIGFkZHJlc3MgZmllbGRzIGFyZSByZWNlaXZlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlycV9iY21hdGNoX3N0YXRlX3J4X2hlYWRlcih2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19SWF9JTklUSUFMKTsKKworICAgIHN3aXRjaCAobnJmX3JhZGlvX3N0YXRlX2dldCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfUlg6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0lETEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0RJU0FCTEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9SVTogICAgICAvLyBBIGxvdCBvZiBzdGF0ZXMgZHVlIHRvIHNob3J0cy4KKworICAgICAgICAgICAgc3dpdGNoIChucmZfcmFkaW9fYmNjX2dldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgQkNDX0lOSVQ6IC8vIFJlY2VpdmVkIE1IUgorICAgICAgICAgICAgICAgICAgICBpcnFfYmNtYXRjaF9taHIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEJDQ19TSE9SVF9BRERSOiAgICAgLy8gUmVjZWl2ZWQgc2hvcnQgZGVzdGluYXRpb24gYWRkcmVzcworICAgICAgICAgICAgICAgIGNhc2UgQkNDX0VYVEVOREVEX0FERFI6ICAvLyBSZWNlaXZlZCBleHRlbmRlZCBkZXN0aW5hdGlvbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGRlc3RpbmF0aW9uIGFkZHJlc3MgZHVyaW5nIHNlY29uZCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgaXJxX2JjbWF0Y2hfYWRkcmVzcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX0lETEU6CisgICAgICAgICAgICAvLyBTb21ldGhpbmcgaGFkIHN0b3BwZWQgdGhlIENQVSB0b28gbG9uZy4gU3RhcnQgcmVjZWl2aW5nIGFnYWluLgorICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmFkaW8gcmVjZWl2ZXMgaW52YWxpZCBmcmFtZSB3aXRoIGxlbmd0aCBzZXQgdG8gMCBvciBzdGFydGVkCisgKiAgcmVjZWl2aW5nIGEgZnJhbWUgYWZ0ZXIgb3RoZXIgcHJvY2VkdXJlIGxvY2tlZCBtdXRleC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlycV9lbmRfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSh2b2lkKQoreworICAgIC8vIFJhZGlvIHN0YXRlIGlzIG5vdCBhc3NlcnRlZCBoZXJlLiBJdCBjYW4gYmUgYSBsb3Qgb2Ygc3RhdGVzIGR1ZSB0byBzaG9ydHMuCisgICAgaWYgKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1WzBdID09IDApCisgICAgeworICAgICAgICAvLyBJZiBsZW5ndGggb2YgdGhlIGZyYW1lIGlzIDAgdGhlcmUgd2FzIG5vIEZSQU1FU1RBUlQgZXZlbnQuIExvY2sgbXV0ZXggbm93IGFuZCBhYm9ydCBzZW5kaW5nIEFDSy4KKyAgICAgICAgaWYgKG11dGV4X2xvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1JYX0lOSVRJQUwpOworICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBEbyBub3RoaW5nLiBXaG9ldmVyIHRvb2sgbXV0ZXggc2hhbGwgc3RvcCBzZW5kaW5nIEFDSy4KKyAgICB9Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBpZiBmcmFtZSBiZWluZyByZWNlaXZlZCBpcyBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQgTUFDIGhlYWRlciBsZW5ndGguCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2VuZF9zdGF0ZV9yeF9oZWFkZXIodm9pZCkKK3sKKyAgICAvLyBGcmFtZSBlbmRlZCBiZWZvcmUgaGVhZGVyIHdhcyByZWNlaXZlZC4KKyAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmFkaW8gcGVyaXBoZXJhbCBlbmRzIHJlY2VpdmluZyBvZiBhIGNvbXBsZXRlIGZyYW1lLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9lbmRfc3RhdGVfcnhfZnJhbWUodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfUlhfSU5JVElBTCk7CisKKyAgICBzd2l0Y2ggKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSkKKyAgICB7CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0lETEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0RJU0FCTEU6CisgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9SVToKKworICAgICAgICAgICAgaWYgKG5yZl9yYWRpb19jcmNfc3RhdHVzX2dldCgpID09IE5SRl9SQURJT19DUkNfU1RBVFVTX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoIWFja19pc19yZXF1ZXN0ZWQobXBfY3VycmVudF9yeF9idWZmZXItPnBzZHUpKSB8fAorICAgICAgICAgICAgICAgICAgICAoIW5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2F1dG9fYWNrX2dldCgpKSB8fAorICAgICAgICAgICAgICAgICAgICBtX2ZsYWdzLnByZXZlbnRfYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICAgICAgICAgICAgICByZWNlaXZlZF9mcmFtZV9ub3RpZnkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWNrX3ByZXBhcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1RYX0FDSyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9JRExFOgorICAgICAgICAgICAgLy8gQ1BVIHdhcyBob2xkIHRvbyBsb25nLgorICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgIH0KK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHJhZGlvIGVuZHMgdHJhbnNtaXNzaW9uIG9mIEFDSyBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZW5kX3N0YXRlX3R4X2Fjayh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19UWF9BQ0spOworICAgIHNob3J0c19kaXNhYmxlKCk7CisKKyAgICByZWNlaXZlZF9mcmFtZV9ub3RpZnkoKTsKKworICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAvLyBSZWNlaXZlciBpcyBlbmFibGVkIGJ5IHNob3J0cy4KK30KKworLyoqIFRoaXMgZXZlbnQgbWF5IG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdHJhbnNtaXNzaW9uIHByb2NlZHVyZSAodGhlIHByb2NlZHVyZSBhbHJlYWR5IGhhcworICogIGRpc2FibGVkIHNob3J0cykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZW5kX3N0YXRlX2NjYSh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKK30KKworLy8vIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHJhZGlvIGVuZHMgdHJhbnNtaXNzaW9uIG9mIGEgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2VuZF9zdGF0ZV90eF9mcmFtZSh2b2lkKQoreworICAgIHNob3J0c19kaXNhYmxlKCk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworCisgICAgaWYgKCFhY2tfaXNfcmVxdWVzdGVkKG1wX3R4X2RhdGEpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfdHJhbnNtaXR0ZWQoTlVMTCwgMCwgMCk7CisKKyAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfUlhfQUNLKTsKKworICAgICAgICBhY2tfbWF0Y2hpbmdfZW5hYmxlKCk7CisgICAgfQorCisgICAgLy8gVGFzayBESVNBQkxFIGlzIHRyaWdnZXJlZCBieSBzaG9ydHMuCit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSByYWRpbyBlbmRzIHJlY2VpdmluZyBvZiBBQ0sgZnJhbWUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2VuZF9zdGF0ZV9yeF9hY2sodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfUlhfSURMRSk7CisKKyAgICBpZiAoYWNrX2lzX21hdGNoZWQoKSkKKyAgICB7CisgICAgICAgIG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5mcmVlID0gZmFsc2U7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X3RyYW5zbWl0dGVkKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5wc2R1LCAgICAgICAgICAgICAgICAvLyBwc2R1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzc2lfbGFzdF9tZWFzdXJlbWVudF9nZXQoKSwgICAgICAgICAgICAgICAvLyByc3NpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJYX0ZSQU1FX0xRSShtcF9jdXJyZW50X3J4X2J1ZmZlci0+cHNkdSkpOyAvLyBscWkKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfYnVzeV9jaGFubmVsKCk7CisgICAgfQorCisgICAgZnJhbWVfcnhfc3RhcnRfYWZ0ZXJfYWNrX3J4KCk7Cit9CisKKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHJhZGlvIHBlcmlwaGVyYWwgZGlzYWJsZXMgaW4gb3JkZXIgdG8gZW50ZXIgc2xlZXAgc3RhdGUuCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX2Rpc2FibGluZyh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCk7CisgICAgc2xlZXBfc3RhcnQoKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIGRyaXZlciBlbnRlcnMgcmVjZWl2ZSBzdGF0ZS4KKyAqCisgKiAgVGhlIHJhZGlvIGlzIG5vdyBkaXNhYmxlZCBhbmQgdGhlIGRyaXZlciBzdGFydHMgZW5hYmxpbmcgcmVjZWl2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzYWJsZWRfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKworICAgIHdoaWxlIChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX1RYX0RJU0FCTEUpCisgICAgeworICAgICAgICAvLyBUaGlzIGV2ZW50IGNhbiBiZSBoYW5kbGVkIGluIFRYRElTQUJMRSBzdGF0ZSBkdWUgdG8gZG91YmxlIERJU0FCTEUgZXZlbnQgKElDLTE1ODc5KS4KKyAgICAgICAgLy8gVGhpcyBidXN5IGxvb3Agd2FpdHMgdG8gdGhlIGVuZCBvZiB0aGlzIHN0YXRlLgorICAgIH0KKworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEKTsKKworICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfUlhFTik7CisgICAgbXV0ZXhfdW5sb2NrKCk7CisKKyAgICByeF9idWZmZXJfaW5fdXNlX3NldChucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcl9mcmVlX2ZpbmQoKSk7CisgICAgdHhfcG93ZXJfc2V0KG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3R4X3Bvd2VyX2dldCgpKTsKKworICAgIC8vIENsZWFyIHRoaXMgZXZlbnQgYWZ0ZXIgUlhFTiB0YXNrIGluIGNhc2UgZXZlbnQgaXMgdHJpZ2dlcmVkIGp1c3QgYmVmb3JlLgorICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRElTQUJMRUQpOworfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgaW4gY2FzZSBib3RoIEVORCBhbmQgRElTQUJMRUQgZXZlbnRzIGFyZSBub3RpZmllZCBiZXR3ZWVuCisgKiAgY2hlY2tpbmcgaWYgRU5EIGV2ZW50IHdhcyBub3RpZmllZCBhbmQgY2hlY2tpbmcgaWYgRElTQUJMRUQgZXZlbnQgd2FzIG5vdGlmaWVkLgorICoKKyAqICBJbiB0aGlzIGludmFsaWQgYW5kIHJhcmUgY2FzZSBqdXN0IGRyb3AgcmVjZWl2ZWQgZnJhbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzYWJsZWRfc3RhdGVfcnhfZnJhbWUodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfRU5EKSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1JYX0lOSVRJQUwpOworCisgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgZHVyaW5nIGF1dG9tYXRpYyBBQ0sgdHJhbnNtaXNzaW9uLgorICoKKyAqICBSZWNlaXZlciBpcyBkaXNhYmxlZCBhbmQgdHJhbnNtaXR0ZXIgaXMgYmVpbmcgZW5hYmxlZCBieSBzaG9ydHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzYWJsZWRfc3RhdGVfdHhfYWNrKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1JYX0lOSVRJQUwpOworCisgICAgc2hvcnRzX3J4X2ZvbGxvd2luZ19zZXQoKTsKKyAgICBhY2tfcGVuZGluZ19iaXRfc2V0KCk7CisKKyAgICAvLyBJQy0xNTg3OQorICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRElTQUJMRUQpOworCisgICAgaWYgKG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfVFhfSURMRSkKKyAgICB7CisgICAgICAgIC8vIENQVSB3YXMgaG9sZCB0b28gbG9uZy4KKyAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworICAgIH0KK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGJlZm9yZSBDQ0EgcHJvY2VkdXJlIHN0YXJ0cy4KKyAqCisgKiAgVGhlIHJhZGlvIGlzIGRpc2FibGVkIGFuZCB0aGUgZHJpdmVycyBlbmFibGVzIHJlY2VpdmVyIGluIG9yZGVyIHRvIHN0YXJ0IENDQSBwcm9jZWR1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzYWJsZWRfc3RhdGVfY2NhKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEKTsKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX1JYRU4pOworfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgYmVmb3JlIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lIHN0YXJ0cy4KKyAqCisgKiAgVGhlIHJhZGlvIGlzIGRpc2FibGVkIGFuZCBlbmFibGluZyB0cmFuc21pdHRlciBpcyByZXF1ZXN0ZWQgYnkgc2hvcnRzIG9yIGJ5IHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzYWJsZWRfc3RhdGVfdHhfZnJhbWUodm9pZCkKK3sKKyAgICBpZiAobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCkKKyAgICB7CisgICAgICAgIHNob3J0c190eF9mcmFtZV9zZXQoKTsKKyAgICAgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19UWEVOKTsKKyAgICB9CisKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfVFhfRlJBTUUpOworfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiByYWRpbyBpcyBkaXNhYmxlZCBhZnRlciB0cmFuc21pc3Npb24gb2YgYSBmcmFtZSB3aXRoIEFDSyByZXF1ZXN0LgorICoKKyAqICBUaGUgZHJpdmVyIGVuYWJsZXMgcmVjZWl2ZXIgdG8gcmVjZWl2ZSBBQ0sgZnJhbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZGlzYWJsZWRfc3RhdGVfcnhfYWNrKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEKTsKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX1JYRU4pOworCisgICAgaWYgKG1wX2N1cnJlbnRfcnhfYnVmZmVyID09IE5VTEwgfHwgKCFtcF9jdXJyZW50X3J4X2J1ZmZlci0+ZnJlZSkpCisgICAgeworICAgICAgICByeF9idWZmZXJfaW5fdXNlX3NldChucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcl9mcmVlX2ZpbmQoKSk7CisgICAgfQorfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgYmVmb3JlIGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlLgorICoKKyAqICBUaGUgcmFkaW8gaXMgZGlzYWJsZWQgYW5kIHRoZSBkcml2ZXIgZW5hYmxlcyByZWNlaXZlciBpbiBvcmRlciB0byBzdGFydCBlbmVyZ3kgZGV0ZWN0aW9uCisgKiAgcHJvY2VkdXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2Rpc2FibGVkX3N0YXRlX2VkKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX0RJU0FCTEVEKTsKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX1JYRU4pOworfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiByZWNlaXZlciBpcyByZWFkeSB0byBzdGFydCByZWNlaXZpbmcgYSBmcmFtZS4KKyAqCisgKiAgRHJpdmVyIGNoZWNrcyBpZiBidWZmZXIgZm9yIGEgZnJhbWUgaXMgYXZhaWxhYmxlIGFuZCBzdGFydHMgcmVjZWl2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVhZHlfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSh2b2lkKQoreworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9SWF9JRExFKTsKKworICAgIGlmICgobXBfY3VycmVudF9yeF9idWZmZXIgIT0gTlVMTCkgJiYgKG1wX2N1cnJlbnRfcnhfYnVmZmVyLT5mcmVlKSkKKyAgICB7CisgICAgICAgIGlmIChtdXRleF9sb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNob3J0c19yeF9pbml0aWFsX3NldCgpOworICAgICAgICAgICAgcnhfZnJhbWVfc3RhcnQoKTsKKworICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHRyYW5zbWl0dGVyIGlzIHJlYWR5IHRvIHRyYW5zbWl0IEFDSyBmcmFtZS4KKyAqCisgKiAgVHJhbnNtaXNzaW9uIGlzIHN0YXJ0ZWQgYnkgc2hvcnRzLiBUaGUgZHJpdmVyIHNldHMgc2hvcnRzIHRvIGdyYWNlZnVsbHkgZW5kIHRyYW5zbWlzc2lvbiBvZiBBQ0suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVhZHlfc3RhdGVfdHhfYWNrKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1JYX0ZPTExPV0lORyk7CisgICAgc2hvcnRzX3R4X2Fja19zZXQoKTsKK30KKworLyoqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gcmVjZWl2ZXIgaXMgcmVhZHkgdG8gc3RhcnQgQ0NBIHByb2NlZHVyZS4KKyAqCisgKiAgVGhlIGRyaXZlciBwcmVwYXJlcyBmb3IgdHJhbnNtaXNzaW9uIGFuZCBzdGFydHMgQ0NBIHByb2NlZHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlycV9yZWFkeV9zdGF0ZV9jY2Eodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfUlhfSURMRSk7CisKKyAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfVFhfRlJBTUUpOworCisgICAgc2hvcnRzX3R4X2ZyYW1lX3NldCgpOworICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfQ0NBU1RBUlQpOworfQorCisvKiogVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiB0cmFuc21pdHRlciBpcyByZWFkeSB0byB0cmFuc21pdCBhIGZyYW1lLgorICoKKyAqICBUcmFuc21pc3Npb24gaXMgc3RhcnRlZCBieSBzaG9ydHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVhZHlfc3RhdGVfdHhfZnJhbWUodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfVFhfRlJBTUUpOworfQorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiByZWNlaXZlciBpcyByZWFkeSB0byByZWNlaXZlIGFuIEFDSyBmcmFtZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVhZHlfc3RhdGVfcnhfYWNrKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChucmZfcmFkaW9fc3RhdGVfZ2V0KCkgPT0gTlJGX1JBRElPX1NUQVRFX1JYX0lETEUpOworCisgICAgaWYgKG1wX2N1cnJlbnRfcnhfYnVmZmVyID09IE5VTEwgfHwgKCFtcF9jdXJyZW50X3J4X2J1ZmZlci0+ZnJlZSkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9idXN5X2NoYW5uZWwoKTsKKyAgICAgICAgZnJhbWVfcnhfc3RhcnRfYWZ0ZXJfYWNrX3J4KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJ4X3N0YXJ0KCk7CisgICAgfQorfQorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiByZWNlaXZlciBpcyByZWFkeSB0byBzdGFydCBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfcmVhZHlfc3RhdGVfZWQodm9pZCkKK3sKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zdGF0ZV9nZXQoKSA9PSBOUkZfUkFESU9fU1RBVEVfUlhfSURMRSk7CisgICAgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihOUkZfUkFESU9fVEFTS19FRFNUQVJUKTsKK30KKworI2lmICFSQURJT19TSE9SVF9DQ0FJRExFX1RYRU4KKy8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIENDQSByZXBvcnRzIHRoYXQgY2hhbm5lbCBpcyBpZGxlLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9jY2FpZGxlKHZvaWQpCit7CisgICAgYXNzZXJ0KG1fc3RhdGUgPT0gUkFESU9fU1RBVEVfVFhfRlJBTUUpOworICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19UWF9GUkFNRSk7CisKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworfQorI2VuZGlmIC8vIFJBRElPX1NIT1JUX0NDQUlETEVfVFhFTgorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBDQ0EgcmVwb3J0cyBidXN5IGNoYW5uZWwgcHJpb3IgdG8gdHJhbnNtaXNzaW9uLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9jY2FidXN5X3N0YXRlX3R4X2ZyYW1lKHZvaWQpCit7CisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX1RYX0ZSQU1FKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9SWF9JRExFKTsKKworICAgIHNob3J0c19kaXNhYmxlKCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9idXN5X2NoYW5uZWwoKTsKKworICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICBucmZfcmFkaW9fdGFza190cmlnZ2VyKE5SRl9SQURJT19UQVNLX0RJU0FCTEUpOworfQorCisvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZSBlbmRzLgorc3RhdGljIGlubGluZSB2b2lkIGlycV9lZGVuZCh2b2lkKQoreworICAgIGFzc2VydChtX3N0YXRlID09IFJBRElPX1NUQVRFX0VEKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3N0YXRlX2dldCgpID09IE5SRl9SQURJT19TVEFURV9SWF9JRExFKTsKKyAgICBhc3NlcnQobnJmX3JhZGlvX3Nob3J0c19nZXQoKSA9PSBTSE9SVFNfSURMRSk7CisKKyAgICB1aW50MzJfdCByZXN1bHQgPSBucmZfcmFkaW9fZWRfc2FtcGxlX2dldCgpOworICAgIG1fZWRfcmVzdWx0ICAgICA9IHJlc3VsdCA+IG1fZWRfcmVzdWx0ID8gcmVzdWx0IDogbV9lZF9yZXN1bHQ7CisKKyAgICBpZiAobV9lZF90aW1lX2xlZnQpCisgICAgeworICAgICAgICBpZiAoZWRfaXRlcl9zZXR1cChtX2VkX3RpbWVfbGVmdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRURTVEFSVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfZW5lcmd5X2RldGVjdGVkKG1fZWRfcmVzdWx0KTsKKworICAgICAgICBzdGF0ZV9zZXQoUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSk7CisgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRElTQUJMRSk7CisgICAgfQorfQorCisvLy8gSGFuZGxlciBvZiByYWRpbyBpbnRlcnJ1cHRzLgordm9pZCBSQURJT19JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0lSUV9IQU5ETEVSKTsKKworICAgIGlmIChucmZfcmFkaW9fZXZlbnRfZ2V0KE5SRl9SQURJT19FVkVOVF9GUkFNRVNUQVJUKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9FVkVOVF9GUkFNRVNUQVJUKTsKKyAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9GUkFNRVNUQVJUKTsKKworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZnJhbWVzdGFydF9zdGF0ZV93YWl0aW5nX3J4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfQUNLOgorICAgICAgICAgICAgICAgIGlycV9mcmFtZXN0YXJ0X3N0YXRlX3J4X2FjaygpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0ZSQU1FOgorICAgICAgICAgICAgICAgIGlycV9mcmFtZXN0YXJ0X3N0YXRlX3R4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfQUNLOgorICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9DQ0E6IC8vIFRoaXMgY291bGQgaGFwcGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdHJhbnNtaXNzaW9uIHByb2NlZHVyZS4KKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRVZFTlRfRlJBTUVTVEFSVCk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgTUFDIGZyYW1lIGhlYWRlci4KKyAgICBpZiAobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRVZFTlRfQkNNQVRDSCk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCk7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICAgICAgICAgICAgICBpcnFfYmNtYXRjaF9zdGF0ZV9yeF9oZWFkZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOiAvLyBEaWRuJ3QgbG9jayBtdXRleCAtIG90aGVyIHByb2NlZHVyZSBtYW5hZ2VzIHJhZGlvLgorICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UOiAvLyBSYWRpbyBpcyBvdXQgb2YgdGltZXNsb3Qgbm93LgorICAgICAgICAgICAgICAgIGFzc2VydChtX211dGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRVZFTlRfQkNNQVRDSCk7CisgICAgfQorCisgICAgaWYgKG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0VORCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRVZFTlRfRU5EKTsKKyAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworCisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOgorICAgICAgICAgICAgICAgIGlycV9lbmRfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICAgICAgICAgICAgICBpcnFfZW5kX3N0YXRlX3J4X2hlYWRlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0ZSQU1FOgorICAgICAgICAgICAgICAgIGlycV9lbmRfc3RhdGVfcnhfZnJhbWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9BQ0s6CisgICAgICAgICAgICAgICAgaXJxX2VuZF9zdGF0ZV90eF9hY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9DQ0E6IC8vIFRoaXMgY291bGQgaGFwcGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdHJhbnNtaXNzaW9uIHByb2NlZHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh0aGUgcHJvY2VkdXJlIGFscmVhZHkgaGFzIGRpc2FibGVkIHNob3J0cykuCisgICAgICAgICAgICAgICAgaXJxX2VuZF9zdGF0ZV9jY2EoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZW5kX3N0YXRlX3R4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfQUNLOiAvLyBFbmRlZCByZWNlaXZpbmcgb2YgQUNLLgorICAgICAgICAgICAgICAgIGlycV9lbmRfc3RhdGVfcnhfYWNrKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgICAgICAvLyBFeGl0IGFzIHNvb24gYXMgcG9zc2libGUgd2hlbiB3YWl0aW5nIGZvciB0aW1lc2xvdC4KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRVZFTlRfRU5EKTsKKyAgICB9CisKKyAgICBpZiAobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfRElTQUJMRUQpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0VWRU5UX0RJU0FCTEVEKTsKKyAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9ESVNBQkxFRCk7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0RJU0FCTElORzoKKyAgICAgICAgICAgICAgICBpcnFfZGlzYWJsZWRfc3RhdGVfZGlzYWJsaW5nKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfZGlzYWJsZWRfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfRlJBTUU6CisgICAgICAgICAgICAgICAgaXJxX2Rpc2FibGVkX3N0YXRlX3J4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfQUNLOgorICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZF9zdGF0ZV90eF9hY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9DQ0E6CisgICAgICAgICAgICAgICAgaXJxX2Rpc2FibGVkX3N0YXRlX2NjYSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0ZSQU1FOgorICAgICAgICAgICAgICAgIGlycV9kaXNhYmxlZF9zdGF0ZV90eF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0FDSzoKKyAgICAgICAgICAgICAgICBpcnFfZGlzYWJsZWRfc3RhdGVfcnhfYWNrKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfRUQ6CisgICAgICAgICAgICAgICAgaXJxX2Rpc2FibGVkX3N0YXRlX2VkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgICAgICAvLyBFeGl0IGFzIHNvb24gYXMgcG9zc2libGUgd2hlbiB3YWl0aW5nIGZvciB0aW1lc2xvdC4KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRVZFTlRfRElTQUJMRUQpOworICAgIH0KKworICAgIGlmIChucmZfcmFkaW9fZXZlbnRfZ2V0KE5SRl9SQURJT19FVkVOVF9SRUFEWSkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRVZFTlRfUkVBRFkpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfcmVhZHlfc3RhdGVfd2FpdGluZ19yeF9mcmFtZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgICAgICAgICBpcnFfcmVhZHlfc3RhdGVfdHhfYWNrKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfQ0NBOgorICAgICAgICAgICAgICAgIGlycV9yZWFkeV9zdGF0ZV9jY2EoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9GUkFNRToKKyAgICAgICAgICAgICAgICBpcnFfcmVhZHlfc3RhdGVfdHhfZnJhbWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9BQ0s6CisgICAgICAgICAgICAgICAgaXJxX3JlYWR5X3N0YXRlX3J4X2FjaygpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX0VEOgorICAgICAgICAgICAgICAgIGlycV9yZWFkeV9zdGF0ZV9lZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1Q6CisgICAgICAgICAgICAgICAgLy8gRXhpdCBhcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gd2FpdGluZyBmb3IgdGltZXNsb3QuCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX1JFQURZKTsKKyAgICB9CisKKyNpZiAhUkFESU9fU0hPUlRfQ0NBSURMRV9UWEVOCisgICAgaWYgKG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0NDQUlETEUpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX0VWRU5UX0NDQUlETEUpOworICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0NDQUlETEUpOworCisgICAgICAgIGlycV9jY2FpZGxlKCk7CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRVZFTlRfQ0NBSURMRSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobnJmX3JhZGlvX2V2ZW50X2dldChOUkZfUkFESU9fRVZFTlRfQ0NBQlVTWSkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fRVZFTlRfQ0NBQlVTWSk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQ0NBQlVTWSk7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0ZSQU1FOgorICAgICAgICAgICAgICAgIGlycV9jY2FidXN5X3N0YXRlX3R4X2ZyYW1lKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgICAgICAvLyBFeGl0IGFzIHNvb24gYXMgcG9zc2libGUgd2hlbiB3YWl0aW5nIGZvciB0aW1lc2xvdC4KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fRVZFTlRfQ0NBQlVTWSk7CisgICAgfQorCisgICAgaWYgKG5yZl9yYWRpb19ldmVudF9nZXQoTlJGX1JBRElPX0VWRU5UX0VERU5EKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9FVkVOVF9FREVORCk7CisgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRURFTkQpOworCisgICAgICAgIGlycV9lZGVuZCgpOworCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX0VWRU5UX0VERU5EKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9JUlFfSEFORExFUik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gRlNNIHRyYW5zaXRpb24gcmVxdWVzdCBzdWItcHJvY2VkdXJlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogQWJvcnQgdHJhbnNtaXNzaW9uIHByb2NlZHVyZS4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBNQUMgbGF5ZXIgcmVxdWVzdHMgdHJhbnNpdGlvbiBmcm9tIHRyYW5zbWl0IHRvIHJlY2VpdmUgc3RhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0eF9wcm9jZWR1cmVfYWJvcnQodm9pZCkKK3sKKyAgICBzaG9ydHNfZGlzYWJsZSgpOworCisgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworICAgIGFzc2VydChtX211dGV4KTsKKworICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKworICAgIHN3aXRjaCAobnJmX3JhZGlvX3N0YXRlX2dldCgpKQorICAgIHsKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfVFhfRElTQUJMRToKKyAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfUlhfRElTQUJMRToKKyAgICAgICAgICAgIC8vIERvIG5vdCBlbmFibGVkIHJlY2VpdmVyLiBJdCB3aWxsIGJlIGVuYWJsZWQgaW4gRElTQUJMRUQgaGFuZGxlci4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0RJU0FCTEVEKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb190YXNrX3RyaWdnZXIoTlJGX1JBRElPX1RBU0tfRElTQUJMRSk7CisgICAgfQorCisgICAgbnJmX3JhZGlvX21obXVfc2VhcmNoX3BhdHRlcm5fc2V0KDApOworICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfTUhSTUFUQ0gpOworCisgICAgLy8gQ2xlYXIgZXZlbnRzIHRoYXQgY291bGQgaGF2ZSBoYXBwZW5lZCBpbiBjcml0aWNhbCBzZWN0aW9uIGR1ZSB0byByZWNlaXZpbmcgZnJhbWUuCisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9GUkFNRVNUQVJUKTsKKyAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQHNlY3Rpb24gQVBJIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2luaXQodm9pZCkKK3sKKyAgICBjb25zdCB1aW50OF90IGFja19wc2R1W10gPSB7MHgwNSwgQUNLX0hFQURFUl9XSVRIX1BFTkRJTkcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworICAgIG1lbWNweShtX2Fja19wc2R1LCBhY2tfcHNkdSwgc2l6ZW9mKGFja19wc2R1KSk7CisKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9kZWluaXQodm9pZCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UICYmCisgICAgICAgIG1fc3RhdGUgIT0gUkFESU9fU1RBVEVfU0xFRVApCisgICAgeworICAgICAgICBucmZfcmFkaW9fcmVzZXQoKTsKKyAgICB9CisKKyAgICBpcnFfZGVpbml0KCk7Cit9CisKK3JhZGlvX3N0YXRlX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fc3RhdGVfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fc2xlZXAodm9pZCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX3N0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UOgorICAgICAgICAgICAgYXNzZXJ0KG1fbXV0ZXgpOworCisgICAgICAgICAgICBzbGVlcF9zdGFydCgpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRToKKyAgICAgICAgICAgIGlmIChtdXRleF9sb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0b19hY2tfYWJvcnQoUkFESU9fU1RBVEVfRElTQUJMSU5HKTsKKworICAgICAgICAgICAgICAgIGFzc2VydChucmZfcmFkaW9fc2hvcnRzX2dldCgpID09IFNIT1JUU19JRExFKTsKKworICAgICAgICAgICAgICAgIC8vIENsZWFyIGV2ZW50cyB0aGF0IGNvdWxkIGhhdmUgaGFwcGVuZWQgaW4gY3JpdGljYWwgc2VjdGlvbiBkdWUgdG8gcmVjZWl2aW5nIGZyYW1lCisgICAgICAgICAgICAgICAgLy8gb3IgUlggcmFtcCB1cC4KKyAgICAgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0ZSQU1FU1RBUlQpOworICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCk7CisgICAgICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9FTkQpOworICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfUkVBRFkpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9IRUFERVI6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfRlJBTUU6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfQUNLOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7IC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9yZWNlaXZlKHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX3N0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0hFQURFUjoKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9SWF9GUkFNRToKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9UWF9BQ0s6CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworCisgICAgICAgICAgICBpZiAoY2hhbm5lbF9nZXQoKSAhPSBjaGFubmVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYW5uZWxfc2V0KGNoYW5uZWwpOworICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfc2V0KGNoYW5uZWwpOworICAgICAgICAgICAgICAgIGlmIChtdXRleF9sb2NrKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfRElTQUJMSU5HOgorICAgICAgICAgICAgY2hhbm5lbF9zZXQoY2hhbm5lbCk7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX3NldChjaGFubmVsKTsKKyAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAvLyBUQVNLIERJU0FCTEUgd2FzIGFscmVhZHkgdHJpZ2dlcmVkLiBXYWl0IGZvciBldmVudCBESVNBQkxFRC4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfU0xFRVA6CisgICAgICAgICAgICBhc3NlcnQobXV0ZXhfbG9jaygpKTsKKworICAgICAgICAgICAgc3RhdGVfc2V0KFJBRElPX1NUQVRFX1dBSVRJTkdfVElNRVNMT1QpOworICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9zZXQoY2hhbm5lbCk7CisKKyAgICAgICAgICAgIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9lbnRlcigpOworCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9DQ0E6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfVFhfRlJBTUU6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfQUNLOgorICAgICAgICAgICAgdHhfcHJvY2VkdXJlX2Fib3J0KCk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9FRDoKKyAgICAgICAgICAgIC8vIElnbm9yZSByZWNlaXZlIGZ1bmN0aW9uIGR1cmluZyBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVDoKKyAgICAgICAgICAgIC8vIElnbm9yZSByZWNlaXZlIGZ1bmN0aW9uIGluIFdBSVRJTkdfVElNRVNMT1Qgc3RhdGUgLSB0aGUgcmFkaW8gd2lsbCByZWNlaXZlIHdoZW4gdGltZQorICAgICAgICAgICAgLy8gc2xvdCBzdGFydHMuCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV90cmFuc21pdChjb25zdCB1aW50OF90ICogcF9kYXRhLCB1aW50OF90IGNoYW5uZWwsIGludDhfdCBwb3dlciwgYm9vbCBjY2EpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBtcF90eF9kYXRhICA9IHBfZGF0YTsKKworICAgIGlmIChtdXRleF9sb2NrKCkpCisgICAgeworICAgICAgICBpZiAobnJmX3JhYWxfdGltZXNsb3RfcmVxdWVzdChucmZfZHJ2X3JhZGlvODAyMTU0X3R4X2R1cmF0aW9uX2dldChwX2RhdGFbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFja19pc19yZXF1ZXN0ZWQocF9kYXRhKSkpKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9zdGF0ZSA9PSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FKTsKKworICAgICAgICAgICAgY2hhbm5lbF9zZXQoY2hhbm5lbCk7CisKKyAgICAgICAgICAgIGF1dG9fYWNrX2Fib3J0KGNjYSA/IFJBRElPX1NUQVRFX0NDQSA6IFJBRElPX1NUQVRFX1RYX0ZSQU1FKTsKKworICAgICAgICAgICAgdHhfcG93ZXJfc2V0KHBvd2VyKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19wYWNrZXRfcHRyX3NldChwX2RhdGEpOworCisgICAgICAgICAgICAvLyBDbGVhciBldmVudHMgdGhhdCBjb3VsZCBoYXZlIGhhcHBlbmVkIGluIGNyaXRpY2FsIHNlY3Rpb24gZHVlIHRvIHJlY2VpdmluZyBmcmFtZSBvciBSWCByYW1wIHVwLgorICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9GUkFNRVNUQVJUKTsKKyAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX0VORCk7CisgICAgICAgICAgICBucmZfcmFkaW9fZXZlbnRfY2xlYXIoTlJGX1JBRElPX0VWRU5UX1JFQURZKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgMm5kIHRpbWUgaW4gY2FzZSB0aGlzIHByb2NlZHVyZSB3YXMgaW50ZXJydXB0ZWQuCisgICAgICAgICAgICBpZiAobnJmX3JhYWxfdGltZXNsb3RfcmVxdWVzdCgKKyAgICAgICAgICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF90eF9kdXJhdGlvbl9nZXQocF9kYXRhWzBdLCBhY2tfaXNfcmVxdWVzdGVkKHBfZGF0YSkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlycV9kZWluaXQoKTsKKyAgICAgICAgICAgICAgICBucmZfcmFkaW9fcmVzZXQoKTsKKworICAgICAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG11dGV4X3VubG9jaygpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9lbmVyZ3lfZGV0ZWN0aW9uKHVpbnQ4X3QgdHhfY2hhbm5lbCwgdWludDMyX3QgdGltZV91cykKK3sKKyAgICBib29sICAgICByZXN1bHQgICAgPSBmYWxzZTsKKworICAgIHN3aXRjaCAobV9zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfU0xFRVA6CisgICAgICAgICAgICBpZiAobXV0ZXhfbG9jaygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9FRCk7CisgICAgICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9zZXQodHhfY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgbV9lZF90aW1lX2xlZnQgPSB0aW1lX3VzOworICAgICAgICAgICAgICAgIG1fZWRfcmVzdWx0ICAgID0gMDsKKworICAgICAgICAgICAgICAgIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9lbnRlcigpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1JYX0ZSQU1FOgorICAgICAgICAgICAgaWYgKG11dGV4X2xvY2soKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2VkX3Jlc3VsdCA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoZWRfaXRlcl9zZXR1cCh0aW1lX3VzKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfc2V0KHR4X2NoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBjaGFubmVsX3NldCh0eF9jaGFubmVsKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvX2Fja19hYm9ydChSQURJT19TVEFURV9FRCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpOworCisgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGV2ZW50cyB0aGF0IGNvdWxkIGhhdmUgaGFwcGVuZWQgaW4gY3JpdGljYWwgc2VjdGlvbiBkdWUgdG8gcmVjZWl2aW5nCisgICAgICAgICAgICAgICAgICAgIC8vIGZyYW1lIG9yIFJYIHJhbXAgdXAuCisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRlJBTUVTVEFSVCk7CisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCk7CisgICAgICAgICAgICAgICAgICAgIG5yZl9yYWRpb19ldmVudF9jbGVhcihOUkZfUkFESU9fRVZFTlRfRU5EKTsKKyAgICAgICAgICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlX3NldChSQURJT19TVEFURV9FRCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9ESVNBQkxJTkc6CisgICAgICAgIGNhc2UgUkFESU9fU1RBVEVfUlhfSEVBREVSOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1JYX0ZSQU1FOgorICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1RYX0FDSzoKKyAgICAgICAgY2FzZSBSQURJT19TVEFURV9XQUlUSU5HX1RJTUVTTE9UOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7IC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9ub3RpZnlfYnVmZmVyX2ZyZWUocnhfYnVmZmVyX3QgKiBwX2J1ZmZlcikKK3sKKyAgICBwX2J1ZmZlci0+ZnJlZSA9IHRydWU7CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFJBRElPX1NUQVRFX1dBSVRJTkdfUlhfRlJBTUU6CisKKyAgICAgICAgICAgIHN3aXRjaCAobnJmX3JhZGlvX3N0YXRlX2dldCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0RJU0FCTEU6IC8vIFRoaXMgb25lIGNvdWxkIGhhcHBlbiBhZnRlciByZWNlaXZlIG9mIGJyb2FkY2FzdCBmcmFtZS4KKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9UWF9ESVNBQkxFOiAvLyBUaGlzIG9uZSBjb3VsZCBoYXBwZW4gZHVlIHRvIHN0b3BwaW5nIEFDSy4KKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9ESVNBQkxFRDogICAvLyBUaGlzIG9uZSBjb3VsZCBoYXBwZW4gZHVyaW5nIHN0b3BwaW5nIEFDSy4KKyAgICAgICAgICAgICAgICBjYXNlIE5SRl9SQURJT19TVEFURV9SWF9SVTogICAgICAvLyBUaGlzIG9uZSBjb3VsZCBoYXBwZW4gZHVyaW5nIGVuYWJsaW5nIHJlY2VpdmVyIChhZnRlciBzZW5kaW5nIEFDSykuCisgICAgICAgICAgICAgICAgY2FzZSBOUkZfUkFESU9fU1RBVEVfUlg6ICAgICAgICAgLy8gVGhpcyBvbmUgY291bGQgaGFwcGVuIGlmIGFueSBvdGhlciBidWZmZXIgaXMgaW4gdXNlLgorICAgICAgICAgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX1JVOiAgICAgIC8vIFRoaXMgb25lIGNvdWxkIGhhcHBlbiBpZiByZWNlaXZlZCBhIHNob3J0IGZyYW1lLgorICAgICAgICAgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1RYX0lETEU6ICAgIC8vIFRoaXMgb25lIGNvdWxkIGhhcHBlbiBpZiByZWNlaXZlZCBhIHNob3J0IGZyYW1lLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTlJGX1JBRElPX1NUQVRFX1JYX0lETEU6CisgICAgICAgICAgICAgICAgICAgIC8vIE11dGV4IHRvIG1ha2Ugc3VyZSBSYWRpbyBTdGF0ZSBkaWQgbm90IGNoYW5nZSBiZXR3ZWVuIElSUSBhbmQgdGhpcyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBzaG9ydHMgdG8gbWFrZSBzdXJlIFJYX0lETEUgc3RhdGUgaXMgZHVlIHRvIG9jY3VwaWVkIGJ1ZmZlcnMgLSBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gZHVyaW5nIEVORC9ESVNBQkxFIHNob3J0LgorICAgICAgICAgICAgICAgICAgICAvLyBJZiBBUEkgY2FsbCBjaGFuZ2VkIFJhZGlvIHN0YXRlIGxlYXZlIFJhZGlvIGFzIGl0IGlzLgorICAgICAgICAgICAgICAgICAgICBpZiAobXV0ZXhfbG9jaygpICYmIG5yZl9yYWRpb19zaG9ydHNfZ2V0KCkgPT0gU0hPUlRTX0lETEUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0c19yeF9pbml0aWFsX3NldCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICByeF9idWZmZXJfaW5fdXNlX3NldChwX2J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICByeF9mcmFtZV9zdGFydCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBldmVudHMgdGhhdCBjb3VsZCBoYXZlIGhhcHBlbmVkIGluIGNyaXRpY2FsIHNlY3Rpb24gZHVlIHRvIFJYCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByYW1wIHVwLgorICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKE5SRl9SQURJT19FVkVOVF9SRUFEWSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIERvbid0IHBlcmZvcm0gYW55IGFjdGlvbiBpbiBhbnkgb3RoZXIgc3RhdGUgKHJlY2VpdmVyIHNob3VsZCBub3QgYmUgc3RhcnRlZCkuCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNGYyMTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaApAQCAtMCwwICsxLDE3OSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgY29udGFpbnMgRmluaXRlIFN0YXRlIE1hY2hpbmUgb2YgblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJWX1JBRElPODAyMTU0X0ZTTV9IXworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X0ZTTV9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBicmllZiBTdGF0ZXMgb2YgblJGIDgwMi4xNS40IGRyaXZlci4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgLy8gU2xlZXAKKyAgICBSQURJT19TVEFURV9ESVNBQkxJTkcsICAgICAgICAgLy8gRW50ZXJpbmcgbG93IHBvd2VyIChESVNBQkxFRCkgbW9kZQorICAgIFJBRElPX1NUQVRFX1NMRUVQLCAgICAgICAgICAgICAvLyBMb3cgcG93ZXIgKERJU0FCTEVEKSBtb2RlCisKKyAgICAvLyBSZWNlaXZlCisgICAgUkFESU9fU1RBVEVfV0FJVElOR19USU1FU0xPVCwgIC8vIFJhZGlvIGlzIGluYWN0aXZlIGR1ZSB0byBkZW5pZWQgdGltZSBzbG90CisgICAgUkFESU9fU1RBVEVfV0FJVElOR19SWF9GUkFNRSwgIC8vIFdhaXRpbmcgZm9yIGZyYW1lIGluIHJlY2VpdmVyIG1vZGUKKyAgICBSQURJT19TVEFURV9SWF9IRUFERVIsICAgICAgICAgLy8gUmVjZWl2ZWQgU0ZELCByZWNlaXZpbmcgTUFDIGhlYWRlcgorICAgIFJBRElPX1NUQVRFX1JYX0ZSQU1FLCAgICAgICAgICAvLyBSZWNlaXZlZCBNQUMgZGVzdGluYXRpb24gYWRkcmVzcywgcmVjZWl2aW5nIHJlc3Qgb2YgdGhlIGZyYW1lCisgICAgUkFESU9fU1RBVEVfVFhfQUNLLCAgICAgICAgICAgIC8vIFJlY2VpdmVkIGZyYW1lIGFuZCB0cmFuc21pdHRpbmcgQUNLCisKKyAgICAvLyBUcmFuc21pdAorICAgIFJBRElPX1NUQVRFX0NDQSwgICAgICAgICAgICAgICAvLyBQZXJmb3JtaW5nIENDQQorICAgIFJBRElPX1NUQVRFX1RYX0ZSQU1FLCAgICAgICAgICAvLyBUcmFuc21pdHRpbmcgZGF0YSBmcmFtZSAob3IgYmVhY29uKQorICAgIFJBRElPX1NUQVRFX1JYX0FDSywgICAgICAgICAgICAvLyBSZWNlaXZpbmcgQUNLIGFmdGVyIHRyYW5zbWl0dGVkIGZyYW1lCisKKyAgICAvLyBFbmVyZ3kgRGV0ZWN0aW9uCisgICAgUkFESU9fU1RBVEVfRUQsICAgICAgICAgICAgICAgIC8vIFBlcmZvcm1pbmcgRW5lcmd5IERldGVjdGlvbiBwcm9jZWR1cmUKK30gcmFkaW9fc3RhdGVfdDsKKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSA4MDIuMTUuNCBkcml2ZXIgRlNNLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIERlaW5pdGlhbGl6ZSA4MDIuMTUuNCBkcml2ZXIgRlNNLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2RlaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgR2V0IGN1cnJlbnQgc3RhdGUgb2YgblJGIDgwMi4xNS40IGRyaXZlci4KKyAqCisgKiBAcmV0dXJuICBDdXJyZW50IHN0YXRlIG9mIHRoZSA4MDIuMTUuNCBkcml2ZXIuCisgKi8KK3JhZGlvX3N0YXRlX3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fc3RhdGVfZ2V0KHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBTdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb24gcmVxdWVzdHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCB0cmFuc2l0aW9uIHRvIFNMRUVQIHN0YXRlLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIGZyb20gY3JpdGljYWwgc2VjdGlvbiBjb250ZXh0LiBJdCBzaGFsbCBub3QgYmUgaW50ZXJydXB0ZWQKKyAqICAgICAgIGJ5IFJBRElPIGV2ZW50IGhhbmRsZXIgb3IgUkFBTCBub3RpZmljYXRpb24uCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBpbiBSRUNFSVZFIHN0YXRlLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBFbnRlcmluZyBTTEVFUCBzdGF0ZSBzdWNjZWVkZWQuCisgKiBAcmV0dmFsICBmYWxzZSAgRW50ZXJpbmcgU0xFRVAgc3RhdGUgZmFpbGVkIChkcml2ZXIgaXMgcGVyZm9ybWluZyBvdGhlciBwcm9jZWR1cmUpLgorICovCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3NsZWVwKHZvaWQpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IHRyYW5zaXRpb24gdG8gUkVDRUlWRSBzdGF0ZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBmcm9tIGNyaXRpY2FsIHNlY3Rpb24gY29udGV4dC4gSXQgc2hhbGwgbm90IGJlIGludGVycnVwdGVkCisgKiAgICAgICBieSBSQURJTyBldmVudCBoYW5kbGVyIG9yIFJBQUwgbm90aWZpY2F0aW9uLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgaW4gU0xFRVAgb3IgVFJBTlNNSVQgc3RhdGUuCisgKgorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgdGhhdCB0aGUgcmFkaW8gc2hvdWxkIHVzZSB0byByZWNlaXZlIGZyYW1lcy4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgRW50ZXJpbmcgUkVDRUlWRSBzdGF0ZSBzdWNjZWVkZWQuCisgKiBAcmV0dmFsICBmYWxzZSAgRW50ZXJpbmcgUkVDRUlWRSBzdGF0ZSBmYWlsZWQgKGRyaXZlciBpcyBwZXJmb3JtaW5nIG90aGVyIHByb2NlZHVyZSkuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fcmVjZWl2ZSh1aW50OF90IGNoYW5uZWwpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IHRyYW5zaXRpb24gdG8gVFJBTlNNSVQgc3RhdGUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgZnJvbSBjcml0aWNhbCBzZWN0aW9uIGNvbnRleHQuIEl0IHNoYWxsIG5vdCBiZSBpbnRlcnJ1cHRlZAorICogICAgICAgYnkgUkFESU8gZXZlbnQgaGFuZGxlciBvciBSQUFMIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIGluIFJFQ0VJVkUgc3RhdGUuCisgKgorICogQHBhcmFtW2luXSAgcF9kYXRhICAgUG9pbnRlciB0byBhIGZyYW1lIHRvIHRyYW5zbWl0LgorICogQHBhcmFtW2luXSAgY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIgdGhhdCB0aGUgcmFkaW8gc2hvdWxkIHVzZSB0byB0cmFuc21pdCB0aGUgZnJhbWUuCisgKiBAcGFyYW1baW5dICBwb3dlciAgICBUcmFuc21pc3Npb24gcG93ZXIuCisgKiBAcGFyYW1baW5dICBjY2EgICAgICBJZiB0aGUgZHJpdmVyIHNob3VsZCBwZXJmb3JtIENDQSBwcm9jZWR1cmUgYmVmb3JlIHRyYW5zbWlzc2lvbi4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgRW50ZXJpbmcgVFJBTlNNSVQgc3RhdGUgc3VjY2VlZGVkLgorICogQHJldHZhbCAgZmFsc2UgIEVudGVyaW5nIFRSQU5TTUlUIHN0YXRlIGZhaWxlZCAoZHJpdmVyIGlzIHBlcmZvcm1pbmcgb3RoZXIgcHJvY2VkdXJlKS4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV90cmFuc21pdChjb25zdCB1aW50OF90ICogcF9kYXRhLCB1aW50OF90IGNoYW5uZWwsIGludDhfdCBwb3dlciwgYm9vbCBjY2EpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IHRyYW5zaXRpb24gdG8gRU5FUkdZX0RFVEVDVElPTiBzdGF0ZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBmcm9tIGNyaXRpY2FsIHNlY3Rpb24gY29udGV4dC4gSXQgc2hhbGwgbm90IGJlIGludGVycnVwdGVkCisgKiAgICAgICBieSBSQURJTyBldmVudCBoYW5kbGVyIG9yIFJBQUwgbm90aWZpY2F0aW9uLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgaW4gU0xFRVAgb3IgUkVDRUlWRSBzdGF0ZS4gV2hlbiBFbmVyZ3kKKyAqICAgICAgIGRldGVjdGlvbiBwcm9jZWR1cmUgaXMgZmluaXNoZWQgdGhlIGRyaXZlciB3aWxsIHRyYW5zaXQgdG8gUkVDRUlWRSBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciB0aGF0IHRoZSByYWRpbyBzaG91bGQgdXNlIHRvIHBlcmZvcm0gZW5lcmd5IGRldGVjdGlvbi4KKyAqIEBwYXJhbVtpbl0gIHRpbWVfdXMgIE1pbmltYWwgdGltZSBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgRW50ZXJpbmcgRU5FUkdZX0RFVEVDVElPTiBzdGF0ZSBzdWNjZWVkZWQuCisgKiBAcmV0dmFsICBmYWxzZSAgRW50ZXJpbmcgRU5FUkdZX0RFVEVDVElPTiBzdGF0ZSBmYWlsZWQgKGRyaXZlciBpcyBwZXJmb3JtaW5nIG90aGVyIHByb2NlZHVyZSkuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fZW5lcmd5X2RldGVjdGlvbih1aW50OF90IGNoYW5uZWwsIHVpbnQzMl90IHRpbWVfdXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAc2VjdGlvbiBTdGF0ZSBtYWNoaW5lIG5vdGlmaWNhdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAYnJpZWYgTm90aWZ5IHRoZSBGU00gdGhhdCBoaWdoZXIgbGF5ZXIgZnJlZWQgYSBmcmFtZSBidWZmZXIuCisgKgorICogV2hlbiB0aGVyZSB3ZXJlIG5vIGZyZWUgYnVmZmVycyBhdmFpbGFibGUgdGhlIEZTTSBkb2VzIG5vdCBzdGFydCByZWNlaXZlci4gSWYgRlNNIHJlY2VpdmVzIHRoaXMKKyAqIG5vdGlmaWNhdGlvbiBpbiBjaGFuZ2VzIGludGVybmFsIHN0YXRlIHRvIG1ha2Ugc3VyZSByZWNlaXZlciBpcyBzdGFydGVkIGlmIHJlcXVlc3RlZC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBmcm9tIGNyaXRpY2FsIHNlY3Rpb24gY29udGV4dC4gSXQgc2hhbGwgbm90IGJlIGludGVycnVwdGVkCisgKiAgICAgICBieSBSQURJTyBldmVudCBoYW5kbGVyIG9yIFJBQUwgbm90aWZpY2F0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfYnVmZmVyICBQb2ludGVyIHRvIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIGZyZWVkLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX25vdGlmeV9idWZmZXJfZnJlZShyeF9idWZmZXJfdCAqIHBfYnVmZmVyKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5SRl9EUlZfUkFESU84MDIxNTRfRlNNX0hfICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3ZmNjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9OT1RJRklDQVRJT05fSF9fCisjZGVmaW5lIE5SRl9EUklWRVJfUkFESU84MDIxNTRfTk9USUZJQ0FUSU9OX0hfXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uIDgwMi4xNS40IGRyaXZlciBub3RpZmljYXRpb24KKyAqIEB7CisgKiBAaW5ncm91cCBucmZfZHJpdmVyX3JhZGlvODAyMTU0CisgKiBAYnJpZWYgTm90aWZpY2F0aW9ucyB0byB0aGUgbmV4dCBoaWdoZXIgbGF5ZXIgdHJpZ2dlcmVkIGZyb20gODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICovCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgbm90aWZpY2F0aW9uIG1vZHVsZS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9pbml0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBOb3RpZnkgbmV4dCBoaWdoZXIgbGF5ZXIgdGhhdCBhIGZyYW1lIHdhcyByZWNlaXZlZC4KKyAqCisgKiBAcGFyYW1baW5dICBwX2RhdGEgIEFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgUFNEVS4gRmlyc3QgYnl0ZSBjb250YWlucyBmcmFtZSBsZW5ndGgsIG90aGVyIGNvbnRhaW4gdGhlIGZyYW1lIGl0c2VsZi4KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICAgUlNTSSBtZWFzdXJlZCBkdXJpbmcgdGhlIGZyYW1lIHJlY2VwdGlvbi4KKyAqIEBwYXJhbVtpbl0gIGxxaSAgICAgTFFJIGluZGljYXRpbmcgbWVhc3VyZWQgbGluayBxdWFsaXR5IGR1cmluZyB0aGUgZnJhbWUgcmVjZXB0aW9uLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X3JlY2VpdmVkKHVpbnQ4X3QgKiBwX2RhdGEsIGludDhfdCBwb3dlciwgaW50OF90IGxxaSk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGEgZnJhbWUgd2FzIHRyYW5zbWl0dGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfYWNrICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIFBTRFUgb2YgQUNLIGZyYW1lLiBOVUxMIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICBSU1NJIG9mIHJlY2VpdmVkIGZyYW1lIG9yIDAgaWYgQUNLIHdhcyBub3QgcmVxdWVzdGVkLgorICogQHBhcmFtW2luXSAgbHFpICAgIExRSSBvZiByZWNlaXZlZCBmcmFtZSBvZiAwIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV90cmFuc21pdHRlZCh1aW50OF90ICogcF9hY2ssIGludDhfdCBwb3dlciwgaW50OF90IGxxaSk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGEgZnJhbWUgd2FzIG5vdCB0cmFuc21pdHRlZC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9idXN5X2NoYW5uZWwodm9pZCk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlIGVuZGVkLgorICoKKyAqIEBwYXJhbVtpbl0gIHJlc3VsdCAgRGV0ZWN0ZWQgZW5lcmd5IGxldmVsLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2VuZXJneV9kZXRlY3RlZChpbnQ4X3QgcmVzdWx0KTsKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBOUkZfRFJJVkVSX1JBRElPODAyMTU0X05PVElGSUNBVElPTl9IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9kaXJlY3QuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9kaXJlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2JiZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uX2RpcmVjdC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgbm90aWZpY2F0aW9ucyB0cmlnZ2VyZWQgZGlyZWN0bHkgYnkgdGhlIG5yZiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbi5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NC5oIgorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uX2luaXQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfcmVjZWl2ZWQodWludDhfdCAqIHBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVjZWl2ZWQocF9kYXRhLCBwb3dlciwgbHFpKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV90cmFuc21pdHRlZCh1aW50OF90ICogcF9hY2ssIGludDhfdCBwb3dlciwgaW50OF90IGxxaSkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3RyYW5zbWl0dGVkKHBfYWNrLCBwb3dlciwgbHFpKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9idXN5X2NoYW5uZWwodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2J1c3lfY2hhbm5lbCgpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZ5X2VuZXJneV9kZXRlY3RlZChpbnQ4X3QgcmVzdWx0KQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGVkKHJlc3VsdCk7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9zd2kuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmaWNhdGlvbl9zd2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTljMzc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uX3N3aS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgbm90aWZpY2F0aW9ucyB0cmlnZ2VyZWQgYnkgdGhlIG5yZiA4MDIuMTUuNCByYWRpbyBkcml2ZXIgdmlhIFNXSS4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfbm90aWZpY2F0aW9uLmgiCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3N3aS5oIgorI2luY2x1ZGUgInJhYWwvbnJmX3JhYWxfYXBpLmgiCisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZmljYXRpb25faW5pdCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2luaXQoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9yZWNlaXZlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X3JlY2VpdmVkKHBfZGF0YSwgcG93ZXIsIGxxaSk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfdHJhbnNtaXR0ZWQodWludDhfdCAqIHBfYWNrLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X3RyYW5zbWl0dGVkKHBfYWNrLCBwb3dlciwgbHFpKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X25vdGlmeV9idXN5X2NoYW5uZWwodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfYnVzeV9jaGFubmVsKCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9ub3RpZnlfZW5lcmd5X2RldGVjdGVkKGludDhfdCByZXN1bHQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X2VuZXJneV9kZXRlY3RlZChyZXN1bHQpOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9waWIuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGVkNGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9waWIuYwpAQCAtMCwwICsxLDE3NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyBzdG9yYWdlIG9mIFBJQiBhdHRyaWJ1dGVzIGluIG5SRiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3BpYi5oIgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jb25zdC5oIgorCisjZGVmaW5lIEJST0FEQ0FTVF9BRERSRVNTICAgICgodWludDhfdCBbU0hPUlRfQUREUkVTU19TSVpFXSkgezB4ZmYsIDB4ZmZ9KSAvLy88IEJyb2FkY2FzdCBTaG9ydCBBZGRyZXNzCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50OF90ICB0eF9wb3dlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRyYW5zbWl0IHBvd2VyLgorICAgIHVpbnQ4X3QgcGFuX2lkW1BBTl9JRF9TSVpFXTsgICAgICAgICAgICAgICAgICAgICAgLy8vPCBQYW4gSWQgb2YgdGhpcyBub2RlLgorICAgIHVpbnQ4X3Qgc2hvcnRfYWRkcltTSE9SVF9BRERSRVNTX1NJWkVdOyAgICAgICAgICAgLy8vPCBTaG9ydCBBZGRyZXNzIG9mIHRoaXMgbm9kZS4KKyAgICB1aW50OF90IGV4dGVuZGVkX2FkZHJbRVhURU5ERURfQUREUkVTU19TSVpFXTsgICAgIC8vLzwgRXh0ZW5kZWQgQWRkcmVzcyBvZiB0aGlzIG5vZGUuCisgICAgYm9vbCAgICBwcm9taXNjdW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgOjE7ICAvLy88IEluZGljYXRpbmcgaWYgcmFkaW8gaXMgaW4gcHJvbWlzY3VvdXMgbW9kZS4KKyAgICBib29sICAgIGF1dG9fYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MTsgIC8vLzwgSW5kaWNhdGluZyBpZiBhdXRvIEFDSyBwcm9jZWR1cmUgaXMgZW5hYmxlZC4KKyAgICB1aW50OF90IGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6NTsgIC8vLzwgQ2hhbm5lbCBvbiB3aGljaCB0aGUgbm9kZSByZWNlaXZlcyBtZXNzYWdlcy4KK30gbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfZGF0YV90OworCitzdGF0aWMgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfZGF0YV90IG1fZGF0YTsgIC8vLzwgQnVmZmVyIGNvbnRhaW5pbmcgUElCIGRhdGEuCisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfaW5pdCh2b2lkKQoreworICAgIG1fZGF0YS5wcm9taXNjdW91cyA9IGZhbHNlOworICAgIG1fZGF0YS5hdXRvX2FjayAgICA9IHRydWU7CisgICAgbV9kYXRhLmNoYW5uZWwgICAgID0gMTE7CisKKyAgICBtZW1zZXQobV9kYXRhLnBhbl9pZCwgMHhmZiwgc2l6ZW9mKG1fZGF0YS5wYW5faWQpKTsKKyAgICBtX2RhdGEuc2hvcnRfYWRkclswXSA9IDB4ZmU7CisgICAgbV9kYXRhLnNob3J0X2FkZHJbMV0gPSAweGZmOworICAgIG1lbXNldChtX2RhdGEuZXh0ZW5kZWRfYWRkciwgMCwgc2l6ZW9mKG1fZGF0YS5leHRlbmRlZF9hZGRyKSk7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcHJvbWlzY3VvdXNfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIG1fZGF0YS5wcm9taXNjdW91czsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9wcm9taXNjdW91c19zZXQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZGF0YS5wcm9taXNjdW91cyA9IGVuYWJsZWQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfYXV0b19hY2tfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIG1fZGF0YS5hdXRvX2FjazsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9hdXRvX2Fja19zZXQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZGF0YS5hdXRvX2FjayA9IGVuYWJsZWQ7Cit9CisKK3VpbnQ4X3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gbV9kYXRhLmNoYW5uZWw7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfY2hhbm5lbF9zZXQodWludDhfdCBjaGFubmVsKQoreworICAgIG1fZGF0YS5jaGFubmVsID0gY2hhbm5lbDsKK30KKworaW50OF90IG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3R4X3Bvd2VyX2dldCh2b2lkKQoreworICAgIHJldHVybiBtX2RhdGEudHhfcG93ZXI7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfdHhfcG93ZXJfc2V0KGludDhfdCBkYm0pCit7CisgICAgbV9kYXRhLnR4X3Bvd2VyID0gZGJtOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Bhbl9pZF9zZXQoY29uc3QgdWludDhfdCAqIHBfcGFuX2lkKQoreworICAgIG1lbWNweShtX2RhdGEucGFuX2lkLCBwX3Bhbl9pZCwgUEFOX0lEX1NJWkUpOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2V4dGVuZGVkX2FkZHJlc3Nfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX2V4dGVuZGVkX2FkZHJlc3MpCit7CisgICAgbWVtY3B5KG1fZGF0YS5leHRlbmRlZF9hZGRyLCBwX2V4dGVuZGVkX2FkZHJlc3MsIEVYVEVOREVEX0FERFJFU1NfU0laRSk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfc2hvcnRfYWRkcmVzc19zZXQoY29uc3QgdWludDhfdCAqIHBfc2hvcnRfYWRkcmVzcykKK3sKKyAgICBtZW1jcHkobV9kYXRhLnNob3J0X2FkZHIsIHBfc2hvcnRfYWRkcmVzcywgU0hPUlRfQUREUkVTU19TSVpFKTsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9kZXN0X2FkZHJfbWF0Y2hlcyhjb25zdCB1aW50OF90ICogcF9wc2R1KQoreworICAgIC8vIENoZWNrIGRlc3RpbmF0aW9uIFBBTiBJZC4KKyAgICAvLyBOb3RlIHRoYXQgKzEgaW4gUFNEVSBvZmZzZXQgaXMgYWRkZWQgYmVjYXVzZSBmaXJzdCBieXRlIGluIFBTRFUgaXMgbGVuZ3RoLgorICAgIGlmICgoMCAhPSBtZW1jbXAoJnBfcHNkdVtQQU5fSURfT0ZGU0VUICsgMV0sIG1fZGF0YS5wYW5faWQsIFBBTl9JRF9TSVpFKSkgJiYKKyAgICAgICAgKDAgIT0gbWVtY21wKCZwX3BzZHVbUEFOX0lEX09GRlNFVCArIDFdLCBCUk9BRENBU1RfQUREUkVTUywgUEFOX0lEX1NJWkUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICAgIHN3aXRjaCAocF9wc2R1W0RFU1RfQUREUl9UWVBFX09GRlNFVF0gJiBERVNUX0FERFJfVFlQRV9NQVNLKQorICAgIHsKKyAgICAgICAgY2FzZSBERVNUX0FERFJfVFlQRV9TSE9SVDoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm90ZSB0aGF0ICsxIGluIFBTRFUgb2Zmc2V0IGlzIGFkZGVkIGJlY2F1c2UgZmlyc3QgYnl0ZSBpbiBQU0RVIGlzIGxlbmd0aC4KKyAgICAgICAgICAgIGlmICgoMCAhPSBtZW1jbXAoJnBfcHNkdVtERVNUX0FERFJfT0ZGU0VUICsgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5zaG9ydF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSE9SVF9BRERSRVNTX1NJWkUpKSAmJgorICAgICAgICAgICAgICAgICgwICE9IG1lbWNtcCgmcF9wc2R1W0RFU1RfQUREUl9PRkZTRVQgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJPQURDQVNUX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUX0FERFJFU1NfU0laRSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIERFU1RfQUREUl9UWVBFX0VYVEVOREVEOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgKzEgaW4gUFNEVSBvZmZzZXQgaXMgYWRkZWQgYmVjYXVzZSBmaXJzdCBieXRlIGluIFBTRFUgaXMgbGVuZ3RoLgorICAgICAgICAgICAgaWYgKDAgIT0gbWVtY21wKCZwX3BzZHVbREVTVF9BRERSX09GRlNFVCArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5leHRlbmRlZF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtX2RhdGEuZXh0ZW5kZWRfYWRkcikpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9waWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk3NThjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcGliLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHN0b3JhZ2Ugb2YgUElCIGF0dHJpYnV0ZXMgaW4gblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJWX1JBRElPODAyMTU0X1BJQl9IXworI2RlZmluZSBOUkZfRFJWX1JBRElPODAyMTU0X1BJQl9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgaWYgcHJvbWlzY3VvdXMgbW9kZSBpcyBlbmFibGVkLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBJZiBwcm9taXNjdW91cyBtb2RlIGlzIGVuYWJsZWQuCisgKiBAcmV0dmFsICBmYWxzZSAgSWYgcHJvbWlzY3VvdXMgbW9kZSBpcyBkaXNhYmxlZC4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9wcm9taXNjdW91c19nZXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIG1vZGUuCisgKgorICogQHBhcmFtW2luXSAgZW5hYmxlZCAgSWYgcHJvbWlzY3VvdXMgbW9kZSBzaG91bGQgYmUgZW5hYmxlZC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9wcm9taXNjdW91c19zZXQoYm9vbCBlbmFibGVkKTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgaWYgYXV0byBBQ0sgcHJvY2VkdXJlIGlzIGVuYWJsZWQuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIElmIGF1dG8gQUNLIHByb2NlZHVyZSBpcyBlbmFibGVkLgorICogQHJldHZhbCAgZmFsc2UgIElmIGF1dG8gQUNLIHByb2NlZHVyZSBpcyBkaXNhYmxlZC4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9hdXRvX2Fja19nZXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIGF1dG8gQUNLIHByb2NlZHVyZS4KKyAqCisgKiBAcGFyYW1baW5dICBlbmFibGVkICBJZiBhdXRvIEFDSyBwcm9jZWR1cmUgc2hvdWxkIGJlIGVuYWJsZWQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfYXV0b19hY2tfc2V0KGJvb2wgZW5hYmxlZCk7CisKKworLyoqCisgKiBAYnJpZWYgR2V0IGN1cnJlbnRseSB1c2VkIGNoYW5uZWwuCisgKgorICogQHJldHVybiAgQ2hhbm5lbCBudW1iZXIgdXNlZCBieSB0aGUgZHJpdmVyLgorICovCit1aW50OF90IG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2NoYW5uZWxfZ2V0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBTZXQgY2hhbm5lbCB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgZHJpdmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIGNoYW5uZWwgIE51bWJlciBvZiBjaGFubmVsIHVzZWQgYnkgdGhlIGRyaXZlci4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3BpYl9jaGFubmVsX3NldCh1aW50OF90IGNoYW5uZWwpOworCisvKioKKyAqIEBicmllZiBHZXQgdHJhbnNtaXQgcG93ZXIuCisgKgorICogQHJldHVybnMgIFRyYW5zbWl0IHBvd2VyIFtkQm1dLgorICovCitpbnQ4X3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfdHhfcG93ZXJfZ2V0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBTZXQgdHJhbnNtaXQgcG93ZXIgdXNlZCBmb3IgQUNLIGZyYW1lcy4KKyAqCisgKiBAcGFyYW1baW5dICBkYm0gIFRyYW5zbWl0IHBvd2VyIFtkQm1dLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3R4X3Bvd2VyX3NldChpbnQ4X3QgZGJtKTsKKworLyoqCisgKiBAYnJpZWYgU2V0IFBBTiBJZCB1c2VkIGJ5IHRoaXMgZGV2aWNlLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfcGFuX2lkICBQb2ludGVyIHRvIFBBTiBJZCAoMiBieXRlcywgbGl0dGxlLWVuZGlhbikuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjb3B5IG9mIHRoZSBQQU4gSWQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfcGFuX2lkX3NldChjb25zdCB1aW50OF90ICogcF9wYW5faWQpOworCisvKioKKyAqIEBicmllZiBTZXQgRXh0ZW5kZWQgQWRkcmVzcyBvZiB0aGlzIGRldmljZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX2V4dGVuZGVkX2FkZHJlc3MgIFBvaW50ZXIgdG8gZXh0ZW5kZWQgYWRkcmVzcyAoOCBieXRlcywgbGl0dGxlLWVuZGlhbikuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjb3B5IG9mIHRoZSBhZGRyZXNzLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX2V4dGVuZGVkX2FkZHJlc3Nfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX2V4dGVuZGVkX2FkZHJlc3MpOworCisvKioKKyAqIEBicmllZiBTZXQgU2hvcnQgQWRkcmVzcyBvZiB0aGlzIGRldmljZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX3Nob3J0X2FkZHJlc3MgIFBvaW50ZXIgdG8gc2hvcnQgYWRkcmVzcyAoMiBieXRlcywgbGl0dGxlLWVuZGlhbikuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjb3B5IG9mIHRoZSBhZGRyZXNzLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcGliX3Nob3J0X2FkZHJlc3Nfc2V0KGNvbnN0IHVpbnQ4X3QgKiBwX3Nob3J0X2FkZHJlc3MpOworCisvKioKKyAqIEBicmllZiBDaGVjayBpZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGdpdmVuIGZyYW1lIG1hdGNoZXMgYWRkcmVzcyBzdG9yZWQgaW4gdGhpcyBtb2R1bGUgb3IKKyAqICAgICAgICBicm9hZGNhc3QgYWRkcmVzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGNoZWNrIGlmIHJlY2VpdmVkIGZyYW1lIGlzIGRlc3RpbmVkIHRvIHRoaXMgbm9kZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX3BzZHUgIFBvaW50ZXIgdG8gUFNEVSBvZiBmcmFtZSB0byBjaGVjay4KKyAqCisgKiBAcmV0dXJuICBJZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGdpdmVuIFBTRFUgbWF0Y2hlcyBhZGRyZXNzIHN0b3JlZCBpbiB0aGlzIG1vZHVsZSBvciBicm9hZGNhc3QKKyAqICAgICAgICAgIGFkZHJlc3MuCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9waWJfZGVzdF9hZGRyX21hdGNoZXMoY29uc3QgdWludDhfdCAqIHBfcHNkdSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOUkZfRFJWX1JBRElPODAyMTU0X1BJQl9IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwM2Y2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3AuaApAQCAtMCwwICsxLDY3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUklWRVJfUkFESU84MDIxNTRfUFJJT1JJVFlfRFJPUF9IX18KKyNkZWZpbmUgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9QUklPUklUWV9EUk9QX0hfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcCA4MDIuMTUuNCBkcml2ZXIgcHJvY2VkdXJlcyB3aXRoIGxvd2VyIHByaW9yaXR5LgorICogQHsKKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTQKKyAqIEBicmllZiBJbnRlcm5hbCBwcm9jZWR1cmVzIG9mIDgwMi4xNS40IGRyaXZlciB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb3dlciBwcmlvcml0eSB0aGFuCisgKiAgICAgICAgdGhlIGNhbGxlcidzIHByaW9yaXR5LgorICovCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemUgbm90aWZpY2F0aW9uIG1vZHVsZS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3BfaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBkaXNjYXJkaW5nIG9mIHRoZSB0aW1lc2xvdC4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgdGhyb3VnaCB0aGlzIG1vZHVsZSB0byBwcmV2ZW50IGNhbGxpbmcgaXQgZnJvbSBhcmJpdGVyIGNvbnRleHQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX3RpbWVzbG90X2V4aXQodm9pZCk7CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9QUklPUklUWV9EUk9QX0hfXworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX2RpcmVjdC5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9kaXJlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE2M2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9kaXJlY3QuYwpAQCAtMCwwICsxLDUxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHByb2NlZHVyZXMgdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggbG93ZXIgcHJpb3JpdHkgdGhhbiBjYWxsZXIgaW4KKyAqICAgdGhlIG5yZiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3AuaCIKKworI2luY2x1ZGUgInJhYWwvbnJmX3JhYWxfYXBpLmgiCisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX2luaXQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX3RpbWVzbG90X2V4aXQodm9pZCkKK3sKKyAgICBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZXhpdCgpOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX3N3aS5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9zd2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDIyNmIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJpb3JpdHlfZHJvcF9zd2kuYwpAQCAtMCwwICsxLDUxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHByb2NlZHVyZXMgdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggbG93ZXIgcHJpb3JpdHkgdGhhbiBjYWxsZXIgaW4KKyAqICAgdGhlIG5yZiA4MDIuMTUuNCByYWRpbyBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3ByaW9yaXR5X2Ryb3AuaCIKKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmgiCisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX2luaXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9pbml0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9wcmlvcml0eV9kcm9wX3RpbWVzbG90X2V4aXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV90aW1lc2xvdF9leGl0KCk7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3Byb2NlZHVyZXNfZHVyYXRpb24uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3Byb2NlZHVyZXNfZHVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJhYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcHJvY2VkdXJlc19kdXJhdGlvbi5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNhbGN1bGF0aW9ucyBvZiA4MDIuMTUuNCByYWRpbyBkcml2ZXIgcHJvY2VkdXJlcyBkdXJhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJWX1JBRElPODAyMTU0X1BST0NFRFVSRVNfRFVSQVRJT05fSF8KKyNkZWZpbmUgTlJGX0RSVl9SQURJTzgwMjE1NF9QUk9DRURVUkVTX0RVUkFUSU9OX0hfCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgUEhZX1VTX1BFUl9TWU1CT0wgICAgIDE2CisjZGVmaW5lIFBIWV9TWU1CT0xTX1BFUl9PQ1RFVCAgMgorI2RlZmluZSBQSFlfU0hSX0RVUkFUSU9OICAgICAgMTAKKworI2RlZmluZSBBX0NDQV9EVVJBVElPTiAgICAgICAgIDgKKyNkZWZpbmUgQV9UVVJOQVJPVU5EX1RJTUUgICAgIDEyCisjZGVmaW5lIEFfVU5JVF9CQUNLT0ZGX1BFUklPRCAyMAorCisjZGVmaW5lIE5VTV9PQ1RFVFNfSU5fQUNLICAgICA2CisKKyNkZWZpbmUgTUFDX0FDS19XQUlUX0RVUkFUSU9OIChBX1VOSVRfQkFDS09GRl9QRVJJT0QgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfVFVSTkFST1VORF9USU1FICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhZX1NIUl9EVVJBVElPTiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTlVNX09DVEVUU19JTl9BQ0sgKiBQSFlfU1lNQk9MU19QRVJfT0NURVQpKQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IG5yZl9kcnZfcmFkaW84MDIxNTRfdHhfZHVyYXRpb25fZ2V0KHVpbnQ4X3QgcHNkdV9sZW5ndGgsIGJvb2wgYWNrX3JlcXVlc3RlZCkKK3sKKyAgICAvLyBhVHVybmFyb3VuZFRpbWUgKyBDQ0EgKyBhVHVybmFyb3VuZFRpbWUgKyBTSFIgKyBQSFIgKyBQU0RVCisgICAgLy8gaWYgQUNLOiArIG1hY0Fja1dhaXREdXJhdGlvbgorICAgIHVpbnQxNl90IHJlc3VsdCA9IEFfVFVSTkFST1VORF9USU1FICsgQV9DQ0FfRFVSQVRJT04gKyBBX1RVUk5BUk9VTkRfVElNRSArIFBIWV9TSFJfRFVSQVRJT047CisgICAgcmVzdWx0ICs9IChwc2R1X2xlbmd0aCArIDEpICogUEhZX1NZTUJPTFNfUEVSX09DVEVUOworCisgICAgaWYgKGFja19yZXF1ZXN0ZWQpCisgICAgeworICAgICAgICByZXN1bHQgKz0gTUFDX0FDS19XQUlUX0RVUkFUSU9OOworICAgIH0KKworICAgIHJlc3VsdCAqPSBQSFlfVVNfUEVSX1NZTUJPTDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9kdXJhdGlvbl9nZXQodWludDhfdCBwc2R1X2xlbmd0aCwgYm9vbCBhY2tfcmVxdWVzdGVkKQoreworICAgIC8vIFNIUiArIFBIUiArIFBTRFUKKyAgICAvLyBpZiBBQ0s6ICsgYVR1cm5hcm91bmRUaW1lICsgQUNLIGZyYW1lIGR1cmF0aW9uICsgYVR1cm5hcm91bmRUaW1lCisgICAgdWludDE2X3QgcmVzdWx0ID0gUEhZX1NIUl9EVVJBVElPTiArIChwc2R1X2xlbmd0aCArIDEpICogUEhZX1NZTUJPTFNfUEVSX09DVEVUOworCisgICAgaWYgKGFja19yZXF1ZXN0ZWQpCisgICAgeworICAgICAgICByZXN1bHQgKz0gQV9UVVJOQVJPVU5EX1RJTUUgKworICAgICAgICAgICAgICAgICAgUEhZX1NIUl9EVVJBVElPTiArCisgICAgICAgICAgICAgICAgICAoTlVNX09DVEVUU19JTl9BQ0sgKiBQSFlfU1lNQk9MU19QRVJfT0NURVQpICsKKyAgICAgICAgICAgICAgICAgIEFfVFVSTkFST1VORF9USU1FOworICAgIH0KKworICAgIHJlc3VsdCAqPSBQSFlfVVNfUEVSX1NZTUJPTDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBOUkZfRFJWX1JBRElPODAyMTU0X1BST0NFRFVSRVNfRFVSQVRJT05fSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3QuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E1NTE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUklWRVJfUkFESU84MDIxNTRfUkVRVUVTVF9IX18KKyNkZWZpbmUgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9SRVFVRVNUX0hfXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQGRlZmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTRfcmVxdWVzdCA4MDIuMTUuNCBkcml2ZXIgcmVxdWVzdAorICogQHsKKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTQKKyAqIEBicmllZiBSZXF1ZXN0cyB0byB0aGUgZHJpdmVyIHRyaWdnZXJlZCBmcm9tIHRoZSBNQUMgbGF5ZXIuCisgKi8KKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSByZXF1ZXN0IG1vZHVsZS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBlbnRlcmluZyBzbGVlcCBzdGF0ZS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgVGhlIGRyaXZlciB3aWxsIGVudGVyIHNsZWVwIHN0YXRlLgorICogQHJldHZhbCAgZmFsc2UgIFRoZSBkcml2ZXIgY2Fubm90IGVudGVyIHNsZWVwIHN0YXRlIGR1ZSB0byBvbmdvaW5nIG9wZXJhdGlvbi4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc2xlZXAodm9pZCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZW50ZXJpbmcgcmVjZWl2ZSBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dICBjaGFubmVsICBDaGFubmVsIG51bWJlciB1c2VkIHRvIHJlY2VpdmUgZGF0YS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgVGhlIGRyaXZlciB3aWxsIGVudGVyIHJlY2VpdmUgc3RhdGUuCisgKiBAcmV0dmFsICBmYWxzZSAgVGhlIGRyaXZlciBjYW5ub3QgZW50ZXIgcmVjZWl2ZSBzdGF0ZSBkdWUgdG8gb25nb2luZyBvcGVyYXRpb24uCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3JlY2VpdmUodWludDhfdCBjaGFubmVsKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBlbnRlcmluZyB0cmFuc21pdCBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dICBwX2RhdGEgICBQb2ludGVyIHRvIHRoZSBmcmFtZSB0byB0cmFuc21pdC4KKyAqIEBwYXJhbVtpbl0gIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyIHVzZWQgdG8gdHJhbnNtaXQgdGhlIGZyYW1lLgorICogQHBhcmFtW2luXSAgcG93ZXIgICAgVHJhbnNtaXR0ZXIgcG93ZXIgdXNlZCB0byB0cmFuc21pdCB0aGUgZnJhbWUuCisgKiBAcGFyYW1baW5dICBjY2EgICAgICBJZiB0aGUgZHJpdmVyIHNob3VsZCBwZXJmb3JtIENDQSBwcm9jZWR1cmUgYmVmb3JlIHRyYW5zbWlzc2lvbi4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgVGhlIGRyaXZlciB3aWxsIGVudGVyIHRyYW5zbWl0IHN0YXRlLgorICogQHJldHZhbCAgZmFsc2UgIFRoZSBkcml2ZXIgY2Fubm90IGVudGVyIHRyYW5zbWl0IHN0YXRlIGR1ZSB0byBvbmdvaW5nIG9wZXJhdGlvbi4KKyAqLworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwgdWludDhfdCBjaGFubmVsLCBpbnQ4X3QgcG93ZXIsIGJvb2wgY2NhKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBlbnRlcmluZyBlbmVyZ3kgZGV0ZWN0aW9uIHN0YXRlLgorICoKKyAqIEBwYXJhbVtpbl0gIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyIHVzZWQgdG8gcGVyZm9ybSBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqIEBwYXJhbVtpbl0gIHRpbWVfdXMgIFJlcXVlc3RlZCBkdXJhdGlvbiBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgVGhlIGRyaXZlciB3aWxsIGVudGVyIGVuZXJneSBkZXRlY3Rpb24gc3RhdGUuCisgKiBAcmV0dmFsICBmYWxzZSAgVGhlIGRyaXZlciBjYW5ub3QgZW50ZXIgZW5lcmd5IGRldGVjdGlvbiBzdGF0ZSBkdWUgdG8gb25nb2luZyBvcGVyYXRpb24uCisgKi8KK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCB0aGUgZHJpdmVyIHRvIGZyZWUgZ2l2ZW4gYnVmZmVyLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfZGF0YSAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGZyZWUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2J1ZmZlcl9mcmVlKHVpbnQ4X3QgKiBwX2RhdGEpOworCisvKioKKyAqQH0KKyAqKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIE5SRl9EUklWRVJfUkFESU84MDIxNTRfUkVRVUVTVF9IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfZGlyZWN0LmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2RpcmVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzljOTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2RpcmVjdC5jCkBAIC0wLDAgKzEsMTA0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHJlcXVlc3RzIHRvIHRoZSBkcml2ZXIgdHJpZ2dlcmVkIGRpcmVjdGx5IGJ5IHRoZSBNQUMgbGF5ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3QuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZnNtLmgiCisjaW5jbHVkZSAiaGFsL25yZl9yYWRpby5oIgorCisjaW5jbHVkZSA8Y21zaXMvY29yZV9jbUZ1bmMuaD4KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfaW5pdCh2b2lkKQoreworICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc2xlZXAodm9pZCkKK3sKKyAgICBib29sIHJlc3VsdDsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKworICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3NsZWVwKCk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3JlY2VpdmUodWludDhfdCBjaGFubmVsKQoreworICAgIGJvb2wgcmVzdWx0OworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworCisgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fcmVjZWl2ZShjaGFubmVsKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfdHJhbnNtaXQoY29uc3QgdWludDhfdCAqIHBfZGF0YSwgdWludDhfdCBjaGFubmVsLCBpbnQ4X3QgcG93ZXIsIGJvb2wgY2NhKQoreworICAgIGJvb2wgcmVzdWx0OworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworCisgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fdHJhbnNtaXQocF9kYXRhLCBjaGFubmVsLCBwb3dlciwgY2NhKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfZW5lcmd5X2RldGVjdGlvbih1aW50OF90IGNoYW5uZWwsIHVpbnQzMl90IHRpbWVfdXMpCit7CisgICAgYm9vbCByZXN1bHQ7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisKKyAgICByZXN1bHQgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9lbmVyZ3lfZGV0ZWN0aW9uKGNoYW5uZWwsIHRpbWVfdXMpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9idWZmZXJfZnJlZSh1aW50OF90ICogcF9kYXRhKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fbm90aWZ5X2J1ZmZlcl9mcmVlKChyeF9idWZmZXJfdCAqKXBfZGF0YSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9zd2kuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc3dpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzYzE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc3dpLmMKQEAgLTAsMCArMSwxNzEgQEAKKworLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyByZXF1ZXN0cyB0byB0aGUgZHJpdmVyIHRyaWdnZXJlZCBieSB0aGUgTUFDIGxheWVyIHRocm91Z2ggU1dJLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0LmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbmZpZy5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbi5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfZGVidWcuaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbS5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuaCIKKyNpbmNsdWRlICJoYWwvbnJmX3JhZGlvLmgiCisKKyNpbmNsdWRlIDxjbXNpcy9jb3JlX2NtRnVuYy5oPgorI2luY2x1ZGUgPGNtc2lzL2NvcmVfY200Lmg+CisKKyNkZWZpbmUgQ01TSVNfSVJRX05VTV9WRUNUQUNUSVZFX0RJRkYgMTYKKworLyoqIENoZWNrIGlmIGFjdGl2ZSB2ZWN0b3IgcHJpb3JpdHkgaXMgaGlnaCBlbm91Z2ggdG8gY2FsbCByZXF1ZXN0cyBkaXJlY3RseS4KKyAqCisgKiAgQHJldHZhbCAgdHJ1ZSAgIEFjdGl2ZSB2ZWN0b3IgcHJpb3JpdHkgaXMgZ3JlYXRlciBvciBlcXVhbCB0byBTV0kgcHJpb3JpdHkuCisgKiAgQHJldHZhbCAgZmFsc2UgIEFjdGl2ZSB2ZWN0b3IgcHJpb3JpdHkgaXMgbG93ZXIgdGhhbiBTV0kgcHJpb3JpdHkuCisgKi8KK3N0YXRpYyBib29sIGFjdGl2ZV92ZWN0b3JfcHJpb3JpdHlfaXNfaGlnaCh2b2lkKQoreworICAgIHVpbnQzMl90ICBhY3RpdmVfdmVjdG9yX2lkID0gKFNDQi0+SUNTUiAmIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrKSA+PiBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvczsKKyAgICBJUlFuX1R5cGUgaXJxX251bWJlcjsKKyAgICB1aW50MzJfdCAgYWN0aXZlX3ByaW9yaXR5OworCisgICAgLy8gQ2hlY2sgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KKyAgICBpZiAoYWN0aXZlX3ZlY3Rvcl9pZCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFzc2VydChhY3RpdmVfdmVjdG9yX2lkID49IENNU0lTX0lSUV9OVU1fVkVDVEFDVElWRV9ESUZGKTsKKworICAgIGlycV9udW1iZXIgICAgICA9IChJUlFuX1R5cGUpKGFjdGl2ZV92ZWN0b3JfaWQgLSBDTVNJU19JUlFfTlVNX1ZFQ1RBQ1RJVkVfRElGRik7CisgICAgYWN0aXZlX3ByaW9yaXR5ID0gTlZJQ19HZXRQcmlvcml0eShpcnFfbnVtYmVyKTsKKworICAgIHJldHVybiBhY3RpdmVfcHJpb3JpdHkgPD0gUkFESU9fTk9USUZJQ0FUSU9OX1NXSV9QUklPUklUWTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3RfaW5pdCh2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2luaXQoKTsKK30KKworYm9vbCBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcXVlc3Rfc2xlZXAodm9pZCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgaWYgKGFjdGl2ZV92ZWN0b3JfcHJpb3JpdHlfaXNfaGlnaCgpKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgICAgIHJlc3VsdCA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3NsZWVwKCk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX3NsZWVwKCZyZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X3JlY2VpdmUodWludDhfdCBjaGFubmVsKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZlX3ZlY3Rvcl9wcmlvcml0eV9pc19oaWdoKCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICAgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fcmVjZWl2ZShjaGFubmVsKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfcmVjZWl2ZShjaGFubmVsLCAmcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF90cmFuc21pdChjb25zdCB1aW50OF90ICogcF9kYXRhLCB1aW50OF90IGNoYW5uZWwsIGludDhfdCBwb3dlciwgYm9vbCBjY2EpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmIChhY3RpdmVfdmVjdG9yX3ByaW9yaXR5X2lzX2hpZ2goKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworICAgICAgICByZXN1bHQgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV90cmFuc21pdChwX2RhdGEsIGNoYW5uZWwsIHBvd2VyLCBjY2EpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV90cmFuc21pdChwX2RhdGEsIGNoYW5uZWwsIHBvd2VyLCBjY2EsICZyZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXF1ZXN0X2VuZXJneV9kZXRlY3Rpb24odWludDhfdCBjaGFubmVsLCB1aW50MzJfdCB0aW1lX3VzKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgICBpZiAoYWN0aXZlX3ZlY3Rvcl9wcmlvcml0eV9pc19oaWdoKCkpCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICAgICAgcmVzdWx0ID0gbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fZW5lcmd5X2RldGVjdGlvbihjaGFubmVsLCB0aW1lX3VzKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfZW5lcmd5X2RldGVjdGlvbihjaGFubmVsLCB0aW1lX3VzLCAmcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxdWVzdF9idWZmZXJfZnJlZSh1aW50OF90ICogcF9kYXRhKQoreworICAgIGlmIChhY3RpdmVfdmVjdG9yX3ByaW9yaXR5X2lzX2hpZ2goKSkKKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9ub3RpZnlfYnVmZmVyX2ZyZWUoKHJ4X2J1ZmZlcl90ICopcF9kYXRhKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfYnVmZmVyX2ZyZWUocF9kYXRhKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5N2E4MDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuYwpAQCAtMCwwICsxLDc5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiAgIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBmcmFtZXMgcmVjZWl2ZWQgYnkgblJGIDgwMi4xNS40IHJhZGlvIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY29uZmlnLmgiCisKKyNpZiBSQURJT19SWF9CVUZGRVJTIDwgMQorI2Vycm9yIE5vdCBlbm91Z2ggcnggYnVmZmVycyBpbiB0aGUgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorI2VuZGlmCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorCisvLy8gUmVjZWl2ZSBidWZmZXIgKEVhc3lETUEgY2Fubm90IGFkZHJlc3Mgd2hvbGUgUkFNLiBQbGFjZSBidWZmZXIgaW4gdGhlIHNwZWNpYWwgc2VjdGlvbi4pCityeF9idWZmZXJfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcnNbUkFESU9fUlhfQlVGRkVSU10KKyAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIm5yZl9yYWRpb19idWZmZXIubnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzIikpKTsKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorCisjcHJhZ21hIGxvY2F0aW9uPSJOUkZfUkFESU9fQlVGRkVSIgorc3RhdGljIHJ4X2J1ZmZlcl90IG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyc1tSQURJT19SWF9CVUZGRVJTXTsKKworI2VuZGlmCisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJfaW5pdCh2b2lkKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSQURJT19SWF9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcnNbaV0uZnJlZSA9IHRydWU7CisgICAgfQorfQorCityeF9idWZmZXJfdCAqIG5yZl9kcnZfcmFkaW84MDIxNTRfcnhfYnVmZmVyX2ZyZWVfZmluZCh2b2lkKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSQURJT19SWF9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBpZiAobnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzW2ldLmZyZWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJzW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODkyM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXIuaApAQCAtMCwwICsxLDgzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBicmllZiBUaGlzIG1vZHVsZSBjb250YWlucyBidWZmZXIgZm9yIGZyYW1lcyByZWNlaXZlZCBieSBuUkYgODAyLjE1LjQgcmFkaW8gZHJpdmVyLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9EUlZfUkFESU84MDIxNTRfUlhfQlVGRkVSX0hfCisjZGVmaW5lIE5SRl9EUlZfUkFESU84MDIxNTRfUlhfQlVGRkVSX0hfCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X2NvbnN0LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAYnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgcmVjZWl2ZWQgZnJhbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDhfdCBwc2R1W01BWF9QQUNLRVRfU0laRSArIDFdOworICAgIGJvb2wgICAgZnJlZTsgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBidWZmZXIgaXMgZnJlZSBvciBjb250YWlucyBhIGZyYW1lLgorfSByeF9idWZmZXJfdDsKKworLyoqCisgKiBAYnJpZWYgQXJyYXkgY29udGFpbmluZyBhbGwgYnVmZmVycyB1c2VkIHRvIHJlY2VpdmUgZnJhbWUuCisgKgorICogVGhpcyBhcnJheSBpcyBpbiBnbG9iYWwgc2NvcGUgdG8gYWxsb3cgb3B0aW1pemF0aW9ucyBpbiBGU00gbW9kdWxlIGluIGNhc2UgdGhlcmUgaXMgb25seQorICogb25lIGJ1ZmZlciBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4KKyAqCisgKi8KK2V4dGVybiByeF9idWZmZXJfdCBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcnNbXTsKKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBidWZmZXIgZm9yIHJlY2VpdmVkIGZyYW1lcy4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlcl9pbml0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBHZXQgZnJlZSBidWZmZXIgdG8gcmVjZWl2ZSBhIGZyYW1lLgorICoKKyAqIEByZXR1cm4gIFBvaW50ZXIgdG8gZnJlZSBidWZmZXIgb2YgTlVMTCBpZiBubyBmcmVlIGJ1ZmZlciBpcyBhdmFpbGFibGUuCisgKi8KK3J4X2J1ZmZlcl90ICogbnJmX2Rydl9yYWRpbzgwMjE1NF9yeF9idWZmZXJfZnJlZV9maW5kKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTlJGX0RSVl9SQURJTzgwMjE1NF9SWF9CVUZGRVJfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVjZmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL25yZl9kcnZfcmFkaW84MDIxNTRfc3dpLmMKQEAgLTAsMCArMSw1NTQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgU1dJIG1hbmFnZXIgZm9yIG5SRiA4MDIuMTUuNCBkcml2ZXIuCisgKgorICovCisKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3N3aS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NC5oIgorI2luY2x1ZGUgIm5yZl9kcnZfcmFkaW84MDIxNTRfY29uZmlnLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uLmgiCisjaW5jbHVkZSAibnJmX2Rydl9yYWRpbzgwMjE1NF9mc20uaCIKKyNpbmNsdWRlICJucmZfZHJ2X3JhZGlvODAyMTU0X3J4X2J1ZmZlci5oIgorI2luY2x1ZGUgImhhbC9ucmZfZWd1LmgiCisjaW5jbHVkZSAicmFhbC9ucmZfcmFhbF9hcGkuaCIKKworLyoqIFNpemUgb2Ygbm90aWZpY2F0aW9uIHF1ZXVlLgorICoKKyAqIE9uZSBzbG90IGZvciBlYWNoIHJlY2VpdmUgYnVmZmVyLCBvbmUgZm9yIHRyYW5zbWlzc2lvbiwgb25lIGZvciBidXN5IGNoYW5uZWwgYW5kIG9uZSBmb3IgZW5lcmd5CisgKiBkZXRlY3Rpb24uCisgKi8KKyNkZWZpbmUgTlRGX1FVRVVFX1NJWkUgKFJBRElPX1JYX0JVRkZFUlMgKyAzKQorLyoqIFNpemUgb2YgcmVxdWVzdHMgcXVldWUuCisgKgorICogVHdvIGlzIG1pbmltYWwgcXVldWUgc2l6ZS4gSXQgaXMgbm90IGV4cGVjdGVkIGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdG8gcXVldWUgYSBmZXcgcmVxdWVzdHMuCisgKi8KKyNkZWZpbmUgUkVRX1FVRVVFX1NJWkUgMgorCisjZGVmaW5lIFNXSV9FR1UgICAgICAgIE5SRl9FR1UzICAgICAgICAgICAgICAgICAgICAgICAvLy88IExhYmVsIG9mIFNXSSBwZXJpcGhlcmFsLgorI2RlZmluZSBTV0lfSVJRbiAgICAgICBTV0kzX0VHVTNfSVJRbiAgICAgICAgICAgICAgICAgLy8vPCBTeW1ib2wgb2YgU1dJIElSUSBudW1iZXIuCisjZGVmaW5lIFNXSV9JUlFIYW5kbGVyIFNXSTNfRUdVM19JUlFIYW5kbGVyICAgICAgICAgICAvLy88IFN5bWJvbCBvZiBTV0kgSVJRIGhhbmRsZXIuCisKKyNkZWZpbmUgTlRGX0lOVCAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDAgICAgICAgICAgICAgIC8vLzwgTGFiZWwgb2Ygbm90aWZpY2F0aW9uIGludGVycnVwdC4KKyNkZWZpbmUgTlRGX1RBU0sgIE5SRl9FR1VfVEFTS19UUklHR0VSMCAgICAgICAgICAgICAgIC8vLzwgTGFiZWwgb2Ygbm90aWZpY2F0aW9uIHRhc2suCisjZGVmaW5lIE5URl9FVkVOVCBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDAgICAgICAgICAgICAvLy88IExhYmVsIG9mIG5vdGlmaWNhdGlvbiBldmVudC4KKworI2RlZmluZSBUSU1FU0xPVF9FWElUX0lOVCAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDEgICAgLy8vPCBMYWJlbCBvZiB0aW1lc2xvdCBleGl0IGludGVycnVwdC4KKyNkZWZpbmUgVElNRVNMT1RfRVhJVF9UQVNLICBOUkZfRUdVX1RBU0tfVFJJR0dFUjEgICAgIC8vLzwgTGFiZWwgb2YgdGltZXNsb3QgZXhpdCB0YXNrLgorI2RlZmluZSBUSU1FU0xPVF9FWElUX0VWRU5UIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMSAgLy8vPCBMYWJlbCBvZiB0aW1lc2xvdCBleGl0IGV2ZW50LgorCisjZGVmaW5lIFJFUV9JTlQgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQyICAgICAgICAgICAgICAvLy88IExhYmVsIG9mIHJlcXVlc3QgaW50ZXJydXB0LgorI2RlZmluZSBSRVFfVEFTSyAgTlJGX0VHVV9UQVNLX1RSSUdHRVIyICAgICAgICAgICAgICAgLy8vPCBMYWJlbCBvZiByZXF1ZXN0IHRhc2suCisjZGVmaW5lIFJFUV9FVkVOVCBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDIgICAgICAgICAgICAvLy88IExhYmVsIG9mIHJlcXVlc3QgZXZlbnQuCisKKy8vLyBUeXBlcyBvZiBub3RpZmljYXRpb25zIGluIG5vdGlmaWNhdGlvbiBxdWV1ZS4KK3R5cGVkZWYgZW51bQoreworICAgIE5URl9UWVBFX1JFQ0VJVkVELCAgICAgICAgIC8vLzwgRnJhbWUgcmVjZWl2ZWQKKyAgICBOVEZfVFlQRV9UUkFOU01JVFRFRCwgICAgICAvLy88IEZyYW1lIHRyYW5zbWl0dGVkCisgICAgTlRGX1RZUEVfQ0hBTk5FTF9CVVNZLCAgICAgLy8vPCBGcmFtZSB0cmFuc21pc3Npb24gZmFpbHVyZQorICAgIE5URl9UWVBFX0VORVJHWV9ERVRFQ1RFRCwgIC8vLzwgRW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUgZW5kZWQKK30gbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfdHlwZV90OworCisvLy8gTm90aWZpY2F0aW9uIGRhdGEgaW4gdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZS4KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfdHlwZV90IHR5cGU7ICAvLy88IE5vdGlmaWNhdGlvbiB0eXBlLgorICAgIHVuaW9uCisgICAgeworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCAqIHBfcHNkdTsgICAgICAgICAgICAgLy8vPCBQb2ludGVyIHRvIHJlY2VpdmVkIGZyYW1lIFBTRFUuCisgICAgICAgICAgICBpbnQ4X3QgICAgcG93ZXI7ICAgICAgICAgICAgICAvLy88IFJTU0kgb2YgcmVjZWl2ZWQgZnJhbWUuCisgICAgICAgICAgICBpbnQ4X3QgICAgbHFpOyAgICAgICAgICAgICAgICAvLy88IExRSSBvZiByZWNlaXZlZCBmcmFtZS4KKyAgICAgICAgfSByZWNlaXZlZDsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVjZWl2ZWQgZnJhbWUgZGV0YWlscy4KKworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCAqIHBfcHNkdTsgICAgICAgICAgICAgLy8vPCBQb2ludGVyIHRvIHJlY2VpdmVkIEFDSyBQU0RVIG9yIE5VTEwuCisgICAgICAgICAgICBpbnQ4X3QgICAgcG93ZXI7ICAgICAgICAgICAgICAvLy88IFJTU0kgb2YgcmVjZWl2ZWQgQUNLIG9yIDAuCisgICAgICAgICAgICBpbnQ4X3QgICAgbHFpOyAgICAgICAgICAgICAgICAvLy88IExRSSBvZiByZWNlaXZlZCBBQ0sgb3IgMC4KKyAgICAgICAgfSB0cmFuc21pdHRlZDsgICAgICAgICAgICAgICAgICAgIC8vLzwgVHJhbnNtaXR0ZWQgZnJhbWUgZGV0YWlscy4KKworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgaW50OF90ICAgIHJlc3VsdDsgICAgICAgICAgICAgLy8vPCBFbmVyZ3kgZGV0ZWN0aW9uIHJlc3VsdC4KKyAgICAgICAgfSBlbmVyZ3lfZGV0ZWN0ZWQ7ICAgICAgICAgICAgICAgIC8vLzwgRW5lcmd5IGRldGVjdGlvbiBkZXRhaWxzLgorICAgIH0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBOb3RpZmljYXRpb24gZGF0YSBkZXBlbmRpbmcgb24gaXQncyB0eXBlLgorfSBucmZfZHJ2X3JhZGlvODAyMTU0X250Zl9kYXRhX3Q7CisKKy8vLyBUeXBlIG9mIHJlcXVlc3RzIGluIHJlcXVlc3QgcXVldWUuCit0eXBlZGVmIGVudW0KK3sKKyAgICBSRVFfVFlQRV9TTEVFUCwKKyAgICBSRVFfVFlQRV9SRUNFSVZFLAorICAgIFJFUV9UWVBFX1RSQU5TTUlULAorICAgIFJFUV9UWVBFX0VORVJHWV9ERVRFQ1RJT04sCisgICAgUkVRX1RZUEVfQlVGRkVSX0ZSRUUsCit9IG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxX3R5cGVfdDsKKworLy8vIFJlcXVlc3QgZGF0YSBpbiByZXF1ZXN0IHF1ZXVlLgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV90eXBlX3QgdHlwZTsgIC8vLzwgVHlwZSBvZiB0aGUgcmVxdWVzdC4KKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgKiBwX3Jlc3VsdDsgICAgICAgICAgICAgIC8vLzwgU2xlZXAgcmVxdWVzdCByZXN1bHQuCisgICAgICAgIH0gc2xlZXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFNsZWVwIHJlcXVlc3QgZGV0YWlscy4KKworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCAgKiBwX3Jlc3VsdDsgICAgICAgICAgICAgLy8vPCBSZWNlaXZlIHJlcXVlc3QgcmVzdWx0LgorICAgICAgICAgICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgLy8vPCBDaGFubmVsIHRvIHJlY2VpdmUgb24uCisgICAgICAgIH0gcmVjZWl2ZTsgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlY2VpdmUgcmVxdWVzdCBkZXRhaWxzLgorCisgICAgICAgIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgICBib29sICAgICAgICAgICogcF9yZXN1bHQ7ICAgICAvLy88IFRyYW5zbWl0IHJlcXVlc3QgcmVzdWx0LgorICAgICAgICAgICAgY29uc3QgdWludDhfdCAqIHBfZGF0YTsgICAgICAgLy8vPCBQb2ludGVyIHRvIFBTRFUgdG8gdHJhbnNtaXQuCisgICAgICAgICAgICB1aW50OF90ICAgICAgICAgY2hhbm5lbDsgICAgICAvLy88IENoYW5uZWwgdG8gdHJhbnNtaXQgb24uCisgICAgICAgICAgICBpbnQ4X3QgICAgICAgICAgcG93ZXI7ICAgICAgICAvLy88IFJlcXVlc3RlZCB0cmFuc21pc3Npb24gcG93ZXIuCisgICAgICAgICAgICBib29sICAgICAgICAgICAgY2NhOyAgICAgICAgICAvLy88IElmIENDQSB3YXMgcmVxdWVzdGVkIHByaW9yIHRvIHRyYW5zbWlzc2lvbi4KKyAgICAgICAgfSB0cmFuc21pdDsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgVHJhbnNtaXQgcmVxdWVzdCBkZXRhaWxzLgorCisgICAgICAgIHN0cnVjdAorICAgICAgICB7CisgICAgICAgICAgICBib29sICAgKiBwX3Jlc3VsdDsgICAgICAgICAgICAvLy88IEVuZXJneSBkZXRlY3Rpb24gcmVxdWVzdCByZXN1bHQuCisgICAgICAgICAgICB1aW50OF90ICBjaGFubmVsOyAgICAgICAgICAgICAvLy88IENoYW5uZWwgdG8gcGVyZm9ybSBlbmVyZ3kgZGV0ZWN0aW9uIG9uLgorICAgICAgICAgICAgdWludDMyX3QgdGltZV91czsgICAgICAgICAgICAgLy8vPCBSZXF1ZXN0ZWQgdGltZSBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAgICAgICAgfSBlbmVyZ3lfZGV0ZWN0aW9uOyAgICAgICAgICAgICAgIC8vLzwgRW5lcmd5IGRldGVjdGlvbiByZXF1ZXN0IGRldGFpbHMuCisKKyAgICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4X2J1ZmZlcl90ICogcF9kYXRhOyAgICAgICAgIC8vLzwgUG9pbnRlciB0byByZWNlaXZlIGJ1ZmZlciB0byBmcmVlLgorICAgICAgICB9IGJ1ZmZlcl9mcmVlOyAgICAgICAgICAgICAgICAgICAgLy8vPCBCdWZmZXIgZnJlZSByZXF1ZXN0IGRldGFpbHMuCisgICAgfSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IFJlcXVlc3QgZGF0YSBkZXBlbmRpbmcgb24gaXQncyB0eXBlLgorfSBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV9kYXRhX3Q7CisKK3N0YXRpYyBucmZfZHJ2X3JhZGlvODAyMTU0X250Zl9kYXRhX3QgbV9udGZfcXVldWVbTlRGX1FVRVVFX1NJWkVdOyAgLy8vPCBOb3RpZmljYXRpb24gcXVldWUuCitzdGF0aWMgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgIG1fbnRmX3JfcHRyOyAgLy8vPCBOb3RpZmljYXRpb24gcXVldWUgcmVhZCBpbmRleC4KK3N0YXRpYyB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgbV9udGZfd19wdHI7ICAvLy88IE5vdGlmaWNhdGlvbiBxdWV1ZSB3cml0ZSBpbmRleC4KKworc3RhdGljIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxX2RhdGFfdCBtX3JlcV9xdWV1ZVtSRVFfUVVFVUVfU0laRV07ICAvLy88IFJlcXVlc3QgcXVldWUuCitzdGF0aWMgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVxX3JfcHRyOyAgLy8gUmVxdWVzdCBxdWV1ZSByZWFkIGluZGV4Lgorc3RhdGljIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICBtX3JlcV93X3B0cjsgIC8vIFJlcXVlc3QgcXVldWUgd3JpdGUgaW5kZXguCisKKy8qKgorICogSW5jcmVtZW50IGdpdmVuIGluZGV4IGZvciBhbnkgcXVldWUuCisgKgorICogQHBhcmFtW2lub3V0XSAgcF9wdHIgICAgICAgSW5kZXggdG8gaW5jcmVtZW50LgorICogQHBhcmFtW2luXSAgICAgcXVldWVfc2l6ZSAgTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgcXVldWVfcHRyX2luY3JlbWVudCh1aW50OF90ICogcF9wdHIsIHVpbnQ4X3QgcXVldWVfc2l6ZSkKK3sKKyAgICBpZiAoKysoKnBfcHRyKSA+PSBxdWV1ZV9zaXplKQorICAgIHsKKyAgICAgICAgKnBfcHRyID0gMDsKKyAgICB9Cit9CisKKy8qKgorICogQ2hlY2sgaWYgZ2l2ZW4gcXVldWUgaXMgZnVsbC4KKyAqCisgKiBAcGFyYW1baW5dICByX3B0ciAgICAgICBSZWFkIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBxdWV1ZS4KKyAqIEBwYXJhbVtpbl0gIHdfcHRyICAgICAgIFdyaXRlIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBxdWV1ZS4KKyAqIEBwYXJhbVtpbl0gIHF1ZXVlX3NpemUgIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuCisgKgorICogQHJldHZhbCAgdHJ1ZSAgIEdpdmVuIHF1ZXVlIGlzIGZ1bGwuCisgKiBAcmV0dmFsICBmYWxzZSAgR2l2ZW4gcXVldWUgaXMgbm90IGZ1bGwuCisgKi8KK3N0YXRpYyBib29sIHF1ZXVlX2lzX2Z1bGwodWludDhfdCByX3B0ciwgdWludDhfdCB3X3B0ciwgdWludDhfdCBxdWV1ZV9zaXplKQoreworICAgIGlmICh3X3B0ciA9PSAocl9wdHIgLSAxKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICgocl9wdHIgPT0gMCkgJiYgKHdfcHRyID09IHF1ZXVlX3NpemUgLSAxKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBDaGVjayBpZiBnaXZlbiBxdWV1ZSBpcyBlbXB0eS4KKyAqCisgKiBAcGFyYW1baW5dICByX3B0ciAgUmVhZCBpbmRleCBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gcXVldWUuCisgKiBAcGFyYW1baW5dICB3X3B0ciAgV3JpdGUgaW5kZXggYXNzb2NpYXRlZCB3aXRoIGdpdmVuIHF1ZXVlLgorICoKKyAqIEByZXR2YWwgIHRydWUgICBHaXZlbiBxdWV1ZSBpcyBlbXB0eS4KKyAqIEByZXR2YWwgIGZhbHNlICBHaXZlbiBxdWV1ZSBpcyBub3QgZW1wdHkuCisgKi8KK3N0YXRpYyBib29sIHF1ZXVlX2lzX2VtcHR5KHVpbnQ4X3Qgcl9wdHIsIHVpbnQ4X3Qgd19wdHIpCit7CisgICAgcmV0dXJuIChyX3B0ciA9PSB3X3B0cik7Cit9CisKKy8qKgorICogSW5jcmVtZW50IGdpdmVuIGluZGV4IGFzc29jaWF0ZWQgd2l0aCBub3RpZmljYXRpb24gcXVldWUuCisgKgorICogQHBhcmFtW2lub3V0XSAgcF9wdHIgIFBvaW50ZXIgdG8gdGhlIGluZGV4IHRvIGluY3JlbWVudC4KKyAqLworc3RhdGljIHZvaWQgbnRmX3F1ZXVlX3B0cl9pbmNyZW1lbnQodWludDhfdCAqIHBfcHRyKQoreworICAgIHF1ZXVlX3B0cl9pbmNyZW1lbnQocF9wdHIsIE5URl9RVUVVRV9TSVpFKTsKK30KKworLyoqCisgKiBDaGVjayBpZiBub3RpZmljYXRpb24gcXVldWUgaXMgZnVsbC4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgTm90aWZpY2F0aW9uIHF1ZXVlIGlzIGZ1bGwuCisgKiBAcmV0dmFsICBmYWxzZSAgTm90aWZpY2F0aW9uIHF1ZXVlIGlzIG5vdCBmdWxsLgorICovCitzdGF0aWMgYm9vbCBudGZfcXVldWVfaXNfZnVsbCh2b2lkKQoreworICAgIHJldHVybiBxdWV1ZV9pc19mdWxsKG1fbnRmX3JfcHRyLCBtX250Zl93X3B0ciwgTlRGX1FVRVVFX1NJWkUpOworfQorCisvKioKKyAqIENoZWNrIGlmIG5vdGlmaWNhdGlvbiBxdWV1ZSBpcyBlbXB0eS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgTm90aWZpY2F0aW9uIHF1ZXVlIGlzIGVtcHR5LgorICogQHJldHZhbCAgZmFsc2UgIE5vdGlmaWNhdGlvbiBxdWV1ZSBpcyBub3QgZW1wdHkuCisgKi8KK3N0YXRpYyBib29sIG50Zl9xdWV1ZV9pc19lbXB0eSh2b2lkKQoreworICAgIHJldHVybiBxdWV1ZV9pc19lbXB0eShtX250Zl9yX3B0ciwgbV9udGZfd19wdHIpOworfQorCisvKioKKyAqIEluY3JlbWVudCBnaXZlbiBpbmRleCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCBxdWV1ZS4KKyAqCisgKiBAcGFyYW1baW5vdXRdICBwX3B0ciAgUG9pbnRlciB0byB0aGUgaW5kZXggdG8gaW5jcmVtZW50LgorICovCitzdGF0aWMgdm9pZCByZXFfcXVldWVfcHRyX2luY3JlbWVudCh1aW50OF90ICogcF9wdHIpCit7CisgICAgcXVldWVfcHRyX2luY3JlbWVudChwX3B0ciwgUkVRX1FVRVVFX1NJWkUpOworfQorCisvKioKKyAqIENoZWNrIGlmIHJlcXVlc3QgcXVldWUgaXMgZnVsbC4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgUmVxdWVzdCBxdWV1ZSBpcyBmdWxsLgorICogQHJldHZhbCAgZmFsc2UgIFJlcXVlc3QgcXVldWUgaXMgbm90IGZ1bGwuCisgKi8KK3N0YXRpYyBib29sIHJlcV9xdWV1ZV9pc19mdWxsKHZvaWQpCit7CisgICAgcmV0dXJuIHF1ZXVlX2lzX2Z1bGwobV9yZXFfcl9wdHIsIG1fcmVxX3dfcHRyLCBSRVFfUVVFVUVfU0laRSk7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgcmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4KKyAqCisgKiBAcmV0dmFsICB0cnVlICAgUmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4KKyAqIEByZXR2YWwgIGZhbHNlICBSZXF1ZXN0IHF1ZXVlIGlzIG5vdCBlbXB0eS4KKyAqLworc3RhdGljIGJvb2wgcmVxX3F1ZXVlX2lzX2VtcHR5KHZvaWQpCit7CisgICAgcmV0dXJuIHF1ZXVlX2lzX2VtcHR5KG1fcmVxX3JfcHRyLCBtX3JlcV93X3B0cik7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfaW5pdCh2b2lkKQoreworICAgIG1fbnRmX3JfcHRyID0gMDsKKyAgICBtX250Zl93X3B0ciA9IDA7CisKKyAgICBucmZfZWd1X2ludF9lbmFibGUoU1dJX0VHVSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlRGX0lOVCB8CisgICAgICAgICAgICAgICAgICAgICAgIFRJTUVTTE9UX0VYSVRfSU5UIHwKKyAgICAgICAgICAgICAgICAgICAgICAgUkVRX0lOVCk7CisKKyAgICBOVklDX1NldFByaW9yaXR5KFNXSV9JUlFuLCBSQURJT19OT1RJRklDQVRJT05fU1dJX1BSSU9SSVRZKTsKKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShTV0lfSVJRbik7CisgICAgTlZJQ19FbmFibGVJUlEoU1dJX0lSUW4pOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9yZWNlaXZlZCh1aW50OF90ICogcF9kYXRhLCBpbnQ4X3QgcG93ZXIsIGludDhfdCBscWkpCit7CisgICAgYXNzZXJ0KCFudGZfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbnRmX2RhdGFfdCAqIHBfc2xvdCA9ICZtX250Zl9xdWV1ZVttX250Zl93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgID0gTlRGX1RZUEVfUkVDRUlWRUQ7CisgICAgcF9zbG90LT5kYXRhLnJlY2VpdmVkLnBfcHNkdSA9IHBfZGF0YTsKKyAgICBwX3Nsb3QtPmRhdGEucmVjZWl2ZWQucG93ZXIgID0gcG93ZXI7CisgICAgcF9zbG90LT5kYXRhLnJlY2VpdmVkLmxxaSAgICA9IGxxaTsKKworICAgIG50Zl9xdWV1ZV9wdHJfaW5jcmVtZW50KCZtX250Zl93X3B0cik7CisKKyAgICBucmZfZWd1X3Rhc2tfdHJpZ2dlcihTV0lfRUdVLCBOVEZfVEFTSyk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X3RyYW5zbWl0dGVkKHVpbnQ4X3QgKiBwX2RhdGEsIGludDhfdCBwb3dlciwgaW50OF90IGxxaSkKK3sKKyAgICBhc3NlcnQoIW50Zl9xdWV1ZV9pc19mdWxsKCkpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfZGF0YV90ICogcF9zbG90ID0gJm1fbnRmX3F1ZXVlW21fbnRmX3dfcHRyXTsKKworICAgIHBfc2xvdC0+dHlwZSAgICAgICAgICAgICAgICAgICAgPSBOVEZfVFlQRV9UUkFOU01JVFRFRDsKKyAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXR0ZWQucF9wc2R1ID0gcF9kYXRhOworICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdHRlZC5wb3dlciAgPSBwb3dlcjsKKyAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXR0ZWQubHFpICAgID0gbHFpOworCisgICAgbnRmX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fbnRmX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIE5URl9UQVNLKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfYnVzeV9jaGFubmVsKHZvaWQpCit7CisgICAgYXNzZXJ0KCFudGZfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbnRmX2RhdGFfdCAqIHBfc2xvdCA9ICZtX250Zl9xdWV1ZVttX250Zl93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgPSBOVEZfVFlQRV9DSEFOTkVMX0JVU1k7CisKKyAgICBudGZfcXVldWVfcHRyX2luY3JlbWVudCgmbV9udGZfd19wdHIpOworCisgICAgbnJmX2VndV90YXNrX3RyaWdnZXIoU1dJX0VHVSwgTlRGX1RBU0spOworfQorCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9lbmVyZ3lfZGV0ZWN0ZWQoaW50OF90IHJlc3VsdCkKK3sKKyAgICBhc3NlcnQoIW50Zl9xdWV1ZV9pc19mdWxsKCkpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9udGZfZGF0YV90ICogcF9zbG90ID0gJm1fbnRmX3F1ZXVlW21fbnRmX3dfcHRyXTsKKworICAgIHBfc2xvdC0+dHlwZSAgICAgICAgICAgICAgICAgICAgICAgID0gTlRGX1RZUEVfRU5FUkdZX0RFVEVDVEVEOworICAgIHBfc2xvdC0+ZGF0YS5lbmVyZ3lfZGV0ZWN0ZWQucmVzdWx0ID0gcmVzdWx0OworCisgICAgbnRmX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fbnRmX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIE5URl9UQVNLKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV90aW1lc2xvdF9leGl0KHZvaWQpCit7CisgICAgYXNzZXJ0KCFucmZfZWd1X2V2ZW50X2NoZWNrKFNXSV9FR1UsIFRJTUVTTE9UX0VYSVRfRVZFTlQpKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIFRJTUVTTE9UX0VYSVRfVEFTSyk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfc2xlZXAoYm9vbCAqIHBfcmVzdWx0KQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9lbnRlcigpOworICAgIGFzc2VydCghcmVxX3F1ZXVlX2lzX2Z1bGwoKSk7CisKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV9kYXRhX3QgKiBwX3Nsb3QgPSAmbV9yZXFfcXVldWVbbV9yZXFfd19wdHJdOworCisgICAgcF9zbG90LT50eXBlICAgICAgICAgICAgICAgID0gUkVRX1RZUEVfU0xFRVA7CisgICAgcF9zbG90LT5kYXRhLnNsZWVwLnBfcmVzdWx0ID0gcF9yZXN1bHQ7CisKKyAgICByZXFfcXVldWVfcHRyX2luY3JlbWVudCgmbV9yZXFfd19wdHIpOworCisgICAgbnJmX2VndV90YXNrX3RyaWdnZXIoU1dJX0VHVSwgUkVRX1RBU0spOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfcmVjZWl2ZSh1aW50OF90IGNoYW5uZWwsIGJvb2wgKiBwX3Jlc3VsdCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICBhc3NlcnQoIXJlcV9xdWV1ZV9pc19mdWxsKCkpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfZGF0YV90ICogcF9zbG90ID0gJm1fcmVxX3F1ZXVlW21fcmVxX3dfcHRyXTsKKworICAgIHBfc2xvdC0+dHlwZSAgICAgICAgICAgICAgICAgID0gUkVRX1RZUEVfUkVDRUlWRTsKKyAgICBwX3Nsb3QtPmRhdGEucmVjZWl2ZS5jaGFubmVsICA9IGNoYW5uZWw7CisgICAgcF9zbG90LT5kYXRhLnJlY2VpdmUucF9yZXN1bHQgPSBwX3Jlc3VsdDsKKworICAgIHJlcV9xdWV1ZV9wdHJfaW5jcmVtZW50KCZtX3JlcV93X3B0cik7CisKKyAgICBucmZfZWd1X3Rhc2tfdHJpZ2dlcihTV0lfRUdVLCBSRVFfVEFTSyk7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2V4aXQoKTsKK30KKwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV90cmFuc21pdChjb25zdCB1aW50OF90ICogcF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICAgICAgICAgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OF90ICAgICAgICAgIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICAgICAgICAgICAgY2NhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICAgICAgICAgICogcF9yZXN1bHQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisgICAgYXNzZXJ0KCFyZXFfcXVldWVfaXNfZnVsbCgpKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcmVxX2RhdGFfdCAqIHBfc2xvdCA9ICZtX3JlcV9xdWV1ZVttX3JlcV93X3B0cl07CisKKyAgICBwX3Nsb3QtPnR5cGUgICAgICAgICAgICAgICAgICAgPSBSRVFfVFlQRV9UUkFOU01JVDsKKyAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXQucF9kYXRhICAgPSBwX2RhdGE7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LmNoYW5uZWwgID0gY2hhbm5lbDsKKyAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXQucG93ZXIgICAgPSBwb3dlcjsKKyAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXQuY2NhICAgICAgPSBjY2E7CisgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LnBfcmVzdWx0ID0gcF9yZXN1bHQ7CisKKyAgICByZXFfcXVldWVfcHRyX2luY3JlbWVudCgmbV9yZXFfd19wdHIpOworCisgICAgbnJmX2VndV90YXNrX3RyaWdnZXIoU1dJX0VHVSwgUkVRX1RBU0spOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfZW5lcmd5X2RldGVjdGlvbih1aW50OF90IGNoYW5uZWwsIHVpbnQzMl90IHRpbWVfdXMsIGJvb2wgKiBwX3Jlc3VsdCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICBhc3NlcnQoIXJlcV9xdWV1ZV9pc19mdWxsKCkpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfZGF0YV90ICogcF9zbG90ID0gJm1fcmVxX3F1ZXVlW21fcmVxX3dfcHRyXTsKKworICAgIHBfc2xvdC0+dHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUkVRX1RZUEVfRU5FUkdZX0RFVEVDVElPTjsKKyAgICBwX3Nsb3QtPmRhdGEuZW5lcmd5X2RldGVjdGlvbi5jaGFubmVsICA9IGNoYW5uZWw7CisgICAgcF9zbG90LT5kYXRhLmVuZXJneV9kZXRlY3Rpb24udGltZV91cyAgPSB0aW1lX3VzOworICAgIHBfc2xvdC0+ZGF0YS5lbmVyZ3lfZGV0ZWN0aW9uLnBfcmVzdWx0ID0gcF9yZXN1bHQ7CisKKyAgICByZXFfcXVldWVfcHRyX2luY3JlbWVudCgmbV9yZXFfd19wdHIpOworCisgICAgbnJmX2VndV90YXNrX3RyaWdnZXIoU1dJX0VHVSwgUkVRX1RBU0spOworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfY3JpdGljYWxfc2VjdGlvbl9leGl0KCk7Cit9CisKK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfYnVmZmVyX2ZyZWUodWludDhfdCAqIHBfZGF0YSkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIoKTsKKyAgICBhc3NlcnQoIXJlcV9xdWV1ZV9pc19mdWxsKCkpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9yZXFfZGF0YV90ICogcF9zbG90ID0gJm1fcmVxX3F1ZXVlW21fcmVxX3dfcHRyXTsKKworICAgIHBfc2xvdC0+dHlwZSAgICAgICAgICAgICAgICAgICAgPSBSRVFfVFlQRV9CVUZGRVJfRlJFRTsKKyAgICBwX3Nsb3QtPmRhdGEuYnVmZmVyX2ZyZWUucF9kYXRhID0gKHJ4X2J1ZmZlcl90ICopcF9kYXRhOworCisgICAgcmVxX3F1ZXVlX3B0cl9pbmNyZW1lbnQoJm1fcmVxX3dfcHRyKTsKKworICAgIG5yZl9lZ3VfdGFza190cmlnZ2VyKFNXSV9FR1UsIFJFUV9UQVNLKTsKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworfQorCit2b2lkIFNXSV9JUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKG5yZl9lZ3VfZXZlbnRfY2hlY2soU1dJX0VHVSwgTlRGX0VWRU5UKSkKKyAgICB7CisgICAgICAgIG5yZl9lZ3VfZXZlbnRfY2xlYXIoU1dJX0VHVSwgTlRGX0VWRU5UKTsKKworICAgICAgICB3aGlsZSAoIW50Zl9xdWV1ZV9pc19lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X250Zl9kYXRhX3QgKiBwX3Nsb3QgPSAmbV9udGZfcXVldWVbbV9udGZfcl9wdHJdOworCisgICAgICAgICAgICBzd2l0Y2ggKHBfc2xvdC0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5URl9UWVBFX1JFQ0VJVkVEOgorICAgICAgICAgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlY2VpdmVkKHBfc2xvdC0+ZGF0YS5yZWNlaXZlZC5wX3BzZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLnJlY2VpdmVkLnBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS5yZWNlaXZlZC5scWkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTlRGX1RZUEVfVFJBTlNNSVRURUQ6CisgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfdHJhbnNtaXR0ZWQocF9zbG90LT5kYXRhLnRyYW5zbWl0dGVkLnBfcHNkdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Nsb3QtPmRhdGEudHJhbnNtaXR0ZWQucG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0dGVkLmxxaSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBOVEZfVFlQRV9DSEFOTkVMX0JVU1k6CisgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfYnVzeV9jaGFubmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBOVEZfVFlQRV9FTkVSR1lfREVURUNURUQ6CisgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZW5lcmd5X2RldGVjdGVkKHBfc2xvdC0+ZGF0YS5lbmVyZ3lfZGV0ZWN0ZWQucmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBudGZfcXVldWVfcHRyX2luY3JlbWVudCgmbV9udGZfcl9wdHIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5yZl9lZ3VfZXZlbnRfY2hlY2soU1dJX0VHVSwgVElNRVNMT1RfRVhJVF9FVkVOVCkpCisgICAgeworICAgICAgICBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZXhpdCgpOworCisgICAgICAgIG5yZl9lZ3VfZXZlbnRfY2xlYXIoU1dJX0VHVSwgVElNRVNMT1RfRVhJVF9FVkVOVCk7CisgICAgfQorCisgICAgaWYgKG5yZl9lZ3VfZXZlbnRfY2hlY2soU1dJX0VHVSwgUkVRX0VWRU5UKSkKKyAgICB7CisgICAgICAgIG5yZl9lZ3VfZXZlbnRfY2xlYXIoU1dJX0VHVSwgUkVRX0VWRU5UKTsKKworICAgICAgICB3aGlsZSAoIXJlcV9xdWV1ZV9pc19lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3JlcV9kYXRhX3QgKiBwX3Nsb3QgPSAmbV9yZXFfcXVldWVbbV9yZXFfcl9wdHJdOworCisgICAgICAgICAgICBzd2l0Y2ggKHBfc2xvdC0+dHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJFUV9UWVBFX1NMRUVQOgorICAgICAgICAgICAgICAgICAgICAqKHBfc2xvdC0+ZGF0YS5zbGVlcC5wX3Jlc3VsdCkgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9zbGVlcCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUkVRX1RZUEVfUkVDRUlWRToKKyAgICAgICAgICAgICAgICAgICAgKihwX3Nsb3QtPmRhdGEucmVjZWl2ZS5wX3Jlc3VsdCkgPSBucmZfZHJ2X3JhZGlvODAyMTU0X2ZzbV9yZWNlaXZlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS5yZWNlaXZlLmNoYW5uZWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUkVRX1RZUEVfVFJBTlNNSVQ6CisgICAgICAgICAgICAgICAgICAgICoocF9zbG90LT5kYXRhLnRyYW5zbWl0LnBfcmVzdWx0KSA9IG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX3RyYW5zbWl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdC5wX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLnRyYW5zbWl0LnBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfc2xvdC0+ZGF0YS50cmFuc21pdC5jY2EpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUkVRX1RZUEVfRU5FUkdZX0RFVEVDVElPTjoKKyAgICAgICAgICAgICAgICAgICAgKihwX3Nsb3QtPmRhdGEuZW5lcmd5X2RldGVjdGlvbi5wX3Jlc3VsdCkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfZnNtX2VuZXJneV9kZXRlY3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Nsb3QtPmRhdGEuZW5lcmd5X2RldGVjdGlvbi5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9zbG90LT5kYXRhLmVuZXJneV9kZXRlY3Rpb24udGltZV91cyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSRVFfVFlQRV9CVUZGRVJfRlJFRToKKyAgICAgICAgICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9mc21fbm90aWZ5X2J1ZmZlcl9mcmVlKHBfc2xvdC0+ZGF0YS5idWZmZXJfZnJlZS5wX2RhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlcV9xdWV1ZV9wdHJfaW5jcmVtZW50KCZtX3JlcV9yX3B0cik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9ucmZfZHJ2X3JhZGlvODAyMTU0X3N3aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjhmMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2kuaApAQCAtMCwwICsxLDE0NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfRFJJVkVSX1JBRElPODAyMTU0X1NXSV9IX18KKyNkZWZpbmUgTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9TV0lfSF9fCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAZGVmZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NF9zd2kgODAyLjE1LjQgZHJpdmVyIFNXSSBtYW5hZ2VtZW50CisgKiBAeworICogQGluZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NAorICogQGJyaWVmIFNXSSBtYW5hZ2VyIGZvciA4MDIuMTUuNCBkcml2ZXIuCisgKi8KKworLyoqCisgKiBAYnJpZWYgSW5pdGlhbGl6ZSBTV0kgbW9kdWxlLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX2luaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20gU1dJIHByaW9yaXR5IGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfZGF0YSAgQXJyYXkgb2YgYnl0ZXMgY29udGFpbmluZyBQU0RVLiBGaXJzdCBieXRlIGNvbnRhaW5zIGZyYW1lIGxlbmd0aCwgb3RoZXIgY29udGFpbiB0aGUgZnJhbWUgaXRzZWxmLgorICogQHBhcmFtW2luXSAgcG93ZXIgICBSU1NJIG1lYXN1cmVkIGR1cmluZyB0aGUgZnJhbWUgcmVjZXB0aW9uLgorICogQHBhcmFtW2luXSAgbHFpICAgICBMUUkgaW5kaWNhdGluZyBtZWFzdXJlZCBsaW5rIHF1YWxpdHkgZHVyaW5nIHRoZSBmcmFtZSByZWNlcHRpb24uCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfbm90aWZ5X3JlY2VpdmVkKHVpbnQ4X3QgKiBwX2RhdGEsIGludDhfdCBwb3dlciwgaW50OF90IGxxaSk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGEgZnJhbWUgd2FzIHRyYW5zbWl0dGVkIGZyb20gU1dJIHByaW9yaXR5IGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfYWNrICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIFBTRFUgb2YgQUNLIGZyYW1lLiBOVUxMIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4KKyAqIEBwYXJhbVtpbl0gIHBvd2VyICBSU1NJIG9mIHJlY2VpdmVkIGZyYW1lIG9yIDAgaWYgQUNLIHdhcyBub3QgcmVxdWVzdGVkLgorICogQHBhcmFtW2luXSAgbHFpICAgIExRSSBvZiByZWNlaXZlZCBmcmFtZSBvZiAwIGlmIEFDSyB3YXMgbm90IHJlcXVlc3RlZC4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9ub3RpZnlfdHJhbnNtaXR0ZWQodWludDhfdCAqIHBfZGF0YSwgaW50OF90IHBvd2VyLCBpbnQ4X3QgbHFpKTsKKworLyoqCisgKiBAYnJpZWYgTm90aWZ5IG5leHQgaGlnaGVyIGxheWVyIHRoYXQgYSBmcmFtZSB3YXMgbm90IHRyYW5zbWl0dGVkIGZyb20gU1dJIHByaW9yaXR5IGxldmVsLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9idXN5X2NoYW5uZWwodm9pZCk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBuZXh0IGhpZ2hlciBsYXllciB0aGF0IGVuZXJneSBkZXRlY3Rpb24gcHJvY2VkdXJlIGVuZGVkIGZyb20gU1dJIHByaW9yaXR5IGxldmVsLgorICoKKyAqIEBwYXJhbVtpbl0gIHJlc3VsdCAgRGV0ZWN0ZWQgZW5lcmd5IGxldmVsLgorICovCit2b2lkIG5yZl9kcnZfcmFkaW84MDIxNTRfc3dpX25vdGlmeV9lbmVyZ3lfZGV0ZWN0ZWQoaW50OF90IHJlc3VsdCk7CisKKy8qKgorICogQGJyaWVmIFJlcXVlc3QgZGlzY2FyZGluZyBvZiB0aGUgdGltZXNsb3QgZnJvbSBTV0kgcHJpb3JpdHkgbGV2ZWwuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRocm91Z2ggbm90aWZpY2F0aW9uIG1vZHVsZSB0byBwcmV2ZW50IGNhbGxpbmcgaXQgZnJvbSBhcmJpdGVyIGNvbnRleHQuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfdGltZXNsb3RfZXhpdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCBlbnRlcmluZyBzbGVlcCBzdGF0ZSBmcm9tIFNXSSBwcmlvcml0eS4KKyAqCisgKiBAcGFyYW1bb3V0XSAgcF9yZXN1bHQgIFJlc3VsdCBvZiBlbnRlcmluZyBzbGVlcCBzdGF0ZS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV9zbGVlcChib29sICogcF9yZXN1bHQpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IGVudGVyaW5nIHJlY2VpdmUgc3RhdGUgZnJvbSBTV0kgcHJpb3JpdHkuCisgKgorICogQHBhcmFtW2luXSAgIGNoYW5uZWwgICBDaGFubmVsIG51bWJlciB1c2VkIGZvciByZWNlaXZlIHByb2NlZHVyZS4KKyAqIEBwYXJhbVtvdXRdICBwX3Jlc3VsdCAgUmVzdWx0IG9mIGVudGVyaW5nIHJlY2VpdmUgc3RhdGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfcmVjZWl2ZSh1aW50OF90IGNoYW5uZWwsIGJvb2wgKiBwX3Jlc3VsdCk7CisKKy8qKgorICogQGJpcmVmIFJlcXVlc3QgZW50ZXJpbmcgdHJhbnNtaXQgc3RhdGUgZnJvbSBTV0kgcHJpb3JpdHkuCisgKgorICogQHBhcmFtW2luXSAgIHBfZGF0YSAgICBQb2ludGVyIHRvIFBTRFUgb2YgdGhlIGZyYW1lIHRvIHRyYW5zbWl0LgorICogQHBhcmFtW2luXSAgIGNoYW5uZWwgICBDaGFubmVsIG51bWJlciB1c2VkIGZvciByZXF1ZXN0ZWQgdHJhbnNtaXNzaW9uLgorICogQHBhcmFtW2luXSAgIHBvd2VyICAgICBUcmFuc21pdHRlciBwb3dlciBmb3IgcmVxdWVzdGVkIHRyYW5zbWlzc2lvbi4KKyAqIEBwYXJhbVtpbl0gICBjY2EgICAgICAgSWYgdGhlIGRyaXZlciBzaG91bGQgcGVyZm9ybSBDQ0EgcHJvY2VkdXJlIGJlZm9yZSB0cmFuc21pc3Npb24uCisgKiBAcGFyYW1bb3V0XSAgcF9yZXN1bHQgIFJlc3VsdCBvZiBlbnRlcmluZyB0cmFuc21pdCBzdGF0ZS4KKyAqLwordm9pZCBucmZfZHJ2X3JhZGlvODAyMTU0X3N3aV90cmFuc21pdChjb25zdCB1aW50OF90ICogcF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICAgICAgICAgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OF90ICAgICAgICAgIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICAgICAgICAgICAgY2NhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICAgICAgICAgICogcF9yZXN1bHQpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0IGVudGVyaW5nIGVuZXJneSBkZXRlY3Rpb24gc3RhdGUgZnJvbSBTV0kgcHJpb3JpdHkuCisgKgorICogQHBhcmFtW2luXSAgIGNoYW5uZWwgICBDaGFubmVsIG51bWJlciB1c2VkIGZvciB0aGUgZW5lcmd5IGRldGVjdGlvbiBwcm9jZWR1cmUuCisgKiBAcGFyYW1baW5dICAgdGltZV91cyAgIFJlcXVlc3RlZCBkdXJhdGlvbiBvZiBlbmVyZ3kgZGV0ZWN0aW9uIHByb2NlZHVyZS4KKyAqIEBwYXJhbVtvdXRdICBwX3Jlc3VsdCAgUmVzdWx0IG9mIGVudGVyaW5nIGVuZXJneSBkZXRlY3Rpb24gc3RhdGUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfZW5lcmd5X2RldGVjdGlvbih1aW50OF90IGNoYW5uZWwsIHVpbnQzMl90IHRpbWVfdXMsIGJvb2wgKiBwX3Jlc3VsdCk7CisKKy8qKgorICogQGJyaWVmIE5vdGlmeSBGU00gdGhhdCBnaXZlbiBidWZmZXIgaXMgbm90IHVzZWQgYW55bW9yZSBhbmQgY2FuIGJlIGZyZWVkLgorICoKKyAqIEBwYXJhbVtpbl0gIHBfZGF0YSAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGZyZWUuCisgKi8KK3ZvaWQgbnJmX2Rydl9yYWRpbzgwMjE1NF9zd2lfYnVmZmVyX2ZyZWUodWludDhfdCAqIHBfZGF0YSk7CisKKy8qKgorICpAfQorICoqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gTlJGX0RSSVZFUl9SQURJTzgwMjE1NF9TV0lfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9ucmZfcmFhbF9hcGkuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL25yZl9yYWFsX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTgwY2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9ucmZfcmFhbF9hcGkuaApAQCAtMCwwICsxLDE3NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBtb2R1bGUgZGVmaW5lcyBSYWRpbyBBcmJpdGVyIEFic3RyYWN0aW9uIExheWVyIGludGVyZmFjZS4KKyAqCisgKi8KKworI2lmbmRlZiBOUkZfUkFBTF9BUElfSF8KKyNkZWZpbmUgTlJGX1JBQUxfQVBJX0hfCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAZGVmZ3JvdXAgbnJmX3JhYWwgUmFkaW8gQXJiaXRlciBBYnN0cmFjdGlvbiBMYXllcgorICogQHsKKyAqIEBpbmdyb3VwIG5yZl9kcml2ZXJfcmFkaW84MDIxNTQKKyAqIEBicmllZiBSYWRpbyBBcmJpdGVyIEFic3RyYWN0aW9uIExheWVyIGludGVyZmFjZS4KKyAqLworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXplIFJBQUwuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgb25jZSwgYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbiBmcm9tIHRoaXMgbW9kdWxlLgorICoKKyAqIEluaXRpYWxpemUgUmFkaW8gQXJiaXRlciBBYnN0cmFjdGlvbiBMYXllciBjbGllbnQuCisgKgorICogQG5vdGUgQXJiaXRlciBzdGFydHMgaW4gaW5hY3RpdmUgbW9kZSBhZnRlciBpbml0aWFsaXphdGlvbi4gSW4gb3JkZXIgdG8gc3RhcnQgcmFkaW8gYWN0aXZpdHkKKyAqICAgICAgIEBwIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9lbnRlciBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZC4KKyAqCisgKi8KK3ZvaWQgbnJmX3JhYWxfaW5pdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgVW5pbml0aWFsaXplIFJBQUwuCisgKgorICogVW5pbml0aWFsaXplIFJhZGlvIEFyYml0ZXIgQWJzdHJhY3Rpb24gTGF5ZXIgY2xpZW50LgorICoKKyAqLwordm9pZCBucmZfcmFhbF91bmluaXQodm9pZCk7CisKKy8qKgorICogQGJyaWVmIEVudGVyIGFyYml0ZXIgaW50byBjb250aW51b3VzIHJhZGlvIG1vZGUuCisgKgorICogSW4gdGhpcyBtb2RlIHJhZGlvIGFyYml0ZXIgc2hvdWxkIHRyeSB0byBjcmVhdGUgbG9uZyBjb250aW51b3VzIHRpbWVzbG90cyB0aGF0IHdpbGwgZ2l2ZSB0aGUKKyAqIHJhZGlvIGRyaXZlciBhcyBtdWNoIHJhZGlvIHRpbWUgYXMgcG9zc2libGUgd2hpbGUgZGlzdHVyYmluZyB0aGUgb3RoZXIgYWN0aXZpdGllcyBhcyBsaXR0bGUKKyAqIGFzIHBvc3NpYmxlLgorICogVGhlIGFyYml0ZXIgY2xpZW50IHNoYWxsIG1ha2Ugc3VyZSB0aGF0IGhpZ2ggZnJlcXVlbmN5IGNsb2NrIGlzIGVuYWJsZWQgaW4gZWFjaCB0aW1lc2xvdC4KKyAqCisgKiBAbm90ZSBUaGUgc3RhcnQgb2YgYSB0aW1lc2xvdCB3aWxsIGJlIGluZGljYXRlZCBieSBAcCBucmZfcmFhbF90aW1lc2xvdF9zdGFydGVkIGNhbGwuCisgKgorICovCit2b2lkIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9lbnRlcih2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgRXhpdCBhcmJpdGVyIGZyb20gY29udGlub3VzIG1vZGUuCisgKgorICogSW4gdGhpcyBtb2RlIHJhZGlvIGFyYml0ZXIgd2lsbCBub3QgZXh0ZW5kIG9yIGFsbG9jYXRlIGFueSBtb3JlIHRpbWVzbG90cyBmb3IgcmFkaW8gZHJpdmVyLgorICoKKyAqLwordm9pZCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZXhpdCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUmVxdWVzdCB0aW1lc2xvdCBmb3IgcmFkaW8gY29tbXVuaWNhdGlvbi4KKyAqCisgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgQHAgbnJmX3JhYWxfdGltZXNsb3Rfc3RhcnRlZCBpbmRpY2F0ZWQgdGhlIHN0YXJ0CisgKiBvZiBhIHRpbWVzbG90LgorICoKKyAqIEBwYXJhbVtpbl0gbGVuZ3RoX3VzICBSZXF1ZXN0ZWQgcmFkaW8gdGltZXNsb3QgbGVuZ3RoIGluIG1pY3Jvc2Vjb25kLgorICoKKyAqIEByZXR2YWwgVFJVRSAgVGhlIHJhZGlvIGRyaXZlciBub3cgaGFzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIFJBRElPIHBlcmlwaGVyYWwgZm9yIHRoZQorICogICAgICAgICAgICAgICBmdWxsIGxlbmd0aCBvZiB0aGUgdGltZXNsb3QuCisgKiBAcmV0dmFsIEZBTFNFIFNsb3QgY2Fubm90IGJlIGFzc2lnbmVkIGR1ZSB0byBvdGhlciBhY3Rpdml0aWVzLgorICoKKyAqLworYm9vbCBucmZfcmFhbF90aW1lc2xvdF9yZXF1ZXN0KHVpbnQzMl90IGxlbmd0aF91cyk7CisKKy8qKgorICogQGJyaWVmIEdldCBsZWZ0IHRpbWUgb2YgY3VycmVudGx5IGdyYW50ZWQgdGltZXNsb3QgW3VzXS4KKyAqCisgKiBAcmV0dXJucyAgTnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBsZWZ0IGluIGN1cnJlbnRseSBncmFudGVkIHRpbWVzbG90LgorICovCit1aW50MzJfdCBucmZfcmFhbF90aW1lc2xvdF91c19sZWZ0X2dldCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgRW50ZXIgY3JpdGljYWwgc2VjdGlvbiBvZiB0aGUgbW9kdWxlLgorICoKKyAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBAbnJmX3JhYWxfdGltZXNsb3RfZW5kZWQgZnVuY3Rpb24gaXMgYmxvY2tlZC4KKyAqCisgKi8KK3ZvaWQgbnJmX3JhYWxfY3JpdGljYWxfc2VjdGlvbl9lbnRlcih2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgRXhpdCBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBtb2R1bGUuCisgKgorICogV2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZHJpdmVyIGhhcyB0byBleHBlY3QgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgQG5yZl9yYWFsX3RpbWVzbG90X2VuZGVkCisgKiBmdW5jdGlvbi4KKyAqCisgKi8KK3ZvaWQgbnJmX3JhYWxfY3JpdGljYWxfc2VjdGlvbl9leGl0KHZvaWQpOworCisvKioKKyAqIEBicmllZiBSQUFMIGNsaWVudCBjYWxscyB0aGlzIG1ldGhvZCB0byBub3RpZnkgcmFkaW8gZHJpdmVyIGFib3V0IHRoZSBzdGFydCBvZiBhIHRpbWVzbG90LgorICoKKyAqIFRoZSByYWRpbyBkcml2ZXIgbm93IGhhcyBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBwZXJpcGhlcmFscyB1bnRpbCBAcCBucmZfcmFhbF90aW1lc2xvdF9lbmRlZAorICogaXMgY2FsbGVkLgorICoKKyAqIEBub3RlIFRoZSBoaWdoIGZyZXF1ZW5jeSBjbG9jayBtdXN0IGJlIGVuYWJsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIEBub3RlIFRoZSBlbmQgb2YgdGhlIHRpbWVzbG90IHdpbGwgYmUgaW5kaWNhdGVkIGJ5IEBwIG5yZl9yYWFsX3RpbWVzbG90X2VuZGVkIGZ1bmN0aW9uLgorICoKKyAqLworZXh0ZXJuIHZvaWQgbnJmX3JhYWxfdGltZXNsb3Rfc3RhcnRlZCh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgUkFBTCBjbGllbnQgY2FsbHMgdGhpcyBtZXRob2QgdG8gbm90aWZ5IHJhZGlvIGRyaXZlciBhYm91dCB0aGUgZW5kIG9mIGEgdGltZXNsb3QuCisgKgorICogRGVwZW5kaW5nIG9uIHRoZSBSQUFMIGNsaWVudCBjb25maWd1cmF0aW9uLCByYWRpbyBkcml2ZXIgaGFzIE5SRl9SQUFMX01BWF9DTEVBTl9VUF9USU1FX1VTCisgKiBtaWNyb3NlY29uZHMgdG8gZG8gYW55IGNsZWFuLXVwIGFjdGlvbnMgb24gUkFESU8gcGVyaXBoZXJhbCBhbmQgc3RvcCB1c2luZyBpdCBjb21wbGV0ZWx5LgorICogVGh1cyBhcmJpdGVyIGhhcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gTlJGX1JBQUxfTUFYX0NMRUFOX1VQX1RJTUVfVVMgbWljcm9zZWNvbmRzIGJlZm9yZQorICogdGltZXNsb3QgaXMgZmluaXNoZWQuCisgKgorICogSWYgUkFBTCBpcyBpbiB0aGUgY29udGludW91cyBtb2RlLCB0aGUgbmV4dCB0aW1lc2xvdCB3aWxsIGJlIGluZGljYXRlZCBhZ2FpbiBieQorICogQHAgbnJmX3JhYWxfdGltZXNsb3Rfc3RhcnRlZCBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIG1ldGhvZCBzaGFsbCBub3QgYmUgY2FsbGVkIGlmIEBwIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9leGl0IGhhcyBiZWVuIGNhbGxlZC4gUmFkaW8KKyAqIGRyaXZlciBzaGFsbCBhc3N1bWUgdGhhdCB0aW1lc2xvdCBoYXMgYmVlbiBmaW5pc2hlZCBhZnRlciBAcCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZXhpdAorICogY2FsbC4KKyAqCisgKiBAbm90ZSBCZWNhdXNlIHJhZGlvIGRyaXZlciBuZWVkcyB0byBzdG9wIGFueSBvcGVyYXRpb24gb24gUkFESU8gcGVyaXBoZXJhbCB3aXRoaW4KKyAqICAgICAgIE5SRl9SQUFMX01BWF9DTEVBTl9VUF9USU1FX1VTIG1pY3Jvc2Vjb25kcywgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGhpZ2gKKyAqICAgICAgIGludGVycnVwdCBwcmlvcml0eSBsZXZlbCB0byBhdm9pZCB1bndhbnRlZCBkZWxheXMuCisgKgorICovCitleHRlcm4gdm9pZCBucmZfcmFhbF90aW1lc2xvdF9lbmRlZCh2b2lkKTsKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOUkZfUkFBTF9BUElfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL25yZl9yYWFsX2NvbmZpZy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvbnJmX3JhYWxfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2NWE2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL25yZl9yYWFsX2NvbmZpZy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgTlJGX1JBQUxfQ09ORklHX0hfXworI2RlZmluZSBOUkZfUkFBTF9DT05GSUdfSF9fCisKKyNpbmNsdWRlIDxucmYuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBkZWZncm91cCBucmZfcmFhbF9jb25maWcgUkFBTCBjb25maWd1cmF0aW9uCisgKiBAeworICogQGluZ3JvdXAgbnJmX2RyaXZlcl9yYWRpbzgwMjE1NAorICogQGJyaWVmIENvbmZpZ3VyYXRpb24gb2YgUmFkaW8gQXJiaXRlciBBYnN0cmFjdGlvbiBMYXllci4KKyAqLworCisvKioKKyAqIEBkZWYgTlJGX1JBQUxfTUFYX0NMRUFOX1VQX1RJTUVfVVMKKyAqCisgKiBNYXhpbXVtIHRpbWUgd2l0aGluIHJhZGlvIGRyaXZlciBuZWVkcyB0byBkbyBhbnkgY2xlYW4tdXAgYWN0aW9ucyBvbiBSQURJTyBwZXJpcGhlcmFsCisgKiBhbmQgc3RvcCB1c2luZyBpdCBjb21wbGV0ZWx5LgorICoKKyAqLworI2lmbmRlZiBOUkZfUkFBTF9NQVhfQ0xFQU5fVVBfVElNRV9VUworI2RlZmluZSBOUkZfUkFBTF9NQVhfQ0xFQU5fVVBfVElNRV9VUyAgMTAwCisjZW5kaWYKKworLyoqCisgKiBAZGVmIE5SRl9SQUFMX0hGQ0xLX1NUQVJUCisgKgorICogTWFjcm8gdG8gcmVxdWVzdCBIaWdoIEZyZXF1ZW5jeSBDbG9jayBzdGFydC4gSXQgbWF5IHVzZSBleHRlcm5hbCBkcml2ZXIgb3IgT1MgZnVuY3Rpb24uCisgKgorICovCisjZGVmaW5lIE5SRl9SQUFMX0hGQ0xLX1NUQVJUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5SRl9DTE9DSy0+VEFTS1NfSEZDTEtTVEFSVCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHdoaWxlKE5SRl9DTE9DSy0+SEZDTEtTVEFUICE9IChDTE9DS19IRkNMS1NUQVRfU1JDX01zayB8IENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Nc2spKSB7fSAgICBcCisgICAgfSB3aGlsZSgwKTsKKworLyoqCisgKiBAZGVmIE5SRl9SQUFMX0hGQ0xLX1NUT1AKKyAqCisgKiBNYWNybyB0byByZWxlYXNlIEhpZ2ggRnJlcXVlbmN5IENsb2NrLiBJdCBtYXkgdXNlIGV4dGVybmFsIGRyaXZlciBvciBPUyBmdW5jdGlvbi4KKyAqCisgKi8KKyNkZWZpbmUgTlJGX1JBQUxfSEZDTEtfU1RPUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTlJGX0NMT0NLLT5UQVNLU19IRkNMS1NUT1AgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApOworCisvKioKKyAqQH0KKyAqKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIE5SRl9SQUFMX0NPTkZJR19IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NpbmdsZV9waHkvc2luZ2xlX3BoeS5jIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9kcml2ZXJzL3JhZGlvL3JhYWwvc2luZ2xlX3BoeS9zaW5nbGVfcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MjgwNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NpbmdsZV9waHkvc2luZ2xlX3BoeS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIG5yZiA4MDIuMTUuNCByYWRpbyBhcmJpdGVyIGZvciBzaW5nbGUgcGh5LgorICoKKyAqIFRoaXMgYXJiaXRlciBzaG91bGQgYmUgdXNlZCB3aGVuIDgwMi4xNS40IGlzIHRoZSBvbmx5IHdpcmVsZXNzIHByb3RvY29sIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX3JhYWxfYXBpLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJucmZfcmFhbF9jb25maWcuaCIKKworc3RhdGljIGJvb2wgbV9jb250aW51b3VzOworCit2b2lkIG5yZl9yYWFsX2luaXQodm9pZCkKK3sKKyAgICBtX2NvbnRpbnVvdXMgPSBmYWxzZTsKK30KKwordm9pZCBucmZfcmFhbF91bmluaXQodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5LgorfQorCit2b2lkIG5yZl9yYWFsX2NvbnRpbnVvdXNfbW9kZV9lbnRlcih2b2lkKQoreworICAgIGFzc2VydCghbV9jb250aW51b3VzKTsKKworICAgIE5SRl9SQUFMX0hGQ0xLX1NUQVJUKCk7CisgICAgbV9jb250aW51b3VzID0gdHJ1ZTsKKworICAgIG5yZl9yYWFsX3RpbWVzbG90X3N0YXJ0ZWQoKTsKK30KKwordm9pZCBucmZfcmFhbF9jb250aW51b3VzX21vZGVfZXhpdCh2b2lkKQoreworICAgIGFzc2VydChtX2NvbnRpbnVvdXMpOworCisgICAgbV9jb250aW51b3VzID0gZmFsc2U7CisgICAgTlJGX1JBQUxfSEZDTEtfU1RPUCgpOworfQorCitib29sIG5yZl9yYWFsX3RpbWVzbG90X3JlcXVlc3QodWludDMyX3QgbGVuZ3RoX3VzKQoreworICAgICh2b2lkKSBsZW5ndGhfdXM7CisKKyAgICBhc3NlcnQobV9jb250aW51b3VzKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MzJfdCBucmZfcmFhbF90aW1lc2xvdF91c19sZWZ0X2dldCh2b2lkKQoreworICAgIHJldHVybiBVSU5UMzJfTUFYOworfQorCit2b2lkIG5yZl9yYWFsX2NyaXRpY2FsX3NlY3Rpb25fZW50ZXIodm9pZCkKK3sKKyAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5LgorfQorCit2b2lkIG5yZl9yYWFsX2NyaXRpY2FsX3NlY3Rpb25fZXhpdCh2b2lkKQoreworICAgIC8vIEludGVudGlvbmFsbHkgZW1wdHkuCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuYyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NvZnRkZXZpY2UvbnJmX3JhYWxfc29mdGRldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYjVjMTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuYwpAQCAtMCwwICsxLDY5MiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE3LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0EKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyoqCisgKiBAZmlsZQorICogICBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgbnJmIDgwMi4xNS40IHJhZGlvIGFyYml0ZXIgZm9yIHNvZnRkZXZpY2UuCisgKgorICogVGhpcyBhcmJpdGVyIHNob3VsZCBiZSB1c2VkIHdoZW4gODAyLjE1LjQgd29ya3MgY29uY3VycmVudGx5IHdpdGggU29mdERldmljZSdzIHJhZGlvIHN0YWNrLgorICoKKyAqLworCisjaW5jbHVkZSAibnJmX3JhYWxfc29mdGRldmljZS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8bnJmX3JhYWxfYXBpLmg+CisjaW5jbHVkZSA8bnJmX2Rydl9yYWRpbzgwMjE1NF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5yZl9kcnZfY2xvY2suaD4KKyNpbmNsdWRlIDxzb2Z0ZGV2aWNlLmg+CisKKy8qKkBicmllZiBFbmFibGUgUmVxdWVzdCBhbmQgRW5kIG9uIHRpbWVzbG90IHNhZmV0eSBpbnRlcnJ1cHQuICovCisjZGVmaW5lIEVOQUJMRV9SRVFVRVNUX0FORF9FTkRfT05fVElNRVNMT1RfRU5EIDAKKworLyoqQGJyaWVmIE1heGltdW0gaml0dGVyIHJlbGF0aXZlIHRvIHRoZSBzdGFydCB0aW1lIG9mIFNUQVJUIGFuZCBUSU1FUjAgKHNhZmV0eSBtYXJnaW4pIGV2ZW50cyAuICovCisjZGVmaW5lIFRJTUVSX1RPX1NJR05BTF9KSVRURVJfVVMgTlJGX1JBRElPX1NUQVJUX0pJVFRFUl9VUyArIDYKKworLyoqQGJyaWVmIFRpbWVyIGNvbXBhcmUgY2hhbm5lbCBkZWZpbml0aW9ucy4gKi8KKyNkZWZpbmUgVElNRVJfQ0NfRVhURU5EICAgICAgICAgICAwCisjZGVmaW5lIFRJTUVSX0NDX0VYVEVORF9JTlRFTlNFVCAgVElNRVJfSU5URU5TRVRfQ09NUEFSRTBfTXNrCisjZGVmaW5lIFRJTUVSX0NDX0VYVEVORF9JTlRFTkNMUiAgVElNRVJfSU5URU5DTFJfQ09NUEFSRTBfUG9zCisKKyNkZWZpbmUgVElNRVJfQ0NfTUFSR0lOICAgICAgICAgICAxCisjZGVmaW5lIFRJTUVSX0NDX01BUkdJTl9JTlRFTlNFVCAgVElNRVJfSU5URU5TRVRfQ09NUEFSRTFfTXNrCisjZGVmaW5lIFRJTUVSX0NDX01BUkdJTl9JTlRFTkNMUiAgVElNRVJfSU5URU5DTFJfQ09NUEFSRTFfUG9zCisKKyNkZWZpbmUgVElNRVJfQ0NfQ0FQVFVSRSAgICAgICAgICAyCisKKy8qKkBicmllZiBEZWZpbmVzIG51bWJlciBvZiBtaWNyb3NlY29uZHMgaW4gb25lIHNlY29uZC4gKi8KKyNkZWZpbmUgVVNfUEVSX1MgICAgICAgICAgICAgICAgICAxMDAwMDAwCisKKy8qKkBicmllZiBDZWlsIGRpdmlzaW9uIGhlbHBlciAqLworI2RlZmluZSBESVZJREVfQU5EX0NFSUwoQSwgQikgKCgoQSkgKyAoQikgLSAxKSAvIChCKSkKKworLyoqQGJyaWVmIERlZmluZXMgcGVuZGluZyBldmVudHMuICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBQRU5ESU5HX0VWRU5UX05PTkUgPSAwLAorICAgIFBFTkRJTkdfRVZFTlRfU1RBUlRFRCwKKyAgICBQRU5ESU5HX0VWRU5UX0VOREVECit9IHBlbmRpbmdfZXZlbnRzX3Q7CisKKy8qKkBicmllZiBSZXF1ZXN0IHBhcmFtZXRlcnMuICovCitzdGF0aWMgbnJmX3JhZGlvX3JlcXVlc3RfdCBtX3JlcXVlc3Q7CisKKy8qKkBicmllZiBSZXR1cm4gcGFyYW1ldGVyIGZvciBTRCByYWRpbyBzaWduYWwgaGFuZGxlci4gKi8KK3N0YXRpYyBucmZfcmFkaW9fc2lnbmFsX2NhbGxiYWNrX3JldHVybl9wYXJhbV90IG1fcmV0X3BhcmFtOworCisvKipAYnJpZWYgQ3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSBSQUFMLiAqLworc3RhdGljIG5yZl9yYWFsX3NvZnRkZXZpY2VfY2ZnX3QgbV9jb25maWc7CisKKy8qKkBicmllZiBDdXJyZW50IHRpbWVzbG90IGxlbmd0aC4gKi8KK3N0YXRpYyB1aW50MTZfdCBtX3RpbWVzbG90X2xlbmd0aDsKKworLyoqQGJyaWVmIERlZmluZXMgaWYgUkFBTCBpcyBpbiBjb250aW5vdXMgbW9kZS4gKi8KK3N0YXRpYyB2b2xhdGlsZSBib29sIG1fY29udGludW91cyA9IGZhbHNlOworCisvKipAYnJpZWYgRGVmaW5lcyBpZiBSQUFMIGlzIGN1cnJlbnRseSBpbiBhIHRpbWVzbG90LiAqLworc3RhdGljIHZvbGF0aWxlIGJvb2wgbV9pbl90aW1lc2xvdCA9IGZhbHNlOworCisvKipAYnJpZWYgQ3VycmVudCBpdGVyYXRpb24gcHJvY2VzcyBudW1iZXIuICovCitzdGF0aWMgdm9sYXRpbGUgdWludDE2X3QgbV9hbGxvY19pdGVyczsKKworLyoqQGJyaWVmIERlZmluZXMgaWYgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLiAqLworc3RhdGljIGJvb2wgbV9pbml0aWFsaXplID0gZmFsc2U7CisKKy8qKkBicmVpZiBEZWZpbmVzIGlmIFJhZGlvIERyaXZlciBlbnRlcmVkIGNyaXRpY2FsIHNlY3Rpb24uICovCitzdGF0aWMgdm9sYXRpbGUgYm9vbCBtX2luX2NyaXRpY2FsX3NlY3Rpb24gPSBmYWxzZTsKKworLyoqQGJyaWVmIERlZmluZXMgY3VycmVudCBwZW5kaW5nIGV2ZW50LiAqLworc3RhdGljIHZvbGF0aWxlIHBlbmRpbmdfZXZlbnRzX3QgbV9wZW5kaW5nX2V2ZW50ID0gUEVORElOR19FVkVOVF9OT05FOworCisvKipAYnJpZWYgRGVmaW5lcyBSVEMwIGNvdW50ZXIgdmFsdWUgb24gdGltZXNsb3QgYmVnaW4uICovCitzdGF0aWMgdWludDMyX3QgbV9zdGFydF9ydGNfdGlja3MgPSAwOworCisvKipAYnJpZWYgRXh0ZXJuYWwgSW50ZXJydXB0IGZyb20gUkFESU8uICovCitleHRlcm4gdm9pZCBSQURJT19JUlFIYW5kbGVyKHZvaWQpOworCisvKipAYnJpZWYgSW5pdGlhbGl6ZSB0aW1lc2xvdCBpbnRlcm5hbCB2YXJpYWJsZXMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXNsb3RfZGF0YV9pbml0KHZvaWQpCit7CisgICAgbV9hbGxvY19pdGVycyAgICAgPSAwOworICAgIG1fdGltZXNsb3RfbGVuZ3RoID0gbV9jb25maWcudGltZXNsb3RfbGVuZ3RoOworfQorCisvKipAYnJpZWYgR2V0IGFjdHVhbCB0aW1lLiAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCB0aW1lcl90aW1lX2dldCh2b2lkKQoreworICAgIE5SRl9USU1FUjAtPlRBU0tTX0NBUFRVUkVbVElNRVJfQ0NfQ0FQVFVSRV0gPSAxOworICAgIHJldHVybiBOUkZfVElNRVIwLT5DQ1tUSU1FUl9DQ19DQVBUVVJFXTsKK30KKworLyoqQGJyaWVmIENoZWNrIGlmIG1hcmdpbiBpcyBhbHJlYWR5IHJlYWNoZWQuICovCitzdGF0aWMgaW5saW5lIGJvb2wgdGltZXJfaXNfbWFyZ2luX3JlYWNoZWQodm9pZCkKK3sKKyAgICByZXR1cm4gTlJGX1RJTUVSMC0+RVZFTlRTX0NPTVBBUkVbVElNRVJfQ0NfTUFSR0lOXTsKK30KKworLyoqQGJyaWVmIEVudGVyIHRpbWVzbG90IGNyaXRpY2FsIHNlY3Rpb24uICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXNsb3RfY3JpdGljYWxfc2VjdGlvbl9lbnRlcih2b2lkKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShUSU1FUjBfSVJRbik7CisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworfQorCisvKipAYnJpZWYgRXhpdCB0aW1lc2xvdCBjcml0aWNhbCBzZWN0aW9uLiAqLworc3RhdGljIGlubGluZSB2b2lkIHRpbWVzbG90X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCh2b2lkKQoreworICAgIE5WSUNfRW5hYmxlSVJRKFRJTUVSMF9JUlFuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVzbG90X3N0YXJ0ZWRfbm90aWZ5KHZvaWQpCit7CisgICAgaWYgKG1faW5fdGltZXNsb3QgJiYgbV9jb250aW51b3VzKQorICAgIHsKKyAgICAgICAgbnJmX3JhYWxfdGltZXNsb3Rfc3RhcnRlZCgpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVzbG90X2VuZGVkX25vdGlmeSh2b2lkKQoreworICAgIGlmICghbV9pbl90aW1lc2xvdCAmJiBtX2NvbnRpbnVvdXMpCisgICAgeworICAgICAgICBucmZfcmFhbF90aW1lc2xvdF9lbmRlZCgpOworICAgIH0KK30KKworLyoqQGJyaWVmIENhbGN1bGF0ZSBtYXhpbWFsIGNyeXN0YWwgZHJpZnQuICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJ0Y19kcmlmdF9jYWxjdWxhdGUodWludDMyX3QgdGltZXNsb3RfbGVuZ3RoKQoreworICAgIHJldHVybiBESVZJREVfQU5EX0NFSUwoKCh1aW50NjRfdCl0aW1lc2xvdF9sZW5ndGggKiBtX2NvbmZpZy5sZl9jbGtfYWNjdXJhY3lfcHBtKSwgVVNfUEVSX1MpOworfQorCisvKipAYnJpZWYgUHJlcGFyZSBlYXJsaWVzdCB0aW1lc2xvdCByZXF1ZXN0LiAqLworc3RhdGljIHZvaWQgdGltZXNsb3RfcmVxdWVzdF9wcmVwYXJlKHZvaWQpCit7CisgICAgbWVtc2V0KCZtX3JlcXVlc3QsIDAsIHNpemVvZihtX3JlcXVlc3QpKTsKKyAgICBtX3JlcXVlc3QucmVxdWVzdF90eXBlICAgICAgICAgICAgICAgPSBOUkZfUkFESU9fUkVRX1RZUEVfRUFSTElFU1Q7CisgICAgbV9yZXF1ZXN0LnBhcmFtcy5lYXJsaWVzdC5oZmNsayAgICAgID0gTlJGX1JBRElPX0hGQ0xLX0NGR19OT19HVUFSQU5URUU7CisgICAgbV9yZXF1ZXN0LnBhcmFtcy5lYXJsaWVzdC5wcmlvcml0eSAgID0gTlJGX1JBRElPX1BSSU9SSVRZX05PUk1BTDsKKyAgICBtX3JlcXVlc3QucGFyYW1zLmVhcmxpZXN0Lmxlbmd0aF91cyAgPSBtX3RpbWVzbG90X2xlbmd0aDsKKyAgICBtX3JlcXVlc3QucGFyYW1zLmVhcmxpZXN0LnRpbWVvdXRfdXMgPSBtX2NvbmZpZy50aW1lc2xvdF90aW1lb3V0OworfQorCisvKipAYnJpZWYgUmVxdWVzdCBlYXJsaWVzdCB0aW1lc2xvdC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVzbG90X3JlcXVlc3Qodm9pZCkKK3sKKyAgICBhc3NlcnQoIW1faW5fdGltZXNsb3QpOworCisgICAgdGltZXNsb3RfcmVxdWVzdF9wcmVwYXJlKCk7CisgICAgc2RfcmFkaW9fcmVxdWVzdCgmbV9yZXF1ZXN0KTsKK30KKworLyoqQGJyaWVmIFNldCB0aW1lciBvbiB0aW1lc2xvdCBzdGFydGVkLiAqLworc3RhdGljIHZvaWQgdGltZXJfc3RhcnQodm9pZCkKK3sKKyAgICBOUkZfVElNRVIwLT5UQVNLU19TVE9QICAgICAgICAgID0gMTsKKyAgICBOUkZfVElNRVIwLT5UQVNLU19DTEVBUiAgICAgICAgID0gMTsKKyAgICBOUkZfVElNRVIwLT5CSVRNT0RFICAgICAgICAgICAgID0gVElNRVJfQklUTU9ERV9CSVRNT0RFXzMyQml0OworICAgIE5SRl9USU1FUjAtPklOVEVOU0VUICAgICAgICAgICAgPSBUSU1FUl9DQ19NQVJHSU5fSU5URU5TRVQ7CisgICAgTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfRVhURU5EXSA9IDA7CisgICAgTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfTUFSR0lOXSA9IG1fdGltZXNsb3RfbGVuZ3RoIC0gbV9jb25maWcudGltZXNsb3Rfc2FmZV9tYXJnaW47CisgICAgTlJGX1RJTUVSMC0+VEFTS1NfU1RBUlQgICAgICAgICA9IDE7CisKKyAgICBOVklDX0VuYWJsZUlSUShUSU1FUjBfSVJRbik7Cit9CisKKy8qKkBicmllZiBSZXNldCB0aW1lci4gKi8KK3N0YXRpYyB2b2lkIHRpbWVyX3Jlc2V0KHZvaWQpCit7CisgICAgTlJGX1RJTUVSMC0+VEFTS1NfU1RPUCAgICAgICAgICAgICAgICAgICAgICA9IDE7CisgICAgTlJGX1RJTUVSMC0+RVZFTlRTX0NPTVBBUkVbVElNRVJfQ0NfRVhURU5EXSA9IDA7CisgICAgTlJGX1RJTUVSMC0+RVZFTlRTX0NPTVBBUkVbVElNRVJfQ0NfTUFSR0lOXSA9IDA7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoVElNRVIwX0lSUW4pOworfQorCisvKipAYnJpZWYgU2V0IHRpbWVyIG9uIGV4dGVuZCBldmVudC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVyX2V4dGVuZCh2b2lkKQoreworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFRJTUVSMF9JUlFuKTsKKworICAgIE5SRl9USU1FUjAtPklOVEVOU0VUICAgICAgICAgICAgID0gVElNRVJfQ0NfTUFSR0lOX0lOVEVOU0VUOworICAgIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl0gKz0gbV90aW1lc2xvdF9sZW5ndGg7CisKKyAgICBpZiAoIW1fYWxsb2NfaXRlcnMpCisgICAgeworICAgICAgICBOUkZfVElNRVIwLT5JTlRFTlNFVCAgICAgICAgICAgICA9IFRJTUVSX0NDX0VYVEVORF9JTlRFTlNFVDsKKyAgICAgICAgTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfRVhURU5EXSArPSBtX3RpbWVzbG90X2xlbmd0aDsKKyAgICB9Cit9CisKKy8qKkBicmllZiBFbGltaW5hdGUgdGltZXJzIGppdHRlcnMuICovCitzdGF0aWMgdm9pZCB0aW1lcl9qaXR0ZXJfYWRqdXN0KHZvaWQpCit7CisgICAgLy8gQWRqdXN0IFRJTUVSMCBhbmQgUlRDMCBjbG9ja3MgZHJpZnRzLgorICAgIHVpbnQzMl90IHRpbWVyX3RpY2tzID0gdGltZXJfdGltZV9nZXQoKTsKKyAgICB1aW50NjRfdCBydGNfdGlja3MgICA9IE5SRl9SVEMwLT5DT1VOVEVSOworCisgICAgaWYgKHJ0Y190aWNrcyA+IG1fc3RhcnRfcnRjX3RpY2tzKQorICAgIHsKKyAgICAgICAgcnRjX3RpY2tzIC09IG1fc3RhcnRfcnRjX3RpY2tzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBPdmVyZmxvdyBkZXRlY3RlZC4KKyAgICAgICAgcnRjX3RpY2tzID0gUlRDX0NPVU5URVJfQ09VTlRFUl9Nc2sgLSBtX3N0YXJ0X3J0Y190aWNrcyArIHJ0Y190aWNrczsKKyAgICB9CisKKyAgICAvLyBBZGp1c3QgUlRDMCB0aWNrcyB0byBUSU1FUjAgcmVzb2x1dGlvbi4gUlRDMCB3b3JrcyB3aXRoIDMyNzY4a0h6IHNvIGZpcnN0CisgICAgLy8gbXVsdGlwbHkgd2l0aCAxMF42IChtaWNyb3NlY29uZHMpIGFuZCBkaXZpZGUgYnkgMzI3NjhIeiAoMl4xNSkgdG8gZ2V0IG1pY3Jvc2Vjb25kcy4KKyAgICBydGNfdGlja3MgPSBESVZJREVfQU5EX0NFSUwoKHJ0Y190aWNrcyAqIFVTX1BFUl9TKSwgMzI3NjgpOworCisgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIGluIHRpbWUuCisgICAgdWludDMyX3QgY2NfbWFyZ2luID0gTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfTUFSR0lOXTsKKyAgICBhc3NlcnQoY2NfbWFyZ2luID4gcnRjX3RpY2tzICsgcnRjX2RyaWZ0X2NhbGN1bGF0ZShjY19tYXJnaW4pKTsKKyAgICAKKyAgICBpZiAocnRjX3RpY2tzID4gdGltZXJfdGlja3MpCisgICAgeworICAgICAgICBOUkZfVElNRVIwLT5DQ1tUSU1FUl9DQ19NQVJHSU5dIC09IChydGNfdGlja3MgLSB0aW1lcl90aWNrcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl0gKz0gKHRpbWVyX3RpY2tzIC0gcnRjX3RpY2tzKTsKKyAgICB9CisKKyAgICAvLyBBZGQgc2FmZXR5IGRyaWZ0IHRpbWUuCisgICAgTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfTUFSR0lOXSAtPSBydGNfZHJpZnRfY2FsY3VsYXRlKDIgKiBtX2NvbmZpZy50aW1lc2xvdF9sZW5ndGgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTUVSX1RPX1NJR05BTF9KSVRURVJfVVM7Cit9CisKKy8qKkBicmllZiBEZWNyZWFzZSB0aW1lc2xvdCBsZW5ndGguICovCitzdGF0aWMgdm9pZCB0aW1lc2xvdF9kZWNyZWFzZV9sZW5ndGgodm9pZCkKK3sKKyAgICBtX2FsbG9jX2l0ZXJzKys7CisgICAgbV90aW1lc2xvdF9sZW5ndGggPSBtX3RpbWVzbG90X2xlbmd0aCA+PiAxOworfQorCisvKipAYnJpZWYgRXh0ZW5kIHRpbWVzbG90LiAqLworc3RhdGljIHZvaWQgdGltZXNsb3RfZXh0ZW5kKHZvaWQpCit7CisgICAgaWYgKG1fYWxsb2NfaXRlcnMgPCBtX2NvbmZpZy50aW1lc2xvdF9hbGxvY19pdGVycykKKyAgICB7CisgICAgICAgIHRpbWVzbG90X2RlY3JlYXNlX2xlbmd0aCgpOworCisgICAgICAgIC8vIFRyeSB0byBleHRlbmQgcmlnaHQgYWZ0ZXIgc3RhcnQuCisgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiAgICAgICAgID0gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fRVhURU5EOworICAgICAgICBtX3JldF9wYXJhbS5wYXJhbXMuZXh0ZW5kLmxlbmd0aF91cyA9IG1fdGltZXNsb3RfbGVuZ3RoOworCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3NldChQSU5fREJHX1RJTUVTTE9UX0VYVEVORF9SRVEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0aW1lcl9qaXR0ZXJfYWRqdXN0KCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0aW1lcl9pcnFfaGFuZGxlKHZvaWQpCit7CisgICAgLy8gU2FmZSBtYXJnaW4gZXhjZWVkZWQuCisgICAgaWYgKE5SRl9USU1FUjAtPkVWRU5UU19DT01QQVJFW1RJTUVSX0NDX01BUkdJTl0pCisgICAgeworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9jbHIoUElOX0RCR19USU1FU0xPVF9BQ1RJVkUpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfTUFSR0lOKTsKKworICAgICAgICBtX2luX3RpbWVzbG90ID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG1faW5fY3JpdGljYWxfc2VjdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fcGVuZGluZ19ldmVudCAhPSBQRU5ESU5HX0VWRU5UX0VOREVEKTsKKworICAgICAgICAgICAgaWYgKG1fcGVuZGluZ19ldmVudCA9PSBQRU5ESU5HX0VWRU5UX1NUQVJURUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nX2V2ZW50ID0gUEVORElOR19FVkVOVF9OT05FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcGVuZGluZ19ldmVudCA9IFBFTkRJTkdfRVZFTlRfRU5ERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lc2xvdF9lbmRlZF9ub3RpZnkoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElnbm9yZSBhbnkgb3RoZXIgZXZlbnRzLgorICAgICAgICB0aW1lcl9yZXNldCgpOworCisjaWYgKEVOQUJMRV9SRVFVRVNUX0FORF9FTkRfT05fVElNRVNMT1RfRU5EID09IDEpCisgICAgICAgIHRpbWVzbG90X2RhdGFfaW5pdCgpOworICAgICAgICB0aW1lc2xvdF9yZXF1ZXN0X3ByZXBhcmUoKTsKKyAgICAgICAgbV9yZXRfcGFyYW0uY2FsbGJhY2tfYWN0aW9uICAgICAgID0gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fUkVRVUVTVF9BTkRfRU5EOworICAgICAgICBtX3JldF9wYXJhbS5wYXJhbXMucmVxdWVzdC5wX25leHQgPSAmbV9yZXF1ZXN0OworI2Vsc2UKKyAgICAgICAgLy8gUmV0dXJuIGFuZCB3YWl0IGZvciBOUkZfRVZUX1JBRElPX1NFU1NJT05fSURMRSBldmVudC4KKyAgICAgICAgbV9yZXRfcGFyYW0uY2FsbGJhY2tfYWN0aW9uID0gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fTk9ORTsKKyNlbmRpZgorCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX01BUkdJTik7CisgICAgfQorCisgICAgLy8gRXh0ZW5zaW9uIG1hcmdpbiBleGNlZWRlZC4KKyAgICBlbHNlIGlmIChOUkZfVElNRVIwLT5FVkVOVFNfQ09NUEFSRVtUSU1FUl9DQ19FWFRFTkRdKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX0VYVEVORCk7CisKKyAgICAgICAgTlJGX1RJTUVSMC0+SU5URU5DTFIgPSAoMSA8PCBUSU1FUl9DQ19FWFRFTkRfSU5URU5DTFIpOworICAgICAgICBOUkZfVElNRVIwLT5FVkVOVFNfQ09NUEFSRVtUSU1FUl9DQ19FWFRFTkRdID0gMDsKKworICAgICAgICBpZiAobV9jb250aW51b3VzICYmCisgICAgICAgICAgICBOUkZfVElNRVIwLT5DQ1tUSU1FUl9DQ19FWFRFTkRdICsgbV9jb25maWcudGltZXNsb3RfbGVuZ3RoIDwgbV9jb25maWcudGltZXNsb3RfbWF4X2xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fc2V0KFBJTl9EQkdfVElNRVNMT1RfRVhURU5EX1JFUSk7CisKKyAgICAgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiAgICAgICAgID0gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fRVhURU5EOworICAgICAgICAgICAgbV9yZXRfcGFyYW0ucGFyYW1zLmV4dGVuZC5sZW5ndGhfdXMgPSBtX2NvbmZpZy50aW1lc2xvdF9sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lcl9qaXR0ZXJfYWRqdXN0KCk7CisKKyAgICAgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX05PTkU7CisgICAgICAgIH0KKworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWFRFTkQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBTaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9Cit9CisKKy8qKkBicmllZiBTaWduYWwgaGFuZGxlci4gKi8KK3N0YXRpYyBucmZfcmFkaW9fc2lnbmFsX2NhbGxiYWNrX3JldHVybl9wYXJhbV90ICpzaWduYWxfaGFuZGxlcih1aW50OF90IHNpZ25hbF90eXBlKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX1NJR19IQU5ETEVSKTsKKworICAgIC8vIERlZmF1bHQgcmVzcG9uc2UuCisgICAgbV9yZXRfcGFyYW0uY2FsbGJhY2tfYWN0aW9uID0gTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fTk9ORTsKKworICAgIGlmICghbV9jb250aW51b3VzKQorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fY2xyKFBJTl9EQkdfVElNRVNMT1RfQUNUSVZFKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX0VOREVEKTsKKworICAgICAgICBtX3BlbmRpbmdfZXZlbnQgICAgICAgICAgICAgPSBQRU5ESU5HX0VWRU5UX05PTkU7CisgICAgICAgIG1faW5fdGltZXNsb3QgICAgICAgICAgICAgICA9IGZhbHNlOworCisgICAgICAgIC8vIFRPRE86IENoYW5nZSB0byBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9FTkQgKEtSS05XSy05MzcpCisgICAgICAgIG1fcmV0X3BhcmFtLmNhbGxiYWNrX2FjdGlvbiA9IE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX05PTkU7CisgICAgICAgIHRpbWVyX3Jlc2V0KCk7CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRU5ERUQpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX1NJR19IQU5ETEVSKTsKKyAgICAgICAgcmV0dXJuICZtX3JldF9wYXJhbTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNpZ25hbF90eXBlKQorICAgIHsKKyAgICBjYXNlIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9TVEFSVDogLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHRoZSByYWRpbyB0aW1lc2xvdC4gKi8KKyAgICB7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3NldChQSU5fREJHX1RJTUVTTE9UX0FDVElWRSk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9TVEFSVCk7CisKKyAgICAgICAgLy8gRW5zdXJlIEhGQ0xLIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0IGlzIGlzc3VlZC4KKyAgICAgICAgYXNzZXJ0KE5SRl9DTE9DSy0+SEZDTEtTVEFUID09IChDTE9DS19IRkNMS1NUQVRfU1JDX01zayB8IENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Nc2spKTsKKworICAgICAgICBtX3N0YXJ0X3J0Y190aWNrcyA9IE5SRl9SVEMwLT5DT1VOVEVSOworICAgICAgICBtX2luX3RpbWVzbG90ICAgICA9IHRydWU7CisgICAgICAgIG1fYWxsb2NfaXRlcnMgICAgID0gMDsKKyAgICAgICAgbV90aW1lc2xvdF9sZW5ndGggPSBtX3RpbWVzbG90X2xlbmd0aDsKKworICAgICAgICB0aW1lcl9zdGFydCgpOworCisgICAgICAgIGlmIChtX2luX2NyaXRpY2FsX3NlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX3BlbmRpbmdfZXZlbnQgIT0gUEVORElOR19FVkVOVF9TVEFSVEVEKTsKKworICAgICAgICAgICAgaWYgKG1fcGVuZGluZ19ldmVudCA9PSBQRU5ESU5HX0VWRU5UX0VOREVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcGVuZGluZ19ldmVudCA9IFBFTkRJTkdfRVZFTlRfTk9ORTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdfZXZlbnQgPSBQRU5ESU5HX0VWRU5UX1NUQVJURUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0aW1lc2xvdF9zdGFydGVkX25vdGlmeSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IHRvIGV4dGVuZCByaWdodCBhZnRlciBzdGFydC4KKyAgICAgICAgbV9yZXRfcGFyYW0uY2FsbGJhY2tfYWN0aW9uICAgICAgICAgPSBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9FWFRFTkQ7CisgICAgICAgIG1fcmV0X3BhcmFtLnBhcmFtcy5leHRlbmQubGVuZ3RoX3VzID0gbV90aW1lc2xvdF9sZW5ndGg7CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfU1RBUlQpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9zZXQoUElOX0RCR19USU1FU0xPVF9FWFRFTkRfUkVRKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfVElNRVIwOiAvKio8IFRoaXMgc2lnbmFsIGluZGljYXRlcyB0aGUgTlJGX1RJTUVSMCBpbnRlcnJ1cHQuICovCisgICAgICAgIHRpbWVyX2lycV9oYW5kbGUoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9SQURJTzogLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgdGhlIE5SRl9SQURJTyBpbnRlcnJ1cHQuICovCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3NldChQSU5fREJHX1RJTUVTTE9UX1JBRElPX0lSUSk7CisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9SQURJTyk7CisKKyAgICAgICAgaWYgKG1faW5fdGltZXNsb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdGltZXJfaXNfbWFyZ2luX3JlYWNoZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSQURJT19JUlFIYW5kbGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gIEhhbmRsZSBtYXJnaW4gZXhjZWVkZWQgZXZlbnQuCisgICAgICAgICAgICAgICAgdGltZXJfaXJxX2hhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfUkFESU8pOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9jbHIoUElOX0RCR19USU1FU0xPVF9SQURJT19JUlEpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX0VYVEVORF9GQUlMRUQ6IC8qKjwgVGhpcyBzaWduYWwgaW5kaWNhdGVzIGV4dGVuZCBhY3Rpb24gZmFpbGVkLiAqLworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X3Bpbl9jbHIoUElOX0RCR19USU1FU0xPVF9FWFRFTkRfUkVRKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fdGdsKFBJTl9EQkdfVElNRVNMT1RfRkFJTEVEKTsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfU0lHX0VWRU5UX0VYQ0VFRF9GQUlMKTsKKworICAgICAgICB0aW1lc2xvdF9leHRlbmQoKTsKKworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FWElULCBGVU5DVElPTl9SQUFMX1NJR19FVkVOVF9FWENFRURfRkFJTCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfRVhURU5EX1NVQ0NFRURFRDogLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgZXh0ZW5kIGFjdGlvbiBzdWNjZWVkZWQuICovCisgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX2NscihQSU5fREJHX1RJTUVTTE9UX0VYVEVORF9SRVEpOworICAgICAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhDRUVEX1NVQ0NFU1MpOworCisgICAgICAgIHRpbWVyX2V4dGVuZCgpOworCisgICAgICAgIGlmIChtX2FsbG9jX2l0ZXJzICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRpbWVzbG90X2V4dGVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9TSUdfRVZFTlRfRVhDRUVEX1NVQ0NFU1MpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfU0lHX0hBTkRMRVIpOworCisgICAgcmV0dXJuICZtX3JldF9wYXJhbTsKK30KKwordm9pZCBucmZfcmFhbF9zb2Z0ZGV2aWNlX3NvY19ldnRfaGFuZGxlcih1aW50MzJfdCBldnRfaWQpCit7CisgICAgc3dpdGNoIChldnRfaWQpCisgICAgeworICAgIGNhc2UgTlJGX0VWVF9IRkNMS1NUQVJURUQ6CisgICAgICAgIGlmIChtX2NvbnRpbnVvdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRpbWVzbG90X3JlcXVlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOUkZfRVZUX1JBRElPX0JMT0NLRUQ6CisgICAgY2FzZSBOUkZfRVZUX1JBRElPX0NBTkNFTEVEOgorICAgIHsKKyAgICAgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9waW5fdGdsKFBJTl9EQkdfVElNRVNMT1RfQkxPQ0tFRCk7CisKKyAgICAgICAgYXNzZXJ0KCFtX2luX3RpbWVzbG90KTsKKworICAgICAgICBpZiAobV9jb250aW51b3VzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9hbGxvY19pdGVycyA8IG1fY29uZmlnLnRpbWVzbG90X2FsbG9jX2l0ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRpbWVzbG90X2RlY3JlYXNlX2xlbmd0aCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aW1lc2xvdF9yZXF1ZXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5SRl9FVlRfUkFESU9fU0lHTkFMX0NBTExCQUNLX0lOVkFMSURfUkVUVVJOOgorICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTlJGX0VWVF9SQURJT19TRVNTSU9OX0lETEU6CisgICAgICAgIGlmIChtX2NvbnRpbnVvdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX3RnbChQSU5fREJHX1RJTUVTTE9UX1NFU1NJT05fSURMRSk7CisKKyAgICAgICAgICAgIHRpbWVzbG90X2RhdGFfaW5pdCgpOworICAgICAgICAgICAgdGltZXNsb3RfcmVxdWVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5SRl9FVlRfUkFESU9fU0VTU0lPTl9DTE9TRUQ6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIG5yZl9yYWFsX3NvZnRkZXZpY2VfY29uZmlnKGNvbnN0IG5yZl9yYWFsX3NvZnRkZXZpY2VfY2ZnX3QgKiBwX2NmZykKK3sKKyAgICBhc3NlcnQobV9pbml0aWFsaXplKTsKKyAgICBhc3NlcnQoIW1fY29udGludW91cyk7CisgICAgYXNzZXJ0KHBfY2ZnKTsKKworICAgIG1fY29uZmlnID0gKnBfY2ZnOworfQorCit2b2lkIG5yZl9yYWFsX2luaXQodm9pZCkKK3sKKyAgICBhc3NlcnQoIW1faW5pdGlhbGl6ZSk7CisKKyAgICBtX2NvbnRpbnVvdXMgPSBmYWxzZTsKKyAgICBtX2luX3RpbWVzbG90ID0gZmFsc2U7CisKKyAgICBtX2NvbmZpZy5sZl9jbGtfYWNjdXJhY3lfcHBtICA9IE5SRl9SQUFMX0RFRkFVTFRfTEZfQ0xLX0FDQ1VSQUNZX1BQTTsKKyAgICBtX2NvbmZpZy50aW1lc2xvdF9sZW5ndGggICAgICA9IE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfTEVOR1RIOworICAgIG1fY29uZmlnLnRpbWVzbG90X2FsbG9jX2l0ZXJzID0gTlJGX1JBQUxfVElNRVNMT1RfREVGQVVMVF9BTExPQ19JVEVSUzsKKyAgICBtX2NvbmZpZy50aW1lc2xvdF9zYWZlX21hcmdpbiA9IE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfU0FGRV9NQVJHSU47CisgICAgbV9jb25maWcudGltZXNsb3RfbWF4X2xlbmd0aCAgPSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX01BWF9MRU5HVEg7CisgICAgbV9jb25maWcudGltZXNsb3RfdGltZW91dCAgICAgPSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX1RJTUVPVVQ7CisKKyAgICBhc3NlcnQoc2RfcmFkaW9fc2Vzc2lvbl9vcGVuKHNpZ25hbF9oYW5kbGVyKSA9PSBOUkZfU1VDQ0VTUyk7CisKKyAgICBtX2luaXRpYWxpemUgPSB0cnVlOworfQorCit2b2lkIG5yZl9yYWFsX3VuaW5pdCh2b2lkKQoreworICAgIGFzc2VydChtX2luaXRpYWxpemUpOworICAgIGFzc2VydChzZF9yYWRpb19zZXNzaW9uX2Nsb3NlKCkgPT0gTlJGX1NVQ0NFU1MpOworCisgICAgbV9jb250aW51b3VzICA9IGZhbHNlOworICAgIG1faW5fdGltZXNsb3QgPSBmYWxzZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfcGluX2NscihQSU5fREJHX1RJTUVTTE9UX0FDVElWRSk7Cit9CisKK3ZvaWQgbnJmX3JhYWxfY29udGludW91c19tb2RlX2VudGVyKHZvaWQpCit7CisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRU5URVIsIEZVTkNUSU9OX1JBQUxfQ09OVElOVU9VU19FTlRFUik7CisKKyAgICBhc3NlcnQobV9pbml0aWFsaXplKTsKKyAgICBhc3NlcnQoIW1fY29udGludW91cyk7CisKKyAgICBtX2FsbG9jX2l0ZXJzICAgICA9IDA7CisgICAgbV90aW1lc2xvdF9sZW5ndGggPSBtX2NvbmZpZy50aW1lc2xvdF9sZW5ndGg7CisgICAgbV9jb250aW51b3VzICAgICAgPSB0cnVlOworCisgICAgbnJmX2Rydl9jbG9ja19oZmNsa19yZXF1ZXN0KE5VTEwpOworCisgICAgaWYgKE5SRl9DTE9DSy0+SEZDTEtTVEFUID09IChDTE9DS19IRkNMS1NUQVRfU1JDX01zayB8IENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Nc2spKQorICAgIHsKKyAgICAgICAgdGltZXNsb3RfcmVxdWVzdCgpOworICAgIH0KKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfQ09OVElOVU9VU19FTlRFUik7Cit9CisKK3ZvaWQgbnJmX3JhYWxfY29udGludW91c19tb2RlX2V4aXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9DT05USU5VT1VTX0VYSVQpOworCisgICAgYXNzZXJ0KG1faW5pdGlhbGl6ZSk7CisgICAgYXNzZXJ0KG1fY29udGludW91cyk7CisKKyAgICBtX2NvbnRpbnVvdXMgPSBmYWxzZTsKKworICAgIC8vIEVtdWxhdGUgc2lnbmFsIGludGVycnVwdCB0byBpbmZvcm0gU0QgYWJvdXQgZW5kIG9mIG1fY29udGludW91cyBtb2RlLgorICAgIGlmIChtX2luX3RpbWVzbG90KQorICAgIHsKKyAgICAgICAgTlZJQ19TZXRQZW5kaW5nSVJRKFRJTUVSMF9JUlFuKTsKKyAgICB9CisKKyAgICBucmZfZHJ2X2Nsb2NrX2hmY2xrX3JlbGVhc2UoKTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfQ09OVElOVU9VU19FWElUKTsKK30KKworYm9vbCBucmZfcmFhbF90aW1lc2xvdF9yZXF1ZXN0KHVpbnQzMl90IGxlbmd0aF91cykKK3sKKyAgICBpZiAoIW1fY29udGludW91cyB8fCAhbV9pbl90aW1lc2xvdCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdGltZXJfdGltZV9nZXQoKSArIGxlbmd0aF91cyA8IE5SRl9USU1FUjAtPkNDW1RJTUVSX0NDX01BUkdJTl07Cit9CisKK3VpbnQzMl90IG5yZl9yYWFsX3RpbWVzbG90X3VzX2xlZnRfZ2V0KHZvaWQpCit7CisgICAgaWYgKCFtX2NvbnRpbnVvdXMgfHwgIW1faW5fdGltZXNsb3QpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gTlJGX1RJTUVSMC0+Q0NbVElNRVJfQ0NfTUFSR0lOXSAtIHRpbWVyX3RpbWVfZ2V0KCk7Cit9CisKK3ZvaWQgbnJmX3JhYWxfY3JpdGljYWxfc2VjdGlvbl9lbnRlcih2b2lkKQoreworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VOVEVSLCBGVU5DVElPTl9SQUFMX0NSSVRfU0VDVF9FTlRFUik7CisKKyAgICBhc3NlcnQoIW1faW5fY3JpdGljYWxfc2VjdGlvbik7CisgICAgbV9pbl9jcml0aWNhbF9zZWN0aW9uID0gdHJ1ZTsKKworICAgIG5yZl9kcnZfcmFkaW84MDIxNTRfbG9nKEVWRU5UX1RSQUNFX0VYSVQsIEZVTkNUSU9OX1JBQUxfQ1JJVF9TRUNUX0VOVEVSKTsKK30KKwordm9pZCBucmZfcmFhbF9jcml0aWNhbF9zZWN0aW9uX2V4aXQodm9pZCkKK3sKKyAgICBucmZfZHJ2X3JhZGlvODAyMTU0X2xvZyhFVkVOVF9UUkFDRV9FTlRFUiwgRlVOQ1RJT05fUkFBTF9DUklUX1NFQ1RfRVhJVCk7CisKKyAgICB0aW1lc2xvdF9jcml0aWNhbF9zZWN0aW9uX2VudGVyKCk7CisKKyAgICBhc3NlcnQobV9pbl9jcml0aWNhbF9zZWN0aW9uKTsKKyAgICBtX2luX2NyaXRpY2FsX3NlY3Rpb24gPSBmYWxzZTsKKworICAgIHN3aXRjaCAobV9wZW5kaW5nX2V2ZW50KQorICAgIHsKKyAgICBjYXNlIFBFTkRJTkdfRVZFTlRfU1RBUlRFRDoKKyAgICAgICAgdGltZXNsb3Rfc3RhcnRlZF9ub3RpZnkoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBFTkRJTkdfRVZFTlRfRU5ERUQ6CisgICAgICAgIHRpbWVzbG90X2VuZGVkX25vdGlmeSgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcGVuZGluZ19ldmVudCA9IFBFTkRJTkdfRVZFTlRfTk9ORTsKKworICAgIHRpbWVzbG90X2NyaXRpY2FsX3NlY3Rpb25fZXhpdCgpOworCisgICAgbnJmX2Rydl9yYWRpbzgwMjE1NF9sb2coRVZFTlRfVFJBQ0VfRVhJVCwgRlVOQ1RJT05fUkFBTF9DUklUX1NFQ1RfRVhJVCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvZHJpdmVycy9yYWRpby9yYWFsL3NvZnRkZXZpY2UvbnJmX3JhYWxfc29mdGRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTNjYTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2RyaXZlcnMvcmFkaW8vcmFhbC9zb2Z0ZGV2aWNlL25yZl9yYWFsX3NvZnRkZXZpY2UuaApAQCAtMCwwICsxLDg1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTcsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKioKKyAqIEBicmllZiBUaGlzIG1vZHVsZSBkZWZpbmVzIFJhZGlvIEFyYml0ZXIgQWJzdHJhY3Rpb24gTGF5ZXIgaW50ZXJmYWNlLgorICoKKyAqLworCisjaWZuZGVmIE5SRl9SQUFMX1NPRlRERVZJQ0VfSF8KKyNkZWZpbmUgTlJGX1JBQUxfU09GVERFVklDRV9IXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBAYnJpZWYgUkFBTCBTb2Z0ZGV2aWNlIGRlZmF1bHQgcGFyYW1ldGVycy4gKi8KKyNkZWZpbmUgTlJGX1JBQUxfVElNRVNMT1RfREVGQVVMVF9MRU5HVEggICAgICA2NDAwCisjZGVmaW5lIE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfQUxMT0NfSVRFUlMgNQorI2RlZmluZSBOUkZfUkFBTF9USU1FU0xPVF9ERUZBVUxUX1NBRkVfTUFSR0lOIDkxCisjZGVmaW5lIE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfVElNRU9VVCAgICAgMTAwMDAwCisjZGVmaW5lIE5SRl9SQUFMX1RJTUVTTE9UX0RFRkFVTFRfTUFYX0xFTkdUSCAgMTIwMDAwMDAwCisjZGVmaW5lIE5SRl9SQUFMX0RFRkFVTFRfTEZfQ0xLX0FDQ1VSQUNZX1BQTSAgMjUKKworLyoqIEBicmllZiBSQUFMIFNvZnRkZXZpY2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCB0aW1lc2xvdF9sZW5ndGg7ICAgICAgICAvKio8IFRpbWVzbG90IGxlbmd0aCByZXF1ZXN0ZWQgYnkgdGhlIG1vZHVsZSBpbiBtaWNyb3NlY29uZHMuICovCisgICAgdWludDMyX3QgdGltZXNsb3RfdGltZW91dDsgICAgICAgLyoqPCBMb25nZXN0IGFjY2VwdGFibGUgZGVsYXkgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0ZWQgdGltZXNsb3QgaW4gbWljcm9zZWNvbmRzLiAqLworICAgIHVpbnQzMl90IHRpbWVzbG90X21heF9sZW5ndGg7ICAgIC8qKjwgTWF4aW11bSBzaW5nbGUgdGltZXNsb3QgbGVuZ3RoIGNyZWF0ZWQgYnkgZXh0ZW5zaW9uIHByb2Nlc3NpbmcgaW4gbWljcm9zZWNvbmRzLiAqLworICAgIHVpbnQxNl90IHRpbWVzbG90X2FsbG9jX2l0ZXJzOyAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9uIG9mIGRpdmlkaW5nIHRpbWVzbG90X2xlbmd0aCBieSBmYWN0b3Igb2YgMiBwZXJmb3JtZWQgYnkgYXJiaXRlci4gKi8KKyAgICB1aW50MTZfdCB0aW1lc2xvdF9zYWZlX21hcmdpbjsgICAvKio8IFNhZmUgbWFyZ2luIGJlZm9yZSB0aW1lc2xvdCBpcyBmaW5pc2hlZCBhbmQgbnJmX3JhYWxfdGltZXNsb3RfZW5kZWQgc2hvdWxkIGJlIGNhbGxlZCBpbiBtaWNyb3NlY29uZHMuICovCisgICAgdWludDE2X3QgbGZfY2xrX2FjY3VyYWN5X3BwbTsgICAgLyoqPCBDbG9jayBhY2N1cmFjeSBpbiBwcG0gdW5pdC4gKi8KK30gbnJmX3JhYWxfc29mdGRldmljZV9jZmdfdDsKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gdXNlZCB0byBpbmZvcm0gUkFBTCBjbGllbnQgYWJvdXQgU29mdGRldmljZSdzIFNvQyBldmVudHMuCisgKgorICovCit2b2lkIG5yZl9yYWFsX3NvZnRkZXZpY2Vfc29jX2V2dF9oYW5kbGVyKHVpbnQzMl90IGV2dF9pZCk7CisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IG5vbi1kZWZhdWx0IHBhcmFtZXRlcnMgb2YgUkFBTC4KKyAqCisgKi8KK3ZvaWQgbnJmX3JhYWxfc29mdGRldmljZV9jb25maWcoY29uc3QgbnJmX3JhYWxfc29mdGRldmljZV9jZmdfdCAqIHBfY2ZnKTsKKworLyoqCisgKkB9CisgKiovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBOUkZfUkFBTF9TT0ZUREVWSUNFX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfYXNzZXJ0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfYXNzZXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViZTQyZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9hc3NlcnQuaApAQCAtMCwwICsxLDUyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKiogQGZpbGUNCisgKiBAYnJpZWYgVXRpbGl0aWVzIGZvciB2ZXJpZnlpbmcgcHJvZ3JhbSBsb2dpYw0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX0FTU0VSVF9IXw0KKyNkZWZpbmUgTlJGX0FTU0VSVF9IXw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgQVNTRVJUKGV4cHIpICAgIFwNCitpZiAoIShleHByKSkgICAgICAgICAgICBcDQoreyAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICB3aGlsZSgxKTsgICAgICAgICAgIFwNCit9DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBOUkZfQVNTRVJUX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Nsb2NrLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVkNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2Nsb2NrLmgKQEAgLTAsMCArMSwzOTIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX0NMT0NLX0hfXw0KKyNkZWZpbmUgTlJGX0NMT0NLX0hfXw0KKw0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKw0KKyNpbmNsdWRlICJucmYuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBAZGVmZ3JvdXAgbnJmX2Nsb2NrX2hhbCBDbG9jayBIQUwNCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9jbG9jaw0KKyAqIEBicmllZiBIYXJkd2FyZSBhY2Nlc3MgbGF5ZXIgZm9yIG1hbmFnaW5nIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrIChMRkNMSykgYW5kIHRoZSBoaWdoLWZyZXF1ZW5jeSBjbG9jayAoSEZDTEspLg0KKyAqLw0KKw0KKyNkZWZpbmUgTlJGX0NMT0NLX1RBU0tfVFJJR0dFUiAoMVVMKQ0KKyNkZWZpbmUgTlJGX0NMT0NLX0VWRU5UX0NMRUFSICAoMFVMKQ0KKw0KKy8qKg0KKyAqIEBicmllZiBMb3ctZnJlcXVlbmN5IGNsb2NrIHNvdXJjZXMuDQorICogQGRldGFpbHMgVXNlZCBieSBMRkNMS1NSQywgTEZDTEtTVEFULCBhbmQgTEZDTEtTUkNDT1BZIHJlZ2lzdGVycy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9DTE9DS19MRkNMS19SQyAgICA9IENMT0NLX0xGQ0xLU1JDX1NSQ19SQywgICAvKio8IEludGVybmFsIDMyIGtIeiBSQyBvc2NpbGxhdG9yLiAqLw0KKyAgICBOUkZfQ0xPQ0tfTEZDTEtfWHRhbCAgPSBDTE9DS19MRkNMS1NSQ19TUkNfWHRhbCwgLyoqPCBFeHRlcm5hbCAzMiBrSHogY3J5c3RhbC4gKi8NCisgICAgTlJGX0NMT0NLX0xGQ0xLX1N5bnRoID0gQ0xPQ0tfTEZDTEtTUkNfU1JDX1N5bnRoIC8qKjwgSW50ZXJuYWwgMzIga0h6IHN5bnRoZXNpemVyIGZyb20gSEZDTEsgc3lzdGVtIGNsb2NrLiAqLw0KK30gbnJmX2Nsb2NrX2xmY2xrX3Q7DQorDQorLyoqDQorICogQGJyaWVmIEhpZ2gtZnJlcXVlbmN5IGNsb2NrIHNvdXJjZXMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfQ0xPQ0tfSEZDTEtfTE9XX0FDQ1VSQUNZICA9IENMT0NLX0hGQ0xLU1RBVF9TUkNfUkMsICAvKio8IEludGVybmFsIDE2IE1IeiBSQyBvc2NpbGxhdG9yLiAqLw0KKyAgICBOUkZfQ0xPQ0tfSEZDTEtfSElHSF9BQ0NVUkFDWSA9IENMT0NLX0hGQ0xLU1RBVF9TUkNfWHRhbCAvKio8IEV4dGVybmFsIDE2IE1Iei8zMiBNSHogY3J5c3RhbCBvc2NpbGxhdG9yLiAqLw0KK30gbnJmX2Nsb2NrX2hmY2xrX3Q7DQorDQorLyoqDQorICogQGJyaWVmIFRyaWdnZXIgc3RhdHVzIG9mIHRhc2sgTEZDTEtTVEFSVC9IRkNMS1NUQVJULg0KKyAqIEBkZXRhaWxzIFVzZWQgYnkgTEZDTEtSVU4gYW5kIEhGQ0xLUlVOIHJlZ2lzdGVycy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9DTE9DS19TVEFSVF9UQVNLX05PVF9UUklHR0VSRUQgPSBDTE9DS19MRkNMS1JVTl9TVEFUVVNfTm90VHJpZ2dlcmVkLCAvKio8IFRhc2sgTEZDTEtTVEFSVC9IRkNMS1NUQVJUIGhhcyBub3QgYmVlbiB0cmlnZ2VyZWQuICovDQorICAgIE5SRl9DTE9DS19TVEFSVF9UQVNLX1RSSUdHRVJFRCAgICAgPSBDTE9DS19MRkNMS1JVTl9TVEFUVVNfVHJpZ2dlcmVkICAgICAvKio8IFRhc2sgTEZDTEtTVEFSVC9IRkNMS1NUQVJUIGhhcyBiZWVuIHRyaWdnZXJlZC4gKi8NCit9IG5yZl9jbG9ja19zdGFydF90YXNrX3N0YXR1c190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBJbnRlcnJ1cHRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0NMT0NLX0lOVF9IRl9TVEFSVEVEX01BU0sgPSBDTE9DS19JTlRFTlNFVF9IRkNMS1NUQVJURURfTXNrLCAvKio8IEludGVycnVwdCBvbiBIRkNMS1NUQVJURUQgZXZlbnQuICovDQorICAgIE5SRl9DTE9DS19JTlRfTEZfU1RBUlRFRF9NQVNLID0gQ0xPQ0tfSU5URU5TRVRfTEZDTEtTVEFSVEVEX01zaywgLyoqPCBJbnRlcnJ1cHQgb24gTEZDTEtTVEFSVEVEIGV2ZW50LiAqLw0KKyAgICBOUkZfQ0xPQ0tfSU5UX0RPTkVfTUFTSyAgICAgICA9IENMT0NLX0lOVEVOU0VUX0RPTkVfTXNrLCAgICAgICAgIC8qKjwgSW50ZXJydXB0IG9uIERPTkUgZXZlbnQuICovDQorICAgIE5SRl9DTE9DS19JTlRfQ1RUT19NQVNLICAgICAgID0gQ0xPQ0tfSU5URU5TRVRfQ1RUT19Nc2sgICAgICAgICAgLyoqPCBJbnRlcnJ1cHQgb24gQ1RUTyBldmVudC4gKi8NCit9IG5yZl9jbG9ja19pbnRfbWFza190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBUYXNrcy4NCisgKg0KKyAqIEBkZXRhaWxzIFRoZSBOUkZfQ0xPQ0tfVEFTS19MRkNMS1NUT1AgdGFzayBjYW5ub3QgYmUgc2V0IHdoZW4gdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2sgaXMgbm90IHJ1bm5pbmcuDQorICogVGhlIE5SRl9DTE9DS19UQVNLX0hGQ0xLU1RPUCB0YXNrIGNhbm5vdCBiZSBzZXQgd2hlbiB0aGUgaGlnaC1mcmVxdWVuY3kgY2xvY2sgaXMgbm90IHJ1bm5pbmcuDQorICovDQordHlwZWRlZiBlbnVtIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykgKi8NCit7DQorICAgIE5SRl9DTE9DS19UQVNLX0hGQ0xLU1RBUlQgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgVEFTS1NfSEZDTEtTVEFSVCksIC8qKjwgU3RhcnQgSEZDTEsgY2xvY2sgc291cmNlLiovDQorICAgIE5SRl9DTE9DS19UQVNLX0hGQ0xLU1RPUCAgPSBvZmZzZXRvZihOUkZfQ0xPQ0tfVHlwZSwgVEFTS1NfSEZDTEtTVE9QKSwgIC8qKjwgU3RvcCBIRkNMSyBjbG9jayBzb3VyY2UuKi8NCisgICAgTlJGX0NMT0NLX1RBU0tfTEZDTEtTVEFSVCA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBUQVNLU19MRkNMS1NUQVJUKSwgLyoqPCBTdGFydCBMRkNMSyBjbG9jayBzb3VyY2UuKi8NCisgICAgTlJGX0NMT0NLX1RBU0tfTEZDTEtTVE9QICA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBUQVNLU19MRkNMS1NUT1ApLCAgLyoqPCBTdG9wIExGQ0xLIGNsb2NrIHNvdXJjZS4qLw0KKyAgICBOUkZfQ0xPQ0tfVEFTS19DQUwgICAgICAgID0gb2Zmc2V0b2YoTlJGX0NMT0NLX1R5cGUsIFRBU0tTX0NBTCksICAgICAgICAvKio8IFN0YXJ0IGNhbGlicmF0aW9uIG9mIExGQ0xLIFJDIG9zY2lsbGF0b3IuKi8NCisgICAgTlJGX0NMT0NLX1RBU0tfQ1RTVEFSVCAgICA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBUQVNLU19DVFNUQVJUKSwgICAgLyoqPCBTdGFydCBjYWxpYnJhdGlvbiB0aW1lci4qLw0KKyAgICBOUkZfQ0xPQ0tfVEFTS19DVFNUT1AgICAgID0gb2Zmc2V0b2YoTlJGX0NMT0NLX1R5cGUsIFRBU0tTX0NUU1RPUCkgICAgICAvKio8IFN0b3AgY2FsaWJyYXRpb24gdGltZXIuKi8NCit9IG5yZl9jbG9ja190YXNrX3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypsaW50IC1yZXN0b3JlICovDQorDQorLyoqDQorICogQGJyaWVmIEV2ZW50cy4NCisgKi8NCit0eXBlZGVmIGVudW0gLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSAqLw0KK3sNCisgICAgTlJGX0NMT0NLX0VWRU5UX0hGQ0xLU1RBUlRFRCA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBFVkVOVFNfSEZDTEtTVEFSVEVEKSwgLyoqPCBIRkNMSyBvc2NpbGxhdG9yIHN0YXJ0ZWQuKi8NCisgICAgTlJGX0NMT0NLX0VWRU5UX0xGQ0xLU1RBUlRFRCA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBFVkVOVFNfTEZDTEtTVEFSVEVEKSwgLyoqPCBMRkNMSyBvc2NpbGxhdG9yIHN0YXJ0ZWQuKi8NCisgICAgTlJGX0NMT0NLX0VWRU5UX0RPTkUgICAgICAgICA9IG9mZnNldG9mKE5SRl9DTE9DS19UeXBlLCBFVkVOVFNfRE9ORSksICAgICAgICAgLyoqPCBDYWxpYnJhdGlvbiBvZiBMRkNMSyBSQyBvc2NpbGxhdG9yIGNvbXBsZXRlZC4qLw0KKyAgICBOUkZfQ0xPQ0tfRVZFTlRfQ1RUTyAgICAgICAgID0gb2Zmc2V0b2YoTlJGX0NMT0NLX1R5cGUsIEVWRU5UU19DVFRPKSAgICAgICAgICAvKio8IENhbGlicmF0aW9uIHRpbWVyIHRpbWUtb3V0LiovDQorfSBucmZfY2xvY2tfZXZlbnRfdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmxpbnQgLXJlc3RvcmUgKi8NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGEgc3BlY2lmaWMgaW50ZXJydXB0Lg0KKyAqDQorICogQHBhcmFtW2luXSAgaW50X21hc2sgICAgICAgICBJbnRlcnJ1cHQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX2ludF9lbmFibGUodWludDMyX3QgaW50X21hc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGEgc3BlY2lmaWMgaW50ZXJydXB0Lg0KKyAqDQorICogQHBhcmFtW2luXSAgaW50X21hc2sgICAgICAgICBJbnRlcnJ1cHQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX2ludF9kaXNhYmxlKHVpbnQzMl90IGludF9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgaW50ZXJydXB0Lg0KKyAqDQorICogQHBhcmFtW2luXSAgaW50X21hc2sgICAgICAgICBJbnRlcnJ1cHQuDQorICoNCisgKiBAcmV0dmFsICAgICB0cnVlICAgICAgICAgICAgICAgICAgIElmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4NCisgKiBAcmV0dmFsICAgICBmYWxzZSAgICAgICAgICAgICAgICAgIElmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IGVuYWJsZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2ludF9lbmFibGVfY2hlY2sobnJmX2Nsb2NrX2ludF9tYXNrX3QgaW50X21hc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIHRhc2suDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSB0aGUgUFBJIG1vZHVsZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHRhc2sgICAgICAgICAgICAgVGFzay4NCisgKg0KKyAqIEByZXR1cm4gICAgIEFkZHJlc3Mgb2YgdGhlIHJlcXVlc3RlZCB0YXNrIHJlZ2lzdGVyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfY2xvY2tfdGFza19hZGRyZXNzX2dldChucmZfY2xvY2tfdGFza190IHRhc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBhIHNwZWNpZmljIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICB0YXNrICAgICAgICAgICAgIFRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX3Rhc2tfdHJpZ2dlcihucmZfY2xvY2tfdGFza190IHRhc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGV2ZW50Lg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgdGhlIFBQSSBtb2R1bGUuDQorICoNCisgKiBAcGFyYW1baW5dICBldmVudCAgICAgICBFdmVudC4NCisgKg0KKyAqIEByZXR1cm4gICAgIEFkZHJlc3Mgb2YgdGhlIHJlcXVlc3RlZCBldmVudCByZWdpc3Rlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2Nsb2NrX2V2ZW50X2FkZHJlc3NfZ2V0KG5yZl9jbG9ja19ldmVudF90IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBldmVudCAgICAgICBFdmVudC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfZXZlbnRfY2xlYXIobnJmX2Nsb2NrX2V2ZW50X3QgZXZlbnQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGV2ZW50ICAgICAgIEV2ZW50Lg0KKyAqDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgSWYgdGhlIGV2ZW50IGlzIHNldC4NCisgKiBAcmV0dmFsICAgICBmYWxzZSAgICAgICAgICAgICBJZiB0aGUgZXZlbnQgaXMgbm90IHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfY2xvY2tfZXZlbnRfY2hlY2sobnJmX2Nsb2NrX2V2ZW50X3QgZXZlbnQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2hhbmdpbmcgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2sgc291cmNlLg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCB3aGVuIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrIGlzIHJ1bm5pbmcuDQorICoNCisgKiBAcGFyYW1baW5dICBzb3VyY2UgICAgICAgICAgICBOZXcgbG93LWZyZXF1ZW5jeSBjbG9jayBzb3VyY2UuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfbGZfc3JjX3NldChucmZfY2xvY2tfbGZjbGtfdCBzb3VyY2UpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc2VsZWN0ZWQgc291cmNlIGZvciB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jay4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19SQyAgICAgSWYgdGhlIGludGVybmFsIDMyIGtIeiBSQyBvc2NpbGxhdG9yIGlzIHRoZSBzZWxlY3RlZCBzb3VyY2UgZm9yIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19YdGFsICAgSWYgYW4gZXh0ZXJuYWwgMzIga0h6IGNyeXN0YWwgb3NjaWxsYXRvciBpcyB0aGUgc2VsZWN0ZWQgc291cmNlIGZvciB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jay4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfU3ludGggIElmIHRoZSBpbnRlcm5hbCAzMiBrSHogc3ludGhlc2l6ZXIgZnJvbSB0aGUgSEZDTEsgaXMgdGhlIHNlbGVjdGVkIHNvdXJjZSBmb3IgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19sZmNsa190IG5yZl9jbG9ja19sZl9zcmNfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgYWN0aXZlIHNvdXJjZSBvZiB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jay4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19SQyAgICAgSWYgdGhlIGludGVybmFsIDMyIGtIeiBSQyBvc2NpbGxhdG9yIGlzIHRoZSBhY3RpdmUgc291cmNlIG9mIHRoZSBsb3ctZnJlcXVlbmN5IGNsb2NrLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19YdGFsICAgSWYgYW4gZXh0ZXJuYWwgMzIga0h6IGNyeXN0YWwgb3NjaWxsYXRvciBpcyB0aGUgYWN0aXZlIHNvdXJjZSBvZiB0aGUgbG93LWZyZXF1ZW5jeSBjbG9jay4NCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfTEZDTEtfU3ludGggIElmIHRoZSBpbnRlcm5hbCAzMiBrSHogc3ludGhlc2l6ZXIgZnJvbSB0aGUgSEZDTEsgaXMgdGhlIGFjdGl2ZSBzb3VyY2Ugb2YgdGhlIGxvdy1mcmVxdWVuY3kgY2xvY2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19sZmNsa190IG5yZl9jbG9ja19sZl9hY3R2X3NyY19nZXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBMRkNMSyBjbG9jayB3aGVuIHRoZSB0YXNrIExLQ0xLU1RBUlQgaXMgdHJpZ2dlcmVkLg0KKyAqDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX0xGQ0xLX1JDICAgICBJZiB0aGUgaW50ZXJuYWwgMzIga0h6IFJDIG9zY2lsbGF0b3IgaXMgcnVubmluZyBhbmQgZ2VuZXJhdGluZyB0aGUgTEZDTEsgY2xvY2suDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX0xGQ0xLX1h0YWwgICBJZiBhbiBleHRlcm5hbCAzMiBrSHogY3J5c3RhbCBvc2NpbGxhdG9yIGlzIHJ1bm5pbmcgYW5kIGdlbmVyYXRpbmcgdGhlIExGQ0xLIGNsb2NrLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19MRkNMS19TeW50aCAgSWYgdGhlIGludGVybmFsIDMyIGtIeiBzeW50aGVzaXplciBmcm9tIHRoZSBIRkNMSyBpcyBydW5uaW5nIGFuZCBnZW5lcmF0aW5nIHRoZSBMRkNMSyBjbG9jay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX2xmY2xrX3QgbnJmX2Nsb2NrX2xmX3NyY2NvcHlfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc3RhdGUgb2YgdGhlIExGQ0xLIGNsb2NrLg0KKyAqDQorICogQHJldHZhbCAgICAgZmFsc2UgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgTEZDTEsgY2xvY2sgaXMgbm90IHJ1bm5pbmcuDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgTEZDTEsgY2xvY2sgaXMgcnVubmluZy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfY2xvY2tfbGZfaXNfcnVubmluZyh2b2lkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRyaWdnZXIgc3RhdHVzIG9mIHRoZSB0YXNrIExGQ0xLU1RBUlQuDQorICoNCisgKiBAcmV0dmFsICAgICBOUkZfQ0xPQ0tfU1RBUlRfVEFTS19OT1RfVFJJR0dFUkVEICAgICBJZiB0aGUgdGFzayBMRkNMS1NUQVJUIGhhcyBub3QgYmVlbiB0cmlnZ2VyZWQuDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX1NUQVJUX1RBU0tfVFJJR0dFUkVEICAgICAgICAgSWYgdGhlIHRhc2sgTEZDTEtTVEFSVCBoYXMgYmVlbiB0cmlnZ2VyZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19zdGFydF90YXNrX3N0YXR1c190IG5yZl9jbG9ja19sZl9zdGFydF90YXNrX3N0YXR1c19nZXQodm9pZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBhY3RpdmUgc291cmNlIG9mIHRoZSBoaWdoLWZyZXF1ZW5jeSBjbG9jay4NCisgKg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19IRkNMS19MT1dfQUNDVVJBQ1kgICBJZiB0aGUgaW50ZXJuYWwgMTYgTUh6IFJDIG9zY2lsbGF0b3IgaXMgdGhlIGFjdGl2ZSBzb3VyY2Ugb2YgdGhlIGhpZ2gtZnJlcXVlbmN5IGNsb2NrLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19IRkNMS19ISUdIX0FDQ1VSQUNZICBJZiBhbiBleHRlcm5hbCAxNiBNSHovMzIgTUh6IGNyeXN0YWwgb3NjaWxsYXRvciBpcyB0aGUgYWN0aXZlIHNvdXJjZSBvZiB0aGUgaGlnaC1mcmVxdWVuY3kgY2xvY2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19oZmNsa190IG5yZl9jbG9ja19oZl9zcmNfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc3RhdGUgb2YgdGhlIEhGQ0xLIGNsb2NrLg0KKyAqDQorICogQHBhcmFtW2luXSAgY2xrX3NyYyAgICAgICAgICAgICAgICAgICBDbG9jayBzb3VyY2UgdG8gYmUgY2hlY2tlZC4NCisgKg0KKyAqIEByZXR2YWwgICAgIGZhbHNlICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIEhGQ0xLIGNsb2NrIGlzIG5vdCBydW5uaW5nLg0KKyAqIEByZXR2YWwgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIEhGQ0xLIGNsb2NrIGlzIHJ1bm5pbmcuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2hmX2lzX3J1bm5pbmcobnJmX2Nsb2NrX2hmY2xrX3QgY2xrX3NyYyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0cmlnZ2VyIHN0YXR1cyBvZiB0aGUgdGFzayBIRkNMS1NUQVJULg0KKyAqDQorICogQHJldHZhbCAgICAgTlJGX0NMT0NLX1NUQVJUX1RBU0tfTk9UX1RSSUdHRVJFRCAgICAgSWYgdGhlIHRhc2sgSEZDTEtTVEFSVCBoYXMgbm90IGJlZW4gdHJpZ2dlcmVkLg0KKyAqIEByZXR2YWwgICAgIE5SRl9DTE9DS19TVEFSVF9UQVNLX1RSSUdHRVJFRCAgICAgICAgIElmIHRoZSB0YXNrIEhGQ0xLU1RBUlQgaGFzIGJlZW4gdHJpZ2dlcmVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfc3RhcnRfdGFza19zdGF0dXNfdCBucmZfY2xvY2tfaGZfc3RhcnRfdGFza19zdGF0dXNfZ2V0KHZvaWQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2hhbmdpbmcgdGhlIGNhbGlicmF0aW9uIHRpbWVyIGludGVydmFsLg0KKyAqDQorICogQHBhcmFtW2luXSAgaW50ZXJ2YWwgICAgICAgICAgICAgTmV3IGNhbGlicmF0aW9uIHRpbWVyIGludGVydmFsIGluIDAuMjUgcyByZXNvbHV0aW9uIChyYW5nZTogMC4yNSBzZWNvbmRzIHRvIDMxLjc1IHNlY29uZHMpLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19jYWxfdGltZXJfdGltZW91dF9zZXQodWludDMyX3QgaW50ZXJ2YWwpOw0KKw0KKyNpZm5kZWYgU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX2ludF9lbmFibGUodWludDMyX3QgaW50X21hc2spDQorew0KKyAgICBOUkZfQ0xPQ0stPklOVEVOU0VUID0gaW50X21hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19pbnRfZGlzYWJsZSh1aW50MzJfdCBpbnRfbWFzaykNCit7DQorICAgIE5SRl9DTE9DSy0+SU5URU5DTFIgPSBpbnRfbWFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2ludF9lbmFibGVfY2hlY2sobnJmX2Nsb2NrX2ludF9tYXNrX3QgaW50X21hc2spDQorew0KKyAgICByZXR1cm4gKGJvb2wpKE5SRl9DTE9DSy0+SU5URU5DTFIgJiBpbnRfbWFzayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfY2xvY2tfdGFza19hZGRyZXNzX2dldChucmZfY2xvY2tfdGFza190IHRhc2spDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdClOUkZfQ0xPQ0sgKyB0YXNrKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2Nsb2NrX3Rhc2tfdHJpZ2dlcihucmZfY2xvY2tfdGFza190IHRhc2spDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9DTE9DSyArIHRhc2spKSA9IE5SRl9DTE9DS19UQVNLX1RSSUdHRVI7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfY2xvY2tfZXZlbnRfYWRkcmVzc19nZXQobnJmX2Nsb2NrX2V2ZW50X3QgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdClOUkZfQ0xPQ0sgKyBldmVudCk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19ldmVudF9jbGVhcihucmZfY2xvY2tfZXZlbnRfdCBldmVudCkNCit7DQorICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX0NMT0NLICsgZXZlbnQpKSA9IE5SRl9DTE9DS19FVkVOVF9DTEVBUjsNCisjaWYgX19DT1JURVhfTSA9PSAweDA0DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGR1bW15ID0gKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfQ0xPQ0sgKyBldmVudCkpOw0KKyAgICAodm9pZClkdW1teTsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX2Nsb2NrX2V2ZW50X2NoZWNrKG5yZl9jbG9ja19ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgcmV0dXJuIChib29sKSAqICgodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfQ0xPQ0sgKyBldmVudCkpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfY2xvY2tfbGZfc3JjX3NldChucmZfY2xvY2tfbGZjbGtfdCBzb3VyY2UpDQorew0KKyAgICBOUkZfQ0xPQ0stPkxGQ0xLU1JDID0NCisgICAgICAgICh1aW50MzJfdCkoKHNvdXJjZSA8PCBDTE9DS19MRkNMS1NSQ19TUkNfUG9zKSAmIENMT0NLX0xGQ0xLU1JDX1NSQ19Nc2spOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX2xmY2xrX3QgbnJmX2Nsb2NrX2xmX3NyY19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX2Nsb2NrX2xmY2xrX3QpKChOUkZfQ0xPQ0stPkxGQ0xLU1JDICYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0xGQ0xLU1JDX1NSQ19Nc2spID4+IENMT0NLX0xGQ0xLU1JDX1NSQ19Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX2xmY2xrX3QgbnJmX2Nsb2NrX2xmX2FjdHZfc3JjX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChucmZfY2xvY2tfbGZjbGtfdCkoKE5SRl9DTE9DSy0+TEZDTEtTVEFUICYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0xGQ0xLU1RBVF9TUkNfTXNrKSA+PiBDTE9DS19MRkNMS1NUQVRfU1JDX1Bvcyk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBucmZfY2xvY2tfbGZjbGtfdCBucmZfY2xvY2tfbGZfc3JjY29weV9nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX2Nsb2NrX2xmY2xrX3QpKChOUkZfQ0xPQ0stPkxGQ0xLU1JDQ09QWSAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9DS19MRkNMS1NSQ0NPUFlfU1JDX01zaykgPj4gQ0xPQ0tfTEZDTEtTUkNDT1BZX1NSQ19Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfY2xvY2tfbGZfaXNfcnVubmluZyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuICgoTlJGX0NMT0NLLT5MRkNMS1NUQVQgJg0KKyAgICAgICAgICAgICBDTE9DS19MRkNMS1NUQVRfU1RBVEVfTXNrKSA+PiBDTE9DS19MRkNMS1NUQVRfU1RBVEVfUG9zKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIG5yZl9jbG9ja19zdGFydF90YXNrX3N0YXR1c190IG5yZl9jbG9ja19sZl9zdGFydF90YXNrX3N0YXR1c19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX2Nsb2NrX3N0YXJ0X3Rhc2tfc3RhdHVzX3QpKChOUkZfQ0xPQ0stPkxGQ0xLUlVOICYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0xGQ0xLUlVOX1NUQVRVU19Nc2spID4+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMT0NLX0xGQ0xLUlVOX1NUQVRVU19Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX2hmY2xrX3QgbnJmX2Nsb2NrX2hmX3NyY19nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAobnJmX2Nsb2NrX2hmY2xrX3QpKChOUkZfQ0xPQ0stPkhGQ0xLU1RBVCAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTE9DS19IRkNMS1NUQVRfU1JDX01zaykgPj4gQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Qb3MpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfY2xvY2tfaGZfaXNfcnVubmluZyhucmZfY2xvY2tfaGZjbGtfdCBjbGtfc3JjKQ0KK3sNCisgICAgcmV0dXJuIChOUkZfQ0xPQ0stPkhGQ0xLU1RBVCAmIChDTE9DS19IRkNMS1NUQVRfU1RBVEVfTXNrIHwgQ0xPQ0tfSEZDTEtTVEFUX1NSQ19Nc2spKSA9PQ0KKyAgICAgICAgICAgKENMT0NLX0hGQ0xLU1RBVF9TVEFURV9Nc2sgfCAoY2xrX3NyYyA8PCBDTE9DS19IRkNMS1NUQVRfU1JDX1BvcykpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgbnJmX2Nsb2NrX3N0YXJ0X3Rhc2tfc3RhdHVzX3QgbnJmX2Nsb2NrX2hmX3N0YXJ0X3Rhc2tfc3RhdHVzX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChucmZfY2xvY2tfc3RhcnRfdGFza19zdGF0dXNfdCkoKE5SRl9DTE9DSy0+SEZDTEtSVU4gJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xPQ0tfSEZDTEtSVU5fU1RBVFVTX01zaykgPj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xPQ0tfSEZDTEtSVU5fU1RBVFVTX1Bvcyk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9jbG9ja19jYWxfdGltZXJfdGltZW91dF9zZXQodWludDMyX3QgaW50ZXJ2YWwpDQorew0KKyAgICBOUkZfQ0xPQ0stPkNUSVYgPSAoKGludGVydmFsIDw8IENMT0NLX0NUSVZfQ1RJVl9Qb3MpICYgQ0xPQ0tfQ1RJVl9DVElWX01zayk7DQorfQ0KKw0KKyNlbmRpZiAvLyBTVVBQUkVTU19JTkxJTkVfSU1QTEVNRU5UQVRJT04NCisNCisvKioNCisgKkB9DQorICoqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLy8gTlJGX0NMT0NLX0hfXw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9lZ3UuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9lZ3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFmN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2VndS5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNywgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisjaWZuZGVmIE5SRl9FR1VfSF9fCisjZGVmaW5lIE5SRl9FR1VfSF9fCisKKy8qKgorKiBAZGVmZ3JvdXAgbnJmX2VndSBFR1UgKEV2ZW50IEdlbmVyYXRvciBVbml0KSBhYnN0cmFjdGlvbgorKiBAeworKiBAaW5ncm91cCBucmZfZHJpdmVycworKiBAYnJpZWYgQHRhZ0FQSTUyIEVHVSAoRXZlbnQgR2VuZXJhdG9yIFVuaXQpIG1vZHVsZSBmdW5jdGlvbnMuCisqCisqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIm5yZi5oIgorI2luY2x1ZGUgIm5yZl9wZXJpcGhlcmFscy5oIgorCisjZGVmaW5lIEFTU0VSVCBhc3NlcnQKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEBlbnVtICBucmZfZWd1X3Rhc2tfdAorICogQGJyaWVmIEVHVSB0YXNrcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIwICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlswXSksICAvKio8IFRyaWdnZXIgMCBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIxICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlsxXSksICAvKio8IFRyaWdnZXIgMSBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIyICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlsyXSksICAvKio8IFRyaWdnZXIgMiBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMl0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIzICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlszXSksICAvKio8IFRyaWdnZXIgMyBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbM10gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVI0ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUls0XSksICAvKio8IFRyaWdnZXIgNCBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbNF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVI1ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUls1XSksICAvKio8IFRyaWdnZXIgNSBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbNV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVI2ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUls2XSksICAvKio8IFRyaWdnZXIgNiBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbNl0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVI3ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUls3XSksICAvKio8IFRyaWdnZXIgNyBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbN10gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVI4ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUls4XSksICAvKio8IFRyaWdnZXIgOCBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbOF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVI5ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUls5XSksICAvKio8IFRyaWdnZXIgOSBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbOV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIxMCA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlsxMF0pLCAvKio8IFRyaWdnZXIgMTAgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzEwXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX1RBU0tfVFJJR0dFUjExID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBUQVNLU19UUklHR0VSWzExXSksIC8qKjwgVHJpZ2dlciAxMSBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMTFdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMTIgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMTJdKSwgLyoqPCBUcmlnZ2VyIDEyIGZvciB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJFRFsxMl0gZXZlbnQuICovCisgICAgTlJGX0VHVV9UQVNLX1RSSUdHRVIxMyA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgVEFTS1NfVFJJR0dFUlsxM10pLCAvKio8IFRyaWdnZXIgMTMgZm9yIHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUkVEWzEzXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX1RBU0tfVFJJR0dFUjE0ID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBUQVNLU19UUklHR0VSWzE0XSksIC8qKjwgVHJpZ2dlciAxNCBmb3IgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSRURbMTRdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfVEFTS19UUklHR0VSMTUgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIFRBU0tTX1RSSUdHRVJbMTVdKSAgLyoqPCBUcmlnZ2VyIDE1IGZvciB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJFRFsxNV0gZXZlbnQuICovCisgICAgLypsaW50IC1yZXN0b3JlKi8KK30gbnJmX2VndV90YXNrX3Q7CisKKworLyoqCisgKiBAZW51bSAgbnJmX2VndV9ldmVudF90CisgKiBAYnJpZWYgRUdVIGV2ZW50cy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQwICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFswXSksICAvKio8IEV2ZW50IG51bWJlciAwIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMF0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDEgID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzFdKSwgIC8qKjwgRXZlbnQgbnVtYmVyIDEgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlsxXSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMiAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbMl0pLCAgLyoqPCBFdmVudCBudW1iZXIgMiBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzJdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQzICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFszXSksICAvKio8IEV2ZW50IG51bWJlciAzIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbM10gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDQgID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzRdKSwgIC8qKjwgRXZlbnQgbnVtYmVyIDQgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUls0XSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVENSAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbNV0pLCAgLyoqPCBFdmVudCBudW1iZXIgNSBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzVdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQ2ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFs2XSksICAvKio8IEV2ZW50IG51bWJlciA2IGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbNl0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDcgID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzddKSwgIC8qKjwgRXZlbnQgbnVtYmVyIDcgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUls3XSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEOCAgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbOF0pLCAgLyoqPCBFdmVudCBudW1iZXIgOCBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzhdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQ5ICA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFs5XSksICAvKio8IEV2ZW50IG51bWJlciA5IGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbOV0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDEwID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzEwXSksIC8qKjwgRXZlbnQgbnVtYmVyIDEwIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMTBdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQxMSA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFsxMV0pLCAvKio8IEV2ZW50IG51bWJlciAxMSBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzExXSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMTIgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbMTJdKSwgLyoqPCBFdmVudCBudW1iZXIgMTIgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlsxMl0gdGFzay4gKi8KKyAgICBOUkZfRUdVX0VWRU5UX1RSSUdHRVJFRDEzID0gb2Zmc2V0b2YoTlJGX0VHVV9UeXBlLCBFVkVOVFNfVFJJR0dFUkVEWzEzXSksIC8qKjwgRXZlbnQgbnVtYmVyIDEzIGdlbmVyYXRlZCBieSB0cmlnZ2VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIFRSSUdHRVJbMTNdIHRhc2suICovCisgICAgTlJGX0VHVV9FVkVOVF9UUklHR0VSRUQxNCA9IG9mZnNldG9mKE5SRl9FR1VfVHlwZSwgRVZFTlRTX1RSSUdHRVJFRFsxNF0pLCAvKio8IEV2ZW50IG51bWJlciAxNCBnZW5lcmF0ZWQgYnkgdHJpZ2dlcmluZyB0aGUgY29ycmVzcG9uZGluZyBUUklHR0VSWzE0XSB0YXNrLiAqLworICAgIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMTUgPSBvZmZzZXRvZihOUkZfRUdVX1R5cGUsIEVWRU5UU19UUklHR0VSRURbMTVdKSAgLyoqPCBFdmVudCBudW1iZXIgMTUgZ2VuZXJhdGVkIGJ5IHRyaWdnZXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFJJR0dFUlsxNV0gdGFzay4gKi8KKyAgICAvKmxpbnQgLXJlc3RvcmUqLworfSBucmZfZWd1X2V2ZW50X3Q7CisKKworLyoqCisgKiBAZW51bSAgbnJmX2VndV9pbnRfbWFza190CisgKiBAYnJpZWYgRUdVIGludGVycnVwdHMuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDAgID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDBfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFswXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQxICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxX01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbMV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMiAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMl9Nc2ssICAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzJdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDMgID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDNfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFszXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQ0ICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ0X01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbNF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVENSAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVENV9Nc2ssICAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzVdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDYgID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDZfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFs2XSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQ3ICA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQ3X01zaywgIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbN10gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEOCAgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEOF9Nc2ssICAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzhdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDkgID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDlfTXNrLCAgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFs5XSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQxMCA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxMF9Nc2ssIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbMTBdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDExID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDExX01zaywgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFsxMV0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMTIgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTJfTXNrLCAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzEyXSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9UUklHR0VSRUQxMyA9IEVHVV9JTlRFTlNFVF9UUklHR0VSRUQxM19Nc2ssIC8qKjwgSW50ZXJydXB0IG9uIEVWRU5UU19UUklHR0VSRURbMTNdIGV2ZW50LiAqLworICAgIE5SRl9FR1VfSU5UX1RSSUdHRVJFRDE0ID0gRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDE0X01zaywgLyoqPCBJbnRlcnJ1cHQgb24gRVZFTlRTX1RSSUdHRVJFRFsxNF0gZXZlbnQuICovCisgICAgTlJGX0VHVV9JTlRfVFJJR0dFUkVEMTUgPSBFR1VfSU5URU5TRVRfVFJJR0dFUkVEMTVfTXNrLCAvKio8IEludGVycnVwdCBvbiBFVkVOVFNfVFJJR0dFUkVEWzE1XSBldmVudC4gKi8KKyAgICBOUkZfRUdVX0lOVF9BTEwgICAgICAgICA9IDB4RkZGRnVMCit9IG5yZl9lZ3VfaW50X21hc2tfdDsKKworLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIG1heCBjaGFubmVsIG51bWJlciBvZiBnaXZlbiBFR1UuCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqCisgKiBAcmV0dXJucyBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYW5uZWxzLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2VndV9jaGFubmVsX2NvdW50KE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4KQoreworICAgIGlmIChOUkZfRUdVeCA9PSBOUkZfRUdVMCl7CisgICAgICAgIHJldHVybiBFR1UwX0NIX05VTTsKKyAgICB9CisgICAgaWYgKE5SRl9FR1V4ID09ICBOUkZfRUdVMSl7CisgICAgICAgIHJldHVybiBFR1UxX0NIX05VTTsKKyAgICB9CisgICAgaWYgKE5SRl9FR1V4ID09ICBOUkZfRUdVMil7CisgICAgICAgIHJldHVybiBFR1UyX0NIX05VTTsKKyAgICB9CisgICAgaWYgKE5SRl9FR1V4ID09ICBOUkZfRUdVMyl7CisgICAgICAgIHJldHVybiBFR1UzX0NIX05VTTsKKyAgICB9CisgICAgaWYgKE5SRl9FR1V4ID09ICBOUkZfRUdVNCl7CisgICAgICAgIHJldHVybiBFR1U0X0NIX05VTTsKKyAgICB9CisgICAgaWYgKE5SRl9FR1V4ID09ICBOUkZfRUdVNSl7CisgICAgICAgIHJldHVybiBFR1U1X0NIX05VTTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciB0cmlnZ2VyaW5nIGEgc3BlY2lmaWMgRUdVIHRhc2suCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfdGFzayBFR1UgdGFzay4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2VndV90YXNrX3RyaWdnZXIoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsIG5yZl9lZ3VfdGFza190IGVndV90YXNrKQoreworICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX0VHVXggKyAodWludDMyX3QpZWd1X3Rhc2spKSA9IDB4MVVMOworfQorCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBFR1UgdGFzayByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGVndV90YXNrIEVHVSB0YXNrLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKiBucmZfZWd1X3Rhc2tfYWRkcmVzc19nZXQoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2VndV90YXNrX3QgZWd1X3Rhc2spCit7CisgICAgcmV0dXJuICh1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9FR1V4ICsgKHVpbnQzMl90KWVndV90YXNrKTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgRUdVIFRSSUdHRVIgdGFzayByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKiBucmZfZWd1X3Rhc2tfdHJpZ2dlcl9hZGRyZXNzX2dldChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjaGFubmVsKQoreworICAgIEFTU0VSVChjaGFubmVsIDwgbnJmX2VndV9jaGFubmVsX2NvdW50KE5SRl9FR1V4KSk7CisgICAgcmV0dXJuICh1aW50MzJfdCopJk5SRl9FR1V4LT5UQVNLU19UUklHR0VSW2NoYW5uZWxdOworfQorCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIHNwZWNpZmljIEVHVSBUUklHR0VSIHRhc2suCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBjaGFubmVsICBDaGFubmVsIG51bWJlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIG5yZl9lZ3VfdGFza190IG5yZl9lZ3VfdGFza190cmlnZ2VyX2dldChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwgdWludDhfdCBjaGFubmVsKQoreworICAgIEFTU0VSVChjaGFubmVsIDwgbnJmX2VndV9jaGFubmVsX2NvdW50KE5SRl9FR1V4KSk7CisgICAgcmV0dXJuIChucmZfZWd1X3Rhc2tfdCkoKHVpbnQzMl90KSBOUkZfRUdVX1RBU0tfVFJJR0dFUjAgKyAoY2hhbm5lbCAqIHNpemVvZih1aW50MzJfdCkpKTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIEVHVSBldmVudC4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggIEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfZXZlbnQgRUdVIGV2ZW50IHRvIGNoZWNrLgorICovCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfZWd1X2V2ZW50X2NoZWNrKE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZWd1X2V2ZW50X3QgZWd1X2V2ZW50KQoreworICAgIHJldHVybiAoYm9vbCkqKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX0VHVXggKyAodWludDMyX3QpZWd1X2V2ZW50KTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgYSBzcGVjaWZpYyBFR1UgZXZlbnQuCisgKgorICogQHBhcmFtIE5SRl9FR1V4ICBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gZWd1X2V2ZW50IEVHVSBldmVudCB0byBjbGVhci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2VndV9ldmVudF9jbGVhcihOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2VndV9ldmVudF90IGVndV9ldmVudCkKK3sKKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9FR1V4ICsgKHVpbnQzMl90KWVndV9ldmVudCkpID0gMHgwVUw7CisjaWYgX19DT1JURVhfTSA9PSAweDA0CisgICAgdm9sYXRpbGUgdWludDMyX3QgZHVtbXkgPSAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9FR1V4ICsgKHVpbnQzMl90KWVndV9ldmVudCkpOworICAgICh2b2lkKWR1bW15OworI2VuZGlmCit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIEVHVSBldmVudCByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggIEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfZXZlbnQgRUdVIGV2ZW50LgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKiBucmZfZWd1X2V2ZW50X2FkZHJlc3NfZ2V0KE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZWd1X2V2ZW50X3QgZWd1X2V2ZW50KQoreworICAgIHJldHVybiAodWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfRUdVeCArICh1aW50MzJfdCllZ3VfZXZlbnQpOworfQorCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBFR1UgVFJJR0dFUkVEIGV2ZW50IHJlZ2lzdGVyLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gY2hhbm5lbCAgQ2hhbm5lbCBudW1iZXIuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCAqIG5yZl9lZ3VfZXZlbnRfdHJpZ2dlcmVkX2FkZHJlc3NfZ2V0KE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNoYW5uZWwpCit7CisgICAgQVNTRVJUKGNoYW5uZWwgPCBucmZfZWd1X2NoYW5uZWxfY291bnQoTlJGX0VHVXgpKTsKKyAgICByZXR1cm4gKHVpbnQzMl90KikmTlJGX0VHVXgtPkVWRU5UU19UUklHR0VSRURbY2hhbm5lbF07Cit9CisKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgc3BlY2lmaWMgRUdVIFRSSUdHRVJFRCBldmVudC4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGNoYW5uZWwgIENoYW5uZWwgbnVtYmVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgbnJmX2VndV9ldmVudF90IG5yZl9lZ3VfZXZlbnRfdHJpZ2dlcmVkX2dldChOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBBU1NFUlQoY2hhbm5lbCA8IG5yZl9lZ3VfY2hhbm5lbF9jb3VudChOUkZfRUdVeCkpOworICAgIHJldHVybiAobnJmX2VndV9ldmVudF90KSgodWludDMyX3QpIE5SRl9FR1VfRVZFTlRfVFJJR0dFUkVEMCArIChjaGFubmVsICogc2l6ZW9mKHVpbnQzMl90KSkpOworfQorCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBvbmUgb3IgbW9yZSBzcGVjaWZpYyBFR1UgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gTlJGX0VHVXggICAgIEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfaW50X21hc2sgSW50ZXJydXB0cyB0byBlbmFibGUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9lZ3VfaW50X2VuYWJsZShOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwgdWludDMyX3QgZWd1X2ludF9tYXNrKQoreworICAgIE5SRl9FR1V4LT5JTlRFTlNFVCA9IGVndV9pbnRfbWFzazsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgc3RhdGUgb2Ygb25lIG9yIG1vcmUgRUdVIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIE5SRl9FR1V4IEVHVSBpbnN0YW5jZS4KKyAqIEBwYXJhbSBlZ3VfaW50X21hc2sgSW50ZXJydXB0cyB0byBjaGVjay4KKyAqCisgKiBAcmV0dmFsIHRydWUgIElmIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisgKiBAcmV0dmFsIGZhbHNlIElmIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMgaXMgZGlzYWJsZWQuCisgKi8KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9lZ3VfaW50X2VuYWJsZV9jaGVjayhOUkZfRUdVX1R5cGUgKiBOUkZfRUdVeCwgdWludDMyX3QgZWd1X2ludF9tYXNrKQoreworICAgIHJldHVybiAoYm9vbCkoTlJGX0VHVXgtPklOVEVOU0VUICYgZWd1X2ludF9tYXNrKTsKK30KKworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIG9uZSBvciBtb3JlIHNwZWNpZmljIEVHVSBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCAgICAgRUdVIGluc3RhbmNlLgorICogQHBhcmFtIGVndV9pbnRfbWFzayBJbnRlcnJ1cHRzIHRvIGRpc2FibGUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9lZ3VfaW50X2Rpc2FibGUoTlJGX0VHVV9UeXBlICogTlJGX0VHVXgsIHVpbnQzMl90IGVndV9pbnRfbWFzaykKK3sKKyAgICBOUkZfRUdVeC0+SU5URU5DTFIgPSBlZ3VfaW50X21hc2s7Cit9CisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIG9uZSBvciBtb3JlIHNwZWNpZmljIEVHVSBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBOUkZfRUdVeCBFR1UgaW5zdGFuY2UuCisgKiBAcGFyYW0gY2hhbm5lbCBDaGFubmVsIG51bWJlci4KKyAqCisgKiBAcmV0dXJucyBFR1UgaW50ZXJydXB0IG1hc2suCisgKi8KK19fU1RBVElDX0lOTElORSBucmZfZWd1X2ludF9tYXNrX3QgbnJmX2VndV9pbnRfZ2V0KE5SRl9FR1VfVHlwZSAqIE5SRl9FR1V4LCB1aW50OF90IGNoYW5uZWwpCit7CisgICAgQVNTRVJUKGNoYW5uZWwgPCBucmZfZWd1X2NoYW5uZWxfY291bnQoTlJGX0VHVXgpKTsKKyAgICByZXR1cm4gKG5yZl9lZ3VfaW50X21hc2tfdCkoKHVpbnQzMl90KSAoRUdVX0lOVEVOU0VUX1RSSUdHRVJFRDBfTXNrIDw8IGNoYW5uZWwpKTsKK30KKworLyoqIEB9ICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZ3Bpby5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmI3YjJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX2dwaW8uaApAQCAtMCwwICsxLDc4NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfR1BJT19IX18NCisjZGVmaW5lIE5SRl9HUElPX0hfXw0KKw0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAibnJmX3BlcmlwaGVyYWxzLmgiDQorI2luY2x1ZGUgIm5yZl9hc3NlcnQuaCINCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBAZGVmZ3JvdXAgbnJmX2dwaW8gR1BJTyBhYnN0cmFjdGlvbg0KKyAqIEB7DQorICogQGluZ3JvdXAgbnJmX2RyaXZlcnMNCisgKiBAYnJpZWYgR1BJTyBwaW4gYWJzdHJhY3Rpb24gYW5kIHBvcnQgYWJzdHJhY3Rpb24gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgYnl0ZS13aXNlIHRvIEdQSU8gcG9ydHMuDQorICovDQorDQorI2lmIChHUElPX0NPVU5UID09IDEpDQorI2RlZmluZSBOVU1CRVJfT0ZfUElOUyAoUDBfUElOX05VTSkNCisjZGVmaW5lIEdQSU9fUkVHX0xJU1QgIHtOUkZfR1BJT30NCisjZWxpZiAoR1BJT19DT1VOVCA9PSAyKQ0KKyNkZWZpbmUgTlVNQkVSX09GX1BJTlMgKFAwX1BJTl9OVU0gKyBQMV9QSU5fTlVNKQ0KKyNkZWZpbmUgR1BJT19SRUdfTElTVCAge05SRl9QMCwgTlJGX1AxfQ0KKyNlbHNlDQorI2Vycm9yICJOb3Qgc3VwcG9ydGVkLiINCisjZW5kaWYNCisNCisNCisvKioNCisgKiBAYnJpZWYgTWFjcm8gZm9yIG1hcHBpbmcgcG9ydCBhbmQgcGluIG51bWJlcnMgdG8gdmFsdWVzIHVuZGVyc3RhbmRhYmxlIGZvciBucmZfZ3BpbyBmdW5jdGlvbnMuDQorICovDQorI2RlZmluZSBOUkZfR1BJT19QSU5fTUFQKHBvcnQsIHBpbikgKChwb3J0IDw8IDUpIHwgKHBpbiAmIDB4MUYpKQ0KKw0KKy8qKg0KKyAqIEBicmllZiBQaW4gZGlyZWN0aW9uIGRlZmluaXRpb25zLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX0dQSU9fUElOX0RJUl9JTlBVVCAgPSBHUElPX1BJTl9DTkZfRElSX0lucHV0LCAvLy88IElucHV0Lg0KKyAgICBOUkZfR1BJT19QSU5fRElSX09VVFBVVCA9IEdQSU9fUElOX0NORl9ESVJfT3V0cHV0IC8vLzwgT3V0cHV0Lg0KK30gbnJmX2dwaW9fcGluX2Rpcl90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBDb25uZWN0aW9uIG9mIGlucHV0IGJ1ZmZlci4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9HUElPX1BJTl9JTlBVVF9DT05ORUNUICAgID0gR1BJT19QSU5fQ05GX0lOUFVUX0Nvbm5lY3QsICAgLy8vPCBDb25uZWN0IGlucHV0IGJ1ZmZlci4NCisgICAgTlJGX0dQSU9fUElOX0lOUFVUX0RJU0NPTk5FQ1QgPSBHUElPX1BJTl9DTkZfSU5QVVRfRGlzY29ubmVjdCAvLy88IERpc2Nvbm5lY3QgaW5wdXQgYnVmZmVyLg0KK30gbnJmX2dwaW9fcGluX2lucHV0X3Q7DQorDQorLyoqDQorICogQGJyaWVmIEVudW1lcmF0b3IgdXNlZCBmb3Igc2VsZWN0aW5nIHRoZSBwaW4gdG8gYmUgcHVsbGVkIGRvd24gb3IgdXAgYXQgdGhlIHRpbWUgb2YgcGluIGNvbmZpZ3VyYXRpb24uDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfR1BJT19QSU5fTk9QVUxMICAgPSBHUElPX1BJTl9DTkZfUFVMTF9EaXNhYmxlZCwgLy8vPCAgUGluIHB1bGwtdXAgcmVzaXN0b3IgZGlzYWJsZWQuDQorICAgIE5SRl9HUElPX1BJTl9QVUxMRE9XTiA9IEdQSU9fUElOX0NORl9QVUxMX1B1bGxkb3duLCAvLy88ICBQaW4gcHVsbC1kb3duIHJlc2lzdG9yIGVuYWJsZWQuDQorICAgIE5SRl9HUElPX1BJTl9QVUxMVVAgICA9IEdQSU9fUElOX0NORl9QVUxMX1B1bGx1cCwgICAvLy88ICBQaW4gcHVsbC11cCByZXNpc3RvciBlbmFibGVkLg0KK30gbnJmX2dwaW9fcGluX3B1bGxfdDsNCisNCisvKioNCisgKiBAYnJpZWYgRW51bWVyYXRvciB1c2VkIGZvciBzZWxlY3Rpbmcgb3V0cHV0IGRyaXZlIG1vZGUuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfR1BJT19QSU5fUzBTMSA9IEdQSU9fUElOX0NORl9EUklWRV9TMFMxLCAvLy88ICE8IFN0YW5kYXJkICcwJywgc3RhbmRhcmQgJzEnLg0KKyAgICBOUkZfR1BJT19QSU5fSDBTMSA9IEdQSU9fUElOX0NORl9EUklWRV9IMFMxLCAvLy88ICE8IEhpZ2gtZHJpdmUgJzAnLCBzdGFuZGFyZCAnMScuDQorICAgIE5SRl9HUElPX1BJTl9TMEgxID0gR1BJT19QSU5fQ05GX0RSSVZFX1MwSDEsIC8vLzwgITwgU3RhbmRhcmQgJzAnLCBoaWdoLWRyaXZlICcxJy4NCisgICAgTlJGX0dQSU9fUElOX0gwSDEgPSBHUElPX1BJTl9DTkZfRFJJVkVfSDBIMSwgLy8vPCAhPCBIaWdoIGRyaXZlICcwJywgaGlnaC1kcml2ZSAnMScuDQorICAgIE5SRl9HUElPX1BJTl9EMFMxID0gR1BJT19QSU5fQ05GX0RSSVZFX0QwUzEsIC8vLzwgITwgRGlzY29ubmVjdCAnMCcgc3RhbmRhcmQgJzEnLg0KKyAgICBOUkZfR1BJT19QSU5fRDBIMSA9IEdQSU9fUElOX0NORl9EUklWRV9EMEgxLCAvLy88ICE8IERpc2Nvbm5lY3QgJzAnLCBoaWdoLWRyaXZlICcxJy4NCisgICAgTlJGX0dQSU9fUElOX1MwRDEgPSBHUElPX1BJTl9DTkZfRFJJVkVfUzBEMSwgLy8vPCAhPCBTdGFuZGFyZCAnMCcsIGRpc2Nvbm5lY3QgJzEnLg0KKyAgICBOUkZfR1BJT19QSU5fSDBEMSA9IEdQSU9fUElOX0NORl9EUklWRV9IMEQxLCAvLy88ICE8IEhpZ2gtZHJpdmUgJzAnLCBkaXNjb25uZWN0ICcxJy4NCit9IG5yZl9ncGlvX3Bpbl9kcml2ZV90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBFbnVtZXJhdG9yIHVzZWQgZm9yIHNlbGVjdGluZyB0aGUgcGluIHRvIHNlbnNlIGhpZ2ggb3IgbG93IGxldmVsIG9uIHRoZSBwaW4gaW5wdXQuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfR1BJT19QSU5fTk9TRU5TRSAgICA9IEdQSU9fUElOX0NORl9TRU5TRV9EaXNhYmxlZCwgLy8vPCAgUGluIHNlbnNlIGxldmVsIGRpc2FibGVkLg0KKyAgICBOUkZfR1BJT19QSU5fU0VOU0VfTE9XICA9IEdQSU9fUElOX0NORl9TRU5TRV9Mb3csICAgICAgLy8vPCAgUGluIHNlbnNlIGxvdyBsZXZlbC4NCisgICAgTlJGX0dQSU9fUElOX1NFTlNFX0hJR0ggPSBHUElPX1BJTl9DTkZfU0VOU0VfSGlnaCwgICAgIC8vLzwgIFBpbiBzZW5zZSBoaWdoIGxldmVsLg0KK30gbnJmX2dwaW9fcGluX3NlbnNlX3Q7DQorDQorDQorI2lmIChfX0xJTlRfXyAhPSAxKQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgdGhlIEdQSU8gcGluIHJhbmdlIGFzIG91dHB1dCBwaW5zIHdpdGggbm9ybWFsIGRyaXZlIHN0cmVuZ3RoLg0KKyAqICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBwaW4gcmFuZ2UgYXMgc2ltcGxlIG91dHB1dCB3aXRoIGdhdGUgZHJpdmluZyBHUElPX1BJTl9DTkZfRFJJVkVfUzBTMSAobm9ybWFsIGNhc2VzKS4NCisgKg0KKyAqIEBwYXJhbSBwaW5fcmFuZ2Vfc3RhcnQgU3BlY2lmaWVzIHRoZSBzdGFydCBudW1iZXIgKGluY2x1c2l2ZSkgaW4gdGhlIHJhbmdlIG9mIHBpbiBudW1iZXJzIHRvIGJlIGNvbmZpZ3VyZWQgKGFsbG93ZWQgdmFsdWVzIDAtMzApLg0KKyAqDQorICogQHBhcmFtIHBpbl9yYW5nZV9lbmQgU3BlY2lmaWVzIHRoZSBlbmQgbnVtYmVyIChpbmNsdXNpdmUpIGluIHRoZSByYW5nZSBvZiBwaW4gbnVtYmVycyB0byBiZSBjb25maWd1cmVkIChhbGxvd2VkIHZhbHVlcyAwLTMwKS4NCisgKg0KKyAqIEBub3RlIEZvciBjb25maWd1cmluZyBvbmx5IG9uZSBwaW4gYXMgb3V0cHV0LCB1c2UgQHJlZiBucmZfZ3Bpb19jZmdfb3V0cHV0Lg0KKyAqICAgICAgIFNlbnNlIGNhcGFiaWxpdHkgb24gdGhlIHBpbiBpcyBkaXNhYmxlZCBhbmQgaW5wdXQgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIGJ1ZmZlciBhcyB0aGUgcGlucyBhcmUgY29uZmlndXJlZCBhcyBvdXRwdXQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcmFuZ2VfY2ZnX291dHB1dCh1aW50MzJfdCBwaW5fcmFuZ2Vfc3RhcnQsIHVpbnQzMl90IHBpbl9yYW5nZV9lbmQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgdGhlIEdQSU8gcGluIHJhbmdlIGFzIGlucHV0IHBpbnMgd2l0aCBnaXZlbiBpbml0aWFsIHZhbHVlIHNldCwgaGlkaW5nIGlubmVyIGRldGFpbHMuDQorICogICAgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHBpbiByYW5nZSBhcyBzaW1wbGUgaW5wdXQuDQorICoNCisgKiBAcGFyYW0gcGluX3JhbmdlX3N0YXJ0IFNwZWNpZmllcyB0aGUgc3RhcnQgbnVtYmVyIChpbmNsdXNpdmUpIGluIHRoZSByYW5nZSBvZiBwaW4gbnVtYmVycyB0byBiZSBjb25maWd1cmVkIChhbGxvd2VkIHZhbHVlcyAwLTMwKS4NCisgKg0KKyAqIEBwYXJhbSBwaW5fcmFuZ2VfZW5kIFNwZWNpZmllcyB0aGUgZW5kIG51bWJlciAoaW5jbHVzaXZlKSBpbiB0aGUgcmFuZ2Ugb2YgcGluIG51bWJlcnMgdG8gYmUgY29uZmlndXJlZCAoYWxsb3dlZCB2YWx1ZXMgMC0zMCkuDQorICoNCisgKiBAcGFyYW0gcHVsbF9jb25maWcgU3RhdGUgb2YgdGhlIHBpbiByYW5nZSBwdWxsIHJlc2lzdG9yIChubyBwdWxsLCBwdWxsZWQgZG93biwgb3IgcHVsbGVkIGhpZ2gpLg0KKyAqDQorICogQG5vdGUgIEZvciBjb25maWd1cmluZyBvbmx5IG9uZSBwaW4gYXMgaW5wdXQsIHVzZSBAcmVmIG5yZl9ncGlvX2NmZ19pbnB1dC4NCisgKiAgICAgICAgU2Vuc2UgY2FwYWJpbGl0eSBvbiB0aGUgcGluIGlzIGRpc2FibGVkIGFuZCBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gYnVmZmVyIHNvIHRoYXQgdGhlIEdQSU8tPklOIHJlZ2lzdGVyIGlzIHJlYWRhYmxlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3JhbmdlX2NmZ19pbnB1dCh1aW50MzJfdCAgICAgICAgICAgIHBpbl9yYW5nZV9zdGFydCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgICBwaW5fcmFuZ2VfZW5kLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb19waW5fcHVsbF90IHB1bGxfY29uZmlnKTsNCisNCisvKioNCisgKiBAYnJpZWYgUGluIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uDQorICoNCisgKiBUaGUgbWFpbiBwaW4gY29uZmlndXJhdGlvbiBmdW5jdGlvbi4NCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byBzZXQgYW55IGFzcGVjdCBpbiBQSU5fQ05GIHJlZ2lzdGVyLg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFNwZWNpZmllcyB0aGUgcGluIG51bWJlci4NCisgKiBAcGFyYW0gZGlyICAgICAgICBQaW4gZGlyZWN0aW9uLg0KKyAqIEBwYXJhbSBpbnB1dCAgICAgIENvbm5lY3Qgb3IgZGlzY29ubmVjdCB0aGUgaW5wdXQgYnVmZmVyLg0KKyAqIEBwYXJhbSBwdWxsICAgICAgIFB1bGwgY29uZmlndXJhdGlvbi4NCisgKiBAcGFyYW0gZHJpdmUgICAgICBEcml2ZSBjb25maWd1cmF0aW9uLg0KKyAqIEBwYXJhbSBzZW5zZSAgICAgIFBpbiBzZW5zaW5nIG1lY2hhbmlzbS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmcoDQorICAgIHVpbnQzMl90ICAgICAgICAgICAgIHBpbl9udW1iZXIsDQorICAgIG5yZl9ncGlvX3Bpbl9kaXJfdCAgIGRpciwNCisgICAgbnJmX2dwaW9fcGluX2lucHV0X3QgaW5wdXQsDQorICAgIG5yZl9ncGlvX3Bpbl9wdWxsX3QgIHB1bGwsDQorICAgIG5yZl9ncGlvX3Bpbl9kcml2ZV90IGRyaXZlLA0KKyAgICBucmZfZ3Bpb19waW5fc2Vuc2VfdCBzZW5zZSk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyB0aGUgZ2l2ZW4gR1BJTyBwaW4gbnVtYmVyIGFzIG91dHB1dCwgaGlkaW5nIGlubmVyIGRldGFpbHMuDQorICogICAgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGEgcGluIGFzIHNpbXBsZSBvdXRwdXQgd2l0aCBnYXRlIGRyaXZpbmcgR1BJT19QSU5fQ05GX0RSSVZFX1MwUzEgKG5vcm1hbCBjYXNlcykuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICoNCisgKiBAbm90ZSAgU2Vuc2UgY2FwYWJpbGl0eSBvbiB0aGUgcGluIGlzIGRpc2FibGVkIGFuZCBpbnB1dCBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgYnVmZmVyIGFzIHRoZSBwaW5zIGFyZSBjb25maWd1cmVkIGFzIG91dHB1dC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfb3V0cHV0KHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgdGhlIGdpdmVuIEdQSU8gcGluIG51bWJlciBhcyBpbnB1dCwgaGlkaW5nIGlubmVyIGRldGFpbHMuDQorICogICAgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGEgcGluIGFzIHNpbXBsZSBpbnB1dC4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFNwZWNpZmllcyB0aGUgcGluIG51bWJlci4NCisgKiBAcGFyYW0gcHVsbF9jb25maWcgU3RhdGUgb2YgdGhlIHBpbiByYW5nZSBwdWxsIHJlc2lzdG9yIChubyBwdWxsLCBwdWxsZWQgZG93biwgb3IgcHVsbGVkIGhpZ2gpLg0KKyAqDQorICogQG5vdGUgIFNlbnNlIGNhcGFiaWxpdHkgb24gdGhlIHBpbiBpcyBkaXNhYmxlZCBhbmQgaW5wdXQgaXMgY29ubmVjdGVkIHRvIGJ1ZmZlciBzbyB0aGF0IHRoZSBHUElPLT5JTiByZWdpc3RlciBpcyByZWFkYWJsZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfaW5wdXQodWludDMyX3QgcGluX251bWJlciwgbnJmX2dwaW9fcGluX3B1bGxfdCBwdWxsX2NvbmZpZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXNldHRpbmcgcGluIGNvbmZpZ3VyYXRpb24gdG8gaXRzIGRlZmF1bHQgc3RhdGUuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX2RlZmF1bHQodWludDMyX3QgcGluX251bWJlcik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyB0aGUgZ2l2ZW4gR1BJTyBwaW4gbnVtYmVyIGFzIGEgd2F0Y2hlci4gT25seSBpbnB1dCBpcyBjb25uZWN0ZWQuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfd2F0Y2hlcih1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2Nvbm5lY3RpbmcgaW5wdXQgZm9yIHRoZSBnaXZlbiBHUElPLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9faW5wdXRfZGlzY29ubmVjdCh1aW50MzJfdCBwaW5fbnVtYmVyKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBnaXZlbiBHUElPIHBpbiBudW1iZXIgYXMgaW5wdXQsIGhpZGluZyBpbm5lciBkZXRhaWxzLg0KKyAqICAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBwaW4gcmFuZ2UgYXMgc2ltcGxlIGlucHV0Lg0KKyAqICAgICAgICBTZW5zZSBjYXBhYmlsaXR5IG9uIHRoZSBwaW4gaXMgY29uZmlndXJhYmxlIGFuZCBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gYnVmZmVyIHNvIHRoYXQgdGhlIEdQSU8tPklOIHJlZ2lzdGVyIGlzIHJlYWRhYmxlLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgICBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIuDQorICogQHBhcmFtIHB1bGxfY29uZmlnICBTdGF0ZSBvZiB0aGUgcGluIHB1bGwgcmVzaXN0b3IgKG5vIHB1bGwsIHB1bGxlZCBkb3duLCBvciBwdWxsZWQgaGlnaCkuDQorICogQHBhcmFtIHNlbnNlX2NvbmZpZyBTZW5zZSBsZXZlbCBvZiB0aGUgcGluIChubyBzZW5zZSwgc2Vuc2UgbG93LCBvciBzZW5zZSBoaWdoKS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfc2Vuc2VfaW5wdXQodWludDMyX3QgICAgICAgICAgICAgcGluX251bWJlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW9fcGluX3B1bGxfdCAgcHVsbF9jb25maWcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvX3Bpbl9zZW5zZV90IHNlbnNlX2NvbmZpZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyBzZW5zZSBsZXZlbCBmb3IgdGhlIGdpdmVuIEdQSU8uDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciAgIFNwZWNpZmllcyB0aGUgcGluIG51bWJlci4NCisgKiBAcGFyYW0gc2Vuc2VfY29uZmlnIFNlbnNlIGNvbmZpZ3VyYXRpb24uDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfc2Vuc2Vfc2V0KHVpbnQzMl90IHBpbl9udW1iZXIsIG5yZl9ncGlvX3Bpbl9zZW5zZV90IHNlbnNlX2NvbmZpZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHRoZSBkaXJlY3Rpb24gZm9yIGEgR1BJTyBwaW4uDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIgZm9yIHdoaWNoIHRvIHNldCB0aGUgZGlyZWN0aW9uLg0KKyAqDQorICogQHBhcmFtIGRpcmVjdGlvbiBTcGVjaWZpZXMgdGhlIGRpcmVjdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fZGlyX3NldCh1aW50MzJfdCBwaW5fbnVtYmVyLCBucmZfZ3Bpb19waW5fZGlyX3QgZGlyZWN0aW9uKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgYSBHUElPIHBpbi4NCisgKg0KKyAqIE5vdGUgdGhhdCB0aGUgcGluIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvdXRwdXQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gaGF2ZSBhbnkgZWZmZWN0Lg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIHRvIHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fc2V0KHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgYSBHUElPIHBpbi4NCisgKg0KKyAqIE5vdGUgdGhhdCB0aGUgcGluIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvdXRwdXQgZm9yIHRoaXMNCisgKiBmdW5jdGlvbiB0byBoYXZlIGFueSBlZmZlY3QuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIgdG8gY2xlYXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX2NsZWFyKHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgdG9nZ2xpbmcgYSBHUElPIHBpbi4NCisgKg0KKyAqIE5vdGUgdGhhdCB0aGUgcGluIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvdXRwdXQgZm9yIHRoaXMNCisgKiBmdW5jdGlvbiB0byBoYXZlIGFueSBlZmZlY3QuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIgdG8gdG9nZ2xlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl90b2dnbGUodWludDMyX3QgcGluX251bWJlcik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciB3cml0aW5nIGEgdmFsdWUgdG8gYSBHUElPIHBpbi4NCisgKg0KKyAqIE5vdGUgdGhhdCB0aGUgcGluIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvdXRwdXQgZm9yIHRoaXMNCisgKiBmdW5jdGlvbiB0byBoYXZlIGFueSBlZmZlY3QuDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIgdG8gd3JpdGUuDQorICoNCisgKiBAcGFyYW0gdmFsdWUgU3BlY2lmaWVzIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBwaW4uDQorICogQGFyZyAwIENsZWFycyB0aGUgcGluLg0KKyAqIEBhcmcgPj0xIFNldHMgdGhlIHBpbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fd3JpdGUodWludDMyX3QgcGluX251bWJlciwgdWludDMyX3QgdmFsdWUpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgaW5wdXQgbGV2ZWwgb2YgYSBHUElPIHBpbi4NCisgKg0KKyAqIE5vdGUgdGhhdCB0aGUgcGluIG11c3QgaGF2ZSBpbnB1dCBjb25uZWN0ZWQgZm9yIHRoZSB2YWx1ZQ0KKyAqIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiB0byBiZSB2YWxpZC4NCisgKg0KKyAqIEBwYXJhbSBwaW5fbnVtYmVyIFNwZWNpZmllcyB0aGUgcGluIG51bWJlciB0byByZWFkLg0KKyAqDQorICogQHJldHVybiAwIGlmIHRoZSBwaW4gaW5wdXQgbGV2ZWwgaXMgbG93LiBQb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgcGluIGlzIGhpZ2guDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3Bpbl9yZWFkKHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgb3V0cHV0IGxldmVsIG9mIGEgR1BJTyBwaW4uDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBTcGVjaWZpZXMgdGhlIHBpbiBudW1iZXIgdG8gcmVhZC4NCisgKg0KKyAqIEByZXR1cm4gMCBpZiB0aGUgcGluIG91dHB1dCBsZXZlbCBpcyBsb3cuIFBvc2l0aXZlIHZhbHVlIGlmIHBpbiBvdXRwdXQgaXMgaGlnaC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcGluX291dF9yZWFkKHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc2Vuc2UgY29uZmlndXJhdGlvbiBvZiBhIEdQSU8gcGluLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgU3BlY2lmaWVzIHRoZSBwaW4gbnVtYmVyIHRvIHJlYWQuDQorICoNCisgKiBAcmV0dmFsIFNlbnNlIGNvbmZpZ3VyYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9ncGlvX3Bpbl9zZW5zZV90IG5yZl9ncGlvX3Bpbl9zZW5zZV9nZXQodWludDMyX3QgcGluX251bWJlcik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIG91dHB1dCBkaXJlY3Rpb24gb24gc2VsZWN0ZWQgcGlucyBvbiBhIGdpdmVuIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBvdXRfbWFzayBNYXNrIHNwZWNpZnlpbmcgdGhlIHBpbnMgdG8gc2V0IGFzIG91dHB1dC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfZGlyX291dHB1dF9zZXQoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBvdXRfbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGlucHV0IGRpcmVjdGlvbiBvbiBzZWxlY3RlZCBwaW5zIG9uIGEgZ2l2ZW4gcG9ydC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIGluX21hc2sgIE1hc2sgc3BlY2lmeWluZyB0aGUgcGlucyB0byBzZXQgYXMgaW5wdXQuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X2Rpcl9pbnB1dF9zZXQoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCBpbl9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHdyaXRpbmcgdGhlIGRpcmVjdGlvbiBjb25maWd1cmF0aW9uIG9mIEdQSU8gcGlucyBpbiBhIGdpdmVuIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBkaXJfbWFzayBNYXNrIHNwZWNpZnlpbmcgdGhlIGRpcmVjdGlvbiBvZiBwaW5zLiBCaXQgc2V0IG1lYW5zIHRoYXQgdGhlIGdpdmVuIHBpbiBpcyBjb25maWd1cmVkIGFzIG91dHB1dC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfZGlyX3dyaXRlKE5SRl9HUElPX1R5cGUgKiBwX3JlZywgdWludDMyX3QgZGlyX21hc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24gb2YgYSBHUElPIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqDQorICogQHJldHZhbCBQaW4gY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBkaXJlY3Rpb24gc2V0dGluZ3MuIEJpdCBzZXQgbWVhbnMgdGhhdCB0aGUgZ2l2ZW4gcGluIGlzIGNvbmZpZ3VyZWQgYXMgb3V0cHV0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19wb3J0X2Rpcl9yZWFkKE5SRl9HUElPX1R5cGUgY29uc3QgKiBwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBpbnB1dCBzaWduYWxzIG9mIEdQSU8gcGlucyBvbiBhIGdpdmVuIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqDQorICogQHJldHZhbCBQb3J0IGlucHV0IHZhbHVlcy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcG9ydF9pbl9yZWFkKE5SRl9HUElPX1R5cGUgY29uc3QgKiBwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBvdXRwdXQgc2lnbmFscyBvZiBHUElPIHBpbnMgb2YgYSBnaXZlbiBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgUG9ydCBvdXRwdXQgdmFsdWVzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19wb3J0X291dF9yZWFkKE5SRl9HUElPX1R5cGUgY29uc3QgKiBwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciB3cml0aW5nIHRoZSBHUElPIHBpbnMgb3V0cHV0IG9uIGEgZ2l2ZW4gcG9ydC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHZhbHVlIE91dHB1dCBwb3J0IG1hc2suDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X291dF93cml0ZShOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IHZhbHVlKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgaGlnaCBsZXZlbCBvbiBzZWxlY3RlZCBHUElPIHBpbnMgb2YgYSBnaXZlbiBwb3J0Lg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gc2V0X21hc2sgTWFzayB3aXRoIHBpbnMgdG8gc2V0IGFzIGxvZ2ljYWwgaGlnaCBsZXZlbC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfb3V0X3NldChOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IHNldF9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgbG93IGxldmVsIG9uIHNlbGVjdGVkIEdQSU8gcGlucyBvZiBhIGdpdmVuIHBvcnQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBjbHJfbWFzayBNYXNrIHdpdGggcGlucyB0byBzZXQgYXMgbG9naWNhbCBsb3cgbGV2ZWwuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X291dF9jbGVhcihOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IGNscl9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgcGlucyBzdGF0ZSBvZiBtdWx0aXBsZSBjb25zZWN1dGl2ZSBwb3J0cy4NCisgKg0KKyAqIEBwYXJhbSBzdGFydF9wb3J0IEluZGV4IG9mIHRoZSBmaXJzdCBwb3J0IHRvIHJlYWQuDQorICogQHBhcmFtIGxlbmd0aCAgICAgTnVtYmVyIG9mIHBvcnRzIHRvIHJlYWQuDQorICogQHBhcmFtIHBfbWFza3MgICAgUG9pbnRlciB0byBvdXRwdXQgYXJyYXkgd2hlcmUgcG9ydCBzdGF0ZXMgd2lsbCBiZSBzdG9yZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydHNfcmVhZCh1aW50MzJfdCBzdGFydF9wb3J0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90ICogcF9tYXNrcyk7DQorDQorI2lmZGVmIEdQSU9fREVURUNUTU9ERV9ERVRFQ1RNT0RFX0xERVRFQ1QNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJlYWRpbmcgbGF0Y2ggc3RhdGUgb2YgbXVsdGlwbGUgY29uc2VjdXRpdmUgcG9ydHMuDQorICoNCisgKiBAcGFyYW0gc3RhcnRfcG9ydCBJbmRleCBvZiB0aGUgZmlyc3QgcG9ydCB0byByZWFkLg0KKyAqIEBwYXJhbSBsZW5ndGggICAgIE51bWJlciBvZiBwb3J0cyB0byByZWFkLg0KKyAqIEBwYXJhbSBwX21hc2tzICAgIFBvaW50ZXIgdG8gb3V0cHV0IGFycmF5IHdoZXJlIGxhdGNoIHN0YXRlcyB3aWxsIGJlIHN0b3JlZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19sYXRjaGVzX3JlYWQodWludDMyX3Qgc3RhcnRfcG9ydCwgdWludDMyX3QgbGVuZ3RoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqIHBfbWFza3MpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyBsYXRjaCBzdGF0ZSBvZiBzaW5nbGUgcGluLg0KKyAqDQorICogQHBhcmFtIHBpbl9udW1iZXIgUGluIG51bWJlci4NCisgKiBAcmV0dXJuIDAgaWYgbGF0Y2ggaXMgbm90IHNldC4gUG9zaXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3Bpbl9sYXRjaF9nZXQodWludDMyX3QgcGluX251bWJlcik7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBsYXRjaCBzdGF0ZSBvZiBhIHNpbmdsZSBwaW4uDQorICoNCisgKiBAcGFyYW0gcGluX251bWJlciBQaW4gbnVtYmVyLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX2xhdGNoX2NsZWFyKHVpbnQzMl90IHBpbl9udW1iZXIpOw0KKyNlbmRpZg0KKw0KKw0KKyNlbmRpZiAvLyAjaWZuZGVmIChfX0xJTlRfXyAhPSAxKQ0KKw0KKyNpZm5kZWYgU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBleHRyYWN0aW5nIHBvcnQgYW5kIHJlbGF0aXZlIHBpbiBudW1iZXIgZnJvbSBhYnNvbHV0ZSBwaW4gbnVtYmVyLg0KKyAqDQorICogQHBhcmFtW2lub3V0XSBQb2ludGVyIHRvIGFic29sdXRlIHBpbiBudW1iZXIgd2hpY2ggaXMgb3ZlcnJpZGVuIGJ5IHJlbGF0aXZlIHRvIHBvcnQgcGluIG51bWJlci4NCisgKg0KKyAqIEByZXR1cm4gUG9pbnRlciB0byBwb3J0IHJlZ2lzdGVyIHNldC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBOUkZfR1BJT19UeXBlICogbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKHVpbnQzMl90ICogcF9waW4pDQorew0KKyAgICBBU1NFUlQoKnBfcGluIDwgTlVNQkVSX09GX1BJTlMpOw0KKyNpZiAoR1BJT19DT1VOVCA9PSAxKQ0KKyAgICAvLyBUaGUgb2xkZXN0IGRlZmluaXRpb24gY2FzZQ0KKyAgICByZXR1cm4gTlJGX0dQSU87DQorI2Vsc2UNCisgICAgaWYgKCpwX3BpbiA8IFAwX1BJTl9OVU0pDQorICAgIHsNCisgICAgICAgIHJldHVybiBOUkZfUDA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAqcF9waW4gPSAqcF9waW4gJiAoUDBfUElOX05VTSAtIDEpOw0KKyAgICAgICAgcmV0dXJuIE5SRl9QMTsNCisgICAgfQ0KKyNlbmRpZg0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19yYW5nZV9jZmdfb3V0cHV0KHVpbnQzMl90IHBpbl9yYW5nZV9zdGFydCwgdWludDMyX3QgcGluX3JhbmdlX2VuZCkNCit7DQorICAgIC8qbGludCAtZXs4NDV9IC8vIEEgemVybyBoYXMgYmVlbiBnaXZlbiBhcyByaWdodCBhcmd1bWVudCB0byBvcGVyYXRvciAnfCciICovDQorICAgIGZvciAoOyBwaW5fcmFuZ2Vfc3RhcnQgPD0gcGluX3JhbmdlX2VuZDsgcGluX3JhbmdlX3N0YXJ0KyspDQorICAgIHsNCisgICAgICAgIG5yZl9ncGlvX2NmZ19vdXRwdXQocGluX3JhbmdlX3N0YXJ0KTsNCisgICAgfQ0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19yYW5nZV9jZmdfaW5wdXQodWludDMyX3QgICAgICAgICAgICBwaW5fcmFuZ2Vfc3RhcnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgcGluX3JhbmdlX2VuZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW9fcGluX3B1bGxfdCBwdWxsX2NvbmZpZykNCit7DQorICAgIC8qbGludCAtZXs4NDV9IC8vIEEgemVybyBoYXMgYmVlbiBnaXZlbiBhcyByaWdodCBhcmd1bWVudCB0byBvcGVyYXRvciAnfCciICovDQorICAgIGZvciAoOyBwaW5fcmFuZ2Vfc3RhcnQgPD0gcGluX3JhbmdlX2VuZDsgcGluX3JhbmdlX3N0YXJ0KyspDQorICAgIHsNCisgICAgICAgIG5yZl9ncGlvX2NmZ19pbnB1dChwaW5fcmFuZ2Vfc3RhcnQsIHB1bGxfY29uZmlnKTsNCisgICAgfQ0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmcoDQorICAgIHVpbnQzMl90ICAgICAgICAgICAgIHBpbl9udW1iZXIsDQorICAgIG5yZl9ncGlvX3Bpbl9kaXJfdCAgIGRpciwNCisgICAgbnJmX2dwaW9fcGluX2lucHV0X3QgaW5wdXQsDQorICAgIG5yZl9ncGlvX3Bpbl9wdWxsX3QgIHB1bGwsDQorICAgIG5yZl9ncGlvX3Bpbl9kcml2ZV90IGRyaXZlLA0KKyAgICBucmZfZ3Bpb19waW5fc2Vuc2VfdCBzZW5zZSkNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKw0KKyAgICByZWctPlBJTl9DTkZbcGluX251bWJlcl0gPSAoKHVpbnQzMl90KWRpciA8PCBHUElPX1BJTl9DTkZfRElSX1BvcykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKHVpbnQzMl90KWlucHV0IDw8IEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCh1aW50MzJfdClwdWxsIDw8IEdQSU9fUElOX0NORl9QVUxMX1BvcykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKHVpbnQzMl90KWRyaXZlIDw8IEdQSU9fUElOX0NORl9EUklWRV9Qb3MpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCh1aW50MzJfdClzZW5zZSA8PCBHUElPX1BJTl9DTkZfU0VOU0VfUG9zKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX291dHB1dCh1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgbnJmX2dwaW9fY2ZnKA0KKyAgICAgICAgcGluX251bWJlciwNCisgICAgICAgIE5SRl9HUElPX1BJTl9ESVJfT1VUUFVULA0KKyAgICAgICAgTlJGX0dQSU9fUElOX0lOUFVUX0RJU0NPTk5FQ1QsDQorICAgICAgICBOUkZfR1BJT19QSU5fTk9QVUxMLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX1MwUzEsDQorICAgICAgICBOUkZfR1BJT19QSU5fTk9TRU5TRSk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2NmZ19pbnB1dCh1aW50MzJfdCBwaW5fbnVtYmVyLCBucmZfZ3Bpb19waW5fcHVsbF90IHB1bGxfY29uZmlnKQ0KK3sNCisgICAgbnJmX2dwaW9fY2ZnKA0KKyAgICAgICAgcGluX251bWJlciwNCisgICAgICAgIE5SRl9HUElPX1BJTl9ESVJfSU5QVVQsDQorICAgICAgICBOUkZfR1BJT19QSU5fSU5QVVRfQ09OTkVDVCwNCisgICAgICAgIHB1bGxfY29uZmlnLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX1MwUzEsDQorICAgICAgICBOUkZfR1BJT19QSU5fTk9TRU5TRSk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2NmZ19kZWZhdWx0KHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBucmZfZ3Bpb19jZmcoDQorICAgICAgICBwaW5fbnVtYmVyLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX0RJUl9JTlBVVCwNCisgICAgICAgIE5SRl9HUElPX1BJTl9JTlBVVF9ESVNDT05ORUNULA0KKyAgICAgICAgTlJGX0dQSU9fUElOX05PUFVMTCwNCisgICAgICAgIE5SRl9HUElPX1BJTl9TMFMxLA0KKyAgICAgICAgTlJGX0dQSU9fUElOX05PU0VOU0UpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfd2F0Y2hlcih1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorICAgIC8qbGludCAtZXs4NDV9IC8vIEEgemVybyBoYXMgYmVlbiBnaXZlbiBhcyByaWdodCBhcmd1bWVudCB0byBvcGVyYXRvciAnfCciICovDQorICAgIHVpbnQzMl90IGNuZiA9IHJlZy0+UElOX0NORltwaW5fbnVtYmVyXSAmIH5HUElPX1BJTl9DTkZfSU5QVVRfTXNrOw0KKw0KKyAgICByZWctPlBJTl9DTkZbcGluX251bWJlcl0gPSBjbmYgfCAoR1BJT19QSU5fQ05GX0lOUFVUX0Nvbm5lY3QgPDwgR1BJT19QSU5fQ05GX0lOUFVUX1Bvcyk7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX2lucHV0X2Rpc2Nvbm5lY3QodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKyAgICAvKmxpbnQgLWV7ODQ1fSAvLyBBIHplcm8gaGFzIGJlZW4gZ2l2ZW4gYXMgcmlnaHQgYXJndW1lbnQgdG8gb3BlcmF0b3IgJ3wnIiAqLw0KKyAgICB1aW50MzJfdCBjbmYgPSByZWctPlBJTl9DTkZbcGluX251bWJlcl0gJiB+R1BJT19QSU5fQ05GX0lOUFVUX01zazsNCisNCisgICAgcmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdID0gY25mIHwgKEdQSU9fUElOX0NORl9JTlBVVF9EaXNjb25uZWN0IDw8IEdQSU9fUElOX0NORl9JTlBVVF9Qb3MpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19jZmdfc2Vuc2VfaW5wdXQodWludDMyX3QgICAgICAgICAgICAgcGluX251bWJlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX2dwaW9fcGluX3B1bGxfdCAgcHVsbF9jb25maWcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvX3Bpbl9zZW5zZV90IHNlbnNlX2NvbmZpZykNCit7DQorICAgIG5yZl9ncGlvX2NmZygNCisgICAgICAgIHBpbl9udW1iZXIsDQorICAgICAgICBOUkZfR1BJT19QSU5fRElSX0lOUFVULA0KKyAgICAgICAgTlJGX0dQSU9fUElOX0lOUFVUX0NPTk5FQ1QsDQorICAgICAgICBwdWxsX2NvbmZpZywNCisgICAgICAgIE5SRl9HUElPX1BJTl9TMFMxLA0KKyAgICAgICAgc2Vuc2VfY29uZmlnKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fY2ZnX3NlbnNlX3NldCh1aW50MzJfdCBwaW5fbnVtYmVyLCBucmZfZ3Bpb19waW5fc2Vuc2VfdCBzZW5zZV9jb25maWcpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgLypsaW50IC1lezg0NX0gLy8gQSB6ZXJvIGhhcyBiZWVuIGdpdmVuIGFzIHJpZ2h0IGFyZ3VtZW50IHRvIG9wZXJhdG9yICd8JyIgKi8NCisgICAgcmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdICY9IH5HUElPX1BJTl9DTkZfU0VOU0VfTXNrOw0KKyAgICByZWctPlBJTl9DTkZbcGluX251bWJlcl0gfD0gKHNlbnNlX2NvbmZpZyA8PCBHUElPX1BJTl9DTkZfU0VOU0VfUG9zKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX2Rpcl9zZXQodWludDMyX3QgcGluX251bWJlciwgbnJmX2dwaW9fcGluX2Rpcl90IGRpcmVjdGlvbikNCit7DQorICAgIGlmIChkaXJlY3Rpb24gPT0gTlJGX0dQSU9fUElOX0RJUl9JTlBVVCkNCisgICAgew0KKyAgICAgICAgbnJmX2dwaW9fY2ZnKA0KKyAgICAgICAgICAgIHBpbl9udW1iZXIsDQorICAgICAgICAgICAgTlJGX0dQSU9fUElOX0RJUl9JTlBVVCwNCisgICAgICAgICAgICBOUkZfR1BJT19QSU5fSU5QVVRfQ09OTkVDVCwNCisgICAgICAgICAgICBOUkZfR1BJT19QSU5fTk9QVUxMLA0KKyAgICAgICAgICAgIE5SRl9HUElPX1BJTl9TMFMxLA0KKyAgICAgICAgICAgIE5SRl9HUElPX1BJTl9OT1NFTlNFKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKyAgICAgICAgcmVnLT5ESVJTRVQgPSAoMVVMIDw8IHBpbl9udW1iZXIpOw0KKyAgICB9DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl9zZXQodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKw0KKyAgICBucmZfZ3Bpb19wb3J0X291dF9zZXQocmVnLCAxVUwgPDwgcGluX251bWJlcik7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl9jbGVhcih1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorDQorICAgIG5yZl9ncGlvX3BvcnRfb3V0X2NsZWFyKHJlZywgMVVMIDw8IHBpbl9udW1iZXIpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19waW5fdG9nZ2xlKHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnICAgICAgICA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorICAgIHVpbnQzMl90ICAgICAgICBwaW5zX3N0YXRlID0gcmVnLT5PVVQ7DQorDQorICAgIHJlZy0+T1VUU0VUID0gKH5waW5zX3N0YXRlICYgKDFVTCA8PCBwaW5fbnVtYmVyKSk7DQorICAgIHJlZy0+T1VUQ0xSID0gKHBpbnNfc3RhdGUgJiAoMVVMIDw8IHBpbl9udW1iZXIpKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcGluX3dyaXRlKHVpbnQzMl90IHBpbl9udW1iZXIsIHVpbnQzMl90IHZhbHVlKQ0KK3sNCisgICAgaWYgKHZhbHVlID09IDApDQorICAgIHsNCisgICAgICAgIG5yZl9ncGlvX3Bpbl9jbGVhcihwaW5fbnVtYmVyKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIG5yZl9ncGlvX3Bpbl9zZXQocGluX251bWJlcik7DQorICAgIH0NCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3Bpbl9yZWFkKHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgcmV0dXJuICgobnJmX2dwaW9fcG9ydF9pbl9yZWFkKHJlZykgPj4gcGluX251bWJlcikgJiAxVUwpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW9fcGluX291dF9yZWFkKHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgcmV0dXJuICgobnJmX2dwaW9fcG9ydF9vdXRfcmVhZChyZWcpID4+IHBpbl9udW1iZXIpICYgMVVMKTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIG5yZl9ncGlvX3Bpbl9zZW5zZV90IG5yZl9ncGlvX3Bpbl9zZW5zZV9nZXQodWludDMyX3QgcGluX251bWJlcikNCit7DQorICAgIE5SRl9HUElPX1R5cGUgKiByZWcgPSBucmZfZ3Bpb19waW5fcG9ydF9kZWNvZGUoJnBpbl9udW1iZXIpOw0KKw0KKyAgICByZXR1cm4gKG5yZl9ncGlvX3Bpbl9zZW5zZV90KSgocmVnLT5QSU5fQ05GW3Bpbl9udW1iZXJdICYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fUElOX0NORl9TRU5TRV9Nc2spID4+IEdQSU9fUElOX0NORl9TRU5TRV9Qb3MpOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X2Rpcl9vdXRwdXRfc2V0KE5SRl9HUElPX1R5cGUgKiBwX3JlZywgdWludDMyX3Qgb3V0X21hc2spDQorew0KKyAgICBwX3JlZy0+RElSU0VUID0gb3V0X21hc2s7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfZGlyX2lucHV0X3NldChOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IGluX21hc2spDQorew0KKyAgICBwX3JlZy0+RElSQ0xSID0gaW5fbWFzazsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW9fcG9ydF9kaXJfd3JpdGUoTlJGX0dQSU9fVHlwZSAqIHBfcmVnLCB1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIHBfcmVnLT5ESVIgPSB2YWx1ZTsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3BvcnRfZGlyX3JlYWQoTlJGX0dQSU9fVHlwZSBjb25zdCAqIHBfcmVnKQ0KK3sNCisgICAgcmV0dXJuIHBfcmVnLT5ESVI7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19wb3J0X2luX3JlYWQoTlJGX0dQSU9fVHlwZSBjb25zdCAqIHBfcmVnKQ0KK3sNCisgICAgcmV0dXJuIHBfcmVnLT5JTjsNCit9DQorDQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvX3BvcnRfb3V0X3JlYWQoTlJGX0dQSU9fVHlwZSBjb25zdCAqIHBfcmVnKQ0KK3sNCisgICAgcmV0dXJuIHBfcmVnLT5PVVQ7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfb3V0X3dyaXRlKE5SRl9HUElPX1R5cGUgKiBwX3JlZywgdWludDMyX3QgdmFsdWUpDQorew0KKyAgICBwX3JlZy0+T1VUID0gdmFsdWU7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3BvcnRfb3V0X3NldChOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IHNldF9tYXNrKQ0KK3sNCisgICAgcF9yZWctPk9VVFNFVCA9IHNldF9tYXNrOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0X291dF9jbGVhcihOUkZfR1BJT19UeXBlICogcF9yZWcsIHVpbnQzMl90IGNscl9tYXNrKQ0KK3sNCisgICAgcF9yZWctPk9VVENMUiA9IGNscl9tYXNrOw0KK30NCisNCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19wb3J0c19yZWFkKHVpbnQzMl90IHN0YXJ0X3BvcnQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgKiBwX21hc2tzKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIGdwaW9fcmVnc1tHUElPX0NPVU5UXSA9IEdQSU9fUkVHX0xJU1Q7DQorDQorICAgIEFTU0VSVChzdGFydF9wb3J0ICsgbGVuZ3RoIDw9IEdQSU9fQ09VTlQpOw0KKyAgICB1aW50MzJfdCBpOw0KKw0KKyAgICBmb3IgKGkgPSBzdGFydF9wb3J0OyBpIDwgKHN0YXJ0X3BvcnQgKyBsZW5ndGgpOyBpKyspDQorICAgIHsNCisgICAgICAgICpwX21hc2tzID0gbnJmX2dwaW9fcG9ydF9pbl9yZWFkKGdwaW9fcmVnc1tpXSk7DQorICAgICAgICBwX21hc2tzKys7DQorICAgIH0NCit9DQorDQorDQorI2lmZGVmIEdQSU9fREVURUNUTU9ERV9ERVRFQ1RNT0RFX0xERVRFQ1QNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb19sYXRjaGVzX3JlYWQodWludDMyX3Qgc3RhcnRfcG9ydCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCAqIHBfbWFza3MpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogZ3Bpb19yZWdzW0dQSU9fQ09VTlRdID0gR1BJT19SRUdfTElTVDsNCisgICAgdWludDMyX3QgICAgICAgIGk7DQorDQorICAgIGZvciAoaSA9IHN0YXJ0X3BvcnQ7IGkgPCAoc3RhcnRfcG9ydCArIGxlbmd0aCk7IGkrKykNCisgICAgew0KKyAgICAgICAgKnBfbWFza3MgPSBncGlvX3JlZ3NbaV0tPkxBVENIOw0KKyAgICAgICAgcF9tYXNrcysrOw0KKyAgICB9DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb19waW5fbGF0Y2hfZ2V0KHVpbnQzMl90IHBpbl9udW1iZXIpDQorew0KKyAgICBOUkZfR1BJT19UeXBlICogcmVnID0gbnJmX2dwaW9fcGluX3BvcnRfZGVjb2RlKCZwaW5fbnVtYmVyKTsNCisNCisgICAgcmV0dXJuIChyZWctPkxBVENIICYgKDEgPDwgcGluX251bWJlcikpID8gMSA6IDA7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvX3Bpbl9sYXRjaF9jbGVhcih1aW50MzJfdCBwaW5fbnVtYmVyKQ0KK3sNCisgICAgTlJGX0dQSU9fVHlwZSAqIHJlZyA9IG5yZl9ncGlvX3Bpbl9wb3J0X2RlY29kZSgmcGluX251bWJlcik7DQorDQorICAgIHJlZy0+TEFUQ0ggPSAoMSA8PCBwaW5fbnVtYmVyKTsNCit9DQorDQorDQorI2VuZGlmDQorI2VuZGlmIC8vIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKw0KKy8qKiBAfSAqLw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZ3Bpb3RlLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfZ3Bpb3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyM2Y0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ncGlvdGUuaApAQCAtMCwwICsxLDQyMSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfR1BJT1RFX0hfXw0KKyNkZWZpbmUgTlJGX0dQSU9URV9IX18NCisNCisjaW5jbHVkZSAibnJmX3BlcmlwaGVyYWxzLmgiDQorI2luY2x1ZGUgIm5yZi5oIg0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaWZkZWYgR1BJT1RFX0NPTkZJR19QT1JUX01zaw0KKyNkZWZpbmUgR1BJT1RFX0NPTkZJR19QT1JUX1BJTl9Nc2sgKEdQSU9URV9DT05GSUdfUE9SVF9Nc2sgfCBHUElPVEVfQ09ORklHX1BTRUxfTXNrKQ0KKyNlbHNlDQorI2RlZmluZSBHUElPVEVfQ09ORklHX1BPUlRfUElOX01zayBHUElPVEVfQ09ORklHX1BTRUxfTXNrDQorI2VuZGlmDQorLyoqDQorKiBAZGVmZ3JvdXAgbnJmX2dwaW90ZV9hYnMgR1BJT1RFIGFic3RyYWN0aW9uDQorKiBAew0KKyogQGluZ3JvdXAgbnJmX2dwaW90ZQ0KKyogQGJyaWVmIEdQSU9URSBhYnN0cmFjdGlvbiBmb3IgY29uZmlndXJhdGlvbiBvZiBjaGFubmVscy4NCisqLw0KKw0KKyAvKioNCisgKiBAZW51bSBucmZfZ3Bpb3RlX3BvbGFyaXR5X3QNCisgKiBAYnJpZWYgUG9sYXJpdHkgZm9yIHRoZSBHUElPVEUgY2hhbm5lbC4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICBOUkZfR1BJT1RFX1BPTEFSSVRZX0xPVE9ISSA9IEdQSU9URV9DT05GSUdfUE9MQVJJVFlfTG9Ub0hpLCAgICAgICAvLy88ICBMb3cgdG8gaGlnaC4NCisgIE5SRl9HUElPVEVfUE9MQVJJVFlfSElUT0xPID0gR1BJT1RFX0NPTkZJR19QT0xBUklUWV9IaVRvTG8sICAgICAgIC8vLzwgIEhpZ2ggdG8gbG93Lg0KKyAgTlJGX0dQSU9URV9QT0xBUklUWV9UT0dHTEUgPSBHUElPVEVfQ09ORklHX1BPTEFSSVRZX1RvZ2dsZSAgICAgICAgLy8vPCAgVG9nZ2xlLg0KK30gbnJmX2dwaW90ZV9wb2xhcml0eV90Ow0KKw0KKw0KKyAvKioNCisgKiBAZW51bSBucmZfZ3Bpb3RlX291dGluaXRfdA0KKyAqIEBicmllZiBJbml0aWFsIG91dHB1dCB2YWx1ZSBmb3IgdGhlIEdQSU9URSBjaGFubmVsLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgIE5SRl9HUElPVEVfSU5JVElBTF9WQUxVRV9MT1cgID0gR1BJT1RFX0NPTkZJR19PVVRJTklUX0xvdywgICAgICAgLy8vPCAgTG93IHRvIGhpZ2guDQorICBOUkZfR1BJT1RFX0lOSVRJQUxfVkFMVUVfSElHSCA9IEdQSU9URV9DT05GSUdfT1VUSU5JVF9IaWdoICAgICAgIC8vLzwgIEhpZ2ggdG8gbG93Lg0KK30gbnJmX2dwaW90ZV9vdXRpbml0X3Q7DQorDQorLyoqDQorICogQGJyaWVmIFRhc2tzLg0KKyAqLw0KK3R5cGVkZWYgZW51bSAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pICovDQorew0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX09VVF8wICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfT1VUWzBdKSwgLyoqPCBPdXQgdGFzayAwLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfT1VUXzEgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19PVVRbMV0pLCAvKio8IE91dCB0YXNrIDEuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19PVVRfMiAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX09VVFsyXSksIC8qKjwgT3V0IHRhc2sgMi4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX09VVF8zICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfT1VUWzNdKSwgLyoqPCBPdXQgdGFzayAzLiovDQorI2lmIChHUElPVEVfQ0hfTlVNID4gNCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9HUElPVEVfVEFTS1NfT1VUXzQgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19PVVRbNF0pLCAvKio8IE91dCB0YXNrIDQuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19PVVRfNSAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX09VVFs1XSksIC8qKjwgT3V0IHRhc2sgNS4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX09VVF82ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfT1VUWzZdKSwgLyoqPCBPdXQgdGFzayA2LiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfT1VUXzcgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19PVVRbN10pLCAvKio8IE91dCB0YXNrIDcuKi8NCisjZW5kaWYNCisjaWYgZGVmaW5lZChHUElPVEVfRkVBVFVSRV9TRVRfUFJFU0VOVCkgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9HUElPVEVfVEFTS1NfU0VUXzAgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19TRVRbMF0pLCAvKio8IFNldCB0YXNrIDAuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19TRVRfMSAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX1NFVFsxXSksIC8qKjwgU2V0IHRhc2sgMS4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX1NFVF8yICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfU0VUWzJdKSwgLyoqPCBTZXQgdGFzayAyLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfU0VUXzMgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19TRVRbM10pLCAvKio8IFNldCB0YXNrIDMuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19TRVRfNCAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX1NFVFs0XSksIC8qKjwgU2V0IHRhc2sgNC4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX1NFVF81ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfU0VUWzVdKSwgLyoqPCBTZXQgdGFzayA1LiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfU0VUXzYgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19TRVRbNl0pLCAvKio8IFNldCB0YXNrIDYuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19TRVRfNyAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX1NFVFs3XSksIC8qKjwgU2V0IHRhc2sgNy4qLw0KKyNlbmRpZg0KKyNpZiBkZWZpbmVkKEdQSU9URV9GRUFUVVJFX0NMUl9QUkVTRU5UKSB8fCBkZWZpbmVkKF9fU0RLX0RPWFlHRU5fXykNCisgICAgTlJGX0dQSU9URV9UQVNLU19DTFJfMCAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX0NMUlswXSksIC8qKjwgQ2xlYXIgdGFzayAwLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfQ0xSXzEgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19DTFJbMV0pLCAvKio8IENsZWFyIHRhc2sgMS4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX0NMUl8yICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfQ0xSWzJdKSwgLyoqPCBDbGVhciB0YXNrIDIuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19DTFJfMyAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX0NMUlszXSksIC8qKjwgQ2xlYXIgdGFzayAzLiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfQ0xSXzQgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19DTFJbNF0pLCAvKio8IENsZWFyIHRhc2sgNC4qLw0KKyAgICBOUkZfR1BJT1RFX1RBU0tTX0NMUl81ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgVEFTS1NfQ0xSWzVdKSwgLyoqPCBDbGVhciB0YXNrIDUuKi8NCisgICAgTlJGX0dQSU9URV9UQVNLU19DTFJfNiAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIFRBU0tTX0NMUls2XSksIC8qKjwgQ2xlYXIgdGFzayA2LiovDQorICAgIE5SRl9HUElPVEVfVEFTS1NfQ0xSXzcgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBUQVNLU19DTFJbN10pLCAvKio8IENsZWFyIHRhc2sgNy4qLw0KKyNlbmRpZg0KKyAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX2dwaW90ZV90YXNrc190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBFdmVudHMuDQorICovDQordHlwZWRlZiBlbnVtIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykgKi8NCit7DQorICAgIE5SRl9HUElPVEVfRVZFTlRTX0lOXzAgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBFVkVOVFNfSU5bMF0pLCAvKio8IEluIGV2ZW50IDAuKi8NCisgICAgTlJGX0dQSU9URV9FVkVOVFNfSU5fMSAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIEVWRU5UU19JTlsxXSksIC8qKjwgSW4gZXZlbnQgMS4qLw0KKyAgICBOUkZfR1BJT1RFX0VWRU5UU19JTl8yICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgRVZFTlRTX0lOWzJdKSwgLyoqPCBJbiBldmVudCAyLiovDQorICAgIE5SRl9HUElPVEVfRVZFTlRTX0lOXzMgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBFVkVOVFNfSU5bM10pLCAvKio8IEluIGV2ZW50IDMuKi8NCisjaWYgKEdQSU9URV9DSF9OVU0gPiA0KSB8fCBkZWZpbmVkKF9fU0RLX0RPWFlHRU5fXykNCisgICAgTlJGX0dQSU9URV9FVkVOVFNfSU5fNCAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIEVWRU5UU19JTls0XSksIC8qKjwgSW4gZXZlbnQgNC4qLw0KKyAgICBOUkZfR1BJT1RFX0VWRU5UU19JTl81ICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgRVZFTlRTX0lOWzVdKSwgLyoqPCBJbiBldmVudCA1LiovDQorICAgIE5SRl9HUElPVEVfRVZFTlRTX0lOXzYgICAgID0gb2Zmc2V0b2YoTlJGX0dQSU9URV9UeXBlLCBFVkVOVFNfSU5bNl0pLCAvKio8IEluIGV2ZW50IDYuKi8NCisgICAgTlJGX0dQSU9URV9FVkVOVFNfSU5fNyAgICAgPSBvZmZzZXRvZihOUkZfR1BJT1RFX1R5cGUsIEVWRU5UU19JTls3XSksIC8qKjwgSW4gZXZlbnQgNy4qLw0KKyNlbmRpZg0KKyAgICBOUkZfR1BJT1RFX0VWRU5UU19QT1JUICAgICA9IG9mZnNldG9mKE5SRl9HUElPVEVfVHlwZSwgRVZFTlRTX1BPUlQpLCAvKio8ICBQb3J0IGV2ZW50LiovDQorICAgIC8qbGludCAtcmVzdG9yZSovDQorfSBucmZfZ3Bpb3RlX2V2ZW50c190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ncGlvdGVfaW50X3QNCisgKiBAYnJpZWYgR1BJT1RFIGludGVycnVwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfR1BJT1RFX0lOVF9JTjBfTUFTSyAgPSBHUElPVEVfSU5URU5TRVRfSU4wX01zaywgIC8qKjwgR1BJT1RFIGludGVycnVwdCBmcm9tIElOMC4gKi8NCisgICAgTlJGX0dQSU9URV9JTlRfSU4xX01BU0sgID0gR1BJT1RFX0lOVEVOU0VUX0lOMV9Nc2ssICAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBJTjEuICovDQorICAgIE5SRl9HUElPVEVfSU5UX0lOMl9NQVNLICA9IEdQSU9URV9JTlRFTlNFVF9JTjJfTXNrLCAgLyoqPCBHUElPVEUgaW50ZXJydXB0IGZyb20gSU4yLiAqLw0KKyAgICBOUkZfR1BJT1RFX0lOVF9JTjNfTUFTSyAgPSBHUElPVEVfSU5URU5TRVRfSU4zX01zaywgIC8qKjwgR1BJT1RFIGludGVycnVwdCBmcm9tIElOMy4gKi8NCisjaWYgKEdQSU9URV9DSF9OVU0gPiA0KSB8fCBkZWZpbmVkKF9fU0RLX0RPWFlHRU5fXykNCisgICAgTlJGX0dQSU9URV9JTlRfSU40X01BU0sgID0gR1BJT1RFX0lOVEVOU0VUX0lONF9Nc2ssICAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBJTjQuICovDQorICAgIE5SRl9HUElPVEVfSU5UX0lONV9NQVNLICA9IEdQSU9URV9JTlRFTlNFVF9JTjVfTXNrLCAgLyoqPCBHUElPVEUgaW50ZXJydXB0IGZyb20gSU41LiAqLw0KKyAgICBOUkZfR1BJT1RFX0lOVF9JTjZfTUFTSyAgPSBHUElPVEVfSU5URU5TRVRfSU42X01zaywgIC8qKjwgR1BJT1RFIGludGVycnVwdCBmcm9tIElONi4gKi8NCisgICAgTlJGX0dQSU9URV9JTlRfSU43X01BU0sgID0gR1BJT1RFX0lOVEVOU0VUX0lON19Nc2ssICAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBJTjcuICovDQorI2VuZGlmDQorICAgIE5SRl9HUElPVEVfSU5UX1BPUlRfTUFTSyA9IChpbnQpR1BJT1RFX0lOVEVOU0VUX1BPUlRfTXNrLCAvKio8IEdQSU9URSBpbnRlcnJ1cHQgZnJvbSBQT1JUIGV2ZW50LiAqLw0KK30gbnJmX2dwaW90ZV9pbnRfdDsNCisNCisjZGVmaW5lIE5SRl9HUElPVEVfSU5UX0lOX01BU0sgKE5SRl9HUElPVEVfSU5UX0lOMF9NQVNLIHwgTlJGX0dQSU9URV9JTlRfSU4xX01BU0sgfFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SRl9HUElPVEVfSU5UX0lOMl9NQVNLIHwgTlJGX0dQSU9URV9JTlRfSU4zX01BU0spDQorI2lmIChHUElPVEVfQ0hfTlVNID4gNCkNCisjdW5kZWYgTlJGX0dQSU9URV9JTlRfSU5fTUFTSw0KKyNkZWZpbmUgTlJGX0dQSU9URV9JTlRfSU5fTUFTSyAoTlJGX0dQSU9URV9JTlRfSU4wX01BU0sgfCBOUkZfR1BJT1RFX0lOVF9JTjFfTUFTSyB8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJGX0dQSU9URV9JTlRfSU4yX01BU0sgfCBOUkZfR1BJT1RFX0lOVF9JTjNfTUFTSyB8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJGX0dQSU9URV9JTlRfSU40X01BU0sgfCBOUkZfR1BJT1RFX0lOVF9JTjVfTUFTSyB8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJGX0dQSU9URV9JTlRfSU42X01BU0sgfCBOUkZfR1BJT1RFX0lOVF9JTjdfTUFTSykNCisjZW5kaWYNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGFjdGl2YXRpbmcgYSBzcGVjaWZpYyBHUElPVEUgdGFzay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHRhc2sgVGFzay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfc2V0KG5yZl9ncGlvdGVfdGFza3NfdCB0YXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBHUElPVEUgdGFzay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gdGFzayBUYXNrLg0KKyAqDQorICogQHJldHVybnMgQWRkcmVzcy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV90YXNrX2FkZHJfZ2V0KG5yZl9ncGlvdGVfdGFza3NfdCB0YXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgR1BJT1RFIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSBldmVudCBFdmVudC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBucmZfZ3Bpb3RlX2V2ZW50X2lzX3NldChucmZfZ3Bpb3RlX2V2ZW50c190IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgc3BlY2lmaWMgR1BJT1RFIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSBldmVudCBFdmVudC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2NsZWFyKG5yZl9ncGlvdGVfZXZlbnRzX3QgZXZlbnQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZXZlbnQgRXZlbnQuDQorICoNCisgKiBAcmV0dXJuIEFkZHJlc3MNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV9ldmVudF9hZGRyX2dldChucmZfZ3Bpb3RlX2V2ZW50c190IGV2ZW50KTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBtYXNrICAgICAgICAgIEludGVycnVwdCBtYXNrIHRvIGJlIGVuYWJsZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV9pbnRfZW5hYmxlKHVpbnQzMl90IG1hc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBtYXNrICAgICAgICAgIEludGVycnVwdCBtYXNrIHRvIGJlIGRpc2FibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfaW50X2Rpc2FibGUodWludDMyX3QgbWFzayk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLg0KKyAqDQorICogQHBhcmFtW2luXSAgbWFzayAgICAgICAgICBNYXNrIG9mIGludGVycnVwdCBmbGFncyB0byBjaGVjay4NCisgKg0KKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgTWFzayB3aXRoIGVuYWJsZWQgaW50ZXJydXB0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX2dwaW90ZV9pbnRfaXNfZW5hYmxlZCh1aW50MzJfdCBtYXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGEgR1BJT1RFIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgaWR4ICAgICAgICBUYXNrLUV2ZW50IGluZGV4Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfZXZlbnRfZW5hYmxlKHVpbnQzMl90IGlkeCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNhYmxpbmcgYSBHUElPVEUgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBpZHggICAgICAgIFRhc2stRXZlbnQgaW5kZXguDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV9ldmVudF9kaXNhYmxlKHVpbnQzMl90IGlkeCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyBhIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKiBAcGFyYW1baW5dICBwaW4gICAgICAgIFBpbiBhc3NvY2lhdGVkIHdpdGggZXZlbnQuDQorICogQHBhcmFtW2luXSAgcG9sYXJpdHkgICBUcmFuc2l0aW9uIHRoYXQgc2hvdWxkIGdlbmVyYXRlIGFuIGV2ZW50Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfZXZlbnRfY29uZmlndXJlKHVpbnQzMl90IGlkeCwgdWludDMyX3QgcGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvdGVfcG9sYXJpdHlfdCBwb2xhcml0eSk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBwaW4gYXNzb2NpYXRlZCB3aXRoIGEgR1BJT1RFIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgaWR4ICAgICAgICBUYXNrLUV2ZW50IGluZGV4Lg0KKyAqDQorICogQHJldHVybiBQaW4gbnVtYmVyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb3RlX2V2ZW50X3Bpbl9nZXQodWludDMyX3QgaWR4KTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIHBvbGFyaXR5IGFzc29jaWF0ZWQgd2l0aCBhIEdQSU9URSBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKg0KKyAqIEByZXR1cm4gUG9sYXJpdHkuDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9ncGlvdGVfcG9sYXJpdHlfdCBucmZfZ3Bpb3RlX2V2ZW50X3BvbGFyaXR5X2dldCh1aW50MzJfdCBpZHgpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgYSBHUElPVEUgdGFzay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfZW5hYmxlKHVpbnQzMl90IGlkeCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNhYmxpbmcgYSBHUElPVEUgdGFzay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfZGlzYWJsZSh1aW50MzJfdCBpZHgpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgYSBHUElPVEUgdGFzay4NCisgKiBAbm90ZSAgRnVuY3Rpb24gaXMgbm90IGNvbmZpZ3VyaW5nIG1vZGUgZmllbGQgc28gdGFzayBpcyBkaXNhYmxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKiBAcGFyYW1baW5dICBwaW4gICAgICAgIFBpbiBhc3NvY2lhdGVkIHdpdGggZXZlbnQuDQorICogQHBhcmFtW2luXSAgcG9sYXJpdHkgICBUcmFuc2l0aW9uIHRoYXQgc2hvdWxkIGdlbmVyYXRlIGFuIGV2ZW50Lg0KKyAqIEBwYXJhbVtpbl0gIGluaXRfdmFsICAgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgcGluLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGFza19jb25maWd1cmUodWludDMyX3QgaWR4LCB1aW50MzJfdCBwaW4sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb3RlX3BvbGFyaXR5X3QgcG9sYXJpdHksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb3RlX291dGluaXRfdCAgaW5pdF92YWwpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZm9yY2luZyBhIHNwZWNpZmljIHN0YXRlIG9uIHRoZSBwaW4gY29ubmVjdGVkIHRvIEdQSU9URS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGlkeCAgICAgICAgVGFzay1FdmVudCBpbmRleC4NCisgKiBAcGFyYW1baW5dICBpbml0X3ZhbCAgIFBpbiBzdGF0ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfZm9yY2UodWludDMyX3QgaWR4LCBucmZfZ3Bpb3RlX291dGluaXRfdCBpbml0X3ZhbCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciByZXNldHRpbmcgYSBHUElPVEUgdGFzayBldmVudCBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHN0YXRlLg0KKyAqDQorICogQHBhcmFtW2luXSAgaWR4ICAgICAgICBUYXNrLUV2ZW50IGluZGV4Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGVfZGVmYXVsdCh1aW50MzJfdCBpZHgpOw0KKw0KKyNpZm5kZWYgU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX3NldChucmZfZ3Bpb3RlX3Rhc2tzX3QgdGFzaykNCit7DQorICAgICooX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpTlJGX0dQSU9URSArIHRhc2spID0gMHgxVUw7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb3RlX3Rhc2tfYWRkcl9nZXQobnJmX2dwaW90ZV90YXNrc190IHRhc2spDQorew0KKyAgICByZXR1cm4gKCh1aW50MzJfdClOUkZfR1BJT1RFICsgdGFzayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9ncGlvdGVfZXZlbnRfaXNfc2V0KG5yZl9ncGlvdGVfZXZlbnRzX3QgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKCoodWludDMyX3QgKilucmZfZ3Bpb3RlX2V2ZW50X2FkZHJfZ2V0KGV2ZW50KSA9PSAweDFVTCkgPyB0cnVlIDogZmFsc2U7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfZXZlbnRfY2xlYXIobnJmX2dwaW90ZV9ldmVudHNfdCBldmVudCkNCit7DQorICAgICoodWludDMyX3QgKilucmZfZ3Bpb3RlX2V2ZW50X2FkZHJfZ2V0KGV2ZW50KSA9IDA7DQorI2lmIF9fQ09SVEVYX00gPT0gMHgwNA0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBkdW1teSA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopbnJmX2dwaW90ZV9ldmVudF9hZGRyX2dldChldmVudCkpOw0KKyAgICAodm9pZClkdW1teTsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ncGlvdGVfZXZlbnRfYWRkcl9nZXQobnJmX2dwaW90ZV9ldmVudHNfdCBldmVudCkNCit7DQorICAgIHJldHVybiAoKHVpbnQzMl90KU5SRl9HUElPVEUgKyBldmVudCk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfaW50X2VuYWJsZSh1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgTlJGX0dQSU9URS0+SU5URU5TRVQgPSBtYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2ludF9kaXNhYmxlKHVpbnQzMl90IG1hc2spDQorew0KKyAgICBOUkZfR1BJT1RFLT5JTlRFTkNMUiA9IG1hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb3RlX2ludF9pc19lbmFibGVkKHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gKE5SRl9HUElPVEUtPklOVEVOU0VUICYgbWFzayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfZXZlbnRfZW5hYmxlKHVpbnQzMl90IGlkeCkNCit7DQorICAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gfD0gR1BJT1RFX0NPTkZJR19NT0RFX0V2ZW50Ow0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2Rpc2FibGUodWludDMyX3QgaWR4KQ0KK3sNCisgICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSAmPSB+R1BJT1RFX0NPTkZJR19NT0RFX0V2ZW50Ow0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX2V2ZW50X2NvbmZpZ3VyZSh1aW50MzJfdCBpZHgsIHVpbnQzMl90IHBpbiwgbnJmX2dwaW90ZV9wb2xhcml0eV90IHBvbGFyaXR5KQ0KK3sNCisgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdICY9IH4oR1BJT1RFX0NPTkZJR19QT1JUX1BJTl9Nc2sgfCBHUElPVEVfQ09ORklHX1BPTEFSSVRZX01zayk7DQorICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSB8PSAoKHBpbiA8PCBHUElPVEVfQ09ORklHX1BTRUxfUG9zKSAmIEdQSU9URV9DT05GSUdfUE9SVF9QSU5fTXNrKSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwb2xhcml0eSA8PCBHUElPVEVfQ09ORklHX1BPTEFSSVRZX1BvcykgJiBHUElPVEVfQ09ORklHX1BPTEFSSVRZX01zayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfZ3Bpb3RlX2V2ZW50X3Bpbl9nZXQodWludDMyX3QgaWR4KQ0KK3sNCisgICAgcmV0dXJuICgoTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gJiBHUElPVEVfQ09ORklHX1BPUlRfUElOX01zaykgPj4gR1BJT1RFX0NPTkZJR19QU0VMX1Bvcyk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSBucmZfZ3Bpb3RlX3BvbGFyaXR5X3QgbnJmX2dwaW90ZV9ldmVudF9wb2xhcml0eV9nZXQodWludDMyX3QgaWR4KQ0KK3sNCisgICAgcmV0dXJuIChucmZfZ3Bpb3RlX3BvbGFyaXR5X3QpKChOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSAmIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfTXNrKSA+PiBHUElPVEVfQ09ORklHX1BPTEFSSVRZX1Bvcyk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGFza19lbmFibGUodWludDMyX3QgaWR4KQ0KK3sNCisgICAgdWludDMyX3QgZmluYWxfY29uZmlnID0gTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gfCBHUElPVEVfQ09ORklHX01PREVfVGFzazsNCisjaWZkZWYgTlJGNTENCisgICAgLyogV29ya2Fyb3VuZCBmb3IgdGhlIE9VVElOSVQgUEFOLiBXaGVuIG5yZl9ncGlvdGVfdGFza19jb25maWcoKSBpcyBjYWxsZWQgYSBnbGl0Y2ggaGFwcGVucw0KKyAgICBvbiB0aGUgR1BJTyBpZiB0aGUgR1BJTyBpbiBxdWVzdGlvbiBpcyBhbHJlYWR5IGFzc2lnbmVkIHRvIEdQSU9URSBhbmQgdGhlIHBpbiBpcyBpbiB0aGUNCisgICAgY29ycmVjdCBzdGF0ZSBpbiBHUElPVEUgYnV0IG5vdCBpbiB0aGUgT1VUIHJlZ2lzdGVyLiAqLw0KKyAgICAvKiBDb25maWd1cmUgY2hhbm5lbCB0byBub3QgZXhpc3RpbmcsIG5vdCBjb25uZWN0ZWQgdG8gdGhlIHBpbiwgYW5kIGNvbmZpZ3VyZSBhcyBhIHRhc2tzIHRoYXQgd2lsbCBzZXQgaXQgdG8gcHJvcGVyIGxldmVsICovDQorICAgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdID0gZmluYWxfY29uZmlnIHwgKCgoMzEpIDw8IEdQSU9URV9DT05GSUdfUFNFTF9Qb3MpICYgR1BJT1RFX0NPTkZJR19QT1JUX1BJTl9Nc2spOw0KKyAgICBfX05PUCgpOw0KKyAgICBfX05PUCgpOw0KKyAgICBfX05PUCgpOw0KKyNlbmRpZg0KKyAgICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSA9IGZpbmFsX2NvbmZpZzsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90YXNrX2Rpc2FibGUodWludDMyX3QgaWR4KQ0KK3sNCisgICAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gJj0gfkdQSU9URV9DT05GSUdfTU9ERV9UYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfZ3Bpb3RlX3Rhc2tfY29uZmlndXJlKHVpbnQzMl90IGlkeCwgdWludDMyX3QgcGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9ncGlvdGVfcG9sYXJpdHlfdCBwb2xhcml0eSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfZ3Bpb3RlX291dGluaXRfdCAgaW5pdF92YWwpDQorew0KKyAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gJj0gfihHUElPVEVfQ09ORklHX1BPUlRfUElOX01zayB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfTXNrIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT1RFX0NPTkZJR19PVVRJTklUX01zayk7DQorDQorICBOUkZfR1BJT1RFLT5DT05GSUdbaWR4XSB8PSAoKHBpbiA8PCBHUElPVEVfQ09ORklHX1BTRUxfUG9zKSAmIEdQSU9URV9DT05GSUdfUE9SVF9QSU5fTXNrKSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBvbGFyaXR5IDw8IEdQSU9URV9DT05GSUdfUE9MQVJJVFlfUG9zKSAmIEdQSU9URV9DT05GSUdfUE9MQVJJVFlfTXNrKSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGluaXRfdmFsIDw8IEdQSU9URV9DT05GSUdfT1VUSU5JVF9Qb3MpICYgR1BJT1RFX0NPTkZJR19PVVRJTklUX01zayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ncGlvdGVfdGFza19mb3JjZSh1aW50MzJfdCBpZHgsIG5yZl9ncGlvdGVfb3V0aW5pdF90IGluaXRfdmFsKQ0KK3sNCisgICAgTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gPSAoTlJGX0dQSU9URS0+Q09ORklHW2lkeF0gJiB+R1BJT1RFX0NPTkZJR19PVVRJTklUX01zaykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoaW5pdF92YWwgPDwgR1BJT1RFX0NPTkZJR19PVVRJTklUX1BvcykgJiBHUElPVEVfQ09ORklHX09VVElOSVRfTXNrKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX2dwaW90ZV90ZV9kZWZhdWx0KHVpbnQzMl90IGlkeCkNCit7DQorICAgIE5SRl9HUElPVEUtPkNPTkZJR1tpZHhdID0gMDsNCit9DQorI2VuZGlmIC8vU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorLyoqIEB9ICovDQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9udm1jLmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDc1NzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgKkBmaWxlDQorICpAYnJpZWYgTk1WQyBkcml2ZXIgaW1wbGVtZW50YXRpb24NCisgKi8NCisNCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAibnJmX252bWMuaCINCisNCisNCit2b2lkIG5yZl9udm1jX3BhZ2VfZXJhc2UodWludDMyX3QgYWRkcmVzcykNCit7DQorICAgIC8vIEVuYWJsZSBlcmFzZS4NCisgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9FZW47DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgLy8gRXJhc2UgdGhlIHBhZ2UNCisgICAgTlJGX05WTUMtPkVSQVNFUEFHRSA9IGFkZHJlc3M7DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9SZW47DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCit9DQorDQorDQordm9pZCBucmZfbnZtY193cml0ZV9ieXRlKHVpbnQzMl90IGFkZHJlc3MsIHVpbnQ4X3QgdmFsdWUpDQorew0KKyAgICB1aW50MzJfdCBieXRlX3NoaWZ0ID0gYWRkcmVzcyAmICh1aW50MzJfdCkweDAzOw0KKyAgICB1aW50MzJfdCBhZGRyZXNzMzIgPSBhZGRyZXNzICYgfmJ5dGVfc2hpZnQ7IC8vIEFkZHJlc3MgdG8gdGhlIHdvcmQgdGhpcyBieXRlIGlzIGluLg0KKyAgICB1aW50MzJfdCB2YWx1ZTMyID0gKCoodWludDMyX3QgKilhZGRyZXNzMzIgJiB+KCh1aW50MzJfdCkweEZGIDw8IChieXRlX3NoaWZ0IDw8ICh1aW50MzJfdCkzKSkpOw0KKyAgICB2YWx1ZTMyID0gdmFsdWUzMiArICgodWludDMyX3QpdmFsdWUgPDwgKGJ5dGVfc2hpZnQgPDwgMykpOw0KKw0KKyAgICAvLyBFbmFibGUgd3JpdGUuDQorICAgIE5SRl9OVk1DLT5DT05GSUcgPSAoTlZNQ19DT05GSUdfV0VOX1dlbiA8PCBOVk1DX0NPTkZJR19XRU5fUG9zKTsNCisNCisgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpDQorICAgIHsNCisgICAgfQ0KKw0KKyAgICAqKHVpbnQzMl90ICopYWRkcmVzczMyID0gdmFsdWUzMjsNCisNCisgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpDQorICAgIHsNCisgICAgfQ0KKw0KKyAgICBOUkZfTlZNQy0+Q09ORklHID0gKE5WTUNfQ09ORklHX1dFTl9SZW4gPDwgTlZNQ19DT05GSUdfV0VOX1Bvcyk7DQorICAgIHsNCisgICAgfQ0KK30NCisNCit2b2lkIG5yZl9udm1jX3dyaXRlX3dvcmQodWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgdmFsdWUpDQorew0KKyAgICAvLyBFbmFibGUgd3JpdGUuDQorICAgIE5SRl9OVk1DLT5DT05GSUcgPSBOVk1DX0NPTkZJR19XRU5fV2VuOw0KKw0KKyAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgew0KKyAgICB9DQorDQorICAgICoodWludDMyX3QgKilhZGRyZXNzID0gdmFsdWU7DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9SZW47DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCit9DQorDQordm9pZCBucmZfbnZtY193cml0ZV9ieXRlcyh1aW50MzJfdCBhZGRyZXNzLCBjb25zdCB1aW50OF90ICpzcmMsIHVpbnQzMl90IG51bV9ieXRlcykNCit7DQorICAgIHVpbnQzMl90IGk7DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnl0ZXM7IGkrKykNCisgICAgew0KKyAgICAgICAgbnJmX252bWNfd3JpdGVfYnl0ZShhZGRyZXNzICsgaSwgc3JjW2ldKTsNCisgICAgfQ0KK30NCisNCit2b2lkIG5yZl9udm1jX3dyaXRlX3dvcmRzKHVpbnQzMl90IGFkZHJlc3MsIGNvbnN0IHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IG51bV93b3JkcykNCit7DQorICAgIHVpbnQzMl90IGk7DQorDQorICAgIC8vIEVuYWJsZSB3cml0ZS4NCisgICAgTlJGX05WTUMtPkNPTkZJRyA9IE5WTUNfQ09ORklHX1dFTl9XZW47DQorDQorICAgIHdoaWxlIChOUkZfTlZNQy0+UkVBRFkgPT0gTlZNQ19SRUFEWV9SRUFEWV9CdXN5KQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgZm9yIChpID0gMDsgaSA8IG51bV93b3JkczsgaSsrKQ0KKyAgICB7DQorICAgICAgICAoKHVpbnQzMl90ICopYWRkcmVzcylbaV0gPSBzcmNbaV07DQorDQorICAgICAgICB3aGlsZSAoTlJGX05WTUMtPlJFQURZID09IE5WTUNfUkVBRFlfUkVBRFlfQnVzeSkNCisgICAgICAgIHsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBOUkZfTlZNQy0+Q09ORklHID0gTlZNQ19DT05GSUdfV0VOX1JlbjsNCisNCisgICAgd2hpbGUgKE5SRl9OVk1DLT5SRUFEWSA9PSBOVk1DX1JFQURZX1JFQURZX0J1c3kpDQorICAgIHsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfbnZtYy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX252bWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmFmZTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX252bWMuaApAQCAtMCwwICsxLDExNCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICogQGZpbGUNCisgKiBAYnJpZWYgTk1WQyBkcml2ZXIgQVBJLg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX05WTUNfSF9fDQorI2RlZmluZSBOUkZfTlZNQ19IX18NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9udm1jIE5vbi12b2xhdGlsZSBtZW1vcnkgY29udHJvbGxlcg0KKyAqIEB7DQorICogQGluZ3JvdXAgbnJmX2RyaXZlcnMNCisgKiBAYnJpZWYgRHJpdmVyIGZvciB0aGUgTlZNQyBwZXJpcGhlcmFsLg0KKyAqDQorICogVGhpcyBkcml2ZXIgYWxsb3dzIHdyaXRpbmcgdG8gdGhlIG5vbi12b2xhdGlsZSBtZW1vcnkgKE5WTSkgcmVnaW9ucw0KKyAqIG9mIHRoZSBjaGlwLiBJbiBvcmRlciB0byB3cml0ZSB0byBOVk0gdGhlIGNvbnRyb2xsZXIgbXVzdCBiZSBwb3dlcmVkDQorICogb24gYW5kIHRoZSByZWxldmFudCBwYWdlIG11c3QgYmUgZXJhc2VkLg0KKyAqDQorICovDQorDQorDQorLyoqDQorICogQGJyaWVmIEVyYXNlIGEgcGFnZSBpbiBmbGFzaC4gVGhpcyBpcyByZXF1aXJlZCBiZWZvcmUgd3JpdGluZyB0byBhbnkNCisgKiBhZGRyZXNzIGluIHRoZSBwYWdlLg0KKyAqDQorICogQHBhcmFtIGFkZHJlc3MgU3RhcnQgYWRkcmVzcyBvZiB0aGUgcGFnZS4NCisgKi8NCit2b2lkIG5yZl9udm1jX3BhZ2VfZXJhc2UodWludDMyX3QgYWRkcmVzcyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFdyaXRlIGEgc2luZ2xlIGJ5dGUgdG8gZmxhc2guDQorICoNCisgKiBUaGUgZnVuY3Rpb24gcmVhZHMgdGhlIHdvcmQgY29udGFpbmluZyB0aGUgYnl0ZSwgYW5kIHRoZW4NCisgKiByZXdyaXRlcyB0aGUgZW50aXJlIHdvcmQuDQorICoNCisgKiBAcGFyYW0gYWRkcmVzcyBBZGRyZXNzIHRvIHdyaXRlIHRvLg0KKyAqIEBwYXJhbSB2YWx1ZSAgIFZhbHVlIHRvIHdyaXRlLg0KKyAqLw0KK3ZvaWQgbnJmX252bWNfd3JpdGVfYnl0ZSh1aW50MzJfdCBhZGRyZXNzICwgdWludDhfdCB2YWx1ZSk7DQorDQorDQorLyoqDQorICogQGJyaWVmIFdyaXRlIGEgMzItYml0IHdvcmQgdG8gZmxhc2guDQorICogQHBhcmFtIGFkZHJlc3MgQWRkcmVzcyB0byB3cml0ZSB0by4NCisgKiBAcGFyYW0gdmFsdWUgICBWYWx1ZSB0byB3cml0ZS4NCisgKi8NCit2b2lkIG5yZl9udm1jX3dyaXRlX3dvcmQodWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgdmFsdWUpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBXcml0ZSBjb25zZWN1dGl2ZSBieXRlcyB0byBmbGFzaC4NCisgKg0KKyAqIEBwYXJhbSBhZGRyZXNzICAgQWRkcmVzcyB0byB3cml0ZSB0by4NCisgKiBAcGFyYW0gc3JjICAgICAgIFBvaW50ZXIgdG8gZGF0YSB0byBjb3B5IGZyb20uDQorICogQHBhcmFtIG51bV9ieXRlcyBOdW1iZXIgb2YgYnl0ZXMgaW4gc3JjIHRvIHdyaXRlLg0KKyAqLw0KK3ZvaWQgbnJmX252bWNfd3JpdGVfYnl0ZXModWludDMyX3QgIGFkZHJlc3MsIGNvbnN0IHVpbnQ4X3QgKnNyYywgdWludDMyX3QgbnVtX2J5dGVzKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYgV3JpdGUgY29uc2VjdXRpdmUgd29yZHMgdG8gZmxhc2guDQorICoNCisgKiBAcGFyYW0gYWRkcmVzcyAgIEFkZHJlc3MgdG8gd3JpdGUgdG8uDQorICogQHBhcmFtIHNyYyAgICAgICBQb2ludGVyIHRvIGRhdGEgdG8gY29weSBmcm9tLg0KKyAqIEBwYXJhbSBudW1fd29yZHMgTnVtYmVyIG9mIGJ5dGVzIGluIHNyYyB0byB3cml0ZS4NCisgKi8NCit2b2lkIG5yZl9udm1jX3dyaXRlX3dvcmRzKHVpbnQzMl90IGFkZHJlc3MsIGNvbnN0IHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IG51bV93b3Jkcyk7DQorDQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvLyBOUkZfTlZNQ19IX18NCisvKiogQH0gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcGVyaXBoZXJhbHMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9wZXJpcGhlcmFscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MzM5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcGVyaXBoZXJhbHMuaApAQCAtMCwwICsxLDYwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfUEVSSVBIRVJBTFNfSA0KKyNkZWZpbmUgTlJGX1BFUklQSEVSQUxTX0gNCisNCisvKmxpbnQgKytmbGIgIkVudGVyIGxpYnJhcnkgcmVnaW9uICovDQorDQorI2lmZGVmIE5SRjUxNDIyDQorI2luY2x1ZGUgIm5yZjUxNDIyX3BlcmlwaGVyYWxzLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIE5SRjUxODAyDQorI2luY2x1ZGUgIm5yZjUxODAyX3BlcmlwaGVyYWxzLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIE5SRjUxODIyDQorI2luY2x1ZGUgIm5yZjUxODIyX3BlcmlwaGVyYWxzLmgiDQorI2VuZGlmDQorDQorI2lmZGVmIE5SRjUyODMyX1hYQUENCisjaW5jbHVkZSAibnJmNTI4MzJfcGVyaXBoZXJhbHMuaCINCisjZW5kaWYNCisNCisjaWZkZWYgTlJGNTI4NDBfWFhBQQ0KKyNpbmNsdWRlICJucmY1Mjg0MF9wZXJpcGhlcmFscy5oIg0KKyNlbmRpZg0KKw0KKw0KKy8qbGludCAtLWZsYiAiTGVhdmUgbGlicmFyeSByZWdpb24iICovDQorDQorI2VuZGlmIC8qIE5SRl9QRVJJUEhFUkFMU19IICovDQorDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BwaS5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3BwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjlhMTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcHBpLmgKQEAgLTAsMCArMSw0MzAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNiwgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgTlJGX1BQSV9IX18NCisjZGVmaW5lIE5SRl9QUElfSF9fDQorDQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAibnJmX3BlcmlwaGVyYWxzLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9wcGlfaGFsIFBQSSBIQUwNCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9wcGkNCisgKiBAYnJpZWYgSGFyZHdhcmUgYWNjZXNzIGxheWVyIGZvciBzZXR0aW5nIHVwIFByb2dyYW1tYWJsZSBQZXJpcGhlcmFsIEludGVyY29ubmVjdCAoUFBJKSBjaGFubmVscy4NCisgKi8NCisNCisjZGVmaW5lIE5SRl9QUElfVEFTS19TRVQgICAgKDFVTCkNCisNCisvKioNCisgKiBAZW51bSBucmZfcHBpX2NoYW5uZWxfdA0KKyAqIEBicmllZiBQUEkgY2hhbm5lbHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUFBJX0NIQU5ORUwwICA9IFBQSV9DSEVOX0NIMF9Qb3MsICAvKio8IENoYW5uZWwgMC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMSAgPSBQUElfQ0hFTl9DSDFfUG9zLCAgLyoqPCBDaGFubmVsIDEuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDIgID0gUFBJX0NIRU5fQ0gyX1BvcywgIC8qKjwgQ2hhbm5lbCAyLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwzICA9IFBQSV9DSEVOX0NIM19Qb3MsICAvKio8IENoYW5uZWwgMy4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMNCAgPSBQUElfQ0hFTl9DSDRfUG9zLCAgLyoqPCBDaGFubmVsIDQuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDUgID0gUFBJX0NIRU5fQ0g1X1BvcywgIC8qKjwgQ2hhbm5lbCA1LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUw2ICA9IFBQSV9DSEVOX0NINl9Qb3MsICAvKio8IENoYW5uZWwgNi4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMNyAgPSBQUElfQ0hFTl9DSDdfUG9zLCAgLyoqPCBDaGFubmVsIDcuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDggID0gUFBJX0NIRU5fQ0g4X1BvcywgIC8qKjwgQ2hhbm5lbCA4LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUw5ICA9IFBQSV9DSEVOX0NIOV9Qb3MsICAvKio8IENoYW5uZWwgOS4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMTAgPSBQUElfQ0hFTl9DSDEwX1BvcywgLyoqPCBDaGFubmVsIDEwLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwxMSA9IFBQSV9DSEVOX0NIMTFfUG9zLCAvKio8IENoYW5uZWwgMTEuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDEyID0gUFBJX0NIRU5fQ0gxMl9Qb3MsIC8qKjwgQ2hhbm5lbCAxMi4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMTMgPSBQUElfQ0hFTl9DSDEzX1BvcywgLyoqPCBDaGFubmVsIDEzLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwxNCA9IFBQSV9DSEVOX0NIMTRfUG9zLCAvKio8IENoYW5uZWwgMTQuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDE1ID0gUFBJX0NIRU5fQ0gxNV9Qb3MsIC8qKjwgQ2hhbm5lbCAxNS4gKi8NCisjaWYgKFBQSV9DSF9OVU0gPiAxNikgfHwgZGVmaW5lZChfX1NES19ET1hZR0VOX18pDQorICAgIE5SRl9QUElfQ0hBTk5FTDE2ID0gUFBJX0NIRU5fQ0gxNl9Qb3MsIC8qKjwgQ2hhbm5lbCAxNi4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMTcgPSBQUElfQ0hFTl9DSDE3X1BvcywgLyoqPCBDaGFubmVsIDE3LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwxOCA9IFBQSV9DSEVOX0NIMThfUG9zLCAvKio8IENoYW5uZWwgMTguICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDE5ID0gUFBJX0NIRU5fQ0gxOV9Qb3MsIC8qKjwgQ2hhbm5lbCAxOS4gKi8NCisjZW5kaWYNCisgICAgTlJGX1BQSV9DSEFOTkVMMjAgPSBQUElfQ0hFTl9DSDIwX1BvcywgLyoqPCBDaGFubmVsIDIwLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyMSA9IFBQSV9DSEVOX0NIMjFfUG9zLCAvKio8IENoYW5uZWwgMjEuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDIyID0gUFBJX0NIRU5fQ0gyMl9Qb3MsIC8qKjwgQ2hhbm5lbCAyMi4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMjMgPSBQUElfQ0hFTl9DSDIzX1BvcywgLyoqPCBDaGFubmVsIDIzLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyNCA9IFBQSV9DSEVOX0NIMjRfUG9zLCAvKio8IENoYW5uZWwgMjQuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDI1ID0gUFBJX0NIRU5fQ0gyNV9Qb3MsIC8qKjwgQ2hhbm5lbCAyNS4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMjYgPSBQUElfQ0hFTl9DSDI2X1BvcywgLyoqPCBDaGFubmVsIDI2LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwyNyA9IFBQSV9DSEVOX0NIMjdfUG9zLCAvKio8IENoYW5uZWwgMjcuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDI4ID0gUFBJX0NIRU5fQ0gyOF9Qb3MsIC8qKjwgQ2hhbm5lbCAyOC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMMjkgPSBQUElfQ0hFTl9DSDI5X1BvcywgLyoqPCBDaGFubmVsIDI5LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUwzMCA9IFBQSV9DSEVOX0NIMzBfUG9zLCAvKio8IENoYW5uZWwgMzAuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTDMxID0gUFBJX0NIRU5fQ0gzMV9Qb3MgIC8qKjwgQ2hhbm5lbCAzMS4gKi8NCit9IG5yZl9wcGlfY2hhbm5lbF90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9wcGlfY2hhbm5lbF9ncm91cF90DQorICogQGJyaWVmIFBQSSBjaGFubmVsIGdyb3Vwcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9QUElfQ0hBTk5FTF9HUk9VUDAgPSAwLCAvKio8IENoYW5uZWwgZ3JvdXAgMC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMX0dST1VQMSA9IDEsIC8qKjwgQ2hhbm5lbCBncm91cCAxLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUxfR1JPVVAyID0gMiwgLyoqPCBDaGFubmVsIGdyb3VwIDIuICovDQorICAgIE5SRl9QUElfQ0hBTk5FTF9HUk9VUDMgPSAzLCAvKio8IENoYW5uZWwgZ3JvdXAgMy4gKi8NCisjaWYgKFBQSV9HUk9VUF9OVU0gPiA0KSB8fCBkZWZpbmVkKF9fU0RLX0RPWFlHRU5fXykNCisgICAgTlJGX1BQSV9DSEFOTkVMX0dST1VQNCA9IDQsIC8qKjwgQ2hhbm5lbCBncm91cCA0LiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUxfR1JPVVA1ID0gNSAgLyoqPCBDaGFubmVsIGdyb3VwIDUuICovDQorI2VuZGlmDQorfSBucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcHBpX2NoYW5uZWxfaW5jbHVkZV90DQorICogQGJyaWVmIERlZmluaXRpb24gb2Ygd2hpY2ggUFBJIGNoYW5uZWxzIGJlbG9uZyB0byBhIGdyb3VwLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1BQSV9DSEFOTkVMX0VYQ0xVREUgPSBQUElfQ0hHX0NIMF9FeGNsdWRlZCwgLyoqPCBDaGFubmVsIGV4Y2x1ZGVkIGZyb20gYSBncm91cC4gKi8NCisgICAgTlJGX1BQSV9DSEFOTkVMX0lOQ0xVREUgPSBQUElfQ0hHX0NIMF9JbmNsdWRlZCAgLyoqPCBDaGFubmVsIGluY2x1ZGVkIGluIGEgZ3JvdXAuICovDQorfSBucmZfcHBpX2NoYW5uZWxfaW5jbHVkZV90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9wcGlfY2hhbm5lbF9lbmFibGVfdA0KKyAqIEBicmllZiBEZWZpbml0aW9uIGlmIGEgUFBJIGNoYW5uZWwgaXMgZW5hYmxlZC4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9QUElfQ0hBTk5FTF9ESVNBQkxFRCA9IFBQSV9DSEVOX0NIMF9EaXNhYmxlZCwgLyoqPCBDaGFubmVsIGRpc2FibGVkLiAqLw0KKyAgICBOUkZfUFBJX0NIQU5ORUxfRU5BQkxFRCAgPSBQUElfQ0hFTl9DSDBfRW5hYmxlZCAgIC8qKjwgQ2hhbm5lbCBlbmFibGVkLiAqLw0KK30gbnJmX3BwaV9jaGFubmVsX2VuYWJsZV90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9wcGlfdGFza190DQorICogQGJyaWVmIFBQSSB0YXNrcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHMF9FTiAgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1swXS5FTiksICAvKio8IFRhc2sgZm9yIGVuYWJsaW5nIGNoYW5uZWwgZ3JvdXAgMCAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHMF9ESVMgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1swXS5ESVMpLCAvKio8IFRhc2sgZm9yIGRpc2FibGluZyBjaGFubmVsIGdyb3VwIDAgKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzFfRU4gID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbMV0uRU4pLCAgLyoqPCBUYXNrIGZvciBlbmFibGluZyBjaGFubmVsIGdyb3VwIDEgKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzFfRElTID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbMV0uRElTKSwgLyoqPCBUYXNrIGZvciBkaXNhYmxpbmcgY2hhbm5lbCBncm91cCAxICovDQorICAgIE5SRl9QUElfVEFTS19DSEcyX0VOICA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzJdLkVOKSwgIC8qKjwgVGFzayBmb3IgZW5hYmxpbmcgY2hhbm5lbCBncm91cCAyICovDQorICAgIE5SRl9QUElfVEFTS19DSEcyX0RJUyA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzJdLkRJUyksIC8qKjwgVGFzayBmb3IgZGlzYWJsaW5nIGNoYW5uZWwgZ3JvdXAgMiAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHM19FTiAgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1szXS5FTiksICAvKio8IFRhc2sgZm9yIGVuYWJsaW5nIGNoYW5uZWwgZ3JvdXAgMyAqLw0KKyAgICBOUkZfUFBJX1RBU0tfQ0hHM19ESVMgPSBvZmZzZXRvZihOUkZfUFBJX1R5cGUsIFRBU0tTX0NIR1szXS5ESVMpLCAvKio8IFRhc2sgZm9yIGRpc2FibGluZyBjaGFubmVsIGdyb3VwIDMgKi8NCisjaWYgKFBQSV9HUk9VUF9OVU0gPiA0KSB8fCBkZWZpbmVkKF9fU0RLX0RPWFlHRU5fXykNCisgICAgTlJGX1BQSV9UQVNLX0NIRzRfRU4gID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbNF0uRU4pLCAgLyoqPCBUYXNrIGZvciBlbmFibGluZyBjaGFubmVsIGdyb3VwIDQgKi8NCisgICAgTlJGX1BQSV9UQVNLX0NIRzRfRElTID0gb2Zmc2V0b2YoTlJGX1BQSV9UeXBlLCBUQVNLU19DSEdbNF0uRElTKSwgLyoqPCBUYXNrIGZvciBkaXNhYmxpbmcgY2hhbm5lbCBncm91cCA0ICovDQorICAgIE5SRl9QUElfVEFTS19DSEc1X0VOICA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzVdLkVOKSwgIC8qKjwgVGFzayBmb3IgZW5hYmxpbmcgY2hhbm5lbCBncm91cCA1ICovDQorICAgIE5SRl9QUElfVEFTS19DSEc1X0RJUyA9IG9mZnNldG9mKE5SRl9QUElfVHlwZSwgVEFTS1NfQ0hHWzVdLkRJUykgIC8qKjwgVGFzayBmb3IgZGlzYWJsaW5nIGNoYW5uZWwgZ3JvdXAgNSAqLw0KKyNlbmRpZg0KKyAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX3BwaV90YXNrX3Q7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBhIGdpdmVuIFBQSSBjaGFubmVsLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9ubHkgb25lIGNoYW5uZWwuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWwgQ2hhbm5lbCB0byBlbmFibGUuDQorICoNCisgKiAgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2NoYW5uZWxfZW5hYmxlKG5yZl9wcGlfY2hhbm5lbF90IGNoYW5uZWwpDQorew0KKyAgICBOUkZfUFBJLT5DSEVOU0VUID0gUFBJX0NIRU5TRVRfQ0gwX1NldCA8PCAoKHVpbnQzMl90KSBjaGFubmVsKTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNhYmxpbmcgYSBnaXZlbiBQUEkgY2hhbm5lbC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgb25seSBvbmUgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbCBDaGFubmVsIHRvIGRpc2FibGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsX2Rpc2FibGUobnJmX3BwaV9jaGFubmVsX3QgY2hhbm5lbCkNCit7DQorICAgIE5SRl9QUEktPkNIRU5DTFIgPSBQUElfQ0hFTkNMUl9DSDBfQ2xlYXIgPDwgKCh1aW50MzJfdCkgY2hhbm5lbCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBnaXZlbiBQUEkgY2hhbm5lbCBpcyBlbmFibGVkLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBjaGVja3Mgb25seSBvbmUgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbCBDaGFubmVsIHRvIGNoZWNrLg0KKyAqDQorICogQHJldHZhbCAgICAgTlJGX1BQSV9DSEFOTkVMX0VOQUJMRUQgICAgIElmIHRoZSBjaGFubmVsIGlzIGVuYWJsZWQuDQorICogQHJldHZhbCAgICAgTlJGX1BQSV9DSEFOTkVMX0RJU0FCTEVEICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBlbmFibGVkLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIG5yZl9wcGlfY2hhbm5lbF9lbmFibGVfdCBucmZfcHBpX2NoYW5uZWxfZW5hYmxlX2dldChucmZfcHBpX2NoYW5uZWxfdCBjaGFubmVsKQ0KK3sNCisgICAgaWYgKE5SRl9QUEktPkNIRU4gJiAoUFBJX0NIRU5fQ0gwX01zayA8PCAoKHVpbnQzMl90KSBjaGFubmVsKSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiBOUkZfUFBJX0NIQU5ORUxfRU5BQkxFRDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiBOUkZfUFBJX0NIQU5ORUxfRElTQUJMRUQ7DQorICAgIH0NCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNhYmxpbmcgYWxsIFBQSSBjaGFubmVscy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2NoYW5uZWxfZGlzYWJsZV9hbGwodm9pZCkNCit7DQorICAgIE5SRl9QUEktPkNIRU5DTFIgPSAoKHVpbnQzMl90KTB4RkZGRkZGRkZ1TCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIG11bHRpcGxlIFBQSSBjaGFubmVscy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gbWFzayBDaGFubmVsIG1hc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsc19kaXNhYmxlKHVpbnQzMl90IG1hc2spDQorew0KKyAgICBOUkZfUFBJLT5DSEVOQ0xSID0gbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHVwIGV2ZW50IGFuZCB0YXNrIGVuZHBvaW50cyBmb3IgYSBnaXZlbiBQUEkgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZWVwIEV2ZW50IHJlZ2lzdGVyIGFkZHJlc3MuDQorICoNCisgKiBAcGFyYW1baW5dIHRlcCBUYXNrIHJlZ2lzdGVyIGFkZHJlc3MuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWwgQ2hhbm5lbCB0byB3aGljaCB0aGUgZ2l2ZW4gZW5kcG9pbnRzIGFyZSBhc3NpZ25lZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2NoYW5uZWxfZW5kcG9pbnRfc2V0dXAobnJmX3BwaV9jaGFubmVsX3QgY2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgZWVwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICB0ZXApDQorew0KKyAgICBOUkZfUFBJLT5DSFsodWludDMyX3QpIGNoYW5uZWxdLkVFUCA9IGVlcDsNCisgICAgTlJGX1BQSS0+Q0hbKHVpbnQzMl90KSBjaGFubmVsXS5URVAgPSB0ZXA7DQorfQ0KKw0KKyNpZiBkZWZpbmVkKFBQSV9GRUFUVVJFX0ZPUktTX1BSRVNFTlQpIHx8IGRlZmluZWQoX19TREtfRE9YWUdFTl9fKQ0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyB1cCB0YXNrIGVuZHBvaW50IGZvciBhIGdpdmVuIFBQSSBmb3JrLg0KKyAqDQorICogQHBhcmFtW2luXSBmb3JrX3RlcCBUYXNrIHJlZ2lzdGVyIGFkZHJlc3MuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWwgQ2hhbm5lbCB0byB3aGljaCB0aGUgZ2l2ZW4gZm9yayBlbmRwb2ludCBpcyBhc3NpZ25lZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2ZvcmtfZW5kcG9pbnRfc2V0dXAobnJmX3BwaV9jaGFubmVsX3QgY2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgZm9ya190ZXApDQorew0KKyAgICBOUkZfUFBJLT5GT1JLWyh1aW50MzJfdCkgY2hhbm5lbF0uVEVQID0gZm9ya190ZXA7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyB1cCBldmVudCBhbmQgdGFzayBlbmRwb2ludHMgZm9yIGEgZ2l2ZW4gUFBJIGNoYW5uZWwgYW5kIGZvcmsuDQorICoNCisgKiBAcGFyYW1baW5dIGVlcCBFdmVudCByZWdpc3RlciBhZGRyZXNzLg0KKyAqDQorICogQHBhcmFtW2luXSB0ZXAgVGFzayByZWdpc3RlciBhZGRyZXNzLg0KKyAqDQorICogQHBhcmFtW2luXSBmb3JrX3RlcCBGb3JrIHRhc2sgcmVnaXN0ZXIgYWRkcmVzcyAocmVnaXN0ZXIgdmFsdWUpLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsIENoYW5uZWwgdG8gd2hpY2ggdGhlIGdpdmVuIGVuZHBvaW50cyBhcmUgYXNzaWduZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsX2FuZF9mb3JrX2VuZHBvaW50X3NldHVwKG5yZl9wcGlfY2hhbm5lbF90IGNoYW5uZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgIGVlcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgdGVwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICBmb3JrX3RlcCkNCit7DQorICAgIG5yZl9wcGlfY2hhbm5lbF9lbmRwb2ludF9zZXR1cChjaGFubmVsLCBlZXAsIHRlcCk7DQorICAgIG5yZl9wcGlfZm9ya19lbmRwb2ludF9zZXR1cChjaGFubmVsLCBmb3JrX3RlcCk7DQorfQ0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgaW5jbHVkaW5nIGEgUFBJIGNoYW5uZWwgaW4gYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBhZGRzIG9ubHkgb25lIGNoYW5uZWwgdG8gdGhlIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsICAgICAgIENoYW5uZWwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsX2dyb3VwIENoYW5uZWwgZ3JvdXAuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2NoYW5uZWxfaW5jbHVkZV9pbl9ncm91cChucmZfcHBpX2NoYW5uZWxfdCAgICAgICBjaGFubmVsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl9wcGlfY2hhbm5lbF9ncm91cF90IGNoYW5uZWxfZ3JvdXApDQorew0KKyAgICBOUkZfUFBJLT5DSEdbKHVpbnQzMl90KSBjaGFubmVsX2dyb3VwXSA9DQorICAgICAgICBOUkZfUFBJLT5DSEdbKHVpbnQzMl90KSBjaGFubmVsX2dyb3VwXSB8IChQUElfQ0hHX0NIMF9JbmNsdWRlZCA8PCAoKHVpbnQzMl90KSAgY2hhbm5lbCkpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGluY2x1ZGluZyBtdWx0aXBsZSBQUEkgY2hhbm5lbHMgaW4gYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBhZGRzIGFsbCBzcGVjaWZpZWQgY2hhbm5lbHMgdG8gdGhlIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsX21hc2sgIENoYW5uZWxzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9ncm91cCBDaGFubmVsIGdyb3VwLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsc19pbmNsdWRlX2luX2dyb3VwKHVpbnQzMl90ICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFzaywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgY2hhbm5lbF9ncm91cCkNCit7DQorICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGNoYW5uZWxfZ3JvdXBdID0NCisgICAgICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGNoYW5uZWxfZ3JvdXBdIHwgKGNoYW5uZWxfbWFzayk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVtb3ZpbmcgYSBQUEkgY2hhbm5lbCBmcm9tIGEgY2hhbm5lbCBncm91cC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBvbmx5IG9uZSBjaGFubmVsIGZyb20gdGhlIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsICAgICAgIENoYW5uZWwgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9ncm91cCBDaGFubmVsIGdyb3VwLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbF9yZW1vdmVfZnJvbV9ncm91cChucmZfcHBpX2NoYW5uZWxfdCAgICAgICBjaGFubmVsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdCBjaGFubmVsX2dyb3VwKQ0KK3sNCisgICAgTlJGX1BQSS0+Q0hHWyh1aW50MzJfdCkgY2hhbm5lbF9ncm91cF0gPQ0KKyAgICAgICAgTlJGX1BQSS0+Q0hHWyh1aW50MzJfdCkgY2hhbm5lbF9ncm91cF0gJiB+KFBQSV9DSEdfQ0gwX0luY2x1ZGVkIDw8ICgodWludDMyX3QpIGNoYW5uZWwpKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZW1vdmluZyBtdWx0aXBsZSBQUEkgY2hhbm5lbHMgZnJvbSBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHNwZWNpZmllZCBjaGFubmVscyBmcm9tIHRoZSBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9tYXNrICBDaGFubmVscyB0byBiZSByZW1vdmVkIGZyb20gdGhlIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBjaGFubmVsX2dyb3VwIENoYW5uZWwgZ3JvdXAuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9jaGFubmVsc19yZW1vdmVfZnJvbV9ncm91cCh1aW50MzJfdCAgICAgICAgICAgICAgICBjaGFubmVsX21hc2ssDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdCBjaGFubmVsX2dyb3VwKQ0KK3sNCisgICAgTlJGX1BQSS0+Q0hHWyh1aW50MzJfdCkgY2hhbm5lbF9ncm91cF0gPQ0KKyAgICAgICAgTlJGX1BQSS0+Q0hHWyh1aW50MzJfdCkgY2hhbm5lbF9ncm91cF0gJiB+KGNoYW5uZWxfbWFzayk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVtb3ZpbmcgYWxsIFBQSSBjaGFubmVscyBmcm9tIGEgY2hhbm5lbCBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZ3JvdXAgQ2hhbm5lbCBncm91cC4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9wcGlfY2hhbm5lbF9ncm91cF9jbGVhcihucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdCBncm91cCkNCit7DQorICAgIE5SRl9QUEktPkNIR1sodWludDMyX3QpIGdyb3VwXSA9IDA7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgYSBjaGFubmVsIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cCBDaGFubmVsIGdyb3VwLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3BwaV9ncm91cF9lbmFibGUobnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgZ3JvdXApDQorew0KKyAgICBOUkZfUFBJLT5UQVNLU19DSEdbKHVpbnQzMl90KSBncm91cF0uRU4gPSBOUkZfUFBJX1RBU0tfU0VUOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2FibGluZyBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGdyb3VwIENoYW5uZWwgZ3JvdXAuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX2dyb3VwX2Rpc2FibGUobnJmX3BwaV9jaGFubmVsX2dyb3VwX3QgZ3JvdXApDQorew0KKyAgICBOUkZfUFBJLT5UQVNLU19DSEdbKHVpbnQzMl90KSBncm91cF0uRElTID0gTlJGX1BQSV9UQVNLX1NFVDsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgUFBJIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dIHBwaV90YXNrIFBQSSB0YXNrIHRvIHNldC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcHBpX3Rhc2tfdHJpZ2dlcihucmZfcHBpX3Rhc2tfdCBwcGlfdGFzaykNCit7DQorICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopICgodWludDhfdCAqKSBOUkZfUFBJX0JBU0UgKyAodWludDMyX3QpIHBwaV90YXNrKSkgPSBOUkZfUFBJX1RBU0tfU0VUOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIFBQSSB0YXNrIHJlZ2lzdGVyLg0KKyAqDQorICogQHBhcmFtW2luXSBwcGlfdGFzayBQUEkgdGFzay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKiBucmZfcHBpX3Rhc2tfYWRkcmVzc19nZXQobnJmX3BwaV90YXNrX3QgcHBpX3Rhc2spDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90ICopICgodWludDhfdCAqKSBOUkZfUFBJX0JBU0UgKyAodWludDMyX3QpIHBwaV90YXNrKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIFBQSSBlbmFibGUgdGFzayBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGdyb3VwICBQUEkgZ3JvdXAuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICogbnJmX3BwaV90YXNrX2dyb3VwX2VuYWJsZV9hZGRyZXNzX2dldChucmZfcHBpX2NoYW5uZWxfZ3JvdXBfdCBncm91cCkNCit7DQorICAgIHJldHVybiAodWludDMyX3QgKikgJk5SRl9QUEktPlRBU0tTX0NIR1sodWludDMyX3QpIGdyb3VwXS5FTjsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIFBQSSBkaXNhYmxlIHRhc2sgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGdyb3VwLg0KKyAqDQorICogQHBhcmFtW2luXSBncm91cCAgUFBJIGdyb3VwLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCAqIG5yZl9wcGlfdGFza19ncm91cF9kaXNhYmxlX2FkZHJlc3NfZ2V0KG5yZl9wcGlfY2hhbm5lbF9ncm91cF90IGdyb3VwKQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCAqKSAmTlJGX1BQSS0+VEFTS1NfQ0hHWyh1aW50MzJfdCkgZ3JvdXBdLkRJUzsNCit9DQorDQorDQorLyoqDQorICpAfQ0KKyAqKi8NCisNCisvKmxpbnQgLS1mbGIgIkxlYXZlIGxpYnJhcnkgcmVnaW9uIiAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLy8gTlJGX1BQSV9IX18NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcmFkaW8uaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9yYWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDI0NWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcmFkaW8uaApAQCAtMCwwICsxLDYzMCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICogQGZpbGUNCisgKiBAYnJpZWYgUkFESU8gSEFMIEFQSS4NCisgKi8NCisNCisjaWZuZGVmIE5SRl9SQURJT19IX18NCisjZGVmaW5lIE5SRl9SQURJT19IX18NCisvKioNCisgKiBAZGVmZ3JvdXAgbnJmX3JhZGlvX2hhbCBSQURJTyBIQUwNCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9yYWRpbw0KKyAqIEBicmllZiBIYXJkd2FyZSBhY2Nlc3MgbGF5ZXIgZm9yIG1hbmFnaW5nIHRoZSByYWRpbyAoUkFESU8pLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSAibnJmLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmluZSBOUkZfUkFESU9fVEFTS19TRVQgICAgKDFVTCkNCisjZGVmaW5lIE5SRl9SQURJT19FVkVOVF9DTEVBUiAoMFVMKQ0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb190YXNrX3QNCisgKiBAYnJpZWYgUkFESU8gdGFza3MuDQorICovDQordHlwZWRlZiBlbnVtIC8qbGludCAtc2F2ZSAtZTMwIC1lc3ltKDYyOCxfX0lOVEFERFJfXykgKi8NCit7DQorICAgIE5SRl9SQURJT19UQVNLX1RYRU4gICAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBUQVNLU19UWEVOKSwgICAgICAvKio8IEVuYWJsZSByYWRpbyB0cmFuc21pdHRlci4gKi8NCisgICAgTlJGX1JBRElPX1RBU0tfUlhFTiAgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIFRBU0tTX1JYRU4pLCAgICAgIC8qKjwgRW5hYmxlIHJhZGlvIHJlY2VpdmVyLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19TVEFSVCAgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfU1RBUlQpLCAgICAgLyoqPCBTdGFydCByYWRpbyB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19TVE9QICAgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfU1RPUCksICAgICAgLyoqPCBTdG9wIHJhZGlvIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uICovDQorICAgIE5SRl9SQURJT19UQVNLX0RJU0FCTEUgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBUQVNLU19ESVNBQkxFKSwgICAvKio8IERpc2FibGUgcmFkaW8gdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19DQ0FTVEFSVCAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfQ0NBU1RBUlQpLCAgLyoqPCBTdGFydCBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgcHJvY2VkdXJlLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19DQ0FTVE9QICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfQ0NBU1RPUCksICAgLyoqPCBTdG9wIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCBwcm9jZWR1cmUuICovDQorICAgIE5SRl9SQURJT19UQVNLX0VEU1RBUlQgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBUQVNLU19FRFNUQVJUKSwgICAvKio8IFN0YXJ0IEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlLiAqLw0KKyAgICBOUkZfUkFESU9fVEFTS19SU1NJU1RBUlQgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgVEFTS1NfUlNTSVNUQVJUKSwgLyoqPCBTdGFydCB0aGUgUlNTSSBhbmQgdGFrZSBvbmUgc2luZ2xlIHNhbXBsZSBvZiByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGguICovCit9IG5yZl9yYWRpb190YXNrX3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGludCAtcmVzdG9yZSAqLw0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb19ldmVudF90DQorICogQGJyaWVmIFJBRElPIGV2ZW50cy4NCisgKi8NCit0eXBlZGVmIGVudW0gLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSAqLw0KK3sNCisgICAgTlJGX1JBRElPX0VWRU5UX1JFQURZICAgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX1JFQURZKSwgICAgICAvKio8IFJhZGlvIGhhcyByYW1wZWQgdXAgYW5kIGlzIHJlYWR5IHRvIGJlIHN0YXJ0ZWQuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9BRERSRVNTICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19BRERSRVNTKSwgICAgLyoqPCBBZGRyZXNzIHNlbnQgb3IgcmVjZWl2ZWQuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9FTkQgICAgICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19FTkQpLCAgICAgICAgLyoqPCBQYWNrZXQgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9ESVNBQkxFRCAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19ESVNBQkxFRCksICAgLyoqPCBSYWRpbyBoYXMgYmVlbiBkaXNhYmxlZC4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX0NSQ09LICAgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX0NSQ09LKSwgICAgICAvKio8IFBhY2tldCByZWNlaXZlZCB3aXRoIGNvcnJlY3QgQ1JDLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfQ1JDRVJST1IgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfQ1JDRVJST1IpLCAgIC8qKjwgUGFja2V0IHJlY2VpdmVkIHdpdGggaW5jb3JyZWN0IENSQy4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX0NDQUlETEUgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX0NDQUlETEUpLCAgICAvKio8IFdpcmVsZXNzIG1lZGl1bSBpcyBpZGxlLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfQ0NBQlVTWSAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfQ0NBQlVTWSksICAgIC8qKjwgV2lyZWxlc3MgbWVkaXVtIGlzIGJ1c3kuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9SU1NJRU5EICAgID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19SU1NJRU5EKSwgICAgLyoqPCBTYW1wbGluZyBvZiByZWNlaXZlIHNpZ25hbCBzdHJlbmd0aCBjb21wbGV0ZS4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX01IUk1BVENIICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX01IUk1BVENIKSwgICAvKio8IE1BQyBIZWFkZXIgbWF0Y2ggZm91bmQuICovDQorICAgIE5SRl9SQURJT19FVkVOVF9GUkFNRVNUQVJUID0gb2Zmc2V0b2YoTlJGX1JBRElPX1R5cGUsIEVWRU5UU19GUkFNRVNUQVJUKSwgLyoqPCBJRUVFIDgwMi4xNS40IGxlbmd0aCBmaWVsZCByZWNlaXZlZC4gKi8NCisgICAgTlJGX1JBRElPX0VWRU5UX0VERU5EICAgICAgPSBvZmZzZXRvZihOUkZfUkFESU9fVHlwZSwgRVZFTlRTX0VERU5EKSwgICAgICAvKio8IEVuZXJneSBEZXRlY3Rpb24gcHJvY2VkdXJlIGVuZGVkLiAqLw0KKyAgICBOUkZfUkFESU9fRVZFTlRfQkNNQVRDSCAgICA9IG9mZnNldG9mKE5SRl9SQURJT19UeXBlLCBFVkVOVFNfQkNNQVRDSCksICAgIC8qKjwgQml0IGNvdW50ZXIgcmVhY2hlZCBiaXQgY291bnQgdmFsdWUuICovDQorfSBucmZfcmFkaW9fZXZlbnRfdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypsaW50IC1yZXN0b3JlICovDQorDQorLyoqDQorICogQGVudW0gbnJmX3JhZGlvX2ludF9tYXNrX3QNCisgKiBAYnJpZWYgUkFESU8gaW50ZXJydXB0cy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9SQURJT19JTlRfUkVBRFlfTUFTSyAgICAgID0gUkFESU9fSU5URU5TRVRfUkVBRFlfTXNrLCAgICAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBSRUFEWSBldmVudC4gICovDQorICAgIE5SRl9SQURJT19JTlRfQUREUkVTU19NQVNLICAgID0gUkFESU9fSU5URU5TRVRfQUREUkVTU19Nc2ssICAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBBRERSRVNTIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0VORF9NQVNLICAgICAgICA9IFJBRElPX0lOVEVOU0VUX0VORF9Nc2ssICAgICAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gRU5EIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0RJU0FCTEVEX01BU0sgICA9IFJBRElPX0lOVEVOU0VUX0RJU0FCTEVEX01zaywgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gRElTQUJMRUQgZXZlbnQuICovDQorICAgIE5SRl9SQURJT19JTlRfQ1JDT0tfTUFTSyAgICAgID0gUkFESU9fSU5URU5TRVRfQ1JDT0tfTXNrLCAgICAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBDUkNPSyBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9DUkNFUlJPUl9NQVNLICAgPSBSQURJT19JTlRFTlNFVF9DUkNFUlJPUl9Nc2ssICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIENSQ0VSUk9SIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0NDQUlETEVfTUFTSyAgICA9IFJBRElPX0lOVEVOU0VUX0NDQUlETEVfTXNrLCAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gQ0NBSURMRSBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9DQ0FCVVNZX01BU0sgICAgPSBSQURJT19JTlRFTlNFVF9DQ0FCVVNZX01zaywgICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIENDQUJVU1kgZXZlbnQuICovDQorICAgIE5SRl9SQURJT19JTlRfUlNTSUVORF9NQVNLICAgID0gUkFESU9fSU5URU5TRVRfUlNTSUVORF9Nc2ssICAgIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBSU1NJRU5EIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0ZSQU1FU1RBUlRfTUFTSyA9IFJBRElPX0lOVEVOU0VUX0ZSQU1FU1RBUlRfTXNrLCAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gRlJBTUVTVEFSVCBldmVudC4gKi8NCisgICAgTlJGX1JBRElPX0lOVF9FREVORF9NQVNLICAgICAgPSBSQURJT19JTlRFTlNFVF9FREVORF9Nc2ssICAgICAgLyoqPCBNYXNrIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYW4gaW50ZXJydXB0IG9uIEVERU5EIGV2ZW50LiAqLw0KKyAgICBOUkZfUkFESU9fSU5UX0JDTUFUQ0hfTUFTSyAgICA9IFJBRElPX0lOVEVOU0VUX0JDTUFUQ0hfTXNrLCAgICAvKio8IE1hc2sgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhbiBpbnRlcnJ1cHQgb24gQkNNQVRDSCBldmVudC4gKi8NCit9IG5yZl9yYWRpb19pbnRfbWFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb19zaG9ydF9tYXNrX3QNCisgKiBAYnJpZWYgVHlwZXMgb2YgUkFESU8gc2hvcnRjdXRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JBRElPX1NIT1JUX1JFQURZX1NUQVJUX01BU0sgICAgICAgID0gUkFESU9fU0hPUlRTX1JFQURZX1NUQVJUX01zaywgICAgICAgIC8qKjwgTWFzayBmb3Igc2V0dGluZyBzaG9ydGN1dCBiZXR3ZWVuIEVWRU5UX1JFQURZIGFuZCBUQVNLX1NUQVJULiAqLw0KKyAgICBOUkZfUkFESU9fU0hPUlRfQUREUkVTU19SU1NJU1RBUlRfTUFTSyAgPSBSQURJT19TSE9SVFNfQUREUkVTU19SU1NJU1RBUlRfTXNrLCAgLyoqPCBNYXNrIGZvciBzZXR0aW5nIHNob3J0Y3V0IGJldHdlZW4gRVZFTlRfQUREUkVTUyBhbmQgVEFTS19SU1NJU1RBUlQuICovDQorICAgIE5SRl9SQURJT19TSE9SVF9FTkRfRElTQUJMRV9NQVNLICAgICAgICA9IFJBRElPX1NIT1JUU19FTkRfRElTQUJMRV9Nc2ssICAgICAgICAvKio8IE1hc2sgZm9yIHNldHRpbmcgc2hvcnRjdXQgYmV0d2VlbiBFVkVOVF9FTkQgYW5kIFRBU0tfRElTQUJMRS4gKi8NCisgICAgTlJGX1JBRElPX1NIT1JUX0VORF9TVEFSVF9NQVNLICAgICAgICAgID0gUkFESU9fU0hPUlRTX0VORF9TVEFSVF9Nc2ssICAgICAgICAgIC8qKjwgTWFzayBmb3Igc2V0dGluZyBzaG9ydGN1dCBiZXR3ZWVuIEVWRU5UX0VORCBhbmQgVEFTS19TVEFSVC4gKi8NCisgICAgTlJGX1JBRElPX1NIT1JUX0NDQUlETEVfVFhFTl9NQVNLICAgICAgID0gUkFESU9fU0hPUlRTX0NDQUlETEVfVFhFTl9Nc2ssICAgICAgIC8qKjwgTWFzayBmb3Igc2V0dGluZyBzaG9ydGN1dCBiZXR3ZWVuIEVWRU5UX0NDQUlETEUgYW5kIFRBU0tfVFhFTi4gKi8NCisgICAgTlJGX1JBRElPX1NIT1JUX0RJU0FCTEVEX1RYRU5fTUFTSyAgICAgID0gUkFESU9fU0hPUlRTX0RJU0FCTEVEX1RYRU5fTXNrLCAgICAgIC8qKjwgTWFzayBmb3Igc2V0dGluZyBzaG9ydGN1dCBiZXR3ZWVuIEVWRU5UX0RJU0FCTEVEIGFuZCBUQVNLX1RYRU4uICovDQorICAgIE5SRl9SQURJT19TSE9SVF9GUkFNRVNUQVJUX0JDU1RBUlRfTUFTSyA9IFJBRElPX1NIT1JUU19GUkFNRVNUQVJUX0JDU1RBUlRfTXNrLCAvKio8IE1hc2sgZm9yIHNldHRpbmcgc2hvcnRjdXQgYmV0d2VlbiBFVkVOVF9GUkFNRVNUQVJUIGFuZCBUQVNLX0JDU1RBUlQuICovDQorfSBucmZfcmFkaW9fc2hvcnRfbWFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb19jY2FfbW9kZV90DQorICogQGJyaWVmIFR5cGVzIG9mIFJBRElPIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCBtb2Rlcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9SQURJT19DQ0FfTU9ERV9FRCAgICAgICAgICAgICA9IFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9FZE1vZGUsICAgICAgICAgICAvKio8IEVuZXJneSBBYm92ZSBUaHJlc2hvbGQuIFdpbGwgcmVwb3J0IGJ1c3kgd2hlbmV2ZXIgZW5lcmd5IGlzIGRldGVjdGVkIGFib3ZlIHNldCB0aHJlc2hvbGQuICovDQorICAgIE5SRl9SQURJT19DQ0FfTU9ERV9DQVJSSUVSICAgICAgICA9IFJBRElPX0NDQUNUUkxfQ0NBTU9ERV9DYXJyaWVyTW9kZSwgICAgICAvKio8IENhcnJpZXIgU2Vlbi4gV2lsbCByZXBvcnQgYnVzeSB3aGVuZXZlciBjb21wbGlhbnQgSUVFRSA4MDIuMTUuNCBzaWduYWwgaXMgc2Vlbi4gKi8NCisgICAgTlJGX1JBRElPX0NDQV9NT0RFX0NBUlJJRVJfQU5EX0VEID0gUkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX0NhcnJpZXJBbmRFZE1vZGUsIC8qKjwgRW5lcmd5IEFib3ZlIFRocmVzaG9sZCBBTkQgQ2FycmllciBTZWVuLiAqLw0KKyAgICBOUkZfUkFESU9fQ0NBX01PREVfQ0FSUklFUl9PUl9FRCAgPSBSQURJT19DQ0FDVFJMX0NDQU1PREVfQ2Fycmllck9yRWRNb2RlLCAgLyoqPCBFbmVyZ3kgQWJvdmUgVGhyZXNob2xkIE9SIENhcnJpZXIgU2Vlbi4gKi8NCit9IG5yZl9yYWRpb19jY2FfbW9kZV90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb19zdGF0ZV90DQorICogQGJyaWVmIFR5cGVzIG9mIFJBRElPIFN0YXRlcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9SQURJT19TVEFURV9ESVNBQkxFRCAgID0gUkFESU9fU1RBVEVfU1RBVEVfRGlzYWJsZWQsICAvKio8IE5vIG9wZXJhdGlvbnMgYXJlIGdvaW5nIG9uIGluc2lkZSB0aGUgcmFkaW8gYW5kIHRoZSBwb3dlciBjb25zdW1wdGlvbiBpcyBhdCBhIG1pbmltdW0uICovDQorICAgIE5SRl9SQURJT19TVEFURV9SWF9SVSAgICAgID0gUkFESU9fU1RBVEVfU1RBVEVfUnhSdSwgICAgICAvKio8IFRoZSByYWRpbyBpcyByYW1waW5nIHVwIGFuZCBwcmVwYXJpbmcgZm9yIHJlY2VwdGlvbi4gKi8NCisgICAgTlJGX1JBRElPX1NUQVRFX1JYX0lETEUgICAgPSBSQURJT19TVEFURV9TVEFURV9SeElkbGUsICAgIC8qKjwgVGhlIHJhZGlvIGlzIHJlYWR5IGZvciByZWNlcHRpb24gdG8gc3RhcnQuICovDQorICAgIE5SRl9SQURJT19TVEFURV9SWCAgICAgICAgID0gUkFESU9fU1RBVEVfU1RBVEVfUngsICAgICAgICAvKio8IFJlY2VwdGlvbiBoYXMgYmVlbiBzdGFydGVkLiAqLw0KKyAgICBOUkZfUkFESU9fU1RBVEVfUlhfRElTQUJMRSA9IFJBRElPX1NUQVRFX1NUQVRFX1J4RGlzYWJsZSwgLyoqPCBUaGUgcmFkaW8gaXMgZGlzYWJsaW5nIHRoZSByZWNlaXZlci4gKi8NCisgICAgTlJGX1JBRElPX1NUQVRFX1RYX1JVICAgICAgPSBSQURJT19TVEFURV9TVEFURV9UeFJ1LCAgICAgIC8qKjwgVGhlIHJhZGlvIGlzIHJhbXBpbmcgdXAgYW5kIHByZXBhcmluZyBmb3IgdHJhbnNtaXNzaW9uLiAqLw0KKyAgICBOUkZfUkFESU9fU1RBVEVfVFhfSURMRSAgICA9IFJBRElPX1NUQVRFX1NUQVRFX1R4SWRsZSwgICAgLyoqPCBUaGUgcmFkaW8gaXMgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiB0byBzdGFydC4gKi8NCisgICAgTlJGX1JBRElPX1NUQVRFX1RYICAgICAgICAgPSBSQURJT19TVEFURV9TVEFURV9UeCwgICAgICAgIC8qKjwgVGhlIHJhZGlvIGlzIHRyYW5zbWl0dGluZyBhIHBhY2tldC4gKi8NCisgICAgTlJGX1JBRElPX1NUQVRFX1RYX0RJU0FCTEUgPSBSQURJT19TVEFURV9TVEFURV9UeERpc2FibGUsIC8qKjwgVGhlIHJhZGlvIGlzIGRpc2FibGluZyB0aGUgdHJhbnNtaXR0ZXIuICovDQorfSBucmZfcmFkaW9fc3RhdGVfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fY3JjX3N0YXR1c190DQorICogQGJyaWVmIFR5cGVzIG9mIENSQyBzdGF0dXMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUkFESU9fQ1JDX1NUQVRVU19FUlJPUiA9IFJBRElPX0NSQ1NUQVRVU19DUkNTVEFUVVNfQ1JDRXJyb3IsIC8qKjwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yLiAqLw0KKyAgICBOUkZfUkFESU9fQ1JDX1NUQVRVU19PSyAgICA9IFJBRElPX0NSQ1NUQVRVU19DUkNTVEFUVVNfQ1JDT2ssICAgIC8qKjwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIG9rLiAqLw0KK30gbnJmX3JhZGlvX2NyY19zdGF0dXNfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fbW9kZV90DQorICogQGJyaWVmIFR5cGVzIG9mIFJBRElPIG1vZGVzIChkYXRhIHJhdGUgYW5kIG1vZHVsYXRpb24pLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1JBRElPX01PREVfTlJGXzFNQklUICAgICAgICAgID0gUkFESU9fTU9ERV9NT0RFX05yZl8xTWJpdCwgICAgICAgICAgLyoqPCAxTWJpdC9zIE5vcmRpYyBwcm9wcmlldGFyeSByYWRpbyBtb2RlLiAqLw0KKyAgICBOUkZfUkFESU9fTU9ERV9OUkZfMk1CSVQgICAgICAgICAgPSBSQURJT19NT0RFX01PREVfTnJmXzJNYml0LCAgICAgICAgICAvKio8IDJNYml0L3MgTm9yZGljIHByb3ByaWV0YXJ5IHJhZGlvIG1vZGUuICovDQorICAgIE5SRl9SQURJT19NT0RFX0JMRV8xTUJJVCAgICAgICAgICA9IFJBRElPX01PREVfTU9ERV9CbGVfMU1iaXQsICAgICAgICAgIC8qKjwgMSBNYml0L3MgQmx1ZXRvb3RoIExvdyBFbmVyZ3kuICovDQorICAgIE5SRl9SQURJT19NT0RFX0JMRV8yTUJJVCAgICAgICAgICA9IFJBRElPX01PREVfTU9ERV9CbGVfMk1iaXQsICAgICAgICAgIC8qKjwgMiBNYml0L3MgQmx1ZXRvb3RoIExvdyBFbmVyZ3kuICovDQorICAgIE5SRl9SQURJT19NT0RFX0lFRUU4MDIxNTRfMjUwS0JJVCA9IFJBRElPX01PREVfTU9ERV9JZWVlODAyMTU0XzI1MEtiaXQsIC8qKjwgSUVFRSA4MDIuMTUuNC0yMDA2IDI1MCBrYml0L3MuICovDQorfSBucmZfcmFkaW9fbW9kZV90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9yYWRpb19wcmVhbWJsZV9sZW5ndGhfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBwcmVhbWJsZSBsZW5ndGguDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUkFESU9fUFJFQU1CTEVfTEVOR1RIXzhCSVQgICAgICAgPSBSQURJT19QQ05GMF9QTEVOXzhiaXQsICAgICAgLyoqPCA4LWJpdCBwcmVhbWJsZS4gKi8NCisgICAgTlJGX1JBRElPX1BSRUFNQkxFX0xFTkdUSF8xNkJJVCAgICAgID0gUkFESU9fUENORjBfUExFTl8xNmJpdCwgICAgIC8qKjwgMTYtYml0IHByZWFtYmxlLiAqLw0KKyAgICBOUkZfUkFESU9fUFJFQU1CTEVfTEVOR1RIXzMyQklUX1pFUk8gPSBSQURJT19QQ05GMF9QTEVOXzMyYml0WmVybywgLyoqPCAzMi1iaXQgemVybyBwcmVhbWJsZSB1c2VkIGZvciBJRUVFIDgwMi4xNS40LiAqLw0KKyAgICBOUkZfUkFESU9fUFJFQU1CTEVfTEVOR1RIX0xPTkdfUkFOR0UgPSBSQURJT19QQ05GMF9QTEVOX0xvbmdSYW5nZSwgLyoqPCBQcmVhbWJsZSAtIHVzZWQgZm9yIEJUTEUgTG9uZyBSYW5nZS4gKi8NCit9IG5yZl9yYWRpb19wcmVhbWJsZV9sZW5ndGhfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfcmFkaW9fY3JjX2luY2x1ZGVzX2FkZHJfdA0KKyAqIEBicmllZiBUeXBlcyBvZiBDUkMgY2FsY3VsYXRvbnMgcmVnYXJkaW5nIGFkZHJlc3MuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUkFESU9fQ1JDX0lOQ0xVREVTX0FERFJfSU5DTFVERSAgICA9IFJBRElPX0NSQ0NORl9TS0lQQUREUl9JbmNsdWRlLCAgICAvKio8IENSQyBjYWxjdWxhdGlvbiBpbmNsdWRlcyBhZGRyZXNzIGZpZWxkLiAqLw0KKyAgICBOUkZfUkFESU9fQ1JDX0lOQ0xVREVTX0FERFJfU0tJUCAgICAgICA9IFJBRElPX0NSQ0NORl9TS0lQQUREUl9Ta2lwLCAgICAgICAvKio8IENSQyBjYWxjdWxhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGFkZHJlc3MgZmllbGQuICovDQorICAgIE5SRl9SQURJT19DUkNfSU5DTFVERVNfQUREUl9JRUVFODAyMTU0ID0gUkFESU9fQ1JDQ05GX1NLSVBBRERSX0llZWU4MDIxNTQsIC8qKjwgQ1JDIGNhbGN1bGF0aW9uIGFzIHBlciA4MDIuMTUuNCBzdGFuZGFyZC4gKi8NCit9IG5yZl9yYWRpb19jcmNfaW5jbHVkZXNfYWRkcl90Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgaW50ZXJydXB0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2ludF9tYXNrICAgICAgICAgICAgICBNYXNrIG9mIGludGVycnVwdHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2ludF9lbmFibGUodWludDMyX3QgcmFkaW9faW50X21hc2spDQorew0KKyAgICBOUkZfUkFESU8tPklOVEVOU0VUID0gcmFkaW9faW50X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19pbnRfbWFzayAgICAgICAgICAgICAgTWFzayBvZiBpbnRlcnJ1cHRzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19pbnRfZGlzYWJsZSh1aW50MzJfdCByYWRpb19pbnRfbWFzaykNCit7DQorICAgIE5SRl9SQURJTy0+SU5URU5DTFIgPSByYWRpb19pbnRfbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGludGVycnVwdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2ludF9tYXNrICAgICAgICAgICAgICBJbnRlcnJ1cHQuDQorICoNCisgKiBAcmV0dmFsICAgICB0cnVlICAgICAgICAgICAgICAgICAgIElmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IGVuYWJsZWQuDQorICogQHJldHZhbCAgICAgZmFsc2UgICAgICAgICAgICAgICAgICBJZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3JhZGlvX2ludF9nZXQobnJmX3JhZGlvX2ludF9tYXNrX3QgcmFkaW9faW50X21hc2spDQorew0KKyAgICByZXR1cm4gKGJvb2wpKE5SRl9SQURJTy0+SU5URU5DTFIgJiByYWRpb19pbnRfbWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgYWRkcmVzcyBvZiBhIHNwZWNpZmljIHRhc2suDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBQUEkgbW9kdWxlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fdGFzayAgICAgICAgICAgICAgVGFzay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKm5yZl9yYWRpb190YXNrX2FkZHJlc3NfZ2V0KG5yZl9yYWRpb190YXNrX3QgcmFkaW9fdGFzaykNCit7DQorICAgIHJldHVybiAodWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUkFESU8gKyByYWRpb190YXNrKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgc3BlY2lmaWMgdGFzay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3Rhc2sgICAgICAgICAgICAgIFRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX3Rhc2tfdHJpZ2dlcihucmZfcmFkaW9fdGFza190IHJhZGlvX3Rhc2spDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9SQURJTyArIHJhZGlvX3Rhc2spKSA9IE5SRl9SQURJT19UQVNLX1NFVDsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBldmVudC4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgdGhlIFBQSSBtb2R1bGUuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19ldmVudCAgICAgICAgICAgICAgRXZlbnQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90ICpucmZfcmFkaW9fZXZlbnRfYWRkcmVzc19nZXQobnJmX3JhZGlvX2V2ZW50X3QgcmFkaW9fZXZlbnQpDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JBRElPICsgcmFkaW9fZXZlbnQpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19ldmVudCAgICAgICAgICAgICAgRXZlbnQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2V2ZW50X2NsZWFyKG5yZl9yYWRpb19ldmVudF90IHJhZGlvX2V2ZW50KQ0KK3sNCisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUkFESU8gKyByYWRpb19ldmVudCkpID0gTlJGX1JBRElPX0VWRU5UX0NMRUFSOw0KKyNpZiBfX0NPUlRFWF9NID09IDB4MDQNCisgICAgdm9sYXRpbGUgdWludDMyX3QgZHVtbXkgPSAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9SQURJTyArIHJhZGlvX2V2ZW50KSk7DQorICAgICh2b2lkKWR1bW15Ow0KKyNlbmRpZg0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19ldmVudCAgICAgICAgICAgICAgRXZlbnQuDQorICoNCisgKiBAcmV0dmFsICAgICB0cnVlICAgICAgICAgICAgICAgSWYgdGhlIGV2ZW50IGlzIG5vdCBzZXQuDQorICogQHJldHZhbCAgICAgZmFsc2UgICAgICAgICAgICAgIElmIHRoZSBldmVudCBpcyBzZXQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3JhZGlvX2V2ZW50X2dldChucmZfcmFkaW9fZXZlbnRfdCByYWRpb19ldmVudCkNCit7DQorICAgIHJldHVybiAoYm9vbCkgKiAoKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JBRElPICsgcmFkaW9fZXZlbnQpKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHNob3J0Y3V0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3Nob3J0X21hc2sgICAgICAgICAgICAgIE1hc2sgb2Ygc2hvcnRjdXRzLg0KKyAqDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX3Nob3J0c19lbmFibGUodWludDMyX3QgcmFkaW9fc2hvcnRfbWFzaykNCit7DQorICAgIE5SRl9SQURJTy0+U0hPUlRTIHw9IHJhZGlvX3Nob3J0X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgc2hvcnRjdXRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fc2hvcnRfbWFzayAgICAgICAgICAgICAgTWFzayBvZiBzaG9ydGN1dHMuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fc2hvcnRzX2Rpc2FibGUodWludDMyX3QgcmFkaW9fc2hvcnRfbWFzaykNCit7DQorICAgIE5SRl9SQURJTy0+U0hPUlRTICY9IH5yYWRpb19zaG9ydF9tYXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgc2hvcnRjdXRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fc2hvcnRfbWFzayAgICAgICAgICAgICBNYXNrIG9mIHNob3J0Y3V0cy4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19zaG9ydHNfc2V0KHVpbnQzMl90IHJhZGlvX3Nob3J0X21hc2spDQorew0KKyAgICBOUkZfUkFESU8tPlNIT1JUUyA9IHJhZGlvX3Nob3J0X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBzaG9ydGN1dHMuDQorICoNCisgKiBAcmV0dXJuICBNYXNrIG9mIHNob3J0Y3V0cy4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcmFkaW9fc2hvcnRzX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIE5SRl9SQURJTy0+U0hPUlRTOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgcHJlc2VudCBzdGF0ZSBvZiB0aGUgcmFkaW8gbW9kdWxlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfcmFkaW9fc3RhdGVfdCBucmZfcmFkaW9fc3RhdGVfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKG5yZl9yYWRpb19zdGF0ZV90KSBOUkZfUkFESU8tPlNUQVRFOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgUGFja2V0IFBvaW50ZXIgdG8gZ2l2ZW4gbG9jYXRpb24gaW4gbWVtb3J5Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9yYWRpb19wYWNrZXRfcHRyICAgICAgICAgICBQb2ludGVyIHRvIHR4IG9yIHJ4IHBhY2tldCBidWZmZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX3BhY2tldF9wdHJfc2V0KGNvbnN0IHZvaWQgKnBfcmFkaW9fcGFja2V0X3B0cikNCit7DQorICAgIE5SRl9SQURJTy0+UEFDS0VUUFRSID0gKHVpbnQzMl90KSBwX3JhZGlvX3BhY2tldF9wdHI7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBDUkMgc3RhdHVzIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBucmZfcmFkaW9fY3JjX3N0YXR1c190IG5yZl9yYWRpb19jcmNfc3RhdHVzX2dldCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChucmZfcmFkaW9fY3JjX3N0YXR1c190KSBOUkZfUkFESU8tPkNSQ1NUQVRVUzsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCBtb2RlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY2NhX21vZGUgICAgICAgICAgICAgICAgTW9kZSBvZiBDQ0ENCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY2NhX21vZGVfc2V0KG5yZl9yYWRpb19jY2FfbW9kZV90IHJhZGlvX2NjYV9tb2RlKQ0KK3sNCisgICAgTlJGX1JBRElPLT5DQ0FDVFJMICY9ICh+UkFESU9fQ0NBQ1RSTF9DQ0FNT0RFX01zayk7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCB8PSAoKHVpbnQzMl90KSByYWRpb19jY2FfbW9kZSA8PCBSQURJT19DQ0FDVFJMX0NDQU1PREVfUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIENDQSBFbmVyZ3kgQnVzeSBUaHJlc2hvbGQuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19jY2FfZWRfdGhyZXNob2xkICAgICAgICBFbmVyZ3kgRGV0ZWN0aW9uIHRocmVzaG9sZCB2YWx1ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY2NhX2VkX3RocmVzaG9sZF9zZXQodWludDhfdCByYWRpb19jY2FfZWRfdGhyZXNob2xkKQ0KK3sNCisgICAgTlJGX1JBRElPLT5DQ0FDVFJMICY9ICh+UkFESU9fQ0NBQ1RSTF9DQ0FFRFRIUkVTX01zayk7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCB8PSAoKHVpbnQzMl90KSByYWRpb19jY2FfZWRfdGhyZXNob2xkIDw8IFJBRElPX0NDQUNUUkxfQ0NBRURUSFJFU19Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgQ0NBIENvcnJlbGF0b3IgQnVzeSBUaHJlc2hvbGQuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19jY2FfY29ycl90aHJlc2hvbGQgICAgICBDb3JyZWxhdG9yIEJ1c3kgVGhyZXNob2xkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19jY2FfY29ycl90aHJlc2hvbGRfc2V0KHVpbnQ4X3QgcmFkaW9fY2NhX2NvcnJfdGhyZXNob2xkX3NldCkNCit7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCAmPSAoflJBRElPX0NDQUNUUkxfQ0NBQ09SUlRIUkVTX01zayk7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCB8PSAoKHVpbnQzMl90KSByYWRpb19jY2FfY29ycl90aHJlc2hvbGRfc2V0IDw8IFJBRElPX0NDQUNUUkxfQ0NBQ09SUlRIUkVTX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBsaW1pdCBvZiBvY2N1cmFuY2VzIGFib3ZlIENvcnJlbGF0b3IgVGhyZXNob2xkLg0KKyAqDQorICogV2hlbiBub3QgZXF1YWwgdG8gemVybyB0aGUgY29ycmVsYXRvciBiYXNlZCBzaWduYWwgZGV0ZWN0IGlzIGVuYWJsZWQuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19jY2FfY29ycl9jbnQgICAgICAgICAgIExpbWl0IG9mIG9jY3VyYW5jZXMgYWJvdmUgQ29ycmVsYXRvciBUaHJlc2hvbGQNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY2NhX2NvcnJfY291bnRlcl9zZXQodWludDhfdCByYWRpb19jY2FfY29ycl9jb3VudGVyX3NldCkNCit7DQorICAgIE5SRl9SQURJTy0+Q0NBQ1RSTCAmPSAoflJBRElPX0NDQUNUUkxfQ0NBQ09SUkNOVF9Nc2spOw0KKyAgICBOUkZfUkFESU8tPkNDQUNUUkwgfD0gKCh1aW50MzJfdCkgcmFkaW9fY2NhX2NvcnJfY291bnRlcl9zZXQgPDwgUkFESU9fQ0NBQ1RSTF9DQ0FDT1JSQ05UX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBSYWRpbyBkYXRhIHJhdGUgYW5kIG1vZHVsYXRpb24gc2V0dGluZ3MuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19tb2RlICAgICAgICAgICAgICAgICAgIE1vZGUgb2YgcmFkaW8gZGF0YSByYXRlIGFuZCBtb2R1bGF0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19tb2RlX3NldChucmZfcmFkaW9fbW9kZV90IHJhZGlvX21vZGUpDQorew0KKyAgICBOUkZfUkFESU8tPk1PREUgPSAoKHVpbnQzMl90KSByYWRpb19tb2RlIDw8IFJBRElPX01PREVfTU9ERV9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgTGVuZ3RoIG9mIExFTkdUSCBmaWVsZCBpbiBudW1iZXIgb2YgYml0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2xlbmd0aF9sZW5ndGggICAgICAgICAgTGVuZ3RoIG9mIExFTkdUSCBmaWVsZCBpbiBudW1iZXIgb2YgYml0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY29uZmlnX2xlbmd0aF9maWVsZF9sZW5ndGhfc2V0KHVpbnQ4X3QgcmFkaW9fbGVuZ3RoX2xlbmd0aCkNCit7DQorICAgIE5SRl9SQURJTy0+UENORjAgJj0gKH5SQURJT19QQ05GMF9MRkxFTl9Nc2spOw0KKyAgICBOUkZfUkFESU8tPlBDTkYwIHw9ICgodWludDMyX3QpIHJhZGlvX2xlbmd0aF9sZW5ndGggPDwgUkFESU9fUENORjBfTEZMRU5fUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGxlbmd0aCBvZiBwcmVhbWJsZSBvbiBhaXIuDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19wcmVhbWJsZV9sZW5ndGggICAgICAgIExlbmd0aCBvZiBwcmVhbWJsZSBvbiBhaXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2NvbmZpZ19wcmVhbWJsZV9sZW5ndGhfc2V0KA0KKyAgICBucmZfcmFkaW9fcHJlYW1ibGVfbGVuZ3RoX3QgcmFkaW9fcHJlYW1ibGVfbGVuZ3RoKQ0KK3sNCisgICAgTlJGX1JBRElPLT5QQ05GMCAmPSAoflJBRElPX1BDTkYwX1BMRU5fTXNrKTsNCisgICAgTlJGX1JBRElPLT5QQ05GMCB8PSAoKHVpbnQzMl90KSByYWRpb19wcmVhbWJsZV9sZW5ndGggPDwgUkFESU9fUENORjBfUExFTl9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgaWYgTEVOR1RIIGZpZWxkIGNvbnRhaW5zIENSQy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2xlbmd0aF9jb250YWluc19jcmMgICAgVHJ1ZSBpZiBMRU5HVEggZmllbGQgc2hvdWxkIGNvbnRhaW4gQ1JDLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19jb25maWdfY3JjX2luY2x1ZGVkX3NldChib29sIHJhZGlvX2xlbmd0aF9jb250YWluc19jcmMpDQorew0KKyAgICBOUkZfUkFESU8tPlBDTkYwICY9ICh+UkFESU9fUENORjBfQ1JDSU5DX01zayk7DQorICAgIE5SRl9SQURJTy0+UENORjAgfD0gKCh1aW50MzJfdCkgcmFkaW9fbGVuZ3RoX2NvbnRhaW5zX2NyYyA8PCBSQURJT19QQ05GMF9DUkNJTkNfUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIG1heGltdW0gbGVuZ3RoIG9mIHBhY2tldCBwYXlsb2FkLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fbWF4X3BhY2tldF9sZW5ndGggICAgICBNYXhpbXVtIGxlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY29uZmlnX21heF9sZW5ndGhfc2V0KHVpbnQ4X3QgcmFkaW9fbWF4X3BhY2tldF9sZW5ndGgpDQorew0KKyAgICBOUkZfUkFESU8tPlBDTkYxICY9ICh+UkFESU9fUENORjFfTUFYTEVOX01zayk7DQorICAgIE5SRl9SQURJTy0+UENORjEgfD0gKCh1aW50MzJfdCkgcmFkaW9fbWF4X3BhY2tldF9sZW5ndGggPDwgUkFESU9fUENORjFfTUFYTEVOX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBDUkMgbGVuZ3RoLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY3JjX2xlbmd0aCAgICAgICAgICAgICBDUkMgbGVuZ3RoIGluIG51bWJlciBvZiBieXRlcyBbMC0zXS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fY3JjX2xlbmd0aF9zZXQodWludDhfdCByYWRpb19jcmNfbGVuZ3RoKQ0KK3sNCisgICAgTlJGX1JBRElPLT5DUkNDTkYgJj0gKH5SQURJT19DUkNDTkZfTEVOX01zayk7DQorICAgIE5SRl9SQURJTy0+Q1JDQ05GIHw9ICgodWludDMyX3QpIHJhZGlvX2NyY19sZW5ndGggPDwgUkFESU9fQ1JDQ05GX0xFTl9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgaWYgYWRkcmVzcyBmaWxlZCBzaG91bGQgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgZnJvbSBDUkMgY2FsY3VsYXRpb24uDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19jcmNfc2tpcF9hZGRyZXNzICAgICAgIEluY2x1ZGUgb3IgZXhjbHVkZSBwYWNrZXQgYWRkcmVzcyBmaWVsZCBvdXQgb2YgQ1JDLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19jcmNfaW5jbHVkZXNfYWRkcmVzc19zZXQoDQorICAgIG5yZl9yYWRpb19jcmNfaW5jbHVkZXNfYWRkcl90IHJhZGlvX2NyY19za2lwX2FkZHJlc3MpDQorew0KKyAgICBOUkZfUkFESU8tPkNSQ0NORiAmPSAoflJBRElPX0NSQ0NORl9TS0lQQUREUl9Nc2spOw0KKyAgICBOUkZfUkFESU8tPkNSQ0NORiB8PSAoKHVpbnQzMl90KSByYWRpb19jcmNfc2tpcF9hZGRyZXNzIDw8IFJBRElPX0NSQ0NORl9TS0lQQUREUl9Qb3MpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgQ1JDIHBvbHlub21pbmFsLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fY3JjX3BvbHlub21pbmFsICAgICAgICBDUkMgcG9seW5vbWluYWwgdG8gc2V0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19jcmNfcG9seW5vbWluYWxfc2V0KHVpbnQzMl90IHJhZGlvX2NyY19wb2x5bm9taW5hbCkNCit7DQorICAgIE5SRl9SQURJTy0+Q1JDUE9MWSA9IChyYWRpb19jcmNfcG9seW5vbWluYWwgPDwgUkFESU9fQ1JDUE9MWV9DUkNQT0xZX1Bvcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBSU1NJIHNhbXBsZSByZXN1bHQuDQorICoNCisgKiBAbm90ZSBUaGUgdmFsdWUgaXMgYSBwb3NpdGl2ZSB2YWx1ZSB3aGlsZSB0aGUgYWN0dWFsIHJlY2VpdmVkIHNpZ25hbCBpcyBhIG5lZ2F0aXZlIHZhbHVlLg0KKyAqICAgICAgIEFjdHVhbCByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggaXMgdGhlcmVmb3JlIGFzIGZvbGxvd3M6DQorICogICAgICAgcmVjZWl2ZWQgc2lnbmFsIHN0cmVuZ3RoID0gLSByZXR1cm5lZF92YWx1ZSBkQm0gLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50OF90IG5yZl9yYWRpb19yc3NpX3NhbXBsZV9nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAodWludDhfdCkoKChOUkZfUkFESU8tPlJTU0lTQU1QTEUpICYgUkFESU9fUlNTSVNBTVBMRV9SU1NJU0FNUExFX01zaykgPj4NCisgICAgICAgICAgICAgICAgICAgICBSQURJT19SU1NJU0FNUExFX1JTU0lTQU1QTEVfUG9zKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIE1BQyBIZWFkZXIgTWF0Y2ggVW5pdCBzZWFyY2ggcGF0dGVybiBjb25maWd1cmF0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fbWhtdV9zZWFyY2hfcGF0dGVybiAgICBTZWFyY2ggUGF0dGVybiBDb25maWd1cmF0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuX3NldCh1aW50MzJfdCByYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuKQ0KK3sNCisgICAgTlJGX1JBRElPLT5NSFJNQVRDSENPTkYgPSByYWRpb19taG11X3NlYXJjaF9wYXR0ZXJuOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgTUFDIEhlYWRlciBNYXRjaCBVbml0IHBhdHRlcm4gbWFzayBjb25maWd1cmF0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fbWhtdV9wYXR0ZXJuX21hc2sgICAgICBQYXR0ZXJuIG1hc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX21obXVfcGF0dGVybl9tYXNrX3NldCh1aW50MzJfdCByYWRpb19taG11X3BhdHRlcm5fbWFzaykNCit7DQorICAgIE5SRl9SQURJTy0+TUhSTUFUQ0hNQVMgPSByYWRpb19taG11X3BhdHRlcm5fbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHJhZGlvIGZyZXF1ZW5jeS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJhZGlvX2ZyZXF1ZW5jeSAgICAgICAgICAgICAgRnJlcXVlbmN5IGFib3ZlIDI0MDAgTUh6IFtNSHpdDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2ZyZXF1ZW5jeV9zZXQodWludDMyX3QgcmFkaW9fZnJlcXVlbmN5KQ0KK3sNCisgICAgTlJGX1JBRElPLT5GUkVRVUVOQ1kgPSByYWRpb19mcmVxdWVuY3k7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyByYWRpbyBmcmVxdWVuY3kuDQorICoNCisgKiBAcmV0dXJucyBGcmVxdWVuY3kgYWJvdmUgMjQwMCBNSHogW01Iel0NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3JhZGlvX2ZyZXF1ZW5jeV9nZXQodm9pZCkNCit7DQorICAgIHJldHVybiBOUkZfUkFESU8tPkZSRVFVRU5DWTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHJhZGlvIHRyYW5zbWl0IHBvd2VyLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fdHhfcG93ZXIgICAgICAgICAgICAgICBUcmFuc21pdCBwb3dlciBvZiB0aGUgcmFkaW8uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX3R4X3Bvd2VyX3NldChpbnQ4X3QgcmFkaW9fdHhfcG93ZXIpDQorew0KKyAgICBOUkZfUkFESU8tPlRYUE9XRVIgPSAodWludDhfdCkgcmFkaW9fdHhfcG93ZXI7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBJbnRlciBGcmFtZSBTcGFjaW5nDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19pZnMgICAgICAgICAgICAgICAgICAgIEludGVyIGZyYW1lIHNwYWNpbmcgW3VzXS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9faWZzX3NldCh1aW50MzJfdCByYWRpb19pZnMpDQorew0KKyAgICBOUkZfUkFESU8tPlRJRlMgPSByYWRpb19pZnM7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBCaXQgY291bnRlciBjb21wYXJlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcmFkaW9fYmNjICAgICAgICAgICAgICAgICAgICBCaXQgY291bnRlciBjb21wYXJlIFtiaXRzXS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcmFkaW9fYmNjX3NldCh1aW50MzJfdCByYWRpb19iY2MpDQorew0KKyAgICBOUkZfUkFESU8tPkJDQyA9IHJhZGlvX2JjYzsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIEJpdCBjb3VudGVyIGNvbXBhcmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9yYWRpb19iY2NfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gTlJGX1JBRElPLT5CQ0M7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBFbmVyZ3kgRGV0ZWN0aW9uIGxldmVsLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50OF90IG5yZl9yYWRpb19lZF9zYW1wbGVfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKHVpbnQ4X3QpIE5SRl9SQURJTy0+RURTQU1QTEU7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtIEVEIHNjYW4uDQorICoNCisgKiBAcGFyYW1baW5dICByYWRpb19lZF9sb29wX2NvdW50ICAgICAgICAgIE51bWJlciBvZiBpdGVyYXRpb25zIGR1cmluZyBFRCBwcm9jZWR1cmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JhZGlvX2VkX2xvb3BfY291bnRfc2V0KHVpbnQzMl90IHJhZGlvX2VkX2xvb3BfY291bnQpDQorew0KKyAgICBOUkZfUkFESU8tPkVEQ05UID0gKHJhZGlvX2VkX2xvb3BfY291bnQgJiAweDAwMUZGRkZGKTsNCit9CisNCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBwb3dlciBtb2RlIG9mIHRoZSByYWRpbyBwZXJpcGhlcmFsLgorICoKKyAqIEBwYXJhbVtpbl0gIHJhZGlvX3Bvd2VyICAgICAgICAgICAgICAgICAgSWYgcmFkaW8gc2hvdWxkIHBvd2VyZWQgb24uCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9yYWRpb19wb3dlcl9zZXQoYm9vbCByYWRpb19wb3dlcikKK3sKKyAgICBOUkZfUkFESU8tPlBPV0VSID0gKHVpbnQzMl90KSByYWRpb19wb3dlcjsKK30KKworDQorLyoqDQorICpAfQ0KKyAqKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIE5SRl9SQURJT19IX18gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcm5nLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfcm5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1YmQwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ybmcuaApAQCAtMCwwICsxLDI0MiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE2LCBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksDQorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICogQGZpbGUNCisgKiBAYnJpZWYgUk5HIEhBTCBBUEkuDQorICovDQorDQorI2lmbmRlZiBOUkZfUk5HX0hfXw0KKyNkZWZpbmUgTlJGX1JOR19IX18NCisvKioNCisgKiBAZGVmZ3JvdXAgbnJmX3JuZ19oYWwgUk5HIEhBTA0KKyAqIEB7DQorICogQGluZ3JvdXAgbnJmX3JuZw0KKyAqIEBicmllZiBIYXJkd2FyZSBhY2Nlc3MgbGF5ZXIgZm9yIG1hbmFnaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUk5HKS4NCisgKi8NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorI2luY2x1ZGUgIm5yZi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTlJGX1JOR19UQVNLX1NFVCAgICAoMVVMKQ0KKyNkZWZpbmUgTlJGX1JOR19FVkVOVF9DTEVBUiAoMFVMKQ0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ybmdfdGFza190DQorICogQGJyaWVmIFJORyB0YXNrcy4NCisgKi8NCit0eXBlZGVmIGVudW0gLypsaW50IC1zYXZlIC1lMzAgLWVzeW0oNjI4LF9fSU5UQUREUl9fKSAqLw0KK3sNCisgICAgTlJGX1JOR19UQVNLX1NUQVJUID0gb2Zmc2V0b2YoTlJGX1JOR19UeXBlLCBUQVNLU19TVEFSVCksIC8qKjwgU3RhcnQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAqLw0KKyAgICBOUkZfUk5HX1RBU0tfU1RPUCAgPSBvZmZzZXRvZihOUkZfUk5HX1R5cGUsIFRBU0tTX1NUT1ApICAgLyoqPCBTdG9wIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gKi8NCit9IG5yZl9ybmdfdGFza190OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGludCAtcmVzdG9yZSAqLw0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ybmdfZXZlbnRfdA0KKyAqIEBicmllZiBSTkcgZXZlbnRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bSAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pICovDQorew0KKyAgICBOUkZfUk5HX0VWRU5UX1ZBTFJEWSA9IG9mZnNldG9mKE5SRl9STkdfVHlwZSwgRVZFTlRTX1ZBTFJEWSkgLyoqPCBOZXcgcmFuZG9tIG51bWJlciBnZW5lcmF0ZWQgZXZlbnQuICovDQorfSBucmZfcm5nX2V2ZW50X3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmxpbnQgLXJlc3RvcmUgKi8NCisNCisvKioNCisgKiBAZW51bSBucmZfcm5nX2ludF9tYXNrX3QNCisgKiBAYnJpZWYgUk5HIGludGVycnVwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUk5HX0lOVF9WQUxSRFlfTUFTSyA9IFJOR19JTlRFTlNFVF9WQUxSRFlfTXNrIC8qKjwgTWFzayBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGFuIGludGVycnVwdCBvbiBWQUxSRFkgZXZlbnQuICAqLw0KK30gbnJmX3JuZ19pbnRfbWFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ybmdfc2hvcnRfbWFza190DQorICogQGJyaWVmIFR5cGVzIG9mIFJORyBzaG9ydGN1dHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUk5HX1NIT1JUX1ZBTFJEWV9TVE9QX01BU0sgPSBSTkdfU0hPUlRTX1ZBTFJEWV9TVE9QX01zayAvKio8ICBNYXNrIGZvciBzZXR0aW5nIHNob3J0Y3V0IGJldHdlZW4gRVZFTlRfVkFMUkRZIGFuZCBUQVNLX1NUT1AuICovDQorfSBucmZfcm5nX3Nob3J0X21hc2tfdDsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfaW50X21hc2sgICAgICAgICAgICAgIE1hc2sgb2YgaW50ZXJydXB0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX2ludF9lbmFibGUodWludDMyX3Qgcm5nX2ludF9tYXNrKQ0KK3sNCisgICAgTlJGX1JORy0+SU5URU5TRVQgPSBybmdfaW50X21hc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfaW50X21hc2sgICAgICAgICAgICAgIE1hc2sgb2YgaW50ZXJydXB0cy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX2ludF9kaXNhYmxlKHVpbnQzMl90IHJuZ19pbnRfbWFzaykNCit7DQorICAgIE5SRl9STkctPklOVEVOQ0xSID0gcm5nX2ludF9tYXNrOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgaW50ZXJydXB0Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX2ludF9tYXNrICAgICAgICAgICAgICBJbnRlcnJ1cHQuDQorICoNCisgKiBAcmV0dmFsICAgICB0cnVlICAgICAgICAgICAgICAgICAgIElmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IGVuYWJsZWQuDQorICogQHJldHZhbCAgICAgZmFsc2UgICAgICAgICAgICAgICAgICBJZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3JuZ19pbnRfZ2V0KG5yZl9ybmdfaW50X21hc2tfdCBybmdfaW50X21hc2spDQorew0KKyAgICByZXR1cm4gKGJvb2wpKE5SRl9STkctPklOVEVOQ0xSICYgcm5nX2ludF9tYXNrKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgdGFzay4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgdGhlIFBQSSBtb2R1bGUuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfdGFzayAgICAgICAgICAgICAgVGFzay4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgKm5yZl9ybmdfdGFza19hZGRyZXNzX2dldChucmZfcm5nX3Rhc2tfdCBybmdfdGFzaykNCit7DQorICAgIHJldHVybiAodWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUk5HICsgcm5nX3Rhc2spOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIHNldHRpbmcgYSBzcGVjaWZpYyB0YXNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgcm5nX3Rhc2sgICAgICAgICAgICAgIFRhc2suDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3JuZ190YXNrX3RyaWdnZXIobnJmX3JuZ190YXNrX3Qgcm5nX3Rhc2spDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9STkcgKyBybmdfdGFzaykpID0gTlJGX1JOR19UQVNLX1NFVDsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBldmVudC4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgdGhlIFBQSSBtb2R1bGUuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfZXZlbnQgICAgICAgICAgICAgIEV2ZW50Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCAqbnJmX3JuZ19ldmVudF9hZGRyZXNzX2dldChucmZfcm5nX2V2ZW50X3Qgcm5nX2V2ZW50KQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9STkcgKyBybmdfZXZlbnQpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNsZWFyaW5nIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfZXZlbnQgICAgICAgICAgICAgIEV2ZW50Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ybmdfZXZlbnRfY2xlYXIobnJmX3JuZ19ldmVudF90IHJuZ19ldmVudCkNCit7DQorICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopTlJGX1JORyArIHJuZ19ldmVudCkpID0gTlJGX1JOR19FVkVOVF9DTEVBUjsNCisjaWYgX19DT1JURVhfTSA9PSAweDA0DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGR1bW15ID0gKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilOUkZfUk5HICsgcm5nX2V2ZW50KSk7DQorICAgICh2b2lkKWR1bW15Ow0KKyNlbmRpZg0KK30NCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfZXZlbnQgICAgICAgICAgICAgIEV2ZW50Lg0KKyAqDQorICogQHJldHZhbCAgICAgdHJ1ZSAgICAgICAgICAgICAgIElmIHRoZSBldmVudCBpcyBub3Qgc2V0Lg0KKyAqIEByZXR2YWwgICAgIGZhbHNlICAgICAgICAgICAgICBJZiB0aGUgZXZlbnQgaXMgc2V0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBib29sIG5yZl9ybmdfZXZlbnRfZ2V0KG5yZl9ybmdfZXZlbnRfdCBybmdfZXZlbnQpDQorew0KKyAgICByZXR1cm4gKGJvb2wpICogKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKU5SRl9STkcgKyBybmdfZXZlbnQpKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIHNob3J0Y3V0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHJuZ19zaG9ydF9tYXNrICAgICAgICAgICAgICBNYXNrIG9mIHNob3J0Y3V0cy4NCisgKg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ybmdfc2hvcnRzX2VuYWJsZSh1aW50MzJfdCBybmdfc2hvcnRfbWFzaykNCit7DQorICAgIE5SRl9STkctPlNIT1JUUyB8PSBybmdfc2hvcnRfbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBzaG9ydGN1dHMuDQorICoNCisgKiBAcGFyYW1baW5dICBybmdfc2hvcnRfbWFzayAgICAgICAgICAgICAgTWFzayBvZiBzaG9ydGN1dHMuDQorICoNCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX3Nob3J0c19kaXNhYmxlKHVpbnQzMl90IHJuZ19zaG9ydF9tYXNrKQ0KK3sNCisgICAgTlJGX1JORy0+U0hPUlRTICY9IH5ybmdfc2hvcnRfbWFzazsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCByYW5kb20gdmFsdWUuDQorICoNCisgKiBAcmV0dXJuICAgICBQcmV2aW91c2x5IGdlbmVyYXRlZCByYW5kb20gdmFsdWUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgbnJmX3JuZ19yYW5kb21fdmFsdWVfZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKHVpbnQ4X3QpKE5SRl9STkctPlZBTFVFICYgUk5HX1ZBTFVFX1ZBTFVFX01zayk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgZGlnaXRhbCBlcnJvciBjb3JyZWN0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ybmdfZXJyb3JfY29ycmVjdGlvbl9lbmFibGUodm9pZCkNCit7DQorICAgIE5SRl9STkctPkNPTkZJRyB8PSBSTkdfQ09ORklHX0RFUkNFTl9Nc2s7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGRpZ2l0YWwgZXJyb3IgY29ycmVjdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcm5nX2Vycm9yX2NvcnJlY3Rpb25fZGlzYWJsZSh2b2lkKQ0KK3sNCisgICAgTlJGX1JORy0+Q09ORklHICY9IH5STkdfQ09ORklHX0RFUkNFTl9Nc2s7DQorfQ0KKy8qKg0KKyAqQH0NCisgKiovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBOUkZfUk5HX0hfXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ydGMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODAyYWNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9oYWwvbnJmX3J0Yy5oCkBAIC0wLDAgKzEsMzM0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgKiBAZmlsZQ0KKyAqIEBicmllZiBSVEMgSEFMIEFQSS4NCisgKi8NCisNCisjaWZuZGVmIE5SRl9SVENfSA0KKyNkZWZpbmUgTlJGX1JUQ19IDQorDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9ydGNfaGFsIFJUQyBIQUwNCisgKiBAew0KKyAqIEBpbmdyb3VwIG5yZl9ydGMNCisgKiBAYnJpZWYgSGFyZHdhcmUgYWNjZXNzIGxheWVyIGZvciBtYW5hZ2luZyB0aGUgcmVhbCB0aW1lIGNvdW50ZXIgKFJUQykuDQorICovDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlICJucmYuaCINCisjaW5jbHVkZSAibnJmX2Fzc2VydC5oIg0KKyNpbmNsdWRlICJucmZfcGVyaXBoZXJhbHMuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBAYnJpZWYgTWFjcm8gZm9yIGdldHRpbmcgdGhlIG51bWJlciBvZiBjb21wYXJlIGNoYW5uZWxzIGF2YWlsYWJsZQ0KKyAqICAgICAgICBpbiBhIGdpdmVuIFJUQyBpbnN0YW5jZS4NCisgKi8NCisNCisjZGVmaW5lIE5SRl9SVENfQ0NfQ0hBTk5FTF9DT1VOVChpZCkgQ09OQ0FUXzMoUlRDLCBpZCwgX0NDX05VTSkNCisNCisjZGVmaW5lIFJUQ19JTlBVVF9GUkVRIDMyNzY4IC8qKjwgSW5wdXQgZnJlcXVlbmN5IG9mIHRoZSBSVEMgaW5zdGFuY2UuICovDQorDQorLyoqDQorICogQGJyaWVmIE1hY3JvIGZvciBjb252ZXJ0aW5nIGV4cGVjdGVkIGZyZXF1ZW5jeSB0byBwcmVzY2FsZXIgc2V0dGluZy4NCisgKi8NCisjZGVmaW5lIFJUQ19GUkVRX1RPX1BSRVNDQUxFUihGUkVRKSAodWludDE2X3QpKChSVENfSU5QVVRfRlJFUSAvIChGUkVRKSkgLSAxKQ0KKw0KKy8qKjwgTWFjcm8gZm9yIHdyYXBwaW5nIHZhbHVlcyB0byBSVEMgY2FwYWNpdHkuICovDQorI2RlZmluZSBSVENfV1JBUCh2YWwpICh2YWwgJiBSVENfQ09VTlRFUl9DT1VOVEVSX01zaykNCisNCisjZGVmaW5lIFJUQ19DSEFOTkVMX0lOVF9NQVNLKGNoKSAgICAoKHVpbnQzMl90KU5SRl9SVENfSU5UX0NPTVBBUkUwX01BU0sgPDwgY2gpDQorI2RlZmluZSBSVENfQ0hBTk5FTF9FVkVOVF9BRERSKGNoKSAgKG5yZl9ydGNfZXZlbnRfdCkoTlJGX1JUQ19FVkVOVF9DT01QQVJFXzAgKyBjaCAqIHNpemVvZih1aW50MzJfdCkpDQorLyoqDQorICogQGVudW0gbnJmX3J0Y190YXNrX3QNCisgKiBAYnJpZWYgUlRDIHRhc2tzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgLypsaW50IC1zYXZlIC1lMzAqLw0KKyAgICBOUkZfUlRDX1RBU0tfU1RBUlQgICAgICAgICAgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxUQVNLU19TVEFSVCksICAgICAvKio8IFN0YXJ0LiAqLw0KKyAgICBOUkZfUlRDX1RBU0tfU1RPUCAgICAgICAgICAgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxUQVNLU19TVE9QKSwgICAgICAvKio8IFN0b3AuICovDQorICAgIE5SRl9SVENfVEFTS19DTEVBUiAgICAgICAgICAgID0gb2Zmc2V0b2YoTlJGX1JUQ19UeXBlLFRBU0tTX0NMRUFSKSwgICAgIC8qKjwgQ2xlYXIuICovDQorICAgIE5SRl9SVENfVEFTS19UUklHR0VSX09WRVJGTE9XID0gb2Zmc2V0b2YoTlJGX1JUQ19UeXBlLFRBU0tTX1RSSUdPVlJGTFcpLC8qKjwgVHJpZ2dlciBvdmVyZmxvdy4gKi8NCisgICAgLypsaW50IC1yZXN0b3JlKi8NCit9IG5yZl9ydGNfdGFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ydGNfZXZlbnRfdA0KKyAqIEBicmllZiBSVEMgZXZlbnRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgLypsaW50IC1zYXZlIC1lMzAqLw0KKyAgICBOUkZfUlRDX0VWRU5UX1RJQ0sgICAgICAgID0gb2Zmc2V0b2YoTlJGX1JUQ19UeXBlLEVWRU5UU19USUNLKSwgICAgICAgLyoqPCBUaWNrIGV2ZW50LiAqLw0KKyAgICBOUkZfUlRDX0VWRU5UX09WRVJGTE9XICAgID0gb2Zmc2V0b2YoTlJGX1JUQ19UeXBlLEVWRU5UU19PVlJGTFcpLCAgICAgLyoqPCBPdmVyZmxvdyBldmVudC4gKi8NCisgICAgTlJGX1JUQ19FVkVOVF9DT01QQVJFXzAgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxFVkVOVFNfQ09NUEFSRVswXSksIC8qKjwgQ29tcGFyZSAwIGV2ZW50LiAqLw0KKyAgICBOUkZfUlRDX0VWRU5UX0NPTVBBUkVfMSAgID0gb2Zmc2V0b2YoTlJGX1JUQ19UeXBlLEVWRU5UU19DT01QQVJFWzFdKSwgLyoqPCBDb21wYXJlIDEgZXZlbnQuICovDQorICAgIE5SRl9SVENfRVZFTlRfQ09NUEFSRV8yICAgPSBvZmZzZXRvZihOUkZfUlRDX1R5cGUsRVZFTlRTX0NPTVBBUkVbMl0pLCAvKio8IENvbXBhcmUgMiBldmVudC4gKi8NCisgICAgTlJGX1JUQ19FVkVOVF9DT01QQVJFXzMgICA9IG9mZnNldG9mKE5SRl9SVENfVHlwZSxFVkVOVFNfQ09NUEFSRVszXSkgIC8qKjwgQ29tcGFyZSAzIGV2ZW50LiAqLw0KKyAgICAvKmxpbnQgLXJlc3RvcmUqLw0KK30gbnJmX3J0Y19ldmVudF90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl9ydGNfaW50X3QNCisgKiBAYnJpZWYgUlRDIGludGVycnVwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfUlRDX0lOVF9USUNLX01BU0sgICAgID0gUlRDX0lOVEVOU0VUX1RJQ0tfTXNrLCAgICAgLyoqPCBSVEMgaW50ZXJydXB0IGZyb20gdGljayBldmVudC4gKi8NCisgICAgTlJGX1JUQ19JTlRfT1ZFUkZMT1dfTUFTSyA9IFJUQ19JTlRFTlNFVF9PVlJGTFdfTXNrLCAgIC8qKjwgUlRDIGludGVycnVwdCBmcm9tIG92ZXJmbG93IGV2ZW50LiAqLw0KKyAgICBOUkZfUlRDX0lOVF9DT01QQVJFMF9NQVNLID0gUlRDX0lOVEVOU0VUX0NPTVBBUkUwX01zaywgLyoqPCBSVEMgaW50ZXJydXB0IGZyb20gY29tcGFyZSBldmVudCBvbiBjaGFubmVsIDAuICovDQorICAgIE5SRl9SVENfSU5UX0NPTVBBUkUxX01BU0sgPSBSVENfSU5URU5TRVRfQ09NUEFSRTFfTXNrLCAvKio8IFJUQyBpbnRlcnJ1cHQgZnJvbSBjb21wYXJlIGV2ZW50IG9uIGNoYW5uZWwgMS4gKi8NCisgICAgTlJGX1JUQ19JTlRfQ09NUEFSRTJfTUFTSyA9IFJUQ19JTlRFTlNFVF9DT01QQVJFMl9Nc2ssIC8qKjwgUlRDIGludGVycnVwdCBmcm9tIGNvbXBhcmUgZXZlbnQgb24gY2hhbm5lbCAyLiAqLw0KKyAgICBOUkZfUlRDX0lOVF9DT01QQVJFM19NQVNLID0gUlRDX0lOVEVOU0VUX0NPTVBBUkUzX01zayAgLyoqPCBSVEMgaW50ZXJydXB0IGZyb20gY29tcGFyZSBldmVudCBvbiBjaGFubmVsIDMuICovDQorfSBucmZfcnRjX2ludF90Ow0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBhIGNvbXBhcmUgdmFsdWUgZm9yIGEgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIGNoICAgICAgICAgICAgQ2hhbm5lbC4NCisgKiBAcGFyYW1baW5dICBjY192YWwgICAgICAgIENvbXBhcmUgdmFsdWUgdG8gc2V0Lg0KKyAqLw0KK19fU1RBVElDX0lOTElORSAgdm9pZCBucmZfcnRjX2NjX3NldChOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgY2gsIHVpbnQzMl90IGNjX3ZhbCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGNvbXBhcmUgdmFsdWUgZm9yIGEgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIGNoICAgICAgICAgICAgQ2hhbm5lbC4NCisgKg0KKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgQ09NUEFSRVtjaF0gdmFsdWUuDQorICovDQorX19TVEFUSUNfSU5MSU5FICB1aW50MzJfdCBucmZfcnRjX2NjX2dldChOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgY2gpOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgaW50ZXJydXB0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIG1hc2sgICAgICAgICAgSW50ZXJydXB0IG1hc2sgdG8gYmUgZW5hYmxlZC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX2ludF9lbmFibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBtYXNrICAgICAgICAgIEludGVycnVwdCBtYXNrIHRvIGJlIGRpc2FibGVkLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfaW50X2Rpc2FibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIG1hc2sgICAgICAgICAgTWFzayBvZiBpbnRlcnJ1cHQgZmxhZ3MgdG8gY2hlY2suDQorICoNCisgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgIE1hc2sgd2l0aCBlbmFibGVkIGludGVycnVwdHMuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfaW50X2lzX2VuYWJsZWQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBzdGF0dXMgb2YgY3VycmVudGx5IGVuYWJsZWQgaW50ZXJydXB0cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqDQorICogQHJldHVybiAgICAgICAgICAgICAgICAgICBWYWx1ZSBpbiBJTlRFTiByZWdpc3Rlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19pbnRfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIGV2ZW50IGlzIHBlbmRpbmcuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBldmVudCAgICAgICAgIEFkZHJlc3Mgb2YgdGhlIGV2ZW50Lg0KKyAqDQorICogQHJldHVybiAgICAgICAgICAgICAgICAgICBNYXNrIG9mIHBlbmRpbmcgZXZlbnRzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX2V2ZW50X3BlbmRpbmcoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfZXZlbnRfdCBldmVudCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBjbGVhcmluZyBhbiBldmVudC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIGV2ZW50ICAgICAgICAgRXZlbnQgdG8gY2xlYXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19ldmVudF9jbGVhcihOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y19ldmVudF90IGV2ZW50KTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyBhIGNvdW50ZXIgdmFsdWUuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgQ291bnRlciB2YWx1ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19jb3VudGVyX2dldChOUkZfUlRDX1R5cGUgKiBwX3J0Yyk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGEgcHJlc2NhbGVyIHZhbHVlLg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgdmFsICAgICAgICAgICBWYWx1ZSB0byBzZXQgdGhlIHByZXNjYWxlciB0by4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX3ByZXNjYWxlcl9zZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IHZhbCk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgYW4gZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICBldmVudCAgICAgICAgIFJlcXVlc3RlZCBldmVudC4NCisgKg0KKyAqIEByZXR1cm4gICAgIEFkZHJlc3Mgb2YgdGhlIHJlcXVlc3RlZCBldmVudCByZWdpc3Rlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19ldmVudF9hZGRyZXNzX2dldChOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y19ldmVudF90IGV2ZW50KTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiBhIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICB0YXNrICAgICAgICAgIFJlcXVlc3RlZCB0YXNrLg0KKyAqDQorICogQHJldHVybiAgICAgQWRkcmVzcyBvZiB0aGUgcmVxdWVzdGVkIHRhc2sgcmVnaXN0ZXIuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfdGFza19hZGRyZXNzX2dldChOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y190YXNrX3QgdGFzayk7DQorDQorLyoqQGJyaWVmIEZ1bmN0aW9uIGZvciBzdGFydGluZyBhIHRhc2suDQorICoNCisgKiBAcGFyYW1baW5dICBwX3J0YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dICB0YXNrICAgICAgICAgIFJlcXVlc3RlZCB0YXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfdGFza190cmlnZ2VyKE5SRl9SVENfVHlwZSAqIHBfcnRjLCBucmZfcnRjX3Rhc2tfdCB0YXNrKTsNCisNCisvKipAYnJpZWYgRnVuY3Rpb24gZm9yIGVuYWJsaW5nIGV2ZW50cy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIHBfcnRjICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gIG1hc2sgICAgICAgICAgTWFzayBvZiBldmVudCBmbGFncyB0byBlbmFibGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19ldmVudF9lbmFibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spOw0KKw0KKy8qKkBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIGFuIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSAgcF9ydGMgICAgICAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSAgZXZlbnQgICAgICAgICBSZXF1ZXN0ZWQgZXZlbnQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19ldmVudF9kaXNhYmxlKE5SRl9SVENfVHlwZSAqIHBfcnRjLCB1aW50MzJfdCBldmVudCk7DQorDQorLyoqDQorICpAfQ0KKyAqKi8NCisNCisNCisjaWZuZGVmIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTg0KKw0KK19fU1RBVElDX0lOTElORSAgdm9pZCBucmZfcnRjX2NjX3NldChOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgY2gsIHVpbnQzMl90IGNjX3ZhbCkNCit7DQorICAgIHBfcnRjLT5DQ1tjaF0gPSBjY192YWw7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSAgdWludDMyX3QgbnJmX3J0Y19jY19nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IGNoKQ0KK3sNCisgICAgcmV0dXJuIHBfcnRjLT5DQ1tjaF07DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfaW50X2VuYWJsZShOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgbWFzaykNCit7DQorICAgIHBfcnRjLT5JTlRFTlNFVCA9IG1hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfaW50X2Rpc2FibGUoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBwX3J0Yy0+SU5URU5DTFIgPSBtYXNrOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19pbnRfaXNfZW5hYmxlZChOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgbWFzaykNCit7DQorICAgIHJldHVybiAocF9ydGMtPklOVEVOU0VUICYgbWFzayk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX2ludF9nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMpDQorew0KKyAgICByZXR1cm4gcF9ydGMtPklOVEVOU0VUOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3J0Y19ldmVudF9wZW5kaW5nKE5SRl9SVENfVHlwZSAqIHBfcnRjLCBucmZfcnRjX2V2ZW50X3QgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKih2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKXBfcnRjICsgKHVpbnQzMl90KWV2ZW50KTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y19ldmVudF9jbGVhcihOUkZfUlRDX1R5cGUgKiBwX3J0YywgbnJmX3J0Y19ldmVudF90IGV2ZW50KQ0KK3sNCisgICAgKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilwX3J0YyArICh1aW50MzJfdClldmVudCkpID0gMDsNCisjaWYgX19DT1JURVhfTSA9PSAweDA0DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGR1bW15ID0gKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilwX3J0YyArICh1aW50MzJfdClldmVudCkpOw0KKyAgICAodm9pZClkdW1teTsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl9ydGNfY291bnRlcl9nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMpDQorew0KKyAgICAgcmV0dXJuIHBfcnRjLT5DT1VOVEVSOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX3ByZXNjYWxlcl9zZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIHVpbnQzMl90IHZhbCkNCit7DQorICAgIEFTU0VSVCh2YWwgPD0gKFJUQ19QUkVTQ0FMRVJfUFJFU0NBTEVSX01zayA+PiBSVENfUFJFU0NBTEVSX1BSRVNDQUxFUl9Qb3MpKTsNCisgICAgcF9ydGMtPlBSRVNDQUxFUiA9IHZhbDsNCit9DQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHJ0Y19wcmVzY2FsZXJfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjKQ0KK3sNCisgICAgcmV0dXJuIHBfcnRjLT5QUkVTQ0FMRVI7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX2V2ZW50X2FkZHJlc3NfZ2V0KE5SRl9SVENfVHlwZSAqIHBfcnRjLCBucmZfcnRjX2V2ZW50X3QgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90KXBfcnRjICsgZXZlbnQ7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfcnRjX3Rhc2tfYWRkcmVzc19nZXQoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfdGFza190IHRhc2spDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90KXBfcnRjICsgdGFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3J0Y190YXNrX3RyaWdnZXIoTlJGX1JUQ19UeXBlICogcF9ydGMsIG5yZl9ydGNfdGFza190IHRhc2spDQorew0KKyAgICAqKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KXBfcnRjICsgdGFzaykgPSAxOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfcnRjX2V2ZW50X2VuYWJsZShOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgbWFzaykNCit7DQorICAgIHBfcnRjLT5FVlRFTlNFVCA9IG1hc2s7DQorfQ0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl9ydGNfZXZlbnRfZGlzYWJsZShOUkZfUlRDX1R5cGUgKiBwX3J0YywgdWludDMyX3QgbWFzaykNCit7DQorICAgIHBfcnRjLT5FVlRFTkNMUiA9IG1hc2s7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8qIE5SRl9SVENfSCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3IvaGFsL25yZl91YXJ0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjFkZTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL2hhbC9ucmZfdWFydC5oCkBAIC0wLDAgKzEsNTQwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYsIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAqICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisjaWZuZGVmIE5SRl9VQVJUX0hfXw0KKyNkZWZpbmUgTlJGX1VBUlRfSF9fDQorDQorI2luY2x1ZGUgIm5yZi5oIg0KKyNpbmNsdWRlICJucmZfcGVyaXBoZXJhbHMuaCINCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdGRib29sLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLy9UZW1wb3JhcnkgZGVmaW5pbmcgbGVnYWN5IFVBUlQgZm9yIGluc3RhbmNlIDENCisjZGVmaW5lIE5SRl9VQVJUMSAoTlJGX1VBUlRfVHlwZSAqKU5SRl9VQVJURTENCisNCisvKioNCisgKiBAZGVmZ3JvdXAgbnJmX3VhcnRfaGFsIFVBUlQgSEFMDQorICogQHsNCisgKiBAaW5ncm91cCBucmZfdWFydA0KKyAqDQorICogQGJyaWVmIEhhcmR3YXJlIGFjY2VzcyBsYXllciBmb3IgYWNjZXNzaW5nIHRoZSBVQVJUIHBlcmlwaGVyYWwuDQorICovDQorDQorI2RlZmluZSBOUkZfVUFSVF9QU0VMX0RJU0NPTk5FQ1RFRCAweEZGRkZGRkZGDQorDQorLyoqDQorICogQGVudW0gbnJmX3VhcnRfdGFza190DQorICogQGJyaWVmIFVBUlQgdGFza3MuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICAvKmxpbnQgLXNhdmUgLWUzMCAtZXN5bSg2MjgsX19JTlRBRERSX18pKi8NCisgICAgTlJGX1VBUlRfVEFTS19TVEFSVFJYID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgVEFTS1NfU1RBUlRSWCksIC8qKjwgVGFzayBmb3Igc3RhcnRpbmcgcmVjZXB0aW9uLiAqLw0KKyAgICBOUkZfVUFSVF9UQVNLX1NUT1BSWCAgPSBvZmZzZXRvZihOUkZfVUFSVF9UeXBlLCBUQVNLU19TVE9QUlgpLCAgLyoqPCBUYXNrIGZvciBzdG9wcGluZyByZWNlcHRpb24uICovDQorICAgIE5SRl9VQVJUX1RBU0tfU1RBUlRUWCA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIFRBU0tTX1NUQVJUVFgpLCAvKio8IFRhc2sgZm9yIHN0YXJ0aW5nIHRyYW5zbWlzc2lvbi4gKi8NCisgICAgTlJGX1VBUlRfVEFTS19TVE9QVFggID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgVEFTS1NfU1RPUFRYKSwgIC8qKjwgVGFzayBmb3Igc3RvcHBpbmcgdHJhbnNtaXNzaW9uLiAqLw0KKyAgICBOUkZfVUFSVF9UQVNLX1NVU1BFTkQgPSBvZmZzZXRvZihOUkZfVUFSVF9UeXBlLCBUQVNLU19TVVNQRU5EKSwgLyoqPCBUYXNrIGZvciBzdXNwZW5kaW5nIFVBUlQuICovDQorICAgIC8qbGludCAtcmVzdG9yZSovDQorfSBucmZfdWFydF90YXNrX3Q7DQorDQorLyoqDQorICogQGVudW0gbnJmX3VhcnRfZXZlbnRfdA0KKyAqIEBicmllZiBVQVJUIGV2ZW50cy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIC8qbGludCAtc2F2ZSAtZTMwKi8NCisgICAgTlJGX1VBUlRfRVZFTlRfQ1RTICAgID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgRVZFTlRTX0NUUyksICAgLyoqPCBFdmVudCBmcm9tIENUUyBsaW5lIGFjdGl2YXRpb24uICovDQorICAgIE5SRl9VQVJUX0VWRU5UX05DVFMgICA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIEVWRU5UU19OQ1RTKSwgIC8qKjwgRXZlbnQgZnJvbSBDVFMgbGluZSBkZWFjdGl2YXRpb24uICovDQorICAgIE5SRl9VQVJUX0VWRU5UX1JYRFJEWSA9IG9mZnNldG9mKE5SRl9VQVJUX1R5cGUsIEVWRU5UU19SWERSRFkpLC8qKjwgRXZlbnQgZnJvbSBkYXRhIHJlYWR5IGluIFJYRC4gKi8NCisgICAgTlJGX1VBUlRfRVZFTlRfVFhEUkRZID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgRVZFTlRTX1RYRFJEWSksLyoqPCBFdmVudCBmcm9tIGRhdGEgc2VudCBmcm9tIFRYRC4gKi8NCisgICAgTlJGX1VBUlRfRVZFTlRfRVJST1IgID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgRVZFTlRTX0VSUk9SKSwgLyoqPCBFdmVudCBmcm9tIGVycm9yIGRldGVjdGlvbi4gKi8NCisgICAgTlJGX1VBUlRfRVZFTlRfUlhUTyAgID0gb2Zmc2V0b2YoTlJGX1VBUlRfVHlwZSwgRVZFTlRTX1JYVE8pICAgLyoqPCBFdmVudCBmcm9tIHJlY2VpdmVyIHRpbWVvdXQuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGludCAtcmVzdG9yZSovDQorfSBucmZfdWFydF9ldmVudF90Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl91YXJ0X2ludF9tYXNrX3QNCisgKiBAYnJpZWYgVUFSVCBpbnRlcnJ1cHRzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgLypsaW50IC1zYXZlIC1lMzAqLw0KKyAgICBOUkZfVUFSVF9JTlRfTUFTS19DVFMgICAgPSBVQVJUX0lOVEVOQ0xSX0NUU19Nc2ssICAgIC8qKjwgQ1RTIGxpbmUgYWN0aXZhdGlvbiBpbnRlcnJ1cHQuICovDQorICAgIE5SRl9VQVJUX0lOVF9NQVNLX05DVFMgICA9IFVBUlRfSU5URU5DTFJfTkNUU19Nc2ssICAgLyoqPCBDVFMgbGluZSBkZWFjdGl2YXRpb24gaW50ZXJydXB0LiAqLw0KKyAgICBOUkZfVUFSVF9JTlRfTUFTS19SWERSRFkgPSBVQVJUX0lOVEVOQ0xSX1JYRFJEWV9Nc2ssIC8qKjwgRGF0YSByZWFkeSBpbiBSWEQgaW50ZXJydXB0LiAqLw0KKyAgICBOUkZfVUFSVF9JTlRfTUFTS19UWERSRFkgPSBVQVJUX0lOVEVOQ0xSX1RYRFJEWV9Nc2ssICAvKio8IERhdGEgc2VudCBmcm9tIFRYRCBpbnRlcnJ1cHQuICovDQorICAgIE5SRl9VQVJUX0lOVF9NQVNLX0VSUk9SICA9IFVBUlRfSU5URU5DTFJfRVJST1JfTXNrLCAgLyoqPCBFcnJvciBkZXRlY3Rpb24gaW50ZXJydXB0LiAqLw0KKyAgICBOUkZfVUFSVF9JTlRfTUFTS19SWFRPICAgPSBVQVJUX0lOVEVOQ0xSX1JYVE9fTXNrICAgIC8qKjwgUmVjZWl2ZXIgdGltZW91dCBpbnRlcnJ1cHQuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbGludCAtcmVzdG9yZSovDQorfSBucmZfdWFydF9pbnRfbWFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl91YXJ0X2JhdWRyYXRlX3QNCisgKiBAYnJpZWYgQmF1ZHJhdGVzIHN1cHBvcnRlZCBieSBVQVJULg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisjaWZkZWYgVUFSVEVfUFJFU0VOVA0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xMjAwICAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDEyMDAsIC8qKjwgMTIwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8yNDAwICAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDI0MDAsIC8qKjwgMjQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV80ODAwICAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDQ4MDAsIC8qKjwgNDgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV85NjAwICAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDk2MDAsIC8qKjwgOTYwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xNDQwMCAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDE0NDAwLCAvKio8IDE0NDAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzE5MjAwICA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTkyMDAsIC8qKjwgMTkyMDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMjg4MDAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyODgwMCwgLyoqPCAyODgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8zODQwMCAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDM4NDAwLCAvKio8IDM4NDAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzU3NjAwICA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkNTc2MDAsIC8qKjwgNTc2MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfNzY4MDAgID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ3NjgwMCwgLyoqPCA3NjgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xMTUyMDAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDExNTIwMCwgLyoqPCAxMTUyMDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMjMwNDAwID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyMzA0MDAsIC8qKjwgMjMwNDAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzI1MDAwMCA9ICBVQVJURV9CQVVEUkFURV9CQVVEUkFURV9CYXVkMjUwMDAwLCAvKio8IDI1MDAwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV80NjA4MDAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDQ2MDgwMCwgLyoqPCA0NjA4MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfOTIxNjAwID0gIFVBUlRFX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ5MjE2MDAsIC8qKjwgOTIxNjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzEwMDAwMDAgPSAgVUFSVEVfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDFNLCAvKio8IDEwMDAwMDAgYmF1ZC4gKi8NCisjZWxzZQ0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xMjAwICAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTIwMCwgLyoqPCAxMjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzI0MDAgICA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyNDAwLCAvKio8IDI0MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfNDgwMCAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDQ4MDAsIC8qKjwgNDgwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV85NjAwICAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkOTYwMCwgLyoqPCA5NjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzE0NDAwICA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxNDQwMCwgLyoqPCAxNDQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV8xOTIwMCAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMTkyMDAsIC8qKjwgMTkyMDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfMjg4MDAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDI4ODAwLCAvKio8IDI4ODAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzM4NDAwICA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQzODQwMCwgLyoqPCAzODQwMCBiYXVkLiAqLw0KKyAgICBOUkZfVUFSVF9CQVVEUkFURV81NzYwMCAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkNTc2MDAsIC8qKjwgNTc2MDAgYmF1ZC4gKi8NCisgICAgTlJGX1VBUlRfQkFVRFJBVEVfNzY4MDAgID0gIFVBUlRfQkFVRFJBVEVfQkFVRFJBVEVfQmF1ZDc2ODAwLCAvKio8IDc2ODAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzExNTIwMCA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQxMTUyMDAsIC8qKjwgMTE1MjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzIzMDQwMCA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyMzA0MDAsIC8qKjwgMjMwNDAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzI1MDAwMCA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQyNTAwMDAsIC8qKjwgMjUwMDAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzQ2MDgwMCA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ0NjA4MDAsIC8qKjwgNDYwODAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzkyMTYwMCA9ICBVQVJUX0JBVURSQVRFX0JBVURSQVRFX0JhdWQ5MjE2MDAsIC8qKjwgOTIxNjAwIGJhdWQuICovDQorICAgIE5SRl9VQVJUX0JBVURSQVRFXzEwMDAwMDAgPSAgVUFSVF9CQVVEUkFURV9CQVVEUkFURV9CYXVkMU0sIC8qKjwgMTAwMDAwMCBiYXVkLiAqLw0KKyNlbmRpZg0KK30gbnJmX3VhcnRfYmF1ZHJhdGVfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfdWFydF9lcnJvcl9tYXNrX3QNCisgKiBAYnJpZWYgVHlwZXMgb2YgVUFSVCBlcnJvciBtYXNrcy4NCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgIE5SRl9VQVJUX0VSUk9SX09WRVJSVU5fTUFTSyA9IFVBUlRfRVJST1JTUkNfT1ZFUlJVTl9Nc2ssICAgLyoqPCBPdmVycnVuIGVycm9yLiAqLw0KKyAgICBOUkZfVUFSVF9FUlJPUl9QQVJJVFlfTUFTSyAgPSBVQVJUX0VSUk9SU1JDX1BBUklUWV9Nc2ssICAgIC8qKjwgUGFyaXR5IGVycm9yLiAqLw0KKyAgICBOUkZfVUFSVF9FUlJPUl9GUkFNSU5HX01BU0sgPSBVQVJUX0VSUk9SU1JDX0ZSQU1JTkdfTXNrLCAgIC8qKjwgRnJhbWluZyBlcnJvci4gKi8NCisgICAgTlJGX1VBUlRfRVJST1JfQlJFQUtfTUFTSyAgID0gVUFSVF9FUlJPUlNSQ19CUkVBS19Nc2ssICAgICAvKio8IEJyZWFrIGVycm9yLiAqLw0KK30gbnJmX3VhcnRfZXJyb3JfbWFza190Ow0KKw0KKy8qKg0KKyAqIEBlbnVtIG5yZl91YXJ0X3Bhcml0eV90DQorICogQGJyaWVmIFR5cGVzIG9mIFVBUlQgcGFyaXR5IG1vZGVzLg0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgTlJGX1VBUlRfUEFSSVRZX0VYQ0xVREVEID0gVUFSVF9DT05GSUdfUEFSSVRZX0V4Y2x1ZGVkIDw8IFVBUlRfQ09ORklHX1BBUklUWV9Qb3MsIC8qKjwgUGFyaXR5IGV4Y2x1ZGVkLiAqLw0KKyAgICBOUkZfVUFSVF9QQVJJVFlfSU5DTFVERUQgPSBVQVJUX0NPTkZJR19QQVJJVFlfSW5jbHVkZWQgPDwgVUFSVF9DT05GSUdfUEFSSVRZX1BvcywgLyoqPCBQYXJpdHkgaW5jbHVkZWQuICovDQorfSBucmZfdWFydF9wYXJpdHlfdDsNCisNCisvKioNCisgKiBAZW51bSBucmZfdWFydF9od2ZjX3QNCisgKiBAYnJpZWYgVHlwZXMgb2YgVUFSVCBmbG93IGNvbnRyb2wgbW9kZXMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBOUkZfVUFSVF9IV0ZDX0RJU0FCTEVEID0gVUFSVF9DT05GSUdfSFdGQ19EaXNhYmxlZCwgLyoqPCBIVyBmbG93IGNvbnRyb2wgZGlzYWJsZWQuICovDQorICAgIE5SRl9VQVJUX0hXRkNfRU5BQkxFRCAgPSBVQVJUX0NPTkZJR19IV0ZDX0VuYWJsZWQsICAvKio8IEhXIGZsb3cgY29udHJvbCBlbmFibGVkLiAqLw0KK30gbnJmX3VhcnRfaHdmY190Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2xlYXJpbmcgYSBzcGVjaWZpYyBVQVJUIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSBwX3JlZyAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbVtpbl0gZXZlbnQgIEV2ZW50IHRvIGNsZWFyLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2V2ZW50X2NsZWFyKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF9ldmVudF90IGV2ZW50KTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGNoZWNraW5nIHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIFVBUlQgZXZlbnQuDQorICoNCisgKiBAcGFyYW1baW5dIHBfcmVnICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtW2luXSBldmVudCAgRXZlbnQgdG8gY2hlY2suDQorICoNCisgKiBAcmV0dmFsIFRydWUgaWYgZXZlbnQgaXMgc2V0LCBGYWxzZSBvdGhlcndpc2UuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3VhcnRfZXZlbnRfY2hlY2soTlJGX1VBUlRfVHlwZSAqcF9yZWcsIG5yZl91YXJ0X2V2ZW50X3QgZXZlbnQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgVUFSVCBldmVudCByZWdpc3Rlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9yZWcgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIGV2ZW50ICBEZXNpcmVkIGV2ZW50Lg0KKyAqDQorICogQHJldHZhbCBBZGRyZXNzIG9mIHNwZWNpZmllZCBldmVudCByZWdpc3Rlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfZXZlbnRfYWRkcmVzc19nZXQoTlJGX1VBUlRfVHlwZSAgICpwX3JlZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3VhcnRfZXZlbnRfdCAgZXZlbnQpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZW5hYmxpbmcgYSBzcGVjaWZpYyBpbnRlcnJ1cHQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBpbnRfbWFzayBJbnRlcnJ1cHRzIHRvIGVuYWJsZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9pbnRfZW5hYmxlKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50MzJfdCBpbnRfbWFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBzdGF0ZSBvZiBhIGdpdmVuIGludGVycnVwdC4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBpbnRfbWFzayAgTWFzayBvZiBpbnRlcnJ1cHQgdG8gY2hlY2suDQorICoNCisgKiBAcmV0dmFsIHRydWUgIElmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4NCisgKiBAcmV0dmFsIGZhbHNlIElmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IGVuYWJsZWQuDQorICovDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3VhcnRfaW50X2VuYWJsZV9jaGVjayhOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDMyX3QgaW50X21hc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIHNwZWNpZmljIGludGVycnVwdHMuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBpbnRfbWFzayBJbnRlcnJ1cHRzIHRvIGRpc2FibGUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaW50X2Rpc2FibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQzMl90IGludF9tYXNrKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgZXJyb3Igc291cmNlIG1hc2suIEZ1bmN0aW9uIGlzIGNsZWFyaW5nIGVycm9yIHNvdXJjZSBmbGFncyBhZnRlciByZWFkaW5nLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcmV0dXJuICAgICAgICAgTWFzayB3aXRoIGVycm9yIHNvdXJjZSBmbGFncy4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfZXJyb3JzcmNfZ2V0X2FuZF9jbGVhcihOUkZfVUFSVF9UeXBlICpwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBlbmFibGluZyBVQVJULg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9lbmFibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZGlzYWJsaW5nIFVBUlQuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2Rpc2FibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgVFgvUlggcGlucy4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHBzZWx0eGQgIFRYRCBwaW4gbnVtYmVyLg0KKyAqIEBwYXJhbSBwc2VscnhkICBSWEQgcGluIG51bWJlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF90eHJ4X3BpbnNfc2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50MzJfdCBwc2VsdHhkLCB1aW50MzJfdCBwc2VscnhkKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGRpc2Nvbm5lY3RpbmcgVFgvUlggcGlucy4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICovDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfdHhyeF9waW5zX2Rpc2Nvbm5lY3QoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgZ2V0dGluZyBUWCBwaW4uDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF90eF9waW5fZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKTsNCisNCisvKioNCisgKiBAYnJpZWYgRnVuY3Rpb24gZm9yIGdldHRpbmcgUlggcGluLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfcnhfcGluX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIFJUUyBwaW4uDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF9ydHNfcGluX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBnZXR0aW5nIENUUyBwaW4uDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF9jdHNfcGluX2dldChOUkZfVUFSVF9UeXBlICpwX3JlZyk7DQorDQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyBmbG93IGNvbnRyb2wgcGlucy4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyAgICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHBzZWxydHMgIFJUUyBwaW4gbnVtYmVyLg0KKyAqIEBwYXJhbSBwc2VsY3RzICBDVFMgcGluIG51bWJlci4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9od2ZjX3BpbnNfc2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHBzZWxydHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgcHNlbGN0cyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBkaXNjb25uZWN0aW5nIGZsb3cgY29udHJvbCBwaW5zLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9od2ZjX3BpbnNfZGlzY29ubmVjdChOUkZfVUFSVF9UeXBlICpwX3JlZyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIFJYIGRhdGEuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEByZXR1cm4gICAgICAgICBSZWNlaXZlZCBieXRlLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50OF90IG5yZl91YXJ0X3J4ZF9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3Igc2V0dGluZyBUeCBkYXRhLg0KKyAqDQorICogQHBhcmFtIHBfcmVnICAgIFBvaW50ZXIgdG8gdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdHhkICAgICAgQnl0ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF90eGRfc2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50OF90IHR4ZCk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzdGFydGluZyBhbiBVQVJUIHRhc2suDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSB0YXNrICAgICBUYXNrLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X3Rhc2tfdHJpZ2dlcihOUkZfVUFSVF9UeXBlICpwX3JlZywgbnJmX3VhcnRfdGFza190IHRhc2spOw0KKw0KKy8qKg0KKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgdGFzayByZWdpc3Rlci4NCisgKg0KKyAqIEBwYXJhbSBwX3JlZyBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHRhc2sgIFRhc2suDQorICoNCisgKiBAcmV0dXJuICAgICAgVGFzayBhZGRyZXNzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF90YXNrX2FkZHJlc3NfZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF90YXNrX3QgdGFzayk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBjb25maWd1cmluZyBVQVJULg0KKyAqDQorICogQHBhcmFtIHBfcmVnICBQb2ludGVyIHRvIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIGh3ZmMgICBIYXJkd2FyZSBmbG93IGNvbnRyb2wuIEVuYWJsZWQgaWYgdHJ1ZS4NCisgKiBAcGFyYW0gcGFyaXR5IFBhcml0eS4gSW5jbHVkZWQgaWYgdHJ1ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9jb25maWd1cmUoTlJGX1VBUlRfVHlwZSAgICAqcF9yZWcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl91YXJ0X3Bhcml0eV90IHBhcml0eSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3VhcnRfaHdmY190ICAgaHdmYyk7DQorDQorLyoqDQorICogQGJyaWVmIEZ1bmN0aW9uIGZvciBzZXR0aW5nIFVBUlQgYmF1ZHJhdGUuDQorICoNCisgKiBAcGFyYW0gcF9yZWcgICAgUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSBiYXVkcmF0ZSBCYXVkcmF0ZS4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9iYXVkcmF0ZV9zZXQoTlJGX1VBUlRfVHlwZSAgICAqcF9yZWcsIG5yZl91YXJ0X2JhdWRyYXRlX3QgYmF1ZHJhdGUpOw0KKw0KKyNpZm5kZWYgU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfZXZlbnRfY2xlYXIoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIG5yZl91YXJ0X2V2ZW50X3QgZXZlbnQpDQorew0KKyAgICAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgodWludDhfdCAqKXBfcmVnICsgKHVpbnQzMl90KWV2ZW50KSkgPSAweDBVTDsNCisjaWYgX19DT1JURVhfTSA9PSAweDA0DQorICAgIHZvbGF0aWxlIHVpbnQzMl90IGR1bW15ID0gKigodm9sYXRpbGUgdWludDMyX3QgKikoKHVpbnQ4X3QgKilwX3JlZyArICh1aW50MzJfdClldmVudCkpOw0KKyAgICAodm9pZClkdW1teTsNCisjZW5kaWYNCisNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3VhcnRfZXZlbnRfY2hlY2soTlJGX1VBUlRfVHlwZSAqcF9yZWcsIG5yZl91YXJ0X2V2ZW50X3QgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKGJvb2wpICogKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopcF9yZWcgKyAodWludDMyX3QpZXZlbnQpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfZXZlbnRfYWRkcmVzc19nZXQoTlJGX1VBUlRfVHlwZSAgICpwX3JlZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJmX3VhcnRfZXZlbnRfdCAgZXZlbnQpDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90KSgodWludDhfdCAqKXBfcmVnICsgKHVpbnQzMl90KWV2ZW50KTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaW50X2VuYWJsZShOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDMyX3QgaW50X21hc2spDQorew0KKyAgICBwX3JlZy0+SU5URU5TRVQgPSBpbnRfbWFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIGJvb2wgbnJmX3VhcnRfaW50X2VuYWJsZV9jaGVjayhOUkZfVUFSVF9UeXBlICpwX3JlZywgdWludDMyX3QgaW50X21hc2spDQorew0KKyAgICByZXR1cm4gKGJvb2wpKHBfcmVnLT5JTlRFTlNFVCAmIGludF9tYXNrKTsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaW50X2Rpc2FibGUoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQzMl90IGludF9tYXNrKQ0KK3sNCisgICAgcF9yZWctPklOVEVOQ0xSID0gaW50X21hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF9lcnJvcnNyY19nZXRfYW5kX2NsZWFyKE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisgICAgdWludDMyX3QgZXJyc3JjX21hc2sgPSBwX3JlZy0+RVJST1JTUkM7DQorICAgIHBfcmVnLT5FUlJPUlNSQyA9IGVycnNyY19tYXNrOw0KKyAgICByZXR1cm4gZXJyc3JjX21hc2s7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X2VuYWJsZShOUkZfVUFSVF9UeXBlICpwX3JlZykNCit7DQorICAgIHBfcmVnLT5FTkFCTEUgPSBVQVJUX0VOQUJMRV9FTkFCTEVfRW5hYmxlZDsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfZGlzYWJsZShOUkZfVUFSVF9UeXBlICpwX3JlZykNCit7DQorICAgIHBfcmVnLT5FTkFCTEUgPSBVQVJUX0VOQUJMRV9FTkFCTEVfRGlzYWJsZWQ7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X3R4cnhfcGluc19zZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQzMl90IHBzZWx0eGQsIHVpbnQzMl90IHBzZWxyeGQpDQorew0KKyNpZiBkZWZpbmVkKFVBUlRfUFNFTF9SWERfQ09OTkVDVF9Qb3MpDQorICAgIHBfcmVnLT5QU0VMLlJYRCA9IHBzZWxyeGQ7DQorI2Vsc2UNCisgICAgcF9yZWctPlBTRUxSWEQgPSBwc2VscnhkOw0KKyNlbmRpZg0KKyNpZiBkZWZpbmVkKFVBUlRfUFNFTF9UWERfQ09OTkVDVF9Qb3MpDQorICAgIHBfcmVnLT5QU0VMLlRYRCA9IHBzZWx0eGQ7DQorI2Vsc2UNCisgICAgcF9yZWctPlBTRUxUWEQgPSBwc2VsdHhkOw0KKyNlbmRpZg0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF90eHJ4X3BpbnNfZGlzY29ubmVjdChOUkZfVUFSVF9UeXBlICpwX3JlZykNCit7DQorICAgIG5yZl91YXJ0X3R4cnhfcGluc19zZXQocF9yZWcsIE5SRl9VQVJUX1BTRUxfRElTQ09OTkVDVEVELCBOUkZfVUFSVF9QU0VMX0RJU0NPTk5FQ1RFRCk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF90eF9waW5fZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfVFhEX0NPTk5FQ1RfUG9zKQ0KKyAgICByZXR1cm4gcF9yZWctPlBTRUwuVFhEOw0KKyNlbHNlDQorICAgIHJldHVybiBwX3JlZy0+UFNFTFRYRDsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IG5yZl91YXJ0X3J4X3Bpbl9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyNpZiBkZWZpbmVkKFVBUlRfUFNFTF9SWERfQ09OTkVDVF9Qb3MpDQorICAgIHJldHVybiBwX3JlZy0+UFNFTC5SWEQ7DQorI2Vsc2UNCisgICAgcmV0dXJuIHBfcmVnLT5QU0VMUlhEOw0KKyNlbmRpZg0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfcnRzX3Bpbl9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyNpZiBkZWZpbmVkKFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9Qb3MpDQorICAgIHJldHVybiBwX3JlZy0+UFNFTC5SVFM7DQorI2Vsc2UNCisgICAgcmV0dXJuIHBfcmVnLT5QU0VMUlRTOw0KKyNlbmRpZg0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgbnJmX3VhcnRfY3RzX3Bpbl9nZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyNpZiBkZWZpbmVkKFVBUlRfUFNFTF9SVFNfQ09OTkVDVF9Qb3MpDQorICAgIHJldHVybiBwX3JlZy0+UFNFTC5DVFM7DQorI2Vsc2UNCisgICAgcmV0dXJuIHBfcmVnLT5QU0VMQ1RTOw0KKyNlbmRpZg0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9od2ZjX3BpbnNfc2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCB1aW50MzJfdCBwc2VscnRzLCB1aW50MzJfdCBwc2VsY3RzKQ0KK3sNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfUlRTX0NPTk5FQ1RfUG9zKQ0KKyAgICBwX3JlZy0+UFNFTC5SVFMgPSBwc2VscnRzOw0KKyNlbHNlDQorICAgIHBfcmVnLT5QU0VMUlRTID0gcHNlbHJ0czsNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChVQVJUX1BTRUxfUlRTX0NPTk5FQ1RfUG9zKQ0KKyAgICBwX3JlZy0+UFNFTC5DVFMgPSBwc2VsY3RzOw0KKyNlbHNlDQorICAgIHBfcmVnLT5QU0VMQ1RTID0gcHNlbGN0czsNCisjZW5kaWYNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfaHdmY19waW5zX2Rpc2Nvbm5lY3QoTlJGX1VBUlRfVHlwZSAqcF9yZWcpDQorew0KKyAgICBucmZfdWFydF9od2ZjX3BpbnNfc2V0KHBfcmVnLCBOUkZfVUFSVF9QU0VMX0RJU0NPTk5FQ1RFRCwgTlJGX1VBUlRfUFNFTF9ESVNDT05ORUNURUQpOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBucmZfdWFydF9yeGRfZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnKQ0KK3sNCisgICAgcmV0dXJuIHBfcmVnLT5SWEQ7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIG5yZl91YXJ0X3R4ZF9zZXQoTlJGX1VBUlRfVHlwZSAqcF9yZWcsIHVpbnQ4X3QgdHhkKQ0KK3sNCisgICAgcF9yZWctPlRYRCA9IHR4ZDsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfdGFza190cmlnZ2VyKE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF90YXNrX3QgdGFzaykNCit7DQorICAgICooKHZvbGF0aWxlIHVpbnQzMl90ICopKCh1aW50OF90ICopcF9yZWcgKyAodWludDMyX3QpdGFzaykpID0gMHgxVUw7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBucmZfdWFydF90YXNrX2FkZHJlc3NfZ2V0KE5SRl9VQVJUX1R5cGUgKnBfcmVnLCBucmZfdWFydF90YXNrX3QgdGFzaykNCit7DQorICAgIHJldHVybiAodWludDMyX3QpcF9yZWcgKyAodWludDMyX3QpdGFzazsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHZvaWQgbnJmX3VhcnRfY29uZmlndXJlKE5SRl9VQVJUX1R5cGUgICAgKnBfcmVnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmZfdWFydF9wYXJpdHlfdCBwYXJpdHksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yZl91YXJ0X2h3ZmNfdCAgIGh3ZmMpDQorew0KKyAgICBwX3JlZy0+Q09ORklHID0gKHVpbnQzMl90KXBhcml0eSB8ICh1aW50MzJfdClod2ZjOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBucmZfdWFydF9iYXVkcmF0ZV9zZXQoTlJGX1VBUlRfVHlwZSAgICAqcF9yZWcsIG5yZl91YXJ0X2JhdWRyYXRlX3QgYmF1ZHJhdGUpDQorew0KKyAgICBwX3JlZy0+QkFVRFJBVEUgPSBiYXVkcmF0ZTsNCit9DQorI2VuZGlmIC8vU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvL05SRl9VQVJUX0hfXw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc2VnZ2VyX3J0dC9TRUdHRVJfUlRULmMgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTZmMzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVC5jCkBAIC0wLDAgKzEsMTI2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICBTRUdHRVIgTUlDUk9DT05UUk9MTEVSIEdtYkggJiBDby4gS0cgICAgICAgICAgICAgICAgICoNCisqICAgICAgIFNvbHV0aW9ucyBmb3IgcmVhbCB0aW1lIG1pY3JvY29udHJvbGxlciBhcHBsaWNhdGlvbnMgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgIChjKSAyMDE0IC0gMjAxNSAgU0VHR0VSIE1pY3JvY29udHJvbGxlciBHbWJIICYgQ28uIEtHICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgd3d3LnNlZ2dlci5jb20gICAgIFN1cHBvcnQ6IHN1cHBvcnRAc2VnZ2VyLmNvbSAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogKiBUaGlzIHNvZnR3YXJlIG1heSBpbiBpdHMgdW5tb2RpZmllZCBmb3JtIGJlIGZyZWVseSByZWRpc3RyaWJ1dGVkICoNCisqICAgaW4gc291cmNlIGZvcm0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAqIFRoZSBzb3VyY2UgY29kZSBtYXkgYmUgbW9kaWZpZWQsIHByb3ZpZGVkIHRoZSBzb3VyY2UgY29kZSAgICAgICAgKg0KKyogICByZXRhaW5zIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgICoNCisqICAgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAqIE1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGxpbmthYmxlIGZvcm0gICAgKg0KKyogICBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIHdpdGhvdXQgcHJpb3IgY29uc2VudCBvZiBTRUdHRVIuICAgICAgICAgICoNCisqICogVGhpcyBzb2Z0d2FyZSBtYXkgb25seSBiZSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggU0VHR0VSICAgICAqDQorKiAgIEotTGluayBkZWJ1ZyBwcm9iZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCAgICAgICAgICAgICAqDQorKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCAgICAgICAgKg0KKyogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICoNCisqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFICAgICAgICAgICAqDQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBTRUdHRVIgTWljcm9jb250cm9sbGVyIEJFIExJQUJMRSBGT1IgKg0KKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgICAgICAgICAgICoNCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UICAqDQorKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgICAgKg0KKyogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgICAgICoNCisqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgICAgICAgICAqDQorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSAgKg0KKyogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCAgICoNCisqIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FTkQtT0YtSEVBREVSLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorRmlsZSAgICA6IFNFR0dFUl9SVFQuYw0KK1B1cnBvc2UgOiBJbXBsZW1lbnRhdGlvbiBvZiBTRUdHRVIgcmVhbC10aW1lIHRyYW5zZmVyIChSVFQpIHdoaWNoDQorICAgICAgICAgIGFsbG93cyByZWFsLXRpbWUgY29tbXVuaWNhdGlvbiBvbiB0YXJnZXRzIHdoaWNoIHN1cHBvcnQNCisgICAgICAgICAgZGVidWdnZXIgbWVtb3J5IGFjY2Vzc2VzIHdoaWxlIHRoZSBDUFUgaXMgcnVubmluZy4NCisNCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uOg0KKyAgICAgICAgICBUeXBlICJpbnQiIGlzIGFzc3VtZWQgdG8gYmUgMzItYml0cyBpbiBzaXplDQorICAgICAgICAgIEgtPlQgICAgSG9zdCB0byB0YXJnZXQgY29tbXVuaWNhdGlvbg0KKyAgICAgICAgICBULT5IICAgIFRhcmdldCB0byBob3N0IGNvbW11bmljYXRpb24NCisNCisgICAgICAgICAgUlRUIGNoYW5uZWwgMCBpcyBhbHdheXMgcHJlc2VudCBhbmQgcmVzZXJ2ZWQgZm9yIFRlcm1pbmFsIHVzYWdlLg0KKyAgICAgICAgICBOYW1lIGlzIGZpeGVkIHRvICJUZXJtaW5hbCINCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKi8NCisNCisjaW5jbHVkZSAiU0VHR0VSX1JUVC5oIg0KKw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgICAgICAgIC8vIGZvciBtZW1jcHkNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgQ29uZmlndXJhdGlvbiwgZGVmYXVsdCB2YWx1ZXMNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorDQorI2lmbmRlZiAgIEJVRkZFUl9TSVpFX1VQDQorI2RlZmluZSBCVUZGRVJfU0laRV9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0ICAvLyBTaXplIG9mIHRoZSBidWZmZXIgZm9yIHRlcm1pbmFsIG91dHB1dCBvZiB0YXJnZXQsIHVwIHRvIGhvc3QNCisjZW5kaWYNCisNCisjaWZuZGVmICAgQlVGRkVSX1NJWkVfRE9XTg0KKyNkZWZpbmUgQlVGRkVSX1NJWkVfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgICAgLy8gU2l6ZSBvZiB0aGUgYnVmZmVyIGZvciB0ZXJtaW5hbCBpbnB1dCB0byB0YXJnZXQgZnJvbSBob3N0IChVc3VhbGx5IGtleWJvYXJkIGlucHV0KQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBTRUdHRVJfUlRUX01BWF9OVU1fVVBfQlVGRkVSUw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NQVhfTlVNX1VQX0JVRkZFUlMgICAgICAgICAgICAgICAgICAgIDIgICAgLy8gTnVtYmVyIG9mIHVwLWJ1ZmZlcnMgKFQtPkgpIGF2YWlsYWJsZSBvbiB0aGlzIHRhcmdldA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBTRUdHRVJfUlRUX01BWF9OVU1fRE9XTl9CVUZGRVJTDQorI2RlZmluZSBTRUdHRVJfUlRUX01BWF9OVU1fRE9XTl9CVUZGRVJTICAgICAgICAgICAgICAgICAgMiAgICAvLyBOdW1iZXIgb2YgZG93bi1idWZmZXJzIChILT5UKSBhdmFpbGFibGUgb24gdGhpcyB0YXJnZXQNCisjZW5kaWYNCisNCisjaWZuZGVmICAgU0VHR0VSX1JUVF9NT0RFX0RFRkFVTFQNCisjZGVmaW5lIFNFR0dFUl9SVFRfTU9ERV9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19TS0lQDQorI2VuZGlmDQorDQorI2lmbmRlZiAgIFNFR0dFUl9SVFRfTE9DSw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpDQorI2VuZGlmDQorDQorI2lmbmRlZiAgIFNFR0dFUl9SVFRfVU5MT0NLDQorI2RlZmluZSBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgICBTVFJMRU4NCisjZGVmaW5lIFNUUkxFTihhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigoYSkpDQorI2VuZGlmDQorDQorI2lmbmRlZiAgIE1FTUNQWQ0KKyNkZWZpbmUgTUVNQ1BZKHBEZXN0LCBwU3JjLCBOdW1CeXRlcykgICAgICAgICAgICAgICAgICAgbWVtY3B5KChwRGVzdCksIChwU3JjKSwgKE51bUJ5dGVzKSkNCisjZW5kaWYNCisNCisjaWZuZGVmICAgTUlODQorI2RlZmluZSBNSU4oYSwgYikgICAgICAgICAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpDQorI2VuZGlmDQorDQorI2lmbmRlZiAgIE1BWA0KKyNkZWZpbmUgTUFYKGEsIGIpICAgICAgICAgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQ0KKyNlbmRpZg0KKy8vDQorLy8gRm9yIHNvbWUgZW52aXJvbm1lbnRzLCBOVUxMIG1heSBub3QgYmUgZGVmaW5lZCB1bnRpbCBjZXJ0YWluIGhlYWRlcnMgYXJlIGluY2x1ZGVkDQorLy8NCisjaWZuZGVmIE5VTEwNCisjZGVmaW5lIE5VTEwgMA0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTdGF0aWMgY29uc3QgZGF0YQ0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCisNCitzdGF0aWMgdW5zaWduZWQgY2hhciBfYVRlcm1pbmFsSWRbMTZdID0geyAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicgfTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU3RhdGljIGRhdGENCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorLy8NCisvLyBBbGxvY2F0ZSBidWZmZXJzIGZvciBjaGFubmVsIDANCisvLw0KK3N0YXRpYyBjaGFyIF9hY1VwQnVmZmVyICBbQlVGRkVSX1NJWkVfVVBdOw0KK3N0YXRpYyBjaGFyIF9hY0Rvd25CdWZmZXJbQlVGRkVSX1NJWkVfRE9XTl07DQorLy8NCisvLyBJbml0aWFsaXplIFNFR0dFUiBSZWFsLXRpbWUtVGVybWluYWwgY29udHJvbCBibG9jayAoQ0IpDQorLy8NCitTRUdHRVJfUlRUX0NCIF9TRUdHRVJfUlRUOw0KKw0KK3N0YXRpYyBjaGFyIF9BY3RpdmVUZXJtaW5hbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU3RhdGljIGZ1bmN0aW9ucw0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgX0RvSW5pdCgpDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBJbml0aWFsaXplcyB0aGUgY29udHJvbCBibG9jayBhbiBidWZmZXJzLg0KKyogICAgTWF5IG9ubHkgYmUgY2FsbGVkIHZpYSBJTklUKCkgdG8gYXZvaWQgb3ZlcnJpZGluZyBzZXR0aW5ncy4NCisqDQorKi8NCisjZGVmaW5lIElOSVQoKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgIGlmIChfU0VHR0VSX1JUVC5hY0lEWzBdID09ICdcMCcpIHsgX0RvSW5pdCgpOyB9ICBcDQorICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApDQorc3RhdGljIHZvaWQgX0RvSW5pdCh2b2lkKQ0KK3sNCisgICAgU0VHR0VSX1JUVF9DQiAqcDsNCisgICAgLy8NCisgICAgLy8gSW5pdGlhbGl6ZSBjb250cm9sIGJsb2NrDQorICAgIC8vDQorICAgIHAgPSAmX1NFR0dFUl9SVFQ7DQorICAgIHAtPk1heE51bVVwQnVmZmVycyAgICA9IFNFR0dFUl9SVFRfTUFYX05VTV9VUF9CVUZGRVJTOw0KKyAgICBwLT5NYXhOdW1Eb3duQnVmZmVycyAgPSBTRUdHRVJfUlRUX01BWF9OVU1fRE9XTl9CVUZGRVJTOw0KKyAgICAvLw0KKyAgICAvLyBJbml0aWFsaXplIHVwIGJ1ZmZlciAwDQorICAgIC8vDQorICAgIHAtPmFVcFswXS5zTmFtZSAgICAgICAgID0gIlRlcm1pbmFsIjsNCisgICAgcC0+YVVwWzBdLnBCdWZmZXIgICAgICAgPSBfYWNVcEJ1ZmZlcjsNCisgICAgcC0+YVVwWzBdLlNpemVPZkJ1ZmZlciAgPSBzaXplb2YoX2FjVXBCdWZmZXIpOw0KKyAgICBwLT5hVXBbMF0uUmRPZmYgICAgICAgICA9IDB1Ow0KKyAgICBwLT5hVXBbMF0uV3JPZmYgICAgICAgICA9IDB1Ow0KKyAgICBwLT5hVXBbMF0uRmxhZ3MgICAgICAgICA9IFNFR0dFUl9SVFRfTU9ERV9ERUZBVUxUOw0KKyAgICAvLw0KKyAgICAvLyBJbml0aWFsaXplIGRvd24gYnVmZmVyIDANCisgICAgLy8NCisgICAgcC0+YURvd25bMF0uc05hbWUgICAgICAgICA9ICJUZXJtaW5hbCI7DQorICAgIHAtPmFEb3duWzBdLnBCdWZmZXIgICAgICAgPSBfYWNEb3duQnVmZmVyOw0KKyAgICBwLT5hRG93blswXS5TaXplT2ZCdWZmZXIgID0gc2l6ZW9mKF9hY0Rvd25CdWZmZXIpOw0KKyAgICBwLT5hRG93blswXS5SZE9mZiAgICAgICAgID0gMHU7DQorICAgIHAtPmFEb3duWzBdLldyT2ZmICAgICAgICAgPSAwdTsNCisgICAgcC0+YURvd25bMF0uRmxhZ3MgICAgICAgICA9IFNFR0dFUl9SVFRfTU9ERV9ERUZBVUxUOw0KKyAgICAvLw0KKyAgICAvLyBGaW5pc2ggaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbnRyb2wgYmxvY2suDQorICAgIC8vIENvcHkgSWQgc3RyaW5nIGluIHRocmVlIHN0ZXBzIHRvIG1ha2Ugc3VyZSAiU0VHR0VSIFJUVCIgaXMgbm90IGZvdW5kDQorICAgIC8vIGluIGluaXRpYWxpemVyIG1lbW9yeSAodXN1YWxseSBmbGFzaCkgYnkgSi1MaW5rDQorICAgIC8vDQorICAgIHN0cmNweSgmcC0+YWNJRFs3XSwgIlJUVCIpOw0KKyAgICBzdHJjcHkoJnAtPmFjSURbMF0sICJTRUdHRVIiKTsNCisgICAgcC0+YWNJRFs2XSA9ICcgJzsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIF9Xcml0ZUJsb2NraW5nKCkNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFN0b3JlcyBhIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBTRUdHRVIgUlRUIHJpbmcgYnVmZmVyDQorKiAgICBhbmQgdXBkYXRlcyB0aGUgYXNzb2NpYXRlZCB3cml0ZSBwb2ludGVyIHdoaWNoIGlzIHBlcmlvZGljYWxseQ0KKyogICAgcmVhZCBieSB0aGUgaG9zdC4NCisqICAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSB3cml0ZSBjaHVuayBzaXplcyBhcw0KKyogICAgX1dyaXRlQmxvY2tpbmcoKSB3aWxsIGJsb2NrIHVudGlsIGFsbCBkYXRhIGhhcyBiZWVuIHBvc3RlZCBzdWNjZXNzZnVsbHkuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIHBSaW5nICAgICAgICBSaW5nIGJ1ZmZlciB0byBwb3N0IHRvLg0KKyogICAgcEJ1ZmZlciAgICAgIFBvaW50ZXIgdG8gY2hhcmFjdGVyIGFycmF5LiBEb2VzIG5vdCBuZWVkIHRvIHBvaW50IHRvIGEgXDAgdGVybWluYXRlZCBzdHJpbmcuDQorKiAgICBOdW1CeXRlcyAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN0b3JlZCBpbiB0aGUgU0VHR0VSIFJUVCBjb250cm9sIGJsb2NrLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgID49IDAgLSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIGJ1ZmZlci4NCisqLw0KK3N0YXRpYyB1bnNpZ25lZCBfV3JpdGVCbG9ja2luZyhTRUdHRVJfUlRUX1JJTkdfQlVGRkVSICpwUmluZywgY29uc3QgY2hhciAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpDQorew0KKyAgICB1bnNpZ25lZCBOdW1CeXRlc1RvV3JpdGU7DQorICAgIHVuc2lnbmVkIE51bUJ5dGVzV3JpdHRlbjsNCisgICAgdW5zaWduZWQgUmRPZmY7DQorICAgIHVuc2lnbmVkIFdyT2ZmOw0KKyAgICAvLw0KKyAgICAvLyBXcml0ZSBkYXRhIHRvIGJ1ZmZlciBhbmQgaGFuZGxlIHdyYXAtYXJvdW5kIGlmIG5lY2Vzc2FyeQ0KKyAgICAvLw0KKyAgICBOdW1CeXRlc1dyaXR0ZW4gPSAwdTsNCisgICAgV3JPZmYgPSBwUmluZy0+V3JPZmY7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIFJkT2ZmID0gcFJpbmctPlJkT2ZmOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXkgYmUgY2hhbmdlZCBieSBob3N0IChkZWJ1ZyBwcm9iZSkgaW4gdGhlIG1lYW50aW1lDQorDQorICAgICAgICBpZiAoUmRPZmYgPiBXck9mZikNCisgICAgICAgIHsNCisgICAgICAgICAgICBOdW1CeXRlc1RvV3JpdGUgPSBSZE9mZiAtIFdyT2ZmIC0gMXU7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgTnVtQnl0ZXNUb1dyaXRlID0gcFJpbmctPlNpemVPZkJ1ZmZlciAtIChXck9mZiAtIFJkT2ZmICsgMXUpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgTnVtQnl0ZXNUb1dyaXRlID0gTUlOKE51bUJ5dGVzVG9Xcml0ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocFJpbmctPlNpemVPZkJ1ZmZlciAtIFdyT2ZmKSk7ICAgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdW50aWwgYnVmZmVyIHdyYXAtYXJvdW5kDQorICAgICAgICBOdW1CeXRlc1RvV3JpdGUgPSBNSU4oTnVtQnl0ZXNUb1dyaXRlLCBOdW1CeXRlcyk7DQorICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIgKyBXck9mZiwgcEJ1ZmZlciwgTnVtQnl0ZXNUb1dyaXRlKTsNCisgICAgICAgIE51bUJ5dGVzV3JpdHRlbiArPSBOdW1CeXRlc1RvV3JpdGU7DQorICAgICAgICBwQnVmZmVyICAgICAgICAgKz0gTnVtQnl0ZXNUb1dyaXRlOw0KKyAgICAgICAgTnVtQnl0ZXMgICAgICAgIC09IE51bUJ5dGVzVG9Xcml0ZTsNCisgICAgICAgIFdyT2ZmICAgICAgICAgICArPSBOdW1CeXRlc1RvV3JpdGU7DQorDQorICAgICAgICBpZiAoV3JPZmYgPT0gcFJpbmctPlNpemVPZkJ1ZmZlcikNCisgICAgICAgIHsNCisgICAgICAgICAgICBXck9mZiA9IDB1Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcFJpbmctPldyT2ZmID0gV3JPZmY7DQorICAgIH0NCisgICAgd2hpbGUgKE51bUJ5dGVzKTsNCisNCisgICAgLy8NCisgICAgcmV0dXJuIE51bUJ5dGVzV3JpdHRlbjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIF9Xcml0ZU5vQ2hlY2soKQ0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgU3RvcmVzIGEgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFNFR0dFUiBSVFQgcmluZyBidWZmZXINCisqICAgIGFuZCB1cGRhdGVzIHRoZSBhc3NvY2lhdGVkIHdyaXRlIHBvaW50ZXIgd2hpY2ggaXMgcGVyaW9kaWNhbGx5DQorKiAgICByZWFkIGJ5IHRoZSBob3N0Lg0KKyogICAgSXQgaXMgY2FsbGVycyByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgZGF0YSBhY3R1YWxseSBmaXRzIGluIGJ1ZmZlci4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgcFJpbmcgICAgICAgIFJpbmcgYnVmZmVyIHRvIHBvc3QgdG8uDQorKiAgICBwQnVmZmVyICAgICAgUG9pbnRlciB0byBjaGFyYWN0ZXIgYXJyYXkuIERvZXMgbm90IG5lZWQgdG8gcG9pbnQgdG8gYSBcMCB0ZXJtaW5hdGVkIHN0cmluZy4NCisqICAgIE51bUJ5dGVzICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBTRUdHRVIgUlRUIGNvbnRyb2wgYmxvY2suDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgSWYgdGhlcmUgbWlnaHQgbm90IGJlIGVub3VnaCBzcGFjZSBpbiB0aGUgIlVwIi1idWZmZXIsIGNhbGwgX1dyaXRlQmxvY2tpbmcNCisqLw0KK3N0YXRpYyB2b2lkIF9Xcml0ZU5vQ2hlY2soU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmcsIGNvbnN0IGNoYXIgKnBEYXRhLCB1bnNpZ25lZCBOdW1CeXRlcykNCit7DQorICAgIHVuc2lnbmVkIE51bUJ5dGVzQXRPbmNlOw0KKyAgICB1bnNpZ25lZCBXck9mZjsNCisgICAgdW5zaWduZWQgUmVtOw0KKw0KKyAgICBXck9mZiA9IHBSaW5nLT5Xck9mZjsNCisgICAgUmVtID0gcFJpbmctPlNpemVPZkJ1ZmZlciAtIFdyT2ZmOw0KKw0KKyAgICBpZiAoUmVtID4gTnVtQnl0ZXMpDQorICAgIHsNCisgICAgICAgIC8vDQorICAgICAgICAvLyBBbGwgZGF0YSBmaXRzIGJlZm9yZSB3cmFwIGFyb3VuZA0KKyAgICAgICAgLy8NCisgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciArIFdyT2ZmLCBwRGF0YSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgcFJpbmctPldyT2ZmID0gV3JPZmYgKyBOdW1CeXRlczsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIC8vDQorICAgICAgICAvLyBXZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHNvIG5lZWQgdG8gd3JhcCBhcm91bmQNCisgICAgICAgIC8vDQorICAgICAgICBOdW1CeXRlc0F0T25jZSA9IFJlbTsNCisgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciArIFdyT2ZmLCBwRGF0YSwgTnVtQnl0ZXNBdE9uY2UpOw0KKyAgICAgICAgTnVtQnl0ZXNBdE9uY2UgPSBOdW1CeXRlcyAtIFJlbTsNCisgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciwgcERhdGEgKyBSZW0sIE51bUJ5dGVzQXRPbmNlKTsNCisgICAgICAgIHBSaW5nLT5Xck9mZiA9IE51bUJ5dGVzQXRPbmNlOw0KKyAgICB9DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBfUG9zdFRlcm1pbmFsU3dpdGNoKCkNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFN3aXRjaCB0ZXJtaW5hbCB0byB0aGUgZ2l2ZW4gdGVybWluYWwgSUQuICBJdCBpcyB0aGUgY2FsbGVyJ3MNCisqICAgIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGUgdGVybWluYWwgSUQgaXMgY29ycmVjdCBhbmQgdGhlcmUgaXMNCisqICAgIGVub3VnaCBzcGFjZSBpbiB0aGUgYnVmZmVyIGZvciB0aGlzIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgcFJpbmcgICAgICAgIFJpbmcgYnVmZmVyIHRvIHBvc3QgdG8uDQorKiAgICBUZXJtaW5hbElkICAgVGVybWluYWwgSUQgdG8gc3dpdGNoIHRvLg0KKyovDQorc3RhdGljIHZvaWQgX1Bvc3RUZXJtaW5hbFN3aXRjaChTRUdHRVJfUlRUX1JJTkdfQlVGRkVSICpwUmluZywgY2hhciBUZXJtaW5hbElkKQ0KK3sNCisgICAgY2hhciBhY1syXTsNCisNCisgICAgYWNbMF0gPSAweEZGdTsNCisgICAgYWNbMV0gPSBfYVRlcm1pbmFsSWRbKHVuc2lnbmVkIGNoYXIpDQorICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsSWRdOyAgLy8gQ2FsbGVyIG1hZGUgYWxyZWFkeSBzdXJlIHRoYXQgVGVybWluYWxJZCBkb2VzIG5vdCBleGNlZWQgb3VyIHRlcm1pbmFsIGxpbWl0DQorICAgIF9Xcml0ZUJsb2NraW5nKHBSaW5nLCBhYywgMnUpOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgX0dldEF2YWlsV3JpdGVTcGFjZSgpDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgd3JpdHRlbiB0byB0aGUgcmluZw0KKyogICAgYnVmZmVyIHdpdGhvdXQgYmxvY2tpbmcuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIHBSaW5nICAgICAgICBSaW5nIGJ1ZmZlciB0byBjaGVjay4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgZnJlZSBpbiB0aGUgYnVmZmVyLg0KKyovDQorc3RhdGljIHVuc2lnbmVkIF9HZXRBdmFpbFdyaXRlU3BhY2UoU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmcpDQorew0KKyAgICB1bnNpZ25lZCBSZE9mZjsNCisgICAgdW5zaWduZWQgV3JPZmY7DQorICAgIHVuc2lnbmVkIHI7DQorICAgIC8vDQorICAgIC8vIEF2b2lkIHdhcm5pbmdzIHJlZ2FyZGluZyB2b2xhdGlsZSBhY2Nlc3Mgb3JkZXIuICBJdCdzIG5vdCBhIHByb2JsZW0NCisgICAgLy8gaW4gdGhpcyBjYXNlLCBidXQgZGFtcGVuIGNvbXBpbGVyIGVudGh1c2lhc20uDQorICAgIC8vDQorICAgIFJkT2ZmID0gcFJpbmctPlJkT2ZmOw0KKyAgICBXck9mZiA9IHBSaW5nLT5Xck9mZjsNCisNCisgICAgaWYgKFJkT2ZmIDw9IFdyT2ZmKQ0KKyAgICB7DQorICAgICAgICByID0gcFJpbmctPlNpemVPZkJ1ZmZlciAtIDF1IC0gV3JPZmYgKyBSZE9mZjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHIgPSBSZE9mZiAtIFdyT2ZmIC0gMXU7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHI7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBQdWJsaWMgY29kZQ0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9SZWFkTm9Mb2NrKCkNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFJlYWRzIGNoYXJhY3RlcnMgZnJvbSBTRUdHRVIgcmVhbC10aW1lLXRlcm1pbmFsIGNvbnRyb2wgYmxvY2sNCisqICAgIHdoaWNoIGhhdmUgYmVlbiBwcmV2aW91c2x5IHN0b3JlZCBieSB0aGUgaG9zdC4NCisqICAgIERvIG5vdCBsb2NrIGFnYWluc3QgaW50ZXJydXB0cyBhbmQgbXVsdGlwbGUgYWNjZXNzLg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgRG93bi1idWZmZXIgdG8gYmUgdXNlZCAoZS5nLiAwIGZvciAiVGVybWluYWwiKS4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBwcm92aWRlZCBieSB0YXJnZXQgYXBwbGljYXRpb24sIHRvIGNvcHkgY2hhcmFjdGVycyBmcm9tIFJUVC1kb3duLWJ1ZmZlciB0by4NCisqICAgIEJ1ZmZlclNpemUgICBTaXplIG9mIHRoZSB0YXJnZXQgYXBwbGljYXRpb24gYnVmZmVyLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgIE51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkLg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9SZWFkTm9Mb2NrKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCB2b2lkICpwRGF0YSwgdW5zaWduZWQgQnVmZmVyU2l6ZSkNCit7DQorICAgIHVuc2lnbmVkIE51bUJ5dGVzUmVtOw0KKyAgICB1bnNpZ25lZCBOdW1CeXRlc1JlYWQ7DQorICAgIHVuc2lnbmVkIFJkT2ZmOw0KKyAgICB1bnNpZ25lZCBXck9mZjsNCisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZmZlcjsNCisgICAgU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmc7DQorICAgIC8vDQorICAgIElOSVQoKTsNCisgICAgcFJpbmcgPSAmX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdOw0KKyAgICBwQnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwRGF0YTsNCisgICAgUmRPZmYgPSBwUmluZy0+UmRPZmY7DQorICAgIFdyT2ZmID0gcFJpbmctPldyT2ZmOw0KKyAgICBOdW1CeXRlc1JlYWQgPSAwdTsNCisNCisgICAgLy8NCisgICAgLy8gUmVhZCBmcm9tIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiB0byB3cmFwLWFyb3VuZCBvZiBidWZmZXIsIGZpcnN0DQorICAgIC8vDQorICAgIGlmIChSZE9mZiA+IFdyT2ZmKQ0KKyAgICB7DQorICAgICAgICBOdW1CeXRlc1JlbSA9IHBSaW5nLT5TaXplT2ZCdWZmZXIgLSBSZE9mZjsNCisgICAgICAgIE51bUJ5dGVzUmVtID0gTUlOKE51bUJ5dGVzUmVtLCBCdWZmZXJTaXplKTsNCisgICAgICAgIG1lbWNweShwQnVmZmVyLCBwUmluZy0+cEJ1ZmZlciArIFJkT2ZmLCBOdW1CeXRlc1JlbSk7DQorICAgICAgICBOdW1CeXRlc1JlYWQgKz0gTnVtQnl0ZXNSZW07DQorICAgICAgICBwQnVmZmVyICAgICAgKz0gTnVtQnl0ZXNSZW07DQorICAgICAgICBCdWZmZXJTaXplICAgLT0gTnVtQnl0ZXNSZW07DQorICAgICAgICBSZE9mZiAgICAgICAgKz0gTnVtQnl0ZXNSZW07DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSGFuZGxlIHdyYXAtYXJvdW5kIG9mIGJ1ZmZlcg0KKyAgICAgICAgLy8NCisgICAgICAgIGlmIChSZE9mZiA9PSBwUmluZy0+U2l6ZU9mQnVmZmVyKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJkT2ZmID0gMHU7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gUmVhZCByZW1haW5pbmcgaXRlbXMgb2YgYnVmZmVyDQorICAgIC8vDQorICAgIE51bUJ5dGVzUmVtID0gV3JPZmYgLSBSZE9mZjsNCisgICAgTnVtQnl0ZXNSZW0gPSBNSU4oTnVtQnl0ZXNSZW0sIEJ1ZmZlclNpemUpOw0KKw0KKyAgICBpZiAoTnVtQnl0ZXNSZW0gPiAwdSkNCisgICAgew0KKyAgICAgICAgbWVtY3B5KHBCdWZmZXIsIHBSaW5nLT5wQnVmZmVyICsgUmRPZmYsIE51bUJ5dGVzUmVtKTsNCisgICAgICAgIE51bUJ5dGVzUmVhZCArPSBOdW1CeXRlc1JlbTsNCisgICAgICAgIHBCdWZmZXIgICAgICArPSBOdW1CeXRlc1JlbTsNCisgICAgICAgIEJ1ZmZlclNpemUgICAtPSBOdW1CeXRlc1JlbTsNCisgICAgICAgIFJkT2ZmICAgICAgICArPSBOdW1CeXRlc1JlbTsNCisgICAgfQ0KKw0KKyAgICBpZiAoTnVtQnl0ZXNSZWFkKQ0KKyAgICB7DQorICAgICAgICBwUmluZy0+UmRPZmYgPSBSZE9mZjsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICByZXR1cm4gTnVtQnl0ZXNSZWFkOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9SZWFkDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSZWFkcyBjaGFyYWN0ZXJzIGZyb20gU0VHR0VSIHJlYWwtdGltZS10ZXJtaW5hbCBjb250cm9sIGJsb2NrDQorKiAgICB3aGljaCBoYXZlIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgdGhlIGhvc3QuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIEJ1ZmZlckluZGV4ICBJbmRleCBvZiBEb3duLWJ1ZmZlciB0byBiZSB1c2VkIChlLmcuIDAgZm9yICJUZXJtaW5hbCIpLg0KKyogICAgcEJ1ZmZlciAgICAgIFBvaW50ZXIgdG8gYnVmZmVyIHByb3ZpZGVkIGJ5IHRhcmdldCBhcHBsaWNhdGlvbiwgdG8gY29weSBjaGFyYWN0ZXJzIGZyb20gUlRULWRvd24tYnVmZmVyIHRvLg0KKyogICAgQnVmZmVyU2l6ZSAgIFNpemUgb2YgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBidWZmZXIuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgTnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQuDQorKi8NCit1bnNpZ25lZCBTRUdHRVJfUlRUX1JlYWQodW5zaWduZWQgQnVmZmVySW5kZXgsIHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIEJ1ZmZlclNpemUpDQorew0KKyAgICB1bnNpZ25lZCBOdW1CeXRlc1JlYWQ7DQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIFNhdmVkU3RhdGU7DQorICAgIC8vDQorICAgIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgLy8NCisgICAgLy8gQ2FsbCB0aGUgbm9uLWxvY2tpbmcgcmVhZCBmdW5jdGlvbg0KKyAgICAvLw0KKyAgICBOdW1CeXRlc1JlYWQgPSBTRUdHRVJfUlRUX1JlYWROb0xvY2soQnVmZmVySW5kZXgsIHBCdWZmZXIsIEJ1ZmZlclNpemUpOw0KKyAgICAvLw0KKyAgICAvLyBGaW5pc2ggdXAuDQorICAgIC8vDQorICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAvLw0KKyAgICByZXR1cm4gTnVtQnl0ZXNSZWFkOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9Xcml0ZVNraXBOb0xvY2sNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFN0b3JlcyBhIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBTRUdHRVIgUlRUDQorKiAgICBjb250cm9sIGJsb2NrIHdoaWNoIGlzIHRoZW4gcmVhZCBieSB0aGUgaG9zdC4NCisqICAgIFNFR0dFUl9SVFRfV3JpdGVTa2lwTm9Mb2NrIGRvZXMgbm90IGxvY2sgdGhlIGFwcGxpY2F0aW9uIGFuZA0KKyogICAgc2tpcHMgYWxsIGRhdGEsIGlmIHRoZSBkYXRhIGRvZXMgbm90IGZpdCBpbnRvIHRoZSBidWZmZXIuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIEJ1ZmZlckluZGV4ICBJbmRleCBvZiAiVXAiLWJ1ZmZlciB0byBiZSB1c2VkIChlLmcuIDAgZm9yICJUZXJtaW5hbCIpLg0KKyogICAgcEJ1ZmZlciAgICAgIFBvaW50ZXIgdG8gY2hhcmFjdGVyIGFycmF5LiBEb2VzIG5vdCBuZWVkIHRvIHBvaW50IHRvIGEgXDAgdGVybWluYXRlZCBzdHJpbmcuDQorKiAgICBOdW1CeXRlcyAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN0b3JlZCBpbiB0aGUgU0VHR0VSIFJUVCBjb250cm9sIGJsb2NrLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgIE51bWJlciBvZiBieXRlcyB3aGljaCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSAiVXAiLWJ1ZmZlci4NCisqDQorKiAgTm90ZXMNCisqICAgICgxKSBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSAiVXAiLWJ1ZmZlciwgYWxsIGRhdGEgaXMgZHJvcHBlZC4NCisqICAgICgyKSBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGwgSW5pdCgpDQorKiAgICAgICAgYW5kIG1heSBvbmx5IGJlIGNhbGxlZCBhZnRlciBSVFQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuDQorKiAgICAgICAgRWl0aGVyIGJ5IGNhbGxpbmcgU0VHR0VSX1JUVF9Jbml0KCkgb3IgY2FsbGluZyBhbm90aGVyIFJUVCBBUEkgZnVuY3Rpb24gZmlyc3QuDQorKi8NCit1bnNpZ25lZCBTRUdHRVJfUlRUX1dyaXRlU2tpcE5vTG9jayh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3Qgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpDQorew0KKyAgICBjb25zdCBjaGFyICAqcERhdGE7DQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nOw0KKyAgICB1bnNpZ25lZCAgICAgQXZhaWw7DQorICAgIHVuc2lnbmVkICAgICBSZE9mZjsNCisgICAgdW5zaWduZWQgICAgIFdyT2ZmOw0KKyAgICB1bnNpZ25lZCAgICAgUmVtOw0KKw0KKyAgICBwRGF0YSA9IChjb25zdCBjaGFyICopcEJ1ZmZlcjsNCisgICAgLy8NCisgICAgLy8gR2V0ICJ0by1ob3N0IiByaW5nIGJ1ZmZlciBhbmQgY29weSBzb21lIGVsZW1lbnRzIGludG8gbG9jYWwgdmFyaWFibGVzLg0KKyAgICAvLw0KKyAgICBwUmluZyA9ICZfU0VHR0VSX1JUVC5hVXBbQnVmZmVySW5kZXhdOw0KKyAgICBSZE9mZiA9IHBSaW5nLT5SZE9mZjsNCisgICAgV3JPZmYgPSBwUmluZy0+V3JPZmY7DQorDQorICAgIC8vDQorICAgIC8vIEhhbmRsZSB0aGUgbW9zdCBjb21tb24gY2FzZXMgZmFzdGVzdC4NCisgICAgLy8gV2hpY2ggaXM6DQorICAgIC8vICAgIFJkT2ZmIDw9IFdyT2ZmIC0+IFNwYWNlIHVudGlsIHdyYXAgYXJvdW5kIGlzIGZyZWUuDQorICAgIC8vICBBTkQNCisgICAgLy8gICAgV3JPZmYgKyBOdW1CeXRlcyA8IFNpemVPZkJ1ZmZlciAtPiBObyBXcmFwIGFyb3VuZCBuZWNlc3NhcnkuDQorICAgIC8vDQorICAgIC8vICBPUg0KKyAgICAvLw0KKyAgICAvLyAgICBSZE9mZiA+IFdyT2ZmIC0+IFNwYWNlIHVudGlsIFJkT2ZmIC0gMSBpcyBmcmVlLg0KKyAgICAvLyAgQU5EDQorICAgIC8vICAgIFdyT2ZmICsgTnVtQnl0ZXMgPCBSZE9mZiAtPiBEYXRhIGZpdHMgaW50byBidWZmZXINCisgICAgLy8NCisgICAgaWYgKFJkT2ZmIDw9IFdyT2ZmKQ0KKyAgICB7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gR2V0IHNwYWNlIHVudGlsIFdyT2ZmIHdpbGwgYmUgYXQgd3JhcCBhcm91bmQuDQorICAgICAgICAvLw0KKyAgICAgICAgQXZhaWwgPSBwUmluZy0+U2l6ZU9mQnVmZmVyIC0gMXUgLSBXck9mZiA7DQorDQorICAgICAgICBpZiAoQXZhaWwgPj0gTnVtQnl0ZXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgbWVtY3B5KHBSaW5nLT5wQnVmZmVyICsgV3JPZmYsIHBEYXRhLCBOdW1CeXRlcyk7DQorICAgICAgICAgICAgcFJpbmctPldyT2ZmID0gV3JPZmYgKyBOdW1CeXRlczsNCisgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyBJZiBkYXRhIGRpZCBub3QgZml0IGludG8gc3BhY2UgdW50aWwgd3JhcCBhcm91bmQgY2FsY3VsYXRlIGNvbXBsZXRlIHNwYWNlIGluIGJ1ZmZlci4NCisgICAgICAgIC8vDQorICAgICAgICBBdmFpbCArPSBSZE9mZjsNCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBubyBzcGFjZSBmb3IgdGhlIHdob2xlIG9mIHRoaXMgb3V0cHV0LCBkb24ndCBib3RoZXIuDQorICAgICAgICAvLw0KKyAgICAgICAgaWYgKEF2YWlsID49IE51bUJ5dGVzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gIE9LLCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBpbiBidWZmZXIuIENvcHkgaW4gb25lIG9yIDIgY2h1bmtzDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICBSZW0gPSBwUmluZy0+U2l6ZU9mQnVmZmVyIC0gV3JPZmY7ICAgICAgLy8gU3BhY2UgdW50aWwgZW5kIG9mIGJ1ZmZlcg0KKw0KKyAgICAgICAgICAgIGlmIChSZW0gPiBOdW1CeXRlcykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciArIFdyT2ZmLCBwRGF0YSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgICAgICAgICBwUmluZy0+V3JPZmYgPSBXck9mZiArIE51bUJ5dGVzOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgICAgICAvLyBXZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHNvIG5lZWQgdG8gd3JhcCBhcm91bmQNCisgICAgICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAgICAgbWVtY3B5KHBSaW5nLT5wQnVmZmVyICsgV3JPZmYsIHBEYXRhLCBSZW0pOw0KKyAgICAgICAgICAgICAgICBtZW1jcHkocFJpbmctPnBCdWZmZXIsIHBEYXRhICsgUmVtLCBOdW1CeXRlcyAtIFJlbSk7DQorICAgICAgICAgICAgICAgIHBSaW5nLT5Xck9mZiA9IE51bUJ5dGVzIC0gUmVtOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIEF2YWlsID0gUmRPZmYgLSBXck9mZiAtIDF1Ow0KKw0KKyAgICAgICAgaWYgKEF2YWlsID49IE51bUJ5dGVzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1lbWNweShwUmluZy0+cEJ1ZmZlciArIFdyT2ZmLCBwRGF0YSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgICAgIHBSaW5nLT5Xck9mZiA9IFdyT2ZmICsgTnVtQnl0ZXM7DQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gSWYgd2UgcmVhY2ggdGhpcyBwb2ludCBubyBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4NCisgICAgLy8NCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX1dyaXRlTm9Mb2NrDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTdG9yZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gU0VHR0VSIFJUVA0KKyogICAgY29udHJvbCBibG9jayB3aGljaCBpcyB0aGVuIHJlYWQgYnkgdGhlIGhvc3QuDQorKiAgICBTRUdHRVJfUlRUX1dyaXRlTm9Mb2NrIGRvZXMgbm90IGxvY2sgdGhlIGFwcGxpY2F0aW9uLg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgIlVwIi1idWZmZXIgdG8gYmUgdXNlZCAoZS5nLiAwIGZvciAiVGVybWluYWwiKS4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheS4gRG9lcyBub3QgbmVlZCB0byBwb2ludCB0byBhIFwwIHRlcm1pbmF0ZWQgc3RyaW5nLg0KKyogICAgTnVtQnl0ZXMgICAgIE51bWJlciBvZiBieXRlcyB0byBiZSBzdG9yZWQgaW4gdGhlIFNFR0dFUiBSVFQgY29udHJvbCBibG9jay4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICBOdW1iZXIgb2YgYnl0ZXMgd2hpY2ggaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgIlVwIi1idWZmZXIuDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBpbiB0aGUgIlVwIi1idWZmZXIsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIG9mIHBCdWZmZXIgYXJlIGRyb3BwZWQuDQorKiAgICAoMikgRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjYWxsIEluaXQoKQ0KKyogICAgICAgIGFuZCBtYXkgb25seSBiZSBjYWxsZWQgYWZ0ZXIgUlRUIGhhcyBiZWVuIGluaXRpYWxpemVkLg0KKyogICAgICAgIEVpdGhlciBieSBjYWxsaW5nIFNFR0dFUl9SVFRfSW5pdCgpIG9yIGNhbGxpbmcgYW5vdGhlciBSVFQgQVBJIGZ1bmN0aW9uIGZpcnN0Lg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9Xcml0ZU5vTG9jayh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3Qgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpDQorew0KKyAgICB1bnNpZ25lZCBTdGF0dXM7DQorICAgIHVuc2lnbmVkIEF2YWlsOw0KKyAgICBjb25zdCBjaGFyICAqcERhdGE7DQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nOw0KKw0KKyAgICBwRGF0YSA9IChjb25zdCBjaGFyICopcEJ1ZmZlcjsNCisgICAgLy8NCisgICAgLy8gR2V0ICJ0by1ob3N0IiByaW5nIGJ1ZmZlci4NCisgICAgLy8NCisgICAgcFJpbmcgPSAmX1NFR0dFUl9SVFQuYVVwW0J1ZmZlckluZGV4XTsNCisNCisgICAgLy8NCisgICAgLy8gSG93IHdlIG91dHB1dCBkZXBlbmRzIHVwb24gdGhlIG1vZGUuLi4NCisgICAgLy8NCisgICAgc3dpdGNoIChwUmluZy0+RmxhZ3MpDQorICAgIHsNCisgICAgY2FzZSBTRUdHRVJfUlRUX01PREVfTk9fQkxPQ0tfU0tJUDoNCisgICAgICAgIC8vDQorICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gc2tpcCBtb2RlIGFuZCB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHdob2xlDQorICAgICAgICAvLyBvZiB0aGlzIG91dHB1dCwgZG9uJ3QgYm90aGVyLg0KKyAgICAgICAgLy8NCisgICAgICAgIEF2YWlsID0gX0dldEF2YWlsV3JpdGVTcGFjZShwUmluZyk7DQorDQorICAgICAgICBpZiAoQXZhaWwgPCBOdW1CeXRlcykNCisgICAgICAgIHsNCisgICAgICAgICAgICBTdGF0dXMgPSAwdTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBTdGF0dXMgPSBOdW1CeXRlczsNCisgICAgICAgICAgICBfV3JpdGVOb0NoZWNrKHBSaW5nLCBwRGF0YSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU0VHR0VSX1JUVF9NT0RFX05PX0JMT0NLX1RSSU06DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSWYgd2UgYXJlIGluIHRyaW0gbW9kZSwgdHJpbSB0byB3aGF0IHdlIGNhbiBvdXRwdXQgd2l0aG91dCBibG9ja2luZy4NCisgICAgICAgIC8vDQorICAgICAgICBBdmFpbCA9IF9HZXRBdmFpbFdyaXRlU3BhY2UocFJpbmcpOw0KKyAgICAgICAgU3RhdHVzID0gQXZhaWwgPCBOdW1CeXRlcyA/IEF2YWlsIDogTnVtQnl0ZXM7DQorICAgICAgICBfV3JpdGVOb0NoZWNrKHBSaW5nLCBwRGF0YSwgU3RhdHVzKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNFR0dFUl9SVFRfTU9ERV9CTE9DS19JRl9GSUZPX0ZVTEw6DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSWYgd2UgYXJlIGluIGJsb2NraW5nIG1vZGUsIG91dHB1dCBldmVyeXRoaW5nLg0KKyAgICAgICAgLy8NCisgICAgICAgIFN0YXR1cyA9IF9Xcml0ZUJsb2NraW5nKHBSaW5nLCBwRGF0YSwgTnVtQnl0ZXMpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBTdGF0dXMgPSAwdTsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIEZpbmlzaCB1cC4NCisgICAgLy8NCisgICAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfV3JpdGUNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFN0b3JlcyBhIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBTRUdHRVIgUlRUDQorKiAgICBjb250cm9sIGJsb2NrIHdoaWNoIGlzIHRoZW4gcmVhZCBieSB0aGUgaG9zdC4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mICJVcCItYnVmZmVyIHRvIGJlIHVzZWQgKGUuZy4gMCBmb3IgIlRlcm1pbmFsIikuDQorKiAgICBwQnVmZmVyICAgICAgUG9pbnRlciB0byBjaGFyYWN0ZXIgYXJyYXkuIERvZXMgbm90IG5lZWQgdG8gcG9pbnQgdG8gYSBcMCB0ZXJtaW5hdGVkIHN0cmluZy4NCisqICAgIE51bUJ5dGVzICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBTRUdHRVIgUlRUIGNvbnRyb2wgYmxvY2suDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgTnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlICJVcCItYnVmZmVyLg0KKyoNCisqICBOb3Rlcw0KKyogICAgKDEpIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlICJVcCItYnVmZmVyLCByZW1haW5pbmcgY2hhcmFjdGVycyBvZiBwQnVmZmVyIGFyZSBkcm9wcGVkLg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9Xcml0ZSh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3Qgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpDQorew0KKyAgICB1bnNpZ25lZCBTdGF0dXM7DQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIFNhdmVkU3RhdGU7DQorICAgIC8vDQorICAgIElOSVQoKTsNCisgICAgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAvLw0KKyAgICAvLyBDYWxsIHRoZSBub24tbG9ja2luZyB3cml0ZSBmdW5jdGlvbg0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSBTRUdHRVJfUlRUX1dyaXRlTm9Mb2NrKEJ1ZmZlckluZGV4LCBwQnVmZmVyLCBOdW1CeXRlcyk7DQorICAgIC8vDQorICAgIC8vIEZpbmlzaCB1cC4NCisgICAgLy8NCisgICAgU0VHR0VSX1JUVF9VTkxPQ0soU2F2ZWRTdGF0ZSk7DQorICAgIC8vDQorICAgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX1dyaXRlU3RyaW5nDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTdG9yZXMgc3RyaW5nIGluIFNFR0dFUiBSVFQgY29udHJvbCBibG9jay4NCisqICAgIFRoaXMgZGF0YSBpcyByZWFkIGJ5IHRoZSBob3N0Lg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgIlVwIi1idWZmZXIgdG8gYmUgdXNlZCAoZS5nLiAwIGZvciAiVGVybWluYWwiKS4NCisqICAgIHMgICAgICAgICAgICBQb2ludGVyIHRvIHN0cmluZy4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICBOdW1iZXIgb2YgYnl0ZXMgd2hpY2ggaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgIlVwIi1idWZmZXIuDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBpbiB0aGUgIlVwIi1idWZmZXIsIGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uLA0KKyogICAgICAgIHJlbWFpbmluZyBjaGFyYWN0ZXJzIG1heSBiZSBkcm9wcGVkIG9yIFJUVCBtb2R1bGUgd2FpdHMgdW50aWwgdGhlcmUgaXMgbW9yZSBzcGFjZSBpbiB0aGUgYnVmZmVyLg0KKyogICAgKDIpIFN0cmluZyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgXDAgdGVybWluYXRlZA0KKyogICAgKDMpIFwwIHRlcm1pbmF0aW9uIGNoYXJhY3RlciBpcyAqbm90KiBzdG9yZWQgaW4gUlRUIGJ1ZmZlcg0KKyovDQordW5zaWduZWQgU0VHR0VSX1JUVF9Xcml0ZVN0cmluZyh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqcykNCit7DQorICAgIHVuc2lnbmVkIExlbjsNCisNCisgICAgTGVuID0gU1RSTEVOKHMpOw0KKyAgICByZXR1cm4gU0VHR0VSX1JUVF9Xcml0ZShCdWZmZXJJbmRleCwgcywgTGVuKTsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfR2V0S2V5DQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSZWFkcyBvbmUgY2hhcmFjdGVyIGZyb20gdGhlIFNFR0dFUiBSVFQgYnVmZmVyLg0KKyogICAgSG9zdCBoYXMgcHJldmlvdXNseSBzdG9yZWQgZGF0YSB0aGVyZS4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA8ICAwIC0gICBObyBjaGFyYWN0ZXIgYXZhaWxhYmxlIChidWZmZXIgZW1wdHkpLg0KKyogICAgPj0gMCAtICAgQ2hhcmFjdGVyIHdoaWNoIGhhcyBiZWVuIHJlYWQuIChQb3NzaWJsZSB2YWx1ZXM6IDAgLSAyNTUpDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHNwZWNpZmllZCBmb3IgYWNjZXNzZXMgdG8gUlRUIGJ1ZmZlciAwLg0KKyovDQoraW50IFNFR0dFUl9SVFRfR2V0S2V5KHZvaWQpDQorew0KKyAgICBjaGFyIGM7DQorICAgIGludCByOw0KKw0KKyAgICByID0gKGludClTRUdHRVJfUlRUX1JlYWQoMHUsICZjLCAxdSk7DQorDQorICAgIGlmIChyID09IDEpDQorICAgIHsNCisgICAgICAgIHIgPSAoaW50KSh1bnNpZ25lZCBjaGFyKWM7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByID0gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHI7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX1dhaXRLZXkNCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFdhaXRzIHVudGlsIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaXMgYXZhaWJsZSBpbiB0aGUgU0VHR0VSIFJUVCBidWZmZXIuDQorKiAgICBPbmNlIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSwgaXQgaXMgcmVhZCBhbmQgdGhpcyBmdW5jdGlvbiByZXR1cm5zLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgID49MCAtICAgQ2hhcmFjdGVyIHdoaWNoIGhhcyBiZWVuIHJlYWQuDQorKg0KKyogIE5vdGVzDQorKiAgICAoMSkgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHNwZWNpZmllZCBmb3IgYWNjZXNzZXMgdG8gUlRUIGJ1ZmZlciAwDQorKiAgICAoMikgVGhpcyBmdW5jdGlvbiBpcyBibG9ja2luZyBpZiBubyBjaGFyYWN0ZXIgaXMgcHJlc2VudCBpbiBSVFQgYnVmZmVyDQorKi8NCitpbnQgU0VHR0VSX1JUVF9XYWl0S2V5KHZvaWQpDQorew0KKyAgICBpbnQgcjsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgciA9IFNFR0dFUl9SVFRfR2V0S2V5KCk7DQorICAgIH0NCisgICAgd2hpbGUgKHIgPCAwKTsNCisNCisgICAgcmV0dXJuIHI7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX0hhc0tleQ0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgQ2hlY2tzIGlmIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgZm9yIHJlYWRpbmcgaXMgYXZhaWxhYmxlIGluIHRoZSBTRUdHRVIgUlRUIGJ1ZmZlci4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA9PSAwIC0gICAgIE5vIGNoYXJhY3RlcnMgYXJlIGF2YWlsYWJsZSB0byByZWFkLg0KKyogICAgPT0gMSAtICAgICBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZS4NCisqDQorKiAgTm90ZXMNCisqICAgICgxKSBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3BlY2lmaWVkIGZvciBhY2Nlc3NlcyB0byBSVFQgYnVmZmVyIDANCisqLw0KK2ludCBTRUdHRVJfUlRUX0hhc0tleSh2b2lkKQ0KK3sNCisgICAgdW5zaWduZWQgUmRPZmY7DQorICAgIGludCByOw0KKw0KKyAgICBJTklUKCk7DQorICAgIFJkT2ZmID0gX1NFR0dFUl9SVFQuYURvd25bMF0uUmRPZmY7DQorDQorICAgIGlmIChSZE9mZiAhPSBfU0VHR0VSX1JUVC5hRG93blswXS5Xck9mZikNCisgICAgew0KKyAgICAgICAgciA9IDE7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByID0gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfSGFzRGF0YQ0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgQ2hlY2sgaWYgdGhlcmUgaXMgZGF0YSBmcm9tIHRoZSBob3N0IGluIHRoZSBnaXZlbiBidWZmZXIuDQorKg0KKyogIFJldHVybiB2YWx1ZToNCisqICA9PTA6ICBObyBkYXRhDQorKiAgIT0wOiAgRGF0YSBpbiBidWZmZXINCisqDQorKi8NCit1bnNpZ25lZCBTRUdHRVJfUlRUX0hhc0RhdGEodW5zaWduZWQgQnVmZmVySW5kZXgpDQorew0KKyAgICBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSICpwUmluZzsNCisgICAgdW5zaWduZWQgdjsNCisNCisgICAgcFJpbmcgPSAmX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdOw0KKyAgICB2ID0gcFJpbmctPldyT2ZmOw0KKyAgICByZXR1cm4gdiAtIHBSaW5nLT5SZE9mZjsNCit9DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfQ29uZmlnVXBCdWZmZXINCisqDQorKiAgRnVuY3Rpb24gZGVzY3JpcHRpb24NCisqICAgIFJ1bi10aW1lIGNvbmZpZ3VyYXRpb24gb2YgYSBzcGVjaWZpYyB1cC1idWZmZXIgKFQtPkgpLg0KKyogICAgQnVmZmVyIHRvIGJlIGNvbmZpZ3VyZWQgaXMgc3BlY2lmaWVkIGJ5IGluZGV4Lg0KKyogICAgVGhpcyBpbmNsdWRlczogQnVmZmVyIGFkZHJlc3MsIHNpemUsIG5hbWUsIGZsYWdzLCAuLi4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mIHRoZSBidWZmZXIgdG8gY29uZmlndXJlLg0KKyogICAgc05hbWUgICAgICAgIFBvaW50ZXIgdG8gYSBjb25zdGFudCBuYW1lIHN0cmluZy4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGEgYnVmZmVyIHRvIGJlIHVzZWQuDQorKiAgICBCdWZmZXJTaXplICAgU2l6ZSBvZiB0aGUgYnVmZmVyLg0KKyogICAgRmxhZ3MgICAgICAgIE9wZXJhdGluZyBtb2Rlcy4gRGVmaW5lIGJlaGF2aW9yIGlmIGJ1ZmZlciBpcyBmdWxsIChub3QgZW5vdWdoIHNwYWNlIGZvciBlbnRpcmUgbWVzc2FnZSkuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPj0gMCAtIE8uSy4NCisqICAgICA8IDAgLSBFcnJvcg0KKyovDQoraW50IFNFR0dFUl9SVFRfQ29uZmlnVXBCdWZmZXIodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IGNoYXIgKnNOYW1lLCB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBCdWZmZXJTaXplLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIEZsYWdzKQ0KK3sNCisgICAgaW50IHI7DQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIFNhdmVkU3RhdGU7DQorDQorICAgIElOSVQoKTsNCisNCisgICAgaWYgKEJ1ZmZlckluZGV4IDwgKHVuc2lnbmVkKV9TRUdHRVJfUlRULk1heE51bVVwQnVmZmVycykNCisgICAgew0KKyAgICAgICAgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpOw0KKw0KKyAgICAgICAgaWYgKEJ1ZmZlckluZGV4ID4gMHUpDQorICAgICAgICB7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYVVwW0J1ZmZlckluZGV4XS5zTmFtZSAgICAgICAgPSBzTmFtZTsNCisgICAgICAgICAgICBfU0VHR0VSX1JUVC5hVXBbQnVmZmVySW5kZXhdLnBCdWZmZXIgICAgICA9IHBCdWZmZXI7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYVVwW0J1ZmZlckluZGV4XS5TaXplT2ZCdWZmZXIgPSBCdWZmZXJTaXplOw0KKyAgICAgICAgICAgIF9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF0uUmRPZmYgICAgICAgID0gMHU7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYVVwW0J1ZmZlckluZGV4XS5Xck9mZiAgICAgICAgPSAwdTsNCisgICAgICAgIH0NCisNCisgICAgICAgIF9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF0uRmxhZ3MgICAgICAgICAgPSBGbGFnczsNCisgICAgICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAgICAgciA9ICAwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgciA9IC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9Db25maWdEb3duQnVmZmVyDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSdW4tdGltZSBjb25maWd1cmF0aW9uIG9mIGEgc3BlY2lmaWMgZG93bi1idWZmZXIgKEgtPlQpLg0KKyogICAgQnVmZmVyIHRvIGJlIGNvbmZpZ3VyZWQgaXMgc3BlY2lmaWVkIGJ5IGluZGV4Lg0KKyogICAgVGhpcyBpbmNsdWRlczogQnVmZmVyIGFkZHJlc3MsIHNpemUsIG5hbWUsIGZsYWdzLCAuLi4NCisqDQorKiAgUGFyYW1ldGVycw0KKyogICAgQnVmZmVySW5kZXggIEluZGV4IG9mIHRoZSBidWZmZXIgdG8gY29uZmlndXJlLg0KKyogICAgc05hbWUgICAgICAgIFBvaW50ZXIgdG8gYSBjb25zdGFudCBuYW1lIHN0cmluZy4NCisqICAgIHBCdWZmZXIgICAgICBQb2ludGVyIHRvIGEgYnVmZmVyIHRvIGJlIHVzZWQuDQorKiAgICBCdWZmZXJTaXplICAgU2l6ZSBvZiB0aGUgYnVmZmVyLg0KKyogICAgRmxhZ3MgICAgICAgIE9wZXJhdGluZyBtb2Rlcy4gRGVmaW5lIGJlaGF2aW9yIGlmIGJ1ZmZlciBpcyBmdWxsIChub3QgZW5vdWdoIHNwYWNlIGZvciBlbnRpcmUgbWVzc2FnZSkuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPj0gMCAgTy5LLg0KKyogICAgIDwgMCAgRXJyb3INCisqLw0KK2ludCBTRUdHRVJfUlRUX0NvbmZpZ0Rvd25CdWZmZXIodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IGNoYXIgKnNOYW1lLCB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBCdWZmZXJTaXplLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgRmxhZ3MpDQorew0KKyAgICBpbnQgcjsNCisgICAgdm9sYXRpbGUgdW5zaWduZWQgU2F2ZWRTdGF0ZTsNCisNCisgICAgSU5JVCgpOw0KKw0KKyAgICBpZiAoQnVmZmVySW5kZXggPCAodW5zaWduZWQpX1NFR0dFUl9SVFQuTWF4TnVtRG93bkJ1ZmZlcnMpDQorICAgIHsNCisgICAgICAgIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKTsNCisNCisgICAgICAgIGlmIChCdWZmZXJJbmRleCA+IDB1KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9TRUdHRVJfUlRULmFEb3duW0J1ZmZlckluZGV4XS5zTmFtZSAgICAgICAgPSBzTmFtZTsNCisgICAgICAgICAgICBfU0VHR0VSX1JUVC5hRG93bltCdWZmZXJJbmRleF0ucEJ1ZmZlciAgICAgID0gcEJ1ZmZlcjsNCisgICAgICAgICAgICBfU0VHR0VSX1JUVC5hRG93bltCdWZmZXJJbmRleF0uU2l6ZU9mQnVmZmVyID0gQnVmZmVyU2l6ZTsNCisgICAgICAgICAgICBfU0VHR0VSX1JUVC5hRG93bltCdWZmZXJJbmRleF0uUmRPZmYgICAgICAgID0gMHU7DQorICAgICAgICAgICAgX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdLldyT2ZmICAgICAgICA9IDB1Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgX1NFR0dFUl9SVFQuYURvd25bQnVmZmVySW5kZXhdLkZsYWdzICAgICAgICAgID0gRmxhZ3M7DQorICAgICAgICBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgICAgIHIgPSAgMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHIgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcjsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFNFR0dFUl9SVFRfU2V0TmFtZVVwQnVmZmVyDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBSdW4tdGltZSBjb25maWd1cmF0aW9uIG9mIGEgc3BlY2lmaWMgdXAtYnVmZmVyIG5hbWUgKFQtPkgpLg0KKyogICAgQnVmZmVyIHRvIGJlIGNvbmZpZ3VyZWQgaXMgc3BlY2lmaWVkIGJ5IGluZGV4Lg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgdGhlIGJ1ZmZlciB0byByZW5hbWVkLg0KKyogICAgc05hbWUgICAgICAgIFBvaW50ZXIgdG8gYSBjb25zdGFudCBuYW1lIHN0cmluZy4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA+PSAwICBPLksuDQorKiAgICAgPCAwICBFcnJvcg0KKyovDQoraW50IFNFR0dFUl9SVFRfU2V0TmFtZVVwQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSkNCit7DQorICAgIGludCByOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKw0KKyAgICBJTklUKCk7DQorDQorICAgIGlmIChCdWZmZXJJbmRleCA8ICh1bnNpZ25lZClfU0VHR0VSX1JUVC5NYXhOdW1VcEJ1ZmZlcnMpDQorICAgIHsNCisgICAgICAgIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKTsNCisgICAgICAgIF9TRUdHRVJfUlRULmFVcFtCdWZmZXJJbmRleF0uc05hbWUgPSBzTmFtZTsNCisgICAgICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAgICAgciA9ICAwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgciA9IC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9TZXROYW1lRG93bkJ1ZmZlcg0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgUnVuLXRpbWUgY29uZmlndXJhdGlvbiBvZiBhIHNwZWNpZmljIERvd24tYnVmZmVyIG5hbWUgKFQtPkgpLg0KKyogICAgQnVmZmVyIHRvIGJlIGNvbmZpZ3VyZWQgaXMgc3BlY2lmaWVkIGJ5IGluZGV4Lg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBCdWZmZXJJbmRleCAgSW5kZXggb2YgdGhlIGJ1ZmZlciB0byByZW5hbWVkLg0KKyogICAgc05hbWUgICAgICAgIFBvaW50ZXIgdG8gYSBjb25zdGFudCBuYW1lIHN0cmluZy4NCisqDQorKiAgUmV0dXJuIHZhbHVlDQorKiAgICA+PSAwICBPLksuDQorKiAgICAgPCAwICBFcnJvcg0KKyovDQoraW50IFNFR0dFUl9SVFRfU2V0TmFtZURvd25CdWZmZXIodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IGNoYXIgKnNOYW1lKQ0KK3sNCisgICAgaW50IHI7DQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIFNhdmVkU3RhdGU7DQorDQorICAgIElOSVQoKTsNCisNCisgICAgaWYgKEJ1ZmZlckluZGV4IDwgKHVuc2lnbmVkKV9TRUdHRVJfUlRULk1heE51bURvd25CdWZmZXJzKQ0KKyAgICB7DQorICAgICAgICBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSk7DQorICAgICAgICBfU0VHR0VSX1JUVC5hRG93bltCdWZmZXJJbmRleF0uc05hbWUgPSBzTmFtZTsNCisgICAgICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICAgICAgciA9ICAwOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgciA9IC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9Jbml0DQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBJbml0aWFsaXplcyB0aGUgUlRUIENvbnRyb2wgQmxvY2suDQorKiAgICBTaG91bGQgYmUgdXNlZCBpbiBSQU0gdGFyZ2V0cywgYXQgc3RhcnQgb2YgdGhlIGFwcGxpY2F0aW9uLg0KKyoNCisqLw0KK3ZvaWQgU0VHR0VSX1JUVF9Jbml0KHZvaWQpDQorew0KKyAgICBJTklUKCk7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBTRUdHRVJfUlRUX1NldFRlcm1pbmFsDQorKg0KKyogIEZ1bmN0aW9uIGRlc2NyaXB0aW9uDQorKiAgICBTZXRzIHRoZSB0ZXJtaW5hbCB0byBiZSB1c2VkIGZvciBvdXRwdXQgb24gY2hhbm5lbCAwLg0KKyoNCisqICBQYXJhbWV0ZXJzDQorKiAgICBUZXJtaW5hbElkICBJbmRleCBvZiB0aGUgdGVybWluYWwuDQorKg0KKyogIFJldHVybiB2YWx1ZQ0KKyogICAgPj0gMCAgTy5LLg0KKyogICAgIDwgMCAgRXJyb3IgKGUuZy4gaWYgUlRUIGlzIGNvbmZpZ3VyZWQgZm9yIG5vbi1ibG9ja2luZyBtb2RlIGFuZCB0aGVyZSB3YXMgbm8gc3BhY2UgaW4gdGhlIGJ1ZmZlciB0byBzZXQgdGhlIG5ldyB0ZXJtaW5hbCBJZCkNCisqLw0KK2ludCBTRUdHRVJfUlRUX1NldFRlcm1pbmFsKGNoYXIgVGVybWluYWxJZCkNCit7DQorICAgIGNoYXIgYWNbMl07DQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVIgKnBSaW5nOw0KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBTYXZlZFN0YXRlOw0KKyAgICB1bnNpZ25lZCBBdmFpbDsNCisgICAgaW50IHI7DQorICAgIC8vDQorICAgIElOSVQoKTsNCisgICAgLy8NCisgICAgciA9IDA7DQorICAgIGFjWzBdID0gMHhGRlU7DQorDQorICAgIGlmIChUZXJtaW5hbElkIDwgKGNoYXIpc2l6ZW9mKF9hVGVybWluYWxJZCkpICAgLy8gV2Ugb25seSBzdXBwb3J0IGEgY2VydGFpbiBudW1iZXIgb2YgY2hhbm5lbHMNCisgICAgew0KKyAgICAgICAgYWNbMV0gPSBfYVRlcm1pbmFsSWRbKHVuc2lnbmVkIGNoYXIpVGVybWluYWxJZF07DQorICAgICAgICBwUmluZyA9ICZfU0VHR0VSX1JUVC5hVXBbMF07ICAgIC8vIEJ1ZmZlciAwIGlzIGFsd2F5cyByZXNlcnZlZCBmb3IgdGVybWluYWwgSS9PLCBzbyB3ZSBjYW4gdXNlIGluZGV4IDAgaGVyZSwgZml4ZWQNCisgICAgICAgIFNFR0dFUl9SVFRfTE9DSygNCisgICAgICAgICAgICBTYXZlZFN0YXRlKTsgICAgLy8gTG9jayB0byBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciB0YXNrIGlzIHdyaXRpbmcgaW50byBidWZmZXIsIHdoaWxlIHdlIGFyZSBhbmQgbnVtYmVyIG9mIGZyZWUgYnl0ZXMgaW4gYnVmZmVyIGRvZXMgbm90IGNoYW5nZSBkb3dud2FyZHMgYWZ0ZXIgY2hlY2tpbmcgYW5kIGJlZm9yZSB3cml0aW5nDQorDQorICAgICAgICBpZiAoKHBSaW5nLT5GbGFncyAmIFNFR0dFUl9SVFRfTU9ERV9NQVNLKSA9PSBTRUdHRVJfUlRUX01PREVfQkxPQ0tfSUZfRklGT19GVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9BY3RpdmVUZXJtaW5hbCA9IFRlcm1pbmFsSWQ7DQorICAgICAgICAgICAgX1dyaXRlQmxvY2tpbmcocFJpbmcsIGFjLCAydSk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTa2lwcGluZyBtb2RlIG9yIHRyaW0gbW9kZT8gPT4gV2UgY2Fubm90IHRyaW0gdGhpcyBjb21tYW5kIHNvIGhhbmRsaW5nIGlzIHRoZSBzYW1lIGZvciBib3RoIG1vZGVzDQorICAgICAgICB7DQorICAgICAgICAgICAgQXZhaWwgPSBfR2V0QXZhaWxXcml0ZVNwYWNlKHBSaW5nKTsNCisNCisgICAgICAgICAgICBpZiAoQXZhaWwgPj0gMikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIF9BY3RpdmVUZXJtaW5hbCA9IFRlcm1pbmFsSWQ7ICAgIC8vIE9ubHkgY2hhbmdlIGFjdGl2ZSB0ZXJtaW5hbCBpbiBjYXNlIG9mIHN1Y2Nlc3MNCisgICAgICAgICAgICAgICAgX1dyaXRlTm9DaGVjayhwUmluZywgYWMsIDJ1KTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgciA9IC0xOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgciA9IC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiByOw0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgU0VHR0VSX1JUVF9UZXJtaW5hbE91dA0KKyoNCisqICBGdW5jdGlvbiBkZXNjcmlwdGlvbg0KKyogICAgV3JpdGVzIGEgc3RyaW5nIHRvIHRoZSBnaXZlbiB0ZXJtaW5hbA0KKyogICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHRlcm1pbmFsIGZvciBjaGFubmVsIDAuDQorKg0KKyogIFBhcmFtZXRlcnMNCisqICAgIFRlcm1pbmFsSWQgICBJbmRleCBvZiB0aGUgdGVybWluYWwuDQorKiAgICBzICAgICAgICAgICAgU3RyaW5nIHRvIGJlIHByaW50ZWQgb24gdGhlIHRlcm1pbmFsLg0KKyoNCisqICBSZXR1cm4gdmFsdWUNCisqICAgID49IDAgLSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4NCisqICAgICA8IDAgLSBFcnJvci4NCisqDQorKi8NCitpbnQgU0VHR0VSX1JUVF9UZXJtaW5hbE91dChjaGFyIFRlcm1pbmFsSWQsIGNvbnN0IGNoYXIgKnMpDQorew0KKyAgICBpbnQgIFN0YXR1czsNCisgICAgdW5zaWduZWQgIEZyYWdMZW47DQorICAgIHVuc2lnbmVkICBBdmFpbDsNCisgICAgU0VHR0VSX1JUVF9SSU5HX0JVRkZFUiAqcFJpbmc7DQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIFNhdmVkU3RhdGU7DQorICAgIC8vDQorICAgIElOSVQoKTsNCisNCisgICAgLy8NCisgICAgLy8gVmFsaWRhdGUgdGVybWluYWwgSUQuDQorICAgIC8vDQorICAgIGlmIChUZXJtaW5hbElkIDwgKGNoYXIpc2l6ZW9mKF9hVGVybWluYWxJZCkpICAgLy8gV2Ugb25seSBzdXBwb3J0IGEgY2VydGFpbiBudW1iZXIgb2YgY2hhbm5lbHMNCisgICAgew0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIEdldCAidG8taG9zdCIgcmluZyBidWZmZXIuDQorICAgICAgICAvLw0KKyAgICAgICAgcFJpbmcgPSAmX1NFR0dFUl9SVFQuYVVwWzBdOw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgdGVybWluYWwsIHdyaXRlIGRhdGEsIGNoYW5nZSBiYWNrLg0KKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZml4ZWQgYW5kIHZhcmlhYmxlIHNpemVzLg0KKyAgICAgICAgLy8NCisgICAgICAgIEZyYWdMZW4gPSBzdHJsZW4ocyk7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gSG93IHdlIG91dHB1dCBkZXBlbmRzIHVwb24gdGhlIG1vZGUuLi4NCisgICAgICAgIC8vDQorICAgICAgICBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSk7DQorICAgICAgICBBdmFpbCA9IF9HZXRBdmFpbFdyaXRlU3BhY2UocFJpbmcpOw0KKw0KKyAgICAgICAgc3dpdGNoIChwUmluZy0+RmxhZ3MgJiBTRUdHRVJfUlRUX01PREVfTUFTSykNCisgICAgICAgIHsNCisgICAgICAgIGNhc2UgU0VHR0VSX1JUVF9NT0RFX05PX0JMT0NLX1NLSVA6DQorDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gc2tpcCBtb2RlIGFuZCB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHdob2xlDQorICAgICAgICAgICAgLy8gb2YgdGhpcyBvdXRwdXQsIGRvbid0IGJvdGhlciBzd2l0Y2hpbmcgdGVybWluYWxzIGF0IGFsbC4NCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIGlmIChBdmFpbCA8IChGcmFnTGVuICsgNHUpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgU3RhdHVzID0gMDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgX1Bvc3RUZXJtaW5hbFN3aXRjaChwUmluZywgVGVybWluYWxJZCk7DQorICAgICAgICAgICAgICAgIFN0YXR1cyA9IChpbnQpX1dyaXRlQmxvY2tpbmcocFJpbmcsIHMsIEZyYWdMZW4pOw0KKyAgICAgICAgICAgICAgICBfUG9zdFRlcm1pbmFsU3dpdGNoKHBSaW5nLCBfQWN0aXZlVGVybWluYWwpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgU0VHR0VSX1JUVF9NT0RFX05PX0JMT0NLX1RSSU06DQorDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gdHJpbSBtb2RlIGFuZCB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGZvciBldmVyeXRoaW5nLA0KKyAgICAgICAgICAgIC8vIHRyaW0gdGhlIG91dHB1dCBidXQgYWx3YXlzIGluY2x1ZGUgdGhlIHRlcm1pbmFsIHN3aXRjaC4gIElmIG5vIHJvb20NCisgICAgICAgICAgICAvLyBmb3IgdGVybWluYWwgc3dpdGNoLCBza2lwIHRoYXQgdG90YWxseS4NCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIGlmIChBdmFpbCA8IDR1KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgU3RhdHVzID0gLTE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIF9Qb3N0VGVybWluYWxTd2l0Y2gocFJpbmcsIFRlcm1pbmFsSWQpOw0KKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAoaW50KV9Xcml0ZUJsb2NraW5nKHBSaW5nLCBzLCAoRnJhZ0xlbiA8IChBdmFpbCAtIDR1KSkgPyBGcmFnTGVuIDogKEF2YWlsIC0gNHUpKTsNCisgICAgICAgICAgICAgICAgX1Bvc3RUZXJtaW5hbFN3aXRjaChwUmluZywgX0FjdGl2ZVRlcm1pbmFsKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIFNFR0dFUl9SVFRfTU9ERV9CTE9DS19JRl9GSUZPX0ZVTEw6DQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gYmxvY2tpbmcgbW9kZSwgb3V0cHV0IGV2ZXJ5dGhpbmcuDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICBfUG9zdFRlcm1pbmFsU3dpdGNoKHBSaW5nLCBUZXJtaW5hbElkKTsNCisgICAgICAgICAgICBTdGF0dXMgPSAoaW50KV9Xcml0ZUJsb2NraW5nKHBSaW5nLCBzLCBGcmFnTGVuKTsNCisgICAgICAgICAgICBfUG9zdFRlcm1pbmFsU3dpdGNoKHBSaW5nLCBfQWN0aXZlVGVybWluYWwpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICBTdGF0dXMgPSAtMTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyBGaW5pc2ggdXAuDQorICAgICAgICAvLw0KKyAgICAgICAgU0VHR0VSX1JUVF9VTkxPQ0soU2F2ZWRTdGF0ZSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBTdGF0dXMgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zZWdnZXJfcnR0L1NFR0dFUl9SVFQuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc2VnZ2VyX3J0dC9TRUdHRVJfUlRULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyZGUwNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc2VnZ2VyX3J0dC9TRUdHRVJfUlRULmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgU0VHR0VSIE1JQ1JPQ09OVFJPTExFUiBHbWJIICYgQ28uIEtHICAgICAgICAgICAgICAgICAqDQorKiAgICAgICBTb2x1dGlvbnMgZm9yIHJlYWwgdGltZSBtaWNyb2NvbnRyb2xsZXIgYXBwbGljYXRpb25zICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAoYykgMjAxNCAtIDIwMTUgIFNFR0dFUiBNaWNyb2NvbnRyb2xsZXIgR21iSCAmIENvLiBLRyAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgIHd3dy5zZWdnZXIuY29tICAgICBTdXBwb3J0OiBzdXBwb3J0QHNlZ2dlci5jb20gICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICogVGhpcyBzb2Z0d2FyZSBtYXkgaW4gaXRzIHVubW9kaWZpZWQgZm9ybSBiZSBmcmVlbHkgcmVkaXN0cmlidXRlZCAqDQorKiAgIGluIHNvdXJjZSBmb3JtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogKiBUaGUgc291cmNlIGNvZGUgbWF5IGJlIG1vZGlmaWVkLCBwcm92aWRlZCB0aGUgc291cmNlIGNvZGUgICAgICAgICoNCisqICAgcmV0YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kICAqDQorKiAgIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogKiBNb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBsaW5rYWJsZSBmb3JtICAgICoNCisqICAgbWF5IG5vdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IHByaW9yIGNvbnNlbnQgb2YgU0VHR0VSLiAgICAgICAgICAqDQorKiAqIFRoaXMgc29mdHdhcmUgbWF5IG9ubHkgYmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFNFR0dFUiAgICAgKg0KKyogICBKLUxpbmsgZGVidWcgcHJvYmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgICAgICAgICAgICAgKg0KKyogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgICAgICAgICoNCisqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GICAgICAgICAgICAqDQorKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSAgICAgICAgICAgKg0KKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgU0VHR0VSIE1pY3JvY29udHJvbGxlciBCRSBMSUFCTEUgRk9SICoNCisqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SICAgICAgICAgICAqDQorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCAgKg0KKyogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7ICAgICoNCisqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgICAgICAqDQorKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgICAgICAgICAgKg0KKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgICoNCisqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggICAqDQorKiBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRU5ELU9GLUhFQURFUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0ZpbGUgICAgOiBTRUdHRVJfUlRULmgNCitQdXJwb3NlIDogSW1wbGVtZW50YXRpb24gb2YgU0VHR0VSIHJlYWwtdGltZSB0cmFuc2ZlciB3aGljaCBhbGxvd3MNCisgICAgICAgICAgcmVhbC10aW1lIGNvbW11bmljYXRpb24gb24gdGFyZ2V0cyB3aGljaCBzdXBwb3J0IGRlYnVnZ2VyDQorICAgICAgICAgIG1lbW9yeSBhY2Nlc3NlcyB3aGlsZSB0aGUgQ1BVIGlzIHJ1bm5pbmcuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQorDQorI2lmbmRlZiBTRUdHRVJfUlRUX0gNCisjZGVmaW5lIFNFR0dFUl9SVFRfSA0KKw0KKyNpbmNsdWRlICJTRUdHRVJfUlRUX0NvbmYuaCINCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgRGVmaW5lcywgZml4ZWQNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFR5cGVzDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KKw0KKy8vDQorLy8gRGVzY3JpcHRpb24gZm9yIGEgY2lyY3VsYXIgYnVmZmVyIChhbHNvIGNhbGxlZCAicmluZyBidWZmZXIiKQ0KKy8vIHdoaWNoIGlzIHVzZWQgYXMgdXAtIChULT5IKSBvciBkb3duLWJ1ZmZlciAoSC0+VCkNCisvLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBjb25zdCAgICAgY2hhciAgICAqc05hbWU7ICAgICAgICAgLy8gT3B0aW9uYWwgbmFtZS4gU3RhbmRhcmQgbmFtZXMgc28gZmFyIGFyZTogIlRlcm1pbmFsIiwgIlN5c1ZpZXciLCAiSi1TY29wZV90NGk0Ig0KKyAgICBjaGFyICAgICpwQnVmZmVyOyAgICAgICAvLyBQb2ludGVyIHRvIHN0YXJ0IG9mIGJ1ZmZlcg0KKyAgICB1bnNpZ25lZCBTaXplT2ZCdWZmZXI7ICAvLyBCdWZmZXIgc2l6ZSBpbiBieXRlcy4gTm90ZSB0aGF0IG9uZSBieXRlIGlzIGxvc3QsIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgZmlsbCB1cCB0aGUgYnVmZmVyIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBwcm9ibGVtIG9mIGJlaW5nIHVuYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZ1bGwgYW5kIGVtcHR5Lg0KKyAgICB2b2xhdGlsZSAgdW5zaWduZWQNCisgICAgV3JPZmY7ICAgICAgICAgLy8gUG9zaXRpb24gb2YgbmV4dCBpdGVtIHRvIGJlIHdyaXR0ZW4gYnkgZWl0aGVyIGhvc3QgKGRvd24tYnVmZmVyKSBvciB0YXJnZXQgKHVwLWJ1ZmZlcikuIE11c3QgYmUgdm9sYXRpbGUgc2luY2UgaXQgbWF5IGJlIG1vZGlmaWVkIGJ5IGhvc3QgKGRvd24tYnVmZmVyKQ0KKyAgICB2b2xhdGlsZSAgdW5zaWduZWQNCisgICAgUmRPZmY7ICAgICAgICAgLy8gUG9zaXRpb24gb2YgbmV4dCBpdGVtIHRvIGJlIHJlYWQgYnkgdGFyZ2V0IChkb3duLWJ1ZmZlcikgb3IgaG9zdCAodXAtYnVmZmVyKS4gTXVzdCBiZSB2b2xhdGlsZSBzaW5jZSBpdCBtYXkgYmUgbW9kaWZpZWQgYnkgaG9zdCAodXAtYnVmZmVyKQ0KKyAgICB1bnNpZ25lZCBGbGFnczsgICAgICAgICAvLyBDb250YWlucyBjb25maWd1cmF0aW9uIGZsYWdzDQorfSBTRUdHRVJfUlRUX1JJTkdfQlVGRkVSOw0KKw0KKy8vDQorLy8gUlRUIGNvbnRyb2wgYmxvY2sgd2hpY2ggZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhdmFpbGFibGUNCisvLyBhcyB3ZWxsIGFzIHRoZSBjb25maWd1cmF0aW9uIGZvciBlYWNoIGJ1ZmZlcg0KKy8vDQorLy8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgYWNJRFsxNl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZWQgdG8gIlNFR0dFUiBSVFQiDQorICAgIGludA0KKyAgICBNYXhOdW1VcEJ1ZmZlcnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplZCB0byBTRUdHRVJfUlRUX01BWF9OVU1fVVBfQlVGRkVSUyAodHlwZS4gMikNCisgICAgaW50DQorICAgIE1heE51bURvd25CdWZmZXJzOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVkIHRvIFNFR0dFUl9SVFRfTUFYX05VTV9ET1dOX0JVRkZFUlMgKHR5cGUuIDIpDQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVINCisgICAgYVVwW1NFR0dFUl9SVFRfTUFYX05VTV9VUF9CVUZGRVJTXTsgICAgICAgLy8gVXAgYnVmZmVycywgdHJhbnNmZXJyaW5nIGluZm9ybWF0aW9uIHVwIGZyb20gdGFyZ2V0IHZpYSBkZWJ1ZyBwcm9iZSB0byBob3N0DQorICAgIFNFR0dFUl9SVFRfUklOR19CVUZGRVINCisgICAgYURvd25bU0VHR0VSX1JUVF9NQVhfTlVNX0RPV05fQlVGRkVSU107ICAgLy8gRG93biBidWZmZXJzLCB0cmFuc2ZlcnJpbmcgaW5mb3JtYXRpb24gZG93biBmcm9tIGhvc3QgdmlhIGRlYnVnIHByb2JlIHRvIHRhcmdldA0KK30gU0VHR0VSX1JUVF9DQjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgR2xvYmFsIGRhdGENCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQorZXh0ZXJuIFNFR0dFUl9SVFRfQ0IgX1NFR0dFUl9SVFQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIFJUVCBBUEkgZnVuY3Rpb25zDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX0NvbmZpZ1VwQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSwgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBGbGFncyk7DQoraW50ICAgICAgICAgIFNFR0dFUl9SVFRfQ29uZmlnRG93bkJ1ZmZlcih1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3QgY2hhciAqc05hbWUsIHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIEJ1ZmZlclNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBGbGFncyk7DQoraW50ICAgICAgICAgIFNFR0dFUl9SVFRfR2V0S2V5KHZvaWQpOw0KK3Vuc2lnbmVkICAgICBTRUdHRVJfUlRUX0hhc0RhdGEodW5zaWduZWQgQnVmZmVySW5kZXgpOw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX0hhc0tleSh2b2lkKTsNCit2b2lkICAgICAgICAgU0VHR0VSX1JUVF9Jbml0KHZvaWQpOw0KK3Vuc2lnbmVkICAgICBTRUdHRVJfUlRUX1JlYWQodW5zaWduZWQgQnVmZmVySW5kZXgsICAgICAgIHZvaWQgKnBCdWZmZXIsIHVuc2lnbmVkIEJ1ZmZlclNpemUpOw0KK3Vuc2lnbmVkICAgICBTRUdHRVJfUlRUX1JlYWROb0xvY2sodW5zaWduZWQgQnVmZmVySW5kZXgsICAgICAgIHZvaWQgKnBEYXRhLCAgIHVuc2lnbmVkIEJ1ZmZlclNpemUpOw0KK2ludCAgICAgICAgICBTRUdHRVJfUlRUX1NldE5hbWVEb3duQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSk7DQoraW50ICAgICAgICAgIFNFR0dFUl9SVFRfU2V0TmFtZVVwQnVmZmVyKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzTmFtZSk7DQoraW50ICAgICAgICAgIFNFR0dFUl9SVFRfV2FpdEtleSh2b2lkKTsNCit1bnNpZ25lZCAgICAgU0VHR0VSX1JUVF9Xcml0ZSh1bnNpZ25lZCBCdWZmZXJJbmRleCwgY29uc3Qgdm9pZCAqcEJ1ZmZlciwgdW5zaWduZWQgTnVtQnl0ZXMpOw0KK3Vuc2lnbmVkICAgICBTRUdHRVJfUlRUX1dyaXRlTm9Mb2NrKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBOdW1CeXRlcyk7DQordW5zaWduZWQgICAgIFNFR0dFUl9SVFRfV3JpdGVTa2lwTm9Mb2NrKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCB2b2lkICpwQnVmZmVyLCB1bnNpZ25lZCBOdW1CeXRlcyk7DQordW5zaWduZWQgICAgIFNFR0dFUl9SVFRfV3JpdGVTdHJpbmcodW5zaWduZWQgQnVmZmVySW5kZXgsIGNvbnN0IGNoYXIgKnMpOw0KKy8vDQorLy8gRnVuY3Rpb24gbWFjcm8gZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbg0KKy8vDQorI2RlZmluZSAgICAgIFNFR0dFUl9SVFRfSEFTREFUQShuKSAgICAgICAoX1NFR0dFUl9SVFQuYURvd25bbl0uV3JPZmYgLSBfU0VHR0VSX1JUVC5hRG93bltuXS5SZE9mZikNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgUlRUICJUZXJtaW5hbCIgQVBJIGZ1bmN0aW9ucw0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCitpbnQgICAgIFNFR0dFUl9SVFRfU2V0VGVybWluYWwoY2hhciBUZXJtaW5hbElkKTsNCitpbnQgICAgIFNFR0dFUl9SVFRfVGVybWluYWxPdXQoY2hhciBUZXJtaW5hbElkLCBjb25zdCBjaGFyICpzKTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgUlRUIHByaW50ZiBmdW5jdGlvbnMgKHJlcXVpcmUgU0VHR0VSX1JUVF9wcmludGYuYykNCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyovDQoraW50IFNFR0dFUl9SVFRfcHJpbnRmKHVuc2lnbmVkIEJ1ZmZlckluZGV4LCBjb25zdCBjaGFyICpzRm9ybWF0LCAuLi4pOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBEZWZpbmVzDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqLw0KKw0KKy8vDQorLy8gT3BlcmF0aW5nIG1vZGVzLiBEZWZpbmUgYmVoYXZpb3IgaWYgYnVmZmVyIGlzIGZ1bGwgKG5vdCBlbm91Z2ggc3BhY2UgZm9yIGVudGlyZSBtZXNzYWdlKQ0KKy8vDQorI2RlZmluZSBTRUdHRVJfUlRUX01PREVfTk9fQkxPQ0tfU0tJUCAgICAgICAgICgwVSkgICAgIC8vIFNraXAuIERvIG5vdCBibG9jaywgb3V0cHV0IG5vdGhpbmcuIChEZWZhdWx0KQ0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NT0RFX05PX0JMT0NLX1RSSU0gICAgICAgICAoMVUpICAgICAvLyBUcmltOiBEbyBub3QgYmxvY2ssIG91dHB1dCBhcyBtdWNoIGFzIGZpdHMuDQorI2RlZmluZSBTRUdHRVJfUlRUX01PREVfQkxPQ0tfSUZfRklGT19GVUxMICAgICgyVSkgICAgIC8vIEJsb2NrOiBXYWl0IHVudGlsIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBidWZmZXIuDQorI2RlZmluZSBTRUdHRVJfUlRUX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICgzVSkNCisNCisvLw0KKy8vIENvbnRyb2wgc2VxdWVuY2VzLCBiYXNlZCBvbiBBTlNJLg0KKy8vIENhbiBiZSB1c2VkIHRvIGNvbnRyb2wgY29sb3IsIGFuZCBjbGVhciB0aGUgc2NyZWVuDQorLy8NCisjZGVmaW5lIFJUVF9DVFJMX1JFU0VUICAgICAgICAgICAgICAgICJcZVswbSIgICAgICAgICAvLyBSZXNldCB0byBkZWZhdWx0IGNvbG9ycw0KKyNkZWZpbmUgUlRUX0NUUkxfQ0xFQVIgICAgICAgICAgICAgICAgIlxlWzJKIiAgICAgICAgIC8vIENsZWFyIHNjcmVlbiwgcmVwb3NpdGlvbiBjdXJzb3IgdG8gdG9wIGxlZnQNCisNCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQkxBQ0sgICAgICAgICAgICJcZVsyOzMwbSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfUkVEICAgICAgICAgICAgICJcZVsyOzMxbSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfR1JFRU4gICAgICAgICAgICJcZVsyOzMybSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfWUVMTE9XICAgICAgICAgICJcZVsyOzMzbSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQkxVRSAgICAgICAgICAgICJcZVsyOzM0bSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfTUFHRU5UQSAgICAgICAgICJcZVsyOzM1bSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQ1lBTiAgICAgICAgICAgICJcZVsyOzM2bSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfV0hJVEUgICAgICAgICAgICJcZVsyOzM3bSINCisNCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX0JMQUNLICAgICJcZVsxOzMwbSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX1JFRCAgICAgICJcZVsxOzMxbSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX0dSRUVOICAgICJcZVsxOzMybSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX1lFTExPVyAgICJcZVsxOzMzbSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX0JMVUUgICAgICJcZVsxOzM0bSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX01BR0VOVEEgICJcZVsxOzM1bSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX0NZQU4gICAgICJcZVsxOzM2bSINCisjZGVmaW5lIFJUVF9DVFJMX1RFWFRfQlJJR0hUX1dISVRFICAgICJcZVsxOzM3bSINCisNCisjZGVmaW5lIFJUVF9DVFJMX0JHX0JMQUNLICAgICAgICAgICAgICJcZVsyNDs0MG0iDQorI2RlZmluZSBSVFRfQ1RSTF9CR19SRUQgICAgICAgICAgICAgICAiXGVbMjQ7NDFtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfR1JFRU4gICAgICAgICAgICAgIlxlWzI0OzQybSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX1lFTExPVyAgICAgICAgICAgICJcZVsyNDs0M20iDQorI2RlZmluZSBSVFRfQ1RSTF9CR19CTFVFICAgICAgICAgICAgICAiXGVbMjQ7NDRtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfTUFHRU5UQSAgICAgICAgICAgIlxlWzI0OzQ1bSINCisjZGVmaW5lIFJUVF9DVFJMX0JHX0NZQU4gICAgICAgICAgICAgICJcZVsyNDs0Nm0iDQorI2RlZmluZSBSVFRfQ1RSTF9CR19XSElURSAgICAgICAgICAgICAiXGVbMjQ7NDdtIg0KKw0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX0JMQUNLICAgICAgIlxlWzQ7NDBtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX1JFRCAgICAgICAgIlxlWzQ7NDFtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX0dSRUVOICAgICAgIlxlWzQ7NDJtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX1lFTExPVyAgICAgIlxlWzQ7NDNtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX0JMVUUgICAgICAgIlxlWzQ7NDRtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX01BR0VOVEEgICAgIlxlWzQ7NDVtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX0NZQU4gICAgICAgIlxlWzQ7NDZtIg0KKyNkZWZpbmUgUlRUX0NUUkxfQkdfQlJJR0hUX1dISVRFICAgICAgIlxlWzQ7NDdtIg0KKw0KKw0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVF9Db25mLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvU0VHR0VSX1JUVF9Db25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1ZTY5NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc2VnZ2VyX3J0dC9TRUdHRVJfUlRUX0NvbmYuaApAQCAtMCwwICsxLDEzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICBTRUdHRVIgTUlDUk9DT05UUk9MTEVSIEdtYkggJiBDby4gS0cgICAgICAgICAgICAgICAgICoNCisqICAgICAgIFNvbHV0aW9ucyBmb3IgcmVhbCB0aW1lIG1pY3JvY29udHJvbGxlciBhcHBsaWNhdGlvbnMgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgIChjKSAyMDE0IC0gMjAxNSAgU0VHR0VSIE1pY3JvY29udHJvbGxlciBHbWJIICYgQ28uIEtHICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgd3d3LnNlZ2dlci5jb20gICAgIFN1cHBvcnQ6IHN1cHBvcnRAc2VnZ2VyLmNvbSAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitGaWxlICAgIDogU0VHR0VSX1JUVF9Db25mLmgNCitQdXJwb3NlIDogSW1wbGVtZW50YXRpb24gb2YgU0VHR0VSIHJlYWwtdGltZSB0cmFuc2ZlciAoUlRUKSB3aGljaA0KKyAgICAgICAgICBhbGxvd3MgcmVhbC10aW1lIGNvbW11bmljYXRpb24gb24gdGFyZ2V0cyB3aGljaCBzdXBwb3J0DQorICAgICAgICAgIGRlYnVnZ2VyIG1lbW9yeSBhY2Nlc3NlcyB3aGlsZSB0aGUgQ1BVIGlzIHJ1bm5pbmcuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRU5ELU9GLUhFQURFUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyovDQorDQorI2lmbmRlZiBTRUdHRVJfUlRUX0NPTkZfSA0KKyNkZWZpbmUgU0VHR0VSX1JUVF9DT05GX0gNCisNCisjaW5jbHVkZSAiY29tcGlsZXJfYWJzdHJhY3Rpb24uaCINCisNCisjaWZkZWYgX19JQ0NBUk1fXw0KKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+DQorI2VuZGlmDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoNCisqICAgICAgIERlZmluZXMsIGNvbmZpZ3VyYWJsZQ0KKyoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKi8NCisNCisjZGVmaW5lIFNFR0dFUl9SVFRfTUFYX05VTV9VUF9CVUZGRVJTICAgICAgICAgICAgICgyKSAgICAgLy8gTWF4LiBudW1iZXIgb2YgdXAtYnVmZmVycyAoVC0+SCkgYXZhaWxhYmxlIG9uIHRoaXMgdGFyZ2V0ICAgIChEZWZhdWx0OiAyKQ0KKyNkZWZpbmUgU0VHR0VSX1JUVF9NQVhfTlVNX0RPV05fQlVGRkVSUyAgICAgICAgICAgKDIpICAgICAvLyBNYXguIG51bWJlciBvZiBkb3duLWJ1ZmZlcnMgKEgtPlQpIGF2YWlsYWJsZSBvbiB0aGlzIHRhcmdldCAgKERlZmF1bHQ6IDIpDQorDQorI2RlZmluZSBCVUZGRVJfU0laRV9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTAyNCkgIC8vIFNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGVybWluYWwgb3V0cHV0IG9mIHRhcmdldCwgdXAgdG8gaG9zdCAoRGVmYXVsdDogMWspDQorI2RlZmluZSBCVUZGRVJfU0laRV9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAoMTYpICAgIC8vIFNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGVybWluYWwgaW5wdXQgdG8gdGFyZ2V0IGZyb20gaG9zdCAoVXN1YWxseSBrZXlib2FyZCBpbnB1dCkgKERlZmF1bHQ6IDE2KQ0KKw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9QUklOVEZfQlVGRkVSX1NJWkUgICAgICAgICAgICAgKDY0dSkgICAgLy8gU2l6ZSBvZiBidWZmZXIgZm9yIFJUVCBwcmludGYgdG8gYnVsay1zZW5kIGNoYXJzIHZpYSBSVFQgICAgIChEZWZhdWx0OiA2NCkNCisNCisjZGVmaW5lIFNFR0dFUl9SVFRfTU9ERV9ERUZBVUxUICAgICAgICAgICAgICAgICAgIFNFR0dFUl9SVFRfTU9ERV9OT19CTE9DS19TS0lQIC8vIE1vZGUgZm9yIHByZS1pbml0aWFsaXplZCB0ZXJtaW5hbCBjaGFubmVsIChidWZmZXIgMCkNCisNCisvLw0KKy8vIFRhcmdldCBpcyBub3QgYWxsb3dlZCB0byBwZXJmb3JtIG90aGVyIFJUVCBvcGVyYXRpb25zIHdoaWxlIHN0cmluZyBzdGlsbCBoYXMgbm90IGJlZW4gc3RvcmVkIGNvbXBsZXRlbHkuDQorLy8gT3RoZXJ3aXNlIHdlIHdvdWxkIHByb2JhYmx5IGVuZCB1cCB3aXRoIGEgbWl4ZWQgc3RyaW5nIGluIHRoZSBidWZmZXIuDQorLy8gSWYgdXNpbmcgIFJUVCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHRzLCBtdWx0aXBsZSB0YXNrcyBvciBtdWx0aSBwcm9jZXNzb3JzLCBkZWZpbmUgdGhlIFNFR0dFUl9SVFRfTE9DSygpIGFuZCBTRUdHRVJfUlRUX1VOTE9DSygpIGZ1bmN0aW9uIGhlcmUuDQorLy8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgUlRUIGxvY2sgY29uZmlndXJhdGlvbiBmb3IgU0VHR0VSIEVtYmVkZGVkIFN0dWRpbywNCisqICAgICAgIFJvd2xleSBDcm9zc1N0dWRpbyBhbmQgR0NDDQorKi8NCisjaWYgKGRlZmluZWQgX19TRVNfQVJNKSB8fCAoZGVmaW5lZCBfX0NST1NTV09SS1NfQVJNKSB8fCAoZGVmaW5lZCBfX0dOVUNfXykNCisjaWZkZWYgX19BUk1fQVJDSF82TV9fDQorI2RlZmluZSBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSkgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJtcnMgICAlMCwgcHJpbWFzayAgXG5cdCIgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdiAgIHIxLCAkMSAgICAgXG5cdCIgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtc3IgICBwcmltYXNrLCByMSAgXG5cdCIgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKFNhdmVkU3RhdGUpICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInIxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisjZGVmaW5lIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FTTSB2b2xhdGlsZSAoIm1zciAgIHByaW1hc2ssICUwICBcblx0IiAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKFNhdmVkU3RhdGUpICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisjZWxpZiAoZGVmaW5lZChfX0FSTV9BUkNIXzdNX18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83RU1fXykpDQorI2RlZmluZSBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSkgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJtcnMgICAlMCwgYmFzZXByaSAgXG5cdCIgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3YgICByMSwgJDEyOCAgICAgXG5cdCIgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXNyICAgYmFzZXByaSwgcjEgIFxuXHQiICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChTYXZlZFN0YXRlKSAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisjZGVmaW5lIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FTTSB2b2xhdGlsZSAoIm1zciAgIGJhc2VwcmksICUwICBcblx0IiAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKFNhdmVkU3RhdGUpICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisjZWxzZQ0KKyNkZWZpbmUgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpICAgKHZvaWQpKFNhdmVkU3RhdGUpDQorI2RlZmluZSBTRUdHRVJfUlRUX1VOTE9DSyhTYXZlZFN0YXRlKSAodm9pZCkoU2F2ZWRTdGF0ZSkNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKg0KKyogICAgICAgUlRUIGxvY2sgY29uZmlndXJhdGlvbiBmb3IgSUFSIEVXQVJNDQorKi8NCisjaWZkZWYgX19JQ0NBUk1fXw0KKyNpZiAoZGVmaW5lZCAoX19BUk03TV9fKSAmJiAoX19DT1JFX18gPT0gX19BUk03TV9fKSkNCisjZGVmaW5lIFNFR0dFUl9SVFRfTE9DSyhTYXZlZFN0YXRlKSAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVkU3RhdGUgPSBfX2dldF9QUklNQVNLKCk7ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X1BSSU1BU0soMSk7ICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisjZGVmaW5lIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2V0X1BSSU1BU0soU2F2ZWRTdGF0ZSk7ICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisjZWxpZiAoZGVmaW5lZCAoX19BUk03RU1fXykgJiYgKF9fQ09SRV9fID09IF9fQVJNN0VNX18pKQ0KKyNkZWZpbmUgU0VHR0VSX1JUVF9MT0NLKFNhdmVkU3RhdGUpICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZWRTdGF0ZSA9IF9fZ2V0X0JBU0VQUkkoKTsgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXRfQkFTRVBSSSgxMjgpOyAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyNkZWZpbmUgU0VHR0VSX1JUVF9VTkxPQ0soU2F2ZWRTdGF0ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXRfQkFTRVBSSShTYXZlZFN0YXRlKTsgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiAgICAgICBSVFQgbG9jayBjb25maWd1cmF0aW9uIGZhbGxiYWNrDQorKi8NCisjaWZuZGVmICAgU0VHR0VSX1JUVF9MT0NLDQorI2RlZmluZSBTRUdHRVJfUlRUX0xPQ0soU2F2ZWRTdGF0ZSkgICAodm9pZCkoU2F2ZWRTdGF0ZSkNCisjZW5kaWYNCisNCisjaWZuZGVmICAgU0VHR0VSX1JUVF9VTkxPQ0sNCisjZGVmaW5lIFNFR0dFUl9SVFRfVU5MT0NLKFNhdmVkU3RhdGUpICh2b2lkKShTYXZlZFN0YXRlKQ0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIGZpbGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvbGljZW5zZS9saWNlbnNlLnR4dCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc2VnZ2VyX3J0dC9saWNlbnNlL2xpY2Vuc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZTQ5MGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NlZ2dlcl9ydHQvbGljZW5zZS9saWNlbnNlLnR4dApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgIFNFR0dFUiBNSUNST0NPTlRST0xMRVIgR21iSCAmIENvLiBLRyAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgU29sdXRpb25zIGZvciByZWFsIHRpbWUgbWljcm9jb250cm9sbGVyIGFwcGxpY2F0aW9ucyAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogICAgICAgKGMpIDIwMTQgLSAyMDE1ICBTRUdHRVIgTWljcm9jb250cm9sbGVyIEdtYkggJiBDby4gS0cgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICB3d3cuc2VnZ2VyLmNvbSAgICAgU3VwcG9ydDogc3VwcG9ydEBzZWdnZXIuY29tICAgICAgICAgICAgICAgKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAqIFRoaXMgc29mdHdhcmUgbWF5IGluIGl0cyB1bm1vZGlmaWVkIGZvcm0gYmUgZnJlZWx5IHJlZGlzdHJpYnV0ZWQgKg0KKyogICBpbiBzb3VyY2UgZm9ybS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICogVGhlIHNvdXJjZSBjb2RlIG1heSBiZSBtb2RpZmllZCwgcHJvdmlkZWQgdGhlIHNvdXJjZSBjb2RlICAgICAgICAqDQorKiAgIHJldGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCAgKg0KKyogICB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICogTW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgbGlua2FibGUgZm9ybSAgICAqDQorKiAgIG1heSBub3QgYmUgZGlzdHJpYnV0ZWQgd2l0aG91dCBwcmlvciBjb25zZW50IG9mIFNFR0dFUi4gICAgICAgICAgKg0KKyogKiBUaGlzIHNvZnR3YXJlIG1heSBvbmx5IGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTRUdHRVIgICAgICoNCisqICAgSi1MaW5rIGRlYnVnIHByb2Jlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EICAgICAgICAgICAgICoNCisqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsICAgICAgICAqDQorKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiAgICAgICAgICAgKg0KKyogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgICAgICAgICAgICoNCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFNFR0dFUiBNaWNyb2NvbnRyb2xsZXIgQkUgTElBQkxFIEZPUiAqDQorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiAgICAgICAgICAgKg0KKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgICoNCisqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyAgICAqDQorKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAgICAgKg0KKyogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAgICAgICAgICoNCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFICAqDQorKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIICAgKg0KKyogREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9ibGVfYXBpLmRveCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9ibGVfYXBpLmRveApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU5MGFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL2JsZV9hcGkuZG94CkBAIC0wLDAgKzEsMzI3OCBAQAorLyoqDQorICogQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTg0KKyAqIEB7DQorICogQGRlZmdyb3VwIEJMRV9DT01NT05fTVNDIE1lc3NhZ2UgU2VxdWVuY2UgQ2hhcnRzDQorICogQHsNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfQ09NTU9OX0VOQUJMRSBCTEUgU3RhY2sgRW5hYmxlDQorICogQHsNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNEOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9zb2Z0ZGV2aWNlX2VuYWJsZShjbG9jaywgYXNzZXJ0aW9uX2hhbmRsZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlNldCBhcHBfcmFtX2Jhc2UgdG8gU29mdERldmljZSBkZWZhdWx0IGZyb20gcmVsZWFzZSBub3RlcyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkNvbmZpZ3VyZSB0aGUgQkxFIHN0YWNrIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KGNmZ19pZCwgY2ZnLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogLi4uOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KGNmZ19pZCwgY2ZnLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiRHVyaW5nIGRldmVsb3BtZW50OiBEZXRlcm1pbmUgdGhlIHJlZ2lvbiBvZiBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIFNvZnREZXZpY2UiXTsNCisgKiAtLS0gW2xhYmVsID0gIkFsdGVybmF0aXZlIDE6IFRoZSBkZWZhdWx0IGFwcF9yYW1fYmFzZSBpcyB0b28gc21hbGwgZm9yIHRoZSBjb25maWd1cmF0aW9uIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoJmFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX05PX01FTSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9ImFwcF9yYW1fYmFzZSBmaWxsZWQgYnkgdGhlIFNvZnREZXZpY2Ugd2l0aCAweDIwMDB4eHh4Il07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzZXRzIDB4MjAwMHh4eHggYXMgaXRzIFJBTSBzdGFydGluZyBwb2ludCBhbmQgcmVidWlsZHMiLCB0ZXh0Ymdjb2xvcj0iIzdmZmY3ZiJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkFsdGVybmF0aXZlIDI6IFRoZSBkZWZhdWx0IGFwcF9yYW1fYmFzZSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBjb25maWd1cmF0aW9uIGJ1dA0KKyAqIHRoZSBhcHAgd2FudHMgdG8gc2F2ZSBSQU0iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgmYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9ImFwcF9yYW1fYmFzZSBmaWxsZWQgYnkgdGhlIFNvZnREZXZpY2Ugd2l0aCAweDIwMDB5eXl5Il07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzZXRzIDB4MjAwMHl5eXkgYXMgaXRzIFJBTSBzdGFydGluZyBwb2ludCBhbmQgcmVidWlsZHMiLCB0ZXh0Ymdjb2xvcj0iIzdmZmY3ZiJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkFsdGVybmF0aXZlIDM6IFRoZSBkZWZhdWx0IGFwcF9yYW1fYmFzZSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBjb25maWd1cmF0aW9uLCBhcHANCisgKiBkb2VzIG5vdCBuZWVkIHRvIHNhdmUgUkFNIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoJmFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJUaGUgYXBwIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgdmFsdWUgZmlsbGVkIGludG8gYXBwX3JhbV9iYXNlIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiQWZ0ZXIgZGV2ZWxvcG1lbnQ6IFRoZSBub3JtYWwgQkxFIFN0YWNrIEVuYWJsZSBzZXF1ZW5jZSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX3NvZnRkZXZpY2VfZW5hYmxlKGNsb2NrLCBhc3NlcnRpb25faGFuZGxlcik7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iU2V0IGFwcF9yYW1fYmFzZSB0byB2YWx1ZSBkZXRlcm1pbmVkIGR1cmluZyBkZXZlbG9wbWVudCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkNvbmZpZ3VyZSB0aGUgQkxFIHN0YWNrIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KGNmZ19pZCwgY2ZnLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogLi4uOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KGNmZ19pZCwgY2ZnLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiRW5hYmxlIHRoZSBCTEUgc3RhY2siXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgmYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICogQH0NCisgKg0KKyAqIEBkZWZncm91cCBCTEVfQ09OTl9DRkcgQ29ubmVjdGlvbiBDb25maWd1cmF0aW9uDQorICogQHsNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNEOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9zb2Z0ZGV2aWNlX2VuYWJsZShjbG9jaywgYXNzZXJ0aW9uX2hhbmRsZXIpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiQ29uZmlndXJlIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb25zIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IiBDb25maWd1cmUgR0FQIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVAsIGNmZyA9IHtjb25uX2NmZ190YWcgPSAxLCBnYXBfY29ubl9jZmcuY29ubl9jb3VudCA9IDEsIGFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iIENvbmZpZ3VyZSBHQVRUIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRULCBjZmcgPSB7Y29ubl9jZmdfdGFnID0gMSwgZ2F0dF9jb25uX2NmZywgYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSIgQ29uZmlndXJlIEdBVFRDIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRUQywgY2ZnID0ge2Nvbm5fY2ZnX3RhZyA9IDEsIGdhdHRjX2Nvbm5fY2ZnLCBhcHBfcmFtX2Jhc2UpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IiBDb25maWd1cmUgR0FUVFMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2NmZ19zZXQoQkxFX0NPTk5fQ0ZHX0dBVFRTLCBjZmcgPSB7Y29ubl9jZmdfdGFnID0gMSwgZ2F0dHNfY29ubl9jZmcsIGFwcF9yYW1fYmFzZSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgmYXBwX3JhbV9iYXNlKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIkVzdGFibGlzaCBjb25uZWN0aW9uIHdpdGggZGlmZmVyZW50IGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbnMiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iRXN0YWJsaXNoIGNvbm5lY3Rpb24gd2l0aCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5lY3QocGFyYW1zLCBjb25uX2NmZ190YWcgPSBCTEVfQ09OTl9DRkdfVEFHX0RFRkFVTFQpOyJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkVzdGFibGlzaCBjb25uZWN0aW9uIHdpdGggY29ubmVjdGlvbiBjb25maWd1cmF0aW9uICMxIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RhcnQocGFyYW1zLCBjb25uX2NmZ190YWcgPSAxKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBObyBtb3JlIGNvbm5lY3Rpb25zIGNhbiBiZSBlc3RhYmxpc2hlZCB3aXRoIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiAjMSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBTRCBbbGFiZWwgPSAiQSBjb25uZWN0aW9uIGNhbm5vdCBiZSBlc3RhYmxpc2hlZCBpZiB0aGUgbnVtYmVyIG9mIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zIGlzIGVxdWFsIHRvIHRoZSBjb25uZWN0aW9uIGNvdW50IG9mIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uZWN0KHBhcmFtcywgY29ubl9jZmdfdGFnID0gMSk7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0NPTk5fQ09VTlQiXTsNCisgKiBAZW5kbXNjDQorICogQH0NCisgKiBAZGVmZ3JvdXAgQkxFX0NPTU1PTl9JUlFfRVZUX01TQyBJbnRlcnJ1cHQtZHJpdmVuIEV2ZW50IFJldHJpZXZhbA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0Q7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX3NvZnRkZXZpY2VfZW5hYmxlKGNsb2NrLCBhc3NlcnRpb25faGFuZGxlcik7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9udmljX0VuYWJsZUlSUShTRF9FVlRfSVJRbikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBTRCBbbGFiZWw9IkFwcGxpY2F0aW9uIHJ1bnMgYW5kIHVzZXMgU0QgQVBJIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJFdmVudCBBdmFpbGFibGUgZm9yIHRoZSBBcHAiXTsNCisgKiB8fHw7DQorICogQVBQPC1TRCBbbGFiZWwgPSAiU0RfRVZUX0lSUW4iLCB0ZXh0Y29sb3I9IiM4MDAwODAiLCBsaW5lY29sb3I9IiM4MDAwODAiXTsNCisgKiBBUFA9PkFQUCBbbGFiZWwgPSAiU0RfRVZUX0lSUUhhbmRsZXIoKSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9ldnRfZ2V0KGJ1ZmZlcik7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBldmVudH0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9DT01NT05fVEhSRUFEX0VWVF9NU0MgVGhyZWFkIE1vZGUgRXZlbnQgUmV0cmlldmFsDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2Rfc29mdGRldmljZV9lbmFibGUoY2xvY2ssIGFzc2VydGlvbl9oYW5kbGVyKTsiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9hcHBfZXZ0X3dhaXQodm9pZCk7Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIFRocmVhZCBNb2RlIGJsb2NrZWQsIENQVSBpbiBsb3cgcG93ZXIgbW9kZSJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJFdmVudCBBdmFpbGFibGUgZm9yIHRoZSBBcHAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9ldnRfZ2V0KGJ1ZmZlcik7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBldmVudH0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9hcHBfZXZ0X3dhaXQodm9pZCk7Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIFRocmVhZCBNb2RlIGJsb2NrZWQsIENQVSBpbiBsb3cgcG93ZXIgbW9kZSJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJFdmVudCBBdmFpbGFibGUgZm9yIHRoZSBBcHAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9ldnRfZ2V0KGJ1ZmZlcik7Il07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBldmVudH0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9hcHBfZXZ0X3dhaXQodm9pZCk7Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIFRocmVhZCBNb2RlIGJsb2NrZWQsIENQVSBpbiBsb3cgcG93ZXIgbW9kZSJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEB9DQorICogQH0NCisgKi8NCisNCisvKioNCisgKiBAYWRkdG9ncm91cCBCTEVfR0FQDQorICogQHsNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9NU0MgTWVzc2FnZSBTZXF1ZW5jZSBDaGFydHMNCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0FEVl9NU0MgQWR2ZXJ0aXNpbmcNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFNDQU5ORVJTOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2FkZHJfc2V0KHBlZXJfYWRkcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X2RhdGFfc2V0KGFkdiwgc3IpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLi4uOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBTdG9wcyBBZHZlcnRpc2VtZW50ICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0b3AoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQWR2ZXJ0aXNlbWVudCBUaW1lb3V0ICJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9USU1FT1VUIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ09OTl9NU0MgUGVyaXBoZXJhbCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgYW5kIFRlcm1pbmF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iU3RhcnQgQ29ubmVjdGFibGUgQWR2ZXJ0aXNpbmciXTsNCisgKiB8fHw7DQorICogU0Q8Oj5DRU5UUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTkVDVEVEIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgTG9jYWwgRGlzY29ubmVjdGlvbiAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Rpc2Nvbm5lY3QocmVhc29uKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVGVybWluYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfRElTQ09OTkVDVEVEIHtyZWFzb259Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgUmVtb3RlIERpc2Nvbm5lY3Rpb24gIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVGVybWluYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfRElTQ09OTkVDVEVEIHtyZWFzb259Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ1BVX01TQyBQZXJpcGhlcmFsIENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQgd2l0aCBjb25uLiBwYXJhbXMuIENQIzEiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZShDUCMyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQ2VudHJhbCBBY2NlcHRzICJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlc3BvbnNlOiBBY2NlcHRlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge0NQIzJ9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQ2VudHJhbCBSZWplY3RzICJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlc3BvbnNlOiBSZWplY3RlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Q1AjMX0iXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIENlbnRyYWwgSWdub3JlcyAiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBTRCBib3ggU0QgW2xhYmVsPSJUaW1lb3V0Il07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtDUCMxfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1JTU0lfRklMVF9NU0MgUlNTSSBmb3IgY29ubmVjdGlvbnMgd2l0aCBldmVudCBmaWx0ZXINCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMTogVHJpZ2dlciBldmVudCB3aGVuIGEgbmV3IFJTU0kgaXMgYXZhaWxhYmxlIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcnNzaV9zdGFydChjb25uX2hhbmRsZSwgMCwgMCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDwtUEVFUiBbbGFiZWwgPSAiUlNTSSBTYW1wbGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VEIHtSU1NJIzF9Il07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQge1JTU0kjMn0iXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCB7UlNTSSMzfSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RvcCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyOiBPbmx5IHRyaWdnZXIgZXZlbnQgaWYgUlNTSSBjaGFuZ2VzIGJ5IDUgZEJtIG9yIG1vcmUuIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcnNzaV9zdGFydChjb25uX2hhbmRsZSwgMHgwNSwgMHgwMCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDwtUEVFUiBbbGFiZWwgPSAiUlNTSSBTYW1wbGU9MHgwMCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQge1JTU0kjMX0iXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MDQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MDMiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPj0weDA1IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCB7UlNTSSMyfSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RvcCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzOiBPbmx5IHRyaWdnZXIgZXZlbnQgaWYgbW9yZSB0aGFuIDMgUlNTSSBzYW1wbGVzIGhhdmUgZGV2aWF0ZWQgZnJvbSB0aGUgbGFzdCByZXBvcnRlZCBSU1NJIGJ5IDUgZEJtIG9yIG1vcmUuIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcnNzaV9zdGFydChjb25uX2hhbmRsZSwgMHgwNSwgMHgwMykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDwtUEVFUiBbbGFiZWwgPSAiUlNTSSBTYW1wbGU9MHgwMCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQge1JTU0kjMX0iXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MDQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MEEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPj0weDA2IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPC1QRUVSIFtsYWJlbCA9ICJSU1NJIFNhbXBsZT49MHgwOSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDwtUEVFUiBbbGFiZWwgPSAiUlNTSSBTYW1wbGU+PTB4MDciLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCB7UlNTSSMyfSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfc3RvcCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX1JTU0lfUkVBRF9NU0MgUlNTSSBnZXQgc2FtcGxlDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfZ2V0KGNvbm5faGFuZGxlLCBwX3Jzc2kpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9yc3NpX3N0YXJ0KGNvbm5faGFuZGxlLCBCTEVfR0FQX1JTU0lfVEhSRVNIT0xEX0lOVkFMSUQsIDB4MDApIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfZ2V0KGNvbm5faGFuZGxlLCBwX3Jzc2kpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX05PVF9GT1VORCJdOw0KKyAqIC4uLjsNCisgKiAuLi47DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gZXZlbnRzIl07DQorICogLi4uOw0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogU0Q8LVBFRVIgW2xhYmVsID0gIlJTU0kgU2FtcGxlPTB4MDMgW2RCbV0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3Jzc2lfZ2V0KGNvbm5faGFuZGxlLCBwX3Jzc2kpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MsICpwX3Jzc2k9MHgwMyBbZEJtXSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcnNzaV9zdG9wKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9TRUNfTVNDIFBlcmlwaGVyYWwgU2VjdXJpdHkgUHJvY2VkdXJlcw0KKyAqIEB7DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfU0VDX1JFUV9NU0MgUGVyaXBoZXJhbCBTZWN1cml0eSBSZXF1ZXN0DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShwYXJhbXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFNlY3VyaXR5IFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBDZW50cmFsIGluaXRpYXRlcyBTZWN1cml0eSBFc3RhYmxpc2htZW50ICJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iRW5jcnlwdGlvbiBvciBQYWlyaW5nL0JvbmRpbmcgaW5pdGlhdGVkIGJ5IENlbnRyYWwiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBDZW50cmFsIGlnbm9yZXMgIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1RJTUVPVVQge2Vycm9yX3NyYzogQkxFX0dBUF9USU1FT1VUX1NSQ19TRUNVUklUWV9SRVFVRVNUfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVHQUNZX01TQyBQZXJpcGhlcmFsIExlZ2FjeSBQYWlyaW5nDQorICogQHsNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0pXX01TQyBQYWlyaW5nOiBKdXN0IFdvcmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2Fwc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogbm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2FwcywgcF9rZXlzZXQ6IE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iTGVnYWN5IFBhaXJpbmcgUGhhc2UgMiIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIFNUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19OT19NSVRNfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19KV19NU0MgQm9uZGluZzogSnVzdCBXb3Jrcw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGJvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IGJvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHMsIHBfa2V5c2V0KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxlZ2FjeSBQYWlyaW5nIFBoYXNlIDIiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBTVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTk9fTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9CT05ESU5HX1BLX1BFUklQSF9NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeSwgUGVyaXBoZXJhbCBkaXNwbGF5cw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGJvbmQsIG1pdG0sIGtleWJvYXJkfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBib25kLCBtaXRtLCBkaXNwbGF5LCBwX2tleXNldCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVkge3Bhc3NrZXksIG1hdGNoX3JlcXVlc3Q9MH0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJQYXNza2V5IGRpc3BsYXllZCB0byB0aGUgdXNlciJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJMZWdhY3kgUGFpcmluZyBQaGFzZSAyIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggU1RLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7RU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19QS19DRU5UUkFMX09PQl9NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeSwgVXNlciBJbnB1dHMgb24gUGVyaXBoZXJhbCBvciBPT0INCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBib25kLCBtaXRtLCBkaXNwbGF5fSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBib25kLCBtaXRtLCBrZXlib2FyZCwgcF9rZXlzZXQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVCB7dHlwZX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJVc2VyIGVudGVycyBQYXNza2V5IG9yIGRhdGEgcmVjZWl2ZWQgT3V0IE9mIEJhbmQiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5KHBhc3NrZXkgb3IgT09CKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxlZ2FjeSBQYWlyaW5nIFBoYXNlIDIiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBTVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9CT05ESU5HX1NUQVRJQ19QS19NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeSB3aXRoIHN0YXRpYyBwYXNza2V5DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX29wdF9zZXQob3B0X2lkID0gQkxFX0dBUF9PUFRfUEFTU0tFWSwgcF9vcHQtPnBfcGFzc2tleT1wYXNza2V5KSJdOw0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGJvbmQsIG1pdG0sIGtleWJvYXJkfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBib25kLCBtaXRtLCBkaXNwbGF5LCBwX2tleXNldCkiXTsNCisgKg0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWSB7cGFzc2tleSwgbWF0Y2hfcmVxdWVzdD0wfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlBhc3NrZXkgZGlzcGxheWVkIHRvIHRoZSB1c2VyIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxlZ2FjeSBQYWlyaW5nIFBoYXNlIDIiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBTVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtFTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0NPTkZJUk1fRkFJTF9NU0MgUGFpcmluZyBmYWlsdXJlOiBDb25maXJtIGZhaWxlZA0KKyAqIFRoaXMgb2NjdXJzIGlmIHRoZSByYW5kb20gdmFsdWUgZG9lc24ndCBtYXRjaCwgdXN1YWxseSBiZWNhdXNlIHRoZSB1c2VyIGVudGVyZWQgYSB3cm9uZyBwaW4NCisgKiBvciBvdXQgb2YgYmFuZCBkYXRhIHdhcyBtaXNzaW5nLg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IG1pdG0sIGRpc3BsYXl9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IG1pdG0sIGtleWJvYXJkLCBwX2tleXNldDogTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBDb25maXJtIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIENvbmZpcm0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmFuZG9tIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogQ29uZmlybSB2YWx1ZSwgZXJyb3Jfc3JjOiBsb2NhbH0iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgZmFpbGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQH0NCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9MRVNDX01TQyBQZXJpcGhlcmFsIExFU0MgUGFpcmluZw0KKyAqIEB7DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVTQ19QQUlSSU5HX0pXX01TQyBQYWlyaW5nOiBKdXN0IFdvcmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbGVzYywgbm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2Fwc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogbGVzYywgbm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2FwcywgcF9wa19vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9wa30iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzdGFydHMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19OT19NSVRNfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX05DX01TQyBCb25kaW5nOiBOdW1lcmljIENvbXBhcmlzb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5KGtiZC95ZXNubyl9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGRpc3BsYXkoa2JkL3llc25vKSwga2V5c2V0IHdpdGggcF9wa19vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9wa30iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzdGFydHMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWSB7cGFzc2tleSwgbWF0Y2hfcmVxdWVzdD0xfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlBhc3NrZXkgZGlzcGxheWVkIHRvIHRoZSB1c2VyLCB1c2VyIGNvbXBhcmVzIHZhbHVlcyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFVzZXIgY29uZmlybXMgb24gYm90aCBzaWRlcyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5KEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9QQVNTS0VZLCBOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtMRVNDX0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBVc2VyIGRvZXMgbm90IGNvbmZpcm0gbG9jYWxseSAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5KEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9OT05FLCBOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogbnVtIGNvbXAgZmFpbHVyZSwgZXJyb3Jfc3JjOiBsb2NhbH0iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgZmFpbGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBVc2VyIGRvZXMgbm90IGNvbmZpcm0gcmVtb3RlbHkgIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IG51bSBjb21wIGZhaWx1cmUsIGVycm9yX3NyYzogcmVtb3RlfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfUEtFX1BEX01TQyBCb25kaW5nOiBQYXNza2V5IEVudHJ5LCBQZXJpcGhlcmFsIERpc3BsYXlzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbGVzYywgYm9uZCwgbWl0bSwga2V5Ym9hcmR9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGRpc3BsYXksIGtleXNldCB3aXRoIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVkge3Bhc3NrZXksIG1hdGNoX3JlcXVlc3Q9MH0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJQYXNza2V5IGRpc3BsYXllZCB0byB0aGUgdXNlciJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEthIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrfSJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2IiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBPcHRpb25hbCBrZXlwcmVzc2VzIGZyb20gcGVlciAiXTsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0tFWV9QUkVTU0VEIHt0eXBlfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBkaXNwbGF5cyBrZXlwcmVzcyJdOw0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJLZXlwcmVzcyBOb3RpZmljYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfS0VZX1BSRVNTRUQge3R5cGV9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGRpc3BsYXlzIGtleXByZXNzIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIl07DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0xFU0NfRU5DX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeSwgVXNlciBJbnB1dHMgb24gUGVyaXBoZXJhbA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGRpc3BsYXl9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGtleWJvYXJkLCBrZXlzZXQgd2l0aCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVCB7cGFzc2tleX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJVc2VyIGVudGVycyBQYXNza2V5Il07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNUIHtwX3BlZXJfcGt9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIE9wdGlvbmFsIGtleXByZXNzZXMgc2VudCB0byBwZWVyICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfa2V5cHJlc3Nfbm90aWZ5KHR5cGUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9rZXlwcmVzc19ub3RpZnkodHlwZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJLZXlwcmVzcyBOb3RpZmljYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5KHBhc3NrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJMRVNDIEF1dGhlbnRpY2F0aW9uIFN0YWdlIDEiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBjb21wbGV0ZXMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2NfZGhrZXlfcmVwbHkocF9kaGtleSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBDRU5UUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfT09CX01TQyBCb25kaW5nOiBPdXQgb2YgQmFuZA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWRkcl9zZXQoYWRkcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19vb2JfZGF0YV9nZXQocF9wa19vd24sIHBfb29iZF9vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgYWJveCBDRU5UUkFMIFtsYWJlbD0iT09CIGNvbW11bmljYXRpb246IG9vYmRfb3duIHNlbnQgYW5kL29yIG9vYmRfcGVlciByZWNlaXZlZCIsIHRleHRiZ2NvbG9yPSJzaWx2ZXIiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogbGVzYywgYm9uZCwgb29ifSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBsZXNjLCBib25kLCBvb2IsIGtleXNldCB3aXRoIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEthIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrLCBvb2JkX3JlcT0xfSJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2IiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfc2V0KHBfb29iZF9vd24sIHBfb29iZF9wZWVyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggQ0VOVFJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtMRVNDX0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IENFTlRSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQH0NCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0tTX09VVF9PRl9SQU5HRV9NU0MgUGFpcmluZyBmYWlsdXJlOiBLZXlzaXplIG91dCBvZiBzdXBwb3J0ZWQgcmFuZ2UNCisgKiBUaGlzIG9jY3VycyBpZiB0aGUgbWluIGtleSBzaXplIG9mZmVyZWQgYnkgdGhlIHBlZXIgaXMgYWJvdmUgMTYsIG9yIG1heCBrZXkgc2l6ZSBiZWxvdyA3Lg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogSW52YWxpZCBwYXJhbXMsIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0tTX1RPT19TTUFMTF9NU0MgR0FQIEZhaWxlZCBQYWlyaW5nOiBLZXlzaXplIHRvbyBzbWFsbA0KKyAqIFRoaXMgb2NjdXJzIGlmIHRoZSBtYXgga2V5IHNpemUgb2ZmZXJlZCBieSB0aGUgcGVlciBpcyBiZWxvdyB0aGUgbWluIGtleSBzaXplIHNwZWNpZmllZCBieQ0KKyAqIHRoZSBhcHAuDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgQ29uZmlybSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IEVuYyBrZXkgc2l6ZSwgZXJyb3Jfc3JjOiBsb2NhbH0iXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgZmFpbGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX1BBSVJJTkdfQVBQX0VSUk9SX01TQyBQYWlyaW5nIGZhaWx1cmU6IFBhaXJpbmcgYWJvcnRlZCBieSB0aGUgYXBwbGljYXRpb24NCisgKiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBkZXRlY3RzIHRoYXQgdGhlIHBhaXJpbmcgc2hvdWxkIG5vdCBiZSBwZXJmb3JtZWQsIGZvciBleGFtcGxlIGFuDQorICogaW5zdWZmaWNpZW50IElPIGNvbWJpbmF0aW9uLCBpdCBjYW4gdXNlIHNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseSgpIHRvIHNlbmQNCisgKiBTTVAgUGFpcmluZyBmYWlsZWQgdG8gdGhlIHBlZXIuDQorICoNCisgKiBXaGVuIHRoZSBzdGFjayBoYW5kbGVzIHRoZSByZXNwb25zZSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBpdCB3aWxsIGFsc28gdmFsaWRhdGUNCisgKiB0aGUgcGFzc2tleSAoU01QX1NUQ19QQVNTS0VZX0VOVFJZX0ZBSUxFRCkuIElmIGFueSBlcnJvciBpcyBkZXRlY3RlZCBpdCB3aWxsIGJlDQorICogcmVwb3J0ZWQgd2hlbiBzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoKSBpcyBjYWxsZWQuDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIl07DQorICogU0QgYWJveCBBUFAgW2xhYmVsPSJTdGFjayBsb29rcyBmb3IgZXJyb3JzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoPGNvZGUgZnJvbSBhcHBsaWNhdGlvbj4pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgZmFpbGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogPGNvZGUgZnJvbSBhcHBsaWNhdGlvbj4sIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX1BBSVJJTkdfUkVNT1RFX1BBSVJJTkdfRkFJTF9NU0MgUGFpcmluZyBmYWlsdXJlOiBQYWlyaW5nIGZhaWxlZCBmcm9tIGNlbnRyYWwNCisgKiBTTVAgUGFpcmluZyBGYWlsZWQgbWF5IGJlIHNlbnQgZnJvbSB0aGUgY2VudHJhbCBhdCB2YXJpb3VzIHRpbWVzLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkDQorICogcHJlcGFyZSBmb3IgdGhpcyBhbmQgZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGV2ZW50Lg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELENFTlRSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEPDpDRU5UUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIEZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IDxyZW1vdGVfcmVhc29uPiwgZXJyb3Jfc3JjOiByZW1vdGV9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIX1BBSVJJTkdfVElNRU9VVF9NU0MgUGFpcmluZyBmYWlsdXJlOiBUaW1lb3V0DQorICogVGhpcyBvY2N1cnMgaWYgdGhlIGNlbnRyYWwgZGV2aWNlIGRvZXNuJ3QgY29udGludWUgdGhlIHBhaXJpbmcgc2VxdWVuY2Ugd2l0aGluIDMwIHNlY29uZHMuDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gIFsgbGFiZWwgPSAiV2FpdCAzMCBzZWMiIF07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHthdXRoX3N0YXR1czogVGltZW91dCwgZXJyb3Jfc3JjOiBsb2NhbH0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9QRVJJUEhfRU5DX01TQyBQZXJpcGhlcmFsIEVuY3J5cHRpb24gRXN0YWJsaXNobWVudCB1c2luZyBzdG9yZWQga2V5cw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQ0VOVFJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIkxMIEVuY3J5cHRpb24gUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfSU5GT19SRVFVRVNUIHthZGRyLCBlZGl2LCByYW5kfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBSZXBsaWVzIHdpdGggS2V5cyAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJMb2FkIFBlcmlwaGVyYWwgS2V5cyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX2luZm9fcmVwbHkoZWRpdiwgcmFuZCwgTFRLKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PkNFTlRSQUwgW2xhYmVsID0gIkxMIEVuY3J5cHRpb24gUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIFJlcGxpZXMgd2l0aG91dCBLZXlzICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19pbmZvX3JlcGx5KE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+Q0VOVFJBTCBbbGFiZWwgPSAiTEwgUmVqZWN0IEluZDogUGluIG9yIEtleSBNaXNzaW5nIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWwgPSAiTGluayBpcyBOT1QgZW5jcnlwdGVkIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgQXBwIFJlcGxpZXMgd2l0aCBJbmNvcnJlY3QgS2V5cyAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJMb2FkIEluY29ycmVjdCBQZXJpcGhlcmFsIEtleXMiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19pbmZvX3JlcGx5KGVkaXYsIHJhbmQsIExUSykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5DRU5UUkFMIFtsYWJlbCA9ICJMTCBFbmNyeXB0aW9uIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVGVybWluYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFAgcmJveCBDRU5UUkFMIFtsYWJlbCA9ICJMaW5rIFRlcm1pbmF0ZWQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfRElTQ09OTkVDVEVEIHtNSUMgRmFpbHVyZX0iXTsNCisgKiBAZW5kbXNjDQorICogQH0NCisgKg0KKyAqDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9TQ0FOX01TQyBTY2FubmluZw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsQURWRVJUSVNFUlM7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdGFydChwYXJhbXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q8LUFEVkVSVElTRVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge2JkYWRkciwgcnNzaSwgZGF0YX0iXTsNCisgKiBTRDwtQURWRVJUSVNFUlMgW2xhYmVsID0gIkFEViBwYWNrZXQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7YmRhZGRyLCByc3NpLCBkYXRhfSJdOw0KKyAqIFNEPC1BRFZFUlRJU0VSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtiZGFkZHIsIHJzc2ksIGRhdGF9Il07DQorICogLi4uOw0KKyAqIFNEPC1BRFZFUlRJU0VSUyBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtiZGFkZHIsIHJzc2ksIGRhdGF9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIFN0b3BzIFNjYW5uaW5nICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdG9wKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFNjYW5uaW5nIFRpbWVvdXQgIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9USU1FT1VUIHtCTEVfR0FQX1RJTUVPVVRfU1JDX1NDQU59Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9DT05OX01TQyBDZW50cmFsIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBhbmQgVGVybWluYXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIFBFUklQSEVSQUwgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iUGVyaXBoZXJhbCBTdGFydCBDb25uZWN0YWJsZSBBZHZlcnRpc2luZyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5lY3QocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNjYW5uaW5nIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCAiXTsNCisgKiBTRDw6PlBFUklQSEVSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gRXN0YWJsaXNobWVudCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05ORUNURUQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgQ2FuY2VsbGVkICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubmVjdF9jYW5jZWwoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgQ29ubmVjdGlvbiBUaW1lb3V0ICJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfVElNRU9VVCB7QkxFX0dBUF9USU1FT1VUX1NSQ19DT05OfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfQ1BVX01TQyBDZW50cmFsIENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQgd2l0aCBjb25uLiBwYXJhbXMuIENQIzEiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVW5zb2xpY2l0ZWQgcHJvY2VkdXJlIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoQ1AjMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtDUCMyfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBQZXJpcGhlcmFsIFNvbGljaXRlZCBwcm9jZWR1cmUiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXF1ZXN0IHtDUCMzfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVCB7Q1AjM30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgQWNjZXB0cyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKENQIzMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlc3BvbnNlOiBBY2NlcHRlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBTdGFydCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBDb21wbGV0ZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge0NQIzN9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIFJlamVjdHMgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVzcG9uc2U6IFJlamVjdGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfU0VDX01TQyBDZW50cmFsIFNlY3VyaXR5IFByb2NlZHVyZXMNCisgKiBAew0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9TRUNfUkVRX01TQyBTZWN1cml0eSBSZXF1ZXN0IFJlY2VwdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBTZWN1cml0eSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19SRVFVRVNUIHtib25kLCBtaXRtfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIENlbnRyYWwgaW5pdGlhdGVzIFNlY3VyaXR5IEVzdGFibGlzaG1lbnQgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZW5jcnlwdChlZGl2LCByYW5kLCBMVEspIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQ2VudHJhbCBUcmlnZ2VycyBwYWlyaW5nIG9yIGJvbmRpbmcgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKHBhcmFtcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJQYWlyaW5nIHByb2NlZHVyZSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIENlbnRyYWwgcmVqZWN0cyB0aGUgU2VjdXJpdHkgUmVxdWVzdCAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgRmFpbGVkOiBQYWlyaW5nIE5vdCBTdXBwb3J0ZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge2F1dGhfc3RhdHVzOiBQYWlyaW5nIE5vdCBTdXBwLCBlcnJvcl9zcmM6IGxvY2FsfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFR0FDWV9NU0MgQ2VudHJhbCBMZWdhY3kgUGFpcmluZw0KKyAqIEB7DQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX1BBSVJJTkdfSldfTVNDIFBhaXJpbmc6IEp1c3QgV29ya3MNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShub19ib25kLCBub19taXRtLCBub19pb19jYXBzKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IG5vX2JvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHN9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQ2VudHJhbCBBY2NlcHRzIFBlcmlwaGVyYWwgcGFyYW1ldGVycyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIHBfa2V5c2V0OiBOVUxMKSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJMZWdhY3kgUGFpcmluZyBQaGFzZSAyIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggU1RLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7RU5DX05PX01JVE19Il07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIENlbnRyYWwgUmVqZWN0cyBQZXJpcGhlcmFsIHBhcmFtZXRlcnMgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShCTEVfR0FQX1NFQ19TVEFUVVNfSU5WQUxJRF9QQVJBTVMsIG93bl9wYXJhbXM6IE5VTEwsIHBfa2V5c2V0OiBOVUxMKSJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgRmFpbGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7RkFJTFVSRX0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfSldfTVNDIEJvbmRpbmc6IEp1c3QgV29ya3MNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShib25kLCBub19taXRtLCBub19pb19jYXBzKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGJvbmQsIG5vX21pdG0sIG5vX2lvX2NhcHN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIHBfa2V5c2V0KSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJMZWdhY3kgUGFpcmluZyBQaGFzZSAyIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggU1RLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7RU5DX05PX01JVE19Il07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IlNNUCBQYWlyaW5nIFBoYXNlIDMiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge1NVQ0NFU1N9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbCA9ICJLZXlzIHN0b3JlZCBpbiBrZXlzZXQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfUEtfUEVSSVBIX01TQyBCb25kaW5nOiBQYXNza2V5IEVudHJ5LCBDZW50cmFsIGRpc3BsYXlzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoYm9uZCwgbWl0bSwgZGlzcGxheSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogYm9uZCwgbWl0bSwga2V5Ym9hcmR9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIHBfa2V5c2V0KSJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZIHtwYXNza2V5LCBtYXRjaF9yZXF1ZXN0PTB9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iUGFzc2tleSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIiXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTGVnYWN5IFBhaXJpbmcgUGhhc2UgMiIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIFNUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9PT0JfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnksIFVzZXIgSW5wdXRzIG9uIENlbnRyYWwgb3IgT09CDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUoYm9uZCwgbWl0bSwga2V5Ym9hcmQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNUIHtwZWVyX3BhcmFtczogYm9uZCwgbWl0bSwgZGlzcGxheX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogTlVMTCwgcF9rZXlzZXQpIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX0tFWV9SRVFVRVNUIHt0eXBlfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlVzZXIgZW50ZXJzIFBhc3NrZXkgb3IgZGF0YSByZWNlaXZlZCBPdXQgT2YgQmFuZCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aF9rZXlfcmVwbHkocGFzc2tleSBvciBPT0IpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTGVnYWN5IFBhaXJpbmcgUGhhc2UgMiIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIFNUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQH0NCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfTEVTQ19NU0MgQ2VudHJhbCBMRVNDIFBhaXJpbmcNCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfTEVTQ19QQUlSSU5HX0pXX01TQyBQYWlyaW5nOiBKdXN0IFdvcmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUobGVzYywgbm9fYm9uZCwgbm9fbWl0bSwgbm9faW9fY2FwcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBub19ib25kLCBub19taXRtLCBub19pb19jYXBzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEthIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2IiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNUIHtwX3BlZXJfcGt9Il07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBzdGFydHMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iTEVTQyBBdXRoZW50aWNhdGlvbiBTdGFnZSAxIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGNvbXBsZXRlcyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfbGVzY19kaGtleV9yZXBseShwX2Roa2V5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEViIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge0VOQ19OT19NSVRNfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19OQ19NU0MgQm9uZGluZzogTnVtZXJpYyBDb21wYXJpc29uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVSSVBIRVJBTDsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoZW50aWNhdGUobGVzYywgYm9uZCwgbWl0bSwgZGlzcGxheShrYmQveWVzbm8pKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGRpc3BsYXkoa2JkL3llc25vKX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkoU1VDQ0VTUywgb3duX3BhcmFtczogTlVMTCwga2V5c2V0IHdpdGggcF9wa19vd24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrfSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVkge3Bhc3NrZXksIG1hdGNoX3JlcXVlc3Q9MX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJQYXNza2V5IGRpc3BsYXllZCB0byB0aGUgdXNlciwgdXNlciBjb21wYXJlcyB2YWx1ZXMiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBVc2VyIGNvbmZpcm1zIG9uIGJvdGggc2lkZXMgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShCTEVfR0FQX0FVVEhfS0VZX1RZUEVfUEFTU0tFWSwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgVXNlciBkb2VzIG5vdCBjb25maXJtIGxvY2FsbHkgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseShCTEVfR0FQX0FVVEhfS0VZX1RZUEVfTk9ORSwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7YXV0aF9zdGF0dXM6IG51bSBjb21wIGZhaWx1cmUsIGVycm9yX3NyYzogbG9jYWx9Il07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIGZhaWxlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgVXNlciBkb2VzIG5vdCBjb25maXJtIHJlbW90ZWx5ICJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBmYWlsZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMge2F1dGhfc3RhdHVzOiBudW0gY29tcCBmYWlsdXJlLCBlcnJvcl9zcmM6IHJlbW90ZX0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19QS0VfUERfTVNDIEJvbmRpbmc6IFBhc3NrZXkgRW50cnk6IENlbnRyYWwgRGlzcGxheXMNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZShsZXNjLCBib25kLCBtaXRtLCBkaXNwbGF5KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGtleWJvYXJkfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseShTVUNDRVNTLCBvd25fcGFyYW1zOiBOVUxMLCBrZXlzZXQgd2l0aCBwX3BrX293bikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZIHtwYXNza2V5LCBtYXRjaF9yZXF1ZXN0PTB9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iUGFzc2tleSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrfSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIE9wdGlvbmFsIGtleXByZXNzZXMgZnJvbSBwZWVyICJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJLZXlwcmVzcyBOb3RpZmljYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfS0VZX1BSRVNTRUQge3R5cGV9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIGRpc3BsYXlzIGtleXByZXNzIl07DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIktleXByZXNzIE5vdGlmaWNhdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9LRVlfUFJFU1NFRCB7dHlwZX0iXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgZGlzcGxheXMga2V5cHJlc3MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIiXTsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJMRVNDIEF1dGhlbnRpY2F0aW9uIFN0YWdlIDEiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0MgQm9uZGluZzogUGFzc2tleSBFbnRyeTogVXNlciBJbnB1dHMgb24gQ2VudHJhbA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKGxlc2MsIGJvbmQsIG1pdG0sIGtleWJvYXJkKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCB7cGVlcl9wYXJhbXM6IGxlc2MsIGJvbmQsIG1pdG0sIGRpc3BsYXl9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIGtleXNldCB3aXRoIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX0tFWV9SRVFVRVNUIHtwYXNza2V5fSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlVzZXIgZW50ZXJzIFBhc3NrZXkiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgUHVibGljIEtleTogUEtiIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCB7cF9wZWVyX3BrfSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgc3RhcnRzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIE9wdGlvbmFsIGtleXByZXNzZXMgc2VudCB0byBwZWVyICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfa2V5cHJlc3Nfbm90aWZ5KHR5cGUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiS2V5cHJlc3MgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9rZXlwcmVzc19ub3RpZnkodHlwZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJLZXlwcmVzcyBOb3RpZmljYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5KHBhc3NrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJMRVNDIEF1dGhlbnRpY2F0aW9uIFN0YWdlIDEiLCB0ZXh0Ymdjb2xvcj0iIzdmN2ZmZiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJBcHAgY29tcGxldGVzIERIS2V5IGNhbGN1bGF0aW9uIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHBfZGhrZXkpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTCBbbGFiZWwgPSAiU01QIFBhaXJpbmcgREhLZXkgQ2hlY2s6IEVhIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiRW5jcnlwdGVkIHdpdGggTFRLIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7TEVTQ19FTkNfTUlUTX0iXTsNCisgKiB8fHw7DQorICogU0QgYWJveCBQRVJJUEhFUkFMIFtsYWJlbD0iU01QIFBhaXJpbmcgUGhhc2UgMyIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7U1VDQ0VTU30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsID0gIktleXMgc3RvcmVkIGluIGtleXNldCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX09PQl9NU0MgQm9uZGluZzogT3V0IG9mIEJhbmQNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2FkZHJfc2V0KGFkZHIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfZ2V0KHBfcGtfb3duLCBwX29vYmRfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9Ik9PQiBjb21tdW5pY2F0aW9uOiBvb2JkX293biBzZW50IGFuZC9vciBvb2JkX3BlZXIgcmVjZWl2ZWQiLCB0ZXh0Ymdjb2xvcj0ic2lsdmVyIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYXV0aGVudGljYXRlKGxlc2MsIGJvbmQsIG9vYikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1Qge3BlZXJfcGFyYW1zOiBsZXNjLCBib25kLCBvb2J9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KFNVQ0NFU1MsIG93bl9wYXJhbXM6IE5VTEwsIGtleXNldCB3aXRoIHBfcGtfb3duKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBQdWJsaWMgS2V5OiBQS2EiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIFB1YmxpYyBLZXk6IFBLYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1Qge3BfcGVlcl9waywgb29iZF9yZXE9MX0iXTsNCisgKiB8fHw7DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iQXBwIHN0YXJ0cyBESEtleSBjYWxjdWxhdGlvbiJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfc2V0KHBfb29iZF9vd24sIHBfb29iZF9wZWVyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGFib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkxFU0MgQXV0aGVudGljYXRpb24gU3RhZ2UgMSIsIHRleHRiZ2NvbG9yPSIjN2Y3ZmZmIl07DQorICogfHx8Ow0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9IkFwcCBjb21wbGV0ZXMgREhLZXkgY2FsY3VsYXRpb24iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2xlc2NfZGhrZXlfcmVwbHkocF9kaGtleSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTTVAgUGFpcmluZyBESEtleSBDaGVjazogRWEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIlNNUCBQYWlyaW5nIERIS2V5IENoZWNrOiBFYiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJFbmNyeXB0ZWQgd2l0aCBMVEsiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFIHtMRVNDX0VOQ19NSVRNfSJdOw0KKyAqIHx8fDsNCisgKiBTRCBhYm94IFBFUklQSEVSQUwgW2xhYmVsPSJTTVAgUGFpcmluZyBQaGFzZSAzIiwgdGV4dGJnY29sb3I9IiM3ZjdmZmYiXTsNCisgKiB8fHw7DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FVVEhfU1RBVFVTIHtTVUNDRVNTfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWwgPSAiS2V5cyBzdG9yZWQgaW4ga2V5c2V0Il07DQorICogQGVuZG1zYw0KKyAqIEB9DQorICoNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0lOVkFMSURfU01QX1BEVV9NU0MgVW5leHBlY3RlZCBTZWN1cml0eSBQYWNrZXQgUmVjZXB0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iTm8gcGFpcmluZyBpbiBwcm9ncmVzcyJdOw0KKyAqIHx8fDsNCisgKiBQRUVSIHJib3ggUEVFUiBbbGFiZWw9IlBlZXIgbWlzYmVoYXZpbmciXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIlNNUCBQYWlyaW5nIEZhaWxlZCAob3Igb3RoZXIgdW5leHBlY3RlZCBTTVAgUERVKSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyB7UERVX0lOVkFMSUR9Il07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX0NFTlRSQUxfRU5DX01TQyBFbmNyeXB0aW9uIEVzdGFibGlzaG1lbnQgdXNpbmcgc3RvcmVkIGtleXMNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZW5jcnlwdChlZGl2LCByYW5kLCBMVEspIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIkxMIEVuY3J5cHRpb24gUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFBlcmlwaGVyYWwgcmVwbGllcyB3aXRoIGtleXMgIl07DQorICogfHx8Ow0KKyAqIFBFUklQSEVSQUwgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJQZXJpcGhlcmFsIExvYWRzIEtleXMiXTsNCisgKiBTRDw6UEVSSVBIRVJBTCBbbGFiZWwgPSAiTEwgRW5jcnlwdGlvbiBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIkVuY3J5cHRlZCB3aXRoIExUSyJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBQZXJpcGhlcmFsIGtleXMgbWlzc2luZyAiXTsNCisgKiB8fHw7DQorICogUEVSSVBIRVJBTCByYm94IFBFUklQSEVSQUwgW2xhYmVsID0gIlBlcmlwaGVyYWwgS2V5cyBNaXNzaW5nIl07DQorICogU0Q8OlBFUklQSEVSQUwgW2xhYmVsID0gIkxMIFJlamVjdCBJbmQ6IFBpbiBvciBLZXkgTWlzc2luZyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUiXTsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJMaW5rIGlzIE5PVCBlbmNyeXB0ZWQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBJbmNvcnJlY3QgcGVyaXBoZXJhbCBrZXlzICJdOw0KKyAqIHx8fDsNCisgKiBQRVJJUEhFUkFMIHJib3ggUEVSSVBIRVJBTCBbbGFiZWwgPSAiUGVyaXBoZXJhbCBMb2FkcyBJbmNvcnJlY3QgS2V5cyJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMIFtsYWJlbCA9ICJMTCBFbmNyeXB0aW9uIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFUklQSEVSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gVGVybWluYXRpb24iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFAgcmJveCBQRVJJUEhFUkFMIFtsYWJlbCA9ICJMaW5rIFRlcm1pbmF0ZWQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfRElTQ09OTkVDVEVEIHtNSUMgRmFpbHVyZX0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9FTkNfQVVUSF9NVVRFWF9NU0MgQ2VudHJhbCBFbmNyeXB0aW9uIGFuZCBBdXRoZW50aWNhdGlvbiBtdXR1YWwgZXhjbHVzaW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2VuY3J5cHQoZWRpdiwgcmFuZCwgTFRLKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJFbmNyeXB0aW9uIFN0YXJ0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFNEIFtsYWJlbCA9ICIgRW5jcnlwdGlvbiBpbiBwcm9ncmVzcywgYXV0aGVudGljYXRpb24gZGlzYWxsb3dlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkVuY3J5cHRpb24gQ29tcGxldGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9lbmNyeXB0KGVkaXYsIHJhbmQsIExUSykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iRW5jcnlwdGlvbiBxdWV1ZWQiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgU0QgW2xhYmVsID0gIiBFbmNyeXB0aW9uIHF1ZXVlZCwgYXV0aGVudGljYXRpb24gZGlzYWxsb3dlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJFbmNyeXB0aW9uIFN0YXJ0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkVuY3J5cHRpb24gQ29tcGxldGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgU0QgW2xhYmVsID0gIiBBdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcywgZW5jcnlwdGlvbiBkaXNhbGxvd2VkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZW5jcnlwdChlZGl2LCByYW5kLCBMVEspIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUiXTsNCisgKiBAZW5kbXNjDQorICogQH0NCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX01VTFRJTElOS19DUFVfTVNDIENlbnRyYWwgQ29ubmVjdGlvbiBQYXJhbWV0ZXIgVXBkYXRlIG9uIG11bHRpcGxlIGxpbmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMUzsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTFMgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggNCBwZWVycywgYWxsIHdpdGggY29ubi4gcGFyYW1zLiBDUCMwIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgUGVyaXBoZXJhbCBzb2xpY2l0ZWQgcHJvY2VkdXJlIG9uIGxpbmsgIzIiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVxdWVzdCB7Q1AjMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVCB7Y29ubl9oYW5kbGVfMiwgQ1AjM30iXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBVbnNvbGljaXRlZCBwcm9jZWR1cmUgb24gbGlua3MgIzMgYW5kICMxIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoY29ubl9oYW5kbGVfMywgQ1AjMykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IG9uIGxpbmsgIzMiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZShjb25uX2hhbmRsZV8xLCBDUCMxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgUmVzcG9uZCB0byBzb2xpY2l0ZWQgcHJvY2VkdXJlIG9uIGxpbmsgIzIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5fcGFyYW1fdXBkYXRlKGNvbm5faGFuZGxlXzIsIENQIzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkwyQ0FQIENQVSBSZXNwb25zZTogQWNjZXB0ZWQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBBZGRpdGlvbmFsIHByb2NlZHVyZSBvbiBsaW5rICMyIGZhaWxzLCBzaW5jZSBhbm90aGVyIG9uZSBpcyBwZW5kaW5nIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoY29ubl9oYW5kbGVfMiwgQ1AjNSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfRVJST1JfQlVTWSJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIE5vdGU6IHRoZSBvcmRlciBvZiBleGVjdXRpb24gaXMgbm90IGd1YXJhbnRlZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBDb21wbGV0ZSBvbiBsaW5rICMzIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtjb25uX2hhbmRsZV8zLCBDUCMzfSJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIFN0YXJ0IG9uIGxpbmsgIzEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIG9uIGxpbmsgIzEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge2Nvbm5faGFuZGxlXzEsIENQIzF9Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQgb24gbGluayAjMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIFBlcmlwaGVyYWwgc29saWNpdGVkIHByb2NlZHVyZSBvbiBsaW5rICM0Il07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlcXVlc3Qge0NQIzR9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFX1JFUVVFU1Qge2Nvbm5faGFuZGxlXzQsIENQIzR9Il07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoY29ubl9oYW5kbGVfNCwgQ1AjNCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiTDJDQVAgQ1BVIFJlc3BvbnNlOiBBY2NlcHRlZCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkNvbm5lY3Rpb24gVXBkYXRlIENvbXBsZXRlIG9uIGxpbmsgIzIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUge2Nvbm5faGFuZGxlXzIsIENQIzJ9Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQgb24gbGluayAjNCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUgb24gbGluayAjNCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Y29ubl9oYW5kbGVfNCwgQ1AjNH0iXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfTVVMVElMSU5LX0NUUkxfUFJPQ19NU0MgQ2VudHJhbCBDb250cm9sIFByb2NlZHVyZSBTZXJpYWxpemF0aW9uIG9uIG11bHRpcGxlIGxpbmtzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMUzsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVSSVBIRVJBTFMgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggNCBwZWVycywgYWxsIHdpdGggY29ubi4gcGFyYW1zLiBDUCMwIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgUGVyaXBoZXJhbCBzb2xpY2l0ZWQgcHJvY2VkdXJlIG9uIGxpbmsgIzIiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVxdWVzdCB7Q1AjMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVCB7Y29ubl9oYW5kbGVfMiwgQ1AjM30iXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBFbmNyeXB0aW9uIHByb2NlZHVyZSBvbiBsaW5rICMzIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZW5jcnlwdChjb25uX2hhbmRsZV8zLCBMVEsjMykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVSSVBIRVJBTFMgW2xhYmVsID0gIkVuY3J5cHRpb24gU3RhcnQgb24gbGluayAjMyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIENvbm5lY3Rpb24gVXBkYXRlIHByb2NlZHVyZSBvbiBsaW5rICMxIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUoY29ubl9oYW5kbGVfMSwgQ1AjMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBQRVJJUEhFUkFMUyBbbGFiZWwgPSAiIFJlc3BvbmQgdG8gc29saWNpdGVkIHByb2NlZHVyZSBvbiBsaW5rICMyIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZShjb25uX2hhbmRsZV8yLCBDUCMyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJMMkNBUCBDUFUgUmVzcG9uc2U6IEFjY2VwdGVkIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIFBFUklQSEVSQUxTIFtsYWJlbCA9ICIgRW5jcnlwdGlvbiBwcm9jZWR1cmUgb24gbGluayAjNCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2VuY3J5cHQoY29ubl9oYW5kbGVfNCwgTFRLIzQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIG5vdGUgUEVSSVBIRVJBTFMgW2xhYmVsID0gIiBOb3RlOiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIGlzIG5vdCBndWFyYW50ZWVkLCBidXQgZW5jcnlwdGlvbiBhbHdheXMgaGFzIHByaW9yaXR5Il07DQorICogfHx8Ow0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiRW5jcnlwdGlvbiBDb21wbGV0ZSBvbiBsaW5rICMzIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSB7Y29ubl9oYW5kbGVfM30iXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJFbmNyeXB0aW9uIFN0YXJ0IG9uIGxpbmsgIzQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVSSVBIRVJBTFMgW2xhYmVsID0gIkVuY3J5cHRpb24gQ29tcGxldGUgb24gbGluayAjNCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEUge2Nvbm5faGFuZGxlXzR9Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgU3RhcnQgb24gbGluayAjMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRVJJUEhFUkFMUyBbbGFiZWwgPSAiQ29ubmVjdGlvbiBVcGRhdGUgQ29tcGxldGUgb24gbGluayAjMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSB7Y29ubl9oYW5kbGVfMSwgQ1AjMX0iXTsNCisgKiB8fHw7DQorICogU0Q6PlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBTdGFydCBvbiBsaW5rICMyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFUklQSEVSQUxTIFtsYWJlbCA9ICJDb25uZWN0aW9uIFVwZGF0ZSBDb21wbGV0ZSBvbiBsaW5rICMyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5fUEFSQU1fVVBEQVRFIHtjb25uX2hhbmRsZV8yLCBDUCMyfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9XTF9TSEFSRV9NU0MgV2hpdGVsaXN0IFNoYXJpbmcNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNEOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9kYXRhX3NldChhZHYsIHNyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF93aGl0ZWxpc3Rfc2V0KFdMIzEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChmcCA9IENPTk5SRVEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IkFkdmVydGlzaW5nIHdpdGggV2hpdGVsaXN0ICMxIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWwgPSAiVW5hYmxlIHRvIGNoYW5nZSB3aGl0ZWxpc3Qgd2hpbGUgYWR2IGluIHByb2dyZXNzIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF93aGl0ZWxpc3Rfc2V0KFdMIzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiQkxFX0VSUk9SX0dBUF9XSElURUxJU1RfSU5fVVNFIl07DQorICogfHx8Ow0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWwgPSAiU2NhbiB3aXRoIHRoZSBjdXJyZW50IGFjdGl2ZSB3aGl0ZWxpc3QiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQodXNlX3doaXRlbGlzdCA9IDEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IkFkdmVydGlzaW5nIGFuZCBzY2FubmluZyB3aXRoIFdoaXRlbGlzdCAjMSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdG9wKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iU2Nhbm5pbmcgd2l0aCBXaGl0ZWxpc3QgIzEiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0b3AoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfd2hpdGVsaXN0X3NldChXTCMyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KHVzZV93aGl0ZWxpc3QgPSAxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJTY2FubmluZyB3aXRoIFdoaXRlbGlzdCAjMiJdOw0KKyAqIHx8fDsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsID0gIkNvbm5lY3Qgd2l0aCB0aGUgY3VycmVudCBhY3RpdmUgd2hpdGVsaXN0Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9jb25uZWN0KHVzZV93aGl0ZWxpc3QgPSAxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIG5vdGUgU0QgW2xhYmVsID0gIlNjYW5uaW5nIGlzIGF1dG9tYXRpY2FsbHkgc3RvcHBlZCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJDb25uZWN0aW5nIHdpdGggV2hpdGVsaXN0ICMyIl07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BSSVZBQ1lfTVNDIFByaXZhY3kNCisgKiBAew0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUFJJVkFDWV9BRFZfTVNDIFByaXZhdGUgQWR2ZXJ0aXNpbmcNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFNDQU5ORVJTOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2FkZHJfc2V0KGFkZHIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfZGF0YV9zZXQoYWR2LCBzcikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFkdmVydGlzZSB3aXRoIGFkZHJlc3MgcmVzb2x2YWJsZSBieSBkZXZpY2UgSVJLICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0KHBhcmFtczoge21vZGU6IERFVklDRV9QUklWQUNZLCBwcml2YXRlX2FkZHJfdHlwZTogUkVTT0xWQUJMRSB9ICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0YXJ0KHBhcmFtczoge3BfcGVlcl9hZGRyID0gTlVMTH0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+U0NBTk5FUlMgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLi4uOw0KKyAqIFNEIGJveCBTRCBbbGFiZWw9IlByaXZhdGUgYWRkcmVzcyB0aW1lb3V0Il07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBZHZlcnRpc2Ugd2l0aCBhZGRyZXNzIHJlc29sdmFibGUgYnkgbG9jYWwgSVJLIGluIGRldmljZSBpZGVudGl0eSBsaXN0ICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0KHBhcmFtczoge21vZGU6IERFVklDRV9QUklWQUNZLCBwcml2YXRlX2FkZHJfdHlwZTogUkVTT0xWQUJMRSB9ICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcmsxfX0sIHBwX2xvY2FsX2lya3M6IHtsb2NhbF9pcmsxfSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZHZfc3RhcnQocGFyYW1zOiB7cF9wZWVyX2FkZHIgPSBwZWVyX2FkZHIxfSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBTRC0+U0NBTk5FUlMgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5TQ0FOTkVSUyBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAuLi47DQorICogU0QgYm94IFNEIFtsYWJlbD0iUHJpdmF0ZSBhZGRyZXNzIHRpbWVvdXQiXTsNCisgKiBTRC0+U0NBTk5FUlMgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEFkdmVydGlzZSB3aXRoIG5vbi1yZXNvbHZhYmxlIGFkZHJlc3MgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcHJpdmFjeV9zZXQocGFyYW1zOiB7bW9kZTogREVWSUNFX1BSSVZBQ1ksIHByaXZhdGVfYWRkcl90eXBlOiBOT05fUkVTT0xWQUJMRSB9ICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0YXJ0KHBhcmFtczoge3BfcGVlcl9hZGRyID0gTlVMTH0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gTm9uLVJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gTm9uLVJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gTm9uLVJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogLi4uOw0KKyAqIFNEIGJveCBTRCBbbGFiZWw9IlByaXZhdGUgYWRkcmVzcyB0aW1lb3V0Il07DQorICogU0QtPlNDQU5ORVJTIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gTm9uLVJlc29sdmFibGUyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUFJJVkFDWV9TQ0FOX01TQyBQcml2YXRlIFNjYW5uaW5nDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxBRFZFUlRJU0VSUzsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9hZGRyX3NldChhZGRyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQWN0aXZlIFNjYW4gd2l0aCBhZGRyZXNzIHJlc29sdmFibGUgYnkgZGV2aWNlIElSSyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5BRFZFUlRJU0VSUyBbbGFiZWwgPSAiU0NBTiBSRVEgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiU0NBTiBSU1AgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQWN0aXZlIFNjYW4gd2l0aCBhZGRyZXNzIHJlc29sdmFibGUgYnkgbG9jYWwgSVJLcyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX0sIHtwZWVyX2FkZHIyLCBwZWVyX2lyazJ9fSwgcHBfbG9jYWxfaXJrczoge2xvY2FsX2lyazEsIGxvY2FsX2lyazJ9KSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IHBlZXJfYWRkcjEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCBib3ggQURWRVJUSVNFUlMgW2xhYmVsID0gInBlZXJfYWRkcjEgaXMgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LCByZXNwb25kIHdpdGggYW4gYWRkcmVzcyBnZW5lcmF0ZWQgZnJvbSBsb2NhbF9pcmsxIl07DQorICogU0QtPkFEVkVSVElTRVJTIFtsYWJlbCA9ICJTQ0FOIFJFUSBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJTQ0FOIFJTUCBwYWNrZXQsIEFkZHIgPSBwZWVyX2FkZHIxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIGJveCBBRFZFUlRJU0VSUyBbbGFiZWwgPSAiUmVzb2x2YWJsZTIgcmVzb2x2ZWQgdG8gZGV2aWNlIGlkZW50aXR5IHBlZXJfYWRkcjIgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LCByZXNwb25kIHdpdGggYW4gYWRkcmVzcyBnZW5lcmF0ZWQgZnJvbSBsb2NhbF9pcmsyIl07DQorICogU0QtPkFEVkVSVElTRVJTIFtsYWJlbCA9ICJTQ0FOIFJFUSBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJTQ0FOIFJTUCBwYWNrZXQsIEFkZHIgPSBwZWVyX2FkZHIxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBwZWVyX2FkZHIzIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgYm94IEFEVkVSVElTRVJTIFtsYWJlbCA9ICJwZWVyX2FkZHIzIGlzIG5vdCBpbiB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QsIHJlc3BvbmQgd2l0aCBhbiBhZGRyZXNzIGdlbmVyYXRlZCBmcm9tIGRldmljZV9pcmsiXTsNCisgKiBTRC0+QURWRVJUSVNFUlMgW2xhYmVsID0gIlNDQU4gUkVRIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIlNDQU4gUlNQIHBhY2tldCwgQWRkciA9IHBlZXJfYWRkcjEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMyBBY3RpdmUgU2NhbiB3aXRoIG5vbi1yZXNvbHZhYmxlIGFkZHJlc3MgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcHJpdmFjeV9zZXQocGFyYW1zOiB7bW9kZTogREVWSUNFX1BSSVZBQ1ksIHByaXZhdGVfYWRkcl90eXBlOiBOT05fUkVTT0xWQUJMRSB9ICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdGFydChwYXJhbXMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPkFEVkVSVElTRVJTIFtsYWJlbCA9ICJTQ0FOIFJFUSBwYWNrZXQsIEFkZHIgPSBOb24tUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiU0NBTiBSU1AgcGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BSSVZBQ1lfU0NBTl9QUklWQVRFX1NDQU5fTVNDIFNjYW4gUHJpdmF0ZSBEZXZpY2VzDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxBRFZFUlRJU0VSUzsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQocHBfaWRfa2V5czoge3twZWVyX2FkZHIxLCBwZWVyX2lyazF9fSwgcHBfbG9jYWxfaXJrczogTlVMTCkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBTY2FuIGFuZCByZXNvbHZlIHByaXZhdGUgZGV2aWNlcyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9zY2FuX3N0YXJ0KHBhcmFtcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIG5vdGUgQURWRVJUSVNFUlMgW2xhYmVsPSJSZXNvbHZhYmxlMSByZXNvbHZlZCB0byBkZXZpY2UgaWRlbnRpdHkgcGVlcl9hZGRyMSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9BRFZfUkVQT1JUIHtwZWVyX2FkZHIxLCByc3NpLCBkYXRhfSJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBwZWVyX2FkZHIyIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge3BlZXJfYWRkcjIsIHJzc2ksIGRhdGF9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgU2NhbiBhbmQgcmVzb2x2ZSBwcml2YXRlIGRldmljZXMgd2l0aCB3aGl0ZWxpc3QgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfd2hpdGVsaXN0X3NldCh7cGVlcl9hZGRyMSwgUmVzb2x2YWJsZTJ9KSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQocGFyYW1zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWRkciA9IFJlc29sdmFibGUxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Qgbm90ZSBBRFZFUlRJU0VSUyBbbGFiZWw9IlJlc29sdmFibGUxIHJlc29sdmVkIHRvIGRldmljZSBpZGVudGl0eSBwZWVyX2FkZHIxIHdoaWNoIGlzIGluIHRoZSB3aGl0ZWxpc3QiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7cGVlcl9hZGRyMSwgcnNzaSwgZGF0YX0iXTsNCisgKiB8fHw7DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZGRyID0gUmVzb2x2YWJsZTIiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCBub3RlIEFEVkVSVElTRVJTIFtsYWJlbD0iUmVzb2x2YWJsZTIgZGlkIG5vdCByZXNvbHZlIHRvIGEgZGV2aWNlIGlkZW50aXR5IGJ1dCBpcyBpbiB0aGUgd2hpdGVsaXN0Il07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge1Jlc29sdmFibGUyLCByc3NpLCBkYXRhfSJdOw0KKyAqIHx8fDsNCisgKiBBRFZFUlRJU0VSUy0+U0QgW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkZHIgPSBSZXNvbHZhYmxlMyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIG5vdGUgQURWRVJUSVNFUlMgW2xhYmVsPSJSZXNvbHZhYmxlMyBpcyBub3QgaW4gdGhlIHdoaXRlbGlzdCwgbm8gcmVwb3J0IGdlbmVyYXRlZCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIFNjYW4gZGlyZWN0ZWQgYWR2ZXJ0aXNlcnMgYW5kIHJlc29sdmUgaW5pdGlhdG9yIGFkZHJlc3MgdXNpbmcgZGV2aWNlIElSSyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3NjYW5fc3RhcnQoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQURWRVJUSVNFUlMgYm94IFNEIFtsYWJlbCA9ICJBZHZlcnRpc2VyIEFkZHJlc3MgcmVzb2x2ZWQgdXNpbmcgcGVlcl9pcmsxLCBJbml0aWF0b3IgYWRkcmVzcyByZXNvbHZlZCB1c2luZyBkZXZpY2VfaXJrIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0FEVl9SRVBPUlQge3BlZXJfYWRkcjogcGVlcl9hZGRyMSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICM0IFNjYW4gZGlyZWN0ZWQgYWR2ZXJ0aXNlcnMgYW5kIHJlc29sdmUgaW5pdGlhdG9yIGFkZHJlc3MgdXNpbmcgbG9jYWwgSVJLIGluIGRldmljZSBpZGVudGl0eSBsaXN0Il07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcmsxfX0sIHBwX2xvY2FsX2lya3M6IGxvY2FsX2lyazEpICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdGFydCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQURWRVJUSVNFUlMtPlNEIFtsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBRFZFUlRJU0VSUyBib3ggU0QgW2xhYmVsID0gIkFkdmVydGlzZXIgQWRkcmVzcyByZXNvbHZlZCB1c2luZyBwZWVyX2lyazEsIEluaXRpYXRvciBhZGRyZXNzIHJlc29sdmVkIHVzaW5nIGxvY2FsX2lyazEiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7cGVlcl9hZGRyOiBwZWVyX2FkZHIxIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzUgU2NhbiBkaXJlY3RlZCBhZHZlcnRpc2VycyB3aXRoIHVucmVzb2x2ZWQgZGlyZWN0IGFkZHJlc3MgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfc2Nhbl9zdGFydChwYXJhbXM6IHthZHZfZGlyX3JlcG9ydCA9IDF9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFEVkVSVElTRVJTLT5TRCBbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gcGVlcl9hZGRyMiwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlMiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFEVkVSVElTRVJTIGJveCBTRCBbbGFiZWwgPSAiUmVzb2x2YWJsZTIgY291bGQgbm90IGJlIHJlc29sdmVkLCByZXBvcnQgdGhlIHVucmVzb2x2ZWQgZGlyZWN0IGFkZHJlc3MiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfQURWX1JFUE9SVCB7cGVlcl9hZGRyOiBwZWVyX2FkZHIyLCBkaXJlY3RfYWRkcjogUmVzb2x2YWJsZTJ9Il07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BSSVZBQ1lfQURWX0RJUl9QUklWX01TQyBEaXJlY3RlZCBBZHZlcnRpc2luZw0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsSU5JVElBVE9SOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2FkZHJfc2V0KGFkZHIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBZHZlcnRpc2UgZGlyZWN0ZWQgdG8gcHJpdmF0ZSBwZWVyIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcmsxfX0sIHBwX2xvY2FsX2lya3M6IE5VTEwpICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0YXJ0KHBhcmFtczoge3BfcGVlcl9hZGRyID0gcGVlcl9hZGRyMX0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgYm94IFNEIFtsYWJlbCA9ICJHZW5lcmF0ZSBpbml0aWF0b3IgYWRkciBmcm9tIHBlZXJfaXJrMSJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gYWRkciwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBhZGRyLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IGFkZHIsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFByaXZhdGUgZGlyZWN0ZWQgYWR2ZXJ0aXNpbmcgdG8gcHJpdmF0ZSBwZWVyIHVzaW5nIGRldmljZSBJUksiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQocHBfaWRfa2V5czoge3twZWVyX2FkZHIxLCBwZWVyX2lyazF9fSwgcHBfbG9jYWxfaXJrczogTlVMTCkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXM6IHtwX3BlZXJfYWRkciA9IHBlZXJfYWRkcjF9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGJveCBTRCBbbGFiZWwgPSAiR2VuZXJhdGUgYWR2ZXJ0aXNlciBhZGRyZXNzIGZyb20gZGV2aWNlX2lyayBHZW5lcmF0ZSBpbml0aWF0b3IgYWRkcmVzcyBmcm9tIHBlZXJfaXJrMSJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIFByaXZhdGUgZGlyZWN0ZWQgYWR2ZXJ0aXNpbmcgdG8gcHJpdmF0ZSBwZWVyIHVzaW5nIGxvY2FsIElSSyBpbiBkZXZpY2UgaWRlbnRpdHkgbGlzdCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX19LCBwcF9sb2NhbF9pcmtzOiB7e2xvY2FsX2lyazF9fSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9wcml2YWN5X3NldChwYXJhbXM6IHttb2RlOiBERVZJQ0VfUFJJVkFDWSwgcHJpdmF0ZV9hZGRyX3R5cGU6IFJFU09MVkFCTEUgfSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Fkdl9zdGFydChwYXJhbXM6IHtwX3BlZXJfYWRkciA9IHBlZXJfYWRkcjF9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEIGJveCBTRCBbbGFiZWwgPSAiR2VuZXJhdGUgYWR2ZXJ0aXNlciBhZGRyZXNzIGZyb20gbG9jYWxfaXJrMSBHZW5lcmF0ZSBpbml0aWF0b3IgYWRkcmVzcyBmcm9tIHBlZXJfaXJrMSJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBSZXNvbHZhYmxlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IFJlc29sdmFibGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gUmVzb2x2YWJsZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICM0IFByaXZhdGUgZGlyZWN0ZWQgYWR2ZXJ0aXNpbmcgdG8gbm9uLXByaXZhdGUgcGVlciB1c2luZyBsb2NhbCBJUksgaW4gZGV2aWNlIGlkZW50aXR5IGxpc3QiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQocHBfaWRfa2V5czoge3twZWVyX2FkZHIxLCBwZWVyX2lyaz0wLi4wfX0sIHBwX2xvY2FsX2lya3M6IHt7bG9jYWxfaXJrMX19KSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0KHBhcmFtczoge21vZGU6IERFVklDRV9QUklWQUNZLCBwcml2YXRlX2FkZHJfdHlwZTogUkVTT0xWQUJMRSB9ICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfYWR2X3N0YXJ0KHBhcmFtczoge3BfcGVlcl9hZGRyID0gcGVlcl9hZGRyMX0pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0QgYm94IFNEIFtsYWJlbCA9ICJHZW5lcmF0ZSBhZHZlcnRpc2VyIGFkZHJlc3MgZnJvbSBsb2NhbF9pcmsxIl07DQorICogU0QtPklOSVRJQVRPUltsYWJlbCA9ICJBRFYgcGFja2V0LCBBZHZlcnRpc2VyIEFkZHIgPSBSZXNvbHZhYmxlLCBJbml0aWF0b3IgQWRkciA9IHBlZXJfYWRkcjEiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRC0+SU5JVElBVE9SW2xhYmVsID0gIkFEViBwYWNrZXQsIEFkdmVydGlzZXIgQWRkciA9IFJlc29sdmFibGUsIEluaXRpYXRvciBBZGRyID0gcGVlcl9hZGRyMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNELT5JTklUSUFUT1JbbGFiZWwgPSAiQURWIHBhY2tldCwgQWR2ZXJ0aXNlciBBZGRyID0gUmVzb2x2YWJsZSwgSW5pdGlhdG9yIEFkZHIgPSBwZWVyX2FkZHIxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FQX1BFUklQSF9DT05OX1BSSVZfTVNDIFBlcmlwaGVyYWwgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IHdpdGggUHJpdmF0ZSBQZWVyDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldChwcF9pZF9rZXlzOiB7e3BlZXJfYWRkcjEsIHBlZXJfaXJrMX19LCBwcF9sb2NhbF9pcmtzOiBOVUxMKSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFBlZXIgdXNlZCByZXNvbHZhYmxlIGFkZHJlc3NlcyBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQ0VOVFJBTCBbbGFiZWw9IlN0YXJ0IENvbm5lY3RhYmxlIEFkdmVydGlzaW5nIl07DQorICogfHx8Ow0KKyAqIFNEPDo+Q0VOVFJBTCBbbGFiZWwgPSAiQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0NPTk5FQ1RFRCwgcGVlcl9hZGRyID0ge3BlZXJfYWRkcjEsIGFkZHJfaWRfcGVlciA9IDF9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgUGVlciB1c2VkIGlkZW50aXR5IGFkZHJlc3MgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IENFTlRSQUwgW2xhYmVsPSJTdGFydCBDb25uZWN0YWJsZSBBZHZlcnRpc2luZyJdOw0KKyAqIHx8fDsNCisgKiBTRDw6PkNFTlRSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gRXN0YWJsaXNobWVudCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05ORUNURUQsIHBlZXJfYWRkciA9IHtwZWVyX2FkZHIxLCBhZGRyX2lkX3BlZXIgPSAwfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9DRU5UUkFMX0NPTk5fUFJJVl9NU0MgQ2VudHJhbCBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgd2l0aCBQcml2YXRlIFBlZXINCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFUklQSEVSQUw7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KHBwX2lkX2tleXM6IHt7cGVlcl9hZGRyMSwgcGVlcl9pcmsxfX0sIHBwX2xvY2FsX2lya3M6IE5VTEwpICJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFBFUklQSEVSQUwgcmJveCBQRVJJUEhFUkFMIFtsYWJlbD0iUGVyaXBoZXJhbCBTdGFydCBDb25uZWN0YWJsZSBBZHZlcnRpc2luZyJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2Nvbm5lY3QocGVlcl9hZGRyID0ge3BlZXJfYWRkcjEsIGFkZHJfaWRfcGVlciA9IDF9KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRVJJUEhFUkFMIFtsYWJlbCA9ICJTY2FubmluZyIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgUGVlciB1c2VkIHJlc29sdmFibGUgYWRkcmVzc2VzIGR1cmluZyBjb25uZWN0aW9uIHNldHVwICJdOw0KKyAqIHx8fDsNCisgKiBTRDw6PlBFUklQSEVSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gRXN0YWJsaXNobWVudCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05ORUNURUQsIHBlZXJfYWRkciA9IHtwZWVyX2FkZHIxLCBhZGRyX2lkX3BlZXIgPSAxfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIFBlZXIgdXNlZCBpZGVudGl0eSBhZGRyZXNzIGR1cmluZyBjb25uZWN0aW9uIHNldHVwICJdOw0KKyAqIHx8fDsNCisgKiBTRDw6PlBFUklQSEVSQUwgW2xhYmVsID0gIkNvbm5lY3Rpb24gRXN0YWJsaXNobWVudCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9DT05ORUNURUQsIHBlZXJfYWRkciA9IHtwZWVyX2FkZHIxLCBhZGRyX2lkX3BlZXIgPSAwfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAfQ0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfRVZUX1BIWV9NU0MgUEhZIFJlcXVlc3QNCisgKiBAew0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfQ0VOVFJBTF9QSFlfUkVRVUVTVCBDZW50cmFsIFBIWSBSZXF1ZXN0DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRVJJUEhFUkFMOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEluaXRpYXRlZCBieSBQZXJpcGhlcmFsLCBubyBwcmVmZXJyZWQgcGh5IHNldCAiXTsNCisgKiBTRDw9UEVSSVBIRVJBTCBbbGFiZWwgPSAiTExfUEhZX1JFUSJdOw0KKyAqIFNEPT5QRVJJUEhFUkFMIFtsYWJlbCA9ICJMTF9QSFlfVVBEQVRFX0lORCAtIE5vIGNoYW5nZSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEluaXRpYXRlZCBieSBQZXJpcGhlcmFsLCBwcmVmZXJyZWQgcGh5IHNldCBhbmQgY2hhbmdlIHJlcXVpcmVkIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX29wdF9zZXQoQkxFX0dBUF9PUFRfUFJFRkVSUkVEX1BIWVNfU0VUKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogLi4uOw0KKyAqIFNEPD1QRVJJUEhFUkFMIFtsYWJlbCA9ICJMTF9QSFlfUkVRIl07DQorICogU0Q9PlBFUklQSEVSQUwgW2xhYmVsID0gIkxMX1BIWV9VUERBVEVfSU5EIC0gcHJlZmVycmVkIHBoeSBmcm9tIGFwcCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QSFlfVVBEQVRFIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgSW5pdGlhdGVkIGJ5IEFQUCwgbm90IHN1cHBvcnRlZCBieSBwZWVyIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcGh5X3JlcXVlc3QoY29ubl9oYW5kbGUsIHt7QUxMX1BIWSwgQUxMX1BIWX19KSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkZlYXR1cmUgZXhjaGFuZ2UgaWYgcmVxdWlyZWRcbiBwZWVyIHN1cHBvcnQgY2hhbmdpbmcgcGh5Il07DQorICogU0Q9PlBFUklQSEVSQUwgW2xhYmVsPSJMTF9QSFlfUkVRIl07DQorICogU0Q8PVBFUklQSEVSQUwgW2xhYmVsPSJMTF9VTktOT1dOX1JTUCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbD0iQkxFX0dBUF9FVlRfUEhZX1VQREFURSB7U3RhdHVzPU5vdCBzdXBwb3J0ZWR9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzQgSW5pdGlhdGVkIGJ5IEFQUCwgY2hhbmdlIHJlcXVpcmVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfcGh5X3JlcXVlc3QoY29ubl9oYW5kbGUsIHt7QUxMX1BIWSwgQUxMX1BIWX19KSAiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggUEVSSVBIRVJBTCBbbGFiZWw9IkZlYXR1cmUgZXhjaGFuZ2UgaWYgcmVxdWlyZWRcbiBwZWVyIHN1cHBvcnQgY2hhbmdpbmcgcGh5Il07DQorICogU0Q9PlBFUklQSEVSQUwgW2xhYmVsID0gIkxMX1BIWV9SRVEiXTsNCisgKiBTRDw9UEVSSVBIRVJBTCBbbGFiZWwgPSAiTExfUEhZX1JTUCJdOw0KKyAqIFNEPT5QRVJJUEhFUkFMIFtsYWJlbCA9ICJMTF9QSFlfVVBEQVRFX0lORCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9QSFlfVVBEQVRFIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVBfUEVSSVBIRVJBTF9QSFlfUkVRVUVTVCBQZXJpcGhlcmFsIFBIWSBSZXF1ZXN0DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxDRU5UUkFMOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEluaXRpYXRlZCBieSBDZW50cmFsLCBubyBwcmVmZXJyZWQgcGh5IHNldCAiXTsNCisgKiBTRDw9Q0VOVFJBTCBbbGFiZWwgPSAiTExfUEhZX1JFUSJdOw0KKyAqIFNEPT5DRU5UUkFMIFtsYWJlbCA9ICJMTF9QSFlfUlNQIC0gMSBNYnBzIHR4LCAxIE1icHMgcngiXTsNCisgKiBTRDw9Q0VOVFJBTCBbbGFiZWwgPSAiTExfUEhZX1VQREFURV9JTkQgLSBObyBjaGFuZ2UiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBJbml0aWF0ZWQgYnkgQ2VudHJhbCwgcHJlZmVycmVkIHBoeSBzZXQgYW5kIGNoYW5nZSByZXF1aXJlZCJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9vcHRfc2V0KEJMRV9HQVBfT1BUX1BSRUZFUlJFRF9QSFlTX1NFVCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIC4uLjsNCisgKiBTRDw9Q0VOVFJBTCBbbGFiZWwgPSAiTExfUEhZX1JFUSJdOw0KKyAqIFNEPT5DRU5UUkFMIFtsYWJlbCA9ICJMTF9QSFlfUlNQIC0gcHJlZmVycmVkIHBoeSBmcm9tIGFwcCJdOw0KKyAqIFNEPD1DRU5UUkFMIFtsYWJlbCA9ICJMTF9QSFlfVVBEQVRFX0lORCAtIHByZWZlcnJlZCBwaHkgZnJvbSBhcHAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBUF9FVlRfUEhZX1VQREFURSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEluaXRpYXRlZCBieSBBUFAsIG5vdCBzdXBwb3J0ZWQgYnkgcGVlciJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3BoeV9yZXF1ZXN0KGNvbm5faGFuZGxlLCB7e0FMTF9QSFksIEFMTF9QSFl9fSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IENFTlRSQUwgW2xhYmVsPSJGZWF0dXJlIGV4Y2hhbmdlIGlmIHJlcXVpcmVkXG4gcGVlciBzdXBwb3J0IGNoYW5naW5nIHBoeSJdOw0KKyAqIFNEPT5DRU5UUkFMIFtsYWJlbD0iTExfUEhZX1JFUSJdOw0KKyAqIFNEPD1DRU5UUkFMIFtsYWJlbD0iTExfVU5LTk9XTl9SU1AiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWw9IkJMRV9HQVBfRVZUX1BIWV9VUERBVEUge1N0YXR1cz1Ob3Qgc3VwcG9ydGVkfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICM0IEluaXRpYXRlZCBieSBBUFAsIGNoYW5nZSByZXF1aXJlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX3BoeV9yZXF1ZXN0KGNvbm5faGFuZGxlLCB7e0FMTF9QSFksIEFMTF9QSFl9fSkgIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IENFTlRSQUwgW2xhYmVsPSJGZWF0dXJlIGV4Y2hhbmdlIGlmIHJlcXVpcmVkXG4gcGVlciBzdXBwb3J0IGNoYW5naW5nIHBoeSJdOw0KKyAqIFNEPT5DRU5UUkFMIFtsYWJlbD0iTExfUEhZX1JFUSJdOw0KKyAqIFNEPD1DRU5UUkFMIFtsYWJlbD0iTExfUEhZX1VQREFURV9JTkQiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWw9IkJMRV9HQVBfRVZUX1BIWV9VUERBVEUiXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQH0NCisNCisgKiBAZGVmZ3JvdXAgQkxFX0dBUF9EQVRBX0xFTkdUSF9VUERBVEVfUFJPQ0VEVVJFX01TQyBEYXRhIExlbmd0aCBVcGRhdGUgUHJvY2VkdXJlDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgU2VsZiBpbml0aWF0ZWQgIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsID0gIm1heF90eF9vY3RldHM9MjcsIG1heF9yeF9vY3RldHM9MjciXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2FwX2RhdGFfbGVuZ3RoX3VwZGF0ZShjb25uX2hhbmRsZSwgbG9jYWxfbWF4X3R4PTI1MSwgbG9jYWxfbWF4X3J4PTI1MSwgJmxpbWl0YXRpb24pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiTEwgTGVuZ3RoIFJlcXVlc3Qge3R4PTI1MSwgcng9MjUxfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJMTCBMZW5ndGggUmVzcG9uc2Uge3R4PTI1MSwgcng9MjUxfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsID0gIm1heF90eF9vY3RldHM9MjUxLCBtYXhfcnhfb2N0ZXRzPTI1MSJdOw0KKyAqIEFQUDw8PVNEICAgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0RBVEFfTEVOR1RIX1VQREFURSB7bWF4X3R4X29jdGV0cz0yNTEsIG1heF9yeF9vY3RldHM9MjUxfSJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFBlZXIgaW5pdGlhdGVkICJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsID0gIm1heF90eF9vY3RldHM9MjcsIG1heF9yeF9vY3RldHM9MjciXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiTEwgTGVuZ3RoIFJlcXVlc3Qge3R4PTI1MSwgcng9MjUxfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEVfUkVRVUVTVCB7bG9jYWxfbWF4X3R4OiAyNTEsIGxvY2FsX21heF9yeDogMjUxfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGF0YV9sZW5ndGhfdXBkYXRlKGNvbm5faGFuZGxlLCBsb2NhbF9tYXhfdHg9MjUxLCBsb2NhbF9tYXhfcng9MjUxLCAmbGltaXRhdGlvbikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJMTCBMZW5ndGggUmVzcG9uc2Uge3R4PTI1MSwgcng9MjUxfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsID0gIm1heF90eF9vY3RldHM9MjUxLCBtYXhfcnhfb2N0ZXRzPTI1MSJdOw0KKyAqIEFQUDw8PVNEICAgW2xhYmVsID0gIkJMRV9HQVBfRVZUX0RBVEFfTEVOR1RIX1VQREFURSB7bWF4X3R4X29jdGV0cz0yNTEsIG1heF9yeF9vY3RldHM9MjUxfSJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFVzaW5nIHRoZSBsaW1pdGF0aW9uIG91dCBwYXJhbWV0ZXIgdG8gYWRqdXN0IExpbmsgTGF5ZXIgRGF0YSBDaGFubmVsIFBEVSBzaXplICJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbCA9ICJtYXhfdHhfb2N0ZXRzPTI3LCBtYXhfcnhfb2N0ZXRzPTI3Il07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhcF9kYXRhX2xlbmd0aF91cGRhdGUoY29ubl9oYW5kbGUsIGxvY2FsX21heF90eD0yNTEsIGxvY2FsX21heF9yeD0yNTEsICZsaW1pdGF0aW9uKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9SRVNPVVJDRVMiXTsNCisgKiBBUFAgbm90ZSBTRCBbbGFiZWwgPSAibGltaXRhdGlvbiA9IHsgLnR4X3BheWxvYWRfbGltaXRlZF9vY3RldHMgPSA1MSwgLnJ4X3BheWxvYWRfbGltaXRlZF9vY3RldHMgPSA1MSwgLnR4X3J4X3RpbWVfbGltaXRlZF91cyA9IDB9Il07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXBfZGF0YV9sZW5ndGhfdXBkYXRlKGNvbm5faGFuZGxlLCBsb2NhbF9tYXhfdHg9MjAwLCBsb2NhbF9tYXhfcng9MjAwLCAmbGltaXRhdGlvbikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEBlbmRtc2MNCisgKiBAfQ0KKyAqDQorICogQH0NCisgKiBAfQ0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIEJMRV9HQVRUQw0KKyAqIEB7DQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19NU0MgTWVzc2FnZSBTZXF1ZW5jZSBDaGFydHMNCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfUFJJTV9TUlZDX0RJU0NfTVNDIEdBVFRDIFByaW1hcnkgU2VydmljZSBEaXNjb3ZlcnkNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIERpc2NvdmVyIEFsbCBTZXJ2aWNlcyAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIoaGFuZGxlLCBOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IEdyb3VwIFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBHcm91cCBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQIHtTVUNDRVNTLCBzZXJ2aWNlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcHJpbWFyeV9zZXJ2aWNlc19kaXNjb3ZlcihoYW5kbGUgKyBOLCBOVUxMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IEdyb3VwIFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBHcm91cCBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQIHtTVUNDRVNTLCBzZXJ2aWNlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcHJpbWFyeV9zZXJ2aWNlc19kaXNjb3ZlcihoYW5kbGUgKyBOICsgTSwgTlVMTCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBHcm91cCBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBBdHRyaWJ1dGUgTm90IEZvdW5kIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQIHtBVFRSSUJVVEVfTk9UX0ZPVU5EfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIERpc2NvdmVyIGEgU3BlY2lmaWMgU2VydmljZSAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3ByaW1hcnlfc2VydmljZXNfZGlzY292ZXIoaGFuZGxlLCB1dWlkKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBGaW5kIEJ5IFR5cGUgVmFsdWUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBCeSBUeXBlIFZhbHVlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQIHtTVUNDRVNTLCBzZXJ2aWNlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcHJpbWFyeV9zZXJ2aWNlc19kaXNjb3ZlcihoYW5kbGUgKyBOLCB1dWlkKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBGaW5kIEJ5IFR5cGUgVmFsdWUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBCeSBUeXBlIFZhbHVlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQIHtTVUNDRVNTLCBzZXJ2aWNlc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcHJpbWFyeV9zZXJ2aWNlc19kaXNjb3ZlcihoYW5kbGUgKyBOICsgTSwgdXVpZCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBCeSBUeXBlIFZhbHVlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBBdHRyaWJ1dGUgTm90IEZvdW5kIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQIHtBVFRSSUJVVEVfTk9UX0ZPVU5EfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfUkVMX0RJU0NfTVNDIEdBVFRDIFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcmVsYXRpb25zaGlwc19kaXNjb3ZlcihoYW5kbGVfcmFuZ2UpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9SRUxfRElTQ19SU1Age1NVQ0NFU1MsIGluY2x1ZGVzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19yZWxhdGlvbnNoaXBzX2Rpc2NvdmVyKGhhbmRsZV9yYW5nZSArIE4pIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9SRUxfRElTQ19SU1Age1NVQ0NFU1MsIGluY2x1ZGVzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19yZWxhdGlvbnNoaXBzX2Rpc2NvdmVyKGhhbmRsZV9yYW5nZSArIE4gKyBNKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2U6IEF0dHJpYnV0ZSBOb3QgRm91bmQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9SRUxfRElTQ19SU1Age0FUVFJJQlVURV9OT1RfRk9VTkR9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19DSEFSX0RJU0NfTVNDIEdBVFRDIENoYXJhY3RlcmlzdGljIERpc2NvdmVyeQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyYWN0ZXJpc3RpY3NfZGlzY292ZXIoaGFuZGxlX3JhbmdlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9ESVNDX1JTUCB7U1VDQ0VTUywgY2hhcnN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2NoYXJhY3RlcmlzdGljc19kaXNjb3ZlcihoYW5kbGVfcmFuZ2UgKyBOKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9ESVNDX1JTUCB7U1VDQ0VTUywgY2hhcnN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2NoYXJhY3RlcmlzdGljc19kaXNjb3ZlcihoYW5kbGVfcmFuZ2UgKyBOICsgTSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBBdHRyaWJ1dGUgTm90IEZvdW5kIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9ESVNDX1JTUCB7QVRUUklCVVRFX05PVF9GT1VORH0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX0RFU0NfRElTQ19NU0MgR0FUVEMgRGVzY3JpcHRvciBEaXNjb3ZlcnkNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfZGVzY3JpcHRvcnNfZGlzY292ZXIoaGFuZGxlX3JhbmdlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBGaW5kIEluZm9ybWF0aW9uIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEZpbmQgSW5mb3JtYXRpb24gUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9ERVNDX0RJU0NfUlNQIHtTVUNDRVNTLCBkZXNjc30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfZGVzY3JpcHRvcnNfZGlzY292ZXIoaGFuZGxlX3JhbmdlICsgTikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRmluZCBJbmZvcm1hdGlvbiBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBGaW5kIEluZm9ybWF0aW9uIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfREVTQ19ESVNDX1JTUCB7U1VDQ0VTUywgZGVzY3N9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2Rlc2NyaXB0b3JzX2Rpc2NvdmVyKGhhbmRsZV9yYW5nZSArIE4gKyBNKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBGaW5kIEluZm9ybWF0aW9uIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBBdHRyaWJ1dGUgTm90IEZvdW5kIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfREVTQ19ESVNDX1JTUCB7QVRUUklCVVRFX05PVF9GT1VORH0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1JFQURfVVVJRF9NU0MgR0FUVEMgUmVhZCBDaGFyYWN0ZXJpc3RpYyBWYWx1ZSBieSBVVUlEDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2NoYXJfdmFsdWVfYnlfdXVpZF9yZWFkKHV1aWQsIGhhbmRsZV9yYW5nZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQnkgVHlwZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0NIQVJfVkFMX0JZX1VVSURfUkVBRF9SU1Age1NVQ0NFU1MsIGNoYXJfdmFsdWVzfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlX2J5X3V1aWRfcmVhZCh1dWlkLCBoYW5kbGVfcmFuZ2UgKyBOKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCeSBUeXBlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxfQllfVVVJRF9SRUFEX1JTUCB7U1VDQ0VTUywgY2hhcl92YWx1ZXN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2NoYXJfdmFsdWVfYnlfdXVpZF9yZWFkKHV1aWQsIGhhbmRsZV9yYW5nZSArIE4gKyBNKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJ5IFR5cGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2U6IEF0dHJpYnV0ZSBOb3QgRm91bmQiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTF9CWV9VVUlEX1JFQURfUlNQIHtBVFRSSUJVVEVfTk9UX0ZPVU5EfSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfVkFMVUVfUkVBRF9NU0MgR0FUVEMgQ2hhcmFjdGVyaXN0aWMgb3IgRGVzY3JpcHRvciBWYWx1ZSBSZWFkDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBvZmZzZXQgPT0gMCAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3JlYWQoaGFuZGxlLCAwKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9SRUFEX1JTUCB7U1VDQ0VTUywgdmFsdWV9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgb2Zmc2V0ICE9IDAgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19yZWFkKGhhbmRsZSwgb2Zmc2V0KSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIEJsb2IgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCbG9iIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfUkVBRF9SU1Age1NVQ0NFU1MsIHZhbHVlfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19yZWFkKGhhbmRsZSwgb2Zmc2V0ICsgTikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCbG9iIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgQmxvYiBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1JFQURfUlNQIHtTVUNDRVNTLCB2YWx1ZX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfcmVhZChoYW5kbGUsIG9mZnNldCArIE4gKyBNICsgMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBCbG9iIFJlcXVlc3QiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlOiBJbnZhbGlkIE9mZnNldCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1JFQURfUlNQIHtJTlZBTElEX09GRlNFVH0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1JFQURfTVVMVF9NU0MgR0FUVEMgUmVhZCBNdWx0aXBsZSBDaGFyYWN0ZXJpc3RpYyBWYWx1ZXMNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFN1Y2Nlc3NmdWwgcmVxdWVzdCAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2NoYXJfdmFsdWVzX3JlYWQoaGFuZGxlcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBNdWx0aXBsZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIE11bHRpcGxlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxTX1JFQURfUlNQIHtTVUNDRVNTLCBjaGFyX3ZhbHVlc30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBGYWlsaW5nIHJlcXVlc3QgKGludmFsaWQgaGFuZGxlKSAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2NoYXJfdmFsdWVzX3JlYWQoaGFuZGxlcykiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBNdWx0aXBsZSBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZTogSW52YWxpZCBIYW5kbGUiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTFNfUkVBRF9SU1Age0lOVkFMSURfSEFORExFLCBlcnJvcl9oYW5kbGU9PGludmFsaWQgaGFuZGxlPn0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1ZBTFVFX1dSSVRFX1dJVEhPVVRfUkVTUF9NU0MgR0FUVEMgQ2hhcmFjdGVyaXN0aWMgVmFsdWUgV3JpdGUgV2l0aG91dCBSZXNwb25zZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIGRvZXMgbm90IGtlZXAgdHJhY2sgb2YgdGhlIGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50IGZvciB3cml0ZXMgd2l0aG91dCByZXNwb25zZXMgIl07DQorICogQVBQIG5vdGUgUEVFUiBbbGFiZWwgPSAiIFRoaXMgdmFyaWFudCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgQVBQIHRvIHRyYW5zbWl0IHdyaXRlcyB3aXRob3V0IHJlc3BvbnNlcyB3aXRob3V0IGtlZXBpbmcgdHJhY2sgb2YgdGhlIGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50LiBIb3dldmVyLCBzdWNjZXNzZnVsIHF1ZXVpbmcgb2Ygd3JpdGVzIHdpdGhvdXQgcmVzcG9uc2VzIGNhbm5vdCBiZSBndWFyYW50ZWVkLiAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV8xKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV8yKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV8zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9FUlJPUl9SRVNPVVJDRVMiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfV1JJVEVfQ01ELCBoYW5kbGUsIHZhbHVlXzQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHt2YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgQ29tbWFuZCB7dmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIENvbW1hbmQge3ZhbHVlXzR9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfQ01EX1RYX0NPTVBMRVRFIHtTVUNDRVNTLCAzfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBrZWVwcyB0cmFjayBvZiB0aGUgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQgZm9yIHdyaXRlcyB3aXRob3V0IHJlc3BvbnNlcyAiXTsNCisgKiBBUFAgbm90ZSBQRUVSIFtsYWJlbCA9ICIgVGhpcyB2YXJpYW50IG1ha2VzIGl0IHBvc3NpYmxlIGZvciBBUFAgdG8ga25vdyB3aGVuIHN1Y2Nlc3NmdWwgcXVldWluZyBvZiB3cml0ZXMgd2l0aG91dCByZXNwb25zZXMgaXMgZ3VhcmFudGVlZC4gIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRUQywgZ2F0dGNfY29ubl9jZmcud3JpdGVfY21kX3R4X3F1ZXVlX3NpemUgPSAyKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9IDIiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV8xKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQtLSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9XUklURV9DTUQsIGhhbmRsZSwgdmFsdWVfMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50LS0iXTsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsID0gImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ID09IDAiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHt2YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSB7U1VDQ0VTUywgMX0iXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCArPSAxIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX0NNRCwgaGFuZGxlLCB2YWx1ZV8zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQtLSJdOw0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWwgPSAiYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgPT0gMCJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIENvbW1hbmQge3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfQ01EX1RYX0NPTVBMRVRFIHtTVUNDRVNTLCAxfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ICs9IDEiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfV1JJVEVfQ01ELCBoYW5kbGUsIHZhbHVlXzQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudC0tIl07DQorICogQVBQIG5vdGUgQVBQIFtsYWJlbCA9ICJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9PSAwIl07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgQ29tbWFuZCB7dmFsdWVfM30iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIENvbW1hbmQge3ZhbHVlXzR9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfQ01EX1RYX0NPTVBMRVRFIHtTVUNDRVNTLCAyfSJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ICs9IDIiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1ZBTFVFX1dSSVRFX01TQyBHQVRUQyBDaGFyYWN0ZXJpc3RpYyBvciBEZXNjcmlwdG9yIFZhbHVlIFdyaXRlDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX1dSSVRFX1JFUSwgaGFuZGxlLCB2YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9XUklURV9SU1Age0JMRV9HQVRUX09QX1dSSVRFX1JFUSwgU1VDQ0VTU30iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX1ZBTFVFX0xPTkdfV1JJVEVfTVNDIEdBVFRDIENoYXJhY3RlcmlzdGljIG9yIERlc2NyaXB0b3IgVmFsdWUgTG9uZyBXcml0ZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9QUkVQX1dSSVRFX1JFUSwgaGFuZGxlLCBvZmZzZXRfMSwgdmFsdWVfMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGUsIG9mZnNldF8xLCB2YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlLCBvZmZzZXRfMSwgdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9XUklURV9SU1Age0JMRV9HQVRUX09QX1BSRVBfV1JJVEVfUkVRLCBTVUNDRVNTLCB2YWx1ZV8xfSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEsIGhhbmRsZSwgb2Zmc2V0XzIsIHZhbHVlXzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlLCBvZmZzZXRfMiwgdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZSwgb2Zmc2V0XzIsIHZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9QUkVQX1dSSVRFX1JFUSwgU1VDQ0VTUywgdmFsdWVfMn0iXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBleGVjdXRlcyB0aGUgTG9uZyBXcml0ZSBwcm9jZWR1cmUgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9FWEVDX1dSSVRFX1JFUSwgUFJFUEFSRURfV1JJVEUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdDogZmxhZ3MgPSAweDAxIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9FWEVDX1dSSVRFX1JFUSwgU1VDQ0VTU30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAgY2FuY2VscyB0aGUgTG9uZyBXcml0ZSBwcm9jZWR1cmUgIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9FWEVDX1dSSVRFX1JFUSwgUFJFUEFSRURfQ0FOQ0VMKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Q6IGZsYWdzID0gMHgwMCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCB7QkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFNVQ0NFU1N9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19WQUxVRV9SRUxJQUJMRV9XUklURV9NU0MgR0FUVEMgQ2hhcmFjdGVyaXN0aWMgb3IgRGVzY3JpcHRvciBWYWx1ZSBSZWxpYWJsZSBXcml0ZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y193cml0ZShCTEVfR0FUVF9PUF9QUkVQX1dSSVRFX1JFUSwgaGFuZGxlXzEsIG9mZnNldCwgdmFsdWVfMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMSwgb2Zmc2V0LCB2YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzEsIG9mZnNldCwgdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRDX0VWVF9XUklURV9SU1Age0JMRV9HQVRUX09QX1BSRVBfV1JJVEVfUkVRLCBTVUNDRVNTLCB2YWx1ZV8xfSJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEsIGhhbmRsZV8yLCBvZmZzZXQsIHZhbHVlXzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzIsIG9mZnNldCwgdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8yLCBvZmZzZXQsIHZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9QUkVQX1dSSVRFX1JFUSwgU1VDQ0VTUywgdmFsdWVfMn0iXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBleGVjdXRlcyB0aGUgUmVsaWFibGUgV3JpdGUgcHJvY2VkdXJlICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dGNfd3JpdGUoQkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFBSRVBBUkVEX1dSSVRFKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Q6IGZsYWdzID0gMHgwMSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCB7QkxFX0dBVFRfT1BfRVhFQ19XUklURV9SRVEsIFNVQ0NFU1N9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIGNhbmNlbHMgdGhlIFJlbGlhYmxlIFdyaXRlIHByb2NlZHVyZSAiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX3dyaXRlKEJMRV9HQVRUX09QX0VYRUNfV1JJVEVfUkVRLCBQUkVQQVJFRF9DQU5DRUwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdDogZmxhZ3MgPSAweDAwIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIHtCTEVfR0FUVF9PUF9FWEVDX1dSSVRFX1JFUSwgU1VDQ0VTU30iXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX0hWSV9NU0MgR0FUVEMgSGFuZGxlIFZhbHVlIEluZGljYXRpb24NCisgKiA8Yj4gR0FUVEMgSGFuZGxlIFZhbHVlIEluZGljYXRpb24gTVNDIDwvYj4NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfSFZYIHtJTkRJQ0FUSU9OLCBkYXRhfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0Y19odl9jb25maXJtKGhhbmRsZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIENvbmZpcm1hdGlvbiIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVENfSFZOX01TQyBHQVRUQyBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUQ19FVlRfSFZYIHtOT1RJRklDQVRJT04sIGRhdGF9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUQ19USU1FT1VUX01TQyBHQVRUQyBUaW1lb3V0DQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkFueSBHQVRUQyBBUEkgdXNlZCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUGFja2V0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQIG5vdGUgUEVFUiBbbGFiZWwgPSAiTm8gUmVzcG9uc2UgZnJvbSBQZWVyIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogU0QgYm94IFNEIFtsYWJlbD0iVGltZW91dCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX1RJTUVPVVQge3NvdXJjZX0iXTsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iTm8gYWRkaXRpb25hbCBBVFQgVHJhZmZpYyBBbGxvd2VkIiwgdGV4dGJnY29sb3VyPSIjZmY3ZjdmIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAiQW55IEFQSSBjYWxsIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0JVU1kiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX01UVV9FWENIQU5HRSBHQVRUQyBBVFRfTVRVIEV4Y2hhbmdlDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2NmZ19zZXQoQkxFX0NPTk5fQ0ZHX0dBVFQsIGdhdHRfY29ubl9jZmcuYXR0X210dT0xMDApIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZW5hYmxlKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiAuLi47DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9ImF0dF9tdHU9MjMiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRjX2V4Y2hhbmdlX210dV9yZXF1ZXN0KGNvbm5faGFuZGxlLCBjbGllbnRfcnhfbXR1PTgwKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGNoYW5nZSBNVFUgUmVxdWVzdCB7Y2xpZW50X3J4X210dT04MH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4Y2hhbmdlIE1UVSBSZXNwb25zZSB7c2VydmVyX3J4X210dT03NX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iYXR0X210dT03NSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVENfRVZUX0VYQ0hBTkdFX01UVV9SU1Age1NVQ0NFU1MsIHNlcnZlcl9yeF9tdHU9NzV9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQH0NCisgKiBAfQ0KKyAqLw0KKw0KKy8qKg0KKyAqIEBhZGR0b2dyb3VwIEJMRV9HQVRUUw0KKyAqIEB7DQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19NU0MgTWVzc2FnZSBTZXF1ZW5jZSBDaGFydHMNCisgKiBAew0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfQVRUX1RBQkxFX1BPUF9NU0MgR0FUVFMgQVRUIFRhYmxlIFBvcHVsYXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNEOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfc2VydmljZV9hZGQodXVpZCMxKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgaGFuZGxlX3NydmMjMX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfY2hhcmFjdGVyaXN0aWNfYWRkKGhhbmRsZV9zcnZjIzEsIGNoYXJfbWQsIHZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgaGFuZGxlX2NoYXIjMSwgLi4ufSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19kZXNjcmlwdG9yX2FkZChoYW5kbGVfY2hhciMxLCB2YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9kZXNjIzF9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2Rlc2NyaXB0b3JfYWRkKGhhbmRsZV9jaGFyIzEsIHZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgaGFuZGxlX2Rlc2MjMn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfY2hhcmFjdGVyaXN0aWNfYWRkKGhhbmRsZV9zcnZjIzEsIGNoYXJfbWQsIHZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIntOUkZfU1VDQ0VTUywgaGFuZGxlX2NoYXIjMiwgLi4ufSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19kZXNjcmlwdG9yX2FkZChoYW5kbGVfY2hhciMyLCB2YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9kZXNjIzN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3NlcnZpY2VfYWRkKHV1aWQjMikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJ7TlJGX1NVQ0NFU1MsIGhhbmRsZV9zcnZjIzJ9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2luY2x1ZGVfYWRkKGhhbmRsZV9zcnZjIzIsIGhhbmRsZV9zcnZjIzEpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBoYW5kbGVfaW5jIzF9Il07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19SRUFEX1JFUV9OT19BVVRIX01TQyBHQVRUUyBSZWFkIFJlcXVlc3Qgd2l0aG91dCBBdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVxdWVzdCIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfV1JJVEVfUkVRX05PX0FVVEhfTVNDIEdBVFRTIFdyaXRlIFJlcXVlc3Qgd2l0aG91dCBBdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgUmVxdWVzdCB7cGVlcl92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogcGVlcl92YWx1ZSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1dSSVRFIHtXUklURV9SRVEsIGF1dGhfcmVxdWlyZWQ9MCwgcGVlcl92YWx1ZX0iXTsNCisgKiBAZW5kbXNjDQorICoNCisgQGRlZmdyb3VwIEJMRV9HQVRUU19XUklURV9DTURfTk9fQVVUSF9NU0MgR0FUVFMgV3JpdGUgQ29tbWFuZCBXaXRob3V0IEF1dGhvcml6YXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHtwZWVyX3ZhbHVlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IHBlZXJfdmFsdWUiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9XUklURSB7V1JJVEVfQ01ELCBhdXRoX3JlcXVpcmVkPTAsIHBlZXJfdmFsdWV9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19XUklURV9DTURfQVVUSF9NU0MgR0FUVFMgV3JpdGUgQ29tbWFuZCBXaXRoIEF1dGhvcml6YXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBDb21tYW5kIHtwZWVyX3ZhbHVlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9XUklURSB7V1JJVEVfQ01ELCBhdXRoX3JlcXVpcmVkPTEsIHBlZXJfdmFsdWV9Il07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgQXV0aG9yaXplcyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0KHBlZXJfdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBwZWVyX3ZhbHVlIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAgQXV0aG9yaXplcyBidXQgY2hhbmdlcyB2YWx1ZSAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0KGFwcF92YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZSJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgQXBwIGlnbm9yZXMgdGhlIGluY29taW5nIG9wZXJhdGlvbiAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19SRUFEX1JFUV9BVVRIX01TQyBHQVRUUyBSZWFkIFJlcXVlc3Qgd2l0aCBBdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogY3VycmVudF92YWx1ZSJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBSZXF1ZXN0IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1JFQUQsIGN1cnJlbnRfdmFsdWV9Il07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgQXV0aG9yaXplcyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFNVQ0NFU1MsIGFwcF92YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUmVhZCBSZXNwb25zZSB7YXBwX3ZhbHVlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIERpc2FsbG93cyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFJFQURfTk9UX1BFUk1JVFRFRCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1dSSVRFX1JFUV9BVVRIX01TQyBHQVRUUyBXcml0ZSBSZXF1ZXN0IHdpdGggQXV0aG9yaXphdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFdyaXRlIFJlcXVlc3Qge3BlZXJfdmFsdWV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBwZWVyX3ZhbHVlfSJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIEF1dGhvcml6ZXMgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShTVUNDRVNTLCBwZWVyX3ZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogcGVlcl92YWx1ZSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBBdXRob3JpemVzIGJ1dCBjaGFuZ2VzIHZhbHVlICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoU1VDQ0VTUywgYXBwX3ZhbHVlKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogYXBwX3ZhbHVlIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgQXBwIERpc2FsbG93cyAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFX05PVF9QRVJNSVRURUQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX0JVRl9OT0FVVEhfTVNDIEdBVFRTIFF1ZXVlZCBXcml0ZXM6IFN0YWNrIGhhbmRsZWQsIG5vIGF0dHJpYnV0ZXMgcmVxdWlyZSBhdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1Qge0JMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX3VzZXJfbWVtX3JlcGx5IHt1c2VyX21lbV9ibG9ja30iXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEF0dHJpYnV0ZSBWYWx1ZXMgdmFsaWRhdGlvbiBwYXNzZWQgIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IHBlZXJfdmFsdWVfMVxuaGFuZGxlXzI6IHBlZXJfdmFsdWVfMiJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1dSSVRFIHtFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHBhcnNlcyB0aGUgbWVtb3J5IGl0IHByb3ZpZGVkIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVMRUFTRSB7dXNlcl9tZW1fYmxvY2t9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXR0cmlidXRlIFZhbHVlcyB2YWxpZGF0aW9uIGZhaWxlZCAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSB7SW52YWxpZCBWYWx1ZSBMZW5ndGggLyBPZmZzZXR9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVMRUFTRSB7dXNlcl9tZW1fYmxvY2t9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgUGVlciBjYW5jZWxzIG9wZXJhdGlvbiAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7Q0FOQ0VMfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0Uge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIHx8fDsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9CVUZfQVVUSF9NU0MgR0FUVFMgUXVldWVkIFdyaXRlczogU3RhY2sgaGFuZGxlZCwgb25lIG9yIG1vcmUgYXR0cmlidXRlcyByZXF1aXJlIGF1dGhvcml6YXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVRVUVTVCB7QkxFX1VTRVJfTUVNX1RZUEVfR0FUVFNfUVVFVUVEX1dSSVRFU30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfdXNlcl9tZW1fcmVwbHkge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEFwcCBBdXRob3JpemVzIGJvdGggUHJlcGFyZSBXcml0ZSBhbmQgRXhlY3V0ZSBXcml0ZSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHBhcnNlcyB0aGUgbWVtb3J5IGl0IHByb3ZpZGVkIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUykiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBwZWVyX3ZhbHVlXzIiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0VWVF9VU0VSX01FTV9SRUxFQVNFIHt1c2VyX21lbV9ibG9ja30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAgRGlzYWxsb3dzIFByZXBhcmUgV3JpdGUgYW5kIEF1dGhvcml6ZXMgRXhlY3V0ZSBXcml0ZSAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBJTlNVRl9BVVRIT1JJWkFUSU9OKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2Uge0luc3VmZmljaWVudCBBdXRob3JpemF0aW9ufSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtXUklURX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIEVYRUNfV1JJVEVfUkVRX05PV30iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcGFyc2VzIHRoZSBtZW1vcnkgaXQgcHJvdmlkZWQiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IHBlZXJfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0Uge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEFwcCBBdXRob3JpemVzIFByZXBhcmUgV3JpdGUgYW5kIERpc2FsbG93cyBFeGVjdXRlIFdyaXRlICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHBhcnNlcyB0aGUgbWVtb3J5IGl0IHByb3ZpZGVkIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgQVBQX0VSUk9SX0NPREUpIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSB7QVBQX0VSUk9SX0NPREV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVMRUFTRSB7dXNlcl9tZW1fYmxvY2t9Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfTk9BVVRIX01TQyBHQVRUUyBRdWV1ZWQgV3JpdGVzOiBBcHAgaGFuZGxlZCwgbm8gYXR0cmlidXRlcyByZXF1aXJlIGF1dGhvcml6YXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1Qge0JMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX3VzZXJfbWVtX3JlcGx5IHtOVUxMfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgRVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIEF0dHJpYnV0ZSB2YWx1ZXMgaW4gc3RhY2sgbWVtb3J5IChWTE9DX1NUQUNLKSwgYXR0cmlidXRlIHZhbHVlcyB2YWxpZGF0aW9uIHBhc3NlZCAiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0IHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c192YWx1ZV9zZXQge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogcGVlcl92YWx1ZV8xXG5oYW5kbGVfMjogcGVlcl92YWx1ZV8yIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUykiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBdHRyaWJ1dGUgdmFsdWVzIGluIHVzZXIgbWVtb3J5IChWTE9DX1VTRVIpLCBhdHRyaWJ1dGUgdmFsdWVzIHZhbGlkYXRpb24gcGFzc2VkICJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcGxpY2F0aW9uIHRyYXZlcnNlcyBpdHMgcXVldWUgYW5kIGV4ZWN1dGVzIHRoZSB3cml0ZSBvcGVyYXRpb25zIChtZW1jcHkpIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBwZWVyX3ZhbHVlXzIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMzIEF0dHJpYnV0ZSB2YWx1ZXMgdmFsaWRhdGlvbiBmYWlsZWQgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgSU5WQUxJRF9PRkZTRVQpIl07DQorICogQVBQIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXJyb3IgUmVzcG9uc2Uge0ludmFsaWQgT2Zmc2V0fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyBAZGVmZ3JvdXAgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9OT0JVRl9QRUVSX0NBTkNFTF9NU0MgR0FUVFMgUXVldWVkIFdyaXRlczogQXBwIGhhbmRsZWQsIHBlZXIgY2FuY2VscyBvcGVyYXRpb24NCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1Qge0JMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVN9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX3VzZXJfbWVtX3JlcGx5IHtOVUxMfSJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlcXVlc3Qge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1JXX0FVVEhPUklaRV9SRVFVRVNUIHtXUklURSwgUFJFUF9XUklURV9SRVEsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBxdWV1ZXMge2hhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yfSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MsIGhhbmRsZV8yLCBvZmZzZXRfMiwgcGVlcl92YWx1ZV8yKSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXNwb25zZSB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge0NBTkNFTH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIEVYRUNfV1JJVEVfUkVRX0NBTkNFTH0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJRdWV1ZSBFcmFzZWRcblZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUykiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfQVVUSF9NU0MgR0FUVFMgUXVldWVkIFdyaXRlczogQXBwIGhhbmRsZWQsIG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMgcmVxdWlyZSBhdXRob3JpemF0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZSBpbiB1c2VyIG1lbW9yeSAoVkxPQ19VU0VSKTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVRVUVTVCB7QkxFX1VTRVJfTUVNX1RZUEVfR0FUVFNfUVVFVUVEX1dSSVRFU30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfdXNlcl9tZW1fcmVwbHkge05VTEx9Il07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBQUkVQX1dSSVRFX1JFUSwgaGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHF1ZXVlcyB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUywgaGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzEpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBQUkVQX1dSSVRFX1JFUSwgaGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9Il07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgQXBwIEF1dGhvcml6ZXMgYm90aCBQcmVwYXJlIFdyaXRlIGFuZCBFeGVjdXRlIFdyaXRlIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHF1ZXVlcyB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUywgaGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzIpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwbGljYXRpb24gdHJhdmVyc2VzIGl0cyBxdWV1ZSBhbmQgZXhlY3V0ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbnMgKG1lbWNweSkiXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IHBlZXJfdmFsdWVfMVxuaGFuZGxlXzI6IHBlZXJfdmFsdWVfMiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzIgQXBwIERpc2FsbG93cyBQcmVwYXJlIFdyaXRlIGFuZCBBdXRob3JpemVzIEV4ZWN1dGUgV3JpdGUgIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgSU5TVUZfQVVUSE9SSVpBVElPTikiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlIHtJbnN1ZmZpY2llbnQgQXV0aG9yaXphdGlvbn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwbGljYXRpb24gdHJhdmVyc2VzIGl0cyBxdWV1ZSBhbmQgZXhlY3V0ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbnMgKG1lbWNweSkiXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IHBlZXJfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzMgQXBwIEF1dGhvcml6ZXMgUHJlcGFyZSBXcml0ZSBhbmQgRGlzYWxsb3dzIEV4ZWN1dGUgV3JpdGUgIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iQXBwIHF1ZXVlcyB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgU1VDQ0VTUywgaGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzIpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVxdWVzdCB7V1JJVEV9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1Qge1dSSVRFLCBFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseShXUklURSwgQVBQX0VSUk9SX0NPREUpIl07DQorICogQVBQIHJib3ggQVBQIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEVycm9yIFJlc3BvbnNlIHtBUFBfRVJST1JfQ09ERX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9RVUVVRV9GVUxMX01TQyBHQVRUUyBRdWV1ZWQgV3JpdGVzOiBQcmVwYXJlIFF1ZXVlIEZ1bGwNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjIiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBjdXJyZW50X3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzEsIG9mZnNldF8xLCBwZWVyX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9FVlRfVVNFUl9NRU1fUkVRVUVTVCB7QkxFX1VTRVJfTUVNX1RZUEVfR0FUVFNfUVVFVUVEX1dSSVRFU30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBTdGFjayBoYW5kbGVkICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV91c2VyX21lbV9yZXBseSB7dXNlcl9tZW1fYmxvY2t9Il07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBQcmVwYXJlIFdyaXRlIFJlc3BvbnNlIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVxdWVzdCB7aGFuZGxlXzIsIG9mZnNldF8yLCBwZWVyX3ZhbHVlXzJ9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSB7UHJlcGFyZSBRdWV1ZSBGdWxsfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtXUklURX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWVzIGluIEFUVCBUYWJsZTpcbmhhbmRsZV8xOiBwZWVyX3ZhbHVlXzFcbmhhbmRsZV8yOiBjdXJyZW50X3ZhbHVlXzIiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9XUklURSB7RVhFQ19XUklURV9SRVFfTk9XfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IkFwcCBwYXJzZXMgdGhlIG1lbW9yeSBpdCBwcm92aWRlZCJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXNwb25zZSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0Uge3VzZXJfbWVtX2Jsb2NrfSJdOw0KKyAqIHx8fDsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMyIEFwcCBoYW5kbGVkICJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV91c2VyX21lbV9yZXBseSB7TlVMTH0iXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJBcHAgcXVldWVzIHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBTVUNDRVNTLCBoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMSkiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFByZXBhcmUgV3JpdGUgUmVzcG9uc2Uge2hhbmRsZV8xLCBvZmZzZXRfMSwgcGVlcl92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IHtoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIFBSRVBfV1JJVEVfUkVRLCBoYW5kbGVfMiwgb2Zmc2V0XzIsIHBlZXJfdmFsdWVfMn0iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfcndfYXV0aG9yaXplX3JlcGx5KFdSSVRFLCBQUkVQQVJFX1FVRVVFX0ZVTEwpIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFcnJvciBSZXNwb25zZSB7UHJlcGFyZSBRdWV1ZSBGdWxsfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtXUklURX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCB7V1JJVEUsIEVYRUNfV1JJVEVfUkVRX05PV30iXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0IHtoYW5kbGVfMSwgb2Zmc2V0XzEsIHBlZXJfdmFsdWVfMX0iXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHkoV1JJVEUsIFNVQ0NFU1MpIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogcGVlcl92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfRVhFQ1VURV9XSVRIT1VUX1BSRVBBUkVfTVNDIEdBVFRTIFF1ZXVlZCBXcml0ZXM6IEV4ZWN1dGUgV3JpdGUgd2l0aG91dCBQcmVwYXJlIFdyaXRlDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIyIjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiB8fHw7DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJObyBBVFQgUHJlcGFyZSBXcml0ZSBSZXF1ZXN0IGhhcyBiZWVuIHJlY2VpdmVkIGJ5IFNEIl07DQorICogfHx8Ow0KKyAqIC0tLSBbbGFiZWwgPSAiIFZhcmlhbnQgIzEgV3JpdGUgY2FuY2VsbGVkICJdOw0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0IHtDQU5DRUx9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0QgcmJveCBTRCBbbGFiZWw9IlZhbHVlcyBpbiBBVFQgVGFibGU6XG5oYW5kbGVfMTogY3VycmVudF92YWx1ZV8xXG5oYW5kbGVfMjogY3VycmVudF92YWx1ZV8yIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfV1JJVEUge0VYRUNfV1JJVEVfUkVRX0NBTkNFTH0iXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEV4ZWN1dGUgV3JpdGUgUmVzcG9uc2UiLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBXcml0ZSBub3cgIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlcXVlc3Qge1dSSVRFfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZXMgaW4gQVRUIFRhYmxlOlxuaGFuZGxlXzE6IGN1cnJlbnRfdmFsdWVfMVxuaGFuZGxlXzI6IGN1cnJlbnRfdmFsdWVfMiJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1dSSVRFIHtFWEVDX1dSSVRFX1JFUV9OT1d9Il07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBFeGVjdXRlIFdyaXRlIFJlc3BvbnNlIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19NVFVfRVhDSEFOR0UgR0FUVFMgQVRUX01UVSBFeGNoYW5nZQ0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMiI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRULCBnYXR0X2Nvbm5fY2ZnLmF0dF9tdHU9MTAwKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2VuYWJsZSgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJhdHRfbXR1PTIzIl07DQorICogfHx8Ow0KKyAqIFNEPDpQRUVSIFtsYWJlbCA9ICJBVFQgRXhjaGFuZ2UgTVRVIFJlcXVlc3Qge2NsaWVudF9yeF9tdHU9ODB9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfRVhDSEFOR0VfTVRVX1JFUVVFU1Qge2F0dF9tdHU9ODB9Il07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2V4Y2hhbmdlX210dV9yZXBseShjb25uX2hhbmRsZSwgc2VydmVyX3J4X210dT03NSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgRXhjaGFuZ2UgTVRVIFJlc3BvbnNlIHtzZXJ2ZXJfcnhfbXR1PTc1fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJhdHRfbXR1PTc1Il07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19IVklfTVNDIEdBVFRTIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iSW5kaWNhdGlvbnMgRW5hYmxlZCBpbiBDQ0NEIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KElORElDQVRJT04sIGFwcF92YWx1ZSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZSJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIEluZGljYXRpb24ge2FwcF92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiAtLS0gW2xhYmVsID0gIiBWYXJpYW50ICMxIFBlZXIgQ29uZmlybXMgIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgQ29uZmlybWF0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfSFZDIl07DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBQZWVyIElnbm9yZXMgIl07DQorICogfHx8Ow0KKyAqIC4uLjsNCisgKiB8fHw7DQorICogU0QgYm94IFNEIFtsYWJlbD0iVGltZW91dCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1RJTUVPVVQiXTsNCisgKiBAZW5kbXNjDQorICoNCisgKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0hWTl9NU0MgR0FUVFMgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbg0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMSBBcHAgZG9lcyBub3Qga2VlcCB0cmFjayBvZiB0aGUgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQgZm9yIG5vdGlmaWNhdGlvbnMgIl07DQorICogQVBQIG5vdGUgUEVFUiBbbGFiZWwgPSAiIFRoaXMgdmFyaWFudCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgQVBQIHRvIHRyYW5zbWl0IG5vdGlmaWNhdGlvbnMgd2l0aG91dCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudC4gSG93ZXZlciwgc3VjY2Vzc2Z1bCBxdWV1aW5nIG9mIG5vdGlmaWNhdGlvbnMgY2Fubm90IGJlIGd1YXJhbnRlZWQuICJdOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZW5hYmxlKCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbCA9ICJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsID0gIk5vdGlmaWNhdGlvbnMgRW5hYmxlZCBpbiBDQ0NEIl07DQorICogU0Qgbm90ZSBTRCBbbGFiZWwgPSAiVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19odngoTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWVfMSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEIG5vdGUgU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV8xIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChOT1RJRklDQVRJT04sIGFwcF92YWx1ZV8yKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Qgbm90ZSBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogYXBwX3ZhbHVlXzIiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlXzMpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX1JFU09VUkNFUyJdOw0KKyAqIFNEIG5vdGUgU0QgW2xhYmVsID0gIlZhbHVlIGluIEFUVCBUYWJsZTogYXBwX3ZhbHVlXzMiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIHx8fDsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlXzQpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbCA9ICJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV80Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB7YXBwX3ZhbHVlXzF9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIHthcHBfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24ge2FwcF92YWx1ZV80fSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX0hWTl9UWF9DT01QTEVURSB7M30iXTsNCisgKiB8fHw7DQorICogLS0tIFtsYWJlbCA9ICIgVmFyaWFudCAjMiBBcHAga2VlcHMgdHJhY2sgb2YgdGhlIGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50IGZvciBub3RpZmljYXRpb25zICJdOw0KKyAqIEFQUCBub3RlIFBFRVIgW2xhYmVsID0gIiBUaGlzIHZhcmlhbnQgbWFrZXMgaXQgcG9zc2libGUgZm9yIEFQUCB0byBrbm93IHdoZW4gc3VjY2Vzc2Z1bCBxdWV1aW5nIG9mIG5vdGlmaWNhdGlvbnMgaXMgZ3VhcmFudGVlZC4gIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9jZmdfc2V0KEJMRV9DT05OX0NGR19HQVRUUywgZ2F0dHNfY29ubl9jZmcuaHZuX3R4X3F1ZXVlX3NpemU9MikiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9lbmFibGUoKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsID0gIkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQiXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9IDIiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWwgPSAiTm90aWZpY2F0aW9ucyBFbmFibGVkIGluIENDQ0QiXTsNCisgKiBTRCBub3RlIFNEIFtsYWJlbCA9ICJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChOT1RJRklDQVRJT04sIGFwcF92YWx1ZV8xKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQtLSJdOw0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ID09IDEiXSwgU0Qgbm90ZSBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogYXBwX3ZhbHVlXzEiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KE5PVElGSUNBVElPTiwgYXBwX3ZhbHVlXzIpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudC0tIl07DQorICogQVBQIG5vdGUgQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgPT0gMCJdLCBTRCBub3RlIFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBhcHBfdmFsdWVfMiJdOw0KKyAqIHx8fDsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb24ge2FwcF92YWx1ZV8xfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX0hWTl9UWF9DT01QTEVURSB7MX0iXTsNCisgKiBBUFAgYWJveCBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCArPSAxIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX2h2eChOT1RJRklDQVRJT04sIGFwcF92YWx1ZV8zKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQtLSJdOw0KKyAqIEFQUCBub3RlIEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50ID09IDAiXSwgU0Qgbm90ZSBTRCBbbGFiZWw9IlZhbHVlIGluIEFUVCBUYWJsZTogYXBwX3ZhbHVlXzMiXTsNCisgKiB8fHw7DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIHthcHBfdmFsdWVfMn0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUgezF9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgKz0gMSJdOw0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19odngoTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWVfNCkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIEFQUCBhYm94IEFQUCBbbGFiZWw9ImF2YWlsYWJsZV9xdWV1ZV9lbGVtZW50X2NvdW50LS0iXTsNCisgKiBBUFAgbm90ZSBBUFAgW2xhYmVsPSJhdmFpbGFibGVfcXVldWVfZWxlbWVudF9jb3VudCA9PSAwIl0sIFNEIG5vdGUgU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGFwcF92YWx1ZV80Il07DQorICogfHx8Ow0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB7YXBwX3ZhbHVlXzN9IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIHthcHBfdmFsdWVfNH0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBBUFA8PD1TRCBbbGFiZWwgPSAiQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUgezJ9Il07DQorICogQVBQIGFib3ggQVBQIFtsYWJlbD0iYXZhaWxhYmxlX3F1ZXVlX2VsZW1lbnRfY291bnQgKz0gMiJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfSFZYX0RJU0FCTEVEX01TQyBHQVRUUyBIYW5kbGUgVmFsdWUgSW5kaWNhdGlvbiBvciBOb3RpZmljYXRpb24gZGlzYWJsZWQNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJJbmRpY2F0aW9ucyBhbmQgTm90aWZpY2F0aW9ucyBEaXNhYmxlZCBpbiBDQ0NEIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KElORElDQVRJT04gb3IgTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUiXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQGVuZG1zYw0KKyAqDQorICogQGRlZmdyb3VwIEJMRV9HQVRUU19IVlhfU1lTX0FUVFJTX01JU1NJTkdfTVNDIEdBVFRTIEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uIG9yIE5vdGlmaWNhdGlvbiB3aXRoIFN5c3RlbSBBdHRyaWJ1dGVzIE1pc3NpbmcNCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJTeXN0ZW0gQXR0cmlidXRlcyBVbmluaXRpYWxpemVkIl07DQorICogfHx8Ow0KKyAqIFNEIHJib3ggU0QgW2xhYmVsPSJWYWx1ZSBpbiBBVFQgVGFibGU6IGN1cnJlbnRfdmFsdWUiXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfaHZ4KElORElDQVRJT04gb3IgTk9USUZJQ0FUSU9OLCBhcHBfdmFsdWUpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiQkxFX0VSUk9SX0dBVFRTX1NZU19BVFRSX01JU1NJTkciXTsNCisgKiBTRCByYm94IFNEIFtsYWJlbD0iVmFsdWUgaW4gQVRUIFRhYmxlOiBjdXJyZW50X3ZhbHVlIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiB8fHw7DQorICogLi4uOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfU0NfTVNDIEdBVFRTIFNlcnZpY2UgQ2hhbmdlZA0KKyAqIEBtc2MNCisgKiBoc2NhbGUgPSAiMS41IjsNCisgKiBBUFAsU0QsUEVFUjsNCisgKiB8fHw7DQorICogQVBQIHJib3ggU0QgW2xhYmVsPSJFbnRyaWVzIGFkZGVkIHRvIHRoZSBBVFQgVGFibGUgYmV0d2VlbiBoYW5kbGVzIE4gYW5kIE0iXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQgd2l0aCBhIEJvbmRlZCBQZWVyIl07DQorICogfHx8Ow0KKyAqIEFQUD0+U0QgW2xhYmVsID0gInNkX2JsZV9nYXR0c19zZXJ2aWNlX2NoYW5nZWQoTiwgTSkiXTsNCisgKiBBUFA8PFNEIFtsYWJlbCA9ICJOUkZfU1VDQ0VTUyJdOw0KKyAqIFNEOj5QRUVSIFtsYWJlbCA9ICJBVFQgSGFuZGxlIFZhbHVlIEluZGljYXRpb24ge04sIE19IiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogU0Q8OlBFRVIgW2xhYmVsID0gIkFUVCBIYW5kbGUgVmFsdWUgQ29uZmlybWF0aW9uIiwgdGV4dGNvbG9yPSIjMDAwMDgwIiwgbGluZWNvbG9yPSIjMDAwMDgwIl07DQorICogQVBQPDw9U0QgW2xhYmVsID0gIkJMRV9HQVRUU19FVlRfU0NfQ09ORklSTSJdOw0KKyAqIHx8fDsNCisgKiBTRCByYm94IFBFRVIgW2xhYmVsPSJTZXJ2aWNlIERpc2NvdmVyeSJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfU1lTX0FUVFJTX1VOS19QRUVSX01TQyBHQVRUUyBTeXN0ZW0gQXR0cmlidXRlcyBIYW5kbGluZzogVW5rbm93biBQZWVyDQorICogQG1zYw0KKyAqIGhzY2FsZSA9ICIxLjUiOw0KKyAqIEFQUCxTRCxQRUVSOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCB3aXRoIGFuIFVua25vd24gUGVlciJdOw0KKyAqIHx8fDsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVxdWVzdCB7c3lzX2F0dHJfaGFuZGxlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1NZU19BVFRSX01JU1NJTkciXTsNCisgKiBBUFA9PlNEIFtsYWJlbCA9ICJzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfc2V0KE5VTEwpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAiTlJGX1NVQ0NFU1MiXTsNCisgKiBTRDo+UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVzcG9uc2Uge3N5c19hdHRyX3ZhbHVlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEBlbmRtc2MNCisgKg0KKyAqIEBkZWZncm91cCBCTEVfR0FUVFNfU1lTX0FUVFJTX0JPTkRFRF9QRUVSX01TQyBHQVRUUyBTeXN0ZW0gQXR0cmlidXRlcyBIYW5kbGluZzogQm9uZGVkIFBlZXINCisgKiBAbXNjDQorICogaHNjYWxlID0gIjEuNSI7DQorICogQVBQLFNELFBFRVI7DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFBFRVIgW2xhYmVsPSJDb25uZWN0aW9uIEVzdGFibGlzaGVkIHdpdGggYSBCb25kZWQgUGVlciJdOw0KKyAqIHx8fDsNCisgKiBBUFAgcmJveCBQRUVSIFtsYWJlbD0iQVRUIFRyYWZmaWMiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gVGVybWluYXRlZCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FQX0VWVF9ESVNDT05ORUNURUQge3JlYXNvbn0iXTsNCisgKiB8fHw7DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3N5c19hdHRyX2dldCgpIl07DQorICogQVBQPDxTRCBbbGFiZWwgPSAie05SRl9TVUNDRVNTLCBzeXNfYXR0cl9kYXRhfSJdOw0KKyAqIEFQUCByYm94IEFQUCBbbGFiZWw9IlN0b3JlIFN5c3RlbSBBdHRyaWJ1dGVzIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFNEIFtsYWJlbD0iU2h1dCBkb3duIElDIl07DQorICogfHx8Ow0KKyAqIEFQUCByYm94IFNEIFtsYWJlbD0iUG93ZXIgdXAgSUMiXTsNCisgKiB8fHw7DQorICogQVBQIHJib3ggUEVFUiBbbGFiZWw9IkNvbm5lY3Rpb24gRXN0YWJsaXNoZWQgd2l0aCB0aGUgQm9uZGVkIFBlZXIiXTsNCisgKiBTRDw6UEVFUiBbbGFiZWwgPSAiQVRUIFJlYWQgUmVxdWVzdCB7c3lzX2F0dHJfaGFuZGxlfSIsIHRleHRjb2xvcj0iIzAwMDA4MCIsIGxpbmVjb2xvcj0iIzAwMDA4MCJdOw0KKyAqIEFQUDw8PVNEIFtsYWJlbCA9ICJCTEVfR0FUVFNfRVZUX1NZU19BVFRSX01JU1NJTkciXTsNCisgKiBBUFAgcmJveCBBUFAgW2xhYmVsPSJMb2FkIFN5c3RlbSBBdHRyaWJ1dGVzIl07DQorICogQVBQPT5TRCBbbGFiZWwgPSAic2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldChzeXNfYXR0cl9kYXRhKSJdOw0KKyAqIEFQUDw8U0QgW2xhYmVsID0gIk5SRl9TVUNDRVNTIl07DQorICogU0Q6PlBFRVIgW2xhYmVsID0gIkFUVCBSZWFkIFJlc3BvbnNlIHtzeXNfYXR0cl92YWx1ZX0iLCB0ZXh0Y29sb3I9IiMwMDAwODAiLCBsaW5lY29sb3I9IiMwMDAwODAiXTsNCisgKiBAZW5kbXNjDQorICogQH0NCisgKg0KKyAqIEBhZGR0b2dyb3VwIEJMRV9HQVRUU19RVUVVRURfV1JJVEVTX1VTRVJfTUVNIFVzZXIgbWVtb3J5IGxheW91dCBmb3IgUXVldWVkIFdyaXRlcw0KKyAqIEB7DQorICogIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIG1lbW9yeSBsYXlvdXQgdXNlZCBieSB0aGUgU29mdERldmljZSB0byBxdWV1ZSBhIFF1ZXVlZCBXcml0ZSBvcGVyYXRpb24gKFByZXBhcmUgV3JpdGUgQVRUIHBhY2tldCkgaW4gdXNlciBtZW1vcnk6DQorICoNCisgKiAgPHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPg0KKyAqICA8Y2FwdGlvbj5RdWV1ZWQgV3JpdGU8L2NhcHRpb24+DQorICogIDx0cj4NCisgKiAgPHRoIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+UGFyYW1ldGVyPC90aD4NCisgKiAgPHRoIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+U2l6ZSAob2N0ZXRzKTwvdGg+DQorICogIDx0aCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkRlc2NyaXB0aW9uPC90aD4NCisgKiAgPC90cj4NCisgKiAgPHRyPg0KKyAqICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5IYW5kbGU8L3RkPg0KKyAqICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij4yPC90ZD4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+QXR0cmlidXRlIEhhbmRsZTwvdGQ+DQorICogIDwvdHI+DQorICogIDx0cj4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+T2Zmc2V0PC90ZD4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+MjwvdGQ+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlZhbHVlIE9mZnNldDwvdGQ+DQorICogIDwvdHI+DQorICogIDx0cj4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+TGVuZ3RoPC90ZD4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+MjwvdGQ+DQorICogIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlZhbHVlIExlbmd0aDwvdGQ+DQorICogIDwvdHI+DQorICogIDx0cj4NCisgKiAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+VmFsdWU8L3RkPg0KKyAqICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5MZW5ndGg8L3RkPg0KKyAqICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5BdHRyaWJ1dGUgVmFsdWU8L3RkPg0KKyAqICA8L3RyPg0KKyAqICA8L3RhYmxlPg0KKyAqDQorICogIFRoZSBhcHBsaWNhdGlvbiBjYW4gcGFyc2UgdGhlIGFycmF5IG9mIFF1ZXVlZCBXcml0ZSBpbnN0YW5jZXMgYXQgYW55IHRpbWUsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBzbyB3aGVuZXZlciBhbiBFeGVjdXRlIFdyaXRlIEFUVCBwYWNrZXQNCisgKiAgaGFzIGJlZW4gcmVjZWl2ZWQgb3ZlciB0aGUgYWlyLiBTZWUgdGhlIEdBVFQgU2VydmVyIFF1ZXVlZCBXcml0ZXMgTVNDcyBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqICBUaGUgYXJyYXkgd2lsbCBiZSB0ZXJtaW5hdGVkIGJ5IGFuIFF1ZXVlZCBXcml0ZSBpbnN0YW5jZSB3aXRoIGl0cyBoYW5kbGUgc2V0IHRvIEByZWYgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQuDQorICogQH0NCisgKi8NCisNCisgLyoqDQorICAqIEBhZGR0b2dyb3VwIEJMRV9HQVRUU19TWVNfQVRUUlNfRk9STUFUIFVzZXIgbWVtb3J5IGxheW91dCBmb3IgU3lzdGVtIEF0dHJpYnV0ZXMNCisgICogQHsNCisgICogICBUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBtZW1vcnkgbGF5b3V0IHVzZWQgYnkgdGhlIFNvZnREZXZpY2UgdG8gc3RvcmUgYQ0KKyAgKiAgIHN5c3RlbSBhdHRyaWJ1dGUuDQorICAqDQorICAqICAgPHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPg0KKyAgKiAgIDxjYXB0aW9uPlN5c3RlbSBBdHRyaWJ1dGU8L2NhcHRpb24+DQorICAqICAgPHRyPg0KKyAgKiAgICAgPHRoIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+UGFyYW1ldGVyPC90aD4NCisgICogICAgIDx0aCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPlNpemUgKG9jdGV0cyk8L3RoPg0KKyAgKiAgICAgPHRoIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+RGVzY3JpcHRpb248L3RoPg0KKyAgKiAgIDwvdHI+DQorICAqICAgPHRyPg0KKyAgKiAgICAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+SGFuZGxlPC90ZD4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPjI8L3RkPg0KKyAgKiAgICAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+QXR0cmlidXRlIGhhbmRsZTwvdGQ+DQorICAqICAgPC90cj4NCisgICogICA8dHI+DQorICAqICAgICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5MZW5ndGg8L3RkPg0KKyAgKiAgICAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+MjwvdGQ+DQorICAqICAgICA8dGQgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgYmxhY2s7cGFkZGluZzo1cHg7Ij5BdHRyaWJ1dGUgbGVuZ3RoPC90ZD4NCisgICogICA8L3RyPg0KKyAgKiAgIDx0cj4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkRhdGE8L3RkPg0KKyAgKiAgICAgPHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6NXB4OyI+TGVuZ3RoPC90ZD4NCisgICogICAgIDx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjaztwYWRkaW5nOjVweDsiPkF0dHJpYnV0ZSBkYXRhPC90ZD4NCisgICogICA8L3RyPg0KKyAgKiAgIDwvdGFibGU+DQorICAqDQorICAqICBUaGUgYXBwbGljYXRpb24gY2FuIG9idGFpbiBhbiBhcnJheSBvZiBzeXN0ZW0gYXR0cmlidXRlcyBieSB1c2luZyBAYyBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfZ2V0KCkuDQorICAqICBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieSBhIENSQy0xNi1DQ0lUVCBjaGVja3N1bSBvZiB0aGUgZGF0YSBpbiB0aGUgYXJyYXkuDQorICAqIEB9DQorICAqIEB9DQorICAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfbGljZW5zZS1hZ3JlZW1lbnQucGRmIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL3MxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYV9saWNlbnNlLWFncmVlbWVudC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExYTczMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfbGljZW5zZS1hZ3JlZW1lbnQucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfbGljZW5zZS1hZ3JlZW1lbnQudHh0IGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvZG9jL3MxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYV9saWNlbnNlLWFncmVlbWVudC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNWIyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfbGljZW5zZS1hZ3JlZW1lbnQudHh0CkBAIC0wLDAgKzEsOTYgQEAKK1MxMTAvUzEyMC9TMTMwL1MxMzIvUzE0MCBsaWNlbnNlIGFncmVlbWVudCANCisNCisNCitOT1JESUMgU0VNSUNPTkRVQ1RPUiBBU0EgU09GVERFVklDRSBMSUNFTlNFIEFHUkVFTUVOVCANCisNCitMaWNlbnNlIEFncmVlbWVudCBmb3IgdGhlIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSAoIk5vcmRpYyIpIFMxMTAsIFMxMjAsIFMxMzAsIFMxMzIsIGFuZCBTMTQwIEJsdWV0b290aCBTb2Z0RGV2aWNlIHNvZnR3YXJlIHBhY2thZ2VzIA0KKygiU29mdERldmljZSIpLiANCisNCitZb3UgKCJZb3UiICJMaWNlbnNlZSIpIG11c3QgY2FyZWZ1bGx5IGFuZCB0aG9yb3VnaGx5IHJlYWQgdGhpcyBMaWNlbnNlIEFncmVlbWVudCAoIkFncmVlbWVudCIpLCBhbmQgYWNjZXB0IHRvIGFkaGVyZSB0byB0aGlzIEFncmVlbWVudCBiZWZvcmUgDQorZG93bmxvYWRpbmcsIGluc3RhbGxpbmcgYW5kL29yIHVzaW5nIGFueSBzb2Z0d2FyZSBvciBjb250ZW50IGluIHRoZSBTb2Z0RGV2aWNlIHByb3ZpZGVkIGhlcmV3aXRoLiANCisNCitZT1UgQUNDRVBUIFRISVMgTElDRU5TRSBBR1JFRU1FTlQgQlkgKEEpIENMSUNLSU5HIEFDQ0VQVCBPUiBBR1JFRSBUTyBUSElTIExJQ0VOU0UgQUdSRUVNRU5ULCBXSEVSRSBUSElTIA0KK09QVElPTiBJUyBNQURFIEFWQUlMQUJMRSBUTyBZT1U7IE9SIChCKSBCWSBBQ1RVQUxMWSBVU0lORyBUSEUgU09GVERFVklDRSwgSU4gVEhJUyBDQVNFIFlPVSBBR1JFRSBUSEFUIFRIRSBVU0UgT0YgDQorVEhFIFNPRlRERVZJQ0UgQ09OU1RJVFVURVMgQUNDRVBUQU5DRSBPRiBUSEUgTElDRU5TSU5HIEFHUkVFTUVOVCBGUk9NIFRIQVQgUE9JTlQgT05XQVJEUy4gDQorDQorSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQsIFRIRU4gRE8gTk9UIERPV05MT0FELCBJTlNUQUxML0NPTVBMRVRFIA0KK0lOU1RBTExBVElPTiBPRiwgT1IgSU4gQU5ZIE9USEVSIFdBWSBNQUtFIFVTRSBPRiBUSEUgU09GVERFVklDRS4gDQorDQorMS4gR3JhbnQgb2YgTGljZW5zZSANCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbiB0aGlzIEFncmVlbWVudCBOb3JkaWMgZ3JhbnRzIExpY2Vuc2VlIGEgbGltaXRlZCwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgbm9uLXN1YiBsaWNlbnNhYmxlLCByZXZvY2FibGUgbGljZW5zZSANCisoIkxpY2Vuc2UiKTogKGEpIHRvIHVzZSB0aGUgU29mdERldmljZSBzb2xlbHkgaW4gY29ubmVjdGlvbiB3aXRoIGEgTm9yZGljIGludGVncmF0ZWQgY2lyY3VpdCwgYW5kIChiKSB0byBkaXN0cmlidXRlIHRoZSBTb2Z0RGV2aWNlIHNvbGVseSBhcyBpbnRlZ3JhdGVkIA0KK2luIExpY2Vuc2VlIFByb2R1Y3QuIExpY2Vuc2VlIHNoYWxsIG5vdCB1c2UgdGhlIFNvZnREZXZpY2UgZm9yIGFueSBwdXJwb3NlIG90aGVyIHRoYW4gc3BlY2lmaWNhbGx5IGF1dGhvcml6ZWQgaGVyZWluLiBJdCBpcyBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIA0KK2FncmVlbWVudCB0byB1c2Ugb3IgbW9kaWZ5IHRoZSBTb2Z0RGV2aWNlIGZvciB1c2Ugb24gYW55IHdpcmVsZXNzIGNvbm5lY3Rpdml0eSBpbnRlZ3JhdGVkIGNpcmN1aXQgb3RoZXIgdGhhbiBhIE5vcmRpYyBpbnRlZ3JhdGVkIGNpcmN1aXQuIA0KKw0KKzIuIFRpdGxlIA0KK05vcmRpYyByZXRhaW5zIGZ1bGwgcmlnaHRzLCB0aXRsZSwgYW5kIG93bmVyc2hpcCB0byB0aGUgU29mdERldmljZSBhbmQgYW55IGFuZCBhbGwgcGF0ZW50cywgY29weXJpZ2h0cywgdHJhZGUgc2VjcmV0cywgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIGFuZCANCitvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIGFuZCB0byB0aGUgU29mdERldmljZS4gDQorDQorMy4gTm8gTW9kaWZpY2F0aW9ucyBvciBSZXZlcnNlIEVuZ2luZWVyaW5nIA0KK0xpY2Vuc2VlIHNoYWxsIG5vdCwgbW9kaWZ5LCByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSwgZGVjb21waWxlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGRpc2NvdmVyIHRoZSBzb3VyY2UgY29kZSBvZiBhbnkgbm9uLXNvdXJjZSBjb2RlIA0KK3BhcnRzIG9mIHRoZSBTb2Z0RGV2aWNlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHByZS1jb21waWxlZCBoZXggZmlsZXMsIGJpbmFyaWVzIGFuZCBvYmplY3QgY29kZS4gDQorDQorNC4gRGlzdHJpYnV0aW9uIFJlc3RyaWN0aW9ucyANCitFeGNlcHQgYXMgc2V0IGZvcndhcmQgaW4gU2VjdGlvbiAxIGFib3ZlLCB0aGUgTGljZW5zZWUgbWF5IG5vdCBkaXNjbG9zZSBvciBkaXN0cmlidXRlIGFueSBvciBhbGwgcGFydHMgb2YgdGhlIFNvZnREZXZpY2UgdG8gYW55IHRoaXJkIHBhcnR5LiANCitMaWNlbnNlZSBhZ3JlZXMgdG8gcHJvdmlkZSByZWFzb25hYmxlIHNlY3VyaXR5IHByZWNhdXRpb25zIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGFjY2VzcyB0byBvciB1c2Ugb2YgdGhlIFNvZnREZXZpY2UgYXMgcHJvc2NyaWJlZCBoZXJlaW4uIA0KK0xpY2Vuc2VlIGFsc28gYWdyZWVzIHRoYXQgdXNlIG9mIGFuZCBhY2Nlc3MgdG8gdGhlIFNvZnREZXZpY2Ugd2lsbCBiZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoZSBlbXBsb3llZXMgYW5kIHN1YmNvbnRyYWN0b3JzIG9mIHRoZSBMaWNlbnNlZSANCituZWNlc3NhcnkgZm9yIHRoZSBwZXJmb3JtYW5jZSBvZiBkZXZlbG9wbWVudCwgdmVyaWZpY2F0aW9uIGFuZCBwcm9kdWN0aW9uIHRhc2tzIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBUaGUgTGljZW5zZWUgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyANCitzdWNoIGVtcGxveWVlcyBhbmQgc3ViY29udHJhY3RvcnMgY29tcGx5IHdpdGggdGhlIG9ibGlnYXRpb25zIGNvbmNlcm5pbmcgdXNlIGFuZCBub24tZGlzY2xvc3VyZSBvZiB0aGUgU29mdERldmljZS4gDQorDQorNS4gTm8gT3RoZXIgUmlnaHRzIA0KK0xpY2Vuc2VlIHNoYWxsIHVzZSB0aGUgU29mdERldmljZSBvbmx5IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgcmVmcmFpbiBmcm9tIHVzaW5nIHRoZSBTb2Z0RGV2aWNlIGluIGFueSB3YXkgdGhhdCBtYXkgYmUgDQorY29udHJhcnkgdG8gdGhpcyBBZ3JlZW1lbnQuIA0KKw0KKzYuIEZlZXMgDQorTm9yZGljIGdyYW50cyB0aGUgTGljZW5zZSB0byB0aGUgTGljZW5zZWUgZnJlZSBvZiBjaGFyZ2UgcHJvdmlkZWQgdGhhdCB0aGUgTGljZW5zZWUgdW5kZXJ0YWtlcyB0aGUgb2JsaWdhdGlvbnMgaW4gdGhlIEFncmVlbWVudCBhbmQgd2FycmFudHMgdG8gDQorY29tcGx5IHdpdGggdGhlIEFncmVlbWVudC4gDQorDQorNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSANCitUSEUgU09GVERFVklDRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgRVhQUkVTUyBPUiBJTVBMSUVEIEFORCBORUlUSEVSIE5PUkRJQywgSVRTIA0KK0xJQ0VOU09SUyBPUiBBRkZJTElBVEVTIE5PUiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBBTlkgUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgDQorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgDQorVEhBVCBUSEUgU09GVERFVklDRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuIFRIRVJFIA0KK0lTIE5PIFdBUlJBTlRZIEJZIE5PUkRJQyBPUiBCWSBBTlkgT1RIRVIgUEFSVFkgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgU09GVERFVklDRSBXSUxMIE1FRVQgVEhFIA0KK1JFUVVJUkVNRU5UUyBPRiBMSUNFTlNFRSBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRERVZJQ0UgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUuIA0KK0xJQ0VOU0VFIEFTU1VNRVMgQUxMIFJFU1BPTlNJQklMSVRZIEFORCBSSVNLIEZPUiBUSEUgU0VMRUNUSU9OIE9GIFRIRSBTT0ZUREVWSUNFIFRPIEFDSElFVkUgTElDRU5TRUWSUyANCitJTlRFTkRFRCBSRVNVTFRTIEFORCBGT1IgVEhFIElOU1RBTExBVElPTiwgVVNFIEFORCBSRVNVTFRTIE9CVEFJTkVEIEZST00gSVQuIA0KKw0KKwwNCis4LiBObyBTdXBwb3J0IA0KK05vcmRpYyBpcyBub3Qgb2JsaWdhdGVkIHRvIGZ1cm5pc2ggb3IgbWFrZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24sIHNvZnR3YXJlLCB0ZWNobmljYWwgaW5mb3JtYXRpb24sIGtub3ctaG93LCBzaG93LWhvdywgDQorYnVnLWZpeGVzIG9yIHN1cHBvcnQuIE5vcmRpYyByZXNlcnZlcyB0aGUgcmlnaHQgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSBTb2Z0RGV2aWNlIHdpdGhvdXQgZnVydGhlciBub3RpY2UuIA0KKw0KKzkuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IA0KK0luIG5vIGV2ZW50IHNoYWxsIE5vcmRpYywgaXRzIGVtcGxveWVlcyBvciBzdXBwbGllcnMsIGxpY2Vuc29ycyBvciBhZmZpbGlhdGVzIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcHJvZml0cywgcmV2ZW51ZSwgc2FsZXMsIGRhdGEgb3IgY29zdHMgb2YgDQorcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlcywgcHJvcGVydHkgZGFtYWdlLCBwZXJzb25hbCBpbmp1cnksIGludGVycnVwdGlvbiBvZiBidXNpbmVzcywgbG9zcyBvZiBidXNpbmVzcyBpbmZvcm1hdGlvbiBvciBmb3IgYW55IA0KK3NwZWNpYWwsIGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIGVjb25vbWljLCBwdW5pdGl2ZSwgc3BlY2lhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGhvd2V2ZXIgY2F1c2VkIGFuZCB3aGV0aGVyIGFyaXNpbmcgdW5kZXIgY29udHJhY3QsIA0KK3RvcnQsIG5lZ2xpZ2VuY2UsIG9yIG90aGVyIHRoZW9yeSBvZiBsaWFiaWxpdHkgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvZiBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBTb2Z0RGV2aWNlLCBldmVuIGlmIE5vcmRpYyBvciBpdHMgZW1wbG95ZWVzIG9yIHN1cHBsaWVycywgDQorbGljZW5zb3JzIG9yIGFmZmlsaWF0ZXMgYXJlIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gQmVjYXVzZSBzb21lIGNvdW50cmllcy9zdGF0ZXMvanVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciANCitsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSwgYnV0IG1heSBhbGxvdyBsaWFiaWxpdHkgdG8gYmUgbGltaXRlZCwgaW4gc3VjaCBjYXNlcywgTm9yZGljLCBpdHMgZW1wbG95ZWVzIG9yIGxpY2Vuc29ycyBvciBhZmZpbGlhdGVzkiBsaWFiaWxpdHkgc2hhbGwgYmUgbGltaXRlZCB0byANCitVU0QgNTAuIA0KKw0KKzEwLiBCcmVhY2ggb2YgQ29udHJhY3QgDQorVXBvbiBhIGJyZWFjaCBvZiBjb250cmFjdCBieSB0aGUgTGljZW5zZWUsIE5vcmRpYyBhbmQgaXRzIGxpY2Vuc29yIGFyZSBlbnRpdGxlZCB0byBkYW1hZ2VzIGluIHJlc3BlY3Qgb2YgYW55IGRpcmVjdCBsb3NzIHdoaWNoIGNhbiBiZSByZWFzb25hYmx5IA0KK2F0dHJpYnV0ZWQgdG8gdGhlIGJyZWFjaCBieSB0aGUgTGljZW5zZWUuIElmIHRoZSBMaWNlbnNlZSBoYXMgYWN0ZWQgd2l0aCBncm9zcyBuZWdsaWdlbmNlIG9yIHdpbGxmdWwgbWlzY29uZHVjdCwgdGhlIExpY2Vuc2VlIHNoYWxsIGNvdmVyIGJvdGggDQorZGlyZWN0IGFuZCBpbmRpcmVjdCBjb3N0cyBmb3IgTm9yZGljIGFuZCBpdHMgbGljZW5zb3JzLiANCisNCisxMS4gSW5kZW1uaXR5IA0KK0xpY2Vuc2VlIHVuZGVydGFrZXMgdG8gaW5kZW1uaWZ5LCBob2xkIGhhcm1sZXNzIGFuZCBkZWZlbmQgTm9yZGljIGFuZCBpdHMgZGlyZWN0b3JzLCBvZmZpY2VycywgYWZmaWxpYXRlcywgc2hhcmVob2xkZXJzLCBsaWNlbnNvcnMsIGVtcGxveWVlcyBhbmQgDQorYWdlbnRzIGZyb20gYW5kIGFnYWluc3QgYW55IGNsYWltcyBvciBsYXdzdWl0cywgaW5jbHVkaW5nIGF0dG9ybmV5J3MgZmVlcywgdGhhdCBhcmlzZSBvciByZXN1bHQgb2YgdGhlIExpY2Vuc2VlknMgZXhlY3V0aW9uIG9mIHRoZSBMaWNlbnNlIGFuZCB3aGljaCANCitpcyBub3QgZHVlIHRvIGNhdXNlcyBmb3Igd2hpY2ggTm9yZGljIGlzIHJlc3BvbnNpYmxlLiANCisNCisxMi4gR292ZXJuaW5nIExhdyANCitUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWNjb3JkaW5nIHRvIHRoZSBsYXdzIG9mIE5vcndheSwgYW5kIGhlcmVieSBzdWJtaXRzIHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBPc2xvIHRpbmdyZXR0LiANCisNCisxMy4gQXNzaWdubWVudCANCitMaWNlbnNlZSBzaGFsbCBub3QgYXNzaWduIHRoaXMgQWdyZWVtZW50IG9yIGFueSByaWdodHMgb3Igb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBOb3JkaWMuIA0KKw0KKzE0LiBUZXJtaW5hdGlvbiANCitXaXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHRzLCBOb3JkaWMgbWF5IGNhbmNlbCB0aGlzIEFncmVlbWVudCBpZiBMaWNlbnNlZSBkb2VzIG5vdCBhYmlkZSBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyANCitBZ3JlZW1lbnQuIFVwb24gdGVybWluYXRpb24gTGljZW5zZWUgbXVzdCBwcm9tcHRseSBjZWFzZSB0aGUgdXNlIG9mIHRoZSBMaWNlbnNlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgYW5kIGFueSANCitvdGhlciBtYXRlcmlhbCBwcm92aWRlZCBieSBOb3JkaWMgb3IgaXRzIGFmZmlsaWF0ZSwgb3IgcHJvZHVjZWQgYnkgdGhlIExpY2Vuc2VlIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgQWdyZWVtZW50IG9yIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5LiANCisNCisxNS4gVGhpcmQgcGFydHkgYmVuZWZpY2lhcmllcyANCitOb3JkaWOScyBsaWNlbnNvcnMgYXJlIGludGVuZGVkIHRoaXJkIHBhcnR5IGJlbmVmaWNpYXJpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuIA0KKw0KKwwNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX3JlYWRtZS50eHQgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0N2JlMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfcmVhZG1lLnR4dApAQCAtMCwwICsxLDEwIEBACitzMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGENCisNCitUaGlzIHJlbGVhc2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoNCisNCistIFRoaXMgcmVhZG1lIGZpbGUKKy0gVGhlIHMxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYSBBUEkgKFNvZnREZXZpY2UgaGVhZGVyIGZpbGVzKQ0KKy0gVGhlIHMxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYSBsaWNlbnNlIGFncmVlbWVudAorLSBUaGUgczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhIHJlbGVhc2Ugbm90ZXMNCistIFRoZSBzMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGEgU29mdERldmljZSAoYmluYXJ5IGhleCBmaWxlKQ0KKy0gVGhlIHMxNDBfbnJmNTI4NDBfNS4wLjAtMi5hbHBoYSBNaWdyYXRpb24gRG9jdW1lbnQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2RvYy9zMTQwX25yZjUyODQwXzUuMC4wLTIuYWxwaGFfcmVsZWFzZS1ub3Rlcy11cGRhdGUtMS5wZGYgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX3JlbGVhc2Utbm90ZXMtdXBkYXRlLTEucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmNlYjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9kb2MvczE0MF9ucmY1Mjg0MF81LjAuMC0yLmFscGhhX3JlbGVhc2Utbm90ZXMtdXBkYXRlLTEucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTE4OTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZS5oCkBAIC0wLDAgKzEsNjE1IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTiBCTEUgU29mdERldmljZSBDb21tb24NCisgIEB7DQorICBAZGVmZ3JvdXAgYmxlX2FwaSBFdmVudHMsIHR5cGUgZGVmaW5pdGlvbnMgYW5kIEFQSSBjYWxscw0KKyAgQHsNCisNCisgIEBicmllZiBNb2R1bGUgaW5kZXBlbmRlbnQgZXZlbnRzLCB0eXBlIGRlZmluaXRpb25zIGFuZCBBUEkgY2FsbHMgZm9yIHRoZSBCTEUgU29mdERldmljZS4NCisNCisgKi8NCisNCisjaWZuZGVmIEJMRV9IX18NCisjZGVmaW5lIEJMRV9IX18NCisNCisjaW5jbHVkZSAiYmxlX3Jhbmdlcy5oIg0KKyNpbmNsdWRlICJibGVfdHlwZXMuaCINCisjaW5jbHVkZSAiYmxlX2dhcC5oIg0KKyNpbmNsdWRlICJibGVfbDJjYXAuaCINCisjaW5jbHVkZSAiYmxlX2dhdHQuaCINCisjaW5jbHVkZSAiYmxlX2dhdHRjLmgiDQorI2luY2x1ZGUgImJsZV9nYXR0cy5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKiBAYWRkdG9ncm91cCBCTEVfQ09NTU9OX0VOVU1FUkFUSU9OUyBFbnVtZXJhdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb21tb24gQVBJIFNWQyBudW1iZXJzLg0KKyAqLw0KK2VudW0gQkxFX0NPTU1PTl9TVkNTDQorew0KKyAgU0RfQkxFX0VOQUJMRSA9IEJMRV9TVkNfQkFTRSwgICAgICAgICAvKio8IEVuYWJsZSBhbmQgaW5pdGlhbGl6ZSB0aGUgQkxFIHN0YWNrICovDQorICBTRF9CTEVfRVZUX0dFVCwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2V0IGFuIGV2ZW50IGZyb20gdGhlIHBlbmRpbmcgZXZlbnRzIHF1ZXVlLiAqLw0KKyAgU0RfQkxFX1VVSURfVlNfQURELCAgICAgICAgICAgICAgICAgICAvKio8IEFkZCBhIFZlbmRvciBTcGVjaWZpYyBVVUlELiAqLw0KKyAgU0RfQkxFX1VVSURfREVDT0RFLCAgICAgICAgICAgICAgICAgICAvKio8IERlY29kZSBVVUlEIGJ5dGVzLiAqLw0KKyAgU0RfQkxFX1VVSURfRU5DT0RFLCAgICAgICAgICAgICAgICAgICAvKio8IEVuY29kZSBVVUlEIGJ5dGVzLiAqLw0KKyAgU0RfQkxFX1ZFUlNJT05fR0VULCAgICAgICAgICAgICAgICAgICAvKio8IEdldCB0aGUgbG9jYWwgdmVyc2lvbiBpbmZvcm1hdGlvbiAoY29tcGFueSBJRCwgTGluayBMYXllciBWZXJzaW9uLCBMaW5rIExheWVyIFN1YnZlcnNpb24pLiAqLw0KKyAgU0RfQkxFX1VTRVJfTUVNX1JFUExZLCAgICAgICAgICAgICAgICAvKio8IFVzZXIgTWVtb3J5IFJlcGx5LiAqLw0KKyAgU0RfQkxFX09QVF9TRVQsICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBhIEJMRSBvcHRpb24uICovDQorICBTRF9CTEVfT1BUX0dFVCwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2V0IGEgQkxFIG9wdGlvbi4gKi8NCisgIFNEX0JMRV9DRkdfU0VULCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBZGQgYSBjb25maWd1cmF0aW9uIHRvIHRoZSBCTEUgc3RhY2suICovDQorfTsNCisNCisvKioNCisgKiBAYnJpZWYgQkxFIE1vZHVsZSBJbmRlcGVuZGVudCBFdmVudCBJRHMuDQorICovDQorZW51bSBCTEVfQ09NTU9OX0VWVFMNCit7DQorICBCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1QgPSBCTEVfRVZUX0JBU0UsICAgLyoqPCBVc2VyIE1lbW9yeSByZXF1ZXN0LiBAcmVmIGJsZV9ldnRfdXNlcl9tZW1fcmVxdWVzdF90ICovDQorICBCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0UsICAgICAgICAgICAgICAgICAgLyoqPCBVc2VyIE1lbW9yeSByZWxlYXNlLiBAcmVmIGJsZV9ldnRfdXNlcl9tZW1fcmVsZWFzZV90ICovDQorfTsNCisNCisvKipAYnJpZWYgQkxFIENvbm5lY3Rpb24gQ29uZmlndXJhdGlvbiBJRHMuDQorICoNCisgKiBJRHMgdGhhdCB1bmlxdWVseSBpZGVudGlmeSBhIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4NCisgKi8NCitlbnVtIEJMRV9DT05OX0NGR1MNCit7DQorICAgIEJMRV9DT05OX0NGR19HQVAgPSBCTEVfQ09OTl9DRkdfQkFTRSwgIC8qKjwgQkxFIEdBUCBzcGVjaWZpYyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uICovDQorICAgIEJMRV9DT05OX0NGR19HQVRUQywgICAgICAgICAgICAgICAgICAgIC8qKjwgQkxFIEdBVFRDIHNwZWNpZmljIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4gKi8NCisgICAgQkxFX0NPTk5fQ0ZHX0dBVFRTLCAgICAgICAgICAgICAgICAgICAgLyoqPCBCTEUgR0FUVFMgc3BlY2lmaWMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLiAqLw0KKyAgICBCTEVfQ09OTl9DRkdfR0FUVCwgICAgICAgICAgICAgICAgICAgICAvKio8IEJMRSBHQVRUIHNwZWNpZmljIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4gKi8NCit9Ow0KKw0KKy8qKkBicmllZiBCTEUgQ29tbW9uIENvbmZpZ3VyYXRpb24gSURzLg0KKyAqDQorICogSURzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBjb21tb24gY29uZmlndXJhdGlvbi4NCisgKi8NCitlbnVtIEJMRV9DT01NT05fQ0ZHUw0KK3sNCisgIEJMRV9DT01NT05fQ0ZHX1ZTX1VVSUQgPSBCTEVfQ0ZHX0JBU0UsIC8qKjwgVmVuZG9yIHNwZWNpZmljIFVVSUQgY29uZmlndXJhdGlvbiAqLw0KK307DQorDQorLyoqQGJyaWVmIENvbW1vbiBPcHRpb24gSURzLg0KKyAqIElEcyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29tbW9uIG9wdGlvbi4NCisgKi8NCitlbnVtIEJMRV9DT01NT05fT1BUUw0KK3sNCisgIEJMRV9DT01NT05fT1BUX1BBX0xOQSA9IEJMRV9PUFRfQkFTRSwgICAgICAvKio8IFBBIGFuZCBMTkEgb3B0aW9ucyAqLw0KKyAgQkxFX0NPTU1PTl9PUFRfQ09OTl9FVlRfRVhULCAgICAgICAgICAgICAgIC8qKjwgRXh0ZW5kZWQgY29ubmVjdGlvbiBldmVudHMgb3B0aW9uICovDQorfTsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTl9ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKw0KKy8qKiBAYnJpZWYgIFJlcXVpcmVkIHBvaW50ZXIgYWxpZ25tZW50IGZvciBCTEUgRXZlbnRzLg0KKyovDQorI2RlZmluZSBCTEVfRVZUX1BUUl9BTElHTk1FTlQgICAgNA0KKw0KKy8qKiBAYnJpZWYgIExlYXZlcyB0aGUgbWF4aW11bSBvZiB0aGUgdHdvIGFyZ3VtZW50cy4NCisqLw0KKyNkZWZpbmUgQkxFX01BWChhLCBiKSAoKGEpIDwgKGIpID8gKGIpIDogKGEpKQ0KKw0KKy8qKiBAYnJpZWYgIE1heGltdW0gcG9zc2libGUgbGVuZ3RoIGZvciBCTEUgRXZlbnRzLg0KKyAqIEBub3RlIFRoZSBoaWdoZXN0IHZhbHVlIHVzZWQgZm9yIEByZWYgYmxlX2dhdHRfY29ubl9jZmdfdDo6YXR0X210dSBpbiBhbnkgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHNoYWxsIGJlIHVzZWQgYXMgYSBwYXJhbWV0ZXIuDQorICogSWYgdGhhdCB2YWx1ZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBmb3IgYW55IGNvbm5lY3Rpb25zIHRoZW4gQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQgbXVzdCBiZSB1c2VkIGluc3RlYWQuDQorKi8NCisjZGVmaW5lIEJMRV9FVlRfTEVOX01BWChBVFRfTVRVKSAoQkxFX01BWCggXA0KKyAgc2l6ZW9mKGJsZV9ldnRfdCksIFwNCisgIEJMRV9NQVgoIFwNCisgICAgb2Zmc2V0b2YoYmxlX2V2dF90LCBldnQuZ2F0dGNfZXZ0LnBhcmFtcy5yZWxfZGlzY19yc3AuaW5jbHVkZXMpICsgKChBVFRfTVRVKSAtIDIpIC8gNiAqIHNpemVvZihibGVfZ2F0dGNfaW5jbHVkZV90KSwgXA0KKyAgICBvZmZzZXRvZihibGVfZXZ0X3QsIGV2dC5nYXR0Y19ldnQucGFyYW1zLmF0dHJfaW5mb19kaXNjX3JzcC5pbmZvLmF0dHJfaW5mbzE2KSArICgoQVRUX01UVSkgLSAyKSAvIDQgKiBzaXplb2YoYmxlX2dhdHRjX2F0dHJfaW5mbzE2X3QpIFwNCisgICkgXA0KKykpDQorDQorLyoqIEBkZWZncm91cCBCTEVfVVNFUl9NRU1fVFlQRVMgVXNlciBNZW1vcnkgVHlwZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX1VTRVJfTUVNX1RZUEVfSU5WQUxJRCAgICAgICAgICAgICAgIDB4MDAgIC8qKjwgSW52YWxpZCBVc2VyIE1lbW9yeSBUeXBlcy4gKi8NCisjZGVmaW5lIEJMRV9VU0VSX01FTV9UWVBFX0dBVFRTX1FVRVVFRF9XUklURVMgICAweDAxICAvKio8IFVzZXIgTWVtb3J5IGZvciBHQVRUUyBxdWV1ZWQgd3JpdGVzLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX1VVSURfVlNfQ09VTlRTIFZlbmRvciBTcGVjaWZpYyBVVUlEIGNvdW50cw0KKyAqIEB7DQorICovDQorI2RlZmluZSBCTEVfVVVJRF9WU19DT1VOVF9ERUZBVUxUIDEwICAvKio8IERlZmF1bHQgVlMgVVVJRCBjb3VudC4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX1ZTX0NPVU5UX01BWCAgICAgMjU0IC8qKjwgTWF4aW11bSBWUyBVVUlEIGNvdW50LiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0NPTU1PTl9DRkdfREVGQVVMVFMgQ29uZmlndXJhdGlvbiBkZWZhdWx0cy4NCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQkxFX0NPTk5fQ0ZHX1RBR19ERUZBVUxUICAwICAgIC8qKjwgRGVmYXVsdCBjb25maWd1cmF0aW9uIHRhZywgU29mdERldmljZSBkZWZhdWx0IGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTl9TVFJVQ1RVUkVTIFN0cnVjdHVyZXMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBVc2VyIE1lbW9yeSBCbG9jay4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgKnBfbWVtOyAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHVzZXIgbWVtb3J5IGJsb2NrLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgbGVuOyAgICAgICAgLyoqPCBMZW5ndGggaW4gYnl0ZXMgb2YgdGhlIHVzZXIgbWVtb3J5IGJsb2NrLiAqLw0KK30gYmxlX3VzZXJfbWVtX2Jsb2NrX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1QuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgIC8qKjwgVXNlciBtZW1vcnkgdHlwZSwgc2VlIEByZWYgQkxFX1VTRVJfTUVNX1RZUEVTLiAqLw0KK30gYmxlX2V2dF91c2VyX21lbV9yZXF1ZXN0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfRVZUX1VTRVJfTUVNX1JFTEVBU0UuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgLyoqPCBVc2VyIG1lbW9yeSB0eXBlLCBzZWUgQHJlZiBCTEVfVVNFUl9NRU1fVFlQRVMuICovDQorICBibGVfdXNlcl9tZW1fYmxvY2tfdCAgICAgICAgbWVtX2Jsb2NrOyAgLyoqPCBVc2VyIG1lbW9yeSBibG9jayAqLw0KK30gYmxlX2V2dF91c2VyX21lbV9yZWxlYXNlX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgZXZlbnRzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBmdW5jdGlvbiBtb2R1bGUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCBjb25uX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gSGFuZGxlIG9uIHdoaWNoIHRoaXMgZXZlbnQgb2NjdXJyZWQuICovDQorICB1bmlvbg0KKyAgew0KKyAgICBibGVfZXZ0X3VzZXJfbWVtX3JlcXVlc3RfdCAgICAgIHVzZXJfbWVtX3JlcXVlc3Q7ICAgIC8qKjwgVXNlciBNZW1vcnkgUmVxdWVzdCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZXZ0X3VzZXJfbWVtX3JlbGVhc2VfdCAgICAgIHVzZXJfbWVtX3JlbGVhc2U7ICAgIC8qKjwgVXNlciBNZW1vcnkgUmVsZWFzZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgfSBwYXJhbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgcGFyYW1ldGVyIHVuaW9uLiAqLw0KK30gYmxlX2NvbW1vbl9ldnRfdDsNCisNCisvKipAYnJpZWYgQkxFIEV2ZW50IGhlYWRlci4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IGV2dF9pZDsgICAgICAgICAgICAgICAgLyoqPCBWYWx1ZSBmcm9tIGEgQkxFXzxtb2R1bGU+X0VWVCBzZXJpZXMuICovDQorICB1aW50MTZfdCBldnRfbGVuOyAgICAgICAgICAgICAgIC8qKjwgTGVuZ3RoIGluIG9jdGV0cyBpbmNsdWRpbmcgdGhpcyBoZWFkZXIuICovDQorfSBibGVfZXZ0X2hkcl90Ow0KKw0KKy8qKkBicmllZiBDb21tb24gQkxFIEV2ZW50IHR5cGUsIHdyYXBwaW5nIHRoZSBtb2R1bGUgc3BlY2lmaWMgZXZlbnQgcmVwb3J0cy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9ldnRfaGRyX3QgaGVhZGVyOyAgICAgICAgICAgLyoqPCBFdmVudCBoZWFkZXIuICovDQorICB1bmlvbg0KKyAgew0KKyAgICBibGVfY29tbW9uX2V2dF90ICBjb21tb25fZXZ0OyAvKio8IENvbW1vbiBFdmVudCwgZXZ0X2lkIGluIEJMRV9FVlRfKiBzZXJpZXMuICovDQorICAgIGJsZV9nYXBfZXZ0X3QgICAgIGdhcF9ldnQ7ICAgIC8qKjwgR0FQIG9yaWdpbmF0ZWQgZXZlbnQsIGV2dF9pZCBpbiBCTEVfR0FQX0VWVF8qIHNlcmllcy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF90ICAgZ2F0dGNfZXZ0OyAgLyoqPCBHQVRUIGNsaWVudCBvcmlnaW5hdGVkIGV2ZW50LCBldnRfaWQgaW4gQkxFX0dBVFRDX0VWVCogc2VyaWVzLiAqLw0KKyAgICBibGVfZ2F0dHNfZXZ0X3QgICBnYXR0c19ldnQ7ICAvKio8IEdBVFQgc2VydmVyIG9yaWdpbmF0ZWQgZXZlbnQsIGV2dF9pZCBpbiBCTEVfR0FUVFNfRVZUKiBzZXJpZXMuICovDQorICB9IGV2dDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgdW5pb24uICovDQorfSBibGVfZXZ0X3Q7DQorDQorDQorLyoqDQorICogQGJyaWVmIFZlcnNpb24gSW5mb3JtYXRpb24uDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgdmVyc2lvbl9udW1iZXI7ICAgIC8qKjwgTGluayBMYXllciBWZXJzaW9uIG51bWJlciBmb3IgQlQgNC4xIHNwZWMgaXMgNyAoaHR0cHM6Ly93d3cuYmx1ZXRvb3RoLm9yZy9lbi11cy9zcGVjaWZpY2F0aW9uL2Fzc2lnbmVkLW51bWJlcnMvbGluay1sYXllcikuICovDQorICB1aW50MTZfdCAgY29tcGFueV9pZDsgICAgICAgIC8qKjwgQ29tcGFueSBJRCwgTm9yZGljIFNlbWljb25kdWN0b3IncyBjb21wYW55IElEIGlzIDg5ICgweDAwNTkpIChodHRwczovL3d3dy5ibHVldG9vdGgub3JnL2FwcHMvY29udGVudC9EZWZhdWx0LmFzcHg/ZG9jX2lkPTQ5NzA4KS4gKi8NCisgIHVpbnQxNl90ICBzdWJ2ZXJzaW9uX251bWJlcjsgLyoqPCBMaW5rIExheWVyIFN1YiBWZXJzaW9uIG51bWJlciwgY29ycmVzcG9uZHMgdG8gdGhlIFNvZnREZXZpY2UgQ29uZmlnIElEIG9yIEZpcm13YXJlIElEIChGV0lEKS4gKi8NCit9IGJsZV92ZXJzaW9uX3Q7DQorDQorLyoqDQorICogQGJyaWVmIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIFBBIGFuZCBMTkEuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgICB1aW50OF90IGVuYWJsZSA6MTsgICAgICAvKio8IEVuYWJsZSB0b2dnbGluZyBmb3IgdGhpcyBhbXBsaWZpZXIgKi8NCisgICAgIHVpbnQ4X3QgYWN0aXZlX2hpZ2ggOjE7IC8qKjwgU2V0IHRoZSBwaW4gdG8gYmUgYWN0aXZlIGhpZ2ggKi8NCisgICAgIHVpbnQ4X3QgZ3Bpb19waW4gOjY7ICAgIC8qKjwgVGhlIEdQSU8gcGluIHRvIHRvZ2dsZSBmb3IgdGhpcyBhbXBsaWZpZXIgKi8NCit9IGJsZV9wYV9sbmFfY2ZnX3Q7DQorDQorLyoqDQorICogQGJyaWVmIFBBICYgTE5BIEdQSU8gdG9nZ2xlIGNvbmZpZ3VyYXRpb24NCisgKg0KKyAqIFRoaXMgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFNvZnREZXZpY2UgdG8gdG9nZ2xlIHBpbnMgd2hlbiB0aGUgcmFkaW8gaXMgYWN0aXZlIGZvciB1c2Ugd2l0aCBhIHBvd2VyIGFtcGxpZmllciBhbmQvb3INCisgKiBhIGxvdyBub2lzZSBhbXBsaWZpZXIuDQorICoNCisgKiBUb2dnbGluZyB0aGUgcGlucyBpcyBhY2hpZXZlZCBieSB1c2luZyB0d28gUFBJIGNoYW5uZWxzIGFuZCBhIEdQSU9URSBjaGFubmVsLiBUaGUgaGFyZHdhcmUgY2hhbm5lbCBJRHMgYXJlIHByb3ZpZGVkDQorICogYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgYmUgcmVnYXJkZWQgYXMgcmVzZXJ2ZWQgYXMgbG9uZyBhcyBhbnkgUEEvTE5BIHRvZ2dsaW5nIGlzIGVuYWJsZWQuDQorICoNCisgKiBAbm90ZSAgQHJlZiBzZF9ibGVfb3B0X2dldCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG9wdGlvbi4NCisgKiBAbm90ZSAgVGhpcyBmZWF0dXJlIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBuUkY1Miwgb24gblJGNTEgQHJlZiBOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZC4NCisgKiBAbm90ZSAgU2V0dGluZyB0aGlzIG9wdGlvbiB3aGlsZSB0aGUgcmFkaW8gaXMgaW4gdXNlIChpLmUuIGFueSBvZiB0aGUgcm9sZXMgYXJlIGFjdGl2ZSkgbWF5IGhhdmUgdW5kZWZpbmVkIGNvbnNlcXVlbmNlcw0KKyAqIGFuZCBtdXN0IGJlIGF2b2lkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgIGJsZV9wYV9sbmFfY2ZnX3QgcGFfY2ZnOyAgIC8qKjwgUG93ZXIgQW1wbGlmaWVyIGNvbmZpZ3VyYXRpb24gKi8NCisgICBibGVfcGFfbG5hX2NmZ190IGxuYV9jZmc7ICAvKio8IExvdyBOb2lzZSBBbXBsaWZpZXIgY29uZmlndXJhdGlvbiAqLw0KKw0KKyAgIHVpbnQ4X3QgcHBpX2NoX2lkX3NldDsgICAgIC8qKjwgUFBJIGNoYW5uZWwgdXNlZCBmb3IgcmFkaW8gcGluIHNldHRpbmcgKi8NCisgICB1aW50OF90IHBwaV9jaF9pZF9jbHI7ICAgICAvKio8IFBQSSBjaGFubmVsIHVzZWQgZm9yIHJhZGlvIHBpbiBjbGVhcmluZyAqLw0KKyAgIHVpbnQ4X3QgZ3Bpb3RlX2NoX2lkOyAgICAgIC8qKjwgR1BJT1RFIGNoYW5uZWwgdXNlZCBmb3IgcmFkaW8gcGluIHRvZ2dsaW5nICovDQorfSBibGVfY29tbW9uX29wdF9wYV9sbmFfdDsNCisNCisvKioNCisgKiBAYnJpZWYgQ29uZmlndXJhdGlvbiBvZiBleHRlbmRlZCBCTEUgY29ubmVjdGlvbiBldmVudHMuDQorICoNCisgKiBXaGVuIGVuYWJsZWQgdGhlIFNvZnREZXZpY2Ugd2lsbCBkeW5hbWljYWxseSBleHRlbmQgdGhlIGNvbm5lY3Rpb24gZXZlbnQgd2hlbiBwb3NzaWJsZS4NCisgKg0KKyAqIFRoZSBjb25uZWN0aW9uIGV2ZW50IGxlbmd0aCBpcyBjb250cm9sbGVkIGJ5IHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gYXMgc2V0IGJ5IEByZWYgYmxlX2dhcF9jb25uX2NmZ190OjpldmVudF9sZW5ndGguDQorICogVGhlIGNvbm5lY3Rpb24gZXZlbnQgY2FuIGJlIGV4dGVuZGVkIGlmIHRoZXJlIGlzIHRpbWUgdG8gc2VuZCBhbm90aGVyIHBhY2tldCBwYWlyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29ubmVjdGlvbiBpbnRlcnZhbCwNCisgKiBhbmQgaWYgdGhlcmUgYXJlIG5vIGNvbmZsaWN0cyB3aXRoIG90aGVyIEJMRSByb2xlcyByZXF1ZXN0aW5nIHJhZGlvIHRpbWUuDQorICoNCisgKiBAbm90ZSBAcmVmIHNkX2JsZV9vcHRfZ2V0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgb3B0aW9uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgIHVpbnQ4X3QgZW5hYmxlIDogMTsgLyoqPCBFbmFibGUgZXh0ZW5kZWQgQkxFIGNvbm5lY3Rpb24gZXZlbnRzLCBkaXNhYmxlZCBieSBkZWZhdWx0LiAqLw0KK30gYmxlX2NvbW1vbl9vcHRfY29ubl9ldnRfZXh0X3Q7DQorDQorLyoqQGJyaWVmIE9wdGlvbiBzdHJ1Y3R1cmUgZm9yIGNvbW1vbiBvcHRpb25zLiAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICBibGVfY29tbW9uX29wdF9wYV9sbmFfdCAgICAgICBwYV9sbmE7ICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIGNvbnRyb2xsaW5nIFBBIGFuZCBMTkEgcGluIHRvZ2dsaW5nLiAqLw0KKyAgYmxlX2NvbW1vbl9vcHRfY29ubl9ldnRfZXh0X3QgY29ubl9ldnRfZXh0OyAgLyoqPCBQYXJhbWV0ZXJzIGZvciBlbmFibGluZyBleHRlbmRlZCBjb25uZWN0aW9uIGV2ZW50cy4gKi8NCit9IGJsZV9jb21tb25fb3B0X3Q7DQorDQorLyoqQGJyaWVmIENvbW1vbiBCTEUgT3B0aW9uIHR5cGUsIHdyYXBwaW5nIHRoZSBtb2R1bGUgc3BlY2lmaWMgb3B0aW9ucy4gKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgYmxlX2NvbW1vbl9vcHRfdCAgY29tbW9uX29wdDsgICAgICAgICAvKio8IENPTU1PTiBvcHRpb25zLCBvcHRfaWQgaW4gQHJlZiBCTEVfQ09NTU9OX09QVFMgc2VyaWVzLiAqLw0KKyAgYmxlX2dhcF9vcHRfdCAgICAgZ2FwX29wdDsgICAgICAgICAgICAvKio8IEdBUCBvcHRpb24sIG9wdF9pZCBpbiBAcmVmIEJMRV9HQVBfT1BUUyBzZXJpZXMuICovDQorfSBibGVfb3B0X3Q7DQorDQorLyoqQGJyaWVmIEJMRSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gdHlwZSwgd3JhcHBpbmcgdGhlIG1vZHVsZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgc2V0IHdpdGgNCisgKiBAcmVmIHNkX2JsZV9jZmdfc2V0Lg0KKyAqDQorICogQG5vdGUgQ29ubmVjdGlvbiBjb25maWd1cmF0aW9ucyBkb24ndCBoYXZlIHRvIGJlIHNldC4NCisgKiBJbiB0aGUgY2FzZSB0aGF0IG5vIGNvbmZpZ3VyYXRpb25zIGhhcyBiZWVuIHNldCwgb3IgZmV3ZXIgY29ubmVjdGlvbiBjb25maWd1cmF0aW9ucyBoYXMgYmVlbiBzZXQgdGhhbiBlbmFibGVkIGNvbm5lY3Rpb25zLA0KKyAqIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgZm9yIHRoZSByZW1haW5pbmcgY29ubmVjdGlvbnMuDQorICogV2hlbiBjcmVhdGluZyBjb25uZWN0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIEByZWYgQkxFX0NPTk5fQ0ZHX1RBR19ERUZBVUxUIHNob3VsZCBiZSB1c2VkIGluDQorICogcGxhY2Ugb2YgQHJlZiBibGVfY29ubl9jZmdfdDo6Y29ubl9jZmdfdGFnLiBTZWUgQHJlZiBzZF9ibGVfZ2FwX2Fkdl9zdGFydCgpIGFuZCBAcmVmIHNkX2JsZV9nYXBfY29ubmVjdCgpIg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9DT05OX0NGR30NCisgKiBAZW5kbXNjcw0KKw0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICAgICAgY29ubl9jZmdfdGFnOyAgICAgICAgLyoqPCBUaGUgYXBwbGljYXRpb24gY2hvc2VuIHRhZyBpdCBjYW4gdXNlIHdpdGggdGhlIEByZWYgc2RfYmxlX2dhcF9hZHZfc3RhcnQoKSBhbmQgQHJlZiBzZF9ibGVfZ2FwX2Nvbm5lY3QoKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxscyB0byBzZWxlY3QgdGhpcyBjb25maWd1cmF0aW9uIHdoZW4gY3JlYXRpbmcgYSBjb25uZWN0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGRpZmZlcmVudCBmb3IgYWxsIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbnMgYWRkZWQgYW5kIG5vdCBAcmVmIEJMRV9DT05OX0NGR19UQUdfREVGQVVMVC4gKi8NCisgIHVuaW9uIHsNCisgICAgYmxlX2dhcF9jb25uX2NmZ190ICAgZ2FwX2Nvbm5fY2ZnOyAgICAgIC8qKjwgR0FQIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiwgY2ZnX2lkIGlzIEByZWYgQkxFX0NPTk5fQ0ZHX0dBUC4gKi8NCisgICAgYmxlX2dhdHRjX2Nvbm5fY2ZnX3QgZ2F0dGNfY29ubl9jZmc7ICAgIC8qKjwgR0FUVEMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLCBjZmdfaWQgaXMgQHJlZiBCTEVfQ09OTl9DRkdfR0FUVEMuICovDQorICAgIGJsZV9nYXR0c19jb25uX2NmZ190IGdhdHRzX2Nvbm5fY2ZnOyAgICAvKio8IEdBVFRTIHRoaXMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLCBjZmdfaWQgaXMgQHJlZiBCTEVfQ09OTl9DRkdfR0FUVFMuICovDQorICAgIGJsZV9nYXR0X2Nvbm5fY2ZnX3QgIGdhdHRfY29ubl9jZmc7ICAgICAvKio8IEdBVFQgdGhpcyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24sIGNmZ19pZCBpcyBAcmVmIEJMRV9DT05OX0NGR19HQVRULiAqLw0KKyAgfSBwYXJhbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gdW5pb24uICovDQorfSBibGVfY29ubl9jZmdfdDsNCisNCisvKioNCisgKiBAYnJpZWYgQ29uZmlndXJhdGlvbiBvZiBWZW5kb3IgU3BlY2lmaWMgVVVJRHMsIHNldCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gVG9vIG1hbnkgVVVJRHMgY29uZmlndXJlZC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgdnNfdXVpZF9jb3VudDsgLyoqPCBOdW1iZXIgb2YgMTI4LWJpdCBWZW5kb3IgU3BlY2lmaWMgVVVJRCBiYXNlcyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgQHJlZiBCTEVfVVVJRF9WU19DT1VOVF9ERUZBVUxULiBNYXhpbXVtIHZhbHVlIGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBCTEVfVVVJRF9WU19DT1VOVF9NQVguICovDQorfSBibGVfY29tbW9uX2NmZ192c191dWlkX3Q7DQorDQorLyoqQGJyaWVmIENvbW1vbiBCTEUgQ29uZmlndXJhdGlvbiB0eXBlLCB3cmFwcGluZyB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb25zLiAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICBibGVfY29tbW9uX2NmZ192c191dWlkX3QgIHZzX3V1aWRfY2ZnOyAgLyoqPCBWZW5kb3Igc3BlY2lmaWMgVVVJRCBjb25maWd1cmF0aW9uLCBjZmdfaWQgaXMgQHJlZiBCTEVfQ09NTU9OX0NGR19WU19VVUlELiAqLw0KK30gYmxlX2NvbW1vbl9jZmdfdDsNCisNCisvKipAYnJpZWYgQkxFIENvbmZpZ3VyYXRpb24gdHlwZSwgd3JhcHBpbmcgdGhlIG1vZHVsZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgYmxlX2Nvbm5fY2ZnX3QgICAgY29ubl9jZmc7ICAgLyoqPCBDb25uZWN0aW9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBjZmdfaWQgaW4gQHJlZiBCTEVfQ09OTl9DRkdTIHNlcmllcy4gKi8NCisgIGJsZV9jb21tb25fY2ZnX3QgIGNvbW1vbl9jZmc7IC8qKjwgR2xvYmFsIGNvbW1vbiBjb25maWd1cmF0aW9ucywgY2ZnX2lkIGluIEByZWYgQkxFX0NPTU1PTl9DRkdTIHNlcmllcy4gKi8NCisgIGJsZV9nYXBfY2ZnX3QgICAgIGdhcF9jZmc7ICAgIC8qKjwgR2xvYmFsIEdBUCBjb25maWd1cmF0aW9ucywgY2ZnX2lkIGluIEByZWYgQkxFX0dBUF9DRkdTIHNlcmllcy4gKi8NCisgIGJsZV9nYXR0c19jZmdfdCAgIGdhdHRzX2NmZzsgIC8qKjwgR2xvYmFsIEdBVFRTIGNvbmZpZ3VyYXRpb24sIGNmZ19pZCBpbiBAcmVmIEJMRV9HQVRUU19DRkdTIHNlcmllcy4gKi8NCit9IGJsZV9jZmdfdDsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTl9GVU5DVElPTlMgRnVuY3Rpb25zDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgRW5hYmxlIHRoZSBCTEUgc3RhY2sNCisgKg0KKyAqIEBwYXJhbVtpbiwgb3V0XSBwX2FwcF9yYW1fYmFzZSAgIFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIFJBTSByZWdpb24gKEFQUF9SQU1fQkFTRSkuIE9uIHJldHVybiwgdGhpcyB3aWxsDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbiB0aGUgbWluaW11bSBzdGFydCBhZGRyZXNzIG9mIHRoZSBhcHBsaWNhdGlvbiBSQU0gcmVnaW9uDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnkgdGhlIFNvZnREZXZpY2UgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4NCisgKg0KKyAqIEBub3RlIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnQgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB3aWxsIG5vdCBpbmNyZWFzZSBiZXR3ZWVuIFNvZnREZXZpY2VzDQorICogICAgICAgd2l0aCB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uIG51bWJlci4NCisgKg0KKyAqIEBub3RlIFRoZSB2YWx1ZSBvZiAqcF9hcHBfcmFtX2Jhc2Ugd2hlbiB0aGUgYXBwIGhhcyBkb25lIG5vIGN1c3RvbSBjb25maWd1cmF0aW9uIG9mIHRoZQ0KKyAqICAgICAgIFNvZnREZXZpY2UsIGkuZS4gdGhlIGFwcCBoYXMgbm90IGNhbGxlZCBAcmVmIHNkX2JsZV9jZmdfc2V0IGJlZm9yZSBAcmVmIHNkX2JsZV9lbmFibGUsIGNhbg0KKyAqICAgICAgIGJlIGZvdW5kIGluIHRoZSByZWxlYXNlIG5vdGVzLg0KKyAqDQorICogQG5vdGUgQXQgcnVudGltZSB0aGUgSUMncyBSQU0gaXMgc3BsaXQgaW50byAyIHJlZ2lvbnM6IFRoZSBTb2Z0RGV2aWNlIFJBTSByZWdpb24gaXMgbG9jYXRlZA0KKyAqICAgICAgIGJldHdlZW4gMHgyMDAwMDAwMCBhbmQgQVBQX1JBTV9CQVNFLTEgYW5kIHRoZSBhcHBsaWNhdGlvbidzIFJBTSByZWdpb24gaXMgbG9jYXRlZCBiZXR3ZWVuDQorICogICAgICAgQVBQX1JBTV9CQVNFIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGNhbGwgc3RhY2suDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGNhbGwgaW5pdGlhbGl6ZXMgdGhlIEJMRSBzdGFjaywgbm8gQkxFIHJlbGF0ZWQgZnVuY3Rpb24gb3RoZXIgdGhhbiBAcmVmDQorICogICAgICAgICAgc2RfYmxlX2NmZ19zZXQgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBvbmUuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0NPTU1PTl9FTkFCTEV9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIEJMRSBzdGFjayBoYXMgYmVlbiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFICBUaGUgQkxFIHN0YWNrIGhhZCBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSICAgSW52YWxpZCBvciBub3Qgc3VmZmljaWVudGx5IGFsaWduZWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PX01FTSAgICAgICAgIFRoZSBhbW91bnQgb2YgbWVtb3J5IGFzc2lnbmVkIHRvIHRoZSBTb2Z0RGV2aWNlIGJ5ICpwX2FwcF9yYW1fYmFzZSBpcyBub3QNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGVub3VnaCB0byBmaXQgdGhpcyBjb25maWd1cmF0aW9uJ3MgbWVtb3J5IHJlcXVpcmVtZW50LiBDaGVjayAqcF9hcHBfcmFtX2Jhc2UNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZXQgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGFwcGxpY2F0aW9uIFJBTSByZWdpb24gYWNjb3JkaW5nbHkuDQorICovDQorU1ZDQUxMKFNEX0JMRV9FTkFCTEUsIHVpbnQzMl90LCBzZF9ibGVfZW5hYmxlKHVpbnQzMl90ICogcF9hcHBfcmFtX2Jhc2UpKTsNCisNCisvKipAYnJpZWYgQWRkIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgQkxFIHN0YWNrDQorICoNCisgKiBAcGFyYW1baW5dIGNmZ19pZCAgICAgICAgICAgICAgQ29uZmlnIElELCBzZWUgQHJlZiBCTEVfQ09OTl9DRkdTLCBAcmVmIEJMRV9DT01NT05fQ0ZHUywgQHJlZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTEVfR0FQX0NGR1Mgb3IgQHJlZiBCTEVfR0FUVFNfQ0ZHUy4NCisgKiBAcGFyYW1baW5dIHBfY2ZnICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIGJsZV9jZmdfdCBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZS4NCisgKiBAcGFyYW1baW5dIGFwcF9yYW1fYmFzZSAgICAgICAgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGFwcGxpY2F0aW9uIFJBTSByZWdpb24gKEFQUF9SQU1fQkFTRSkuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9lbmFibGUgZm9yIGRldGFpbHMgYWJvdXQgQVBQX1JBTV9CQVNFLg0KKyAqDQorICogQG5vdGUgVGhlIG1lbW9yeSByZXF1aXJlbWVudCBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHdpbGwgbm90IGluY3JlYXNlIGJldHdlZW4gU29mdERldmljZXMNCisgKiAgICAgICB3aXRoIHRoZSBzYW1lIG1ham9yIHZlcnNpb24gbnVtYmVyLg0KKyAqDQorICogQG5vdGUgSWYgYSBjb25maWd1cmF0aW9uIGlzIHNldCBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3Qgb25lIHNldCBpcyB0aGUgb25lIHRoYXQgdGFrZXMgZWZmZWN0IG9uDQorICogICAgICAgQHJlZiBzZF9ibGVfZW5hYmxlLg0KKyAqDQorICogQG5vdGUgQW55IHBhcnQgb2YgdGhlIEJMRSBzdGFjayB0aGF0IGlzIE5PVCBjb25maWd1cmVkIHdpdGggQHJlZiBzZF9ibGVfY2ZnX3NldCB3aWxsIGhhdmUgZGVmYXVsdA0KKyAqICAgICAgIGNvbmZpZ3VyYXRpb24uDQorICoNCisgKiBAbm90ZSBAcmVmIHNkX2JsZV9jZmdfc2V0IG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgd2hlbiB0aGUgU29mdERldmljZSBpcyBlbmFibGVkIChzZWUgQHJlZg0KKyAqICAgICAgIHNkX3NvZnRkZXZpY2VfZW5hYmxlKSB3aGlsZSB0aGUgQkxFIHBhcnQgb2YgdGhlIFNvZnREZXZpY2UgaXMgbm90IGVuYWJsZWQgKHNlZSBAcmVmDQorICogICAgICAgc2RfYmxlX2VuYWJsZSkuDQorICoNCisgKiBAbm90ZSBFcnJvciBjb2RlcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0cy4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfQ09NTU9OX0VOQUJMRX0NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFICBUaGUgQkxFIHN0YWNrIGhhZCBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgICBJbnZhbGlkIG9yIG5vdCBzdWZmaWNpZW50bHkgYWxpZ25lZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSAgSW52YWxpZCBjZmdfaWQgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gICAgICAgICBUaGUgYW1vdW50IG9mIG1lbW9yeSBhc3NpZ25lZCB0byB0aGUgU29mdERldmljZSBieSBhcHBfcmFtX2Jhc2UgaXMgbm90DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZSBlbm91Z2ggdG8gZml0IHRoaXMgY29uZmlndXJhdGlvbidzIG1lbW9yeSByZXF1aXJlbWVudC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0NGR19TRVQsIHVpbnQzMl90LCBzZF9ibGVfY2ZnX3NldCh1aW50MzJfdCBjZmdfaWQsIGJsZV9jZmdfdCBjb25zdCAqIHBfY2ZnLCB1aW50MzJfdCBhcHBfcmFtX2Jhc2UpKTsNCisNCisvKipAYnJpZWYgR2V0IGFuIGV2ZW50IGZyb20gdGhlIHBlbmRpbmcgZXZlbnRzIHF1ZXVlLg0KKyAqDQorICogQHBhcmFtW291dF0gcF9kZXN0IFBvaW50ZXIgdG8gYnVmZmVyIHRvIGJlIGZpbGxlZCBpbiB3aXRoIGFuIGV2ZW50LCBvciBOVUxMIHRvIHJldHJpZXZlIHRoZSBldmVudCBsZW5ndGguDQorICogICAgICAgICAgICAgICAgICAgIFRoaXMgYnVmZmVyIDxiPm11c3QgYmUgYWxpZ25lZCB0byB0aGUgZXh0ZW5kIGRlZmluZWQgYnkgQHJlZiBCTEVfRVZUX1BUUl9BTElHTk1FTlQ8L2I+Lg0KKyAqICAgICAgICAgICAgICAgICAgICBUaGUgYnVmZmVyIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIEByZWYgYmxlX2V2dF90IHN0cnVjdC4NCisgKiBAcGFyYW1baW4sIG91dF0gcF9sZW4gUG9pbnRlciB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIG9uIHJldHVybiBpdCBpcyBmaWxsZWQgd2l0aCB0aGUgZXZlbnQgbGVuZ3RoLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBjYWxsIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gcHVsbCBhIEJMRSBldmVudCBmcm9tIHRoZSBCTEUgc3RhY2suIFRoZSBhcHBsaWNhdGlvbiBpcyBzaWduYWxlZCB0aGF0DQorICogYW4gZXZlbnQgaXMgYXZhaWxhYmxlIGZyb20gdGhlIEJMRSBzdGFjayBieSB0aGUgdHJpZ2dlcmluZyBvZiB0aGUgU0RfRVZUX0lSUW4gaW50ZXJydXB0Lg0KKyAqIFRoZSBhcHBsaWNhdGlvbiBpcyBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHRocmVhZCBtb2RlIChtYWluIGNvbnRleHQpIG9yIGRpcmVjdGx5IGZyb20gdGhlDQorICogSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZSB0aGF0IG1hcHMgdG8gU0RfRVZUX0lSUW4uIEluIGFueSBjYXNlIGhvd2V2ZXIsIGFuZCBiZWNhdXNlIHRoZSBCTEUgc3RhY2sgcnVucyBhdCBhIGhpZ2hlcg0KKyAqIHByaW9yaXR5IHRoYW4gdGhlIGFwcGxpY2F0aW9uLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gYSBsb29wICh1bnRpbCBAcmVmIE5SRl9FUlJPUl9OT1RfRk9VTkQgaXMgcmV0dXJuZWQpDQorICogZXZlcnkgdGltZSBTRF9FVlRfSVJRbiBpcyByYWlzZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGF2YWlsYWJsZSBldmVudHMgYXJlIHB1bGxlZCBmcm9tIHRoZSBCTEUgc3RhY2suIEZhaWx1cmUgdG8gZG8gc28NCisgKiBjb3VsZCBwb3RlbnRpYWxseSBsZWF2ZSBldmVudHMgaW4gdGhlIGludGVybmFsIHF1ZXVlIHdpdGhvdXQgdGhlIGFwcGxpY2F0aW9uIGJlaW5nIGF3YXJlIG9mIHRoaXMgZmFjdC4NCisgKg0KKyAqIFNpemluZyB0aGUgcF9kZXN0IGJ1ZmZlciBpcyBlcXVhbGx5IGltcG9ydGFudCwgc2luY2UgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHByb3ZpZGUgYWxsIHRoZSBtZW1vcnkgbmVjZXNzYXJ5IGZvciB0aGUgZXZlbnQgdG8NCisgKiBiZSBjb3BpZWQgaW50byBhcHBsaWNhdGlvbiBtZW1vcnkuIElmIHRoZSBidWZmZXIgcHJvdmlkZWQgaXMgbm90IGxhcmdlIGVub3VnaCB0byBmaXQgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZXZlbnQsDQorICogQHJlZiBOUkZfRVJST1JfREFUQV9TSVpFIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBjYW4gdGhlbiBjYWxsIGFnYWluIHdpdGggYSBsYXJnZXIgYnVmZmVyIHNpemUuDQorICogVGhlIG1heGltdW0gcG9zc2libGUgZXZlbnQgbGVuZ3RoIGlzIGRlZmluZWQgYnkgQHJlZiBCTEVfRVZUX0xFTl9NQVguIFRoZSBhcHBsaWNhdGlvbiBtYXkgYWxzbyAicGVlayIgdGhlIGV2ZW50IGxlbmd0aA0KKyAqIGJ5IHByb3ZpZGluZyBwX2Rlc3QgYXMgYSBOVUxMIHBvaW50ZXIgYW5kIGluc3BlY3RpbmcgdGhlIHZhbHVlIG9mICpwX2xlbiB1cG9uIHJldHVybjoNCisgKg0KKyAqICAgICBcY29kZQ0KKyAqICAgICB1aW50MTZfdCBsZW47DQorICogICAgIGVycmNvZGUgPSBzZF9ibGVfZXZ0X2dldChOVUxMLCAmbGVuKTsNCisgKiAgICAgXGVuZGNvZGUNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfQ09NTU9OX0lSUV9FVlRfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0NPTU1PTl9USFJFQURfRVZUX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEV2ZW50IHB1bGxlZCBhbmQgc3RvcmVkIGludG8gdGhlIHN1cHBsaWVkIGJ1ZmZlci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIG9yIG5vdCBzdWZmaWNpZW50bHkgYWxpZ25lZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIE5vIGV2ZW50cyByZWFkeSB0byBiZSBwdWxsZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgRXZlbnQgcmVhZHkgYnV0IGNvdWxkIG5vdCBmaXQgaW50byB0aGUgc3VwcGxpZWQgYnVmZmVyLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfRVZUX0dFVCwgdWludDMyX3QsIHNkX2JsZV9ldnRfZ2V0KHVpbnQ4X3QgKnBfZGVzdCwgdWludDE2X3QgKnBfbGVuKSk7DQorDQorDQorLyoqQGJyaWVmIEFkZCBhIFZlbmRvciBTcGVjaWZpYyBiYXNlIFVVSUQuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGNhbGwgZW5hYmxlcyB0aGUgYXBwbGljYXRpb24gdG8gYWRkIGEgdmVuZG9yIHNwZWNpZmljIGJhc2UgVVVJRCB0byB0aGUgQkxFIHN0YWNrJ3MgdGFibGUsIGZvciBsYXRlcg0KKyAqIHVzZSB3aXRoIGFsbCBvdGhlciBtb2R1bGVzIGFuZCBBUElzLiBUaGlzIHRoZW4gYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIHNob3J0ZXIsIDI0LWJpdCBAcmVmIGJsZV91dWlkX3QNCisgKiBmb3JtYXQgd2hlbiBkZWFsaW5nIHdpdGggYm90aCAxNi1iaXQgYW5kIDEyOC1iaXQgVVVJRHMgd2l0aG91dCBoYXZpbmcgdG8gY2hlY2sgZm9yIGxlbmd0aHMgYW5kIGhhdmluZyBzcGxpdCBjb2RlDQorICogcGF0aHMuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGV4dGVuZGluZyB0aGUgZ3JvdXBpbmcgbWVjaGFuaXNtIHRoYXQgdGhlIEJsdWV0b290aCBTSUcgc3RhbmRhcmQgYmFzZSBVVUlEIHVzZXMNCisgKiBmb3IgYWxsIG90aGVyIDEyOC1iaXQgVVVJRHMuIFRoZSB0eXBlIGZpZWxkIGluIHRoZSBAcmVmIGJsZV91dWlkX3Qgc3RydWN0dXJlIGlzIGFuIGluZGV4IChyZWxhdGl2ZSB0bw0KKyAqIEByZWYgQkxFX1VVSURfVFlQRV9WRU5ET1JfQkVHSU4pIHRvIHRoZSB0YWJsZSBwb3B1bGF0ZWQgYnkgbXVsdGlwbGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBVVUlEIGZpZWxkDQorICogaW4gdGhlIHNhbWUgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSAyIGJ5dGVzIGF0IGluZGV4ZXMgMTIgYW5kIDEzLiBUaGUgbnVtYmVyIG9mIHBvc3NpYmxlIDEyOC1iaXQgVVVJRHMgYXZhaWxhYmxlIHRvDQorICogdGhlIGFwcGxpY2F0aW9uIGlzIHRoZXJlZm9yZSB0aGUgbnVtYmVyIG9mIFZlbmRvciBTcGVjaWZpYyBVVUlEcyBhZGRlZCB3aXRoIHRoZSBoZWxwIG9mIHRoaXMgZnVuY3Rpb24gdGltZXMgNjU1MzYsDQorICogYWx0aG91Z2ggcmVzdHJpY3RlZCB0byBtb2RpZnlpbmcgYnl0ZXMgMTIgYW5kIDEzIGZvciBlYWNoIG9mIHRoZSBlbnRyaWVzIGluIHRoZSBzdXBwbGllZCBhcnJheS4NCisgKg0KKyAqIEBub3RlIEJ5dGVzIDEyIGFuZCAxMyBvZiB0aGUgcHJvdmlkZWQgVVVJRCB3aWxsIG5vdCBiZSB1c2VkIGludGVybmFsbHksIHNpbmNlIHRob3NlIGFyZSBhbHdheXMgcmVwbGFjZWQgYnkNCisgKiB0aGUgMTYtYml0IHV1aWQgZmllbGQgaW4gQHJlZiBibGVfdXVpZF90Lg0KKyAqDQorICogQG5vdGUgSWYgYSBVVUlEIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgQkxFIHN0YWNrJ3MgaW50ZXJuYWwgdGFibGUsIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IHdpbGwgYmUgcmV0dXJuZWQgaW4NCisgKiBwX3V1aWRfdHlwZSBhbG9uZyB3aXRoIGFuIE5SRl9TVUNDRVNTIGVycm9yIGNvZGUuDQorICoNCisgKiBAcGFyYW1baW5dICBwX3ZzX3V1aWQgICAgUG9pbnRlciB0byBhIDE2LW9jdGV0ICgxMjgtYml0KSBsaXR0bGUgZW5kaWFuIFZlbmRvciBTcGVjaWZpYyBVVUlEIGRpc3JlZ2FyZGluZw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyAxMiBhbmQgMTMuDQorICogQHBhcmFtW291dF0gcF91dWlkX3R5cGUgIFBvaW50ZXIgdG8gYSB1aW50OF90IHdoZXJlIHRoZSB0eXBlIGZpZWxkIGluIEByZWYgYmxlX3V1aWRfdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgVVVJRCB3aWxsIGJlIHN0b3JlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgYWRkZWQgdGhlIFZlbmRvciBTcGVjaWZpYyBVVUlELg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIElmIHBfdnNfdXVpZCBvciBwX3V1aWRfdHlwZSBpcyBOVUxMIG9yIGludmFsaWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gSWYgdGhlcmUgYXJlIG5vIG1vcmUgZnJlZSBzbG90cyBmb3IgVlMgVVVJRHMuDQorICovDQorU1ZDQUxMKFNEX0JMRV9VVUlEX1ZTX0FERCwgdWludDMyX3QsIHNkX2JsZV91dWlkX3ZzX2FkZChibGVfdXVpZDEyOF90IGNvbnN0ICpwX3ZzX3V1aWQsIHVpbnQ4X3QgKnBfdXVpZF90eXBlKSk7DQorDQorDQorLyoqIEBicmllZiBEZWNvZGUgbGl0dGxlIGVuZGlhbiByYXcgVVVJRCBieXRlcyAoMTYtYml0IG9yIDEyOC1iaXQpIGludG8gYSAyNCBiaXQgQHJlZiBibGVfdXVpZF90IHN0cnVjdHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoZSByYXcgVVVJRCBieXRlcyBleGNsdWRpbmcgYnl0ZXMgMTIgYW5kIDEzIChpLmUuIGJ5dGVzIDAtMTEgYW5kIDE0LTE1KSBvZiBwX3V1aWRfbGUgYXJlIGNvbXBhcmVkDQorICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgb25lcyBpbiBlYWNoIGVudHJ5IG9mIHRoZSB0YWJsZSBvZiB2ZW5kb3Igc3BlY2lmaWMgVVVJRHMgcG9wdWxhdGVkIHdpdGggQHJlZiBzZF9ibGVfdXVpZF92c19hZGQNCisgKiB0byBsb29rIGZvciBhIG1hdGNoLiBJZiB0aGVyZSBpcyBzdWNoIGEgbWF0Y2gsIGJ5dGVzIDEyIGFuZCAxMyBhcmUgcmV0dXJuZWQgYXMgcF91dWlkLT51dWlkIGFuZCB0aGUgaW5kZXgNCisgKiByZWxhdGl2ZSB0byBAcmVmIEJMRV9VVUlEX1RZUEVfVkVORE9SX0JFR0lOIGFzIHBfdXVpZC0+dHlwZS4NCisgKg0KKyAqIEBub3RlIElmIHRoZSBVVUlEIGxlbmd0aCBzdXBwbGllZCBpcyAyLCB0aGVuIHRoZSB0eXBlIHNldCBieSB0aGlzIGNhbGwgd2lsbCBhbHdheXMgYmUgQHJlZiBCTEVfVVVJRF9UWVBFX0JMRS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gICB1dWlkX2xlX2xlbiBMZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IHBfdXVpZF9sZSAobXVzdCBiZSAyIG9yIDE2IGJ5dGVzKS4NCisgKiBAcGFyYW1baW5dICAgcF91dWlkX2xlICAgUG9pbnRlciBwb2ludGluZyB0byBsaXR0bGUgZW5kaWFuIHJhdyBVVUlEIGJ5dGVzLg0KKyAqIEBwYXJhbVtvdXRdICBwX3V1aWQgICAgICBQb2ludGVyIHRvIGEgQHJlZiBibGVfdXVpZF90IHN0cnVjdHVyZSB0byBiZSBmaWxsZWQgaW4uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGRlY29kZWQgaW50byB0aGUgQHJlZiBibGVfdXVpZF90IHN0cnVjdHVyZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCBJbnZhbGlkIFVVSUQgbGVuZ3RoLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIEZvciBhIDEyOC1iaXQgVVVJRCwgbm8gbWF0Y2ggaW4gdGhlIHBvcHVsYXRlZCB0YWJsZSBvZiBVVUlEcy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX1VVSURfREVDT0RFLCB1aW50MzJfdCwgc2RfYmxlX3V1aWRfZGVjb2RlKHVpbnQ4X3QgdXVpZF9sZV9sZW4sIHVpbnQ4X3QgY29uc3QgKnBfdXVpZF9sZSwgYmxlX3V1aWRfdCAqcF91dWlkKSk7DQorDQorDQorLyoqIEBicmllZiBFbmNvZGUgYSBAcmVmIGJsZV91dWlkX3Qgc3RydWN0dXJlIGludG8gbGl0dGxlIGVuZGlhbiByYXcgVVVJRCBieXRlcyAoMTYtYml0IG9yIDEyOC1iaXQpLg0KKyAqDQorICogQG5vdGUgVGhlIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBwX3V1aWRfbGUgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgdmFsaWRpdHkgYW5kIHNpemUgb2YgcF91dWlkIGlzIGNvbXB1dGVkLg0KKyAqDQorICogQHBhcmFtW2luXSAgIHBfdXVpZCAgICAgICAgUG9pbnRlciB0byBhIEByZWYgYmxlX3V1aWRfdCBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIGVuY29kZWQgaW50byBieXRlcy4NCisgKiBAcGFyYW1bb3V0XSAgcF91dWlkX2xlX2xlbiBQb2ludGVyIHRvIGEgdWludDhfdCB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIGVuY29kZWQgbGVuZ3RoICgyIG9yIDE2IGJ5dGVzKS4NCisgKiBAcGFyYW1bb3V0XSAgcF91dWlkX2xlICAgICBQb2ludGVyIHRvIGEgYnVmZmVyIHdoZXJlIHRoZSBsaXR0bGUgZW5kaWFuIHJhdyBVVUlEIGJ5dGVzICgyIG9yIDE2KSB3aWxsIGJlIHN0b3JlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgZW5jb2RlZCBpbnRvIHRoZSBidWZmZXIuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIFVVSUQgdHlwZS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX1VVSURfRU5DT0RFLCB1aW50MzJfdCwgc2RfYmxlX3V1aWRfZW5jb2RlKGJsZV91dWlkX3QgY29uc3QgKnBfdXVpZCwgdWludDhfdCAqcF91dWlkX2xlX2xlbiwgdWludDhfdCAqcF91dWlkX2xlKSk7DQorDQorDQorLyoqQGJyaWVmIEdldCBWZXJzaW9uIEluZm9ybWF0aW9uLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBjYWxsIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBCTEUgc3RhY2sgdmVyc2lvbiBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfdmVyc2lvbiBQb2ludGVyIHRvIGEgYmxlX3ZlcnNpb25fdCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGluLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICBWZXJzaW9uIGluZm9ybWF0aW9uIHN0b3JlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgQkxFIHN0YWNrIGlzIGJ1c3kgKHR5cGljYWxseSBkb2luZyBhIGxvY2FsbHktaW5pdGlhdGVkIGRpc2Nvbm5lY3Rpb24gcHJvY2VkdXJlKS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX1ZFUlNJT05fR0VULCB1aW50MzJfdCwgc2RfYmxlX3ZlcnNpb25fZ2V0KGJsZV92ZXJzaW9uX3QgKnBfdmVyc2lvbikpOw0KKw0KKw0KKy8qKkBicmllZiBQcm92aWRlIGEgdXNlciBtZW1vcnkgYmxvY2suDQorICoNCisgKiBAbm90ZSBUaGlzIGNhbGwgY2FuIG9ubHkgYmUgdXNlZCBhcyBhIHJlc3BvbnNlIHRvIGEgQHJlZiBCTEVfRVZUX1VTRVJfTUVNX1JFUVVFU1QgZXZlbnQgaXNzdWVkIHRvIHRoZSBhcHBsaWNhdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBwX2Jsb2NrIFBvaW50ZXIgdG8gYSB1c2VyIG1lbW9yeSBibG9jayBzdHJ1Y3R1cmUgb3IgTlVMTCBpZiBtZW1vcnkgaXMgbWFuYWdlZCBieSB0aGUgYXBwbGljYXRpb24uDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9OT0JVRl9QRUVSX0NBTkNFTF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX05PQlVGX0FVVEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9OT0JVRl9OT0FVVEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9CVUZfQVVUSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX0JVRl9OT0FVVEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9RVUVVRV9GVUxMX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBxdWV1ZWQgYSByZXNwb25zZSB0byB0aGUgcGVlci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCBJbnZhbGlkIHVzZXIgbWVtb3J5IGJsb2NrIGxlbmd0aCBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIHN0YXRlIG9yIG5vIHVzZXIgbWVtb3J5IHJlcXVlc3QgcGVuZGluZy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX1VTRVJfTUVNX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX3VzZXJfbWVtX3JlcGx5KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfdXNlcl9tZW1fYmxvY2tfdCBjb25zdCAqcF9ibG9jaykpOw0KKw0KKy8qKkBicmllZiBTZXQgYSBCTEUgb3B0aW9uLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBjYWxsIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gc2V0IHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24uDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19TVEFUSUNfUEtfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIG9wdF9pZCBPcHRpb24gSUQsIHNlZSBAcmVmIEJMRV9DT01NT05fT1BUUyBhbmQgQHJlZiBCTEVfR0FQX09QVFMuDQorICogQHBhcmFtW2luXSBwX29wdCBQb2ludGVyIHRvIGEgYmxlX29wdF90IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBvcHRpb24gdmFsdWUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgIE9wdGlvbiBzZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIGNoZWNrIHBhcmFtZXRlciBsaW1pdHMgYW5kIGNvbnN0cmFpbnRzLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBVbmFibGUgdG8gc2V0IHRoZSBwYXJhbWV0ZXIgYXQgdGhpcyB0aW1lLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgQkxFIHN0YWNrIGlzIGJ1c3kgb3IgdGhlIHByZXZpb3VzIHByb2NlZHVyZSBoYXMgbm90IGNvbXBsZXRlZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX09QVF9TRVQsIHVpbnQzMl90LCBzZF9ibGVfb3B0X3NldCh1aW50MzJfdCBvcHRfaWQsIGJsZV9vcHRfdCBjb25zdCAqcF9vcHQpKTsNCisNCisNCisvKipAYnJpZWYgR2V0IGEgQkxFIG9wdGlvbi4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24uDQorICoNCisgKiBAcGFyYW1baW5dIG9wdF9pZCBPcHRpb24gSUQsIHNlZSBAcmVmIEJMRV9DT01NT05fT1BUUyBhbmQgQHJlZiBCTEVfR0FQX09QVFMuDQorICogQHBhcmFtW291dF0gcF9vcHQgUG9pbnRlciB0byBhIGJsZV9vcHRfdCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGluLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICBPcHRpb24gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBjaGVjayBwYXJhbWV0ZXIgbGltaXRzIGFuZCBjb25zdHJhaW50cy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgVW5hYmxlIHRvIHJldHJpZXZlIHRoZSBwYXJhbWV0ZXIgYXQgdGhpcyB0aW1lLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgQkxFIHN0YWNrIGlzIGJ1c3kgb3IgdGhlIHByZXZpb3VzIHByb2NlZHVyZSBoYXMgbm90IGNvbXBsZXRlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9TVVBQT1JURUQgVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZC4NCisgKg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfT1BUX0dFVCwgdWludDMyX3QsIHNkX2JsZV9vcHRfZ2V0KHVpbnQzMl90IG9wdF9pZCwgYmxlX29wdF90ICpwX29wdCkpOw0KKw0KKy8qKiBAfSAqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLyogQkxFX0hfXyAqLw0KKw0KKy8qKg0KKyAgQH0NCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9lcnIuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2Vyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2RiMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9lcnIuaApAQCAtMCwwICsxLDkxIEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTg0KKyAgQHsNCisgIEBhZGR0b2dyb3VwICBucmZfZXJyb3INCisgIEB7DQorICAgIEBpbmdyb3VwIEJMRV9DT01NT04NCisgIEB9DQorDQorICBAZGVmZ3JvdXAgYmxlX2VyciBHZW5lcmFsIGVycm9yIGNvZGVzDQorICBAew0KKw0KKyAgQGJyaWVmIEdlbmVyYWwgZXJyb3IgY29kZSBkZWZpbml0aW9ucyBmb3IgdGhlIEJMRSBBUEkuDQorDQorICBAaW5ncm91cCBCTEVfQ09NTU9ODQorKi8NCisjaWZuZGVmIE5SRl9CTEVfRVJSX0hfXw0KKyNkZWZpbmUgTlJGX0JMRV9FUlJfSF9fDQorDQorI2luY2x1ZGUgIm5yZl9lcnJvci5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEBkZWZncm91cCBCTEVfRVJST1JTIEVycm9yIENvZGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9OT1RfRU5BQkxFRCAgICAgICAgICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MDAxKSAvKio8IEByZWYgc2RfYmxlX2VuYWJsZSBoYXMgbm90IGJlZW4gY2FsbGVkLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgICAgKE5SRl9FUlJPUl9TVEtfQkFTRV9OVU0rMHgwMDIpIC8qKjwgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZS4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9JTlZBTElEX0FUVFJfSEFORExFICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MDAzKSAvKio8IEludmFsaWQgYXR0cmlidXRlIGhhbmRsZS4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9OT19UWF9QQUNLRVRTICAgICAgICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MDA0KSAvKio8IE5vdCBlbm91Z2ggYXBwbGljYXRpb24gcGFja2V0cyBhdmFpbGFibGUgb24gdGhpcyBjb25uZWN0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0lOVkFMSURfUk9MRSAgICAgICAgICAgKE5SRl9FUlJPUl9TVEtfQkFTRV9OVU0rMHgwMDUpIC8qKjwgSW52YWxpZCByb2xlLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0JMT0NLRURfQllfT1RIRVJfTElOS1MgKE5SRl9FUlJPUl9TVEtfQkFTRV9OVU0rMHgwMDYpIC8qKjwgVGhlIGF0dGVtcHQgdG8gY2hhbmdlIGxpbmsgc2V0dGluZ3MgZmFpbGVkIGR1ZSB0byB0aGUgc2NoZWR1bGluZyBvZiBvdGhlciBsaW5rcy4gKi8NCisvKiogQH0gKi8NCisNCisNCisvKiogQGRlZmdyb3VwIEJMRV9FUlJPUl9TVUJSQU5HRVMgTW9kdWxlIHNwZWNpZmljIGVycm9yIGNvZGUgc3VicmFuZ2VzDQorICogIEBicmllZiBBc3NpZ25tZW50IG9mIHN1YnJhbmdlcyBmb3IgbW9kdWxlIHNwZWNpZmljIGVycm9yIGNvZGVzLg0KKyAqICBAbm90ZSBGb3Igc3BlY2lmaWMgZXJyb3IgY29kZXMsIHNlZSBibGVfPG1vZHVsZT4uaCBvciBibGVfZXJyb3JfPG1vZHVsZT4uaC4NCisgKiBAeyAqLw0KKyNkZWZpbmUgTlJGX0wyQ0FQX0VSUl9CQVNFICAgICAgICAgICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MTAwKSAvKio8IEwyQ0FQIHNwZWNpZmljIGVycm9ycy4gKi8NCisjZGVmaW5lIE5SRl9HQVBfRVJSX0JBU0UgICAgICAgICAgICAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDIwMCkgLyoqPCBHQVAgc3BlY2lmaWMgZXJyb3JzLiAqLw0KKyNkZWZpbmUgTlJGX0dBVFRDX0VSUl9CQVNFICAgICAgICAgICAgIChOUkZfRVJST1JfU1RLX0JBU0VfTlVNKzB4MzAwKSAvKio8IEdBVFQgY2xpZW50IHNwZWNpZmljIGVycm9ycy4gKi8NCisjZGVmaW5lIE5SRl9HQVRUU19FUlJfQkFTRSAgICAgICAgICAgICAoTlJGX0VSUk9SX1NUS19CQVNFX05VTSsweDQwMCkgLyoqPCBHQVRUIHNlcnZlciBzcGVjaWZpYyBlcnJvcnMuICovDQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKw0KKy8qKg0KKyAgQH0NCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXAuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDI3NzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXAuaApAQCAtMCwwICsxLDIyMTEgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICBAYWRkdG9ncm91cCBCTEVfR0FQIEdlbmVyaWMgQWNjZXNzIFByb2ZpbGUgKEdBUCkNCisgIEB7DQorICBAYnJpZWYgRGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBHQVAgaW50ZXJmYWNlLg0KKyAqLw0KKw0KKyNpZm5kZWYgQkxFX0dBUF9IX18NCisjZGVmaW5lIEJMRV9HQVBfSF9fDQorDQorDQorI2luY2x1ZGUgImJsZV90eXBlcy5oIg0KKyNpbmNsdWRlICJibGVfcmFuZ2VzLmgiDQorI2luY2x1ZGUgIm5yZl9zdmMuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKipAYWRkdG9ncm91cCBCTEVfR0FQX0VOVU1FUkFUSU9OUyBFbnVtZXJhdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBHQVAgQVBJIFNWQyBudW1iZXJzLg0KKyAqLw0KK2VudW0gQkxFX0dBUF9TVkNTDQorew0KKyAgU0RfQkxFX0dBUF9BRERSX1NFVCA9IEJMRV9HQVBfU1ZDX0JBU0UsICAgICAgIC8qKjwgU2V0IG93biBCbHVldG9vdGggQWRkcmVzcy4gKi8NCisgIFNEX0JMRV9HQVBfQUREUl9HRVQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBvd24gQmx1ZXRvb3RoIEFkZHJlc3MuICovDQorICBTRF9CTEVfR0FQX1dISVRFTElTVF9TRVQsICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgYWN0aXZlIHdoaXRlbGlzdC4gKi8NCisgIFNEX0JMRV9HQVBfREVWSUNFX0lERU5USVRJRVNfU0VULCAgICAgICAgICAgICAvKio8IFNldCBkZXZpY2UgaWRlbnRpdHkgbGlzdC4gKi8NCisgIFNEX0JMRV9HQVBfUFJJVkFDWV9TRVQsICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBQcml2YWN5IHNldHRpbmdzKi8NCisgIFNEX0JMRV9HQVBfUFJJVkFDWV9HRVQsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBQcml2YWN5IHNldHRpbmdzKi8NCisgIFNEX0JMRV9HQVBfQURWX0RBVEFfU0VULCAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBBZHZlcnRpc2luZyBEYXRhLiAqLw0KKyAgU0RfQkxFX0dBUF9BRFZfU1RBUlQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhcnQgQWR2ZXJ0aXNpbmcuICovDQorICBTRF9CTEVfR0FQX0FEVl9TVE9QLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdG9wIEFkdmVydGlzaW5nLiAqLw0KKyAgU0RfQkxFX0dBUF9DT05OX1BBUkFNX1VQREFURSwgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBQYXJhbWV0ZXIgVXBkYXRlLiAqLw0KKyAgU0RfQkxFX0dBUF9ESVNDT05ORUNULCAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGlzY29ubmVjdC4gKi8NCisgIFNEX0JMRV9HQVBfVFhfUE9XRVJfU0VULCAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBUWCBQb3dlci4gKi8NCisgIFNEX0JMRV9HQVBfQVBQRUFSQU5DRV9TRVQsICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBBcHBlYXJhbmNlLiAqLw0KKyAgU0RfQkxFX0dBUF9BUFBFQVJBTkNFX0dFVCwgICAgICAgICAgICAgICAgICAgIC8qKjwgR2V0IEFwcGVhcmFuY2UuICovDQorICBTRF9CTEVfR0FQX1BQQ1BfU0VULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgUFBDUC4gKi8NCisgIFNEX0JMRV9HQVBfUFBDUF9HRVQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCBQUENQLiAqLw0KKyAgU0RfQkxFX0dBUF9ERVZJQ0VfTkFNRV9TRVQsICAgICAgICAgICAgICAgICAgIC8qKjwgU2V0IERldmljZSBOYW1lLiAqLw0KKyAgU0RfQkxFX0dBUF9ERVZJQ0VfTkFNRV9HRVQsICAgICAgICAgICAgICAgICAgIC8qKjwgR2V0IERldmljZSBOYW1lLiAqLw0KKyAgU0RfQkxFX0dBUF9BVVRIRU5USUNBVEUsICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSW5pdGlhdGUgUGFpcmluZy9Cb25kaW5nLiAqLw0KKyAgU0RfQkxFX0dBUF9TRUNfUEFSQU1TX1JFUExZLCAgICAgICAgICAgICAgICAgIC8qKjwgUmVwbHkgd2l0aCBTZWN1cml0eSBQYXJhbWV0ZXJzLiAqLw0KKyAgU0RfQkxFX0dBUF9BVVRIX0tFWV9SRVBMWSwgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVwbHkgd2l0aCBhbiBhdXRoZW50aWNhdGlvbiBrZXkuICovDQorICBTRF9CTEVfR0FQX0xFU0NfREhLRVlfUkVQTFksICAgICAgICAgICAgICAgICAgLyoqPCBSZXBseSB3aXRoIGFuIExFIFNlY3VyZSBDb25uZWN0aW9ucyBESEtleS4gKi8NCisgIFNEX0JMRV9HQVBfS0VZUFJFU1NfTk9USUZZLCAgICAgICAgICAgICAgICAgICAvKio8IE5vdGlmeSBvZiBhIGtleXByZXNzIGR1cmluZyBhbiBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUuICovDQorICBTRF9CTEVfR0FQX0xFU0NfT09CX0RBVEFfR0VULCAgICAgICAgICAgICAgICAgLyoqPCBHZXQgdGhlIGxvY2FsIExFIFNlY3VyZSBDb25uZWN0aW9ucyBPT0IgZGF0YS4gKi8NCisgIFNEX0JMRV9HQVBfTEVTQ19PT0JfREFUQV9TRVQsICAgICAgICAgICAgICAgICAvKio8IFNldCB0aGUgcmVtb3RlIExFIFNlY3VyZSBDb25uZWN0aW9ucyBPT0IgZGF0YS4gKi8NCisgIFNEX0JMRV9HQVBfRU5DUllQVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEluaXRpYXRlIGVuY3J5cHRpb24gcHJvY2VkdXJlLiAqLw0KKyAgU0RfQkxFX0dBUF9TRUNfSU5GT19SRVBMWSwgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVwbHkgd2l0aCBTZWN1cml0eSBJbmZvcm1hdGlvbi4gKi8NCisgIFNEX0JMRV9HQVBfQ09OTl9TRUNfR0VULCAgICAgICAgICAgICAgICAgICAgICAvKio8IE9idGFpbiBjb25uZWN0aW9uIHNlY3VyaXR5IGxldmVsLiAqLw0KKyAgU0RfQkxFX0dBUF9SU1NJX1NUQVJULCAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhcnQgcmVwb3J0aW5nIG9mIGNoYW5nZXMgaW4gUlNTSS4gKi8NCisgIFNEX0JMRV9HQVBfUlNTSV9TVE9QLCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0b3AgcmVwb3J0aW5nIG9mIGNoYW5nZXMgaW4gUlNTSS4gKi8NCisgIFNEX0JMRV9HQVBfU0NBTl9TVEFSVCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXJ0IFNjYW5uaW5nLiAqLw0KKyAgU0RfQkxFX0dBUF9TQ0FOX1NUT1AsICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RvcCBTY2FubmluZy4gKi8NCisgIFNEX0JMRV9HQVBfQ09OTkVDVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3QuICovDQorICBTRF9CTEVfR0FQX0NPTk5FQ1RfQ0FOQ0VMLCAgICAgICAgICAgICAgICAgICAgLyoqPCBDYW5jZWwgb25nb2luZyBjb25uZWN0aW9uIHByb2NlZHVyZS4gKi8NCisgIFNEX0JMRV9HQVBfUlNTSV9HRVQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdldCB0aGUgbGFzdCBSU1NJIHNhbXBsZS4gKi8NCisgIFNEX0JMRV9HQVBfUEhZX1JFUVVFU1QsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEluaXRpYXRlIFBIWSBVcGRhdGUgcHJvY2VkdXJlLiAqLw0KKyAgU0RfQkxFX0dBUF9EQVRBX0xFTkdUSF9VUERBVEUsICAgICAgICAgICAgICAgIC8qKjwgSW5pdGlhdGUgb3IgcmVzcG9uZCB0byBhIERhdGEgTGVuZ3RoIFVwZGF0ZSBQcm9jZWR1cmUuICovDQorfTsNCisNCisvKipAYnJpZWYgR0FQIEV2ZW50IElEcy4NCisgKiBJRHMgdGhhdCB1bmlxdWVseSBpZGVudGlmeSBhbiBldmVudCBjb21pbmcgZnJvbSB0aGUgc3RhY2sgdG8gdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK2VudW0gQkxFX0dBUF9FVlRTDQorew0KKyAgQkxFX0dBUF9FVlRfQ09OTkVDVEVEICA9IEJMRV9HQVBfRVZUX0JBU0UsICAgIC8qKjwgQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfY29ubmVjdGVkX3QuICAgICAgICAgICAgKi8NCisgIEJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCwgICAgICAgICAgICAgICAgICAgICAvKio8IERpc2Nvbm5lY3RlZCBmcm9tIHBlZXIuICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2Rpc2Nvbm5lY3RlZF90LiAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURSwgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIFBhcmFtZXRlcnMgdXBkYXRlZC4gICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9jb25uX3BhcmFtX3VwZGF0ZV90LiAgICAqLw0KKyAgQkxFX0dBUF9FVlRfU0VDX1BBUkFNU19SRVFVRVNULCAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdCB0byBwcm92aWRlIHNlY3VyaXR5IHBhcmFtZXRlcnMuICAgICAgICAgXG4gUmVwbHkgd2l0aCBAcmVmIHNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseS4gIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X3NlY19wYXJhbXNfcmVxdWVzdF90LiAqLw0KKyAgQkxFX0dBUF9FVlRfU0VDX0lORk9fUkVRVUVTVCwgICAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdCB0byBwcm92aWRlIHNlY3VyaXR5IGluZm9ybWF0aW9uLiAgICAgICAgXG4gUmVwbHkgd2l0aCBAcmVmIHNkX2JsZV9nYXBfc2VjX2luZm9fcmVwbHkuICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X3NlY19pbmZvX3JlcXVlc3RfdC4gICAqLw0KKyAgQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZLCAgICAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdCB0byBkaXNwbGF5IGEgcGFzc2tleSB0byB0aGUgdXNlci4gICAgICAgXG4gSW4gTEVTQyBOdW1lcmljIENvbXBhcmlzb24sIHJlcGx5IHdpdGggQHJlZiBzZF9ibGVfZ2FwX2F1dGhfa2V5X3JlcGx5LiBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9wYXNza2V5X2Rpc3BsYXlfdC4gKi8NCisgIEJMRV9HQVBfRVZUX0tFWV9QUkVTU0VELCAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vdGlmaWNhdGlvbiBvZiBhIGtleXByZXNzIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2tleV9wcmVzc2VkX3QgICAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9BVVRIX0tFWV9SRVFVRVNULCAgICAgICAgICAgICAgICAgLyoqPCBSZXF1ZXN0IHRvIHByb3ZpZGUgYW4gYXV0aGVudGljYXRpb24ga2V5LiAgICAgICBcbiBSZXBseSB3aXRoIEByZWYgc2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseS4gICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfYXV0aF9rZXlfcmVxdWVzdF90LiAgICovDQorICBCTEVfR0FQX0VWVF9MRVNDX0RIS0VZX1JFUVVFU1QsICAgICAgICAgICAgICAgLyoqPCBSZXF1ZXN0IHRvIGNhbGN1bGF0ZSBhbiBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgREhLZXkuIFxuIFJlcGx5IHdpdGggQHJlZiBzZF9ibGVfZ2FwX2xlc2NfZGhrZXlfcmVwbHkuICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9sZXNjX2Roa2V5X3JlcXVlc3RfdCAqLw0KKyAgQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVMsICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQXV0aGVudGljYXRpb24gcHJvY2VkdXJlIGNvbXBsZXRlZCB3aXRoIHN0YXR1cy4gXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfYXV0aF9zdGF0dXNfdC4gICAgICAgICAgKi8NCisgIEJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURSwgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gc2VjdXJpdHkgdXBkYXRlZC4gICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2Nvbm5fc2VjX3VwZGF0ZV90LiAgICAgICovDQorICBCTEVfR0FQX0VWVF9USU1FT1VULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaW1lb3V0IGV4cGlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF90aW1lb3V0X3QuICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VELCAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlNTSSByZXBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfcnNzaV9jaGFuZ2VkX3QuICAgICAgICAgKi8NCisgIEJMRV9HQVBfRVZUX0FEVl9SRVBPUlQsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFkdmVydGlzaW5nIHJlcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2Fkdl9yZXBvcnRfdC4gICAgICAgICAgICovDQorICBCTEVfR0FQX0VWVF9TRUNfUkVRVUVTVCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZWN1cml0eSBSZXF1ZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9zZWNfcmVxdWVzdF90LiAgICAgICAgICAqLw0KKyAgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEVfUkVRVUVTVCwgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBQYXJhbWV0ZXIgVXBkYXRlIFJlcXVlc3QuICAgICAgICAgICAgXG4gUmVwbHkgd2l0aCBAcmVmIHNkX2JsZV9nYXBfY29ubl9wYXJhbV91cGRhdGUuIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X2Nvbm5fcGFyYW1fdXBkYXRlX3JlcXVlc3RfdC4gKi8NCisgIEJMRV9HQVBfRVZUX1NDQU5fUkVRX1JFUE9SVCwgICAgICAgICAgICAgICAgICAvKio8IFNjYW4gcmVxdWVzdCByZXBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXBfZXZ0X3NjYW5fcmVxX3JlcG9ydF90LiAqLw0KKyAgQkxFX0dBUF9FVlRfUEhZX1VQREFURSwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEhZIGhhdmUgYmVlbiB1cGRhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfcGh5X3VwZGF0ZV90LiAgICAgICAgICAgKi8NCisgIEJMRV9HQVBfRVZUX0RBVEFfTEVOR1RIX1VQREFURV9SRVFVRVNULCAgICAgICAvKio8IERhdGEgTGVuZ3RoIFVwZGF0ZSByZXF1ZXN0LiAgICAgICAgICAgICAgICAgICAgIFxuIFJlcGx5IHdpdGggQHJlZiBzZF9ibGVfZ2FwX2RhdGFfbGVuZ3RoX3VwZGF0ZS5cbiBTZWUgQHJlZiBibGVfZ2FwX2V2dF9kYXRhX2xlbmd0aF91cGRhdGVfcmVxdWVzdF90LiAqLw0KKyAgQkxFX0dBUF9FVlRfREFUQV9MRU5HVEhfVVBEQVRFLCAgICAgICAgICAgICAgIC8qKjwgTEwgRGF0YSBDaGFubmVsIFBEVSBwYXlsb2FkIGxlbmd0aCB1cGRhdGVkLiAgICAgXG4gU2VlIEByZWYgYmxlX2dhcF9ldnRfZGF0YV9sZW5ndGhfdXBkYXRlX3QuICovDQorfTsNCisNCisvKipAYnJpZWYgR0FQIE9wdGlvbiBJRHMuDQorICogSURzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBHQVAgb3B0aW9uLg0KKyAqLw0KK2VudW0gQkxFX0dBUF9PUFRTDQorew0KKyAgQkxFX0dBUF9PUFRfQ0hfTUFQICA9IEJMRV9HQVBfT1BUX0JBU0UsICAgICAgIC8qKjwgQ2hhbm5lbCBNYXAuIEByZWYgYmxlX2dhcF9vcHRfY2hfbWFwX3QgICovDQorICBCTEVfR0FQX09QVF9MT0NBTF9DT05OX0xBVEVOQ1ksICAgICAgICAgICAgICAgLyoqPCBMb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kuIEByZWYgYmxlX2dhcF9vcHRfbG9jYWxfY29ubl9sYXRlbmN5X3QgKi8NCisgIEJMRV9HQVBfT1BUX1BBU1NLRVksICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBwYXNza2V5LiBAcmVmIGJsZV9nYXBfb3B0X3Bhc3NrZXlfdCAqLw0KKyAgQkxFX0dBUF9PUFRfU0NBTl9SRVFfUkVQT1JULCAgICAgICAgICAgICAgICAgIC8qKjwgU2NhbiByZXF1ZXN0IHJlcG9ydC4gQHJlZiBibGVfZ2FwX29wdF9zY2FuX3JlcV9yZXBvcnRfdCAqLw0KKyAgQkxFX0dBUF9PUFRfQ09NUEFUX01PREVfMSwgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcGF0aWJpbGl0eSBtb2RlLiBAcmVmIGJsZV9nYXBfb3B0X2NvbXBhdF9tb2RlXzFfdCAqLw0KKyAgQkxFX0dBUF9PUFRfQ09NUEFUX01PREVfMiwgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcGF0aWJpbGl0eSBtb2RlLiBAcmVmIGJsZV9nYXBfb3B0X2NvbXBhdF9tb2RlXzJfdCAqLw0KKyAgQkxFX0dBUF9PUFRfQVVUSF9QQVlMT0FEX1RJTUVPVVQsICAgICAgICAgICAgIC8qKjwgU2V0IEF1dGhlbnRpY2F0ZWQgcGF5bG9hZCB0aW1lb3V0LiBAcmVmIGJsZV9nYXBfb3B0X2F1dGhfcGF5bG9hZF90aW1lb3V0X3QgKi8NCisgIEJMRV9HQVBfT1BUX1BSRUZFUlJFRF9QSFlTX1NFVCwgICAgICAgICAgICAgICAvKio8IFNldCB0aGUgcHJlZmVycmVkIFBIWXMgZm9yIGFsbCBuZXcgY29ubmVjdGlvbnMuIEByZWYgYmxlX2dhcF9vcHRfcHJlZmVycmVkX3BoeXNfdCAqLw0KKyAgQkxFX0dBUF9PUFRfU0xBVkVfTEFURU5DWV9ESVNBQkxFLCAgICAgICAgICAgIC8qKjwgRGlzYWJsZSBzbGF2ZSBsYXRlbmN5LiBAcmVmIGJsZV9nYXBfb3B0X3NsYXZlX2xhdGVuY3lfZGlzYWJsZV90ICovDQorfTsNCisNCisvKipAYnJpZWYgR0FQIENvbmZpZ3VyYXRpb24gSURzLg0KKyAqDQorICogSURzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBHQVAgY29uZmlndXJhdGlvbi4NCisgKi8NCitlbnVtIEJMRV9HQVBfQ0ZHUw0KK3sNCisgIEJMRV9HQVBfQ0ZHX1JPTEVfQ09VTlQgPSBCTEVfR0FQX0NGR19CQVNFLCAgLyoqPCBSb2xlIGNvdW50IGNvbmZpZ3VyYXRpb24uICovDQorICBCTEVfR0FQX0NGR19ERVZJQ0VfTkFNRSwgICAgICAgICAgICAgICAgICAgIC8qKjwgRGV2aWNlIG5hbWUgY29uZmlndXJhdGlvbi4gKi8NCit9Ow0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKkBhZGR0b2dyb3VwIEJMRV9HQVBfREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKipAZGVmZ3JvdXAgQkxFX0VSUk9SU19HQVAgU1ZDIHJldHVybiB2YWx1ZXMgc3BlY2lmaWMgdG8gR0FQDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVBfVVVJRF9MSVNUX01JU01BVENIICAgICAgICAgICAgKE5SRl9HQVBfRVJSX0JBU0UgKyAweDAwMCkgIC8qKjwgVVVJRCBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYW4gaW50ZWdyYWwgbnVtYmVyIG9mIFVVSURzLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0dBUF9ESVNDT1ZFUkFCTEVfV0lUSF9XSElURUxJU1QgICAoTlJGX0dBUF9FUlJfQkFTRSArIDB4MDAxKSAgLyoqPCBVc2Ugb2YgV2hpdGVsaXN0IG5vdCBwZXJtaXR0ZWQgd2l0aCBkaXNjb3ZlcmFibGUgYWR2ZXJ0aXNpbmcuICovDQorI2RlZmluZSBCTEVfRVJST1JfR0FQX0lOVkFMSURfQkxFX0FERFIgICAgICAgICAgICAgIChOUkZfR0FQX0VSUl9CQVNFICsgMHgwMDIpICAvKio8IFRoZSB1cHBlciB0d28gYml0cyBvZiB0aGUgYWRkcmVzcyBkbyBub3QgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgdHlwZS4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVBfV0hJVEVMSVNUX0lOX1VTRSAgICAgICAgICAgICAgKE5SRl9HQVBfRVJSX0JBU0UgKyAweDAwMykgIC8qKjwgQXR0ZW1wdCB0byBtb2RpZnkgdGhlIHdoaXRlbGlzdCB3aGlsZSBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIG9wZXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVBfREVWSUNFX0lERU5USVRJRVNfSU5fVVNFICAgICAgKE5SRl9HQVBfRVJSX0JBU0UgKyAweDAwNCkgIC8qKjwgQXR0ZW1wdCB0byBtb2RpZnkgdGhlIGRldmljZSBpZGVudGl0eSBsaXN0IHdoaWxlIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgb3BlcmF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0dBUF9ERVZJQ0VfSURFTlRJVElFU19EVVBMSUNBVEUgICAoTlJGX0dBUF9FUlJfQkFTRSArIDB4MDA1KSAgLyoqPCBUaGUgZGV2aWNlIGlkZW50aXR5IGxpc3QgY29udGFpbnMgZW50cmllcyB3aXRoIGR1cGxpY2F0ZSBpZGVudGl0eSBhZGRyZXNzZXMuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9ST0xFUyBHQVAgUm9sZXMNCisgKiBAbm90ZSBOb3QgZXhwbGljaXRseSB1c2VkIGluIHBlcmlwaGVyYWwgQVBJLCBidXQgd2lsbCBiZSByZWxldmFudCBmb3IgY2VudHJhbCBBUEkuDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfUk9MRV9JTlZBTElEICAgICAweDAgICAgICAgICAgICAvKio8IEludmFsaWQgUm9sZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUk9MRV9QRVJJUEggICAgICAweDEgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgUm9sZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUk9MRV9DRU5UUkFMICAgICAweDIgICAgICAgICAgICAvKio8IENlbnRyYWwgUm9sZS4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1RJTUVPVVRfU09VUkNFUyBHQVAgVGltZW91dCBzb3VyY2VzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfVElNRU9VVF9TUkNfQURWRVJUSVNJTkcgICAgICAgICAgICAgICAgMHgwMCAvKio8IEFkdmVydGlzaW5nIHRpbWVvdXQuICovDQorI2RlZmluZSBCTEVfR0FQX1RJTUVPVVRfU1JDX1NFQ1VSSVRZX1JFUVVFU1QgICAgICAgICAgIDB4MDEgLyoqPCBTZWN1cml0eSByZXF1ZXN0IHRpbWVvdXQuICovDQorI2RlZmluZSBCTEVfR0FQX1RJTUVPVVRfU1JDX1NDQU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLyoqPCBTY2FubmluZyB0aW1lb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9USU1FT1VUX1NSQ19DT05OICAgICAgICAgICAgICAgICAgICAgICAweDAzIC8qKjwgQ29ubmVjdGlvbiB0aW1lb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9USU1FT1VUX1NSQ19BVVRIX1BBWUxPQUQgICAgICAgICAgICAgICAweDA0IC8qKjwgQXV0aGVudGljYXRlZCBwYXlsb2FkIHRpbWVvdXQuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9BRERSX1RZUEVTIEdBUCBBZGRyZXNzIHR5cGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfQUREUl9UWVBFX1BVQkxJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAgLyoqPCBQdWJsaWMgYWRkcmVzcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQUREUl9UWVBFX1JBTkRPTV9TVEFUSUMgICAgICAgICAgICAgICAgIDB4MDEgLyoqPCBSYW5kb20gc3RhdGljIGFkZHJlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fUFJJVkFURV9SRVNPTFZBQkxFICAgICAweDAyIC8qKjwgUmFuZG9tIHByaXZhdGUgcmVzb2x2YWJsZSBhZGRyZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRERSX1RZUEVfUkFORE9NX1BSSVZBVEVfTk9OX1JFU09MVkFCTEUgMHgwMyAvKio8IFJhbmRvbSBwcml2YXRlIG5vbi1yZXNvbHZhYmxlIGFkZHJlc3MuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAYnJpZWYgVGhlIGRlZmF1bHQgaW50ZXJ2YWwgaW4gc2Vjb25kcyBhdCB3aGljaCBhIHByaXZhdGUgYWRkcmVzcyBpcyByZWZyZXNoZWQuICAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ERUZBVUxUX1BSSVZBVEVfQUREUl9DWUNMRV9JTlRFUlZBTF9TICg5MDApIC8qIDE1IG1pbnV0ZXMuICovDQorLyoqQGJyaWVmIFRoZSBtYXhpbXVtIGludGVydmFsIGluIHNlY29uZHMgYXQgd2hpY2ggYSBwcml2YXRlIGFkZHJlc3MgY2FuIGJlIHJlZnJlc2hlZC4gICovDQorI2RlZmluZSBCTEVfR0FQX01BWF9QUklWQVRFX0FERFJfQ1lDTEVfSU5URVJWQUxfUyAgICAgKDQxNDAwKSAvKiAxMSBob3VycyAzMCBtaW51dGVzLiAqLw0KKw0KKw0KKy8qKiBAYnJpZWYgQkxFIGFkZHJlc3MgbGVuZ3RoLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRERSX0xFTiAoNikNCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9QUklWQUNZX01PREVTIFByaXZhY3kgbW9kZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9QUklWQUNZX01PREVfT0ZGICAgICAgICAgICAgICAgICAgICAgICAweDAwIC8qKjwgRGV2aWNlIHdpbGwgc2VuZCBhbmQgYWNjZXB0IGl0cyBpZGVudGl0eSBhZGRyZXNzIGZvciBpdHMgb3duIGFkZHJlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX1BSSVZBQ1lfTU9ERV9ERVZJQ0VfUFJJVkFDWSAgICAgICAgICAgIDB4MDEgLyoqPCBEZXZpY2Ugd2lsbCBzZW5kIGFuZCBhY2NlcHQgb25seSBwcml2YXRlIGFkZHJlc3NlcyBmb3IgaXRzIG93biBhZGRyZXNzLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfQURfVFlQRV9ERUZJTklUSU9OUyBHQVAgQWR2ZXJ0aXNpbmcgYW5kIFNjYW4gUmVzcG9uc2UgRGF0YSBmb3JtYXQNCisgKiBAbm90ZSBGb3VuZCBhdCBodHRwczovL3d3dy5ibHVldG9vdGgub3JnL1RlY2huaWNhbC9Bc3NpZ25lZE51bWJlcnMvZ2VuZXJpY19hY2Nlc3NfcHJvZmlsZS5odG0NCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgLyoqPCBGbGFncyBmb3IgZGlzY292ZXJhYmlsaXR5LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFXzE2QklUX1NFUlZJQ0VfVVVJRF9NT1JFX0FWQUlMQUJMRSAgIDB4MDIgLyoqPCBQYXJ0aWFsIGxpc3Qgb2YgMTYgYml0IHNlcnZpY2UgVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfMTZCSVRfU0VSVklDRV9VVUlEX0NPTVBMRVRFICAgICAgICAgMHgwMyAvKio8IENvbXBsZXRlIGxpc3Qgb2YgMTYgYml0IHNlcnZpY2UgVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfMzJCSVRfU0VSVklDRV9VVUlEX01PUkVfQVZBSUxBQkxFICAgMHgwNCAvKio8IFBhcnRpYWwgbGlzdCBvZiAzMiBiaXQgc2VydmljZSBVVUlEcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV8zMkJJVF9TRVJWSUNFX1VVSURfQ09NUExFVEUgICAgICAgICAweDA1IC8qKjwgQ29tcGxldGUgbGlzdCBvZiAzMiBiaXQgc2VydmljZSBVVUlEcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV8xMjhCSVRfU0VSVklDRV9VVUlEX01PUkVfQVZBSUxBQkxFICAweDA2IC8qKjwgUGFydGlhbCBsaXN0IG9mIDEyOCBiaXQgc2VydmljZSBVVUlEcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV8xMjhCSVRfU0VSVklDRV9VVUlEX0NPTVBMRVRFICAgICAgICAweDA3IC8qKjwgQ29tcGxldGUgbGlzdCBvZiAxMjggYml0IHNlcnZpY2UgVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0hPUlRfTE9DQUxfTkFNRSAgICAgICAgICAgICAgICAgICAgMHgwOCAvKio8IFNob3J0IGxvY2FsIGRldmljZSBuYW1lLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX0NPTVBMRVRFX0xPQ0FMX05BTUUgICAgICAgICAgICAgICAgIDB4MDkgLyoqPCBDb21wbGV0ZSBsb2NhbCBkZXZpY2UgbmFtZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9UWF9QT1dFUl9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAweDBBIC8qKjwgVHJhbnNtaXQgcG93ZXIgbGV2ZWwuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfQ0xBU1NfT0ZfREVWSUNFICAgICAgICAgICAgICAgICAgICAgMHgwRCAvKio8IENsYXNzIG9mIGRldmljZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9TSU1QTEVfUEFJUklOR19IQVNIX0MgICAgICAgICAgICAgICAweDBFIC8qKjwgU2ltcGxlIFBhaXJpbmcgSGFzaCBDLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NJTVBMRV9QQUlSSU5HX1JBTkRPTUlaRVJfUiAgICAgICAgIDB4MEYgLyoqPCBTaW1wbGUgUGFpcmluZyBSYW5kb21pemVyIFIuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0VDVVJJVFlfTUFOQUdFUl9US19WQUxVRSAgICAgICAgICAgMHgxMCAvKio8IFNlY3VyaXR5IE1hbmFnZXIgVEsgVmFsdWUuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0VDVVJJVFlfTUFOQUdFUl9PT0JfRkxBR1MgICAgICAgICAgMHgxMSAvKio8IFNlY3VyaXR5IE1hbmFnZXIgT3V0IE9mIEJhbmQgRmxhZ3MuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0xBVkVfQ09OTkVDVElPTl9JTlRFUlZBTF9SQU5HRSAgICAgMHgxMiAvKio8IFNsYXZlIENvbm5lY3Rpb24gSW50ZXJ2YWwgUmFuZ2UuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU09MSUNJVEVEX1NFUlZJQ0VfVVVJRFNfMTZCSVQgICAgICAgMHgxNCAvKio8IExpc3Qgb2YgMTYtYml0IFNlcnZpY2UgU29saWNpdGF0aW9uIFVVSURzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1NPTElDSVRFRF9TRVJWSUNFX1VVSURTXzEyOEJJVCAgICAgIDB4MTUgLyoqPCBMaXN0IG9mIDEyOC1iaXQgU2VydmljZSBTb2xpY2l0YXRpb24gVVVJRHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0VSVklDRV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiAvKio8IFNlcnZpY2UgRGF0YSAtIDE2LWJpdCBVVUlELiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX1BVQkxJQ19UQVJHRVRfQUREUkVTUyAgICAgICAgICAgICAgIDB4MTcgLyoqPCBQdWJsaWMgVGFyZ2V0IEFkZHJlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfUkFORE9NX1RBUkdFVF9BRERSRVNTICAgICAgICAgICAgICAgMHgxOCAvKio8IFJhbmRvbSBUYXJnZXQgQWRkcmVzcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9BUFBFQVJBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5IC8qKjwgQXBwZWFyYW5jZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9BRFZFUlRJU0lOR19JTlRFUlZBTCAgICAgICAgICAgICAgICAweDFBIC8qKjwgQWR2ZXJ0aXNpbmcgSW50ZXJ2YWwuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfTEVfQkxVRVRPT1RIX0RFVklDRV9BRERSRVNTICAgICAgICAgMHgxQiAvKio8IExFIEJsdWV0b290aCBEZXZpY2UgQWRkcmVzcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9MRV9ST0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDIC8qKjwgTEUgUm9sZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9TSU1QTEVfUEFJUklOR19IQVNIX0MyNTYgICAgICAgICAgICAweDFEIC8qKjwgU2ltcGxlIFBhaXJpbmcgSGFzaCBDLTI1Ni4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9TSU1QTEVfUEFJUklOR19SQU5ET01JWkVSX1IyNTYgICAgICAweDFFIC8qKjwgU2ltcGxlIFBhaXJpbmcgUmFuZG9taXplciBSLTI1Ni4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9TRVJWSUNFX0RBVEFfMzJCSVRfVVVJRCAgICAgICAgICAgICAweDIwIC8qKjwgU2VydmljZSBEYXRhIC0gMzItYml0IFVVSUQuICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfU0VSVklDRV9EQVRBXzEyOEJJVF9VVUlEICAgICAgICAgICAgMHgyMSAvKio8IFNlcnZpY2UgRGF0YSAtIDEyOC1iaXQgVVVJRC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURfVFlQRV9MRVNDX0NPTkZJUk1BVElPTl9WQUxVRSAgICAgICAgICAgICAweDIyIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIENvbmZpcm1hdGlvbiBWYWx1ZSAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX0xFU0NfUkFORE9NX1ZBTFVFICAgICAgICAgICAgICAgICAgIDB4MjMgLyoqPCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgUmFuZG9tIFZhbHVlICovDQorI2RlZmluZSBCTEVfR0FQX0FEX1RZUEVfVVJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNCAvKio8IFVSSSAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFXzNEX0lORk9STUFUSU9OX0RBVEEgICAgICAgICAgICAgICAgIDB4M0QgLyoqPCAzRCBJbmZvcm1hdGlvbiBEYXRhLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRF9UWVBFX01BTlVGQUNUVVJFUl9TUEVDSUZJQ19EQVRBICAgICAgICAgIDB4RkYgLyoqPCBNYW51ZmFjdHVyZXIgU3BlY2lmaWMgRGF0YS4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0FEVl9GTEFHUyBHQVAgQWR2ZXJ0aXNlbWVudCBGbGFncw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GTEFHX0xFX0xJTUlURURfRElTQ19NT0RFICAgICAgICAgKDB4MDEpICAgLyoqPCBMRSBMaW1pdGVkIERpc2NvdmVyYWJsZSBNb2RlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfRkxBR19MRV9HRU5FUkFMX0RJU0NfTU9ERSAgICAgICAgICgweDAyKSAgIC8qKjwgTEUgR2VuZXJhbCBEaXNjb3ZlcmFibGUgTW9kZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZMQUdfQlJfRURSX05PVF9TVVBQT1JURUQgICAgICAgICAoMHgwNCkgICAvKio8IEJSL0VEUiBub3Qgc3VwcG9ydGVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfRkxBR19MRV9CUl9FRFJfQ09OVFJPTExFUiAgICAgICAgICgweDA4KSAgIC8qKjwgU2ltdWx0YW5lb3VzIExFIGFuZCBCUi9FRFIsIENvbnRyb2xsZXIuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9GTEFHX0xFX0JSX0VEUl9IT1NUICAgICAgICAgICAgICAgKDB4MTApICAgLyoqPCBTaW11bHRhbmVvdXMgTEUgYW5kIEJSL0VEUiwgSG9zdC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZMQUdTX0xFX09OTFlfTElNSVRFRF9ESVNDX01PREUgICAoQkxFX0dBUF9BRFZfRkxBR19MRV9MSU1JVEVEX0RJU0NfTU9ERSB8IEJMRV9HQVBfQURWX0ZMQUdfQlJfRURSX05PVF9TVVBQT1JURUQpICAgLyoqPCBMRSBMaW1pdGVkIERpc2NvdmVyYWJsZSBNb2RlLCBCUi9FRFIgbm90IHN1cHBvcnRlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZMQUdTX0xFX09OTFlfR0VORVJBTF9ESVNDX01PREUgICAoQkxFX0dBUF9BRFZfRkxBR19MRV9HRU5FUkFMX0RJU0NfTU9ERSB8IEJMRV9HQVBfQURWX0ZMQUdfQlJfRURSX05PVF9TVVBQT1JURUQpICAgLyoqPCBMRSBHZW5lcmFsIERpc2NvdmVyYWJsZSBNb2RlLCBCUi9FRFIgbm90IHN1cHBvcnRlZC4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0FEVl9JTlRFUlZBTFMgR0FQIEFkdmVydGlzaW5nIGludGVydmFsIG1heCBhbmQgbWluDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0lOVEVSVkFMX01JTiAgICAgICAgMHgwMDIwIC8qKjwgTWluaW11bSBBZHZlcnRpc2luZyBpbnRlcnZhbCBpbiA2MjUgdXMgdW5pdHMsIGkuZS4gMjAgbXMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9OT05DT05fSU5URVJWQUxfTUlOIDB4MDBBMCAvKio8IE1pbmltdW0gQWR2ZXJ0aXNpbmcgaW50ZXJ2YWwgaW4gNjI1IHVzIHVuaXRzIGZvciBub24gY29ubmVjdGFibGUgbW9kZSwgaS5lLiAxMDAgbXMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9JTlRFUlZBTF9NQVggICAgICAgIDB4NDAwMCAvKio8IE1heGltdW0gQWR2ZXJ0aXNpbmcgaW50ZXJ2YWwgaW4gNjI1IHVzIHVuaXRzLCBpLmUuIDEwLjI0IHMuICovDQorIC8qKkB9ICAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1NDQU5fSU5URVJWQUxTIEdBUCBTY2FuIGludGVydmFsIG1heCBhbmQgbWluDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfU0NBTl9JTlRFUlZBTF9NSU4gICAgICAgMHgwMDA0IC8qKjwgTWluaW11bSBTY2FuIGludGVydmFsIGluIDYyNSB1cyB1bml0cywgaS5lLiAyLjUgbXMuICovDQorI2RlZmluZSBCTEVfR0FQX1NDQU5fSU5URVJWQUxfTUFYICAgICAgIDB4NDAwMCAvKio8IE1heGltdW0gU2NhbiBpbnRlcnZhbCBpbiA2MjUgdXMgdW5pdHMsIGkuZS4gMTAuMjQgcy4gKi8NCisgLyoqIEB9ICAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1NDQU5fV0lORE9XIEdBUCBTY2FuIHdpbmRvdyBtYXggYW5kIG1pbg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1NDQU5fV0lORE9XX01JTiAgICAgICAgIDB4MDAwNCAvKio8IE1pbmltdW0gU2NhbiB3aW5kb3cgaW4gNjI1IHVzIHVuaXRzLCBpLmUuIDIuNSBtcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0NBTl9XSU5ET1dfTUFYICAgICAgICAgMHg0MDAwIC8qKjwgTWF4aW11bSBTY2FuIHdpbmRvdyBpbiA2MjUgdXMgdW5pdHMsIGkuZS4gMTAuMjQgcy4gKi8NCisgLyoqIEB9ICAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1NDQU5fVElNRU9VVCBHQVAgU2NhbiB0aW1lb3V0IG1heCBhbmQgbWluDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfU0NBTl9USU1FT1VUX01JTiAgICAgICAgMHgwMDAxIC8qKjwgTWluaW11bSBTY2FuIHRpbWVvdXQgaW4gc2Vjb25kcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0NBTl9USU1FT1VUX01BWCAgICAgICAgMHhGRkZGIC8qKjwgTWF4aW11bSBTY2FuIHRpbWVvdXQgaW4gc2Vjb25kcy4gKi8NCisgLyoqIEB9ICAqLw0KKw0KKw0KKy8qKkBicmllZiBNYXhpbXVtIHNpemUgb2YgYWR2ZXJ0aXNpbmcgZGF0YSBpbiBvY3RldHMuICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9NQVhfU0laRSAgICAgICAgICAgICgzMSkNCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9BRFZfVFlQRVMgR0FQIEFkdmVydGlzaW5nIHR5cGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX1RZUEVfQURWX0lORCAgICAgICAgICAweDAwICAgLyoqPCBDb25uZWN0YWJsZSB1bmRpcmVjdGVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfVFlQRV9BRFZfRElSRUNUX0lORCAgIDB4MDEgICAvKio8IENvbm5lY3RhYmxlIGRpcmVjdGVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfVFlQRV9BRFZfU0NBTl9JTkQgICAgIDB4MDIgICAvKio8IFNjYW5uYWJsZSB1bmRpcmVjdGVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BRFZfVFlQRV9BRFZfTk9OQ09OTl9JTkQgIDB4MDMgICAvKio8IE5vbiBjb25uZWN0YWJsZSB1bmRpcmVjdGVkLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfQURWX0ZJTFRFUl9QT0xJQ0lFUyBHQVAgQWR2ZXJ0aXNpbmcgZmlsdGVyIHBvbGljaWVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZQX0FOWSAgICAgICAgICAgICAgICAweDAwICAgLyoqPCBBbGxvdyBzY2FuIHJlcXVlc3RzIGFuZCBjb25uZWN0IHJlcXVlc3RzIGZyb20gYW55IGRldmljZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZQX0ZJTFRFUl9TQ0FOUkVRICAgICAweDAxICAgLyoqPCBGaWx0ZXIgc2NhbiByZXF1ZXN0cyB3aXRoIHdoaXRlbGlzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZQX0ZJTFRFUl9DT05OUkVRICAgICAweDAyICAgLyoqPCBGaWx0ZXIgY29ubmVjdCByZXF1ZXN0cyB3aXRoIHdoaXRlbGlzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX0ZQX0ZJTFRFUl9CT1RIICAgICAgICAweDAzICAgLyoqPCBGaWx0ZXIgYm90aCBzY2FuIGFuZCBjb25uZWN0IHJlcXVlc3RzIHdpdGggd2hpdGVsaXN0LiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfQURWX1RJTUVPVVRfVkFMVUVTIEdBUCBBZHZlcnRpc2luZyB0aW1lb3V0IHZhbHVlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FEVl9USU1FT1VUX0xJTUlURURfTUFYICAgICAgICgxODApIC8qKjwgTWF4aW11bSBhZHZlcnRpc2luZyB0aW1lIGluIGxpbWl0ZWQgZGlzY292ZXJhYmxlIG1vZGUgKFRHQVAobGltX2Fkdl90aW1lb3V0KSA9IDE4MCBzKS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQURWX1RJTUVPVVRfR0VORVJBTF9VTkxJTUlURUQgKDApICAgLyoqPCBVbmxpbWl0ZWQgYWR2ZXJ0aXNpbmcgaW4gZ2VuZXJhbCBkaXNjb3ZlcmFibGUgbW9kZS4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0RJU0NfTU9ERVMgR0FQIERpc2NvdmVyeSBtb2Rlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0RJU0NfTU9ERV9OT1RfRElTQ09WRVJBQkxFICAweDAwICAgLyoqPCBOb3QgZGlzY292ZXJhYmxlIGRpc2NvdmVyeSBNb2RlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ESVNDX01PREVfTElNSVRFRCAgICAgICAgICAgMHgwMSAgIC8qKjwgTGltaXRlZCBEaXNjb3ZlcnkgTW9kZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfRElTQ19NT0RFX0dFTkVSQUwgICAgICAgICAgIDB4MDIgICAvKio8IEdlbmVyYWwgRGlzY292ZXJ5IE1vZGUuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9JT19DQVBTIEdBUCBJTyBDYXBhYmlsaXRpZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9JT19DQVBTX0RJU1BMQVlfT05MWSAgICAgIDB4MDAgICAvKio8IERpc3BsYXkgT25seS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfSU9fQ0FQU19ESVNQTEFZX1lFU05PICAgICAweDAxICAgLyoqPCBEaXNwbGF5IGFuZCBZZXMvTm8gZW50cnkuICovDQorI2RlZmluZSBCTEVfR0FQX0lPX0NBUFNfS0VZQk9BUkRfT05MWSAgICAgMHgwMiAgIC8qKjwgS2V5Ym9hcmQgT25seS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfSU9fQ0FQU19OT05FICAgICAgICAgICAgICAweDAzICAgLyoqPCBObyBJL08gY2FwYWJpbGl0aWVzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9JT19DQVBTX0tFWUJPQVJEX0RJU1BMQVkgIDB4MDQgICAvKio8IEtleWJvYXJkIGFuZCBEaXNwbGF5LiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfQVVUSF9LRVlfVFlQRVMgR0FQIEF1dGhlbnRpY2F0aW9uIEtleSBUeXBlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0FVVEhfS0VZX1RZUEVfTk9ORSAgICAgICAgMHgwMCAgIC8qKjwgTm8ga2V5IChtYXkgYmUgdXNlZCB0byByZWplY3QpLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9BVVRIX0tFWV9UWVBFX1BBU1NLRVkgICAgIDB4MDEgICAvKio8IDYtZGlnaXQgUGFzc2tleS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9PT0IgICAgICAgICAweDAyICAgLyoqPCBPdXQgT2YgQmFuZCBkYXRhLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfS1BfTk9UX1RZUEVTIEdBUCBLZXlwcmVzcyBOb3RpZmljYXRpb24gVHlwZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9LUF9OT1RfVFlQRV9QQVNTS0VZX1NUQVJUICAgICAgIDB4MDAgICAvKio8IFBhc3NrZXkgZW50cnkgc3RhcnRlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfS1BfTk9UX1RZUEVfUEFTU0tFWV9ESUdJVF9JTiAgICAweDAxICAgLyoqPCBQYXNza2V5IGRpZ2l0IGVudGVyZWQuICovDQorI2RlZmluZSBCTEVfR0FQX0tQX05PVF9UWVBFX1BBU1NLRVlfRElHSVRfT1VUICAgMHgwMiAgIC8qKjwgUGFzc2tleSBkaWdpdCBlcmFzZWQuICovDQorI2RlZmluZSBCTEVfR0FQX0tQX05PVF9UWVBFX1BBU1NLRVlfQ0xFQVIgICAgICAgMHgwMyAgIC8qKjwgUGFzc2tleSBjbGVhcmVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9LUF9OT1RfVFlQRV9QQVNTS0VZX0VORCAgICAgICAgIDB4MDQgICAvKio8IFBhc3NrZXkgZW50cnkgY29tcGxldGVkLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfU0VDX1NUQVRVUyBHQVAgU2VjdXJpdHkgc3RhdHVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgIDB4MDAgIC8qKjwgUHJvY2VkdXJlIGNvbXBsZXRlZCB3aXRoIHN1Y2Nlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfVElNRU9VVCAgICAgICAgICAgICAgICAweDAxICAvKio8IFByb2NlZHVyZSB0aW1lZCBvdXQuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfUERVX0lOVkFMSUQgICAgICAgICAgICAweDAyICAvKio8IEludmFsaWQgUERVIHJlY2VpdmVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1JGVV9SQU5HRTFfQkVHSU4gICAgICAgMHgwMyAgLyoqPCBSZXNlcnZlZCBmb3IgRnV0dXJlIFVzZSByYW5nZSAjMSBiZWdpbi4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19SRlVfUkFOR0UxX0VORCAgICAgICAgIDB4ODAgIC8qKjwgUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UgcmFuZ2UgIzEgZW5kLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1BBU1NLRVlfRU5UUllfRkFJTEVEICAgMHg4MSAgLyoqPCBQYXNza2V5IGVudHJ5IGZhaWxlZCAodXNlciBjYW5jZWxlZCBvciBvdGhlcikuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfT09CX05PVF9BVkFJTEFCTEUgICAgICAweDgyICAvKio8IE91dCBvZiBCYW5kIEtleSBub3QgYXZhaWxhYmxlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX0FVVEhfUkVRICAgICAgICAgICAgICAgMHg4MyAgLyoqPCBBdXRoZW50aWNhdGlvbiByZXF1aXJlbWVudHMgbm90IG1ldC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19DT05GSVJNX1ZBTFVFICAgICAgICAgIDB4ODQgIC8qKjwgQ29uZmlybSB2YWx1ZSBmYWlsZWQuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfUEFJUklOR19OT1RfU1VQUCAgICAgICAweDg1ICAvKio8IFBhaXJpbmcgbm90IHN1cHBvcnRlZC4gICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfRU5DX0tFWV9TSVpFICAgICAgICAgICAweDg2ICAvKio8IEVuY3J5cHRpb24ga2V5IHNpemUuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfU01QX0NNRF9VTlNVUFBPUlRFRCAgICAweDg3ICAvKio8IFVuc3VwcG9ydGVkIFNNUCBjb21tYW5kLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1VOU1BFQ0lGSUVEICAgICAgICAgICAgMHg4OCAgLyoqPCBVbnNwZWNpZmllZCByZWFzb24uICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfUkVQRUFURURfQVRURU1QVFMgICAgICAweDg5ICAvKio8IFRvbyBsaXR0bGUgdGltZSBlbGFwc2VkIHNpbmNlIGxhc3QgYXR0ZW1wdC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19JTlZBTElEX1BBUkFNUyAgICAgICAgIDB4OEEgIC8qKjwgSW52YWxpZCBwYXJhbWV0ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX0RIS0VZX0ZBSUxVUkUgICAgICAgICAgMHg4QiAgLyoqPCBESEtleSBjaGVjayBmYWlsdXJlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX05VTV9DT01QX0ZBSUxVUkUgICAgICAgMHg4QyAgLyoqPCBOdW1lcmljIENvbXBhcmlzb24gZmFpbHVyZS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19CUl9FRFJfSU5fUFJPRyAgICAgICAgIDB4OEQgIC8qKjwgQlIvRURSIHBhaXJpbmcgaW4gcHJvZ3Jlc3MuICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfWF9UUkFOU19LRVlfRElTQUxMT1dFRCAweDhFICAvKio8IEJSL0VEUiBMaW5rIEtleSBjYW5ub3QgYmUgdXNlZCBmb3IgTEUga2V5cy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1NUQVRVU19SRlVfUkFOR0UyX0JFR0lOICAgICAgIDB4OEYgIC8qKjwgUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UgcmFuZ2UgIzIgYmVnaW4uICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19TVEFUVVNfUkZVX1JBTkdFMl9FTkQgICAgICAgICAweEZGICAvKio8IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMyIGVuZC4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX1NFQ19TVEFUVVNfU09VUkNFUyBHQVAgU2VjdXJpdHkgc3RhdHVzIHNvdXJjZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1NPVVJDRV9MT0NBTCAgICAgICAgICAgMHgwMCAgLyoqPCBMb2NhbCBmYWlsdXJlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TRUNfU1RBVFVTX1NPVVJDRV9SRU1PVEUgICAgICAgICAgMHgwMSAgLyoqPCBSZW1vdGUgZmFpbHVyZS4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0NQX0xJTUlUUyBHQVAgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzIExpbWl0cw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0NQX01JTl9DT05OX0lOVFZMX05PTkUgICAgICAgICAgIDB4RkZGRiAgLyoqPCBObyBuZXcgbWluaW11bSBjb25uZWN0aW9uIGludGVydmFsIHNwZWNpZmllZCBpbiBjb25uZWN0IHBhcmFtZXRlcnMuICovDQorI2RlZmluZSBCTEVfR0FQX0NQX01JTl9DT05OX0lOVFZMX01JTiAgICAgICAgICAgIDB4MDAwNiAgLyoqPCBMb3dlc3QgbWluaW11bSBjb25uZWN0aW9uIGludGVydmFsIHBlcm1pdHRlZCwgaW4gdW5pdHMgb2YgMS4yNSBtcywgaS5lLiA3LjUgbXMuICovDQorI2RlZmluZSBCTEVfR0FQX0NQX01JTl9DT05OX0lOVFZMX01BWCAgICAgICAgICAgIDB4MEM4MCAgLyoqPCBIaWdoZXN0IG1pbmltdW0gY29ubmVjdGlvbiBpbnRlcnZhbCBwZXJtaXR0ZWQsIGluIHVuaXRzIG9mIDEuMjUgbXMsIGkuZS4gNCBzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9NQVhfQ09OTl9JTlRWTF9OT05FICAgICAgICAgICAweEZGRkYgIC8qKjwgTm8gbmV3IG1heGltdW0gY29ubmVjdGlvbiBpbnRlcnZhbCBzcGVjaWZpZWQgaW4gY29ubmVjdCBwYXJhbWV0ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9NQVhfQ09OTl9JTlRWTF9NSU4gICAgICAgICAgICAweDAwMDYgIC8qKjwgTG93ZXN0IG1heGltdW0gY29ubmVjdGlvbiBpbnRlcnZhbCBwZXJtaXR0ZWQsIGluIHVuaXRzIG9mIDEuMjUgbXMsIGkuZS4gNy41IG1zLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9NQVhfQ09OTl9JTlRWTF9NQVggICAgICAgICAgICAweDBDODAgIC8qKjwgSGlnaGVzdCBtYXhpbXVtIGNvbm5lY3Rpb24gaW50ZXJ2YWwgcGVybWl0dGVkLCBpbiB1bml0cyBvZiAxLjI1IG1zLCBpLmUuIDQgcy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfU0xBVkVfTEFURU5DWV9NQVggICAgICAgICAgICAgMHgwMUYzICAvKio8IEhpZ2hlc3Qgc2xhdmUgbGF0ZW5jeSBwZXJtaXR0ZWQsIGluIGNvbm5lY3Rpb24gZXZlbnRzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9DT05OX1NVUF9USU1FT1VUX05PTkUgICAgICAgICAweEZGRkYgIC8qKjwgTm8gbmV3IHN1cGVydmlzaW9uIHRpbWVvdXQgc3BlY2lmaWVkIGluIGNvbm5lY3QgcGFyYW1ldGVycy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfQ1BfQ09OTl9TVVBfVElNRU9VVF9NSU4gICAgICAgICAgMHgwMDBBICAvKio8IExvd2VzdCBzdXBlcnZpc2lvbiB0aW1lb3V0IHBlcm1pdHRlZCwgaW4gdW5pdHMgb2YgMTAgbXMsIGkuZS4gMTAwIG1zLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DUF9DT05OX1NVUF9USU1FT1VUX01BWCAgICAgICAgICAweDBDODAgIC8qKjwgSGlnaGVzdCBzdXBlcnZpc2lvbiB0aW1lb3V0IHBlcm1pdHRlZCwgaW4gdW5pdHMgb2YgMTAgbXMsIGkuZS4gMzIgcy4gKi8NCisvKipAfSAqLw0KKw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0RFVk5BTUUgR0FQIGRldmljZSBuYW1lIGRlZmluZXMuDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfREVWTkFNRV9ERUZBVUxUICAgICAgICAgICAgICAgICAgIm5SRjV4IiAvKio8IERlZmF1bHQgZGV2aWNlIG5hbWUgdmFsdWUuICovDQorI2RlZmluZSBCTEVfR0FQX0RFVk5BTUVfREVGQVVMVF9MRU4gICAgICAgICAgICAgIDMxICAgICAgLyoqPCBEZWZhdWx0IG51bWJlciBvZiBvY3RldHMgaW4gZGV2aWNlIG5hbWUuICovDQorI2RlZmluZSBCTEVfR0FQX0RFVk5BTUVfTUFYX0xFTiAgICAgICAgICAgICAgICAgIDI0OCAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBvY3RldHMgaW4gZGV2aWNlIG5hbWUuICovDQorLyoqQH0gKi8NCisNCisNCisvKipAYnJpZWYgRGlzYWJsZSBSU1NJIGV2ZW50cyBmb3IgY29ubmVjdGlvbnMgKi8NCisjZGVmaW5lIEJMRV9HQVBfUlNTSV9USFJFU0hPTERfSU5WQUxJRCAweEZGDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfUEhZUyBHQVAgUEhZcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX1BIWV8xTUJQUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgICAgLyoqPCAxIE1icHMgUEhZLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9QSFlfMk1CUFMgICAgICAgICAgICAgICAgICAgICAgICAweDAyICAgIC8qKjwgMiBNYnBzIFBIWS4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUEhZX0NPREVEICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCAgICAvKio8IENvZGVkIFBIWS4gKi8NCisvKipAfSAqLw0KKw0KKy8qKkBkZWZncm91cCBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX01BQ1JPUyBHQVAgYXR0cmlidXRlIHNlY3VyaXR5IHJlcXVpcmVtZW50IHNldHRlcnMNCisgKg0KKyAqIFNlZSBAcmVmIGJsZV9nYXBfY29ubl9zZWNfbW9kZV90Lg0KKyAqIEB7ICovDQorLyoqQGJyaWVmIFNldCBzZWNfbW9kZSBwb2ludGVkIHRvIGJ5IHB0ciB0byBoYXZlIG5vIGFjY2VzcyByaWdodHMuKi8NCisjZGVmaW5lIEJMRV9HQVBfQ09OTl9TRUNfTU9ERV9TRVRfTk9fQUNDRVNTKHB0cikgICAgICAgICAgZG8geyhwdHIpLT5zbSA9IDA7IChwdHIpLT5sdiA9IDA7fSB3aGlsZSgwKQ0KKy8qKkBicmllZiBTZXQgc2VjX21vZGUgcG9pbnRlZCB0byBieSBwdHIgdG8gcmVxdWlyZSBubyBwcm90ZWN0aW9uLCBvcGVuIGxpbmsuKi8NCisjZGVmaW5lIEJMRV9HQVBfQ09OTl9TRUNfTU9ERV9TRVRfT1BFTihwdHIpICAgICAgICAgICAgICAgZG8geyhwdHIpLT5zbSA9IDE7IChwdHIpLT5sdiA9IDE7fSB3aGlsZSgwKQ0KKy8qKkBicmllZiBTZXQgc2VjX21vZGUgcG9pbnRlZCB0byBieSBwdHIgdG8gcmVxdWlyZSBlbmNyeXB0aW9uLCBidXQgbm8gTUlUTSBwcm90ZWN0aW9uLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX0VOQ19OT19NSVRNKHB0cikgICAgICAgIGRvIHsocHRyKS0+c20gPSAxOyAocHRyKS0+bHYgPSAyO30gd2hpbGUoMCkNCisvKipAYnJpZWYgU2V0IHNlY19tb2RlIHBvaW50ZWQgdG8gYnkgcHRyIHRvIHJlcXVpcmUgZW5jcnlwdGlvbiBhbmQgTUlUTSBwcm90ZWN0aW9uLiovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fU0VDX01PREVfU0VUX0VOQ19XSVRIX01JVE0ocHRyKSAgICAgIGRvIHsocHRyKS0+c20gPSAxOyAocHRyKS0+bHYgPSAzO30gd2hpbGUoMCkNCisvKipAYnJpZWYgU2V0IHNlY19tb2RlIHBvaW50ZWQgdG8gYnkgcHRyIHRvIHJlcXVpcmUgTEVTQyBlbmNyeXB0aW9uIGFuZCBNSVRNIHByb3RlY3Rpb24uKi8NCisjZGVmaW5lIEJMRV9HQVBfQ09OTl9TRUNfTU9ERV9TRVRfTEVTQ19FTkNfV0lUSF9NSVRNKHB0cikgZG8geyhwdHIpLT5zbSA9IDE7IChwdHIpLT5sdiA9IDQ7fSB3aGlsZSgwKQ0KKy8qKkBicmllZiBTZXQgc2VjX21vZGUgcG9pbnRlZCB0byBieSBwdHIgdG8gcmVxdWlyZSBzaWduaW5nIG9yIGVuY3J5cHRpb24sIG5vIE1JVE0gcHJvdGVjdGlvbiBuZWVkZWQuKi8NCisjZGVmaW5lIEJMRV9HQVBfQ09OTl9TRUNfTU9ERV9TRVRfU0lHTkVEX05PX01JVE0ocHRyKSAgICAgZG8geyhwdHIpLT5zbSA9IDI7IChwdHIpLT5sdiA9IDE7fSB3aGlsZSgwKQ0KKy8qKkBicmllZiBTZXQgc2VjX21vZGUgcG9pbnRlZCB0byBieSBwdHIgdG8gcmVxdWlyZSBzaWduaW5nIG9yIGVuY3J5cHRpb24gd2l0aCBNSVRNIHByb3RlY3Rpb24uKi8NCisjZGVmaW5lIEJMRV9HQVBfQ09OTl9TRUNfTU9ERV9TRVRfU0lHTkVEX1dJVEhfTUlUTShwdHIpICAgZG8geyhwdHIpLT5zbSA9IDI7IChwdHIpLT5sdiA9IDI7fSB3aGlsZSgwKQ0KKy8qKkB9ICovDQorDQorDQorLyoqQGJyaWVmIEdBUCBTZWN1cml0eSBSYW5kb20gTnVtYmVyIExlbmd0aC4gKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX1JBTkRfTEVOIDgNCisNCisNCisvKipAYnJpZWYgR0FQIFNlY3VyaXR5IEtleSBMZW5ndGguICovDQorI2RlZmluZSBCTEVfR0FQX1NFQ19LRVlfTEVOIDE2DQorDQorDQorLyoqQGJyaWVmIEdBUCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgRWxsaXB0aWMgQ3VydmUgRGlmZmllLUhlbGxtYW4gUC0yNTYgUHVibGljIEtleSBMZW5ndGguICovDQorI2RlZmluZSBCTEVfR0FQX0xFU0NfUDI1Nl9QS19MRU4gNjQNCisNCisNCisvKipAYnJpZWYgR0FQIExFIFNlY3VyZSBDb25uZWN0aW9ucyBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUtSGVsbG1hbiBESEtleSBMZW5ndGguICovDQorI2RlZmluZSBCTEVfR0FQX0xFU0NfREhLRVlfTEVOICAgMzINCisNCisNCisvKipAYnJpZWYgR0FQIFBhc3NrZXkgTGVuZ3RoLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9QQVNTS0VZX0xFTiA2DQorDQorDQorLyoqQGJyaWVmIE1heGltdW0gYW1vdW50IG9mIGFkZHJlc3NlcyBpbiB0aGUgd2hpdGVsaXN0LiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9XSElURUxJU1RfQUREUl9NQVhfQ09VTlQgKDgpDQorDQorDQorLyoqQGJyaWVmIE1heGltdW0gYW1vdW50IG9mIGlkZW50aXRpZXMgaW4gdGhlIGRldmljZSBpZGVudGl0aWVzIGxpc3QuICovDQorI2RlZmluZSBCTEVfR0FQX0RFVklDRV9JREVOVElUSUVTX01BWF9DT1VOVCAoOCkNCisNCisNCisvKipAYnJpZWYgRGVmYXVsdCBjb25uZWN0aW9uIGNvdW50IGZvciBhIGNvbmZpZ3VyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FQX0NPTk5fQ09VTlRfREVGQVVMVCAoMSkNCisNCisNCisvKipAZGVmZ3JvdXAgQkxFX0dBUF9FVkVOVF9MRU5HVEggR0FQIGV2ZW50IGxlbmd0aCBkZWZpbmVzLg0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FQX0VWRU5UX0xFTkdUSF9NSU4gICAgICgyKSAgLyoqPCBNaW5pbXVtIGV2ZW50IGxlbmd0aCwgaW4gMS4yNSBtcyB1bml0cy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfRVZFTlRfTEVOR1RIX0RFRkFVTFQgKDMpICAvKio8IERlZmF1bHQgZXZlbnQgbGVuZ3RoLCBpbiAxLjI1IG1zIHVuaXRzLiAqLw0KKy8qKkB9ICovDQorDQorDQorLyoqQGRlZmdyb3VwIEJMRV9HQVBfUk9MRV9DT1VOVCBHQVAgY29uY3VycmVudCBjb25uZWN0aW9uIGNvdW50IGRlZmluZXMuDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfUk9MRV9DT1VOVF9QRVJJUEhfREVGQVVMVCAgICAgICgxKSAgIC8qKjwgRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBjb25jdXJyZW50bHkgYWN0aW5nIGFzIHBlcmlwaGVyYWxzLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9ST0xFX0NPVU5UX0NFTlRSQUxfREVGQVVMVCAgICAgKDMpICAgLyoqPCBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGNvbmN1cnJlbnRseSBhY3RpbmcgYXMgY2VudHJhbHMuICovDQorI2RlZmluZSBCTEVfR0FQX1JPTEVfQ09VTlRfQ0VOVFJBTF9TRUNfREVGQVVMVCAoMSkgICAvKio8IERlZmF1bHQgbnVtYmVyIG9mIFNNUCBpbnN0YW5jZXMgc2hhcmVkIGJldHdlZW4gYWxsIGNvbm5lY3Rpb25zIGFjdGluZyBhcyBjZW50cmFscy4gKi8NCisjZGVmaW5lIEJMRV9HQVBfUk9MRV9DT1VOVF9DT01CSU5FRF9NQVggICAgICAgICgyMCkgIC8qKjwgTWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgaW4gdGhlIHBlcmlwaGVyYWwgYW5kIGNlbnRyYWwgcm9sZXMgY29tYmluZWQuICovDQorLyoqQH0gKi8NCisNCisNCisNCisNCisvKipAYnJpZWYgQXV0b21hdGljIGRhdGEgbGVuZ3RoIHBhcmFtZXRlci4gKi8NCisjZGVmaW5lIEJMRV9HQVBfREFUQV9MRU5HVEhfQVVUTyAwDQorDQorDQorLyoqQGRlZmdyb3VwIEdBUF9TRUNfTU9ERVMgR0FQIFNlY3VyaXR5IE1vZGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVBfU0VDX01PREUgMHgwMCAvKio8IE5vIGtleSAobWF5IGJlIHVzZWQgdG8gcmVqZWN0KS4gKi8NCisvKipAfSAqLw0KKy8qKiBAfSAqLw0KKw0KKw0KKy8qKkBhZGR0b2dyb3VwIEJMRV9HQVBfU1RSVUNUVVJFUyBTdHJ1Y3R1cmVzDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgQmx1ZXRvb3RoIExvdyBFbmVyZ3kgYWRkcmVzcy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgYWRkcl9pZF9wZWVyIDogMTsgICAgICAgLyoqPCBPbmx5IHZhbGlkIGZvciBwZWVyIGFkZHJlc3Nlcy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgdG8gcGVlciBpbiBkZXZpY2UgaWRlbnRpdGllcyBsaXN0IChhcyBzZXQgd2l0aCBAcmVmIHNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KSB3aGVuIHBlZXIgaXMgdXNpbmcgcHJpdmFjeS4gKi8NCisgIHVpbnQ4X3QgYWRkcl90eXBlICAgIDogNzsgICAgICAgLyoqPCBTZWUgQHJlZiBCTEVfR0FQX0FERFJfVFlQRVMuICovDQorICB1aW50OF90IGFkZHJbQkxFX0dBUF9BRERSX0xFTl07IC8qKjwgNDgtYml0IGFkZHJlc3MsIExTQiBmb3JtYXQuICovDQorfSBibGVfZ2FwX2FkZHJfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4NCisgKg0KKyAqIEBub3RlICBXaGVuIGJsZV9jb25uX3BhcmFtc190IGlzIHJlY2VpdmVkIGluIGFuIGV2ZW50LCBib3RoIG1pbl9jb25uX2ludGVydmFsIGFuZA0KKyAqICAgICAgICBtYXhfY29ubl9pbnRlcnZhbCB3aWxsIGJlIGVxdWFsIHRvIHRoZSBjb25uZWN0aW9uIGludGVydmFsIHNldCBieSB0aGUgY2VudHJhbC4NCisgKg0KKyAqIEBub3RlICBJZiBib3RoIGNvbm5fc3VwX3RpbWVvdXQgYW5kIG1heF9jb25uX2ludGVydmFsIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhlIGZvbGxvd2luZyBjb25zdHJhaW50IGFwcGxpZXM6DQorICogICAgICAgIGNvbm5fc3VwX3RpbWVvdXQgKiA0ID4gKDEgKyBzbGF2ZV9sYXRlbmN5KSAqIG1heF9jb25uX2ludGVydmFsDQorICogICAgICAgIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZvbGxvd2luZyBCbHVldG9vdGggU3BlYyByZXF1aXJlbWVudDoNCisgKiAgICAgICAgVGhlIFN1cGVydmlzaW9uX1RpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHNoYWxsIGJlIGxhcmdlciB0aGFuDQorICogICAgICAgICgxICsgQ29ubl9MYXRlbmN5KSAqIENvbm5fSW50ZXJ2YWxfTWF4ICogMiwgd2hlcmUgQ29ubl9JbnRlcnZhbF9NYXggaXMgZ2l2ZW4gaW4gbWlsbGlzZWNvbmRzLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgbWluX2Nvbm5faW50ZXJ2YWw7ICAgICAgICAgLyoqPCBNaW5pbXVtIENvbm5lY3Rpb24gSW50ZXJ2YWwgaW4gMS4yNSBtcyB1bml0cywgc2VlIEByZWYgQkxFX0dBUF9DUF9MSU1JVFMuKi8NCisgIHVpbnQxNl90IG1heF9jb25uX2ludGVydmFsOyAgICAgICAgIC8qKjwgTWF4aW11bSBDb25uZWN0aW9uIEludGVydmFsIGluIDEuMjUgbXMgdW5pdHMsIHNlZSBAcmVmIEJMRV9HQVBfQ1BfTElNSVRTLiovDQorICB1aW50MTZfdCBzbGF2ZV9sYXRlbmN5OyAgICAgICAgICAgICAvKio8IFNsYXZlIExhdGVuY3kgaW4gbnVtYmVyIG9mIGNvbm5lY3Rpb24gZXZlbnRzLCBzZWUgQHJlZiBCTEVfR0FQX0NQX0xJTUlUUy4qLw0KKyAgdWludDE2X3QgY29ubl9zdXBfdGltZW91dDsgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIFN1cGVydmlzaW9uIFRpbWVvdXQgaW4gMTAgbXMgdW5pdHMsIHNlZSBAcmVmIEJMRV9HQVBfQ1BfTElNSVRTLiovDQorfSBibGVfZ2FwX2Nvbm5fcGFyYW1zX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBjb25uZWN0aW9uIHNlY3VyaXR5IG1vZGVzLg0KKyAqDQorICogU2VjdXJpdHkgTW9kZSAwIExldmVsIDA6IE5vIGFjY2VzcyBwZXJtaXNzaW9ucyBhdCBhbGwgKHRoaXMgbGV2ZWwgaXMgbm90IGRlZmluZWQgYnkgdGhlIEJsdWV0b290aCBDb3JlIHNwZWNpZmljYXRpb24pLlxuDQorICogU2VjdXJpdHkgTW9kZSAxIExldmVsIDE6IE5vIHNlY3VyaXR5IGlzIG5lZWRlZCAoYWthIG9wZW4gbGluaykuXG4NCisgKiBTZWN1cml0eSBNb2RlIDEgTGV2ZWwgMjogRW5jcnlwdGVkIGxpbmsgcmVxdWlyZWQsIE1JVE0gcHJvdGVjdGlvbiBub3QgbmVjZXNzYXJ5LlxuDQorICogU2VjdXJpdHkgTW9kZSAxIExldmVsIDM6IE1JVE0gcHJvdGVjdGVkIGVuY3J5cHRlZCBsaW5rIHJlcXVpcmVkLlxuDQorICogU2VjdXJpdHkgTW9kZSAxIExldmVsIDQ6IExFU0MgTUlUTSBwcm90ZWN0ZWQgZW5jcnlwdGVkIGxpbmsgcmVxdWlyZWQuXG4NCisgKiBTZWN1cml0eSBNb2RlIDIgTGV2ZWwgMTogU2lnbmluZyBvciBlbmNyeXB0aW9uIHJlcXVpcmVkLCBNSVRNIHByb3RlY3Rpb24gbm90IG5lY2Vzc2FyeS5cbg0KKyAqIFNlY3VyaXR5IE1vZGUgMiBMZXZlbCAyOiBNSVRNIHByb3RlY3RlZCBzaWduaW5nIHJlcXVpcmVkLCB1bmxlc3MgbGluayBpcyBNSVRNIHByb3RlY3RlZCBlbmNyeXB0ZWQuXG4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3Qgc20gOiA0OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VjdXJpdHkgTW9kZSAoMSBvciAyKSwgMCBmb3Igbm8gcGVybWlzc2lvbnMgYXQgYWxsLiAqLw0KKyAgdWludDhfdCBsdiA6IDQ7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBMZXZlbCAoMSwgMiwgMyBvciA0KSwgMCBmb3Igbm8gcGVybWlzc2lvbnMgYXQgYWxsLiAqLw0KKw0KK30gYmxlX2dhcF9jb25uX3NlY19tb2RlX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBjb25uZWN0aW9uIHNlY3VyaXR5IHN0YXR1cy4qLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9jb25uX3NlY19tb2RlX3Qgc2VjX21vZGU7ICAgICAgICAgICAvKio8IEN1cnJlbnRseSBhY3RpdmUgc2VjdXJpdHkgbW9kZSBmb3IgdGhpcyBjb25uZWN0aW9uLiovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICBlbmNyX2tleV9zaXplOyAgICAgIC8qKjwgTGVuZ3RoIG9mIGN1cnJlbnRseSBhY3RpdmUgZW5jcnlwdGlvbiBrZXksIDcgdG8gMTYgb2N0ZXRzIChvbmx5IGFwcGxpY2FibGUgZm9yIGJvbmRpbmcgcHJvY2VkdXJlcykuICovDQorfSBibGVfZ2FwX2Nvbm5fc2VjX3Q7DQorDQorLyoqQGJyaWVmIElkZW50aXR5IFJlc29sdmluZyBLZXkuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IGlya1tCTEVfR0FQX1NFQ19LRVlfTEVOXTsgICAvKio8IEFycmF5IGNvbnRhaW5pbmcgSVJLLiAqLw0KK30gYmxlX2dhcF9pcmtfdDsNCisNCisNCisvKipAYnJpZWYgQ2hhbm5lbCBtYXNrIGZvciBSRiBjaGFubmVscyB1c2VkIGluIGFkdmVydGlzaW5nLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBjaF8zN19vZmYgOiAxOyAgLyoqPCBTZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCB0dXJuIG9mZiBhZHZlcnRpc2luZyBvbiBjaGFubmVsIDM3ICovDQorICB1aW50OF90IGNoXzM4X29mZiA6IDE7ICAvKio8IFNldHRpbmcgdGhpcyBiaXQgdG8gMSB3aWxsIHR1cm4gb2ZmIGFkdmVydGlzaW5nIG9uIGNoYW5uZWwgMzggKi8NCisgIHVpbnQ4X3QgY2hfMzlfb2ZmIDogMTsgIC8qKjwgU2V0dGluZyB0aGlzIGJpdCB0byAxIHdpbGwgdHVybiBvZmYgYWR2ZXJ0aXNpbmcgb24gY2hhbm5lbCAzOSAqLw0KK30gYmxlX2dhcF9hZHZfY2hfbWFza190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgYWR2ZXJ0aXNpbmcgcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgICAgLyoqPCBTZWUgQHJlZiBCTEVfR0FQX0FEVl9UWVBFUy4gKi8NCisgIGJsZV9nYXBfYWRkcl90IGNvbnN0ICpwX3BlZXJfYWRkcjsgICAgICAgICAgLyoqPCBBZGRyZXNzIG9mIGEga25vd24gcGVlci4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFdoZW4gcHJpdmFjeSBpcyBlbmFibGVkIGFuZCB0aGUgbG9jYWwgZGV2aWNlIHVzZSBAcmVmIEJMRV9HQVBfQUREUl9UWVBFX1JBTkRPTV9QUklWQVRFX1JFU09MVkFCTEUgYWRkcmVzc2VzLCB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QgaXMgc2VhcmNoZWQgZm9yIGEgbWF0Y2hpbmcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LiBJZiB0aGUgbG9jYWwgSVJLIGZvciB0aGF0IGRldmljZSBpZGVudGl0eSBpcyBzZXQsIHRoZSBsb2NhbCBJUksgZm9yIHRoYXQgZGV2aWNlIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYWR2ZXJ0aXNlciBhZGRyZXNzIGZpZWxkIGluIHRoZSBhZHZlcnRpc2UgcGFja2V0Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSWYgdHlwZSBpcyBAcmVmIEJMRV9HQVBfQURWX1RZUEVfQURWX0RJUkVDVF9JTkQsIHRoaXMgbXVzdCBiZSBzZXQgdG8gdGhlIHRhcmdldGVkIGluaXRpYXRvci4gSWYgdGhlIGluaXRpYXRvciBpcyBpbiB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGVlciBJUksgZm9yIHRoYXQgZGV2aWNlIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW5pdGlhdG9yIGFkZHJlc3MgZmllbGQgaW4gdGhlIEFEVl9ESVJFQ1RfSU5EIHBhY2tldC4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBmcDsgICAgICAgICAgICAgICAgICAgLyoqPCBGaWx0ZXIgUG9saWN5LCBzZWUgQHJlZiBCTEVfR0FQX0FEVl9GSUxURVJfUE9MSUNJRVMuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgaW50ZXJ2YWw7ICAgICAgICAgICAgIC8qKjwgQWR2ZXJ0aXNpbmcgaW50ZXJ2YWwgYmV0d2VlbiAweDAwMjAgYW5kIDB4NDAwMCBpbiAwLjYyNSBtcyB1bml0cyAoMjAgbXMgdG8gMTAuMjQgcyksIHNlZSBAcmVmIEJMRV9HQVBfQURWX0lOVEVSVkFMUy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIElmIHR5cGUgZXF1YWxzIEByZWYgQkxFX0dBUF9BRFZfVFlQRV9BRFZfRElSRUNUX0lORCwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gMCBmb3IgaGlnaCBkdXR5IGN5Y2xlIGRpcmVjdGVkIGFkdmVydGlzaW5nLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSWYgdHlwZSBlcXVhbHMgQHJlZiBCTEVfR0FQX0FEVl9UWVBFX0FEVl9ESVJFQ1RfSU5ELCBzZXQgQHJlZiBCTEVfR0FQX0FEVl9JTlRFUlZBTF9NSU4gPD0gaW50ZXJ2YWwgPD0gQHJlZiBCTEVfR0FQX0FEVl9JTlRFUlZBTF9NQVggZm9yIGxvdyBkdXR5IGN5Y2xlIGFkdmVydGlzaW5nLiovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAgIC8qKjwgQWR2ZXJ0aXNpbmcgdGltZW91dCBiZXR3ZWVuIDB4MDAwMSBhbmQgMHgzRkZGIGluIHNlY29uZHMsIDB4MDAwMCBkaXNhYmxlcyB0aW1lb3V0LiBTZWUgYWxzbyBAcmVmIEJMRV9HQVBfQURWX1RJTUVPVVRfVkFMVUVTLiBJZiB0eXBlIGVxdWFscyBAcmVmIEJMRV9HQVBfQURWX1RZUEVfQURWX0RJUkVDVF9JTkQsIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIDAgZm9yIEhpZ2ggZHV0eSBjeWNsZSBkaXJlY3RlZCBhZHZlcnRpc2luZy4gKi8NCisgIGJsZV9nYXBfYWR2X2NoX21hc2tfdCBjaGFubmVsX21hc2s7ICAgICAgICAgLyoqPCBBZHZlcnRpc2luZyBjaGFubmVsIG1hc2suIFNlZSBAcmVmIGJsZV9nYXBfYWR2X2NoX21hc2tfdC4gKi8NCit9IGJsZV9nYXBfYWR2X3BhcmFtc190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgc2Nhbm5pbmcgcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgIGFjdGl2ZSAgICAgICAgIDogMTsgIC8qKjwgSWYgMSwgcGVyZm9ybSBhY3RpdmUgc2Nhbm5pbmcgKHNjYW4gcmVxdWVzdHMpLiAqLw0KKyAgdWludDhfdCAgdXNlX3doaXRlbGlzdCAgOiAxOyAgLyoqPCBJZiAxLCBmaWx0ZXIgYWR2ZXJ0aXNlcnMgdXNpbmcgY3VycmVudCBhY3RpdmUgd2hpdGVsaXN0LiAqLw0KKyAgdWludDhfdCAgYWR2X2Rpcl9yZXBvcnQgOiAxOyAgLyoqPCBJZiAxLCBhbHNvIHJlcG9ydCBkaXJlY3RlZCBhZHZlcnRpc2VtZW50cyB3aGVyZSB0aGUgaW5pdGlhdG9yIGZpZWxkIGlzIHNldCB0byBhIHByaXZhdGUgcmVzb2x2YWJsZSBhZGRyZXNzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGlmIHRoZSBhZGRyZXNzIGRpZCBub3QgcmVzb2x2ZSB0byBhbiBlbnRyeSBpbiB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QuIEEgcmVwb3J0IHdpbGwgYmUgZ2VuZXJhdGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW4gaWYgdGhlIHBlZXIgaXMgbm90IGluIHRoZSB3aGl0ZWxpc3QuICovDQorICB1aW50MTZfdCBpbnRlcnZhbDsgICAgICAgICAgICAvKio8IFNjYW4gaW50ZXJ2YWwgYmV0d2VlbiAweDAwMDQgYW5kIDB4NDAwMCBpbiAwLjYyNSBtcyB1bml0cyAoMi41IG1zIHRvIDEwLjI0IHMpLiAqLw0KKyAgdWludDE2X3Qgd2luZG93OyAgICAgICAgICAgICAgLyoqPCBTY2FuIHdpbmRvdyBiZXR3ZWVuIDB4MDAwNCBhbmQgMHg0MDAwIGluIDAuNjI1IG1zIHVuaXRzICgyLjUgbXMgdG8gMTAuMjQgcykuICovDQorICB1aW50MTZfdCB0aW1lb3V0OyAgICAgICAgICAgICAvKio8IFNjYW4gdGltZW91dCBiZXR3ZWVuIDB4MDAwMSBhbmQgMHhGRkZGIGluIHNlY29uZHMsIDB4MDAwMCBkaXNhYmxlcyB0aW1lb3V0LiAqLw0KK30gYmxlX2dhcF9zY2FuX3BhcmFtc190Ow0KKw0KKw0KKy8qKkBicmllZiBEZXZpY2UgUHJpdmFjeS4NCisgKg0KKyAqICAgICAgICBUaGUgcHJpdmFjeSBmZWF0dXJlIHByb3ZpZGVzIGEgd2F5IGZvciB0aGUgZGV2aWNlIHRvIGF2b2lkIGJlaW5nIHRyYWNrZWQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lLg0KKyAqICAgICAgICBUaGUgcHJpdmFjeSBmZWF0dXJlLCB3aGVuIGVuYWJsZWQsIGhpZGVzIHRoZSBsb2NhbCBkZXZpY2UgaWRlbnRpdHkgYW5kIHJlcGxhY2VzIGl0IHdpdGggYSBwcml2YXRlIGFkZHJlc3MNCisgKiAgICAgICAgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCBhdCBhIHNwZWNpZmllZCBpbnRlcnZhbC4NCisgKg0KKyAqICAgICAgICBJZiBhIGRldmljZSBzdGlsbCB3YW50cyB0byBiZSByZWNvZ25pemVkIGJ5IG90aGVyIHBlZXJzLCBpdCBuZWVkcyB0byBzaGFyZSBpdCdzIElkZW50aXR5IFJlc29sdmluZyBLZXkgKElSSykuDQorICogICAgICAgIFdpdGggdGhpcyBrZXksIGEgZGV2aWNlIGNhbiBnZW5lcmF0ZSBhIHJhbmRvbSBwcml2YXRlIGFkZHJlc3MgdGhhdCBjYW4gb25seSBiZSByZWNvZ25pemVkIGJ5IHBlZXJzIGluIHBvc3Nlc3Npb24gb2YgdGhhdCBrZXksDQorICogICAgICAgIGFuZCBkZXZpY2VzIGNhbiBlc3RhYmxpc2ggY29ubmVjdGlvbnMgd2l0aG91dCByZXZlYWxpbmcgdGhlaXIgcmVhbCBpZGVudGl0aWVzLg0KKyAqDQorICogQG5vdGUgIElmIHRoZSBkZXZpY2UgSVJLIGlzIHVwZGF0ZWQsIHRoZSBuZXcgSVJLIGJlY29tZXMgdGhlIG9uZSB0byBiZSBkaXN0cmlidXRlZCBpbiBhbGwNCisgKiAgICAgICAgYm9uZGluZyBwcm9jZWR1cmVzIHBlcmZvcm1lZCBhZnRlciBAcmVmIHNkX2JsZV9nYXBfcHJpdmFjeV9zZXQgcmV0dXJucy4NCisgKiAgICAgICAgVGhlIElSSyBkaXN0cmlidXRlZCBkdXJpbmcgYm9uZGluZyBwcm9jZWR1cmUgaXMgdGhlIGRldmljZSBJUksgdGhhdCBpcyBhY3RpdmUgd2hlbiBAcmVmIHNkX2JsZV9nYXBfc2VjX3BhcmFtc19yZXBseSBpcyBjYWxsZWQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICBwcml2YWN5X21vZGU7ICAgICAgICAgLyoqPCBQcml2YWN5IG1vZGUsIHNlZSBAcmVmIEJMRV9HQVBfUFJJVkFDWV9NT0RFUy4gRGVmYXVsdCBpcyBAcmVmIEJMRV9HQVBfUFJJVkFDWV9NT0RFX09GRi4gKi8NCisgIHVpbnQ4X3QgICAgICAgIHByaXZhdGVfYWRkcl90eXBlOyAgICAvKio8IFRoZSBwcml2YXRlIGFkZHJlc3MgdHlwZSBtdXN0IGJlIGVpdGhlciBAcmVmIEJMRV9HQVBfQUREUl9UWVBFX1JBTkRPTV9QUklWQVRFX1JFU09MVkFCTEUgb3IgQHJlZiBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fUFJJVkFURV9OT05fUkVTT0xWQUJMRS4gKi8NCisgIHVpbnQxNl90ICAgICAgIHByaXZhdGVfYWRkcl9jeWNsZV9zOyAvKio8IFByaXZhdGUgYWRkcmVzcyBjeWNsZSBpbnRlcnZhbCBpbiBzZWNvbmRzLiBQcm92aWRpbmcgYW4gYWRkcmVzcyBjeWNsZSB2YWx1ZSBvZiAwIHdpbGwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgQHJlZiBCTEVfR0FQX0RFRkFVTFRfUFJJVkFURV9BRERSX0NZQ0xFX0lOVEVSVkFMX1MuICovDQorICBibGVfZ2FwX2lya190ICpwX2RldmljZV9pcms7ICAgICAgICAgLyoqPCBXaGVuIHVzZWQgYXMgaW5wdXQsIHBvaW50ZXIgdG8gSVJLIHN0cnVjdHVyZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBJUksuIElmIE5VTEwsIHRoZSBkZXZpY2UgZGVmYXVsdCBJUksgd2lsbCBiZSB1c2VkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGFzIG91dHB1dCwgcG9pbnRlciB0byBJUksgc3RydWN0dXJlIHdoZXJlIHRoZSBjdXJyZW50IGRlZmF1bHQgSVJLIHdpbGwgYmUgd3JpdHRlbiB0by4gSWYgTlVMTCwgdGhpcyBhcmd1bWVudCBpcyBpZ25vcmVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGRlZmF1bHQgSVJLIGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmFuZG9tIHByaXZhdGUgcmVzb2x2YWJsZSBhZGRyZXNzZXMgZm9yIHRoZSBsb2NhbCBkZXZpY2UgdW5sZXNzIGluc3RydWN0ZWQgb3RoZXJ3aXNlLiAqLw0KK30gYmxlX2dhcF9wcml2YWN5X3BhcmFtc190Ow0KKw0KKw0KKy8qKkBicmllZiBQaHlzaWNhbCBMYXllciBjb25maWd1cmF0aW9uDQorICogQG5vdGUgICAgICB0eF9waHlzIGFuZCByeF9waHlzIGFyZSBiaXRmaWVsZHMsIHRvIGluZGljYXRlIG11bHRpcGxlIHByZWZlcnJlZCBQSFlzIGZvciBlYWNoIGRpcmVjdGlvbiB0aGV5IGNhbiBiZSBPUmVkIHRvZ2V0aGVyLg0KKyAqIEBjb2RlDQorICogcF9nYXBfcGh5cy0+dHhfcGh5cyA9IEJMRV9HQVBfUEhZXzFNQlBTIHwgQkxFX0dBUF9QSFlfMk1CUFM7DQorICogcF9nYXBfcGh5cy0+cnhfcGh5cyA9IEJMRV9HQVBfUEhZXzFNQlBTIHwgQkxFX0dBUF9QSFlfMk1CUFM7DQorICogQGVuZGNvZGUNCisgKg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCB0eF9waHlzOyAgICAgLyoqPCBQcmVmZXJyZWQgdHJhbnNtaXQgUEhZcywgc2VlIEByZWYgQkxFX0dBUF9QSFlTLiAqLw0KKyAgdWludDhfdCByeF9waHlzOyAgICAgLyoqPCBQcmVmZXJyZWQgcmVjZWl2ZSBQSFlzLCBzZWUgQHJlZiBCTEVfR0FQX1BIWVMuICovDQorfSBibGVfZ2FwX3BoeXNfdDsNCisNCisvKiogQGJyaWVmIEtleXMgdGhhdCBjYW4gYmUgZXhjaGFuZ2VkIGR1cmluZyBhIGJvbmRpbmcgcHJvY2VkdXJlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBlbmMgICAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvbmcgVGVybSBLZXkgYW5kIE1hc3RlciBJZGVudGlmaWNhdGlvbi4gKi8NCisgIHVpbnQ4X3QgaWQgICAgICA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJZGVudGl0eSBSZXNvbHZpbmcgS2V5IGFuZCBJZGVudGl0eSBBZGRyZXNzIEluZm9ybWF0aW9uLiAqLw0KKyAgdWludDhfdCBzaWduICAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gU2lnbmF0dXJlIFJlc29sdmluZyBLZXkuICovDQorICB1aW50OF90IGxpbmsgICAgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGVyaXZlIHRoZSBMaW5rIEtleSBmcm9tIHRoZSBMVEsuICovDQorfSBibGVfZ2FwX3NlY19rZGlzdF90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgc2VjdXJpdHkgcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBib25kICAgICAgOiAxOyAgICAgICAgICAgICAvKio8IFBlcmZvcm0gYm9uZGluZy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBtaXRtICAgICAgOiAxOyAgICAgICAgICAgICAvKio8IEVuYWJsZSBNYW4gSW4gVGhlIE1pZGRsZSBwcm90ZWN0aW9uLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIGxlc2MgICAgICA6IDE7ICAgICAgICAgICAgIC8qKjwgRW5hYmxlIExFIFNlY3VyZSBDb25uZWN0aW9uIHBhaXJpbmcuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAga2V5cHJlc3MgIDogMTsgICAgICAgICAgICAgLyoqPCBFbmFibGUgZ2VuZXJhdGlvbiBvZiBrZXlwcmVzcyBub3RpZmljYXRpb25zLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIGlvX2NhcHMgICA6IDM7ICAgICAgICAgICAgIC8qKjwgSU8gY2FwYWJpbGl0aWVzLCBzZWUgQHJlZiBCTEVfR0FQX0lPX0NBUFMuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgb29iICAgICAgIDogMTsgICAgICAgICAgICAgLyoqPCBUaGUgT09CIGRhdGEgZmxhZy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW4gTEUgbGVnYWN5IHBhaXJpbmcsIHRoaXMgZmxhZyBpcyBzZXQgaWYgYSBkZXZpY2UgaGFzIG91dCBvZiBiYW5kIGF1dGhlbnRpY2F0aW9uIGRhdGEuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPT0IgbWV0aG9kIGlzIHVzZWQgaWYgYm90aCBvZiB0aGUgZGV2aWNlcyBoYXZlIG91dCBvZiBiYW5kIGF1dGhlbnRpY2F0aW9uIGRhdGEuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEluIExFIFNlY3VyZSBDb25uZWN0aW9ucyBwYWlyaW5nLCB0aGlzIGZsYWcgaXMgc2V0IGlmIGEgZGV2aWNlIGhhcyB0aGUgcGVlciBkZXZpY2UncyBvdXQgb2YgYmFuZCBhdXRoZW50aWNhdGlvbiBkYXRhLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT09CIG1ldGhvZCBpcyB1c2VkIGlmIGF0IGxlYXN0IG9uZSBkZXZpY2UgaGFzIHRoZSBwZWVyIGRldmljZSdzIE9PQiBkYXRhIGF2YWlsYWJsZS4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBtaW5fa2V5X3NpemU7ICAgICAgICAgICAgICAvKio8IE1pbmltdW0gZW5jcnlwdGlvbiBrZXkgc2l6ZSBpbiBvY3RldHMgYmV0d2VlbiA3IGFuZCAxNi4gSWYgMCB0aGVuIG5vdCBhcHBsaWNhYmxlIGluIHRoaXMgaW5zdGFuY2UuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgbWF4X2tleV9zaXplOyAgICAgICAgICAgICAgLyoqPCBNYXhpbXVtIGVuY3J5cHRpb24ga2V5IHNpemUgaW4gb2N0ZXRzIGJldHdlZW4gbWluX2tleV9zaXplIGFuZCAxNi4gKi8NCisgIGJsZV9nYXBfc2VjX2tkaXN0X3QgICBrZGlzdF9vd247ICAgICAgICAgICAgICAgICAvKio8IEtleSBkaXN0cmlidXRpb24gYml0bWFwOiBrZXlzIHRoYXQgdGhlIGxvY2FsIGRldmljZSB3aWxsIGRpc3RyaWJ1dGUuICovDQorICBibGVfZ2FwX3NlY19rZGlzdF90ICAga2Rpc3RfcGVlcjsgICAgICAgICAgICAgICAgLyoqPCBLZXkgZGlzdHJpYnV0aW9uIGJpdG1hcDoga2V5cyB0aGF0IHRoZSByZW1vdGUgZGV2aWNlIHdpbGwgZGlzdHJpYnV0ZS4gKi8NCit9IGJsZV9nYXBfc2VjX3BhcmFtc190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgRW5jcnlwdGlvbiBJbmZvcm1hdGlvbi4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICBsdGtbQkxFX0dBUF9TRUNfS0VZX0xFTl07ICAgLyoqPCBMb25nIFRlcm0gS2V5LiAqLw0KKyAgdWludDhfdCAgIGxlc2MgOiAxOyAgICAgICAgICAgICAgICAgICAvKio8IEtleSBnZW5lcmF0ZWQgdXNpbmcgTEUgU2VjdXJlIENvbm5lY3Rpb25zLiAqLw0KKyAgdWludDhfdCAgIGF1dGggOiAxOyAgICAgICAgICAgICAgICAgICAvKio8IEF1dGhlbnRpY2F0ZWQgS2V5LiAqLw0KKyAgdWludDhfdCAgIGx0a19sZW4gOiA2OyAgICAgICAgICAgICAgICAvKio8IExUSyBsZW5ndGggaW4gb2N0ZXRzLiAqLw0KK30gYmxlX2dhcF9lbmNfaW5mb190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgTWFzdGVyIElkZW50aWZpY2F0aW9uLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgIGVkaXY7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVuY3J5cHRlZCBEaXZlcnNpZmllci4gKi8NCisgIHVpbnQ4X3QgICByYW5kW0JMRV9HQVBfU0VDX1JBTkRfTEVOXTsgLyoqPCBSYW5kb20gTnVtYmVyLiAqLw0KK30gYmxlX2dhcF9tYXN0ZXJfaWRfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIFNpZ25pbmcgSW5mb3JtYXRpb24uICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgY3Nya1tCTEVfR0FQX1NFQ19LRVlfTEVOXTsgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBTaWduYXR1cmUgUmVzb2x2aW5nIEtleS4gKi8NCit9IGJsZV9nYXBfc2lnbl9pbmZvX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgUC0yNTYgUHVibGljIEtleS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICBwa1tCTEVfR0FQX0xFU0NfUDI1Nl9QS19MRU5dOyAgICAgICAgLyoqPCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgRWxsaXB0aWMgQ3VydmUgRGlmZmllLUhlbGxtYW4gUC0yNTYgUHVibGljIEtleS4gU3RvcmVkIGluIHRoZSBzdGFuZGFyZCBTTVAgcHJvdG9jb2wgZm9ybWF0OiB7WCxZfSBib3RoIGluIGxpdHRsZS1lbmRpYW4uICovDQorfSBibGVfZ2FwX2xlc2NfcDI1Nl9wa190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVAgTEUgU2VjdXJlIENvbm5lY3Rpb25zIERIS2V5LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgIGtleVtCTEVfR0FQX0xFU0NfREhLRVlfTEVOXTsgICAgICAgIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIEVsbGlwdGljIEN1cnZlIERpZmZpZS1IZWxsbWFuIEtleS4gU3RvcmVkIGluIGxpdHRsZS1lbmRpYW4uICovDQorfSBibGVfZ2FwX2xlc2NfZGhrZXlfdDsNCisNCisNCisvKipAYnJpZWYgR0FQIExFIFNlY3VyZSBDb25uZWN0aW9ucyBPT0IgZGF0YS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfYWRkcl90ICBhZGRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCbHVldG9vdGggYWRkcmVzcyBvZiB0aGUgZGV2aWNlLiAqLw0KKyAgdWludDhfdCAgICAgICAgIHJbQkxFX0dBUF9TRUNfS0VZX0xFTl07ICAgICAgICAvKio8IFJhbmRvbSBOdW1iZXIuICovDQorICB1aW50OF90ICAgICAgICAgY1tCTEVfR0FQX1NFQ19LRVlfTEVOXTsgICAgICAgIC8qKjwgQ29uZmlybSBWYWx1ZS4gKi8NCit9IGJsZV9nYXBfbGVzY19vb2JfZGF0YV90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfQ09OTkVDVEVELiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9hZGRyX3QgICAgICAgIHBlZXJfYWRkcjsgICAgICAgICAgICAgIC8qKjwgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlIHBlZXIgZGV2aWNlLiBJZiB0aGUgcGVlcl9hZGRyIHJlc29sdmVkOiBAcmVmIGJsZV9nYXBfYWRkcl90OjphZGRyX2lkX3BlZXIgaXMgc2V0IHRvIDENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgYWRkcmVzcyBpcyB0aGUgZGV2aWNlJ3MgaWRlbnRpdHkgYWRkcmVzcy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICByb2xlOyAgICAgICAgICAgICAgICAgICAvKio8IEJMRSByb2xlIGZvciB0aGlzIGNvbm5lY3Rpb24sIHNlZSBAcmVmIEJMRV9HQVBfUk9MRVMgKi8NCisgIGJsZV9nYXBfY29ubl9wYXJhbXNfdCBjb25uX3BhcmFtczsgICAgICAgICAgICAvKio8IEdBUCBDb25uZWN0aW9uIFBhcmFtZXRlcnMuICovDQorfSBibGVfZ2FwX2V2dF9jb25uZWN0ZWRfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgcmVhc29uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEhDSSBlcnJvciBjb2RlLCBzZWUgQHJlZiBCTEVfSENJX1NUQVRVU19DT0RFUy4gKi8NCit9IGJsZV9nYXBfZXZ0X2Rpc2Nvbm5lY3RlZF90Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2Nvbm5fcGFyYW1zX3QgY29ubl9wYXJhbXM7ICAgICAgICAgICAgLyoqPCAgR0FQIENvbm5lY3Rpb24gUGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXBfZXZ0X2Nvbm5fcGFyYW1fdXBkYXRlX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IFN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9QSFlfVVBEQVRFLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdHVzIG9mIHRoZSBwcm9jZWR1cmUsIHNlZSBAcmVmIEJMRV9IQ0lfU1RBVFVTX0NPREVTICovDQorICB1aW50OF90IHR4X3BoeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUWCBQSFkgZm9yIHRoaXMgY29ubmVjdGlvbiwgc2VlIEByZWYgQkxFX0dBUF9QSFlTLiAqLw0KKyAgdWludDhfdCByeF9waHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlggUEhZIGZvciB0aGlzIGNvbm5lY3Rpb24sIHNlZSBAcmVmIEJMRV9HQVBfUEhZUy4gKi8NCit9IGJsZV9nYXBfZXZ0X3BoeV91cGRhdGVfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfc2VjX3BhcmFtc190IHBlZXJfcGFyYW1zOyAgICAgICAgICAgICAvKio8IEluaXRpYXRvciBTZWN1cml0eSBQYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhcF9ldnRfc2VjX3BhcmFtc19yZXF1ZXN0X3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9TRUNfSU5GT19SRVFVRVNULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9hZGRyX3QgICAgICBwZWVyX2FkZHI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBCbHVldG9vdGggYWRkcmVzcyBvZiB0aGUgcGVlciBkZXZpY2UuICovDQorICBibGVfZ2FwX21hc3Rlcl9pZF90IG1hc3Rlcl9pZDsgICAgICAgICAgICAgICAgICAgICAvKio8IE1hc3RlciBJZGVudGlmaWNhdGlvbiBmb3IgTFRLIGxvb2t1cC4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgZW5jX2luZm8gIDogMTsgICAgICAgICAgICAgICAgIC8qKjwgSWYgMSwgRW5jcnlwdGlvbiBJbmZvcm1hdGlvbiByZXF1aXJlZC4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgaWRfaW5mbyAgIDogMTsgICAgICAgICAgICAgICAgIC8qKjwgSWYgMSwgSWRlbnRpdHkgSW5mb3JtYXRpb24gcmVxdWlyZWQuICovDQorICB1aW50OF90ICAgICAgICAgICAgIHNpZ25faW5mbyA6IDE7ICAgICAgICAgICAgICAgICAvKio8IElmIDEsIFNpZ25pbmcgSW5mb3JtYXRpb24gcmVxdWlyZWQuICovDQorfSBibGVfZ2FwX2V2dF9zZWNfaW5mb19yZXF1ZXN0X3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9QQVNTS0VZX0RJU1BMQVkuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IHBhc3NrZXlbQkxFX0dBUF9QQVNTS0VZX0xFTl07ICAgICAgICAgLyoqPCA2LWRpZ2l0IHBhc3NrZXkgaW4gQVNDSUkgKCcwJy0nOScgZGlnaXRzIG9ubHkpLiAqLw0KKyAgdWludDhfdCBtYXRjaF9yZXF1ZXN0IDogMTsgICAgICAgICAgICAgICAgICAgIC8qKjwgSWYgMSByZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gcmVwb3J0IHRoZSBtYXRjaCB1c2luZyBAcmVmIHNkX2JsZV9nYXBfYXV0aF9rZXlfcmVwbHkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggZWl0aGVyIEByZWYgQkxFX0dBUF9BVVRIX0tFWV9UWVBFX05PTkUgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgQkxFX0dBUF9BVVRIX0tFWV9UWVBFX1BBU1NLRVkgaWYgdGhlcmUgaXMgYSBtYXRjaC4gKi8NCit9IGJsZV9nYXBfZXZ0X3Bhc3NrZXlfZGlzcGxheV90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBUF9FVlRfS0VZX1BSRVNTRUQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IGtwX25vdDsgICAgICAgICAvKio8IEtleXByZXNzIG5vdGlmaWNhdGlvbiB0eXBlLCBzZWUgQHJlZiBCTEVfR0FQX0tQX05PVF9UWVBFUy4gKi8NCit9IGJsZV9nYXBfZXZ0X2tleV9wcmVzc2VkX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9BVVRIX0tFWV9SRVFVRVNULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBrZXlfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VlIEByZWYgQkxFX0dBUF9BVVRIX0tFWV9UWVBFUy4gKi8NCit9IGJsZV9nYXBfZXZ0X2F1dGhfa2V5X3JlcXVlc3RfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfbGVzY19wMjU2X3BrX3QgKnBfcGtfcGVlcjsgIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIHJlbW90ZSBQLTI1NiBQdWJsaWMgS2V5LiBUaGlzIHdpbGwgcG9pbnQgdG8gdGhlIGFwcGxpY2F0aW9uLXN1cHBsaWVkIG1lbW9yeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIGtleXNldCBkdXJpbmcgdGhlIGNhbGwgdG8gQHJlZiBzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkuICovDQorICB1aW50OF90IG9vYmRfcmVxICAgICAgIDoxOyAgICAgICAgICAvKio8IExFU0MgT09CIGRhdGEgcmVxdWlyZWQuIEEgY2FsbCB0byBAcmVmIHNkX2JsZV9nYXBfbGVzY19vb2JfZGF0YV9zZXQgaXMgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhlIHByb2NlZHVyZS4gKi8NCit9IGJsZV9nYXBfZXZ0X2xlc2NfZGhrZXlfcmVxdWVzdF90Ow0KKw0KKw0KKy8qKkBicmllZiBTZWN1cml0eSBsZXZlbHMgc3VwcG9ydGVkLg0KKyAqIEBub3RlICBTZWUgQmx1ZXRvb3RoIFNwZWNpZmljYXRpb24gVmVyc2lvbiA0LjIgVm9sdW1lIDMsIFBhcnQgQywgQ2hhcHRlciAxMCwgU2VjdGlvbiAxMC4yLjEuDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgbHYxIDogMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElmIDE6IExldmVsIDEgaXMgc3VwcG9ydGVkLiAqLw0KKyAgdWludDhfdCBsdjIgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSWYgMTogTGV2ZWwgMiBpcyBzdXBwb3J0ZWQuICovDQorICB1aW50OF90IGx2MyA6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJZiAxOiBMZXZlbCAzIGlzIHN1cHBvcnRlZC4gKi8NCisgIHVpbnQ4X3QgbHY0IDogMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElmIDE6IExldmVsIDQgaXMgc3VwcG9ydGVkLiAqLw0KK30gYmxlX2dhcF9zZWNfbGV2ZWxzX3Q7DQorDQorDQorLyoqQGJyaWVmIEVuY3J5cHRpb24gS2V5LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9lbmNfaW5mb190ICAgIGVuY19pbmZvOyAgICAgICAgICAgICAvKio8IEVuY3J5cHRpb24gSW5mb3JtYXRpb24uICovDQorICBibGVfZ2FwX21hc3Rlcl9pZF90ICAgbWFzdGVyX2lkOyAgICAgICAgICAgIC8qKjwgTWFzdGVyIElkZW50aWZpY2F0aW9uLiAqLw0KK30gYmxlX2dhcF9lbmNfa2V5X3Q7DQorDQorDQorLyoqQGJyaWVmIElkZW50aXR5IEtleS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfaXJrX3QgICAgICAgICBpZF9pbmZvOyAgICAgICAgICAgICAgLyoqPCBJZGVudGl0eSBSZXNvbHZpbmcgS2V5LiAqLw0KKyAgYmxlX2dhcF9hZGRyX3QgICAgICAgIGlkX2FkZHJfaW5mbzsgICAgICAgICAvKio8IElkZW50aXR5IEFkZHJlc3MuICovDQorfSBibGVfZ2FwX2lkX2tleV90Ow0KKw0KKw0KKy8qKkBicmllZiBTZWN1cml0eSBLZXlzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9lbmNfa2V5X3QgICAgICAqcF9lbmNfa2V5OyAgICAgICAgICAgLyoqPCBFbmNyeXB0aW9uIEtleSwgb3IgTlVMTC4gKi8NCisgIGJsZV9nYXBfaWRfa2V5X3QgICAgICAgKnBfaWRfa2V5OyAgICAgICAgICAgIC8qKjwgSWRlbnRpdHkgS2V5LCBvciBOVUxMLiAqLw0KKyAgYmxlX2dhcF9zaWduX2luZm9fdCAgICAqcF9zaWduX2tleTsgICAgICAgICAgLyoqPCBTaWduaW5nIEtleSwgb3IgTlVMTC4gKi8NCisgIGJsZV9nYXBfbGVzY19wMjU2X3BrX3QgKnBfcGs7ICAgICAgICAgICAgICAgIC8qKjwgTEUgU2VjdXJlIENvbm5lY3Rpb25zIFAtMjU2IFB1YmxpYyBLZXkuIFdoZW4gaW4gZGVidWcgbW9kZSB0aGUgYXBwbGljYXRpb24gbXVzdCB1c2UgdGhlIHZhbHVlIGRlZmluZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIENvcmUgQmx1ZXRvb3RoIFNwZWNpZmljYXRpb24gdjQuMiBWb2wuMywgUGFydCBILCBTZWN0aW9uIDIuMy41LjYuMSAqLw0KK30gYmxlX2dhcF9zZWNfa2V5c190Ow0KKw0KKw0KKy8qKkBicmllZiBTZWN1cml0eSBrZXkgc2V0IGZvciBib3RoIGxvY2FsIGFuZCBwZWVyIGtleXMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX3NlY19rZXlzX3QgICAgICAgICAgICBrZXlzX293bjsgICAgIC8qKjwgS2V5cyBkaXN0cmlidXRlZCBieSB0aGUgbG9jYWwgZGV2aWNlLiBGb3IgTEUgU2VjdXJlIENvbm5lY3Rpb25zIHRoZSBlbmNyeXB0aW9uIGtleSB3aWxsIGJlIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgaWYgYm9uZGluZy4gKi8NCisgIGJsZV9nYXBfc2VjX2tleXNfdCAgICAgICAgICAgIGtleXNfcGVlcjsgICAgLyoqPCBLZXlzIGRpc3RyaWJ1dGVkIGJ5IHRoZSByZW1vdGUgZGV2aWNlLiBGb3IgTEUgU2VjdXJlIENvbm5lY3Rpb25zLCBwX2VuY19rZXkgbXVzdCBhbHdheXMgYmUgTlVMTC4gKi8NCit9IGJsZV9nYXBfc2VjX2tleXNldF90Ow0KKw0KKw0KKy8qKkBicmllZiBEYXRhIExlbmd0aCBVcGRhdGUgUHJvY2VkdXJlIHBhcmFtZXRlcnMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCBtYXhfdHhfb2N0ZXRzOyAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZCBvY3RldHMgdGhhdCBhIENvbnRyb2xsZXIgc3VwcG9ydHMgZm9yIHRyYW5zbWlzc2lvbiBvZiBhIHNpbmdsZSBMaW5rIExheWVyIERhdGEgQ2hhbm5lbCBQRFUuICovDQorICB1aW50MTZfdCBtYXhfcnhfb2N0ZXRzOyAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgcGF5bG9hZCBvY3RldHMgdGhhdCBhIENvbnRyb2xsZXIgc3VwcG9ydHMgZm9yIHJlY2VwdGlvbiBvZiBhIHNpbmdsZSBMaW5rIExheWVyIERhdGEgQ2hhbm5lbCBQRFUuICovDQorICB1aW50MTZfdCBtYXhfdHhfdGltZV91czsgIC8qKjwgTWF4aW11bSB0aW1lLCBpbiBtaWNyb3NlY29uZHMsIHRoYXQgYSBDb250cm9sbGVyIHN1cHBvcnRzIGZvciB0cmFuc21pc3Npb24gb2YgYSBzaW5nbGUgTGluayBMYXllciBEYXRhIENoYW5uZWwgUERVLiAqLw0KKyAgdWludDE2X3QgbWF4X3J4X3RpbWVfdXM7ICAvKio8IE1heGltdW0gdGltZSwgaW4gbWljcm9zZWNvbmRzLCB0aGF0IGEgQ29udHJvbGxlciBzdXBwb3J0cyBmb3IgcmVjZXB0aW9uIG9mIGEgc2luZ2xlIExpbmsgTGF5ZXIgRGF0YSBDaGFubmVsIFBEVS4gKi8NCit9IGJsZV9nYXBfZGF0YV9sZW5ndGhfcGFyYW1zX3Q7DQorDQorDQorLyoqQGJyaWVmIERhdGEgTGVuZ3RoIFVwZGF0ZSBQcm9jZWR1cmUgbG9jYWwgbGltaXRhdGlvbi4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IHR4X3BheWxvYWRfbGltaXRlZF9vY3RldHM7IC8qKjwgSWYgPiAwLCB0aGUgcmVxdWVzdGVkIFRYIHBhY2tldCBsZW5ndGggaXMgdG9vIGxvbmcgYnkgdGhpcyBtYW55IG9jdGV0cy4gKi8NCisgIHVpbnQxNl90IHJ4X3BheWxvYWRfbGltaXRlZF9vY3RldHM7IC8qKjwgSWYgPiAwLCB0aGUgcmVxdWVzdGVkIFJYIHBhY2tldCBsZW5ndGggaXMgdG9vIGxvbmcgYnkgdGhpcyBtYW55IG9jdGV0cy4gKi8NCisgIHVpbnQxNl90IHR4X3J4X3RpbWVfbGltaXRlZF91czsgICAgIC8qKjwgSWYgPiAwLCB0aGUgcmVxdWVzdGVkIGNvbWJpbmF0aW9uIG9mIFRYIGFuZCBSWCBwYWNrZXQgbGVuZ3RocyBpcyB0b28gbG9uZyBieSB0aGlzIG1hbnkgbWljcm9zZWNvbmRzLiAqLw0KK30gYmxlX2dhcF9kYXRhX2xlbmd0aF9saW1pdGF0aW9uX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgICBhdXRoX3N0YXR1czsgICAgICAgICAgICAvKio8IEF1dGhlbnRpY2F0aW9uIHN0YXR1cywgc2VlIEByZWYgQkxFX0dBUF9TRUNfU1RBVFVTLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgIGVycm9yX3NyYyA6IDI7ICAgICAgICAgIC8qKjwgT24gZXJyb3IsIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgZmFpbHVyZSwgc2VlIEByZWYgQkxFX0dBUF9TRUNfU1RBVFVTX1NPVVJDRVMuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgYm9uZGVkIDogMTsgICAgICAgICAgICAgLyoqPCBQcm9jZWR1cmUgcmVzdWx0ZWQgaW4gYSBib25kLiAqLw0KKyAgYmxlX2dhcF9zZWNfbGV2ZWxzX3QgIHNtMV9sZXZlbHM7ICAgICAgICAgICAgIC8qKjwgTGV2ZWxzIHN1cHBvcnRlZCBpbiBTZWN1cml0eSBNb2RlIDEuICovDQorICBibGVfZ2FwX3NlY19sZXZlbHNfdCAgc20yX2xldmVsczsgICAgICAgICAgICAgLyoqPCBMZXZlbHMgc3VwcG9ydGVkIGluIFNlY3VyaXR5IE1vZGUgMi4gKi8NCisgIGJsZV9nYXBfc2VjX2tkaXN0X3QgICBrZGlzdF9vd247ICAgICAgICAgICAgICAvKio8IEJpdG1hcCBzdGF0aW5nIHdoaWNoIGtleXMgd2VyZSBleGNoYW5nZWQgKGRpc3RyaWJ1dGVkKSBieSB0aGUgbG9jYWwgZGV2aWNlLiBJZiBib25kaW5nIHdpdGggTEUgU2VjdXJlIENvbm5lY3Rpb25zLCB0aGUgZW5jIGJpdCB3aWxsIGJlIGFsd2F5cyBzZXQuICovDQorICBibGVfZ2FwX3NlY19rZGlzdF90ICAga2Rpc3RfcGVlcjsgICAgICAgICAgICAgLyoqPCBCaXRtYXAgc3RhdGluZyB3aGljaCBrZXlzIHdlcmUgZXhjaGFuZ2VkIChkaXN0cmlidXRlZCkgYnkgdGhlIHJlbW90ZSBkZXZpY2UuIElmIGJvbmRpbmcgd2l0aCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMsIHRoZSBlbmMgYml0IHdpbGwgbmV2ZXIgYmUgc2V0LiAqLw0KK30gYmxlX2dhcF9ldnRfYXV0aF9zdGF0dXNfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0NPTk5fU0VDX1VQREFURS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfY29ubl9zZWNfdCBjb25uX3NlYzsgICAgICAgICAgICAgICAgICAvKio8IENvbm5lY3Rpb24gc2VjdXJpdHkgbGV2ZWwuICovDQorfSBibGVfZ2FwX2V2dF9jb25uX3NlY191cGRhdGVfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX1RJTUVPVVQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IHNyYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTb3VyY2Ugb2YgdGltZW91dCBldmVudCwgc2VlIEByZWYgQkxFX0dBUF9USU1FT1VUX1NPVVJDRVMuICovDQorfSBibGVfZ2FwX2V2dF90aW1lb3V0X3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9SU1NJX0NIQU5HRUQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBpbnQ4X3QgIHJzc2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIEluZGljYXRpb24gaW4gZEJtLiAqLw0KK30gYmxlX2dhcF9ldnRfcnNzaV9jaGFuZ2VkX3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9BRFZfUkVQT1JULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9hZGRyX3QgcGVlcl9hZGRyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlIHBlZXIgZGV2aWNlLiBJZiB0aGUgcGVlcl9hZGRyIHJlc29sdmVkOiBAcmVmIGJsZV9nYXBfYWRkcl90OjphZGRyX2lkX3BlZXIgaXMgc2V0IHRvIDENCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgYWRkcmVzcyBpcyB0aGUgZGV2aWNlJ3MgaWRlbnRpdHkgYWRkcmVzcy4gKi8NCisgIGJsZV9nYXBfYWRkcl90IGRpcmVjdF9hZGRyOyAgICAgICAgICAgICAgICAgICAvKio8IFNldCB3aGVuIHRoZSBzY2FubmVyIGlzIHVuYWJsZSB0byByZXNvbHZlIHRoZSBwcml2YXRlIHJlc29sdmFibGUgYWRkcmVzcyBvZiB0aGUgaW5pdGlhdG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBvZiBhIGRpcmVjdGVkIGFkdmVydGlzZW1lbnQgcGFja2V0IGFuZCB0aGUgc2Nhbm5lciBoYXMgYmVlbiBlbmFibGVkIHRvIHJlcG9ydCB0aGlzIGluIEByZWYgYmxlX2dhcF9zY2FuX3BhcmFtc190OjphZHZfZGlyX3JlcG9ydC4gKi8NCisgIGludDhfdCAgICAgICAgIHJzc2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBJbmRpY2F0aW9uIGluIGRCbS4gKi8NCisgIHVpbnQ4X3QgICAgICAgIHNjYW5fcnNwIDogMTsgICAgICAgICAgICAgICAgICAvKio8IElmIDEsIHRoZSByZXBvcnQgY29ycmVzcG9uZHMgdG8gYSBzY2FuIHJlc3BvbnNlIGFuZCB0aGUgdHlwZSBmaWVsZCBtYXkgYmUgaWdub3JlZC4gKi8NCisgIHVpbnQ4X3QgICAgICAgIHR5cGUgICAgIDogMjsgICAgICAgICAgICAgICAgICAvKio8IFNlZSBAcmVmIEJMRV9HQVBfQURWX1RZUEVTLiBPbmx5IHZhbGlkIGlmIHRoZSBzY2FuX3JzcCBmaWVsZCBpcyAwLiAqLw0KKyAgdWludDhfdCAgICAgICAgZGxlbiAgICAgOiA1OyAgICAgICAgICAgICAgICAgIC8qKjwgQWR2ZXJ0aXNpbmcgb3Igc2NhbiByZXNwb25zZSBkYXRhIGxlbmd0aC4gKi8NCisgIHVpbnQ4X3QgICAgICAgIGRhdGFbQkxFX0dBUF9BRFZfTUFYX1NJWkVdOyAgICAvKio8IEFkdmVydGlzaW5nIG9yIHNjYW4gcmVzcG9uc2UgZGF0YS4gKi8NCit9IGJsZV9nYXBfZXZ0X2Fkdl9yZXBvcnRfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX1NFQ19SRVFVRVNULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICBib25kICAgICAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyZm9ybSBib25kaW5nLiAqLw0KKyAgdWludDhfdCAgICBtaXRtICAgICAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTWFuIEluIFRoZSBNaWRkbGUgcHJvdGVjdGlvbiByZXF1ZXN0ZWQuICovDQorICB1aW50OF90ICAgIGxlc2MgICAgICAgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgcmVxdWVzdGVkLiAqLw0KKyAgdWludDhfdCAgICBrZXlwcmVzcyAgIDogMTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2VuZXJhdGlvbiBvZiBrZXlwcmVzcyBub3RpZmljYXRpb25zIHJlcXVlc3RlZC4gKi8NCit9IGJsZV9nYXBfZXZ0X3NlY19yZXF1ZXN0X3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURV9SRVFVRVNULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX2dhcF9jb25uX3BhcmFtc190IGNvbm5fcGFyYW1zOyAgICAgICAgICAgIC8qKjwgIEdBUCBDb25uZWN0aW9uIFBhcmFtZXRlcnMuICovDQorfSBibGVfZ2FwX2V2dF9jb25uX3BhcmFtX3VwZGF0ZV9yZXF1ZXN0X3Q7DQorDQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9TQ0FOX1JFUV9SRVBPUlQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBpbnQ4X3QgICAgICAgICAgICAgICAgICByc3NpOyAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggSW5kaWNhdGlvbiBpbiBkQm0uICovDQorICBibGVfZ2FwX2FkZHJfdCAgICAgICAgICBwZWVyX2FkZHI7ICAgICAgICAgLyoqPCBCbHVldG9vdGggYWRkcmVzcyBvZiB0aGUgcGVlciBkZXZpY2UuIElmIHRoZSBwZWVyX2FkZHIgcmVzb2x2ZWQ6IEByZWYgYmxlX2dhcF9hZGRyX3Q6OmFkZHJfaWRfcGVlciBpcyBzZXQgdG8gMQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBhZGRyZXNzIGlzIHRoZSBkZXZpY2UncyBpZGVudGl0eSBhZGRyZXNzLiAqLw0KK30gYmxlX2dhcF9ldnRfc2Nhbl9yZXFfcmVwb3J0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEVfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfZGF0YV9sZW5ndGhfcGFyYW1zX3QgcGVlcl9wYXJhbXM7IC8qKjwgUGVlciBkYXRhIGxlbmd0aCBwYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhcF9ldnRfZGF0YV9sZW5ndGhfdXBkYXRlX3JlcXVlc3RfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVBfRVZUX0RBVEFfTEVOR1RIX1VQREFURS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXBfZGF0YV9sZW5ndGhfcGFyYW1zX3QgZWZmZWN0aXZlX3BhcmFtczsgIC8qKjwgVGhlIGVmZmVjdGl2ZSBkYXRhIGxlbmd0aCBwYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhcF9ldnRfZGF0YV9sZW5ndGhfdXBkYXRlX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBUCBldmVudCBzdHJ1Y3R1cmUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCBjb25uX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIEhhbmRsZSBvbiB3aGljaCBldmVudCBvY2N1cnJlZC4gKi8NCisgIHVuaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHVuaW9uIGFsdGVybmF0aXZlIGlkZW50aWZpZWQgYnkgZXZ0X2lkIGluIGVuY2xvc2luZyBzdHJ1Y3QuICovDQorICB7DQorICAgIGJsZV9nYXBfZXZ0X2Nvbm5lY3RlZF90ICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZDsgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGVkIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2Rpc2Nvbm5lY3RlZF90ICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RlZDsgICAgICAgICAgICAgICAgIC8qKjwgRGlzY29ubmVjdGVkIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2Nvbm5fcGFyYW1fdXBkYXRlX3QgICAgICAgICAgIGNvbm5fcGFyYW1fdXBkYXRlOyAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBQYXJhbWV0ZXIgVXBkYXRlIFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X3NlY19wYXJhbXNfcmVxdWVzdF90ICAgICAgICAgIHNlY19wYXJhbXNfcmVxdWVzdDsgICAgICAgICAgIC8qKjwgU2VjdXJpdHkgUGFyYW1ldGVycyBSZXF1ZXN0IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X3NlY19pbmZvX3JlcXVlc3RfdCAgICAgICAgICAgIHNlY19pbmZvX3JlcXVlc3Q7ICAgICAgICAgICAgIC8qKjwgU2VjdXJpdHkgSW5mb3JtYXRpb24gUmVxdWVzdCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9wYXNza2V5X2Rpc3BsYXlfdCAgICAgICAgICAgICBwYXNza2V5X2Rpc3BsYXk7ICAgICAgICAgICAgICAvKio8IFBhc3NrZXkgRGlzcGxheSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9rZXlfcHJlc3NlZF90ICAgICAgICAgICAgICAgICBrZXlfcHJlc3NlZDsgICAgICAgICAgICAgICAgICAvKio8IEtleSBQcmVzc2VkIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2F1dGhfa2V5X3JlcXVlc3RfdCAgICAgICAgICAgIGF1dGhfa2V5X3JlcXVlc3Q7ICAgICAgICAgICAgIC8qKjwgQXV0aGVudGljYXRpb24gS2V5IFJlcXVlc3QgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfbGVzY19kaGtleV9yZXF1ZXN0X3QgICAgICAgICAgbGVzY19kaGtleV9yZXF1ZXN0OyAgICAgICAgICAgLyoqPCBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgREhLZXkgY2FsY3VsYXRpb24gcmVxdWVzdC4gKi8NCisgICAgYmxlX2dhcF9ldnRfYXV0aF9zdGF0dXNfdCAgICAgICAgICAgICAgICAgYXV0aF9zdGF0dXM7ICAgICAgICAgICAgICAgICAgLyoqPCBBdXRoZW50aWNhdGlvbiBTdGF0dXMgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfY29ubl9zZWNfdXBkYXRlX3QgICAgICAgICAgICAgY29ubl9zZWNfdXBkYXRlOyAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIFNlY3VyaXR5IFVwZGF0ZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF90aW1lb3V0X3QgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAvKio8IFRpbWVvdXQgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfcnNzaV9jaGFuZ2VkX3QgICAgICAgICAgICAgICAgcnNzaV9jaGFuZ2VkOyAgICAgICAgICAgICAgICAgLyoqPCBSU1NJIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2Fkdl9yZXBvcnRfdCAgICAgICAgICAgICAgICAgIGFkdl9yZXBvcnQ7ICAgICAgICAgICAgICAgICAgIC8qKjwgQWR2ZXJ0aXNpbmcgUmVwb3J0IEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X3NlY19yZXF1ZXN0X3QgICAgICAgICAgICAgICAgIHNlY19yZXF1ZXN0OyAgICAgICAgICAgICAgICAgIC8qKjwgU2VjdXJpdHkgUmVxdWVzdCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9jb25uX3BhcmFtX3VwZGF0ZV9yZXF1ZXN0X3QgICBjb25uX3BhcmFtX3VwZGF0ZV9yZXF1ZXN0OyAgICAvKio8IENvbm5lY3Rpb24gUGFyYW1ldGVyIFVwZGF0ZSBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2FwX2V2dF9zY2FuX3JlcV9yZXBvcnRfdCAgICAgICAgICAgICBzY2FuX3JlcV9yZXBvcnQ7ICAgICAgICAgICAgICAvKio8IFNjYW4gUmVxdWVzdCBSZXBvcnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfcGh5X3VwZGF0ZV90ICAgICAgICAgICAgICAgICAgcGh5X3VwZGF0ZTsgICAgICAgICAgICAgICAgICAgLyoqPCBQSFkgVXBkYXRlIFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXBfZXZ0X2RhdGFfbGVuZ3RoX3VwZGF0ZV9yZXF1ZXN0X3QgIGRhdGFfbGVuZ3RoX3VwZGF0ZV9yZXF1ZXN0OyAgIC8qKjwgRGF0YSBMZW5ndGggVXBkYXRlIFJlcXVlc3QgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhcF9ldnRfZGF0YV9sZW5ndGhfdXBkYXRlX3QgICAgICAgICAgZGF0YV9sZW5ndGhfdXBkYXRlOyAgICAgICAgICAgLyoqPCBEYXRhIExlbmd0aCBVcGRhdGUgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KK30gYmxlX2dhcF9ldnRfdDsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQkxFIEdBUCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgc2V0IHdpdGggQHJlZiBzZF9ibGVfY2ZnX3NldC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQ09OTl9DT1VOVCAgICAgVGhlIGNvbm5lY3Rpb24gY291bnQgZm9yIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb25zIGlzIHplcm8uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNICBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzdW0gb2YgY29ubl9jb3VudCBmb3IgYWxsIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbnMgY29tYmluZWQgZXhjZWVkcyBVSU5UOF9NQVguDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBldmVudCBsZW5ndGggaXMgc21hbGxlciB0aGFuIEByZWYgQkxFX0dBUF9FVkVOVF9MRU5HVEhfTUlOLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgY29ubl9jb3VudDsgICAgIC8qKjwgVGhlIG51bWJlciBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHRoZSBhcHBsaWNhdGlvbiBjYW4gY3JlYXRlIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYW5kIG1pbmltdW0gdmFsdWUgaXMgQHJlZiBCTEVfR0FQX0NPTk5fQ09VTlRfREVGQVVMVC4gKi8NCisgIHVpbnQxNl90IGV2ZW50X2xlbmd0aDsgICAvKio8IFRoZSB0aW1lIHNldCBhc2lkZSBmb3IgdGhpcyBjb25uZWN0aW9uIG9uIGV2ZXJ5IGNvbm5lY3Rpb24gaW50ZXJ2YWwgaW4gMS4yNSBtcyB1bml0cy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEByZWYgQkxFX0dBUF9FVkVOVF9MRU5HVEhfREVGQVVMVCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgQHJlZiBCTEVfR0FQX0VWRU5UX0xFTkdUSF9NSU4uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXZlbnQgbGVuZ3RoIGFuZCB0aGUgY29ubmVjdGlvbiBpbnRlcnZhbCBhcmUgdGhlIHByaW1hcnkgcGFyYW1ldGVycw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNldHRpbmcgdGhlIHRocm91Z2hwdXQgb2YgYSBjb25uZWN0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBTb2Z0RGV2aWNlIFNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhyb3VnaHB1dC4gKi8NCit9IGJsZV9nYXBfY29ubl9jZmdfdDsNCisNCisNCisvKioNCisgKiBAYnJpZWYgQ29uZmlndXJhdGlvbiBvZiBtYXhpbXVtIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgaW4gdGhlIGRpZmZlcmVudCBjb25uZWN0ZWQgcm9sZXMsIHNldCB3aXRoDQorICogQHJlZiBzZF9ibGVfY2ZnX3NldC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQ09OTl9DT1VOVCAgICAgVGhlIHN1bSBvZiBwZXJpcGhfcm9sZV9jb3VudCBhbmQgY2VudHJhbF9yb2xlX2NvdW50IGlzIHRvbw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UuIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzdW0gb2YgY29uY3VycmVudCBjb25uZWN0aW9ucyBpcw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBCTEVfR0FQX1JPTEVfQ09VTlRfQ09NQklORURfTUFYLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSAgY2VudHJhbF9zZWNfY291bnQgaXMgbGFyZ2VyIHRoYW4gY2VudHJhbF9yb2xlX2NvdW50Lg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBwZXJpcGhfcm9sZV9jb3VudDsgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgY29uY3VycmVudGx5IGFjdGluZyBhcyBhIHBlcmlwaGVyYWwuIERlZmF1bHQgdmFsdWUgaXMgQHJlZiBCTEVfR0FQX1JPTEVfQ09VTlRfUEVSSVBIX0RFRkFVTFQuICovDQorICB1aW50OF90IGNlbnRyYWxfcm9sZV9jb3VudDsgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBjb25jdXJyZW50bHkgYWN0aW5nIGFzIGEgY2VudHJhbC4gRGVmYXVsdCB2YWx1ZSBpcyBAcmVmIEJMRV9HQVBfUk9MRV9DT1VOVF9DRU5UUkFMX0RFRkFVTFQuICovDQorICB1aW50OF90IGNlbnRyYWxfc2VjX2NvdW50OyAgLyoqPCBOdW1iZXIgb2YgU01QIGluc3RhbmNlcyBzaGFyZWQgYmV0d2VlbiBhbGwgY29ubmVjdGlvbnMgYWN0aW5nIGFzIGEgY2VudHJhbC4gRGVmYXVsdCB2YWx1ZSBpcyBAcmVmIEJMRV9HQVBfUk9MRV9DT1VOVF9DRU5UUkFMX1NFQ19ERUZBVUxULiAqLw0KK30gYmxlX2dhcF9jZmdfcm9sZV9jb3VudF90Ow0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBEZXZpY2UgbmFtZSBhbmQgaXRzIHByb3BlcnRpZXMsIHNldCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICoNCisgKiBAbm90ZSAgSWYgdGhlIGRldmljZSBuYW1lIGlzIG5vdCBjb25maWd1cmVkLCB0aGUgZGVmYXVsdCBkZXZpY2UgbmFtZSB3aWxsIGJlIEByZWYNCisgKiAgICAgICAgQkxFX0dBUF9ERVZOQU1FX0RFRkFVTFQsIHRoZSBtYXhpbXVtIGRldmljZSBuYW1lIGxlbmd0aCB3aWxsIGJlIEByZWYNCisgKiAgICAgICAgQkxFX0dBUF9ERVZOQU1FX0RFRkFVTFRfTEVOLCB2bG9jIHdpbGwgYmUgc2V0IHRvIEByZWYgQkxFX0dBVFRTX1ZMT0NfU1RBQ0sgYW5kIHRoZSBkZXZpY2UgbmFtZQ0KKyAqICAgICAgICB3aWxsIGhhdmUgbm8gd3JpdGUgYWNjZXNzLg0KKyAqDQorICogQG5vdGUgIElmIEByZWYgbWF4X2xlbiBpcyBtb3JlIHRoYW4gQHJlZiBCTEVfR0FQX0RFVk5BTUVfREVGQVVMVF9MRU4gYW5kIHZsb2MgaXMgc2V0IHRvIEByZWYgQkxFX0dBVFRTX1ZMT0NfU1RBQ0ssDQorICogICAgICAgIHRoZSBhdHRyaWJ1dGUgdGFibGUgc2l6ZSBtdXN0IGJlIGluY3JlYXNlZCB0byBoYXZlIHJvb20gZm9yIHRoZSBsb25nZXIgZGV2aWNlIG5hbWUgKHNlZQ0KKyAqICAgICAgICBAcmVmIHNkX2JsZV9jZmdfc2V0IGFuZCBAcmVmIGJsZV9nYXR0c19jZmdfYXR0cl90YWJfc2l6ZV90KS4NCisgKg0KKyAqIEBub3RlICBJZiB2bG9jIGlzIEByZWYgQkxFX0dBVFRTX1ZMT0NfU1RBQ0sgOg0KKyAqICAgICAgICAtIHBfdmFsdWUgbXVzdCBwb2ludCB0byBub24tdm9sYXRpbGUgbWVtb3J5IChmbGFzaCkgb3IgYmUgTlVMTC4NCisgKiAgICAgICAgLSBJZiBwX3ZhbHVlIGlzIE5VTEwsIHRoZSBkZXZpY2UgbmFtZSB3aWxsIGluaXRpYWxseSBiZSBlbXB0eS4NCisgKg0KKyAqIEBub3RlICBJZiB2bG9jIGlzIEByZWYgQkxFX0dBVFRTX1ZMT0NfVVNFUiA6DQorICogICAgICAgIC0gcF92YWx1ZSBjYW5ub3QgYmUgTlVMTC4NCisgKiAgICAgICAgLSBJZiB0aGUgZGV2aWNlIG5hbWUgaXMgd3JpdGFibGUsIHBfdmFsdWUgbXVzdCBwb2ludCB0byB2b2xhdGlsZSBtZW1vcnkgKFJBTSkuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBkZXZpY2UgbmFtZSBsb2NhdGlvbiAodmxvYykuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgZGV2aWNlIG5hbWUgc2VjdXJpdHkgbW9kZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfTEVOR1RIIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGRldmljZSBuYW1lIGxlbmd0aCBpcyBpbnZhbGlkIChtdXN0IGJlIGJldHdlZW4gMCBhbmQgQHJlZiBCTEVfR0FQX0RFVk5BTUVfTUFYX0xFTikuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBkZXZpY2UgbmFtZSBsZW5ndGggaXMgdG9vIGxvbmcgZm9yIHRoZSBnaXZlbiBBdHRyaWJ1dGUgVGFibGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEICBEZXZpY2UgbmFtZSBzZWN1cml0eSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2Nvbm5fc2VjX21vZGVfdCAgd3JpdGVfcGVybTsgICAvKio8IFdyaXRlIHBlcm1pc3Npb25zLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgIHZsb2M6MjsgICAgICAgLyoqPCBWYWx1ZSBsb2NhdGlvbiwgc2VlIEByZWYgQkxFX0dBVFRTX1ZMT0NTLiovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICAqcF92YWx1ZTsgICAgICAvKio8IFBvaW50ZXIgdG8gd2hlcmUgdGhlIHZhbHVlIChkZXZpY2UgbmFtZSkgaXMgc3RvcmVkIG9yIHdpbGwgYmUgc3RvcmVkLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGVuOyAgLyoqPCBDdXJyZW50IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcF92YWx1ZS4qLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgIG1heF9sZW47ICAgICAgLyoqPCBNYXhpbXVtIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcF92YWx1ZS4qLw0KK30gYmxlX2dhcF9jZmdfZGV2aWNlX25hbWVfdDsNCisNCisNCisvKipAYnJpZWYgQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIEdBUCBjb25maWd1cmF0aW9ucy4gKi8NCit0eXBlZGVmIHVuaW9uDQorew0KKyAgYmxlX2dhcF9jZmdfcm9sZV9jb3VudF90ICByb2xlX2NvdW50X2NmZzsgIC8qKjwgUm9sZSBjb3VudCBjb25maWd1cmF0aW9uLCBjZmdfaWQgaXMgQHJlZiBCTEVfR0FQX0NGR19ST0xFX0NPVU5ULiAqLw0KKyAgYmxlX2dhcF9jZmdfZGV2aWNlX25hbWVfdCBkZXZpY2VfbmFtZV9jZmc7IC8qKjwgRGV2aWNlIG5hbWUgY29uZmlndXJhdGlvbiwgY2ZnX2lkIGlzIEByZWYgQkxFX0dBUF9DRkdfREVWSUNFX05BTUUuICovDQorfSBibGVfZ2FwX2NmZ190Ow0KKw0KKw0KKy8qKkBicmllZiBDaGFubmVsIE1hcCBvcHRpb24uDQorICogICAgICAgIFVzZWQgd2l0aCBAcmVmIHNkX2JsZV9vcHRfZ2V0IHRvIGdldCB0aGUgY3VycmVudCBjaGFubmVsIG1hcA0KKyAqICAgICAgICBvciBAcmVmIHNkX2JsZV9vcHRfc2V0IHRvIHNldCBhIG5ldyBjaGFubmVsIG1hcC4gV2hlbiBzZXR0aW5nIHRoZQ0KKyAqICAgICAgICBjaGFubmVsIG1hcCwgaXQgYXBwbGllcyB0byBhbGwgY3VycmVudCBhbmQgZnV0dXJlIGNvbm5lY3Rpb25zLiBXaGVuIGdldHRpbmcgdGhlDQorICogICAgICAgIGN1cnJlbnQgY2hhbm5lbCBtYXAsIGl0IGFwcGxpZXMgdG8gYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgdGhlIGNvbm5lY3Rpb24gaGFuZGxlDQorICogICAgICAgIG11c3QgYmUgc3VwcGxpZWQuDQorICoNCisgKiBAbm90ZSAgU2V0dGluZyB0aGUgY2hhbm5lbCBtYXAgbWF5IHRha2Ugc29tZSB0aW1lLCBkZXBlbmRpbmcgb24gY29ubmVjdGlvbiBwYXJhbWV0ZXJzLg0KKyAqICAgICAgICBUaGUgdGltZSB0YWtlbiBtYXkgYmUgZGlmZmVyZW50IGZvciBlYWNoIGNvbm5lY3Rpb24gYW5kIHRoZSBnZXQgb3BlcmF0aW9uIHdpbGwNCisgKiAgICAgICAgcmV0dXJuIHRoZSBwcmV2aW91cyBjaGFubmVsIG1hcCB1bnRpbCB0aGUgbmV3IG9uZSBoYXMgdGFrZW4gZWZmZWN0Lg0KKyAqDQorICogQG5vdGUgIEFmdGVyIHNldHRpbmcgdGhlIGNoYW5uZWwgbWFwLCBieSBzcGVjIGl0IGNhbiBub3QgYmUgc2V0IGFnYWluIHVudGlsIGF0IGxlYXN0IDEgcyBoYXMgcGFzc2VkLg0KKyAqICAgICAgICBTZWUgQmx1ZXRvb3RoIFNwZWNpZmljYXRpb24gVmVyc2lvbiA0LjEgVm9sdW1lIDIsIFBhcnQgRSwgU2VjdGlvbiA3LjMuNDYuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgR2V0IG9yIHNldCBzdWNjZXNzZnVsLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDaGFubmVsIG1hcCB3YXMgc2V0IGFnYWluIGJlZm9yZSBlbm91Z2ggdGltZSBoYWQgcGFzc2VkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkIGZvciBnZXQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIFJldHVybmVkIGJ5IHNkX2JsZV9vcHRfc2V0IGluIHBlcmlwaGVyYWwtb25seSBTb2Z0RGV2aWNlcy4NCisgKg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgY29ubl9oYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgKG9ubHkgYXBwbGljYWJsZSBmb3IgZ2V0KSAqLw0KKyAgdWludDhfdCBjaF9tYXBbNV07ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhbm5lbCBNYXAgKDM3LWJpdCkuICovDQorfSBibGVfZ2FwX29wdF9jaF9tYXBfdDsNCisNCisNCisvKipAYnJpZWYgTG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5IG9wdGlvbi4NCisgKg0KKyAqICAgICAgICBMb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kgaXMgYSBmZWF0dXJlIHdoaWNoIGVuYWJsZXMgdGhlIHNsYXZlIHRvIGltcHJvdmUNCisgKiAgICAgICAgY3VycmVudCBjb25zdW1wdGlvbiBieSBpZ25vcmluZyB0aGUgc2xhdmUgbGF0ZW5jeSBzZXQgYnkgdGhlIHBlZXIuIFRoZQ0KKyAqICAgICAgICBsb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kgY2FuIG9ubHkgYmUgc2V0IHRvIGEgbXVsdGlwbGUgb2YgdGhlIHNsYXZlIGxhdGVuY3ksDQorICogICAgICAgIGFuZCBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gaGFsZiBvZiB0aGUgc3VwZXJ2aXNpb24gdGltZW91dC4NCisgKg0KKyAqICAgICAgICBVc2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X3NldCB0byBzZXQgdGhlIGxvY2FsIGNvbm5lY3Rpb24gbGF0ZW5jeS4gVGhlDQorICogICAgICAgIEByZWYgc2RfYmxlX29wdF9nZXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBvcHRpb24sIGJ1dCB0aGUgYWN0dWFsDQorICogICAgICAgIGxvY2FsIGNvbm5lY3Rpb24gbGF0ZW5jeSAodW5sZXNzIHNldCB0byBOVUxMKSBpcyBzZXQgYXMgYSByZXR1cm4gcGFyYW1ldGVyDQorICogICAgICAgIHdoZW4gc2V0dGluZyB0aGUgb3B0aW9uLg0KKyAqDQorICogQG5vdGUgIFRoZSBsYXRlbmN5IHNldCB3aWxsIGJlIHRydW5jYXRlZCBkb3duIHRvIHRoZSBjbG9zZXN0IHNsYXZlIGxhdGVuY3kgZXZlbnQNCisgKiAgICAgICAgbXVsdGlwbGUsIG9yIHRoZSBuZWFyZXN0IG11bHRpcGxlIGJlZm9yZSBoYWxmIG9mIHRoZSBzdXBlcnZpc2lvbiB0aW1lb3V0Lg0KKyAqDQorICogQG5vdGUgIFRoZSBsb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIG5ldw0KKyAqICAgICAgICBjb25uZWN0aW9ucyBhbmQgd2hlbmV2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgdXBkYXRlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBHZXQgaXMgbm90IHN1cHBvcnRlZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBwYXJhbWV0ZXIuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgIGNvbm5faGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIEhhbmRsZSAqLw0KKyAgdWludDE2X3QgICByZXF1ZXN0ZWRfbGF0ZW5jeTsgICAgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdGVkIGxvY2FsIGNvbm5lY3Rpb24gbGF0ZW5jeS4gKi8NCisgIHVpbnQxNl90ICogcF9hY3R1YWxfbGF0ZW5jeTsgICAgICAgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGFjdHVhbCBsb2NhbCBjb25uZWN0aW9uIGxhdGVuY3kgKGNhbiBiZSBzZXQgdG8gTlVMTCB0byBza2lwIHJldHVybiB2YWx1ZSkuICovDQorfSBibGVfZ2FwX29wdF9sb2NhbF9jb25uX2xhdGVuY3lfdDsNCisNCisvKipAYnJpZWYgRGlzYWJsZSBzbGF2ZSBsYXRlbmN5DQorICoNCisgKiBVc2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X3NldCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIHNsYXZlIGxhdGVuY3kgb2YgYSBwZXJpcGhlcmFsIGNvbm5lY3Rpb24gKHNlZSBAcmVmIGJsZV9nYXBfY29ubl9wYXJhbXNfdDo6c2xhdmVfbGF0ZW5jeSkuIEFuZCB0byByZS1lbmFibGUgaXQgYWdhaW4uDQorICogV2hlbiBkaXNhYmxlZCwgdGhlIHBlcmlwaGVyYWwgd2lsbCBpZ25vcmUgdGhlIHNsYXZlX2xhdGVuY3kgc2V0IGJ5IHRoZSBjZW50cmFsLg0KKyAqDQorICogQG5vdGUgIFNoYWxsIG9ubHkgYmUgY2FsbGVkIG9uIHBlcmlwaGVyYWwgbGlua3MuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9TVVBQT1JURUQgR2V0IGlzIG5vdCBzdXBwb3J0ZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgcGFyYW1ldGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICBjb25uX2hhbmRsZTsgICAgLyoqPCBDb25uZWN0aW9uIEhhbmRsZSAqLw0KKyAgdWludDhfdCAgICBkaXNhYmxlIDogMTsgICAgLyoqPCBTZXQgdG8gMSB0byBkaXNhYmxlIHNsYXZlIGxhdGVuY3kuIFNldCB0byAwIGVuYWJsZSBpdCBhZ2Fpbi4qLw0KK30gYmxlX2dhcF9vcHRfc2xhdmVfbGF0ZW5jeV9kaXNhYmxlX3Q7DQorDQorLyoqQGJyaWVmIFBhc3NrZXkgT3B0aW9uLg0KKyAqDQorICogICAgICAgIFN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBwYXNza2V5IHRvIGJlIHVzZWQgZHVyaW5nIHBhaXJpbmcuIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCBAcmVmDQorICogICAgICAgIHNkX2JsZV9vcHRfc2V0IHRvIG1ha2UgdGhlIFNvZnREZXZpY2UgdXNlIGEgcHJlcHJvZ3JhbW1lZCBwYXNza2V5IGZvciBhdXRoZW50aWNhdGlvbg0KKyAqICAgICAgICBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSByYW5kb20gb25lLg0KKyAqDQorICogQG5vdGUgIFJlcGVhdGVkIHBhaXJpbmcgYXR0ZW1wdHMgdXNpbmcgdGhlIHNhbWUgcHJlcHJvZ3JhbW1lZCBwYXNza2V5IG1ha2VzIHBhaXJpbmcgdnVsbmVyYWJsZSB0byBNSVRNIGF0dGFja3MuDQorICoNCisgKiBAbm90ZSAgQHJlZiBzZF9ibGVfb3B0X2dldCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG9wdGlvbi4NCisgKg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBjb25zdCAqIHBfcGFzc2tleTsgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byA2LWRpZ2l0IEFTQ0lJIHN0cmluZyAoZGlnaXQgMC4uOSBvbmx5LCBubyBOVUxMIHRlcm1pbmF0aW9uKSBwYXNza2V5IHRvIGJlIHVzZWQgZHVyaW5nIHBhaXJpbmcuIElmIHRoaXMgaXMgTlVMTCwgdGhlIFNvZnREZXZpY2Ugd2lsbCBnZW5lcmF0ZSBhIHJhbmRvbSBwYXNza2V5IGlmIHJlcXVpcmVkLiovDQorfSBibGVfZ2FwX29wdF9wYXNza2V5X3Q7DQorDQorDQorLyoqQGJyaWVmIFNjYW4gcmVxdWVzdCByZXBvcnQgb3B0aW9uLg0KKyAqDQorICogICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCBAcmVmIHNkX2JsZV9vcHRfc2V0IHRvIG1ha2UgdGhlIFNvZnREZXZpY2Ugc2VuZA0KKyAqICAgICAgICBAcmVmIEJMRV9HQVBfRVZUX1NDQU5fUkVRX1JFUE9SVCBldmVudHMuDQorICoNCisgKiBAbm90ZSAgRHVlIHRvIHRoZSBsaW1pdGVkIHNwYWNlIHJlc2VydmVkIGZvciBzY2FuIHJlcXVlc3QgcmVwb3J0IGV2ZW50cywNCisgKiAgICAgICAgbm90IGFsbCByZWNlaXZlZCBzY2FuIHJlcXVlc3RzIHdpbGwgYmUgcmVwb3J0ZWQuDQorICoNCisgKiBAbm90ZSAgSWYgd2hpdGVsaXN0aW5nIGlzIHVzZWQsIG9ubHkgd2hpdGVsaXN0ZWQgcmVxdWVzdHMgYXJlIHJlcG9ydGVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFdoZW4gYWR2ZXJ0aXNpbmcgaXMgb25nb2luZyB3aGlsZSB0aGUgb3B0aW9uIGlzIHNldC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgZW5hYmxlIDogMTsgLyoqPCBFbmFibGUgc2NhbiByZXF1ZXN0IHJlcG9ydHMuICovDQorfSBibGVfZ2FwX29wdF9zY2FuX3JlcV9yZXBvcnRfdDsNCisNCisvKipAYnJpZWYgQ29tcGF0aWJpbGl0eSBtb2RlIDEgb3B0aW9uLg0KKyAqDQorICogICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCBAcmVmIHNkX2JsZV9vcHRfc2V0IHRvIGVuYWJsZSBhbmQgZGlzYWJsZQ0KKyAqICAgICAgICBjb21wYXRpYmlsaXR5IG1vZGUgMS4gQ29tcGF0aWJpbGl0eSBtb2RlIDEgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4NCisgKg0KKyAqICBAbm90ZSAgQ29tcGF0aWJpbGl0eSBtb2RlIDEgZW5hYmxlcyBpbnRlcm9wZXJhYmlsaXR5IHdpdGggZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0DQorICogICAgICAgICBhIHZhbHVlIG9mIDAgZm9yIHRoZSBXaW5PZmZzZXQgcGFyYW1ldGVyIGluIHRoZSBMaW5rIExheWVyIENPTk5FQ1RfUkVRIHBhY2tldC4NCisgKg0KKyAqICBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU2V0IHN1Y2Nlc3NmdWxseS4NCisgKiAgQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFdoZW4gY29ubmVjdGlvbiBjcmVhdGlvbiBpcyBvbmdvaW5nIHdoaWxlIG1vZGUgMSBpcyBzZXQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgdWludDhfdCBlbmFibGUgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIGNvbXBhdGliaWxpdHkgbW9kZSAxLiovDQorfSBibGVfZ2FwX29wdF9jb21wYXRfbW9kZV8xX3Q7DQorDQorLyoqQGJyaWVmIENvbXBhdGliaWxpdHkgbW9kZSAyIG9wdGlvbi4NCisgKg0KKyAqICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X3NldCB0byBlbmFibGUgY29tcGF0aWJpbGl0eSBtb2RlIDIuDQorICogICAgICAgIENvbXBhdGliaWxpdHkgbW9kZSAyIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQorICoNCisgKiAgQG5vdGUgIENvbXBhdGliaWxpdHkgbW9kZSAyIGVuYWJsZXMgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIGRldmljZXMgdGhhdCBpbml0aWF0ZSBGZWF0dXJlIGV4Y2hhbmdlDQorICogICAgICAgICBhbmQgdmVyc2lvbiBleGNoYW5nZSBwcm9jZWR1cmUgaW4gcGFyYWxsZWwuDQorICoNCisgKiAgQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBpZiBlbmFibGUgYml0IGlzIG5vdCBzZXQgdG8gMS4gQ3VycmVudGx5IG9ubHkgZW5hYmxpbmcgaXMgc3VwcG9ydGVkLg0KKyAqICBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgV2hlbiBhbnkgcm9sZSBpcyBydW5uaW5nIHdoaWxlIG1vZGUgMiBpcyBzZXQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgdWludDhfdCBlbmFibGUgOiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIGNvbXBhdGliaWxpdHkgbW9kZSAyLiovDQorfSBibGVfZ2FwX29wdF9jb21wYXRfbW9kZV8yX3Q7DQorDQorDQorLyoqQGJyaWVmIEF1dGhlbnRpY2F0ZWQgcGF5bG9hZCB0aW1lb3V0IG9wdGlvbi4NCisgKg0KKyAqICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdpdGggQHJlZiBzZF9ibGVfb3B0X3NldCB0byBjaGFuZ2UgdGhlIEF1dGhlbnRpY2F0ZWQgcGF5bG9hZCB0aW1lb3V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiA4IG1pbnV0ZXMuDQorICoNCisgKiBAbm90ZSAgVGhlIGF1dGhlbnRpY2F0ZWQgcGF5bG9hZCB0aW1lb3V0IGV2ZW50IDo6QkxFX0dBUF9USU1FT1VUX1NSQ19BVVRIX1BBWUxPQUQgd2lsbCBiZSBnZW5lcmF0ZWQNCisgKiAgICAgICAgaWYgYXV0aF9wYXlsb2FkX3RpbWVvdXQgdGltZSBoYXMgZWxhcHNlZCB3aXRob3V0IHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIGEgdmFsaWQgTUlDIG9uIGFuIGVuY3J5cHRlZA0KKyAqICAgICAgICBsaW5rLg0KKyAqDQorICogQG5vdGUgIFRoZSBMRSBwaW5nIHByb2NlZHVyZSB3aWxsIGJlIGluaXRpYXRlZCBiZWZvcmUgdGhlIHRpbWVyIGV4cGlyZXMgdG8gZ2l2ZSB0aGUgcGVlciBhIGNoYW5jZQ0KKyAqICAgICAgICB0byByZXNldCB0aGUgdGltZXIuIEluIGFkZGl0aW9uIHRoZSBzdGFjayB3aWxsIHRyeSB0byBwcmlvcml0aXplIHJ1bm5pbmcgb2YgTEUgcGluZyBvdmVyIG90aGVyDQorICogICAgICAgIGFjdGl2aXRpZXMgdG8gaW5jcmVhc2UgY2hhbmNlcyBvZiBmaW5pc2hpbmcgTEUgcGluZyBiZWZvcmUgdGltZXIgZXhwaXJlcy4gVG8gYXZvaWQgc2lkZS1lZmZlY3RzDQorICogICAgICAgIG9uIG90aGVyIGFjdGl2aXRpZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBoaWdoIHRpbWVvdXQgdmFsdWVzLg0KKyAqICAgICAgICBSZWNvbW1lbmRlZCB0aW1lb3V0ID4gMiooY29ubkludGVydmFsICogKDYgKyBjb25uU2xhdmVMYXRlbmN5KSkuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuIGF1dGhfcGF5bG9hZF90aW1lb3V0IHdhcyBvdXRzaWRlIG9mIGFsbG93ZWQgcmFuZ2UuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgcGFyYW1ldGVyLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICBjb25uX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29ubmVjdGlvbiBIYW5kbGUgKi8NCisgIHVpbnQxNl90ICAgYXV0aF9wYXlsb2FkX3RpbWVvdXQ7ICAgICAgICAgICAgICAvKio8IFJlcXVlc3RlZCB0aW1lb3V0IGluIDEwIG1zIHVuaXQuIE1heGltdW0gaXMgNDggMDAwICg9NDgwIDAwMCBtcyA9OCBtaW4pLiBNaW5pbXVtIGlzIDEgKD0xMCBtcykuICovDQorfSBibGVfZ2FwX29wdF9hdXRoX3BheWxvYWRfdGltZW91dF90Ow0KKw0KKy8qKkBicmllZiBQcmVmZXJyZWQgUEhZIG9wdGlvbg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBjYW4gYmUgdXNlZCB3aXRoIEByZWYgc2RfYmxlX29wdF9zZXQgdG8gY2hhbmdlIHRoZSBwcmVmZXJyZWQgUEhZcy4gQmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRoZSBQSFlzDQorICogZm9yIHBlZXIgaW5pdGlhdGVkIFBIWSBVcGRhdGUgcHJvY2VkdXJlIGlzIEByZWYgQkxFX0dBUF9QSFlfMU1CUFMuIElmIEByZWYgYmxlX2dhcF9vcHRfcHJlZmVycmVkX3BoeXNfdDo6dHhfcGh5cyBvcg0KKyAqIEByZWYgYmxlX2dhcF9vcHRfcHJlZmVycmVkX3BoeXNfdDo6cnhfcGh5cyBpcyAwLCB0aGVuIHRoZSBzdGFjayB3aWxsIHNlbGVjdCBQSFlzIGJhc2VkIG9uIHRoZSBwZWVyIHJlcXVpcmVtZW50cyBvbiB0aGF0IHNwZWNpZmljIGRpcmVjdGlvbi4NCisgKg0KKyAqIEBub3RlIFRoZSBwcmVmZXJyZWQgUEhZcyBhcmUgb25seSB2YWxpZCBmb3IgbmV3bHkgY3JlYXRlZCBjb25uZWN0aW9ucyBhZnRlciB0aGlzIG9wdGlvbiBpcyBjYWxsZWQuIElmIHRoZSBQSFlzIHNob3VsZCBiZQ0KKyAqIGNoYW5nZWQgZm9yIGFuIGV4aXN0aW5nIGxpbmsgdGhlIEByZWYgc2RfYmxlX2dhcF9waHlfcmVxdWVzdCB3b3VsZCBoYXZlIHRvIGJlIGNhbGxlZCwgYW5kIHRoYXQgd291bGQgdHJ5IHRvIHVwZGF0ZSB0aGUNCisgKiBQSFlzIGZvciB0aGUgZ2l2ZW4gbGluay4NCisgKg0KKyAqIEBub3RlIHR4X3BoeXMgYW5kIHJ4X3BoeXMgYXJlIGJpdGZpZWxkcywgdG8gaW5kaWNhdGUgbXVsdGlwbGUgcHJlZmVycmVkIFBIWXMgZm9yIGVhY2ggZGlyZWN0aW9uIHRoZXkgY2FuIGJlIE9SZWQgdG9nZXRoZXIuDQorICogQGNvZGUNCisgKiB0eF9waHlzID0gQkxFX0dBUF9QSFlfMU1CUFMgfCBCTEVfR0FQX1BIWV8yTUJQUzsNCisgKiByeF9waHlzID0gQkxFX0dBUF9QSFlfMU1CUFMgfCBCTEVfR0FQX1BIWV8yTUJQUzsNCisgKiBAZW5kY29kZQ0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1BIWV9VUERBVEUsIFJlc3VsdCBvZiB0aGUgUEhZIFVwZGF0ZSBpZiBpbml0aWF0ZWQgYnkgcGVlci59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9QSFlfUkVRVUVTVH0NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIRVJBTF9QSFlfUkVRVUVTVH0NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFNldCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgdHhfcGh5czsgICAgIC8qKjwgUHJlZmVycmVkIHRyYW5zbWl0IFBIWXMsIHNlZSBAcmVmIEJMRV9HQVBfUEhZUy4gKi8NCisgIHVpbnQ4X3QgIHJ4X3BoeXM7ICAgICAvKio8IFByZWZlcnJlZCByZWNlaXZlIFBIWXMsIHNlZSBAcmVmIEJMRV9HQVBfUEhZUy4gKi8NCit9IGJsZV9nYXBfb3B0X3ByZWZlcnJlZF9waHlzX3Q7DQorDQorLyoqQGJyaWVmIE9wdGlvbiBzdHJ1Y3R1cmUgZm9yIEdBUCBvcHRpb25zLiAqLw0KK3R5cGVkZWYgdW5pb24NCit7DQorICBibGVfZ2FwX29wdF9jaF9tYXBfdCAgICAgICAgICAgICAgICAgIGNoX21hcDsgICAgICAgICAgICAgICAgICAgIC8qKjwgUGFyYW1ldGVycyBmb3IgdGhlIENoYW5uZWwgTWFwIG9wdGlvbi4gKi8NCisgIGJsZV9nYXBfb3B0X2xvY2FsX2Nvbm5fbGF0ZW5jeV90ICAgICAgbG9jYWxfY29ubl9sYXRlbmN5OyAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciB0aGUgTG9jYWwgY29ubmVjdGlvbiBsYXRlbmN5IG9wdGlvbiAqLw0KKyAgYmxlX2dhcF9vcHRfcGFzc2tleV90ICAgICAgICAgICAgICAgICBwYXNza2V5OyAgICAgICAgICAgICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBQYXNza2V5IG9wdGlvbi4qLw0KKyAgYmxlX2dhcF9vcHRfc2Nhbl9yZXFfcmVwb3J0X3QgICAgICAgICBzY2FuX3JlcV9yZXBvcnQ7ICAgICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBzY2FuIHJlcXVlc3QgcmVwb3J0IG9wdGlvbi4qLw0KKyAgYmxlX2dhcF9vcHRfY29tcGF0X21vZGVfMV90ICAgICAgICAgICBjb21wYXRfbW9kZV8xOyAgICAgICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBjb21wYXRpYmlsaXR5IG1vZGUgMSBvcHRpb24uKi8NCisgIGJsZV9nYXBfb3B0X2NvbXBhdF9tb2RlXzJfdCAgICAgICAgICAgY29tcGF0X21vZGVfMjsgICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciB0aGUgY29tcGF0aWJpbGl0eSBtb2RlIDIgb3B0aW9uLiovDQorICBibGVfZ2FwX29wdF9hdXRoX3BheWxvYWRfdGltZW91dF90ICAgIGF1dGhfcGF5bG9hZF90aW1lb3V0OyAgICAgIC8qKjwgUGFyYW1ldGVycyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgcGF5bG9hZCB0aW1lb3V0IG9wdGlvbi4qLw0KKyAgYmxlX2dhcF9vcHRfcHJlZmVycmVkX3BoeXNfdCAgICAgICAgICBwcmVmZXJyZWRfcGh5czsgICAgICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHRoZSBwcmVmZXJyZWQgUEhZcyBvcHRpb24uICovDQorICBibGVfZ2FwX29wdF9zbGF2ZV9sYXRlbmN5X2Rpc2FibGVfdCAgIHNsYXZlX2xhdGVuY3lfZGlzYWJsZTsgICAgIC8qKjwgUGFyYW1ldGVycyBmb3IgdGhlIERpc2FibGUgc2xhdmUgbGF0ZW5jeSBvcHRpb24gKi8NCit9IGJsZV9nYXBfb3B0X3Q7DQorLyoqQH0gKi8NCisNCisNCisvKipAYWRkdG9ncm91cCBCTEVfR0FQX0ZVTkNUSU9OUyBGdW5jdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBTZXQgdGhlIGxvY2FsIEJsdWV0b290aCBpZGVudGl0eSBhZGRyZXNzLg0KKyAqDQorICogICAgICAgIFRoZSBsb2NhbCBCbHVldG9vdGggaWRlbnRpdHkgYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyB0aGF0IGlkZW50aWZpZXMgdGhpcyBkZXZpY2UgdG8gb3RoZXIgcGVlcnMuDQorICogICAgICAgIFRoZSBhZGRyZXNzIHR5cGUgbXVzdCBiZSBlaXRoZXIgQHJlZiBCTEVfR0FQX0FERFJfVFlQRV9QVUJMSUMgb3IgQHJlZiBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fU1RBVElDLg0KKyAqICAgICAgICBUaGUgaWRlbnRpdHkgYWRkcmVzcyBjYW5ub3QgYmUgY2hhbmdlZCB3aGlsZSByb2xlcyBhcmUgcnVubmluZy4NCisgKg0KKyAqIEBub3RlICBUaGlzIGFkZHJlc3Mgd2lsbCBiZSBkaXN0cmlidXRlZCB0byB0aGUgcGVlciBkdXJpbmcgYm9uZGluZy4NCisgKiAgICAgICAgSWYgdGhlIGFkZHJlc3MgY2hhbmdlcywgdGhlIGFkZHJlc3Mgc3RvcmVkIGluIHRoZSBwZWVyIGRldmljZSB3aWxsIG5vdCBiZSB2YWxpZCBhbmQgdGhlIGFiaWxpdHkgdG8NCisgKiAgICAgICAgcmVjb25uZWN0IHVzaW5nIHRoZSBvbGQgYWRkcmVzcyB3aWxsIGJlIGxvc3QuDQorICoNCisgKiBAbm90ZSAgQnkgZGVmYXVsdCB0aGUgU29mdERldmljZSB3aWxsIHNldCBhbiBhZGRyZXNzIG9mIHR5cGUgQHJlZiBCTEVfR0FQX0FERFJfVFlQRV9SQU5ET01fU1RBVElDIHVwb24gYmVpbmcNCisgKiAgICAgICAgZW5hYmxlZC4gVGhlIGFkZHJlc3MgaXMgYSByYW5kb20gbnVtYmVyIHBvcHVsYXRlZCBkdXJpbmcgdGhlIElDIG1hbnVmYWN0dXJpbmcgcHJvY2VzcyBhbmQgcmVtYWlucyB1bmNoYW5nZWQNCisgKiAgICAgICAgZm9yIHRoZSBsaWZldGltZSBvZiBlYWNoIElDLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQURWX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBwX2FkZHIgUG9pbnRlciB0byBhZGRyZXNzIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBZGRyZXNzIHN1Y2Nlc3NmdWxseSBzZXQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FQX0lOVkFMSURfQkxFX0FERFIgSW52YWxpZCBhZGRyZXNzLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgc3RhY2sgaXMgYnVzeSwgcHJvY2VzcyBwZW5kaW5nIGV2ZW50cyBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFRoZSBpZGVudGl0eSBhZGRyZXNzIGNhbm5vdCBiZSBjaGFuZ2VkIHdoaWxlIHRoZSByb2xlcyBhcmUgcnVubmluZy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9BRERSX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfYWRkcl9zZXQoYmxlX2dhcF9hZGRyX3QgY29uc3QgKnBfYWRkcikpOw0KKw0KKw0KKy8qKkBicmllZiBHZXQgbG9jYWwgQmx1ZXRvb3RoIGlkZW50aXR5IGFkZHJlc3MuDQorICoNCisgKiBAbm90ZSAgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIGlkZW50aXR5IGFkZHJlc3MgaXJyZXNwZWN0aXZlIG9mIHRoZSBwcml2YWN5IHNldHRpbmdzLA0KKyAqICAgICAgICBpLmUuIHRoZSBhZGRyZXNzIHR5cGUgd2lsbCBhbHdheXMgYmUgZWl0aGVyIEByZWYgQkxFX0dBUF9BRERSX1RZUEVfUFVCTElDIG9yIEByZWYgQkxFX0dBUF9BRERSX1RZUEVfUkFORE9NX1NUQVRJQy4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfYWRkciBQb2ludGVyIHRvIGFkZHJlc3Mgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBpbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBZGRyZXNzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBvciBOVUxMIHBvaW50ZXIgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQUREUl9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2FkZHJfZ2V0KGJsZV9nYXBfYWRkcl90ICpwX2FkZHIpKTsNCisNCisNCisvKipAYnJpZWYgU2V0IHRoZSBhY3RpdmUgd2hpdGVsaXN0IGluIHRoZSBTb2Z0RGV2aWNlLg0KKyAqDQorICogQG5vdGUgIE9ubHkgb25lIHdoaXRlbGlzdCBjYW4gYmUgdXNlZCBhdCBhIHRpbWUgYW5kIHRoZSB3aGl0ZWxpc3QgaXMgc2hhcmVkIGJldHdlZW4gdGhlIEJMRSByb2xlcy4NCisgKiAgICAgICAgVGhlIHdoaXRlbGlzdCBjYW5ub3QgYmUgc2V0IGlmIGEgQkxFIHJvbGUgaXMgdXNpbmcgdGhlIHdoaXRlbGlzdC4NCisgKg0KKyAqIEBub3RlICBJZiBhbiBhZGRyZXNzIGlzIHJlc29sdmVkIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QsIHRoZW4gdGhlIHdoaXRlbGlzdA0KKyAqICAgICAgICBmaWx0ZXIgcG9saWN5IGFwcGxpZXMgdG8gdGhlIHBlZXIgaWRlbnRpdHkgYWRkcmVzcyBhbmQgbm90IHRoZSByZXNvbHZhYmxlIGFkZHJlc3Mgc2VudCBvbiBhaXIuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9XTF9TSEFSRV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfU0NBTl9QUklWQVRFX1NDQU5fTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIHBwX3dsX2FkZHJzIFBvaW50ZXIgdG8gYSB3aGl0ZWxpc3Qgb2YgcGVlciBhZGRyZXNzZXMsIGlmIE5VTEwgdGhlIHdoaXRlbGlzdCB3aWxsIGJlIGNsZWFyZWQuDQorICogQHBhcmFtW2luXSBsZW4gICAgICAgICBMZW5ndGggb2YgdGhlIHdoaXRlbGlzdCwgbWF4aW11bSBAcmVmIEJMRV9HQVBfV0hJVEVMSVNUX0FERFJfTUFYX0NPVU5ULg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSB3aGl0ZWxpc3QgaXMgc3VjY2Vzc2Z1bGx5IHNldC9jbGVhcmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIFRoZSB3aGl0ZWxpc3QgKG9yIG9uZSBvZiBpdHMgZW50cmllcykgcHJvdmlkZWQgaXMgaW52YWxpZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9XSElURUxJU1RfSU5fVVNFIFRoZSB3aGl0ZWxpc3QgaXMgaW4gdXNlIGJ5IGEgQkxFIHJvbGUgYW5kIGNhbm5vdCBiZSBzZXQgb3IgY2xlYXJlZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9JTlZBTElEX0JMRV9BRERSIEludmFsaWQgYWRkcmVzcyB0eXBlIGlzIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIFRoZSBnaXZlbiB3aGl0ZWxpc3Qgc2l6ZSBpcyBpbnZhbGlkICh6ZXJvIG9yIHRvbyBsYXJnZSk7IHRoaXMgY2FuIG9ubHkgcmV0dXJuIHdoZW4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcF93bF9hZGRycyBpcyBub3QgTlVMTC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9XSElURUxJU1RfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF93aGl0ZWxpc3Rfc2V0KGJsZV9nYXBfYWRkcl90IGNvbnN0ICogY29uc3QgKiBwcF93bF9hZGRycywgdWludDhfdCBsZW4pKTsNCisNCisNCisvKipAYnJpZWYgU2V0IGRldmljZSBpZGVudGl0eSBsaXN0Lg0KKyAqDQorICogQG5vdGUgIE9ubHkgb25lIGRldmljZSBpZGVudGl0eSBsaXN0IGNhbiBiZSB1c2VkIGF0IGEgdGltZSBhbmQgdGhlIGxpc3QgaXMgc2hhcmVkIGJldHdlZW4gdGhlIEJMRSByb2xlcy4NCisgKiAgICAgICAgVGhlIGRldmljZSBpZGVudGl0eSBsaXN0IGNhbm5vdCBiZSBzZXQgaWYgYSBCTEUgcm9sZSBpcyB1c2luZyB0aGUgbGlzdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcHBfaWRfa2V5cyAgICAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBwZWVyIGlkZW50aXR5IGFkZHJlc3NlcyBhbmQgcGVlciBJUktzLCBpZiBOVUxMIHRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCB3aWxsIGJlIGNsZWFyZWQuDQorICogQHBhcmFtW2luXSBwcF9sb2NhbF9pcmtzICBQb2ludGVyIHRvIGFuIGFycmF5IG9mIGxvY2FsIElSS3MuIEVhY2ggZW50cnkgaW4gdGhlIGFycmF5IG1hcHMgdG8gdGhlIGVudHJ5IGluIHBwX2lkX2tleXMgYXQgdGhlIHNhbWUgaW5kZXguDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBmaWxsIGluIHRoZSBsaXN0IHdpdGggdGhlIGN1cnJlbnRseSBzZXQgZGV2aWNlIElSSyBmb3IgYWxsIHBlZXJzLCBzZXQgdG8gTlVMTC4NCisgKiBAcGFyYW1baW5dIGxlbiAgICAgICAgICAgIExlbmd0aCBvZiB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QsIG1heGltdW0gQHJlZiBCTEVfR0FQX0RFVklDRV9JREVOVElUSUVTX01BWF9DT1VOVC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfQURWX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUFJJVkFDWV9TQ0FOX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUFJJVkFDWV9TQ0FOX1BSSVZBVEVfU0NBTl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfQURWX0RJUl9QUklWX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0NPTk5fUFJJVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQ09OTl9QUklWX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBkZXZpY2UgaWRlbnRpdHkgbGlzdCBzdWNjZXNzZnVsbHkgc2V0L2NsZWFyZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgVGhlIGRldmljZSBpZGVudGl0eSBsaXN0IChvciBvbmUgb2YgaXRzIGVudHJpZXMpIHByb3ZpZGVkIGlzIGludmFsaWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb2RlIG1heSBiZSByZXR1cm5lZCBpZiB0aGUgbG9jYWwgSVJLIGxpc3QgYWxzbyBoYXMgYW4gaW52YWxpZCBlbnRyeS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9ERVZJQ0VfSURFTlRJVElFU19JTl9VU0UgVGhlIGRldmljZSBpZGVudGl0eSBsaXN0IGlzIGluIHVzZSBhbmQgY2Fubm90IGJlIHNldCBvciBjbGVhcmVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FQX0RFVklDRV9JREVOVElUSUVTX0RVUExJQ0FURSBUaGUgZGV2aWNlIGlkZW50aXR5IGxpc3QgY29udGFpbnMgbXVsdGlwbGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIGlkZW50aXR5IGFkZHJlc3MuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfSU5WQUxJRF9CTEVfQUREUiBJbnZhbGlkIGFkZHJlc3MgdHlwZSBpcyBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0RBVEFfU0laRSBUaGUgZ2l2ZW4gZGV2aWNlIGlkZW50aXR5IGxpc3Qgc2l6ZSBpbnZhbGlkICh6ZXJvIG9yIHRvbyBsYXJnZSk7IHRoaXMgY2FuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSByZXR1cm4gd2hlbiBwcF9pZF9rZXlzIGlzIG5vdCBOVUxMLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0RFVklDRV9JREVOVElUSUVTX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfZGV2aWNlX2lkZW50aXRpZXNfc2V0KGJsZV9nYXBfaWRfa2V5X3QgY29uc3QgKiBjb25zdCAqIHBwX2lkX2tleXMsIGJsZV9nYXBfaXJrX3QgY29uc3QgKiBjb25zdCAqIHBwX2xvY2FsX2lya3MsIHVpbnQ4X3QgbGVuKSk7DQorDQorDQorLyoqQGJyaWVmIFNldCBwcml2YWN5IHNldHRpbmdzLg0KKyAqDQorICogQG5vdGUgIFByaXZhY3kgc2V0dGluZ3MgY2Fubm90IGJlIHNldCB3aGlsZSBCTEUgcm9sZXMgYXJlIHJ1bm5pbmcuDQorICoNCisgKiBAcGFyYW1baW5dIHBfcHJpdmFjeV9wYXJhbXMgUHJpdmFjeSBzZXR0aW5ncy4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BSSVZBQ1lfQURWX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUFJJVkFDWV9TQ0FOX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUFJJVkFDWV9BRFZfRElSX1BSSVZfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgVGhlIHN0YWNrIGlzIGJ1c3ksIHByb2Nlc3MgcGVuZGluZyBldmVudHMgYW5kIHJldHJ5Lg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FQX0lOVkFMSURfQkxFX0FERFIgSW52YWxpZCBhZGRyZXNzIHR5cGUgaXMgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgVGhlIHBvaW50ZXIgdG8gcHJpdmFjeSBzZXR0aW5ncyBpcyBOVUxMIG9yIGludmFsaWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGUgcF9kZXZpY2VfaXJrIHBvaW50ZXIgaW4gcHJpdmFjeSBwYXJhbWV0ZXIgaXMgYW4gaW52YWxpZCBwb2ludGVyLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBPdXQgb2YgcmFuZ2UgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIFByaXZhY3kgc2V0dGluZ3MgY2Fubm90IGJlIGNoYW5nZWQgd2hpbGUgQkxFIHJvbGVzIHVzaW5nIHByaXZhY3kgYXJlIGVuYWJsZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUFJJVkFDWV9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3ByaXZhY3lfc2V0KGJsZV9nYXBfcHJpdmFjeV9wYXJhbXNfdCBjb25zdCAqcF9wcml2YWN5X3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBHZXQgcHJpdmFjeSBzZXR0aW5ncy4NCisgKg0KKyAqIEBub3RlICBUaGUgcHJpdmFjeSBzZXR0aW5ncyByZXR1cm5lZCBpbmNsdWRlIHRoZSBjdXJyZW50IGRldmljZSBpcmsgYXMgd2VsbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9wcml2YWN5X3BhcmFtcyBQcml2YWN5IHNldHRpbmdzLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICAgICAgICAgICAgUHJpdmFjeSBzZXR0aW5ncyByZWFkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIFRoZSBwb2ludGVyIGdpdmVuIGZvciByZXR1cm5pbmcgdGhlIHByaXZhY3kgc2V0dGluZ3MgbWF5IGJlIE5VTEwgb3IgaW52YWxpZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBwX2RldmljZV9pcmsgcG9pbnRlciBpbiBwcml2YWN5IHBhcmFtZXRlciBpcyBhbiBpbnZhbGlkIHBvaW50ZXIuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUFJJVkFDWV9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3ByaXZhY3lfZ2V0KGJsZV9nYXBfcHJpdmFjeV9wYXJhbXNfdCAqcF9wcml2YWN5X3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBTZXQsIGNsZWFyIG9yIHVwZGF0ZSBhZHZlcnRpc2luZyBhbmQgc2NhbiByZXNwb25zZSBkYXRhLg0KKyAqDQorICogQG5vdGUgIFRoZSBmb3JtYXQgb2YgdGhlIGFkdmVydGlzaW5nIGRhdGEgd2lsbCBiZSBjaGVja2VkIGJ5IHRoaXMgY2FsbCB0byBlbnN1cmUgaW50ZXJvcGVyYWJpbGl0eS4NCisgKiAgICAgICAgTGltaXRhdGlvbnMgaW1wb3NlZCBieSB0aGlzIEFQSSBjYWxsIHRvIHRoZSBkYXRhIHByb3ZpZGVkIGluY2x1ZGUgaGF2aW5nIGEgZmxhZ3MgZGF0YSB0eXBlIGluIHRoZSBzY2FuIHJlc3BvbnNlIGRhdGEgYW5kDQorICogICAgICAgIGR1cGxpY2F0aW5nIHRoZSBsb2NhbCBuYW1lIGluIHRoZSBhZHZlcnRpc2luZyBkYXRhIGFuZCBzY2FuIHJlc3BvbnNlIGRhdGEuDQorICoNCisgKiBAbm90ZSAgVG8gY2xlYXIgdGhlIGFkdmVydGlzaW5nIGRhdGEgYW5kIHNldCBpdCB0byBhIDAtbGVuZ3RoIHBhY2tldCwgc2ltcGx5IHByb3ZpZGUgYSB2YWxpZCBwb2ludGVyIChwX2RhdGEvcF9zcl9kYXRhKSB3aXRoIGl0cyBjb3JyZXNwb25kaW5nDQorICogICAgICAgIGxlbmd0aCAoZGxlbi9zcmRsZW4pIHNldCB0byAwLg0KKyAqDQorICogQG5vdGUgVGhlIGNhbGwgd2lsbCBmYWlsIGlmIHBfZGF0YSBhbmQgcF9zcl9kYXRhIGFyZSBib3RoIE5VTEwgc2luY2UgdGhpcyB3b3VsZCBoYXZlIG5vIGVmZmVjdC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0FEVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1dMX1NIQVJFX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBwX2RhdGEgICAgUmF3IGRhdGEgdG8gYmUgcGxhY2VkIGluIGFkdmVydGlzaW5nIHBhY2tldC4gSWYgTlVMTCwgbm8gY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgY3VycmVudCBhZHZlcnRpc2luZyBwYWNrZXQgZGF0YS4NCisgKiBAcGFyYW1baW5dIGRsZW4gICAgICBEYXRhIGxlbmd0aCBmb3IgcF9kYXRhLiBNYXggc2l6ZTogQHJlZiBCTEVfR0FQX0FEVl9NQVhfU0laRSBvY3RldHMuIFNob3VsZCBiZSAwIGlmIHBfZGF0YSBpcyBOVUxMLCBjYW4gYmUgMCBpZiBwX2RhdGEgaXMgbm90IE5VTEwuDQorICogQHBhcmFtW2luXSBwX3NyX2RhdGEgUmF3IGRhdGEgdG8gYmUgcGxhY2VkIGluIHNjYW4gcmVzcG9uc2UgcGFja2V0LiBJZiBOVUxMLCBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBjdXJyZW50IHNjYW4gcmVzcG9uc2UgcGFja2V0IGRhdGEuDQorICogQHBhcmFtW2luXSBzcmRsZW4gICAgRGF0YSBsZW5ndGggZm9yIHBfc3JfZGF0YS4gTWF4IHNpemU6IEByZWYgQkxFX0dBUF9BRFZfTUFYX1NJWkUgb2N0ZXRzLiBTaG91bGQgYmUgMCBpZiBwX3NyX2RhdGEgaXMgTlVMTCwgY2FuIGJlIDAgaWYgcF9kYXRhIGlzIG5vdCBOVUxMLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEFkdmVydGlzaW5nIGRhdGEgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgb3IgY2xlYXJlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIGJvdGggcF9kYXRhIGFuZCBwX3NyX2RhdGEgY2Fubm90IGJlIE5VTEwuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9GTEFHUyBJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGFkdmVydGlzaW5nIGZsYWdzIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9EQVRBIEludmFsaWQgZGF0YSB0eXBlKHMpIHN1cHBsaWVkLCBjaGVjayB0aGUgYWR2ZXJ0aXNpbmcgZGF0YSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfTEVOR1RIIEludmFsaWQgZGF0YSBsZW5ndGgocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIFVuc3VwcG9ydGVkIGRhdGEgdHlwZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9VVUlEX0xJU1RfTUlTTUFUQ0ggSW52YWxpZCBVVUlEIGxpc3Qgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQURWX0RBVEFfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hZHZfZGF0YV9zZXQodWludDhfdCBjb25zdCAqcF9kYXRhLCB1aW50OF90IGRsZW4sIHVpbnQ4X3QgY29uc3QgKnBfc3JfZGF0YSwgdWludDhfdCBzcmRsZW4pKTsNCisNCisNCisvKipAYnJpZWYgU3RhcnQgYWR2ZXJ0aXNpbmcgKEdBUCBEaXNjb3ZlcmFibGUsIENvbm5lY3RhYmxlIG1vZGVzLCBCcm9hZGNhc3QgUHJvY2VkdXJlKS4NCisgKg0KKyAqIEBub3RlICBBbiBhcHBsaWNhdGlvbiBjYW4gc3RhcnQgYW4gYWR2ZXJ0aXNpbmcgcHJvY2VkdXJlIGZvciBicm9hZGNhc3RpbmcgcHVycG9zZXMgd2hpbGUgYSBjb25uZWN0aW9uDQorICogICAgICAgIGlzIGFjdGl2ZS4gQWZ0ZXIgYSBAcmVmIEJMRV9HQVBfRVZUX0NPTk5FQ1RFRCBldmVudCBpcyByZWNlaXZlZCwgdGhpcyBmdW5jdGlvbiBtYXkgdGhlcmVmb3JlDQorICogICAgICAgIGJlIGNhbGxlZCB0byBzdGFydCBhIGJyb2FkY2FzdCBhZHZlcnRpc2luZyBwcm9jZWR1cmUuIFRoZSBhZHZlcnRpc2luZyBwcm9jZWR1cmUNCisgKiAgICAgICAgY2Fubm90IGhvd2V2ZXIgYmUgY29ubmVjdGFibGUgKGl0IG11c3QgYmUgb2YgdHlwZSBAcmVmIEJMRV9HQVBfQURWX1RZUEVfQURWX1NDQU5fSU5EIG9yDQorICogICAgICAgIEByZWYgQkxFX0dBUF9BRFZfVFlQRV9BRFZfTk9OQ09OTl9JTkQpLiBAbm90ZSBPbmx5IG9uZSBhZHZlcnRpc2VyIG1heSBiZSBhY3RpdmUgYXQgYW55IHRpbWUuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQ09OTkVDVEVELCBHZW5lcmF0ZWQgYWZ0ZXIgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCB0aHJvdWdoIGNvbm5lY3RhYmxlIGFkdmVydGlzaW5nLn0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9USU1FT1VULCBBZHZlcnRpc2VtZW50IGhhcyB0aW1lZCBvdXQufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0FEVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9DT05OX1BSSVZfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QUklWQUNZX0FEVl9ESVJfUFJJVl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1dMX1NIQVJFX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBwX2Fkdl9wYXJhbXMgUG9pbnRlciB0byBhZHZlcnRpc2luZyBwYXJhbWV0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIGNvbm5fY2ZnX3RhZyBUYWcgaWRlbnRpZnlpbmcgYSBjb25maWd1cmF0aW9uIHNldCBieSBAcmVmIHNkX2JsZV9jZmdfc2V0IG9yIEByZWYNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBCTEVfQ09OTl9DRkdfVEFHX0RFRkFVTFQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgQkxFIHN0YWNrIGhhcyBzdGFydGVkIGFkdmVydGlzaW5nLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0NPTk5fQ09VTlQgVGhlIGxpbWl0IG9mIGF2YWlsYWJsZSBjb25uZWN0aW9ucyBoYXMgYmVlbiByZWFjaGVkOyBjb25uZWN0YWJsZSBhZHZlcnRpc2VyIGNhbm5vdCBiZSBzdGFydGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZCwgY2hlY2sgdGhlIGFjY2VwdGVkIHJhbmdlcyBhbmQgbGltaXRzLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FQX0lOVkFMSURfQkxFX0FERFIgSW52YWxpZCBCbHVldG9vdGggYWRkcmVzcyBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBUF9ESVNDT1ZFUkFCTEVfV0lUSF9XSElURUxJU1QgRGlzY292ZXJhYmxlIG1vZGUgYW5kIHdoaXRlbGlzdCBpbmNvbXBhdGlibGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIFRoZSBzdGFjayBpcyBidXN5LCBwcm9jZXNzIHBlbmRpbmcgZXZlbnRzIGFuZCByZXRyeS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1JFU09VUkNFUyBOb3QgZW5vdWdoIEJMRSByb2xlIHNsb3RzIGF2YWlsYWJsZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9wIG9uZSBvciBtb3JlIGN1cnJlbnRseSBhY3RpdmUgcm9sZXMgKENlbnRyYWwsIFBlcmlwaGVyYWwgb3IgT2JzZXJ2ZXIpIGFuZCB0cnkgYWdhaW4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9BRFZfU1RBUlQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2Fkdl9zdGFydChibGVfZ2FwX2Fkdl9wYXJhbXNfdCBjb25zdCAqcF9hZHZfcGFyYW1zLCB1aW50OF90IGNvbm5fY2ZnX3RhZykpOw0KKw0KKw0KKy8qKkBicmllZiBTdG9wIGFkdmVydGlzaW5nIChHQVAgRGlzY292ZXJhYmxlLCBDb25uZWN0YWJsZSBtb2RlcywgQnJvYWRjYXN0IFByb2NlZHVyZSkuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9BRFZfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9XTF9TSEFSRV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgQkxFIHN0YWNrIGhhcyBzdG9wcGVkIGFkdmVydGlzaW5nLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uIChtb3N0IHByb2JhYmx5IG5vdCBpbiBhZHZlcnRpc2luZyBzdGF0ZSkuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQURWX1NUT1AsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2Fkdl9zdG9wKHZvaWQpKTsNCisNCisNCisNCisvKipAYnJpZWYgVXBkYXRlIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4NCisgKg0KKyAqIEBkZXRhaWxzIEluIHRoZSBjZW50cmFsIHJvbGUgdGhpcyB3aWxsIGluaXRpYXRlIGEgTGluayBMYXllciBjb25uZWN0aW9uIHBhcmFtZXRlciB1cGRhdGUgcHJvY2VkdXJlLA0KKyAqICAgICAgICAgIG90aGVyd2lzZSBpbiB0aGUgcGVyaXBoZXJhbCByb2xlLCB0aGlzIHdpbGwgc2VuZCB0aGUgY29ycmVzcG9uZGluZyBMMkNBUCByZXF1ZXN0IGFuZCB3YWl0IGZvcg0KKyAqICAgICAgICAgIHRoZSBjZW50cmFsIHRvIHBlcmZvcm0gdGhlIHByb2NlZHVyZS4gSW4gYm90aCBjYXNlcywgYW5kIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBmYWlsdXJlLCB0aGUgYXBwbGljYXRpb24NCisgKiAgICAgICAgICB3aWxsIGJlIGluZm9ybWVkIG9mIHRoZSByZXN1bHQgd2l0aCBhIEByZWYgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUgZXZlbnQuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgY2VudHJhbCBib3RoIHRvIHJlcGx5IHRvIGEgQHJlZiBCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURV9SRVFVRVNUIG9yIHRvIHN0YXJ0IHRoZSBwcm9jZWR1cmUgdW5yZXF1ZXN0ZWQuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQ09OTl9QQVJBTV9VUERBVEUsIFJlc3VsdCBvZiB0aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXIgdXBkYXRlIHByb2NlZHVyZS59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ1BVX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9FTkNfQVVUSF9NVVRFWF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX01VTFRJTElOS19DUFVfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9NVUxUSUxJTktfQ1RSTF9QUk9DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9DUFVfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gcF9jb25uX3BhcmFtcyAgUG9pbnRlciB0byBkZXNpcmVkIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4gSWYgTlVMTCBpcyBwcm92aWRlZCBvbiBhIHBlcmlwaGVyYWwgcm9sZSwNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJhbWV0ZXJzIGluIHRoZSBQUENQIGNoYXJhY3RlcmlzdGljIG9mIHRoZSBHQVAgc2VydmljZSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIE5VTEwgaXMgcHJvdmlkZWQgb24gYSBjZW50cmFsIHJvbGUgYW5kIGluIHJlc3BvbnNlIHRvIGEgQHJlZiBCTEVfR0FQX0VWVF9DT05OX1BBUkFNX1VQREFURV9SRVFVRVNULCB0aGUgcGVyaXBoZXJhbCByZXF1ZXN0IHdpbGwgYmUgcmVqZWN0ZWQNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgQ29ubmVjdGlvbiBVcGRhdGUgcHJvY2VkdXJlIGhhcyBiZWVuIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIGNoZWNrIHBhcmFtZXRlciBsaW1pdHMgYW5kIGNvbnN0cmFpbnRzLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBQcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcyBvciBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWUsIHByb2Nlc3MgcGVuZGluZyBldmVudHMgYW5kIHdhaXQgZm9yIHBlbmRpbmcgcHJvY2VkdXJlcyB0byBjb21wbGV0ZSBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gTm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgb3BlcmF0aW9uLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0NPTk5fUEFSQU1fVVBEQVRFLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9jb25uX3BhcmFtX3VwZGF0ZSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9jb25uX3BhcmFtc190IGNvbnN0ICpwX2Nvbm5fcGFyYW1zKSk7DQorDQorDQorLyoqQGJyaWVmIERpc2Nvbm5lY3QgKEdBUCBMaW5rIFRlcm1pbmF0aW9uKS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCBpbml0aWF0ZXMgdGhlIGRpc2Nvbm5lY3Rpb24gcHJvY2VkdXJlLCBhbmQgaXRzIGNvbXBsZXRpb24gd2lsbCBiZSBjb21tdW5pY2F0ZWQgdG8gdGhlIGFwcGxpY2F0aW9uDQorICogICAgICAgICAgd2l0aCBhIEByZWYgQkxFX0dBUF9FVlRfRElTQ09OTkVDVEVEIGV2ZW50Lg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX0RJU0NPTk5FQ1RFRCwgR2VuZXJhdGVkIHdoZW4gZGlzY29ubmVjdGlvbiBwcm9jZWR1cmUgaXMgY29tcGxldGUufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NPTk5fTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gaGNpX3N0YXR1c19jb2RlIEhDSSBzdGF0dXMgY29kZSwgc2VlIEByZWYgQkxFX0hDSV9TVEFUVVNfQ09ERVMgKGFjY2VwdGVkIHZhbHVlcyBhcmUgQHJlZiBCTEVfSENJX1JFTU9URV9VU0VSX1RFUk1JTkFURURfQ09OTkVDVElPTiBhbmQgQHJlZiBCTEVfSENJX0NPTk5fSU5URVJWQUxfVU5BQ0NFUFRBQkxFKS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgZGlzY29ubmVjdGlvbiBwcm9jZWR1cmUgaGFzIGJlZW4gc3RhcnRlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uIChkaXNjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MpLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0RJU0NPTk5FQ1QsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2Rpc2Nvbm5lY3QodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQ4X3QgaGNpX3N0YXR1c19jb2RlKSk7DQorDQorDQorLyoqQGJyaWVmIFNldCB0aGUgcmFkaW8ncyB0cmFuc21pdCBwb3dlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gdHhfcG93ZXIgUmFkaW8gdHJhbnNtaXQgcG93ZXIgaW4gZEJtIChhY2NlcHRlZCB2YWx1ZXMgYXJlIC00MCwgLTIwLCAtMTYsIC0xMiwgLTgsIC00LCAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4IGFuZCA5IGRCbSkuDQorICoNCisgKiBAbm90ZSBUaGUgLTQwZEJtLCAtMjBkQm0sIC0xNmRCbSwgLTEyZEJtLCAtOGRCbSwgLTRkQm0sIDBkQm0sICsyZEJtLCArM2RCbSwgKzRkQm0sICs1ZEJtLCArNmRCbSwgKzdkQm0sICs4ZEJtIGFuZCArOWRCbSBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIG5SRjUyODQwIHNlcmllcyBJQ3MuDQorICogQG5vdGUgVGhlIC00MGRCbSwgLTIwZEJtLCAtMTZkQm0sIC0xMmRCbSwgLThkQm0sIC00ZEJtLCAwZEJtLCArM2RCbSBhbmQgKzRkQm0gc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBuUkY1MiBzZXJpZXMgSUNzLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRoZSB0cmFuc21pdCBwb3dlci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfVFhfUE9XRVJfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF90eF9wb3dlcl9zZXQoaW50OF90IHR4X3Bvd2VyKSk7DQorDQorDQorLyoqQGJyaWVmIFNldCBHQVAgQXBwZWFyYW5jZSB2YWx1ZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gYXBwZWFyYW5jZSBBcHBlYXJhbmNlICgxNi1iaXQpLCBzZWUgQHJlZiBCTEVfQVBQRUFSQU5DRVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgIEFwcGVhcmFuY2UgdmFsdWUgc2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfQVBQRUFSQU5DRV9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2FwcGVhcmFuY2Vfc2V0KHVpbnQxNl90IGFwcGVhcmFuY2UpKTsNCisNCisNCisvKipAYnJpZWYgR2V0IEdBUCBBcHBlYXJhbmNlIHZhbHVlLg0KKyAqDQorICogQHBhcmFtW291dF0gcF9hcHBlYXJhbmNlIFBvaW50ZXIgdG8gYXBwZWFyYW5jZSAoMTYtYml0KSB0byBiZSBmaWxsZWQgaW4sIHNlZSBAcmVmIEJMRV9BUFBFQVJBTkNFUy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBcHBlYXJhbmNlIHZhbHVlIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0FQUEVBUkFOQ0VfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hcHBlYXJhbmNlX2dldCh1aW50MTZfdCAqcF9hcHBlYXJhbmNlKSk7DQorDQorDQorLyoqQGJyaWVmIFNldCBHQVAgUGVyaXBoZXJhbCBQcmVmZXJyZWQgQ29ubmVjdGlvbiBQYXJhbWV0ZXJzLg0KKyAqDQorICogQHBhcmFtW2luXSBwX2Nvbm5fcGFyYW1zIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfY29ubl9wYXJhbXNfdCBzdHJ1Y3R1cmUgd2l0aCB0aGUgZGVzaXJlZCBwYXJhbWV0ZXJzLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFBlcmlwaGVyYWwgUHJlZmVycmVkIENvbm5lY3Rpb24gUGFyYW1ldGVycyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUFBDUF9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3BwY3Bfc2V0KGJsZV9nYXBfY29ubl9wYXJhbXNfdCBjb25zdCAqcF9jb25uX3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBHZXQgR0FQIFBlcmlwaGVyYWwgUHJlZmVycmVkIENvbm5lY3Rpb24gUGFyYW1ldGVycy4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfY29ubl9wYXJhbXMgUG9pbnRlciB0byBhIEByZWYgYmxlX2dhcF9jb25uX3BhcmFtc190IHN0cnVjdHVyZSB3aGVyZSB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHN0b3JlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBQZXJpcGhlcmFsIFByZWZlcnJlZCBDb25uZWN0aW9uIFBhcmFtZXRlcnMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUFBDUF9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3BwY3BfZ2V0KGJsZV9nYXBfY29ubl9wYXJhbXNfdCAqcF9jb25uX3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBTZXQgR0FQIGRldmljZSBuYW1lLg0KKyAqDQorICogQG5vdGUgIElmIHRoZSBkZXZpY2UgbmFtZSBpcyBsb2NhdGVkIGluIGFwcGxpY2F0aW9uIGZsYXNoIG1lbW9yeSAoc2VlIEByZWYgYmxlX2dhcF9jZmdfZGV2aWNlX25hbWVfdCksDQorICogICAgICAgIGl0IGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGVuIEByZWYgTlJGX0VSUk9SX0ZPUkJJRERFTiB3aWxsIGJlIHJldHVybmVkLg0KKyAqDQorICogQHBhcmFtW2luXSBwX3dyaXRlX3Blcm0gV3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSBEZXZpY2UgTmFtZSBjaGFyYWN0ZXJpc3RpYywgc2VlIEByZWYgYmxlX2dhcF9jb25uX3NlY19tb2RlX3QuDQorICogQHBhcmFtW2luXSBwX2Rldl9uYW1lIFBvaW50ZXIgdG8gYSBVVEYtOCBlbmNvZGVkLCA8Yj5ub24gTlVMTC10ZXJtaW5hdGVkPC9iPiBzdHJpbmcuDQorICogQHBhcmFtW2luXSBsZW4gTGVuZ3RoIG9mIHRoZSBVVEYtOCwgPGI+bm9uIE5VTEwtdGVybWluYXRlZDwvYj4gc3RyaW5nIHBvaW50ZWQgdG8gYnkgcF9kZXZfbmFtZSBpbiBvY3RldHMgKG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0aGFuIEByZWYgQkxFX0dBUF9ERVZOQU1FX01BWF9MRU4pLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEdBUCBkZXZpY2UgbmFtZSBhbmQgcGVybWlzc2lvbnMgc2V0IHN1Y2Nlc3NmdWxseS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIERldmljZSBuYW1lIGlzIG5vdCB3cml0YWJsZS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9ERVZJQ0VfTkFNRV9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2RldmljZV9uYW1lX3NldChibGVfZ2FwX2Nvbm5fc2VjX21vZGVfdCBjb25zdCAqcF93cml0ZV9wZXJtLCB1aW50OF90IGNvbnN0ICpwX2Rldl9uYW1lLCB1aW50MTZfdCBsZW4pKTsNCisNCisNCisvKipAYnJpZWYgR2V0IEdBUCBkZXZpY2UgbmFtZS4NCisgKg0KKyAqIEBub3RlICBJZiB0aGUgZGV2aWNlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIHN1cHBsaWVkIGJ1ZmZlciwNCisgKiAgICAgICAgcF9sZW4gd2lsbCByZXR1cm4gdGhlIGNvbXBsZXRlIGRldmljZSBuYW1lIGxlbmd0aCwNCisgKiAgICAgICAgYW5kIG5vdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJldHVybmVkIGluIHBfZGV2X25hbWUuDQorICogICAgICAgIFRoZSBhcHBsaWNhdGlvbiBtYXkgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gYWxsb2NhdGUgYSBzdWl0YWJsZSBidWZmZXIgc2l6ZS4NCisgKg0KKyAqIEBwYXJhbVtvdXRdICAgIHBfZGV2X25hbWUgUG9pbnRlciB0byBhbiBlbXB0eSBidWZmZXIgd2hlcmUgdGhlIFVURi04IDxiPm5vbiBOVUxMLXRlcm1pbmF0ZWQ8L2I+IHN0cmluZyB3aWxsIGJlIHBsYWNlZC4gU2V0IHRvIE5VTEwgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBkZXZpY2UgbmFtZSBsZW5ndGguDQorICogQHBhcmFtW2luLG91dF0gcF9sZW4gICAgICBMZW5ndGggb2YgdGhlIGJ1ZmZlciBwb2ludGVkIGJ5IHBfZGV2X25hbWUsIGNvbXBsZXRlIGRldmljZSBuYW1lIGxlbmd0aCBvbiBvdXRwdXQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgR0FQIGRldmljZSBuYW1lIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0RFVklDRV9OQU1FX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfZGV2aWNlX25hbWVfZ2V0KHVpbnQ4X3QgKnBfZGV2X25hbWUsIHVpbnQxNl90ICpwX2xlbikpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSB0aGUgR0FQIEF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIEluIHRoZSBjZW50cmFsIHJvbGUsIHRoaXMgZnVuY3Rpb24gd2lsbCBzZW5kIGFuIFNNUCBQYWlyaW5nIFJlcXVlc3QgKG9yIGFuIFNNUCBQYWlyaW5nIEZhaWxlZCBpZiByZWplY3RlZCksDQorICogICAgICAgICAgb3RoZXJ3aXNlIGluIHRoZSBwZXJpcGhlcmFsIHJvbGUsIGFuIFNNUCBTZWN1cml0eSBSZXF1ZXN0IHdpbGwgYmUgc2VudC4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7RGVwZW5kaW5nIG9uIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXJzIHNldCBhbmQgdGhlIHBhY2tldCBleGNoYW5nZXMgd2l0aCB0aGUgcGVlclwsIHRoZSBmb2xsb3dpbmcgZXZlbnRzIG1heSBiZSBnZW5lcmF0ZWQ6fQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVH0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9TRUNfSU5GT19SRVFVRVNUfQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1BBU1NLRVlfRElTUExBWX0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9LRVlfUFJFU1NFRH0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9BVVRIX0tFWV9SRVFVRVNUfQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVH0NCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9DT05OX1NFQ19VUERBVEV9DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQVVUSF9TVEFUVVN9DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfVElNRU9VVH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfU0VDX1JFUV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfU0VDX1JFUV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfRU5DX0FVVEhfTVVURVhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfUEtfUEVSSVBIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfUEFJUklOR19KV19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX1BEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfc2VjX3BhcmFtcyBQb2ludGVyIHRvIHRoZSBAcmVmIGJsZV9nYXBfc2VjX3BhcmFtc190IHN0cnVjdHVyZSB3aXRoIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXJzIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBwYWlyaW5nIG9yIGJvbmRpbmcgcHJvY2VkdXJlLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwZXJpcGhlcmFsIHJvbGUsIG9ubHkgdGhlIGJvbmQsIG1pdG0sIGxlc2MgYW5kIGtleXByZXNzIGZpZWxkcyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgdXNlZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgY2VudHJhbCByb2xlLCB0aGlzIHBvaW50ZXIgbWF5IGJlIE5VTEwgdG8gcmVqZWN0IGEgU2VjdXJpdHkgUmVxdWVzdC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgaW5pdGlhdGVkIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgc3RhY2sgaXMgYnVzeSwgcHJvY2VzcyBwZW5kaW5nIGV2ZW50cyBhbmQgcmV0cnkuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZXMgdGhhdCBjYW4gcnVuIGluIHBhcmFsbGVsIGZvciB0aGUgZ2l2ZW4gcm9sZSBpcyByZWFjaGVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBTZXR0aW5nIG9mIHNpZ24gb3IgbGluayBmaWVsZHMgaW4gQHJlZiBibGVfZ2FwX3NlY19rZGlzdF90IG5vdCBzdXBwb3J0ZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9USU1FT1VUIEEgU01QIHRpbWVvdXQgaGFzIG9jY3VycmVkLCBhbmQgZnVydGhlciBTTVAgb3BlcmF0aW9ucyBvbiB0aGlzIGxpbmsgaXMgcHJvaGliaXRlZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9BVVRIRU5USUNBVEUsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9zZWNfcGFyYW1zX3QgY29uc3QgKnBfc2VjX3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBSZXBseSB3aXRoIEdBUCBzZWN1cml0eSBwYXJhbWV0ZXJzLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8gcmVwbHkgdG8gYSBAcmVmIEJMRV9HQVBfRVZUX1NFQ19QQVJBTVNfUkVRVUVTVCwgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB3aWxsIHJlc3VsdCBpbiBhbiBAcmVmIE5SRl9FUlJPUl9JTlZBTElEX1NUQVRFLg0KKyAqIEBub3RlICAgIElmIHRoZSBjYWxsIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIHJlcXVlc3QgaXMgc3RpbGwgcGVuZGluZywgYW5kIHRoZSByZXBseSBjYWxsIG1heSBiZSByZXBlYXRlZCB3aXRoIGNvcnJlY3RlZCBwYXJhbWV0ZXJzLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZXNcLCBzZWUgdGhlIGxpc3Qgb2YgZXZlbnRzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIEByZWYgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0pXX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19QS19QRVJJUEhfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfQk9ORElOR19QS19DRU5UUkFMX09PQl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9CT05ESU5HX1NUQVRJQ19QS19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX0NPTkZJUk1fRkFJTF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19QS0VfUERfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX1BLRV9DRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX1BBSVJJTkdfS1NfVE9PX1NNQUxMX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX1BBSVJJTkdfQVBQX0VSUk9SX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX1BBSVJJTkdfUkVNT1RFX1BBSVJJTkdfRkFJTF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9QQUlSSU5HX1RJTUVPVVRfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1BBSVJJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfSldfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfUEtfUEVSSVBIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9CT05ESU5HX1BLX1BFUklQSF9PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfUEFJUklOR19KV19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX1BEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHNlY19zdGF0dXMgU2VjdXJpdHkgc3RhdHVzLCBzZWUgQHJlZiBCTEVfR0FQX1NFQ19TVEFUVVMuDQorICogQHBhcmFtW2luXSBwX3NlY19wYXJhbXMgUG9pbnRlciB0byBhIEByZWYgYmxlX2dhcF9zZWNfcGFyYW1zX3Qgc2VjdXJpdHkgcGFyYW1ldGVycyBzdHJ1Y3R1cmUuIEluIHRoZSBjZW50cmFsIHJvbGUgdGhpcyBtdXN0IGJlIHNldCB0byBOVUxMLCBhcyB0aGUgcGFyYW1ldGVycyBoYXZlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHByb3ZpZGVkIGR1cmluZyBhIHByZXZpb3VzIGNhbGwgdG8gQHJlZiBzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZS4NCisgKiBAcGFyYW1baW4sb3V0XSBwX3NlY19rZXlzZXQgUG9pbnRlciB0byBhIEByZWYgYmxlX2dhcF9zZWNfa2V5c2V0X3Qgc2VjdXJpdHkga2V5c2V0IHN0cnVjdHVyZS4gQW55IGtleXMgZ2VuZXJhdGVkIGFuZC9vciBkaXN0cmlidXRlZCBhcyBhIHJlc3VsdCBvZiB0aGUgb25nb2luZyBzZWN1cml0eSBwcm9jZWR1cmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBtZW1vcnkgcmVmZXJlbmNlZCBieSB0aGUgcG9pbnRlcnMgaW5zaWRlIHRoaXMgc3RydWN0dXJlLiBUaGUga2V5cyB3aWxsIGJlIHN0b3JlZCBhbmQgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHVwb24gcmVjZXB0aW9uIG9mIGEgQHJlZiBCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyBldmVudC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIFNvZnREZXZpY2UgZXhwZWN0cyB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSBtZW1vcnkgZm9yIHN0b3JpbmcgdGhlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgcGVlcidzIGtleXMuIFNvIGl0IG11c3QgYmUgZW5zdXJlZCB0aGF0IHRoZSByZWxldmFudCBwb2ludGVycyBpbnNpZGUgdGhpcyBzdHJ1Y3R1cmUgYXJlIG5vdCBOVUxMLiBUaGUgcG9pbnRlcnMgdG8gdGhlIGxvY2FsIGtleQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiwgaG93ZXZlciwgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSwgdGhlIGxvY2FsIGtleSBkYXRhIHdpbGwgbm90IGJlIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24gdXBvbiByZWNlcHRpb24gb2YgdGhlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBCTEVfR0FQX0VWVF9BVVRIX1NUQVRVUyBldmVudC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgYWNjZXB0ZWQgc2VjdXJpdHkgcGFyYW1ldGVyIGZyb20gdGhlIGFwcGxpY2F0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIFNldHRpbmcgb2Ygc2lnbiBvciBsaW5rIGZpZWxkcyBpbiBAcmVmIGJsZV9nYXBfc2VjX2tkaXN0X3Qgbm90IHN1cHBvcnRlZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9TRUNfUEFSQU1TX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9zZWNfcGFyYW1zX3JlcGx5KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50OF90IHNlY19zdGF0dXMsIGJsZV9nYXBfc2VjX3BhcmFtc190IGNvbnN0ICpwX3NlY19wYXJhbXMsIGJsZV9nYXBfc2VjX2tleXNldF90IGNvbnN0ICpwX3NlY19rZXlzZXQpKTsNCisNCisNCisvKipAYnJpZWYgUmVwbHkgd2l0aCBhbiBhdXRoZW50aWNhdGlvbiBrZXkuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB0byByZXBseSB0byBhIEByZWYgQkxFX0dBUF9FVlRfQVVUSF9LRVlfUkVRVUVTVCBvciBhIEByZWYgQkxFX0dBUF9FVlRfUEFTU0tFWV9ESVNQTEFZLCBjYWxsaW5nIGl0IGF0IG90aGVyIHRpbWVzIHdpbGwgcmVzdWx0IGluIGFuIEByZWYgTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUuDQorICogQG5vdGUgICAgSWYgdGhlIGNhbGwgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGUgcmVxdWVzdCBpcyBzdGlsbCBwZW5kaW5nLCBhbmQgdGhlIHJlcGx5IGNhbGwgbWF5IGJlIHJlcGVhdGVkIHdpdGggY29ycmVjdGVkIHBhcmFtZXRlcnMuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e1RoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgYXV0aGVudGljYXRpb24gcHJvY2VkdXJlc1wsIHNlZSB0aGUgbGlzdCBvZiBldmVudHMgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgQHJlZiBzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZS59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0JPTkRJTkdfUEtfQ0VOVFJBTF9PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19QS0VfQ0RfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0JPTkRJTkdfUEtfUEVSSVBIX09PQl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIGtleV90eXBlIFNlZSBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRVMuDQorICogQHBhcmFtW2luXSBwX2tleSBJZiBrZXkgdHlwZSBpcyBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9OT05FLCB0aGVuIE5VTEwuDQorICogICAgICAgICAgICAgICAgICBJZiBrZXkgdHlwZSBpcyBAcmVmIEJMRV9HQVBfQVVUSF9LRVlfVFlQRV9QQVNTS0VZLCB0aGVuIGEgNi1ieXRlIEFTQ0lJIHN0cmluZyAoZGlnaXQgMC4uOSBvbmx5LCBubyBOVUxMIHRlcm1pbmF0aW9uKQ0KKyAqICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTCB3aGVuIGNvbmZpcm1pbmcgTEUgU2VjdXJlIENvbm5lY3Rpb25zIE51bWVyaWMgQ29tcGFyaXNvbi4NCisgKiAgICAgICAgICAgICAgICAgIElmIGtleSB0eXBlIGlzIEByZWYgQkxFX0dBUF9BVVRIX0tFWV9UWVBFX09PQiwgdGhlbiBhIDE2LWJ5dGUgT09CIGtleSB2YWx1ZSBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBdXRoZW50aWNhdGlvbiBrZXkgc3VjY2Vzc2Z1bGx5IHNldC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0FVVEhfS0VZX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9hdXRoX2tleV9yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDhfdCBrZXlfdHlwZSwgdWludDhfdCBjb25zdCAqcF9rZXkpKTsNCisNCisvKipAYnJpZWYgUmVwbHkgd2l0aCBhbiBMRSBTZWN1cmUgY29ubmVjdGlvbnMgREhLZXkuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB0byByZXBseSB0byBhIEByZWYgQkxFX0dBUF9FVlRfTEVTQ19ESEtFWV9SRVFVRVNULCBjYWxsaW5nIGl0IGF0IG90aGVyIHRpbWVzIHdpbGwgcmVzdWx0IGluIGFuIEByZWYgTlJGX0VSUk9SX0lOVkFMSURfU1RBVEUuDQorICogQG5vdGUgICAgSWYgdGhlIGNhbGwgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGUgcmVxdWVzdCBpcyBzdGlsbCBwZW5kaW5nLCBhbmQgdGhlIHJlcGx5IGNhbGwgbWF5IGJlIHJlcGVhdGVkIHdpdGggY29ycmVjdGVkIHBhcmFtZXRlcnMuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e1RoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgYXV0aGVudGljYXRpb24gcHJvY2VkdXJlc1wsIHNlZSB0aGUgbGlzdCBvZiBldmVudHMgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgQHJlZiBzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZS59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfUEFJUklOR19KV19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfTkNfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX1BLRV9QRF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1BFUklQSF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfUEFJUklOR19KV19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX05DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX1BEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfUEtFX0NEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9MRVNDX0JPTkRJTkdfT09CX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfZGhrZXkgTEUgU2VjdXJlIENvbm5lY3Rpb25zIERIS2V5Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIERIS2V5IHN1Y2Nlc3NmdWxseSBzZXQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9MRVNDX0RIS0VZX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9sZXNjX2Roa2V5X3JlcGx5KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2FwX2xlc2NfZGhrZXlfdCBjb25zdCAqcF9kaGtleSkpOw0KKw0KKy8qKkBicmllZiBOb3RpZnkgdGhlIHBlZXIgb2YgYSBsb2NhbCBrZXlwcmVzcy4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGFuIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZSB1c2luZyBMRSBTZWN1cmUgQ29ubmVjdGlvbiBpcyBpbiBwcm9ncmVzcy4gQ2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB3aWxsIHJlc3VsdCBpbiBhbiBAcmVmIE5SRl9FUlJPUl9JTlZBTElEX1NUQVRFLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19QS0VfQ0RfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19QS0VfQ0RfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0ga3Bfbm90IFNlZSBAcmVmIEJMRV9HQVBfS1BfTk9UX1RZUEVTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEtleXByZXNzIG5vdGlmaWNhdGlvbiBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciB0cmFuc21pc3Npb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLiBFaXRoZXIgbm90IGVudGVyaW5nIGEgcGFzc2tleSBvciBrZXlwcmVzc2VzIGhhdmUgbm90IGJlZW4gZW5hYmxlZCBieSBib3RoIHBlZXJzLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgQkxFIHN0YWNrIGlzIGJ1c3kuIFJldHJ5IGF0IGxhdGVyIHRpbWUuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfS0VZUFJFU1NfTk9USUZZLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9rZXlwcmVzc19ub3RpZnkodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQ4X3Qga3Bfbm90KSk7DQorDQorLyoqQGJyaWVmIEdlbmVyYXRlIGEgc2V0IG9mIE9PQiBkYXRhIHRvIHNlbmQgdG8gYSBwZWVyIG91dCBvZiBiYW5kLg0KKyAqDQorICogQG5vdGUgIFRoZSBAcmVmIGJsZV9nYXBfYWRkcl90IGluY2x1ZGVkIGluIHRoZSBPT0IgZGF0YSByZXR1cm5lZCB3aWxsIGJlIHRoZSBjdXJyZW50bHkgYWN0aXZlIG9uZSAob3IsIGlmIGEgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkLA0KKyAqICAgICAgICB0aGUgb25lIHVzZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXApLiBUaGUgYXBwbGljYXRpb24gbWF5IG1hbnVhbGx5IG92ZXJ3cml0ZSBpdCB3aXRoIGFuIHVwZGF0ZWQgdmFsdWUuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfTEVTQ19CT05ESU5HX09PQl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfTEVTQ19CT05ESU5HX09PQl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuIENhbiBiZSBCTEVfQ09OTl9IQU5ETEVfSU5WQUxJRCBpZiBhIEJMRSBjb25uZWN0aW9uIGhhcyBub3QgYmVlbiBlc3RhYmxpc2hlZCB5ZXQuDQorICogQHBhcmFtW2luXSBwX3BrX293biBMRSBTZWN1cmUgQ29ubmVjdGlvbnMgbG9jYWwgUC0yNTYgUHVibGljIEtleS4NCisgKiBAcGFyYW1bb3V0XSBwX29vYmRfb3duIFRoZSBPT0IgZGF0YSB0byBiZSBzZW50IG91dCBvZiBiYW5kIHRvIGEgcGVlci4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBPT0IgZGF0YSBzdWNjZXNzZnVsbHkgZ2VuZXJhdGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9MRVNDX09PQl9EQVRBX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfbGVzY19vb2JfZGF0YV9nZXQodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXBfbGVzY19wMjU2X3BrX3QgY29uc3QgKnBfcGtfb3duLCBibGVfZ2FwX2xlc2Nfb29iX2RhdGFfdCAqcF9vb2JkX293bikpOw0KKw0KKy8qKkBicmllZiBQcm92aWRlIHRoZSBPT0IgZGF0YSBzZW50L3JlY2VpdmVkIG91dCBvZiBiYW5kLg0KKyAqDQorICogQG5vdGUgIEFuIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZSB3aXRoIE9PQiBzZWxlY3RlZCBhcyBhbiBhbGdvcml0aG0gbXVzdCBiZSBpbiBwcm9ncmVzcyB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4NCisgKiBAbm90ZSAgQSBAcmVmIEJMRV9HQVBfRVZUX0xFU0NfREhLRVlfUkVRVUVTVCBldmVudCB3aXRoIHRoZSBvb2JkX3JlcSBzZXQgdG8gMSBtdXN0IGhhdmUgYmVlbiByZWNlaXZlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e1RoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgYXV0aGVudGljYXRpb24gcHJvY2VkdXJlc1wsIHNlZSB0aGUgbGlzdCBvZiBldmVudHMgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgQHJlZiBzZF9ibGVfZ2FwX2F1dGhlbnRpY2F0ZS59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUEVSSVBIX0xFU0NfQk9ORElOR19PT0JfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0xFU0NfQk9ORElOR19PT0JfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gcF9vb2JkX293biBUaGUgT09CIGRhdGEgc2VudCBvdXQgb2YgYmFuZCB0byBhIHBlZXIgb3IgTlVMTCBpZiB0aGUgcGVlciBoYXMgbm90IHJlY2VpdmVkIE9PQiBkYXRhLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGNvcnJlc3BvbmQgdG8gQHJlZiBibGVfZ2FwX3NlY19wYXJhbXNfdDo6b29iIGZsYWcgaW4gQHJlZiBCTEVfR0FQX0VWVF9TRUNfUEFSQU1TX1JFUVVFU1QuDQorICogQHBhcmFtW2luXSBwX29vYmRfcGVlciBUaGUgT09CIGRhdGEgcmVjZWl2ZWQgb3V0IG9mIGJhbmQgZnJvbSBhIHBlZXIgb3IgTlVMTCBpZiBub25lIHJlY2VpdmVkLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBjb3JyZXNwb25kIHRvIEByZWYgYmxlX2dhcF9zZWNfcGFyYW1zX3Q6Om9vYiBmbGFnIGluIEByZWYgc2RfYmxlX2dhcF9hdXRoZW50aWNhdGUgaW4gdGhlIGNlbnRyYWwgcm9sZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgb3IgQHJlZiBzZF9ibGVfZ2FwX3NlY19wYXJhbXNfcmVwbHkgaW4gdGhlIHBlcmlwaGVyYWwgcm9sZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBPT0IgZGF0YSBhY2NlcHRlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfTEVTQ19PT0JfREFUQV9TRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2xlc2Nfb29iX2RhdGFfc2V0KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2FwX2xlc2Nfb29iX2RhdGFfdCBjb25zdCAqcF9vb2JkX293biwgYmxlX2dhcF9sZXNjX29vYl9kYXRhX3QgY29uc3QgKnBfb29iZF9wZWVyKSk7DQorDQorLyoqQGJyaWVmIEluaXRpYXRlIEdBUCBFbmNyeXB0aW9uIHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIEluIHRoZSBjZW50cmFsIHJvbGUsIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWF0ZSB0aGUgZW5jcnlwdGlvbiBwcm9jZWR1cmUgdXNpbmcgdGhlIGVuY3J5cHRpb24gaW5mb3JtYXRpb24gcHJvdmlkZWQuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfQ09OTl9TRUNfVVBEQVRFLCBUaGUgY29ubmVjdGlvbiBzZWN1cml0eSBoYXMgYmVlbiB1cGRhdGVkLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX0VOQ19BVVRIX01VVEVYX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9FTkNfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9NVUxUSUxJTktfQ1RSTF9QUk9DX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9TRUNfUkVRX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfbWFzdGVyX2lkIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfbWFzdGVyX2lkX3QgbWFzdGVyIGlkZW50aWZpY2F0aW9uIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIHBfZW5jX2luZm8gIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfZW5jX2luZm9fdCBlbmNyeXB0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgaW5pdGlhdGVkIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX1JPTEUgT3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIFBlcmlwaGVyYWwgcm9sZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgUHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgb3Igbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lLCB3YWl0IGZvciBwZW5kaW5nIHByb2NlZHVyZXMgdG8gY29tcGxldGUgYW5kIHJldHJ5Lg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0VOQ1JZUFQsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX2VuY3J5cHQodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXBfbWFzdGVyX2lkX3QgY29uc3QgKnBfbWFzdGVyX2lkLCBibGVfZ2FwX2VuY19pbmZvX3QgY29uc3QgKnBfZW5jX2luZm8pKTsNCisNCisNCisvKipAYnJpZWYgUmVwbHkgd2l0aCBHQVAgc2VjdXJpdHkgaW5mb3JtYXRpb24uDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB0byByZXBseSB0byBhIEByZWYgQkxFX0dBUF9FVlRfU0VDX0lORk9fUkVRVUVTVCwgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB3aWxsIHJlc3VsdCBpbiBAcmVmIE5SRl9FUlJPUl9JTlZBTElEX1NUQVRFLg0KKyAqIEBub3RlICAgIElmIHRoZSBjYWxsIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIHJlcXVlc3QgaXMgc3RpbGwgcGVuZGluZywgYW5kIHRoZSByZXBseSBjYWxsIG1heSBiZSByZXBlYXRlZCB3aXRoIGNvcnJlY3RlZCBwYXJhbWV0ZXJzLg0KKyAqIEBub3RlICAgIERhdGEgc2lnbmluZyBpcyBub3QgeWV0IHN1cHBvcnRlZCwgYW5kIHBfc2lnbl9pbmZvIG11c3QgdGhlcmVmb3JlIGJlIE5VTEwuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhfRU5DX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfZW5jX2luZm8gUG9pbnRlciB0byBhIEByZWYgYmxlX2dhcF9lbmNfaW5mb190IGVuY3J5cHRpb24gaW5mb3JtYXRpb24gc3RydWN0dXJlLiBNYXkgYmUgTlVMTCB0byBzaWduYWwgbm9uZSBpcyBhdmFpbGFibGUuDQorICogQHBhcmFtW2luXSBwX2lkX2luZm8gUG9pbnRlciB0byBhIEByZWYgYmxlX2dhcF9pcmtfdCBpZGVudGl0eSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIE1heSBiZSBOVUxMIHRvIHNpZ25hbCBub25lIGlzIGF2YWlsYWJsZS4NCisgKiBAcGFyYW1baW5dIHBfc2lnbl9pbmZvIFBvaW50ZXIgdG8gYSBAcmVmIGJsZV9nYXBfc2lnbl9pbmZvX3Qgc2lnbmluZyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIE1heSBiZSBOVUxMIHRvIHNpZ25hbCBub25lIGlzIGF2YWlsYWJsZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgYWNjZXB0ZWQgc2VjdXJpdHkgaW5mb3JtYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1NFQ19JTkZPX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9zZWNfaW5mb19yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9lbmNfaW5mb190IGNvbnN0ICpwX2VuY19pbmZvLCBibGVfZ2FwX2lya190IGNvbnN0ICpwX2lkX2luZm8sIGJsZV9nYXBfc2lnbl9pbmZvX3QgY29uc3QgKnBfc2lnbl9pbmZvKSk7DQorDQorDQorLyoqQGJyaWVmIEdldCB0aGUgY3VycmVudCBjb25uZWN0aW9uIHNlY3VyaXR5Lg0KKyAqDQorICogQHBhcmFtW2luXSAgY29ubl9oYW5kbGUgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW291dF0gcF9jb25uX3NlYyAgUG9pbnRlciB0byBhIEByZWYgYmxlX2dhcF9jb25uX3NlY190IHN0cnVjdHVyZSB0byBiZSBmaWxsZWQgaW4uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgQ3VycmVudCBjb25uZWN0aW9uIHNlY3VyaXR5IHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0NPTk5fU0VDX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfY29ubl9zZWNfZ2V0KHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2FwX2Nvbm5fc2VjX3QgKnBfY29ubl9zZWMpKTsNCisNCisNCisvKipAYnJpZWYgU3RhcnQgcmVwb3J0aW5nIHRoZSByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggdG8gdGhlIGFwcGxpY2F0aW9uLg0KKyAqDQorICogICAgICAgIEEgbmV3IGV2ZW50IGlzIHJlcG9ydGVkIHdoZW5ldmVyIHRoZSBSU1NJIHZhbHVlIGNoYW5nZXMsIHVudGlsIEByZWYgc2RfYmxlX2dhcF9yc3NpX3N0b3AgaXMgY2FsbGVkLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCwgTmV3IFJTU0kgZGF0YSBhdmFpbGFibGUuIEhvdyBvZnRlbiB0aGUgZXZlbnQgaXMgZ2VuZXJhdGVkIGlzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlIHNldHRpbmdzIG9mIHRoZSA8Y29kZT50aHJlc2hvbGRfZGJtPC9jb2RlPg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxjb2RlPnNraXBfY291bnQ8L2NvZGU+IGlucHV0IHBhcmFtZXRlcnMufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfUlNTSV9SRUFEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUlNTSV9GSUxUX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgICAgICAgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSB0aHJlc2hvbGRfZGJtICAgICAgTWluaW11bSBjaGFuZ2UgaW4gZEJtIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBAcmVmIEJMRV9HQVBfRVZUX1JTU0lfQ0hBTkdFRCBldmVudC4gRXZlbnRzIGFyZSBkaXNhYmxlZCBpZiB0aHJlc2hvbGRfZGJtIGVxdWFscyBAcmVmIEJMRV9HQVBfUlNTSV9USFJFU0hPTERfSU5WQUxJRC4NCisgKiBAcGFyYW1baW5dIHNraXBfY291bnQgICAgICAgICBOdW1iZXIgb2YgUlNTSSBzYW1wbGVzIHdpdGggYSBjaGFuZ2Ugb2YgdGhyZXNob2xkX2RibSBvciBtb3JlIGJlZm9yZSBzZW5kaW5nIGEgbmV3IEByZWYgQkxFX0dBUF9FVlRfUlNTSV9DSEFOR0VEIGV2ZW50Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWQgUlNTSSByZXBvcnRpbmcuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFICAgICAgIERpc2Nvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MuIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUlNTSV9TVEFSVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfcnNzaV9zdGFydCh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDhfdCB0aHJlc2hvbGRfZGJtLCB1aW50OF90IHNraXBfY291bnQpKTsNCisNCisNCisvKipAYnJpZWYgU3RvcCByZXBvcnRpbmcgdGhlIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aC4NCisgKg0KKyAqIEBub3RlICBBbiBSU1NJIGNoYW5nZSBkZXRlY3RlZCBiZWZvcmUgdGhlIGNhbGwgYnV0IG5vdCB5ZXQgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uDQorICogICAgICAgIG1heSBiZSByZXBvcnRlZCBhZnRlciBAcmVmIHNkX2JsZV9nYXBfcnNzaV9zdG9wIGhhcyBiZWVuIGNhbGxlZC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfUlNTSV9SRUFEX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfUlNTSV9GSUxUX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBDb25uZWN0aW9uIGhhbmRsZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgZGVhY3RpdmF0ZWQgUlNTSSByZXBvcnRpbmcuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFICAgICAgIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVBfUlNTSV9TVE9QLCB1aW50MzJfdCwgc2RfYmxlX2dhcF9yc3NpX3N0b3AodWludDE2X3QgY29ubl9oYW5kbGUpKTsNCisNCisNCisvKipAYnJpZWYgR2V0IHRoZSByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggZm9yIHRoZSBsYXN0IGNvbm5lY3Rpb24gZXZlbnQuDQorICoNCisgKiAgICAgICAgQHJlZiBzZF9ibGVfZ2FwX3Jzc2lfc3RhcnQgbXVzdCBiZSBjYWxsZWQgdG8gc3RhcnQgcmVwb3J0aW5nIFJTU0kgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uIEByZWYgTlJGX0VSUk9SX05PVF9GT1VORA0KKyAqICAgICAgICB3aWxsIGJlIHJldHVybmVkIHVudGlsIFJTU0kgd2FzIHNhbXBsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFmdGVyIGNhbGxpbmcgQHJlZiBzZF9ibGVfZ2FwX3Jzc2lfc3RhcnQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1JTU0lfUkVBRF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gIGNvbm5faGFuZGxlIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtvdXRdIHBfcnNzaSAgICAgIFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBSU1NJIG1lYXN1cmVtZW50IHNoYWxsIGJlIHN0b3JlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgcmVhZCB0aGUgUlNTSS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCAgICAgICAgICAgTm8gc2FtcGxlIGlzIGF2YWlsYWJsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiAgICAgICAgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSAgICAgICBSU1NJIHJlcG9ydGluZyBpcyBub3Qgb25nb2luZywgb3IgZGlzY29ubmVjdGlvbiBpbiBwcm9ncmVzcy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9SU1NJX0dFVCwgdWludDMyX3QsIHNkX2JsZV9nYXBfcnNzaV9nZXQodWludDE2X3QgY29ubl9oYW5kbGUsIGludDhfdCAqcF9yc3NpKSk7DQorDQorDQorLyoqQGJyaWVmIFN0YXJ0IHNjYW5uaW5nIChHQVAgRGlzY292ZXJ5IHByb2NlZHVyZSwgT2JzZXJ2ZXIgUHJvY2VkdXJlKS4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FQX0VWVF9BRFZfUkVQT1JULCBBbiBhZHZlcnRpc2luZyBvciBzY2FuIHJlc3BvbnNlIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZC59DQorICogQGV2ZW50e0ByZWYgQkxFX0dBUF9FVlRfVElNRU9VVCwgU2Nhbm5lciBoYXMgdGltZWQgb3V0Ln0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9TQ0FOX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfV0xfU0hBUkVfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIHBfc2Nhbl9wYXJhbXMgUG9pbnRlciB0byBzY2FuIHBhcmFtZXRlcnMgc3RydWN0dXJlLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBpbml0aWF0ZWQgc2Nhbm5pbmcgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIFRoZSBzdGFjayBpcyBidXN5LCBwcm9jZXNzIHBlbmRpbmcgZXZlbnRzIGFuZCByZXRyeS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1JFU09VUkNFUyBOb3QgZW5vdWdoIEJMRSByb2xlIHNsb3RzIGF2YWlsYWJsZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9wIG9uZSBvciBtb3JlIGN1cnJlbnRseSBhY3RpdmUgcm9sZXMgKENlbnRyYWwsIFBlcmlwaGVyYWwgb3IgQnJvYWRjYXN0ZXIpIGFuZCB0cnkgYWdhaW4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9TQ0FOX1NUQVJULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9zY2FuX3N0YXJ0KGJsZV9nYXBfc2Nhbl9wYXJhbXNfdCBjb25zdCAqcF9zY2FuX3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBTdG9wIHNjYW5uaW5nIChHQVAgRGlzY292ZXJ5IHByb2NlZHVyZSwgT2JzZXJ2ZXIgUHJvY2VkdXJlKS4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX1NDQU5fTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9XTF9TSEFSRV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RvcHBlZCBzY2FubmluZyBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24gKG1vc3QgcHJvYmFibHkgbm90IGluIHNjYW5uaW5nIHN0YXRlKS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9TQ0FOX1NUT1AsIHVpbnQzMl90LCBzZF9ibGVfZ2FwX3NjYW5fc3RvcCh2b2lkKSk7DQorDQorDQorLyoqQGJyaWVmIENyZWF0ZSBhIGNvbm5lY3Rpb24gKEdBUCBMaW5rIEVzdGFibGlzaG1lbnQpLg0KKyAqDQorICogQG5vdGUgSWYgYSBzY2FubmluZyBwcm9jZWR1cmUgaXMgY3VycmVudGx5IGluIHByb2dyZXNzIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBzdG9wcGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLg0KKyAqICAgICAgIFRoZSBzY2FubmluZyBwcm9jZWR1cmUgd2lsbCBiZSBzdG9wcGVkIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9XTF9TSEFSRV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQ09OTl9QUklWX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVBfQ0VOVFJBTF9DT05OX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBwX3BlZXJfYWRkciAgIFBvaW50ZXIgdG8gcGVlciBhZGRyZXNzLiBJZiB0aGUgdXNlX3doaXRlbGlzdCBiaXQgaXMgc2V0IGluIEByZWYgYmxlX2dhcF9zY2FuX3BhcmFtc190LCB0aGVuIHRoaXMgaXMgaWdub3JlZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgQHJlZiBibGVfZ2FwX2FkZHJfdDo6YWRkcl9pZF9wZWVyIGlzIHNldCB0aGVuIHBfcGVlcl9hZGRyIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgZGV2aWNlIGlkZW50aXR5IGxpc3QNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIEByZWYgc2RfYmxlX2dhcF9kZXZpY2VfaWRlbnRpdGllc19zZXQuDQorICogQHBhcmFtW2luXSBwX3NjYW5fcGFyYW1zIFBvaW50ZXIgdG8gc2NhbiBwYXJhbWV0ZXJzIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1baW5dIHBfY29ubl9wYXJhbXMgUG9pbnRlciB0byBkZXNpcmVkIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4NCisgKiBAcGFyYW1baW5dIGNvbm5fY2ZnX3RhZyAgVGFnIGlkZW50aWZ5aW5nIGEgY29uZmlndXJhdGlvbiBzZXQgYnkgQHJlZiBzZF9ibGVfY2ZnX3NldCBvciBAcmVmDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIEJMRV9DT05OX0NGR19UQUdfREVGQVVMVCB0byB1c2UgdGhlIGRlZmF1bHQgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBpbml0aWF0ZWQgY29ubmVjdGlvbiBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwYXJhbWV0ZXIocykgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBwYXJhbWV0ZXIocykgaW4gcF9zY2FuX3BhcmFtcyBvciBwX2Nvbm5fcGFyYW1zLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFVzZSBvZiB3aGl0ZWxpc3QgcmVxdWVzdGVkIGJ1dCB3aGl0ZWxpc3QgaGFzIG5vdCBiZWVuIHNldCwgc2VlIEByZWYgc2RfYmxlX2dhcF93aGl0ZWxpc3Rfc2V0Lg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFBlZXIgYWRkcmVzcyB3YXMgbm90IHByZXNlbnQgaW4gdGhlIGRldmljZSBpZGVudGl0eSBsaXN0LCBzZWUgQHJlZiBzZF9ibGVfZ2FwX2RldmljZV9pZGVudGl0aWVzX3NldC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgVGhlIFNvZnREZXZpY2UgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLiBUaGlzIG1heSBiZSBkdWUgdG8gYW4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgbG9jYWxseSBpbml0aWF0ZWQgY29ubmVjdCBwcm9jZWR1cmUsIHdoaWNoIG11c3QgY29tcGxldGUgYmVmb3JlIGluaXRpYXRpbmcgYWdhaW4uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9HQVBfSU5WQUxJRF9CTEVfQUREUiBJbnZhbGlkIFBlZXIgYWRkcmVzcy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0NPTk5fQ09VTlQgVGhlIGxpbWl0IG9mIGF2YWlsYWJsZSBjb25uZWN0aW9ucyBoYXMgYmVlbiByZWFjaGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBUaGUgc3RhY2sgaXMgYnVzeSwgcHJvY2VzcyBwZW5kaW5nIGV2ZW50cyBhbmQgcmV0cnkuIElmIGFub3RoZXIgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciB0aGUgY29ycmVzcG9uZGluZyBAcmVmIEJMRV9HQVBfRVZUX0NPTk5FQ1RFRCBldmVudCBiZWZvcmUgY2FsbGluZyBhZ2Fpbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1JFU09VUkNFUyBOb3QgZW5vdWdoIEJMRSByb2xlIHNsb3RzIGF2YWlsYWJsZS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9wIG9uZSBvciBtb3JlIGN1cnJlbnRseSBhY3RpdmUgcm9sZXMgKENlbnRyYWwsIFBlcmlwaGVyYWwgb3IgQnJvYWRjYXN0ZXIpIGFuZCB0cnkgYWdhaW4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9DT05ORUNULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9jb25uZWN0KGJsZV9nYXBfYWRkcl90IGNvbnN0ICpwX3BlZXJfYWRkciwgYmxlX2dhcF9zY2FuX3BhcmFtc190IGNvbnN0ICpwX3NjYW5fcGFyYW1zLCBibGVfZ2FwX2Nvbm5fcGFyYW1zX3QgY29uc3QgKnBfY29ubl9wYXJhbXMsIHVpbnQ4X3QgY29ubl9jZmdfdGFnKSk7DQorDQorDQorLyoqQGJyaWVmIENhbmNlbCBhIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FQX0NFTlRSQUxfQ09OTl9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgY2FuY2VsZWQgYW4gb25nb2luZyBjb25uZWN0aW9uIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBUF9DT05ORUNUX0NBTkNFTCwgdWludDMyX3QsIHNkX2JsZV9nYXBfY29ubmVjdF9jYW5jZWwodm9pZCkpOw0KKw0KKw0KKy8qKkBicmllZiBQSFkgVXBkYXRlIFJlcXVlc3QNCisgKg0KKyAqIEBkZXRhaWxzICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlcXVlc3QgYSBuZXcgUEhZIGNvbmZpZ3VyYXRpb24gZm9yIGEgY2VudHJhbCBvciBhIHBlcmlwaGVyYWwgY29ubmVjdGlvbi4gSXQgd2lsbCBhbHdheXMgZ2VuZXJhdGUgYQ0KKyAqICAgICAgICAgICAgQHJlZiBCTEVfR0FQX0VWVF9QSFlfVVBEQVRFIGV2ZW50IGlmIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gSWYgQHJlZiBibGVfZ2FwX3BoeXNfdDo6dHhfcGh5cyBvciBAcmVmIGJsZV9nYXBfcGh5c190OjpyeF9waHlzDQorICogICAgICAgICAgICBpcyAwLCB0aGVuIHRoZSBzdGFjayB3aWxsIHNlbGVjdCBQSFlzIGJhc2VkIG9uIHRoZSBwZWVyIHJlcXVpcmVtZW50cyBvbiB0aGF0IHNwZWNpZmljIGRpcmVjdGlvbi4gSWYgdGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydA0KKyAqICAgICAgICAgICAgdGhlIFBIWSBVcGRhdGUgcHJvY2VkdXJlLCB0aGVuIHRoZSByZXN1bHRpbmcgQHJlZiBCTEVfR0FQX0VWVF9QSFlfVVBEQVRFIGV2ZW50IHdpbGwgaGF2ZSBhIHN0YXR1cyBkaWZmZXJlbnQgZnJvbSANCisgKiAgICAgICAgICAgIEByZWYgQkxFX0hDSV9TVEFUVVNfQ09ERV9TVUNDRVNTLg0KKyAqDQorICogQG5vdGUgICAgICBUaGUgcmVxdWVzdGVkIFBIWXMgZG9lcyBub3QgaGF2ZSB0byBiZSB3aXRoaW4gdGhlIHNldCBvZiB0aGUgcHJlZmVycmVkIFBIWXMuDQorICoNCisgKiBAbm90ZSAgICAgIElmIHRoZSBAcmVmIGJsZV9nYXBfb3B0X3ByZWZlcnJlZF9waHlzX3QgaGF2ZSBub3QgYmVlbiBjb25maWd1cmVkIHdpdGggQHJlZiBCTEVfR0FQX1BIWV9DT0RFRCwgdGhlbiB0aGlzIGNhbGwgbWlnaHQgcmV0dXJuDQorICogICAgICAgICAgICBAcmVmIEJMRV9FUlJPUl9CTE9DS0VEX0JZX09USEVSX0xJTktTIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIGNvbm5lY3RlZC4NCisgKg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVBfRVZUX1BIWV9VUERBVEUsIFJlc3VsdCBvZiB0aGUgUEhZIFVwZGF0ZSBwcm9jZWR1cmUgcHJvY2VkdXJlLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9DRU5UUkFMX1BIWV9SRVFVRVNUfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9QRVJJUEhFUkFMX1BIWV9SRVFVRVNUfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICAgQ29ubmVjdGlvbiBoYW5kbGUgdG8gaW5kaWNhdGUgdGhlIGNvbm5lY3Rpb24gZm9yIHdoaWNoIHRoZSBQSFkgVXBkYXRlIGlzIHJlcXVlc3RlZC4NCisgKiBAcGFyYW1baW5dIHBfZ2FwX3BoeXMgICAgUG9pbnRlciB0byBQSFkgc3RydWN0dXJlLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSByZXF1ZXN0ZWQgYSBQSFkgVXBkYXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gVW5zdXBwb3J0ZWQgUEhZcyBzdXBwbGllZCB0byB0aGUgY2FsbC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0JMT0NLRURfQllfT1RIRVJfTElOS1MgT3RoZXIgY29ubmVjdGlvbnMgbWF5IGJsb2NrIHRoZSBzY2hlZHVsaW5nIG9mIHRoZSBjdXJyZW50IGxpbmsuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIFByb2NlZHVyZSBpcyBhbHJlYWR5IGluIHByb2dyZXNzIG9yIG5vdCBhbGxvd2VkIGF0IHRoaXMgdGltZS4gUHJvY2VzcyBwZW5kaW5nIGV2ZW50cyBhbmQgd2FpdCBmb3IgdGhlIHBlbmRpbmcgcHJvY2VkdXJlIHRvIGNvbXBsZXRlIGFuZCByZXRyeS4NCisgKg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX1BIWV9SRVFVRVNULCB1aW50MzJfdCwgc2RfYmxlX2dhcF9waHlfcmVxdWVzdCh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhcF9waHlzX3QgY29uc3QgKnBfZ2FwX3BoeXMpKTsNCisNCisvKipAYnJpZWYgSW5pdGlhdGUgb3IgcmVzcG9uZCB0byBhIERhdGEgTGVuZ3RoIFVwZGF0ZSBQcm9jZWR1cmUuDQorICoNCisgKiBAbm90ZSBPbmx5IHN5bW1ldHJpYyBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgRGF0YSBMZW5ndGggVXBkYXRlIGlzIHN1cHBvcnRlZC4gT25seSBAcmVmDQorICogICAgICAgQkxFX0dBUF9EQVRBX0xFTkdUSF9BVVRPIGZvciBtYXhfdHhfdGltZV91cyBhbmQgbWF4X3J4X3RpbWVfdXMgaXMgc3VwcG9ydGVkLg0KKyAqDQorICogQG5vdGUgSWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMgQHJlZiBCTEVfR0FQX0RBVEFfTEVOR1RIX0FVVE8gZm9yIG9uZSBvciBtb3JlIG1lbWJlcnMgb2YNCisgKiAgICAgICBwX2RsX3BhcmFtcywgdGhlIFNvZnREZXZpY2Ugd2lsbCBjaG9vc2UgdGhlIGhpZ2hlc3QgdmFsdWUgc3VwcG9ydGVkIGluIGN1cnJlbnQNCisgKiAgICAgICBjb25maWd1cmF0aW9uIGFuZCBjb25uZWN0aW9uIHBhcmFtZXRlcnMuDQorICoNCisgKiBAcGFyYW1baW5dICAgY29ubl9oYW5kbGUgICAgICAgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSAgIHBfZGxfcGFyYW1zICAgICAgIFBvaW50ZXIgdG8gbG9jYWwgcGFyYW1ldGVycyB0byBiZSB1c2VkIGluIERhdGEgTGVuZ3RoIFVwZGF0ZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZWR1cmUuIFNldCBhbnkgbWVtYmVyIHRvIEByZWYgQkxFX0dBUF9EQVRBX0xFTkdUSF9BVVRPIHRvIGxldA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgU29mdERldmljZSBhdXRvbWF0aWNhbGx5IGRlY2lkZSB0aGUgdmFsdWUgZm9yIHRoYXQgbWVtYmVyLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gTlVMTCB0byB1c2UgYXV0b21hdGljIHZhbHVlcyBmb3IgYWxsIG1lbWJlcnMuDQorICogQHBhcmFtW291dF0gIHBfZGxfbGltaXRhdGlvbiAgIFBvaW50ZXIgdG8gbGltaXRhdGlvbiB0byBiZSB3cml0dGVuIHdoZW4gbG9jYWwgZGV2aWNlIGRvZXMgbm90DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgZW5vdWdoIHJlc291cmNlcyB0byBhY2NvbW1vZGF0ZSB0aGUgcmVxdWVzdGVkIERhdGEgTGVuZ3RoDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBwYXJhbWV0ZXJzLiBJZ25vcmVkIGlmIE5VTEwuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBUF9EQVRBX0xFTkdUSF9VUERBVEVfUFJPQ0VEVVJFX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzZXQgRGF0YSBMZW5ndGggRXh0ZW5zaW9uIGluaXRpYXRpb24vcmVzcG9uc2UgcGFyYW1ldGVycy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUgcGFyYW1ldGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIHN0YXRlIHRvIHBlcmZvcm0gb3BlcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcnMgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIFRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgU29mdERldmljZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1JFU09VUkNFUyBUaGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMgY2FuIG5vdCBiZSBhY2NvbW1vZGF0ZWQuIEluc3BlY3QNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2RsX2xpbWl0YXRpb24gc28gc2VlIHdoZXJlIHRoZSBsaW1pdGF0aW9uIGlzLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBQZWVyIGhhcyBhbHJlYWR5IGluaXRpYXRlZCBhIERhdGEgTGVuZ3RoIFVwZGF0ZSBQcm9jZWR1cmUuIFByb2Nlc3MgdGhlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcgQHJlZiBCTEVfR0FQX0VWVF9EQVRBX0xFTkdUSF9VUERBVEVfUkVRVUVTVCBldmVudCB0byByZXNwb25kLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FQX0RBVEFfTEVOR1RIX1VQREFURSwgdWludDMyX3QsIHNkX2JsZV9nYXBfZGF0YV9sZW5ndGhfdXBkYXRlKHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2FwX2RhdGFfbGVuZ3RoX3BhcmFtc190IGNvbnN0ICpwX2RsX3BhcmFtcywgYmxlX2dhcF9kYXRhX2xlbmd0aF9saW1pdGF0aW9uX3QgKnBfZGxfbGltaXRhdGlvbikpOw0KKw0KKw0KKw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gQkxFX0dBUF9IX18NCisNCisvKioNCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0LmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0ZGRlZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHQuaApAQCAtMCwwICsxLDIyMSBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9HQVRUIEdlbmVyaWMgQXR0cmlidXRlIFByb2ZpbGUgKEdBVFQpIENvbW1vbg0KKyAgQHsNCisgIEBicmllZiAgQ29tbW9uIGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgR0FUVCBpbnRlcmZhY2VzLg0KKyAqLw0KKw0KKyNpZm5kZWYgQkxFX0dBVFRfSF9fDQorI2RlZmluZSBCTEVfR0FUVF9IX18NCisNCisjaW5jbHVkZSAiYmxlX3R5cGVzLmgiDQorI2luY2x1ZGUgImJsZV9yYW5nZXMuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRfREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKiogQGJyaWVmIERlZmF1bHQgQVRUIE1UVSwgaW4gYnl0ZXMuICovDQorI2RlZmluZSBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQgICAgICAgICAgMjMNCisNCisvKipAYnJpZWYgSW52YWxpZCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQgICAgICAgICAgICAweDAwMDANCisNCisvKipAYnJpZWYgRmlyc3QgQXR0cmlidXRlIEhhbmRsZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0hBTkRMRV9TVEFSVCAgICAgICAgICAgICAgMHgwMDAxDQorDQorLyoqQGJyaWVmIExhc3QgQXR0cmlidXRlIEhhbmRsZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0hBTkRMRV9FTkQgICAgICAgICAgICAgICAgMHhGRkZGDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVF9USU1FT1VUX1NPVVJDRVMgR0FUVCBUaW1lb3V0IHNvdXJjZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfVElNRU9VVF9TUkNfUFJPVE9DT0wgICAgICAweDAwICAvKio8IEFUVCBQcm90b2NvbCB0aW1lb3V0LiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRfV1JJVEVfT1BTIEdBVFQgV3JpdGUgb3BlcmF0aW9ucw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVF9PUF9JTlZBTElEICAgICAgICAgICAgICAgIDB4MDAgIC8qKjwgSW52YWxpZCBPcGVyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVF9PUF9XUklURV9SRVEgICAgICAgICAgICAgIDB4MDEgIC8qKjwgV3JpdGUgUmVxdWVzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX09QX1dSSVRFX0NNRCAgICAgICAgICAgICAgMHgwMiAgLyoqPCBXcml0ZSBDb21tYW5kLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfT1BfU0lHTl9XUklURV9DTUQgICAgICAgICAweDAzICAvKio8IFNpZ25lZCBXcml0ZSBDb21tYW5kLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfT1BfUFJFUF9XUklURV9SRVEgICAgICAgICAweDA0ICAvKio8IFByZXBhcmUgV3JpdGUgUmVxdWVzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX09QX0VYRUNfV1JJVEVfUkVRICAgICAgICAgMHgwNSAgLyoqPCBFeGVjdXRlIFdyaXRlIFJlcXVlc3QuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVF9FWEVDX1dSSVRFX0ZMQUdTIEdBVFQgRXhlY3V0ZSBXcml0ZSBmbGFncw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVF9FWEVDX1dSSVRFX0ZMQUdfUFJFUEFSRURfQ0FOQ0VMIDB4MDAgICAvKio8IENhbmNlbCBwcmVwYXJlZCB3cml0ZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0VYRUNfV1JJVEVfRkxBR19QUkVQQVJFRF9XUklURSAgMHgwMSAgIC8qKjwgRXhlY3V0ZSBwcmVwYXJlZCB3cml0ZS4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUX0hWWF9UWVBFUyBHQVRUIEhhbmRsZSBWYWx1ZSBvcGVyYXRpb25zDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUX0hWWF9JTlZBTElEICAgICAgICAgICAgICAgMHgwMCAgLyoqPCBJbnZhbGlkIE9wZXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0hWWF9OT1RJRklDQVRJT04gICAgICAgICAgMHgwMSAgLyoqPCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfSFZYX0lORElDQVRJT04gICAgICAgICAgICAweDAyICAvKio8IEhhbmRsZSBWYWx1ZSBJbmRpY2F0aW9uLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRfU1RBVFVTX0NPREVTIEdBVFQgU3RhdHVzIENvZGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwICAvKio8IFN1Y2Nlc3MuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyoqPCBVbmtub3duIG9yIG5vdCBhcHBsaWNhYmxlIHN0YXR1cy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKio8IEFUVCBFcnJvcjogSW52YWxpZCBFcnJvciBDb2RlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlZBTElEX0hBTkRMRSAgICAgICAgICAgICAweDAxMDEgIC8qKjwgQVRUIEVycm9yOiBJbnZhbGlkIEF0dHJpYnV0ZSBIYW5kbGUuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JFQURfTk9UX1BFUk1JVFRFRCAgICAgICAgIDB4MDEwMiAgLyoqPCBBVFQgRXJyb3I6IFJlYWQgbm90IHBlcm1pdHRlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfV1JJVEVfTk9UX1BFUk1JVFRFRCAgICAgICAgMHgwMTAzICAvKio8IEFUVCBFcnJvcjogV3JpdGUgbm90IHBlcm1pdHRlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5WQUxJRF9QRFUgICAgICAgICAgICAgICAgMHgwMTA0ICAvKio8IEFUVCBFcnJvcjogVXNlZCBpbiBBVFQgYXMgSW52YWxpZCBQRFUuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0lOU1VGX0FVVEhFTlRJQ0FUSU9OICAgICAgIDB4MDEwNSAgLyoqPCBBVFQgRXJyb3I6IEF1dGhlbnRpY2F0ZWQgbGluayByZXF1aXJlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfUkVRVUVTVF9OT1RfU1VQUE9SVEVEICAgICAgMHgwMTA2ICAvKio8IEFUVCBFcnJvcjogVXNlZCBpbiBBVFQgYXMgUmVxdWVzdCBOb3QgU3VwcG9ydGVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlZBTElEX09GRlNFVCAgICAgICAgICAgICAweDAxMDcgIC8qKjwgQVRUIEVycm9yOiBPZmZzZXQgc3BlY2lmaWVkIHdhcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGF0dHJpYnV0ZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfSU5TVUZfQVVUSE9SSVpBVElPTiAgICAgICAgMHgwMTA4ICAvKio8IEFUVCBFcnJvcjogVXNlZCBpbiBBVFQgYXMgSW5zdWZmaWNpZW50IEF1dGhvcml6YXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1BSRVBBUkVfUVVFVUVfRlVMTCAgICAgICAgIDB4MDEwOSAgLyoqPCBBVFQgRXJyb3I6IFVzZWQgaW4gQVRUIGFzIFByZXBhcmUgUXVldWUgRnVsbC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfQVRUUklCVVRFX05PVF9GT1VORCAgICAgICAgMHgwMTBBICAvKio8IEFUVCBFcnJvcjogVXNlZCBpbiBBVFQgYXMgQXR0cmlidXRlIG5vdCBmb3VuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfQVRUUklCVVRFX05PVF9MT05HICAgICAgICAgMHgwMTBCICAvKio8IEFUVCBFcnJvcjogQXR0cmlidXRlIGNhbm5vdCBiZSByZWFkIG9yIHdyaXR0ZW4gdXNpbmcgcmVhZC93cml0ZSBibG9iIHJlcXVlc3RzLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlNVRl9FTkNfS0VZX1NJWkUgICAgICAgICAweDAxMEMgIC8qKjwgQVRUIEVycm9yOiBFbmNyeXB0aW9uIGtleSBzaXplIHVzZWQgaXMgaW5zdWZmaWNpZW50LiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlZBTElEX0FUVF9WQUxfTEVOR1RIICAgICAweDAxMEQgIC8qKjwgQVRUIEVycm9yOiBJbnZhbGlkIHZhbHVlIHNpemUuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1VOTElLRUxZX0VSUk9SICAgICAgICAgICAgIDB4MDEwRSAgLyoqPCBBVFQgRXJyb3I6IFZlcnkgdW5saWtlbHkgZXJyb3IuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0lOU1VGX0VOQ1JZUFRJT04gICAgICAgICAgIDB4MDEwRiAgLyoqPCBBVFQgRXJyb3I6IEVuY3J5cHRlZCBsaW5rIHJlcXVpcmVkLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9VTlNVUFBPUlRFRF9HUk9VUF9UWVBFICAgICAweDAxMTAgIC8qKjwgQVRUIEVycm9yOiBBdHRyaWJ1dGUgdHlwZSBpcyBub3QgYSBzdXBwb3J0ZWQgZ3JvdXBpbmcgYXR0cmlidXRlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9JTlNVRl9SRVNPVVJDRVMgICAgICAgICAgICAweDAxMTEgIC8qKjwgQVRUIEVycm9yOiBFbmNyeXB0ZWQgbGluayByZXF1aXJlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfUkZVX1JBTkdFMV9CRUdJTiAgICAgICAgICAgMHgwMTEyICAvKio8IEFUVCBFcnJvcjogUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UgcmFuZ2UgIzEgYmVnaW4uICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JGVV9SQU5HRTFfRU5EICAgICAgICAgICAgIDB4MDE3RiAgLyoqPCBBVFQgRXJyb3I6IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMxIGVuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfQVBQX0JFR0lOICAgICAgICAgICAgICAgICAgMHgwMTgwICAvKio8IEFUVCBFcnJvcjogQXBwbGljYXRpb24gcmFuZ2UgYmVnaW4uICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0FQUF9FTkQgICAgICAgICAgICAgICAgICAgIDB4MDE5RiAgLyoqPCBBVFQgRXJyb3I6IEFwcGxpY2F0aW9uIHJhbmdlIGVuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfUkZVX1JBTkdFMl9CRUdJTiAgICAgICAgICAgMHgwMUEwICAvKio8IEFUVCBFcnJvcjogUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UgcmFuZ2UgIzIgYmVnaW4uICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JGVV9SQU5HRTJfRU5EICAgICAgICAgICAgIDB4MDFERiAgLyoqPCBBVFQgRXJyb3I6IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMyIGVuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfUkZVX1JBTkdFM19CRUdJTiAgICAgICAgICAgMHgwMUUwICAvKio8IEFUVCBFcnJvcjogUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UgcmFuZ2UgIzMgYmVnaW4uICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX1JGVV9SQU5HRTNfRU5EICAgICAgICAgICAgIDB4MDFGQyAgLyoqPCBBVFQgRXJyb3I6IFJlc2VydmVkIGZvciBGdXR1cmUgVXNlIHJhbmdlICMzIGVuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX1NUQVRVU19BVFRFUlJfQ1BTX0NDQ0RfQ09ORklHX0VSUk9SICAgICAgMHgwMUZEICAvKio8IEFUVCBDb21tb24gUHJvZmlsZSBhbmQgU2VydmljZSBFcnJvcjogQ2xpZW50IENoYXJhY3RlcmlzdGljIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciBpbXByb3Blcmx5IGNvbmZpZ3VyZWQuICovDQorI2RlZmluZSBCTEVfR0FUVF9TVEFUVVNfQVRURVJSX0NQU19QUk9DX0FMUl9JTl9QUk9HICAgICAgIDB4MDFGRSAgLyoqPCBBVFQgQ29tbW9uIFByb2ZpbGUgYW5kIFNlcnZpY2UgRXJyb3I6IFByb2NlZHVyZSBBbHJlYWR5IGluIFByb2dyZXNzLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfU1RBVFVTX0FUVEVSUl9DUFNfT1VUX09GX1JBTkdFICAgICAgICAgICAweDAxRkYgIC8qKjwgQVRUIENvbW1vbiBQcm9maWxlIGFuZCBTZXJ2aWNlIEVycm9yOiBPdXQgT2YgUmFuZ2UuICovDQorLyoqIEB9ICovDQorDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVF9DUEZfRk9STUFUUyBDaGFyYWN0ZXJpc3RpYyBQcmVzZW50YXRpb24gRm9ybWF0cw0KKyAqICBAbm90ZSBGb3VuZCBhdCBodHRwOi8vZGV2ZWxvcGVyLmJsdWV0b290aC5vcmcvZ2F0dC9kZXNjcmlwdG9ycy9QYWdlcy9EZXNjcmlwdG9yVmlld2VyLmFzcHg/dT1vcmcuYmx1ZXRvb3RoLmRlc2NyaXB0b3IuZ2F0dC5jaGFyYWN0ZXJpc3RpY19wcmVzZW50YXRpb25fZm9ybWF0LnhtbA0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1JGVSAgICAgICAgICAgICAgICAgMHgwMCAvKio8IFJlc2VydmVkIEZvciBGdXR1cmUgVXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9CT09MRUFOICAgICAgICAgICAgIDB4MDEgLyoqPCBCb29sZWFuLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF8yQklUICAgICAgICAgICAgICAgIDB4MDIgLyoqPCBVbnNpZ25lZCAyLWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9OSUJCTEUgICAgICAgICAgICAgIDB4MDMgLyoqPCBVbnNpZ25lZCA0LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VSU5UOCAgICAgICAgICAgICAgIDB4MDQgLyoqPCBVbnNpZ25lZCA4LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VSU5UMTIgICAgICAgICAgICAgIDB4MDUgLyoqPCBVbnNpZ25lZCAxMi1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVUlOVDE2ICAgICAgICAgICAgICAweDA2IC8qKjwgVW5zaWduZWQgMTYtYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1VJTlQyNCAgICAgICAgICAgICAgMHgwNyAvKio8IFVuc2lnbmVkIDI0LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VSU5UMzIgICAgICAgICAgICAgIDB4MDggLyoqPCBVbnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVUlOVDQ4ICAgICAgICAgICAgICAweDA5IC8qKjwgVW5zaWduZWQgNDgtYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1VJTlQ2NCAgICAgICAgICAgICAgMHgwQSAvKio8IFVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9VSU5UMTI4ICAgICAgICAgICAgIDB4MEIgLyoqPCBVbnNpZ25lZCAxMjgtYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NJTlQ4ICAgICAgICAgICAgICAgMHgwQyAvKio8IFNpZ25lZCAyLWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9TSU5UMTIgICAgICAgICAgICAgIDB4MEQgLyoqPCBTaWduZWQgMTItYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NJTlQxNiAgICAgICAgICAgICAgMHgwRSAvKio8IFNpZ25lZCAxNi1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU0lOVDI0ICAgICAgICAgICAgICAweDBGIC8qKjwgU2lnbmVkIDI0LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9TSU5UMzIgICAgICAgICAgICAgIDB4MTAgLyoqPCBTaWduZWQgMzItYml0IGludGVnZXIuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1NJTlQ0OCAgICAgICAgICAgICAgMHgxMSAvKio8IFNpZ25lZCA0OC1iaXQgaW50ZWdlci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU0lOVDY0ICAgICAgICAgICAgICAweDEyIC8qKjwgU2lnbmVkIDY0LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9TSU5UMTI4ICAgICAgICAgICAgIDB4MTMgLyoqPCBTaWduZWQgMTI4LWJpdCBpbnRlZ2VyLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9GTE9BVDMyICAgICAgICAgICAgIDB4MTQgLyoqPCBJRUVFLTc1NCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX0ZMT0FUNjQgICAgICAgICAgICAgMHgxNSAvKio8IElFRUUtNzU0IDY0LWJpdCBmbG9hdGluZyBwb2ludC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU0ZMT0FUICAgICAgICAgICAgICAweDE2IC8qKjwgSUVFRS0xMTA3MyAxNi1iaXQgU0ZMT0FULiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX0ZPUk1BVF9GTE9BVCAgICAgICAgICAgICAgIDB4MTcgLyoqPCBJRUVFLTExMDczIDMyLWJpdCBGTE9BVC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfRFVJTlQxNiAgICAgICAgICAgICAweDE4IC8qKjwgSUVFRS0yMDYwMSBmb3JtYXQuICovDQorI2RlZmluZSBCTEVfR0FUVF9DUEZfRk9STUFUX1VURjhTICAgICAgICAgICAgICAgMHgxOSAvKio8IFVURi04IHN0cmluZy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfVVRGMTZTICAgICAgICAgICAgICAweDFBIC8qKjwgVVRGLTE2IHN0cmluZy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUX0NQRl9GT1JNQVRfU1RSVUNUICAgICAgICAgICAgICAweDFCIC8qKjwgT3BhcXVlIFN0cnVjdHVyZS4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUX0NQRl9OQU1FU1BBQ0VTIEdBVFQgQmx1ZXRvb3RoIE5hbWVzcGFjZXMNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX05BTUVTUEFDRV9CVFNJRyAgICAgICAgICAgIDB4MDEgLyoqPCBCbHVldG9vdGggU0lHIGRlZmluZWQgTmFtZXNwYWNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfQ1BGX05BTUVTUEFDRV9ERVNDUklQVElPTl9VTktOT1dOIDB4MDAwMCAvKio8IE5hbWVzcGFjZSBEZXNjcmlwdGlvbiBVbmtub3duLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBCTEVfR0FUVF9TVFJVQ1RVUkVTIFN0cnVjdHVyZXMNCisgKiBAeyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBCTEUgR0FUVCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgc2V0IHdpdGggQHJlZiBzZF9ibGVfY2ZnX3NldC4NCisgKg0KKyAqIEByZXR2YWwgTlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gYXR0X210dSBpcyBzbWFsbGVyIHRoYW4gQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgYXR0X210dTsgICAgICAgICAgLyoqPCBNYXhpbXVtIHNpemUgb2YgQVRUIHBhY2tldCB0aGUgU29mdERldmljZSBjYW4gc2VuZCBvciByZWNlaXZlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYW5kIG1pbmltdW0gdmFsdWUgaXMgQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbXNjcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG1tc2N7QHJlZiBCTEVfR0FUVENfTVRVX0VYQ0hBTkdFfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG1tc2N7QHJlZiBCTEVfR0FUVFNfTVRVX0VYQ0hBTkdFfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVuZG1zY3MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gYmxlX2dhdHRfY29ubl9jZmdfdDsNCisNCisvKipAYnJpZWYgR0FUVCBDaGFyYWN0ZXJpc3RpYyBQcm9wZXJ0aWVzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgLyogU3RhbmRhcmQgcHJvcGVydGllcyAqLw0KKyAgdWludDhfdCBicm9hZGNhc3QgICAgICAgOjE7IC8qKjwgQnJvYWRjYXN0aW5nIG9mIHRoZSB2YWx1ZSBwZXJtaXR0ZWQuICovDQorICB1aW50OF90IHJlYWQgICAgICAgICAgICA6MTsgLyoqPCBSZWFkaW5nIHRoZSB2YWx1ZSBwZXJtaXR0ZWQuICovDQorICB1aW50OF90IHdyaXRlX3dvX3Jlc3AgICA6MTsgLyoqPCBXcml0aW5nIHRoZSB2YWx1ZSB3aXRoIFdyaXRlIENvbW1hbmQgcGVybWl0dGVkLiAqLw0KKyAgdWludDhfdCB3cml0ZSAgICAgICAgICAgOjE7IC8qKjwgV3JpdGluZyB0aGUgdmFsdWUgd2l0aCBXcml0ZSBSZXF1ZXN0IHBlcm1pdHRlZC4gKi8NCisgIHVpbnQ4X3Qgbm90aWZ5ICAgICAgICAgIDoxOyAvKio8IE5vdGlmaWNhdGlvbiBvZiB0aGUgdmFsdWUgcGVybWl0dGVkLiAqLw0KKyAgdWludDhfdCBpbmRpY2F0ZSAgICAgICAgOjE7IC8qKjwgSW5kaWNhdGlvbnMgb2YgdGhlIHZhbHVlIHBlcm1pdHRlZC4gKi8NCisgIHVpbnQ4X3QgYXV0aF9zaWduZWRfd3IgIDoxOyAvKio8IFdyaXRpbmcgdGhlIHZhbHVlIHdpdGggU2lnbmVkIFdyaXRlIENvbW1hbmQgcGVybWl0dGVkLiAqLw0KK30gYmxlX2dhdHRfY2hhcl9wcm9wc190Ow0KKw0KKy8qKkBicmllZiBHQVRUIENoYXJhY3RlcmlzdGljIEV4dGVuZGVkIFByb3BlcnRpZXMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAvKiBFeHRlbmRlZCBwcm9wZXJ0aWVzICovDQorICB1aW50OF90IHJlbGlhYmxlX3dyICAgICA6MTsgLyoqPCBXcml0aW5nIHRoZSB2YWx1ZSB3aXRoIFF1ZXVlZCBXcml0ZSBvcGVyYXRpb25zIHBlcm1pdHRlZC4gKi8NCisgIHVpbnQ4X3Qgd3JfYXV4ICAgICAgICAgIDoxOyAvKio8IFdyaXRpbmcgdGhlIENoYXJhY3RlcmlzdGljIFVzZXIgRGVzY3JpcHRpb24gZGVzY3JpcHRvciBwZXJtaXR0ZWQuICovDQorfSBibGVfZ2F0dF9jaGFyX2V4dF9wcm9wc190Ow0KKw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gQkxFX0dBVFRfSF9fDQorDQorLyoqIEB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfZ2F0dGMuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmZGQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHRjLmgKQEAgLTAsMCArMSw3MDAgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICBAYWRkdG9ncm91cCBCTEVfR0FUVEMgR2VuZXJpYyBBdHRyaWJ1dGUgUHJvZmlsZSAoR0FUVCkgQ2xpZW50DQorICBAew0KKyAgQGJyaWVmICBEZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEdBVFQgQ2xpZW50IGludGVyZmFjZS4NCisgKi8NCisNCisjaWZuZGVmIEJMRV9HQVRUQ19IX18NCisjZGVmaW5lIEJMRV9HQVRUQ19IX18NCisNCisjaW5jbHVkZSAiYmxlX2dhdHQuaCINCisjaW5jbHVkZSAiYmxlX3R5cGVzLmgiDQorI2luY2x1ZGUgImJsZV9yYW5nZXMuaCINCisjaW5jbHVkZSAibnJmX3N2Yy5oIg0KKyNpbmNsdWRlICJucmZfZXJyb3IuaCINCisjaW5jbHVkZSAibnJmLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUQ19FTlVNRVJBVElPTlMgRW51bWVyYXRpb25zDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgR0FUVEMgQVBJIFNWQyBudW1iZXJzLiAqLw0KK2VudW0gQkxFX0dBVFRDX1NWQ1MNCit7DQorICBTRF9CTEVfR0FUVENfUFJJTUFSWV9TRVJWSUNFU19ESVNDT1ZFUiA9IEJMRV9HQVRUQ19TVkNfQkFTRSwgLyoqPCBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5LiAqLw0KKyAgU0RfQkxFX0dBVFRDX1JFTEFUSU9OU0hJUFNfRElTQ09WRVIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVsYXRpb25zaGlwIERpc2NvdmVyeS4gKi8NCisgIFNEX0JMRV9HQVRUQ19DSEFSQUNURVJJU1RJQ1NfRElTQ09WRVIsICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIERpc2NvdmVyeS4gKi8NCisgIFNEX0JMRV9HQVRUQ19ERVNDUklQVE9SU19ESVNDT1ZFUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgRGlzY292ZXJ5LiAqLw0KKyAgU0RfQkxFX0dBVFRDX0FUVFJfSU5GT19ESVNDT1ZFUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIEluZm9ybWF0aW9uIERpc2NvdmVyeS4gKi8NCisgIFNEX0JMRV9HQVRUQ19DSEFSX1ZBTFVFX0JZX1VVSURfUkVBRCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlYWQgQ2hhcmFjdGVyaXN0aWMgVmFsdWUgYnkgVVVJRC4gKi8NCisgIFNEX0JMRV9HQVRUQ19SRUFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdlbmVyaWMgcmVhZC4gKi8NCisgIFNEX0JMRV9HQVRUQ19DSEFSX1ZBTFVFU19SRUFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlYWQgbXVsdGlwbGUgQ2hhcmFjdGVyaXN0aWMgVmFsdWVzLiAqLw0KKyAgU0RfQkxFX0dBVFRDX1dSSVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2VuZXJpYyB3cml0ZS4gKi8NCisgIFNEX0JMRV9HQVRUQ19IVl9DT05GSVJNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEhhbmRsZSBWYWx1ZSBDb25maXJtYXRpb24uICovDQorICBTRF9CTEVfR0FUVENfRVhDSEFOR0VfTVRVX1JFUVVFU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGNoYW5nZSBNVFUgUmVxdWVzdC4gKi8NCit9Ow0KKw0KKy8qKg0KKyAqIEBicmllZiBHQVRUIENsaWVudCBFdmVudCBJRHMuDQorICovDQorZW51bSBCTEVfR0FUVENfRVZUUw0KK3sNCisgIEJMRV9HQVRUQ19FVlRfUFJJTV9TUlZDX0RJU0NfUlNQID0gQkxFX0dBVFRDX0VWVF9CQVNFLCAgLyoqPCBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5IFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X3ByaW1fc3J2Y19kaXNjX3JzcF90LiAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9SRUxfRElTQ19SU1AsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkgUmVzcG9uc2UgZXZlbnQuICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfcmVsX2Rpc2NfcnNwX3QuICAgICAgICAgICAgICAgICovDQorICBCTEVfR0FUVENfRVZUX0NIQVJfRElTQ19SU1AsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5IFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9jaGFyX2Rpc2NfcnNwX3QuICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfREVTQ19ESVNDX1JTUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZXNjcmlwdG9yIERpc2NvdmVyeSBSZXNwb25zZSBldmVudC4gICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X2Rlc2NfZGlzY19yc3BfdC4gICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9BVFRSX0lORk9fRElTQ19SU1AsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBJbmZvcm1hdGlvbiBSZXNwb25zZSBldmVudC4gICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfYXR0cl9pbmZvX2Rpc2NfcnNwX3QuICovDQorICBCTEVfR0FUVENfRVZUX0NIQVJfVkFMX0JZX1VVSURfUkVBRF9SU1AsICAgICAgICAgICAgICAgIC8qKjwgUmVhZCBCeSBVVUlEIFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX3QuICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfUkVBRF9SU1AsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWFkIFJlc3BvbnNlIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X3JlYWRfcnNwX3QuICAgICAgICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTFNfUkVBRF9SU1AsICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlYWQgbXVsdGlwbGUgUmVzcG9uc2UgZXZlbnQuICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfY2hhcl92YWxzX3JlYWRfcnNwX3QuICAgICAgICAgICovDQorICBCTEVfR0FUVENfRVZUX1dSSVRFX1JTUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgV3JpdGUgUmVzcG9uc2UgZXZlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF93cml0ZV9yc3BfdC4gICAgICAgICAgICAgICAgICAgKi8NCisgIEJMRV9HQVRUQ19FVlRfSFZYLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIG9yIEluZGljYXRpb24gZXZlbnQuICAgICBcbiBDb25maXJtIGluZGljYXRpb24gd2l0aCBAcmVmIHNkX2JsZV9nYXR0Y19odl9jb25maXJtLiAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF9odnhfdC4gKi8NCisgIEJMRV9HQVRUQ19FVlRfRVhDSEFOR0VfTVRVX1JTUCwgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGNoYW5nZSBNVFUgUmVzcG9uc2UgZXZlbnQuICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dGNfZXZ0X2V4Y2hhbmdlX210dV9yc3BfdC4gICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRDX0VWVF9USU1FT1VULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRpbWVvdXQgZXZlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIFNlZSBAcmVmIGJsZV9nYXR0Y19ldnRfdGltZW91dF90LiAgICAgICAgICAgICAgICAgICAgICovDQorICBCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgIC8qKjwgV3JpdGUgd2l0aG91dCBSZXNwb25zZSB0cmFuc21pc3Npb24gY29tcGxldGUuICAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRjX2V2dF93cml0ZV9jbWRfdHhfY29tcGxldGVfdC4gICAgICAgKi8NCit9Ow0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBCTEVfR0FUVENfREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9FUlJPUlNfR0FUVEMgU1ZDIHJldHVybiB2YWx1ZXMgc3BlY2lmaWMgdG8gR0FUVEMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0dBVFRDX1BST0NfTk9UX1BFUk1JVFRFRCAgICAoTlJGX0dBVFRDX0VSUl9CQVNFICsgMHgwMDApIC8qKjwgUHJvY2VkdXJlIG5vdCBQZXJtaXR0ZWQuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVENfQVRUUl9JTkZPX0ZPUk1BVCBBdHRyaWJ1dGUgSW5mb3JtYXRpb24gRm9ybWF0cw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVENfQVRUUl9JTkZPX0ZPUk1BVF8xNkJJVCAgICAxIC8qKjwgMTYtYml0IEF0dHJpYnV0ZSBJbmZvcm1hdGlvbiBGb3JtYXQuICovDQorI2RlZmluZSBCTEVfR0FUVENfQVRUUl9JTkZPX0ZPUk1BVF8xMjhCSVQgICAyIC8qKjwgMTI4LWJpdCBBdHRyaWJ1dGUgSW5mb3JtYXRpb24gRm9ybWF0LiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRDX0RFRkFVTFRTIEdBVFQgQ2xpZW50IGRlZmF1bHRzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUQ19XUklURV9DTURfVFhfUVVFVUVfU0laRV9ERUZBVUxUICAxIC8qKjwgRGVmYXVsdCBudW1iZXIgb2YgV3JpdGUgd2l0aG91dCBSZXNwb25zZSB0aGF0IGNhbiBiZSBxdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbi4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRDX1NUUlVDVFVSRVMgU3RydWN0dXJlcw0KKyAqIEB7ICovDQorDQorLyoqDQorICogQGJyaWVmIEJMRSBHQVRUQyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgc2V0IHdpdGggQHJlZiBzZF9ibGVfY2ZnX3NldC4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgIHdyaXRlX2NtZF90eF9xdWV1ZV9zaXplOyAvKio8IFRoZSBndWFyYW50ZWVkIG1pbmltdW0gbnVtYmVyIG9mIFdyaXRlIHdpdGhvdXQgUmVzcG9uc2UgdGhhdCBjYW4gYmUgcXVldWVkIGZvciB0cmFuc21pc3Npb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgQHJlZiBCTEVfR0FUVENfV1JJVEVfQ01EX1RYX1FVRVVFX1NJWkVfREVGQVVMVCAqLw0KK30gYmxlX2dhdHRjX2Nvbm5fY2ZnX3Q7DQorDQorLyoqQGJyaWVmIE9wZXJhdGlvbiBIYW5kbGUgUmFuZ2UuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICBzdGFydF9oYW5kbGU7IC8qKjwgU3RhcnQgSGFuZGxlLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgZW5kX2hhbmRsZTsgICAvKio8IEVuZCBIYW5kbGUuICovDQorfSBibGVfZ2F0dGNfaGFuZGxlX3JhbmdlX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBVFQgc2VydmljZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV91dWlkX3QgICAgICAgICAgICAgICB1dWlkOyAgICAgICAgICAvKio8IFNlcnZpY2UgVVVJRC4gKi8NCisgIGJsZV9nYXR0Y19oYW5kbGVfcmFuZ2VfdCBoYW5kbGVfcmFuZ2U7ICAvKio8IFNlcnZpY2UgSGFuZGxlIFJhbmdlLiAqLw0KK30gYmxlX2dhdHRjX3NlcnZpY2VfdDsNCisNCisNCisvKipAYnJpZWYgIEdBVFQgaW5jbHVkZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgaGFuZGxlOyAgICAgICAgICAgLyoqPCBJbmNsdWRlIEhhbmRsZS4gKi8NCisgIGJsZV9nYXR0Y19zZXJ2aWNlX3QgaW5jbHVkZWRfc3J2YzsgICAgLyoqPCBIYW5kbGUgb2YgdGhlIGluY2x1ZGVkIHNlcnZpY2UuICovDQorfSBibGVfZ2F0dGNfaW5jbHVkZV90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVRUIGNoYXJhY3RlcmlzdGljLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgYmxlX3V1aWRfdCAgICAgICAgICAgICAgdXVpZDsgICAgICAgICAgICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgVVVJRC4gKi8NCisgIGJsZV9nYXR0X2NoYXJfcHJvcHNfdCAgIGNoYXJfcHJvcHM7ICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIFByb3BlcnRpZXMuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICBjaGFyX2V4dF9wcm9wcyA6IDE7ICAgLyoqPCBFeHRlbmRlZCBwcm9wZXJ0aWVzIHByZXNlbnQuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICBoYW5kbGVfZGVjbDsgICAgICAgICAgLyoqPCBIYW5kbGUgb2YgdGhlIENoYXJhY3RlcmlzdGljIERlY2xhcmF0aW9uLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgaGFuZGxlX3ZhbHVlOyAgICAgICAgIC8qKjwgSGFuZGxlIG9mIHRoZSBDaGFyYWN0ZXJpc3RpYyBWYWx1ZS4gKi8NCit9IGJsZV9nYXR0Y19jaGFyX3Q7DQorDQorDQorLyoqQGJyaWVmIEdBVFQgZGVzY3JpcHRvci4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgIGhhbmRsZTsgICAgICAgICAvKio8IERlc2NyaXB0b3IgSGFuZGxlLiAqLw0KKyAgYmxlX3V1aWRfdCAgICAgICAgdXVpZDsgICAgICAgICAgIC8qKjwgRGVzY3JpcHRvciBVVUlELiAqLw0KK30gYmxlX2dhdHRjX2Rlc2NfdDsNCisNCisNCisvKipAYnJpZWYgV3JpdGUgUGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgIHdyaXRlX29wOyAgICAgICAgICAgICAvKio8IFdyaXRlIE9wZXJhdGlvbiB0byBiZSBwZXJmb3JtZWQsIHNlZSBAcmVmIEJMRV9HQVRUX1dSSVRFX09QUy4gKi8NCisgIHVpbnQ4X3QgICAgICAgIGZsYWdzOyAgICAgICAgICAgICAgICAvKio8IEZsYWdzLCBzZWUgQHJlZiBCTEVfR0FUVF9FWEVDX1dSSVRFX0ZMQUdTLiAqLw0KKyAgdWludDE2X3QgICAgICAgaGFuZGxlOyAgICAgICAgICAgICAgIC8qKjwgSGFuZGxlIHRvIHRoZSBhdHRyaWJ1dGUgdG8gYmUgd3JpdHRlbi4gKi8NCisgIHVpbnQxNl90ICAgICAgIG9mZnNldDsgICAgICAgICAgICAgICAvKio8IE9mZnNldCBpbiBieXRlcy4gQG5vdGUgRm9yIFdSSVRFX0NNRCBhbmQgV1JJVEVfUkVRLCBvZmZzZXQgbXVzdCBiZSAwLiAqLw0KKyAgdWludDE2X3QgICAgICAgbGVuOyAgICAgICAgICAgICAgICAgIC8qKjwgTGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMuICovDQorICB1aW50OF90IGNvbnN0ICpwX3ZhbHVlOyAgICAgICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSB2YWx1ZSBkYXRhLiAqLw0KK30gYmxlX2dhdHRjX3dyaXRlX3BhcmFtc190Ow0KKw0KKy8qKkBicmllZiBBdHRyaWJ1dGUgSW5mb3JtYXRpb24gZm9yIDE2LWJpdCBBdHRyaWJ1dGUgVVVJRC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgIGhhbmRsZTsgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBoYW5kbGUuICovDQorICBibGVfdXVpZF90ICAgICB1dWlkOyAgICAgICAgICAgICAgICAgLyoqPCAxNi1iaXQgQXR0cmlidXRlIFVVSUQuICovDQorfSBibGVfZ2F0dGNfYXR0cl9pbmZvMTZfdDsNCisNCisvKipAYnJpZWYgQXR0cmlidXRlIEluZm9ybWF0aW9uIGZvciAxMjgtYml0IEF0dHJpYnV0ZSBVVUlELiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgaGFuZGxlOyAgICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIGhhbmRsZS4gKi8NCisgIGJsZV91dWlkMTI4X3QgIHV1aWQ7ICAgICAgICAgICAgICAgICAvKio8IDEyOC1iaXQgQXR0cmlidXRlIFVVSUQuICovDQorfSBibGVfZ2F0dGNfYXR0cl9pbmZvMTI4X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgIGNvdW50OyAgICAgICAgICAgLyoqPCBTZXJ2aWNlIGNvdW50LiAqLw0KKyAgYmxlX2dhdHRjX3NlcnZpY2VfdCBzZXJ2aWNlc1sxXTsgICAgICAvKio8IFNlcnZpY2UgZGF0YS4gQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfcHJpbV9zcnZjX2Rpc2NfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX1JFTF9ESVNDX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgIGNvdW50OyAgICAgICAgICAgLyoqPCBJbmNsdWRlIGNvdW50LiAqLw0KKyAgYmxlX2dhdHRjX2luY2x1ZGVfdCBpbmNsdWRlc1sxXTsgICAgICAvKio8IEluY2x1ZGUgZGF0YS4gQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfcmVsX2Rpc2NfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX0NIQVJfRElTQ19SU1AuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgIGNvdW50OyAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIGNvdW50LiAqLw0KKyAgYmxlX2dhdHRjX2NoYXJfdCAgICBjaGFyc1sxXTsgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBkYXRhLiBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfY2hhcl9kaXNjX3JzcF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9ERVNDX0RJU0NfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBjb3VudDsgICAgICAgICAgLyoqPCBEZXNjcmlwdG9yIGNvdW50LiAqLw0KKyAgYmxlX2dhdHRjX2Rlc2NfdCAgICBkZXNjc1sxXTsgICAgICAgLyoqPCBEZXNjcmlwdG9yIGRhdGEuIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9ldnRfZ2V0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgZXZlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBtZW1iZXJzLiAqLw0KK30gYmxlX2dhdHRjX2V2dF9kZXNjX2Rpc2NfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX0FUVFJfSU5GT19ESVNDX1JTUC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgY291bnQuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDsgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIGluZm9ybWF0aW9uIGZvcm1hdCwgc2VlIEByZWYgQkxFX0dBVFRDX0FUVFJfSU5GT19GT1JNQVQuICovDQorICB1bmlvbiB7DQorICAgIGJsZV9nYXR0Y19hdHRyX2luZm8xNl90ICBhdHRyX2luZm8xNlsxXTsgICAgIC8qKjwgQXR0cmlidXRlIGluZm9ybWF0aW9uIGZvciAxNi1iaXQgQXR0cmlidXRlIFVVSUQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCisgICAgYmxlX2dhdHRjX2F0dHJfaW5mbzEyOF90IGF0dHJfaW5mbzEyOFsxXTsgICAgLyoqPCBBdHRyaWJ1dGUgaW5mb3JtYXRpb24gZm9yIDEyOC1iaXQgQXR0cmlidXRlIFVVSUQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCisgIH0gaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgaW5mb3JtYXRpb24gdW5pb24uICovDQorfSBibGVfZ2F0dGNfZXZ0X2F0dHJfaW5mb19kaXNjX3JzcF90Ow0KKw0KKy8qKkBicmllZiBHQVRUIHJlYWQgYnkgVVVJRCBoYW5kbGUgdmFsdWUgcGFpci4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgICAgaGFuZGxlOyAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBIYW5kbGUuICovDQorICB1aW50OF90ICAgICAgICAgICAgKnBfdmFsdWU7ICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBBdHRyaWJ1dGUgVmFsdWUsIGxlbmd0aCBpcyBhdmFpbGFibGUgaW4gQHJlZiBibGVfZ2F0dGNfZXZ0X2NoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3BfdDo6dmFsdWVfbGVuLiAqLw0KK30gYmxlX2dhdHRjX2hhbmRsZV92YWx1ZV90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTF9CWV9VVUlEX1JFQURfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICBjb3VudDsgICAgICAgICAgICAvKio8IEhhbmRsZS1WYWx1ZSBQYWlyIENvdW50LiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICB2YWx1ZV9sZW47ICAgICAgICAvKio8IExlbmd0aCBvZiB0aGUgdmFsdWUgaW4gSGFuZGxlLVZhbHVlKHMpIGxpc3QuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgIGhhbmRsZV92YWx1ZVsxXTsgIC8qKjwgSGFuZGxlLVZhbHVlKHMpIGxpc3QuIFRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCB1c2UgQHJlZiBzZF9ibGVfZ2F0dGNfZXZ0X2NoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3BfaXRlci4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9ldnRfZ2V0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgZXZlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBtZW1iZXJzLiAqLw0KK30gYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVENfRVZUX1JFQURfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBoYW5kbGU7ICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICBvZmZzZXQ7ICAgICAgICAgLyoqPCBPZmZzZXQgb2YgdGhlIGF0dHJpYnV0ZSBkYXRhLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICBsZW47ICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgZGF0YSBsZW5ndGguICovDQorICB1aW50OF90ICAgICAgICAgICAgIGRhdGFbMV07ICAgICAgICAvKio8IEF0dHJpYnV0ZSBkYXRhLiBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgQHJlZiBzZF9ibGVfZXZ0X2dldCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGV2ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBsZW5ndGggYXJyYXkgbWVtYmVycy4gKi8NCit9IGJsZV9nYXR0Y19ldnRfcmVhZF9yc3BfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxTX1JFQURfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBsZW47ICAgICAgICAgICAgLyoqPCBDb25jYXRlbmF0ZWQgQXR0cmlidXRlIHZhbHVlcyBsZW5ndGguICovDQorICB1aW50OF90ICAgICAgICAgICAgIHZhbHVlc1sxXTsgICAgICAvKio8IEF0dHJpYnV0ZSB2YWx1ZXMuIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9ldnRfZ2V0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgZXZlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBtZW1iZXJzLiAqLw0KK30gYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbHNfcmVhZF9yc3BfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBoYW5kbGU7ICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBIYW5kbGUuICovDQorICB1aW50OF90ICAgICAgICAgICAgIHdyaXRlX29wOyAgICAgICAgIC8qKjwgVHlwZSBvZiB3cml0ZSBvcGVyYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUX1dSSVRFX09QUy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgLyoqPCBEYXRhIG9mZnNldC4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgbGVuOyAgICAgICAgICAgICAgLyoqPCBEYXRhIGxlbmd0aC4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgLyoqPCBEYXRhLiBAbm90ZSBUaGlzIGlzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5LiBUaGUgc2l6ZSBvZiAxIGluZGljYXRlZCBpcyBvbmx5IGEgcGxhY2Vob2xkZXIgZm9yIGNvbXBpbGF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9ldnRfZ2V0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgZXZlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBtZW1iZXJzLiAqLw0KK30gYmxlX2dhdHRjX2V2dF93cml0ZV9yc3BfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfSFZYLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBoYW5kbGU7ICAgICAgICAgLyoqPCBIYW5kbGUgdG8gd2hpY2ggdGhlIEhWeCBvcGVyYXRpb24gYXBwbGllcy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qKjwgSW5kaWNhdGlvbiBvciBOb3RpZmljYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUX0hWWF9UWVBFUy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgbGVuOyAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIGRhdGEgbGVuZ3RoLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICBkYXRhWzFdOyAgICAgICAgLyoqPCBBdHRyaWJ1dGUgZGF0YS4gQG5vdGUgVGhpcyBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4gVGhlIHNpemUgb2YgMSBpbmRpY2F0ZWQgaXMgb25seSBhIHBsYWNlaG9sZGVyIGZvciBjb21waWxhdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIEByZWYgc2RfYmxlX2V2dF9nZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBldmVudCBzdHJ1Y3R1cmVzIHdpdGggdmFyaWFibGUgbGVuZ3RoIGFycmF5IG1lbWJlcnMuICovDQorfSBibGVfZ2F0dGNfZXZ0X2h2eF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9FWENIQU5HRV9NVFVfUlNQLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgc2VydmVyX3J4X210dTsgICAgICAgICAgICAvKio8IFNlcnZlciBSWCBNVFUgc2l6ZS4gKi8NCit9IGJsZV9nYXR0Y19ldnRfZXhjaGFuZ2VfbXR1X3JzcF90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRDX0VWVF9USU1FT1VULiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICBzcmM7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRpbWVvdXQgc291cmNlLCBzZWUgQHJlZiBCTEVfR0FUVF9USU1FT1VUX1NPVVJDRVMuICovDQorfSBibGVfZ2F0dGNfZXZ0X3RpbWVvdXRfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfQ01EX1RYX0NPTVBMRVRFLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICAgICAgICBjb3VudDsgICAgICAgICAgICAvKio8IE51bWJlciBvZiB3cml0ZSB3aXRob3V0IHJlc3BvbnNlIHRyYW5zbWlzc2lvbnMgY29tcGxldGVkLiAqLw0KK30gYmxlX2dhdHRjX2V2dF93cml0ZV9jbWRfdHhfY29tcGxldGVfdDsNCisNCisvKipAYnJpZWYgR0FUVEMgZXZlbnQgc3RydWN0dXJlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICBjb25uX2hhbmRsZTsgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIEhhbmRsZSBvbiB3aGljaCBldmVudCBvY2N1cnJlZC4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgZ2F0dF9zdGF0dXM7ICAgICAgICAgICAgICAgIC8qKjwgR0FUVCBzdGF0dXMgY29kZSBmb3IgdGhlIG9wZXJhdGlvbiwgc2VlIEByZWYgQkxFX0dBVFRfU1RBVFVTX0NPREVTLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICBlcnJvcl9oYW5kbGU7ICAgICAgICAgICAgICAgLyoqPCBJbiBjYXNlIG9mIGVycm9yOiBUaGUgaGFuZGxlIGNhdXNpbmcgdGhlIGVycm9yLiBJbiBhbGwgb3RoZXIgY2FzZXMgQHJlZiBCTEVfR0FUVF9IQU5ETEVfSU5WQUxJRC4gKi8NCisgIHVuaW9uDQorICB7DQorICAgIGJsZV9nYXR0Y19ldnRfcHJpbV9zcnZjX2Rpc2NfcnNwX3QgICAgICAgICAgcHJpbV9zcnZjX2Rpc2NfcnNwOyAgICAgICAgIC8qKjwgUHJpbWFyeSBTZXJ2aWNlIERpc2NvdmVyeSBSZXNwb25zZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X3JlbF9kaXNjX3JzcF90ICAgICAgICAgICAgICAgIHJlbF9kaXNjX3JzcDsgICAgICAgICAgICAgICAvKio8IFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9jaGFyX2Rpc2NfcnNwX3QgICAgICAgICAgICAgICBjaGFyX2Rpc2NfcnNwOyAgICAgICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBEaXNjb3ZlcnkgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9kZXNjX2Rpc2NfcnNwX3QgICAgICAgICAgICAgICBkZXNjX2Rpc2NfcnNwOyAgICAgICAgICAgICAgLyoqPCBEZXNjcmlwdG9yIERpc2NvdmVyeSBSZXNwb25zZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X2NoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3BfdCAgIGNoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3A7ICAvKio8IENoYXJhY3RlcmlzdGljIFZhbHVlIFJlYWQgYnkgVVVJRCBSZXNwb25zZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X3JlYWRfcnNwX3QgICAgICAgICAgICAgICAgICAgIHJlYWRfcnNwOyAgICAgICAgICAgICAgICAgICAvKio8IFJlYWQgUmVzcG9uc2UgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbHNfcmVhZF9yc3BfdCAgICAgICAgICBjaGFyX3ZhbHNfcmVhZF9yc3A7ICAgICAgICAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBWYWx1ZXMgUmVhZCBSZXNwb25zZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X3dyaXRlX3JzcF90ICAgICAgICAgICAgICAgICAgIHdyaXRlX3JzcDsgICAgICAgICAgICAgICAgICAvKio8IFdyaXRlIFJlc3BvbnNlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfaHZ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgaHZ4OyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbi9JbmRpY2F0aW9uIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfZXhjaGFuZ2VfbXR1X3JzcF90ICAgICAgICAgICAgZXhjaGFuZ2VfbXR1X3JzcDsgICAgICAgICAgIC8qKjwgRXhjaGFuZ2UgTVRVIFJlc3BvbnNlIEV2ZW50IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0Y19ldnRfdGltZW91dF90ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZW91dCBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dGNfZXZ0X2F0dHJfaW5mb19kaXNjX3JzcF90ICAgICAgICAgIGF0dHJfaW5mb19kaXNjX3JzcDsgICAgICAgICAvKio8IEF0dHJpYnV0ZSBJbmZvcm1hdGlvbiBEaXNjb3ZlcnkgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRjX2V2dF93cml0ZV9jbWRfdHhfY29tcGxldGVfdCAgICAgICB3cml0ZV9jbWRfdHhfY29tcGxldGU7ICAgICAgLyoqPCBXcml0ZSB3aXRob3V0IFJlc3BvbnNlIHRyYW5zbWlzc2lvbiBjb21wbGV0ZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgfSBwYXJhbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IFBhcmFtZXRlcnMuIEBub3RlIE9ubHkgdmFsaWQgaWYgQHJlZiBnYXR0X3N0YXR1cyA9PSBAcmVmIEJMRV9HQVRUX1NUQVRVU19TVUNDRVNTLiAqLw0KK30gYmxlX2dhdHRjX2V2dF90Ow0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBCTEVfR0FUVENfRlVOQ1RJT05TIEZ1bmN0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEluaXRpYXRlIG9yIGNvbnRpbnVlIGEgR0FUVCBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5IHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIG9yIHJlc3VtZXMgYSBQcmltYXJ5IFNlcnZpY2UgZGlzY292ZXJ5IHByb2NlZHVyZSwgc3RhcnRpbmcgZnJvbSB0aGUgc3VwcGxpZWQgaGFuZGxlLg0KKyAqICAgICAgICAgIElmIHRoZSBsYXN0IHNlcnZpY2UgaGFzIG5vdCBiZWVuIHJlYWNoZWQsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBhbiB1cGRhdGVkIHN0YXJ0IGhhbmRsZSB2YWx1ZSB0byBjb250aW51ZSB0aGUgc2VhcmNoLg0KKyAqDQorICogQG5vdGUgSWYgYW55IG9mIHRoZSBkaXNjb3ZlcmVkIHNlcnZpY2VzIGhhdmUgMTI4LWJpdCBVVUlEcyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHRhYmxlIHByb3ZpZGVkIHRvIGJsZV92c191dWlkc19hc3NpZ24sIGEgVVVJRCBzdHJ1Y3R1cmUgd2l0aA0KKyAqICAgICAgIHR5cGUgQHJlZiBCTEVfVVVJRF9UWVBFX1VOS05PV04gd2lsbCBiZSByZWNlaXZlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBldmVudC4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX1BSSU1fU1JWQ19ESVNDX1JTUH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX1BSSU1fU1JWQ19ESVNDX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIHN0YXJ0X2hhbmRsZSBIYW5kbGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uDQorICogQHBhcmFtW2luXSBwX3NydmNfdXVpZCBQb2ludGVyIHRvIHRoZSBzZXJ2aWNlIFVVSUQgdG8gYmUgZm91bmQuIElmIGl0IGlzIE5VTEwsIGFsbCBwcmltYXJ5IHNlcnZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgb3IgcmVzdW1lZCB0aGUgUHJpbWFyeSBTZXJ2aWNlIERpc2NvdmVyeSBwcm9jZWR1cmUuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIENsaWVudCBwcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRDX1BSSU1BUllfU0VSVklDRVNfRElTQ09WRVIsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfcHJpbWFyeV9zZXJ2aWNlc19kaXNjb3Zlcih1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDE2X3Qgc3RhcnRfaGFuZGxlLCBibGVfdXVpZF90IGNvbnN0ICpwX3NydmNfdXVpZCkpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBvciBjb250aW51ZSBhIEdBVFQgUmVsYXRpb25zaGlwIERpc2NvdmVyeSBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBvciByZXN1bWVzIHRoZSBGaW5kIEluY2x1ZGVkIFNlcnZpY2VzIHN1Yi1wcm9jZWR1cmUuIElmIHRoZSBsYXN0IGluY2x1ZGVkIHNlcnZpY2UgaGFzIG5vdCBiZWVuIHJlYWNoZWQsDQorICogICAgICAgICAgdGhpcyBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIGFuIHVwZGF0ZWQgaGFuZGxlIHJhbmdlIHRvIGNvbnRpbnVlIHRoZSBzZWFyY2guDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9SRUxfRElTQ19SU1B9DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19SRUxfRElTQ19NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBwX2hhbmRsZV9yYW5nZSBBIHBvaW50ZXIgdG8gdGhlIHJhbmdlIG9mIGhhbmRsZXMgb2YgdGhlIFNlcnZpY2UgdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RhcnRlZCBvciByZXN1bWVkIHRoZSBSZWxhdGlvbnNoaXAgRGlzY292ZXJ5IHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIENsaWVudCBwcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRDX1JFTEFUSU9OU0hJUFNfRElTQ09WRVIsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfcmVsYXRpb25zaGlwc19kaXNjb3Zlcih1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhdHRjX2hhbmRsZV9yYW5nZV90IGNvbnN0ICpwX2hhbmRsZV9yYW5nZSkpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBvciBjb250aW51ZSBhIEdBVFQgQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5IHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIG9yIHJlc3VtZXMgYSBDaGFyYWN0ZXJpc3RpYyBkaXNjb3ZlcnkgcHJvY2VkdXJlLiBJZiB0aGUgbGFzdCBDaGFyYWN0ZXJpc3RpYyBoYXMgbm90IGJlZW4gcmVhY2hlZCwNCisgKiAgICAgICAgICB0aGlzIG11c3QgYmUgY2FsbGVkIGFnYWluIHdpdGggYW4gdXBkYXRlZCBoYW5kbGUgcmFuZ2UgdG8gY29udGludWUgdGhlIGRpc2NvdmVyeS4NCisgKg0KKyAqIEBub3RlIElmIGFueSBvZiB0aGUgZGlzY292ZXJlZCBjaGFyYWN0ZXJpc3RpY3MgaGF2ZSAxMjgtYml0IFVVSURzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgdGFibGUgcHJvdmlkZWQgdG8gYmxlX3ZzX3V1aWRzX2Fzc2lnbiwgYSBVVUlEIHN0cnVjdHVyZSB3aXRoDQorICogICAgICAgdHlwZSBAcmVmIEJMRV9VVUlEX1RZUEVfVU5LTk9XTiB3aWxsIGJlIHJlY2VpdmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50Lg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfQ0hBUl9ESVNDX1JTUH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX0NIQVJfRElTQ19NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBwX2hhbmRsZV9yYW5nZSBBIHBvaW50ZXIgdG8gdGhlIHJhbmdlIG9mIGhhbmRsZXMgb2YgdGhlIFNlcnZpY2UgdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RhcnRlZCBvciByZXN1bWVkIHRoZSBDaGFyYWN0ZXJpc3RpYyBEaXNjb3ZlcnkgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19DSEFSQUNURVJJU1RJQ1NfRElTQ09WRVIsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfY2hhcmFjdGVyaXN0aWNzX2Rpc2NvdmVyKHVpbnQxNl90IGNvbm5faGFuZGxlLCBibGVfZ2F0dGNfaGFuZGxlX3JhbmdlX3QgY29uc3QgKnBfaGFuZGxlX3JhbmdlKSk7DQorDQorDQorLyoqQGJyaWVmIEluaXRpYXRlIG9yIGNvbnRpbnVlIGEgR0FUVCBDaGFyYWN0ZXJpc3RpYyBEZXNjcmlwdG9yIERpc2NvdmVyeSBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBvciByZXN1bWVzIGEgQ2hhcmFjdGVyaXN0aWMgRGVzY3JpcHRvciBkaXNjb3ZlcnkgcHJvY2VkdXJlLiBJZiB0aGUgbGFzdCBEZXNjcmlwdG9yIGhhcyBub3QgYmVlbiByZWFjaGVkLA0KKyAqICAgICAgICAgIHRoaXMgbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBhbiB1cGRhdGVkIGhhbmRsZSByYW5nZSB0byBjb250aW51ZSB0aGUgZGlzY292ZXJ5Lg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfREVTQ19ESVNDX1JTUH0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX0RFU0NfRElTQ19NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBwX2hhbmRsZV9yYW5nZSBBIHBvaW50ZXIgdG8gdGhlIHJhbmdlIG9mIGhhbmRsZXMgb2YgdGhlIENoYXJhY3RlcmlzdGljIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgb3IgcmVzdW1lZCB0aGUgRGVzY3JpcHRvciBEaXNjb3ZlcnkgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19ERVNDUklQVE9SU19ESVNDT1ZFUiwgdWludDMyX3QsIHNkX2JsZV9nYXR0Y19kZXNjcmlwdG9yc19kaXNjb3Zlcih1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhdHRjX2hhbmRsZV9yYW5nZV90IGNvbnN0ICpwX2hhbmRsZV9yYW5nZSkpOw0KKw0KKw0KKy8qKkBicmllZiBJbml0aWF0ZSBvciBjb250aW51ZSBhIEdBVFQgUmVhZCB1c2luZyBDaGFyYWN0ZXJpc3RpYyBVVUlEIHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIG9yIHJlc3VtZXMgYSBSZWFkIHVzaW5nIENoYXJhY3RlcmlzdGljIFVVSUQgcHJvY2VkdXJlLiBJZiB0aGUgbGFzdCBDaGFyYWN0ZXJpc3RpYyBoYXMgbm90IGJlZW4gcmVhY2hlZCwNCisgKiAgICAgICAgICB0aGlzIG11c3QgYmUgY2FsbGVkIGFnYWluIHdpdGggYW4gdXBkYXRlZCBoYW5kbGUgcmFuZ2UgdG8gY29udGludWUgdGhlIGRpc2NvdmVyeS4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX0NIQVJfVkFMX0JZX1VVSURfUkVBRF9SU1B9DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19SRUFEX1VVSURfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gcF91dWlkIFBvaW50ZXIgdG8gYSBDaGFyYWN0ZXJpc3RpYyB2YWx1ZSBVVUlEIHRvIHJlYWQuDQorICogQHBhcmFtW2luXSBwX2hhbmRsZV9yYW5nZSBBIHBvaW50ZXIgdG8gdGhlIHJhbmdlIG9mIGhhbmRsZXMgdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RhcnRlZCBvciByZXN1bWVkIHRoZSBSZWFkIHVzaW5nIENoYXJhY3RlcmlzdGljIFVVSUQgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19DSEFSX1ZBTFVFX0JZX1VVSURfUkVBRCwgdWludDMyX3QsIHNkX2JsZV9nYXR0Y19jaGFyX3ZhbHVlX2J5X3V1aWRfcmVhZCh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX3V1aWRfdCBjb25zdCAqcF91dWlkLCBibGVfZ2F0dGNfaGFuZGxlX3JhbmdlX3QgY29uc3QgKnBfaGFuZGxlX3JhbmdlKSk7DQorDQorDQorLyoqQGJyaWVmIEluaXRpYXRlIG9yIGNvbnRpbnVlIGEgR0FUVCBSZWFkIChMb25nKSBDaGFyYWN0ZXJpc3RpYyBvciBEZXNjcmlwdG9yIHByb2NlZHVyZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaW5pdGlhdGVzIG9yIHJlc3VtZXMgYSBHQVRUIFJlYWQgKExvbmcpIENoYXJhY3RlcmlzdGljIG9yIERlc2NyaXB0b3IgcHJvY2VkdXJlLiBJZiB0aGUgQ2hhcmFjdGVyaXN0aWMgb3IgRGVzY3JpcHRvcg0KKyAqICAgICAgICAgIHRvIGJlIHJlYWQgaXMgbG9uZ2VyIHRoYW4gQVRUX01UVSAtIDEsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBhcHByb3ByaWF0ZSBvZmZzZXQgdG8gcmVhZCB0aGUNCisgKiAgICAgICAgICBjb21wbGV0ZSB2YWx1ZS4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX1JFQURfUlNQfQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfVkFMVUVfUkVBRF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBoYW5kbGUgVGhlIGhhbmRsZSBvZiB0aGUgYXR0cmlidXRlIHRvIGJlIHJlYWQuDQorICogQHBhcmFtW2luXSBvZmZzZXQgT2Zmc2V0IGludG8gdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBiZSByZWFkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzdGFydGVkIG9yIHJlc3VtZWQgdGhlIFJlYWQgKExvbmcpIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19SRUFELCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX3JlYWQodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IGhhbmRsZSwgdWludDE2X3Qgb2Zmc2V0KSk7DQorDQorDQorLyoqQGJyaWVmIEluaXRpYXRlIGEgR0FUVCBSZWFkIE11bHRpcGxlIENoYXJhY3RlcmlzdGljIFZhbHVlcyBwcm9jZWR1cmUuDQorICoNCisgKiBAZGV0YWlscyBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBhIEdBVFQgUmVhZCBNdWx0aXBsZSBDaGFyYWN0ZXJpc3RpYyBWYWx1ZXMgcHJvY2VkdXJlLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxTX1JFQURfUlNQfQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfUkVBRF9NVUxUX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSBUaGUgY29ubmVjdGlvbiBoYW5kbGUgaWRlbnRpZnlpbmcgdGhlIGNvbm5lY3Rpb24gdG8gcGVyZm9ybSB0aGlzIHByb2NlZHVyZSBvbi4NCisgKiBAcGFyYW1baW5dIHBfaGFuZGxlcyBBIHBvaW50ZXIgdG8gdGhlIGhhbmRsZShzKSBvZiB0aGUgYXR0cmlidXRlKHMpIHRvIGJlIHJlYWQuDQorICogQHBhcmFtW2luXSBoYW5kbGVfY291bnQgVGhlIG51bWJlciBvZiBoYW5kbGVzIGluIHBfaGFuZGxlcy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RhcnRlZCB0aGUgUmVhZCBNdWx0aXBsZSBDaGFyYWN0ZXJpc3RpYyBWYWx1ZXMgcHJvY2VkdXJlLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBDbGllbnQgcHJvY2VkdXJlIGFscmVhZHkgaW4gcHJvZ3Jlc3MuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19DSEFSX1ZBTFVFU19SRUFELCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX2NoYXJfdmFsdWVzX3JlYWQodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IGNvbnN0ICpwX2hhbmRsZXMsIHVpbnQxNl90IGhhbmRsZV9jb3VudCkpOw0KKw0KKw0KKy8qKkBicmllZiBQZXJmb3JtIGEgV3JpdGUgKENoYXJhY3RlcmlzdGljIFZhbHVlIG9yIERlc2NyaXB0b3IsIHdpdGggb3Igd2l0aG91dCByZXNwb25zZSwgc2lnbmVkIG9yIG5vdCwgbG9uZyBvciByZWxpYWJsZSkgcHJvY2VkdXJlLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBjYW4gcGVyZm9ybSBhbGwgd3JpdGUgcHJvY2VkdXJlcyBkZXNjcmliZWQgaW4gR0FUVC4NCisgKg0KKyAqIEBub3RlICAgIE9ubHkgb25lIHdyaXRlIHdpdGggcmVzcG9uc2UgcHJvY2VkdXJlIGNhbiBiZSBvbmdvaW5nIHBlciBjb25uZWN0aW9uIGF0IGEgdGltZS4NCisgKiAgICAgICAgICBJZiB0aGUgYXBwbGljYXRpb24gdHJpZXMgdG8gd3JpdGUgd2l0aCByZXNwb25zZSB3aGlsZSBhbm90aGVyIHdyaXRlIHdpdGggcmVzcG9uc2UgcHJvY2VkdXJlIGlzIG9uZ29pbmcsDQorICogICAgICAgICAgdGhlIGZ1bmN0aW9uIGNhbGwgd2lsbCByZXR1cm4gQHJlZiBOUkZfRVJST1JfQlVTWS4NCisgKiAgICAgICAgICBBIEByZWYgQkxFX0dBVFRDX0VWVF9XUklURV9SU1AgZXZlbnQgd2lsbCBiZSBpc3N1ZWQgYXMgc29vbiBhcyB0aGUgd3JpdGUgcmVzcG9uc2UgYXJyaXZlcyBmcm9tIHRoZSBwZWVyLg0KKyAqDQorICogQG5vdGUgICAgVGhlIG51bWJlciBvZiBXcml0ZSB3aXRob3V0IFJlc3BvbnNlIHRoYXQgY2FuIGJlIHF1ZXVlZCBpcyBjb25maWd1cmVkIGJ5IEByZWYgYmxlX2dhdHRjX2Nvbm5fY2ZnX3Q6OndyaXRlX2NtZF90eF9xdWV1ZV9zaXplDQorICogICAgICAgICAgV2hlbiB0aGUgcXVldWUgaXMgZnVsbCwgdGhlIGZ1bmN0aW9uIGNhbGwgd2lsbCByZXR1cm4gQHJlZiBOUkZfRVJST1JfUkVTT1VSQ0VTLg0KKyAqICAgICAgICAgIEEgQHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSBldmVudCB3aWxsIGJlIGlzc3VlZCBhcyBzb29uIGFzIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2UgaXMgY29tcGxldGUuDQorICoNCisgKiBAbm90ZSAgICBUaGUgYXBwbGljYXRpb24gY2FuIGtlZXAgdHJhY2sgb2YgdGhlIGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50IGZvciB3cml0ZXMgd2l0aG91dCByZXNwb25zZXMgYnkgZm9sbG93aW5nIHRoZSBwcm9jZWR1cmUgYmVsb3c6DQorICogICAgICAgICAgLSBTdG9yZSBpbml0aWFsIHF1ZXVlIGVsZW1lbnQgY291bnQgaW4gYSB2YXJpYWJsZS4NCisgKiAgICAgICAgICAtIERlY3JlbWVudCB0aGUgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBxdWV1ZSBlbGVtZW50IGNvdW50LCBieSBvbmUgd2hlbiBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEByZWYgTlJGX1NVQ0NFU1MuDQorICogICAgICAgICAgLSBJbmNyZW1lbnQgdGhlIHZhcmlhYmxlLCB3aGljaCBzdG9yZXMgdGhlIGN1cnJlbnQgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQsIGJ5IHRoZSBjb3VudCB2YXJpYWJsZSBpbiBAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfQ01EX1RYX0NPTVBMRVRFIGV2ZW50Lg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfQ01EX1RYX0NPTVBMRVRFLCBXcml0ZSB3aXRob3V0IHJlc3BvbnNlIHRyYW5zbWlzc2lvbiBjb21wbGV0ZS59DQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9XUklURV9SU1AsIFdyaXRlIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIufQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfVkFMVUVfV1JJVEVfV0lUSE9VVF9SRVNQX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUQ19WQUxVRV9XUklURV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfVkFMVUVfTE9OR19XUklURV9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfVkFMVUVfUkVMSUFCTEVfV1JJVEVfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gcF93cml0ZV9wYXJhbXMgQSBwb2ludGVyIHRvIGEgd3JpdGUgcGFyYW1ldGVycyBzdHJ1Y3R1cmUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgdGhlIFdyaXRlIHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgSW52YWxpZCBkYXRhIHNpemUocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIEZvciB3cml0ZSB3aXRoIHJlc3BvbnNlLCBwcm9jZWR1cmUgYWxyZWFkeSBpbiBwcm9ncmVzcy4gV2FpdCBmb3IgYSBAcmVmIEJMRV9HQVRUQ19FVlRfV1JJVEVfUlNQIGV2ZW50IGFuZCByZXRyeS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1JFU09VUkNFUyBUb28gbWFueSB3cml0ZXMgd2l0aG91dCByZXNwb25zZXMgcXVldWVkLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhaXQgZm9yIGEgQHJlZiBCTEVfR0FUVENfRVZUX1dSSVRFX0NNRF9UWF9DT01QTEVURSBldmVudCBhbmQgcmV0cnkuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUQ19XUklURSwgdWludDMyX3QsIHNkX2JsZV9nYXR0Y193cml0ZSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhdHRjX3dyaXRlX3BhcmFtc190IGNvbnN0ICpwX3dyaXRlX3BhcmFtcykpOw0KKw0KKw0KKy8qKkBicmllZiBTZW5kIGEgSGFuZGxlIFZhbHVlIENvbmZpcm1hdGlvbiB0byB0aGUgR0FUVCBTZXJ2ZXIuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRDX0hWSV9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlkZW50aWZ5aW5nIHRoZSBjb25uZWN0aW9uIHRvIHBlcmZvcm0gdGhpcyBwcm9jZWR1cmUgb24uDQorICogQHBhcmFtW2luXSBoYW5kbGUgVGhlIGhhbmRsZSBvZiB0aGUgYXR0cmlidXRlIGluIHRoZSBpbmRpY2F0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBxdWV1ZWQgdGhlIEhhbmRsZSBWYWx1ZSBDb25maXJtYXRpb24gZm9yIHRyYW5zbWlzc2lvbi4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBDb25uZWN0aW9uIFN0YXRlIG9yIG5vIEluZGljYXRpb24gcGVuZGluZyB0byBiZSBjb25maXJtZWQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0FUVFJfSEFORExFIEludmFsaWQgYXR0cmlidXRlIGhhbmRsZS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRDX0hWX0NPTkZJUk0sIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfaHZfY29uZmlybSh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDE2X3QgaGFuZGxlKSk7DQorDQorLyoqQGJyaWVmIERpc2NvdmVycyBpbmZvcm1hdGlvbiBhYm91dCBhIHJhbmdlIG9mIGF0dHJpYnV0ZXMgb24gYSBHQVRUIHNlcnZlci4NCisgKg0KKyAqIEBldmVudHMNCisgKiBAZXZlbnR7QHJlZiBCTEVfR0FUVENfRVZUX0FUVFJfSU5GT19ESVNDX1JTUCwgR2VuZXJhdGVkIHdoZW4gaW5mb3JtYXRpb24gYWJvdXQgYSByYW5nZSBvZiBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlY2VpdmVkLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICAgIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gcF9oYW5kbGVfcmFuZ2UgVGhlIHJhbmdlIG9mIGhhbmRsZXMgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbiBhYm91dC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc3RhcnRlZCBhbiBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gZGlzY292ZXJ5IHByb2NlZHVyZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBjb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBjb25uZWN0aW9uIHN0YXRlDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfQVRUUl9JTkZPX0RJU0NPVkVSLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRjX2F0dHJfaW5mb19kaXNjb3Zlcih1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhdHRjX2hhbmRsZV9yYW5nZV90IGNvbnN0ICogcF9oYW5kbGVfcmFuZ2UpKTsNCisNCisvKipAYnJpZWYgU3RhcnQgYW4gQVRUX01UVSBleGNoYW5nZSBieSBzZW5kaW5nIGFuIEV4Y2hhbmdlIE1UVSBSZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuDQorICoNCisgKiBAZGV0YWlscyBUaGUgU29mdERldmljZSBzZXRzIEFUVF9NVFUgdG8gdGhlIG1pbmltdW0gb2Y6DQorICogICAgICAgICAgLSBUaGUgQ2xpZW50IFJYIE1UVSB2YWx1ZSwgYW5kDQorICogICAgICAgICAgLSBUaGUgU2VydmVyIFJYIE1UVSB2YWx1ZSBmcm9tIEByZWYgQkxFX0dBVFRDX0VWVF9FWENIQU5HRV9NVFVfUlNQLg0KKyAqDQorICogICAgICAgICAgSG93ZXZlciwgdGhlIFNvZnREZXZpY2UgbmV2ZXIgc2V0cyBBVFRfTVRVIGxvd2VyIHRoYW4gQHJlZiBCTEVfR0FUVF9BVFRfTVRVX0RFRkFVTFQuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRDX0VWVF9FWENIQU5HRV9NVFVfUlNQfQ0KKyAqIEBlbmRldmVudHMNCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVENfTVRVX0VYQ0hBTkdFfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICAgIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gY2xpZW50X3J4X210dSAgQ2xpZW50IFJYIE1UVSBzaXplLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgbWluaW11bSB2YWx1ZSBpcyBAcmVmIEJMRV9HQVRUX0FUVF9NVFVfREVGQVVMVC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIG1heGltdW0gdmFsdWUgaXMgQHJlZiBibGVfZ2F0dF9jb25uX2NmZ190OjphdHRfbXR1IGluIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgdGhpcyBjb25uZWN0aW9uLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgdmFsdWUgbXVzdCBiZSBlcXVhbCB0byBTZXJ2ZXIgUlggTVRVIHNpemUgZ2l2ZW4gaW4gQHJlZiBzZF9ibGVfZ2F0dHNfZXhjaGFuZ2VfbXR1X3JlcGx5DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFuIEFUVF9NVFUgZXhjaGFuZ2UgaGFzIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgc2VudCByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgY29ubmVjdGlvbiBoYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgY29ubmVjdGlvbiBzdGF0ZSBvciBhbiBBVFRfTVRVIGV4Y2hhbmdlIHdhcyBhbHJlYWR5IHJlcXVlc3RlZCBvbmNlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIENsaWVudCBSWCBNVFUgc2l6ZSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgQ2xpZW50IHByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVENfRVhDSEFOR0VfTVRVX1JFUVVFU1QsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dGNfZXhjaGFuZ2VfbXR1X3JlcXVlc3QodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IGNsaWVudF9yeF9tdHUpKTsNCisNCisvKipAYnJpZWYgSXRlcmF0ZSB0aHJvdWdoIEhhbmRsZS1WYWx1ZShzKSBsaXN0IGluIEByZWYgQkxFX0dBVFRDX0VWVF9DSEFSX1ZBTF9CWV9VVUlEX1JFQURfUlNQIGV2ZW50Lg0KKyAqDQorICogQHBhcmFtW2luXSBwX2dhdHRjX2V2dCAgUG9pbnRlciB0byBldmVudCBidWZmZXIgY29udGFpbmluZyBAcmVmIEJMRV9HQVRUQ19FVlRfQ0hBUl9WQUxfQllfVVVJRF9SRUFEX1JTUCBldmVudC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBJZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGRpZmZlcmVudCBldmVudCwgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLg0KKyAqIEBwYXJhbVtpbixvdXRdIHBfaXRlciAgIEl0ZXJhdG9yLCBwb2ludHMgdG8gQHJlZiBibGVfZ2F0dGNfaGFuZGxlX3ZhbHVlX3Qgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IEhhbmRsZS1WYWx1ZSBwYWlyIGluIGVhY2ggaXRlcmF0aW9uLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBvdGhlciB0aGFuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBOUkZfU1VDQ0VTUywgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIFRvIHN0YXJ0IGl0ZXJhdGlvbiwgaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHRvIHplcm8uDQorICogICAgICAgICAgICAgICAgICAgICAgICAgLSBUbyBjb250aW51ZSwgcGFzcyB0aGUgdmFsdWUgZnJvbSBwcmV2aW91cyBpdGVyYXRpb24uDQorICoNCisgKiBcY29kZQ0KKyAqIGJsZV9nYXR0Y19oYW5kbGVfdmFsdWVfdCBpdGVyOw0KKyAqIG1lbXNldCgmaXRlciwgMCwgc2l6ZW9mKGJsZV9nYXR0Y19oYW5kbGVfdmFsdWVfdCkpOw0KKyAqIHdoaWxlIChzZF9ibGVfZ2F0dGNfZXZ0X2NoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3BfaXRlcigmYmxlX2V2dC5ldnQuZ2F0dGNfZXZ0LCAmaXRlcikgPT0gTlJGX1NVQ0NFU1MpDQorICogew0KKyAqICAgYXBwX2hhbmRsZSA9IGl0ZXIuaGFuZGxlOw0KKyAqICAgbWVtY3B5KGFwcF92YWx1ZSwgaXRlci5wX3ZhbHVlLCBibGVfZXZ0LmV2dC5nYXR0Y19ldnQucGFyYW1zLmNoYXJfdmFsX2J5X3V1aWRfcmVhZF9yc3AudmFsdWVfbGVuKTsNCisgKiB9DQorICogXGVuZGNvZGUNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBuZXh0IEhhbmRsZS1WYWx1ZSBwYWlyLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIE5vIG1vcmUgSGFuZGxlLVZhbHVlIHBhaXJzIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfYmxlX2dhdHRjX2V2dF9jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwX2l0ZXIoYmxlX2dhdHRjX2V2dF90ICpwX2dhdHRjX2V2dCwgYmxlX2dhdHRjX2hhbmRsZV92YWx1ZV90ICpwX2l0ZXIpOw0KKw0KKy8qKiBAfSAqLw0KKw0KKyNpZm5kZWYgU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX2JsZV9nYXR0Y19ldnRfY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcF9pdGVyKGJsZV9nYXR0Y19ldnRfdCAqcF9nYXR0Y19ldnQsIGJsZV9nYXR0Y19oYW5kbGVfdmFsdWVfdCAqcF9pdGVyKQ0KK3sNCisgIHVpbnQzMl90IHZhbHVlX2xlbiA9IHBfZ2F0dGNfZXZ0LT5wYXJhbXMuY2hhcl92YWxfYnlfdXVpZF9yZWFkX3JzcC52YWx1ZV9sZW47DQorICB1aW50OF90ICpwX2ZpcnN0ID0gcF9nYXR0Y19ldnQtPnBhcmFtcy5jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwLmhhbmRsZV92YWx1ZTsNCisgIHVpbnQ4X3QgKnBfbmV4dCA9IHBfaXRlci0+cF92YWx1ZSA/IHBfaXRlci0+cF92YWx1ZSArIHZhbHVlX2xlbiA6IHBfZmlyc3Q7DQorDQorICBpZiAoKHBfbmV4dCAtIHBfZmlyc3QpIC8gKHNpemVvZih1aW50MTZfdCkgKyB2YWx1ZV9sZW4pIDwgcF9nYXR0Y19ldnQtPnBhcmFtcy5jaGFyX3ZhbF9ieV91dWlkX3JlYWRfcnNwLmNvdW50KQ0KKyAgew0KKyAgICBwX2l0ZXItPmhhbmRsZSA9ICh1aW50MTZfdClwX25leHRbMV0gPDwgOCB8IHBfbmV4dFswXTsNCisgICAgcF9pdGVyLT5wX3ZhbHVlID0gcF9uZXh0ICsgc2l6ZW9mKHVpbnQxNl90KTsNCisgICAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX05PVF9GT1VORDsNCisgIH0NCit9DQorDQorI2VuZGlmIC8qIFNVUFBSRVNTX0lOTElORV9JTVBMRU1FTlRBVElPTiAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLyogQkxFX0dBVFRDX0hfXyAqLw0KKw0KKy8qKg0KKyAgQH0NCisqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX2dhdHRzLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Nzc2YmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9nYXR0cy5oCkBAIC0wLDAgKzEsODMyIEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0dBVFRTIEdlbmVyaWMgQXR0cmlidXRlIFByb2ZpbGUgKEdBVFQpIFNlcnZlcg0KKyAgQHsNCisgIEBicmllZiAgRGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBHQVRUUyBpbnRlcmZhY2UuDQorICovDQorDQorI2lmbmRlZiBCTEVfR0FUVFNfSF9fDQorI2RlZmluZSBCTEVfR0FUVFNfSF9fDQorDQorI2luY2x1ZGUgImJsZV90eXBlcy5oIg0KKyNpbmNsdWRlICJibGVfcmFuZ2VzLmgiDQorI2luY2x1ZGUgImJsZV9sMmNhcC5oIg0KKyNpbmNsdWRlICJibGVfZ2FwLmgiDQorI2luY2x1ZGUgImJsZV9nYXR0LmgiDQorI2luY2x1ZGUgIm5yZl9zdmMuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRTX0VOVU1FUkFUSU9OUyBFbnVtZXJhdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBHQVRUUyBBUEkgU1ZDIG51bWJlcnMuDQorICovDQorZW51bSBCTEVfR0FUVFNfU1ZDUw0KK3sNCisgIFNEX0JMRV9HQVRUU19TRVJWSUNFX0FERCA9IEJMRV9HQVRUU19TVkNfQkFTRSwgLyoqPCBBZGQgYSBzZXJ2aWNlLiAqLw0KKyAgU0RfQkxFX0dBVFRTX0lOQ0xVREVfQURELCAgICAgICAgICAgICAgICAgICAgICAvKio8IEFkZCBhbiBpbmNsdWRlZCBzZXJ2aWNlLiAqLw0KKyAgU0RfQkxFX0dBVFRTX0NIQVJBQ1RFUklTVElDX0FERCwgICAgICAgICAgICAgICAvKio8IEFkZCBhIGNoYXJhY3RlcmlzdGljLiAqLw0KKyAgU0RfQkxFX0dBVFRTX0RFU0NSSVBUT1JfQURELCAgICAgICAgICAgICAgICAgICAvKio8IEFkZCBhIGdlbmVyaWMgYXR0cmlidXRlLiAqLw0KKyAgU0RfQkxFX0dBVFRTX1ZBTFVFX1NFVCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBhbiBhdHRyaWJ1dGUgdmFsdWUuICovDQorICBTRF9CTEVfR0FUVFNfVkFMVUVfR0VULCAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2V0IGFuIGF0dHJpYnV0ZSB2YWx1ZS4gKi8NCisgIFNEX0JMRV9HQVRUU19IVlgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIG9yIEluZGljYXRpb24uICovDQorICBTRF9CTEVfR0FUVFNfU0VSVklDRV9DSEFOR0VELCAgICAgICAgICAgICAgICAgIC8qKjwgUGVyZm9ybSBhIFNlcnZpY2UgQ2hhbmdlZCBJbmRpY2F0aW9uIHRvIG9uZSBvciBtb3JlIHBlZXJzLiAqLw0KKyAgU0RfQkxFX0dBVFRTX1JXX0FVVEhPUklaRV9SRVBMWSwgICAgICAgICAgICAgICAvKio8IFJlcGx5IHRvIGFuIGF1dGhvcml6YXRpb24gcmVxdWVzdCBmb3IgYSByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbiBvbiBvbmUgb3IgbW9yZSBhdHRyaWJ1dGVzLiAqLw0KKyAgU0RfQkxFX0dBVFRTX1NZU19BVFRSX1NFVCwgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCB0aGUgcGVyc2lzdGVudCBzeXN0ZW0gYXR0cmlidXRlcyBmb3IgYSBjb25uZWN0aW9uLiAqLw0KKyAgU0RfQkxFX0dBVFRTX1NZU19BVFRSX0dFVCwgICAgICAgICAgICAgICAgICAgICAvKio8IFJldHJpZXZlIHRoZSBwZXJzaXN0ZW50IHN5c3RlbSBhdHRyaWJ1dGVzLiAqLw0KKyAgU0RfQkxFX0dBVFRTX0lOSVRJQUxfVVNFUl9IQU5ETEVfR0VULCAgICAgICAgICAvKio8IFJldHJpZXZlIHRoZSBmaXJzdCB2YWxpZCB1c2VyIGhhbmRsZS4gKi8NCisgIFNEX0JMRV9HQVRUU19BVFRSX0dFVCwgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZXRyaWV2ZSB0aGUgVVVJRCBhbmQvb3IgbWV0YWRhdGEgb2YgYW4gYXR0cmlidXRlLiAqLw0KKyAgU0RfQkxFX0dBVFRTX0VYQ0hBTkdFX01UVV9SRVBMWSAgICAgICAgICAgICAgICAvKio8IFJlcGx5IHRvIEV4Y2hhbmdlIE1UVSBSZXF1ZXN0LiAqLw0KK307DQorDQorLyoqDQorICogQGJyaWVmIEdBVFQgU2VydmVyIEV2ZW50IElEcy4NCisgKi8NCitlbnVtIEJMRV9HQVRUU19FVlRTDQorew0KKyAgQkxFX0dBVFRTX0VWVF9XUklURSA9IEJMRV9HQVRUU19FVlRfQkFTRSwgICAgICAgLyoqPCBXcml0ZSBvcGVyYXRpb24gcGVyZm9ybWVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dHNfZXZ0X3dyaXRlX3QuICAgICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCwgICAgICAgICAgICAgLyoqPCBSZWFkL1dyaXRlIEF1dGhvcml6YXRpb24gcmVxdWVzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBSZXBseSB3aXRoIEByZWYgc2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseS4gXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF9yd19hdXRob3JpemVfcmVxdWVzdF90LiAqLw0KKyAgQkxFX0dBVFRTX0VWVF9TWVNfQVRUUl9NSVNTSU5HLCAgICAgICAgICAgICAgICAgLyoqPCBBIHBlcnNpc3RlbnQgc3lzdGVtIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgcGVuZGluZy4gICAgICAgICAgICAgICAgICAgICBcbiBSZXNwb25kIHdpdGggQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfc2V0LiAgICAgXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF9zeXNfYXR0cl9taXNzaW5nX3QuICAgICAqLw0KKyAgQkxFX0dBVFRTX0VWVF9IVkMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIYW5kbGUgVmFsdWUgQ29uZmlybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dHNfZXZ0X2h2Y190LiAgICAgICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRTX0VWVF9TQ19DT05GSVJNLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXJ2aWNlIENoYW5nZWQgQ29uZmlybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBObyBhZGRpdGlvbmFsIGV2ZW50IHN0cnVjdHVyZSBhcHBsaWVzLiAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRTX0VWVF9FWENIQU5HRV9NVFVfUkVRVUVTVCwgICAgICAgICAgICAgLyoqPCBFeGNoYW5nZSBNVFUgUmVxdWVzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiBSZXBseSB3aXRoIEByZWYgc2RfYmxlX2dhdHRzX2V4Y2hhbmdlX210dV9yZXBseS4gXG4gU2VlIEByZWYgYmxlX2dhdHRzX2V2dF9leGNoYW5nZV9tdHVfcmVxdWVzdF90LiAqLw0KKyAgQkxFX0dBVFRTX0VWVF9USU1FT1VULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZWVyIGZhaWxlZCB0byByZXNwb25kIHRvIGFuIEFUVCByZXF1ZXN0IGluIHRpbWUuICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dHNfZXZ0X3RpbWVvdXRfdC4gICAgICAgICAgICAgICAqLw0KKyAgQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgLyoqPCBIYW5kbGUgVmFsdWUgTm90aWZpY2F0aW9uIHRyYW5zbWlzc2lvbiBjb21wbGV0ZS4gICAgICAgICAgICAgICAgICAgICBcbiBTZWUgQHJlZiBibGVfZ2F0dHNfZXZ0X2h2bl90eF9jb21wbGV0ZV90LiAgICAgICAqLw0KK307DQorDQorLyoqQGJyaWVmIEdBVFRTIENvbmZpZ3VyYXRpb24gSURzLg0KKyAqDQorICogSURzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYSBHQVRUUyBjb25maWd1cmF0aW9uLg0KKyAqLw0KK2VudW0gQkxFX0dBVFRTX0NGR1MNCit7DQorICBCTEVfR0FUVFNfQ0ZHX1NFUlZJQ0VfQ0hBTkdFRCA9IEJMRV9HQVRUU19DRkdfQkFTRSwgLyoqPCBTZXJ2aWNlIGNoYW5nZWQgY29uZmlndXJhdGlvbi4gKi8NCisgIEJMRV9HQVRUU19DRkdfQVRUUl9UQUJfU0laRSwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSB0YWJsZSBzaXplIGNvbmZpZ3VyYXRpb24uICovDQorfTsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRTX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfRVJST1JTX0dBVFRTIFNWQyByZXR1cm4gdmFsdWVzIHNwZWNpZmljIHRvIEdBVFRTDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9FUlJPUl9HQVRUU19JTlZBTElEX0FUVFJfVFlQRSAgIChOUkZfR0FUVFNfRVJSX0JBU0UgKyAweDAwMCkgLyoqPCBJbnZhbGlkIGF0dHJpYnV0ZSB0eXBlLiAqLw0KKyNkZWZpbmUgQkxFX0VSUk9SX0dBVFRTX1NZU19BVFRSX01JU1NJTkcgICAgKE5SRl9HQVRUU19FUlJfQkFTRSArIDB4MDAxKSAvKio8IFN5c3RlbSBBdHRyaWJ1dGVzIG1pc3NpbmcuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfQVRUUl9MRU5TX01BWCBNYXhpbXVtIGF0dHJpYnV0ZSBsZW5ndGhzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUU19GSVhfQVRUUl9MRU5fTUFYICg1MTApICAvKio8IE1heGltdW0gbGVuZ3RoIGZvciBmaXhlZCBsZW5ndGggQXR0cmlidXRlIFZhbHVlcy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19WQVJfQVRUUl9MRU5fTUFYICg1MTIpICAvKio8IE1heGltdW0gbGVuZ3RoIGZvciB2YXJpYWJsZSBsZW5ndGggQXR0cmlidXRlIFZhbHVlcy4gKi8NCisvKiogQH0gKi8NCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUU19TUlZDX1RZUEVTIEdBVFQgU2VydmVyIFNlcnZpY2UgVHlwZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1NSVkNfVFlQRV9JTlZBTElEICAgICAgICAgIDB4MDAgIC8qKjwgSW52YWxpZCBTZXJ2aWNlIFR5cGUuICovDQorI2RlZmluZSBCTEVfR0FUVFNfU1JWQ19UWVBFX1BSSU1BUlkgICAgICAgICAgMHgwMSAgLyoqPCBQcmltYXJ5IFNlcnZpY2UuICovDQorI2RlZmluZSBCTEVfR0FUVFNfU1JWQ19UWVBFX1NFQ09OREFSWSAgICAgICAgMHgwMiAgLyoqPCBTZWNvbmRhcnkgVHlwZS4gKi8NCisvKiogQH0gKi8NCisNCisNCisvKiogQGRlZmdyb3VwIEJMRV9HQVRUU19BVFRSX1RZUEVTIEdBVFQgU2VydmVyIEF0dHJpYnV0ZSBUeXBlcw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX0lOVkFMSUQgICAgICAgICAweDAwICAvKio8IEludmFsaWQgQXR0cmlidXRlIFR5cGUuICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX1BSSU1fU1JWQ19ERUNMICAweDAxICAvKio8IFByaW1hcnkgU2VydmljZSBEZWNsYXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVFRSX1RZUEVfU0VDX1NSVkNfREVDTCAgIDB4MDIgIC8qKjwgU2Vjb25kYXJ5IFNlcnZpY2UgRGVjbGFyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX0lOQ19ERUNMICAgICAgICAweDAzICAvKio8IEluY2x1ZGUgRGVjbGFyYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UWVBFX0NIQVJfREVDTCAgICAgICAweDA0ICAvKio8IENoYXJhY3RlcmlzdGljIERlY2xhcmF0aW9uLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FUVFJfVFlQRV9DSEFSX1ZBTCAgICAgICAgMHgwNSAgLyoqPCBDaGFyYWN0ZXJpc3RpYyBWYWx1ZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVFRSX1RZUEVfREVTQyAgICAgICAgICAgIDB4MDYgIC8qKjwgRGVzY3JpcHRvci4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVFRSX1RZUEVfT1RIRVIgICAgICAgICAgIDB4MDcgIC8qKjwgT3RoZXIsIG5vbi1HQVRUIHNwZWNpZmljIHR5cGUuICovDQorLyoqIEB9ICovDQorDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfT1BTIEdBVFQgU2VydmVyIE9wZXJhdGlvbnMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX09QX0lOVkFMSUQgICAgICAgICAgICAgICAgMHgwMCAgLyoqPCBJbnZhbGlkIE9wZXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19PUF9XUklURV9SRVEgICAgICAgICAgICAgIDB4MDEgIC8qKjwgV3JpdGUgUmVxdWVzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19PUF9XUklURV9DTUQgICAgICAgICAgICAgIDB4MDIgIC8qKjwgV3JpdGUgQ29tbWFuZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19PUF9TSUdOX1dSSVRFX0NNRCAgICAgICAgIDB4MDMgIC8qKjwgU2lnbmVkIFdyaXRlIENvbW1hbmQuICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BfUFJFUF9XUklURV9SRVEgICAgICAgICAweDA0ICAvKio8IFByZXBhcmUgV3JpdGUgUmVxdWVzdC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19PUF9FWEVDX1dSSVRFX1JFUV9DQU5DRUwgIDB4MDUgIC8qKjwgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0OiBDYW5jZWwgYWxsIHByZXBhcmVkIHdyaXRlcy4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19PUF9FWEVDX1dSSVRFX1JFUV9OT1cgICAgIDB4MDYgIC8qKjwgRXhlY3V0ZSBXcml0ZSBSZXF1ZXN0OiBJbW1lZGlhdGVseSBleGVjdXRlIGFsbCBwcmVwYXJlZCB3cml0ZXMuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfVkxPQ1MgR0FUVCBWYWx1ZSBMb2NhdGlvbnMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX1ZMT0NfSU5WQUxJRCAgICAgICAweDAwICAvKio8IEludmFsaWQgTG9jYXRpb24uICovDQorI2RlZmluZSBCTEVfR0FUVFNfVkxPQ19TVEFDSyAgICAgICAgIDB4MDEgIC8qKjwgQXR0cmlidXRlIFZhbHVlIGlzIGxvY2F0ZWQgaW4gc3RhY2sgbWVtb3J5LCBubyB1c2VyIG1lbW9yeSBpcyByZXF1aXJlZC4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19WTE9DX1VTRVIgICAgICAgICAgMHgwMiAgLyoqPCBBdHRyaWJ1dGUgVmFsdWUgaXMgbG9jYXRlZCBpbiB1c2VyIG1lbW9yeS4gVGhpcyByZXF1aXJlcyB0aGUgdXNlciB0byBtYWludGFpbiBhIHZhbGlkIGJ1ZmZlciB0aHJvdWdoIHRoZSBsaWZldGltZSBvZiB0aGUgYXR0cmlidXRlLCBzaW5jZSB0aGUgc3RhY2sNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHJlYWQgYW5kIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBtZW1vcnkgdXNpbmcgdGhlIHBvaW50ZXIgcHJvdmlkZWQgaW4gdGhlIEFQSXMuIFRoZXJlIGFyZSBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGZvciB0aGUgYnVmZmVyLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0FVVEhPUklaRV9UWVBFUyBHQVRUIFNlcnZlciBBdXRob3JpemF0aW9uIFR5cGVzDQorICogQHsgKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRV9JTlZBTElEICAgIDB4MDAgIC8qKjwgSW52YWxpZCBUeXBlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0FVVEhPUklaRV9UWVBFX1JFQUQgICAgICAgMHgwMSAgLyoqPCBBdXRob3JpemUgYSBSZWFkIE9wZXJhdGlvbi4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRV9XUklURSAgICAgIDB4MDIgIC8qKjwgQXV0aG9yaXplIGEgV3JpdGUgUmVxdWVzdCBPcGVyYXRpb24uICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR1MgU3lzdGVtIEF0dHJpYnV0ZSBGbGFncw0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR19TWVNfU1JWQ1MgKDEgPDwgMCkgIC8qKjwgUmVzdHJpY3Qgc3lzdGVtIGF0dHJpYnV0ZXMgdG8gc3lzdGVtIHNlcnZpY2VzIG9ubHkuICovDQorI2RlZmluZSBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR19VU1JfU1JWQ1MgKDEgPDwgMSkgIC8qKjwgUmVzdHJpY3Qgc3lzdGVtIGF0dHJpYnV0ZXMgdG8gdXNlciBzZXJ2aWNlcyBvbmx5LiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX1NFUlZJQ0VfQ0hBTkdFRCBTZXJ2aWNlIENoYW5nZWQgSW5jbHVzaW9uIFZhbHVlcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBCTEVfR0FUVFNfU0VSVklDRV9DSEFOR0VEX0RFRkFVTFQgICAoMSkgICAvKio8IERlZmF1bHQgaXMgdG8gaW5jbHVkZSB0aGUgU2VydmljZSBDaGFuZ2VkIGNoYXJhY3RlcmlzdGljIGluIHRoZSBBdHRyaWJ1dGUgVGFibGUuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfR0FUVFNfQVRUUl9UQUJfU0laRSBBdHRyaWJ1dGUgVGFibGUgc2l6ZQ0KKyAqIEB7DQorICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UQUJfU0laRV9NSU4gICAgICAgICAoMjQ4KSAgLyoqPCBNaW5pbXVtIEF0dHJpYnV0ZSBUYWJsZSBzaXplICovDQorI2RlZmluZSBCTEVfR0FUVFNfQVRUUl9UQUJfU0laRV9ERUZBVUxUICAgICAoMTQwOCkgLyoqPCBEZWZhdWx0IEF0dHJpYnV0ZSBUYWJsZSBzaXplLiAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX0dBVFRTX0RFRkFVTFRTIEdBVFQgU2VydmVyIGRlZmF1bHRzDQorICogQHsNCisgKi8NCisjZGVmaW5lIEJMRV9HQVRUU19IVk5fVFhfUVVFVUVfU0laRV9ERUZBVUxUICAxIC8qKjwgRGVmYXVsdCBudW1iZXIgb2YgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbnMgdGhhdCBjYW4gYmUgcXVldWVkIGZvciB0cmFuc21pc3Npb24uICovDQorLyoqIEB9ICovDQorDQorLyoqIEB9ICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEJMRV9HQVRUU19TVFJVQ1RVUkVTIFN0cnVjdHVyZXMNCisgKiBAeyAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBCTEUgR0FUVFMgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIHNldCB3aXRoIEByZWYgc2RfYmxlX2NmZ19zZXQuDQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICBodm5fdHhfcXVldWVfc2l6ZTsgLyoqPCBNaW5pbXVtIGd1YXJhbnRlZWQgbnVtYmVyIG9mIEhhbmRsZSBWYWx1ZSBOb3RpZmljYXRpb25zIHRoYXQgY2FuIGJlIHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEByZWYgQkxFX0dBVFRTX0hWTl9UWF9RVUVVRV9TSVpFX0RFRkFVTFQgKi8NCit9IGJsZV9nYXR0c19jb25uX2NmZ190Ow0KKw0KKy8qKkBicmllZiBBdHRyaWJ1dGUgbWV0YWRhdGEuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBibGVfZ2FwX2Nvbm5fc2VjX21vZGVfdCByZWFkX3Blcm07ICAgICAgIC8qKjwgUmVhZCBwZXJtaXNzaW9ucy4gKi8NCisgIGJsZV9nYXBfY29ubl9zZWNfbW9kZV90IHdyaXRlX3Blcm07ICAgICAgLyoqPCBXcml0ZSBwZXJtaXNzaW9ucy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHZsZW4gICAgICAgOjE7ICAgLyoqPCBWYXJpYWJsZSBsZW5ndGggYXR0cmlidXRlLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgdmxvYyAgICAgICA6MjsgICAvKio8IFZhbHVlIGxvY2F0aW9uLCBzZWUgQHJlZiBCTEVfR0FUVFNfVkxPQ1MuKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHJkX2F1dGggICAgOjE7ICAgLyoqPCBSZWFkIGF1dGhvcml6YXRpb24gYW5kIHZhbHVlIHdpbGwgYmUgcmVxdWVzdGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9uIGV2ZXJ5IHJlYWQgb3BlcmF0aW9uLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgd3JfYXV0aCAgICA6MTsgICAvKio8IFdyaXRlIGF1dGhvcml6YXRpb24gd2lsbCBiZSByZXF1ZXN0ZWQgZnJvbSB0aGUgYXBwbGljYXRpb24gb24gZXZlcnkgV3JpdGUgUmVxdWVzdCBvcGVyYXRpb24gKGJ1dCBub3QgV3JpdGUgQ29tbWFuZCkuICovDQorfSBibGVfZ2F0dHNfYXR0cl9tZF90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVRUIEF0dHJpYnV0ZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV91dWlkX3QgY29uc3QgICAgICAgICAgKnBfdXVpZDsgICAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgYXR0cmlidXRlIFVVSUQuICovDQorICBibGVfZ2F0dHNfYXR0cl9tZF90IGNvbnN0ICpwX2F0dHJfbWQ7ICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIGF0dHJpYnV0ZSBtZXRhZGF0YSBzdHJ1Y3R1cmUuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICBpbml0X2xlbjsgICAgICAvKio8IEluaXRpYWwgYXR0cmlidXRlIHZhbHVlIGxlbmd0aCBpbiBieXRlcy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgIGluaXRfb2ZmczsgICAgIC8qKjwgSW5pdGlhbCBhdHRyaWJ1dGUgdmFsdWUgb2Zmc2V0IGluIGJ5dGVzLiBJZiBkaWZmZXJlbnQgZnJvbSB6ZXJvLCB0aGUgZmlyc3QgaW5pdF9vZmZzIGJ5dGVzIG9mIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICBtYXhfbGVuOyAgICAgICAvKio8IE1heGltdW0gYXR0cmlidXRlIHZhbHVlIGxlbmd0aCBpbiBieXRlcywgc2VlIEByZWYgQkxFX0dBVFRTX0FUVFJfTEVOU19NQVggZm9yIG1heGltdW0gdmFsdWVzLiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAqcF92YWx1ZTsgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBhdHRyaWJ1dGUgZGF0YS4gUGxlYXNlIG5vdGUgdGhhdCBpZiB0aGUgQHJlZiBCTEVfR0FUVFNfVkxPQ19VU0VSIHZhbHVlIGxvY2F0aW9uIGlzIHNlbGVjdGVkIGluIHRoZSBhdHRyaWJ1dGUgbWV0YWRhdGEsIHRoaXMgd2lsbCBoYXZlIHRvIHBvaW50IHRvIGEgYnVmZmVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgcmVtYWlucyB2YWxpZCB0aHJvdWdoIHRoZSBsaWZldGltZSBvZiB0aGUgYXR0cmlidXRlLiBUaGlzIGV4Y2x1ZGVzIHVzYWdlIG9mIGF1dG9tYXRpYyB2YXJpYWJsZXMgdGhhdCBtYXkgZ28gb3V0IG9mIHNjb3BlIG9yIGFueSBvdGhlciB0ZW1wb3JhcnkgbG9jYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdGFjayBtYXkgYWNjZXNzIHRoYXQgbWVtb3J5IGRpcmVjdGx5IHdpdGhvdXQgdGhlIGFwcGxpY2F0aW9uJ3Mga25vd2xlZGdlLiBGb3Igd3JpdGFibGUgY2hhcmFjdGVyaXN0aWNzLCB0aGlzIHZhbHVlIG11c3Qgbm90IGJlIGEgbG9jYXRpb24gaW4gZmxhc2ggbWVtb3J5LiovDQorfSBibGVfZ2F0dHNfYXR0cl90Ow0KKw0KKy8qKkBicmllZiBHQVRUIEF0dHJpYnV0ZSBWYWx1ZS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICBsZW47ICAgICAgICAvKio8IExlbmd0aCBpbiBieXRlcyB0byBiZSB3cml0dGVuIG9yIHJlYWQuIExlbmd0aCBpbiBieXRlcyB3cml0dGVuIG9yIHJlYWQgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXR1cm4uKi8NCisgIHVpbnQxNl90ICBvZmZzZXQ7ICAgICAvKio8IEF0dHJpYnV0ZSB2YWx1ZSBvZmZzZXQuICovDQorICB1aW50OF90ICAqcF92YWx1ZTsgICAgLyoqPCBQb2ludGVyIHRvIHdoZXJlIHZhbHVlIGlzIHN0b3JlZCBvciB3aWxsIGJlIHN0b3JlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHZhbHVlIGlzIHN0b3JlZCBpbiB1c2VyIG1lbW9yeSwgb25seSB0aGUgYXR0cmlidXRlIGxlbmd0aCBpcyB1cGRhdGVkIHdoZW4gcF92YWx1ZSA9PSBOVUxMLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIE5VTEwgd2hlbiByZWFkaW5nIHRvIG9idGFpbiB0aGUgY29tcGxldGUgbGVuZ3RoIG9mIHRoZSBhdHRyaWJ1dGUgdmFsdWUgKi8NCit9IGJsZV9nYXR0c192YWx1ZV90Ow0KKw0KKw0KKy8qKkBicmllZiBHQVRUIENoYXJhY3RlcmlzdGljIFByZXNlbnRhdGlvbiBGb3JtYXQuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgIGZvcm1hdDsgICAgICAvKio8IEZvcm1hdCBvZiB0aGUgdmFsdWUsIHNlZSBAcmVmIEJMRV9HQVRUX0NQRl9GT1JNQVRTLiAqLw0KKyAgaW50OF90ICAgICAgICAgICBleHBvbmVudDsgICAgLyoqPCBFeHBvbmVudCBmb3IgaW50ZWdlciBkYXRhIHR5cGVzLiAqLw0KKyAgdWludDE2X3QgICAgICAgICB1bml0OyAgICAgICAgLyoqPCBVbml0IGZyb20gQmx1ZXRvb3RoIEFzc2lnbmVkIE51bWJlcnMuICovDQorICB1aW50OF90ICAgICAgICAgIG5hbWVfc3BhY2U7ICAvKio8IE5hbWVzcGFjZSBmcm9tIEJsdWV0b290aCBBc3NpZ25lZCBOdW1iZXJzLCBzZWUgQHJlZiBCTEVfR0FUVF9DUEZfTkFNRVNQQUNFUy4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgZGVzYzsgICAgICAgIC8qKjwgTmFtZXNwYWNlIGRlc2NyaXB0aW9uIGZyb20gQmx1ZXRvb3RoIEFzc2lnbmVkIE51bWJlcnMsIHNlZSBAcmVmIEJMRV9HQVRUX0NQRl9OQU1FU1BBQ0VTLiAqLw0KK30gYmxlX2dhdHRzX2NoYXJfcGZfdDsNCisNCisNCisvKipAYnJpZWYgR0FUVCBDaGFyYWN0ZXJpc3RpYyBtZXRhZGF0YS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGJsZV9nYXR0X2NoYXJfcHJvcHNfdCAgICAgICBjaGFyX3Byb3BzOyAgICAgICAgICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgUHJvcGVydGllcy4gKi8NCisgIGJsZV9nYXR0X2NoYXJfZXh0X3Byb3BzX3QgICBjaGFyX2V4dF9wcm9wczsgICAgICAgICAgIC8qKjwgQ2hhcmFjdGVyaXN0aWMgRXh0ZW5kZWQgUHJvcGVydGllcy4gKi8NCisgIHVpbnQ4X3QgY29uc3QgICAgICAgICAgICAgICpwX2NoYXJfdXNlcl9kZXNjOyAgICAgICAgIC8qKjwgUG9pbnRlciB0byBhIFVURi04IGVuY29kZWQgc3RyaW5nIChub24tTlVMTCB0ZXJtaW5hdGVkKSwgTlVMTCBpZiB0aGUgZGVzY3JpcHRvciBpcyBub3QgcmVxdWlyZWQuICovDQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgY2hhcl91c2VyX2Rlc2NfbWF4X3NpemU7ICAvKio8IFRoZSBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHVzZXIgZGVzY3JpcHRpb24gZGVzY3JpcHRvci4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBjaGFyX3VzZXJfZGVzY19zaXplOyAgICAgIC8qKjwgVGhlIHNpemUgb2YgdGhlIHVzZXIgZGVzY3JpcHRpb24sIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBjaGFyX3VzZXJfZGVzY19tYXhfc2l6ZS4gKi8NCisgIGJsZV9nYXR0c19jaGFyX3BmX3QgY29uc3QgICpwX2NoYXJfcGY7ICAgICAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byBhIHByZXNlbnRhdGlvbiBmb3JtYXQgc3RydWN0dXJlIG9yIE5VTEwgaWYgdGhlIENQRiBkZXNjcmlwdG9yIGlzIG5vdCByZXF1aXJlZC4gKi8NCisgIGJsZV9nYXR0c19hdHRyX21kX3QgY29uc3QgICpwX3VzZXJfZGVzY19tZDsgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIG1ldGFkYXRhIGZvciB0aGUgVXNlciBEZXNjcmlwdGlvbiBkZXNjcmlwdG9yLCBvciBOVUxMIGZvciBkZWZhdWx0IHZhbHVlcy4gKi8NCisgIGJsZV9nYXR0c19hdHRyX21kX3QgY29uc3QgICpwX2NjY2RfbWQ7ICAgICAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIG1ldGFkYXRhIGZvciB0aGUgQ2xpZW50IENoYXJhY3RlcmlzdGljIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciwgb3IgTlVMTCBmb3IgZGVmYXVsdCB2YWx1ZXMuICovDQorICBibGVfZ2F0dHNfYXR0cl9tZF90IGNvbnN0ICAqcF9zY2NkX21kOyAgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBtZXRhZGF0YSBmb3IgdGhlIFNlcnZlciBDaGFyYWN0ZXJpc3RpYyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IsIG9yIE5VTEwgZm9yIGRlZmF1bHQgdmFsdWVzLiAqLw0KK30gYmxlX2dhdHRzX2NoYXJfbWRfdDsNCisNCisNCisvKipAYnJpZWYgR0FUVCBDaGFyYWN0ZXJpc3RpYyBEZWZpbml0aW9uIEhhbmRsZXMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICB2YWx1ZV9oYW5kbGU7ICAgICAgIC8qKjwgSGFuZGxlIHRvIHRoZSBjaGFyYWN0ZXJpc3RpYyB2YWx1ZS4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgIHVzZXJfZGVzY19oYW5kbGU7ICAgLyoqPCBIYW5kbGUgdG8gdGhlIFVzZXIgRGVzY3JpcHRpb24gZGVzY3JpcHRvciwgb3IgQHJlZiBCTEVfR0FUVF9IQU5ETEVfSU5WQUxJRCBpZiBub3QgcHJlc2VudC4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgIGNjY2RfaGFuZGxlOyAgICAgICAgLyoqPCBIYW5kbGUgdG8gdGhlIENsaWVudCBDaGFyYWN0ZXJpc3RpYyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IsIG9yIEByZWYgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQgaWYgbm90IHByZXNlbnQuICovDQorICB1aW50MTZfdCAgICAgICAgICBzY2NkX2hhbmRsZTsgICAgICAgIC8qKjwgSGFuZGxlIHRvIHRoZSBTZXJ2ZXIgQ2hhcmFjdGVyaXN0aWMgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yLCBvciBAcmVmIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElEIGlmIG5vdCBwcmVzZW50LiAqLw0KK30gYmxlX2dhdHRzX2NoYXJfaGFuZGxlc190Ow0KKw0KKw0KKy8qKkBicmllZiBHQVRUIEhWeCBwYXJhbWV0ZXJzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgaGFuZGxlOyAgICAgICAgICAgICAvKio8IENoYXJhY3RlcmlzdGljIFZhbHVlIEhhbmRsZS4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgLyoqPCBJbmRpY2F0aW9uIG9yIE5vdGlmaWNhdGlvbiwgc2VlIEByZWYgQkxFX0dBVFRfSFZYX1RZUEVTLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAvKio8IE9mZnNldCB3aXRoaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgKnBfbGVuOyAgICAgICAgICAgICAgLyoqPCBMZW5ndGggaW4gYnl0ZXMgdG8gYmUgd3JpdHRlbiwgbGVuZ3RoIGluIGJ5dGVzIHdyaXR0ZW4gYWZ0ZXIgc3VjY2Vzc2Z1bCByZXR1cm4uICovDQorICB1aW50OF90IGNvbnN0ICAgICpwX2RhdGE7ICAgICAgICAgICAgIC8qKjwgQWN0dWFsIGRhdGEgY29udGVudCwgdXNlIE5VTEwgdG8gdXNlIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB2YWx1ZS4gKi8NCit9IGJsZV9nYXR0c19odnhfcGFyYW1zX3Q7DQorDQorLyoqQGJyaWVmIEdBVFQgQXV0aG9yaXphdGlvbiBwYXJhbWV0ZXJzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgZ2F0dF9zdGF0dXM7ICAgICAgICAvKio8IEdBVFQgc3RhdHVzIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUX1NUQVRVU19DT0RFUy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgIHVwZGF0ZSA6IDE7ICAgICAgICAgLyoqPCBJZiBzZXQsIGRhdGEgc3VwcGxpZWQgaW4gcF9kYXRhIHdpbGwgYmUgdXNlZCB0byB1cGRhdGUgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IGZvciBAcmVmIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRV9XUklURSBvcGVyYXRpb25zIHRoaXMgYml0IG11c3QgYWx3YXlzIGJlIHNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgZGF0YSB0byBiZSB3cml0dGVuIG5lZWRzIHRvIGJlIHN0b3JlZCBhbmQgbGF0ZXIgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAvKio8IE9mZnNldCBvZiB0aGUgYXR0cmlidXRlIHZhbHVlIGJlaW5nIHVwZGF0ZWQuICovDQorICB1aW50MTZfdCAgICAgICAgICBsZW47ICAgICAgICAgICAgICAgIC8qKjwgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSB2YWx1ZSBpbiBwX2RhdGEgcG9pbnRlciwgc2VlIEByZWYgQkxFX0dBVFRTX0FUVFJfTEVOU19NQVguICovDQorICB1aW50OF90IGNvbnN0ICAgICpwX2RhdGE7ICAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byBuZXcgdmFsdWUgdXNlZCB0byB1cGRhdGUgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4gKi8NCit9IGJsZV9nYXR0c19hdXRob3JpemVfcGFyYW1zX3Q7DQorDQorLyoqQGJyaWVmIEdBVFQgUmVhZCBvciBXcml0ZSBBdXRob3JpemUgUmVwbHkgcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAvKio8IFR5cGUgb2YgYXV0aG9yaXplIG9wZXJhdGlvbiwgc2VlIEByZWYgQkxFX0dBVFRTX0FVVEhPUklaRV9UWVBFUy4gKi8NCisgIHVuaW9uIHsNCisgICAgYmxlX2dhdHRzX2F1dGhvcml6ZV9wYXJhbXNfdCAgICAgICAgcmVhZDsgICAvKio8IFJlYWQgYXV0aG9yaXphdGlvbiBwYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dHNfYXV0aG9yaXplX3BhcmFtc190ICAgICAgICB3cml0ZTsgIC8qKjwgV3JpdGUgYXV0aG9yaXphdGlvbiBwYXJhbWV0ZXJzLiAqLw0KKyAgfSBwYXJhbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVwbHkgUGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXR0c19yd19hdXRob3JpemVfcmVwbHlfcGFyYW1zX3Q7DQorDQorLyoqQGJyaWVmIFNlcnZpY2UgQ2hhbmdlZCBJbmNsdXNpb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBzZXQgd2l0aCBAcmVmIHNkX2JsZV9jZmdfc2V0LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBzZXJ2aWNlX2NoYW5nZWQgOiAxOyAgICAgICAvKio8IElmIDEsIGluY2x1ZGUgdGhlIFNlcnZpY2UgQ2hhbmdlZCBjaGFyYWN0ZXJpc3RpYyBpbiB0aGUgQXR0cmlidXRlIFRhYmxlLiBEZWZhdWx0IGlzIEByZWYgQkxFX0dBVFRTX1NFUlZJQ0VfQ0hBTkdFRF9ERUZBVUxULiAqLw0KK30gYmxlX2dhdHRzX2NmZ19zZXJ2aWNlX2NoYW5nZWRfdDsNCisNCisvKipAYnJpZWYgQXR0cmlidXRlIHRhYmxlIHNpemUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBzZXQgd2l0aCBAcmVmIHNkX2JsZV9jZmdfc2V0Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCBPbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzcGVjaWZpZWQgQXR0cmlidXRlIFRhYmxlIHNpemUgaXMgdG9vIHNtYWxsLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW11bSBhY2NlcHRhYmxlIHNpemUgaXMgZGVmaW5lZCBieSBAcmVmIEJMRV9HQVRUU19BVFRSX1RBQl9TSVpFX01JTi4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIHNwZWNpZmllZCBBdHRyaWJ1dGUgVGFibGUgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0Lg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3QgYXR0cl90YWJfc2l6ZTsgLyoqPCBBdHRyaWJ1dGUgdGFibGUgc2l6ZS4gRGVmYXVsdCBpcyBAcmVmIEJMRV9HQVRUU19BVFRSX1RBQl9TSVpFX0RFRkFVTFQsIG1pbmltdW0gaXMgQHJlZiBCTEVfR0FUVFNfQVRUUl9UQUJfU0laRV9NSU4uICovDQorfSBibGVfZ2F0dHNfY2ZnX2F0dHJfdGFiX3NpemVfdDsNCisNCisvKipAYnJpZWYgQ29uZmlnIHN0cnVjdHVyZSBmb3IgR0FUVFMgY29uZmlndXJhdGlvbnMuICovDQordHlwZWRlZiB1bmlvbg0KK3sNCisgIGJsZV9nYXR0c19jZmdfc2VydmljZV9jaGFuZ2VkX3Qgc2VydmljZV9jaGFuZ2VkOyAgLyoqPCBJbmNsdWRlIHNlcnZpY2UgY2hhbmdlZCBjaGFyYWN0ZXJpc3RpYywgY2ZnX2lkIGlzIEByZWYgQkxFX0dBVFRTX0NGR19TRVJWSUNFX0NIQU5HRUQuICovDQorICBibGVfZ2F0dHNfY2ZnX2F0dHJfdGFiX3NpemVfdCBhdHRyX3RhYl9zaXplOyAgICAgIC8qKjwgQXR0cmlidXRlIHRhYmxlIHNpemUsIGNmZ19pZCBpcyBAcmVmIEJMRV9HQVRUU19DRkdfQVRUUl9UQUJfU0laRS4gKi8NCit9IGJsZV9nYXR0c19jZmdfdDsNCisNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUU19FVlRfV1JJVEUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgaGFuZGxlOyAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBIYW5kbGUuICovDQorICBibGVfdXVpZF90ICAgICAgICAgICAgICAgICAgdXVpZDsgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBVVUlELiAqLw0KKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIG9wOyAgICAgICAgICAgICAgICAgLyoqPCBUeXBlIG9mIHdyaXRlIG9wZXJhdGlvbiwgc2VlIEByZWYgQkxFX0dBVFRTX09QUy4gKi8NCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBhdXRoX3JlcXVpcmVkOyAgICAgIC8qKjwgV3JpdGluZyBvcGVyYXRpb24gZGVmZXJyZWQgZHVlIHRvIGF1dGhvcml6YXRpb24gcmVxdWlyZW1lbnQuIEFwcGxpY2F0aW9uIG1heSB1c2UgQHJlZiBzZF9ibGVfZ2F0dHNfdmFsdWVfc2V0IHRvIGZpbmFsaXplIHRoZSB3cml0aW5nIG9wZXJhdGlvbi4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7ICAgICAgICAgICAgIC8qKjwgT2Zmc2V0IGZvciB0aGUgd3JpdGUgb3BlcmF0aW9uLiAqLw0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgIGxlbjsgICAgICAgICAgICAgICAgLyoqPCBMZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEuICovDQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKio8IFJlY2VpdmVkIGRhdGEuIEBub3RlIFRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkuIFRoZSBzaXplIG9mIDEgaW5kaWNhdGVkIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgY29tcGlsYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBAcmVmIHNkX2JsZV9ldnRfZ2V0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgZXZlbnQgc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBtZW1iZXJzLiAqLw0KK30gYmxlX2dhdHRzX2V2dF93cml0ZV90Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdWJzdHJ1Y3R1cmUgZm9yIGF1dGhvcml6ZWQgcmVhZCByZXF1ZXN0cywgc2VlIEByZWYgYmxlX2dhdHRzX2V2dF9yd19hdXRob3JpemVfcmVxdWVzdF90LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgIGhhbmRsZTsgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgSGFuZGxlLiAqLw0KKyAgYmxlX3V1aWRfdCAgICAgICAgICAgICAgICAgIHV1aWQ7ICAgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgVVVJRC4gKi8NCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7ICAgICAgICAgICAgIC8qKjwgT2Zmc2V0IGZvciB0aGUgcmVhZCBvcGVyYXRpb24uICovDQorfSBibGVfZ2F0dHNfZXZ0X3JlYWRfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUU19FVlRfUldfQVVUSE9SSVpFX1JFUVVFU1QuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgLyoqPCBUeXBlIG9mIGF1dGhvcml6ZSBvcGVyYXRpb24sIHNlZSBAcmVmIEJMRV9HQVRUU19BVVRIT1JJWkVfVFlQRVMuICovDQorICB1bmlvbiB7DQorICAgIGJsZV9nYXR0c19ldnRfcmVhZF90ICAgICAgcmVhZDsgICAgICAgICAgICAgLyoqPCBBdHRyaWJ1dGUgUmVhZCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dHNfZXZ0X3dyaXRlX3QgICAgIHdyaXRlOyAgICAgICAgICAgIC8qKjwgQXR0cmlidXRlIFdyaXRlIFBhcmFtZXRlcnMuICovDQorICB9IHJlcXVlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZXF1ZXN0IFBhcmFtZXRlcnMuICovDQorfSBibGVfZ2F0dHNfZXZ0X3J3X2F1dGhvcml6ZV9yZXF1ZXN0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVFNfRVZUX1NZU19BVFRSX01JU1NJTkcuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IGhpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIaW50IChjdXJyZW50bHkgdW51c2VkKS4gKi8NCit9IGJsZV9nYXR0c19ldnRfc3lzX2F0dHJfbWlzc2luZ190Ow0KKw0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRTX0VWVF9IVkMuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MTZfdCAgICAgICAgICBoYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IEF0dHJpYnV0ZSBIYW5kbGUuICovDQorfSBibGVfZ2F0dHNfZXZ0X2h2Y190Ow0KKw0KKy8qKkBicmllZiBFdmVudCBzdHJ1Y3R1cmUgZm9yIEByZWYgQkxFX0dBVFRTX0VWVF9FWENIQU5HRV9NVFVfUkVRVUVTVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90ICAgICAgICAgIGNsaWVudF9yeF9tdHU7ICAgICAgICAgICAgICAvKio8IENsaWVudCBSWCBNVFUgc2l6ZS4gKi8NCit9IGJsZV9nYXR0c19ldnRfZXhjaGFuZ2VfbXR1X3JlcXVlc3RfdDsNCisNCisvKipAYnJpZWYgRXZlbnQgc3RydWN0dXJlIGZvciBAcmVmIEJMRV9HQVRUU19FVlRfVElNRU9VVC4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgc3JjOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaW1lb3V0IHNvdXJjZSwgc2VlIEByZWYgQkxFX0dBVFRfVElNRU9VVF9TT1VSQ0VTLiAqLw0KK30gYmxlX2dhdHRzX2V2dF90aW1lb3V0X3Q7DQorDQorLyoqQGJyaWVmIEV2ZW50IHN0cnVjdHVyZSBmb3IgQHJlZiBCTEVfR0FUVFNfRVZUX0hWTl9UWF9DT01QTEVURS4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2Ygbm90aWZpY2F0aW9uIHRyYW5zbWlzc2lvbnMgY29tcGxldGVkLiAqLw0KK30gYmxlX2dhdHRzX2V2dF9odm5fdHhfY29tcGxldGVfdDsNCisNCisvKipAYnJpZWYgR0FUVFMgZXZlbnQgc3RydWN0dXJlLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgY29ubl9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb25uZWN0aW9uIEhhbmRsZSBvbiB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQuICovDQorICB1bmlvbg0KKyAgew0KKyAgICBibGVfZ2F0dHNfZXZ0X3dyaXRlX3QgICAgICAgICAgICAgICAgIHdyaXRlOyAgICAgICAgICAgICAgICAgLyoqPCBXcml0ZSBFdmVudCBQYXJhbWV0ZXJzLiAqLw0KKyAgICBibGVfZ2F0dHNfZXZ0X3J3X2F1dGhvcml6ZV9yZXF1ZXN0X3QgIGF1dGhvcml6ZV9yZXF1ZXN0OyAgICAgLyoqPCBSZWFkIG9yIFdyaXRlIEF1dGhvcml6ZSBSZXF1ZXN0IFBhcmFtZXRlcnMuICovDQorICAgIGJsZV9nYXR0c19ldnRfc3lzX2F0dHJfbWlzc2luZ190ICAgICAgc3lzX2F0dHJfbWlzc2luZzsgICAgICAvKio8IFN5c3RlbSBhdHRyaWJ1dGVzIG1pc3NpbmcuICovDQorICAgIGJsZV9nYXR0c19ldnRfaHZjX3QgICAgICAgICAgICAgICAgICAgaHZjOyAgICAgICAgICAgICAgICAgICAvKio8IEhhbmRsZSBWYWx1ZSBDb25maXJtYXRpb24gRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRzX2V2dF9leGNoYW5nZV9tdHVfcmVxdWVzdF90ICBleGNoYW5nZV9tdHVfcmVxdWVzdDsgIC8qKjwgRXhjaGFuZ2UgTVRVIFJlcXVlc3QgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgICAgYmxlX2dhdHRzX2V2dF90aW1lb3V0X3QgICAgICAgICAgICAgICB0aW1lb3V0OyAgICAgICAgICAgICAgIC8qKjwgVGltZW91dCBFdmVudC4gKi8NCisgICAgYmxlX2dhdHRzX2V2dF9odm5fdHhfY29tcGxldGVfdCAgICAgICBodm5fdHhfY29tcGxldGU7ICAgICAgIC8qKjwgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbiB0cmFuc21pc3Npb24gY29tcGxldGUgRXZlbnQgUGFyYW1ldGVycy4gKi8NCisgIH0gcGFyYW1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgUGFyYW1ldGVycy4gKi8NCit9IGJsZV9nYXR0c19ldnRfdDsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX0dBVFRTX0ZVTkNUSU9OUyBGdW5jdGlvbnMNCisgKiBAeyAqLw0KKw0KKy8qKkBicmllZiBBZGQgYSBzZXJ2aWNlIGRlY2xhcmF0aW9uIHRvIHRoZSBBdHRyaWJ1dGUgVGFibGUuDQorICoNCisgKiBAbm90ZSBTZWNvbmRhcnkgU2VydmljZXMgYXJlIG9ubHkgcmVsZXZhbnQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGVudGl0eSB0aGF0IHJlZmVyZW5jZXMgdGhlbSwgaXQgaXMgdGhlcmVmb3JlIGZvcmJpZGRlbiB0bw0KKyAqICAgICAgIGFkZCBhIHNlY29uZGFyeSBzZXJ2aWNlIGRlY2xhcmF0aW9uIHRoYXQgaXMgbm90IHJlZmVyZW5jZWQgYnkgYW5vdGhlciBzZXJ2aWNlIGxhdGVyIGluIHRoZSBBdHRyaWJ1dGUgVGFibGUuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX0FUVF9UQUJMRV9QT1BfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIHR5cGUgICAgICBUb2dnbGVzIGJldHdlZW4gcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHNlcnZpY2VzLCBzZWUgQHJlZiBCTEVfR0FUVFNfU1JWQ19UWVBFUy4NCisgKiBAcGFyYW1baW5dIHBfdXVpZCAgICBQb2ludGVyIHRvIHNlcnZpY2UgVVVJRC4NCisgKiBAcGFyYW1bb3V0XSBwX2hhbmRsZSBQb2ludGVyIHRvIGEgMTYtYml0IHdvcmQgd2hlcmUgdGhlIGFzc2lnbmVkIGhhbmRsZSB3aWxsIGJlIHN0b3JlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgYWRkZWQgYSBzZXJ2aWNlIGRlY2xhcmF0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIFZlbmRvciBTcGVjaWZpYyBVVUlEcyBuZWVkIHRvIGJlIHByZXNlbnQgaW4gdGhlIHRhYmxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIEZvcmJpZGRlbiB2YWx1ZSBzdXBwbGllZCwgY2VydGFpbiBVVUlEcyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBzdGFjay4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PX01FTSBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSBvcGVyYXRpb24uDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19TRVJWSUNFX0FERCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c19zZXJ2aWNlX2FkZCh1aW50OF90IHR5cGUsIGJsZV91dWlkX3QgY29uc3QgKnBfdXVpZCwgdWludDE2X3QgKnBfaGFuZGxlKSk7DQorDQorDQorLyoqQGJyaWVmIEFkZCBhbiBpbmNsdWRlIGRlY2xhcmF0aW9uIHRvIHRoZSBBdHRyaWJ1dGUgVGFibGUuDQorICoNCisgKiBAbm90ZSBJdCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSB0byBhZGQgYW4gaW5jbHVkZSBkZWNsYXJhdGlvbiB0byB0aGUgbGFzdCBhZGRlZCBzZXJ2aWNlIChpLmUuIG9ubHkgc2VxdWVudGlhbCBwb3B1bGF0aW9uIGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpLg0KKyAqDQorICogQG5vdGUgVGhlIGluY2x1ZGVkIHNlcnZpY2UgbXVzdCBhbHJlYWR5IGJlIHByZXNlbnQgaW4gdGhlIEF0dHJpYnV0ZSBUYWJsZSBwcmlvciB0byB0aGlzIGNhbGwuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX0FUVF9UQUJMRV9QT1BfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIHNlcnZpY2VfaGFuZGxlICAgIEhhbmRsZSBvZiB0aGUgc2VydmljZSB3aGVyZSB0aGUgaW5jbHVkZWQgc2VydmljZSBpcyB0byBiZSBwbGFjZWQsIGlmIEByZWYgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQgaXMgdXNlZCwgaXQgd2lsbCBiZSBwbGFjZWQgc2VxdWVudGlhbGx5Lg0KKyAqIEBwYXJhbVtpbl0gaW5jX3NydmNfaGFuZGxlICAgSGFuZGxlIG9mIHRoZSBpbmNsdWRlZCBzZXJ2aWNlLg0KKyAqIEBwYXJhbVtvdXRdIHBfaW5jbHVkZV9oYW5kbGUgUG9pbnRlciB0byBhIDE2LWJpdCB3b3JkIHdoZXJlIHRoZSBhc3NpZ25lZCBoYW5kbGUgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGFkZGVkIGFuIGluY2x1ZGUgZGVjbGFyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZCwgaGFuZGxlIHZhbHVlcyBuZWVkIHRvIG1hdGNoIHByZXZpb3VzbHkgYWRkZWQgc2VydmljZXMuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfU1VQUE9SVEVEIEZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCwgc2VydmljZV9oYW5kbGUgbXVzdCBiZSB0aGF0IG9mIHRoZSBsYXN0IGFkZGVkIHNlcnZpY2UuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9GT1JCSURERU4gRm9yYmlkZGVuIHZhbHVlIHN1cHBsaWVkLCBzZWxmIGluY2x1c2lvbnMgYXJlIG5vdCBhbGxvd2VkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvbXBsZXRlIG9wZXJhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBBdHRyaWJ1dGUgbm90IGZvdW5kLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfSU5DTFVERV9BREQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfaW5jbHVkZV9hZGQodWludDE2X3Qgc2VydmljZV9oYW5kbGUsIHVpbnQxNl90IGluY19zcnZjX2hhbmRsZSwgdWludDE2X3QgKnBfaW5jbHVkZV9oYW5kbGUpKTsNCisNCisNCisvKipAYnJpZWYgQWRkIGEgY2hhcmFjdGVyaXN0aWMgZGVjbGFyYXRpb24sIGEgY2hhcmFjdGVyaXN0aWMgdmFsdWUgZGVjbGFyYXRpb24gYW5kIG9wdGlvbmFsIGNoYXJhY3RlcmlzdGljIGRlc2NyaXB0b3IgZGVjbGFyYXRpb25zIHRvIHRoZSBBdHRyaWJ1dGUgVGFibGUuDQorICoNCisgKiBAbm90ZSBJdCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSB0byBhZGQgYSBjaGFyYWN0ZXJpc3RpYyB0byB0aGUgbGFzdCBhZGRlZCBzZXJ2aWNlIChpLmUuIG9ubHkgc2VxdWVudGlhbCBwb3B1bGF0aW9uIGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpLg0KKyAqDQorICogQG5vdGUgU2V2ZXJhbCByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGhlIHBhcmFtZXRlcnMsIHN1Y2ggYXMgbWF0Y2hpbmcgcGVybWlzc2lvbnMgYmV0d2VlbiB0aGUgdXNlciBkZXNjcmlwdGlvbiBkZXNjcmlwdG9yIGFuZCB0aGUgd3JpdGFibGUgYXV4aWxpYXJpZXMgYml0cywNCisgKiAgICAgICByZWFkYWJsZSAobm8gc2VjdXJpdHkpIGFuZCB3cml0YWJsZSAoc2VsZWN0YWJsZSkgQ0NDRHMgYW5kIFNDQ0RzIGFuZCB2YWxpZCBwcmVzZW50YXRpb24gZm9ybWF0IHZhbHVlcy4NCisgKg0KKyAqIEBub3RlIElmIG5vIG1ldGFkYXRhIGlzIHByb3ZpZGVkIGZvciB0aGUgb3B0aW9uYWwgZGVzY3JpcHRvcnMsIHRoZWlyIHBlcm1pc3Npb25zIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBjaGFyYWN0ZXJpc3RpYyBwZXJtaXNzaW9ucy4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfQVRUX1RBQkxFX1BPUF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gc2VydmljZV9oYW5kbGUgICAgSGFuZGxlIG9mIHRoZSBzZXJ2aWNlIHdoZXJlIHRoZSBjaGFyYWN0ZXJpc3RpYyBpcyB0byBiZSBwbGFjZWQsIGlmIEByZWYgQkxFX0dBVFRfSEFORExFX0lOVkFMSUQgaXMgdXNlZCwgaXQgd2lsbCBiZSBwbGFjZWQgc2VxdWVudGlhbGx5Lg0KKyAqIEBwYXJhbVtpbl0gcF9jaGFyX21kICAgICAgICAgQ2hhcmFjdGVyaXN0aWMgbWV0YWRhdGEuDQorICogQHBhcmFtW2luXSBwX2F0dHJfY2hhcl92YWx1ZSBQb2ludGVyIHRvIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoYXJhY3RlcmlzdGljIHZhbHVlLg0KKyAqIEBwYXJhbVtvdXRdIHBfaGFuZGxlcyAgICAgICAgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSBhc3NpZ25lZCBoYW5kbGVzIHdpbGwgYmUgc3RvcmVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBhZGRlZCBhIGNoYXJhY3RlcmlzdGljLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXIocykgc3VwcGxpZWQsIHNlcnZpY2UgaGFuZGxlLCBWZW5kb3IgU3BlY2lmaWMgVVVJRHMsIGxlbmd0aHMsIGFuZCBwZXJtaXNzaW9ucyBuZWVkIHRvIGFkaGVyZSB0byB0aGUgY29uc3RyYWludHMuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgc3RhdGUgdG8gcGVyZm9ybSBvcGVyYXRpb24sIGEgc2VydmljZSBjb250ZXh0IGlzIHJlcXVpcmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIEZvcmJpZGRlbiB2YWx1ZSBzdXBwbGllZCwgY2VydGFpbiBVVUlEcyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBzdGFjay4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PX01FTSBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgSW52YWxpZCBkYXRhIHNpemUocykgc3VwcGxpZWQsIGF0dHJpYnV0ZSBsZW5ndGhzIGFyZSByZXN0cmljdGVkIGJ5IEByZWYgQkxFX0dBVFRTX0FUVFJfTEVOU19NQVguDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19DSEFSQUNURVJJU1RJQ19BREQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfY2hhcmFjdGVyaXN0aWNfYWRkKHVpbnQxNl90IHNlcnZpY2VfaGFuZGxlLCBibGVfZ2F0dHNfY2hhcl9tZF90IGNvbnN0ICpwX2NoYXJfbWQsIGJsZV9nYXR0c19hdHRyX3QgY29uc3QgKnBfYXR0cl9jaGFyX3ZhbHVlLCBibGVfZ2F0dHNfY2hhcl9oYW5kbGVzX3QgKnBfaGFuZGxlcykpOw0KKw0KKw0KKy8qKkBicmllZiBBZGQgYSBkZXNjcmlwdG9yIHRvIHRoZSBBdHRyaWJ1dGUgVGFibGUuDQorICoNCisgKiBAbm90ZSBJdCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSB0byBhZGQgYSBkZXNjcmlwdG9yIHRvIHRoZSBsYXN0IGFkZGVkIGNoYXJhY3RlcmlzdGljIChpLmUuIG9ubHkgc2VxdWVudGlhbCBwb3B1bGF0aW9uIGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19BVFRfVEFCTEVfUE9QX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjaGFyX2hhbmRsZSAgIEhhbmRsZSBvZiB0aGUgY2hhcmFjdGVyaXN0aWMgd2hlcmUgdGhlIGRlc2NyaXB0b3IgaXMgdG8gYmUgcGxhY2VkLCBpZiBAcmVmIEJMRV9HQVRUX0hBTkRMRV9JTlZBTElEIGlzIHVzZWQsIGl0IHdpbGwgYmUgcGxhY2VkIHNlcXVlbnRpYWxseS4NCisgKiBAcGFyYW1baW5dIHBfYXR0ciAgICAgICAgUG9pbnRlciB0byB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW1bb3V0XSBwX2hhbmRsZSAgICAgUG9pbnRlciB0byBhIDE2LWJpdCB3b3JkIHdoZXJlIHRoZSBhc3NpZ25lZCBoYW5kbGUgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IGFkZGVkIGEgZGVzY3JpcHRvci4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgcGFyYW1ldGVyKHMpIHN1cHBsaWVkLCBjaGFyYWN0ZXJpc3RpYyBoYW5kbGUsIFZlbmRvciBTcGVjaWZpYyBVVUlEcywgbGVuZ3RocywgYW5kIHBlcm1pc3Npb25zIG5lZWQgdG8gYWRoZXJlIHRvIHRoZSBjb25zdHJhaW50cy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgSW52YWxpZCBzdGF0ZSB0byBwZXJmb3JtIG9wZXJhdGlvbiwgYSBjaGFyYWN0ZXJpc3RpYyBjb250ZXh0IGlzIHJlcXVpcmVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIEZvcmJpZGRlbiB2YWx1ZSBzdXBwbGllZCwgY2VydGFpbiBVVUlEcyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBzdGFjay4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PX01FTSBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb21wbGV0ZSBvcGVyYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgSW52YWxpZCBkYXRhIHNpemUocykgc3VwcGxpZWQsIGF0dHJpYnV0ZSBsZW5ndGhzIGFyZSByZXN0cmljdGVkIGJ5IEByZWYgQkxFX0dBVFRTX0FUVFJfTEVOU19NQVguDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19ERVNDUklQVE9SX0FERCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c19kZXNjcmlwdG9yX2FkZCh1aW50MTZfdCBjaGFyX2hhbmRsZSwgYmxlX2dhdHRzX2F0dHJfdCBjb25zdCAqcF9hdHRyLCB1aW50MTZfdCAqcF9oYW5kbGUpKTsNCisNCisvKipAYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGF0dHJpYnV0ZS4NCisgKg0KKyAqIEBub3RlIFZhbHVlcyBvdGhlciB0aGFuIHN5c3RlbSBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQgYXQgYW55IHRpbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgYWN0aXZlIGNvbm5lY3Rpb25zIGV4aXN0Lg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfUVVFVUVfRlVMTF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX05PQlVGX05PQVVUSF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgIENvbm5lY3Rpb24gaGFuZGxlLiBJZ25vcmVkIGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBiZWxvbmcgdG8gYSBzeXN0ZW0gYXR0cmlidXRlLg0KKyAqIEBwYXJhbVtpbl0gaGFuZGxlICAgICAgIEF0dHJpYnV0ZSBoYW5kbGUuDQorICogQHBhcmFtW2luLG91dF0gcF92YWx1ZSAgQXR0cmlidXRlIHZhbHVlIGluZm9ybWF0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX05PVF9GT1VORCBBdHRyaWJ1dGUgbm90IGZvdW5kLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIEZvcmJpZGRlbiBoYW5kbGUgc3VwcGxpZWQsIGNlcnRhaW4gYXR0cmlidXRlcyBhcmUgbm90IG1vZGlmaWFibGUgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfREFUQV9TSVpFIEludmFsaWQgZGF0YSBzaXplKHMpIHN1cHBsaWVkLCBhdHRyaWJ1dGUgbGVuZ3RocyBhcmUgcmVzdHJpY3RlZCBieSBAcmVmIEJMRV9HQVRUU19BVFRSX0xFTlNfTUFYLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkIG9uIGEgc3lzdGVtIGF0dHJpYnV0ZS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX1ZBTFVFX1NFVCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c192YWx1ZV9zZXQodWludDE2X3QgY29ubl9oYW5kbGUsIHVpbnQxNl90IGhhbmRsZSwgYmxlX2dhdHRzX3ZhbHVlX3QgKnBfdmFsdWUpKTsNCisNCisvKipAYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGF0dHJpYnV0ZS4NCisgKg0KKyAqIEBub3RlICAgICAgICAgICAgICAgICBJZiB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIGxvbmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBzdXBwbGllZCBidWZmZXIsDQorICogICAgICAgICAgICAgICAgICAgICAgIHBfbGVuIHdpbGwgcmV0dXJuIHRoZSB0b3RhbCBhdHRyaWJ1dGUgdmFsdWUgbGVuZ3RoIChleGNsdWRpbmcgb2Zmc2V0KSwNCisgKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJldHVybmVkIGluIHBfZGF0YS4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFwcGxpY2F0aW9uIG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBhbGxvY2F0ZSBhIHN1aXRhYmxlIGJ1ZmZlciBzaXplLg0KKyAqDQorICogQG5vdGUgICAgICAgICAgICAgICAgIFdoZW4gcmV0cmlldmluZyBzeXN0ZW0gYXR0cmlidXRlIHZhbHVlcyB3aXRoIHRoaXMgZnVuY3Rpb24sIHRoZSBjb25uZWN0aW9uIGhhbmRsZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICBtYXkgcmVmZXIgdG8gYW4gYWxyZWFkeSBkaXNjb25uZWN0ZWQgY29ubmVjdGlvbi4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfZ2V0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLg0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgQ29ubmVjdGlvbiBoYW5kbGUuIElnbm9yZWQgaWYgdGhlIHZhbHVlIGRvZXMgbm90IGJlbG9uZyB0byBhIHN5c3RlbSBhdHRyaWJ1dGUuDQorICogQHBhcmFtW2luXSBoYW5kbGUgICAgICAgQXR0cmlidXRlIGhhbmRsZS4NCisgKiBAcGFyYW1baW4sb3V0XSBwX3ZhbHVlICBBdHRyaWJ1dGUgdmFsdWUgaW5mb3JtYXRpb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJbnZhbGlkIHBvaW50ZXIgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfRk9VTkQgQXR0cmlidXRlIG5vdCBmb3VuZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBhdHRyaWJ1dGUgb2Zmc2V0IHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIGNvbm5lY3Rpb24gaGFuZGxlIHN1cHBsaWVkIG9uIGEgc3lzdGVtIGF0dHJpYnV0ZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBVFRTX1NZU19BVFRSX01JU1NJTkcgU3lzdGVtIGF0dHJpYnV0ZXMgbWlzc2luZywgdXNlIEByZWYgc2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldCB0byBzZXQgdGhlbSB0byBhIGtub3duIHZhbHVlLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfVkFMVUVfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX3ZhbHVlX2dldCh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDE2X3QgaGFuZGxlLCBibGVfZ2F0dHNfdmFsdWVfdCAqcF92YWx1ZSkpOw0KKw0KKy8qKkBicmllZiBOb3RpZnkgb3IgSW5kaWNhdGUgYW4gYXR0cmlidXRlIHZhbHVlLg0KKyAqDQorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHRoZSByZWxldmFudCBDbGllbnQgQ2hhcmFjdGVyaXN0aWMgQ29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIHZhbHVlIHRvIHZlcmlmeSB0aGF0IHRoZSByZWxldmFudCBvcGVyYXRpb24NCisgKiAgICAgICAgICAobm90aWZpY2F0aW9uIG9yIGluZGljYXRpb24pIGhhcyBiZWVuIGVuYWJsZWQgYnkgdGhlIGNsaWVudC4gSXQgaXMgYWxzbyBhYmxlIHRvIHVwZGF0ZSB0aGUgYXR0cmlidXRlIHZhbHVlIGJlZm9yZSBpc3N1aW5nIHRoZSBQRFUsIHNvIHRoYXQNCisgKiAgICAgICAgICB0aGUgYXBwbGljYXRpb24gY2FuIGF0b21pY2FsbHkgcGVyZm9ybSBhIHZhbHVlIHVwZGF0ZSBhbmQgYSBzZXJ2ZXIgaW5pdGlhdGVkIHRyYW5zYWN0aW9uIHdpdGggYSBzaW5nbGUgQVBJIGNhbGwuDQorICoNCisgKiBAbm90ZSAgICBUaGUgbG9jYWwgYXR0cmlidXRlIHZhbHVlIG1heSBiZSB1cGRhdGVkIGV2ZW4gaWYgYW4gb3V0Z29pbmcgcGFja2V0IGlzIG5vdCBzZW50IHRvIHRoZSBwZWVyIGR1ZSB0byBhbiBlcnJvciBkdXJpbmcgZXhlY3V0aW9uLg0KKyAqICAgICAgICAgIFRoZSBBdHRyaWJ1dGUgVGFibGUgaGFzIGJlZW4gdXBkYXRlZCBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlcyBpcyByZXR1cm5lZDogQHJlZiBOUkZfRVJST1JfSU5WQUxJRF9TVEFURSwgQHJlZiBOUkZfRVJST1JfQlVTWSwNCisgKiAgICAgICAgICBAcmVmIE5SRl9FUlJPUl9GT1JCSURERU4sIEByZWYgQkxFX0VSUk9SX0dBVFRTX1NZU19BVFRSX01JU1NJTkcgYW5kIEByZWYgTlJGX0VSUk9SX1JFU09VUkNFUy4NCisgKiAgICAgICAgICBUaGUgY2FsbGVyIGNhbiBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBoYXMgYmVlbiB1cGRhdGVkIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnRzIG9mICoocF9odnhfcGFyYW1zLT5wX2xlbikuDQorICoNCisgKiBAbm90ZSAgICBPbmx5IG9uZSBpbmRpY2F0aW9uIHByb2NlZHVyZSBjYW4gYmUgb25nb2luZyBwZXIgY29ubmVjdGlvbiBhdCBhIHRpbWUuDQorICogICAgICAgICAgSWYgdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIGluZGljYXRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSB3aGlsZSBhbm90aGVyIGluZGljYXRpb24gcHJvY2VkdXJlIGlzIG9uZ29pbmcsDQorICogICAgICAgICAgdGhlIGZ1bmN0aW9uIGNhbGwgd2lsbCByZXR1cm4gQHJlZiBOUkZfRVJST1JfQlVTWS4NCisgKiAgICAgICAgICBBIEByZWYgQkxFX0dBVFRTX0VWVF9IVkMgZXZlbnQgd2lsbCBiZSBpc3N1ZWQgYXMgc29vbiBhcyB0aGUgY29uZmlybWF0aW9uIGFycml2ZXMgZnJvbSB0aGUgcGVlci4NCisgKg0KKyAqIEBub3RlICAgIFRoZSBudW1iZXIgb2YgSGFuZGxlIFZhbHVlIE5vdGlmaWNhdGlvbnMgdGhhdCBjYW4gYmUgcXVldWVkIGlzIGNvbmZpZ3VyZWQgYnkgQHJlZiBibGVfZ2F0dHNfY29ubl9jZmdfdDo6aHZuX3R4X3F1ZXVlX3NpemUNCisgKiAgICAgICAgICBXaGVuIHRoZSBxdWV1ZSBpcyBmdWxsLCB0aGUgZnVuY3Rpb24gY2FsbCB3aWxsIHJldHVybiBAcmVmIE5SRl9FUlJPUl9SRVNPVVJDRVMuDQorICogICAgICAgICAgQSBAcmVmIEJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFIGV2ZW50IHdpbGwgYmUgaXNzdWVkIGFzIHNvb24gYXMgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgbm90aWZpY2F0aW9uIGlzIGNvbXBsZXRlLg0KKyAqDQorICogQG5vdGUgICAgVGhlIGFwcGxpY2F0aW9uIGNhbiBrZWVwIHRyYWNrIG9mIHRoZSBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudCBmb3Igbm90aWZpY2F0aW9ucyBieSBmb2xsb3dpbmcgdGhlIHByb2NlZHVyZSBiZWxvdzoNCisgKiAgICAgICAgICAtIFN0b3JlIGluaXRpYWwgcXVldWUgZWxlbWVudCBjb3VudCBpbiBhIHZhcmlhYmxlLg0KKyAqICAgICAgICAgIC0gRGVjcmVtZW50IHRoZSB2YXJpYWJsZSwgd2hpY2ggc3RvcmVzIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIHF1ZXVlIGVsZW1lbnQgY291bnQsIGJ5IG9uZSB3aGVuIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHJldHVybnMgQHJlZiBOUkZfU1VDQ0VTUy4NCisgKiAgICAgICAgICAtIEluY3JlbWVudCB0aGUgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgY3VycmVudCBhdmFpbGFibGUgcXVldWUgZWxlbWVudCBjb3VudCwgYnkgdGhlIGNvdW50IHZhcmlhYmxlIGluIEByZWYgQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUgZXZlbnQuDQorICoNCisgKiBAZXZlbnRzDQorICogQGV2ZW50e0ByZWYgQkxFX0dBVFRTX0VWVF9IVk5fVFhfQ09NUExFVEUsIE5vdGlmaWNhdGlvbiB0cmFuc21pc3Npb24gY29tcGxldGUufQ0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUU19FVlRfSFZDLCBDb25maXJtYXRpb24gcmVjZWl2ZWQgZnJvbSB0aGUgcGVlci59DQorICogQGVuZGV2ZW50cw0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19IVlhfU1lTX0FUVFJTX01JU1NJTkdfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX0hWTl9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfSFZJX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19IVlhfRElTQUJMRURfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICBDb25uZWN0aW9uIGhhbmRsZS4NCisgKiBAcGFyYW1baW5dIHBfaHZ4X3BhcmFtcyBQb2ludGVyIHRvIGFuIEhWeCBwYXJhbWV0ZXJzIHN0cnVjdHVyZS4gSWYgdGhlIHBfZGF0YSBtZW1iZXIgY29udGFpbnMgYSBub24tTlVMTCBwb2ludGVyIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2lsbCBiZSB1cGRhdGVkIHdpdGgNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udGVudHMgcG9pbnRlZCBieSBpdCBiZWZvcmUgc2VuZGluZyB0aGUgbm90aWZpY2F0aW9uIG9yIGluZGljYXRpb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHF1ZXVlZCBhIG5vdGlmaWNhdGlvbiBvciBpbmRpY2F0aW9uIGZvciB0cmFuc21pc3Npb24sIGFuZCBvcHRpb25hbGx5IHVwZGF0ZWQgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQ09OTl9IQU5ETEUgSW52YWxpZCBDb25uZWN0aW9uIEhhbmRsZS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgT25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE5vdGlmaWNhdGlvbnMgYW5kL29yIGluZGljYXRpb25zIG5vdCBlbmFibGVkIGluIHRoZSBDQ0NEDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQW4gQVRUX01UVSBleGNoYW5nZSBpcyBvbmdvaW5nDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQVRUUl9IQU5ETEUgSW52YWxpZCBhdHRyaWJ1dGUgaGFuZGxlKHMpIHN1cHBsaWVkLiBPbmx5IGF0dHJpYnV0ZXMgYWRkZWQgZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIGFyZSBhdmFpbGFibGUgdG8gbm90aWZ5IGFuZCBpbmRpY2F0ZS4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0dBVFRTX0lOVkFMSURfQVRUUl9UWVBFIEludmFsaWQgYXR0cmlidXRlIHR5cGUocykgc3VwcGxpZWQsIG9ubHkgY2hhcmFjdGVyaXN0aWMgdmFsdWVzIG1heSBiZSBub3RpZmllZCBhbmQgaW5kaWNhdGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIEF0dHJpYnV0ZSBub3QgZm91bmQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9GT1JCSURERU4gVGhlIGNvbm5lY3Rpb24ncyBjdXJyZW50IHNlY3VyaXR5IGxldmVsIGlzIGxvd2VyIHRoYW4gdGhlIG9uZSByZXF1aXJlZCBieSB0aGUgd3JpdGUgcGVybWlzc2lvbnMgb2YgdGhlIENDQ0QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhcmFjdGVyaXN0aWMuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9EQVRBX1NJWkUgSW52YWxpZCBkYXRhIHNpemUocykgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIEZvciBAcmVmIEJMRV9HQVRUX0hWWF9JTkRJQ0FUSU9OIFByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLiBXYWl0IGZvciBhIEByZWYgQkxFX0dBVFRTX0VWVF9IVkMgZXZlbnQgYW5kIHJldHJ5Lg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FUVFNfU1lTX0FUVFJfTUlTU0lORyBTeXN0ZW0gYXR0cmlidXRlcyBtaXNzaW5nLCB1c2UgQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfc2V0IHRvIHNldCB0aGVtIHRvIGEga25vd24gdmFsdWUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9SRVNPVVJDRVMgVG9vIG1hbnkgbm90aWZpY2F0aW9ucyBxdWV1ZWQuDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FpdCBmb3IgYSBAcmVmIEJMRV9HQVRUU19FVlRfSFZOX1RYX0NPTVBMRVRFIGV2ZW50IGFuZCByZXRyeS4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX0hWWCwgdWludDMyX3QsIHNkX2JsZV9nYXR0c19odngodWludDE2X3QgY29ubl9oYW5kbGUsIGJsZV9nYXR0c19odnhfcGFyYW1zX3QgY29uc3QgKnBfaHZ4X3BhcmFtcykpOw0KKw0KKy8qKkBicmllZiBJbmRpY2F0ZSB0aGUgU2VydmljZSBDaGFuZ2VkIGF0dHJpYnV0ZSB2YWx1ZS4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCB3aWxsIHNlbmQgYSBIYW5kbGUgVmFsdWUgSW5kaWNhdGlvbiB0byBvbmUgb3IgbW9yZSBwZWVycyBjb25uZWN0ZWQgdG8gaW5mb3JtIHRoZW0gdGhhdCB0aGUgQXR0cmlidXRlDQorICogICAgICAgICAgVGFibGUgbGF5b3V0IGhhcyBjaGFuZ2VkLiBBcyBzb29uIGFzIHRoZSBwZWVyIGhhcyBjb25maXJtZWQgdGhlIGluZGljYXRpb24sIGEgQHJlZiBCTEVfR0FUVFNfRVZUX1NDX0NPTkZJUk0gZXZlbnQgd2lsbA0KKyAqICAgICAgICAgIGJlIGlzc3VlZC4NCisgKg0KKyAqIEBub3RlICAgIFNvbWUgb2YgdGhlIHJlc3RyaWN0aW9ucyBhbmQgbGltaXRhdGlvbnMgdGhhdCBhcHBseSB0byBAcmVmIHNkX2JsZV9nYXR0c19odnggYWxzbyBhcHBseSBoZXJlLg0KKyAqDQorICogQGV2ZW50cw0KKyAqIEBldmVudHtAcmVmIEJMRV9HQVRUU19FVlRfU0NfQ09ORklSTSwgQ29uZmlybWF0aW9uIG9mIGF0dHJpYnV0ZSB0YWJsZSBjaGFuZ2UgcmVjZWl2ZWQgZnJvbSBwZWVyLn0NCisgKiBAZW5kZXZlbnRzDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1NDX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSBjb25uX2hhbmRsZSAgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSBzdGFydF9oYW5kbGUgU3RhcnQgb2YgYWZmZWN0ZWQgYXR0cmlidXRlIGhhbmRsZSByYW5nZS4NCisgKiBAcGFyYW1baW5dIGVuZF9oYW5kbGUgICBFbmQgb2YgYWZmZWN0ZWQgYXR0cmlidXRlIGhhbmRsZSByYW5nZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgcXVldWVkIHRoZSBTZXJ2aWNlIENoYW5nZWQgaW5kaWNhdGlvbiBmb3IgdHJhbnNtaXNzaW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX1NVUFBPUlRFRCBTZXJ2aWNlIENoYW5nZWQgbm90IGVuYWJsZWQgYXQgaW5pdGlhbGl6YXRpb24uIFNlZSBAcmVmDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkX2JsZV9jZmdfc2V0IGFuZCBAcmVmIGJsZV9nYXR0c19jZmdfc2VydmljZV9jaGFuZ2VkX3QuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIE9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3RpZmljYXRpb25zIGFuZC9vciBpbmRpY2F0aW9ucyBub3QgZW5hYmxlZCBpbiB0aGUgQ0NDRA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIEFUVF9NVFUgZXhjaGFuZ2UgaXMgb25nb2luZw0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBJbnZhbGlkIHBhcmFtZXRlcihzKSBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6QkxFX0VSUk9SX0lOVkFMSURfQVRUUl9IQU5ETEUgSW52YWxpZCBhdHRyaWJ1dGUgaGFuZGxlKHMpIHN1cHBsaWVkLCBoYW5kbGVzIG11c3QgYmUgaW4gdGhlIHJhbmdlIHBvcHVsYXRlZCBieSB0aGUgYXBwbGljYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZIFByb2NlZHVyZSBhbHJlYWR5IGluIHByb2dyZXNzLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfR0FUVFNfU1lTX0FUVFJfTUlTU0lORyBTeXN0ZW0gYXR0cmlidXRlcyBtaXNzaW5nLCB1c2UgQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfc2V0IHRvIHNldCB0aGVtIHRvIGEga25vd24gdmFsdWUuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19TRVJWSUNFX0NIQU5HRUQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfc2VydmljZV9jaGFuZ2VkKHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50MTZfdCBzdGFydF9oYW5kbGUsIHVpbnQxNl90IGVuZF9oYW5kbGUpKTsNCisNCisvKipAYnJpZWYgUmVzcG9uZCB0byBhIFJlYWQvV3JpdGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0Lg0KKyAqDQorICogQG5vdGUgVGhpcyBjYWxsIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgYSByZXNwb25zZSB0byBhIEByZWYgQkxFX0dBVFRTX0VWVF9SV19BVVRIT1JJWkVfUkVRVUVTVCBldmVudCBpc3N1ZWQgdG8gdGhlIGFwcGxpY2F0aW9uLg0KKyAqDQorICogQG1zY3MNCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfQVVUSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX0JVRl9BVVRIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19RVUVVRURfV1JJVEVfTk9CVUZfTk9BVVRIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19SRUFEX1JFUV9BVVRIX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19XUklURV9SRVFfQVVUSF9NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfUVVFVUVEX1dSSVRFX1FVRVVFX0ZVTExfTVNDfQ0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX1FVRVVFRF9XUklURV9OT0JVRl9QRUVSX0NBTkNFTF9NU0N9DQorICogQGVuZG1zY3MNCisgKg0KKyAqIEBwYXJhbVtpbl0gY29ubl9oYW5kbGUgICAgICAgICAgICAgICAgIENvbm5lY3Rpb24gaGFuZGxlLg0KKyAqIEBwYXJhbVtpbl0gcF9yd19hdXRob3JpemVfcmVwbHlfcGFyYW1zIFBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgd2l0aCB0aGUgYXR0cmlidXRlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4NCisgKg0KKyAqIEBub3RlIEByZWYgYmxlX2dhdHRzX2F1dGhvcml6ZV9wYXJhbXNfdDo6cF9kYXRhIGlzIGlnbm9yZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVzcG9uZA0KKyAqICAgICAgIHRvIGEgQHJlZiBCTEVfR0FUVFNfQVVUSE9SSVpFX1RZUEVfUkVBRCBldmVudCBpZiBAcmVmIGJsZV9nYXR0c19hdXRob3JpemVfcGFyYW1zX3Q6OnVwZGF0ZQ0KKyAqICAgICAgIGlzIHNldCB0byAwLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICAgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHF1ZXVlZCBhIHJlc3BvbnNlIHRvIHRoZSBwZWVyLCBhbmQgaW4gdGhlIGNhc2Ugb2YgYSB3cml0ZSBvcGVyYXRpb24sIEF0dHJpYnV0ZSBUYWJsZSB1cGRhdGVkLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSICAgIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgICBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUgb3Igbm8gYXV0aG9yaXphdGlvbiByZXF1ZXN0IHBlbmRpbmcuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNICAgQXV0aG9yaXphdGlvbiBvcCBpbnZhbGlkLA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgc3VwcGxpZWQgZG9lcyBub3QgbWF0Y2ggcmVxdWVzdGVkIGhhbmRsZSwNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW52YWxpZCBkYXRhIHRvIGJlIHdyaXR0ZW4gcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfUldfQVVUSE9SSVpFX1JFUExZLCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseSh1aW50MTZfdCBjb25uX2hhbmRsZSwgYmxlX2dhdHRzX3J3X2F1dGhvcml6ZV9yZXBseV9wYXJhbXNfdCBjb25zdCAqcF9yd19hdXRob3JpemVfcmVwbHlfcGFyYW1zKSk7DQorDQorDQorLyoqQGJyaWVmIFVwZGF0ZSBwZXJzaXN0ZW50IHN5c3RlbSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24uDQorICoNCisgKiBAZGV0YWlscyBTdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgcGVyc2lzdGVudCBzeXN0ZW0gYXR0cmlidXRlcyB0byB0aGUgc3RhY2ssDQorICogICAgICAgICAgcHJldmlvdXNseSBvYnRhaW5lZCB1c2luZyBAcmVmIHNkX2JsZV9nYXR0c19zeXNfYXR0cl9nZXQuDQorICogICAgICAgICAgVGhpcyBjYWxsIGlzIG9ubHkgYWxsb3dlZCBmb3IgYWN0aXZlIGNvbm5lY3Rpb25zLCBhbmQgaXMgdXN1YWxseQ0KKyAqICAgICAgICAgIG1hZGUgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHdpdGggYW4ga25vd24gYm9uZGVkIGRldmljZSwNCisgKiAgICAgICAgICBvZnRlbiBhcyBhIHJlc3BvbnNlIHRvIGEgQHJlZiBCTEVfR0FUVFNfRVZUX1NZU19BVFRSX01JU1NJTkcuDQorICoNCisgKiAgICAgICAgICBwX3N5c2F0dHJzIG1heSBwb2ludCBkaXJlY3RseSB0byB0aGUgYXBwbGljYXRpb24ncyBzdG9yZWQgY29weSBvZiB0aGUgc3lzdGVtIGF0dHJpYnV0ZXMNCisgKiAgICAgICAgICBvYnRhaW5lZCB1c2luZyBAcmVmIHNkX2JsZV9nYXR0c19zeXNfYXR0cl9nZXQuDQorICogICAgICAgICAgSWYgdGhlIHBvaW50ZXIgaXMgTlVMTCwgdGhlIHN5c3RlbSBhdHRyaWJ1dGUgaW5mbyBpcyBpbml0aWFsaXplZCwgYXNzdW1pbmcgdGhhdA0KKyAqICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBwcmV2aW91c2x5IHNhdmVkIHN5c3RlbSBhdHRyaWJ1dGUgZGF0YSBmb3IgdGhpcyBkZXZpY2UuDQorICoNCisgKiBAbm90ZSBUaGUgc3RhdGUgb2YgcGVyc2lzdGVudCBzeXN0ZW0gYXR0cmlidXRlcyBpcyByZXNldCB1cG9uIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgdGhlbiByZW1lbWJlcmVkIGZvciBpdHMgZHVyYXRpb24uDQorICoNCisgKiBAbm90ZSBJZiB0aGlzIGNhbGwgcmV0dXJucyB3aXRoIGFuIGVycm9yIGNvZGUgZGlmZmVyZW50IGZyb20gQHJlZiBOUkZfU1VDQ0VTUywgdGhlIHN0b3JhZ2Ugb2YgcGVyc2lzdGVudCBzeXN0ZW0gYXR0cmlidXRlcyBtYXkgaGF2ZSBiZWVuIGNvbXBsZXRlZCBvbmx5IHBhcnRpYWxseS4NCisgKiAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRlIG9mIHRoZSBhdHRyaWJ1dGUgdGFibGUgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlaXRoZXIgcHJvdmlkZSBhIG5ldyBzZXQgb2YgYXR0cmlidXRlcyB1c2luZyB0aGlzIHNhbWUgY2FsbCBvcg0KKyAqICAgICAgIHJlc2V0IHRoZSBTb2Z0RGV2aWNlIHRvIHJldHVybiB0byBhIGtub3duIHN0YXRlLg0KKyAqDQorICogQG5vdGUgV2hlbiB0aGUgQHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR19TWVNfU1JWQ1MgaXMgdXNlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIG9ubHkgdGhlIHN5c3RlbSBhdHRyaWJ1dGVzIGluY2x1ZGVkIGluIHN5c3RlbSBzZXJ2aWNlcyB3aWxsIGJlIG1vZGlmaWVkLg0KKyAqIEBub3RlIFdoZW4gdGhlIEByZWYgQkxFX0dBVFRTX1NZU19BVFRSX0ZMQUdfVVNSX1NSVkNTIGlzIHVzZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLCBvbmx5IHRoZSBzeXN0ZW0gYXR0cmlidXRlcyBpbmNsdWRlZCBpbiB1c2VyIHNlcnZpY2VzIHdpbGwgYmUgbW9kaWZpZWQuDQorICoNCisgKiBAbXNjcw0KKyAqIEBtbXNje0ByZWYgQkxFX0dBVFRTX0hWWF9TWVNfQVRUUlNfTUlTU0lOR19NU0N9DQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJTX1VOS19QRUVSX01TQ30NCisgKiBAbW1zY3tAcmVmIEJMRV9HQVRUU19TWVNfQVRUUlNfQk9OREVEX1BFRVJfTVNDfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dICBjb25uX2hhbmRsZSAgICAgICAgQ29ubmVjdGlvbiBoYW5kbGUuDQorICogQHBhcmFtW2luXSAgcF9zeXNfYXR0cl9kYXRhICAgIFBvaW50ZXIgdG8gYSBzYXZlZCBjb3B5IG9mIHN5c3RlbSBhdHRyaWJ1dGVzIHN1cHBsaWVkIHRvIHRoZSBzdGFjaywgb3IgTlVMTC4NCisgKiBAcGFyYW1baW5dICBsZW4gICAgICAgICAgICAgICAgU2l6ZSBvZiBkYXRhIHBvaW50ZWQgYnkgcF9zeXNfYXR0cl9kYXRhLCBpbiBvY3RldHMuDQorICogQHBhcmFtW2luXSAgZmxhZ3MgICAgICAgICAgICAgIE9wdGlvbmFsIGFkZGl0aW9uYWwgZmxhZ3MsIHNlZSBAcmVmIEJMRV9HQVRUU19TWVNfQVRUUl9GTEFHUw0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzZXQgdGhlIHN5c3RlbSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24uDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgSW52YWxpZCBwb2ludGVyIHN1cHBsaWVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBJbnZhbGlkIENvbm5lY3Rpb24gU3RhdGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1BBUkFNIEludmFsaWQgZmxhZ3Mgc3VwcGxpZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0RBVEEgSW52YWxpZCBkYXRhIHN1cHBsaWVkLCB0aGUgZGF0YSBzaG91bGQgYmUgZXhhY3RseSB0aGUgc2FtZSBhcyByZXRyaWV2ZWQgd2l0aCBAcmVmIHNkX2JsZV9nYXR0c19zeXNfYXR0cl9nZXQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gTm90IGVub3VnaCBtZW1vcnkgdG8gY29tcGxldGUgb3BlcmF0aW9uLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfU1lTX0FUVFJfU0VULCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX3N5c19hdHRyX3NldCh1aW50MTZfdCBjb25uX2hhbmRsZSwgdWludDhfdCBjb25zdCAqcF9zeXNfYXR0cl9kYXRhLCB1aW50MTZfdCBsZW4sIHVpbnQzMl90IGZsYWdzKSk7DQorDQorDQorLyoqQGJyaWVmIFJldHJpZXZlIHBlcnNpc3RlbnQgc3lzdGVtIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGFjay4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgY2FsbCBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHZhbHVlcyB0byBiZSBzdG9yZWQgcGVyc2lzdGVudGx5IGJ5IHRoZSBhcHBsaWNhdGlvbg0KKyAqICAgICAgICAgIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgYSBjb25uZWN0aW9uIG9yIGFmdGVyIGl0IGhhcyBiZWVuIHRlcm1pbmF0ZWQuIFdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB3aXRoIHRoZSBzYW1lIGJvbmRlZCBkZXZpY2UsDQorICogICAgICAgICAgdGhlIHN5c3RlbSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIHdpdGggdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcmVzdG9yZWQgdXNpbmcgdXNpbmcgQHJlZiBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfc2V0Lg0KKyAqICAgICAgICAgIElmIHJldHJpZXZlZCBhZnRlciBkaXNjb25uZWN0aW9uLCB0aGUgZGF0YSBzaG91bGQgYmUgcmVhZCBiZWZvcmUgYSBuZXcgY29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGZvcg0KKyAqICAgICAgICAgIHRoZSBwcmV2aW91cywgbm93IGRpc2Nvbm5lY3RlZCwgY29ubmVjdGlvbiB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCBhIG5ldyBvbmUgaXMgY3JlYXRlZCB0byBhbGxvdyB0aGlzIEFQSSBjYWxsIHRvIHJlZmVyIHRvIGl0Lg0KKyAqICAgICAgICAgIENvbm5lY3Rpb24gaGFuZGxlcyBiZWxvbmdpbmcgdG8gYWN0aXZlIGNvbm5lY3Rpb25zIGNhbiBiZSB1c2VkIGFzIHdlbGwsIGJ1dCBjYXJlIHNob3VsZCBiZSB0YWtlbiBzaW5jZSB0aGUgc3lzdGVtIGF0dHJpYnV0ZXMNCisgKiAgICAgICAgICBtYXkgYmUgd3JpdHRlbiB0byBhdCBhbnkgdGltZSBieSB0aGUgcGVlciBkdXJpbmcgYSBjb25uZWN0aW9uJ3MgbGlmZXRpbWUuDQorICoNCisgKiBAbm90ZSBXaGVuIHRoZSBAcmVmIEJMRV9HQVRUU19TWVNfQVRUUl9GTEFHX1NZU19TUlZDUyBpcyB1c2VkIHdpdGggdGhpcyBmdW5jdGlvbiwgb25seSB0aGUgc3lzdGVtIGF0dHJpYnV0ZXMgaW5jbHVkZWQgaW4gc3lzdGVtIHNlcnZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuDQorICogQG5vdGUgV2hlbiB0aGUgQHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR19VU1JfU1JWQ1MgaXMgdXNlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIG9ubHkgdGhlIHN5c3RlbSBhdHRyaWJ1dGVzIGluY2x1ZGVkIGluIHVzZXIgc2VydmljZXMgd2lsbCBiZSByZXR1cm5lZC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJTX0JPTkRFRF9QRUVSX01TQ30NCisgKiBAZW5kbXNjcw0KKyAqDQorICogQHBhcmFtW2luXSAgICAgY29ubl9oYW5kbGUgICAgICAgQ29ubmVjdGlvbiBoYW5kbGUgb2YgdGhlIHJlY2VudGx5IHRlcm1pbmF0ZWQgY29ubmVjdGlvbi4NCisgKiBAcGFyYW1bb3V0XSAgICBwX3N5c19hdHRyX2RhdGEgICBQb2ludGVyIHRvIGEgYnVmZmVyIHdoZXJlIHVwZGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgc3lzdGVtIGF0dHJpYnV0ZXMgd2lsbCBiZSBmaWxsZWQgaW4uIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgaXMgZGVzY3JpYmVkDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJTX0ZPUk1BVC4gTlVMTCBjYW4gYmUgcHJvdmlkZWQgdG8gb2J0YWluIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEuDQorICogQHBhcmFtW2luLG91dF0gcF9sZW4gICAgICAgICAgICAgU2l6ZSBvZiBhcHBsaWNhdGlvbiBidWZmZXIgaWYgcF9zeXNfYXR0cl9kYXRhIGlzIG5vdCBOVUxMLiBVbmNvbmRpdGlvbmFsbHkgdXBkYXRlZCB0byBhY3R1YWwgbGVuZ3RoIG9mIHN5c3RlbSBhdHRyaWJ1dGUgZGF0YS4NCisgKiBAcGFyYW1baW5dICAgICBmbGFncyAgICAgICAgICAgICBPcHRpb25hbCBhZGRpdGlvbmFsIGZsYWdzLCBzZWUgQHJlZiBCTEVfR0FUVFNfU1lTX0FUVFJfRkxBR1MNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHRoZSBzeXN0ZW0gYXR0cmlidXRlIGluZm9ybWF0aW9uLg0KKyAqIEByZXR2YWwgOjpCTEVfRVJST1JfSU5WQUxJRF9DT05OX0hBTkRMRSBJbnZhbGlkIENvbm5lY3Rpb24gSGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBmbGFncyBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0RBVEFfU0laRSBUaGUgc3lzdGVtIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBkaWQgbm90IGZpdCBpbnRvIHRoZSBwcm92aWRlZCBidWZmZXIuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT1RfRk9VTkQgTm8gc3lzdGVtIGF0dHJpYnV0ZXMgZm91bmQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19TWVNfQVRUUl9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfc3lzX2F0dHJfZ2V0KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50OF90ICpwX3N5c19hdHRyX2RhdGEsIHVpbnQxNl90ICpwX2xlbiwgdWludDMyX3QgZmxhZ3MpKTsNCisNCisNCisvKipAYnJpZWYgUmV0cmlldmUgdGhlIGZpcnN0IHZhbGlkIHVzZXIgYXR0cmlidXRlIGhhbmRsZS4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfaGFuZGxlICAgUG9pbnRlciB0byBhbiBpbnRlZ2VyIHdoZXJlIHRoZSBoYW5kbGUgd2lsbCBiZSBzdG9yZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgaGFuZGxlLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKi8NCitTVkNBTEwoU0RfQkxFX0dBVFRTX0lOSVRJQUxfVVNFUl9IQU5ETEVfR0VULCB1aW50MzJfdCwgc2RfYmxlX2dhdHRzX2luaXRpYWxfdXNlcl9oYW5kbGVfZ2V0KHVpbnQxNl90ICpwX2hhbmRsZSkpOw0KKw0KKy8qKkBicmllZiBSZXRyaWV2ZSB0aGUgYXR0cmlidXRlIFVVSUQgYW5kL29yIG1ldGFkYXRhLg0KKyAqDQorICogQHBhcmFtW2luXSAgaGFuZGxlIEF0dHJpYnV0ZSBoYW5kbGUNCisgKiBAcGFyYW1bb3V0XSBwX3V1aWQgVVVJRCBvZiB0aGUgYXR0cmlidXRlLiBVc2UgTlVMTCB0byBvbWl0IHRoaXMgZmllbGQuDQorICogQHBhcmFtW291dF0gcF9tZCBNZXRhZGF0YSBvZiB0aGUgYXR0cmlidXRlLiBVc2UgTlVMTCB0byBvbWl0IHRoaXMgZmllbGQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB0aGUgYXR0cmlidXRlIG1ldGFkYXRhLA0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSIEludmFsaWQgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBwYXJhbWV0ZXJzIHN1cHBsaWVkLiBSZXR1cm5lZCB3aGVuIGJvdGggQGMgcF91dWlkIGFuZCBAYyBwX21kIGFyZSBOVUxMLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIEF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLg0KKyAqLw0KK1NWQ0FMTChTRF9CTEVfR0FUVFNfQVRUUl9HRVQsIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfYXR0cl9nZXQodWludDE2X3QgaGFuZGxlLCBibGVfdXVpZF90ICogcF91dWlkLCBibGVfZ2F0dHNfYXR0cl9tZF90ICogcF9tZCkpOw0KKw0KKy8qKkBicmllZiBSZXBseSB0byBhbiBBVFRfTVRVIGV4Y2hhbmdlIHJlcXVlc3QgYnkgc2VuZGluZyBhbiBFeGNoYW5nZSBNVFUgUmVzcG9uc2UgdG8gdGhlIGNsaWVudC4NCisgKg0KKyAqIEBkZXRhaWxzIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIHJlcGx5IHRvIGEgQHJlZiBCTEVfR0FUVFNfRVZUX0VYQ0hBTkdFX01UVV9SRVFVRVNUIGV2ZW50Lg0KKyAqDQorICogQGRldGFpbHMgVGhlIFNvZnREZXZpY2Ugc2V0cyBBVFRfTVRVIHRvIHRoZSBtaW5pbXVtIG9mOg0KKyAqICAgICAgICAgIC0gVGhlIENsaWVudCBSWCBNVFUgdmFsdWUgZnJvbSBAcmVmIEJMRV9HQVRUU19FVlRfRVhDSEFOR0VfTVRVX1JFUVVFU1QsIGFuZA0KKyAqICAgICAgICAgIC0gVGhlIFNlcnZlciBSWCBNVFUgdmFsdWUuDQorICoNCisgKiAgICAgICAgICBIb3dldmVyLCB0aGUgU29mdERldmljZSBuZXZlciBzZXRzIEFUVF9NVFUgbG93ZXIgdGhhbiBAcmVmIEJMRV9HQVRUX0FUVF9NVFVfREVGQVVMVC4NCisgKg0KKyAqIEBtc2NzDQorICogQG1tc2N7QHJlZiBCTEVfR0FUVFNfTVRVX0VYQ0hBTkdFfQ0KKyAqIEBlbmRtc2NzDQorICoNCisgKiBAcGFyYW1baW5dIGNvbm5faGFuZGxlICAgIFRoZSBjb25uZWN0aW9uIGhhbmRsZSBpZGVudGlmeWluZyB0aGUgY29ubmVjdGlvbiB0byBwZXJmb3JtIHRoaXMgcHJvY2VkdXJlIG9uLg0KKyAqIEBwYXJhbVtpbl0gc2VydmVyX3J4X210dSAgU2VydmVyIFJYIE1UVSBzaXplLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgbWluaW11bSB2YWx1ZSBpcyBAcmVmIEJMRV9HQVRUX0FUVF9NVFVfREVGQVVMVC4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIG1heGltdW0gdmFsdWUgaXMgQHJlZiBibGVfZ2F0dF9jb25uX2NmZ190OjphdHRfbXR1IGluIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgdGhpcyBjb25uZWN0aW9uLg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgdmFsdWUgbXVzdCBiZSBlcXVhbCB0byBDbGllbnQgUlggTVRVIHNpemUgZ2l2ZW4gaW4gQHJlZiBzZF9ibGVfZ2F0dGNfZXhjaGFuZ2VfbXR1X3JlcXVlc3QNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW4gQVRUX01UVSBleGNoYW5nZSBoYXMgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFN1Y2Nlc3NmdWxseSBzZW50IHJlc3BvbnNlIHRvIHRoZSBjbGllbnQuDQorICogQHJldHZhbCA6OkJMRV9FUlJPUl9JTlZBTElEX0NPTk5fSEFORExFIEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX1NUQVRFIEludmFsaWQgQ29ubmVjdGlvbiBTdGF0ZSBvciBubyBBVFRfTVRVIGV4Y2hhbmdlIHJlcXVlc3QgcGVuZGluZy4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSW52YWxpZCBTZXJ2ZXIgUlggTVRVIHNpemUgc3VwcGxpZWQuDQorICovDQorU1ZDQUxMKFNEX0JMRV9HQVRUU19FWENIQU5HRV9NVFVfUkVQTFksIHVpbnQzMl90LCBzZF9ibGVfZ2F0dHNfZXhjaGFuZ2VfbXR1X3JlcGx5KHVpbnQxNl90IGNvbm5faGFuZGxlLCB1aW50MTZfdCBzZXJ2ZXJfcnhfbXR1KSk7DQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZiAvLyBCTEVfR0FUVFNfSF9fDQorDQorLyoqDQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfaGNpLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9oY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTA5NDlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfaGNpLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorLyoqDQorICBAYWRkdG9ncm91cCBCTEVfQ09NTU9ODQorICBAew0KKyovDQorDQorDQorI2lmbmRlZiBCTEVfSENJX0hfXw0KKyNkZWZpbmUgQkxFX0hDSV9IX18NCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiogQGRlZmdyb3VwIEJMRV9IQ0lfU1RBVFVTX0NPREVTIEJsdWV0b290aCBzdGF0dXMgY29kZXMNCisgKiBAeyAqLw0KKw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgIC8qKjwgU3VjY2Vzcy4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfVU5LTk9XTl9CVExFX0NPTU1BTkQgICAgICAgICAgIDB4MDEgICAvKio8IFVua25vd24gQkxFIENvbW1hbmQuICovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX1VOS05PV05fQ09OTkVDVElPTl9JREVOVElGSUVSICAweDAyICAgLyoqPCBVbmtub3duIENvbm5lY3Rpb24gSWRlbnRpZmllci4gKi8NCisvKjB4MDMgSGFyZHdhcmUgRmFpbHVyZQ0KKzB4MDQgUGFnZSBUaW1lb3V0DQorKi8NCisjZGVmaW5lIEJMRV9IQ0lfQVVUSEVOVElDQVRJT05fRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgIDB4MDUgICAvKio8IEF1dGhlbnRpY2F0aW9uIEZhaWx1cmUuICovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX1BJTl9PUl9LRVlfTUlTU0lORyAgICAgICAgICAgICAweDA2ICAgLyoqPCBQaW4gb3IgS2V5IG1pc3NpbmcuICovDQorI2RlZmluZSBCTEVfSENJX01FTU9SWV9DQVBBQ0lUWV9FWENFRURFRCAgICAgICAgICAgICAgICAgICAweDA3ICAgLyoqPCBNZW1vcnkgQ2FwYWNpdHkgRXhjZWVkZWQuICovDQorI2RlZmluZSBCTEVfSENJX0NPTk5FQ1RJT05fVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAweDA4ICAgLyoqPCBDb25uZWN0aW9uIFRpbWVvdXQuICovDQorLyoweDA5IENvbm5lY3Rpb24gTGltaXQgRXhjZWVkZWQNCisweDBBIFN5bmNocm9ub3VzIENvbm5lY3Rpb24gTGltaXQgVG8gQSBEZXZpY2UgRXhjZWVkZWQNCisweDBCIEFDTCBDb25uZWN0aW9uIEFscmVhZHkgRXhpc3RzKi8NCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfQ09NTUFORF9ESVNBTExPV0VEICAgICAgICAgICAgIDB4MEMgICAvKio8IENvbW1hbmQgRGlzYWxsb3dlZC4gKi8NCisvKjB4MEQgQ29ubmVjdGlvbiBSZWplY3RlZCBkdWUgdG8gTGltaXRlZCBSZXNvdXJjZXMNCisweDBFIENvbm5lY3Rpb24gUmVqZWN0ZWQgRHVlIFRvIFNlY3VyaXR5IFJlYXNvbnMNCisweDBGIENvbm5lY3Rpb24gUmVqZWN0ZWQgZHVlIHRvIFVuYWNjZXB0YWJsZSBCRF9BRERSDQorMHgxMCBDb25uZWN0aW9uIEFjY2VwdCBUaW1lb3V0IEV4Y2VlZGVkDQorMHgxMSBVbnN1cHBvcnRlZCBGZWF0dXJlIG9yIFBhcmFtZXRlciBWYWx1ZSovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX0lOVkFMSURfQlRMRV9DT01NQU5EX1BBUkFNRVRFUlMgMHgxMiAgLyoqPCBJbnZhbGlkIEJMRSBDb21tYW5kIFBhcmFtZXRlcnMuICovDQorI2RlZmluZSBCTEVfSENJX1JFTU9URV9VU0VSX1RFUk1JTkFURURfQ09OTkVDVElPTiAgICAgICAgICAgMHgxMyAgLyoqPCBSZW1vdGUgVXNlciBUZXJtaW5hdGVkIENvbm5lY3Rpb24uICovDQorI2RlZmluZSBCTEVfSENJX1JFTU9URV9ERVZfVEVSTUlOQVRJT05fRFVFX1RPX0xPV19SRVNPVVJDRVMgMHgxNCAgLyoqPCBSZW1vdGUgRGV2aWNlIFRlcm1pbmF0ZWQgQ29ubmVjdGlvbiBkdWUgdG8gbG93IHJlc291cmNlcy4qLw0KKyNkZWZpbmUgQkxFX0hDSV9SRU1PVEVfREVWX1RFUk1JTkFUSU9OX0RVRV9UT19QT1dFUl9PRkYgICAgIDB4MTUgIC8qKjwgUmVtb3RlIERldmljZSBUZXJtaW5hdGVkIENvbm5lY3Rpb24gZHVlIHRvIHBvd2VyIG9mZi4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfTE9DQUxfSE9TVF9URVJNSU5BVEVEX0NPTk5FQ1RJT04gICAgICAgICAgICAweDE2ICAvKio8IExvY2FsIEhvc3QgVGVybWluYXRlZCBDb25uZWN0aW9uLiAqLw0KKy8qDQorMHgxNyBSZXBlYXRlZCBBdHRlbXB0cw0KKzB4MTggUGFpcmluZyBOb3QgQWxsb3dlZA0KKzB4MTkgVW5rbm93biBMTVAgUERVDQorKi8NCisjZGVmaW5lIEJMRV9IQ0lfVU5TVVBQT1JURURfUkVNT1RFX0ZFQVRVUkUgMHgxQSAgICAgICAgICAgICAgICAgICAvKio8IFVuc3VwcG9ydGVkIFJlbW90ZSBGZWF0dXJlLiAqLw0KKy8qDQorMHgxQiBTQ08gT2Zmc2V0IFJlamVjdGVkDQorMHgxQyBTQ08gSW50ZXJ2YWwgUmVqZWN0ZWQNCisweDFEIFNDTyBBaXIgTW9kZSBSZWplY3RlZCovDQorI2RlZmluZSBCTEVfSENJX1NUQVRVU19DT0RFX0lOVkFMSURfTE1QX1BBUkFNRVRFUlMgICAgIDB4MUUgICAgICAgLyoqPCBJbnZhbGlkIExNUCBQYXJhbWV0ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9VTlNQRUNJRklFRF9FUlJPUiAgICAgICAgICAweDFGICAgICAgIC8qKjwgVW5zcGVjaWZpZWQgRXJyb3IuICovDQorLyoweDIwIFVuc3VwcG9ydGVkIExNUCBQYXJhbWV0ZXIgVmFsdWUNCisweDIxIFJvbGUgQ2hhbmdlIE5vdCBBbGxvd2VkDQorKi8NCisjZGVmaW5lIEJMRV9IQ0lfU1RBVFVTX0NPREVfTE1QX1JFU1BPTlNFX1RJTUVPVVQgICAgICAgMHgyMiAgICAgICAvKio8IExNUCBSZXNwb25zZSBUaW1lb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9MTVBfRVJST1JfVFJBTlNBQ1RJT05fQ09MTElTSU9OIDB4MjMgIC8qKjwgTE1QIEVycm9yIFRyYW5zYWN0aW9uIENvbGxpc2lvbi9MTCBQcm9jZWR1cmUgQ29sbGlzaW9uLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9TVEFUVVNfQ09ERV9MTVBfUERVX05PVF9BTExPV0VEICAgICAgICAweDI0ICAgICAgIC8qKjwgTE1QIFBEVSBOb3QgQWxsb3dlZC4gKi8NCisvKjB4MjUgRW5jcnlwdGlvbiBNb2RlIE5vdCBBY2NlcHRhYmxlDQorMHgyNiBMaW5rIEtleSBDYW4gTm90IGJlIENoYW5nZWQNCisweDI3IFJlcXVlc3RlZCBRb1MgTm90IFN1cHBvcnRlZA0KKyovDQorI2RlZmluZSBCTEVfSENJX0lOU1RBTlRfUEFTU0VEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjggICAgICAgLyoqPCBJbnN0YW50IFBhc3NlZC4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfUEFJUklOR19XSVRIX1VOSVRfS0VZX1VOU1VQUE9SVEVEICAgICAgMHgyOSAgICAgICAvKio8IFBhaXJpbmcgd2l0aCBVbml0IEtleSBVbnN1cHBvcnRlZC4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfRElGRkVSRU5UX1RSQU5TQUNUSU9OX0NPTExJU0lPTiAgICAgICAgMHgyQSAgICAgICAvKio8IERpZmZlcmVudCBUcmFuc2FjdGlvbiBDb2xsaXNpb24uICovDQorLyoNCisweDJCIFJlc2VydmVkDQorMHgyQyBRb1MgVW5hY2NlcHRhYmxlIFBhcmFtZXRlcg0KKzB4MkQgUW9TIFJlamVjdGVkDQorMHgyRSBDaGFubmVsIENsYXNzaWZpY2F0aW9uIE5vdCBTdXBwb3J0ZWQNCisweDJGIEluc3VmZmljaWVudCBTZWN1cml0eQ0KKzB4MzAgUGFyYW1ldGVyIE91dCBPZiBNYW5kYXRvcnkgUmFuZ2UNCisweDMxIFJlc2VydmVkDQorMHgzMiBSb2xlIFN3aXRjaCBQZW5kaW5nDQorMHgzMyBSZXNlcnZlZA0KKzB4MzQgUmVzZXJ2ZWQgU2xvdCBWaW9sYXRpb24NCisweDM1IFJvbGUgU3dpdGNoIEZhaWxlZA0KKzB4MzYgRXh0ZW5kZWQgSW5xdWlyeSBSZXNwb25zZSBUb28gTGFyZ2UNCisweDM3IFNlY3VyZSBTaW1wbGUgUGFpcmluZyBOb3QgU3VwcG9ydGVkIEJ5IEhvc3QuDQorMHgzOCBIb3N0IEJ1c3kgLSBQYWlyaW5nDQorMHgzOSBDb25uZWN0aW9uIFJlamVjdGVkIGR1ZSB0byBObyBTdWl0YWJsZSBDaGFubmVsIEZvdW5kKi8NCisjZGVmaW5lIEJMRV9IQ0lfQ09OVFJPTExFUl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHgzQSAgICAgICAvKio8IENvbnRyb2xsZXIgQnVzeS4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfQ09OTl9JTlRFUlZBTF9VTkFDQ0VQVEFCTEUgICAgICAgICAgICAgMHgzQiAgICAgICAvKio8IENvbm5lY3Rpb24gSW50ZXJ2YWwgVW5hY2NlcHRhYmxlLiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9ESVJFQ1RFRF9BRFZFUlRJU0VSX1RJTUVPVVQgICAgICAgICAgICAweDNDICAgICAgIC8qKjwgRGlyZWN0ZWQgQWR2ZXJ0aXNlbWVudCBUaW1lb3V0LiAqLw0KKyNkZWZpbmUgQkxFX0hDSV9DT05OX1RFUk1JTkFURURfRFVFX1RPX01JQ19GQUlMVVJFICAgICAweDNEICAgICAgIC8qKjwgQ29ubmVjdGlvbiBUZXJtaW5hdGVkIGR1ZSB0byBNSUMgRmFpbHVyZS4gKi8NCisjZGVmaW5lIEJMRV9IQ0lfQ09OTl9GQUlMRURfVE9fQkVfRVNUQUJMSVNIRUQgICAgICAgICAgMHgzRSAgICAgICAvKio8IENvbm5lY3Rpb24gRmFpbGVkIHRvIGJlIEVzdGFibGlzaGVkLiAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gQkxFX0hDSV9IX18NCisNCisvKiogQH0gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV9sMmNhcC5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfbDJjYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmFiMjgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfbDJjYXAuaApAQCAtMCwwICsxLDY3IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0wyQ0FQIExvZ2ljYWwgTGluayBDb250cm9sIGFuZCBBZGFwdGF0aW9uIFByb3RvY29sIChMMkNBUCkNCisgIEB7DQorICBAYnJpZWYgRGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBMMkNBUCBpbnRlcmZhY2UuDQorICovDQorDQorI2lmbmRlZiBCTEVfTDJDQVBfSF9fDQorI2RlZmluZSBCTEVfTDJDQVBfSF9fDQorDQorI2luY2x1ZGUgImJsZV90eXBlcy5oIg0KKyNpbmNsdWRlICJibGVfcmFuZ2VzLmgiDQorI2luY2x1ZGUgImJsZV9lcnIuaCINCisjaW5jbHVkZSAibnJmX3N2Yy5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKkBhZGR0b2dyb3VwIEJMRV9MMkNBUF9ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gQkxFX0wyQ0FQX0hfXw0KKw0KKy8qKg0KKyAgQH0NCisqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX3Jhbmdlcy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfcmFuZ2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzYWU5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvYmxlX3Jhbmdlcy5oCkBAIC0wLDAgKzEsMTU0IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgQkxFX0NPTU1PTg0KKyAgQHsNCisgIEBkZWZncm91cCBibGVfcmFuZ2VzIE1vZHVsZSBzcGVjaWZpYyBTVkMsIGV2ZW50IGFuZCBvcHRpb24gbnVtYmVyIHN1YnJhbmdlcw0KKyAgQHsNCisNCisgIEBicmllZiBEZWZpbml0aW9uIG9mIFNWQywgZXZlbnQgYW5kIG9wdGlvbiBudW1iZXIgc3VicmFuZ2VzIGZvciBlYWNoIEFQSSBtb2R1bGUuDQorDQorICBAbm90ZQ0KKyAgU1ZDcywgZXZlbnQgYW5kIG9wdGlvbiBudW1iZXJzIGFyZSBzcGxpdCBpbnRvIHN1YnJhbmdlcyBmb3IgZWFjaCBBUEkgbW9kdWxlLg0KKyAgRWFjaCBtb2R1bGUgcmVjZWl2ZXMgaXRzIGVudGlyZSBhbGxvY2F0ZWQgcmFuZ2Ugb2YgU1ZDIGNhbGxzLCB3aGV0aGVyIGltcGxlbWVudGVkIG9yIG5vdCwNCisgIGJ1dCByZXR1cm4gQkxFX0VSUk9SX05PVF9TVVBQT1JURUQgZm9yIHVuaW1wbGVtZW50ZWQgb3IgdW5kZWZpbmVkIGNhbGxzIGluIGl0cyByYW5nZS4NCisNCisgIE5vdGUgdGhhdCB0aGUgc3ltYm9scyBCTEVfPG1vZHVsZT5fU1ZDX0xBU1QgaXMgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIFNWQyByYW5nZSwNCisgIHJhdGhlciB0aGFuIHRoZSBsYXN0IFNWQyBmdW5jdGlvbiBjYWxsIGFjdHVhbGx5IGRlZmluZWQgYW5kIGltcGxlbWVudGVkLg0KKw0KKyAgU3BlY2lmaWMgU1ZDLCBldmVudCBhbmQgb3B0aW9uIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBlYWNoIG1vZHVsZSdzIGJsZV88bW9kdWxlPi5oIGZpbGUsDQorICB3aGljaCBkZWZpbmVzIG5hbWVzIG9mIGVhY2ggaW5kaXZpZHVhbCBTVkMgY29kZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugc3RhcnQgdmFsdWUuDQorKi8NCisNCisjaWZuZGVmIEJMRV9SQU5HRVNfSF9fDQorI2RlZmluZSBCTEVfUkFOR0VTX0hfXw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgQkxFX1NWQ19CQVNFICAgICAgICAgICAweDYwICAgICAgIC8qKjwgQ29tbW9uIEJMRSBTVkMgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9TVkNfTEFTVCAgICAgICAgICAgMHg2QiAgICAgICAvKio8IENvbW1vbiBCTEUgU1ZDIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FQX1NWQ19CQVNFICAgICAgIDB4NkMgICAgICAgLyoqPCBHQVAgQkxFIFNWQyBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9TVkNfTEFTVCAgICAgICAweDkzICAgICAgIC8qKjwgR0FQIEJMRSBTVkMgbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVRUQ19TVkNfQkFTRSAgICAgMHg5NCAgICAgICAvKio8IEdBVFRDIEJMRSBTVkMgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUQ19TVkNfTEFTVCAgICAgMHg5RiAgICAgICAvKio8IEdBVFRDIEJMRSBTVkMgbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVRUU19TVkNfQkFTRSAgICAgMHhBMCAgICAgICAvKio8IEdBVFRTIEJMRSBTVkMgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9HQVRUU19TVkNfTEFTVCAgICAgMHhBRiAgICAgICAvKio8IEdBVFRTIEJMRSBTVkMgbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9MMkNBUF9TVkNfQkFTRSAgICAgMHhCMCAgICAgICAvKio8IEwyQ0FQIEJMRSBTVkMgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9MMkNBUF9TVkNfTEFTVCAgICAgMHhCRiAgICAgICAvKio8IEwyQ0FQIEJMRSBTVkMgbGFzdC4gKi8NCisNCisNCisjZGVmaW5lIEJMRV9FVlRfSU5WQUxJRCAgICAgICAgMHgwMCAgICAgICAvKio8IEludmFsaWQgQkxFIEV2ZW50LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0VWVF9CQVNFICAgICAgICAgICAweDAxICAgICAgIC8qKjwgQ29tbW9uIEJMRSBFdmVudCBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0VWVF9MQVNUICAgICAgICAgICAweDBGICAgICAgIC8qKjwgQ29tbW9uIEJMRSBFdmVudCBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBUF9FVlRfQkFTRSAgICAgICAweDEwICAgICAgIC8qKjwgR0FQIEJMRSBFdmVudCBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9FVlRfTEFTVCAgICAgICAweDJGICAgICAgIC8qKjwgR0FQIEJMRSBFdmVudCBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0dBVFRDX0VWVF9CQVNFICAgICAweDMwICAgICAgIC8qKjwgR0FUVEMgQkxFIEV2ZW50IGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVENfRVZUX0xBU1QgICAgIDB4NEYgICAgICAgLyoqPCBHQVRUQyBCTEUgRXZlbnQgbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVRUU19FVlRfQkFTRSAgICAgMHg1MCAgICAgICAvKio8IEdBVFRTIEJMRSBFdmVudCBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRTX0VWVF9MQVNUICAgICAweDZGICAgICAgIC8qKjwgR0FUVFMgQkxFIEV2ZW50IGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfTDJDQVBfRVZUX0JBU0UgICAgIDB4NzAgICAgICAgLyoqPCBMMkNBUCBCTEUgRXZlbnQgYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9MMkNBUF9FVlRfTEFTVCAgICAgMHg4RiAgICAgICAvKio8IEwyQ0FQIEJMRSBFdmVudCBsYXN0LiAqLw0KKw0KKw0KKyNkZWZpbmUgQkxFX09QVF9JTlZBTElEICAgICAgICAweDAwICAgICAgIC8qKjwgSW52YWxpZCBCTEUgT3B0aW9uLiAqLw0KKw0KKyNkZWZpbmUgQkxFX09QVF9CQVNFICAgICAgICAgICAweDAxICAgICAgIC8qKjwgQ29tbW9uIEJMRSBPcHRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9PUFRfTEFTVCAgICAgICAgICAgMHgxRiAgICAgICAvKio8IENvbW1vbiBCTEUgT3B0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FQX09QVF9CQVNFICAgICAgIDB4MjAgICAgICAgLyoqPCBHQVAgQkxFIE9wdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9PUFRfTEFTVCAgICAgICAweDNGICAgICAgIC8qKjwgR0FQIEJMRSBPcHRpb24gbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVRUX09QVF9CQVNFICAgICAgMHg0MCAgICAgICAvKio8IEdBVFQgQkxFIE9wdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRfT1BUX0xBU1QgICAgICAweDVGICAgICAgIC8qKjwgR0FUVCBCTEUgT3B0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVENfT1BUX0JBU0UgICAgIDB4NjAgICAgICAgLyoqPCBHQVRUQyBCTEUgT3B0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVENfT1BUX0xBU1QgICAgIDB4N0YgICAgICAgLyoqPCBHQVRUQyBCTEUgT3B0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVFNfT1BUX0JBU0UgICAgIDB4ODAgICAgICAgLyoqPCBHQVRUUyBCTEUgT3B0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVFNfT1BUX0xBU1QgICAgIDB4OUYgICAgICAgLyoqPCBHQVRUUyBCTEUgT3B0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfTDJDQVBfT1BUX0JBU0UgICAgIDB4QTAgICAgICAgLyoqPCBMMkNBUCBCTEUgT3B0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfTDJDQVBfT1BUX0xBU1QgICAgIDB4QkYgICAgICAgLyoqPCBMMkNBUCBCTEUgT3B0aW9uIGxhc3QuICovDQorDQorDQorI2RlZmluZSBCTEVfQ0ZHX0lOVkFMSUQgICAgICAgIDB4MDAgICAgICAgLyoqPCBJbnZhbGlkIEJMRSBjb25maWd1cmF0aW9uLiAqLw0KKw0KKyNkZWZpbmUgQkxFX0NGR19CQVNFICAgICAgICAgICAweDAxICAgICAgIC8qKjwgQ29tbW9uIEJMRSBjb25maWd1cmF0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfQ0ZHX0xBU1QgICAgICAgICAgIDB4MUYgICAgICAgLyoqPCBDb21tb24gQkxFIGNvbmZpZ3VyYXRpb24gbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9DT05OX0NGR19CQVNFICAgICAgMHgyMCAgICAgICAvKio8IEJMRSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9DT05OX0NGR19MQVNUICAgICAgMHgzRiAgICAgICAvKio8IEJMRSBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVBfQ0ZHX0JBU0UgICAgICAgMHg0MCAgICAgICAvKio8IEdBUCBCTEUgY29uZmlndXJhdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBUF9DRkdfTEFTVCAgICAgICAweDVGICAgICAgIC8qKjwgR0FQIEJMRSBjb25maWd1cmF0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVF9DRkdfQkFTRSAgICAgIDB4NjAgICAgICAgLyoqPCBHQVRUIEJMRSBjb25maWd1cmF0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVF9DRkdfTEFTVCAgICAgIDB4N0YgICAgICAgLyoqPCBHQVRUIEJMRSBjb25maWd1cmF0aW9uIGxhc3QuICovDQorDQorI2RlZmluZSBCTEVfR0FUVENfQ0ZHX0JBU0UgICAgIDB4ODAgICAgICAgLyoqPCBHQVRUQyBCTEUgY29uZmlndXJhdGlvbiBiYXNlLiAqLw0KKyNkZWZpbmUgQkxFX0dBVFRDX0NGR19MQVNUICAgICAweDlGICAgICAgIC8qKjwgR0FUVEMgQkxFIGNvbmZpZ3VyYXRpb24gbGFzdC4gKi8NCisNCisjZGVmaW5lIEJMRV9HQVRUU19DRkdfQkFTRSAgICAgMHhBMCAgICAgICAvKio8IEdBVFRTIEJMRSBjb25maWd1cmF0aW9uIGJhc2UuICovDQorI2RlZmluZSBCTEVfR0FUVFNfQ0ZHX0xBU1QgICAgIDB4QkYgICAgICAgLyoqPCBHQVRUUyBCTEUgY29uZmlndXJhdGlvbiBsYXN0LiAqLw0KKw0KKyNkZWZpbmUgQkxFX0wyQ0FQX0NGR19CQVNFICAgICAweEMwICAgICAgIC8qKjwgTDJDQVAgQkxFIGNvbmZpZ3VyYXRpb24gYmFzZS4gKi8NCisjZGVmaW5lIEJMRV9MMkNBUF9DRkdfTEFTVCAgICAgMHhERiAgICAgICAvKio8IEwyQ0FQIEJMRSBjb25maWd1cmF0aW9uIGxhc3QuICovDQorDQorDQorDQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZiAvKiBCTEVfUkFOR0VTX0hfXyAqLw0KKw0KKy8qKg0KKyAgQH0NCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL2JsZV90eXBlcy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjYxYzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ibGVfdHlwZXMuaApAQCAtMCwwICsxLDIwNSBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisNCisvKioNCisgIEBhZGR0b2dyb3VwIEJMRV9DT01NT04NCisgIEB7DQorICBAZGVmZ3JvdXAgYmxlX3R5cGVzIENvbW1vbiB0eXBlcyBhbmQgbWFjcm8gZGVmaW5pdGlvbnMNCisgIEB7DQorDQorICBAYnJpZWYgQ29tbW9uIHR5cGVzIGFuZCBtYWNybyBkZWZpbml0aW9ucyBmb3IgdGhlIEJMRSBTb2Z0RGV2aWNlLg0KKyAqLw0KKw0KKyNpZm5kZWYgQkxFX1RZUEVTX0hfXw0KKyNkZWZpbmUgQkxFX1RZUEVTX0hfXw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX1RZUEVTX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqIEBkZWZncm91cCBCTEVfQ09OTl9IQU5ETEVTIEJMRSBDb25uZWN0aW9uIEhhbmRsZXMNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX0NPTk5fSEFORExFX0lOVkFMSUQgMHhGRkZGICAvKio8IEludmFsaWQgQ29ubmVjdGlvbiBIYW5kbGUuICovDQorI2RlZmluZSBCTEVfQ09OTl9IQU5ETEVfQUxMICAgICAweEZGRkUgIC8qKjwgQXBwbGllcyB0byBhbGwgQ29ubmVjdGlvbiBIYW5kbGVzLiAqLw0KKy8qKiBAfSAqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQkxFX1VVSURfVkFMVUVTIEFzc2lnbmVkIFZhbHVlcyBmb3IgQkxFIFVVSURzDQorICogQHsgKi8NCisvKiBHZW5lcmljIFVVSURzLCBhcHBsaWNhYmxlIHRvIGFsbCBzZXJ2aWNlcyAqLw0KKyNkZWZpbmUgQkxFX1VVSURfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMCAvKio8IFJlc2VydmVkIFVVSUQuICovDQorI2RlZmluZSBCTEVfVVVJRF9TRVJWSUNFX1BSSU1BUlkgICAgICAgICAgICAgICAgICAgICAgMHgyODAwIC8qKjwgUHJpbWFyeSBTZXJ2aWNlLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfU0VSVklDRV9TRUNPTkRBUlkgICAgICAgICAgICAgICAgICAgIDB4MjgwMSAvKio8IFNlY29uZGFyeSBTZXJ2aWNlLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfU0VSVklDRV9JTkNMVURFICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMiAvKio8IEluY2x1ZGUuICovDQorI2RlZmluZSBCTEVfVVVJRF9DSEFSQUNURVJJU1RJQyAgICAgICAgICAgICAgICAgICAgICAgMHgyODAzIC8qKjwgQ2hhcmFjdGVyaXN0aWMuICovDQorI2RlZmluZSBCTEVfVVVJRF9ERVNDUklQVE9SX0NIQVJfRVhUX1BST1AgICAgICAgICAgICAgMHgyOTAwIC8qKjwgQ2hhcmFjdGVyaXN0aWMgRXh0ZW5kZWQgUHJvcGVydGllcyBEZXNjcmlwdG9yLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfREVTQ1JJUFRPUl9DSEFSX1VTRVJfREVTQyAgICAgICAgICAgIDB4MjkwMSAvKio8IENoYXJhY3RlcmlzdGljIFVzZXIgRGVzY3JpcHRpb24gRGVzY3JpcHRvci4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0RFU0NSSVBUT1JfQ0xJRU5UX0NIQVJfQ09ORklHICAgICAgICAweDI5MDIgLyoqPCBDbGllbnQgQ2hhcmFjdGVyaXN0aWMgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfREVTQ1JJUFRPUl9TRVJWRVJfQ0hBUl9DT05GSUcgICAgICAgIDB4MjkwMyAvKio8IFNlcnZlciBDaGFyYWN0ZXJpc3RpYyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IuICovDQorI2RlZmluZSBCTEVfVVVJRF9ERVNDUklQVE9SX0NIQVJfUFJFU0VOVEFUSU9OX0ZPUk1BVCAgMHgyOTA0IC8qKjwgQ2hhcmFjdGVyaXN0aWMgUHJlc2VudGF0aW9uIEZvcm1hdCBEZXNjcmlwdG9yLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfREVTQ1JJUFRPUl9DSEFSX0FHR1JFR0FURV9GT1JNQVQgICAgIDB4MjkwNSAvKio8IENoYXJhY3RlcmlzdGljIEFnZ3JlZ2F0ZSBGb3JtYXQgRGVzY3JpcHRvci4gKi8NCisvKiBHQVRUIHNwZWNpZmljIFVVSURzICovDQorI2RlZmluZSBCTEVfVVVJRF9HQVRUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAxIC8qKjwgR2VuZXJpYyBBdHRyaWJ1dGUgUHJvZmlsZS4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0dBVFRfQ0hBUkFDVEVSSVNUSUNfU0VSVklDRV9DSEFOR0VEICAweDJBMDUgLyoqPCBTZXJ2aWNlIENoYW5nZWQgQ2hhcmFjdGVyaXN0aWMuICovDQorLyogR0FQIHNwZWNpZmljIFVVSURzICovDQorI2RlZmluZSBCTEVfVVVJRF9HQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwIC8qKjwgR2VuZXJpYyBBY2Nlc3MgUHJvZmlsZS4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0dBUF9DSEFSQUNURVJJU1RJQ19ERVZJQ0VfTkFNRSAgICAgICAweDJBMDAgLyoqPCBEZXZpY2UgTmFtZSBDaGFyYWN0ZXJpc3RpYy4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0dBUF9DSEFSQUNURVJJU1RJQ19BUFBFQVJBTkNFICAgICAgICAweDJBMDEgLyoqPCBBcHBlYXJhbmNlIENoYXJhY3RlcmlzdGljLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfR0FQX0NIQVJBQ1RFUklTVElDX1JFQ09OTl9BRERSICAgICAgIDB4MkEwMyAvKio8IFJlY29ubmVjdGlvbiBBZGRyZXNzIENoYXJhY3RlcmlzdGljLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfR0FQX0NIQVJBQ1RFUklTVElDX1BQQ1AgICAgICAgICAgICAgIDB4MkEwNCAvKio8IFBlcmlwaGVyYWwgUHJlZmVycmVkIENvbm5lY3Rpb24gUGFyYW1ldGVycyBDaGFyYWN0ZXJpc3RpYy4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX0dBUF9DSEFSQUNURVJJU1RJQ19DQVIgICAgICAgICAgICAgICAweDJBQTYgLyoqPCBDZW50cmFsIEFkZHJlc3MgUmVzb2x1dGlvbiBDaGFyYWN0ZXJpc3RpYy4gKi8NCisvKiogQH0gKi8NCisNCisNCisvKiogQGRlZmdyb3VwIEJMRV9VVUlEX1RZUEVTIFR5cGVzIG9mIFVVSUQNCisgKiBAeyAqLw0KKyNkZWZpbmUgQkxFX1VVSURfVFlQRV9VTktOT1dOICAgICAgIDB4MDAgLyoqPCBJbnZhbGlkIFVVSUQgdHlwZS4gKi8NCisjZGVmaW5lIEJMRV9VVUlEX1RZUEVfQkxFICAgICAgICAgICAweDAxIC8qKjwgQmx1ZXRvb3RoIFNJRyBVVUlEICgxNi1iaXQpLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfVFlQRV9WRU5ET1JfQkVHSU4gIDB4MDIgLyoqPCBWZW5kb3IgVVVJRCB0eXBlcyBzdGFydCBhdCB0aGlzIGluZGV4ICgxMjgtYml0KS4gKi8NCisvKiogQH0gKi8NCisNCisNCisvKiogQGRlZmdyb3VwIEJMRV9BUFBFQVJBTkNFUyBCbHVldG9vdGggQXBwZWFyYW5jZSB2YWx1ZXMNCisgKiAgQG5vdGUgUmV0cmlldmVkIGZyb20gaHR0cDovL2RldmVsb3Blci5ibHVldG9vdGgub3JnL2dhdHQvY2hhcmFjdGVyaXN0aWNzL1BhZ2VzL0NoYXJhY3RlcmlzdGljVmlld2VyLmFzcHg/dT1vcmcuYmx1ZXRvb3RoLmNoYXJhY3RlcmlzdGljLmdhcC5hcHBlYXJhbmNlLnhtbA0KKyAqIEB7ICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9VTktOT1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qKjwgVW5rbm93bi4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfUEhPTkUgICAgICAgICAgICAgICAgICAgICAgICAgNjQgLyoqPCBHZW5lcmljIFBob25lLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19DT01QVVRFUiAgICAgICAgICAgICAgICAgICAgIDEyOCAvKio8IEdlbmVyaWMgQ29tcHV0ZXIuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX1dBVENIICAgICAgICAgICAgICAgICAgICAgICAgMTkyIC8qKjwgR2VuZXJpYyBXYXRjaC4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX1dBVENIX1NQT1JUU19XQVRDSCAgICAgICAgICAgICAgICAgICAxOTMgLyoqPCBXYXRjaDogU3BvcnRzIFdhdGNoLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19DTE9DSyAgICAgICAgICAgICAgICAgICAgICAgIDI1NiAvKio8IEdlbmVyaWMgQ2xvY2suICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX0RJU1BMQVkgICAgICAgICAgICAgICAgICAgICAgMzIwIC8qKjwgR2VuZXJpYyBEaXNwbGF5LiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19SRU1PVEVfQ09OVFJPTCAgICAgICAgICAgICAgIDM4NCAvKio8IEdlbmVyaWMgUmVtb3RlIENvbnRyb2wuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX0VZRV9HTEFTU0VTICAgICAgICAgICAgICAgICAgNDQ4IC8qKjwgR2VuZXJpYyBFeWUtZ2xhc3Nlcy4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfVEFHICAgICAgICAgICAgICAgICAgICAgICAgICA1MTIgLyoqPCBHZW5lcmljIFRhZy4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfS0VZUklORyAgICAgICAgICAgICAgICAgICAgICA1NzYgLyoqPCBHZW5lcmljIEtleXJpbmcuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX01FRElBX1BMQVlFUiAgICAgICAgICAgICAgICAgNjQwIC8qKjwgR2VuZXJpYyBNZWRpYSBQbGF5ZXIuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX0JBUkNPREVfU0NBTk5FUiAgICAgICAgICAgICAgNzA0IC8qKjwgR2VuZXJpYyBCYXJjb2RlIFNjYW5uZXIuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX1RIRVJNT01FVEVSICAgICAgICAgICAgICAgICAgNzY4IC8qKjwgR2VuZXJpYyBUaGVybW9tZXRlci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX1RIRVJNT01FVEVSX0VBUiAgICAgICAgICAgICAgICAgICAgICA3NjkgLyoqPCBUaGVybW9tZXRlcjogRWFyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19IRUFSVF9SQVRFX1NFTlNPUiAgICAgICAgICAgIDgzMiAvKio8IEdlbmVyaWMgSGVhcnQgcmF0ZSBTZW5zb3IuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9IRUFSVF9SQVRFX1NFTlNPUl9IRUFSVF9SQVRFX0JFTFQgICAgODMzIC8qKjwgSGVhcnQgUmF0ZSBTZW5zb3I6IEhlYXJ0IFJhdGUgQmVsdC4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0dFTkVSSUNfQkxPT0RfUFJFU1NVUkUgICAgICAgICAgICAgICA4OTYgLyoqPCBHZW5lcmljIEJsb29kIFByZXNzdXJlLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfQkxPT0RfUFJFU1NVUkVfQVJNICAgICAgICAgICAgICAgICAgIDg5NyAvKio8IEJsb29kIFByZXNzdXJlOiBBcm0uICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9CTE9PRF9QUkVTU1VSRV9XUklTVCAgICAgICAgICAgICAgICAgODk4IC8qKjwgQmxvb2QgUHJlc3N1cmU6IFdyaXN0LiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19ISUQgICAgICAgICAgICAgICAgICAgICAgICAgIDk2MCAvKio8IEh1bWFuIEludGVyZmFjZSBEZXZpY2UgKEhJRCkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9ISURfS0VZQk9BUkQgICAgICAgICAgICAgICAgICAgICAgICAgOTYxIC8qKjwgS2V5Ym9hcmQgKEhJRCBTdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0hJRF9NT1VTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NjIgLyoqPCBNb3VzZSAoSElEIFN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSElEX0pPWVNUSUNLICAgICAgICAgICAgICAgICAgICAgICAgIDk2MyAvKio8IEpveXN0aWNrIChISUQgU3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9ISURfR0FNRVBBRCAgICAgICAgICAgICAgICAgICAgICAgICAgOTY0IC8qKjwgR2FtZXBhZCAoSElEIFN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSElEX0RJR0lUSVpFUlNVQlRZUEUgICAgICAgICAgICAgICAgIDk2NSAvKio8IERpZ2l0aXplciBUYWJsZXQgKEhJRCBTdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0hJRF9DQVJEX1JFQURFUiAgICAgICAgICAgICAgICAgICAgICA5NjYgLyoqPCBDYXJkIFJlYWRlciAoSElEIFN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfSElEX0RJR0lUQUxfUEVOICAgICAgICAgICAgICAgICAgICAgIDk2NyAvKio8IERpZ2l0YWwgUGVuIChISUQgU3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9ISURfQkFSQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgOTY4IC8qKjwgQmFyY29kZSBTY2FubmVyIChISUQgU3VidHlwZSkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9HRU5FUklDX0dMVUNPU0VfTUVURVIgICAgICAgICAgICAgICAxMDI0IC8qKjwgR2VuZXJpYyBHbHVjb3NlIE1ldGVyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19SVU5OSU5HX1dBTEtJTkdfU0VOU09SICAgICAgMTA4OCAvKio8IEdlbmVyaWMgUnVubmluZyBXYWxraW5nIFNlbnNvci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX1JVTk5JTkdfV0FMS0lOR19TRU5TT1JfSU5fU0hPRSAgICAgIDEwODkgLyoqPCBSdW5uaW5nIFdhbGtpbmcgU2Vuc29yOiBJbi1TaG9lLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfUlVOTklOR19XQUxLSU5HX1NFTlNPUl9PTl9TSE9FICAgICAgMTA5MCAvKio8IFJ1bm5pbmcgV2Fsa2luZyBTZW5zb3I6IE9uLVNob2UuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9SVU5OSU5HX1dBTEtJTkdfU0VOU09SX09OX0hJUCAgICAgICAxMDkxIC8qKjwgUnVubmluZyBXYWxraW5nIFNlbnNvcjogT24tSGlwLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19DWUNMSU5HICAgICAgICAgICAgICAgICAgICAgMTE1MiAvKio8IEdlbmVyaWMgQ3ljbGluZy4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0NZQ0xJTkdfQ1lDTElOR19DT01QVVRFUiAgICAgICAgICAgIDExNTMgLyoqPCBDeWNsaW5nOiBDeWNsaW5nIENvbXB1dGVyLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfQ1lDTElOR19TUEVFRF9TRU5TT1IgICAgICAgICAgICAgICAgMTE1NCAvKio8IEN5Y2xpbmc6IFNwZWVkIFNlbnNvci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0NZQ0xJTkdfQ0FERU5DRV9TRU5TT1IgICAgICAgICAgICAgIDExNTUgLyoqPCBDeWNsaW5nOiBDYWRlbmNlIFNlbnNvci4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX0NZQ0xJTkdfUE9XRVJfU0VOU09SICAgICAgICAgICAgICAgIDExNTYgLyoqPCBDeWNsaW5nOiBQb3dlciBTZW5zb3IuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9DWUNMSU5HX1NQRUVEX0NBREVOQ0VfU0VOU09SICAgICAgICAxMTU3IC8qKjwgQ3ljbGluZzogU3BlZWQgYW5kIENhZGVuY2UgU2Vuc29yLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19QVUxTRV9PWElNRVRFUiAgICAgICAgICAgICAgMzEzNiAvKio8IEdlbmVyaWMgUHVsc2UgT3hpbWV0ZXIuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9QVUxTRV9PWElNRVRFUl9GSU5HRVJUSVAgICAgICAgICAgICAzMTM3IC8qKjwgRmluZ2VydGlwIChQdWxzZSBPeGltZXRlciBzdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX1BVTFNFX09YSU1FVEVSX1dSSVNUX1dPUk4gICAgICAgICAgIDMxMzggLyoqPCBXcmlzdCBXb3JuKFB1bHNlIE94aW1ldGVyIHN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19XRUlHSFRfU0NBTEUgICAgICAgICAgICAgICAgMzIwMCAvKio8IEdlbmVyaWMgV2VpZ2h0IFNjYWxlLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfR0VORVJJQ19PVVRET09SX1NQT1JUU19BQ1QgICAgICAgICAgNTE4NCAvKio8IEdlbmVyaWMgT3V0ZG9vciBTcG9ydHMgQWN0aXZpdHkuICovDQorI2RlZmluZSBCTEVfQVBQRUFSQU5DRV9PVVRET09SX1NQT1JUU19BQ1RfTE9DX0RJU1AgICAgICAgICA1MTg1IC8qKjwgTG9jYXRpb24gRGlzcGxheSBEZXZpY2UgKE91dGRvb3IgU3BvcnRzIEFjdGl2aXR5IHN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfT1VURE9PUl9TUE9SVFNfQUNUX0xPQ19BTkRfTkFWX0RJU1AgNTE4NiAvKio8IExvY2F0aW9uIGFuZCBOYXZpZ2F0aW9uIERpc3BsYXkgRGV2aWNlIChPdXRkb29yIFNwb3J0cyBBY3Rpdml0eSBzdWJ0eXBlKS4gKi8NCisjZGVmaW5lIEJMRV9BUFBFQVJBTkNFX09VVERPT1JfU1BPUlRTX0FDVF9MT0NfUE9EICAgICAgICAgIDUxODcgLyoqPCBMb2NhdGlvbiBQb2QgKE91dGRvb3IgU3BvcnRzIEFjdGl2aXR5IHN1YnR5cGUpLiAqLw0KKyNkZWZpbmUgQkxFX0FQUEVBUkFOQ0VfT1VURE9PUl9TUE9SVFNfQUNUX0xPQ19BTkRfTkFWX1BPRCAgNTE4OCAvKio8IExvY2F0aW9uIGFuZCBOYXZpZ2F0aW9uIFBvZCAoT3V0ZG9vciBTcG9ydHMgQWN0aXZpdHkgc3VidHlwZSkuICovDQorLyoqIEB9ICovDQorDQorLyoqIEBicmllZiBTZXQgLnR5cGUgYW5kIC51dWlkIGZpZWxkcyBvZiBibGVfdXVpZF9zdHJ1Y3QgdG8gc3BlY2lmaWVkIFVVSUQgdmFsdWUuICovDQorI2RlZmluZSBCTEVfVVVJRF9CTEVfQVNTSUdOKGluc3RhbmNlLCB2YWx1ZSkgZG8ge1wNCisgICAgICAgICAgICBpbnN0YW5jZS50eXBlID0gQkxFX1VVSURfVFlQRV9CTEU7IFwNCisgICAgICAgICAgICBpbnN0YW5jZS51dWlkID0gdmFsdWU7fSB3aGlsZSgwKQ0KKw0KKy8qKiBAYnJpZWYgQ29weSB0eXBlIGFuZCB1dWlkIG1lbWJlcnMgZnJvbSBzcmMgdG8gZHN0IGJsZV91dWlkX3QgcG9pbnRlci4gQm90aCBwb2ludGVycyBtdXN0IGJlIHZhbGlkL25vbi1udWxsLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfQ09QWV9QVFIoZHN0LCBzcmMpIGRvIHtcDQorICAgICAgICAgICAgKGRzdCktPnR5cGUgPSAoc3JjKS0+dHlwZTsgXA0KKyAgICAgICAgICAgIChkc3QpLT51dWlkID0gKHNyYyktPnV1aWQ7fSB3aGlsZSgwKQ0KKw0KKy8qKiBAYnJpZWYgQ29weSB0eXBlIGFuZCB1dWlkIG1lbWJlcnMgZnJvbSBzcmMgdG8gZHN0IGJsZV91dWlkX3Qgc3RydWN0LiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfQ09QWV9JTlNUKGRzdCwgc3JjKSBkbyB7XA0KKyAgICAgICAgICAgIChkc3QpLnR5cGUgPSAoc3JjKS50eXBlOyBcDQorICAgICAgICAgICAgKGRzdCkudXVpZCA9IChzcmMpLnV1aWQ7fSB3aGlsZSgwKQ0KKw0KKy8qKiBAYnJpZWYgQ29tcGFyZSBmb3IgZXF1YWxpdHkgYm90aCB0eXBlIGFuZCB1dWlkIG1lbWJlcnMgb2YgdHdvICh2YWxpZCwgbm9uLW51bGwpIGJsZV91dWlkX3QgcG9pbnRlcnMuICovDQorI2RlZmluZSBCTEVfVVVJRF9FUShwX3V1aWQxLCBwX3V1aWQyKSBcDQorICAgICAgICAgICAgKCgocF91dWlkMSktPnR5cGUgPT0gKHBfdXVpZDIpLT50eXBlKSAmJiAoKHBfdXVpZDEpLT51dWlkID09IChwX3V1aWQyKS0+dXVpZCkpDQorDQorLyoqIEBicmllZiBDb21wYXJlIGZvciBkaWZmZXJlbmNlIGJvdGggdHlwZSBhbmQgdXVpZCBtZW1iZXJzIG9mIHR3byAodmFsaWQsIG5vbi1udWxsKSBibGVfdXVpZF90IHBvaW50ZXJzLiAqLw0KKyNkZWZpbmUgQkxFX1VVSURfTkVRKHBfdXVpZDEsIHBfdXVpZDIpIFwNCisgICAgICAgICAgICAoKChwX3V1aWQxKS0+dHlwZSAhPSAocF91dWlkMiktPnR5cGUpIHx8ICgocF91dWlkMSktPnV1aWQgIT0gKHBfdXVpZDIpLT51dWlkKSkNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQkxFX1RZUEVTX1NUUlVDVFVSRVMgU3RydWN0dXJlcw0KKyAqIEB7ICovDQorDQorLyoqIEBicmllZiAxMjggYml0IFVVSUQgdmFsdWVzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCB1dWlkMTI4WzE2XTsgLyoqPCBMaXR0bGUtRW5kaWFuIFVVSUQgYnl0ZXMuICovDQorfSBibGVfdXVpZDEyOF90Ow0KKw0KKy8qKiBAYnJpZWYgIEJsdWV0b290aCBMb3cgRW5lcmd5IFVVSUQgdHlwZSwgZW5jYXBzdWxhdGVzIGJvdGggMTYtYml0IGFuZCAxMjgtYml0IFVVSURzLiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgICAgdXVpZDsgLyoqPCAxNi1iaXQgVVVJRCB2YWx1ZSBvciBvY3RldHMgMTItMTMgb2YgMTI4LWJpdCBVVUlELiAqLw0KKyAgdWludDhfdCAgICAgdHlwZTsgLyoqPCBVVUlEIHR5cGUsIHNlZSBAcmVmIEJMRV9VVUlEX1RZUEVTLiBJZiB0eXBlIGlzIEByZWYgQkxFX1VVSURfVFlQRV9VTktOT1dOLCB0aGUgdmFsdWUgb2YgdXVpZCBpcyB1bmRlZmluZWQuICovDQorfSBibGVfdXVpZF90Ow0KKw0KKy8qKiBAfSAqLw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogQkxFX1RZUEVTX0hfXyAqLw0KKw0KKy8qKg0KKyAgQH0NCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZjUyL25yZl9tYnIuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmNTIvbnJmX21ici5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYmU5NmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZjUyL25yZl9tYnIuaApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYworICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdAorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLgorICoKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworLyoqCisgIEBkZWZncm91cCBucmZfbWJyX2FwaSBNYXN0ZXIgQm9vdCBSZWNvcmQgQVBJCisgIEB7CisKKyAgQGJyaWVmIEFQSXMgZm9yIHVwZGF0aW5nIFNvZnREZXZpY2UgYW5kIEJvb3RMb2FkZXIKKworKi8KKworI2lmbmRlZiBOUkZfTUJSX0hfXworI2RlZmluZSBOUkZfTUJSX0hfXworCisjaW5jbHVkZSAibnJmX3N2Yy5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBAYWRkdG9ncm91cCBOUkZfTUJSX0RFRklORVMgRGVmaW5lcworICogQHsgKi8KKworLyoqQGJyaWVmIE1CUiBTVkMgQmFzZSBudW1iZXIuICovCisjZGVmaW5lIE1CUl9TVkNfQkFTRSAgICAgICAgICAgICgweDE4KQorCisvKipAYnJpZWYgUGFnZSBzaXplIGluIHdvcmRzLiAqLworI2RlZmluZSBNQlJfUEFHRV9TSVpFX0lOX1dPUkRTICAoMTAyNCkKKworLyoqIEBicmllZiBUaGUgc2l6ZSB0aGF0IG11c3QgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBNQlIgd2hlbiBhIFNvZnREZXZpY2UgaXMgd3JpdHRlbiB0byBmbGFzaC4KK1RoaXMgaXMgdGhlIG9mZnNldCB3aGVyZSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgU29mdERldmljZSBoZXggZmlsZSBpcyB3cml0dGVuLiovCisjZGVmaW5lIE1CUl9TSVpFICAgICAgICAgICAgICAgICgweDEwMDApCisKKy8qKiBAfSAqLworCisvKiogQGFkZHRvZ3JvdXAgTlJGX01CUl9FTlVNUyBFbnVtZXJhdGlvbnMKKyAqIEB7ICovCisKKy8qKkBicmllZiBuUkYgTWFzdGVyIEJvb3QgUmVjb3JkIEFQSSBTVkMgbnVtYmVycy4gKi8KK2VudW0gTlJGX01CUl9TVkNTCit7CisgIFNEX01CUl9DT01NQU5EID0gTUJSX1NWQ19CQVNFLCAvKio8IDo6c2RfbWJyX2NvbW1hbmQgKi8KK307CisKKy8qKkBicmllZiBQb3NzaWJsZSB2YWx1ZXMgZm9yIDo6c2RfbWJyX2NvbW1hbmRfdC5jb21tYW5kICovCitlbnVtIE5SRl9NQlJfQ09NTUFORFMKK3sKKyAgU0RfTUJSX0NPTU1BTkRfQ09QWV9CTCwgICAgICAgICAgICAgICAvKio8IENvcHkgYSBuZXcgQm9vdExvYWRlci4gQHNlZSBzZF9tYnJfY29tbWFuZF9jb3B5X2JsX3QqLworICBTRF9NQlJfQ09NTUFORF9DT1BZX1NELCAgICAgICAgICAgICAgIC8qKjwgQ29weSBhIG5ldyBTb2Z0RGV2aWNlLiBAc2VlIDo6c2RfbWJyX2NvbW1hbmRfY29weV9zZF90Ki8KKyAgU0RfTUJSX0NPTU1BTkRfSU5JVF9TRCwgICAgICAgICAgICAgICAvKio8IEluaXRpYWxpemUgZm9yd2FyZGluZyBpbnRlcnJ1cHRzIHRvIFNELCBhbmQgcnVuIHJlc2V0IGZ1bmN0aW9uIGluIFNEKi8KKyAgU0RfTUJSX0NPTU1BTkRfQ09NUEFSRSwgICAgICAgICAgICAgICAvKio8IFRoaXMgY29tbWFuZCB3b3JrcyBsaWtlIG1lbWNtcC4gQHNlZSA6OnNkX21icl9jb21tYW5kX2NvbXBhcmVfdCovCisgIFNEX01CUl9DT01NQU5EX1ZFQ1RPUl9UQUJMRV9CQVNFX1NFVCwgLyoqPCBTdGFydCBmb3J3YXJkaW5nIGFsbCBleGNlcHRpb24gdG8gdGhpcyBhZGRyZXNzIEBzZWUgOjpzZF9tYnJfY29tbWFuZF92ZWN0b3JfdGFibGVfYmFzZV9zZXRfdCovCit9OworCisvKiogQH0gKi8KKworLyoqIEBhZGR0b2dyb3VwIE5SRl9NQlJfVFlQRVMgVHlwZXMKKyAqIEB7ICovCisKKy8qKkBicmllZiBUaGlzIGNvbW1hbmQgY29waWVzIHBhcnQgb2YgYSBuZXcgU29mdERldmljZQorICogVGhlIGRlc3RpbmF0aW9uIGFyZWEgaXMgZXJhc2VkIGJlZm9yZSBjb3B5aW5nLgorICogSWYgZHN0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBmbGFzaCBwYWdlLCB0aGF0IHdob2xlIGZsYXNoIHBhZ2Ugd2lsbCBiZSBlcmFzZWQuCisgKiBJZiAoZHN0K2xlbikgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIGZsYXNoIHBhZ2UsIHRoYXQgd2hvbGUgZmxhc2ggcGFnZSB3aWxsIGJlIGVyYXNlZC4KKyAqCisgKiBUaGUgdXNlciBvZiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBCUFJPVCByZWdpc3RlcnMuCisgKgorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIGluZGljYXRlcyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbWVtb3J5IGJsb2NrcyB3aGVyZSBjb3BpZWQgY29ycmVjdGx5LgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlRFUk5BTCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIG1lbW9yeSBibG9ja3Mgd2hlcmUgbm90IHZlcmlmaWVkIGNvcnJlY3RseSBhZnRlciBjb3B5aW5nLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCAqc3JjOyAgLyoqPCBQb2ludGVyIHRvIHRoZSBzb3VyY2Ugb2YgZGF0YSB0byBiZSBjb3BpZWQuKi8KKyAgdWludDMyX3QgKmRzdDsgIC8qKjwgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gd2hlcmUgdGhlIGNvbnRlbnQgaXMgdG8gYmUgY29waWVkLiovCisgIHVpbnQzMl90IGxlbjsgICAvKio8IE51bWJlciBvZiAzMiBiaXQgd29yZHMgdG8gY29weS4gTXVzdCBiZSBhIG11bHRpcGxlIG9mIEByZWYgTUJSX1BBR0VfU0laRV9JTl9XT1JEUyB3b3Jkcy4qLworfSBzZF9tYnJfY29tbWFuZF9jb3B5X3NkX3Q7CisKKworLyoqQGJyaWVmIFRoaXMgY29tbWFuZCB3b3JrcyBsaWtlIG1lbWNtcCwgYnV0IHRha2VzIHRoZSBsZW5ndGggaW4gd29yZHMuCisgKgorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIGluZGljYXRlcyB0aGF0IHRoZSBjb250ZW50cyBvZiBib3RoIG1lbW9yeSBibG9ja3MgYXJlIGVxdWFsLgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OVUxMIGluZGljYXRlcyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbWVtb3J5IGJsb2NrcyBhcmUgbm90IGVxdWFsLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCAqcHRyMTsgLyoqPCBQb2ludGVyIHRvIGJsb2NrIG9mIG1lbW9yeS4gKi8KKyAgdWludDMyX3QgKnB0cjI7IC8qKjwgUG9pbnRlciB0byBibG9jayBvZiBtZW1vcnkuICovCisgIHVpbnQzMl90IGxlbjsgICAvKio8IE51bWJlciBvZiAzMiBiaXQgd29yZHMgdG8gY29tcGFyZS4qLworfSBzZF9tYnJfY29tbWFuZF9jb21wYXJlX3Q7CisKKworLyoqQGJyaWVmIFRoaXMgY29tbWFuZCBjb3BpZXMgYSBuZXcgQm9vdExvYWRlci4KKyAqICBXaXRoIHRoaXMgY29tbWFuZCwgZGVzdGluYXRpb24gb2YgQm9vdExvYWRlciBpcyBhbHdheXMgdGhlIGFkZHJlc3Mgd3JpdHRlbiBpbiBOUkZfVUlDUi0+Qk9PVEFERFIuCisgKgorICogIERlc3RpbmF0aW9uIGlzIGVyYXNlZCBieSB0aGlzIGZ1bmN0aW9uLgorICogIElmIChkZXN0aW5hdGlvbitibF9sZW4pIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBmbGFzaCBwYWdlLCB0aGF0IHdob2xlIGZsYXNoIHBhZ2Ugd2lsbCBiZSBlcmFzZWQuCisgKgorICogIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgUFJPVEVOU0VUIHRvIHByb3RlY3QgdGhlIGZsYXNoIHRoYXQgaXMgbm90IGludGVuZGVkIHRvIGJlIHdyaXR0ZW4uCisgKgorICogIE9uIHN1Y2Nlc3MsIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgcmV0dXJuLiBJdCB3aWxsIHN0YXJ0IHRoZSBuZXcgQm9vdExvYWRlciBmcm9tIHJlc2V0LXZlY3RvciBhcyBub3JtYWwuCisgKgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlRFUk5BTCBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgdGhhdCBzaG91bGQgbm90IGhhcHBlbi4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIGlmIE5SRl9VSUNSLT5CT09UQUREUiBpcyBub3Qgc2V0LgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCBpZiBwYXJhbWV0ZXJzIGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgb3V0c2lkZSBmbGFzaCBhcmVhLgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9OT19NRU0gaWYgbm8gcGFyYW1ldGVyIHBhZ2UgaXMgcHJvdmlkZWQgKHNlZSBTb2Z0RGV2aWNlIFNwZWNpZmljYXRpb24gZm9yIG1vcmUgaW5mbykKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDMyX3QgKmJsX3NyYzsgIC8qKjwgUG9pbnRlciB0byB0aGUgc291cmNlIG9mIHRoZSBCb290bG9hZGVyIHRvIGJlIGJlIGNvcGllZC4qLworICB1aW50MzJfdCBibF9sZW47ICAgLyoqPCBOdW1iZXIgb2YgMzIgYml0IHdvcmRzIHRvIGNvcHkgZm9yIEJvb3RMb2FkZXIuICovCit9IHNkX21icl9jb21tYW5kX2NvcHlfYmxfdDsKKworLyoqQGJyaWVmIFNldHMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciB0YWJsZSBmb3IgaW50ZXJydXB0cyBmb3J3YXJkZWQgZnJvbSB0aGUgTUJSCisgKgorICogT25jZSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCwgdGhpcyBhZGRyZXNzIGlzIHdoZXJlIHRoZSBNQlIgd2lsbCBzdGFydCB0byBmb3J3YXJkIGludGVycnVwdHMgdG8gYWZ0ZXIgYSByZXNldC4KKyAqCisgKiBUbyByZXN0b3JlIGRlZmF1bHQgZm9yd2FyZGluZyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBAcGFyYW0gYWRkcmVzcyBzZXQgdG8gMC4KKyAqIFRoZSBNQlIgd2lsbCB0aGVuIHN0YXJ0IGZvcndhcmRpbmcgdG8gaW50ZXJydXB0cyB0byB0aGUgYWRkcmVzcyBpbiBORlJfVUlDUi0+Qk9PVEFERFIgb3IgdG8gdGhlIFNvZnREZXZpY2UgaWYgdGhlIEJPT1RBRERSIGlzIG5vdCBzZXQuCisgKgorICogT24gc3VjY2VzcywgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4uIEl0IHdpbGwgcmVzZXQgdGhlIGRldmljZS4KKyAqCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVEVSTkFMIGluZGljYXRlcyBhbiBpbnRlcm5hbCBlcnJvciB0aGF0IHNob3VsZCBub3QgaGFwcGVuLgorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgaWYgcGFyYW1ldGVyIGFkZHJlc3MgaXMgb3V0c2lkZSBvZiB0aGUgZmxhc2ggc2l6ZS4KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9fTUVNIGlmIG5vIHBhcmFtZXRlciBwYWdlIGlzIHByb3ZpZGVkIChzZWUgU29mdERldmljZSBTcGVjaWZpY2F0aW9uIGZvciBtb3JlIGluZm8pCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVpbnQzMl90IGFkZHJlc3M7IC8qKjwgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciB0YWJsZSBmb3IgZm9yd2FyZGVkIGludGVycnVwdHMuKi8KK30gc2RfbWJyX2NvbW1hbmRfdmVjdG9yX3RhYmxlX2Jhc2Vfc2V0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDMyX3QgY29tbWFuZDsgIC8qKjwgdHlwZSBvZiBjb21tYW5kIHRvIGJlIGlzc3VlZCBzZWUgQHJlZiBOUkZfTUJSX0NPTU1BTkRTLiAqLworICB1bmlvbgorICB7CisgICAgc2RfbWJyX2NvbW1hbmRfY29weV9zZF90IGNvcHlfc2Q7ICAvKio8IFBhcmFtZXRlcnMgZm9yIGNvcHkgU29mdERldmljZS4qLworICAgIHNkX21icl9jb21tYW5kX2NvbXBhcmVfdCBjb21wYXJlOyAgLyoqPCBQYXJhbWV0ZXJzIGZvciB2ZXJpZnkuKi8KKyAgICBzZF9tYnJfY29tbWFuZF9jb3B5X2JsX3QgY29weV9ibDsgIC8qKjwgUGFyYW1ldGVycyBmb3IgY29weSBCb290TG9hZGVyLiBSZXF1aXJlcyBwYXJhbWV0ZXIgcGFnZS4gKi8KKyAgICBzZF9tYnJfY29tbWFuZF92ZWN0b3JfdGFibGVfYmFzZV9zZXRfdCBiYXNlX3NldDsgLyoqPCBQYXJhbWV0ZXJzIGZvciB2ZWN0b3IgdGFibGUgYmFzZSBzZXQuIFJlcXVpcmVzIHBhcmFtZXRlciBwYWdlLiovCisgIH0gcGFyYW1zOworfSBzZF9tYnJfY29tbWFuZF90OworCisvKiogQH0gKi8KKworLyoqIEBhZGR0b2dyb3VwIE5SRl9NQlJfRlVOQ1RJT05TIEZ1bmN0aW9ucworICogQHsgKi8KKworLyoqQGJyaWVmIElzc3VlIE1hc3RlciBCb290IFJlY29yZCBjb21tYW5kcworICoKKyAqIENvbW1hbmRzIHVzZWQgd2hlbiB1cGRhdGluZyBhIFNvZnREZXZpY2UgYW5kIGJvb3Rsb2FkZXIuCisgKgorICogVGhlIFNEX01CUl9DT01NQU5EX0NPUFlfQkwgYW5kIFNEX01CUl9DT01NQU5EX1ZFQ1RPUl9UQUJMRV9CQVNFX1NFVCByZXF1aXJlcyBwYXJhbWV0ZXJzIHRvIGJlCisgKiByZXRhaW5lZCBieSB0aGUgTUJSIHdoZW4gcmVzZXR0aW5nIHRoZSBJQy4gVGhpcyBpcyBkb25lIGluIGEgc2VwYXJhdGUgZmxhc2ggcGFnZQorICogcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBUaGUgVUlDUiByZWdpc3RlciBVSUNSLk5SRkZXWzFdIG11c3QgYmUgc2V0CisgKiB0byBhbiBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gYSBwYWdlIGluIHRoZSBhcHBsaWNhdGlvbiBmbGFzaCBzcGFjZS4gVGhpcyBwYWdlIHdpbGwgYmUgY2xlYXJlZAorICogYnkgdGhlIE1CUiBhbmQgdXNlZCB0byBzdG9yZSB0aGUgY29tbWFuZCBiZWZvcmUgcmVzZXQuIFdoZW4gdGhlIFVJQ1IuTlJGRldbMV0gZmllbGQgaXMgc2V0CisgKiB0aGUgcGFnZSBpdCByZWZlcnMgdG8gbXVzdCBub3QgYmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uIElmIHRoZSBVSUNSLk5SRkZXWzFdIGlzIHNldCB0bworICogMHhGRkZGRkZGRiAodGhlIGRlZmF1bHQpIE1CUiBjb21tYW5kcyB3aGljaCB1c2UgZmxhc2ggd2lsbCBiZSB1bmF2YWlsYWJsZSBhbmQgcmV0dXJuCisgKiBOUkZfRVJST1JfTk9fTUVNLgorICoKKyAqIEBwYXJhbVtpbl0gIHBhcmFtIFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGVzY3JpYmluZyB0aGUgY29tbWFuZC4KKyAqCisgKiBAbm90ZSBGb3IgcmV0dXJuIHZhbHVlcywgc2VlIDo6c2RfbWJyX2NvbW1hbmRfY29weV9zZF90IDo6c2RfbWJyX2NvbW1hbmRfY29weV9ibF90IDo6c2RfbWJyX2NvbW1hbmRfY29tcGFyZV90IDo6c2RfbWJyX2NvbW1hbmRfdmVjdG9yX3RhYmxlX2Jhc2Vfc2V0X3QKKyAqCisgKiBAcmV0dmFsIE5SRl9FUlJPUl9OT19NRU0gaWYgVUlDUi5OUkZGV1sxXSBpcyBub3Qgc2V0IChpLmUuIGlzIDB4RkZGRkZGRkYpLgorICogQHJldHZhbCBOUkZfRVJST1JfSU5WQUxJRF9QQVJBTSBpZiBhbiBpbnZhbGlkIGNvbW1hbmQgaXMgZ2l2ZW4uCisqLworU1ZDQUxMKFNEX01CUl9DT01NQU5ELCB1aW50MzJfdCwgc2RfbWJyX2NvbW1hbmQoc2RfbWJyX2NvbW1hbmRfdCogcGFyYW0pKTsKKworLyoqIEB9ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gTlJGX01CUl9IX18KKworLyoqCisgIEB9CisqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfZXJyb3IuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjZTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yLmgKQEAgLTAsMCArMSw4NyBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQQ0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXINCisgKiAgIGNvbnRyaWJ1dG9ycyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KKyAqICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiAgIDQuIFRoaXMgc29mdHdhcmUgbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYw0KKyAqICAgU2VtaWNvbmR1Y3RvciBBU0EsIG9yIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBhIHRoaXJkIHBhcnR5IHRoYXQNCisgKiAgIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljIFNlbWljb25kdWN0b3IuDQorICoNCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKi8NCisgLyoqDQorICBAZGVmZ3JvdXAgbnJmX2Vycm9yIFNvZnREZXZpY2UgR2xvYmFsIEVycm9yIENvZGVzDQorICBAew0KKw0KKyAgQGJyaWVmIEdsb2JhbCBFcnJvciBkZWZpbml0aW9ucw0KKyovDQorDQorLyogSGVhZGVyIGd1YXJkICovDQorI2lmbmRlZiBOUkZfRVJST1JfSF9fDQorI2RlZmluZSBOUkZfRVJST1JfSF9fDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqIEBkZWZncm91cCBOUkZfRVJST1JTX0JBU0UgRXJyb3IgQ29kZXMgQmFzZSBudW1iZXIgZGVmaW5pdGlvbnMNCisgKiBAeyAqLw0KKyNkZWZpbmUgTlJGX0VSUk9SX0JBU0VfTlVNICAgICAgKDB4MCkgICAgICAgLy8vPCBHbG9iYWwgZXJyb3IgYmFzZQ0KKyNkZWZpbmUgTlJGX0VSUk9SX1NETV9CQVNFX05VTSAgKDB4MTAwMCkgICAgLy8vPCBTRE0gZXJyb3IgYmFzZQ0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19CQVNFX05VTSAgKDB4MjAwMCkgICAgLy8vPCBTb0MgZXJyb3IgYmFzZQ0KKyNkZWZpbmUgTlJGX0VSUk9SX1NUS19CQVNFX05VTSAgKDB4MzAwMCkgICAgLy8vPCBTVEsgZXJyb3IgYmFzZQ0KKy8qKiBAfSAqLw0KKw0KKyNkZWZpbmUgTlJGX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMCkgIC8vLzwgU3VjY2Vzc2Z1bCBjb21tYW5kDQorI2RlZmluZSBOUkZfRVJST1JfU1ZDX0hBTkRMRVJfTUlTU0lORyAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxKSAgLy8vPCBTVkMgaGFuZGxlciBpcyBtaXNzaW5nDQorI2RlZmluZSBOUkZfRVJST1JfU09GVERFVklDRV9OT1RfRU5BQkxFRCAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAyKSAgLy8vPCBTb2Z0RGV2aWNlIGhhcyBub3QgYmVlbiBlbmFibGVkDQorI2RlZmluZSBOUkZfRVJST1JfSU5URVJOQUwgICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAzKSAgLy8vPCBJbnRlcm5hbCBFcnJvcg0KKyNkZWZpbmUgTlJGX0VSUk9SX05PX01FTSAgICAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgNCkgIC8vLzwgTm8gTWVtb3J5IGZvciBvcGVyYXRpb24NCisjZGVmaW5lIE5SRl9FUlJPUl9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDUpICAvLy88IE5vdCBmb3VuZA0KKyNkZWZpbmUgTlJGX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgNikgIC8vLzwgTm90IHN1cHBvcnRlZA0KKyNkZWZpbmUgTlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgNykgIC8vLzwgSW52YWxpZCBQYXJhbWV0ZXINCisjZGVmaW5lIE5SRl9FUlJPUl9JTlZBTElEX1NUQVRFICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDgpICAvLy88IEludmFsaWQgc3RhdGUsIG9wZXJhdGlvbiBkaXNhbGxvd2VkIGluIHRoaXMgc3RhdGUNCisjZGVmaW5lIE5SRl9FUlJPUl9JTlZBTElEX0xFTkdUSCAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDkpICAvLy88IEludmFsaWQgTGVuZ3RoDQorI2RlZmluZSBOUkZfRVJST1JfSU5WQUxJRF9GTEFHUyAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxMCkgLy8vPCBJbnZhbGlkIEZsYWdzDQorI2RlZmluZSBOUkZfRVJST1JfSU5WQUxJRF9EQVRBICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxMSkgLy8vPCBJbnZhbGlkIERhdGENCisjZGVmaW5lIE5SRl9FUlJPUl9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDEyKSAvLy88IEludmFsaWQgRGF0YSBzaXplDQorI2RlZmluZSBOUkZfRVJST1JfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxMykgLy8vPCBPcGVyYXRpb24gdGltZWQgb3V0DQorI2RlZmluZSBOUkZfRVJST1JfTlVMTCAgICAgICAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfQkFTRV9OVU0gKyAxNCkgLy8vPCBOdWxsIFBvaW50ZXINCisjZGVmaW5lIE5SRl9FUlJPUl9GT1JCSURERU4gICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDE1KSAvLy88IEZvcmJpZGRlbiBPcGVyYXRpb24NCisjZGVmaW5lIE5SRl9FUlJPUl9JTlZBTElEX0FERFIgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9CQVNFX05VTSArIDE2KSAvLy88IEJhZCBNZW1vcnkgQWRkcmVzcw0KKyNkZWZpbmUgTlJGX0VSUk9SX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTcpIC8vLzwgQnVzeQ0KKyNkZWZpbmUgTlJGX0VSUk9SX0NPTk5fQ09VTlQgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTgpIC8vLzwgTWF4aW11bSBjb25uZWN0aW9uIGNvdW50IGV4Y2VlZGVkLg0KKyNkZWZpbmUgTlJGX0VSUk9SX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX0JBU0VfTlVNICsgMTkpIC8vLzwgTm90IGVub3VnaCByZXNvdXJjZXMgZm9yIG9wZXJhdGlvbg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gTlJGX0VSUk9SX0hfXw0KKw0KKy8qKg0KKyAgQH0NCisqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yX3NkbS5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfZXJyb3Jfc2RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlYTg1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yX3NkbS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorIC8qKg0KKyAgQGFkZHRvZ3JvdXAgbnJmX3NkbV9hcGkNCisgIEB7DQorICBAZGVmZ3JvdXAgbnJmX3NkbV9lcnJvciBTb2Z0RGV2aWNlIE1hbmFnZXIgRXJyb3IgQ29kZXMNCisgIEB7DQorDQorICBAYnJpZWYgRXJyb3IgZGVmaW5pdGlvbnMgZm9yIHRoZSBTRE0gQVBJDQorKi8NCisNCisvKiBIZWFkZXIgZ3VhcmQgKi8NCisjaWZuZGVmIE5SRl9FUlJPUl9TRE1fSF9fDQorI2RlZmluZSBOUkZfRVJST1JfU0RNX0hfXw0KKw0KKyNpbmNsdWRlICJucmZfZXJyb3IuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjZGVmaW5lIE5SRl9FUlJPUl9TRE1fTEZDTEtfU09VUkNFX1VOS05PV04gICAgICAgICAgICAgIChOUkZfRVJST1JfU0RNX0JBU0VfTlVNICsgMCkgIC8vLzwgVW5rbm93biBMRkNMSyBzb3VyY2UuDQorI2RlZmluZSBOUkZfRVJST1JfU0RNX0lOQ09SUkVDVF9JTlRFUlJVUFRfQ09ORklHVVJBVElPTiAoTlJGX0VSUk9SX1NETV9CQVNFX05VTSArIDEpICAvLy88IEluY29ycmVjdCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAoY2FuIGJlIGNhdXNlZCBieSB1c2luZyBpbGxlZ2FsIHByaW9yaXR5IGxldmVscywgb3IgaGF2aW5nIGVuYWJsZWQgU29mdERldmljZSBpbnRlcnJ1cHRzKS4NCisjZGVmaW5lIE5SRl9FUlJPUl9TRE1fSU5DT1JSRUNUX0NMRU5SMCAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfU0RNX0JBU0VfTlVNICsgMikgIC8vLzwgSW5jb3JyZWN0IENMRU5SMCAoY2FuIGJlIGNhdXNlZCBieSBlcnJvbmVvdXMgU29mdERldmljZSBmbGFzaGluZykuDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZiAvLyBOUkZfRVJST1JfU0RNX0hfXw0KKw0KKy8qKg0KKyAgQH0NCisgIEB9DQorKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zb2MuaCBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX2Vycm9yX3NvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzZmYzQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9lcnJvcl9zb2MuaApAQCAtMCwwICsxLDgyIEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgTm9yZGljIFNlbWljb25kdWN0b3IgQVNBDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKyAqDQorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0Egbm9yIHRoZSBuYW1lcyBvZiBvdGhlcg0KKyAqICAgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorICogICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqICAgNC4gVGhpcyBzb2Z0d2FyZSBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgTm9yZGljDQorICogICBTZW1pY29uZHVjdG9yIEFTQSwgb3IgaW4gYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IGEgdGhpcmQgcGFydHkgdGhhdA0KKyAqICAgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMgU2VtaWNvbmR1Y3Rvci4NCisgKg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqLw0KKy8qKg0KKyAgQGFkZHRvZ3JvdXAgbnJmX3NvY19hcGkNCisgIEB7DQorICBAZGVmZ3JvdXAgbnJmX3NvY19lcnJvciBTb0MgTGlicmFyeSBFcnJvciBDb2Rlcw0KKyAgQHsNCisNCisgIEBicmllZiBFcnJvciBkZWZpbml0aW9ucyBmb3IgdGhlIFNvQyBsaWJyYXJ5DQorDQorKi8NCisNCisvKiBIZWFkZXIgZ3VhcmQgKi8NCisjaWZuZGVmIE5SRl9FUlJPUl9TT0NfSF9fDQorI2RlZmluZSBOUkZfRVJST1JfU09DX0hfXw0KKw0KKyNpbmNsdWRlICJucmZfZXJyb3IuaCINCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBNdXRleCBFcnJvcnMgKi8NCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfTVVURVhfQUxSRUFEWV9UQUtFTiAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gKyAwKSAgLy8vPCBNdXRleCBhbHJlYWR5IHRha2VuDQorDQorLyogTlZJQyBlcnJvcnMgKi8NCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRSAgICAgICAgKE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gKyAxKSAgLy8vPCBOVklDIGludGVycnVwdCBub3QgYXZhaWxhYmxlDQorI2RlZmluZSBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX1BSSU9SSVRZX05PVF9BTExPV0VEIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgMikgIC8vLzwgTlZJQyBpbnRlcnJ1cHQgcHJpb3JpdHkgbm90IGFsbG93ZWQNCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfTlZJQ19TSE9VTERfTk9UX1JFVFVSTiAgICAgICAgICAgICAgKE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gKyAzKSAgLy8vPCBOVklDIHNob3VsZCBub3QgcmV0dXJuDQorDQorLyogUG93ZXIgZXJyb3JzICovDQorI2RlZmluZSBOUkZfRVJST1JfU09DX1BPV0VSX01PREVfVU5LTk9XTiAgICAgICAgICAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgNCkgIC8vLzwgUG93ZXIgbW9kZSB1bmtub3duDQorI2RlZmluZSBOUkZfRVJST1JfU09DX1BPV0VSX1BPRl9USFJFU0hPTERfVU5LTk9XTiAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgNSkgIC8vLzwgUG93ZXIgUE9GIHRocmVzaG9sZCB1bmtub3duDQorI2RlZmluZSBOUkZfRVJST1JfU09DX1BPV0VSX09GRl9TSE9VTERfTk9UX1JFVFVSTiAgICAgICAgIChOUkZfRVJST1JfU09DX0JBU0VfTlVNICsgNikgIC8vLzwgUG93ZXIgb2ZmIHNob3VsZCBub3QgcmV0dXJuDQorDQorLyogUmFuZCBlcnJvcnMgKi8NCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfUkFORF9OT1RfRU5PVUdIX1ZBTFVFUyAgICAgICAgICAgICAgKE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gKyA3KSAgLy8vPCBSQU5EIG5vdCBlbm91Z2ggdmFsdWVzDQorDQorLyogUFBJIGVycm9ycyAqLw0KKyNkZWZpbmUgTlJGX0VSUk9SX1NPQ19QUElfSU5WQUxJRF9DSEFOTkVMICAgICAgICAgICAgICAgICAoTlJGX0VSUk9SX1NPQ19CQVNFX05VTSArIDgpICAvLy88IEludmFsaWQgUFBJIENoYW5uZWwNCisjZGVmaW5lIE5SRl9FUlJPUl9TT0NfUFBJX0lOVkFMSURfR1JPVVAgICAgICAgICAgICAgICAgICAgKE5SRl9FUlJPUl9TT0NfQkFTRV9OVU0gKyA5KSAgLy8vPCBJbnZhbGlkIFBQSSBHcm91cA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gTlJGX0VSUk9SX1NPQ19IX18NCisvKioNCisgIEB9DQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfbnZpYy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfbnZpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTNjMjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9udmljLmgKQEAgLTAsMCArMSw1MTcgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9udmljX2FwaSBTb2Z0RGV2aWNlIE5WSUMgQVBJDQorICogQHsNCisgKg0KKyAqIEBub3RlIEluIG9yZGVyIHRvIHVzZSB0aGlzIG1vZHVsZSwgdGhlIGZvbGxvd2luZyBjb2RlIGhhcyB0byBiZSBhZGRlZCB0byBhIC5jIGZpbGU6DQorICogICAgIFxjb2RlDQorICogICAgIG5yZl9udmljX3N0YXRlX3QgbnJmX252aWNfc3RhdGUgPSB7MH07DQorICogICAgIFxlbmRjb2RlDQorICoNCisgKiBAbm90ZSBEZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zIHN0YXJ0aW5nIHdpdGggX18gKGRvdWJsZSB1bmRlcnNjb3JlKSBpbiB0aGlzIGhlYWRlciBmaWxlIGFyZQ0KKyAqIG5vdCBpbnRlbmRlZCBmb3IgZGlyZWN0IHVzZSBieSB0aGUgYXBwbGljYXRpb24uDQorICoNCisgKiBAYnJpZWYgQVBJcyBmb3IgdGhlIGFjY2Vzc2luZyBOVklDIHdoZW4gdXNpbmcgYSBTb2Z0RGV2aWNlLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfTlZJQ19IX18NCisjZGVmaW5lIE5SRl9OVklDX0hfXw0KKw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSAibnJmLmgiDQorDQorI2luY2x1ZGUgIm5yZl9lcnJvcl9zb2MuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKipAYWRkdG9ncm91cCBOUkZfTlZJQ19ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKw0KKy8qKkBkZWZncm91cCBOUkZfTlZJQ19JU0VSX0RFRklORVMgU29mdERldmljZSBOVklDIGludGVybmFsIGRlZmluaXRpb25zDQorICogQHsgKi8NCisNCisjZGVmaW5lIF9fTlJGX05WSUNfTlZNQ19JUlFuICgzMCkgLyoqPCBUaGUgcGVyaXBoZXJhbCBJRCBvZiB0aGUgTlZNQy4gSVJRIG51bWJlcnMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgcGVyaXBoZXJhbHMsIGJ1dCB0aGUgTlZNQyBkb2Vzbid0IGhhdmUgYW4gSVJRIG51bWJlciBpbiB0aGUgTURLLiAqLw0KKw0KKyNpZmRlZiBOUkY1MQ0KKyAgI2RlZmluZSBfX05SRl9OVklDX0lTRVJfQ09VTlQgKDEpIC8qKjwgVGhlIG51bWJlciBvZiBJU0VSL0lDRVIgcmVnaXN0ZXJzIGluIHRoZSBOVklDIHRoYXQgYXJlIHVzZWQuICovDQorDQorICAvKipAYnJpZWYgSW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBTb2Z0RGV2aWNlLiAqLw0KKyAgI2RlZmluZSBfX05SRl9OVklDX1NEX0lSUVNfMCAoKHVpbnQzMl90KSggXA0KKyAgICAgICAgKDFVIDw8IFBPV0VSX0NMT0NLX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCBSQURJT19JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgUlRDMF9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgVElNRVIwX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCBSTkdfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IEVDQl9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgQ0NNX0FBUl9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgVEVNUF9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgX19OUkZfTlZJQ19OVk1DX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCAodWludDMyX3QpU1dJNV9JUlFuKSBcDQorICAgICkpDQorDQorICAvKipAYnJpZWYgSW50ZXJydXB0cyBhdmFpbGFibGUgZm9yIHRvIGFwcGxpY2F0aW9uLiAqLw0KKyAgI2RlZmluZSBfX05SRl9OVklDX0FQUF9JUlFTXzAgKH5fX05SRl9OVklDX1NEX0lSUVNfMCkNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChOUkY1MikgfHwgZGVmaW5lZChOUkY1Mjg0MF9YWEFBKQ0KKyAgI2RlZmluZSBfX05SRl9OVklDX0lTRVJfQ09VTlQgKDIpIC8qKjwgVGhlIG51bWJlciBvZiBJU0VSL0lDRVIgcmVnaXN0ZXJzIGluIHRoZSBOVklDIHRoYXQgYXJlIHVzZWQuICovDQorDQorICAvKipAYnJpZWYgSW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBTb2Z0RGV2aWNlLiAqLw0KKyAgI2RlZmluZSBfX05SRl9OVklDX1NEX0lSUVNfMCAoKHVpbnQzMl90KSggXA0KKyAgICAgICAgKDFVIDw8IFBPV0VSX0NMT0NLX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCBSQURJT19JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgUlRDMF9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgVElNRVIwX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCBSTkdfSVJRbikgXA0KKyAgICAgIHwgKDFVIDw8IEVDQl9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgQ0NNX0FBUl9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgVEVNUF9JUlFuKSBcDQorICAgICAgfCAoMVUgPDwgX19OUkZfTlZJQ19OVk1DX0lSUW4pIFwNCisgICAgICB8ICgxVSA8PCAodWludDMyX3QpU1dJNV9FR1U1X0lSUW4pIFwNCisgICAgKSkNCisgICNkZWZpbmUgX19OUkZfTlZJQ19TRF9JUlFTXzEgKCh1aW50MzJfdCkwKQ0KKw0KKyAgLyoqQGJyaWVmIEludGVycnVwdHMgYXZhaWxhYmxlIGZvciB0byBhcHBsaWNhdGlvbi4gKi8NCisgICNkZWZpbmUgX19OUkZfTlZJQ19BUFBfSVJRU18wICh+X19OUkZfTlZJQ19TRF9JUlFTXzApDQorICAjZGVmaW5lIF9fTlJGX05WSUNfQVBQX0lSUVNfMSAofl9fTlJGX05WSUNfU0RfSVJRU18xKQ0KKyNlbmRpZg0KKy8qKkB9ICovDQorDQorLyoqQH0gKi8NCisNCisvKipAYWRkdG9ncm91cCBOUkZfTlZJQ19WQVJJQUJMRVMgVmFyaWFibGVzDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgVHlwZSByZXByZXNlbnRpbmcgdGhlIHN0YXRlIHN0cnVjdCBmb3IgdGhlIFNvZnREZXZpY2UgTlZJQyBtb2R1bGUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCB2b2xhdGlsZSBfX2lycV9tYXNrc1tfX05SRl9OVklDX0lTRVJfQ09VTlRdOyAvKio8IElSUXMgZW5hYmxlZCBieSB0aGUgYXBwbGljYXRpb24gaW4gdGhlIE5WSUMuICovDQorICB1aW50MzJfdCB2b2xhdGlsZSBfX2NyX2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vbi16ZXJvIGlmIGFscmVhZHkgaW4gYSBjcml0aWNhbCByZWdpb24gKi8NCit9IG5yZl9udmljX3N0YXRlX3Q7DQorDQorLyoqQGJyaWVmIFZhcmlhYmxlIGtlZXBpbmcgdGhlIHN0YXRlIGZvciB0aGUgU29mdERldmljZSBOVklDIG1vZHVsZS4gVGhpcyBtdXN0IGJlIGRlY2xhcmVkIGluIGFuDQorICogYXBwbGljYXRpb24gc291cmNlIGZpbGUuICovDQorZXh0ZXJuIG5yZl9udmljX3N0YXRlX3QgbnJmX252aWNfc3RhdGU7DQorDQorLyoqQH0gKi8NCisNCisvKipAYWRkdG9ncm91cCBOUkZfTlZJQ19JTlRFUk5BTF9GVU5DVElPTlMgU29mdERldmljZSBOVklDIGludGVybmFsIGZ1bmN0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIERpc2FibGVzIElSUSBpbnRlcnJ1cHRzIGdsb2JhbGx5LCBpbmNsdWRpbmcgdGhlIFNvZnREZXZpY2UncyBpbnRlcnJ1cHRzLg0KKyAqDQorICogQHJldHZhbCAgVGhlIHZhbHVlIG9mIFBSSU1BU0sgcHJpb3IgdG8gZGlzYWJsaW5nIHRoZSBpbnRlcnJ1cHRzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSBpbnQgX19zZF9udmljX2lycV9kaXNhYmxlKHZvaWQpOw0KKw0KKy8qKkBicmllZiBFbmFibGVzIElSUSBpbnRlcnJ1cHRzIGdsb2JhbGx5LCBpbmNsdWRpbmcgdGhlIFNvZnREZXZpY2UncyBpbnRlcnJ1cHRzLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2RfbnZpY19pcnFfZW5hYmxlKHZvaWQpOw0KKw0KKy8qKkBicmllZiBDaGVja3MgaWYgSVJRbiBpcyBhdmFpbGFibGUgdG8gYXBwbGljYXRpb24NCisgKiBAcGFyYW1baW5dICBJUlFuICBJUlEgdG8gY2hlY2sNCisgKg0KKyAqIEByZXR2YWwgIDEgKHRydWUpIGlmIHRoZSBJUlEgdG8gY2hlY2sgaXMgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW5fVHlwZSBJUlFuKTsNCisNCisvKipAYnJpZWYgQ2hlY2tzIGlmIHByaW9yaXR5IGlzIGF2YWlsYWJsZSB0byBhcHBsaWNhdGlvbg0KKyAqIEBwYXJhbVtpbl0gIHByaW9yaXR5ICBwcmlvcml0eSB0byBjaGVjaw0KKyAqDQorICogQHJldHZhbCAgMSAodHJ1ZSkgaWYgdGhlIHByaW9yaXR5IHRvIGNoZWNrIGlzIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19zZF9udmljX2lzX2FwcF9hY2Nlc3NpYmxlX3ByaW9yaXR5KHVpbnQzMl90IHByaW9yaXR5KTsNCisNCisvKipAfSAqLw0KKw0KKy8qKkBhZGR0b2dyb3VwIE5SRl9OVklDX0ZVTkNUSU9OUyBTb2Z0RGV2aWNlIE5WSUMgcHVibGljIGZ1bmN0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEVuYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQuDQorICogQG5vdGUgQ29ycmVzcG9uZHMgdG8gTlZJQ19FbmFibGVJUlEgaW4gQ01TSVMuDQorICoNCisgKiBAcHJlIElSUW4gaXMgdmFsaWQgYW5kIG5vdCByZXNlcnZlZCBieSB0aGUgc3RhY2suDQorICoNCisgKiBAcGFyYW1baW5dIElSUW4gU2VlIHRoZSBOVklDX0VuYWJsZUlSUSBkb2N1bWVudGF0aW9uIGluIENNU0lTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBpbnRlcnJ1cHQgd2FzIGVuYWJsZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRSBUaGUgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9QUklPUklUWV9OT1RfQUxMT1dFRCBUaGUgaW50ZXJydXB0IGhhcyBhIHByaW9yaXR5IG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pOw0KKw0KKy8qKkBicmllZiAgRGlzYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQuDQorICogQG5vdGUgQ29ycmVzcG9uZHMgdG8gTlZJQ19EaXNhYmxlSVJRIGluIENNU0lTLg0KKyAqDQorICogQHByZSBJUlFuIGlzIHZhbGlkIGFuZCBub3QgcmVzZXJ2ZWQgYnkgdGhlIHN0YWNrLg0KKyAqDQorICogQHBhcmFtW2luXSBJUlFuIFNlZSB0aGUgTlZJQ19EaXNhYmxlSVJRIGRvY3VtZW50YXRpb24gaW4gQ01TSVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGludGVycnVwdCB3YXMgZGlzYWJsZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRSBUaGUgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKTsNCisNCisvKipAYnJpZWYgIEdldCBQZW5kaW5nIEludGVycnVwdC4NCisgKiBAbm90ZSBDb3JyZXNwb25kcyB0byBOVklDX0dldFBlbmRpbmdJUlEgaW4gQ01TSVMuDQorICoNCisgKiBAcHJlIElSUW4gaXMgdmFsaWQgYW5kIG5vdCByZXNlcnZlZCBieSB0aGUgc3RhY2suDQorICoNCisgKiBAcGFyYW1baW5dICAgSVJRbiAgICAgICAgICBTZWUgdGhlIE5WSUNfR2V0UGVuZGluZ0lSUSBkb2N1bWVudGF0aW9uIGluIENNU0lTLg0KKyAqIEBwYXJhbVtvdXRdICBwX3BlbmRpbmdfaXJxIFJldHVybiB2YWx1ZSBmcm9tIE5WSUNfR2V0UGVuZGluZ0lSUS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgaW50ZXJydXB0IGlzIGF2YWlsYWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgSVJRbiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgKiBwX3BlbmRpbmdfaXJxKTsNCisNCisvKipAYnJpZWYgIFNldCBQZW5kaW5nIEludGVycnVwdC4NCisgKiBAbm90ZSBDb3JyZXNwb25kcyB0byBOVklDX1NldFBlbmRpbmdJUlEgaW4gQ01TSVMuDQorICoNCisgKiBAcHJlIElSUW4gaXMgdmFsaWQgYW5kIG5vdCByZXNlcnZlZCBieSB0aGUgc3RhY2suDQorICoNCisgKiBAcGFyYW1baW5dIElSUW4gU2VlIHRoZSBOVklDX1NldFBlbmRpbmdJUlEgZG9jdW1lbnRhdGlvbiBpbiBDTVNJUy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgaW50ZXJydXB0IGlzIHNldCBwZW5kaW5nLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgSVJRbiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbik7DQorDQorLyoqQGJyaWVmICBDbGVhciBQZW5kaW5nIEludGVycnVwdC4NCisgKiBAbm90ZSBDb3JyZXNwb25kcyB0byBOVklDX0NsZWFyUGVuZGluZ0lSUSBpbiBDTVNJUy4NCisgKg0KKyAqIEBwcmUgSVJRbiBpcyB2YWxpZCBhbmQgbm90IHJlc2VydmVkIGJ5IHRoZSBzdGFjay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gSVJRbiBTZWUgdGhlIE5WSUNfQ2xlYXJQZW5kaW5nSVJRIGRvY3VtZW50YXRpb24gaW4gQ01TSVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGludGVycnVwdCBwZW5kaW5nIGZsYWcgaXMgY2xlYXJlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFIElSUW4gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uLg0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbik7DQorDQorLyoqQGJyaWVmIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkuDQorICogQG5vdGUgQ29ycmVzcG9uZHMgdG8gTlZJQ19TZXRQcmlvcml0eSBpbiBDTVNJUy4NCisgKg0KKyAqIEBwcmUgSVJRbiBpcyB2YWxpZCBhbmQgbm90IHJlc2VydmVkIGJ5IHRoZSBzdGFjay4NCisgKiBAcHJlIFByaW9yaXR5IGlzIHZhbGlkIGFuZCBub3QgcmVzZXJ2ZWQgYnkgdGhlIHN0YWNrLg0KKyAqDQorICogQHBhcmFtW2luXSBJUlFuICAgICAgU2VlIHRoZSBOVklDX1NldFByaW9yaXR5IGRvY3VtZW50YXRpb24gaW4gQ01TSVMuDQorICogQHBhcmFtW2luXSBwcmlvcml0eSAgQSB2YWxpZCBJUlEgcHJpb3JpdHkgZm9yIHVzZSBieSB0aGUgYXBwbGljYXRpb24uDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGludGVycnVwdCBhbmQgcHJpb3JpdHkgbGV2ZWwgaXMgYXZhaWxhYmxlIGZvciB0aGUgYXBwbGljYXRpb24uDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRSBJUlFuIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9QUklPUklUWV9OT1RfQUxMT1dFRCBUaGUgaW50ZXJydXB0IHByaW9yaXR5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpOw0KKw0KKy8qKkBicmllZiBHZXQgSW50ZXJydXB0IFByaW9yaXR5Lg0KKyAqIEBub3RlIENvcnJlc3BvbmRzIHRvIE5WSUNfR2V0UHJpb3JpdHkgaW4gQ01TSVMuDQorICoNCisgKiBAcHJlIElSUW4gaXMgdmFsaWQgYW5kIG5vdCByZXNlcnZlZCBieSB0aGUgc3RhY2suDQorICoNCisgKiBAcGFyYW1baW5dICBJUlFuICAgICAgICAgU2VlIHRoZSBOVklDX0dldFByaW9yaXR5IGRvY3VtZW50YXRpb24gaW4gQ01TSVMuDQorICogQHBhcmFtW291dF0gcF9wcmlvcml0eSAgIFJldHVybiB2YWx1ZSBmcm9tIE5WSUNfR2V0UHJpb3JpdHkuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIGludGVycnVwdCBwcmlvcml0eSBpcyByZXR1cm5lZCBpbiBwX3ByaW9yaXR5Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEUgLSBJUlFuIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4NCisgKi8NCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgKiBwX3ByaW9yaXR5KTsNCisNCisvKipAYnJpZWYgU3lzdGVtIFJlc2V0Lg0KKyAqIEBub3RlIENvcnJlc3BvbmRzIHRvIE5WSUNfU3lzdGVtUmVzZXQgaW4gQ01TSVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19OVklDX1NIT1VMRF9OT1RfUkVUVVJODQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfU3lzdGVtUmVzZXQodm9pZCk7DQorDQorLyoqQGJyaWVmIEVudGVyIGNyaXRpY2FsIHJlZ2lvbi4NCisgKg0KKyAqIEBwb3N0IEFwcGxpY2F0aW9uIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZC4NCisgKiBAbm90ZSBzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9lbnRlcigpIGFuZCA6OnNkX252aWNfY3JpdGljYWxfcmVnaW9uX2V4aXQoKSBtdXN0IGJlIGNhbGxlZCBpbiBtYXRjaGluZyBwYWlycyBpbnNpZGUgZWFjaA0KKyAqIGV4ZWN1dGlvbiBjb250ZXh0DQorICogQHNhIHNkX252aWNfY3JpdGljYWxfcmVnaW9uX2V4aXQNCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfaXNfbmVzdGVkX2NyaXRpY2FsX3JlZ2lvbiBJZiAxLCB0aGUgYXBwbGljYXRpb24gaXMgbm93IGluIGEgbmVzdGVkIGNyaXRpY2FsIHJlZ2lvbi4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX2NyaXRpY2FsX3JlZ2lvbl9lbnRlcih1aW50OF90ICogcF9pc19uZXN0ZWRfY3JpdGljYWxfcmVnaW9uKTsNCisNCisvKipAYnJpZWYgRXhpdCBjcml0aWNhbCByZWdpb24uDQorICoNCisgKiBAcHJlIEFwcGxpY2F0aW9uIGhhcyBlbnRlcmVkIGEgY3JpdGljYWwgcmVnaW9uIHVzaW5nIDo6c2RfbnZpY19jcml0aWNhbF9yZWdpb25fZW50ZXIuDQorICogQHBvc3QgSWYgbm90IGluIGEgbmVzdGVkIGNyaXRpY2FsIHJlZ2lvbiwgdGhlIGFwcGxpY2F0aW9uIGludGVycnVwdHMgd2lsbCByZXN0b3JlZCB0byB0aGUgc3RhdGUgYmVmb3JlIDo6c2RfbnZpY19jcml0aWNhbF9yZWdpb25fZW50ZXIgd2FzIGNhbGxlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gaXNfbmVzdGVkX2NyaXRpY2FsX3JlZ2lvbiBJZiB0aGlzIGlzIHNldCB0byAxLCB0aGUgY3JpdGljYWwgcmVnaW9uIHdvbid0IGJlIGV4aXRlZC4gQHNhIHNkX252aWNfY3JpdGljYWxfcmVnaW9uX2VudGVyLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfY3JpdGljYWxfcmVnaW9uX2V4aXQodWludDhfdCBpc19uZXN0ZWRfY3JpdGljYWxfcmVnaW9uKTsNCisNCisvKipAfSAqLw0KKw0KKyNpZm5kZWYgU1VQUFJFU1NfSU5MSU5FX0lNUExFTUVOVEFUSU9ODQorDQorX19TVEFUSUNfSU5MSU5FIGludCBfX3NkX252aWNfaXJxX2Rpc2FibGUodm9pZCkNCit7DQorICBpbnQgcG0gPSBfX2dldF9QUklNQVNLKCk7DQorICBfX2Rpc2FibGVfaXJxKCk7DQorICByZXR1cm4gcG07DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2RfbnZpY19pcnFfZW5hYmxlKHZvaWQpDQorew0KKyAgX19lbmFibGVfaXJxKCk7DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgIGlmIChJUlFuIDwgMzIpDQorICB7DQorICAgIHJldHVybiAoKDFVTDw8SVJRbikgJiBfX05SRl9OVklDX0FQUF9JUlFTXzApICE9IDA7DQorICB9DQorI2lmIGRlZmluZWQoTlJGNTIpIHx8IGRlZmluZWQoTlJGNTI4NDBfWFhBQSkNCisgIGVsc2UgaWYgKElSUW4gPCA2NCkNCisgIHsNCisgICAgcmV0dXJuICgoMVVMPDwoSVJRbi0zMikpICYgX19OUkZfTlZJQ19BUFBfSVJRU18xKSAhPSAwOw0KKyAgfQ0KKyNlbmRpZg0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gMTsNCisgIH0NCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fc2RfbnZpY19pc19hcHBfYWNjZXNzaWJsZV9wcmlvcml0eSh1aW50MzJfdCBwcmlvcml0eSkNCit7DQorICBpZihwcmlvcml0eSA+PSAoMSA8PCBfX05WSUNfUFJJT19CSVRTKSkNCisgIHsNCisgICAgcmV0dXJuIDA7DQorICB9DQorI2lmZGVmIE5SRjUxDQorICBpZiggICBwcmlvcml0eSA9PSAwDQorICAgICB8fCBwcmlvcml0eSA9PSAyDQorICAgICApDQorICB7DQorICAgIHJldHVybiAwOw0KKyAgfQ0KKyNlbmRpZg0KKyNpZiBkZWZpbmVkKE5SRjUyKSB8fCBkZWZpbmVkKE5SRjUyODQwX1hYQUEpDQorICBpZiggICBwcmlvcml0eSA9PSAwDQorICAgICB8fCBwcmlvcml0eSA9PSAxDQorICAgICB8fCBwcmlvcml0eSA9PSA0DQorICAgICB8fCBwcmlvcml0eSA9PSA1DQorICAgICApDQorICB7DQorICAgIHJldHVybiAwOw0KKyAgfQ0KKyNlbmRpZg0KKyAgcmV0dXJuIDE7DQorfQ0KKw0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX0VuYWJsZUlSUShJUlFuX1R5cGUgSVJRbikNCit7DQorICBpZiAoIV9fc2RfbnZpY19hcHBfYWNjZXNzaWJsZV9pcnEoSVJRbikpDQorICB7DQorICAgIHJldHVybiBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEU7DQorICB9DQorICBpZiAoIV9fc2RfbnZpY19pc19hcHBfYWNjZXNzaWJsZV9wcmlvcml0eShOVklDX0dldFByaW9yaXR5KElSUW4pKSkNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfUFJJT1JJVFlfTk9UX0FMTE9XRUQ7DQorICB9DQorDQorICBpZiAobnJmX252aWNfc3RhdGUuX19jcl9mbGFnKQ0KKyAgew0KKyAgICBucmZfbnZpY19zdGF0ZS5fX2lycV9tYXNrc1sodWludDMyX3QpKChpbnQzMl90KUlSUW4pID4+IDVdIHw9ICh1aW50MzJfdCkoMSA8PCAoKHVpbnQzMl90KSgoaW50MzJfdClJUlFuKSAmICh1aW50MzJfdCkweDFGKSk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIE5WSUNfRW5hYmxlSVJRKElSUW4pOw0KKyAgfQ0KKyAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgIGlmICghX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuKSkNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRTsNCisgIH0NCisNCisgIGlmIChucmZfbnZpY19zdGF0ZS5fX2NyX2ZsYWcpDQorICB7DQorICAgIG5yZl9udmljX3N0YXRlLl9faXJxX21hc2tzWyh1aW50MzJfdCkoKGludDMyX3QpSVJRbikgPj4gNV0gJj0gfigxVUwgPDwgKCh1aW50MzJfdCkoSVJRbikgJiAweDFGKSk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIE5WSUNfRGlzYWJsZUlSUShJUlFuKTsNCisgIH0NCisNCisgIHJldHVybiBOUkZfU1VDQ0VTUzsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgKiBwX3BlbmRpbmdfaXJxKQ0KK3sNCisgIGlmIChfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW4pKQ0KKyAgew0KKyAgICAqcF9wZW5kaW5nX2lycSA9IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuKTsNCisgICAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFOw0KKyAgfQ0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19TZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgIGlmIChfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW4pKQ0KKyAgew0KKyAgICBOVklDX1NldFBlbmRpbmdJUlEoSVJRbik7DQorICAgIHJldHVybiBOUkZfU1VDQ0VTUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19JTlRFUlJVUFRfTk9UX0FWQUlMQUJMRTsNCisgIH0NCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQ0KK3sNCisgIGlmIChfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW4pKQ0KKyAgew0KKyAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuKTsNCisgICAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFOw0KKyAgfQ0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpDQorew0KKyAgaWYgKCFfX3NkX252aWNfYXBwX2FjY2Vzc2libGVfaXJxKElSUW4pKQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9OT1RfQVZBSUxBQkxFOw0KKyAgfQ0KKw0KKyAgaWYgKCFfX3NkX252aWNfaXNfYXBwX2FjY2Vzc2libGVfcHJpb3JpdHkocHJpb3JpdHkpKQ0KKyAgew0KKyAgICByZXR1cm4gTlJGX0VSUk9SX1NPQ19OVklDX0lOVEVSUlVQVF9QUklPUklUWV9OT1RfQUxMT1dFRDsNCisgIH0NCisNCisgIE5WSUNfU2V0UHJpb3JpdHkoSVJRbiwgKHVpbnQzMl90KXByaW9yaXR5KTsNCisgIHJldHVybiBOUkZfU1VDQ0VTUzsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90ICogcF9wcmlvcml0eSkNCit7DQorICBpZiAoX19zZF9udmljX2FwcF9hY2Nlc3NpYmxlX2lycShJUlFuKSkNCisgIHsNCisgICAgKnBfcHJpb3JpdHkgPSAoTlZJQ19HZXRQcmlvcml0eShJUlFuKSAmIDB4RkYpOw0KKyAgICByZXR1cm4gTlJGX1NVQ0NFU1M7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHJldHVybiBOUkZfRVJST1JfU09DX05WSUNfSU5URVJSVVBUX05PVF9BVkFJTEFCTEU7DQorICB9DQorfQ0KKw0KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBzZF9udmljX1N5c3RlbVJlc2V0KHZvaWQpDQorew0KKyAgTlZJQ19TeXN0ZW1SZXNldCgpOw0KKyAgcmV0dXJuIE5SRl9FUlJPUl9TT0NfTlZJQ19TSE9VTERfTk9UX1JFVFVSTjsNCit9DQorDQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IHNkX252aWNfY3JpdGljYWxfcmVnaW9uX2VudGVyKHVpbnQ4X3QgKiBwX2lzX25lc3RlZF9jcml0aWNhbF9yZWdpb24pDQorew0KKyAgaW50IHdhc19tYXNrZWQgPSBfX3NkX252aWNfaXJxX2Rpc2FibGUoKTsNCisgIGlmICghbnJmX252aWNfc3RhdGUuX19jcl9mbGFnKQ0KKyAgew0KKyAgICBucmZfbnZpY19zdGF0ZS5fX2NyX2ZsYWcgPSAxOw0KKyAgICBucmZfbnZpY19zdGF0ZS5fX2lycV9tYXNrc1swXSA9ICggTlZJQy0+SUNFUlswXSAmIF9fTlJGX05WSUNfQVBQX0lSUVNfMCApOw0KKyAgICBOVklDLT5JQ0VSWzBdID0gX19OUkZfTlZJQ19BUFBfSVJRU18wOw0KKyAgICAjaWYgZGVmaW5lZChOUkY1MikgfHwgZGVmaW5lZChOUkY1Mjg0MF9YWEFBKQ0KKyAgICBucmZfbnZpY19zdGF0ZS5fX2lycV9tYXNrc1sxXSA9ICggTlZJQy0+SUNFUlsxXSAmIF9fTlJGX05WSUNfQVBQX0lSUVNfMSApOw0KKyAgICBOVklDLT5JQ0VSWzFdID0gX19OUkZfTlZJQ19BUFBfSVJRU18xOw0KKyAgICAjZW5kaWYNCisgICAgKnBfaXNfbmVzdGVkX2NyaXRpY2FsX3JlZ2lvbiA9IDA7DQorICB9DQorICBlbHNlDQorICB7DQorICAgICpwX2lzX25lc3RlZF9jcml0aWNhbF9yZWdpb24gPSAxOw0KKyAgfQ0KKyAgaWYgKCF3YXNfbWFza2VkKQ0KKyAgew0KKyAgICBfX3NkX252aWNfaXJxX2VuYWJsZSgpOw0KKyAgfQ0KKyAgcmV0dXJuIE5SRl9TVUNDRVNTOw0KK30NCisNCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3Qgc2RfbnZpY19jcml0aWNhbF9yZWdpb25fZXhpdCh1aW50OF90IGlzX25lc3RlZF9jcml0aWNhbF9yZWdpb24pDQorew0KKyAgaWYgKG5yZl9udmljX3N0YXRlLl9fY3JfZmxhZyAmJiAoaXNfbmVzdGVkX2NyaXRpY2FsX3JlZ2lvbiA9PSAwKSkNCisgIHsNCisgICAgaW50IHdhc19tYXNrZWQgPSBfX3NkX252aWNfaXJxX2Rpc2FibGUoKTsNCisgICAgTlZJQy0+SVNFUlswXSA9IG5yZl9udmljX3N0YXRlLl9faXJxX21hc2tzWzBdOw0KKyAgICAjaWYgZGVmaW5lZChOUkY1MikgfHwgZGVmaW5lZChOUkY1Mjg0MF9YWEFBKQ0KKyAgICBOVklDLT5JU0VSWzFdID0gbnJmX252aWNfc3RhdGUuX19pcnFfbWFza3NbMV07DQorICAgICNlbmRpZg0KKyAgICBucmZfbnZpY19zdGF0ZS5fX2NyX2ZsYWcgPSAwOw0KKyAgICBpZiAoIXdhc19tYXNrZWQpDQorICAgIHsNCisgICAgICBfX3NkX252aWNfaXJxX2VuYWJsZSgpOw0KKyAgICB9DQorICB9DQorDQorICByZXR1cm4gTlJGX1NVQ0NFU1M7DQorfQ0KKw0KKyNlbmRpZiAvKiBTVVBQUkVTU19JTkxJTkVfSU1QTEVNRU5UQVRJT04gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vIE5SRl9OVklDX0hfXw0KKw0KKy8qKkB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc2RtLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9zZG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FiMzNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc2RtLmgKQEAgLTAsMCArMSwzMzggQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorLyoqDQorICBAZGVmZ3JvdXAgbnJmX3NkbV9hcGkgU29mdERldmljZSBNYW5hZ2VyIEFQSQ0KKyAgQHsNCisNCisgIEBicmllZiBBUElzIGZvciBTb2Z0RGV2aWNlIG1hbmFnZW1lbnQuDQorDQorKi8NCisNCisjaWZuZGVmIE5SRl9TRE1fSF9fDQorI2RlZmluZSBOUkZfU0RNX0hfXw0KKw0KKyNpbmNsdWRlICJucmZfc3ZjLmgiDQorI2luY2x1ZGUgIm5yZi5oIg0KKyNpbmNsdWRlICJucmZfc29jLmgiDQorI2luY2x1ZGUgIm5yZl9lcnJvcl9zZG0uaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiogQGFkZHRvZ3JvdXAgTlJGX1NETV9ERUZJTkVTIERlZmluZXMNCisgKiBAeyAqLw0KKyNpZmRlZiBOUkZTT0NfRE9YWUdFTg0KKy8vLyBEZWNsYXJlZCBpbiBucmZfbWJyLmgNCisjZGVmaW5lIE1CUl9TSVpFIDANCisjd2FybmluZyB0ZXN0DQorI2VuZGlmDQorDQorLyoqIEBicmllZiBUaGUgbWFqb3IgdmVyc2lvbiBmb3IgdGhlIFNvZnREZXZpY2UgYmluYXJ5IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBoZWFkZXIgZmlsZS4gKi8NCisjZGVmaW5lIFNEX01BSk9SX1ZFUlNJT04gICgwKQ0KKw0KKy8qKiBAYnJpZWYgVGhlIG1pbm9yIHZlcnNpb24gZm9yIHRoZSBTb2Z0RGV2aWNlIGJpbmFyeSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgaGVhZGVyIGZpbGUuICovDQorI2RlZmluZSBTRF9NSU5PUl9WRVJTSU9OICAoMCkNCisNCisvKiogQGJyaWVmIFRoZSBidWdmaXggdmVyc2lvbiBmb3IgdGhlIFNvZnREZXZpY2UgYmluYXJ5IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBoZWFkZXIgZmlsZS4gKi8NCisjZGVmaW5lIFNEX0JVR0ZJWF9WRVJTSU9OICgwKQ0KKw0KKy8qKiBAYnJpZWYgVGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBTb2Z0RGV2aWNlIGJpbmFyeSB0aGlzIGhlYWRlciBmaWxlIHdhcyBkaXN0cmlidXRlZA0KKyAqICAgICAgICAgd2l0aCwgYXMgYSBkZWNpbWFsIG51bWJlciBpbiB0aGUgZm9ybSBNbW1tYmJiLCB3aGVyZToNCisgKiAgICAgICAgICAgLSBNIGlzIG1ham9yIHZlcnNpb24gKG9uZSBvciBtb3JlIGRpZ2l0cykNCisgKiAgICAgICAgICAgLSBtbW0gaXMgbWlub3IgdmVyc2lvbiAodGhyZWUgZGlnaXRzKQ0KKyAqICAgICAgICAgICAtIGJiYiBpcyBidWdmaXggdmVyc2lvbiAodGhyZWUgZGlnaXRzKS4gKi8NCisjZGVmaW5lIFNEX1ZFUlNJT04gKFNEX01BSk9SX1ZFUlNJT04gKiAxMDAwMDAwICsgU0RfTUlOT1JfVkVSU0lPTiAqIDEwMDAgKyBTRF9CVUdGSVhfVkVSU0lPTikNCisNCisvKiogQGJyaWVmIFNvZnREZXZpY2UgTWFuYWdlciBTVkMgQmFzZSBudW1iZXIuICovDQorI2RlZmluZSBTRE1fU1ZDX0JBU0UgMHgxMA0KKw0KKy8qKiBAYnJpZWYgSW52YWxpZCBpbmZvIGZpZWxkLiBSZXR1cm5lZCB3aGVuIGFuIGluZm8gZmllbGQgZG9lcyBub3QgZXhpc3QuICovDQorI2RlZmluZSBTRE1fSU5GT19GSUVMRF9JTlZBTElEICgwKQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyB0aGUgU29mdERldmljZSBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmUgbG9jYXRpb24gKGFkZHJlc3MpIGFzIGFuIG9mZnNldCBmcm9tDQordGhlIHN0YXJ0IG9mIHRoZSBTb2Z0RGV2aWNlICh3aXRob3V0IE1CUikqLw0KKyNkZWZpbmUgU09GVERFVklDRV9JTkZPX1NUUlVDVF9PRkZTRVQgKDB4MjAwMCkNCisNCisvKiogQGJyaWVmIERlZmluZXMgdGhlIGFic29sdXRlIFNvZnREZXZpY2UgSW5mb3JtYXRpb24gU3RydWN0dXJlIGxvY2F0aW9uIChhZGRyZXNzKSB3aGVuIHRoZQ0KKyAqICAgICAgICAgU29mdERldmljZSBpcyBpbnN0YWxsZWQganVzdCBhYm92ZSB0aGUgTUJSICh0aGUgdXN1YWwgY2FzZSkuICovDQorI2RlZmluZSBTT0ZUREVWSUNFX0lORk9fU1RSVUNUX0FERFJFU1MgKFNPRlRERVZJQ0VfSU5GT19TVFJVQ1RfT0ZGU0VUICsgTUJSX1NJWkUpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIHRoZSBvZmZzZXQgZm9yIHRoZSBTb2Z0RGV2aWNlIEluZm9ybWF0aW9uIFN0cnVjdHVyZSBzaXplIHZhbHVlIHJlbGF0aXZlIHRvIHRoZQ0KKyAqICAgICAgICAgU29mdERldmljZSBiYXNlIGFkZHJlc3MuIFRoZSBzaXplIHZhbHVlIGlzIG9mIHR5cGUgdWludDhfdC4gKi8NCisjZGVmaW5lIFNEX0lORk9fU1RSVUNUX1NJWkVfT0ZGU0VUIChTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCkNCisNCisvKiogQGJyaWVmIERlZmluZXMgdGhlIG9mZnNldCBmb3IgdGhlIFNvZnREZXZpY2Ugc2l6ZSB2YWx1ZSByZWxhdGl2ZSB0byB0aGUgU29mdERldmljZSBiYXNlIGFkZHJlc3MuDQorICogICAgICAgICBUaGUgc2l6ZSB2YWx1ZSBpcyBvZiB0eXBlIHVpbnQzMl90LiAqLw0KKyNkZWZpbmUgU0RfU0laRV9PRkZTRVQgKFNPRlRERVZJQ0VfSU5GT19TVFJVQ1RfT0ZGU0VUICsgMHgwOCkNCisNCisvKiogQGJyaWVmIERlZmluZXMgdGhlIG9mZnNldCBmb3IgRldJRCB2YWx1ZSByZWxhdGl2ZSB0byB0aGUgU29mdERldmljZSBiYXNlIGFkZHJlc3MuIFRoZSBGV0lEIHZhbHVlDQorICogICAgICAgICBpcyBvZiB0eXBlIHVpbnQxNl90LiAgKi8NCisjZGVmaW5lIFNEX0ZXSURfT0ZGU0VUIChTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCArIDB4MEMpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIHRoZSBvZmZzZXQgZm9yIHRoZSBTb2Z0RGV2aWNlIElEIHJlbGF0aXZlIHRvIHRoZSBTb2Z0RGV2aWNlIGJhc2UgYWRkcmVzcy4gVGhlIElEDQorICogICAgICAgICBpcyBvZiB0eXBlIHVpbnQzMl90LiAqLw0KKyNkZWZpbmUgU0RfSURfT0ZGU0VUIChTT0ZUREVWSUNFX0lORk9fU1RSVUNUX09GRlNFVCArIDB4MTApDQorDQorLyoqIEBicmllZiBEZWZpbmVzIHRoZSBvZmZzZXQgZm9yIHRoZSBTb2Z0RGV2aWNlIHZlcnNpb24gcmVsYXRpdmUgdG8gdGhlIFNvZnREZXZpY2UgYmFzZSBhZGRyZXNzIGluDQorICogICAgICAgICB0aGUgc2FtZSBmb3JtYXQgYXMgQHJlZiBTRF9WRVJTSU9OLCBzdG9yZWQgYXMgYW4gdWludDMyX3QuICovDQorI2RlZmluZSBTRF9WRVJTSU9OX09GRlNFVCAoU09GVERFVklDRV9JTkZPX1NUUlVDVF9PRkZTRVQgKyAweDE0KQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyBhIG1hY3JvIGZvciByZXRyaWV2aW5nIHRoZSBhY3R1YWwgU29mdERldmljZSBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmUgc2l6ZSB2YWx1ZQ0KKyAqICAgICAgICAgZnJvbSBhIGdpdmVuIGJhc2UgYWRkcmVzcy4gVXNlIEByZWYgTUJSX1NJWkUgYXMgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIFNvZnREZXZpY2UgaXMNCisgKiAgICAgICAgIGluc3RhbGxlZCBqdXN0IGFib3ZlIHRoZSBNQlIgKHRoZSB1c3VhbCBjYXNlKS4gKi8NCisjZGVmaW5lIFNEX0lORk9fU1RSVUNUX1NJWkVfR0VUKGJhc2VhZGRyKSAoKigodWludDhfdCAqKSAoKGJhc2VhZGRyKSArIFNEX0lORk9fU1RSVUNUX1NJWkVfT0ZGU0VUKSkpDQorDQorLyoqIEBicmllZiBEZWZpbmVzIGEgbWFjcm8gZm9yIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBTb2Z0RGV2aWNlIHNpemUgdmFsdWUgZnJvbSBhIGdpdmVuIGJhc2UNCisgKiAgICAgICAgIGFkZHJlc3MuIFVzZSBAcmVmIE1CUl9TSVpFIGFzIHRoZSBhcmd1bWVudCB3aGVuIHRoZSBTb2Z0RGV2aWNlIGlzIGluc3RhbGxlZCBqdXN0IGFib3ZlDQorICogICAgICAgICB0aGUgTUJSICh0aGUgdXN1YWwgY2FzZSkuICovDQorI2RlZmluZSBTRF9TSVpFX0dFVChiYXNlYWRkcikgKCooKHVpbnQzMl90ICopICgoYmFzZWFkZHIpICsgU0RfU0laRV9PRkZTRVQpKSkNCisNCisvKiogQGJyaWVmIERlZmluZXMgYSBtYWNybyBmb3IgcmV0cmlldmluZyB0aGUgYWN0dWFsIEZXSUQgdmFsdWUgZnJvbSBhIGdpdmVuIGJhc2UgYWRkcmVzcy4gVXNlIEByZWYNCisgKiAgICAgICAgIE1CUl9TSVpFIGFzIHRoZSBhcmd1bWVudCB3aGVuIHRoZSBTb2Z0RGV2aWNlIGlzIGluc3RhbGxlZCBqdXN0IGFib3ZlIHRoZSBNQlIgKHRoZSB1c3VhbA0KKyAqICAgICAgICAgY2FzZSkuICovDQorI2RlZmluZSBTRF9GV0lEX0dFVChiYXNlYWRkcikgKCooKHVpbnQxNl90ICopICgoYmFzZWFkZHIpICsgU0RfRldJRF9PRkZTRVQpKSkNCisNCisvKiogQGJyaWVmIERlZmluZXMgYSBtYWNybyBmb3IgcmV0cmlldmluZyB0aGUgYWN0dWFsIFNvZnREZXZpY2UgSUQgZnJvbSBhIGdpdmVuIGJhc2UgYWRkcmVzcy4gVXNlDQorICogICAgICAgICBAcmVmIE1CUl9TSVpFIGFzIHRoZSBhcmd1bWVudCB3aGVuIHRoZSBTb2Z0RGV2aWNlIGlzIGluc3RhbGxlZCBqdXN0IGFib3ZlIHRoZSBNQlIgKHRoZQ0KKyAqICAgICAgICAgdXN1YWwgY2FzZSkuICovDQorI2RlZmluZSBTRF9JRF9HRVQoYmFzZWFkZHIpICgoU0RfSU5GT19TVFJVQ1RfU0laRV9HRVQoYmFzZWFkZHIpID4gKFNEX0lEX09GRlNFVCAtIFNPRlRERVZJQ0VfSU5GT19TVFJVQ1RfT0ZGU0VUKSkgXA0KKyAgICAgICAgPyAoKigodWludDMyX3QgKikgKChiYXNlYWRkcikgKyBTRF9JRF9PRkZTRVQpKSkgOiBTRE1fSU5GT19GSUVMRF9JTlZBTElEKQ0KKw0KKy8qKiBAYnJpZWYgRGVmaW5lcyBhIG1hY3JvIGZvciByZXRyaWV2aW5nIHRoZSBhY3R1YWwgRldJRCB2YWx1ZSBmcm9tIGEgZ2l2ZW4gYmFzZSBhZGRyZXNzLiBVc2UgQHJlZg0KKyAqICAgICAgICAgTUJSX1NJWkUgYXMgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIFNvZnREZXZpY2UgaXMgaW5zdGFsbGVkIGp1c3QgYWJvdmUgdGhlIE1CUiAodGhlIHVzdWFsDQorICogICAgICAgICBjYXNlKS4gKi8NCisjZGVmaW5lIFNEX1ZFUlNJT05fR0VUKGJhc2VhZGRyKSAoKFNEX0lORk9fU1RSVUNUX1NJWkVfR0VUKGJhc2VhZGRyKSA+IChTRF9WRVJTSU9OX09GRlNFVCAtIFNPRlRERVZJQ0VfSU5GT19TVFJVQ1RfT0ZGU0VUKSkgXA0KKyAgICAgICAgPyAoKigodWludDMyX3QgKikgKChiYXNlYWRkcikgKyBTRF9WRVJTSU9OX09GRlNFVCkpKSA6IFNETV9JTkZPX0ZJRUxEX0lOVkFMSUQpDQorDQorLyoqQGRlZmdyb3VwIE5SRl9GQVVMVF9JRF9SQU5HRVMgRmF1bHQgSUQgcmFuZ2VzDQorICogQHsgKi8NCisjZGVmaW5lIE5SRl9GQVVMVF9JRF9TRF9SQU5HRV9TVEFSVCAgICAgMHgwMDAwMDAwMCAgICAgICAgICAgIC8qKjwgU29mdERldmljZSBJRCByYW5nZSBzdGFydC4gKi8NCisjZGVmaW5lIE5SRl9GQVVMVF9JRF9BUFBfUkFOR0VfU1RBUlQgICAgMHgwMDAwMTAwMCAgICAgICAgICAgIC8qKjwgQXBwbGljYXRpb24gSUQgcmFuZ2Ugc3RhcnQuICovDQorLyoqQH0gKi8NCisNCisvKipAZGVmZ3JvdXAgTlJGX0ZBVUxUX0lEUyBGYXVsdCBJRCB0eXBlcw0KKyAqIEB7ICovDQorI2RlZmluZSBOUkZfRkFVTFRfSURfU0RfQVNTRVJUICAgIChOUkZfRkFVTFRfSURfU0RfUkFOR0VfU1RBUlQgICsgMSkgICAgICAgICAgLyoqPCBTb2Z0RGV2aWNlIGFzc2VydGlvbi4gVGhlIGluZm8gcGFyYW1ldGVyIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlZC4gKi8NCisjZGVmaW5lIE5SRl9GQVVMVF9JRF9BUFBfTUVNQUNDICAgKE5SRl9GQVVMVF9JRF9BUFBfUkFOR0VfU1RBUlQgKyAxKSAgICAgICAgICAvKio8IEFwcGxpY2F0aW9uIGludmFsaWQgbWVtb3J5IGFjY2VzcyAoblJGNTIgb25seSkuIFRoZSBpbmZvIHBhcmFtZXRlciB3aWxsIGNvbnRhaW4gMHgwMDAwMDAwMCwgaW4gY2FzZSBvZiBTb2Z0RGV2aWNlIFJBTQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB2aW9sYXRpb24uIEluIGNhc2Ugb2YgU29mdERldmljZSBwZXJpcGhlcmFsIHJlZ2lzdGVyIHZpb2xhdGlvbiB0aGUgaW5mbyBwYXJhbWV0ZXIgd2lsbCBjb250YWluIHRoZSBzdWItcmVnaW9uIG51bWJlciBvZiBQUkVHSU9OWzBdLCBvbiB3aG9zZSBhZGRyZXNzIHJhbmdlIHRoZSBkaXNhbGxvd2VkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgYWNjZXNzIGNhdXNlZCB0aGUgbWVtb3J5IGFjY2VzcyBmYXVsdC4gKi8NCisvKipAfSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBOUkZfU0RNX0VOVU1TIEVudW1lcmF0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIG5SRiBTb2Z0RGV2aWNlIE1hbmFnZXIgQVBJIFNWQyBudW1iZXJzLiAqLw0KK2VudW0gTlJGX1NEX1NWQ1MNCit7DQorICBTRF9TT0ZUREVWSUNFX0VOQUJMRSA9IFNETV9TVkNfQkFTRSwgLyoqPCA6OnNkX3NvZnRkZXZpY2VfZW5hYmxlICovDQorICBTRF9TT0ZUREVWSUNFX0RJU0FCTEUsICAgICAgICAgICAgICAgLyoqPCA6OnNkX3NvZnRkZXZpY2VfZGlzYWJsZSAqLw0KKyAgU0RfU09GVERFVklDRV9JU19FTkFCTEVELCAgICAgICAgICAgIC8qKjwgOjpzZF9zb2Z0ZGV2aWNlX2lzX2VuYWJsZWQgKi8NCisgIFNEX1NPRlRERVZJQ0VfVkVDVE9SX1RBQkxFX0JBU0VfU0VULCAvKio8IDo6c2Rfc29mdGRldmljZV92ZWN0b3JfdGFibGVfYmFzZV9zZXQgKi8NCisgIFNWQ19TRE1fTEFTVCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBsYWNlaG9sZGVyIGZvciBsYXN0IFNETSBTVkMgKi8NCit9Ow0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBOUkZfU0RNX0RFRklORVMgRGVmaW5lcw0KKyAqIEB7ICovDQorDQorLyoqQGRlZmdyb3VwIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZIENsb2NrIGFjY3VyYWN5DQorICogQHsgKi8NCisNCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzI1MF9QUE0gKDApIC8qKjwgRGVmYXVsdDogMjUwIHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfNTAwX1BQTSAoMSkgLyoqPCA1MDAgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV8xNTBfUFBNICgyKSAvKio8IDE1MCBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzEwMF9QUE0gKDMpIC8qKjwgMTAwIHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfNzVfUFBNICAoNCkgLyoqPCA3NSBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzUwX1BQTSAgKDUpIC8qKjwgNTAgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV8zMF9QUE0gICg2KSAvKio8IDMwIHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfMjBfUFBNICAoNykgLyoqPCAyMCBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzEwX1BQTSAgKDgpIC8qKjwgMTAgcHBtICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWV81X1BQTSAgICg5KSAvKio8ICA1IHBwbSAqLw0KKyNkZWZpbmUgTlJGX0NMT0NLX0xGX1hUQUxfQUNDVVJBQ1lfMl9QUE0gICgxMCkgLyoqPCAgMiBwcG0gKi8NCisjZGVmaW5lIE5SRl9DTE9DS19MRl9YVEFMX0FDQ1VSQUNZXzFfUFBNICAoMTEpIC8qKjwgIDEgcHBtICovDQorDQorLyoqIEB9ICovDQorDQorLyoqQGRlZmdyb3VwIE5SRl9DTE9DS19MRl9TUkMgUG9zc2libGUgTEZDTEsgb3NjaWxsYXRvciBzb3VyY2VzDQorICogQHsgKi8NCisNCisjZGVmaW5lIE5SRl9DTE9DS19MRl9TUkNfUkMgICAgICAoMCkgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExGQ0xLIFJDIG9zY2lsbGF0b3IuICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfU1JDX1hUQUwgICAgKDEpICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMRkNMSyBjcnlzdGFsIG9zY2lsbGF0b3IuICovDQorI2RlZmluZSBOUkZfQ0xPQ0tfTEZfU1JDX1NZTlRIICAgKDIpICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMRkNMSyBTeW50aGVzaXplZCBmcm9tIEhGQ0xLLiAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBOUkZfU0RNX1RZUEVTIFR5cGVzDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgVHlwZSByZXByZXNlbnRpbmcgTEZDTEsgb3NjaWxsYXRvciBzb3VyY2UuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IHNvdXJjZTsgICAgICAgIC8qKjwgTEYgb3NjaWxsYXRvciBjbG9jayBzb3VyY2UsIHNlZSBAcmVmIE5SRl9DTE9DS19MRl9TUkMuICovDQorICB1aW50OF90IHJjX2N0aXY7ICAgICAgLyoqPCBPbmx5IGZvciBOUkZfQ0xPQ0tfTEZfU1JDX1JDOiBDYWxpYnJhdGlvbiB0aW1lciBpbnRlcnZhbCBpbiAxLzQgc2Vjb25kDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgKG5SRjUxOiAxLTY0LCBuUkY1MjogMS0zMikuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVG8gYXZvaWQgZXhjZXNzaXZlIGNsb2NrIGRyaWZ0LCAwLjUgZGVncmVlcyBDZWxzaXVzIGlzIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW0gdGVtcGVyYXR1cmUgY2hhbmdlIGFsbG93ZWQgaW4gb25lIGNhbGlicmF0aW9uIHRpbWVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwuIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc2VsZWN0ZWQgdG8gZW5zdXJlIHRoaXMuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgTXVzdCBiZSAwIGlmIHNvdXJjZSBpcyBub3QgTlJGX0NMT0NLX0xGX1NSQ19SQy4gICovDQorICB1aW50OF90IHJjX3RlbXBfY3RpdjsgLyoqPCAgT25seSBmb3IgTlJGX0NMT0NLX0xGX1NSQ19SQzogSG93IG9mdGVuIChpbiBudW1iZXIgb2YgY2FsaWJyYXRpb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbHMpIHRoZSBSQyBvc2NpbGxhdG9yIHNoYWxsIGJlIGNhbGlicmF0ZWQgaWYgdGhlIHRlbXBlcmF0dXJlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzbid0IGNoYW5nZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IEFsd2F5cyBjYWxpYnJhdGUgZXZlbiBpZiB0aGUgdGVtcGVyYXR1cmUgaGFzbid0IGNoYW5nZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IE9ubHkgY2FsaWJyYXRlIGlmIHRoZSB0ZW1wZXJhdHVyZSBoYXMgY2hhbmdlZCAoblJGNTEgb25seSkuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDItMzM6IENoZWNrIHRoZSB0ZW1wZXJhdHVyZSBhbmQgb25seSBjYWxpYnJhdGUgaWYgaXQgaGFzIGNoYW5nZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIgY2FsaWJyYXRpb24gd2lsbCB0YWtlIHBsYWNlIGV2ZXJ5IHJjX3RlbXBfY3Rpdg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbHMgaW4gYW55IGNhc2UuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgTXVzdCBiZSAwIGlmIHNvdXJjZSBpcyBub3QgTlJGX0NMT0NLX0xGX1NSQ19SQy4NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBGb3IgblJGNTIsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGVuc3VyZSBjYWxpYnJhdGlvbiBhdCBsZWFzdCBvbmNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnkgOCBzZWNvbmRzIHRvIGVuc3VyZSArLy0yNTAgcHBtIGNsb2NrIHN0YWJpbGl0eS4gVGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbiBmb3IgTlJGX0NMT0NLX0xGX1NSQ19SQyBvbiBuUkY1MiBpcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjX2N0aXY9MTYgYW5kIHJjX3RlbXBfY3Rpdj0yLiBUaGlzIHdpbGwgZW5zdXJlIGNhbGlicmF0aW9uIGF0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhc3Qgb25jZSBldmVyeSA4IHNlY29uZHMgYW5kIGZvciB0ZW1wZXJhdHVyZSBjaGFuZ2VzIG9mIDAuNQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZ3JlZXMgQ2Vsc2l1cyBldmVyeSA0IHNlY29uZHMuIFNlZSB0aGUgUHJvZHVjdCBTcGVjaWZpY2F0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBuUkY1MiBkZXZpY2UgYmVpbmcgdXNlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4qLw0KKyAgdWludDhfdCB4dGFsX2FjY3VyYWN5OyAvKio8IEV4dGVybmFsIGNyeXN0YWwgY2xvY2sgYWNjdXJhY3kgdXNlZCBpbiB0aGUgTEwgdG8gY29tcHV0ZSB0aW1pbmcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLCBzZWUgQHJlZiBOUkZfQ0xPQ0tfTEZfWFRBTF9BQ0NVUkFDWS4NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBGb3IgdGhlIE5SRl9DTE9DS19MRl9TUkNfUkMgY2xvY2sgc291cmNlIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuICovDQorfSBucmZfY2xvY2tfbGZfY2ZnX3Q7DQorDQorLyoqQGJyaWVmIEZhdWx0IEhhbmRsZXIgdHlwZS4NCisgKg0KKyAqIFdoZW4gY2VydGFpbiB1bnJlY292ZXJhYmxlIGVycm9ycyBvY2N1ciB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uIG9yIFNvZnREZXZpY2UgdGhlIGZhdWx0IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYmFjay4NCisgKiBUaGUgcHJvdG9jb2wgc3RhY2sgd2lsbCBiZSBpbiBhbiB1bmRlZmluZWQgc3RhdGUgd2hlbiB0aGlzIGhhcHBlbnMgYW5kIHRoZSBvbmx5IHdheSB0byByZWNvdmVyIHdpbGwgYmUgdG8NCisgKiBwZXJmb3JtIGEgcmVzZXQsIHVzaW5nIGUuZy4gQ01TSVMgTlZJQ19TeXN0ZW1SZXNldCgpLg0KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiByZXR1cm5zIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIgdGhlIFNvZnREZXZpY2Ugd2lsbCBjYWxsIE5WSUNfU3lzdGVtUmVzZXQoKS4NCisgKg0KKyAqIEBub3RlIFRoaXMgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgaW4gSGFyZEZhdWx0IGNvbnRleHQsIHRodXMgU1ZDIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkIGZyb20gdGhlIGZhdWx0IGNhbGxiYWNrLg0KKyAqDQorICogQHBhcmFtW2luXSBpZCBGYXVsdCBpZGVudGlmaWVyLiBTZWUgQHJlZiBOUkZfRkFVTFRfSURTLg0KKyAqIEBwYXJhbVtpbl0gcGMgVGhlIHByb2dyYW0gY291bnRlciBvZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIGZhdWx0Lg0KKyAqIEBwYXJhbVtpbl0gaW5mbyBPcHRpb25hbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgZmF1bHQuIFJlZmVyIHRvIGVhY2ggRmF1bHQgaWRlbnRpZmllciBmb3IgZGV0YWlscy4NCisgKg0KKyAqIEBub3RlIFdoZW4gaWQgaXMgc2V0IHRvIE5SRl9GQVVMVF9JRF9BUFBfTUVNQUNDLCBwYyB3aWxsIGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIGJlaW5nIGV4ZWN1dGVkIGF0IHRoZSB0aW1lIHdoZW4NCisgKiB0aGUgZmF1bHQgaXMgZGV0ZWN0ZWQgYnkgdGhlIENQVS4gVGhlIENQVSBwcm9ncmFtIGNvdW50ZXIgbWF5IGhhdmUgYWR2YW5jZWQgdXAgdG8gMiBpbnN0cnVjdGlvbnMgKG5vIGJyYW5jaGluZykgYWZ0ZXIgdGhlIG9uZSB0aGF0IHRyaWdnZXJlZCB0aGUgZmF1bHQuDQorICovDQordHlwZWRlZiB2b2lkICgqbnJmX2ZhdWx0X2hhbmRsZXJfdCkodWludDMyX3QgaWQsIHVpbnQzMl90IHBjLCB1aW50MzJfdCBpbmZvKTsNCisNCisvKiogQH0gKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgTlJGX1NETV9GVU5DVElPTlMgRnVuY3Rpb25zDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgRW5hYmxlcyB0aGUgU29mdERldmljZSBhbmQgYnkgZXh0ZW5zaW9uIHRoZSBwcm90b2NvbCBzdGFjay4NCisgKg0KKyAqIEBub3RlIFNvbWUgY2FyZSBtdXN0IGJlIHRha2VuIGlmIGEgbG93IGZyZXF1ZW5jeSBjbG9jayBzb3VyY2UgaXMgYWxyZWFkeSBydW5uaW5nIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uOg0KKyAqICAgICAgIElmIHRoZSBMRiBjbG9jayBoYXMgYSBkaWZmZXJlbnQgc291cmNlIHRoZW4gdGhlIG9uZSBjdXJyZW50bHkgcnVubmluZywgaXQgd2lsbCBiZSBzdG9wcGVkLiBUaGVuLCB0aGUgbmV3DQorICogICAgICAgY2xvY2sgc291cmNlIHdpbGwgYmUgc3RhcnRlZC4NCisgKg0KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCB3aGVuIHJldHVybmluZyB3aXRoIGFuIGVycm9yLg0KKyAqDQorICogQHBvc3QgSWYgcmV0dXJuIGNvZGUgaXMgOjpOUkZfU1VDQ0VTUw0KKyAqICAgICAgIC0gU29DIGxpYnJhcnkgYW5kIHByb3RvY29sIHN0YWNrIEFQSXMgYXJlIG1hZGUgYXZhaWxhYmxlLg0KKyAqICAgICAgIC0gQSBwb3J0aW9uIG9mIFJBTSB3aWxsIGJlIHVuYXZhaWxhYmxlIChzZWUgcmVsZXZhbnQgU0RTIGRvY3VtZW50YXRpb24pLg0KKyAqICAgICAgIC0gU29tZSBwZXJpcGhlcmFscyB3aWxsIGJlIHVuYXZhaWxhYmxlIG9yIGF2YWlsYWJsZSBvbmx5IHRocm91Z2ggdGhlIFNvQyBBUEkgKHNlZSByZWxldmFudCBTRFMgZG9jdW1lbnRhdGlvbikuDQorICogICAgICAgLSBJbnRlcnJ1cHRzIHdpbGwgbm90IGFycml2ZSBmcm9tIHByb3RlY3RlZCBwZXJpcGhlcmFscyBvciBpbnRlcnJ1cHRzLg0KKyAqICAgICAgIC0gbnJmX252aWNfIGZ1bmN0aW9ucyBtdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBDTVNJUyBOVklDXyBmdW5jdGlvbnMgZm9yIHJlbGlhYmxlIHVzYWdlIG9mIHRoZSBTb2Z0RGV2aWNlLg0KKyAqICAgICAgIC0gSW50ZXJydXB0IGxhdGVuY3kgbWF5IGJlIGFmZmVjdGVkIGJ5IHRoZSBTb2Z0RGV2aWNlICAoc2VlIHJlbGV2YW50IFNEUyBkb2N1bWVudGF0aW9uKS4NCisgKiAgICAgICAtIENob3NlbiBsb3cgZnJlcXVlbmN5IGNsb2NrIHNvdXJjZSB3aWxsIGJlIHJ1bm5pbmcuDQorICoNCisgKiBAcGFyYW0gcF9jbG9ja19sZl9jZmcgTG93IGZyZXF1ZW5jeSBjbG9jayBzb3VyY2UgYW5kIGFjY3VyYWN5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICBJZiBOVUxMIHRoZSBjbG9jayB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgYW4gUkMgc291cmNlIHdpdGggcmNfY3RpdiA9IDE2IGFuZCAucmNfdGVtcF9jdGl2ID0gMg0KKyAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgY2FzZSBvZiBYVEFMIHNvdXJjZSwgdGhlIFBQTSBhY2N1cmFjeSBvZiB0aGUgY2hvc2VuIGNsb2NrIHNvdXJjZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYWN0dWFsIGNoYXJhY3RlcmlzdGljcyBvZiB5b3VyIFhUQUwgY2xvY2suDQorICogQHBhcmFtIGZhdWx0X2hhbmRsZXIgQ2FsbGJhY2sgdG8gYmUgaW52b2tlZCBpbiBjYXNlIG9mIGZhdWx0LCBjYW5ub3QgYmUgTlVMTC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSICBJbnZhbGlkIG9yIE5VTEwgcG9pbnRlciBzdXBwbGllZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfU1RBVEUgU29mdERldmljZSBpcyBhbHJlYWR5IGVuYWJsZWQsIGFuZCB0aGUgY2xvY2sgc291cmNlIGFuZCBmYXVsdCBoYW5kbGVyIGNhbm5vdCBiZSB1cGRhdGVkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU0RNX0lOQ09SUkVDVF9JTlRFUlJVUFRfQ09ORklHVVJBVElPTiBTb2Z0RGV2aWNlIGludGVycnVwdCBpcyBhbHJlYWR5IGVuYWJsZWQsIG9yIGFuIGVuYWJsZWQgaW50ZXJydXB0IGhhcyBhbiBpbGxlZ2FsIHByaW9yaXR5IGxldmVsLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU0RNX0xGQ0xLX1NPVVJDRV9VTktOT1dOIFVua25vd24gbG93IGZyZXF1ZW5jeSBjbG9jayBzb3VyY2Ugc2VsZWN0ZWQuDQorICovDQorU1ZDQUxMKFNEX1NPRlRERVZJQ0VfRU5BQkxFLCB1aW50MzJfdCwgc2Rfc29mdGRldmljZV9lbmFibGUobnJmX2Nsb2NrX2xmX2NmZ190IGNvbnN0ICogcF9jbG9ja19sZl9jZmcsIG5yZl9mYXVsdF9oYW5kbGVyX3QgZmF1bHRfaGFuZGxlcikpOw0KKw0KKw0KKy8qKkBicmllZiBEaXNhYmxlcyB0aGUgU29mdERldmljZSBhbmQgYnkgZXh0ZW5zaW9uIHRoZSBwcm90b2NvbCBzdGFjay4NCisgKg0KKyAqIElkZW1wb3RlbnQgZnVuY3Rpb24gdG8gZGlzYWJsZSB0aGUgU29mdERldmljZS4NCisgKg0KKyAqIEBwb3N0IFNvQyBsaWJyYXJ5IGFuZCBwcm90b2NvbCBzdGFjayBBUElzIGFyZSBtYWRlIHVuYXZhaWxhYmxlLg0KKyAqIEBwb3N0IEFsbCBpbnRlcnJ1cHRzIHRoYXQgd2FzIHByb3RlY3RlZCBieSB0aGUgU29mdERldmljZSB3aWxsIGJlIGRpc2FibGVkIGFuZCBpbml0aWFsaXplZCB0byBwcmlvcml0eSAwIChoaWdoZXN0KS4NCisgKiBAcG9zdCBBbGwgcGVyaXBoZXJhbHMgdXNlZCBieSB0aGUgU29mdERldmljZSB3aWxsIGJlIHJlc2V0IHRvIGRlZmF1bHQgdmFsdWVzLg0KKyAqIEBwb3N0IEFsbCBvZiBSQU0gYmVjb21lIGF2YWlsYWJsZS4NCisgKiBAcG9zdCBBbGwgaW50ZXJydXB0cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4NCisgKiBAcG9zdCBMRkNMSyBzb3VyY2UgY2hvc2VuIGluIDo6c2Rfc29mdGRldmljZV9lbmFibGUgd2lsbCBiZSBsZWZ0IHJ1bm5pbmcuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfU09GVERFVklDRV9ESVNBQkxFLCB1aW50MzJfdCwgc2Rfc29mdGRldmljZV9kaXNhYmxlKHZvaWQpKTsNCisNCisvKipAYnJpZWYgQ2hlY2sgaWYgdGhlIFNvZnREZXZpY2UgaXMgZW5hYmxlZC4NCisgKg0KKyAqIEBwYXJhbVtvdXRdICBwX3NvZnRkZXZpY2VfZW5hYmxlZCBJZiB0aGUgU29mdERldmljZSBpcyBlbmFibGVkOiAxIGVsc2UgMC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9TT0ZUREVWSUNFX0lTX0VOQUJMRUQsIHVpbnQzMl90LCBzZF9zb2Z0ZGV2aWNlX2lzX2VuYWJsZWQodWludDhfdCAqIHBfc29mdGRldmljZV9lbmFibGVkKSk7DQorDQorLyoqQGJyaWVmIFNldHMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciB0YWJsZSBmb3IgaW50ZXJydXB0cyBmb3J3YXJkZWQgZnJvbSB0aGUgU29mdERldmljZQ0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCB3aGVuIGEgYm9vdGxvYWRlciBpcyBlbmFibGVkLg0KKyAqDQorICogQHBhcmFtW2luXSBhZGRyZXNzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUgZm9yIGZvcndhcmRlZCBpbnRlcnJ1cHRzLg0KKw0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9TT0ZUREVWSUNFX1ZFQ1RPUl9UQUJMRV9CQVNFX1NFVCwgdWludDMyX3QsIHNkX3NvZnRkZXZpY2VfdmVjdG9yX3RhYmxlX2Jhc2Vfc2V0KHVpbnQzMl90IGFkZHJlc3MpKTsNCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIE5SRl9TRE1fSF9fDQorDQorLyoqDQorICBAfQ0KKyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc29jLmggYi90aGlyZF9wYXJ0eS9Ob3JkaWNTZW1pY29uZHVjdG9yL3NvZnRkZXZpY2UvczE0MC9oZWFkZXJzL25yZl9zb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZkY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc29jLmgKQEAgLTAsMCArMSw5MjYgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorLyoqDQorICogQGRlZmdyb3VwIG5yZl9zb2NfYXBpIFNvQyBMaWJyYXJ5IEFQSQ0KKyAqIEB7DQorICoNCisgKiBAYnJpZWYgQVBJcyBmb3IgdGhlIFNvQyBsaWJyYXJ5Lg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfU09DX0hfXw0KKyNkZWZpbmUgTlJGX1NPQ19IX18NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisjaW5jbHVkZSAibnJmX3N2Yy5oIg0KKyNpbmNsdWRlICJucmYuaCINCisNCisjaW5jbHVkZSAibnJmX2Vycm9yX3NvYy5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKkBhZGR0b2dyb3VwIE5SRl9TT0NfREVGSU5FUyBEZWZpbmVzDQorICogQHsgKi8NCisNCisvKipAYnJpZWYgVGhlIG51bWJlciBvZiB0aGUgbG93ZXN0IFNWQyBudW1iZXIgcmVzZXJ2ZWQgZm9yIHRoZSBTb0MgbGlicmFyeS4gKi8NCisjZGVmaW5lIFNPQ19TVkNfQkFTRSAgICAgICAgICAgICAgICgweDIwKSAgICAgICAgICAgICAgICAgICAvKio8IEJhc2UgdmFsdWUgZm9yIFNWQ3MgdGhhdCBhcmUgYXZhaWxhYmxlIHdoZW4gdGhlIFNvZnREZXZpY2UgaXMgZGlzYWJsZWQuICovDQorI2RlZmluZSBTT0NfU1ZDX0JBU0VfTk9UX0FWQUlMQUJMRSAoMHgyQikgICAgICAgICAgICAgICAgICAgLyoqPCBCYXNlIHZhbHVlIGZvciBTVkNzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgU29mdERldmljZSBpcyBkaXNhYmxlZC4gKi8NCisNCisvKipAYnJpZWYgR3VhcmFudGVlZCB0aW1lIGZvciBhcHBsaWNhdGlvbiB0byBwcm9jZXNzIHJhZGlvIGluYWN0aXZlIG5vdGlmaWNhdGlvbi4gKi8NCisjZGVmaW5lIE5SRl9SQURJT19OT1RJRklDQVRJT05fSU5BQ1RJVkVfR1VBUkFOVEVFRF9USU1FX1VTICAoNjIpDQorDQorLyoqQGJyaWVmIFRoZSBtaW5pbXVtIGFsbG93ZWQgdGltZXNsb3QgZXh0ZW5zaW9uIHRpbWUuICovDQorI2RlZmluZSBOUkZfUkFESU9fTUlOSU1VTV9USU1FU0xPVF9MRU5HVEhfRVhURU5TSU9OX1RJTUVfVVMgKDIwMCkNCisNCisjZGVmaW5lIFNPQ19FQ0JfS0VZX0xFTkdUSCAgICAgICAgICAgICAgICAoMTYpICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVDQiBrZXkgbGVuZ3RoLiAqLw0KKyNkZWZpbmUgU09DX0VDQl9DTEVBUlRFWFRfTEVOR1RIICAgICAgICAgICgxNikgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRUNCIGNsZWFydGV4dCBsZW5ndGguICovDQorI2RlZmluZSBTT0NfRUNCX0NJUEhFUlRFWFRfTEVOR1RIICAgICAgICAgKFNPQ19FQ0JfQ0xFQVJURVhUX0xFTkdUSCkgLyoqPCBFQ0IgY2lwaGVydGV4dCBsZW5ndGguICovDQorDQorI2lmZGVmIE5SRjUxDQorI2RlZmluZSBTRF9FVlRfSVJRbiAgICAgICAgICAgICAgICAgICAgICAgKFNXSTJfSVJRbikgICAgICAgIC8qKjwgU29mdERldmljZSBFdmVudCBJUlEgbnVtYmVyLiBVc2VkIGZvciBib3RoIHByb3RvY29sIGV2ZW50cyBhbmQgU29DIGV2ZW50cy4gKi8NCisjZGVmaW5lIFNEX0VWVF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAoU1dJMl9JUlFIYW5kbGVyKSAgLyoqPCBTb2Z0RGV2aWNlIEV2ZW50IElSUSBoYW5kbGVyLiBVc2VkIGZvciBib3RoIHByb3RvY29sIGV2ZW50cyBhbmQgU29DIGV2ZW50cy4gKi8NCisjZGVmaW5lIFJBRElPX05PVElGSUNBVElPTl9JUlFuICAgICAgICAgICAoU1dJMV9JUlFuKSAgICAgICAgLyoqPCBUaGUgcmFkaW8gbm90aWZpY2F0aW9uIElSUSBudW1iZXIuICovDQorI2RlZmluZSBSQURJT19OT1RJRklDQVRJT05fSVJRSGFuZGxlciAgICAgKFNXSTFfSVJRSGFuZGxlcikgIC8qKjwgVGhlIHJhZGlvIG5vdGlmaWNhdGlvbiBJUlEgaGFuZGxlci4gKi8NCisjZW5kaWYNCisjaWYgZGVmaW5lZChOUkY1MikgfHwgZGVmaW5lZChOUkY1Mjg0MF9YWEFBKQ0KKyNkZWZpbmUgU0RfRVZUX0lSUW4gICAgICAgICAgICAgICAgICAgICAgIChTV0kyX0VHVTJfSVJRbikgICAgICAgIC8qKjwgU29mdERldmljZSBFdmVudCBJUlEgbnVtYmVyLiBVc2VkIGZvciBib3RoIHByb3RvY29sIGV2ZW50cyBhbmQgU29DIGV2ZW50cy4gKi8NCisjZGVmaW5lIFNEX0VWVF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAoU1dJMl9FR1UyX0lSUUhhbmRsZXIpICAvKio8IFNvZnREZXZpY2UgRXZlbnQgSVJRIGhhbmRsZXIuIFVzZWQgZm9yIGJvdGggcHJvdG9jb2wgZXZlbnRzIGFuZCBTb0MgZXZlbnRzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGZvciB0aGlzIGhhbmRsZXIgaXMgc2V0IHRvIDQgKi8NCisjZGVmaW5lIFJBRElPX05PVElGSUNBVElPTl9JUlFuICAgICAgICAgICAoU1dJMV9FR1UxX0lSUW4pICAgICAgICAvKio8IFRoZSByYWRpbyBub3RpZmljYXRpb24gSVJRIG51bWJlci4gKi8NCisjZGVmaW5lIFJBRElPX05PVElGSUNBVElPTl9JUlFIYW5kbGVyICAgICAoU1dJMV9FR1UxX0lSUUhhbmRsZXIpICAvKio8IFRoZSByYWRpbyBub3RpZmljYXRpb24gSVJRIGhhbmRsZXIuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgZm9yIHRoaXMgaGFuZGxlciBpcyBzZXQgdG8gNCAqLw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTlJGX1JBRElPX0xFTkdUSF9NSU5fVVMgICAgICAgICAgICgxMDApICAgICAgICAgICAgICAgLyoqPCBUaGUgc2hvcnRlc3QgYWxsb3dlZCByYWRpbyB0aW1lc2xvdCwgaW4gbWljcm9zZWNvbmRzLiAqLw0KKyNkZWZpbmUgTlJGX1JBRElPX0xFTkdUSF9NQVhfVVMgICAgICAgICAgICgxMDAwMDApICAgICAgICAgICAgLyoqPCBUaGUgbG9uZ2VzdCBhbGxvd2VkIHJhZGlvIHRpbWVzbG90LCBpbiBtaWNyb3NlY29uZHMuICovDQorDQorI2RlZmluZSBOUkZfUkFESU9fRElTVEFOQ0VfTUFYX1VTICAgICAgICAgKDEyODAwMDAwMFVMIC0gMVVMKSAvKio8IFRoZSBsb25nZXN0IHRpbWVzbG90IGRpc3RhbmNlLCBpbiBtaWNyb3NlY29uZHMsIGFsbG93ZWQgZm9yIHRoZSBkaXN0YW5jZSBwYXJhbWV0ZXIgKHNlZSBAcmVmIG5yZl9yYWRpb19yZXF1ZXN0X25vcm1hbF90KSBpbiB0aGUgcmVxdWVzdC4gKi8NCisNCisjZGVmaW5lIE5SRl9SQURJT19FQVJMSUVTVF9USU1FT1VUX01BWF9VUyAoMTI4MDAwMDAwVUwgLSAxVUwpIC8qKjwgVGhlIGxvbmdlc3QgdGltZW91dCwgaW4gbWljcm9zZWNvbmRzLCBhbGxvd2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgZWFybGllc3QgcG9zc2libGUgdGltZXNsb3QuICovDQorDQorI2RlZmluZSBOUkZfUkFESU9fU1RBUlRfSklUVEVSX1VTICAgICAgICAgKDIpICAgICAgICAgICAgICAgICAvKio8IFRoZSBtYXhpbXVtIGppdHRlciBpbiBAcmVmIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9TVEFSVCByZWxhdGl2ZSB0byB0aGUgcmVxdWVzdGVkIHN0YXJ0IHRpbWUuICovDQorDQorLyoqQH0gKi8NCisNCisvKipAYWRkdG9ncm91cCBOUkZfU09DX0VOVU1TIEVudW1lcmF0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIFRoZSBTVkMgbnVtYmVycyB1c2VkIGJ5IHRoZSBTVkMgZnVuY3Rpb25zIGluIHRoZSBTb0MgbGlicmFyeS4gKi8NCitlbnVtIE5SRl9TT0NfU1ZDUw0KK3sNCisgIFNEX1BQSV9DSEFOTkVMX0VOQUJMRV9HRVQgPSBTT0NfU1ZDX0JBU0UsDQorICBTRF9QUElfQ0hBTk5FTF9FTkFCTEVfU0VULA0KKyAgU0RfUFBJX0NIQU5ORUxfRU5BQkxFX0NMUiwNCisgIFNEX1BQSV9DSEFOTkVMX0FTU0lHTiwNCisgIFNEX1BQSV9HUk9VUF9UQVNLX0VOQUJMRSwNCisgIFNEX1BQSV9HUk9VUF9UQVNLX0RJU0FCTEUsDQorICBTRF9QUElfR1JPVVBfQVNTSUdOLA0KKyAgU0RfUFBJX0dST1VQX0dFVCwNCisgIFNEX0ZMQVNIX1BBR0VfRVJBU0UsDQorICBTRF9GTEFTSF9XUklURSwNCisgIFNEX0ZMQVNIX1BST1RFQ1QsDQorICBTRF9NVVRFWF9ORVcgPSBTT0NfU1ZDX0JBU0VfTk9UX0FWQUlMQUJMRSwNCisgIFNEX01VVEVYX0FDUVVJUkUsDQorICBTRF9NVVRFWF9SRUxFQVNFLA0KKyAgU0RfUkFORF9BUFBMSUNBVElPTl9QT09MX0NBUEFDSVRZX0dFVCwNCisgIFNEX1JBTkRfQVBQTElDQVRJT05fQllURVNfQVZBSUxBQkxFX0dFVCwNCisgIFNEX1JBTkRfQVBQTElDQVRJT05fVkVDVE9SX0dFVCwNCisgIFNEX1BPV0VSX01PREVfU0VULA0KKyAgU0RfUE9XRVJfU1lTVEVNX09GRiwNCisgIFNEX1BPV0VSX1JFU0VUX1JFQVNPTl9HRVQsDQorICBTRF9QT1dFUl9SRVNFVF9SRUFTT05fQ0xSLA0KKyAgU0RfUE9XRVJfUE9GX0VOQUJMRSwNCisgIFNEX1BPV0VSX1BPRl9USFJFU0hPTERfU0VULA0KKyAgU0RfUE9XRVJfUkFNX1BPV0VSX1NFVCwNCisgIFNEX1BPV0VSX1JBTV9QT1dFUl9DTFIsDQorICBTRF9QT1dFUl9SQU1fUE9XRVJfR0VULA0KKyAgU0RfUE9XRVJfR1BSRUdSRVRfU0VULA0KKyAgU0RfUE9XRVJfR1BSRUdSRVRfQ0xSLA0KKyAgU0RfUE9XRVJfR1BSRUdSRVRfR0VULA0KKyAgU0RfUE9XRVJfRENEQ19NT0RFX1NFVCwNCisgIFNEX0FQUF9FVlRfV0FJVCwNCisgIFNEX0NMT0NLX0hGQ0xLX1JFUVVFU1QsDQorICBTRF9DTE9DS19IRkNMS19SRUxFQVNFLA0KKyAgU0RfQ0xPQ0tfSEZDTEtfSVNfUlVOTklORywNCisgIFNEX1JBRElPX05PVElGSUNBVElPTl9DRkdfU0VULA0KKyAgU0RfRUNCX0JMT0NLX0VOQ1JZUFQsDQorICBTRF9FQ0JfQkxPQ0tTX0VOQ1JZUFQsDQorICBTRF9SQURJT19TRVNTSU9OX09QRU4sDQorICBTRF9SQURJT19TRVNTSU9OX0NMT1NFLA0KKyAgU0RfUkFESU9fUkVRVUVTVCwNCisgIFNEX0VWVF9HRVQsDQorICBTRF9URU1QX0dFVCwNCisgIFNWQ19TT0NfTEFTVA0KK307DQorDQorLyoqQGJyaWVmIFBvc3NpYmxlIHZhbHVlcyBvZiBhIDo6bnJmX211dGV4X3QuICovDQorZW51bSBOUkZfTVVURVhfVkFMVUVTDQorew0KKyAgTlJGX01VVEVYX0ZSRUUsDQorICBOUkZfTVVURVhfVEFLRU4NCit9Ow0KKw0KKy8qKkBicmllZiBQb3dlciBtb2Rlcy4gKi8NCitlbnVtIE5SRl9QT1dFUl9NT0RFUw0KK3sNCisgIE5SRl9QT1dFUl9NT0RFX0NPTlNUTEFULCAgLyoqPCBDb25zdGFudCBsYXRlbmN5IG1vZGUuIFNlZSBwb3dlciBtYW5hZ2VtZW50IGluIHRoZSByZWZlcmVuY2UgbWFudWFsLiAqLw0KKyAgTlJGX1BPV0VSX01PREVfTE9XUFdSICAgICAvKio8IExvdyBwb3dlciBtb2RlLiBTZWUgcG93ZXIgbWFuYWdlbWVudCBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbC4gKi8NCit9Ow0KKw0KKw0KKy8qKkBicmllZiBQb3dlciBmYWlsdXJlIHRocmVzaG9sZHMgKi8NCitlbnVtIE5SRl9QT1dFUl9USFJFU0hPTERTDQorew0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMTcgPSA0VUwsIC8qKjwgMS43IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMTgsICAgICAgIC8qKjwgMS44IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMTksICAgICAgIC8qKjwgMS45IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjAsICAgICAgIC8qKjwgMi4wIFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjEsICAgICAgIC8qKjwgMi4xIFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjIsICAgICAgIC8qKjwgMi4yIFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjMsICAgICAgIC8qKjwgMi4zIFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjQsICAgICAgIC8qKjwgMi40IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjUsICAgICAgIC8qKjwgMi41IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjYsICAgICAgIC8qKjwgMi42IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjcsICAgICAgIC8qKjwgMi43IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KKyAgTlJGX1BPV0VSX1RIUkVTSE9MRF9WMjggICAgICAgIC8qKjwgMi44IFZvbHRzIHBvd2VyIGZhaWx1cmUgdGhyZXNob2xkLiAqLw0KK307DQorDQorDQorLyoqQGJyaWVmIERDL0RDIGNvbnZlcnRlciBtb2Rlcy4gKi8NCitlbnVtIE5SRl9QT1dFUl9EQ0RDX01PREVTDQorew0KKyAgTlJGX1BPV0VSX0RDRENfRElTQUJMRSwgICAgICAgICAgLyoqPCBUaGUgRENEQyBpcyBkaXNhYmxlZC4gKi8NCisgIE5SRl9QT1dFUl9EQ0RDX0VOQUJMRSAgICAgICAgICAgIC8qKjwgVGhlIERDREMgaXMgZW5hYmxlZC4gICovDQorfTsNCisNCisvKipAYnJpZWYgUmFkaW8gbm90aWZpY2F0aW9uIGRpc3RhbmNlcy4gKi8NCitlbnVtIE5SRl9SQURJT19OT1RJRklDQVRJT05fRElTVEFOQ0VTDQorew0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRV9OT05FID0gMCwgLyoqPCBUaGUgZXZlbnQgZG9lcyBub3QgaGF2ZSBhIG5vdGlmaWNhdGlvbi4gKi8NCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fRElTVEFOQ0VfODAwVVMsICAgIC8qKjwgVGhlIGRpc3RhbmNlIGZyb20gdGhlIGFjdGl2ZSBub3RpZmljYXRpb24gdG8gc3RhcnQgb2YgcmFkaW8gYWN0aXZpdHkuICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFXzE3NDBVUywgICAvKio8IFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9uIHRvIHN0YXJ0IG9mIHJhZGlvIGFjdGl2aXR5LiAqLw0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRV8yNjgwVVMsICAgLyoqPCBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbiB0byBzdGFydCBvZiByYWRpbyBhY3Rpdml0eS4gKi8NCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fRElTVEFOQ0VfMzYyMFVTLCAgIC8qKjwgVGhlIGRpc3RhbmNlIGZyb20gdGhlIGFjdGl2ZSBub3RpZmljYXRpb24gdG8gc3RhcnQgb2YgcmFkaW8gYWN0aXZpdHkuICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFXzQ1NjBVUywgICAvKio8IFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9uIHRvIHN0YXJ0IG9mIHJhZGlvIGFjdGl2aXR5LiAqLw0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9ESVNUQU5DRV81NTAwVVMgICAgLyoqPCBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbiB0byBzdGFydCBvZiByYWRpbyBhY3Rpdml0eS4gKi8NCit9Ow0KKw0KKw0KKy8qKkBicmllZiBSYWRpbyBub3RpZmljYXRpb24gdHlwZXMuICovDQorZW51bSBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVTDQorew0KKyAgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFX05PTkUgPSAwLCAgICAgICAgLyoqPCBUaGUgZXZlbnQgZG9lcyBub3QgaGF2ZSBhIHJhZGlvIG5vdGlmaWNhdGlvbiBzaWduYWwuICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVfSU5UX09OX0FDVElWRSwgICAvKio8IFVzaW5nIGludGVycnVwdCBmb3Igbm90aWZpY2F0aW9uIHdoZW4gdGhlIHJhZGlvIHdpbGwgYmUgZW5hYmxlZC4gKi8NCisgIE5SRl9SQURJT19OT1RJRklDQVRJT05fVFlQRV9JTlRfT05fSU5BQ1RJVkUsIC8qKjwgVXNpbmcgaW50ZXJydXB0IGZvciBub3RpZmljYXRpb24gd2hlbiB0aGUgcmFkaW8gaGFzIGJlZW4gZGlzYWJsZWQuICovDQorICBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVfSU5UX09OX0JPVEgsICAgICAvKio8IFVzaW5nIGludGVycnVwdCBmb3Igbm90aWZpY2F0aW9uIGJvdGggd2hlbiB0aGUgcmFkaW8gd2lsbCBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZC4gKi8NCit9Ow0KKw0KKy8qKkBicmllZiBUaGUgUmFkaW8gc2lnbmFsIGNhbGxiYWNrIHR5cGVzLiAqLw0KK2VudW0gTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFDQorew0KKyAgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1NUQVJULCAgICAgICAgICAgICAvKio8IFRoaXMgc2lnbmFsIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGhlIHJhZGlvIHRpbWVzbG90LiAqLw0KKyAgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1RJTUVSMCwgICAgICAgICAgICAvKio8IFRoaXMgc2lnbmFsIGluZGljYXRlcyB0aGUgTlJGX1RJTUVSMCBpbnRlcnJ1cHQuICovDQorICBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfUkFESU8sICAgICAgICAgICAgIC8qKjwgVGhpcyBzaWduYWwgaW5kaWNhdGVzIHRoZSBOUkZfUkFESU8gaW50ZXJydXB0LiAqLw0KKyAgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX0VYVEVORF9GQUlMRUQsICAgICAvKio8IFRoaXMgc2lnbmFsIGluZGljYXRlcyBleHRlbmQgYWN0aW9uIGZhaWxlZC4gKi8NCisgIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9FWFRFTkRfU1VDQ0VFREVEICAgLyoqPCBUaGlzIHNpZ25hbCBpbmRpY2F0ZXMgZXh0ZW5kIGFjdGlvbiBzdWNjZWVkZWQuICovDQorfTsNCisNCisvKipAYnJpZWYgVGhlIGFjdGlvbnMgcmVxdWVzdGVkIGJ5IHRoZSBzaWduYWwgY2FsbGJhY2suDQorICoNCisgKiAgVGhpcyBjb2RlIGdpdmVzIHRoZSBTT0MgaW5zdHJ1Y3Rpb25zIGFib3V0IHdoYXQgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgc2lnbmFsIGNhbGxiYWNrIGhhcw0KKyAqICByZXR1cm5lZC4NCisgKi8NCitlbnVtIE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9ODQorew0KKyAgTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fTk9ORSwgICAgICAgICAgICAvKio8IFJldHVybiB3aXRob3V0IGFjdGlvbi4gKi8NCisgIE5SRl9SQURJT19TSUdOQUxfQ0FMTEJBQ0tfQUNUSU9OX0VYVEVORCwgICAgICAgICAgLyoqPCBSZXF1ZXN0IGFuIGV4dGVuc2lvbiBvZiB0aGUgY3VycmVudCB0aW1lc2xvdCAobWF4aW11bSBleGVjdXRpb24gdGltZSBmb3IgdGhpcyBhY3Rpb24gaXMgd2hlbiB0aGUgZXh0ZW5zaW9uIHN1Y2NlZWRlZCkuICovDQorICBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9FTkQsICAgICAgICAgICAgIC8qKjwgRW5kIHRoZSBjdXJyZW50IHJhZGlvIHRpbWVzbG90LiAqLw0KKyAgTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fUkVRVUVTVF9BTkRfRU5EICAvKio8IFJlcXVlc3QgYSBuZXcgcmFkaW8gdGltZXNsb3QgYW5kIGVuZCB0aGUgY3VycmVudCB0aW1lc2xvdC4gKi8NCit9Ow0KKw0KKy8qKkBicmllZiBSYWRpbyB0aW1lc2xvdCBoaWdoIGZyZXF1ZW5jeSBjbG9jayBzb3VyY2UgY29uZmlndXJhdGlvbi4gKi8NCitlbnVtIE5SRl9SQURJT19IRkNMS19DRkcNCit7DQorICBOUkZfUkFESU9fSEZDTEtfQ0ZHX1hUQUxfR1VBUkFOVEVFRCwgLyoqPCBUaGUgU29mdERldmljZSB3aWxsIGd1YXJhbnRlZSB0aGF0IHRoZSBoaWdoIGZyZXF1ZW5jeSBjbG9jayBzb3VyY2UgaXMgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIGNyeXN0YWwgZm9yIHRoZSB3aG9sZSBkdXJhdGlvbiBvZiB0aGUgdGltZXNsb3QuIFRoaXMgc2hvdWxkIGJlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWQgb3B0aW9uIGZvciBldmVudHMgdGhhdCB1c2UgdGhlIHJhZGlvIG9yIHJlcXVpcmUgaGlnaCB0aW1pbmcgYWNjdXJhY3kuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoZSBTb2Z0RGV2aWNlIHdpbGwgYXV0b21hdGljYWxseSB0dXJuIG9uIGFuZCBvZmYgdGhlIGV4dGVybmFsIGNyeXN0YWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgdGltZXNsb3QsIHJlc3BlY3RpdmVseS4gVGhlIGNyeXN0YWwgbWF5IGFsc28NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50aW9uYWxseSBiZSBsZWZ0IHJ1bm5pbmcgYWZ0ZXIgdGhlIHRpbWVzbG90LCBpbiBjYXNlcyB3aGVyZSBpdCBpcyBuZWVkZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIFNvZnREZXZpY2Ugc2hvcnRseSBhZnRlciB0aGUgZW5kIG9mIHRoZSB0aW1lc2xvdC4gKi8NCisgIE5SRl9SQURJT19IRkNMS19DRkdfTk9fR1VBUkFOVEVFICAgIC8qKjwgVGhpcyBjb25maWd1cmF0aW9uIGFsbG93cyBmb3IgZWFybGllciBhbmQgdGlnaHRlciBzY2hlZHVsaW5nIG9mIHRpbWVzbG90cy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFJDIG9zY2lsbGF0b3IgbWF5IGJlIHRoZSBjbG9jayBzb3VyY2UgaW4gcGFydCBvciBmb3IgdGhlIHdob2xlIGR1cmF0aW9uIG9mIHRoZSB0aW1lc2xvdC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFJDIG9zY2lsbGF0b3IncyBhY2N1cmFjeSBtdXN0IHRoZXJlZm9yZSBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIElmIHRoZSBhcHBsaWNhdGlvbiB3aWxsIHVzZSB0aGUgcmFkaW8gcGVyaXBoZXJhbCBpbiB0aW1lc2xvdHMgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGNyeXN0YWwgaXMgcnVubmluZyBhbmQgc3RhYmxlIGJlZm9yZSBzdGFydGluZyB0aGUgcmFkaW8uICovDQorfTsNCisNCisvKipAYnJpZWYgUmFkaW8gdGltZXNsb3QgcHJpb3JpdGllcy4gKi8NCitlbnVtIE5SRl9SQURJT19QUklPUklUWQ0KK3sNCisgIE5SRl9SQURJT19QUklPUklUWV9ISUdILCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIaWdoIChlcXVhbCBwcmlvcml0eSBhcyB0aGUgbm9ybWFsIGNvbm5lY3Rpb24gcHJpb3JpdHkgb2YgdGhlIFNvZnREZXZpY2Ugc3RhY2socykpLiAqLw0KKyAgTlJGX1JBRElPX1BSSU9SSVRZX05PUk1BTCwgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vcm1hbCAoZXF1YWwgcHJpb3JpdHkgYXMgdGhlIHByaW9yaXR5IG9mIHNlY29uZGFyeSBhY3Rpdml0aWVzIG9mIHRoZSBTb2Z0RGV2aWNlIHN0YWNrKHMpKS4gKi8NCit9Ow0KKw0KKy8qKkBicmllZiBSYWRpbyB0aW1lc2xvdCByZXF1ZXN0IHR5cGUuICovDQorZW51bSBOUkZfUkFESU9fUkVRVUVTVF9UWVBFDQorew0KKyAgTlJGX1JBRElPX1JFUV9UWVBFX0VBUkxJRVNULCAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlcXVlc3QgcmFkaW8gdGltZXNsb3QgYXMgZWFybHkgYXMgcG9zc2libGUuIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGZvciB0aGUgZmlyc3QgcmVxdWVzdCBpbiBhIHNlc3Npb24uICovDQorICBOUkZfUkFESU9fUkVRX1RZUEVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTm9ybWFsIHJhZGlvIHRpbWVzbG90IHJlcXVlc3QuICovDQorfTsNCisNCisvKipAYnJpZWYgU29DIEV2ZW50cy4gKi8NCitlbnVtIE5SRl9TT0NfRVZUUw0KK3sNCisgIE5SRl9FVlRfSEZDTEtTVEFSVEVELCAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgSEZDTEsgaGFzIHN0YXJ0ZWQuICovDQorICBOUkZfRVZUX1BPV0VSX0ZBSUxVUkVfV0FSTklORywgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgYSBwb3dlciBmYWlsdXJlIHdhcm5pbmcgaGFzIG9jY3VycmVkLiAqLw0KKyAgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fU1VDQ0VTUywgICAgICAgICAgICAgIC8qKjwgRXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSBvbmdvaW5nIGZsYXNoIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gKi8NCisgIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX0VSUk9SLCAgICAgICAgICAgICAgICAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgb25nb2luZyBmbGFzaCBvcGVyYXRpb24gaGFzIHRpbWVkIG91dCB3aXRoIGFuIGVycm9yLiAqLw0KKyAgTlJGX0VWVF9SQURJT19CTE9DS0VELCAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQgaW5kaWNhdGluZyB0aGF0IGEgcmFkaW8gdGltZXNsb3Qgd2FzIGJsb2NrZWQuICovDQorICBOUkZfRVZUX1JBRElPX0NBTkNFTEVELCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFdmVudCBpbmRpY2F0aW5nIHRoYXQgYSByYWRpbyB0aW1lc2xvdCB3YXMgY2FuY2VsZWQgYnkgU29mdERldmljZS4gKi8NCisgIE5SRl9FVlRfUkFESU9fU0lHTkFMX0NBTExCQUNLX0lOVkFMSURfUkVUVVJOLCAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHJhZGlvIHRpbWVzbG90IHNpZ25hbCBjYWxsYmFjayBoYW5kbGVyIHJldHVybiB3YXMgaW52YWxpZC4gKi8NCisgIE5SRl9FVlRfUkFESU9fU0VTU0lPTl9JRExFLCAgICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHJhZGlvIHRpbWVzbG90IHNlc3Npb24gaXMgaWRsZS4gKi8NCisgIE5SRl9FVlRfUkFESU9fU0VTU0lPTl9DTE9TRUQsICAgICAgICAgICAgICAgICAvKio8IEV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHJhZGlvIHRpbWVzbG90IHNlc3Npb24gaXMgY2xvc2VkLiAqLw0KKyAgTlJGX0VWVF9OVU1CRVJfT0ZfRVZUUw0KK307DQorDQorLyoqQH0gKi8NCisNCisNCisvKipAYWRkdG9ncm91cCBOUkZfU09DX1NUUlVDVFVSRVMgU3RydWN0dXJlcw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIFJlcHJlc2VudHMgYSBtdXRleCBmb3IgdXNlIHdpdGggdGhlIG5yZl9tdXRleCBmdW5jdGlvbnMuDQorICogQG5vdGUgQWNjZXNzaW5nIHRoZSB2YWx1ZSBkaXJlY3RseSBpcyBub3Qgc2FmZSwgdXNlIHRoZSBtdXRleCBmdW5jdGlvbnMhDQorICovDQordHlwZWRlZiB2b2xhdGlsZSB1aW50OF90IG5yZl9tdXRleF90Ow0KKw0KKy8qKkBicmllZiBQYXJhbWV0ZXJzIGZvciBhIHJlcXVlc3QgZm9yIGEgdGltZXNsb3QgYXMgZWFybHkgYXMgcG9zc2libGUuICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgIGhmY2xrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSGlnaCBmcmVxdWVuY3kgY2xvY2sgc291cmNlLCBzZWUgQHJlZiBOUkZfUkFESU9fSEZDTEtfQ0ZHLiAqLw0KKyAgdWludDhfdCAgICAgICBwcmlvcml0eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSByYWRpbyB0aW1lc2xvdCBwcmlvcml0eSwgc2VlIEByZWYgTlJGX1JBRElPX1BSSU9SSVRZLiAqLw0KKyAgdWludDMyX3QgICAgICBsZW5ndGhfdXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSByYWRpbyB0aW1lc2xvdCBsZW5ndGggKGluIHRoZSByYW5nZSAxMDAgdG8gMTAwLDAwMF0gbWljcm9zZWNvbmRzKS4gKi8NCisgIHVpbnQzMl90ICAgICAgdGltZW91dF91czsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb25nZXN0IGFjY2VwdGFibGUgZGVsYXkgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0ZWQgdGltZXNsb3QgKHVwIHRvIEByZWYgTlJGX1JBRElPX0VBUkxJRVNUX1RJTUVPVVRfTUFYX1VTIG1pY3Jvc2Vjb25kcykuICovDQorfSBucmZfcmFkaW9fcmVxdWVzdF9lYXJsaWVzdF90Ow0KKw0KKy8qKkBicmllZiBQYXJhbWV0ZXJzIGZvciBhIG5vcm1hbCByYWRpbyB0aW1lc2xvdCByZXF1ZXN0LiAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCAgICAgICBoZmNsazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEhpZ2ggZnJlcXVlbmN5IGNsb2NrIHNvdXJjZSwgc2VlIEByZWYgTlJGX1JBRElPX0hGQ0xLX0NGRy4gKi8NCisgIHVpbnQ4X3QgICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgcmFkaW8gdGltZXNsb3QgcHJpb3JpdHksIHNlZSBAcmVmIE5SRl9SQURJT19QUklPUklUWS4gKi8NCisgIHVpbnQzMl90ICAgICAgZGlzdGFuY2VfdXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEaXN0YW5jZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgcmFkaW8gdGltZXNsb3QgKHVwIHRvIEByZWYgTlJGX1JBRElPX0RJU1RBTkNFX01BWF9VUyBtaWNyb3NlY29uZHMpLiAqLw0KKyAgdWludDMyX3QgICAgICBsZW5ndGhfdXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSByYWRpbyB0aW1lc2xvdCBsZW5ndGggKGluIHRoZSByYW5nZSBbMTAwLi4xMDAsMDAwXSBtaWNyb3NlY29uZHMpLiAqLw0KK30gbnJmX3JhZGlvX3JlcXVlc3Rfbm9ybWFsX3Q7DQorDQorLyoqQGJyaWVmIFJhZGlvIHRpbWVzbG90IHJlcXVlc3QgcGFyYW1ldGVycy4gKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlOyAgICAgLyoqPCBUeXBlIG9mIHJlcXVlc3QsIHNlZSBAcmVmIE5SRl9SQURJT19SRVFVRVNUX1RZUEUuICovDQorICB1bmlvbg0KKyAgew0KKyAgICBucmZfcmFkaW9fcmVxdWVzdF9lYXJsaWVzdF90ICBlYXJsaWVzdDsgICAgICAgICAvKio8IFBhcmFtZXRlcnMgZm9yIHJlcXVlc3RpbmcgYSByYWRpbyB0aW1lc2xvdCBhcyBlYXJseSBhcyBwb3NzaWJsZS4gKi8NCisgICAgbnJmX3JhZGlvX3JlcXVlc3Rfbm9ybWFsX3QgICAgbm9ybWFsOyAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIGZvciByZXF1ZXN0aW5nIGEgbm9ybWFsIHJhZGlvIHRpbWVzbG90LiAqLw0KKyAgfSBwYXJhbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBhcmFtZXRlciB1bmlvbi4gKi8NCit9IG5yZl9yYWRpb19yZXF1ZXN0X3Q7DQorDQorLyoqQGJyaWVmIFJldHVybiBwYXJhbWV0ZXJzIG9mIHRoZSByYWRpbyB0aW1lc2xvdCBzaWduYWwgY2FsbGJhY2suICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90ICAgICAgICAgICAgICAgY2FsbGJhY2tfYWN0aW9uOyAgICAgICAgICAgIC8qKjwgVGhlIGFjdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHdoZW4gcmV0dXJuaW5nIGZyb20gdGhlIHNpZ25hbCBjYWxsYmFjaywgc2VlIEByZWYgTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT04uICovDQorICB1bmlvbg0KKyAgew0KKyAgICBzdHJ1Y3QNCisgICAgew0KKyAgICAgIG5yZl9yYWRpb19yZXF1ZXN0X3QgKiBwX25leHQ7ICAgICAgICAgICAgICAgICAvKio8IFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBuZXh0IHJhZGlvIHRpbWVzbG90LiAqLw0KKyAgICB9IHJlcXVlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgcmV0dXJuX2NvZGUgQHJlZiBOUkZfUkFESU9fU0lHTkFMX0NBTExCQUNLX0FDVElPTl9SRVFVRVNUX0FORF9FTkQuICovDQorICAgIHN0cnVjdA0KKyAgICB7DQorICAgICAgdWludDMyX3QgICAgICAgICAgICAgIGxlbmd0aF91czsgICAgICAgICAgICAgIC8qKjwgUmVxdWVzdGVkIGV4dGVuc2lvbiBvZiB0aGUgcmFkaW8gdGltZXNsb3QgZHVyYXRpb24gKG1pY3Jvc2Vjb25kcykgKGZvciBtaW5pbXVtIHRpbWUgc2VlIEByZWYgTlJGX1JBRElPX01JTklNVU1fVElNRVNMT1RfTEVOR1RIX0VYVEVOU0lPTl9USU1FX1VTKS4gKi8NCisgICAgfSBleHRlbmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHJldHVybl9jb2RlIEByZWYgTlJGX1JBRElPX1NJR05BTF9DQUxMQkFDS19BQ1RJT05fRVhURU5ELiAqLw0KKyAgfSBwYXJhbXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBhcmFtZXRlciB1bmlvbi4gKi8NCit9IG5yZl9yYWRpb19zaWduYWxfY2FsbGJhY2tfcmV0dXJuX3BhcmFtX3Q7DQorDQorLyoqQGJyaWVmIFRoZSByYWRpbyB0aW1lc2xvdCBzaWduYWwgY2FsbGJhY2sgdHlwZS4NCisgKg0KKyAqIEBub3RlIEluIGNhc2Ugb2YgaW52YWxpZCByZXR1cm4gcGFyYW1ldGVycywgdGhlIHJhZGlvIHRpbWVzbG90IHdpbGwgYXV0b21hdGljYWxseSBlbmQNCisgKiAgICAgICBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgc2lnbmFsIGNhbGxiYWNrIGFuZCB0aGUNCisgKiAgICAgICBAcmVmIE5SRl9FVlRfUkFESU9fU0lHTkFMX0NBTExCQUNLX0lOVkFMSURfUkVUVVJOIGV2ZW50IHdpbGwgYmUgc2VudC4NCisgKiBAbm90ZSBUaGUgcmV0dXJuZWQgc3RydWN0IHBvaW50ZXIgbXVzdCByZW1haW4gdmFsaWQgYWZ0ZXIgdGhlIHNpZ25hbCBjYWxsYmFjaw0KKyAqICAgICAgIGZ1bmN0aW9uIHJldHVybnMuIEZvciBpbnN0YW5jZSwgdGhpcyBtZWFucyB0aGF0IGl0IG11c3Qgbm90IHBvaW50IHRvIGEgc3RhY2sgdmFyaWFibGUuDQorICoNCisgKiBAcGFyYW1baW5dIHNpZ25hbF90eXBlIFR5cGUgb2Ygc2lnbmFsLCBzZWUgQHJlZiBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEUuDQorICoNCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgYWN0aW9uIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYXRpb24uDQorICovDQordHlwZWRlZiBucmZfcmFkaW9fc2lnbmFsX2NhbGxiYWNrX3JldHVybl9wYXJhbV90ICogKCpucmZfcmFkaW9fc2lnbmFsX2NhbGxiYWNrX3QpICh1aW50OF90IHNpZ25hbF90eXBlKTsNCisNCisvKipAYnJpZWYgQUVTIEVDQiBwYXJhbWV0ZXIgdHlwZWRlZnMgKi8NCit0eXBlZGVmIHVpbnQ4X3Qgc29jX2VjYl9rZXlfdFtTT0NfRUNCX0tFWV9MRU5HVEhdOyAgICAgICAgICAgICAgICAvKio8IEVuY3J5cHRpb24ga2V5IHR5cGUuICovDQordHlwZWRlZiB1aW50OF90IHNvY19lY2JfY2xlYXJ0ZXh0X3RbU09DX0VDQl9DTEVBUlRFWFRfTEVOR1RIXTsgICAgLyoqPCBDbGVhcnRleHQgZGF0YSB0eXBlLiAqLw0KK3R5cGVkZWYgdWludDhfdCBzb2NfZWNiX2NpcGhlcnRleHRfdFtTT0NfRUNCX0NJUEhFUlRFWFRfTEVOR1RIXTsgIC8qKjwgQ2lwaGVydGV4dCBkYXRhIHR5cGUuICovDQorDQorLyoqQGJyaWVmIEFFUyBFQ0IgZGF0YSBzdHJ1Y3R1cmUgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHNvY19lY2Jfa2V5X3QgICAgICAgIGtleTsgICAgICAgICAgICAvKio8IEVuY3J5cHRpb24ga2V5LiAqLw0KKyAgc29jX2VjYl9jbGVhcnRleHRfdCAgY2xlYXJ0ZXh0OyAgICAgIC8qKjwgQ2xlYXJ0ZXh0IGRhdGEuICovDQorICBzb2NfZWNiX2NpcGhlcnRleHRfdCBjaXBoZXJ0ZXh0OyAgICAgLyoqPCBDaXBoZXJ0ZXh0IGRhdGEuICovDQorfSBucmZfZWNiX2hhbF9kYXRhX3Q7DQorDQorLyoqQGJyaWVmIEFFUyBFQ0IgYmxvY2suIFVzZWQgdG8gcHJvdmlkZSBtdWx0aXBsZSBibG9ja3MgaW4gYSBzaW5nbGUgY2FsbA0KKyAgICAgICAgICB0byBAcmVmIHNkX2VjYl9ibG9ja3NfZW5jcnlwdC4qLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgc29jX2VjYl9rZXlfdCBjb25zdCAqICAgICAgIHBfa2V5OyAgICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBFbmNyeXB0aW9uIGtleS4gKi8NCisgIHNvY19lY2JfY2xlYXJ0ZXh0X3QgY29uc3QgKiBwX2NsZWFydGV4dDsgICAgIC8qKjwgUG9pbnRlciB0byB0aGUgQ2xlYXJ0ZXh0IGRhdGEuICovDQorICBzb2NfZWNiX2NpcGhlcnRleHRfdCAqICAgICAgcF9jaXBoZXJ0ZXh0OyAgICAvKio8IFBvaW50ZXIgdG8gdGhlIENpcGhlcnRleHQgZGF0YS4gKi8NCit9IG5yZl9lY2JfaGFsX2RhdGFfYmxvY2tfdDsNCisNCisvKipAfSAqLw0KKw0KKy8qKkBhZGR0b2dyb3VwIE5SRl9TT0NfRlVOQ1RJT05TIEZ1bmN0aW9ucw0KKyAqIEB7ICovDQorDQorLyoqQGJyaWVmIEluaXRpYWxpemUgYSBtdXRleC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9tdXRleCBQb2ludGVyIHRvIHRoZSBtdXRleCB0byBpbml0aWFsaXplLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX01VVEVYX05FVywgdWludDMyX3QsIHNkX211dGV4X25ldyhucmZfbXV0ZXhfdCAqIHBfbXV0ZXgpKTsNCisNCisvKipAYnJpZWYgQXR0ZW1wdCB0byBhY3F1aXJlIGEgbXV0ZXguDQorICoNCisgKiBAcGFyYW1baW5dIHBfbXV0ZXggUG9pbnRlciB0byB0aGUgbXV0ZXggdG8gYWNxdWlyZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgbXV0ZXggd2FzIHN1Y2Nlc3NmdWxseSBhY3F1aXJlZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19NVVRFWF9BTFJFQURZX1RBS0VOIFRoZSBtdXRleCBjb3VsZCBub3QgYmUgYWNxdWlyZWQuDQorICovDQorU1ZDQUxMKFNEX01VVEVYX0FDUVVJUkUsIHVpbnQzMl90LCBzZF9tdXRleF9hY3F1aXJlKG5yZl9tdXRleF90ICogcF9tdXRleCkpOw0KKw0KKy8qKkBicmllZiBSZWxlYXNlIGEgbXV0ZXguDQorICoNCisgKiBAcGFyYW1baW5dIHBfbXV0ZXggUG9pbnRlciB0byB0aGUgbXV0ZXggdG8gcmVsZWFzZS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9NVVRFWF9SRUxFQVNFLCB1aW50MzJfdCwgc2RfbXV0ZXhfcmVsZWFzZShucmZfbXV0ZXhfdCAqIHBfbXV0ZXgpKTsNCisNCisvKipAYnJpZWYgUXVlcnkgdGhlIGNhcGFjaXR5IG9mIHRoZSBhcHBsaWNhdGlvbiByYW5kb20gcG9vbC4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfcG9vbF9jYXBhY2l0eSBUaGUgY2FwYWNpdHkgb2YgdGhlIHBvb2wuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUkFORF9BUFBMSUNBVElPTl9QT09MX0NBUEFDSVRZX0dFVCwgdWludDMyX3QsIHNkX3JhbmRfYXBwbGljYXRpb25fcG9vbF9jYXBhY2l0eV9nZXQodWludDhfdCAqIHBfcG9vbF9jYXBhY2l0eSkpOw0KKw0KKy8qKkBicmllZiBHZXQgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uLg0KKyAqDQorICogQHBhcmFtW291dF0gcF9ieXRlc19hdmFpbGFibGUgVGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBwb29sLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1JBTkRfQVBQTElDQVRJT05fQllURVNfQVZBSUxBQkxFX0dFVCwgdWludDMyX3QsIHNkX3JhbmRfYXBwbGljYXRpb25fYnl0ZXNfYXZhaWxhYmxlX2dldCh1aW50OF90ICogcF9ieXRlc19hdmFpbGFibGUpKTsNCisNCisvKipAYnJpZWYgR2V0IHJhbmRvbSBieXRlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBwb29sLg0KKyAqDQorICogQHBhcmFtW291dF0gIHBfYnVmZiAgUG9pbnRlciB0byB1bml0OF90IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgYnl0ZXMuDQorICogQHBhcmFtW2luXSAgIGxlbmd0aCAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRha2UgZnJvbSBwb29sIGFuZCBwbGFjZSBpbiBwX2J1ZmYuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVGhlIHJlcXVlc3RlZCBieXRlcyB3ZXJlIHdyaXR0ZW4gdG8gcF9idWZmLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1JBTkRfTk9UX0VOT1VHSF9WQUxVRVMgTm8gYnl0ZXMgd2VyZSB3cml0dGVuIHRvIHRoZSBidWZmZXIsIGJlY2F1c2UgdGhlcmUgd2VyZSBub3QgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZS4NCisqLw0KK1NWQ0FMTChTRF9SQU5EX0FQUExJQ0FUSU9OX1ZFQ1RPUl9HRVQsIHVpbnQzMl90LCBzZF9yYW5kX2FwcGxpY2F0aW9uX3ZlY3Rvcl9nZXQodWludDhfdCAqIHBfYnVmZiwgdWludDhfdCBsZW5ndGgpKTsNCisNCisvKipAYnJpZWYgR2V0cyB0aGUgcmVzZXQgcmVhc29uIHJlZ2lzdGVyLg0KKyAqDQorICogQHBhcmFtW291dF0gIHBfcmVzZXRfcmVhc29uICBDb250ZW50cyBvZiB0aGUgTlJGX1BPV0VSLT5SRVNFVFJFQVMgcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfUkVTRVRfUkVBU09OX0dFVCwgdWludDMyX3QsIHNkX3Bvd2VyX3Jlc2V0X3JlYXNvbl9nZXQodWludDMyX3QgKiBwX3Jlc2V0X3JlYXNvbikpOw0KKw0KKy8qKkBicmllZiBDbGVhcnMgdGhlIGJpdHMgb2YgdGhlIHJlc2V0IHJlYXNvbiByZWdpc3Rlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcmVzZXRfcmVhc29uX2Nscl9tc2sgQ29udGFpbnMgdGhlIGJpdHMgdG8gY2xlYXIgZnJvbSB0aGUgcmVzZXQgcmVhc29uIHJlZ2lzdGVyLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX1JFU0VUX1JFQVNPTl9DTFIsIHVpbnQzMl90LCBzZF9wb3dlcl9yZXNldF9yZWFzb25fY2xyKHVpbnQzMl90IHJlc2V0X3JlYXNvbl9jbHJfbXNrKSk7DQorDQorLyoqQGJyaWVmIFNldHMgdGhlIHBvd2VyIG1vZGUgd2hlbiBpbiBDUFUgc2xlZXAuDQorICoNCisgKiBAcGFyYW1baW5dIHBvd2VyX21vZGUgVGhlIHBvd2VyIG1vZGUgdG8gdXNlIHdoZW4gaW4gQ1BVIHNsZWVwLCBzZWUgQHJlZiBOUkZfUE9XRVJfTU9ERVMuIEBzYSBzZF9hcHBfZXZ0X3dhaXQNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBUaGUgcG93ZXIgbW9kZSB3YXMgc2V0Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1BPV0VSX01PREVfVU5LTk9XTiBUaGUgcG93ZXIgbW9kZSB3YXMgdW5rbm93bi4NCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfTU9ERV9TRVQsIHVpbnQzMl90LCBzZF9wb3dlcl9tb2RlX3NldCh1aW50OF90IHBvd2VyX21vZGUpKTsNCisNCisvKipAYnJpZWYgUHV0cyB0aGUgY2hpcCBpbiBTeXN0ZW0gT0ZGIG1vZGUuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QT1dFUl9PRkZfU0hPVUxEX05PVF9SRVRVUk4NCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfU1lTVEVNX09GRiwgdWludDMyX3QsIHNkX3Bvd2VyX3N5c3RlbV9vZmYodm9pZCkpOw0KKw0KKy8qKkBicmllZiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBwb3dlci1mYWlsIGNvbXBhcmF0b3IuDQorICoNCisgKiBFbmFibGluZyB0aGlzIHdpbGwgZ2l2ZSBhIFNvZnREZXZpY2UgZXZlbnQgKE5SRl9FVlRfUE9XRVJfRkFJTFVSRV9XQVJOSU5HKSB3aGVuIHRoZSBwb3dlciBmYWlsdXJlIHdhcm5pbmcgb2NjdXJzLg0KKyAqIFRoZSBldmVudCBjYW4gYmUgcmV0cmlldmVkIHdpdGggc2RfZXZ0X2dldCgpOw0KKyAqDQorICogQHBhcmFtW2luXSBwb2ZfZW5hYmxlICAgIFRydWUgaWYgdGhlIHBvd2VyLWZhaWwgY29tcGFyYXRvciBzaG91bGQgYmUgZW5hYmxlZCwgZmFsc2UgaWYgaXQgc2hvdWxkIGJlIGRpc2FibGVkLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BPV0VSX1BPRl9FTkFCTEUsIHVpbnQzMl90LCBzZF9wb3dlcl9wb2ZfZW5hYmxlKHVpbnQ4X3QgcG9mX2VuYWJsZSkpOw0KKw0KKy8qKkBicmllZiBTZXRzIHRoZSBwb3dlci1mYWlsIHRocmVzaG9sZCB2YWx1ZS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gdGhyZXNob2xkIFRoZSBwb3dlci1mYWlsIHRocmVzaG9sZCB2YWx1ZSB0byB1c2UsIHNlZSBAcmVmIE5SRl9QT1dFUl9USFJFU0hPTERTLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIFRoZSBwb3dlciBmYWlsdXJlIHRocmVzaG9sZCB3YXMgc2V0Lg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1BPV0VSX1BPRl9USFJFU0hPTERfVU5LTk9XTiBUaGUgcG93ZXIgZmFpbHVyZSB0aHJlc2hvbGQgaXMgdW5rbm93bi4NCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfUE9GX1RIUkVTSE9MRF9TRVQsIHVpbnQzMl90LCBzZF9wb3dlcl9wb2ZfdGhyZXNob2xkX3NldCh1aW50OF90IHRocmVzaG9sZCkpOw0KKw0KKy8qKkBicmllZiBXcml0ZXMgdGhlIE5SRl9QT1dFUi0+UkFNW2luZGV4XS5QT1dFUlNFVCByZWdpc3Rlci4NCisgKg0KKyAqIEBwYXJhbVtpbl0gaW5kZXggQ29udGFpbnMgdGhlIGluZGV4IGluIHRoZSBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVJTRVQgcmVnaXN0ZXIgdG8gd3JpdGUgdG8uDQorICogQHBhcmFtW2luXSByYW1fcG93ZXJzZXQgQ29udGFpbnMgdGhlIHdvcmQgdG8gd3JpdGUgdG8gdGhlIE5SRl9QT1dFUi0+UkFNW2luZGV4XS5QT1dFUlNFVCByZWdpc3Rlci4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QT1dFUl9SQU1fUE9XRVJfU0VULCB1aW50MzJfdCwgc2RfcG93ZXJfcmFtX3Bvd2VyX3NldCh1aW50OF90IGluZGV4LCB1aW50MzJfdCByYW1fcG93ZXJzZXQpKTsNCisNCisvKipAYnJpZWYgV3JpdGVzIHRoZSBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVJDTFIgcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIGluZGV4IENvbnRhaW5zIHRoZSBpbmRleCBpbiB0aGUgTlJGX1BPV0VSLT5SQU1baW5kZXhdLlBPV0VSQ0xSIHJlZ2lzdGVyIHRvIHdyaXRlIHRvLg0KKyAqIEBwYXJhbVtpbl0gcmFtX3Bvd2VyY2xyIENvbnRhaW5zIHRoZSB3b3JkIHRvIHdyaXRlIHRvIHRoZSBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVJDTFIgcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfUkFNX1BPV0VSX0NMUiwgdWludDMyX3QsIHNkX3Bvd2VyX3JhbV9wb3dlcl9jbHIodWludDhfdCBpbmRleCwgdWludDMyX3QgcmFtX3Bvd2VyY2xyKSk7DQorDQorLyoqQGJyaWVmIEdldCBjb250ZW50cyBvZiBOUkZfUE9XRVItPlJBTVtpbmRleF0uUE9XRVIgcmVnaXN0ZXIsIGluZGljYXRlcyBwb3dlciBzdGF0dXMgb2YgUkFNW2luZGV4XSBibG9ja3MuDQorICoNCisgKiBAcGFyYW1baW5dIGluZGV4IENvbnRhaW5zIHRoZSBpbmRleCBpbiB0aGUgTlJGX1BPV0VSLT5SQU1baW5kZXhdLlBPV0VSIHJlZ2lzdGVyIHRvIHJlYWQgZnJvbS4NCisgKiBAcGFyYW1bb3V0XSBwX3JhbV9wb3dlciBDb250ZW50IG9mIE5SRl9QT1dFUi0+UkFNW2luZGV4XS5QT1dFUiByZWdpc3Rlci4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QT1dFUl9SQU1fUE9XRVJfR0VULCB1aW50MzJfdCwgc2RfcG93ZXJfcmFtX3Bvd2VyX2dldCh1aW50OF90IGluZGV4LCB1aW50MzJfdCAqIHBfcmFtX3Bvd2VyKSk7DQorDQorLyoqQGJyaWVmIFNldCBiaXRzIGluIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmV0ZW50aW9uIHJlZ2lzdGVycyAoTlJGX1BPV0VSLT5HUFJFR1JFVCopLg0KKyAqDQorICogQHBhcmFtW2luXSBncHJlZ3JldF9pZCAwIGZvciBHUFJFR1JFVCwgMSBmb3IgR1BSRUdSRVQyLg0KKyAqIEBwYXJhbVtpbl0gZ3ByZWdyZXRfbXNrIEJpdHMgdG8gYmUgc2V0IGluIHRoZSBHUFJFR1JFVCByZWdpc3Rlci4NCisgKg0KKyAqIEBub3RlIG5SRjUxIGRvZXMgb25seSBoYXZlIG9uZSBnZW5lcmFsIHB1cnBvc2UgcmV0YWluZWQgcmVnaXN0ZXIsIHNvIGdwcmVncmV0X2lkIG11c3QgYmUgMCBvbiBuUkY1MS4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfR1BSRUdSRVRfU0VULCB1aW50MzJfdCwgc2RfcG93ZXJfZ3ByZWdyZXRfc2V0KHVpbnQzMl90IGdwcmVncmV0X2lkLCB1aW50MzJfdCBncHJlZ3JldF9tc2spKTsNCisNCisvKipAYnJpZWYgQ2xlYXIgYml0cyBpbiB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJldGVudGlvbiByZWdpc3RlcnMgKE5SRl9QT1dFUi0+R1BSRUdSRVQqKS4NCisgKg0KKyAqIEBwYXJhbVtpbl0gZ3ByZWdyZXRfaWQgMCBmb3IgR1BSRUdSRVQsIDEgZm9yIEdQUkVHUkVUMi4NCisgKiBAcGFyYW1baW5dIGdwcmVncmV0X21zayBCaXRzIHRvIGJlIGNsZWFyIGluIHRoZSBHUFJFR1JFVCByZWdpc3Rlci4NCisgKg0KKyAqIEBub3RlIG5SRjUxIGRvZXMgb25seSBoYXZlIG9uZSBnZW5lcmFsIHB1cnBvc2UgcmV0YWluZWQgcmVnaXN0ZXIsIHNvIGdwcmVncmV0X2lkIG11c3QgYmUgMCBvbiBuUkY1MS4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUE9XRVJfR1BSRUdSRVRfQ0xSLCB1aW50MzJfdCwgc2RfcG93ZXJfZ3ByZWdyZXRfY2xyKHVpbnQzMl90IGdwcmVncmV0X2lkLCB1aW50MzJfdCBncHJlZ3JldF9tc2spKTsNCisNCisvKipAYnJpZWYgR2V0IGNvbnRlbnRzIG9mIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmV0ZW50aW9uIHJlZ2lzdGVycyAoTlJGX1BPV0VSLT5HUFJFR1JFVCopLg0KKyAqDQorICogQHBhcmFtW2luXSBncHJlZ3JldF9pZCAwIGZvciBHUFJFR1JFVCwgMSBmb3IgR1BSRUdSRVQyLg0KKyAqIEBwYXJhbVtvdXRdIHBfZ3ByZWdyZXQgQ29udGVudHMgb2YgdGhlIEdQUkVHUkVUIHJlZ2lzdGVyLg0KKyAqDQorICogQG5vdGUgblJGNTEgZG9lcyBvbmx5IGhhdmUgb25lIGdlbmVyYWwgcHVycG9zZSByZXRhaW5lZCByZWdpc3Rlciwgc28gZ3ByZWdyZXRfaWQgbXVzdCBiZSAwIG9uIG5SRjUxLg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QT1dFUl9HUFJFR1JFVF9HRVQsIHVpbnQzMl90LCBzZF9wb3dlcl9ncHJlZ3JldF9nZXQodWludDMyX3QgZ3ByZWdyZXRfaWQsIHVpbnQzMl90ICpwX2dwcmVncmV0KSk7DQorDQorLyoqQGJyaWVmIFNldHMgdGhlIERDREMgbW9kZS4NCisgKg0KKyAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBEQ0RDIHBlcmlwaGVyYWwuDQorICoNCisgKiBAcGFyYW1baW5dIGRjZGNfbW9kZSBUaGUgbW9kZSBvZiB0aGUgRENEQywgc2VlIEByZWYgTlJGX1BPV0VSX0RDRENfTU9ERVMuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gVGhlIERDREMgbW9kZSBpcyBpbnZhbGlkLg0KKyAqLw0KK1NWQ0FMTChTRF9QT1dFUl9EQ0RDX01PREVfU0VULCB1aW50MzJfdCwgc2RfcG93ZXJfZGNkY19tb2RlX3NldCh1aW50OF90IGRjZGNfbW9kZSkpOw0KKw0KKy8qKkBicmllZiBSZXF1ZXN0IHRoZSBoaWdoIGZyZXF1ZW5jeSBjcnlzdGFsIG9zY2lsbGF0b3IuDQorICoNCisgKiBXaWxsIHN0YXJ0IHRoZSBoaWdoIGZyZXF1ZW5jeSBjcnlzdGFsIG9zY2lsbGF0b3IsIHRoZSBzdGFydHVwIHRpbWUgb2YgdGhlIGNyeXN0YWwgdmFyaWVzDQorICogYW5kIHRoZSA6OnNkX2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcgZnVuY3Rpb24gY2FuIGJlIHBvbGxlZCB0byBjaGVjayBpZiBpdCBoYXMgc3RhcnRlZC4NCisgKg0KKyAqIEBzZWUgc2RfY2xvY2tfaGZjbGtfaXNfcnVubmluZw0KKyAqIEBzZWUgc2RfY2xvY2tfaGZjbGtfcmVsZWFzZQ0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX0NMT0NLX0hGQ0xLX1JFUVVFU1QsIHVpbnQzMl90LCBzZF9jbG9ja19oZmNsa19yZXF1ZXN0KHZvaWQpKTsNCisNCisvKipAYnJpZWYgUmVsZWFzZXMgdGhlIGhpZ2ggZnJlcXVlbmN5IGNyeXN0YWwgb3NjaWxsYXRvci4NCisgKg0KKyAqIFdpbGwgc3RvcCB0aGUgaGlnaCBmcmVxdWVuY3kgY3J5c3RhbCBvc2NpbGxhdG9yLCB0aGlzIGhhcHBlbnMgaW1tZWRpYXRlbHkuDQorICoNCisgKiBAc2VlIHNkX2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcNCisgKiBAc2VlIHNkX2Nsb2NrX2hmY2xrX3JlcXVlc3QNCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9DTE9DS19IRkNMS19SRUxFQVNFLCB1aW50MzJfdCwgc2RfY2xvY2tfaGZjbGtfcmVsZWFzZSh2b2lkKSk7DQorDQorLyoqQGJyaWVmIENoZWNrcyBpZiB0aGUgaGlnaCBmcmVxdWVuY3kgY3J5c3RhbCBvc2NpbGxhdG9yIGlzIHJ1bm5pbmcuDQorICoNCisgKiBAc2VlIHNkX2Nsb2NrX2hmY2xrX3JlcXVlc3QNCisgKiBAc2VlIHNkX2Nsb2NrX2hmY2xrX3JlbGVhc2UNCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfaXNfcnVubmluZyAxIGlmIHRoZSBleHRlcm5hbCBjcnlzdGFsIG9zY2lsbGF0b3IgaXMgcnVubmluZywgMCBpZiBub3QuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfQ0xPQ0tfSEZDTEtfSVNfUlVOTklORywgdWludDMyX3QsIHNkX2Nsb2NrX2hmY2xrX2lzX3J1bm5pbmcodWludDMyX3QgKiBwX2lzX3J1bm5pbmcpKTsNCisNCisvKipAYnJpZWYgV2FpdHMgZm9yIGFuIGFwcGxpY2F0aW9uIGV2ZW50Lg0KKyAqDQorICogQW4gYXBwbGljYXRpb24gZXZlbnQgaXMgZWl0aGVyIGFuIGFwcGxpY2F0aW9uIGludGVycnVwdCBvciBhIHBlbmRlZCBpbnRlcnJ1cHQgd2hlbiB0aGUNCisgKiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQuIFdoZW4gdGhlIGludGVycnVwdCBpcyBlbmFibGVkIGl0IHdpbGwgYmUgdGFrZW4gaW1tZWRpYXRlbHkgc2luY2UNCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCBpbiB0aHJlYWQgbW9kZSwgdGhlbiB0aGUgZXhlY3V0aW9uIHdpbGwgcmV0dXJuIGluIHRoZSBhcHBsaWNhdGlvbidzDQorICogbWFpbiB0aHJlYWQuIFdoZW4gYW4gaW50ZXJydXB0IGlzIGRpc2FibGVkIGFuZCBnZXRzIHBlbmRlZCBpdCB3aWxsIHJldHVybiB0byB0aGUgYXBwbGljYXRpb24ncw0KKyAqIG1haW4gdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGUgcGVuZGVkIGZsYWcgaXMgY2xlYXJlZCB1c2luZw0KKyAqIDo6c2RfbnZpY19DbGVhclBlbmRpbmdJUlEgaW4gb3JkZXIgdG8gc2xlZXAgdXNpbmcgdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3INCisgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzLCBhcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBjbGVhciB0aGUgcGVuZGluZyBmbGFnIGF1dG9tYXRpY2FsbHkgZm9yDQorICogZW5hYmxlZCBpbnRlcnJ1cHRzLg0KKyAqDQorICogSW4gb3JkZXIgdG8gd2FrZSB1cCBmcm9tIGRpc2FibGVkIGludGVycnVwdHMsIHRoZSBTRVZPTlBFTkQgZmxhZyBoYXMgdG8gYmUgc2V0IGluIHRoZSBDb3J0ZXgtTTANCisgKiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAoU0NSKS4gQHNhIENNU0lTX1NDQg0KKyAqDQorICogQG5vdGUgSWYgYW4gYXBwbGljYXRpb24gaW50ZXJydXB0IGhhcyBoYXBwZW5lZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHNkX2FwcF9ldnRfd2FpdCB3YXMNCisgKiAgICAgICBjYWxsZWQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhbmQgbm90IGdvIHRvIHNsZWVwLiBUaGlzIGlzIHRvIGF2b2lkIHJhY2UNCisgKiAgICAgICBjb25kaXRpb25zIHRoYXQgY2FuIG9jY3VyIHdoZW4gYSBmbGFnIGlzIHVwZGF0ZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBwcm9jZXNzZWQNCisgKiAgICAgICBpbiB0aGUgbWFpbiBsb29wLg0KKyAqDQorICogQHBvc3QgQW4gYXBwbGljYXRpb24gaW50ZXJydXB0IGhhcyBoYXBwZW5lZCBvciBhIGludGVycnVwdCBwZW5kaW5nIGZsYWcgaXMgc2V0Lg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX0FQUF9FVlRfV0FJVCwgdWludDMyX3QsIHNkX2FwcF9ldnRfd2FpdCh2b2lkKSk7DQorDQorLyoqQGJyaWVmIEdldCBQUEkgY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIgY29udGVudHMuDQorICoNCisgKiBAcGFyYW1bb3V0XSBwX2NoYW5uZWxfZW5hYmxlIFRoZSBjb250ZW50cyBvZiB0aGUgUFBJIENIRU4gcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0NIQU5ORUxfRU5BQkxFX0dFVCwgdWludDMyX3QsIHNkX3BwaV9jaGFubmVsX2VuYWJsZV9nZXQodWludDMyX3QgKiBwX2NoYW5uZWxfZW5hYmxlKSk7DQorDQorLyoqQGJyaWVmIFNldCBQUEkgY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWxfZW5hYmxlX3NldF9tc2sgTWFzayBjb250YWluaW5nIHRoZSBiaXRzIHRvIHNldCBpbiB0aGUgUFBJIENIRU4gcmVnaXN0ZXIuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0NIQU5ORUxfRU5BQkxFX1NFVCwgdWludDMyX3QsIHNkX3BwaV9jaGFubmVsX2VuYWJsZV9zZXQodWludDMyX3QgY2hhbm5lbF9lbmFibGVfc2V0X21zaykpOw0KKw0KKy8qKkBicmllZiBDbGVhciBQUEkgY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIuDQorICoNCisgKiBAcGFyYW1baW5dIGNoYW5uZWxfZW5hYmxlX2Nscl9tc2sgTWFzayBjb250YWluaW5nIHRoZSBiaXRzIHRvIGNsZWFyIGluIHRoZSBQUEkgQ0hFTiByZWdpc3Rlci4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QUElfQ0hBTk5FTF9FTkFCTEVfQ0xSLCB1aW50MzJfdCwgc2RfcHBpX2NoYW5uZWxfZW5hYmxlX2Nscih1aW50MzJfdCBjaGFubmVsX2VuYWJsZV9jbHJfbXNrKSk7DQorDQorLyoqQGJyaWVmIEFzc2lnbiBlbmRwb2ludHMgdG8gYSBQUEkgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9udW0gTnVtYmVyIG9mIHRoZSBQUEkgY2hhbm5lbCB0byBhc3NpZ24uDQorICogQHBhcmFtW2luXSBldnRfZW5kcG9pbnQgRXZlbnQgZW5kcG9pbnQgb2YgdGhlIFBQSSBjaGFubmVsLg0KKyAqIEBwYXJhbVtpbl0gdGFza19lbmRwb2ludCBUYXNrIGVuZHBvaW50IG9mIHRoZSBQUEkgY2hhbm5lbC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1BQSV9JTlZBTElEX0NIQU5ORUwgVGhlIGNoYW5uZWwgbnVtYmVyIGlzIGludmFsaWQuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX1BQSV9DSEFOTkVMX0FTU0lHTiwgdWludDMyX3QsIHNkX3BwaV9jaGFubmVsX2Fzc2lnbih1aW50OF90IGNoYW5uZWxfbnVtLCBjb25zdCB2b2xhdGlsZSB2b2lkICogZXZ0X2VuZHBvaW50LCBjb25zdCB2b2xhdGlsZSB2b2lkICogdGFza19lbmRwb2ludCkpOw0KKw0KKy8qKkBicmllZiBUYXNrIHRvIGVuYWJsZSBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGdyb3VwX251bSBOdW1iZXIgb2YgdGhlIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX1NPQ19QUElfSU5WQUxJRF9HUk9VUCBUaGUgZ3JvdXAgbnVtYmVyIGlzIGludmFsaWQNCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0dST1VQX1RBU0tfRU5BQkxFLCB1aW50MzJfdCwgc2RfcHBpX2dyb3VwX3Rhc2tfZW5hYmxlKHVpbnQ4X3QgZ3JvdXBfbnVtKSk7DQorDQorLyoqQGJyaWVmIFRhc2sgdG8gZGlzYWJsZSBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGdyb3VwX251bSBOdW1iZXIgb2YgdGhlIFBQSSBncm91cC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1BQSV9JTlZBTElEX0dST1VQIFRoZSBncm91cCBudW1iZXIgaXMgaW52YWxpZC4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0dST1VQX1RBU0tfRElTQUJMRSwgdWludDMyX3QsIHNkX3BwaV9ncm91cF90YXNrX2Rpc2FibGUodWludDhfdCBncm91cF9udW0pKTsNCisNCisvKipAYnJpZWYgQXNzaWduIFBQSSBjaGFubmVscyB0byBhIGNoYW5uZWwgZ3JvdXAuDQorICoNCisgKiBAcGFyYW1baW5dIGdyb3VwX251bSBOdW1iZXIgb2YgdGhlIGNoYW5uZWwgZ3JvdXAuDQorICogQHBhcmFtW2luXSBjaGFubmVsX21zayBNYXNrIG9mIHRoZSBjaGFubmVscyB0byBhc3NpZ24gdG8gdGhlIGdyb3VwLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9TT0NfUFBJX0lOVkFMSURfR1JPVVAgVGhlIGdyb3VwIG51bWJlciBpcyBpbnZhbGlkLg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9QUElfR1JPVVBfQVNTSUdOLCB1aW50MzJfdCwgc2RfcHBpX2dyb3VwX2Fzc2lnbih1aW50OF90IGdyb3VwX251bSwgdWludDMyX3QgY2hhbm5lbF9tc2spKTsNCisNCisvKipAYnJpZWYgR2V0cyB0aGUgUFBJIGNoYW5uZWxzIG9mIGEgY2hhbm5lbCBncm91cC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gICBncm91cF9udW0gTnVtYmVyIG9mIHRoZSBjaGFubmVsIGdyb3VwLg0KKyAqIEBwYXJhbVtvdXRdICBwX2NoYW5uZWxfbXNrIE1hc2sgb2YgdGhlIGNoYW5uZWxzIGFzc2lnbmVkIHRvIHRoZSBncm91cC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfU09DX1BQSV9JTlZBTElEX0dST1VQIFRoZSBncm91cCBudW1iZXIgaXMgaW52YWxpZC4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUFBJX0dST1VQX0dFVCwgdWludDMyX3QsIHNkX3BwaV9ncm91cF9nZXQodWludDhfdCBncm91cF9udW0sIHVpbnQzMl90ICogcF9jaGFubmVsX21zaykpOw0KKw0KKy8qKkBicmllZiBDb25maWd1cmVzIHRoZSBSYWRpbyBOb3RpZmljYXRpb24gc2lnbmFsLg0KKyAqDQorICogQG5vdGUNCisgKiAgICAgIC0gVGhlIG5vdGlmaWNhdGlvbiBzaWduYWwgbGF0ZW5jeSBkZXBlbmRzIG9uIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgc2V0dGluZ3Mgb2YgU1dJIHVzZWQNCisgKiAgICAgICAgZm9yIG5vdGlmaWNhdGlvbiBzaWduYWwuDQorICogICAgICAtIFRvIGVuc3VyZSB0aGF0IHRoZSByYWRpbyBub3RpZmljYXRpb24gc2lnbmFsIGJlaGF2ZXMgaW4gYSBjb25zaXN0ZW50IHdheSwgdGhlIHJhZGlvDQorICogICAgICAgIG5vdGlmaWNhdGlvbnMgbXVzdCBiZSBjb25maWd1cmVkIHdoZW4gdGhlcmUgaXMgbm8gcHJvdG9jb2wgc3RhY2sgb3Igb3RoZXIgU29mdERldmljZQ0KKyAqICAgICAgICBhY3Rpdml0eSBpbiBwcm9ncmVzcy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgcmFkaW8gbm90aWZpY2F0aW9uIHNpZ25hbCBpcw0KKyAqICAgICAgICBjb25maWd1cmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBTb2Z0RGV2aWNlIGhhcyBiZWVuIGVuYWJsZWQuDQorICogICAgICAtIEluIHRoZSBwZXJpb2QgYmV0d2VlbiB0aGUgQUNUSVZFIHNpZ25hbCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBSYWRpbyBFdmVudCwgdGhlIFNvZnREZXZpY2UNCisgKiAgICAgICAgd2lsbCBpbnRlcnJ1cHQgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIFJhZGlvIEV2ZW50IHByZXBhcmF0aW9uLg0KKyAqICAgICAgLSBVc2luZyB0aGUgUmFkaW8gTm90aWZpY2F0aW9uIGZlYXR1cmUgbWF5IGxpbWl0IHRoZSBiYW5kd2lkdGgsIGFzIHRoZSBTb2Z0RGV2aWNlIG1heSBoYXZlDQorICogICAgICAgIHRvIHNob3J0ZW4gdGhlIGNvbm5lY3Rpb24gZXZlbnRzIHRvIGhhdmUgdGltZSBmb3IgdGhlIFJhZGlvIE5vdGlmaWNhdGlvbiBzaWduYWxzLg0KKyAqDQorICogQHBhcmFtW2luXSAgdHlwZSAgICAgIFR5cGUgb2Ygbm90aWZpY2F0aW9uIHNpZ25hbCwgc2VlIEByZWYgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFUy4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVfTk9ORSBzaGFsbCBiZSB1c2VkIHRvIHR1cm4gb2ZmIHJhZGlvDQorICogICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi4gVXNpbmcgQHJlZiBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFX05PTkUgaXMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgKGJ1dCBub3QgcmVxdWlyZWQpIHRvIGJlIHVzZWQgd2l0aA0KKyAqICAgICAgICAgICAgICAgICAgICAgICBAcmVmIE5SRl9SQURJT19OT1RJRklDQVRJT05fVFlQRV9OT05FLg0KKyAqDQorICogQHBhcmFtW2luXSAgZGlzdGFuY2UgIERpc3RhbmNlIGJldHdlZW4gdGhlIG5vdGlmaWNhdGlvbiBzaWduYWwgYW5kIHN0YXJ0IG9mIHJhZGlvIGFjdGl2aXR5LCBzZWUgQHJlZiBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX0RJU1RBTkNFUy4NCisgKiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCB3aGVuIEByZWYgTlJGX1JBRElPX05PVElGSUNBVElPTl9UWVBFX05PTkUgb3INCisgKiAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBOUkZfUkFESU9fTk9USUZJQ0FUSU9OX1RZUEVfSU5UX09OX0lOQUNUSVZFIGlzIHVzZWQuDQorICoNCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gVGhlIGdyb3VwIG51bWJlciBpcyBpbnZhbGlkLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9TVEFURSBBIHByb3RvY29sIHN0YWNrIG9yIG90aGVyIFNvZnREZXZpY2UgaXMgcnVubmluZy4gU3RvcCBhbGwNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBhY3Rpdml0aWVzIGFuZCByZXRyeS4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MNCisgKi8NCitTVkNBTEwoU0RfUkFESU9fTk9USUZJQ0FUSU9OX0NGR19TRVQsIHVpbnQzMl90LCBzZF9yYWRpb19ub3RpZmljYXRpb25fY2ZnX3NldCh1aW50OF90IHR5cGUsIHVpbnQ4X3QgZGlzdGFuY2UpKTsNCisNCisvKipAYnJpZWYgRW5jcnlwdHMgYSBibG9jayBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLg0KKyAqDQorICogMTI4LWJpdCBBRVMgZW5jcnlwdGlvbi4NCisgKg0KKyAqIEBub3RlOg0KKyAqICAgIC0gVGhlIGFwcGxpY2F0aW9uIG1heSBzZXQgdGhlIFNFVk9OUEVORCBiaXQgaW4gdGhlIFNDUiB0byAxIHRvIG1ha2UgdGhlIFNvZnREZXZpY2Ugc2xlZXAgd2hpbGUNCisgKiAgICAgIHRoZSBFQ0IgaXMgcnVubmluZy4gVGhlIFNFVk9OUEVORCBiaXQgc2hvdWxkIG9ubHkgYmUgY2xlYXJlZCAoc2V0IHRvIDApIGZyb20gYXBwbGljYXRpb24NCisgKiAgICAgIG1haW4gb3IgbG93IGludGVycnVwdCBsZXZlbC4NCisgKg0KKyAqIEBwYXJhbVtpbiwgb3V0XSBwX2VjYl9kYXRhIFBvaW50ZXIgdG8gdGhlIEVDQiBwYXJhbWV0ZXJzJyBzdHJ1Y3QgKHR3byBpbnB1dA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgYW5kIG9uZSBvdXRwdXQgcGFyYW1ldGVyKS4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUw0KKyAqLw0KK1NWQ0FMTChTRF9FQ0JfQkxPQ0tfRU5DUllQVCwgdWludDMyX3QsIHNkX2VjYl9ibG9ja19lbmNyeXB0KG5yZl9lY2JfaGFsX2RhdGFfdCAqIHBfZWNiX2RhdGEpKTsNCisNCisvKipAYnJpZWYgRW5jcnlwdHMgbXVsdGlwbGUgZGF0YSBibG9ja3MgcHJvdmlkZWQgYXMgYW4gYXJyYXkgb2YgZGF0YSBibG9jayBzdHJ1Y3R1cmVzLg0KKyAqDQorICogQGRldGFpbHM6IFBlcmZvcm1zIDEyOC1iaXQgQUVTIGVuY3J5cHRpb24gb24gbXVsdGlwbGUgZGF0YSBibG9ja3MNCisgKg0KKyAqIEBub3RlOg0KKyAqICAgIC0gVGhlIGFwcGxpY2F0aW9uIG1heSBzZXQgdGhlIFNFVk9OUEVORCBiaXQgaW4gdGhlIFNDUiB0byAxIHRvIG1ha2UgdGhlIFNvZnREZXZpY2Ugc2xlZXAgd2hpbGUNCisgKiAgICAgIHRoZSBFQ0IgaXMgcnVubmluZy4gVGhlIFNFVk9OUEVORCBiaXQgc2hvdWxkIG9ubHkgYmUgY2xlYXJlZCAoc2V0IHRvIDApIGZyb20gYXBwbGljYXRpb24NCisgKiAgICAgIG1haW4gb3IgbG93IGludGVycnVwdCBsZXZlbC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gICAgIGJsb2NrX2NvdW50ICAgICBDb3VudCBvZiBibG9ja3MgaW4gdGhlIHBfZGF0YV9ibG9ja3MgYXJyYXkuDQorICogQHBhcmFtW2luLG91dF0gcF9kYXRhX2Jsb2NrcyAgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGVudHJ5IGluIGEgY29udGlndW91cyBhcnJheSBvZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIG5yZl9lY2JfaGFsX2RhdGFfYmxvY2tfdCBzdHJ1Y3R1cmVzLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTDQorICovDQorU1ZDQUxMKFNEX0VDQl9CTE9DS1NfRU5DUllQVCwgdWludDMyX3QsIHNkX2VjYl9ibG9ja3NfZW5jcnlwdCh1aW50OF90IGJsb2NrX2NvdW50LCBucmZfZWNiX2hhbF9kYXRhX2Jsb2NrX3QgKiBwX2RhdGFfYmxvY2tzKSk7DQorDQorLyoqQGJyaWVmIEdldHMgYW55IHBlbmRpbmcgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUgU29DIEFQSS4NCisgKg0KKyAqIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQga2VlcCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IGV2ZW50cywgdW50aWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIGlzIHJldHVybmVkLg0KKyAqDQorICogQHBhcmFtW291dF0gcF9ldnRfaWQgU2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGluIEByZWYgTlJGX1NPQ19FVlRTLCBpZiBhbnkgZXZlbnRzIGFyZSBwZW5kaW5nLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIEFuIGV2ZW50IHdhcyBwZW5kaW5nLiBUaGUgZXZlbnQgaWQgaXMgd3JpdHRlbiBpbiB0aGUgcF9ldnRfaWQgcGFyYW1ldGVyLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfTk9UX0ZPVU5EIE5vIHBlbmRpbmcgZXZlbnRzLg0KKyAqLw0KK1NWQ0FMTChTRF9FVlRfR0VULCB1aW50MzJfdCwgc2RfZXZ0X2dldCh1aW50MzJfdCAqIHBfZXZ0X2lkKSk7DQorDQorLyoqQGJyaWVmIEdldCB0aGUgdGVtcGVyYXR1cmUgbWVhc3VyZWQgb24gdGhlIGNoaXANCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgaXMgZG9uZS4NCisgKiBJdCB0YWtlcyBhcm91bmQgNTAgdXMgZnJvbSBjYWxsIHRvIHJldHVybi4NCisgKg0KKyAqIEBwYXJhbVtvdXRdIHBfdGVtcCBSZXN1bHQgb2YgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQuIERpZSB0ZW1wZXJhdHVyZSBpbiAwLjI1IGRlZ3JlZXMgQ2Vsc2l1cy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBBIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHdhcyBkb25lLCBhbmQgdGhlIHRlbXBlcmF0dXJlIHdhcyB3cml0dGVuIHRvIHRlbXANCisgKi8NCitTVkNBTEwoU0RfVEVNUF9HRVQsIHVpbnQzMl90LCBzZF90ZW1wX2dldChpbnQzMl90ICogcF90ZW1wKSk7DQorDQorLyoqQGJyaWVmIEZsYXNoIFdyaXRlDQorKg0KKyogQ29tbWFuZHMgdG8gd3JpdGUgYSBidWZmZXIgdG8gZmxhc2gNCisqDQorKiBJZiB0aGUgU29mdERldmljZSBpcyBlbmFibGVkOg0KKyogIFRoaXMgY2FsbCBpbml0aWF0ZXMgdGhlIGZsYXNoIGFjY2VzcyBjb21tYW5kLCBhbmQgaXRzIGNvbXBsZXRpb24gd2lsbCBiZSBjb21tdW5pY2F0ZWQgdG8gdGhlDQorKiAgYXBwbGljYXRpb24gd2l0aCBleGFjdGx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50czoNCisqICAgICAgLSBAcmVmIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX1NVQ0NFU1MgLSBUaGUgY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4NCisqICAgICAgLSBAcmVmIE5SRl9FVlRfRkxBU0hfT1BFUkFUSU9OX0VSUk9SICAgLSBUaGUgY29tbWFuZCBjb3VsZCBub3QgYmUgc3RhcnRlZC4NCisqDQorKiBJZiB0aGUgU29mdERldmljZSBpcyBub3QgZW5hYmxlZCBubyBldmVudCB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHRoaXMgY2FsbCB3aWxsIHJldHVybiBAcmVmIE5SRl9TVUNDRVNTIHdoZW4gdGhlDQorICogd3JpdGUgaGFzIGJlZW4gY29tcGxldGVkDQorKg0KKyogQG5vdGUNCisqICAgICAgLSBUaGlzIGNhbGwgdGFrZXMgY29udHJvbCBvdmVyIHRoZSByYWRpbyBhbmQgdGhlIENQVSBkdXJpbmcgZmxhc2ggZXJhc2UgYW5kIHdyaXRlIHRvIG1ha2Ugc3VyZSB0aGF0DQorKiAgICAgICAgdGhleSB3aWxsIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgZmxhc2ggYWNjZXNzLiBUaGlzIG1lYW5zIHRoYXQgYWxsIGludGVycnVwdHMgd2lsbCBiZSBibG9ja2VkDQorKiAgICAgICAgZm9yIGEgcHJlZGljdGFibGUgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSBOVk1DIHNwZWNpZmljYXRpb24gaW4gblJGNTEgU2VyaWVzIFJlZmVyZW5jZSBNYW51YWwNCisqICAgICAgICBhbmQgdGhlIGNvbW1hbmQgcGFyYW1ldGVycykuDQorKiAgICAgIC0gVGhlIGRhdGEgaW4gdGhlIHBfc3JjIGJ1ZmZlciBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGJlZm9yZSB0aGUgQHJlZiBOUkZfRVZUX0ZMQVNIX09QRVJBVElPTl9TVUNDRVNTDQorKiAgICAgICAgb3IgdGhlIEByZWYgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fRVJST1IgaGF2ZSBiZWVuIHJlY2VpdmVkIGlmIHRoZSBTb2Z0RGV2aWNlIGlzIGVuYWJsZWQuDQorKg0KKyoNCisqIEBwYXJhbVtpbl0gIHBfZHN0IFBvaW50ZXIgdG8gc3RhcnQgb2YgZmxhc2ggbG9jYXRpb24gdG8gYmUgd3JpdHRlbi4NCisqIEBwYXJhbVtpbl0gIHBfc3JjIFBvaW50ZXIgdG8gYnVmZmVyIHdpdGggZGF0YSB0byBiZSB3cml0dGVuLg0KKyogQHBhcmFtW2luXSAgc2l6ZSAgTnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0byB3cml0ZS4gTWF4aW11bSBzaXplIGlzIDI1NiAzMi1iaXQgd29yZHMgZm9yIG5SRjUxIGFuZCAxMDI0IGZvciBuUkY1Mi4NCisqDQorKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiAgIFRyaWVkIHRvIHdyaXRlIHRvIGEgbm9uIGV4aXN0aW5nIGZsYXNoIGFkZHJlc3MsIG9yIHBfZHN0IG9yIHBfc3JjIHdhcyB1bmFsaWduZWQuDQorKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgICAgICAgICAgIFRoZSBwcmV2aW91cyBjb21tYW5kIGhhcyBub3QgeWV0IGNvbXBsZXRlZC4NCisqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9MRU5HVEggU2l6ZSB3YXMgMCwgb3IgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBzaXplLg0KKyogQHJldHZhbCA6Ok5SRl9FUlJPUl9GT1JCSURERU4gICAgICBUcmllZCB0byB3cml0ZSB0byBvciByZWFkIGZyb20gcHJvdGVjdGVkIGxvY2F0aW9uLg0KKyogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICAgICAgICAgICAgICBUaGUgY29tbWFuZCB3YXMgYWNjZXB0ZWQuDQorKi8NCitTVkNBTEwoU0RfRkxBU0hfV1JJVEUsIHVpbnQzMl90LCBzZF9mbGFzaF93cml0ZSh1aW50MzJfdCAqIHBfZHN0LCB1aW50MzJfdCBjb25zdCAqIHBfc3JjLCB1aW50MzJfdCBzaXplKSk7DQorDQorDQorLyoqQGJyaWVmIEZsYXNoIEVyYXNlIHBhZ2UNCisqDQorKiBDb21tYW5kcyB0byBlcmFzZSBhIGZsYXNoIHBhZ2UNCisqIElmIHRoZSBTb2Z0RGV2aWNlIGlzIGVuYWJsZWQ6DQorKiAgVGhpcyBjYWxsIGluaXRpYXRlcyB0aGUgZmxhc2ggYWNjZXNzIGNvbW1hbmQsIGFuZCBpdHMgY29tcGxldGlvbiB3aWxsIGJlIGNvbW11bmljYXRlZCB0byB0aGUNCisqICBhcHBsaWNhdGlvbiB3aXRoIGV4YWN0bHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzOg0KKyogICAgICAtIEByZWYgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fU1VDQ0VTUyAtIFRoZSBjb21tYW5kIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLg0KKyogICAgICAtIEByZWYgTlJGX0VWVF9GTEFTSF9PUEVSQVRJT05fRVJST1IgICAtIFRoZSBjb21tYW5kIGNvdWxkIG5vdCBiZSBzdGFydGVkLg0KKyoNCisqIElmIHRoZSBTb2Z0RGV2aWNlIGlzIG5vdCBlbmFibGVkIG5vIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgdGhpcyBjYWxsIHdpbGwgcmV0dXJuIEByZWYgTlJGX1NVQ0NFU1Mgd2hlbiB0aGUNCisqIGVyYXNlIGhhcyBiZWVuIGNvbXBsZXRlZA0KKyoNCisqIEBub3RlDQorKiAgICAgIC0gVGhpcyBjYWxsIHRha2VzIGNvbnRyb2wgb3ZlciB0aGUgcmFkaW8gYW5kIHRoZSBDUFUgZHVyaW5nIGZsYXNoIGVyYXNlIGFuZCB3cml0ZSB0byBtYWtlIHN1cmUgdGhhdA0KKyogICAgICAgIHRoZXkgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGggdGhlIGZsYXNoIGFjY2Vzcy4gVGhpcyBtZWFucyB0aGF0IGFsbCBpbnRlcnJ1cHRzIHdpbGwgYmUgYmxvY2tlZA0KKyogICAgICAgIGZvciBhIHByZWRpY3RhYmxlIHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgTlZNQyBzcGVjaWZpY2F0aW9uIGluIG5SRjUxIFNlcmllcyBSZWZlcmVuY2UgTWFudWFsDQorKiAgICAgICAgYW5kIHRoZSBjb21tYW5kIHBhcmFtZXRlcnMpLg0KKyoNCisqDQorKiBAcGFyYW1baW5dICBwYWdlX251bWJlciAgICAgICAgICAgUGFnZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gZXJhc2UNCisqDQorKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVEVSTkFMICAgICAgSWYgYSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgb3BlbmVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4NCisqIEByZXR2YWwgOjpOUkZfRVJST1JfSU5WQUxJRF9BRERSICBUcmllZCB0byBlcmFzZSB0byBhIG5vbiBleGlzdGluZyBmbGFzaCBwYWdlLg0KKyogQHJldHZhbCA6Ok5SRl9FUlJPUl9CVVNZICAgICAgICAgIFRoZSBwcmV2aW91cyBjb21tYW5kIGhhcyBub3QgeWV0IGNvbXBsZXRlZC4NCisqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOICAgICBUcmllZCB0byBlcmFzZSBhIHByb3RlY3RlZCBwYWdlLg0KKyogQHJldHZhbCA6Ok5SRl9TVUNDRVNTICAgICAgICAgICAgIFRoZSBjb21tYW5kIHdhcyBhY2NlcHRlZC4NCisqLw0KK1NWQ0FMTChTRF9GTEFTSF9QQUdFX0VSQVNFLCB1aW50MzJfdCwgc2RfZmxhc2hfcGFnZV9lcmFzZSh1aW50MzJfdCBwYWdlX251bWJlcikpOw0KKw0KKw0KKy8qKkBicmllZiBGbGFzaCBQcm90ZWN0aW9uIHNldA0KKyAqDQorICogQ29tbWFuZHMgdG8gc2V0IHRoZSBmbGFzaCBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLg0KKyAgIE9uIG5SRjUxIHRoaXMgc2V0cyB0aGUgUFJPVEVOU0VUeCByZWdpc3RlcnMgb2YgdGhlIE1QVSBwZXJpcGhlcmFsLg0KKyAgIE9uIG5SRjUyIHRoaXMgc2V0cyB0aGUgQ09ORklHeCByZWdpc3RlcnMgb2YgdGhlIEJQUk9UIHBlcmlwaGVyYWwuDQorICoNCisgKiBAbm90ZSBUbyByZWFkIHRoZSB2YWx1ZXMgcmVhZCB0aGVtIGRpcmVjdGx5LiBUaGV5IGFyZSBvbmx5IHdyaXRlLXByb3RlY3RlZC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gIGJsb2NrX2NmZzAgVmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCisgKiBAcGFyYW1baW5dICBibG9ja19jZmcxIFZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQorICogQHBhcmFtW2luXSAgYmxvY2tfY2ZnMiBWYWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChpZ25vcmVkIG9uIG5SRjUxKS4NCisgKiBAcGFyYW1baW5dICBibG9ja19jZmczIFZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKGlnbm9yZWQgb24gblJGNTEpLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9GT1JCSURERU4gVHJpZWQgdG8gcHJvdGVjdCB0aGUgU29mdERldmljZS4NCisgKiBAcmV0dmFsIDo6TlJGX1NVQ0NFU1MgVmFsdWVzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLg0KKyAqLw0KK1NWQ0FMTChTRF9GTEFTSF9QUk9URUNULCB1aW50MzJfdCwgc2RfZmxhc2hfcHJvdGVjdCh1aW50MzJfdCBibG9ja19jZmcwLCB1aW50MzJfdCBibG9ja19jZmcxLCB1aW50MzJfdCBibG9ja19jZmcyLCB1aW50MzJfdCBibG9ja19jZmczKSk7DQorDQorLyoqQGJyaWVmIE9wZW5zIGEgc2Vzc2lvbiBmb3IgcmFkaW8gdGltZXNsb3QgcmVxdWVzdHMuDQorICoNCisgKiBAbm90ZSBPbmx5IG9uZSBzZXNzaW9uIGNhbiBiZSBvcGVuIGF0IGEgdGltZS4NCisgKiBAbm90ZSBwX3JhZGlvX3NpZ25hbF9jYWxsYmFjayhAcmVmIE5SRl9SQURJT19DQUxMQkFDS19TSUdOQUxfVFlQRV9TVEFSVCkgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcmFkaW8gdGltZXNsb3QNCisgKiAgICAgICBzdGFydHMuIEZyb20gdGhpcyBwb2ludCB0aGUgTlJGX1JBRElPIGFuZCBOUkZfVElNRVIwIHBlcmlwaGVyYWxzIGNhbiBiZSBmcmVlbHkgYWNjZXNzZWQNCisgKiAgICAgICBieSB0aGUgYXBwbGljYXRpb24uDQorICogQG5vdGUgcF9yYWRpb19zaWduYWxfY2FsbGJhY2soQHJlZiBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfVElNRVIwKSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIE5SRl9USU1FUjANCisgKiAgICAgICBpbnRlcnJ1cHQgb2NjdXJzLg0KKyAqIEBub3RlIHBfcmFkaW9fc2lnbmFsX2NhbGxiYWNrKEByZWYgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1JBRElPKSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIE5SRl9SQURJTw0KKyAqICAgICAgIGludGVycnVwdCBvY2N1cnMuDQorICogQG5vdGUgcF9yYWRpb19zaWduYWxfY2FsbGJhY2soKSB3aWxsIGJlIGNhbGxlZCBhdCBBUk0gaW50ZXJydXB0IHByaW9yaXR5IGxldmVsIDAuIFRoaXMNCisgKiAgICAgICBpbXBsaWVzIHRoYXQgbm9uZSBvZiB0aGUgc2RfKiBBUEkgY2FsbHMgY2FuIGJlIHVzZWQgZnJvbSBwX3JhZGlvX3NpZ25hbF9jYWxsYmFjaygpLg0KKyAqDQorICogQHBhcmFtW2luXSBwX3JhZGlvX3NpZ25hbF9jYWxsYmFjayBUaGUgc2lnbmFsIGNhbGxiYWNrLg0KKyAqDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlZBTElEX0FERFIgcF9yYWRpb19zaWduYWxfY2FsbGJhY2sgaXMgYW4gaW52YWxpZCBmdW5jdGlvbiBwb2ludGVyLg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfQlVTWSBJZiBzZXNzaW9uIGNhbm5vdCBiZSBvcGVuZWQuDQorICogQHJldHZhbCA6Ok5SRl9FUlJPUl9JTlRFUk5BTCBJZiBhIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBvcGVuZWQgZHVlIHRvIGFuIGludGVybmFsIGVycm9yLg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBPdGhlcndpc2UuDQorICovDQorIFNWQ0FMTChTRF9SQURJT19TRVNTSU9OX09QRU4sIHVpbnQzMl90LCBzZF9yYWRpb19zZXNzaW9uX29wZW4obnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja190IHBfcmFkaW9fc2lnbmFsX2NhbGxiYWNrKSk7DQorDQorLyoqQGJyaWVmIENsb3NlcyBhIHNlc3Npb24gZm9yIHJhZGlvIHRpbWVzbG90IHJlcXVlc3RzLg0KKyAqDQorICogQG5vdGUgQW55IGN1cnJlbnQgcmFkaW8gdGltZXNsb3Qgd2lsbCBiZSBmaW5pc2hlZCBiZWZvcmUgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqIEBub3RlIElmIGEgcmFkaW8gdGltZXNsb3QgaXMgc2NoZWR1bGVkIHdoZW4gdGhlIHNlc3Npb24gaXMgY2xvc2VkLCBpdCB3aWxsIGJlIGNhbmNlbGVkLg0KKyAqIEBub3RlIFRoZSBhcHBsaWNhdGlvbiBjYW5ub3QgY29uc2lkZXIgdGhlIHNlc3Npb24gY2xvc2VkIHVudGlsIHRoZSBAcmVmIE5SRl9FVlRfUkFESU9fU0VTU0lPTl9DTE9TRUQNCisgKiAgICAgICBldmVudCBpcyByZWNlaXZlZC4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIElmIHNlc3Npb24gbm90IG9wZW5lZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0JVU1kgSWYgc2Vzc2lvbiBpcyBjdXJyZW50bHkgYmVpbmcgY2xvc2VkLg0KKyAqIEByZXR2YWwgOjpOUkZfU1VDQ0VTUyBPdGhlcndpc2UuDQorICovDQorIFNWQ0FMTChTRF9SQURJT19TRVNTSU9OX0NMT1NFLCB1aW50MzJfdCwgc2RfcmFkaW9fc2Vzc2lvbl9jbG9zZSh2b2lkKSk7DQorDQorLyoqQGJyaWVmIFJlcXVlc3RzIGEgcmFkaW8gdGltZXNsb3QuDQorICoNCisgKiBAbm90ZSBUaGUgcmVxdWVzdCB0eXBlIGlzIGRldGVybWluZWQgYnkgcF9yZXF1ZXN0LT5yZXF1ZXN0X3R5cGUsIGFuZCBjYW4gYmUgb25lIG9mIEByZWYgTlJGX1JBRElPX1JFUV9UWVBFX0VBUkxJRVNUDQorICogICAgICAgYW5kIEByZWYgTlJGX1JBRElPX1JFUV9UWVBFX05PUk1BTC4gVGhlIGZpcnN0IHJlcXVlc3QgaW4gYSBzZXNzaW9uIG11c3QgYWx3YXlzIGJlIG9mIHR5cGUgQHJlZiBOUkZfUkFESU9fUkVRX1RZUEVfRUFSTElFU1QuDQorICogQG5vdGUgRm9yIGEgbm9ybWFsIHJlcXVlc3QgKEByZWYgTlJGX1JBRElPX1JFUV9UWVBFX05PUk1BTCksIHRoZSBzdGFydCB0aW1lIG9mIGEgcmFkaW8gdGltZXNsb3QgaXMgc3BlY2lmaWVkIGJ5DQorICogICAgICAgcF9yZXF1ZXN0LT5kaXN0YW5jZV91cyBhbmQgaXMgZ2l2ZW4gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwcmV2aW91cyB0aW1lc2xvdC4NCisgKiBAbm90ZSBBIHRvbyBzbWFsbCBwX3JlcXVlc3QtPmRpc3RhbmNlX3VzIHdpbGwgbGVhZCB0byBhIEByZWYgTlJGX0VWVF9SQURJT19CTE9DS0VEIGV2ZW50Lg0KKyAqIEBub3RlIFRpbWVzbG90cyBzY2hlZHVsZWQgdG9vIGNsb3NlIHdpbGwgbGVhZCB0byBhIEByZWYgTlJGX0VWVF9SQURJT19CTE9DS0VEIGV2ZW50Lg0KKyAqIEBub3RlIFNlZSB0aGUgU29mdERldmljZSBTcGVjaWZpY2F0aW9uIGZvciBtb3JlIG9uIHJhZGlvIHRpbWVzbG90IHNjaGVkdWxpbmcsIGRpc3RhbmNlcyBhbmQgbGVuZ3Rocy4NCisgKiBAbm90ZSBJZiBhbiBvcHBvcnR1bml0eSBmb3IgdGhlIGZpcnN0IHJhZGlvIHRpbWVzbG90IGlzIG5vdCBmb3VuZCBiZWZvcmUgMTAwIG1zIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMNCisgKiAgICAgICBmdW5jdGlvbiwgaXQgaXMgbm90IHNjaGVkdWxlZCwgYW5kIGluc3RlYWQgYSBAcmVmIE5SRl9FVlRfUkFESU9fQkxPQ0tFRCBldmVudCBpcyBzZW50Lg0KKyAqICAgICAgIFRoZSBhcHBsaWNhdGlvbiBtYXkgdGhlbiB0cnkgdG8gc2NoZWR1bGUgdGhlIGZpcnN0IHJhZGlvIHRpbWVzbG90IGFnYWluLg0KKyAqIEBub3RlIFN1Y2Nlc3NmdWwgcmVxdWVzdHMgd2lsbCByZXN1bHQgaW4gbnJmX3JhZGlvX3NpZ25hbF9jYWxsYmFja190KEByZWYgTlJGX1JBRElPX0NBTExCQUNLX1NJR05BTF9UWVBFX1NUQVJUKS4NCisgKiAgICAgICBVbnN1Y2Nlc3NmdWwgcmVxdWVzdHMgd2lsbCByZXN1bHQgaW4gYSBAcmVmIE5SRl9FVlRfUkFESU9fQkxPQ0tFRCBldmVudCwgc2VlIEByZWYgTlJGX1NPQ19FVlRTLg0KKyAqIEBub3RlIFRoZSBqaXR0ZXIgaW4gdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHJhZGlvIHRpbWVzbG90cyBpcyArLy0gQHJlZiBOUkZfUkFESU9fU1RBUlRfSklUVEVSX1VTIHVzLg0KKyAqIEBub3RlIFRoZSBucmZfcmFkaW9fc2lnbmFsX2NhbGxiYWNrX3QoQHJlZiBOUkZfUkFESU9fQ0FMTEJBQ0tfU0lHTkFMX1RZUEVfU1RBUlQpIGNhbGwgaGFzIGEgbGF0ZW5jeSByZWxhdGl2ZSB0byB0aGUNCisgKiAgICAgICBzcGVjaWZpZWQgcmFkaW8gdGltZXNsb3Qgc3RhcnQsIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgYWN0dWFsIHN0YXJ0IHRpbWUgb2YgdGhlIHRpbWVzbG90Lg0KKyAqIEBub3RlIE5SRl9USU1FUjAgaXMgcmVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSByYWRpbyB0aW1lc2xvdCwgYW5kIGlzIGNsb2NrZWQgYXQgMU1IeiBmcm9tIHRoZSBoaWdoIGZyZXF1ZW5jeQ0KKyAqICAgICAgICgxNiBNSHopIGNsb2NrIHNvdXJjZS4gSWYgcF9yZXF1ZXN0LT5oZmNsa19mb3JjZV94dGFsIGlzIHRydWUsIHRoZSBoaWdoIGZyZXF1ZW5jeSBjbG9jayBpcw0KKyAqICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgY2xvY2tlZCBmcm9tIHRoZSBleHRlcm5hbCBjcnlzdGFsLg0KKyAqIEBub3RlIFRoZSBTb2Z0RGV2aWNlIHdpbGwgbmVpdGhlciBhY2Nlc3MgdGhlIE5SRl9SQURJTyBwZXJpcGhlcmFsIG5vciB0aGUgTlJGX1RJTUVSMCBwZXJpcGhlcmFsDQorICogICAgICAgZHVyaW5nIHRoZSByYWRpbyB0aW1lc2xvdC4NCisgKg0KKyAqIEBwYXJhbVtpbl0gcF9yZXF1ZXN0IFBvaW50ZXIgdG8gdGhlIHJlcXVlc3QgcGFyYW1ldGVycy4NCisgKg0KKyAqIEByZXR2YWwgOjpOUkZfRVJST1JfRk9SQklEREVOIElmIHNlc3Npb24gbm90IG9wZW5lZCBvciB0aGUgc2Vzc2lvbiBpcyBub3QgSURMRS4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfQUREUiBJZiB0aGUgcF9yZXF1ZXN0IHBvaW50ZXIgaXMgaW52YWxpZC4NCisgKiBAcmV0dmFsIDo6TlJGX0VSUk9SX0lOVkFMSURfUEFSQU0gSWYgdGhlIHBhcmFtZXRlcnMgb2YgcF9yZXF1ZXN0IGFyZSBub3QgdmFsaWQuDQorICogQHJldHZhbCA6Ok5SRl9TVUNDRVNTIE90aGVyd2lzZS4NCisgKi8NCisgU1ZDQUxMKFNEX1JBRElPX1JFUVVFU1QsIHVpbnQzMl90LCBzZF9yYWRpb19yZXF1ZXN0KG5yZl9yYWRpb19yZXF1ZXN0X3QgY29uc3QgKiBwX3JlcXVlc3QpKTsNCisNCisvKipAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYgLy8gTlJGX1NPQ19IX18NCisNCisvKipAfSAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3N2Yy5oIGIvdGhpcmRfcGFydHkvTm9yZGljU2VtaWNvbmR1Y3Rvci9zb2Z0ZGV2aWNlL3MxNDAvaGVhZGVycy9ucmZfc3ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5YzFhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L05vcmRpY1NlbWljb25kdWN0b3Ivc29mdGRldmljZS9zMTQwL2hlYWRlcnMvbnJmX3N2Yy5oCkBAIC0wLDAgKzEsODggQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSBOb3JkaWMgU2VtaWNvbmR1Y3RvciBBU0ENCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICoNCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqDQorICogICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE5vcmRpYyBTZW1pY29uZHVjdG9yIEFTQSBub3IgdGhlIG5hbWVzIG9mIG90aGVyDQorICogICBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCisgKiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogICA0LiBUaGlzIHNvZnR3YXJlIG11c3Qgb25seSBiZSB1c2VkIGluIGEgcHJvY2Vzc29yIG1hbnVmYWN0dXJlZCBieSBOb3JkaWMNCisgKiAgIFNlbWljb25kdWN0b3IgQVNBLCBvciBpbiBhIHByb2Nlc3NvciBtYW51ZmFjdHVyZWQgYnkgYSB0aGlyZCBwYXJ0eSB0aGF0DQorICogICBpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBwcm9jZXNzb3IgbWFudWZhY3R1cmVkIGJ5IE5vcmRpYyBTZW1pY29uZHVjdG9yLg0KKyAqDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICovDQorDQorI2lmbmRlZiBOUkZfU1ZDX18NCisjZGVmaW5lIE5SRl9TVkNfXw0KKw0KKyNpbmNsdWRlICJzdGRpbnQuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaWZkZWYgU1ZDQUxMX0FTX05PUk1BTF9GVU5DVElPTg0KKyNkZWZpbmUgU1ZDQUxMKG51bWJlciwgcmV0dXJuX3R5cGUsIHNpZ25hdHVyZSkgcmV0dXJuX3R5cGUgc2lnbmF0dXJlDQorI2Vsc2UNCisNCisjaWZuZGVmIFNWQ0FMTA0KKyNpZiBkZWZpbmVkIChfX0NDX0FSTSkNCisjZGVmaW5lIFNWQ0FMTChudW1iZXIsIHJldHVybl90eXBlLCBzaWduYXR1cmUpIHJldHVybl90eXBlIF9fc3ZjKG51bWJlcikgc2lnbmF0dXJlDQorI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorI2RlZmluZSBHQ0NfQ0FTVF9DUFAgKHVpbnQxNl90KQ0KKyNlbHNlDQorI2RlZmluZSBHQ0NfQ0FTVF9DUFANCisjZW5kaWYNCisjZGVmaW5lIFNWQ0FMTChudW1iZXIsIHJldHVybl90eXBlLCBzaWduYXR1cmUpICAgICAgICAgIFwNCisgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKSAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3JldHVybi10eXBlXCIiKSAgIFwNCisgIF9fYXR0cmlidXRlX18oKG5ha2VkKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIF9fYXR0cmlidXRlX18oKHVudXNlZCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHN0YXRpYyByZXR1cm5fdHlwZSBzaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgX19hc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICJzdmMgJTBcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICJieCByMTQiIDogOiAiSSIgKEdDQ19DQVNUX0NQUCBudW1iZXIpIDogInIwIiAgIFwNCisgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHBvcCIpDQorDQorI2VsaWYgZGVmaW5lZCAoX19JQ0NBUk1fXykNCisjZGVmaW5lIFBSQUdNQSh4KSBfUHJhZ21hKCN4KQ0KKyNkZWZpbmUgU1ZDQUxMKG51bWJlciwgcmV0dXJuX3R5cGUsIHNpZ25hdHVyZSkgICAgICAgICAgXA0KK1BSQUdNQShzd2lfbnVtYmVyID0gKG51bWJlcikpICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyBfX3N3aSByZXR1cm5fdHlwZSBzaWduYXR1cmU7DQorI2Vsc2UNCisjZGVmaW5lIFNWQ0FMTChudW1iZXIsIHJldHVybl90eXBlLCBzaWduYXR1cmUpIHJldHVybl90eXBlIHNpZ25hdHVyZQ0KKyNlbmRpZg0KKyNlbmRpZiAgLy8gU1ZDQUxMDQorDQorI2VuZGlmICAvLyBTVkNBTExfQVNfTk9STUFMX0ZVTkNUSU9ODQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZiAgLy8gTlJGX1NWQ19fDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvYWRhcHRlcnMvaW5jbHVkZS9hZF9yZi5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvYWRhcHRlcnMvaW5jbHVkZS9hZF9yZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4N2JkZTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9hZGFwdGVycy9pbmNsdWRlL2FkX3JmLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgQURBUFRFUlMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBSRl9BREFQVEVSCisgKgorICogXGJyaWVmIFJGIGFkYXB0ZXIKKyAqCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUKKyAqCisgKiBAYnJpZWYgUmFkaW8gbW9kdWxlIGFjY2VzcyBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworCisKKworI2lmbmRlZiBBRF9SRl9IXworI2RlZmluZSBBRF9SRl9IXworCisjaWYgZGdfY29uZmlnUkZfQURBUFRFUgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiaHdfcmYuaCIKKworLyoqCisgKiBAYnJpZWYgUGVyZm9ybXMgUkYgYWRhcHRlciBpbml0aWFsaXphdGlvbgorICovCit2b2lkIGFkX3JmX2luaXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFJldHJ5IGEgZmFpbGVkIGNhbGlicmF0aW9uCisgKgorICogVGhpcyB3aWxsIHBvd2VyLWN5Y2xlIFJGLCByZWFwcGx5IHRjcyBhbmQgcmVjb21tZW5kZWQgc2V0dGluZ3MsIGFuZAorICogcmV0cnkgY2FsaWJyYXRpb24uIElmIGNhbGlicmF0aW9uIGZhaWxzIGFnYWluLCBpdCB3aWxsIHJlc2V0IHRoZSBzeXN0ZW0KKyAqICh1c2luZyB0aGUgd2RvZykKKyAqLwordm9pZCBhZF9yZl9yZXRyeV9jYWxpYnJhdGlvbigpOworCisvKioKKyAqIFxicmllZiBTdGFydCBDYWxpYnJhdGlvbiBwcm9jZWR1cmUgYW5kIGNoZWNrIGlmIGl0IHN1Y2NlZWRzCisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHRoZSBjYWxpYnJhdGlvbiBwcm9jZWR1cmUsIGFuZCBjaGVjayBpZiB0aGUgY2FsaWJyYXRpb24gaW5pdGlhbAorICogcGFydCAodGhlIGlmZiBjYWxpYnJhdGlvbikgc3VjY2VlZHMuIElmIG5vdCwgaXQgd2lsbCByZXNldCB0aGUgUkYgYmxvY2sgYW5kIHJldHJ5LgorICogSWYgdGhlIGNhbGlicmF0aW9uIHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmQgYXR0ZW1wdCwgaXQgd2lsbCB0cmlnZ2VyIGEKKyAqIHdhdGNoZG9nIHJlc2V0CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRfcmZfc3RhcnRfYW5kX2NoZWNrX2NhbGlicmF0aW9uKCkKK3sKKyAgICAgICAgaWYgKCFod19yZl9zdGFydF9jYWxpYnJhdGlvbigpKQorICAgICAgICAgICAgICAgICBhZF9yZl9yZXRyeV9jYWxpYnJhdGlvbigpOworfQorCisvKioKKyAqIFxicmllZiBQZXJmb3JtIFJGIHN5c3RlbSBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBUaGlzIHdpbGwgcHJlZm9ybSBhIGZ1bGwgUkYgc3lzdGVtIGluaXQsIGFuZCBjaGVjayBpZiB0aGUKKyAqIGNhbGlicmF0aW9uIGluaXRpYWwgcGFydCAodGhlIGlmZiBjYWxpYnJhdGlvbikgc3VjY2VlZHMuIElmIG5vdCwgaXQgd2lsbAorICogcmVzZXQgdGhlIFJGIGJsb2NrIGFuZCByZXRyeS4KKyAqIElmIHRoZSBjYWxpYnJhdGlvbiBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kIGF0dGVtcHQsIGl0IHdpbGwgdHJpZ2dlciBhCisgKiB3YXRjaGRvZyByZXNldAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFkX3JmX3N5c3RlbV9pbml0KCkKK3sKKyAgICAgICAgaWYgKCFod19yZl9zeXN0ZW1faW5pdCgpKQorICAgICAgICAgICAgICAgICBhZF9yZl9yZXRyeV9jYWxpYnJhdGlvbigpOworfQorCisvKioKKyAqIFxicmllZiBTdGFydCBDYWxpYnJhdGlvbiBwcm9jZWR1cmUgYW5kIHJldHVybi4KKyAqCisgKiBUaGlzIHdpbGwgYmxvY2sgZm9yIHNvbWUgdGltZSAod2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkKSBpbiBvcmRlciB0byBwZXJmb3JtCisgKiBUaGUgZmlyc3QgcGFydCBvZiBjYWxpYnJhdGlvbiAoSUZGLCBEQyBvZmZzZXQgYW5kIHRoZSBzdGFydCBvZiBnYWluIGNhbGliKS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZF9yZl9zdGFydF9jYWxpYnJhdGlvbigpCit7CisgICAgICAgIGFkX3JmX3N0YXJ0X2FuZF9jaGVja19jYWxpYnJhdGlvbigpOworfQorCisvKioKKyAqIFxicmllZiBTZXRzIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlY29tbWVuZGVkIHZhbHVlcywgdGFraW5nIFJGIHN0YXRlIGludG8gYWNjb3VudC4KKyAqCisgKiBBY3RzIGxpa2UgXHJlZiBod19yZl9zZXRfcmVjb21tZW5kZWRfc2V0dGluZ3MgYnV0IG1ha2VzIHN1cmUgdGhhdCB0aGUgUkYgcG93ZXIgZG9tYWluIGlzIG9uIGFuZAorICogdW5jb25maWd1cmVkLiBEaXNhYmxlcyBpbnRlcnJ1cHRzLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFkX3JmX3JlcXVlc3RfcmVjb21tZW5kZWRfc2V0dGluZ3Modm9pZCkKK3sKKyAgICAgICAgaHdfcmZfcmVxdWVzdF9yZWNvbW1lbmRlZF9zZXR0aW5ncygpOworfQorCisvKioKKyAqIFxicmllZiBSZXF1ZXN0cyB0aGF0IHRoZSBSRiBpcyB0dXJuZWQgb24KKyAqCisgKiBSZXF1ZXN0cyB0aGF0IHRoZSBSRiBpcyB0dXJuZWQgb24sIGlmIG5vdCBhbHJlYWR5IG9uLiBEaXNhYmxlcyBpbnRlcnJ1cHRzLgorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGVfYmxlIFRydWUsIGlmIHRoZSByZiBpcyBuZWVkZWQgZm9yIGJsZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFkX3JmX3JlcXVlc3Rfb24oYm9vbCBtb2RlX2JsZSkKK3sKKyAgICAgICAgaHdfcmZfcmVxdWVzdF9vbihtb2RlX2JsZSk7Cit9CisKKy8qKgorICogXGJyaWVmIFJlcXVlc3RzIHRoYXQgdGhlIFJGIGlzIHR1cm5lZCBvZmYKKyAqCisgKiBSZXF1ZXN0cyB0aGF0IHRoZSBSRiBpcyB0dXJuZWQgb2ZmLCBpZiBub3QgYWxyZWFkeSBvZmYuCisgKiBUaGUgUkYgd2lsbCBiZSB0dXJuZWQgb2ZmIG9ubHkgaWYgdGhlcmUgYXJlIG5vIG1vcmUKKyAqIHJlcXVlc3RzIChpZS4gYWxsIHJlcXVlc3RlcnMgaGF2ZSBjYWxsZWQgYWRfcmZfcmVxdWVzdF9vZmYoKSkKKyAqIERpc2FibGVzIGludGVycnVwdHMKKyAqCisgKiBccGFyYW0gW2luXSBtb2RlX2JsZSBUcnVlLCBpZiB0aGUgcmYgd2FzIG5lZWRlZCBmb3IgYmxlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZF9yZl9yZXF1ZXN0X29mZihib29sIG1vZGVfYmxlKQoreworICAgICAgICBod19yZl9yZXF1ZXN0X29mZihtb2RlX2JsZSk7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdSRl9BREFQVEVSICovCisKKyNlbmRpZiAvKiBBRF9SRl9IXyAqLworCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvYXJtX2xpY2Vuc2UudHh0IGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvYXJtX2xpY2Vuc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZTg5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9hcm1fbGljZW5zZS50eHQKQEAgLTAsMCArMSwyNiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxMyBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZGVidWcuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjJlMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9kZWJ1Zy5oCkBAIC0wLDAgKzEsNjM0IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIEJTUF9DT05GSUcKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBCU1BfREVCVUcKKyAqCisgKiBcYnJpZWYgRG94eWdlbiBkb2N1bWVudGF0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZvciB0aGlzIG1vZHVsZS4KKyAqICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGUocykKKyAqCisgKiBceworKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGJzcF9kZWJ1Zy5oCisgKgorICogQGJyaWVmIEJvYXJkIFN1cHBvcnQgUGFja2FnZS4gRGVidWcgQ29uZmlndXJhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgQlNQX0RFQlVHX0hfCisjZGVmaW5lIEJTUF9ERUJVR19IXworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBERUJVRyBHUElPIGhhbmRsaW5nIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBEQkdfQ09ORklHVVJFKGZsYWcsIG5hbWUsIGZ1bmMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmbGFnID09IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUjI19NT0RFX1JFRyA9IDB4MzAwICsgZnVuYzsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREJHX0NPTkZJR1VSRV9ISUdIKGZsYWcsIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZmxhZyA9PSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBuYW1lIyNfU0VUX1JFRyA9IG5hbWUjI19QSU47ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSMjX01PREVfUkVHID0gMHgzMDA7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBEQkdfQ09ORklHVVJFX0xPVyhmbGFnLCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmbGFnID09IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUjI19SRVNFVF9SRUcgPSBuYW1lIyNfUElOOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBuYW1lIyNfTU9ERV9SRUcgPSAweDMwMDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERCR19TRVRfSElHSChmbGFnLCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGZsYWcgPT0gMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSMjX1NFVF9SRUcgPSBuYW1lIyNfUElOOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBEQkdfU0VUX0xPVyhmbGFnLCBuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmbGFnID09IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUjI19SRVNFVF9SRUcgPSBuYW1lIyNfUElOOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmRGYXVsdCBvciBOTUkgZXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgRVhDRVBUSU9OX0RFQlVHCisjZGVmaW5lIEVYQ0VQVElPTl9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsb2NrIGFuZCBQb3dlciBNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIENQTV9ERUJVRworI2RlZmluZSBDUE1fREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBDUE1fVVNFX0ZVTkNUSU9OQUxfREVCVUcKKyNkZWZpbmUgQ1BNX1VTRV9GVU5DVElPTkFMX0RFQlVHICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgR1BJTyBjb25maWcuCisjZW5kaWYKKworI2lmbmRlZiBDUE1fVVNFX1RJTUlOR19ERUJVRworI2RlZmluZSBDUE1fVVNFX1RJTUlOR19ERUJVRyAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBHUElPIGNvbmZpZy4KKyNlbmRpZgorCisjaWZuZGVmIENQTV9VU0VfUkNYX0RFQlVHCisjZGVmaW5lIENQTV9VU0VfUkNYX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAoMCkgICAgIC8vIFJlcXVpcmVzIGxvZ2dpbmcuCisjZW5kaWYKKworLyogQ29udHJvbHMgd2hpY2ggUkFNIGJsb2NrcyB3aWxsIGJlIHJldGFpbmVkIHdoZW4gdGhlIE1FQVNVUkVfU0xFRVBfQ1VSUkVOVCB0ZXN0IG1vZGUgaXMgdXNlZAorICogKG9wdGlvbmFsKS4gKi8KKyNpZm5kZWYgZGdfY29uZmlnVEVTVE1PREVfUkVUQUlOX1JBTQorI2RlZmluZSBkZ19jb25maWdURVNUTU9ERV9SRVRBSU5fUkFNICAgICAgICAgICAgKDB4MUYpCisjZW5kaWYKKworLyogQ29udHJvbHMgd2hldGhlciB0aGUgQ2FjaGUgd2lsbCBiZSByZXRhaW5lZCB3aGVuIHRoZSBNRUFTVVJFX1NMRUVQX0NVUlJFTlQgdGVzdCBtb2RlIGlzIHVzZWQKKyAqIChvcHRpb25hbCkuICovCisjaWZuZGVmIGRnX2NvbmZpZ1RFU1RNT0RFX1JFVEFJTl9DQUNIRQorI2RlZmluZSBkZ19jb25maWdURVNUTU9ERV9SRVRBSU5fQ0FDSEUgICAgICAgICAgKDApCisjZW5kaWYKKworLyogQ29udHJvbHMgd2hldGhlciB0aGUgRUNDIFJBTSB3aWxsIGJlIHJldGFpbmVkIHdoZW4gdGhlIE1FQVNVUkVfU0xFRVBfQ1VSUkVOVCB0ZXN0IG1vZGUgaXMgdXNlZAorICogKG9wdGlvbmFsKS4gKi8KKyNpZm5kZWYgZGdfY29uZmlnX1RFU1RNT0RFX1JFVEFJTl9FQ0NSQU0KKyNkZWZpbmUgZGdfY29uZmlnX1RFU1RNT0RFX1JFVEFJTl9FQ0NSQU0gICAgICAgICgwKQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNCIENoYXJnZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgREVCVUdfVVNCX0NIQVJHRVIKKyNkZWZpbmUgREVCVUdfVVNCX0NIQVJHRVIgICAgICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgREVCVUdfVVNCX0NIQVJHRVJfRlNNCisjZGVmaW5lIERFQlVHX1VTQl9DSEFSR0VSX0ZTTSAgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIERFQlVHX1VTQl9DSEFSR0VSX1BSSU5UCisjZGVmaW5lIERFQlVHX1VTQl9DSEFSR0VSX1BSSU5UICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIFVTQl9DSEFSR0VSX1RJTUlOR19ERUJVRworI2RlZmluZSBVU0JfQ0hBUkdFUl9USU1JTkdfREVCVUcgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkxFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBCTEVfVVNFX1RJTUlOR19ERUJVRworI2RlZmluZSBCTEVfVVNFX1RJTUlOR19ERUJVRyAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBHUElPIGNvbmZpZy4KKyNlbmRpZgorCisjaWZuZGVmIEJMRV9BREFQVEVSX0RFQlVHCisjZGVmaW5lIEJMRV9BREFQVEVSX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAoMCkgICAgIC8vIFJlcXVpcmVzIEdQSU8gY29uZmlnLgorI2VuZGlmCisKKyNpZm5kZWYgQkxFX1JYX0VOX0RFQlVHCisjZGVmaW5lIEJMRV9SWF9FTl9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAoMCkgICAgIC8vIFJlcXVpcmVzIEdQSU8gY29uZmlnLgorI2VuZGlmCisKKyNkZWZpbmUgQkxFX1JYX0VOX0ZVTkMgICAgICAgICAgICAgICAgICAgICAgICAgICg1NykKKworI2lmbmRlZiBCTEVfV0lORE9XX1NUQVRJU1RJQ1MKKyNkZWZpbmUgQkxFX1dJTkRPV19TVEFUSVNUSUNTICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgQkxFX1NMRUVQX1BFUklPRF9ERUJVRworI2RlZmluZSBCTEVfU0xFRVBfUEVSSU9EX0RFQlVHICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBsb2dnaW5nIGFuZCB3aW5kb3cgc3RhdGlzdGljcy4KKyNlbmRpZgorCisjaWZuZGVmIEJMRV9XQUtFVVBfTU9OSVRPUl9QRVJJT0QKKyNkZWZpbmUgQkxFX1dBS0VVUF9NT05JVE9SX1BFUklPRCAgICAgICAgICAgICAgICgxMDI0KQorI2VuZGlmCisKKyNpZm5kZWYgQkxFX01BWF9NSVNTRVNfQUxMT1dFRAorI2RlZmluZSBCTEVfTUFYX01JU1NFU19BTExPV0VEICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBCTEVfTUFYX0RFTEFZU19BTExPV0VECisjZGVmaW5lIEJMRV9NQVhfREVMQVlTX0FMTE9XRUQgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZsYXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmbmRlZiBGTEFTSF9ERUJVRworI2RlZmluZSBGTEFTSF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBHUElPIGNvbmZpZy4KKyNlbmRpZgorCisjaWZuZGVmIF9fREJHX1FTUElfRU5BQkxFRAorI2RlZmluZSBfX0RCR19RU1BJX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb21tb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZm5kZWYgQ01OX1RJTUlOR19ERUJVRworI2RlZmluZSBDTU5fVElNSU5HX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgKDApICAgICAvLyBSZXF1aXJlcyBHUElPIGNvbmZpZy4KKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZuZGVmIFNQSV9USU1JTkdfREVCVUcKKyNkZWZpbmUgU1BJX1RJTUlOR19ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICgwKSAgICAgLy8gUmVxdWlyZXMgR1BJTyBjb25maWcuCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdQSU8gY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBFbmFibGUvRGlzYWJsZSBHUElPIHBpbiBhc3NpZ25tZW50IGNvbmZsaWN0IGRldGVjdGlvbgorICovCisjZGVmaW5lIERFQlVHX0dQSU9fQUxMT0NfTU9OSVRPUl9FTkFCTEVEICAgICAgICAoMCkKKworCisvKiBFeGNlcHRpb24gaGFuZGxpbmcgZGVidWcgY29uZmlndXJhdGlvbgorICoKKyAqLworI2lmIChFWENFUFRJT05fREVCVUcgPT0gMCkKKy8vIEV4Y2VwdGlvbiBvY2N1cnJlZCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEVYQ0VQVElPTkRCR19NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRVhDRVBUSU9OREJHX1NFVF9SRUcgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBFWENFUFRJT05EQkdfUkVTRVRfUkVHICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEVYQ0VQVElPTkRCR19QSU4gICAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2Vsc2UKKworLy8gVGljayAoUDNbMF0pCisjZGVmaW5lIEVYQ0VQVElPTkRCR19NT0RFX1JFRyAgICAgICAgICAgICAgICAgICBHUElPLT5QMzBfTU9ERV9SRUcKKyNkZWZpbmUgRVhDRVBUSU9OREJHX1NFVF9SRUcgICAgICAgICAgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBFWENFUFRJT05EQkdfUkVTRVRfUkVHICAgICAgICAgICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRVhDRVBUSU9OREJHX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKyNlbmRpZgorCisvKiBGdW5jdGlvbmFsIGRlYnVnIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBOb3RlIHRoYXQgR1BJTyBvdmVybGFwcGluZyBpcyBhbGxvd2VkIGlmIHRoZSB0cmFja2VkIGV2ZW50cyBhcmUgZGlzY3JldGUgYW5kIHRoZSBpbml0aWFsIEdQSU8KKyAqIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUhIE5vIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBmb3IgZXJyb25lb3VzIGNvbmZpZ3VyYXRpb24gdGhvdWdoIQorICoKKyAqLworI2lmIChDUE1fVVNFX0ZVTkNUSU9OQUxfREVCVUcgPT0gMCkKKy8vIFRpY2sgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBDUE1EQkdfVElDS19NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19USUNLX1NFVF9SRUcgICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1RJQ0tfUkVTRVRfUkVHICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfVElDS19QSU4gICAgICAgICAgICAgICAgICAgICAgICAgKDApCisKKy8vIEV4dGVybmFsIFdha2UtdXAgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBDUE1EQkdfRVhUX1dLVVBfTU9ERV9SRUcgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19FWFRfV0tVUF9TRVRfUkVHICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0VYVF9XS1VQX1JFU0VUX1JFRyAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfRVhUX1dLVVBfUElOICAgICAgICAgICAgICAgICAgICAgKDApCisKKy8vIEFjdGl2ZSAvIFNsZWVwIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGhpZ2gpCisjZGVmaW5lIENQTURCR19QT1dFUlVQX01PREVfUkVHICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1BPV0VSVVBfU0VUX1JFRyAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfUE9XRVJVUF9SRVNFVF9SRUcgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19QT1dFUlVQX1BJTiAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2Vsc2UKKworLy8gVGljayAoUDJbM10pCisjZGVmaW5lIENQTURCR19USUNLX01PREVfUkVHICAgICAgICAgICAgICAgICAgICBHUElPLT5QMjNfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX1RJQ0tfU0VUX1JFRyAgICAgICAgICAgICAgICAgICAgIEdQSU8tPlAyX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfVElDS19SRVNFVF9SRUcgICAgICAgICAgICAgICAgICAgR1BJTy0+UDJfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1RJQ0tfUElOICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisKKy8vIEV4dGVybmFsIFdha2UtdXAgKFAzWzBdKQorI2RlZmluZSBDUE1EQkdfRVhUX1dLVVBfTU9ERV9SRUcgICAgICAgICAgICAgICAgR1BJTy0+UDMwX01PREVfUkVHCisjZGVmaW5lIENQTURCR19FWFRfV0tVUF9TRVRfUkVHICAgICAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0VYVF9XS1VQX1JFU0VUX1JFRyAgICAgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19FWFRfV0tVUF9QSU4gICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvLyBBY3RpdmUgLyBTbGVlcCAoUDFbNF0pCisjZGVmaW5lIENQTURCR19QT1dFUlVQX01PREVfUkVHICAgICAgICAgICAgICAgICBHUElPLT5QMTRfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX1BPV0VSVVBfU0VUX1JFRyAgICAgICAgICAgICAgICAgIEdQSU8tPlAxX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfUE9XRVJVUF9SRVNFVF9SRUcgICAgICAgICAgICAgICAgR1BJTy0+UDFfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1BPV0VSVVBfUElOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZW5kaWYKKworLyogVGltaW5nIGRlYnVnIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBOb3RlIHRoYXQgaW4gdGhpcyBtb2RlIHRoZSBwYWQgbGF0Y2hlcyBhcmUgcmVtb3ZlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZXhlY3V0aW9uIHJlc3VtZXMgZnJvbQorICogdGhlIF9fV0ZJKCkuIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgbm90IGFkdmlzZWQgdG8gdXNlIHRoaXMgZmVhdHVyZSBpbiBwcm9qZWN0cyB0aGF0IHVzZSBHUElPUy4KKyAqIE5ldmVydGhlbGVzcywgaW4gY2FzZSBpdCBpcyB1c2VkLCBtYWtlIHN1cmUgdGhhdCB0aGUgInBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24iIGlzIGFsc28gZG9uZQorICogYXQgdGhhdCBwb2ludCwgbW9kaWZ5aW5nIHN5c19wb3dlcl9tZ3IuYyBhY2NvcmRpbmdseS4KKyAqCisgKiBOb3RlIGFsc28gdGhhdCBHUElPIG92ZXJsYXBwaW5nIGlzIGFsbG93ZWQgaWYgdGhlIHRyYWNrZWQgZXZlbnRzIGFyZSBkaXNjcmV0ZSBhbmQgdGhlIGluaXRpYWwKKyAqIEdQSU8gY29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSEgTm8gY2hlY2tpbmcgaXMgcGVyZm9ybWVkIGZvciBlcnJvbmVvdXMgY29uZmlndXJhdGlvbiB0aG91Z2ghCisgKgorICovCisjaWYgKENQTV9VU0VfVElNSU5HX0RFQlVHID09IDApCisvLyBDUE06IHNsZWVwIG9yIGlkbGUgZW50cnkgKHVudGlsIF9fV0ZJKCkgaXMgY2FsbGVkKSAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBoaWdoKQorI2RlZmluZSBDUE1EQkdfU0xFRVBfRU5URVJfTU9ERV9SRUcgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19TTEVFUF9FTlRFUl9TRVRfUkVHICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VOVEVSX1JFU0VUX1JFRyAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfU0xFRVBfRU5URVJfUElOICAgICAgICAgICAgICAgICAgKDApCisKKy8vIENQTTogc2xlZXAgb3IgaWRsZSBleGl0IChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VYSVRfTU9ERV9SRUcgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfU0xFRVBfRVhJVF9TRVRfUkVHICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19TTEVFUF9FWElUX1JFU0VUX1JFRyAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VYSVRfUElOICAgICAgICAgICAgICAgICAgICgwKQorCisvLyBMb3cgY2xvY2tzIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX0xPV0VSX0NMT0NLU19NT0RFX1JFRyAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfTE9XRVJfQ0xPQ0tTX1NFVF9SRUcgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19MT1dFUl9DTE9DS1NfUkVTRVRfUkVHICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0xPV0VSX0NMT0NLU19QSU4gICAgICAgICAgICAgICAgICgwKQorCisvLyBYVEFMMTZNIHNldHRsaW5nIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX1hUQUwxNk1fU0VUVExFRF9NT0RFX1JFRyAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfWFRBTDE2TV9TRVRUTEVEX1NFVF9SRUcgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19YVEFMMTZNX1NFVFRMRURfUkVTRVRfUkVHICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX1hUQUwxNk1fU0VUVExFRF9QSU4gICAgICAgICAgICAgICgwKQorCisjZWxzZQorCisvLyBDUE06IHNsZWVwIG9yIGlkbGUgZW50cnkgKHVudGlsIF9fV0ZJKCkgaXMgY2FsbGVkKSAoUDFbN10pCisjZGVmaW5lIENQTURCR19TTEVFUF9FTlRFUl9NT0RFX1JFRyAgICAgICAgICAgICBHUElPLT5QMTdfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VOVEVSX1NFVF9SRUcgICAgICAgICAgICAgIEdQSU8tPlAxX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfU0xFRVBfRU5URVJfUkVTRVRfUkVHICAgICAgICAgICAgR1BJTy0+UDFfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VOVEVSX1BJTiAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisKKy8vIENQTTogc2xlZXAgb3IgaWRsZSBleGl0IChQMVs2XSkKKyNkZWZpbmUgQ1BNREJHX1NMRUVQX0VYSVRfTU9ERV9SRUcgICAgICAgICAgICAgIEdQSU8tPlAxNl9NT0RFX1JFRworI2RlZmluZSBDUE1EQkdfU0xFRVBfRVhJVF9TRVRfUkVHICAgICAgICAgICAgICAgR1BJTy0+UDFfU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19TTEVFUF9FWElUX1JFU0VUX1JFRyAgICAgICAgICAgICBHUElPLT5QMV9SRVNFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfU0xFRVBfRVhJVF9QSU4gICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKworLy8gTG93IGNsb2NrcyAoUDFbNV0pCisjZGVmaW5lIENQTURCR19MT1dFUl9DTE9DS1NfTU9ERV9SRUcgICAgICAgICAgICBHUElPLT5QMTVfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX0xPV0VSX0NMT0NLU19TRVRfUkVHICAgICAgICAgICAgIEdQSU8tPlAxX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfTE9XRVJfQ0xPQ0tTX1JFU0VUX1JFRyAgICAgICAgICAgR1BJTy0+UDFfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0xPV0VSX0NMT0NLU19QSU4gICAgICAgICAgICAgICAgICgxIDw8IDUpCisKKy8vIFhUQUwxNk0gc2V0dGxpbmcgKFAxWzRdKQorI2RlZmluZSBDUE1EQkdfWFRBTDE2TV9TRVRUTEVEX01PREVfUkVHICAgICAgICAgR1BJTy0+UDE0X01PREVfUkVHCisjZGVmaW5lIENQTURCR19YVEFMMTZNX1NFVFRMRURfU0VUX1JFRyAgICAgICAgICBHUElPLT5QMV9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX1hUQUwxNk1fU0VUVExFRF9SRVNFVF9SRUcgICAgICAgIEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19YVEFMMTZNX1NFVFRMRURfUElOICAgICAgICAgICAgICAoMSA8PCA0KQorI2VuZGlmCisKKyNpZiAoQkxFX1VTRV9USU1JTkdfREVCVUcgPT0gMCkKKy8vIEJMRSBMUCAmIEdFTiBpcnFzIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX0JMRV9JUlFfTU9ERV9SRUcgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfQkxFX0lSUV9TRVRfUkVHICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19CTEVfSVJRX1JFU0VUX1JFRyAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0JMRV9JUlFfUElOICAgICAgICAgICAgICAgICAgICAgICgwKQorCisvLyBCTEUgc2xlZXAgcHJlcGFyZSAoZmluYWwgc3RhZ2UpIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgQ1BNREJHX0JMRV9TTEVFUF9FTlRSWV9NT0RFX1JFRyAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfQkxFX1NMRUVQX0VOVFJZX1NFVF9SRUcgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19CTEVfU0xFRVBfRU5UUllfUkVTRVRfUkVHICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0JMRV9TTEVFUF9FTlRSWV9QSU4gICAgICAgICAgICAgICgwKQorCisvLyBCTEUgTFAgaXJxIHNpZ25hbCAoZGlhZ25vc3RpY3MpIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IHVua25vd24pCisjZGVmaW5lIENQTURCR19CTEVfTFBfSVJRX01PREVfUkVHICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKworI2Vsc2UKKworLy8gQkxFIExQICYgR0VOIElTUnMgKFAxWzRdKQorI2RlZmluZSBDUE1EQkdfQkxFX0lSUV9NT0RFX1JFRyAgICAgICAgICAgICAgICAgR1BJTy0+UDE0X01PREVfUkVHCisjZGVmaW5lIENQTURCR19CTEVfSVJRX1NFVF9SRUcgICAgICAgICAgICAgICAgICBHUElPLT5QMV9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0JMRV9JUlFfUkVTRVRfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19CTEVfSVJRX1BJTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorCisvLyBCTEUgc2xlZXAgcHJlcGFyZSAoZmluYWwgc3RhZ2UpIChQMVs0XSkKKyNkZWZpbmUgQ1BNREJHX0JMRV9TTEVFUF9FTlRSWV9NT0RFX1JFRyAgICAgICAgIEdQSU8tPlAxNF9NT0RFX1JFRworI2RlZmluZSBDUE1EQkdfQkxFX1NMRUVQX0VOVFJZX1NFVF9SRUcgICAgICAgICAgR1BJTy0+UDFfU0VUX0RBVEFfUkVHCisjZGVmaW5lIENQTURCR19CTEVfU0xFRVBfRU5UUllfUkVTRVRfUkVHICAgICAgICBHUElPLT5QMV9SRVNFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfQkxFX1NMRUVQX0VOVFJZX1BJTiAgICAgICAgICAgICAgKDEgPDwgNCkKKworLy8gQkxFIExQIGlycSBzaWduYWwgKGRpYWdub3N0aWNzKSAoUDJbM10pCisjZGVmaW5lIENQTURCR19CTEVfTFBfSVJRX01PREVfUkVHICAgICAgICAgICAgICBHUElPLT5QMjNfTU9ERV9SRUcKKyNlbmRpZgorCisjaWYgKEJMRV9BREFQVEVSX0RFQlVHID09IDApCisjZGVmaW5lIEJMRUJER19BREFQVEVSX01PREVfUkVHICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQkxFQkRHX0FEQVBURVJfU0VUX1JFRyAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBCTEVCREdfQURBUFRFUl9SRVNFVF9SRUcgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEJMRUJER19BREFQVEVSX1BJTiAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2Vsc2UKKworI2RlZmluZSBCTEVCREdfQURBUFRFUl9NT0RFX1JFRyAgICAgICAgICAgICAgICAgR1BJTy0+UDMwX01PREVfUkVHCisjZGVmaW5lIEJMRUJER19BREFQVEVSX1NFVF9SRUcgICAgICAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgQkxFQkRHX0FEQVBURVJfUkVTRVRfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEJMRUJER19BREFQVEVSX1BJTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2VuZGlmCisKKyNpZiAoQkxFX1JYX0VOX0RFQlVHID09IDApCisjZGVmaW5lIEJMRUJER19SWEVOX01PREVfUkVHICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQkxFQkRHX1JYRU5fU0VUX1JFRyAgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBCTEVCREdfUlhFTl9SRVNFVF9SRUcgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEJMRUJER19SWEVOX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAoMCkKKworI2Vsc2UKKworI2RlZmluZSBCTEVCREdfUlhFTl9NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgR1BJTy0+UDEyX01PREVfUkVHCisjZGVmaW5lIEJMRUJER19SWEVOX1NFVF9SRUcgICAgICAgICAgICAgICAgICAgICBHUElPLT5QMV9TRVRfREFUQV9SRUcKKyNkZWZpbmUgQkxFQkRHX1JYRU5fUkVTRVRfUkVHICAgICAgICAgICAgICAgICAgIEdQSU8tPlAxX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEJMRUJER19SWEVOX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2VuZGlmCisKKyNpZiAoVVNCX0NIQVJHRVJfVElNSU5HX0RFQlVHID09IDApCisvLyBDSFJHOiBJbnNpZGUgY3JpdGljYWwgc2VjdGlvbiAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENIUkdEQkdfQ1JJVElDQUxfU0VDVElPTl9NT0RFX1JFRyAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ0hSR0RCR19DUklUSUNBTF9TRUNUSU9OX1NFVF9SRUcgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDSFJHREJHX0NSSVRJQ0FMX1NFQ1RJT05fUkVTRVRfUkVHICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENIUkdEQkdfQ1JJVElDQUxfU0VDVElPTl9QSU4gICAgICAgICAgICAoMCkKKworLy8gQ0hSRzogRlNNIHRhc2sgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBDSFJHREJHX0ZTTV9UQVNLX01PREVfUkVHICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENIUkdEQkdfRlNNX1RBU0tfU0VUX1JFRyAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ0hSR0RCR19GU01fVEFTS19SRVNFVF9SRUcgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDSFJHREJHX0ZTTV9UQVNLX1BJTiAgICAgICAgICAgICAgICAgICAgKDApCisKKy8vIENIUkc6IENvbnRyb2wgdGFzayAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIENQTURCR19DT05UUk9MX1RBU0tfTU9ERV9SRUcgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BNREJHX0NPTlRST0xfVEFTS19TRVRfUkVHICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDUE1EQkdfQ09OVFJPTF9UQVNLX1JFU0VUX1JFRyAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENQTURCR19DT05UUk9MX1RBU0tfUElOICAgICAgICAgICAgICAgICAoMCkKKworI2Vsc2UKKworLy8gQ0hSRzogSW5zaWRlIGNyaXRpY2FsIHNlY3Rpb24gKFAzWzJdKQorI2RlZmluZSBDSFJHREJHX0NSSVRJQ0FMX1NFQ1RJT05fTU9ERV9SRUcgICAgICAgR1BJTy0+UDMyX01PREVfUkVHCisjZGVmaW5lIENIUkdEQkdfQ1JJVElDQUxfU0VDVElPTl9TRVRfUkVHICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgQ0hSR0RCR19DUklUSUNBTF9TRUNUSU9OX1JFU0VUX1JFRyAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIENIUkdEQkdfQ1JJVElDQUxfU0VDVElPTl9QSU4gICAgICAgICAgICAoMSA8PCAyKQorCisvLyBDSFJHOiBGU00gdGFzayAoUDNbM10pCisjZGVmaW5lIENIUkdEQkdfRlNNX1RBU0tfTU9ERV9SRUcgICAgICAgICAgICAgICBHUElPLT5QMzNfTU9ERV9SRUcKKyNkZWZpbmUgQ0hSR0RCR19GU01fVEFTS19TRVRfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBDSFJHREJHX0ZTTV9UQVNLX1JFU0VUX1JFRyAgICAgICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ0hSR0RCR19GU01fVEFTS19QSU4gICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisKKy8vIENIUkc6IENvbnRyb2wgdGFzayAoUDNbNF0pCisjZGVmaW5lIENQTURCR19DT05UUk9MX1RBU0tfTU9ERV9SRUcgICAgICAgICAgICBHUElPLT5QMzRfTU9ERV9SRUcKKyNkZWZpbmUgQ1BNREJHX0NPTlRST0xfVEFTS19TRVRfUkVHICAgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBDUE1EQkdfQ09OVFJPTF9UQVNLX1JFU0VUX1JFRyAgICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ1BNREJHX0NPTlRST0xfVEFTS19QSU4gICAgICAgICAgICAgICAgICgxIDw8IDQpCisKKyNlbmRpZgorCisjaWYgKENNTl9USU1JTkdfREVCVUcgPT0gMCkKKy8vIENvbW1vbjogSW5zaWRlIGNyaXRpY2FsIHNlY3Rpb24gKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTl9NT0RFX1JFRyAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT05fU0VUX1JFRyAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIENNTkRCR19DUklUSUNBTF9TRUNUSU9OX1JFU0VUX1JFRyAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTl9QSU4gICAgICAgICAgICAoMCkKKworI2Vsc2UKKworLy8gQ29tbW9uOiBJbnNpZGUgY3JpdGljYWwgc2VjdGlvbiAoUDRbNl0pCisjZGVmaW5lIENNTkRCR19DUklUSUNBTF9TRUNUSU9OX01PREVfUkVHICAgICAgICBHUElPLT5QNDBfTU9ERV9SRUcKKyNkZWZpbmUgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT05fU0VUX1JFRyAgICAgICAgIEdQSU8tPlA0X1NFVF9EQVRBX1JFRworI2RlZmluZSBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTl9SRVNFVF9SRUcgICAgICAgR1BJTy0+UDRfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT05fUElOICAgICAgICAgICAgICgxIDw8IDApCisKKyNlbmRpZgorCisKKy8qIEZsYXNoIGRlYnVnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KKyNpZiAoRkxBU0hfREVCVUcgPT0gMCkKKy8vIFdyaXRlIHBhZ2UgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfTU9ERV9SRUcgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19TRVRfUkVHICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1JFU0VUX1JFRyAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfUElOICAgICAgICAgICAgICAgICAgKDApCisKKy8vIFByb2dyYW0gcGFnZSB3YWl0IGxvb3AgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfTU9ERV9SRUcgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9TRVRfUkVHICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX1JFU0VUX1JFRyAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfUElOICAgICAgICAgICAgICAgKDApCisKKy8vIFByb2dyYW0gcGFnZSB3YWl0IGxvb3AgLSBwZW5kaW5nIGlycSBjaGVjayAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9JUlFfTU9ERV9SRUcgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX0lSUV9TRVRfUkVHICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfSVJRX1JFU0VUX1JFRyAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9JUlFfUElOICAgICAgICAgICAoMCkKKworLy8gU3VzcGVuZCBvcCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfTU9ERV9SRUcgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9TRVRfUkVHICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX1JFU0VUX1JFRyAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfUElOICAgICAgICAgICAgICAgICAgICAoMCkKKworLy8gRXJhc2Ugc2VjdG9yIGNtZCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1NFQ1RPUl9FUkFTRV9NT0RFX1JFRyAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfU0VDVE9SX0VSQVNFX1NFVF9SRUcgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19TRUNUT1JfRVJBU0VfUkVTRVRfUkVHICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1NFQ1RPUl9FUkFTRV9QSU4gICAgICAgICAgICAgICAoMCkKKworLy8gTm90aWZ5IHRhc2sgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19UQVNLX05PVElGWV9NT0RFX1JFRyAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1RBU0tfTk9USUZZX1NFVF9SRUcgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfVEFTS19OT1RJRllfUkVTRVRfUkVHICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19UQVNLX05PVElGWV9QSU4gICAgICAgICAgICAgICAgKDApCisKKy8vIFN1c3BlbmQgYWN0aW9uIChsb3cgbGV2ZWwpIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT05fTU9ERV9SRUcgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX0FDVElPTl9TRVRfUkVHICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfQUNUSU9OX1JFU0VUX1JFRyAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT05fUElOICAgICAgICAgICAgICgwKQorCisvLyBSZXN1bWUgb3AgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19SRVNVTUVfTU9ERV9SRUcgICAgICAgICAgICAgICAgKih2b2xhdGlsZSBpbnQgKikweDIwMDAwMDAwCisjZGVmaW5lIEZMQVNIREJHX1JFU1VNRV9TRVRfUkVHICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIGludCAqKTB4MjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hEQkdfUkVTVU1FX1JFU0VUX1JFRyAgICAgICAgICAgICAgICoodm9sYXRpbGUgaW50ICopMHgyMDAwMDAwMAorI2RlZmluZSBGTEFTSERCR19SRVNVTUVfUElOICAgICAgICAgICAgICAgICAgICAgKDApCisKKyNlbHNlCisKKy8vIFdyaXRlIHBhZ2UgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfTU9ERV9SRUcgICAgICAgICAgICAgR1BJTy0+UDMwX01PREVfUkVHCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19TRVRfUkVHICAgICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1JFU0VUX1JFRyAgICAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19QSU4gICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvLyBQcm9ncmFtIHBhZ2Ugd2FpdCBsb29wIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX01PREVfUkVHICAgICAgICAgIEdQSU8tPlAzMV9NT0RFX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfU0VUX1JFRyAgICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9SRVNFVF9SRUcgICAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfUElOICAgICAgICAgICAgICAgKDEgPDwgMSkKKworLy8gUHJvZ3JhbSBwYWdlIHdhaXQgbG9vcCAtIHBlbmRpbmcgaXJxIGNoZWNrIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUEFHRV9QUk9HX1dMX0lSUV9NT0RFX1JFRyAgICAgIEdQSU8tPlAzMl9NT0RFX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfSVJRX1NFVF9SRUcgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1BBR0VfUFJPR19XTF9JUlFfUkVTRVRfUkVHICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19QQUdFX1BST0dfV0xfSVJRX1BJTiAgICAgICAgICAgKDEgPDwgMikKKworLy8gU3VzcGVuZCBvcCAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfTU9ERV9SRUcgICAgICAgICAgICAgICBHUElPLT5QMzNfTU9ERV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9TRVRfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX1JFU0VUX1JFRyAgICAgICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9QSU4gICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisKKy8vIEVyYXNlIHNlY3RvciBjbWQgKGluaXRpYWwgY29uZmlndXJhdGlvbjogbG93KQorI2RlZmluZSBGTEFTSERCR19TRUNUT1JfRVJBU0VfTU9ERV9SRUcgICAgICAgICAgR1BJTy0+UDM0X01PREVfUkVHCisjZGVmaW5lIEZMQVNIREJHX1NFQ1RPUl9FUkFTRV9TRVRfUkVHICAgICAgICAgICBHUElPLT5QM19TRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfU0VDVE9SX0VSQVNFX1JFU0VUX1JFRyAgICAgICAgIEdQSU8tPlAzX1JFU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1NFQ1RPUl9FUkFTRV9QSU4gICAgICAgICAgICAgICAoMSA8PCA0KQorCisvLyBOb3RpZnkgdGFzayAoaW5pdGlhbCBjb25maWd1cmF0aW9uOiBsb3cpCisjZGVmaW5lIEZMQVNIREJHX1RBU0tfTk9USUZZX01PREVfUkVHICAgICAgICAgICBHUElPLT5QMzVfTU9ERV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfVEFTS19OT1RJRllfU0VUX1JFRyAgICAgICAgICAgIEdQSU8tPlAzX1NFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19UQVNLX05PVElGWV9SRVNFVF9SRUcgICAgICAgICAgR1BJTy0+UDNfUkVTRVRfREFUQV9SRUcKKyNkZWZpbmUgRkxBU0hEQkdfVEFTS19OT1RJRllfUElOICAgICAgICAgICAgICAgICgxIDw8IDUpCisKKy8vIFN1c3BlbmQgYWN0aW9uIChsb3cgbGV2ZWwpIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT05fTU9ERV9SRUcgICAgICAgIEdQSU8tPlAzNl9NT0RFX1JFRworI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX0FDVElPTl9TRVRfUkVHICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1NVU1BFTkRfQUNUSU9OX1JFU0VUX1JFRyAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19TVVNQRU5EX0FDVElPTl9QSU4gICAgICAgICAgICAgKDEgPDwgNikKKworLy8gUmVzdW1lIG9wIChpbml0aWFsIGNvbmZpZ3VyYXRpb246IGxvdykKKyNkZWZpbmUgRkxBU0hEQkdfUkVTVU1FX01PREVfUkVHICAgICAgICAgICAgICAgIEdQSU8tPlAzN19NT0RFX1JFRworI2RlZmluZSBGTEFTSERCR19SRVNVTUVfU0VUX1JFRyAgICAgICAgICAgICAgICAgR1BJTy0+UDNfU0VUX0RBVEFfUkVHCisjZGVmaW5lIEZMQVNIREJHX1JFU1VNRV9SRVNFVF9SRUcgICAgICAgICAgICAgICBHUElPLT5QM19SRVNFVF9EQVRBX1JFRworI2RlZmluZSBGTEFTSERCR19SRVNVTUVfUElOICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKworI2VuZGlmCisKKworLyogRW5hYmxlcyB0aGUgbG9nZ2luZyBvZiBzdGFjayAoUlcpIGhlYXAgbWVtb3JpZXMgdXNhZ2UuCisgKgorICogVGhlIGZlYXR1cmUgc2hhbGwgb25seSBiZSBlbmFibGVkIGluIGRldmVsb3BtZW50L2RlYnVnIG1vZGUKKyAqLworI2lmbmRlZiBkZ19jb25maWdMT0dfQkxFX1NUQUNLX01FTV9VU0FHRQorI2RlZmluZSBkZ19jb25maWdMT0dfQkxFX1NUQUNLX01FTV9VU0FHRSAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBFbmFibGVzIEJMRSBkaWFnbm9zdGljIHNpZ25hbHMuCisgKgorICogVGhlcmUgYXJlIDQgZGlhZ25vc3RpYyBzaWduYWwgY29uZmlndXJhdGlvbnMgdGhhdCB1c2VyIGNhbiBjaG9vc2UgZnJvbS4gVG8gZW5hYmxlIGEgc3BlY2lmaWMKKyAqIGNvbmZpZ3VyYXRpb24sIHNpbXBseSBkZWZpbmUgZGdfY29uZmlnQkxFX0RJQUdOX0NPTkZJRyB3aXRoIHRoZSBwZXJzcGVjdGl2ZSBjb25maWd1cmF0aW9uIElELgorICogQ29uZmlndXJhdGlvbiBJRCAwIGRpc2FibGVzIEJMRSBkaWFnbm9zdGljcy4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgU2lnbmFsICAgICB8IFBpbiAgIHwgQ29uZmlnIDEgICAgICAgICAgICAgIHwgQ29uZmlnIDIgICAgICB8IENvbmZpZyAzICAgICAgICAgICAgICB8IENvbmZpZyA0ICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IGJsZV9kaWFnMCAgfCBQMl8wICB8IC0gICAgICAgICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBibGVfZGlhZzEgIHwgUDJfMSAgfCAtICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgYmxlX2RpYWcyICB8IFAyXzIgIHwgLSAgICAgICAgICAgICAgICAgICAgIHwgLSAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IGJsZV9kaWFnMyAgfCBQMV8wICB8IC0gICAgICAgICAgICAgICAgICAgICB8IC0gICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBibGVfZGlhZzQgIHwgUDFfMSAgfCBibGVfc2xwX2lycSAgICAgICAgICAgfCByYWRjbnRsX3R4ZW4gIHwgcmFkY250bF90eGVuICAgICAgICAgIHwgcmFkY250bF90eGVuICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgYmxlX2RpYWc1ICB8IFAxXzIgIHwgYmxlX2NzY250X2lycSAgICAgICAgIHwgcmFkY250bF9yeGVuICB8IHJmX3R4X2VuICAgICAgICAgICAgICB8IHJhZGNudGxfcnhlbiAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IGJsZV9kaWFnNiAgfCBQMV8zICB8IGJsZV9maW5ldGd0aW1faXJxICAgICB8IHJmX3J4X2VuICAgICAgfCByZl90eF9kYXRhICAgICAgICAgICAgfCBibGVfcnhfaXJxICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBibGVfZGlhZzcgIHwgUDJfMyAgfCBibGVfZXZlbnRfaXJxICAgICAgICAgfCByZl9yeF9kYXRhICAgIHwgcmZfdHhfZGF0YV92YWxpZCAgICAgIHwgYmxlX2V2ZW50X2lycSB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBkZ19jb25maWdCTEVfRElBR05fQ09ORklHCisjZGVmaW5lIGRnX2NvbmZpZ0JMRV9ESUFHTl9DT05GSUcgICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2VuZGlmIC8qIEJTUF9ERUJVR19IXyAqLworCisvKioKK1x9CitcfQorXH0KKyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2RlZmF1bHRzLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2RlZmF1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4MjY4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZGVmYXVsdHMuaApAQCAtMCwwICsxLDI0NzUgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgQlNQX0NPTkZJRworICogXHsKKyAqIFxhZGR0b2dyb3VwIEJTUF9DT05GSUdfREVGQVVMVFMKKyAqCisgKiBcYnJpZWYgQm9hcmQgc3VwcG9ydCBwYWNrYWdlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMKKyAqCisgKiBUaGUgZm9sbG93aW5nIHRhZ3MgYXJlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHR5cGUgb2YgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbi4KKyAqCisgKiAtICoqXGJzcF9jb25maWdfb3B0aW9uX2J1aWxkKiogICAgICAgOiBUbyBiZSBjaGFuZ2VkIG9ubHkgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwcm9qZWN0ICgiRGVmaW5lZCBzeW1ib2xzIC1EIiBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3NvciBvcHRpb25zKS4KKyAqCisgKiAtICoqXGJzcF9jb25maWdfb3B0aW9uX2FwcCoqICAgICAgICAgOiBUbyBiZSBjaGFuZ2VkIG9ubHkgaW4gdGhlIGN1c3RvbV9jb25maWcqLmgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZmlsZXMuCisgKgorICogLSAqKlxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seSoqIDogVG8gYmUgY2hhbmdlZCBvbmx5IGJ5IGFuIGV4cGVydCB1c2VyLgorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgYnNwX2RlZmF1bHRzLmgKKyAqCisgKiBAYnJpZWYgQm9hcmQgU3VwcG9ydCBQYWNrYWdlLiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBmaWxlIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgQlNQX0RFRkFVTFRTX0hfCisjZGVmaW5lIEJTUF9ERUZBVUxUU19IXworCisKKworCisvKioKKyAqIFxhZGR0b2dyb3VwIFBPV0VSX1NFVFRJTkdTCisgKgorICogXGJyaWVmIFBvd2VyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqIFx7CisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvd2VyIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFRoaXMgaXMgYSBkZXByZWNhdGVkIGNvbmZpZ3VyYXRpb24gaGVuY2Ugbm90IHRvIGJlIGRlZmluZWQgYnkgYW4gYXBwbGljYXRpb24uCisgKiBUaGVyZSdzIGEgc2luZ2xlIHBvd2VyIGNvbmZpZ3VyYXRpb24gc2V0dXAuCisgKi8KKyNpZmRlZiBkZ19jb25maWdQT1dFUl9DT05GSUcKKyNlcnJvciAiQ29uZmlndXJhdGlvbiBvcHRpb24gZGdfY29uZmlnUE9XRVJfQ09ORklHIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBzeXN0ZW0gd2lsbCBnbyB0byBzbGVlcCBhbmQgbmV2ZXIgZXhpdCBhbGxvd2luZyBmb3IgdGhlIHNsZWVwIGN1cnJlbnQgdG8gYmUKKyAqICAgICAgICBtZWFzdXJlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVEVTVE1PREVfTUVBU1VSRV9TTEVFUF9DVVJSRU5UCisjZGVmaW5lIGRnX2NvbmZpZ1RFU1RNT0RFX01FQVNVUkVfU0xFRVBfQ1VSUkVOVCAoMCkKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBJTUFHRV9DT05GSUdVUkFUSU9OX1NFVFRJTkdTCisgKgorICogXGJyaWVmIEltYWdlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltYWdlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIFRoZSBjaGlwIHJldmlzaW9uIHRoYXQgd2UgY29tcGlsZSBmb3IuCisgKgorICogXG5vdGUgVGhlcmUgaXMgbm8gZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGZvciB0aGUgdGFyZ2V0IGNoaXAgcmV2aXNpb24uIFRoZSBhcHBsaWNhdGlvbiBtdXN0XG4KKyAqICAgICAgIG5laXRoZXIgZXhwbGljaXRseSBzZXQgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYsIG5vciBzZXRcbgorICogICAgICAgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gdG8gMS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYnVpbGQsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWCisjICAgICAgIGlmIGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OICE9IDEKKyMgICAgICAgICAgICAgICBlcnJvciAiWW91IG11c3QgZWl0aGVyIGRlZmluZSBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvciBzZXQgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gdG8gMSIKKyMgICAgICAgZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaGUgY2hpcCBzdGVwcGluZyB0aGF0IHdlIGNvbXBpbGUgZm9yLgorICoKKyAqIFxub3RlIFRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBmb3IgdGhlIHRhcmdldCBjaGlwIHJldmlzaW9uLiBUaGUgYXBwbGljYXRpb24gbXVzdFxuCisgKiAgICAgICBlaXRoZXIgZXhwbGljaXRseSBzZXQgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQIG5vciBzZXRcbgorICogICAgICAgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gdG8gMS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYnVpbGQsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUAorIyAgICAgICBpZiBkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiAhPSAxCisjICAgICAgICAgICAgICAgZXJyb3IgIllvdSBtdXN0IGVpdGhlciBkZWZpbmUgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIHNldCBkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiB0byAxIgorIyAgICAgICBlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFRoZSBtb3RoZXJib2FyZCByZXZpc2lvbiB3ZSBjb21waWxlIGZvci4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdCTEFDS19PUkNBX01CX1JFVgorI2RlZmluZSBkZ19jb25maWdCTEFDS19PUkNBX01CX1JFViAgICAgIEJMQUNLX09SQ0FfTUJfUkVWX0QKKyNlbmRpZgorCisvKgorICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgY29uZmlndXJhdGlvbiBoZW5jZSBub3QgdG8gYmUgZGVmaW5lZCBieSBhbiBhcHBsaWNhdGlvbi4KKyAqIFRoZSB2YWx1ZXMgb2YgdGhlIHRyaW0gcmVnaXN0ZXJzIGFyZSBub3QgYW55bW9yZSB0YWtlbiBmcm9tIHRoZSBGbGFzaC4KKyAqCisgKi8KKyNpZmRlZiAgZGdfY29uZmlnQ09ORklHX0hFQURFUl9JTl9GTEFTSAorI2Vycm9yICJDb25maWd1cmF0aW9uIG9wdGlvbiBkZ19jb25maWdDT05GSUdfSEVBREVSX0lOX0ZMQVNIIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENvbnRyb2xzIGhvdyB0aGUgaW1hZ2UgaXMgYnVpbHQuCisgKiAgLSBERVZFTE9QTUVOVF9NT0RFOiB2YXJpb3VzIGRlYnVnZ2luZyBvcHRpb25zIGFyZSBpbmNsdWRlZC4KKyAqICAtIFBST0RVQ1RJT05fTU9ERTogYWxsIGNvZGUgdXNlZCBmb3IgZGVidWdnaW5nIGlzIHJlbW92ZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0lNQUdFX1NFVFVQCisjZGVmaW5lIGRnX2NvbmZpZ0lNQUdFX1NFVFVQICAgICAgICAgICAgREVWRUxPUE1FTlRfTU9ERQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBkZWxheSBhdCB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBSZXNldF9IYW5kbGVyIGlzIHNraXBwZWQuCisgKgorICogXGRldGFpbHMgVGhpcyBkZWxheSBpcyBhZGRlZCBpbiBvcmRlciB0byBmYWNpbGl0YXRlIHByb3BlciBwcm9ncmFtbWluZyBvZiB0aGUgRmxhc2ggb3IgUVNQSVxuCisgKiAgICAgICAgbGF1bmNoZXIgaW52b2NhdGlvbi4gV2l0aG91dCBpdCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgaW1hZ2VcbgorICogICAgICAgIHdpbGwgbm90IHByb2NlZWQsIGFsdGVyaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSBmcm9tIHRoZSBvbmUgdGhhdCB0aGVcbgorICogICAgICAgIGJvb3Rsb2FkZXIgbGVhdmVzIGl0LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdTS0lQX01BR0lDX0NIRUNLX0FUX1NUQVJUCisjZGVmaW5lIGRnX2NvbmZpZ1NLSVBfTUFHSUNfQ0hFQ0tfQVRfU1RBUlQgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgY2hpcCB2ZXJzaW9uIChEQTE0NjgwLzEtMDEgb3IgREExNDY4Mi8zLUJBICkgd2lsbCBiZSBkZXRlY3RlZFxuCisgKiAgICAgICAgYXV0b21hdGljYWxseS4KKyAqIFxub3RlIEl0IGNhbm5vdCBiZSB1c2VkIGluIEJMRSBhcHBsaWNhdGlvbnMgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IGxpbmtlciBzY3JpcHRzXG4KKyAqICAgICAgIHRoYXQgYXJlIHVzZWQuCisgKiBcd2FybmluZyBOb3QgdG8gYmUgdXNlZCBieSBhIGdlbmVyaWMgcHJvamVjdCwgYXBwbGljYWJsZSBmb3IgdWFydGJvb3Qgb25seS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04KKyNkZWZpbmUgZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gICAgICAgICgwKQorI2Vsc2UKKyMgaWYgKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpCisgICAgICAgICN1bmRlZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFVgorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICAgICAgQkxBQ0tfT1JDQV9JQ19SRVZfQVVUTworICAgICAgICAjdW5kZWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQICAgICBCTEFDS19PUkNBX0lDX1NURVBfQVVUTworIyBlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBPVFAgY29weSB3aWxsIGJlIGVtdWxhdGVkIHdoZW4gaW4gREVWRUxPUE1FTlRfTU9ERS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnRU1VTEFURV9PVFBfQ09QWQorI2RlZmluZSBkZ19jb25maWdFTVVMQVRFX09UUF9DT1BZICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBRU1BJIGNvcHkgd2lsbCBiZSBlbXVsYXRlZCB3aGVuIGluIERFVkVMT1BNRU5UX01PREUgKE5vdCBBcHBsaWNhYmxlISkuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0VNVUxBVEVfUVNQSV9DT1BZCisjZGVmaW5lIGRnX2NvbmZpZ0VNVUxBVEVfUVNQSV9DT1BZICAgICAgKDApCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgTE9XX1BPV0VSX0NMT0NLX1NFVFRJTkdTCisgKgorICogXGJyaWVmIERveHlnZW4gZG9jdW1lbnRhdGlvbiBpcyBub3QgeWV0IGF2YWlsYWJsZSBmb3IgdGhpcyBtb2R1bGUuCisgKiAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmaWxlKHMpCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvdy1Qb3dlciBjbG9jayBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogTWF4aW11bSBzbGVlcCB0aW1lIHRoZSBzbGVlcCB0aW1lciBzdXBwb3J0cworICoKKyAqIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgY2FuIGJlIHplcm8uIGlmIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgaXMgbm90IHplcm8gdGhlbgorICogKCBkZ19jb25maWdUaW0xUHJlc2NhbGVyICsgMSApIE1VU1QgYmUgYSBwb3dlciBvZiAyISAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApCisjZGVmaW5lIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgICAgICAgICAgKDMpCisjZGVmaW5lIGRnX2NvbmZpZ01heFNsZWVwVGltZSAgICAgICAgICAgKDgpICAgICAvLyBzZWMKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkKKyNkZWZpbmUgZGdfY29uZmlnVGltMVByZXNjYWxlciAgICAgICAgICAoMykKKyNkZWZpbmUgZGdfY29uZmlnTWF4U2xlZXBUaW1lICAgICAgICAgICAoOCkgICAgIC8vIHNlYworI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyNkZWZpbmUgZGdfY29uZmlnVGltMVByZXNjYWxlciAgICAgICAgICAoMCkKKyNkZWZpbmUgZGdfY29uZmlnTWF4U2xlZXBUaW1lICAgICAgICAgICAoOCkgICAgIC8vIHNlYworI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX0FOWSkKKy8qIEFzc3VtaW5nIHRoYXQgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZXh0ZXJuYWwgZGlnaXRhbCBjbG9jayBpcyAzMjAwMEh6LAorICogICAgICBwZXJpb2Q6IDEvMzIwMDAgPSAzMS4yNXVzZWMKKyAqICAgICAgVGltZXIxIHdyYXAtYXJvdW5kIHRpbWU6IDY1NTM2ICogMzEuMjUgPSAyLjA0OHNlYworICogICAgICBXaXRoIGEgcHJlc2NhbGVyIGVxdWFsIHRvIDMsIHRoZSB3cmFwIGFyb3VuZCB0aW1lIGJlY29tZXM6ICgxICsgMykgKiAyLjA0OCA9IH44c2VjLgorICogSWYgdGhlIGNsb2NrIGZyZXF1ZW5jeSBpcyB0b28gc2xvdywgaS5lLiAxNjAwMEh6IHRoZW4KKyAqICAgICAgcGVyaW9kOiAxLzE2MDAwID0gNjIuNXVzZWMKKyAqICAgICAgVGltZXIxIHdyYXAtYXJvdW5kIHRpbWUgPSA2NTUzNiAqIDYyLjUgPSA0LjA5NnNlYworICogICAgICBhbmQgdGhlIHByZXNjYWxlciBzaG91bGQgYmUgMSBzbyB0aGF0OiAoMSArIDEpICogNC4wOTYgPSB+OHNlYy4KKyAqIElmIHRoZSBjbG9jayBmcmVxdWVuY3kgaXMgdG9vIGhpZ2gsIGkuZS4gMTI1MDAwSHogdGhlbgorICogICAgICBwZXJpb2Q6IDEvMTI1MDAwID0gOHVzZWMKKyAqICAgICAgVGltZXIxIHdyYXAtYXJvdW5kIHRpbWUgPSA2NTUzNiAqIDggPSAwLjUyNHNlYworICogICAgICBhbmQgdGhlIHByZXNjYWxlciBzaG91bGQgYmUgMyBzbyB0aGF0OiAoMSArIDMpICogMC41MjQgPSB+MnNlYy4KKyAqIFRoZSB2YWx1ZXMgTVVTVCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZSEKKyAqLworI2Vsc2UKKyNlcnJvciAiZGdfY29uZmlnVVNFX0xQX0NMSyBoYXMgaW52YWxpZCBzZXR0aW5nIgorI2VuZGlmCisjZWxzZSAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisjaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKSB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisjaWZkZWYgZGdfY29uZmlnVGltMVByZXNjYWxlcgorI3dhcm5pbmcgIlRpbWVyMSBwcmVzY2FsZXIgaXMgbm90IHN1cHBvcnRlZCBpbiBEQTE0NjgyLzMgY2hpcHMuIgorI3VuZGVmIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIKKyNlbmRpZiAvKiBkZ19jb25maWdUaW0xUHJlc2NhbGVyICovCisjZGVmaW5lIGRnX2NvbmZpZ01heFNsZWVwVGltZSAgICAgICAgICAgKDEzNDIxNykgICAgIC8vIHNlYworI2Vsc2UKKyNlcnJvciAiZGdfY29uZmlnVVNFX0xQX0NMSyBoYXMgaW52YWxpZCBzZXR0aW5nIgorI2VuZGlmCisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworCisjaWYgKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgJiYgKCgoZGdfY29uZmlnVGltMVByZXNjYWxlcisxKSAvIDIpICogMikgIT0gKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIrMSkpCisjZXJyb3IgImRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIrMSBpcyBub3QgMCBvciBhIHBvd2VyIG9mIDIhIgorI2VuZGlmCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjaWYgKGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgPT0gMCkKKyNkZWZpbmUgZGdfY29uZmlnVGltMVByZXNjYWxlckJpdFJhbmdlICAoMCkKKyNlbGlmIChkZ19jb25maWdUaW0xUHJlc2NhbGVyID09IDEpCisjZGVmaW5lIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXJCaXRSYW5nZSAgKDEpCisjZWxpZiAoZGdfY29uZmlnVGltMVByZXNjYWxlciA9PSAzKQorI2RlZmluZSBkZ19jb25maWdUaW0xUHJlc2NhbGVyQml0UmFuZ2UgICgyKQorI2Vsc2UKKyNlcnJvciAiZGdfY29uZmlnVGltMVByZXNjYWxlciBpcyBsYXJnZXIgdGhhbiAzISIKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBkZ19jb25maWdUaW0xUHJlc2NhbGVyQml0UmFuZ2UKKyN3YXJuaW5nICJUaW1lcjEgcHJlc2NhbGVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gREExNDY4Mi8zIGNoaXBzLiIKKyN1bmRlZiBkZ19jb25maWdUaW0xUHJlc2NhbGVyQml0UmFuZ2UKKyNlbmRpZgorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTV9DT05GSUdVUkFUSU9OX1NFVFRJTkdTCisgKgorICogXGJyaWVmIFN5c3RlbSBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKgorICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gY29uZmlndXJhdGlvbiBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBTb3VyY2Ugb2YgTG93IFBvd2VyIGNsb2NrIHVzZWQgKExQX0NMS19JU19BTkFMT0csIExQX0NMS19JU19ESUdJVEFMKQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0xQX0NMS19TT1VSQ0UKKyNkZWZpbmUgZGdfY29uZmlnTFBfQ0xLX1NPVVJDRSAgICAgICAgICBMUF9DTEtfSVNfQU5BTE9HCisjZW5kaWYKKworIyBpZiAoKGRnX2NvbmZpZ0xQX0NMS19TT1VSQ0UgPT0gTFBfQ0xLX0lTX0FOQUxPRykgJiYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX0FOWSkpCisjIGVycm9yICJXaGVuIHRoZSBMUCBzb3VyY2UgaXMgYW5hbG9nIChYVEFMKSwgdGhlIG9wdGlvbiBMUF9DTEtfQU5ZIGlzIGludmFsaWQhIgorIyBlbmRpZgorCisjIGlmICgoZGdfY29uZmlnTFBfQ0xLX1NPVVJDRSA9PSBMUF9DTEtfSVNfRElHSVRBTCkgJiYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkpCisjIGVycm9yICJXaGVuIHRoZSBMUCBzb3VyY2UgaXMgZGlnaXRhbCAoRXh0ZXJuYWwpLCB0aGUgb3B0aW9uIExQX0NMS19SQ1ggaXMgaW52YWxpZCEiCisjIGVuZGlmCisKKy8qKgorICogXGJyaWVmIExvdyBQb3dlciBjbG9jayB1c2VkIChMUF9DTEtfMzIwMDAsIExQX0NMS18zMjc2OCwgTFBfQ0xLX1JDWCwgTFBfQ0xLX0FOWSkKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworIyBpZm5kZWYgZGdfY29uZmlnVVNFX0xQX0NMSworIyBkZWZpbmUgZGdfY29uZmlnVVNFX0xQX0NMSyAgICAgICAgICAgIExQX0NMS19SQ1gKKyMgZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ29kZSBleGVjdXRpb24gbW9kZQorICoKKyAqICAtIE1PREVfSVNfUkFNCisgKiAgLSBNT0RFX0lTX01JUlJPUkVECisgKiAgLSBNT0RFX0lTX0NBQ0hFRAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworIyBpZm5kZWYgZGdfY29uZmlnRVhFQ19NT0RFCisjIGRlZmluZSBkZ19jb25maWdFWEVDX01PREUgICAgICAgICAgICAgTU9ERV9JU19SQU0KKyMgZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ29kZSBsb2NhdGlvbgorICoKKyAqIC0gTk9OX1ZPTEFUSUxFX0lTX09UUAorICogLSBOT05fVk9MQVRJTEVfSVNfRkxBU0gKKyAqIC0gTk9OX1ZPTEFUSUxFX0lTX05PTkUgKFJBTSkKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworIyBpZm5kZWYgZGdfY29uZmlnQ09ERV9MT0NBVElPTgorIyBkZWZpbmUgZGdfY29uZmlnQ09ERV9MT0NBVElPTiAgICAgICAgIE5PTl9WT0xBVElMRV9JU19OT05FCisjIGVuZGlmCisKKy8qKgorICogXGJyaWVmIEZyZXF1ZW5jeSBvZiB0aGUgY3J5c3RhbCBjb25uZWN0ZWQgdG8gdGhlIFhUQUwgT3NjaWxsYXRvcjogMTZNSHogb3IgMzJNSHouCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0VYVF9DUllTVEFMX0ZSRVEKKyMgZGVmaW5lIGRnX2NvbmZpZ0VYVF9DUllTVEFMX0ZSRVEgICAgICBFWFRfQ1JZU1RBTF9JU18xNk0KKyMgZW5kaWYKKworLyoqCisgKiBcYnJpZWYgRXh0ZXJuYWwgTFAgdHlwZQorICoKKyAqIC0gMDogYSBjcnlzdGFsIGlzIGNvbm5lY3RlZCB0byBYVEFMMzJLcCBhbmQgWFRBTEszMkttCisgKiAtIDE6IGEgZGlnaXRhbCBjbG9jayBpcyBwcm92aWRlZC4KKyAqCisgKiBcbm90ZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSBkaWdpdGFsIGNsb2NrIG11c3QgYmUgMzJLSHogb3IgMzIuNzY4S0h6IGFuZCBiZSBhbHdheXMgcnVubmluZy4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0VYVF9MUF9JU19ESUdJVEFMCisjIGRlZmluZSBkZ19jb25maWdFWFRfTFBfSVNfRElHSVRBTCAgICAgKDApCisjIGVuZGlmCisKKy8qCisgKiBUaGlzIGlzIGEgZGVwcmVjYXRlZCBjb25maWd1cmF0aW9uIGhlbmNlIG5vdCB0byBiZSBkZWZpbmVkIGJ5IGFuIGFwcGxpY2F0aW9uLgorICogRm9yY2luZyB0aGUgc3lzdGVtIHRvIGVudGVyIGludG8gY2xvY2tsZXNzIHNsZWVwIGR1cmluZyBkZWVwIHNsZWVwIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICovCisjaWZkZWYgZGdfY29uZmlnRk9SQ0VfREVFUF9TTEVFUAorI2Vycm9yICJDb25maWd1cmF0aW9uIG9wdGlvbiBkZ19jb25maWdGT1JDRV9ERUVQX1NMRUVQIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFRpbWVyIDEgdXNhZ2UKKyAqCisgKiBXaGVuIHNldCB0byAwLCBUaW1lcjEgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBPUyB0aWNrLgorICoKKyAqIFxub3RlIEEgc2V0dGluZyB0byAxIGlzIG1lYW5pbmdmdWwgb25seSBmb3Igbm9uLVJUT1MgcHJvamVjdHMuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VTRVJfQ0FOX1VTRV9USU1FUjEKKyNkZWZpbmUgZGdfY29uZmlnVVNFUl9DQU5fVVNFX1RJTUVSMSAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaW1lIG5lZWRlZCBmb3IgdGhlIHNldHRsaW5nIG9mIHRoZSBMUCBjbG9jaywgaW4gbXNlYy4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnWFRBTDMyS19TRVRUTEVfVElNRQorI2RlZmluZSBkZ19jb25maWdYVEFMMzJLX1NFVFRMRV9USU1FICAgICg4MDAwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFNsZWVwIGRlbGF5IHRpbWUKKyAqCisgKiBBdCBzdGFydHVwLCB0aGUgc3lzdGVtIHdpbGwgc3RheSBhY3RpdmUgZm9yIGF0IGxlYXN0IHRoaXMgdGltZSBwZXJpb2QgYmVmb3JlIGl0IGlzIGFsbG93ZWQgdG8gZ28KKyAqIHRvIHNsZWVwLCBpbiBtc2VjLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmIChkZ19jb25maWdYVEFMMzJLX1NFVFRMRV9USU1FID4gODAwMCkKKyNkZWZpbmUgZGdfY29uZmlnSU5JVElBTF9TTEVFUF9ERUxBWV9USU1FICAgICAgIChkZ19jb25maWdYVEFMMzJLX1NFVFRMRV9USU1FKQorI2Vsc2UKKyNkZWZpbmUgZGdfY29uZmlnSU5JVElBTF9TTEVFUF9ERUxBWV9USU1FICAgICAgICg4MDAwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFhUQUwxNiBzZXR0bGUgdGltZQorICoKKyAqIFRpbWUgbmVlZGVkIGZvciB0aGUgc2V0dGxpbmcgb2YgdGhlIFhUQUwxNiwgaW4gTFAgY3ljbGVzLiBUbyB0aGlzIHZhbHVlLCA1IExQIGN5Y2xlcywgdGhhdCBhcmUKKyAqIG5lZWRlZCB0byBzdGFydCB0aGUgY29yZSBjbG9jaywgYXJlIGFkZGVkIHNpbmNlIHRoZSBTVyBwb3dlcnMgdGhlIDFWNCByYWlsIGFmdGVyIHRoZSBleGVjdXRpb24KKyAqIGlzIHJlc3VtZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1hUQUwxNl9TRVRUTEVfVElNRQorI2lmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnWFRBTDE2X1NFVFRMRV9USU1FICAgICAoODUgKyA1KQorI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdYVEFMMTZfU0VUVExFX1RJTUUgICAgIGNtX3JjeF91c18yX2xwY3ljbGVzKCh1aW50MzJfdCkoKDg1ICsgNSkgKiAzMC41KSkKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKy8vIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuCisjZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBYVEFMMTYgc2V0dGxlIHRpbWUgUkMzMksKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNkZWZpbmUgZGdfY29uZmlnWFRBTDE2X1NFVFRMRV9USU1FX1JDMzJLICAgICAgICgxMTApCisKKy8qKgorICogXGJyaWVmIFJDMTYgd2FrZXVwIHRpbWUKKyAqCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHRpbWUsIGluIExQIGN5Y2xlcywgbmVlZGVkIHRvIHdha2UtdXAgdGhlIGNoaXAgYW5kIHN0YXJ0IGV4ZWN1dGluZyBjb2RlCisgKiB1c2luZyBSQzE2LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2RlZmluZSBkZ19jb25maWdXQUtFVVBfUkMxNl9USU1FICAgICAgICgxNikKKworLyoqCisgKiBcYnJpZWYgWFRBTDE2IHdha2V1cCB0aW1lCisgKgorICogV2FrZSB1cCBOIExQIGN5Y2xlcyBiZWZvcmUgInRpbWUgMCIgdG8gaGF2ZSBYVEFMMTYgcmVhZHkgd2hlbiBuZWVkZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjZGVmaW5lIGRnX2NvbmZpZ1dBS0VVUF9YVEFMMTZfVElNRSAgICAgKGRnX2NvbmZpZ1hUQUwxNl9TRVRUTEVfVElNRSArIGRnX2NvbmZpZ1dBS0VVUF9SQzE2X1RJTUUpCisKKy8qKgorICogXGJyaWVmIE9TIHRpY2sgcmVzdG9yZSB0aW1lCisgKgorICogVGhpcyBpcyB0aGUgdGltZSwgaW4gTFAgY3ljbGVzLCByZXF1aXJlZCBmcm9tIHRoZSBPUyB0byByZXN0b3JlIHRoZSB0aWNrIHRpbWVyLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRQorI2lmZGVmIFJFTEVBU0VfQlVJTEQKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgI2lmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OICE9IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoZGdfY29uZmlnVGltMVByZXNjYWxlciA/IDIgKyBkZ19jb25maWdUaW0xUHJlc2NhbGVyIDogMykKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IFBST0RVQ1RJT05fTU9ERSkKKyAgICAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgIChkZ19jb25maWdUaW0xUHJlc2NhbGVyID8gMyArIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXIgOiA0KQorICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoZGdfY29uZmlnVGltMVByZXNjYWxlciA/IDMgKyBkZ19jb25maWdUaW0xUHJlc2NhbGVyIDogNCkKKyAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgI2VuZGlmCisjZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorICAgICAgICAjaWYgKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gIT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgIGNtX3JjeF91c18yX2xwY3ljbGVzKDEyMCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICBjbV9yY3hfdXNfMl9scGN5Y2xlcygxMjApCisgICAgICAgICNlbmRpZgorI2Vsc2UgLyogTFBfQ0xLX0FOWSAqLworICAgICAgICAvKiBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLgorICAgICAgICAgKiBGb3IgUVNQSSBjYWNoZWQsIHRoZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSBtdXN0IGJlIH4xMjB1c2VjIHdoZW4gbm8gcHJlc2NhbGluZyBpcworICAgICAgICAgKiB1c2VkIGFuZCB+MTgwdXNlYyB3aGVuIHByZXNjYWxpbmcgaXMgdXNlZC4KKyAgICAgICAgICovCisjZW5kaWYKKyNlbHNlIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKyNpZiAoKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKSB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpKQorICAgICAgICAjaWYgKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gIT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgICgzKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gUFJPRFVDVElPTl9NT0RFKQorICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgKDQpCisgICAgICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgICg0KQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisgICAgICAgICNpZiAoZGdfY29uZmlnQ09ERV9MT0NBVElPTiAhPSBOT05fVk9MQVRJTEVfSVNfRkxBU0gpCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdPU19USUNLX1JFU1RPUkVfVElNRSAgY21fcmN4X3VzXzJfbHBjeWNsZXMoMTIwKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgIGNtX3JjeF91c18yX2xwY3ljbGVzKDEyMCkKKyAgICAgICAgI2VuZGlmCisjZWxzZSAvKiBMUF9DTEtfQU5ZICovCisgICAgICAgIC8qIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuCisgICAgICAgICAqIEZvciBRU1BJIGNhY2hlZCwgdGhlIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FIG11c3QgYmUgfjEyMHVzZWMgd2hlbiBubyBwcmVzY2FsaW5nIGlzCisgICAgICAgICAqIHVzZWQgYW5kIH4xODB1c2VjIHdoZW4gcHJlc2NhbGluZyBpcyB1c2VkLgorICAgICAgICAgKi8KKyNlbmRpZgorI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKyNlbHNlIC8vIFJFTEVBU0VfQlVJTEQKKyNpZiAoKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKSB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpKQorICAgICAgICAjaWYgKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gIT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgICg0MCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICAoNzIpCisgICAgICAgICNlbmRpZgorI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgI2lmIChkZ19jb25maWdDT0RFX0xPQ0FUSU9OICE9IE5PTl9WT0xBVElMRV9JU19GTEFTSCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FICBjbV9yY3hfdXNfMl9scGN5Y2xlcygxMjAwKQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgIGNtX3JjeF91c18yX2xwY3ljbGVzKDI0MDApCisgICAgICAgICNlbmRpZgorI2Vsc2UgLyogTFBfQ0xLX0FOWSAqLworICAgICAgICAvKiBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLgorICAgICAgICAgKiBVc3VhbGx5LCB0aGUgZGdfY29uZmlnT1NfVElDS19SRVNUT1JFX1RJTUUgaXMgc2V0IHRvIGEgbGFyZ2UgdmFsdWUgKGkuZS4gMS4yIC0gMi40bXNlYykKKyAgICAgICAgICogaW4gb3JkZXIgdG8gYWxsb3cgZm9yIGEgbW9yZSAicmVsYXhlZCIgd2FraW5nIHVwIG9mIHRoZSBzeXN0ZW0uCisgICAgICAgICAqLworI2VuZGlmCisjZW5kaWYgLy8gUkVMRUFTRV9CVUlMRAorI2VuZGlmIC8vIGRnX2NvbmZpZ09TX1RJQ0tfUkVTVE9SRV9USU1FCisKKy8qKgorICogXGJyaWVmIEltYWdlIGNvcHkgdGltZQorICoKKyAqIFRoZSBudW1iZXIgb2YgTFAgY3ljbGVzIG5lZWRlZCBmb3IgdGhlIGFwcGxpY2F0aW9uJ3MgaW1hZ2UgZGF0YSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgT1RQCisgKiAob3IgUVNQSSkgdG8gdGhlIFJBTSBpbiBtaXJyb3JlZCBtb2RlLgorICoKKyAqIFx3YXJuaW5nIE1VU1QgQkUgU01BTExFUiBUSEFOICNkZ19jb25maWdNSU5fU0xFRVBfVElNRSAhISEKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZiAoZGdfY29uZmlnRVhFQ19NT0RFICE9IE1PREVfSVNfTUlSUk9SRUQpCisgICAgICAgICN1bmRlZiBkZ19jb25maWdJTUFHRV9DT1BZX1RJTUUKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdJTUFHRV9DT1BZX1RJTUUgICAgICAgICgwKQorI2VsaWYgIWRlZmluZWQoZGdfY29uZmlnSU1BR0VfQ09QWV9USU1FKQorICAgICAgICAjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0lNQUdFX0NPUFlfVElNRSAgICAgICAgKDY0KQorICAgICAgICAjZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnSU1BR0VfQ09QWV9USU1FICAgICAgICBjbV9yY3hfdXNfMl9scGN5Y2xlcygxOTUwKQorICAgICAgICAjZWxzZSAvKiBMUF9DTEtfQU5ZICovCisgICAgICAgICAgICAgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4KKyAgICAgICAgI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgUmV0ZW50aW9uIG1lbW9yeSBjb25maWd1cmF0aW9uLgorICoKKyAqIDUgYml0cyBmaWVsZDsgZWFjaCBiaXQgY29udHJvbHMgd2hldGhlciB0aGUgcmVsZXZhbnQgbWVtb3J5IGJsb2NrIHdpbGwgYmUgcmV0YWluZWQgKDEpIG9yIG5vdCAoMCkuCisgKiAtICBiaXQgMCA6IFNZU1JBTTEKKyAqIC0gIGJpdCAxIDogU1lTUkFNMgorICogLSAgYml0IDIgOiBTWVNSQU0zCisgKiAtICBiaXQgMyA6IFNZU1JBTTQKKyAqIC0gIGJpdCA0IDogU1lTUkFNNQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnTUVNX1JFVEVOVElPTl9NT0RFCisjZGVmaW5lIGRnX2NvbmZpZ01FTV9SRVRFTlRJT05fTU9ERSAgICAgKDB4MUYpCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgYSBkZXByZWNhdGVkIGNvbmZpZ3VyYXRpb24gaGVuY2Ugbm90IHRvIGJlIGRlZmluZWQgYnkgYW4gYXBwbGljYXRpb24uCisgKi8KKyNpZmRlZiBkZ19jb25maWdNRU1fUkVURU5USU9OX01PREVfUFJFU0VSVkVfSU1BR0UKKyNlcnJvciAiZGdfY29uZmlnTUVNX1JFVEVOVElPTl9NT0RFX1BSRVNFUlZFX0lNQUdFIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIE1lbW9yeSBTaHVmZmxpbmcgbW9kZS4KKyAqCisgKiBTZWUgU1lTX0NUUkxfUkVHOlJFTUFQX1JBTVMgZmllbGQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1NIVUZGTElOR19NT0RFCisjZGVmaW5lIGRnX2NvbmZpZ1NIVUZGTElOR19NT0RFICAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgRUNDIG1pY3JvY29kZSBSQU0gcmV0YWlubWVudAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdFQ0NfVUNPREVfUkFNX1JFVEFJTkVECisjZGVmaW5lIGRnX2NvbmZpZ0VDQ19VQ09ERV9SQU1fUkVUQUlORUQgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2F0Y2hkb2cgU2VydmljZSAKKyAqCisgKiAtIDE6IGVuYWJsZWQKKyAqIC0gMDogZGlzYWJsZWQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfV0RPRworI2RlZmluZSBkZ19jb25maWdVU0VfV0RPRyAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEJyb3duLW91dCBEZXRlY3Rpb24KKyAqCisgKiAtIDE6IHVzZWQKKyAqIC0gMDogbm90IHVzZWQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfQk9ECisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9CT0QgICAgICAgICAgICAgICAgKDEpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgUmVzZXQgdmFsdWUgZm9yIFdhdGNoZG9nLgorICoKKyAqIFNlZSBXQVRDSERPR19SRUc6V0RPR19WQUwgZmllbGQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1dET0dfUkVTRVRfVkFMVUUKKyNkZWZpbmUgZGdfY29uZmlnV0RPR19SRVNFVF9WQUxVRSAgICAgICAoMHhGRikKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBNYXhpbXVtIHdhdGNoZG9nIHRhc2tzCisgKgorICogTWF4aW11bSBudW1iZXIgb2YgdGFza3MgdGhhdCB0aGUgV2F0Y2hkb2cgU2VydmljZSBjYW4gbW9uaXRvci4gSXQgY2FuIGJlIGxhcmdlciAodXAgdG8gMzIpIHRoYW4KKyAqIG5lZWRlZCwgYXQgdGhlIGV4cGVuc2Ugb2YgaW5jcmVhc2VkIFJldGVudGlvbiBNZW1vcnkgcmVxdWlyZW1lbnQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1dET0dfTUFYX1RBU0tTX0NOVAorI2RlZmluZSBkZ19jb25maWdXRE9HX01BWF9UQVNLU19DTlQgICAgICg0KQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdhdGNoZG9nIG5vdGlmeSBpbnRlcnZhbAorICoKKyAqIEludGVydmFsIChpbiBtaWxpc2Vjb25kcykgZm9yIGNvbW1vbiB0aW1lciB3aGljaCBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIHRhc2tzIGluIG9yZGVyIHRvIG5vdGlmeQorICogd2F0Y2hkb2cuIENhbiBiZSBzZXQgdG8gMCBpbiBvcmRlciB0byBkaXNhYmxlIHRpbWVyIGNvZGUgZW50aXJlbHkuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1dET0dfTk9USUZZX1RSSUdHRVJfVE1PCisjZGVmaW5lIGRnX2NvbmZpZ1dET0dfTk9USUZZX1RSSUdHRVJfVE1PICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBBYm9ydCBhIGNsb2NrIG1vZGlmaWNhdGlvbiBpZiBpdCB3aWxsIGNhdXNlIGFuIGVycm9yIHRvIHRoZSBTeXNUaWNrIGNvdW50ZXIKKyAqCisgKiAtIDE6IG9uCisgKiAtIDA6IG9mZgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdBQk9SVF9JRl9TWVNUSUNLX0NMS19FUlIKKyNkZWZpbmUgZGdfY29uZmlnQUJPUlRfSUZfU1lTVElDS19DTEtfRVJSICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIE1heGltdW0gYWRhcHRlcnMgY291bnQKKyAqCisgKiBTaG91bGQgYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBBZGFwdGVycyB1c2VkIGJ5IHRoZSBBcHBsaWNhdGlvbi4gSXQgY2FuIGJlIGxhcmdlciAodXAgdG8gMjU0KQorICogdGhhbiBuZWVkZWQsIGF0IHRoZSBleHBlbnNlIG9mIGluY3JlYXNlZCBSZXRlbnRpb24gTWVtb3J5IHJlcXVpcmVtZW50cy4gSXQgY2Fubm90IGJlIDAuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1BNX01BWF9BREFQVEVSU19DTlQKKyNkZWZpbmUgZGdfY29uZmlnUE1fTUFYX0FEQVBURVJTX0NOVCAgICAoMTYpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgTWF4aW11bSBzbGVlcCBkZWZlciB0aW1lCisgKgorICogVGhlIG1heGltdW0gdGltZSBzbGVlcCBjYW4gYmUgZGVmZXJyZWQgdmlhIGEgY2FsbCB0byBwbV9kZWZlcl9zbGVlcF9mb3IoKS4gSXQgaXMgaW4gY2xvY2sgY3ljbGVzCisgKiBpbiB0aGUgY2FzZSBvZiB0aGUgWFRBTDMySyBhbmQgaW4gdXNlYyBpbiB0aGUgY2FzZSBvZiBSQ1guCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1BNX01BWF9BREFQVEVSX0RFRkVSX1RJTUUKKyNpZiAoKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyMDAwKSB8fCAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzI3NjgpKQorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BNX01BWF9BREFQVEVSX0RFRkVSX1RJTUUgICAgICAoMTI4KQorI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdQTV9NQVhfQURBUFRFUl9ERUZFUl9USU1FICAgICAgY21fcmN4X3VzXzJfbHBjeWNsZXMoNDAwMCkKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4gSXQgc2hvdWxkIGJlID4gMy41bXNlYy4KKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIE1pbmltdW0gc2xlZXAgdGltZQorICoKKyAqICBObyBwb3dlciBzYXZpbmdzIGlmIHdlIGVudGVyIHNsZWVwIHdoZW4gdGhlIHNsZWVwIHRpbWUgaXMgbGVzcyB0aGFuIE4gTFAgY3ljbGVzCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ01JTl9TTEVFUF9USU1FCisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdNSU5fU0xFRVBfVElNRSAoMzMqMykgIC8vIDMgbXNlYworI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdNSU5fU0xFRVBfVElNRSBjbV9yY3hfdXNfMl9scGN5Y2xlc19sb3dfYWNjKDMwMDApICAvLyAzIG1zZWMKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4gSXQgc2hvdWxkIGJlIH4zbXNlYyBidXQgdGhpcyBtYXkgdmFyeS4KKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFJlY2hhcmdlIHBlcmlvZAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdTRVRfUkVDSEFSR0VfUEVSSU9ECisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyNkZWZpbmUgZGdfY29uZmlnU0VUX1JFQ0hBUkdFX1BFUklPRCAgICAoMzAwMCkgIC8qKiBudW1iZXIgb2YgTG93IFBvd2VyIGNsb2NrIGN5Y2xlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nIGFuZCAvIG9yIHJlZnJlc2hpbmcuICovCisjZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorI2RlZmluZSBkZ19jb25maWdTRVRfUkVDSEFSR0VfUEVSSU9EICAgICg5MDAwMCkgLyoqIG51bWJlciBvZiBtc2VjIGZvciBzYW1wbGluZyBhbmQgLyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaGluZyAqLworI2Vsc2UgLyogTFBfQ0xLX0FOWSAqLworICAgICAgICAvLyBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLgorI2VuZGlmCisjZW5kaWYgLyogZGdfY29uZmlnU0VUX1JFQ0hBUkdFX1BFUklPRCAqLworCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgRENEQyBpcyB1c2VkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfRENEQworI2RlZmluZSBkZ19jb25maWdVU0VfRENEQyAgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIGEgZGVwcmVjYXRlZCBjb25maWd1cmF0aW9uIGhlbmNlIG5vdCB0byBiZSBkZWZpbmVkIGJ5IGFuIGFwcGxpY2F0aW9uLgorICogVGhlIHNlbWFudGljcyBvZiBkZ19jb25maWdVU0VfQURDIHJlcGxhY2VkIGJ5IGRnX2NvbmZpZ1VTRV9IV19HUEFEQy4KKyAqLworI2lmZGVmIGRnX2NvbmZpZ1VTRV9BREMKKyNlcnJvciAiQ29uZmlndXJhdGlvbiBvcHRpb24gZGdfY29uZmlnVVNFX0FEQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2UgZGdfY29uZmlnVVNFX0hXX0dQQURDIGluc3RlYWQuIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEFwcGx5IEFEQyBHYWluIEVycm9yIGNvcnJlY3Rpb24uCisgKiAtIDE6IHVzZWQKKyAqIC0gMDogbm90IHVzZWQKKyAqCisgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzOiAxLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfQURDX0dBSU5fRVJST1JfQ09SUkVDVElPTgorI2RlZmluZSBkZ19jb25maWdVU0VfQURDX0dBSU5fRVJST1JfQ09SUkVDVElPTiAgKDEpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIFVTQiBpbnRlcmZhY2UgaXMgdXNlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfVVNCCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9VU0IgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYWRkdG9ncm91cCBDSEFSR0VSX1NFVFRJTkdTCisgKgorICogXGJyaWVmIENoYXJnZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICogXHsKKyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hhcmdlciBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxicmllZiBCYXR0ZXJ5IHR5cGUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkFUVEVSWV9UWVBFCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfVFlQRSAgICAgICAgICAgKEJBVFRFUllfVFlQRV9OT19CQVRURVJZKQorLyoqCisgKiBcYnJpZWYgQmF0dGVyeSBjaGFyZ2Ugdm9sdGFnZQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0NIQVJHRV9WT0xUQUdFICgwKQorLyoqCisgKiBcYnJpZWYgQmF0dGVyeSBjaGFyZ2UgY3VycmVudAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2RlZmluZSBkZ19jb25maWdCQVRURVJZX0NIQVJHRV9DVVJSRU5UICgwKQorLyoqCisgKiBcYnJpZWYgQmF0dGVyeSBjaGFyZ2UgTlRDCisgKgorICogMDogTlRDIGlzIGVuYWJsZWQsIDE6IE5UQyBpcyBkaXNhYmxlZAorICoKKyAqIE5vdGUgdGhhdCB3aGVuIE5UQyBpcyBlbmFibGVkLCB0aGUgUDE0IGFuZCBQMTYgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGNoYXJnZXIgYW5kIGNhbm5vdCBiZSB1c2VkCisgKiBieSB0aGUgYXBwbGljYXRpb24uIFAxNCBpcyBzZXQgaGlnaCAoYXQgMy4zVikgd2hlbiB0aGUgY2hhcmdpbmcgc3RhcnRzIHdoaWxlIFAxNiBpcyBhbiBpbnB1dC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfTlRDICAgICAoMCkKKworI2lmIChkZ19jb25maWdCQVRURVJZX0NIQVJHRV9OVEMgPiAxKQorI2Vycm9yICJkZ19jb25maWdCQVRURVJZX0NIQVJHRV9OVEMgbXVzdCBiZSBlaXRoZXIgMCBvciAxLiIKKyNlbmRpZgorLyoqCisgKiBcYnJpZWYgQmF0dGVyeSBwcmUtY2hhcmdlIGN1cnJlbnQKKyAqCisgKiBOb3JtYWwgY2hhcmdpbmcgOgorICogLSAgIDAgLSAxNSA6IGFzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0hBUkdFUl9DVFJMMV9SRUdbQ0hBUkdFX0NVUl0gZmllbGQuCisgKgorICogRXh0IGNoYXJnaW5nIDogImVuZC1vZi1jaGFyZ2UiIGlzIG5vdCBmdW5jdGlvbmFsIHdoZW4gdGhpcyBtb2RlIGlzIHVzZWQuCisgKiAtICAxNiA6IFJlc2VydmVkCisgKiAtICAxNyA6IFJlc2VydmVkCisgKiAtICAxOCA6IDFtQQorICogLSAgMTkgOiAxLjVtQQorICogLSAgMjAgOiAyLjFtQQorICogLSAgMjEgOiAzLjJtQQorICogLSAgMjIgOiA0LjNtQQorICogLSAgMjMgOiBSZXNlcnZlZAorICogLSAgMjQgOiA2LjZtQQorICogLSAgMjUgOiA3LjhtQQorICogLSAgMjYgOiBSZXNlcnZlZAorICogLSAgMjcgOiAxMS4zbUEKKyAqIC0gIDI4IDogMTMuM21BCisgKiAtICAyOSA6IDE1LjNtQQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2RlZmluZSBkZ19jb25maWdCQVRURVJZX1BSRUNIQVJHRV9DVVJSRU5UICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIFVTQiBDaGFyZ2VyIGlzIHVzZWQgdG8gY2hhcmdlIHRoZSBiYXR0ZXJ5LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9VU0JfQ0hBUkdFUgorI2RlZmluZSBkZ19jb25maWdVU0VfVVNCX0NIQVJHRVIgICAgICAgICgwKQorI2Vsc2UKKyNpZiAoZGdfY29uZmlnVVNFX1VTQl9DSEFSR0VSID09IDEpCisgICAgICAgICN1bmRlZiBkZ19jb25maWdVU0VfSFdfR1BBREMKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdVU0VfSFdfR1BBREMgICAgICAgICAgICgxKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnVVNFX1VTQgorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1VTRV9VU0IgICAgICAgICAgICAgICAgKDEpCisgICAgICAgICN1bmRlZiBkZ19jb25maWdHUEFEQ19BREFQVEVSCisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnR1BBRENfQURBUFRFUiAgICAgICAgICAoMSkKKyAgICAgICAgI3VuZGVmIGRnX2NvbmZpZ0JBVFRFUllfQURBUFRFUgorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfQURBUFRFUiAgICAgICAgKDEpCisjZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgVVNCIENoYXJnZXIgd2lsbCB0cnkgdG8gZW51bWVyYXRlLCBpZiBwb3NzaWJsZS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX1VTQl9FTlVNRVJBVElPTgorI2RlZmluZSBkZ19jb25maWdVU0VfVVNCX0VOVU1FUkFUSU9OICAgICgwKQorI2Vsc2UKKyNpZiAoZGdfY29uZmlnVVNFX1VTQl9FTlVNRVJBVElPTiA9PSAxKQorICAgICAgICAjdW5kZWYgZGdfY29uZmlnVVNFX1VTQgorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1VTRV9VU0IgICAgICAgICgxKQorI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ29udHJvbHMgaG93IHRoZSBzeXN0ZW0gd2lsbCBiZWhhdmUgd2hlbiB0aGUgVVNCIGkvZiBpcyBzdXNwZW5kZWQuCisgKgorICogXGRldGFpbHMgV2hlbiB0aGUgVVNCIE5vZGUgaXMgc3VzcGVuZGVkIGJ5IHRoZSBVU0IgSG9zdCwgdGhlIGFwcGxpY2F0aW9uIG1heSBoYXZlIHRvIGFjdCBpbgorICogICAgICAgICAgb3JkZXIgdG8gY29tcGx5IHdpdGggdGhlIFVTQiBzcGVjaWZpY2F0aW9uIChjb25zdW1lIGxlc3MgdGhhbiAyLjVtQSkuIFRoZSBhdmFpbGFibGUKKyAqICAgICAgICAgIG9wdGlvbnMgYXJlOgorICogICAgICAgICAgMDogZG8gbm90aGluZworICogICAgICAgICAgMTogcGF1c2Ugc3lzdGVtIGNsb2NrID0+IHRoZSBMUCBjbG9jayBpcyBzdG9wcGVkIGFuZCBvbmx5IFZCVVMgYW5kIFVTQiBpcnFzIGFyZSBoYW5kbGVkCisgKiAgICAgICAgICAyOiBwYXVzZSBhcHBsaWNhdGlvbiA9PiBUaGUgc3lzdGVtIGlzIG5vdCBwYXVzZWQgYnV0IHRoZSBhcHBsaWNhdGlvbiBtdXN0IHN0b3AgYWxsCisgKiAgICAgICAgICAgICB0aW1lcnMgYW5kIG1ha2Ugc3VyZSBhbGwgdGFza3MgYXJlIGJsb2NrZWQuCisgKgorICogICAgICAgICAgQm90aCBpbiBtb2RlcyAxIGFuZCAyLCB0aGUgYXBwbGljYXRpb24gbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgZXh0ZXJuYWwgcGVyaXBoZXJhbHMgYXJlCisgKiAgICAgICAgICBlaXRoZXIgcG93ZXJlZCBvZmYgb3IgcGxhY2VkIGluIHRoZSBsb3dlc3QgcG93ZXIgY29uc3VtcHRpb24gbW9kZS4KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0JfU1VTUEVORF9NT0RFCisjZGVmaW5lIGRnX2NvbmZpZ1VTQl9TVVNQRU5EX01PREUgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIFVTQiBDaGFyZ2VyIHdpbGwgc3RhcnQgY2hhcmdpbmcgd2l0aCBsZXNzIHRoYW4gMTAwbUEgdW50aWwgZW51bWVyYXRlZC4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQUxMT1dfQ0hBUkdJTkdfTk9UX0VOVU0KKyNkZWZpbmUgZGdfY29uZmlnQUxMT1dfQ0hBUkdJTkdfTk9UX0VOVU0gICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBVU0IgY2hhcmdlciB3aWxsIHN0b3AgY2hhcmdpbmcgZnJvbSBhbiBTRFAgcG9ydCAoaWYKKyAqICAgICAgICAjZGdfY29uZmlnQUxMT1dfQ0hBUkdJTkdfTk9UX0VOVU0gaXMgc2V0IHRvIDEpIGFmdGVyIDQ1IG1pbnV0ZXMsIGlmIG5vdCBlbnVtZXJhdGVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfTk9UX0VOVU1fQ0hBUkdJTkdfVElNRU9VVAorI2RlZmluZSBkZ19jb25maWdVU0VfTk9UX0VOVU1fQ0hBUkdJTkdfVElNRU9VVCAgKDEpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgUHJlLWNoYXJnaW5nIGluaXRpYWwgbWVhc3VyZSBkZWxheQorICoKKyAqIFRoaXMgaXMgdGhlIHRpbWUgdG8gd2FpdCAoTiB4IDEwIG1zKSBiZWZvcmUgZG9pbmcgdGhlIGZpcnN0IHZvbHRhZ2UgbWVhc3VyZW1lbnQgYWZ0ZXIgc3RhcnRpbmcKKyAqIHByZS1jaGFyZ2luZy4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhbiBpbml0aWFsIGJhdHRlcnkgdm9sdGFnZSBvdmVyc2hvb3Qgd2lsbCBub3QgdHJpZ2dlciB0aGUKKyAqIGNoYXJnZXIgdG8gc3RvcCBwcmUtY2hhcmdpbmcgYW5kIG1vdmUgdG8gbm9ybWFsIGNoYXJnaW5nLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQUkVDSEFSR0lOR19JTklUSUFMX01FQVNVUkVfREVMQVkKKyNkZWZpbmUgZGdfY29uZmlnUFJFQ0hBUkdJTkdfSU5JVElBTF9NRUFTVVJFX0RFTEFZICAgICAgKDMpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgUHJlLWNoYXJnaW5nIHRocmVzaG9sZAorICoKKyAqIFdoZW4gVmJhdCBpcyBiZWxvdyB0aGlzIHRocmVzaG9sZCAoaW4gQURDIG1lYXN1cmVtZW50IHVuaXRzKSwgcHJlLWNoYXJnaW5nIHN0YXJ0cy4KKyAqCisgKiBUaGUgdmFsdWUgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoaXMgZXF1YXRpb246CisgKgorICogeVtBREMgdW5pdHNdID0gKDQwOTUgKiBWYmF0W1ZvbHRzXSkgLyA1CisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1BSRUNIQVJHSU5HX1RIUkVTSE9MRAorI2RlZmluZSBkZ19jb25maWdQUkVDSEFSR0lOR19USFJFU0hPTEQgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENoYXJnaW5nIHRocmVzaG9sZAorICoKKyAqIFdoZW4gVmJhdCBpcyBhdCBvciBhYm92ZSB0aGlzIHRocmVzaG9sZCAoaW4gQURDIG1lYXN1cmVtZW50IHVuaXRzKSwgcHJlLWNoYXJnaW5nIHN0b3BzIGFuZAorICogY2hhcmdpbmcgc3RhcnRzLgorICoKKyAqIFRoZSB2YWx1ZSBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhpcyBlcXVhdGlvbjoKKyAqCisgKiB5W0FEQyB1bml0c10gPSAoNDA5NSAqIFZiYXRbVm9sdHNdKSAvIDUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQ0hBUkdJTkdfVEhSRVNIT0xECisjZGVmaW5lIGRnX2NvbmZpZ0NIQVJHSU5HX1RIUkVTSE9MRCAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgUHJlLWNoYXJnaW5nIHRpbWVvdXQKKyAqCisgKiBJZiBhZnRlciB0aGlzIHBlcmlvZCwgdGhlIFZiYXQgaXMgbm90IGhpZ2hlciB0aGFuIDMuMFYgdGhlbiBwcmUtY2hhcmdpbmcgc3RvcHMgKE4geCAxMG1zZWMpLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQUkVDSEFSR0lOR19USU1FT1VUCisjZGVmaW5lIGRnX2NvbmZpZ1BSRUNIQVJHSU5HX1RJTUVPVVQgICAgKDE1ICogNjAgKiAxMDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ2hhcmdpbmcgdGltZW91dAorICoKKyAqIElmIGFmdGVyIHRoaXMgcGVyaW9kLCB0aGUgY2hhcmdlciBpcyBzdGlsbCBjaGFyZ2luZyB0aGVuIGNoYXJnaW5nIHN0b3BzIChOIHggMTBtc2VjKS4gVGhpcworICogdGltZW91dCBoYXMgcHJpb3JpdHkgb3ZlciB0aGUgbmV4dCB0d28gdGltZW91dHMuIElmIGl0IGlzIG5vdCB6ZXJvIHRoZW4gaXQgaXMgdGhlIG9ubHkgb25lIHRha2VuCisgKiBpbnRvIGFjY291bnQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0NIQVJHSU5HX1RJTUVPVVQKKyNkZWZpbmUgZGdfY29uZmlnQ0hBUkdJTkdfVElNRU9VVCAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBDaGFyZ2luZyBDQyB0aW1lb3V0CisgKgorICogSWYgYWZ0ZXIgdGhpcyBwZXJpb2QsIHRoZSBjaGFyZ2VyIGlzIHN0aWxsIGluIENDIG1vZGUgdGhlbiBjaGFyZ2luZyBzdG9wcyAoTiB4IDEwbXNlYykuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0NIQVJHSU5HX0NDX1RJTUVPVVQKKyNkZWZpbmUgZGdfY29uZmlnQ0hBUkdJTkdfQ0NfVElNRU9VVCAgICAoMTgwICogNjAgKiAxMDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ2hhcmdpbmcgQ1YgdGltZW91dAorICoKKyAqIElmIGFmdGVyIHRoaXMgcGVyaW9kLCB0aGUgY2hhcmdlciBpcyBzdGlsbCBpbiBDQyBtb2RlIHRoZW4gY2hhcmdpbmcgc3RvcHMgKE4geCAxMG1zZWMpLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDSEFSR0lOR19DVl9USU1FT1VUCisjZGVmaW5lIGRnX2NvbmZpZ0NIQVJHSU5HX0NWX1RJTUVPVVQgICAgKDM2MCAqIDYwICogMTAwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENoYXJnaW5mIHBvbGxpbmcgaW50ZXJ2YWwKKyAqCisgKiBXaGlsZSBiZWluZyBhdHRhY2hlZCB0byBhIFVTQiBjYWJsZSBhbmQgdGhlIGJhdHRlcnkgaGFzIGJlZW4gY2hhcmdlZCwgdGhpcyBpcyB0aGUgaW50ZXJ2YWwKKyAqIChOIHggMTBtc2VjKSB0aGF0IHRoZSBWYmF0IGlzIHBvbGxlZCB0byBkZWNpZGUgd2hldGhlciBhIG5ldyBjaGFyZ2UgY3ljbGUgd2lsbCBiZSBzdGFydGVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0JfQ0hBUkdFUl9QT0xMSU5HX0lOVEVSVkFMCisjZGVmaW5lIGRnX2NvbmZpZ1VTQl9DSEFSR0VSX1BPTExJTkdfSU5URVJWQUwgICAoMTAwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEJhdHRlcnkgbG93IGxldmVsCisgKgorICogSWYgbm90IHplcm8sIHRoaXMgaXMgdGhlIGxvdyBsaW1pdCBvZiB0aGUgYmF0dGVyeSB2b2x0YWdlLiBJZiBWYmF0IGRyb3BzIGJlbG93IHRoaXMgbGltaXQsIHRoZQorICogc3lzdGVtIGVudGVycyBoaWJlcm5hdGlvbiBtb2RlLCB3YWl0aW5nIGVpdGhlciBmb3IgdGhlIGJhdHRlcnkgdG8gdGhlIGNoYW5nZWQgb3IgcmVjaGFyZ2VkLgorICoKKyAqIFRoZSB2YWx1ZSBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhpcyBlcXVhdGlvbjoKKyAqCisgKiB5W0FEQyB1bml0c10gPSAoNDA5NSAqIFZiYXRbVm9sdHNdKSAvIDUKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkFUVEVSWV9MT1dfTEVWRUwKKyAgICAgICAgI2lmIChkZ19jb25maWdCQVRURVJZX1RZUEUgPT0gQkFUVEVSWV9UWVBFX05PX0JBVFRFUlkpIHx8IChkZ19jb25maWdCQVRURVJZX1RZUEUgPT0gQkFUVEVSWV9UWVBFX05PX1JFQ0hBUkdFKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9MT1dfTEVWRUwgICAgICAoMCkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfTE9XX0xFVkVMICAgICAgKDIyOTMpICAvLyAyLjhWCisgICAgICAgICNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIGEgZGVwcmVjYXRlZCBjb25maWd1cmF0aW9uIGhlbmNlIG5vdCB0byBiZSBkZWZpbmVkIGJ5IGFuIGFwcGxpY2F0aW9uLgorICogV2hlbiBlbnRlcmluZyBoaWJlcm5hdGlvbiBtb2RlIHRoZW46CisgKiBBIERBMTQ2ODAvMS0wMSBzeXN0ZW0gcmVib290cyBvbmx5IHZpYSBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUgV0tVUCBDdHJsIG9yIFZCVVMuCisgKiBBIERBMTQ2ODIvMy1CQSBzeXN0ZW0gcmVib290cyBvbmx5IHZpYSBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUgV0tVUCBDdHJsLgorICovCisjaWZkZWYgZGdfY29uZmlnTE9XX1ZCQVRfSEFORExJTkcKKyNlcnJvciAiQ29uZmlndXJhdGlvbiBvcHRpb24gZGdfY29uZmlnTE9XX1ZCQVRfSEFORExJTkcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ3VzdG9tIGJhdHRlcnkgQURDIHZvbHRhZ2UKKyAqCisgKiBJbiBjYXNlIG9mIGEgY3VzdG9tIGJhdHRlcnkgd2l0aCB1bmtub3duIHZvbHRhZ2UgbGV2ZWwsIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgZGVmaW5lZCB0bworICogcHJvdmlkZSB0aGUgY2hhcmdlIGxldmVsIG9mIHRoZSBiYXR0ZXJ5IGluIEFEQyBtZWFzdXJlbWVudCB1bml0cy4gSWYgbm90IHByb3ZpZGVkIGZvciBzb21lCisgKiByZWFzb24sIGl0IGlzIHNldCB0byB0aGUgbG93ZXN0IGxldmVsICgxLjlWKS4KKyAqCisgKiBUaGUgdmFsdWUgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoaXMgZXF1YXRpb246CisgKgorICogeVtBREMgdW5pdHNdID0gKDQwOTUgKiBWYmF0W1ZvbHRzXSkgLyA1CisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWYgKGRnX2NvbmZpZ0JBVFRFUllfVFlQRSA9PSBCQVRURVJZX1RZUEVfQ1VTVE9NKQorI2lmbmRlZiBkZ19jb25maWdCQVRURVJZX1RZUEVfQ1VTVE9NX0FEQ19WT0xUQUdFCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfVFlQRV9DVVNUT01fQURDX1ZPTFRBR0UgICAgICAgICgxNTU2KQorI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQmF0dGVyeSBjaGFyZ2UgZ2FwCisgKgorICogVGhpcyBpcyB0aGUgc2FmZXR5IGxpbWl0IHVzZWQgaW4gdGhlICJNZWFzdXJlbWVudCBzdGVwIiBvZiB0aGUgc3BlY2lmaWNhdGlvbiB0byBkZWNpZGUgd2hldGhlcgorICogY2hhcmdpbmcgc2hvdWxkIGJlIHN0YXJ0ZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuMVYuCisgKgorICogVGhlIHZhbHVlIG11c3QgYmUgY2FsY3VsYXRlZCB1c2luZyB0aGlzIGVxdWF0aW9uOgorICoKKyAqIHlbQURDIHVuaXRzXSA9ICg0MDk1ICogVmJhdFtWb2x0c10pIC8gNQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdCQVRURVJZX0NIQVJHRV9HQVAKKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9DSEFSR0VfR0FQICAgICAoODIpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQmF0dGVyeSByZXBsZW5pc2ggZ2FwCisgKgorICogVGhpcyBpcyB0aGUgbGltaXQgYmVsb3cgdGhlIG1heGltdW0gVmJhdCBsZXZlbCAoVmJhdCAtIGRnX2NvbmZpZ0JBVFRFUllfUkVQTEVOSVNIX0dBUCksIHdoZXJlCisgKiBjaGFyZ2luZyB3aWxsIGJlIHJlc3RhcnRlZCBpbiBvcmRlciB0byByZXBsZW5pc2ggdGhlIGJhdHRlcnkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuMlYuCisgKgorICogVGhlIHZhbHVlIG11c3QgYmUgY2FsY3VsYXRlZCB1c2luZyB0aGlzIGVxdWF0aW9uOgorICoKKyAqIHlbQURDIHVuaXRzXSA9ICg0MDk1ICogVmJhdFtWb2x0c10pIC8gNQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdCQVRURVJZX1JFUExFTklTSF9HQVAKKyNkZWZpbmUgZGdfY29uZmlnQkFUVEVSWV9SRVBMRU5JU0hfR0FQICAoODIqMikKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9IENIQVJHRVJfU0VUVElOR1MKKyAqLworCisKKy8qKgorICogXGJyaWVmIFRoZSBSc2Vuc2Ugb2YgdGhlIFNPQyBpbiBtdWx0aXBsZXMgb2YgMC4xT2htLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAoMSB4IDAuMU9obSkuCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnU09DX1JTRU5TRQorI2RlZmluZSBkZ19jb25maWdTT0NfUlNFTlNFICAgICAgICAgICAgICgxKSAgICAgLy8gTiB4IDAuMU9obQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSBQcm9ESyBpcyB1c2VkIChjb250cm9scyBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgdGhpcyBib2FyZCkuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVVNFX1Byb0RLCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9Qcm9ESyAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgU3RhdGUgb2YgQ2hhcmdlIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9TT0MKKyNkZWZpbmUgZGdfY29uZmlnVVNFX1NPQyAgICAgICAgICAgICAgICAoMCkKKyNlbHNlCisjICAgaWYgKGRnX2NvbmZpZ1VTRV9TT0MgPT0gMSkKKyMgICB1bmRlZiBkZ19jb25maWdVU0VfSFdfU09DCisjICAgZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19TT0MgICAgICAgICAgKDEpCisjICAgZW5kaWYKKyNlbmRpZgorCisvKioKKyAqIFxhZGR0b2dyb3VwIEZMQVNIX1NFVFRJTkdTCisgKgorICogXGJyaWVmIEZsYXNoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGbGFzaCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIFRoZSByYWlsIGZyb20gd2hpY2ggdGhlIEZsYXNoIGlzIHBvd2VyZWQsIGlmIGEgRmxhc2ggaXMgdXNlZC4KKyAqCisgKiAtIEZMQVNIX0lTX05PVF9DT05ORUNURUQKKyAqIC0gRkxBU0hfQ09OTkVDVEVEX1RPXzFWOAorICogLSBGTEFTSF9DT05ORUNURURfVE9fMVY4UAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0NPTk5FQ1RFRF9UTworI2Vycm9yICJkZ19jb25maWdGTEFTSF9DT05ORUNURURfVE8gaXMgbm90IGRlZmluZWQhIgorI2VuZGlmCisKKy8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY2hlY2tzICovCisjaWYgZGVmaW5lZChkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTKSB8fCBkZWZpbmVkKGRnX2NvbmZpZ1BPV0VSX0ZMQVNIKSBcCisgICAgICAgICAgICAgICAgfHwgZGVmaW5lZChkZ19jb25maWdGTEFTSF9QT1dFUl9PRkYpCisjZGVmaW5lIFBSSU5UX1BPV0VSX1JBSUxfU0VUVVAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ1BPV0VSXzFWOFApCisjZXJyb3IgIkJvdGggZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUyBhbmQgZGdfY29uZmlnUE9XRVJfMVY4UCBhcmUgZGVmaW5lZCEgUGxlYXNlIHVzZSBkZ19jb25maWdQT1dFUl8xVjhQIG9ubHkhIgorI2VuZGlmCisKKyNpZmRlZiBkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTCisgICAgICAgICN3YXJuaW5nICJkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTIHdpbGwgYmUgZGVwcmVjYXRlZCEgVXNlIGRnX2NvbmZpZ1BPV0VSXzFWOFAgaW5zdGVhZCEiCisKKyAgICAgICAgI2lmIChkZ19jb25maWdQT1dFUl9FWFRfMVY4X1BFUklQSEVSQUxTID09IDApIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChkZ19jb25maWdGTEFTSF9DT05ORUNURURfVE8gPT0gRkxBU0hfQ09OTkVDVEVEX1RPXzFWOFApCisgICAgICAgICAgICAgICAgI2Vycm9yICJGbGFzaCBpcyBjb25uZWN0ZWQgdG8gMVY4UCBidXQgZGdfY29uZmlnUE9XRVJfRVhUXzFWOF9QRVJJUEhFUkFMUyBpcyAwLi4uIgorICAgICAgICAjZW5kaWYKKworICAgICAgICAjaWYgKGRnX2NvbmZpZ1BPV0VSX0VYVF8xVjhfUEVSSVBIRVJBTFMgPT0gMSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOFAgICAgICAgICAgICAgKDEpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhQICAgICAgICAgICAgICgwKQorICAgICAgICAjZW5kaWYKKyAgICAgICAgI3VuZGVmIGRnX2NvbmZpZ1BPV0VSX0VYVF8xVjhfUEVSSVBIRVJBTFMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChkZ19jb25maWdQT1dFUl9GTEFTSCkgJiYgZGVmaW5lZChkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFKQorI2Vycm9yICJCb3RoIGRnX2NvbmZpZ1BPV0VSX0ZMQVNIIGFuZCBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFIGFyZSBkZWZpbmVkISBQbGVhc2UgdXNlIGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgb25seSEiCisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnRkxBU0hfUE9XRVJfT0ZGKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCkKKyNlcnJvciAiQm90aCBkZ19jb25maWdGTEFTSF9QT1dFUl9PRkYgYW5kIGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCBhcmUgZGVmaW5lZCEgUGxlYXNlIHVzZSBkZ19jb25maWdQT1dFUl8xVjhfU0xFRVAgb25seSEiCisjZW5kaWYKKworI2lmZGVmIGRnX2NvbmZpZ1BPV0VSX0ZMQVNICisjd2FybmluZyAiZGdfY29uZmlnUE9XRVJfRkxBU0ggaXMgZGVwcmVjYXRlZCEgVXNlIGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgaW5zdGVhZCEiCisjZW5kaWYKKy8qIEVuZCBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNoZWNrcyAqLworCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgMVY4IHJhaWwgaXMgcG93ZXJlZCwgd2hlbiB0aGUgc3lzdGVtIGlzIGluIGFjdGl2ZSBzdGF0ZS4KKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFCisjaWZuZGVmIGRnX2NvbmZpZ1BPV0VSX0ZMQVNICisgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSAgICAgICAgICAgICAgICgwKQorI2Vsc2UKKyAgICAgICAgI2lmIChkZ19jb25maWdQT1dFUl9GTEFTSCA9PSAwKQorICAgICAgICAgICAgICAgICNpZiAoZGdfY29uZmlnRkxBU0hfQ09OTkVDVEVEX1RPID09IEZMQVNIX0NPTk5FQ1RFRF9UT18xVjgpCisgICAgICAgICAgICAgICAgICAgICAgICAjZXJyb3IgIkZsYXNoIGlzIGNvbm5lY3RlZCB0byB0aGUgMVY4IHJhaWwgYnV0IHRoZSByYWlsIGlzIHR1cm5lZCBvZmYgKDEpLi4uIgorICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgICAgICAgKDApCisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFICAgICAgICgxKQorICAgICAgICAjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFdoZW4gc2V0IHRvIDEsIHRoZSAxVjggaXMgcG93ZXJlZCBkdXJpbmcgc2xlZXAuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX09GRgorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCAgICAgICAgKDApCisjZWxzZQorICAgICAgICAjaWYgKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX09GRiA9PSAwKQorICAgICAgICAgICAgICAgICNkZWZpbmUgZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQICAgICAgICAoMSkKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCAgICAgICAgKDApCisgICAgICAgICNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIEZsYXNoIChjb25uZWN0ZWQgdG8gdGhlIDFWOCByYWlsKSBpcyBwb3dlcmVkIG9mZiBkdXJpbmcgc2xlZXAuCisgKgorICogXG5vdGUgVGhpcyBpcyBhbiBpbnRlcm5hbCBkZWZpbmUgYW5kIGNhbm5vdCBiZSBvdmVycmlkZGVuIQorICovCisjdW5kZWYgZGdfY29uZmlnRkxBU0hfUE9XRVJfT0ZGCisjZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX09GRiAgICAgICAgKChkZ19jb25maWdGTEFTSF9DT05ORUNURURfVE8gPT0gRkxBU0hfQ09OTkVDVEVEX1RPXzFWOCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAwKSkKKworLyoqCisgKiBcYnJpZWYgV2hlbiBzZXQgdG8gMSwgdGhlIDFWOFAgcmFpbCBpcyBwb3dlcmVkLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1BPV0VSXzFWOFAKKyNkZWZpbmUgZGdfY29uZmlnUE9XRVJfMVY4UCAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBXaGVuIHNldCB0byAxLCB0aGUgUVNQSSBGTEFTSCBpcyBwdXQgdG8gcG93ZXItZG93biBzdGF0ZSBkdXJpbmcgc2xlZXAuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnRkxBU0hfUE9XRVJfRE9XTgorI2RlZmluZSBkZ19jb25maWdGTEFTSF9QT1dFUl9ET1dOICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgRmxhc2ggQXV0b2RldGVjdGlvbiBtb2RlCisgKgorICogXHdhcm5pbmcgVEhJUyBXSUxMIEdSRUFUTFkgSU5DUkVBU0UgVEhFIENPREUgU0laRSBBTkQgUkVUUkFNIFVTQUdFISEhIE1BS0UgU1VSRSBZT1VSIFBST0pFQ1QKKyAqICAgICAgICAgIENBTiBTVVBQT1JUIFRISVMuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0FVVE9ERVRFQ1QKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfQVVUT0RFVEVDVCAgICAgICAoMCkKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnRkxBU0hfQVVUT0RFVEVDVCA9PSAwCisKKy8qKgorICogXGJyaWVmIFRoZSBGbGFzaCBEcml2ZXIgaGVhZGVyIGZpbGUgdG8gaW5jbHVkZQorICoKKyAqIFRoZSBoZWFkZXIgZmlsZSBtdXN0IGJlIGluIHRoZSBpbmNsdWRlIHBhdGggb2YgdGhlIGNvbXBpbGVyCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnRkxBU0hfSEVBREVSX0ZJTEUKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfSEVBREVSX0ZJTEUgICAgICAicXNwaV93MjVxODBldy5oIgorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFRoZSBGbGFzaCBNYW51ZmFjdHVyZXIgSUQKKyAqCisgKiBUaGlzIG11c3QgYmUgZGVmaW5lZCBpbnNpZGUgdGhlIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX01BTlVGQUNUVVJFUl9JRAorI2RlZmluZSBkZ19jb25maWdGTEFTSF9NQU5VRkFDVFVSRVJfSUQgIFdJTkJPTkRfSUQKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaGUgRmxhc2ggRGV2aWNlIFR5cGUgSUQKKyAqCisgKiBUaGlzIG11c3QgYmUgZGVmaW5lZCBpbnNpZGUgdGhlIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0RFVklDRV9UWVBFCisjZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0RFVklDRV9UWVBFICAgICAgVzI1UTgwRVcKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBUaGUgRmxhc2ggRGV2aWNlIERlbnNpdHkgSUQKKyAqCisgKiBUaGlzIG11c3QgYmUgZGVmaW5lZCBpbnNpZGUgdGhlIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0RFTlNJVFkKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfREVOU0lUWSAgICAgICAgICBXMjVRXzhNYl9TSVpFCisjZW5kaWYKKworI2VuZGlmIC8qIGRnX2NvbmZpZ0ZMQVNIX0FVVE9ERVRFQ1QgPT0gMCAqLworCisvKioKKyAqIFxicmllZiBPZmZzZXQgb2YgdGhlIGltYWdlIGlmIG5vdCBwbGFjZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBRU1BJIEZsYXNoLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdJTUFHRV9GTEFTSF9PRkZTRVQKKyNkZWZpbmUgZGdfY29uZmlnSU1BR0VfRkxBU0hfT0ZGU0VUICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgZmxhc2ggcGFnZSBzaXplLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdGTEFTSF9NQVhfV1JJVEVfU0laRQorI2RlZmluZSBkZ19jb25maWdGTEFTSF9NQVhfV1JJVEVfU0laRSAgICAgICAgICAgKDEyOCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIGJhY2tncm91bmQgb3BlcmF0aW9ucy4KKyAqCisgKiBXaGVuIGVuYWJsZWQsIG91dHN0YW5kaW5nIFFTUEkgb3BlcmF0aW9ucyB3aWxsIHRha2UgcGxhY2UgZHVyaW5nIHNsZWVwIHRpbWUKKyAqIGluY3JlYXNpbmcgdGhlIGVmZmljaWVuY3kuCisgKgorICogLSAxIDogRGlzYWJsZWQKKyAqIC0gMCA6IEVuYWJsZWQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUworI2RlZmluZSBkZ19jb25maWdESVNBQkxFX0JBQ0tHUk9VTkRfRkxBU0hfT1BTICAgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBERUJVR19TRVRUSU5HUworICoKKyAqIFxicmllZiBEZWJ1Z2dpbmcgc2V0dGluZ3MKKyAqCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1ZyBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBkZWJ1Z2dlcgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0VOQUJMRV9ERUJVR0dFUgorI2RlZmluZSBkZ19jb25maWdFTkFCTEVfREVCVUdHRVIgICAgICAgICgxKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFVzZSBTVyBjdXJzb3IKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfU1dfQ1VSU09SCisjICAgICAgIGRlZmluZSBkZ19jb25maWdVU0VfU1dfQ1VSU09SICAgICAgICAgICAoMCkKKyMgICAgICAgZGVmaW5lIFNXX0NVUlNPUl9QT1JUICAgICAgICAgICAgICAgICAgICgwKQorIyAgICAgICBkZWZpbmUgU1dfQ1VSU09SX1BJTiAgICAgICAgICAgICAgICAgICAgKDApCisjZWxzZQorIyAgICAgICBpZiBkZ19jb25maWdCTEFDS19PUkNBX01CX1JFViA9PSBCTEFDS19PUkNBX01CX1JFVl9ECisjICAgICAgICAgICAgICAgaWYgIWRlZmluZWQgU1dfQ1VSU09SX1BPUlQgICYmICAhZGVmaW5lZCBTV19DVVJTT1JfUElOCisjICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgU1dfQ1VSU09SX1BPUlQgICAoMCkKKyMgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBTV19DVVJTT1JfUElOICAgICg3KQorIyAgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgICBpZiAhZGVmaW5lZCBTV19DVVJTT1JfUE9SVCAgJiYgICFkZWZpbmVkIFNXX0NVUlNPUl9QSU4KKyMgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBTV19DVVJTT1JfUE9SVCAgICgyKQorIyAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIFNXX0NVUlNPUl9QSU4gICAgKDMpCisjICAgICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBTV19DVVJTT1JfR1BJTyAgICAgICAgICAgICAgICAgICooU1dfQ1VSU09SX1BPUlQgPT0gMCA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDAgPyAmKEdQSU8tPlAwMF9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAxID8gJihHUElPLT5QMDFfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMiA/ICYoR1BJTy0+UDAyX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDMgPyAmKEdQSU8tPlAwM19NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA0ID8gJihHUElPLT5QMDRfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNSA/ICYoR1BJTy0+UDA1X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDYgPyAmKEdQSU8tPlAwNl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihHUElPLT5QMDdfTU9ERV9SRUcpKSkpKSkpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDAgPyAmKEdQSU8tPlAxMF9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAxID8gJihHUElPLT5QMTFfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMiA/ICYoR1BJTy0+UDEyX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDMgPyAmKEdQSU8tPlAxM19NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA0ID8gJihHUElPLT5QMTRfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNSA/ICYoR1BJTy0+UDE1X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDYgPyAmKEdQSU8tPlAxNl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihHUElPLT5QMTdfTU9ERV9SRUcpKSkpKSkpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMiA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDAgPyAmKEdQSU8tPlAyMF9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAxID8gJihHUElPLT5QMjFfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMiA/ICYoR1BJTy0+UDIyX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDMgPyAmKEdQSU8tPlAyM19NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihHUElPLT5QMjRfTU9ERV9SRUcpKSkpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMyA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDAgPyAmKEdQSU8tPlAzMF9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAxID8gJihHUElPLT5QMzFfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMiA/ICYoR1BJTy0+UDMyX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDMgPyAmKEdQSU8tPlAzM19NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA0ID8gJihHUElPLT5QMzRfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNSA/ICYoR1BJTy0+UDM1X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDYgPyAmKEdQSU8tPlAzNl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihHUElPLT5QMzdfTU9ERV9SRUcpKSkpKSkpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDAgPyAmKEdQSU8tPlA0MF9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSAxID8gJihHUElPLT5QNDFfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gMiA/ICYoR1BJTy0+UDQyX01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDMgPyAmKEdQSU8tPlA0M19NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BJTiA9PSA0ID8gJihHUElPLT5QNDRfTU9ERV9SRUcpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QSU4gPT0gNSA/ICYoR1BJTy0+UDQ1X01PREVfUkVHKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUElOID09IDYgPyAmKEdQSU8tPlA0Nl9NT0RFX1JFRykgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihHUElPLT5QNDdfTU9ERV9SRUcpKSkpKSkpKSkpKSkKKworI2RlZmluZSBTV19DVVJTT1JfU0VUICAgICAgICAgICAgICAgICAgICooU1dfQ1VSU09SX1BPUlQgPT0gMCA/ICYoR1BJTy0+UDBfU0VUX0RBVEFfUkVHKSA6ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMSA/ICYoR1BJTy0+UDFfU0VUX0RBVEFfUkVHKSA6ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDIgPyAmKEdQSU8tPlAyX1NFVF9EQVRBX1JFRykgOiAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUE9SVCA9PSAzID8gJihHUElPLT5QM19TRVRfREFUQV9SRUcpIDogICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDRfU0VUX0RBVEFfUkVHKSkpKSkKKworI2RlZmluZSBTV19DVVJTT1JfUkVTRVQgICAgICAgICAgICAgICAgICooU1dfQ1VSU09SX1BPUlQgPT0gMCA/ICYoR1BJTy0+UDBfUkVTRVRfREFUQV9SRUcpIDogIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1dfQ1VSU09SX1BPUlQgPT0gMSA/ICYoR1BJTy0+UDFfUkVTRVRfREFUQV9SRUcpIDogICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNXX0NVUlNPUl9QT1JUID09IDIgPyAmKEdQSU8tPlAyX1JFU0VUX0RBVEFfUkVHKSA6ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTV19DVVJTT1JfUE9SVCA9PSAzID8gJihHUElPLT5QM19SRVNFVF9EQVRBX1JFRykgOiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoR1BJTy0+UDRfUkVTRVRfREFUQV9SRUcpKSkpKQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBDQUNIRV9TRVRUSU5HUworICoKKyAqIFxicmllZiBDYWNoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYWNoZSBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBRU1BJIGZsYXNoIGNhY2hlYWJsZSBhcmVhLgorICoKKyAqIEFsbCByZWFkcyBmcm9tIG9mZnNldCAwIHVwIHRvIChub3QgaW5jbHVkaW5nKSBvZmZzZXQgZGdfY29uZmlnQ0FDSEVBQkxFX1FTUElfQVJFQV9MRU4KKyAqIHdpbGwgYmUgY2FjaGVkLiBJbiBhZGRpdGlvbiwgYW55IHdyaXRlcyB0byB0aGlzIGFyZWEgd2lsbCB0cmlnZ2VyIGNhY2hlIGZsdXNoaW5nLCB0bworICogYXZvaWQgYW55IGNhY2hlIGluY29oZXJlbmNlLgorICoKKyAqIFRoZSBzaXplIG11c3QgYmUgNjRLQi1hbGlnbmVkLCBkdWUgdG8gdGhlIGdyYW51bGFyaXR5IG9mIENBQ0hFX0NUUkwyX1JFR1tDQUNIRV9MRU5dLgorICoKKyAqIFNwZWNpYWwgdmFsdWVzOgorICogICogIDAgOiBUdXJuIG9mZiBjYWNoZS4KKyAqICAqIC0xIDogRG9uJ3QgY29uZmlndXJlIGNhY2hlYWJsZSBhcmVhIHNpemUgKGkuZS4gbGVhdmUgYXMgc2V0IGJ5IGJvb3RlcikuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0NBQ0hFQUJMRV9RU1BJX0FSRUFfTEVOCisjZGVmaW5lIGRnX2NvbmZpZ0NBQ0hFQUJMRV9RU1BJX0FSRUFfTEVOICAgICAgICAoLTEpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBhc3NvY2lhdGl2aXR5IG9mIHRoZSBjYWNoZS4KKyAqCisgKiBBdmFpbGFibGUgdmFsdWVzOgorICogICAtIENBQ0hFX0FTU09DX0FTX0lTCisgKiAgIC0gQ0FDSEVfQVNTT0NfRElSRUNUX01BUAorICogICAtIENBQ0hFX0FTU09DXzJfV0FZCisgKiAgIC0gQ0FDSEVfQVNTT0NfNF9XQVkKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdDQUNIRV9BU1NPQ0lBVElWSVRZCisjZGVmaW5lIGRnX2NvbmZpZ0NBQ0hFX0FTU09DSUFUSVZJVFkgICAgQ0FDSEVfQVNTT0NfNF9XQVkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGxpbmUgc2l6ZSBvZiB0aGUgY2FjaGUuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKgorICogQXZhaWxhYmxlIHZhbHVlczoKKyAqICAgLSBDQUNIRV9MSU5FU1pfQVNfSVMKKyAqICAgLSBDQUNIRV9MSU5FU1pfOF9CWVRFUworICogICAtIENBQ0hFX0xJTkVTWl8xNl9CWVRFUworICogICAtIENBQ0hFX0xJTkVTWl8zMl9CWVRFUworICovCisjaWZuZGVmIGRnX2NvbmZpZ0NBQ0hFX0xJTkVTWgorI2RlZmluZSBkZ19jb25maWdDQUNIRV9MSU5FU1ogICAgICAgICAgIENBQ0hFX0xJTkVTWl84X0JZVEVTCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgQVJCSVRFUl9TRVRUSU5HUworICoKKyAqIFxicmllZiBBcmJpdGVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqIFx7CisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJiaXRlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcYnJpZWYgQ3VzdG9tIGFyYml0ZXIgY29uZmlndXJhdGlvbiBzdXBwb3J0LgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0NPRVhfRU5BQkxFX0NPTkZJRworI2RlZmluZSBkZ19jb25maWdDT0VYX0VOQUJMRV9DT05GSUcgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEFyYml0ZXIgc3RhdGlzdGljcworICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ0NPRVhfRU5BQkxFX1NUQVRTCisjZGVmaW5lIGRnX2NvbmZpZ0NPRVhfRU5BQkxFX1NUQVRTICAgICAgKDApCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgUEVSSVBIRVJBTF9TRUxFQ1RJT04KKyAqCisgKiBcYnJpZWYgUGVyaXBoZXJhbCBzZWxlY3Rpb24KKyAqCisgKiBXaGVuIGVuYWJsZWQgdGhlIHNwZWNpZmljIGxvdyBsZXZlbCBkcml2ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBTREsuCisgKiAtIDAgOiBEaXNhYmxlZAorICogLSAxIDogRW5hYmxlZAorICoKKyAqIFRoZSBkZWZhdWx0IG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICoKKyAqIFx7CisgICBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlZmF1bHQgb3B0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS06CisgICBBRVMgSEFTSCAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfQUVTX0hBU0ggICAgICAgICAgICAgICB8IDAKKyAgIFJhZGlvIE1BQyBBcmJpdGVyICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19DT0VYICAgICAgICAgICAgICAgICAgIHwgMAorICAgQ2xvY2sgYW5kIFBvd2VyIE1hbmFnZXIgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX0NQTSAgICAgICAgICAgICAgICAgICAgfCAxCisgICBEaXJlY3QgTWVtb3J5IEFjY2VzcyAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfRE1BICAgICAgICAgICAgICAgICAgICB8IDEKKyAgIEVsbGlwdGljIEN1cnZlIENvbnRyb2xsZXIgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19FQ0MgICAgICAgICAgICAgICAgICAgIHwgMQorICAgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydGVyICAgIHwgZGdfY29uZmlnVVNFX0hXX0dQQURDICAgICAgICAgICAgICAgICAgfCAxCisgICBHZW5lcmFsIFB1cnBvc2UgSS9PICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfR1BJTyAgICAgICAgICAgICAgICAgICB8IDEKKyAgIEludGVyLUludGVncmF0ZWQgQ2lyY3VpdCAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19JMkMgICAgICAgICAgICAgICAgICAgIHwgMAorICAgSW5mcmEgUmVkIEdlbmVyYXRvciAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX0lSR0VOICAgICAgICAgICAgICAgICAgfCAwCisgICBLZXlib2FyZCBzY2FubmVyICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfS0VZQk9BUkRfU0NBTk5FUiAgICAgICB8IDAKKyAgIE9UUCBjb250cm9sbGVyICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19PVFBDICAgICAgICAgICAgICAgICAgIHwgMQorICAgUVNQSSBjb250cm9sbGVyICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1FTUEkgICAgICAgICAgICAgICAgICAgfCAxCisgICBRdWFkcmF0dXJlIGRlY29kZXIgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfUVVBRCAgICAgICAgICAgICAgICAgICB8IDAKKyAgIFJhZGlvIG1vZHVsZSAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19SRiAgICAgICAgICAgICAgICAgICAgIHwgMQorICAgU3RhdGUgb2YgY2hhcmdlIG1vZHVsZSAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1NPQyAgICAgICAgICAgICAgICAgICAgfCAwCisgICBUaW1lciAwICAgICAgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfVElNRVIwICAgICAgICAgICAgICAgICB8IDAKKyAgIFRpbWVyIDEgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19USU1FUjEgICAgICAgICAgICAgICAgIHwgMQorICAgVGltZXIgMiAgICAgICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1RJTUVSMiAgICAgICAgICAgICAgICAgfCAwCisgICBUcnVlIFJhbmRvbSBHZW5lcmF0b3IgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfVFJORyAgICAgICAgICAgICAgICAgICB8IDEKKyAgIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9IV19VQVJUICAgICAgICAgICAgICAgICAgIHwgMQorICAgVVNCIGNoYXJnZXIgICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVVNFX0hXX1VTQl9DSEFSR0VSICAgICAgICAgICAgfCAxCisgICBXYWtldXAgdGltZXIgICAgICAgICAgICAgICAgICAgfCBkZ19jb25maWdVU0VfSFdfV0tVUCAgICAgICAgICAgICAgICAgICB8IDEKKyAgIFBETSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9JRl9QRE0gICAgICAgICAgICAgICAgICAgIHwgMAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBlcmlwaGVyYWxzIChod18qKSBzZWxlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfQUVTX0hBU0gKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX0FFU19IQVNIICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19DT0VYCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19DT0VYICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfQ1BNCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19DUE0gICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfRE1BCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19ETUEgICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfRUNDCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19FQ0MgICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfR1BBREMKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX0dQQURDICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19HUElPCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19HUElPICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfSTJDCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19JMkMgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfSVJHRU4KKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX0lSR0VOICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19LRVlCT0FSRF9TQ0FOTkVSCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19LRVlCT0FSRF9TQ0FOTkVSICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19PVFBDCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19PVFBDICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfUVNQSQorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfUVNQSSAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1FVQUQKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1FVQUQgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19SRgorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfUkYgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1NPQworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfU09DICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1NQSQorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfU1BJICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1RFTVBTRU5TCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19URU1QU0VOUyAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfVElNRVIwCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19USU1FUjAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfVElNRVIxCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19USU1FUjEgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfVElNRVIyCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19USU1FUjIgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfSFdfVFJORworI2RlZmluZSBkZ19jb25maWdVU0VfSFdfVFJORyAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1VBUlQKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1VBUlQgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19VU0JfQ0hBUkdFUgorI2RlZmluZSBkZ19jb25maWdVU0VfSFdfVVNCX0NIQVJHRVIgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0hXX1dLVVAKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1dLVVAgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9IV19VU0IKKyNkZWZpbmUgZGdfY29uZmlnVVNFX0hXX1VTQiAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9JRl9QRE0KKyNkZWZpbmUgZGdfY29uZmlnVVNFX0lGX1BETSAgICAgICAgICAgICAoMCkKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXS1VQIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIFdLVVBfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgV0tVUCBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTEFUQ0ggc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgV0tVUF9MQVRDSF9TRVRUSU5HUworICoKKyAqIFxicmllZiBXS1VQIExBVENIIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqIFx7CisgKi8KKworLyoqCisgKiBcYnJpZWYgV0tVUCBsYXRjaCB3YWtldXAgKGlvKSBzb3VyY2Ugc3VwcG9ydAorICoKKyAqIFxub3RlIEluIGNoaXAgcmV2aXNpb24gREExNDY4MC8xLTAxLCB0aGlzIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgaW4gcy93CisgKiBcbm90ZSBJbiBjaGlwIHJldmlzaW9uIERBMTQ2ODIvMy1CQSwgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkIGluIGgvdworICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWYgKCFkZWZpbmVkKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSkgfHwgKGRnX2NvbmZpZ1VTRV9IV19XS1VQID09IDApCisgICAgICAgICN1bmRlZiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFICAgICAoMCkKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVBUlQgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgVUFSVF9TRVRUSU5HUworICoKKyAqIFxicmllZiBVQVJUIEZJRk8gY29uZmlndXJhdGlvbiBzZXR0aW5ncworICogXHsKKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZJRk8gc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgVUFSVF9GSUZPX1NFVFRJTkdTCisgKgorICogXGJyaWVmIFVBUlQgRklGTyBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisKKy8qKgorICogXGJyaWVmIFNvZnR3YXJlIEZJRk8gc3VwcG9ydAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VBUlRfU09GVFdBUkVfRklGTworI2RlZmluZSBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8gICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFVBUlQxJ3Mgc29mdHdhcmUgRklGTyBzaXplCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVUFSVDFfU09GVFdBUkVfRklGT19TSVpFCisjICAgZGVmaW5lIGRnX2NvbmZpZ1VBUlQxX1NPRlRXQVJFX0ZJRk9fU0laRSAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBVQVJUMidzIHNvZnR3YXJlIEZJRk8gc2l6ZQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VBUlQyX1NPRlRXQVJFX0ZJRk9fU0laRQorIyAgIGRlZmluZSBkZ19jb25maWdVQVJUMl9TT0ZUV0FSRV9GSUZPX1NJWkUgICAgKDApCisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcfQorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2lyY3VsYXIgRE1BIGZvciBSWCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBVQVJUX0NJUkNVTEFSX0RNQV9GT1JfUlhfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgVUFSVCBGSUZPIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAqIFx7CisgKi8KKworLyoqCisgKiBcYnJpZWYgQ2lyY3VsYXIgRE1BIHN1cHBvcnQgZm9yIFJYCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKKyNkZWZpbmUgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBVQVJUMSdzIENpcmN1bGFyIERNQSBidWZmZXIgc2l6ZSBmb3IgUlgKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLH0KKyAqLworI2lmbmRlZiBkZ19jb25maWdVQVJUMV9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkUKKyNkZWZpbmUgZGdfY29uZmlnVUFSVDFfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFICgwKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFVBUlQyJ3MgQ2lyY3VsYXIgRE1BIGJ1ZmZlciBzaXplIGZvciBSWAorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1VBUlQyX1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRQorI2RlZmluZSBkZ19jb25maWdVQVJUMl9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkUgKDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBBREFQVEVSX1NFTEVDVElPTgorICoKKyAqIFxicmllZiBBZGFwdGVyIHNlbGVjdGlvbgorICoKKyAqIFdoZW4gZW5hYmxlZCB0aGUgc3BlY2lmaWMgYWRhcHRlciBpcyBpbmNsdWRlZCBpbiB0aGUgY29tcGlsYXRpb24gb2YgdGhlIFNESy4KKyAqIC0gMCA6IERpc2FibGVkCisgKiAtIDEgOiBFbmFibGVkCisgKgorICogVGhlIGRlZmF1bHQgb3B0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgKgorICogXHsKKyAgIEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8IFNldHRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVmYXVsdCBvcHRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgOi0tLS0tLS0tLS0tLS0tLS0tLToKKyAgIEZsYXNoICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ0ZMQVNIX0FEQVBURVIgICAgICAgICAgICAgICAgIHwgMQorICAgSW50ZXItSW50ZWdyYXRlZCBDaXJjdWl0ICAgICAgIHwgZGdfY29uZmlnSTJDX0FEQVBURVIgICAgICAgICAgICAgICAgICAgfCAwCisgICBOb24gVm9sYXRpbGUgTWVtb3J5IFN0b3JhZ2UgICAgfCBkZ19jb25maWdOVk1TX0FEQVBURVIgICAgICAgICAgICAgICAgICB8IDEKKyAgIFZpcnR1YWwgRUVSUE9NIFN0b3JhZ2UgICAgICAgICB8IGRnX2NvbmZpZ05WTVNfVkVTICAgICAgICAgICAgICAgICAgICAgIHwgMQorICAgUmFkaW8gICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnUkZfQURBUFRFUiAgICAgICAgICAgICAgICAgICAgfCAxCisgICBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgICAgfCBkZ19jb25maWdTUElfQURBUFRFUiAgICAgICAgICAgICAgICAgICB8IDAKKyAgIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VBUlRfQURBUFRFUiAgICAgICAgICAgICAgICAgIHwgMAorICAgVUFSVCBmb3IgQkxFICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnVUFSVF9CTEVfQURBUFRFUiAgICAgICAgICAgICAgfCAwCisgICBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgICAgfCBkZ19jb25maWdHUEFEQ19BREFQVEVSICAgICAgICAgICAgICAgICB8IDAKKyAgIFRlbXBlcmF0dXJlIFNlbnNvciAgICAgICAgICAgICB8IGRnX2NvbmZpZ1RFTVBTRU5TX0FEQVBURVIgICAgICAgICAgICAgIHwgMAorICAgQmF0dGVyeSAgICAgICAgICAgICAgICAgICAgICAgIHwgZGdfY29uZmlnQkFUVEVSWV9BREFQVEVSICAgICAgICAgICAgICAgfCAwCisgICBOb24gVm9sYXRpbGUgUGFyYW1ldGVycyAgICAgICAgfCBkZ19jb25maWdOVlBBUkFNX0FEQVBURVIgICAgICAgICAgICAgICB8IDAKKyAgIENyeXB0byAgICAgICAgICAgICAgICAgICAgICAgICB8IGRnX2NvbmZpZ0NSWVBUT19BREFQVEVSICAgICAgICAgICAgICAgIHwgMQorICAgS2V5Ym9hcmQgc2Nhbm5lciAgICAgICAgICAgICAgIHwgZGdfY29uZmlnS0VZQk9BUkRfU0NBTk5FUl9BREFQVEVSICAgICAgfCAwCisgKgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWRhcHRlcnMgKGFkXyopIHNlbGVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIGRnX2NvbmZpZ0ZMQVNIX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnRkxBU0hfQURBUFRFUiAgICAgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnSTJDX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnSTJDX0FEQVBURVIgICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnTlZNU19BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ05WTVNfQURBUFRFUiAgICAgICAgICAgICAgICAgICAoMSkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ05WTVNfRkxBU0hfQ0FDSEUKKyNkZWZpbmUgZGdfY29uZmlnTlZNU19GTEFTSF9DQUNIRSAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnTlZNU19WRVMKKyNkZWZpbmUgZGdfY29uZmlnTlZNU19WRVMgICAgICAgICAgICAgICAgICAgICAgICgxKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnUkZfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdSRl9BREFQVEVSICAgICAgICAgICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdTUElfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdTUElfQURBUFRFUiAgICAgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVQVJUX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnVUFSVF9BREFQVEVSICAgICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVUFSVF9CTEVfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdVQVJUX0JMRV9BREFQVEVSICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdHUEFEQ19BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ0dQQURDX0FEQVBURVIgICAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1RFTVBTRU5TX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnVEVNUFNFTlNfQURBUFRFUiAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnQkFUVEVSWV9BREFQVEVSCisjZGVmaW5lIGRnX2NvbmZpZ0JBVFRFUllfQURBUFRFUiAgICAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ05WUEFSQU1fQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdOVlBBUkFNX0FEQVBURVIgICAgICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdDUllQVE9fQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdDUllQVE9fQURBUFRFUiAgICAgICAgICAgICAgICAgKDEpCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdLRVlCT0FSRF9TQ0FOTkVSX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnS0VZQk9BUkRfU0NBTk5FUl9BREFQVEVSICAgICAgICgwKQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKioKKyAqIFxhZGR0b2dyb3VwIENPTlNPTEVfSU9fU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgQ29uc29sZSBJTyBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKgorICogXHsKKyAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2V0dGluZyAgICAgICAgICAgICAgICAgICAgfCBEZWZhdWx0IG9wdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS06CisgICBFbmFibGUgc2VyaWFsIGNvbnNvbGUgbW9kdWxlICAgICAgICAgICAgICB8IGRnX2NvbmZpZ1VTRV9DT05TT0xFICAgICAgIHwgMAorICAgRW5hYmxlIHNlcmlhbCBjb25zb2xlIHN0dWJiZWQgQVBJICAgICAgICAgfCBkZ19jb25maWdVU0VfQ09OU09MRV9TVFVCUyB8IDAKKyAgIEVuYWJsZSBDb21tYW5kIExpbmUgSW50ZXJmYWNlIG1vZHVsZSAgICAgIHwgZGdfY29uZmlnVVNFX0NMSSAgICAgICAgICAgfCAwCisgICBFbmFibGUgQ29tbWFuZCBMaW5lIEludGVyZmFjZSBzdHViYmVkIEFQSSB8IGRnX2NvbmZpZ1VTRV9DTElfU1RVQlMgICAgIHwgMAorCisgICBcc2VlIGNvbnNvbGUuaCBjbGkuaAorCisgICBcbm90ZSBDTEkgbW9kdWxlIHJlcXVpcmVzIGRnX2NvbmZpZ1VTRV9DT05TT0xFIHRvIGJlIGVuYWJsZWQuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc29sZSBJTyBjb25maWd1cmF0aW9uIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIGRnX2NvbmZpZ1VTRV9DT05TT0xFCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9DT05TT0xFICAgICAgICAgICAgKDApCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdVU0VfQ09OU09MRV9TVFVCUworI2RlZmluZSBkZ19jb25maWdVU0VfQ09OU09MRV9TVFVCUyAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0NMSQorI2RlZmluZSBkZ19jb25maWdVU0VfQ0xJICAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnVVNFX0NMSV9TVFVCUworI2RlZmluZSBkZ19jb25maWdVU0VfQ0xJX1NUVUJTICAgICAgICAgICgwKQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBER1RMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBELkdUTCBpbnRlcmZhY2UKKyAqCisgKiBXaGVuIHRoaXMgbWFjcm8gaXMgZW5hYmxlZCwgdGhlIERHVEwgZnJhbWV3b3JrIGlzIGF2YWlsYWJsZSBmb3IgdXNlLgorICogVGhlIGZyYW1ld29yayBtdXN0IGZ1cnRoZXJtb3JlIGJlIGluaXRpYWxpemVkIGluIHRoZSBhcHBsaWNhdGlvbiB1c2luZworICogZGd0bF9pbml0KCkuIEFkZGl0aW9uYWxseSwgdGhlIFVBUlQgYWRhcHRlciBtdXN0IGJlIGluaXRpYWxpemVkIGFjY29yZGluZ2x5LgorICoKKyAqIFBsZWFzZSBzZWUgc2RrL21pZGRsZXdhcmUvZGd0bC9pbmNsdWRlLyBmb3IgZnVydGhlciBER1RMIGNvbmZpZ3VyYXRpb24KKyAqIChpbiBkZ3RsX2NvbmZpZy5oKSBhbmQgQVBJLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICoKKyAqLworI2lmbmRlZiBkZ19jb25maWdVU0VfREdUTAorI2RlZmluZSBkZ19jb25maWdVU0VfREdUTCAgICAgICAgICAgICAgICgwKQorI2VuZGlmCisKKy8qKgorICogXGFkZHRvZ3JvdXAgREVCVUdfU0VUVElOR1MKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU1fVklFVworICoKKyAqIFxicmllZiBTeXN0ZW0gVmlldyBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgKiBceworICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ2dlciBTeXN0ZW0gVmlldyBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBcYnJpZWYgU2VnZ2VyJ3MgU3lzdGVtIFZpZXcKKyAqCisgKiBXaGVuIGVuYWJsZWQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhbHNvIGNhbGwgU0VHR0VSX1NZU1ZJRVdfQ29uZigpIHRvIGVuYWJsZSBzeXN0ZW0gbW9uaXRvcmluZy4KKyAqIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSBzaG91bGQgYmUgaW5jcmVhc2VkIGJ5IGRnX2NvbmZpZ1NZU1RFTVZJRVdfU1RBQ0tfT1ZFUkhFQUQgYnl0ZXMgZm9yIGVhY2ggc3lzdGVtIHRhc2suCisgKiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYXJlIDggc3lzdGVtIHRhc2tzIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSBzaG91bGQgYmUgaW5jcmVhc2VkIGJ5CisgKiAoOCAqIGRnX2NvbmZpZ1NZU1RFTVZJRVdfU1RBQ0tfT1ZFUkhFQUQpIGJ5dGVzLgorICoKKyAqIC0gMCA6IERpc2FibGVkCisgKiAtIDEgOiBFbmFibGVkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCx9CisgKgorICovCisjaWZuZGVmIGRnX2NvbmZpZ1NZU1RFTVZJRVcKKyNkZWZpbmUgZGdfY29uZmlnU1lTVEVNVklFVyAgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTdGFjayBzaXplIG92ZXJoZWFkIHdoZW4gU3lzdGVtIFZpZXcgQVBJIGlzIHVzZWQKKyAqCisgKiBBbGwgdGhyZWFkIHN0YWNrIHNpemVzIHBsdXMgdGhlIHRoZSBzdGFjayBvZiBJUlEgaGFuZGxlcnMgd2lsbCBiZSBpbmNyZWFzZWQgYnkgdGhhdCBhbW91bnQKKyAqIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93IHdoZW4gU3lzdGVtIFZpZXcgaXMgbW9uaXRvcmluZyB0aGUgc3lzdGVtLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBkZ19jb25maWdTWVNURU1WSUVXX1NUQUNLX09WRVJIRUFECisjZGVmaW5lIGRnX2NvbmZpZ1NZU1RFTVZJRVdfU1RBQ0tfT1ZFUkhFQUQgICAgICAoMjU2KQorI2VuZGlmCisKKy8qCisgKiBFbmFibGUvRGlzYWJsZSBTeXN0ZW0gVmlldyBtb25pdG9yaW5nIHRpbWUgY3JpdGljYWwgaW50ZXJydXB0IGhhbmRsZXJzIChCTEUsIENQTSwgVVNCKS4KKyAqIERpc2FibGluZyBJU1IgbW9uaXRvcmluZyBjb3VsZCBoZWxwIHJlZHVjaW5nIGFzc2VydGlvbnMgdHJpZ2dlcmVkIGJ5IFN5c3RlbSBWaWV3IG1vbml0b3Jpbmcgb3ZlcmhlYWQuCisgKgorICovCisKKy8qKgorICogXGJyaWVmIExldCBTeXN0ZW0gVmlldyBtb25pdG9yIEJMRSByZWxhdGVkIElTUnMgKEJMRV9HRU5fSGFuZGxlciAvIEJMRV9XQUtFVVBfTFBfSGFuZGxlcikuCisgKgorICogLSAwIDogRGlzYWJsZWQKKyAqIC0gMSA6IEVuYWJsZWQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnU1lTVEVNVklFV19NT05JVE9SX0JMRV9JU1IKKyNkZWZpbmUgZGdfY29uZmlnU1lTVEVNVklFV19NT05JVE9SX0JMRV9JU1IgICAgICgxKQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIExldCBTeXN0ZW0gVmlldyBtb25pdG9yIENQTSByZWxhdGVkIElTUnMgKFNXVElNMV9IYW5kbGVyIC8gV0tVUF9HUElPX0hhbmRsZXIpLgorICoKKyAqIC0gMCA6IERpc2FibGVkCisgKiAtIDEgOiBFbmFibGVkCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1NZU1RFTVZJRVdfTU9OSVRPUl9DUE1fSVNSCisjZGVmaW5lIGRnX2NvbmZpZ1NZU1RFTVZJRVdfTU9OSVRPUl9DUE1fSVNSICAgICAoMSkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBMZXQgU3lzdGVtIFZpZXcgbW9uaXRvciBVU0IgcmVsYXRlZCBJU1JzIChVU0JfSGFuZGxlciAvIFZCVVNfSGFuZGxlcikuCisgKgorICogLSAwIDogRGlzYWJsZWQKKyAqIC0gMSA6IEVuYWJsZWQKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKi8KKyNpZm5kZWYgZGdfY29uZmlnU1lTVEVNVklFV19NT05JVE9SX1VTQl9JU1IKKyNkZWZpbmUgZGdfY29uZmlnU1lTVEVNVklFV19NT05JVE9SX1VTQl9JU1IgICAgICgxKQorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBSRl9EUklWRVJfU0VUVElOR1MKKyAqCisgKiBcYnJpZWYgRG94eWdlbiBkb2N1bWVudGF0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZvciB0aGlzIG1vZHVsZS4KKyAqICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGUocykKKyAqCisgKiBcYnNwX2RlZmF1bHRfbm90ZXtcYnNwX2NvbmZpZ19vcHRpb25fYXBwLCBcYnNwX2NvbmZpZ19vcHRpb25fZXhwZXJ0X29ubHl9CisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJGIGRyaXZlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldCB0byAxIHRvIGVuYWJsZSB0aGUgcmVjYWxpYnJhdGlvbiBwcm9jZWR1cmUgKi8KKyNpZm5kZWYgZGdfY29uZmlnUkZfRU5BQkxFX1JFQ0FMSUJSQVRJT04KKyNkZWZpbmUgZGdfY29uZmlnUkZfRU5BQkxFX1JFQ0FMSUJSQVRJT04gICAgICAgICgxKQorI2VuZGlmCisKKy8qIElmIFJGIHJlY2FsaWJyYXRpb24gaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBlbmFibGUgR1BBREMgYXMgd2VsbCAqLworI2lmIGRnX2NvbmZpZ1JGX0VOQUJMRV9SRUNBTElCUkFUSU9OCisjdW5kZWYgZGdfY29uZmlnVVNFX0hXX0dQQURDCisjZGVmaW5lIGRnX2NvbmZpZ1VTRV9IV19HUEFEQyAgICAgICAgICAgKDEpCisjdW5kZWYgZGdfY29uZmlnR1BBRENfQURBUFRFUgorI2RlZmluZSBkZ19jb25maWdHUEFEQ19BREFQVEVSICAgICAgICAgICgxKQorI3VuZGVmIGRnX2NvbmZpZ1RFTVBTRU5TX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnVEVNUFNFTlNfQURBUFRFUiAgICAgICAoMSkKKyNlbmRpZgorCisvKiBJZiBSRiBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGVuYWJsZSBHUEFEQyBhZGFwdGVyIGFzIHdlbGwgKi8KKyNpZiAgZGdfY29uZmlnUkZfQURBUFRFUgorI3VuZGVmIGRnX2NvbmZpZ0dQQURDX0FEQVBURVIKKyNkZWZpbmUgZGdfY29uZmlnR1BBRENfQURBUFRFUiAgICAgICAgICAoMSkKKyNlbmRpZgorCisvKiBNaW5pbXVtIHRpbWUgYmVmb3JlIHBlcmZvcm1pbmcgYW4gUkYgcmVjYWxpYnJhdGlvbiwgaW4gRnJlZVJUT1Mgc2NoZWR1bGVyIHRpY2tzICovCisjaWZuZGVmIGRnX2NvbmZpZ1JGX01JTl9SRUNBTElCUkFUSU9OX1RJTUVPVVQKKyNpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApCisjZGVmaW5lIGRnX2NvbmZpZ1JGX01JTl9SRUNBTElCUkFUSU9OX1RJTUVPVVQgICAoMTAwMCkgLy8gfjIgc2VjcworI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KQorI2RlZmluZSBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9USU1FT1VUICAgKDEwMjQpIC8vIH4yIHNlY3MKKyNlbGlmIChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS19SQ1gpCisjZGVmaW5lIGRnX2NvbmZpZ1JGX01JTl9SRUNBTElCUkFUSU9OX1RJTUVPVVQgICAoMTAwMCkKKyNlbHNlIC8qIExQX0NMS19BTlkgKi8KKy8vIE11c3QgYmUgZGVmaW5lZCBpbiB0aGUgY3VzdG9tX2NvbmZpZ188Pi5oIGZpbGUuIFNob3VsZCByZXN1bHQgaW4gfjJzZWMuCisjZW5kaWYKKyNlbmRpZgorCisvKiBNYXhpbXVtIHRpbWUgYmVmb3JlIHBlcmZvcm1pbmcgYW4gUkYgcmVjYWxpYnJhdGlvbiwgaW4gRnJlZVJUT1Mgc2NoZWR1bGVyIHRpY2tzCisgKiBJZiB0aGlzIHRpbWUgaGFzIGVsYXBzZWQsIGFuZCBSRiBpcyBhYm91dCB0byBiZSBwb3dlcmVkIG9mZiwgcmVjYWxpYnJhdGlvbiB3aWxsCisgKiBiZSBkb25lIHVuY29uZGl0aW9uYWxseS4gU2V0IHRvIDAgdG8gZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgKi8KKyNpZm5kZWYgZGdfY29uZmlnUkZfTUFYX1JFQ0FMSUJSQVRJT05fVElNRU9VVAorI2RlZmluZSBkZ19jb25maWdSRl9NQVhfUkVDQUxJQlJBVElPTl9USU1FT1VUICAgKDApIC8vIERpc2FibGVkCisjZW5kaWYKKworLyogVGltZW91dCB2YWx1ZSAoaW4gRnJlZVJUT1Mgc2NoZWR1bGVyIHRpY2tzKSBmb3IgdGltZXIgdG8gaW5pdGlhdGUgUkYgcmVjYWxpYnJhdGlvbi4KKyAqIFRoaXMgd2lsbCBoYXBwZW4gYXQgQU5ZIFRJTUUgUkYgaXMgT04gYW5kIENPTkZJR1VSRUQsIEVWRU4gSUYgQSBNQUMgSVMgUlgvVFhpbmcgRFVSSU5HCisgKiBUSElTIFRJTUUsIGluIGNvbnRyYXJ5IHRvIGRnX2NvbmZpZ1JGX01BWF9SRUNBTElCUkFUSU9OX1RJTUVPVVQsIHRoYXQgd2lsbCBiZQorICogcGVyZm9ybWVkIE9OTFkgd2hlbiBwb3dlcmluZyBvZmYgUkYuCisgKiBUaGlzIGlzIGludGVuZGVkIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgUkYgaXMgYWx3YXlzIG9uLCBzbyB0aGVyZSBpcyBubworICogb3Bwb3J0dW5pdHkgdG8gYmUgcmVjYWxpYnJhdGVkIHRoZSBub3JtYWwgd2F5IChpLmUuIGR1cmluZyBwb3dlcm9mZikKKyAqCisgKiBTZXQgdG8gMCB0byBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSAqLworI2lmbmRlZiBkZ19jb25maWdSRl9SRUNBTElCUkFUSU9OX1RJTUVSX1RJTUVPVVQKKyNkZWZpbmUgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9USU1FUl9USU1FT1VUICgwKSAvLyBEaXNhYmxlZAorI2VuZGlmCisKKworLyogTWluaW11bSB0ZW1wIGRpZmZlcmVuY2UgYmVmb3JlIHBlcmZvcm1pbmcgYW4gUkYgcmVjYWxpYnJhdGlvbiwgaW4gb0MqLworI2lmbmRlZiBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9URU1QX0RJRkYKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdSRl9NSU5fUkVDQUxJQlJBVElPTl9URU1QX0RJRkYgKDUpCisjZWxzZQorICAgICAgICAjZGVmaW5lIGRnX2NvbmZpZ1JGX01JTl9SRUNBTElCUkFUSU9OX1RFTVBfRElGRiAoMTApCisjZW5kaWYKKyNlbmRpZgorCisvKiBEdXJhdGlvbiBvZiByZWNhbGlicmF0aW9uIHByb2NlZHVyZSwgaW4gbHAgY2xrIGN5Y2xlcyAqLworI2lmbmRlZiBkZ19jb25maWdSRl9SRUNBTElCUkFUSU9OX0RVUkFUSU9OCisjIGlmIGRlZmluZWQoQ09ORklHX1VTRV9GVERGKSAmJiBkZWZpbmVkKENPTkZJR19VU0VfQkxFKQorIyAgaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyMgICBkZWZpbmUgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9EVVJBVElPTiAoMjMwKQorIyAgZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorIyAgIGRlZmluZSBkZ19jb25maWdSRl9SRUNBTElCUkFUSU9OX0RVUkFUSU9OIGNtX3JjeF91c18yX2xwY3ljbGVzKCh1aW50MzJfdCkoMjMwICogMzAuNSkpCisjICBlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAvLyBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLiBJdCBzaG91bGQgYmUgfjdtc2VjLgorIyAgZW5kaWYKKyMgZWxzZQorIyAgaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyMgICBkZWZpbmUgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9EVVJBVElPTiAoMTMxKQorIyAgZWxpZiAoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfUkNYKQorIyAgIGRlZmluZSBkZ19jb25maWdSRl9SRUNBTElCUkFUSU9OX0RVUkFUSU9OIGNtX3JjeF91c18yX2xwY3ljbGVzKCh1aW50MzJfdCkoMTMxICogMzAuNSkpCisjICBlbHNlIC8qIExQX0NMS19BTlkgKi8KKyAgICAvLyBNdXN0IGJlIGRlZmluZWQgaW4gdGhlIGN1c3RvbV9jb25maWdfPD4uaCBmaWxlLiBJdCBzaG91bGQgYmUgfjRtc2VjLgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ1JGX0lGRl9DQUxJQlJBVElPTl9USU1FT1VUCisjaWYgKChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjAwMCkgfHwgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLXzMyNzY4KSkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdSRl9JRkZfQ0FMSUJSQVRJT05fVElNRU9VVCAgICAgKDQwKQorI2VsaWYgKGRnX2NvbmZpZ1VTRV9MUF9DTEsgPT0gTFBfQ0xLX1JDWCkKKyAgICAgICAgI2RlZmluZSBkZ19jb25maWdSRl9JRkZfQ0FMSUJSQVRJT05fVElNRU9VVCAgICAgY21fcmN4X3VzXzJfbHBjeWNsZXMoKHVpbnQzMl90KSg0MCAqIDMwLjUpKQorI2Vsc2UgLyogTFBfQ0xLX0FOWSAqLworLy8gTXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjdXN0b21fY29uZmlnXzw+LmggZmlsZS4gSXQgc2hvdWxkIGJlIH4xLjJtc2VjLgorIyAgZW5kaWYKKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAqIFx9CisgKi8KKworLyoqCisgKiBcYWRkdG9ncm91cCBCTEVfRVZFTlRfTk9USUZJQ0FUSU9OUworICoKKyAqIFxicmllZiBEb3h5Z2VuIGRvY3VtZW50YXRpb24gaXMgbm90IHlldCBhdmFpbGFibGUgZm9yIHRoaXMgbW9kdWxlLgorICogICAgICAgIFBsZWFzZSBjaGVjayB0aGUgc291cmNlIGNvZGUgZmlsZShzKQorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUJMRSBldmVudCBub3RpZmljYXRpb25zIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBCTEUgSVNSIGV2ZW50IE5vdGlmaWNhdGlvbnMKKyAqCisgKiBUaGlzIGZhY2lsaXR5IGVuYWJsZXMgdGhlIHVzZXIgYXBwIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBmb3IgQkxFCisgKiBJU1IgZXZlbnRzLiBUaGVzZSBldmVudHMgY2FuIGJlIHJlY2VpdmVkIGVpdGhlciBkaXJlY3RseSBmcm9tIGluc2lkZQorICogdGhlIEJMRSBJU1IsIG9yIGFzIHRhc2sgbm90aWZpY2F0aW9ucyB0byB0aGUgQXBwbGljYXRpb24gVGFzaworICogcmVnaXN0ZXJlZCB0byB0aGUgQkxFIG1hbmFnZXIuCisgKgorICogVG8gZW5hYmxlLCBkZWZpbmUgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX1RZUEUgdG8gZWl0aGVyCisgKiBCTEVfRVZFTlRfTk9USUZfVVNFUl9JU1Igb3IgQkxFX0VWRU5UX05PVElGX1VTRVJfVEFTSy4KKyAqCisgKiAtIFdoZW4gZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX1RZUEUgPT0gQkxFX0VWRU5UX05PVElGX1VTRVJfSVNSLCB0aGUgdXNlcgorICogICBjYW4gZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zIG9uIGhpcyBhcHAgY29uZmlndXJhdGlvbjoKKyAqCisgKiAgIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0VORF9FVkVOVCAgICA6IFRoZSBCTEUgRW5kIEV2ZW50CisgKiAgIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0NTQ05UX0VWRU5UICA6IFRoZSBCTEUgQ1NDTlQgRXZlbnQKKyAqICAgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX0hPT0tfRklORV9FVkVOVCAgIDogVGhlIEJMRSBGSU5FIEV2ZW50CisgKgorICogICBUaGVzZSBtYWNyb3MgbXVzdCBiZSBhY3R1YWxseSBzZXQgdG8gdGhlIG5hbWVzIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluc2lkZQorICogICB0aGUgdXNlciBhcHBsaWNhdGlvbiwgaGF2aW5nIGEgcHJvdG90eXBlIG9mCisgKgorICogICAgIHZvaWQgZnVuYyh2b2lkKTsKKyAqCisgKiAgIChUaGUgdXNlciBhcHAgZG9lcyBub3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSB0aGUgcHJvdG90eXBlKS4KKyAqCisgKiAgIElmIG9uZSBvZiB0aGVzZSBtYWNyb3MgaXMgbm90IGRlZmluZWQsIHRoZSByZXNwZWN0aXZlIG5vdGlmaWNhdGlvbgorICogICB3aWxsIGJlIHN1cHByZXNzZWQuCisgKgorICogICBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGluIElTUiBjb250ZXh0LCBkaXJlY3RseSBmcm9tIHRoZQorICogICBCTEUgSVNSLiBUaGV5IHNob3VsZCB0aGVyZWZvcmUgYmUgdmVyeSBmYXN0IGFuZCBzaG91bGQgTkVWRVIgYmxvY2suCisgKgorICogLSBXaGVuIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9UWVBFID09IEJMRV9FVkVOVF9OT1RJRl9VU0VSX1RBU0ssIHRoZSB1c2VyCisgKiAgIGFwcCB3aWxsIHJlY2VpdmUgdGFzayBub3RpZmljYXRpb25zIG9uIHRoZSB0YXNrIHJlZ2lzdGVyZWQgdG8gdGhlIEJMRQorICogICBtYW5hZ2VyLgorICoKKyAqICAgTm90aWZpY2F0aW9ucyB3aWxsIGJlIHJlY2VpdmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgYml0IG1hc2tzOgorICoKKyAqICAgLSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfTUFTS19FTkRfRVZFTlQ6IEVuZCBFdmVudCBNYXNrIChEZWY6IGJpdCAyNCkKKyAqICAgLSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfTUFTS19DU0NOVF9FVkVOVDogQ1NDTlQgRXZlbnQgTWFzayAoRGVmOiBiaXQgMjUpCisgKiAgIC0gZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX01BU0tfRklORV9FVkVOVDogRklORSBFdmVudCBNYXNrIChEZWY6IGJpdCAyNikKKyAqCisgKiAgIFRoZXNlIG1hY3JvcywgZGVmaW5pbmcgdGhlIHRhc2sgbm90aWZpY2F0aW9uIGJpdCBtYXNrcywgY2FuIGJlIHJlZGVmaW5lZCBhcworICogICBuZWVkZWQuCisgKgorICogICBJZiBvbmUgb2YgdGhlIG1hY3JvcyBmb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHByZXNlbnRlZCBpbiB0aGUgcHJldmlvdXMKKyAqICAgc2VjdGlvbiAoZm9yIGRpcmVjdCBJU1Igbm90aWZpY2F0aW9ucykgaXMgZGVmaW5lZCwgd2hpbGUgaW4gdGhpcyBtb2RlLAorICogICB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBuYW1lIHdpbGwgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGlzcgorICogICBpbnN0ZWFkIG9mIHNlbmRpbmcgYSB0YXNrIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV2ZW50IHRvCisgKiAgIHRoZSBhcHAgdGFzay4KKyAqCisgKiAgIE1hY3JvIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9SVU5USU1FX0NPTlRST0wgKERlZmF1bHQ6IDEpIGVuYWJsZXMvZGlzYWJsZXMKKyAqICAgcnVudGltZSBjb250cm9sL21hc2tpbmcgb2Ygbm90aWZpY2F0aW9ucy4KKyAqCisgKiAgIElmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9SVU5USU1FX0NPTlRST0wgPT0gMSwgdGhlbiB0YXNrIG5vdGlmaWNhdGlvbnMKKyAqICAgbXVzdCBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZQorICogICBibGVfZXZlbnRfbm90aWZfW2VuYWJsZXxkaXNhYmxlXV9bZW5kfGNzY250fGZpbmVdX2V2ZW50KCkgZnVuY3Rpb25zLgorICogICBCeSBkZWZhdWx0IGFsbCBub3RpZmljYXRpb25zIGFyZSBkaXNhYmxlZC4KKyAqCisgKiAgIElmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9SVU5USU1FX0NPTlRST0wgPT0gMCwgYWxsIG5vdGlmaWNhdGlvbnMgd2lsbAorICogICBiZSBzZW50IHVuY29uZGl0aW9uYWxseSB0byB0aGUgYXBwbGljYXRpb24gdGFzay4KKyAqCisgKi8KKyNpZm5kZWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX1RZUEUKKyMgZGVmaW5lIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9UWVBFIEJMRV9FVkVOVF9OT1RJRl9VU0VSX0lTUgorI2VuZGlmCisKKyNpZiBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfVFlQRSA9PSBCTEVfRVZFTlRfTk9USUZfVVNFUl9UQVNLCisKKy8qIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQkxFIGV2ZW50IHRhc2sgbm90aWZpY2F0aW9ucy4gVGhpcworICogaW1wbGVtZW50YXRpb24gYWxsb3dzIGEgdXNlciB0YXNrIHRvIHJlZ2lzdGVyIGZvciBub3RpZmljYXRpb25zLAorICogYW5kIHRvIGdldCB0YXNrIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBhdmFpbGFibGUgZXZlbnRzCisgKi8KKworLyogRGVmYXVsdCB0YXNrIG5vdGlmaWNhdGlvbiBtYXNrcyBmb3IgdGhlIHZhcmlvdXMgZXZlbnRzIGZvciB3aGljaAorICogdGhlIGZyYW1ld29yayBwcm92aWRlcyBub3RpZmljYXRpb25zCisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9NQVNLX0VORF9FVkVOVAorIyAgZGVmaW5lIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9NQVNLX0VORF9FVkVOVCAoMSA8PCAyNCkKKyMgZW5kaWYKKworIyBpZm5kZWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX01BU0tfQ1NDTlRfRVZFTlQKKyMgIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfTUFTS19DU0NOVF9FVkVOVCAoMSA8PCAyNSkKKyMgZW5kaWYKKworIyBpZm5kZWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX01BU0tfRklORV9FVkVOVAorIyAgZGVmaW5lIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9NQVNLX0ZJTkVfRVZFTlQgKDEgPDwgMjYpCisjIGVuZGlmCisKKy8qIEltcGxlbWVudCBldmVudCBob29rIGZ1bmN0aW9ucyAqLworIyBpZm5kZWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX0hPT0tfRU5EX0VWRU5UCisjICBkZWZpbmUgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX0hPT0tfRU5EX0VWRU5UIGJsZV9ldmVudF9ub3RpZl9hcHBfdGFza19lbmRfZXZlbnQKKyMgZW5kaWYKKworIyBpZm5kZWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX0hPT0tfQ1NDTlRfRVZFTlQKKyMgIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfSE9PS19DU0NOVF9FVkVOVCBibGVfZXZlbnRfbm90aWZfYXBwX3Rhc2tfY3NjbnRfZXZlbnQKKyMgZW5kaWYKKworIyBpZm5kZWYgZGdfY29uZmlnQkxFX0VWRU5UX05PVElGX0hPT0tfRklORV9FVkVOVAorIyAgZGVmaW5lIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9IT09LX0ZJTkVfRVZFTlQgYmxlX2V2ZW50X25vdGlmX2FwcF90YXNrX2ZpbmVfZXZlbnQKKyMgZW5kaWYKKworLyoKKyAqIEFsbG93IHJ1bnRpbWUgY29udHJvbCBvZiAodW4pbWFza2luZyBub3RpZmljYXRpb25zCisgKi8KKyMgaWZuZGVmIGRnX2NvbmZpZ0JMRV9FVkVOVF9OT1RJRl9SVU5USU1FX0NPTlRST0wKKyMgIGRlZmluZSBkZ19jb25maWdCTEVfRVZFTlRfTk9USUZfUlVOVElNRV9DT05UUk9MIDEKKyMgZW5kaWYKKworI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCTEUgaG9va3MgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHRvIGJsb2NrIEJMRSBmcm9tIHNsZWVwaW5nIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucworICoKKyAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGRlY2xhcmVkIGFzOgorICogICAgICB1bnNpZ25lZCBjaGFyIG15X2Jsb2NrX3NsZWVwKHZvaWQpOworICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gY29udHJvbHMgd2hldGhlciB0aGUgQkxFIHdpbGwgYmUgYWxsb3dlZCB0byBnbyB0byBzbGVlcCBvciBub3QsCisgKiAgICAgIDA6IHRoZSBCTEUgbWF5IGdvIHRvIHNsZWVwLCBpZiBwb3NzaWJsZQorICogICAgICAxOiB0aGUgQkxFIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHNsZWVwLiBUaGUgY2FsbGVyIChCTEUgQWRhcHRlcikgbWF5IGJsb2NrIG9yIG5vdCwKKyAqICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBCTEUgc3RhY2sgc3RhdHVzLgorICoKKyAqIGRnX2NvbmZpZ0JMRV9IT09LX0JMT0NLX1NMRUVQIHNob3VsZCBiZSBzZXQgdG8gbXlfYmxvY2tfc2xlZXAgaW4gdGhpcyBleGFtcGxlLgorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JMRV9IT09LX0JMT0NLX1NMRUVQCisvKiBBbHJlYWR5IHVuZGVmaW5lZCAtIE5vdGhpbmcgdG8gZG8uICovCisjZW5kaWYKKworLyogTmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgdG8gbW9kaWZ5IHRoZSBQVEkgdmFsdWUgKFBheWxvYWQgVHlwZSBJbmRpY2F0aW9uKSB3aGVuCisgKiBhcmJpdHJhdGlvbiBpcyB1c2VkCisgKgorICogQXJiaXRyYXRpb24gaXMgbmVlZGVkIG9ubHkgd2hlbiBhbm90aGVyIGV4dGVybmFsIHJhZGlvIGlzIHByZXNlbnQuIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGRlY2xhcmVkCisgKiBhczoKKyAqICAgICAgdW5zaWduZWQgY2hhciBteV9wdGlfbW9kaWZ5KHZvaWQpOworICogRGV0YWlscyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHN1Y2ggYSBmdW5jdGlvbiB3aWxsIGJlIHByb3ZpZGVkIHdoZW4gdGhlIGV4dGVybmFsIHJhZGlvCisgKiBhcmJpdHJhdGlvbiBmdW5jdGlvbmFsaXR5IGlzIGludGVncmF0ZWQuCisgKgorICogZGdfY29uZmlnQkxFX0hPT0tfUFRJX01PRElGWSBzaG91bGQgYmUgc2V0IHRvIG15X3B0aV9tb2RpZnkgaW4gdGhpcyBleGFtcGxlLgorICoKKyAqIFNlZSBhbHNvIHRoZSBjb21tZW50IGFib3V0IHRoZSA8QkxFIGNvZGUgaG9va3M+IGluIGJsZV9jb25maWcuaCBmb3IgbW9yZSBpbmZvLgorICovCisjaWZuZGVmIGRnX2NvbmZpZ0JMRV9IT09LX1BUSV9NT0RJRlkKKy8qIEFscmVhZHkgdW5kZWZpbmVkIC0gTm90aGluZyB0byBkby4gKi8KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGFkZHRvZ3JvdXAgREVCVUdfU0VUVElOR1MKKyAqCisgKiBceworICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIHJlbGF0ZWQgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIE1vbml0b3IgT1MgaGVhcCBhbGxvY2F0aW9ucworICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsfQorICovCisjaWZuZGVmIGRnX2NvbmZpZ1RSQUNLX09TX0hFQVAKKyNkZWZpbmUgZGdfY29uZmlnVFJBQ0tfT1NfSEVBUCAgICAgICAgICAoMCkKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXH0KKyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhlYXAgc2l6ZSBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIEhlYXAgc2l6ZSBmb3IgdXNlZCBsaWJjIG1hbGxvYygpCisgKgorICogU3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgUkFNIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGhlYXAgZm9yIGxpYmMgbWFsbG9jKCkgZnVuY3Rpb24uCisgKiBJdCBjYW4gYmUgY29uZmlndXJlZCBpbiBiYXJlIG1ldGFsIHByb2plY3RzIHRvIG1hdGNoIGFwcGxpY2F0aW9uJ3MgcmVxdWlyZW1lbnRzLgorICoKKyAqIFxic3BfZGVmYXVsdF9ub3Rle1xic3BfY29uZmlnX29wdGlvbl9hcHAsIFxic3BfY29uZmlnX29wdGlvbl9leHBlcnRfb25seX0KKyAqLworI2lmbmRlZiBfX0hFQVBfU0laRQorIyBpZiBkZWZpbmVkIChDT05GSUdfUkVUQVJHRVQpIHx8IGRlZmluZWQgKENPTkZJR19SVFQpCisjICBkZWZpbmUgX19IRUFQX1NJWkUgIDB4MDYwMAorIyBlbHNlCisjICBkZWZpbmUgX19IRUFQX1NJWkUgIDB4MDEwMAorIyBlbmRpZgorI2VuZGlmCisKKy8qIGZsYWcgdXNlZCBieSBsaW5rZXIgc2NyaXB0cyAqLworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKQorI2RlZmluZSBfX0hFQVBfSVNfTEVTU19USEFOXzB4MjAwICAgICAgICAgICAgICAgKF9fSEVBUF9TSVpFIDwgMHgyMDApCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhY2sgc2l6ZSBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICogXGJyaWVmIFN0YWNrIHNpemUgZm9yIG1haW4oKSBmdW5jdGlvbiBhbmQgaW50ZXJydXB0IGhhbmRsZXJzLgorICoKKyAqIFNwZWNpZmllcyB0aGUgYW1vdW50IG9mIFJBTSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBzdGFjayBmb3IgdGhlIG1haW4oKSBmdW5jdGlvbiBhbmQgdGhlIGludGVycnVwdAorICogaGFuZGxlcnMuCisgKgorICogXGJzcF9kZWZhdWx0X25vdGV7XGJzcF9jb25maWdfb3B0aW9uX2FwcCwgXGJzcF9jb25maWdfb3B0aW9uX2V4cGVydF9vbmx5fQorICovCisjaWZuZGVmIF9fU1RBQ0tfU0laRQorI2RlZmluZSBfX1NUQUNLX1NJWkUgIDB4MDIwMAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUkYgRkVNIENPTkZJR1VSQVRJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSAiYnNwX2ZlbS5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREVCVUcgQ09ORklHVVJBVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSAiYnNwX2RlYnVnLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisKKyNlbmRpZiAvKiBCU1BfREVGQVVMVFNfSF8gKi8KKworLyoqCitcfQorXH0KK1x9CisqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9kZWZpbml0aW9ucy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvY29uZmlnL2JzcF9kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDE2MGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2RlZmluaXRpb25zLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgQlNQX0NPTkZJRworICogXHsKKyAqIFxhZGR0b2dyb3VwIEJTUF9DT05GSUdfREVGSU5JVElPTlMKKyAqCisgKiBcYnJpZWYgRG94eWdlbiBkb2N1bWVudGF0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZvciB0aGlzIG1vZHVsZS4KKyAqICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZpbGUocykKKyAqCisgKlx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGJzcF9kZWZpbml0aW9ucy5oCisgKgorICogQGJyaWVmIEJvYXJkIFN1cHBvcnQgUGFja2FnZS4gU3lzdGVtIENvbmZpZ3VyYXRpb24gZmlsZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgQlNQX0RFRklOSVRJT05TX0hfCisjZGVmaW5lIEJTUF9ERUZJTklUSU9OU19IXworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5lcmljIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBMUF9DTEtfMzIwMDAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTFBfQ0xLXzMyNzY4ICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIExQX0NMS19SQ1ggICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBMUF9DTEtfQU5ZICAgICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBMUF9DTEtfSVNfQU5BTE9HICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTFBfQ0xLX0lTX0RJR0lUQUwgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTU9ERV9JU19NSVJST1JFRCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1PREVfSVNfQ0FDSEVEICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNT0RFX0lTX1JBTSAgICAgICAgICAgICAgICAgICAgIE1PREVfSVNfTUlSUk9SRUQKKworI2RlZmluZSBOT05fVk9MQVRJTEVfSVNfT1RQICAgICAgICAgICAgIDAgICAgICAgLy8gQ29kZSBpcyBpbiBPVFAKKyNkZWZpbmUgTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIICAgICAgICAgICAxICAgICAgIC8vIENvZGUgaXMgaW4gUVNQSSBGbGFzaAorI2RlZmluZSBOT05fVk9MQVRJTEVfSVNfTk9ORSAgICAgICAgICAgIDIgICAgICAgLy8gRGVidWcgbW9kZSEgQ29kZSBpcyBpbiBSQU0hCisKKyNkZWZpbmUgRVhUX0NSWVNUQUxfSVNfMTZNICAgICAgICAgICAgICAwCisjZGVmaW5lIEVYVF9DUllTVEFMX0lTXzMyTSAgICAgICAgICAgICAgMQorCisjZGVmaW5lIERFVkVMT1BNRU5UX01PREUgICAgICAgICAgICAgICAgMCAgICAgICAvLyBDb2RlIGlzIGJ1aWx0IGZvciBkZWJ1Z2dpbmcKKyNkZWZpbmUgUFJPRFVDVElPTl9NT0RFICAgICAgICAgICAgICAgICAxICAgICAgIC8vIENvZGUgaXMgYnVpbHQgZm9yIHByb2R1Y3Rpb24KKworI2RlZmluZSBGTEFTSF9JU19OT1RfQ09OTkVDVEVEICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfQ09OTkVDVEVEX1RPXzFWOCAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX0NPTk5FQ1RFRF9UT18xVjhQICAgICAgICAgMgorCisjZGVmaW5lIEJBVFRFUllfVFlQRV8yeE5JTUggICAgICAgICAgICAgMAorI2RlZmluZSBCQVRURVJZX1RZUEVfM3hOSU1IICAgICAgICAgICAgIDEKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX0xJQ09PMiAgICAgICAgICAgICAyICAgICAgIC8vIDIuNVYgZGlzY2hhcmdlIHZvbHRhZ2UsIDQuMjBWIGNoYXJnZSB2b2x0YWdlCisjZGVmaW5lIEJBVFRFUllfVFlQRV9MSU1OMk80ICAgICAgICAgICAgMyAgICAgICAvLyAyLjVWIGRpc2NoYXJnZSB2b2x0YWdlLCA0LjIwViBjaGFyZ2Ugdm9sdGFnZQorI2RlZmluZSBCQVRURVJZX1RZUEVfTk1DICAgICAgICAgICAgICAgIDQgICAgICAgLy8gMi41ViBkaXNjaGFyZ2Ugdm9sdGFnZSwgNC4yMFYgY2hhcmdlIHZvbHRhZ2UKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX0xJRkVQTzQgICAgICAgICAgICA1ICAgICAgIC8vIDIuNVYgZGlzY2hhcmdlIHZvbHRhZ2UsIDMuNjVWIGNoYXJnZSB2b2x0YWdlCisjZGVmaW5lIEJBVFRFUllfVFlQRV9MSU5JQ09BSU8yICAgICAgICAgNiAgICAgICAvLyAzLjBWIGRpc2NoYXJnZSB2b2x0YWdlLCA0LjIwViBjaGFyZ2Ugdm9sdGFnZQorI2RlZmluZSBCQVRURVJZX1RZUEVfQ1VTVE9NICAgICAgICAgICAgIDcKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX05PX1JFQ0hBUkdFICAgICAgICA4CisjZGVmaW5lIEJBVFRFUllfVFlQRV9OT19CQVRURVJZICAgICAgICAgOQorCisjZGVmaW5lIEJBVFRFUllfVFlQRV8yeE5JTUhfQURDX1ZPTFRBR0UgICAgICAgICAoMjc4NSkKKyNkZWZpbmUgQkFUVEVSWV9UWVBFXzN4TklNSF9BRENfVk9MVEFHRSAgICAgICAgICg0MDEzKQorI2RlZmluZSBCQVRURVJZX1RZUEVfTElDT08yX0FEQ19WT0xUQUdFICAgICAgICAgKDM0NDApCisjZGVmaW5lIEJBVFRFUllfVFlQRV9MSU1OMk80X0FEQ19WT0xUQUdFICAgICAgICAoMzQ0MCkKKyNkZWZpbmUgQkFUVEVSWV9UWVBFX05NQ19BRENfVk9MVEFHRSAgICAgICAgICAgICgzNDQwKQorI2RlZmluZSBCQVRURVJZX1RZUEVfTElGRVBPNF9BRENfVk9MVEFHRSAgICAgICAgKDI5ODkpCisjZGVmaW5lIEJBVFRFUllfVFlQRV9MSU5JQ09BSU8yX0FEQ19WT0xUQUdFICAgICAoMzQ0MCkKKworLyoKKyAqIFRoZSBzdXBwb3J0ZWQgY2hpcCByZXZpc2lvbnMuCisgKi8KKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19SRVZfQVVUTyAgICAgICAgICAoLTEpCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfUkVWX0EgICAgICAgICAgICAgMAorI2RlZmluZSBCTEFDS19PUkNBX0lDX1JFVl9CICAgICAgICAgICAgIDEKKworLyoKKyAqIFRoZSBzdXBwb3J0ZWQgY2hpcCBzdGVwcGluZ3MuCisgKi8KKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19TVEVQX0FVVE8gICAgICAgICAoLTEpCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfU1RFUF9BICAgICAgICAgICAgMAorI2RlZmluZSBCTEFDS19PUkNBX0lDX1NURVBfQiAgICAgICAgICAgIDEKKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19TVEVQX0MgICAgICAgICAgICAyCisjZGVmaW5lIEJMQUNLX09SQ0FfSUNfU1RFUF9EICAgICAgICAgICAgMworI2RlZmluZSBCTEFDS19PUkNBX0lDX1NURVBfRSAgICAgICAgICAgIDcKKworLyoKKyAqIExlZ2FjeSBESyBtb3RoZXJib2FyZHMsIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBTREsuCisgKiBUaGUgZGVmaW5pdGlvbnMgZXhpc3QganVzdCBzbyB0aGF0IHdlIGRvbid0IGJyZWFrIGNvbXBpbGF0aW9uIG9mIG9sZCBwcm9qZWN0cy4KKyAqLworI2RlZmluZSBCTEFDS19PUkNBX01CX1JFVl9BICAgICAgICAgICAgIDAKKyNkZWZpbmUgQkxBQ0tfT1JDQV9NQl9SRVZfQiAgICAgICAgICAgICAxCisvKgorICogVGhlIHN1cHBvcnRlZCBESyBtb3RoZXJib2FyZHMuCisgKi8KKyNkZWZpbmUgQkxBQ0tfT1JDQV9NQl9SRVZfRCAgICAgICAgICAgICAyCisKKy8qCisgKiBUaGUgY2FjaGUgYXNzb2NpdGl2aXR5IG9wdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0FDSEVfQVNTT0NfQVNfSVMgICAgICAgICAgICAgICAoLTEpICAgIC8vLyBsZWF2ZSBhcyBzZXQgYnkgdGhlIFJPTSBib290ZXIKKyNkZWZpbmUgQ0FDSEVfQVNTT0NfRElSRUNUX01BUCAgICAgICAgICAwICAgICAgIC8vLyBkaXJlY3QtbWFwcGVkCisjZGVmaW5lIENBQ0hFX0FTU09DXzJfV0FZICAgICAgICAgICAgICAgMSAgICAgICAvLy8gMi13YXkgc2V0IGFzc29jaWF0aXZlCisjZGVmaW5lIENBQ0hFX0FTU09DXzRfV0FZICAgICAgICAgICAgICAgMiAgICAgICAvLy8gNC13YXkgc2V0IGFzc29jaWF0aXZlCisKKy8qCisgKiBUaGUgY2FjaGUgbGluZSBzaXplIG9wdGlvbnMuCisgKi8KKyNkZWZpbmUgQ0FDSEVfTElORVNaX0FTX0lTICAgICAgICAgICAgICAoLTEpICAgIC8vLyBsZWF2ZSBhcyBzZXQgYnkgdGhlIFJPTSBib290ZXIKKyNkZWZpbmUgQ0FDSEVfTElORVNaXzhfQllURVMgICAgICAgICAgICAwICAgICAgIC8vLyA4IGJ5dGVzCisjZGVmaW5lIENBQ0hFX0xJTkVTWl8xNl9CWVRFUyAgICAgICAgICAgMSAgICAgICAvLy8gMTYgYnl0ZXMKKyNkZWZpbmUgQ0FDSEVfTElORVNaXzMyX0JZVEVTICAgICAgICAgICAyICAgICAgIC8vLyAzMiBieXRlcworCisvKgorICogVGhlIHN1cHBvcnRlZCBSRiBGcm9udC1FbmQgTW9kdWxlcworICovCisjZGVmaW5lIEZFTV9OT0ZFTSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGRU1fU0tZNjYxMTJfMTEgICAgICAgICAgICAgICAgIDEKKworLyoKKyAqIFRoZSBCTEUgZXZlbnQgbm90aWZpY2F0aW9uIHVzZXIgaG9vayB0eXBlcworICovCisjZGVmaW5lIEJMRV9FVkVOVF9OT1RJRl9VU0VSX0lTUiAgICAgICAgMCAgICAgICAvLy8gVXNlci1kZWZpbmVkIGhvb2tzIGRpcmVjdGx5IGZyb20gSVNSIGNvbnRleHQKKyNkZWZpbmUgQkxFX0VWRU5UX05PVElGX1VTRVJfVEFTSyAgICAgICAxICAgICAgIC8vLyBOb3RpZmljYXRpb24gb2YgdGhlIHVzZXIgdGFzaywgdXNpbmcgdGFzayBub3RpZmljYXRpb25zLgorCisjZW5kaWYgLyogQlNQX0RFRklOSVRJT05TX0hfICovCisKKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2NvbmZpZy9ic3BfZmVtLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2ZlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTNjMGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9jb25maWcvYnNwX2ZlbS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIEJTUF9DT05GSUcKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBSRl9GRU0KKyAqCisgKiBcYnJpZWYgUkYgRnJvbnQtRW5kIG1vZHVsZSBjb25mZ3VyYXRpb24KKyAqCisgKlx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgYnNwX2ZlbS5oCisgKgorICogQGJyaWVmIEJvYXJkIFN1cHBvcnQgUGFja2FnZS4gUkYgRnJvbnQtRW5kIE1vZHVsZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIEJTUF9GRU1fSF8KKyNkZWZpbmUgQlNQX0ZFTV9IXworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJGIEZFTSBkcml2ZXIgKFNLWTY2MTEyLTExKSBjb25maWd1cmF0aW9uIHNldHRpbmdzIC0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBkZ19jb25maWdGRU1fRExHX1JFRl9CT0FSRAorCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTSBGRU1fU0tZNjYxMTJfMTEKKworI2lmIGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMAorI3dhcm5pbmcgU2V0dGluZyBkZ19jb25maWdQT1dFUl8xVjhQIHRvIDEgZm9yIEZFTSB0byB3b3JrCisjdW5kZWYgZGdfY29uZmlnUE9XRVJfMVY4UAorI2RlZmluZSBkZ19jb25maWdQT1dFUl8xVjhQIDEKKyNlbmRpZgorCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMThQCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBUzJfVjE4CisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QT1JUCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVCBIV19HUElPX1BPUlRfNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4KKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4gSFdfR1BJT19QSU5fMworI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCBIV19HUElPX1BPUlRfNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4KKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4gSFdfR1BJT19QSU5fNgorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QT1JUCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUE9SVCBIV19HUElPX1BPUlRfNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QSU4KKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QSU4gSFdfR1BJT19QSU5fMgorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QT1JUCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUE9SVCBIV19HUElPX1BPUlRfNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QSU4KKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QSU4gSFdfR1BJT19QSU5fNQorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QT1JUCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCBIV19HUElPX1BPUlRfNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4KKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4gSFdfR1BJT19QSU5fNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QT1JUCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVCBIV19HUElPX1BPUlRfNAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4KKyNkZWZpbmUgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4gSFdfR1BJT19QSU5fMAorI2VuZGlmCisKKyNlbmRpZiAvKiBkZ19jb25maWdGRU1fRExHX1JFRl9CT0FSRCAqLworCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTQorI2RlZmluZSBkZ19jb25maWdGRU0gRkVNX05PRkVNCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9VU0VfRENGCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfVVNFX0RDRiAxCisjZW5kaWYKKworI2lmbmRlZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhTRVRfRENGCisjZGVmaW5lIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFNFVF9EQ0YgNDcKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFJFU0VUX0RDRgorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhSRVNFVF9EQ0YgMAorI2VuZGlmCisKKyNpZm5kZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYU0VUX0RDRgorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhTRVRfRENGIDEKKyNlbmRpZgorCisjaWZuZGVmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9SWFJFU0VUX0RDRgorI2RlZmluZSBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhSRVNFVF9EQ0YgMjAKKyNlbmRpZgorI2VuZGlmIC8qIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEgKi8KKworI2VuZGlmIC8qIEJTUF9GRU1fSF8gKi8KKworLyoqCitcfQorXH0KK1x9CisqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL0FSTUNNMC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9BUk1DTTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmUzYmUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9BUk1DTTAuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgQVJNQ00wLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3JlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlIGZvcgorICogICAgICAgICAgIEFSTUNNMCBEZXZpY2UgU2VyaWVzCisgKiBAdmVyc2lvbiAgVjMuMDAKKyAqIEBkYXRlICAgICAxNi4gT2N0b2JlciAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWZuZGVmIEFSTUNNMF9ICisjZGVmaW5lIEFSTUNNMF9ICisKKworI2luY2x1ZGUgPGNvcmVfY20wLmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3J0ZXgtTTAgcHJvY2Vzc29yIGFuZCBjb3JlIHBlcmlwaGVyYWxzICAgICAgICAgICAqLworI2luY2x1ZGUgInN5c3RlbV9BUk1DTTAuaCIgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZW5kaWYgIC8qIEFSTUNNMF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL0RBMTQ2ODBCQS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9EQTE0NjgwQkEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZlYmRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9EQTE0NjgwQkEuaApAQCAtMCwwICsxLDEyMTI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBAZmlsZSAgICAgREExNDY4MEJBLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTAgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUgZm9yIERBMTQ2ODBCQSBmcm9tIERpYWxvZy4KKyAqIEB2ZXJzaW9uICBWMS4yCisgKiBAZGF0ZSAgICAgOS4gQXVndXN0IDIwMTYKKyAqIEBub3RlICAgICBHZW5lcmF0ZWQgd2l0aCBTVkRDb252IFYyLjg3ZworICogICAgICAgICAgIGZyb20gQ01TSVMgU1ZEIEZpbGUgJ0RBMTQ2ODBCQS54bWwnCisgKiAgICAgICAgICAgVmVyc2lvbiAxLjIKKyAqLworCisKKworLyoqIEBhZGR0b2dyb3VwIERpYWxvZworICAqIEB7CisgICovCisKKworLyoqIEBhZGR0b2dyb3VwIERBMTQ2ODBCQQorICAqIEB7CisgICovCisKKyNpZm5kZWYgREExNDY4MEJBX0gKKyNkZWZpbmUgREExNDY4MEJBX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEludGVycnVwdCBOdW1iZXIgRGVmaW5pdGlvbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKgorICAqIEBicmllZiBJbnRlcnJ1cHQgTnVtYmVyIERlZmluaXRpb24KKyAgKi8KKwordHlwZWRlZiBlbnVtIHsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIENvcnRleC1NMCBQcm9jZXNzb3IgRXhjZXB0aW9ucyBOdW1iZXJzICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIFJlc2V0X0lSUW4gICAgICAgICAgICAgICAgICAgID0gLTE1LCAgICAgICAgICAgICAgLyohPCAgIDEgIFJlc2V0IFZlY3RvciwgaW52b2tlZCBvbiBQb3dlciB1cCBhbmQgd2FybSByZXNldCAgICAgICAgICAgICAgICAgKi8KKyAgTm9uTWFza2FibGVJbnRfSVJRbiAgICAgICAgICAgPSAtMTQsICAgICAgICAgICAgICAvKiE8ICAgMiAgTm9uIG1hc2thYmxlIEludGVycnVwdCwgY2Fubm90IGJlIHN0b3BwZWQgb3IgcHJlZW1wdGVkICAgICAgICAgICAqLworICBIYXJkRmF1bHRfSVJRbiAgICAgICAgICAgICAgICA9IC0xMywgICAgICAgICAgICAgIC8qITwgICAzICBIYXJkIEZhdWx0LCBhbGwgY2xhc3NlcyBvZiBGYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFNWQ2FsbF9JUlFuICAgICAgICAgICAgICAgICAgID0gIC01LCAgICAgICAgICAgICAgLyohPCAgMTEgIFN5c3RlbSBTZXJ2aWNlIENhbGwgdmlhIFNWQyBpbnN0cnVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgUGVuZFNWX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgLTIsICAgICAgICAgICAgICAvKiE8ICAxNCAgUGVuZGFibGUgcmVxdWVzdCBmb3Igc3lzdGVtIHNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTeXNUaWNrX0lSUW4gICAgICAgICAgICAgICAgICA9ICAtMSwgICAgICAgICAgICAgIC8qITwgIDE1ICBTeXN0ZW0gVGljayBUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgREExNDY4MEJBIFNwZWNpZmljIEludGVycnVwdCBOdW1iZXJzICAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBCTEVfV0FLRVVQX0xQX0lSUW4gICAgICAgICAgICA9ICAgMCwgICAgICAgICAgICAgIC8qITwgICAwICBCTEVfV0FLRVVQX0xQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEJMRV9HRU5fSVJRbiAgICAgICAgICAgICAgICAgID0gICAxLCAgICAgICAgICAgICAgLyohPCAgIDEgIEJMRV9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRERl9XQUtFVVBfSVJRbiAgICAgICAgICAgICAgPSAgIDIsICAgICAgICAgICAgICAvKiE8ICAgMiAgRlRERl9XQUtFVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVERGX0dFTl9JUlFuICAgICAgICAgICAgICAgICA9ICAgMywgICAgICAgICAgICAgIC8qITwgICAzICBGVERGX0dFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFJGQ0FMX0lSUW4gICAgICAgICAgICAgICAgICAgID0gICA0LCAgICAgICAgICAgICAgLyohPCAgIDQgIFJGQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgQ09FWF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgIDUsICAgICAgICAgICAgICAvKiE8ICAgNSAgQ09FWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBDUllQVE9fSVJRbiAgICAgICAgICAgICAgICAgICA9ICAgNiwgICAgICAgICAgICAgIC8qITwgICA2ICBDUllQVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIE1STV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gICA3LCAgICAgICAgICAgICAgLyohPCAgIDcgIE1STSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgVUFSVF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgIDgsICAgICAgICAgICAgICAvKiE8ICAgOCAgVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBVQVJUMl9JUlFuICAgICAgICAgICAgICAgICAgICA9ICAgOSwgICAgICAgICAgICAgIC8qITwgICA5ICBVQVJUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEkyQ19JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDEwLCAgICAgICAgICAgICAgLyohPCAgMTAgIEkyQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSTJDMl9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgMTEsICAgICAgICAgICAgICAvKiE8ICAxMSAgSTJDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTUElfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAxMiwgICAgICAgICAgICAgIC8qITwgIDEyICBTUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFNQSTJfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDEzLCAgICAgICAgICAgICAgLyohPCAgMTMgIFNQSTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgQURDX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAgMTQsICAgICAgICAgICAgICAvKiE8ICAxNCAgQURDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBLRVlCUkRfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAxNSwgICAgICAgICAgICAgIC8qITwgIDE1ICBLRVlCUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIElSR0VOX0lSUW4gICAgICAgICAgICAgICAgICAgID0gIDE2LCAgICAgICAgICAgICAgLyohPCAgMTYgIElSR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgV0tVUF9HUElPX0lSUW4gICAgICAgICAgICAgICAgPSAgMTcsICAgICAgICAgICAgICAvKiE8ICAxNyAgV0tVUF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTV1RJTTBfSVJRbiAgICAgICAgICAgICAgICAgICA9ICAxOCwgICAgICAgICAgICAgIC8qITwgIDE4ICBTV1RJTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFNXVElNMV9JUlFuICAgICAgICAgICAgICAgICAgID0gIDE5LCAgICAgICAgICAgICAgLyohPCAgMTkgIFNXVElNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgUVVBREVDX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgMjAsICAgICAgICAgICAgICAvKiE8ICAyMCAgUVVBREVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBVU0JfSVJRbiAgICAgICAgICAgICAgICAgICAgICA9ICAyMSwgICAgICAgICAgICAgIC8qITwgIDIxICBVU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFBDTV9JUlFuICAgICAgICAgICAgICAgICAgICAgID0gIDIyLCAgICAgICAgICAgICAgLyohPCAgMjIgIFBDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgU1JDX0lOX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgMjMsICAgICAgICAgICAgICAvKiE8ICAyMyAgU1JDX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBTUkNfT1VUX0lSUW4gICAgICAgICAgICAgICAgICA9ICAyNCwgICAgICAgICAgICAgIC8qITwgIDI0ICBTUkNfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFZCVVNfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDI1LCAgICAgICAgICAgICAgLyohPCAgMjUgIFZCVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRE1BX0lSUW4gICAgICAgICAgICAgICAgICAgICAgPSAgMjYsICAgICAgICAgICAgICAvKiE8ICAyNiAgRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBSRl9ESUFHX0lSUW4gICAgICAgICAgICAgICAgICA9ICAyNywgICAgICAgICAgICAgIC8qITwgIDI3ICBSRl9ESUFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFRSTkdfSVJRbiAgICAgICAgICAgICAgICAgICAgID0gIDI4LCAgICAgICAgICAgICAgLyohPCAgMjggIFRSTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRENEQ19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAgMjksICAgICAgICAgICAgICAvKiE8ICAyOSAgRENEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBYVEFMMTZSRFlfSVJRbiAgICAgICAgICAgICAgICA9ICAzMCwgICAgICAgICAgICAgIC8qITwgIDMwICBYVEFMMTZSRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFBMTF9MT0NLX0lSUW4gICAgICAgICAgICAgICAgID0gIDMxICAgICAgICAgICAgICAgLyohPCAgMzEgIFBMTF9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gSVJRbl9UeXBlOworCisKKy8qKiBAYWRkdG9ncm91cCBDb25maWd1cmF0aW9uX29mX0NNU0lTX0RBMTQ2ODBCQQorICAqIEB7CisgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICBQcm9jZXNzb3IgYW5kIENvcmUgUGVyaXBoZXJhbCBTZWN0aW9uICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tQ29uZmlndXJhdGlvbiBvZiB0aGUgQ29ydGV4LU0wIFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFscy0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgX19DTTBfUkVWICAgICAgICAgICAgICAgICAweDAxMDAgICAgICAgICAgICAvKiE8IENvcnRleC1NMCBDb3JlIFJldmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgIC8qITwgTVBVIHByZXNlbnQgb3Igbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgICAgICAyICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgQml0cyB1c2VkIGZvciBQcmlvcml0eSBMZXZlbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAgICAgIDAgICAgICAgICAgICAvKiE8IFNldCB0byAxIGlmIGRpZmZlcmVudCBTeXNUaWNrIENvbmZpZyBpcyB1c2VkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqIEB9ICovIC8qIEVuZCBvZiBncm91cCBDb25maWd1cmF0aW9uX29mX0NNU0lTICovCisKKyNpbmNsdWRlICJjb3JlX2NtMC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NMCBwcm9jZXNzb3IgYW5kIGNvcmUgcGVyaXBoZXJhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2luY2x1ZGUgInN5c3RlbV9EQTE0NjgwLmgiICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERBMTQ2ODBCQSBTeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgIERldmljZSBTcGVjaWZpYyBQZXJpcGhlcmFsIFNlY3Rpb24gICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiogQGFkZHRvZ3JvdXAgRGV2aWNlX1BlcmlwaGVyYWxfUmVnaXN0ZXJzX0RBMTQ2ODBCQQorICAqIEB7CisgICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhcnQgb2Ygc2VjdGlvbiB1c2luZyBhbm9ueW1vdXMgdW5pb25zICAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorICAjcHJhZ21hIHB1c2gKKyAgI3ByYWdtYSBhbm9uX3VuaW9ucworI2VsaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQorICAjcHJhZ21hIGxhbmd1YWdlPWV4dGVuZGVkCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQoX19UTVM0NzBfXykKKy8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZChfX1RBU0tJTkdfXykKKyAgI3ByYWdtYSB3YXJuaW5nIDU4NgorI2Vsc2UKKyAgI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlCisjZW5kaWYKKworCisKKworCisKKworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICBBRVNfSEFTSCAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQUVTX0hBU0ggcmVnaXN0ZXJzIChBRVNfSEFTSCkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAwMCkgQUVTX0hBU0ggU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDAwKSBDcnlwdG8gQ29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX1NUQVJUX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMDQpIENyeXB0byBTdGFydCBjYWxjdWxhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fRkVUQ0hfQUREUl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAwOCkgQ3J5cHRvIERNQSBmZXRjaCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDBDKSBDcnlwdG8gTGVuZ3RoIG9mIHRoZSBpbnB1dCBibG9jayBpbiBieXRlcyAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX0RFU1RfQUREUl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMTApIENyeXB0byBETUEgZGVzdGluYXRpb24gbWVtb3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAxNCkgQ3J5cHRvIFN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19DTFJJUlFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDE4KSBDcnlwdG8gQ2xlYXIgaW50ZXJydXB0IHJlcXVlc3QgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX01SRUcwX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMUMpIENyeXB0byBNb2RlIGRlcGVuZGVkIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDUllQVE9fTVJFRzFfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAyMDAyMCkgQ3J5cHRvIE1vZGUgZGVwZW5kZWQgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENSWVBUT19NUkVHMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMDI0KSBDcnlwdG8gTW9kZSBkZXBlbmRlZCByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ1JZUFRPX01SRUczX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMjAwMjgpIENyeXB0byBNb2RlIGRlcGVuZGVkIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRFs1M107CisgIF9fSU8gdWludDMyX3QgIENSWVBUT19LRVlTX1NUQVJUOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDIwMTAwKSBDcnlwdG8gRmlyc3QgcG9zaXRpb24gb2YgdGhlIEFFUyBrZXlzIHN0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBBRVNfSEFTSF9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgQU5BTUlTQyAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQU5BTUlTQyByZWdpc3RlcnMgKEFOQU1JU0MpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCMDApIEFOQU1JU0MgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgQU5BX1RFU1RfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCMDIpIEFuYWxvZyB0ZXN0IHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDE2X3QgIENIQVJHRVJfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjA4KSBDaGFyZ2VyIGNvbnRyb2wgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0hBUkdFUl9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCMEEpIENoYXJnZXIgY29udHJvbCByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDSEFSR0VSX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUIwQykgQ2hhcmdlciBzdGF0dXMgYW5kIHRyaW1taW5nIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMlsyNV07CisgIF9fSU8gdWludDE2X3QgIFNPQ19DVFJMMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjQwKSBGdWVsIEdhdWdlIENvbnRyb2wgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU09DX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNDIpIEZ1ZWwgR2F1Z2UgQ29udHJvbCByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTT0NfQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI0NCkgRnVlbCBHYXVnZSBDb250cm9sIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNPQ19BREQyQ0hfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjQ2KSBGdWVsIEdhdWdlIG1hbnVhbGx5IGFkZCBleHRyYSBjaGFyZ2UgdG8gU09DX0NIQVJHRV9DTlRSeF9SRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNPQ19DSEFSR0VfQ05UUjFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjQ4KSBGdWVsIEdhdWdlIENoYXJnZSBjb3VudGVyIGJpdHMgMTUtMCAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU09DX0NIQVJHRV9DTlRSMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNEEpIEZ1ZWwgR2F1Z2UgQ2hhcmdlIGNvdW50ZXIgYml0cyAzMS0xNiAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTT0NfQ0hBUkdFX0NOVFIzX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI0QykgRnVlbCBHYXVnZSBDaGFyZ2UgY291bnRlciBiaXRzIDM5LTMyICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MTZfdCAgU09DX0NIQVJHRV9BVkdfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNTApIEZ1ZWwgR2F1Z2UgQXZlcmFnZSBjaGFyZ2UgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTT0NfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI1MikgRnVlbCBHYXVnZSBTdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNPQ19FWFRfSU5fUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjU0KSBGdWVsIEdhdWdlIGlucHV0IHRlc3QgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU09DX0VYVF9PVVRfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNTYpIEZ1ZWwgR2F1Z2Ugb3V0cHV0IHRlc3QgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDRbMl07CisgIF9fSU8gdWludDE2X3QgIENMS19SRUZfU0VMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjYwKSBTZWxlY3QgY2xvY2sgZm9yIG9zY2lsbGF0b3IgY2FsaWJyYXRpb24gICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLX1JFRl9DTlRfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFCNjIpIENvdW50IHZhbHVlIGZvciBvc2NpbGxhdG9yIGNhbGlicmF0aW9uICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDTEtfUkVGX1ZBTF9MX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUI2NCkgRElWTiByZWZlcmVuY2UgY3ljbGVzLCBsb3dlciAxNiBiaXRzICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENMS19SRUZfVkFMX0hfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQjY2KSBESVZOIHJlZmVyZW5jZSBjeWNsZXMsIHVwcGVyIDE2IGJpdHMgICAgICAgICAgICAgICAgICAgKi8KK30gQU5BTUlTQ19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBBUFUgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQVBVIHJlZ2lzdGVycyAoQVBVKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDAwKSBBUFUgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgU1JDMV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMDApIFNSQzEgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBTUkMxX0lOX0ZTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAwNCkgU1JDMSBTYW1wbGUgaW5wdXQgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFNSQzFfT1VUX0ZTX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDA4KSBTUkMxIFNhbXBsZSBvdXRwdXQgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgU1JDMV9JTjFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMEMpIFNSQzEgZGF0YSBpbiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBTUkMxX0lOMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAxMCkgU1JDMSBkYXRhIGluIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFNSQzFfT1VUMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDE0KSBTUkMxIGRhdGEgb3V0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgU1JDMV9PVVQyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMTgpIFNSQzEgZGF0YSBvdXQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBBUFVfTVVYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAxQykgQVBVIG11eCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENPRUYxMF9TRVQxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDIwKSBTUkMgY29lZmZpY2llbnQgMSwwIHNldCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ09FRjMyX1NFVDFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMjQpIFNSQyBjb2VmZmljaWVudCAzLDIgc2V0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDT0VGNTRfU0VUMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAyOCkgU1JDIGNvZWZmaWNpZW50IDUsNCBzZXQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENPRUY3Nl9TRVQxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MDJDKSBTUkMgY29lZmZpY2llbnQgNyw2IHNldCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ09FRjk4X1NFVDFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQwMzApIFNSQyBjb2VmZmljaWVudCA5LDggc2V0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDT0VGMEFfU0VUMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDAzNCkgU1JDIGNvZWZmaWNpZW50IDEwIHNldCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEWzUwXTsKKyAgX19JTyB1aW50MzJfdCAgUENNMV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQxMDApIFBDTTEgQ29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQ00xX0lOMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDEwNCkgUENNMSBkYXRhIGluIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBDTTFfSU4yX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA0MTA4KSBQQ00xIGRhdGEgaW4gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUENNMV9PVVQxX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDQxMEMpIFBDTTEgZGF0YSBvdXQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQ00xX09VVDJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNDExMCkgUENNMSBkYXRhIG91dCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEFQVV9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICBCTEUgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQkxFIHJlZ2lzdGVycyAoQkxFKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDAwKSBCTEUgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1JXQkxFQ05UTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMDApIEJMRSBDb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfVkVSU0lPTl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAwNCkgVmVyc2lvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SV0JMRUNPTkZfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDA4KSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0lOVENOVExfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMEMpIEludGVycnVwdCBjb250cm9sbGVyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfSU5UU1RBVF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAxMCkgSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9JTlRSQVdTVEFUX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDE0KSBJbnRlcnJ1cHQgcmF3IHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0lOVEFDS19SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMTgpIEludGVycnVwdCBhY2tub3dsZWRnZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQkFTRVRJTUVDTlRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAxQykgQmFzZSB0aW1lIHJlZmVyZW5jZSBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9GSU5FVElNRUNOVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDIwKSBGaW5lIHRpbWUgcmVmZXJlbmNlIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0JEQUREUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMjQpIEJMRSBkZXZpY2UgYWRkcmVzcyBMU0IgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQkRBRERSVV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAyOCkgQkxFIGRldmljZSBhZGRyZXNzIE1TQiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9DVVJSRU5UUlhERVNDUFRSX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDJDKSBSeCBEZXNjcmlwdG9yIFBvaW50ZXIgZm9yIHRoZSBSZWNlaXZlIEJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhaW5lZCBMaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9ERUVQU0xDTlRMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDMwKSBEZWVwLVNsZWVwIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0RFRVBTTFdLVVBfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMzQpIFRpbWUgKG1lYXN1cmVkIGluIExvdyBQb3dlciBjbG9jayBjeWNsZXMpIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWVwIFNsZWVwIE1vZGUgYmVmb3JlIHdha2luZy11cCB0aGUgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0RFRVBTTFNUQVRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwMzgpIER1cmF0aW9uIG9mIHRoZSBsYXN0IGRlZXAgc2xlZXAgcGhhc2UgcmVnaXN0ZXIgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfRU5CUFJFU0VUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDAzQykgVGltZSBpbiBsb3cgcG93ZXIgb3NjaWxsYXRvciBjeWNsZXMgcmVnaXN0ZXIgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9GSU5FQ05UQ09SUl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDQwKSBQaGFzZSBjb3JyZWN0aW9uIHZhbHVlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0JBU0VUSU1FQ05UQ09SUl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNDQpIEJhc2UgVGltZSBDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRFsyXTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX0RJQUdDTlRMX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNTApIERpYWdub3N0aWNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfRElBR1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA1NCkgRGVidWcgdXNlIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9ERUJVR0FERE1BWF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDU4KSBVcHBlciBsaW1pdCBmb3IgdGhlIG1lbW9yeSB6b25lICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0RFQlVHQURETUlOX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNUMpIExvd2VyIGxpbWl0IGZvciB0aGUgbWVtb3J5IHpvbmUgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfRVJST1JUWVBFU1RBVF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA2MCkgRXJyb3IgVHlwZSBTdGF0dXMgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9TV1BST0ZJTElOR19SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDY0KSBTb2Z0d2FyZSBQcm9maWxpbmcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxWzJdOworICBfX0lPIHVpbnQzMl90ICBCTEVfUkFESU9DTlRMMF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA3MCkgUmFkaW8gaW50ZXJmYWNlIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SQURJT0NOVEwxX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDc0KSBSYWRpbyBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1JBRElPQ05UTDJfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwNzgpIFJhZGlvIGludGVyZmFjZSBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUkFESU9DTlRMM19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA3QykgUmFkaW8gaW50ZXJmYWNlIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SQURJT1BXUlVQRE5fUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMDgwKSBSWC9UWCBwb3dlciB1cC9kb3duIHBoYXNlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzNdOworICBfX0lPIHVpbnQzMl90ICBCTEVfQURWQ0hNQVBfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDA5MCkgQWR2ZXJ0aXNpbmcgQ2hhbm5lbCBNYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEM1szXTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX0FEVlRJTV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQTApIEFkdmVydGlzaW5nIFBhY2tldCBJbnRlcnZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQUNUU0NBTlNUQVRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBBNCkgQWN0aXZlIHNjYW4gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENFsyXTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX1dMUFVCQUREUFRSX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQjApIFN0YXJ0IGFkZHJlc3Mgb2YgcHVibGljIGRldmljZXMgbGlzdCAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfV0xQUklWQUREUFRSX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBCNCkgU3RhcnQgYWRkcmVzcyBvZiBwcml2YXRlIGRldmljZXMgbGlzdCAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9XTE5CREVWX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEI4KSBEZXZpY2VzIGluIHdoaXRlIGxpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1OworICBfX0lPIHVpbnQzMl90ICBCTEVfQUVTQ05UTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBDMCkgU3RhcnQgQUVTIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9BRVNLRVkzMV8wX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEM0KSBBRVMgZW5jcnlwdGlvbiBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0FFU0tFWTYzXzMyX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwQzgpIEFFUyBlbmNyeXB0aW9uIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQUVTS0VZOTVfNjRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBDQykgQUVTIGVuY3J5cHRpb24ga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9BRVNLRVkxMjdfOTZfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEQwKSBBRVMgZW5jcnlwdGlvbiBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0FFU1BUUl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRDQpIFBvaW50ZXIgdG8gdGhlIGJsb2NrIHRvIGVuY3J5cHQvZGVjcnlwdCAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfVFhNSUNWQUxfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBEOCkgQUVTIC8gQ0NNIHBsYWluIE1JQyB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SWE1JQ1ZBTF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMERDKSBBRVMgLyBDQ00gcGxhaW4gTUlDIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX1JGVEVTVENOVExfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRTApIFJGIFRlc3RpbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfUkZURVNUVFhTVEFUX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBFNCkgUkYgVGVzdGluZyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9SRlRFU1RSWFNUQVRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEU4KSBSRiBUZXN0aW5nIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2OworICBfX0lPIHVpbnQzMl90ICBCTEVfVElNR0VOQ05UTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBGMCkgVGltaW5nIEdlbmVyYXRvciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9HUk9TU1RJTVRHVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMEY0KSBHcm9zcyBUaW1lciBUYXJnZXQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0ZJTkVUSU1UR1RfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAwRjgpIEZpbmUgVGltZXIgVGFyZ2V0IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfU0FNUExFQ0xLX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDBGQykgU2FtcGxlcyB0aGUgQmFzZSBUaW1lIENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9DT0VYSUZDTlRMMF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMTAwKSBDb2V4aXN0ZW5jZSBpbnRlcmZhY2UgQ29udHJvbCAwIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0NPRVhJRkNOVEwxX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAxMDQpIENvZXhpc3RlbmNlIGludGVyZmFjZSBDb250cm9sIDEgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfQkxFTVBSSU8wX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDEwOCkgQ29leGlzdGVuY2UgaW50ZXJmYWNlIFByaW9yaXR5IDAgUmVnaXN0ZXIgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEJMRV9CTEVNUFJJTzFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMTBDKSBDb2V4aXN0ZW5jZSBpbnRlcmZhY2UgUHJpb3JpdHkgMSBSZWdpc3RlciAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzYwXTsKKyAgX19JTyB1aW50MzJfdCAgQkxFX0NOVEwyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAyMDApIEJMRSBDb250cm9sIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDg7CisgIF9fSU8gdWludDMyX3QgIEJMRV9FTV9CQVNFX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDAwMjA4KSBFeGNoYW5nZSBNZW1vcnkgQmFzZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQkxFX0RJQUdDTlRMMl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwMDAyMEMpIERlYnVnIHVzZSBvbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBCTEVfRElBR0NOVEwzX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDAwMDIxMCkgRGVidWcgdXNlIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEJMRV9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIENBQ0hFICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQ0FDSEUgcmVnaXN0ZXJzIChDQUNIRSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAwMCkgQ0FDSEUgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDAwKSBDYWNoZSBjb250cm9sIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ0FDSEVfTE5TSVpFQ0ZHX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMDQpIENhY2hlIGxpbmUgc2l6ZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9BU1NPQ0NGR19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAwOCkgQ2FjaGUgYXNzb2NpYXRpdml0eSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEWzVdOworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAyMCkgQ2FjaGUgY29udHJvbCByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDI0KSBDYWNoZSBjb250cm9sIHJlZ2lzdGVyIDMgKGZvciB0aGUgQ2FjaGUgQ29udHJvbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiByZXNldCB2YWx1ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX01STV9ISVRTX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDI4KSBDYWNoZSBNUk0gKE1pc3MgUmF0ZSBNb25pdG9yKSBISVRTIHJlZ2lzdGVyICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ0FDSEVfTVJNX01JU1NFU19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMkMpIENhY2hlIE1STSAoTWlzcyBSYXRlIE1vbml0b3IpIE1JU1NFUyByZWdpc3RlciAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBDQUNIRV9NUk1fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDBDMzAzMCkgQ2FjaGUgTVJNIChNaXNzIFJhdGUgTW9uaXRvcikgQ09OVFJPTCByZWdpc3RlciAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIENBQ0hFX01STV9USU5UX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDM0KSBDYWNoZSBNUk0gKE1pc3MgUmF0ZSBNb25pdG9yKSBUSU1FIElOVEVSVkFMIHJlZ2lzdGVyICAgKi8KKyAgX19JTyB1aW50MzJfdCAgQ0FDSEVfTVJNX1RIUkVTX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwQzMwMzgpIENhY2hlIE1STSAoTWlzcyBSYXRlIE1vbml0b3IpIFRIUkVTSE9MRCByZWdpc3RlciAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDFbNV07CisgIF9fSU8gdWludDMyX3QgIFNXRF9SRVNFVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMEMzMDUwKSBTV0QgSFcgcmVzZXQgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gQ0FDSEVfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgIENISVBfVkVSU0lPTiAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIENISVBfVkVSU0lPTiByZWdpc3RlcnMgKENISVBfVkVSU0lPTikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwMCkgQ0hJUF9WRVJTSU9OIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfSUQxX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjAwKSBDaGlwIGlkZW50aWZpY2F0aW9uIHJlZ2lzdGVyIDEuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgQ0hJUF9JRDJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMDEpIENoaXAgaWRlbnRpZmljYXRpb24gcmVnaXN0ZXIgMi4gICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX0lEM19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwMikgQ2hpcCBpZGVudGlmaWNhdGlvbiByZWdpc3RlciAzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfU1dDX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjAzKSBTb2Z0d2FyZSBjb21wYXRpYmlsaXR5IHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgQ0hJUF9SRVZJU0lPTl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMDQpIENoaXAgcmV2aXNpb24gcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX0NPTkZJRzFfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwNSkgQ2hpcCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfQ09ORklHMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjA2KSBDaGlwIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgQ0hJUF9DT05GSUczX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMDcpIENoaXAgY29uZmlndXJhdGlvbiByZWdpc3RlciAzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50OF90ICAgQ0hJUF9URVNUMV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMyMEEpIENoaXAgdGVzdCByZWdpc3RlciAxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQ4X3QgICBDSElQX1RFU1QyX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzIwQikgQ2hpcCB0ZXN0IHJlZ2lzdGVyIDIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDhfdCAgIENISVBfVEVTVDNfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMjBDKSBDaGlwIHRlc3QgcmVnaXN0ZXIgMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gQ0hJUF9WRVJTSU9OX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgQ09FWCAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBDT0VYIHJlZ2lzdGVycyAoQ09FWCkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYwMCkgQ09FWCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjAwKSBDT0VYIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9TVEFUX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMDIpIENPRVggU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1NUQVQyX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYwNCkgQ09FWCBTdGF0dXMgMiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfSU5UX01BU0tfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjA2KSBDT0VYIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9JTlRfU1RBVF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMDgpIENPRVggSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX0JMRV9QVElfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYwQSkgQ09FWCBCTEUgUFRJIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfRlRERl9QVElfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjBDKSBDT0VYIEZUREYgUFRJIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRURbMl07CisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjEyKSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkkyX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMTQpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTNfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYxNikgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJNF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjE4KSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkk1X1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMUEpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTZfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYxQykgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJN19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjFFKSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkk4X1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMjApIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTlfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYyMikgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJMTBfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjI0KSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkkxMV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMjYpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTEyX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYyOCkgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENPRVhfUFJJMTNfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRjJBKSBDT0VYIFByaW9yaXR5IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ09FWF9QUkkxNF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJGMkMpIENPRVggUHJpb3JpdHkgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDT0VYX1BSSTE1X1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkYyRSkgQ09FWCBQcmlvcml0eSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IENPRVhfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIENSR19QRVIgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIENSR19QRVIgcmVnaXN0ZXJzIChDUkdfUEVSKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQzAwKSBDUkdfUEVSIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIENMS19QRVJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQzA0KSBQZXJpcGhlcmFsIGRpdmlkZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxWzI5XTsKKyAgX19JTyB1aW50MTZfdCAgUENNX0RJVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFDNDApIFBDTSBkaXZpZGVyIGFuZCBlbmFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQQ01fRkRJVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUM0MikgUENNIGZyYWN0aW9uYWwgZGl2aXNpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBETV9ESVZfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQzQ0KSBQRE0gZGl2aWRlciBhbmQgZW5hYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1JDX0RJVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFDNDYpIFNSQyBkaXZpZGVyIGFuZCBlbmFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBFSF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUM0OCkgRUhfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQlBBRF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQzRBKSBVU0IgcGFkcyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gQ1JHX1BFUl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgQ1JHX1RPUCAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgQ1JHX1RPUCByZWdpc3RlcnMgKENSR19UT1ApCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMDApIENSR19UT1AgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDTEtfQU1CQV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAwMCkgSENMSywgUENMSywgZGl2aWRlciBhbmQgY2xvY2sgZ2F0ZXMgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENMS19GUkVRX1RSSU1fUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDAyKSBYdGFsIGZyZXF1ZW5jeSB0cmltbWluZyByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIENMS19SQURJT19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDA4KSBSYWRpbyBQTEwgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMEEpIENsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDTEtfVE1SX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAwQykgQ2xvY2sgY29udHJvbCBmb3IgdGhlIHRpbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTsKKyAgX19JTyB1aW50MTZfdCAgUE1VX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMTApIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTWVNfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAxMikgU3lzdGVtIENvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNZU19TVEFUX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDE0KSBTeXN0ZW0gc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVFJJTV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMTYpIENvbnRyb2wgdHJpbW1pbmcgb2YgdGhlIFhUQUwxNk0gICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDJbMl07CisgIF9fSU8gdWludDE2X3QgIENMS18zMktfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDIwKSAzMiBrSHogb3NjaWxsYXRvciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0xLXzE2TV9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMjIpIDE2IE1IeiBSQyBhbmQgeHRhbCBvc2NpbGxhdG9yIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDTEtfUkNYMjBLX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAyNCkgMjBLSHogUlhDLW9zY2lsbGF0b3IgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MTZfdCAgQkFOREdBUF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMjgpIGJhbmRnYXAgdHJpbW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBBTkFfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAyQSkgc3RhdHVzIGJpdCBvZiBhbmFsb2cgKHBvd2VyIG1hbmFnZW1lbnQpIGNpcmN1aXRzICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNUQVJUVVBfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDJDKSBTdGFydHVwIHRpbWVvdXQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ0OworICBfX0lPIHVpbnQxNl90ICBWQlVTX0lSUV9NQVNLX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAzMCkgSVJRIG1hc2tpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFZCVVNfSVJRX0NMRUFSX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDMyKSBDbGVhciBwZW5kaW5nIElSUSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQk9EX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwMzQpIEJyb3duIE91dCBEZXRlY3Rpb24gY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBCT0RfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAzNikgQnJvd24gT3V0IERldGVjdGlvbiBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEJPRF9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDM4KSBCcm93biBPdXQgRGV0ZWN0aW9uIHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgTERPX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwM0EpIExETyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBMRE9fQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDAzQykgTERPIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNMRUVQX1RJTUVSX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDNFKSBUaW1lciBmb3IgcmVndWxhdGVkIHNsZWVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUE9XRVJfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNDApIFBvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQT1JfVkJBVF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA0MikgQ29udHJvbHMgdGhlIFBPUiBvbiBWQkFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENVszXTsKKyAgX19JTyB1aW50MTZfdCAgWFRBTFJEWV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNTApIENvbnRyb2wgcmVnaXN0ZXIgZm9yIFhUQUxSRFkgSVJRICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBYVEFMUkRZX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA1MikgRGlmZmVyZW5jZSBiZXR3ZWVuIFhUQUxfT0sgYW5kIFhUQUxSRFlfSVJRIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUCBjbG9jayBjeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgTERPX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNTQpIFJldGVudGlvbiBMRE8gY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDY7CisgIF9fSU8gdWludDE2X3QgIFhUQUwxNk1fU1RBUlRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDU4KSBYdGFsIGZyZXF1ZW5jeSB0cmltbWluZyByZWdpc3RlciBkdXJpbmcgc3RhcnR1cCAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgWFRBTDE2TV9SQU1QX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNUEpIFh0YWwgZnJlcXVlbmN5IHRyaW1taW5nIHJlZ2lzdGVyIGR1cmluZyByYW1waW5nICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBYVEFMMTZNX1RSU1RBVF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA1QykgUmVhZCBiYWNrIHZhbHVlIG9mIGN1cnJlbnQgWFRBTCB0cmltbWluZyAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJFU0VUX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDVFKSBSZXNldCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRk9SQ0VfU0xFRVBfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNjApIEZvcmNlIEZUREYvQkxFIHRvIHNsZWVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBMRE9TX0RJU0FCTEVfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA2MikgRm9yY2Ugb2ZmIGFsbCBMRE9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEFPTl9TUEFSRV9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDY0KSBTcGFyZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU0VDVVJFX0JPT1RfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwNjYpIENvbnRyb2xzIHNlY3VyZSBib290aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQTVVfUkVTRVRfUkFJTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA2OCkgQ29udHJvbHMgcmFpbCByZXNldHRpbmcgd2hlbiBSU1QgaXMgcHVsc2VkICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERJU0NIQVJHRV9SQUlMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDZBKSBJbW1lZGlhdGUgcmFpbCByZXNldHRpbmcuIFRoZXJlIGlzIG5vIExETy9EQ0RDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gQ1JHX1RPUF9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIERDREMgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgRENEQyByZWdpc3RlcnMgKERDREMpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwODApIERDREMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgRENEQ19DVFJMXzBfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwODIpIERDREMgRmlyc3QgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX0NUUkxfMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA4NCkgRENEQyBTZWNvbmQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfQ1RSTF8yX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDg2KSBEQ0RDIFRoaXJkIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19WMTRfMF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwODgpIERDREMgVjE0IEZpcnN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1YxNF8xX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA4QSkgRENEQyBWMTQgU2Vjb25kIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVjE4XzBfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDhDKSBEQ0RDIFYxOCBGaXJzdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19WMThfMV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOEUpIERDREMgVjE4IFNlY29uZCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1ZERF8wX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA5MCkgRENEQyBWREQgRmlyc3QgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVkREXzFfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDkyKSBEQ0RDIFZERCBTZWNvbmQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19WMThQXzBfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOTQpIERDREMgVlBBIEZpcnN0IENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1YxOFBfMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA5NikgRENEQyBWUEEgU2Vjb25kIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfUkVUXzBfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDk4KSBEQ0RDIEZpcnN0IFJldGVudGlvbiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19SRVRfMV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwOUEpIERDREMgU2Vjb25kIFJldGVudGlvbiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1RSSU1fUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDA5QykgRENEQyBDb21wYXJhdG9yIFRyaW0gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVEVTVF8wX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMDlFKSBEQ0RDIFRlc3QgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19URVNUXzFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQTApIERDREMgVGVzdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1NUQVRVU18wX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBBMikgRENEQyBGaXJzdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfU1RBVFVTXzFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEE0KSBEQ0RDIFNlY29uZCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19TVEFUVVNfMl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQTYpIERDREMgVGhpcmQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1NUQVRVU18zX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBBOCkgRENEQyBGb3VydGggU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfU1RBVFVTXzRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEFBKSBEQ0RDIEZpZnRoIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19UUklNXzBfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQUMpIERDREMgVjE0IENvbXBhcmF0b3IgVHJpbSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX1RSSU1fMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBBRSkgRENEQyBWMTggQ29tcGFyYXRvciBUcmltIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfVFJJTV8yX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEIwKSBEQ0RDIFZERCBDb21wYXJhdG9yIFRyaW0gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19UUklNXzNfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQjIpIERDREMgVlBBIENvbXBhcmF0b3IgVHJpbSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBEQ0RDX0lSUV9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDBCNCkgRENEQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERDRENfSVJRX0NMRUFSX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMEI2KSBEQ0RDIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRENEQ19JUlFfTUFTS19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAwQjgpIERDREMgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBEQ0RDX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIERFTSAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBERU0gcmVnaXN0ZXJzIChERU0pCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMDApIERFTSBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9ERU1fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUwMCkgUkZfREVNX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FHQ19MVVRfMDFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTAyKSBSRl9BR0NfTFVUXzAxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUdDX0xVVF8yM19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMDQpIFJGX0FHQ19MVVRfMjNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BR0NfTFVUXzQ1X1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUwNikgUkZfQUdDX0xVVF80NV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FHQ19MVVRfNjdfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTA4KSBSRl9BR0NfTFVUXzY3X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUdDX0xVVF84OV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMEEpIFJGX0FHQ19MVVRfODlfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BR0NfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUwQykgUkZfQUdDX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FHQ19DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTBFKSBSRl9BR0NfQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUZDX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMTApIFJGX0FGQ19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9EQ19PRkZTRVRfQ1RSTDFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUxMikgUkZfRENfT0ZGU0VUX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTE0KSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRENfT0ZGU0VUX0NUUkwzX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMTYpIFJGX0RDX09GRlNFVF9DVFJMM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9EQ19PRkZTRVRfQ1RSTDRfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUxOCkgUkZfRENfT0ZGU0VUX0NUUkw0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBSRl9BR0NfUkVTVUxUX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUxQykgUkZfQUdDX1JFU1VMVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1JTU0lfUkVTVUxUX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTFFKSBSRl9SU1NJX1JFU1VMVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRENfT0ZGU0VUX1JFU1VMVF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMjApIE11c3QgYmUgUmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUyMikgUkZfUlNTSV9DT01QX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVszXTsKKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9DVFJMMV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMzApIFJGX0ZUREZfQ1RSTDFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUzMikgUkZfRlRERl9DVFJMMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTM0KSBSRl9GVERGX0NUUkwzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9DVFJMNF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFMzYpIFJGX0ZUREZfQ1RSTDRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX0xPT1BfR0FJTl9QRF9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUzOCkgUkZfRlRERl9MT09QX0dBSU5fUERfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfTE9PUF9HQUlOX0RTX1JFRzsgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTNBKSBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9DVFJMNV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFM0MpIFJGX0ZUREZfQ1RSTDVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GVERGX0NPQklfTE9XX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkUzRSkgUkZfRlRERl9DT0JJX0xPV19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfQ09CSV9ISUdIX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTQwKSBSRl9GVERGX0NPQklfSElHSF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfREVNX1RFU1RNT0RFX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFNDIpIFJGX0RFTV9URVNUTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9ERU1fSVFDT1JSRUNUX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkU0NCkgUkZfREVNX0lRQ09SUkVDVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BBRF9DTlRfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTQ2KSBSRl9QQURfQ05UX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUEFEX0NOVF9SRVNVTFRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFNDgpIFJGX1BBRF9DTlRfUkVTVUxUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDJbM107CisgIF9fSU8gdWludDE2X3QgIFJGX0ZTU1NfSV9SRVNVTFRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTUwKSBSRl9GU1NTX0lfUkVTVUxUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlNTU19RX1JFU1VMVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFNTIpIFJGX0ZTU1NfUV9SRVNVTFRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9GU1NTX01BR19SRVNVTFRfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkU1NCkgUkZfRlNTU19NQUdfUkVTVUxUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NDQV9SU1NJVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRTU2KSBSRl9DQ0FfUlNTSVRIX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJFNTgpIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBERU1fVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgRE1BICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIERNQSByZWdpc3RlcnMgKERNQSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUwMCkgRE1BIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTBfQV9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTAwKSBTdGFydCBhZGRyZXNzIExvdyBBIG9mIERNQSBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMF9BX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MDIpIFN0YXJ0IGFkZHJlc3MgSGlnaCBBIG9mIERNQSBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEwX0JfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUwNCkgU3RhcnQgYWRkcmVzcyBMb3cgQiBvZiBETUEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTBfQl9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTA2KSBTdGFydCBhZGRyZXNzIEhpZ2ggQiBvZiBETUEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMF9JTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MDgpIERNQSByZWNlaXZlIGludGVycnVwdCByZWdpc3RlciBjaGFubmVsIDAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEwX0xFTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUwQSkgRE1BIHJlY2VpdmUgbGVuZ3RoIHJlZ2lzdGVyIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTBfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTBDKSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgRE1BIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMF9JRFhfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MEUpIEluZGV4IHZhbHVlIG9mIERNQSBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUExX0FfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUxMCkgU3RhcnQgYWRkcmVzcyBMb3cgQSBvZiBETUEgY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTFfQV9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTEyKSBTdGFydCBhZGRyZXNzIEhpZ2ggQSBvZiBETUEgY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMV9CX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MTQpIFN0YXJ0IGFkZHJlc3MgTG93IEIgb2YgRE1BIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUExX0JfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUxNikgU3RhcnQgYWRkcmVzcyBIaWdoIEIgb2YgRE1BIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTFfSU5UX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTE4KSBETUEgcmVjZWl2ZSBpbnRlcnJ1cHQgcmVnaXN0ZXIgY2hhbm5lbCAxICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMV9MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MUEpIERNQSByZWNlaXZlIGxlbmd0aCByZWdpc3RlciBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUExX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUxQykgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIERNQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTFfSURYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTFFKSBJbmRleCB2YWx1ZSBvZiBETUEgY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMl9BX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MjApIFN0YXJ0IGFkZHJlc3MgTG93IEEgb2YgRE1BIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEyX0FfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUyMikgU3RhcnQgYWRkcmVzcyBIaWdoIEEgb2YgRE1BIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTJfQl9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTI0KSBTdGFydCBhZGRyZXNzIExvdyBCIG9mIERNQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMl9CX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MjYpIFN0YXJ0IGFkZHJlc3MgSGlnaCBCIG9mIERNQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEyX0lOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUyOCkgRE1BIHJlY2VpdmUgaW50ZXJydXB0IHJlZ2lzdGVyIGNoYW5uZWwgMiAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTJfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTJBKSBETUEgcmVjZWl2ZSBsZW5ndGggcmVnaXN0ZXIgY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BMl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MkMpIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBETUEgY2hhbm5lbCAyICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEyX0lEWF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUyRSkgSW5kZXggdmFsdWUgb2YgRE1BIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTNfQV9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTMwKSBTdGFydCBhZGRyZXNzIExvdyBBIG9mIERNQSBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BM19BX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MzIpIFN0YXJ0IGFkZHJlc3MgSGlnaCBBIG9mIERNQSBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEzX0JfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUzNCkgU3RhcnQgYWRkcmVzcyBMb3cgQiBvZiBETUEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTNfQl9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTM2KSBTdGFydCBhZGRyZXNzIEhpZ2ggQiBvZiBETUEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BM19JTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1MzgpIERNQSByZWNlaXZlIGludGVycnVwdCByZWdpc3RlciBjaGFubmVsIDMgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUEzX0xFTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzUzQSkgRE1BIHJlY2VpdmUgbGVuZ3RoIHJlZ2lzdGVyIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTNfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTNDKSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgRE1BIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BM19JRFhfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1M0UpIEluZGV4IHZhbHVlIG9mIERNQSBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE0X0FfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU0MCkgU3RhcnQgYWRkcmVzcyBMb3cgQSBvZiBETUEgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTRfQV9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTQyKSBTdGFydCBhZGRyZXNzIEhpZ2ggQSBvZiBETUEgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNF9CX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NDQpIFN0YXJ0IGFkZHJlc3MgTG93IEIgb2YgRE1BIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE0X0JfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU0NikgU3RhcnQgYWRkcmVzcyBIaWdoIEIgb2YgRE1BIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTRfSU5UX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTQ4KSBETUEgcmVjZWl2ZSBpbnRlcnJ1cHQgcmVnaXN0ZXIgY2hhbm5lbCA0ICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNF9MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NEEpIERNQSByZWNlaXZlIGxlbmd0aCByZWdpc3RlciBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE0X0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU0QykgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIERNQSBjaGFubmVsIDQgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTRfSURYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTRFKSBJbmRleCB2YWx1ZSBvZiBETUEgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNV9BX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NTApIFN0YXJ0IGFkZHJlc3MgTG93IEEgb2YgRE1BIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE1X0FfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU1MikgU3RhcnQgYWRkcmVzcyBIaWdoIEEgb2YgRE1BIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTVfQl9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTU0KSBTdGFydCBhZGRyZXNzIExvdyBCIG9mIERNQSBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNV9CX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NTYpIFN0YXJ0IGFkZHJlc3MgSGlnaCBCIG9mIERNQSBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE1X0lOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU1OCkgRE1BIHJlY2VpdmUgaW50ZXJydXB0IHJlZ2lzdGVyIGNoYW5uZWwgNSAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTVfTEVOX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTVBKSBETUEgcmVjZWl2ZSBsZW5ndGggcmVnaXN0ZXIgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NUMpIENvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBETUEgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE1X0lEWF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU1RSkgSW5kZXggdmFsdWUgb2YgRE1BIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTZfQV9TVEFSVExfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTYwKSBTdGFydCBhZGRyZXNzIExvdyBBIG9mIERNQSBjaGFubmVsIDYgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNl9BX1NUQVJUSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NjIpIFN0YXJ0IGFkZHJlc3MgSGlnaCBBIG9mIERNQSBjaGFubmVsIDYgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE2X0JfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU2NCkgU3RhcnQgYWRkcmVzcyBMb3cgQiBvZiBETUEgY2hhbm5lbCA2ICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTZfQl9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTY2KSBTdGFydCBhZGRyZXNzIEhpZ2ggQiBvZiBETUEgY2hhbm5lbCA2ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNl9JTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NjgpIERNQSByZWNlaXZlIGludGVycnVwdCByZWdpc3RlciBjaGFubmVsIDYgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE2X0xFTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU2QSkgRE1BIHJlY2VpdmUgbGVuZ3RoIHJlZ2lzdGVyIGNoYW5uZWwgNiAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTZfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTZDKSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgRE1BIGNoYW5uZWwgNiAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BNl9JRFhfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NkUpIEluZGV4IHZhbHVlIG9mIERNQSBjaGFubmVsIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE3X0FfU1RBUlRMX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU3MCkgU3RhcnQgYWRkcmVzcyBMb3cgQSBvZiBETUEgY2hhbm5lbCA3ICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTdfQV9TVEFSVEhfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTcyKSBTdGFydCBhZGRyZXNzIEhpZ2ggQSBvZiBETUEgY2hhbm5lbCA3ICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BN19CX1NUQVJUTF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1NzQpIFN0YXJ0IGFkZHJlc3MgTG93IEIgb2YgRE1BIGNoYW5uZWwgNyAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE3X0JfU1RBUlRIX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU3NikgU3RhcnQgYWRkcmVzcyBIaWdoIEIgb2YgRE1BIGNoYW5uZWwgNyAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTdfSU5UX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTc4KSBETUEgcmVjZWl2ZSBpbnRlcnJ1cHQgcmVnaXN0ZXIgY2hhbm5lbCA3ICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BN19MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1N0EpIERNQSByZWNlaXZlIGxlbmd0aCByZWdpc3RlciBjaGFubmVsIDcgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUE3X0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU3QykgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIERNQSBjaGFubmVsIDcgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQTdfSURYX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTdFKSBJbmRleCB2YWx1ZSBvZiBETUEgY2hhbm5lbCA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgRE1BX1JFUV9NVVhfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM1ODApIERNQSBjaGFubmVsIGFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBETUFfSU5UX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzU4MikgRE1BIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERNQV9DTEVBUl9JTlRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNTg0KSBETUEgY2xlYXIgaW50ZXJydXB0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gRE1BX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIEVDQyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBFQ0MgcmVnaXN0ZXJzIChFQ0MpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDYwMDApIEVDQyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBFQ0NfQ09ORklHX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNjAwMCkgQ29uZmlndXJhdGlvbiByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEVDQ19DT01NQU5EX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA2MDA0KSBDb21tYW5kIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRUNDX0NPTlRST0xfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDYwMDgpIENvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBFQ0NfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNjAwQykgU3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEVDQ19WRVJTSU9OX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA2MDEwKSBWZXJzaW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gRUNDX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgRlRERiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBGVERGIHJlZ2lzdGVycyAoRlRERikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDAwMCkgRlRERiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRklGT18wXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMDAwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRURbMzFdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZJRk9fMV8wX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDA4MCkgQWRkcmVzcyB0cmFuc21pdCBmaWZvIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVszMV07CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfRklGT18yXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMTAwKSBBZGRyZXNzIHRyYW5zbWl0IGZpZm8gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GSUZPXzNfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAxODApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDNbMzFdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIwMCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfTUVUQV9EQVRBXzFfMF9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDgwMjA0KSBUcmFuc21pdCBtZXRhZGF0YSByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIxMCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfTUVUQV9EQVRBXzFfMV9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDgwMjE0KSBUcmFuc21pdCBtZXRhZGF0YSByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIyMCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfTUVUQV9EQVRBXzFfMl9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDgwMjI0KSBUcmFuc21pdCBtZXRhZGF0YSByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA4MDIzMCkgVHJhbnNtaXQgbWV0YWRhdGEgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfTUVUQV9EQVRBXzFfM19SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDgwMjM0KSBUcmFuc21pdCBtZXRhZGF0YSByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ3WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8wX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI0MCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOyAgICAgLyohPCAoQCAweDQwMDgwMjQ0KSBUcmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ4WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8xX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI1MCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzFfUkVHOyAgICAgLyohPCAoQCAweDQwMDgwMjU0KSBUcmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8yX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI2MCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzJfUkVHOyAgICAgLyohPCAoQCAweDQwMDgwMjY0KSBUcmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMFsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfM19SRUc7ICAgICAvKiE8IChAIDB4NDAwODAyNzApIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8zX1JFRzsgICAgIC8qITwgKEAgMHg0MDA4MDI3NCkgVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTFbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8wXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMjgwKSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzFfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyODQpIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyWzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMF8xX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDI5MCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8xXzFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMjk0KSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxM1syXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzBfMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyQTApIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMV8yX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJBNCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTRbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8wXzNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkIwKSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzFfM19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyQjQpIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE1WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMF80X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJDMCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8xXzRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkM0KSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNlsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzBfNV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyRDApIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMV81X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJENCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTdbMl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8wXzZfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkUwKSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9NRVRBXzFfNl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODAyRTQpIFJlY2VpdmUgbWV0YWRhdGEgcmVnaXN0ZXIgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE4WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX01FVEFfMF83X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA4MDJGMCkgUmVjZWl2ZSBtZXRhZGF0YSByZWdpc3RlciA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUVUQV8xXzdfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDgwMkY0KSBSZWNlaXZlIG1ldGFkYXRhIHJlZ2lzdGVyIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxOVs4MDAyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzBfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgwMDApIEFkZHJlc3MgcmVjZWl2ZSBmaWZvIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDIwWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzFfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgwODApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDIxWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzJfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgxMDApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDIyWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzNfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgxODApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDIzWzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzRfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgyMDApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI0WzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzVfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgyODApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI1WzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzZfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgzMDApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI2WzMxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9GSUZPXzdfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwODgzODApIEFkZHJlc3MgdHJhbnNtaXQgZmlmbyA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI3Wzc5NjddOworICBfX0lPIHVpbnQzMl90ICBGVERGX1JFTF9OQU1FXzBfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAwMCkgTmFtZSBvZiB0aGUgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUkVMX05BTUVfMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDA0KSBOYW1lIG9mIHRoZSByZWxlYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SRUxfTkFNRV8yX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMDgpIE5hbWUgb2YgdGhlIHJlbGVhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JFTF9OQU1FXzNfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAwQykgTmFtZSBvZiB0aGUgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfQlVJTERUSU1FXzBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDEwKSBCdWlsZCB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9CVUlMRFRJTUVfMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMTQpIEJ1aWxkIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0JVSUxEVElNRV8yX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAxOCkgQnVpbGQgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfQlVJTERUSU1FXzNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDFDKSBCdWlsZCB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9HTE9CX0NPTlRST0xfMF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMjApIEdsb2JhbCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0dMT0JfQ09OVFJPTF8xX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAyNCkgR2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfR0xPQl9DT05UUk9MXzJfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDI4KSBHbG9iYWwgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9HTE9CX0NPTlRST0xfM19SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwMkMpIEdsb2JhbCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF8wX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDAzMCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhQSVBFUFJPUERFTEFZX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDM0KSBQcm9wIGRlbGF5IHRyYW5zbWl0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9NQUNBQ0tXQUlURFVSQVRJT05fUkVHOyAgICAgICAvKiE8IChAIDB4NDAwOTAwMzgpIE1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIEFDSyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX01BQ0VOSEFDS1dBSVREVVJBVElPTl9SRUc7ICAgIC8qITwgKEAgMHg0MDA5MDAzQykgTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGFuIGVuaGFuY2VkIEFDSyBmcmFtZSAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDQwKSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfMl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwNDQpIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA0OCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMjg7CisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MX09TX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDUwKSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzsgICAgICAvKiE8IChAIDB4NDAwOTAwNTQpIExtYWMgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0VWRU5UQ1VSUlZBTF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA1OCkgVmFsdWUgb2YgZXZlbnQgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVElNRVNUQU1QQ1VSUlZBTF9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMDVDKSBWYWx1ZSBvZiB0aW1lc3RhbXAgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwNjApIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDA2NCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzZfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDY4KSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwNkMpIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc7ICAgICAgIC8qITwgKEAgMHg0MDA5MDA3MCkgTG1hYyBkZWx0YSBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVElNRVNUQU1QQ1VSUlBIQVNFVkFMX1JFRzsgICAgLyohPCAoQCAweDQwMDkwMDc0KSBWYWx1ZSBvZiB0aW1lc3RhbXAgZ2VuZXJhdG9yIHBoYXNlIHdpdGhpbiBhIHN5bWJvbCAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9NQUNUU1RYQUNLREVMQVlWQUxfUkVHOyAgICAgICAvKiE8IChAIDB4NDAwOTAwNzgpIFRpbWUgbGVmdCB1bnRpbCBuZXh0IEFDSyBpcyBzZW50ICh1cykgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI5OworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzsgICAgICAgIC8qITwgKEAgMHg0MDA5MDA4MCkgTG1hYyBtYXNrIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzBbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19FVkVOVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMDkwKSBMbWFjIGV2ZW50IHJlZ3NpdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX01BU0tfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAwOTQpIExtYWMgbWFzayByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDMxWzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDBBMCkgTG1heCBtYW51YWwgUEhZIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19NQU5VQUxfT1NfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMEE0KSBPbmUgc2hvdCByZWdpc3RlciB0cmlnZ2VycyB0cmFuc21pc3Npb24gaW4gbWFudWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX01BTlVBTF9TVEFUVVNfUkVHOyAgICAgICAvKiE8IChAIDB4NDAwOTAwQTgpIExtYWMgc3RhdHVzIHJlZ2lzdGVyIGluIG1hbnVhbCBtb2RlICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDMyWzIxXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfN19SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMDApIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX0xNQUNfQ09OVFJPTF84X1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEwNCkgTG1hYyBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE1BQ19DT05UUk9MXzlfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTA4KSBMbWFjIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMEMpIExtYWMgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ1VSSVRZXzBfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDExMCkgU2VjdXJpdHkgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDVVJJVFlfMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTE0KSBTZWN1cml0eSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNLRVlfMF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMTgpIFNlY2tleSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ0tFWV8xX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDExQykgU2Vja2V5IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDS0VZXzJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTIwKSBTZWNLZXkgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNLRVlfM19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMjQpIFNlY2tleSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ05PTkNFXzBfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEyOCkgTm9uY2UgcmVnaXN0ZXIgdXNlZCBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDTk9OQ0VfMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTJDKSBOb25jZSByZWdpc3RlciB1c2VkIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24gICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNOT05DRV8yX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxMzApIE5vbmNlIHJlZ2lzdGVyIHVzZWQgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbiAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ05PTkNFXzNfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDEzNCkgTm9uY2UgcmVnaXN0ZXIgdXNlZCBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDVVJJVFlfT1NfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTM4KSBPbmUgc2hvdCByZWdpc3RlciB0byBzdGFydCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzMzsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxNDApIFNlY3VyaXR5IHN0YXR1cyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM0WzNdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1NFQ1VSSVRZX0VWRU5UX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDE1MCkgc2VjdXJpdHkgZXZlbnQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfU0VDVVJJVFlfRVZFTlRNQVNLX1JFRzsgICAgICAgLyohPCAoQCAweDQwMDkwMTU0KSBzZWN1cml0eSBldmVudCBtYXNrIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzNVsyXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UU0NIX0NPTlRST0xfMF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAxNjApIExtYWMgdHNjaCBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RTQ0hfQ09OVFJPTF8xX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDE2NCkgTG1hYyB0c2NoIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFNDSF9DT05UUk9MXzJfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMTY4KSBMbWFjIHRzY2ggY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzNls1XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwOTAxODApIExtYWMgUEhZIHBhcmFtZXRlciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA5MDE4NCkgTG1hYyBQSFkgcGFyYW1ldGVyIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMTg4KSBMbWFjIFBIWSBwYXJhbWV0ZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwOTAxOEMpIExtYWMgUEhZIHBhcmFtZXRlciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM3WzI4XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9DT05UUk9MXzBfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAyMDApIFJlY2VpdmUgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1JYX0VWRU5UX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDIwNCkgUmVjZWl2ZSBldmVudCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfTUFTS19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjA4KSBSZWNlaXZlIGV2ZW50IG1hc2sgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAyMEMpIFJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NZTUJPTFRJTUVTTkFQU0hPVFZBTF9SRUc7ICAgIC8qITwgKEAgMHg0MDA5MDIxMCkgVmFsdWUgdGltZXN0YW1wIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMzhbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfUlhfU1RBVFVTX0RFTFRBX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjIwKSBSZWNlaXZlIHN0YXR1cyBkZWx0YSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9SWF9TVEFUVVNfTUFTS19SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAyMjQpIFJlY2VpdmUgc3RhdHVzIGRlbHRhIG1hc2sgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDM5WzZdOworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0NPTlRST0xfMF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDI0MCkgVHJhbnNtaXQgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDBbM107CisgIF9fSU8gdWludDMyX3QgIEZUREZfRlRERl9DRV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMjUwKSBTZWxlY3Rpb24gcmVnaXN0ZXIgZXZlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9GVERGX0NNX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAyNTQpIE1hc2sgc2VsZWN0aW9uIHJlZ2lzdGVyIGV2ZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQxWzQzXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9TWU5DVElNRVNUQU1QVEhSX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwOTAzMDQpIFRocmVzaG9sZCB0aW1lc3RhbXAgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NZTkNUSU1FU1RBTVBWQUxfUkVHOyAgICAgICAgIC8qITwgKEAgMHg0MDA5MDMwOCkgVmFsdWUgdGltZXN0YW1wIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVElNRVJfQ09OVFJPTF8xX1JFRzsgICAgICAgICAgLyohPCAoQCAweDQwMDkwMzBDKSBUaW1lciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9NQUNUWFNUREFDS0ZSTUNOVF9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTAzMTApIFRyYW5zbWl0dGVkIGFja25vd2xlZGdtZW50IGZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX01BQ1JYU1REQUNLRlJNT0tDTlRfUkVHOyAgICAgIC8qITwgKEAgMHg0MDA5MDMxNCkgUmVjZWl2ZWQgYWNrbm93bGVkZ21lbnQgZnJhbWVzICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTUFDUlhBRERSRkFJTEZSTUNOVF9SRUc7ICAgICAgLyohPCAoQCAweDQwMDkwMzE4KSBEaXNjYXJkZWQgZnJhbWVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9NQUNSWFVOU1VQRlJNQ05UX1JFRzsgICAgICAgICAvKiE8IChAIDB4NDAwOTAzMUMpIFVuc3VwcG9ydGVkIGZyYW1lcyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1NZTkNUSU1FU1RBTVBQSEFTRVZBTF9SRUc7ICAgIC8qITwgKEAgMHg0MDA5MDMyMCkgVGltZXN0YW1wIHBoYXNlIHZhbHVlIHJlZ3NpdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDJbN107CisgIF9fSU8gdWludDMyX3QgIEZUREZfTUFDRkNTRVJST1JDT1VOVF9SRUc7ICAgICAgICAgLyohPCAoQCAweDQwMDkwMzQwKSBMbWFjIEZDUyBlcnJvciByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0M1s3XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9MTUFDUkVTRVRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAzNjApIExtYXggcmVzZXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1dBS0VVUF9DT05UUk9MX09TX1JFRzsgICAgICAgIC8qITwgKEAgMHg0MDA5MDM2NCkgRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDRbNl07CisgIF9fSU8gdWludDMyX3QgIEZUREZfU1lNQk9MVElNRVRIUl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMzgwKSBTeW1ib2x0aW1lIHRocmVzaG9sZCByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TWU1CT0xUSU1FMlRIUl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAzODQpIFN5bWJvbHRpbWUgdGhyZXNob2xkIHJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ1WzJdOworICBfX0lPIHVpbnQzMl90ICBGVERGX0RFQlVHQ09OVFJPTF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDM5MCkgRGVidWcgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhCWVRFX0VfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwMzk0KSBUcmFuc21pdCBmaXJzdCBieXRlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWEJZVEVfTV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTAzOTgpIFRyYW5zbWl0IGZpcnN0IGJ5dGUgbWFzayByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDQ2WzI1XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX1NfMF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTA0MDApIFRyYW5zbWl0IHBhY2tldCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX0VfMF9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0MDQpIENsZWFyIGZsYWcgcmVnaXN0ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8wX1JFRzsgICAgICAgIC8qITwgKEAgMHg0MDA5MDQwOCkgTWFzayBmbGFnIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDc7CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUFJJT1JJVFlfMF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDEwKSBUcmFuc21pdCBwcmlvcml0eSByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ0OFszXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX1NfMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTA0MjApIFRyYW5zbWl0IHBhY2tldCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX0VfMV9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0MjQpIENsZWFyIGZsYWcgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8xX1JFRzsgICAgICAgIC8qITwgKEAgMHg0MDA5MDQyOCkgTWFzayBmbGFnIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDk7CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUFJJT1JJVFlfMV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDMwKSBUcmFuc21pdCBwcmlvcml0eSByZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1MFszXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX1NfMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTA0NDApIFRyYW5zbWl0IHBhY2tldCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX0VfMl9SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0NDQpIENsZWFyIGZsYWcgcmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8yX1JFRzsgICAgICAgIC8qITwgKEAgMHg0MDA5MDQ0OCkgQ2xlYXIgZmxhZyByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTE7CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUFJJT1JJVFlfMl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDUwKSBUcmFuc21pdCBwcmlvcml0eSByZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1MlszXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX1NfM19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTA0NjApIFRyYW5zbWl0IHBhY2tldCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9GTEFHX0NMRUFSX0VfM19SRUc7ICAgICAgICAvKiE8IChAIDB4NDAwOTA0NjQpIENsZWFyIGZsYWcgcmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0ZMQUdfQ0xFQVJfTV8zX1JFRzsgICAgICAgIC8qITwgKEAgMHg0MDA5MDQ2OCkgQ2xlYXIgZmxhZyByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTM7CisgIF9fSU8gdWludDMyX3QgIEZUREZfVFhfUFJJT1JJVFlfM19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDQwMDkwNDcwKSBUcmFuc21pdCBwcmlvcml0eSByZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ1NFszXTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9UWF9TRVRfT1NfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwOTA0ODApIE9uZSBzaG90IHJlZ2lzdGVyIHRvIHNldCBmbGFnICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBGVERGX1RYX0NMRUFSX09TX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MDQ4NCkgT25lIHNob3QgcmVnaXN0ZXIgdG8gY2xlYXIgZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENTVbNzM0XTsKKyAgX19JTyB1aW50MzJfdCAgRlRERl9XQUtFVVBfQ09OVFJPTF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTEwMDApIFdha2V1cCB0aW1lciB2Y29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDU2WzEwMjNdOworICBfX0lPIHVpbnQzMl90ICBGVERGX0xPTkdfQUREUl8wXzBfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg0MDA5MjAwMCkgRlRERl9MT05HX0FERFJfMF8wX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIEZUREZfTE9OR19BRERSXzFfMF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDQwMDkyMDA0KSBGVERGX0xPTkdfQUREUl8xXzBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgRlRERl9TSVpFX0FORF9WQUxfMF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NDAwOTIwMDgpIEZUREZfU0laRV9BTkRfVkFMXzBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBGVERGX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgIEdQX1RJTUVSUyAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBHUF9USU1FUlMgcmVnaXN0ZXJzIChHUF9USU1FUlMpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MDApIEdQX1RJTUVSUyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBUSU1FUjBfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQwMCkgVGltZXIwIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRJTUVSMF9PTl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDAyKSBUaW1lcjAgb24gY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVElNRVIwX1JFTE9BRF9NX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MDQpIDE2IGJpdHMgcmVsb2FkIHZhbHVlIGZvciBUaW1lcjAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBUSU1FUjBfUkVMT0FEX05fUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQwNikgMTYgYml0cyByZWxvYWQgdmFsdWUgZm9yIFRpbWVyMCAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBXTTJfU1RBUlRfQ1lDTEU7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDA4KSBEZWZpbmVzIHN0YXJ0IEN5Y2xlIGZvciBQV00yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUFdNM19TVEFSVF9DWUNMRTsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MEEpIERlZmluZXMgc3RhcnQgQ3ljbGUgZm9yIFBXTTMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQV000X1NUQVJUX0NZQ0xFOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQwQykgRGVmaW5lcyBzdGFydCBDeWNsZSBmb3IgUFdNNCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBXTTJfRU5EX0NZQ0xFOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDBFKSBEZWZpbmVzIGVuZCBDeWNsZSBmb3IgUFdNMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUFdNM19FTkRfQ1lDTEU7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MTApIERlZmluZXMgZW5kIEN5Y2xlIGZvciBQV00zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQV000X0VORF9DWUNMRTsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQxMikgRGVmaW5lcyBlbmQgQ3ljbGUgZm9yIFBXTTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRSSVBMRV9QV01fRlJFUVVFTkNZOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDE0KSBEZWZpbmVzIHRoZSBQTVcyLDMsNCBmcmVxdWVuY3kgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVFJJUExFX1BXTV9DVFJMX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MTYpIFBXTSAyIDMgNCBDb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBCUkVBVEhfQ0ZHX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQxOCkgQnJlYXRoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEJSRUFUSF9EVVRZX01BWF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNDFBKSBCcmVhdGggbWF4IGR1dHkgY3ljbGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQlJFQVRIX0RVVFlfTUlOX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM0MUMpIEJyZWF0aCBtaW4gZHV0eSBjeWNsZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBCUkVBVEhfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzQxRSkgQnJlYXRoIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEdQX1RJTUVSU19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIEdQQURDICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgR1BBREMgcmVnaXN0ZXJzIChHUEFEQykKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTkwMCkgR1BBREMgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEdQX0FEQ19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOTAwKSBHZW5lcmFsIFB1cnBvc2UgQURDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgR1BfQURDX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE5MDIpIEdlbmVyYWwgUHVycG9zZSBBREMgU2Vjb25kIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBHUF9BRENfQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTkwNCkgR2VuZXJhbCBQdXJwb3NlIEFEQyBUaGlyZCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEdQX0FEQ19PRkZQX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOTA2KSBHZW5lcmFsIFB1cnBvc2UgQURDIFBvc2l0aXZlIE9mZnNldCBSZWdpc3RlciAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgR1BfQURDX09GRk5fUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE5MDgpIEdlbmVyYWwgUHVycG9zZSBBREMgTmVnYXRpdmUgT2Zmc2V0IFJlZ2lzdGVyICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBHUF9BRENfQ0xFQVJfSU5UX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTkwQSkgR2VuZXJhbCBQdXJwb3NlIEFEQyBDbGVhciBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEdQX0FEQ19SRVNVTFRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOTBDKSBHZW5lcmFsIFB1cnBvc2UgQURDIFJlc3VsdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KK30gR1BBRENfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBHUElPICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEdQSU8gcmVnaXN0ZXJzIChHUElPKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDAwKSBHUElPIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDBfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMDApIFAwIERhdGEgaW5wdXQgLyBvdXRwdXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMV9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAwMikgUDEgRGF0YSBpbnB1dCAvIG91dHB1dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAyX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDA0KSBQMiBEYXRhIGlucHV0IC8gb3V0cHV0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDNfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMDYpIFAzIERhdGEgaW5wdXQgLyBvdXRwdXQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAwOCkgUDQgRGF0YSBpbnB1dCAvIG91dHB1dCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwX1NFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDBBKSBQMCBTZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDFfU0VUX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMEMpIFAxIFNldCBwb3J0IHBpbnMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMl9TRVRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAwRSkgUDIgU2V0IHBvcnQgcGlucyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzX1NFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDEwKSBQMyBTZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDRfU0VUX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMTIpIFA0IFNldCBwb3J0IHBpbnMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMF9SRVNFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAxNCkgUDAgUmVzZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxX1JFU0VUX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDE2KSBQMSBSZXNldCBwb3J0IHBpbnMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDJfUkVTRVRfREFUQV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMTgpIFAyIFJlc2V0IHBvcnQgcGlucyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQM19SRVNFVF9EQVRBX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAxQSkgUDMgUmVzZXQgcG9ydCBwaW5zIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0X1JFU0VUX0RBVEFfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDFDKSBQNCBSZXNldCBwb3J0IHBpbnMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDAwX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMUUpIFAwMCBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMDFfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAyMCkgUDAxIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwMl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDIyKSBQMDIgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDAzX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMjQpIFAwMyBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMDRfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAyNikgUDA0IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAwNV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDI4KSBQMDUgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDA2X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMkEpIFAwNiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMDdfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAyQykgUDA3IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxMF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDJFKSBQMTAgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDExX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMzApIFAxMSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMTJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAzMikgUDEyIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxM19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDM0KSBQMTMgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDE0X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwMzYpIFAxNCBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMTVfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAzOCkgUDE1IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAxNl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDNBKSBQMjQgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDE3X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwM0MpIFAyNSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMjBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzAzRSkgUDIwIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAyMV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDQwKSBQMjEgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDIyX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNDIpIFAyMiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMjNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA0NCkgUDIzIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAyNF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDQ2KSBQMjQgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRURbM107CisgIF9fSU8gdWludDE2X3QgIFAzMF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDRFKSBQMzAgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDMxX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNTApIFAzMSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMzJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA1MikgUDMyIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzM19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDU0KSBQMzMgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDM0X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNTYpIFAzNCBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMzVfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA1OCkgUDM1IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAzNl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDVBKSBQMzYgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDM3X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNUMpIFAzNyBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNDBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA1RSkgUDQwIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0MV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDYwKSBQNDEgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDQyX01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNjIpIFA0MiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNDNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA2NCkgUDQzIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0NF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDY2KSBQNDQgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDQ1X01PREVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwNjgpIFA0NSBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNDZfTU9ERV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzA2QSkgUDQ2IE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFA0N19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMDZDKSBQNDcgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxWzQxXTsKKyAgX19JTyB1aW50MTZfdCAgUDBfUEFEUFdSX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwQzApIFAwIE91dHB1dCBQb3dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQMV9QQURQV1JfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBDMikgUDEgT3V0cHV0IFBvd2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFAyX1BBRFBXUl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEM0KSBQMiBPdXRwdXQgUG93ZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUDNfUEFEUFdSX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwQzYpIFAzIE91dHB1dCBQb3dlciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQNF9QQURQV1JfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBDOCkgUDQgT3V0cHV0IFBvd2VyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMlszXTsKKyAgX19JTyB1aW50MTZfdCAgR1BJT19DTEtfU0VMOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRDApIFNlbGVjdCB3aGljaCBjbG9jayB0byBtYXAgb24gcG9ydCBpbiBQUEEgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDNbN107CisgIF9fSU8gdWludDE2X3QgIEJJU1RfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEUwKSBCSVNUX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkFNQklTVF9TVEFUVVMxX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRTIpIFJBTUJJU1RfU1RBVFVTMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSQU1CSVNUX1NUQVRVUzJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBFNCkgUkFNQklTVF9TVEFUVVMyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJBTUJJU1RfU1RBVFVTM19SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEU2KSBSQU1CSVNUX1NUQVRVUzNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUk9NQklTVF9SRVNVTFRMX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRTgpIFJPTUJJU1RfUkVTVUxUTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBST01CSVNUX1JFU1VMVEhfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBFQSkgUk9NQklTVF9SRVNVTFRIX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDsKKyAgX19JTyB1aW50MTZfdCAgVEVTVF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRjApIFRFU1RfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBURVNUX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBGMikgVEVTVF9DVFJMMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFRFU1RfQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMEY0KSBURVNUX0NUUkwzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVEVTVF9DVFJMNF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMwRjYpIFRFU1RfQ1RSTDRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBURVNUX0NUUkw1X1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzBGOCkgVEVTVF9DVFJMNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEdQSU9fVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBHUFJFRyAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIEdQUkVHIHJlZ2lzdGVycyAoR1BSRUcpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMDApIEdQUkVHIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTRVRfRlJFRVpFX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMwMCkgQ29udHJvbHMgZnJlZXppbmcgb2YgdmFyaW91cyB0aW1lcnMvY291bnRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNsLiBETUEgYW5kIFVTQikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRVNFVF9GUkVFWkVfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMwMikgQ29udHJvbHMgdW5mcmVlemluZyBvZiB2YXJpb3VzIHRpbWVycy9jb3VudGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluY2wuIERNQSBhbmQgVVNCKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIERFQlVHX1JFRzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzA0KSBWYXJpb3VzIGRlYnVnIGluZm9ybWF0aW9uIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgR1BfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMDYpIEdlbmVyYWwgcHVycG9zZSBzeXN0ZW0gc3RhdHVzIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBHUF9DT05UUk9MX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMwOCkgR2VuZXJhbCBwdXJwb3NlIHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEVDQ19CQVNFX0FERFJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzBBKSBCYXNlIGFkZHJlc3Mgb2YgdGhlIEVDQyBDcnlwdG8gbWVtb3J5IHJlZ2lzdGVyLiAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgTEVEX0NPTlRST0xfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMEMpIENvbnRyb2xzIG11eGluZyBhbmQgZW5hYmxpbmcgb2YgdGhlIExFRHMuICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBCTEVfRklORUNOVF9TQU1QX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMwRSkgQkxFIEZJTkVDTlQgc2FtcGxlZCB2YWx1ZSB3aGlsZSBpbiBkZWVwIHNsZWVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUExMX1NZU19DVFJMMV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMTApIFN5c3RlbSBQTEwgY29udHJvbCByZWdpc3RlciAxLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQTExfU1lTX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMxMikgU3lzdGVtIFBMTCBjb250cm9sIHJlZ2lzdGVyIDIuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFBMTF9TWVNfQ1RSTDNfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMzE0KSBTeXN0ZW0gUExMIGNvbnRyb2wgcmVnaXN0ZXIgMy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUExMX1NZU19TVEFUVVNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMzMTYpIFN5c3RlbSBQTEwgc3RhdHVzIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBQTExfU1lTX1RFU1RfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzMxOCkgU3lzdGVtIFBMTCB0ZXN0IHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEdQUkVHX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIEkyQyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBJMkMgcmVnaXN0ZXJzIChJMkMpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MDApIEkyQyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkNfQ09OX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQwMCkgSTJDIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBJMkNfVEFSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQwNCkgSTJDIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1NBUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MDgpIEkyQyBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDJbM107CisgIF9fSU8gdWludDE2X3QgIEkyQ19EQVRBX0NNRF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDEwKSBJMkMgUngvVHggRGF0YSBCdWZmZXIgYW5kIENvbW1hbmQgUmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzOworICBfX0lPIHVpbnQxNl90ICBJMkNfU1NfU0NMX0hDTlRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQxNCkgU3RhbmRhcmQgU3BlZWQgSTJDIENsb2NrIFNDTCBIaWdoIENvdW50IFJlZ2lzdGVyICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENDsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1NTX1NDTF9MQ05UX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MTgpIFN0YW5kYXJkIFNwZWVkIEkyQyBDbG9jayBTQ0wgTG93IENvdW50IFJlZ2lzdGVyICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDU7CisgIF9fSU8gdWludDE2X3QgIEkyQ19GU19TQ0xfSENOVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDFDKSBGYXN0IFNwZWVkIEkyQyBDbG9jayBTQ0wgSGlnaCBDb3VudCBSZWdpc3RlciAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ2OworICBfX0lPIHVpbnQxNl90ICBJMkNfRlNfU0NMX0xDTlRfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQyMCkgRmFzdCBTcGVlZCBJMkMgQ2xvY2sgU0NMIExvdyBDb3VudCBSZWdpc3RlciAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEN1s1XTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0lOVFJfU1RBVF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0MkMpIEkyQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDg7CisgIF9fSU8gdWludDE2X3QgIEkyQ19JTlRSX01BU0tfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDMwKSBJMkMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ5OworICBfX0lPIHVpbnQxNl90ICBJMkNfUkFXX0lOVFJfU1RBVF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQzNCkgSTJDIFJhdyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTA7CisgIF9fSU8gdWludDE2X3QgIEkyQ19SWF9UTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDM4KSBJMkMgUmVjZWl2ZSBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1RYX1RMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0M0MpIEkyQyBUcmFuc21pdCBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEyOworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX0lOVFJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ0MCkgQ2xlYXIgQ29tYmluZWQgYW5kIEluZGl2aWR1YWwgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTM7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfUlhfVU5ERVJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDQ0KSBDbGVhciBSWF9VTkRFUiBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNDsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9SWF9PVkVSX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NDgpIENsZWFyIFJYX09WRVIgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE1OworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX1RYX09WRVJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ0QykgQ2xlYXIgVFhfT1ZFUiBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTY7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfUkRfUkVRX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDUwKSBDbGVhciBSRF9SRVEgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNzsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9UWF9BQlJUX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NTQpIENsZWFyIFRYX0FCUlQgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE4OworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX1JYX0RPTkVfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ1OCkgQ2xlYXIgUlhfRE9ORSBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTk7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfQUNUSVZJVFlfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDVDKSBDbGVhciBBQ1RJVklUWSBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMDsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NMUl9TVE9QX0RFVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NjApIENsZWFyIFNUT1BfREVUIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIxOworICBfX0lPIHVpbnQxNl90ICBJMkNfQ0xSX1NUQVJUX0RFVF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ2NCkgQ2xlYXIgU1RBUlRfREVUIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjI7CisgIF9fSU8gdWludDE2X3QgIEkyQ19DTFJfR0VOX0NBTExfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDY4KSBDbGVhciBHRU5fQ0FMTCBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMzsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0VOQUJMRV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NkMpIEkyQyBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI0OworICBfX0lPIHVpbnQxNl90ICBJMkNfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ3MCkgSTJDIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjU7CisgIF9fSU8gdWludDE2X3QgIEkyQ19UWEZMUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDc0KSBJMkMgVHJhbnNtaXQgRklGTyBMZXZlbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNjsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1JYRkxSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0NzgpIEkyQyBSZWNlaXZlIEZJRk8gTGV2ZWwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI3OworICBfX0lPIHVpbnQxNl90ICBJMkNfU0RBX0hPTERfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ3QykgSTJDIFNEQSBIb2xkIFRpbWUgTGVuZ3RoIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjg7CisgIF9fSU8gdWludDE2X3QgIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDgwKSBJMkMgVHJhbnNtaXQgQWJvcnQgU291cmNlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyOVszXTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0RNQV9DUl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0ODgpIERNQSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMwOworICBfX0lPIHVpbnQxNl90ICBJMkNfRE1BX1RETFJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ4QykgRE1BIFRyYW5zbWl0IERhdGEgTGV2ZWwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzE7CisgIF9fSU8gdWludDE2X3QgIEkyQ19ETUFfUkRMUl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDkwKSBJMkMgUmVjZWl2ZSBEYXRhIExldmVsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMjsKKyAgX19JTyB1aW50MTZfdCAgSTJDX1NEQV9TRVRVUF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0OTQpIEkyQyBTREEgU2V0dXAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMzOworICBfX0lPIHVpbnQxNl90ICBJMkNfQUNLX0dFTkVSQUxfQ0FMTF9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTQ5OCkgSTJDIEFDSyBHZW5lcmFsIENhbGwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzQ7CisgIF9fSU8gdWludDE2X3QgIEkyQ19FTkFCTEVfU1RBVFVTX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNDlDKSBJMkMgRW5hYmxlIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzNTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0lDX0ZTX1NQS0xFTl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0QTApIEkyQyBTUyBhbmQgRlMgc3Bpa2Ugc3VwcHJlc3Npb24gbGltaXQgU2l6ZSAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM2WzQxXTsKKyAgX19JTyB1aW50MTZfdCAgSTJDX0NPTVBfUEFSQU0xX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0RjQpIENvbXBvbmVudCBQYXJhbWV0ZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkNfQ09NUF9QQVJBTTJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTRGNikgQ29tcG9uZW50IFBhcmFtZXRlciBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQ19DT01QX1ZFUlNJT05fUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNEY4KSBJMkMgQ29tcG9uZW50IFZlcnNpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDX0NPTVAyX1ZFUlNJT047ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE0RkEpIEkyQyBDb21wb25lbnQyIFZlcnNpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkNfQ09NUF9UWVBFX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTRGQykgSTJDIENvbXBvbmVudCBUeXBlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQ19DT01QX1RZUEUyX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNEZFKSBJMkMgQ29tcG9uZW50MiBUeXBlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gSTJDX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgSTJDMiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBJMkMyIHJlZ2lzdGVycyAoSTJDMikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUwMCkgSTJDMiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ09OX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTAwKSBJMkMgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfVEFSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTA0KSBJMkMgVGFyZ2V0IEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxOworICBfX0lPIHVpbnQxNl90ICBJMkMyX1NBUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUwOCkgSTJDIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMlszXTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9EQVRBX0NNRF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MTApIEkyQyBSeC9UeCBEYXRhIEJ1ZmZlciBhbmQgQ29tbWFuZCBSZWdpc3RlciAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfU1NfU0NMX0hDTlRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTE0KSBTdGFuZGFyZCBTcGVlZCBJMkMgQ2xvY2sgU0NMIEhpZ2ggQ291bnQgUmVnaXN0ZXIgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ0OworICBfX0lPIHVpbnQxNl90ICBJMkMyX1NTX1NDTF9MQ05UX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUxOCkgU3RhbmRhcmQgU3BlZWQgSTJDIENsb2NrIFNDTCBMb3cgQ291bnQgUmVnaXN0ZXIgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9GU19TQ0xfSENOVF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MUMpIEZhc3QgU3BlZWQgSTJDIENsb2NrIFNDTCBIaWdoIENvdW50IFJlZ2lzdGVyICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDY7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfRlNfU0NMX0xDTlRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTIwKSBGYXN0IFNwZWVkIEkyQyBDbG9jayBTQ0wgTG93IENvdW50IFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ3WzVdOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0lOVFJfU1RBVF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUyQykgSTJDIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEODsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9JTlRSX01BU0tfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MzApIEkyQyBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDk7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTM0KSBJMkMgUmF3IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMDsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9SWF9UTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1MzgpIEkyQyBSZWNlaXZlIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDExOworICBfX0lPIHVpbnQxNl90ICBJMkMyX1RYX1RMX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTUzQykgSTJDIFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTI7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX0lOVFJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTQwKSBDbGVhciBDb21iaW5lZCBhbmQgSW5kaXZpZHVhbCBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMzsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfUlhfVU5ERVJfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NDQpIENsZWFyIFJYX1VOREVSIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE0OworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9SWF9PVkVSX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU0OCkgQ2xlYXIgUlhfT1ZFUiBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTU7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX1RYX09WRVJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTRDKSBDbGVhciBUWF9PVkVSIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNjsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfUkRfUkVRX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NTApIENsZWFyIFJEX1JFUSBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE3OworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9UWF9BQlJUX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU1NCkgQ2xlYXIgVFhfQUJSVCBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTg7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX1JYX0RPTkVfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTU4KSBDbGVhciBSWF9ET05FIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxOTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfQUNUSVZJVFlfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NUMpIENsZWFyIEFDVElWSVRZIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIwOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NMUl9TVE9QX0RFVF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU2MCkgQ2xlYXIgU1RPUF9ERVQgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjE7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ0xSX1NUQVJUX0RFVF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTY0KSBDbGVhciBTVEFSVF9ERVQgSW50ZXJydXB0IFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMjsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DTFJfR0VOX0NBTExfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NjgpIENsZWFyIEdFTl9DQUxMIEludGVycnVwdCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIzOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0VOQUJMRV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU2QykgSTJDIEVuYWJsZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjQ7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTcwKSBJMkMgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9UWEZMUl9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1NzQpIEkyQyBUcmFuc21pdCBGSUZPIExldmVsIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI2OworICBfX0lPIHVpbnQxNl90ICBJMkMyX1JYRkxSX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU3OCkgSTJDIFJlY2VpdmUgRklGTyBMZXZlbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjc7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfU0RBX0hPTERfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNTdDKSBJMkMgU0RBIEhvbGQgVGltZSBMZW5ndGggUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyODsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1ODApIEkyQyBUcmFuc21pdCBBYm9ydCBTb3VyY2UgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI5WzNdOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0RNQV9DUl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU4OCkgRE1BIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzA7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfRE1BX1RETFJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNThDKSBETUEgVHJhbnNtaXQgRGF0YSBMZXZlbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMTsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9ETUFfUkRMUl9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1OTApIEkyQyBSZWNlaXZlIERhdGEgTGV2ZWwgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMyOworICBfX0lPIHVpbnQxNl90ICBJMkMyX1NEQV9TRVRVUF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTU5NCkgSTJDIFNEQSBTZXR1cCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzM7CisgIF9fSU8gdWludDE2X3QgIEkyQzJfQUNLX0dFTkVSQUxfQ0FMTF9SRUc7ICAgICAgICAgLyohPCAoQCAweDUwMDAxNTk4KSBJMkMgQUNLIEdlbmVyYWwgQ2FsbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzNDsKKyAgX19JTyB1aW50MTZfdCAgSTJDMl9FTkFCTEVfU1RBVFVTX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1OUMpIEkyQyBFbmFibGUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM1OworICBfX0lPIHVpbnQxNl90ICBJMkMyX0lDX0ZTX1NQS0xFTl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTVBMCkgSTJDIFNTIGFuZCBGUyBzcGlrZSBzdXBwcmVzc2lvbiBsaW1pdCBTaXplICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzZbNDFdOworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NPTVBfUEFSQU0xX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTVGNCkgQ29tcG9uZW50IFBhcmFtZXRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ09NUF9QQVJBTTJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNUY2KSBDb21wb25lbnQgUGFyYW1ldGVyIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DT01QX1ZFUlNJT05fUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1RjgpIEkyQyBDb21wb25lbnQgVmVyc2lvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJMkMyX0NPTVAyX1ZFUlNJT047ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTVGQSkgSTJDIENvbXBvbmVudDIgVmVyc2lvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEkyQzJfQ09NUF9UWVBFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNUZDKSBJMkMgQ29tcG9uZW50IFR5cGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSTJDMl9DT01QX1RZUEUyX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE1RkUpIEkyQyBDb21wb25lbnQyIFR5cGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBJMkMyX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIElSICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBJUiByZWdpc3RlcnMgKElSKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzAwKSBJUiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfRlJFUV9DQVJSSUVSX09OX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MDApIERlZmluZXMgdGhlIGNhcnJpZXIgc2lnbmFsIGhpZ2ggZHVyYXRpb24gICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJUl9GUkVRX0NBUlJJRVJfT0ZGX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcwMikgRGVmbmVzIHRoZSBjYXJyaWVyIHNpZ25hbCBsb3cgZHVyYXRpb24gICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX0xPR0lDX09ORV9USU1FX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzA0KSBEZWZpbmVzIHRoZSBsb2dpYyBvbmUgd2F2ZWZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfTE9HSUNfWkVST19USU1FX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MDYpIERlZmluZXMgdGhlIGxvZ2ljIHplcm8gd2F2ZWZyb20gICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJUl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcwOCkgSVIgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzBBKSBJUiBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfUkVQRUFUX1RJTUVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MEMpIERlZmluZXMgdGhlIHJlcGVhdCB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBJUl9NQUlOX0ZJRk9fUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTcwRSkgTWFpbiBmaWZvIHdyaXRlIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIElSX1JFUEVBVF9GSUZPX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNzEwKSBSZXBlYXQgZmlmbyB3cml0ZSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgSVJfSVJRX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE3MTIpIElSIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBJUl9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgS0JTQ0FOICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgS0JTQ0FOIHJlZ2lzdGVycyAoS0JTQ0FOKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjAwKSBLQlNDQU4gU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MDApIEtleWJvYXJkIHNjYW5uZXIgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwMikgS2V5Ym9hcmQgc2Nhbm5lciBjb250cm9sIDIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX01BVFJJWF9TSVpFX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjA0KSBEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9ERUJPVU5DRV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwNikgRGVmaW5lcyB0aGUgZGVib3VuY2UgdGltZSBmb3Iga2V5IHByZXNzIGFuZCByZWxlYXNlICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjA4KSBrZXlib2FyZCBzY2FubmVyIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fTUVTU0FHRV9LRVlfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MEEpIFJldHVybnMgYSBrZXkgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMDBfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYwQykgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDAwICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AwMV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjBFKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMDEgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDAyX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MTApIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAwMiAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMDNfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYxMikgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDAzICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AwNF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjE0KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMDQgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDA1X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MTYpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAwNSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMDZfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYxOCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDA2ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AwN19NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjFBKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMDcgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDEwX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MUMpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAxMCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMTFfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYxRSkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDExICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AxMl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjIwKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMTIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDEzX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MjIpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAxMyAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMTRfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYyNCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDE0ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AxNV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjI2KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMTUgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDE2X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MjgpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAxNiAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMTdfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYyQSkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDE3ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AyMF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjJDKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMjAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDIxX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MkUpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAyMSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMjJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYzMCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDIyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AyM19NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjMyKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMjMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDI0X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2MzQpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAyNCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRFszXTsKKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDMwX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2M0MpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAzMCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMzFfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTYzRSkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDMxICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AzMl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjQwKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMzIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDMzX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NDIpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAzMyAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMzRfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY0NCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDM0ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1AzNV9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjQ2KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQMzUgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDM2X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NDgpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFAzNiAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QMzdfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY0QSkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDM3ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1A0MF9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjRDKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQNDAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDQxX01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NEUpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFA0MSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QNDJfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY1MCkgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDQyICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1A0M19NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjUyKSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQNDMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDQ0X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NTQpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFA0NCAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBLQlNDTl9QNDVfTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTY1NikgRGVmaW5lcyB0aGUga2V5Ym9hcmQgbW9kZSBmb3IgUDQ1ICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIEtCU0NOX1A0Nl9NT0RFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxNjU4KSBEZWZpbmVzIHRoZSBrZXlib2FyZCBtb2RlIGZvciBQNDYgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgS0JTQ05fUDQ3X01PREVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE2NUEpIERlZmluZXMgdGhlIGtleWJvYXJkIG1vZGUgZm9yIFA0NyAgICAgICAgICAgICAgICAgICAgICAqLworfSBLQlNDQU5fVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBPVFBDICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIE9UUEMgcmVnaXN0ZXJzIChPVFBDKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDAwKSBPVFBDIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19NT0RFX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMDApIE1vZGUgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX1BDVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAwNCkgQml0LXByb2dyYW1taW5nIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfU1RBVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDA4KSBTdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19BSEJBRFJfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMEMpIEFIQiBtYXN0ZXIgc3RhcnQgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX0NFTEFEUl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAxMCkgTWFjcm9jZWxsIHN0YXJ0IGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfTldPUkRTX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDE0KSBOdW1iZXIgb2Ygd29yZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19GRlBSVF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMTgpIFBvcnRzIGFjY2VzcyB0byBmaWZvIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX0ZGUkRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAxQykgVGhlIGRhdGEgd2hpY2ggaGF2ZSB0YWtlbiB3aXRoIHRoZSBsYXRlc3QgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgT1RQQ19GRlBSVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfUFdPUkRMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDIwKSBUaGUgMzIgbG93ZXIgYml0cyBvZiB0aGUgNjQtYml0IHdvcmQgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9ncmFtbWVkLCB3aGVuIHRoZSBNUFJPRyBtb2RlIGlzIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19QV09SREhfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMjQpIFRoZSAzMiBoaWdoZXIgYml0cyBvZiB0aGUgNjQtYml0IHdvcmQgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9ncmFtbWVkLCB3aGVuIHRoZSBNUFJPRyBtb2RlIGlzIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgT1RQQ19USU0xX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MDdGNDAwMjgpIFZhcmlvdXMgdGltaW5nIHBhcmFtZXRlcnMgb2YgdGhlIE9UUCBjZWxsLiAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBPVFBDX1RJTTJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwN0Y0MDAyQykgVmFyaW91cyB0aW1pbmcgcGFyYW1ldGVycyBvZiB0aGUgT1RQIGNlbGwuICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIE9UUENfVEVTVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDA3RjQwMDMwKSBPVFBDX1RFU1RfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gT1RQQ19UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFBBVENIICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgUEFUQ0ggcmVnaXN0ZXJzIChQQVRDSCkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDAwMCkgUEFUQ0ggU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX1ZBTElEX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDAwKSBWYWxpZGl0eSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfVkFMSURfU0VUX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwMDQpIFZhbGlkaXR5IFNldCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9WQUxJRF9SRVNFVF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDAwOCkgVmFsaWRpdHkgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEWzVdOworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDAyMCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwMjgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDI7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDMwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQzOworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSM19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDAzOCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENDsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjRfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwNDApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDU7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFI1X1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDQ4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ2OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSNl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA1MCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVENzsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjdfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwNTgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDg7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFI4X1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDYwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQ5OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSOV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA2OCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTA7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxMF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDcwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxMTsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjExX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwNzgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDEyOworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMTJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA4MCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTM7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxM19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMDg4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNDsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjE0X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwOTApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE1OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMTVfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDA5OCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTY7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxNl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEEwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQxNzsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjE3X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwQTgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDE4OworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMThfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBCMCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMTk7CisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIxOV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEI4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRUQyMDsKKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjIwX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwQzApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9EQVRBMjBfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBDNCkgUGF0Y2ggRGF0YSBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyMV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEM4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfREFUQTIxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwQ0MpIFBhdGNoIERhdGEgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMjJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBEMCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0RBVEEyMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEQ0KSBQYXRjaCBEYXRhIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjIzX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRDgpIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9EQVRBMjNfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBEQykgUGF0Y2ggRGF0YSBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyNF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEUwKSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfREFUQTI0X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRTQpIFBhdGNoIERhdGEgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9BRERSMjVfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBFOCkgUGF0Y2ggQWRkcmVzcyBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0RBVEEyNV9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEVDKSBQYXRjaCBEYXRhIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfQUREUjI2X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRjApIFBhdGNoIEFkZHJlc3MgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBQQVRDSF9EQVRBMjZfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg0MDA1MDBGNCkgUGF0Y2ggRGF0YSBmaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFBBVENIX0FERFIyN19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDQwMDUwMEY4KSBQYXRjaCBBZGRyZXNzIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUEFUQ0hfREFUQTI3X1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NDAwNTAwRkMpIFBhdGNoIERhdGEgZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBQQVRDSF9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgUExMRElHICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgUExMRElHIHJlZ2lzdGVycyAoUExMRElHKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDAwKSBQTExESUcgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMDApIFJGX1NZTlRIX0NUUkwxX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9DVFJMMV9GVERGX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQwMikgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDA0KSBSRl9TWU5USF9DVFJMMl9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMDYpIFJGX1NZTlRIX0NUUkwyX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9DVFJMM19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQwOCkgUkZfU1lOVEhfQ1RSTDNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1ZDT0NBTF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDBBKSBSRl9WQ09DQUxfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMEMpIFJGX01HQUlOX0NUUkxfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DVFJMX0ZUREZfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQwRSkgUkZfTUdBSU5fQ1RSTF9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NUUkwyX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDEwKSBSRl9NR0FJTl9DVFJMMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVkNPX0NBTENBUF9CSVQxNF9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMTIpIFJGX1ZDT19DQUxDQVBfQklUMTRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9WQ09fQ0FMQ0FQX0JJVDE1X1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQxNCkgUkZfVkNPX0NBTENBUF9CSVQxNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0JNQ1dfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDE2KSBSRl9CTUNXX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfS01PRF9BTFBIQV9CTEVfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMTgpIFJGX0tNT0RfQUxQSEFfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9LTU9EX0FMUEhBX0ZUREZfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQxQSkgUkZfS01PRF9BTFBIQV9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9SRVNVTFRfQkxFX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQxRSkgTXVzdCBiZSBSZXRhaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NZTlRIX1JFU1VMVF9GVERGX1JFRzsgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDIwKSBNdXN0IGJlIFJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMjIpIE11c3QgYmUgUmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9SRVNVTFQyX0ZUREZfUkVHOyAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQyNCkgTXVzdCBiZSBSZXRhaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1NZTlRIX1JFU1VMVDNfRlRERl9SRUc7ICAgICAgICAgLyohPCAoQCAweDUwMDAyRDI2KSBSRl9TWU5USF9SRVNVTFQzX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ0FMQ0FQMV9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMjgpIFJGX0NBTENBUDFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DQUxDQVAyX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQyQSkgUkZfQ0FMQ0FQMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX05NRF9PRkZTRVRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDJDKSBPZmZzZXQgdmFsdWVzIGZvciBwaGFzZSBhbGlnbm1lbnQgYWZ0ZXIgVkNPIGNhbGlicmF0aW9uLiAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDE2X3QgIFJGX0ZUREZfUEhZQVRUUl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDMwKSBSRl9GVERGX1BIWUFUVFJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ0FMVFJJTV9TVEVQMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMzIpIFJGX0NBTFRSSU1fU1RFUDFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DQUxUUklNX1NURVAyX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQzNCkgUkZfQ0FMVFJJTV9TVEVQMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NBTFRSSU1fU1RFUDNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDM2KSBSRl9DQUxUUklNX1NURVAzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ0FMVFJJTV9TVEVQNF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJEMzgpIFJGX0NBTFRSSU1fU1RFUDRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DVFJMM19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQzQSkgUkZfTUdBSU5fQ1RSTDNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1ZDT19GUkVRX0VTVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDNDKSBSRl9WQ09fRlJFUV9FU1RfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyOworICBfX0lPIHVpbnQxNl90ICBSRl9TWU5USF9TUEFSRV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ0MCkgTVNLIG1vZHVsYXRvciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01TS01PRF9DVFJMMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDQyKSBNU0sgbW9kdWxhdG9yIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTVNLTU9EX0NISVBMX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENDQpIE1TSyBtb2R1bGF0b3IgQ0hJUCBjb250cm9sIGxvd2VyIDE2IGJpdCAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NU0tNT0RfQ0hJUEhfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ0NikgTVNLIG1vZHVsYXRvciBDSElQIGNvbnRyb2wgdXBwZXIgMTYgYml0ICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYREFDX1RFU1RfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDQ4KSBSZWdpc3RlciB0byBwcm92aWRlIHZhbHVlIHRvIFRYREFDICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzWzNdOworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DT01QX1ZBTDBfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ1MCkgUkZfTUdBSU5fQ09NUF9WQUwwX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NPTVBfVkFMMV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDUyKSBSRl9NR0FJTl9DT01QX1ZBTDFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ09NUF9WQUwyX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENTQpIFJGX01HQUlOX0NPTVBfVkFMMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DT01QX1ZBTDNfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ1NikgUkZfTUdBSU5fQ09NUF9WQUwzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NPTVBfVkFMNF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDU4KSBSRl9NR0FJTl9DT01QX1ZBTDRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdBSU5fQ09NUF9WQUw1X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENUEpIFJGX01HQUlOX0NPTVBfVkFMNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NR0FJTl9DT01QX1ZBTDZfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ1QykgUkZfTUdBSU5fQ09NUF9WQUw2X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01HQUlOX0NPTVBfVkFMN19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDVFKSBSRl9NR0FJTl9DT01QX1ZBTDdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUFVMU0VfVEJMXzBfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENjApIFJGX1BVTFNFX1RCTF8wX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QVUxTRV9UQkxfMV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ2MikgUkZfUFVMU0VfVEJMXzFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BVTFNFX1RCTF8yX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDY0KSBSRl9QVUxTRV9UQkxfMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUFVMU0VfVEJMXzNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENjYpIFJGX1BVTFNFX1RCTF8zX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QVUxTRV9UQkxfNF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ2OCkgUkZfUFVMU0VfVEJMXzRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BVTFNFX1RCTF81X1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDZBKSBSRl9QVUxTRV9UQkxfNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUFVMU0VfVEJMXzZfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDJENkMpIFJGX1BVTFNFX1RCTF82X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QVUxTRV9UQkxfN19SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMkQ2RSkgUkZfUFVMU0VfVEJMXzdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BVTFNFX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyRDcwKSBSRl9QVUxTRV9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gUExMRElHX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgUVNQSUMgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBRU1BJQyByZWdpc3RlcnMgKFFTUElDKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDAwKSBRU1BJQyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfQ1RSTEJVU19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMDApIFNQSSBCdXMgY29udHJvbCByZWdpc3RlciBmb3IgdGhlIE1hbnVhbCBtb2RlICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19DVFJMTU9ERV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAwNCkgTW9kZSBDb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX1JFQ1ZEQVRBX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDA4KSBSZWNlaXZlZCBkYXRhIGZvciB0aGUgTWFudWFsIG1vZGUgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfQlVSU1RDTURBX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMEMpIFRoZSB3YXkgb2YgcmVhZGluZyBpbiBBdXRvIG1vZGUgKGNvbW1hbmQgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19CVVJTVENNREJfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAxMCkgVGhlIHdheSBvZiByZWFkaW5nIGluIEF1dG8gbW9kZSAoY29tbWFuZCByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX1NUQVRVU19SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDE0KSBUaGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZSBRU1BJIGNvbnRyb2xsZXIgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfV1JJVEVEQVRBX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMTgpIFdyaXRlIGRhdGEgdG8gU1BJIEJ1cyBmb3IgdGhlIE1hbnVhbCBtb2RlICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19SRUFEREFUQV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAxQykgUmVhZCBkYXRhIGZyb20gU1BJIEJ1cyBmb3IgdGhlIE1hbnVhbCBtb2RlICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0RVTU1ZREFUQV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDIwKSBTZW5kIGR1bW15IGNsb2NrcyB0byBTUEkgQnVzIGZvciB0aGUgTWFudWFsIG1vZGUgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfRVJBU0VDVFJMX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMjQpIFFTUEkgRXJhc2UgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19FUkFTRUNNREFfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAyOCkgVGhlIHdheSBvZiBlcmFzaW5nIGluIEF1dG8gbW9kZSAoY29tbWFuZCByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX0VSQVNFQ01EQl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDJDKSBUaGUgd2F5IG9mIGVyYXNpbmcgaW4gQXV0byBtb2RlIChjb21tYW5kIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfQlVSU1RCUktfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMzApIFJlYWQgYnJlYWsgc2VxdWVuY2UgaW4gQXV0byBtb2RlICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19TVEFUVVNDTURfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAzNCkgVGhlIHdheSBvZiByZWFkaW5nIHRoZSBzdGF0dXMgb2YgZXh0ZXJuYWwgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBBdXRvIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgUVNQSUNfQ0hDS0VSQVNFX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4MEMwMDAwMzgpIENoZWNrIGVyYXNlIHByb2dyZXNzIGluIEF1dG8gbW9kZSAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBRU1BJQ19HUF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHgwQzAwMDAzQykgUVNQSSBHZW5lcmFsIFB1cnBvc2UgY29udHJvbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFFTUElDX1VDT0RFX1NUQVJUOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDBDMDAwMDQwKSBRU1BJQyB1Q29kZSBtZW1vcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gUVNQSUNfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBRVUFEICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFFVQUQgcmVnaXN0ZXJzIChRVUFEKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQTAwKSBRVUFEIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUURFQ19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFBMDApIFF1YWQgZGVjb2RlciBjb250cm9sIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBRREVDX1hDTlRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUEwMikgQ291bnRlciB2YWx1ZSBvZiB0aGUgWCBBeGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFFERUNfWUNOVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxQTA0KSBDb3VudGVyIHZhbHVlIG9mIHRoZSBZIEF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUURFQ19aQ05UX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDFBMDYpIENvdW50ZXIgdmFsdWUgb2YgdGhlIFogQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBRREVDX0NMT0NLRElWX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMUEwOCkgUXVhZCBkZWNvZGVyIGNsb2NrIGRpdmlkZXIgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCit9IFFVQURfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBSRkNVICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFJGQ1UgcmVnaXN0ZXJzIChSRkNVKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDAwKSBSRkNVIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MzJfdCAgUkVTRVJWRURbNF07CisgIF9fSU8gdWludDE2X3QgIFJGX09WRVJSVUxFX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDEwKSBSRl9PVkVSUlVMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRElBR0lSUTAxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwMTIpIEJMRS9SRiBEaWFnbm9zdGljIElSUSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9ESUFHSVJRMjNfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjAxNCkgQkxFL1JGIERpYWdub3N0aWMgSVJRIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RJQUdJUlFfU1RBVF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDE2KSBCTEUvUkYgRGlhZ25vc3RpYyBJUlEgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUdDX0VYVDFfTFVUX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwMTgpIFJGX0FHQ19FWFQxX0xVVF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDFbM107CisgIF9fSU8gdWludDE2X3QgIFJGX0NBTFNUQVRFX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDIwKSBSRl9DQUxTVEFURV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyWzE1XTsKKyAgX19JTyB1aW50MTZfdCAgUkZfU0NBTl9GRUVEQkFDS19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwNDApIFJGX1NDQU5fRkVFREJBQ0tfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9SRUZfT1NDX0JMRV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA0MikgUkZfUkVGX09TQ19CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1JFRl9PU0NfRlRERl9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDQ0KSBSRl9SRUZfT1NDX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzWzVdOworICBfX0lPIHVpbnQxNl90ICBSRl9DQUxfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA1MCkgUkZfQ0FMX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENDsKKyAgX19JTyB1aW50MTZfdCAgUkZfSVJRX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwNTQpIFJGX0lSUV9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDU7CisgIF9fSU8gdWludDE2X3QgIFJGX0FEQ0lfRENfT0ZGU0VUX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDU4KSBNdXN0IGJlIFJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQURDUV9EQ19PRkZTRVRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwNUEpIE11c3QgYmUgUmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbOV07CisgIF9fSU8gdWludDE2X3QgIFJGX1NQQVJFMV9CTEVfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDgwKSBSRl9TUEFSRTFfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfU1BBUkUxX0ZUREZfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwODIpIFJGX1NQQVJFMV9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9CSUFTX0NUUkwxX0JMRV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA4NCkgUkZfQklBU19DVFJMMV9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDg2KSBSRl9CSUFTX0NUUkwxX0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfSUZGX0NUUkwxX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwODgpIFJGX0lGRl9DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BRENfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA4QSkgUkZfQURDX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FEQ19DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDhDKSBSRl9BRENfQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQURDX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOEUpIFJGX0FEQ19DVFJMM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QQV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA5MCkgUmVtb3ZlZCBvYnNvbGV0ZSB2YWx1ZXMgb2YgYml0cyAxMDo3LCBwYV9wdyBiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUdDX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOTIpIFJGX01HQ19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9WQ09WQVJfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA5NCkgUkZfVkNPVkFSX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BGRF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDk2KSBSRl9QRkRfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ1BfQ1RSTF9CTEVfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOTgpIFJGX0NQX0NUUkxfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DUF9DVFJMX0ZUREZfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjA5QSkgUkZfQ1BfQ1RSTF9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMDlDKSBMRiByZXNpc3RvciBzZXR0aW5nIGluIEJMRSBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTEZfUkVTX0NUUkxfRlRERl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwOUUpIExGIHJlc2lzdG9yIHNldHRpbmcgaW4gRlRERiBtb2RlICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBBMCkgUkZfTUlYRVJfQ1RSTDFfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEEyKSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTUlYRVJfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQTQpIFJGX01JWEVSX0NUUkwyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9MRl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBBNikgUkZfTEZfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1REQ19DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEE4KSBUREMgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfSU9fQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQUEpIFJGX0lPX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9MTkFfQ1RSTDFfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBBQykgUkZfTE5BX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0xOQV9DVFJMMl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEFFKSBSRl9MTkFfQ1RSTDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTE5BX0NUUkwzX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQjApIFJGX0xOQV9DVFJMM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9WQ09fQU1QX0NUUkwxX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBCMikgUkZfVkNPX0FNUF9DVFJMMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1ZDT19BTVBfQ1RSTDJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEI0KSBSRl9WQ09fQU1QX0NUUkwyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ3WzVdOworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfQkxFX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBDMCkgVFggUG93ZXIgc2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYX1BXUl9MVVRfMV9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEMyKSBUWCBQb3dlciBzZXR0aW5nIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0xVVF8yX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQzQpIFRYIFBvd2VyIHNldHRpbmcgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfTFVUXzNfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBDNikgVFggUG93ZXIgc2V0dGluZyAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYX1BXUl9MVVRfNF9SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEM4KSBUWCBQb3dlciBzZXR0aW5nIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0xVVF81X1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwQ0EpIFRYIFBvd2VyIHNldHRpbmcgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfTFVUXzZfUkVHOyAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBDQykgVFggUG93ZXIgc2V0dGluZyA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYX1BXUl9MVVRfN19SRUc7ICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMENFKSBUWCBQb3dlciBzZXR0aW5nIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhfUFdSX0ZUREZfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRDApIFRYIFBvd2VyIHNldHRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9UWF9QV1JfTFVUX1JEX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBEMikgVFggUG93ZXIgcmVhZCBiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0RJVl9JUV9SWF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEQ0KSBCaWFzIHRyaW1taW5nIG9mIElRIGRpdmlkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRElWX0lRX1RYX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRDYpIEJpYXMgdHJpbW1pbmcgb2YgSVEgZGl2aWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9MT19JUV9UUklNX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBEOCkgVHJpbSBzZXR0aW5ncyBmb3IgSVEgTE8gcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1RYREFDX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMERBKSBDb250cm9sIHNldHRpbmdzIGZvciB0aGUgVFhEQUMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFRzsgICAgICAgICAvKiE8IChAIDB4NTAwMDIwREMpIEN1cnJlbnQgQ0FMIENBUCB2YWx1ZSBmb3IgVFhEQUMgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDg7CisgIF9fSU8gdWludDE2X3QgIFJGX0lGRl9SRVNVTFRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEUwKSBOb3QgcmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfSUZGX0NDX0JMRV9TRVQxX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRTIpIE11c3QgYmUgcmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9JRkZfQ0NfQkxFX1NFVDJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBFNCkgTXVzdCBiZSByZXRhaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0lGRl9DQ19GVERGX1NFVDFfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEU2KSBNdXN0IGJlIHJldGFpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfSUZGX0NDX0ZUREZfU0VUMl9SRUc7ICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRTgpIE11c3QgYmUgcmV0YWluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9JRkZfQ0FMX0NBUF9TVEFUX1JFRzsgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjBFQSkgQ3VycmVudCBDQUxfQ0FQIHZhbHVlIGFwcGxpZWQgdG8gSUYgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX01JWF9DQUxfQ0FQX1NUQVRfUkVHOyAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMEVDKSBDdXJyZW50IENBTF9DQVAgdmFsdWUgYXBwbGllZCB0byBJRiAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfTEZfQ0FMX0NBUF9TVEFUX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIwRUUpIEN1cnJlbnQgQ0FMX0NBUCB2YWx1ZSBhcHBsaWVkIHRvIElGICAgICAgICAgICAgICAgICAgICAqLworfSBSRkNVX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgUkZDVV9QT1dFUiAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBSRkNVX1BPV0VSIHJlZ2lzdGVycyAoUkZDVV9QT1dFUikKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIwMCkgUkZDVV9QT1dFUiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcwX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjAwKSBSRl9FTkFCTEVfQ09ORklHMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzFfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMDIpIFJGX0VOQUJMRV9DT05GSUcxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIwNCkgUkZfRU5BQkxFX0NPTkZJRzJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjA2KSBSRl9FTkFCTEVfQ09ORklHM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMDgpIFJGX0VOQUJMRV9DT05GSUc0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIwQSkgUkZfRU5BQkxFX0NPTkZJRzVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc2X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjBDKSBSRl9FTkFCTEVfQ09ORklHNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzdfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMEUpIFJGX0VOQUJMRV9DT05GSUc3X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHOF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIxMCkgUkZfRU5BQkxFX0NPTkZJRzhfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc5X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjEyKSBSRl9FTkFCTEVfQ09ORklHOV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzEwX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMTQpIFJGX0VOQUJMRV9DT05GSUcxMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMTFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIxNikgUkZfRU5BQkxFX0NPTkZJRzExX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxMl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjE4KSBSRl9FTkFCTEVfQ09ORklHMTJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzEzX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMUEpIFJGX0VOQUJMRV9DT05GSUcxM19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMTRfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIxQykgUkZfRU5BQkxFX0NPTkZJRzE0X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxNV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjFFKSBSRl9FTkFCTEVfQ09ORklHMTVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzE2X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMjApIFJGX0VOQUJMRV9DT05GSUcxNl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMTdfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIyMikgUkZfRU5BQkxFX0NPTkZJRzE3X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcxOF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjI0KSBSRl9FTkFCTEVfQ09ORklHMThfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzE5X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMjYpIFJGX0VOQUJMRV9DT05GSUcxOV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjBfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIyOCkgUkZfRU5BQkxFX0NPTkZJRzIwX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyMV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjJBKSBSRl9FTkFCTEVfQ09ORklHMjFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzIyX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMkMpIFJGX0VOQUJMRV9DT05GSUcyMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjIyRSkgUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjMwKSBSRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzI1X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMzIpIFJGX0VOQUJMRV9DT05GSUcyNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjZfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIzNCkgUkZfRU5BQkxFX0NPTkZJRzI2X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyN19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjM2KSBSRl9FTkFCTEVfQ09ORklHMjdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzI4X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyMzgpIFJGX0VOQUJMRV9DT05GSUcyOF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMjlfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjIzQSkgUkZfRU5BQkxFX0NPTkZJRzI5X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczMF9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjNDKSBSRl9FTkFCTEVfQ09ORklHMzBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyM0UpIFJGX0VOQUJMRV9DT05GSUczMV9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzJfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjI0MCkgUkZfRU5BQkxFX0NPTkZJRzMyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczM19SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjQyKSBSRl9FTkFCTEVfQ09ORklHMzNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM0X1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyNDQpIFJGX0VOQUJMRV9DT05GSUczNF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjI0NikgUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczNl9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjQ4KSBSRl9FTkFCTEVfQ09ORklHMzZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNEEpIFJGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjI0QykgUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczOV9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjRFKSBSRl9FTkFCTEVfQ09ORklHMzlfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQwX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyNTApIFJGX0VOQUJMRV9DT05GSUc0MF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDFfUkVHOyAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjI1MikgUkZfRU5BQkxFX0NPTkZJRzQxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0Ml9SRUc7ICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMjU0KSBSRl9FTkFCTEVfQ09ORklHNDJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQzX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIyNTYpIFJGX0VOQUJMRV9DT05GSUc0M19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjI1OCkgUkZfRU5BQkxFX0NPTkZJRzQ0X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjVBKSBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNUMpIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFRzsgICAgICAgIC8qITwgKEAgMHg1MDAwMjI1RSkgUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHOyAgICAgICAgLyohPCAoQCAweDUwMDAyMjYwKSBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUc7ICAgICAgICAvKiE8IChAIDB4NTAwMDIyNjIpIFJGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRFszN107CisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUcyM19GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkFFKSBSRl9FTkFCTEVfQ09ORklHMjNfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyQjApIFJGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDFbNl07CisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkJFKSBSRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyWzNdOworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzVfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJDNikgUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzM3X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyQ0EpIFJGX0VOQUJMRV9DT05GSUczN19GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJDQykgUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENFs1XTsKKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyRDgpIFJGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDVfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJEQSkgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkRDKSBSRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHOyAgICAgICAvKiE8IChAIDB4NTAwMDIyREUpIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUc7ICAgICAgIC8qITwgKEAgMHg1MDAwMjJFMCkgUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0VOQUJMRV9DT05GSUc0OV9GVERGX1JFRzsgICAgICAgLyohPCAoQCAweDUwMDAyMkUyKSBSRl9FTkFCTEVfQ09ORklHNDlfRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ1WzE1XTsKKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMDIpIFJGX0NOVFJMX1RJTUVSXzFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMwNCkgUkZfQ05UUkxfVElNRVJfMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzA2KSBSRl9DTlRSTF9USU1FUl8zX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfNF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMDgpIFJGX0NOVFJMX1RJTUVSXzRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl81X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMwQSkgUkZfQ05UUkxfVElNRVJfNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzZfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzBDKSBSRl9DTlRSTF9USU1FUl82X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfN19SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMEUpIFJGX0NOVFJMX1RJTUVSXzdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl84X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMxMCkgUkZfQ05UUkxfVElNRVJfOF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzlfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzEyKSBSRl9DTlRSTF9USU1FUl85X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTBfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMTQpIFJGX0NOVFJMX1RJTUVSXzEwX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8xMV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMxNikgUkZfQ05UUkxfVElNRVJfMTFfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzEyX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzE4KSBSRl9DTlRSTF9USU1FUl8xMl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTNfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMUEpIFJGX0NOVFJMX1RJTUVSXzEzX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8xNF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMxQykgUkZfQ05UUkxfVElNRVJfMTRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzE1X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzFFKSBSRl9DTlRSTF9USU1FUl8xNV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTZfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMjApIFJGX0NOVFJMX1RJTUVSXzE2X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8xN19SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMyMikgUkZfQ05UUkxfVElNRVJfMTdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzE4X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzI0KSBSRl9DTlRSTF9USU1FUl8xOF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMTlfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMjYpIFJGX0NOVFJMX1RJTUVSXzE5X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yMF9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMyOCkgUkZfQ05UUkxfVElNRVJfMjBfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzIxX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzJBKSBSRl9DTlRSTF9USU1FUl8yMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjJfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMkMpIFJGX0NOVFJMX1RJTUVSXzIyX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yM19SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMyRSkgUkZfQ05UUkxfVElNRVJfMjNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzI0X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzMwKSBSRl9DTlRSTF9USU1FUl8yNF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjVfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMzIpIFJGX0NOVFJMX1RJTUVSXzI1X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yNl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMzNCkgUkZfQ05UUkxfVElNRVJfMjZfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzI3X1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzM2KSBSRl9DTlRSTF9USU1FUl8yN19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMjhfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzMzgpIFJGX0NOVFJMX1RJTUVSXzI4X1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9DTlRSTF9USU1FUl8yOV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjMzQSkgUkZfQ05UUkxfVElNRVJfMjlfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0NOVFJMX1RJTUVSXzMwX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzNDKSBSRl9DTlRSTF9USU1FUl8zMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQ05UUkxfVElNRVJfMzFfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzM0UpIFJGX0NOVFJMX1RJTUVSXzMxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQzMl90ICBSRVNFUlZFRDZbMTZdOworICBfX0lPIHVpbnQxNl90ICBSRl9BTFdBWVNfRU4xX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjM4MCkgUkZfQUxXQVlTX0VOMV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX0FMV0FZU19FTjJfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzgyKSBSRl9BTFdBWVNfRU4yX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfQUxXQVlTX0VOM19SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzODQpIFJGX0FMV0FZU19FTjNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9BTFdBWVNfRU40X1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjM4NikgUkZfQUxXQVlTX0VONF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGX1BPUlRfRU5fQkxFX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAyMzg4KSBSRl9QT1JUX0VOX0JMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZfUE9SVF9FTl9GVERGX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDIzOEEpIFJGX1BPUlRfRU5fRlRERl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRl9QT1JUX1BPTF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMjM4QykgUkZfUE9SVF9QT0xfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFJGQ1VfUE9XRVJfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBSRlBUICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFJGUFQgcmVnaXN0ZXJzIChSRlBUKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNjAwKSBSRlBUIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZQVF9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM2MDApIENvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRlBUX0FERFJMX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzYwMikgQUhCIG1hc3RlciBzdGFydCBhZGRyZXNzIChMb3cgcGFydCkgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGUFRfQUREUkhfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNjA0KSBBSEIgbWFzdGVyIHN0YXJ0IGFkZHJlc3MgKEhpZ2ggcGFydCkgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZQVF9MRU5fUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM2MDYpIERhdGEgbGVuZ3RoIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRlBUX1NUQVRfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzYwOCkgU3RhdHVzIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFJGUFRfQ1JWX0FERFJMX1JFRzsgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzNjBBKSBBSEIgbWFzdGVyIGN1cnJlbnQgYWRkcmVzcyAoTG93IHBhcnQpICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgUkZQVF9DUlZfQUREUkhfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDM2MEMpIEFIQiBtYXN0ZXIgY3VycmVudCBhZGRyZXNzIChIaWdoIHBhcnQpICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBSRlBUX0NSVl9MRU5fUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzYwRSkgVGhlIHJlbWFpbmluZyBkYXRhIHRvIGJlIHRyYW5zZmVycmVkICAgICAgICAgICAgICAgICAgICovCit9IFJGUFRfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgU1BJICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFNQSSByZWdpc3RlcnMgKFNQSSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTIwMCkgU1BJIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMjAwKSBTUEkgY29udHJvbCByZWdpc3RlciAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJX1JYX1RYX1JFRzA7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEyMDIpIFNQSSBSWC9UWCByZWdpc3RlcjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTUElfUlhfVFhfUkVHMTsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTIwNCkgU1BJIFJYL1RYIHJlZ2lzdGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSV9DTEVBUl9JTlRfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMjA2KSBTUEkgY2xlYXIgaW50ZXJydXB0IHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJX0NUUkxfUkVHMTsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEyMDgpIFNQSSBjb250cm9sIHJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBTUElfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBTUEkyICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFNQSTIgcmVnaXN0ZXJzIChTUEkyKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMzAwKSBTUEkyIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJMl9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEzMDApIFNQSSBjb250cm9sIHJlZ2lzdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTUEkyX1JYX1RYX1JFRzA7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTMwMikgU1BJIFJYL1RYIHJlZ2lzdGVyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFNQSTJfUlhfVFhfUkVHMTsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMzA0KSBTUEkgUlgvVFggcmVnaXN0ZXIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgU1BJMl9DTEVBUl9JTlRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEzMDYpIFNQSSBjbGVhciBpbnRlcnJ1cHQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBTUEkyX0NUUkxfUkVHMTsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTMwOCkgU1BJIGNvbnRyb2wgcmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFNQSTJfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgIFRJTUVSMSAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFRJTUVSMSByZWdpc3RlcnMgKFRJTUVSMSkKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwMCkgVElNRVIxIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9DVFJMX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjAwKSBDYXB0dXJlIFRpbWVyIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1RJTUVSX1ZBTF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMDIpIENhcHR1cmUgVGltZXIgY291bnRlciB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fU1RBVFVTX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwNCkgQ2FwdHVyZSBUaW1lciBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9HUElPMV9DT05GX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjA2KSBDYXB0dXJlIFRpbWVyIGdwaW8xIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX0dQSU8yX0NPTkZfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMDgpIENhcHR1cmUgVGltZXIgZ3BpbzIgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fUkVMT0FEX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwQSkgQ2FwdHVyZSBUaW1lciByZWxvYWQgdmFsdWUgYW5kIERlbGF5IGluIHNob3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fU0hPVFdJRFRIX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIwQykgQ2FwdHVyZSBUaW1lciBTaG90IGR1cmF0aW9uIGluIHNob3QgbW9kZSAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9QUkVTQ0FMRVJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjBFKSBDYXB0dXJlIFRpbWVyIHByZXNjYWxlciB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX0NBUFRVUkVfR1BJTzFfUkVHOyAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMTApIENhcHR1cmUgVGltZXIgdmFsdWUgZm9yIGV2ZW50IG9uIEdQSU8xICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fQ0FQVFVSRV9HUElPMl9SRUc7ICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIxMikgQ2FwdHVyZSBUaW1lciB2YWx1ZSBmb3IgZXZlbnQgb24gR1BJTzIgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFRzsgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjE0KSBDYXB0dXJlIFRpbWVyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1BXTV9GUkVRX1JFRzsgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMTYpIENhcHR1cmUgVGltZXIgcHdtIGZyZXF1ZW5jeSByZWdpc3RlciAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fUFdNX0RDX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDIxOCkgQ2FwdHVyZSBUaW1lciBwd20gZGMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9USU1FUl9IVkFMX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMjFBKSBDYXB0dXJlIFRpbWVyIGNvdW50ZXIgaGlnaCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX1JFTE9BRF9ISUdIX1JFRzsgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAyMUMpIENhcHR1cmUgVGltZXIgcmVsb2FkIGhpZ2ggdmFsdWUgYW5kIERlbGF5IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG90IG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMV9SRUc7ICAgICAvKiE8IChAIDB4NTAwMDAyMUUpIENhcHR1cmUgVGltZXIgaGlnaCB2YWx1ZSBmb3IgZXZlbnQgb24gR1BJTzAxICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX1JFRzsgICAgIC8qITwgKEAgMHg1MDAwMDIyMCkgQ2FwdHVyZSBUaW1lciBoaWdoIHZhbHVlIGZvciBldmVudCBvbiBHUElPMDIgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIENBUFRJTV9TSE9UV0lEVEhfSElHSF9SRUc7ICAgICAgICAgLyohPCAoQCAweDUwMDAwMjIyKSBDYXB0dXJlIFRpbWVyIFNob3QgaGlnaCBkdXJhdGlvbiBpbiBzaG90IG1vZGUgICAgICAgICAgKi8KK30gVElNRVIxX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVFJORyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBUUk5HIHJlZ2lzdGVycyAoVFJORykKKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNTAwMCkgVFJORyBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDMyX3QgIFRSTkdfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDA1MDAwKSBUUk5HIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MzJfdCAgVFJOR19GSUZPTFZMX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDUwMDQpIFRSTkcgRklGTyBsZXZlbCByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQzMl90ICBUUk5HX1ZFUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwNTAwOCkgVFJORyBWZXJzaW9uIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFRSTkdfVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICBVQVJUICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoqCisgICogQGJyaWVmIFVBUlQgcmVnaXN0ZXJzIChVQVJUKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDAwKSBVQVJUIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVUFSVF9SQlJfVEhSX0RMTF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwMDApIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9JRVJfRExIX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwMDQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDE2X3QgIFVBUlRfSUlSX0ZDUl9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDA4KSBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyOworICBfX0lPIHVpbnQxNl90ICBVQVJUX0xDUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTAwQykgTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9NQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwMTApIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDQ7CisgIF9fSU8gdWludDE2X3QgIFVBUlRfTFNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDE0KSBMaW5lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ1WzNdOworICBfX0lPIHVpbnQxNl90ICBVQVJUX1NDUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTAxQykgU2NyYXRjaHBhZCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENls0N107CisgIF9fSU8gdWludDE2X3QgIFVBUlRfVVNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMDdDKSBVQVJUIFN0YXR1cyByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ3WzVdOworICBfX0lPIHVpbnQxNl90ICBVQVJUX1NSUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTA4OCkgU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOFszXTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9TQkNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwOTApIFNoYWRvdyBCcmVhayBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDlbMTFdOworICBfX0lPIHVpbnQxNl90ICBVQVJUX0RNQVNBX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTBBOCkgRE1BIFNvZnR3YXJlIEFja25vd2xlZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTBbMTFdOworICBfX0lPIHVpbnQxNl90ICBVQVJUX0RMRl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTBDMCkgRGl2aXNvciBMYXRjaCBGcmFjdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTFbMjVdOworICBfX0lPIHVpbnQxNl90ICBVQVJUX0NQUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTBGNCkgQ29tcG9uZW50IFBhcmFtZXRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTI7CisgIF9fSU8gdWludDE2X3QgIFVBUlRfVUNWX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMEY4KSBDb21wb25lbnQgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMzsKKyAgX19JTyB1aW50MTZfdCAgVUFSVF9DVFJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDEwRkMpIENvbXBvbmVudCBUeXBlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBVQVJUX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgVUFSVDIgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBVQVJUMiByZWdpc3RlcnMgKFVBUlQyKQorICAqLworCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTAwKSBVQVJUMiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfUkJSX1RIUl9ETExfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMDApIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfSUVSX0RMSF9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMDQpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0lJUl9GQ1JfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTA4KSBJbnRlcnJ1cHQgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIvRklGTyBDb250cm9sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9MQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTEwQykgTGluZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfTUNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMTApIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDQ7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0xTUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTE0KSBMaW5lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ1OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9NU1JfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTExOCkgTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVENjsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU0NSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMUMpIFNjcmF0Y2hwYWQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDdbOV07CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTMwKSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQ4OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIxX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTEzNCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSMl9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExMzgpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEwOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIzX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTEzQykgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTE7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTQwKSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxMjsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSNV9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNDQpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDEzOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFI2X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE0OCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTQ7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjdfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTRDKSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxNTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSOF9SRUc7ICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNTApIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE2OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFI5X1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE1NCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMTc7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjEwX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTU4KSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQxODsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSMTFfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNUMpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDE5OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIxMl9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE2MCkgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjA7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSQlJfU1RIUjEzX1JFRzsgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTY0KSBTaGFkb3cgUmVjZWl2ZS9UcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyMTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JCUl9TVEhSMTRfUkVHOyAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExNjgpIFNoYWRvdyBSZWNlaXZlL1RyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlciAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDIyOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUkJSX1NUSFIxNV9SRUc7ICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE2QykgU2hhZG93IFJlY2VpdmUvVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjM7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0ZBUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTcwKSBGSUZPIEFjY2VzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNFs1XTsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfVVNSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExN0MpIFVBUlQgU3RhdHVzIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI1OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9URkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE4MCkgVHJhbnNtaXQgRklGTyBMZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjY7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1JGTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTg0KSBSZWNlaXZlIEZJRk8gTGV2ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyNzsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1JSX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExODgpIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDI4OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TUlRTX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE4QykgU2hhZG93IFJlcXVlc3QgdG8gU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMjk7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NCQ1JfUkVHOyAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTkwKSBTaGFkb3cgQnJlYWsgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMDsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU0RNQU1fUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExOTQpIFNoYWRvdyBETUEgTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDMxOworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9TRkVfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTE5OCkgU2hhZG93IEZJRk8gRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzI7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX1NSVF9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMTlDKSBTaGFkb3cgUkNWUiBUcmlnZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzMzsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfU1RFVF9SRUc7ICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExQTApIFNoYWRvdyBUWCBFbXB0eSBUcmlnZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM0OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9IVFhfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTFBNCkgSGFsdCBUWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMzU7CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0RNQVNBX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMUE4KSBETUEgU29mdHdhcmUgQWNrbm93bGVkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzNlsxMV07CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0RMRl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMUMwKSBEaXZpc29yIExhdGNoIEZyYWN0aW9uIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzN1syNV07CisgIF9fSU8gdWludDE2X3QgIFVBUlQyX0NQUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxMUY0KSBDb21wb25lbnQgUGFyYW1ldGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQzODsKKyAgX19JTyB1aW50MTZfdCAgVUFSVDJfVUNWX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDExRjgpIENvbXBvbmVudCBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0kgIHVpbnQxNl90ICBSRVNFUlZFRDM5OworICBfX0lPIHVpbnQxNl90ICBVQVJUMl9DVFJfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTFGQykgQ29tcG9uZW50IFR5cGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFVBUlQyX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgIFVTQiAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBVU0IgcmVnaXN0ZXJzIChVU0IpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MDApIFVTQiBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfTUNUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgwMCkgTWFpbiBDb250cm9sIFJlZ2lzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9YQ1ZESUFHX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODAyKSBUcmFuc2NlaXZlciBkaWFnbm9zdGljIFJlZ2lzdGVyIChmb3IgdGVzdCBwdXJwb3NlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RDUl9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MDQpIFRyYW5zY2VpdmVyIGNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVVRSX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgwNikgVVNCIHRlc3QgUmVnaXN0ZXIgKGZvciB0ZXN0IHB1cnBvc2Ugb25seSkgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9GQVJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODA4KSBGdW5jdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX05GU1JfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MEEpIE5vZGUgRnVuY3Rpb25hbCBTdGF0ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfTUFFVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgwQykgTWFpbiBFdmVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9NQU1TS19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODBFKSBNYWluIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0FMVEVWX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MTApIEFsdGVybmF0ZSBFdmVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfQUxUTVNLX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgxMikgQWx0ZXJuYXRlIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWEVWX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODE0KSBUcmFuc21pdCBFdmVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYTVNLX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MTYpIFRyYW5zbWl0IE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhFVl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgxOCkgUmVjZWl2ZSBFdmVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWE1TS19SRUc7ICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODFBKSBSZWNlaXZlIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX05BS0VWX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MUMpIE5BSyBFdmVudCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfTkFLTVNLX1JFRzsgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgxRSkgTkFLIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9GV0VWX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODIwKSBGSUZPIFdhcm5pbmcgRXZlbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0ZXTVNLX1JFRzsgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4MjIpIEZJRk8gV2FybmluZyBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRk5IX1JFRzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgyNCkgRnJhbWUgTnVtYmVyIEhpZ2ggQnl0ZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9GTkxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODI2KSBGcmFtZSBOdW1iZXIgTG93IEJ5dGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRURbMTFdOworICBfX0lPIHVpbnQxNl90ICBVU0JfVVgyMENEUl9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTgzRSkgVHJhbnNjZWl2ZXIgMi4wIENvbmZpZ3VyYXRpb24gYW5kIERpYWdub3N0aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rlcihmb3IgdGVzdCBwdXJwb3NlIG9ubHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0VQQzBfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NDApIEVuZHBvaW50IENvbnRyb2wgMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhEMF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg0MikgVHJhbnNtaXQgRGF0YSAwIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWFMwX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODQ0KSBUcmFuc21pdCBTdGF0dXMgMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYQzBfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NDYpIFRyYW5zbWl0IGNvbW1hbmQgMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRVAwX05BS19SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg0OCkgRVAwIElOTkFLIGFuZCBPVVROQUsgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWEQwX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODRBKSBSZWNlaXZlIERhdGEgMCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYUzBfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NEMpIFJlY2VpdmUgU3RhdHVzIDAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhDMF9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg0RSkgUmVjZWl2ZSBDb21tYW5kIDAgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9FUEMxX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODUwKSBFbmRwb2ludCBDb250cm9sIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYRDFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NTIpIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhTMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg1NCkgVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWEMxX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODU2KSBUcmFuc21pdCBDb21tYW5kIFJlZ2lzdGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0VQQzJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NTgpIEVuZHBvaW50IENvbnRyb2wgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhEMV9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg1QSkgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyLDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWFMxX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODVDKSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYQzFfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NUUpIFJlY2VpdmUgQ29tbWFuZCBSZWdpc3RlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRVBDM19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg2MCkgRW5kcG9pbnQgQ29udHJvbCBSZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWEQyX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODYyKSBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYUzJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NjQpIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhDMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg2NikgVHJhbnNtaXQgQ29tbWFuZCBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9FUEM0X1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODY4KSBFbmRwb2ludCBDb250cm9sIFJlZ2lzdGVyIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYRDJfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NkEpIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhTMl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg2QykgUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWEMyX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODZFKSBSZWNlaXZlIENvbW1hbmQgUmVnaXN0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX0VQQzVfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NzApIEVuZHBvaW50IENvbnRyb2wgUmVnaXN0ZXIgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfVFhEM19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg3MikgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9UWFMzX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODc0KSBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1RYQzNfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4NzYpIFRyYW5zbWl0IENvbW1hbmQgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfRVBDNl9SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg3OCkgRW5kcG9pbnQgQ29udHJvbCBSZWdpc3RlciA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9SWEQzX1JFRzsgICAgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxODdBKSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgVVNCX1JYUzNfUkVHOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDE4N0MpIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBVU0JfUlhDM19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMTg3RSkgUmVjZWl2ZSBDb21tYW5kIFJlZ2lzdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDMyX3QgIFJFU0VSVkVEMVsyMF07CisgIF9fSU8gdWludDE2X3QgIFVTQl9ETUFfQ1RSTF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOEQwKSBVU0IgRE1BIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JICB1aW50MTZfdCAgUkVTRVJWRUQyOworICBfX0lPIHVpbnQxNl90ICBVU0JfQ0hBUkdFUl9DVFJMX1JFRzsgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMThENCkgVVNCIENoYXJnZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFVTQl9DSEFSR0VSX1NUQVRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAxOEQ2KSBVU0IgQ2hhcmdlciBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gVVNCX1R5cGU7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICBXQUtFVVAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qKgorICAqIEBicmllZiBXQUtFVVAgcmVnaXN0ZXJzIChXQUtFVVApCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMDApIFdBS0VVUCBTdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEwMCkgQ29udHJvbCByZWdpc3RlciBmb3IgdGhlIHdha2V1cCBjb3VudGVyICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEOworICBfX0lPIHVpbnQxNl90ICBXS1VQX1JFU0VUX0lSUV9SRUc7ICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEwNCkgUmVzZXQgd2FrZXVwIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSSAgdWludDE2X3QgIFJFU0VSVkVEMVsyXTsKKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TRUxFQ1RfUDBfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMEEpIHNlbGVjdCB3aGljaCBpbnB1dHMgZnJvbSBQMCBwb3J0IGNhbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3a3VwIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TRUxFQ1RfUDFfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMEMpIHNlbGVjdCB3aGljaCBpbnB1dHMgZnJvbSBQMSBwb3J0IGNhbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3a3VwIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TRUxFQ1RfUDJfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMEUpIHNlbGVjdCB3aGljaCBpbnB1dHMgZnJvbSBQMiBwb3J0IGNhbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3a3VwIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TRUxFQ1RfUDNfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMTApIHNlbGVjdCB3aGljaCBpbnB1dHMgZnJvbSBQMyBwb3J0IGNhbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3a3VwIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TRUxFQ1RfUDRfUkVHOyAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMTIpIHNlbGVjdCB3aGljaCBpbnB1dHMgZnJvbSBQMyBwb3J0IGNhbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3a3VwIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9QT0xfUDBfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMTQpIHNlbGVjdCB0aGUgc2VzaXRpdml0eSBwb2xhcml0eSBmb3IgZWFjaCBQMCBpbnB1dCAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1BPTF9QMV9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDExNikgc2VsZWN0IHRoZSBzZXNpdGl2aXR5IHBvbGFyaXR5IGZvciBlYWNoIFAxIGlucHV0ICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfUE9MX1AyX1JFRzsgICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTE4KSBzZWxlY3QgdGhlIHNlc2l0aXZpdHkgcG9sYXJpdHkgZm9yIGVhY2ggUDIgaW5wdXQgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9QT0xfUDNfUkVHOyAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMUEpIHNlbGVjdCB0aGUgc2VzaXRpdml0eSBwb2xhcml0eSBmb3IgZWFjaCBQMyBpbnB1dCAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1BPTF9QNF9SRUc7ICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDExQykgc2VsZWN0IHRoZSBzZXNpdGl2aXR5IHBvbGFyaXR5IGZvciBlYWNoIFAzIGlucHV0ICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU1RBVFVTXzBfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTFFKSBFdmVudCBzdGF0dXMgcmVnaXN0ZXIgZm9yIFAwIGFuZCBQMSAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9TVEFUVVNfMV9SRUc7ICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMjApIEV2ZW50IHN0YXR1cyByZWdpc3RlciBmb3IgUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX1NUQVRVU18yX1JFRzsgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEyMikgRXZlbnQgc3RhdHVzIHJlZ2lzdGVyIGZvciBQMyBhbmQgUDQgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfQ0xFQVJfMF9SRUc7ICAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTI0KSBDbGVhciBldmVudCByZWdpc3RlciBmb3IgUDAgYW5kIFAxICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyB1aW50MTZfdCAgV0tVUF9DTEVBUl8xX1JFRzsgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDAxMjYpIENsZWFyIGV2ZW50IHJlZ2lzdGVyIGZvciBQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXS1VQX0NMRUFSXzJfUkVHOyAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMDEyOCkgQ2xlYXIgZXZlbnQgcmVnaXN0ZXIgZm9yIFAzIGFuZCBQNCAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMX0dQSU9fUDBfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTJBKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDAgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMX0dQSU9fUDFfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTJDKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDEgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMX0dQSU9fUDJfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTJFKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDIgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMX0dQSU9fUDNfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTMwKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDMgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdLVVBfU0VMX0dQSU9fUDRfUkVHOyAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAwMTMyKSBzZWxlY3Qgd2hpY2ggaW5wdXRzIGZyb20gUDMgcG9ydCBjYW4gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFdBS0VVUF9UeXBlOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIFdET0cgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKioKKyAgKiBAYnJpZWYgV0RPRyByZWdpc3RlcnMgKFdET0cpCisgICovCisKK3R5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IChAIDB4NTAwMDMxMDApIFdET0cgU3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIHVpbnQxNl90ICBXQVRDSERPR19SRUc7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgKEAgMHg1MDAwMzEwMCkgV2F0Y2hkb2cgdGltZXIgcmVnaXN0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gdWludDE2X3QgIFdBVENIRE9HX0NUUkxfUkVHOyAgICAgICAgICAgICAgICAgLyohPCAoQCAweDUwMDAzMTAyKSBXYXRjaGRvZyBjb250cm9sIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gV0RPR19UeXBlOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBFbmQgb2Ygc2VjdGlvbiB1c2luZyBhbm9ueW1vdXMgdW5pb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKKyAgI3ByYWdtYSBwb3AKKyNlbGlmIGRlZmluZWQoX19JQ0NBUk1fXykKKyAgLyogbGVhdmUgYW5vbnltb3VzIHVuaW9ucyBlbmFibGVkICovCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQoX19UTVM0NzBfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkKF9fVEFTS0lOR19fKQorICAjcHJhZ21hIHdhcm5pbmcgcmVzdG9yZQorI2Vsc2UKKyAgI3dhcm5pbmcgTm90IHN1cHBvcnRlZCBjb21waWxlciB0eXBlCisjZW5kaWYKKworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnTlZJQycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lTRVIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lTRVJfQkxFX1dBS0VVUF9MUF9JUlFuX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQkxFX1dBS0VVUF9MUF9JUlFuX01zayAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQkxFX0dFTl9JUlFuX1BvcyAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEJMRV9HRU5fSVJRbiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQkxFX0dFTl9JUlFuX01zayAgICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEJMRV9HRU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRlRERl9XQUtFVVBfSVJRbl9Qb3MgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRlRERl9XQUtFVVBfSVJRbl9Nc2sgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRlRERl9HRU5fSVJRbl9Qb3MgICAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEZUREZfR0VOX0lSUW4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRlRERl9HRU5fSVJRbl9Nc2sgICAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEZUREZfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUkZDQUxfSVJRbl9Qb3MgICAgICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFJGQ0FMX0lSUW4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUkZDQUxfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFJGQ0FMX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQ09FWF9JUlFuX1BvcyAgICAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IENPRVhfSVJRbiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQ09FWF9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IENPRVhfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQ1JZUFRPX0lSUW5fUG9zICAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IENSWVBUT19JUlFuIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQ1JZUFRPX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IENSWVBUT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfTVJNX0lSUW5fUG9zICAgICAgICAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IE1STV9JUlFuIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfTVJNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IE1STV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVUFSVF9JUlFuX1BvcyAgICAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFVBUlRfSVJRbiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVUFSVF9JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFVBUlRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVUFSVDJfSVJRbl9Qb3MgICAgICAgICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFVBUlQyX0lSUW4gKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVUFSVDJfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFVBUlQyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfSTJDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEkyQ19JUlFuIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfSTJDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEkyQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfSTJDMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEkyQzJfSVJRbiAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfSTJDMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEkyQzJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1BJX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNQSV9JUlFuIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1BJX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNQSV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1BJMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNQSTJfSVJRbiAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1BJMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNQSTJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQURDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEFEQ19JUlFuIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfQURDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEFEQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfS0VZQlJEX0lSUW5fUG9zICAgICAgICAgICAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEtFWUJSRF9JUlFuIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfS0VZQlJEX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IEtFWUJSRF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfSVJHRU5fSVJRbl9Qb3MgICAgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IElSR0VOX0lSUW4gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfSVJHRU5fSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IElSR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfV0tVUF9HUElPX0lSUW5fUG9zICAgICAgICAgICgxN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFdLVVBfR1BJT19JUlFuIChCaXQgMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfV0tVUF9HUElPX0lSUW5fTXNrICAgICAgICAgICgweDIwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFdLVVBfR1BJT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1dUSU0wX0lSUW5fUG9zICAgICAgICAgICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNXVElNMF9JUlFuIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1dUSU0wX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNXVElNMF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1dUSU0xX0lSUW5fUG9zICAgICAgICAgICAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNXVElNMV9JUlFuIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1dUSU0xX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNXVElNMV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUVVBREVDX0lSUW5fUG9zICAgICAgICAgICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFFVQURFQ19JUlFuIChCaXQgMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUVVBREVDX0lSUW5fTXNrICAgICAgICAgICAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFFVQURFQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVVNCX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFVTQl9JUlFuIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVVNCX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFVTQl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUENNX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFBDTV9JUlFuIChCaXQgMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUENNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFBDTV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1JDX0lOX0lSUW5fUG9zICAgICAgICAgICAgICgyM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNSQ19JTl9JUlFuIChCaXQgMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1JDX0lOX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNSQ19JTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1JDX09VVF9JUlFuX1BvcyAgICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNSQ19PVVRfSVJRbiAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfU1JDX09VVF9JUlFuX01zayAgICAgICAgICAgICgweDEwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFNSQ19PVVRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVkJVU19JUlFuX1BvcyAgICAgICAgICAgICAgICgyNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFZCVVNfSVJRbiAoQml0IDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVkJVU19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFZCVVNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRE1BX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IERNQV9JUlFuIChCaXQgMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRE1BX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IERNQV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUkZfRElBR19JUlFuX1BvcyAgICAgICAgICAgICgyN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFJGX0RJQUdfSVJRbiAoQml0IDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUkZfRElBR19JUlFuX01zayAgICAgICAgICAgICgweDgwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFJGX0RJQUdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVFJOR19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFRSTkdfSVJRbiAoQml0IDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfVFJOR19JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFRSTkdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRENEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IERDRENfSVJRbiAoQml0IDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfRENEQ19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IERDRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfWFRBTDE2UkRZX0lSUW5fUG9zICAgICAgICAgICgzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFhUQUwxNlJEWV9JUlFuIChCaXQgMzApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfWFRBTDE2UkRZX0lSUW5fTXNrICAgICAgICAgICgweDQwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFhUQUwxNlJEWV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUnN2ZF9faXJxX19uX1BvcyAgICAgICAgICAgICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFJzdmRfX2lycV9fbiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTRVJfUnN2ZF9faXJxX19uX01zayAgICAgICAgICAgICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTRVI6IFJzdmRfX2lycV9fbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lDRVIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lDRVJfQkxFX1dBS0VVUF9MUF9JUlFuX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQkxFX1dBS0VVUF9MUF9JUlFuX01zayAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQkxFX0dFTl9JUlFuX1BvcyAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEJMRV9HRU5fSVJRbiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQkxFX0dFTl9JUlFuX01zayAgICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEJMRV9HRU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRlRERl9XQUtFVVBfSVJRbl9Qb3MgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRlRERl9XQUtFVVBfSVJRbl9Nc2sgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRlRERl9HRU5fSVJRbl9Qb3MgICAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEZUREZfR0VOX0lSUW4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRlRERl9HRU5fSVJRbl9Nc2sgICAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEZUREZfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUkZDQUxfSVJRbl9Qb3MgICAgICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFJGQ0FMX0lSUW4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUkZDQUxfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFJGQ0FMX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQ09FWF9JUlFuX1BvcyAgICAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IENPRVhfSVJRbiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQ09FWF9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IENPRVhfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQ1JZUFRPX0lSUW5fUG9zICAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IENSWVBUT19JUlFuIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQ1JZUFRPX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IENSWVBUT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfTVJNX0lSUW5fUG9zICAgICAgICAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IE1STV9JUlFuIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfTVJNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IE1STV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVUFSVF9JUlFuX1BvcyAgICAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFVBUlRfSVJRbiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVUFSVF9JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFVBUlRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVUFSVDJfSVJRbl9Qb3MgICAgICAgICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFVBUlQyX0lSUW4gKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVUFSVDJfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFVBUlQyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfSTJDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEkyQ19JUlFuIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfSTJDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEkyQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfSTJDMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEkyQzJfSVJRbiAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfSTJDMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEkyQzJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1BJX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNQSV9JUlFuIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1BJX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNQSV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1BJMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNQSTJfSVJRbiAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1BJMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNQSTJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQURDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEFEQ19JUlFuIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfQURDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEFEQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfS0VZQlJEX0lSUW5fUG9zICAgICAgICAgICAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEtFWUJSRF9JUlFuIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfS0VZQlJEX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IEtFWUJSRF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfSVJHRU5fSVJRbl9Qb3MgICAgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IElSR0VOX0lSUW4gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfSVJHRU5fSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IElSR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfV0tVUF9HUElPX0lSUW5fUG9zICAgICAgICAgICgxN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFdLVVBfR1BJT19JUlFuIChCaXQgMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfV0tVUF9HUElPX0lSUW5fTXNrICAgICAgICAgICgweDIwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFdLVVBfR1BJT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1dUSU0wX0lSUW5fUG9zICAgICAgICAgICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNXVElNMF9JUlFuIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1dUSU0wX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNXVElNMF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1dUSU0xX0lSUW5fUG9zICAgICAgICAgICAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNXVElNMV9JUlFuIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1dUSU0xX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNXVElNMV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUVVBREVDX0lSUW5fUG9zICAgICAgICAgICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFFVQURFQ19JUlFuIChCaXQgMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUVVBREVDX0lSUW5fTXNrICAgICAgICAgICAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFFVQURFQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVVNCX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFVTQl9JUlFuIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVVNCX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFVTQl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUENNX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFBDTV9JUlFuIChCaXQgMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUENNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFBDTV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1JDX0lOX0lSUW5fUG9zICAgICAgICAgICAgICgyM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNSQ19JTl9JUlFuIChCaXQgMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1JDX0lOX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNSQ19JTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1JDX09VVF9JUlFuX1BvcyAgICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNSQ19PVVRfSVJRbiAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfU1JDX09VVF9JUlFuX01zayAgICAgICAgICAgICgweDEwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFNSQ19PVVRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVkJVU19JUlFuX1BvcyAgICAgICAgICAgICAgICgyNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFZCVVNfSVJRbiAoQml0IDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVkJVU19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFZCVVNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRE1BX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IERNQV9JUlFuIChCaXQgMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRE1BX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IERNQV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUkZfRElBR19JUlFuX1BvcyAgICAgICAgICAgICgyN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFJGX0RJQUdfSVJRbiAoQml0IDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUkZfRElBR19JUlFuX01zayAgICAgICAgICAgICgweDgwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFJGX0RJQUdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVFJOR19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFRSTkdfSVJRbiAoQml0IDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfVFJOR19JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFRSTkdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRENEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IERDRENfSVJRbiAoQml0IDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfRENEQ19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IERDRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfWFRBTDE2UkRZX0lSUW5fUG9zICAgICAgICAgICgzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFhUQUwxNlJEWV9JUlFuIChCaXQgMzApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfWFRBTDE2UkRZX0lSUW5fTXNrICAgICAgICAgICgweDQwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFhUQUwxNlJEWV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUnN2ZF9faXJxX19uX1BvcyAgICAgICAgICAgICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFJzdmRfX2lycV9fbiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDRVJfUnN2ZF9faXJxX19uX01zayAgICAgICAgICAgICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDRVI6IFJzdmRfX2lycV9fbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lTUFIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lTUFJfQkxFX1dBS0VVUF9MUF9JUlFuX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQkxFX1dBS0VVUF9MUF9JUlFuX01zayAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQkxFX0dFTl9JUlFuX1BvcyAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEJMRV9HRU5fSVJRbiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQkxFX0dFTl9JUlFuX01zayAgICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEJMRV9HRU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRlRERl9XQUtFVVBfSVJRbl9Qb3MgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRlRERl9XQUtFVVBfSVJRbl9Nc2sgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRlRERl9HRU5fSVJRbl9Qb3MgICAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEZUREZfR0VOX0lSUW4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRlRERl9HRU5fSVJRbl9Nc2sgICAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEZUREZfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUkZDQUxfSVJRbl9Qb3MgICAgICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFJGQ0FMX0lSUW4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUkZDQUxfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFJGQ0FMX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQ09FWF9JUlFuX1BvcyAgICAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IENPRVhfSVJRbiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQ09FWF9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IENPRVhfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQ1JZUFRPX0lSUW5fUG9zICAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IENSWVBUT19JUlFuIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQ1JZUFRPX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IENSWVBUT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfTVJNX0lSUW5fUG9zICAgICAgICAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IE1STV9JUlFuIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfTVJNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IE1STV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVUFSVF9JUlFuX1BvcyAgICAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFVBUlRfSVJRbiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVUFSVF9JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFVBUlRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVUFSVDJfSVJRbl9Qb3MgICAgICAgICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFVBUlQyX0lSUW4gKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVUFSVDJfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFVBUlQyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfSTJDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEkyQ19JUlFuIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfSTJDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEkyQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfSTJDMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEkyQzJfSVJRbiAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfSTJDMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEkyQzJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1BJX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNQSV9JUlFuIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1BJX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNQSV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1BJMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNQSTJfSVJRbiAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1BJMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNQSTJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQURDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEFEQ19JUlFuIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfQURDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEFEQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfS0VZQlJEX0lSUW5fUG9zICAgICAgICAgICAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEtFWUJSRF9JUlFuIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfS0VZQlJEX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IEtFWUJSRF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfSVJHRU5fSVJRbl9Qb3MgICAgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IElSR0VOX0lSUW4gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfSVJHRU5fSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IElSR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfV0tVUF9HUElPX0lSUW5fUG9zICAgICAgICAgICgxN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFdLVVBfR1BJT19JUlFuIChCaXQgMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfV0tVUF9HUElPX0lSUW5fTXNrICAgICAgICAgICgweDIwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFdLVVBfR1BJT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1dUSU0wX0lSUW5fUG9zICAgICAgICAgICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNXVElNMF9JUlFuIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1dUSU0wX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNXVElNMF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1dUSU0xX0lSUW5fUG9zICAgICAgICAgICAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNXVElNMV9JUlFuIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1dUSU0xX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNXVElNMV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUVVBREVDX0lSUW5fUG9zICAgICAgICAgICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFFVQURFQ19JUlFuIChCaXQgMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUVVBREVDX0lSUW5fTXNrICAgICAgICAgICAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFFVQURFQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVVNCX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFVTQl9JUlFuIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVVNCX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFVTQl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUENNX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFBDTV9JUlFuIChCaXQgMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUENNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFBDTV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1JDX0lOX0lSUW5fUG9zICAgICAgICAgICAgICgyM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNSQ19JTl9JUlFuIChCaXQgMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1JDX0lOX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNSQ19JTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1JDX09VVF9JUlFuX1BvcyAgICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNSQ19PVVRfSVJRbiAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfU1JDX09VVF9JUlFuX01zayAgICAgICAgICAgICgweDEwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFNSQ19PVVRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVkJVU19JUlFuX1BvcyAgICAgICAgICAgICAgICgyNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFZCVVNfSVJRbiAoQml0IDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVkJVU19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFZCVVNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRE1BX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IERNQV9JUlFuIChCaXQgMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRE1BX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IERNQV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUkZfRElBR19JUlFuX1BvcyAgICAgICAgICAgICgyN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFJGX0RJQUdfSVJRbiAoQml0IDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUkZfRElBR19JUlFuX01zayAgICAgICAgICAgICgweDgwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFJGX0RJQUdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVFJOR19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFRSTkdfSVJRbiAoQml0IDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfVFJOR19JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFRSTkdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRENEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IERDRENfSVJRbiAoQml0IDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfRENEQ19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IERDRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfWFRBTDE2UkRZX0lSUW5fUG9zICAgICAgICAgICgzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFhUQUwxNlJEWV9JUlFuIChCaXQgMzApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfWFRBTDE2UkRZX0lSUW5fTXNrICAgICAgICAgICgweDQwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFhUQUwxNlJEWV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUnN2ZF9faXJxX19uX1BvcyAgICAgICAgICAgICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFJzdmRfX2lycV9fbiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lTUFJfUnN2ZF9faXJxX19uX01zayAgICAgICAgICAgICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElTUFI6IFJzdmRfX2lycV9fbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lDUFIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lDUFJfQkxFX1dBS0VVUF9MUF9JUlFuX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQkxFX1dBS0VVUF9MUF9JUlFuX01zayAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEJMRV9XQUtFVVBfTFBfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQkxFX0dFTl9JUlFuX1BvcyAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEJMRV9HRU5fSVJRbiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQkxFX0dFTl9JUlFuX01zayAgICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEJMRV9HRU5fSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRlRERl9XQUtFVVBfSVJRbl9Qb3MgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRlRERl9XQUtFVVBfSVJRbl9Nc2sgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEZUREZfV0FLRVVQX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRlRERl9HRU5fSVJRbl9Qb3MgICAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEZUREZfR0VOX0lSUW4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRlRERl9HRU5fSVJRbl9Nc2sgICAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEZUREZfR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUkZDQUxfSVJRbl9Qb3MgICAgICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFJGQ0FMX0lSUW4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUkZDQUxfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFJGQ0FMX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQ09FWF9JUlFuX1BvcyAgICAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IENPRVhfSVJRbiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQ09FWF9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IENPRVhfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQ1JZUFRPX0lSUW5fUG9zICAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IENSWVBUT19JUlFuIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQ1JZUFRPX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IENSWVBUT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfTVJNX0lSUW5fUG9zICAgICAgICAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IE1STV9JUlFuIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfTVJNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IE1STV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVUFSVF9JUlFuX1BvcyAgICAgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFVBUlRfSVJRbiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVUFSVF9JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFVBUlRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVUFSVDJfSVJRbl9Qb3MgICAgICAgICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFVBUlQyX0lSUW4gKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVUFSVDJfSVJRbl9Nc2sgICAgICAgICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFVBUlQyX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfSTJDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEkyQ19JUlFuIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfSTJDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEkyQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfSTJDMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEkyQzJfSVJRbiAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfSTJDMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEkyQzJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1BJX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNQSV9JUlFuIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1BJX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNQSV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1BJMl9JUlFuX1BvcyAgICAgICAgICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNQSTJfSVJRbiAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1BJMl9JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNQSTJfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQURDX0lSUW5fUG9zICAgICAgICAgICAgICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEFEQ19JUlFuIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfQURDX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEFEQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfS0VZQlJEX0lSUW5fUG9zICAgICAgICAgICAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEtFWUJSRF9JUlFuIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfS0VZQlJEX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IEtFWUJSRF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfSVJHRU5fSVJRbl9Qb3MgICAgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IElSR0VOX0lSUW4gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfSVJHRU5fSVJRbl9Nc2sgICAgICAgICAgICAgICgweDEwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IElSR0VOX0lSUW4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfV0tVUF9HUElPX0lSUW5fUG9zICAgICAgICAgICgxN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFdLVVBfR1BJT19JUlFuIChCaXQgMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfV0tVUF9HUElPX0lSUW5fTXNrICAgICAgICAgICgweDIwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFdLVVBfR1BJT19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1dUSU0wX0lSUW5fUG9zICAgICAgICAgICAgICgxOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNXVElNMF9JUlFuIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1dUSU0wX0lSUW5fTXNrICAgICAgICAgICAgICgweDQwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNXVElNMF9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1dUSU0xX0lSUW5fUG9zICAgICAgICAgICAgICgxOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNXVElNMV9JUlFuIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1dUSU0xX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwVUwpICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNXVElNMV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUVVBREVDX0lSUW5fUG9zICAgICAgICAgICAgICgyMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFFVQURFQ19JUlFuIChCaXQgMjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUVVBREVDX0lSUW5fTXNrICAgICAgICAgICAgICgweDEwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFFVQURFQ19JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVVNCX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFVTQl9JUlFuIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVVNCX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDIwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFVTQl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUENNX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFBDTV9JUlFuIChCaXQgMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUENNX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFBDTV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1JDX0lOX0lSUW5fUG9zICAgICAgICAgICAgICgyM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNSQ19JTl9JUlFuIChCaXQgMjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1JDX0lOX0lSUW5fTXNrICAgICAgICAgICAgICgweDgwMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNSQ19JTl9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1JDX09VVF9JUlFuX1BvcyAgICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNSQ19PVVRfSVJRbiAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfU1JDX09VVF9JUlFuX01zayAgICAgICAgICAgICgweDEwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFNSQ19PVVRfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVkJVU19JUlFuX1BvcyAgICAgICAgICAgICAgICgyNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFZCVVNfSVJRbiAoQml0IDI1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVkJVU19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFZCVVNfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRE1BX0lSUW5fUG9zICAgICAgICAgICAgICAgICgyNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IERNQV9JUlFuIChCaXQgMjYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRE1BX0lSUW5fTXNrICAgICAgICAgICAgICAgICgweDQwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IERNQV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUkZfRElBR19JUlFuX1BvcyAgICAgICAgICAgICgyN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFJGX0RJQUdfSVJRbiAoQml0IDI3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUkZfRElBR19JUlFuX01zayAgICAgICAgICAgICgweDgwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFJGX0RJQUdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVFJOR19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFRSTkdfSVJRbiAoQml0IDI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfVFJOR19JUlFuX01zayAgICAgICAgICAgICAgICgweDEwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFRSTkdfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRENEQ19JUlFuX1BvcyAgICAgICAgICAgICAgICgyOVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IERDRENfSVJRbiAoQml0IDI5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfRENEQ19JUlFuX01zayAgICAgICAgICAgICAgICgweDIwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IERDRENfSVJRbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfWFRBTDE2UkRZX0lSUW5fUG9zICAgICAgICAgICgzMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFhUQUwxNlJEWV9JUlFuIChCaXQgMzApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfWFRBTDE2UkRZX0lSUW5fTXNrICAgICAgICAgICgweDQwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFhUQUwxNlJEWV9JUlFuIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUnN2ZF9faXJxX19uX1BvcyAgICAgICAgICAgICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFJzdmRfX2lycV9fbiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lDUFJfUnN2ZF9faXJxX19uX01zayAgICAgICAgICAgICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElDUFI6IFJzdmRfX2lycV9fbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjBfQkxFX1dBS0VVUF9MUF9JUlFuX3ByaW9fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEJMRV9XQUtFVVBfTFBfSVJRbl9wcmlvIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjBfQkxFX1dBS0VVUF9MUF9JUlFuX3ByaW9fTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEJMRV9XQUtFVVBfTFBfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAqLworI2RlZmluZSBOVklDX0lQUjBfQkxFX0dFTl9JUlFuX3ByaW9fUG9zICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEJMRV9HRU5fSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjBfQkxFX0dFTl9JUlFuX3ByaW9fTXNrICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEJMRV9HRU5fSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjBfRlRERl9XQUtFVVBfSVJRbl9wcmlvX1BvcyAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEZUREZfV0FLRVVQX0lSUW5fcHJpbyAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjBfRlRERl9XQUtFVVBfSVJRbl9wcmlvX01zayAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEZUREZfV0FLRVVQX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAqLworI2RlZmluZSBOVklDX0lQUjBfRlRERl9HRU5fSVJRbl9wcmlvX1BvcyAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEZUREZfR0VOX0lSUW5fcHJpbyAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjBfRlRERl9HRU5fSVJRbl9wcmlvX01zayAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjA6IEZUREZfR0VOX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjFfUkZDQUxfSVJRbl9wcmlvX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IFJGQ0FMX0lSUW5fcHJpbyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfUkZDQUxfSVJRbl9wcmlvX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IFJGQ0FMX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfQ09FWF9JUlFuX3ByaW9fUG9zICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IENPRVhfSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfQ09FWF9JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IENPRVhfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfQ1JZUFRPX0lSUW5fcHJpb19Qb3MgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IENSWVBUT19JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfQ1JZUFRPX0lSUW5fcHJpb19Nc2sgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IENSWVBUT19JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfTVJNX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IE1STV9JUlFuX3ByaW8gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjFfTVJNX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjE6IE1STV9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjJfVUFSVF9JUlFuX3ByaW9fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IFVBUlRfSVJRbl9wcmlvIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfVUFSVF9JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IFVBUlRfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfVUFSVDJfSVJRbl9wcmlvX1BvcyAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IFVBUlQyX0lSUW5fcHJpbyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfVUFSVDJfSVJRbl9wcmlvX01zayAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IFVBUlQyX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfSTJDX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IEkyQ19JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfSTJDX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IEkyQ19JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfSTJDMl9JUlFuX3ByaW9fUG9zICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IEkyQzJfSVJRbl9wcmlvIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjJfSTJDMl9JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjI6IEkyQzJfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjNfU1BJX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IFNQSV9JUlFuX3ByaW8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfU1BJX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IFNQSV9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfU1BJMl9JUlFuX3ByaW9fUG9zICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IFNQSTJfSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfU1BJMl9JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IFNQSTJfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfQURDX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IEFEQ19JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfQURDX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IEFEQ19JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfS0VZQlJEX0lSUW5fcHJpb19Qb3MgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IEtFWUJSRF9JUlFuX3ByaW8gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjNfS0VZQlJEX0lSUW5fcHJpb19Nc2sgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjM6IEtFWUJSRF9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjRfSVJHRU5fSVJRbl9wcmlvX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IElSR0VOX0lSUW5fcHJpbyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfSVJHRU5fSVJRbl9wcmlvX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IElSR0VOX0lSUW5fcHJpbyAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfV0tVUF9HUElPX0lSUW5fcHJpb19Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IFdLVVBfR1BJT19JUlFuX3ByaW8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfV0tVUF9HUElPX0lSUW5fcHJpb19Nc2sgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IFdLVVBfR1BJT19JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfU1dUSU0wX0lSUW5fcHJpb19Qb3MgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IFNXVElNMF9JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfU1dUSU0wX0lSUW5fcHJpb19Nc2sgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IFNXVElNMF9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfU1dUSU0xX0lSUW5fcHJpb19Qb3MgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IFNXVElNMV9JUlFuX3ByaW8gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjRfU1dUSU0xX0lSUW5fcHJpb19Nc2sgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjQ6IFNXVElNMV9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjVfUVVBREVDX0lSUW5fcHJpb19Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFFVQURFQ19JUlFuX3ByaW8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfUVVBREVDX0lSUW5fcHJpb19Nc2sgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFFVQURFQ19JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfVVNCX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFVTQl9JUlFuX3ByaW8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfVVNCX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFVTQl9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfUENNX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFBDTV9JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfUENNX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFBDTV9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfU1JDX0lOX0lSUW5fcHJpb19Qb3MgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFNSQ19JTl9JUlFuX3ByaW8gKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjVfU1JDX0lOX0lSUW5fcHJpb19Nc2sgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjU6IFNSQ19JTl9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjYgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjZfU1JDX09VVF9JUlFuX3ByaW9fUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IFNSQ19PVVRfSVJRbl9wcmlvIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfU1JDX09VVF9JUlFuX3ByaW9fTXNrICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IFNSQ19PVVRfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfVkJVU19JUlFuX3ByaW9fUG9zICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IFZCVVNfSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfVkJVU19JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IFZCVVNfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfRE1BX0lSUW5fcHJpb19Qb3MgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IERNQV9JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfRE1BX0lSUW5fcHJpb19Nc2sgICAgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IERNQV9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfUkZfRElBR19JUlFuX3ByaW9fUG9zICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IFJGX0RJQUdfSVJRbl9wcmlvIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjZfUkZfRElBR19JUlFuX3ByaW9fTXNrICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBOVklDIElQUjY6IFJGX0RJQUdfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBOVklDX0lQUjcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBOVklDX0lQUjdfVFJOR19JUlFuX3ByaW9fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IFRSTkdfSVJRbl9wcmlvIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfVFJOR19JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IFRSTkdfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfRENEQ19JUlFuX3ByaW9fUG9zICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IERDRENfSVJRbl9wcmlvIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfRENEQ19JUlFuX3ByaW9fTXNrICAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IERDRENfSVJRbl9wcmlvIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfWFRBTDE2UkRZX0lSUW5fcHJpb19Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IFhUQUwxNlJEWV9JUlFuX3ByaW8gKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfWFRBTDE2UkRZX0lSUW5fcHJpb19Nc2sgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IFhUQUwxNlJEWV9JUlFuX3ByaW8gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfUkVTRVJWRUQzMV9JUlFuX0RPTlRfVVNFX1BvcyAoMjRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIElQUjc6IFJFU0VSVkVEMzFfSVJRbl9ET05UX1VTRSAoQml0IDI0KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVklDX0lQUjdfUkVTRVJWRUQzMV9JUlFuX0RPTlRfVVNFX01zayAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgLyohPCBOVklDIElQUjc6IFJFU0VSVkVEMzFfSVJRbl9ET05UX1VTRSAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisKKworCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgIHN0cnVjdCAnQUVTX0hBU0gnIFBvc2l0aW9uICYgTWFzayAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fQUxHX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0FMRyAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fQUxHX01zayAoMHgzVUwpICAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0FMRyAoQml0ZmllbGQtTWFzazogMHgwMykgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fQUxHX01EX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0FMR19NRCAoQml0IDIpICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fQUxHX01EX01zayAoMHhjVUwpICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0FMR19NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19PVVRfTURfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fT1VUX01EIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19PVVRfTURfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fT1VUX01EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0FFU19LRVlfU1pfUG9zICg1VUwpICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19BRVNfS0VZX1NaIChCaXQgNSkgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0FFU19LRVlfU1pfTXNrICgweDYwVUwpICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19BRVNfS0VZX1NaIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0VOQ0RFQ19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19FTkNERUMgKEJpdCA3KSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fQ1RSTF9SRUdfQ1JZUFRPX0VOQ0RFQ19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fQ1RSTF9SRUc6IENSWVBUT19FTkNERUMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fSVJRX0VOX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0lSUV9FTiAoQml0IDgpICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fSVJRX0VOX01zayAoMHgxMDBVTCkgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0lSUV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19IQVNIX1NFTF9Qb3MgKDlVTCkgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fSEFTSF9TRUwgKEJpdCA5KSAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19IQVNIX1NFTF9Nc2sgKDB4MjAwVUwpICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fSEFTSF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fSEFTSF9PVVRfTEVOX1BvcyAoMTBVTCkgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0hBU0hfT1VUX0xFTiAoQml0IDEwKSAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DVFJMX1JFR19DUllQVE9fSEFTSF9PVVRfTEVOX01zayAoMHhmYzAwVUwpICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DVFJMX1JFRzogQ1JZUFRPX0hBU0hfT1VUX0xFTiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19NT1JFX0lOX1BvcyAoMTZVTCkgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fTU9SRV9JTiAoQml0IDE2KSAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19NT1JFX0lOX01zayAoMHgxMDAwMFVMKSAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fTU9SRV9JTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19BRVNfS0VYUF9Qb3MgKDE3VUwpICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fQUVTX0tFWFAgKEJpdCAxNykgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0NUUkxfUkVHX0NSWVBUT19BRVNfS0VYUF9Nc2sgKDB4MjAwMDBVTCkgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0NUUkxfUkVHOiBDUllQVE9fQUVTX0tFWFAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fU1RBUlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFSVF9SRUdfQ1JZUFRPX1NUQVJUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFSVF9SRUc6IENSWVBUT19TVEFSVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19TVEFSVF9SRUdfQ1JZUFRPX1NUQVJUX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19TVEFSVF9SRUc6IENSWVBUT19TVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19GRVRDSF9BRERSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0ZFVENIX0FERFJfUkVHX0NSWVBUT19GRVRDSF9BRERSX1BvcyAoMFVMKSAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0ZFVENIX0FERFJfUkVHOiBDUllQVE9fRkVUQ0hfQUREUiAoQml0IDApICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0ZFVENIX0FERFJfUkVHX0NSWVBUT19GRVRDSF9BRERSX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEFFU19IQVNIIENSWVBUT19GRVRDSF9BRERSX1JFRzogQ1JZUFRPX0ZFVENIX0FERFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19MRU5fUkVHX0NSWVBUT19MRU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19MRU5fUkVHOiBDUllQVE9fTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19MRU5fUkVHX0NSWVBUT19MRU5fTXNrICgweGZmZmZmZlVMKSAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19MRU5fUkVHOiBDUllQVE9fTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fREVTVF9BRERSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0RFU1RfQUREUl9SRUdfQ1JZUFRPX0RFU1RfQUREUl9Qb3MgKDBVTCkgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX0RFU1RfQUREUl9SRUc6IENSWVBUT19ERVNUX0FERFIgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX0RFU1RfQUREUl9SRUdfQ1JZUFRPX0RFU1RfQUREUl9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBBRVNfSEFTSCBDUllQVE9fREVTVF9BRERSX1JFRzogQ1JZUFRPX0RFU1RfQUREUiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUdfQ1JZUFRPX0lOQUNUSVZFX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX1NUQVRVU19SRUc6IENSWVBUT19JTkFDVElWRSAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUdfQ1JZUFRPX0lOQUNUSVZFX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX1NUQVRVU19SRUc6IENSWVBUT19JTkFDVElWRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUdfQ1JZUFRPX1dBSVRfRk9SX0lOX1BvcyAoMVVMKSAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX1NUQVRVU19SRUc6IENSWVBUT19XQUlUX0ZPUl9JTiAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUdfQ1JZUFRPX1dBSVRfRk9SX0lOX01zayAoMHgyVUwpICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX1NUQVRVU19SRUc6IENSWVBUT19XQUlUX0ZPUl9JTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUdfQ1JZUFRPX0lSUV9TVF9Qb3MgKDJVTCkgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX1NUQVRVU19SRUc6IENSWVBUT19JUlFfU1QgKEJpdCAyKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX1NUQVRVU19SRUdfQ1JZUFRPX0lSUV9TVF9Nc2sgKDB4NFVMKSAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX1NUQVRVU19SRUc6IENSWVBUT19JUlFfU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19DTFJJUlFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DTFJJUlFfUkVHX0NSWVBUT19DTFJJUlFfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DTFJJUlFfUkVHOiBDUllQVE9fQ0xSSVJRIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19DTFJJUlFfUkVHX0NSWVBUT19DTFJJUlFfTXNrICgweDFVTCkgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19DTFJJUlFfUkVHOiBDUllQVE9fQ0xSSVJRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX01SRUcwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTVJFRzBfUkVHX0NSWVBUT19NUkVHMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTVJFRzBfUkVHOiBDUllQVE9fTVJFRzAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTVJFRzBfUkVHX0NSWVBUT19NUkVHMF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTVJFRzBfUkVHOiBDUllQVE9fTVJFRzAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBRVNfSEFTSF9DUllQVE9fTVJFRzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19NUkVHMV9SRUdfQ1JZUFRPX01SRUcxX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19NUkVHMV9SRUc6IENSWVBUT19NUkVHMSAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19NUkVHMV9SRUdfQ1JZUFRPX01SRUcxX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19NUkVHMV9SRUc6IENSWVBUT19NUkVHMSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19NUkVHMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX01SRUcyX1JFR19DUllQVE9fTVJFRzJfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX01SRUcyX1JFRzogQ1JZUFRPX01SRUcyIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQUVTX0hBU0hfQ1JZUFRPX01SRUcyX1JFR19DUllQVE9fTVJFRzJfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgQUVTX0hBU0ggQ1JZUFRPX01SRUcyX1JFRzogQ1JZUFRPX01SRUcyIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQUVTX0hBU0hfQ1JZUFRPX01SRUczX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTVJFRzNfUkVHX0NSWVBUT19NUkVHM19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTVJFRzNfUkVHOiBDUllQVE9fTVJFRzMgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBBRVNfSEFTSF9DUllQVE9fTVJFRzNfUkVHX0NSWVBUT19NUkVHM19Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBBRVNfSEFTSCBDUllQVE9fTVJFRzNfUkVHOiBDUllQVE9fTVJFRzMgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFFU19IQVNIX0NSWVBUT19LRVlTX1NUQVJUICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19LRVlTX1NUQVJUX0NSWVBUT19LRVlfWF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19LRVlTX1NUQVJUOiBDUllQVE9fS0VZX1ggKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEFFU19IQVNIX0NSWVBUT19LRVlTX1NUQVJUX0NSWVBUT19LRVlfWF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAvKiE8IEFFU19IQVNIIENSWVBUT19LRVlTX1NUQVJUOiBDUllQVE9fS0VZX1ggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgIHN0cnVjdCAnQU5BTUlTQycgUG9zaXRpb24gJiBNYXNrICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfQU5BX1RFU1RfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfQU5BX1RFU1RfUkVHX1RFU1RfU1RSVUNUVVJFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQU5BX1RFU1RfUkVHOiBURVNUX1NUUlVDVFVSRSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQU5BX1RFU1RfUkVHX1RFU1RfU1RSVUNUVVJFX01zayAoMHhmVUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQU5BX1RFU1RfUkVHOiBURVNUX1NUUlVDVFVSRSAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisjZGVmaW5lIEFOQU1JU0NfQU5BX1RFU1RfUkVHX0FDT1JFX1RFU1RCVVNfRU5fUG9zICg0VUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQU5BX1RFU1RfUkVHOiBBQ09SRV9URVNUQlVTX0VOIChCaXQgNCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQU5BX1RFU1RfUkVHX0FDT1JFX1RFU1RCVVNfRU5fTXNrICgweDEwVUwpICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQU5BX1RFU1RfUkVHOiBBQ09SRV9URVNUQlVTX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0NIQVJHRV9MRVZFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBDSEFSR0VfTEVWRUwgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX0NIQVJHRV9MRVZFTF9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBDSEFSR0VfTEVWRUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfQ0hBUkdFX09OX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IENIQVJHRV9PTiAoQml0IDUpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfQ0hBUkdFX09OX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IENIQVJHRV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfTlRDX0RJU0FCTEVfUG9zICg2VUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IE5UQ19ESVNBQkxFIChCaXQgNikgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfTlRDX0RJU0FCTEVfTXNrICgweDQwVUwpICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IE5UQ19ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX05UQ19MT1dfRElTQUJMRV9Qb3MgKDdVTCkgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBOVENfTE9XX0RJU0FCTEUgKEJpdCA3KSAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfQ1RSTDFfUkVHX05UQ19MT1dfRElTQUJMRV9Nc2sgKDB4ODBVTCkgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfQ1RSTDFfUkVHOiBOVENfTE9XX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfQ0hBUkdFX0NVUl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IENIQVJHRV9DVVIgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfQ0hBUkdFX0NVUl9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IENIQVJHRV9DVVIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfRElFX1RFTVBfU0VUX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IERJRV9URU1QX1NFVCAoQml0IDEyKSAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMV9SRUdfRElFX1RFTVBfU0VUX01zayAoMHgzMDAwVUwpICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMV9SRUc6IERJRV9URU1QX1NFVCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFR19ESUVfVEVNUF9ESVNBQkxFX1BvcyAoMTRVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwxX1JFRzogRElFX1RFTVBfRElTQUJMRSAoQml0IDE0KSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwxX1JFR19ESUVfVEVNUF9ESVNBQkxFX01zayAoMHg0MDAwVUwpICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwxX1JFRzogRElFX1RFTVBfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwyX1JFR19DVVJSRU5UX0dBSU5fVFJJTV9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwyX1JFRzogQ1VSUkVOVF9HQUlOX1RSSU0gKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwyX1JFR19DVVJSRU5UX0dBSU5fVFJJTV9Nc2sgKDB4ZlVMKSAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwyX1JFRzogQ1VSUkVOVF9HQUlOX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ0hBUkdFUl9WRkxPQVRfQURKX1BvcyAoNFVMKSAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENIQVJHRVJfVkZMT0FUX0FESiAoQml0IDQpICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9DVFJMMl9SRUdfQ0hBUkdFUl9WRkxPQVRfQURKX01zayAoMHhmMFVMKSAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9DVFJMMl9SRUc6IENIQVJHRVJfVkZMT0FUX0FESiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwyX1JFR19DVVJSRU5UX09GRlNFVF9UUklNX1BvcyAoOFVMKSAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwyX1JFRzogQ1VSUkVOVF9PRkZTRVRfVFJJTSAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwyX1JFR19DVVJSRU5UX09GRlNFVF9UUklNX01zayAoMHgxZjAwVUwpICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwyX1JFRzogQ1VSUkVOVF9PRkZTRVRfVFJJTSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwyX1JFR19DSEFSR0VSX1RFU1RfUG9zICgxM1VMKSAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwyX1JFRzogQ0hBUkdFUl9URVNUIChCaXQgMTMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX0NUUkwyX1JFR19DSEFSR0VSX1RFU1RfTXNrICgweGUwMDBVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX0NUUkwyX1JFRzogQ0hBUkdFUl9URVNUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0NDX01PREVfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9DQ19NT0RFIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0NDX01PREVfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9DQ19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0NWX01PREVfUG9zICgxVUwpICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9DVl9NT0RFIChCaXQgMSkgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19DSEFSR0VSX0NWX01PREVfTXNrICgweDJVTCkgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogQ0hBUkdFUl9DVl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19FTkRfT0ZfQ0hBUkdFX1BvcyAoMlVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogRU5EX09GX0NIQVJHRSAoQml0IDIpICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NIQVJHRVJfU1RBVFVTX1JFR19FTkRfT0ZfQ0hBUkdFX01zayAoMHg0VUwpICAgICAgICAgICAgLyohPCBBTkFNSVNDIENIQVJHRVJfU1RBVFVTX1JFRzogRU5EX09GX0NIQVJHRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9CQVRURU1QX0xPV19Qb3MgKDNVTCkgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfQkFUVEVNUF9MT1cgKEJpdCAzKSAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9CQVRURU1QX0xPV19Nc2sgKDB4OFVMKSAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfQkFUVEVNUF9MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfQkFUVEVNUF9PS19Qb3MgKDRVTCkgICAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX0JBVFRFTVBfT0sgKEJpdCA0KSAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfQkFUVEVNUF9PS19Nc2sgKDB4MTBVTCkgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX0JBVFRFTVBfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfQkFUVEVNUF9ISUdIX1BvcyAoNVVMKSAgICAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX0JBVFRFTVBfSElHSCAoQml0IDUpICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0hBUkdFUl9TVEFUVVNfUkVHX0NIQVJHRVJfQkFUVEVNUF9ISUdIX01zayAoMHgyMFVMKSAgICAvKiE8IEFOQU1JU0MgQ0hBUkdFUl9TVEFUVVNfUkVHOiBDSEFSR0VSX0JBVFRFTVBfSElHSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9UTU9ERV9QUk9UX1BvcyAoNlVMKSAgICAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfVE1PREVfUFJPVCAoQml0IDYpICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DSEFSR0VSX1NUQVRVU19SRUdfQ0hBUkdFUl9UTU9ERV9QUk9UX01zayAoMHg0MFVMKSAgICAgIC8qITwgQU5BTUlTQyBDSEFSR0VSX1NUQVRVU19SRUc6IENIQVJHRVJfVE1PREVfUFJPVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19FTkFCTEVfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfRU5BQkxFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19FTkFCTEVfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19SRVNFVF9DSEFSR0VfUG9zICgxVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfUkVTRVRfQ0hBUkdFIChCaXQgMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ1RSTDFfUkVHX1NPQ19SRVNFVF9DSEFSR0VfTXNrICgweDJVTCkgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ1RSTDFfUkVHOiBTT0NfUkVTRVRfQ0hBUkdFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX1JFU0VUX0FWR19Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19SRVNFVF9BVkcgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX1JFU0VUX0FWR19Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19SRVNFVF9BVkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX01VVEVfUG9zICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19NVVRFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX01VVEVfTXNrICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19NVVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0dQSU9fUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19HUElPIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0dQSU9fTXNrICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19HUElPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX1NJR05fUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19TSUdOIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX1NJR05fTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19TSUdOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0lEQUNfUG9zICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19JREFDIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0lEQUNfTXNrICAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19JREFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0xQRl9Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19MUEYgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0xQRl9Nc2sgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19MUEYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0NMS19Qb3MgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19DTEsgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0NMS19Nc2sgICAgICgweGUwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19DTEsgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0JJQVNfUG9zICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19CSUFTIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0JJQVNfTXNrICAgICgweDMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19CSUFTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0NJTlRfUG9zICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19DSU5UIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMV9SRUdfU09DX0NJTlRfTXNrICAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMV9SRUc6IFNPQ19DSU5UIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX1JWSV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19SVkkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX1JWSV9Nc2sgICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19SVkkgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX1NDWUNMRV9Qb3MgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19TQ1lDTEUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX1NDWUNMRV9Nc2sgICgweDFjVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19TQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0RDWUNMRV9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19EQ1lDTEUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0RDWUNMRV9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19EQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0lDTV9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19JQ00gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0lDTV9Nc2sgICAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19JQ00gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0NIT1BfUG9zICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19DSE9QIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0NIT1BfTXNrICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19DSE9QIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0NNSVJFR19FTkFCTEVfUG9zICgxMVVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19DTUlSRUdfRU5BQkxFIChCaXQgMTEpICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0NNSVJFR19FTkFCTEVfTXNrICgweDgwMFVMKSAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19DTUlSRUdfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX01BV19Qb3MgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19NQVcgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX01BV19Nc2sgICAgICgweDcwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19NQVcgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0RZTkFWR19Qb3MgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19EWU5BVkcgKEJpdCAxNSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMMl9SRUdfU09DX0RZTkFWR19Nc2sgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMMl9SRUc6IFNPQ19EWU5BVkcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX1ZTQVRfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19WU0FUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX1ZTQVRfTXNrICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19WU0FUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX0RZTlRBUkdfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19EWU5UQVJHIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX0RZTlRBUkdfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19EWU5UQVJHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX0RZTkhZU19Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19EWU5IWVMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX0RZTkhZU19Nc2sgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19EWU5IWVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX1ZDTUlfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19WQ01JIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DVFJMM19SRUdfU09DX1ZDTUlfTXNrICAgICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DVFJMM19SRUc6IFNPQ19WQ01JIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0FERDJDSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19BREQyQ0hfUkVHX1NPQ19BREQyQ0hfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19BREQyQ0hfUkVHOiBTT0NfQUREMkNIIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19BREQyQ0hfUkVHX1NPQ19BREQyQ0hfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19BREQyQ0hfUkVHOiBTT0NfQUREMkNIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0NIQVJHRV9DTlRSMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjFfUkVHX0NIQVJHRV9DTlQxX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DSEFSR0VfQ05UUjFfUkVHOiBDSEFSR0VfQ05UMSAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjFfUkVHX0NIQVJHRV9DTlQxX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DSEFSR0VfQ05UUjFfUkVHOiBDSEFSR0VfQ05UMSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0NIQVJHRV9DTlRSMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjJfUkVHX0NIQVJHRV9DTlQyX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DSEFSR0VfQ05UUjJfUkVHOiBDSEFSR0VfQ05UMiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjJfUkVHX0NIQVJHRV9DTlQyX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DSEFSR0VfQ05UUjJfUkVHOiBDSEFSR0VfQ05UMiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfU09DX0NIQVJHRV9DTlRSM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjNfUkVHX0NIQVJHRV9DTlQzX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DSEFSR0VfQ05UUjNfUkVHOiBDSEFSR0VfQ05UMyAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19DSEFSR0VfQ05UUjNfUkVHX0NIQVJHRV9DTlQzX01zayAoMHhmZlVMKSAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19DSEFSR0VfQ05UUjNfUkVHOiBDSEFSR0VfQ05UMyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfQ0hBUkdFX0FWR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0FWR19SRUdfQ0hBUkdFX0FWR19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0FWR19SRUc6IENIQVJHRV9BVkcgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfQ0hBUkdFX0FWR19SRUdfQ0hBUkdFX0FWR19Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfQ0hBUkdFX0FWR19SRUc6IENIQVJHRV9BVkcgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX1NPQ19TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfU1RBVFVTX1JFR19TT0NfSU5UX09WRVJMT0FEX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfU1RBVFVTX1JFRzogU09DX0lOVF9PVkVSTE9BRCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfU1RBVFVTX1JFR19TT0NfSU5UX09WRVJMT0FEX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfU1RBVFVTX1JFRzogU09DX0lOVF9PVkVSTE9BRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfU1RBVFVTX1JFR19TT0NfSU5UX0xPQ0tFRF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfU1RBVFVTX1JFRzogU09DX0lOVF9MT0NLRUQgKEJpdCAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19TT0NfU1RBVFVTX1JFR19TT0NfSU5UX0xPQ0tFRF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBTT0NfU1RBVFVTX1JFRzogU09DX0lOVF9MT0NLRUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfRVhUX0lOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX0lEQUNfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19JREFDX1ZBTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX0lEQUNfVkFMX01zayAoMHgxZmZVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19JREFDX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZmYpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX0lEQUNfU0lHTl9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19JREFDX1NJR04gKEJpdCA5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX0lEQUNfU0lHTl9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19JREFDX1NJR04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX1JEQUNfRElTX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19SREFDX0RJUyAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX1JEQUNfRElTX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19SREFDX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX05SX1NDWUNMRV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19OUl9TQ1lDTEUgKEJpdCAxMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX05SX1NDWUNMRV9Nc2sgKDB4MzgwMFVMKSAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19OUl9TQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX0VYVF9TQ1lDTEVfRU5fUG9zICgxNFVMKSAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19FWFRfU0NZQ0xFX0VOIChCaXQgMTQpICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9JTl9SRUdfU09DX0VYVF9TQ1lDTEVfRU5fTXNrICgweDQwMDBVTCkgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9JTl9SRUc6IFNPQ19FWFRfU0NZQ0xFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19FWFRfSURBQ19FTl9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfRVhUX0lEQUNfRU4gKEJpdCAxNSkgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX1NPQ19FWFRfSU5fUkVHX1NPQ19FWFRfSURBQ19FTl9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgLyohPCBBTkFNSVNDIFNPQ19FWFRfSU5fUkVHOiBTT0NfRVhUX0lEQUNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19TT0NfRVhUX09VVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19ISUdIX0xJTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfSElHSF9MSU0gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19ISUdIX0xJTV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfSElHSF9MSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19MT1dMSU1fQ09NUF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfTE9XTElNX0NPTVAgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19MT1dMSU1fQ09NUF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfTE9XTElNX0NPTVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19QT1NfQ09NUF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfUE9TX0NPTVAgKEJpdCAyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19QT1NfQ09NUF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfUE9TX0NPTVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19SSVNJTkdfQ09NUF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfUklTSU5HX0NPTVAgKEJpdCAzKSAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19SSVNJTkdfQ09NUF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfUklTSU5HX0NPTVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19TVEFURV9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfU1RBVEUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19TVEFURV9Nc2sgKDB4ZjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19DVFJMX0VWRU5UX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfQ1RSTF9FVkVOVCAoQml0IDgpICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfU09DX0VYVF9PVVRfUkVHX1NPQ19DVFJMX0VWRU5UX01zayAoMHgxMDBVTCkgICAgICAgICAgICAvKiE8IEFOQU1JU0MgU09DX0VYVF9PVVRfUkVHOiBTT0NfQ1RSTF9FVkVOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBTkFNSVNDX0NMS19SRUZfU0VMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1NFTF9SRUdfUkVGX0NMS19TRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1NFTF9SRUc6IFJFRl9DTEtfU0VMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1NFTF9SRUdfUkVGX0NMS19TRUxfTXNrICgweDNVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1NFTF9SRUc6IFJFRl9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1NFTF9SRUdfUkVGX0NBTF9TVEFSVF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1NFTF9SRUc6IFJFRl9DQUxfU1RBUlQgKEJpdCAyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1NFTF9SRUdfUkVGX0NBTF9TVEFSVF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1NFTF9SRUc6IFJFRl9DQUxfU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19DTEtfUkVGX0NOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9DTlRfUkVHX1JFRl9DTlRfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9DTlRfUkVHOiBSRUZfQ05UX1ZBTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFOQU1JU0NfQ0xLX1JFRl9DTlRfUkVHX1JFRl9DTlRfVkFMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IEFOQU1JU0MgQ0xLX1JFRl9DTlRfUkVHOiBSRUZfQ05UX1ZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQU5BTUlTQ19DTEtfUkVGX1ZBTF9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBBTkFNSVNDX0NMS19SRUZfVkFMX0xfUkVHX1hUQUxfQ05UX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBBTkFNSVNDIENMS19SRUZfVkFMX0xfUkVHOiBYVEFMX0NOVF9WQUwgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBBTkFNSVNDX0NMS19SRUZfVkFMX0xfUkVHX1hUQUxfQ05UX1ZBTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBBTkFNSVNDIENMS19SRUZfVkFMX0xfUkVHOiBYVEFMX0NOVF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFOQU1JU0NfQ0xLX1JFRl9WQUxfSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1ZBTF9IX1JFR19YVEFMX0NOVF9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1ZBTF9IX1JFRzogWFRBTF9DTlRfVkFMIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQU5BTUlTQ19DTEtfUkVGX1ZBTF9IX1JFR19YVEFMX0NOVF9WQUxfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgQU5BTUlTQyBDTEtfUkVGX1ZBTF9IX1JFRzogWFRBTF9DTlRfVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdBUFUnIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19FTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19FTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9BTU9ERV9Qb3MgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fQU1PREUgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9BTU9ERV9Nc2sgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fQU1PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9DQUxfQllQQVNTX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fQ0FMX0JZUEFTUyAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9DQUxfQllQQVNTX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fQ0FMX0JZUEFTUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9EU19Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fRFMgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9EU19Nc2sgICAgICAgKDB4MzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fRFMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9PS19Qb3MgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fT0sgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9PS19Nc2sgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19ESVRIRVJfRElTQUJMRV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfRElUSEVSX0RJU0FCTEUgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19ESVRIRVJfRElTQUJMRV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfRElUSEVSX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfQU1PREVfUG9zICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX0FNT0RFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfQU1PREVfTXNrICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX0FNT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfQ0FMX0JZUEFTU19Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX0NBTF9CWVBBU1MgKEJpdCAxNCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfQ0FMX0JZUEFTU19Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX0NBTF9CWVBBU1MgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfVVNfUG9zICAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX1VTIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfVVNfTXNrICAgICAgKDB4MzAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX1VTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfT0tfUG9zICAgICAgKDE4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX09LIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfT0tfTXNrICAgICAgKDB4NDAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19SRVNZTkNfUG9zICAgICAgKDE5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUkVTWU5DIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19SRVNZTkNfTXNrICAgICAgKDB4ODAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUkVTWU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9PVkZMT1dfUG9zICAgKDIwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fT1ZGTE9XIChCaXQgMjApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9PVkZMT1dfTXNrICAgKDB4MTAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fT1ZGTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9VTkZMT1dfUG9zICAgKDIxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fVU5GTE9XIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9VTkZMT1dfTXNrICAgKDB4MjAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fVU5GTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfT1ZGTE9XX1BvcyAgKDIyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX09WRkxPVyAoQml0IDIyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfT1ZGTE9XX01zayAgKDB4NDAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX09WRkxPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfVU5GTE9XX1BvcyAgKDIzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX1VORkxPVyAoQml0IDIzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfVU5GTE9XX01zayAgKDB4ODAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX1VORkxPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9GTE9XQ0xSX1BvcyAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fRkxPV0NMUiAoQml0IDI0KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19JTl9GTE9XQ0xSX01zayAgKDB4MTAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfSU5fRkxPV0NMUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfRkxPV0NMUl9Qb3MgKDI1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX0ZMT1dDTFIgKEJpdCAyNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19PVVRfRkxPV0NMUl9Nc2sgKDB4MjAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfT1VUX0ZMT1dDTFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19QRE1fRElfREVMX1BvcyAgKDI2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUERNX0RJX0RFTCAoQml0IDI2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19QRE1fRElfREVMX01zayAgKDB4YzAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUERNX0RJX0RFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19QRE1fTU9ERV9Qb3MgICAgKDI4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUERNX01PREUgKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19QRE1fTU9ERV9Nc2sgICAgKDB4MzAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUERNX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19QRE1fRE9fREVMX1BvcyAgKDMwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUERNX0RPX0RFTCAoQml0IDMwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0NUUkxfUkVHX1NSQ19QRE1fRE9fREVMX01zayAgKDB4YzAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0NUUkxfUkVHOiBTUkNfUERNX0RPX0RFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfU1JDMV9JTl9GU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX0lOX0ZTX1JFR19TUkNfSU5fRlNfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0lOX0ZTX1JFRzogU1JDX0lOX0ZTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0lOX0ZTX1JFR19TUkNfSU5fRlNfTXNrICAgICAgKDB4ZmZmZmZmVUwpICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0lOX0ZTX1JFRzogU1JDX0lOX0ZTIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfU1JDMV9PVVRfRlNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX09VVF9GU19SRUdfU1JDX09VVF9GU19Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX09VVF9GU19SRUc6IFNSQ19PVVRfRlMgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX09VVF9GU19SRUdfU1JDX09VVF9GU19Nc2sgICAgKDB4ZmZmZmZmVUwpICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX09VVF9GU19SRUc6IFNSQ19PVVRfRlMgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfSU4xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX0lOMV9SRUdfU1JDX0lOX1BvcyAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0lOMV9SRUc6IFNSQ19JTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0lOMV9SRUdfU1JDX0lOX01zayAgICAgICAgICAgKDB4ZmZmZmZmMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0lOMV9SRUc6IFNSQ19JTiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfSU4yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX0lOMl9SRUdfU1JDX0lOX1BvcyAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0lOMl9SRUc6IFNSQ19JTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX0lOMl9SRUdfU1JDX0lOX01zayAgICAgICAgICAgKDB4ZmZmZmZmMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX0lOMl9SRUc6IFNSQ19JTiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfT1VUMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX09VVDFfUkVHX1NSQ19PVVRfUG9zICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX09VVDFfUkVHOiBTUkNfT1VUIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX09VVDFfUkVHX1NSQ19PVVRfTXNrICAgICAgICAgKDB4ZmZmZmZmMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX09VVDFfUkVHOiBTUkNfT1VUIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1NSQzFfT1VUMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9TUkMxX09VVDJfUkVHX1NSQ19PVVRfUG9zICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX09VVDJfUkVHOiBTUkNfT1VUIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9TUkMxX09VVDJfUkVHX1NSQ19PVVRfTXNrICAgICAgICAgKDB4ZmZmZmZmMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBTUkMxX09VVDJfUkVHOiBTUkNfT1VUIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFQVV9BUFVfTVVYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9BUFVfTVVYX1JFR19TUkMxX01VWF9JTl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBBUFVfTVVYX1JFRzogU1JDMV9NVVhfSU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9BUFVfTVVYX1JFR19TUkMxX01VWF9JTl9Nc2sgICAgICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBBUFVfTVVYX1JFRzogU1JDMV9NVVhfSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICovCisjZGVmaW5lIEFQVV9BUFVfTVVYX1JFR19QQ00xX01VWF9JTl9Qb3MgICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBBUFVfTVVYX1JFRzogUENNMV9NVVhfSU4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9BUFVfTVVYX1JFR19QQ00xX01VWF9JTl9Nc2sgICAgICAgKDB4MzhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBBUFVfTVVYX1JFRzogUENNMV9NVVhfSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICovCisjZGVmaW5lIEFQVV9BUFVfTVVYX1JFR19QRE0xX01VWF9JTl9Qb3MgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBBUFVfTVVYX1JFRzogUERNMV9NVVhfSU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9BUFVfTVVYX1JFR19QRE0xX01VWF9JTl9Nc2sgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBBUFVfTVVYX1JFRzogUERNMV9NVVhfSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQ09FRjEwX1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9DT0VGMTBfU0VUMV9SRUdfU1JDX0NPRUYwX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMTBfU0VUMV9SRUc6IFNSQ19DT0VGMCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMTBfU0VUMV9SRUdfU1JDX0NPRUYwX01zayAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMTBfU0VUMV9SRUc6IFNSQ19DT0VGMCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMTBfU0VUMV9SRUdfU1JDX0NPRUYxX1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMTBfU0VUMV9SRUc6IFNSQ19DT0VGMSAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMTBfU0VUMV9SRUdfU1JDX0NPRUYxX01zayAgICAgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMTBfU0VUMV9SRUc6IFNSQ19DT0VGMSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQ09FRjMyX1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9DT0VGMzJfU0VUMV9SRUdfU1JDX0NPRUYyX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMzJfU0VUMV9SRUc6IFNSQ19DT0VGMiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMzJfU0VUMV9SRUdfU1JDX0NPRUYyX01zayAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMzJfU0VUMV9SRUc6IFNSQ19DT0VGMiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMzJfU0VUMV9SRUdfU1JDX0NPRUYzX1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMzJfU0VUMV9SRUc6IFNSQ19DT0VGMyAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMzJfU0VUMV9SRUdfU1JDX0NPRUYzX01zayAgICAgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMzJfU0VUMV9SRUc6IFNSQ19DT0VGMyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQ09FRjU0X1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9DT0VGNTRfU0VUMV9SRUdfU1JDX0NPRUY0X1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNTRfU0VUMV9SRUc6IFNSQ19DT0VGNCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGNTRfU0VUMV9SRUdfU1JDX0NPRUY0X01zayAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNTRfU0VUMV9SRUc6IFNSQ19DT0VGNCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGNTRfU0VUMV9SRUdfU1JDX0NPRUY1X1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNTRfU0VUMV9SRUc6IFNSQ19DT0VGNSAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGNTRfU0VUMV9SRUdfU1JDX0NPRUY1X01zayAgICAgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNTRfU0VUMV9SRUc6IFNSQ19DT0VGNSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQ09FRjc2X1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9DT0VGNzZfU0VUMV9SRUdfU1JDX0NPRUY2X1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNzZfU0VUMV9SRUc6IFNSQ19DT0VGNiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGNzZfU0VUMV9SRUdfU1JDX0NPRUY2X01zayAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNzZfU0VUMV9SRUc6IFNSQ19DT0VGNiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGNzZfU0VUMV9SRUdfU1JDX0NPRUY3X1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNzZfU0VUMV9SRUc6IFNSQ19DT0VGNyAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGNzZfU0VUMV9SRUdfU1JDX0NPRUY3X01zayAgICAgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBDT0VGNzZfU0VUMV9SRUc6IFNSQ19DT0VGNyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQ09FRjk4X1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9DT0VGOThfU0VUMV9SRUdfU1JDX0NPRUY4X1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGOThfU0VUMV9SRUc6IFNSQ19DT0VGOCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGOThfU0VUMV9SRUdfU1JDX0NPRUY4X01zayAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGOThfU0VUMV9SRUc6IFNSQ19DT0VGOCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGOThfU0VUMV9SRUdfU1JDX0NPRUY5X1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGOThfU0VUMV9SRUc6IFNSQ19DT0VGOSAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGOThfU0VUMV9SRUdfU1JDX0NPRUY5X01zayAgICAgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBDT0VGOThfU0VUMV9SRUc6IFNSQ19DT0VGOSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBBUFVfQ09FRjBBX1NFVDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9DT0VGMEFfU0VUMV9SRUdfU1JDX0NPRUYxMF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMEFfU0VUMV9SRUc6IFNSQ19DT0VGMTAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9DT0VGMEFfU0VUMV9SRUdfU1JDX0NPRUYxMF9Nc2sgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBDT0VGMEFfU0VUMV9SRUc6IFNSQ19DT0VGMTAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1BDTTFfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9FTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9FTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9NQVNURVJfUG9zICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fTUFTVEVSIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9NQVNURVJfTXNrICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fTUFTVEVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NMRU5fUG9zICAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDTEVOIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NMRU5fTXNrICAgICAgKDB4M2NVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDTEVOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NERUxfUG9zICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDREVMIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NERUxfTXNrICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDREVMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9QUE9EX1BvcyAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fUFBPRCAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9QUE9EX01zayAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fUFBPRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9DTEtJTlZfUG9zICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fQ0xLSU5WIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9DTEtJTlZfTXNrICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fQ0xLSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NJTlZfUG9zICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDSU5WIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NJTlZfTXNrICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9DTEtfQklUX1BvcyAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fQ0xLX0JJVCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9DTEtfQklUX01zayAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fQ0xLX0JJVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9DSF9ERUxfUG9zICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fQ0hfREVMIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9DSF9ERUxfTXNrICAgICAgKDB4ZjgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fQ0hfREVMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NfRURHRV9Qb3MgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDX0VER0UgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NfRURHRV9Nc2sgICAgKDB4MTAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDX0VER0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NfRElWX1BvcyAgICAgKDIwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDX0RJViAoQml0IDIwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0NUUkxfUkVHX1BDTV9GU0NfRElWX01zayAgICAgKDB4ZmZmMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0NUUkxfUkVHOiBQQ01fRlNDX0RJViAoQml0ZmllbGQtTWFzazogMHhmZmYpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1BDTTFfSU4xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9QQ00xX0lOMV9SRUdfUENNX0lOX1BvcyAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0lOMV9SRUc6IFBDTV9JTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0lOMV9SRUdfUENNX0lOX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0lOMV9SRUc6IFBDTV9JTiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1BDTTFfSU4yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9QQ00xX0lOMl9SRUdfUENNX0lOX1BvcyAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0lOMl9SRUc6IFBDTV9JTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX0lOMl9SRUdfUENNX0lOX01zayAgICAgICAgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX0lOMl9SRUc6IFBDTV9JTiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1BDTTFfT1VUMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9QQ00xX09VVDFfUkVHX1BDTV9PVVRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX09VVDFfUkVHOiBQQ01fT1VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX09VVDFfUkVHX1BDTV9PVVRfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX09VVDFfUkVHOiBQQ01fT1VUIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQVBVX1BDTTFfT1VUMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEFQVV9QQ00xX09VVDJfUkVHX1BDTV9PVVRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX09VVDJfUkVHOiBQQ01fT1VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFQVV9QQ00xX09VVDJfUkVHX1BDTV9PVVRfTXNrICAgICAgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEFQVSBQQ00xX09VVDJfUkVHOiBQQ01fT1VUIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdCTEUnIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUldCTEVDTlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TWU5DRVJSX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU1lOQ0VSUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TWU5DRVJSX01zayAgICAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU1lOQ0VSUiAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SWFdJTlNaREVGX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUlhXSU5TWkRFRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SWFdJTlNaREVGX01zayAgKDB4ZjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUlhXSU5TWkRFRiAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SV0JMRV9FTl9Qb3MgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUldCTEVfRU4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SV0JMRV9FTl9Nc2sgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUldCTEVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19BRFZFUlRGSUxUX0VOX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQURWRVJURklMVF9FTiAoQml0IDkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19BRFZFUlRGSUxUX0VOX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQURWRVJURklMVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19DT1JSX01PREVfUG9zICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQ09SUl9NT0RFIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19DT1JSX01PREVfTXNrICAgKDB4MzAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQ09SUl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19IT1BfUkVNQVBfRFNCX1BvcyAoMTZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogSE9QX1JFTUFQX0RTQiAoQml0IDE2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19IT1BfUkVNQVBfRFNCX01zayAoMHgxMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogSE9QX1JFTUFQX0RTQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19DUkNfRFNCX1BvcyAgICAgKDE3VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQ1JDX0RTQiAoQml0IDE3KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19DUkNfRFNCX01zayAgICAgKDB4MjAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQ1JDX0RTQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19XSElUX0RTQl9Qb3MgICAgKDE4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogV0hJVF9EU0IgKEJpdCAxOCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19XSElUX0RTQl9Nc2sgICAgKDB4NDAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogV0hJVF9EU0IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19DUllQVF9EU0JfUG9zICAgKDE5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQ1JZUFRfRFNCIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19DUllQVF9EU0JfTXNrICAgKDB4ODAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQ1JZUFRfRFNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19ORVNOX0RTQl9Qb3MgICAgKDIwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTkVTTl9EU0IgKEJpdCAyMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19ORVNOX0RTQl9Nc2sgICAgKDB4MTAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTkVTTl9EU0IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TTl9EU0JfUG9zICAgICAgKDIxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU05fRFNCIChCaXQgMjEpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TTl9EU0JfTXNrICAgICAgKDB4MjAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU05fRFNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19NRF9EU0JfUG9zICAgICAgKDIyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTURfRFNCIChCaXQgMjIpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19NRF9EU0JfTXNrICAgICAgKDB4NDAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTURfRFNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TQ0FOX0FCT1JUX1BvcyAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU0NBTl9BQk9SVCAoQml0IDI0KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TQ0FOX0FCT1JUX01zayAgKDB4MTAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU0NBTl9BQk9SVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19BRFZFUlRfQUJPUlRfUG9zICgyNVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQURWRVJUX0FCT1JUIChCaXQgMjUpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19BRFZFUlRfQUJPUlRfTXNrICgweDIwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogQURWRVJUX0FCT1JUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SRlRFU1RfQUJPUlRfUG9zICgyNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUkZURVNUX0FCT1JUIChCaXQgMjYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SRlRFU1RfQUJPUlRfTXNrICgweDQwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUkZURVNUX0FCT1JUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TV0lOVF9SRVFfUG9zICAgKDI4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU1dJTlRfUkVRIChCaXQgMjgpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19TV0lOVF9SRVFfTXNrICAgKDB4MTAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogU1dJTlRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SRUdfU09GVF9SU1RfUG9zICgyOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUkVHX1NPRlRfUlNUIChCaXQgMjkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19SRUdfU09GVF9SU1RfTXNrICgweDIwMDAwMDAwVUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogUkVHX1NPRlRfUlNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19NQVNURVJfVEdTT0ZUX1JTVF9Qb3MgKDMwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTUFTVEVSX1RHU09GVF9SU1QgKEJpdCAzMCkgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19NQVNURVJfVEdTT0ZUX1JTVF9Nc2sgKDB4NDAwMDAwMDBVTCkgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTUFTVEVSX1RHU09GVF9SU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19NQVNURVJfU09GVF9SU1RfUG9zICgzMVVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTUFTVEVSX1NPRlRfUlNUIChCaXQgMzEpICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfUldCTEVDTlRMX1JFR19NQVNURVJfU09GVF9SU1RfTXNrICgweDgwMDAwMDAwVUwpICAgICAgICAvKiE8IEJMRSBCTEVfUldCTEVDTlRMX1JFRzogTUFTVEVSX1NPRlRfUlNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9WRVJTSU9OX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX0JVSUxEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBCVUlMRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX0JVSUxEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBCVUlMRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX1VQR19Qb3MgICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBVUEcgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX1VQR19Nc2sgICAgICAgICAgICgweGZmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBVUEcgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX1JFTF9Qb3MgICAgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBSRUwgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX1JFTF9Nc2sgICAgICAgICAgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBSRUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX1RZUF9Qb3MgICAgICAgICAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBUWVAgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1ZFUlNJT05fUkVHX1RZUF9Nc2sgICAgICAgICAgICgweGZmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1ZFUlNJT05fUkVHOiBUWVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1JXQkxFQ09ORl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQlVTV0lEVEhfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IEJVU1dJRFRIIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQlVTV0lEVEhfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IEJVU1dJRFRIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfVVNFQ1JZUFRfUG9zICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IFVTRUNSWVBUIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfVVNFQ1JZUFRfTXNrICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IFVTRUNSWVBUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfVVNFREJHX1BvcyAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IFVTRURCRyAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfVVNFREJHX01zayAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IFVTRURCRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQ09FWF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IENPRVggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQ09FWF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IENPRVggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfSU5UTU9ERV9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IElOVE1PREUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfSU5UTU9ERV9Nc2sgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IElOVE1PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfRE1NT0RFX1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IERNTU9ERSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfRE1NT0RFX01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IERNTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfREVDSVBIRVJfUG9zICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IERFQ0lQSEVSIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfREVDSVBIRVJfTXNrICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IERFQ0lQSEVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQ0xLX1NFTF9Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IENMS19TRUwgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQ0xLX1NFTF9Nc2sgICAgICgweDNmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IENMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfUkZJRl9Qb3MgICAgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IFJGSUYgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfUkZJRl9Nc2sgICAgICAgICgweDdmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IFJGSUYgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQUREX1dJRFRIX1BvcyAgICgyNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IEFERF9XSURUSCAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JXQkxFQ09ORl9SRUdfQUREX1dJRFRIX01zayAgICgweDNmMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JXQkxFQ09ORl9SRUc6IEFERF9XSURUSCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9JTlRDTlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0NTQ05USU5UTVNLX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBDU0NOVElOVE1TSyAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0NTQ05USU5UTVNLX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBDU0NOVElOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX1JYSU5UTVNLX1BvcyAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBSWElOVE1TSyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX1JYSU5UTVNLX01zayAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBSWElOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX1NMUElOVE1TS19Qb3MgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBTTFBJTlRNU0sgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX1NMUElOVE1TS19Nc2sgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBTTFBJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0VWRU5USU5UTVNLX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBFVkVOVElOVE1TSyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0VWRU5USU5UTVNLX01zayAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBFVkVOVElOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0NSWVBUSU5UTVNLX1BvcyAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBDUllQVElOVE1TSyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0NSWVBUSU5UTVNLX01zayAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBDUllQVElOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0VSUk9SSU5UTVNLX1BvcyAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBFUlJPUklOVE1TSyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0VSUk9SSU5UTVNLX01zayAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBFUlJPUklOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0dST1NTVEdUSU1JTlRNU0tfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBHUk9TU1RHVElNSU5UTVNLIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0dST1NTVEdUSU1JTlRNU0tfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBHUk9TU1RHVElNSU5UTVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0ZJTkVUR1RJTUlOVE1TS19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBGSU5FVEdUSU1JTlRNU0sgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0ZJTkVUR1RJTUlOVE1TS19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBGSU5FVEdUSU1JTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0VWRU5UQVBGQUlOVE1TS19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBFVkVOVEFQRkFJTlRNU0sgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0VWRU5UQVBGQUlOVE1TS19Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBFVkVOVEFQRkFJTlRNU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX1NXSU5UTVNLX1BvcyAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBTV0lOVE1TSyAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX1NXSU5UTVNLX01zayAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBTV0lOVE1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0NTQ05UREVWTVNLX1BvcyAgICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBDU0NOVERFVk1TSyAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVENOVExfUkVHX0NTQ05UREVWTVNLX01zayAgICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVENOVExfUkVHOiBDU0NOVERFVk1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9JTlRTVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0NTQ05USU5UU1RBVF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBDU0NOVElOVFNUQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0NTQ05USU5UU1RBVF9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBDU0NOVElOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX1JYSU5UU1RBVF9Qb3MgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBSWElOVFNUQVQgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX1JYSU5UU1RBVF9Nc2sgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBSWElOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX1NMUElOVFNUQVRfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBTTFBJTlRTVEFUIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX1NMUElOVFNUQVRfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBTTFBJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0VWRU5USU5UU1RBVF9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBFVkVOVElOVFNUQVQgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0VWRU5USU5UU1RBVF9Nc2sgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBFVkVOVElOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0NSWVBUSU5UU1RBVF9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBDUllQVElOVFNUQVQgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0NSWVBUSU5UU1RBVF9Nc2sgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBDUllQVElOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0VSUk9SSU5UU1RBVF9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBFUlJPUklOVFNUQVQgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0VSUk9SSU5UU1RBVF9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBFUlJPUklOVFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0dST1NTVEdUSU1JTlRTVEFUX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBHUk9TU1RHVElNSU5UU1RBVCAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFNUQVRfUkVHX0dST1NTVEdUSU1JTlRTVEFUX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFNUQVRfUkVHOiBHUk9TU1RHVElNSU5UU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19GSU5FVEdUSU1JTlRTVEFUX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRklORVRHVElNSU5UU1RBVCAoQml0IDcpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19GSU5FVEdUSU1JTlRTVEFUX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRklORVRHVElNSU5UU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19FVkVOVEFQRkFJTlRTVEFUX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRVZFTlRBUEZBSU5UU1RBVCAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19FVkVOVEFQRkFJTlRTVEFUX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogRVZFTlRBUEZBSU5UU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19TV0lOVFNUQVRfUG9zICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogU1dJTlRTVEFUIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRTVEFUX1JFR19TV0lOVFNUQVRfTXNrICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRTVEFUX1JFRzogU1dJTlRTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19DU0NOVElOVFJBV1NUQVRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogQ1NDTlRJTlRSQVdTVEFUIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19DU0NOVElOVFJBV1NUQVRfTXNrICgweDFVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogQ1NDTlRJTlRSQVdTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX1JYSU5UUkFXU1RBVF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBSWElOVFJBV1NUQVQgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX1JYSU5UUkFXU1RBVF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBSWElOVFJBV1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX1NMUElOVFJBV1NUQVRfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBTTFBJTlRSQVdTVEFUIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX1NMUElOVFJBV1NUQVRfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBTTFBJTlRSQVdTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX0VWRU5USU5UUkFXU1RBVF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBFVkVOVElOVFJBV1NUQVQgKEJpdCAzKSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX0VWRU5USU5UUkFXU1RBVF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBFVkVOVElOVFJBV1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfQ1JZUFRJTlRSQVdTVEFUX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IENSWVBUSU5UUkFXU1RBVCAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfSU5UUkFXU1RBVF9SRUdfQ1JZUFRJTlRSQVdTVEFUX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfSU5UUkFXU1RBVF9SRUc6IENSWVBUSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19FUlJPUklOVFJBV1NUQVRfUG9zICg1VUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRVJST1JJTlRSQVdTVEFUIChCaXQgNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19FUlJPUklOVFJBV1NUQVRfTXNrICgweDIwVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRVJST1JJTlRSQVdTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX0dST1NTVEdUSU1JTlRSQVdTVEFUX1BvcyAoNlVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBHUk9TU1RHVElNSU5UUkFXU1RBVCAoQml0IDYpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0lOVFJBV1NUQVRfUkVHX0dST1NTVEdUSU1JTlRSQVdTVEFUX01zayAoMHg0MFVMKSAgICAgICAgLyohPCBCTEUgQkxFX0lOVFJBV1NUQVRfUkVHOiBHUk9TU1RHVElNSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19GSU5FVEdUSU1JTlRSQVdTVEFUX1BvcyAoN1VMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRklORVRHVElNSU5UUkFXU1RBVCAoQml0IDcpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19GSU5FVEdUSU1JTlRSQVdTVEFUX01zayAoMHg4MFVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRklORVRHVElNSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19FVkVOVEFQRkFJTlRSQVdTVEFUX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRVZFTlRBUEZBSU5UUkFXU1RBVCAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19FVkVOVEFQRkFJTlRSQVdTVEFUX01zayAoMHgxMDBVTCkgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogRVZFTlRBUEZBSU5UUkFXU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19TV0lOVFJBV1NUQVRfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogU1dJTlRSQVdTVEFUIChCaXQgOSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRSQVdTVEFUX1JFR19TV0lOVFJBV1NUQVRfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRSQVdTVEFUX1JFRzogU1dJTlRSQVdTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfSU5UQUNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0NTQ05USU5UQUNLX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBDU0NOVElOVEFDSyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0NTQ05USU5UQUNLX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBDU0NOVElOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX1JYSU5UQUNLX1BvcyAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBSWElOVEFDSyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX1JYSU5UQUNLX01zayAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBSWElOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX1NMUElOVEFDS19Qb3MgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBTTFBJTlRBQ0sgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX1NMUElOVEFDS19Nc2sgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBTTFBJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0VWRU5USU5UQUNLX1BvcyAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBFVkVOVElOVEFDSyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0VWRU5USU5UQUNLX01zayAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBFVkVOVElOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0NSWVBUSU5UQUNLX1BvcyAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBDUllQVElOVEFDSyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0NSWVBUSU5UQUNLX01zayAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBDUllQVElOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0VSUk9SSU5UQUNLX1BvcyAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBFUlJPUklOVEFDSyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0VSUk9SSU5UQUNLX01zayAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBFUlJPUklOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0dST1NTVEdUSU1JTlRBQ0tfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBHUk9TU1RHVElNSU5UQUNLIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0dST1NTVEdUSU1JTlRBQ0tfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBHUk9TU1RHVElNSU5UQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0ZJTkVUR1RJTUlOVEFDS19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBGSU5FVEdUSU1JTlRBQ0sgKEJpdCA3KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0ZJTkVUR1RJTUlOVEFDS19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBGSU5FVEdUSU1JTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0VWRU5UQVBGQUlOVEFDS19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBFVkVOVEFQRkFJTlRBQ0sgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX0VWRU5UQVBGQUlOVEFDS19Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBFVkVOVEFQRkFJTlRBQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX1NXSU5UQUNLX1BvcyAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBTV0lOVEFDSyAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9JTlRBQ0tfUkVHX1NXSU5UQUNLX01zayAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9JTlRBQ0tfUkVHOiBTV0lOVEFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0JBU0VUSU1FQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9CQVNFVElNRUNOVF9SRUdfQkFTRVRJTUVDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9CQVNFVElNRUNOVF9SRUc6IEJBU0VUSU1FQ05UIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9CQVNFVElNRUNOVF9SRUdfQkFTRVRJTUVDTlRfTXNrICgweDdmZmZmZmZVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9CQVNFVElNRUNOVF9SRUc6IEJBU0VUSU1FQ05UIChCaXRmaWVsZC1NYXNrOiAweDdmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9GSU5FVElNRUNOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfRklORVRJTUVDTlRfUkVHX0ZJTkVDTlRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRklORVRJTUVDTlRfUkVHOiBGSU5FQ05UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRklORVRJTUVDTlRfUkVHX0ZJTkVDTlRfTXNrICAgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRklORVRJTUVDTlRfUkVHOiBGSU5FQ05UIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0JEQUREUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQkRBRERSTF9SRUdfQkRBRERSTF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkRBRERSTF9SRUc6IEJEQUREUkwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkRBRERSTF9SRUdfQkRBRERSTF9Nc2sgICAgICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkRBRERSTF9SRUc6IEJEQUREUkwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0JEQUREUlVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQkRBRERSVV9SRUdfQkRBRERSVV9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkRBRERSVV9SRUc6IEJEQUREUlUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkRBRERSVV9SRUdfQkRBRERSVV9Nc2sgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkRBRERSVV9SRUc6IEJEQUREUlUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkRBRERSVV9SRUdfUFJJVl9OUFVCX1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkRBRERSVV9SRUc6IFBSSVZfTlBVQiAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkRBRERSVV9SRUdfUFJJVl9OUFVCX01zayAgICAgKDB4MTAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkRBRERSVV9SRUc6IFBSSVZfTlBVQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9DVVJSRU5UUlhERVNDUFRSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUdfQ1VSUkVOVFJYREVTQ1BUUl9Qb3MgKDBVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUc6IENVUlJFTlRSWERFU0NQVFIgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUdfQ1VSUkVOVFJYREVTQ1BUUl9Nc2sgKDB4N2ZmZlVMKSAgICAvKiE8IEJMRSBCTEVfQ1VSUkVOVFJYREVTQ1BUUl9SRUc6IENVUlJFTlRSWERFU0NQVFIgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgQkxFX0JMRV9DVVJSRU5UUlhERVNDUFRSX1JFR19FVFBUUl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DVVJSRU5UUlhERVNDUFRSX1JFRzogRVRQVFIgKEJpdCAxNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DVVJSRU5UUlhERVNDUFRSX1JFR19FVFBUUl9Nc2sgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9DVVJSRU5UUlhERVNDUFRSX1JFRzogRVRQVFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0RFRVBTTENOVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUVQU0xDTlRMX1JFR19ERUVQX1NMRUVQX0lSUV9FTl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUVQU0xDTlRMX1JFRzogREVFUF9TTEVFUF9JUlFfRU4gKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUVQU0xDTlRMX1JFR19ERUVQX1NMRUVQX0lSUV9FTl9Nc2sgKDB4M1VMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUVQU0xDTlRMX1JFRzogREVFUF9TTEVFUF9JUlFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfREVFUF9TTEVFUF9PTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IERFRVBfU0xFRVBfT04gKEJpdCAyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfREVFUF9TTEVFUF9PTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IERFRVBfU0xFRVBfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfREVFUF9TTEVFUF9DT1JSX0VOX1BvcyAoM1VMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IERFRVBfU0xFRVBfQ09SUl9FTiAoQml0IDMpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfREVFUF9TTEVFUF9DT1JSX0VOX01zayAoMHg4VUwpICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IERFRVBfU0xFRVBfQ09SUl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUVQU0xDTlRMX1JFR19TT0ZUX1dBS0VVUF9SRVFfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUVQU0xDTlRMX1JFRzogU09GVF9XQUtFVVBfUkVRIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUVQU0xDTlRMX1JFR19TT0ZUX1dBS0VVUF9SRVFfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUVQU0xDTlRMX1JFRzogU09GVF9XQUtFVVBfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0RFRVBfU0xFRVBfU1RBVF9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBERUVQX1NMRUVQX1NUQVQgKEJpdCAxNSkgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0RFRVBTTENOVExfUkVHX0RFRVBfU0xFRVBfU1RBVF9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0RFRVBTTENOVExfUkVHOiBERUVQX1NMRUVQX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfRVhUV0tVUERTQl9Qb3MgKDMxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IEVYVFdLVVBEU0IgKEJpdCAzMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMQ05UTF9SRUdfRVhUV0tVUERTQl9Nc2sgKDB4ODAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMQ05UTF9SRUc6IEVYVFdLVVBEU0IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ERUVQU0xXS1VQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMV0tVUF9SRUdfREVFUFNMVElNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMV0tVUF9SRUc6IERFRVBTTFRJTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMV0tVUF9SRUdfREVFUFNMVElNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMV0tVUF9SRUc6IERFRVBTTFRJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ERUVQU0xTVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMU1RBVF9SRUdfREVFUFNMRFVSX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMU1RBVF9SRUc6IERFRVBTTERVUiAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfREVFUFNMU1RBVF9SRUdfREVFUFNMRFVSX01zayAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfREVFUFNMU1RBVF9SRUc6IERFRVBTTERVUiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9FTkJQUkVTRVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9FTkJQUkVTRVRfUkVHX1RXSVJRX1JFU0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTkJQUkVTRVRfUkVHOiBUV0lSUV9SRVNFVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FTkJQUkVTRVRfUkVHX1RXSVJRX1JFU0VUX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTkJQUkVTRVRfUkVHOiBUV0lSUV9SRVNFVCAoQml0ZmllbGQtTWFzazogMHgzZmYpICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FTkJQUkVTRVRfUkVHX1RXSVJRX1NFVF9Qb3MgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTkJQUkVTRVRfUkVHOiBUV0lSUV9TRVQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FTkJQUkVTRVRfUkVHX1RXSVJRX1NFVF9Nc2sgICAoMHgxZmZjMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTkJQUkVTRVRfUkVHOiBUV0lSUV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FTkJQUkVTRVRfUkVHX1RXRVhUX1BvcyAgICAgICAoMjFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTkJQUkVTRVRfUkVHOiBUV0VYVCAoQml0IDIxKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FTkJQUkVTRVRfUkVHX1RXRVhUX01zayAgICAgICAoMHhmZmUwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FTkJQUkVTRVRfUkVHOiBUV0VYVCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0ZJTkVDTlRDT1JSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9GSU5FQ05UQ09SUl9SRUdfRklORUNOVENPUlJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9GSU5FQ05UQ09SUl9SRUc6IEZJTkVDTlRDT1JSIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9GSU5FQ05UQ09SUl9SRUdfRklORUNOVENPUlJfTXNrICgweDNmZlVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9GSU5FQ05UQ09SUl9SRUc6IEZJTkVDTlRDT1JSIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9CQVNFVElNRUNOVENPUlJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9CQVNFVElNRUNOVENPUlJfUkVHX0JBU0VUSU1FQ05UQ09SUl9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9CQVNFVElNRUNOVENPUlJfUkVHOiBCQVNFVElNRUNOVENPUlIgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9CQVNFVElNRUNOVENPUlJfUkVHX0JBU0VUSU1FQ05UQ09SUl9Nc2sgKDB4N2ZmZmZmZlVMKSAgIC8qITwgQkxFIEJMRV9CQVNFVElNRUNOVENPUlJfUkVHOiBCQVNFVElNRUNOVENPUlIgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ESUFHQ05UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzBfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzBfTXNrICAgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcwIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzBfRU5fUG9zICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcwX0VOIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzBfRU5fTXNrICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcwX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzFfUG9zICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcxIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzFfTXNrICAgICAgICAoMHgzZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcxIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzFfRU5fUG9zICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcxX0VOIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzFfRU5fTXNrICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcxX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzJfUG9zICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcyIChCaXQgMTYpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzJfTXNrICAgICAgICAoMHgzZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcyIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzJfRU5fUG9zICAgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcyX0VOIChCaXQgMjMpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzJfRU5fTXNrICAgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUcyX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzNfUG9zICAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUczIChCaXQgMjQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzNfTXNrICAgICAgICAoMHgzZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUczIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzNfRU5fUG9zICAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUczX0VOIChCaXQgMzEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTF9SRUdfRElBRzNfRU5fTXNrICAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTF9SRUc6IERJQUczX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ESUFHU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzBTVEFUX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUcwU1RBVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzBTVEFUX01zayAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUcwU1RBVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzFTVEFUX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUcxU1RBVCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzFTVEFUX01zayAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUcxU1RBVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzJTVEFUX1BvcyAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUcyU1RBVCAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzJTVEFUX01zayAgICAoMHhmZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUcyU1RBVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzNTVEFUX1BvcyAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUczU1RBVCAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHU1RBVF9SRUdfRElBRzNTVEFUX01zayAgICAoMHhmZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHU1RBVF9SRUc6IERJQUczU1RBVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0RFQlVHQURETUFYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1BWF9SRUdfRU1fQURETUFYX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1BWF9SRUc6IEVNX0FERE1BWCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1BWF9SRUdfRU1fQURETUFYX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1BWF9SRUc6IEVNX0FERE1BWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1BWF9SRUdfUkVHX0FERE1BWF9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1BWF9SRUc6IFJFR19BRERNQVggKEJpdCAxNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1BWF9SRUdfUkVHX0FERE1BWF9Nc2sgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1BWF9SRUc6IFJFR19BRERNQVggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0RFQlVHQURETUlOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1JTl9SRUdfRU1fQURETUlOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1JTl9SRUc6IEVNX0FERE1JTiAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1JTl9SRUdfRU1fQURETUlOX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1JTl9SRUc6IEVNX0FERE1JTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1JTl9SRUdfUkVHX0FERE1JTl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1JTl9SRUc6IFJFR19BRERNSU4gKEJpdCAxNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ERUJVR0FERE1JTl9SRUdfUkVHX0FERE1JTl9Nc2sgKDB4ZmZmZjAwMDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9ERUJVR0FERE1JTl9SRUc6IFJFR19BRERNSU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19UWENSWVBUX0VSUk9SX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogVFhDUllQVF9FUlJPUiAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19UWENSWVBUX0VSUk9SX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogVFhDUllQVF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SWENSWVBUX0VSUk9SX1BvcyAoMVVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUlhDUllQVF9FUlJPUiAoQml0IDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SWENSWVBUX0VSUk9SX01zayAoMHgyVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUlhDUllQVF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19QS1RDTlRMX0VNQUNDX0VSUk9SX1BvcyAoMlVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUEtUQ05UTF9FTUFDQ19FUlJPUiAoQml0IDIpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19QS1RDTlRMX0VNQUNDX0VSUk9SX01zayAoMHg0VUwpICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUEtUQ05UTF9FTUFDQ19FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SQURJT19FTUFDQ19FUlJPUl9Qb3MgKDNVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUkFESU9fRU1BQ0NfRVJST1IgKEJpdCAzKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SQURJT19FTUFDQ19FUlJPUl9Nc2sgKDB4OFVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUkFESU9fRU1BQ0NfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfRVZUX1NDSERMX0VNQUNDX0VSUk9SX1BvcyAoNFVMKSAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEVWVF9TQ0hETF9FTUFDQ19FUlJPUiAoQml0IDQpICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfRVZUX1NDSERMX0VNQUNDX0VSUk9SX01zayAoMHgxMFVMKSAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEVWVF9TQ0hETF9FTUFDQ19FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19FVlRfU0NIRExfRU5UUllfRVJST1JfUG9zICg1VUwpICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogRVZUX1NDSERMX0VOVFJZX0VSUk9SIChCaXQgNSkgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19FVlRfU0NIRExfRU5UUllfRVJST1JfTXNrICgweDIwVUwpICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogRVZUX1NDSERMX0VOVFJZX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0VWVF9TQ0hETF9BUEZNX0VSUk9SX1BvcyAoNlVMKSAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBFVlRfU0NIRExfQVBGTV9FUlJPUiAoQml0IDYpICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0VWVF9TQ0hETF9BUEZNX0VSUk9SX01zayAoMHg0MFVMKSAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBFVlRfU0NIRExfQVBGTV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19FVlRfQ05UTF9BUEZNX0VSUk9SX1BvcyAoN1VMKSAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogRVZUX0NOVExfQVBGTV9FUlJPUiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19FVlRfQ05UTF9BUEZNX0VSUk9SX01zayAoMHg4MFVMKSAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogRVZUX0NOVExfQVBGTV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19XSElURUxJU1RfRVJST1JfUG9zICg4VUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogV0hJVEVMSVNUX0VSUk9SIChCaXQgOCkgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19XSElURUxJU1RfRVJST1JfTXNrICgweDEwMFVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogV0hJVEVMSVNUX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0lGU19VTkRFUlJVTl9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBJRlNfVU5ERVJSVU4gKEJpdCA5KSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0lGU19VTkRFUlJVTl9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBJRlNfVU5ERVJSVU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfQURWX1VOREVSUlVOX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEFEVl9VTkRFUlJVTiAoQml0IDEwKSAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfQURWX1VOREVSUlVOX01zayAoMHg0MDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IEFEVl9VTkRFUlJVTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19MTENITUFQX0VSUk9SX1BvcyAoMTFVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogTExDSE1BUF9FUlJPUiAoQml0IDExKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19MTENITUFQX0VSUk9SX01zayAoMHg4MDBVTCkgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogTExDSE1BUF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19DU0ZPUk1BVF9FUlJPUl9Qb3MgKDEyVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogQ1NGT1JNQVRfRVJST1IgKEJpdCAxMikgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19DU0ZPUk1BVF9FUlJPUl9Nc2sgKDB4MTAwMFVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogQ1NGT1JNQVRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfVFhERVNDX0VNUFRZX0VSUk9SX1BvcyAoMTNVTCkgICAgICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFRYREVTQ19FTVBUWV9FUlJPUiAoQml0IDEzKSAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfRVJST1JUWVBFU1RBVF9SRUdfVFhERVNDX0VNUFRZX0VSUk9SX01zayAoMHgyMDAwVUwpICAgICAvKiE8IEJMRSBCTEVfRVJST1JUWVBFU1RBVF9SRUc6IFRYREVTQ19FTVBUWV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SWERFU0NfRU1QVFlfRVJST1JfUG9zICgxNFVMKSAgICAgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUlhERVNDX0VNUFRZX0VSUk9SIChCaXQgMTQpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9FUlJPUlRZUEVTVEFUX1JFR19SWERFU0NfRU1QVFlfRVJST1JfTXNrICgweDQwMDBVTCkgICAgIC8qITwgQkxFIEJMRV9FUlJPUlRZUEVTVEFUX1JFRzogUlhERVNDX0VNUFRZX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX1RYREFUQV9QVFJfRVJST1JfUG9zICgxNVVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBUWERBVEFfUFRSX0VSUk9SIChCaXQgMTUpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX1RYREFUQV9QVFJfRVJST1JfTXNrICgweDgwMDBVTCkgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBUWERBVEFfUFRSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX1JYREFUQV9QVFJfRVJST1JfUG9zICgxNlVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBSWERBVEFfUFRSX0VSUk9SIChCaXQgMTYpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX1JYREFUQV9QVFJfRVJST1JfTXNrICgweDEwMDAwVUwpICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBSWERBVEFfUFRSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0NPTkNFVlRJUlFfRVJST1JfUG9zICgxN1VMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBDT05DRVZUSVJRX0VSUk9SIChCaXQgMTcpICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VSUk9SVFlQRVNUQVRfUkVHX0NPTkNFVlRJUlFfRVJST1JfTXNrICgweDIwMDAwVUwpICAgICAgLyohPCBCTEUgQkxFX0VSUk9SVFlQRVNUQVRfUkVHOiBDT05DRVZUSVJRX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfU1dQUk9GSUxJTkdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1NXUFJPRklMSU5HX1JFR19TV1BST0ZWQUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1NXUFJPRklMSU5HX1JFRzogU1dQUk9GVkFMIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1NXUFJPRklMSU5HX1JFR19TV1BST0ZWQUxfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1NXUFJPRklMSU5HX1JFRzogU1dQUk9GVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUkFESU9DTlRMMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPQ05UTDBfUkVHX2ZpZWxkMjQ2cnN2X1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPQ05UTDBfUkVHOiBmaWVsZDI0NnJzdiAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPQ05UTDBfUkVHX2ZpZWxkMjQ2cnN2X01zayAoMHgxY1VMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPQ05UTDBfUkVHOiBmaWVsZDI0NnJzdiAoQml0ZmllbGQtTWFzazogMHgwNykgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUkFESU9DTlRMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPQ05UTDFfUkVHX1hSRlNFTF9Qb3MgICAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPQ05UTDFfUkVHOiBYUkZTRUwgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPQ05UTDFfUkVHX1hSRlNFTF9Nc2sgICAgICgweDFmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPQ05UTDFfUkVHOiBYUkZTRUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9SQURJT1BXUlVQRE5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfVFhQV1JVUF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFRYUFdSVVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfVFhQV1JVUF9Nc2sgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFRYUFdSVVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfVFhQV1JETl9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFRYUFdSRE4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfVFhQV1JETl9Nc2sgICgweGYwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFRYUFdSRE4gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfUlhQV1JVUF9Qb3MgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFJYUFdSVVAgKEJpdCAxNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfUlhQV1JVUF9Nc2sgICgweGZmMDAwMFVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFJYUFdSVVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfUlRSSVBfREVMQVlfUG9zICgyNFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFJUUklQX0RFTEFZIChCaXQgMjQpICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JBRElPUFdSVVBETl9SRUdfUlRSSVBfREVMQVlfTXNrICgweDdmMDAwMDAwVUwpICAgICAgICAgLyohPCBCTEUgQkxFX1JBRElPUFdSVVBETl9SRUc6IFJUUklQX0RFTEFZIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FEVkNITUFQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0FEVkNITUFQX1JFR19BRFZDSE1BUF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FEVkNITUFQX1JFRzogQURWQ0hNQVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FEVkNITUFQX1JFR19BRFZDSE1BUF9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FEVkNITUFQX1JFRzogQURWQ0hNQVAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9BRFZUSU1fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0FEVlRJTV9SRUdfQURWSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FEVlRJTV9SRUc6IEFEVklOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FEVlRJTV9SRUdfQURWSU5UX01zayAgICAgICAgICgweDNmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FEVlRJTV9SRUc6IEFEVklOVCAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQUNUU0NBTlNUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0FDVFNDQU5TVEFUX1JFR19VUFBFUkxJTUlUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FDVFNDQU5TVEFUX1JFRzogVVBQRVJMSU1JVCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FDVFNDQU5TVEFUX1JFR19VUFBFUkxJTUlUX01zayAoMHgxZmZVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FDVFNDQU5TVEFUX1JFRzogVVBQRVJMSU1JVCAoQml0ZmllbGQtTWFzazogMHgxZmYpICAqLworI2RlZmluZSBCTEVfQkxFX0FDVFNDQU5TVEFUX1JFR19CQUNLT0ZGX1BvcyAgICgxNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FDVFNDQU5TVEFUX1JFRzogQkFDS09GRiAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FDVFNDQU5TVEFUX1JFR19CQUNLT0ZGX01zayAgICgweDFmZjAwMDBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FDVFNDQU5TVEFUX1JFRzogQkFDS09GRiAoQml0ZmllbGQtTWFzazogMHgxZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfV0xQVUJBRERQVFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1dMUFVCQUREUFRSX1JFR19XTFBVQkFERFBUUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1dMUFVCQUREUFRSX1JFRzogV0xQVUJBRERQVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1dMUFVCQUREUFRSX1JFR19XTFBVQkFERFBUUl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1dMUFVCQUREUFRSX1JFRzogV0xQVUJBRERQVFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfV0xQUklWQUREUFRSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9XTFBSSVZBRERQVFJfUkVHX1dMUFJJVkFERFBUUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTFBSSVZBRERQVFJfUkVHOiBXTFBSSVZBRERQVFIgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9XTFBSSVZBRERQVFJfUkVHX1dMUFJJVkFERFBUUl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTFBSSVZBRERQVFJfUkVHOiBXTFBSSVZBRERQVFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfV0xOQkRFVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9XTE5CREVWX1JFR19OQlBVQkRFVl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTE5CREVWX1JFRzogTkJQVUJERVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9XTE5CREVWX1JFR19OQlBVQkRFVl9Nc2sgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTE5CREVWX1JFRzogTkJQVUJERVYgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9XTE5CREVWX1JFR19OQlBSSVZERVZfUG9zICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTE5CREVWX1JFRzogTkJQUklWREVWIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9XTE5CREVWX1JFR19OQlBSSVZERVZfTXNrICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9XTE5CREVWX1JFRzogTkJQUklWREVWIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQUVTQ05UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNDTlRMX1JFR19BRVNfU1RBUlRfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNDTlRMX1JFRzogQUVTX1NUQVJUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNDTlRMX1JFR19BRVNfU1RBUlRfTXNrICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNDTlRMX1JFRzogQUVTX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNDTlRMX1JFR19BRVNfTU9ERV9Qb3MgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNDTlRMX1JFRzogQUVTX01PREUgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNDTlRMX1JFR19BRVNfTU9ERV9Nc2sgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNDTlRMX1JFRzogQUVTX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FFU0tFWTMxXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNLRVkzMV8wX1JFR19BRVNLRVkzMV8wX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNLRVkzMV8wX1JFRzogQUVTS0VZMzFfMCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNLRVkzMV8wX1JFR19BRVNLRVkzMV8wX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNLRVkzMV8wX1JFRzogQUVTS0VZMzFfMCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FFU0tFWTYzXzMyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNLRVk2M18zMl9SRUdfQUVTS0VZNjNfMzJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNLRVk2M18zMl9SRUc6IEFFU0tFWTYzXzMyIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9BRVNLRVk2M18zMl9SRUdfQUVTS0VZNjNfMzJfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgQkxFIEJMRV9BRVNLRVk2M18zMl9SRUc6IEFFU0tFWTYzXzMyIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQUVTS0VZOTVfNjRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0FFU0tFWTk1XzY0X1JFR19BRVNLRVk5NV82NF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FFU0tFWTk1XzY0X1JFRzogQUVTS0VZOTVfNjQgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FFU0tFWTk1XzY0X1JFR19BRVNLRVk5NV82NF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgLyohPCBCTEUgQkxFX0FFU0tFWTk1XzY0X1JFRzogQUVTS0VZOTVfNjQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0FFU0tFWTEyN185Nl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQUVTS0VZMTI3Xzk2X1JFR19BRVNLRVkxMjdfOTZfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQUVTS0VZMTI3Xzk2X1JFRzogQUVTS0VZMTI3Xzk2IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQUVTS0VZMTI3Xzk2X1JFR19BRVNLRVkxMjdfOTZfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAvKiE8IEJMRSBCTEVfQUVTS0VZMTI3Xzk2X1JFRzogQUVTS0VZMTI3Xzk2IChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9BRVNQVFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0FFU1BUUl9SRUdfQUVTUFRSX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FFU1BUUl9SRUc6IEFFU1BUUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0FFU1BUUl9SRUdfQUVTUFRSX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0FFU1BUUl9SRUc6IEFFU1BUUiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1RYTUlDVkFMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1RYTUlDVkFMX1JFR19UWE1JQ1ZBTF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1RYTUlDVkFMX1JFRzogVFhNSUNWQUwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1RYTUlDVkFMX1JFR19UWE1JQ1ZBTF9Nc2sgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1RYTUlDVkFMX1JFRzogVFhNSUNWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1JYTUlDVkFMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JYTUlDVkFMX1JFR19SWE1JQ1ZBTF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JYTUlDVkFMX1JFRzogUlhNSUNWQUwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JYTUlDVkFMX1JFR19SWE1JQ1ZBTF9Nc2sgICAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JYTUlDVkFMX1JFRzogUlhNSUNWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfUkZURVNUQ05UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYTEVOR1RIX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWExFTkdUSCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYTEVOR1RIX01zayAgICgweDFmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWExFTkdUSCAoQml0ZmllbGQtTWFzazogMHgxZmYpICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYUEtUQ05URU5fUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWFBLVENOVEVOIChCaXQgMTEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYUEtUQ05URU5fTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWFBLVENOVEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYUExEU1JDX1BvcyAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWFBMRFNSQyAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYUExEU1JDX01zayAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWFBMRFNSQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1BSQlNUWVBFX1BvcyAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBQUkJTVFlQRSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1BSQlNUWVBFX01zayAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBQUkJTVFlQRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYTEVOR1RIU1JDX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWExFTkdUSFNSQyAoQml0IDE0KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1RYTEVOR1RIU1JDX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBUWExFTkdUSFNSQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX0lORklOSVRFVFhfUG9zICgxNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBJTkZJTklURVRYIChCaXQgMTUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX0lORklOSVRFVFhfTXNrICgweDgwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBJTkZJTklURVRYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1JYUEtUQ05URU5fUG9zICgyN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBSWFBLVENOVEVOIChCaXQgMjcpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX1JYUEtUQ05URU5fTXNrICgweDgwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBSWFBLVENOVEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX0lORklOSVRFUlhfUG9zICgzMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBJTkZJTklURVJYIChCaXQgMzEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVENOVExfUkVHX0lORklOSVRFUlhfTXNrICgweDgwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVENOVExfUkVHOiBJTkZJTklURVJYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9SRlRFU1RUWFNUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVFRYU1RBVF9SRUdfVFhQS1RDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVFRYU1RBVF9SRUc6IFRYUEtUQ05UIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVFRYU1RBVF9SRUdfVFhQS1RDTlRfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVFRYU1RBVF9SRUc6IFRYUEtUQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9SRlRFU1RSWFNUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVFJYU1RBVF9SRUdfUlhQS1RDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVFJYU1RBVF9SRUc6IFJYUEtUQ05UIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1JGVEVTVFJYU1RBVF9SRUdfUlhQS1RDTlRfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBCTEUgQkxFX1JGVEVTVFJYU1RBVF9SRUc6IFJYUEtUQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfVElNR0VOQ05UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1RJTUdFTkNOVExfUkVHX1BSRUZFVENIX1RJTUVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1RJTUdFTkNOVExfUkVHOiBQUkVGRVRDSF9USU1FIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1RJTUdFTkNOVExfUkVHX1BSRUZFVENIX1RJTUVfTXNrICgweDFmZlVMKSAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1RJTUdFTkNOVExfUkVHOiBQUkVGRVRDSF9USU1FIChCaXRmaWVsZC1NYXNrOiAweDFmZikgKi8KKyNkZWZpbmUgQkxFX0JMRV9USU1HRU5DTlRMX1JFR19QUkVGRVRDSEFCT1JUX1RJTUVfUG9zICgxNlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9USU1HRU5DTlRMX1JFRzogUFJFRkVUQ0hBQk9SVF9USU1FIChCaXQgMTYpICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9USU1HRU5DTlRMX1JFR19QUkVGRVRDSEFCT1JUX1RJTUVfTXNrICgweDNmZjAwMDBVTCkgICAgIC8qITwgQkxFIEJMRV9USU1HRU5DTlRMX1JFRzogUFJFRkVUQ0hBQk9SVF9USU1FIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKyNkZWZpbmUgQkxFX0JMRV9USU1HRU5DTlRMX1JFR19BUEZNX0VOX1BvcyAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9USU1HRU5DTlRMX1JFRzogQVBGTV9FTiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9USU1HRU5DTlRMX1JFR19BUEZNX0VOX01zayAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9USU1HRU5DTlRMX1JFRzogQVBGTV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0dST1NTVElNVEdUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9HUk9TU1RJTVRHVF9SRUdfR1JPU1NUQVJHRVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9HUk9TU1RJTVRHVF9SRUc6IEdST1NTVEFSR0VUIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9HUk9TU1RJTVRHVF9SRUdfR1JPU1NUQVJHRVRfTXNrICgweDdmZmZmZlVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9HUk9TU1RJTVRHVF9SRUc6IEdST1NTVEFSR0VUIChCaXRmaWVsZC1NYXNrOiAweDdmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX0ZJTkVUSU1UR1RfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9GSU5FVElNVEdUX1JFR19GSU5FVEFSR0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9GSU5FVElNVEdUX1JFRzogRklORVRBUkdFVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9GSU5FVElNVEdUX1JFR19GSU5FVEFSR0VUX01zayAoMHg3ZmZmZmZmVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9GSU5FVElNVEdUX1JFRzogRklORVRBUkdFVCAoQml0ZmllbGQtTWFzazogMHg3ZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBCTEVfQkxFX1NBTVBMRUNMS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX1NBTVBMRUNMS19SRUdfU0FNUF9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1NBTVBMRUNMS19SRUc6IFNBTVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX1NBTVBMRUNMS19SRUdfU0FNUF9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX1NBTVBMRUNMS19SRUc6IFNBTVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQ09FWElGQ05UTDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19DT0VYX0VOX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogQ09FWF9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19DT0VYX0VOX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogQ09FWF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19TWU5DR0VOX0VOX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogU1lOQ0dFTl9FTiAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19TWU5DR0VOX0VOX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogU1lOQ0dFTl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19XTEFOUlhNU0tfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogV0xBTlJYTVNLIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19XTEFOUlhNU0tfTXNrICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogV0xBTlJYTVNLIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19XTEFOVFhNU0tfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogV0xBTlRYTVNLIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19XTEFOVFhNU0tfTXNrICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogV0xBTlRYTVNLIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19XTENUWFBSSU9NT0RFX1BvcyAoMTZVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogV0xDVFhQUklPTU9ERSAoQml0IDE2KSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NPRVhJRkNOVEwwX1JFR19XTENUWFBSSU9NT0RFX01zayAoMHgzMDAwMFVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0NPRVhJRkNOVEwwX1JFRzogV0xDVFhQUklPTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xDUlhQUklPTU9ERV9Qb3MgKDIwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQ1JYUFJJT01PREUgKEJpdCAyMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9DT0VYSUZDTlRMMF9SRUdfV0xDUlhQUklPTU9ERV9Nc2sgKDB4MzAwMDAwVUwpICAgICAgICAgIC8qITwgQkxFIEJMRV9DT0VYSUZDTlRMMF9SRUc6IFdMQ1JYUFJJT01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9DT0VYSUZDTlRMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BERUxBWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQREVMQVkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BERUxBWV9Nc2sgKDB4N2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BEVVJBVElPTl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQRFVSQVRJT04gKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BEVVJBVElPTl9Nc2sgKDB4N2YwMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQRFVSQVRJT04gKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BUWFRIUl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQVFhUSFIgKEJpdCAxNikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BUWFRIUl9Nc2sgKDB4MWYwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQVFhUSFIgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BSWFRIUl9Qb3MgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQUlhUSFIgKEJpdCAyNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ09FWElGQ05UTDFfUkVHX1dMQ1BSWFRIUl9Nc2sgKDB4MWYwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ09FWElGQ05UTDFfUkVHOiBXTENQUlhUSFIgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQkxFTVBSSU8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNMF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNMF9Nc2sgICAgICAgKDB4ZlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNMV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTEgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNMV9Nc2sgICAgICAgKDB4ZjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTEgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNMl9Qb3MgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTIgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNMl9Nc2sgICAgICAgKDB4ZjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNM19Qb3MgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTMgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNM19Nc2sgICAgICAgKDB4ZjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTMgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNNF9Qb3MgICAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTQgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNNF9Nc2sgICAgICAgKDB4ZjAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNNV9Qb3MgICAgICAgKDIwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTUgKEJpdCAyMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNNV9Nc2sgICAgICAgKDB4ZjAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNNl9Qb3MgICAgICAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTYgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNNl9Nc2sgICAgICAgKDB4ZjAwMDAwMFVMKSAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNN19Qb3MgICAgICAgKDI4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTcgKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8wX1JFR19CTEVNN19Nc2sgICAgICAgKDB4ZjAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8wX1JFRzogQkxFTTcgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEJMRV9CTEVfQkxFTVBSSU8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8xX1JFR19CTEVNREVGQVVMVF9Qb3MgKDI4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8xX1JFRzogQkxFTURFRkFVTFQgKEJpdCAyOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQkxFTVBSSU8xX1JFR19CTEVNREVGQVVMVF9Nc2sgKDB4ZjAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQkxFTVBSSU8xX1JFRzogQkxFTURFRkFVTFQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9DTlRMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0VNQUNDRVJSU1RBVF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBFTUFDQ0VSUlNUQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0VNQUNDRVJSU1RBVF9Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBFTUFDQ0VSUlNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0VNQUNDRVJSQUNLX1BvcyAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBFTUFDQ0VSUkFDSyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0VNQUNDRVJSQUNLX01zayAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBFTUFDQ0VSUkFDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0VNQUNDRVJSTVNLX1BvcyAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBFTUFDQ0VSUk1TSyAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0VNQUNDRVJSTVNLX01zayAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBFTUFDQ0VSUk1TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9ESUFHX09WUl9Qb3MgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfRElBR19PVlIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9ESUFHX09WUl9Nc2sgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfRElBR19PVlIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9ESUFHX09WUl9TRUxfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfRElBR19PVlJfU0VMIChCaXQgNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9ESUFHX09WUl9TRUxfTXNrICgweDMwVUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfRElBR19PVlJfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9DTEtfU1RBVF9Qb3MgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfQ0xLX1NUQVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9DTEtfU1RBVF9Nc2sgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfQ0xLX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX01PTl9MUF9DTEtfUG9zICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBNT05fTFBfQ0xLIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX01PTl9MUF9DTEtfTXNrICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBNT05fTFBfQ0xLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX1JBRElPX1BXUkROX0FMTE9XX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBSQURJT19QV1JETl9BTExPVyAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX1JBRElPX1BXUkROX0FMTE9XX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBSQURJT19QV1JETl9BTExPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9DTEtfU0VMX1BvcyAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfQ0xLX1NFTCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9DTEtfU0VMX01zayAgICAgKDB4N2UwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfQ0xLX1NFTCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9UUkFOU0FDVElPTl9TUkNfUG9zICgxNVVMKSAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfVFJBTlNBQ1RJT05fU1JDIChCaXQgMTUpICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9UUkFOU0FDVElPTl9TUkNfTXNrICgweDgwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfVFJBTlNBQ1RJT05fU1JDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfVFJBTlNBQ1RJT05fTU9ERV9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1RSQU5TQUNUSU9OX01PREUgKEJpdCAxNikgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0NOVEwyX1JFR19CTEVfVFJBTlNBQ1RJT05fTU9ERV9Nc2sgKDB4MTAwMDBVTCkgICAgICAgICAgLyohPCBCTEUgQkxFX0NOVEwyX1JFRzogQkxFX1RSQU5TQUNUSU9OX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9QVElfU09VUkNFX1NFTF9Qb3MgKDE3VUwpICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfUFRJX1NPVVJDRV9TRUwgKEJpdCAxNykgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9QVElfU09VUkNFX1NFTF9Nc2sgKDB4MjAwMDBVTCkgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfUFRJX1NPVVJDRV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JCX09OTFlfUG9zICAgICAgICAgKDE4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCQl9PTkxZIChCaXQgMTgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JCX09OTFlfTXNrICAgICAgICAgKDB4NDAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCQl9PTkxZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX1NXX1JQTF9TUElfUG9zICAgICAgKDE5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBTV19SUExfU1BJIChCaXQgMTkpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX1NXX1JQTF9TUElfTXNrICAgICAgKDB4ODAwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBTV19SUExfU1BJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX1dBS0VVUExQU1RBVF9Qb3MgICAgKDIwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBXQUtFVVBMUFNUQVQgKEJpdCAyMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX1dBS0VVUExQU1RBVF9Nc2sgICAgKDB4MTAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBXQUtFVVBMUFNUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9SU1NJX1NFTF9Qb3MgICAgKDIxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfUlNTSV9TRUwgKEJpdCAyMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9SU1NJX1NFTF9Nc2sgICAgKDB4MjAwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfUlNTSV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9UUkFOU0FDVElPTl9TVEFSVF9Qb3MgKDIyVUwpICAgICAgICAgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfVFJBTlNBQ1RJT05fU1RBUlQgKEJpdCAyMikgICAgICAgICAgICovCisjZGVmaW5lIEJMRV9CTEVfQ05UTDJfUkVHX0JMRV9UUkFOU0FDVElPTl9TVEFSVF9Nc2sgKDB4ZmZjMDAwMDBVTCkgICAgICAvKiE8IEJMRSBCTEVfQ05UTDJfUkVHOiBCTEVfVFJBTlNBQ1RJT05fU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9FTV9CQVNFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBCTEVfQkxFX0VNX0JBU0VfUkVHX0JMRV9FTV9CQVNFXzE2XzEwX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgLyohPCBCTEUgQkxFX0VNX0JBU0VfUkVHOiBCTEVfRU1fQkFTRV8xNl8xMCAoQml0IDEwKSAgICAgICAgICAgICAqLworI2RlZmluZSBCTEVfQkxFX0VNX0JBU0VfUkVHX0JMRV9FTV9CQVNFXzE2XzEwX01zayAoMHgxZmMwMFVMKSAgICAgICAgICAgLyohPCBCTEUgQkxFX0VNX0JBU0VfUkVHOiBCTEVfRU1fQkFTRV8xNl8xMCAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ESUFHQ05UTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc0X1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc0X01zayAgICAgICAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc0X0VOX1BvcyAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNF9FTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc0X0VOX01zayAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc1X1BvcyAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNSAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc1X01zayAgICAgICAoMHgzZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNSAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc1X0VOX1BvcyAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNV9FTiAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc1X0VOX01zayAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc2X1BvcyAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNiAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc2X01zayAgICAgICAoMHgzZjAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNiAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc2X0VOX1BvcyAgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNl9FTiAoQml0IDIzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc2X0VOX01zayAgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc3X1BvcyAgICAgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNyAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc3X01zayAgICAgICAoMHgzZjAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHNyAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc3X0VOX1BvcyAgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHN19FTiAoQml0IDMxKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDJfUkVHX0RJQUc3X0VOX01zayAgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDJfUkVHOiBESUFHN19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQkxFX0JMRV9ESUFHQ05UTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcwX0JJVF9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMF9CSVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcwX0JJVF9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMF9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcwX0lOVl9Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMF9JTlYgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcwX0lOVl9Nc2sgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMF9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcxX0JJVF9Qb3MgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMV9CSVQgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcxX0JJVF9Nc2sgICAoMHg3MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMV9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcxX0lOVl9Qb3MgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMV9JTlYgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcxX0lOVl9Nc2sgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMV9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcyX0JJVF9Qb3MgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMl9CSVQgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcyX0JJVF9Nc2sgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMl9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcyX0lOVl9Qb3MgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMl9JTlYgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUcyX0lOVl9Nc2sgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHMl9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUczX0JJVF9Qb3MgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHM19CSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUczX0JJVF9Nc2sgICAoMHg3MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHM19CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUczX0lOVl9Qb3MgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHM19JTlYgKEJpdCAxNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUczX0lOVl9Nc2sgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHM19JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc0X0JJVF9Qb3MgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNF9CSVQgKEJpdCAxNikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc0X0JJVF9Nc2sgICAoMHg3MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNF9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc0X0lOVl9Qb3MgICAoMTlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNF9JTlYgKEJpdCAxOSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc0X0lOVl9Nc2sgICAoMHg4MDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNF9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc1X0JJVF9Qb3MgICAoMjBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNV9CSVQgKEJpdCAyMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc1X0JJVF9Nc2sgICAoMHg3MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNV9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc1X0lOVl9Qb3MgICAoMjNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNV9JTlYgKEJpdCAyMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc1X0lOVl9Nc2sgICAoMHg4MDAwMDBVTCkgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNV9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc2X0JJVF9Qb3MgICAoMjRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNl9CSVQgKEJpdCAyNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc2X0JJVF9Nc2sgICAoMHg3MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNl9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc2X0lOVl9Qb3MgICAoMjdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNl9JTlYgKEJpdCAyNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc2X0lOVl9Nc2sgICAoMHg4MDAwMDAwVUwpICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHNl9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc3X0JJVF9Qb3MgICAoMjhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHN19CSVQgKEJpdCAyOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc3X0JJVF9Nc2sgICAoMHg3MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHN19CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc3X0lOVl9Qb3MgICAoMzFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHN19JTlYgKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkxFX0JMRV9ESUFHQ05UTDNfUkVHX0RJQUc3X0lOVl9Nc2sgICAoMHg4MDAwMDAwMFVMKSAgICAgICAgICAgIC8qITwgQkxFIEJMRV9ESUFHQ05UTDNfUkVHOiBESUFHN19JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgIHN0cnVjdCAnQ0FDSEUnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHX0NBQ0hFX0ZMVVNIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDFfUkVHOiBDQUNIRV9GTFVTSCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHX0NBQ0hFX0ZMVVNIX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDFfUkVHOiBDQUNIRV9GTFVTSCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHX0NBQ0hFX1JFUzFfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDFfUkVHOiBDQUNIRV9SRVMxIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDFfUkVHX0NBQ0hFX1JFUzFfTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDFfUkVHOiBDQUNIRV9SRVMxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX0xOU0laRUNGR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTE5TSVpFQ0ZHX1JFR19DQUNIRV9MSU5FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTE5TSVpFQ0ZHX1JFRzogQ0FDSEVfTElORSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTE5TSVpFQ0ZHX1JFR19DQUNIRV9MSU5FX01zayAoMHgzVUwpICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTE5TSVpFQ0ZHX1JFRzogQ0FDSEVfTElORSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX0FTU09DQ0ZHX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQVNTT0NDRkdfUkVHX0NBQ0hFX0FTU09DX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQVNTT0NDRkdfUkVHOiBDQUNIRV9BU1NPQyAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQVNTT0NDRkdfUkVHX0NBQ0hFX0FTU09DX01zayAoMHgzVUwpICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQVNTT0NDRkdfUkVHOiBDQUNIRV9BU1NPQyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0NBQ0hFX0xFTl9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBDQUNIRV9MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0NBQ0hFX0xFTl9Nc2sgICAoMHgxZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBDQUNIRV9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4MWZmKSAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0NBQ0hFX1dFTl9Qb3MgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBDQUNIRV9XRU4gKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0NBQ0hFX1dFTl9Nc2sgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBDQUNIRV9XRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0NBQ0hFX0NHRU5fUG9zICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBDQUNIRV9DR0VOIChCaXQgMTApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0NBQ0hFX0NHRU5fTXNrICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBDQUNIRV9DR0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0VOQUJMRV9BTFNPX09UUF9DQUNIRURfUG9zICgxMVVMKSAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBFTkFCTEVfQUxTT19PVFBfQ0FDSEVEIChCaXQgMTEpICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0VOQUJMRV9BTFNPX09UUF9DQUNIRURfTXNrICgweDgwMFVMKSAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDJfUkVHOiBFTkFCTEVfQUxTT19PVFBfQ0FDSEVEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9DVFJMMl9SRUdfRU5BQkxFX0FMU09fUVNQSUZMQVNIX0NBQ0hFRF9Qb3MgKDEyVUwpICAgLyohPCBDQUNIRSBDQUNIRV9DVFJMMl9SRUc6IEVOQUJMRV9BTFNPX1FTUElGTEFTSF9DQUNIRUQgKEJpdCAxMikgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDJfUkVHX0VOQUJMRV9BTFNPX1FTUElGTEFTSF9DQUNIRURfTXNrICgweDEwMDBVTCkgLyohPCBDQUNIRSBDQUNIRV9DVFJMMl9SRUc6IEVOQUJMRV9BTFNPX1FTUElGTEFTSF9DQUNIRUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwzX1JFR19DQUNIRV9BU1NPQ0lBVElWSVRZX1JFU0VUX1ZBTFVFX1BvcyAoMFVMKSAvKiE8IENBQ0hFIENBQ0hFX0NUUkwzX1JFRzogQ0FDSEVfQVNTT0NJQVRJVklUWV9SRVNFVF9WQUxVRSAoQml0IDApICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX0NUUkwzX1JFR19DQUNIRV9BU1NPQ0lBVElWSVRZX1JFU0VUX1ZBTFVFX01zayAoMHgzVUwpIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9BU1NPQ0lBVElWSVRZX1JFU0VUX1ZBTFVFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9DVFJMM19SRUdfQ0FDSEVfTElORV9TSVpFX1JFU0VUX1ZBTFVFX1BvcyAoMlVMKSAgICAgLyohPCBDQUNIRSBDQUNIRV9DVFJMM19SRUc6IENBQ0hFX0xJTkVfU0laRV9SRVNFVF9WQUxVRSAoQml0IDIpICAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9DVFJMM19SRUdfQ0FDSEVfTElORV9TSVpFX1JFU0VUX1ZBTFVFX01zayAoMHhjVUwpICAgLyohPCBDQUNIRSBDQUNIRV9DVFJMM19SRUc6IENBQ0hFX0xJTkVfU0laRV9SRVNFVF9WQUxVRSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDNfUkVHX0NBQ0hFX1JBTV9TSVpFX1JFU0VUX1ZBTFVFX1BvcyAoNFVMKSAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9SQU1fU0laRV9SRVNFVF9WQUxVRSAoQml0IDQpICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDNfUkVHX0NBQ0hFX1JBTV9TSVpFX1JFU0VUX1ZBTFVFX01zayAoMHg3MFVMKSAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9SQU1fU0laRV9SRVNFVF9WQUxVRSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDNfUkVHX0NBQ0hFX0NPTlRST0xMRVJfUkVTRVRfUG9zICg3VUwpICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9DT05UUk9MTEVSX1JFU0VUIChCaXQgNykgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfQ1RSTDNfUkVHX0NBQ0hFX0NPTlRST0xMRVJfUkVTRVRfTXNrICgweDgwVUwpICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfQ1RSTDNfUkVHOiBDQUNIRV9DT05UUk9MTEVSX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0FDSEVfQ0FDSEVfTVJNX0hJVFNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9NUk1fSElUU19SRUdfTVJNX0hJVFNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDQUNIRSBDQUNIRV9NUk1fSElUU19SRUc6IE1STV9ISVRTIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9NUk1fSElUU19SRUdfTVJNX0hJVFNfTXNrICgweDdmZmZmVUwpICAgICAgICAgICAgICAgLyohPCBDQUNIRSBDQUNIRV9NUk1fSElUU19SRUc6IE1STV9ISVRTIChCaXRmaWVsZC1NYXNrOiAweDdmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDQUNIRV9DQUNIRV9NUk1fTUlTU0VTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9NUk1fTUlTU0VTX1JFR19NUk1fTUlTU0VTX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDQUNIRSBDQUNIRV9NUk1fTUlTU0VTX1JFRzogTVJNX01JU1NFUyAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBDQUNIRV9DQUNIRV9NUk1fTUlTU0VTX1JFR19NUk1fTUlTU0VTX01zayAoMHgzZmZmZlVMKSAgICAgICAgICAgLyohPCBDQUNIRSBDQUNIRV9NUk1fTUlTU0VTX1JFRzogTVJNX01JU1NFUyAoQml0ZmllbGQtTWFzazogMHgzZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0NUUkxfUkVHX01STV9TVEFSVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0NUUkxfUkVHOiBNUk1fU1RBUlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0NUUkxfUkVHX01STV9TVEFSVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0NUUkxfUkVHOiBNUk1fU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0NUUkxfUkVHX01STV9JUlFfTUFTS19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0NUUkxfUkVHOiBNUk1fSVJRX01BU0sgKEJpdCAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0NUUkxfUkVHX01STV9JUlFfTUFTS19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0NUUkxfUkVHOiBNUk1fSVJRX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fSVJRX1RJTlRfU1RBVFVTX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX0lSUV9USU5UX1NUQVRVUyAoQml0IDIpICAgICAgICovCisjZGVmaW5lIENBQ0hFX0NBQ0hFX01STV9DVFJMX1JFR19NUk1fSVJRX1RJTlRfU1RBVFVTX01zayAoMHg0VUwpICAgICAgICAvKiE8IENBQ0hFIENBQ0hFX01STV9DVFJMX1JFRzogTVJNX0lSUV9USU5UX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0NUUkxfUkVHX01STV9JUlFfVEhSRVNfU1RBVFVTX1BvcyAoM1VMKSAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0NUUkxfUkVHOiBNUk1fSVJRX1RIUkVTX1NUQVRVUyAoQml0IDMpICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX0NUUkxfUkVHX01STV9JUlFfVEhSRVNfU1RBVFVTX01zayAoMHg4VUwpICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX0NUUkxfUkVHOiBNUk1fSVJRX1RIUkVTX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX01STV9USU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX1RJTlRfUkVHX01STV9USU5UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX1RJTlRfUkVHOiBNUk1fVElOVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX1RJTlRfUkVHX01STV9USU5UX01zayAoMHgzZmZmZlVMKSAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX1RJTlRfUkVHOiBNUk1fVElOVCAoQml0ZmllbGQtTWFzazogMHgzZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENBQ0hFX0NBQ0hFX01STV9USFJFU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX1RIUkVTX1JFR19NUk1fVEhSRVNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX1RIUkVTX1JFRzogTVJNX1RIUkVTIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ0FDSEVfQ0FDSEVfTVJNX1RIUkVTX1JFR19NUk1fVEhSRVNfTXNrICgweDNmZmZmVUwpICAgICAgICAgICAgIC8qITwgQ0FDSEUgQ0FDSEVfTVJNX1RIUkVTX1JFRzogTVJNX1RIUkVTIChCaXRmaWVsZC1NYXNrOiAweDNmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0FDSEVfU1dEX1JFU0VUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDQUNIRV9TV0RfUkVTRVRfUkVHX1NXRF9IV19SRVNFVF9SRVFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDQUNIRSBTV0RfUkVTRVRfUkVHOiBTV0RfSFdfUkVTRVRfUkVRIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDQUNIRV9TV0RfUkVTRVRfUkVHX1NXRF9IV19SRVNFVF9SRVFfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgLyohPCBDQUNIRSBTV0RfUkVTRVRfUkVHOiBTV0RfSFdfUkVTRVRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgc3RydWN0ICdDSElQX1ZFUlNJT04nIFBvc2l0aW9uICYgTWFzayAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0hJUF9WRVJTSU9OX0NISVBfSUQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9JRDFfUkVHX0NISVBfSUQxX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9JRDFfUkVHOiBDSElQX0lEMSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9JRDFfUkVHX0NISVBfSUQxX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9JRDFfUkVHOiBDSElQX0lEMSAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0hJUF9WRVJTSU9OX0NISVBfSUQyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9JRDJfUkVHX0NISVBfSUQyX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9JRDJfUkVHOiBDSElQX0lEMiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9JRDJfUkVHX0NISVBfSUQyX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9JRDJfUkVHOiBDSElQX0lEMiAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0hJUF9WRVJTSU9OX0NISVBfSUQzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9JRDNfUkVHX0NISVBfSUQzX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9JRDNfUkVHOiBDSElQX0lEMyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9JRDNfUkVHX0NISVBfSUQzX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9JRDNfUkVHOiBDSElQX0lEMyAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0hJUF9WRVJTSU9OX0NISVBfU1dDX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9TV0NfUkVHX0NISVBfU1dDX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9TV0NfUkVHOiBDSElQX1NXQyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9TV0NfUkVHX0NISVBfU1dDX01zayAoMHhmVUwpICAgICAgICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9TV0NfUkVHOiBDSElQX1NXQyAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0hJUF9WRVJTSU9OX0NISVBfUkVWSVNJT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9SRVZJU0lPTl9SRUdfUkVWSVNJT05fSURfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9SRVZJU0lPTl9SRUc6IFJFVklTSU9OX0lEIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9SRVZJU0lPTl9SRUdfUkVWSVNJT05fSURfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9SRVZJU0lPTl9SRUc6IFJFVklTSU9OX0lEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX0NPTkZJRzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUcxX1JFR19DSElQX0NPTkZJRzFfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9DT05GSUcxX1JFRzogQ0hJUF9DT05GSUcxIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUcxX1JFR19DSElQX0NPTkZJRzFfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9DT05GSUcxX1JFRzogQ0hJUF9DT05GSUcxIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX0NPTkZJRzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUcyX1JFR19DSElQX0NPTkZJRzJfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9DT05GSUcyX1JFRzogQ0hJUF9DT05GSUcyIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUcyX1JFR19DSElQX0NPTkZJRzJfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9DT05GSUcyX1JFRzogQ0hJUF9DT05GSUcyIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENISVBfVkVSU0lPTl9DSElQX0NPTkZJRzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUczX1JFR19DSElQX0NPTkZJRzNfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9DT05GSUczX1JFRzogQ0hJUF9DT05GSUczIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBDSElQX1ZFUlNJT05fQ0hJUF9DT05GSUczX1JFR19DSElQX0NPTkZJRzNfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBDSElQX1ZFUlNJT04gQ0hJUF9DT05GSUczX1JFRzogQ0hJUF9DT05GSUczIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnQ09FWCcgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ09FWF9DT0VYX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfUFJHSU5HX0FSQklURVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFBSR0lOR19BUkJJVEVSIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfUFJHSU5HX0FSQklURVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFBSR0lOR19BUkJJVEVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfREVDSVNJT05fU1dfQUxMX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IERFQ0lTSU9OX1NXX0FMTCAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfREVDSVNJT05fU1dfQUxMX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IERFQ0lTSU9OX1NXX0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfVFhSWF9NT05fRlRERl9BTExfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFRYUlhfTU9OX0ZUREZfQUxMIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfVFhSWF9NT05fRlRERl9BTExfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFRYUlhfTU9OX0ZUREZfQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfVFhSWF9NT05fQkxFX0FMTF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFRYUlhfTU9OX0JMRV9BTEwgKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfVFhSWF9NT05fQkxFX0FMTF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFRYUlhfTU9OX0JMRV9BTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU01BUlRfQUNUX0lNUExfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNNQVJUX0FDVF9JTVBMIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU01BUlRfQUNUX0lNUExfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNNQVJUX0FDVF9JTVBMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0NPRVhfRElBR19Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9DT0VYX0RJQUcgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0NPRVhfRElBR19Nc2sgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9DT0VYX0RJQUcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0ZUREZfQ0NBX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9GVERGX0NDQSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0ZUREZfQ0NBX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9GVERGX0NDQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0ZUREZfUFRJX1BvcyAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9GVERGX1BUSSAoQml0IDgpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0ZUREZfUFRJX01zayAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9GVERGX1BUSSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0JMRV9QVElfUG9zICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9CTEVfUFRJIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0JMRV9QVElfTXNrICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9CTEVfUFRJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0JMRV9XTEFOX1RYX1JYX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9CTEVfV0xBTl9UWF9SWCAoQml0IDEwKSAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfQ1RSTF9SRUdfU0VMX0JMRV9XTEFOX1RYX1JYX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfQ1RSTF9SRUc6IFNFTF9CTEVfV0xBTl9UWF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9CTEVfUkFESU9fQlVTWV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQkxFX1JBRElPX0JVU1kgKEJpdCAxMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0NUUkxfUkVHX1NFTF9CTEVfUkFESU9fQlVTWV9Nc2sgKDB4MTgwMFVMKSAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0NUUkxfUkVHOiBTRUxfQkxFX1JBRElPX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19JR05PUkVfRVhUX1BvcyAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogSUdOT1JFX0VYVCAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19JR05PUkVfRVhUX01zayAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogSUdOT1JFX0VYVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19JR05PUkVfRlRERl9Qb3MgICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogSUdOT1JFX0ZUREYgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19JR05PUkVfRlRERl9Nc2sgICAgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogSUdOT1JFX0ZUREYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19JR05PUkVfQkxFX1BvcyAgICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogSUdOT1JFX0JMRSAoQml0IDE1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9DVFJMX1JFR19JR05PUkVfQkxFX01zayAgICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9DVFJMX1JFRzogSUdOT1JFX0JMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX0RFQ0lTSU9OX1BUUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9ERUNJU0lPTl9QVFIgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX0RFQ0lTSU9OX1BUUl9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9ERUNJU0lPTl9QVFIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX0RFQ0lTSU9OX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9ERUNJU0lPTiAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX0RFQ0lTSU9OX01zayAgKDB4NjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9ERUNJU0lPTiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX0NMT1NJTkdfUG9zICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9DTE9TSU5HIChCaXQgNykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX0NMT1NJTkdfTXNrICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9DTE9TSU5HIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19TTUFSVF9BQ1RfUG9zICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogU01BUlRfQUNUIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19TTUFSVF9BQ1RfTXNrICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogU01BUlRfQUNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19TTUFSVF9QUklfUG9zICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogU01BUlRfUFJJIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19TTUFSVF9QUklfTXNrICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogU01BUlRfUFJJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19FWFRfQUNUMF9Qb3MgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogRVhUX0FDVDAgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19FWFRfQUNUMF9Nc2sgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogRVhUX0FDVDAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19FWFRfQUNUMV9Qb3MgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogRVhUX0FDVDEgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19FWFRfQUNUMV9Nc2sgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogRVhUX0FDVDEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX1JBRElPX0JVU1lfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9SQURJT19CVVNZIChCaXQgMTIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19DT0VYX1JBRElPX0JVU1lfTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogQ09FWF9SQURJT19CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19JR05PUkVfRVhUX1NUQVRfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogSUdOT1JFX0VYVF9TVEFUIChCaXQgMTMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19JR05PUkVfRVhUX1NUQVRfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogSUdOT1JFX0VYVF9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19JR05PUkVfRlRERl9TVEFUX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogSUdOT1JFX0ZUREZfU1RBVCAoQml0IDE0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19JR05PUkVfRlRERl9TVEFUX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogSUdOT1JFX0ZUREZfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19JR05PUkVfQkxFX1NUQVRfUG9zICgxNVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogSUdOT1JFX0JMRV9TVEFUIChCaXQgMTUpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUX1JFR19JR05PUkVfQkxFX1NUQVRfTXNrICgweDgwMDBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUX1JFRzogSUdOT1JFX0JMRV9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfU1RBVDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9ERUNJU0lPTl9XSVRIX0NMT1NJTkdfUG9zICgwVUwpICAgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfREVDSVNJT05fV0lUSF9DTE9TSU5HIChCaXQgMCkgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9TVEFUMl9SRUdfQ09FWF9ERUNJU0lPTl9XSVRIX0NMT1NJTkdfTXNrICgweDdVTCkgICAgICAvKiE8IENPRVggQ09FWF9TVEFUMl9SRUc6IENPRVhfREVDSVNJT05fV0lUSF9DTE9TSU5HIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9BQ1RJVkVfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfQUNUSVZFIChCaXQgMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9BQ1RJVkVfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfQUNUSVZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9SWF9FTl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfUlhfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9SWF9FTl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9UWF9FTl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfVFhfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9UWF9FTl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9QVElfSU5UX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfUFRJX0lOVCAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfU1RBVDJfUkVHX0NPRVhfRlRERl9QVElfSU5UX01zayAoMHgxYzBVTCkgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfU1RBVDJfUkVHOiBDT0VYX0ZUREZfUFRJX0lOVCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9BQ1RJVkVfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfQUNUSVZFIChCaXQgOSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9BQ1RJVkVfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfQUNUSVZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9SWF9FTl9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfUlhfRU4gKEJpdCAxMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9SWF9FTl9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9UWF9FTl9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfVFhfRU4gKEJpdCAxMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9UWF9FTl9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9QVElfSU5UX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfUFRJX0lOVCAoQml0IDEyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0JMRV9QVElfSU5UX01zayAoMHg3MDAwVUwpICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9CTEVfUFRJX0lOVCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0VYVF9BQ1RfUG9zICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9FWFRfQUNUIChCaXQgMTUpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1NUQVQyX1JFR19DT0VYX0VYVF9BQ1RfTXNrICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1NUQVQyX1JFRzogQ09FWF9FWFRfQUNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfSU5UX01BU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9NQVNLX1JFR19JUlFfVFhSWF9NT05fUG9zICg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9NQVNLX1JFRzogSVJRX1RYUlhfTU9OIChCaXQgOCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9NQVNLX1JFR19JUlFfVFhSWF9NT05fTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9NQVNLX1JFRzogSVJRX1RYUlhfTU9OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9NQVNLX1JFR19JUlFfREVDSVNJT05fU1dfUG9zICg5VUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9NQVNLX1JFRzogSVJRX0RFQ0lTSU9OX1NXIChCaXQgOSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0lOVF9NQVNLX1JFR19JUlFfREVDSVNJT05fU1dfTXNrICgweDIwMFVMKSAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0lOVF9NQVNLX1JFRzogSVJRX0RFQ0lTSU9OX1NXIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9JTlRfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX1BUUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9QVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX1BUUl9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9QVFIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX1RYX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9UWCAoQml0IDUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX1RYX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX1BBU1NFRF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9QQVNTRUQgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBDT0VYX0NPRVhfSU5UX1NUQVRfUkVHX1RYUlhfTU9OX1BBU1NFRF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBDT0VYIENPRVhfSU5UX1NUQVRfUkVHOiBUWFJYX01PTl9QQVNTRUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfU1RBVF9SRUdfVFhSWF9NT05fT1ZXUl9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfU1RBVF9SRUc6IFRYUlhfTU9OX09WV1IgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfU1RBVF9SRUdfVFhSWF9NT05fT1ZXUl9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfU1RBVF9SRUc6IFRYUlhfTU9OX09WV1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfU1RBVF9SRUdfSVJRX1RYUlhfTU9OX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfU1RBVF9SRUc6IElSUV9UWFJYX01PTiAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfU1RBVF9SRUdfSVJRX1RYUlhfTU9OX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfU1RBVF9SRUc6IElSUV9UWFJYX01PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfU1RBVF9SRUdfSVJRX0RFQ0lTSU9OX1NXX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfU1RBVF9SRUc6IElSUV9ERUNJU0lPTl9TVyAoQml0IDkpICAgICAgICAgICAgICovCisjZGVmaW5lIENPRVhfQ09FWF9JTlRfU1RBVF9SRUdfSVJRX0RFQ0lTSU9OX1NXX01zayAoMHgyMDBVTCkgICAgICAgICAgICAvKiE8IENPRVggQ09FWF9JTlRfU1RBVF9SRUc6IElSUV9ERUNJU0lPTl9TVyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ09FWF9DT0VYX0JMRV9QVElfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0JMRV9QVElfUkVHX0NPRVhfQkxFX1BUSV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0JMRV9QVElfUkVHOiBDT0VYX0JMRV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0JMRV9QVElfUkVHX0NPRVhfQkxFX1BUSV9Nc2sgKDB4N1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0JMRV9QVElfUkVHOiBDT0VYX0JMRV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDT0VYX0NPRVhfRlRERl9QVElfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0ZUREZfUFRJX1JFR19DT0VYX0ZUREZfUFRJX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0ZUREZfUFRJX1JFRzogQ09FWF9GVERGX1BUSSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX0ZUREZfUFRJX1JFR19DT0VYX0ZUREZfUFRJX01zayAoMHg3VUwpICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX0ZUREZfUFRJX1JFRzogQ09FWF9GVERGX1BUSSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTFfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTFfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTFfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTFfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTFfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTFfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTFfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTFfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTJfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTJfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTJfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTJfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTJfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTJfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTJfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTJfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTNfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTNfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTNfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTNfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTNfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTNfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTNfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTNfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkk0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTRfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTRfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTRfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTRfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTRfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTRfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTRfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTRfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkk1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTVfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTVfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTVfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTVfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTVfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTVfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTVfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTVfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkk2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTZfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTZfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTZfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTZfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTZfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTZfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTZfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTZfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkk3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTdfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTdfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTdfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTdfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTdfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTdfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTdfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTdfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkk4X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSThfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSThfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSThfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSThfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSThfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSThfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSThfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSThfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkk5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTlfUkVHX0NPRVhfUFJJX1BUSV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTlfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTlfUkVHX0NPRVhfUFJJX1BUSV9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTlfUkVHOiBDT0VYX1BSSV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTlfUkVHX0NPRVhfUFJJX01BQ19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTlfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTlfUkVHX0NPRVhfUFJJX01BQ19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTlfUkVHOiBDT0VYX1BSSV9NQUMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEwX1JFR19DT0VYX1BSSV9QVElfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEwX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEwX1JFR19DT0VYX1BSSV9QVElfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEwX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEwX1JFR19DT0VYX1BSSV9NQUNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEwX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEwX1JFR19DT0VYX1BSSV9NQUNfTXNrICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEwX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTExX1JFR19DT0VYX1BSSV9QVElfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTExX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTExX1JFR19DT0VYX1BSSV9QVElfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTExX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTExX1JFR19DT0VYX1BSSV9NQUNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTExX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTExX1JFR19DT0VYX1BSSV9NQUNfTXNrICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTExX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEyX1JFR19DT0VYX1BSSV9QVElfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEyX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEyX1JFR19DT0VYX1BSSV9QVElfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEyX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEyX1JFR19DT0VYX1BSSV9NQUNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEyX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEyX1JFR19DT0VYX1BSSV9NQUNfTXNrICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEyX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEzX1JFR19DT0VYX1BSSV9QVElfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEzX1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEzX1JFR19DT0VYX1BSSV9QVElfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEzX1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEzX1JFR19DT0VYX1BSSV9NQUNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEzX1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTEzX1JFR19DT0VYX1BSSV9NQUNfTXNrICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTEzX1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE0X1JFR19DT0VYX1BSSV9QVElfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE0X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE0X1JFR19DT0VYX1BSSV9QVElfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE0X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE0X1JFR19DT0VYX1BSSV9NQUNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE0X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE0X1JFR19DT0VYX1BSSV9NQUNfTXNrICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE0X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPRVhfQ09FWF9QUkkxNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE1X1JFR19DT0VYX1BSSV9QVElfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE1X1JFRzogQ09FWF9QUklfUFRJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE1X1JFR19DT0VYX1BSSV9QVElfTXNrICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE1X1JFRzogQ09FWF9QUklfUFRJIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE1X1JFR19DT0VYX1BSSV9NQUNfUG9zICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE1X1JFRzogQ09FWF9QUklfTUFDIChCaXQgMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09FWF9DT0VYX1BSSTE1X1JFR19DT0VYX1BSSV9NQUNfTXNrICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ09FWCBDT0VYX1BSSTE1X1JFRzogQ09FWF9QUklfTUFDIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgc3RydWN0ICdDUkdfUEVSJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfQ0xLX1BFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19VQVJUX0VOQUJMRV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogVUFSVF9FTkFCTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19VQVJUX0VOQUJMRV9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogVUFSVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19TUElfRU5BQkxFX1BvcyAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogU1BJX0VOQUJMRSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19TUElfRU5BQkxFX01zayAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogU1BJX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19JMkNfRU5BQkxFX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogSTJDX0VOQUJMRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19JMkNfRU5BQkxFX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogSTJDX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19RVUFEX0VOQUJMRV9Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogUVVBRF9FTkFCTEUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19RVUFEX0VOQUJMRV9Nc2sgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogUVVBRF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19JUl9DTEtfRU5BQkxFX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogSVJfQ0xLX0VOQUJMRSAoQml0IDQpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19JUl9DTEtfRU5BQkxFX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogSVJfQ0xLX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19LQlNDQU5fRU5BQkxFX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogS0JTQ0FOX0VOQUJMRSAoQml0IDUpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19LQlNDQU5fRU5BQkxFX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogS0JTQ0FOX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19TUElfQ0xLX1NFTF9Qb3MgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogU1BJX0NMS19TRUwgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19TUElfQ0xLX1NFTF9Nc2sgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogU1BJX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19JMkNfQ0xLX1NFTF9Qb3MgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogSTJDX0NMS19TRUwgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19JMkNfQ0xLX1NFTF9Nc2sgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogSTJDX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19LQlNDQU5fQ0xLX1NFTF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogS0JTQ0FOX0NMS19TRUwgKEJpdCAxMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19LQlNDQU5fQ0xLX1NFTF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogS0JTQ0FOX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19BRENfQ0xLX1NFTF9Qb3MgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogQURDX0NMS19TRUwgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9DTEtfUEVSX1JFR19BRENfQ0xLX1NFTF9Nc2sgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBDTEtfUEVSX1JFRzogQURDX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfUENNX0RJVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRElWX1JFR19QQ01fRElWX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRElWX1JFRzogUENNX0RJViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRElWX1JFR19QQ01fRElWX01zayAgICAgICAoMHhmZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRElWX1JFRzogUENNX0RJViAoQml0ZmllbGQtTWFzazogMHhmZmYpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRElWX1JFR19DTEtfUENNX0VOX1BvcyAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRElWX1JFRzogQ0xLX1BDTV9FTiAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRElWX1JFR19DTEtfUENNX0VOX01zayAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRElWX1JFRzogQ0xLX1BDTV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRElWX1JFR19QQ01fU1JDX1NFTF9Qb3MgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRElWX1JFRzogUENNX1NSQ19TRUwgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRElWX1JFR19QQ01fU1JDX1NFTF9Nc2sgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRElWX1JFRzogUENNX1NSQ19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1BFUl9QQ01fRkRJVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRkRJVl9SRUdfUENNX0ZESVZfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRkRJVl9SRUc6IFBDTV9GRElWIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QQ01fRkRJVl9SRUdfUENNX0ZESVZfTXNrICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQQ01fRkRJVl9SRUc6IFBDTV9GRElWIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfUERNX0RJVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9QRE1fRElWX1JFR19QRE1fRElWX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQRE1fRElWX1JFRzogUERNX0RJViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QRE1fRElWX1JFR19QRE1fRElWX01zayAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQRE1fRElWX1JFRzogUERNX0RJViAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QRE1fRElWX1JFR19DTEtfUERNX0VOX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQRE1fRElWX1JFRzogQ0xLX1BETV9FTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QRE1fRElWX1JFR19DTEtfUERNX0VOX01zayAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQRE1fRElWX1JFRzogQ0xLX1BETV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QRE1fRElWX1JFR19QRE1fTUFTVEVSX01PREVfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQRE1fRElWX1JFRzogUERNX01BU1RFUl9NT0RFIChCaXQgOSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9QRE1fRElWX1JFR19QRE1fTUFTVEVSX01PREVfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBQRE1fRElWX1JFRzogUERNX01BU1RFUl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfU1JDX0RJVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9TUkNfRElWX1JFR19TUkNfRElWX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBTUkNfRElWX1JFRzogU1JDX0RJViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9TUkNfRElWX1JFR19TUkNfRElWX01zayAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBTUkNfRElWX1JFRzogU1JDX0RJViAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9TUkNfRElWX1JFR19DTEtfU1JDX0VOX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBTUkNfRElWX1JFRzogQ0xLX1NSQ19FTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9TUkNfRElWX1JFR19DTEtfU1JDX0VOX01zayAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBTUkNfRElWX1JFRzogQ0xLX1NSQ19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1BFUl9FSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9FSF9SRUdfRUhfRU5fUG9zICAgICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBFSF9SRUc6IEVIX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9FSF9SRUdfRUhfRU5fTXNrICAgICAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBFSF9SRUc6IEVIX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19QRVJfVVNCUEFEX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1BFUl9VU0JQQURfUkVHX1VTQlBBRF9FTl9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBVU0JQQURfUkVHOiBVU0JQQURfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9VU0JQQURfUkVHX1VTQlBBRF9FTl9Nc2sgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBVU0JQQURfUkVHOiBVU0JQQURfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9VU0JQQURfUkVHX1VTQlBIWV9GT1JDRV9TVzFfT0ZGX1BvcyAoMVVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBVU0JQQURfUkVHOiBVU0JQSFlfRk9SQ0VfU1cxX09GRiAoQml0IDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9VU0JQQURfUkVHX1VTQlBIWV9GT1JDRV9TVzFfT0ZGX01zayAoMHgyVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBVU0JQQURfUkVHOiBVU0JQSFlfRk9SQ0VfU1cxX09GRiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1BFUl9VU0JQQURfUkVHX1VTQlBIWV9GT1JDRV9TVzJfT05fUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBVU0JQQURfUkVHOiBVU0JQSFlfRk9SQ0VfU1cyX09OIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1BFUl9VU0JQQURfUkVHX1VTQlBIWV9GT1JDRV9TVzJfT05fTXNrICgweDRVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1BFUiBVU0JQQURfUkVHOiBVU0JQSFlfRk9SQ0VfU1cyX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICBzdHJ1Y3QgJ0NSR19UT1AnIFBvc2l0aW9uICYgTWFzayAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0NMS19BTUJBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19IQ0xLX0RJVl9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogSENMS19ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19IQ0xLX0RJVl9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogSENMS19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19QQ0xLX0RJVl9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogUENMS19ESVYgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19QQ0xLX0RJVl9Nc2sgICAgICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogUENMS19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19BRVNfQ0xLX0VOQUJMRV9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogQUVTX0NMS19FTkFCTEUgKEJpdCA2KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19BRVNfQ0xLX0VOQUJMRV9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogQUVTX0NMS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19FQ0NfQ0xLX0VOQUJMRV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogRUNDX0NMS19FTkFCTEUgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19FQ0NfQ0xLX0VOQUJMRV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogRUNDX0NMS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19UUk5HX0NMS19FTkFCTEVfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogVFJOR19DTEtfRU5BQkxFIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19UUk5HX0NMS19FTkFCTEVfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogVFJOR19DTEtfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19PVFBfRU5BQkxFX1BvcyAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogT1RQX0VOQUJMRSAoQml0IDkpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19PVFBfRU5BQkxFX01zayAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogT1RQX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19RU1BJX0RJVl9Qb3MgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogUVNQSV9ESVYgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19RU1BJX0RJVl9Nc2sgICAgICgweGMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogUVNQSV9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19RU1BJX0VOQUJMRV9Qb3MgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogUVNQSV9FTkFCTEUgKEJpdCAxMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19BTUJBX1JFR19RU1BJX0VOQUJMRV9Nc2sgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19BTUJBX1JFRzogUVNQSV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfRlJFUV9UUklNX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19GUkVRX1RSSU1fUkVHX0ZJTkVfQURKX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19GUkVRX1RSSU1fUkVHOiBGSU5FX0FESiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19GUkVRX1RSSU1fUkVHX0ZJTkVfQURKX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19GUkVRX1RSSU1fUkVHOiBGSU5FX0FESiAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19GUkVRX1RSSU1fUkVHX0NPQVJTRV9BREpfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19GUkVRX1RSSU1fUkVHOiBDT0FSU0VfQURKIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19GUkVRX1RSSU1fUkVHX0NPQVJTRV9BREpfTXNrICgweDcwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19GUkVRX1RSSU1fUkVHOiBDT0FSU0VfQURKIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0NMS19SQURJT19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfUkZDVV9ESVZfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IFJGQ1VfRElWIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfUkZDVV9ESVZfTXNrICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IFJGQ1VfRElWIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfUkZDVV9FTkFCTEVfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IFJGQ1VfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfUkZDVV9FTkFCTEVfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IFJGQ1VfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfQkxFX0RJVl9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEJMRV9ESVYgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfQkxFX0RJVl9Nc2sgICAgICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEJMRV9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfQkxFX0xQX1JFU0VUX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEJMRV9MUF9SRVNFVCAoQml0IDYpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfQkxFX0xQX1JFU0VUX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEJMRV9MUF9SRVNFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfQkxFX0VOQUJMRV9Qb3MgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEJMRV9FTkFCTEUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfQkxFX0VOQUJMRV9Nc2sgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEJMRV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfRlRERl9NQUNfRElWX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEZUREZfTUFDX0RJViAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfRlRERl9NQUNfRElWX01zayAoMHgzMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEZUREZfTUFDX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfRlRERl9NQUNfRU5BQkxFX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEZUREZfTUFDX0VOQUJMRSAoQml0IDExKSAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19SQURJT19SRUdfRlRERl9NQUNfRU5BQkxFX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19SQURJT19SRUc6IEZUREZfTUFDX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfU1lTX0NMS19TRUxfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFNZU19DTEtfU0VMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfU1lTX0NMS19TRUxfTXNrICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFNZU19DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfWFRBTDE2TV9ESVNBQkxFX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFhUQUwxNk1fRElTQUJMRSAoQml0IDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfWFRBTDE2TV9ESVNBQkxFX01zayAoMHg0VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFhUQUwxNk1fRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfWFRBTDMyTV9NT0RFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFhUQUwzMk1fTU9ERSAoQml0IDMpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfWFRBTDMyTV9NT0RFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFhUQUwzMk1fTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfVVNCX0NMS19TUkNfUG9zICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFVTQl9DTEtfU1JDIChCaXQgNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfVVNCX0NMS19TUkNfTXNrICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFVTQl9DTEtfU1JDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUExMX0RJVjJfUG9zICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFBMTF9ESVYyIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUExMX0RJVjJfTXNrICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFBMTF9ESVYyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfRElWTl9YVEFMMzJNX01PREVfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IERJVk5fWFRBTDMyTV9NT0RFIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfRElWTl9YVEFMMzJNX01PREVfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IERJVk5fWFRBTDMyTV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19ESVZOX1NZTkNfTEVWRUxfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogRElWTl9TWU5DX0xFVkVMIChCaXQgNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19ESVZOX1NZTkNfTEVWRUxfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogRElWTl9TWU5DX0xFVkVMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19DTEszMktfU09VUkNFX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogQ0xLMzJLX1NPVVJDRSAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19DTEszMktfU09VUkNFX01zayAoMHgzMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogQ0xLMzJLX1NPVVJDRSAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19ESVZOX1NISUZUX1NFTF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogRElWTl9TSElGVF9TRUwgKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19ESVZOX1NISUZUX1NFTF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogRElWTl9TSElGVF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19SVU5OSU5HX0FUXzMyS19Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogUlVOTklOR19BVF8zMksgKEJpdCAxMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19SVU5OSU5HX0FUXzMyS19Nc2sgKDB4MTAwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogUlVOTklOR19BVF8zMksgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19SVU5OSU5HX0FUX1JDMTZNX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogUlVOTklOR19BVF9SQzE2TSAoQml0IDEzKSAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19DVFJMX1JFR19SVU5OSU5HX0FUX1JDMTZNX01zayAoMHgyMDAwVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19DVFJMX1JFRzogUlVOTklOR19BVF9SQzE2TSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF9YVEFMMTZNX1BvcyAoMTRVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfWFRBTDE2TSAoQml0IDE0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF9YVEFMMTZNX01zayAoMHg0MDAwVUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfWFRBTDE2TSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF9QTEw5Nk1fUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfUExMOTZNIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfQ1RSTF9SRUdfUlVOTklOR19BVF9QTEw5Nk1fTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfQ1RSTF9SRUc6IFJVTk5JTkdfQVRfUExMOTZNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfVE1SX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfRElWX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIwX0RJViAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfRElWX01zayAgICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIwX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfRU5BQkxFX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIwX0VOQUJMRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfRU5BQkxFX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIwX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfQ0xLX1NFTF9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIwX0NMS19TRUwgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfQ0xLX1NFTF9Nc2sgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIwX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjFfRElWX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIxX0RJViAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjFfRElWX01zayAgICAgICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIxX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjFfRU5BQkxFX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIxX0VOQUJMRSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjFfRU5BQkxFX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIxX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjFfQ0xLX1NFTF9Qb3MgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIxX0NMS19TRUwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjFfQ0xLX1NFTF9Nc2sgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIxX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjJfRElWX1BvcyAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIyX0RJViAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjJfRElWX01zayAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIyX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjJfRU5BQkxFX1BvcyAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIyX0VOQUJMRSAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjJfRU5BQkxFX01zayAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIyX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjJfQ0xLX1NFTF9Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIyX0NMS19TRUwgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjJfQ0xLX1NFTF9Nc2sgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBUTVIyX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX0JSRUFUSF9FTkFCTEVfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBCUkVBVEhfRU5BQkxFIChCaXQgMTIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX0JSRUFUSF9FTkFCTEVfTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBCUkVBVEhfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1dBS0VVUENUX0VOQUJMRV9Qb3MgKDEzVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBXQUtFVVBDVF9FTkFCTEUgKEJpdCAxMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1dBS0VVUENUX0VOQUJMRV9Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBXQUtFVVBDVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1AwNl9UTVIxX1BXTV9NT0RFX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBQMDZfVE1SMV9QV01fTU9ERSAoQml0IDE0KSAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS19UTVJfUkVHX1AwNl9UTVIxX1BXTV9NT0RFX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS19UTVJfUkVHOiBQMDZfVE1SMV9QV01fTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9QTVVfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUEVSSVBIX1NMRUVQX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFBFUklQSF9TTEVFUCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUEVSSVBIX1NMRUVQX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFBFUklQSF9TTEVFUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkFESU9fU0xFRVBfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJBRElPX1NMRUVQIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkFESU9fU0xFRVBfTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJBRElPX1NMRUVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfQkxFX1NMRUVQX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IEJMRV9TTEVFUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfQkxFX1NMRUVQX01zayAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IEJMRV9TTEVFUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfRlRERl9TTEVFUF9Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IEZUREZfU0xFRVAgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfRlRERl9TTEVFUF9Nc2sgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IEZUREZfU0xFRVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfTUFQX0JBTkRHQVBfRU5fUG9zICg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IE1BUF9CQU5ER0FQX0VOIChCaXQgNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfTUFQX0JBTkRHQVBfRU5fTXNrICgweDEwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IE1BUF9CQU5ER0FQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVTRVRfT05fV0FLRVVQX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFU0VUX09OX1dBS0VVUCAoQml0IDUpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVTRVRfT05fV0FLRVVQX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFU0VUX09OX1dBS0VVUCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfT1RQX0NPUFlfRElWX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IE9UUF9DT1BZX0RJViAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfT1RQX0NPUFlfRElWX01zayAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IE9UUF9DT1BZX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVUQUlOX1JBTV9Qb3MgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFVEFJTl9SQU0gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVUQUlOX1JBTV9Nc2sgICAoMHgxZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFVEFJTl9SQU0gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfRU5BQkxFX0NMS0xFU1NfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IEVOQUJMRV9DTEtMRVNTIChCaXQgMTMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfRU5BQkxFX0NMS0xFU1NfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IEVOQUJMRV9DTEtMRVNTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVUQUlOX0NBQ0hFX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFVEFJTl9DQUNIRSAoQml0IDE0KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVUQUlOX0NBQ0hFX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFVEFJTl9DQUNIRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVUQUlOX0VDQ1JBTV9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFVEFJTl9FQ0NSQU0gKEJpdCAxNSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QTVVfQ1RSTF9SRUdfUkVUQUlOX0VDQ1JBTV9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQTVVfQ1RSTF9SRUc6IFJFVEFJTl9FQ0NSQU0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9TWVNfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUkVNQVBfQURSMF9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFJFTUFQX0FEUjAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUkVNQVBfQURSMF9Nc2sgICAoMHg3VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFJFTUFQX0FEUjAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUkVNQVBfUkFNU19Qb3MgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFJFTUFQX1JBTVMgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUkVNQVBfUkFNU19Nc2sgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFJFTUFQX1JBTVMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUEFEX0xBVENIX0VOX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFBBRF9MQVRDSF9FTiAoQml0IDUpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUEFEX0xBVENIX0VOX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFBBRF9MQVRDSF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfT1RQQ19SRVNFVF9SRVFfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IE9UUENfUkVTRVRfUkVRIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfT1RQQ19SRVNFVF9SRVFfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IE9UUENfUkVTRVRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfREVCVUdHRVJfRU5BQkxFX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IERFQlVHR0VSX0VOQUJMRSAoQml0IDcpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfREVCVUdHRVJfRU5BQkxFX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IERFQlVHR0VSX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfRFJBX09GRl9Qb3MgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IERSQV9PRkYgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfRFJBX09GRl9Nc2sgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IERSQV9PRkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfVElNRU9VVF9ESVNBQkxFX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFRJTUVPVVRfRElTQUJMRSAoQml0IDkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfVElNRU9VVF9ESVNBQkxFX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFRJTUVPVVRfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfQ0FDSEVSQU1fTVVYX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IENBQ0hFUkFNX01VWCAoQml0IDEwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfQ0FDSEVSQU1fTVVYX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IENBQ0hFUkFNX01VWCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfREVWX1BIQVNFX1BvcyAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IERFVl9QSEFTRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfREVWX1BIQVNFX01zayAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IERFVl9QSEFTRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUVNQSV9JTklUX1BvcyAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFFTUElfSU5JVCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUVNQSV9JTklUX01zayAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFFTUElfSU5JVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfT1RQX0NPUFlfUG9zICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IE9UUF9DT1BZIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfT1RQX0NPUFlfTXNrICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IE9UUF9DT1BZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUkVNQVBfSU5UVkVDVF9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFJFTUFQX0lOVFZFQ1QgKEJpdCAxNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfUkVNQVBfSU5UVkVDVF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFJFTUFQX0lOVFZFQ1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfU1dfUkVTRVRfUG9zICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFNXX1JFU0VUIChCaXQgMTUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfQ1RSTF9SRUdfU1dfUkVTRVRfTXNrICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfQ1RSTF9SRUc6IFNXX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9TWVNfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUkFEX0lTX0RPV05fUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFJBRF9JU19ET1dOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUkFEX0lTX0RPV05fTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFJBRF9JU19ET1dOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUkFEX0lTX1VQX1BvcyAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFJBRF9JU19VUCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUkFEX0lTX1VQX01zayAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFJBRF9JU19VUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUEVSX0lTX0RPV05fUG9zICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFBFUl9JU19ET1dOIChCaXQgMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUEVSX0lTX0RPV05fTXNrICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFBFUl9JU19ET1dOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUEVSX0lTX1VQX1BvcyAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFBFUl9JU19VUCAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfUEVSX0lTX1VQX01zayAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFBFUl9JU19VUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfWFRBTDE2X1NXMl9Qb3MgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFhUQUwxNl9TVzIgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfWFRBTDE2X1NXMl9Nc2sgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFhUQUwxNl9TVzIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfREJHX0lTX0FDVElWRV9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IERCR19JU19BQ1RJVkUgKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfREJHX0lTX0FDVElWRV9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IERCR19JU19BQ1RJVkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfWFRBTDE2X1RSSU1fUkVBRFlfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFhUQUwxNl9UUklNX1JFQURZIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfWFRBTDE2X1RSSU1fUkVBRFlfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IFhUQUwxNl9UUklNX1JFQURZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NZU19TVEFUX1JFR19YVEFMMTZfU0VUVExFX1JFQURZX1BvcyAoN1VMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNZU19TVEFUX1JFRzogWFRBTDE2X1NFVFRMRV9SRUFEWSAoQml0IDcpICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NZU19TVEFUX1JFR19YVEFMMTZfU0VUVExFX1JFQURZX01zayAoMHg4MFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIFNZU19TVEFUX1JFRzogWFRBTDE2X1NFVFRMRV9SRUFEWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfQkxFX0lTX0RPV05fUG9zICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEJMRV9JU19ET1dOIChCaXQgOCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfQkxFX0lTX0RPV05fTXNrICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEJMRV9JU19ET1dOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfQkxFX0lTX1VQX1BvcyAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEJMRV9JU19VUCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfQkxFX0lTX1VQX01zayAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEJMRV9JU19VUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfRlRERl9JU19ET1dOX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEZUREZfSVNfRE9XTiAoQml0IDEwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfRlRERl9JU19ET1dOX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEZUREZfSVNfRE9XTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfRlRERl9JU19VUF9Qb3MgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEZUREZfSVNfVVAgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TWVNfU1RBVF9SRUdfRlRERl9JU19VUF9Nc2sgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTWVNfU1RBVF9SRUc6IEZUREZfSVNfVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9UUklNX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9UUklNX0NUUkxfUkVHX1hUQUxfQ09VTlRfTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBUUklNX0NUUkxfUkVHOiBYVEFMX0NPVU5UX04gKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9UUklNX0NUUkxfUkVHX1hUQUxfQ09VTlRfTl9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBUUklNX0NUUkxfUkVHOiBYVEFMX0NPVU5UX04gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9UUklNX0NUUkxfUkVHX1hUQUxfVFJJTV9TRUxFQ1RfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBUUklNX0NUUkxfUkVHOiBYVEFMX1RSSU1fU0VMRUNUIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9UUklNX0NUUkxfUkVHX1hUQUxfVFJJTV9TRUxFQ1RfTXNrICgweGMwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBUUklNX0NUUkxfUkVHOiBYVEFMX1RSSU1fU0VMRUNUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBDUkdfVE9QX1RSSU1fQ1RSTF9SRUdfWFRBTF9TRVRUTEVfTl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFRSSU1fQ1RSTF9SRUc6IFhUQUxfU0VUVExFX04gKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1RSSU1fQ1RSTF9SRUdfWFRBTF9TRVRUTEVfTl9Nc2sgKDB4M2YwMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFRSSU1fQ1RSTF9SRUc6IFhUQUxfU0VUVExFX04gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfMzJLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfRU5BQkxFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX0VOQUJMRSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfRU5BQkxFX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfUkJJQVNfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX1JCSUFTIChCaXQgMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfUkJJQVNfTXNrICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX1JCSUFTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfQ1VSX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX0NVUiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfQ1VSX01zayAgICgweDc4VUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX0NVUiAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1JDMzJLX0VOQUJMRV9Qb3MgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBSQzMyS19FTkFCTEUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1JDMzJLX0VOQUJMRV9Nc2sgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBSQzMyS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1JDMzJLX1RSSU1fUG9zICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBSQzMyS19UUklNIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1JDMzJLX1RSSU1fTXNrICAgICgweGYwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBSQzMyS19UUklNIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfRElTQUJMRV9BTVBSRUdfUG9zICgxMlVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX0RJU0FCTEVfQU1QUkVHIChCaXQgMTIpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfRElTQUJMRV9BTVBSRUdfTXNrICgweDEwMDBVTCkgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX0RJU0FCTEVfQU1QUkVHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfWFRBTDFfQklBU19ESVNBQkxFX1BvcyAoMTNVTCkgICAgICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX1hUQUwxX0JJQVNfRElTQUJMRSAoQml0IDEzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18zMktfUkVHX1hUQUwzMktfWFRBTDFfQklBU19ESVNBQkxFX01zayAoMHgyMDAwVUwpICAgLyohPCBDUkdfVE9QIENMS18zMktfUkVHOiBYVEFMMzJLX1hUQUwxX0JJQVNfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQ0xLXzE2TV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9FTkFCTEVfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogUkMxNk1fRU5BQkxFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9FTkFCTEVfTXNrICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogUkMxNk1fRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9UUklNX1BvcyAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogUkMxNk1fVFJJTSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19SQzE2TV9UUklNX01zayAgICAoMHgxZVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogUkMxNk1fVFJJTSAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfQ1VSX1NFVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X0NVUl9TRVQgKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfQ1VSX1NFVF9Nc2sgKDB4ZTBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X0NVUl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfTUFYX0NVUlJFTlRfUG9zICg4VUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X01BWF9DVVJSRU5UIChCaXQgOCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9DTEtfMTZNX1JFR19YVEFMMTZfTUFYX0NVUlJFTlRfTXNrICgweDEwMFVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBDTEtfMTZNX1JFRzogWFRBTDE2X01BWF9DVVJSRU5UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9FWFRfQ0xLX0VOQUJMRV9Qb3MgKDlVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfRVhUX0NMS19FTkFCTEUgKEJpdCA5KSAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9FWFRfQ0xLX0VOQUJMRV9Nc2sgKDB4MjAwVUwpICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfRVhUX0NMS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X0FNUF9UUklNX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9BTVBfVFJJTSAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X0FNUF9UUklNX01zayAoMHgxYzAwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9BTVBfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X1NQSUtFX0ZMVF9CWVBBU1NfUG9zICgxM1VMKSAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9TUElLRV9GTFRfQllQQVNTIChCaXQgMTMpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLXzE2TV9SRUdfWFRBTDE2X1NQSUtFX0ZMVF9CWVBBU1NfTXNrICgweDIwMDBVTCkgICAgICAvKiE8IENSR19UT1AgQ0xLXzE2TV9SRUc6IFhUQUwxNl9TUElLRV9GTFRfQllQQVNTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9IUEFTU19GTFRfRU5fUG9zICgxNFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfSFBBU1NfRkxUX0VOIChCaXQgMTQpICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1hUQUwxNl9IUEFTU19GTFRfRU5fTXNrICgweDQwMDBVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBYVEFMMTZfSFBBU1NfRkxUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1JDMTZNX1NUQVJUVVBfRElTQUJMRV9Qb3MgKDE1VUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBSQzE2TV9TVEFSVFVQX0RJU0FCTEUgKEJpdCAxNSkgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0NMS18xNk1fUkVHX1JDMTZNX1NUQVJUVVBfRElTQUJMRV9Nc2sgKDB4ODAwMFVMKSAgICAgICAgLyohPCBDUkdfVE9QIENMS18xNk1fUkVHOiBSQzE2TV9TVEFSVFVQX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9DTEtfUkNYMjBLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX1RSSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19UUklNIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX1RSSU1fTXNrICgweGZVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19UUklNIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX05UQ19Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19OVEMgKEJpdCA0KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX05UQ19Nc2sgKDB4ZjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19OVEMgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX0JJQVNfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19CSUFTIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX0JJQVNfTXNrICgweDMwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19CSUFTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX0xPV0ZfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19MT1dGIChCaXQgMTApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX0xPV0ZfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19MT1dGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX0VOQUJMRV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19FTkFCTEUgKEJpdCAxMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQ0xLX1JDWDIwS19SRUdfUkNYMjBLX0VOQUJMRV9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQ0xLX1JDWDIwS19SRUc6IFJDWDIwS19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0JBTkRHQVBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfQkdSX1RSSU1fUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IEJHUl9UUklNIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfQkdSX1RSSU1fTXNrICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IEJHUl9UUklNIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfQkdSX0lUUklNX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IEJHUl9JVFJJTSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfQkdSX0lUUklNX01zayAgICAgKDB4M2UwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IEJHUl9JVFJJTSAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfTERPX1NMRUVQX1RSSU1fUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IExET19TTEVFUF9UUklNIChCaXQgMTApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfTERPX1NMRUVQX1RSSU1fTXNrICgweDNjMDBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IExET19TTEVFUF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfTERPX1NVUFBMWV9VU0VfQkdSRUZfUG9zICgxNFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IExET19TVVBQTFlfVVNFX0JHUkVGIChCaXQgMTQpICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQkFOREdBUF9SRUdfTERPX1NVUFBMWV9VU0VfQkdSRUZfTXNrICgweDQwMDBVTCkgICAgICAgICAvKiE8IENSR19UT1AgQkFOREdBUF9SRUc6IExET19TVVBQTFlfVVNFX0JHUkVGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfQU5BX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0xET19SQURJT19PS19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBMRE9fUkFESU9fT0sgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0xET19SQURJT19PS19Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBMRE9fUkFESU9fT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfVkJBVF9PS19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QX1ZCQVRfT0sgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0NPTVBfVkJBVF9PS19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBDT01QX1ZCQVRfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX1ZCVVNfQVZBSUxBQkxFX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBWQlVTX0FWQUlMQUJMRSAoQml0IDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX1ZCVVNfQVZBSUxBQkxFX01zayAoMHg0VUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBWQlVTX0FWQUlMQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19ORVdCQVRfUG9zICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTkVXQkFUIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19ORVdCQVRfTXNrICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTkVXQkFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fU1VQUExZX1ZCQVRfT0tfUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX1NVUFBMWV9WQkFUX09LIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fU1VQUExZX1ZCQVRfT0tfTXNrICgweDEwVUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX1NVUFBMWV9WQkFUX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0xET19TVVBQTFlfVVNCX09LX1BvcyAoNVVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBMRE9fU1VQUExZX1VTQl9PSyAoQml0IDUpICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FOQV9TVEFUVVNfUkVHX0xET19TVVBQTFlfVVNCX09LX01zayAoMHgyMFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIEFOQV9TVEFUVVNfUkVHOiBMRE9fU1VQUExZX1VTQl9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19CQU5ER0FQX09LX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQkFOREdBUF9PSyAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19CQU5ER0FQX09LX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQkFOREdBUF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19DT01QX1ZERF9ISUdIX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQ09NUF9WRERfSElHSCAoQml0IDcpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19DT01QX1ZERF9ISUdIX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQ09NUF9WRERfSElHSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fQ09SRV9PS19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX0NPUkVfT0sgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fQ09SRV9PS19Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPX0NPUkVfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fMVY4X1BBX09LX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPXzFWOF9QQV9PSyAoQml0IDkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fMVY4X1BBX09LX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPXzFWOF9QQV9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fMVY4X0ZMQVNIX09LX1BvcyAoMTBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPXzFWOF9GTEFTSF9PSyAoQml0IDEwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19MRE9fMVY4X0ZMQVNIX09LX01zayAoMHg0MDBVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogTERPXzFWOF9GTEFTSF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19DT01QX1ZCVVNfSElHSF9Qb3MgKDExVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQ09NUF9WQlVTX0hJR0ggKEJpdCAxMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BTkFfU1RBVFVTX1JFR19DT01QX1ZCVVNfSElHSF9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBTkFfU1RBVFVTX1JFRzogQ09NUF9WQlVTX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WQlVTX0xPV19Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVkJVU19MT1cgKEJpdCAxMikgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WQlVTX0xPV19Nc2sgKDB4MTAwMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVkJVU19MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WMzNfSElHSF9Qb3MgKDEzVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVjMzX0hJR0ggKEJpdCAxMykgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF9WMzNfSElHSF9Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfVjMzX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF8xVjhfRkxBU0hfSElHSF9Qb3MgKDE0VUwpICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfMVY4X0ZMQVNIX0hJR0ggKEJpdCAxNCkgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF8xVjhfRkxBU0hfSElHSF9Nc2sgKDB4NDAwMFVMKSAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfMVY4X0ZMQVNIX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF8xVjhfUEFfSElHSF9Qb3MgKDE1VUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfMVY4X1BBX0hJR0ggKEJpdCAxNSkgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQU5BX1NUQVRVU19SRUdfQ09NUF8xVjhfUEFfSElHSF9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAvKiE8IENSR19UT1AgQU5BX1NUQVRVU19SRUc6IENPTVBfMVY4X1BBX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0JBTkRHQVBfT0tfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9CQU5ER0FQX09LIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0JBTkRHQVBfT0tfTXNrICgweDFVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9CQU5ER0FQX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9ORVdCQVRfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTkVXQkFUIChCaXQgMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9ORVdCQVRfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTkVXQkFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MRE9fU1VQUExZX1ZCQVRfT0tfUG9zICgyVUwpICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTERPX1NVUFBMWV9WQkFUX09LIChCaXQgMikgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MRE9fU1VQUExZX1ZCQVRfT0tfTXNrICgweDRVTCkgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTERPX1NVUFBMWV9WQkFUX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MT0RfU1VQUExZX1VTQl9PS19Qb3MgKDNVTCkgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTE9EX1NVUFBMWV9VU0JfT0sgKEJpdCAzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MT0RfU1VQUExZX1VTQl9PS19Nc2sgKDB4OFVMKSAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTE9EX1NVUFBMWV9VU0JfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0xET19DT1JFX09LX1BvcyAoNFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9MRE9fQ09SRV9PSyAoQml0IDQpICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0xET19DT1JFX09LX01zayAoMHgxMFVMKSAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9MRE9fQ09SRV9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTERPXzFWOF9QQV9PS19Qb3MgKDVVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xET18xVjhfUEFfT0sgKEJpdCA1KSAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfTERPXzFWOF9QQV9PS19Nc2sgKDB4MjBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0xET18xVjhfUEFfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfVkREX0hJR0hfUG9zICg2VUwpICAgICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QX1ZERF9ISUdIIChCaXQgNikgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfVkREX0hJR0hfTXNrICgweDQwVUwpICAgICAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QX1ZERF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QX1YzM19ISUdIX1BvcyAoN1VMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF9WMzNfSElHSCAoQml0IDcpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QX1YzM19ISUdIX01zayAoMHg4MFVMKSAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF9WMzNfSElHSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF9WQlVTX0hJR0hfUG9zICg4VUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfVkJVU19ISUdIIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF9WQlVTX0hJR0hfTXNrICgweDEwMFVMKSAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfVkJVU19ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QX1ZCVVNfTE9XX1BvcyAoOVVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF9WQlVTX0xPVyAoQml0IDkpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9DT01QX1ZCVVNfTE9XX01zayAoMHgyMDBVTCkgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfQ09NUF9WQlVTX0xPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF8xVjhfUEFfSElHSF9Qb3MgKDEwVUwpICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfMVY4X1BBX0hJR0ggKEJpdCAxMCkgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQ09NUF8xVjhfUEFfSElHSF9Nc2sgKDB4NDAwVUwpICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0NPTVBfMVY4X1BBX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfMVY4X0ZMQVNIX0hJR0hfUG9zICgxMVVMKSAgICAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QXzFWOF9GTEFTSF9ISUdIIChCaXQgMTEpICovCisjZGVmaW5lIENSR19UT1BfU1RBUlRVUF9TVEFUVVNfUkVHX1NVX0NPTVBfMVY4X0ZMQVNIX0hJR0hfTXNrICgweDgwMFVMKSAvKiE8IENSR19UT1AgU1RBUlRVUF9TVEFUVVNfUkVHOiBTVV9DT01QXzFWOF9GTEFTSF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MRE9fMVY4X0ZMQVNIX09LX1BvcyAoMTJVTCkgICAgICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTERPXzFWOF9GTEFTSF9PSyAoQml0IDEyKSAgICAqLworI2RlZmluZSBDUkdfVE9QX1NUQVJUVVBfU1RBVFVTX1JFR19TVV9MRE9fMVY4X0ZMQVNIX09LX01zayAoMHgxMDAwVUwpICAgLyohPCBDUkdfVE9QIFNUQVJUVVBfU1RBVFVTX1JFRzogU1VfTERPXzFWOF9GTEFTSF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQk9EX1NUQVRVU19Qb3MgKDEzVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0JPRF9TVEFUVVMgKEJpdCAxMykgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9TVEFSVFVQX1NUQVRVU19SRUdfU1VfQk9EX1NUQVRVU19Nc2sgKDB4ZTAwMFVMKSAgICAgICAgIC8qITwgQ1JHX1RPUCBTVEFSVFVQX1NUQVRVU19SRUc6IFNVX0JPRF9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1ZCVVNfSVJRX01BU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfVkJVU19JUlFfTUFTS19SRUdfVkJVU19JUlFfRU5fRkFMTF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgVkJVU19JUlFfTUFTS19SRUc6IFZCVVNfSVJRX0VOX0ZBTEwgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfVkJVU19JUlFfTUFTS19SRUdfVkJVU19JUlFfRU5fRkFMTF9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IENSR19UT1AgVkJVU19JUlFfTUFTS19SRUc6IFZCVVNfSVJRX0VOX0ZBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfVkJVU19JUlFfTUFTS19SRUdfVkJVU19JUlFfRU5fUklTRV9Qb3MgKDFVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgVkJVU19JUlFfTUFTS19SRUc6IFZCVVNfSVJRX0VOX1JJU0UgKEJpdCAxKSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfVkJVU19JUlFfTUFTS19SRUdfVkJVU19JUlFfRU5fUklTRV9Nc2sgKDB4MlVMKSAgICAgICAgICAvKiE8IENSR19UT1AgVkJVU19JUlFfTUFTS19SRUc6IFZCVVNfSVJRX0VOX1JJU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfVkJVU19JUlFfQ0xFQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfVkJVU19JUlFfQ0xFQVJfUkVHX1ZCVVNfSVJRX0NMRUFSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgVkJVU19JUlFfQ0xFQVJfUkVHOiBWQlVTX0lSUV9DTEVBUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfVkJVU19JUlFfQ0xFQVJfUkVHX1ZCVVNfSVJRX0NMRUFSX01zayAoMHhmZmZmVUwpICAgICAgICAvKiE8IENSR19UT1AgVkJVU19JUlFfQ0xFQVJfUkVHOiBWQlVTX0lSUV9DTEVBUiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0JPRF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfVkREX1RSSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EX1ZERF9UUklNIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfVkREX1RSSU1fTXNrICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EX1ZERF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfMVY4X1RSSU1fUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EXzFWOF9UUklNIChCaXQgMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfMVY4X1RSSU1fTXNrICgweGNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EXzFWOF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfMVY0X1RSSU1fUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EXzFWNF9UUklNIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfMVY0X1RSSU1fTXNrICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EXzFWNF9UUklNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfVjMzX1RSSU1fUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EX1YzM19UUklNIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfVjMzX1RSSU1fTXNrICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EX1YzM19UUklNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfVkREX0xWTF9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EX1ZERF9MVkwgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMX1JFR19CT0RfVkREX0xWTF9Nc2sgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMX1JFRzogQk9EX1ZERF9MVkwgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0JPRF9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1JFU0VUX0VOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9SRVNFVF9FTiAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1JFU0VUX0VOX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9SRVNFVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1ZERF9FTl9Qb3MgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WRERfRU4gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1ZERF9FTl9Nc2sgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WRERfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1YzM19FTl9Qb3MgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WMzNfRU4gKEJpdCAyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EX1YzM19FTl9Nc2sgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF9WMzNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EXzFWOF9QQV9FTl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF8xVjhfUEFfRU4gKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EXzFWOF9QQV9FTl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF8xVjhfUEFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EXzFWOF9GTEFTSF9FTl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF8xVjhfRkxBU0hfRU4gKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9DVFJMMl9SRUdfQk9EXzFWOF9GTEFTSF9FTl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9DVFJMMl9SRUc6IEJPRF8xVjhfRkxBU0hfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfQk9EX0NUUkwyX1JFR19CT0RfVkJBVF9FTl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX0NUUkwyX1JFRzogQk9EX1ZCQVRfRU4gKEJpdCA1KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX0NUUkwyX1JFR19CT0RfVkJBVF9FTl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX0NUUkwyX1JFRzogQk9EX1ZCQVRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX0NUUkwyX1JFR19CT0RfVjE0X0VOX1BvcyAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX0NUUkwyX1JFRzogQk9EX1YxNF9FTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX0NUUkwyX1JFR19CT0RfVjE0X0VOX01zayAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX0NUUkwyX1JFRzogQk9EX1YxNF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1ZERF9MT1dfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WRERfTE9XIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EX1ZERF9MT1dfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF9WRERfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EXzFWOF9QQV9MT1dfUG9zICgxVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF8xVjhfUEFfTE9XIChCaXQgMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfQk9EX1NUQVRVU19SRUdfQk9EXzFWOF9QQV9MT1dfTXNrICgweDJVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgQk9EX1NUQVRVU19SRUc6IEJPRF8xVjhfUEFfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9TVEFUVVNfUkVHX0JPRF8xVjhfRkxBU0hfTE9XX1BvcyAoMlVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9TVEFUVVNfUkVHOiBCT0RfMVY4X0ZMQVNIX0xPVyAoQml0IDIpICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0JPRF9TVEFUVVNfUkVHX0JPRF8xVjhfRkxBU0hfTE9XX01zayAoMHg0VUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIEJPRF9TVEFUVVNfUkVHOiBCT0RfMVY4X0ZMQVNIX0xPVyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfVjMzX0xPV19Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EX1YzM19MT1cgKEJpdCAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfVjMzX0xPV19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EX1YzM19MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfVkJBVF9MT1dfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EX1ZCQVRfTE9XIChCaXQgNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfVkJBVF9MT1dfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EX1ZCQVRfTE9XIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfVjE0X0xPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EX1YxNF9MT1cgKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9CT0RfU1RBVFVTX1JFR19CT0RfVjE0X0xPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBCT0RfU1RBVFVTX1JFRzogQk9EX1YxNF9MT1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19DT1JFX0NVUkxJTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fQ09SRV9DVVJMSU0gKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19DT1JFX0NVUkxJTV9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fQ09SRV9DVVJMSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fVkJBVF9SRVRfTEVWRUxfUG9zICgyVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1ZCQVRfUkVUX0xFVkVMIChCaXQgMikgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fVkJBVF9SRVRfTEVWRUxfTXNrICgweGNVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1ZCQVRfUkVUX0xFVkVMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMV9SRUdfTERPX1NVUFBMWV9WQkFUX0xFVkVMX1BvcyAoNFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMV9SRUc6IExET19TVVBQTFlfVkJBVF9MRVZFTCAoQml0IDQpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMV9SRUdfTERPX1NVUFBMWV9WQkFUX0xFVkVMX01zayAoMHgzMFVMKSAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMV9SRUc6IExET19TVVBQTFlfVkJBVF9MRVZFTCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19TVVBQTFlfVVNCX0xFVkVMX1BvcyAoNlVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fU1VQUExZX1VTQl9MRVZFTCAoQml0IDYpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19TVVBQTFlfVVNCX0xFVkVMX01zayAoMHhjMFVMKSAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fU1VQUExZX1VTQl9MRVZFTCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19DT1JFX1NFVFZERF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fQ09SRV9TRVRWREQgKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19DT1JFX1NFVFZERF9Nc2sgKDB4NzAwVUwpICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fQ09SRV9TRVRWREQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fUkFESU9fU0VUVkREX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1JBRElPX1NFVFZERCAoQml0IDExKSAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwxX1JFR19MRE9fUkFESU9fU0VUVkREX01zayAoMHgzODAwVUwpICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwxX1JFRzogTERPX1JBRElPX1NFVFZERCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19SQURJT19FTkFCTEVfUG9zICgxNFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fUkFESU9fRU5BQkxFIChCaXQgMTQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDFfUkVHX0xET19SQURJT19FTkFCTEVfTXNrICgweDQwMDBVTCkgICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDFfUkVHOiBMRE9fUkFESU9fRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0xET19DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWMl9PTl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjJfT04gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWMl9PTl9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjJfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzNWM19PTl9Qb3MgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18zVjNfT04gKEJpdCAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzNWM19PTl9Nc2sgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18zVjNfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWOF9GTEFTSF9PTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjhfRkxBU0hfT04gKEJpdCAyKSAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMMl9SRUdfTERPXzFWOF9GTEFTSF9PTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMMl9SRUc6IExET18xVjhfRkxBU0hfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fMVY4X1BBX09OX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPXzFWOF9QQV9PTiAoQml0IDMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fMVY4X1BBX09OX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPXzFWOF9QQV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fVkJBVF9SRVRfRElTQUJMRV9Qb3MgKDRVTCkgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPX1ZCQVRfUkVUX0RJU0FCTEUgKEJpdCA0KSAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fVkJBVF9SRVRfRElTQUJMRV9Nc2sgKDB4MTBVTCkgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPX1ZCQVRfUkVUX0RJU0FCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFX1BvcyAoNVVMKSAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRSAoQml0IDUpICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwyX1JFR19MRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFX01zayAoMHgyMFVMKSAgICAvKiE8IENSR19UT1AgTERPX0NUUkwyX1JFRzogTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18xVjhfUEFfUkVUX0RJU0FCTEVfUG9zICg2VUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fMVY4X1BBX1JFVF9ESVNBQkxFIChCaXQgNikgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDJfUkVHX0xET18xVjhfUEFfUkVUX0RJU0FCTEVfTXNrICgweDQwVUwpICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDJfUkVHOiBMRE9fMVY4X1BBX1JFVF9ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfU0xFRVBfVElNRVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1NMRUVQX1RJTUVSX1JFR19TTEVFUF9USU1FUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNMRUVQX1RJTUVSX1JFRzogU0xFRVBfVElNRVIgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NMRUVQX1RJTUVSX1JFR19TTEVFUF9USU1FUl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNMRUVQX1RJTUVSX1JFRzogU0xFRVBfVElNRVIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1BPV0VSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1dFUl9DVFJMX1JFR19UUklNX05FV0JBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1dFUl9DVFJMX1JFRzogVFJJTV9ORVdCQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1dFUl9DVFJMX1JFR19UUklNX05FV0JBVF9Nc2sgKDB4N1VMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1dFUl9DVFJMX1JFRzogVFJJTV9ORVdCQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfUE9SX1ZCQVRfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9USFJFU19MT1dfUG9zICgwVUwpICAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfVEhSRVNfTE9XIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9USFJFU19MT1dfTXNrICgweGZVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfVEhSRVNfTE9XIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHX1BPUl9WQkFUX1RIUkVTX0hJR0hfUG9zICg0VUwpICAgICAgICAgLyohPCBDUkdfVE9QIFBPUl9WQkFUX0NUUkxfUkVHOiBQT1JfVkJBVF9USFJFU19ISUdIIChCaXQgNCkgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHX1BPUl9WQkFUX1RIUkVTX0hJR0hfTXNrICgweGYwVUwpICAgICAgLyohPCBDUkdfVE9QIFBPUl9WQkFUX0NUUkxfUkVHOiBQT1JfVkJBVF9USFJFU19ISUdIIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHX1BPUl9WQkFUX0hZU1RfTE9XX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIFBPUl9WQkFUX0NUUkxfUkVHOiBQT1JfVkJBVF9IWVNUX0xPVyAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHX1BPUl9WQkFUX0hZU1RfTE9XX01zayAoMHhmMDBVTCkgICAgICAgLyohPCBDUkdfVE9QIFBPUl9WQkFUX0NUUkxfUkVHOiBQT1JfVkJBVF9IWVNUX0xPVyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9FTkFCTEVfUG9zICgxMlVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfRU5BQkxFIChCaXQgMTIpICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9QT1JfVkJBVF9DVFJMX1JFR19QT1JfVkJBVF9FTkFCTEVfTXNrICgweDEwMDBVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBQT1JfVkJBVF9DVFJMX1JFRzogUE9SX1ZCQVRfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHX1BPUl9WQkFUX01BU0tfTl9Qb3MgKDEzVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBPUl9WQkFUX0NUUkxfUkVHOiBQT1JfVkJBVF9NQVNLX04gKEJpdCAxMykgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1BPUl9WQkFUX0NUUkxfUkVHX1BPUl9WQkFUX01BU0tfTl9Nc2sgKDB4MjAwMFVMKSAgICAgICAgLyohPCBDUkdfVE9QIFBPUl9WQkFUX0NUUkxfUkVHOiBQT1JfVkJBVF9NQVNLX04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1hUQUxSRFlfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfWFRBTFJEWV9DVFJMX1JFR19YVEFMUkRZX0NOVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTFJEWV9DVFJMX1JFRzogWFRBTFJEWV9DTlQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTFJEWV9DVFJMX1JFR19YVEFMUkRZX0NOVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTFJEWV9DVFJMX1JFRzogWFRBTFJEWV9DTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1hUQUxSRFlfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfWFRBTFJEWV9TVEFUX1JFR19YVEFMUkRZX1NUQVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTFJEWV9TVEFUX1JFRzogWFRBTFJEWV9TVEFUIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTFJEWV9TVEFUX1JFR19YVEFMUkRZX1NUQVRfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTFJEWV9TVEFUX1JFRzogWFRBTFJEWV9TVEFUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0xET19DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPX1ZCQVRfUkVUX0VOQUJMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET19WQkFUX1JFVF9FTkFCTEUgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPX1ZCQVRfUkVUX0VOQUJMRV9Nc2sgKDB4MVVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET19WQkFUX1JFVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fVkJBVF9SRVRfVlJFRl9IT0xEX1BvcyAoMVVMKSAgICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPX1ZCQVRfUkVUX1ZSRUZfSE9MRCAoQml0IDEpICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fVkJBVF9SRVRfVlJFRl9IT0xEX01zayAoMHgyVUwpICAgICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPX1ZCQVRfUkVUX1ZSRUZfSE9MRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET18xVjhfRkxBU0hfUkVUX0VOQUJMRV9Qb3MgKDJVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fMVY4X0ZMQVNIX1JFVF9FTkFCTEUgKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET18xVjhfRkxBU0hfUkVUX0VOQUJMRV9Nc2sgKDB4NFVMKSAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fMVY4X0ZMQVNIX1JFVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fMVY4X0ZMQVNIX1JFVF9WUkVGX0hPTERfUG9zICgzVUwpICAgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPXzFWOF9GTEFTSF9SRVRfVlJFRl9IT0xEIChCaXQgMykgICovCisjZGVmaW5lIENSR19UT1BfTERPX0NUUkwzX1JFR19MRE9fMVY4X0ZMQVNIX1JFVF9WUkVGX0hPTERfTXNrICgweDhVTCkgICAvKiE8IENSR19UT1AgTERPX0NUUkwzX1JFRzogTERPXzFWOF9GTEFTSF9SRVRfVlJFRl9IT0xEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPXzFWOF9QQV9SRVRfRU5BQkxFX1BvcyAoNFVMKSAgICAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET18xVjhfUEFfUkVUX0VOQUJMRSAoQml0IDQpICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0xET19DVFJMM19SRUdfTERPXzFWOF9QQV9SRVRfRU5BQkxFX01zayAoMHgxMFVMKSAgICAgICAgLyohPCBDUkdfVE9QIExET19DVFJMM19SRUc6IExET18xVjhfUEFfUkVUX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET18xVjhfUEFfUkVUX1ZSRUZfSE9MRF9Qb3MgKDVVTCkgICAgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fMVY4X1BBX1JFVF9WUkVGX0hPTEQgKEJpdCA1KSAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9MRE9fQ1RSTDNfUkVHX0xET18xVjhfUEFfUkVUX1ZSRUZfSE9MRF9Nc2sgKDB4MjBVTCkgICAgIC8qITwgQ1JHX1RPUCBMRE9fQ1RSTDNfUkVHOiBMRE9fMVY4X1BBX1JFVF9WUkVGX0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1hUQUwxNk1fU1RBUlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9TVEFSVF9SRUdfRklORV9BREpfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9TVEFSVF9SRUc6IEZJTkVfQURKIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9TVEFSVF9SRUdfRklORV9BREpfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9TVEFSVF9SRUc6IEZJTkVfQURKIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9TVEFSVF9SRUdfQ09BUlNFX0FESl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9TVEFSVF9SRUc6IENPQVJTRV9BREogKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9TVEFSVF9SRUdfQ09BUlNFX0FESl9Nc2sgKDB4NzAwVUwpICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9TVEFSVF9SRUc6IENPQVJTRV9BREogKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1hUQUwxNk1fUkFNUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9SQU1QX1JFR19GSU5FX0FESl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9SQU1QX1JFRzogRklORV9BREogKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9SQU1QX1JFR19GSU5FX0FESl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9SQU1QX1JFRzogRklORV9BREogKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9SQU1QX1JFR19DT0FSU0VfQURKX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9SQU1QX1JFRzogQ09BUlNFX0FESiAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9SQU1QX1JFR19DT0FSU0VfQURKX01zayAoMHg3MDBVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9SQU1QX1JFRzogQ09BUlNFX0FESiAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfWFRBTDE2TV9UUlNUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9UUlNUQVRfUkVHX1hUQUwxNk1fVFJTVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9UUlNUQVRfUkVHOiBYVEFMMTZNX1RSU1RBVCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfWFRBTDE2TV9UUlNUQVRfUkVHX1hUQUwxNk1fVFJTVEFUX01zayAoMHg3ZmZmVUwpICAgICAgICAvKiE8IENSR19UT1AgWFRBTDE2TV9UUlNUQVRfUkVHOiBYVEFMMTZNX1RSU1RBVCAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfUkVTRVRfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX1BPUkVTRVRfU1RBVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBQT1JFU0VUX1NUQVQgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX1BPUkVTRVRfU1RBVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBQT1JFU0VUX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX0hXUkVTRVRfU1RBVF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBIV1JFU0VUX1NUQVQgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX0hXUkVTRVRfU1RBVF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBIV1JFU0VUX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX1NXUkVTRVRfU1RBVF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBTV1JFU0VUX1NUQVQgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX1NXUkVTRVRfU1RBVF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBTV1JFU0VUX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX1dET0dSRVNFVF9TVEFUX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBXRE9HUkVTRVRfU1RBVCAoQml0IDMpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1JFU0VUX1NUQVRfUkVHX1dET0dSRVNFVF9TVEFUX01zayAoMHg4VUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFJFU0VUX1NUQVRfUkVHOiBXRE9HUkVTRVRfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19TV0RfSFdSRVNFVF9TVEFUX1BvcyAoNFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogU1dEX0hXUkVTRVRfU1RBVCAoQml0IDQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9SRVNFVF9TVEFUX1JFR19TV0RfSFdSRVNFVF9TVEFUX01zayAoMHgxMFVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBSRVNFVF9TVEFUX1JFRzogU1dEX0hXUkVTRVRfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0ZPUkNFX1NMRUVQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9GT1JDRV9TTEVFUF9SRUdfRk9SQ0VfRlRERl9TTEVFUF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBGT1JDRV9TTEVFUF9SRUc6IEZPUkNFX0ZUREZfU0xFRVAgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9GT1JDRV9TTEVFUF9SRUdfRk9SQ0VfRlRERl9TTEVFUF9Nc2sgKDB4MVVMKSAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBGT1JDRV9TTEVFUF9SRUc6IEZPUkNFX0ZUREZfU0xFRVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIENSR19UT1BfRk9SQ0VfU0xFRVBfUkVHX0ZPUkNFX0JMRV9TTEVFUF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgRk9SQ0VfU0xFRVBfUkVHOiBGT1JDRV9CTEVfU0xFRVAgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfRk9SQ0VfU0xFRVBfUkVHX0ZPUkNFX0JMRV9TTEVFUF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IENSR19UT1AgRk9SQ0VfU0xFRVBfUkVHOiBGT1JDRV9CTEVfU0xFRVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0xET1NfRElTQUJMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENSR19UT1BfTERPU19ESVNBQkxFX1JFR19MRE9TX0RJU0FCTEVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPU19ESVNBQkxFX1JFRzogTERPU19ESVNBQkxFIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIENSR19UT1BfTERPU19ESVNBQkxFX1JFR19MRE9TX0RJU0FCTEVfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IENSR19UT1AgTERPU19ESVNBQkxFX1JFRzogTERPU19ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX0FPTl9TUEFSRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX0FPTl9TUEFSRV9SRUdfT1NDMTZfSE9MRF9BTVBfUkVHX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFPTl9TUEFSRV9SRUc6IE9TQzE2X0hPTERfQU1QX1JFRyAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FPTl9TUEFSRV9SRUdfT1NDMTZfSE9MRF9BTVBfUkVHX01zayAoMHgxVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFPTl9TUEFSRV9SRUc6IE9TQzE2X0hPTERfQU1QX1JFRyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX09TQzE2X1NIX0RJU0FCTEVfUG9zICgxVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBPU0MxNl9TSF9ESVNBQkxFIChCaXQgMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9BT05fU1BBUkVfUkVHX09TQzE2X1NIX0RJU0FCTEVfTXNrICgweDJVTCkgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBBT05fU1BBUkVfUkVHOiBPU0MxNl9TSF9ESVNBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX0FPTl9TUEFSRV9SRUdfRU5fQkFUU1lTX1JFVF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFPTl9TUEFSRV9SRUc6IEVOX0JBVFNZU19SRVQgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FPTl9TUEFSRV9SRUdfRU5fQkFUU1lTX1JFVF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFPTl9TUEFSRV9SRUc6IEVOX0JBVFNZU19SRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX0FPTl9TUEFSRV9SRUdfRU5fQlVTU1lTX1JFVF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFPTl9TUEFSRV9SRUc6IEVOX0JVU1NZU19SRVQgKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX0FPTl9TUEFSRV9SRUdfRU5fQlVTU1lTX1JFVF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIEFPTl9TUEFSRV9SRUc6IEVOX0JVU1NZU19SRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENSR19UT1BfU0VDVVJFX0JPT1RfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1NFQ1VSRV9CT09UX1JFR19TRUNVUkVfQk9PVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNFQ1VSRV9CT09UX1JFRzogU0VDVVJFX0JPT1QgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NFQ1VSRV9CT09UX1JFR19TRUNVUkVfQk9PVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNFQ1VSRV9CT09UX1JFRzogU0VDVVJFX0JPT1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBDUkdfVE9QX1NFQ1VSRV9CT09UX1JFR19GT1JDRV9ERUJVR0dFUl9PRkZfUG9zICgxVUwpICAgICAgICAgICAgLyohPCBDUkdfVE9QIFNFQ1VSRV9CT09UX1JFRzogRk9SQ0VfREVCVUdHRVJfT0ZGIChCaXQgMSkgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1NFQ1VSRV9CT09UX1JFR19GT1JDRV9ERUJVR0dFUl9PRkZfTXNrICgweDJVTCkgICAgICAgICAgLyohPCBDUkdfVE9QIFNFQ1VSRV9CT09UX1JFRzogRk9SQ0VfREVCVUdHRVJfT0ZGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFR19SRVNFVF9WMTRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBNVV9SRVNFVF9SQUlMX1JFRzogUkVTRVRfVjE0IChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFR19SRVNFVF9WMTRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBNVV9SRVNFVF9SQUlMX1JFRzogUkVTRVRfVjE0IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFR19SRVNFVF9WMThfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBNVV9SRVNFVF9SQUlMX1JFRzogUkVTRVRfVjE4IChCaXQgMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFR19SRVNFVF9WMThfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBNVV9SRVNFVF9SQUlMX1JFRzogUkVTRVRfVjE4IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFR19SRVNFVF9WMThQX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBNVV9SRVNFVF9SQUlMX1JFRzogUkVTRVRfVjE4UCAoQml0IDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBDUkdfVE9QX1BNVV9SRVNFVF9SQUlMX1JFR19SRVNFVF9WMThQX01zayAoMHg0VUwpICAgICAgICAgICAgICAgLyohPCBDUkdfVE9QIFBNVV9SRVNFVF9SQUlMX1JFRzogUkVTRVRfVjE4UCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUdfUkVTRVRfVjE0X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBESVNDSEFSR0VfUkFJTF9SRUc6IFJFU0VUX1YxNCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUdfUkVTRVRfVjE0X01zayAoMHgxVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBESVNDSEFSR0VfUkFJTF9SRUc6IFJFU0VUX1YxNCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUdfUkVTRVRfVjE4X1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBESVNDSEFSR0VfUkFJTF9SRUc6IFJFU0VUX1YxOCAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUdfUkVTRVRfVjE4X01zayAoMHgyVUwpICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBESVNDSEFSR0VfUkFJTF9SRUc6IFJFU0VUX1YxOCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUdfUkVTRVRfVjE4UF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBESVNDSEFSR0VfUkFJTF9SRUc6IFJFU0VUX1YxOFAgKEJpdCAyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1JHX1RPUF9ESVNDSEFSR0VfUkFJTF9SRUdfUkVTRVRfVjE4UF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgIC8qITwgQ1JHX1RPUCBESVNDSEFSR0VfUkFJTF9SRUc6IFJFU0VUX1YxOFAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdEQ0RDJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19DVFJMXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfTU9ERV9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX01PREUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfTU9ERV9Nc2sgICAgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfRldfRU5BQkxFX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0ZXX0VOQUJMRSAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfRldfRU5BQkxFX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0ZXX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfUFJJT1JJVFlfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX1BSSU9SSVRZIChCaXQgMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfUFJJT1JJVFlfTXNrICgweDdmOFVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX1BSSU9SSVRZIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfSURMRV9DTEtfRElWX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0lETEVfQ0xLX0RJViAoQml0IDExKSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19DVFJMXzBfUkVHX0RDRENfSURMRV9DTEtfRElWX01zayAoMHgxODAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19DVFJMXzBfUkVHOiBEQ0RDX0lETEVfQ0xLX0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMF9SRUdfRENEQ19CUk9XTk9VVF9MVl9NT0RFX1BvcyAoMTNVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMF9SRUc6IERDRENfQlJPV05PVVRfTFZfTU9ERSAoQml0IDEzKSAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMF9SRUdfRENEQ19CUk9XTk9VVF9MVl9NT0RFX01zayAoMHgyMDAwVUwpICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMF9SRUc6IERDRENfQlJPV05PVVRfTFZfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMF9SRUdfRENEQ19GQVNUX1NUQVJUVVBfUG9zICgxNFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMF9SRUc6IERDRENfRkFTVF9TVEFSVFVQIChCaXQgMTQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMF9SRUdfRENEQ19GQVNUX1NUQVJUVVBfTXNrICgweDQwMDBVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMF9SRUc6IERDRENfRkFTVF9TVEFSVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfQ1RSTF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8xX1JFR19EQ0RDX1RJTUVPVVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8xX1JFRzogRENEQ19USU1FT1VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8xX1JFR19EQ0RDX1RJTUVPVVRfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8xX1JFRzogRENEQ19USU1FT1VUIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8xX1JFR19EQ0RDX0dMT0JBTF9NQVhfSURMRV9USU1FX1BvcyAoNVVMKSAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8xX1JFRzogRENEQ19HTE9CQUxfTUFYX0lETEVfVElNRSAoQml0IDUpICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8xX1JFR19EQ0RDX0dMT0JBTF9NQVhfSURMRV9USU1FX01zayAoMHg3ZTBVTCkgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8xX1JFRzogRENEQ19HTE9CQUxfTUFYX0lETEVfVElNRSAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMV9SRUdfRENEQ19TVEFSVFVQX0RFTEFZX1BvcyAoMTFVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMV9SRUc6IERDRENfU1RBUlRVUF9ERUxBWSAoQml0IDExKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMV9SRUdfRENEQ19TVEFSVFVQX0RFTEFZX01zayAoMHhmODAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMV9SRUc6IERDRENfU1RBUlRVUF9ERUxBWSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX0NUUkxfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19IU0dORF9UUklNX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfSFNHTkRfVFJJTSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19IU0dORF9UUklNX01zayAoMHg3VUwpICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfSFNHTkRfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19MU1NVUF9UUklNX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfTFNTVVBfVFJJTSAoQml0IDMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19MU1NVUF9UUklNX01zayAoMHgzOFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfTFNTVVBfVFJJTSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19UVU5FX1BvcyAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfVFVORSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19UVU5FX01zayAgICAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfVFVORSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19USU1FT1VUX0lSUV9SRVNfUG9zICg4VUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfVElNRU9VVF9JUlFfUkVTIChCaXQgOCkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0NUUkxfMl9SRUdfRENEQ19USU1FT1VUX0lSUV9SRVNfTXNrICgweGYwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX0NUUkxfMl9SRUc6IERDRENfVElNRU9VVF9JUlFfUkVTIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8yX1JFR19EQ0RDX1RJTUVPVVRfSVJRX1RSSUdfUG9zICgxMlVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8yX1JFRzogRENEQ19USU1FT1VUX0lSUV9UUklHIChCaXQgMTIpICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfQ1RSTF8yX1JFR19EQ0RDX1RJTUVPVVRfSVJRX1RSSUdfTXNrICgweGYwMDBVTCkgICAgICAgLyohPCBEQ0RDIERDRENfQ1RSTF8yX1JFRzogRENEQ19USU1FT1VUX0lSUV9UUklHIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1YxNF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzBfUkVHX0RDRENfVjE0X0NVUl9MSU1fTUlOX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzBfUkVHOiBEQ0RDX1YxNF9DVVJfTElNX01JTiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE0XzBfUkVHX0RDRENfVjE0X0NVUl9MSU1fTUlOX01zayAoMHgxZlVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE0XzBfUkVHOiBEQ0RDX1YxNF9DVVJfTElNX01JTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8wX1JFR19EQ0RDX1YxNF9DVVJfTElNX01BWF9IVl9Qb3MgKDVVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8wX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9NQVhfSFYgKEJpdCA1KSAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8wX1JFR19EQ0RDX1YxNF9DVVJfTElNX01BWF9IVl9Nc2sgKDB4M2UwVUwpICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8wX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9NQVhfSFYgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMF9SRUdfRENEQ19WMTRfVk9MVEFHRV9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMF9SRUc6IERDRENfVjE0X1ZPTFRBR0UgKEJpdCAxMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMF9SRUdfRENEQ19WMTRfVk9MVEFHRV9Nc2sgKDB4N2MwMFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMF9SRUc6IERDRENfVjE0X1ZPTFRBR0UgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMF9SRUdfRENEQ19WMTRfRkFTVF9SQU1QSU5HX1BvcyAoMTVVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMF9SRUc6IERDRENfVjE0X0ZBU1RfUkFNUElORyAoQml0IDE1KSAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMF9SRUdfRENEQ19WMTRfRkFTVF9SQU1QSU5HX01zayAoMHg4MDAwVUwpICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMF9SRUc6IERDRENfVjE0X0ZBU1RfUkFNUElORyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19WMTRfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8xX1JFR19EQ0RDX1YxNF9JRExFX01JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8xX1JFRzogRENEQ19WMTRfSURMRV9NSU4gKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8xX1JFR19EQ0RDX1YxNF9JRExFX01JTl9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8xX1JFRzogRENEQ19WMTRfSURMRV9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfSURMRV9IWVNUX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0lETEVfSFlTVCAoQml0IDUpICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfSURMRV9IWVNUX01zayAoMHgzZTBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0lETEVfSFlTVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8xX1JFR19EQ0RDX1YxNF9DVVJfTElNX01BWF9MVl9Qb3MgKDEwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8xX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9NQVhfTFYgKEJpdCAxMCkgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8xX1JFR19EQ0RDX1YxNF9DVVJfTElNX01BWF9MVl9Nc2sgKDB4M2MwMFVMKSAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8xX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9NQVhfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfRU5BQkxFX0xWX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0VOQUJMRV9MViAoQml0IDE0KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMTRfMV9SRUdfRENEQ19WMTRfRU5BQkxFX0xWX01zayAoMHg0MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMTRfMV9SRUc6IERDRENfVjE0X0VOQUJMRV9MViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8xX1JFR19EQ0RDX1YxNF9FTkFCTEVfSFZfUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8xX1JFRzogRENEQ19WMTRfRU5BQkxFX0hWIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxNF8xX1JFR19EQ0RDX1YxNF9FTkFCTEVfSFZfTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxNF8xX1JFRzogRENEQ19WMTRfRU5BQkxFX0hWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1YxOF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzBfUkVHX0RDRENfVjE4X0NVUl9MSU1fTUlOX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzBfUkVHOiBEQ0RDX1YxOF9DVVJfTElNX01JTiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4XzBfUkVHX0RDRENfVjE4X0NVUl9MSU1fTUlOX01zayAoMHgxZlVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4XzBfUkVHOiBEQ0RDX1YxOF9DVVJfTElNX01JTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8wX1JFR19EQ0RDX1YxOF9DVVJfTElNX01BWF9IVl9Qb3MgKDVVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8wX1JFRzogRENEQ19WMThfQ1VSX0xJTV9NQVhfSFYgKEJpdCA1KSAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8wX1JFR19EQ0RDX1YxOF9DVVJfTElNX01BWF9IVl9Nc2sgKDB4M2UwVUwpICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8wX1JFRzogRENEQ19WMThfQ1VSX0xJTV9NQVhfSFYgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMF9SRUdfRENEQ19WMThfVk9MVEFHRV9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMF9SRUc6IERDRENfVjE4X1ZPTFRBR0UgKEJpdCAxMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMF9SRUdfRENEQ19WMThfVk9MVEFHRV9Nc2sgKDB4N2MwMFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMF9SRUc6IERDRENfVjE4X1ZPTFRBR0UgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMF9SRUdfRENEQ19WMThfRkFTVF9SQU1QSU5HX1BvcyAoMTVVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMF9SRUc6IERDRENfVjE4X0ZBU1RfUkFNUElORyAoQml0IDE1KSAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMF9SRUdfRENEQ19WMThfRkFTVF9SQU1QSU5HX01zayAoMHg4MDAwVUwpICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMF9SRUc6IERDRENfVjE4X0ZBU1RfUkFNUElORyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19WMThfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8xX1JFR19EQ0RDX1YxOF9JRExFX01JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8xX1JFRzogRENEQ19WMThfSURMRV9NSU4gKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8xX1JFR19EQ0RDX1YxOF9JRExFX01JTl9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8xX1JFRzogRENEQ19WMThfSURMRV9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfSURMRV9IWVNUX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0lETEVfSFlTVCAoQml0IDUpICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfSURMRV9IWVNUX01zayAoMHgzZTBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0lETEVfSFlTVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8xX1JFR19EQ0RDX1YxOF9DVVJfTElNX01BWF9MVl9Qb3MgKDEwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8xX1JFRzogRENEQ19WMThfQ1VSX0xJTV9NQVhfTFYgKEJpdCAxMCkgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8xX1JFR19EQ0RDX1YxOF9DVVJfTElNX01BWF9MVl9Nc2sgKDB4M2MwMFVMKSAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8xX1JFRzogRENEQ19WMThfQ1VSX0xJTV9NQVhfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfRU5BQkxFX0xWX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0VOQUJMRV9MViAoQml0IDE0KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThfMV9SRUdfRENEQ19WMThfRU5BQkxFX0xWX01zayAoMHg0MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThfMV9SRUc6IERDRENfVjE4X0VOQUJMRV9MViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8xX1JFR19EQ0RDX1YxOF9FTkFCTEVfSFZfUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8xX1JFRzogRENEQ19WMThfRU5BQkxFX0hWIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOF8xX1JFR19EQ0RDX1YxOF9FTkFCTEVfSFZfTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOF8xX1JFRzogRENEQ19WMThfRU5BQkxFX0hWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1ZERF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzBfUkVHX0RDRENfVkREX0NVUl9MSU1fTUlOX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzBfUkVHOiBEQ0RDX1ZERF9DVVJfTElNX01JTiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVkREXzBfUkVHX0RDRENfVkREX0NVUl9MSU1fTUlOX01zayAoMHgxZlVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVkREXzBfUkVHOiBEQ0RDX1ZERF9DVVJfTElNX01JTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8wX1JFR19EQ0RDX1ZERF9DVVJfTElNX01BWF9IVl9Qb3MgKDVVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8wX1JFRzogRENEQ19WRERfQ1VSX0xJTV9NQVhfSFYgKEJpdCA1KSAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8wX1JFR19EQ0RDX1ZERF9DVVJfTElNX01BWF9IVl9Nc2sgKDB4M2UwVUwpICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8wX1JFRzogRENEQ19WRERfQ1VSX0xJTV9NQVhfSFYgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMF9SRUdfRENEQ19WRERfVk9MVEFHRV9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMF9SRUc6IERDRENfVkREX1ZPTFRBR0UgKEJpdCAxMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMF9SRUdfRENEQ19WRERfVk9MVEFHRV9Nc2sgKDB4N2MwMFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMF9SRUc6IERDRENfVkREX1ZPTFRBR0UgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMF9SRUdfRENEQ19WRERfRkFTVF9SQU1QSU5HX1BvcyAoMTVVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMF9SRUc6IERDRENfVkREX0ZBU1RfUkFNUElORyAoQml0IDE1KSAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMF9SRUdfRENEQ19WRERfRkFTVF9SQU1QSU5HX01zayAoMHg4MDAwVUwpICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMF9SRUc6IERDRENfVkREX0ZBU1RfUkFNUElORyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19WRERfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8xX1JFR19EQ0RDX1ZERF9JRExFX01JTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8xX1JFRzogRENEQ19WRERfSURMRV9NSU4gKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8xX1JFR19EQ0RDX1ZERF9JRExFX01JTl9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8xX1JFRzogRENEQ19WRERfSURMRV9NSU4gKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfSURMRV9IWVNUX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0lETEVfSFlTVCAoQml0IDUpICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfSURMRV9IWVNUX01zayAoMHgzZTBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0lETEVfSFlTVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8xX1JFR19EQ0RDX1ZERF9DVVJfTElNX01BWF9MVl9Qb3MgKDEwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8xX1JFRzogRENEQ19WRERfQ1VSX0xJTV9NQVhfTFYgKEJpdCAxMCkgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8xX1JFR19EQ0RDX1ZERF9DVVJfTElNX01BWF9MVl9Nc2sgKDB4M2MwMFVMKSAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8xX1JFRzogRENEQ19WRERfQ1VSX0xJTV9NQVhfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfRU5BQkxFX0xWX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0VOQUJMRV9MViAoQml0IDE0KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WRERfMV9SRUdfRENEQ19WRERfRU5BQkxFX0xWX01zayAoMHg0MDAwVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19WRERfMV9SRUc6IERDRENfVkREX0VOQUJMRV9MViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8xX1JFR19EQ0RDX1ZERF9FTkFCTEVfSFZfUG9zICgxNVVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8xX1JFRzogRENEQ19WRERfRU5BQkxFX0hWIChCaXQgMTUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1ZERF8xX1JFR19EQ0RDX1ZERF9FTkFCTEVfSFZfTXNrICgweDgwMDBVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1ZERF8xX1JFRzogRENEQ19WRERfRU5BQkxFX0hWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVjE4UF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfQ1VSX0xJTV9NSU5fUG9zICgwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX0NVUl9MSU1fTUlOIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfQ1VSX0xJTV9NSU5fTXNrICgweDFmVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX0NVUl9MSU1fTUlOIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfQ1VSX0xJTV9NQVhfSFZfUG9zICg1VUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX0NVUl9MSU1fTUFYX0hWIChCaXQgNSkgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfQ1VSX0xJTV9NQVhfSFZfTXNrICgweDNlMFVMKSAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX0NVUl9MSU1fTUFYX0hWIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfVk9MVEFHRV9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX1ZPTFRBR0UgKEJpdCAxMCkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8wX1JFR19EQ0RDX1YxOFBfVk9MVEFHRV9Nc2sgKDB4N2MwMFVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8wX1JFRzogRENEQ19WMThQX1ZPTFRBR0UgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzBfUkVHX0RDRENfVjE4UF9GQVNUX1JBTVBJTkdfUG9zICgxNVVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThQXzBfUkVHOiBEQ0RDX1YxOFBfRkFTVF9SQU1QSU5HIChCaXQgMTUpICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzBfUkVHX0RDRENfVjE4UF9GQVNUX1JBTVBJTkdfTXNrICgweDgwMDBVTCkgICAgICAvKiE8IERDREMgRENEQ19WMThQXzBfUkVHOiBEQ0RDX1YxOFBfRkFTVF9SQU1QSU5HIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVjE4UF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8xX1JFR19EQ0RDX1YxOFBfSURMRV9NSU5fUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8xX1JFRzogRENEQ19WMThQX0lETEVfTUlOIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8xX1JFR19EQ0RDX1YxOFBfSURMRV9NSU5fTXNrICgweDFmVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8xX1JFRzogRENEQ19WMThQX0lETEVfTUlOIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8xX1JFR19EQ0RDX1YxOFBfSURMRV9IWVNUX1BvcyAoNVVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8xX1JFRzogRENEQ19WMThQX0lETEVfSFlTVCAoQml0IDUpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVjE4UF8xX1JFR19EQ0RDX1YxOFBfSURMRV9IWVNUX01zayAoMHgzZTBVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfVjE4UF8xX1JFRzogRENEQ19WMThQX0lETEVfSFlTVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0NVUl9MSU1fTUFYX0xWX1BvcyAoMTBVTCkgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9DVVJfTElNX01BWF9MViAoQml0IDEwKSAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0NVUl9MSU1fTUFYX0xWX01zayAoMHgzYzAwVUwpICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9DVVJfTElNX01BWF9MViAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0VOQUJMRV9MVl9Qb3MgKDE0VUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9FTkFCTEVfTFYgKEJpdCAxNCkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1YxOFBfMV9SRUdfRENEQ19WMThQX0VOQUJMRV9MVl9Nc2sgKDB4NDAwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1YxOFBfMV9SRUc6IERDRENfVjE4UF9FTkFCTEVfTFYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzFfUkVHX0RDRENfVjE4UF9FTkFCTEVfSFZfUG9zICgxNVVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19WMThQXzFfUkVHOiBEQ0RDX1YxOFBfRU5BQkxFX0hWIChCaXQgMTUpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19WMThQXzFfUkVHX0RDRENfVjE4UF9FTkFCTEVfSFZfTXNrICgweDgwMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19WMThQXzFfUkVHOiBEQ0RDX1YxOFBfRU5BQkxFX0hWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1JFVF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzBfUkVHX0RDRENfVkREX0NVUl9MSU1fUkVUX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzBfUkVHOiBEQ0RDX1ZERF9DVVJfTElNX1JFVCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzBfUkVHX0RDRENfVkREX0NVUl9MSU1fUkVUX01zayAoMHgxZlVMKSAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzBfUkVHOiBEQ0RDX1ZERF9DVVJfTElNX1JFVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1ZERF9SRVRfQ1lDTEVTX1BvcyAoNVVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WRERfUkVUX0NZQ0xFUyAoQml0IDUpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1ZERF9SRVRfQ1lDTEVTX01zayAoMHhlMFVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WRERfUkVUX0NZQ0xFUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1YxOFBfQ1VSX0xJTV9SRVRfUG9zICg4VUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WMThQX0NVUl9MSU1fUkVUIChCaXQgOCkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8wX1JFR19EQ0RDX1YxOFBfQ1VSX0xJTV9SRVRfTXNrICgweDFmMDBVTCkgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8wX1JFRzogRENEQ19WMThQX0NVUl9MSU1fUkVUIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzBfUkVHX0RDRENfVjE4UF9SRVRfQ1lDTEVTX1BvcyAoMTNVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzBfUkVHOiBEQ0RDX1YxOFBfUkVUX0NZQ0xFUyAoQml0IDEzKSAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzBfUkVHX0RDRENfVjE4UF9SRVRfQ1lDTEVTX01zayAoMHhlMDAwVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzBfUkVHOiBEQ0RDX1YxOFBfUkVUX0NZQ0xFUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19SRVRfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8xX1JFR19EQ0RDX1YxNF9DVVJfTElNX1JFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8xX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9SRVQgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1JFVF8xX1JFR19EQ0RDX1YxNF9DVVJfTElNX1JFVF9Nc2sgKDB4MWZVTCkgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1JFVF8xX1JFRzogRENEQ19WMTRfQ1VSX0xJTV9SRVQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMV9SRUdfRENEQ19WMTRfUkVUX0NZQ0xFU19Qb3MgKDVVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMV9SRUc6IERDRENfVjE0X1JFVF9DWUNMRVMgKEJpdCA1KSAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMV9SRUdfRENEQ19WMTRfUkVUX0NZQ0xFU19Nc2sgKDB4ZTBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMV9SRUc6IERDRENfVjE0X1JFVF9DWUNMRVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMV9SRUdfRENEQ19WMThfQ1VSX0xJTV9SRVRfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMV9SRUc6IERDRENfVjE4X0NVUl9MSU1fUkVUIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19SRVRfMV9SRUdfRENEQ19WMThfQ1VSX0xJTV9SRVRfTXNrICgweDFmMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19SRVRfMV9SRUc6IERDRENfVjE4X0NVUl9MSU1fUkVUIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzFfUkVHX0RDRENfVjE4X1JFVF9DWUNMRVNfUG9zICgxM1VMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzFfUkVHOiBEQ0RDX1YxOF9SRVRfQ1lDTEVTIChCaXQgMTMpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfUkVUXzFfUkVHX0RDRENfVjE4X1JFVF9DWUNMRVNfTXNrICgweGUwMDBVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfUkVUXzFfUkVHOiBEQ0RDX1YxOF9SRVRfQ1lDTEVTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1RSSU1fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19OX0NPTVBfVFJJTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfTl9DT01QX1RSSU0gKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19OX0NPTVBfVFJJTV9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfTl9DT01QX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19OX0NPTVBfTUFOX1RSSU1fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfTl9DT01QX01BTl9UUklNIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19OX0NPTVBfTUFOX1RSSU1fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfTl9DT01QX01BTl9UUklNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19QX0NPTVBfVFJJTV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfUF9DT01QX1RSSU0gKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19QX0NPTVBfVFJJTV9Nc2sgKDB4MWY4MFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfUF9DT01QX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19QX0NPTVBfTUFOX1RSSU1fUG9zICgxM1VMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfUF9DT01QX01BTl9UUklNIChCaXQgMTMpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVFJJTV9SRUdfRENEQ19QX0NPTVBfTUFOX1RSSU1fTXNrICgweDIwMDBVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfVFJJTV9SRUc6IERDRENfUF9DT01QX01BTl9UUklNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfVEVTVF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1BTV19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9QU1cgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1BTV19Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9QU1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX05TV19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9OU1cgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX05TV19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9OU1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX0ZXX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9GVyAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX0ZXX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9GVyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1YxNF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WMTQgKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1YxNF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WMTQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1YxOF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WMTggKEJpdCA0KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1YxOF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WMTggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1ZERF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WREQgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1ZERF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WREQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1YxOFBfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WMThQIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX1YxOFBfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9WMThQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX0lETEVfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9JRExFIChCaXQgNykgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0ZPUkNFX0lETEVfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19GT1JDRV9JRExFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0FOQV9URVNUX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19BTkFfVEVTVCAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX0FOQV9URVNUX01zayAoMHg3MDBVTCkgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19BTkFfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwNykgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX09VVFBVVF9NT05JVE9SX1BvcyAoMTFVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19PVVRQVVRfTU9OSVRPUiAoQml0IDExKSAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfVEVTVF8wX1JFR19EQ0RDX09VVFBVVF9NT05JVE9SX01zayAoMHgzODAwVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfVEVTVF8wX1JFRzogRENEQ19PVVRQVVRfTU9OSVRPUiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9DVVJSRU5UX1BvcyAoMTRVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfQ1VSUkVOVCAoQml0IDE0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9DVVJSRU5UX01zayAoMHg0MDAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfQ1VSUkVOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9DT01QX0NMS19Qb3MgKDE1VUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfQ09NUF9DTEsgKEJpdCAxNSkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMF9SRUdfRENEQ19GT1JDRV9DT01QX0NMS19Nc2sgKDB4ODAwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMF9SRUc6IERDRENfRk9SQ0VfQ09NUF9DTEsgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19URVNUXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzFfUkVHX0RDRENfVEVTVF9SRUdfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzFfUkVHOiBEQ0RDX1RFU1RfUkVHIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzFfUkVHX0RDRENfVEVTVF9SRUdfTXNrICgweGZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzFfUkVHOiBEQ0RDX1RFU1RfUkVHIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzFfUkVHX0RDRENfVEVTVF9DVVJSRU5UX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzFfUkVHOiBEQ0RDX1RFU1RfQ1VSUkVOVCAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19URVNUXzFfUkVHX0RDRENfVEVTVF9DVVJSRU5UX01zayAoMHgxZjBVTCkgICAgICAgICAgICAvKiE8IERDREMgRENEQ19URVNUXzFfUkVHOiBEQ0RDX1RFU1RfQ1VSUkVOVCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMV9SRUdfRENEQ19DT01QX0NMS19Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMV9SRUc6IERDRENfQ09NUF9DTEsgKEJpdCA5KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RFU1RfMV9SRUdfRENEQ19DT01QX0NMS19Nc2sgKDB4MWUwMFVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RFU1RfMV9SRUc6IERDRENfQ09NUF9DTEsgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfU1RBVFVTXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18wX1JFR19EQ0RDX0NIQVJHRV9SRUdfMF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18wX1JFRzogRENEQ19DSEFSR0VfUkVHXzAgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18wX1JFR19EQ0RDX0NIQVJHRV9SRUdfMF9Nc2sgKDB4N1VMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18wX1JFRzogRENEQ19DSEFSR0VfUkVHXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMF9SRUdfRENEQ19DSEFSR0VfUkVHXzFfUG9zICgzVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMF9SRUc6IERDRENfQ0hBUkdFX1JFR18xIChCaXQgMykgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMF9SRUdfRENEQ19DSEFSR0VfUkVHXzFfTXNrICgweDM4VUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMF9SRUc6IERDRENfQ0hBUkdFX1JFR18xIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzBfUkVHX0RDRENfQ0hBUkdFX1JFR18yX1BvcyAoNlVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzBfUkVHOiBEQ0RDX0NIQVJHRV9SRUdfMiAoQml0IDYpICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzBfUkVHX0RDRENfQ0hBUkdFX1JFR18yX01zayAoMHgxYzBVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzBfUkVHOiBEQ0RDX0NIQVJHRV9SRUdfMiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18wX1JFR19EQ0RDX0NIQVJHRV9SRUdfM19Qb3MgKDlVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18wX1JFRzogRENEQ19DSEFSR0VfUkVHXzMgKEJpdCA5KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18wX1JFR19EQ0RDX0NIQVJHRV9SRUdfM19Nc2sgKDB4ZTAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18wX1JFRzogRENEQ19DSEFSR0VfUkVHXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1NUQVRVU18xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMTRfTk9LX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE0X05PSyAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMTRfTk9LX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE0X05PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThfTk9LX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4X05PSyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThfTk9LX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4X05PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WRERfTk9LX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVkREX05PSyAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WRERfTk9LX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVkREX05PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThQX05PS19Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4UF9OT0sgKEJpdCAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThQX05PS19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4UF9OT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMTRfT0tfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE0X09LIChCaXQgNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMTRfT0tfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE0X09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThfT0tfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4X09LIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThfT0tfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4X09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WRERfT0tfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVkREX09LIChCaXQgNikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WRERfT0tfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVkREX09LIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThQX09LX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4UF9PSyAoQml0IDcpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThQX09LX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4UF9PSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMTRfQVZBSUxBQkxFX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE0X0FWQUlMQUJMRSAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMTRfQVZBSUxBQkxFX01zayAoMHgxMDBVTCkgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE0X0FWQUlMQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18xX1JFR19EQ0RDX1YxOF9BVkFJTEFCTEVfUG9zICg5VUwpICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18xX1JFRzogRENEQ19WMThfQVZBSUxBQkxFIChCaXQgOSkgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18xX1JFR19EQ0RDX1YxOF9BVkFJTEFCTEVfTXNrICgweDIwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18xX1JFRzogRENEQ19WMThfQVZBSUxBQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVkREX0FWQUlMQUJMRV9Qb3MgKDEwVUwpICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1ZERF9BVkFJTEFCTEUgKEJpdCAxMCkgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzFfUkVHX0RDRENfVkREX0FWQUlMQUJMRV9Nc2sgKDB4NDAwVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzFfUkVHOiBEQ0RDX1ZERF9BVkFJTEFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThQX0FWQUlMQUJMRV9Qb3MgKDExVUwpICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4UF9BVkFJTEFCTEUgKEJpdCAxMSkgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMV9SRUdfRENEQ19WMThQX0FWQUlMQUJMRV9Nc2sgKDB4ODAwVUwpICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMV9SRUc6IERDRENfVjE4UF9BVkFJTEFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1NUQVRVU18yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19OX0NPTVBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfTl9DT01QIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19OX0NPTVBfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfTl9DT01QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QX0NPTVBfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUF9DT01QIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QX0NPTVBfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUF9DT01QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19OX0NPTVBfTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfTl9DT01QX04gKEJpdCAyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19OX0NPTVBfTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfTl9DT01QX04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19OX0NPTVBfUF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfTl9DT01QX1AgKEJpdCAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19OX0NPTVBfUF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfTl9DT01QX1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QX0NPTVBfTl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUF9DT01QX04gKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QX0NPTVBfTl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUF9DT01QX04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QX0NPTVBfUF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUF9DT01QX1AgKEJpdCA1KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QX0NPTVBfUF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUF9DT01QX1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QU1dfU1RBVEVfUG9zICg2VUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUFNXX1NUQVRFIChCaXQgNikgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19QU1dfU1RBVEVfTXNrICgweDQwVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfUFNXX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTlNXX1NUQVRFX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05TV19TVEFURSAoQml0IDcpICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfTlNXX1NUQVRFX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX05TV19TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX1YxNF9TV19TVEFURV9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19WMTRfU1dfU1RBVEUgKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX1YxNF9TV19TVEFURV9Nc2sgKDB4MTAwVUwpICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19WMTRfU1dfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19WMThfU1dfU1RBVEVfUG9zICg5VUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfVjE4X1NXX1NUQVRFIChCaXQgOSkgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfMl9SRUdfRENEQ19WMThfU1dfU1RBVEVfTXNrICgweDIwMFVMKSAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfMl9SRUc6IERDRENfVjE4X1NXX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfVkREX1NXX1NUQVRFX1BvcyAoMTBVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1ZERF9TV19TVEFURSAoQml0IDEwKSAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzJfUkVHX0RDRENfVkREX1NXX1NUQVRFX01zayAoMHg0MDBVTCkgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzJfUkVHOiBEQ0RDX1ZERF9TV19TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX1YxOFBfU1dfU1RBVEVfUG9zICgxMVVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19WMThQX1NXX1NUQVRFIChCaXQgMTEpICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18yX1JFR19EQ0RDX1YxOFBfU1dfU1RBVEVfTXNrICgweDgwMFVMKSAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18yX1JFRzogRENEQ19WMThQX1NXX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19TVEFUVVNfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHX0RDRENfSV9MSU1fVkREX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzNfUkVHOiBEQ0RDX0lfTElNX1ZERCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHX0RDRENfSV9MSU1fVkREX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzNfUkVHOiBEQ0RDX0lfTElNX1ZERCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX0lfTElNX1YxOFBfUG9zICg1VUwpICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19JX0xJTV9WMThQIChCaXQgNSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1NUQVRVU18zX1JFR19EQ0RDX0lfTElNX1YxOFBfTXNrICgweDNlMFVMKSAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1NUQVRVU18zX1JFRzogRENEQ19JX0xJTV9WMThQIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHX0RDRENfTFZfTU9ERV9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzNfUkVHOiBEQ0RDX0xWX01PREUgKEJpdCAxMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHX0RDRENfTFZfTU9ERV9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzNfUkVHOiBEQ0RDX0xWX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHX0RDRENfU1RBUlRVUF9DT01QTEVURV9Qb3MgKDExVUwpICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzNfUkVHOiBEQ0RDX1NUQVJUVVBfQ09NUExFVEUgKEJpdCAxMSkgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzNfUkVHX0RDRENfU1RBUlRVUF9DT01QTEVURV9Nc2sgKDB4ODAwVUwpICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzNfUkVHOiBEQ0RDX1NUQVJUVVBfQ09NUExFVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1NUQVRVU180X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfNF9SRUdfRENEQ19JX0xJTV9WMTRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfNF9SRUc6IERDRENfSV9MSU1fVjE0IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19TVEFUVVNfNF9SRUdfRENEQ19JX0xJTV9WMTRfTXNrICgweDFmVUwpICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19TVEFUVVNfNF9SRUc6IERDRENfSV9MSU1fVjE0IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzRfUkVHX0RDRENfSV9MSU1fVjE4X1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzRfUkVHOiBEQ0RDX0lfTElNX1YxOCAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBEQ0RDX0RDRENfU1RBVFVTXzRfUkVHX0RDRENfSV9MSU1fVjE4X01zayAoMHgzZTBVTCkgICAgICAgICAgICAgLyohPCBEQ0RDIERDRENfU1RBVFVTXzRfUkVHOiBEQ0RDX0lfTElNX1YxOCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1RSSU1fMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMF9SRUdfRENEQ19WMTRfVFJJTV9OX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMF9SRUc6IERDRENfVjE0X1RSSU1fTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMF9SRUdfRENEQ19WMTRfVFJJTV9OX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMF9SRUc6IERDRENfVjE0X1RSSU1fTiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMF9SRUdfRENEQ19WMTRfVFJJTV9QX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMF9SRUc6IERDRENfVjE0X1RSSU1fUCAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMF9SRUdfRENEQ19WMTRfVFJJTV9QX01zayAoMHhmYzBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMF9SRUc6IERDRENfVjE0X1RSSU1fUCAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1RSSU1fMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMV9SRUdfRENEQ19WMThfVFJJTV9OX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMV9SRUc6IERDRENfVjE4X1RSSU1fTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMV9SRUdfRENEQ19WMThfVFJJTV9OX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMV9SRUc6IERDRENfVjE4X1RSSU1fTiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMV9SRUdfRENEQ19WMThfVFJJTV9QX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMV9SRUc6IERDRENfVjE4X1RSSU1fUCAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMV9SRUdfRENEQ19WMThfVFJJTV9QX01zayAoMHhmYzBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMV9SRUc6IERDRENfVjE4X1RSSU1fUCAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1RSSU1fMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMl9SRUdfRENEQ19WRERfVFJJTV9OX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMl9SRUc6IERDRENfVkREX1RSSU1fTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMl9SRUdfRENEQ19WRERfVFJJTV9OX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMl9SRUc6IERDRENfVkREX1RSSU1fTiAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMl9SRUdfRENEQ19WRERfVFJJTV9QX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMl9SRUc6IERDRENfVkREX1RSSU1fUCAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fMl9SRUdfRENEQ19WRERfVFJJTV9QX01zayAoMHhmYzBVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fMl9SRUc6IERDRENfVkREX1RSSU1fUCAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX1RSSU1fM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fM19SRUdfRENEQ19WMThQX1RSSU1fTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fM19SRUc6IERDRENfVjE4UF9UUklNX04gKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX1RSSU1fM19SRUdfRENEQ19WMThQX1RSSU1fTl9Nc2sgKDB4M2ZVTCkgICAgICAgICAgICAgIC8qITwgRENEQyBEQ0RDX1RSSU1fM19SRUc6IERDRENfVjE4UF9UUklNX04gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzNfUkVHX0RDRENfVjE4UF9UUklNX1BfUG9zICg2VUwpICAgICAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzNfUkVHOiBEQ0RDX1YxOFBfVFJJTV9QIChCaXQgNikgICAgICAgICAgICAgICovCisjZGVmaW5lIERDRENfRENEQ19UUklNXzNfUkVHX0RDRENfVjE4UF9UUklNX1BfTXNrICgweGZjMFVMKSAgICAgICAgICAgICAvKiE8IERDREMgRENEQ19UUklNXzNfUkVHOiBEQ0RDX1YxOFBfVFJJTV9QIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX1NUQVRVU19SRUdfRENEQ19WMTRfVElNRU9VVF9JUlFfU1RBVFVTX1BvcyAoMFVMKSAgLyohPCBEQ0RDIERDRENfSVJRX1NUQVRVU19SRUc6IERDRENfVjE0X1RJTUVPVVRfSVJRX1NUQVRVUyAoQml0IDApICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfU1RBVFVTX1JFR19EQ0RDX1YxNF9USU1FT1VUX0lSUV9TVEFUVVNfTXNrICgweDFVTCkgLyohPCBEQ0RDIERDRENfSVJRX1NUQVRVU19SRUc6IERDRENfVjE0X1RJTUVPVVRfSVJRX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfVjE4X1RJTUVPVVRfSVJRX1NUQVRVU19Qb3MgKDFVTCkgIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX1YxOF9USU1FT1VUX0lSUV9TVEFUVVMgKEJpdCAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX1NUQVRVU19SRUdfRENEQ19WMThfVElNRU9VVF9JUlFfU1RBVFVTX01zayAoMHgyVUwpIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX1YxOF9USU1FT1VUX0lSUV9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfU1RBVFVTX1JFR19EQ0RDX1ZERF9USU1FT1VUX0lSUV9TVEFUVVNfUG9zICgyVUwpICAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19WRERfVElNRU9VVF9JUlFfU1RBVFVTIChCaXQgMikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfVkREX1RJTUVPVVRfSVJRX1NUQVRVU19Nc2sgKDB4NFVMKSAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19WRERfVElNRU9VVF9JUlFfU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX1NUQVRVU19SRUdfRENEQ19WMThQX1RJTUVPVVRfSVJRX1NUQVRVU19Qb3MgKDNVTCkgLyohPCBEQ0RDIERDRENfSVJRX1NUQVRVU19SRUc6IERDRENfVjE4UF9USU1FT1VUX0lSUV9TVEFUVVMgKEJpdCAzKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX1NUQVRVU19SRUdfRENEQ19WMThQX1RJTUVPVVRfSVJRX1NUQVRVU19Nc2sgKDB4OFVMKSAvKiE8IERDREMgRENEQ19JUlFfU1RBVFVTX1JFRzogRENEQ19WMThQX1RJTUVPVVRfSVJRX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfQlJPV05fT1VUX0lSUV9TVEFUVVNfUG9zICg0VUwpICAgIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX0JST1dOX09VVF9JUlFfU1RBVFVTIChCaXQgNCkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9TVEFUVVNfUkVHX0RDRENfQlJPV05fT1VUX0lSUV9TVEFUVVNfTXNrICgweDEwVUwpIC8qITwgRENEQyBEQ0RDX0lSUV9TVEFUVVNfUkVHOiBEQ0RDX0JST1dOX09VVF9JUlFfU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX0NMRUFSX1JFR19EQ0RDX1YxNF9USU1FT1VUX0lSUV9DTEVBUl9Qb3MgKDBVTCkgICAgLyohPCBEQ0RDIERDRENfSVJRX0NMRUFSX1JFRzogRENEQ19WMTRfVElNRU9VVF9JUlFfQ0xFQVIgKEJpdCAwKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX0NMRUFSX1JFR19EQ0RDX1YxNF9USU1FT1VUX0lSUV9DTEVBUl9Nc2sgKDB4MVVMKSAgLyohPCBEQ0RDIERDRENfSVJRX0NMRUFSX1JFRzogRENEQ19WMTRfVElNRU9VVF9JUlFfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfVjE4X1RJTUVPVVRfSVJRX0NMRUFSX1BvcyAoMVVMKSAgICAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX1YxOF9USU1FT1VUX0lSUV9DTEVBUiAoQml0IDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfQ0xFQVJfUkVHX0RDRENfVjE4X1RJTUVPVVRfSVJRX0NMRUFSX01zayAoMHgyVUwpICAvKiE8IERDREMgRENEQ19JUlFfQ0xFQVJfUkVHOiBEQ0RDX1YxOF9USU1FT1VUX0lSUV9DTEVBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19WRERfVElNRU9VVF9JUlFfQ0xFQVJfUG9zICgyVUwpICAgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfVkREX1RJTUVPVVRfSVJRX0NMRUFSIChCaXQgMikgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19WRERfVElNRU9VVF9JUlFfQ0xFQVJfTXNrICgweDRVTCkgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfVkREX1RJTUVPVVRfSVJRX0NMRUFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBEQ0RDX0RDRENfSVJRX0NMRUFSX1JFR19EQ0RDX1YxOFBfVElNRU9VVF9JUlFfQ0xFQVJfUG9zICgzVUwpICAgLyohPCBEQ0RDIERDRENfSVJRX0NMRUFSX1JFRzogRENEQ19WMThQX1RJTUVPVVRfSVJRX0NMRUFSIChCaXQgMykgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19WMThQX1RJTUVPVVRfSVJRX0NMRUFSX01zayAoMHg4VUwpIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfVjE4UF9USU1FT1VUX0lSUV9DTEVBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19CUk9XTl9PVVRfSVJRX0NMRUFSX1BvcyAoNFVMKSAgICAgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfQlJPV05fT1VUX0lSUV9DTEVBUiAoQml0IDQpICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9DTEVBUl9SRUdfRENEQ19CUk9XTl9PVVRfSVJRX0NMRUFSX01zayAoMHgxMFVMKSAgIC8qITwgRENEQyBEQ0RDX0lSUV9DTEVBUl9SRUc6IERDRENfQlJPV05fT1VUX0lSUV9DTEVBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEQ0RDX0RDRENfSVJRX01BU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1YxNF9USU1FT1VUX0lSUV9NQVNLX1BvcyAoMFVMKSAgICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WMTRfVElNRU9VVF9JUlFfTUFTSyAoQml0IDApICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1YxNF9USU1FT1VUX0lSUV9NQVNLX01zayAoMHgxVUwpICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WMTRfVElNRU9VVF9JUlFfTUFTSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1YxOF9USU1FT1VUX0lSUV9NQVNLX1BvcyAoMVVMKSAgICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WMThfVElNRU9VVF9JUlFfTUFTSyAoQml0IDEpICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1YxOF9USU1FT1VUX0lSUV9NQVNLX01zayAoMHgyVUwpICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WMThfVElNRU9VVF9JUlFfTUFTSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1ZERF9USU1FT1VUX0lSUV9NQVNLX1BvcyAoMlVMKSAgICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WRERfVElNRU9VVF9JUlFfTUFTSyAoQml0IDIpICAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1ZERF9USU1FT1VUX0lSUV9NQVNLX01zayAoMHg0VUwpICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WRERfVElNRU9VVF9JUlFfTUFTSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1YxOFBfVElNRU9VVF9JUlFfTUFTS19Qb3MgKDNVTCkgICAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WMThQX1RJTUVPVVRfSVJRX01BU0sgKEJpdCAzKSAgKi8KKyNkZWZpbmUgRENEQ19EQ0RDX0lSUV9NQVNLX1JFR19EQ0RDX1YxOFBfVElNRU9VVF9JUlFfTUFTS19Nc2sgKDB4OFVMKSAgIC8qITwgRENEQyBEQ0RDX0lSUV9NQVNLX1JFRzogRENEQ19WMThQX1RJTUVPVVRfSVJRX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19CUk9XTl9PVVRfSVJRX01BU0tfUG9zICg0VUwpICAgICAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfQlJPV05fT1VUX0lSUV9NQVNLIChCaXQgNCkgICAgICovCisjZGVmaW5lIERDRENfRENEQ19JUlFfTUFTS19SRUdfRENEQ19CUk9XTl9PVVRfSVJRX01BU0tfTXNrICgweDEwVUwpICAgICAvKiE8IERDREMgRENEQ19JUlFfTUFTS19SRUc6IERDRENfQlJPV05fT1VUX0lSUV9NQVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnREVNJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0RFTV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX1JYREFUQV9JTlZfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBSWERBVEFfSU5WIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX1JYREFUQV9JTlZfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBSWERBVEFfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0RFTV9IU0lfUE9MX1BvcyAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBERU1fSFNJX1BPTCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0RFTV9IU0lfUE9MX01zayAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBERU1fSFNJX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX01BVENIMDEwMV9USF9Qb3MgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBNQVRDSDAxMDFfVEggKEJpdCAyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX01BVENIMDEwMV9USF9Nc2sgICgweDNjVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBNQVRDSDAxMDFfVEggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0VRVUFMX0VOX1BvcyAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBFUVVBTF9FTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0VRVUFMX0VOX01zayAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBFUVVBTF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0JMRV9ERENfRU5fUG9zICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBCTEVfRERDX0VOIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0JMRV9ERENfRU5fTXNrICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBCTEVfRERDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0lRQ09SUl9FTl9Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBJUUNPUlJfRU4gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0lRQ09SUl9FTl9Nc2sgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBJUUNPUlJfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0NGRV9ET1VCTEVfRU5fUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBDRkVfRE9VQkxFX0VOIChCaXQgOSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0NGRV9ET1VCTEVfRU5fTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBDRkVfRE9VQkxFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0NGRV9NRURJQU5fRU5fUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBDRkVfTUVESUFOX0VOIChCaXQgMTApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0NGRV9NRURJQU5fRU5fTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBDRkVfTUVESUFOX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0NGRV9QUE9MRV9Qb3MgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBDRkVfUFBPTEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX0NUUkxfUkVHX0NGRV9QUE9MRV9Nc2sgICAgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX0NUUkxfUkVHOiBDRkVfUFBPTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0xVVF8wMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMl9HQUlOMF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTJfR0FJTjAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMl9HQUlOMF9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTJfR0FJTjAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMV9HQUlOMF9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTFfR0FJTjAgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMV9HQUlOMF9Nc2sgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTFfR0FJTjAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfTE5BX0dBSU4wX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IExOQV9HQUlOMCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfTE5BX0dBSU4wX01zayAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IExOQV9HQUlOMCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMl9HQUlOMV9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTJfR0FJTjEgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMl9HQUlOMV9Nc2sgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTJfR0FJTjEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMV9HQUlOMV9Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTFfR0FJTjEgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfVkdBMV9HQUlOMV9Nc2sgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IFZHQTFfR0FJTjEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfTE5BX0dBSU4xX1BvcyAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IExOQV9HQUlOMSAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8wMV9SRUdfTE5BX0dBSU4xX01zayAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8wMV9SRUc6IExOQV9HQUlOMSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0xVVF8yM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMl9HQUlOMl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTJfR0FJTjIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMl9HQUlOMl9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTJfR0FJTjIgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMV9HQUlOMl9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTFfR0FJTjIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMV9HQUlOMl9Nc2sgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTFfR0FJTjIgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfTE5BX0dBSU4yX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IExOQV9HQUlOMiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfTE5BX0dBSU4yX01zayAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IExOQV9HQUlOMiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMl9HQUlOM19Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTJfR0FJTjMgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMl9HQUlOM19Nc2sgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTJfR0FJTjMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMV9HQUlOM19Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTFfR0FJTjMgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfVkdBMV9HQUlOM19Nc2sgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IFZHQTFfR0FJTjMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfTE5BX0dBSU4zX1BvcyAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IExOQV9HQUlOMyAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF8yM19SRUdfTE5BX0dBSU4zX01zayAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF8yM19SRUc6IExOQV9HQUlOMyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0xVVF80NV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMl9HQUlONF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTJfR0FJTjQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMl9HQUlONF9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTJfR0FJTjQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMV9HQUlONF9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTFfR0FJTjQgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMV9HQUlONF9Nc2sgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTFfR0FJTjQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfTE5BX0dBSU40X1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IExOQV9HQUlONCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfTE5BX0dBSU40X01zayAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IExOQV9HQUlONCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMl9HQUlONV9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTJfR0FJTjUgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMl9HQUlONV9Nc2sgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTJfR0FJTjUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMV9HQUlONV9Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTFfR0FJTjUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfVkdBMV9HQUlONV9Nc2sgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IFZHQTFfR0FJTjUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfTE5BX0dBSU41X1BvcyAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IExOQV9HQUlONSAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF80NV9SRUdfTE5BX0dBSU41X01zayAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF80NV9SRUc6IExOQV9HQUlONSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0xVVF82N19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMl9HQUlONl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTJfR0FJTjYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMl9HQUlONl9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTJfR0FJTjYgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMV9HQUlONl9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTFfR0FJTjYgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMV9HQUlONl9Nc2sgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTFfR0FJTjYgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfTE5BX0dBSU42X1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IExOQV9HQUlONiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfTE5BX0dBSU42X01zayAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IExOQV9HQUlONiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMl9HQUlON19Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTJfR0FJTjcgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMl9HQUlON19Nc2sgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTJfR0FJTjcgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMV9HQUlON19Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTFfR0FJTjcgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfVkdBMV9HQUlON19Nc2sgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IFZHQTFfR0FJTjcgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfTE5BX0dBSU43X1BvcyAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IExOQV9HQUlONyAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF82N19SRUdfTE5BX0dBSU43X01zayAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF82N19SRUc6IExOQV9HQUlONyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0xVVF84OV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMl9HQUlOOF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTJfR0FJTjggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMl9HQUlOOF9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTJfR0FJTjggKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMV9HQUlOOF9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTFfR0FJTjggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMV9HQUlOOF9Nc2sgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTFfR0FJTjggKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfTE5BX0dBSU44X1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IExOQV9HQUlOOCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfTE5BX0dBSU44X01zayAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IExOQV9HQUlOOCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMl9HQUlOOV9Qb3MgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTJfR0FJTjkgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMl9HQUlOOV9Nc2sgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTJfR0FJTjkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMV9HQUlOOV9Qb3MgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTFfR0FJTjkgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfVkdBMV9HQUlOOV9Nc2sgICgweDM4MDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IFZHQTFfR0FJTjkgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfTE5BX0dBSU45X1BvcyAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IExOQV9HQUlOOSAoQml0IDE0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0xVVF84OV9SRUdfTE5BX0dBSU45X01zayAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0xVVF84OV9SRUc6IExOQV9HQUlOOSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwxX1JFR19BR0NfVEhfTE9XX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwxX1JFRzogQUdDX1RIX0xPVyAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwxX1JFR19BR0NfVEhfTE9XX01zayAgICgweDdmVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwxX1JFRzogQUdDX1RIX0xPVyAoQml0ZmllbGQtTWFzazogMHg3ZikgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwxX1JFR19BR0NfVEhfSElHSF9Qb3MgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwxX1JFRzogQUdDX1RIX0hJR0ggKEJpdCA3KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwxX1JFR19BR0NfVEhfSElHSF9Nc2sgICgweDNmODBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwxX1JFRzogQUdDX1RIX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwxX1JFR19BR0NfTU9ERV9Qb3MgICAgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwxX1JFRzogQUdDX01PREUgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwxX1JFR19BR0NfTU9ERV9Nc2sgICAgICgweGMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwxX1JFRzogQUdDX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfQUdDX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19SU1NJX1RIX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogUlNTSV9USCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19SU1NJX1RIX01zayAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogUlNTSV9USCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19FTl9GUlpfR0FJTl9Qb3MgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogRU5fRlJaX0dBSU4gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19FTl9GUlpfR0FJTl9Nc2sgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogRU5fRlJaX0dBSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19BR0NTRVRUSU5HX1NFTF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogQUdDU0VUVElOR19TRUwgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19BR0NTRVRUSU5HX1NFTF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogQUdDU0VUVElOR19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19BR0NTRVRUSU5HX1dSX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogQUdDU0VUVElOR19XUiAoQml0IDgpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19BR0NTRVRUSU5HX1dSX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogQUdDU0VUVElOR19XUiAoQml0ZmllbGQtTWFzazogMHgwZikgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19TTE9XX0FHQ19Qb3MgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogU0xPV19BR0MgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUdDX0NUUkwyX1JFR19TTE9XX0FHQ19Nc2sgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUdDX0NUUkwyX1JFRzogU0xPV19BR0MgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FGQ19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX0FGQ19NT0RFX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBBRkNfTU9ERSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX0FGQ19NT0RFX01zayAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBBRkNfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX1BPTEUxX1BvcyAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBQT0xFMSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX1BPTEUxX01zayAgICAgICAgICgweDMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBQT0xFMSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX1BPTEUyX1BvcyAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBQT0xFMiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX1BPTEUyX01zayAgICAgICAgICgweGMwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBQT0xFMiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX1BBRF9NT0RFX1BvcyAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBQQURfTU9ERSAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX1BBRF9NT0RFX01zayAgICAgICgweDMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBQQURfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX0FQRF9NT0RFX1BvcyAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBBUERfTU9ERSAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfQUZDX0NUUkxfUkVHX0FQRF9NT0RFX01zayAgICAgICgweDFjMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfQUZDX0NUUkxfUkVHOiBBUERfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRENfT0ZGU0VUX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwxX1JFR19EQ09GRlNFVF9JX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwxX1JFRzogRENPRkZTRVRfSV9XUiAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX0NUUkwxX1JFR19EQ09GRlNFVF9JX1dSX01zayAoMHhmZlVMKSAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX0NUUkwxX1JFRzogRENPRkZTRVRfSV9XUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMV9SRUdfRENPRkZTRVRfUV9XUl9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMV9SRUc6IERDT0ZGU0VUX1FfV1IgKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMV9SRUdfRENPRkZTRVRfUV9XUl9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMV9SRUc6IERDT0ZGU0VUX1FfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDT0ZGU0VUX1NFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ09GRlNFVF9TRUwgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDT0ZGU0VUX1NFTF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ09GRlNFVF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDUEFSQ0FMX0VOX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1BBUkNBTF9FTiAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDUEFSQ0FMX0VOX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1BBUkNBTF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENQT0xFX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDUE9MRSAoQml0IDIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENQT0xFX01zayAoMHhjVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDUE9MRSAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENOU1RFUF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDTlNURVAgKEJpdCA0KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENOU1RFUF9Nc2sgKDB4NzBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDTlNURVAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENOR0FJTl9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDTkdBSU4gKEJpdCA3KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENOR0FJTl9Nc2sgKDB4MTgwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDTkdBSU4gKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENQQVJDQUxfSU5JVF9Qb3MgKDlVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDUEFSQ0FMX0lOSVQgKEJpdCA5KSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMMl9SRUdfRENQQVJDQUxfSU5JVF9Nc2sgKDB4MjAwVUwpICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMMl9SRUc6IERDUEFSQ0FMX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDVkdBMVNDQUxFX0VOX1BvcyAoMTBVTCkgICAgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1ZHQTFTQ0FMRV9FTiAoQml0IDEwKSAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHX0RDVkdBMVNDQUxFX0VOX01zayAoMHg0MDBVTCkgICAgICAgICAvKiE8IERFTSBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOiBEQ1ZHQTFTQ0FMRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0RDX09GRlNFVF9DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMM19SRUdfRENCRVRBX0lfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMM19SRUc6IERDQkVUQV9JIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMM19SRUdfRENCRVRBX0lfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMM19SRUc6IERDQkVUQV9JIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMM19SRUdfRENCRVRBX1FfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMM19SRUc6IERDQkVUQV9RIChCaXQgOCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMM19SRUdfRENCRVRBX1FfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMM19SRUc6IERDQkVUQV9RIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwwX1BvcyAoMFVMKSAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMCAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwwX01zayAoMHhmVUwpICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwxX1BvcyAoNFVMKSAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMSAoQml0IDQpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwxX01zayAoMHhmMFVMKSAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwyX1BvcyAoOFVMKSAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMiAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwyX01zayAoMHhmMDBVTCkgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwzX1BvcyAoMTJVTCkgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMyAoQml0IDEyKSAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9DVFJMNF9SRUdfRENBR0NTRVRUSU5HX0ZVTEwzX01zayAoMHhmMDAwVUwpICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9DVFJMNF9SRUc6IERDQUdDU0VUVElOR19GVUxMMyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0FHQ19SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19SRVNVTFRfUkVHX0FGQ19SRF9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19SRVNVTFRfUkVHOiBBRkNfUkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19SRVNVTFRfUkVHX0FGQ19SRF9Nc2sgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19SRVNVTFRfUkVHOiBBRkNfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19SRVNVTFRfUkVHX0FHQ1NFVFRJTkdfUkRfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19SRVNVTFRfUkVHOiBBR0NTRVRUSU5HX1JEIChCaXQgOCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0FHQ19SRVNVTFRfUkVHX0FHQ1NFVFRJTkdfUkRfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0FHQ19SRVNVTFRfUkVHOiBBR0NTRVRUSU5HX1JEIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfUlNTSV9SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfUkVTVUxUX1JFR19SU1NJX1BIX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfUkVTVUxUX1JFRzogUlNTSV9QSF9SRCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfUkVTVUxUX1JFR19SU1NJX1BIX1JEX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfUkVTVUxUX1JFRzogUlNTSV9QSF9SRCAoQml0ZmllbGQtTWFzazogMHgzZikgICAgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfUkVTVUxUX1JFR19SU1NJX0FWR19SRF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfUkVTVUxUX1JFRzogUlNTSV9BVkdfUkQgKEJpdCA2KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfUkVTVUxUX1JFR19SU1NJX0FWR19SRF9Nc2sgKDB4ZmZjMFVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfUkVTVUxUX1JFRzogUlNTSV9BVkdfUkQgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0RDX09GRlNFVF9SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9SRVNVTFRfUkVHX0RDT0ZGU0VUX0lfUkRfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9SRVNVTFRfUkVHOiBEQ09GRlNFVF9JX1JEIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RDX09GRlNFVF9SRVNVTFRfUkVHX0RDT0ZGU0VUX0lfUkRfTXNrICgweGZmVUwpICAgICAgICAgIC8qITwgREVNIFJGX0RDX09GRlNFVF9SRVNVTFRfUkVHOiBEQ09GRlNFVF9JX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX1JFU1VMVF9SRUdfRENPRkZTRVRfUV9SRF9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX1JFU1VMVF9SRUc6IERDT0ZGU0VUX1FfUkQgKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRENfT0ZGU0VUX1JFU1VMVF9SRUdfRENPRkZTRVRfUV9SRF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgLyohPCBERU0gUkZfRENfT0ZGU0VUX1JFU1VMVF9SRUc6IERDT0ZGU0VUX1FfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9SU1NJX0NPTVBfQ1RSTF9SRUdfUlNTSV9DT01QMDFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc6IFJTU0lfQ09NUDAxIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9SU1NJX0NPTVBfQ1RSTF9SRUdfUlNTSV9DT01QMDFfTXNrICgweGZVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc6IFJTU0lfQ09NUDAxIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHX1JTU0lfQ09NUDEwX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfUlNTSV9DT01QX0NUUkxfUkVHOiBSU1NJX0NPTVAxMCAoQml0IDQpICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfUlNTSV9DT01QX0NUUkxfUkVHX1JTU0lfQ09NUDEwX01zayAoMHhmMFVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfUlNTSV9DT01QX0NUUkxfUkVHOiBSU1NJX0NPTVAxMCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfQ09NUF9DVFJMX1JFR19SU1NJX0NPTVAxMV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfQ09NUF9DVFJMX1JFRzogUlNTSV9DT01QMTEgKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1JTU0lfQ09NUF9DVFJMX1JFR19SU1NJX0NPTVAxMV9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgIC8qITwgREVNIFJGX1JTU0lfQ09NUF9DVFJMX1JFRzogUlNTSV9DT01QMTEgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIERFTV9SRl9SU1NJX0NPTVBfQ1RSTF9SRUdfUlNTSV9DT01QMDBfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc6IFJTU0lfQ09NUDAwIChCaXQgMTIpICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9SU1NJX0NPTVBfQ1RSTF9SRUdfUlNTSV9DT01QMDBfTXNrICgweGYwMDBVTCkgICAgICAgICAgICAvKiE8IERFTSBSRl9SU1NJX0NPTVBfQ1RSTF9SRUc6IFJTU0lfQ09NUDAwIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlRERl9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0ZFX0JJQVNfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENGRV9CSUFTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0ZFX0JJQVNfTXNrICAgICgweDNmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENGRV9CSUFTIChCaXRmaWVsZC1NYXNrOiAweDNmZikgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0ZFX01PREVfUG9zICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENGRV9NT0RFIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0ZFX01PREVfTXNrICAgICgweGMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENGRV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0ZFX05TVEVQX1BvcyAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENGRV9OU1RFUCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0ZFX05TVEVQX01zayAgICgweDMwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENGRV9OU1RFUCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0hTRUxfRklMVF9NT0RFMl9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENIU0VMX0ZJTFRfTU9ERTIgKEJpdCAxNCkgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMMV9SRUdfQ0hTRUxfRklMVF9NT0RFMl9Nc2sgKDB4YzAwMFVMKSAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMMV9SRUc6IENIU0VMX0ZJTFRfTU9ERTIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19DT1JSVEhfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogQ09SUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19DT1JSVEhfTXNrICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogQ09SUlRIIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19OT1JNX0VOX1BvcyAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogTk9STV9FTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19OT1JNX0VOX01zayAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogTk9STV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9NT0RFX1BvcyAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfTU9ERSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9NT0RFX01zayAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9OUEVBS19Qb3MgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfTlBFQUsgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9OUEVBS19Nc2sgICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfTlBFQUsgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9OV0lOX1BvcyAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfTldJTiAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9OV0lOX01zayAgICAgKDB4MzgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfTldJTiAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9PRkZTRVRfUG9zICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfT0ZGU0VUIChCaXQgMTQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwyX1JFR19QRF9PRkZTRVRfTXNrICAgKDB4YzAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwyX1JFRzogUERfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19GSUZfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogRklGIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19GSUZfTXNrICAgICAgICAgKDB4MWZmVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogRklGIChCaXRmaWVsZC1NYXNrOiAweDFmZikgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19GVERGX0REQ19FTl9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogRlRERl9ERENfRU4gKEJpdCA5KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19GVERGX0REQ19FTl9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogRlRERl9ERENfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19NQVRDSF9GSUxUX0VOX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogTUFUQ0hfRklMVF9FTiAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19NQVRDSF9GSUxUX0VOX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogTUFUQ0hfRklMVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19USU1JTkdfQ09SUl9FTl9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogVElNSU5HX0NPUlJfRU4gKEJpdCAxMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19USU1JTkdfQ09SUl9FTl9Nc2sgKDB4ODAwVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogVElNSU5HX0NPUlJfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19DSFNFTF9GSUxUX01PREUxX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogQ0hTRUxfRklMVF9NT0RFMSAoQml0IDEyKSAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkwzX1JFR19DSFNFTF9GSUxUX01PREUxX01zayAoMHgzMDAwVUwpICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkwzX1JFRzogQ0hTRUxfRklMVF9NT0RFMSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDNfUkVHX0RTX09GRlNFVF9Qb3MgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDNfUkVHOiBEU19PRkZTRVQgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDNfUkVHX0RTX09GRlNFVF9Nc2sgICAoMHhjMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDNfUkVHOiBEU19PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfQ1RSTDRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDRfUkVHX1NGRDBfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDRfUkVHOiBTRkQwIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDRfUkVHX1NGRDBfTXNrICAgICAgICAoMHhmVUwpICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDRfUkVHOiBTRkQwIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDRfUkVHX1NGRDFfUG9zICAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDRfUkVHOiBTRkQxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDRfUkVHX1NGRDFfTXNrICAgICAgICAoMHhmMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDRfUkVHOiBTRkQxIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDRfUkVHX0xRSV9QUkVBTUJMRV9FTl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDRfUkVHOiBMUUlfUFJFQU1CTEVfRU4gKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfQ1RSTDRfUkVHX0xRSV9QUkVBTUJMRV9FTl9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfQ1RSTDRfUkVHOiBMUUlfUFJFQU1CTEVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfU1lNQk9MX0VOX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX1NZTUJPTF9FTiAoQml0IDkpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfU1lNQk9MX0VOX01zayAoMHgyMDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX1NZTUJPTF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfQ09SUlRIX0VOX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX0NPUlJUSF9FTiAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfQ09SUlRIX0VOX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX0NPUlJUSF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfU0NBTEVfUG9zICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX1NDQUxFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19MUUlfU0NBTEVfTXNrICAgKDB4MTgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogTFFJX1NDQUxFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19GVERGX0hTSV9QT0xfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogRlRERl9IU0lfUE9MIChCaXQgMTMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19GVERGX0hTSV9QT0xfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogRlRERl9IU0lfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19DQ0FfTU9ERV9Qb3MgICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogQ0NBX01PREUgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19DQ0FfTU9ERV9Nc2sgICAgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogQ0NBX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19TT19GVERGX1NFTF9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogU09fRlRERl9TRUwgKEJpdCAxNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0NUUkw0X1JFR19TT19GVERGX1NFTF9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0NUUkw0X1JFRzogU09fRlRERl9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfTE9PUF9HQUlOX1BEX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9GVERGX0xPT1BfR0FJTl9QRF9SRUdfS1BfTEZfUERfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0xPT1BfR0FJTl9QRF9SRUc6IEtQX0xGX1BEIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0xPT1BfR0FJTl9QRF9SRUdfS1BfTEZfUERfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0xPT1BfR0FJTl9QRF9SRUc6IEtQX0xGX1BEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9MT09QX0dBSU5fUERfUkVHX0tJX0xGX1BEX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9MT09QX0dBSU5fUERfUkVHOiBLSV9MRl9QRCAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9MT09QX0dBSU5fUERfUkVHX0tJX0xGX1BEX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9MT09QX0dBSU5fUERfUkVHOiBLSV9MRl9QRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlRERl9MT09QX0dBSU5fRFNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfTE9PUF9HQUlOX0RTX1JFR19LUF9MRl9EU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfTE9PUF9HQUlOX0RTX1JFRzogS1BfTEZfRFMgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfTE9PUF9HQUlOX0RTX1JFR19LUF9MRl9EU19Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfTE9PUF9HQUlOX0RTX1JFRzogS1BfTEZfRFMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIERFTV9SRl9GVERGX0xPT1BfR0FJTl9EU19SRUdfS0lfTEZfRFNfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUc6IEtJX0xGX0RTIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX0xPT1BfR0FJTl9EU19SRUdfS0lfTEZfRFNfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUc6IEtJX0xGX0RTIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlRERl9DVFJMNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfUlNTSVRIX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IFJTU0lUSCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfUlNTSVRIX01zayAgICAgICgweDFmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IFJTU0lUSCAoQml0ZmllbGQtTWFzazogMHgxZmZmKSAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfRlRERl9ERENfSU5WX1BvcyAoMTNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IEZUREZfRERDX0lOViAoQml0IDEzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfRlRERl9ERENfSU5WX01zayAoMHgyMDAwVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IEZUREZfRERDX0lOViAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfRlNTU19DTEVBUl9Qb3MgICgxNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IEZTU1NfQ0xFQVIgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfRlNTU19DTEVBUl9Nc2sgICgweDQwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IEZTU1NfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfRFNfT0ZGU0VUX1NFTF9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IERTX09GRlNFVF9TRUwgKEJpdCAxNSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DVFJMNV9SRUdfRFNfT0ZGU0VUX1NFTF9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DVFJMNV9SRUc6IERTX09GRlNFVF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfQ09CSV9MT1dfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DT0JJX0xPV19SRUdfQ09CSV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DT0JJX0xPV19SRUc6IENPQkkgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DT0JJX0xPV19SRUdfQ09CSV9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DT0JJX0xPV19SRUc6IENPQkkgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZUREZfQ09CSV9ISUdIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlRERl9DT0JJX0hJR0hfUkVHX0NPQklfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DT0JJX0hJR0hfUkVHOiBDT0JJIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9DT0JJX0hJR0hfUkVHX0NPQklfTXNrICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9DT0JJX0hJR0hfUkVHOiBDT0JJIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9ERU1fVEVTVE1PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfREVNX1RFU1RNT0RFX1JFR19ERU1fVEVTVE1PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX1RFU1RNT0RFX1JFRzogREVNX1RFU1RNT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfREVNX1RFU1RNT0RFX1JFR19ERU1fVEVTVE1PREVfTXNrICgweDNmZlVMKSAgICAgICAgICAgICAgLyohPCBERU0gUkZfREVNX1RFU1RNT0RFX1JFRzogREVNX1RFU1RNT0RFIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9ERU1fSVFDT1JSRUNUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9JUUNPUlJFQ1RfUkVHX0lRQ09SUl9CRVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9JUUNPUlJFQ1RfUkVHOiBJUUNPUlJfQkVUQSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9JUUNPUlJFQ1RfUkVHX0lRQ09SUl9CRVRBX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9JUUNPUlJFQ1RfUkVHOiBJUUNPUlJfQkVUQSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9JUUNPUlJFQ1RfUkVHX0lRQ09SUl9BTFBIQV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9JUUNPUlJFQ1RfUkVHOiBJUUNPUlJfQUxQSEEgKEJpdCA4KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0RFTV9JUUNPUlJFQ1RfUkVHX0lRQ09SUl9BTFBIQV9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgIC8qITwgREVNIFJGX0RFTV9JUUNPUlJFQ1RfUkVHOiBJUUNPUlJfQUxQSEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX1BBRF9DTlRfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX0NUUkxfUkVHX1BBRF9QT1NfTElNSVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX0NUUkxfUkVHOiBQQURfUE9TX0xJTUlUIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX0NUUkxfUkVHX1BBRF9QT1NfTElNSVRfTXNrICgweDdmVUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX0NUUkxfUkVHOiBQQURfUE9TX0xJTUlUIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBERU1fUkZfUEFEX0NOVF9DVFJMX1JFR19QQURfTkVHX0xJTUlUX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfUEFEX0NOVF9DVFJMX1JFRzogUEFEX05FR19MSU1JVCAoQml0IDcpICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfUEFEX0NOVF9DVFJMX1JFR19QQURfTkVHX0xJTUlUX01zayAoMHgzZjgwVUwpICAgICAgICAgICAgLyohPCBERU0gUkZfUEFEX0NOVF9DVFJMX1JFRzogUEFEX05FR19MSU1JVCAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgREVNX1JGX1BBRF9DTlRfQ1RSTF9SRUdfUEFEX0NMRUFSX0NPVU5UX1BvcyAoMTRVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX1BBRF9DTlRfQ1RSTF9SRUc6IFBBRF9DTEVBUl9DT1VOVCAoQml0IDE0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1BBRF9DTlRfQ1RSTF9SRUdfUEFEX0NMRUFSX0NPVU5UX01zayAoMHg0MDAwVUwpICAgICAgICAgIC8qITwgREVNIFJGX1BBRF9DTlRfQ1RSTF9SRUc6IFBBRF9DTEVBUl9DT1VOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9QQURfQ05UX1JFU1VMVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX1BBRF9DTlRfUkVTVUxUX1JFR19QQURfUE9TX0NOVF9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgREVNIFJGX1BBRF9DTlRfUkVTVUxUX1JFRzogUEFEX1BPU19DTlRfUkQgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX1BBRF9DTlRfUkVTVUxUX1JFR19QQURfUE9TX0NOVF9SRF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgREVNIFJGX1BBRF9DTlRfUkVTVUxUX1JFRzogUEFEX1BPU19DTlRfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX1JFU1VMVF9SRUdfUEFEX05FR19DTlRfUkRfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX1JFU1VMVF9SRUc6IFBBRF9ORUdfQ05UX1JEIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9QQURfQ05UX1JFU1VMVF9SRUdfUEFEX05FR19DTlRfUkRfTXNrICgweGZmMDBVTCkgICAgICAgICAvKiE8IERFTSBSRl9QQURfQ05UX1JFU1VMVF9SRUc6IFBBRF9ORUdfQ05UX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZTU1NfSV9SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlNTU19JX1JFU1VMVF9SRUdfRlNTU19JX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlNTU19JX1JFU1VMVF9SRUc6IEZTU1NfSV9SRCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlNTU19JX1JFU1VMVF9SRUdfRlNTU19JX1JEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlNTU19JX1JFU1VMVF9SRUc6IEZTU1NfSV9SRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0ZTU1NfUV9SRVNVTFRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlNTU19RX1JFU1VMVF9SRUdfRlNTU19RX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlNTU19RX1JFU1VMVF9SRUc6IEZTU1NfUV9SRCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlNTU19RX1JFU1VMVF9SRUdfRlNTU19RX1JEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlNTU19RX1JFU1VMVF9SRUc6IEZTU1NfUV9SRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBERU1fUkZfRlNTU19NQUdfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBERU1fUkZfRlNTU19NQUdfUkVTVUxUX1JFR19GU1NTX01BR19SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBERU0gUkZfRlNTU19NQUdfUkVTVUxUX1JFRzogRlNTU19NQUdfUkQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlNTU19NQUdfUkVTVUxUX1JFR19GU1NTX01BR19SRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBERU0gUkZfRlNTU19NQUdfUkVTVUxUX1JFRzogRlNTU19NQUdfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVNX1JGX0NDQV9SU1NJVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVNX1JGX0NDQV9SU1NJVEhfUkVHX0NDQV9SU1NJVEhfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0NDQV9SU1NJVEhfUkVHOiBDQ0FfUlNTSVRIIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0NDQV9SU1NJVEhfUkVHX0NDQV9SU1NJVEhfTXNrICAoMHgxZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0NDQV9SU1NJVEhfUkVHOiBDQ0FfUlNTSVRIIChCaXRmaWVsZC1NYXNrOiAweDFmZmYpICAgKi8KKyNkZWZpbmUgREVNX1JGX0NDQV9SU1NJVEhfUkVHX1NJR0RFVF9USU1FT1VUX0xFTl9Qb3MgKDEzVUwpICAgICAgICAgICAgIC8qITwgREVNIFJGX0NDQV9SU1NJVEhfUkVHOiBTSUdERVRfVElNRU9VVF9MRU4gKEJpdCAxMykgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0NDQV9SU1NJVEhfUkVHX1NJR0RFVF9USU1FT1VUX0xFTl9Nc2sgKDB4ZTAwMFVMKSAgICAgICAgIC8qITwgREVNIFJGX0NDQV9SU1NJVEhfUkVHOiBTSUdERVRfVElNRU9VVF9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfTU9ERV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX01PREUgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfTU9ERV9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfVEhSRVNIT0xEX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX1RIUkVTSE9MRCAoQml0IDIpICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfVEhSRVNIT0xEX01zayAoMHhmY1VMKSAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX1RIUkVTSE9MRCAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfU0lHREVUX0NUUkxfUkVHX1NJR0RFVF9ESUZGX1BvcyAoOFVMKSAgICAgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOiBTSUdERVRfRElGRiAoQml0IDgpICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfU0lHREVUX0NUUkxfUkVHX1NJR0RFVF9ESUZGX01zayAoMHgxMDBVTCkgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOiBTSUdERVRfRElGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfU0lHREVUX0NUUkxfUkVHX1NJR0RFVF9TRkFDVE9SMl9Qb3MgKDlVTCkgICAgICAgICAgIC8qITwgREVNIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOiBTSUdERVRfU0ZBQ1RPUjIgKEJpdCA5KSAgICAgICAgKi8KKyNkZWZpbmUgREVNX1JGX0ZUREZfU0lHREVUX0NUUkxfUkVHX1NJR0RFVF9TRkFDVE9SMl9Nc2sgKDB4NjAwVUwpICAgICAgIC8qITwgREVNIFJGX0ZUREZfU0lHREVUX0NUUkxfUkVHOiBTSUdERVRfU0ZBQ1RPUjIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfU0ZBQ1RPUjFfUG9zICgxMVVMKSAgICAgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX1NGQUNUT1IxIChCaXQgMTEpICAgICAgICovCisjZGVmaW5lIERFTV9SRl9GVERGX1NJR0RFVF9DVFJMX1JFR19TSUdERVRfU0ZBQ1RPUjFfTXNrICgweDE4MDBVTCkgICAgICAvKiE8IERFTSBSRl9GVERGX1NJR0RFVF9DVFJMX1JFRzogU0lHREVUX1NGQUNUT1IxIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX0RFTEFZX1BvcyAoMTNVTCkgICAgICAgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9ERUxBWSAoQml0IDEzKSAgICAgICAgICAqLworI2RlZmluZSBERU1fUkZfRlRERl9TSUdERVRfQ1RSTF9SRUdfU0lHREVUX0RFTEFZX01zayAoMHg2MDAwVUwpICAgICAgICAgLyohPCBERU0gUkZfRlRERl9TSUdERVRfQ1RSTF9SRUc6IFNJR0RFVF9ERUxBWSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ0RNQScgUG9zaXRpb24gJiBNYXNrICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfQV9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTBfQV9TVEFSVExfUkVHX0RNQTBfQV9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTBfQV9TVEFSVExfUkVHOiBETUEwX0FfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTBfQV9TVEFSVExfUkVHX0RNQTBfQV9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTBfQV9TVEFSVExfUkVHOiBETUEwX0FfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEwX0FfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0FfU1RBUlRIX1JFR19ETUEwX0FfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0FfU1RBUlRIX1JFRzogRE1BMF9BX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0FfU1RBUlRIX1JFR19ETUEwX0FfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0FfU1RBUlRIX1JFRzogRE1BMF9BX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMF9CX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMF9CX1NUQVJUTF9SRUdfRE1BMF9CX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9CX1NUQVJUTF9SRUc6IERNQTBfQl9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMF9CX1NUQVJUTF9SRUdfRE1BMF9CX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMF9CX1NUQVJUTF9SRUc6IERNQTBfQl9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfQl9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTBfQl9TVEFSVEhfUkVHX0RNQTBfQl9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTBfQl9TVEFSVEhfUkVHOiBETUEwX0JfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTBfQl9TVEFSVEhfUkVHX0RNQTBfQl9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTBfQl9TVEFSVEhfUkVHOiBETUEwX0JfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfSU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0lOVF9SRUdfRE1BMF9JTlRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0lOVF9SRUc6IERNQTBfSU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0lOVF9SRUdfRE1BMF9JTlRfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0lOVF9SRUc6IERNQTBfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0xFTl9SRUdfRE1BMF9MRU5fUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0xFTl9SRUc6IERNQTBfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0xFTl9SRUdfRE1BMF9MRU5fTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0xFTl9SRUc6IERNQTBfTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9PTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfT04gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9PTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0JXX1BvcyAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBCVyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0JXX01zayAgICAgICAgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBCVyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0lSUV9FTkFCTEVfUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0lSUV9FTkFCTEVfTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RSRVFfTU9ERV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RSRVFfTU9ERV9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0JJTkNfUG9zICAgICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBCSU5DIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0JJTkNfTXNrICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBCSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0FJTkNfUG9zICAgICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBBSU5DIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0FJTkNfTXNrICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBBSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0NJUkNVTEFSX1BvcyAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0NJUkNVTEFSX01zayAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9QUklPX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfUFJJTyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9QUklPX01zayAgICAgICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfUFJJTyAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9JRExFX1BvcyAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfSURMRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9JRExFX01zayAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfSURMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9JTklUX1BvcyAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfSU5JVCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX0RNQV9JTklUX01zayAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBETUFfSU5JVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX1JFUV9TRU5TRV9Qb3MgICAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0NUUkxfUkVHX1JFUV9TRU5TRV9Nc2sgICAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTBfSURYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEwX0lEWF9SRUdfRE1BMF9JRFhfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0lEWF9SRUc6IERNQTBfSURYIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEwX0lEWF9SRUdfRE1BMF9JRFhfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEwX0lEWF9SRUc6IERNQTBfSURYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0FfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUExX0FfU1RBUlRMX1JFR19ETUExX0FfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUExX0FfU1RBUlRMX1JFRzogRE1BMV9BX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUExX0FfU1RBUlRMX1JFR19ETUExX0FfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUExX0FfU1RBUlRMX1JFRzogRE1BMV9BX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMV9BX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9BX1NUQVJUSF9SRUdfRE1BMV9BX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9BX1NUQVJUSF9SRUc6IERNQTFfQV9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9BX1NUQVJUSF9SRUdfRE1BMV9BX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9BX1NUQVJUSF9SRUc6IERNQTFfQV9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTFfQl9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTFfQl9TVEFSVExfUkVHX0RNQTFfQl9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQl9TVEFSVExfUkVHOiBETUExX0JfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTFfQl9TVEFSVExfUkVHX0RNQTFfQl9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTFfQl9TVEFSVExfUkVHOiBETUExX0JfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0JfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUExX0JfU1RBUlRIX1JFR19ETUExX0JfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUExX0JfU1RBUlRIX1JFRzogRE1BMV9CX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUExX0JfU1RBUlRIX1JFR19ETUExX0JfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUExX0JfU1RBUlRIX1JFRzogRE1BMV9CX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9JTlRfUkVHX0RNQTFfSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9JTlRfUkVHOiBETUExX0lOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9JTlRfUkVHX0RNQTFfSU5UX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9JTlRfUkVHOiBETUExX0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9MRU5fUkVHX0RNQTFfTEVOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9MRU5fUkVHOiBETUExX0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9MRU5fUkVHX0RNQTFfTEVOX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9MRU5fUkVHOiBETUExX0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfT05fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfT05fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19CV19Qb3MgICAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQlcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19CV19Nc2sgICAgICAgICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQlcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19JUlFfRU5BQkxFX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19JUlFfRU5BQkxFX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19EUkVRX01PREVfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19EUkVRX01PREVfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19CSU5DX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQklOQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19CSU5DX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQklOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19BSU5DX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQUlOQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19BSU5DX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQUlOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19DSVJDVUxBUl9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19DSVJDVUxBUl9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfUFJJT19Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfUFJJT19Nc2sgICAgICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfSURMRV9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX0lETEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfSURMRV9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX0lETEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfSU5JVF9Qb3MgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19ETUFfSU5JVF9Nc2sgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19SRVFfU0VOU0VfUG9zICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9DVFJMX1JFR19SRVFfU0VOU0VfTXNrICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUExX0lEWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMV9JRFhfUkVHX0RNQTFfSURYX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9JRFhfUkVHOiBETUExX0lEWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMV9JRFhfUkVHX0RNQTFfSURYX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMV9JRFhfUkVHOiBETUExX0lEWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9BX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMl9BX1NUQVJUTF9SRUdfRE1BMl9BX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMl9BX1NUQVJUTF9SRUc6IERNQTJfQV9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMl9BX1NUQVJUTF9SRUdfRE1BMl9BX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMl9BX1NUQVJUTF9SRUc6IERNQTJfQV9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTJfQV9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfQV9TVEFSVEhfUkVHX0RNQTJfQV9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQV9TVEFSVEhfUkVHOiBETUEyX0FfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQV9TVEFSVEhfUkVHX0RNQTJfQV9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQV9TVEFSVEhfUkVHOiBETUEyX0FfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEyX0JfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEyX0JfU1RBUlRMX1JFR19ETUEyX0JfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0JfU1RBUlRMX1JFRzogRE1BMl9CX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEyX0JfU1RBUlRMX1JFR19ETUEyX0JfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEyX0JfU1RBUlRMX1JFRzogRE1BMl9CX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9CX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BMl9CX1NUQVJUSF9SRUdfRE1BMl9CX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BMl9CX1NUQVJUSF9SRUc6IERNQTJfQl9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BMl9CX1NUQVJUSF9SRUdfRE1BMl9CX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BMl9CX1NUQVJUSF9SRUc6IERNQTJfQl9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfSU5UX1JFR19ETUEyX0lOVF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfSU5UX1JFRzogRE1BMl9JTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfSU5UX1JFR19ETUEyX0lOVF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfSU5UX1JFRzogRE1BMl9JTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfTEVOX1JFR19ETUEyX0xFTl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfTEVOX1JFRzogRE1BMl9MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfTEVOX1JFR19ETUEyX0xFTl9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfTEVOX1JFRzogRE1BMl9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX09OX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX09OX01zayAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQldfUG9zICAgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IEJXIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQldfTXNrICAgICAgICAgICAgICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IEJXIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Qb3MgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Nc2sgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRFJFUV9NT0RFX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRFJFUV9NT0RFX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQklOQ19Qb3MgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IEJJTkMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQklOQ19Nc2sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IEJJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQUlOQ19Qb3MgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IEFJTkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQUlOQ19Nc2sgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IEFJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQ0lSQ1VMQVJfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfQ0lSQ1VMQVJfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX1BSSU9fUG9zICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9QUklPIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX1BSSU9fTXNrICAgICAgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9QUklPIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX0lETEVfUG9zICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9JRExFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX0lETEVfTXNrICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9JRExFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX0lOSVRfUG9zICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9JTklUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfRE1BX0lOSVRfTXNrICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IERNQV9JTklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfUkVRX1NFTlNFX1BvcyAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfQ1RSTF9SRUdfUkVRX1NFTlNFX01zayAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BMl9JRFhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTJfSURYX1JFR19ETUEyX0lEWF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfSURYX1JFRzogRE1BMl9JRFggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTJfSURYX1JFR19ETUEyX0lEWF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTJfSURYX1JFRzogRE1BMl9JRFggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfQV9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTNfQV9TVEFSVExfUkVHX0RNQTNfQV9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTNfQV9TVEFSVExfUkVHOiBETUEzX0FfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTNfQV9TVEFSVExfUkVHX0RNQTNfQV9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTNfQV9TVEFSVExfUkVHOiBETUEzX0FfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUEzX0FfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0FfU1RBUlRIX1JFR19ETUEzX0FfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0FfU1RBUlRIX1JFRzogRE1BM19BX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0FfU1RBUlRIX1JFR19ETUEzX0FfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0FfU1RBUlRIX1JFRzogRE1BM19BX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BM19CX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BM19CX1NUQVJUTF9SRUdfRE1BM19CX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19CX1NUQVJUTF9SRUc6IERNQTNfQl9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BM19CX1NUQVJUTF9SRUdfRE1BM19CX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BM19CX1NUQVJUTF9SRUc6IERNQTNfQl9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfQl9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTNfQl9TVEFSVEhfUkVHX0RNQTNfQl9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTNfQl9TVEFSVEhfUkVHOiBETUEzX0JfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTNfQl9TVEFSVEhfUkVHX0RNQTNfQl9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTNfQl9TVEFSVEhfUkVHOiBETUEzX0JfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfSU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0lOVF9SRUdfRE1BM19JTlRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0lOVF9SRUc6IERNQTNfSU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0lOVF9SRUdfRE1BM19JTlRfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0lOVF9SRUc6IERNQTNfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0xFTl9SRUdfRE1BM19MRU5fUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0xFTl9SRUc6IERNQTNfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0xFTl9SRUdfRE1BM19MRU5fTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0xFTl9SRUc6IERNQTNfTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9PTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfT04gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9PTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0JXX1BvcyAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBCVyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0JXX01zayAgICAgICAgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBCVyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0lSUV9FTkFCTEVfUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0lSUV9FTkFCTEVfTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RSRVFfTU9ERV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RSRVFfTU9ERV9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0JJTkNfUG9zICAgICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBCSU5DIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0JJTkNfTXNrICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBCSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0FJTkNfUG9zICAgICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBBSU5DIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0FJTkNfTXNrICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBBSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0NJUkNVTEFSX1BvcyAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0NJUkNVTEFSX01zayAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9QUklPX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfUFJJTyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9QUklPX01zayAgICAgICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfUFJJTyAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9JRExFX1BvcyAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfSURMRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9JRExFX01zayAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfSURMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9JTklUX1BvcyAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfSU5JVCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX0RNQV9JTklUX01zayAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBETUFfSU5JVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX1JFUV9TRU5TRV9Qb3MgICAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0NUUkxfUkVHX1JFUV9TRU5TRV9Nc2sgICAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTNfSURYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUEzX0lEWF9SRUdfRE1BM19JRFhfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0lEWF9SRUc6IERNQTNfSURYIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUEzX0lEWF9SRUdfRE1BM19JRFhfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUEzX0lEWF9SRUc6IERNQTNfSURYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0FfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE0X0FfU1RBUlRMX1JFR19ETUE0X0FfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE0X0FfU1RBUlRMX1JFRzogRE1BNF9BX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE0X0FfU1RBUlRMX1JFR19ETUE0X0FfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE0X0FfU1RBUlRMX1JFRzogRE1BNF9BX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNF9BX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9BX1NUQVJUSF9SRUdfRE1BNF9BX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9BX1NUQVJUSF9SRUc6IERNQTRfQV9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9BX1NUQVJUSF9SRUdfRE1BNF9BX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9BX1NUQVJUSF9SRUc6IERNQTRfQV9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTRfQl9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTRfQl9TVEFSVExfUkVHX0RNQTRfQl9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQl9TVEFSVExfUkVHOiBETUE0X0JfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTRfQl9TVEFSVExfUkVHX0RNQTRfQl9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTRfQl9TVEFSVExfUkVHOiBETUE0X0JfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0JfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE0X0JfU1RBUlRIX1JFR19ETUE0X0JfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE0X0JfU1RBUlRIX1JFRzogRE1BNF9CX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE0X0JfU1RBUlRIX1JFR19ETUE0X0JfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE0X0JfU1RBUlRIX1JFRzogRE1BNF9CX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9JTlRfUkVHX0RNQTRfSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9JTlRfUkVHOiBETUE0X0lOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9JTlRfUkVHX0RNQTRfSU5UX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9JTlRfUkVHOiBETUE0X0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9MRU5fUkVHX0RNQTRfTEVOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9MRU5fUkVHOiBETUE0X0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9MRU5fUkVHX0RNQTRfTEVOX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9MRU5fUkVHOiBETUE0X0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfT05fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfT05fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19CV19Qb3MgICAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQlcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19CV19Nc2sgICAgICAgICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQlcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19JUlFfRU5BQkxFX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19JUlFfRU5BQkxFX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19EUkVRX01PREVfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19EUkVRX01PREVfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRFJFUV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19CSU5DX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQklOQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19CSU5DX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQklOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19BSU5DX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQUlOQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19BSU5DX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQUlOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19DSVJDVUxBUl9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19DSVJDVUxBUl9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfUFJJT19Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfUFJJT19Nc2sgICAgICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX1BSSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfSURMRV9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX0lETEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfSURMRV9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX0lETEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfSU5JVF9Qb3MgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19ETUFfSU5JVF9Nc2sgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogRE1BX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19SRVFfU0VOU0VfUG9zICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9DVFJMX1JFR19SRVFfU0VOU0VfTXNrICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9DVFJMX1JFRzogUkVRX1NFTlNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE0X0lEWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNF9JRFhfUkVHX0RNQTRfSURYX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9JRFhfUkVHOiBETUE0X0lEWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNF9JRFhfUkVHX0RNQTRfSURYX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNF9JRFhfUkVHOiBETUE0X0lEWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9BX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNV9BX1NUQVJUTF9SRUdfRE1BNV9BX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNV9BX1NUQVJUTF9SRUc6IERNQTVfQV9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNV9BX1NUQVJUTF9SRUdfRE1BNV9BX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNV9BX1NUQVJUTF9SRUc6IERNQTVfQV9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTVfQV9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfQV9TVEFSVEhfUkVHX0RNQTVfQV9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQV9TVEFSVEhfUkVHOiBETUE1X0FfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQV9TVEFSVEhfUkVHX0RNQTVfQV9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQV9TVEFSVEhfUkVHOiBETUE1X0FfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE1X0JfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE1X0JfU1RBUlRMX1JFR19ETUE1X0JfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0JfU1RBUlRMX1JFRzogRE1BNV9CX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE1X0JfU1RBUlRMX1JFR19ETUE1X0JfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE1X0JfU1RBUlRMX1JFRzogRE1BNV9CX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9CX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNV9CX1NUQVJUSF9SRUdfRE1BNV9CX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNV9CX1NUQVJUSF9SRUc6IERNQTVfQl9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNV9CX1NUQVJUSF9SRUdfRE1BNV9CX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNV9CX1NUQVJUSF9SRUc6IERNQTVfQl9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfSU5UX1JFR19ETUE1X0lOVF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfSU5UX1JFRzogRE1BNV9JTlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfSU5UX1JFR19ETUE1X0lOVF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfSU5UX1JFRzogRE1BNV9JTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfTEVOX1JFR19ETUE1X0xFTl9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfTEVOX1JFRzogRE1BNV9MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfTEVOX1JFR19ETUE1X0xFTl9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfTEVOX1JFRzogRE1BNV9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX09OX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9PTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX09OX01zayAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQldfUG9zICAgICAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IEJXIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQldfTXNrICAgICAgICAgICAgICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IEJXIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Qb3MgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfSVJRX0VOQUJMRV9Nc2sgICAgICAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IElSUV9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRFJFUV9NT0RFX1BvcyAgICAgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRFJFUV9NT0RFX01zayAgICAgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERSRVFfTU9ERSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQklOQ19Qb3MgICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IEJJTkMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQklOQ19Nc2sgICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IEJJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQUlOQ19Qb3MgICAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IEFJTkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQUlOQ19Nc2sgICAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IEFJTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQ0lSQ1VMQVJfUG9zICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfQ0lSQ1VMQVJfTXNrICAgICAgICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IENJUkNVTEFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX1BSSU9fUG9zICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9QUklPIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX1BSSU9fTXNrICAgICAgICAoMHg3MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9QUklPIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX0lETEVfUG9zICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9JRExFIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX0lETEVfTXNrICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9JRExFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX0lOSVRfUG9zICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9JTklUIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfRE1BX0lOSVRfTXNrICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IERNQV9JTklUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfUkVRX1NFTlNFX1BvcyAgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0IDEzKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfQ1RSTF9SRUdfUkVRX1NFTlNFX01zayAgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfQ1RSTF9SRUc6IFJFUV9TRU5TRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNV9JRFhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTVfSURYX1JFR19ETUE1X0lEWF9Qb3MgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfSURYX1JFRzogRE1BNV9JRFggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTVfSURYX1JFR19ETUE1X0lEWF9Nc2sgICAgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTVfSURYX1JFRzogRE1BNV9JRFggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfQV9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTZfQV9TVEFSVExfUkVHX0RNQTZfQV9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTZfQV9TVEFSVExfUkVHOiBETUE2X0FfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTZfQV9TVEFSVExfUkVHX0RNQTZfQV9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTZfQV9TVEFSVExfUkVHOiBETUE2X0FfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE2X0FfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0FfU1RBUlRIX1JFR19ETUE2X0FfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0FfU1RBUlRIX1JFRzogRE1BNl9BX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0FfU1RBUlRIX1JFR19ETUE2X0FfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0FfU1RBUlRIX1JFRzogRE1BNl9BX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BNl9CX1NUQVJUTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BNl9CX1NUQVJUTF9SRUdfRE1BNl9CX1NUQVJUTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9CX1NUQVJUTF9SRUc6IERNQTZfQl9TVEFSVEwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BNl9CX1NUQVJUTF9SRUdfRE1BNl9CX1NUQVJUTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BNl9CX1NUQVJUTF9SRUc6IERNQTZfQl9TVEFSVEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfQl9TVEFSVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTZfQl9TVEFSVEhfUkVHX0RNQTZfQl9TVEFSVEhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTZfQl9TVEFSVEhfUkVHOiBETUE2X0JfU1RBUlRIIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTZfQl9TVEFSVEhfUkVHX0RNQTZfQl9TVEFSVEhfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTZfQl9TVEFSVEhfUkVHOiBETUE2X0JfU1RBUlRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfSU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0lOVF9SRUdfRE1BNl9JTlRfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0lOVF9SRUc6IERNQTZfSU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0lOVF9SRUdfRE1BNl9JTlRfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0lOVF9SRUc6IERNQTZfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0xFTl9SRUdfRE1BNl9MRU5fUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0xFTl9SRUc6IERNQTZfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0xFTl9SRUdfRE1BNl9MRU5fTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0xFTl9SRUc6IERNQTZfTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9PTl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfT04gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9PTl9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0JXX1BvcyAgICAgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBCVyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0JXX01zayAgICAgICAgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBCVyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0lSUV9FTkFCTEVfUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0lSUV9FTkFCTEVfTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBJUlFfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RSRVFfTU9ERV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RSRVFfTU9ERV9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBEUkVRX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0JJTkNfUG9zICAgICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBCSU5DIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0JJTkNfTXNrICAgICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBCSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0FJTkNfUG9zICAgICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBBSU5DIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0FJTkNfTXNrICAgICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBBSU5DIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0NJUkNVTEFSX1BvcyAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0NJUkNVTEFSX01zayAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBDSVJDVUxBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9QUklPX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfUFJJTyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9QUklPX01zayAgICAgICAgKDB4NzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfUFJJTyAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9JRExFX1BvcyAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfSURMRSAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9JRExFX01zayAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfSURMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9JTklUX1BvcyAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfSU5JVCAoQml0IDEyKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX0RNQV9JTklUX01zayAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBETUFfSU5JVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX1JFUV9TRU5TRV9Qb3MgICAgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0NUUkxfUkVHX1JFUV9TRU5TRV9Nc2sgICAgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0NUUkxfUkVHOiBSRVFfU0VOU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTZfSURYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE2X0lEWF9SRUdfRE1BNl9JRFhfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0lEWF9SRUc6IERNQTZfSURYIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE2X0lEWF9SRUdfRE1BNl9JRFhfTXNrICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE2X0lEWF9SRUc6IERNQTZfSURYIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0FfU1RBUlRMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE3X0FfU1RBUlRMX1JFR19ETUE3X0FfU1RBUlRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE3X0FfU1RBUlRMX1JFRzogRE1BN19BX1NUQVJUTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE3X0FfU1RBUlRMX1JFR19ETUE3X0FfU1RBUlRMX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE3X0FfU1RBUlRMX1JFRzogRE1BN19BX1NUQVJUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BN19BX1NUQVJUSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19BX1NUQVJUSF9SRUdfRE1BN19BX1NUQVJUSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19BX1NUQVJUSF9SRUc6IERNQTdfQV9TVEFSVEggKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19BX1NUQVJUSF9SRUdfRE1BN19BX1NUQVJUSF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19BX1NUQVJUSF9SRUc6IERNQTdfQV9TVEFSVEggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQTdfQl9TVEFSVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRE1BX0RNQTdfQl9TVEFSVExfUkVHX0RNQTdfQl9TVEFSVExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQl9TVEFSVExfUkVHOiBETUE3X0JfU1RBUlRMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQTdfQl9TVEFSVExfUkVHX0RNQTdfQl9TVEFSVExfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQTdfQl9TVEFSVExfUkVHOiBETUE3X0JfU1RBUlRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0JfU1RBUlRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIERNQV9ETUE3X0JfU1RBUlRIX1JFR19ETUE3X0JfU1RBUlRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUE3X0JfU1RBUlRIX1JFRzogRE1BN19CX1NUQVJUSCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUE3X0JfU1RBUlRIX1JFR19ETUE3X0JfU1RBUlRIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUE3X0JfU1RBUlRIX1JFRzogRE1BN19CX1NUQVJUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19JTlRfUkVHX0RNQTdfSU5UX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19JTlRfUkVHOiBETUE3X0lOVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19JTlRfUkVHX0RNQTdfSU5UX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19JTlRfUkVHOiBETUE3X0lOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19MRU5fUkVHX0RNQTdfTEVOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19MRU5fUkVHOiBETUE3X0xFTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19MRU5fUkVHX0RNQTdfTEVOX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19MRU5fUkVHOiBETUE3X0xFTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfT05fUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfT05fTXNrICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19CV19Qb3MgICAgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQlcgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19CV19Nc2sgICAgICAgICAgICAgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQlcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19JUlFfRU5BQkxFX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19JUlFfRU5BQkxFX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogSVJRX0VOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19EUkVRX01PREVfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRFJFUV9NT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19EUkVRX01PREVfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRFJFUV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19CSU5DX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQklOQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19CSU5DX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQklOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19BSU5DX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQUlOQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19BSU5DX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQUlOQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19DSVJDVUxBUl9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19DSVJDVUxBUl9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogQ0lSQ1VMQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfUFJJT19Qb3MgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX1BSSU8gKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfUFJJT19Nc2sgICAgICAgICgweDcwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX1BSSU8gKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfSURMRV9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX0lETEUgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfSURMRV9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX0lETEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfSU5JVF9Qb3MgICAgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX0lOSVQgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19ETUFfSU5JVF9Nc2sgICAgICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogRE1BX0lOSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19SRVFfU0VOU0VfUG9zICAgICAgICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogUkVRX1NFTlNFIChCaXQgMTMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19DVFJMX1JFR19SRVFfU0VOU0VfTXNrICAgICAgICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19DVFJMX1JFRzogUkVRX1NFTlNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUE3X0lEWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BN19JRFhfUkVHX0RNQTdfSURYX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19JRFhfUkVHOiBETUE3X0lEWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BN19JRFhfUkVHX0RNQTdfSURYX01zayAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BN19JRFhfUkVHOiBETUE3X0lEWCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRE1BX0RNQV9SRVFfTVVYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTAxX1NFTF9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUEwMV9TRUwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTAxX1NFTF9Nc2sgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUEwMV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTIzX1NFTF9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUEyM19TRUwgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTIzX1NFTF9Nc2sgICAgICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUEyM19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTQ1X1NFTF9Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUE0NV9TRUwgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTQ1X1NFTF9Nc2sgICAgICgweGYwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUE0NV9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTY3X1NFTF9Qb3MgICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUE2N19TRUwgKEJpdCAxMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX1JFUV9NVVhfUkVHX0RNQTY3X1NFTF9Nc2sgICAgICgweGYwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX1JFUV9NVVhfUkVHOiBETUE2N19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERNQV9ETUFfSU5UX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gwX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gwX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gxX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMSAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gxX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gyX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMiAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gyX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gzX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMyAoQml0IDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0gzX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NIMyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g0X1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINCAoQml0IDQpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g0X01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g1X1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINSAoQml0IDUpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g1X01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g2X1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINiAoQml0IDYpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g2X01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g3X1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINyAoQml0IDcpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0lOVF9TVEFUVVNfUkVHX0RNQV9JUlFfQ0g3X01zayAoMHg4MFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0lOVF9TVEFUVVNfUkVHOiBETUFfSVJRX0NINyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBETUFfRE1BX0NMRUFSX0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0gwX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NIMCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0gwX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NIMCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIMV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDEgKEJpdCAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIMV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDJfUG9zICgyVUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0gyIChCaXQgMikgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDJfTXNrICgweDRVTCkgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0gyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0gzX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NIMyAoQml0IDMpICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0gzX01zayAoMHg4VUwpICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NIMyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NINF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDQgKEJpdCA0KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NINF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDVfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0g1IChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIERNQV9ETUFfQ0xFQVJfSU5UX1JFR19ETUFfUlNUX0lSUV9DSDVfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IERNQSBETUFfQ0xFQVJfSU5UX1JFRzogRE1BX1JTVF9JUlFfQ0g1IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0g2X1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NINiAoQml0IDYpICAgICAgICAgICAgICAqLworI2RlZmluZSBETUFfRE1BX0NMRUFSX0lOVF9SRUdfRE1BX1JTVF9JUlFfQ0g2X01zayAoMHg0MFVMKSAgICAgICAgICAgICAgLyohPCBETUEgRE1BX0NMRUFSX0lOVF9SRUc6IERNQV9SU1RfSVJRX0NINiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIN19Qb3MgKDdVTCkgICAgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDcgKEJpdCA3KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRE1BX0RNQV9DTEVBUl9JTlRfUkVHX0RNQV9SU1RfSVJRX0NIN19Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgIC8qITwgRE1BIERNQV9DTEVBUl9JTlRfUkVHOiBETUFfUlNUX0lSUV9DSDcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdFQ0MnIFBvc2l0aW9uICYgTWFzayAgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFQ0NfRUNDX0NPTkZJR19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEVDQ19FQ0NfQ09ORklHX1JFR19FQ0NfT3BQdHJBX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09ORklHX1JFRzogRUNDX09wUHRyQSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09ORklHX1JFR19FQ0NfT3BQdHJBX01zayAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09ORklHX1JFRzogRUNDX09wUHRyQSAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09ORklHX1JFR19FQ0NfT3BQdHJCX1BvcyAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09ORklHX1JFRzogRUNDX09wUHRyQiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09ORklHX1JFR19FQ0NfT3BQdHJCX01zayAgICAgKDB4MWYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09ORklHX1JFRzogRUNDX09wUHRyQiAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09ORklHX1JFR19FQ0NfT3BQdHJDX1BvcyAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09ORklHX1JFRzogRUNDX09wUHRyQyAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09ORklHX1JFR19FQ0NfT3BQdHJDX01zayAgICAgKDB4MWYwMDAwVUwpICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09ORklHX1JFRzogRUNDX09wUHRyQyAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFQ0NfRUNDX0NPTU1BTkRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX1R5cGVPcGVyYXRpb25fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19UeXBlT3BlcmF0aW9uIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX1R5cGVPcGVyYXRpb25fTXNrICgweDdmVUwpICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19UeXBlT3BlcmF0aW9uIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19GaWVsZF9Qb3MgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfRmllbGQgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19GaWVsZF9Nc2sgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfRmllbGQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19TaXplT2ZPcGVyYW5kc19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfU2l6ZU9mT3BlcmFuZHMgKEJpdCA4KSAgICAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX0NPTU1BTkRfUkVHX0VDQ19TaXplT2ZPcGVyYW5kc19Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgLyohPCBFQ0MgRUNDX0NPTU1BTkRfUkVHOiBFQ0NfU2l6ZU9mT3BlcmFuZHMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX1NpZ25BX1BvcyAgICAgKDI5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19TaWduQSAoQml0IDI5KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX1NpZ25BX01zayAgICAgKDB4MjAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19TaWduQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX1NpZ25CX1BvcyAgICAgKDMwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19TaWduQiAoQml0IDMwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX1NpZ25CX01zayAgICAgKDB4NDAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19TaWduQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX0NhbGNSMl9Qb3MgICAgKDMxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19DYWxjUjIgKEJpdCAzMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09NTUFORF9SRUdfRUNDX0NhbGNSMl9Nc2sgICAgKDB4ODAwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09NTUFORF9SRUc6IEVDQ19DYWxjUjIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFQ0NfRUNDX0NPTlRST0xfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEVDQ19FQ0NfQ09OVFJPTF9SRUdfRUNDX1N0YXJ0X1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09OVFJPTF9SRUc6IEVDQ19TdGFydCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfQ09OVFJPTF9SRUdfRUNDX1N0YXJ0X01zayAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfQ09OVFJPTF9SRUc6IEVDQ19TdGFydCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFQ0NfRUNDX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfRmFpbF9BZGRyZXNzX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX0ZhaWxfQWRkcmVzcyAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfRmFpbF9BZGRyZXNzX01zayAoMHhmVUwpICAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX0ZhaWxfQWRkcmVzcyAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUG9pbnRfUHhfTm90T25DdXJ2ZV9Qb3MgKDRVTCkgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1BvaW50X1B4X05vdE9uQ3VydmUgKEJpdCA0KSAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUG9pbnRfUHhfTm90T25DdXJ2ZV9Nc2sgKDB4MTBVTCkgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1BvaW50X1B4X05vdE9uQ3VydmUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUG9pbnRfUHhfQXRJbmZpbml0eV9Qb3MgKDVVTCkgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1BvaW50X1B4X0F0SW5maW5pdHkgKEJpdCA1KSAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfUG9pbnRfUHhfQXRJbmZpbml0eV9Nc2sgKDB4MjBVTCkgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX1BvaW50X1B4X0F0SW5maW5pdHkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfQ291cGxlX05vdFZhbGlkX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX0NvdXBsZV9Ob3RWYWxpZCAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIEVDQ19FQ0NfU1RBVFVTX1JFR19FQ0NfQ291cGxlX05vdFZhbGlkX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IEVDQyBFQ0NfU1RBVFVTX1JFRzogRUNDX0NvdXBsZV9Ob3RWYWxpZCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19QYXJhbV9uX05vdFZhbGlkX1BvcyAoN1VMKSAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfUGFyYW1fbl9Ob3RWYWxpZCAoQml0IDcpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19QYXJhbV9uX05vdFZhbGlkX01zayAoMHg4MFVMKSAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfUGFyYW1fbl9Ob3RWYWxpZCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19TaWduYXR1cmVfTm90VmFsaWRfUG9zICg5VUwpICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfU2lnbmF0dXJlX05vdFZhbGlkIChCaXQgOSkgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19TaWduYXR1cmVfTm90VmFsaWRfTXNrICgweDIwMFVMKSAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfU2lnbmF0dXJlX05vdFZhbGlkIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX1BhcmFtX0FCX05vdFZhbGlkX1BvcyAoMTBVTCkgICAgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19QYXJhbV9BQl9Ob3RWYWxpZCAoQml0IDEwKSAgICAgICAgICAqLworI2RlZmluZSBFQ0NfRUNDX1NUQVRVU19SRUdfRUNDX1BhcmFtX0FCX05vdFZhbGlkX01zayAoMHg0MDBVTCkgICAgICAgICAgLyohPCBFQ0MgRUNDX1NUQVRVU19SRUc6IEVDQ19QYXJhbV9BQl9Ob3RWYWxpZCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19Ob3RJbnZlcnRpYmxlX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfTm90SW52ZXJ0aWJsZSAoQml0IDExKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19Ob3RJbnZlcnRpYmxlX01zayAoMHg4MDBVTCkgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfTm90SW52ZXJ0aWJsZSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19QcmltYWxpdHlUZXN0UmVzdWx0X1BvcyAoMTJVTCkgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfUHJpbWFsaXR5VGVzdFJlc3VsdCAoQml0IDEyKSAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19QcmltYWxpdHlUZXN0UmVzdWx0X01zayAoMHgxMDAwVUwpICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfUHJpbWFsaXR5VGVzdFJlc3VsdCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19CdXN5X1BvcyAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfQnVzeSAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19TVEFUVVNfUkVHX0VDQ19CdXN5X01zayAgICAgICAoMHgxMDAwMFVMKSAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19TVEFUVVNfUkVHOiBFQ0NfQnVzeSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVDQ19FQ0NfVkVSU0lPTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRUNDX0VDQ19WRVJTSU9OX1JFR19FQ0NfU1ZOX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19WRVJTSU9OX1JFRzogRUNDX1NWTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19WRVJTSU9OX1JFR19FQ0NfU1ZOX01zayAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19WRVJTSU9OX1JFRzogRUNDX1NWTiAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19WRVJTSU9OX1JFR19FQ0NfSFZOX1BvcyAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19WRVJTSU9OX1JFRzogRUNDX0hWTiAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUNDX0VDQ19WRVJTSU9OX1JFR19FQ0NfSFZOX01zayAgICAgICAoMHhmZjAwVUwpICAgICAgICAgICAgICAgIC8qITwgRUNDIEVDQ19WRVJTSU9OX1JFRzogRUNDX0hWTiAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ0ZUREYnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GSUZPXzBfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fMF8wX1JFR19UWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fMF8wX1JFRzogVFhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fMF8wX1JFR19UWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fMF8wX1JFRzogVFhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GSUZPXzFfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fMV8wX1JFR19UWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fMV8wX1JFRzogVFhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fMV8wX1JFR19UWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fMV8wX1JFRzogVFhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GSUZPXzJfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fMl8wX1JFR19UWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fMl8wX1JFRzogVFhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fMl8wX1JFR19UWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fMl8wX1JFRzogVFhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GSUZPXzNfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fM18wX1JFR19UWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fM18wX1JFRzogVFhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZJRk9fM18wX1JFR19UWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZJRk9fM18wX1JFRzogVFhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0ZSQU1FX0xFTkdUSF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBGUkFNRV9MRU5HVEggKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0ZSQU1FX0xFTkdUSF9Nc2sgKDB4N2ZVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBGUkFNRV9MRU5HVEggKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19QSFlBVFRSX0RFTV9QVElfUG9zICg3VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogUEhZQVRUUl9ERU1fUFRJIChCaXQgNykgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19QSFlBVFRSX0RFTV9QVElfTXNrICgweDc4MFVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogUEhZQVRUUl9ERU1fUFRJIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9DTl9Qb3MgKDExVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfQ04gKEJpdCAxMSkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9DTl9Nc2sgKDB4NzgwMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfQ04gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19QSFlBVFRSX0NBTENBUF9Qb3MgKDE1VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogUEhZQVRUUl9DQUxDQVAgKEJpdCAxNSkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19QSFlBVFRSX0NBTENBUF9Nc2sgKDB4NzgwMDBVTCkgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogUEhZQVRUUl9DQUxDQVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19QSFlBVFRSX1JGX0dQSU9fUElOU19Qb3MgKDE5VUwpICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogUEhZQVRUUl9SRl9HUElPX1BJTlMgKEJpdCAxOSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX1BIWUFUVFJfUkZfR1BJT19QSU5TX01zayAoMHgzODAwMDBVTCkgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfUkZfR1BJT19QSU5TIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9IU0lfUG9zICgyMlVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfSFNJIChCaXQgMjIpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfUEhZQVRUUl9IU0lfTXNrICgweDQwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IFBIWUFUVFJfSFNJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfRlJBTUVUWVBFX1BvcyAoMjNVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IEZSQU1FVFlQRSAoQml0IDIzKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfRlJBTUVUWVBFX01zayAoMHgzODAwMDAwVUwpICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IEZSQU1FVFlQRSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0NTTUFDQV9FTkFfUG9zICgyNlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBDU01BQ0FfRU5BIChCaXQgMjYpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzBfUkVHX0NTTUFDQV9FTkFfTXNrICgweDQwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzBfUkVHOiBDU01BQ0FfRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfQUNLUkVRVUVTVF9Qb3MgKDI4VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IEFDS1JFUVVFU1QgKEJpdCAyOCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUdfQUNLUkVRVUVTVF9Nc2sgKDB4MTAwMDAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMF9SRUc6IEFDS1JFUVVFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19DUkMxNl9FTkFfUG9zICgzMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogQ1JDMTZfRU5BIChCaXQgMzApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFR19DUkMxNl9FTkFfTXNrICgweDQwMDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8wX1JFRzogQ1JDMTZfRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfMF9SRUdfTUFDU05fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzFfMF9SRUc6IE1BQ1NOIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfMF9SRUdfTUFDU05fTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzFfMF9SRUc6IE1BQ1NOIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfRlJBTUVfTEVOR1RIX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IEZSQU1FX0xFTkdUSCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfRlJBTUVfTEVOR1RIX01zayAoMHg3ZlVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IEZSQU1FX0xFTkdUSCAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX1BIWUFUVFJfREVNX1BUSV9Qb3MgKDdVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBQSFlBVFRSX0RFTV9QVEkgKEJpdCA3KSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX1BIWUFUVFJfREVNX1BUSV9Nc2sgKDB4NzgwVUwpICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBQSFlBVFRSX0RFTV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0NOX1BvcyAoMTFVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9DTiAoQml0IDExKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0NOX01zayAoMHg3ODAwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9DTiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX1BIWUFUVFJfQ0FMQ0FQX1BvcyAoMTVVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBQSFlBVFRSX0NBTENBUCAoQml0IDE1KSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX1BIWUFUVFJfQ0FMQ0FQX01zayAoMHg3ODAwMFVMKSAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBQSFlBVFRSX0NBTENBUCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX1BIWUFUVFJfUkZfR1BJT19QSU5TX1BvcyAoMTlVTCkgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBQSFlBVFRSX1JGX0dQSU9fUElOUyAoQml0IDE5KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfUEhZQVRUUl9SRl9HUElPX1BJTlNfTXNrICgweDM4MDAwMFVMKSAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9SRl9HUElPX1BJTlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0hTSV9Qb3MgKDIyVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9IU0kgKEJpdCAyMikgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19QSFlBVFRSX0hTSV9Nc2sgKDB4NDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogUEhZQVRUUl9IU0kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19GUkFNRVRZUEVfUG9zICgyM1VMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogRlJBTUVUWVBFIChCaXQgMjMpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19GUkFNRVRZUEVfTXNrICgweDM4MDAwMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogRlJBTUVUWVBFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfQ1NNQUNBX0VOQV9Qb3MgKDI2VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IENTTUFDQV9FTkEgKEJpdCAyNikgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUdfQ1NNQUNBX0VOQV9Nc2sgKDB4NDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMV9SRUc6IENTTUFDQV9FTkEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19BQ0tSRVFVRVNUX1BvcyAoMjhVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogQUNLUkVRVUVTVCAoQml0IDI4KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFR19BQ0tSRVFVRVNUX01zayAoMHgxMDAwMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8xX1JFRzogQUNLUkVRVUVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX0NSQzE2X0VOQV9Qb3MgKDMwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBDUkMxNl9FTkEgKEJpdCAzMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzFfUkVHX0NSQzE2X0VOQV9Nc2sgKDB4NDAwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzFfUkVHOiBDUkMxNl9FTkEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8xX1JFR19NQUNTTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMV8xX1JFRzogTUFDU04gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8xX1JFR19NQUNTTl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMV8xX1JFRzogTUFDU04gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19GUkFNRV9MRU5HVEhfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogRlJBTUVfTEVOR1RIIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19GUkFNRV9MRU5HVEhfTXNrICgweDdmVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogRlJBTUVfTEVOR1RIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfUEhZQVRUUl9ERU1fUFRJX1BvcyAoN1VMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IFBIWUFUVFJfREVNX1BUSSAoQml0IDcpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfUEhZQVRUUl9ERU1fUFRJX01zayAoMHg3ODBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IFBIWUFUVFJfREVNX1BUSSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfQ05fUG9zICgxMVVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0NOIChCaXQgMTEpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfQ05fTXNrICgweDc4MDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfUEhZQVRUUl9DQUxDQVBfUG9zICgxNVVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IFBIWUFUVFJfQ0FMQ0FQIChCaXQgMTUpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfUEhZQVRUUl9DQUxDQVBfTXNrICgweDc4MDAwVUwpICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IFBIWUFUVFJfQ0FMQ0FQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfUEhZQVRUUl9SRl9HUElPX1BJTlNfUG9zICgxOVVMKSAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IFBIWUFUVFJfUkZfR1BJT19QSU5TIChCaXQgMTkpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19QSFlBVFRSX1JGX0dQSU9fUElOU19Nc2sgKDB4MzgwMDAwVUwpIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX1JGX0dQSU9fUElOUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfSFNJX1BvcyAoMjJVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0hTSSAoQml0IDIyKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX1BIWUFUVFJfSFNJX01zayAoMHg0MDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBQSFlBVFRSX0hTSSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX0ZSQU1FVFlQRV9Qb3MgKDIzVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBGUkFNRVRZUEUgKEJpdCAyMykgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX0ZSQU1FVFlQRV9Nc2sgKDB4MzgwMDAwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBGUkFNRVRZUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19DU01BQ0FfRU5BX1BvcyAoMjZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogQ1NNQUNBX0VOQSAoQml0IDI2KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFR19DU01BQ0FfRU5BX01zayAoMHg0MDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8yX1JFRzogQ1NNQUNBX0VOQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX0FDS1JFUVVFU1RfUG9zICgyOFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBBQ0tSRVFVRVNUIChCaXQgMjgpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzJfUkVHX0FDS1JFUVVFU1RfTXNrICgweDEwMDAwMDAwVUwpICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzJfUkVHOiBBQ0tSRVFVRVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfQ1JDMTZfRU5BX1BvcyAoMzBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IENSQzE2X0VOQSAoQml0IDMwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUdfQ1JDMTZfRU5BX01zayAoMHg0MDAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfMl9SRUc6IENSQzE2X0VOQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzJfUkVHX01BQ1NOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8xXzJfUkVHOiBNQUNTTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzJfUkVHX01BQ1NOX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8xXzJfUkVHOiBNQUNTTiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0ZSQU1FX0xFTkdUSF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBGUkFNRV9MRU5HVEggKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0ZSQU1FX0xFTkdUSF9Nc2sgKDB4N2ZVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBGUkFNRV9MRU5HVEggKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19QSFlBVFRSX0RFTV9QVElfUG9zICg3VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogUEhZQVRUUl9ERU1fUFRJIChCaXQgNykgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19QSFlBVFRSX0RFTV9QVElfTXNrICgweDc4MFVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogUEhZQVRUUl9ERU1fUFRJIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9DTl9Qb3MgKDExVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfQ04gKEJpdCAxMSkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9DTl9Nc2sgKDB4NzgwMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfQ04gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19QSFlBVFRSX0NBTENBUF9Qb3MgKDE1VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogUEhZQVRUUl9DQUxDQVAgKEJpdCAxNSkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19QSFlBVFRSX0NBTENBUF9Nc2sgKDB4NzgwMDBVTCkgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogUEhZQVRUUl9DQUxDQVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19QSFlBVFRSX1JGX0dQSU9fUElOU19Qb3MgKDE5VUwpICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogUEhZQVRUUl9SRl9HUElPX1BJTlMgKEJpdCAxOSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX1BIWUFUVFJfUkZfR1BJT19QSU5TX01zayAoMHgzODAwMDBVTCkgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfUkZfR1BJT19QSU5TIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9IU0lfUG9zICgyMlVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfSFNJIChCaXQgMjIpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfUEhZQVRUUl9IU0lfTXNrICgweDQwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IFBIWUFUVFJfSFNJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfRlJBTUVUWVBFX1BvcyAoMjNVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IEZSQU1FVFlQRSAoQml0IDIzKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfRlJBTUVUWVBFX01zayAoMHgzODAwMDAwVUwpICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IEZSQU1FVFlQRSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0NTTUFDQV9FTkFfUG9zICgyNlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBDU01BQ0FfRU5BIChCaXQgMjYpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX01FVEFfREFUQV8wXzNfUkVHX0NTTUFDQV9FTkFfTXNrICgweDQwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX01FVEFfREFUQV8wXzNfUkVHOiBDU01BQ0FfRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfQUNLUkVRVUVTVF9Qb3MgKDI4VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IEFDS1JFUVVFU1QgKEJpdCAyOCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUdfQUNLUkVRVUVTVF9Nc2sgKDB4MTAwMDAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzBfM19SRUc6IEFDS1JFUVVFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19DUkMxNl9FTkFfUG9zICgzMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogQ1JDMTZfRU5BIChCaXQgMzApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFR19DUkMxNl9FTkFfTXNrICgweDQwMDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9UWF9NRVRBX0RBVEFfMF8zX1JFRzogQ1JDMTZfRU5BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX01FVEFfREFUQV8xXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfM19SRUdfTUFDU05fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzFfM19SRUc6IE1BQ1NOIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfTUVUQV9EQVRBXzFfM19SRUdfTUFDU05fTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfTUVUQV9EQVRBXzFfM19SRUc6IE1BQ1NOIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzBfUkVHX1RYVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzBfUkVHOiBUWFRJTUVTVEFNUCAoQml0IDApICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzBfUkVHX1RYVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMF9SRUc6IFRYVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHX0FDS0ZBSUxfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOiBBQ0tGQUlMIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHX0FDS0ZBSUxfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOiBBQ0tGQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHX0NTTUFDQUZBSUxfUG9zICgxVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOiBDU01BQ0FGQUlMIChCaXQgMSkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHX0NTTUFDQUZBSUxfTXNrICgweDJVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOiBDU01BQ0FGQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHX0NTTUFDQU5SUkVUUklFU19Qb3MgKDJVTCkgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOiBDU01BQ0FOUlJFVFJJRVMgKEJpdCAyKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHX0NTTUFDQU5SUkVUUklFU19Nc2sgKDB4MWNVTCkgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzBfUkVHOiBDU01BQ0FOUlJFVFJJRVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMV9SRUdfVFhUSU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMV9SRUc6IFRYVElNRVNUQU1QIChCaXQgMCkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfMV9SRUdfVFhUSU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8xX1JFRzogVFhUSU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUdfQUNLRkFJTF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUc6IEFDS0ZBSUwgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUdfQUNLRkFJTF9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUc6IEFDS0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUdfQ1NNQUNBRkFJTF9Qb3MgKDFVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUc6IENTTUFDQUZBSUwgKEJpdCAxKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUdfQ1NNQUNBRkFJTF9Nc2sgKDB4MlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUc6IENTTUFDQUZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUdfQ1NNQUNBTlJSRVRSSUVTX1BvcyAoMlVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUc6IENTTUFDQU5SUkVUUklFUyAoQml0IDIpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUdfQ1NNQUNBTlJSRVRSSUVTX01zayAoMHgxY1VMKSAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfMV9SRUc6IENTTUFDQU5SUkVUUklFUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8yX1JFR19UWFRJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8yX1JFRzogVFhUSU1FU1RBTVAgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMF8yX1JFR19UWFRJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzJfUkVHOiBUWFRJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFR19BQ0tGQUlMX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzogQUNLRkFJTCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFR19BQ0tGQUlMX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzogQUNLRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFR19DU01BQ0FGQUlMX1BvcyAoMVVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzogQ1NNQUNBRkFJTCAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFR19DU01BQ0FGQUlMX01zayAoMHgyVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzogQ1NNQUNBRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFR19DU01BQ0FOUlJFVFJJRVNfUG9zICgyVUwpICAgIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzogQ1NNQUNBTlJSRVRSSUVTIChCaXQgMikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFR19DU01BQ0FOUlJFVFJJRVNfTXNrICgweDFjVUwpIC8qITwgRlRERiBGVERGX1RYX1JFVFVSTl9TVEFUVVNfMV8yX1JFRzogQ1NNQUNBTlJSRVRSSUVTIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzNfUkVHX1RYVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzNfUkVHOiBUWFRJTUVTVEFNUCAoQml0IDApICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18wXzNfUkVHX1RYVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9UWF9SRVRVUk5fU1RBVFVTXzBfM19SRUc6IFRYVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9SRVRVUk5fU1RBVFVTXzFfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHX0FDS0ZBSUxfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHOiBBQ0tGQUlMIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHX0FDS0ZBSUxfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHOiBBQ0tGQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHX0NTTUFDQUZBSUxfUG9zICgxVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHOiBDU01BQ0FGQUlMIChCaXQgMSkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHX0NTTUFDQUZBSUxfTXNrICgweDJVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHOiBDU01BQ0FGQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHX0NTTUFDQU5SUkVUUklFU19Qb3MgKDJVTCkgICAgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHOiBDU01BQ0FOUlJFVFJJRVMgKEJpdCAyKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHX0NTTUFDQU5SUkVUUklFU19Nc2sgKDB4MWNVTCkgLyohPCBGVERGIEZUREZfVFhfUkVUVVJOX1NUQVRVU18xXzNfUkVHOiBDU01BQ0FOUlJFVFJJRVMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8wXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfMF9SRUdfUlhfVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfMF9SRUc6IFJYX1RJTUVTVEFNUCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfMF9SRUdfUlhfVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfMF9SRUc6IFJYX1RJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19DUkMxNl9FUlJPUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogQ1JDMTZfRVJST1IgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19DUkMxNl9FUlJPUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogQ1JDMTZfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0IDIpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX01zayAoMHg0VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfUG9zICgzVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXQgMykgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8wX1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfTXNrICgweDhVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8wX1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX0RQQU5JRF9FUlJPUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBEUEFOSURfRVJST1IgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX0RQQU5JRF9FUlJPUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBEUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfREFERFJfRVJST1JfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IERBRERSX0VSUk9SIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfREFERFJfRVJST1JfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IERBRERSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX1NQQU5JRF9FUlJPUl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBTUEFOSURfRVJST1IgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzBfUkVHX1NQQU5JRF9FUlJPUl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzBfUkVHOiBTUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdCA3KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMF9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfTXNrICgweGZmMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMF9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzFfUkVHX1JYX1RJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzFfUkVHOiBSWF9USU1FU1RBTVAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzFfUkVHX1JYX1RJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzFfUkVHOiBSWF9USU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfQ1JDMTZfRVJST1JfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IENSQzE2X0VSUk9SIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfQ1JDMTZfRVJST1JfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IENSQzE2X0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMV9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMV9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19EUEFOSURfRVJST1JfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogRFBBTklEX0VSUk9SIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19EUEFOSURfRVJST1JfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogRFBBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX0RBRERSX0VSUk9SX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBEQUREUl9FUlJPUiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX0RBRERSX0VSUk9SX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBEQUREUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19TUEFOSURfRVJST1JfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogU1BBTklEX0VSUk9SIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8xX1JFR19TUEFOSURfRVJST1JfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8xX1JFRzogU1BBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfUG9zICg3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXQgNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfTXNrICgweDgwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzFfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzFfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzBfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF8yX1JFR19SWF9USU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF8yX1JFRzogUlhfVElNRVNUQU1QIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF8yX1JFR19SWF9USU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF8yX1JFRzogUlhfVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX0NSQzE2X0VSUk9SX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBDUkMxNl9FUlJPUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX0NSQzE2X0VSUk9SX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBDUkMxNl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19SRVNfRlJNX1RZUEVfRVJST1JfUG9zICgyVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXQgMikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19SRVNfRlJNX1RZUEVfRVJST1JfTXNrICgweDRVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Qb3MgKDNVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdCAzKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzJfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Nc2sgKDB4OFVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzJfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfRFBBTklEX0VSUk9SX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IERQQU5JRF9FUlJPUiAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfRFBBTklEX0VSUk9SX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IERQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19EQUREUl9FUlJPUl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogREFERFJfRVJST1IgKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19EQUREUl9FUlJPUl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogREFERFJfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfU1BBTklEX0VSUk9SX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IFNQQU5JRF9FUlJPUiAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfMl9SRUdfU1BBTklEX0VSUk9SX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfMl9SRUc6IFNQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX1BvcyAoN1VMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX01zayAoMHg4MFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19RVUFMSVRZX0lORElDQVRPUl9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8yX1JFR19RVUFMSVRZX0lORElDQVRPUl9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8yX1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8wXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfM19SRUdfUlhfVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfM19SRUc6IFJYX1RJTUVTVEFNUCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfM19SRUdfUlhfVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfM19SRUc6IFJYX1RJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19DUkMxNl9FUlJPUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogQ1JDMTZfRVJST1IgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19DUkMxNl9FUlJPUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogQ1JDMTZfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0IDIpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX01zayAoMHg0VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfUG9zICgzVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXQgMykgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV8zX1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfTXNrICgweDhVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV8zX1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX0RQQU5JRF9FUlJPUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBEUEFOSURfRVJST1IgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX0RQQU5JRF9FUlJPUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBEUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfREFERFJfRVJST1JfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IERBRERSX0VSUk9SIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfREFERFJfRVJST1JfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IERBRERSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX1NQQU5JRF9FUlJPUl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBTUEFOSURfRVJST1IgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzNfUkVHX1NQQU5JRF9FUlJPUl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzNfUkVHOiBTUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdCA3KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfUVVBTElUWV9JTkRJQ0FUT1JfUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfM19SRUdfUVVBTElUWV9JTkRJQ0FUT1JfTXNrICgweGZmMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfM19SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMF80X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzRfUkVHX1JYX1RJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzRfUkVHOiBSWF9USU1FU1RBTVAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzRfUkVHX1JYX1RJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzRfUkVHOiBSWF9USU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfQ1JDMTZfRVJST1JfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IENSQzE2X0VSUk9SIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfQ1JDMTZfRVJST1JfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IENSQzE2X0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNF9SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNF9SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19EUEFOSURfRVJST1JfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogRFBBTklEX0VSUk9SIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19EUEFOSURfRVJST1JfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogRFBBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX0RBRERSX0VSUk9SX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBEQUREUl9FUlJPUiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX0RBRERSX0VSUk9SX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBEQUREUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19TUEFOSURfRVJST1JfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogU1BBTklEX0VSUk9SIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV80X1JFR19TUEFOSURfRVJST1JfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV80X1JFRzogU1BBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfUG9zICg3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXQgNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfTXNrICgweDgwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzRfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzRfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzBfNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF81X1JFR19SWF9USU1FU1RBTVBfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF81X1JFRzogUlhfVElNRVNUQU1QIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMF81X1JFR19SWF9USU1FU1RBTVBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMF81X1JFRzogUlhfVElNRVNUQU1QIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMV81X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX0NSQzE2X0VSUk9SX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBDUkMxNl9FUlJPUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX0NSQzE2X0VSUk9SX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBDUkMxNl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19SRVNfRlJNX1RZUEVfRVJST1JfUG9zICgyVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXQgMikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19SRVNfRlJNX1RZUEVfRVJST1JfTXNrICgweDRVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogUkVTX0ZSTV9UWVBFX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Qb3MgKDNVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdCAzKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzVfUkVHX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9Nc2sgKDB4OFVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzVfUkVHOiBSRVNfRlJNX1ZFUlNJT05fRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfRFBBTklEX0VSUk9SX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IERQQU5JRF9FUlJPUiAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfRFBBTklEX0VSUk9SX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IERQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19EQUREUl9FUlJPUl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogREFERFJfRVJST1IgKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19EQUREUl9FUlJPUl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogREFERFJfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfU1BBTklEX0VSUk9SX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IFNQQU5JRF9FUlJPUiAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNV9SRUdfU1BBTklEX0VSUk9SX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNV9SRUc6IFNQQU5JRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX1BvcyAoN1VMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19JU1BBTklEX0NPT1JEX0VSUk9SX01zayAoMHg4MFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogSVNQQU5JRF9DT09SRF9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19RVUFMSVRZX0lORElDQVRPUl9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV81X1JFR19RVUFMSVRZX0lORElDQVRPUl9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV81X1JFRzogUVVBTElUWV9JTkRJQ0FUT1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8wXzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfNl9SRUdfUlhfVElNRVNUQU1QX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfNl9SRUc6IFJYX1RJTUVTVEFNUCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzBfNl9SRUdfUlhfVElNRVNUQU1QX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzBfNl9SRUc6IFJYX1RJTUVTVEFNUCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19DUkMxNl9FUlJPUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogQ1JDMTZfRVJST1IgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19DUkMxNl9FUlJPUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogQ1JDMTZfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX1BvcyAoMlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0IDIpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfUkVTX0ZSTV9UWVBFX0VSUk9SX01zayAoMHg0VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IFJFU19GUk1fVFlQRV9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfUG9zICgzVUwpICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXQgMykgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV82X1JFR19SRVNfRlJNX1ZFUlNJT05fRVJST1JfTXNrICgweDhVTCkgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV82X1JFRzogUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX0RQQU5JRF9FUlJPUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBEUEFOSURfRVJST1IgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX0RQQU5JRF9FUlJPUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBEUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfREFERFJfRVJST1JfUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IERBRERSX0VSUk9SIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfREFERFJfRVJST1JfTXNrICgweDIwVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IERBRERSX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX1NQQU5JRF9FUlJPUl9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBTUEFOSURfRVJST1IgKEJpdCA2KSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzZfUkVHX1NQQU5JRF9FUlJPUl9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzZfUkVHOiBTUEFOSURfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Qb3MgKDdVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdCA3KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfSVNQQU5JRF9DT09SRF9FUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IElTUEFOSURfQ09PUkRfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfUG9zICg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfNl9SRUdfUVVBTElUWV9JTkRJQ0FUT1JfTXNrICgweGZmMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfNl9SRUc6IFFVQUxJVFlfSU5ESUNBVE9SIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX01FVEFfMF83X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzdfUkVHX1JYX1RJTUVTVEFNUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzdfUkVHOiBSWF9USU1FU1RBTVAgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8wXzdfUkVHX1JYX1RJTUVTVEFNUF9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8wXzdfUkVHOiBSWF9USU1FU1RBTVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfQ1JDMTZfRVJST1JfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IENSQzE2X0VSUk9SIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfQ1JDMTZfRVJST1JfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IENSQzE2X0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX1JFU19GUk1fVFlQRV9FUlJPUl9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBSRVNfRlJNX1RZUEVfRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX1BvcyAoM1VMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0IDMpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NRVRBXzFfN19SRUdfUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX01zayAoMHg4VUwpICAgICAvKiE8IEZUREYgRlRERl9SWF9NRVRBXzFfN19SRUc6IFJFU19GUk1fVkVSU0lPTl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19EUEFOSURfRVJST1JfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogRFBBTklEX0VSUk9SIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19EUEFOSURfRVJST1JfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogRFBBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX0RBRERSX0VSUk9SX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBEQUREUl9FUlJPUiAoQml0IDUpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX0RBRERSX0VSUk9SX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBEQUREUl9FUlJPUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19TUEFOSURfRVJST1JfUG9zICg2VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogU1BBTklEX0VSUk9SIChCaXQgNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX01FVEFfMV83X1JFR19TUEFOSURfRVJST1JfTXNrICgweDQwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX01FVEFfMV83X1JFRzogU1BBTklEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfUG9zICg3VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXQgNykgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX0lTUEFOSURfQ09PUkRfRVJST1JfTXNrICgweDgwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBJU1BBTklEX0NPT1JEX0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfTUVUQV8xXzdfUkVHX1FVQUxJVFlfSU5ESUNBVE9SX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfTUVUQV8xXzdfUkVHOiBRVUFMSVRZX0lORElDQVRPUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzBfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fMF8wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fMF8wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fMF8wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fMF8wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzFfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fMV8wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fMV8wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fMV8wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fMV8wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzJfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fMl8wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fMl8wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fMl8wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fMl8wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzNfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fM18wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fM18wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fM18wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fM18wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzRfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fNF8wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fNF8wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fNF8wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fNF8wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzVfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fNV8wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fNV8wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fNV8wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fNV8wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzZfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fNl8wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fNl8wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fNl8wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fNl8wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9GSUZPXzdfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fN18wX1JFR19SWF9GSUZPX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fN18wX1JFRzogUlhfRklGTyAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0ZJRk9fN18wX1JFR19SWF9GSUZPX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0ZJRk9fN18wX1JFRzogUlhfRklGTyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SRUxfTkFNRV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzBfUkVHX1JFTF9OQU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzBfUkVHOiBSRUxfTkFNRSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzBfUkVHX1JFTF9OQU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzBfUkVHOiBSRUxfTkFNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SRUxfTkFNRV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzFfUkVHX1JFTF9OQU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzFfUkVHOiBSRUxfTkFNRSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzFfUkVHX1JFTF9OQU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzFfUkVHOiBSRUxfTkFNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SRUxfTkFNRV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzJfUkVHX1JFTF9OQU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzJfUkVHOiBSRUxfTkFNRSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzJfUkVHX1JFTF9OQU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzJfUkVHOiBSRUxfTkFNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SRUxfTkFNRV8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzNfUkVHX1JFTF9OQU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzNfUkVHOiBSRUxfTkFNRSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JFTF9OQU1FXzNfUkVHX1JFTF9OQU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JFTF9OQU1FXzNfUkVHOiBSRUxfTkFNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9CVUlMRFRJTUVfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0JVSUxEVElNRV8wX1JFR19CVUlMRFRJTUVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0JVSUxEVElNRV8wX1JFRzogQlVJTERUSU1FIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0JVSUxEVElNRV8wX1JFR19CVUlMRFRJTUVfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0JVSUxEVElNRV8wX1JFRzogQlVJTERUSU1FIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0JVSUxEVElNRV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfQlVJTERUSU1FXzFfUkVHX0JVSUxEVElNRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfQlVJTERUSU1FXzFfUkVHOiBCVUlMRFRJTUUgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfQlVJTERUSU1FXzFfUkVHX0JVSUxEVElNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfQlVJTERUSU1FXzFfUkVHOiBCVUlMRFRJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfQlVJTERUSU1FXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9CVUlMRFRJTUVfMl9SRUdfQlVJTERUSU1FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9CVUlMRFRJTUVfMl9SRUc6IEJVSUxEVElNRSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9CVUlMRFRJTUVfMl9SRUdfQlVJTERUSU1FX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9CVUlMRFRJTUVfMl9SRUc6IEJVSUxEVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9CVUlMRFRJTUVfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0JVSUxEVElNRV8zX1JFR19CVUlMRFRJTUVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0JVSUxEVElNRV8zX1JFRzogQlVJTERUSU1FIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0JVSUxEVElNRV8zX1JFR19CVUlMRFRJTUVfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0JVSUxEVElNRV8zX1JFRzogQlVJTERUSU1FIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9HTE9CX0NPTlRST0xfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX0lTUEFOQ09PUkRJTkFUT1JfUG9zICgxVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBJU1BBTkNPT1JESU5BVE9SIChCaXQgMSkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX0lTUEFOQ09PUkRJTkFUT1JfTXNrICgweDJVTCkgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBJU1BBTkNPT1JESU5BVE9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX1JYX0RNQV9SRVFfUG9zICgyVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBSWF9ETUFfUkVRIChCaXQgMikgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX1JYX0RNQV9SRVFfTXNrICgweDRVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBSWF9ETUFfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX1RYX0RNQV9SRVFfUG9zICgzVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBUWF9ETUFfUkVRIChCaXQgMykgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX1RYX0RNQV9SRVFfTXNrICgweDhVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBUWF9ETUFfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX01BQ1NJTVBMRUFERFJFU1NfUG9zICg4VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBNQUNTSU1QTEVBRERSRVNTIChCaXQgOCkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX01BQ1NJTVBMRUFERFJFU1NfTXNrICgweGZmMDBVTCkgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBNQUNTSU1QTEVBRERSRVNTIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX01BQ0xFRU5BQkxFRF9Qb3MgKDE3VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBNQUNMRUVOQUJMRUQgKEJpdCAxNykgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzBfUkVHX01BQ0xFRU5BQkxFRF9Nc2sgKDB4MjAwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzBfUkVHOiBNQUNMRUVOQUJMRUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9HTE9CX0NPTlRST0xfMF9SRUdfTUFDVFNDSEVOQUJMRURfUG9zICgxOFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9HTE9CX0NPTlRST0xfMF9SRUc6IE1BQ1RTQ0hFTkFCTEVEIChCaXQgMTgpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9HTE9CX0NPTlRST0xfMF9SRUdfTUFDVFNDSEVOQUJMRURfTXNrICgweDQwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9HTE9CX0NPTlRST0xfMF9SRUc6IE1BQ1RTQ0hFTkFCTEVEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9HTE9CX0NPTlRST0xfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzFfUkVHX01BQ1BBTklEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzFfUkVHOiBNQUNQQU5JRCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzFfUkVHX01BQ1BBTklEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzFfUkVHOiBNQUNQQU5JRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzFfUkVHX01BQ1NIT1JUQUREUkVTU19Qb3MgKDE2VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzFfUkVHOiBNQUNTSE9SVEFERFJFU1MgKEJpdCAxNikgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzFfUkVHX01BQ1NIT1JUQUREUkVTU19Nc2sgKDB4ZmZmZjAwMDBVTCkgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzFfUkVHOiBNQUNTSE9SVEFERFJFU1MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8yX1JFR19BRVhURU5ERURBRERSRVNTX0xfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8yX1JFRzogQUVYVEVOREVEQUREUkVTU19MIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0dMT0JfQ09OVFJPTF8yX1JFR19BRVhURU5ERURBRERSRVNTX0xfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX0dMT0JfQ09OVFJPTF8yX1JFRzogQUVYVEVOREVEQUREUkVTU19MIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9HTE9CX0NPTlRST0xfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzNfUkVHX0FFWFRFTkRFREFERFJFU1NfSF9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzNfUkVHOiBBRVhURU5ERURBRERSRVNTX0ggKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfR0xPQl9DT05UUk9MXzNfUkVHX0FFWFRFTkRFREFERFJFU1NfSF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfR0xPQl9DT05UUk9MXzNfUkVHOiBBRVhURU5ERURBRERSRVNTX0ggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfUlhPTkRVUkFUSU9OX1BvcyAoMVVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IFJYT05EVVJBVElPTiAoQml0IDEpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfUlhPTkRVUkFUSU9OX01zayAoMHgxZmZmZmZlVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IFJYT05EVVJBVElPTiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfUlhBTFdBWVNPTl9Qb3MgKDI1VUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IFJYQUxXQVlTT04gKEJpdCAyNSkgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfUlhBTFdBWVNPTl9Nc2sgKDB4MjAwMDAwMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IFJYQUxXQVlTT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfUFRJX1JYX1BvcyAoMjdVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IFBUSV9SWCAoQml0IDI3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfUFRJX1JYX01zayAoMHg3ODAwMDAwMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IFBUSV9SWCAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfS0VFUF9QSFlfRU5fUG9zICgzMVVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IEtFRVBfUEhZX0VOIChCaXQgMzEpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMF9SRUdfS0VFUF9QSFlfRU5fTXNrICgweDgwMDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMF9SRUc6IEtFRVBfUEhZX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWFBJUEVQUk9QREVMQVlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhQSVBFUFJPUERFTEFZX1JFR19UWFBJUEVQUk9QREVMQVlfUG9zICgwVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfVFhQSVBFUFJPUERFTEFZX1JFRzogVFhQSVBFUFJPUERFTEFZIChCaXQgMCkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhQSVBFUFJPUERFTEFZX1JFR19UWFBJUEVQUk9QREVMQVlfTXNrICgweGZmVUwpICAgICAgLyohPCBGVERGIEZUREZfVFhQSVBFUFJPUERFTEFZX1JFRzogVFhQSVBFUFJPUERFTEFZIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTUFDQUNLV0FJVERVUkFUSU9OX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDQUNLV0FJVERVUkFUSU9OX1JFR19NQUNBQ0tXQUlURFVSQVRJT05fUG9zICgwVUwpICAgLyohPCBGVERGIEZUREZfTUFDQUNLV0FJVERVUkFUSU9OX1JFRzogTUFDQUNLV0FJVERVUkFUSU9OIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ0FDS1dBSVREVVJBVElPTl9SRUdfTUFDQUNLV0FJVERVUkFUSU9OX01zayAoMHhmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNBQ0tXQUlURFVSQVRJT05fUkVHOiBNQUNBQ0tXQUlURFVSQVRJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ0VOSEFDS1dBSVREVVJBVElPTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNFTkhBQ0tXQUlURFVSQVRJT05fUkVHX01BQ0VOSEFDS1dBSVREVVJBVElPTl9Qb3MgKDBVTCkgLyohPCBGVERGIEZUREZfTUFDRU5IQUNLV0FJVERVUkFUSU9OX1JFRzogTUFDRU5IQUNLV0FJVERVUkFUSU9OIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ0VOSEFDS1dBSVREVVJBVElPTl9SRUdfTUFDRU5IQUNLV0FJVERVUkFUSU9OX01zayAoMHhmZmZmVUwpIC8qITwgRlRERiBGVERGX01BQ0VOSEFDS1dBSVREVVJBVElPTl9SRUc6IE1BQ0VOSEFDS1dBSVREVVJBVElPTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9ERU1fUFRJX1BvcyAoMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfREVNX1BUSSAoQml0IDApICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9ERU1fUFRJX01zayAoMHhmVUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfREVNX1BUSSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfQ05fUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX0NOIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xX1JFR19QSFlSWEFUVFJfQ05fTXNrICgweGYwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xX1JFRzogUEhZUlhBVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9DQUxDQVBfUG9zICg4VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfQ0FMQ0FQIChCaXQgOCkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9DQUxDQVBfTXNrICgweGYwMFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfQ0FMQ0FQIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzFfUkVHX1BIWVJYQVRUUl9SRl9HUElPX1BJTlNfUG9zICgxMlVMKSAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzFfUkVHOiBQSFlSWEFUVFJfUkZfR1BJT19QSU5TIChCaXQgMTIpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMV9SRUdfUEhZUlhBVFRSX1JGX0dQSU9fUElOU19Nc2sgKDB4NzAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMV9SRUc6IFBIWVJYQVRUUl9SRl9HUElPX1BJTlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMV9SRUdfUEhZUlhBVFRSX0hTSV9Qb3MgKDE1VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMV9SRUc6IFBIWVJYQVRUUl9IU0kgKEJpdCAxNSkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMV9SRUdfUEhZUlhBVFRSX0hTSV9Nc2sgKDB4ODAwMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMV9SRUc6IFBIWVJYQVRUUl9IU0kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMl9SRUdfRURTQ0FORU5BQkxFX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMl9SRUc6IEVEU0NBTkVOQUJMRSAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMl9SRUdfRURTQ0FORU5BQkxFX01zayAoMHgxVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMl9SRUc6IEVEU0NBTkVOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8yX1JFR19FRFNDQU5EVVJBVElPTl9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8yX1JFRzogRURTQ0FORFVSQVRJT04gKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8yX1JFR19FRFNDQU5EVVJBVElPTl9Nc2sgKDB4ZmZmZmZmMDBVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8yX1JFRzogRURTQ0FORFVSQVRJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX01BQ01BWEZSQU1FVE9UQUxXQUlUVElNRV9Qb3MgKDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBNQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX01BQ01BWEZSQU1FVE9UQUxXQUlUVElNRV9Nc2sgKDB4ZmZmZlVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IE1BQ01BWEZSQU1FVE9UQUxXQUlUVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX0NDQUlETEVXQUlUX1BvcyAoMTZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBDQ0FJRExFV0FJVCAoQml0IDE2KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX0NDQUlETEVXQUlUX01zayAoMHhmZjAwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBDQ0FJRExFV0FJVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19BRERSX1RBQl9NQVRDSF9GUF9WQUxVRV9Qb3MgKDI0VUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogQUREUl9UQUJfTUFUQ0hfRlBfVkFMVUUgKEJpdCAyNCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19BRERSX1RBQl9NQVRDSF9GUF9WQUxVRV9Nc2sgKDB4MTAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IEFERFJfVEFCX01BVENIX0ZQX1ZBTFVFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX0ZQX09WRVJSSURFX1BvcyAoMjVVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBGUF9PVkVSUklERSAoQml0IDI1KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzNfUkVHX0ZQX09WRVJSSURFX01zayAoMHgyMDAwMDAwVUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzNfUkVHOiBGUF9PVkVSUklERSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19GUF9GT1JDRV9WQUxVRV9Qb3MgKDI2VUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogRlBfRk9SQ0VfVkFMVUUgKEJpdCAyNikgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8zX1JFR19GUF9GT1JDRV9WQUxVRV9Nc2sgKDB4NDAwMDAwMFVMKSAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8zX1JFRzogRlBfRk9SQ0VfVkFMVUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUdfRlRERl9MUERQX0VOQUJMRV9Qb3MgKDI3VUwpICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IEZUREZfTFBEUF9FTkFCTEUgKEJpdCAyNykgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfM19SRUdfRlRERl9MUERQX0VOQUJMRV9Nc2sgKDB4ODAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfM19SRUc6IEZUREZfTFBEUF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX0dFVEdFTkVSQVRPUlZBTF9Qb3MgKDBVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBHRVRHRU5FUkFUT1JWQUwgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX0dFVEdFTkVSQVRPUlZBTF9Nc2sgKDB4MVVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBHRVRHRU5FUkFUT1JWQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX1JYRU5BQkxFX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBSWEVOQUJMRSAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHX1JYRU5BQkxFX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfT1NfUkVHOiBSWEVOQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUdfU0lOR0xFQ0NBX1BvcyAoMlVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc6IFNJTkdMRUNDQSAoQml0IDIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUdfU0lOR0xFQ0NBX01zayAoMHg0VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc6IFNJTkdMRUNDQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUdfQ1NNQV9DQV9SRVNVTUVfU0VUX1BvcyAoM1VMKSAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc6IENTTUFfQ0FfUkVTVU1FX1NFVCAoQml0IDMpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUdfQ1NNQV9DQV9SRVNVTUVfU0VUX01zayAoMHg4VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc6IENTTUFfQ0FfUkVTVU1FX1NFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUdfQ1NNQV9DQV9SRVNVTUVfQ0xFQVJfUG9zICg0VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc6IENTTUFfQ0FfUkVTVU1FX0NMRUFSIChCaXQgNCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9PU19SRUdfQ1NNQV9DQV9SRVNVTUVfQ0xFQVJfTXNrICgweDEwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9PU19SRUc6IENTTUFfQ0FfUkVTVU1FX0NMRUFSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfTE1BQ1JFQURZNFNMRUVQX1BvcyAoMVVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IExNQUNSRUFEWTRTTEVFUCAoQml0IDEpICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfTE1BQ1JFQURZNFNMRUVQX01zayAoMHgyVUwpICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IExNQUNSRUFEWTRTTEVFUCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NDQVNUQVRfUG9zICgyVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBDQ0FTVEFUIChCaXQgMikgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NDQVNUQVRfTXNrICgweDRVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBDQ0FTVEFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfUG9zICg2VUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBXQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAoQml0IDYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFR19XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19Nc2sgKDB4NDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IFdBS0VVUFRJTUVSRU5BQkxFU1RBVFVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfRURTQ0FOVkFMVUVfUG9zICg4VUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IEVEU0NBTlZBTFVFIChCaXQgOCkgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfRURTQ0FOVkFMVUVfTXNrICgweGZmMDBVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IEVEU0NBTlZBTFVFIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfQ1NNQV9DQV9OQl9TVEFUX1BvcyAoMTZVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IENTTUFfQ0FfTkJfU1RBVCAoQml0IDE2KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfQ1NNQV9DQV9OQl9TVEFUX01zayAoMHg3MDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogQ1NNQV9DQV9OQl9TVEFUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUdfQ1NNQV9DQV9SRVNVTUVfU1RBVF9Qb3MgKDE5VUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBDU01BX0NBX1JFU1VNRV9TVEFUIChCaXQgMTkpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFR19DU01BX0NBX1JFU1VNRV9TVEFUX01zayAoMHg4MDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfU1RBVFVTX1JFRzogQ1NNQV9DQV9SRVNVTUVfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NTTUFfQ0FfQk9fU1RBVF9Qb3MgKDI0VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHOiBDU01BX0NBX0JPX1NUQVQgKEJpdCAyNCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9TVEFUVVNfUkVHX0NTTUFfQ0FfQk9fU1RBVF9Nc2sgKDB4ZmYwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX1NUQVRVU19SRUc6IENTTUFfQ0FfQk9fU1RBVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0VWRU5UQ1VSUlZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0VWRU5UQ1VSUlZBTF9SRUdfRVZFTlRDVVJSVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0VWRU5UQ1VSUlZBTF9SRUc6IEVWRU5UQ1VSUlZBTCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0VWRU5UQ1VSUlZBTF9SRUdfRVZFTlRDVVJSVkFMX01zayAoMHgxZmZmZmZmVUwpICAgICAgIC8qITwgRlRERiBGVERGX0VWRU5UQ1VSUlZBTF9SRUc6IEVWRU5UQ1VSUlZBTCAoQml0ZmllbGQtTWFzazogMHgxZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RJTUVTVEFNUENVUlJWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVElNRVNUQU1QQ1VSUlZBTF9SRUdfVElNRVNUQU1QQ1VSUlZBTF9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfVElNRVNUQU1QQ1VSUlZBTF9SRUc6IFRJTUVTVEFNUENVUlJWQUwgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVElNRVNUQU1QQ1VSUlZBTF9SRUdfVElNRVNUQU1QQ1VSUlZBTF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfVElNRVNUQU1QQ1VSUlZBTF9SRUc6IFRJTUVTVEFNUENVUlJWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZU0xFRVBXQUlUX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWVNMRUVQV0FJVCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZU0xFRVBXQUlUX01zayAoMHhmZlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWVNMRUVQV0FJVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19SWFBJUEVQUk9QREVMQVlfUG9zICg4VUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUlhQSVBFUFJPUERFTEFZIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19SWFBJUEVQUk9QREVMQVlfTXNrICgweGZmMDBVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUlhQSVBFUFJPUERFTEFZIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWUFDS0FUVFJfREVNX1BUSV9Qb3MgKDE2VUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX0RFTV9QVEkgKEJpdCAxNikgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzRfUkVHX1BIWUFDS0FUVFJfREVNX1BUSV9Nc2sgKDB4ZjAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX0RFTV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9DTl9Qb3MgKDIwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWUFDS0FUVFJfQ04gKEJpdCAyMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9DTl9Nc2sgKDB4ZjAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWUFDS0FUVFJfQ04gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9DQUxDQVBfUG9zICgyNFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNF9SRUc6IFBIWUFDS0FUVFJfQ0FMQ0FQIChCaXQgMjQpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNF9SRUdfUEhZQUNLQVRUUl9DQUxDQVBfTXNrICgweGYwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX0NBTENBUCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19QSFlBQ0tBVFRSX1JGX0dQSU9fUElOU19Qb3MgKDI4VUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9SRl9HUElPX1BJTlMgKEJpdCAyOCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19QSFlBQ0tBVFRSX1JGX0dQSU9fUElOU19Nc2sgKDB4NzAwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzRfUkVHOiBQSFlBQ0tBVFRSX1JGX0dQSU9fUElOUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19QSFlBQ0tBVFRSX0hTSV9Qb3MgKDMxVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9IU0kgKEJpdCAzMSkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF80X1JFR19QSFlBQ0tBVFRSX0hTSV9Nc2sgKDB4ODAwMDAwMDBVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF80X1JFRzogUEhZQUNLQVRUUl9IU0kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfQUNLX1JFU1BPTlNFX0RFTEFZX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IEFDS19SRVNQT05TRV9ERUxBWSAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfQUNLX1JFU1BPTlNFX0RFTEFZX01zayAoMHhmZlVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IEFDS19SRVNQT05TRV9ERUxBWSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19DQ0FTVEFUV0FJVF9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogQ0NBU1RBVFdBSVQgKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19DQ0FTVEFUV0FJVF9Nc2sgKDB4ZjAwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogQ0NBU1RBVFdBSVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9ERU1fUFRJX1BvcyAoMTZVTCkgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IFBIWUNTTUFDQUFUVFJfREVNX1BUSSAoQml0IDE2KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzVfUkVHX1BIWUNTTUFDQUFUVFJfREVNX1BUSV9Nc2sgKDB4ZjAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0RFTV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9DTl9Qb3MgKDIwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IFBIWUNTTUFDQUFUVFJfQ04gKEJpdCAyMCkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9DTl9Nc2sgKDB4ZjAwMDAwVUwpICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IFBIWUNTTUFDQUFUVFJfQ04gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9DQUxDQVBfUG9zICgyNFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfNV9SRUc6IFBIWUNTTUFDQUFUVFJfQ0FMQ0FQIChCaXQgMjQpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfNV9SRUdfUEhZQ1NNQUNBQVRUUl9DQUxDQVBfTXNrICgweGYwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0NBTENBUCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19QSFlDU01BQ0FBVFRSX1JGX0dQSU9fUElOU19Qb3MgKDI4VUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogUEhZQ1NNQUNBQVRUUl9SRl9HUElPX1BJTlMgKEJpdCAyOCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19QSFlDU01BQ0FBVFRSX1JGX0dQSU9fUElOU19Nc2sgKDB4NzAwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX1JGX0dQSU9fUElOUyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19QSFlDU01BQ0FBVFRSX0hTSV9Qb3MgKDMxVUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF81X1JFRzogUEhZQ1NNQUNBQVRUUl9IU0kgKEJpdCAzMSkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF81X1JFR19QSFlDU01BQ0FBVFRSX0hTSV9Nc2sgKDB4ODAwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzVfUkVHOiBQSFlDU01BQ0FBVFRSX0hTSSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFR19MSUZTUEVSSU9EX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzogTElGU1BFUklPRCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFR19MSUZTUEVSSU9EX01zayAoMHhmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzogTElGU1BFUklPRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFR19TSUZTUEVSSU9EX1BvcyAoOFVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzogU0lGU1BFUklPRCAoQml0IDgpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFR19TSUZTUEVSSU9EX01zayAoMHhmZjAwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzogU0lGU1BFUklPRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFR19XVUlGU1BFUklPRF9Qb3MgKDE2VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzogV1VJRlNQRVJJT0QgKEJpdCAxNikgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF82X1JFR19XVUlGU1BFUklPRF9Nc2sgKDB4ZmYwMDAwVUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF82X1JFRzogV1VJRlNQRVJJT0QgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHX01BQ1JYVE9UQUxDWUNMRVRJTUVfUG9zICgwVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHOiBNQUNSWFRPVEFMQ1lDTEVUSU1FIChCaXQgMCkgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHX01BQ1JYVE9UQUxDWUNMRVRJTUVfTXNrICgweGZmZmZVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogTUFDUlhUT1RBTENZQ0xFVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19NQUNESVNDQVJYT0ZGVE9SWl9Qb3MgKDE2VUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogTUFDRElTQ0FSWE9GRlRPUlogKEJpdCAxNikgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzExX1JFR19NQUNESVNDQVJYT0ZGVE9SWl9Nc2sgKDB4MTAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzExX1JFRzogTUFDRElTQ0FSWE9GRlRPUlogKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHX0NTTUFfQ0FfTkJfVkFMX1BvcyAoMTdVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHOiBDU01BX0NBX05CX1ZBTCAoQml0IDE3KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHX0NTTUFfQ0FfTkJfVkFMX01zayAoMHhlMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHOiBDU01BX0NBX05CX1ZBTCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMV9SRUdfQ1NNQV9DQV9CT19USFJFU0hPTERfUG9zICgyNFVMKSAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMV9SRUc6IENTTUFfQ0FfQk9fVEhSRVNIT0xEIChCaXQgMjQpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHX0NTTUFfQ0FfQk9fVEhSRVNIT0xEX01zayAoMHhmZjAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTFfUkVHOiBDU01BX0NBX0JPX1RIUkVTSE9MRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfTE1BQ1JFQURZNFNMRUVQX0RfUG9zICgxVUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IExNQUNSRUFEWTRTTEVFUF9EIChCaXQgMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfTE1BQ1JFQURZNFNMRUVQX0RfTXNrICgweDJVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IExNQUNSRUFEWTRTTEVFUF9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19TWU5DVElNRVNUQU1QX0VfUG9zICgyVUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogU1lOQ1RJTUVTVEFNUF9FIChCaXQgMikgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19TWU5DVElNRVNUQU1QX0VfTXNrICgweDRVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogU1lOQ1RJTUVTVEFNUF9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19TWU1CT0xUSU1FVEhSX0VfUG9zICgzVUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogU1lNQk9MVElNRVRIUl9FIChCaXQgMykgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19TWU1CT0xUSU1FVEhSX0VfTXNrICgweDhVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogU1lNQk9MVElNRVRIUl9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19TWU1CT0xUSU1FMlRIUl9FX1BvcyAoNFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogU1lNQk9MVElNRTJUSFJfRSAoQml0IDQpICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19TWU1CT0xUSU1FMlRIUl9FX01zayAoMHgxMFVMKSAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogU1lNQk9MVElNRTJUSFJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfR0VUR0VORVJBVE9SVkFMX0VfUG9zICg1VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IEdFVEdFTkVSQVRPUlZBTF9FIChCaXQgNSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfR0VUR0VORVJBVE9SVkFMX0VfTXNrICgweDIwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUc6IEdFVEdFTkVSQVRPUlZBTF9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFR19XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EX1BvcyAoNlVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfREVMVEFfUkVHOiBXQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EIChCaXQgNikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9ERUxUQV9SRUdfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRF9Nc2sgKDB4NDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX0RFTFRBX1JFRzogV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVElNRVNUQU1QQ1VSUlBIQVNFVkFMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RJTUVTVEFNUENVUlJQSEFTRVZBTF9SRUdfVElNRVNUQU1QQ1VSUlBIQVNFVkFMX1BvcyAoMFVMKSAvKiE8IEZUREYgRlRERl9USU1FU1RBTVBDVVJSUEhBU0VWQUxfUkVHOiBUSU1FU1RBTVBDVVJSUEhBU0VWQUwgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfVElNRVNUQU1QQ1VSUlBIQVNFVkFMX1JFR19USU1FU1RBTVBDVVJSUEhBU0VWQUxfTXNrICgweGZmVUwpIC8qITwgRlRERiBGVERGX1RJTUVTVEFNUENVUlJQSEFTRVZBTF9SRUc6IFRJTUVTVEFNUENVUlJQSEFTRVZBTCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ1RTVFhBQ0tERUxBWVZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ1RTVFhBQ0tERUxBWVZBTF9SRUdfTUFDVFNUWEFDS0RFTEFZVkFMX1BvcyAoMFVMKSAgIC8qITwgRlRERiBGVERGX01BQ1RTVFhBQ0tERUxBWVZBTF9SRUc6IE1BQ1RTVFhBQ0tERUxBWVZBTCAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNUU1RYQUNLREVMQVlWQUxfUkVHX01BQ1RTVFhBQ0tERUxBWVZBTF9Nc2sgKDB4ZmZmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNUU1RYQUNLREVMQVlWQUxfUkVHOiBNQUNUU1RYQUNLREVMQVlWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19MTUFDUkVBRFk0U0xFRVBfTV9Qb3MgKDFVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogTE1BQ1JFQURZNFNMRUVQX00gKEJpdCAxKSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19MTUFDUkVBRFk0U0xFRVBfTV9Nc2sgKDB4MlVMKSAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogTE1BQ1JFQURZNFNMRUVQX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfU1lOQ1RJTUVTVEFNUF9NX1BvcyAoMlVMKSAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IFNZTkNUSU1FU1RBTVBfTSAoQml0IDIpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUdfU1lOQ1RJTUVTVEFNUF9NX01zayAoMHg0VUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IFNZTkNUSU1FU1RBTVBfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19TWU1CT0xUSU1FVEhSX01fUG9zICgzVUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogU1lNQk9MVElNRVRIUl9NIChCaXQgMykgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19TWU1CT0xUSU1FVEhSX01fTXNrICgweDhVTCkgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogU1lNQk9MVElNRVRIUl9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX1NZTUJPTFRJTUUyVEhSX01fUG9zICg0VUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBTWU1CT0xUSU1FMlRIUl9NIChCaXQgNCkgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX1NZTUJPTFRJTUUyVEhSX01fTXNrICgweDEwVUwpICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBTWU1CT0xUSU1FMlRIUl9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX0dFVEdFTkVSQVRPUlZBTF9NX1BvcyAoNVVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBHRVRHRU5FUkFUT1JWQUxfTSAoQml0IDUpICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX0dFVEdFTkVSQVRPUlZBTF9NX01zayAoMHgyMFVMKSAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHOiBHRVRHRU5FUkFUT1JWQUxfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFR19XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NX1BvcyAoNlVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfTUFTS19SRUc6IFdBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gKEJpdCA2KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MX01BU0tfUkVHX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX01fTXNrICgweDQwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF9NQVNLX1JFRzogV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0VWRU5UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfRVZFTlRfUkVHX0VEU0NBTlJFQURZX0VfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfRVZFTlRfUkVHOiBFRFNDQU5SRUFEWV9FIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfRVZFTlRfUkVHX0VEU0NBTlJFQURZX0VfTXNrICgweDFVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfRVZFTlRfUkVHOiBFRFNDQU5SRUFEWV9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUdfQ0NBU1RBVF9FX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19FVkVOVF9SRUc6IENDQVNUQVRfRSAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUdfQ0NBU1RBVF9FX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19FVkVOVF9SRUc6IENDQVNUQVRfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUdfUlhUSU1FUkVYUElSRURfRV9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19FVkVOVF9SRUc6IFJYVElNRVJFWFBJUkVEX0UgKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19FVkVOVF9SRUdfUlhUSU1FUkVYUElSRURfRV9Nc2sgKDB4NFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19FVkVOVF9SRUc6IFJYVElNRVJFWFBJUkVEX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0VWRU5UX1JFR19DU01BX0NBX0JPX1RIUl9FX1BvcyAoM1VMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0VWRU5UX1JFRzogQ1NNQV9DQV9CT19USFJfRSAoQml0IDMpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0VWRU5UX1JFR19DU01BX0NBX0JPX1RIUl9FX01zayAoMHg4VUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0VWRU5UX1JFRzogQ1NNQV9DQV9CT19USFJfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFTS19SRUdfRURTQ0FOUkVBRFlfTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFTS19SRUc6IEVEU0NBTlJFQURZX00gKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFTS19SRUdfRURTQ0FOUkVBRFlfTV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFTS19SRUc6IEVEU0NBTlJFQURZX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BU0tfUkVHX0NDQVNUQVRfTV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BU0tfUkVHOiBDQ0FTVEFUX00gKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BU0tfUkVHX0NDQVNUQVRfTV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BU0tfUkVHOiBDQ0FTVEFUX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BU0tfUkVHX1JYVElNRVJFWFBJUkVEX01fUG9zICgyVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BU0tfUkVHOiBSWFRJTUVSRVhQSVJFRF9NIChCaXQgMikgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BU0tfUkVHX1JYVElNRVJFWFBJUkVEX01fTXNrICgweDRVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BU0tfUkVHOiBSWFRJTUVSRVhQSVJFRF9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQVNLX1JFR19DU01BX0NBX0JPX1RIUl9NX1BvcyAoM1VMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQVNLX1JFRzogQ1NNQV9DQV9CT19USFJfTSAoQml0IDMpICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQVNLX1JFR19DU01BX0NBX0JPX1RIUl9NX01zayAoMHg4VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQVNLX1JFRzogQ1NNQV9DQV9CT19USFJfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX01PREVfUG9zICgwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9NT0RFIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX01PREVfTXNrICgweDFVTCkgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0VOX1BvcyAoMVVMKSAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9FTiAoQml0IDEpICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0VOX01zayAoMHgyVUwpICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1RYX0VOX1BvcyAoMlVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9UWF9FTiAoQml0IDIpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1RYX0VOX01zayAoMHg0VUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9UWF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1JYX0VOX1BvcyAoM1VMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9SWF9FTiAoQml0IDMpICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1JYX0VOX01zayAoMHg4VUwpICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9SWF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU5fUG9zICg0VUwpICAgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9SWF9QSVBFX0VOIChCaXQgNCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU5fTXNrICgweDEwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9SWF9QSVBFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfRURfUkVRVUVTVF9Qb3MgKDVVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX0VEX1JFUVVFU1QgKEJpdCA1KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfRURfUkVRVUVTVF9Nc2sgKDB4MjBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX0VEX1JFUVVFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9UWF9GUk1fTlJfUG9zICg2VUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfVFhfRlJNX05SIChCaXQgNikgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9UWF9GUk1fTlJfTXNrICgweGMwVUwpICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfVFhfRlJNX05SIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUFRJX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BUSSAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUFRJX01zayAoMHhmMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BUSSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9BVFRSX0RFTV9QVElfUG9zICgxNlVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfREVNX1BUSSAoQml0IDE2KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfREVNX1BUSV9Nc2sgKDB4ZjAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX0RFTV9QVEkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9DTl9Qb3MgKDIwVUwpICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfQ04gKEJpdCAyMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMXzFfUkVHX0xNQUNfTUFOVUFMX1BIWV9BVFRSX0NOX01zayAoMHhmMDAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX0NOIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfQ0FMQ0FQX1BvcyAoMjRVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfMV9SRUc6IExNQUNfTUFOVUFMX1BIWV9BVFRSX0NBTENBUCAoQml0IDI0KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfMV9SRUdfTE1BQ19NQU5VQUxfUEhZX0FUVFJfQ0FMQ0FQX01zayAoMHhmMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfQVRUUl9DQUxDQVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9SRl9HUElPX1BJTlNfUG9zICgyOFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfUkZfR1BJT19QSU5TIChCaXQgMjgpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9SRl9HUElPX1BJTlNfTXNrICgweDcwMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfQVRUUl9SRl9HUElPX1BJTlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9IU0lfUG9zICgzMVVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF8xX1JFRzogTE1BQ19NQU5VQUxfUEhZX0FUVFJfSFNJIChCaXQgMzEpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF8xX1JFR19MTUFDX01BTlVBTF9QSFlfQVRUUl9IU0lfTXNrICgweDgwMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMXzFfUkVHOiBMTUFDX01BTlVBTF9QSFlfQVRUUl9IU0kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfTUFOVUFMX09TX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF9PU19SRUdfTE1BQ19NQU5VQUxfVFhfU1RBUlRfUG9zICgwVUwpICAgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF9PU19SRUc6IExNQUNfTUFOVUFMX1RYX1NUQVJUIChCaXQgMCkgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX01BTlVBTF9PU19SRUdfTE1BQ19NQU5VQUxfVFhfU1RBUlRfTXNrICgweDFVTCkgICAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF9PU19SRUc6IExNQUNfTUFOVUFMX1RYX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFR19MTUFDX01BTlVBTF9DQ0FfU1RBVF9Qb3MgKDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFRzogTE1BQ19NQU5VQUxfQ0NBX1NUQVQgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFR19MTUFDX01BTlVBTF9DQ0FfU1RBVF9Nc2sgKDB4MVVMKSAvKiE8IEZUREYgRlRERl9MTUFDX01BTlVBTF9TVEFUVVNfUkVHOiBMTUFDX01BTlVBTF9DQ0FfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUdfTE1BQ19NQU5VQUxfRURfU1RBVF9Qb3MgKDhVTCkgIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUc6IExNQUNfTUFOVUFMX0VEX1NUQVQgKEJpdCA4KSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19NQU5VQUxfU1RBVFVTX1JFR19MTUFDX01BTlVBTF9FRF9TVEFUX01zayAoMHhmZjAwVUwpIC8qITwgRlRERiBGVERGX0xNQUNfTUFOVUFMX1NUQVRVU19SRUc6IExNQUNfTUFOVUFMX0VEX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF83X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfN19SRUdfTUFDV1VQRVJJT0RfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfN19SRUc6IE1BQ1dVUEVSSU9EIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfN19SRUdfTUFDV1VQRVJJT0RfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfN19SRUc6IE1BQ1dVUEVSSU9EIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfN19SRUdfTUFDQ1NMU0FNUExFUEVSSU9EX1BvcyAoMTZVTCkgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfN19SRUc6IE1BQ0NTTFNBTVBMRVBFUklPRCAoQml0IDE2KSAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfN19SRUdfTUFDQ1NMU0FNUExFUEVSSU9EX01zayAoMHhmZmZmMDAwMFVMKSAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfN19SRUc6IE1BQ0NTTFNBTVBMRVBFUklPRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzhfUkVHX01BQ0NTTFNUQVJUU0FNUExFVElNRV9Qb3MgKDBVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzhfUkVHOiBNQUNDU0xTVEFSVFNBTVBMRVRJTUUgKEJpdCAwKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzhfUkVHX01BQ0NTTFNUQVJUU0FNUExFVElNRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzhfUkVHOiBNQUNDU0xTVEFSVFNBTVBMRVRJTUUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX0xNQUNfQ09OVFJPTF85X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfOV9SRUdfTUFDQ1NMREFUQVBFUklPRF9Qb3MgKDBVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfOV9SRUc6IE1BQ0NTTERBVEFQRVJJT0QgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfOV9SRUdfTUFDQ1NMREFUQVBFUklPRF9Nc2sgKDB4ZmZmZlVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfOV9SRUc6IE1BQ0NTTERBVEFQRVJJT0QgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF85X1JFR19NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVF9Qb3MgKDE2VUwpIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF85X1JFRzogTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgKEJpdCAxNikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF85X1JFR19NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVF9Nc2sgKDB4ZmZmZjAwMDBVTCkgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzlfUkVHOiBNQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzEwX1JFR19NQUNXVVJaQ09SUkVDVElPTl9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzEwX1JFRzogTUFDV1VSWkNPUlJFQ1RJT04gKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ19DT05UUk9MXzEwX1JFR19NQUNXVVJaQ09SUkVDVElPTl9Nc2sgKDB4ZmZVTCkgICAgLyohPCBGVERGIEZUREZfTE1BQ19DT05UUk9MXzEwX1JFRzogTUFDV1VSWkNPUlJFQ1RJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHX01BQ0NTTE1BUkdJTlJaX1BvcyAoMTZVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHOiBNQUNDU0xNQVJHSU5SWiAoQml0IDE2KSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHX01BQ0NTTE1BUkdJTlJaX01zayAoMHhmMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9MTUFDX0NPTlRST0xfMTBfUkVHOiBNQUNDU0xNQVJHSU5SWiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMF9SRUdfTUFDUlpaRVJPVkFMX1BvcyAoMjhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMF9SRUc6IE1BQ1JaWkVST1ZBTCAoQml0IDI4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNfQ09OVFJPTF8xMF9SRUdfTUFDUlpaRVJPVkFMX01zayAoMHhmMDAwMDAwMFVMKSAgIC8qITwgRlRERiBGVERGX0xNQUNfQ09OVFJPTF8xMF9SRUc6IE1BQ1JaWkVST1ZBTCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNVUklUWV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ1RYUlhOX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNUWFJYTiAoQml0IDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ1RYUlhOX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNUWFJYTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ0VOVFJZX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNFTlRSWSAoQml0IDgpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ0VOVFJZX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNFTlRSWSAoQml0ZmllbGQtTWFzazogMHgwZikgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ0FMRU5HVEhfUG9zICgxNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNBTEVOR1RIIChCaXQgMTYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ0FMRU5HVEhfTXNrICgweDdmMDAwMFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNBTEVOR1RIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ01MRU5HVEhfUG9zICgyNFVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNNTEVOR1RIIChCaXQgMjQpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ01MRU5HVEhfTXNrICgweDdmMDAwMDAwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNNTEVOR1RIIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ0VOQ0RFQ05fUG9zICgzMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNFTkNERUNOIChCaXQgMzEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzBfUkVHX1NFQ0VOQ0RFQ05fTXNrICgweDgwMDAwMDAwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzBfUkVHOiBTRUNFTkNERUNOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNVUklUWV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzFfUkVHX1NFQ0FVVEhGTEFHU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzFfUkVHOiBTRUNBVVRIRkxBR1MgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZXzFfUkVHX1NFQ0FVVEhGTEFHU19Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZXzFfUkVHOiBTRUNBVVRIRkxBR1MgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8xX1JFR19TRUNFTkNSRkxBR1NfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8xX1JFRzogU0VDRU5DUkZMQUdTIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV8xX1JFR19TRUNFTkNSRkxBR1NfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV8xX1JFRzogU0VDRU5DUkZMQUdTIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNLRVlfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDS0VZXzBfUkVHX1NFQ0tFWV8wX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDS0VZXzBfUkVHOiBTRUNLRVlfMCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDS0VZXzBfUkVHX1NFQ0tFWV8wX01zayAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDS0VZXzBfUkVHOiBTRUNLRVlfMCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDS0VZXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ0tFWV8xX1JFR19TRUNLRVlfMV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ0tFWV8xX1JFRzogU0VDS0VZXzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ0tFWV8xX1JFR19TRUNLRVlfMV9Nc2sgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ0tFWV8xX1JFRzogU0VDS0VZXzEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ0tFWV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNLRVlfMl9SRUdfU0VDS0VZXzJfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNLRVlfMl9SRUc6IFNFQ0tFWV8yIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNLRVlfMl9SRUdfU0VDS0VZXzJfTXNrICAgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNLRVlfMl9SRUc6IFNFQ0tFWV8yIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNLRVlfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDS0VZXzNfUkVHX1NFQ0tFWV8zX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDS0VZXzNfUkVHOiBTRUNLRVlfMyAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDS0VZXzNfUkVHX1NFQ0tFWV8zX01zayAgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDS0VZXzNfUkVHOiBTRUNLRVlfMyAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNOT05DRV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ05PTkNFXzBfUkVHX1NFQ05PTkNFXzBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ05PTkNFXzBfUkVHOiBTRUNOT05DRV8wIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ05PTkNFXzBfUkVHX1NFQ05PTkNFXzBfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ05PTkNFXzBfUkVHOiBTRUNOT05DRV8wIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ05PTkNFXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDTk9OQ0VfMV9SRUdfU0VDTk9OQ0VfMV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDTk9OQ0VfMV9SRUc6IFNFQ05PTkNFXzEgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0VDTk9OQ0VfMV9SRUdfU0VDTk9OQ0VfMV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfU0VDTk9OQ0VfMV9SRUc6IFNFQ05PTkNFXzEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDTk9OQ0VfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNOT05DRV8yX1JFR19TRUNOT05DRV8yX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNOT05DRV8yX1JFRzogU0VDTk9OQ0VfMiAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNOT05DRV8yX1JFR19TRUNOT05DRV8yX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNOT05DRV8yX1JFRzogU0VDTk9OQ0VfMiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNOT05DRV8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ05PTkNFXzNfUkVHX1NFQ05PTkNFXzNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ05PTkNFXzNfUkVHOiBTRUNOT05DRV8zIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ05PTkNFXzNfUkVHX1NFQ05PTkNFXzNfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ05PTkNFXzNfUkVHOiBTRUNOT05DRV8zIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TRUNVUklUWV9PU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX09TX1JFR19TRUNBQk9SVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX09TX1JFRzogU0VDQUJPUlQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX09TX1JFR19TRUNBQk9SVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX09TX1JFRzogU0VDQUJPUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX09TX1JFR19TRUNTVEFSVF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX09TX1JFRzogU0VDU1RBUlQgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX09TX1JFR19TRUNTVEFSVF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX09TX1JFRzogU0VDU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDVVJJVFlfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX1NUQVRVU19SRUdfU0VDQlVTWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX1NUQVRVU19SRUc6IFNFQ0JVU1kgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX1NUQVRVU19SRUdfU0VDQlVTWV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX1NUQVRVU19SRUc6IFNFQ0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHX1NFQ0FVVEhGQUlMX1BvcyAoMVVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHOiBTRUNBVVRIRkFJTCAoQml0IDEpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHX1NFQ0FVVEhGQUlMX01zayAoMHgyVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TRUNVUklUWV9TVEFUVVNfUkVHOiBTRUNBVVRIRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU0VDVVJJVFlfRVZFTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX0VWRU5UX1JFR19TRUNSRUFEWV9FX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX0VWRU5UX1JFRzogU0VDUkVBRFlfRSAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX0VWRU5UX1JFR19TRUNSRUFEWV9FX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX0VWRU5UX1JFRzogU0VDUkVBRFlfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NFQ1VSSVRZX0VWRU5UTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX0VWRU5UTUFTS19SRUdfU0VDUkVBRFlfTV9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX0VWRU5UTUFTS19SRUc6IFNFQ1JFQURZX00gKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NFQ1VSSVRZX0VWRU5UTUFTS19SRUdfU0VDUkVBRFlfTV9Nc2sgKDB4MVVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1NFQ1VSSVRZX0VWRU5UTUFTS19SRUc6IFNFQ1JFQURZX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMF9SRUdfTUFDVFNUWEFDS0RFTEFZX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9UU0NIX0NPTlRST0xfMF9SRUc6IE1BQ1RTVFhBQ0tERUxBWSAoQml0IDApICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMF9SRUdfTUFDVFNUWEFDS0RFTEFZX01zayAoMHhmZmZmVUwpICAgICAvKiE8IEZUREYgRlRERl9UU0NIX0NPTlRST0xfMF9SRUc6IE1BQ1RTVFhBQ0tERUxBWSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzBfUkVHX01BQ1RTUlhXQUlUX1BvcyAoMTZVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzBfUkVHOiBNQUNUU1JYV0FJVCAoQml0IDE2KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzBfUkVHX01BQ1RTUlhXQUlUX01zayAoMHhmZmZmMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzBfUkVHOiBNQUNUU1JYV0FJVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzFfUkVHX01BQ1RTUlhUWF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzFfUkVHOiBNQUNUU1JYVFggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzFfUkVHX01BQ1RTUlhUWF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfVFNDSF9DT05UUk9MXzFfUkVHOiBNQUNUU1JYVFggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFNDSF9DT05UUk9MXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8yX1JFR19NQUNUU1JYQUNLREVMQVlfUG9zICgwVUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1RTQ0hfQ09OVFJPTF8yX1JFRzogTUFDVFNSWEFDS0RFTEFZIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RTQ0hfQ09OVFJPTF8yX1JFR19NQUNUU1JYQUNLREVMQVlfTXNrICgweGZmZmZVTCkgICAgIC8qITwgRlRERiBGVERGX1RTQ0hfQ09OVFJPTF8yX1JFRzogTUFDVFNSWEFDS0RFTEFZIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMl9SRUdfTUFDVFNBQ0tXQUlUX1BvcyAoMTZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UU0NIX0NPTlRST0xfMl9SRUc6IE1BQ1RTQUNLV0FJVCAoQml0IDE2KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UU0NIX0NPTlRST0xfMl9SRUdfTUFDVFNBQ0tXQUlUX01zayAoMHhmZmZmMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9UU0NIX0NPTlRST0xfMl9SRUc6IE1BQ1RTQUNLV0FJVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfMF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzAgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfMF9Nc2sgKDB4N1VMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzAgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU18xX1BvcyAoNFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfMSAoQml0IDQpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU18xX01zayAoMHg3MFVMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfMSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzJfUG9zICg4VUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU18yIChCaXQgOCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzJfTXNrICgweDcwMFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU18yIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfM19Qb3MgKDEyVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzMgKEJpdCAxMikgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfM19Nc2sgKDB4NzAwMFVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU180X1BvcyAoMTZVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfNCAoQml0IDE2KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU180X01zayAoMHg3MDAwMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfNCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzVfUG9zICgyMFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU181IChCaXQgMjApICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHX1JYQklUUE9TXzVfTXNrICgweDcwMDAwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzBfUkVHOiBSWEJJVFBPU181IChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfNl9Qb3MgKDI0VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzYgKEJpdCAyNCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUdfUlhCSVRQT1NfNl9Nc2sgKDB4NzAwMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMF9SRUc6IFJYQklUUE9TXzYgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU183X1BvcyAoMjhVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfNyAoQml0IDI4KSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFR19SWEJJVFBPU183X01zayAoMHg3MDAwMDAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18wX1JFRzogUlhCSVRQT1NfNyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzBfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU18wIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzBfTXNrICgweDdVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU18wIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfMV9Qb3MgKDRVTCkgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzEgKEJpdCA0KSAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfMV9Nc2sgKDB4NzBVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU18yX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfMiAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU18yX01zayAoMHg3MDBVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfMiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzNfUG9zICgxMlVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU18zIChCaXQgMTIpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzNfTXNrICgweDcwMDBVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU18zIChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfNF9Qb3MgKDE2VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzQgKEJpdCAxNikgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfNF9Nc2sgKDB4NzAwMDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU181X1BvcyAoMjBVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfNSAoQml0IDIwKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFR19UWEJJVFBPU181X01zayAoMHg3MDAwMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18xX1JFRzogVFhCSVRQT1NfNSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzZfUG9zICgyNFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU182IChCaXQgMjQpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHX1RYQklUUE9TXzZfTXNrICgweDcwMDAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzFfUkVHOiBUWEJJVFBPU182IChCaXRmaWVsZC1NYXNrOiAweDA3KSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfN19Qb3MgKDI4VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzcgKEJpdCAyOCkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUdfVFhCSVRQT1NfN19Nc2sgKDB4NzAwMDAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMV9SRUc6IFRYQklUUE9TXzcgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFR19QSFlUWFNUQVJUVVBfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFRzogUEhZVFhTVEFSVFVQIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFR19QSFlUWFNUQVJUVVBfTXNrICgweGZmVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18yX1JFRzogUEhZVFhTVEFSVFVQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUdfUEhZVFhMQVRFTkNZX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUc6IFBIWVRYTEFURU5DWSAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUdfUEhZVFhMQVRFTkNZX01zayAoMHhmZjAwVUwpICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfMl9SRUc6IFBIWVRYTEFURU5DWSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHX1BIWVRYRklOSVNIX1BvcyAoMTZVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOiBQSFlUWEZJTklTSCAoQml0IDE2KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHX1BIWVRYRklOSVNIX01zayAoMHhmZjAwMDBVTCkgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOiBQSFlUWEZJTklTSCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHX1BIWVRSWFdBSVRfUG9zICgyNFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOiBQSFlUUlhXQUlUIChCaXQgMjQpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHX1BIWVRSWFdBSVRfTXNrICgweGZmMDAwMDAwVUwpICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzJfUkVHOiBQSFlUUlhXQUlUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUdfUEhZUlhTVEFSVFVQX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc6IFBIWVJYU1RBUlRVUCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUdfUEhZUlhTVEFSVFVQX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc6IFBIWVJYU1RBUlRVUCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHX1BIWVJYTEFURU5DWV9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHOiBQSFlSWExBVEVOQ1kgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHX1BIWVJYTEFURU5DWV9Nc2sgKDB4ZmYwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1BIWV9QQVJBTUVURVJTXzNfUkVHOiBQSFlSWExBVEVOQ1kgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFR19QSFlFTkFCTEVfUG9zICgxNlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFRzogUEhZRU5BQkxFIChCaXQgMTYpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFR19QSFlFTkFCTEVfTXNrICgweGZmMDAwMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9QSFlfUEFSQU1FVEVSU18zX1JFRzogUEhZRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUdfVVNFX0xFR0FDWV9QSFlfRU5fUG9zICgyNFVMKSAgICAgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc6IFVTRV9MRUdBQ1lfUEhZX0VOIChCaXQgMjQpICAqLworI2RlZmluZSBGVERGX0ZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUdfVVNFX0xFR0FDWV9QSFlfRU5fTXNrICgweDEwMDAwMDBVTCkgLyohPCBGVERGIEZUREZfUEhZX1BBUkFNRVRFUlNfM19SRUc6IFVTRV9MRUdBQ1lfUEhZX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19EQkdSWFRSQU5TUEFSRU5UTU9ERV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogREJHUlhUUkFOU1BBUkVOVE1PREUgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19EQkdSWFRSQU5TUEFSRU5UTU9ERV9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogREJHUlhUUkFOU1BBUkVOVE1PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX1JYQkVBQ09OT05MWV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBSWEJFQUNPTk9OTFkgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX1JYQkVBQ09OT05MWV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBSWEJFQUNPTk9OTFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX1JYQ09PUkRSRUFMSUdOT05MWV9Qb3MgKDJVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBSWENPT1JEUkVBTElHTk9OTFkgKEJpdCAyKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX1JYQ09PUkRSRUFMSUdOT05MWV9Nc2sgKDB4NFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBSWENPT1JEUkVBTElHTk9OTFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX1JYX1JFQURfQlVGX1BUUl9Qb3MgKDNVTCkgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBSWF9SRUFEX0JVRl9QVFIgKEJpdCAzKSAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX1JYX1JFQURfQlVGX1BUUl9Nc2sgKDB4NzhVTCkgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBSWF9SRUFEX0JVRl9QVFIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX0RJU1JYRlJNUEVORElOR0NBX1BvcyAoN1VMKSAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBESVNSWEZSTVBFTkRJTkdDQSAoQml0IDcpICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX0RJU1JYRlJNUEVORElOR0NBX01zayAoMHg4MFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBESVNSWEZSTVBFTkRJTkdDQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfRElTUlhBQ0tSRVFVRVNUQ0FfUG9zICg4VUwpICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERJU1JYQUNLUkVRVUVTVENBIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfRElTUlhBQ0tSRVFVRVNUQ0FfTXNrICgweDEwMFVMKSAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERJU1JYQUNLUkVRVUVTVENBIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTQ1JDRVJST1JfUG9zICg5VUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDQUxXQVlTUEFTU0NSQ0VSUk9SIChCaXQgOSkgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTQ1JDRVJST1JfTXNrICgweDIwMFVMKSAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDQUxXQVlTUEFTU0NSQ0VSUk9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19ESVNEQVRBUkVRVUVTVENBX1BvcyAoMTBVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogRElTREFUQVJFUVVFU1RDQSAoQml0IDEwKSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19ESVNEQVRBUkVRVUVTVENBX01zayAoMHg0MDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogRElTREFUQVJFUVVFU1RDQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTl9Qb3MgKDExVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gKEJpdCAxMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTl9Nc2sgKDB4ODAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRF9Qb3MgKDEyVUwpICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQgKEJpdCAxMikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1dST05HRFBBTklEX01zayAoMHgxMDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfTUFDQUxXQVlTUEFTU1dST05HREFERFJfUG9zICgxM1VMKSAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NXUk9OR0RBRERSIChCaXQgMTMpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSX01zayAoMHgyMDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NXUk9OR0RBRERSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRF9Qb3MgKDE0VUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEIChCaXQgMTQpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEX01zayAoMHg0MDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUl9Qb3MgKDE1VUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SIChCaXQgMTUpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SX01zayAoMHg4MDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTRlJNVFlQRV9Qb3MgKDE2VUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDQUxXQVlTUEFTU0ZSTVRZUEUgKEJpdCAxNikgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTRlJNVFlQRV9Nc2sgKDB4ZmYwMDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NGUk1UWVBFIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTV0FLRVVQX1BvcyAoMjRVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDQUxXQVlTUEFTU1dBS0VVUCAoQml0IDI0KSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNBTFdBWVNQQVNTV0FLRVVQX01zayAoMHgxMDAwMDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IE1BQ0FMV0FZU1BBU1NXQUtFVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ1BBU1NXQUtFVVBfUG9zICgyNVVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNQQVNTV0FLRVVQIChCaXQgMjUpICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9DT05UUk9MXzBfUkVHX01BQ1BBU1NXQUtFVVBfTXNrICgweDIwMDAwMDBVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNQQVNTV0FLRVVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNJTVBMSUNJVEJST0FEQ0FTVF9Qb3MgKDI2VUwpICAgICAgLyohPCBGVERGIEZUREZfUlhfQ09OVFJPTF8wX1JFRzogTUFDSU1QTElDSVRCUk9BRENBU1QgKEJpdCAyNikgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfQ09OVFJPTF8wX1JFR19NQUNJTVBMSUNJVEJST0FEQ0FTVF9Nc2sgKDB4NDAwMDAwMFVMKSAvKiE8IEZUREYgRlRERl9SWF9DT05UUk9MXzBfUkVHOiBNQUNJTVBMSUNJVEJST0FEQ0FTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfRElTUlhBQ0tSRUNFSVZFRENBX1BvcyAoMjdVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERJU1JYQUNLUkVDRUlWRURDQSAoQml0IDI3KSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0NPTlRST0xfMF9SRUdfRElTUlhBQ0tSRUNFSVZFRENBX01zayAoMHg4MDAwMDAwVUwpIC8qITwgRlRERiBGVERGX1JYX0NPTlRST0xfMF9SRUc6IERJU1JYQUNLUkVDRUlWRURDQSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfUlhfRVZFTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0VWRU5UX1JFR19SWFNPRl9FX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0VWRU5UX1JFRzogUlhTT0ZfRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0VWRU5UX1JFR19SWFNPRl9FX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0VWRU5UX1JFRzogUlhTT0ZfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0VWRU5UX1JFR19SWF9PVkVSRkxPV19FX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0VWRU5UX1JFRzogUlhfT1ZFUkZMT1dfRSAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0VWRU5UX1JFR19SWF9PVkVSRkxPV19FX01zayAoMHgyVUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0VWRU5UX1JFRzogUlhfT1ZFUkZMT1dfRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0VWRU5UX1JFR19SWF9CVUZfQVZBSUxfRV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0VWRU5UX1JFRzogUlhfQlVGX0FWQUlMX0UgKEJpdCAyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1JYX0VWRU5UX1JFR19SWF9CVUZfQVZBSUxfRV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1JYX0VWRU5UX1JFRzogUlhfQlVGX0FWQUlMX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhCWVRFX0VfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYQllURV9FIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9FVkVOVF9SRUdfUlhCWVRFX0VfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9FVkVOVF9SRUc6IFJYQllURV9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWFNPRl9NX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhTT0ZfTSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWFNPRl9NX01zayAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhTT0ZfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWF9PVkVSRkxPV19NX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhfT1ZFUkZMT1dfTSAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWF9PVkVSRkxPV19NX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhfT1ZFUkZMT1dfTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWF9CVUZfQVZBSUxfTV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhfQlVGX0FWQUlMX00gKEJpdCAyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWF9CVUZfQVZBSUxfTV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhfQlVGX0FWQUlMX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWEJZVEVfTV9Qb3MgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhCWVRFX00gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9NQVNLX1JFR19SWEJZVEVfTV9Nc2sgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9NQVNLX1JFRzogUlhCWVRFX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9TVEFUVVNfUkVHX1JYX0JVRkZfSVNfRlVMTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9TVEFUVVNfUkVHOiBSWF9CVUZGX0lTX0ZVTEwgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9TVEFUVVNfUkVHX1JYX0JVRkZfSVNfRlVMTF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9TVEFUVVNfUkVHOiBSWF9CVUZGX0lTX0ZVTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9TVEFUVVNfUkVHX1JYX1dSSVRFX0JVRl9QVFJfUG9zICgxVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9TVEFUVVNfUkVHOiBSWF9XUklURV9CVUZfUFRSIChCaXQgMSkgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9TVEFUVVNfUkVHX1JYX1dSSVRFX0JVRl9QVFJfTXNrICgweDFlVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9TVEFUVVNfUkVHOiBSWF9XUklURV9CVUZfUFRSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TWU1CT0xUSU1FU05BUFNIT1RWQUxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU1lNQk9MVElNRVNOQVBTSE9UVkFMX1JFR19TWU1CT0xUSU1FU05BUFNIT1RWQUxfUG9zICgwVUwpIC8qITwgRlRERiBGVERGX1NZTUJPTFRJTUVTTkFQU0hPVFZBTF9SRUc6IFNZTUJPTFRJTUVTTkFQU0hPVFZBTCAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9TWU1CT0xUSU1FU05BUFNIT1RWQUxfUkVHX1NZTUJPTFRJTUVTTkFQU0hPVFZBTF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfU1lNQk9MVElNRVNOQVBTSE9UVkFMX1JFRzogU1lNQk9MVElNRVNOQVBTSE9UVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9SWF9TVEFUVVNfREVMVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX0RFTFRBX1JFR19SWF9CVUZGX0lTX0ZVTExfRF9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX0RFTFRBX1JFRzogUlhfQlVGRl9JU19GVUxMX0QgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfUlhfU1RBVFVTX0RFTFRBX1JFR19SWF9CVUZGX0lTX0ZVTExfRF9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfUlhfU1RBVFVTX0RFTFRBX1JFRzogUlhfQlVGRl9JU19GVUxMX0QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1JYX1NUQVRVU19NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9TVEFUVVNfTUFTS19SRUdfUlhfQlVGRl9JU19GVUxMX01fUG9zICgwVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9SWF9TVEFUVVNfTUFTS19SRUc6IFJYX0JVRkZfSVNfRlVMTF9NIChCaXQgMCkgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9SWF9TVEFUVVNfTUFTS19SRUdfUlhfQlVGRl9JU19GVUxMX01fTXNrICgweDFVTCkgICAgICAvKiE8IEZUREYgRlRERl9SWF9TVEFUVVNfTUFTS19SRUc6IFJYX0JVRkZfSVNfRlVMTF9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19EQkdUWFRSQU5TUEFSRU5UTU9ERV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogREJHVFhUUkFOU1BBUkVOVE1PREUgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfQ09OVFJPTF8wX1JFR19EQkdUWFRSQU5TUEFSRU5UTU9ERV9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfQ09OVFJPTF8wX1JFRzogREJHVFhUUkFOU1BBUkVOVE1PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DT05UUk9MXzBfUkVHX01BQ01BWEJFX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DT05UUk9MXzBfUkVHOiBNQUNNQVhCRSAoQml0IDQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DT05UUk9MXzBfUkVHX01BQ01BWEJFX01zayAoMHhmMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DT05UUk9MXzBfUkVHOiBNQUNNQVhCRSAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DT05UUk9MXzBfUkVHX01BQ01JTkJFX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DT05UUk9MXzBfUkVHOiBNQUNNSU5CRSAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DT05UUk9MXzBfUkVHX01BQ01JTkJFX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DT05UUk9MXzBfUkVHOiBNQUNNSU5CRSAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DT05UUk9MXzBfUkVHX01BQ01BWENTTUFCQUNLT0ZGU19Qb3MgKDEyVUwpICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DT05UUk9MXzBfUkVHOiBNQUNNQVhDU01BQkFDS09GRlMgKEJpdCAxMikgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DT05UUk9MXzBfUkVHX01BQ01BWENTTUFCQUNLT0ZGU19Nc2sgKDB4NzAwMFVMKSAgICAvKiE8IEZUREYgRlRERl9UWF9DT05UUk9MXzBfUkVHOiBNQUNNQVhDU01BQkFDS09GRlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9GVERGX0NFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9GVERGX0NFX1JFR19GVERGX0NFX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9GVERGX0NFX1JFRzogRlRERl9DRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9GVERGX0NFX1JFR19GVERGX0NFX01zayAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9GVERGX0NFX1JFRzogRlRERl9DRSAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9GVERGX0NNX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9GVERGX0NNX1JFR19GVERGX0NNX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9GVERGX0NNX1JFRzogRlRERl9DTSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9GVERGX0NNX1JFR19GVERGX0NNX01zayAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9GVERGX0NNX1JFRzogRlRERl9DTSAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFRIUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TWU5DVElNRVNUQU1QVEhSX1JFR19TWU5DVElNRVNUQU1QVEhSX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9TWU5DVElNRVNUQU1QVEhSX1JFRzogU1lOQ1RJTUVTVEFNUFRIUiAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TWU5DVElNRVNUQU1QVEhSX1JFR19TWU5DVElNRVNUQU1QVEhSX01zayAoMHgxZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX1NZTkNUSU1FU1RBTVBUSFJfUkVHOiBTWU5DVElNRVNUQU1QVEhSIChCaXRmaWVsZC1NYXNrOiAweDFmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU1lOQ1RJTUVTVEFNUFZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TWU5DVElNRVNUQU1QVkFMX1JFR19TWU5DVElNRVNUQU1QVkFMX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9TWU5DVElNRVNUQU1QVkFMX1JFRzogU1lOQ1RJTUVTVEFNUFZBTCAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TWU5DVElNRVNUQU1QVkFMX1JFR19TWU5DVElNRVNUQU1QVkFMX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9TWU5DVElNRVNUQU1QVkFMX1JFRzogU1lOQ1RJTUVTVEFNUFZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVElNRVJfQ09OVFJPTF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RJTUVSX0NPTlRST0xfMV9SRUdfU1lOQ1RJTUVTVEFNUEVOQV9Qb3MgKDFVTCkgICAgICAgIC8qITwgRlRERiBGVERGX1RJTUVSX0NPTlRST0xfMV9SRUc6IFNZTkNUSU1FU1RBTVBFTkEgKEJpdCAxKSAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RJTUVSX0NPTlRST0xfMV9SRUdfU1lOQ1RJTUVTVEFNUEVOQV9Nc2sgKDB4MlVMKSAgICAgIC8qITwgRlRERiBGVERGX1RJTUVSX0NPTlRST0xfMV9SRUc6IFNZTkNUSU1FU1RBTVBFTkEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTUFDVFhTVERBQ0tGUk1DTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNUWFNUREFDS0ZSTUNOVF9SRUdfTUFDVFhTVERBQ0tGUk1DTlRfUG9zICgwVUwpICAgICAvKiE8IEZUREYgRlRERl9NQUNUWFNUREFDS0ZSTUNOVF9SRUc6IE1BQ1RYU1REQUNLRlJNQ05UIChCaXQgMCkgICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNUWFNUREFDS0ZSTUNOVF9SRUdfTUFDVFhTVERBQ0tGUk1DTlRfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX01BQ1RYU1REQUNLRlJNQ05UX1JFRzogTUFDVFhTVERBQ0tGUk1DTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9NQUNSWFNUREFDS0ZSTU9LQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNSWFNUREFDS0ZSTU9LQ05UX1JFR19NQUNSWFNUREFDS0ZSTU9LQ05UX1BvcyAoMFVMKSAvKiE8IEZUREYgRlRERl9NQUNSWFNUREFDS0ZSTU9LQ05UX1JFRzogTUFDUlhTVERBQ0tGUk1PS0NOVCAoQml0IDApICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNSWFNUREFDS0ZSTU9LQ05UX1JFR19NQUNSWFNUREFDS0ZSTU9LQ05UX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNSWFNUREFDS0ZSTU9LQ05UX1JFRzogTUFDUlhTVERBQ0tGUk1PS0NOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ1JYQUREUkZBSUxGUk1DTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ1JYQUREUkZBSUxGUk1DTlRfUkVHX01BQ1JYQUREUkZBSUxGUk1DTlRfUG9zICgwVUwpIC8qITwgRlRERiBGVERGX01BQ1JYQUREUkZBSUxGUk1DTlRfUkVHOiBNQUNSWEFERFJGQUlMRlJNQ05UIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX01BQ1JYQUREUkZBSUxGUk1DTlRfUkVHX01BQ1JYQUREUkZBSUxGUk1DTlRfTXNrICgweGZmZmZmZmZmVUwpIC8qITwgRlRERiBGVERGX01BQ1JYQUREUkZBSUxGUk1DTlRfUkVHOiBNQUNSWEFERFJGQUlMRlJNQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX01BQ1JYVU5TVVBGUk1DTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDUlhVTlNVUEZSTUNOVF9SRUdfTUFDUlhVTlNVUEZSTUNOVF9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfTUFDUlhVTlNVUEZSTUNOVF9SRUc6IE1BQ1JYVU5TVVBGUk1DTlQgKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTUFDUlhVTlNVUEZSTUNOVF9SRUdfTUFDUlhVTlNVUEZSTUNOVF9Nc2sgKDB4ZmZmZmZmZmZVTCkgLyohPCBGVERGIEZUREZfTUFDUlhVTlNVUEZSTUNOVF9SRUc6IE1BQ1JYVU5TVVBGUk1DTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1NZTkNUSU1FU1RBTVBQSEFTRVZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TWU5DVElNRVNUQU1QUEhBU0VWQUxfUkVHX1NZTkNUSU1FU1RBTVBQSEFTRVZBTF9Qb3MgKDBVTCkgLyohPCBGVERGIEZUREZfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMX1JFRzogU1lOQ1RJTUVTVEFNUFBIQVNFVkFMIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NZTkNUSU1FU1RBTVBQSEFTRVZBTF9SRUdfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMX01zayAoMHhmZlVMKSAvKiE8IEZUREYgRlRERl9TWU5DVElNRVNUQU1QUEhBU0VWQUxfUkVHOiBTWU5DVElNRVNUQU1QUEhBU0VWQUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTUFDRkNTRVJST1JDT1VOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNGQ1NFUlJPUkNPVU5UX1JFR19NQUNGQ1NFUlJPUkNPVU5UX1BvcyAoMFVMKSAgICAgICAvKiE8IEZUREYgRlRERl9NQUNGQ1NFUlJPUkNPVU5UX1JFRzogTUFDRkNTRVJST1JDT1VOVCAoQml0IDApICAgICovCisjZGVmaW5lIEZUREZfRlRERl9NQUNGQ1NFUlJPUkNPVU5UX1JFR19NQUNGQ1NFUlJPUkNPVU5UX01zayAoMHhmZmZmZmZmZlVMKSAvKiE8IEZUREYgRlRERl9NQUNGQ1NFUlJPUkNPVU5UX1JFRzogTUFDRkNTRVJST1JDT1VOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX0NPTlRST0xfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9DT05UUk9MIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX0NPTlRST0xfTXNrICgweDFVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9DT05UUk9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfUlhfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1JYIChCaXQgMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfUlhfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfVFhfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1RYIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfVFhfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfQUhCX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX0FIQiAoQml0IDMpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfQUhCX01zayAoMHg4VUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX0FIQiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX09SRUdfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9PUkVHIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX09SRUdfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9PUkVHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfVFNUSU1fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1RTVElNIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfVFNUSU1fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1RTVElNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfU0VDX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1NFQyAoQml0IDcpICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDUkVTRVRfU0VDX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ1JFU0VUX1NFQyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX0NPVU5UX1BvcyAoOVVMKSAgICAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9DT1VOVCAoQml0IDkpICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX0NPVU5UX01zayAoMHgyMDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9DT1VOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1RJTUNUUkxfUG9zICgxMFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9USU1DVFJMIChCaXQgMTApICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX0xNQUNSRVNFVF9SRUdfTE1BQ1JFU0VUX1RJTUNUUkxfTXNrICgweDQwMFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX0xNQUNSRVNFVF9SRUc6IExNQUNSRVNFVF9USU1DVFJMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDR0xPQlJFU0VUX0NPVU5UX1BvcyAoMTZVTCkgICAgICAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ0dMT0JSRVNFVF9DT1VOVCAoQml0IDE2KSAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE1BQ1JFU0VUX1JFR19MTUFDR0xPQlJFU0VUX0NPVU5UX01zayAoMHgxMDAwMFVMKSAgICAgLyohPCBGVERGIEZUREZfTE1BQ1JFU0VUX1JFRzogTE1BQ0dMT0JSRVNFVF9DT1VOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1dBS0VVUF9DT05UUk9MX09TX1JFR19XQUtFVVBUSU1FUkVOQUJMRV9TRVRfUG9zICgwVUwpIC8qITwgRlRERiBGVERGX1dBS0VVUF9DT05UUk9MX09TX1JFRzogV0FLRVVQVElNRVJFTkFCTEVfU0VUIChCaXQgMCkgKi8KKyNkZWZpbmUgRlRERl9GVERGX1dBS0VVUF9DT05UUk9MX09TX1JFR19XQUtFVVBUSU1FUkVOQUJMRV9TRVRfTXNrICgweDFVTCkgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfT1NfUkVHOiBXQUtFVVBUSU1FUkVOQUJMRV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9PU19SRUdfV0FLRVVQVElNRVJFTkFCTEVfQ0xFQVJfUG9zICgxVUwpIC8qITwgRlRERiBGVERGX1dBS0VVUF9DT05UUk9MX09TX1JFRzogV0FLRVVQVElNRVJFTkFCTEVfQ0xFQVIgKEJpdCAxKSAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfT1NfUkVHX1dBS0VVUFRJTUVSRU5BQkxFX0NMRUFSX01zayAoMHgyVUwpIC8qITwgRlRERiBGVERGX1dBS0VVUF9DT05UUk9MX09TX1JFRzogV0FLRVVQVElNRVJFTkFCTEVfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TWU1CT0xUSU1FVEhSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9TWU1CT0xUSU1FVEhSX1JFR19TWU1CT0xUSU1FVEhSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9TWU1CT0xUSU1FVEhSX1JFRzogU1lNQk9MVElNRVRIUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9TWU1CT0xUSU1FVEhSX1JFR19TWU1CT0xUSU1FVEhSX01zayAoMHhmZmZmZmZmZlVMKSAgICAvKiE8IEZUREYgRlRERl9TWU1CT0xUSU1FVEhSX1JFRzogU1lNQk9MVElNRVRIUiAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfU1lNQk9MVElNRTJUSFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1NZTUJPTFRJTUUyVEhSX1JFR19TWU1CT0xUSU1FMlRIUl9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NZTUJPTFRJTUUyVEhSX1JFRzogU1lNQk9MVElNRTJUSFIgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NZTUJPTFRJTUUyVEhSX1JFR19TWU1CT0xUSU1FMlRIUl9Nc2sgKDB4ZmZmZmZmZmZVTCkgIC8qITwgRlRERiBGVERGX1NZTUJPTFRJTUUyVEhSX1JFRzogU1lNQk9MVElNRTJUSFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9ERUJVR0NPTlRST0xfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9ERUJVR0NPTlRST0xfUkVHX0RCR19SWF9JTlBVVF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9ERUJVR0NPTlRST0xfUkVHOiBEQkdfUlhfSU5QVVQgKEJpdCA4KSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9ERUJVR0NPTlRST0xfUkVHX0RCR19SWF9JTlBVVF9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAvKiE8IEZUREYgRlRERl9ERUJVR0NPTlRST0xfUkVHOiBEQkdfUlhfSU5QVVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYQllURV9FX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfRV9SRUdfVFhCWVRFX0VfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfRV9SRUc6IFRYQllURV9FIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfRV9SRUdfVFhCWVRFX0VfTXNrICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfRV9SRUc6IFRYQllURV9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfRV9SRUdfVFhfTEFTVF9TWU1CT0xfRV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfRV9SRUc6IFRYX0xBU1RfU1lNQk9MX0UgKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfRV9SRUdfVFhfTEFTVF9TWU1CT0xfRV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfRV9SRUc6IFRYX0xBU1RfU1lNQk9MX0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYQllURV9NX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfTV9SRUdfVFhCWVRFX01fUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfTV9SRUc6IFRYQllURV9NIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfTV9SRUdfVFhCWVRFX01fTXNrICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfTV9SRUc6IFRYQllURV9NIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfTV9SRUdfVFhfTEFTVF9TWU1CT0xfTV9Qb3MgKDFVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfTV9SRUc6IFRYX0xBU1RfU1lNQk9MX00gKEJpdCAxKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWEJZVEVfTV9SRUdfVFhfTEFTVF9TWU1CT0xfTV9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWEJZVEVfTV9SRUc6IFRYX0xBU1RfU1lNQk9MX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19TXzBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfMF9SRUdfVFhfRkxBR19TVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfMF9SRUc6IFRYX0ZMQUdfU1RBVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfMF9SRUdfVFhfRkxBR19TVEFUX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfMF9SRUc6IFRYX0ZMQUdfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8wX1JFR19UWF9GTEFHX0NMRUFSX0VfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8wX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8wX1JFR19UWF9GTEFHX0NMRUFSX0VfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8wX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzBfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzBfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzBfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzBfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFR19UWF9QUklPUklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8wX1JFRzogVFhfUFJJT1JJVFkgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFR19UWF9QUklPUklUWV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8wX1JFRzogVFhfUFJJT1JJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFR19JU1dBS0VVUF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8wX1JFRzogSVNXQUtFVVAgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFR19JU1dBS0VVUF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8wX1JFRzogSVNXQUtFVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFR19QVElfVFhfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8wX1JFRzogUFRJX1RYIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8wX1JFR19QVElfVFhfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8wX1JFRzogUFRJX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19TXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfMV9SRUdfVFhfRkxBR19TVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfMV9SRUc6IFRYX0ZMQUdfU1RBVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfMV9SRUdfVFhfRkxBR19TVEFUX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfMV9SRUc6IFRYX0ZMQUdfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8xX1JFR19UWF9GTEFHX0NMRUFSX0VfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8xX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8xX1JFR19UWF9GTEFHX0NMRUFSX0VfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8xX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzFfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzFfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzFfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzFfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFR19UWF9QUklPUklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8xX1JFRzogVFhfUFJJT1JJVFkgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFR19UWF9QUklPUklUWV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8xX1JFRzogVFhfUFJJT1JJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFR19JU1dBS0VVUF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8xX1JFRzogSVNXQUtFVVAgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFR19JU1dBS0VVUF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8xX1JFRzogSVNXQUtFVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFR19QVElfVFhfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8xX1JFRzogUFRJX1RYIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8xX1JFR19QVElfVFhfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8xX1JFRzogUFRJX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19TXzJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfMl9SRUdfVFhfRkxBR19TVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfMl9SRUc6IFRYX0ZMQUdfU1RBVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfMl9SRUdfVFhfRkxBR19TVEFUX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfMl9SRUc6IFRYX0ZMQUdfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8yX1JFR19UWF9GTEFHX0NMRUFSX0VfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8yX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8yX1JFR19UWF9GTEFHX0NMRUFSX0VfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8yX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzJfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzJfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzJfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzJfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFR19UWF9QUklPUklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8yX1JFRzogVFhfUFJJT1JJVFkgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFR19UWF9QUklPUklUWV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8yX1JFRzogVFhfUFJJT1JJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFR19JU1dBS0VVUF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8yX1JFRzogSVNXQUtFVVAgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFR19JU1dBS0VVUF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8yX1JFRzogSVNXQUtFVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFR19QVElfVFhfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8yX1JFRzogUFRJX1RYIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8yX1JFR19QVElfVFhfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8yX1JFRzogUFRJX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfRkxBR19TXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfM19SRUdfVFhfRkxBR19TVEFUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfM19SRUc6IFRYX0ZMQUdfU1RBVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9GTEFHX1NfM19SRUdfVFhfRkxBR19TVEFUX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9GTEFHX1NfM19SRUc6IFRYX0ZMQUdfU1RBVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9GTEFHX0NMRUFSX0VfM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8zX1JFR19UWF9GTEFHX0NMRUFSX0VfUG9zICgwVUwpICAgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8zX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfRV8zX1JFR19UWF9GTEFHX0NMRUFSX0VfTXNrICgweDFVTCkgICAgIC8qITwgRlRERiBGVERGX1RYX0ZMQUdfQ0xFQVJfRV8zX1JFRzogVFhfRkxBR19DTEVBUl9FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX0ZMQUdfQ0xFQVJfTV8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzNfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Qb3MgKDBVTCkgICAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzNfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdCAwKSAgICAqLworI2RlZmluZSBGVERGX0ZUREZfVFhfRkxBR19DTEVBUl9NXzNfUkVHX1RYX0ZMQUdfQ0xFQVJfTV9Nc2sgKDB4MVVMKSAgICAgLyohPCBGVERGIEZUREZfVFhfRkxBR19DTEVBUl9NXzNfUkVHOiBUWF9GTEFHX0NMRUFSX00gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFR19UWF9QUklPUklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8zX1JFRzogVFhfUFJJT1JJVFkgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFR19UWF9QUklPUklUWV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8zX1JFRzogVFhfUFJJT1JJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFR19JU1dBS0VVUF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8zX1JFRzogSVNXQUtFVVAgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFR19JU1dBS0VVUF9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8zX1JFRzogSVNXQUtFVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFR19QVElfVFhfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8zX1JFRzogUFRJX1RYIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9QUklPUklUWV8zX1JFR19QVElfVFhfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9QUklPUklUWV8zX1JFRzogUFRJX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1RYX1NFVF9PU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9TRVRfT1NfUkVHX1RYX0ZMQUdfU0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9TRVRfT1NfUkVHOiBUWF9GTEFHX1NFVCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9TRVRfT1NfUkVHX1RYX0ZMQUdfU0VUX01zayAoMHhmVUwpICAgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9TRVRfT1NfUkVHOiBUWF9GTEFHX1NFVCAoQml0ZmllbGQtTWFzazogMHgwZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfVFhfQ0xFQVJfT1NfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DTEVBUl9PU19SRUdfVFhfRkxBR19DTEVBUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DTEVBUl9PU19SRUc6IFRYX0ZMQUdfQ0xFQVIgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9UWF9DTEVBUl9PU19SRUdfVFhfRkxBR19DTEVBUl9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9UWF9DTEVBUl9PU19SRUc6IFRYX0ZMQUdfQ0xFQVIgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRlRERl9GVERGX1dBS0VVUF9DT05UUk9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9SRUdfV0FLRVVQSU5UVEhSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9SRUc6IFdBS0VVUElOVFRIUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9SRUdfV0FLRVVQSU5UVEhSX01zayAoMHgxZmZmZmZmVUwpICAgICAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9SRUc6IFdBS0VVUElOVFRIUiAoQml0ZmllbGQtTWFzazogMHgxZmZmZmZmKSAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfUkVHX1dBS0VVUEVOQUJMRV9Qb3MgKDI5VUwpICAgICAgICAgICAgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOiBXQUtFVVBFTkFCTEUgKEJpdCAyOSkgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfV0FLRVVQX0NPTlRST0xfUkVHX1dBS0VVUEVOQUJMRV9Nc2sgKDB4MjAwMDAwMDBVTCkgICAgLyohPCBGVERGIEZUREZfV0FLRVVQX0NPTlRST0xfUkVHOiBXQUtFVVBFTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9SRUdfV0FLRVVQX01PREVfUG9zICgzMFVMKSAgICAgICAgICAgICAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9SRUc6IFdBS0VVUF9NT0RFIChCaXQgMzApICAgICAgICAgICovCisjZGVmaW5lIEZUREZfRlRERl9XQUtFVVBfQ09OVFJPTF9SRUdfV0FLRVVQX01PREVfTXNrICgweGMwMDAwMDAwVUwpICAgICAvKiE8IEZUREYgRlRERl9XQUtFVVBfQ09OVFJPTF9SRUc6IFdBS0VVUF9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE9OR19BRERSXzBfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE9OR19BRERSXzBfMF9SRUdfRVhQX1NBX0xfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE9OR19BRERSXzBfMF9SRUc6IEVYUF9TQV9MIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE9OR19BRERSXzBfMF9SRUdfRVhQX1NBX0xfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE9OR19BRERSXzBfMF9SRUc6IEVYUF9TQV9MIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBGVERGX0ZUREZfTE9OR19BRERSXzFfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfTE9OR19BRERSXzFfMF9SRUdfRVhQX1NBX0hfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfTE9OR19BRERSXzFfMF9SRUc6IEVYUF9TQV9IIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfTE9OR19BRERSXzFfMF9SRUdfRVhQX1NBX0hfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgLyohPCBGVERGIEZUREZfTE9OR19BRERSXzFfMF9SRUc6IEVYUF9TQV9IIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEZUREZfRlRERl9TSVpFX0FORF9WQUxfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGVERGX0ZUREZfU0laRV9BTkRfVkFMXzBfUkVHX1ZBTElEX1NBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0laRV9BTkRfVkFMXzBfUkVHOiBWQUxJRF9TQSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBGVERGX0ZUREZfU0laRV9BTkRfVkFMXzBfUkVHX1ZBTElEX1NBX01zayAoMHhmVUwpICAgICAgICAgICAgICAgLyohPCBGVERGIEZUREZfU0laRV9BTkRfVkFMXzBfUkVHOiBWQUxJRF9TQSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NJWkVfQU5EX1ZBTF8wX1JFR19TSE9SVF9MT05HTk9UX1BvcyAoNFVMKSAgICAgICAgICAgIC8qITwgRlRERiBGVERGX1NJWkVfQU5EX1ZBTF8wX1JFRzogU0hPUlRfTE9OR05PVCAoQml0IDQpICAgICAgICAgKi8KKyNkZWZpbmUgRlRERl9GVERGX1NJWkVfQU5EX1ZBTF8wX1JFR19TSE9SVF9MT05HTk9UX01zayAoMHgxMFVMKSAgICAgICAgIC8qITwgRlRERiBGVERGX1NJWkVfQU5EX1ZBTF8wX1JFRzogU0hPUlRfTE9OR05PVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICBzdHJ1Y3QgJ0dQX1RJTUVSUycgUG9zaXRpb24gJiBNYXNrICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9DVFJMX1JFR19USU0wX0NUUkxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9DVFJMX1JFRzogVElNMF9DVFJMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9DVFJMX1JFR19USU0wX0NUUkxfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9DVFJMX1JFRzogVElNMF9DVFJMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9DVFJMX1JFR19USU0wX0NMS19TRUxfUG9zICgxVUwpICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9DVFJMX1JFRzogVElNMF9DTEtfU0VMIChCaXQgMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9DVFJMX1JFR19USU0wX0NMS19TRUxfTXNrICgweDJVTCkgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9DVFJMX1JFRzogVElNMF9DTEtfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX0NUUkxfUkVHX1RJTTBfQ0xLX0RJVl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX0NUUkxfUkVHOiBUSU0wX0NMS19ESVYgKEJpdCAyKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVElNRVIwX0NUUkxfUkVHX1RJTTBfQ0xLX0RJVl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVElNRVIwX0NUUkxfUkVHOiBUSU0wX0NMS19ESVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUdfUFdNX01PREVfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfQ1RSTF9SRUc6IFBXTV9NT0RFIChCaXQgMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfQ1RSTF9SRUdfUFdNX01PREVfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfQ1RSTF9SRUc6IFBXTV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1RJTUVSMF9PTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfT05fUkVHX1RJTTBfT05fUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfT05fUkVHOiBUSU0wX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfT05fUkVHX1RJTTBfT05fTXNrICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfT05fUkVHOiBUSU0wX09OIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1RJTUVSMF9SRUxPQURfTV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfUkVMT0FEX01fUkVHX1RJTTBfTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfUkVMT0FEX01fUkVHOiBUSU0wX00gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19USU1FUjBfUkVMT0FEX01fUkVHX1RJTTBfTV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUSU1FUjBfUkVMT0FEX01fUkVHOiBUSU0wX00gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfVElNRVIwX1JFTE9BRF9OX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9SRUxPQURfTl9SRUdfVElNMF9OX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9SRUxPQURfTl9SRUc6IFRJTTBfTiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RJTUVSMF9SRUxPQURfTl9SRUdfVElNMF9OX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFRJTUVSMF9SRUxPQURfTl9SRUc6IFRJTTBfTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfUFdNMl9TVEFSVF9DWUNMRSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNMl9TVEFSVF9DWUNMRV9TVEFSVF9DWUNMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNMl9TVEFSVF9DWUNMRTogU1RBUlRfQ1lDTEUgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNMl9TVEFSVF9DWUNMRV9TVEFSVF9DWUNMRV9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNMl9TVEFSVF9DWUNMRTogU1RBUlRfQ1lDTEUgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1BXTTNfU1RBUlRfQ1lDTEUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTNfU1RBUlRfQ1lDTEVfU1RBUlRfQ1lDTEVfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTNfU1RBUlRfQ1lDTEU6IFNUQVJUX0NZQ0xFIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1BXTTNfU1RBUlRfQ1lDTEVfU1RBUlRfQ1lDTEVfTXNrICgweDNmZmZVTCkgICAgICAgICAgIC8qITwgR1BfVElNRVJTIFBXTTNfU1RBUlRfQ1lDTEU6IFNUQVJUX0NZQ0xFIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19QV000X1NUQVJUX0NZQ0xFICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19QV000X1NUQVJUX0NZQ0xFX1NUQVJUX0NZQ0xFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBQV000X1NUQVJUX0NZQ0xFOiBTVEFSVF9DWUNMRSAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19QV000X1NUQVJUX0NZQ0xFX1NUQVJUX0NZQ0xFX01zayAoMHgzZmZmVUwpICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBQV000X1NUQVJUX0NZQ0xFOiBTVEFSVF9DWUNMRSAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1BXTTJfRU5EX0NZQ0xFICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNMl9FTkRfQ1lDTEVfRU5EX0NZQ0xFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNMl9FTkRfQ1lDTEU6IEVORF9DWUNMRSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNMl9FTkRfQ1lDTEVfRU5EX0NZQ0xFX01zayAoMHgzZmZmVUwpICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNMl9FTkRfQ1lDTEU6IEVORF9DWUNMRSAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1BXTTNfRU5EX0NZQ0xFICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNM19FTkRfQ1lDTEVfRU5EX0NZQ0xFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNM19FTkRfQ1lDTEU6IEVORF9DWUNMRSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNM19FTkRfQ1lDTEVfRU5EX0NZQ0xFX01zayAoMHgzZmZmVUwpICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNM19FTkRfQ1lDTEU6IEVORF9DWUNMRSAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1BXTTRfRU5EX0NZQ0xFICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNNF9FTkRfQ1lDTEVfRU5EX0NZQ0xFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNNF9FTkRfQ1lDTEU6IEVORF9DWUNMRSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfUFdNNF9FTkRfQ1lDTEVfRU5EX0NZQ0xFX01zayAoMHgzZmZmVUwpICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgUFdNNF9FTkRfQ1lDTEU6IEVORF9DWUNMRSAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX1RSSVBMRV9QV01fRlJFUVVFTkNZICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfVFJJUExFX1BXTV9GUkVRVUVOQ1lfRlJFUV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVFJJUExFX1BXTV9GUkVRVUVOQ1k6IEZSRVEgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVFJJUExFX1BXTV9GUkVRVUVOQ1lfRlJFUV9Nc2sgKDB4M2ZmZlVMKSAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVFJJUExFX1BXTV9GUkVRVUVOQ1k6IEZSRVEgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfVFJJUExFX1BXTV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUdfVFJJUExFX1BXTV9FTkFCTEVfUG9zICgwVUwpICAgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fQ1RSTF9SRUc6IFRSSVBMRV9QV01fRU5BQkxFIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUdfVFJJUExFX1BXTV9FTkFCTEVfTXNrICgweDFVTCkgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fQ1RSTF9SRUc6IFRSSVBMRV9QV01fRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUF9USU1FUlNfVFJJUExFX1BXTV9DVFJMX1JFR19TV19QQVVTRV9FTl9Qb3MgKDFVTCkgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVFJJUExFX1BXTV9DVFJMX1JFRzogU1dfUEFVU0VfRU4gKEJpdCAxKSAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfVFJJUExFX1BXTV9DVFJMX1JFR19TV19QQVVTRV9FTl9Nc2sgKDB4MlVMKSAgICAgICAgICAgLyohPCBHUF9USU1FUlMgVFJJUExFX1BXTV9DVFJMX1JFRzogU1dfUEFVU0VfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQX1RJTUVSU19UUklQTEVfUFdNX0NUUkxfUkVHX0hXX1BBVVNFX0VOX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUUklQTEVfUFdNX0NUUkxfUkVHOiBIV19QQVVTRV9FTiAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19UUklQTEVfUFdNX0NUUkxfUkVHX0hXX1BBVVNFX0VOX01zayAoMHg0VUwpICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBUUklQTEVfUFdNX0NUUkxfUkVHOiBIV19QQVVTRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUdfVFJJUExFX1BXTV9DTEtfU0VMX1BvcyAoM1VMKSAgICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fQ1RSTF9SRUc6IFRSSVBMRV9QV01fQ0xLX1NFTCAoQml0IDMpICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX1RSSVBMRV9QV01fQ1RSTF9SRUdfVFJJUExFX1BXTV9DTEtfU0VMX01zayAoMHg4VUwpICAgIC8qITwgR1BfVElNRVJTIFRSSVBMRV9QV01fQ1RSTF9SRUc6IFRSSVBMRV9QV01fQ0xLX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQX1RJTUVSU19CUkVBVEhfQ0ZHX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DRkdfUkVHX0JSVEhfRElWX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DRkdfUkVHOiBCUlRIX0RJViAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DRkdfUkVHX0JSVEhfRElWX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DRkdfUkVHOiBCUlRIX0RJViAoQml0ZmllbGQtTWFzazogMHhmZikgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DRkdfUkVHX0JSVEhfU1RFUF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DRkdfUkVHOiBCUlRIX1NURVAgKEJpdCA4KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9DRkdfUkVHX0JSVEhfU1RFUF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9DRkdfUkVHOiBCUlRIX1NURVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUF9USU1FUlNfQlJFQVRIX0RVVFlfTUFYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9EVVRZX01BWF9SRUdfQlJUSF9EVVRZX01BWF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9EVVRZX01BWF9SRUc6IEJSVEhfRFVUWV9NQVggKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgR1BfVElNRVJTX0JSRUFUSF9EVVRZX01BWF9SRUdfQlJUSF9EVVRZX01BWF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgR1BfVElNRVJTIEJSRUFUSF9EVVRZX01BWF9SRUc6IEJSVEhfRFVUWV9NQVggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX0JSRUFUSF9EVVRZX01JTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfRFVUWV9NSU5fUkVHX0JSVEhfRFVUWV9NSU5fUG9zICgwVUwpICAgICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfRFVUWV9NSU5fUkVHOiBCUlRIX0RVVFlfTUlOIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEdQX1RJTUVSU19CUkVBVEhfRFVUWV9NSU5fUkVHX0JSVEhfRFVUWV9NSU5fTXNrICgweGZmVUwpICAgICAgICAvKiE8IEdQX1RJTUVSUyBCUkVBVEhfRFVUWV9NSU5fUkVHOiBCUlRIX0RVVFlfTUlOIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BfVElNRVJTX0JSRUFUSF9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUF9USU1FUlNfQlJFQVRIX0NUUkxfUkVHX0JSVEhfRU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgQlJFQVRIX0NUUkxfUkVHOiBCUlRIX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfQlJFQVRIX0NUUkxfUkVHX0JSVEhfRU5fTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgQlJFQVRIX0NUUkxfUkVHOiBCUlRIX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBHUF9USU1FUlNfQlJFQVRIX0NUUkxfUkVHX0JSVEhfUFdNX1BPTF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgQlJFQVRIX0NUUkxfUkVHOiBCUlRIX1BXTV9QT0wgKEJpdCAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUF9USU1FUlNfQlJFQVRIX0NUUkxfUkVHX0JSVEhfUFdNX1BPTF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgLyohPCBHUF9USU1FUlMgQlJFQVRIX0NUUkxfUkVHOiBCUlRIX1BXTV9QT0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ0dQQURDJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfRU5fUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfRU5fTXNrICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU1RBUlRfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NUQVJUIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU1RBUlRfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NUQVJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfQ09OVF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0NPTlQgKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfQ09OVF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0NPTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfQ0xLX1NFTF9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0NMS19TRUwgKEJpdCAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfQ0xLX1NFTF9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0NMS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfSU5UX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0lOVCAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfSU5UX01zayAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0lOVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfTUlOVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX01JTlQgKEJpdCA1KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfTUlOVF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX01JTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU0VfUG9zICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NFIChCaXQgNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU0VfTXNrICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfTVVURV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX01VVEUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfTVVURV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX01VVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU0VMX1BvcyAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NFTCAoQml0IDgpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU0VMX01zayAgKDB4MWYwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NFTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU0lHTl9Qb3MgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NJR04gKEJpdCAxMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfU0lHTl9Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX1NJR04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfQ0hPUF9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0NIT1AgKEJpdCAxNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfQ0hPUF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0NIT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfTERPX1pFUk9fUG9zICgxNVVMKSAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0xET19aRVJPIChCaXQgMTUpICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMX1JFR19HUF9BRENfTERPX1pFUk9fTXNrICgweDgwMDBVTCkgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMX1JFRzogR1BfQURDX0xET19aRVJPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQQURDX0dQX0FEQ19DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19BVFROM1hfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfQVRUTjNYIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19BVFROM1hfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfQVRUTjNYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19JRFlOX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfSURZTiAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19JRFlOX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfSURZTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19JMjBVX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfSTIwVSAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19JMjBVX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfSTIwVSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19ETUFfRU5fUG9zICgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfRE1BX0VOIChCaXQgMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19ETUFfRU5fTXNrICgweDhVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfRE1BX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19DT05WX05SU19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfQ09OVl9OUlMgKEJpdCA1KSAgICAgICAgICAgICAqLworI2RlZmluZSBHUEFEQ19HUF9BRENfQ1RSTDJfUkVHX0dQX0FEQ19DT05WX05SU19Nc2sgKDB4ZTBVTCkgICAgICAgICAgICAgLyohPCBHUEFEQyBHUF9BRENfQ1RSTDJfUkVHOiBHUF9BRENfQ09OVl9OUlMgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMMl9SRUdfR1BfQURDX1NNUExfVElNRV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMMl9SRUc6IEdQX0FEQ19TTVBMX1RJTUUgKEJpdCA4KSAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMMl9SRUdfR1BfQURDX1NNUExfVElNRV9Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMMl9SRUc6IEdQX0FEQ19TTVBMX1RJTUUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMMl9SRUdfR1BfQURDX1NUT1JFX0RFTF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMMl9SRUc6IEdQX0FEQ19TVE9SRV9ERUwgKEJpdCAxMikgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMMl9SRUdfR1BfQURDX1NUT1JFX0RFTF9Nc2sgKDB4ZjAwMFVMKSAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMMl9SRUc6IEdQX0FEQ19TVE9SRV9ERUwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BBRENfR1BfQURDX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMM19SRUdfR1BfQURDX0VOX0RFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMM19SRUc6IEdQX0FEQ19FTl9ERUwgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMM19SRUdfR1BfQURDX0VOX0RFTF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMM19SRUc6IEdQX0FEQ19FTl9ERUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMM19SRUdfR1BfQURDX0lOVEVSVkFMX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMM19SRUc6IEdQX0FEQ19JTlRFUlZBTCAoQml0IDgpICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19DVFJMM19SRUdfR1BfQURDX0lOVEVSVkFMX01zayAoMHhmZjAwVUwpICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19DVFJMM19SRUc6IEdQX0FEQ19JTlRFUlZBTCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BBRENfR1BfQURDX09GRlBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX09GRlBfUkVHX0dQX0FEQ19PRkZQX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX09GRlBfUkVHOiBHUF9BRENfT0ZGUCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX09GRlBfUkVHX0dQX0FEQ19PRkZQX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX09GRlBfUkVHOiBHUF9BRENfT0ZGUCAoQml0ZmllbGQtTWFzazogMHgzZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BBRENfR1BfQURDX09GRk5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX09GRk5fUkVHX0dQX0FEQ19PRkZOX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX09GRk5fUkVHOiBHUF9BRENfT0ZGTiAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX09GRk5fUkVHX0dQX0FEQ19PRkZOX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX09GRk5fUkVHOiBHUF9BRENfT0ZGTiAoQml0ZmllbGQtTWFzazogMHgzZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BBRENfR1BfQURDX0NMRUFSX0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NMRUFSX0lOVF9SRUdfR1BfQURDX0NMUl9JTlRfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NMRUFSX0lOVF9SRUc6IEdQX0FEQ19DTFJfSU5UIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgR1BBRENfR1BfQURDX0NMRUFSX0lOVF9SRUdfR1BfQURDX0NMUl9JTlRfTXNrICgweGZmZmZVTCkgICAgICAgIC8qITwgR1BBREMgR1BfQURDX0NMRUFSX0lOVF9SRUc6IEdQX0FEQ19DTFJfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BBRENfR1BfQURDX1JFU1VMVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19SRVNVTFRfUkVHX0dQX0FEQ19WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19SRVNVTFRfUkVHOiBHUF9BRENfVkFMIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQQURDX0dQX0FEQ19SRVNVTFRfUkVHX0dQX0FEQ19WQUxfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgICAvKiE8IEdQQURDIEdQX0FEQ19SRVNVTFRfUkVHOiBHUF9BRENfVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdHUElPJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDBfREFUQV9SRUdfUDBfREFUQV9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfREFUQV9SRUc6IFAwX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDBfREFUQV9SRUdfUDBfREFUQV9Nc2sgICAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfREFUQV9SRUc6IFAwX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMV9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDFfREFUQV9SRUdfUDFfREFUQV9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfREFUQV9SRUc6IFAxX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDFfREFUQV9SRUdfUDFfREFUQV9Nc2sgICAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfREFUQV9SRUc6IFAxX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMl9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDJfREFUQV9SRUdfUDJfREFUQV9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfREFUQV9SRUc6IFAyX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDJfREFUQV9SRUdfUDJfREFUQV9Nc2sgICAgICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfREFUQV9SRUc6IFAyX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QM19EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDNfREFUQV9SRUdfUDNfREFUQV9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfREFUQV9SRUc6IFAzX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDNfREFUQV9SRUdfUDNfREFUQV9Nc2sgICAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfREFUQV9SRUc6IFAzX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDRfREFUQV9SRUdfUDRfREFUQV9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfREFUQV9SRUc6IFA0X0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDRfREFUQV9SRUdfUDRfREFUQV9Nc2sgICAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfREFUQV9SRUc6IFA0X0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDBfU0VUX0RBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDBfU0VUX0RBVEFfUkVHX1AwX1NFVF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfU0VUX0RBVEFfUkVHOiBQMF9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDBfU0VUX0RBVEFfUkVHX1AwX1NFVF9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfU0VUX0RBVEFfUkVHOiBQMF9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDFfU0VUX0RBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDFfU0VUX0RBVEFfUkVHX1AxX1NFVF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfU0VUX0RBVEFfUkVHOiBQMV9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDFfU0VUX0RBVEFfUkVHX1AxX1NFVF9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfU0VUX0RBVEFfUkVHOiBQMV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDJfU0VUX0RBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDJfU0VUX0RBVEFfUkVHX1AyX1NFVF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfU0VUX0RBVEFfUkVHOiBQMl9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDJfU0VUX0RBVEFfUkVHX1AyX1NFVF9Nc2sgICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfU0VUX0RBVEFfUkVHOiBQMl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDNfU0VUX0RBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDNfU0VUX0RBVEFfUkVHX1AzX1NFVF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfU0VUX0RBVEFfUkVHOiBQM19TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDNfU0VUX0RBVEFfUkVHX1AzX1NFVF9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfU0VUX0RBVEFfUkVHOiBQM19TRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUDRfU0VUX0RBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDRfU0VUX0RBVEFfUkVHX1A0X1NFVF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfU0VUX0RBVEFfUkVHOiBQNF9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDRfU0VUX0RBVEFfUkVHX1A0X1NFVF9Nc2sgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfU0VUX0RBVEFfUkVHOiBQNF9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMF9SRVNFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDBfUkVTRVRfREFUQV9SRUdfUDBfUkVTRVRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfUkVTRVRfREFUQV9SRUc6IFAwX1JFU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDBfUkVTRVRfREFUQV9SRUdfUDBfUkVTRVRfTXNrICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfUkVTRVRfREFUQV9SRUc6IFAwX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMV9SRVNFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDFfUkVTRVRfREFUQV9SRUdfUDFfUkVTRVRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfUkVTRVRfREFUQV9SRUc6IFAxX1JFU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDFfUkVTRVRfREFUQV9SRUdfUDFfUkVTRVRfTXNrICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfUkVTRVRfREFUQV9SRUc6IFAxX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMl9SRVNFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDJfUkVTRVRfREFUQV9SRUdfUDJfUkVTRVRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfUkVTRVRfREFUQV9SRUc6IFAyX1JFU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDJfUkVTRVRfREFUQV9SRUdfUDJfUkVTRVRfTXNrICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfUkVTRVRfREFUQV9SRUc6IFAyX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QM19SRVNFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDNfUkVTRVRfREFUQV9SRUdfUDNfUkVTRVRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfUkVTRVRfREFUQV9SRUc6IFAzX1JFU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDNfUkVTRVRfREFUQV9SRUdfUDNfUkVTRVRfTXNrICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfUkVTRVRfREFUQV9SRUc6IFAzX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNF9SRVNFVF9EQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDRfUkVTRVRfREFUQV9SRUdfUDRfUkVTRVRfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfUkVTRVRfREFUQV9SRUc6IFA0X1JFU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDRfUkVTRVRfREFUQV9SRUdfUDRfUkVTRVRfTXNrICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfUkVTRVRfREFUQV9SRUc6IFA0X1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDAwX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAwX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAwX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAwX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAwX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAwX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAwX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAwX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAwX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAwX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAwX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAwX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDAxX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAxX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAxX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAxX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAxX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAxX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAxX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAxX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAxX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAxX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAxX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAxX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDAyX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAyX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAyX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAyX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAyX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAyX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAyX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAyX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAyX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAyX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAyX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAyX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDAzX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAzX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAzX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAzX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAzX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAzX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAzX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAzX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAzX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAzX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDAzX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDAzX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDA0X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA0X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA0X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA0X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA0X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA0X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA0X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA0X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA0X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA0X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA0X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA0X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDA1X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA1X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA1X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA1X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA1X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA1X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA1X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA1X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA1X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA1X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA1X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA1X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDA2X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA2X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA2X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA2X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA2X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA2X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA2X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA2X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA2X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA2X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA2X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA2X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMDdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDA3X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA3X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA3X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA3X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA3X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA3X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA3X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA3X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA3X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA3X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDA3X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDA3X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDEwX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEwX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEwX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEwX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEwX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEwX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEwX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEwX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEwX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEwX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEwX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEwX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDExX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDExX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDExX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDExX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDExX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDExX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDExX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDExX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDExX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDExX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDExX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDExX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDEyX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEyX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEyX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEyX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEyX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEyX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEyX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEyX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEyX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEyX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEyX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEyX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDEzX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEzX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEzX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEzX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEzX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEzX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEzX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEzX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEzX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEzX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDEzX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDEzX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDE0X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE0X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE0X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE0X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE0X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE0X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE0X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE0X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE0X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE0X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE0X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE0X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDE1X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE1X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE1X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE1X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE1X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE1X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE1X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE1X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE1X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE1X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE1X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE1X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDE2X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE2X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE2X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE2X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE2X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE2X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE2X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE2X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE2X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE2X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE2X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE2X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMTdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDE3X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE3X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE3X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE3X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE3X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE3X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE3X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE3X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE3X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE3X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDE3X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDE3X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMjBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDIwX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIwX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIwX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIwX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIwX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIwX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIwX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIwX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIwX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIwX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIwX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIwX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMjFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDIxX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIxX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIxX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIxX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIxX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIxX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIxX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIxX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIxX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIxX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIxX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIxX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMjJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDIyX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIyX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIyX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIyX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIyX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIyX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIyX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIyX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIyX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIyX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIyX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIyX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMjNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDIzX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIzX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIzX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIzX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIzX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIzX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIzX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIzX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIzX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIzX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDIzX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDIzX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMjRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDI0X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDI0X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDI0X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDI0X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDI0X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDI0X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDI0X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDI0X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDI0X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDI0X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDI0X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDI0X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDMwX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMwX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMwX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMwX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMwX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMwX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMwX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMwX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMwX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMwX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMwX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMwX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDMxX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMxX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMxX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMxX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMxX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMxX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMxX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMxX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMxX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMxX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMxX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMxX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDMyX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMyX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMyX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMyX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMyX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMyX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMyX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMyX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMyX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMyX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMyX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMyX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDMzX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMzX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMzX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMzX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMzX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMzX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMzX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMzX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMzX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMzX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDMzX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDMzX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDM0X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM0X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM0X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM0X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM0X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM0X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM0X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM0X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM0X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM0X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM0X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM0X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDM1X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM1X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM1X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM1X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM1X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM1X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM1X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM1X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM1X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM1X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM1X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM1X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDM2X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM2X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM2X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM2X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM2X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM2X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM2X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM2X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM2X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM2X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM2X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM2X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMzdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDM3X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM3X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM3X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM3X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM3X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM3X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM3X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM3X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM3X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM3X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDM3X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDM3X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDBfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQwX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQwX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQwX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQwX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQwX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQwX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQwX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQwX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQwX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQwX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQwX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQwX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDFfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQxX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQxX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQxX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQxX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQxX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQxX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQxX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQxX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQxX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQxX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQxX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQxX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDJfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQyX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQyX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQyX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQyX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQyX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQyX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQyX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQyX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQyX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQyX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQyX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQyX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDNfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQzX01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQzX01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQzX01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQzX01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQzX01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQzX01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQzX01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQzX01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQzX01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQzX01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQzX01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQzX01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDRfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQ0X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ0X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ0X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ0X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ0X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ0X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ0X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ0X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ0X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ0X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ0X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ0X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDVfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQ1X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ1X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ1X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ1X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ1X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ1X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ1X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ1X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ1X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ1X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ1X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ1X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDZfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQ2X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ2X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ2X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ2X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ2X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ2X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ2X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ2X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ2X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ2X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ2X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ2X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNDdfTU9ERV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDQ3X01PREVfUkVHX1BJRF9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ3X01PREVfUkVHOiBQSUQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ3X01PREVfUkVHX1BJRF9Nc2sgICAgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ3X01PREVfUkVHOiBQSUQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ3X01PREVfUkVHX1BVUERfUG9zICAgICAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ3X01PREVfUkVHOiBQVVBEIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ3X01PREVfUkVHX1BVUERfTXNrICAgICAgICAgICAgKDB4MzAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ3X01PREVfUkVHOiBQVVBEIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ3X01PREVfUkVHX1BQT0RfUG9zICAgICAgICAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ3X01PREVfUkVHOiBQUE9EIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDQ3X01PREVfUkVHX1BQT0RfTXNrICAgICAgICAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDQ3X01PREVfUkVHOiBQUE9EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMF9QQURQV1JfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDBfUEFEUFdSX0NUUkxfUkVHX1AwX09VVF9DVFJMX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfUEFEUFdSX0NUUkxfUkVHOiBQMF9PVVRfQ1RSTCAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDBfUEFEUFdSX0NUUkxfUkVHX1AwX09VVF9DVFJMX01zayAoMHhjMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDBfUEFEUFdSX0NUUkxfUkVHOiBQMF9PVVRfQ1RSTCAoQml0ZmllbGQtTWFzazogMHgwMykgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMV9QQURQV1JfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDFfUEFEUFdSX0NUUkxfUkVHX1AxX09VVF9DVFJMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfUEFEUFdSX0NUUkxfUkVHOiBQMV9PVVRfQ1RSTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDFfUEFEUFdSX0NUUkxfUkVHX1AxX09VVF9DVFJMX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDFfUEFEUFdSX0NUUkxfUkVHOiBQMV9PVVRfQ1RSTCAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QMl9QQURQV1JfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDJfUEFEUFdSX0NUUkxfUkVHX1AyX09VVF9DVFJMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfUEFEUFdSX0NUUkxfUkVHOiBQMl9PVVRfQ1RSTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDJfUEFEUFdSX0NUUkxfUkVHX1AyX09VVF9DVFJMX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDJfUEFEUFdSX0NUUkxfUkVHOiBQMl9PVVRfQ1RSTCAoQml0ZmllbGQtTWFzazogMHgxZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QM19QQURQV1JfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDNfUEFEUFdSX0NUUkxfUkVHX1AzX09VVF9DVFJMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfUEFEUFdSX0NUUkxfUkVHOiBQM19PVVRfQ1RSTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDNfUEFEUFdSX0NUUkxfUkVHX1AzX09VVF9DVFJMX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDNfUEFEUFdSX0NUUkxfUkVHOiBQM19PVVRfQ1RSTCAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19QNF9QQURQV1JfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUDRfUEFEUFdSX0NUUkxfUkVHX1A0X09VVF9DVFJMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfUEFEUFdSX0NUUkxfUkVHOiBQNF9PVVRfQ1RSTCAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUDRfUEFEUFdSX0NUUkxfUkVHX1A0X09VVF9DVFJMX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gUDRfUEFEUFdSX0NUUkxfUkVHOiBQNF9PVVRfQ1RSTCAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19HUElPX0NMS19TRUwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fR1BJT19DTEtfU0VMX0ZVTkNfQ0xPQ0tfU0VMX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gR1BJT19DTEtfU0VMOiBGVU5DX0NMT0NLX1NFTCAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fR1BJT19DTEtfU0VMX0ZVTkNfQ0xPQ0tfU0VMX01zayAgKDB4N1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gR1BJT19DTEtfU0VMOiBGVU5DX0NMT0NLX1NFTCAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX0JJU1RfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19SQU1fQklTVF9DT05GSUdfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUkFNX0JJU1RfQ09ORklHIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19SQU1fQklTVF9DT05GSUdfTXNrICgweDNVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUkFNX0JJU1RfQ09ORklHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19SQU1fQklTVF9QQVRURVJOX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUkFNX0JJU1RfUEFUVEVSTiAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19SQU1fQklTVF9QQVRURVJOX01zayAoMHhjVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUkFNX0JJU1RfUEFUVEVSTiAoQml0ZmllbGQtTWFzazogMHgwMykgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19ST01CSVNUX0VOQUJMRV9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUk9NQklTVF9FTkFCTEUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19ST01CSVNUX0VOQUJMRV9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUk9NQklTVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19SQU1CSVNUX0VOQUJMRV9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUkFNQklTVF9FTkFCTEUgKEJpdCA1KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19SQU1CSVNUX0VOQUJMRV9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogUkFNQklTVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19TWVNSQU1CSVNUX0VOQUJMRV9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogU1lTUkFNQklTVF9FTkFCTEUgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19TWVNSQU1CSVNUX0VOQUJMRV9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogU1lTUkFNQklTVF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19TSE9XX0JJU1RfUG9zICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogU0hPV19CSVNUIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQklTVF9DVFJMX1JFR19TSE9XX0JJU1RfTXNrICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gQklTVF9DVFJMX1JFRzogU0hPV19CSVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19TWVNSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICgwVUwpICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogU1lTUkFNX0JJU1RfTElORV9GQUlMIChCaXQgMCkgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19TWVNSQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDFVTCkgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogU1lTUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfU1lTUkFNX0JJU1RfRkFJTF9Qb3MgKDFVTCkgICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFNZU1JBTV9CSVNUX0ZBSUwgKEJpdCAxKSAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfU1lTUkFNX0JJU1RfRkFJTF9Nc2sgKDB4MlVMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFNZU1JBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19TWVNSQU1fQklTVF9CVVNZX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogU1lTUkFNX0JJU1RfQlVTWSAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19TWVNSQU1fQklTVF9CVVNZX01zayAoMHg0VUwpICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogU1lTUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NUUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoM1VMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDVFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDMpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NUUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHg4VUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDVFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NUUkFNX0JJU1RfRkFJTF9Qb3MgKDRVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDVFJBTV9CSVNUX0ZBSUwgKEJpdCA0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NUUkFNX0JJU1RfRkFJTF9Nc2sgKDB4MTBVTCkgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDVFJBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DVFJBTV9CSVNUX0JVU1lfUG9zICg1VUwpICAgICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ1RSQU1fQklTVF9CVVNZIChCaXQgNSkgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19DVFJBTV9CSVNUX0JVU1lfTXNrICgweDIwVUwpICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogQ1RSQU1fQklTVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfQ0RSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICg2VUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IENEUkFNX0JJU1RfTElORV9GQUlMIChCaXQgNikgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfQ0RSQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDQwVUwpICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IENEUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfQ0RSQU1fQklTVF9GQUlMX1BvcyAoN1VMKSAgICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IENEUkFNX0JJU1RfRkFJTCAoQml0IDcpICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfQ0RSQU1fQklTVF9GQUlMX01zayAoMHg4MFVMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IENEUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NEUkFNX0JJU1RfQlVTWV9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDRFJBTV9CSVNUX0JVU1kgKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX0NEUkFNX0JJU1RfQlVTWV9Nc2sgKDB4MTAwVUwpICAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBDRFJBTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19VU0JSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICg5VUwpICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogVVNCUkFNX0JJU1RfTElORV9GQUlMIChCaXQgOSkgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19VU0JSQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDIwMFVMKSAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogVVNCUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfVVNCUkFNX0JJU1RfRkFJTF9Qb3MgKDEwVUwpICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFVTQlJBTV9CSVNUX0ZBSUwgKEJpdCAxMCkgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfVVNCUkFNX0JJU1RfRkFJTF9Nc2sgKDB4NDAwVUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFVTQlJBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19VU0JSQU1fQklTVF9CVVNZX1BvcyAoMTFVTCkgICAgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogVVNCUkFNX0JJU1RfQlVTWSAoQml0IDExKSAgICAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMxX1JFR19VU0JSQU1fQklTVF9CVVNZX01zayAoMHg4MDBVTCkgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMxX1JFRzogVVNCUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1FTUElSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICgxMlVMKSAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBRU1BJUkFNX0JJU1RfTElORV9GQUlMIChCaXQgMTIpICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzFfUkVHX1FTUElSQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDEwMDBVTCkgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzFfUkVHOiBRU1BJUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfUVNQSVJBTV9CSVNUX0ZBSUxfUG9zICgxM1VMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFFTUElSQU1fQklTVF9GQUlMIChCaXQgMTMpICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfUVNQSVJBTV9CSVNUX0ZBSUxfTXNrICgweDIwMDBVTCkgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFFTUElSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfUVNQSVJBTV9CSVNUX0JVU1lfUG9zICgxNFVMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFFTUElSQU1fQklTVF9CVVNZIChCaXQgMTQpICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfUVNQSVJBTV9CSVNUX0JVU1lfTXNrICgweDQwMDBVTCkgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFFTUElSQU1fQklTVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfUk9NX0JJU1RfQlVTWV9Qb3MgKDE1VUwpICAgICAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFJPTV9CSVNUX0JVU1kgKEJpdCAxNSkgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMV9SRUdfUk9NX0JJU1RfQlVTWV9Nc2sgKDB4ODAwMFVMKSAgICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMV9SRUc6IFJPTV9CSVNUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1RYUkFNX0JJU1RfTElORV9GQUlMX1BvcyAoMFVMKSAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9UWFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0IDApICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19GVERGX1RYUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHgxVUwpICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRlRERl9UWFJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfVFhSQU1fQklTVF9GQUlMX1BvcyAoMVVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1RYUkFNX0JJU1RfRkFJTCAoQml0IDEpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfVFhSQU1fQklTVF9GQUlMX01zayAoMHgyVUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1RYUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfVFhSQU1fQklTVF9CVVNZX1BvcyAoMlVMKSAgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1RYUkFNX0JJU1RfQlVTWSAoQml0IDIpICAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfVFhSQU1fQklTVF9CVVNZX01zayAoMHg0VUwpICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1RYUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfUlhSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICgzVUwpICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1JYUkFNX0JJU1RfTElORV9GQUlMIChCaXQgMykgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0ZUREZfUlhSQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDhVTCkgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBGVERGX1JYUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRlRERl9SWFJBTV9CSVNUX0ZBSUxfUG9zICg0VUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEZUREZfUlhSQU1fQklTVF9GQUlMIChCaXQgNCkgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRlRERl9SWFJBTV9CSVNUX0ZBSUxfTXNrICgweDEwVUwpICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEZUREZfUlhSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRlRERl9SWFJBTV9CSVNUX0JVU1lfUG9zICg1VUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEZUREZfUlhSQU1fQklTVF9CVVNZIChCaXQgNSkgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRlRERl9SWFJBTV9CSVNUX0JVU1lfTXNrICgweDIwVUwpICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEZUREZfUlhSQU1fQklTVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRUNDX0NPREVSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICg2VUwpICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19DT0RFUkFNX0JJU1RfTElORV9GQUlMIChCaXQgNikgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19DT0RFUkFNX0JJU1RfTElORV9GQUlMX01zayAoMHg0MFVMKSAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX0NPREVSQU1fQklTVF9MSU5FX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfQ09ERVJBTV9CSVNUX0ZBSUxfUG9zICg3VUwpICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX0NPREVSQU1fQklTVF9GQUlMIChCaXQgNykgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19FQ0NfQ09ERVJBTV9CSVNUX0ZBSUxfTXNrICgweDgwVUwpICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX0NPREVSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRUNDX0NPREVSQU1fQklTVF9CVVNZX1BvcyAoOFVMKSAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19DT0RFUkFNX0JJU1RfQlVTWSAoQml0IDgpICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfRUNDX0NPREVSQU1fQklTVF9CVVNZX01zayAoMHgxMDBVTCkgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IEVDQ19DT0RFUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19UQ01SQU1fQklTVF9MSU5FX0ZBSUxfUG9zICg5VUwpICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfVENNUkFNX0JJU1RfTElORV9GQUlMIChCaXQgOSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19UQ01SQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDIwMFVMKSAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogRUNDX1RDTVJBTV9CSVNUX0xJTkVfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19UQ01SQU1fQklTVF9GQUlMX1BvcyAoMTBVTCkgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfVENNUkFNX0JJU1RfRkFJTCAoQml0IDEwKSAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19UQ01SQU1fQklTVF9GQUlMX01zayAoMHg0MDBVTCkgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfVENNUkFNX0JJU1RfRkFJTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19UQ01SQU1fQklTVF9CVVNZX1BvcyAoMTFVTCkgICAgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfVENNUkFNX0JJU1RfQlVTWSAoQml0IDExKSAgICAgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0VDQ19UQ01SQU1fQklTVF9CVVNZX01zayAoMHg4MDBVTCkgICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBFQ0NfVENNUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0NSWVBUT1JBTV9CSVNUX0xJTkVfRkFJTF9Qb3MgKDEyVUwpICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzJfUkVHOiBDUllQVE9SQU1fQklTVF9MSU5FX0ZBSUwgKEJpdCAxMikgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzJfUkVHX0NSWVBUT1JBTV9CSVNUX0xJTkVfRkFJTF9Nc2sgKDB4MTAwMFVMKSAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogQ1JZUFRPUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfQ1JZUFRPUkFNX0JJU1RfRkFJTF9Qb3MgKDEzVUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IENSWVBUT1JBTV9CSVNUX0ZBSUwgKEJpdCAxMykgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTMl9SRUdfQ1JZUFRPUkFNX0JJU1RfRkFJTF9Nc2sgKDB4MjAwMFVMKSAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTMl9SRUc6IENSWVBUT1JBTV9CSVNUX0ZBSUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19DUllQVE9SQU1fQklTVF9CVVNZX1BvcyAoMTRVTCkgICAgICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogQ1JZUFRPUkFNX0JJU1RfQlVTWSAoQml0IDE0KSAgICAgICovCisjZGVmaW5lIEdQSU9fUkFNQklTVF9TVEFUVVMyX1JFR19DUllQVE9SQU1fQklTVF9CVVNZX01zayAoMHg0MDAwVUwpICAgICAvKiE8IEdQSU8gUkFNQklTVF9TVEFUVVMyX1JFRzogQ1JZUFRPUkFNX0JJU1RfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fUkFNQklTVF9TVEFUVVMzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzNfUkVHX0ZUREZfRlBSQU1fQklTVF9MSU5FX0ZBSUxfUG9zICgwVUwpICAgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzNfUkVHOiBGVERGX0ZQUkFNX0JJU1RfTElORV9GQUlMIChCaXQgMCkgKi8KKyNkZWZpbmUgR1BJT19SQU1CSVNUX1NUQVRVUzNfUkVHX0ZUREZfRlBSQU1fQklTVF9MSU5FX0ZBSUxfTXNrICgweDFVTCkgIC8qITwgR1BJTyBSQU1CSVNUX1NUQVRVUzNfUkVHOiBGVERGX0ZQUkFNX0JJU1RfTElORV9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTM19SRUdfRlRERl9GUFJBTV9CSVNUX0ZBSUxfUG9zICgxVUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTM19SRUc6IEZUREZfRlBSQU1fQklTVF9GQUlMIChCaXQgMSkgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTM19SRUdfRlRERl9GUFJBTV9CSVNUX0ZBSUxfTXNrICgweDJVTCkgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTM19SRUc6IEZUREZfRlBSQU1fQklTVF9GQUlMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTM19SRUdfRlRERl9GUFJBTV9CSVNUX0JVU1lfUG9zICgyVUwpICAgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTM19SRUc6IEZUREZfRlBSQU1fQklTVF9CVVNZIChCaXQgMikgICAgICAqLworI2RlZmluZSBHUElPX1JBTUJJU1RfU1RBVFVTM19SRUdfRlRERl9GUFJBTV9CSVNUX0JVU1lfTXNrICgweDRVTCkgICAgICAgLyohPCBHUElPIFJBTUJJU1RfU1RBVFVTM19SRUc6IEZUREZfRlBSQU1fQklTVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19ST01CSVNUX1JFU1VMVExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1JPTUJJU1RfUkVTVUxUTF9SRUdfUk9NQklTVF9SRVNVTFRMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFJPTUJJU1RfUkVTVUxUTF9SRUc6IFJPTUJJU1RfUkVTVUxUTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JPTUJJU1RfUkVTVUxUTF9SRUdfUk9NQklTVF9SRVNVTFRMX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBHUElPIFJPTUJJU1RfUkVTVUxUTF9SRUc6IFJPTUJJU1RfUkVTVUxUTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19ST01CSVNUX1JFU1VMVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1JPTUJJU1RfUkVTVUxUSF9SRUdfUk9NQklTVF9SRVNVTFRIX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFJPTUJJU1RfUkVTVUxUSF9SRUc6IFJPTUJJU1RfUkVTVUxUSCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1JPTUJJU1RfUkVTVUxUSF9SRUdfUk9NQklTVF9SRVNVTFRIX01zayAoMHhmZmZmVUwpICAgICAgICAgLyohPCBHUElPIFJPTUJJU1RfUkVTVUxUSF9SRUc6IFJPTUJJU1RfUkVTVUxUSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19URVNUX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19DTE9DS1NfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfQ0xPQ0tTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19DTE9DS1NfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfQ0xPQ0tTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfRU5BQkxFX1JGUFRfUG9zICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IEVOQUJMRV9SRlBUIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfRU5BQkxFX1JGUFRfTXNrICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IEVOQUJMRV9SRlBUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19QTExfVEVTVF9PVVRfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfUExMX1RFU1RfT1VUIChCaXQgMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19QTExfVEVTVF9PVVRfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfUExMX1RFU1RfT1VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19EQ0RDX1RFU1RCVVNfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfRENEQ19URVNUQlVTIChCaXQgMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfU0hPV19EQ0RDX1RFU1RCVVNfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFNIT1dfRENEQ19URVNUQlVTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfWFRBTDE2TV9DQVBfVEVTVF9FTl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFhUQUwxNk1fQ0FQX1RFU1RfRU4gKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTF9SRUdfWFRBTDE2TV9DQVBfVEVTVF9FTl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTF9SRUc6IFhUQUwxNk1fQ0FQX1RFU1RfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19TSE9XX0lGX1JPX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogU0hPV19JRl9STyAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19TSE9XX0lGX1JPX01zayAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogU0hPV19JRl9STyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19QTExfVFNUX01PREVfUG9zICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogUExMX1RTVF9NT0RFIChCaXQgNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19QTExfVFNUX01PREVfTXNrICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogUExMX1RTVF9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19TSE9XX1RYREFDX01PRF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogU0hPV19UWERBQ19NT0QgKEJpdCA3KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19TSE9XX1RYREFDX01PRF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogU0hPV19UWERBQ19NT0QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19TSE9XX1BXUl9UU1RfT1VUX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogU0hPV19QV1JfVFNUX09VVCAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19TSE9XX1BXUl9UU1RfT1VUX01zayAoMHg3MDBVTCkgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogU0hPV19QV1JfVFNUX09VVCAoQml0ZmllbGQtTWFzazogMHgwNykgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19YVEFMMTZNX1RTVF9TWVNfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogWFRBTDE2TV9UU1RfU1lTIChCaXQgMTIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19YVEFMMTZNX1RTVF9TWVNfTXNrICgweDMwMDBVTCkgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogWFRBTDE2TV9UU1RfU1lTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19YVEFMMTZNX1RSSU1fVEVTVF9FTl9Qb3MgKDE0VUwpICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogWFRBTDE2TV9UUklNX1RFU1RfRU4gKEJpdCAxNCkgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMX1JFR19YVEFMMTZNX1RSSU1fVEVTVF9FTl9Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMX1JFRzogWFRBTDE2TV9UUklNX1RFU1RfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUElPX1RFU1RfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMMl9SRUdfQU5BX1RFU1RNVVhfQ1RSTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMMl9SRUc6IEFOQV9URVNUTVVYX0NUUkwgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMMl9SRUdfQU5BX1RFU1RNVVhfQ1RSTF9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMMl9SRUc6IEFOQV9URVNUTVVYX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMMl9SRUdfUkZfSU5fVEVTVE1VWF9DVFJMX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMMl9SRUc6IFJGX0lOX1RFU1RNVVhfQ1RSTCAoQml0IDgpICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMMl9SRUdfUkZfSU5fVEVTVE1VWF9DVFJMX01zayAoMHgzMDBVTCkgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMMl9SRUc6IFJGX0lOX1RFU1RNVVhfQ1RSTCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQSU9fVEVTVF9DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkwzX1JFR19SRl9URVNUX09VVF9TRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkwzX1JFRzogUkZfVEVTVF9PVVRfU0VMIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkwzX1JFR19SRl9URVNUX09VVF9TRUxfTXNrICgweDNmVUwpICAgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkwzX1JFRzogUkZfVEVTVF9PVVRfU0VMIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkwzX1JFR19WQlVTX0NPTVBBUkFUT1JfVEVTVF9Qb3MgKDZVTCkgICAgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkwzX1JFRzogVkJVU19DT01QQVJBVE9SX1RFU1QgKEJpdCA2KSAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19URVNUX0NUUkwzX1JFR19WQlVTX0NPTVBBUkFUT1JfVEVTVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgIC8qITwgR1BJTyBURVNUX0NUUkwzX1JFRzogVkJVU19DT01QQVJBVE9SX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMM19SRUdfUkZfVEVTVF9PVVRfUEFSQU1fUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMM19SRUc6IFJGX1RFU1RfT1VUX1BBUkFNIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMM19SRUdfUkZfVEVTVF9PVVRfUEFSQU1fTXNrICgweGZmMDBVTCkgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMM19SRUc6IFJGX1RFU1RfT1VUX1BBUkFNIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19URVNUX0NUUkw0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDRfUkVHX1JGX1RFU1RfSU5fU0VMX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDRfUkVHOiBSRl9URVNUX0lOX1NFTCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDRfUkVHX1JGX1RFU1RfSU5fU0VMX01zayAoMHg3VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDRfUkVHOiBSRl9URVNUX0lOX1NFTCAoQml0ZmllbGQtTWFzazogMHgwNykgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDRfUkVHX1JGX1RFU1RfSU5fUEFSQU1fUG9zICg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDRfUkVHOiBSRl9URVNUX0lOX1BBUkFNIChCaXQgOCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDRfUkVHX1JGX1RFU1RfSU5fUEFSQU1fTXNrICgweGZmMDBVTCkgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDRfUkVHOiBSRl9URVNUX0lOX1BBUkFNIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BJT19URVNUX0NUUkw1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQlVTX1RPX0FWU19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JVU19UT19BVlMgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQlVTX1RPX0FWU19Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JVU19UT19BVlMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPXzFWNF9Qb3MgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET18xVjQgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPXzFWNF9Nc2sgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET18xVjQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPXzFWOF9GTEFTSF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET18xVjhfRkxBU0ggKEJpdCAyKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfTERPXzFWOF9GTEFTSF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0xET18xVjhfRkxBU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fQ09SRV9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPX0NPUkUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fQ09SRV9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPX0NPUkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fMVY4X1BBX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPXzFWOF9QQSAoQml0IDQpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fMVY4X1BBX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPXzFWOF9QQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fQURDX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPX0FEQyAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fQURDX01zayAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPX0FEQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fUExMX1BvcyAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPX1BMTCAoQml0IDYpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9MRE9fUExMX01zayAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfTERPX1BMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9CQU5ER0FQX0lfVEVTVF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfQkFOREdBUF9JX1RFU1QgKEJpdCA3KSAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9CQU5ER0FQX0lfVEVTVF9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfQkFOREdBUF9JX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9TSU1PX0JVQ0tfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfU0lNT19CVUNLIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9TSU1PX0JVQ0tfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfU0lNT19CVUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9CT0RfVlJFRl9PVVRfUG9zICg5VUwpICAgICAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfQk9EX1ZSRUZfT1VUIChCaXQgOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fVEVTVF9DVFJMNV9SRUdfVEVTVF9CT0RfVlJFRl9PVVRfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAvKiE8IEdQSU8gVEVTVF9DVFJMNV9SRUc6IFRFU1RfQk9EX1ZSRUZfT1VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQk9EX1ZSRUZfSU5fUG9zICgxMFVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JPRF9WUkVGX0lOIChCaXQgMTApICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfQk9EX1ZSRUZfSU5fTXNrICgweDQwMFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0JPRF9WUkVGX0lOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfSV9EQ0RDX0ZJTFRfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0lfRENEQ19GSUxUIChCaXQgMTEpICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfSV9EQ0RDX0ZJTFRfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX0lfRENEQ19GSUxUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfVkNPTlRfQV9Qb3MgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1ZDT05UX0EgKEJpdCAxMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfVkNPTlRfQV9Nc2sgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1ZDT05UX0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfVlJFRl8xVjJfQV9Qb3MgKDEzVUwpICAgICAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1ZSRUZfMVYyX0EgKEJpdCAxMykgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfVlJFRl8xVjJfQV9Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1ZSRUZfMVYyX0EgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfUE9SX1ZCQVRfTk9LX0FWRF9Qb3MgKDE0VUwpICAgICAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1BPUl9WQkFUX05PS19BVkQgKEJpdCAxNCkgICAgICAgICAqLworI2RlZmluZSBHUElPX1RFU1RfQ1RSTDVfUkVHX1RFU1RfUE9SX1ZCQVRfTk9LX0FWRF9Nc2sgKDB4NDAwMFVMKSAgICAgICAgLyohPCBHUElPIFRFU1RfQ1RSTDVfUkVHOiBURVNUX1BPUl9WQkFUX05PS19BVkQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ0dQUkVHJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX1NFVF9GUkVFWkVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XS1VQVElNX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfV0tVUFRJTSAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XS1VQVElNX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfV0tVUFRJTSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTBfUG9zICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0wIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTBfTXNrICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0wIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9CTEVUSU1fUG9zICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfQkxFVElNIChCaXQgMikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9CTEVUSU1fTXNrICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfQkxFVElNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX1BvcyAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfV0RPRyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX01zayAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfV0RPRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9VU0JfUG9zICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfVVNCIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9VU0JfTXNrICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfVVNCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9ETUFfUG9zICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfRE1BIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9ETUFfTXNrICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfRE1BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTFfUG9zICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0xIChCaXQgNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTFfTXNrICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0xIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTJfUG9zICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0yIChCaXQgNykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9TV1RJTTJfTXNrICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFNFVF9GUkVFWkVfUkVHOiBGUlpfU1dUSU0yIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BSRUdfUkVTRVRfRlJFRVpFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1dLVVBUSU1fUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9XS1VQVElNIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1dLVVBUSU1fTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9XS1VQVElNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9TV1RJTTAgKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9TV1RJTTAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX0JMRVRJTV9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9CTEVUSU0gKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX0JMRVRJTV9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9CTEVUSU0gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1dET0dfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9XRE9HIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1dET0dfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9XRE9HIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1VTQl9Qb3MgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9VU0IgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1VTQl9Nc2sgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9VU0IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX0RNQV9Qb3MgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9ETUEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX0RNQV9Nc2sgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9ETUEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMV9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9TV1RJTTEgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMV9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9TV1RJTTEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMl9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9TV1RJTTIgKEJpdCA3KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMl9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFJFU0VUX0ZSRUVaRV9SRUc6IEZSWl9TV1RJTTIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX0RFQlVHX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX0RFQlVHX1JFR19ERUJVR1NfRlJFRVpFX0VOX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIERFQlVHX1JFRzogREVCVUdTX0ZSRUVaRV9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0RFQlVHX1JFR19ERUJVR1NfRlJFRVpFX0VOX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIERFQlVHX1JFRzogREVCVUdTX0ZSRUVaRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19HUF9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX0dQX1NUQVRVU19SRUdfQ0FMX1BIQVNFX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX1NUQVRVU19SRUc6IENBTF9QSEFTRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0dQX1NUQVRVU19SRUdfQ0FMX1BIQVNFX01zayAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX1NUQVRVU19SRUc6IENBTF9QSEFTRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX0dQX0NPTlRST0xfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX0dQX0NPTlRST0xfUkVHX0JMRV9XQUtFVVBfUkVRX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX0NPTlRST0xfUkVHOiBCTEVfV0FLRVVQX1JFUSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0dQX0NPTlRST0xfUkVHX0JMRV9XQUtFVVBfUkVRX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX0NPTlRST0xfUkVHOiBCTEVfV0FLRVVQX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEdQUkVHX0dQX0NPTlRST0xfUkVHX0JMRV9IMkhfQlJJREdFX0JZUEFTU19Qb3MgKDFVTCkgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX0NPTlRST0xfUkVHOiBCTEVfSDJIX0JSSURHRV9CWVBBU1MgKEJpdCAxKSAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0dQX0NPTlRST0xfUkVHX0JMRV9IMkhfQlJJREdFX0JZUEFTU19Nc2sgKDB4MlVMKSAgICAgICAgICAvKiE8IEdQUkVHIEdQX0NPTlRST0xfUkVHOiBCTEVfSDJIX0JSSURHRV9CWVBBU1MgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQUkVHX0dQX0NPTlRST0xfUkVHX0JMRV9XQUtFVVBfTFBfSVJRX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX0NPTlRST0xfUkVHOiBCTEVfV0FLRVVQX0xQX0lSUSAoQml0IDIpICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0dQX0NPTlRST0xfUkVHX0JMRV9XQUtFVVBfTFBfSVJRX01zayAoMHg0VUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIEdQX0NPTlRST0xfUkVHOiBCTEVfV0FLRVVQX0xQX0lSUSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19FQ0NfQkFTRV9BRERSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BSRUdfRUNDX0JBU0VfQUREUl9SRUdfRUNDX0JBU0VfQUREUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgRUNDX0JBU0VfQUREUl9SRUc6IEVDQ19CQVNFX0FERFIgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfRUNDX0JBU0VfQUREUl9SRUdfRUNDX0JBU0VfQUREUl9Nc2sgKDB4N2ZVTCkgICAgICAgICAgICAgIC8qITwgR1BSRUcgRUNDX0JBU0VfQUREUl9SRUc6IEVDQ19CQVNFX0FERFIgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX0xFRF9DT05UUk9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQxX1NSQ19TRUxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMV9TUkNfU0VMIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQxX1NSQ19TRUxfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMV9TUkNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQyX1NSQ19TRUxfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMl9TUkNfU0VMIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQyX1NSQ19TRUxfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMl9TUkNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQzX1NSQ19TRUxfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEM19TUkNfU0VMIChCaXQgMikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQzX1NSQ19TRUxfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEM19TUkNfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQxX0VOX1BvcyAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMV9FTiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQxX0VOX01zayAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQyX0VOX1BvcyAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMl9FTiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQyX0VOX01zayAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEMl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQzX0VOX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEM19FTiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRUQzX0VOX01zayAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEM19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRURfVFJJTV9Qb3MgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEX1RSSU0gKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0xFRF9DT05UUk9MX1JFR19MRURfVFJJTV9Nc2sgICAgKDB4M2MwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIExFRF9DT05UUk9MX1JFRzogTEVEX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX0JMRV9GSU5FQ05UX1NBTVBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX0JMRV9GSU5FQ05UX1NBTVBfUkVHX0JMRV9GSU5FQ05UX1NBTVBfUG9zICgwVUwpICAgICAgICAgICAvKiE8IEdQUkVHIEJMRV9GSU5FQ05UX1NBTVBfUkVHOiBCTEVfRklORUNOVF9TQU1QIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIEdQUkVHX0JMRV9GSU5FQ05UX1NBTVBfUkVHX0JMRV9GSU5FQ05UX1NBTVBfTXNrICgweDNmZlVMKSAgICAgICAvKiE8IEdQUkVHIEJMRV9GSU5FQ05UX1NBTVBfUkVHOiBCTEVfRklORUNOVF9TQU1QIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBHUFJFR19QTExfU1lTX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMMV9SRUdfUExMX0VOX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMMV9SRUc6IFBMTF9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMMV9SRUdfUExMX0VOX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMMV9SRUc6IFBMTF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMMV9SRUdfTERPX1BMTF9FTkFCTEVfUG9zICgxVUwpICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMMV9SRUc6IExET19QTExfRU5BQkxFIChCaXQgMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMMV9SRUdfTERPX1BMTF9FTkFCTEVfTXNrICgweDJVTCkgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMMV9SRUc6IExET19QTExfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwxX1JFR19MRE9fUExMX1ZSRUZfSE9MRF9Qb3MgKDJVTCkgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwxX1JFRzogTERPX1BMTF9WUkVGX0hPTEQgKEJpdCAyKSAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwxX1JFR19MRE9fUExMX1ZSRUZfSE9MRF9Nc2sgKDB4NFVMKSAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwxX1JFRzogTERPX1BMTF9WUkVGX0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDFfUkVHX1BMTF9SX0RJVl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDFfUkVHOiBQTExfUl9ESVYgKEJpdCA4KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDFfUkVHX1BMTF9SX0RJVl9Nc2sgKDB4N2YwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDFfUkVHOiBQTExfUl9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgR1BSRUdfUExMX1NZU19DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHX1BMTF9OX0RJVl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDJfUkVHOiBQTExfTl9ESVYgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHX1BMTF9OX0RJVl9Nc2sgKDB4N2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDJfUkVHOiBQTExfTl9ESVYgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHX1BMTF9ERUxfU0VMX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDJfUkVHOiBQTExfREVMX1NFTCAoQml0IDEyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHX1BMTF9ERUxfU0VMX01zayAoMHgzMDAwVUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDJfUkVHOiBQTExfREVMX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHX1BMTF9TRUxfTUlOX0NVUl9JTlRfUG9zICgxNFVMKSAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDJfUkVHOiBQTExfU0VMX01JTl9DVVJfSU5UIChCaXQgMTQpICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfQ1RSTDJfUkVHX1BMTF9TRUxfTUlOX0NVUl9JTlRfTXNrICgweDQwMDBVTCkgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfQ1RSTDJfUkVHOiBQTExfU0VMX01JTl9DVVJfSU5UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX1BMTF9TWVNfQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwzX1JFR19QTExfSUNQX1NFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwzX1JFRzogUExMX0lDUF9TRUwgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwzX1JFR19QTExfSUNQX1NFTF9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwzX1JFRzogUExMX0lDUF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwzX1JFR19QTExfU1RBUlRfREVMX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwzX1JFRzogUExMX1NUQVJUX0RFTCAoQml0IDEwKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX0NUUkwzX1JFR19QTExfU1RBUlRfREVMX01zayAoMHg3YzAwVUwpICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX0NUUkwzX1JFRzogUExMX1NUQVJUX0RFTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMM19SRUdfUExMX1JFQ0FMSUJfUG9zICgxNVVMKSAgICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMM19SRUc6IFBMTF9SRUNBTElCIChCaXQgMTUpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19DVFJMM19SRUdfUExMX1JFQ0FMSUJfTXNrICgweDgwMDBVTCkgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19DVFJMM19SRUc6IFBMTF9SRUNBTElCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX1BMTF9TWVNfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX1BMTF9MT0NLX0ZJTkVfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBQTExfTE9DS19GSU5FIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19TVEFUVVNfUkVHX1BMTF9MT0NLX0ZJTkVfTXNrICgweDFVTCkgICAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19TVEFUVVNfUkVHOiBQTExfTE9DS19GSU5FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1NUQVRVU19SRUdfTERPX1BMTF9PS19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1NUQVRVU19SRUc6IExET19QTExfT0sgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1NUQVRVU19SRUdfTERPX1BMTF9PS19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1NUQVRVU19SRUc6IExET19QTExfT0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1NUQVRVU19SRUdfUExMX1BMTF9CRVNUX01JTl9DVVJfUG9zICg1VUwpICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1NUQVRVU19SRUc6IFBMTF9QTExfQkVTVF9NSU5fQ1VSIChCaXQgNSkgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1NUQVRVU19SRUdfUExMX1BMTF9CRVNUX01JTl9DVVJfTXNrICgweDdlMFVMKSAgICAgLyohPCBHUFJFRyBQTExfU1lTX1NUQVRVU19SRUc6IFBMTF9QTExfQkVTVF9NSU5fQ1VSIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1NUQVRVU19SRUdfUExMX0NBTElCUl9FTkRfUG9zICgxMVVMKSAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1NUQVRVU19SRUc6IFBMTF9DQUxJQlJfRU5EIChCaXQgMTEpICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1NUQVRVU19SRUdfUExMX0NBTElCUl9FTkRfTXNrICgweDgwMFVMKSAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1NUQVRVU19SRUc6IFBMTF9DQUxJQlJfRU5EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9ESVNfTE9PUEZJTFRfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfRElTX0xPT1BGSUxUIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9ESVNfTE9PUEZJTFRfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfRElTX0xPT1BGSUxUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9NSU5fQ1VSUkVOVF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfTUlOX0NVUlJFTlQgKEJpdCAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9NSU5fQ1VSUkVOVF9Nc2sgKDB4N2VVTCkgICAgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfTUlOX0NVUlJFTlQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX1RFU1RfVkNUUl9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9URVNUX1ZDVFIgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX1RFU1RfVkNUUl9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9URVNUX1ZDVFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX09QRU5fTE9PUF9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9PUEVOX0xPT1AgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX09QRU5fTE9PUF9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9PUEVOX0xPT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX0NIQU5HRV9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9DSEFOR0UgKEJpdCA5KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX0NIQU5HRV9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9DSEFOR0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX1NFTF9OX0RJVl9URVNUX1BvcyAoMTBVTCkgICAgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9TRUxfTl9ESVZfVEVTVCAoQml0IDEwKSAgICAgICAgICovCisjZGVmaW5lIEdQUkVHX1BMTF9TWVNfVEVTVF9SRUdfUExMX1NFTF9OX0RJVl9URVNUX01zayAoMHg0MDBVTCkgICAgICAgICAvKiE8IEdQUkVHIFBMTF9TWVNfVEVTVF9SRUc6IFBMTF9TRUxfTl9ESVZfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfU0VMX1JfRElWX1RFU1RfUG9zICgxMVVMKSAgICAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX1NFTF9SX0RJVl9URVNUIChCaXQgMTEpICAgICAgICAgKi8KKyNkZWZpbmUgR1BSRUdfUExMX1NZU19URVNUX1JFR19QTExfU0VMX1JfRElWX1RFU1RfTXNrICgweDgwMFVMKSAgICAgICAgIC8qITwgR1BSRUcgUExMX1NZU19URVNUX1JFRzogUExMX1NFTF9SX0RJVl9URVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9MT0NLX0RFVF9SRVNfQ05UX1BvcyAoMTNVTCkgICAgICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfTE9DS19ERVRfUkVTX0NOVCAoQml0IDEzKSAgICAgICAqLworI2RlZmluZSBHUFJFR19QTExfU1lTX1RFU1RfUkVHX1BMTF9MT0NLX0RFVF9SRVNfQ05UX01zayAoMHhlMDAwVUwpICAgICAgLyohPCBHUFJFRyBQTExfU1lTX1RFU1RfUkVHOiBQTExfTE9DS19ERVRfUkVTX0NOVCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ0kyQycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19NQVNURVJfTU9ERV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfTUFTVEVSX01PREUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19NQVNURVJfTU9ERV9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfTUFTVEVSX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19TUEVFRF9Qb3MgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfU1BFRUQgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19TUEVFRF9Nc2sgICAgICAgICAoMHg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfU1BFRUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ18xMEJJVEFERFJfU0xBVkVfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfMTBCSVRBRERSX1NMQVZFIChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ18xMEJJVEFERFJfU0xBVkVfTXNrICgweDhVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfMTBCSVRBRERSX1NMQVZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ18xMEJJVEFERFJfTUFTVEVSX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfMTBCSVRBRERSX01BU1RFUiAoQml0IDQpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ18xMEJJVEFERFJfTUFTVEVSX01zayAoMHgxMFVMKSAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfMTBCSVRBRERSX01BU1RFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19SRVNUQVJUX0VOX1BvcyAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfUkVTVEFSVF9FTiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19SRVNUQVJUX0VOX01zayAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfUkVTVEFSVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19TTEFWRV9ESVNBQkxFX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfU0xBVkVfRElTQUJMRSAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT05fUkVHX0kyQ19TTEFWRV9ESVNBQkxFX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT05fUkVHOiBJMkNfU0xBVkVfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19UQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19UQVJfUkVHX0lDX1RBUl9Qb3MgICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UQVJfUkVHOiBJQ19UQVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UQVJfUkVHX0lDX1RBUl9Nc2sgICAgICAgICAgICAoMHgzZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UQVJfUkVHOiBJQ19UQVIgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UQVJfUkVHX0dDX09SX1NUQVJUX1BvcyAgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UQVJfUkVHOiBHQ19PUl9TVEFSVCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UQVJfUkVHX0dDX09SX1NUQVJUX01zayAgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UQVJfUkVHOiBHQ19PUl9TVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UQVJfUkVHX1NQRUNJQUxfUG9zICAgICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UQVJfUkVHOiBTUEVDSUFMIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UQVJfUkVHX1NQRUNJQUxfTXNrICAgICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UQVJfUkVHOiBTUEVDSUFMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19TQVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19TQVJfUkVHX0lDX1NBUl9Qb3MgICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TQVJfUkVHOiBJQ19TQVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TQVJfUkVHX0lDX1NBUl9Nc2sgICAgICAgICAgICAoMHgzZmZVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TQVJfUkVHOiBJQ19TQVIgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19EQVRBX0NNRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfREFUX1BvcyAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IERBVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfREFUX01zayAgICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IERBVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfQ01EX1BvcyAgICAgICAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IENNRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfQ01EX01zayAgICAgICAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IENNRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfU1RPUF9Qb3MgICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IFNUT1AgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfU1RPUF9Nc2sgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IFNUT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfUkVTVEFSVF9Qb3MgICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IFJFU1RBUlQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19EQVRBX0NNRF9SRUdfUkVTVEFSVF9Nc2sgICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19EQVRBX0NNRF9SRUc6IFJFU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1NTX1NDTF9IQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19TU19TQ0xfSENOVF9SRUdfSUNfU1NfU0NMX0hDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19TU19TQ0xfSENOVF9SRUc6IElDX1NTX1NDTF9IQ05UIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19TU19TQ0xfSENOVF9SRUdfSUNfU1NfU0NMX0hDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgSTJDIEkyQ19TU19TQ0xfSENOVF9SRUc6IElDX1NTX1NDTF9IQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19TU19TQ0xfTENOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfU1NfU0NMX0xDTlRfUkVHX0lDX1NTX1NDTF9MQ05UX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfU1NfU0NMX0xDTlRfUkVHOiBJQ19TU19TQ0xfTENOVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfU1NfU0NMX0xDTlRfUkVHX0lDX1NTX1NDTF9MQ05UX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfU1NfU0NMX0xDTlRfUkVHOiBJQ19TU19TQ0xfTENOVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfRlNfU0NMX0hDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0ZTX1NDTF9IQ05UX1JFR19JQ19GU19TQ0xfSENOVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0ZTX1NDTF9IQ05UX1JFRzogSUNfRlNfU0NMX0hDTlQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0ZTX1NDTF9IQ05UX1JFR19JQ19GU19TQ0xfSENOVF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX0ZTX1NDTF9IQ05UX1JFRzogSUNfRlNfU0NMX0hDTlQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0ZTX1NDTF9MQ05UX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19GU19TQ0xfTENOVF9SRUdfSUNfRlNfU0NMX0xDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19GU19TQ0xfTENOVF9SRUc6IElDX0ZTX1NDTF9MQ05UIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19GU19TQ0xfTENOVF9SRUdfSUNfRlNfU0NMX0xDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgSTJDIEkyQ19GU19TQ0xfTENOVF9SRUc6IElDX0ZTX1NDTF9MQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfSU5UUl9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX1VOREVSX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX1VOREVSX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX09WRVJfUG9zICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9PVkVSIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX09WRVJfTXNrICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX0ZVTExfUG9zICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9GVUxMIChCaXQgMikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX0ZVTExfTXNrICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9GVUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1RYX09WRVJfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9UWF9PVkVSIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1RYX09WRVJfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9UWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1RYX0VNUFRZX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9UWF9FTVBUWSAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1RYX0VNUFRZX01zayAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9UWF9FTVBUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JEX1JFUV9Qb3MgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SRF9SRVEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JEX1JFUV9Nc2sgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SRF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1RYX0FCUlRfUG9zICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9UWF9BQlJUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1RYX0FCUlRfTXNrICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9UWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX0RPTkVfUG9zICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9ET05FIChCaXQgNykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1JYX0RPTkVfTXNrICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9SWF9ET05FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX0FDVElWSVRZX1BvcyAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9BQ1RJVklUWSAoQml0IDgpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX0FDVElWSVRZX01zayAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1NUT1BfREVUX1BvcyAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9TVE9QX0RFVCAoQml0IDkpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1NUT1BfREVUX01zayAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9TVE9QX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1NUQVJUX0RFVF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9TVEFSVF9ERVQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX1NUQVJUX0RFVF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9TVEFSVF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX0dFTl9DQUxMX1BvcyAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9HRU5fQ0FMTCAoQml0IDExKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9TVEFUX1JFR19SX0dFTl9DQUxMX01zayAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9TVEFUX1JFRzogUl9HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfSU5UUl9NQVNLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX1VOREVSX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9VTkRFUiAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX1VOREVSX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9VTkRFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX09WRVJfUG9zICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9PVkVSIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX09WRVJfTXNrICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX0ZVTExfUG9zICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9GVUxMIChCaXQgMikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX0ZVTExfTXNrICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9GVUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1RYX09WRVJfUG9zICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9UWF9PVkVSIChCaXQgMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1RYX09WRVJfTXNrICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9UWF9PVkVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1RYX0VNUFRZX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9UWF9FTVBUWSAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1RYX0VNUFRZX01zayAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9UWF9FTVBUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JEX1JFUV9Qb3MgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SRF9SRVEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JEX1JFUV9Nc2sgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SRF9SRVEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1RYX0FCUlRfUG9zICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9UWF9BQlJUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1RYX0FCUlRfTXNrICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9UWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX0RPTkVfUG9zICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9ET05FIChCaXQgNykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1JYX0RPTkVfTXNrICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9SWF9ET05FIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX0FDVElWSVRZX1BvcyAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9BQ1RJVklUWSAoQml0IDgpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX0FDVElWSVRZX01zayAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1NUT1BfREVUX1BvcyAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9TVE9QX0RFVCAoQml0IDkpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1NUT1BfREVUX01zayAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9TVE9QX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1NUQVJUX0RFVF9Qb3MgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9TVEFSVF9ERVQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX1NUQVJUX0RFVF9Nc2sgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9TVEFSVF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX0dFTl9DQUxMX1BvcyAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9HRU5fQ0FMTCAoQml0IDExKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSU5UUl9NQVNLX1JFR19NX0dFTl9DQUxMX01zayAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSU5UUl9NQVNLX1JFRzogTV9HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1JBV19JTlRSX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfVU5ERVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX1VOREVSIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfVU5ERVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX1VOREVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfT1ZFUl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX09WRVIgKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfT1ZFUl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRlVMTF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0ZVTEwgKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRlVMTF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0ZVTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfVFhfT1ZFUl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX09WRVIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfVFhfT1ZFUl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfVFhfRU1QVFlfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0VNUFRZIChCaXQgNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfVFhfRU1QVFlfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0VNUFRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUkRfUkVRX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJEX1JFUSAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUkRfUkVRX01zayAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJEX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfVFhfQUJSVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0FCUlQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfVFhfQUJSVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFRYX0FCUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRE9ORV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0RPTkUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfUlhfRE9ORV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFJYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfQUNUSVZJVFlfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IEFDVElWSVRZIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfQUNUSVZJVFlfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IEFDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfU1RPUF9ERVRfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFNUT1BfREVUIChCaXQgOSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfU1RPUF9ERVRfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFNUT1BfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfU1RBUlRfREVUX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFNUQVJUX0RFVCAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfU1RBUlRfREVUX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IFNUQVJUX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfR0VOX0NBTExfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IEdFTl9DQUxMIChCaXQgMTEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUkFXX0lOVFJfU1RBVF9SRUdfR0VOX0NBTExfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUkFXX0lOVFJfU1RBVF9SRUc6IEdFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19SWF9UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfUlhfVExfUkVHX1JYX1RMX1BvcyAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUlhfVExfUkVHOiBSWF9UTCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfUlhfVExfUkVHX1JYX1RMX01zayAgICAgICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfUlhfVExfUkVHOiBSWF9UTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19UWF9UTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfVFhfVExfUkVHX1RYX1RMX1BvcyAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfVExfUkVHOiBUWF9UTCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfVExfUkVHX1RYX1RMX01zayAgICAgICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfVExfUkVHOiBUWF9UTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX0lOVFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX0lOVFJfUkVHX0NMUl9JTlRSX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX0lOVFJfUkVHOiBDTFJfSU5UUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX0lOVFJfUkVHX0NMUl9JTlRSX01zayAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX0lOVFJfUkVHOiBDTFJfSU5UUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9SWF9VTkRFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX1JYX1VOREVSX1JFR19DTFJfUlhfVU5ERVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX1JYX1VOREVSX1JFRzogQ0xSX1JYX1VOREVSIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX1JYX1VOREVSX1JFR19DTFJfUlhfVU5ERVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX1JYX1VOREVSX1JFRzogQ0xSX1JYX1VOREVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX1JYX09WRVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SWF9PVkVSX1JFR19DTFJfUlhfT1ZFUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SWF9PVkVSX1JFRzogQ0xSX1JYX09WRVIgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SWF9PVkVSX1JFR19DTFJfUlhfT1ZFUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SWF9PVkVSX1JFRzogQ0xSX1JYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX1RYX09WRVJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9UWF9PVkVSX1JFR19DTFJfVFhfT1ZFUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9UWF9PVkVSX1JFRzogQ0xSX1RYX09WRVIgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9UWF9PVkVSX1JFR19DTFJfVFhfT1ZFUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9UWF9PVkVSX1JFRzogQ0xSX1RYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX1JEX1JFUV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SRF9SRVFfUkVHX0NMUl9SRF9SRVFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SRF9SRVFfUkVHOiBDTFJfUkRfUkVRIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SRF9SRVFfUkVHX0NMUl9SRF9SRVFfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SRF9SRVFfUkVHOiBDTFJfUkRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX1RYX0FCUlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9UWF9BQlJUX1JFR19DTFJfVFhfQUJSVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9UWF9BQlJUX1JFRzogQ0xSX1RYX0FCUlQgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9UWF9BQlJUX1JFR19DTFJfVFhfQUJSVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9UWF9BQlJUX1JFRzogQ0xSX1RYX0FCUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX1JYX0RPTkVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SWF9ET05FX1JFR19DTFJfUlhfRE9ORV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SWF9ET05FX1JFRzogQ0xSX1JYX0RPTkUgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9SWF9ET05FX1JFR19DTFJfUlhfRE9ORV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9SWF9ET05FX1JFRzogQ0xSX1JYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19DTFJfQUNUSVZJVFlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9BQ1RJVklUWV9SRUdfQ0xSX0FDVElWSVRZX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9BQ1RJVklUWV9SRUc6IENMUl9BQ1RJVklUWSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NMUl9BQ1RJVklUWV9SRUdfQ0xSX0FDVElWSVRZX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NMUl9BQ1RJVklUWV9SRUc6IENMUl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ0xSX1NUT1BfREVUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfU1RPUF9ERVRfUkVHX0NMUl9BQ1RJVklUWV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfU1RPUF9ERVRfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DTFJfU1RPUF9ERVRfUkVHX0NMUl9BQ1RJVklUWV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DTFJfU1RPUF9ERVRfUkVHOiBDTFJfQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9TVEFSVF9ERVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX1NUQVJUX0RFVF9SRUdfQ0xSX1NUQVJUX0RFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX1NUQVJUX0RFVF9SRUc6IENMUl9TVEFSVF9ERVQgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX1NUQVJUX0RFVF9SRUdfQ0xSX1NUQVJUX0RFVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX1NUQVJUX0RFVF9SRUc6IENMUl9TVEFSVF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NMUl9HRU5fQ0FMTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX0dFTl9DQUxMX1JFR19DTFJfR0VOX0NBTExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX0dFTl9DQUxMX1JFRzogQ0xSX0dFTl9DQUxMIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ0xSX0dFTl9DQUxMX1JFR19DTFJfR0VOX0NBTExfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ0xSX0dFTl9DQUxMX1JFRzogQ0xSX0dFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19FTkFCTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0VOQUJMRV9SRUdfQ1RSTF9FTkFCTEVfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0VOQUJMRV9SRUc6IENUUkxfRU5BQkxFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0VOQUJMRV9SRUdfQ1RSTF9FTkFCTEVfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0VOQUJMRV9SRUc6IENUUkxfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfSTJDX0FDVElWSVRZX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IEkyQ19BQ1RJVklUWSAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfSTJDX0FDVElWSVRZX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IEkyQ19BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfVEZORl9Qb3MgICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFRGTkYgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfVEZORl9Nc2sgICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFRGTkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfVEZFX1BvcyAgICAgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFRGRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfVEZFX01zayAgICAgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFRGRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfUkZORV9Qb3MgICAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFJGTkUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfUkZORV9Nc2sgICAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFJGTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfUkZGX1BvcyAgICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFJGRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfUkZGX01zayAgICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFJGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfTVNUX0FDVElWSVRZX1BvcyAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IE1TVF9BQ1RJVklUWSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfTVNUX0FDVElWSVRZX01zayAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IE1TVF9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfU0xWX0FDVElWSVRZX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFNMVl9BQ1RJVklUWSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NUQVRVU19SRUdfU0xWX0FDVElWSVRZX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NUQVRVU19SRUc6IFNMVl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfVFhGTFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1RYRkxSX1JFR19UWEZMUl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYRkxSX1JFRzogVFhGTFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYRkxSX1JFR19UWEZMUl9Nc2sgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYRkxSX1JFRzogVFhGTFIgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfUlhGTFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1JYRkxSX1JFR19SWEZMUl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JYRkxSX1JFRzogUlhGTFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1JYRkxSX1JFR19SWEZMUl9Nc2sgICAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1JYRkxSX1JFRzogUlhGTFIgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1NEQV9IT0xEX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1NEQV9IT0xEX1JFR19JQ19TREFfSE9MRF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NEQV9IT0xEX1JFRzogSUNfU0RBX0hPTEQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1NEQV9IT0xEX1JFR19JQ19TREFfSE9MRF9Nc2sgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1NEQV9IT0xEX1JFRzogSUNfU0RBX0hPTEQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzdCX0FERFJfTk9BQ0tfUG9zICgwVUwpICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF83Ql9BRERSX05PQUNLIChCaXQgMCkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzdCX0FERFJfTk9BQ0tfTXNrICgweDFVTCkgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF83Ql9BRERSX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQUREUjFfTk9BQ0tfUG9zICgxVUwpICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEFERFIxX05PQUNLIChCaXQgMSkgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQUREUjFfTk9BQ0tfTXNrICgweDJVTCkgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEFERFIxX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQUREUjJfTk9BQ0tfUG9zICgyVUwpICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEFERFIyX05PQUNLIChCaXQgMikgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQUREUjJfTk9BQ0tfTXNrICgweDRVTCkgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEFERFIyX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1RYREFUQV9OT0FDS19Qb3MgKDNVTCkgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9UWERBVEFfTk9BQ0sgKEJpdCAzKSAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1RYREFUQV9OT0FDS19Nc2sgKDB4OFVMKSAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9UWERBVEFfTk9BQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfR0NBTExfTk9BQ0tfUG9zICg0VUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0dDQUxMX05PQUNLIChCaXQgNCkgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfR0NBTExfTk9BQ0tfTXNrICgweDEwVUwpICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0dDQUxMX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX1JFQURfUG9zICg1VUwpICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9SRUFEIChCaXQgNSkgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX1JFQURfTXNrICgweDIwVUwpICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9SRUFEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0hTX0FDS0RFVF9Qb3MgKDZVTCkgICAgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9IU19BQ0tERVQgKEJpdCA2KSAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0hTX0FDS0RFVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgLyohPCBJMkMgSTJDX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9IU19BQ0tERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0JZVEVfQUNLREVUX1BvcyAoN1VMKSAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NCWVRFX0FDS0RFVCAoQml0IDcpICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0JZVEVfQUNLREVUX01zayAoMHg4MFVMKSAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NCWVRFX0FDS0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9IU19OT1JTVFJUX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfSFNfTk9SU1RSVCAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9IU19OT1JTVFJUX01zayAoMHgxMDBVTCkgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfSFNfTk9SU1RSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TQllURV9OT1JTVFJUX1BvcyAoOVVMKSAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0JZVEVfTk9SU1RSVCAoQml0IDkpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TQllURV9OT1JTVFJUX01zayAoMHgyMDBVTCkgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0JZVEVfTk9SU1RSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEJfUkRfTk9SU1RSVF9Qb3MgKDEwVUwpICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBCX1JEX05PUlNUUlQgKEJpdCAxMCkgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEJfUkRfTk9SU1RSVF9Nc2sgKDB4NDAwVUwpICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBCX1JEX05PUlNUUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfTUFTVEVSX0RJU19Qb3MgKDExVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX01BU1RFUl9ESVMgKEJpdCAxMSkgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfTUFTVEVSX0RJU19Nc2sgKDB4ODAwVUwpICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX01BU1RFUl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FSQl9MT1NUX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBUkJfTE9TVCAoQml0IDEyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FSQl9MT1NUX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBUkJfTE9TVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWRkxVU0hfVFhGSUZPX1BvcyAoMTNVTCkgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVkZMVVNIX1RYRklGTyAoQml0IDEzKSAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWRkxVU0hfVFhGSUZPX01zayAoMHgyMDAwVUwpICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVkZMVVNIX1RYRklGTyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TTFZfQVJCTE9TVF9Qb3MgKDE0VUwpICAgICAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWX0FSQkxPU1QgKEJpdCAxNCkgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TTFZfQVJCTE9TVF9Nc2sgKDB4NDAwMFVMKSAgICAgIC8qITwgSTJDIEkyQ19UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWX0FSQkxPU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWUkRfSU5UWF9Qb3MgKDE1VUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVlJEX0lOVFggKEJpdCAxNSkgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWUkRfSU5UWF9Nc2sgKDB4ODAwMFVMKSAgICAgICAvKiE8IEkyQyBJMkNfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVlJEX0lOVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0RNQV9DUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX0NSX1JFR19SRE1BRV9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX0NSX1JFRzogUkRNQUUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX0NSX1JFR19SRE1BRV9Nc2sgICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX0NSX1JFRzogUkRNQUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX0NSX1JFR19URE1BRV9Qb3MgICAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX0NSX1JFRzogVERNQUUgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX0NSX1JFR19URE1BRV9Nc2sgICAgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX0NSX1JFRzogVERNQUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfRE1BX1RETFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX1RETFJfUkVHX0RNQVRETF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX1RETFJfUkVHOiBETUFUREwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX1RETFJfUkVHX0RNQVRETF9Nc2sgICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX1RETFJfUkVHOiBETUFUREwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfRE1BX1JETFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX1JETFJfUkVHX0RNQVJETF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX1JETFJfUkVHOiBETUFSREwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRE1BX1JETFJfUkVHX0RNQVJETF9Nc2sgICAgICAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRE1BX1JETFJfUkVHOiBETUFSREwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfU0RBX1NFVFVQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfU0RBX1NFVFVQX1JFR19TREFfU0VUVVBfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfU0RBX1NFVFVQX1JFRzogU0RBX1NFVFVQIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfU0RBX1NFVFVQX1JFR19TREFfU0VUVVBfTXNrICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfU0RBX1NFVFVQX1JFRzogU0RBX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDX0kyQ19BQ0tfR0VORVJBTF9DQUxMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQUNLX0dFTkVSQUxfQ0FMTF9SRUdfQUNLX0dFTl9DQUxMX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQUNLX0dFTkVSQUxfQ0FMTF9SRUc6IEFDS19HRU5fQ0FMTCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQUNLX0dFTkVSQUxfQ0FMTF9SRUdfQUNLX0dFTl9DQUxMX01zayAoMHgxVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfQUNLX0dFTkVSQUxfQ0FMTF9SRUc6IEFDS19HRU5fQ0FMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19FTkFCTEVfU1RBVFVTX1JFR19JQ19FTl9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19FTkFCTEVfU1RBVFVTX1JFRzogSUNfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19FTkFCTEVfU1RBVFVTX1JFR19JQ19FTl9Nc2sgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19FTkFCTEVfU1RBVFVTX1JFRzogSUNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19FTkFCTEVfU1RBVFVTX1JFR19TTFZfRElTQUJMRURfV0hJTEVfQlVTWV9Qb3MgKDFVTCkgICAgIC8qITwgSTJDIEkyQ19FTkFCTEVfU1RBVFVTX1JFRzogU0xWX0RJU0FCTEVEX1dISUxFX0JVU1kgKEJpdCAxKSAgKi8KKyNkZWZpbmUgSTJDX0kyQ19FTkFCTEVfU1RBVFVTX1JFR19TTFZfRElTQUJMRURfV0hJTEVfQlVTWV9Nc2sgKDB4MlVMKSAgIC8qITwgSTJDIEkyQ19FTkFCTEVfU1RBVFVTX1JFRzogU0xWX0RJU0FCTEVEX1dISUxFX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUdfU0xWX1JYX0RBVEFfTE9TVF9Qb3MgKDJVTCkgICAgICAgICAgICAvKiE8IEkyQyBJMkNfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9SWF9EQVRBX0xPU1QgKEJpdCAyKSAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfRU5BQkxFX1NUQVRVU19SRUdfU0xWX1JYX0RBVEFfTE9TVF9Nc2sgKDB4NFVMKSAgICAgICAgICAvKiE8IEkyQyBJMkNfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9SWF9EQVRBX0xPU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0lDX0ZTX1NQS0xFTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfSUNfRlNfU1BLTEVOX1JFR19JQ19GU19TUEtMRU5fUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSUNfRlNfU1BLTEVOX1JFRzogSUNfRlNfU1BLTEVOIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfSUNfRlNfU1BLTEVOX1JFR19JQ19GU19TUEtMRU5fTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfSUNfRlNfU1BLTEVOX1JFRzogSUNfRlNfU1BLTEVOIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ09NUF9QQVJBTTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfUEFSQU0xX1JFR19JQ19DT01QX1BBUkFNMV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfUEFSQU0xX1JFRzogSUNfQ09NUF9QQVJBTTEgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfUEFSQU0xX1JFR19JQ19DT01QX1BBUkFNMV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfUEFSQU0xX1JFRzogSUNfQ09NUF9QQVJBTTEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NPTVBfUEFSQU0yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1BBUkFNMl9SRUdfSUNfQ09NUF9QQVJBTTJfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1BBUkFNMl9SRUc6IElDX0NPTVBfUEFSQU0yIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDX0kyQ19DT01QX1BBUkFNMl9SRUdfSUNfQ09NUF9QQVJBTTJfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgSTJDIEkyQ19DT01QX1BBUkFNMl9SRUc6IElDX0NPTVBfUEFSQU0yIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NPTVBfVkVSU0lPTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ09NUF9WRVJTSU9OX1JFR19JQ19DT01QX1ZFUlNJT05fUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09NUF9WRVJTSU9OX1JFRzogSUNfQ09NUF9WRVJTSU9OIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09NUF9WRVJTSU9OX1JFR19JQ19DT01QX1ZFUlNJT05fTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQyBJMkNfQ09NUF9WRVJTSU9OX1JFRzogSUNfQ09NUF9WRVJTSU9OIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ09NUDJfVkVSU0lPTiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQ19JMkNfQ09NUDJfVkVSU0lPTl9JQ19DT01QMl9WRVJTSU9OX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09NUDJfVkVSU0lPTjogSUNfQ09NUDJfVkVSU0lPTiAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQ19JMkNfQ09NUDJfVkVSU0lPTl9JQ19DT01QMl9WRVJTSU9OX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IEkyQyBJMkNfQ09NUDJfVkVSU0lPTjogSUNfQ09NUDJfVkVSU0lPTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkNfSTJDX0NPTVBfVFlQRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfVFlQRV9SRUdfSUNfQ09NUF9UWVBFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfVFlQRV9SRUc6IElDX0NPTVBfVFlQRSAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfVFlQRV9SRUdfSUNfQ09NUF9UWVBFX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfVFlQRV9SRUc6IElDX0NPTVBfVFlQRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQ19JMkNfQ09NUF9UWVBFMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfVFlQRTJfUkVHX0lDX0NPTVAyX1RZUEVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfVFlQRTJfUkVHOiBJQ19DT01QMl9UWVBFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkNfSTJDX0NPTVBfVFlQRTJfUkVHX0lDX0NPTVAyX1RZUEVfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgLyohPCBJMkMgSTJDX0NPTVBfVFlQRTJfUkVHOiBJQ19DT01QMl9UWVBFIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdJMkMyJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NPTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19NQVNURVJfTU9ERV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfTUFTVEVSX01PREUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19NQVNURVJfTU9ERV9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfTUFTVEVSX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19TUEVFRF9Qb3MgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfU1BFRUQgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19TUEVFRF9Nc2sgICAgICAgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfU1BFRUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ18xMEJJVEFERFJfU0xBVkVfUG9zICgzVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfMTBCSVRBRERSX1NMQVZFIChCaXQgMykgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ18xMEJJVEFERFJfU0xBVkVfTXNrICgweDhVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfMTBCSVRBRERSX1NMQVZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfMTBCSVRBRERSX01BU1RFUl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDXzEwQklUQUREUl9NQVNURVIgKEJpdCA0KSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09OX1JFR19JMkNfMTBCSVRBRERSX01BU1RFUl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09OX1JFRzogSTJDXzEwQklUQUREUl9NQVNURVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19SRVNUQVJUX0VOX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfUkVTVEFSVF9FTiAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19SRVNUQVJUX0VOX01zayAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfUkVTVEFSVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19TTEFWRV9ESVNBQkxFX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfU0xBVkVfRElTQUJMRSAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT05fUkVHX0kyQ19TTEFWRV9ESVNBQkxFX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT05fUkVHOiBJMkNfU0xBVkVfRElTQUJMRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1RBUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9UQVJfUkVHX0lDX1RBUl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UQVJfUkVHOiBJQ19UQVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UQVJfUkVHX0lDX1RBUl9Nc2sgICAgICAgICAgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UQVJfUkVHOiBJQ19UQVIgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UQVJfUkVHX0dDX09SX1NUQVJUX1BvcyAgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UQVJfUkVHOiBHQ19PUl9TVEFSVCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UQVJfUkVHX0dDX09SX1NUQVJUX01zayAgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UQVJfUkVHOiBHQ19PUl9TVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UQVJfUkVHX1NQRUNJQUxfUG9zICAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UQVJfUkVHOiBTUEVDSUFMIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UQVJfUkVHX1NQRUNJQUxfTXNrICAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UQVJfUkVHOiBTUEVDSUFMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1NBUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9TQVJfUkVHX0lDX1NBUl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TQVJfUkVHOiBJQ19TQVIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9TQVJfUkVHX0lDX1NBUl9Nc2sgICAgICAgICAgKDB4M2ZmVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TQVJfUkVHOiBJQ19TQVIgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0RBVEFfQ01EX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfREFUX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IERBVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfREFUX01zayAgICAgICAgKDB4ZmZVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IERBVCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfQ01EX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IENNRCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfQ01EX01zayAgICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IENNRCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfU1RPUF9Qb3MgICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IFNUT1AgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfU1RPUF9Nc2sgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IFNUT1AgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfUkVTVEFSVF9Qb3MgICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IFJFU1RBUlQgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9EQVRBX0NNRF9SRUdfUkVTVEFSVF9Nc2sgICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9EQVRBX0NNRF9SRUc6IFJFU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfU1NfU0NMX0hDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9TU19TQ0xfSENOVF9SRUdfSUNfU1NfU0NMX0hDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TU19TQ0xfSENOVF9SRUc6IElDX1NTX1NDTF9IQ05UIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9TU19TQ0xfSENOVF9SRUdfSUNfU1NfU0NMX0hDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TU19TQ0xfSENOVF9SRUc6IElDX1NTX1NDTF9IQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfU1NfU0NMX0xDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9TU19TQ0xfTENOVF9SRUdfSUNfU1NfU0NMX0xDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TU19TQ0xfTENOVF9SRUc6IElDX1NTX1NDTF9MQ05UIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9TU19TQ0xfTENOVF9SRUdfSUNfU1NfU0NMX0xDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9TU19TQ0xfTENOVF9SRUc6IElDX1NTX1NDTF9MQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfRlNfU0NMX0hDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9GU19TQ0xfSENOVF9SRUdfSUNfRlNfU0NMX0hDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9GU19TQ0xfSENOVF9SRUc6IElDX0ZTX1NDTF9IQ05UIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9GU19TQ0xfSENOVF9SRUdfSUNfRlNfU0NMX0hDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9GU19TQ0xfSENOVF9SRUc6IElDX0ZTX1NDTF9IQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfRlNfU0NMX0xDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9GU19TQ0xfTENOVF9SRUdfSUNfRlNfU0NMX0xDTlRfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9GU19TQ0xfTENOVF9SRUc6IElDX0ZTX1NDTF9MQ05UIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9GU19TQ0xfTENOVF9SRUdfSUNfRlNfU0NMX0xDTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9GU19TQ0xfTENOVF9SRUc6IElDX0ZTX1NDTF9MQ05UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0lOVFJfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfVU5ERVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX1VOREVSIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfVU5ERVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX1VOREVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfT1ZFUl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX09WRVIgKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfT1ZFUl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfRlVMTF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX0ZVTEwgKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfRlVMTF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX0ZVTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfVFhfT1ZFUl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1RYX09WRVIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfVFhfT1ZFUl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1RYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfVFhfRU1QVFlfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1RYX0VNUFRZIChCaXQgNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfVFhfRU1QVFlfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1RYX0VNUFRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUkRfUkVRX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JEX1JFUSAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUkRfUkVRX01zayAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JEX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfVFhfQUJSVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1RYX0FCUlQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfVFhfQUJSVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1RYX0FCUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfRE9ORV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX0RPTkUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfUlhfRE9ORV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1JYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfQUNUSVZJVFlfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX0FDVElWSVRZIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfQUNUSVZJVFlfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX0FDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfU1RPUF9ERVRfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1NUT1BfREVUIChCaXQgOSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfU1RPUF9ERVRfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1NUT1BfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfU1RBUlRfREVUX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1NUQVJUX0RFVCAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfU1RBUlRfREVUX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX1NUQVJUX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfR0VOX0NBTExfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX0dFTl9DQUxMIChCaXQgMTEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX1NUQVRfUkVHX1JfR0VOX0NBTExfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX1NUQVRfUkVHOiBSX0dFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0lOVFJfTUFTS19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfVU5ERVJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX1VOREVSIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfVU5ERVJfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX1VOREVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfT1ZFUl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX09WRVIgKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfT1ZFUl9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfRlVMTF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX0ZVTEwgKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfRlVMTF9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX0ZVTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fVFhfT1ZFUl9Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1RYX09WRVIgKEJpdCAzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fVFhfT1ZFUl9Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1RYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fVFhfRU1QVFlfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1RYX0VNUFRZIChCaXQgNCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fVFhfRU1QVFlfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1RYX0VNUFRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUkRfUkVRX1BvcyAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JEX1JFUSAoQml0IDUpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUkRfUkVRX01zayAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JEX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fVFhfQUJSVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1RYX0FCUlQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fVFhfQUJSVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1RYX0FCUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfRE9ORV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX0RPTkUgKEJpdCA3KSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fUlhfRE9ORV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1JYX0RPTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fQUNUSVZJVFlfUG9zICg4VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX0FDVElWSVRZIChCaXQgOCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fQUNUSVZJVFlfTXNrICgweDEwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX0FDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fU1RPUF9ERVRfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1NUT1BfREVUIChCaXQgOSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fU1RPUF9ERVRfTXNrICgweDIwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1NUT1BfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fU1RBUlRfREVUX1BvcyAoMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1NUQVJUX0RFVCAoQml0IDEwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fU1RBUlRfREVUX01zayAoMHg0MDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX1NUQVJUX0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fR0VOX0NBTExfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX0dFTl9DQUxMIChCaXQgMTEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JTlRSX01BU0tfUkVHX01fR0VOX0NBTExfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JTlRSX01BU0tfUkVHOiBNX0dFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9VTkRFUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfVU5ERVIgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9VTkRFUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfVU5ERVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9PVkVSX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfT1ZFUiAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9PVkVSX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9GVUxMX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfRlVMTCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9GVUxMX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfRlVMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19UWF9PVkVSX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogVFhfT1ZFUiAoQml0IDMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19UWF9PVkVSX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogVFhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19UWF9FTVBUWV9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogVFhfRU1QVFkgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19UWF9FTVBUWV9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogVFhfRU1QVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SRF9SRVFfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUkRfUkVRIChCaXQgNSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SRF9SRVFfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUkRfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19UWF9BQlJUX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogVFhfQUJSVCAoQml0IDYpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19UWF9BQlJUX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogVFhfQUJSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9ET05FX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfRE9ORSAoQml0IDcpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19SWF9ET05FX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogUlhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19BQ1RJVklUWV9Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogQUNUSVZJVFkgKEJpdCA4KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19BQ1RJVklUWV9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogQUNUSVZJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19TVE9QX0RFVF9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogU1RPUF9ERVQgKEJpdCA5KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19TVE9QX0RFVF9Nc2sgKDB4MjAwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogU1RPUF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19TVEFSVF9ERVRfUG9zICgxMFVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogU1RBUlRfREVUIChCaXQgMTApICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9SQVdfSU5UUl9TVEFUX1JFR19TVEFSVF9ERVRfTXNrICgweDQwMFVMKSAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9SQVdfSU5UUl9TVEFUX1JFRzogU1RBUlRfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfR0VOX0NBTExfUG9zICgxMVVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IEdFTl9DQUxMIChCaXQgMTEpICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUkFXX0lOVFJfU1RBVF9SRUdfR0VOX0NBTExfTXNrICgweDgwMFVMKSAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUkFXX0lOVFJfU1RBVF9SRUc6IEdFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1JYX1RMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfUlhfVExfUkVHX1JYX1RMX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUlhfVExfUkVHOiBSWF9UTCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUlhfVExfUkVHX1JYX1RMX01zayAgICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUlhfVExfUkVHOiBSWF9UTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1RYX1RMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfVExfUkVHX1RYX1RMX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfVExfUkVHOiBUWF9UTCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfVExfUkVHX1RYX1RMX01zayAgICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfVExfUkVHOiBUWF9UTCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfSU5UUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX0lOVFJfUkVHX0NMUl9JTlRSX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX0lOVFJfUkVHOiBDTFJfSU5UUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX0lOVFJfUkVHX0NMUl9JTlRSX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX0lOVFJfUkVHOiBDTFJfSU5UUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ0xSX1JYX1VOREVSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JYX1VOREVSX1JFR19DTFJfUlhfVU5ERVJfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JYX1VOREVSX1JFRzogQ0xSX1JYX1VOREVSIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JYX1VOREVSX1JFR19DTFJfUlhfVU5ERVJfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JYX1VOREVSX1JFRzogQ0xSX1JYX1VOREVSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9SWF9PVkVSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JYX09WRVJfUkVHX0NMUl9SWF9PVkVSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JYX09WRVJfUkVHOiBDTFJfUlhfT1ZFUiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JYX09WRVJfUkVHX0NMUl9SWF9PVkVSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JYX09WRVJfUkVHOiBDTFJfUlhfT1ZFUiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DTFJfVFhfT1ZFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9UWF9PVkVSX1JFR19DTFJfVFhfT1ZFUl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9UWF9PVkVSX1JFRzogQ0xSX1RYX09WRVIgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9UWF9PVkVSX1JFR19DTFJfVFhfT1ZFUl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9UWF9PVkVSX1JFRzogQ0xSX1RYX09WRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ0xSX1JEX1JFUV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfUkRfUkVRX1JFR19DTFJfUkRfUkVRX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfUkRfUkVRX1JFRzogQ0xSX1JEX1JFUSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfUkRfUkVRX1JFR19DTFJfUkRfUkVRX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfUkRfUkVRX1JFRzogQ0xSX1JEX1JFUSAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ0xSX1RYX0FCUlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfVFhfQUJSVF9SRUdfQ0xSX1RYX0FCUlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfVFhfQUJSVF9SRUc6IENMUl9UWF9BQlJUIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DTFJfVFhfQUJSVF9SRUdfQ0xSX1RYX0FCUlRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DTFJfVFhfQUJSVF9SRUc6IENMUl9UWF9BQlJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9SWF9ET05FX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JYX0RPTkVfUkVHX0NMUl9SWF9ET05FX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JYX0RPTkVfUkVHOiBDTFJfUlhfRE9ORSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX1JYX0RPTkVfUkVHX0NMUl9SWF9ET05FX01zayAoMHgxVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX1JYX0RPTkVfUkVHOiBDTFJfUlhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9BQ1RJVklUWV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9BQ1RJVklUWV9SRUdfQ0xSX0FDVElWSVRZX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9BQ1RJVklUWV9SRUc6IENMUl9BQ1RJVklUWSAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9BQ1RJVklUWV9SRUdfQ0xSX0FDVElWSVRZX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9BQ1RJVklUWV9SRUc6IENMUl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9TVE9QX0RFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9TVE9QX0RFVF9SRUdfQ0xSX0FDVElWSVRZX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9TVE9QX0RFVF9SRUc6IENMUl9BQ1RJVklUWSAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9TVE9QX0RFVF9SRUdfQ0xSX0FDVElWSVRZX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9TVE9QX0RFVF9SRUc6IENMUl9BQ1RJVklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NMUl9TVEFSVF9ERVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9TVEFSVF9ERVRfUkVHX0NMUl9TVEFSVF9ERVRfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9TVEFSVF9ERVRfUkVHOiBDTFJfU1RBUlRfREVUIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NMUl9TVEFSVF9ERVRfUkVHX0NMUl9TVEFSVF9ERVRfTXNrICgweDFVTCkgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NMUl9TVEFSVF9ERVRfUkVHOiBDTFJfU1RBUlRfREVUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ0xSX0dFTl9DQUxMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX0dFTl9DQUxMX1JFR19DTFJfR0VOX0NBTExfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX0dFTl9DQUxMX1JFRzogQ0xSX0dFTl9DQUxMIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ0xSX0dFTl9DQUxMX1JFR19DTFJfR0VOX0NBTExfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ0xSX0dFTl9DQUxMX1JFRzogQ0xSX0dFTl9DQUxMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfRU5BQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1JFR19DVFJMX0VOQUJMRV9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1JFRzogQ1RSTF9FTkFCTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1JFR19DVFJMX0VOQUJMRV9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1JFRzogQ1RSTF9FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19JMkNfQUNUSVZJVFlfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogSTJDX0FDVElWSVRZIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19JMkNfQUNUSVZJVFlfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogSTJDX0FDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19URk5GX1BvcyAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogVEZORiAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19URk5GX01zayAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogVEZORiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19URkVfUG9zICAgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogVEZFIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19URkVfTXNrICAgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogVEZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19SRk5FX1BvcyAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogUkZORSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19SRk5FX01zayAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogUkZORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19SRkZfUG9zICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogUkZGIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19SRkZfTXNrICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogUkZGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19NU1RfQUNUSVZJVFlfUG9zICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogTVNUX0FDVElWSVRZIChCaXQgNSkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19NU1RfQUNUSVZJVFlfTXNrICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogTVNUX0FDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19TTFZfQUNUSVZJVFlfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogU0xWX0FDVElWSVRZIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU1RBVFVTX1JFR19TTFZfQUNUSVZJVFlfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU1RBVFVTX1JFRzogU0xWX0FDVElWSVRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1RYRkxSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhGTFJfUkVHX1RYRkxSX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhGTFJfUkVHOiBUWEZMUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhGTFJfUkVHX1RYRkxSX01zayAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhGTFJfUkVHOiBUWEZMUiAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX1JYRkxSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfUlhGTFJfUkVHX1JYRkxSX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUlhGTFJfUkVHOiBSWEZMUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfUlhGTFJfUkVHX1JYRkxSX01zayAgICAgICAgICgweDNmVUwpICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfUlhGTFJfUkVHOiBSWEZMUiAoQml0ZmllbGQtTWFzazogMHgzZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9TREFfSE9MRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfU0RBX0hPTERfUkVHX0lDX1NEQV9IT0xEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU0RBX0hPTERfUkVHOiBJQ19TREFfSE9MRCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfU0RBX0hPTERfUkVHX0lDX1NEQV9IT0xEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfU0RBX0hPTERfUkVHOiBJQ19TREFfSE9MRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfN0JfQUREUl9OT0FDS19Qb3MgKDBVTCkgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzdCX0FERFJfTk9BQ0sgKEJpdCAwKSAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfN0JfQUREUl9OT0FDS19Nc2sgKDB4MVVMKSAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzdCX0FERFJfTk9BQ0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIxX05PQUNLX1BvcyAoMVVMKSAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMV9OT0FDSyAoQml0IDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF8xMEFERFIxX05PQUNLX01zayAoMHgyVUwpICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfMTBBRERSMV9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQUREUjJfTk9BQ0tfUG9zICgyVUwpICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEFERFIyX05PQUNLIChCaXQgMikgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUXzEwQUREUjJfTk9BQ0tfTXNrICgweDRVTCkgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF8xMEFERFIyX05PQUNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfVFhEQVRBX05PQUNLX1BvcyAoM1VMKSAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1RYREFUQV9OT0FDSyAoQml0IDMpICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfVFhEQVRBX05PQUNLX01zayAoMHg4VUwpICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1RYREFUQV9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX05PQUNLX1BvcyAoNFVMKSAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9OT0FDSyAoQml0IDQpICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX05PQUNLX01zayAoMHgxMFVMKSAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9OT0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX1JFQURfUG9zICg1VUwpICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9SRUFEIChCaXQgNSkgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX0dDQUxMX1JFQURfTXNrICgweDIwVUwpICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9HQ0FMTF9SRUFEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfSFNfQUNLREVUX1BvcyAoNlVMKSAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0hTX0FDS0RFVCAoQml0IDYpICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfSFNfQUNLREVUX01zayAoMHg0MFVMKSAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX0hTX0FDS0RFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NCWVRFX0FDS0RFVF9Qb3MgKDdVTCkgICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TQllURV9BQ0tERVQgKEJpdCA3KSAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NCWVRFX0FDS0RFVF9Nc2sgKDB4ODBVTCkgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TQllURV9BQ0tERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9IU19OT1JTVFJUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfSFNfTk9SU1RSVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9IU19OT1JTVFJUX01zayAoMHgxMDBVTCkgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfSFNfTk9SU1RSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NCWVRFX05PUlNUUlRfUG9zICg5VUwpICAgICAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TQllURV9OT1JTVFJUIChCaXQgOSkgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1RYX0FCUlRfU09VUkNFX1JFR19BQlJUX1NCWVRFX05PUlNUUlRfTXNrICgweDIwMFVMKSAgIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TQllURV9OT1JTVFJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfMTBCX1JEX05PUlNUUlRfUG9zICgxMFVMKSAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzEwQl9SRF9OT1JTVFJUIChCaXQgMTApICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfMTBCX1JEX05PUlNUUlRfTXNrICgweDQwMFVMKSAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUXzEwQl9SRF9OT1JTVFJUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfTUFTVEVSX0RJU19Qb3MgKDExVUwpICAgICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX01BU1RFUl9ESVMgKEJpdCAxMSkgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfTUFTVEVSX0RJU19Nc2sgKDB4ODAwVUwpICAgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX01BU1RFUl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQVJCX0xPU1RfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFSQl9MT1NUIChCaXQgMTIpICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQVJCX0xPU1RfTXNrICgweDEwMDBVTCkgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFSQl9MT1NUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWRkxVU0hfVFhGSUZPX1BvcyAoMTNVTCkgICAgLyohPCBJMkMyIEkyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHOiBBQlJUX1NMVkZMVVNIX1RYRklGTyAoQml0IDEzKSAqLworI2RlZmluZSBJMkMyX0kyQzJfVFhfQUJSVF9TT1VSQ0VfUkVHX0FCUlRfU0xWRkxVU0hfVFhGSUZPX01zayAoMHgyMDAwVUwpIC8qITwgSTJDMiBJMkMyX1RYX0FCUlRfU09VUkNFX1JFRzogQUJSVF9TTFZGTFVTSF9UWEZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TTFZfQVJCTE9TVF9Qb3MgKDE0VUwpICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWX0FSQkxPU1QgKEJpdCAxNCkgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TTFZfQVJCTE9TVF9Nc2sgKDB4NDAwMFVMKSAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWX0FSQkxPU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TTFZSRF9JTlRYX1BvcyAoMTVVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWUkRfSU5UWCAoQml0IDE1KSAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUdfQUJSVF9TTFZSRF9JTlRYX01zayAoMHg4MDAwVUwpICAgICAvKiE8IEkyQzIgSTJDMl9UWF9BQlJUX1NPVVJDRV9SRUc6IEFCUlRfU0xWUkRfSU5UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0RNQV9DUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9DUl9SRUdfUkRNQUVfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9DUl9SRUc6IFJETUFFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9DUl9SRUdfUkRNQUVfTXNrICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9DUl9SRUc6IFJETUFFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9DUl9SRUdfVERNQUVfUG9zICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9DUl9SRUc6IFRETUFFIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9DUl9SRUdfVERNQUVfTXNrICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9DUl9SRUc6IFRETUFFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfRE1BX1RETFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9URExSX1JFR19ETUFURExfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9URExSX1JFRzogRE1BVERMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9URExSX1JFR19ETUFURExfTXNrICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9URExSX1JFRzogRE1BVERMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfRE1BX1JETFJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9SRExSX1JFR19ETUFSRExfUG9zICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9SRExSX1JFRzogRE1BUkRMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0RNQV9SRExSX1JFR19ETUFSRExfTXNrICAgICAoMHgxZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0RNQV9SRExSX1JFRzogRE1BUkRMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfU0RBX1NFVFVQX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NEQV9TRVRVUF9SRUdfU0RBX1NFVFVQX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NEQV9TRVRVUF9SRUc6IFNEQV9TRVRVUCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX1NEQV9TRVRVUF9SRUdfU0RBX1NFVFVQX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX1NEQV9TRVRVUF9SRUc6IFNEQV9TRVRVUCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9BQ0tfR0VORVJBTF9DQUxMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0FDS19HRU5FUkFMX0NBTExfUkVHX0FDS19HRU5fQ0FMTF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0FDS19HRU5FUkFMX0NBTExfUkVHOiBBQ0tfR0VOX0NBTEwgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0FDS19HRU5FUkFMX0NBTExfUkVHX0FDS19HRU5fQ0FMTF9Nc2sgKDB4MVVMKSAgICAgICAgIC8qITwgSTJDMiBJMkMyX0FDS19HRU5FUkFMX0NBTExfUkVHOiBBQ0tfR0VOX0NBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9FTkFCTEVfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9FTkFCTEVfU1RBVFVTX1JFR19JQ19FTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9FTkFCTEVfU1RBVFVTX1JFRzogSUNfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9FTkFCTEVfU1RBVFVTX1JFR19JQ19FTl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9FTkFCTEVfU1RBVFVTX1JFRzogSUNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9FTkFCTEVfU1RBVFVTX1JFR19TTFZfRElTQUJMRURfV0hJTEVfQlVTWV9Qb3MgKDFVTCkgICAvKiE8IEkyQzIgSTJDMl9FTkFCTEVfU1RBVFVTX1JFRzogU0xWX0RJU0FCTEVEX1dISUxFX0JVU1kgKEJpdCAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUdfU0xWX0RJU0FCTEVEX1dISUxFX0JVU1lfTXNrICgweDJVTCkgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9ESVNBQkxFRF9XSElMRV9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUdfU0xWX1JYX0RBVEFfTE9TVF9Qb3MgKDJVTCkgICAgICAgICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9SWF9EQVRBX0xPU1QgKEJpdCAyKSAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfRU5BQkxFX1NUQVRVU19SRUdfU0xWX1JYX0RBVEFfTE9TVF9Nc2sgKDB4NFVMKSAgICAgICAgLyohPCBJMkMyIEkyQzJfRU5BQkxFX1NUQVRVU19SRUc6IFNMVl9SWF9EQVRBX0xPU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9JQ19GU19TUEtMRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9JQ19GU19TUEtMRU5fUkVHX0lDX0ZTX1NQS0xFTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JQ19GU19TUEtMRU5fUkVHOiBJQ19GU19TUEtMRU4gKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9JQ19GU19TUEtMRU5fUkVHX0lDX0ZTX1NQS0xFTl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9JQ19GU19TUEtMRU5fUkVHOiBJQ19GU19TUEtMRU4gKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ09NUF9QQVJBTTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1BBUkFNMV9SRUdfSUNfQ09NUF9QQVJBTTFfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1BBUkFNMV9SRUc6IElDX0NPTVBfUEFSQU0xIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1BBUkFNMV9SRUdfSUNfQ09NUF9QQVJBTTFfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1BBUkFNMV9SRUc6IElDX0NPTVBfUEFSQU0xIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ09NUF9QQVJBTTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1BBUkFNMl9SRUdfSUNfQ09NUF9QQVJBTTJfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1BBUkFNMl9SRUc6IElDX0NPTVBfUEFSQU0yIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1BBUkFNMl9SRUdfSUNfQ09NUF9QQVJBTTJfTXNrICgweGZmZmZVTCkgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1BBUkFNMl9SRUc6IElDX0NPTVBfUEFSQU0yIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEkyQzJfSTJDMl9DT01QX1ZFUlNJT05fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1ZFUlNJT05fUkVHX0lDX0NPTVBfVkVSU0lPTl9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1ZFUlNJT05fUkVHOiBJQ19DT01QX1ZFUlNJT04gKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIEkyQzJfSTJDMl9DT01QX1ZFUlNJT05fUkVHX0lDX0NPTVBfVkVSU0lPTl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAvKiE8IEkyQzIgSTJDMl9DT01QX1ZFUlNJT05fUkVHOiBJQ19DT01QX1ZFUlNJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ09NUDJfVkVSU0lPTiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTVAyX1ZFUlNJT05fSUNfQ09NUDJfVkVSU0lPTl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTVAyX1ZFUlNJT046IElDX0NPTVAyX1ZFUlNJT04gKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTVAyX1ZFUlNJT05fSUNfQ09NUDJfVkVSU0lPTl9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTVAyX1ZFUlNJT046IElDX0NPTVAyX1ZFUlNJT04gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMkMyX0kyQzJfQ09NUF9UWVBFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTVBfVFlQRV9SRUdfSUNfQ09NUF9UWVBFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTVBfVFlQRV9SRUc6IElDX0NPTVBfVFlQRSAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSTJDMl9JMkMyX0NPTVBfVFlQRV9SRUdfSUNfQ09NUF9UWVBFX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgIC8qITwgSTJDMiBJMkMyX0NPTVBfVFlQRV9SRUc6IElDX0NPTVBfVFlQRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSTJDMl9JMkMyX0NPTVBfVFlQRTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9UWVBFMl9SRUdfSUNfQ09NUDJfVFlQRV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9UWVBFMl9SRUc6IElDX0NPTVAyX1RZUEUgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBJMkMyX0kyQzJfQ09NUF9UWVBFMl9SRUdfSUNfQ09NUDJfVFlQRV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBJMkMyIEkyQzJfQ09NUF9UWVBFMl9SRUc6IElDX0NPTVAyX1RZUEUgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICAgc3RydWN0ICdJUicgUG9zaXRpb24gJiBNYXNrICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIElSX0lSX0ZSRVFfQ0FSUklFUl9PTl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfRlJFUV9DQVJSSUVSX09OX1JFR19JUl9GUkVRX0NBUlJJRVJfT05fUG9zICgwVUwpICAgICAgICAgIC8qITwgSVIgSVJfRlJFUV9DQVJSSUVSX09OX1JFRzogSVJfRlJFUV9DQVJSSUVSX09OIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfRlJFUV9DQVJSSUVSX09OX1JFR19JUl9GUkVRX0NBUlJJRVJfT05fTXNrICgweDNmZlVMKSAgICAgIC8qITwgSVIgSVJfRlJFUV9DQVJSSUVSX09OX1JFRzogSVJfRlJFUV9DQVJSSUVSX09OIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSVJfSVJfRlJFUV9DQVJSSUVSX09GRl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfRlJFUV9DQVJSSUVSX09GRl9SRUdfSVJfRlJFUV9DQVJSSUVSX09GRl9Qb3MgKDBVTCkgICAgICAgIC8qITwgSVIgSVJfRlJFUV9DQVJSSUVSX09GRl9SRUc6IElSX0ZSRVFfQ0FSUklFUl9PRkYgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgSVJfSVJfRlJFUV9DQVJSSUVSX09GRl9SRUdfSVJfRlJFUV9DQVJSSUVSX09GRl9Nc2sgKDB4M2ZmVUwpICAgIC8qITwgSVIgSVJfRlJFUV9DQVJSSUVSX09GRl9SRUc6IElSX0ZSRVFfQ0FSUklFUl9PRkYgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSVJfSVJfTE9HSUNfT05FX1RJTUVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9MT0dJQ19PTkVfVElNRV9SRUdfSVJfTE9HSUNfT05FX1NQQUNFX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBJUiBJUl9MT0dJQ19PTkVfVElNRV9SRUc6IElSX0xPR0lDX09ORV9TUEFDRSAoQml0IDApICAgICAgICAqLworI2RlZmluZSBJUl9JUl9MT0dJQ19PTkVfVElNRV9SRUdfSVJfTE9HSUNfT05FX1NQQUNFX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBJUiBJUl9MT0dJQ19PTkVfVElNRV9SRUc6IElSX0xPR0lDX09ORV9TUEFDRSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfT05FX1RJTUVfUkVHX0lSX0xPR0lDX09ORV9NQVJLX1BvcyAoOFVMKSAgICAgICAgICAgIC8qITwgSVIgSVJfTE9HSUNfT05FX1RJTUVfUkVHOiBJUl9MT0dJQ19PTkVfTUFSSyAoQml0IDgpICAgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfT05FX1RJTUVfUkVHX0lSX0xPR0lDX09ORV9NQVJLX01zayAoMHhmZjAwVUwpICAgICAgIC8qITwgSVIgSVJfTE9HSUNfT05FX1RJTUVfUkVHOiBJUl9MT0dJQ19PTkVfTUFSSyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIElSX0lSX0xPR0lDX1pFUk9fVElNRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfWkVST19USU1FX1JFR19JUl9MT0dJQ19aRVJPX1NQQUNFX1BvcyAoMFVMKSAgICAgICAgIC8qITwgSVIgSVJfTE9HSUNfWkVST19USU1FX1JFRzogSVJfTE9HSUNfWkVST19TUEFDRSAoQml0IDApICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfWkVST19USU1FX1JFR19JUl9MT0dJQ19aRVJPX1NQQUNFX01zayAoMHhmZlVMKSAgICAgIC8qITwgSVIgSVJfTE9HSUNfWkVST19USU1FX1JFRzogSVJfTE9HSUNfWkVST19TUEFDRSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfWkVST19USU1FX1JFR19JUl9MT0dJQ19aRVJPX01BUktfUG9zICg4VUwpICAgICAgICAgIC8qITwgSVIgSVJfTE9HSUNfWkVST19USU1FX1JFRzogSVJfTE9HSUNfWkVST19NQVJLIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgSVJfSVJfTE9HSUNfWkVST19USU1FX1JFR19JUl9MT0dJQ19aRVJPX01BUktfTXNrICgweGZmMDBVTCkgICAgIC8qITwgSVIgSVJfTE9HSUNfWkVST19USU1FX1JFRzogSVJfTE9HSUNfWkVST19NQVJLIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9DT0RFX0ZJRk9fUkVTRVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfQ09ERV9GSUZPX1JFU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9DT0RFX0ZJRk9fUkVTRVRfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfQ09ERV9GSUZPX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9SRVBfRklGT19SRVNFVF9Qb3MgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfUkVQX0ZJRk9fUkVTRVQgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9SRVBfRklGT19SRVNFVF9Nc2sgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfUkVQX0ZJRk9fUkVTRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9FTkFCTEVfUG9zICAgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfRU5BQkxFIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9FTkFCTEVfTXNrICAgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9UWF9TVEFSVF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfVFhfU1RBUlQgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9UWF9TVEFSVF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfVFhfU1RBUlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9SRVBFQVRfVFlQRV9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfUkVQRUFUX1RZUEUgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9SRVBFQVRfVFlQRV9Nc2sgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfUkVQRUFUX1RZUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9JTlZFUlRfT1VUUFVUX1BvcyAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfSU5WRVJUX09VVFBVVCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9JTlZFUlRfT1VUUFVUX01zayAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfSU5WRVJUX09VVFBVVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9MT0dJQ19aRVJPX0ZPUk1BVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfTE9HSUNfWkVST19GT1JNQVQgKEJpdCA2KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9MT0dJQ19aRVJPX0ZPUk1BVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfTE9HSUNfWkVST19GT1JNQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9MT0dJQ19PTkVfRk9STUFUX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfTE9HSUNfT05FX0ZPUk1BVCAoQml0IDcpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9MT0dJQ19PTkVfRk9STUFUX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfTE9HSUNfT05FX0ZPUk1BVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9JUlFfRU5fUG9zICAgICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfSVJRX0VOIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9DVFJMX1JFR19JUl9JUlFfRU5fTXNrICAgICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9DVFJMX1JFRzogSVJfSVJRX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIElSX0lSX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9TVEFUVVNfUkVHX0lSX0NPREVfRklGT19XUkRTX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9TVEFUVVNfUkVHOiBJUl9DT0RFX0ZJRk9fV1JEUyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9TVEFUVVNfUkVHX0lSX0NPREVfRklGT19XUkRTX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9TVEFUVVNfUkVHOiBJUl9DT0RFX0ZJRk9fV1JEUyAoQml0ZmllbGQtTWFzazogMHgzZikgICAqLworI2RlZmluZSBJUl9JUl9TVEFUVVNfUkVHX0lSX1JFUF9GSUZPX1dSRFNfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9TVEFUVVNfUkVHOiBJUl9SRVBfRklGT19XUkRTIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9TVEFUVVNfUkVHX0lSX1JFUF9GSUZPX1dSRFNfTXNrICgweDNjMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9TVEFUVVNfUkVHOiBJUl9SRVBfRklGT19XUkRTIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAqLworI2RlZmluZSBJUl9JUl9TVEFUVVNfUkVHX0lSX0JVU1lfUG9zICAgICAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9TVEFUVVNfUkVHOiBJUl9CVVNZIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9TVEFUVVNfUkVHX0lSX0JVU1lfTXNrICAgICAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9TVEFUVVNfUkVHOiBJUl9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9SRVBFQVRfVElNRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9SRVBFQVRfVElNRV9SRUdfSVJfUkVQRUFUX1RJTUVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9SRVBFQVRfVElNRV9SRUc6IElSX1JFUEVBVF9USU1FIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9SRVBFQVRfVElNRV9SRUdfSVJfUkVQRUFUX1RJTUVfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgLyohPCBJUiBJUl9SRVBFQVRfVElNRV9SRUc6IElSX1JFUEVBVF9USU1FIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9NQUlOX0ZJRk9fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIElSX0lSX01BSU5fRklGT19SRUdfSVJfQ09ERV9GSUZPX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IElSIElSX01BSU5fRklGT19SRUc6IElSX0NPREVfRklGT19EQVRBIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIElSX0lSX01BSU5fRklGT19SRUdfSVJfQ09ERV9GSUZPX0RBVEFfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAvKiE8IElSIElSX01BSU5fRklGT19SRUc6IElSX0NPREVfRklGT19EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIElSX0lSX1JFUEVBVF9GSUZPX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIElSX0lSX1JFUEVBVF9GSUZPX1JFR19JUl9SRVBFQVRfRklGT19EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IElSIElSX1JFUEVBVF9GSUZPX1JFRzogSVJfUkVQRUFUX0ZJRk9fREFUQSAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIElSX0lSX1JFUEVBVF9GSUZPX1JFR19JUl9SRVBFQVRfRklGT19EQVRBX01zayAoMHhmZmZmVUwpICAgICAgICAvKiE8IElSIElSX1JFUEVBVF9GSUZPX1JFRzogSVJfUkVQRUFUX0ZJRk9fREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJUl9JUl9JUlFfU1RBVFVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBJUl9JUl9JUlFfU1RBVFVTX1JFR19JUl9JUlFfQUNLX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9JUlFfU1RBVFVTX1JFRzogSVJfSVJRX0FDSyAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJUl9JUl9JUlFfU1RBVFVTX1JFR19JUl9JUlFfQUNLX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBJUiBJUl9JUlFfU1RBVFVTX1JFRzogSVJfSVJRX0FDSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdLQlNDQU4nIFBvc2l0aW9uICYgTWFzayAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBLQlNDQU5fS0JTQ05fQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fRU5fUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0VOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fRU5fTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSVJRX01FU1NBR0VfTUFTS19Qb3MgKDFVTCkgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lSUV9NRVNTQUdFX01BU0sgKEJpdCAxKSAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSVJRX01FU1NBR0VfTUFTS19Nc2sgKDB4MlVMKSAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lSUV9NRVNTQUdFX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMX1JFR19LQlNDTl9JUlFfSU5BQ1RJVkVfTUFTS19Qb3MgKDJVTCkgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMX1JFRzogS0JTQ05fSVJRX0lOQUNUSVZFX01BU0sgKEJpdCAyKSAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMX1JFR19LQlNDTl9JUlFfSU5BQ1RJVkVfTUFTS19Nc2sgKDB4NFVMKSAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMX1JFRzogS0JTQ05fSVJRX0lOQUNUSVZFX01BU0sgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMX1JFR19LQlNDTl9JUlFfRklGT19NQVNLX1BvcyAoM1VMKSAgICAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMX1JFRzogS0JTQ05fSVJRX0ZJRk9fTUFTSyAoQml0IDMpICAgICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMX1JFR19LQlNDTl9JUlFfRklGT19NQVNLX01zayAoMHg4VUwpICAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMX1JFRzogS0JTQ05fSVJRX0ZJRk9fTUFTSyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0lOQUNUSVZFX1RJTUVfUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9JTkFDVElWRV9USU1FIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX0NUUkxfUkVHX0tCU0NOX0lOQUNUSVZFX1RJTUVfTXNrICgweDdmMFVMKSAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX0NUUkxfUkVHOiBLQlNDTl9JTkFDVElWRV9USU1FIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSU5BQ1RJVkVfRU5fUG9zICgxMVVMKSAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lOQUNUSVZFX0VOIChCaXQgMTEpICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fSU5BQ1RJVkVfRU5fTXNrICgweDgwMFVMKSAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0lOQUNUSVZFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fQ0xLRElWX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0NMS0RJViAoQml0IDEyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fQ0xLRElWX01zayAoMHgzMDAwVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX0NMS0RJViAoQml0ZmllbGQtTWFzazogMHgwMykgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fUkVTRVRfRklGT19Qb3MgKDE0VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX1JFU0VUX0ZJRk8gKEJpdCAxNCkgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fQ1RSTF9SRUdfS0JTQ05fUkVTRVRfRklGT19Nc2sgKDB4NDAwMFVMKSAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fQ1RSTF9SRUc6IEtCU0NOX1JFU0VUX0ZJRk8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMMl9SRUdfS0JTQ05fUk9XX0FDVElWRV9USU1FX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMMl9SRUc6IEtCU0NOX1JPV19BQ1RJVkVfVElNRSAoQml0IDApICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9DVFJMMl9SRUdfS0JTQ05fUk9XX0FDVElWRV9USU1FX01zayAoMHhmZmZmVUwpICAgICAvKiE8IEtCU0NBTiBLQlNDTl9DVFJMMl9SRUc6IEtCU0NOX1JPV19BQ1RJVkVfVElNRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9NQVRSSVhfU0laRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUFUUklYX1NJWkVfUkVHX0tCU0NOX01BVFJJWF9ST1dfUG9zICgwVUwpICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUFUUklYX1NJWkVfUkVHOiBLQlNDTl9NQVRSSVhfUk9XIChCaXQgMCkgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUFUUklYX1NJWkVfUkVHX0tCU0NOX01BVFJJWF9ST1dfTXNrICgweGZVTCkgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUFUUklYX1NJWkVfUkVHOiBLQlNDTl9NQVRSSVhfUk9XIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUFUUklYX1NJWkVfUkVHX0tCU0NOX01BVFJJWF9DT0xVTU5fUG9zICg0VUwpICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUFUUklYX1NJWkVfUkVHOiBLQlNDTl9NQVRSSVhfQ09MVU1OIChCaXQgNCkgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUFUUklYX1NJWkVfUkVHX0tCU0NOX01BVFJJWF9DT0xVTU5fTXNrICgweDFmMFVMKSAgLyohPCBLQlNDQU4gS0JTQ05fTUFUUklYX1NJWkVfUkVHOiBLQlNDTl9NQVRSSVhfQ09MVU1OIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX0RFQk9VTkNFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fREVCT1VOQ0VfUkVHX0tCU0NOX0RFQk9VTkNFX1JFTEVBU0VfVElNRV9Qb3MgKDBVTCkgLyohPCBLQlNDQU4gS0JTQ05fREVCT1VOQ0VfUkVHOiBLQlNDTl9ERUJPVU5DRV9SRUxFQVNFX1RJTUUgKEJpdCAwKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fREVCT1VOQ0VfUkVHX0tCU0NOX0RFQk9VTkNFX1JFTEVBU0VfVElNRV9Nc2sgKDB4M2ZVTCkgLyohPCBLQlNDQU4gS0JTQ05fREVCT1VOQ0VfUkVHOiBLQlNDTl9ERUJPVU5DRV9SRUxFQVNFX1RJTUUgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9ERUJPVU5DRV9SRUdfS0JTQ05fREVCT1VOQ0VfUFJFU1NfVElNRV9Qb3MgKDZVTCkgICAvKiE8IEtCU0NBTiBLQlNDTl9ERUJPVU5DRV9SRUc6IEtCU0NOX0RFQk9VTkNFX1BSRVNTX1RJTUUgKEJpdCA2KSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fREVCT1VOQ0VfUkVHX0tCU0NOX0RFQk9VTkNFX1BSRVNTX1RJTUVfTXNrICgweGZjMFVMKSAvKiE8IEtCU0NBTiBLQlNDTl9ERUJPVU5DRV9SRUc6IEtCU0NOX0RFQk9VTkNFX1BSRVNTX1RJTUUgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX01FU19JUlFfU1RBVFVTX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9NRVNfSVJRX1NUQVRVUyAoQml0IDApICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX01FU19JUlFfU1RBVFVTX01zayAoMHgxVUwpICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9NRVNfSVJRX1NUQVRVUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUdfS0JTQ05fSU5BQ1RJVkVfSVJRX1NUQVRVU19Qb3MgKDFVTCkgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1NUQVRVU19SRUc6IEtCU0NOX0lOQUNUSVZFX0lSUV9TVEFUVVMgKEJpdCAxKSAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUdfS0JTQ05fSU5BQ1RJVkVfSVJRX1NUQVRVU19Nc2sgKDB4MlVMKSAgIC8qITwgS0JTQ0FOIEtCU0NOX1NUQVRVU19SRUc6IEtCU0NOX0lOQUNUSVZFX0lSUV9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX05VTV9NRVNTQUdFX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9OVU1fTUVTU0FHRSAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9TVEFUVVNfUkVHX0tCU0NOX05VTV9NRVNTQUdFX01zayAoMHg3Y1VMKSAgICAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9TVEFUVVNfUkVHOiBLQlNDTl9OVU1fTUVTU0FHRSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUdfS0JTQ05fRklGT19PVkVSRkxfUG9zICg3VUwpICAgICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1NUQVRVU19SRUc6IEtCU0NOX0ZJRk9fT1ZFUkZMIChCaXQgNykgICAgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX1NUQVRVU19SRUdfS0JTQ05fRklGT19PVkVSRkxfTXNrICgweDgwVUwpICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX1NUQVRVU19SRUc6IEtCU0NOX0ZJRk9fT1ZFUkZMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fU1RBVFVTX1JFR19LQlNDTl9GSUZPX1VOREVSRkxfUG9zICg4VUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fU1RBVFVTX1JFRzogS0JTQ05fRklGT19VTkRFUkZMIChCaXQgOCkgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fU1RBVFVTX1JFR19LQlNDTl9GSUZPX1VOREVSRkxfTXNrICgweDEwMFVMKSAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fU1RBVFVTX1JFRzogS0JTQ05fRklGT19VTkRFUkZMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEtCU0NBTl9LQlNDTl9NRVNTQUdFX0tFWV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHX0tCU0NOX0tFWUlEX1JPV19Qb3MgKDBVTCkgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUVTU0FHRV9LRVlfUkVHOiBLQlNDTl9LRVlJRF9ST1cgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHX0tCU0NOX0tFWUlEX1JPV19Nc2sgKDB4ZlVMKSAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUVTU0FHRV9LRVlfUkVHOiBLQlNDTl9LRVlJRF9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9NRVNTQUdFX0tFWV9SRUdfS0JTQ05fS0VZSURfQ09MVU1OX1BvcyAoNFVMKSAgICAgICAvKiE8IEtCU0NBTiBLQlNDTl9NRVNTQUdFX0tFWV9SRUc6IEtCU0NOX0tFWUlEX0NPTFVNTiAoQml0IDQpICAgICovCisjZGVmaW5lIEtCU0NBTl9LQlNDTl9NRVNTQUdFX0tFWV9SRUdfS0JTQ05fS0VZSURfQ09MVU1OX01zayAoMHgxZjBVTCkgICAvKiE8IEtCU0NBTiBLQlNDTl9NRVNTQUdFX0tFWV9SRUc6IEtCU0NOX0tFWUlEX0NPTFVNTiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01FU1NBR0VfS0VZX1JFR19LQlNDTl9LRVlfU1RBVEVfUG9zICg5VUwpICAgICAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01FU1NBR0VfS0VZX1JFRzogS0JTQ05fS0VZX1NUQVRFIChCaXQgOSkgICAgICAgKi8KKyNkZWZpbmUgS0JTQ0FOX0tCU0NOX01FU1NBR0VfS0VZX1JFR19LQlNDTl9LRVlfU1RBVEVfTXNrICgweDIwMFVMKSAgICAgIC8qITwgS0JTQ0FOIEtCU0NOX01FU1NBR0VfS0VZX1JFRzogS0JTQ05fS0VZX1NUQVRFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHX0tCU0NOX0xBU1RfRU5UUllfUG9zICgxMFVMKSAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUVTU0FHRV9LRVlfUkVHOiBLQlNDTl9MQVNUX0VOVFJZIChCaXQgMTApICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fTUVTU0FHRV9LRVlfUkVHX0tCU0NOX0xBU1RfRU5UUllfTXNrICgweDQwMFVMKSAgICAgLyohPCBLQlNDQU4gS0JTQ05fTUVTU0FHRV9LRVlfUkVHOiBLQlNDTl9MQVNUX0VOVFJZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwMF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAwX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAwX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAwX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAwX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwMV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAxX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAxX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAxX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAxX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwMl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAyX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAyX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAyX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAyX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwM19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAzX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAzX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAzX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAzX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDAzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDAzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwNF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA0X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA0X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA0X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA0X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwNV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA1X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA1X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA1X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA1X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwNl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA2X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA2X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA2X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA2X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AwN19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA3X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA3X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA3X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA3X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDA3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDA3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxMF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEwX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEwX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEwX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEwX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxMV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDExX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDExX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDExX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDExX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDExX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDExX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDExX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDExX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDExX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDExX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDExX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDExX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxMl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEyX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEyX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEyX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEyX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxM19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEzX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEzX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEzX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEzX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDEzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDEzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxNF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE0X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE0X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE0X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE0X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxNV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE1X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE1X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE1X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE1X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxNl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE2X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE2X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE2X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE2X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AxN19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE3X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE3X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE3X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE3X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDE3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDE3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AyMF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIwX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIwX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIwX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIwX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AyMV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIxX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIxX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIxX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIxX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AyMl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIyX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIyX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIyX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIyX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AyM19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIzX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIzX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIzX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIzX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDIzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDIzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AyNF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDI0X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDI0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDI0X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDI0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDI0X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDI0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDI0X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDI0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDI0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDI0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDI0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDI0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzMF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMwX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMwX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMwX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMwX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzMV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMxX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMxX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMxX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMxX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzMl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMyX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMyX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMyX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMyX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzM19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMzX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMzX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMzX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMzX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDMzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDMzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzNF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM0X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM0X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM0X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM0X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzNV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM1X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM1X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM1X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM1X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzNl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM2X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM2X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM2X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM2X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1AzN19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM3X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM3X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM3X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM3X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDM3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDM3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0MF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQwX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQwX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQwX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQwX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQwX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQwX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQwX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQwX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0MV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQxX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQxX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQxX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQxX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQxX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQxX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQxX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQxX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0Ml9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQyX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQyX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQyX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQyX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQyX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQyX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQyX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQyX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0M19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQzX01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQzX01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQzX01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQzX01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQzX01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQzX01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQzX01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQzX01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0NF9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ0X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ0X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ0X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ0X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ0X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ0X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ0X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ0X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0NV9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ1X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ1X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ1X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ1X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ1X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ1X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ1X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ1X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0Nl9NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ2X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ2X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ2X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ2X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ2X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ2X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ2X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ2X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgS0JTQ0FOX0tCU0NOX1A0N19NT0RFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ3X01PREVfUkVHX0tCU0NOX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ3X01PREVfUkVHX0tCU0NOX01PREVfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ3X01PREVfUkVHOiBLQlNDTl9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ3X01PREVfUkVHX0tCU0NOX1JPV19Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ3X01PREVfUkVHX0tCU0NOX1JPV19Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ3X01PREVfUkVHOiBLQlNDTl9ST1cgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBLQlNDQU5fS0JTQ05fUDQ3X01PREVfUkVHX0tCU0NOX0dQSU9fRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBLQlNDQU4gS0JTQ05fUDQ3X01PREVfUkVHOiBLQlNDTl9HUElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnT1RQQycgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX01PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX01PREVfTXNrICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX1VTRV9ETUFfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9VU0VfRE1BIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX1VTRV9ETUFfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9VU0VfRE1BIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX0ZJRk9fRkxVU0hfUG9zICg1VUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9GSUZPX0ZMVVNIIChCaXQgNSkgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX0ZJRk9fRkxVU0hfTXNrICgweDIwVUwpICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9GSUZPX0ZMVVNIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX0VSUl9SRVNQX0RJU19Qb3MgKDZVTCkgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9FUlJfUkVTUF9ESVMgKEJpdCA2KSAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX0VSUl9SRVNQX0RJU19Nc2sgKDB4NDBVTCkgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9FUlJfUkVTUF9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIE9UUENfT1RQQ19NT0RFX1JFR19PVFBDX01PREVfVVNFX1NQX1JPV1NfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19NT0RFX1JFRzogT1RQQ19NT0RFX1VTRV9TUF9ST1dTIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19NT0RFX1JFR19PVFBDX01PREVfVVNFX1NQX1JPV1NfTXNrICgweDEwMFVMKSAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19NT0RFX1JFRzogT1RQQ19NT0RFX1VTRV9TUF9ST1dTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX1JMRF9SUl9SRVFfUG9zICg5VUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9STERfUlJfUkVRIChCaXQgOSkgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfTU9ERV9SRUdfT1RQQ19NT0RFX1JMRF9SUl9SRVFfTXNrICgweDIwMFVMKSAgICAgICAgICAgLyohPCBPVFBDIE9UUENfTU9ERV9SRUc6IE9UUENfTU9ERV9STERfUlJfUkVRIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX1BDVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBPVFBDX09UUENfUENUUkxfUkVHX09UUENfUENUUkxfV0FERFJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUENUUkxfUkVHOiBPVFBDX1BDVFJMX1dBRERSIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfUENUUkxfUkVHX09UUENfUENUUkxfV0FERFJfTXNrICgweDFmZmZVTCkgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUENUUkxfUkVHOiBPVFBDX1BDVFJMX1dBRERSIChCaXRmaWVsZC1NYXNrOiAweDFmZmYpICovCisjZGVmaW5lIE9UUENfT1RQQ19QQ1RSTF9SRUdfT1RQQ19QQ1RSTF9QUkVUUllfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19QQ1RSTF9SRUc6IE9UUENfUENUUkxfUFJFVFJZIChCaXQgMTQpICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19QQ1RSTF9SRUdfT1RQQ19QQ1RSTF9QUkVUUllfTXNrICgweDQwMDBVTCkgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19QQ1RSTF9SRUc6IE9UUENfUENUUkxfUFJFVFJZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfUENUUkxfUkVHX09UUENfUENUUkxfUFNUQVJUX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUENUUkxfUkVHOiBPVFBDX1BDVFJMX1BTVEFSVCAoQml0IDE1KSAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfUENUUkxfUkVHX09UUENfUENUUkxfUFNUQVJUX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUENUUkxfUkVHOiBPVFBDX1BDVFJMX1BTVEFSVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9QUkRZX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUFJEWSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9QUkRZX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUFJEWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9QRVJSX1VOQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUEVSUl9VTkMgKEJpdCAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1NUQVRfUkVHX09UUENfU1RBVF9QRVJSX1VOQ19Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1NUQVRfUkVHOiBPVFBDX1NUQVRfUEVSUl9VTkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIE9UUENfT1RQQ19TVEFUX1JFR19PVFBDX1NUQVRfUEVSUl9DT1JfUG9zICgyVUwpICAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19TVEFUX1JFRzogT1RQQ19TVEFUX1BFUlJfQ09SIChCaXQgMikgICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19TVEFUX1JFR19PVFBDX1NUQVRfUEVSUl9DT1JfTXNrICgweDRVTCkgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19TVEFUX1JFRzogT1RQQ19TVEFUX1BFUlJfQ09SIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1BaRVJPX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9QWkVSTyAoQml0IDMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1BaRVJPX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9QWkVSTyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1RSRFlfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9UUkRZIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1RSRFlfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9UUkRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1RFUlJPUl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9URVJST1IgKEJpdCA1KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1RFUlJPUl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9URVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX0FSRFlfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9BUkRZIChCaXQgNikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX0FSRFlfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9BUkRZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1JFUlJPUl9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9SRVJST1IgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX1JFUlJPUl9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9SRVJST1IgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX0ZXT1JEU19Qb3MgKDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9GV09SRFMgKEJpdCA4KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX0ZXT1JEU19Nc2sgKDB4ZjAwVUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9GV09SRFMgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX05XT1JEU19Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9OV09SRFMgKEJpdCAxNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfU1RBVF9SRUdfT1RQQ19TVEFUX05XT1JEU19Nc2sgKDB4M2ZmZjAwMDBVTCkgICAgICAgICAgLyohPCBPVFBDIE9UUENfU1RBVF9SRUc6IE9UUENfU1RBVF9OV09SRFMgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX0FIQkFEUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0FIQkFEUl9SRUdfT1RQQ19BSEJBRFJfUG9zICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0FIQkFEUl9SRUc6IE9UUENfQUhCQURSIChCaXQgMikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0FIQkFEUl9SRUdfT1RQQ19BSEJBRFJfTXNrICAoMHhmZmZmZmZmY1VMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0FIQkFEUl9SRUc6IE9UUENfQUhCQURSIChCaXRmaWVsZC1NYXNrOiAweDNmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfQ0VMQURSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBPVFBDX09UUENfQ0VMQURSX1JFR19PVFBDX0NFTEFEUl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfQ0VMQURSX1JFRzogT1RQQ19DRUxBRFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfQ0VMQURSX1JFR19PVFBDX0NFTEFEUl9Nc2sgICgweDNmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfQ0VMQURSX1JFRzogT1RQQ19DRUxBRFIgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgICAqLworI2RlZmluZSBPVFBDX09UUENfQ0VMQURSX1JFR19PVFBDX0NFTEFEUl9MVl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfQ0VMQURSX1JFRzogT1RQQ19DRUxBRFJfTFYgKEJpdCAxNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfQ0VMQURSX1JFR19PVFBDX0NFTEFEUl9MVl9Nc2sgKDB4M2ZmZjAwMDBVTCkgICAgICAgICAgLyohPCBPVFBDIE9UUENfQ0VMQURSX1JFRzogT1RQQ19DRUxBRFJfTFYgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX05XT1JEU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX05XT1JEU19SRUdfT1RQQ19OV09SRFNfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX05XT1JEU19SRUc6IE9UUENfTldPUkRTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX05XT1JEU19SRUdfT1RQQ19OV09SRFNfTXNrICAoMHgzZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX05XT1JEU19SRUc6IE9UUENfTldPUkRTIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19GRlBSVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0ZGUFJUX1JFR19PVFBDX0ZGUFJUX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0ZGUFJUX1JFRzogT1RQQ19GRlBSVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0ZGUFJUX1JFR19PVFBDX0ZGUFJUX01zayAgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0ZGUFJUX1JFRzogT1RQQ19GRlBSVCAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19GRlJEX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0ZGUkRfUkVHX09UUENfRkZSRF9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0ZGUkRfUkVHOiBPVFBDX0ZGUkQgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX0ZGUkRfUkVHX09UUENfRkZSRF9Nc2sgICAgICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX0ZGUkRfUkVHOiBPVFBDX0ZGUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgT1RQQ19PVFBDX1BXT1JETF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BXT1JETF9SRUdfT1RQQ19QV09SRExfUG9zICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BXT1JETF9SRUc6IE9UUENfUFdPUkRMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1BXT1JETF9SRUdfT1RQQ19QV09SRExfTXNrICAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1BXT1JETF9SRUc6IE9UUENfUFdPUkRMIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfUFdPUkRIX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBPVFBDX09UUENfUFdPUkRIX1JFR19PVFBDX1BXT1JESF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUFdPUkRIX1JFRzogT1RQQ19QV09SREggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfUFdPUkRIX1JFR19PVFBDX1BXT1JESF9Nc2sgICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfUFdPUkRIX1JFRzogT1RQQ19QV09SREggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfVElNMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfQ0FEWCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX01zayAoMHhmZlVMKSAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfQ0FEWCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTFfUkVHOiBPVFBDX1RJTTFfQ0NfVF9QVyAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTFfUkVHOiBPVFBDX1RJTTFfQ0NfVF9QVyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MgKDE2VUwpICAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTFfUkVHOiBPVFBDX1RJTTFfQ0NfVF8xVVMgKEJpdCAxNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Nc2sgKDB4M2YwMDAwVUwpICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTFfUkVHOiBPVFBDX1RJTTFfQ0NfVF8xVVMgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Qb3MgKDIyVUwpICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfNTAwTlMgKEJpdCAyMikgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Nc2sgKDB4N2MwMDAwMFVMKSAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfNTAwTlMgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MgKDI3VUwpICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfMjAwTlMgKEJpdCAyNykgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Nc2sgKDB4NzgwMDAwMDBVTCkgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfMjAwTlMgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcyAoMzFVTCkgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfMjVOUyAoQml0IDMxKSAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX01zayAoMHg4MDAwMDAwMFVMKSAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0xX1JFRzogT1RQQ19USU0xX0NDX1RfMjVOUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIE9UUENfT1RQQ19USU0yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTJfUkVHX09UUENfVElNMl9DQ19TVEJZX1RIUl9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTJfUkVHOiBPVFBDX1RJTTJfQ0NfU1RCWV9USFIgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RJTTJfUkVHX09UUENfVElNMl9DQ19TVEJZX1RIUl9Nc2sgKDB4M2ZmVUwpICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RJTTJfUkVHOiBPVFBDX1RJTTJfQ0NfU1RCWV9USFIgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAqLworI2RlZmluZSBPVFBDX09UUENfVElNMl9SRUdfT1RQQ19USU0yX0NDX1RfQkNIS19Qb3MgKDE2VUwpICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMl9SRUc6IE9UUENfVElNMl9DQ19UX0JDSEsgKEJpdCAxNikgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVElNMl9SRUdfT1RQQ19USU0yX0NDX1RfQkNIS19Nc2sgKDB4N2YwMDAwVUwpICAgICAgICAgLyohPCBPVFBDIE9UUENfVElNMl9SRUc6IE9UUENfVElNMl9DQ19UX0JDSEsgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0yX1JFR19PVFBDX1RJTTJfUkRFTkxfUFJPVF9Qb3MgKDIzVUwpICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0yX1JFRzogT1RQQ19USU0yX1JERU5MX1BST1QgKEJpdCAyMykgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19USU0yX1JFR19PVFBDX1RJTTJfUkRFTkxfUFJPVF9Nc2sgKDB4ODAwMDAwVUwpICAgICAgICAvKiE8IE9UUEMgT1RQQ19USU0yX1JFRzogT1RQQ19USU0yX1JERU5MX1BST1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBPVFBDX09UUENfVEVTVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIE9UUENfT1RQQ19URVNUX1JFR19PVFBDX1NFQ0RFRF9DT1JfRElTX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19URVNUX1JFRzogT1RQQ19TRUNERURfQ09SX0RJUyAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIE9UUENfT1RQQ19URVNUX1JFR19PVFBDX1NFQ0RFRF9DT1JfRElTX01zayAoMHgxVUwpICAgICAgICAgICAgICAvKiE8IE9UUEMgT1RQQ19URVNUX1JFRzogT1RQQ19TRUNERURfQ09SX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RFU1RfUkVHX09UUENfU0VDREVEX1JBV19FQ0NfUG9zICgxNlVMKSAgICAgICAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RFU1RfUkVHOiBPVFBDX1NFQ0RFRF9SQVdfRUNDIChCaXQgMTYpICAgICAgICAgICAgKi8KKyNkZWZpbmUgT1RQQ19PVFBDX1RFU1RfUkVHX09UUENfU0VDREVEX1JBV19FQ0NfTXNrICgweGZmMDAwMFVMKSAgICAgICAgIC8qITwgT1RQQyBPVFBDX1RFU1RfUkVHOiBPVFBDX1NFQ0RFRF9SQVdfRUNDIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBPVFBDX09UUENfVEVTVF9SRUdfT1RQQ19TRUNERURfU1RBVF9Qb3MgKDI0VUwpICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVEVTVF9SRUc6IE9UUENfU0VDREVEX1NUQVQgKEJpdCAyNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVEVTVF9SRUdfT1RQQ19TRUNERURfU1RBVF9Nc2sgKDB4MzAwMDAwMFVMKSAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVEVTVF9SRUc6IE9UUENfU0VDREVEX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAqLworI2RlZmluZSBPVFBDX09UUENfVEVTVF9SRUdfT1RQQ19VU0VEX1JSX1BvcyAgICgyNlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVEVTVF9SRUc6IE9UUENfVVNFRF9SUiAoQml0IDI2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPVFBDX09UUENfVEVTVF9SRUdfT1RQQ19VU0VEX1JSX01zayAgICgweDQwMDAwMDBVTCkgICAgICAgICAgICAgLyohPCBPVFBDIE9UUENfVEVTVF9SRUc6IE9UUENfVVNFRF9SUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgc3RydWN0ICdQQVRDSCcgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9WQUxJRF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9WQUxJRF9SRUdfUEFUQ0hfVkFMSURfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9WQUxJRF9SRUc6IFBBVENIX1ZBTElEIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9WQUxJRF9SRUdfUEFUQ0hfVkFMSURfTXNrICgweGZmZmZmZmZVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9WQUxJRF9SRUc6IFBBVENIX1ZBTElEIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9WQUxJRF9TRVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX1ZBTElEX1NFVF9SRUdfUEFUQ0hfVkFMSURfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX1ZBTElEX1NFVF9SRUc6IFBBVENIX1ZBTElEIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX1ZBTElEX1NFVF9SRUdfUEFUQ0hfVkFMSURfTXNrICgweGZmZmZmZmZVTCkgICAgICAgICAvKiE8IFBBVENIIFBBVENIX1ZBTElEX1NFVF9SRUc6IFBBVENIX1ZBTElEIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX1ZBTElEX1JFU0VUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX1ZBTElEX1JFU0VUX1JFR19QQVRDSF9WQUxJRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX1ZBTElEX1JFU0VUX1JFRzogUEFUQ0hfVkFMSUQgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX1ZBTElEX1JFU0VUX1JFR19QQVRDSF9WQUxJRF9Nc2sgKDB4ZmZmZmZmZlVMKSAgICAgICAvKiE8IFBBVENIIFBBVENIX1ZBTElEX1JFU0VUX1JFRzogUEFUQ0hfVkFMSUQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjBfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjBfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjBfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjBfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjBfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjBfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjBfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjBfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjFfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjFfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjFfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjFfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjFfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjFfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjFfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjFfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjJfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjJfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjJfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjJfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjJfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjJfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjJfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjJfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjNfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjNfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjNfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjNfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjNfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjNfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjNfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjNfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjRfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjRfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjRfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjRfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjRfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjRfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjRfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjRfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjVfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjVfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjVfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjVfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjVfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjVfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjVfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjVfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjZfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjZfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjZfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjZfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjZfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjZfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjZfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjZfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjdfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjdfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjdfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjdfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjdfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjdfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjdfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjdfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjhfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjhfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjhfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjhfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjhfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjhfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjhfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjhfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjlfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjlfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjlfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjlfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjlfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjlfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjlfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjlfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMTBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEwX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEwX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEwX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEwX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMF9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMF9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMF9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMF9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjExX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMV9SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMV9SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxMV9SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxMV9SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTFfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTFfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTFfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTFfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTJfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTJfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTJfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTJfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEyX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEyX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEyX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEyX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMTNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEzX1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEzX1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjEzX1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjEzX1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxM19SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxM19SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxM19SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxM19SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjE0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNF9SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNF9SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNF9SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNF9SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTRfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTRfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTRfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTRfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTVfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTVfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTVfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTVfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE1X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE1X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE1X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE1X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMTZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE2X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE2X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE2X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE2X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNl9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNl9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxNl9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxNl9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjE3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxN19SRUdfUEFUQ0hfQUREUl9DX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxN19SRUc6IFBBVENIX0FERFJfQyAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxN19SRUdfUEFUQ0hfQUREUl9DX01zayAoMHgxZmZmZVVMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxN19SRUc6IFBBVENIX0FERFJfQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTdfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTdfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMTdfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMTdfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIxOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMThfUkVHX1BBVENIX0FERFJfQ19Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMThfUkVHOiBQQVRDSF9BRERSX0MgKEJpdCAxKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMThfUkVHX1BBVENIX0FERFJfQ19Nc2sgKDB4MWZmZmVVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMThfUkVHOiBQQVRDSF9BRERSX0MgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE4X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE4X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE4X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE4X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMTlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE5X1JFR19QQVRDSF9BRERSX0NfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE5X1JFRzogUEFUQ0hfQUREUl9DIChCaXQgMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjE5X1JFR19QQVRDSF9BRERSX0NfTXNrICgweDFmZmZlVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjE5X1JFRzogUEFUQ0hfQUREUl9DIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxOV9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxOV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIxOV9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIxOV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjIwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMF9SRUdfUEFUQ0hfQUREUl9EX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMF9SRUc6IFBBVENIX0FERFJfRCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMF9SRUdfUEFUQ0hfQUREUl9EX01zayAoMHgxZmZmY1VMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMF9SRUc6IFBBVENIX0FERFJfRCAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjBfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjBfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjBfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjBfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0RBVEEyMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjBfUkVHX1BBVENIX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjBfUkVHOiBQQVRDSF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjBfUkVHX1BBVENIX0RBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjBfUkVHOiBQQVRDSF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjFfUkVHX1BBVENIX0FERFJfRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjFfUkVHOiBQQVRDSF9BRERSX0QgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjFfUkVHX1BBVENIX0FERFJfRF9Nc2sgKDB4MWZmZmNVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjFfUkVHOiBQQVRDSF9BRERSX0QgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIxX1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIxX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIxX1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIxX1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9EQVRBMjFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTIxX1JFR19QQVRDSF9EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTIxX1JFRzogUEFUQ0hfREFUQSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTIxX1JFR19QQVRDSF9EQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTIxX1JFRzogUEFUQ0hfREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMjJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIyX1JFR19QQVRDSF9BRERSX0RfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIyX1JFRzogUEFUQ0hfQUREUl9EIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjIyX1JFR19QQVRDSF9BRERSX0RfTXNrICgweDFmZmZjVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjIyX1JFRzogUEFUQ0hfQUREUl9EIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMl9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMl9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyMl9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyMl9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfREFUQTIyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyMl9SRUdfUEFUQ0hfREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyMl9SRUc6IFBBVENIX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyMl9SRUdfUEFUQ0hfREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyMl9SRUc6IFBBVENIX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjIzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyM19SRUdfUEFUQ0hfQUREUl9EX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyM19SRUc6IFBBVENIX0FERFJfRCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyM19SRUdfUEFUQ0hfQUREUl9EX01zayAoMHgxZmZmY1VMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyM19SRUc6IFBBVENIX0FERFJfRCAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjNfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjNfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjNfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjNfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0RBVEEyM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjNfUkVHX1BBVENIX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjNfUkVHOiBQQVRDSF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjNfUkVHX1BBVENIX0RBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjNfUkVHOiBQQVRDSF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjRfUkVHX1BBVENIX0FERFJfRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjRfUkVHOiBQQVRDSF9BRERSX0QgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjRfUkVHX1BBVENIX0FERFJfRF9Nc2sgKDB4MWZmZmNVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjRfUkVHOiBQQVRDSF9BRERSX0QgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI0X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI0X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI0X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI0X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9EQVRBMjRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTI0X1JFR19QQVRDSF9EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTI0X1JFRzogUEFUQ0hfREFUQSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTI0X1JFR19QQVRDSF9EQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTI0X1JFRzogUEFUQ0hfREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9BRERSMjVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI1X1JFR19QQVRDSF9BRERSX0RfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI1X1JFRzogUEFUQ0hfQUREUl9EIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI1X1JFR19QQVRDSF9BRERSX0RfTXNrICgweDFmZmZjVUwpICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI1X1JFRzogUEFUQ0hfQUREUl9EIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNV9SRUdfUEFUQ0hfQUREUl8xOV9Qb3MgKDE5VUwpICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdCAxOSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNV9SRUdfUEFUQ0hfQUREUl8xOV9Nc2sgKDB4ODAwMDBVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNV9SRUc6IFBBVENIX0FERFJfMTkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfREFUQTI1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyNV9SRUdfUEFUQ0hfREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyNV9SRUc6IFBBVENIX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0RBVEEyNV9SRUdfUEFUQ0hfREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0RBVEEyNV9SRUc6IFBBVENIX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUEFUQ0hfUEFUQ0hfQUREUjI2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNl9SRUdfUEFUQ0hfQUREUl9EX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNl9SRUc6IFBBVENIX0FERFJfRCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBBVENIX1BBVENIX0FERFIyNl9SRUdfUEFUQ0hfQUREUl9EX01zayAoMHgxZmZmY1VMKSAgICAgICAgICAgICAvKiE8IFBBVENIIFBBVENIX0FERFIyNl9SRUc6IFBBVENIX0FERFJfRCAoQml0ZmllbGQtTWFzazogMHg3ZmZmKSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjZfUkVHX1BBVENIX0FERFJfMTlfUG9zICgxOVVMKSAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjZfUkVHOiBQQVRDSF9BRERSXzE5IChCaXQgMTkpICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjZfUkVHX1BBVENIX0FERFJfMTlfTXNrICgweDgwMDAwVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjZfUkVHOiBQQVRDSF9BRERSXzE5IChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0RBVEEyNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjZfUkVHX1BBVENIX0RBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjZfUkVHOiBQQVRDSF9EQVRBIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9EQVRBMjZfUkVHX1BBVENIX0RBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9EQVRBMjZfUkVHOiBQQVRDSF9EQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBBVENIX1BBVENIX0FERFIyN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjdfUkVHX1BBVENIX0FERFJfRF9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjdfUkVHOiBQQVRDSF9BRERSX0QgKEJpdCAyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVRDSF9QQVRDSF9BRERSMjdfUkVHX1BBVENIX0FERFJfRF9Nc2sgKDB4MWZmZmNVTCkgICAgICAgICAgICAgLyohPCBQQVRDSCBQQVRDSF9BRERSMjdfUkVHOiBQQVRDSF9BRERSX0QgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI3X1JFR19QQVRDSF9BRERSXzE5X1BvcyAoMTlVTCkgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI3X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0IDE5KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfQUREUjI3X1JFR19QQVRDSF9BRERSXzE5X01zayAoMHg4MDAwMFVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfQUREUjI3X1JFRzogUEFUQ0hfQUREUl8xOSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQQVRDSF9QQVRDSF9EQVRBMjdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTI3X1JFR19QQVRDSF9EQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTI3X1JFRzogUEFUQ0hfREFUQSAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEFUQ0hfUEFUQ0hfREFUQTI3X1JFR19QQVRDSF9EQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAgICAgICAgIC8qITwgUEFUQ0ggUEFUQ0hfREFUQTI3X1JFRzogUEFUQ0hfREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgIHN0cnVjdCAnUExMRElHJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfQ1RSTDFfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0JMRV9SRUdfQ0hBTk5FTF9aRVJPX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0JMRV9SRUc6IENIQU5ORUxfWkVSTyAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0JMRV9SRUdfQ0hBTk5FTF9aRVJPX01zayAoMHhmZmZVTCkgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0JMRV9SRUc6IENIQU5ORUxfWkVSTyAoQml0ZmllbGQtTWFzazogMHhmZmYpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX1NHTl9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBTR04gKEJpdCAxMikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX1NHTl9Nc2sgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBTR04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX0NTX1BvcyAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBDUyAoQml0IDEzKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX0NTX01zayAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBDUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX1BMTF9IU0lfUE9MX1BvcyAoMTRVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBQTExfSFNJX1BPTCAoQml0IDE0KSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMV9CTEVfUkVHX1BMTF9IU0lfUE9MX01zayAoMHg0MDAwVUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMV9CTEVfUkVHOiBQTExfSFNJX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9TWU5USF9DVFJMMV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX0NIQU5ORUxfWkVST19Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBDSEFOTkVMX1pFUk8gKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwxX0ZUREZfUkVHX0NIQU5ORUxfWkVST19Nc2sgKDB4ZmZmVUwpICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwxX0ZUREZfUkVHOiBDSEFOTkVMX1pFUk8gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUdfU0dOX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc6IFNHTiAoQml0IDEyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUdfU0dOX01zayAoMHgxMDAwVUwpICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc6IFNHTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUdfQ1NfUG9zICgxM1VMKSAgICAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc6IENTIChCaXQgMTMpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUdfQ1NfTXNrICgweDIwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc6IENTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUdfUExMX0hTSV9QT0xfUG9zICgxNFVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc6IFBMTF9IU0lfUE9MIChCaXQgMTQpICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUdfUExMX0hTSV9QT0xfTXNrICgweDQwMDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDFfRlRERl9SRUc6IFBMTF9IU0lfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19TRF9PUkRFUl9SWF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogU0RfT1JERVJfUlggKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19TRF9PUkRFUl9SWF9Nc2sgKDB4M1VMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogU0RfT1JERVJfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX1NEX09SREVSX1RYX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBTRF9PUkRFUl9UWCAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX1NEX09SREVSX1RYX01zayAoMHhjVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBTRF9PUkRFUl9UWCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfTU9ESU5ERVhfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IE1PRElOREVYIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfTU9ESU5ERVhfTXNrICgweDMwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IE1PRElOREVYIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19HQVVTU19ERUxBWV9Qb3MgKDZVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogR0FVU1NfREVMQVkgKEJpdCA2KSAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19HQVVTU19ERUxBWV9Nc2sgKDB4YzBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogR0FVU1NfREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX0dBVVNTX0lOVl9Qb3MgKDhVTCkgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBHQVVTU19JTlYgKEJpdCA4KSAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX0dBVVNTX0lOVl9Nc2sgKDB4MTAwVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBHQVVTU19JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX0dBVVNTXzg2X1BvcyAoOVVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBHQVVTU184NiAoQml0IDkpICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX0dBVVNTXzg2X01zayAoMHgyMDBVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBHQVVTU184NiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfVFhEQVRBX0lOVl9Qb3MgKDEwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IFRYREFUQV9JTlYgKEJpdCAxMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX0NUUkwyX0JMRV9SRUdfVFhEQVRBX0lOVl9Nc2sgKDB4NDAwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUc6IFRYREFUQV9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX0VPX1BBQ0tFVF9ESVNfUG9zICgxMVVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBFT19QQUNLRVRfRElTIChCaXQgMTEpICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9CTEVfUkVHX0VPX1BBQ0tFVF9ESVNfTXNrICgweDgwMFVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9CTEVfUkVHOiBFT19QQUNLRVRfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19CVF9TRUxfUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogQlRfU0VMIChCaXQgMTIpICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19CVF9TRUxfTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogQlRfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19CTEVfREFDX1NFTF9Qb3MgKDEzVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogQkxFX0RBQ19TRUwgKEJpdCAxMykgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfQkxFX1JFR19CTEVfREFDX1NFTF9Nc2sgKDB4MjAwMFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRzogQkxFX0RBQ19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19TRF9PUkRFUl9SWF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogU0RfT1JERVJfUlggKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19TRF9PUkRFUl9SWF9Nc2sgKDB4M1VMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogU0RfT1JERVJfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19TRF9PUkRFUl9UWF9Qb3MgKDJVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogU0RfT1JERVJfVFggKEJpdCAyKSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19TRF9PUkRFUl9UWF9Nc2sgKDB4Y1VMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogU0RfT1JERVJfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19NT0RJTkRFWF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogTU9ESU5ERVggKEJpdCA0KSAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19NT0RJTkRFWF9Nc2sgKDB4MzBVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogTU9ESU5ERVggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19UWERBQ19ERUxBWV9Qb3MgKDZVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogVFhEQUNfREVMQVkgKEJpdCA2KSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19UWERBQ19ERUxBWV9Nc2sgKDB4NDBVTCkgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogVFhEQUNfREVMQVkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19HQVVTU19JTlZfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogR0FVU1NfSU5WIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMMl9GVERGX1JFR19HQVVTU19JTlZfTXNrICgweDEwMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMMl9GVERGX1JFRzogR0FVU1NfSU5WIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfVFhEQVRBX0lOVl9Qb3MgKDEwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFRYREFUQV9JTlYgKEJpdCAxMCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUdfVFhEQVRBX0lOVl9Nc2sgKDB4NDAwVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUc6IFRYREFUQV9JTlYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMM19SRUdfTU9EVkFMX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMM19SRUc6IE1PRFZBTF9XUiAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9DVFJMM19SRUdfTU9EVkFMX1dSX01zayAoMHgzZmZmVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9DVFJMM19SRUc6IE1PRFZBTF9XUiAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHX01PRFZBTF9TRUxfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDNfUkVHOiBNT0RWQUxfU0VMIChCaXQgMTQpICAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHX01PRFZBTF9TRUxfTXNrICgweDQwMDBVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDNfUkVHOiBNT0RWQUxfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHX1pJRl9NT0RFX0VOX1BvcyAoMTVVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDNfUkVHOiBaSUZfTU9ERV9FTiAoQml0IDE1KSAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfQ1RSTDNfUkVHX1pJRl9NT0RFX0VOX01zayAoMHg4MDAwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfQ1RSTDNfUkVHOiBaSUZfTU9ERV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9WQ09DQUxfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09fRlJFUVRSSU1fV1JfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPX0ZSRVFUUklNX1dSIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT0NBTF9DVFJMX1JFR19WQ09fRlJFUVRSSU1fV1JfTXNrICgweGZVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX1ZDT0NBTF9DVFJMX1JFRzogVkNPX0ZSRVFUUklNX1dSIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHX1ZDT19GUkVRVFJJTV9TRUxfUG9zICg0VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPQ0FMX0NUUkxfUkVHOiBWQ09fRlJFUVRSSU1fU0VMIChCaXQgNCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHX1ZDT19GUkVRVFJJTV9TRUxfTXNrICgweDMwVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPQ0FMX0NUUkxfUkVHOiBWQ09fRlJFUVRSSU1fU0VMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHX1ZDT0NBTF9QRVJJT0RfUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPQ0FMX0NUUkxfUkVHOiBWQ09DQUxfUEVSSU9EIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHX1ZDT0NBTF9QRVJJT0RfTXNrICgweGMwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPQ0FMX0NUUkxfUkVHOiBWQ09DQUxfUEVSSU9EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHX1ZDT0NBTF9NRF9TVEFURV9ETFlfU0VMX1BvcyAoOFVMKSAgICAgLyohPCBQTExESUcgUkZfVkNPQ0FMX0NUUkxfUkVHOiBWQ09DQUxfTURfU1RBVEVfRExZX1NFTCAoQml0IDgpICAqLworI2RlZmluZSBQTExESUdfUkZfVkNPQ0FMX0NUUkxfUkVHX1ZDT0NBTF9NRF9TVEFURV9ETFlfU0VMX01zayAoMHgxMDBVTCkgLyohPCBQTExESUcgUkZfVkNPQ0FMX0NUUkxfUkVHOiBWQ09DQUxfTURfU1RBVEVfRExZX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ1RSTF9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19HQVVTU19HQUlOX1dSX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogR0FVU1NfR0FJTl9XUiAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19HQVVTU19HQUlOX1dSX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogR0FVU1NfR0FJTl9XUiAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19HQVVTU19HQUlOX1NFTF9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogR0FVU1NfR0FJTl9TRUwgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19HQVVTU19HQUlOX1NFTF9Nc2sgKDB4MTAwVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogR0FVU1NfR0FJTl9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfQkxFX1RFU1RQQVRfR0VOX1BvcyAoOVVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IEJMRV9URVNUUEFUX0dFTiAoQml0IDkpICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMX0JMRV9SRUdfQkxFX1RFU1RQQVRfR0VOX01zayAoMHgyMDBVTCkgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMX0JMRV9SRUc6IEJMRV9URVNUUEFUX0dFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19NR0FJTl9DTVBfSU5WX1BvcyAoMTBVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogTUdBSU5fQ01QX0lOViAoQml0IDEwKSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19NR0FJTl9DTVBfSU5WX01zayAoMHg0MDBVTCkgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogTUdBSU5fQ01QX0lOViAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19NR0FJTl9BVkVSX1BvcyAoMTFVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogTUdBSU5fQVZFUiAoQml0IDExKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfQkxFX1JFR19NR0FJTl9BVkVSX01zayAoMHgxODAwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfQkxFX1JFRzogTUdBSU5fQVZFUiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ1RSTF9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUdfTVNLX0dBSU5fV1JfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfRlRERl9SRUc6IE1TS19HQUlOX1dSIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NUUkxfRlRERl9SRUdfTVNLX0dBSU5fV1JfTXNrICgweDdmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NUUkxfRlRERl9SRUc6IE1TS19HQUlOX1dSIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTF9GVERGX1JFR19NU0tfR0FJTl9TRUxfUG9zICg3VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTF9GVERGX1JFRzogTVNLX0dBSU5fU0VMIChCaXQgNykgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTF9GVERGX1JFR19NU0tfR0FJTl9TRUxfTXNrICgweDgwVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTF9GVERGX1JFRzogTVNLX0dBSU5fU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTF9GVERGX1JFR19NU0tfR0FJTl9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTF9GVERGX1JFRzogTVNLX0dBSU5fT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTF9GVERGX1JFR19NU0tfR0FJTl9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTF9GVERGX1JFRzogTVNLX0dBSU5fT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDJfUkVHX01HQUlOX1RSQU5TTUlUX0xFTkdUSF9Qb3MgKDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDJfUkVHOiBNR0FJTl9UUkFOU01JVF9MRU5HVEggKEJpdCAwKSAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDJfUkVHX01HQUlOX1RSQU5TTUlUX0xFTkdUSF9Nc2sgKDB4N2ZVTCkgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDJfUkVHOiBNR0FJTl9UUkFOU01JVF9MRU5HVEggKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMMl9SRUdfTUdBSU5fTU9ERV9TRUxfUG9zICg3VUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMMl9SRUc6IE1HQUlOX01PREVfU0VMIChCaXQgNykgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DVFJMMl9SRUdfTUdBSU5fTU9ERV9TRUxfTXNrICgweDgwVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DVFJMMl9SRUc6IE1HQUlOX01PREVfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDJfUkVHX01TS19HQUlOQ0FMX0xPTkdfUG9zICg4VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDJfUkVHOiBNU0tfR0FJTkNBTF9MT05HIChCaXQgOCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDJfUkVHX01TS19HQUlOQ0FMX0xPTkdfTXNrICgweDEwMFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDJfUkVHOiBNU0tfR0FJTkNBTF9MT05HIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1ZDT19DQUxDQVBfQklUMTRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfVkNPX0NBTENBUF9CSVQxNF9SRUdfVkNPX0NBTENBUF9CSVQxNF9Qb3MgKDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfVkNPX0NBTENBUF9CSVQxNF9SRUc6IFZDT19DQUxDQVBfQklUMTQgKEJpdCAwKSAgICAqLworI2RlZmluZSBQTExESUdfUkZfVkNPX0NBTENBUF9CSVQxNF9SRUdfVkNPX0NBTENBUF9CSVQxNF9Nc2sgKDB4ZmZmZlVMKSAgLyohPCBQTExESUcgUkZfVkNPX0NBTENBUF9CSVQxNF9SRUc6IFZDT19DQUxDQVBfQklUMTQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9WQ09fQ0FMQ0FQX0JJVDE1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19DQUxDQVBfQklUMTVfUkVHX1ZDT19DQUxDQVBfQklUMTVfUG9zICgwVUwpICAgICAgIC8qITwgUExMRElHIFJGX1ZDT19DQUxDQVBfQklUMTVfUkVHOiBWQ09fQ0FMQ0FQX0JJVDE1IChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19DQUxDQVBfQklUMTVfUkVHX1ZDT19DQUxDQVBfQklUMTVfTXNrICgweGZmZmZVTCkgIC8qITwgUExMRElHIFJGX1ZDT19DQUxDQVBfQklUMTVfUkVHOiBWQ09fQ0FMQ0FQX0JJVDE1IChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfQk1DV19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19DTl9XUl9Qb3MgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogQ05fV1IgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19DTl9XUl9Nc2sgICAgICAgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogQ05fV1IgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19IU0lfV1JfUG9zICAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogSFNJX1dSIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19IU0lfV1JfTXNrICAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogSFNJX1dSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19DTl9TRUxfUG9zICAgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogQ05fU0VMIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19DTl9TRUxfTXNrICAgICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogQ05fU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19IU0lfU0VMX1BvcyAgICAgICAgKDhVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogSFNJX1NFTCAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9CTUNXX1JFR19IU0lfU0VMX01zayAgICAgICAgKDB4MTAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9CTUNXX1JFRzogSFNJX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0tNT0RfQUxQSEFfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9LTU9EX0FMUEhBX0JMRV9SRUdfS01PRF9BTFBIQV9HQVVTU0RBQ19Qb3MgKDBVTCkgICAgICAvKiE8IFBMTERJRyBSRl9LTU9EX0FMUEhBX0JMRV9SRUc6IEtNT0RfQUxQSEFfR0FVU1NEQUMgKEJpdCAwKSAgICovCisjZGVmaW5lIFBMTERJR19SRl9LTU9EX0FMUEhBX0JMRV9SRUdfS01PRF9BTFBIQV9HQVVTU0RBQ19Nc2sgKDB4M2ZVTCkgICAvKiE8IFBMTERJRyBSRl9LTU9EX0FMUEhBX0JMRV9SRUc6IEtNT0RfQUxQSEFfR0FVU1NEQUMgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisjZGVmaW5lIFBMTERJR19SRl9LTU9EX0FMUEhBX0JMRV9SRUdfS01PRF9BTFBIQV9UWERBQ19Qb3MgKDZVTCkgICAgICAgICAvKiE8IFBMTERJRyBSRl9LTU9EX0FMUEhBX0JMRV9SRUc6IEtNT0RfQUxQSEFfVFhEQUMgKEJpdCA2KSAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9LTU9EX0FMUEhBX0JMRV9SRUdfS01PRF9BTFBIQV9UWERBQ19Nc2sgKDB4ZmMwVUwpICAgICAvKiE8IFBMTERJRyBSRl9LTU9EX0FMUEhBX0JMRV9SRUc6IEtNT0RfQUxQSEFfVFhEQUMgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0tNT0RfQUxQSEFfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9LTU9EX0FMUEhBX0ZUREZfUkVHX0tNT0RfQUxQSEFfRlRERl9Qb3MgKDBVTCkgICAgICAgICAvKiE8IFBMTERJRyBSRl9LTU9EX0FMUEhBX0ZUREZfUkVHOiBLTU9EX0FMUEhBX0ZUREYgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9LTU9EX0FMUEhBX0ZUREZfUkVHX0tNT0RfQUxQSEFfRlRERl9Nc2sgKDB4M2ZVTCkgICAgICAvKiE8IFBMTERJRyBSRl9LTU9EX0FMUEhBX0ZUREZfUkVHOiBLTU9EX0FMUEhBX0ZUREYgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFRfQkxFX1JFR19HQVVTU19HQUlOX0NBTF9SRF9Qb3MgKDBVTCkgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFRfQkxFX1JFRzogR0FVU1NfR0FJTl9DQUxfUkQgKEJpdCAwKSAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFRfQkxFX1JFR19HQVVTU19HQUlOX0NBTF9SRF9Nc2sgKDB4ZmZVTCkgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFRfQkxFX1JFRzogR0FVU1NfR0FJTl9DQUxfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFRfQkxFX1JFR19WQ09fRlJFUVRSSU1fUkRfUG9zICg4VUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFRfQkxFX1JFRzogVkNPX0ZSRVFUUklNX1JEIChCaXQgOCkgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFRfQkxFX1JFR19WQ09fRlJFUVRSSU1fUkRfTXNrICgweGYwMFVMKSAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFRfQkxFX1JFRzogVkNPX0ZSRVFUUklNX1JEIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX1JFU1VMVF9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0ZUREZfUkVHX01TS19HQUlOX0NBTF9SRF9Qb3MgKDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUX0ZUREZfUkVHOiBNU0tfR0FJTl9DQUxfUkQgKEJpdCAwKSAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUX0ZUREZfUkVHX01TS19HQUlOX0NBTF9SRF9Nc2sgKDB4N2ZVTCkgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUX0ZUREZfUkVHOiBNU0tfR0FJTl9DQUxfUkQgKEJpdGZpZWxkLU1hc2s6IDB4N2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0JMRV9SRUdfR0FVU1NfR0FJTl9SRF9Qb3MgKDBVTCkgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFQyX0JMRV9SRUc6IEdBVVNTX0dBSU5fUkQgKEJpdCAwKSAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0JMRV9SRUdfR0FVU1NfR0FJTl9SRF9Nc2sgKDB4ZmZVTCkgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFQyX0JMRV9SRUc6IEdBVVNTX0dBSU5fUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0JMRV9SRUdfQ05fQ0FMX1JEX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFQyX0JMRV9SRUc6IENOX0NBTF9SRCAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9TWU5USF9SRVNVTFQyX0JMRV9SRUdfQ05fQ0FMX1JEX01zayAoMHgzZjAwVUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9TWU5USF9SRVNVTFQyX0JMRV9SRUc6IENOX0NBTF9SRCAoQml0ZmllbGQtTWFzazogMHgzZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1NZTlRIX1JFU1VMVDJfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1JFU1VMVDJfRlRERl9SRUdfTVNLX0dBSU5fUkRfUG9zICgwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1JFU1VMVDJfRlRERl9SRUc6IE1TS19HQUlOX1JEIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1JFU1VMVDJfRlRERl9SRUdfTVNLX0dBSU5fUkRfTXNrICgweGZmVUwpICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1JFU1VMVDJfRlRERl9SRUc6IE1TS19HQUlOX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfU1lOVEhfUkVTVUxUM19GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUM19GVERGX1JFR19DTl9DQUxfRlRERl9SRF9Qb3MgKDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUM19GVERGX1JFRzogQ05fQ0FMX0ZUREZfUkQgKEJpdCAwKSAgICAqLworI2RlZmluZSBQTExESUdfUkZfU1lOVEhfUkVTVUxUM19GVERGX1JFR19DTl9DQUxfRlRERl9SRF9Nc2sgKDB4M2ZVTCkgICAgLyohPCBQTExESUcgUkZfU1lOVEhfUkVTVUxUM19GVERGX1JFRzogQ05fQ0FMX0ZUREZfUkQgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9DQUxDQVAxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxDQVAxX1JFR19WQ09fQ0FMQ0FQX0xPV19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxDQVAxX1JFRzogVkNPX0NBTENBUF9MT1cgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxDQVAxX1JFR19WQ09fQ0FMQ0FQX0xPV19Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxDQVAxX1JFRzogVkNPX0NBTENBUF9MT1cgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0NBTENBUDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX0NBTENBUDJfUkVHX1ZDT19DQUxDQVBfSElHSF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX0NBTENBUDJfUkVHOiBWQ09fQ0FMQ0FQX0hJR0ggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX0NBTENBUDJfUkVHX1ZDT19DQUxDQVBfSElHSF9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX0NBTENBUDJfUkVHOiBWQ09fQ0FMQ0FQX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTk1EX09GRlNFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9OTURfT0ZGU0VUX1JFR19OTURfT0ZGU0VUX1hUQUwxNk1fUG9zICgwVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9OTURfT0ZGU0VUX1JFRzogTk1EX09GRlNFVF9YVEFMMTZNIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9OTURfT0ZGU0VUX1JFR19OTURfT0ZGU0VUX1hUQUwxNk1fTXNrICgweGZmVUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9OTURfT0ZGU0VUX1JFRzogTk1EX09GRlNFVF9YVEFMMTZNIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBQTExESUdfUkZfTk1EX09GRlNFVF9SRUdfTk1EX09GRlNFVF9QTEw5Nk1fUG9zICg4VUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTk1EX09GRlNFVF9SRUc6IE5NRF9PRkZTRVRfUExMOTZNIChCaXQgOCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTk1EX09GRlNFVF9SRUdfTk1EX09GRlNFVF9QTEw5Nk1fTXNrICgweGZmMDBVTCkgICAgICAgLyohPCBQTExESUcgUkZfTk1EX09GRlNFVF9SRUc6IE5NRF9PRkZTRVRfUExMOTZNIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfRlRERl9QSFlBVFRSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfRlRERl9QSFlBVFRSX1JFR19GVERGX1BIWUFUVFJfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfRlRERl9QSFlBVFRSX1JFRzogRlRERl9QSFlBVFRSIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfRlRERl9QSFlBVFRSX1JFR19GVERGX1BIWUFUVFJfTXNrICgweGZmZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfRlRERl9QSFlBVFRSX1JFRzogRlRERl9QSFlBVFRSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9DQUxUUklNX1NURVAxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxUUklNX1NURVAxX1JFR19NRFNUQVRFX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxUUklNX1NURVAxX1JFRzogTURTVEFURV9SRCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxUUklNX1NURVAxX1JFR19NRFNUQVRFX1JEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxUUklNX1NURVAxX1JFRzogTURTVEFURV9SRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfQ0FMVFJJTV9TVEVQMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMVFJJTV9TVEVQMl9SRUdfTURTVEFURV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMVFJJTV9TVEVQMl9SRUc6IE1EU1RBVEVfUkQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfQ0FMVFJJTV9TVEVQMl9SRUdfTURTVEFURV9SRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfQ0FMVFJJTV9TVEVQMl9SRUc6IE1EU1RBVEVfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX0NBTFRSSU1fU1RFUDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX0NBTFRSSU1fU1RFUDNfUkVHX01EU1RBVEVfUkRfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX0NBTFRSSU1fU1RFUDNfUkVHOiBNRFNUQVRFX1JEIChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX0NBTFRSSU1fU1RFUDNfUkVHX01EU1RBVEVfUkRfTXNrICgweGZmZmZVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX0NBTFRSSU1fU1RFUDNfUkVHOiBNRFNUQVRFX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9DQUxUUklNX1NURVA0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxUUklNX1NURVA0X1JFR19NRFNUQVRFX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxUUklNX1NURVA0X1JFRzogTURTVEFURV9SRCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9DQUxUUklNX1NURVA0X1JFR19NRFNUQVRFX1JEX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9DQUxUUklNX1NURVA0X1JFRzogTURTVEFURV9SRCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDNfUkVHX0dGU0tfR0FJTl9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDNfUkVHOiBHRlNLX0dBSU5fT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ1RSTDNfUkVHX0dGU0tfR0FJTl9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ1RSTDNfUkVHOiBHRlNLX0dBSU5fT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfVkNPX0ZSRVFfRVNUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfVkNPX0ZSRVFfRVNUX1JFR19WQ09fRlJFUV9FU1RfRU5fUG9zICgwVUwpICAgICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPX0ZSRVFfRVNUX1JFRzogVkNPX0ZSRVFfRVNUX0VOIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfVkNPX0ZSRVFfRVNUX1JFR19WQ09fRlJFUV9FU1RfRU5fTXNrICgweDFVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPX0ZSRVFfRVNUX1JFRzogVkNPX0ZSRVFfRVNUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfVkNPX0ZSRVFfRVNUX1JFR19WQ09fRlJFUV9FU1RfTEVOX1BvcyAoMVVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfVkNPX0ZSRVFfRVNUX1JFRzogVkNPX0ZSRVFfRVNUX0xFTiAoQml0IDEpICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfVkNPX0ZSRVFfRVNUX1JFR19WQ09fRlJFUV9FU1RfTEVOX01zayAoMHhmZVVMKSAgICAgICAgLyohPCBQTExESUcgUkZfVkNPX0ZSRVFfRVNUX1JFRzogVkNPX0ZSRVFfRVNUX0xFTiAoQml0ZmllbGQtTWFzazogMHg3ZikgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUdfVkNPX0ZSRVFfRVNUX1VQUEVSX1JEX1BvcyAoOFVMKSAgICAgIC8qITwgUExMRElHIFJGX1ZDT19GUkVRX0VTVF9SRUc6IFZDT19GUkVRX0VTVF9VUFBFUl9SRCAoQml0IDgpICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1ZDT19GUkVRX0VTVF9SRUdfVkNPX0ZSRVFfRVNUX1VQUEVSX1JEX01zayAoMHg3MDBVTCkgIC8qITwgUExMRElHIFJGX1ZDT19GUkVRX0VTVF9SRUc6IFZDT19GUkVRX0VTVF9VUFBFUl9SRCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9TWU5USF9TUEFSRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1NQQVJFX1JFR19TUEFSRV9Qb3MgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1NQQVJFX1JFRzogU1BBUkUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1NZTlRIX1NQQVJFX1JFR19TUEFSRV9Nc2sgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1NZTlRIX1NQQVJFX1JFRzogU1BBUkUgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfVFhfREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IFRYX0RBVEEgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfVFhfREFUQV9Nc2sgKDB4ZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IFRYX0RBVEEgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfVFhfVkFMSURfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IFRYX1ZBTElEIChCaXQgNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfVFhfVkFMSURfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IFRYX1ZBTElEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfTVNLX1RYX1NFTF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IE1TS19UWF9TRUwgKEJpdCA1KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfTVNLX1RYX1NFTF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IE1TS19UWF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX01TS19BTFdfRU5fUG9zICg2VUwpICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBNU0tfQUxXX0VOIChCaXQgNikgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ1RSTDFfUkVHX01TS19BTFdfRU5fTXNrICgweDQwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ1RSTDFfUkVHOiBNU0tfQUxXX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfTVNLTU9EX0NUUkwxX1JFR19UWF9NT0RfRlJPTV9HUElPX1BvcyAoN1VMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfTVNLTU9EX0NUUkwxX1JFRzogVFhfTU9EX0ZST01fR1BJTyAoQml0IDcpICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTVNLTU9EX0NUUkwxX1JFR19UWF9NT0RfRlJPTV9HUElPX01zayAoMHg4MFVMKSAgICAgICAgLyohPCBQTExESUcgUkZfTVNLTU9EX0NUUkwxX1JFRzogVFhfTU9EX0ZST01fR1BJTyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfTVNLX0JZUEFTU19QSEFTRV9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IE1TS19CWVBBU1NfUEhBU0UgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DVFJMMV9SRUdfTVNLX0JZUEFTU19QSEFTRV9Nc2sgKDB4MTAwVUwpICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DVFJMMV9SRUc6IE1TS19CWVBBU1NfUEhBU0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NU0tNT0RfQ0hJUExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ0hJUExfUkVHX01TS19DSElQTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ0hJUExfUkVHOiBNU0tfQ0hJUEwgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NU0tNT0RfQ0hJUExfUkVHX01TS19DSElQTF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NU0tNT0RfQ0hJUExfUkVHOiBNU0tfQ0hJUEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01TS01PRF9DSElQSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DSElQSF9SRUdfTVNLX0NISVBIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DSElQSF9SRUc6IE1TS19DSElQSCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01TS01PRF9DSElQSF9SRUdfTVNLX0NISVBIX01zayAoMHhmZmZmVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX01TS01PRF9DSElQSF9SRUc6IE1TS19DSElQSCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1RYREFDX1RFU1RfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfVFhEQUNfVEVTVF9SRUdfUkZfVFhEQUNfVEVTVF9XUl9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfVFhEQUNfVEVTVF9SRUc6IFJGX1RYREFDX1RFU1RfV1IgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfVFhEQUNfVEVTVF9SRUdfUkZfVFhEQUNfVEVTVF9XUl9Nc2sgKDB4ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfVFhEQUNfVEVTVF9SRUc6IFJGX1RYREFDX1RFU1RfV1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFBMTERJR19SRl9UWERBQ19URVNUX1JFR19SRl9UWERBQ19URVNUX1NFTF9Qb3MgKDhVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9UWERBQ19URVNUX1JFRzogUkZfVFhEQUNfVEVTVF9TRUwgKEJpdCA4KSAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9UWERBQ19URVNUX1JFR19SRl9UWERBQ19URVNUX1NFTF9Nc2sgKDB4MTAwVUwpICAgICAgICAvKiE8IFBMTERJRyBSRl9UWERBQ19URVNUX1JFRzogUkZfVFhEQUNfVEVTVF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDBfUkVHX01HQUlOX0NPTVBfVkFMX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDBfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDBfUkVHX01HQUlOX0NPTVBfVkFMX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDBfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMMV9SRUdfTUdBSU5fQ09NUF9WQUxfUG9zICgwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMMV9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMMV9SRUdfTUdBSU5fQ09NUF9WQUxfTXNrICgweDFmVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMMV9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwyX1JFR19NR0FJTl9DT01QX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUwyX1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUwyX1JFR19NR0FJTl9DT01QX1ZBTF9Nc2sgKDB4MWZVTCkgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUwyX1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDNfUkVHX01HQUlOX0NPTVBfVkFMX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDNfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDNfUkVHX01HQUlOX0NPTVBfVkFMX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDNfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMNF9SRUdfTUdBSU5fQ09NUF9WQUxfUG9zICgwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMNF9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMNF9SRUdfTUdBSU5fQ09NUF9WQUxfTXNrICgweDFmVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMNF9SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw1X1JFR19NR0FJTl9DT01QX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUw1X1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw1X1JFR19NR0FJTl9DT01QX1ZBTF9Nc2sgKDB4MWZVTCkgICAgICAgLyohPCBQTExESUcgUkZfTUdBSU5fQ09NUF9WQUw1X1JFRzogTUdBSU5fQ09NUF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDZfUkVHX01HQUlOX0NPTVBfVkFMX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDZfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9NR0FJTl9DT01QX1ZBTDZfUkVHX01HQUlOX0NPTVBfVkFMX01zayAoMHgxZlVMKSAgICAgICAvKiE8IFBMTERJRyBSRl9NR0FJTl9DT01QX1ZBTDZfUkVHOiBNR0FJTl9DT01QX1ZBTCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfTUdBSU5fQ09NUF9WQUw3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMN19SRUdfTUdBSU5fQ09NUF9WQUxfUG9zICgwVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMN19SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX01HQUlOX0NPTVBfVkFMN19SRUdfTUdBSU5fQ09NUF9WQUxfTXNrICgweDFmVUwpICAgICAgIC8qITwgUExMRElHIFJGX01HQUlOX0NPTVBfVkFMN19SRUc6IE1HQUlOX0NPTVBfVkFMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1BVTFNFX1RCTF8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzBfUkVHX0ZUREZfUFVMU0VfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzBfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzBfUkVHX0ZUREZfUFVMU0VfVkFMX01zayAoMHg3ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzBfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfUFVMU0VfVEJMXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfMV9SRUdfRlRERl9QVUxTRV9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfMV9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfMV9SRUdfRlRERl9QVUxTRV9WQUxfTXNrICgweDdmZlVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfMV9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXRmaWVsZC1NYXNrOiAweDdmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9QVUxTRV9UQkxfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF8yX1JFR19GVERGX1BVTFNFX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF8yX1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF8yX1JFR19GVERGX1BVTFNFX1ZBTF9Nc2sgKDB4N2ZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF8yX1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1BVTFNFX1RCTF8zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzNfUkVHX0ZUREZfUFVMU0VfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzNfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzNfUkVHX0ZUREZfUFVMU0VfVkFMX01zayAoMHg3ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzNfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfUFVMU0VfVEJMXzRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfNF9SRUdfRlRERl9QVUxTRV9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfNF9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfNF9SRUdfRlRERl9QVUxTRV9WQUxfTXNrICgweDdmZlVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfNF9SRUc6IEZUREZfUFVMU0VfVkFMIChCaXRmaWVsZC1NYXNrOiAweDdmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9QVUxTRV9UQkxfNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF81X1JFR19GVERGX1BVTFNFX1ZBTF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF81X1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX1RCTF81X1JFR19GVERGX1BVTFNFX1ZBTF9Nc2sgKDB4N2ZmVUwpICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX1RCTF81X1JFRzogRlRERl9QVUxTRV9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4N2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUExMRElHX1JGX1BVTFNFX1RCTF82X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzZfUkVHX0ZUREZfUFVMU0VfVkFMX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzZfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfVEJMXzZfUkVHX0ZUREZfUFVMU0VfVkFMX01zayAoMHg3ZmZVTCkgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfVEJMXzZfUkVHOiBGVERGX1BVTFNFX1ZBTCAoQml0ZmllbGQtTWFzazogMHg3ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBQTExESUdfUkZfUFVMU0VfVEJMXzdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfN19SRUdfRlRERl9QVUxTRV9WQUxfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfN19SRUc6IEZUREZfUFVMU0VfVkFMIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9UQkxfN19SRUdfRlRERl9QVUxTRV9WQUxfTXNrICgweDdmZlVMKSAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9UQkxfN19SRUc6IEZUREZfUFVMU0VfVkFMIChCaXRmaWVsZC1NYXNrOiAweDdmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX0NUUkxfUkVHX0ZUREZfUFVMU0VfU0VMX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX0NUUkxfUkVHOiBGVERGX1BVTFNFX1NFTCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX0NUUkxfUkVHX0ZUREZfUFVMU0VfU0VMX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX0NUUkxfUkVHOiBGVERGX1BVTFNFX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX0NUUkxfUkVHX0ZUREZfUFVMU0VfR0FURV9Qb3MgKDFVTCkgICAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX0NUUkxfUkVHOiBGVERGX1BVTFNFX0dBVEUgKEJpdCAxKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUExMRElHX1JGX1BVTFNFX0NUUkxfUkVHX0ZUREZfUFVMU0VfR0FURV9Nc2sgKDB4NlVMKSAgICAgICAgICAgIC8qITwgUExMRElHIFJGX1BVTFNFX0NUUkxfUkVHOiBGVERGX1BVTFNFX0dBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFR19GVERGX0xPV1BBU1NfRU5fUG9zICgzVUwpICAgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9DVFJMX1JFRzogRlRERl9MT1dQQVNTX0VOIChCaXQgMykgICAgICAgICAgICovCisjZGVmaW5lIFBMTERJR19SRl9QVUxTRV9DVFJMX1JFR19GVERGX0xPV1BBU1NfRU5fTXNrICgweDhVTCkgICAgICAgICAgICAvKiE8IFBMTERJRyBSRl9QVUxTRV9DVFJMX1JFRzogRlRERl9MT1dQQVNTX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfQ1RSTF9SRUdfRlRERl9QVUxTRV9HQUlOX1BvcyAoNFVMKSAgICAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfQ1RSTF9SRUc6IEZUREZfUFVMU0VfR0FJTiAoQml0IDQpICAgICAgICAgICAqLworI2RlZmluZSBQTExESUdfUkZfUFVMU0VfQ1RSTF9SRUdfRlRERl9QVUxTRV9HQUlOX01zayAoMHhmMFVMKSAgICAgICAgICAgLyohPCBQTExESUcgUkZfUFVMU0VfQ1RSTF9SRUc6IEZUREZfUFVMU0VfR0FJTiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgIHN0cnVjdCAnUVNQSUMnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfU0VUX1NJTkdMRV9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX1NFVF9TSU5HTEUgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfU0VUX1NJTkdMRV9Nc2sgKDB4MVVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX1NFVF9TSU5HTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX1NFVF9EVUFMX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxCVVNfUkVHOiBRU1BJQ19TRVRfRFVBTCAoQml0IDEpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX1NFVF9EVUFMX01zayAoMHgyVUwpICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxCVVNfUkVHOiBRU1BJQ19TRVRfRFVBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfU0VUX1FVQURfUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX1NFVF9RVUFEIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTEJVU19SRUdfUVNQSUNfU0VUX1FVQURfTXNrICgweDRVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTEJVU19SRUc6IFFTUElDX1NFVF9RVUFEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19FTl9DU19Qb3MgKDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMQlVTX1JFRzogUVNQSUNfRU5fQ1MgKEJpdCAzKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19FTl9DU19Nc2sgKDB4OFVMKSAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMQlVTX1JFRzogUVNQSUNfRU5fQ1MgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19ESVNfQ1NfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMQlVTX1JFRzogUVNQSUNfRElTX0NTIChCaXQgNCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19ESVNfQ1NfTXNrICgweDEwVUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMQlVTX1JFRzogUVNQSUNfRElTX0NTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfQVVUT19NRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0FVVE9fTUQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfQVVUT19NRF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0FVVE9fTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19DTEtfTURfUG9zICgxVUwpICAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfQ0xLX01EIChCaXQgMSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19DTEtfTURfTXNrICgweDJVTCkgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfQ0xLX01EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSU8yX09FTl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0lPMl9PRU4gKEJpdCAyKSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSU8yX09FTl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0lPMl9PRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19JTzNfT0VOX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfSU8zX09FTiAoQml0IDMpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19JTzNfT0VOX01zayAoMHg4VUwpICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfSU8zX09FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0lPMl9EQVRfUG9zICg0VUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19JTzJfREFUIChCaXQgNCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX0lPMl9EQVRfTXNrICgweDEwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19JTzJfREFUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSU8zX0RBVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0lPM19EQVQgKEJpdCA1KSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfSU8zX0RBVF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX0lPM19EQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19IUkRZX01EX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfSFJEWV9NRCAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19IUkRZX01EX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfSFJEWV9NRCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1JYRF9ORUdfUG9zICg3VUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19SWERfTkVHIChCaXQgNykgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQ1RSTE1PREVfUkVHX1FTUElDX1JYRF9ORUdfTXNrICgweDgwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQ1RSTE1PREVfUkVHOiBRU1BJQ19SWERfTkVHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfUlBJUEVfRU5fUG9zICg4VUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX1JQSVBFX0VOIChCaXQgOCkgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfUlBJUEVfRU5fTXNrICgweDEwMFVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX1JQSVBFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfUENMS19NRF9Qb3MgKDlVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX1BDTEtfTUQgKEJpdCA5KSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfUENMS19NRF9Nc2sgKDB4ZTAwVUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX1BDTEtfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19GT1JDRU5TRVFfRU5fUG9zICgxMlVMKSAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfRk9SQ0VOU0VRX0VOIChCaXQgMTIpICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0NUUkxNT0RFX1JFR19RU1BJQ19GT1JDRU5TRVFfRU5fTXNrICgweDEwMDBVTCkgICAgICAvKiE8IFFTUElDIFFTUElDX0NUUkxNT0RFX1JFRzogUVNQSUNfRk9SQ0VOU0VRX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfVVNFXzMyQkFfUG9zICgxM1VMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX1VTRV8zMkJBIChCaXQgMTMpICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DVFJMTU9ERV9SRUdfUVNQSUNfVVNFXzMyQkFfTXNrICgweDIwMDBVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DVFJMTU9ERV9SRUc6IFFTUElDX1VTRV8zMkJBIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfUkVDVkRBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19SRUNWREFUQV9SRUdfUVNQSUNfUkVDVkRBVEFfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19SRUNWREFUQV9SRUc6IFFTUElDX1JFQ1ZEQVRBIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19SRUNWREFUQV9SRUdfUVNQSUNfUkVDVkRBVEFfTXNrICgweGZmZmZmZmZmVUwpICAgICAgLyohPCBRU1BJQyBRU1BJQ19SRUNWREFUQV9SRUc6IFFTUElDX1JFQ1ZEQVRBIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0lOU1RfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19JTlNUIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0lOU1RfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19JTlNUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0lOU1RfV0JfUG9zICg4VUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19JTlNUX1dCIChCaXQgOCkgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0lOU1RfV0JfTXNrICgweGZmMDBVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19JTlNUX1dCIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0VYVF9CWVRFX1BvcyAoMTZVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19FWFRfQllURSAoQml0IDE2KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0VYVF9CWVRFX01zayAoMHhmZjAwMDBVTCkgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19FWFRfQllURSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19JTlNUX1RYX01EX1BvcyAoMjRVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfSU5TVF9UWF9NRCAoQml0IDI0KSAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19JTlNUX1RYX01EX01zayAoMHgzMDAwMDAwVUwpICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfSU5TVF9UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19BRFJfVFhfTURfUG9zICgyNlVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfQURSX1RYX01EIChCaXQgMjYpICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURBX1JFR19RU1BJQ19BRFJfVFhfTURfTXNrICgweGMwMDAwMDBVTCkgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURBX1JFRzogUVNQSUNfQURSX1RYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0VYVF9UWF9NRF9Qb3MgKDI4VUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19FWFRfVFhfTUQgKEJpdCAyOCkgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREFfUkVHX1FTUElDX0VYVF9UWF9NRF9Nc2sgKDB4MzAwMDAwMDBVTCkgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREFfUkVHOiBRU1BJQ19FWFRfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUdfUVNQSUNfRE1ZX1RYX01EX1BvcyAoMzBVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQV9SRUc6IFFTUElDX0RNWV9UWF9NRCAoQml0IDMwKSAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQ01EQV9SRUdfUVNQSUNfRE1ZX1RYX01EX01zayAoMHhjMDAwMDAwMFVMKSAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQ01EQV9SRUc6IFFTUElDX0RNWV9UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0JVUlNUQ01EQl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19EQVRfUlhfTURfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfREFUX1JYX01EIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19EQVRfUlhfTURfTXNrICgweDNVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfREFUX1JYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0VYVF9CWVRFX0VOX1BvcyAoMlVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19FWFRfQllURV9FTiAoQml0IDIpICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0VYVF9CWVRFX0VOX01zayAoMHg0VUwpICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19FWFRfQllURV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19FWFRfSEZfRFNfUG9zICgzVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRVhUX0hGX0RTIChCaXQgMykgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19FWFRfSEZfRFNfTXNrICgweDhVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRVhUX0hGX0RTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0RNWV9OVU1fUG9zICg0VUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19ETVlfTlVNIChCaXQgNCkgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0RNWV9OVU1fTXNrICgweDMwVUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19ETVlfTlVNIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0lOU1RfTURfUG9zICg2VUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19JTlNUX01EIChCaXQgNikgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0lOU1RfTURfTXNrICgweDQwVUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19JTlNUX01EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX1dSQVBfTURfUG9zICg3VUwpICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19XUkFQX01EIChCaXQgNykgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX1dSQVBfTURfTXNrICgweDgwVUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19XUkFQX01EIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX1dSQVBfTEVOX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19XUkFQX0xFTiAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX1dSQVBfTEVOX01zayAoMHgzMDBVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19XUkFQX0xFTiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19XUkFQX1NJWkVfUG9zICgxMFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfV1JBUF9TSVpFIChCaXQgMTApICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19XUkFQX1NJWkVfTXNrICgweGMwMFVMKSAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfV1JBUF9TSVpFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0NTX0hJR0hfTUlOX1BvcyAoMTJVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19DU19ISUdIX01JTiAoQml0IDEyKSAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVENNREJfUkVHX1FTUElDX0NTX0hJR0hfTUlOX01zayAoMHg3MDAwVUwpICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVENNREJfUkVHOiBRU1BJQ19DU19ISUdIX01JTiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19ETVlfRk9SQ0VfUG9zICgxNVVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRE1ZX0ZPUkNFIChCaXQgMTUpICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RDTURCX1JFR19RU1BJQ19ETVlfRk9SQ0VfTXNrICgweDgwMDBVTCkgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RDTURCX1JFRzogUVNQSUNfRE1ZX0ZPUkNFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX1NUQVRVU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNfUkVHX1FTUElDX0JVU1lfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNfUkVHOiBRU1BJQ19CVVNZIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNfUkVHX1FTUElDX0JVU1lfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNfUkVHOiBRU1BJQ19CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfV1JJVEVEQVRBX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19XUklURURBVEFfUkVHX1FTUElDX1dSSVRFREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19XUklURURBVEFfUkVHOiBRU1BJQ19XUklURURBVEEgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19XUklURURBVEFfUkVHX1FTUElDX1dSSVRFREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgLyohPCBRU1BJQyBRU1BJQ19XUklURURBVEFfUkVHOiBRU1BJQ19XUklURURBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19SRUFEREFUQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX1JFQUREQVRBX1JFR19RU1BJQ19SRUFEREFUQV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1JFQUREQVRBX1JFRzogUVNQSUNfUkVBRERBVEEgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX1JFQUREQVRBX1JFR19RU1BJQ19SRUFEREFUQV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgICAvKiE8IFFTUElDIFFTUElDX1JFQUREQVRBX1JFRzogUVNQSUNfUkVBRERBVEEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19EVU1NWURBVEFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX0RVTU1ZREFUQV9SRUdfUVNQSUNfRFVNTVlEQVRBX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0RVTU1ZREFUQV9SRUc6IFFTUElDX0RVTU1ZREFUQSAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0RVTU1ZREFUQV9SRUdfUVNQSUNfRFVNTVlEQVRBX01zayAoMHhmZmZmZmZmZlVMKSAgICAvKiE8IFFTUElDIFFTUElDX0RVTU1ZREFUQV9SRUc6IFFTUElDX0RVTU1ZREFUQSAoQml0ZmllbGQtTWFzazogMHhmZmZmZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFTUElDX1FTUElDX0VSQVNFQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDVFJMX1JFR19RU1BJQ19FUlNfQUREUl9Qb3MgKDRVTCkgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDVFJMX1JFRzogUVNQSUNfRVJTX0FERFIgKEJpdCA0KSAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDVFJMX1JFR19RU1BJQ19FUlNfQUREUl9Nc2sgKDB4ZmZmZmYwVUwpICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDVFJMX1JFRzogUVNQSUNfRVJTX0FERFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmYpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ1RSTF9SRUdfUVNQSUNfRVJBU0VfRU5fUG9zICgyNFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ1RSTF9SRUc6IFFTUElDX0VSQVNFX0VOIChCaXQgMjQpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ1RSTF9SRUdfUVNQSUNfRVJBU0VfRU5fTXNrICgweDEwMDAwMDBVTCkgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ1RSTF9SRUc6IFFTUElDX0VSQVNFX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNUUkxfUkVHX1FTUElDX0VSU19TVEFURV9Qb3MgKDI1VUwpICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNUUkxfUkVHOiBRU1BJQ19FUlNfU1RBVEUgKEJpdCAyNSkgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNUUkxfUkVHX1FTUElDX0VSU19TVEFURV9Nc2sgKDB4ZTAwMDAwMFVMKSAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNUUkxfUkVHOiBRU1BJQ19FUlNfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQV9SRUdfUVNQSUNfRVJTX0lOU1RfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQV9SRUc6IFFTUElDX0VSU19JTlNUIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQV9SRUdfUVNQSUNfRVJTX0lOU1RfTXNrICgweGZmVUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQV9SRUc6IFFTUElDX0VSU19JTlNUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHX1FTUElDX1dFTl9JTlNUX1BvcyAoOFVMKSAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREFfUkVHOiBRU1BJQ19XRU5fSU5TVCAoQml0IDgpICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREFfUkVHX1FTUElDX1dFTl9JTlNUX01zayAoMHhmZjAwVUwpICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREFfUkVHOiBRU1BJQ19XRU5fSU5TVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURBX1JFR19RU1BJQ19TVVNfSU5TVF9Qb3MgKDE2VUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURBX1JFRzogUVNQSUNfU1VTX0lOU1QgKEJpdCAxNikgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURBX1JFR19RU1BJQ19TVVNfSU5TVF9Nc2sgKDB4ZmYwMDAwVUwpICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURBX1JFRzogUVNQSUNfU1VTX0lOU1QgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQV9SRUdfUVNQSUNfUkVTX0lOU1RfUG9zICgyNFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQV9SRUc6IFFTUElDX1JFU19JTlNUIChCaXQgMjQpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQV9SRUdfUVNQSUNfUkVTX0lOU1RfTXNrICgweGZmMDAwMDAwVUwpICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQV9SRUc6IFFTUElDX1JFU19JTlNUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX0VSU19UWF9NRF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19FUlNfVFhfTUQgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX0VSU19UWF9NRF9Nc2sgKDB4M1VMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19FUlNfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfV0VOX1RYX01EX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX1dFTl9UWF9NRCAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfV0VOX1RYX01EX01zayAoMHhjVUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX1dFTl9UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19TVVNfVFhfTURfUG9zICg0VUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfU1VTX1RYX01EIChCaXQgNCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19TVVNfVFhfTURfTXNrICgweDMwVUwpICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfU1VTX1RYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX1JFU19UWF9NRF9Qb3MgKDZVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19SRVNfVFhfTUQgKEJpdCA2KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX1JFU19UWF9NRF9Nc2sgKDB4YzBVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19SRVNfVFhfTUQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfRUFEX1RYX01EX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX0VBRF9UWF9NRCAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0VSQVNFQ01EQl9SRUdfUVNQSUNfRUFEX1RYX01EX01zayAoMHgzMDBVTCkgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0VSQVNFQ01EQl9SRUc6IFFTUElDX0VBRF9UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19FUlNfQ1NfSElfUG9zICgxMFVMKSAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfRVJTX0NTX0hJIChCaXQgMTApICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfRVJBU0VDTURCX1JFR19RU1BJQ19FUlNfQ1NfSElfTXNrICgweDdjMDBVTCkgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfRVJBU0VDTURCX1JFRzogUVNQSUNfRVJTX0NTX0hJIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX0VSU1JFU19ITERfUG9zICgxNlVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19FUlNSRVNfSExEIChCaXQgMTYpICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX0VSU1JFU19ITERfTXNrICgweGYwMDAwVUwpICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19FUlNSRVNfSExEIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX1JFU1NVU19ETFlfUG9zICgyNFVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19SRVNTVVNfRExZIChCaXQgMjQpICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19FUkFTRUNNREJfUkVHX1FTUElDX1JFU1NVU19ETFlfTXNrICgweDNmMDAwMDAwVUwpICAgLyohPCBRU1BJQyBRU1BJQ19FUkFTRUNNREJfUkVHOiBRU1BJQ19SRVNTVVNfRExZIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVEJSS19SRUdfUVNQSUNfQlJLX1dSRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVEJSS19SRUc6IFFTUElDX0JSS19XUkQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVEJSS19SRUdfUVNQSUNfQlJLX1dSRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVEJSS19SRUc6IFFTUElDX0JSS19XUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX0JSS19FTl9Qb3MgKDE2VUwpICAgICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19CUktfRU4gKEJpdCAxNikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX0JSS19FTl9Nc2sgKDB4MTAwMDBVTCkgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19CUktfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFR19RU1BJQ19CUktfU1pfUG9zICgxN1VMKSAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQlJLX1JFRzogUVNQSUNfQlJLX1NaIChCaXQgMTcpICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0JVUlNUQlJLX1JFR19RU1BJQ19CUktfU1pfTXNrICgweDIwMDAwVUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0JVUlNUQlJLX1JFRzogUVNQSUNfQlJLX1NaIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVEJSS19SRUdfUVNQSUNfQlJLX1RYX01EX1BvcyAoMThVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVEJSS19SRUc6IFFTUElDX0JSS19UWF9NRCAoQml0IDE4KSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19CVVJTVEJSS19SRUdfUVNQSUNfQlJLX1RYX01EX01zayAoMHhjMDAwMFVMKSAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19CVVJTVEJSS19SRUc6IFFTUElDX0JSS19UWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX1NFQ19IRl9EU19Qb3MgKDIwVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19TRUNfSEZfRFMgKEJpdCAyMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfQlVSU1RCUktfUkVHX1FTUElDX1NFQ19IRl9EU19Nc2sgKDB4MTAwMDAwVUwpICAgICAgIC8qITwgUVNQSUMgUVNQSUNfQlVSU1RCUktfUkVHOiBRU1BJQ19TRUNfSEZfRFMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfUlNUQVRfSU5TVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX1JTVEFUX0lOU1QgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfUlNUQVRfSU5TVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX1JTVEFUX0lOU1QgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfUlNUQVRfVFhfTURfUG9zICg4VUwpICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX1JTVEFUX1RYX01EIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfUlNUQVRfVFhfTURfTXNrICgweDMwMFVMKSAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX1JTVEFUX1RYX01EIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JTVEFUX1JYX01EX1BvcyAoMTBVTCkgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SU1RBVF9SWF9NRCAoQml0IDEwKSAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JTVEFUX1JYX01EX01zayAoMHhjMDBVTCkgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SU1RBVF9SWF9NRCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19CVVNZX1BPU19Qb3MgKDEyVUwpICAgICAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfQlVTWV9QT1MgKEJpdCAxMikgICAgICAgICAgKi8KKyNkZWZpbmUgUVNQSUNfUVNQSUNfU1RBVFVTQ01EX1JFR19RU1BJQ19CVVNZX1BPU19Nc2sgKDB4NzAwMFVMKSAgICAgICAgIC8qITwgUVNQSUMgUVNQSUNfU1RBVFVTQ01EX1JFRzogUVNQSUNfQlVTWV9QT1MgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfQlVTWV9WQUxfUG9zICgxNVVMKSAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX0JVU1lfVkFMIChCaXQgMTUpICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX1NUQVRVU0NNRF9SRUdfUVNQSUNfQlVTWV9WQUxfTXNrICgweDgwMDBVTCkgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1NUQVRVU0NNRF9SRUc6IFFTUElDX0JVU1lfVkFMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JFU1NUU19ETFlfUG9zICgxNlVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SRVNTVFNfRExZIChCaXQgMTYpICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1JFU1NUU19ETFlfTXNrICgweDNmMDAwMFVMKSAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19SRVNTVFNfRExZIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1NUU0RMWV9TRUxfUG9zICgyMlVMKSAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19TVFNETFlfU0VMIChCaXQgMjIpICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19TVEFUVVNDTURfUkVHX1FTUElDX1NUU0RMWV9TRUxfTXNrICgweDQwMDAwMFVMKSAgICAgLyohPCBRU1BJQyBRU1BJQ19TVEFUVVNDTURfUkVHOiBRU1BJQ19TVFNETFlfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfQ0hDS0VSQVNFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DSENLRVJBU0VfUkVHX1FTUElDX0NIQ0tFUkFTRV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBRU1BJQyBRU1BJQ19DSENLRVJBU0VfUkVHOiBRU1BJQ19DSENLRVJBU0UgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBRU1BJQ19RU1BJQ19DSENLRVJBU0VfUkVHX1FTUElDX0NIQ0tFUkFTRV9Nc2sgKDB4ZmZmZmZmZmZVTCkgICAgLyohPCBRU1BJQyBRU1BJQ19DSENLRVJBU0VfUkVHOiBRU1BJQ19DSENLRVJBU0UgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZmZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBRU1BJQ19RU1BJQ19HUF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX0dQX1JFR19RU1BJQ19QQURTX0RSVl9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0dQX1JFRzogUVNQSUNfUEFEU19EUlYgKEJpdCAxKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0dQX1JFR19RU1BJQ19QQURTX0RSVl9Nc2sgKDB4NlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0dQX1JFRzogUVNQSUNfUEFEU19EUlYgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0dQX1JFR19RU1BJQ19QQURTX1NMRVdfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0dQX1JFRzogUVNQSUNfUEFEU19TTEVXIChCaXQgMykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX0dQX1JFR19RU1BJQ19QQURTX1NMRVdfTXNrICgweDE4VUwpICAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX0dQX1JFRzogUVNQSUNfUEFEU19TTEVXIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVNQSUNfUVNQSUNfVUNPREVfU1RBUlQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFFTUElDX1FTUElDX1VDT0RFX1NUQVJUX1FTUElDX1VDT0RFX1hfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFFTUElDIFFTUElDX1VDT0RFX1NUQVJUOiBRU1BJQ19VQ09ERV9YIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFFTUElDX1FTUElDX1VDT0RFX1NUQVJUX1FTUElDX1VDT0RFX1hfTXNrICgweGZmZmZmZmZmVUwpICAgICAgICAvKiE8IFFTUElDIFFTUElDX1VDT0RFX1NUQVJUOiBRU1BJQ19VQ09ERV9YIChCaXRmaWVsZC1NYXNrOiAweGZmZmZmZmZmKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnUVVBRCcgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVVBRF9RREVDX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX01BU0tfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9NQVNLIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX01BU0tfTXNrICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9NQVNLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX0NMUl9Qb3MgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9DTFIgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX0NMUl9Nc2sgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9DTFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX1NUQVRVU19Qb3MgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9TVEFUVVMgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX1NUQVRVU19Nc2sgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9TVEFUVVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX1RIUkVTX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9USFJFUyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfUURfSVJRX1RIUkVTX01zayAgICgweDNmOFVMKSAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IFFEX0lSUV9USFJFUyAoQml0ZmllbGQtTWFzazogMHg3ZikgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfQ0hYX1BPUlRfRU5fUG9zICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IENIWF9QT1JUX0VOIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfQ0hYX1BPUlRfRU5fTXNrICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IENIWF9QT1JUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfQ0hZX1BPUlRfRU5fUG9zICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IENIWV9QT1JUX0VOIChCaXQgMTEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfQ0hZX1BPUlRfRU5fTXNrICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IENIWV9QT1JUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfQ0haX1BPUlRfRU5fUG9zICAgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IENIWl9QT1JUX0VOIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ1RSTF9SRUdfQ0haX1BPUlRfRU5fTXNrICAgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ1RSTF9SRUc6IENIWl9QT1JUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVVBRF9RREVDX1hDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRVUFEX1FERUNfWENOVF9SRUdfWF9jb3VudGVyX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfWENOVF9SRUc6IFhfY291bnRlciAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfWENOVF9SRUdfWF9jb3VudGVyX01zayAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfWENOVF9SRUc6IFhfY291bnRlciAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVVBRF9RREVDX1lDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRVUFEX1FERUNfWUNOVF9SRUdfWV9jb3VudGVyX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfWUNOVF9SRUc6IFlfY291bnRlciAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfWUNOVF9SRUdfWV9jb3VudGVyX01zayAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfWUNOVF9SRUc6IFlfY291bnRlciAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUVVBRF9RREVDX1pDTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRVUFEX1FERUNfWkNOVF9SRUdfWl9jb3VudGVyX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfWkNOVF9SRUc6IFpfY291bnRlciAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfWkNOVF9SRUdfWl9jb3VudGVyX01zayAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfWkNOVF9SRUc6IFpfY291bnRlciAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFFVQURfUURFQ19DTE9DS0RJVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBRVUFEX1FERUNfQ0xPQ0tESVZfUkVHX2Nsb2NrX2RpdmlkZXJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ0xPQ0tESVZfUkVHOiBjbG9ja19kaXZpZGVyIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBRVUFEX1FERUNfQ0xPQ0tESVZfUkVHX2Nsb2NrX2RpdmlkZXJfTXNrICgweDNmZlVMKSAgICAgICAgICAgICAgLyohPCBRVUFEIFFERUNfQ0xPQ0tESVZfUkVHOiBjbG9ja19kaXZpZGVyIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ1JGQ1UnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9PVkVSUlVMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfVFhfRU5fT1ZSX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFRYX0VOX09WUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfVFhfRU5fT1ZSX01zayAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFRYX0VOX09WUiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfUlhfRU5fT1ZSX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFJYX0VOX09WUiAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfUlhfRU5fT1ZSX01zayAgICAoMHhjVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFJYX0VOX09WUiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfUkZfTU9ERV9PVlJfUG9zICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFJGX01PREVfT1ZSIChCaXQgNCkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfUkZfTU9ERV9PVlJfTXNrICAoMHgzMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFJGX01PREVfT1ZSIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfSUZGX0ZUREZfT1ZSX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IElGRl9GVERGX09WUiAoQml0IDYpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfSUZGX0ZUREZfT1ZSX01zayAoMHhjMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IElGRl9GVERGX09WUiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfTUlYX0ZUREZfT1ZSX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IE1JWF9GVERGX09WUiAoQml0IDgpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfTUlYX0ZUREZfT1ZSX01zayAoMHgzMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IE1JWF9GVERGX09WUiAoQml0ZmllbGQtTWFzazogMHgwMykgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfVFhEQUNfU0VMX1BvcyAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFRYREFDX1NFTCAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfVFhEQUNfU0VMX01zayAgICAoMHhjMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IFRYREFDX1NFTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfR0FVU1NfREFDX1NFTF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IEdBVVNTX0RBQ19TRUwgKEJpdCAxMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfR0FVU1NfREFDX1NFTF9Nc2sgKDB4MzAwMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IEdBVVNTX0RBQ19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfQ05fRlRERl9USU1FUzJfUG9zICgxNFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IENOX0ZUREZfVElNRVMyIChCaXQgMTQpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9PVkVSUlVMRV9SRUdfQ05fRlRERl9USU1FUzJfTXNrICgweDQwMDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9PVkVSUlVMRV9SRUc6IENOX0ZUREZfVElNRVMyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9ESUFHSVJRMDFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfTUFTS18wX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX01BU0tfMCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfTUFTS18wX01zayAoMHgxVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX01BU0tfMCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfV1NFTF8wX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX1dTRUxfMCAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfV1NFTF8wX01zayAoMHg2VUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX1dTRUxfMCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfQlNFTF8wX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0JTRUxfMCAoQml0IDMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfQlNFTF8wX01zayAoMHgzOFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0JTRUxfMCAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfRURHRV8wX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0VER0VfMCAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfRURHRV8wX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0VER0VfMCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfTUFTS18xX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX01BU0tfMSAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfTUFTS18xX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX01BU0tfMSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfV1NFTF8xX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX1dTRUxfMSAoQml0IDkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfV1NFTF8xX01zayAoMHg2MDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX1dTRUxfMSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfQlNFTF8xX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0JTRUxfMSAoQml0IDExKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfQlNFTF8xX01zayAoMHgzODAwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0JTRUxfMSAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfRURHRV8xX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0VER0VfMSAoQml0IDE0KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMDFfUkVHX0RJQUdJUlFfRURHRV8xX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMDFfUkVHOiBESUFHSVJRX0VER0VfMSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9ESUFHSVJRMjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfTUFTS18yX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX01BU0tfMiAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfTUFTS18yX01zayAoMHgxVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX01BU0tfMiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfV1NFTF8yX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX1dTRUxfMiAoQml0IDEpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfV1NFTF8yX01zayAoMHg2VUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX1dTRUxfMiAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfQlNFTF8yX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0JTRUxfMiAoQml0IDMpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfQlNFTF8yX01zayAoMHgzOFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0JTRUxfMiAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfRURHRV8yX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0VER0VfMiAoQml0IDYpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfRURHRV8yX01zayAoMHg0MFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0VER0VfMiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfTUFTS18zX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX01BU0tfMyAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfTUFTS18zX01zayAoMHgxMDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX01BU0tfMyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfV1NFTF8zX1BvcyAoOVVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX1dTRUxfMyAoQml0IDkpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfV1NFTF8zX01zayAoMHg2MDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX1dTRUxfMyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfQlNFTF8zX1BvcyAoMTFVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0JTRUxfMyAoQml0IDExKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfQlNFTF8zX01zayAoMHgzODAwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0JTRUxfMyAoQml0ZmllbGQtTWFzazogMHgwNykgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfRURHRV8zX1BvcyAoMTRVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0VER0VfMyAoQml0IDE0KSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRMjNfUkVHX0RJQUdJUlFfRURHRV8zX01zayAoMHg0MDAwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRMjNfUkVHOiBESUFHSVJRX0VER0VfMyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfRElBR0lSUV9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8wX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8wX01zayAoMHgxVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8xX1BvcyAoMVVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMSAoQml0IDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8xX01zayAoMHgyVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8yX1BvcyAoMlVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMiAoQml0IDIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8yX01zayAoMHg0VUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8zX1BvcyAoM1VMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMyAoQml0IDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESUFHSVJRX1NUQVRfUkVHX0RJQUdJUlFfU1RBVF8zX01zayAoMHg4VUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESUFHSVJRX1NUQVRfUkVHOiBESUFHSVJRX1NUQVRfMyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQUdDX0VYVDFfTFVUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9BR0NfRVhUMV9MVVRfUkVHX0FHQ19FWFRfTFVUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9BR0NfRVhUMV9MVVRfUkVHOiBBR0NfRVhUX0xVVCAoQml0IDApICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9BR0NfRVhUMV9MVVRfUkVHX0FHQ19FWFRfTFVUX01zayAoMHgzZmZVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9BR0NfRVhUMV9MVVRfUkVHOiBBR0NfRVhUX0xVVCAoQml0ZmllbGQtTWFzazogMHgzZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQ0FMU1RBVEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMU1RBVEVfUkVHX0NBTFNUQVRFX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMU1RBVEVfUkVHOiBDQUxTVEFURSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMU1RBVEVfUkVHX0NBTFNUQVRFX01zayAgICAgKDB4ZlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMU1RBVEVfUkVHOiBDQUxTVEFURSAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1NDQU5fRkVFREJBQ0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfU0NBTl9GRUVEQkFDS19SRUdfTEZfUkVTX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU0NBTl9GRUVEQkFDS19SRUc6IExGX1JFUyAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU0NBTl9GRUVEQkFDS19SRUdfTEZfUkVTX01zayAgKDB4ZlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU0NBTl9GRUVEQkFDS19SRUc6IExGX1JFUyAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU0NBTl9GRUVEQkFDS19SRUdfQ1BfQ1VSX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU0NBTl9GRUVEQkFDS19SRUc6IENQX0NVUiAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU0NBTl9GRUVEQkFDS19SRUdfQ1BfQ1VSX01zayAgKDB4ZjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU0NBTl9GRUVEQkFDS19SRUc6IENQX0NVUiAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9SRUZfT1NDX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19CTEVfUkVHX0NOVF9ST19Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19CTEVfUkVHOiBDTlRfUk8gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19CTEVfUkVHX0NOVF9ST19Nc2sgICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19CTEVfUkVHOiBDTlRfUk8gKEJpdGZpZWxkLU1hc2s6IDB4M2YpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19CTEVfUkVHX0NOVF9DTEtfUG9zICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19CTEVfUkVHOiBDTlRfQ0xLIChCaXQgNikgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19CTEVfUkVHX0NOVF9DTEtfTXNrICAgKDB4N2ZjMFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19CTEVfUkVHOiBDTlRfQ0xLIChCaXRmaWVsZC1NYXNrOiAweDFmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1JFRl9PU0NfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19GVERGX1JFR19DTlRfUk9fUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19GVERGX1JFRzogQ05UX1JPIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19GVERGX1JFR19DTlRfUk9fTXNrICAgKDB4M2ZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19GVERGX1JFRzogQ05UX1JPIChCaXRmaWVsZC1NYXNrOiAweDNmKSAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19GVERGX1JFR19DTlRfQ0xLX1BvcyAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19GVERGX1JFRzogQ05UX0NMSyAoQml0IDYpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUkVGX09TQ19GVERGX1JFR19DTlRfQ0xLX01zayAgKDB4N2ZjMFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUkVGX09TQ19GVERGX1JFRzogQ05UX0NMSyAoQml0ZmllbGQtTWFzazogMHgxZmYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX1NPX0NBTF9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBTT19DQUwgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX1NPX0NBTF9Nc2sgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBTT19DQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX0VPX0NBTF9Qb3MgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBFT19DQUwgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX0VPX0NBTF9Nc2sgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBFT19DQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX01HQUlOX0NBTF9ESVNfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBNR0FJTl9DQUxfRElTIChCaXQgMikgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX01HQUlOX0NBTF9ESVNfTXNrICgweDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBNR0FJTl9DQUxfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX0lGRl9DQUxfRElTX1BvcyAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBJRkZfQ0FMX0RJUyAoQml0IDMpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX0lGRl9DQUxfRElTX01zayAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBJRkZfQ0FMX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX0RDX09GRlNFVF9DQUxfRElTX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBEQ19PRkZTRVRfQ0FMX0RJUyAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ0FMX0NUUkxfUkVHX0RDX09GRlNFVF9DQUxfRElTX01zayAoMHgxMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ0FMX0NUUkxfUkVHOiBEQ19PRkZTRVRfQ0FMX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9DQUxfQ1RSTF9SRUdfVkNPX0NBTF9ESVNfUG9zICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DQUxfQ1RSTF9SRUc6IFZDT19DQUxfRElTIChCaXQgNSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DQUxfQ1RSTF9SRUdfVkNPX0NBTF9ESVNfTXNrICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DQUxfQ1RSTF9SRUc6IFZDT19DQUxfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9JUlFfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9JUlFfQ1RSTF9SRUdfRU9fQ0FMX0NMRUFSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JUlFfQ1RSTF9SRUc6IEVPX0NBTF9DTEVBUiAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JUlFfQ1RSTF9SRUdfRU9fQ0FMX0NMRUFSX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JUlFfQ1RSTF9SRUc6IEVPX0NBTF9DTEVBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9BRENJX0RDX09GRlNFVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9BRENJX0RDX09GRlNFVF9SRUdfQURDX09GRlBfSV9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9BRENJX0RDX09GRlNFVF9SRUc6IEFEQ19PRkZQX0lfUkQgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9BRENJX0RDX09GRlNFVF9SRUdfQURDX09GRlBfSV9SRF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9BRENJX0RDX09GRlNFVF9SRUc6IEFEQ19PRkZQX0lfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUkZfQURDSV9EQ19PRkZTRVRfUkVHX0FEQ19PRkZOX0lfUkRfUG9zICg4VUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDSV9EQ19PRkZTRVRfUkVHOiBBRENfT0ZGTl9JX1JEIChCaXQgOCkgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDSV9EQ19PRkZTRVRfUkVHX0FEQ19PRkZOX0lfUkRfTXNrICgweGZmMDBVTCkgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDSV9EQ19PRkZTRVRfUkVHOiBBRENfT0ZGTl9JX1JEIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0FEQ1FfRENfT0ZGU0VUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0FEQ1FfRENfT0ZGU0VUX1JFR19BRENfT0ZGUF9RX1JEX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ1FfRENfT0ZGU0VUX1JFRzogQURDX09GRlBfUV9SRCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0FEQ1FfRENfT0ZGU0VUX1JFR19BRENfT0ZGUF9RX1JEX01zayAoMHhmZlVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX0FEQ1FfRENfT0ZGU0VUX1JFRzogQURDX09GRlBfUV9SRCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9BRENRX0RDX09GRlNFVF9SRUdfQURDX09GRk5fUV9SRF9Qb3MgKDhVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9BRENRX0RDX09GRlNFVF9SRUc6IEFEQ19PRkZOX1FfUkQgKEJpdCA4KSAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9BRENRX0RDX09GRlNFVF9SRUdfQURDX09GRk5fUV9SRF9Nc2sgKDB4ZmYwMFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9BRENRX0RDX09GRlNFVF9SRUc6IEFEQ19PRkZOX1FfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9TUEFSRTFfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfWFRBTF9SRkNMS19URVNUX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1hUQUxfUkZDTEtfVEVTVCAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfWFRBTF9SRkNMS19URVNUX01zayAoMHgxVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX1hUQUxfUkZDTEtfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9YVEFMX1BMTF9EWFRBTDE2X1RFU1RfUG9zICgxVUwpICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfWFRBTF9QTExfRFhUQUwxNl9URVNUIChCaXQgMSkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9YVEFMX1BMTF9EWFRBTDE2X1RFU1RfTXNrICgweDJVTCkgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfWFRBTF9QTExfRFhUQUwxNl9URVNUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9CTEVfUkVHX1JGX1ZUVU5FX1RPX0FEQ19URVNUX0VOX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9CTEVfUkVHOiBSRl9WVFVORV9UT19BRENfVEVTVF9FTiAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9CTEVfUkVHX1JGX1ZUVU5FX1RPX0FEQ19URVNUX0VOX01zayAoMHg0VUwpICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9CTEVfUkVHOiBSRl9WVFVORV9UT19BRENfVEVTVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9UWERBQ19DTEtfUE9MX1NFTF9Qb3MgKDNVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfVFhEQUNfQ0xLX1BPTF9TRUwgKEJpdCAzKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9UWERBQ19DTEtfUE9MX1NFTF9Nc2sgKDB4OFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfVFhEQUNfQ0xLX1BPTF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfR0RBQ19DVVJfU0VUX1BvcyAoNFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX0dEQUNfQ1VSX1NFVCAoQml0IDQpICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0JMRV9SRUdfUkZfR0RBQ19DVVJfU0VUX01zayAoMHgzMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0JMRV9SRUc6IFJGX0dEQUNfQ1VSX1NFVCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9TUEFSRV9SRUdfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfU1BBUkVfUkVHIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfQkxFX1JFR19SRl9TUEFSRV9SRUdfTXNrICgweGZmYzBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfQkxFX1JFRzogUkZfU1BBUkVfUkVHIChCaXRmaWVsZC1NYXNrOiAweDNmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1NQQVJFMV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfWFRBTF9SRkNMS19URVNUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1hUQUxfUkZDTEtfVEVTVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfWFRBTF9SRkNMS19URVNUX01zayAoMHgxVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1hUQUxfUkZDTEtfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfWFRBTF9QTExfRFhUQUwxNl9URVNUX1BvcyAoMVVMKSAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1hUQUxfUExMX0RYVEFMMTZfVEVTVCAoQml0IDEpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfWFRBTF9QTExfRFhUQUwxNl9URVNUX01zayAoMHgyVUwpICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1hUQUxfUExMX0RYVEFMMTZfVEVTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfVlRVTkVfVE9fQURDX1RFU1RfRU5fUG9zICgyVUwpICAgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1ZUVU5FX1RPX0FEQ19URVNUX0VOIChCaXQgMikgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9TUEFSRTFfRlRERl9SRUdfUkZfVlRVTkVfVE9fQURDX1RFU1RfRU5fTXNrICgweDRVTCkgICAgIC8qITwgUkZDVSBSRl9TUEFSRTFfRlRERl9SRUc6IFJGX1ZUVU5FX1RPX0FEQ19URVNUX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9GVERGX1JFR19SRl9UWERBQ19DTEtfUE9MX1NFTF9Qb3MgKDNVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9GVERGX1JFRzogUkZfVFhEQUNfQ0xLX1BPTF9TRUwgKEJpdCAzKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1NQQVJFMV9GVERGX1JFR19SRl9UWERBQ19DTEtfUE9MX1NFTF9Nc2sgKDB4OFVMKSAgICAgICAgLyohPCBSRkNVIFJGX1NQQVJFMV9GVERGX1JFRzogUkZfVFhEQUNfQ0xLX1BPTF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX0dEQUNfQ1VSX1NFVF9Qb3MgKDRVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9HREFDX0NVUl9TRVQgKEJpdCA0KSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX0dEQUNfQ1VSX1NFVF9Nc2sgKDB4MzBVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9HREFDX0NVUl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1NQQVJFX1JFR19Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9TUEFSRV9SRUcgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfU1BBUkUxX0ZUREZfUkVHX1JGX1NQQVJFX1JFR19Nc2sgKDB4ZmZjMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfU1BBUkUxX0ZUREZfUkVHOiBSRl9TUEFSRV9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4M2ZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0JJQVNfQ1RSTDFfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfQkxFX1JFR19NSVhfQklBU19CTEVfU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfQkxFX1JFRzogTUlYX0JJQVNfQkxFX1NFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfQkxFX1JFR19NSVhfQklBU19CTEVfU0VUX01zayAoMHhmVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfQkxFX1JFRzogTUlYX0JJQVNfQkxFX1NFVCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUdfQ1BfQklBU19CTEVfU0VUX1BvcyAoNFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0JMRV9SRUc6IENQX0JJQVNfQkxFX1NFVCAoQml0IDQpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUdfQ1BfQklBU19CTEVfU0VUX01zayAoMHhmMFVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0JMRV9SRUc6IENQX0JJQVNfQkxFX1NFVCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUdfVkNPX0JJQVNfQkxFX1NFVF9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0JMRV9SRUc6IFZDT19CSUFTX0JMRV9TRVQgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9CSUFTX0NUUkwxX0JMRV9SRUdfVkNPX0JJQVNfQkxFX1NFVF9Nc2sgKDB4ZjAwVUwpICAgICAgIC8qITwgUkZDVSBSRl9CSUFTX0NUUkwxX0JMRV9SRUc6IFZDT19CSUFTX0JMRV9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9CTEVfUkVHX0lGRl9CSUFTX0JMRV9TRVRfUG9zICgxMlVMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9CTEVfUkVHOiBJRkZfQklBU19CTEVfU0VUIChCaXQgMTIpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9CTEVfUkVHX0lGRl9CSUFTX0JMRV9TRVRfTXNrICgweGYwMDBVTCkgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9CTEVfUkVHOiBJRkZfQklBU19CTEVfU0VUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfTUlYX0JJQVNfRlRERl9TRVRfUG9zICgwVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IE1JWF9CSUFTX0ZUREZfU0VUIChCaXQgMCkgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfTUlYX0JJQVNfRlRERl9TRVRfTXNrICgweGZVTCkgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IE1JWF9CSUFTX0ZUREZfU0VUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfQ1BfQklBU19GVERGX1NFVF9Qb3MgKDRVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IENQX0JJQVNfRlRERl9TRVQgKEJpdCA0KSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0JJQVNfQ1RSTDFfRlRERl9SRUdfQ1BfQklBU19GVERGX1NFVF9Nc2sgKDB4ZjBVTCkgICAgICAgLyohPCBSRkNVIFJGX0JJQVNfQ1RSTDFfRlRERl9SRUc6IENQX0JJQVNfRlRERl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9GVERGX1JFR19WQ09fQklBU19GVERGX1NFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9GVERGX1JFRzogVkNPX0JJQVNfRlRERl9TRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9GVERGX1JFR19WQ09fQklBU19GVERGX1NFVF9Nc2sgKDB4ZjAwVUwpICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9GVERGX1JFRzogVkNPX0JJQVNfRlRERl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9GVERGX1JFR19JRkZfQklBU19GVERGX1NFVF9Qb3MgKDEyVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9GVERGX1JFRzogSUZGX0JJQVNfRlRERl9TRVQgKEJpdCAxMikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQklBU19DVFJMMV9GVERGX1JFR19JRkZfQklBU19GVERGX1NFVF9Nc2sgKDB4ZjAwMFVMKSAgICAvKiE8IFJGQ1UgUkZfQklBU19DVFJMMV9GVERGX1JFRzogSUZGX0JJQVNfRlRERl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9DQUxfQ0FQX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfQ0FMX0NBUCAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9DQUxfQ0FQX01zayAgKDB4MWZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfQ0FMX0NBUCAoQml0ZmllbGQtTWFzazogMHgxZikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9NVVRFX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfTVVURSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRl9NVVRFX01zayAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZfTVVURSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRkZfRENPQ19EQUNfRElTX1BvcyAoNlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZGX0RDT0NfREFDX0RJUyAoQml0IDYpICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NUUkwxX1JFR19JRkZfRENPQ19EQUNfRElTX01zayAoMHg0MFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NUUkwxX1JFRzogSUZGX0RDT0NfREFDX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX1JPX1RPX1BJTlNfUG9zICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBST19UT19QSU5TIChCaXQgNykgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX1JPX1RPX1BJTlNfTXNrICAoMHg4MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBST19UT19QSU5TIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX0lGX1NFTF9TRVQyX0dUX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBJRl9TRUxfU0VUMl9HVCAoQml0IDgpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX0lGX1NFTF9TRVQyX0dUX01zayAoMHhmMDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBJRl9TRUxfU0VUMl9HVCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX0lGX1NFTEVDVF9GU01fUG9zICgxMlVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBJRl9TRUxFQ1RfRlNNIChCaXQgMTIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX0lGX1NFTEVDVF9GU01fTXNrICgweDEwMDBVTCkgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBJRl9TRUxFQ1RfRlNNIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX0lGRl9DT01QTEVYX0RJU19Qb3MgKDEzVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBJRkZfQ09NUExFWF9ESVMgKEJpdCAxMykgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ1RSTDFfUkVHX0lGRl9DT01QTEVYX0RJU19Nc2sgKDB4MjAwMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ1RSTDFfUkVHOiBJRkZfQ09NUExFWF9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQURDX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwxX1JFR19BRENfRENfT0ZGU0VUX1NFTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwxX1JFRzogQURDX0RDX09GRlNFVF9TRUwgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwxX1JFR19BRENfRENfT0ZGU0VUX1NFTF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwxX1JFRzogQURDX0RDX09GRlNFVF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwxX1JFR19BRENfTVVURV9Qb3MgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwxX1JFRzogQURDX01VVEUgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwxX1JFR19BRENfTVVURV9Nc2sgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwxX1JFRzogQURDX01VVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwxX1JFR19BRENfU0lHTl9Qb3MgICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwxX1JFRzogQURDX1NJR04gKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwxX1JFR19BRENfU0lHTl9Nc2sgICAgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwxX1JFRzogQURDX1NJR04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQURDX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwyX1JFR19BRENfT0ZGUF9JX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwyX1JFRzogQURDX09GRlBfSV9XUiAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwyX1JFR19BRENfT0ZGUF9JX1dSX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwyX1JFRzogQURDX09GRlBfSV9XUiAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwyX1JFR19BRENfT0ZGTl9JX1dSX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwyX1JFRzogQURDX09GRk5fSV9XUiAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwyX1JFR19BRENfT0ZGTl9JX1dSX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwyX1JFRzogQURDX09GRk5fSV9XUiAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQURDX0NUUkwzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwzX1JFR19BRENfT0ZGUF9RX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwzX1JFRzogQURDX09GRlBfUV9XUiAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwzX1JFR19BRENfT0ZGUF9RX1dSX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwzX1JFRzogQURDX09GRlBfUV9XUiAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwzX1JFR19BRENfT0ZGTl9RX1dSX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwzX1JFRzogQURDX09GRk5fUV9XUiAoQml0IDgpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQURDX0NUUkwzX1JFR19BRENfT0ZGTl9RX1dSX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQURDX0NUUkwzX1JFRzogQURDX09GRk5fUV9XUiAoQml0ZmllbGQtTWFzazogMHhmZikgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1BBX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfUEFfQ1RSTF9SRUdfUEFfUkFNUFNQRUVEX0RPV05fUG9zICg1VUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEFfQ1RSTF9SRUc6IFBBX1JBTVBTUEVFRF9ET1dOIChCaXQgNSkgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfUEFfQ1RSTF9SRUdfUEFfUkFNUFNQRUVEX0RPV05fTXNrICgweDYwVUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfUEFfQ1RSTF9SRUc6IFBBX1JBTVBTUEVFRF9ET1dOIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1BBX0NUUkxfUkVHX1BBX1JBTVBTUEVFRF9VUF9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1BBX0NUUkxfUkVHOiBQQV9SQU1QU1BFRURfVVAgKEJpdCA3KSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1BBX0NUUkxfUkVHX1BBX1JBTVBTUEVFRF9VUF9Nc2sgKDB4MTgwVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1BBX0NUUkxfUkVHOiBQQV9SQU1QU1BFRURfVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAqLworI2RlZmluZSBSRkNVX1JGX1BBX0NUUkxfUkVHX1BBX0ZBU1RfRElTQ0hBUkdFX0VOX1BvcyAoOVVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1BBX0NUUkxfUkVHOiBQQV9GQVNUX0RJU0NIQVJHRV9FTiAoQml0IDkpICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1BBX0NUUkxfUkVHX1BBX0ZBU1RfRElTQ0hBUkdFX0VOX01zayAoMHgyMDBVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX1BBX0NUUkxfUkVHOiBQQV9GQVNUX0RJU0NIQVJHRV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9QQV9DVFJMX1JFR19MRVZFTF9MRE9fUkZQQV9Qb3MgKDExVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QQV9DVFJMX1JFRzogTEVWRUxfTERPX1JGUEEgKEJpdCAxMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QQV9DVFJMX1JFR19MRVZFTF9MRE9fUkZQQV9Nc2sgKDB4NzgwMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QQV9DVFJMX1JFRzogTEVWRUxfTERPX1JGUEEgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9NR0NfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9NR0NfQ1RSTF9SRUdfTUdDX0dBSU5fU0VUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NR0NfQ1RSTF9SRUc6IE1HQ19HQUlOX1NFVCAoQml0IDApICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NR0NfQ1RSTF9SRUdfTUdDX0dBSU5fU0VUX01zayAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NR0NfQ1RSTF9SRUc6IE1HQ19HQUlOX1NFVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NR0NfQ1RSTF9SRUdfTUdDX1BPTEVfU1dfUG9zICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NR0NfQ1RSTF9SRUc6IE1HQ19QT0xFX1NXIChCaXQgMSkgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NR0NfQ1RSTF9SRUdfTUdDX1BPTEVfU1dfTXNrICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NR0NfQ1RSTF9SRUc6IE1HQ19QT0xFX1NXIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NR0NfQ1RSTF9SRUdfR0FVU1NfREFDX0NUUkxfUG9zICgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NR0NfQ1RSTF9SRUc6IEdBVVNTX0RBQ19DVFJMIChCaXQgMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NR0NfQ1RSTF9SRUdfR0FVU1NfREFDX0NUUkxfTXNrICgweGNVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NR0NfQ1RSTF9SRUc6IEdBVVNTX0RBQ19DVFJMIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1ZDT1ZBUl9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YwIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjBfTXNrICgweDdVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YwIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjFfUG9zICgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YxIChCaXQgMykgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjFfTXNrICgweDM4VUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjJfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YyIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjJfTXNrICgweDFjMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YyIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjNfUG9zICg5VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YzIChCaXQgOSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfVFVORV9WQVJfVjNfTXNrICgweGUwMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IFRVTkVfVkFSX1YzIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfTU9EX1ZBUl9WMF9Qb3MgKDEyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IE1PRF9WQVJfVjAgKEJpdCAxMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfTU9EX1ZBUl9WMF9Nc2sgKDB4MzAwMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IE1PRF9WQVJfVjAgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfTU9EX1ZBUl9WMV9Qb3MgKDE0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IE1PRF9WQVJfVjEgKEJpdCAxNCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9WQ09WQVJfQ1RSTF9SRUdfTU9EX1ZBUl9WMV9Nc2sgKDB4YzAwMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9WQ09WQVJfQ1RSTF9SRUc6IE1PRF9WQVJfVjEgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9QRkRfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9QRkRfQ1RSTF9SRUdfRklYRURfQ1VSX1NFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QRkRfQ1RSTF9SRUc6IEZJWEVEX0NVUl9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QRkRfQ1RSTF9SRUdfRklYRURfQ1VSX1NFVF9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QRkRfQ1RSTF9SRUc6IEZJWEVEX0NVUl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QRkRfQ1RSTF9SRUdfRklYRURfQ1VSX0VOX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QRkRfQ1RSTF9SRUc6IEZJWEVEX0NVUl9FTiAoQml0IDIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QRkRfQ1RSTF9SRUdfRklYRURfQ1VSX0VOX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QRkRfQ1RSTF9SRUc6IEZJWEVEX0NVUl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QRkRfQ1RSTF9SRUdfUEZEX1BPTEFSSVRZX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QRkRfQ1RSTF9SRUc6IFBGRF9QT0xBUklUWSAoQml0IDMpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9QRkRfQ1RSTF9SRUdfUEZEX1BPTEFSSVRZX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9QRkRfQ1RSTF9SRUc6IFBGRF9QT0xBUklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUdfQ1BfQ1VSX1NFVF9CTEVfUlhfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0JMRV9SRUc6IENQX0NVUl9TRVRfQkxFX1JYIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0JMRV9SRUdfQ1BfQ1VSX1NFVF9CTEVfUlhfTXNrICgweGZVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0JMRV9SRUc6IENQX0NVUl9TRVRfQkxFX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFR19DUF9DVVJfU0VUX0JMRV9UWF9Qb3MgKDRVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfQkxFX1JFRzogQ1BfQ1VSX1NFVF9CTEVfVFggKEJpdCA0KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFR19DUF9DVVJfU0VUX0JMRV9UWF9Nc2sgKDB4ZjBVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfQkxFX1JFRzogQ1BfQ1VSX1NFVF9CTEVfVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9CTEVfUkVHX0NQX0NVUl9CTEVfUlhfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9CTEVfUkVHOiBDUF9DVVJfQkxFX1JYIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9CTEVfUkVHX0NQX0NVUl9CTEVfUlhfTXNrICgweGYwMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9CTEVfUkVHOiBDUF9DVVJfQkxFX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFR19DUF9DVVJfQkxFX1RYX1BvcyAoMTJVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfQkxFX1JFRzogQ1BfQ1VSX0JMRV9UWCAoQml0IDEyKSAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfQkxFX1JFR19DUF9DVVJfQkxFX1RYX01zayAoMHhmMDAwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfQkxFX1JFRzogQ1BfQ1VSX0JMRV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfQ1BfQ1RSTF9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0ZUREZfUkVHX0NQX0NVUl9TRVRfRlRERl9SWF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0ZUREZfUkVHOiBDUF9DVVJfU0VUX0ZUREZfUlggKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9DUF9DVFJMX0ZUREZfUkVHX0NQX0NVUl9TRVRfRlRERl9SWF9Nc2sgKDB4ZlVMKSAgICAgICAgIC8qITwgUkZDVSBSRl9DUF9DVFJMX0ZUREZfUkVHOiBDUF9DVVJfU0VUX0ZUREZfUlggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9GVERGX1JFR19DUF9DVVJfU0VUX0ZUREZfVFhfUG9zICg0VUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9GVERGX1JFRzogQ1BfQ1VSX1NFVF9GVERGX1RYIChCaXQgNCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfQ1BfQ1RSTF9GVERGX1JFR19DUF9DVVJfU0VUX0ZUREZfVFhfTXNrICgweGYwVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfQ1BfQ1RSTF9GVERGX1JFRzogQ1BfQ1VSX1NFVF9GVERGX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUdfQ1BfQ1VSX0ZUREZfUlhfUG9zICg4VUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfRlRERl9SRUc6IENQX0NVUl9GVERGX1JYIChCaXQgOCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUdfQ1BfQ1VSX0ZUREZfUlhfTXNrICgweGYwMFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfRlRERl9SRUc6IENQX0NVUl9GVERGX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUdfQ1BfQ1VSX0ZUREZfVFhfUG9zICgxMlVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfRlRERl9SRUc6IENQX0NVUl9GVERGX1RYIChCaXQgMTIpICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0NQX0NUUkxfRlRERl9SRUdfQ1BfQ1VSX0ZUREZfVFhfTXNrICgweGYwMDBVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX0NQX0NUUkxfRlRERl9SRUc6IENQX0NVUl9GVERGX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX1NFVF9CTEVfUlhfUG9zICgwVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19TRVRfQkxFX1JYIChCaXQgMCkgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX1NFVF9CTEVfUlhfTXNrICgweGZVTCkgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19TRVRfQkxFX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX1NFVF9CTEVfVFhfUG9zICg0VUwpICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19TRVRfQkxFX1RYIChCaXQgNCkgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX1NFVF9CTEVfVFhfTXNrICgweGYwVUwpICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19TRVRfQkxFX1RYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX0JMRV9SWF9Qb3MgKDhVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19CTEVfUlggKEJpdCA4KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0JMRV9SRUdfTEZfUkVTX0JMRV9SWF9Nc2sgKDB4ZjAwVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0JMRV9SRUc6IExGX1JFU19CTEVfUlggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfUkVTX0NUUkxfQkxFX1JFR19MRl9SRVNfQkxFX1RYX1BvcyAoMTJVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfUkVTX0NUUkxfQkxFX1JFRzogTEZfUkVTX0JMRV9UWCAoQml0IDEyKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfUkVTX0NUUkxfQkxFX1JFR19MRl9SRVNfQkxFX1RYX01zayAoMHhmMDAwVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfUkVTX0NUUkxfQkxFX1JFRzogTEZfUkVTX0JMRV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFR19MRl9SRVNfU0VUX0ZUREZfUlhfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRzogTEZfUkVTX1NFVF9GVERGX1JYIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9SRVNfQ1RSTF9GVERGX1JFR19MRl9SRVNfU0VUX0ZUREZfUlhfTXNrICgweGZVTCkgICAgIC8qITwgUkZDVSBSRl9MRl9SRVNfQ1RSTF9GVERGX1JFRzogTEZfUkVTX1NFVF9GVERGX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHX0xGX1JFU19TRVRfRlRERl9UWF9Qb3MgKDRVTCkgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOiBMRl9SRVNfU0VUX0ZUREZfVFggKEJpdCA0KSAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHX0xGX1JFU19TRVRfRlRERl9UWF9Nc2sgKDB4ZjBVTCkgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOiBMRl9SRVNfU0VUX0ZUREZfVFggKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfUkVTX0NUUkxfRlRERl9SRUdfTEZfUkVTX0ZUREZfUlhfUG9zICg4VUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTEZfUkVTX0NUUkxfRlRERl9SRUc6IExGX1JFU19GVERGX1JYIChCaXQgOCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTEZfUkVTX0NUUkxfRlRERl9SRUdfTEZfUkVTX0ZUREZfUlhfTXNrICgweGYwMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfTEZfUkVTX0NUUkxfRlRERl9SRUc6IExGX1JFU19GVERGX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHX0xGX1JFU19GVERGX1RYX1BvcyAoMTJVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOiBMRl9SRVNfRlRERl9UWCAoQml0IDEyKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX1JFU19DVFJMX0ZUREZfUkVHX0xGX1JFU19GVERGX1RYX01zayAoMHhmMDAwVUwpICAgICAgLyohPCBSRkNVIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHOiBMRl9SRVNfRlRERl9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9UUklNX0dNQklBU19CTEVfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfVFJJTV9HTUJJQVNfQkxFIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9UUklNX0dNQklBU19CTEVfTXNrICgweGZVTCkgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfVFJJTV9HTUJJQVNfQkxFIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0JMRV9SRUdfTUlYX1RSSU1fSUJJQVNfQkxFX1BvcyAoNFVMKSAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0JMRV9SRUc6IE1JWF9UUklNX0lCSUFTX0JMRSAoQml0IDQpICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0JMRV9SRUdfTUlYX1RSSU1fSUJJQVNfQkxFX01zayAoMHhmMFVMKSAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0JMRV9SRUc6IE1JWF9UUklNX0lCSUFTX0JMRSAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9UUklNX1ZDTV9CTEVfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfVFJJTV9WQ01fQkxFIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9CTEVfUkVHX01JWF9UUklNX1ZDTV9CTEVfTXNrICgweGYwMFVMKSAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHOiBNSVhfVFJJTV9WQ01fQkxFIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0JMRV9SRUdfTUlYX1NQQVJFX0JMRV9Qb3MgKDEyVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0JMRV9SRUc6IE1JWF9TUEFSRV9CTEUgKEJpdCAxMikgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0JMRV9SRUdfTUlYX1NQQVJFX0JMRV9Nc2sgKDB4ZjAwMFVMKSAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0JMRV9SRUc6IE1JWF9TUEFSRV9CTEUgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUdfTUlYX1RSSU1fR01CSUFTX0ZUREZfUG9zICgwVUwpICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUc6IE1JWF9UUklNX0dNQklBU19GVERGIChCaXQgMCkgICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUdfTUlYX1RSSU1fR01CSUFTX0ZUREZfTXNrICgweGZVTCkgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUc6IE1JWF9UUklNX0dNQklBU19GVERGIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0ZUREZfUkVHX01JWF9UUklNX0lCSUFTX0ZUREZfUG9zICg0VUwpICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOiBNSVhfVFJJTV9JQklBU19GVERGIChCaXQgNCkgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0ZUREZfUkVHX01JWF9UUklNX0lCSUFTX0ZUREZfTXNrICgweGYwVUwpICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOiBNSVhfVFJJTV9JQklBU19GVERGIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0ZUREZfUkVHX01JWF9UUklNX1ZDTV9GVERGX1BvcyAoOFVMKSAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOiBNSVhfVFJJTV9WQ01fRlRERiAoQml0IDgpICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwxX0ZUREZfUkVHX01JWF9UUklNX1ZDTV9GVERGX01zayAoMHhmMDBVTCkgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwxX0ZUREZfUkVHOiBNSVhfVFJJTV9WQ01fRlRERiAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFR19NSVhfU1BBUkVfUG9zICgxMlVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzogTUlYX1NQQVJFIChCaXQgMTIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9NSVhFUl9DVFJMMV9GVERGX1JFR19NSVhfU1BBUkVfTXNrICgweGYwMDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9NSVhFUl9DVFJMMV9GVERGX1JFRzogTUlYX1NQQVJFIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTUlYRVJfQ1RSTDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwyX1JFR19NSVhfQ0FMX0NBUF9XUl9CTEVfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwyX1JFRzogTUlYX0NBTF9DQVBfV1JfQkxFIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwyX1JFR19NSVhfQ0FMX0NBUF9XUl9CTEVfTXNrICgweDFmVUwpICAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwyX1JFRzogTUlYX0NBTF9DQVBfV1JfQkxFIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwyX1JFR19NSVhfQ0FMX1NFTEVDVF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwyX1JFRzogTUlYX0NBTF9TRUxFQ1QgKEJpdCA1KSAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWEVSX0NUUkwyX1JFR19NSVhfQ0FMX1NFTEVDVF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX01JWEVSX0NUUkwyX1JFRzogTUlYX0NBTF9TRUxFQ1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDJfUkVHX01JWF9DQUxfQ0FQX1dSX0ZUREZfUG9zICg2VUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDJfUkVHOiBNSVhfQ0FMX0NBUF9XUl9GVERGIChCaXQgNikgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTUlYRVJfQ1RSTDJfUkVHX01JWF9DQUxfQ0FQX1dSX0ZUREZfTXNrICgweDdjMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfTUlYRVJfQ1RSTDJfUkVHOiBNSVhfQ0FMX0NBUF9XUl9GVERGIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MRl9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0xGX0NUUkxfUkVHX0xGX0NBTF9DQVBfV1JfQkxFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX0NUUkxfUkVHOiBMRl9DQUxfQ0FQX1dSX0JMRSAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX0NUUkxfUkVHX0xGX0NBTF9DQVBfV1JfQkxFX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX0NUUkxfUkVHOiBMRl9DQUxfQ0FQX1dSX0JMRSAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9DQUxfQ0FQX1NFTF9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfQ0FMX0NBUF9TRUwgKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9DQUxfQ0FQX1NFTF9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfQ0FMX0NBUF9TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9TSE9SVF9SNF9CTEVfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfU0hPUlRfUjRfQkxFIChCaXQgNikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9TSE9SVF9SNF9CTEVfTXNrICgweDQwVUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfU0hPUlRfUjRfQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9TSE9SVF9SNF9GVERGX1BvcyAoN1VMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfU0hPUlRfUjRfRlRERiAoQml0IDcpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9TSE9SVF9SNF9GVERGX01zayAoMHg4MFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfU0hPUlRfUjRfRlRERiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9DQUxfQ0FQX1dSX0ZUREZfUG9zICg4VUwpICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfQ0FMX0NBUF9XUl9GVERGIChCaXQgOCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DVFJMX1JFR19MRl9DQUxfQ0FQX1dSX0ZUREZfTXNrICgweDFmMDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DVFJMX1JFRzogTEZfQ0FMX0NBUF9XUl9GVERGIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1REQ19DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DVFJMX0ZBU1RfUG9zICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ1RSTF9GQVNUIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DVFJMX0ZBU1RfTXNrICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ1RSTF9GQVNUIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DVFJMX1NMT1dfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ1RSTF9TTE9XIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DVFJMX1NMT1dfTXNrICAgICgweGYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ1RSTF9TTE9XIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DQUxfUEhfMV9Qb3MgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ0FMX1BIXzEgKEJpdCA4KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DQUxfUEhfMV9Nc2sgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ0FMX1BIXzEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DQUxfUEhfMl9Qb3MgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ0FMX1BIXzIgKEJpdCA5KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19DQUxfUEhfMl9Nc2sgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogQ0FMX1BIXzIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19SRUZfQ1RSTF9Qb3MgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogUkVGX0NUUkwgKEJpdCAxMCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19SRUZfQ1RSTF9Nc2sgICAgICgweGMwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogUkVGX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19URENfQ09OTkVDVF9Qb3MgICgxMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogVERDX0NPTk5FQ1QgKEJpdCAxMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1REQ19DVFJMX1JFR19URENfQ09OTkVDVF9Nc2sgICgweDEwMDBVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1REQ19DVFJMX1JFRzogVERDX0NPTk5FQ1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0lPX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lPX0NUUkwxX1JFR19SRklPX1RSSU0xX0NBUF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lPX0NUUkwxX1JFRzogUkZJT19UUklNMV9DQVAgKEJpdCAwKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lPX0NUUkwxX1JFR19SRklPX1RSSU0xX0NBUF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lPX0NUUkwxX1JFRzogUkZJT19UUklNMV9DQVAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0xOQV9DVFJMMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMV9SRUdfTE5BX1RSSU1fQ0RfTEZfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMV9SRUc6IExOQV9UUklNX0NEX0xGIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMV9SRUdfTE5BX1RSSU1fQ0RfTEZfTXNrICgweDNmVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMV9SRUc6IExOQV9UUklNX0NEX0xGIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMV9SRUdfTE5BX1RSSU1fQ0RfSEZfUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMV9SRUc6IExOQV9UUklNX0NEX0hGIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMV9SRUdfTE5BX1RSSU1fQ0RfSEZfTXNrICgweGZjMFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMV9SRUc6IExOQV9UUklNX0NEX0hGIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0xOQV9DVFJMMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMl9SRUdfTE5BX1RSSU1fR01fSElfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMl9SRUc6IExOQV9UUklNX0dNX0hJIChCaXQgMCkgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMl9SRUdfTE5BX1RSSU1fR01fSElfTXNrICgweDNmVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMl9SRUc6IExOQV9UUklNX0dNX0hJIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMl9SRUdfTE5BX1RSSU1fR01fTE9fUG9zICg2VUwpICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMl9SRUc6IExOQV9UUklNX0dNX0xPIChCaXQgNikgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMMl9SRUdfTE5BX1RSSU1fR01fTE9fTXNrICgweGZjMFVMKSAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMMl9SRUc6IExOQV9UUklNX0dNX0xPIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0xOQV9DVFJMM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMM19SRUdfTE5BX1RSSU1fQ0dTX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMM19SRUc6IExOQV9UUklNX0NHUyAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xOQV9DVFJMM19SRUdfTE5BX1RSSU1fQ0dTX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xOQV9DVFJMM19SRUc6IExOQV9UUklNX0NHUyAoQml0ZmllbGQtTWFzazogMHgxZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9WQ09fQU1QX0NUUkwxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1ZDT19BTVBfQ1RSTDFfUkVHX1ZDT19BTVBMX01PREVfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1ZDT19BTVBfQ1RSTDFfUkVHOiBWQ09fQU1QTF9NT0RFIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1ZDT19BTVBfQ1RSTDFfUkVHX1ZDT19BTVBMX01PREVfTXNrICgweDdmVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX1ZDT19BTVBfQ1RSTDFfUkVHOiBWQ09fQU1QTF9NT0RFIChCaXRmaWVsZC1NYXNrOiAweDdmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9WQ09fQU1QX0NUUkwyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1ZDT19BTVBfQ1RSTDJfUkVHX1ZDT19BTVBMX1NFVF9UWF9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1ZDT19BTVBfQ1RSTDJfUkVHOiBWQ09fQU1QTF9TRVRfVFggKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1ZDT19BTVBfQ1RSTDJfUkVHX1ZDT19BTVBMX1NFVF9UWF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX1ZDT19BTVBfQ1RSTDJfUkVHOiBWQ09fQU1QTF9TRVRfVFggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPX0FNUF9DVFJMMl9SRUdfVkNPX0FNUExfU0VUX1JYX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPX0FNUF9DVFJMMl9SRUc6IFZDT19BTVBMX1NFVF9SWCAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVkNPX0FNUF9DVFJMMl9SRUdfVkNPX0FNUExfU0VUX1JYX01zayAoMHhmZjAwVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVkNPX0FNUF9DVFJMMl9SRUc6IFZDT19BTVBMX1NFVF9SWCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfQkxFX1JFR19UWF9QT1dFUl9TRVRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfQkxFX1JFRzogVFhfUE9XRVJfU0VUIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfQkxFX1JFR19UWF9QT1dFUl9TRVRfTXNrICgweDdVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfQkxFX1JFRzogVFhfUE9XRVJfU0VUIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhfUFdSX0xVVF8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfTXNrICgweDNVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMV9SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMV9SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfMV9SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX01zayAoMHgzY1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfMV9SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX1BvcyAoNlVMKSAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0IDYpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX01zayAoMHg3YzBVTCkgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Qb3MgKDExVUwpICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdCAxMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzFfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Nc2sgKDB4ODAwVUwpIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzFfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9MVVRfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX01zayAoMHgzVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzJfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Qb3MgKDJVTCkgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzJfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzJfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Nc2sgKDB4M2NVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzJfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Qb3MgKDZVTCkgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdCA2KSAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Nc2sgKDB4N2MwVUwpICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfUG9zICgxMVVMKSAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXQgMTEpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8yX1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfTXNrICgweDgwMFVMKSAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8yX1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfTFVUXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Nc2sgKDB4M1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8zX1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfUG9zICgyVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8zX1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXQgMikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF8zX1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfTXNrICgweDNjVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF8zX1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfUG9zICg2VUwpICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXQgNikgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfTXNrICgweDdjMFVMKSAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX1BvcyAoMTFVTCkgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0IDExKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfM19SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX01zayAoMHg4MDBVTCkgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfM19SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhfUFdSX0xVVF80X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfTXNrICgweDNVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNF9SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNF9SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNF9SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX01zayAoMHgzY1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNF9SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX1BvcyAoNlVMKSAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0IDYpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX01zayAoMHg3YzBVTCkgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Qb3MgKDExVUwpICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdCAxMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzRfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Nc2sgKDB4ODAwVUwpIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzRfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9MVVRfNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZfSU9fQ1RSTDFfUkVHX01zayAoMHgzVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGX0lPX0NUUkwxX1JFRyAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzVfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Qb3MgKDJVTCkgICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzVfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdCAyKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzVfUkVHX1RYX1BXUl9SRl9QQV9DVFJMX1JFR19Nc2sgKDB4M2NVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzVfUkVHOiBUWF9QV1JfUkZfUEFfQ1RSTF9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Qb3MgKDZVTCkgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdCA2KSAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZfTE5BX0NUUkwzX1JFR19Nc2sgKDB4N2MwVUwpICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGX0xOQV9DVFJMM19SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfUG9zICgxMVVMKSAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXQgMTEpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF81X1JFR19UWF9QV1JfUkZJT19UWFJYX0RDRl9ESVNfTXNrICgweDgwMFVMKSAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF81X1JFRzogVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfTFVUXzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGX0lPX0NUUkwxX1JFR19Nc2sgKDB4M1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRl9JT19DVFJMMV9SRUcgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF82X1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfUG9zICgyVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF82X1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXQgMikgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF82X1JFR19UWF9QV1JfUkZfUEFfQ1RSTF9SRUdfTXNrICgweDNjVUwpICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF82X1JFRzogVFhfUFdSX1JGX1BBX0NUUkxfUkVHIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfUG9zICg2VUwpICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXQgNikgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGX0xOQV9DVFJMM19SRUdfTXNrICgweDdjMFVMKSAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX1BvcyAoMTFVTCkgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0IDExKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfNl9SRUdfVFhfUFdSX1JGSU9fVFhSWF9EQ0ZfRElTX01zayAoMHg4MDBVTCkgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfNl9SRUc6IFRYX1BXUl9SRklPX1RYUlhfRENGX0RJUyAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhfUFdSX0xVVF83X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRl9JT19DVFJMMV9SRUdfTXNrICgweDNVTCkgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZfSU9fQ1RSTDFfUkVHIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfN19SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX1BvcyAoMlVMKSAgICAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfN19SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0IDIpICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYX1BXUl9MVVRfN19SRUdfVFhfUFdSX1JGX1BBX0NUUkxfUkVHX01zayAoMHgzY1VMKSAgICAgLyohPCBSRkNVIFJGX1RYX1BXUl9MVVRfN19SRUc6IFRYX1BXUl9SRl9QQV9DVFJMX1JFRyAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX1BvcyAoNlVMKSAgICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0IDYpICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRl9MTkFfQ1RSTDNfUkVHX01zayAoMHg3YzBVTCkgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZfTE5BX0NUUkwzX1JFRyAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Qb3MgKDExVUwpICAgIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdCAxMSkgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWF9QV1JfTFVUXzdfUkVHX1RYX1BXUl9SRklPX1RYUlhfRENGX0RJU19Nc2sgKDB4ODAwVUwpIC8qITwgUkZDVSBSRl9UWF9QV1JfTFVUXzdfUkVHOiBUWF9QV1JfUkZJT19UWFJYX0RDRl9ESVMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9UWF9QV1JfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0ZUREZfUkVHX1RYX1BPV0VSX1NFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0ZUREZfUkVHOiBUWF9QT1dFUl9TRVQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0ZUREZfUkVHX1RYX1BPV0VSX1NFVF9Nc2sgKDB4N1VMKSAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0ZUREZfUkVHOiBUWF9QT1dFUl9TRVQgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYX1BXUl9MVVRfUkRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF9SRF9SRUdfUkZfVFhfUFdSX0xVVF9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF9SRF9SRUc6IFJGX1RYX1BXUl9MVVRfUkQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhfUFdSX0xVVF9SRF9SRUdfUkZfVFhfUFdSX0xVVF9SRF9Nc2sgKDB4ZmZmVUwpICAgICAgICAvKiE8IFJGQ1UgUkZfVFhfUFdSX0xVVF9SRF9SRUc6IFJGX1RYX1BXUl9MVVRfUkQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX0RJVl9JUV9SWF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0RJVl9JUV9SWF9SRUdfRElWMl9PRkZOX1RSSU1fUlhfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0RJVl9JUV9SWF9SRUc6IERJVjJfT0ZGTl9UUklNX1JYIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0RJVl9JUV9SWF9SRUdfRElWMl9PRkZOX1RSSU1fUlhfTXNrICgweGZVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0RJVl9JUV9SWF9SRUc6IERJVjJfT0ZGTl9UUklNX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0RJVl9JUV9SWF9SRUdfRElWMl9PRkZQX1RSSU1fUlhfUG9zICg0VUwpICAgICAgICAgICAgICAgLyohPCBSRkNVIFJGX0RJVl9JUV9SWF9SRUc6IERJVjJfT0ZGUF9UUklNX1JYIChCaXQgNCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0RJVl9JUV9SWF9SRUdfRElWMl9PRkZQX1RSSU1fUlhfTXNrICgweGYwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0RJVl9JUV9SWF9SRUc6IERJVjJfT0ZGUF9UUklNX1JYIChCaXRmaWVsZC1NYXNrOiAweDBmKSAqLworI2RlZmluZSBSRkNVX1JGX0RJVl9JUV9SWF9SRUdfRElWMl9JUV9UUklNX1JYX1NQQVJFX1BvcyAoOFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX0RJVl9JUV9SWF9SRUc6IERJVjJfSVFfVFJJTV9SWF9TUEFSRSAoQml0IDgpICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0RJVl9JUV9SWF9SRUdfRElWMl9JUV9UUklNX1JYX1NQQVJFX01zayAoMHgxMDBVTCkgICAgICAgLyohPCBSRkNVIFJGX0RJVl9JUV9SWF9SRUc6IERJVjJfSVFfVFJJTV9SWF9TUEFSRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9ESVZfSVFfVFhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfVFhfUkVHX0RJVjJfT0ZGTl9UUklNX1RYX1BvcyAoMFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfVFhfUkVHOiBESVYyX09GRk5fVFJJTV9UWCAoQml0IDApICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfVFhfUkVHX0RJVjJfT0ZGTl9UUklNX1RYX01zayAoMHhmVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfVFhfUkVHOiBESVYyX09GRk5fVFJJTV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfVFhfUkVHX0RJVjJfT0ZGUF9UUklNX1RYX1BvcyAoNFVMKSAgICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfVFhfUkVHOiBESVYyX09GRlBfVFJJTV9UWCAoQml0IDQpICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfVFhfUkVHX0RJVjJfT0ZGUF9UUklNX1RYX01zayAoMHhmMFVMKSAgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfVFhfUkVHOiBESVYyX09GRlBfVFJJTV9UWCAoQml0ZmllbGQtTWFzazogMHgwZikgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfVFhfUkVHX0RJVjJfSVFfVFJJTV9UWF9TUEFSRV9Qb3MgKDhVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfVFhfUkVHOiBESVYyX0lRX1RSSU1fVFhfU1BBUkUgKEJpdCA4KSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9ESVZfSVFfVFhfUkVHX0RJVjJfSVFfVFJJTV9UWF9TUEFSRV9Nc2sgKDB4MTAwVUwpICAgICAgIC8qITwgUkZDVSBSRl9ESVZfSVFfVFhfUkVHOiBESVYyX0lRX1RSSU1fVFhfU1BBUkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MT19JUV9UUklNX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfTE9fSVFfVFJJTV9SRUdfUkZfTE9fSVFfVFJJTV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTE9fSVFfVFJJTV9SRUc6IFJGX0xPX0lRX1RSSU0gKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfTE9fSVFfVFJJTV9SRUdfUkZfTE9fSVFfVFJJTV9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfTE9fSVFfVFJJTV9SRUc6IFJGX0xPX0lRX1RSSU0gKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1JGX1RYREFDX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DVFJMX1JFR19UWERBQ19DQUxfQ0FQX1dSX0JMRV9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVSBSRl9UWERBQ19DVFJMX1JFRzogVFhEQUNfQ0FMX0NBUF9XUl9CTEUgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DVFJMX1JFR19UWERBQ19DQUxfQ0FQX1dSX0JMRV9Nc2sgKDB4MWZVTCkgICAgICAgIC8qITwgUkZDVSBSRl9UWERBQ19DVFJMX1JFRzogVFhEQUNfQ0FMX0NBUF9XUl9CTEUgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ1RSTF9SRUdfVFhEQUNfQ0FMX0NBUF9TRUxfUG9zICg1VUwpICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ1RSTF9SRUc6IFRYREFDX0NBTF9DQVBfU0VMIChCaXQgNSkgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ1RSTF9SRUdfVFhEQUNfQ0FMX0NBUF9TRUxfTXNrICgweDIwVUwpICAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ1RSTF9SRUc6IFRYREFDX0NBTF9DQVBfU0VMIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NUUkxfUkVHX1RYREFDX0ZJWEVEX0NBUF9PTl9Qb3MgKDZVTCkgICAgICAgICAgICAgLyohPCBSRkNVIFJGX1RYREFDX0NUUkxfUkVHOiBUWERBQ19GSVhFRF9DQVBfT04gKEJpdCA2KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NUUkxfUkVHX1RYREFDX0ZJWEVEX0NBUF9PTl9Nc2sgKDB4NDBVTCkgICAgICAgICAgLyohPCBSRkNVIFJGX1RYREFDX0NUUkxfUkVHOiBUWERBQ19GSVhFRF9DQVBfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ1RSTF9SRUdfVFhEQUNfQ0FMX0NBUF9XUl9GVERGX1BvcyAoN1VMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ1RSTF9SRUc6IFRYREFDX0NBTF9DQVBfV1JfRlRERiAoQml0IDcpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ1RSTF9SRUdfVFhEQUNfQ0FMX0NBUF9XUl9GVERGX01zayAoMHhmODBVTCkgICAgICAvKiE8IFJGQ1UgUkZfVFhEQUNfQ1RSTF9SRUc6IFRYREFDX0NBTF9DQVBfV1JfRlRERiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHX1RYREFDX0NBTF9DQVBfUkRfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVSBSRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHOiBUWERBQ19DQUxfQ0FQX1JEIChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHX1RYREFDX0NBTF9DQVBfUkRfTXNrICgweDFmVUwpICAgIC8qITwgUkZDVSBSRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHOiBUWERBQ19DQUxfQ0FQX1JEIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX1RYREFDX0NBTF9DQVBfU1RBVF9SRUdfVFhEQUNfRklYRURfQ0FQX09OX1JEX1BvcyAoNVVMKSAgLyohPCBSRkNVIFJGX1RYREFDX0NBTF9DQVBfU1RBVF9SRUc6IFRYREFDX0ZJWEVEX0NBUF9PTl9SRCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUkZfVFhEQUNfQ0FMX0NBUF9TVEFUX1JFR19UWERBQ19GSVhFRF9DQVBfT05fUkRfTXNrICgweDIwVUwpIC8qITwgUkZDVSBSRl9UWERBQ19DQUxfQ0FQX1NUQVRfUkVHOiBUWERBQ19GSVhFRF9DQVBfT05fUkQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9JRkZfUkVTVUxUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX1JFU1VMVF9SRUdfSUZfQ0FMX0NBUF9SRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX1JFU1VMVF9SRUc6IElGX0NBTF9DQVBfUkQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX1JFU1VMVF9SRUdfSUZfQ0FMX0NBUF9SRF9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX1JFU1VMVF9SRUc6IElGX0NBTF9DQVBfUkQgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX0NDX0JMRV9TRVQxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NDX0JMRV9TRVQxX1JFR19JRl9DQUxfQ0FQX1dSX1BvcyAoMFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NDX0JMRV9TRVQxX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0IDApICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUkZfSUZGX0NDX0JMRV9TRVQxX1JFR19JRl9DQUxfQ0FQX1dSX01zayAoMHgxZlVMKSAgICAgICAgICAvKiE8IFJGQ1UgUkZfSUZGX0NDX0JMRV9TRVQxX1JFRzogSUZfQ0FMX0NBUF9XUiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9JRkZfQ0NfQkxFX1NFVDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0NfQkxFX1NFVDJfUkVHX0lGX0NBTF9DQVBfV1JfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0NfQkxFX1NFVDJfUkVHOiBJRl9DQUxfQ0FQX1dSIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9JRkZfQ0NfQkxFX1NFVDJfUkVHX0lGX0NBTF9DQVBfV1JfTXNrICgweDFmVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9JRkZfQ0NfQkxFX1NFVDJfUkVHOiBJRl9DQUxfQ0FQX1dSIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX0NDX0ZUREZfU0VUMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQ19GVERGX1NFVDFfUkVHX0lGX0NBTF9DQVBfV1JfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQ19GVERGX1NFVDFfUkVHOiBJRl9DQUxfQ0FQX1dSIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQ19GVERGX1NFVDFfUkVHX0lGX0NBTF9DQVBfV1JfTXNrICgweDFmVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQ19GVERGX1NFVDFfUkVHOiBJRl9DQUxfQ0FQX1dSIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX0NDX0ZUREZfU0VUMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQ19GVERGX1NFVDJfUkVHX0lGX0NBTF9DQVBfV1JfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQ19GVERGX1NFVDJfUkVHOiBJRl9DQUxfQ0FQX1dSIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQ19GVERGX1NFVDJfUkVHX0lGX0NBTF9DQVBfV1JfTXNrICgweDFmVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQ19GVERGX1NFVDJfUkVHOiBJRl9DQUxfQ0FQX1dSIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfSUZGX0NBTF9DQVBfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQUxfQ0FQX1NUQVRfUkVHX0lGX0NBTF9DQVBfUkRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQUxfQ0FQX1NUQVRfUkVHOiBJRl9DQUxfQ0FQX1JEIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0lGRl9DQUxfQ0FQX1NUQVRfUkVHX0lGX0NBTF9DQVBfUkRfTXNrICgweDFmVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0lGRl9DQUxfQ0FQX1NUQVRfUkVHOiBJRl9DQUxfQ0FQX1JEIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUkZfTUlYX0NBTF9DQVBfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1JGX01JWF9DQUxfQ0FQX1NUQVRfUkVHX01JWF9DQUxfQ0FQX1JEX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVIFJGX01JWF9DQUxfQ0FQX1NUQVRfUkVHOiBNSVhfQ0FMX0NBUF9SRCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX01JWF9DQUxfQ0FQX1NUQVRfUkVHX01JWF9DQUxfQ0FQX1JEX01zayAoMHgxZlVMKSAgICAgICAgLyohPCBSRkNVIFJGX01JWF9DQUxfQ0FQX1NUQVRfUkVHOiBNSVhfQ0FMX0NBUF9SRCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9SRl9MRl9DQUxfQ0FQX1NUQVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DQUxfQ0FQX1NUQVRfUkVHX0xGX0NBTF9DQVBfUkRfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DQUxfQ0FQX1NUQVRfUkVHOiBMRl9DQUxfQ0FQX1JEIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9SRl9MRl9DQUxfQ0FQX1NUQVRfUkVHX0xGX0NBTF9DQVBfUkRfTXNrICgweDFmVUwpICAgICAgICAgIC8qITwgUkZDVSBSRl9MRl9DQUxfQ0FQX1NUQVRfUkVHOiBMRl9DQUxfQ0FQX1JEIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1JGX0xGX0NBTF9DQVBfU1RBVF9SRUdfTEZfU0hPUlRfUjRfUkRfUG9zICg1VUwpICAgICAgICAgICAgLyohPCBSRkNVIFJGX0xGX0NBTF9DQVBfU1RBVF9SRUc6IExGX1NIT1JUX1I0X1JEIChCaXQgNSkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1JGX0xGX0NBTF9DQVBfU1RBVF9SRUdfTEZfU0hPUlRfUjRfUkRfTXNrICgweDIwVUwpICAgICAgICAgLyohPCBSRkNVIFJGX0xGX0NBTF9DQVBfU1RBVF9SRUc6IExGX1NIT1JUX1I0X1JEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgIHN0cnVjdCAnUkZDVV9QT1dFUicgUG9zaXRpb24gJiBNYXNrICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcwX1JFR19sbmFfbGRvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcwX1JFRzogbG5hX2xkb19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcwX1JFR19sbmFfbGRvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcwX1JFRzogbG5hX2xkb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzBfUkVHX2xuYV9sZG9fZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzBfUkVHOiBsbmFfbGRvX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzBfUkVHX2xuYV9sZG9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcwX1JFRzogbG5hX2xkb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzFfUkVHX2xuYV9jb3JlX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzFfUkVHOiBsbmFfY29yZV9lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxX1JFR19sbmFfY29yZV9lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMV9SRUc6IGxuYV9jb3JlX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMV9SRUdfbG5hX2NvcmVfZW5fZGNmX3R4X1BvcyAoNVVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMV9SRUc6IGxuYV9jb3JlX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzFfUkVHX2xuYV9jb3JlX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMV9SRUc6IGxuYV9jb3JlX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMl9SRUdfbG5hX2NnbV9lbl9kY2ZfcnhfUG9zICgwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMl9SRUc6IGxuYV9jZ21fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMl9SRUdfbG5hX2NnbV9lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMl9SRUc6IGxuYV9jZ21fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyX1JFR19sbmFfY2dtX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyX1JFRzogbG5hX2NnbV9lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyX1JFR19sbmFfY2dtX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMl9SRUc6IGxuYV9jZ21fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczX1JFR19taXhfbGRvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczX1JFRzogbWl4X2xkb19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczX1JFR19taXhfbGRvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczX1JFRzogbWl4X2xkb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzNfUkVHX21peF9sZG9fZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzNfUkVHOiBtaXhfbGRvX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzNfUkVHX21peF9sZG9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczX1JFRzogbWl4X2xkb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzRfUkVHX2lmZl9sZG9fZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzRfUkVHOiBpZmZfbGRvX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzRfUkVHX2lmZl9sZG9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzRfUkVHOiBpZmZfbGRvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNF9SRUdfaWZmX2xkb19lbl9kY2ZfdHhfUG9zICg1VUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNF9SRUc6IGlmZl9sZG9fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNF9SRUdfaWZmX2xkb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzRfUkVHOiBpZmZfbGRvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNV9SRUdfaWZmYWRjX2xkb19lbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNV9SRUc6IGlmZmFkY19sZG9fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNV9SRUdfaWZmYWRjX2xkb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNV9SRUc6IGlmZmFkY19sZG9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc1X1JFR19pZmZhZGNfbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc1X1JFRzogaWZmYWRjX2xkb19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc1X1JFR19pZmZhZGNfbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNV9SRUc6IGlmZmFkY19sZG9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc2X1JFR192Y29fbGRvX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc2X1JFRzogdmNvX2xkb19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc2X1JFR192Y29fbGRvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc2X1JFRzogdmNvX2xkb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzZfUkVHX3Zjb19sZG9fZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzZfUkVHOiB2Y29fbGRvX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzZfUkVHX3Zjb19sZG9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc2X1JFRzogdmNvX2xkb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzdfUkVHX21kX2xkb19lbl9kY2ZfcnhfUG9zICgwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzdfUkVHOiBtZF9sZG9fZW5fZGNmX3J4IChCaXQgMCkgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzdfUkVHX21kX2xkb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzdfUkVHOiBtZF9sZG9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc3X1JFR19tZF9sZG9fZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc3X1JFRzogbWRfbGRvX2VuX2RjZl90eCAoQml0IDUpICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc3X1JFR19tZF9sZG9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc3X1JFRzogbWRfbGRvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOF9SRUdfcGZkX2xkb19lbl9kY2ZfcnhfUG9zICgwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOF9SRUc6IHBmZF9sZG9fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOF9SRUdfcGZkX2xkb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOF9SRUc6IHBmZF9sZG9fZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc4X1JFR19wZmRfbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc4X1JFRzogcGZkX2xkb19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc4X1JFR19wZmRfbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOF9SRUc6IHBmZF9sZG9fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc5X1JFR19wYV9sZG9fZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc5X1JFRzogcGFfbGRvX2VuX2RjZl9yeCAoQml0IDApICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc5X1JFR19wYV9sZG9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc5X1JFRzogcGFfbGRvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOV9SRUdfcGFfbGRvX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOV9SRUc6IHBhX2xkb19lbl9kY2ZfdHggKEJpdCA1KSAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHOV9SRUdfcGFfbGRvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHOV9SRUc6IHBhX2xkb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEwX1JFR19jcF9zd2l0Y2hfZW5fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEwX1JFRzogY3Bfc3dpdGNoX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEwX1JFR19jcF9zd2l0Y2hfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEwX1JFRzogY3Bfc3dpdGNoX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTBfUkVHX2NwX3N3aXRjaF9lbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTBfUkVHOiBjcF9zd2l0Y2hfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTBfUkVHX2NwX3N3aXRjaF9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEwX1JFRzogY3Bfc3dpdGNoX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTFfUkVHX3Zjb19iaWFzX2VuX2RjZl9yeF9Qb3MgKDBVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTFfUkVHOiB2Y29fYmlhc19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMV9SRUdfdmNvX2JpYXNfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzExX1JFRzogdmNvX2JpYXNfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMV9SRUdfdmNvX2JpYXNfZW5fZGNmX3R4X1BvcyAoNVVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMV9SRUc6IHZjb19iaWFzX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzExX1JFR192Y29fYmlhc19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzExX1JFRzogdmNvX2JpYXNfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMl9SRUdfY3BfYmlhc19lbl9kY2ZfcnhfUG9zICgwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxMl9SRUc6IGNwX2JpYXNfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTJfUkVHX2NwX2JpYXNfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEyX1JFRzogY3BfYmlhc19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEyX1JFR19jcF9iaWFzX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEyX1JFRzogY3BfYmlhc19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxMl9SRUdfY3BfYmlhc19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEyX1JFRzogY3BfYmlhc19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEzX1JFR19sbmFfbGRvX3plcm9fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEzX1JFRzogbG5hX2xkb196ZXJvX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzEzX1JFR19sbmFfbGRvX3plcm9fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEzX1JFRzogbG5hX2xkb196ZXJvX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTNfUkVHX2xuYV9sZG9femVyb19kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTNfUkVHOiBsbmFfbGRvX3plcm9fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTNfUkVHX2xuYV9sZG9femVyb19kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzEzX1JFRzogbG5hX2xkb196ZXJvX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTRfUkVHX3BhX3JhbXBfZW5fZGNmX3J4X1BvcyAoMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTRfUkVHOiBwYV9yYW1wX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE0X1JFR19wYV9yYW1wX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNF9SRUc6IHBhX3JhbXBfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNF9SRUdfcGFfcmFtcF9lbl9kY2ZfdHhfUG9zICg1VUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNF9SRUc6IHBhX3JhbXBfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTRfUkVHX3BhX3JhbXBfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNF9SRUc6IHBhX3JhbXBfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNV9SRUdfcGFfZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNV9SRUc6IHBhX2VuX2RjZl9yeCAoQml0IDApICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxNV9SRUdfcGFfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxNV9SRUc6IHBhX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTVfUkVHX3BhX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTVfUkVHOiBwYV9lbl9kY2ZfdHggKEJpdCA1KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTVfUkVHX3BhX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTVfUkVHOiBwYV9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE2X1JFR19taXhfZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE2X1JFRzogbWl4X2VuX2RjZl9yeCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE2X1JFR19taXhfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE2X1JFRzogbWl4X2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTZfUkVHX21peF9lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTZfUkVHOiBtaXhfZW5fZGNmX3R4IChCaXQgNSkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTZfUkVHX21peF9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTZfUkVHOiBtaXhfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxN19SRUdfaWZmX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxN19SRUc6IGlmZl9lbl9kY2ZfcnggKEJpdCAwKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxN19SRUdfaWZmX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxN19SRUc6IGlmZl9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE3X1JFR19pZmZfZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE3X1JFRzogaWZmX2VuX2RjZl90eCAoQml0IDUpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE3X1JFR19pZmZfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE3X1JFRzogaWZmX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMThfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMThfUkVHX2FkY19lbl9kY2ZfcnhfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMThfUkVHOiBhZGNfZW5fZGNmX3J4IChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMThfUkVHX2FkY19lbl9kY2ZfcnhfTXNrICgweDFmVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMThfUkVHOiBhZGNfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxOF9SRUdfYWRjX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxOF9SRUc6IGFkY19lbl9kY2ZfdHggKEJpdCA1KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcxOF9SRUdfYWRjX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcxOF9SRUc6IGFkY19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE5X1JFR192Y29fZW5fZGNmX3J4X1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE5X1JFRzogdmNvX2VuX2RjZl9yeCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzE5X1JFR192Y29fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzE5X1JFRzogdmNvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTlfUkVHX3Zjb19lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTlfUkVHOiB2Y29fZW5fZGNmX3R4IChCaXQgNSkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMTlfUkVHX3Zjb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMTlfUkVHOiB2Y29fZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMF9SRUdfbG9idWZfbWRfZW5fZGNmX3J4X1BvcyAoMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMF9SRUc6IGxvYnVmX21kX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIwX1JFR19sb2J1Zl9tZF9lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjBfUkVHOiBsb2J1Zl9tZF9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIwX1JFR19sb2J1Zl9tZF9lbl9kY2ZfdHhfUG9zICg1VUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIwX1JFRzogbG9idWZfbWRfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjBfUkVHX2xvYnVmX21kX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjBfUkVHOiBsb2J1Zl9tZF9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIxX1JFR19jcF9lbl9kY2ZfcnhfUG9zICgwVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIxX1JFRzogY3BfZW5fZGNmX3J4IChCaXQgMCkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIxX1JFR19jcF9lbl9kY2ZfcnhfTXNrICgweDFmVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIxX1JFRzogY3BfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMV9SRUdfY3BfZW5fZGNmX3R4X1BvcyAoNVVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMV9SRUc6IGNwX2VuX2RjZl90eCAoQml0IDUpICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMV9SRUdfY3BfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMV9SRUc6IGNwX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjJfUkVHX3BmZF9lbl9kY2ZfcnhfUG9zICgwVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjJfUkVHOiBwZmRfZW5fZGNmX3J4IChCaXQgMCkgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjJfUkVHX3BmZF9lbl9kY2ZfcnhfTXNrICgweDFmVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjJfUkVHOiBwZmRfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMl9SRUdfcGZkX2VuX2RjZl90eF9Qb3MgKDVVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMl9SRUc6IHBmZF9lbl9kY2ZfdHggKEJpdCA1KSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyMl9SRUdfcGZkX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyMl9SRUc6IHBmZF9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUdfZ2F1c3NfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHOiBnYXVzc19lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFR19nYXVzc19lbl9ibGVfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUc6IGdhdXNzX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUdfZ2F1c3NfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHOiBnYXVzc19lbl9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFR19nYXVzc19lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHOiBnYXVzc19lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHX3JmaW9fdHhyeF9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUc6IHJmaW9fdHhyeF9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFR19yZmlvX3R4cnhfYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHOiByZmlvX3R4cnhfYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfQkxFX1JFR19yZmlvX3R4cnhfYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNF9CTEVfUkVHOiByZmlvX3R4cnhfYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUdfcmZpb190eHJ4X2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI0X0JMRV9SRUc6IHJmaW9fdHhyeF9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNV9SRUdfbG9idWZfcGFfZW5fZGNmX3J4X1BvcyAoMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNV9SRUc6IGxvYnVmX3BhX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI1X1JFR19sb2J1Zl9wYV9lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjVfUkVHOiBsb2J1Zl9wYV9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI1X1JFR19sb2J1Zl9wYV9lbl9kY2ZfdHhfUG9zICg1VUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI1X1JFRzogbG9idWZfcGFfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjVfUkVHX2xvYnVmX3BhX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjVfUkVHOiBsb2J1Zl9wYV9lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI2X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI2X1JFR19sb2J1Zl9yeGlxX2VuX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNl9SRUc6IGxvYnVmX3J4aXFfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjZfUkVHX2xvYnVmX3J4aXFfZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI2X1JFRzogbG9idWZfcnhpcV9lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI2X1JFR19sb2J1Zl9yeGlxX2VuX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNl9SRUc6IGxvYnVmX3J4aXFfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjZfUkVHX2xvYnVmX3J4aXFfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyNl9SRUc6IGxvYnVmX3J4aXFfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyN19SRUdfZGl2Ml9lbl9kY2ZfcnhfUG9zICgwVUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyN19SRUc6IGRpdjJfZW5fZGNmX3J4IChCaXQgMCkgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyN19SRUdfZGl2Ml9lbl9kY2ZfcnhfTXNrICgweDFmVUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyN19SRUc6IGRpdjJfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyN19SRUdfZGl2Ml9lbl9kY2ZfdHhfUG9zICg1VUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyN19SRUc6IGRpdjJfZW5fZGNmX3R4IChCaXQgNSkgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyN19SRUdfZGl2Ml9lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyN19SRUc6IGRpdjJfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOF9SRUdfY3BfYmlhc19zaF9vcGVuX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOF9SRUc6IGNwX2JpYXNfc2hfb3Blbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyOF9SRUdfY3BfYmlhc19zaF9vcGVuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOF9SRUc6IGNwX2JpYXNfc2hfb3Blbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI4X1JFR19jcF9iaWFzX3NoX29wZW5fZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI4X1JFRzogY3BfYmlhc19zaF9vcGVuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI4X1JFR19jcF9iaWFzX3NoX29wZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOF9SRUc6IGNwX2JpYXNfc2hfb3Blbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI5X1JFR192Y29fYmlhc19zaF9vcGVuX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOV9SRUc6IHZjb19iaWFzX3NoX29wZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjlfUkVHX3Zjb19iaWFzX3NoX29wZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI5X1JFRzogdmNvX2JpYXNfc2hfb3Blbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzI5X1JFR192Y29fYmlhc19zaF9vcGVuX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOV9SRUc6IHZjb19iaWFzX3NoX29wZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjlfUkVHX3Zjb19iaWFzX3NoX29wZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUcyOV9SRUc6IHZjb19iaWFzX3NoX29wZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMF9SRUdfaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzBfUkVHOiBpZmZtaXhfYmlhc19zaF9vcGVuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMwX1JFR19pZmZtaXhfYmlhc19zaF9vcGVuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczMF9SRUc6IGlmZm1peF9iaWFzX3NoX29wZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMF9SRUdfaWZmbWl4X2JpYXNfc2hfb3Blbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzBfUkVHOiBpZmZtaXhfYmlhc19zaF9vcGVuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMwX1JFR19pZmZtaXhfYmlhc19zaF9vcGVuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzBfUkVHOiBpZmZtaXhfYmlhc19zaF9vcGVuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMxX0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFR19nYXVzc19iaWFzX3NoX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFRzogZ2F1c3NfYmlhc19zaF9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFR19nYXVzc19iaWFzX3NoX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFRzogZ2F1c3NfYmlhc19zaF9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9CTEVfUkVHX2dhdXNzX2JpYXNfc2hfYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczMV9CTEVfUkVHOiBnYXVzc19iaWFzX3NoX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9CTEVfUkVHX2dhdXNzX2JpYXNfc2hfYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzFfQkxFX1JFRzogZ2F1c3NfYmlhc19zaF9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMl9SRUdfbWl4X2JpYXNfc2hfZGNmX3J4X1BvcyAoMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczMl9SRUc6IG1peF9iaWFzX3NoX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMyX1JFR19taXhfYmlhc19zaF9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzJfUkVHOiBtaXhfYmlhc19zaF9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMyX1JFR19taXhfYmlhc19zaF9kY2ZfdHhfUG9zICg1VUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMyX1JFRzogbWl4X2JpYXNfc2hfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzJfUkVHX21peF9iaWFzX3NoX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzJfUkVHOiBtaXhfYmlhc19zaF9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMzX1JFR19wbGxfZGlnX2VuX2RjZl9yeF9Qb3MgKDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMzX1JFRzogcGxsX2RpZ19lbl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczM19SRUdfcGxsX2RpZ19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzNfUkVHOiBwbGxfZGlnX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzNfUkVHX3BsbF9kaWdfZW5fZGNmX3R4X1BvcyAoNVVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzNfUkVHOiBwbGxfZGlnX2VuX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMzX1JFR19wbGxfZGlnX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzNfUkVHOiBwbGxfZGlnX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzRfUkVHX3BsbGNsb3NlZF9lbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzRfUkVHOiBwbGxjbG9zZWRfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzRfUkVHX3BsbGNsb3NlZF9lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzRfUkVHOiBwbGxjbG9zZWRfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNF9SRUdfcGxsY2xvc2VkX2VuX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNF9SRUc6IHBsbGNsb3NlZF9lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNF9SRUdfcGxsY2xvc2VkX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzRfUkVHOiBwbGxjbG9zZWRfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHX2RlbV9lbl9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUc6IGRlbV9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFR19kZW1fZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHOiBkZW1fZW5fYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzVfQkxFX1JFR19kZW1fZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9CTEVfUkVHOiBkZW1fZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUdfZGVtX2VuX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM1X0JMRV9SRUc6IGRlbV9lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczNl9SRUdfbGRvX3plcm9fZW5fZGNmX3J4X1BvcyAoMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNl9SRUc6IGxkb196ZXJvX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM2X1JFR19sZG9femVyb19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzZfUkVHOiBsZG9femVyb19lbl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM2X1JFR19sZG9femVyb19lbl9kY2ZfdHhfUG9zICg1VUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM2X1JFRzogbGRvX3plcm9fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzZfUkVHX2xkb196ZXJvX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzZfUkVHOiBsZG9femVyb19lbl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUdfY2FsX2VuX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFRzogY2FsX2VuX2JsZV9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHX2NhbF9lbl9ibGVfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUc6IGNhbF9lbl9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19CTEVfUkVHX2NhbF9lbl9ibGVfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM3X0JMRV9SRUc6IGNhbF9lbl9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFR19jYWxfZW5fYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzdfQkxFX1JFRzogY2FsX2VuX2JsZV9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUdfdGRjX2VuX2JsZV9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFRzogdGRjX2VuX2JsZV9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHX3RkY19lbl9ibGVfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUc6IHRkY19lbl9ibGVfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOF9CTEVfUkVHX3RkY19lbl9ibGVfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0JMRV9SRUc6IHRkY19lbl9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFR190ZGNfZW5fYmxlX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzhfQkxFX1JFRzogdGRjX2VuX2JsZV9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM5X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM5X1JFR19sZG9fcmZpb19lbl9kY2ZfcnhfUG9zICgwVUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM5X1JFRzogbGRvX3JmaW9fZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzlfUkVHX2xkb19yZmlvX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOV9SRUc6IGxkb19yZmlvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzlfUkVHX2xkb19yZmlvX2VuX2RjZl90eF9Qb3MgKDVVTCkgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzlfUkVHOiBsZG9fcmZpb19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOV9SRUdfbGRvX3JmaW9fZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczOV9SRUc6IGxkb19yZmlvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDBfUkVHX3JmaW9fYmlhc19lbl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDBfUkVHOiByZmlvX2JpYXNfZW5fZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDBfUkVHX3JmaW9fYmlhc19lbl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDBfUkVHOiByZmlvX2JpYXNfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MF9SRUdfcmZpb19iaWFzX2VuX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0MF9SRUc6IHJmaW9fYmlhc19lbl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MF9SRUdfcmZpb19iaWFzX2VuX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDBfUkVHOiByZmlvX2JpYXNfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MV9SRUdfcmZpb19iaWFzX3NoX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0MV9SRUc6IHJmaW9fYmlhc19zaF9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0MV9SRUdfcmZpb19iaWFzX3NoX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0MV9SRUc6IHJmaW9fYmlhc19zaF9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQxX1JFR19yZmlvX2JpYXNfc2hfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQxX1JFRzogcmZpb19iaWFzX3NoX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQxX1JFR19yZmlvX2JpYXNfc2hfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0MV9SRUc6IHJmaW9fYmlhc19zaF9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQyX1JFR19sZG9fcmFkaW9fZW5fZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQyX1JFRzogbGRvX3JhZGlvX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQyX1JFR19sZG9fcmFkaW9fZW5fZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQyX1JFRzogbGRvX3JhZGlvX2VuX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDJfUkVHX2xkb19yYWRpb19lbl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDJfUkVHOiBsZG9fcmFkaW9fZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDJfUkVHX2xkb19yYWRpb19lbl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQyX1JFRzogbGRvX3JhZGlvX2VuX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDNfUkVHX2FkY19jbGtfZW5fZGNmX3J4X1BvcyAoMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDNfUkVHOiBhZGNfY2xrX2VuX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQzX1JFR19hZGNfY2xrX2VuX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0M19SRUc6IGFkY19jbGtfZW5fZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0M19SRUdfYWRjX2Nsa19lbl9kY2ZfdHhfUG9zICg1VUwpICAgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0M19SRUc6IGFkY19jbGtfZW5fZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDNfUkVHX2FkY19jbGtfZW5fZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0M19SRUc6IGFkY19jbGtfZW5fZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDRfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHX3RyX3B3bV9vZmZfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHOiB0cl9wd21fb2ZmX2VuX2JsZV9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHX3RyX3B3bV9vZmZfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHOiB0cl9wd21fb2ZmX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ0X0JMRV9SRUdfdHJfcHdtX29mZl9lbl9ibGVfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ0X0JMRV9SRUc6IHRyX3B3bV9vZmZfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ0X0JMRV9SRUdfdHJfcHdtX29mZl9lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NF9CTEVfUkVHOiB0cl9wd21fb2ZmX2VuX2JsZV9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUdfdHhkYWNfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHOiB0eGRhY19lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFR190eGRhY19lbl9ibGVfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUc6IHR4ZGFjX2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0JMRV9SRUdfdHhkYWNfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHOiB0eGRhY19lbl9ibGVfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFR190eGRhY19lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHOiB0eGRhY19lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHX2RlbV9kY3BhcmNhbF9lbl9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUc6IGRlbV9kY3BhcmNhbF9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR19kZW1fZGNwYXJjYWxfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOiBkZW1fZGNwYXJjYWxfZW5fYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR19zcGFyZTJfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOiBzcGFyZTJfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUdfc3BhcmUyX2VuX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUc6IHNwYXJlMl9lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHX2RlbV9hZ2N1bmZyZWV6ZV9lbl9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUc6IGRlbV9hZ2N1bmZyZWV6ZV9lbl9ibGVfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFR19kZW1fYWdjdW5mcmVlemVfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHOiBkZW1fYWdjdW5mcmVlemVfZW5fYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFR19zcGFyZTNfZW5fYmxlX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19CTEVfUkVHOiBzcGFyZTNfZW5fYmxlX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUdfc3BhcmUzX2VuX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUc6IHNwYXJlM19lbl9ibGVfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHX2RlbV9zaWdkZXRlY3RfZW5fYmxlX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHOiBkZW1fc2lnZGV0ZWN0X2VuX2JsZV9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHX2RlbV9zaWdkZXRlY3RfZW5fYmxlX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHOiBkZW1fc2lnZGV0ZWN0X2VuX2JsZV9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ4X0JMRV9SRUdfc3BhcmU0X2VuX2JsZV9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRzogc3BhcmU0X2VuX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHX3NwYXJlNF9lbl9ibGVfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHOiBzcGFyZTRfZW5fYmxlX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDlfQkxFX1JFR19kZW1fZnRkZl9lbl9ibGVfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUc6IGRlbV9mdGRmX2VuX2JsZV9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHX2RlbV9mdGRmX2VuX2JsZV9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDlfQkxFX1JFRzogZGVtX2Z0ZGZfZW5fYmxlX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDlfQkxFX1JFR19kZW1fZnRkZl9lbl9ibGVfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUc6IGRlbV9mdGRmX2VuX2JsZV9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OV9CTEVfUkVHX2RlbV9mdGRmX2VuX2JsZV9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0JMRV9SRUc6IGRlbV9mdGRmX2VuX2JsZV9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHX2dhdXNzX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHOiBnYXVzc19lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHX2dhdXNzX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHOiBnYXVzc19lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjNfRlRERl9SRUdfZ2F1c3NfZW5fZnRkZl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjNfRlRERl9SRUc6IGdhdXNzX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjNfRlRERl9SRUdfZ2F1c3NfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHOiBnYXVzc19lbl9mdGRmX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUdfcmZpb190eHJ4X2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHOiByZmlvX3R4cnhfZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFR19yZmlvX3R4cnhfZnRkZl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUc6IHJmaW9fdHhyeF9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUdfcmZpb190eHJ4X2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHOiByZmlvX3R4cnhfZnRkZl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUcyNF9GVERGX1JFR19yZmlvX3R4cnhfZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzI0X0ZUREZfUkVHOiByZmlvX3R4cnhfZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHX2dhdXNzX2JpYXNfc2hfZnRkZl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUc6IGdhdXNzX2JpYXNfc2hfZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFR19nYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHOiBnYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczMV9GVERGX1JFR19nYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzMxX0ZUREZfUkVHOiBnYXVzc19iaWFzX3NoX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUdfZ2F1c3NfYmlhc19zaF9mdGRmX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzFfRlRERl9SRUc6IGdhdXNzX2JpYXNfc2hfZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHX2RlbV9lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFRzogZGVtX2VuX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzVfRlRERl9SRUdfZGVtX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHOiBkZW1fZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM1X0ZUREZfUkVHX2RlbV9lbl9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFRzogZGVtX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzVfRlRERl9SRUdfZGVtX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczNV9GVERGX1JFRzogZGVtX2VuX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19GVERGX1JFR19jYWxfZW5fZnRkZl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUc6IGNhbF9lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM3X0ZUREZfUkVHX2NhbF9lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUczN19GVERGX1JFRzogY2FsX2VuX2Z0ZGZfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczN19GVERGX1JFR19jYWxfZW5fZnRkZl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUc6IGNhbF9lbl9mdGRmX2RjZl90eCAoQml0IDUpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzM3X0ZUREZfUkVHX2NhbF9lbl9mdGRmX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzdfRlRERl9SRUc6IGNhbF9lbl9mdGRmX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUdfdGRjX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHOiB0ZGNfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOF9GVERGX1JFR190ZGNfZW5fZnRkZl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUc6IHRkY19lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHMzhfRlRERl9SRUdfdGRjX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHOiB0ZGNfZW5fZnRkZl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUczOF9GVERGX1JFR190ZGNfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzM4X0ZUREZfUkVHOiB0ZGNfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHX3RyX3B3bV9vZmZfZW5fZnRkZl9kY2ZfcnhfUG9zICgwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDRfRlRERl9SRUc6IHRyX3B3bV9vZmZfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFR190cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHOiB0cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3J4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0NF9GVERGX1JFR190cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ0X0ZUREZfUkVHOiB0cl9wd21fb2ZmX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDRfRlRERl9SRUdfdHJfcHdtX29mZl9lbl9mdGRmX2RjZl90eF9Nc2sgKDB4M2UwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDRfRlRERl9SRUc6IHRyX3B3bV9vZmZfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHX3R4ZGFjX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHOiB0eGRhY19lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHX3R4ZGFjX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHOiB0eGRhY19lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDVfRlRERl9SRUdfdHhkYWNfZW5fZnRkZl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDVfRlRERl9SRUc6IHR4ZGFjX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDVfRlRERl9SRUdfdHhkYWNfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHOiB0eGRhY19lbl9mdGRmX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUdfZGVtX2RjcGFyY2FsX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHOiBkZW1fZGNwYXJjYWxfZW5fZnRkZl9kY2ZfcnggKEJpdCAwKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFR19kZW1fZGNwYXJjYWxfZW5fZnRkZl9kY2ZfcnhfTXNrICgweDFmVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUc6IGRlbV9kY3BhcmNhbF9lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUdfc3BhcmUyX2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHOiBzcGFyZTJfZW5fZnRkZl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFR19zcGFyZTJfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHOiBzcGFyZTJfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHX2RlbV9hZ2N1bmZyZWV6ZV9lbl9mdGRmX2RjZl9yeF9Qb3MgKDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRzogZGVtX2FnY3VuZnJlZXplX2VuX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUdfZGVtX2FnY3VuZnJlZXplX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHOiBkZW1fYWdjdW5mcmVlemVfZW5fZnRkZl9kY2ZfcnggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHX3NwYXJlM19lbl9mdGRmX2RjZl90eF9Qb3MgKDVVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRzogc3BhcmUzX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUdfc3BhcmUzX2VuX2Z0ZGZfZGNmX3R4X01zayAoMHgzZTBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0N19GVERGX1JFRzogc3BhcmUzX2VuX2Z0ZGZfZGNmX3R4IChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFR19kZW1fc2lnZGV0ZWN0X2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHOiBkZW1fc2lnZGV0ZWN0X2VuX2Z0ZGZfZGNmX3J4IChCaXQgMCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUdfZGVtX3NpZ2RldGVjdF9lbl9mdGRmX2RjZl9yeF9Nc2sgKDB4MWZVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRzogZGVtX3NpZ2RldGVjdF9lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUdfc3BhcmU0X2VuX2Z0ZGZfZGNmX3R4X1BvcyAoNVVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHOiBzcGFyZTRfZW5fZnRkZl9kY2ZfdHggKEJpdCA1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFR19zcGFyZTRfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ4X0ZUREZfUkVHOiBzcGFyZTRfZW5fZnRkZl9kY2ZfdHggKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHX2RlbV9mdGRmX2VuX2Z0ZGZfZGNmX3J4X1BvcyAoMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHOiBkZW1fZnRkZl9lbl9mdGRmX2RjZl9yeCAoQml0IDApICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHX2RlbV9mdGRmX2VuX2Z0ZGZfZGNmX3J4X01zayAoMHgxZlVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHOiBkZW1fZnRkZl9lbl9mdGRmX2RjZl9yeCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDlfRlRERl9SRUdfZGVtX2Z0ZGZfZW5fZnRkZl9kY2ZfdHhfUG9zICg1VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9FTkFCTEVfQ09ORklHNDlfRlRERl9SRUc6IGRlbV9mdGRmX2VuX2Z0ZGZfZGNmX3R4IChCaXQgNSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9FTkFCTEVfQ09ORklHNDlfRlRERl9SRUdfZGVtX2Z0ZGZfZW5fZnRkZl9kY2ZfdHhfTXNrICgweDNlMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfRU5BQkxFX0NPTkZJRzQ5X0ZUREZfUkVHOiBkZW1fZnRkZl9lbl9mdGRmX2RjZl90eCAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzJfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzJfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzJfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzJfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzJfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzJfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzJfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzJfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfM19SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfM19SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfM19SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfM19SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfM19SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfM19SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfM19SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfM19SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl80X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl80X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl80X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl80X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl80X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl80X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl80X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl80X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl81X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzVfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzVfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzVfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzVfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzVfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzVfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzVfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzVfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNl9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNl9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNl9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNl9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNl9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNl9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfNl9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfNl9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfN19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl83X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl83X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl83X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl83X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl83X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl83X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl83X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl83X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl84X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzhfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzhfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzhfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzhfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzhfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzhfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzhfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzhfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfOV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfOV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfOV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfOV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfOV9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfOV9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfOV9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfOV9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMF9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMF9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMF9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMF9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTBfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTBfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTBfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTBfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTFfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTFfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTFfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTFfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzExX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzExX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzExX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzExX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEyX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzEyX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzEyX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzEyX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMl9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMl9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xMl9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xMl9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xM19SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xM19SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xM19SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xM19SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTNfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTNfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTNfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTNfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTRfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTRfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTRfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTRfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE0X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE0X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE0X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE0X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE1X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE1X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE1X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE1X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE1X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNV9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNV9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNV9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNV9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNl9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNl9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xNl9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xNl9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTZfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTZfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTZfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTZfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTdfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTdfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTdfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTdfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTdfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE3X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE3X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE3X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE3X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE4X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE4X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE4X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzE4X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzE4X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOF9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xOF9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOF9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xOF9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xOV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8xOV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8xOV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTlfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTlfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMTlfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMTlfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjBfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjBfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjBfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjBfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIwX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIwX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIwX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIwX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIxX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIxX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIxX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIxX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMV9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMV9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMV9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMV9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMl9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMl9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yMl9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yMl9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjJfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjJfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjJfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjJfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjNfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjNfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjNfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjNfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIzX1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIzX1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzIzX1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzIzX1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI0X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI0X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI0X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI0X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNF9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNF9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNF9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNF9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yNV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yNV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjVfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjVfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjVfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjVfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjZfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjZfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjZfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjZfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI2X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI2X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI2X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI2X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI3X1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI3X1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI3X1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI3X1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yN19SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yN19SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yN19SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yN19SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yOF9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yOF9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8yOF9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8yOF9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjhfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjhfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjhfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjhfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjlfUkVHX1NFVF9PRkZTRVRfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjlfUkVHOiBTRVRfT0ZGU0VUIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMjlfUkVHX1NFVF9PRkZTRVRfTXNrICgweGZmVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMjlfUkVHOiBTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI5X1JFR19SRVNFVF9PRkZTRVRfUG9zICg4VUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI5X1JFRzogUkVTRVRfT0ZGU0VUIChCaXQgOCkgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzI5X1JFR19SRVNFVF9PRkZTRVRfTXNrICgweGZmMDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzI5X1JFRzogUkVTRVRfT0ZGU0VUIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzMwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzMwX1JFR19TRVRfT0ZGU0VUX1BvcyAoMFVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzMwX1JFRzogU0VUX09GRlNFVCAoQml0IDApICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0NOVFJMX1RJTUVSXzMwX1JFR19TRVRfT0ZGU0VUX01zayAoMHhmZlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0NOVFJMX1RJTUVSXzMwX1JFRzogU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMF9SRUdfUkVTRVRfT0ZGU0VUX1BvcyAoOFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8zMF9SRUc6IFJFU0VUX09GRlNFVCAoQml0IDgpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMF9SRUdfUkVTRVRfT0ZGU0VUX01zayAoMHhmZjAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8zMF9SRUc6IFJFU0VUX09GRlNFVCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMV9SRUdfU0VUX09GRlNFVF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8zMV9SRUc6IFNFVF9PRkZTRVQgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9DTlRSTF9USU1FUl8zMV9SRUdfU0VUX09GRlNFVF9Nc2sgKDB4ZmZVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9DTlRSTF9USU1FUl8zMV9SRUc6IFNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzFfUkVHX1JFU0VUX09GRlNFVF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMzFfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQ05UUkxfVElNRVJfMzFfUkVHX1JFU0VUX09GRlNFVF9Nc2sgKDB4ZmYwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQ05UUkxfVElNRVJfMzFfUkVHOiBSRVNFVF9PRkZTRVQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0xOQV9MRE9fRU5fUG9zICgwVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9MTkFfTERPX0VOIChCaXQgMCkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0xOQV9MRE9fRU5fTXNrICgweDFVTCkgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9MTkFfTERPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfQ09SRV9FTl9Qb3MgKDFVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0NPUkVfRU4gKEJpdCAxKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9MTkFfQ09SRV9FTl9Nc2sgKDB4MlVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTE5BX0NPUkVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0xOQV9DR01fRU5fUG9zICgyVUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9MTkFfQ0dNX0VOIChCaXQgMikgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0xOQV9DR01fRU5fTXNrICgweDRVTCkgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9MTkFfQ0dNX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9NSVhfTERPX0VOX1BvcyAoM1VMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTUlYX0xET19FTiAoQml0IDMpICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9NSVhfTERPX0VOX01zayAoMHg4VUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fTUlYX0xET19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fSUZGX0xET19FTl9Qb3MgKDRVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX0lGRl9MRE9fRU4gKEJpdCA0KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fSUZGX0xET19FTl9Nc2sgKDB4MTBVTCkgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX0lGRl9MRE9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0lGRkFEQ19MRE9fRU5fUG9zICg1VUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9JRkZBRENfTERPX0VOIChCaXQgNSkgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0lGRkFEQ19MRE9fRU5fTXNrICgweDIwVUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9JRkZBRENfTERPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9WQ09fTERPX0VOX1BvcyAoNlVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fVkNPX0xET19FTiAoQml0IDYpICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9WQ09fTERPX0VOX01zayAoMHg0MFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fVkNPX0xET19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fTURfTERPX0VOX1BvcyAoN1VMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX01EX0xET19FTiAoQml0IDcpICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fTURfTERPX0VOX01zayAoMHg4MFVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX01EX0xET19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fUEZEX0xET19FTl9Qb3MgKDhVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX1BGRF9MRE9fRU4gKEJpdCA4KSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fUEZEX0xET19FTl9Nc2sgKDB4MTAwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX1BGRF9MRE9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1BBX0xET19FTl9Qb3MgKDlVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9QQV9MRE9fRU4gKEJpdCA5KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1BBX0xET19FTl9Nc2sgKDB4MjAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9QQV9MRE9fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0NQX1NXSVRDSF9FTl9Qb3MgKDEwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9DUF9TV0lUQ0hfRU4gKEJpdCAxMCkgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0NQX1NXSVRDSF9FTl9Nc2sgKDB4NDAwVUwpICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9DUF9TV0lUQ0hfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1ZDT19CSUFTX0VOX1BvcyAoMTFVTCkgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9WQ09fQklBU19FTiAoQml0IDExKSAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1ZDT19CSUFTX0VOX01zayAoMHg4MDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9WQ09fQklBU19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fQ1BfQklBU19FTl9Qb3MgKDEyVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX0NQX0JJQVNfRU4gKEJpdCAxMikgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4xX1JFR19BTFdfRU5fQ1BfQklBU19FTl9Nc2sgKDB4MTAwMFVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4xX1JFRzogQUxXX0VOX0NQX0JJQVNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0xOQV9MRE9fWkVST19Qb3MgKDEzVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9MTkFfTERPX1pFUk8gKEJpdCAxMykgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX0xOQV9MRE9fWkVST19Nc2sgKDB4MjAwMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9MTkFfTERPX1pFUk8gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1BBX1JBTVBfRU5fUG9zICgxNFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9QQV9SQU1QX0VOIChCaXQgMTQpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMV9SRUdfQUxXX0VOX1BBX1JBTVBfRU5fTXNrICgweDQwMDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMV9SRUc6IEFMV19FTl9QQV9SQU1QX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9QQV9FTl9Qb3MgKDE1VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fUEFfRU4gKEJpdCAxNSkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjFfUkVHX0FMV19FTl9QQV9FTl9Nc2sgKDB4ODAwMFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjFfUkVHOiBBTFdfRU5fUEFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX01JWF9FTl9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9NSVhfRU4gKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX01JWF9FTl9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9NSVhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0lGRl9FTl9Qb3MgKDFVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9JRkZfRU4gKEJpdCAxKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0lGRl9FTl9Nc2sgKDB4MlVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9JRkZfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0FEQ19FTl9Qb3MgKDJVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9BRENfRU4gKEJpdCAyKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0FEQ19FTl9Nc2sgKDB4NFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9BRENfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1ZDT19FTl9Qb3MgKDNVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9WQ09fRU4gKEJpdCAzKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1ZDT19FTl9Nc2sgKDB4OFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9WQ09fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0xPQlVGX01EX0VOX1BvcyAoNFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9MT0JVRl9NRF9FTiAoQml0IDQpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0xPQlVGX01EX0VOX01zayAoMHgxMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9MT0JVRl9NRF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fQ1BfRU5fUG9zICg1VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0NQX0VOIChCaXQgNSkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fQ1BfRU5fTXNrICgweDIwVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0NQX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9QREZfRU5fUG9zICg2VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fUERGX0VOIChCaXQgNikgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9QREZfRU5fTXNrICgweDQwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fUERGX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9HQVVTU19FTl9Qb3MgKDdVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fR0FVU1NfRU4gKEJpdCA3KSAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9HQVVTU19FTl9Nc2sgKDB4ODBVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fR0FVU1NfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1JGSU9fVFhSWF9Qb3MgKDhVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9SRklPX1RYUlggKEJpdCA4KSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1JGSU9fVFhSWF9Nc2sgKDB4MTAwVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9SRklPX1RYUlggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0xPQlVGX1BBX0VOX1BvcyAoOVVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9MT0JVRl9QQV9FTiAoQml0IDkpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0xPQlVGX1BBX0VOX01zayAoMHgyMDBVTCkgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9MT0JVRl9QQV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fUlhJUV9FTl9Qb3MgKDEwVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX1JYSVFfRU4gKEJpdCAxMCkgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fUlhJUV9FTl9Nc2sgKDB4NDAwVUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX1JYSVFfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0RJVjJfRU5fUG9zICgxMVVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9ESVYyX0VOIChCaXQgMTEpICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0RJVjJfRU5fTXNrICgweDgwMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9ESVYyX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9DUF9CSUFTX1NIX09QRU5fUG9zICgxMlVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fQ1BfQklBU19TSF9PUEVOIChCaXQgMTIpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX0NQX0JJQVNfU0hfT1BFTl9Nc2sgKDB4MTAwMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9DUF9CSUFTX1NIX09QRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1ZDT19CSUFTX1NIX09QRU5fUG9zICgxM1VMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9WQ09fQklBU19TSF9PUEVOIChCaXQgMTMpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOMl9SRUdfQUxXX0VOX1ZDT19CSUFTX1NIX09QRU5fTXNrICgweDIwMDBVTCkgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fVkNPX0JJQVNfU0hfT1BFTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fSUZGTUlYX0JJQVNfU0hfT1BFTl9Qb3MgKDE0VUwpIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0lGRk1JWF9CSUFTX1NIX09QRU4gKEJpdCAxNCkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4yX1JFR19BTFdfRU5fSUZGTUlYX0JJQVNfU0hfT1BFTl9Nc2sgKDB4NDAwMFVMKSAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOMl9SRUc6IEFMV19FTl9JRkZNSVhfQklBU19TSF9PUEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9HQVVTU19CSUFTX1NIX1BvcyAoMTVVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjJfUkVHOiBBTFdfRU5fR0FVU1NfQklBU19TSCAoQml0IDE1KSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjJfUkVHX0FMV19FTl9HQVVTU19CSUFTX1NIX01zayAoMHg4MDAwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4yX1JFRzogQUxXX0VOX0dBVVNTX0JJQVNfU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX01JWF9CSUFTX1NIX1BvcyAoMFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9NSVhfQklBU19TSCAoQml0IDApICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX01JWF9CSUFTX1NIX01zayAoMHgxVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9NSVhfQklBU19TSCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fUExMX0RJR19FTl9Qb3MgKDFVTCkgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1BMTF9ESUdfRU4gKEJpdCAxKSAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fUExMX0RJR19FTl9Nc2sgKDB4MlVMKSAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1BMTF9ESUdfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1BMTENMT1NFRF9FTl9Qb3MgKDJVTCkgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9QTExDTE9TRURfRU4gKEJpdCAyKSAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1BMTENMT1NFRF9FTl9Nc2sgKDB4NFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9QTExDTE9TRURfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0RFTV9FTl9Qb3MgKDNVTCkgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9ERU1fRU4gKEJpdCAzKSAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0RFTV9FTl9Nc2sgKDB4OFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9ERU1fRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0xET19aRVJPX0VOX1BvcyAoNFVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9MRE9fWkVST19FTiAoQml0IDQpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX0xET19aRVJPX0VOX01zayAoMHgxMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9MRE9fWkVST19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fQ0FMX0VOX1BvcyAoNVVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0NBTF9FTiAoQml0IDUpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fQ0FMX0VOX01zayAoMHgyMFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0NBTF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fVERDX0VOX1BvcyAoNlVMKSAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1REQ19FTiAoQml0IDYpICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fVERDX0VOX01zayAoMHg0MFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1REQ19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fTERPX1JGSU9fRU5fUG9zICg3VUwpICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0xET19SRklPX0VOIChCaXQgNykgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fTERPX1JGSU9fRU5fTXNrICgweDgwVUwpICAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX0xET19SRklPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9SRklPX0JJQVNfRU5fUG9zICg4VUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fUkZJT19CSUFTX0VOIChCaXQgOCkgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9SRklPX0JJQVNfRU5fTXNrICgweDEwMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fUkZJT19CSUFTX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9SRklPX0JJQVNfU0hfUG9zICg5VUwpICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fUkZJT19CSUFTX1NIIChCaXQgOSkgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9SRklPX0JJQVNfU0hfTXNrICgweDIwMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fUkZJT19CSUFTX1NIIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9MRE9fUkFESU9fRU5fUG9zICgxMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fTERPX1JBRElPX0VOIChCaXQgMTApICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9MRE9fUkFESU9fRU5fTXNrICgweDQwMFVMKSAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fTERPX1JBRElPX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9BRENfQ0xLX0VOX1BvcyAoMTFVTCkgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fQURDX0NMS19FTiAoQml0IDExKSAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9BRENfQ0xLX0VOX01zayAoMHg4MDBVTCkgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fQURDX0NMS19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU4zX1JFR19BTFdfRU5fVFJfUFdSTV9PRkZfRU5fUG9zICgxMlVMKSAgIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1RSX1BXUk1fT0ZGX0VOIChCaXQgMTIpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1RSX1BXUk1fT0ZGX0VOX01zayAoMHgxMDAwVUwpIC8qITwgUkZDVV9QT1dFUiBSRl9BTFdBWVNfRU4zX1JFRzogQUxXX0VOX1RSX1BXUk1fT0ZGX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9UWERBQ19FTl9Qb3MgKDEzVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fVFhEQUNfRU4gKEJpdCAxMykgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX0FMV0FZU19FTjNfUkVHX0FMV19FTl9UWERBQ19FTl9Nc2sgKDB4MjAwMFVMKSAgICAgLyohPCBSRkNVX1BPV0VSIFJGX0FMV0FZU19FTjNfUkVHOiBBTFdfRU5fVFhEQUNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1NQQVJFMl9FTl9Qb3MgKDE0VUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9TUEFSRTJfRU4gKEJpdCAxNCkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1NQQVJFMl9FTl9Nc2sgKDB4NDAwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9TUEFSRTJfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1NQQVJFM19FTl9Qb3MgKDE1VUwpICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9TUEFSRTNfRU4gKEJpdCAxNSkgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VOM19SRUdfQUxXX0VOX1NQQVJFM19FTl9Nc2sgKDB4ODAwMFVMKSAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VOM19SRUc6IEFMV19FTl9TUEFSRTNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9BTFdBWVNfRU40X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VONF9SRUdfQUxXX0VOX1NQQVJFNF9FTl9Qb3MgKDBVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VONF9SRUc6IEFMV19FTl9TUEFSRTRfRU4gKEJpdCAwKSAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VONF9SRUdfQUxXX0VOX1NQQVJFNF9FTl9Nc2sgKDB4MVVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VONF9SRUc6IEFMV19FTl9TUEFSRTRfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VONF9SRUdfQUxXX0VOX0RFTV9GVERGX0VOX1BvcyAoMVVMKSAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VONF9SRUc6IEFMV19FTl9ERU1fRlRERl9FTiAoQml0IDEpICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfQUxXQVlTX0VONF9SRUdfQUxXX0VOX0RFTV9GVERGX0VOX01zayAoMHgyVUwpICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfQUxXQVlTX0VONF9SRUc6IEFMV19FTl9ERU1fRlRERl9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDBfUlhfUG9zICgwVUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQwX1JYIChCaXQgMCkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDBfUlhfTXNrICgweDFVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQwX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMF9UWF9Qb3MgKDFVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDBfVFggKEJpdCAxKSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMF9UWF9Nc2sgKDB4MlVMKSAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDBfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQxX1JYX1BvcyAoMlVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMV9SWCAoQml0IDIpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQxX1JYX01zayAoMHg0VUwpICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMV9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDFfVFhfUG9zICgzVUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQxX1RYIChCaXQgMykgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDFfVFhfTXNrICgweDhVTCkgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQxX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMl9SWF9Qb3MgKDRVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDJfUlggKEJpdCA0KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUMl9SWF9Nc2sgKDB4MTBVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDJfUlggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQyX1RYX1BvcyAoNVVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMl9UWCAoQml0IDUpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQyX1RYX01zayAoMHgyMFVMKSAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUMl9UWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfUlhfUG9zICg2VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQzX1JYIChCaXQgNikgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfUlhfTXNrICgweDQwVUwpICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQzX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUM19UWF9Qb3MgKDdVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDNfVFggKEJpdCA3KSAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUM19UWF9Nc2sgKDB4ODBVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fQkxFX1JFRzogUkZfUE9SVDNfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQ0X1JYX1BvcyAoOFVMKSAgICAgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUNF9SWCAoQml0IDgpICAgICAgICAgICovCisjZGVmaW5lIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQ0X1JYX01zayAoMHgxMDBVTCkgICAgICAgICAvKiE8IFJGQ1VfUE9XRVIgUkZfUE9SVF9FTl9CTEVfUkVHOiBSRl9QT1JUNF9SWCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDRfVFhfUG9zICg5VUwpICAgICAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQ0X1RYIChCaXQgOSkgICAgICAgICAgKi8KKyNkZWZpbmUgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDRfVFhfTXNrICgweDIwMFVMKSAgICAgICAgIC8qITwgUkZDVV9QT1dFUiBSRl9QT1JUX0VOX0JMRV9SRUc6IFJGX1BPUlQ0X1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDBfUlhfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQwX1JYIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDBfUlhfTXNrICgweDFVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQwX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDBfVFhfUG9zICgxVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQwX1RYIChCaXQgMSkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDBfVFhfTXNrICgweDJVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQwX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDFfUlhfUG9zICgyVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQxX1JYIChCaXQgMikgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDFfUlhfTXNrICgweDRVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQxX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDFfVFhfUG9zICgzVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQxX1RYIChCaXQgMykgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDFfVFhfTXNrICgweDhVTCkgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQxX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDJfUlhfUG9zICg0VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQyX1JYIChCaXQgNCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDJfUlhfTXNrICgweDEwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQyX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDJfVFhfUG9zICg1VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQyX1RYIChCaXQgNSkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDJfVFhfTXNrICgweDIwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQyX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfUlhfUG9zICg2VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQzX1JYIChCaXQgNikgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfUlhfTXNrICgweDQwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQzX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfVFhfUG9zICg3VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQzX1RYIChCaXQgNykgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDNfVFhfTXNrICgweDgwVUwpICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQzX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDRfUlhfUG9zICg4VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQ0X1JYIChCaXQgOCkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDRfUlhfTXNrICgweDEwMFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQ0X1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDRfVFhfUG9zICg5VUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQ0X1RYIChCaXQgOSkgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fRlRERl9SRUdfUkZfUE9SVDRfVFhfTXNrICgweDIwMFVMKSAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfRU5fRlRERl9SRUc6IFJGX1BPUlQ0X1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUMF9QT0xfUG9zICgwVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDBfUE9MIChCaXQgMCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUMF9QT0xfTXNrICgweDFVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDBfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUMV9QT0xfUG9zICgxVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDFfUE9MIChCaXQgMSkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUMV9QT0xfTXNrICgweDJVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDFfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUMl9QT0xfUG9zICgyVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDJfUE9MIChCaXQgMikgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUMl9QT0xfTXNrICgweDRVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDJfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUM19QT0xfUG9zICgzVUwpICAgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDNfUE9MIChCaXQgMykgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUM19QT0xfTXNrICgweDhVTCkgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDNfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUNF9QT0xfUG9zICg0VUwpICAgICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDRfUE9MIChCaXQgNCkgICAgICAgICAgICAqLworI2RlZmluZSBSRkNVX1BPV0VSX1JGX1BPUlRfUE9MX1JFR19SRl9QT1JUNF9QT0xfTXNrICgweDEwVUwpICAgICAgICAgICAgLyohPCBSRkNVX1BPV0VSIFJGX1BPUlRfUE9MX1JFRzogUkZfUE9SVDRfUE9MIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnUkZQVCcgUG9zaXRpb24gJiBNYXNrICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZQVF9SRlBUX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1RSTF9SRUdfUkZQVF9QQUNLX0VOX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1RSTF9SRUc6IFJGUFRfUEFDS19FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1RSTF9SRUdfUkZQVF9QQUNLX0VOX01zayAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1RSTF9SRUc6IFJGUFRfUEFDS19FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1RSTF9SRUdfUkZQVF9QQUNLX1NFTF9Qb3MgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1RSTF9SRUc6IFJGUFRfUEFDS19TRUwgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1RSTF9SRUdfUkZQVF9QQUNLX1NFTF9Nc2sgICgweDZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1RSTF9SRUc6IFJGUFRfUEFDS19TRUwgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1RSTF9SRUdfUkZQVF9QQUNLX0FEQ19UWVBFX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1RSTF9SRUc6IFJGUFRfUEFDS19BRENfVFlQRSAoQml0IDMpICAgICAgICAgICAgICAqLworI2RlZmluZSBSRlBUX1JGUFRfQ1RSTF9SRUdfUkZQVF9QQUNLX0FEQ19UWVBFX01zayAoMHg4VUwpICAgICAgICAgICAgICAgLyohPCBSRlBUIFJGUFRfQ1RSTF9SRUc6IFJGUFRfUEFDS19BRENfVFlQRSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfQ0lSQ19FTl9Qb3MgICAoNFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX0NJUkNfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfQ0lSQ19FTl9Nc2sgICAoMHgxMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX0NJUkNfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfQlJFUV9GT1JDRV9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX0JSRVFfRk9SQ0UgKEJpdCA1KSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NUUkxfUkVHX1JGUFRfQlJFUV9GT1JDRV9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NUUkxfUkVHOiBSRlBUX0JSRVFfRk9SQ0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGUFRfUkZQVF9BRERSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0FERFJMX1JFR19SRlBUX0FERFJMX1BvcyAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0FERFJMX1JFRzogUkZQVF9BRERSTCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0FERFJMX1JFR19SRlBUX0FERFJMX01zayAgICAoMHhmZmZjVUwpICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0FERFJMX1JFRzogUkZQVF9BRERSTCAoQml0ZmllbGQtTWFzazogMHgzZmZmKSAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGUFRfUkZQVF9BRERSSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0FERFJIX1JFR19SRlBUX0FERFJIX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0FERFJIX1JFRzogUkZQVF9BRERSSCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0FERFJIX1JFR19SRlBUX0FERFJIX01zayAgICAoMHgzVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0FERFJIX1JFRzogUkZQVF9BRERSSCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRlBUX1JGUFRfTEVOX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0xFTl9SRUdfUkZQVF9MRU5fUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0xFTl9SRUc6IFJGUFRfTEVOIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0xFTl9SRUdfUkZQVF9MRU5fTXNrICAgICAgICAoMHg3ZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0xFTl9SRUc6IFJGUFRfTEVOIChCaXRmaWVsZC1NYXNrOiAweDdmZmYpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFJGUFRfUkZQVF9TVEFUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX1NUQVRfUkVHX1JGUFRfQUNUSVZFX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX1NUQVRfUkVHOiBSRlBUX0FDVElWRSAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX1NUQVRfUkVHX1JGUFRfQUNUSVZFX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX1NUQVRfUkVHOiBSRlBUX0FDVElWRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX1NUQVRfUkVHX1JGUFRfT0ZMT1dfU1RLX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX1NUQVRfUkVHOiBSRlBUX09GTE9XX1NUSyAoQml0IDEpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX1NUQVRfUkVHX1JGUFRfT0ZMT1dfU1RLX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX1NUQVRfUkVHOiBSRlBUX09GTE9XX1NUSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBSRlBUX1JGUFRfQ1JWX0FERFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NSVl9BRERSTF9SRUdfUkZQVF9DUlZfQUREUkxfUG9zICgyVUwpICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NSVl9BRERSTF9SRUc6IFJGUFRfQ1JWX0FERFJMIChCaXQgMikgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NSVl9BRERSTF9SRUdfUkZQVF9DUlZfQUREUkxfTXNrICgweGZmZmNVTCkgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NSVl9BRERSTF9SRUc6IFJGUFRfQ1JWX0FERFJMIChCaXRmaWVsZC1NYXNrOiAweDNmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZQVF9SRlBUX0NSVl9BRERSSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJGUFRfUkZQVF9DUlZfQUREUkhfUkVHX1JGUFRfQ1JWX0FERFJIX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DUlZfQUREUkhfUkVHOiBSRlBUX0NSVl9BRERSSCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFJGUFRfUkZQVF9DUlZfQUREUkhfUkVHX1JGUFRfQ1JWX0FERFJIX01zayAoMHgzVUwpICAgICAgICAgICAgICAvKiE8IFJGUFQgUkZQVF9DUlZfQUREUkhfUkVHOiBSRlBUX0NSVl9BRERSSCAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgUkZQVF9SRlBUX0NSVl9MRU5fUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NSVl9MRU5fUkVHX1JGUFRfQ1JWX0xFTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NSVl9MRU5fUkVHOiBSRlBUX0NSVl9MRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkZQVF9SRlBUX0NSVl9MRU5fUkVHX1JGUFRfQ1JWX0xFTl9Nc2sgKDB4N2ZmZlVMKSAgICAgICAgICAgICAgIC8qITwgUkZQVCBSRlBUX0NSVl9MRU5fUkVHOiBSRlBUX0NSVl9MRU4gKEJpdGZpZWxkLU1hc2s6IDB4N2ZmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ1NQSScgUG9zaXRpb24gJiBNYXNrICAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUElfU1BJX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfT05fUG9zICAgICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfT05fTXNrICAgICAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfUEhBX1BvcyAgICAgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1BIQSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfUEhBX01zayAgICAgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1BIQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfUE9MX1BvcyAgICAgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1BPTCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfUE9MX01zayAgICAgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfQ0xLX1BvcyAgICAgICAgICAoM1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0NMSyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfQ0xLX01zayAgICAgICAgICAoMHgxOFVMKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0NMSyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRE9fUG9zICAgICAgICAgICAoNVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0RPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRE9fTXNrICAgICAgICAgICAoMHgyMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0RPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfU01OX1BvcyAgICAgICAgICAoNlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1NNTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfU01OX01zayAgICAgICAgICAoMHg0MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1NNTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfV09SRF9Qb3MgICAgICAgICAoN1VMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1dPUkQgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfV09SRF9Nc2sgICAgICAgICAoMHgxODBVTCkgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1dPUkQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfUlNUX1BvcyAgICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1JTVCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfUlNUX01zayAgICAgICAgICAoMHgyMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1JTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRk9SQ0VfRE9fUG9zICAgICAoMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0ZPUkNFX0RPIChCaXQgMTApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRk9SQ0VfRE9fTXNrICAgICAoMHg0MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0ZPUkNFX0RPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfVFhIX1BvcyAgICAgICAgICAoMTFVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1RYSCAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfVFhIX01zayAgICAgICAgICAoMHg4MDBVTCkgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX1RYSCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRElfUG9zICAgICAgICAgICAoMTJVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0RJIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRElfTXNrICAgICAgICAgICAoMHgxMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0RJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfSU5UX0JJVF9Qb3MgICAgICAoMTNVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0lOVF9CSVQgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfSU5UX0JJVF9Nc2sgICAgICAoMHgyMDAwVUwpICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0lOVF9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfTUlOVF9Qb3MgICAgICAgICAoMTRVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX01JTlQgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfTUlOVF9Nc2sgICAgICAgICAoMHg0MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX01JTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRU5fQ1RSTF9Qb3MgICAgICAoMTVVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0VOX0NUUkwgKEJpdCAxNSkgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DVFJMX1JFR19TUElfRU5fQ1RSTF9Nc2sgICAgICAoMHg4MDAwVUwpICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DVFJMX1JFRzogU1BJX0VOX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSV9TUElfUlhfVFhfUkVHMCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgU1BJX1NQSV9SWF9UWF9SRUcwX1NQSV9EQVRBMF9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9SWF9UWF9SRUcwOiBTUElfREFUQTAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9SWF9UWF9SRUcwX1NQSV9EQVRBMF9Nc2sgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9SWF9UWF9SRUcwOiBTUElfREFUQTAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSV9TUElfUlhfVFhfUkVHMSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgU1BJX1NQSV9SWF9UWF9SRUcxX1NQSV9EQVRBMV9Qb3MgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9SWF9UWF9SRUcxOiBTUElfREFUQTEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9SWF9UWF9SRUcxX1NQSV9EQVRBMV9Nc2sgICAgICAoMHhmZmZmVUwpICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9SWF9UWF9SRUcxOiBTUElfREFUQTEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU1BJX1NQSV9DTEVBUl9JTlRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgU1BJX1NQSV9DTEVBUl9JTlRfUkVHX1NQSV9DTEVBUl9JTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DTEVBUl9JTlRfUkVHOiBTUElfQ0xFQVJfSU5UIChCaXQgMCkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1BJX1NQSV9DTEVBUl9JTlRfUkVHX1NQSV9DTEVBUl9JTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAgIC8qITwgU1BJIFNQSV9DTEVBUl9JTlRfUkVHOiBTUElfQ0xFQVJfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU1BJX1NQSV9DVFJMX1JFRzEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV9GSUZPX01PREVfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfRklGT19NT0RFIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV9GSUZPX01PREVfTXNrICAgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfRklGT19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV9QUklPUklUWV9Qb3MgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfUFJJT1JJVFkgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV9QUklPUklUWV9Nc2sgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfUFJJT1JJVFkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV9CVVNZX1BvcyAgICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfQlVTWSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV9CVVNZX01zayAgICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfQlVTWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV85QklUX1ZBTF9Qb3MgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfOUJJVF9WQUwgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSV9TUElfQ1RSTF9SRUcxX1NQSV85QklUX1ZBTF9Nc2sgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSSBTUElfQ1RSTF9SRUcxOiBTUElfOUJJVF9WQUwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdTUEkyJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUEkyX1NQSTJfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfT05fUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX09OIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfT05fTXNrICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX09OIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfUEhBX1BvcyAgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1BIQSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfUEhBX01zayAgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1BIQSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfUE9MX1BvcyAgICAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1BPTCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfUE9MX01zayAgICAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1BPTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfQ0xLX1BvcyAgICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0NMSyAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfQ0xLX01zayAgICAgICAgKDB4MThVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0NMSyAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRE9fUG9zICAgICAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0RPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRE9fTXNrICAgICAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0RPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfU01OX1BvcyAgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1NNTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfU01OX01zayAgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1NNTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfV09SRF9Qb3MgICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1dPUkQgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfV09SRF9Nc2sgICAgICAgKDB4MTgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1dPUkQgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfUlNUX1BvcyAgICAgICAgKDlVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1JTVCAoQml0IDkpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfUlNUX01zayAgICAgICAgKDB4MjAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1JTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRk9SQ0VfRE9fUG9zICAgKDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0ZPUkNFX0RPIChCaXQgMTApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRk9SQ0VfRE9fTXNrICAgKDB4NDAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0ZPUkNFX0RPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfVFhIX1BvcyAgICAgICAgKDExVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1RYSCAoQml0IDExKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfVFhIX01zayAgICAgICAgKDB4ODAwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX1RYSCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRElfUG9zICAgICAgICAgKDEyVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0RJIChCaXQgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRElfTXNrICAgICAgICAgKDB4MTAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0RJIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfSU5UX0JJVF9Qb3MgICAgKDEzVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0lOVF9CSVQgKEJpdCAxMykgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfSU5UX0JJVF9Nc2sgICAgKDB4MjAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0lOVF9CSVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfTUlOVF9Qb3MgICAgICAgKDE0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX01JTlQgKEJpdCAxNCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfTUlOVF9Nc2sgICAgICAgKDB4NDAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX01JTlQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRU5fQ1RSTF9Qb3MgICAgKDE1VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0VOX0NUUkwgKEJpdCAxNSkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFR19TUElfRU5fQ1RSTF9Nc2sgICAgKDB4ODAwMFVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzogU1BJX0VOX0NUUkwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSTJfU1BJMl9SWF9UWF9SRUcwICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSTJfU1BJMl9SWF9UWF9SRUcwX1NQSV9EQVRBMF9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9SWF9UWF9SRUcwOiBTUElfREFUQTAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9SWF9UWF9SRUcwX1NQSV9EQVRBMF9Nc2sgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9SWF9UWF9SRUcwOiBTUElfREFUQTAgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNQSTJfU1BJMl9SWF9UWF9SRUcxICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSTJfU1BJMl9SWF9UWF9SRUcxX1NQSV9EQVRBMV9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9SWF9UWF9SRUcxOiBTUElfREFUQTEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9SWF9UWF9SRUcxX1NQSV9EQVRBMV9Nc2sgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9SWF9UWF9SRUcxOiBTUElfREFUQTEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU1BJMl9TUEkyX0NMRUFSX0lOVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSTJfU1BJMl9DTEVBUl9JTlRfUkVHX1NQSV9DTEVBUl9JTlRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DTEVBUl9JTlRfUkVHOiBTUElfQ0xFQVJfSU5UIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DTEVBUl9JTlRfUkVHX1NQSV9DTEVBUl9JTlRfTXNrICgweGZmZmZVTCkgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DTEVBUl9JTlRfUkVHOiBTUElfQ0xFQVJfSU5UIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTUEkyX1NQSTJfQ1RSTF9SRUcxICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJX0ZJRk9fTU9ERV9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV9GSUZPX01PREUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJX0ZJRk9fTU9ERV9Nc2sgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV9GSUZPX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJX1BSSU9SSVRZX1BvcyAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV9QUklPUklUWSAoQml0IDIpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJX1BSSU9SSVRZX01zayAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV9QUklPUklUWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJX0JVU1lfUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV9CVVNZIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJX0JVU1lfTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJXzlCSVRfVkFMX1BvcyAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV85QklUX1ZBTCAoQml0IDQpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNQSTJfU1BJMl9DVFJMX1JFRzFfU1BJXzlCSVRfVkFMX01zayAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFNQSTIgU1BJMl9DVFJMX1JFRzE6IFNQSV85QklUX1ZBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ1RJTUVSMScgUG9zaXRpb24gJiBNYXNrICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0VOX1BvcyAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9FTiAoQml0IDApICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0VOX01zayAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX09ORVNIT1RfTU9ERV9FTl9Qb3MgKDFVTCkgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9PTkVTSE9UX01PREVfRU4gKEJpdCAxKSAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX09ORVNIT1RfTU9ERV9FTl9Nc2sgKDB4MlVMKSAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9PTkVTSE9UX01PREVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0NPVU5UX0RPV05fRU5fUG9zICgyVUwpICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9DT1VOVF9ET1dOX0VOIChCaXQgMikgICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0NPVU5UX0RPV05fRU5fTXNrICgweDRVTCkgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9DT1VOVF9ET1dOX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9JTjFfRVZFTlRfRkFMTF9FTl9Qb3MgKDNVTCkgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fSU4xX0VWRU5UX0ZBTExfRU4gKEJpdCAzKSAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9JTjFfRVZFTlRfRkFMTF9FTl9Nc2sgKDB4OFVMKSAgICAgLyohPCBUSU1FUjEgQ0FQVElNX0NUUkxfUkVHOiBDQVBUSU1fSU4xX0VWRU5UX0ZBTExfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0lOMl9FVkVOVF9GQUxMX0VOX1BvcyAoNFVMKSAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9JTjJfRVZFTlRfRkFMTF9FTiAoQml0IDQpICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0lOMl9FVkVOVF9GQUxMX0VOX01zayAoMHgxMFVMKSAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9JTjJfRVZFTlRfRkFMTF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fSVJRX0VOX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9DVFJMX1JFRzogQ0FQVElNX0lSUV9FTiAoQml0IDUpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fSVJRX0VOX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9DVFJMX1JFRzogQ0FQVElNX0lSUV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fRlJFRV9SVU5fTU9ERV9FTl9Qb3MgKDZVTCkgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9DVFJMX1JFRzogQ0FQVElNX0ZSRUVfUlVOX01PREVfRU4gKEJpdCA2KSAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fRlJFRV9SVU5fTU9ERV9FTl9Nc2sgKDB4NDBVTCkgICAgIC8qITwgVElNRVIxIENBUFRJTV9DVFJMX1JFRzogQ0FQVElNX0ZSRUVfUlVOX01PREVfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX1NZU19DTEtfRU5fUG9zICg3VUwpICAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9TWVNfQ0xLX0VOIChCaXQgNykgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX1NZU19DTEtfRU5fTXNrICgweDgwVUwpICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fQ1RSTF9SRUc6IENBUFRJTV9TWVNfQ0xLX0VOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX1RJTUVSX1ZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1RJTUVSX1ZBTF9SRUdfQ0FQVElNX1RJTUVSX1ZBTFVFX1BvcyAoMFVMKSAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1RJTUVSX1ZBTF9SRUc6IENBUFRJTV9USU1FUl9WQUxVRSAoQml0IDApICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1RJTUVSX1ZBTF9SRUdfQ0FQVElNX1RJTUVSX1ZBTFVFX01zayAoMHhmZmZmVUwpICAgLyohPCBUSU1FUjEgQ0FQVElNX1RJTUVSX1ZBTF9SRUc6IENBUFRJTV9USU1FUl9WQUxVRSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9TVEFUVVNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1NUQVRVU19SRUdfQ0FQVElNX0lOMV9TVEFURV9Qb3MgKDBVTCkgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1NUQVRVU19SRUc6IENBUFRJTV9JTjFfU1RBVEUgKEJpdCAwKSAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1NUQVRVU19SRUdfQ0FQVElNX0lOMV9TVEFURV9Nc2sgKDB4MVVMKSAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1NUQVRVU19SRUc6IENBUFRJTV9JTjFfU1RBVEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU1RBVFVTX1JFR19DQVBUSU1fSU4yX1NUQVRFX1BvcyAoMVVMKSAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fU1RBVFVTX1JFRzogQ0FQVElNX0lOMl9TVEFURSAoQml0IDEpICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fU1RBVFVTX1JFR19DQVBUSU1fSU4yX1NUQVRFX01zayAoMHgyVUwpICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fU1RBVFVTX1JFRzogQ0FQVElNX0lOMl9TVEFURSAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TVEFUVVNfUkVHX0NBUFRJTV9PTkVTSE9UX1BIQVNFX1BvcyAoMlVMKSAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9TVEFUVVNfUkVHOiBDQVBUSU1fT05FU0hPVF9QSEFTRSAoQml0IDIpICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TVEFUVVNfUkVHX0NBUFRJTV9PTkVTSE9UX1BIQVNFX01zayAoMHhjVUwpICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9TVEFUVVNfUkVHOiBDQVBUSU1fT05FU0hPVF9QSEFTRSAoQml0ZmllbGQtTWFzazogMHgwMykgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX0dQSU8xX0NPTkZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9HUElPMV9DT05GX1JFR19DQVBUSU1fR1BJTzFfQ09ORl9Qb3MgKDBVTCkgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9HUElPMV9DT05GX1JFRzogQ0FQVElNX0dQSU8xX0NPTkYgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9HUElPMV9DT05GX1JFR19DQVBUSU1fR1BJTzFfQ09ORl9Nc2sgKDB4M2ZVTCkgICAgIC8qITwgVElNRVIxIENBUFRJTV9HUElPMV9DT05GX1JFRzogQ0FQVElNX0dQSU8xX0NPTkYgKEJpdGZpZWxkLU1hc2s6IDB4M2YpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9HUElPMl9DT05GX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fR1BJTzJfQ09ORl9SRUdfQ0FQVElNX0dQSU8yX0NPTkZfUG9zICgwVUwpICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fR1BJTzJfQ09ORl9SRUc6IENBUFRJTV9HUElPMl9DT05GIChCaXQgMCkgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fR1BJTzJfQ09ORl9SRUdfQ0FQVElNX0dQSU8yX0NPTkZfTXNrICgweDNmVUwpICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fR1BJTzJfQ09ORl9SRUc6IENBUFRJTV9HUElPMl9DT05GIChCaXRmaWVsZC1NYXNrOiAweDNmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9SRUxPQURfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1JFTE9BRF9SRUdfQ0FQVElNX1JFTE9BRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1JFTE9BRF9SRUc6IENBUFRJTV9SRUxPQUQgKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1JFTE9BRF9SRUdfQ0FQVElNX1JFTE9BRF9Nc2sgKDB4ZmZmZlVMKSAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1JFTE9BRF9SRUc6IENBUFRJTV9SRUxPQUQgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9TSE9UV0lEVEhfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TSE9UV0lEVEhfUkVHX0NBUFRJTV9TSE9UV0lEVEhfUG9zICgwVUwpICAgICAgICAgIC8qITwgVElNRVIxIENBUFRJTV9TSE9UV0lEVEhfUkVHOiBDQVBUSU1fU0hPVFdJRFRIIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TSE9UV0lEVEhfUkVHX0NBUFRJTV9TSE9UV0lEVEhfTXNrICgweGZmZmZVTCkgICAgIC8qITwgVElNRVIxIENBUFRJTV9TSE9UV0lEVEhfUkVHOiBDQVBUSU1fU0hPVFdJRFRIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fUFJFU0NBTEVSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUFJFU0NBTEVSX1JFR19DQVBUSU1fUFJFU0NBTEVSX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fUFJFU0NBTEVSX1JFRzogQ0FQVElNX1BSRVNDQUxFUiAoQml0IDApICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUFJFU0NBTEVSX1JFR19DQVBUSU1fUFJFU0NBTEVSX01zayAoMHhmZmZmVUwpICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fUFJFU0NBTEVSX1JFRzogQ0FQVElNX1BSRVNDQUxFUiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0dQSU8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NBUFRVUkVfR1BJTzFfUkVHX0NBUFRJTV9DQVBUVVJFX0dQSU8xX1BvcyAoMFVMKSAgLyohPCBUSU1FUjEgQ0FQVElNX0NBUFRVUkVfR1BJTzFfUkVHOiBDQVBUSU1fQ0FQVFVSRV9HUElPMSAoQml0IDApICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9HUElPMV9SRUdfQ0FQVElNX0NBUFRVUkVfR1BJTzFfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX0NBUFRVUkVfR1BJTzFfUkVHOiBDQVBUSU1fQ0FQVFVSRV9HUElPMSAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0dQSU8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX0NBUFRVUkVfR1BJTzJfUkVHX0NBUFRJTV9DQVBUVVJFX0dQSU8yX1BvcyAoMFVMKSAgLyohPCBUSU1FUjEgQ0FQVElNX0NBUFRVUkVfR1BJTzJfUkVHOiBDQVBUSU1fQ0FQVFVSRV9HUElPMiAoQml0IDApICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9HUElPMl9SRUdfQ0FQVElNX0NBUFRVUkVfR1BJTzJfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX0NBUFRVUkVfR1BJTzJfUkVHOiBDQVBUSU1fQ0FQVFVSRV9HUElPMiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BSRVNDQUxFUl9WQUxfUkVHX0NBUFRJTV9QUkVTQ0FMRVJfVkFMX1BvcyAoMFVMKSAgLyohPCBUSU1FUjEgQ0FQVElNX1BSRVNDQUxFUl9WQUxfUkVHOiBDQVBUSU1fUFJFU0NBTEVSX1ZBTCAoQml0IDApICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUFJFU0NBTEVSX1ZBTF9SRUdfQ0FQVElNX1BSRVNDQUxFUl9WQUxfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX1BSRVNDQUxFUl9WQUxfUkVHOiBDQVBUSU1fUFJFU0NBTEVSX1ZBTCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX1BXTV9GUkVRX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BXTV9GUkVRX1JFR19DQVBUSU1fUFdNX0ZSRVFfUG9zICgwVUwpICAgICAgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1BXTV9GUkVRX1JFRzogQ0FQVElNX1BXTV9GUkVRIChCaXQgMCkgICAgICAgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1BXTV9GUkVRX1JFR19DQVBUSU1fUFdNX0ZSRVFfTXNrICgweGZmZmZVTCkgICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1BXTV9GUkVRX1JFRzogQ0FQVElNX1BXTV9GUkVRIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUSU1FUjFfQ0FQVElNX1BXTV9EQ19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUFdNX0RDX1JFR19DQVBUSU1fUFdNX0RDX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fUFdNX0RDX1JFRzogQ0FQVElNX1BXTV9EQyAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUFdNX0RDX1JFR19DQVBUSU1fUFdNX0RDX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fUFdNX0RDX1JFRzogQ0FQVElNX1BXTV9EQyAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fVElNRVJfSFZBTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1RJTUVSX0hWQUxfUkVHX0NBUFRJTV9USU1FUl9IVkFMVUVfUG9zICgwVUwpICAgICAgLyohPCBUSU1FUjEgQ0FQVElNX1RJTUVSX0hWQUxfUkVHOiBDQVBUSU1fVElNRVJfSFZBTFVFIChCaXQgMCkgICAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1RJTUVSX0hWQUxfUkVHX0NBUFRJTV9USU1FUl9IVkFMVUVfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX1RJTUVSX0hWQUxfUkVHOiBDQVBUSU1fVElNRVJfSFZBTFVFIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9SRUxPQURfSElHSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUkVMT0FEX0hJR0hfUkVHX0NBUFRJTV9SRUxPQURfSElHSF9Qb3MgKDBVTCkgICAgICAvKiE8IFRJTUVSMSBDQVBUSU1fUkVMT0FEX0hJR0hfUkVHOiBDQVBUSU1fUkVMT0FEX0hJR0ggKEJpdCAwKSAgICovCisjZGVmaW5lIFRJTUVSMV9DQVBUSU1fUkVMT0FEX0hJR0hfUkVHX0NBUFRJTV9SRUxPQURfSElHSF9Nc2sgKDB4ZmZmZlVMKSAvKiE8IFRJTUVSMSBDQVBUSU1fUkVMT0FEX0hJR0hfUkVHOiBDQVBUSU1fUkVMT0FEX0hJR0ggKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfUkVHX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfUG9zICgwVUwpIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfUkVHOiBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8xIChCaXQgMCkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfUkVHX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzFfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMV9SRUc6IENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzEgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRJTUVSMV9DQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzJfUkVHX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzJfUG9zICgwVUwpIC8qITwgVElNRVIxIENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzJfUkVHOiBDQVBUSU1fQ0FQVFVSRV9ISUdIX0dQSU8yIChCaXQgMCkgKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzJfUkVHX0NBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzJfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX0NBUFRVUkVfSElHSF9HUElPMl9SRUc6IENBUFRJTV9DQVBUVVJFX0hJR0hfR1BJTzIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVElNRVIxX0NBUFRJTV9TSE9UV0lEVEhfSElHSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVElNRVIxX0NBUFRJTV9TSE9UV0lEVEhfSElHSF9SRUdfQ0FQVElNX1NIT1RXSURUSF9ISUdIX1BvcyAoMFVMKSAvKiE8IFRJTUVSMSBDQVBUSU1fU0hPVFdJRFRIX0hJR0hfUkVHOiBDQVBUSU1fU0hPVFdJRFRIX0hJR0ggKEJpdCAwKSAqLworI2RlZmluZSBUSU1FUjFfQ0FQVElNX1NIT1RXSURUSF9ISUdIX1JFR19DQVBUSU1fU0hPVFdJRFRIX0hJR0hfTXNrICgweGZmZmZVTCkgLyohPCBUSU1FUjEgQ0FQVElNX1NIT1RXSURUSF9ISUdIX1JFRzogQ0FQVElNX1NIT1RXSURUSF9ISUdIIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdUUk5HJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBUUk5HX1RSTkdfQ1RSTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRSTkdfVFJOR19DVFJMX1JFR19UUk5HX0VOQUJMRV9Qb3MgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19DVFJMX1JFRzogVFJOR19FTkFCTEUgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19DVFJMX1JFR19UUk5HX0VOQUJMRV9Nc2sgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19DVFJMX1JFRzogVFJOR19FTkFCTEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19DVFJMX1JFR19UUk5HX01PREVfUG9zICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19DVFJMX1JFRzogVFJOR19NT0RFIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19DVFJMX1JFR19UUk5HX01PREVfTXNrICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19DVFJMX1JFRzogVFJOR19NT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRSTkdfVFJOR19GSUZPTFZMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRSTkdfVFJOR19GSUZPTFZMX1JFR19UUk5HX0ZJRk9MVkxfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19GSUZPTFZMX1JFRzogVFJOR19GSUZPTFZMIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19GSUZPTFZMX1JFR19UUk5HX0ZJRk9MVkxfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19GSUZPTFZMX1JFRzogVFJOR19GSUZPTFZMIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICovCisjZGVmaW5lIFRSTkdfVFJOR19GSUZPTFZMX1JFR19UUk5HX0ZJRk9GVUxMX1BvcyAoNVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19GSUZPTFZMX1JFRzogVFJOR19GSUZPRlVMTCAoQml0IDUpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19GSUZPTFZMX1JFR19UUk5HX0ZJRk9GVUxMX01zayAoMHgyMFVMKSAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19GSUZPTFZMX1JFRzogVFJOR19GSUZPRlVMTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVFJOR19UUk5HX1ZFUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFRSTkdfVFJOR19WRVJfUkVHX1RSTkdfU1ZOX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19WRVJfUkVHOiBUUk5HX1NWTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19WRVJfUkVHX1RSTkdfU1ZOX01zayAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19WRVJfUkVHOiBUUk5HX1NWTiAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19WRVJfUkVHX1RSTkdfTUlOX1BvcyAgICAgICAgKDE2VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19WRVJfUkVHOiBUUk5HX01JTiAoQml0IDE2KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19WRVJfUkVHX1RSTkdfTUlOX01zayAgICAgICAgKDB4ZmYwMDAwVUwpICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19WRVJfUkVHOiBUUk5HX01JTiAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19WRVJfUkVHX1RSTkdfTUFKX1BvcyAgICAgICAgKDI0VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19WRVJfUkVHOiBUUk5HX01BSiAoQml0IDI0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRSTkdfVFJOR19WRVJfUkVHX1RSTkdfTUFKX01zayAgICAgICAgKDB4ZmYwMDAwMDBVTCkgICAgICAgICAgICAvKiE8IFRSTkcgVFJOR19WRVJfUkVHOiBUUk5HX01BSiAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICAgc3RydWN0ICdVQVJUJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfUkJSX1RIUl9ETExfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlRfVUFSVF9SQlJfVEhSX0RMTF9SRUdfUkJSX1RIUl9ETExfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9SQlJfVEhSX0RMTF9SRUc6IFJCUl9USFJfRExMIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVUFSVF9SQlJfVEhSX0RMTF9SRUdfUkJSX1RIUl9ETExfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9SQlJfVEhSX0RMTF9SRUc6IFJCUl9USFJfRExMIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfSUVSX0RMSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRVJCRklfZGxoMF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IEVSQkZJX2RsaDAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRVJCRklfZGxoMF9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IEVSQkZJX2RsaDAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRVRCRUlfZGxoMV9Qb3MgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IEVUQkVJX2RsaDEgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRVRCRUlfZGxoMV9Nc2sgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IEVUQkVJX2RsaDEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRUxTSV9kaGwyX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IEVMU0lfZGhsMiAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRUxTSV9kaGwyX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IEVMU0lfZGhsMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfUFRJTUVfZGxoN19Qb3MgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IFBUSU1FX2RsaDcgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfUFRJTUVfZGxoN19Nc2sgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUVSX0RMSF9SRUc6IFBUSU1FX2RsaDcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfSUlSX0ZDUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfSUlSX0ZDUl9SRUdfSUlSX0ZDUl9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUlSX0ZDUl9SRUc6IElJUl9GQ1IgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfSUlSX0ZDUl9SRUdfSUlSX0ZDUl9Nc2sgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfSUlSX0ZDUl9SRUc6IElJUl9GQ1IgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9MQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0RMU19Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9ETFMgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0RMU19Nc2sgICAgICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9ETFMgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX1NUT1BfUG9zICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9TVE9QIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX1NUT1BfTXNrICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9TVE9QIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX1BFTl9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9QRU4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX1BFTl9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9QRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0VQU19Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9FUFMgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0VQU19Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9FUFMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0JDX1BvcyAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9CQyAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0JDX01zayAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9CQyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0RMQUJfUG9zICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9ETEFCIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTENSX1JFR19VQVJUX0RMQUJfTXNrICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTENSX1JFRzogVUFSVF9ETEFCIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9NQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX09VVDFfUG9zICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9PVVQxIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX09VVDFfTXNrICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9PVVQxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX09VVDJfUG9zICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9PVVQyIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX09VVDJfTXNrICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9PVVQyIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX0xCX1BvcyAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9MQiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX0xCX01zayAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9MQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX1NJUkVfUG9zICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9TSVJFIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTUNSX1JFR19VQVJUX1NJUkVfTXNrICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTUNSX1JFRzogVUFSVF9TSVJFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9MU1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX0RSX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9EUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX0RSX01zayAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9EUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX09FX1BvcyAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9PRSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX09FX01zayAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9PRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX1BFX1BvcyAgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9QRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX1BFX01zayAgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9QRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX0ZFX1BvcyAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9GRSAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX0ZFX01zayAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9GRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX0JJX1BvcyAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9CSSAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX0JJX01zayAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9CSSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX1RIUkVfUG9zICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9USFJFIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX1RIUkVfTXNrICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9USFJFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX1RFTVRfUG9zICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9URU1UIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfTFNSX1JFR19VQVJUX1RFTVRfTXNrICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfTFNSX1JFRzogVUFSVF9URU1UIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9TQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfU0NSX1JFR19VQVJUX1NDUkFUQ0hfUEFEX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfU0NSX1JFRzogVUFSVF9TQ1JBVENIX1BBRCAoQml0IDApICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfU0NSX1JFR19VQVJUX1NDUkFUQ0hfUEFEX01zayAoMHhmZlVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfU0NSX1JFRzogVUFSVF9TQ1JBVENIX1BBRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9VU1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfVVNSX1JFR19VQVJUX0JVU1lfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfVVNSX1JFRzogVUFSVF9CVVNZIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfVVNSX1JFR19VQVJUX0JVU1lfTXNrICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfVVNSX1JFRzogVUFSVF9CVVNZIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlRfVUFSVF9TUlJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfU1JSX1JFR19VQVJUX1VSX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfU1JSX1JFRzogVUFSVF9VUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfU1JSX1JFR19VQVJUX1VSX01zayAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUIFVBUlRfU1JSX1JFRzogVUFSVF9VUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX1NCQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUX1VBUlRfU0JDUl9SRUdfVUFSVF9TSEFET1dfQlJFQUtfQ09OVFJPTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBVQVJUIFVBUlRfU0JDUl9SRUc6IFVBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0wgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBVQVJUX1VBUlRfU0JDUl9SRUdfVUFSVF9TSEFET1dfQlJFQUtfQ09OVFJPTF9Nc2sgKDB4MVVMKSAgICAgICAgLyohPCBVQVJUIFVBUlRfU0JDUl9SRUc6IFVBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUX1VBUlRfRE1BU0FfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlRfVUFSVF9ETUFTQV9SRUdfRE1BU0FfUG9zICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9ETUFTQV9SRUc6IERNQVNBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVUFSVF9ETUFTQV9SRUdfRE1BU0FfTXNrICAgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9ETUFTQV9SRUc6IERNQVNBIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX0RMRl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlRfVUFSVF9ETEZfUkVHX1VBUlRfRExGX1BvcyAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9ETEZfUkVHOiBVQVJUX0RMRiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVUFSVF9ETEZfUkVHX1VBUlRfRExGX01zayAgICAgICAgKDB4ZlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9ETEZfUkVHOiBVQVJUX0RMRiAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX0NQUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlRfVUFSVF9DUFJfUkVHX0NQUl9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9DUFJfUkVHOiBDUFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVUFSVF9DUFJfUkVHX0NQUl9Nc2sgICAgICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9DUFJfUkVHOiBDUFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX1VDVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlRfVUFSVF9VQ1ZfUkVHX1VDVl9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9VQ1ZfUkVHOiBVQ1YgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVUFSVF9VQ1ZfUkVHX1VDVl9Nc2sgICAgICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9VQ1ZfUkVHOiBVQ1YgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVF9VQVJUX0NUUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlRfVUFSVF9DVFJfUkVHX0NUUl9Qb3MgICAgICAgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9DVFJfUkVHOiBDVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlRfVUFSVF9DVFJfUkVHX0NUUl9Nc2sgICAgICAgICAgICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQgVUFSVF9DVFJfUkVHOiBDVFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgICAgICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ1VBUlQyJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1JCUl9USFJfRExMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1JCUl9USFJfRExMX1JFR19SQlJfVEhSX0RMTF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1JCUl9USFJfRExMX1JFRzogUkJSX1RIUl9ETEwgKEJpdCAwKSAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1JCUl9USFJfRExMX1JFR19SQlJfVEhSX0RMTF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1JCUl9USFJfRExMX1JFRzogUkJSX1RIUl9ETEwgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfSUVSX0RMSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX0VSQkZJX2RsaDBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBFUkJGSV9kbGgwIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX0VSQkZJX2RsaDBfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBFUkJGSV9kbGgwIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX0VUQkVJX2RsaDFfUG9zICgxVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBFVEJFSV9kbGgxIChCaXQgMSkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX0VUQkVJX2RsaDFfTXNrICgweDJVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBFVEJFSV9kbGgxIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX0VMU0lfZGhsMl9Qb3MgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBFTFNJX2RobDIgKEJpdCAyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX0VMU0lfZGhsMl9Nc2sgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBFTFNJX2RobDIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX1BUSU1FX2RsaDdfUG9zICg3VUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBQVElNRV9kbGg3IChCaXQgNykgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lFUl9ETEhfUkVHX1BUSU1FX2RsaDdfTXNrICgweDgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lFUl9ETEhfUkVHOiBQVElNRV9kbGg3IChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfSUlSX0ZDUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lJUl9GQ1JfUkVHX0lJUl9GQ1JfUG9zICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lJUl9GQ1JfUkVHOiBJSVJfRkNSIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0lJUl9GQ1JfUkVHX0lJUl9GQ1JfTXNrICAgKDB4ZmZmZlVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0lJUl9GQ1JfUkVHOiBJSVJfRkNSIChCaXRmaWVsZC1NYXNrOiAweGZmZmYpICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9MQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9ETFNfUG9zICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfRExTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9ETFNfTXNrICAgICAgKDB4M1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfRExTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9TVE9QX1BvcyAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfU1RPUCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9TVE9QX01zayAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfU1RPUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9QRU5fUG9zICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfUEVOIChCaXQgMykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9QRU5fTXNrICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfUEVOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9FUFNfUG9zICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfRVBTIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9FUFNfTXNrICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfRVBTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9CQ19Qb3MgICAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfQkMgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9CQ19Nc2sgICAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfQkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9ETEFCX1BvcyAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfRExBQiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xDUl9SRUdfVUFSVF9ETEFCX01zayAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xDUl9SRUc6IFVBUlRfRExBQiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9NQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9SVFNfUG9zICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfUlRTIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9SVFNfTXNrICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfUlRTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9PVVQxX1BvcyAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfT1VUMSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9PVVQxX01zayAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfT1VUMSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9PVVQyX1BvcyAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfT1VUMiAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9PVVQyX01zayAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfT1VUMiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9MQl9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfTEIgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9MQl9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfTEIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9BRkNFX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfQUZDRSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9BRkNFX01zayAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfQUZDRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9TSVJFX1BvcyAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfU0lSRSAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01DUl9SRUdfVUFSVF9TSVJFX01zayAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01DUl9SRUc6IFVBUlRfU0lSRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9MU1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9EUl9Qb3MgICAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfRFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9EUl9Nc2sgICAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfRFIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9PRV9Qb3MgICAgICAgKDFVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfT0UgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9PRV9Nc2sgICAgICAgKDB4MlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfT0UgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9QRV9Qb3MgICAgICAgKDJVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfUEUgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9QRV9Nc2sgICAgICAgKDB4NFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfUEUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9GRV9Qb3MgICAgICAgKDNVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfRkUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9GRV9Nc2sgICAgICAgKDB4OFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfRkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9CSV9Qb3MgICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfQkkgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9CSV9Nc2sgICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfQkkgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9USFJFX1BvcyAgICAgKDVVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfVEhSRSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9USFJFX01zayAgICAgKDB4MjBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfVEhSRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9URU1UX1BvcyAgICAgKDZVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfVEVNVCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9URU1UX01zayAgICAgKDB4NDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfVEVNVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9SRkVfUG9zICAgICAgKDdVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfUkZFIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX0xTUl9SRUdfVUFSVF9SRkVfTXNrICAgICAgKDB4ODBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX0xTUl9SRUc6IFVBUlRfUkZFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9NU1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01TUl9SRUdfVUFSVF9EQ1RTX1BvcyAgICAgKDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01TUl9SRUc6IFVBUlRfRENUUyAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01TUl9SRUdfVUFSVF9EQ1RTX01zayAgICAgKDB4MVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01TUl9SRUc6IFVBUlRfRENUUyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01TUl9SRUdfVUFSVF9DVFNfUG9zICAgICAgKDRVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01TUl9SRUc6IFVBUlRfQ1RTIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX01TUl9SRUdfVUFSVF9DVFNfTXNrICAgICAgKDB4MTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX01TUl9SRUc6IFVBUlRfQ1RTIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TQ1JfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NDUl9SRUdfVUFSVF9TQ1JBVENIX1BBRF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NDUl9SRUc6IFVBUlRfU0NSQVRDSF9QQUQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NDUl9SRUdfVUFSVF9TQ1JBVENIX1BBRF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NDUl9SRUc6IFVBUlRfU0NSQVRDSF9QQUQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjBfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjBfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjBfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjBfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjBfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxX1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxX1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxX1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxX1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMl9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMl9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMl9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMl9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjNfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjNfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjNfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjNfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjNfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFI0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI0X1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI0X1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI0X1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI0X1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSNV9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSNV9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSNV9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSNV9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjZfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjZfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjZfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjZfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFI3X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI3X1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI3X1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFI3X1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFI3X1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSOF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSOF9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSOF9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSOF9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSOF9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjlfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjlfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjlfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjlfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjlfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxMF9SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxMF9SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxMF9SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxMF9SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjExX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjExX1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjExX1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjExX1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjExX1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTJfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTJfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTJfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTJfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxM19SRUdfU1JCUl9TVEhSeF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxM19SRUc6IFNSQlJfU1RIUnggKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUkJSX1NUSFIxM19SRUdfU1JCUl9TVEhSeF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUkJSX1NUSFIxM19SRUc6IFNSQlJfU1RIUnggKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjE0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjE0X1JFR19TUkJSX1NUSFJ4X1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjE0X1JFRzogU1JCUl9TVEhSeCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NSQlJfU1RIUjE0X1JFR19TUkJSX1NUSFJ4X01zayAoMHhmZlVMKSAgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NSQlJfU1RIUjE0X1JFRzogU1JCUl9TVEhSeCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTVfUkVHX1NSQlJfU1RIUnhfUG9zICgwVUwpICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTVfUkVHOiBTUkJSX1NUSFJ4IChCaXQgMCkgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JCUl9TVEhSMTVfUkVHX1NSQlJfU1RIUnhfTXNrICgweGZmVUwpICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JCUl9TVEhSMTVfUkVHOiBTUkJSX1NUSFJ4IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfRkFSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9GQVJfUkVHX1VBUlRfRkFSX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9GQVJfUkVHOiBVQVJUX0ZBUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9GQVJfUkVHX1VBUlRfRkFSX01zayAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9GQVJfUkVHOiBVQVJUX0ZBUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfVVNSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfQlVTWV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX0JVU1kgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfQlVTWV9Nc2sgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX0JVU1kgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfVEZORl9Qb3MgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1RGTkYgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfVEZORl9Nc2sgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1RGTkYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfVEZFX1BvcyAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1RGRSAoQml0IDIpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfVEZFX01zayAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1RGRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfUkZORV9Qb3MgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1JGTkUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfUkZORV9Nc2sgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1JGTkUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfUkZGX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1JGRiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VU1JfUkVHX1VBUlRfUkZGX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VU1JfUkVHOiBVQVJUX1JGRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfVEZMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9URkxfUkVHX1VBUlRfVFJBTlNNSVRfRklGT19MRVZFTF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9URkxfUkVHOiBVQVJUX1RSQU5TTUlUX0ZJRk9fTEVWRUwgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9URkxfUkVHX1VBUlRfVFJBTlNNSVRfRklGT19MRVZFTF9Nc2sgKDB4ZmZmZlVMKSAgICAgLyohPCBVQVJUMiBVQVJUMl9URkxfUkVHOiBVQVJUX1RSQU5TTUlUX0ZJRk9fTEVWRUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1JGTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfUkZMX1JFR19VQVJUX1JFQ0VJVkVfRklGT19MRVZFTF9Qb3MgKDBVTCkgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfUkZMX1JFRzogVUFSVF9SRUNFSVZFX0ZJRk9fTEVWRUwgKEJpdCAwKSAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfUkZMX1JFR19VQVJUX1JFQ0VJVkVfRklGT19MRVZFTF9Nc2sgKDB4ZmZmZlVMKSAgICAgIC8qITwgVUFSVDIgVUFSVDJfUkZMX1JFRzogVUFSVF9SRUNFSVZFX0ZJRk9fTEVWRUwgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NSUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JSX1JFR19VQVJUX1VSX1BvcyAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JSX1JFRzogVUFSVF9VUiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JSX1JFR19VQVJUX1VSX01zayAgICAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JSX1JFRzogVUFSVF9VUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JSX1JFR19VQVJUX1JGUl9Qb3MgICAgICAoMVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JSX1JFRzogVUFSVF9SRlIgKEJpdCAxKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JSX1JFR19VQVJUX1JGUl9Nc2sgICAgICAoMHgyVUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JSX1JFRzogVUFSVF9SRlIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JSX1JFR19VQVJUX1hGUl9Qb3MgICAgICAoMlVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JSX1JFRzogVUFSVF9YRlIgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JSX1JFR19VQVJUX1hGUl9Nc2sgICAgICAoMHg0VUwpICAgICAgICAgICAgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JSX1JFRzogVUFSVF9YRlIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JUU19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JUU19SRUdfVUFSVF9TSEFET1dfUkVRVUVTVF9UT19TRU5EX1BvcyAoMFVMKSAgICAgIC8qITwgVUFSVDIgVUFSVDJfU1JUU19SRUc6IFVBUlRfU0hBRE9XX1JFUVVFU1RfVE9fU0VORCAoQml0IDApICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU1JUU19SRUdfVUFSVF9TSEFET1dfUkVRVUVTVF9UT19TRU5EX01zayAoMHgxVUwpICAgIC8qITwgVUFSVDIgVUFSVDJfU1JUU19SRUc6IFVBUlRfU0hBRE9XX1JFUVVFU1RfVE9fU0VORCAoQml0ZmllbGQtTWFzazogMHgwMSkgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU0JDUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU0JDUl9SRUdfVUFSVF9TSEFET1dfQlJFQUtfQ09OVFJPTF9Qb3MgKDBVTCkgICAgICAgIC8qITwgVUFSVDIgVUFSVDJfU0JDUl9SRUc6IFVBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0wgKEJpdCAwKSAgICAgKi8KKyNkZWZpbmUgVUFSVDJfVUFSVDJfU0JDUl9SRUdfVUFSVF9TSEFET1dfQlJFQUtfQ09OVFJPTF9Nc2sgKDB4MVVMKSAgICAgIC8qITwgVUFSVDIgVUFSVDJfU0JDUl9SRUc6IFVBUlRfU0hBRE9XX0JSRUFLX0NPTlRST0wgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NETUFNX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NETUFNX1JFR19VQVJUX1NIQURPV19ETUFfTU9ERV9Qb3MgKDBVTCkgICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NETUFNX1JFRzogVUFSVF9TSEFET1dfRE1BX01PREUgKEJpdCAwKSAgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NETUFNX1JFR19VQVJUX1NIQURPV19ETUFfTU9ERV9Nc2sgKDB4MVVMKSAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NETUFNX1JFRzogVUFSVF9TSEFET1dfRE1BX01PREUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9TRkVfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NGRV9SRUdfVUFSVF9TSEFET1dfRklGT19FTkFCTEVfUG9zICgwVUwpICAgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NGRV9SRUc6IFVBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFIChCaXQgMCkgICAgICAgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NGRV9SRUdfVUFSVF9TSEFET1dfRklGT19FTkFCTEVfTXNrICgweDFVTCkgICAgICAgICAvKiE8IFVBUlQyIFVBUlQyX1NGRV9SRUc6IFVBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfU1JUX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUlRfUkVHX1VBUlRfU0hBRE9XX1JDVlJfVFJJR0dFUl9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUlRfUkVHOiBVQVJUX1NIQURPV19SQ1ZSX1RSSUdHRVIgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9TUlRfUkVHX1VBUlRfU0hBRE9XX1JDVlJfVFJJR0dFUl9Nc2sgKDB4M1VMKSAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9TUlRfUkVHOiBVQVJUX1NIQURPV19SQ1ZSX1RSSUdHRVIgKEJpdGZpZWxkLU1hc2s6IDB4MDMpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVBUlQyX1VBUlQyX1NURVRfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NURVRfUkVHX1VBUlRfU0hBRE9XX1RYX0VNUFRZX1RSSUdHRVJfUG9zICgwVUwpICAgICAvKiE8IFVBUlQyIFVBUlQyX1NURVRfUkVHOiBVQVJUX1NIQURPV19UWF9FTVBUWV9UUklHR0VSIChCaXQgMCkgICovCisjZGVmaW5lIFVBUlQyX1VBUlQyX1NURVRfUkVHX1VBUlRfU0hBRE9XX1RYX0VNUFRZX1RSSUdHRVJfTXNrICgweDNVTCkgICAvKiE8IFVBUlQyIFVBUlQyX1NURVRfUkVHOiBVQVJUX1NIQURPV19UWF9FTVBUWV9UUklHR0VSIChCaXRmaWVsZC1NYXNrOiAweDAzKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfSFRYX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9IVFhfUkVHX1VBUlRfSEFMVF9UWF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9IVFhfUkVHOiBVQVJUX0hBTFRfVFggKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9IVFhfUkVHX1VBUlRfSEFMVF9UWF9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9IVFhfUkVHOiBVQVJUX0hBTFRfVFggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVQVJUMl9VQVJUMl9ETUFTQV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9ETUFTQV9SRUdfRE1BU0FfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9ETUFTQV9SRUc6IERNQVNBIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9ETUFTQV9SRUdfRE1BU0FfTXNrICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9ETUFTQV9SRUc6IERNQVNBIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfRExGX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9ETEZfUkVHX1VBUlRfRExGX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9ETEZfUkVHOiBVQVJUX0RMRiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9ETEZfUkVHX1VBUlRfRExGX01zayAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9ETEZfUkVHOiBVQVJUX0RMRiAoQml0ZmllbGQtTWFzazogMHgwZikgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfQ1BSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9DUFJfUkVHX0NQUl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9DUFJfUkVHOiBDUFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9DUFJfUkVHX0NQUl9Nc2sgICAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9DUFJfUkVHOiBDUFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfVUNWX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VQ1ZfUkVHX1VDVl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VQ1ZfUkVHOiBVQ1YgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9VQ1ZfUkVHX1VDVl9Nc2sgICAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9VQ1ZfUkVHOiBVQ1YgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVUFSVDJfVUFSVDJfQ1RSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9DVFJfUkVHX0NUUl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9DVFJfUkVHOiBDVFIgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVQVJUMl9VQVJUMl9DVFJfUkVHX0NUUl9Nc2sgICAgICAgICAgICgweGZmZmZVTCkgICAgICAgICAgICAgICAgLyohPCBVQVJUMiBVQVJUMl9DVFJfUkVHOiBDVFIgKEJpdGZpZWxkLU1hc2s6IDB4ZmZmZikgICAgICAgICAgICAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgIHN0cnVjdCAnVVNCJyBQb3NpdGlvbiAmIE1hc2sgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfTUNUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19VU0JFTl9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogVVNCRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19VU0JFTl9Nc2sgICAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogVVNCRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19VU0JfREJHX1BvcyAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogVVNCX0RCRyAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19VU0JfREJHX01zayAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogVVNCX0RCRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19VU0JfTkFUX1BvcyAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogVVNCX05BVCAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19VU0JfTkFUX01zayAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogVVNCX05BVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19MU01PREVfUG9zICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogTFNNT0RFIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01DVFJMX1JFR19MU01PREVfTXNrICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01DVFJMX1JFRzogTFNNT0RFIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9YQ1ZESUFHX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVEVTVF9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RFU1QgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVEVTVF9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RFU1QgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVFhwX1BvcyAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RYcCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVFhwX01zayAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RYcCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVFhuX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RYbiAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVFhuX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RYbiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVFhFTl9Qb3MgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RYRU4gKEJpdCAzKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9YQ1ZfVFhFTl9Nc2sgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfWENWX1RYRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9SQ1ZfUG9zICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfUkNWIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9SQ1ZfTXNrICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfUkNWIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9WTUlOX1BvcyAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfVk1JTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9WTUlOX01zayAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfVk1JTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9WUElOX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfVlBJTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1hDVkRJQUdfUkVHX1VTQl9WUElOX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1hDVkRJQUdfUkVHOiBVU0JfVlBJTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1RDUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RDUl9SRUdfVVNCX0NBREpfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RDUl9SRUc6IFVTQl9DQURKIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RDUl9SRUdfVVNCX0NBREpfTXNrICAgICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RDUl9SRUc6IFVTQl9DQURKIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RDUl9SRUdfVVNCX1ZBREpfUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RDUl9SRUc6IFVTQl9WQURKIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RDUl9SRUdfVVNCX1ZBREpfTXNrICAgICAgICAgICgweGUwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RDUl9SRUc6IFVTQl9WQURKIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX1VUUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX1VUUl9SRVNfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9VVFJfUkVTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX1VUUl9SRVNfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9VVFJfUkVTIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX1NGX1BvcyAgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9TRiAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX1NGX01zayAgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9TRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX05DUkNfUG9zICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9OQ1JDIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX05DUkNfTXNrICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9OQ1JDIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX0RJQUdfUG9zICAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9ESUFHIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VUUl9SRUdfVVNCX0RJQUdfTXNrICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VUUl9SRUc6IFVTQl9ESUFHIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0ZBUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0ZBUl9SRUdfVVNCX0FEX1BvcyAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZBUl9SRUc6IFVTQl9BRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZBUl9SRUdfVVNCX0FEX01zayAgICAgICAgICAgICgweDdmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZBUl9SRUc6IFVTQl9BRCAoQml0ZmllbGQtTWFzazogMHg3ZikgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZBUl9SRUdfVVNCX0FEX0VOX1BvcyAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZBUl9SRUc6IFVTQl9BRF9FTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZBUl9SRUdfVVNCX0FEX0VOX01zayAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZBUl9SRUc6IFVTQl9BRF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfTkZTUl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX05GU1JfUkVHX1VTQl9ORlNfUG9zICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05GU1JfUkVHOiBVU0JfTkZTIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05GU1JfUkVHX1VTQl9ORlNfTXNrICAgICAgICAgICgweDNVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05GU1JfUkVHOiBVU0JfTkZTIChCaXRmaWVsZC1NYXNrOiAweDAzKSAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfTUFFVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9XQVJOX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfV0FSTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9XQVJOX01zayAgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfV0FSTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9BTFRfUG9zICAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfQUxUIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9BTFRfTXNrICAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfQUxUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9UWF9FVl9Qb3MgICAgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfVFhfRVYgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9UWF9FVl9Nc2sgICAgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfVFhfRVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9GUkFNRV9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRlJBTUUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9GUkFNRV9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRlJBTUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9OQUtfUG9zICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfTkFLIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9OQUtfTXNrICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfTkFLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9VTERfUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfVUxEIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9VTERfTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfVUxEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9SWF9FVl9Qb3MgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfUlhfRVYgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9SWF9FVl9Nc2sgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfUlhfRVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9JTlRSX1BvcyAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfSU5UUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9JTlRSX01zayAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfSU5UUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9FUDBfVFhfUG9zICAgICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRVAwX1RYIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9FUDBfVFhfTXNrICAgICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRVAwX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9FUDBfUlhfUG9zICAgICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRVAwX1JYIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9FUDBfUlhfTXNrICAgICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRVAwX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9FUDBfTkFLX1BvcyAgICAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRVAwX05BSyAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9FUDBfTkFLX01zayAgICAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfRVAwX05BSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9DSF9FVl9Qb3MgICAgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfQ0hfRVYgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BRVZfUkVHX1VTQl9DSF9FVl9Nc2sgICAgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BRVZfUkVHOiBVU0JfQ0hfRVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfTUFNU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9XQVJOX1BvcyAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fV0FSTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9XQVJOX01zayAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fV0FSTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9BTFRfUG9zICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fQUxUIChCaXQgMSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9BTFRfTXNrICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fQUxUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9UWF9FVl9Qb3MgICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fVFhfRVYgKEJpdCAyKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9UWF9FVl9Nc2sgICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fVFhfRVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9GUkFNRV9Qb3MgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRlJBTUUgKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9GUkFNRV9Nc2sgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRlJBTUUgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9OQUtfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fTkFLIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9OQUtfTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fTkFLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9VTERfUG9zICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fVUxEIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9VTERfTXNrICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fVUxEIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9SWF9FVl9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fUlhfRVYgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9SWF9FVl9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fUlhfRVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9JTlRSX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fSU5UUiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9JTlRSX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fSU5UUiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9FUDBfVFhfUG9zICAgICg4VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRVAwX1RYIChCaXQgOCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9FUDBfVFhfTXNrICAgICgweDEwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRVAwX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9FUDBfUlhfUG9zICAgICg5VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRVAwX1JYIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9FUDBfUlhfTXNrICAgICgweDIwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRVAwX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9FUDBfTkFLX1BvcyAgICgxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRVAwX05BSyAoQml0IDEwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9FUDBfTkFLX01zayAgICgweDQwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fRVAwX05BSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9DSF9FVl9Qb3MgICAgICgxMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fQ0hfRVYgKEJpdCAxMSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX01BTVNLX1JFR19VU0JfTV9DSF9FVl9Nc2sgICAgICgweDgwMFVMKSAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX01BTVNLX1JFRzogVVNCX01fQ0hfRVYgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfQUxURVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfRU9QX1BvcyAgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX0VPUCAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfRU9QX01zayAgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX0VPUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfU0QzX1BvcyAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1NEMyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfU0QzX01zayAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1NEMyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfU0Q1X1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1NENSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfU0Q1X01zayAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1NENSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfUkVTRVRfUG9zICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1JFU0VUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfUkVTRVRfTXNrICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfUkVTVU1FX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1JFU1VNRSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVEVWX1JFR19VU0JfUkVTVU1FX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVEVWX1JFRzogVVNCX1JFU1VNRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9BTFRNU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fRU9QX1BvcyAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX0VPUCAoQml0IDMpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fRU9QX01zayAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX0VPUCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fU0QzX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1NEMyAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fU0QzX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1NEMyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fU0Q1X1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1NENSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fU0Q1X01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1NENSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fUkVTRVRfUG9zICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1JFU0VUIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fUkVTRVRfTXNrICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1JFU0VUIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fUkVTVU1FX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1JFU1VNRSAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0FMVE1TS19SRUdfVVNCX01fUkVTVU1FX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0FMVE1TS19SRUc6IFVTQl9NX1JFU1VNRSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhFVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYRVZfUkVHX1VTQl9UWEZJRk8zMV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRVZfUkVHOiBVU0JfVFhGSUZPMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRVZfUkVHX1VTQl9UWEZJRk8zMV9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRVZfUkVHOiBVU0JfVFhGSUZPMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRVZfUkVHX1VTQl9UWFVEUlJOMzFfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRVZfUkVHOiBVU0JfVFhVRFJSTjMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRVZfUkVHX1VTQl9UWFVEUlJOMzFfTXNrICAgICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRVZfUkVHOiBVU0JfVFhVRFJSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhNU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYTVNLX1JFR19VU0JfTV9UWEZJRk8zMV9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYTVNLX1JFRzogVVNCX01fVFhGSUZPMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYTVNLX1JFR19VU0JfTV9UWEZJRk8zMV9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYTVNLX1JFRzogVVNCX01fVFhGSUZPMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYTVNLX1JFR19VU0JfTV9UWFVEUlJOMzFfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYTVNLX1JFRzogVVNCX01fVFhVRFJSTjMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYTVNLX1JFR19VU0JfTV9UWFVEUlJOMzFfTXNrICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYTVNLX1JFRzogVVNCX01fVFhVRFJSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhFVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYRVZfUkVHX1VTQl9SWEZJRk8zMV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRVZfUkVHOiBVU0JfUlhGSUZPMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRVZfUkVHX1VTQl9SWEZJRk8zMV9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRVZfUkVHOiBVU0JfUlhGSUZPMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRVZfUkVHX1VTQl9SWE9WUlJOMzFfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRVZfUkVHOiBVU0JfUlhPVlJSTjMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRVZfUkVHX1VTQl9SWE9WUlJOMzFfTXNrICAgICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRVZfUkVHOiBVU0JfUlhPVlJSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhNU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYTVNLX1JFR19VU0JfTV9SWEZJRk8zMV9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYTVNLX1JFRzogVVNCX01fUlhGSUZPMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYTVNLX1JFR19VU0JfTV9SWEZJRk8zMV9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYTVNLX1JFRzogVVNCX01fUlhGSUZPMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYTVNLX1JFR19VU0JfTV9SWE9WUlJOMzFfUG9zICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYTVNLX1JFRzogVVNCX01fUlhPVlJSTjMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYTVNLX1JFR19VU0JfTV9SWE9WUlJOMzFfTXNrICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYTVNLX1JFRzogVVNCX01fUlhPVlJSTjMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfTkFLRVZfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX05BS0VWX1JFR19VU0JfSU4zMV9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS0VWX1JFRzogVVNCX0lOMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05BS0VWX1JFR19VU0JfSU4zMV9Nc2sgICAgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS0VWX1JFRzogVVNCX0lOMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05BS0VWX1JFR19VU0JfT1VUMzFfUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS0VWX1JFRzogVVNCX09VVDMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05BS0VWX1JFR19VU0JfT1VUMzFfTXNrICAgICAgICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS0VWX1JFRzogVVNCX09VVDMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9OQUtNU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX05BS01TS19SRUdfVVNCX01fSU4zMV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS01TS19SRUc6IFVTQl9NX0lOMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05BS01TS19SRUdfVVNCX01fSU4zMV9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS01TS19SRUc6IFVTQl9NX0lOMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05BS01TS19SRUdfVVNCX01fT1VUMzFfUG9zICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS01TS19SRUc6IFVTQl9NX09VVDMxIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX05BS01TS19SRUdfVVNCX01fT1VUMzFfTXNrICAgICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX05BS01TS19SRUc6IFVTQl9NX09VVDMxIChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRldFVl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0ZXRVZfUkVHX1VTQl9UWFdBUk4zMV9Qb3MgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXRVZfUkVHOiBVU0JfVFhXQVJOMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZXRVZfUkVHX1VTQl9UWFdBUk4zMV9Nc2sgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXRVZfUkVHOiBVU0JfVFhXQVJOMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZXRVZfUkVHX1VTQl9SWFdBUk4zMV9Qb3MgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXRVZfUkVHOiBVU0JfUlhXQVJOMzEgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZXRVZfUkVHX1VTQl9SWFdBUk4zMV9Nc2sgICAgICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXRVZfUkVHOiBVU0JfUlhXQVJOMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRldNU0tfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0ZXTVNLX1JFR19VU0JfTV9UWFdBUk4zMV9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXTVNLX1JFRzogVVNCX01fVFhXQVJOMzEgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZXTVNLX1JFR19VU0JfTV9UWFdBUk4zMV9Nc2sgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXTVNLX1JFRzogVVNCX01fVFhXQVJOMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZXTVNLX1JFR19VU0JfTV9SWFdBUk4zMV9Qb3MgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXTVNLX1JFRzogVVNCX01fUlhXQVJOMzEgKEJpdCA0KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZXTVNLX1JFR19VU0JfTV9SWFdBUk4zMV9Nc2sgICgweDcwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZXTVNLX1JFRzogVVNCX01fUlhXQVJOMzEgKEJpdGZpZWxkLU1hc2s6IDB4MDcpICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0ZOSF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX0ZOXzEwXzhfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9GTl8xMF84IChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX0ZOXzEwXzhfTXNrICAgICAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9GTl8xMF84IChCaXRmaWVsZC1NYXNrOiAweDA3KSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX1JGQ19Qb3MgICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9SRkMgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX1JGQ19Nc2sgICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9SRkMgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX1VMX1BvcyAgICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9VTCAoQml0IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX1VMX01zayAgICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9VTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX01GX1BvcyAgICAgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9NRiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOSF9SRUdfVVNCX01GX01zayAgICAgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOSF9SRUc6IFVTQl9NRiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0ZOTF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0ZOTF9SRUdfVVNCX0ZOX1BvcyAgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOTF9SRUc6IFVTQl9GTiAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0ZOTF9SRUdfVVNCX0ZOX01zayAgICAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0ZOTF9SRUc6IFVTQl9GTiAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9VWDIwQ0RSX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9TU1BST1RFTl9Qb3MgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfU1NQUk9URU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9TU1BST1RFTl9Nc2sgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfU1NQUk9URU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9SQ0RFTEFZX1BvcyAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfUkNERUxBWSAoQml0IDEpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9SQ0RFTEFZX01zayAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfUkNERUxBWSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX1NXMURNX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9TVzFETSAoQml0IDIpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX1NXMURNX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9TVzFETSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX0VOX1BvcyAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9FTiAoQml0IDQpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX0VOX01zayAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX1NXMV9Qb3MgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9TVzEgKEJpdCA1KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX1NXMV9Nc2sgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9TVzEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX1NXMl9Qb3MgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9TVzIgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUX1NXMl9Nc2sgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVF9TVzIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUN19Qb3MgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVDcgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1VYMjBDRFJfUkVHX1JQVV9URVNUN19Nc2sgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1VYMjBDRFJfUkVHOiBSUFVfVEVTVDcgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzBfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzBfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzBfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzBfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzBfUkVHX1VTQl9ERUZfUG9zICAgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzBfUkVHOiBVU0JfREVGIChCaXQgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzBfUkVHX1VTQl9ERUZfTXNrICAgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzBfUkVHOiBVU0JfREVGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzBfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzBfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzBfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzBfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhEMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYRDBfUkVHX1VTQl9UWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDBfUkVHOiBVU0JfVFhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRDBfUkVHX1VTQl9UWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDBfUkVHOiBVU0JfVFhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhTMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYUzBfUkVHX1VTQl9UQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzBfUkVHOiBVU0JfVENPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzBfUkVHX1VTQl9UQ09VTlRfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzBfUkVHOiBVU0JfVENPVU5UIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzBfUkVHX1VTQl9UWF9ET05FX1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzBfUkVHOiBVU0JfVFhfRE9ORSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzBfUkVHX1VTQl9UWF9ET05FX01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzBfUkVHOiBVU0JfVFhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzBfUkVHX1VTQl9BQ0tfU1RBVF9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzBfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzBfUkVHX1VTQl9BQ0tfU1RBVF9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzBfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhDMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9UWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfVFhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9UWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9UT0dHTEVfVFgwX1BvcyAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfVE9HR0xFX1RYMCAoQml0IDIpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9UT0dHTEVfVFgwX01zayAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfVE9HR0xFX1RYMCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9JR05fSU5fUG9zICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfSUdOX0lOIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzBfUkVHX1VTQl9JR05fSU5fTXNrICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzBfUkVHOiBVU0JfSUdOX0lOIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9FUDBfTkFLX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQMF9OQUtfUkVHX1VTQl9FUDBfSU5OQUtfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQMF9OQUtfUkVHOiBVU0JfRVAwX0lOTkFLIChCaXQgMCkgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQMF9OQUtfUkVHX1VTQl9FUDBfSU5OQUtfTXNrICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQMF9OQUtfUkVHOiBVU0JfRVAwX0lOTkFLIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQMF9OQUtfUkVHX1VTQl9FUDBfT1VUTkFLX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQMF9OQUtfUkVHOiBVU0JfRVAwX09VVE5BSyAoQml0IDEpICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQMF9OQUtfUkVHX1VTQl9FUDBfT1VUTkFLX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQMF9OQUtfUkVHOiBVU0JfRVAwX09VVE5BSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhEMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYRDBfUkVHX1VTQl9SWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDBfUkVHOiBVU0JfUlhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRDBfUkVHX1VTQl9SWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDBfUkVHOiBVU0JfUlhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhTMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9SQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfUkNPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9SQ09VTlRfTXNrICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfUkNPVU5UIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9SWF9MQVNUX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfUlhfTEFTVCAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9SWF9MQVNUX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfUlhfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9UT0dHTEVfUlgwX1BvcyAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfVE9HR0xFX1JYMCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9UT0dHTEVfUlgwX01zayAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfVE9HR0xFX1JYMCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9TRVRVUF9Qb3MgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfU0VUVVAgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzBfUkVHX1VTQl9TRVRVUF9Nc2sgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzBfUkVHOiBVU0JfU0VUVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhDMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9SWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfUlhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9SWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9JR05fT1VUX1BvcyAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfSUdOX09VVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9JR05fT1VUX01zayAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfSUdOX09VVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9JR05fU0VUVVBfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9JR05fU0VUVVBfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzBfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzBfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9FUF9FTl9Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfRVBfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9FUF9FTl9Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfRVBfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9JU09fUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfSVNPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9JU09fTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfSVNPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzFfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzFfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhEMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYRDFfUkVHX1VTQl9UWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDFfUkVHOiBVU0JfVFhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRDFfUkVHX1VTQl9UWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDFfUkVHOiBVU0JfVFhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhTMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9UQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfVENPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9UQ09VTlRfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfVENPVU5UIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9UWF9ET05FX1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfVFhfRE9ORSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9UWF9ET05FX01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfVFhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9BQ0tfU1RBVF9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9BQ0tfU1RBVF9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9UWF9VUlVOX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfVFhfVVJVTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzFfUkVHX1VTQl9UWF9VUlVOX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzFfUkVHOiBVU0JfVFhfVVJVTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhDMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9UWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfVFhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9UWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9MQVNUX1BvcyAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfTEFTVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9MQVNUX01zayAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9UT0dHTEVfVFhfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfVE9HR0xFX1RYIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9UT0dHTEVfVFhfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfVE9HR0xFX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9SRkZfUG9zICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfUkZGIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9SRkZfTXNrICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfUkZGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9URldMX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfVEZXTCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9URldMX01zayAgICAgICAgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfVEZXTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9JR05fSVNPTVNLX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfSUdOX0lTT01TSyAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzFfUkVHX1VTQl9JR05fSVNPTVNLX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzFfUkVHOiBVU0JfSUdOX0lTT01TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9FUF9FTl9Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfRVBfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9FUF9FTl9Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfRVBfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9JU09fUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfSVNPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9JU09fTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfSVNPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzJfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzJfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhEMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYRDFfUkVHX1VTQl9SWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDFfUkVHOiBVU0JfUlhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRDFfUkVHX1VTQl9SWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDFfUkVHOiBVU0JfUlhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhTMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9SQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfUkNPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9SQ09VTlRfTXNrICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfUkNPVU5UIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9SWF9MQVNUX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfUlhfTEFTVCAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9SWF9MQVNUX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfUlhfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9UT0dHTEVfUlhfUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfVE9HR0xFX1JYIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9UT0dHTEVfUlhfTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfVE9HR0xFX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9TRVRVUF9Qb3MgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfU0VUVVAgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9TRVRVUF9Nc2sgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfU0VUVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9SWF9FUlJfUG9zICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfUlhfRVJSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzFfUkVHX1VTQl9SWF9FUlJfTXNrICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzFfUkVHOiBVU0JfUlhfRVJSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhDMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9SWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfUlhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9SWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9JR05fU0VUVVBfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9JR05fU0VUVVBfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9SRldMX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfUkZXTCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzFfUkVHX1VTQl9SRldMX01zayAgICAgICAgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzFfUkVHOiBVU0JfUkZXTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9FUF9FTl9Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfRVBfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9FUF9FTl9Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfRVBfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9JU09fUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfSVNPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9JU09fTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfSVNPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzNfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzNfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhEMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYRDJfUkVHX1VTQl9UWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDJfUkVHOiBVU0JfVFhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRDJfUkVHX1VTQl9UWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDJfUkVHOiBVU0JfVFhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhTMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9UQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfVENPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9UQ09VTlRfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfVENPVU5UIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9UWF9ET05FX1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfVFhfRE9ORSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9UWF9ET05FX01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfVFhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9BQ0tfU1RBVF9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9BQ0tfU1RBVF9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9UWF9VUlVOX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfVFhfVVJVTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzJfUkVHX1VTQl9UWF9VUlVOX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzJfUkVHOiBVU0JfVFhfVVJVTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhDMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9UWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfVFhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9UWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9MQVNUX1BvcyAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfTEFTVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9MQVNUX01zayAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9UT0dHTEVfVFhfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfVE9HR0xFX1RYIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9UT0dHTEVfVFhfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfVE9HR0xFX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9SRkZfUG9zICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfUkZGIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9SRkZfTXNrICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfUkZGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9URldMX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfVEZXTCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9URldMX01zayAgICAgICAgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfVEZXTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9JR05fSVNPTVNLX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfSUdOX0lTT01TSyAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzJfUkVHX1VTQl9JR05fSVNPTVNLX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzJfUkVHOiBVU0JfSUdOX0lTT01TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9FUF9FTl9Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfRVBfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9FUF9FTl9Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfRVBfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9JU09fUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfSVNPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9JU09fTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfSVNPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzRfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzRfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhEMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYRDJfUkVHX1VTQl9SWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDJfUkVHOiBVU0JfUlhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRDJfUkVHX1VTQl9SWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDJfUkVHOiBVU0JfUlhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhTMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9SQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfUkNPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9SQ09VTlRfTXNrICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfUkNPVU5UIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9SWF9MQVNUX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfUlhfTEFTVCAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9SWF9MQVNUX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfUlhfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9UT0dHTEVfUlhfUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfVE9HR0xFX1JYIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9UT0dHTEVfUlhfTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfVE9HR0xFX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9TRVRVUF9Qb3MgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfU0VUVVAgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9TRVRVUF9Nc2sgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfU0VUVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9SWF9FUlJfUG9zICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfUlhfRVJSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzJfUkVHX1VTQl9SWF9FUlJfTXNrICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzJfUkVHOiBVU0JfUlhfRVJSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhDMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9SWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfUlhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9SWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9JR05fU0VUVVBfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9JR05fU0VUVVBfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9SRldMX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfUkZXTCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzJfUkVHX1VTQl9SRldMX01zayAgICAgICAgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzJfUkVHOiBVU0JfUkZXTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDNV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9FUF9FTl9Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfRVBfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9FUF9FTl9Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfRVBfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9JU09fUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfSVNPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9JU09fTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfSVNPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzVfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzVfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhEM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYRDNfUkVHX1VTQl9UWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDNfUkVHOiBVU0JfVFhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYRDNfUkVHX1VTQl9UWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYRDNfUkVHOiBVU0JfVFhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhTM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9UQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfVENPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9UQ09VTlRfTXNrICAgICAgICgweDFmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfVENPVU5UIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9UWF9ET05FX1BvcyAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfVFhfRE9ORSAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9UWF9ET05FX01zayAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfVFhfRE9ORSAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9BQ0tfU1RBVF9Qb3MgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9BQ0tfU1RBVF9Nc2sgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfQUNLX1NUQVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9UWF9VUlVOX1BvcyAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfVFhfVVJVTiAoQml0IDcpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYUzNfUkVHX1VTQl9UWF9VUlVOX01zayAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYUzNfUkVHOiBVU0JfVFhfVVJVTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfVFhDM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9UWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfVFhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9UWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfVFhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9MQVNUX1BvcyAgICAgICAgICgxVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfTEFTVCAoQml0IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9MQVNUX01zayAgICAgICAgICgweDJVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9UT0dHTEVfVFhfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfVE9HR0xFX1RYIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9UT0dHTEVfVFhfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfVE9HR0xFX1RYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9SRkZfUG9zICAgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfUkZGIChCaXQgNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9SRkZfTXNrICAgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfUkZGIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9URldMX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfVEZXTCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9URldMX01zayAgICAgICAgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfVEZXTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9JR05fSVNPTVNLX1BvcyAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfSUdOX0lTT01TSyAoQml0IDcpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1RYQzNfUkVHX1VTQl9JR05fSVNPTVNLX01zayAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1RYQzNfUkVHOiBVU0JfSUdOX0lTT01TSyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfRVBDNl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9FUF9Qb3MgICAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfRVAgKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9FUF9Nc2sgICAgICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfRVAgKEJpdGZpZWxkLU1hc2s6IDB4MGYpICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9FUF9FTl9Qb3MgICAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfRVBfRU4gKEJpdCA0KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9FUF9FTl9Nc2sgICAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfRVBfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9JU09fUG9zICAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfSVNPIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9JU09fTXNrICAgICAgICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfSVNPIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9TVEFMTF9Qb3MgICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfU1RBTEwgKEJpdCA3KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0VQQzZfUkVHX1VTQl9TVEFMTF9Nc2sgICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0VQQzZfUkVHOiBVU0JfU1RBTEwgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhEM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYRDNfUkVHX1VTQl9SWEZEX1BvcyAgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDNfUkVHOiBVU0JfUlhGRCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYRDNfUkVHX1VTQl9SWEZEX01zayAgICAgICAgICgweGZmVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYRDNfUkVHOiBVU0JfUlhGRCAoQml0ZmllbGQtTWFzazogMHhmZikgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhTM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9SQ09VTlRfUG9zICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfUkNPVU5UIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9SQ09VTlRfTXNrICAgICAgICgweGZVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfUkNPVU5UIChCaXRmaWVsZC1NYXNrOiAweDBmKSAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9SWF9MQVNUX1BvcyAgICAgICg0VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfUlhfTEFTVCAoQml0IDQpICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9SWF9MQVNUX01zayAgICAgICgweDEwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfUlhfTEFTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9UT0dHTEVfUlhfUG9zICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfVE9HR0xFX1JYIChCaXQgNSkgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9UT0dHTEVfUlhfTXNrICAgICgweDIwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfVE9HR0xFX1JYIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9TRVRVUF9Qb3MgICAgICAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfU0VUVVAgKEJpdCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9TRVRVUF9Nc2sgICAgICAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfU0VUVVAgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9SWF9FUlJfUG9zICAgICAgICg3VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfUlhfRVJSIChCaXQgNykgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYUzNfUkVHX1VTQl9SWF9FUlJfTXNrICAgICAgICgweDgwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYUzNfUkVHOiBVU0JfUlhfRVJSIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVTQl9VU0JfUlhDM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9SWF9FTl9Qb3MgICAgICAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfUlhfRU4gKEJpdCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9SWF9FTl9Nc2sgICAgICAgICgweDFVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfUlhfRU4gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9JR05fU0VUVVBfUG9zICAgICgyVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXQgMikgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9JR05fU0VUVVBfTXNrICAgICgweDRVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfSUdOX1NFVFVQIChCaXRmaWVsZC1NYXNrOiAweDAxKSAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9GTFVTSF9Qb3MgICAgICAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfRkxVU0ggKEJpdCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9GTFVTSF9Nc2sgICAgICAgICgweDhVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfRkxVU0ggKEJpdGZpZWxkLU1hc2s6IDB4MDEpICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9SRldMX1BvcyAgICAgICAgICg1VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfUkZXTCAoQml0IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX1JYQzNfUkVHX1VTQl9SRldMX01zayAgICAgICAgICgweDYwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX1JYQzNfUkVHOiBVU0JfUkZXTCAoQml0ZmllbGQtTWFzazogMHgwMykgICAgICAgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0RNQV9DVFJMX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0RNQV9DVFJMX1JFR19VU0JfRE1BX1JYX1BvcyAgICgwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0RNQV9DVFJMX1JFRzogVVNCX0RNQV9SWCAoQml0IDApICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0RNQV9DVFJMX1JFR19VU0JfRE1BX1JYX01zayAgICgweDdVTCkgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0RNQV9DVFJMX1JFRzogVVNCX0RNQV9SWCAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0RNQV9DVFJMX1JFR19VU0JfRE1BX1RYX1BvcyAgICgzVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0RNQV9DVFJMX1JFRzogVVNCX0RNQV9UWCAoQml0IDMpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0RNQV9DVFJMX1JFR19VU0JfRE1BX1RYX01zayAgICgweDM4VUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0RNQV9DVFJMX1JFRzogVVNCX0RNQV9UWCAoQml0ZmllbGQtTWFzazogMHgwNykgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0RNQV9DVFJMX1JFR19VU0JfRE1BX0VOX1BvcyAgICg2VUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0RNQV9DVFJMX1JFRzogVVNCX0RNQV9FTiAoQml0IDYpICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0RNQV9DVFJMX1JFR19VU0JfRE1BX0VOX01zayAgICgweDQwVUwpICAgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0RNQV9DVFJMX1JFRzogVVNCX0RNQV9FTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVVNCX1VTQl9DSEFSR0VSX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfVVNCX0NIQVJHRV9PTl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IFVTQl9DSEFSR0VfT04gKEJpdCAwKSAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfVVNCX0NIQVJHRVJfQ1RSTF9SRUdfVVNCX0NIQVJHRV9PTl9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgLyohPCBVU0IgVVNCX0NIQVJHRVJfQ1RSTF9SRUc6IFVTQl9DSEFSR0VfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19JRFBfU1JDX09OX1BvcyAoMVVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogSURQX1NSQ19PTiAoQml0IDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19JRFBfU1JDX09OX01zayAoMHgyVUwpICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogSURQX1NSQ19PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19WRFBfU1JDX09OX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogVkRQX1NSQ19PTiAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19WRFBfU1JDX09OX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogVkRQX1NSQ19PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19WRE1fU1JDX09OX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogVkRNX1NSQ19PTiAoQml0IDMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19WRE1fU1JDX09OX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogVkRNX1NSQ19PTiAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19JRFBfU0lOS19PTl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogSURQX1NJTktfT04gKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19JRFBfU0lOS19PTl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogSURQX1NJTktfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19JRE1fU0lOS19PTl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogSURNX1NJTktfT04gKEJpdCA1KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9DVFJMX1JFR19JRE1fU0lOS19PTl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9DVFJMX1JFRzogSURNX1NJTktfT04gKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBVU0JfVVNCX0NIQVJHRVJfU1RBVF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRENQX0RFVF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RDUF9ERVQgKEJpdCAwKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRENQX0RFVF9Nc2sgKDB4MVVMKSAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RDUF9ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfQ0hHX0RFVF9Qb3MgKDFVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0NIR19ERVQgKEJpdCAxKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfQ0hHX0RFVF9Nc2sgKDB4MlVMKSAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0NIR19ERVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRFBfVkFMX1BvcyAoMlVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RQX1ZBTCAoQml0IDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRFBfVkFMX01zayAoMHg0VUwpICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RQX1ZBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRE1fVkFMX1BvcyAoM1VMKSAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RNX1ZBTCAoQml0IDMpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRE1fVkFMX01zayAoMHg4VUwpICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RNX1ZBTCAoQml0ZmllbGQtTWFzazogMHgwMSkgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRFBfVkFMMl9Qb3MgKDRVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RQX1ZBTDIgKEJpdCA0KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRFBfVkFMMl9Nc2sgKDB4MTBVTCkgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RQX1ZBTDIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRE1fVkFMMl9Qb3MgKDVVTCkgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RNX1ZBTDIgKEJpdCA1KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQl9VU0JfQ0hBUkdFUl9TVEFUX1JFR19VU0JfRE1fVkFMMl9Nc2sgKDB4MjBVTCkgICAgICAgICAgICAgICAvKiE8IFVTQiBVU0JfQ0hBUkdFUl9TVEFUX1JFRzogVVNCX0RNX1ZBTDIgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT0gICAgICAgICBzdHJ1Y3QgJ1dBS0VVUCcgUG9zaXRpb24gJiBNYXNrICAgICAgICA9PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NUUkxfUkVHX1dLVVBfREVCX1ZBTFVFX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NUUkxfUkVHOiBXS1VQX0RFQl9WQUxVRSAoQml0IDApICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NUUkxfUkVHX1dLVVBfREVCX1ZBTFVFX01zayAoMHgzZlVMKSAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NUUkxfUkVHOiBXS1VQX0RFQl9WQUxVRSAoQml0ZmllbGQtTWFzazogMHgzZikgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NUUkxfUkVHX1dLVVBfU0ZUX0tFWUhJVF9Qb3MgKDZVTCkgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NUUkxfUkVHOiBXS1VQX1NGVF9LRVlISVQgKEJpdCA2KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NUUkxfUkVHX1dLVVBfU0ZUX0tFWUhJVF9Nc2sgKDB4NDBVTCkgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NUUkxfUkVHOiBXS1VQX1NGVF9LRVlISVQgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NUUkxfUkVHX1dLVVBfRU5BQkxFX0lSUV9Qb3MgKDdVTCkgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NUUkxfUkVHOiBXS1VQX0VOQUJMRV9JUlEgKEJpdCA3KSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NUUkxfUkVHX1dLVVBfRU5BQkxFX0lSUV9Nc2sgKDB4ODBVTCkgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NUUkxfUkVHOiBXS1VQX0VOQUJMRV9JUlEgKEJpdGZpZWxkLU1hc2s6IDB4MDEpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9SRVNFVF9JUlFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1JFU0VUX0lSUV9SRUdfV0tVUF9JUlFfUlNUX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1JFU0VUX0lSUV9SRUc6IFdLVVBfSVJRX1JTVCAoQml0IDApICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1JFU0VUX0lSUV9SRUdfV0tVUF9JUlFfUlNUX01zayAoMHhmZmZmVUwpICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1JFU0VUX0lSUV9SRUc6IFdLVVBfSVJRX1JTVCAoQml0ZmllbGQtTWFzazogMHhmZmZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU0VMRUNUX1AwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxFQ1RfUDBfUkVHX1dLVVBfU0VMRUNUX1AwX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxFQ1RfUDBfUkVHOiBXS1VQX1NFTEVDVF9QMCAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxFQ1RfUDBfUkVHX1dLVVBfU0VMRUNUX1AwX01zayAoMHhmZlVMKSAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxFQ1RfUDBfUkVHOiBXS1VQX1NFTEVDVF9QMCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTEVDVF9QMV9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1AxX1JFR19XS1VQX1NFTEVDVF9QMV9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1AxX1JFRzogV0tVUF9TRUxFQ1RfUDEgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1AxX1JFR19XS1VQX1NFTEVDVF9QMV9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1AxX1JFRzogV0tVUF9TRUxFQ1RfUDEgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxFQ1RfUDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTEVDVF9QMl9SRUdfV0tVUF9TRUxFQ1RfUDJfUG9zICgwVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTEVDVF9QMl9SRUc6IFdLVVBfU0VMRUNUX1AyIChCaXQgMCkgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTEVDVF9QMl9SRUdfV0tVUF9TRUxFQ1RfUDJfTXNrICgweDFmVUwpICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTEVDVF9QMl9SRUc6IFdLVVBfU0VMRUNUX1AyIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU0VMRUNUX1AzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxFQ1RfUDNfUkVHX1dLVVBfU0VMRUNUX1AzX1BvcyAoMFVMKSAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxFQ1RfUDNfUkVHOiBXS1VQX1NFTEVDVF9QMyAoQml0IDApICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxFQ1RfUDNfUkVHX1dLVVBfU0VMRUNUX1AzX01zayAoMHhmZlVMKSAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxFQ1RfUDNfUkVHOiBXS1VQX1NFTEVDVF9QMyAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTEVDVF9QNF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1A0X1JFR19XS1VQX1NFTEVDVF9QNF9Qb3MgKDBVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1A0X1JFRzogV0tVUF9TRUxFQ1RfUDQgKEJpdCAwKSAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMRUNUX1A0X1JFR19XS1VQX1NFTEVDVF9QNF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMRUNUX1A0X1JFRzogV0tVUF9TRUxFQ1RfUDQgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfUE9MX1AwX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QMF9SRUdfV0tVUF9QT0xfUDBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QMF9SRUc6IFdLVVBfUE9MX1AwIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QMF9SRUdfV0tVUF9QT0xfUDBfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QMF9SRUc6IFdLVVBfUE9MX1AwIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfUE9MX1AxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QMV9SRUdfV0tVUF9QT0xfUDFfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QMV9SRUc6IFdLVVBfUE9MX1AxIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QMV9SRUdfV0tVUF9QT0xfUDFfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QMV9SRUc6IFdLVVBfUE9MX1AxIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfUE9MX1AyX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QMl9SRUdfV0tVUF9QT0xfUDJfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QMl9SRUc6IFdLVVBfUE9MX1AyIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QMl9SRUdfV0tVUF9QT0xfUDJfTXNrICgweDFmVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QMl9SRUc6IFdLVVBfUE9MX1AyIChCaXRmaWVsZC1NYXNrOiAweDFmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfUE9MX1AzX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QM19SRUdfV0tVUF9QT0xfUDNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QM19SRUc6IFdLVVBfUE9MX1AzIChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QM19SRUdfV0tVUF9QT0xfUDNfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QM19SRUc6IFdLVVBfUE9MX1AzIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfUE9MX1A0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QNF9SRUdfV0tVUF9QT0xfUDRfUG9zICgwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QNF9SRUc6IFdLVVBfUE9MX1A0IChCaXQgMCkgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1BPTF9QNF9SRUdfV0tVUF9QT0xfUDRfTXNrICgweGZmVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1BPTF9QNF9SRUc6IFdLVVBfUE9MX1A0IChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TVEFUVVNfMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NUQVRVU18wX1JFR19XS1VQX1NUQVRfUDBfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NUQVRVU18wX1JFRzogV0tVUF9TVEFUX1AwIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NUQVRVU18wX1JFR19XS1VQX1NUQVRfUDBfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NUQVRVU18wX1JFRzogV0tVUF9TVEFUX1AwIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMF9SRUdfV0tVUF9TVEFUX1AxX1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMF9SRUc6IFdLVVBfU1RBVF9QMSAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMF9SRUdfV0tVUF9TVEFUX1AxX01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMF9SRUc6IFdLVVBfU1RBVF9QMSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NUQVRVU18xX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU1RBVFVTXzFfUkVHX1dLVVBfU1RBVF9QMl9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU1RBVFVTXzFfUkVHOiBXS1VQX1NUQVRfUDIgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU1RBVFVTXzFfUkVHX1dLVVBfU1RBVF9QMl9Nc2sgKDB4MWZVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU1RBVFVTXzFfUkVHOiBXS1VQX1NUQVRfUDIgKEJpdGZpZWxkLU1hc2s6IDB4MWYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TVEFUVVNfMl9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NUQVRVU18yX1JFR19XS1VQX1NUQVRfUDNfUG9zICgwVUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NUQVRVU18yX1JFRzogV0tVUF9TVEFUX1AzIChCaXQgMCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NUQVRVU18yX1JFR19XS1VQX1NUQVRfUDNfTXNrICgweGZmVUwpICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NUQVRVU18yX1JFRzogV0tVUF9TVEFUX1AzIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMl9SRUdfV0tVUF9TVEFUX1A0X1BvcyAoOFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMl9SRUc6IFdLVVBfU1RBVF9QNCAoQml0IDgpICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TVEFUVVNfMl9SRUdfV0tVUF9TVEFUX1A0X01zayAoMHhmZjAwVUwpICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TVEFUVVNfMl9SRUc6IFdLVVBfU1RBVF9QNCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9DTEVBUl8wX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfQ0xFQVJfMF9SRUdfV0tVUF9DTEVBUl9QMF9Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfQ0xFQVJfMF9SRUc6IFdLVVBfQ0xFQVJfUDAgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfQ0xFQVJfMF9SRUdfV0tVUF9DTEVBUl9QMF9Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfQ0xFQVJfMF9SRUc6IFdLVVBfQ0xFQVJfUDAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzBfUkVHX1dLVVBfQ0xFQVJfUDFfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzBfUkVHOiBXS1VQX0NMRUFSX1AxIChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzBfUkVHX1dLVVBfQ0xFQVJfUDFfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzBfUkVHOiBXS1VQX0NMRUFSX1AxIChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX0NMRUFSXzFfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DTEVBUl8xX1JFR19XS1VQX0NMRUFSX1AyX1BvcyAoMFVMKSAgICAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DTEVBUl8xX1JFRzogV0tVUF9DTEVBUl9QMiAoQml0IDApICAgICAgICAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9DTEVBUl8xX1JFR19XS1VQX0NMRUFSX1AyX01zayAoMHgxZlVMKSAgICAgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9DTEVBUl8xX1JFRzogV0tVUF9DTEVBUl9QMiAoQml0ZmllbGQtTWFzazogMHgxZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9DTEVBUl8yX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfQ0xFQVJfMl9SRUdfV0tVUF9DTEVBUl9QM19Qb3MgKDBVTCkgICAgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfQ0xFQVJfMl9SRUc6IFdLVVBfQ0xFQVJfUDMgKEJpdCAwKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfQ0xFQVJfMl9SRUdfV0tVUF9DTEVBUl9QM19Nc2sgKDB4ZmZVTCkgICAgICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfQ0xFQVJfMl9SRUc6IFdLVVBfQ0xFQVJfUDMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzJfUkVHX1dLVVBfQ0xFQVJfUDRfUG9zICg4VUwpICAgICAgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzJfUkVHOiBXS1VQX0NMRUFSX1A0IChCaXQgOCkgICAgICAgICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX0NMRUFSXzJfUkVHX1dLVVBfQ0xFQVJfUDRfTXNrICgweGZmMDBVTCkgICAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX0NMRUFSXzJfUkVHOiBXS1VQX0NMRUFSX1A0IChCaXRmaWVsZC1NYXNrOiAweGZmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxfR1BJT19QMF9SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QMF9SRUdfV0tVUF9TRUxfR1BJT19QMF9Qb3MgKDBVTCkgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QMF9SRUc6IFdLVVBfU0VMX0dQSU9fUDAgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QMF9SRUdfV0tVUF9TRUxfR1BJT19QMF9Nc2sgKDB4ZmZVTCkgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QMF9SRUc6IFdLVVBfU0VMX0dQSU9fUDAgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTF9HUElPX1AxX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTF9HUElPX1AxX1JFR19XS1VQX1NFTF9HUElPX1AxX1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTF9HUElPX1AxX1JFRzogV0tVUF9TRUxfR1BJT19QMSAoQml0IDApICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTF9HUElPX1AxX1JFR19XS1VQX1NFTF9HUElPX1AxX01zayAoMHhmZlVMKSAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTF9HUElPX1AxX1JFRzogV0tVUF9TRUxfR1BJT19QMSAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDJfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDJfUkVHX1dLVVBfU0VMX0dQSU9fUDJfUG9zICgwVUwpICAgICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMX0dQSU9fUDJfUkVHOiBXS1VQX1NFTF9HUElPX1AyIChCaXQgMCkgICAgICAgKi8KKyNkZWZpbmUgV0FLRVVQX1dLVVBfU0VMX0dQSU9fUDJfUkVHX1dLVVBfU0VMX0dQSU9fUDJfTXNrICgweDFmVUwpICAgICAgIC8qITwgV0FLRVVQIFdLVVBfU0VMX0dQSU9fUDJfUkVHOiBXS1VQX1NFTF9HUElPX1AyIChCaXRmaWVsZC1NYXNrOiAweDFmKSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXQUtFVVBfV0tVUF9TRUxfR1BJT19QM19SRUcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QM19SRUdfV0tVUF9TRUxfR1BJT19QM19Qb3MgKDBVTCkgICAgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QM19SRUc6IFdLVVBfU0VMX0dQSU9fUDMgKEJpdCAwKSAgICAgICAqLworI2RlZmluZSBXQUtFVVBfV0tVUF9TRUxfR1BJT19QM19SRUdfV0tVUF9TRUxfR1BJT19QM19Nc2sgKDB4ZmZVTCkgICAgICAgLyohPCBXQUtFVVAgV0tVUF9TRUxfR1BJT19QM19SRUc6IFdLVVBfU0VMX0dQSU9fUDMgKEJpdGZpZWxkLU1hc2s6IDB4ZmYpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFdBS0VVUF9XS1VQX1NFTF9HUElPX1A0X1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTF9HUElPX1A0X1JFR19XS1VQX1NFTF9HUElPX1A0X1BvcyAoMFVMKSAgICAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTF9HUElPX1A0X1JFRzogV0tVUF9TRUxfR1BJT19QNCAoQml0IDApICAgICAgICovCisjZGVmaW5lIFdBS0VVUF9XS1VQX1NFTF9HUElPX1A0X1JFR19XS1VQX1NFTF9HUElPX1A0X01zayAoMHhmZlVMKSAgICAgICAvKiE8IFdBS0VVUCBXS1VQX1NFTF9HUElPX1A0X1JFRzogV0tVUF9TRUxfR1BJT19QNCAoQml0ZmllbGQtTWFzazogMHhmZikgKi8KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgICAgICBzdHJ1Y3QgJ1dET0cnIFBvc2l0aW9uICYgTWFzayAgICAgICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXRE9HX1dBVENIRE9HX1JFRyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19SRUdfV0RPR19WQUxfUG9zICAgICAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19SRUc6IFdET0dfVkFMIChCaXQgMCkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19SRUdfV0RPR19WQUxfTXNrICAgICAgICAoMHhmZlVMKSAgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19SRUc6IFdET0dfVkFMIChCaXRmaWVsZC1NYXNrOiAweGZmKSAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19SRUdfV0RPR19WQUxfTkVHX1BvcyAgICAoOFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19SRUc6IFdET0dfVkFMX05FRyAoQml0IDgpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19SRUdfV0RPR19WQUxfTkVHX01zayAgICAoMHgxMDBVTCkgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19SRUc6IFdET0dfVkFMX05FRyAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19SRUdfV0RPR19XRU5fUG9zICAgICAgICAoOVVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19SRUc6IFdET0dfV0VOIChCaXQgOSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19SRUdfV0RPR19XRU5fTXNrICAgICAgICAoMHhmZTAwVUwpICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19SRUc6IFdET0dfV0VOIChCaXRmaWVsZC1NYXNrOiAweDdmKSAgICAgICAgICAgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBXRE9HX1dBVENIRE9HX0NUUkxfUkVHICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19DVFJMX1JFR19OTUlfUlNUX1BvcyAgICAoMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19DVFJMX1JFRzogTk1JX1JTVCAoQml0IDApICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0RPR19XQVRDSERPR19DVFJMX1JFR19OTUlfUlNUX01zayAgICAoMHgxVUwpICAgICAgICAgICAgICAgICAgIC8qITwgV0RPRyBXQVRDSERPR19DVFJMX1JFRzogTk1JX1JTVCAoQml0ZmllbGQtTWFzazogMHgwMSkgICAgICAgKi8KKworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgICBQZXJpcGhlcmFsIG1lbW9yeSBtYXAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBBRVNfSEFTSF9CQVNFICAgICAgICAgICAgICAgICAgIDB4NDAwMjAwMDBVTAorI2RlZmluZSBBTkFNSVNDX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NTAwMDFCMDBVTAorI2RlZmluZSBBUFVfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDQwMDBVTAorI2RlZmluZSBCTEVfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDBVTAorI2RlZmluZSBDQUNIRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4NDAwQzMwMDBVTAorI2RlZmluZSBDSElQX1ZFUlNJT05fQkFTRSAgICAgICAgICAgICAgIDB4NTAwMDMyMDBVTAorI2RlZmluZSBDT0VYX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDJGMDBVTAorI2RlZmluZSBDUkdfUEVSX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NTAwMDFDMDBVTAorI2RlZmluZSBDUkdfVE9QX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4NTAwMDAwMDBVTAorI2RlZmluZSBEQ0RDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDAwODBVTAorI2RlZmluZSBERU1fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDJFMDBVTAorI2RlZmluZSBETUFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDM1MDBVTAorI2RlZmluZSBFQ0NfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDYwMDBVTAorI2RlZmluZSBGVERGX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwODAwMDBVTAorI2RlZmluZSBHUF9USU1FUlNfQkFTRSAgICAgICAgICAgICAgICAgIDB4NTAwMDM0MDBVTAorI2RlZmluZSBHUEFEQ19CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDE5MDBVTAorI2RlZmluZSBHUElPX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDMwMDBVTAorI2RlZmluZSBHUFJFR19CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDMzMDBVTAorI2RlZmluZSBJMkNfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDE0MDBVTAorI2RlZmluZSBJMkMyX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDE1MDBVTAorI2RlZmluZSBJUl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDE3MDBVTAorI2RlZmluZSBLQlNDQU5fQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDE2MDBVTAorI2RlZmluZSBPVFBDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4MDdGNDAwMDBVTAorI2RlZmluZSBQQVRDSF9CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4NDAwNTAwMDBVTAorI2RlZmluZSBQTExESUdfQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDJEMDBVTAorI2RlZmluZSBRU1BJQ19CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMDAwMDBVTAorI2RlZmluZSBRVUFEX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDFBMDBVTAorI2RlZmluZSBSRkNVX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDIwMDBVTAorI2RlZmluZSBSRkNVX1BPV0VSX0JBU0UgICAgICAgICAgICAgICAgIDB4NTAwMDIyMDBVTAorI2RlZmluZSBSRlBUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDM2MDBVTAorI2RlZmluZSBTUElfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDEyMDBVTAorI2RlZmluZSBTUEkyX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDEzMDBVTAorI2RlZmluZSBUSU1FUjFfQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDAyMDBVTAorI2RlZmluZSBUUk5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDUwMDBVTAorI2RlZmluZSBVQVJUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDEwMDBVTAorI2RlZmluZSBVQVJUMl9CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDExMDBVTAorI2RlZmluZSBVU0JfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDE4MDBVTAorI2RlZmluZSBXQUtFVVBfQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDAxMDBVTAorI2RlZmluZSBXRE9HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDMxMDBVTAorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09ICAgICAgICAgICAgIFBlcmlwaGVyYWwgZGVjbGFyYXRpb24gICAgICAgICAgICAgPT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBBRVNfSEFTSCAgICAgICAgICAgICAgICAgICAgICAgICgoQUVTX0hBU0hfVHlwZSAgICAgICAgICAgKikgQUVTX0hBU0hfQkFTRSkKKyNkZWZpbmUgQU5BTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAoKEFOQU1JU0NfVHlwZSAgICAgICAgICAgICopIEFOQU1JU0NfQkFTRSkKKyNkZWZpbmUgQVBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFQVV9UeXBlICAgICAgICAgICAgICAgICopIEFQVV9CQVNFKQorI2RlZmluZSBCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkxFX1R5cGUgICAgICAgICAgICAgICAgKikgQkxFX0JBU0UpCisjZGVmaW5lIENBQ0hFICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDQUNIRV9UeXBlICAgICAgICAgICAgICAqKSBDQUNIRV9CQVNFKQorI2RlZmluZSBDSElQX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICgoQ0hJUF9WRVJTSU9OX1R5cGUgICAgICAgKikgQ0hJUF9WRVJTSU9OX0JBU0UpCisjZGVmaW5lIENPRVggICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT0VYX1R5cGUgICAgICAgICAgICAgICAqKSBDT0VYX0JBU0UpCisjZGVmaW5lIENSR19QRVIgICAgICAgICAgICAgICAgICAgICAgICAgKChDUkdfUEVSX1R5cGUgICAgICAgICAgICAqKSBDUkdfUEVSX0JBU0UpCisjZGVmaW5lIENSR19UT1AgICAgICAgICAgICAgICAgICAgICAgICAgKChDUkdfVE9QX1R5cGUgICAgICAgICAgICAqKSBDUkdfVE9QX0JBU0UpCisjZGVmaW5lIERDREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQ0RDX1R5cGUgICAgICAgICAgICAgICAqKSBEQ0RDX0JBU0UpCisjZGVmaW5lIERFTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERU1fVHlwZSAgICAgICAgICAgICAgICAqKSBERU1fQkFTRSkKKyNkZWZpbmUgRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERNQV9UeXBlICAgICAgICAgICAgICAgICopIERNQV9CQVNFKQorI2RlZmluZSBFQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRUNDX1R5cGUgICAgICAgICAgICAgICAgKikgRUNDX0JBU0UpCisjZGVmaW5lIEZUREYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGVERGX1R5cGUgICAgICAgICAgICAgICAqKSBGVERGX0JBU0UpCisjZGVmaW5lIEdQX1RJTUVSUyAgICAgICAgICAgICAgICAgICAgICAgKChHUF9USU1FUlNfVHlwZSAgICAgICAgICAqKSBHUF9USU1FUlNfQkFTRSkKKyNkZWZpbmUgR1BBREMgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdQQURDX1R5cGUgICAgICAgICAgICAgICopIEdQQURDX0JBU0UpCisjZGVmaW5lIEdQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChHUElPX1R5cGUgICAgICAgICAgICAgICAqKSBHUElPX0JBU0UpCisjZGVmaW5lIEdQUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgKChHUFJFR19UeXBlICAgICAgICAgICAgICAqKSBHUFJFR19CQVNFKQorI2RlZmluZSBJMkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSTJDX1R5cGUgICAgICAgICAgICAgICAgKikgSTJDX0JBU0UpCisjZGVmaW5lIEkyQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJMkMyX1R5cGUgICAgICAgICAgICAgICAqKSBJMkMyX0JBU0UpCisjZGVmaW5lIElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJUl9UeXBlICAgICAgICAgICAgICAgICAqKSBJUl9CQVNFKQorI2RlZmluZSBLQlNDQU4gICAgICAgICAgICAgICAgICAgICAgICAgICgoS0JTQ0FOX1R5cGUgICAgICAgICAgICAgKikgS0JTQ0FOX0JBU0UpCisjZGVmaW5lIE9UUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPVFBDX1R5cGUgICAgICAgICAgICAgICAqKSBPVFBDX0JBU0UpCisjZGVmaW5lIFBBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQQVRDSF9UeXBlICAgICAgICAgICAgICAqKSBQQVRDSF9CQVNFKQorI2RlZmluZSBQTExESUcgICAgICAgICAgICAgICAgICAgICAgICAgICgoUExMRElHX1R5cGUgICAgICAgICAgICAgKikgUExMRElHX0JBU0UpCisjZGVmaW5lIFFTUElDICAgICAgICAgICAgICAgICAgICAgICAgICAgKChRU1BJQ19UeXBlICAgICAgICAgICAgICAqKSBRU1BJQ19CQVNFKQorI2RlZmluZSBRVUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUVVBRF9UeXBlICAgICAgICAgICAgICAgKikgUVVBRF9CQVNFKQorI2RlZmluZSBSRkNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkZDVV9UeXBlICAgICAgICAgICAgICAgKikgUkZDVV9CQVNFKQorI2RlZmluZSBSRkNVX1BPV0VSICAgICAgICAgICAgICAgICAgICAgICgoUkZDVV9QT1dFUl9UeXBlICAgICAgICAgKikgUkZDVV9QT1dFUl9CQVNFKQorI2RlZmluZSBSRlBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkZQVF9UeXBlICAgICAgICAgICAgICAgKikgUkZQVF9CQVNFKQorI2RlZmluZSBTUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1BJX1R5cGUgICAgICAgICAgICAgICAgKikgU1BJX0JBU0UpCisjZGVmaW5lIFNQSTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTUEkyX1R5cGUgICAgICAgICAgICAgICAqKSBTUEkyX0JBU0UpCisjZGVmaW5lIFRJTUVSMSAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1FUjFfVHlwZSAgICAgICAgICAgICAqKSBUSU1FUjFfQkFTRSkKKyNkZWZpbmUgVFJORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSTkdfVHlwZSAgICAgICAgICAgICAgICopIFRSTkdfQkFTRSkKKyNkZWZpbmUgVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVBUlRfVHlwZSAgICAgICAgICAgICAgICopIFVBUlRfQkFTRSkKKyNkZWZpbmUgVUFSVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVBUlQyX1R5cGUgICAgICAgICAgICAgICopIFVBUlQyX0JBU0UpCisjZGVmaW5lIFVTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVU0JfVHlwZSAgICAgICAgICAgICAgICAqKSBVU0JfQkFTRSkKKyNkZWZpbmUgV0FLRVVQICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdBS0VVUF9UeXBlICAgICAgICAgICAgICopIFdBS0VVUF9CQVNFKQorI2RlZmluZSBXRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0RPR19UeXBlICAgICAgICAgICAgICAgKikgV0RPR19CQVNFKQorCisKKy8qKiBAfSAqLyAvKiBFbmQgb2YgZ3JvdXAgRGV2aWNlX1BlcmlwaGVyYWxfUmVnaXN0ZXJzICovCisvKiogQH0gKi8gLyogRW5kIG9mIGdyb3VwIERBMTQ2ODBCQSAqLworLyoqIEB9ICovIC8qIEVuZCBvZiBncm91cCBEaWFsb2cgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgIC8qIERBMTQ2ODBCQV9IICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY21zaXNfZ2NjLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2Ntc2lzX2djYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODlmYmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2Ntc2lzX2djYy5oCkBAIC0wLDAgKzEsMTM3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNtc2lzX2djYy5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbi9JbnN0cnVjdGlvbiBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWZuZGVmIF9fQ01TSVNfR0NDX0gKKyNkZWZpbmUgX19DTVNJU19HQ0NfSAorCisvKiBpZ25vcmUgc29tZSBHQ0Mgd2FybmluZ3MgKi8KKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2lnbi1jb252ZXJzaW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciIKKyNlbmRpZgorCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgSVJRIEludGVycnVwdHMKKyAgXGRldGFpbHMgRW5hYmxlcyBJUlEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgSS1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWUgaSIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIElSUSBJbnRlcnJ1cHRzCisgIFxkZXRhaWxzIERpc2FibGVzIElSUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEktYml0IGluIHRoZSBDUFNSLgorICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZCBpIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0NPTlRST0wodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBjb250cm9sIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQ09OVFJPTCh1aW50MzJfdCBjb250cm9sKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBjb250cm9sLCAlMCIgOiA6ICJyIiAoY29udHJvbCkgOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBJUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBpcHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBBUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIEFQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0FQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBhcHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIHhQU1IgUmVnaXN0ZXIuCisKKyAgICBccmV0dXJuICAgICAgICAgICAgICAgeFBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF94UFNSKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgeHBzciIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QU1Aodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwc3BcbiIgIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLgorICBccGFyYW0gW2luXSAgICB0b3BPZlByb2NTdGFjayAgUHJvY2VzcyBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUCh1aW50MzJfdCB0b3BPZlByb2NTdGFjaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHNwLCAlMFxuIiA6IDogInIiICh0b3BPZlByb2NTdGFjaykgOiAic3AiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1AgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgbXNwXG4iIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorCisgICAgXHBhcmFtIFtpbl0gICAgdG9wT2ZNYWluU3RhY2sgIE1haW4gU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1AodWludDMyX3QgdG9wT2ZNYWluU3RhY2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIG1zcCwgJTBcbiIgOiA6ICJyIiAodG9wT2ZNYWluU3RhY2spIDogInNwIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBNYXNrCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByaW9yaXR5IG1hc2sgYml0IGZyb20gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BSSU1BU0sodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwcmltYXNrIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwcmltYXNrLCAlMCIgOiA6ICJyIiAocHJpTWFzaykgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKQorCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEZJUQorICBcZGV0YWlscyBFbmFibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2VuYWJsZV9mYXVsdF9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZSBmIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRklRCisgIFxkZXRhaWxzIERpc2FibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9mYXVsdF9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZCBmIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0JBU0VQUkkodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBiYXNlcHJpIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUkkodWludDMyX3QgdmFsdWUpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGJhc2VwcmksICUwIiA6IDogInIiICh2YWx1ZSkgOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIG9ubHkgaWYgQkFTRVBSSSBtYXNraW5nIGlzIGRpc2FibGVkLAorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJX01BWCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgYmFzZXByaV9tYXgsICUwIiA6IDogInIiICh2YWx1ZSkgOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGZhdWx0bWFzayIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzaworICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZmF1bHRNYXNrICBGYXVsdCBNYXNrIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZBVUxUTUFTSyh1aW50MzJfdCBmYXVsdE1hc2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGZhdWx0bWFzaywgJTAiIDogOiAiciIgKGZhdWx0TWFzaykgOiAibWVtb3J5Iik7Cit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgKi8KKworCisjaWYgICAgICAgKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKQorCisvKioKKyAgXGJyaWVmICAgR2V0IEZQU0NSCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRlBTQ1Iodm9pZCkKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIHVpbnQzMl90IHJlc3VsdDsKKworICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovCisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisgIF9fQVNNIHZvbGF0aWxlICgiVk1SUyAlMCwgZnBzY3IiIDogIj1yIiAocmVzdWx0KSApOworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICByZXR1cm4ocmVzdWx0KTsKKyNlbHNlCisgICByZXR1cm4oMCk7CisjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZQU0NSCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZQU0NSKHVpbnQzMl90IGZwc2NyKQoreworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkKKyAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICBfX0FTTSB2b2xhdGlsZSAoIlZNU1IgZnBzY3IsICUwIiA6IDogInIiIChmcHNjcikgOiAidmZwY2MiKTsKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKSAqLworCisKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgKi8KKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSBDTVNJUyBDb3JlIEluc3RydWN0aW9uIEludGVyZmFjZQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucworICBAeworKi8KKworLyogRGVmaW5lIG1hY3JvcyBmb3IgcG9ydGluZyB0byBib3RoIHRodW1iMSBhbmQgdGh1bWIyLgorICogRm9yIHRodW1iMSwgdXNlIGxvdyByZWdpc3RlciAocjAtcjcpLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAibCIKKyAqIE90aGVyd2lzZSwgdXNlIGdlbmVyYWwgcmVnaXN0ZXJzLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAiciIgKi8KKyNpZiBkZWZpbmVkIChfX3RodW1iX18pICYmICFkZWZpbmVkIChfX3RodW1iMl9fKQorI2RlZmluZSBfX0NNU0lTX0dDQ19PVVRfUkVHKHIpICI9bCIgKHIpCisjZGVmaW5lIF9fQ01TSVNfR0NDX1VTRV9SRUcocikgImwiIChyKQorI2Vsc2UKKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPXIiIChyKQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJyIiAocikKKyNlbmRpZgorCisvKioKKyAgXGJyaWVmICAgTm8gT3BlcmF0aW9uCisgIFxkZXRhaWxzIE5vIE9wZXJhdGlvbiBkb2VzIG5vdGhpbmcuIFRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGJlIHVzZWQgZm9yIGNvZGUgYWxpZ25tZW50IHB1cnBvc2VzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19OT1Aodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJub3AiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgSW50ZXJydXB0CisgIFxkZXRhaWxzIFdhaXQgRm9yIEludGVycnVwdCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBzdXNwZW5kcyBleGVjdXRpb24gdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1dGSSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoIndmaSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBXYWl0IEZvciBFdmVudAorICBcZGV0YWlscyBXYWl0IEZvciBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBwZXJtaXRzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIKKyAgICBhIGxvdy1wb3dlciBzdGF0ZSB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fV0ZFKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgid2ZlIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNlbmQgRXZlbnQKKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TRVYodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJzZXYiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIKKyAgXGRldGFpbHMgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIgZmx1c2hlcyB0aGUgcGlwZWxpbmUgaW4gdGhlIHByb2Nlc3NvciwKKyAgICAgICAgICAgc28gdGhhdCBhbGwgaW5zdHJ1Y3Rpb25zIGZvbGxvd2luZyB0aGUgSVNCIGFyZSBmZXRjaGVkIGZyb20gY2FjaGUgb3IgbWVtb3J5LAorICAgICAgICAgICBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gY29tcGxldGVkLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19JU0Iodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJpc2IgMHhGIjo6OiJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcgorICBcZGV0YWlscyBBY3RzIGFzIGEgc3BlY2lhbCBraW5kIG9mIERhdGEgTWVtb3J5IEJhcnJpZXIuCisgICAgICAgICAgIEl0IGNvbXBsZXRlcyB3aGVuIGFsbCBleHBsaWNpdCBtZW1vcnkgYWNjZXNzZXMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX0RTQih2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImRzYiAweEYiOjo6Im1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEYXRhIE1lbW9yeSBCYXJyaWVyCisgIFxkZXRhaWxzIEVuc3VyZXMgdGhlIGFwcGFyZW50IG9yZGVyIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUKKyAgICAgICAgICAgYW5kIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiwgd2l0aG91dCBlbnN1cmluZyB0aGVpciBjb21wbGV0aW9uLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19ETUIodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJkbWIgMHhGIjo6OiJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGludGVnZXIgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkVWKHVpbnQzMl90IHZhbHVlKQoreworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDUpCisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih2YWx1ZSk7CisjZWxzZQorICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXYgJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcgKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHICh2YWx1ZSkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7CisjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgxNiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIHR3byB1bnNpZ25lZCBzaG9ydCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkVWMTYodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInJldjE2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgaW4gc2lnbmVkIHNob3J0IHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGEgc2lnbmVkIHNob3J0IHZhbHVlIHdpdGggc2lnbiBleHRlbnNpb24gdG8gaW50ZWdlci4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBfX1JFVlNIKGludDMyX3QgdmFsdWUpCit7CisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkKKyAgcmV0dXJuIChzaG9ydClfX2J1aWx0aW5fYnN3YXAxNih2YWx1ZSk7CisjZWxzZQorICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInJldnNoICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCBpbiB1bnNpZ25lZCB2YWx1ZSAoMzIgYml0KQorICBcZGV0YWlscyBSb3RhdGUgUmlnaHQgKGltbWVkaWF0ZSkgcHJvdmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHJvdGF0ZWQgYnkgYSB2YXJpYWJsZSBudW1iZXIgb2YgYml0cy4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJvdGF0ZQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgTnVtYmVyIG9mIEJpdHMgdG8gcm90YXRlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19ST1IodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHJldHVybiAob3AxID4+IG9wMikgfCAob3AxIDw8ICgzMlUgLSBvcDIpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQnJlYWtwb2ludAorICBcZGV0YWlscyBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBlbnRlciBEZWJ1ZyBzdGF0ZS4KKyAgICAgICAgICAgRGVidWcgdG9vbHMgY2FuIHVzZSB0aGlzIHRvIGludmVzdGlnYXRlIHN5c3RlbSBzdGF0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpcyByZWFjaGVkLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgaXMgaWdub3JlZCBieSB0aGUgcHJvY2Vzc29yLgorICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgYSBkZWJ1Z2dlciBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJyZWFrcG9pbnQuCisgKi8KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJia3B0ICIjdmFsdWUpCisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYml0IG9yZGVyIG9mIHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBiaXQgb3JkZXIgb2YgdGhlIGdpdmVuIHZhbHVlLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JCSVQodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKyAgIF9fQVNNIHZvbGF0aWxlICgicmJpdCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAodmFsdWUpICk7CisjZWxzZQorICBpbnQzMl90IHMgPSA0IC8qc2l6ZW9mKHYpKi8gKiA4IC0gMTsgLyogZXh0cmEgc2hpZnQgbmVlZGVkIGF0IGVuZCAqLworCisgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8KKyAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpCisgIHsKKyAgICByZXN1bHQgPDw9IDFVOworICAgIHJlc3VsdCB8PSB2YWx1ZSAmIDFVOworICAgIHMtLTsKKyAgfQorICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovCisjZW5kaWYKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENvdW50IGxlYWRpbmcgemVyb3MKKyAgXGRldGFpbHMgQ291bnRzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBhIGRhdGEgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MKKyAgXHJldHVybiAgICAgICAgICAgICBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiB2YWx1ZQorICovCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgIF9fYnVpbHRpbl9jbHoKKworCisjaWYgICAgICAgKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKQorCisvKioKKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgX19MRFJFWEIodm9sYXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJleGIgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworI2Vsc2UKKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QKKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uCisgICAgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXhiICUwLCBbJTFdIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIgKTsKKyNlbmRpZgorICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERSRVhIKHZvbGF0aWxlIHVpbnQxNl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmV4aCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisjZWxzZQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdAorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4KKyAgICAqLworICAgX19BU00gdm9sYXRpbGUgKCJsZHJleGggJTAsIFslMV0iIDogIj1yIiAocmVzdWx0KSA6ICJyIiAoYWRkcikgOiAibWVtb3J5IiApOworI2VuZGlmCisgICByZXR1cm4gKCh1aW50MTZfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTERSRVhXKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZHJleCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhCKHVpbnQ4X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpCit7CisgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyZXhiICUwLCAlMiwgJTEiIDogIj0mciIgKHJlc3VsdCksICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhIKHVpbnQxNl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJzdHJleGggJTAsICUyLCAlMSIgOiAiPSZyIiAocmVzdWx0KSwgIj1RIiAoKmFkZHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TVFJFWFcodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmV4ICUwLCAlMiwgJTEiIDogIj0mciIgKHJlc3VsdCksICI9USIgKCphZGRyKSA6ICJyIiAodmFsdWUpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUmVtb3ZlIHRoZSBleGNsdXNpdmUgbG9jaworICBcZGV0YWlscyBSZW1vdmVzIHRoZSBleGNsdXNpdmUgbG9jayB3aGljaCBpcyBjcmVhdGVkIGJ5IExEUkVYLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19DTFJFWCh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNscmV4IiA6OjogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTaWduZWQgU2F0dXJhdGUKKyAgXGRldGFpbHMgU2F0dXJhdGVzIGEgc2lnbmVkIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZAorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMS4uMzIpCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19TU0FUKEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInNzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisKKy8qKgorICBcYnJpZWYgICBVbnNpZ25lZCBTYXR1cmF0ZQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYW4gdW5zaWduZWQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgwLi4zMSkKKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUKKyAqLworI2RlZmluZSBfX1VTQVQoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcCisgIF9fQVNNICgidXNhdCAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKworLyoqCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCB3aXRoIEV4dGVuZCAoMzIgYml0KQorICBcZGV0YWlscyBNb3ZlcyBlYWNoIGJpdCBvZiBhIGJpdHN0cmluZyByaWdodCBieSBvbmUgYml0LgorICAgICAgICAgICBUaGUgY2FycnkgaW5wdXQgaXMgc2hpZnRlZCBpbiBhdCB0aGUgbGVmdCBlbmQgb2YgdGhlIGJpdHN0cmluZy4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUlJYKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJycnggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcgKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHICh2YWx1ZSkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgX19MRFJCVCh2b2xhdGlsZSB1aW50OF90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmJ0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqYWRkcikgKTsKKyNlbHNlCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90CisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLgorICAgICovCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmJ0ICUwLCBbJTFdIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIgKTsKKyNlbmRpZgorICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgX19MRFJIVCh2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJodCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisjZWxzZQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdAorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4KKyAgICAqLworICAgX19BU00gdm9sYXRpbGUgKCJsZHJodCAlMCwgWyUxXSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChhZGRyKSA6ICJtZW1vcnkiICk7CisjZW5kaWYKKyAgIHJldHVybiAoKHVpbnQxNl90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8KK30KKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUlQodm9sYXRpbGUgdWludDMyX3QgKmFkZHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcnQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJCVCh1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICphZGRyKQoreworICAgX19BU00gdm9sYXRpbGUgKCJzdHJidCAlMSwgJTAiIDogIj1RIiAoKmFkZHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUUkhUKHVpbnQxNl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyaHQgJTEsICUwIiA6ICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJUKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RydCAlMSwgJTAiIDogIj1RIiAoKmFkZHIpIDogInIiICh2YWx1ZSkgKTsKK30KKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBTSU1EIGluc3RydWN0aW9ucworICBAeworKi8KKworI2lmIChfX0NPUlRFWF9NID49IDB4MDRVKSAgLyogb25seSBmb3IgQ29ydGV4LU00IGFuZCBhYm92ZSAqLworCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicWFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aGFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FEOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXNhZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBREE4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYWRhOCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworI2RlZmluZSBfX1NTQVQxNihBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInNzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKyNkZWZpbmUgX19VU0FUMTYoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcCisgIF9fQVNNICgidXNhdDE2ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcCisgIF9fUkVTOyBcCisgfSkKKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRCMTYodWludDMyX3Qgb3AxKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1eHRiMTYgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSkpOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1eHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEIxNih1aW50MzJfdCBvcDEpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInN4dGIxNiAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEFCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInN4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQUQgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211YWQgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQURYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211YWR4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTEFEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxBTEQgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzBdKSwgIj1yIiAobGxyLnczMlsxXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzBdKSwgIjEiIChsbHIudzMyWzFdKSApOworI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMV0pLCAiPXIiIChsbHIudzMyWzBdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMV0pLCAiMSIgKGxsci53MzJbMF0pICk7CisjZW5kaWYKKworICByZXR1cm4obGxyLnc2NCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzBdKSwgIj1yIiAobGxyLnczMlsxXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzBdKSwgIjEiIChsbHIudzMyWzFdKSApOworI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdXNkICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdXNkeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2QgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0RYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MU0xEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TRUwgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2VsICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSAgaW50MzJfdCBfX1FBREQoIGludDMyX3Qgb3AxLCAgaW50MzJfdCBvcDIpCit7CisgIGludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicWFkZCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RU1VCKCBpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQoreworICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzdWIgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgX19QS0hCVChBUkcxLEFSRzIsQVJHMykgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcCisgIF9fQVNNICgicGtoYnQgJTAsICUxLCAlMiwgbHNsICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKyNkZWZpbmUgX19QS0hUQihBUkcxLEFSRzIsQVJHMykgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcCisgIGlmIChBUkczID09IDApIFwKKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJyIiAoX19BUkcxKSwgInIiIChfX0FSRzIpICApOyBcCisgIGVsc2UgXAorICAgIF9fQVNNICgicGtodGIgJTAsICUxLCAlMiwgYXNyICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXAorICBfX1JFUzsgXAorIH0pCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01NTEEgKGludDMyX3Qgb3AxLCBpbnQzMl90IG9wMiwgaW50MzJfdCBvcDMpCit7CisgaW50MzJfdCByZXN1bHQ7CisKKyBfX0FTTSB2b2xhdGlsZSAoInNtbWxhICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCk6ICJyIiAgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDA0KSAqLworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzICovCisKKworI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dDQ19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY20wLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2NvcmVfY20wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhZTRmOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbTAuaApAQCAtMCwwICsxLDc5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY20wLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTAgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNMF9IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX0NNMF9IX0dFTkVSSUMKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucworICBDTVNJUyB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIE1JU1JBLUM6MjAwNCBydWxlczoKKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+CisgICAgIEZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGhlYWRlciBmaWxlcyBhcmUgdXNlZCB0byBhbGxvdyAnaW5saW5pbmcnLgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4KKyAgICAgVW5pb25zIGFyZSB1c2VkIGZvciBlZmZlY3RpdmUgcmVwcmVzZW50YXRpb24gb2YgY29yZSByZWdpc3RlcnMuCisKKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+CisgICAgIEZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGNvZGUuCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxpbmdyb3VwIENvcnRleF9NMAorICBAeworICovCisKKy8qICBDTVNJUyBDTTAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19DTTBfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX0NNMF9DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTBfQ01TSVNfVkVSU0lPTiAgICAgICAoKF9fQ00wX0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTBfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfTSAgICAgICAgICAgICAgICAoMHgwMFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIFRoaXMgY29yZSBkb2VzIG5vdCBzdXBwb3J0IGFuIEZQVSBhdCBhbGwKKyovCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00wX0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9DTTBfSF9ERVBFTkRBTlQKKyNkZWZpbmUgX19DT1JFX0NNMF9IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19DTTBfUkVWCisgICAgI2RlZmluZSBfX0NNMF9SRVYgICAgICAgICAgICAgICAweDAwMDBVCisgICAgI3dhcm5pbmcgIl9fQ00wX1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgMlUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBDb3J0ZXhfTTAgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4KKyovCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjI4OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4yNyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IEFQU1JfVHlwZTsKKworLyogQVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBBUFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIEFQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnRlcnJ1cHQgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKElQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjIzOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gSVBTUl9UeXBlOworCisvKiBJUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSBJUFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgSVBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBTcGVjaWFsLVB1cnBvc2UgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXJzICh4UFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNTsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMjMgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVDoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjQgIFRodW1iIGJpdCAgICAgICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjM7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDI1Li4yNyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCB4UFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIENvbnRyb2wgUmVnaXN0ZXJzIChDT05UUk9MKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTsgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAwICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFNQU0VMOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjayB0byBiZSB1c2VkICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTozMDsgICAgICAgICAgICAgIC8qITwgYml0OiAgMi4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IENPTlRST0xfVHlwZTsKKworLyogQ09OVFJPTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9TUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NPUkUgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19OVklDICBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpCisgIFxicmllZiAgICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOVklDIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgSVNFUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSUNFUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJTRVJWRUQxWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElTUFJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDEwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlszMVVdOworICBfX0lPTSB1aW50MzJfdCBJQ1BSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxODAgKFIvVykgIEludGVycnVwdCBDbGVhciBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1szMVVdOworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNjRVXTsKKyAgX19JT00gdWludDMyX3QgSVBbOFVdOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KK30gIE5WSUNfVHlwZTsKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDA7CisgIF9fSU9NIHVpbnQzMl90IEFJUkNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxOworICBfX0lPTSB1aW50MzJfdCBTSFBbMlVdOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvVykgIFN5c3RlbSBIYW5kbGVycyBQcmlvcml0eSBSZWdpc3RlcnMuIFswXSBpcyBSRVNFUlZFRCAqLworICBfX0lPTSB1aW50MzJfdCBTSENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCit9IFNDQl9UeXBlOworCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfTXNrICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX1ZBUklBTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX01zayAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Nc2sgICAgICAgICAgICAgICAoMHhGRkZVTCA8PCBTQ0JfQ1BVSURfUEFSVE5PX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zKi8pICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX1BvcyAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcyAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcyAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcyAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Nc2sgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcykgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyovKSAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Nc2sgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIFRpbWVyIFJlZ2lzdGVycy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8KK30gU3lzVGlja19UeXBlOworCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIFN5c1RpY2sgUmVsb2FkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8KKworLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIE1hc2sgKi8KKworLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX1BvcyAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1N5c1RpY2sgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgQ29ydGV4LU0wIENvcmUgRGVidWcgUmVnaXN0ZXJzIChEQ0IgcmVnaXN0ZXJzLCBTSENTUiwgYW5kIERGU1IpIGFyZSBvbmx5IGFjY2Vzc2libGUgb3ZlciBEQVAgYW5kIG5vdCB2aWEgcHJvY2Vzc29yLgorICAgICAgICAgICAgVGhlcmVmb3JlIHRoZXkgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBDb3J0ZXgtTTAgaGVhZGVyIGZpbGUuCisgIEB7CisgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgQ29ydGV4LU0wIEhhcmR3YXJlICovCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTQ0JfQkFTRSAgICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgU0NCICAgICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRSAgICAgICkgICAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCisKKy8qQH0gKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcgorICBDb3JlIEZ1bmN0aW9uIEludGVyZmFjZSBjb250YWluczoKKyAgLSBDb3JlIE5WSUMgRnVuY3Rpb25zCisgIC0gQ29yZSBTeXNUaWNrIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKyNpbmNsdWRlICJzZGtfZGVmcy5oIiAvKiBEZWNsYXJlcyBJUlFuX1R5cGUgKi8KKy8qIEludGVycnVwdCBQcmlvcml0aWVzIGFyZSBXT1JEIGFjY2Vzc2libGUgb25seSB1bmRlciBBUk12Nk0gICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSBmb2xsb3dpbmcgTUFDUk9TIGhhbmRsZSBnZW5lcmF0aW9uIG9mIHRoZSByZWdpc3RlciBvZmZzZXQgYW5kIGJ5dGUgbWFza3MgKi8KKyNkZWZpbmUgX0JJVF9TSElGVChJUlFuKSAgICAgICAgICggICgoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICAgICAgICAgKSAgICAgICYgIDB4MDNVTCkgKiA4VUwpCisjZGVmaW5lIF9TSFBfSURYKElSUW4pICAgICAgICAgICAoICgoKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAmIDB4MEZVTCktOFVMKSA+PiAgICAyVUwpICAgICAgKQorI2RlZmluZSBfSVBfSURYKElSUW4pICAgICAgICAgICAgKCAgICgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgICAgICAgICAgICAgICAgPj4gICAgMlVMKSAgICAgICkKKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIERpc2FibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNFUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbMFVdICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNQUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gPSAoKHVpbnQzMl90KShTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgPSAoKHVpbnQzMl90KShOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhbiBpbnRlcm5hbCAoY29yZSkgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildID4+IF9CSVRfU0hJRlQoSVJRbikgKSAmICh1aW50MzJfdCkweEZGVUwpID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JUFsgX0lQX0lEWChJUlFuKV0gPj4gX0JJVF9TSElGVChJUlFuKSApICYgKHVpbnQzMl90KTB4RkZVTCkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayk7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIG1lbW9yeSBhY2Nlc3MgKi8KKworICBmb3IoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovCisgIHsKKyAgICBfX05PUCgpOworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00wX0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbUZ1bmMuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbUZ1bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTJhNDhhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9jb3JlX2NtRnVuYy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtRnVuYy5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbiBBY2Nlc3MgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTUZVTkNfSAorI2RlZmluZSBfX0NPUkVfQ01GVU5DX0gKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICAgIFxkZWZncm91cCBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyBDTVNJUyBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWxWaWV3IENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpbmNsdWRlICJjbXNpc19hcm1jYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBBUk0gQ29tcGlsZXIgVjYgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2NfVjYuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gR05VIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2luY2x1ZGUgImNtc2lzX2djYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBJQ0MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpbmNsdWRlIDxjbXNpc19pYXIuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gVEkgQ0NTIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaW5jbHVkZSA8Y21zaXNfY2NzLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRBU0tJTkcgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgIC8qCisgICAqIFRoZSBDTVNJUyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGludHJpbnNpY3MgaW4gdGhlIGNvbXBpbGVyLgorICAgKiBQbGVhc2UgdXNlICJjYXJtIC0/aSIgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgbGlzdCBvZiBhbGwgaW50cmluc2ljcywKKyAgICogSW5jbHVkaW5nIHRoZSBDTVNJUyBvbmVzLgorICAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQ09TTUlDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2NzbS5oPgorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgKi8KKworI2VuZGlmIC8qIF9fQ09SRV9DTUZVTkNfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9jb3JlX2NtSW5zdHIuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbUluc3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3NGIwZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvY29yZV9jbUluc3RyLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY21JbnN0ci5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTUlOU1RSX0gKKyNkZWZpbmUgX19DT1JFX0NNSU5TVFJfSAorCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlIENNU0lTIENvcmUgSW5zdHJ1Y3Rpb24gSW50ZXJmYWNlCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQVJNIENvbXBpbGVyIFY2IC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjX1Y2LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpbmNsdWRlICJjbXNpc19nY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaW5jbHVkZSA8Y21zaXNfaWFyLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRJIENDUyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2Njcy5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAvKgorICAgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4KKyAgICogUGxlYXNlIHVzZSAiY2FybSAtP2kiIHRvIGdldCBhbiB1cCB0byBkYXRlIGxpc3Qgb2YgYWxsIGludHJpbnNpY3MsCisgICAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4KKyAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIENPU01JQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpbmNsdWRlIDxjbXNpc19jc20uaD4KKworI2VuZGlmCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLworCisjZW5kaWYgLyogX19DT1JFX0NNSU5TVFJfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9pbnRlcnJ1cHRzLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL2ludGVycnVwdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjkwMmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9pbnRlcnJ1cHRzLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgU1lTVEVNCisgKiBceworICogXGFkZHRvZ3JvdXAgSU5URVJSVVBUUworICogCisgKiBcYnJpZWYgSW50ZXJydXB0IHByaW9yaXR5IGNvbmZpZ3VyYXRpb24KKyAqCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaW50ZXJydXB0cy5oCisgKgorICogQGJyaWVmIEludGVycnVwdCBwcmlvcml0eSBjb25maWd1cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBJTlRFUlJVUFRTX0hfCisjZGVmaW5lIElOVEVSUlVQVFNfSF8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTZXR1cCBpbnRlcnJ1cHQgcHJpb3JpdGllcworICoKKyAqIFdoZW4gQ1BVIGlzIHJlc2V0IGFsbCBpbnRlcnJ1cHRzIGhhdmUgc29tZSBwcmlvcml0eSBzZXR1cC4KKyAqIFJlc2V0ICAgICAtMworICogTk1JICAgICAgIC0yCisgKiBIYXJkRmF1bHQgLTEKKyAqIEFsbCBvdGhlciBpbnRlcnJ1cHRzIGhhdmUgY29uZmlndXJhYmxlIHByaW9yaXR5IHRoYXQgaXMgc2V0IHRvIDAuCisgKiBJZiBzb21lIGludGVycnVwdHMgc2hvdWxkIGhhdmUgcHJpb3JpdHkgb3RoZXIgdGhlbiBkZWZhdWx0LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQuCisgKiBBcmd1bWVudCBccCBwcmlvcyBjYW4gc3BlY2lmeSBvbmx5IHRob3NlIGludGVycnVwdHMgdGhhdCBuZWVkIHRvIGhhdmUgdmFsdWUgb3RoZXIgdGhhbiBkZWZhdWx0LgorICogRm9yIG1lbW9yeSBlZmZpY2llbmN5IHRhYmxlIHdpdGggcHJpb3JpdGllcyBmb3IgZWFjaCBpbnRlcnJ1cHQgY29uc2lzdCBvZiBpbnRlcnJ1cHQgcHJpb3JpdHkKKyAqIHRhZyBQUklPUklUWV94IGZvbGxvd2VkIGJ5IGludGVycnVwdHMgdGhhdCBzaG91bGQgaGF2ZSB0aGlzIHByaW9yaXR5LCBpbnRlcnJ1cHRzIG5hbWVzIGFyZSBmcm9tCisgKiBlbnVtIElSUW5fVHlwZS4KKyAqCisgKiBcbm90ZSBJZiBpbnRlcnJ1cHQgcHJpb3JpdGllcyBkbyBub3QgbmVlZCB0byBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWUsIGJlc3Qgd2F5IHRvCisgKiBzcGVjaWZ5IHN0YXRpYyBjb25maWd1cmF0aW9uIGlzIHRvIGNyZWF0ZSB0YWJsZSBuYW1lZCBfX2RpYWxvZ19pbnRlcnJ1cHRfcHJpb3JpdGllcyB0aGF0IHdpbGwKKyAqIGJlIHVzZWQgYXV0b21hdGljYWxseSBhdCBzdGFydHVwLgorICoKKyAqIE1vc3QgY29udmVuaWVudCB3YXkgdG8gcHJlcGFyZSBzdWNoIHRhYmxlIGlzIHRvIHVzZSBtYWNyb3MgbGlrZSBpbiBleGFtcGxlIGJlbG93OgorICoKKyAqIFxjb2Rley5jfQorICogSU5URVJSVVBUX1BSSU9SSVRZX0NPTkZJR19TVEFSVChfX2RpYWxvZ19pbnRlcnJ1cHRfcHJpb3JpdGllcykKKyAqICAgICAgUFJJT1JJVFlfMCwgLy8gU3RhcnQgaW50ZXJydXB0cyB3aXRoIHByaW9yaXR5IDAgKGhpZ2hlc3QpCisgKiAgICAgICAgICAgICAgIFNWQ2FsbF9JUlFuLAorICogICAgICAgICAgICAgICBQZW5kU1ZfSVJRbiwKKyAqICAgICAgICAgICAgICAgU3lzVGlja19JUlFuLAorICogICAgICBQUklPUklUWV8xLCAvLyBTdGFydCBpbnRlcnJ1cHRzIHdpdGggcHJpb3JpdHkgMQorICogICAgICAgICAgICAgICBCTEVfV0FLRVVQX0xQX0lSUW4sCisgKiAgICAgICAgICAgICAgIEJMRV9HRU5fSVJRbiwKKyAqICAgICAgICAgICAgICAgRlRERl9XQUtFVVBfSVJRbiwKKyAqICAgICAgICAgICAgICAgRlRERl9HRU5fSVJRbiwKKyAqICAgICAgUFJJT1JJVFlfMiwKKyAqICAgICAgICAgICAgICAgU1JDX0lOX0lSUW4sCisgKiAgICAgICAgICAgICAgIFNSQ19PVVRfSVJRbiwKKyAqICAgICAgUFJJT1JJVFlfMywKKyAqICAgICAgICAgICAgICAgVUFSVF9JUlFuLAorICogICAgICAgICAgICAgICBVQVJUMl9JUlFuLAorICogSU5URVJSVVBUX1BSSU9SSVRZX0NPTkZJR19FTkQKKyAqIFxlbmRjb2RlCisgKgorICogVGFibGUgX19kaWFsb2dfaW50ZXJydXB0X3ByaW9yaXRpZXMgY2FuIG5vdyBiZSB1c2VkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAqIFRhYmxlIGNhbiBzcGVjaWZ5IGFsbCBpbnRlcnJ1cHRzIG9yIG9ubHkgdGhvc2UgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQuCisgKgorICogXHBhcmFtIFtpbl0gcHJpb3MgdGFibGUgd2l0aCBpbnRlcnJ1cHRzIGFuZCBwcmlvcml0aWVzIHRvIHNldHVwCisgKgorICovCit2b2lkIHNldF9pbnRlcnJ1cHRfcHJpb3JpdGllcyhjb25zdCBpbnQ4X3QgcHJpb3NbXSk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIHdoZXRoZXIgcnVubmluZyBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBccmV0dXJuIHRydWUgaWYgdGhlIENQVSBpcyBzZXJ2aW5nIGFuIGludGVycnVwdC4KKyAqLworc3RhdGljIGlubGluZSBib29sIGluX2ludGVycnVwdCh2b2lkKQoreworICAgICAgICByZXR1cm4gKFNDQi0+SUNTUiAmIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrKSAhPSAwOworfQorCisKKy8qKgorICogXGJyaWVmIERlZmF1bHQgaW50ZXJydXB0IHByaW9yaXRpZXMgdGFibGUuCisgKgorICovCitleHRlcm4gY29uc3QgaW50OF90IF9fZGlhbG9nX2ludGVycnVwdF9wcmlvcml0aWVzW107CisKKworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiAoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gIT0gMSkKKyAgICAgICAgI2RlZmluZSBMQVNUX0lSUW4gUExMX0xPQ0tfSVJRbgorI2Vsc2UKKyAgICAgICAgI2RlZmluZSBMQVNUX0lSUW4gUkVTRVJWRUQzMV9JUlFuCisjZW5kaWYKKworLyoKKyAqIEZvbGxvd2luZyBtYWNyb3MgYWxsb3cgZWFzeSB3YXkgdG8gYnVpbGQgdGFibGUgd2l0aCBpbnRlcnJ1cHQgcHJpb3JpdGllcy4KKyAqIFNlZSBleGFtcGxlIGluIHNldF9pbnRlcnJ1cHRfcHJpb3JpdGllcyBmdW5jdGlvbiBkZXNjcmlwdGlvbi4KKyAqLworI2RlZmluZSBJTlRFUlJVUFRfUFJJT1JJVFlfQ09ORklHX1NUQVJUKG5hbWUpIGNvbnN0IGludDhfdCBuYW1lW10gPSB7CisjZGVmaW5lIFBSSU9SSVRZXzAgICAgICAoTEFTVF9JUlFuICsgMSkKKyNkZWZpbmUgUFJJT1JJVFlfMSAgICAgIChMQVNUX0lSUW4gKyAyKQorI2RlZmluZSBQUklPUklUWV8yICAgICAgKExBU1RfSVJRbiArIDMpCisjZGVmaW5lIFBSSU9SSVRZXzMgICAgICAoTEFTVF9JUlFuICsgNCkKKyNkZWZpbmUgUFJJT1JJVFlfVEFCTEVfRU5EIChMQVNUX0lSUW4gKyA1KQorI2RlZmluZSBJTlRFUlJVUFRfUFJJT1JJVFlfQ09ORklHX0VORCBQUklPUklUWV9UQUJMRV9FTkQgfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIElOVEVSUlVQVFNfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc2RrX2RlZnMuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc2RrX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmMxNjJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zZGtfZGVmcy5oCkBAIC0wLDAgKzEsNzc3IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIFBMQVRGT1JNCisgKgorICogXGJyaWVmIFBsYXRmb3JtIGRlZmluaXRpb25zCisgKgorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIHNka19kZWZzLmgKKyAqCisgKiBAYnJpZWYgQ2VudHJhbCBpbmNsdWRlIGhlYWRlciBmaWxlIHdpdGggcGxhdGZvcm0gZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX1NES19ERUZTX0hfXworI2RlZmluZSBfX1NES19ERUZTX0hfXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBfX0dOVUNfXworIyAgZGVmaW5lIEdDQ19WRVJTSU9OIChfX0dOVUNfXyAqIDEwMDAwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fR05VQ19NSU5PUl9fICogMTAwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fR05VQ19QQVRDSExFVkVMX18pCisvKiBhc3NlcnQgZ2NjIHZlcnNpb24gaXMgYXQgbGVhc3QgNC45LjMgKi8KKyMgIGlmIEdDQ19WRVJTSU9OIDwgNDA5MDMKKyMgICAgZXJyb3IgIlBsZWFzZSB1c2UgZ2NjIHZlcnNpb24gNC45LjMgb3IgbmV3ZXIhIgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpCisKKyAgIC8qIHVzZSBhIHJlZ2lzdGVyIGRlc2NyaXB0aW9uIHRoYXQgaXMgZ2VuZXJpYyBlbm91Z2ggZm9yIG91ciBuZWVkcyAqLworIyAgaW5jbHVkZSAiREExNDY4MEFFLmgiCisKKyNlbHNlCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjICBpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAgPT0gQkxBQ0tfT1JDQV9JQ19TVEVQX0UKKyMgICAgICAgaW5jbHVkZSAiREExNDY4MEFFLmgiCisjICBlbHNlCisjICAgICAgIGVycm9yICJVbmtub3duIGNoaXAgc3RlcHBpbmcgZm9yIHJldmlzaW9uIEEgLS0gY2hlY2sgdGhlIHZhbHVlIG9mIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCIKKyMgIGVuZGlmCisjZWxpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CCisjICBpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1NURVAgPT0gQkxBQ0tfT1JDQV9JQ19TVEVQX0EKKyMgICAgICAgaW5jbHVkZSAiREExNDY4MEJBLmgiCisjICBlbHNlCisjICAgICAgIGVycm9yICJVbmtub3duIGNoaXAgc3RlcHBpbmcgZm9yIHJldmlzaW9uIEIgLS0gY2hlY2sgdGhlIHZhbHVlIG9mIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfU1RFUCIKKyMgIGVuZGlmCisjZWxzZQorIyAgZXJyb3IgIlVua25vd24gY2hpcCByZXZpc2lvbiAtLSBjaGVjayB0aGUgdmFsdWUgb2YgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYiCisjZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlICJjb3JlX2NtMC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3J0ZXgtTTAgcHJvY2Vzc29yIGFuZCBjb3JlIHBlcmlwaGVyYWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpbmNsdWRlICJzeXN0ZW1fREExNDY4MC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEQTE0NjgwQUEgU3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IG1hcAorICoqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBcYnJpZWYgUmVtYXBwZWQgZGV2aWNlIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1PUllfUkVNQVBQRURfQkFTRSAgICAweDAwMDAwMDAwVUwKKyNkZWZpbmUgTUVNT1JZX1JFTUFQUEVEX0VORCAgICAgMHgwNDAwMDAwMFVMCisKKy8qKgorICogXGJyaWVmIFJlbWFwcGVkIGRldmljZSBtZW1vcnkgc2l6ZSAoNjRNaUIpLgorICovCisjZGVmaW5lIE1FTU9SWV9SRU1BUFBFRF9TSVpFICAgIChNRU1PUllfUkVNQVBQRURfRU5EIC0gTUVNT1JZX1JFTUFQUEVEX0JBU0UpCisKKy8qKgorICogXGJyaWVmIFJPTSBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX1JPTV9CQVNFICAgICAgICAgMHgwN0YwMDAwMFVMCisjZGVmaW5lIE1FTU9SWV9ST01fRU5EICAgICAgICAgIDB4MDdGNDAwMDBVTAorCisvKioKKyAqIFxicmllZiBST00gbWVtb3J5IHNpemUgKDI1NktpQikuCisgKi8KKyNkZWZpbmUgTUVNT1JZX1JPTV9TSVpFICAgICAgICAgKE1FTU9SWV9ST01fRU5EIC0gTUVNT1JZX1JPTV9CQVNFKQorCisvKioKKyAqIFxicmllZiBPVFAgQ29udHJvbGxlciBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX09UUENfQkFTRSAgICAgICAgMHgwN0Y0MDAwMFVMCisjZGVmaW5lIE1FTU9SWV9PVFBDX0VORCAgICAgICAgIDB4MDdGODAwMDBVTAorCisvKioKKyAqIFxicmllZiBPVFAgbWVtb3J5IGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1PUllfT1RQX0JBU0UgICAgICAgICAweDA3RjgwMDAwVUwKKyNkZWZpbmUgTUVNT1JZX09UUF9FTkQgICAgICAgICAgMHgwN0ZDMDAwMFVMCisKKy8qKgorICogXGJyaWVmIE9UUCBtZW1vcnkgc2l6ZSAoMjU2S2lCKS4KKyAqLworI2RlZmluZSBNRU1PUllfT1RQX1NJWkUgICAgICAgICAoTUVNT1JZX09UUF9FTkQgLSBNRU1PUllfT1RQX0JBU0UpCisKKy8qKgorICogXGJyaWVmIFNZU1RFTSBSQU0gYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE1FTU9SWV9TWVNSQU1fQkFTRSAgICAgIDB4MDdGQzAwMDBVTAorI2RlZmluZSBNRU1PUllfU1lTUkFNX0VORCAgICAgICAweDA3RkUwMDAwVUwKKworLyoqCisgKiBcYnJpZWYgU1lTVEVNIFJBTSBzaXplICgxMjhLaUIpLgorICovCisjZGVmaW5lIE1FTU9SWV9TWVNSQU1fU0laRSAgICAgIChNRU1PUllfU1lTUkFNX0VORCAtIE1FTU9SWV9TWVNSQU1fQkFTRSkKKworLyoqCisgKiBcYnJpZWYgQ0FDSEUgUkFNIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1PUllfQ0FDSEVSQU1fQkFTRSAgICAweDA3RkUwMDAwVUwKKyNkZWZpbmUgTUVNT1JZX0NBQ0hFUkFNX0VORCAgICAgMHgwODAwMDAwMFVMCisKKy8qKgorICogXGJyaWVmIENBQ0hFIFJBTSBzaXplICgxMjhLaUIpLgorICovCisjZGVmaW5lIE1FTU9SWV9DQUNIRVJBTV9TSVpFICAgIChNRU1PUllfQ0FDSEVSQU1fRU5EIC0gTUVNT1JZX0NBQ0hFUkFNX0JBU0UpCisKKy8qKgorICogXGJyaWVmIFFTUEkgRmxhc2ggYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIE1FTU9SWV9RU1BJRl9CQVNFICAgICAgIDB4MDgwMDAwMDBVTAorI2RlZmluZSBNRU1PUllfUVNQSUZfRU5EICAgICAgICAweDBCRjAwMDAwVUwKKworLyoqCisgKiBcYnJpZWYgUVNQSSBGbGFzaCBtZW1vcnkgc2l6ZSAoNjNNaUIpLgorICovCisjZGVmaW5lIE1FTU9SWV9RU1BJRl9TSVpFICAgICAgIChNRU1PUllfUVNQSUZfRU5EIC0gTUVNT1JZX1FTUElGX0JBU0UpCisKKy8qKgorICogXGJyaWVmIFFTUEkgQ29udHJvbGxlciBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX1FTUElDX0JBU0UgICAgICAgMHgwQzAwMDAwMFVMCisjZGVmaW5lIE1FTU9SWV9RU1BJQ19FTkQgICAgICAgIDB4MEMxMDAwMDBVTAorCisvKioKKyAqIFxicmllZiBFQ0MgZW5naW5lIG1pY3JvY29kZSBiYXNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgTUVNT1JZX0VDQ19VQ09ERV9CQVNFICAgMHg0MDAzMDAwMFVMCisKKy8qKgorICogXGJyaWVmIFRSTkcgRklGTyBhZGRyZXNzCisgKi8KKyNkZWZpbmUgTUVNT1JZX1RSTkdfRklGTyAgICAgICAgMHg0MDA0MDAwMFVMCisKKyNkZWZpbmUgV0lUSElOX1JBTkdFKF9hLCBfcywgX2UpICAgICAgICAoKCh1aW50MzJfdCkoX2EpID49ICh1aW50MzJfdCkoX3MpKSAmJiAoKHVpbnQzMl90KShfYSkgPCAodWludDMyX3QpKF9lKSkpCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgaXMgaW4gdGhlIHJlbWFwcGVkIG1lbW9yeSByZWdpb24KKyAqLworI2RlZmluZSBJU19SRU1BUFBFRF9BRERSRVNTKF9hKSAgICAgICAgIFdJVEhJTl9SQU5HRSgoX2EpLCBNRU1PUllfUkVNQVBQRURfQkFTRSwgTUVNT1JZX1JFTUFQUEVEX0VORCkKKworLyoqCisgKiBcYnJpZWYgQWRkcmVzcyBpcyBpbiB0aGUgUk9NIHJlZ2lvbgorICovCisjZGVmaW5lIElTX1JPTV9BRERSRVNTKF9hKSAgICAgICAgICAgICAgV0lUSElOX1JBTkdFKChfYSksIE1FTU9SWV9ST01fQkFTRSwgTUVNT1JZX1JPTV9FTkQpCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgaXMgaW4gdGhlIE9UUCBtZW1vcnkgcmVnaW9uCisgKi8KKyNkZWZpbmUgSVNfT1RQX0FERFJFU1MoX2EpICAgICAgICAgICAgICBXSVRISU5fUkFOR0UoKF9hKSwgTUVNT1JZX09UUF9CQVNFLCBNRU1PUllfT1RQX0VORCkKKworLyoqCisgKiBcYnJpZWYgQWRkcmVzcyBpcyBpbiB0aGUgT1RQIENvbnRyb2xsZXIgbWVtb3J5IHJlZ2lvbgorICovCisjZGVmaW5lIElTX09UUENfQUREUkVTUyhfYSkgICAgICAgICAgICAgV0lUSElOX1JBTkdFKChfYSksIE1FTU9SWV9PVFBDX0JBU0UsIE1FTU9SWV9PVFBDX0VORCkKKworLyoqCisgKiBcYnJpZWYgQWRkcmVzcyBpcyBpbiB0aGUgU1lTVEVNIFJBTSByZWdpb24KKyAqLworI2RlZmluZSBJU19TWVNSQU1fQUREUkVTUyhfYSkgICAgICAgICAgIFdJVEhJTl9SQU5HRSgoX2EpLCBNRU1PUllfU1lTUkFNX0JBU0UsIE1FTU9SWV9TWVNSQU1fRU5EKQorCisvKioKKyAqIFxicmllZiBBZGRyZXNzIGlzIGluIHRoZSBDQUNIRSBSQU0gcmVnaW9uCisgKi8KKyNkZWZpbmUgSVNfQ0FDSEVSQU1fQUREUkVTUyhfYSkgICAgICAgICBXSVRISU5fUkFOR0UoKF9hKSwgTUVNT1JZX0NBQ0hFUkFNX0JBU0UsIE1FTU9SWV9DQUNIRVJBTV9FTkQpCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgaXMgaW4gdGhlIFFTUEkgRmxhc2ggbWVtb3J5IHJlZ2lvbgorICovCisjZGVmaW5lIElTX1FTUElGX0FERFJFU1MoX2EpICAgICAgICAgICAgV0lUSElOX1JBTkdFKChfYSksIE1FTU9SWV9RU1BJRl9CQVNFLCBNRU1PUllfUVNQSUZfRU5EKQorCisvKioKKyAqIFxicmllZiBBZGRyZXNzIGlzIGluIHRoZSBRU1BJIENvbnRyb2xsZXIgbWVtb3J5IHJlZ2lvbgorICovCisjZGVmaW5lIElTX1FTUElDX0FERFJFU1MoX2EpICAgICAgICAgICAgV0lUSElOX1JBTkdFKChfYSksIE1FTU9SWV9RU1BJQ19CQVNFLCBNRU1PUllfUVNQSUNfRU5EKQorCisjZGVmaW5lIF9CTEFDS19PUkNBX0lDX1ZFUlNJT04ocmV2aXNpb24sIHN0ZXBwaW5nKSBcCisgICAgICAgICgoKHJldmlzaW9uKSA8PCA4KSB8IChzdGVwcGluZykpCisKKy8qKgorICogXGJyaWVmIENvbnZlbmllbmNlIG1hY3JvIHRvIGNyZWF0ZSB0aGUgZnVsbCBjaGlwIHZlcnNpb24gZnJvbSByZXZpc2lvbiBhbmQgc3RlcHBpbmcuCisgKiAgICAgICAgSXQgdGFrZXMgbGV0dGVycyBhcyBhcmd1bWVudHMuCisgKi8KKyNkZWZpbmUgQkxBQ0tfT1JDQV9JQ19WRVJTSU9OKHJldmlzaW9uLCBzdGVwcGluZykgXAorICAgICAgICBfQkxBQ0tfT1JDQV9JQ19WRVJTSU9OKEJMQUNLX09SQ0FfSUNfUkVWXyMjcmV2aXNpb24sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJMQUNLX09SQ0FfSUNfU1RFUF8jI3N0ZXBwaW5nKQorCisvKioKKyAqIFxicmllZiBUaGUgY2hpcCB2ZXJzaW9uIHRoYXQgd2UgY29tcGlsZSBmb3IuCisgKi8KKyNkZWZpbmUgQkxBQ0tfT1JDQV9UQVJHRVRfSUMgXAorICAgICAgICAgX0JMQUNLX09SQ0FfSUNfVkVSU0lPTihkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViwgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQKQorCisKKy8qKgorICogXGJyaWVmIFplcm8taW5pdGlhbGl6ZWQgZGF0YSByZXRhaW5lZCBtZW1vcnkgYXR0cmlidXRlCisgKi8KKyNkZWZpbmUgX19SRVRBSU5FRCAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmV0ZW50aW9uX21lbV96aSIpKSkgICAgLy8gUmV0UkFNMAorI2RlZmluZSBfX1JFVEFJTkVEXzEgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJyZXRlbnRpb25fbWVtXzFfemkiKSkpICAvLyBSZXRSQU0xCisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemVkIGRhdGEgcmV0YWluZWQgbWVtb3J5IGF0dHJpYnV0ZQorICovCisjZGVmaW5lIF9fUkVUQUlORURfUlcgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInJldGVudGlvbl9tZW1faW5pdCIpKSkKKworLyoqCisgKiBcYnJpZWYgVW5pbml0aWFsaXplZCBkYXRhIHJldGFpbmVkIG1lbW9yeSBhdHRyaWJ1dGUKKyAqLworI2RlZmluZSBfX1JFVEFJTkVEX1VOSU5JVCAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJyZXRlbnRpb25fbWVtX3VuaW5pdCIpKSkKKworIC8qKgorICAqIFxicmllZiBDb25zdGFudCBkYXRhIHJldGFpbmVkIG1lbW9yeSBhdHRyaWJ1dGUKKyAgKi8KKyAjZGVmaW5lIF9fUkVUQUlORURfQ09OU1RfSU5JVCAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmV0ZW50aW9uX21lbV9jb25zdCIpKSkKKworLyoqCisgKiBcYnJpZWYgVGV4dCByZXRhaW5lZCBtZW1vcnkgYXR0cmlidXRlCisgKi8KKyNpZiAoKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gPT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKSAmJiAoZGdfY29uZmlnRVhFQ19NT0RFID09IE1PREVfSVNfQ0FDSEVEKSkKKyNkZWZpbmUgX19SRVRBSU5FRF9DT0RFICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigidGV4dF9yZXRhaW5lZCIpKSkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBfX2F0dHJpYnV0ZV9fKChvcHRpbWl6ZSAoIm5vLXRyZWUtc3dpdGNoLWNvbnZlcnNpb24iKSkpCisjZWxzZQorI2RlZmluZSBfX1JFVEFJTkVEX0NPREUKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBBdHRyaWJ1dGUgdG8gdGVsbCB0aGUgY29tcGlsZXIgdG8gY29uc2lkZXIgYSBzeW1ib2wgYXMgdXNlZAorICovCisjZGVmaW5lIF9fVVNFRCAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKQorCisvKioKKyAqIFxicmllZiBBdHRyaWJ1dGUgdG8gdGVsbCB0aGUgY29tcGlsZXIgdG8gY29uc2lkZXIgYSBzeW1ib2wgYXMgZXh0ZXJuYWxseSB2aXNpYmxlIChmb3IgTFRPKQorICovCisjZGVmaW5lIF9fTFRPX0VYVCAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKGV4dGVybmFsbHlfdmlzaWJsZSkpCisKK2V4dGVybiB1aW50MzJfdCBibGFja19vcmNhX2NoaXBfdmVyc2lvbjsKKworI2RlZmluZSBDSElQX0lTX0FFICAgICAgICAgICAgICAgICAgICAgIChibGFja19vcmNhX2NoaXBfdmVyc2lvbiA9PSBCTEFDS19PUkNBX0lDX1ZFUlNJT04oQSwgRSkpCisjZGVmaW5lIENISVBfSVNfQkEgICAgICAgICAgICAgICAgICAgICAgKGJsYWNrX29yY2FfY2hpcF92ZXJzaW9uID09IEJMQUNLX09SQ0FfSUNfVkVSU0lPTihCLCBBKSkKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBjaGlwIHZlcnNpb24gb2YgdGhlIHN5c3RlbSwgYXQgcnVudGltZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGJsYWNrX29yY2FfZ2V0X2NoaXBfdmVyc2lvbih2b2lkKQoreworICAgICAgICB1aW50MzJfdCByZXYgPSBDSElQX1ZFUlNJT04tPkNISVBfUkVWSVNJT05fUkVHIC0gJ0EnOworICAgICAgICB1aW50MzJfdCBzdGVwID0gQ0hJUF9WRVJTSU9OLT5DSElQX1RFU1QxX1JFRzsKKworICAgICAgICByZXR1cm4gX0JMQUNLX09SQ0FfSUNfVkVSU0lPTihyZXYsIHN0ZXApOworfQorCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod19jcG1fYXNzZXJ0X3RyaWdnZXJfZ3Bpbyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQXNzZXJ0IGFzIHdhcm5pbmcgbWFjcm8KKyAqCisgKiBcbm90ZSBBY3RpdmUgb25seSB3aGlsZSBpbiBkZXZlbG9wbWVudCBtb2RlCisgKi8KKyNkZWZpbmUgQVNTRVJUX1dBUk5JTkcoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGNwc2lkIGkgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1dET0dfTXNrOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdfY3BtX2Fzc2VydF90cmlnZ2VyX2dwaW8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge30gd2hpbGUoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBBc3NlcnQgYXMgZXJyb3IgbWFjcm8KKyAqCisgKi8KKyNkZWZpbmUgQVNTRVJUX0VSUk9SKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGNwc2lkIGkgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1dET0dfTXNrOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdfY3BtX2Fzc2VydF90cmlnZ2VyX2dwaW8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge30gd2hpbGUoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGNwc2lkIGkgIiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCAiIGJrcHQgMiAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBBc3NlcnQgYXMgd2FybmluZyBtYWNybyB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RpbGwgdW5pbml0aWFsaXplZAorICoKKyAqIFxub3RlIEFjdGl2ZSBvbmx5IHdoaWxlIGluIGRldmVsb3BtZW50IG1vZGUuIFRoZSBTVyBjdXJzb3IgaXMgbm90IGFjdGl2YXRlZC4KKyAqLworI2RlZmluZSBBU1NFUlRfV0FSTklOR19VTklOSVQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBERVZFTE9QTUVOVF9NT0RFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICIgY3BzaWQgaSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJFRy0+U0VUX0ZSRUVaRV9SRUcgPSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0RPR19Nc2s7ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7fSB3aGlsZSgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKy8qKgorICogXGJyaWVmIEFzc2VydCBhcyBlcnJvciBtYWNybyB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RpbGwgdW5pbml0aWFsaXplZAorICoKKyAqIFxub3RlIFRoZSBTVyBjdXJzb3IgaXMgbm90IGFjdGl2YXRlZC4KKyAqLworI2RlZmluZSBBU1NFUlRfRVJST1JfVU5JTklUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBERVZFTE9QTUVOVF9NT0RFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICIgY3BzaWQgaSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJFRy0+U0VUX0ZSRUVaRV9SRUcgPSBHUFJFR19TRVRfRlJFRVpFX1JFR19GUlpfV0RPR19Nc2s7ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7fSB3aGlsZSgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICIgY3BzaWQgaSAiICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAoICIgYmtwdCAyICIgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKy8qKgorICogXGJyaWVmIE1hY3JvIHRvIGRpc2FibGUgYWxsIGludGVycnVwdHMKKyAqCisgKiBUaGlzIG1hY3JvIG11c3QgYWx3YXlzIGJlIHVzZWQgd2l0aCBHTE9CQUxfSU5UX1JFU1RPUkUoKS4gRS5nLgorICoKKyAqIFxjb2Rley5jfQorICogR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgKiAgLi4uIGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIC4uLgorICogR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgKiBcZW5kY29kZQorICoKKyAqIFxzYSBHTE9CQUxfSU5UX1JFU1RPUkUKKyAqLworI2RlZmluZSBHTE9CQUxfSU5UX0RJU0FCTEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbF9pcnFfcmVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlICgibXJzICAgJTAsIHByaW1hc2sgIFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3YgICByMSwgJDEgICAgIFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXNyICAgcHJpbWFzaywgcjEgIFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX2xfaXJxX3Jlc3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIERCR19DT05GSUdVUkVfSElHSChDTU5fVElNSU5HX0RFQlVHLCBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTik7CisKKy8qKgorICogXGJyaWVmIE1hY3JvIHRvIHJlc3RvcmUgYWxsIGludGVycnVwdHMKKyAqCisgKiBUaGlzIG1hY3JvIG11c3QgYWx3YXlzIGJlIHVzZWQgYWZ0ZXIgR0xPQkFMX0lOVF9ESVNBQkxFKCkuIEUuZy4KKyAqCisgKiBcY29kZXsuY30KKyAqIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICogIC4uLiBjb2RlIHRvIGJlIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAuLi4KKyAqIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICogXGVuZGNvZGUKKyAqCisgKiBcc2EgR0xPQkFMX0lOVF9ESVNBQkxFCisgKi8KKyNkZWZpbmUgR0xPQkFMX0lOVF9SRVNUT1JFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKF9fbF9pcnFfcmVzdCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgREJHX0NPTkZJR1VSRV9MT1coQ01OX1RJTUlOR19ERUJVRywgQ01OREJHX0NSSVRJQ0FMX1NFQ1RJT04pOyAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCJtc3IgICBwcmltYXNrLCAlMCAgXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoX19sX2lycV9yZXN0KSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIGNvbnRhaW5pbmdvZmZzZXQoYWRkcmVzcywgdHlwZSwgZmllbGQpICgodHlwZSopKCh1aW50OCopKGFkZHJlc3MpLShzaXplX3QpKCYoKHR5cGUqKTApLT5maWVsZCkpKQorCisvKioKKyAqIFxicmllZiBNYWNybyB0aGUgbWluaW11bSBvZiB0d28gdmFsdWVzCisgKgorICogXHBhcmFtW2luXSBhICAgICAgICAgRmlyc3QgdmFsdWUKKyAqIFxwYXJhbVtpbl0gYiAgICAgICAgIFNlY29uZCB2YWx1ZQorICovCisjZGVmaW5lIE1JTihhLCBiKSAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorCisvKioKKyAqIFxicmllZiBNYWNybyB0aGUgbWF4aW11bSBvZiB0d28gdmFsdWVzCisgKgorICogXHBhcmFtW2luXSBhICAgICAgICAgRmlyc3QgdmFsdWUKKyAqIFxwYXJhbVtpbl0gYiAgICAgICAgIFNlY29uZCB2YWx1ZQorICovCisjZGVmaW5lIE1BWChhLCBiKSAgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQorCisvKioKKyAqIFxicmllZiBNYWNybyB0byBzd2FwIHRoZSBieXRlcyBvZiBhIDE2LWJpdCB2YXJpYWJsZQorICoKKyAqIFxwYXJhbVtpbl0gYSAgICAgICAgIFRoZSAxNi1iaXQgdmFyaWFibGUKKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIFNXQVAxNihhKSBfX2J1aWx0aW5fYnN3YXAxNihhKQorI2Vsc2UKKyNkZWZpbmUgU1dBUDE2KGEpICgoYTw8OCkgfCAoYT4+OCkpCisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdG8gc3dhcCB0aGUgYnl0ZXMgb2YgYSAzMi1iaXQgdmFyaWFibGUKKyAqCisgKiBccGFyYW1baW5dIGEgICAgICAgICBUaGUgMzItYml0IHZhcmlhYmxlCisgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBTV0FQMzIoYSkgX19idWlsdGluX2Jzd2FwMzIoYSkKKyNlbHNlCisjZGVmaW5lIFNXQVAzMihhKSAoKGE+PjI0ICYgMHhmZikgfCAoYT4+OCAmIDB4ZmYwMCkgfCAoYTw8OCAmIDB4ZmYwMDAwKSB8IChhPDwyNCAmIDB4ZmYwMDAwMDApKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBERVBSRUNBVEVEIF9fYXR0cmlidXRlX18gKChkZXByZWNhdGVkKSkKKyNlbHNlCisjd2FybmluZyBEZXByZWNhdGVkIG1hY3JvIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIHRoaXMgY29tcGlsZXIKKyNkZWZpbmUgREVQUkVDQVRFRAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBERVBSRUNBVEVEX01TRyhtc2cpIF9fYXR0cmlidXRlX18gKChkZXByZWNhdGVkKG1zZykpKQorI2Vsc2UKKyN3YXJuaW5nIERlcHJlY2F0ZWQgbWFjcm8gbXVzdCBiZSBpbXBsZW1lbnRlZCBmb3IgdGhpcyBjb21waWxlcgorI2RlZmluZSBERVBSRUNBVEVEX01TRyhtc2cpCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBleGlzdCBpbiBST00gY29kZSAqLwordm9pZCBfX2FlYWJpX21lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKK3ZvaWQgX19hZWFiaV9tZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOwordm9pZCBfX2FlYWJpX21lbXNldCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpOworCisvKioKKyAqIFxicmllZiBPcHRpbWl6ZWQgbWVtY3B5CisgKi8KKyNkZWZpbmUgT1BUX01FTUNQWSAgICAgIF9fYWVhYmlfbWVtY3B5CisKKy8qKgorICogXGJyaWVmIE9wdGltaXplZCBtZW1tb3ZlCisgKi8KKyNkZWZpbmUgT1BUX01FTU1PVkUgICAgIF9fYWVhYmlfbWVtbW92ZQorCisvKioKKyAqIFxicmllZiBPcHRpbWl6ZWQgbWVtc2V0CisgKi8KKyNkZWZpbmUgT1BUX01FTVNFVChzLCBjLCBuKSAgICAgIF9fYWVhYmlfbWVtc2V0KHMsIG4sIGMpCisKKy8qKgorICogXGJyaWVmIEFjY2VzcyByZWdpc3RlciBmaWVsZCBtYXNrLgorICoKKyAqIFJldHVybnMgYSByZWdpc3RlciBmaWVsZCBtYXNrIChhaW1lZCB0byBiZSB1c2VkIHdpdGggbG9jYWwgdmFyaWFibGVzKS4KKyAqIGUuZy4KKyAqIFxjb2RlCisgKiB1aW50MTZfdCB0bXA7CisgKgorICogdG1wID0gQ1JHX1RPUC0+U1lTX1NUQVRfUkVHOworICoKKyAqIGlmICh0bXAgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgWFRBTDE2X1RSSU1fUkVBRFkpKSB7CisgKiAuLi4KKyAqIFxlbmRjb2RlCisgKi8KKyNkZWZpbmUgUkVHX01TSyhiYXNlLCByZWcsIGZpZWxkKSBcCisgICAgICAgIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX01zaykKKworLyoqCisgKiBcYnJpZWYgQWNjZXNzIHJlZ2lzdGVyIGZpZWxkIHBvc2l0aW9uLgorICoKKyAqIFJldHVybnMgYSByZWdpc3RlciBmaWVsZCBwb3NpdGlvbiAoYWltZWQgdG8gYmUgdXNlZCB3aXRoIGxvY2FsIHZhcmlhYmxlcykuCisgKi8KKyNkZWZpbmUgUkVHX1BPUyhiYXNlLCByZWcsIGZpZWxkKSBcCisgICAgICAgIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX1BvcykKKworLyoqCisgKiBcYnJpZWYgQWNjZXNzIHJlZ2lzdGVyIGZpZWxkIHZhbHVlLgorICoKKyAqIFJldHVybnMgYSByZWdpc3RlciBmaWVsZCB2YWx1ZSAoYWltZWQgdG8gYmUgdXNlZCB3aXRoIGxvY2FsIHZhcmlhYmxlcykuCisgKiBlLmcuCisgKiBcY29kZQorICogdWludDE2X3QgdG1wOworICogaW50IGNvdW50ZXI7CisgKiB0bXAgPSBDUkdfVE9QLT5UUklNX0NUUkxfUkVHOworICogY291bnRlciA9IFJFR19HRVRfRklFTEQoQ1JHX1RPUCwgVFJJTV9DVFJMX1JFRywgWFRBTF9DT1VOVF9OLCB0bXApOworICogLi4uCisgKiBcZW5kY29kZQorICovCisjZGVmaW5lIFJFR19HRVRfRklFTEQoYmFzZSwgcmVnLCBmaWVsZCwgdmFyKSBcCisgICAgICAgICgodmFyICYgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkgPj4gXAorICAgICAgICAgICAgICAgIChiYXNlICMjIF8gIyMgcmVnICMjIF8gIyMgZmllbGQgIyMgX1BvcykpCisKKy8qKgorICogXGJyaWVmIFNldCByZWdpc3RlciBmaWVsZCB2YWx1ZS4KKyAqCisgKiBTZXRzIGEgcmVnaXN0ZXIgZmllbGQgdmFsdWUgKGFpbWVkIHRvIGJlIHVzZWQgd2l0aCBsb2NhbCB2YXJpYWJsZXMpLgorICogZS5nLgorICogXGNvZGUKKyAqIHVpbnQxNl90IHRtcDsKKyAqCisgKiB0bXAgPSBDUkdfVE9QLT5UUklNX0NUUkxfUkVHOworICogUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBUUklNX0NUUkxfUkVHLCBYVEFMX0NPVU5UX04sIHRtcCwgMTApOworICogUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBUUklNX0NUUkxfUkVHLCBYVEFMX1RSSU1fU0VMRUNULCB0bXAsIDIpOworICogQ1JHX1RPUC0+VFJJTV9DVFJMX1JFRyA9IHRtcDsKKyAqIC4uLgorICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfU0VUX0ZJRUxEKGJhc2UsIHJlZywgZmllbGQsIHZhciwgdmFsKSBcCisgICAgICAgIHZhciA9ICgodmFyICYgfigoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Nc2spKSkgfCBcCisgICAgICAgICAgICAgICAgKCgodmFsKSA8PCAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Qb3MpKSAmIFwKKyAgICAgICAgICAgICAgICAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Nc2spKSkKKworLyoqCisgKiBcYnJpZWYgQ2xlYXIgcmVnaXN0ZXIgZmllbGQgdmFsdWUuCisgKgorICogQ2xlYXJzIGEgcmVnaXN0ZXIgZmllbGQgdmFsdWUgKGFpbWVkIHRvIGJlIHVzZWQgd2l0aCBsb2NhbCB2YXJpYWJsZXMpLgorICogZS5nLgorICogXGNvZGUKKyAqIHVpbnQxNl90IHRtcDsKKyAqCisgKiB0bXAgPSBDUkdfVE9QLT5UUklNX0NUUkxfUkVHOworICogUkVHX0NMUl9GSUVMRChDUkdfVE9QLCBUUklNX0NUUkxfUkVHLCBYVEFMX0NPVU5UX04sIHRtcCk7CisgKiBSRUdfQ0xSX0ZJRUxEKENSR19UT1AsIFRSSU1fQ1RSTF9SRUcsIFhUQUxfVFJJTV9TRUxFQ1QsIHRtcCk7CisgKiBDUkdfVE9QLT5UUklNX0NUUkxfUkVHID0gdG1wOworICogLi4uCisgKiBcZW5kY29kZQorICovCisjZGVmaW5lIFJFR19DTFJfRklFTEQoYmFzZSwgcmVnLCBmaWVsZCwgdmFyKSBcCisgICAgICAgIHZhciAmPSB+KGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKQorCisKKy8qKgorICogXGJyaWVmIFJldHVybiB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciBmaWVsZC4KKyAqCisgKiBlLmcuCisgKiBcY29kZQorICogdWludDE2X3QgdmFsOworICoKKyAqIHZhbCA9IFJFR19HRVRGKENSR19UT1AsIFRSSU1fQ1RSTF9SRUcsIFhUQUxfQ09VTlRfTik7CisgKiAuLi4KKyAqIFxlbmRjb2RlCisgKi8KKyNkZWZpbmUgUkVHX0dFVEYoYmFzZSwgcmVnLCBmaWVsZCkgXAorICAgICAgICAoKChiYXNlLT5yZWcpICYgKGJhc2UjI18jI3JlZyMjXyMjZmllbGQjI19Nc2spKSA+PiAoYmFzZSMjXyMjcmVnIyNfIyNmaWVsZCMjX1BvcykpCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciBmaWVsZC4KKyAqCisgKiBlLmcuCisgKiBcY29kZQorICoKKyAqIFJFR19TRVRGKENSR19UT1AsIFRSSU1fQ1RSTF9SRUcsIFhUQUxfQ09VTlRfTiwgbmV3X3ZhbHVlKTsKKyAqIC4uLgorICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfU0VURihiYXNlLCByZWcsIGZpZWxkLCBuZXdfdmFsKSBcCisgICAgICAgICAgICAgICAgYmFzZS0+cmVnID0gKChiYXNlLT5yZWcgJiB+KGJhc2UjI18jI3JlZyMjXyMjZmllbGQjI19Nc2spKSB8IFwKKyAgICAgICAgICAgICAgICAoKGJhc2UjI18jI3JlZyMjXyMjZmllbGQjI19Nc2spICYgKChuZXdfdmFsKSA8PCAoYmFzZSMjXyMjcmVnIyNfIyNmaWVsZCMjX1BvcykpKSkKKworLyoqCisgKiBcYnJpZWYgU2V0IGEgYml0IG9mIGEgcmVnaXN0ZXIuCisgKgorICogZS5nLgorICogXGNvZGUKKyAqCisgKiBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMV9FTkFCTEUpOworICogLi4uCisgKiBcZW5kY29kZQorICovCisjZGVmaW5lIFJFR19TRVRfQklUKGJhc2UsIHJlZywgZmllbGQpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgYmFzZS0+cmVnIHw9ICgxIDw8IChiYXNlIyNfIyNyZWcjI18jI2ZpZWxkIyNfUG9zKSk7IFwKKyAgICAgICAgIH0gd2hpbGUgKDApCisKKy8qKgorICogXGJyaWVmIENsZWFyIGEgYml0IG9mIGEgcmVnaXN0ZXIuCisgKgorICogZS5nLgorICogXGNvZGUKKyAqCisgKiBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMV9FTkFCTEUpOworICogLi4uCisgKiBcZW5kY29kZQorICovCisjZGVmaW5lIFJFR19DTFJfQklUKGJhc2UsIHJlZywgZmllbGQpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgYmFzZS0+cmVnICY9IH4oYmFzZSMjXyMjcmVnIyNfIyNmaWVsZCMjX01zayk7IFwKKyAgICAgICAgIH0gd2hpbGUgKDApCisKKy8qKgorICogXGJyaWVmIFNldHMgcmVnaXN0ZXIgYml0cywgaW5kaWNhdGVkIGJ5IHRoZSBtYXNrLCB0byBhIHZhbHVlLgorICoKKyAqIGUuZy4KKyAqIFxjb2RlCisgKiBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl81X1JFRywgMHhGRjAwLCAweDE4MTgpOworICogXGVuZGNvZGUKKyAqLworI2RlZmluZSBSRUdfU0VUX01BU0tFRChiYXNlLCByZWcsIG1hc2ssIHZhbHVlKSBcCisgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGJhc2UtPnJlZyA9IChiYXNlLT5yZWcgJiB+KG1hc2spKSB8ICgodmFsdWUpICYgKG1hc2spKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisvKioKKyAqIFxicmllZiBTZXRzIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIGJpdHMsIGluZGljYXRlZCBieSB0aGUgZmllbGQsIHRvIGEgdmFsdWUgdi4KKyAqLworI2RlZmluZSBCSVRTMTYoYmFzZSwgcmVnLCBmaWVsZCwgdikgXAorICAgICAgICAoKHVpbnQxNikgKCgodWludDE2KSAodikgPDwgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfUG9zKSkgJiBcCisgICAgICAgICAgICAgICAgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfTXNrKSkpCisKKy8qKgorICogXGJyaWVmIFNldHMgMzItYml0IHdpZGUgcmVnaXN0ZXIgYml0cywgaW5kaWNhdGVkIGJ5IHRoZSBmaWVsZCwgdG8gYSB2YWx1ZSB2LgorICovCisjZGVmaW5lIEJJVFMzMihiYXNlLCByZWcsIGZpZWxkLCB2KSBcCisgICAgICAgICgodWludDMyKSAoKCh1aW50MzIpICh2KSA8PCAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Qb3MpKSAmIFwKKyAgICAgICAgICAgICAgICAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Nc2spKSkKKworLyoqCisgKiBcYnJpZWYgUmVhZHMgMTYtYml0IHdpZGUgcmVnaXN0ZXIgYml0cywgaW5kaWNhdGVkIGJ5IHRoZSBmaWVsZCwgdG8gYSB2YXJpYWJsZSB2LgorICovCisjZGVmaW5lIEdFVEJJVFMxNihiYXNlLCByZWcsIHYsIGZpZWxkKSBcCisgICAgICAgICgodWludDE2KSAoKCh1aW50MTYpICh2KSkgJiAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Nc2spKSA+PiBcCisgICAgICAgICAgICAgICAgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgUmVhZHMgMzItYml0IHdpZGUgcmVnaXN0ZXIgYml0cywgaW5kaWNhdGVkIGJ5IHRoZSBmaWVsZCwgdG8gYSB2YXJpYWJsZSB2LgorICovCisjZGVmaW5lIEdFVEJJVFMzMihiYXNlLCByZWcsIHYsIGZpZWxkKSBcCisgICAgICAgICgodWludDMyKSAoKCh1aW50MzIpICh2KSkgJiAoYmFzZSAjIyBfICMjIHJlZyAjIyBfICMjIGZpZWxkICMjIF9Nc2spKSA+PiBcCisgICAgICAgICAgICAgICAgKGJhc2UgIyMgXyAjIyByZWcgIyMgXyAjIyBmaWVsZCAjIyBfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgTWFjcm8gdG8gZW5hYmxlIHRoZSBkZWJ1Z2dlcgorICoKKyAqLworI2RlZmluZSBFTkFCTEVfREVCVUdHRVIgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIERFQlVHR0VSX0VOQUJMRSk7IFwKKyAgICAgICAgfSB3aGlsZSgwKQorCisvKioKKyAqIFxicmllZiBNYWNybyB0byBkaXNhYmxlIHRoZSBkZWJ1Z2dlcgorICoKKyAqLworI2RlZmluZSBESVNBQkxFX0RFQlVHR0VSIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBERUJVR0dFUl9FTkFCTEUpOyBcCisgICAgICAgIH0gd2hpbGUoMCkKKworCisvKioKKyAqIFxicmllZiBNYWNybyB0byBjYXVzZSBhIHNvZnR3YXJlIHJlc2V0CisgKgorICovCisjZGVmaW5lIFNXUkVTRVQgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0JJVChHUFJFRywgREVCVUdfUkVHLCBTV19SRVNFVCk7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBCSVQwICAgICAgICAweDAxCisjZGVmaW5lIEJJVDEgICAgICAgIDB4MDIKKyNkZWZpbmUgQklUMiAgICAgICAgMHgwNAorI2RlZmluZSBCSVQzICAgICAgICAweDA4CisjZGVmaW5lIEJJVDQgICAgICAgIDB4MTAKKyNkZWZpbmUgQklUNSAgICAgICAgMHgyMAorI2RlZmluZSBCSVQ2ICAgICAgICAweDQwCisjZGVmaW5lIEJJVDcgICAgICAgIDB4ODAKKworI2RlZmluZSBCSVQ4ICAgICAgMHgwMTAwCisjZGVmaW5lIEJJVDkgICAgICAweDAyMDAKKyNkZWZpbmUgQklUMTAgICAgIDB4MDQwMAorI2RlZmluZSBCSVQxMSAgICAgMHgwODAwCisjZGVmaW5lIEJJVDEyICAgICAweDEwMDAKKyNkZWZpbmUgQklUMTMgICAgIDB4MjAwMAorI2RlZmluZSBCSVQxNCAgICAgMHg0MDAwCisjZGVmaW5lIEJJVDE1ICAgICAweDgwMDAKKworI2RlZmluZSBCSVQxNiAweDAwMDEwMDAwCisjZGVmaW5lIEJJVDE3IDB4MDAwMjAwMDAKKyNkZWZpbmUgQklUMTggMHgwMDA0MDAwMAorI2RlZmluZSBCSVQxOSAweDAwMDgwMDAwCisjZGVmaW5lIEJJVDIwIDB4MDAxMDAwMDAKKyNkZWZpbmUgQklUMjEgMHgwMDIwMDAwMAorI2RlZmluZSBCSVQyMiAweDAwNDAwMDAwCisjZGVmaW5lIEJJVDIzIDB4MDA4MDAwMDAKKworI2RlZmluZSBCSVQyNCAweDAxMDAwMDAwCisjZGVmaW5lIEJJVDI1IDB4MDIwMDAwMDAKKyNkZWZpbmUgQklUMjYgMHgwNDAwMDAwMAorI2RlZmluZSBCSVQyNyAweDA4MDAwMDAwCisjZGVmaW5lIEJJVDI4IDB4MTAwMDAwMDAKKyNkZWZpbmUgQklUMjkgMHgyMDAwMDAwMAorI2RlZmluZSBCSVQzMCAweDQwMDAwMDAwCisjZGVmaW5lIEJJVDMxIDB4ODAwMDAwMDAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgdWludDg7ICAgLy8gIDggYml0cwordHlwZWRlZiBjaGFyICAgICAgICAgICAgICAgaW50ODsgICAgLy8gIDggYml0cwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgdWludDE2OyAgLy8gMTYgYml0cwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgICAgaW50MTY7ICAgLy8gMTYgYml0cwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgdWludDMyOyAgLy8gMzIgYml0cwordHlwZWRlZiBsb25nICAgICAgICAgICAgICAgaW50MzI7ICAgLy8gMzIgYml0cwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0OyAgLy8gNjQgYml0cwordHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgaW50NjQ7ICAgLy8gNjQgYml0cworCisvKiBTZWUgYWxzbyAiRGF0YSBUeXBlcyIgb24gcGFnLiAyMSBvZiB0aGUgKERvdWxvcykgQ29ydGV4LU0wIC8gU29DIDEuMCB0cmFpbmluZyBkb2N1bWVudGF0aW9uLiAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgQllURTsgICAgIC8vICA4IGJpdHMgPSBCeXRlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICBIV09SRDsgICAgLy8gMTYgYml0cyA9IEhhbGZ3b3JkCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBXT1JEOyAgICAgLy8gMzIgYml0cyA9IFdvcmQKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgICAgIERXT1JEOyAgICAvLyA2NCBiaXRzID0gRG91Ymxld29yZAorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19TREtfREVGU19IX18gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zdW90YS5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zdW90YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NjJmNDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3N1b3RhLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgU1lTVEVNCisgKiBceworICogXGFkZHRvZ3JvdXAgU1VPVEEKKyAqIAorICogXGJyaWVmIFNVT1RBIHN0cnVjdHVyZSBkZWZpbml0aW9ucworICoKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBzdW90YS5oCisgKgorICogQGJyaWVmIFNVT1RBIHN0cnVjdHVyZSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgU1VPVEFfSF8KKyNkZWZpbmUgU1VPVEFfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIFNVT1RBX1ZFUlNJT05fMV8xICAgICAgIDExCisjZGVmaW5lIFNVT1RBX1ZFUlNJT05fMV8yICAgICAgIDEyCisjZGVmaW5lIFNVT1RBX1ZFUlNJT05fMV8zICAgICAgIDEzCisKKyNpZm5kZWYgU1VPVEFfVkVSU0lPTgorI2RlZmluZSBTVU9UQV9WRVJTSU9OICAgICAgICAgICBTVU9UQV9WRVJTSU9OXzFfMworI2VuZGlmCisKKyNpZiBTVU9UQV9QU00gJiYgKFNVT1RBX1ZFUlNJT04gPCBTVU9UQV9WRVJTSU9OXzFfMikKKyMgICAgICAgZXJyb3IgIlNVT1RBX1BTTSBpcyBvbmx5IGFwcGxpY2FibGUgdG8gU1VPVEFfVkVSU0lPTiA+PSAxLjIiCisjZW5kaWYKKworLyoqCisgKiBcc3RydWN0IHN1b3RhXzFfMV9wcm9kdWN0X2hlYWRlcl90OworICoKKyAqIFxicmllZiBTVU9UQSAxLjEgcHJvZHVjdCBoZWFkZXIgYXMgZGVmaW5lZCBieSBEaWFsb2cgU1VPVEEgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBcbm90ZSB0aGUgc2FtZSBoZWFkZXIgaXMgdXNlZCBmb3IgYW55IFNVT1RBIHZlcnNpb24gbmV3ZXIgdGhhbiAxLjEKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdWludDhfdCBzaWduYXR1cmVbMl07CisgICAgICAgIHVpbnQxNl90IGZsYWdzOworICAgICAgICB1aW50MzJfdCBjdXJyZW50X2ltYWdlX2xvY2F0aW9uOworICAgICAgICB1aW50MzJfdCB1cGRhdGVfaW1hZ2VfbG9jYXRpb247CisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHN1b3RhXzFfMV9wcm9kdWN0X2hlYWRlcl90OworCisjZGVmaW5lIFNVT1RBXzFfMV9QUk9EVUNUX0hFQURFUl9TSUdOQVRVUkVfQjEgICAweDcwCisjZGVmaW5lIFNVT1RBXzFfMV9QUk9EVUNUX0hFQURFUl9TSUdOQVRVUkVfQjIgICAweDYyCisKKy8qKgorICogXHN0cnVjdCBzdW90YV8xXzFfaW1hZ2VfaGVhZGVyX3QKKyAqCisgKiBcYnJpZWYgU1VPVEEgMS4xIGltYWdlIGhlYWRlciBhcyBkZWZpbmVkIGJ5IERpYWxvZyBTVU9UQSBzcGVjaWZpY2F0aW9uLgorICoKKyAqIFxub3RlIHRoZSBzYW1lIGhlYWRlciBpcyB1c2VkIGZvciBhbnkgU1VPVEEgdmVyc2lvbiBuZXdlciB0aGFuIDEuMQorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IHNpZ25hdHVyZVsyXTsKKyAgICAgICAgdWludDE2X3QgZmxhZ3M7CisgICAgICAgIHVpbnQzMl90IGNvZGVfc2l6ZTsKKyAgICAgICAgdWludDMyX3QgY3JjOworICAgICAgICB1aW50OF90IHZlcnNpb25bMTZdOworICAgICAgICB1aW50MzJfdCB0aW1lc3RhbXA7CisgICAgICAgIHVpbnQzMl90IGV4ZWNfbG9jYXRpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHN1b3RhXzFfMV9pbWFnZV9oZWFkZXJfdDsKKworI2RlZmluZSBTVU9UQV8xXzFfSU1BR0VfSEVBREVSX1NJR05BVFVSRV9CMSAgICAgMHg3MAorI2RlZmluZSBTVU9UQV8xXzFfSU1BR0VfSEVBREVSX1NJR05BVFVSRV9CMiAgICAgMHg2MQorCisjZGVmaW5lIFNVT1RBXzFfMV9JTUFHRV9GTEFHX0ZPUkNFX0NSQyAgICAgICAgICAweDAxCisjZGVmaW5lIFNVT1RBXzFfMV9JTUFHRV9GTEFHX1ZBTElEICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFNVT1RBXzFfMV9JTUFHRV9GTEFHX1JFVFJZMSAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFNVT1RBXzFfMV9JTUFHRV9GTEFHX1JFVFJZMiAgICAgICAgICAgICAweDA4CisKK3R5cGVkZWYgc3VvdGFfMV8xX2ltYWdlX2hlYWRlcl90IHN1b3RhX2ltYWdlX2hlYWRlcl90OworCisjZW5kaWYgLyogU1VPVEFfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc3lzdGVtX0FSTUNNMC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvaW5jbHVkZS9zeXN0ZW1fQVJNQ00wLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWI4ZDExYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc3lzdGVtX0FSTUNNMC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzeXN0ZW1fQVJNQ00wLmgKKyAqIEBicmllZiAgICBDTVNJUyBEZXZpY2UgU3lzdGVtIEhlYWRlciBGaWxlIGZvcgorICogICAgICAgICAgIEFSTUNNMCBEZXZpY2UgU2VyaWVzCisgKiBAdmVyc2lvbiAgVjIuMDAKKyAqIEBkYXRlICAgICAxOC4gQXVndXN0IDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBTWVNURU1fQVJNQ00wX0gKKyNkZWZpbmUgU1lTVEVNX0FSTUNNMF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIHVpbnQzMl90IFN5c3RlbUNvcmVDbG9jazsgICAgIC8qITwgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeSAoQ29yZSBDbG9jaykgICovCisKKworLyoqIEBicmllZiBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4KKworICAgIEluaXRpYWxpemUgdGhlIFN5c3RlbSBhbmQgdXBkYXRlIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUluaXQgKHZvaWQpOworCisKKy8qKiBcYnJpZWYgIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuCisKKyAgICBVcGRhdGVzIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgd2l0aCBjdXJyZW50IGNvcmUgQ2xvY2sKKyAgICByZXRyaWV2ZWQgZnJvbSBjcHUgcmVnaXN0ZXJzLgorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1lTVEVNX0FSTUNNMF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3N5c3RlbV9EQTE0NjgwLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9pbmNsdWRlL3N5c3RlbV9EQTE0NjgwLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzViODJiMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL2luY2x1ZGUvc3lzdGVtX0RBMTQ2ODAuaApAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3lzdGVtX0RBMTQ2ODAuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NMCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUgZm9yCisgKiAgICAgICAgICAgRGV2aWNlIERBMTQ2ODAKKyAqIEB2ZXJzaW9uICBWMy4xMAorICogQGRhdGUgICAgIDIzLiBOb3ZlbWJlciAyMDEyCisgKgorICogQG5vdGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDEyIEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBTWVNURU1fREExNDY4MF9IICAgCisjZGVmaW5lIFNZU1RFTV9EQTE0NjgwX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCitleHRlcm4gdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrOyAgICAgLyohPCBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IChDb3JlIENsb2NrKSAgKi8KKworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHN5c3RlbQorICoKKyAqIEByZXR1cm4gbm9uZQorICoKKyAqIEBicmllZiAgU2V0dXAgdGhlIG1pY3JvY29udHJvbGxlciBzeXN0ZW0uCisgKiAgICAgICAgIEluaXRpYWxpemUgdGhlIFN5c3RlbSBhbmQgdXBkYXRlIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUluaXQgKHZvaWQpOworCisvKioKKyAqIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUKKyAqCisgKiBAcmV0dXJuIG5vbmUKKyAqCisgKiBAYnJpZWYgIFVwZGF0ZXMgdGhlIFN5c3RlbUNvcmVDbG9jayB3aXRoIGN1cnJlbnQgY29yZSBDbG9jaworICogICAgICAgICByZXRyaWV2ZWQgZnJvbSBjcHUgcmVnaXN0ZXJzLgorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpOworCisKKy8qKgorICogXGJyaWVmIENvbnZlcnQgYSBDUFUgYWRkcmVzcyB0byBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqCisgKiBUbyBjYWxjdWxhdGUgdGhlIHBoeXNpY2FsIGFkZHJlc3MsIHRoZSBjdXJyZW50IHJlbWFwcGluZyAoU1lTX0NUUkxfUkVHLlJFTUFQX0FEUjApCisgKiBpcyB1c2VkLgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHIgYWRkcmVzcyBzZWVuIGJ5IENQVQorICoKKyAqIFxyZXR1cm4gcGh5c2ljYWwgYWRkcmVzcyAoZm9yIERNQSwgQUVTL0hBU0ggZXRjLikgLS0gY2FuIGJlIHNhbWUgb3IgZGlmZmVyZW50IGFzIGFkZHIKKyAqCisgKi8KK2V4dGVybiB1aW50MzJfdCBibGFja19vcmNhX3BoeV9hZGRyKHVpbnQzMl90IGFkZHIpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTWVNURU1fREExNDY4MF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX2F1dG9tb2RlLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvaW5jbHVkZS9xc3BpX2F1dG9tb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5MDg5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfYXV0b21vZGUuaApAQCAtMCwwICsxLDMxNyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBNRU1PUlkKKyAqCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBxc3BpX2F1dG9tb2RlLmgKKyAqCisgKiBAYnJpZWYgQWNjZXNzIFFTUEkgZmxhc2ggd2hlbiBydW5uaW5nIGluIGF1dG8gbW9kZQorICoKKyAqIFRoZSBRU1BJIGNvbnRyb2xsZXIgYWxsb3dzIHRvIGV4ZWN1dGUgY29kZSBkaXJlY3RseSBmcm9tIFFTUEkgZmxhc2guCisgKiBXaGVuIGNvZGUgaXMgZXhlY3V0aW5nIGZyb20gZmxhc2gsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXByb2dyYW0gdGhlIGZsYXNoLgorICogVG8gYmUgYWJsZSB0byBtb2RpZnkgdGhlIGZsYXNoIHdoZW4gaXQgaXMgdXNlZCBmb3IgY29kZSBleGVjdXRpb24sIGl0IG11c3QgbWUgYXNzdXJlZCB0aGF0CisgKiBmb3IgdGhlIHRpbWUgbmVlZGVkIHRvIGVyYXNlL3dyaXRlLCBubyBjb2RlIGlzIHJ1bm5pbmcgZnJvbSBmbGFzaC4KKyAqIFRvIGFjaGlldmUgdGhpcywgdGhlIGNvZGUgaW4gdGhpcyBtb2R1bGUgaXMgZXhlY3V0ZWQgZnJvbSB0aGUgUkFNLgorICogQ29kZSBpbiB0aGlzIG1vZHVsZSB3aWxsIG5vdCBhY2Nlc3MgYW55IG90aGVyIGZ1bmN0aW9ucyBvciBjb25zdGFudCB2YXJpYWJsZXMgdGhhdCBjb3VsZCByZXNpZGUKKyAqIGluIGZsYXNoLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBRU1BJX0FVVE9NT0RFX0hfCisjZGVmaW5lIFFTUElfQVVUT01PREVfSF8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKyNpbmNsdWRlIDxod19xc3BpLmg+CisjaW5jbHVkZSAiaHdfY3BtLmgiCisvKgorICogRGVidWcgb3B0aW9ucworICovCisjaWYgX19EQkdfUVNQSV9FTkFCTEVECisjZGVmaW5lIF9fREJHX1FTUElfVk9MQVRJTEVfXyAgICAgICAgICAgdm9sYXRpbGUKKyNwcmFnbWEgbWVzc2FnZSAiQXV0b21vZGU6IERlYnVnZ2luZyBpcyBvbiEiCisjZWxzZQorI2RlZmluZSBfX0RCR19RU1BJX1ZPTEFUSUxFX18KKyNlbmRpZgorCisKKy8qCisgKiBEZWZpbmVzIChnZW5lcmljKQorICovCisKKy8qIE1hY3JvcyB0byBwdXQgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb3BpZWQgdG8gcmFtIGluIG9uZSBzZWN0aW9uIChyZXRhaW5lZCkgKi8KKyNkZWZpbmUgUVNQSV9TRUNUSU9OICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uICgidGV4dF9yZXRhaW5lZCIpLCBvcHRpbWl6ZSAoIm5vLXRyZWUtc3dpdGNoLWNvbnZlcnNpb24iKSkpCisjZGVmaW5lIFFTUElfU0VDVElPTl9OT19JTkxJTkUgICAgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCJ0ZXh0X3JldGFpbmVkIikpKSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorCit0eXBlZGVmIHN0cnVjdCBxc3BpX3Vjb2RlX3MgeworICAgICAgIGNvbnN0IHVpbnQzMl90ICpjb2RlOworICAgICAgIHVpbnQ4X3Qgc2l6ZTsKK30gcXNwaV91Y29kZV90OworCisvKgorICogRmxhc2ggc3BlY2lmaWMgZGVmaW5lcworICovCisKKy8qKgorICogXGJyaWVmIFNVUyBiaXQgZGVsYXkgYWZ0ZXIgU1VTUEVORCBjb21tYW5kIChpbiDOvHNlYykKKyAqCisgKi8KKyNkZWZpbmUgRkxBU0hfU1VTX0RFTEFZICAgICAgICAgICAgICAgICAoMjApCisKKworLyoqCisgKiBcYnJpZWYgR2V0IHNpemUgb2YgUkFNIGJ1ZmZlciBuZWVkZWQgZm9yIGNvZGUgdG8gbW9kaWZ5IFFTUEkgZmxhc2guCisgKgorICogQ2FsbGVkIG11c3QgYWxsb2NhdGUgYnVmZmVyIGF0IGxlYXN0IG9mIHRoaXMgc2l6ZSBhbmQgcGFzcyBpdCBxc3BpX3NldF9jb2RlX2J1ZmZlcigpIHRvIGFsbG93CisgKiBmbGFzaCBtb2RpZmljYXRpb24uCisgKgorICogXHJldHVybiBzaXplIG9mIGJ1ZmZlciBuZWVkZWQKKyAqCisgKi8KK0RFUFJFQ0FURUQKK3VpbnQzMl90IHFzcGlfYXV0b21vZGVfZ2V0X2NvZGVfYnVmZmVyX3NpemUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldCBidWZmZXIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNvZGUgdGhhdCBtb2RpZmllcyBmbGFzaC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBidWZmZXIgYWxsb2NhdGVkIGZvciBmbGFzaCBtYW5pcHVsYXRpb24gY29kZS4KKyAqIFNpemUgb2YgdGhpcyBidWZmZXIgc2hvdWxkIGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHFzcGlfZ2V0X2NvZGVfYnVmZmVyX3NpemUoKS4KKyAqIElmIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIE5VTEwgYWxsIGZ1cnRoZXIgY2FsbHMgdG8gcXNwaV93cml0ZV9mbGFzaF9wYWdlKCkgb3IKKyAqIHFzcGlfZXJhc2VfZmxhc2hfc2VjdG9yKCkgd2lsbCBjcmFzaC4KKyAqIFRvIHByZXNlcnZlIG1lbW9yeSBpdCBpcyBxdWl0ZSB3aXNlIHRvIGFsbG9jYXRlIGJ1ZmZlciBiZWZvcmUgZXJhc2Uvd3JpdGUsIHVwZGF0ZSBmbGFzaCBhbmQKKyAqIHRoZW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggTlVMTCBhbmQgZnJlZSBtZW1vcnkuCisgKgorICogXHBhcmFtIFtpbl0gcmFtIGJ1ZmZlciBmb3IgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgZXJhc2UgYW5kIHdyaXRlLgorICoKKyAqLworREVQUkVDQVRFRF9NU0coIkZ1bmN0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgY2FsbGVkIikKK3ZvaWQgcXNwaV9hdXRvbW9kZV9zZXRfY29kZV9idWZmZXIodm9pZCAqcmFtKTsKKworLyoqCisgKiBcYnJpZWYgV3JpdGUgZmxhc2ggbWVtb3J5CisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gd3JpdGUgdXAgdG8gcGFnZSBzaXplIG9mIGRhdGEgdG8gZmxhc2guCisgKiBJZiBzaXplIGlzIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUsIGZsYXNoIGNhbiB3cmFwIGRhdGEgYW5kIG92ZXJ3cml0ZSBjb250ZW50IG9mIHBhZ2UuCisgKiBJdCdzIHBvc3NpYmxlIHRvIHdyaXRlIGxlc3MgdGhlbiBwYWdlIHNpemUuCisgKiBNZW1vcnkgc2hvdWxkIGJlIGVyYXNlZCBiZWZvcmUuCisgKgorICogXG5vdGU6IERvIG5vdCBwYXNzIGJ1ZiBwb2ludGluZyB0byBRU1BJIG1hcHBlZCBtZW1vcnkuCisgKgorICogXHBhcmFtIFtpbl0gYWRkciBvZmZzZXQgaW4gZmxhc2ggdG8gd3JpdGUgZGF0YSB0bworICogXHBhcmFtIFtpbl0gYnVmIHBvaW50ZXIgdG8gZGF0YSB0byB3cml0ZQorICogXHBhcmFtIFtpbl0gc2l6ZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqCisgKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4KKyAqCisgKi8KK3NpemVfdCBxc3BpX2F1dG9tb2RlX3dyaXRlX2ZsYXNoX3BhZ2UodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqYnVmLCBzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogXGJyaWVmIEVyYXNlIGZsYXNoIHNlY3RvcgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHIgc3RhcnRpbmcgb2Zmc2V0IG9mIHNlY3RvcgorICovCit2b2lkIHFzcGlfYXV0b21vZGVfZXJhc2VfZmxhc2hfc2VjdG9yKHVpbnQzMl90IGFkZHIpOworCisvKioKKyAqIFxicmllZiBFcmFzZSB3aG9sZSBjaGlwCisgKi8KK3ZvaWQgcXNwaV9hdXRvbW9kZV9lcmFzZV9jaGlwKHZvaWQpOworCisvKioKKyAqIFxicmllZiBSZWFkIGZsYXNoIG1lbW9yeQorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHIgc3RhcnRpbmcgb2Zmc2V0CisgKiBccGFyYW0gW291dF0gYnVmIGJ1ZmZlciB0byByZWFkIGRhdGEgdG8KKyAqIFxwYXJhbSBbaW5dIGxlbiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIFxyZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkCisgKi8KK3NpemVfdCBxc3BpX2F1dG9tb2RlX3JlYWQodWludDMyX3QgYWRkciwgdWludDhfdCAqYnVmLCBzaXplX3QgbGVuKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IGFkZHJlc3Mgb2YgZmxhc2gKKyAqCisgKiBccGFyYW0gW2luXSBhZGRyIHN0YXJ0aW5nIG9mZnNldAorICoKKyAqIFxyZXR1cm5zIGFkZHJlc3MgaW4gQ1BVIGFkZHJlc3Mgc3BhY2Ugd2hlcmUgZGF0YSBpcyBsb2NhdGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqcXNwaV9hdXRvbW9kZV9hZGRyKHVpbnQzMl90IGFkZHIpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpxc3BpX2F1dG9tb2RlX2FkZHIodWludDMyX3QgYWRkcikKK3sKKyAgICAgICAgcmV0dXJuIChjb25zdCB2b2lkICopIChNRU1PUllfUVNQSUZfQkFTRSArIGFkZHIpOworfQorCisvKioKKyAqIFxicmllZiBQb3dlciB1cCBmbGFzaAorICovCitRU1BJX1NFQ1RJT04gdm9pZCBxc3BpX2F1dG9tb2RlX2ZsYXNoX3Bvd2VyX3VwKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgUVNQSSBGbGFzaCBpbnRvIHBvd2VyIGRvd24gbW9kZQorICovCitRU1BJX1NFQ1RJT04gdm9pZCBxc3BpX2F1dG9tb2RlX2ZsYXNoX3Bvd2VyX2Rvd24odm9pZCk7CisKKy8qKgorICogXGJyaWVmIEluaXQgUVNQSSBjb250cm9sbGVyCisgKi8KK19fUkVUQUlORURfQ09ERSBib29sIHFzcGlfYXV0b21vZGVfaW5pdCh2b2lkKTsKKworI2lmIChkZ19jb25maWdESVNBQkxFX0JBQ0tHUk9VTkRfRkxBU0hfT1BTID09IDApCisvKioKKyAqIFxicmllZiBDaGVjayBpZiBhIHByb2dyYW0gb3Igc2VjdG9yIGVyYXNlIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcworICoKKyAqIFxyZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBCVVNZIGJpdCBpcyBzZXQgZWxzZSBmYWxzZS4KKyAqCisgKiBcd2FybmluZyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgdmFsdWUgb2YgdGhlIEJVU1kgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgMSBvZiB0aGUgRmxhc2guIEl0CisgKiAgICAgICAgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gY2FsbCB0aGUgZnVuY3Rpb24gaW4gdGhlIHJpZ2h0IGNvbnRleHQuIFRoZQorICogICAgICAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSBib29sIHFzcGlfY2hlY2tfcHJvZ3JhbV9lcmFzZV9pbl9wcm9ncmVzcyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3VzcGVuZCBhIEZsYXNoIHByb2dyYW0gb3IgZXJhc2Ugb3BlcmF0aW9uCisgKgorICogXGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBzdXNwZW5kIGFuIG9uZ29pbmcgcHJvZ3JhbSBvciBlcmFzZSBwcm9jZWR1cmUuIFRoZSBTVVMgYml0IGlzCisgKiAgICAgICAgY2hlY2tlZCBhbmQgdGhlIGFjdHVhbCBzdGF0dXMgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gTm90ZSB0aGF0IHRoZSBwcm9ncmFtIG9yIGVyYXNlCisgKiAgICAgICAgcHJvY2VkdXJlIG1heSBoYXZlIGJlZW4gY29tcGxldGVkIGJlZm9yZSB0aGUgc3VzcGVuZCBjb21tYW5kIGlzIHByb2Nlc3NlZCBieSB0aGUgRmxhc2guIEluCisgKiAgICAgICAgdGhpcyBjYXNlIHRoZSBTVVMgYml0IHdpbGwgYmUgbGVmdCB0byAwLgorICoKKyAqIFxyZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBwcm9jZWR1cmUgaGFzIGJlZW4gc3VzcGVuZGVkLiBGYWxzZSBpZiB0aGUgcHJvY2VkdXJlIHdhcyBub3Qgc3VzcGVuZGVkCisgKiAgICAgICAgc3VjY2Vzc2Z1bGx5IG9yIGhhZCBmaW5pc2hlZCBiZWZvcmUgdGhlIHN1c3BlbmQgY29tbWFuZCB3YXMgcHJvY2Vzc2VkIGJ5IHRoZSBGbGFzaC4KKyAqCisgKiBcd2FybmluZyBBZnRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCB0aGUgUVNQSSBjb250cm9sbGVyIGlzIHNldCB0byBhdXRvIG1vZGUgYW5kIHRoZSBGbGFzaAorICogICAgICAgIGFjY2VzcyB0byBxdWFkIG1vZGUgKGlmIFFVQURfTU9ERSBpcyAxKS4gVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cworICogICAgICAgIGRpc2FibGVkLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIGJvb2wgcXNwaV9jaGVja19hbmRfc3VzcGVuZCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUmVzdW1lIGEgRmxhc2ggcHJvZ3JhbSBvciBzZWN0b3IgZXJhc2Ugb3BlcmF0aW9uCisgKgorICogXHdhcm5pbmcgQWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIFFTUEkgY29udHJvbGxlciBpcyBzZXQgdG8gbWFudWFsIG1vZGUgYW5kIHRoZSBGbGFzaAorICogICAgICAgIGFjY2VzcyB0byBzaW5nbGUgbW9kZS4gVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIHFzcGlfcmVzdW1lKHZvaWQpOworCisvKioKKyAqIFxicmllZiBFcmFzZSBhIHNlY3RvciBvZiB0aGUgRmxhc2ggaW4gbWFudWFsIG1vZGUKKyAqCisgKiBccGFyYW1baW5dIGFkZHIgVGhlIGFkZHJlc3Mgb2YgdGhlIHNlY3RvciB0byBiZSBlcmFzZWQuCisgKgorICogXHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBibG9jayB1bnRpbCB0aGUgRmxhc2ggaGFzIHByb2Nlc3NlZCB0aGUgY29tbWFuZCEgVGhlIFFTUEkKKyAqICAgICAgICBjb250cm9sbGVyIGlzIGxlZnQgdG8gbWFudWFsIG1vZGUgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIG11c3QgYmUKKyAqICAgICAgICBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgZmxhc2hfZXJhc2Vfc2VjdG9yX21hbnVhbF9tb2RlKHVpbnQzMl90IGFkZHIpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtIGRhdGEgaW50byBhIHBhZ2Ugb2YgdGhlIEZsYXNoIGluIG1hbnVhbCBtb2RlCisgKgorICogXHBhcmFtW2luXSBhZGRyIFRoZSBhZGRyZXNzIG9mIHRoZSBGbGFzaCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uIEl0IG1heSBiZSBhbnl3aGVyZSBpbiBhCisgKiAgICAgICAgcGFnZS4KKyAqIFxwYXJhbVtpbl0gYnVmIFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqIFxwYXJhbVtpbl0gbGVuIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBccmV0dXJuIHNpemVfdCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogXHdhcm5pbmcgVGhlIGJvdW5kYXJ5IG9mIHRoZSBwYWdlIHdoZXJlIGFkZHIgYmVsb25ncyB0bywgd2lsbCBub3QgYmUgY3Jvc3NlZCEgVGhlIGNhbGxlciBzaG91bGQKKyAqICAgICAgICBpc3N1ZSBhbm90aGVyIGZsYXNoX3Byb2dyYW1fcGFnZV9tYW51YWxfbW9kZSgpIGNhbGwgaW4gb3JkZXIgdG8gd3JpdGUgdGhlIHJlbWFpbmluZyBkYXRhCisgKiAgICAgICAgdG8gdGhlIG5leHQgcGFnZS4gVGhlIFFTUEkgY29udHJvbGxlciBpcyBsZWZ0IHRvIG1hbnVhbCBtb2RlIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMKKyAqICAgICAgICBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSBzaXplX3QgZmxhc2hfcHJvZ3JhbV9wYWdlX21hbnVhbF9tb2RlKHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGxlbik7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQWN0aXZhdGUgRmxhc2ggY29tbWFuZCBlbnRyeSBtb2RlCisgKgorICogXG5vdGUgQWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIFFTUEkgY29udHJvbGxlciBpcyBzZXQgdG8gbWFudWFsIG1vZGUgYW5kIHRoZSBGbGFzaAorICogICAgICAgIGFjY2VzcyB0byBzaW5nbGUgbW9kZS4KKyAqCisgKiBcd2FybmluZyBUaGUgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBEZWFjdGl2YXRlIEZsYXNoIGNvbW1hbmQgZW50cnkgbW9kZQorICoKKyAqIFxub3RlIEFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sIHRoZSBRU1BJIGNvbnRyb2xsZXIgaXMgc2V0IHRvIGF1dG8gbW9kZSBhbmQgdGhlIEZsYXNoCisgKiAgICAgICAgYWNjZXNzIHRvIHF1YWQgbW9kZSAoaWYgUVVBRF9NT0RFIGlzIDEpLgorICoKKyAqIFx3YXJuaW5nIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBmbGFzaF9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIEZsYXNoIGFuZCBRU1BJIGNvbnRyb2xsZXIgZm9yIHN5c3RlbSBjbG9jayBmcmVxdWVuY3kKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBGbGFzaCBjb25maWd1cmF0aW9uIG9mIHRoZSBRU1BJIGNvbnRyb2xsZXIKKyAqIHRvIHdvcmsgd2l0aCB0aGUgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBkZWZpbmVkIGluIHN5c19jbGsuIER1bW15IGNsb2NrCisgKiBjeWNsZXMgY291bGQgYmUgY2hhbmdlZCBoZXJlIHRvIHN1cHBvcnQgaGlnaGVyIGNsb2NrIGZyZXF1ZW5jaWVzLgorICogUVNQSSBjb250cm9sbGVyIGNsb2NrIGRpdmlkZXIgY291bGQgYWxzbyBiZSBjaGFuZ2VkIGlmIHRoZSBGbGFzaAorICogbWF4aW11bSBmcmVxdWVuY3kgaXMgc21hbGxlciB0aGFuIHRoZSBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5LgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2hhbmdpbmcgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBccGFyYW0gW2luXSBzeXNfY2xrIFN5c3RlbSBjbG9jayBmcmVxdWVuY3kKKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIHFzcGlfYXV0b21vZGVfc3lzX2Nsb2NrX2NmZyhzeXNfY2xrX3Qgc3lzX2Nsayk7CisKKy8qKgorICogXGJyaWVmIEdldCB1Y29kZSByZXF1aXJlZCBmb3Igd2FrZS11cCBzZXF1ZW5jZQorICogXHJldHVybiBxc3BpX3Vjb2RlX3QgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHVjb2RlIGFuZCB1Y29kZSBzaXplCisgKi8KK2NvbnN0IHFzcGlfdWNvZGVfdCAqcXNwaV9hdXRvbW9kZV9nZXRfdWNvZGUodm9pZCk7CisKKyNlbmRpZiAvKiBRU1BJX0FVVE9NT0RFX0hfICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L2luY2x1ZGUvcXNwaV9jb21tb24uaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMTA3OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfY29tbW9uLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgU1lTVEVNCisgKiBceworICogXGFkZHRvZ3JvdXAgTUVNT1JZCisgKgorICogXGJyaWVmIFFTUEkgZmxhc2ggZHJpdmVyIGZyYW1ld29yaworICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgcXNwaV9jb21tb24uaAorICoKKyAqIEBicmllZiBRU1BJIGZsYXNoIGRyaXZlciBjb21tb24gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIF9RU1BJX0NPTU1PTl9IXworI2RlZmluZSBfUVNQSV9DT01NT05fSF8KKworI2luY2x1ZGUgInFzcGlfYXV0b21vZGUuaCIKKworLyoKKyAqIEZsYXNoIENvbW1hbmRzCisgKgorICogTm90ZTogRGVmYXVsdCBjb21tYW5kIGlzc3VpbmcgbW9kZSBpcyBzaW5nbGUgbW9kZSEgSWYgY29tbWFuZHMgc3BlY2lmaWMgdG8gb3RoZXIgbW9kZXMgaGF2ZSB0byBiZQorICogaXNzdWVkIHRoZW4gdGhlIG1vZGUgbXVzdCBiZSBjaGFuZ2VkIQorICovCisjZGVmaW5lIENNRF9XUklURV9TVEFUVVNfUkVHSVNURVIgICAgICAgMHgwMQorI2RlZmluZSBDTURfV1JJVEVfRElTQUJMRSAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSICAgICAgICAweDA1CisjZGVmaW5lIENNRF9XUklURV9FTkFCTEUgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBDTURfU0VDVE9SX0VSQVNFICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQ01EX1FVQURfUEFHRV9QUk9HUkFNICAgICAgICAgICAweDMyCisjZGVmaW5lIENNRF9RVUFEX0lPX1BBR0VfUFJPR1JBTSAgICAgICAgMHgzOAorI2RlZmluZSBDTURfQkxPQ0tfRVJBU0UgICAgICAgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgQ01EX0NISVBfRVJBU0UgICAgICAgICAgICAgICAgICAweEM3CisjZGVmaW5lIENNRF9GQVNUX1JFQURfUVVBRCAgICAgICAgICAgICAgMHhFQgorI2RlZmluZSBDTURfUkVBRF9KRURFQ19JRCAgICAgICAgICAgICAgIDB4OUYKKyNkZWZpbmUgQ01EX0VYSVRfQ09OVElOVU9VU19NT0RFICAgICAgICAweEZGCisjZGVmaW5lIENNRF9SRUxFQVNFX1BPV0VSX0RPV04gICAgICAgICAgMHhBQgorI2RlZmluZSBDTURfRU5URVJfUE9XRVJfRE9XTiAgICAgICAgICAgIDB4QjkKKworI2RlZmluZSBDTURfRkFTVF9SRUFEX1FVQURfNEIgICAgICAgICAgIDB4RUMKKyNkZWZpbmUgQ01EX1NFQ1RPUl9FUkFTRV80QiAgICAgICAgICAgICAweDIxCisjZGVmaW5lIENNRF9RVUFEX1BBR0VfUFJPR1JBTV80QiAgICAgICAgMHgzNAorI2RlZmluZSBDTURfUVVBRF9JT19QQUdFX1BST0dSQU1fNEIgICAgIDB4M0UKKworLyogRXJhc2UvV3JpdGUgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgRkxBU0hfU1RBVFVTX0JVU1lfQklUICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX1NUQVRVU19CVVNZX01BU0sgICAgICAgICAgKDEgPDwgRkxBU0hfU1RBVFVTX0JVU1lfQklUKQorCisvKiBXRSBMYXRjaCBiaXQgKi8KKyNkZWZpbmUgRkxBU0hfU1RBVFVTX1dFTF9CSVQgICAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX1NUQVRVU19XRUxfTUFTSyAgICAgICAgICAgKDEgPDwgRkxBU0hfU1RBVFVTX1dFTF9CSVQpCisKK3R5cGVkZWYgYm9vbCAoKmlzX3N1c3BlbmRlZF9jYl90KSh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKmluaXRpYWxpemVfY2JfdCkodWludDhfdCBkZXZpY2VfdHlwZSwgdWludDhfdCBkZXZpY2VfZGVuc2l0eSk7Cit0eXBlZGVmIHZvaWQgKCpkZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZV9jYl90KSh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKnN5c19jbGtfY2ZnX2NiX3QpKHN5c19jbGtfdCB0eXBlKTsKK3R5cGVkZWYgdWludDhfdCAoKmdldF9kdW1teV9ieXRlc19jYl90KSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUVNQSSBGbGFzaCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gZGVmaW5lIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIFFTUEkgZmxhc2guCisgKgorICogXG5vdGUgVGhlIHN0cnVjdCBpbnN0YW5jZSBtdXN0IGJlIGRlY2xhcmVkIGFzIHN0YXRpYyBjb25zdCBmb3IgdGhpcyB0byB3b3JrCisgKi8KK3R5cGVkZWYgc3RydWN0IHFzcGlfZmxhc2hfY29uZmlnIHsKKyAgICAgICAgLy8gRnVuY3Rpb24gcG9pbnRlcnMKKyAgICAgICAgaW5pdGlhbGl6ZV9jYl90IGluaXRpYWxpemU7ICAgICAgICAgICAgLyoqPCBGbGFzaC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLworICAgICAgICBpc19zdXNwZW5kZWRfY2JfdCBpc19zdXNwZW5kZWQ7ICAgICAgICAvKio8IENoZWNrIGlmIGZsYXNoIGlzIGluIGVyYXNlL3Byb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5kIHN0YXRlICovCisgICAgICAgIGRlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlX2NiX3QKKyAgICAgICAgICAgICAgICBkZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZTsgLyoqPCBQZXJmb3JtIGV4dHJhIHN0ZXBzIG5lZWRlZCB3aGVuIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSBtb2RlIGlzIGRlYWN0aXZhdGVkICovCisgICAgICAgIHN5c19jbGtfY2ZnX2NiX3Qgc3lzX2Nsa19jZmc7ICAgICAgICAgIC8qKjwgUGVyZm9ybSBGbGFzaCBjb25maWd1cmF0aW9uIHdoZW4gc3lzdGVtIGNsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY2hhbmdlZCAoZS5nLiBjaGFuZ2UgZHVtbXkgYnl0ZXMgb3IgUVNQSUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBkaXZpZGVyICovCisgICAgICAgIGdldF9kdW1teV9ieXRlc19jYl90IGdldF9kdW1teV9ieXRlczsgIC8qKjwgUmV0dXJuIHRoZSBudW1iZXIgb2YgZHVtbXkgYnl0ZXMgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkICh0aGV5IG1heSBlLmcuIGNoYW5nZSB3aGVuIHRoZSBjbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMpICovCisgICAgICAgIHVpbnQ4X3QgbWFudWZhY3R1cmVyX2lkOyAgICAgICAgICAgICAgIC8qKjwgVGhlIEZsYXNoIEpFREVDIHZlbmRvciBJRCAoQ21kIDB4OUYsIDFzdCBieXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgKGFuZCB0aGUgZGV2aWNlX3R5cGUvZGV2aWNlX2RlbnNpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5lZWRlZCBmb3IgZmxhc2ggYXV0b2RldGVjdGlvbiAqLworICAgICAgICB1aW50OF90IGRldmljZV90eXBlOyAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBGbGFzaCBKRURFQyBkZXZpY2UgdHlwZSAoQ21kIDB4OUYsIDJuZCBieXRlKSAqLworICAgICAgICB1aW50OF90IGRldmljZV9kZW5zaXR5OyAgICAgICAgICAgICAgICAvKio8IFRoZSBGbGFzaCBKRURFQyBkZXZpY2UgdHlwZSAoQ21kIDB4OUYsIDNyZCBieXRlKSAqLworICAgICAgICB1aW50OF90IGVyYXNlX29wY29kZTsgICAgICAgICAgICAgICAgICAvKio8IFRoZSBGbGFzaCBlcmFzZSBvcGNvZGUgdG8gdXNlICovCisgICAgICAgIHVpbnQ4X3QgZXJhc2Vfc3VzcGVuZF9vcGNvZGU7ICAgICAgICAgIC8qKjwgVGhlIEZsYXNoIGVyYXNlIHN1c3BlbmQgb3Bjb2RlIHRvIHVzZSAqLworICAgICAgICB1aW50OF90IGVyYXNlX3Jlc3VtZV9vcGNvZGU7ICAgICAgICAgICAvKio8IFRoZSBGbGFzaCBlcmFzZSByZXN1bWUgb3Bjb2RlIHRvIHVzZSAqLworICAgICAgICB1aW50OF90IHBhZ2VfcHJvZ3JhbV9vcGNvZGU7ICAgICAgICAgICAvKio8IFRoZSBGbGFzaCBwYWdlIHByb2dyYW0gb3Bjb2RlIHRvIHVzZSAqLworICAgICAgICBib29sIHF1YWRfcGFnZV9wcm9ncmFtX2FkZHJlc3M7ICAgICAgICAvKio8IElmIHRydWUsIHRoZSBhZGRyZXNzIHdpbGwgYmUgdHJhbnNtaXR0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUFEIG1vZGUgd2hlbiB3cml0aW5nIGEgcGFnZS4gT3RoZXJ3aXNlLCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJhbnNtaXR0ZWQgaW4gc2luZ2xlIG1vZGUgKi8KKyAgICAgICAgdWludDhfdCByZWFkX2VyYXNlX3Byb2dyZXNzX29wY29kZTsgICAgLyoqPCBUaGUgb3Bjb2RlIHRvIHVzZSB0byBjaGVjayBpZiBlcmFzZSBpcyBpbiBwcm9ncmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVc3VhbGx5IHRoZSBSZWFkIFN0YXR1cyBSZWcgb3Bjb2RlICgweDUpKSAqLworCisgICAgICAgIHVpbnQ4X3QgZXJhc2VfaW5fcHJvZ3Jlc3NfYml0OyAgICAgICAgIC8qKjwgVGhlIGJpdCB0byBjaGVjayB3aGVuIHJlYWRpbmcgdGhlIGVyYXNlIHByb2dyZXNzICovCisgICAgICAgIGJvb2wgZXJhc2VfaW5fcHJvZ3Jlc3NfYml0X2hpZ2hfbGV2ZWw7IC8qKjwgVGhlIGFjdGl2ZSBzdGF0ZSAodHJ1ZTogaGlnaCwgZmFsc2U6IGxvdykgb2YgdGhlIGJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlICovCisgICAgICAgIHVpbnQ4X3Qgc2VuZF9vbmNlOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgSWYgc2V0IHRvIDEsIHRoZSAiUGVyZm9ybWFuY2UgbW9kZSIgKG9yIGJ1cnN0LCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXM7IGRpZmZlcnMgcGVyIHZlbmRvcikgd2lsbCBiZSB1c2VkIGZvciByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzZXMuIEluIHRoaXMgbW9kZSwgdGhlIHJlYWQgb3Bjb2RlIGlzIG9ubHkgc2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UsIGFuZCBzdWJzZXF1ZW50IGFjY2Vzc2VzIG9ubHkgdHJhbnNmZXIgdGhlIGFkZHJlc3MgKi8KKyAgICAgICAgdWludDhfdCBleHRyYV9ieXRlOyAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgZXh0cmEgYnl0ZSB0byB0cmFuc21pdCwgd2hlbiBpbiAiUGVyZm9ybWFuY2UgbW9kZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VuZCBvbmNlIGlzIDEpLCB0aGF0IHRlbGxzIHRoZSBmbGFzaCB0aGF0IGl0IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXkgaW4gdGhpcyBjb250aW51b3VzLCBwZXJmb3JtYW5jZSBtb2RlICovCisgICAgICAgIEhXX1FTUElfQUREUl9TSVpFIGFkZHJlc3Nfc2l6ZTsgICAgICAgIC8qKjwgV2hldGhlciB0aGUgZmxhc2ggd29ya3MgaW4gMjQtIG9yIDMyLWJpdCBhZGRyZXNzaW5nIG1vZGUgKi8KKyAgICAgICAgSFdfUVNQSV9CUkVBS19TRVFfU0laRSBicmVha19zZXFfc2l6ZTsgLyoqPCBXaGV0aGVyIHRoZSBicmVhayBzZXF1ZW5jZSwgdGhhdCBwdXRzIGZsYXNoIG91dCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzIG1vZGUsIGlzIG9uZSBvciB0d28gYnl0ZXMgbG9uZyAodGhlIGJyZWFrIGJ5dGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGKSAqLworICAgICAgICBxc3BpX3Vjb2RlX3QgdWNvZGVfd2FrZXVwOyAgICAgICAgICAgICAvKio8IFRoZSBRU1BJQyBtaWNyb2NvZGUgdG8gdXNlIHRvIHNldHVwIHRoZSBmbGFzaCBvbiB3YWtldXAuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhdXRvbWF0aWNhbGx5IHVzZWQgYnkgdGhlIFFTUEkgQ29udHJvbGxlciBhZnRlciB3YWtldXAsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBDUFUgc3RhcnRzIGNvZGUgZXhlY3V0aW9uLiBUaGlzIGlzIGRpZmZlcmVudCBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgZmxhc2ggd2FzIGFjdGl2ZSwgaW4gZGVlcCBwb3dlciBkb3duIG9yIGNvbXBsZXRlbHkgb2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgdGhlIHN5c3RlbSB3YXMgc2xlZXBpbmcgKi8KKyAgICAgICAgdWludDE2X3QgcG93ZXJfZG93bl9kZWxheTsgICAgICAgICAgICAgLyoqPCBUaGlzIGlzIHRoZSB0aW1lLCBpbiB1c2VjLCBuZWVkZWQgZm9yIHRoZSBmbGFzaCB0byBnbyB0byBwb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24sIGFmdGVyIHRoZSBQb3dlciBEb3duIGNvbW1hbmQgaXMgaXNzdWVkICovCisgICAgICAgIHVpbnQxNl90IHJlbGVhc2VfcG93ZXJfZG93bl9kZWxheTsgICAgIC8qKjwgVGhpcyBpcyB0aGUgdGltZSwgaW4gdXNlYywgbmVlZGVkIGZvciB0aGUgZmxhc2ggdG8gZXhpdCB0aGUgcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duIG1vZGUsIGFmdGVyIHRoZSBSZWxlYXNlIFBvd2VyIERvd24gY29tbWFuZCBpcyBpc3N1ZWQgKi8KK30gcXNwaV9mbGFzaF9jb25maWdfdDsKKworZXh0ZXJuIGNvbnN0IHFzcGlfZmxhc2hfY29uZmlnX3QqIGZsYXNoX2NvbmZpZ19pbml0OworI2lmIChGTEFTSF9BVVRPREVURUNUID09IDEpCitleHRlcm4gcXNwaV9mbGFzaF9jb25maWdfdCAqZmxhc2hfY29uZmlnOworI2Vsc2UKK2V4dGVybiBjb25zdCBxc3BpX2ZsYXNoX2NvbmZpZ190ICogY29uc3QgZmxhc2hfY29uZmlnOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHFzcGlfd3JpdGUoY29uc3QgdWludDhfdCAqd2J1Ziwgc2l6ZV90IHdsZW4pOworc3RhdGljIHZvaWQgcXNwaV90cmFuc2FjdChjb25zdCB1aW50OF90ICp3YnVmLCBzaXplX3Qgd2xlbiwgdWludDhfdCAqcmJ1Ziwgc2l6ZV90IHJsZW4pOworc3RhdGljIHVpbnQ4X3QgZmxhc2hfcmVhZF9zdGF0dXNfcmVnaXN0ZXIodm9pZCk7CitzdGF0aWMgdm9pZCBmbGFzaF93cml0ZV9zdGF0dXNfcmVnaXN0ZXIodWludDhfdCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBmbGFzaF93cml0ZV9lbmFibGUodm9pZCk7CitzdGF0aWMgdm9pZCBxc3BpX2F1dG9tb2RlX3NldF9kdW1teV9ieXRlc19jb3VudCh1aW50OF90IGNvdW50KTsKK3N0YXRpYyBib29sIGZsYXNoX2lzX2J1c3kodm9pZCk7CitzdGF0aWMgaW5saW5lIGJvb2wgZmxhc2hfZXJhc2VfcHJvZ3JhbV9pbl9wcm9ncmVzcyh2b2lkKTsKKworI2VuZGlmIC8qIF9RU1BJX0NPTU1PTl9IXyAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfdzI1cTgwZXcuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfdzI1cTgwZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM3ZmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L2luY2x1ZGUvcXNwaV93MjVxODBldy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIE1FTU9SWQorICoKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIHFzcGlfdzI1cTgwZXcuaAorICoKKyAqIEBicmllZiBRU1BJIGZsYXNoIGRyaXZlciBmb3IgdGhlIFdpbmJvbmQgVzI1UTgwRVcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgX1FTUElfVzMyUTgwRVdfSF8KKyNkZWZpbmUgX1FTUElfVzMyUTgwRVdfSF8KKworI2lmbmRlZiBXSU5CT05EX0lECisjZGVmaW5lIFdJTkJPTkRfSUQgICAgICAweEVGCisjZW5kaWYKKworLy8gRGV2aWNlIHR5cGUgdXNpbmcgY29tbWFuZCAweDlGCisjZGVmaW5lIFcyNVE4MEVXICAgICAgICAweDYwCisKKyNpZm5kZWYgVzI1UV84TWJfU0laRQorI2RlZmluZSBXMjVRXzhNYl9TSVpFICAgMHgxNAorI2VuZGlmCisKKyNpZiAoRkxBU0hfQVVUT0RFVEVDVCA9PSAxKSB8fCAoZGdfY29uZmlnRkxBU0hfTUFOVUZBQ1RVUkVSX0lEID09IFdJTkJPTkRfSUQgJiYgXAorICAgICAgICBkZ19jb25maWdGTEFTSF9ERVZJQ0VfVFlQRSA9PSBXMjVRODBFVyAmJiBkZ19jb25maWdGTEFTSF9ERU5TSVRZID09IFcyNVFfOE1iX1NJWkUpCisKKyNpbmNsdWRlICJxc3BpX2NvbW1vbi5oIgorCisjaW5jbHVkZSAicXNwaV93aW5ib25kLmgiCisKK3N0YXRpYyB2b2lkIGZsYXNoX3cyNXE4MGV3X3N5c19jbG9ja19jZmcoc3lzX2Nsa190IHN5c19jbGspOworc3RhdGljIHVpbnQ4X3QgZmxhc2hfdzI1cTgwZXdfZ2V0X2R1bW15X2J5dGVzKHZvaWQpOworCitzdGF0aWMgY29uc3QgcXNwaV9mbGFzaF9jb25maWdfdCBmbGFzaF93MjVxODBld19jb25maWcgPSB7CisgICAgICAgIC5tYW51ZmFjdHVyZXJfaWQgICAgICAgICAgICAgICA9IFdJTkJPTkRfSUQsCisgICAgICAgIC5kZXZpY2VfdHlwZSAgICAgICAgICAgICAgICAgICA9IFcyNVE4MEVXLAorICAgICAgICAuZGV2aWNlX2RlbnNpdHkgICAgICAgICAgICAgICAgPSBXMjVRXzhNYl9TSVpFLAorICAgICAgICAuaXNfc3VzcGVuZGVkICAgICAgICAgICAgICAgICAgPSBmbGFzaF93MjVxX2lzX3N1c3BlbmRlZCwKKyAgICAgICAgLmluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgID0gZmxhc2hfdzI1cV9pbml0aWFsaXplLAorICAgICAgICAuZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUgPSBmbGFzaF93MjVxX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlLAorICAgICAgICAuc3lzX2Nsa19jZmcgICAgICAgICAgICAgICAgICAgPSBmbGFzaF93MjVxODBld19zeXNfY2xvY2tfY2ZnLAorICAgICAgICAuZ2V0X2R1bW15X2J5dGVzICAgICAgICAgICAgICAgPSBmbGFzaF93MjVxODBld19nZXRfZHVtbXlfYnl0ZXMsCisgICAgICAgIC5icmVha19zZXFfc2l6ZSAgICAgICAgICAgICAgICA9IEhXX1FTUElfQlJFQUtfU0VRX1NJWkVfMUIsCisgICAgICAgIC5hZGRyZXNzX3NpemUgICAgICAgICAgICAgICAgICA9IEhXX1FTUElfQUREUl9TSVpFXzI0LAorICAgICAgICAucGFnZV9wcm9ncmFtX29wY29kZSAgICAgICAgICAgPSBDTURfUVVBRF9QQUdFX1BST0dSQU0sCisgICAgICAgIC5xdWFkX3BhZ2VfcHJvZ3JhbV9hZGRyZXNzICAgICA9IGZhbHNlLAorICAgICAgICAuZXJhc2Vfb3Bjb2RlICAgICAgICAgICAgICAgICAgPSBDTURfU0VDVE9SX0VSQVNFLAorICAgICAgICAuZXJhc2Vfc3VzcGVuZF9vcGNvZGUgICAgICAgICAgPSBXMjVRX0VSQVNFX1BST0dSQU1fU1VTUEVORCwKKyAgICAgICAgLmVyYXNlX3Jlc3VtZV9vcGNvZGUgICAgICAgICAgID0gVzI1UV9FUkFTRV9QUk9HUkFNX1JFU1VNRSwKKyAgICAgICAgLnJlYWRfZXJhc2VfcHJvZ3Jlc3Nfb3Bjb2RlICAgID0gQ01EX1JFQURfU1RBVFVTX1JFR0lTVEVSLAorICAgICAgICAuZXJhc2VfaW5fcHJvZ3Jlc3NfYml0ICAgICAgICAgPSBGTEFTSF9TVEFUVVNfQlVTWV9CSVQsCisgICAgICAgIC5lcmFzZV9pbl9wcm9ncmVzc19iaXRfaGlnaF9sZXZlbCA9IHRydWUsCisgICAgICAgIC5zZW5kX29uY2UgICAgICAgICAgICAgICAgICAgICA9IDEsCisgICAgICAgIC5leHRyYV9ieXRlICAgICAgICAgICAgICAgICAgICA9IDB4QTAsCisgICAgICAgIC51Y29kZV93YWtldXAgICAgICAgICAgICAgICAgICA9IHt3MjVxX3Vjb2RlX3dha2V1cCwgc2l6ZW9mKHcyNXFfdWNvZGVfd2FrZXVwKX0sCisgICAgICAgIC5wb3dlcl9kb3duX2RlbGF5ICAgICAgICAgICAgICA9IFcyNVFfUE9XRVJfRE9XTl9ERUxBWV9VUywKKyAgICAgICAgLnJlbGVhc2VfcG93ZXJfZG93bl9kZWxheSAgICAgID0gVzI1UV9SRUxFQVNFX1BPV0VSX0RPV05fREVMQVlfVVMsCit9OworCisjaWYgKEZMQVNIX0FVVE9ERVRFQ1QgPT0gMCkKKyAgICAgICAgY29uc3QgcXNwaV9mbGFzaF9jb25maWdfdCogY29uc3QgZmxhc2hfY29uZmlnID0gJmZsYXNoX3cyNXE4MGV3X2NvbmZpZzsKKyNlbmRpZgorCitRU1BJX1NFQ1RJT04gc3RhdGljIHZvaWQgZmxhc2hfdzI1cTgwZXdfc3lzX2Nsb2NrX2NmZyhzeXNfY2xrX3Qgc3lzX2NsaykKK3sKKworfQorCitRU1BJX1NFQ1RJT04gc3RhdGljIHVpbnQ4X3QgZmxhc2hfdzI1cTgwZXdfZ2V0X2R1bW15X2J5dGVzKHZvaWQpCit7CisgICAgICAgIHJldHVybiAyOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfUVNQSV9XMzJRODBFV19IXyAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfd2luYm9uZC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvbWVtb3J5L2luY2x1ZGUvcXNwaV93aW5ib25kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlNmViMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9pbmNsdWRlL3FzcGlfd2luYm9uZC5oCkBAIC0wLDAgKzEsMjM2IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIE1FTU9SWQorICoKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIHFzcGlfd2luYm9uZC5oCisgKgorICogQGJyaWVmIFFTUEkgZmxhc2ggZHJpdmVyIGZvciBXaW5ib25kIGZsYXNoZXMgLSBjb21tb24gY29kZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgX1FTUElfV0lOQk9ORF9IXworI2RlZmluZSBfUVNQSV9XSU5CT05EX0hfCisKKyNkZWZpbmUgV0lOQk9ORF9JRCAgICAgICAgICAgICAgICAgICAgICAweEVGCisKKyNpZiAoRkxBU0hfQVVUT0RFVEVDVCA9PSAxKSB8fCAoZGdfY29uZmlnRkxBU0hfTUFOVUZBQ1RVUkVSX0lEID09IFdJTkJPTkRfSUQpCisjaW5jbHVkZSAicXNwaV9jb21tb24uaCIKKworI2RlZmluZSBXMjVRX0VSQVNFX1BST0dSQU1fU1VTUEVORCAgICAgIDB4NzUKKyNkZWZpbmUgVzI1UV9FUkFTRV9QUk9HUkFNX1JFU1VNRSAgICAgICAweDdBCisKKyNkZWZpbmUgVzI1UV9XUklURV9TVEFUVVNfUkVHSVNURVIyICAgICAweDMxCisjZGVmaW5lIFcyNVFfUEFHRV9QUk9HUkFNICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXMjVRX1dSSVRFX0VOQUJMRV9OT05fVk9MICAgICAgIDB4NTAKKyNkZWZpbmUgVzI1UV9SRUFEX1NUQVRVU19SRUdJU1RFUjIgICAgICAweDM1CisjZGVmaW5lIFcyNVFfQkxPQ0tfRVJBU0VfNjRLICAgICAgICAgICAgMHhEOAorI2RlZmluZSBXMjVRX0ZBU1RfUkVBRF9RUEkgICAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgVzI1UV9SRUFEX0RFVklDRV9JRF9TSU5HTEUgICAgICAweDkwICAgIC8vIFJlcXVpcmVzIHNpbmdsZSBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKyNkZWZpbmUgVzI1UV9SRUFEX0RFVklDRV9JRF9EVUFMICAgICAgICAweDkyICAgIC8vIFJlcXVpcmVzIGR1YWwgbW9kZSBmb3IgdGhlIGNvbW1hbmQgZW50cnkhCisjZGVmaW5lIFcyNVFfUkVBRF9ERVZJQ0VfSURfUVVBRCAgICAgICAgMHg5NAorI2RlZmluZSBXMjVRX1JFQURfVU5JUVVFX0lEICAgICAgICAgICAgIDB4NEIgICAgLy8gUmVxdWlyZXMgc2luZ2xlIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX1JFQURfU0ZEUF9SRUcgICAgICAgICAgICAgIDB4NUEgICAgLy8gUmVxdWlyZXMgc2luZ2xlIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX0VSQVNFX1NFQ1VSSVRZX1JFR1MgICAgICAgIDB4NDQgICAgLy8gUmVxdWlyZXMgc2luZ2xlIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX1BST0dSX1NFQ1VSSVRZX1JFR1MgICAgICAgIDB4NDIgICAgLy8gUmVxdWlyZXMgc2luZ2xlIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX1JFQURfU0VDVVJJVFlfUkVHUyAgICAgICAgIDB4NDggICAgLy8gUmVxdWlyZXMgc2luZ2xlIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX0VOVEVSX1FQSV9NT0RFICAgICAgICAgICAgIDB4MzggICAgLy8gUmVxdWlyZXMgc2luZ2xlIG1vZGUgZm9yIHRoZSBjb21tYW5kIGVudHJ5IQorI2RlZmluZSBXMjVRX0VYSVRfUVBJX01PREUgICAgICAgICAgICAgIDB4RkYgICAgLy8gUmVxdWlyZXMgcXVhZCBtb2RlIGZvciB0aGUgY29tbWFuZCBlbnRyeSEKKworLyogU3VzcGVuZCAqLworI2RlZmluZSBXMjVRX1NUQVRVUzJfU1VTX0JJVCAgICAgICAgICAgIDcKKyNkZWZpbmUgVzI1UV9TVEFUVVMyX1NVU19NQVNLICAgICAgICAgICAoMSA8PCBXMjVRX1NUQVRVUzJfU1VTX0JJVCkKKworLyogUVBJIEVuYWJsZSAqLworI2RlZmluZSBXMjVRX1NUQVRVUzJfUUVfQklUICAgICAgICAgICAgIDEKKyNkZWZpbmUgVzI1UV9TVEFUVVMyX1FFX01BU0sgICAgICAgICAgICAoMSA8PCBXMjVRX1NUQVRVUzJfUUVfQklUKQorCisvLyBGbGFzaCBwb3dlciB1cC9kb3duIHRpbWluZ3MKKyNkZWZpbmUgVzI1UV9QT1dFUl9ET1dOX0RFTEFZX1VTICAgICAgICAgIDMKKyNkZWZpbmUgVzI1UV9SRUxFQVNFX1BPV0VSX0RPV05fREVMQVlfVVMgIDMKKyNkZWZpbmUgVzI1UV9QT1dFUl9VUF9ERUxBWV9VUyAgICAgICAgICAgIDEwCisKKyNpZiAoZGdfY29uZmlnRkxBU0hfUE9XRVJfT0ZGID09IDEpCisvKioKKyAqIFxicmllZiB1Q29kZSBmb3IgaGFuZGxpbmcgdGhlIFFTUEkgRkxBU0ggYWN0aXZhdGlvbiBmcm9tIHBvd2VyIG9mZi4KKyAqLworICAgICAgICAvKgorICAgICAgICAgKiBTaG91bGQgd29yayB3aXRoIGFsbCBXaW5ib25kIGZsYXNoZXMgLS0gdmVyaWZpZWQgd2l0aCBXMjVRODBFVy4KKyAgICAgICAgICoKKyAgICAgICAgICogRGVsYXkgMTB1c2VjCisgICAgICAgICAqIDB4MDEgICAvLyBDTURfTkJZVEVTID0gMCwgQ01EX1RYX01EID0gMCAoU2luZ2xlKSwgQ01EX1ZBTElEID0gMQorICAgICAgICAgKiAweEEwICAgLy8gQ01EX1dUX0NOVF9MUyA9IDE2MCAtLT4gMTAwMDAgLyA2Mi41ID0gMTYwID0gMTB1c2VjCisgICAgICAgICAqIDB4MDAgICAvLyBDTURfV1RfQ05UX01TID0gMAorICAgICAgICAgKiBFeGl0IGZyb20gRmFzdCBSZWFkIG1vZGUKKyAgICAgICAgICogMHgwOSAgIC8vIENNRF9OQllURVMgPSAxLCBDTURfVFhfTUQgPSAwIChTaW5nbGUpLCBDTURfVkFMSUQgPSAxCisgICAgICAgICAqIDB4MDAgICAvLyBDTURfV1RfQ05UX0xTID0gMAorICAgICAgICAgKiAweDAwICAgLy8gQ01EX1dUX0NOVF9NUyA9IDAKKyAgICAgICAgICogMHhGRiAgIC8vIEVuYWJsZSBSZXNldAorICAgICAgICAgKiAodXAgdG8gMTYgd29yZHMpCisgICAgICAgICAqLworICAgICAgICBjb25zdCB1aW50MzJfdCB3MjVxX3Vjb2RlX3dha2V1cFtdID0geworICAgICAgICAgICAgICAgIDB4MDkwMDAwMDEgfCAoKCh1aW50MTZfdCkoVzI1UV9QT1dFUl9VUF9ERUxBWV9VUyoxMDAwLzYyLjUpICYgMHhGRkZGKSA8PCA4KSwKKyAgICAgICAgICAgICAgICAweDAwRkYwMDAwLAorICAgICAgICB9OworI2VsaWYgKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX0RPV04gPT0gMSkKKy8qKgorICogXGJyaWVmIHVDb2RlIGZvciBoYW5kbGluZyB0aGUgUVNQSSBGTEFTSCByZWxlYXNlIGZyb20gcG93ZXItZG93bi4KKyAqLworICAgICAgICAvKgorICAgICAgICAgKiBTaG91bGQgd29yayB3aXRoIGFsbCBXaW5ib25kIGZsYXNoZXMgLS0gdmVyaWZpZWQgd2l0aCBXMjVRODBFVy4KKyAgICAgICAgICoKKyAgICAgICAgICogMHgwOSAgIC8vIENNRF9OQllURVMgPSAxLCBDTURfVFhfTUQgPSAwIChTaW5nbGUpLCBDTURfVkFMSUQgPSAxCisgICAgICAgICAqIDB4MzAgICAvLyBDTURfV1RfQ05UX0xTID0gMzAwMCAvIDYyLjUgPSA0OCAvLyAzdXNlYworICAgICAgICAgKiAweDAwICAgLy8gQ01EX1dUX0NOVF9NUyA9IDAKKyAgICAgICAgICogMHhBQiAgIC8vIFJlbGVhc2UgUG93ZXIgRG93bgorICAgICAgICAgKiAodXAgdG8gMTYgd29yZHMpCisgICAgICAgICAqLworICAgICAgICBjb25zdCB1aW50MzJfdCB3MjVxX3Vjb2RlX3dha2V1cFtdID0geworICAgICAgICAgICAgICAgIDB4QUIwMDAwMDkgfCAoKCh1aW50MTZfdCkoVzI1UV9SRUxFQVNFX1BPV0VSX0RPV05fREVMQVlfVVMqMTAwMC82Mi41KSAmIDB4RkZGRikgPDwgOCksCisgICAgICAgIH07CisjZWxzZQorLyoqCisgKiBcYnJpZWYgdUNvZGUgZm9yIGhhbmRsaW5nIHRoZSBRU1BJIEZMQVNIIGV4aXQgZnJvbSB0aGUgIkNvbnRpbnVvdXMgUmVhZCBNb2RlIi4KKyAqLworICAgICAgICAvKgorICAgICAgICAgKiBTaG91bGQgd29yayB3aXRoIGFsbCBXaW5ib25kIGZsYXNoZXMgLS0gdmVyaWZpZWQgd2l0aCBXMjVRODBFVy4KKyAgICAgICAgICoKKyAgICAgICAgICogMHgyNSAgIC8vIENNRF9OQllURVMgPSA0LCBDTURfVFhfTUQgPSAyIChRdWFkKSwgQ01EX1ZBTElEID0gMQorICAgICAgICAgKiAweDAwICAgLy8gQ01EX1dUX0NOVF9MUyA9IDAKKyAgICAgICAgICogMHgwMCAgIC8vIENNRF9XVF9DTlRfTVMgPSAwCisgICAgICAgICAqIDB4NTUgICAvLyBDbG9ja3MgMC0xIChBMjMtMTYpCisgICAgICAgICAqIDB4NTUgICAvLyBDbG9ja3MgMi0zIChBMTUtOCkKKyAgICAgICAgICogMHg1NSAgIC8vIENsb2NrcyA0LTUgKEE3LTApCisgICAgICAgICAqIDB4NTUgICAvLyBDbG9ja3MgNi03IChNNy0wKSA6IE01LTQgIT0gJzEwJyA9PT4gRGlzYWJsZSAiQ29udGludW91cyBSZWFkIE1vZGUiCisgICAgICAgICAqICh1cCB0byAxNiB3b3JkcykKKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IHVpbnQzMl90IHcyNXFfdWNvZGVfd2FrZXVwW10gPSB7CisgICAgICAgICAgICAgICAgMHg1NTAwMDAyNSwKKyAgICAgICAgICAgICAgICAweDAwNTU1NTU1LAorICAgICAgICB9OworI2VuZGlmCisKK3N0YXRpYyBib29sIGZsYXNoX3cyNXFfaXNfc3VzcGVuZGVkKHZvaWQpOworc3RhdGljIHZvaWQgZmxhc2hfdzI1cV9pbml0aWFsaXplKHVpbnQ4X3QgZGV2aWNlX3R5cGUsIHVpbnQ4X3QgZGV2aWNlX2RlbnNpdHkpOworc3RhdGljIHZvaWQgZmxhc2hfdzI1cV9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHZvbGF0aWxlIHdyaXRlcyB0byBTdGF0dXMgUmVnaXN0ZXIgYml0cworICogXGRldGFpbHMgV2hlbiB0aGlzIGNvbW1hbmQgaXMgaXNzdWVkLCBhbnkgd3JpdGVzIHRvIGFueSBvZiB0aGUgU3RhdHVzIFJlZ2lzdGVycyBvZiB0aGUgRmxhc2ggYXJlCisgKiAgICAgICAgZG9uZSBhcyB2b2xhdGlsZSB3cml0ZXMuIFRoaXMgY29tbWFuZCBpcyB2YWxpZCBvbmx5IHdoZW4gdGhlIFdyaXRlIFN0YXR1cyBSZWdpc3RlciBjb21tYW5kCisgKiAgICAgICAgZm9sbG93cy4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGJsb2NrcyB1bnRpbCB0aGUgRmxhc2ggaGFzIHByb2Nlc3NlZCB0aGUgY29tbWFuZC4KKyAqLworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyBpbmxpbmUgdm9pZCBmbGFzaF93MjVxX3dyZV92b2xhdGlsZSh2b2lkKQoreworICAgICAgICB1aW50OF90IGNtZFtdID0geyBXMjVRX1dSSVRFX0VOQUJMRV9OT05fVk9MIH07CisKKyAgICAgICAgcXNwaV93cml0ZShjbWQsIDEpOworCisgICAgICAgIC8qIFZlcmlmeSAqLworICAgICAgICB3aGlsZSAoZmxhc2hfaXNfYnVzeSgpKTsKK30KKworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyBpbmxpbmUgdWludDhfdCBmbGFzaF93MjVxX3JlYWRfc3RhdHVzX3JlZ2lzdGVyXzIodm9pZCkKK3sKKyAgICAgICAgX19EQkdfUVNQSV9WT0xBVElMRV9fIHVpbnQ4X3Qgc3RhdHVzOworICAgICAgICB1aW50OF90IGNtZFtdID0geyBXMjVRX1JFQURfU1RBVFVTX1JFR0lTVEVSMiB9OworCisgICAgICAgIHFzcGlfdHJhbnNhY3QoY21kLCAxLCAmc3RhdHVzLCAxKTsKKworICAgICAgICByZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSB0aGUgU3RhdHVzIFJlZ2lzdGVyIDIgb2YgdGhlIEZsYXNoCisgKgorICogXHBhcmFtW2luXSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGJsb2NrcyB1bnRpbCB0aGUgRmxhc2ggaGFzIHByb2Nlc3NlZCB0aGUgY29tbWFuZC4gTm8gdmVyaWZpY2F0aW9uIHRoYXQgdGhlCisgKiAgICAgICAgdmFsdWUgaGFzIGJlZW4gYWN0dWFsbHkgd3JpdHRlbiBpcyBkb25lIHRob3VnaC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBkZWNpZGUgd2hldGhlcgorICogICAgICAgIHN1Y2ggdmVyaWZpY2F0aW9uIGlzIG5lZWRlZCBvciBub3QgYW5kIGV4ZWN1dGUgaXQgb24gaXRzIG93bi4KKyAqLworUVNQSV9TRUNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0YXRpYyBpbmxpbmUgdm9pZCBmbGFzaF93MjVxX3dyaXRlX3N0YXR1c19yZWdpc3Rlcl8yKHVpbnQ4X3QgdmFsdWUpCit7CisgICAgICAgIHVpbnQ4X3QgY21kW10gPSB7IFcyNVFfV1JJVEVfU1RBVFVTX1JFR0lTVEVSMiwgdmFsdWUgfTsKKworICAgICAgICBxc3BpX3dyaXRlKGNtZCwgMik7CisKKyAgICAgICAgLyogV2FpdCBmb3IgdGhlIEZsYXNoIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgd2hpbGUgKGZsYXNoX2lzX2J1c3koKSk7Cit9CisKK1FTUElfU0VDVElPTiBzdGF0aWMgaW5saW5lIHZvaWQgZmxhc2hfdzI1cV9lbmFibGVfcXVhZF9tb2RlKHZvaWQpCit7CisgICAgICAgIHVpbnQ4X3Qgc3RhdHVzOworCisgICAgICAgIHN0YXR1cyA9IGZsYXNoX3cyNXFfcmVhZF9zdGF0dXNfcmVnaXN0ZXJfMigpOworICAgICAgICBpZiAoIShzdGF0dXMgJiBXMjVRX1NUQVRVUzJfUUVfTUFTSykpIHsKKyAgICAgICAgICAgICAgICBmbGFzaF93cml0ZV9lbmFibGUoKTsKKyAgICAgICAgICAgICAgICBmbGFzaF93MjVxX3dyaXRlX3N0YXR1c19yZWdpc3Rlcl8yKHN0YXR1cyB8IFcyNVFfU1RBVFVTMl9RRV9NQVNLKTsKKyAgICAgICAgfQorfQorCitRU1BJX1NFQ1RJT04gc3RhdGljIGJvb2wgZmxhc2hfdzI1cV9pc19zdXNwZW5kZWQodm9pZCkKK3sKKyAgICAgICAgX19EQkdfUVNQSV9WT0xBVElMRV9fIHVpbnQ4X3Qgc3RhdHVzOworCisgICAgICAgIHN0YXR1cyA9IGZsYXNoX3cyNXFfcmVhZF9zdGF0dXNfcmVnaXN0ZXJfMigpOworICAgICAgICByZXR1cm4gKHN0YXR1cyAmIFcyNVFfU1RBVFVTMl9TVVNfTUFTSykgIT0gMDsKK30KKworUVNQSV9TRUNUSU9OIHN0YXRpYyB2b2lkIGZsYXNoX3cyNXFfaW5pdGlhbGl6ZSh1aW50OF90IGRldmljZV90eXBlLCB1aW50OF90IGRldmljZV9kZW5zaXR5KQoreworICAgICAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgICAgICBmbGFzaF93MjVxX2VuYWJsZV9xdWFkX21vZGUoKTsKKworICAgICAgICBmbGFzaF9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworfQorCitRU1BJX1NFQ1RJT04gc3RhdGljIHZvaWQgZmxhc2hfdzI1cV9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSh2b2lkKQoreworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9RU1BJX1dJTkJPTkRfSF8gKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvc3JjL3FzcGlfYXV0b21vZGUuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL21lbW9yeS9zcmMvcXNwaV9hdXRvbW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTdhYjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9tZW1vcnkvc3JjL3FzcGlfYXV0b21vZGUuYwpAQCAtMCwwICsxLDEyMjAgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBxc3BpX2F1dG9tb2RlLmMKKyAqCisgKiBAYnJpZWYgQWNjZXNzIFFTUEkgZmxhc2ggd2hlbiBydW5uaW5nIGluIGF1dG8gbW9kZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorCisjaW5jbHVkZSAiaHdfY3BtLmgiCisKKyNpbmNsdWRlICJod19xc3BpLmgiCisjaW5jbHVkZSAicXNwaV9hdXRvbW9kZS5oIgorCisvKgorICogUVNQSSBjb250cm9sbGVyIGFsbG93cyB0byBleGVjdXRlIGNvZGUgZGlyZWN0bHkgZnJvbSBRU1BJIGZsYXNoLgorICogV2hlbiBjb2RlIGlzIGV4ZWN1dGluZyBmcm9tIGZsYXNoIHRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IHRvIHJlcHJvZ3JhbSBpdC4KKyAqIFRvIGJlIGFibGUgdG8gbW9kaWZ5IGZsYXNoIG1lbW9yeSB3aGlsZSBpdCBpcyB1c2VkIGZvciBjb2RlIGV4ZWN1dGlvbiBpdCBtdXN0IG1lIGFzc3VyZWQgdGhhdAorICogZHVyaW5nIHRoZSB0aW1lIG5lZWRlZCBmb3IgZXJhc2Uvd3JpdGUgbm8gY29kZSBpcyBydW5uaW5nIGZyb20gZmxhc2guCisgKi8KKworLyoKKyAqIEZsYXNoIHNwZWNpZmljIGRlZmluZXMKKyAqLworCisvKiBTVVMgYml0IGRlbGF5IGFmdGVyIFNVU1BFTkQgY29tbWFuZCAqLworI2RlZmluZSBGTEFTSF9TVVNfREVMQVkgICAgICAgICAgICAgICAgICgyMCkgLy8gaW4gdXNlYworCisvKiBGbGFzaCBwYWdlIHNpemUgKi8KKyNkZWZpbmUgRkxBU0hfTUFYX1dSSVRFX1NJWkUgICAgICAgICAgICBkZ19jb25maWdGTEFTSF9NQVhfV1JJVEVfU0laRQorCisvKgorICogVXNlIFFVQUQgbW9kZSBmb3IgcGFnZSB3cml0ZS4KKyAqCisgKiBOb3RlOiBJZiB0aGUgZmxhc2ggZG9lcyBub3Qgc3VwcG9ydCBRVUFEIG1vZGUgb3IgaXQgaXMgbm90IGNvbm5lY3RlZCBmb3IgUVVBRCBtb2RlIHNldCBpdCB0byAwCisgKiAoc2luZ2xlIG1vZGUpLgorICovCisjaWZuZGVmIFFVQURfTU9ERQorI2RlZmluZSBRVUFEX01PREUgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIEVSQVNFX0lOX0FVVE9NT0RFCisjZGVmaW5lIEVSQVNFX0lOX0FVVE9NT0RFICAgICAgICAgICAgICAgMQorI2VuZGlmCisKKyNpZm5kZWYgRkxBU0hfRk9SQ0VfMjRCSVRfQUREUkVTU0lORworI2RlZmluZSBGTEFTSF9GT1JDRV8yNEJJVF9BRERSRVNTSU5HICAgIDAgICAgICAgLy8gRm9yY2UgMjQgYml0IGFkZHJlc3NpbmcgZm9yIGRldmljZXMgPiAxMjhNYml0cworI2VuZGlmCisKKy8qCisgKiBXQVJOSU5HOiBUaGUgQXV0b2RldGVjdCBtb2RlIHdpbGwgZ3JlYXRseSBpbmNyZWFzZSBib3RoIHRoZSBjb2RlIGFuZCB0aGUgdXNlZCBSZXRSQU0gc2l6ZSEhISEKKyAqICAgICAgICAgIFVzZSB3aXRoIGV4dHJlbWUgY2F1dGlvbiEhCisgKi8KKyNpZiBkZ19jb25maWdGTEFTSF9BVVRPREVURUNUID09IDEKKyNkZWZpbmUgRkxBU0hfQVVUT0RFVEVDVCAgICAgICAgICAgICAgICAxICAgICAgIC8vIEVuYWJsZSBGbGFzaCBhdXRvLWRldGVjdGlvbgorI2Vsc2UKKyNpZiAhZGVmaW5lZChkZ19jb25maWdGTEFTSF9NQU5VRkFDVFVSRVJfSUQpCisjZXJyb3IgUGxlYXNlIGRlZmluZSBkZ19jb25maWdGTEFTSF9NQU5VRkFDVFVSRVJfSUQgISEhCisjZW5kaWYKKyNpZiAhZGVmaW5lZChkZ19jb25maWdGTEFTSF9ERVZJQ0VfVFlQRSkKKyNlcnJvciBQbGVhc2UgZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0RFVklDRV9UWVBFICEhIQorI2VuZGlmCisjaWYgIWRlZmluZWQoZGdfY29uZmlnRkxBU0hfREVOU0lUWSkKKyNlcnJvciBQbGVhc2UgZGVmaW5lIGRnX2NvbmZpZ0ZMQVNIX0RFTlNJVFkgISEhCisjZW5kaWYKKyNkZWZpbmUgRkxBU0hfQVVUT0RFVEVDVCAgICAgICAgICAgICAgICAwCisjZW5kaWYKKworI2lmIEZMQVNIX0FVVE9ERVRFQ1QgPT0gMQorI2luY2x1ZGUgInFzcGlfdzI1cTgwZXcuaCIKKyNpbmNsdWRlICJxc3BpX214MjV1NTEyNDUuaCIKKyNpbmNsdWRlICJxc3BpX2dkMjVscTgwYi5oIgorI2Vsc2UKKyNpZm5kZWYgZGdfY29uZmlnRkxBU0hfSEVBREVSX0ZJTEUKKyNlcnJvciBQbGVhc2UgZGVmaW5lIG1hY3JvIGRnX2NvbmZpZ0ZMQVNIX0hFQURFUl9GSUxFIHRvIHRoZSBoZWFkZXIgZmlsZSBuYW1lIHRoYXQgY29udGFpbnMgdGhlIHJlc3BlY3RpdmUgaW1wbGVtZW50YXRpb24KKyNlbmRpZgorI2luY2x1ZGUgZGdfY29uZmlnRkxBU0hfSEVBREVSX0ZJTEUKKyNlbmRpZgorCisjaWYgKEZMQVNIX0FVVE9ERVRFQ1QgPT0gMSkKKworc3RhdGljIGNvbnN0IHFzcGlfZmxhc2hfY29uZmlnX3QgKmZsYXNoX2NvbmZpZ190YWJsZVtdID0KK3sKKyAgICAmZmxhc2hfdzI1cTgwZXdfY29uZmlnLCAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uZQorICAgICZmbGFzaF9teDI1dTUxMjQ1X2NvbmZpZywKKyAgICAmZmxhc2hfZ2QyNWxxODBiX2NvbmZpZywKK307CisKK19fUkVUQUlORUQgc3RhdGljIHFzcGlfZmxhc2hfY29uZmlnX3QgZmxhc2hfYXV0b2RldGVjdF9jb25maWc7CisKK19fUkVUQUlORUQgcXNwaV9mbGFzaF9jb25maWdfdCAqZmxhc2hfY29uZmlnOworCisjZW5kaWYKKworCisKKy8qCisgKiBGdW5jdGlvbiBkZWZpbml0aW9ucworICovCisKKy8qKgorICogXGJyaWVmIFNldCBidXMgbW9kZSB0byBzaW5nbGUgb3IgUVVBRCBtb2RlLgorICoKKyAqIFxwYXJhbVtpbl0gbW9kZSBDYW4gYmUgc2luZ2xlIChIV19RU1BJX0JVU19NT0RFX1NJTkdMRSkgb3IgcXVhZCAoSFdfUVNQSV9CVVNfTU9ERV9RVUFEKSBtb2RlLgorICoKKyAqIFxub3RlIERVQUwgbW9kZSBwYWdlIHByb2dyYW0gc28gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERSBtb2RlKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpCisgICAgeworICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTEJVU19SRUcgPSBSRUdfTVNLKFFTUElDLCBRU1BJQ19DVFJMQlVTX1JFRywgUVNQSUNfU0VUX1NJTkdMRSk7CisgICAgICAgIFFTUElDLT5RU1BJQ19DVFJMTU9ERV9SRUcgfD0KKyAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQ1RSTE1PREVfUkVHLCBRU1BJQ19JTzJfT0VOLCAxKSB8CisgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0NUUkxNT0RFX1JFRywgUVNQSUNfSU8yX0RBVCwgMSkgfAorICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19DVFJMTU9ERV9SRUcsIFFTUElDX0lPM19PRU4sIDEpIHwKKyAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQ1RSTE1PREVfUkVHLCBRU1BJQ19JTzNfREFULCAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZiBRVUFEX01PREUKKyAgICAgICAgUVNQSUMtPlFTUElDX0NUUkxCVVNfUkVHID0gUkVHX01TSyhRU1BJQywgUVNQSUNfQ1RSTEJVU19SRUcsIFFTUElDX1NFVF9RVUFEKTsKKyAgICAgICAgUVNQSUMtPlFTUElDX0NUUkxNT0RFX1JFRyAmPQorICAgICAgICAgICAgfihCSVRTMzIoUVNQSUMsIFFTUElDX0NUUkxNT0RFX1JFRywgUVNQSUNfSU8yX09FTiwgMSkgfAorICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0NUUkxNT0RFX1JFRywgUVNQSUNfSU8zX09FTiwgMSkpOworI2VuZGlmCisgICAgfQorfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIG1vZGUgb2YgdGhlIFFTUEkgY29udHJvbGxlciAobWFudWFsIG9yIGF1dG8pCisgKgorICogXHBhcmFtW2luXSBhdXRvbW9kZSBUcnVlIGZvciBhdXRvIGFuZCBmYWxzZSBmb3IgbWFudWFsIG1vZGUgc2V0dGluZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHFzcGlfc2V0X2F1dG9tb2RlKGJvb2wgYXV0b21vZGUpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIHFzcGlfc2V0X2F1dG9tb2RlKGJvb2wgYXV0b21vZGUpCit7CisgICAgUkVHX1NFVEYoUVNQSUMsIFFTUElDX0NUUkxNT0RFX1JFRywgUVNQSUNfQVVUT19NRCwgYXV0b21vZGUpOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSB0byB0aGUgRmxhc2ggdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyCisgKgorICogXHBhcmFtW2luXSB3YnVmIFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCisgKiBccGFyYW1baW5dIHdsZW4gVGhlIG51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuCisgKgorICogXG5vdGUgVGhlIGRhdGEgYXJlIHRyYW5zZmVycmVkIGFzIGJ5dGVzICg4IGJpdHMgd2lkZSkuIE5vIG9wdGltaXphdGlvbiBpcyBkb25lIGluIHRyeWluZyB0byB1c2UKKyAqICAgICAgIGZhc3RlciBhY2Nlc3MgbWV0aG9kcyAoaS5lLiB0cmFuc2ZlciB3b3JkcyBpbnN0ZWFkIG9mIGJ5dGVzIHdoZW5ldmVyIGl0IGlzIHBvc3NpYmxlKS4KKyAqLworUVNQSV9TRUNUSU9OIHN0YXRpYyB2b2lkIHFzcGlfd3JpdGUoY29uc3QgdWludDhfdCAqd2J1Ziwgc2l6ZV90IHdsZW4pCit7CisgICAgc2l6ZV90IGk7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdsZW47ICsraSkKKyAgICB7CisgICAgICAgIGh3X3FzcGlfd3JpdGU4KHdidWZbaV0pOworICAgIH0KKworICAgIGh3X3FzcGlfY3NfZGlzYWJsZSgpOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBGbGFzaCBhbmQgdGhlbiByZWFkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYnl0ZXMKKyAqICAgICAgIGZyb20gdGhlIEZsYXNoIGluIG9uZSB0cmFuc2FjdGlvbgorICoKKyAqIFxwYXJhbVtpbl0gd2J1ZiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIFxwYXJhbVtpbl0gd2xlbiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4KKyAqIFxwYXJhbVtpbl0gcmJ1ZiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0aGFuIHRoZSByZWFkIGRhdGEgYXJlIHN0b3JlZAorICogXHBhcmFtW2luXSBybGVuIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZAorICoKKyAqIFxub3RlIFRoZSBkYXRhIGFyZSB0cmFuc2ZlcnJlZCBhcyBieXRlcyAoOCBiaXRzIHdpZGUpLiBObyBvcHRpbWl6YXRpb24gaXMgZG9uZSBpbiB0cnlpbmcgdG8gdXNlCisgKiAgICAgICBmYXN0ZXIgYWNjZXNzIG1ldGhvZHMgKGkuZS4gdHJhbnNmZXIgd29yZHMgaW5zdGVhZCBvZiBieXRlcyB3aGVuZXZlciBpdCBpcyBwb3NzaWJsZSkuCisgKi8KK1FTUElfU0VDVElPTiBzdGF0aWMgdm9pZCBxc3BpX3RyYW5zYWN0KGNvbnN0IHVpbnQ4X3QgKndidWYsIHNpemVfdCB3bGVuLCB1aW50OF90ICpyYnVmLCBzaXplX3QgcmxlbikKK3sKKyAgICBzaXplX3QgaTsKKworICAgIGh3X3FzcGlfY3NfZW5hYmxlKCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2xlbjsgKytpKQorICAgIHsKKyAgICAgICAgaHdfcXNwaV93cml0ZTgod2J1ZltpXSk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHJsZW47ICsraSkKKyAgICB7CisgICAgICAgIHJidWZbaV0gPSBod19xc3BpX3JlYWQ4KCk7CisgICAgfQorCisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7Cit9CisKK1FTUElfU0VDVElPTiBzdGF0aWMgaW5saW5lIGJvb2wgZmxhc2hfZXJhc2VfcHJvZ3JhbV9pbl9wcm9ncmVzcyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK1FTUElfU0VDVElPTiBzdGF0aWMgaW5saW5lIGJvb2wgZmxhc2hfZXJhc2VfcHJvZ3JhbV9pbl9wcm9ncmVzcyh2b2lkKQoreworICAgIF9fREJHX1FTUElfVk9MQVRJTEVfXyB1aW50OF90IHN0YXR1czsKKyAgICB1aW50OF90IGNtZFtdID0geyBmbGFzaF9jb25maWctPnJlYWRfZXJhc2VfcHJvZ3Jlc3Nfb3Bjb2RlIH07CisKKyAgICBxc3BpX3RyYW5zYWN0KGNtZCwgMSwgJnN0YXR1cywgMSk7CisKKyAgICByZXR1cm4gKChzdGF0dXMgJiAoMSA8PCBmbGFzaF9jb25maWctPmVyYXNlX2luX3Byb2dyZXNzX2JpdCkpICE9IDApID09IGZsYXNoX2NvbmZpZy0+ZXJhc2VfaW5fcHJvZ3Jlc3NfYml0X2hpZ2hfbGV2ZWw7Cit9CisKK1FTUElfU0VDVElPTiBzdGF0aWMgaW5saW5lIGJvb2wgZmxhc2hfaXNfYnVzeSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK1FTUElfU0VDVElPTiBzdGF0aWMgaW5saW5lIGJvb2wgZmxhc2hfaXNfYnVzeSh2b2lkKQoreworICAgIHJldHVybiAoZmxhc2hfcmVhZF9zdGF0dXNfcmVnaXN0ZXIoKSAmIEZMQVNIX1NUQVRVU19CVVNZX01BU0spICE9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIEV4aXQgZnJvbSBjb250aW51b3VzIG1vZGUuCisgKi8KK1FTUElfU0VDVElPTiBzdGF0aWMgaW5saW5lIHZvaWQgZmxhc2hfcmVzZXRfY29udGludW91c19tb2RlKEhXX1FTUElfQlJFQUtfU0VRX1NJWkUgYnJlYWtfc2VxX3NpemUpIF9fYXR0cmlidXRlX18oKAorICAgICAgICAgICAgYWx3YXlzX2lubGluZSkpOworCitRU1BJX1NFQ1RJT04gc3RhdGljIGlubGluZSB2b2lkIGZsYXNoX3Jlc2V0X2NvbnRpbnVvdXNfbW9kZShIV19RU1BJX0JSRUFLX1NFUV9TSVpFIGJyZWFrX3NlcV9zaXplKQoreworICAgIGh3X3FzcGlfY3NfZW5hYmxlKCk7CisgICAgaHdfcXNwaV93cml0ZTgoQ01EX0VYSVRfQ09OVElOVU9VU19NT0RFKTsKKworICAgIGlmIChicmVha19zZXFfc2l6ZSA9PSBIV19RU1BJX0JSRUFLX1NFUV9TSVpFXzJCKQorICAgIHsKKyAgICAgICAgaHdfcXNwaV93cml0ZTgoQ01EX0VYSVRfQ09OVElOVU9VU19NT0RFKTsKKyAgICB9CisKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKKworICAgIHdoaWxlIChmbGFzaF9pc19idXN5KCkpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgRGV2aWNlIElEIHdoZW4gRmxhc2ggaXMgbm90IGluIFBvd2VyIERvd24gbW9kZQorICoKKyAqIFxyZXR1cm4gdWludDhfdCBUaGUgRGV2aWNlIElEIG9mIHRoZSBGbGFzaAorICoKKyAqIFxub3RlIFRoZSBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIEZsYXNoIGV4ZWN1dGVzIHRoZSBjb21tYW5kLgorICovCitRU1BJX1NFQ1RJT04gX19hdHRyaWJ1dGVfXygodW51c2VkKSkgc3RhdGljIHVpbnQ4X3QgZmxhc2hfZ2V0X2lkKHZvaWQpCit7CisgICAgdWludDhfdCBpZDsKKworICAgIGh3X3FzcGlfY3NfZW5hYmxlKCk7CisgICAgaHdfcXNwaV93cml0ZTMyKENNRF9SRUxFQVNFX1BPV0VSX0RPV04pOworICAgIGlkID0gaHdfcXNwaV9yZWFkOCgpOworICAgIGh3X3FzcGlfY3NfZGlzYWJsZSgpOworCisgICAgd2hpbGUgKGZsYXNoX2lzX2J1c3koKSk7CisKKyAgICByZXR1cm4gaWQ7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBXRUwgKFdyaXRlIEVuYWJsZSBMYXRjaCkgYml0IG9mIHRoZSBTdGF0dXMgUmVnaXN0ZXIgb2YgdGhlIEZsYXNoCisgKiBcZGV0YWlscyBUaGUgV0VMIGJpdCBtdXN0IGJlIHNldCBwcmlvciB0byBldmVyeSBQYWdlIFByb2dyYW0sIFF1YWQgUGFnZSBQcm9ncmFtLCBTZWN0b3IgRXJhc2UsCisgKiAgICAgICBCbG9jayBFcmFzZSwgQ2hpcCBFcmFzZSwgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyIGFuZCBFcmFzZS9Qcm9ncmFtIFNlY3VyaXR5IFJlZ2lzdGVycworICogICAgICAgaW5zdHJ1Y3Rpb24uIEluIHRoZSBjYXNlIG9mIFdyaXRlIFN0YXR1cyBSZWdpc3RlciBjb21tYW5kLCBhbnkgc3RhdHVzIGJpdHMgd2lsbCBiZSB3cml0dGVuCisgKiAgICAgICBhcyBub24tdm9sYXRpbGUgYml0cy4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGJsb2NrcyB1bnRpbCB0aGUgRmxhc2ggaGFzIHByb2Nlc3NlZCB0aGUgY29tbWFuZCBhbmQgaXQgd2lsbCBiZSByZXBlYXRlZCBpZiwKKyAqICAgICAgIGZvciBhbnkgcmVhc29uLCB0aGUgY29tbWFuZCB3YXMgbm90IHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBieSB0aGUgRmxhc2guCisgKi8KK1FTUElfU0VDVElPTiBzdGF0aWMgdm9pZCBmbGFzaF93cml0ZV9lbmFibGUodm9pZCkKK3sKKyAgICBfX0RCR19RU1BJX1ZPTEFUSUxFX18gdWludDhfdCBzdGF0dXM7CisgICAgdWludDhfdCBjbWRbXSA9IHsgQ01EX1dSSVRFX0VOQUJMRSB9OworCisgICAgZG8KKyAgICB7CisgICAgICAgIHFzcGlfd3JpdGUoY21kLCAxKTsKKworICAgICAgICAvKiBWZXJpZnkgKi8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gZmxhc2hfcmVhZF9zdGF0dXNfcmVnaXN0ZXIoKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoc3RhdHVzICYgRkxBU0hfU1RBVFVTX0JVU1lfTUFTSyk7CisgICAgfQorICAgIHdoaWxlICghKHN0YXR1cyAmIEZMQVNIX1NUQVRVU19XRUxfTUFTSykpOworfQorCisvKioKKyAqIFxicmllZiBSZWFkIHRoZSBTdGF0dXMgUmVnaXN0ZXIgMSBvZiB0aGUgRmxhc2gKKyAqCisgKiBccmV0dXJuIHVpbnQ4X3QgVGhlIHZhbHVlIG9mIHRoZSBTdGF0dXMgUmVnaXN0ZXIgMSBvZiB0aGUgRmxhc2guCisgKi8KK1FTUElfU0VDVElPTiBzdGF0aWMgdWludDhfdCBmbGFzaF9yZWFkX3N0YXR1c19yZWdpc3Rlcih2b2lkKQoreworICAgIF9fREJHX1FTUElfVk9MQVRJTEVfXyB1aW50OF90IHN0YXR1czsKKyAgICB1aW50OF90IGNtZFtdID0geyBDTURfUkVBRF9TVEFUVVNfUkVHSVNURVIgfTsKKworICAgIHFzcGlfdHJhbnNhY3QoY21kLCAxLCAmc3RhdHVzLCAxKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogXGJyaWVmIFdyaXRlIHRoZSBTdGF0dXMgUmVnaXN0ZXIgMSBvZiB0aGUgRmxhc2gKKyAqCisgKiBccGFyYW1baW5dIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSB3cml0dGVuLgorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gYmxvY2tzIHVudGlsIHRoZSBGbGFzaCBoYXMgcHJvY2Vzc2VkIHRoZSBjb21tYW5kLiBObyB2ZXJpZmljYXRpb24gdGhhdCB0aGUKKyAqICAgICAgICB2YWx1ZSBoYXMgYmVlbiBhY3R1YWxseSB3cml0dGVuIGlzIGRvbmUgdGhvdWdoLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGRlY2lkZSB3aGV0aGVyCisgKiAgICAgICAgc3VjaCB2ZXJpZmljYXRpb24gaXMgbmVlZGVkIG9yIG5vdCBhbmQgZXhlY3V0ZSBpdCBvbiBpdHMgb3duLgorICovCitRU1BJX1NFQ1RJT04gX19hdHRyaWJ1dGVfXygodW51c2VkKSkgc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfc3RhdHVzX3JlZ2lzdGVyKHVpbnQ4X3QgdmFsdWUpCit7CisgICAgdWludDhfdCBjbWRbMl0gPSB7IENNRF9XUklURV9TVEFUVVNfUkVHSVNURVIsIHZhbHVlIH07CisKKyAgICBxc3BpX3dyaXRlKGNtZCwgMik7CisKKyAgICAvKiBXYWl0IGZvciB0aGUgRmxhc2ggdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworICAgIHdoaWxlIChmbGFzaF9pc19idXN5KCkpOworfQorCisvKioKKyAqIFxicmllZiBGYXN0IGNvcHkgb2YgYSBidWZmZXIgdG8gYSBGSUZPCisgKiBcZGV0YWlscyBJbXBsZW1lbnRhdGlvbiBvZiBhIGZhc3QgY29weSBvZiB0aGUgY29udGVudHMgb2YgYSBidWZmZXIgdG8gYSBGSUZPIGluIGFzc2VtYmx5LiBBbGwKKyAqICAgICAgICBhZGRyZXNzZXMgYXJlIHdvcmQgYWxpZ25lZC4KKyAqCisgKiBccGFyYW1baW5dIHN0YXJ0IFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCisgKiBccGFyYW1baW5dIGVuZCBQb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBGSUZPCisgKgorICogXHdhcm5pbmcgTm8gdmFsaWRpdHkgY2hlY2tzIGFyZSBtYWRlISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBtYWtlIHN1cmUgdGhhdAorICogICAgICAgIHNhbmUgdmFsdWVzIGFyZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmYXN0X3dyaXRlX3RvX2ZpZm8zMih1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCB1aW50MzJfdCBkZXN0KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYXN0X3dyaXRlX3RvX2ZpZm8zMih1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLCB1aW50MzJfdCBkZXN0KQoreworICAgIF9fYXNtIHZvbGF0aWxlKCJjb3B5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGxkbWlhICVbc3RhcnRdISwge3IzfSAgICAgICAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBzdHIgcjMsIFslW2Rlc3RdXSAgICAgICAgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgICIgICAgICAgY21wICVbc3RhcnRdLCAlW2VuZF0gICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJsdCBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICBbc3RhcnRdICJsIihzdGFydCksIFtlbmRdICJyIihlbmQpLCBbZGVzdF0gImwiKGRlc3QpIDogICAgLyogaW5wdXRzICglMCwgJTEsICUyKSAqLworICAgICAgICAgICAgICAgICAgICJyMyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlcnMgdGhhdCBhcmUgZGVzdHJveWVkICovCit9CisKKy8qKgorICogXGJyaWVmIFdyaXRlIGRhdGEgKHVwIHRvIDEgcGFnZSkgdG8gRmxhc2gKKyAqCisgKiBccGFyYW1baW5dIGFkZHIgVGhlIGFkZHJlc3Mgb2YgdGhlIEZsYXNoIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgd3JpdHRlbi4gSXQgbWF5IGJlIGFueXdoZXJlIGluIGEKKyAqICAgICAgICBwYWdlLgorICogXHBhcmFtW2luXSBidWYgUG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgZGF0YSB0byBiZSB3cml0dGVuLgorICogXHBhcmFtW2luXSBzaXplIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBccmV0dXJuIHNpemVfdCBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogXHdhcm5pbmcgVGhlIGJvdW5kYXJ5IG9mIHRoZSBwYWdlIHdoZXJlIGFkZHIgYmVsb25ncyB0bywgd2lsbCBub3QgYmUgY3Jvc3NlZCEgVGhlIGNhbGxlciBzaG91bGQKKyAqICAgICAgICBpc3N1ZSBhbm90aGVyIGZsYXNoX3dyaXRlX3BhZ2UoKSBjYWxsIGluIG9yZGVyIHRvIHdyaXRlIHRoZSByZW1haW5pbmcgZGF0YSB0byB0aGUgbmV4dAorICogICAgICAgIHBhZ2UuCisgKi8KK1FTUElfU0VDVElPTiBzdGF0aWMgc2l6ZV90IGZsYXNoX3dyaXRlX3BhZ2UodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKQoreworICAgIHNpemVfdCBpID0gMDsKKyAgICBzaXplX3Qgb2RkID0gKCh1aW50MzJfdCkgYnVmKSAmIDM7CisgICAgc2l6ZV90IHNpemVfYWxpZ25lZDMyOworICAgIHNpemVfdCB0bXA7CisKKyAgICBEQkdfU0VUX0hJR0goRkxBU0hfREVCVUcsIEZMQVNIREJHX1BBR0VfUFJPRyk7CisKKyAgICBmbGFzaF93cml0ZV9lbmFibGUoKTsKKworICAgIC8qIFJlZHVjZSBtYXggd3JpdGUgc2l6ZSwgdGhhdCBjYW4gcmVkdWNlIGludGVycnVwdCBsYXRlbmN5IHRpbWUgKi8KKyAgICBpZiAoc2l6ZSA+IEZMQVNIX01BWF9XUklURV9TSVpFKQorICAgIHsKKyAgICAgICAgc2l6ZSA9IEZMQVNIX01BWF9XUklURV9TSVpFOworICAgIH0KKworICAgIC8qIE1ha2Ugc3VyZSB3cml0ZSB3aWxsIG5vdCBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisgICAgdG1wID0gMjU2IC0gKGFkZHIgJiAweEZGKTsKKworICAgIGlmIChzaXplID4gdG1wKQorICAgIHsKKyAgICAgICAgc2l6ZSA9IHRtcDsKKyAgICB9CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworCisgICAgaWYgKGZsYXNoX2NvbmZpZy0+YWRkcmVzc19zaXplID09IEhXX1FTUElfQUREUl9TSVpFXzMyKQorICAgIHsKKyAgICAgICAgaHdfcXNwaV93cml0ZTgoZmxhc2hfY29uZmlnLT5wYWdlX3Byb2dyYW1fb3Bjb2RlKTsKKyNpZiBRVUFEX01PREUKKworICAgICAgICBpZiAoZmxhc2hfY29uZmlnLT5xdWFkX3BhZ2VfcHJvZ3JhbV9hZGRyZXNzID09IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfUVVBRCk7CisgICAgICAgIH0KKworI2VuZGlmCisgICAgICAgIGh3X3FzcGlfd3JpdGUzMigoYWRkciA+PiAyNCkgfCAoKGFkZHIgPj4gOCkgJiAweEZGMDApIHwgKChhZGRyIDw8IDgpICYgMHhGRjAwMDApIHwgKGFkZHIgPDwgMjQpKTsKKyNpZiBRVUFEX01PREUKKworICAgICAgICBpZiAoZmxhc2hfY29uZmlnLT5xdWFkX3BhZ2VfcHJvZ3JhbV9hZGRyZXNzID09IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1FVQUQpOworICAgICAgICB9CisKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZmxhc2hfY29uZmlnLT5xdWFkX3BhZ2VfcHJvZ3JhbV9hZGRyZXNzID09IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3FzcGlfd3JpdGU4KGZsYXNoX2NvbmZpZy0+cGFnZV9wcm9ncmFtX29wY29kZSk7CisjaWYgUVVBRF9NT0RFCisgICAgICAgICAgICBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1FVQUQpOworI2VuZGlmCisgICAgICAgICAgICBod19xc3BpX3dyaXRlMTYoKChhZGRyID4+IDE2KSAmIDB4RkYpIHwgKGFkZHIgJiAweEZGMDApKTsKKyAgICAgICAgICAgIGh3X3FzcGlfd3JpdGU4KGFkZHIgJiAweEZGKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3FzcGlfd3JpdGUzMihDTURfUVVBRF9QQUdFX1BST0dSQU0gfCAoKGFkZHIgPj4gOCkgJiAweEZGMDApIHwgKChhZGRyIDw8IDgpICYgMHhGRjAwMDApIHwgKGFkZHIgPDwgMjQpKTsKKyNpZiBRVUFEX01PREUKKyAgICAgICAgICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfUVVBRCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvZGQpCisgICAgeworICAgICAgICBvZGQgPSA0IC0gb2RkOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvZGQgJiYgaSA8IHNpemU7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgaHdfcXNwaV93cml0ZTgoYnVmW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNpemVfYWxpZ25lZDMyID0gKChzaXplIC0gaSkgJiB+MHgzKTsKKworICAgIGlmIChzaXplX2FsaWduZWQzMikKKyAgICB7CisgICAgICAgIGZhc3Rfd3JpdGVfdG9fZmlmbzMyKCh1aW50MzJfdCkoYnVmICsgaSksICh1aW50MzJfdCkoYnVmICsgaSArIHNpemVfYWxpZ25lZDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSAmIChRU1BJQy0+UVNQSUNfV1JJVEVEQVRBX1JFRykpOworICAgICAgICBpICs9IHNpemVfYWxpZ25lZDMyOworICAgIH0KKworICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKQorICAgIHsKKyAgICAgICAgaHdfcXNwaV93cml0ZTgoYnVmW2ldKTsKKyAgICB9CisKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKKworICAgIERCR19TRVRfTE9XKEZMQVNIX0RFQlVHLCBGTEFTSERCR19QQUdFX1BST0cpOworCisjaWYgUVVBRF9NT0RFCisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpOworI2VuZGlmCisKKyAgICByZXR1cm4gaTsKK30KKworLyoqCisgKiBcYnJpZWYgRXJhc2UgYSBzZWN0b3Igb2YgdGhlIEZsYXNoCisgKgorICogXHBhcmFtW2luXSBhZGRyIFRoZSBhZGRyZXNzIG9mIHRoZSBzZWN0b3IgdG8gYmUgZXJhc2VkLgorICoKKyAqIFxub3RlIFRoaXMgZnVuY3Rpb24gYmxvY2tzIHVudGlsIHRoZSBGbGFzaCBoYXMgcHJvY2Vzc2VkIHRoZSBjb21tYW5kLgorICovCitRU1BJX1NFQ1RJT04gX19hdHRyaWJ1dGVfXygodW51c2VkKSkgc3RhdGljIHZvaWQgZmxhc2hfZXJhc2Vfc2VjdG9yKHVpbnQzMl90IGFkZHIpCit7CisgICAgZmxhc2hfd3JpdGVfZW5hYmxlKCk7CisKKyAgICBpZiAoZmxhc2hfY29uZmlnLT5hZGRyZXNzX3NpemUgPT0gSFdfUVNQSV9BRERSX1NJWkVfMzIpCisgICAgeworICAgICAgICB1aW50OF90IGNtZFs1XSA9IHsgZmxhc2hfY29uZmlnLT5lcmFzZV9vcGNvZGUsIGFkZHIgPj4gMjQsIGFkZHIgPj4gMTYsIGFkZHIgPj4gIDgsIGFkZHIgfTsKKyAgICAgICAgcXNwaV93cml0ZShjbWQsIDUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50OF90IGNtZFs0XSA9IHsgZmxhc2hfY29uZmlnLT5lcmFzZV9vcGNvZGUsIGFkZHIgPj4gMTYsIGFkZHIgPj4gIDgsIGFkZHIgfTsKKyAgICAgICAgcXNwaV93cml0ZShjbWQsIDQpOworICAgIH0KKworCisgICAgLyogV2FpdCBmb3IgdGhlIEZsYXNoIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKyAgICB3aGlsZSAoZmxhc2hfZXJhc2VfcHJvZ3JhbV9pbl9wcm9ncmVzcygpKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIEZsYXNoIGNhbiBhY2NlcHQgY29tbWFuZHMKKyAqCisgKiBccmV0dXJuIGJvb2wgVHJ1ZSBpZiB0aGUgRmxhc2ggaXMgbm90IGJ1c3kgZWxzZSBmYWxzZS4KKyAqCisgKi8KK1FTUElfU0VDVElPTl9OT19JTkxJTkUgc3RhdGljIGJvb2wgcXNwaV93cml0YWJsZSh2b2lkKQoreworICAgIGJvb2wgd3JpdGFibGU7CisKKyAgICAvKgorICAgICAqIEZyb20gbm93IG9uIFFTUEkgbWF5IG5vdCBiZSBhdmFpbGFibGUsIHR1cm4gb2ZmIGludGVycnVwdHMuCisgICAgICovCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisKKyAgICAvKgorICAgICAqIFR1cm4gb24gY29tbWFuZCBlbnRyeSBtb2RlLgorICAgICAqLworICAgIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBmbGFzaCBpcyByZWFkeS4KKyAgICAgKi8KKyAgICB3cml0YWJsZSA9ICEoZmxhc2hfaXNfYnVzeSgpKTsKKworICAgIC8qCisgICAgICogUmVzdG9yZSBhdXRvIG1vZGUuCisgICAgICovCisgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIC8qCisgICAgICogTGV0IG90aGVyIGNvZGUgdG8gYmUgZXhlY3V0ZWQgaW5jbHVkaW5nIFFTUEkgb25lLgorICAgICAqLworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCisgICAgcmV0dXJuIHdyaXRhYmxlOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHN0YXR1cyBvZiBhbiBFcmFzZSB3aGVuIGl0IGlzIGRvbmUgYXV0b21hdGljYWxseSBieSB0aGUgUVNQSSBjb250cm9sbGVyCisgKgorICogXHJldHVybiB1aW50OF90IFRoZSBzdGF0dXMgb2YgdGhlIEVyYXNlCisgKiAgICAgICAgMDogTm8gRXJhc2UKKyAqICAgICAgICAxOiBQZW5kaW5nIGVyYXNlIHJlcXVlc3QKKyAqICAgICAgICAyOiBFcmFzZSBwcm9jZWR1cmUgaXMgcnVubmluZworICogICAgICAgIDM6IFN1c3BlbmRlZCBFcmFzZSBwcm9jZWR1cmUKKyAqICAgICAgICA0OiBGaW5pc2hpbmcgdGhlIEVyYXNlIHByb2NlZHVyZQorICovCitRU1BJX1NFQ1RJT04gc3RhdGljIHVpbnQ4X3QgcXNwaV9nZXRfZXJhc2Vfc3RhdHVzKHZvaWQpCit7CisgICAgUVNQSUMtPlFTUElDX0NIQ0tFUkFTRV9SRUcgPSAwOworCisgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKEVSQVNFQ1RSTCwgRVJTX1NUQVRFKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBhZGRyZXNzIHNpemUgdXNlZCBieSB0aGUgUVNQSSBjb250cm9sbGVyCisgKgorICogXHJldHVybiBUaGUgYWRkcmVzcyBzaXplIHVzZWQgKEhXX1FTUElfQUREUl9TSVpFXzI0IG9yIEhXX1FTUElfQUREUl9TSVpFXzMyKS4KKyAqLworc3RhdGljIGlubGluZSBIV19RU1BJX0FERFJfU0laRSBxc3BpX2dldF9hZGRyZXNzX3NpemUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIEhXX1FTUElfQUREUl9TSVpFIHFzcGlfZ2V0X2FkZHJlc3Nfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiAoSFdfUVNQSV9BRERSX1NJWkUpSFdfUVNQSUNfUkVHX0dFVEYoQ1RSTE1PREUsIFVTRV8zMkJBKTsKK30KKworX19SRVRBSU5FRF9DT0RFIHZvaWQgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBUdXJuIG9mZiBhdXRvIG1vZGUgdG8gYWxsb3cgd3JpdGUuCisgICAgICovCisgICAgcXNwaV9zZXRfYXV0b21vZGUoZmFsc2UpOworCisgICAgLyoKKyAgICAgKiBTd2l0Y2ggdG8gc2luZ2xlIG1vZGUgZm9yIGNvbW1hbmQgZW50cnkuCisgICAgICovCisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpOworCisgICAgLyoKKyAgICAgKiBFeGl0IGNvbnRpbnVvdXMgbW9kZSAoUVBJIG1vZGUpLCBhZnRlciB0aGlzIHRoZSBmbGFzaCB3aWxsIGludGVycHJldCBjb21tYW5kcyBhZ2Fpbi4KKyAgICAgKi8KKyAgICBpZiAoZmxhc2hfY29uZmlnLT5zZW5kX29uY2UgIT0gMCkKKyAgICB7CisgICAgICAgIGZsYXNoX3Jlc2V0X2NvbnRpbnVvdXNfbW9kZShmbGFzaF9jb25maWctPmJyZWFrX3NlcV9zaXplKTsKKyAgICB9Cit9CisKKworX19SRVRBSU5FRF9DT0RFIHZvaWQgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUodm9pZCkKK3sKKyAgICBmbGFzaF9jb25maWctPmRlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyNpZiBRVUFEX01PREUKKyAgICBxc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1FVQUQpOworI2VuZGlmCisgICAgcXNwaV9zZXRfYXV0b21vZGUodHJ1ZSk7Cit9CisKKyNpZiAoZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUyA9PSAwKQorX19SRVRBSU5FRF9DT0RFIHZvaWQgZmxhc2hfZXJhc2Vfc2VjdG9yX21hbnVhbF9tb2RlKHVpbnQzMl90IGFkZHIpCit7CisgICAgLyoKKyAgICAgKiBUdXJuIG9uIGNvbW1hbmQgZW50cnkgbW9kZS4KKyAgICAgKi8KKyAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIC8qCisgICAgICogSXNzdWUgdGhlIGVyYXNlIHNlY3RvciBjb21tYW5kLgorICAgICAqLworICAgIGZsYXNoX3dyaXRlX2VuYWJsZSgpOworCisgICAgaWYgKGZsYXNoX2NvbmZpZy0+YWRkcmVzc19zaXplID09IEhXX1FTUElfQUREUl9TSVpFXzMyKQorICAgIHsKKyAgICAgICAgdWludDhfdCBjbWRbNV0gPSB7IGZsYXNoX2NvbmZpZy0+ZXJhc2Vfb3Bjb2RlLCBhZGRyID4+IDI0LCBhZGRyID4+IDE2LCBhZGRyID4+ICA4LCBhZGRyIH07CisgICAgICAgIHFzcGlfd3JpdGUoY21kLCA1KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWludDhfdCBjbWRbNF0gPSB7IGZsYXNoX2NvbmZpZy0+ZXJhc2Vfb3Bjb2RlLCBhZGRyID4+IDE2LCBhZGRyID4+ICA4LCBhZGRyIH07CisgICAgICAgIHFzcGlfd3JpdGUoY21kLCA0KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZsYXNoIHN0YXlzIGluIG1hbnVhbCBtb2RlLgorICAgICAqLworfQorCitfX1JFVEFJTkVEX0NPREUgc2l6ZV90IGZsYXNoX3Byb2dyYW1fcGFnZV9tYW51YWxfbW9kZSh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpCit7CisgICAgc2l6ZV90IHdyaXR0ZW4gPSBmbGFzaF93cml0ZV9wYWdlKGFkZHIsIGJ1Ziwgc2l6ZSk7CisKKyAgICAvKgorICAgICAqIEZsYXNoIHN0YXlzIGluIG1hbnVhbCBtb2RlLgorICAgICAqLworCisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKK19fUkVUQUlORURfQ09ERSBib29sIHFzcGlfY2hlY2tfcHJvZ3JhbV9lcmFzZV9pbl9wcm9ncmVzcyh2b2lkKQoreworICAgIHJldHVybiBmbGFzaF9pc19idXN5KCk7Cit9CisKK19fUkVUQUlORURfQ09ERSBib29sIHFzcGlfY2hlY2tfYW5kX3N1c3BlbmQodm9pZCkKK3sKKyAgICB1aW50OF90IGNtZFtdID0geyBmbGFzaF9jb25maWctPmVyYXNlX3N1c3BlbmRfb3Bjb2RlIH07CisgICAgYm9vbCBhbSA9IGh3X3FzcGlfZ2V0X2F1dG9tb2RlKCk7CisgICAgYm9vbCByZXQgPSB0cnVlOworCisgICAgaWYgKGFtKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVHVybiBvbiBjb21tYW5kIGVudHJ5IG1vZGUuCisgICAgICAgICAqLworICAgICAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFN1c3BlbmQgYWN0aW9uLgorICAgICAqLworICAgIERCR19TRVRfSElHSChGTEFTSF9ERUJVRywgRkxBU0hEQkdfU1VTUEVORF9BQ1RJT04pOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiBhbiBvcGVyYXRpb24gaXMgb25nb2luZy4KKyAgICAgKi8KKyAgICB3aGlsZSAoZmxhc2hfZXJhc2VfcHJvZ3JhbV9pbl9wcm9ncmVzcygpKQorICAgIHsKKyAgICAgICAgcXNwaV93cml0ZShjbWQsIDEpOworICAgIH0KKworICAgIGh3X2NwbV9kZWxheV91c2VjKEZMQVNIX1NVU19ERUxBWSk7ICAvLyBXYWl0IGZvciBTVVMgYml0IHRvIGJlIHVwZGF0ZWQKKworICAgIERCR19TRVRfTE9XKEZMQVNIX0RFQlVHLCBGTEFTSERCR19TVVNQRU5EX0FDVElPTik7CisKKyAgICBpZiAoZmxhc2hfY29uZmlnLT5pc19zdXNwZW5kZWQoKSA9PSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldCA9IGZhbHNlOworICAgIH0KKworICAgIC8qCisgICAgICogUmVzdG9yZSBhdXRvIG1vZGUuCisgICAgICovCisgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK19fUkVUQUlORURfQ09ERSB2b2lkIHFzcGlfcmVzdW1lKHZvaWQpCit7CisgICAgdWludDhfdCBjbWRbXSA9IHsgZmxhc2hfY29uZmlnLT5lcmFzZV9yZXN1bWVfb3Bjb2RlIH07CisKKyAgICBkbworICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVHVybiBvbiBjb21tYW5kIGVudHJ5IG1vZGUuCisgICAgICAgICAqLworICAgICAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiBzdXNwZW5kZWQuCisgICAgICAgICAqLworICAgICAgICBpZiAoZmxhc2hfY29uZmlnLT5pc19zdXNwZW5kZWQoKSA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBXYWl0IGZvciBmbGFzaCB0byBiZWNvbWUgcmVhZHkgYWdhaW4uCisgICAgICAgICAqLworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogUmVzdW1lIGFjdGlvbi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcXNwaV93cml0ZShjbWQsIDEpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2hlY2sgaWYgU1VTIGJpdCBpcyBjbGVhcmVkLgorICAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGZsYXNoX2NvbmZpZy0+aXNfc3VzcGVuZGVkKCkpOworICAgIH0KKyAgICB3aGlsZSAoMCk7CisKKyAgICAvKgorICAgICAqIEZsYXNoIHN0YXlzIGluIG1hbnVhbCBtb2RlLgorICAgICAqLworfQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEVyYXNlIHNlY3RvciAodmlhIENQTSBiYWNrZ3JvdW5kIHByb2Nlc3Npbmcgb3IgdXNpbmcgdGhlIFFTUEkgY29udHJvbGxlcikKKyAqCisgKiBcZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSBhIEZsYXNoIHNlY3RvciBlcmFzZSBvcGVyYXRpb24uIFRoZSBvcGVyYXRpb24gd2lsbCBlaXRoZXIgYmUKKyAqICAgICAgICBjYXJyaWVkIG91dCBpbW1lZGlhdGVseSAoZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUyBpcyBzZXQgdG8gMSkgb3IgaXQgd2lsbCBiZQorICogICAgICAgIGRlZmVycmVkIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBDUE0gd2hlbiB0aGUgc3lzdGVtIGJlY29tZXMgaWRsZSAod2hlbgorICogICAgICAgIGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMgaXMgc2V0IHRvIDAsIGRlZmF1bHQgdmFsdWUpLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZQorICogICAgICAgIGNhbGxlciB3aWxsIGJsb2NrIHVudGlsIHRoZSBDUE0gY29tcGxldGVzIHRoZSByZWdpc3RlcmVkIGVyYXNlIG9wZXJhdGlvbi4KKyAqCisgKiBccGFyYW1baW5dIGFkZHIgVGhlIGFkZHJlc3Mgb2YgdGhlIHNlY3RvciB0byBiZSBlcmFzZWQuCisgKi8KK1FTUElfU0VDVElPTl9OT19JTkxJTkUgc3RhdGljIHZvaWQgcXNwaV9lcmFzZV9zZWN0b3IodWludDMyX3QgYWRkcikKK3sKKyAgICAvKiBXYWl0IGZvciBwcmV2aW91cyBlcmFzZSB0byBlbmQgKi8KKyAgICB3aGlsZSAocXNwaV9nZXRfZXJhc2Vfc3RhdHVzKCkgIT0gMCkKKyAgICB7CisgICAgfQorCisgICAgaWYgKHFzcGlfZ2V0X2FkZHJlc3Nfc2l6ZSgpID09IEhXX1FTUElfQUREUl9TSVpFXzMyKQorICAgIHsKKyAgICAgICAgYWRkciA+Pj0gMTI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFkZHIgPj49IDQ7CisgICAgfQorCisgICAgLyogU2V0dXAgZXJhc2UgYmxvY2sgcGFnZSAqLworICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ1RSTCwgRVJTX0FERFIsIGFkZHIpOworCisgICAgLyogRmlyZSBlcmFzZSAqLworICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ1RSTCwgRVJBU0VfRU4sIDEpOworfQorCisvKioKKyAqIFxicmllZiBXcml0ZSBkYXRhIHRvIGEgcGFnZSBpbiB0aGUgRmxhc2ggKHZpYSBDUE0gYmFja2dyb3VuZCBwcm9jZXNzaW5nIG9yIHVzaW5nIHRoZSBRU1BJCisgKiAgICAgICAgY29udHJvbGxlcikKKyAqCisgKiBcZGV0YWlscyBUaGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSBhIEZsYXNoIHByb2dyYW0gcGFnZSBvcGVyYXRpb24uIFRoZSBvcGVyYXRpb24gd2lsbCBlaXRoZXIgYmUKKyAqICAgICAgICBjYXJyaWVkIG91dCBpbW1lZGlhdGVseSAoZGdfY29uZmlnRElTQUJMRV9CQUNLR1JPVU5EX0ZMQVNIX09QUyBpcyBzZXQgdG8gMSkgb3IgaXQgd2lsbCBiZQorICogICAgICAgIGRlZmVycmVkIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBDUE0gd2hlbiB0aGUgc3lzdGVtIGJlY29tZXMgaWRsZSAod2hlbgorICogICAgICAgIGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMgaXMgc2V0IHRvIDAsIGRlZmF1bHQgdmFsdWUpLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZQorICogICAgICAgIGNhbGxlciB3aWxsIGJsb2NrIHVudGlsIHRoZSBDUE0gY29tcGxldGVzIHRoZSByZWdpc3RlcmVkIHBhZ2UgcHJvZ3JhbSBvcGVyYXRpb24uCisgKgorICogXHBhcmFtW2luXSBhZGRyIFRoZSBhZGRyZXNzIG9mIHRoZSBGbGFzaCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uIEl0IG1heSBiZSBhbnl3aGVyZSBpbiBhCisgKiAgICAgICAgcGFnZS4KKyAqIFxwYXJhbVtpbl0gYnVmIFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqIFxwYXJhbVtpbl0gc2l6ZSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4uCisgKgorICogXHJldHVybiBzaXplX3QgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICoKKyAqIFx3YXJuaW5nIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0IGJ1ZiBkb2VzIG5vdCBwb2ludCB0byBRU1BJIG1hcHBlZCBtZW1vcnkuCisgKi8KK1FTUElfU0VDVElPTl9OT19JTkxJTkUgc3RhdGljIHNpemVfdCB3cml0ZV9wYWdlKHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkKK3sKKyAgICBzaXplX3Qgd3JpdHRlbjsKKworICAgIC8qCisgICAgICogRnJvbSBub3cgb24gUVNQSSBtYXkgbm90IGJlIGF2YWlsYWJsZSwgdHVybiBvZiBpbnRlcnJ1cHRzLgorICAgICAqLworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworCisgICAgLyoKKyAgICAgKiBUdXJuIG9uIGNvbW1hbmQgZW50cnkgbW9kZS4KKyAgICAgKi8KKyAgICBmbGFzaF9hY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIC8qCisgICAgICogV3JpdGUgZGF0YSBpbnRvIHRoZSBwYWdlIG9mIHRoZSBGbGFzaC4KKyAgICAgKi8KKyAgICB3cml0dGVuID0gZmxhc2hfd3JpdGVfcGFnZShhZGRyLCBidWYsIHNpemUpOworCisgICAgLyogV2FpdCBmb3IgdGhlIEZsYXNoIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKyAgICB3aGlsZSAoZmxhc2hfZXJhc2VfcHJvZ3JhbV9pbl9wcm9ncmVzcygpKTsKKworICAgIC8qCisgICAgICogUmVzdG9yZSBhdXRvIG1vZGUuCisgICAgICovCisgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIC8qCisgICAgICogTGV0IG90aGVyIGNvZGUgdG8gYmUgZXhlY3V0ZWQgaW5jbHVkaW5nIFFTUEkgb25lLgorICAgICAqLworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKKy8qKgorICogXGJyaWVmIEVyYXNlIGEgc2VjdG9yIG9mIHRoZSBGbGFzaAorICoKKyAqIFxkZXRhaWxzIFRoZSB0aW1lIGFuZCB0aGUgd2F5IHRoYXQgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGNhcnJpZWQgb3V0IGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZworICogICAgICAgIHNldHRpbmdzOgorICogICAgICAgIEVSQVNFX0lOX0FVVE9NT0RFID0gMDogdGhlIGNvbW1hbmQgaXMgaXNzdWVkIGltbWVkaWF0ZWx5IGluIG1hbnVhbCBtb2RlCisgKiAgICAgICAgRVJBU0VfSU5fQVVUT01PREUgPSAxOgorICogICAgICAgICAgICAgIGRnX2NvbmZpZ0RJU0FCTEVfQkFDS0dST1VORF9GTEFTSF9PUFMgPSAwOiB0aGUgb3BlcmF0aW9uIGlzIGV4ZWN1dGVkIG1hbnVhbGx5IGJ5IHRoZQorICogICAgICAgICAgICAgICAgICAgICAgQ1BNIHdoZW4gdGhlIHN5c3RlbSBiZWNvbWVzIGlkbGUKKyAqICAgICAgICAgICAgICBkZ19jb25maWdESVNBQkxFX0JBQ0tHUk9VTkRfRkxBU0hfT1BTID0gMTogdGhlIG9wZXJhdGlvbiBpcyBleGVjdXRlZCBhdXRvbWF0aWNhbGx5CisgKiAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgUVNQSSBjb250cm9sbGVyLgorICoKKyAqIFxwYXJhbVtpbl0gYWRkciBUaGUgYWRkcmVzcyBvZiB0aGUgc2VjdG9yIHRvIGJlIGVyYXNlZC4KKyAqLworUVNQSV9TRUNUSU9OX05PX0lOTElORSBzdGF0aWMgdm9pZCBlcmFzZV9zZWN0b3IodWludDMyX3QgYWRkcikKK3sKKyNpZiBFUkFTRV9JTl9BVVRPTU9ERQorICAgIC8qCisgICAgICogRXJhc2Ugc2VjdG9yIGluIGF1dG9tb2RlCisgICAgICovCisgICAgcXNwaV9lcmFzZV9zZWN0b3IoYWRkcik7CisKKyAgICAvKgorICAgICAqIFdhaXQgZm9yIGVyYXNlIHRvIGZpbmlzaAorICAgICAqLworICAgIHdoaWxlIChxc3BpX2dldF9lcmFzZV9zdGF0dXMoKSkKKyAgICB7CisgICAgfQorCisjZWxzZQorICAgIC8qCisgICAgICogRnJvbSBub3cgb24gUVNQSSBtYXkgbm90IGJlIGF2YWlsYWJsZSwgdHVybiBvZiBpbnRlcnJ1cHRzLgorICAgICAqLworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworCisgICAgLyoKKyAgICAgKiBUdXJuIG9mZiBhdXRvIG1vZGUgdG8gYWxsb3cgd3JpdGUuCisgICAgICovCisgICAgcXNwaV9zZXRfYXV0b21vZGUoZmFsc2UpOworCisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpOworCisgICAgLyoKKyAgICAgKiBHZXQgdGhlIEZsYXNoIG91dCBvZiBQb3dlciBEb3duIG1vZGUuCisgICAgICovCisgICAgZmxhc2hfcmVsZWFzZV9wb3dlcl9kb3duKCk7CisKKyAgICAvKgorICAgICAqIEV4aXQgY29udGludW91cyBtb2RlLCBhZnRlciB0aGlzIHRoZSBmbGFzaCB3aWxsIGludGVycHJldCBjb21tYW5kcyBhZ2Fpbi4KKyAgICAgKi8KKyAgICBmbGFzaF9yZXNldF9jb250aW51b3VzX21vZGUoZmxhc2hfY29uZmlnLT5icmVha19zZXFfc2l6ZSk7CisKKyAgICAvKgorICAgICAqIEV4ZWN1dGUgZXJhc2UgY29tbWFuZC4KKyAgICAgKi8KKyAgICBmbGFzaF9lcmFzZV9zZWN0b3IoYWRkcik7CisKKyAgICAvKgorICAgICAqIFJlc3RvcmUgYXV0byBtb2RlLgorICAgICAqLworICAgIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICAvKgorICAgICAqIExldCBvdGhlciBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluY2x1ZGluZyBRU1BJIG9uZS4KKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCit1aW50MzJfdCBxc3BpX2F1dG9tb2RlX2dldF9jb2RlX2J1ZmZlcl9zaXplKHZvaWQpCit7CisgICAgLyogUmV0dXJuIDEgaW4gY2FzZSBzb21lIGNvZGUgd2lsbCBwYXNzIHRoaXMgdmFsdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gKi8KKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBxc3BpX2F1dG9tb2RlX3NldF9jb2RlX2J1ZmZlcih2b2lkICpyYW0pCit7CisgICAgKHZvaWQpIHJhbTsgLyogVW51c2VkICovCit9CisKK2Jvb2wgcXNwaV9hdXRvbW9kZV93cml0YWJsZSh2b2lkKQoreworICAgIHJldHVybiBxc3BpX3dyaXRhYmxlKCk7Cit9CisKK3NpemVfdCBxc3BpX2F1dG9tb2RlX3dyaXRlX2ZsYXNoX3BhZ2UodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB3aGlsZSAoIXFzcGlfYXV0b21vZGVfd3JpdGFibGUoKSkKKyAgICB7CisgICAgfQorCisgICAgcmV0dXJuIHdyaXRlX3BhZ2UoYWRkciwgYnVmLCBzaXplKTsKK30KKwordm9pZCBxc3BpX2F1dG9tb2RlX2VyYXNlX2ZsYXNoX3NlY3Rvcih1aW50MzJfdCBhZGRyKQoreworICAgIHdoaWxlICghcXNwaV9hdXRvbW9kZV93cml0YWJsZSgpKQorICAgIHsKKyAgICB9CisKKyAgICBlcmFzZV9zZWN0b3IoYWRkcik7Cit9CisKK3ZvaWQgcXNwaV9hdXRvbW9kZV9lcmFzZV9jaGlwKHZvaWQpCit7CisgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworICAgIGh3X3FzcGlfd3JpdGU4KENNRF9XUklURV9FTkFCTEUpOworICAgIGh3X3FzcGlfY3NfZGlzYWJsZSgpOworCisgICAgaHdfcXNwaV9jc19lbmFibGUoKTsKKyAgICBod19xc3BpX3dyaXRlOChDTURfQ0hJUF9FUkFTRSk7CisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworICAgIGh3X3FzcGlfd3JpdGU4KENNRF9SRUFEX1NUQVRVU19SRUdJU1RFUik7CisKKyAgICB3aGlsZSAoaHdfcXNwaV9yZWFkOCgpICYgRkxBU0hfU1RBVFVTX0JVU1lfTUFTSyk7CisKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKKworICAgIGZsYXNoX2RlYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7Cit9CisKK3NpemVfdCBxc3BpX2F1dG9tb2RlX3JlYWQodWludDMyX3QgYWRkciwgdWludDhfdCAqYnVmLCBzaXplX3QgbGVuKQoreworICAgIG1lbWNweShidWYsICh2b2lkICopKE1FTU9SWV9RU1BJRl9CQVNFICsgYWRkciksIGxlbik7CisKKyAgICByZXR1cm4gbGVuOworfQorCitRU1BJX1NFQ1RJT04gdm9pZCBxc3BpX2F1dG9tb2RlX2ZsYXNoX3Bvd2VyX3VwKHZvaWQpCit7CisgICAgaHdfY3BtX2RlbGF5X3VzZWMoZmxhc2hfY29uZmlnLT5wb3dlcl9kb3duX2RlbGF5KTsKKworICAgIC8qIEludGVycnVwdHMgbXVzdCBiZSB0dXJuZWQgb2ZmIHNpbmNlIHRoZSBmbGFzaCBnb2VzIGluIG1hbnVhbCBtb2RlLCBhbmQKKyAgICAgKiBjb2RlIChlLmcuIGZvciBhbiBJU1IpIGNhbm5vdCBiZSBmZXRjaGVkIGZyb20gZmxhc2ggZHVyaW5nIHRoaXMgdGltZQorICAgICAqLworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworCisgICAgLy8gRG8gbm90IGNhbGwgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCkuIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsCisgICAgLy8gZmxhc2hfcmVzZXRfY29udGludW91c19tb2RlIHdoaWNoIHdpbGwgdHJ5IHRvIHNlbmQgYnJlYWsgc2VxdWVuY2UgdG8gdGhlIFFTUEkgRmxhc2gKKyAgICAvLyB3aGljaCBpcyBpbiBwb3dlci1kb3duIG1vZGUuCisgICAgcXNwaV9zZXRfYXV0b21vZGUoZmFsc2UpOworICAgIHFzcGlfc2V0X2J1c19tb2RlKEhXX1FTUElfQlVTX01PREVfU0lOR0xFKTsKKworICAgIGh3X3FzcGlfY3NfZW5hYmxlKCk7CisgICAgaHdfcXNwaV93cml0ZTgoQ01EX1JFTEVBU0VfUE9XRVJfRE9XTik7CisgICAgaHdfcXNwaV9jc19kaXNhYmxlKCk7CisKKyAgICBmbGFzaF9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisgICAgLyoKKyAgICAgKiBUaGUgZmxhc2ggaXMgaW4gYXV0byBtb2RlIGFnYWluLiBSZS1lbmFibGUgdGhlIGludGVycnVwdHMKKyAgICAgKi8KKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIGh3X2NwbV9kZWxheV91c2VjKGZsYXNoX2NvbmZpZy0+cmVsZWFzZV9wb3dlcl9kb3duX2RlbGF5KTsKK30KKworUVNQSV9TRUNUSU9OIHZvaWQgcXNwaV9hdXRvbW9kZV9mbGFzaF9wb3dlcl9kb3duKHZvaWQpCit7CisgICAgZmxhc2hfYWN0aXZhdGVfY29tbWFuZF9lbnRyeV9tb2RlKCk7CisKKyAgICBod19xc3BpX2NzX2VuYWJsZSgpOworICAgIGh3X3FzcGlfd3JpdGU4KENNRF9FTlRFUl9QT1dFUl9ET1dOKTsKKyAgICBod19xc3BpX2NzX2Rpc2FibGUoKTsKKworLy8gRG8gbm90IGNhbGwgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKS4gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwKKy8vIGZsYXNoX2NvbmZpZy0+ZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKSB3aGljaCB3aWxsIHRyeSB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBRU1BJIEZsYXNoCisvLyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHNldCBpbiBwb3dlci1kb3duIG1vZGUuCisKKy8vICAgICAgICBmbGFzaF9kZWFjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisjaWYgUVVBRF9NT0RFCisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9RVUFEKTsKKyNlbmRpZgorICAgIHFzcGlfc2V0X2F1dG9tb2RlKHRydWUpOworfQorCitzdGF0aWMgcXNwaV9jb25maWcgcXNwaV9jZmcgPQoreworICAgIEhXX1FTUElfQUREUl9TSVpFXzI0LCBIV19RU1BJX1BPTF9ISUdILCBIV19RU1BJX1NBTVBMSU5HX0VER0VfTkVHQVRJVkUKK307CisKKy8qKgorICogXGJyaWVmIFJlYWQgdGhlIEpFREVDIG1hbnVmYWN0dXJlciBJRCwgZGV2aWNlIHR5cGUgYW5kIGRldmljZSBkZW5zaXR5IHVzaW5nIGNvbW1hbmQgMHg5RgorICoKKyAqIFxwYXJhbVtpbl0gbWFudWZhY3R1cmVyX2lkIFBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBtYW51ZmFjdHVyZXIgSUQgd2lsbCBiZSByZXR1cm5lZAorICogXHBhcmFtW2luXSBkZXZpY2VfdHlwZSBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgZGV2aWNlIHR5cGUgd2lsbCBiZSByZXR1cm5lZAorICogXHBhcmFtW2luXSBkZW5zaXR5IFBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBkZXZpY2UgZGVuc2l0eSB3aWxsIGJlIHJldHVybmVkCisgKi8KKyNpZiBGTEFTSF9BVVRPREVURUNUCitRU1BJX1NFQ1RJT04gc3RhdGljIHZvaWQgZmxhc2hfcmVhZF9qZWRlY19pZCh1aW50OF90ICptYW51ZmFjdHVyZXJfaWQsIHVpbnQ4X3QgKmRldmljZV90eXBlLCB1aW50OF90ICpkZW5zaXR5KQoreworICAgIHVpbnQ4X3QgY21kW10gPSB7IENNRF9SRUFEX0pFREVDX0lEIH07CisgICAgdWludDhfdCBidWZmZXJbM107CisKKyAgICBxc3BpX3NldF9hdXRvbW9kZShmYWxzZSk7CisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUpOworCisgICAgLy8gcmVzZXQgY29udGludW91cyBtb2RlIHVzaW5nIGJvdGggb25lIGFuZCB0d28gYnJlYWsgYnl0ZXMgdG8gY292ZXIgYWxsIGNhc2VzCisgICAgZmxhc2hfcmVzZXRfY29udGludW91c19tb2RlKEhXX1FTUElfQlJFQUtfU0VRX1NJWkVfMkIpOworICAgIGZsYXNoX3Jlc2V0X2NvbnRpbnVvdXNfbW9kZShIV19RU1BJX0JSRUFLX1NFUV9TSVpFXzFCKTsKKworICAgIHFzcGlfdHJhbnNhY3QoY21kLCAxLCBidWZmZXIsIDMpOworICAgICptYW51ZmFjdHVyZXJfaWQgPSBidWZmZXJbMF07CisgICAgKmRldmljZV90eXBlID0gYnVmZmVyWzFdOworICAgICpkZW5zaXR5ID0gYnVmZmVyWzJdOworCisjaWYgUVVBRF9NT0RFCisgICAgcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERV9RVUFEKTsKKyNlbmRpZgorICAgIHFzcGlfc2V0X2F1dG9tb2RlKHRydWUpOworfQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBkdW1teSBieXRlcyBpbiBRU1BJIGNvbnRyb2xsZXIKKyAqCisgKiBccGFyYW1baW5dIGNvdW50IE51bWJlciBvZiBkdW1teSBieXRlcyAobm90IGluY2x1ZGluZyBleHRyYSBieXRlKQorICovCitRU1BJX1NFQ1RJT04gX19hdHRyaWJ1dGVfXygodW51c2VkKSkgc3RhdGljIHZvaWQgcXNwaV9hdXRvbW9kZV9zZXRfZHVtbXlfYnl0ZXNfY291bnQodWludDhfdCBjb3VudCkKK3sKKyAgICBpZiAoY291bnQgPT0gMykKKyAgICB7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEJVUlNUQ01EQiwgRE1ZX0ZPUkNFLCAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgPQorICAgICAgICAgICAgKFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHICYKKyAgICAgICAgICAgICB+KFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0RNWV9GT1JDRSkgfAorICAgICAgICAgICAgICAgUkVHX01TSyhRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRE1ZX05VTSkpKSB8CisgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0RNWV9OVU0sCisgICAgICAgICAgICAgICAgICAgZHVtbXlfbnVtW2NvdW50XSk7CisgICAgfQorfQorCitfX1JFVEFJTkVEX0NPREUgYm9vbCBxc3BpX2F1dG9tb2RlX2luaXQodm9pZCkKK3sKKyAgICB1aW50OF90IGRldmljZV90eXBlOworICAgIHVpbnQ4X3QgZGV2aWNlX2RlbnNpdHk7CisKKyAgICBod19xc3BpX2VuYWJsZV9jbG9jaygpOworCisKKyNpZiBfX0RCR19RU1BJX0VOQUJMRUQKKyAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFFTUElfRElWLCAzKTsKKyNlbmRpZgorCisjaWYgRkxBU0hfQVVUT0RFVEVDVAorICAgIHVpbnQ4X3QgbWFudWZhY3R1cmVyX2lkOworICAgIHVpbnQ4X3QgaTsKKworCisgICAgZmxhc2hfcmVhZF9qZWRlY19pZCgmbWFudWZhY3R1cmVyX2lkLCAmZGV2aWNlX3R5cGUsICZkZXZpY2VfZGVuc2l0eSk7CisKKyAgICBjb25zdCBxc3BpX2ZsYXNoX2NvbmZpZ190ICpmbGFzaF9jb25maWdfaW5pdCA9IGZsYXNoX2NvbmZpZ190YWJsZVswXTsgLy8gZGVmYXVsdCB0byBmaXJzdCBlbnRyeS4KKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmxhc2hfY29uZmlnX3RhYmxlKSAvIHNpemVvZihxc3BpX2ZsYXNoX2NvbmZpZ190ICopOyBpKyspCisgICAgeworICAgICAgICBpZiAoKGZsYXNoX2NvbmZpZ190YWJsZVtpXS0+bWFudWZhY3R1cmVyX2lkID09IG1hbnVmYWN0dXJlcl9pZCkgJiYKKyAgICAgICAgICAgIChmbGFzaF9jb25maWdfdGFibGVbaV0tPmRldmljZV90eXBlID09IGRldmljZV90eXBlKSAmJgorICAgICAgICAgICAgKGZsYXNoX2NvbmZpZ190YWJsZVtpXS0+ZGV2aWNlX2RlbnNpdHkgPT0gZGV2aWNlX2RlbnNpdHkpKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFzaF9jb25maWdfaW5pdCA9IGZsYXNoX2NvbmZpZ190YWJsZVtpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZmxhc2hfYXV0b2RldGVjdF9jb25maWcgPSAqZmxhc2hfY29uZmlnX2luaXQ7CisgICAgZmxhc2hfY29uZmlnID0gJmZsYXNoX2F1dG9kZXRlY3RfY29uZmlnOworI2Vsc2UKKyAgICBkZXZpY2VfdHlwZSAgICAgPSBkZ19jb25maWdGTEFTSF9ERVZJQ0VfVFlQRTsKKyAgICBkZXZpY2VfZGVuc2l0eSAgPSBkZ19jb25maWdGTEFTSF9ERU5TSVRZOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENvcHkgdGhlIHNlbGVjdGVkIGZsYXNoIHN0cnVjdCBmcm9tIGZsYXNoIGludG8gcmV0cmFtCisgICAgICovCisgICAgZmxhc2hfY29uZmlnLT5pbml0aWFsaXplKGRldmljZV90eXBlLCBkZXZpY2VfZGVuc2l0eSk7CisKKyAgICB1aW50OF90IHJlYWRfb3Bjb2RlOworCisgICAgaWYgKGZsYXNoX2NvbmZpZy0+YWRkcmVzc19zaXplID09IEhXX1FTUElfQUREUl9TSVpFXzMyKQorICAgIHsKKyAgICAgICAgcmVhZF9vcGNvZGUgPSBDTURfRkFTVF9SRUFEX1FVQURfNEI7CisgICAgICAgIHFzcGlfY2ZnLmFkZHJlc3Nfc2l6ZSA9IEhXX1FTUElfQUREUl9TSVpFXzMyOyAvLyBJdCB3aWxsIGJlIHNldCB3aGVuIGh3X3FzcGlfaW5pdCgpIGlzIGNhbGxlZAorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWFkX29wY29kZSA9IENNRF9GQVNUX1JFQURfUVVBRDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldHVwIGVyYXNlIGluc3RydWN0aW9uIHRoYXQgd2lsbCBiZSBzZW50IGJ5IFFTUEkgY29udHJvbGxlciB0byBlcmFzZSBzZWN0b3IgaW4gYXV0b21vZGUuCisgICAgICovCisgICAgaHdfcXNwaV9zZXRfZXJhc2VfaW5zdHJ1Y3Rpb24oZmxhc2hfY29uZmlnLT5lcmFzZV9vcGNvZGUsIEhXX1FTUElfQlVTX01PREVfU0lOR0xFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREVfU0lOR0xFLCAxNSwgNSk7CisgICAgLyoKKyAgICAgKiBTZXR1cCBpbnN0cnVjdGlvbiBwYWlyIHRoYXQgd2lsbCB0ZW1wb3JhcmlseSBzdXNwZW5kIGVyYXNlIG9wZXJhdGlvbiB0byBhbGxvdyByZWFkLgorICAgICAqLworICAgIGh3X3FzcGlfc2V0X3N1c3BlbmRfcmVzdW1lX2luc3RydWN0aW9ucyhmbGFzaF9jb25maWctPmVyYXNlX3N1c3BlbmRfb3Bjb2RlLCBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfY29uZmlnLT5lcmFzZV9yZXN1bWVfb3Bjb2RlLCBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwgNyk7CisKKyAgICAvKgorICAgICAqIFFTUEkgY29udHJvbGxlciBtdXN0IHNlbmQgd3JpdGUgZW5hYmxlIGJlZm9yZSBlcmFzZSwgdGhpcyBzZXRzIGl0IHVwLgorICAgICAqLworICAgIGh3X3FzcGlfc2V0X3dyaXRlX2VuYWJsZV9pbnN0cnVjdGlvbihDTURfV1JJVEVfRU5BQkxFLCBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSk7CisKKyAgICAvKgorICAgICAqIFNldHVwIGluc3RydWN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHBlcmlvZGljYWxseSBjaGVjayBlcmFzZSBvcGVyYXRpb24gc3RhdHVzLgorICAgICAqIENoZWNrIExTQiB3aGljaCBpcyAxIHdoZW4gZXJhc2UgaXMgaW4gcHJvZ3Jlc3MuCisgICAgICovCisgICAgaHdfcXNwaV9zZXRfcmVhZF9zdGF0dXNfaW5zdHJ1Y3Rpb24oZmxhc2hfY29uZmlnLT5yZWFkX2VyYXNlX3Byb2dyZXNzX29wY29kZSwgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERV9TSU5HTEUsIGZsYXNoX2NvbmZpZy0+ZXJhc2VfaW5fcHJvZ3Jlc3NfYml0LCBmbGFzaF9jb25maWctPmVyYXNlX2luX3Byb2dyZXNzX2JpdF9oaWdoX2xldmVsID8gMSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAsIDApOworCisgICAgLyoKKyAgICAgKiBUaGlzIHNlcXVlbmNlIGlzIG5lY2Vzc2FyeSBpZiBmbGFzaCBpcyB3b3JraW5nIGluIGNvbnRpbnVvdXMgcmVhZCBtb2RlLCB3aGVuIGluc3RydWN0aW9uCisgICAgICogaXMgbm90IHNlbnQgb24gZXZlcnkgcmVhZCBhY2Nlc3MganVzdCBhZGRyZXNzLiBTZW5kaW5nIDB4RkZGRiB3aWxsIGV4aXQgdGhpcyBtb2RlLgorICAgICAqIFRoaXMgc2VxdWVuY2UgaXMgc2VudCBvbmx5IHdoZW4gUVNQSSBpcyB3b3JraW5nIGluIGF1dG9tb2RlIGFuZCBkZWNpZGVzIHRvIHNlbmQgb25lIG9mCisgICAgICogaW5zdHJ1Y3Rpb25zIGFib3ZlLgorICAgICAqIElmIGZsYXNoIGlzIHdvcmtpbmcgaW4gRFVBTCBidXMgbW9kZSBzZXF1ZW5jZSBzaG91bGQgYmUgMHhGRkZGIGFuZCBzaXplIHNob3VsZCBiZQorICAgICAqIEhXX1FTUElfQlJFQUtfU0VRX1NJWkVfMkIuCisgICAgICovCisgICAgaHdfcXNwaV9zZXRfYnJlYWtfc2VxdWVuY2UoMHhGRkZGLCBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwgZmxhc2hfY29uZmlnLT5icmVha19zZXFfc2l6ZSwgMCk7CisKKyAgICAvKgorICAgICAqIElmIGFwcGxpY2F0aW9uIHN0YXJ0cyBmcm9tIEZMQVNIIHRoZW4gYm9vdGxvYWRlciBtdXN0IGhhdmUgc2V0IHJlYWQgaW5zdHJ1Y3Rpb24uCisgICAgICovCisgICAgaWYgKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gIT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKQorICAgIHsKKyAgICAgICAgaHdfcXNwaV9pbml0KCZxc3BpX2NmZyk7CisgICAgICAgIGh3X3FzcGlfc2V0X2RpdihIV19RU1BJX0RJVl8xKTsKKyAgICB9CisKKyNpZmRlZiAgRU5BQkxFX0FVVE9NT0RFX0NPTkZJR1VSQVRJT05fRk9SX1JFQUQKKworICAgIGZsYXNoX2FjdGl2YXRlX2NvbW1hbmRfZW50cnlfbW9kZSgpOworCisgICAgaHdfcXNwaV9zZXRfcmVhZF9pbnN0cnVjdGlvbihyZWFkX29wY29kZSwgZmxhc2hfY29uZmlnLT5zZW5kX29uY2UsIGZsYXNoX2NvbmZpZy0+Z2V0X2R1bW15X2J5dGVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFX1NJTkdMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREVfUVVBRCwgSFdfUVNQSV9CVVNfTU9ERV9RVUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERV9RVUFEKTsKKyAgICBod19xc3BpX3NldF9leHRyYV9ieXRlKGZsYXNoX2NvbmZpZy0+ZXh0cmFfYnl0ZSwgSFdfUVNQSV9CVVNfTU9ERV9RVUFELCAwKTsKKyAgICBod19xc3BpX3NldF9hZGRyZXNzX3NpemUoZmxhc2hfY29uZmlnLT5hZGRyZXNzX3NpemUpOworCisgICAgZmxhc2hfZGVhY3RpdmF0ZV9jb21tYW5kX2VudHJ5X21vZGUoKTsKKworICAgIEhXX1FTUElDX1JFR19TRVRGKEJVUlNUQ01EQiwgQ1NfSElHSF9NSU4sIDApOworI2Vsc2UKKyAgICAodm9pZCkgcmVhZF9vcGNvZGU7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUVNQSV9TRUNUSU9OIHZvaWQgcXNwaV9hdXRvbW9kZV9zeXNfY2xvY2tfY2ZnKHN5c19jbGtfdCBzeXNfY2xrKQoreworICAgIGlmICgoQ1JHX1RPUC0+Q0xLX0FNQkFfUkVHICYgKDEgPDwgUkVHX1BPUyhDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFFTUElfRU5BQkxFKSkpICE9IDApICAvLyBJZiBjbG9jayBpcyBlbmFibGVkCisgICAgeworICAgICAgICAvKiBTb21lIG9mIHRoZSBzeXNfY2xrX2NmZygpIGltcGxlbWVudGF0aW9ucyBwdXQgdGhlIGZsYXNoIGluIGNvbW1hbmQgZW50cnkgbW9kZSwgd2hlcmUgdGhlIGZsYXNoIGlzCisgICAgICAgICAqIG5vdCBhdmFpbGFibGUgZm9yIGNvZGUgZXhlY3V0aW9uLiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5vIGludGVycnVwdCAodGhhdCBtYXkgY2F1c2UgYSBjYWNoZSBtaXNzKQorICAgICAgICAgKiBoaXRzIGR1cmluZyB0aGlzIHRpbWUuCisgICAgICAgICAqLworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgZmxhc2hfY29uZmlnLT5zeXNfY2xrX2NmZyhzeXNfY2xrKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgfQorfQorCitjb25zdCBxc3BpX3Vjb2RlX3QgKnFzcGlfYXV0b21vZGVfZ2V0X3Vjb2RlKHZvaWQpCit7CisgICAgcmV0dXJuICZmbGFzaF9jb25maWctPnVjb2RlX3dha2V1cDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfY3BtLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2NwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTgyMGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2NwbS5oCkBAIC0wLDAgKzEsMTQyOCBAQAorLyoqCitcYWRkdG9ncm91cCBCU1AKK1x7CitcYWRkdG9ncm91cCBERVZJQ0VTCitceworXGFkZHRvZ3JvdXAgQ1BNCitceworXGJyaWVmIENsb2NrIGFuZCBQb3dlciBNYW5hZ2VyCisqLworCisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19jcG0uaAorICoKKyAqIEBicmllZiBDbG9jayBhbmQgUG93ZXIgTWFuYWdlciBoZWFkZXIgZmlsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIENQTV9IXworI2RlZmluZSBDUE1fSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19DUE0KKworI2luY2x1ZGUgInNka19kZWZzLmgiCisKKyNkZWZpbmUgU1lTX0NMS19JU19YVEFMMTZNICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgU1lTX0NMS19JU19SQzE2ICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgU1lTX0NMS19JU19MUCAgICAgICAgICAgICAgICAgICAoMikKKyNkZWZpbmUgU1lTX0NMS19JU19QTEwgICAgICAgICAgICAgICAgICAoMykKKworI2RlZmluZSBMUF9DTEtfSVNfUkMzMksgICAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBMUF9DTEtfSVNfUkNYICAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBMUF9DTEtfSVNfWFRBTDMySyAgICAgICAgICAgICAgICgyKQorI2RlZmluZSBMUF9DTEtfSVNfRVhURVJOQUwgICAgICAgICAgICAgICgzKQorCisjZGVmaW5lIERDRENfSVNfUkVBRFkgXAorICAgICAgICAoUkVHX01TSyhEQ0RDLCBEQ0RDX1NUQVRVU18xX1JFRywgRENEQ19WRERfQVZBSUxBQkxFKSkKKy8vICAgICAgICAoRENEQ19WMThQX0FWQUlMQUJMRSB8IERDRENfVkREX0FWQUlMQUJMRSB8IERDRENfVjE4X0FWQUlMQUJMRSB8IERDRENfVjE0X0FWQUlMQUJMRSkKKworI2RlZmluZSBEQ0RDX0lTX1JFQURZX1RPX1NMRUVQICAgICAgICAgIChEQ0RDX1ZERF9BVkFJTEFCTEUgfCBEQ0RDX1YxNF9BVkFJTEFCTEUpCisKK3R5cGVkZWYgZW51bSBjYWxfY2xrX2NlbF90eXBlIHsKKyAgICAgICAgQ0FMSUJSQVRFX1JDMzJLID0gMCwKKyAgICAgICAgQ0FMSUJSQVRFX1JDMTZNLAorICAgICAgICBDQUxJQlJBVEVfWFRBTDMySywKKyAgICAgICAgQ0FMSUJSQVRFX1JDWCwKK30gY2FsX2Nsa190OworCisvKioKKyAqIFxicmllZiBUaGUgc3lzdGVtIGNsb2NrIHR5cGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBzeXNjbGtfdHlwZSB7CisgICAgICAgIHN5c2Nsa19SQzE2ID0gMCwgICAgICAgIC8vITwgUkMxNgorICAgICAgICBzeXNjbGtfWFRBTDE2TSA9IDEsICAgICAvLyE8IDEgeCAxNk0KKyAgICAgICAgc3lzY2xrX1hUQUwzMk0gPSAyLCAgICAgLy8hPCAyIHggMTZNCisgICAgICAgIHN5c2Nsa19QTEw0OCA9IDMsICAgICAgIC8vITwgMyB4IDE2TQorICAgICAgICBzeXNjbGtfUExMOTYgPSA2LCAgICAgICAvLyE8IDYgeCAxNk0KKyAgICAgICAgc3lzY2xrX0xQID0gMjU1LCAgICAgICAgLy8hPCBub3QgYXBwbGljYWJsZQorfSBzeXNfY2xrX3Q7CisKKy8qKgorICogXGJyaWVmIFRoZSBBTUJBIEhpZ2gtUGVyZm9ybWFuY2UgQnVzIChBSEIpIGNsb2NrIGRpdmlkZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSBhaGJkaXZfdHlwZSB7CisgICAgICAgIGFoYl9kaXYxID0gMCwgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDEKKyAgICAgICAgYWhiX2RpdjIsICAgICAgICAgICAgICAgLy8hPCBEaXZpZGUgYnkgMgorICAgICAgICBhaGJfZGl2NCwgICAgICAgICAgICAgICAvLyE8IERpdmlkZSBieSA0CisgICAgICAgIGFoYl9kaXY4LCAgICAgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDgKKyAgICAgICAgYWhiX2RpdjE2LCAgICAgICAgICAgICAgLy8hPCBEaXZpZGUgYnkgMTYKK30gYWhiX2Rpdl90OworCithaGJfZGl2X3QgY21fYWhiY2xrOworc3lzX2Nsa190IGNtX3N5c2NsazsKKworLyoqCisgKiBcYnJpZWYgVGhlIEFNQkEgUGVyaXBoZXJhbCBCdXMgKEFQQikgY2xvY2sgZGl2aWRlcgorICoKKyAqLwordHlwZWRlZiBlbnVtIGFwYmRpdl90eXBlIHsKKyAgICAgICAgYXBiX2RpdjEgPSAwLCAgICAgICAgICAgLy8hPCBEaXZpZGUgYnkgMQorICAgICAgICBhcGJfZGl2MiwgICAgICAgICAgICAgICAvLyE8IERpdmlkZSBieSAyCisgICAgICAgIGFwYl9kaXY0LCAgICAgICAgICAgICAgIC8vITwgRGl2aWRlIGJ5IDQKKyAgICAgICAgYXBiX2RpdjgsICAgICAgICAgICAgICAgLy8hPCBEaXZpZGUgYnkgOAorfSBhcGJfZGl2X3Q7CisKKy8qKgorICogXGJyaWVmIFRoZSBDUFUgY2xvY2sgdHlwZSAoc3BlZWQpCisgKgorICovCit0eXBlZGVmIGVudW0gY3B1X2Nsa190eXBlIHsKKyAgICAgICAgY3B1Y2xrXzFNID0gMSwgICAgICAgICAgLy8hPCAxIE1IegorICAgICAgICBjcHVjbGtfMk0gPSAyLCAgICAgICAgICAvLyE8IDIgTUh6CisgICAgICAgIGNwdWNsa18zTSA9IDMsICAgICAgICAgIC8vITwgMyBNSHoKKyAgICAgICAgY3B1Y2xrXzRNID0gNCwgICAgICAgICAgLy8hPCA0IE1IegorICAgICAgICBjcHVjbGtfNk0gPSA2LCAgICAgICAgICAvLyE8IDYgTUh6CisgICAgICAgIGNwdWNsa184TSA9IDgsICAgICAgICAgIC8vITwgOCBNSHoKKyAgICAgICAgY3B1Y2xrXzEyTSA9IDEyLCAgICAgICAgLy8hPCAxMiBNSHoKKyAgICAgICAgY3B1Y2xrXzE2TSA9IDE2LCAgICAgICAgLy8hPCAxNiBNSHoKKyAgICAgICAgY3B1Y2xrXzI0TSA9IDI0LCAgICAgICAgLy8hPCAyNCBNSHoKKyAgICAgICAgY3B1Y2xrXzMyTSA9IDMyLCAgICAgICAgLy8hPCAzMiBNSHoKKyAgICAgICAgY3B1Y2xrXzQ4TSA9IDQ4LCAgICAgICAgLy8hPCA0OCBNSHoKKyAgICAgICAgY3B1Y2xrXzk2TSA9IDk2ICAgICAgICAgLy8hPCA5NiBNSHoKK30gY3B1X2Nsa190OworCisKKy8qKgorICogXGJyaWVmIFRoZSBUQ1Mgc2V0dGluZyBmb3IgdGhlIEJPRCBjb250cm9sLgorICogXGRldGFpbHMgSWYgaXQgaXMgemVybyB0aGVuIHRoZSBoYXJkLWNvZGVkIFNESyBjb2RlIGZvciB0aGUgQk9EIHNldHVwIGlzIHVzZWQuIEl0IGl0IGlzIG5vdCB6ZXJvLAorICogICAgICAgICAgdGhpcyBpcyB0aGUgdmFsdWUgdGhhdCBpcyB3cml0dGVuIHRvIHRoZSBCT0RfQ1RSTDJfUkVHLgorICovCitleHRlcm4gdWludDE2X3QgaHdfY3BtX2JvZF9lbmFibGVkX2luX3RjczsKKworCisvKioKKyAqIFxicmllZiBUdXJuIG9uIHRoZSAxLjJWIExETy4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV90dXJuXzFfMlZfb24odm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fdHVybl8xXzJWX29uKHZvaWQpCit7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjJfT04pOworfQorCisvKioKKyAqIFxicmllZiBUdXJuIG9mZiB0aGUgMS4yViBMRE8uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fdHVybl8xXzJWX29mZih2b2lkKQoreworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVYyX09OKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIENhY2hlIHJldGFpbmFiaWxpdHkuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X2NhY2hlX3JldGFpbmVkKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJFVEFJTl9DQUNIRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgRUNDIG1pY3JvY29kZSBSQU0gcmV0YWlubWVudC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXRfZWNjcmFtX3JldGFpbmVkKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJFVEFJTl9FQ0NSQU0pOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIFFTUEkgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgd2FrZS11cC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfcXNwaV9pbml0KHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIFFTUElfSU5JVCk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBTZXR1cCB0aGUgUmV0ZW50aW9uIE1lbW9yeSBjb25maWd1cmF0aW9uLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldHVwX3JldG1lbSh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSRVRBSU5fUkFNLCBkZ19jb25maWdNRU1fUkVURU5USU9OX01PREUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBtZW1vcnkgcmV0ZW50aW9uLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX25vX3JldG1lbSh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgQ1JHX1RPUC0+UE1VX0NUUkxfUkVHICY9IH4oUkVHX01TSyhDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJFVEFJTl9SQU0pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJFVEFJTl9DQUNIRSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKENSR19UT1AsIFBNVV9DVFJMX1JFRywgUkVUQUlOX0VDQ1JBTSkpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBjbG9jay1sZXNzIHNsZWVwIG1vZGUuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZW5hYmxlX2Nsb2NrbGVzcyh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBFTkFCTEVfQ0xLTEVTUyk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSBjbG9jay1sZXNzIHNsZWVwIG1vZGUuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV9jbG9ja2xlc3Modm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRU5BQkxFX0NMS0xFU1MpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgQWN0aXZhdGUgdGhlICJSZXNldCBvbiB3YWtlLXVwIiBmdW5jdGlvbmFsaXR5LgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV9yZXNldF9vbl93dXAodm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgUkVTRVRfT05fV0FLRVVQKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIEFjdGl2YXRlIEJPRCBwcm90ZWN0aW9uLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfY3BtX2FjdGl2YXRlX2JvZF9wcm90ZWN0aW9uKHZvaWQpOworCisvKioKKyAqIFxicmllZiBBY3RpdmF0ZSBCT0QgcHJvdGVjdGlvbiAobm9uIHJldGFpbmVkIHZlcnNpb24pLgorICoKKyAqLwordm9pZCBod19jcG1fYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb25fYXRfaW5pdCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIEJPRCBwcm90ZWN0aW9uLgorICoKKyAqIFxub3RlIE5vdCBhcHBsaWNhYmxlIGZvciBEQTE0NjgwLzEtMDAgY2hpcHMuCisgKgorICovCit2b2lkIGh3X2NwbV9jb25maWd1cmVfYm9kX3Byb3RlY3Rpb24odm9pZCk7CisKKy8qKgorICogXGJyaWVmIERlYWN0aXZhdGUgQk9EIHByb3RlY3Rpb24uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGVhY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kZWFjdGl2YXRlX2JvZF9wcm90ZWN0aW9uKHZvaWQpCit7CisgICAgICAgIENSR19UT1AtPkJPRF9DVFJMMl9SRUcgPSAwOworfQorCisvKioKKyAqIFxicmllZiBBY3RpdmF0ZSBCT0QgcHJvdGVjdGlvbiBmb3IgMVY0IHJhaWwgKG9ubHkgZm9yIERBMTQ2ODIvMy1CQSBjaGlwcyEpLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2FjdGl2YXRlXzF2NF9ib2RfcHJvdGVjdGlvbih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9hY3RpdmF0ZV8xdjRfYm9kX3Byb3RlY3Rpb24odm9pZCkKK3sKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQikKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EX1YxNF9FTik7CisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgRGVhY3RpdmF0ZSBCT0QgcHJvdGVjdGlvbiBmb3IgMVY0IHJhaWwgKG9ubHkgZm9yIERBMTQ2ODIvMy1CQSBjaGlwcyEpLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RlYWN0aXZhdGVfMXY0X2JvZF9wcm90ZWN0aW9uKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RlYWN0aXZhdGVfMXY0X2JvZF9wcm90ZWN0aW9uKHZvaWQpCit7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IpCisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9WMTRfRU4pOworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIFBvd2VyIGRvd24gdGhlIFJhZGlvIFBvd2VyIERvbWFpbi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9wb3dlcl9kb3duX3JhZGlvKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFJBRElPX1NMRUVQKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIFBvd2VyIGRvd24gdGhlIFBlcmlwaGVyYWwgUG93ZXIgRG9tYWluLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3Bvd2VyX2Rvd25fcGVyaXBoX3BkKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3Bvd2VyX2Rvd25fcGVyaXBoX3BkKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFBFUklQSF9TTEVFUCk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBXYWl0IGZvciBSYWRpbyBQb3dlciBEb21haW4gUG93ZXIgZG93bi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV93YWl0X3JhZF9wb3dlcl9kb3duKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3dhaXRfcmFkX3Bvd2VyX2Rvd24odm9pZCkKK3sKKyAgICAgICAgd2hpbGUgKChDUkdfVE9QLT5TWVNfU1RBVF9SRUcgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgUkFEX0lTX0RPV04pKSA9PSAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgV2FpdCBmb3IgUGVyaXBoZXJhbCBQb3dlciBEb21haW4gUG93ZXIgZG93bi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV93YWl0X3Blcl9wb3dlcl9kb3duKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3dhaXRfcGVyX3Bvd2VyX2Rvd24odm9pZCkKK3sKKyAgICAgICAgd2hpbGUgKChDUkdfVE9QLT5TWVNfU1RBVF9SRUcgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgUEVSX0lTX0RPV04pKSA9PSAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgUG93ZXIgdXAgdGhlIFBlcmlwaGVyYWxzIFBvd2VyIERvbWFpbi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9wb3dlcl91cF9wZXJfcGQodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fcG93ZXJfdXBfcGVyX3BkKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIFBFUklQSF9TTEVFUCk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgICAgICB3aGlsZSAoKENSR19UT1AtPlNZU19TVEFUX1JFRyAmIFJFR19NU0soQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBQRVJfSVNfVVApKSA9PSAwKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1VTRV9GVERGKQorLyoqCisgKiBcYnJpZWYgQ2hlY2sgdGhlIHN0YXR1cyBvZiBGVERGIFBvd2VyIERvbWFpbi4KKyAqCisgKiBccmV0dXJuIDAsIGlmIGl0IGlzIHBvd2VyZWQgZG93biBhbmQgMSBpZiBpdCBpcyBwb3dlcmVkIHVwLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9jaGVja19mdGRmX3BkX3N0YXR1cyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBGVERGX0lTX1VQKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKy8qKgorICogXGJyaWVmIENoZWNrIHRoZSBzdGF0dXMgb2YgQkxFIFBvd2VyIERvbWFpbi4KKyAqCisgKiBccmV0dXJuIDAsIGlmIGl0IGlzIHBvd2VyZWQgZG93biBhbmQgMSBpZiBpdCBpcyBwb3dlcmVkIHVwLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9jaGVja19ibGVfcGRfc3RhdHVzKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEJMRV9JU19VUCk7Cit9CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgdGhlIHN0YXR1cyBvZiBQZXJpcGhlcmFscyBQb3dlciBEb21haW4uCisgKgorICogXHJldHVybiAwLCBpZiBpdCBpcyBwb3dlcmVkIGRvd24gYW5kIDEgaWYgaXQgaXMgcG93ZXJlZCB1cC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fY2hlY2tfcGVyX3BkX3N0YXR1cyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBQRVJfSVNfVVApOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayB0aGUgc3RhdHVzIG9mIFJhZGlvIFBvd2VyIERvbWFpbi4KKyAqCisgKiBccmV0dXJuIDAsIGlmIGl0IGlzIHBvd2VyZWQgZG93biBhbmQgMSBpZiBpdCBpcyBwb3dlcmVkIHVwLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9jaGVja19yYWRfcGRfc3RhdHVzKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19VUCk7Cit9CisKKy8qKgorICogXGJyaWVmIEFjdGl2YXRlIFBhZCBsYXRjaGVzLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2FjdGl2YXRlX3BhZF9sYXRjaGVzKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2FjdGl2YXRlX3BhZF9sYXRjaGVzKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIFBBRF9MQVRDSF9FTik7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBEZWFjdGl2YXRlIFBhZCBsYXRjaGVzLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RlYWN0aXZhdGVfcGFkX2xhdGNoZXModm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGVhY3RpdmF0ZV9wYWRfbGF0Y2hlcyh2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBQQURfTEFUQ0hfRU4pOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIFJDMTZNIGlzIGVuYWJsZWQuCisgKgorICogXHJldHVybiAwIGlmIHRoZSBSQzE2TSBpcyBkaXNhYmxlZCwgZWxzZSAxLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9jaGVja19yYzE2X3N0YXR1cyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLXzE2TV9SRUcsIFJDMTZNX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIEFjdGl2YXRlIHRoZSBSQzE2TS4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfcmMxNih2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfMTZNX1JFRywgUkMxNk1fRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGVhY3RpdmF0ZSB0aGUgUkMxNk0uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV9yYzE2KHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfcmMxNih2b2lkKQoreworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfMTZNX1JFRywgUkMxNk1fRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBYVEFMMTZNIHNldHRsaW5nIHRpbWUuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3h0YWwxNm1fc2V0dGxpbmdfdGltZSh1aW50OF90IGN5Y2xlcykgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3h0YWwxNm1fc2V0dGxpbmdfdGltZSh1aW50OF90IGN5Y2xlcykKK3sKKyAgICAgICAgQ1JHX1RPUC0+WFRBTFJEWV9DVFJMX1JFRyA9IGN5Y2xlczsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIFhUQUwxNk0gaGFzIHN0YXJ0ZWQgdGlja2luZworICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2lzX3h0YWwxNm1fc3RhcnRlZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSBib29sIGh3X2NwbV9pc194dGFsMTZtX3N0YXJ0ZWQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFhUQUwxNl9UUklNX1JFQURZKSA9PSAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIFhUQUwxNk0gaXMgZW5hYmxlZC4KKyAqCisgKiBccmV0dXJuIDAgaWYgdGhlIFhUQUwxNk0gaXMgZGlzYWJsZWQsIG5vdCAwIGVsc2UuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2NoZWNrX3h0YWwxNm1fc3RhdHVzKHZvaWQpCit7CisgICAgICAgIHVpbnQzMl90IHJldDsKKworICAgICAgICByZXQgPSBSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFhUQUwxNk1fRElTQUJMRSk7CisKKyAgICAgICAgcmV0dXJuICFyZXQ7Cit9CisKKy8qKgorICogXGJyaWVmIEFjdGl2YXRlIHRoZSBYVEFMMTZNLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV94dGFsMTZtKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFhUQUwxNk1fRElTQUJMRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCit9CisKKy8qKgorICogXGJyaWVmIERlYWN0aXZhdGUgdGhlIFhUQUwxNk0uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV94dGFsMTZtKHZvaWQpCit7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS19DVFJMX1JFRywgWFRBTDE2TV9ESVNBQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBoaWdoLXBhc3MgZmlsdGVyIG9mIHRoZSBYVEFMMTZNLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV94dGFsMTZtX2hwZih2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfMTZNX1JFRywgWFRBTDE2X0hQQVNTX0ZMVF9FTik7IC8vIExhc3QgcmV2aWV3IGRhdGU6IEZlYiAxNSwgMjAxNiAtIDEyOjI1OjQ3Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBhIGZsYWcgYmVmb3JlIHNsZWVwaW5nIHRoYXQgd2lsbCBjaGVjayBhZnRlciB0aGUgY29kZSBleGVjdXRpb24gaXMgcmVzdW1lZCBhZnRlciB0aGUKKyAqICAgICAgICBXRkkoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3lzdGVtIGFjdHVhbGx5IGVudGVyZWQgaW50byBzbGVlcCBvciBub3QuIEZvciB0aGlzCisgKiAgICAgICAgcHVycG9zZSwgYSByYXRoZXIgaGFybWxlc3MgcmVnaXN0ZXIgb2YgdGhlIFNZUyBQb3dlciBEb21haW4gaXMgdXNlZC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXRfc2xlZXBfZmxhZyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXRfc2xlZXBfZmxhZyh2b2lkKQoreworICAgICAgICBHUElPLT5HUElPX0NMS19TRUwgPSAxOworfQorCisvKioKKyAqIFxicmllZiBQcmVwYXJlIFJFU0VUIHR5cGUgdHJhY2tpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV90cmFja19yZXNldF90eXBlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3RyYWNrX3Jlc2V0X3R5cGUodm9pZCkKK3sKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQikKKyAgICAgICAgQ1JHX1RPUC0+UkVTRVRfU1RBVF9SRUcgPSAwOworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBzeXN0ZW0gZW50ZXJlZCBzbGVlcC4KKyAqCisgKiBccmV0dXJuIFRydWUsIGlmIHRoZSBzeXN0ZW0gc2xlcHQsIGVsc2UgZmFsc2UuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBod19jcG1fY2hlY2tfc2xlZXBfZmxhZyh2b2lkKQoreworICAgICAgICByZXR1cm4gKEdQSU8tPkdQSU9fQ0xLX1NFTCA9PSAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIFhUQUwxNk0gaGFzIHNldHRsZWQuCisgKgorICogXHJldHVybiAxIGlmIHRoZSBYVEFMMTZNIGhhcyBzZXR0bGVkLCBlbHNlIDAuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2lzX3h0YWwxNm1fdHJpbW1lZCh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBYVEFMMTZfVFJJTV9SRUFEWSk7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZSBQTEwgaXMgb24gYW5kIGhhcyBsb2NrZWQuCisgKgorICogXHJldHVybiAxIGlmIHRoZSBQTEwgaGFzIGxvY2tlZCwgZWxzZSAwLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9pc19wbGxfbG9ja2VkKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihHUFJFRywgUExMX1NZU19TVEFUVVNfUkVHLCBQTExfTE9DS19GSU5FKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBQTEwgZGl2aWRlci4gVGhlIG91dHB1dCBmcmVxdWVuY3kgaXMgc2V0IHRvIDQ4TUh6LgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV9wbGxfZGl2aWRlcih2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFBMTF9ESVYyKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgUExMIGRpdmlkZXIuIFRoZSBvdXRwdXQgZnJlcXVlbmN5IGlzIHNldCB0byA5Nk1Iei4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kaXNhYmxlX3BsbF9kaXZpZGVyKHZvaWQpCit7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIENMS19DVFJMX1JFRywgUExMX0RJVjIpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgUExMIGRpdmlkZXIuCisgKgorICogXHJldHVybiAwIGlmIHRoZSBkaXZpZGVyIGlzIGRpc2FibGVkLCAxIGlmIHRoZSBkaXZpZGVyIGlzIGVuYWJsZWQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2dldF9wbGxfZGl2aWRlcl9zdGF0dXModm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgUExMX0RJVjIpOworfQorCisvKioKKyAqIFxicmllZiBSZXR1cm4gdGhlIGNsb2NrIHVzZWQgYXMgdGhlIHN5c3RlbSBjbG9jay4KKyAqCisgKiBccmV0dmFsIFNZU19DTEtfSVNfWFRBTDE2TSBDcnlzdGFsIG9zY2lsbGF0b3IKKyAqIFxyZXR2YWwgU1lTX0NMS19JU19SQzE2IFJDIG9zY2lsbGF0b3IKKyAqIFxyZXR2YWwgU1lTX0NMS19JU19MUCBMb3cgUG93ZXIgY2xvY2sKKyAqIFxyZXR2YWwgU1lTX0NMS19JU19QTEwgUExMCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2dldF9zeXNjbGsodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgU1lTX0NMS19TRUwpOworfQorCisvKioKKyAqIFxicmllZiBSZXR1cm4gdGhlIGRpdmlkZXIgb2YgdGhlIEFNQkEgSGlnaCBTcGVlZCBCdXMuCisgKgorICogXHJldHZhbCAwIERpdmlkZSBieSAxCisgKiBccmV0dmFsIDEgRGl2aWRlIGJ5IDIKKyAqIFxyZXR2YWwgMiBEaXZpZGUgYnkgNAorICogXHJldHZhbCAzIERpdmlkZSBieSA4CisgKiBccmV0dmFsIDMgRGl2aWRlIGJ5IDE2CisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgaHdfY3BtX2dldF9oY2xrX2Rpdih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBod19jcG1fZ2V0X2hjbGtfZGl2KHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIEhDTEtfRElWKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBkaXZpZGVyIG9mIHRoZSBBTUJBIEhpZ2ggU3BlZWQgQnVzLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF9oY2xrX2Rpdih1aW50MzJfdCBkaXYpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3NldF9oY2xrX2Rpdih1aW50MzJfdCBkaXYpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIEhDTEtfRElWLCBkaXYpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmV0dXJuIHRoZSBkaXZpZGVyIG9mIHRoZSBBTUJBIFBlcmlwaGVyYWwgQnVzLgorICoKKyAqIFxyZXR2YWwgMCBEaXZpZGUgYnkgMQorICogXHJldHZhbCAxIERpdmlkZSBieSAyCisgKiBccmV0dmFsIDIgRGl2aWRlIGJ5IDQKKyAqIFxyZXR2YWwgMyBEaXZpZGUgYnkgOAorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IGh3X2NwbV9nZXRfcGNsa19kaXYodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIENMS19BTUJBX1JFRywgUENMS19ESVYpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIGRpdmlkZXIgb2YgdGhlIEFNQkEgUGVyaXBoZXJhbCBCdXMuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3BjbGtfZGl2KHVpbnQzMl90IGRpdikgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc2V0X3BjbGtfZGl2KHVpbnQzMl90IGRpdikKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRGKENSR19UT1AsIENMS19BTUJBX1JFRywgUENMS19ESVYsIGRpdik7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayB3aGV0aGVyIGFueSBvZiB0aGUgVGltZXIwIGFuZCAyIGlzIGFjdGl2ZSBhbmQgdXNlcyB0aGUgc3lzdGVtIGNsb2NrLgorICoKKyAqIFxyZXR1cm4gVHJ1ZSBpZiBUaW1lciAwIG9yIDIgaXMgYWN0aXZlIGFuZCB1c2VzIHRoZSBzeXN0ZW0gY2xvY2sgZm9yIGNvdW50aW5nLCBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX3RpbWVyMDJfdXNlc19zeXNjbGsodm9pZCkKK3sKKyAgICAgICAgdWludDMyX3QgcmVndmFsOworICAgICAgICBib29sIHJldCA9IHRydWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHJlZ3ZhbCA9IENSR19UT1AtPkNMS19UTVJfUkVHOworCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgVGltZXIwIGNsb2NrCisgICAgICAgICAgICAgICAgaWYgKChyZWd2YWwgJiBSRUdfTVNLKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIwX0VOQUJMRSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd2YWwgJiBSRUdfTVNLKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIwX0NMS19TRUwpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgVGltZXIyIGNsb2NrCisgICAgICAgICAgICAgICAgaWYgKChyZWd2YWwgJiBSRUdfTVNLKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIyX0VOQUJMRSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWd2YWwgJiBSRUdfTVNLKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIyX0NMS19TRUwpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgIH0gd2hpbGUgKDApOworCisgICAgICAgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIHdoZXRoZXIgYSBNQUMgaXMgYWN0aXZlLgorICoKKyAqIFxyZXR1cm4gVHJ1ZSBpZiBNQUMgaXMgYWN0aXZlLCBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX21hY19pc19hY3RpdmUodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAgICAgaWYgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgRlRERl9JU19VUCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorICAgICAgICBpZiAoUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBCTEVfSVNfVVApKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgd2hldGhlciB0aGUgUkMzMksgaXMgdGhlIExvdyBQb3dlciBjbG9jay4KKyAqCisgKiBccmV0dXJuIFRydWUgaWYgUkMzMksgaXMgdGhlIExQIGNsb2NrLCBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2xwX2lzX3JjMzJrKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfMzJLX1JFRywgUkMzMktfRU5BQkxFKSAmJgorICAgICAgICAgICAgICAoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBDTEszMktfU09VUkNFKSA9PSBMUF9DTEtfSVNfUkMzMkspOworfQorCisvKioKKyAqIFxicmllZiBTZXQgUkNYIGFzIHRoZSBMb3cgUG93ZXIgY2xvY2suCisgKgorICogXHdhcm5pbmcgVGhlIFJDWCBtdXN0IGhhdmUgYmVlbiBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9scF9zZXRfcmN4KHZvaWQpCit7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKENSR19UT1AsIENMS19SQ1gyMEtfUkVHLCBSQ1gyMEtfRU5BQkxFKSA9PSAxKTsKKworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIENMSzMyS19TT1VSQ0UsIExQX0NMS19JU19SQ1gpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgWFRBTDMySyBhcyB0aGUgTG93IFBvd2VyIGNsb2NrLgorICoKKyAqIFx3YXJuaW5nIFRoZSBYVEFMMzJLIG11c3QgaGF2ZSBiZWVuIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiEKKyAqICAgICAgICBJbnRlcnJ1cHRzIG11c3QgaGF2ZSBiZWVuIGRpc2FibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9scF9zZXRfeHRhbDMyayh2b2lkKQoreworICAgICAgICBBU1NFUlRfV0FSTklORyhfX2dldF9QUklNQVNLKCkgPT0gMSk7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKENSR19UT1AsIENMS18zMktfUkVHLCBYVEFMMzJLX0VOQUJMRSkgPT0gMSk7CisKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBDTEszMktfU09VUkNFLCBMUF9DTEtfSVNfWFRBTDMySyk7Cit9CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBwaW4gdG8gY29ubmVjdCBhbiBleHRlcm5hbCBkaWdpdGFsIGNsb2NrLgorICoKKyAqLwordm9pZCBod19jcG1fY29uZmlndXJlX2V4dDMya19waW5zKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgYW4gZXh0ZXJuYWwgZGlnaXRhbCBjbG9jayBhcyB0aGUgTG93IFBvd2VyIGNsb2NrLgorICoKKyAqIFx3YXJuaW5nIEludGVycnVwdHMgbXVzdCBoYXZlIGJlZW4gZGlzYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiEKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2xwX3NldF9leHQzMmsodm9pZCkKK3sKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoX19nZXRfUFJJTUFTSygpID09IDEpOworCisgICAgICAgIFJFR19TRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgQ0xLMzJLX1NPVVJDRSwgTFBfQ0xLX0lTX0VYVEVSTkFMKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIFJDMzJLLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV9yYzMyayh2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfMzJLX1JFRywgUkMzMktfRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBSQzMySy4KKyAqCisgKiBcd2FybmluZyBSQzMySyBtdXN0IG5vdCBiZSB0aGUgTFAgY2xvY2suCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV9yYzMyayh2b2lkKQoreworICAgICAgICBBU1NFUlRfV0FSTklORyhSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIENMSzMyS19TT1VSQ0UpICE9IExQX0NMS19JU19SQzMySyk7CisKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFJDMzJLX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBSQzMySyBhcyB0aGUgTG93IFBvd2VyIGNsb2NrLgorICoKKyAqIFx3YXJuaW5nIFRoZSBSQzMySyBtdXN0IGhhdmUgYmVlbiBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9scF9zZXRfcmMzMmsodm9pZCkKK3sKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFJDMzJLX0VOQUJMRSkgPT0gMSk7CisKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBDTEszMktfU09VUkNFLCBMUF9DTEtfSVNfUkMzMkspOworfQorCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgUkNYLiBUaGlzIG11c3QgYmUgZG9uZSBvbmx5IG9uY2Ugc2luY2UgdGhlIHJlZ2lzdGVyIGlzIHJldGFpbmVkLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2NvbmZpZ3VyZV9yY3godm9pZCkKK3sKKyAgICAgICAgdWludDMyX3QgcmVnOworCisgICAgICAgIHJlZyA9IENSR19UT1AtPkNMS19SQ1gyMEtfUkVHOworCisgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQ0xLX1JDWDIwS19SRUcsIFJDWDIwS19OVEMsIHJlZywgMHhDKTsgLy8gMHg0QzIKKyAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfUkNYMjBLX1JFRywgUkNYMjBLX0JJQVMsIHJlZywgMCk7IC8vIExhc3QgcmV2aWV3IGRhdGU6IEZlYiAxNSwgMjAxNiAtIDEyOjI1OjQ3CisgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQ0xLX1JDWDIwS19SRUcsIFJDWDIwS19UUklNLCByZWcsIDIpOworICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS19SQ1gyMEtfUkVHLCBSQ1gyMEtfTE9XRiwgcmVnLCAxKTsKKworICAgICAgICBDUkdfVE9QLT5DTEtfUkNYMjBLX1JFRyA9IHJlZzsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIFJDWCBidXQgZG9lcyBub3Qgc2V0IGl0IGFzIHRoZSBMUCBjbG9jay4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfcmN4KHZvaWQpCit7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS19SQ1gyMEtfUkVHLCBSQ1gyMEtfRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBSQ1guCisgKgorICogXHdhcm5pbmcgUkNYIG11c3Qgbm90IGJlIHRoZSBMUCBjbG9jaworICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfcmN4KHZvaWQpCit7CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgQ0xLMzJLX1NPVVJDRSkgIT0gTFBfQ0xLX0lTX1JDWCk7CisKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLX1JDWDIwS19SRUcsIFJDWDIwS19FTkFCTEUpOworfQorCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgWFRBTDMyS1ggcGlucy4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX2NvbmZpZ3VyZV94dGFsMzJrX3BpbnModm9pZCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBYVEFMMzJLWC4gVGhpcyBtdXN0IGJlIGRvbmUgb25seSBvbmNlIHNpbmNlIHRoZSByZWdpc3RlciBpcyByZXRhaW5lZC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9jb25maWd1cmVfeHRhbDMyayh2b2lkKQoreworICAgICAgICB1aW50MzJfdCByZWc7CisKKyAgICAgICAgLy8gQ29uZmlndXJlIHh0YWwuCisgICAgICAgIHJlZyA9IENSR19UT1AtPkNMS18zMktfUkVHOworICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS18zMktfUkVHLCBYVEFMMzJLX0NVUiwgcmVnLCA1KTsgICAgICAgLy8gTGFzdCByZXZpZXcgZGF0ZTogRmViIDE1LCAyMDE2IC0gMTI6MjU6NDcKKyAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfMzJLX1JFRywgWFRBTDMyS19SQklBUywgcmVnLCAzKTsgICAgIC8vIExhc3QgcmV2aWV3IGRhdGU6IEZlYiAxNSwgMjAxNiAtIDEyOjI1OjQ3CisKKyAgICAgICAgaWYgKGRnX2NvbmZpZ0VYVF9MUF9JU19ESUdJVEFMKSB7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBDTEtfMzJLX1JFRywgWFRBTDMyS19ESVNBQkxFX0FNUFJFRywgcmVnLCAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS18zMktfUkVHLCBYVEFMMzJLX0RJU0FCTEVfQU1QUkVHLCByZWcsIDApOworICAgICAgICB9CisKKyAgICAgICAgQ1JHX1RPUC0+Q0xLXzMyS19SRUcgPSByZWc7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBYVEFMMzJLIGJ1dCBkb2VzIG5vdCBzZXQgaXQgYXMgdGhlIExQIGNsb2NrLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV94dGFsMzJrKHZvaWQpCit7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS18zMktfUkVHLCBYVEFMMzJLX0VOQUJMRSk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgWFRBTDMySy4KKyAqCisgKiBcd2FybmluZyBYVEFMMzJLIG11c3Qgbm90IGJlIHRoZSBMUCBjbG9jay4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9kaXNhYmxlX3h0YWwzMmsodm9pZCkKK3sKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoUkVHX0dFVEYoQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBDTEszMktfU09VUkNFKSAhPSBMUF9DTEtfSVNfWFRBTDMySyk7CisKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQ0xLXzMyS19SRUcsIFhUQUwzMktfRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgdGhlIHN0YXR1cyBvZiBhIHJlcXVlc3RlZCBjYWxpYnJhdGlvbi4KKyAqCisgKiBccmV0dXJuIHRydWUgaWYgdGhlIGNhbGlicmF0aW9uIGhhcyBmaW5pc2hlZCAob3IgbmV2ZXIgcnVuKSBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2NhbGlicmF0aW9uX2ZpbmlzaGVkKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihBTkFNSVNDLCBDTEtfUkVGX1NFTF9SRUcsIFJFRl9DQUxfU1RBUlQpID09IDA7Cit9CisKKy8qKgorICogXGJyaWVmIFN0YXJ0IGNhbGlicmF0aW9uIG9mIGEgY2xvY2suCisgKgorICogXHdhcm5pbmcgWFRBTDE2TSBtdXN0IGhhdmUgc2V0dGxlZCBhbmQgdGhlIHN5c3RlbSBjbG9jayBiZSB0aGUgWFRBTDE2TSBvciB0aGUgUExMLgorICoKKyAqLwordm9pZCBod19jcG1fc3RhcnRfY2FsaWJyYXRpb24oY2FsX2Nsa190IGNsa190eXBlLCB1aW50MzJfdCBjeWNsZXMpOworCisvKioKKyAqIFxicmllZiBSZXR1cm4gdGhlIGNhbGlicmF0aW9uIHJlc3VsdHMuCisgKgorICogXHdhcm5pbmcgWFRBTDE2TSBtdXN0IGhhdmUgc2V0dGxlZCBhbmQgdGhlIHN5c3RlbSBjbG9jayBiZSB0aGUgWFRBTDE2TSBvciB0aGUgUExMLgorICoKKyAqLwordWludDMyX3QgaHdfY3BtX2dldF9jYWxpYnJhdGlvbl9kYXRhKHZvaWQpOworCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0aGUgUkMxNk0gaXMgdGhlIFN5c3RlbSBDbG9jay4KKyAqCisgKiBccmV0dXJuIDEgaWYgdGhlIFJDMTZNIGlzIHRoZSBTeXN0ZW0gQ2xvY2sgZWxzZSAwLgorICoKKyAqLwordWludDMyX3QgaHdfY3BtX3N5c2Nsa19pc19yYzE2KHZvaWQpOworCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0aGUgWFRBTDE2TSBpcyB0aGUgU3lzdGVtIENsb2NrLgorICoKKyAqIFxyZXR1cm4gMSBpZiB0aGUgWFRBTDE2TSBpcyB0aGUgU3lzdGVtIENsb2NrIGVsc2UgMC4KKyAqCisgKi8KK3VpbnQzMl90IGh3X2NwbV9zeXNjbGtfaXNfeHRhbDE2bSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0dXAgc3lzdGVtIGZvciBhIDMyTUh6IC8gMTZNSHogZXh0ZXJuYWwgY3J5c3RhbC4KKyAqCisgKiBccGFyYW1baW5dIGZyZXEgdHJ1ZSBpZiAzMk1IeiBjcnlzdGFsIGlzIGNvbm5lY3RlZCwgZmFsc2UgaWYgMTZNSHogY3J5c3RhbCBpcyB1c2VkCisgKgorICogXHJldHVybiB2b2lkCisgKgorICovCit2b2lkIGh3X2NwbV9zZXRfZGl2bihib29sIGZyZXEpOworCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0aGUgc3lzdGVtIGNsb2NrIGNhbiBiZSBzd2l0Y2hlZCB0byB0aGUgUkMxNi4KKyAqCisgKiBcZGV0YWlscyBDaGVja3Mgd2hldGhlciBNQUMsIEFQSFkvRFBIWSwgQ09FWCwgU1JDLCBQRE0sIFVBUlQgYW5kIFVTQiBhcmUgZW5hYmxlZC4gSWYgYW55IG9mCisgKiAgICAgICAgICB0aGVzZSBibG9ja3MgaXMgZW5hYmxlZCB0aGVuIHRoZSBzd2l0Y2hpbmcgaXMgbm90IGFsbG93ZWQuIEl0IGFsc28gY2hlY2tzIHdoZXRoZXIgdGhlCisgKiAgICAgICAgICBUaW1lcjAvMiwgUENNLCBBREMsIEkyQyBhbmQgU1BJIGFyZSBhY3RpdmUgYW5kLCBpZiBhbnkgb2YgdGhlbSBpcywgaWYgaXQgaXMgdXNpbmcgdGhlCisgKiAgICAgICAgICBESVZOIGNsb2NrLiBJbiB0aGlzIGNhc2UgdGhlIHN3aXRjaGluZyBpcyBub3QgYWxsb3dlZC4KKyAqCisgKiBccmV0dXJuIHRydWUgaWYgaXQgaXMgYWxsb3dlZCB0byBzd2l0Y2ggdG8gUkMxNiBlbHNlIGZhbHNlLgorICoKKyAqLworYm9vbCBod19jcG1faXNfcmMxNl9hbGxvd2VkKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgU3lzdGVtIGNsb2NrLgorICoKKyAqIFxwYXJhbVtpbl0gbW9kZSBUaGUgbmV3IHN5c3RlbSBjbG9jay4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX3NldF9zeXNjbGsodWludDMyX3QgbW9kZSk7CisKKy8qKgorICogXGJyaWVmIEFkZCBhIHNob3J0IGRlbGF5IGxvb3AuCisgKgorICovCit2b2lkIGh3X2NwbV9zaG9ydF9kZWxheSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBQTEwuCisgKgorICovCit2b2lkIGh3X2NwbV9wbGxfc3lzX29uKHZvaWQpOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSBQTEwuCisgKgorICogXHdhcm5pbmcgVGhlIFN5c3RlbSBjbG9jayBtdXN0IGhhdmUgYmVlbiBzZXQgdG8gWFRBTDE2TSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQorICoKKyAqLwordm9pZCBod19jcG1fcGxsX3N5c19vZmYodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgM1YzIGNsYW1wLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtXzN2M19jbGFtcF9vbih2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBBT05fU1BBUkVfUkVHLCBFTl9CQVRTWVNfUkVUKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgM1YzIGNsYW1wLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtXzN2M19jbGFtcF9vZmYodm9pZCkKK3sKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQU9OX1NQQVJFX1JFRywgRU5fQkFUU1lTX1JFVCk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBPU0MxNk0gYW1wbGl0dWRlIHJlZ3VsYXRpb24KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV9vc2MxNm1fYW1wX3JlZyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfb3NjMTZtX2FtcF9yZWcodm9pZCkKK3sKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQU9OX1NQQVJFX1JFRywgT1NDMTZfSE9MRF9BTVBfUkVHKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBPU0MxNk0gYW1wbGl0dWRlIHJlZ3VsYXRpb24KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfb3NjMTZtX2FtcF9yZWcodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV9vc2MxNm1fYW1wX3JlZyh2b2lkKQoreworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBBT05fU1BBUkVfUkVHLCBPU0MxNl9IT0xEX0FNUF9SRUcpOworfQorCisvKioKKyAqIFxicmllZiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgMXY4IHJhaWwuCisgKgorICogXHBhcmFtW2luXSBzdGF0ZSB0cnVlLCB0aGUgMXY4IHJhaWwgaXMgY29udHJvbGxlZCB2aWEgZGdfY29uZmlnIG1hY3JvcworICogICAgICAgICAgICAgICAgICBmYWxzZSwgdGhlIDF2OCByYWlsIGlzIG9mZgorICoKKyAqLwordm9pZCBod19jcG1fc2V0XzF2OF9zdGF0ZShib29sIHN0YXRlKTsKKworLyoqCisgKiBcYnJpZWYgUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIDF2OCByYWlsLgorICoKKyAqIFxyZXR1cm4gZmFsc2UgaWYgdGhlIDF2OCByYWlsIGlzIG9mZiwgdHJ1ZSBpZiBpdCBpcyBjb250cm9sbGVkIHZpYSBkZ19jb25maWcgbWFjcm9zCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgYm9vbCBod19jcG1fZ2V0XzF2OF9zdGF0ZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSBMRE9fVkJBVF9SRVQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fbGRvX3ZiYXRfcmV0X29uKHZvaWQpCit7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET19WQkFUX1JFVF9ESVNBQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgTERPX1ZCQVRfUkVULgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2xkb192YmF0X3JldF9vZmYodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPX1ZCQVRfUkVUX0RJU0FCTEUpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSBMRE9fSU9fUkVUIGFuZCB0aGUgTERPX0lPMl9SRVQuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fbGRvX2lvX3JldF9vZmYodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fbGRvX2lvX3JldF9vZmYodm9pZCkKK3sKKyAgICAgICAgdWludDMyX3QgcmVnID0gQ1JHX1RPUC0+TERPX0NUUkwyX1JFRzsKKworICAgICAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfMVY4X0ZMQVNIX0VOKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFLCByZWcsIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChkZ19jb25maWdVU0VfQk9EID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF8xVjhfUEFfRU4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfUEFfUkVUX0RJU0FCTEUsIHJlZywgMSk7CisgICAgICAgIH0KKworICAgICAgICBDUkdfVE9QLT5MRE9fQ1RSTDJfUkVHID0gcmVnOworfQorCisvKgorICogXGJyaWVmIFNldCB0aGUgTERPX1JBRElPX1NFVFZERCB0byB0aGUgcHJvcGVyIGxldmVsICgweDIgPSAxLjQwVikKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX3Jlc2V0X3JhZGlvX3ZkZCh2b2lkKQoreworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBMRE9fQ1RSTDFfUkVHLCBMRE9fUkFESU9fU0VUVkRELCAweDIpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgdGhlIExET3MuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc3RhcnRfbGRvcyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zdGFydF9sZG9zKHZvaWQpCit7CisgICAgICAgIHVpbnQzMl90IHJlZyA9IENSR19UT1AtPkxET19DVFJMMl9SRUc7CisgICAgICAgIGlmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQikgJiYKKyAgICAgICAgICAgICAgICAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19TVEVQID09IEJMQUNLX09SQ0FfSUNfU1RFUF9BKSkgeworICAgICAgICAgICAgICAgIFJFR19TRVRGKENSR19UT1AsIExET19DVFJMMV9SRUcsIExET19WQkFUX1JFVF9MRVZFTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgTERPX0NUUkwxX1JFRywgTERPX1JBRElPX0VOQUJMRSk7CisgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWMl9PTiwgcmVnLCAxKTsKKworICAgICAgICBpZiAoKGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgPT0gMSkgJiYgaHdfY3BtX2dldF8xdjhfc3RhdGUoKSkgeworICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9PTiwgcmVnLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9SRVRfRElTQUJMRSwgcmVnLCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfQ0xSX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfUkVUX0RJU0FCTEUsIHJlZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFJFR19DTFJfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9GTEFTSF9PTiwgcmVnKTsKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfUkVUX0RJU0FCTEUsIHJlZywgMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4UCA9PSAxKSB7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X1BBX09OLCByZWcsIDEpOworICAgICAgICAgICAgICAgIFJFR19DTFJfRklFTEQoQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9QQV9SRVRfRElTQUJMRSwgcmVnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBSRUdfQ0xSX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfUEFfT04sIHJlZyk7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X1BBX1JFVF9ESVNBQkxFLCByZWcsIDEpOworICAgICAgICB9CisKKyAgICAgICAgQ1JHX1RPUC0+TERPX0NUUkwyX1JFRyA9IHJlZzsKK30KKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIHRoZSBEQ0RDLgorICoKKyAqLwordm9pZCBod19jcG1fZGNkY19jb25maWcodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgRENEQy4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX2RjZGNfb24odm9pZCk7CisKKy8qKgorICogXGJyaWVmIFByZXBhcmUgdGhlIERDREMgZm9yIHNsZWVwLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2RjZGNfc2xlZXAodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCit2b2lkIGh3X2NwbV9kY2RjX3NsZWVwKHZvaWQpCit7CisgICAgICAgIC8vIERlYWN0aXZhdGUgRENEQyAxVjQgb3V0cHV0IHJhaWwKKyAgICAgICAgRENEQy0+RENEQ19WMTRfMV9SRUcgJj0gfihSRUdfTVNLKERDREMsIERDRENfVjE0XzFfUkVHLCBEQ0RDX1YxNF9FTkFCTEVfSFYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKERDREMsIERDRENfVjE0XzFfUkVHLCBEQ0RDX1YxNF9FTkFCTEVfTFYpKTsKKworICAgICAgICAvLyBTZXQgRENEQyB0byBzbGVlcCBtb2RlCisgICAgICAgIFJFR19TRVRGKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFLCAyKTsKKworICAgICAgICAvLyBEaXNhYmxlIFJldGVudGlvbiBMRE9zIGZvciAxVjggYW5kIDFWOFAKKyAgICAgICAgQ1JHX1RPUC0+TERPX0NUUkwyX1JFRyB8PSAoKDEgPDwgUkVHX1BPUyhDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X1BBX1JFVF9ESVNBQkxFKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBSRUdfUE9TKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfUkVUX0RJU0FCTEUpKSk7CisKKyAgICAgICAgLy8gRW5hYmxlIExET19DT1JFIGJlZm9yZSBnb2luZyB0byBzbGVlcAorICAgICAgICBod19jcG1fdHVybl8xXzJWX29uKCk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgdGhlIERDREMuCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGNkY19vZmYodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGNkY19vZmYodm9pZCkKK3sKKyAgICAgICAgLy8gRW5hYmxlIHRoZSBMRE9zCisgICAgICAgIGh3X2NwbV9zdGFydF9sZG9zKCk7CisKKyAgICAgICAgLy8gVHVybiBvZmYgRENEQworICAgICAgICBEQ0RDLT5EQ0RDX0NUUkxfMF9SRUcgJj0gflJFR19NU0soRENEQywgRENEQ19DVFJMXzBfUkVHLCBEQ0RDX01PREUpOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiBEQ0RDIGlzIGFjdGl2ZS4KKyAqCisgKiBccmV0dXJuIFRydWUsIGlmIHRoZSBEQ0RDIGlzIGFjdGl2ZSBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2RjZGNfaXNfYWN0aXZlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2RjZGNfaXNfYWN0aXZlKHZvaWQpCit7CisgICAgICAgIHJldHVybiAoUkVHX0dFVEYoRENEQywgRENEQ19DVFJMXzBfUkVHLCBEQ0RDX01PREUpID09IDEpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSBEQ0RDIGFuZCBzd2l0Y2ggdG8gTERPcyB3aXRob3V0IHR1cm5pbmcgb2ZmIHRoZSBMRE9fUkFESU8uCisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc3dpdGNoX3RvX2xkb3Modm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fc3dpdGNoX3RvX2xkb3Modm9pZCkKK3sKKyAgICAgICAgLy8gRW5hYmxlIHRoZSBMRE9zCisgICAgICAgIGh3X2NwbV9zdGFydF9sZG9zKCk7CisKKyAgICAgICAgLy8gVHVybiBvZmYgRENEQworICAgICAgICBEQ0RDLT5EQ0RDX0NUUkxfMF9SRUcgJj0gflJFR19NU0soRENEQywgRENEQ19DVFJMXzBfUkVHLCBEQ0RDX01PREUpOworfQorCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgY29uZmlndXJlZCB0aW1lIGZvciB0aGUgcmUtY2hhcmdpbmcgb2YgdGhlIHJldGVudGlvbiBMRE9zIGFuZCB0aGUgRENEQyByYWlscy4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXRfcmVjaGFyZ2VfcGVyaW9kKHVpbnQxNl90IHBlcmlvZCkKK3sKKyAgICAgICAgQ1JHX1RPUC0+U0xFRVBfVElNRVJfUkVHID0gcGVyaW9kOworfQorCisvKioKKyAqIFxicmllZiBSZXNldCB0aGUgdGltZSBmb3IgdGhlIHJlLWNoYXJnaW5nIG9mIHRoZSByZXRlbnRpb24gTERPcyBhbmQgdGhlIERDREMgcmFpbHMgdG8gemVyby4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9yZXNldF9yZWNoYXJnZV9wZXJpb2Qodm9pZCkKK3sKKyAgICAgICAgLy8gU2V0IHRoZSBEQ0RDIGNoYXJnZSBwZXJpb2QKKyAgICAgICAgQ1JHX1RPUC0+U0xFRVBfVElNRVJfUkVHID0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IChwYXJ0IG9mKSB0aGUgcHJlZmVycmVkIHNldHRpbmdzLgorICoKKyAqLwordm9pZCBod19jcG1fc2V0X3ByZWZlcnJlZF92YWx1ZXModm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgR1BJTyB1c2VkIGZvciB0aGUgU1cgY3Vyc29yIHRvIEhpZ2gtWi4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9zZXR1cF9zd19jdXJzb3Iodm9pZCkKK3sKKyAgICAgICAgaWYgKGRnX2NvbmZpZ1VTRV9TV19DVVJTT1IgPT0gMSkgeworICAgICAgICAgICAgICAgIFNXX0NVUlNPUl9HUElPID0gMHgwMDA7CisgICAgICAgIH0KK30KKworLyoqCisgKiBcYnJpZWYgVHJpZ2dlcnMgdGhlIEdQSU8gdXNlZCBmb3IgdGhlIFNXIGN1cnNvci4KKyAqCisgKi8KK3ZvaWQgaHdfY3BtX3RyaWdnZXJfc3dfY3Vyc29yKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTdG9wIHRoZSBjbG9jayB0byB0aGUgUkYgdW5pdC4KKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9yZmN1X2Nsa19vZmYodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fcmZjdV9jbGtfb2ZmKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfUkFESU9fUkVHLCBSRkNVX0VOQUJMRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgdGhlIGRlYnVnZ2VyLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2VuYWJsZV9kZWJ1Z2dlcih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2NwbV9lbmFibGVfZGVidWdnZXIodm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFNZU19DVFJMX1JFRywgREVCVUdHRVJfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgdGhlIGRlYnVnZ2VyLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfY3BtX2Rpc2FibGVfZGVidWdnZXIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19jcG1fZGlzYWJsZV9kZWJ1Z2dlcih2b2lkKQoreworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBERUJVR0dFUl9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIGRlYnVnZ2VyIGlzIGF0dGFjaGVkLgorICoKKyAqIFxyZXR1cm4gdHJ1ZSwgaWYgdGhlIGRlYnVnZ2VyIGlzIGF0dGFjaGVkLCBlbHNlIGZhbHNlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2lzX2RlYnVnZ2VyX2F0dGFjaGVkKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2lzX2RlYnVnZ2VyX2F0dGFjaGVkKHZvaWQpCit7CisgICAgICAgIHJldHVybiAoUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBEQkdfSVNfQUNUSVZFKSAhPSAwKTsKK30KKworCisvKioKKyAqIFxicmllZiBDaGVjayBpZiBhbnkgRE1BIGNoYW5uZWwgaXMgYWN0aXZlLgorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBhIGNoYW5uZWwgaXMgYWN0aXZlLCBmYWxzZSBpZiBhbGwgY2hhbm5lbHMgYXJlIGluYWN0aXZlLgorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIGJvb2wgaHdfY3BtX2NoZWNrX2RtYSh2b2lkKQoreworICAgICAgICBib29sIHJldCA9IGZhbHNlOworCisgICAgICAgIGlmICgoKERNQS0+RE1BMF9DVFJMX1JFRyAmIFJFR19NU0soRE1BLCBETUEwX0NUUkxfUkVHLCBETUFfT04pKSA9PSAxKSB8fAorICAgICAgICAgICAgKChETUEtPkRNQTFfQ1RSTF9SRUcgJiBSRUdfTVNLKERNQSwgRE1BMV9DVFJMX1JFRywgRE1BX09OKSkgPT0gMSkgfHwKKyAgICAgICAgICAgICgoRE1BLT5ETUEyX0NUUkxfUkVHICYgUkVHX01TSyhETUEsIERNQTJfQ1RSTF9SRUcsIERNQV9PTikpID09IDEpIHx8CisgICAgICAgICAgICAoKERNQS0+RE1BM19DVFJMX1JFRyAmIFJFR19NU0soRE1BLCBETUEzX0NUUkxfUkVHLCBETUFfT04pKSA9PSAxKSB8fAorICAgICAgICAgICAgKChETUEtPkRNQTRfQ1RSTF9SRUcgJiBSRUdfTVNLKERNQSwgRE1BNF9DVFJMX1JFRywgRE1BX09OKSkgPT0gMSkgfHwKKyAgICAgICAgICAgICgoRE1BLT5ETUE1X0NUUkxfUkVHICYgUkVHX01TSyhETUEsIERNQTVfQ1RSTF9SRUcsIERNQV9PTikpID09IDEpIHx8CisgICAgICAgICAgICAoKERNQS0+RE1BNl9DVFJMX1JFRyAmIFJFR19NU0soRE1BLCBETUE2X0NUUkxfUkVHLCBETUFfT04pKSA9PSAxKSB8fAorICAgICAgICAgICAgKChETUEtPkRNQTdfQ1RSTF9SRUcgJiBSRUdfTVNLKERNQSwgRE1BN19DVFJMX1JFRywgRE1BX09OKSk9PSAxKSApeworICAgICAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIFxicmllZiAgIElzc3VlIGEgSFcgcmVzZXQgKGR1ZSB0byBhIGZhdWx0IGNvbmRpdGlvbikuCisgKgorICogXGRldGFpbHMgQSBIVyByZXNldCAoV0RPRykgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBOTUkgSGFuZGxlciB3aWxsIGJlIGNhbGxlZCBhbmQgInN0YXR1cyIgd2lsbCBiZQorICogICAgICAgICAgc3RvcmVkIGluIHRoZSBSZXRlbnRpb24gUkFNLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfY3BtX3Jlc2V0X3N5c3RlbSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgICBJc3N1ZSBhIEhXIHJlc2V0IChpbnRlbnRpb25hbGx5LCBpLmUuIGFmdGVyIGEgU1cgdXBncmFkZSkuCisgKgorICogXGRldGFpbHMgQSBIVyByZXNldCAoV0RPRykgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBOTUkgSGFuZGxlciBpcyBieXBhc3NlZC4gVGh1cywgbm8gInN0YXR1cyIgaXMKKyAqICAgICAgICAgIHN0b3JlZCBpbiB0aGUgUmV0ZW50aW9uIFJBTS4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X2NwbV9yZWJvb3Rfc3lzdGVtKHZvaWQpOworCisvKioKKyAqIFxicmllZiBBZGQgZGVsYXkgb2YgTiB1c2Vjcy4KKyAqCisgKiBccGFyYW1baW5dIHVzZWMgVGhlIG51bWJlciBvZiB1c2VjcyB0byB3YWl0IGZvci4KKyAqCisgKiBccmV0dXJuIHZvaWQKKyAqCisgKiBcd2FybmluZyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGludGVycnVwdHMgZGlzYWJsZWQuIEluIG9yZGVyIHRvIHNhdmUgcHJvY2Vzc2luZworICogICAgICAgdGltZSBhbmQgaW1wcm92ZSBhY2N1cmFjeSwgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGNtX3N5c2NsayBhbmQgY21fYWhiY2xrIHZhbHVlcyBhbmQgbm90IHRoZQorICogICAgICAgYWN0dWFsIHJlZ2lzdGVyIHNldHRpbmdzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGFmdGVyIHRoZSBDUE0gaGFzCisgKiAgICAgICByZXN0b3JlZCB0aGUgdGltaW5nIHNldHRpbmdzLiBUaGlzIG9jY3VycyBlaXRoZXIgb24gc3RhcnQtdXAsIHdoZW4gdGhlIHN5c3RlbSBjbG9jayBpcworICogICAgICAgUkMxNiwgb3IgYWZ0ZXIgdGhlIFhUQUwxNk0gaGFzIHNldHRsZWQsIHdoZW4gdGhlIHN5c3RlbSBjbG9jayBpcyBYVEFMMTZNIG9yIFBMTC4KKyAqICAgICAgIFRoZXJlZm9yZSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIHBsYXRmb3JtIChlaXRoZXIgdGhlIENQTSBvciBzb21lIG90aGVyIGVudGl0eSkgaGFzCisgKiAgICAgICBjb25maWd1cmVkIHZhbHVlcyBzeXNfY2xrX3QgY21fc3lzY2xrIGFuZCBhaGJfZGl2X3QgY21fYWhiY2xrCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod19jcG1fZGVsYXlfdXNlYyh1aW50MzJfdCB1c2VjKTsKKworLyoqCisgKiBcYnJpZWYgIFRyaWdnZXIgYSBHUElPIHdoZW4gQVNTRVJUX1dBUk5JTkcoKSBvciBBU1NFUlRfRVJST1IoKSBoaXRzLgorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfY3BtX2Fzc2VydF90cmlnZ2VyX2dwaW8odm9pZCk7CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfQ1BNICovCisKKyNlbmRpZiAvKiBDUE1fSF8gKi8KKworLyoqCitcfQorXH0KK1x9CisqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19kbWEuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmYzYzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZG1hLmgKQEAgLTAsMCArMSwzODIgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIERNQQorICogXHsKKyAqIFxicmllZiBETUEgQ29udHJvbGxlcgorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19kbWEuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIERNQSBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19ETUFfSF8KKyNkZWZpbmUgSFdfRE1BX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfRE1BCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisvKgorKiBFTlVNRVJBVElPTiBERUZJTklUSU9OUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKy8qKgorICogXGJyaWVmIERNQSBjaGFubmVsIG51bWJlcgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX0NIQU5ORUxfMCA9IDAsICAgLyoqPCBDaGFubmVsIG51bWJlciAwICovCisgICAgICAgIEhXX0RNQV9DSEFOTkVMXzEgPSAxLCAgIC8qKjwgQ2hhbm5lbCBudW1iZXIgMSAqLworICAgICAgICBIV19ETUFfQ0hBTk5FTF8yID0gMiwgICAvKio8IENoYW5uZWwgbnVtYmVyIDIgKi8KKyAgICAgICAgSFdfRE1BX0NIQU5ORUxfMyA9IDMsICAgLyoqPCBDaGFubmVsIG51bWJlciAzICovCisgICAgICAgIEhXX0RNQV9DSEFOTkVMXzQgPSA0LCAgIC8qKjwgQ2hhbm5lbCBudW1iZXIgNCAqLworICAgICAgICBIV19ETUFfQ0hBTk5FTF81ID0gNSwgICAvKio8IENoYW5uZWwgbnVtYmVyIDUgKi8KKyAgICAgICAgSFdfRE1BX0NIQU5ORUxfNiA9IDYsICAgLyoqPCBDaGFubmVsIG51bWJlciA2ICovCisgICAgICAgIEhXX0RNQV9DSEFOTkVMXzcgPSA3LCAgICAvKio8IENoYW5uZWwgbnVtYmVyIDcgKi8KKyAgICAgICAgSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCA9IDggLyoqPCBJbnZhbGlkIENoYW5uZWwgbnVtYmVyICovCit9IEhXX0RNQV9DSEFOTkVMOworCisvKioKKyAqIFxicmllZiBETUEgY2hhbm5lbCBlbmFibGUvZGlzYWJsZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX1NUQVRFX0RJU0FCTEVEID0gMHgwLCAgICAvKio8IERNQSBkaXNhYmxlZCAqLworICAgICAgICBIV19ETUFfU1RBVEVfRU5BQkxFRCA9IDB4MSAgICAgIC8qKjwgRE1BIGVuYWJsZWQgKi8KK30gSFdfRE1BX1NUQVRFOworCisvKioKKyAqIFxicmllZiBETUEgY2hhbm5lbCBidXMgd2lkdGggdHJhbnNmZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9CV19CWVRFID0gMHgwLCAgICAgICAgICAgLyoqPCBCeXRlICovCisgICAgICAgIEhXX0RNQV9CV19IQUxGV09SRCA9IDB4MiwgICAgICAgLyoqPCBIYWxmd29yZCAqLworICAgICAgICBIV19ETUFfQldfV09SRCA9IDB4NCAgICAgICAgICAgIC8qKjwgV29yZCAqLworfSBIV19ETUFfQlc7CisKKy8qKgorICogXGJyaWVmIERNQSBjaGFubmVsIGludGVycnVwdCBlbmFibGUvZGlzYWJsZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX0lSUV9TVEFURV9ESVNBQkxFRCA9IDB4MCwgICAgICAgIC8qKjwgRGlzYWJsZSBpbnRlcnJ1cHQgb24gdGhpcyBjaGFubmVsICovCisgICAgICAgIEhXX0RNQV9JUlFfU1RBVEVfRU5BQkxFRCA9IDB4OCAgICAgICAgICAvKio8IEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhpcyBjaGFubmVsICovCit9IEhXX0RNQV9JUlFfU1RBVEU7CisKKy8qKgorICogXGJyaWVmIERNQSByZXF1ZXN0IGlucHV0IG11bHRpcGxleGVyIGNvbnRyb2xsZWQKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9EUkVRX1NUQVJUID0gMHgwLCAgICAgICAgLyoqPCBETUEgY2hhbm5lbCBzdGFydHMgaW1tZWRpYXRlbHkgKi8KKyAgICAgICAgSFdfRE1BX0RSRVFfVFJJR0dFUkVEID0gMHgxMCAgICAvKio8IERNQSBjaGFubmVsIG11c3QgYmUgdHJpZ2dlcmVkIGJ5IHBlcmlwaGVyYWwgRE1BIHJlcXVlc3QgKi8KK30gSFdfRE1BX0RSRVE7CisKKy8qKgorICogXGJyaWVmIEluY3JlbWVudCBkZXN0aW5hdGlvbiBhZGRyZXNzIG1vZGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0RNQV9CSU5DX0ZBTFNFID0gMHgwLCAgICAgICAgLyoqPCBEbyBub3QgaW5jcmVtZW50ICovCisgICAgICAgIEhXX0RNQV9CSU5DX1RSVUUgID0gMHgyMCAgICAgICAgLyoqPCBJbmNyZW1lbnQgYWNjb3JkaW5nIHZhbHVlIG9mIEJXICovCit9IEhXX0RNQV9CSU5DOworCisvKioKKyAqIFxicmllZiBJbmNyZW1lbnQgb2Ygc291cmNlIGFkZHJlc3MgbW9kZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX0FJTkNfRkFMU0UgPSAweDAsICAgICAgICAvKio8IERvIG5vdCBpbmNyZW1lbnQgKi8KKyAgICAgICAgSFdfRE1BX0FJTkNfVFJVRSAgPSAweDQwICAgICAgICAvKio8IEluY3JlbWVudCBhY2NvcmRpbmcgdmFsdWUgb2YgQlcgKi8KK30gSFdfRE1BX0FJTkM7CisKKy8qKgorICogXGJyaWVmIENoYW5uZWwgbW9kZQorICoKKyAqIEluIG5vcm1hbCBtb2RlIHRoZSBETUEgdHJhbnNmZXIgc3RvcHMgdGhlIHRyYW5zZmVyIGFmdGVyCisgKiBsZW5ndGggRE1BeF9MRU5fUkVHLgorICogSW4gY2lyY3VsYXIgbW9kZSB0aGUgRE1BIGNoYW5uZWwgcmVwZWF0cyB0aGUgdHJhbnNmZXIKKyAqIGFmdGVyIGxlbmd0aCBETUF4X0xFTl9SRUcgd2l0aCB0aGUgaW5pdGlhbCByZWdpc3RlciB2YWx1ZXMKKyAqIERNQXhfQV9TVEFSVF9SRUcsIERNQXhfQl9TVEFSVF9SRUcsIERNQXhfTEVOX1JFRywgRE1BeF9JTlRfUkVHLgorICoKKyAqIFxub3RlIG9ubHkgd29ya3MgaWYgRFJFUV9NT0RFID0gMQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX01PREVfTk9STUFMID0gMHgwLCAgICAgICAvKio8IE5vcm1hbCBtb2RlICovCisgICAgICAgIEhXX0RNQV9NT0RFX0NJUkNVTEFSID0gMHg4MCAgICAgLyoqPCBDaXJjdWxhciBtb2RlICovCit9IEhXX0RNQV9NT0RFOworCisvKioKKyAqIFxicmllZiBDaGFubmVsIHByaW9yaXR5CisgKgorICogU2V0IHByaW9yaXR5IGxldmVsIG9mIERNQSBjaGFubmVsIHRvIGRldGVybWluZSB3aGljaCBETUEKKyAqIGNoYW5uZWwgd2lsbCBiZSBhY3RpdmF0ZWQgaW4gY2FzZSBtb3JlIHRoYW4gb25lIERNQSBjaGFubmVsCisgKiByZXF1ZXN0cyBETUEuCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19ETUFfUFJJT18wID0gMHgwMDAsICAvKio8IExvd2VzdCBwcmlvcml0eSAqLworICAgICAgICBIV19ETUFfUFJJT18xID0gMHgxMDAsICAvKio8IC4uICovCisgICAgICAgIEhXX0RNQV9QUklPXzIgPSAweDIwMCwgIC8qKjwgLi4gKi8KKyAgICAgICAgSFdfRE1BX1BSSU9fMyA9IDB4MzAwLCAgLyoqPCAuLiAqLworICAgICAgICBIV19ETUFfUFJJT180ID0gMHg0MDAsICAvKio8IC4uICovCisgICAgICAgIEhXX0RNQV9QUklPXzUgPSAweDUwMCwgIC8qKjwgLi4gKi8KKyAgICAgICAgSFdfRE1BX1BSSU9fNiA9IDB4NjAwLCAgLyoqPCAuLiAqLworICAgICAgICBIV19ETUFfUFJJT183ID0gMHg3MDAgICAvKio8IEhpZ2hlc3QgcHJpb3JpdHkgKi8KK30gSFdfRE1BX1BSSU87CisKKy8qKgorICogXGJyaWVmIERNQSBpZGxlIG1vZGUKKyAqCisgKiBJbiBibG9ja2luZyBtb2RlIHRoZSBETUEgcGVyZm9ybXMgYSBmYXN0IGJhY2stdG8tYmFjaworICogY29weSwgZGlzYWJsaW5nIGJ1cyBhY2Nlc3MgZm9yIGFueSBidXMgbWFzdGVyIHdpdGggbG93ZXIgcHJpb3JpdHkuCisgKiBJbiBpbnRlcnJ1cHRpbmcgbW9kZSB0aGUgRE1BIGluc2VydHMgYSB3YWl0IGN5Y2xlIGFmdGVyIGVhY2gKKyAqIHN0b3JlIGFsbG93aW5nIHRoZSBDUjE2IHRvIHN0ZWFsIGN5Y2xlcyBvciBjYWNoZSB0byBwZXJmb3JtIGEKKyAqIGJ1cnN0IHJlYWQuCisgKgorICogXG5vdGUgaWYgRFJFUV9NT0RFID0gMSwgRE1BX0lETEUgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0CisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19ETUFfSURMRV9CTE9DS0lOR19NT0RFID0gMHgwMDAsICAgICAgLyoqPCBCbG9ja2luZyBtb2RlICovCisgICAgICAgIEhXX0RNQV9JRExFX0lOVEVSUlVQVElOR19NT0RFID0gMHg4MDAgICAvKio8IEludGVycnVwdGluZyBtb2RlICovCit9IEhXX0RNQV9JRExFOworCisvKioKKyAqIFxicmllZiBETUEgaW5pdCBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19ETUFfSU5JVF9BWF9CWF9BWV9CWSA9IDB4MDAwMCwgICAgICAgLyoqPCBETUEgcGVyZm9ybXMgY29weSBBMSB0byBCMSwgQTIgdG8gQjIgKi8KKyAgICAgICAgSFdfRE1BX0lOSVRfQVhfQlhfQlkgICAgPSAweDEwMDAgICAgICAgIC8qKjwgRE1BIHBlcmZvcm1zIGNvcHkgQTEgdG8gQjEsIEIyICovCit9IEhXX0RNQV9JTklUOworCisvKioKKyAqIFxicmllZiBDaGFubmVsIHJlcXVlc3QgdHJpZ2dlcgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfRE1BX1RSSUdfU1BJX1JYVFggPSAweDAsCisgICAgICAgIEhXX0RNQV9UUklHX1NQSTJfUlhUWCA9IDB4MSwKKyAgICAgICAgSFdfRE1BX1RSSUdfVUFSVF9SWFRYID0gMHgyLAorICAgICAgICBIV19ETUFfVFJJR19VQVJUMl9SWFRYID0gMHgzLAorICAgICAgICBIV19ETUFfVFJJR19JMkNfUlhUWCA9IDB4NCwKKyAgICAgICAgSFdfRE1BX1RSSUdfSTJDMl9SWFRYID0gMHg1LAorICAgICAgICBIV19ETUFfVFJJR19VU0JfUlhUWCA9IDB4NiwKKyAgICAgICAgSFdfRE1BX1RSSUdfSTJTX0xFRlRSSUdIVCA9IDB4OCwKKyAgICAgICAgSFdfRE1BX1RSSUdfUERNX0xFRlRSSUdIVCA9IDB4OSwKKyAgICAgICAgSFdfRE1BX1RSSUdfRlRERl9SWFRYID0gMHhBLAorICAgICAgICBIV19ETUFfVFJJR19FQ0NfUlhUWCA9IDB4QiwKKyAgICAgICAgSFdfRE1BX1RSSUdfQURDID0gMHhDLAorICAgICAgICBIV19ETUFfVFJJR19OT05FID0gMHhGCit9IEhXX0RNQV9UUklHOworCisvKioKKyAqIFxicmllZiBETUEgY2hhbm5lbCB0cmFuc2ZlciBjYWxsYmFjaworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBETUEgZHJpdmVyIHdoZW4gdGhlCisgKiBpbnRlcnJ1cHQgaXMgZmlyZWQuCisgKgorICogXHBhcmFtIFtpbl0gdXNlcl9kYXRhIHRyYW5zZmVyZWQgZGF0YQorICogXHBhcmFtIFtpbl0gbGVuIGxlbmd0aCBvZiB0cmFuc2ZlcmVkIGRhdGEKKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKmh3X2RtYV90cmFuc2Zlcl9jYikodm9pZCAqdXNlcl9kYXRhLCB1aW50MTZfdCBsZW4pOworCisvKioKKyAqIFxicmllZiBETUEgcGFyYW1ldGVycyBzdHJ1Y3R1cmUKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgSFdfRE1BX0NIQU5ORUwgICAgICAgY2hhbm5lbF9udW1iZXI7ICAgIC8qKjwgRE1BIENoYW5uZWwgTnVtYmVyIHRvIGJlIHVzZWQgKi8KKyAgICAgICAgSFdfRE1BX0JXICAgICAgICAgICAgYnVzX3dpZHRoOyAgICAgICAgIC8qKjwgVHJhbnNmZXIgQnVzIHdpZHRoOiA4LCAxNiBvciAzMiBiaXRzICovCisgICAgICAgIEhXX0RNQV9JUlFfU1RBVEUgICAgIGlycV9lbmFibGU7ICAgICAgICAvKio8IEVuYWJsZSBvciBkaXNhYmxlIElSUSBnZW5lcmF0aW9uICovCisgICAgICAgIHVpbnQxNiAgICAgICAgICAgICAgIGlycV9ucl9vZl90cmFuczsgICAvKio8IE51bWJlciBvZiB0cmFuc2ZlcnMgYmVmb3JlIElSUSBnZW5lcmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0byAwIHRvIGZpcmUgSVJRIGFmdGVyIHRyYW5zZmVyIGVuZHMgKi8KKyAgICAgICAgSFdfRE1BX0RSRVEgICAgICAgICAgZHJlcV9tb2RlOyAgICAgICAgIC8qKjwgU3RhcnQgRE1BIGltbWVkaWF0ZWx5IG9yIHRyaWdnZXJlZCBieSBwZXJpcGhlcmFsICovCisgICAgICAgIEhXX0RNQV9BSU5DICAgICAgICAgIGFfaW5jOyAgICAgICAgICAgICAvKio8IEluY3JlbWVudCBvZiBzb3VyY2UgYWRkcmVzcyAqLworICAgICAgICBIV19ETUFfQklOQyAgICAgICAgICBiX2luYzsgICAgICAgICAgICAgLyoqPCBJbmNyZW1lbnQgb2YgZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgICAgICBIV19ETUFfTU9ERSAgICAgICAgICBjaXJjdWxhcjsgICAgICAgICAgLyoqPCBTZWxlY3Qgbm9ybWFsIG9yIGNpcmN1bGFyIG9wZXJhdGlvbiAqLworICAgICAgICBIV19ETUFfUFJJTyAgICAgICAgICBkbWFfcHJpbzsgICAgICAgICAgLyoqPCBDaGFubmVsIHByaW9yaXR5IGZyb20gMCB0byA3ICovCisgICAgICAgIEhXX0RNQV9JRExFICAgICAgICAgIGRtYV9pZGxlOyAgICAgICAgICAvKio8IElkbGUgbW9kZTogYmxvY2tpbmcgb3IgaW50ZXJydXB0aW5nICovCisgICAgICAgIEhXX0RNQV9JTklUICAgICAgICAgIGRtYV9pbml0OyAgICAgICAgICAvKio8IENvcHkgbW9kZTogYmxvY2sgY29weSBvciBtZW0gaW5pdCAqLworICAgICAgICBIV19ETUFfVFJJRyAgICAgICAgICBkbWFfcmVxX211eDsgICAgICAgLyoqPCBETUEgdHJpZ2dlciAqLworICAgICAgICB1aW50MzIgICAgICAgICAgICAgICBzcmNfYWRkcmVzczsgICAgICAgLyoqPCBTb3VyY2UgYWRkcmVzcyAqLworICAgICAgICB1aW50MzIgICAgICAgICAgICAgICBkZXN0X2FkZHJlc3M7ICAgICAgLyoqPCBEZXN0aW5hdGlvbiBhZGRyZXNzICovCisgICAgICAgIHVpbnQxNiAgICAgICAgICAgICAgIGxlbmd0aDsgICAgICAgICAgICAvKio8IE51bWJlciBvZiBETUEgdHJhbnNmZXJzICovCisgICAgICAgIGh3X2RtYV90cmFuc2Zlcl9jYiAgIGNhbGxiYWNrOyAgICAgICAgICAvKio8IEZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgaXJxX25yX29mX3RyYW5zIHRyYW5zZmVycyAqLworICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAqdXNlcl9kYXRhOyAgICAgICAgLyoqPCBEYXRhIHRvIHBhc3MgdG8gQ2FsbGJhY2sgKi8KK30gRE1BX3NldHVwOworCisvKgorKiBBUEkgRlVOQ1RJT05TIERFRklOSVRJT05TCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZSBETUEgQ2hhbm5lbAorICoKKyAqIFxwYXJhbSBbaW5dIGNoYW5uZWxfc2V0dXAgcG9pbnRlciB0byBzdHJ1Y3Qgb2YgdHlwZSBETUFfU2V0dXAKKyAqCisgKi8KK3ZvaWQgaHdfZG1hX2NoYW5uZWxfaW5pdGlhbGl6YXRpb24oRE1BX3NldHVwICpjaGFubmVsX3NldHVwKTsKKworLyoqCisgKiBcYnJpZWYgVXBkYXRlIERNQSBzb3VyY2UgYWRkcmVzcyBhbmQgbGVuZ3RoCisgKgorICogV2hlbiBETUEgaXMgY29uZmlndXJlZCBmb3Igc29tZSBwZXJpcGhlcmFsLCBpdCBjb3VsZCBiZSBlbm91Z2ggdG8gc2V0dXAgb25seSBzb3VyY2UgYWRkcmVzcworICogYW5kIGRhdGEgbGVuZ3RoLiBPdGhlciBwYXJhbWV0ZXJzIG1vc3QgbGlrZWx5IGRvIG5vdCBjaGFuZ2UgZm9yIHNhbWUgdHlwZSBvZiB0cmFuc21pc3Npb24KKyAqIGZvciB2YWx1ZXMgdGhhdCB3YXJlIHNwZWNpZmllZCBpbiBccCBod19kbWFfY2hhbm5lbF9pbml0aWFsaXphdGlvbigpLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3BlZWQgdXAgRE1BIHN0YXJ0IHRpbWUgd2hlbiBvbmx5IGFkZHJlc3MgYW5kIHNpemUgY2hhbmdlcyBmcm9tIHByZXZpb3VzCisgKiB0cmFuc21pc3Npb24uCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbCBETUEgY2hhbm5lbCBudW1iZXIgdG8gbW9kaWZ5CisgKiBccGFyYW0gW2luXSBhZGRyIG5ldyBzb3VyY2UgYWRkcmVzcworICogXHBhcmFtIFtpbl0gbGVuZ3RoIG5ldyBkYXRhIHRyYW5zZmVyIGxlbmd0aAorICogXHBhcmFtIFtpbl0gY2IgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0cmFuc21pc3Npb24gZmluaXNoZXMKKyAqCisgKi8KK3ZvaWQgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX3NvdXJjZShIV19ETUFfQ0hBTk5FTCBjaGFubmVsLCB2b2lkKiBhZGRyLCB1aW50MTZfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod19kbWFfdHJhbnNmZXJfY2IgY2IpOworCisvKioKKyAqIFxicmllZiBVcGRhdGUgRE1BIGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIGxlbmd0aAorICoKKyAqIFdoZW4gRE1BIGlzIGNvbmZpZ3VyZWQgZm9yIHNvbWUgcGVyaXBoZXJhbCwgaXQgY291bGQgYmUgZW5vdWdoIHRvIHNldHVwIG9ubHkgZGVzdGluYXRpb24gYWRkcmVzcworICogYW5kIGRhdGEgbGVuZ3RoLiBPdGhlciBwYXJhbWV0ZXJzIG1vc3QgbGlrZWx5IGRvIG5vdCBjaGFuZ2UgZm9yIHNhbWUgdHlwZSBvZiB0cmFuc21pc3Npb24KKyAqIGZvciB2YWx1ZXMgdGhhdCB3YXJlIHNwZWNpZmllZCBpbiBccCBod19kbWFfY2hhbm5lbF9pbml0aWFsaXphdGlvbigpLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3BlZWQgdXAgRE1BIHN0YXJ0IHRpbWUgd2hlbiBvbmx5IGFkZHJlc3MgYW5kIHNpemUgY2hhbmdlcyBmcm9tIHByZXZpb3VzCisgKiB0cmFuc21pc3Npb24uCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbCBETUEgY2hhbm5lbCBudW1iZXIgdG8gbW9kaWZ5CisgKiBccGFyYW0gW2luXSBhZGRyIG5ldyBzb3VyY2UgYWRkcmVzcworICogXHBhcmFtIFtpbl0gbGVuZ3RoIG5ldyBkYXRhIHRyYW5zZmVyIGxlbmd0aAorICogXHBhcmFtIFtpbl0gY2IgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0cmFuc21pc3Npb24gZmluaXNoZXMKKyAqCisgKi8KK3ZvaWQgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX2Rlc3RpbmF0aW9uKEhXX0RNQV9DSEFOTkVMIGNoYW5uZWwsIHZvaWQgKmFkZHIsIHVpbnQxNl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X2RtYV90cmFuc2Zlcl9jYiBjYik7CisKKy8qKgorICogXGJyaWVmIFVwZGF0ZSBETUEgaW50ZXJydXB0IHRyaWdnZXIgaW5kZXgKKyAqCisgKiBETUEgY2hhbm5lbCBjYW4gdHJpZ2dlciBhbiBpbnRlcnJ1cHQgYWZ0ZXIgYXJiaXRyYXJ5IHRyYW5zZmVyIGhhcyBmaW5pc2hlZC4KKyAqIFVzdWFsbHkgaW50ZXJydXB0IGlzIHRyaWdnZXJlZCBhZnRlciB0cmFuc21pc3Npb24gZmluaXNoZXMgYnV0IGZvciBjeWNsaWMgbW9kZSwKKyAqIHdoZXJlIERNQSBuZXZlciBzdG9wcywgaXQgaXMgY29udmVuaWVudCB0cmlnZ2VyIGludGVycnVwdCBhdCBvdGhlciB0aW1lcy4KKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgYWZ0ZXIgd2hpY2ggdGhlIGludGVycnVwdCBpcyB0cmlnZ2VyZWQuCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbCBETUEgY2hhbm5lbCBudW1iZXIgdG8gbW9kaWZ5CisgKiBccGFyYW0gW2luXSBpbnRfaXggTnVtYmVyIG9mIHRyYW5zZmVycyB1bnRpbCB0aGUgaW50ZXJydXB0IGlzIHRyaWdnZXJlZAorICoKKyAqLwordm9pZCBod19kbWFfY2hhbm5lbF91cGRhdGVfaW50X2l4KEhXX0RNQV9DSEFOTkVMIGNoYW5uZWwsIHVpbnQxNl90IGludF9peCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIGEgRE1BIGNoYW5uZWwKKyAqCisgKiBccGFyYW0gW2luXSBjaGFubmVsX251bWJlciBETUEgQ2hhbm5lbCBOdW1iZXIgdG8gc3RhcnQvc3RvcAorICogXHBhcmFtIFtpbl0gZG1hX29uIGVuYWJsZS9kaXNhYmxlIERNQSBjaGFubmVsCisgKgorICovCit2b2lkIGh3X2RtYV9jaGFubmVsX2VuYWJsZShIV19ETUFfQ0hBTk5FTCBjaGFubmVsX251bWJlciwgSFdfRE1BX1NUQVRFIGRtYV9vbik7CisKKy8qKgorICogXGJyaWVmIFN0b3AgRE1BIGNoYW5uZWwgaWYgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzCisgKgorICogSWYgbm8gdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3Mgbm90aGluZyBoYXBwZW5zLgorICogSWYgdGhlcmUgaXMgb3V0c3RhbmRpbmcgRE1BIHRyYW5zZmVyIGl0IHdpbGwgYmUgc3RvcHBlZCBhbmQKKyAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdpdGggY291bnQgb2YgZGF0YSBhbHJlYWR5IHRyYW5zZmVyZWQKKyAqCisgKiBccGFyYW0gW2luXSBjaGFubmVsX251bWJlciBETUEgY2hhbm5lbCBudW1iZXIgdG8gc3RvcAorICoKKyAqLwordm9pZCBod19kbWFfY2hhbm5lbF9zdG9wKEhXX0RNQV9DSEFOTkVMIGNoYW5uZWxfbnVtYmVyKTsKKworLyoqCisgKiBcYnJpZWYgUmVhZCBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgYnl0ZXMgc28gZmFyCisgKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyBtYW55IGJ5dGVzIHdlcmUgdHJhbnNmZXJlZAorICogdmlhIERNQSBjaGFubmVsIHNvIGZhci4gVGhpcyBudW1iZXIgY2FuIGNoYW5nZWQgdmVyeSBzb29uLgorICoKKyAqIFxwYXJhbSBbaW5dIGNoYW5uZWxfbnVtYmVyIERNQSBjaGFubmVsIG51bWJlcgorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIGFscmVhZHkgdHJhbnNmZXJlZCAod2hlbiB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcyksCisgKiAgICAgICAgIDAgLSBpZiB0cmFuc2ZlciBpcyBhbHJlYWR5IGZpbmlzaGVkLAorICogICAgICAgICB1bmRlZmluZWQgaWYgY2FsbGVkIG9yIG5vdCBzdGFydGVkIGNoYW5uZWwKKyAqCisgKi8KK3VpbnQxNl90IGh3X2RtYV90cmFuc2ZlcmVkX2J5dGVzKEhXX0RNQV9DSEFOTkVMIGNoYW5uZWxfbnVtYmVyKTsKKworLyoqCisgKiBcYnJpZWYgRnJlZXplIERNQQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2RtYV9mcmVlemUodm9pZCkKK3sKKyAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gUkVHX01TSyhHUFJFRywgU0VUX0ZSRUVaRV9SRUcsIEZSWl9ETUEpOworfQorCisvKioKKyAqIFxicmllZiBVbmZyZWV6ZSBETUEKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19kbWFfdW5mcmVlemUodm9pZCkKK3sKKyAgICAgICAgR1BSRUctPlJFU0VUX0ZSRUVaRV9SRUcgPSBSRUdfTVNLKEdQUkVHLCBSRVNFVF9GUkVFWkVfUkVHLCBGUlpfRE1BKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgYW55IERNQSBjaGFubmVsIGlzIGFjdGl2ZS4KKyAqCisgKiBccmV0dXJuIHRydWUsIGlmIGEgY2hhbm5lbCBpcyBhY3RpdmUgZWxzZSBmYWxzZS4KKyAqLworYm9vbCBod19kbWFfY2hhbm5lbF9hY3RpdmUodm9pZCk7CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfRE1BICovCisKKyNlbmRpZiAvKiBIV19ETUFfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19mZW1fc2t5NjYxMTItMTEuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZmVtX3NreTY2MTEyLTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5MjA5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZmVtX3NreTY2MTEyLTExLmgKQEAgLTAsMCArMSwzNzQgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIEZFTQorICogXHsKKyAqIFxicmllZiBGcm9udCBFbmQgTW9kdWxlIGZvciBTS1lXT1JLUyBTS1k2NjExMi0xMQorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUKKyAqCisgKiBAYnJpZWYgRkVNIERyaXZlciBmb3IgU0tZV09SS1MgU0tZNjYxMTItMTEgTG93IExldmVsIERyaXZlciBBUEkuCisgKgorICogR1BJT3MgdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIEZFTSBhcmUgY29uZmlndXJlZCB1c2luZyB0aGUgZm9sbG93aW5nIG1hY3JvcywgdGhhdCBzaG91bGQgYmUgcGxhY2VkCisgKiBpbiBjdXN0b21fY29uZmlnLmg6CisgKgorICogICAgICBDU0QgICA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVC9QSU4KKyAqICAgICAgQ1BTICAgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQvUElOCisgKiAgICAgIENSWCAgIDogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QT1JUL1BJTgorICogICAgICBDVFggICA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUE9SVC9QSU4KKyAqICAgICAgQ0hMICAgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQvUElOCisgKiAgICAgIEFOVFNFTDogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QT1JUL1BJTgorICoKKyAqIEluIG9yZGVyIHRvIGNvbnRyb2wgYW4gZXh0ZXJuYWwgUEEsIHRocmVlIEdQSU9zIGNhbiBiZSB1c2VkLiBUaGVzZSBhcmUgY2FsbGVkIFJGX0FOVF9UUklNeCwgeD0wLDEsMi4gRWFjaCBvbmUgb2YKKyAqIHRoZXNlIGJpdHMgaXMgZW5hYmxlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBQT1JUL1BJTiBtYWNyb3MgYXJlIHNldDoKKyAqCisgKiAgICAgIFJGX0FOVF9UUklNMCA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BPUlQvUElOCisgKiAgICAgIFJGX0FOVF9UUklNMSA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BPUlQvUElOCisgKiAgICAgIFJGX0FOVF9UUklNMiA6IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8yX1BPUlQvUElOCisgKgorICogVGhlIGFjdHVhbCBHUElPIHZhbHVlcyBmb3IgUkZfQU5UX1RSSU14IGFyZSBzZXQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgTUFDLCB3aGVuZXZlciBpdCBnYWlucyBhY2Nlc3MgYnkgdGhlIGFyYml0ZXIKKyAqIHRvIHRoZSBSRi4gVGhpcyBkcml2ZXIgb25seSBoYW5kbGVzIHRoZSBHUElPIGluaXRpYWxpemF0aW9uLgorICoKKyAqIEZFTSBCSUFTIFZvbHRhZ2UgY29udHJvbCBpcyBlbmFibGVkIGJ5IHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorICoKKyAqICAgICAgVjE4ICAgICAgICAgICAgOiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfRkVNX0JJQVNfVjE4CisgKiAgICAgIFYxOFAgICAgICAgICAgIDogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOFAKKyAqCisgKiBJZiBub25lIG9mIHRoZW0gaXMgc2V0LCBGRU0gQklBUyB3aWxsIG5vdCBiZSBjb250cm9sbGVkIGJ5IHRoaXMgZHJpdmVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX0ZFTV9IXworI2RlZmluZSBIV19GRU1fSF8KKworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9GRU1fQklBU19WMTgpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOFApCisjZXJyb3IgT25seSBvbmUgb2YgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOCBhbmQgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOFAgY2FuIGJlIHNldCBhdCBhIHRpbWUKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uL3N0YXRlIHN0cnVjdHVyZSAoYWN0dWFsbHkganVzdCBhIGJ5dGUpICovCit0eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIHVpbnQ4X3QgdHhfcG93ZXI6IDE7CisgICAgICAgIHVpbnQ4X3QgdHhfYnlwYXNzOiAxOworICAgICAgICB1aW50OF90IHJ4X2J5cGFzczogMTsKKyNlbHNlCisgICAgICAgIHVpbnQ4X3QgdHhfcG93ZXJfYmxlOiAxOworICAgICAgICB1aW50OF90IHR4X2J5cGFzc19ibGU6IDE7CisgICAgICAgIHVpbnQ4X3QgcnhfYnlwYXNzX2JsZTogMTsKKyAgICAgICAgdWludDhfdCB0eF9wb3dlcl9mdGRmOiAxOworICAgICAgICB1aW50OF90IHR4X2J5cGFzc19mdGRmOiAxOworICAgICAgICB1aW50OF90IHJ4X2J5cGFzc19mdGRmOiAxOworI2VuZGlmCisgICAgICAgIHVpbnQ4X3QgYW50c2VsOiAxOworICAgICAgICB1aW50OF90IHN0YXJ0ZWQ6IDE7Cit9IGh3X2ZlbV9jb25maWc7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisvKioKKyAqIFxicmllZiBDb25maWd1cmVzIEZFTSBUWCBQb3dlcgorICoKKyAqIFxwYXJhbSBbaW5dIGhpZ2ggU2V0IHRydWUgdG8gZW5hYmxlIGhpZ2ggVFggcG93ZXIKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF90eHBvd2VyKGJvb2wgaGlnaCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIGJ5cGFzcyBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIGZhbHNlOiBVc2UgUEEsIHRydWU6IGJ5cGFzcworICoKKyAqLwordm9pZCBod19mZW1fc2V0X3R4X2J5cGFzcyhib29sIGVuYWJsZSk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFJYIGJ5cGFzcyBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIGZhbHNlOiBVc2UgTE5BLCB0cnVlOiBieXBhc3MKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF9yeF9ieXBhc3MoYm9vbCBlbmFibGUpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBUWCBQb3dlciBzZXR0aW5nCisgKgorICogXHJldHVybiB0cnVlLCBpZiBUWCBQb3dlciBpcyBoaWdoLCBmYWxzZSBpZiBsb3cKKyAqCisgKi8KK2Jvb2wgaHdfZmVtX2dldF90eHBvd2VyKHZvaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBUWCBieXBhc3MgbW9kZQorICoKKyAqIFxyZXR1cm4gZmFsc2U6IE5vIFRYIGJ5cGFzcywgdHJ1ZTogVFggYnlwYXNzCisgKgorICovCitib29sIGh3X2ZlbV9nZXRfdHhfYnlwYXNzKHZvaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBSWCBieXBhc3MgbW9kZQorICoKKyAqIFxyZXR1cm4gZmFsc2U6IE5vIFJYIGJ5cGFzcywgdHJ1ZTogUlggYnlwYXNzCisgKgorICovCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzKHZvaWQpOworCisjZWxzZSAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CICovCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIFBvd2VyIGZvciBCTEUKKyAqCisgKiBccGFyYW0gW2luXSBoaWdoIFNldCB0cnVlIHRvIGVuYWJsZSBoaWdoIFRYIHBvd2VyCisgKgorICovCit2b2lkIGh3X2ZlbV9zZXRfdHhwb3dlcl9ibGUoYm9vbCBoaWdoKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gVFggYnlwYXNzIG1vZGUgZm9yIEJMRQorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBmYWxzZTogVXNlIFBBLCB0cnVlOiBieXBhc3MKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3NldF90eF9ieXBhc3NfYmxlKGJvb2wgZW5hYmxlKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gUlggYnlwYXNzIG1vZGUgZm9yIEJMRQorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBmYWxzZTogVXNlIExOQSwgdHJ1ZTogYnlwYXNzCisgKgorICovCit2b2lkIGh3X2ZlbV9zZXRfcnhfYnlwYXNzX2JsZShib29sIGVuYWJsZSk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFRYIFBvd2VyIHNldHRpbmcgZm9yIEJMRQorICoKKyAqIFxyZXR1cm4gdHJ1ZSwgaWYgVFggUG93ZXIgaXMgaGlnaCwgZmFsc2UgaWYgbG93CisgKgorICovCitib29sIGh3X2ZlbV9nZXRfdHhwb3dlcl9ibGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFRYIGJ5cGFzcyBtb2RlIGZvciBCTEUKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBUWCBieXBhc3MsIHRydWU6IFRYIGJ5cGFzcworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzc19ibGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFJYIGJ5cGFzcyBtb2RlIGZvciBCTEUKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBSWCBieXBhc3MsIHRydWU6IFJYIGJ5cGFzcworICoKKyAqLworYm9vbCBod19mZW1fZ2V0X3J4X2J5cGFzc19ibGUodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX1VTRV9CTEUgKi8KKworI2lmZGVmIENPTkZJR19VU0VfRlRERgorLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gVFggUG93ZXIgZm9yIEZUREYKKyAqCisgKiBccGFyYW0gW2luXSBoaWdoIFNldCB0cnVlIHRvIGVuYWJsZSBoaWdoIFRYIHBvd2VyCisgKgorICovCit2b2lkIGh3X2ZlbV9zZXRfdHhwb3dlcl9mdGRmKGJvb2wgaGlnaCk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIGJ5cGFzcyBtb2RlIGZvciBGVERGCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIGZhbHNlOiBVc2UgUEEsIHRydWU6IGJ5cGFzcworICoKKyAqLwordm9pZCBod19mZW1fc2V0X3R4X2J5cGFzc19mdGRmKGJvb2wgZW5hYmxlKTsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gUlggYnlwYXNzIG1vZGUgZm9yIEZUREYKKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgZmFsc2U6IFVzZSBMTkEsIHRydWU6IGJ5cGFzcworICoKKyAqLwordm9pZCBod19mZW1fc2V0X3J4X2J5cGFzc19mdGRmKGJvb2wgZW5hYmxlKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVFggUG93ZXIgc2V0dGluZyBmb3IgRlRERgorICoKKyAqIFxyZXR1cm4gdHJ1ZSwgaWYgVFggUG93ZXIgaXMgaGlnaCwgZmFsc2UgaWYgbG93CisgKgorICovCitib29sIGh3X2ZlbV9nZXRfdHhwb3dlcl9mdGRmKHZvaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBUWCBieXBhc3MgbW9kZSBmb3IgRlRERgorICoKKyAqIFxyZXR1cm4gZmFsc2U6IE5vIFRYIGJ5cGFzcywgdHJ1ZTogVFggYnlwYXNzCisgKgorICovCitib29sIGh3X2ZlbV9nZXRfdHhfYnlwYXNzX2Z0ZGYodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEdldHMgdGhlIFJYIGJ5cGFzcyBtb2RlIGZvciBGVERGCisgKgorICogXHJldHVybiBmYWxzZTogTm8gUlggYnlwYXNzLCB0cnVlOiBSWCBieXBhc3MKKyAqCisgKi8KK2Jvb2wgaHdfZmVtX2dldF9yeF9ieXBhc3NfZnRkZih2b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfVVNFX0ZUREYgKi8KKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gVFggUG93ZXIKKyAqCisgKiBccGFyYW0gW2luXSBoaWdoIFNldCB0cnVlIHRvIGVuYWJsZSBoaWdoIFRYIHBvd2VyCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIHRoZSBCTEUvRlRERiBzcGVjaWZpYyBmdW5jdGlvbnMgaW5zdGVhZAorICovCit2b2lkIGh3X2ZlbV9zZXRfdHhwb3dlcihib29sIGhpZ2gpIERFUFJFQ0FURUQ7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIFRYIGJ5cGFzcyBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlIGZhbHNlOiBVc2UgUEEsIHRydWU6IGJ5cGFzcworICoKKyAqIFxkZXByZWNhdGVkIFVzZSB0aGUgQkxFL0ZUREYgc3BlY2lmaWMgZnVuY3Rpb25zIGluc3RlYWQKKyAqLwordm9pZCBod19mZW1fc2V0X3R4X2J5cGFzcyhib29sIGVuYWJsZSkgREVQUkVDQVRFRDsKKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBGRU0gUlggYnlwYXNzIG1vZGUKKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgZmFsc2U6IFVzZSBMTkEsIHRydWU6IGJ5cGFzcworICoKKyAqIFxkZXByZWNhdGVkIFVzZSB0aGUgQkxFL0ZUREYgc3BlY2lmaWMgZnVuY3Rpb25zIGluc3RlYWQKKyAqLwordm9pZCBod19mZW1fc2V0X3J4X2J5cGFzcyhib29sIGVuYWJsZSkgREVQUkVDQVRFRDsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVFggUG93ZXIgc2V0dGluZworICoKKyAqIFxyZXR1cm4gdHJ1ZSwgaWYgVFggUG93ZXIgaXMgaGlnaCwgZmFsc2UgaWYgbG93CisgKgorICogXGRlcHJlY2F0ZWQgVXNlIHRoZSBCTEUvRlRERiBzcGVjaWZpYyBmdW5jdGlvbnMgaW5zdGVhZAorICAqLworYm9vbCBod19mZW1fZ2V0X3R4cG93ZXIodm9pZCkgREVQUkVDQVRFRDsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgVFggYnlwYXNzIG1vZGUKKyAqCisgKiBccmV0dXJuIGZhbHNlOiBObyBUWCBieXBhc3MsIHRydWU6IFRYIGJ5cGFzcworICoKKyAqIFxkZXByZWNhdGVkIFVzZSB0aGUgQkxFL0ZUREYgc3BlY2lmaWMgZnVuY3Rpb25zIGluc3RlYWQKKyAqLworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzcyh2b2lkKSBERVBSRUNBVEVEOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBSWCBieXBhc3MgbW9kZQorICoKKyAqIFxyZXR1cm4gZmFsc2U6IE5vIFJYIGJ5cGFzcywgdHJ1ZTogUlggYnlwYXNzCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIHRoZSBCTEUvRlRERiBzcGVjaWZpYyBmdW5jdGlvbnMgaW5zdGVhZAorICovCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzKHZvaWQpIERFUFJFQ0FURUQ7CisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQiAqLworCisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgRkVNIEFudGVubmEgdG8gdXNlCisgKgorICogXHBhcmFtIFtpbl0gb25lIGZhbHNlOiBhbnRlbm5hIDAsIHRydWU6IGFudGVubmEgMQorICoKKyAqLwordm9pZCBod19mZW1fc2V0X2FudGVubmEoYm9vbCBvbmUpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBzZWxlY3RlZCBhbnRlbm5hCisgKgorICogXHJldHVybiBmYWxzZTogYW50ZW5uYSAxLCB0cnVlOiBhbnRlbm5hIDIKKyAqCisgKi8KK2Jvb2wgaHdfZmVtX2dldF9hbnRlbm5hKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXRzIHRoZSBGRU0gQmlhcworICoKKyAqIFxwYXJhbSBbaW5dIHZvbHRhZ2UgVGhlIHZvbHRhZ2UgdG8gc2V0IHRoZSBGRU0gQmlhcyB0byAobVYpCisgKgorICogXHJldHVybiAwOiBzdWNjZXNzLCAtMTogT3V0IG9mIHJhbmdlIHZhbHVlIGVudGVyZWQsIC0yOiBGRU0gQklBUyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgYm9hcmQKKyAqCisgKi8KK2ludCBod19mZW1fc2V0X2JpYXModWludDE2X3Qgdm9sdGFnZSk7CisKKy8qKgorICogXGJyaWVmIFNldHMgdGhlIDJuZCBGRU0gQmlhcworICoKKyAqIFxwYXJhbSBbaW5dIHZvbHRhZ2UgVGhlIHZvbHRhZ2UgdG8gc2V0IHRoZSAybmQgRkVNIEJpYXMgdG8gKG1WKQorICoKKyAqIFxyZXR1cm4gMDogc3VjY2VzcywgLTE6IE91dCBvZiByYW5nZSB2YWx1ZSBlbnRlcmVkLCAtMjogMm5kIEZFTSBCSUFTIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBib2FyZAorICoKKyAqLworaW50IGh3X2ZlbV9zZXRfYmlhczIodWludDE2X3Qgdm9sdGFnZSk7CisKKy8qKgorICogXGJyaWVmIFN0YXJ0cyBhbmQgY29uZmlndXJlcyBGRU0uCisgKgorICogQ29uZmlndXJlcyBhbmQgc2V0cyBHUElPcyBhY2NvcmRpbmcgdG8gY29uZmlndXJhdGlvbiBzZXQgYnkgaHdfZmVtX3NldF9jb25maWcoKS4gQWxzbyBjb25maWd1cmVzCisgKiBEQ0YgVGltZXJzLgorICoKKyAqCisgKiBcbm90ZSBUbyBiZSBjYWxsZWQgYnkgdGhlIFJGIGRyaXZlciB3aGVuIFJGIGlzIHBvd2VyZWQgb24KKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3N0YXJ0KHZvaWQpOworCisvKioKKyAqIFxicmllZiBTdG9wcyBGRU0uCisgKgorICogU3RvcHMgRENGIHRpbWVycyBhbmQgc2V0cyBhbGwgRkVNIGNvbnRyb2wgc2lnbmFscyB0byAwIHRvIGFjaGlldmUgdGhlIGxvd2VzdCBwb3NzaWJsZSBwb3dlcgorICoKKyAqIFxub3RlIFRvIGJlIGNhbGxlZCBieSB0aGUgUkYgZHJpdmVyIHdoZW4gUkYgaXMgcG93ZXJlZCBvZmYKKyAqCisgKi8KK3ZvaWQgaHdfZmVtX3N0b3Aodm9pZCk7CisKKyNlbmRpZiAvKiBkZ19jb25maWdGRU0gPT0gRkVNX1NLWTY2MTEyXzExICovCisjZW5kaWYgLyogSFdfRkVNX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2dwYWRjLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2dwYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MThlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZ3BhZGMuaApAQCAtMCwwICsxLDc2NyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgR1BBREMKKyAqIFx7CisgKiBcYnJpZWYgR2VuZXJhbCBQdXJwb3NlIEFEQworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfZ3BhZGMuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIEdQQURDIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19HUEFEQ19ICisjZGVmaW5lIEhXX0dQQURDX0gKKworI2lmIGRnX2NvbmZpZ1VTRV9IV19HUEFEQworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisKK2V4dGVybiBpbnQxNl90IGh3X2dwYWRjX2RpZmZlcmVudGlhbF9nYWluX2Vycm9yOworZXh0ZXJuIGludDE2X3QgaHdfZ3BhZGNfc2luZ2xlX2VuZGVkX2dhaW5fZXJyb3I7CisKKy8qKgorICogXGJyaWVmIEFEQyBpbnB1dCBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19HUEFEQ19JTlBVVF9NT0RFX0RJRkZFUkVOVElBTCA9IDAsICAgIC8qKjwgZGlmZmVyZW50aWFsIG1vZGUgKGRlZmF1bHQpICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX01PREVfU0lOR0xFX0VOREVEID0gMSAgICAgLyoqPCBzaW5nbGUgZW5kZWQgbW9kZSAqLworfSBIV19HUEFEQ19JTlBVVF9NT0RFOworCisvKioKKyAqIFxicmllZiBBREMgY2xvY2sgc291cmNlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19HUEFEQ19DTE9DS19JTlRFUk5BTCA9IDAsICAgICAgIC8qKjwgaW50ZXJuYWwgaGlnaC1zcGVlZCBjbG9jayAoZGVmYXVsdCkgKi8KKyAgICAgICAgSFdfR1BBRENfQ0xPQ0tfRElHSVRBTCA9IDEgICAgICAgICAvKio8IGRpZ2l0YWwgY2xvY2sgKDE2Lzk2TUh6KSAqLworfSBIV19HUEFEQ19DTE9DSzsKKworLyoqCisgKiBcYnJpZWYgQURDIGlucHV0CisgKgorICogXHAgR1BBRENfSU5QVVRfU0VfKiB2YWx1ZXMgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBzaW5nbGUgZW5kZWQgbW9kZQorICogXHAgR1BBRENfSU5QVVRfRElGRl8qIHZhbHVlcyBzaG91bGQgYmUgdXNlZCBvbmx5IGluIGRpZmZlcmVudGlhbCBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9QMTIgPSAwLCAgICAgICAgIC8qKjwgR1BJTyAxLjIgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfUDE0ID0gMSwgICAgICAgICAvKio8IEdQSU8gMS40ICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1AxMyA9IDIsICAgICAgICAgLyoqPCBHUElPIDEuMyAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9QMDcgPSAzLCAgICAgICAgIC8qKjwgR1BJTyAwLjcgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfQVZTID0gNCwgICAgICAgICAvKio8IGFuYWxvZyBncm91bmQgbGV2ZWwgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfVkREID0gNSwKKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfVkRDREMgPSA2LAorICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9WMzMgPSA3LAorICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9WQkFUID0gOSwgICAgICAgIC8qKjwgYmF0dGVyeSAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9URU1QU0VOUyA9IDE0LCAgIC8qKjwgdGVtcGVyYXR1cmUgc2Vuc29yICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1AwNiA9IDE2LCAgICAgICAgLyoqPCBHUElPIDAuNiAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9TRV9QMTAgPSAxNywgICAgICAgIC8qKjwgR1BJTyAxLjAgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfU0VfUDE1ID0gMTgsICAgICAgICAvKio8IEdQSU8gMS41ICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX1NFX1AyNCA9IDE5LCAgICAgICAgLyoqPCBHUElPIDIuNCAqLworICAgICAgICBIV19HUEFEQ19JTlBVVF9ESUZGX1AxMl9QMTQgPSAwLCAgIC8qKjwgR1BJTyAxLjIgdnMgMS40ICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUX0RJRkZfUDEzX1AwNyA9IDEsICAgLyoqPCBHUElPIDEuMyB2cyAwLjcgKi8KK30gSFdfR1BBRENfSU5QVVQ7CisKKy8qKgorICogXGJyaWVmIEFEQyBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqaHdfZ3BhZGNfaW50ZXJydXB0X2NiKSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQURDIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgSFdfR1BBRENfQ0xPQ0sgICAgICAgIGNsb2NrOyAgICAgICAgICAgICAgLyoqPCBjbG9jayBzb3VyY2UgKi8KKyAgICAgICAgSFdfR1BBRENfSU5QVVRfTU9ERSAgIGlucHV0X21vZGU7ICAgICAgICAgLyoqPCBpbnB1dCBtb2RlICovCisgICAgICAgIEhXX0dQQURDX0lOUFVUICAgICAgICBpbnB1dDsgICAgICAgICAgICAgIC8qKjwgQURDIGlucHV0ICovCisKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgIHNhbXBsZV90aW1lOyAgICAgICAgLyoqPCBzYW1wbGUgdGltZSAqLworICAgICAgICBib29sICAgICAgICAgICAgICAgICAgY29udGlub3VzOyAgICAgICAgICAvKio8IGNvbnRpbm91cyBtb2RlIHN0YXRlICovCisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBpbnRlcnZhbDsgICAgICAgICAgIC8qKjwgaW50ZXJ2YWwgYmV0d2VlbiBjb252ZXJzaW9ucyBpbiBjb250aW5vdXMgbW9kZSAqLworCisgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICBpbnB1dF9hdHRlbnVhdG9yOyAgIC8qKjwgaW5wdXQgYXR0ZW51YXRvciBzdGF0ZSAqLworICAgICAgICBib29sICAgICAgICAgICAgICAgICAgY2hvcHBpbmc7ICAgICAgICAgICAvKio8IGNob3BwaW5nIHN0YXRlICovCisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICBvdmVyc2FtcGxpbmc7ICAgICAgIC8qKjwgb3ZlcnNhbXBsaW5nIHZhbHVlICovCit9IGdwYWRjX2NvbmZpZzsKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZSBBREMKKyAqCisgKiBccCBjZmcgY2FuIGJlIE5VTEwgLSBubyBjb25maWd1cmF0aW9uIGlzIHBlcmZvcm1lZCBpbiBzdWNoIGNhc2UuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfZ3BhZGNfaW5pdChjb25zdCBncGFkY19jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZSBBREMKKyAqCisgKiBTaG9ydGN1dCB0byBjYWxsIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIElmIFxwIGNmZyBpcyBOVUxMLCB0aGlzIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdGhpbmcuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfZ3BhZGNfY29uZmlndXJlKGNvbnN0IGdwYWRjX2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgUmVzZXQgQURDIHRvIGl0cyBkZWZhdWx0IHZhbHVlcyB3aXRob3V0IGRpc2FibGluZyB0aGUgTERPLgorICoKKyAqLwordm9pZCBod19ncGFkY19yZXNldCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZworICogaW50ZXJydXB0IHVzaW5nIGh3X2dwYWRjX2NsZWFyX2ludGVycnVwdCgpLiBJZiBubyBjYWxsYmFjayBpcyBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIGNsZWFyZWQgYnkKKyAqIGRyaXZlci4KKyAqCisgKiBccGFyYW0gW2luXSBjYiBjYWxsYmFjayBmaXJlZCBvbiBpbnRlcnJ1cHQKKyAqCisgKiBcc2EgaHdfZ3BhZGNfY2xlYXJfaW50ZXJydXB0CisgKgorICovCit2b2lkIGh3X2dwYWRjX3JlZ2lzdGVyX2ludGVycnVwdChod19ncGFkY19pbnRlcnJ1cHRfY2IgY2IpOworCisvKioKKyAqIFxicmllZiBVbnJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyCisgKgorICogSW50ZXJydXB0IGlzIGRpc2FibGVkIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKi8KK3ZvaWQgaHdfZ3BhZGNfdW5yZWdpc3Rlcl9pbnRlcnJ1cHQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENsZWFyIGludGVycnVwdAorICoKKyAqIEFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIHRoaXMgaW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gY2xlYXIgaW50ZXJydXB0LgorICoKKyAqIFxzYSBod19ncGFkY19yZWdpc3Rlcl9pbnRlcnJ1cHQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19jbGVhcl9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICAgICAgR1BBREMtPkdQX0FEQ19DTEVBUl9JTlRfUkVHID0gMTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIEFEQworICoKKyAqIFNhbXBsaW5nIGlzIHN0YXJ0ZWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0byBzdGFydCBjb252ZXJzaW9uIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsCisgKiBod19ncGFkY19zdGFydCgpLgorICoKKyAqIFxzYSBod19ncGFkY19zdGFydAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX2VuYWJsZSh2b2lkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfRU4sIDEpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIEFEQworICoKKyAqIEFwcGxpY2F0aW9uIHNob3VsZCB3YWl0IGZvciBjb252ZXJzaW9uIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgZGlzYWJsaW5nIEFEQy4gSW4gY2FzZSBvZgorICogY29udGludW91cyBtb2RlLCBhcHBsaWNhdGlvbiBzaG91bGQgZGlzYWJsZSBjb250aW51b3VzIG1vZGUgYW5kIHRoZW4gd2FpdCBmb3IgY29udmVyc2lvbiB0byBiZQorICogY29tcGxldGVkIGluIG9yZGVyIHRvIGhhdmUgQURDIGluIGRlZmluZWQgc3RhdGUuCisgKgorICogXHNhIGh3X2dwYWRjX2luX3Byb2dyZXNzCisgKiBcc2EgaHdfZ3BhZGNfc2V0X2NvbnRpbnVvdXMKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19kaXNhYmxlKHZvaWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19FTiwgMCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgZGVsYXkgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBBRENfTERPLgorICoKKyAqIHBhcmFtIFtpbl0gTERPIGVuYWJsZSBkZWxheQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9sZG9fZGVsYXkodWludDMyX3QgZGVsYXkpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTDNfUkVHLCBHUF9BRENfRU5fREVMLCBkZWxheSk7Cit9CisKKy8qKiBcYnJpZWYgUGVyZm9ybSBBREMgY2FsaWJyYXRpb24KKyAqCisgKiBDYWxpYnJhdGlvbiBpcyBwZXJmb3JtZWQuIFRoZSBpbnB1dCBtb2RlIG11c3QgYmUgSFdfR1BBRENfSU5QVVRfU0VfVkREICgxLjJWKS4KKyAqIExETyBjb25zdGFudCBhbmQgZHluYW1pYyBjdXJyZW50cyBtYXkgYmUgb24uIFRoZSBpbnB1dCBtb2RlIG11c3QgYmUgU2luZ2xlIEVuZGVkLiBUaGUgY2FsaWJyYXRpb24KKyAqIGlzIHBlcmZvcm1lZCBvbmx5IG9uY2UuCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9pbnB1dF9tb2RlCisgKgorICovCit2b2lkIGh3X2dwYWRjX2NhbGlicmF0ZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU3RhcnQgY29udmVyc2lvbgorICoKKyAqIEFwcGxpY2F0aW9uIHNob3VsZCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoaWxlIGNvbnZlcnNpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCisgKgorICogXHNhIGh3X2dwYWRjX2luX3Byb2dyZXNzCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc3RhcnQodm9pZCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX1NUQVJULCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBpbiBwcm9ncmVzcworICoKKyAqIFxyZXR1cm4gY29udmVyc2lvbiBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX2luX3Byb2dyZXNzKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfU1RBUlQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY29udGludW91cyBtb2RlCisgKgorICogV2l0aCBjb250aW51b3VzIG1vZGUgZW5hYmxlZCBBREMgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc3RhcnQgY29udmVyc2lvbiBvbmNlIGNvbXBsZXRlZC4gSXQncyBzdGlsbAorICogcmVxdWlyZWQgdG8gc3RhcnQgMXN0IGNvbnZlcnNpb24gdXNpbmcgaHdfZ3BhZGNfc3RhcnQoKS4gSW50ZXJ2YWwgYmV0d2VlbiBzdWJzZXF1ZW50IGNvbnZlcnNpb25zCisgKiBjYW4gYmUgYWRqdXN0ZWQgdXNpbmcgaHdfZ3BhZGNfc2V0X2ludGVydmFsKCkuCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBjb250aW51b3VzIG1vZGUgc3RhdGUKKyAqCisgKiBcc2EgaHdfZ3BhZGNfc3RhcnQKKyAqIFxzYSBod19ncGFkY19zZXRfaW50ZXJ2YWwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfY29udGludW91cyhib29sIGVuYWJsZWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19DT05ULCAhIWVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY29udGludW91cyBtb2RlIHN0YXRlCisgKgorICogXHJldHVybiBjb250aW51b3VzIG1vZGUgc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19nZXRfY29udGludW91cyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX0NPTlQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgaW5wdXQgY2hhbm5lbAorICoKKyAqIEFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1c2luZyBwcm9wZXIgaW5wdXQgc3ltYm9scyBkZXBlbmRpbmcgb24gd2hldGhlciBzaW5nbGUgZW5kZWQgb3IKKyAqIGRpZmZlcmVudGlhbCBtb2RlIGlzIHVzZWQuCisgKgorICogXHBhcmFtIFtpbl0gaW5wdXQgaW5wdXQgY2hhbm5lbAorICoKKyAqIFxzYSBod19ncGFkY19zZXRfaW5wdXRfbW9kZQorICogXHNhIEdQQURDX0lOUFVUX01PREUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfaW5wdXQoSFdfR1BBRENfSU5QVVQgaW5wdXQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19TRUwsIGlucHV0KTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgaW5wdXQgY2hhbm5lbAorICoKKyAqIFxyZXR1cm4gaW5wdXQgY2hhbm5lbAorICoKKyAqLworc3RhdGljIGlubGluZSBIV19HUEFEQ19JTlBVVCBod19ncGFkY19nZXRfaW5wdXQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChIV19HUEFEQ19JTlBVVCkgUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX1NFTCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBpbnB1dCBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gbW9kZSBpbnB1dCBtb2RlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2lucHV0X21vZGUoSFdfR1BBRENfSU5QVVRfTU9ERSBtb2RlKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfU0UsIG1vZGUpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBpbnB1dCBtb2RlCisgKgorICogcmV0dXJuIGlucHV0IG1vZGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfR1BBRENfSU5QVVRfTU9ERSBod19ncGFkY19nZXRfaW5wdXRfbW9kZSh2b2lkKQoreworICAgICAgICByZXR1cm4gKEhXX0dQQURDX0lOUFVUX01PREUpIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19TRSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBjbG9jayBzb3VyY2UKKyAqCisgKiBccGFyYW0gW2luXSBjbG9jayBjbG9jayBzb3VyY2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfY2xvY2soSFdfR1BBRENfQ0xPQ0sgY2xvY2spCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19DTEtfU0VMLCBjbG9jayk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IGNsb2NrIHNvdXJjZQorICoKKyAqIFxyZXR1cm4gY2xvY2sgc291cmNlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX0dQQURDX0NMT0NLIGh3X2dwYWRjX2dldF9jbG9jayh2b2lkKQoreworICAgICAgICByZXR1cm4gKEhXX0dQQURDX0NMT0NLKSBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfQ0xLX1NFTCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBvdmVyc2FtcGxpbmcKKyAqCisgKiBXaXRoIG92ZXJzYW1wbGluZyBlbmFibGVkIG11bHRpcGxlIHN1Y2Nlc3NpdmUgY29udmVyc2lvbnMgd2lsbCBiZSBleGVjdXRlZCBhbmQgcmVzdWx0cyBhcmUgYWRkZWQKKyAqIHRvZ2V0aGVyIHRvIGluY3JlYXNlIGVmZmVjdGl2ZSBudW1iZXIgb2YgYml0cyBpbiByZXN1bHQuCisgKgorICogTnVtYmVyIG9mIHNhbXBsZXMgdGFrZW4gaXMgMjxzdXA+XHAgbl9zYW1wbGVzPC9zdXA+LiBWYWxpZCB2YWx1ZXMgZm9yIFxwIG5fc2FtcGxlcyBhcmUgMC03IHRodXMKKyAqIGF0IG1vc3QgMTI4IHNhbXBsZXMgY2FuIGJlIHRha2VuLiBJbiB0aGlzIGNhc2UgMTdiaXRzIG9mIHJlc3VsdCBhcmUgZ2VuZXJhdGVkIHdpdGggdGhlIGxlYXN0CisgKiBzaWduaWZpY2FudCBiaXQgYmVpbmcgZGlzY2FyZGVkLgorICoKKyAqIFxwYXJhbSBbaW5dIG5fc2FtcGxlcyBudW1iZXIgb2Ygc2FtcGxlcyB0byBiZSB0YWtlbgorICoKKyAqIFxzYSBod19ncGFkY19nZXRfcmF3X3ZhbHVlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X292ZXJzYW1wbGluZyh1aW50OF90IG5fc2FtcGxlcykKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19DT05WX05SUywgbl9zYW1wbGVzKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgb3ZlcnNhbXBsaW5nCisgKgorICogXHJldHVybiBudW1iZXIgb2Ygc2FtcGxlcyB0byBiZSB0YWtlbgorICoKKyAqIFxzYSBod19ncGFkY19zZXRfb3ZlcnNhbXBsaW5nCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfZ3BhZGNfZ2V0X292ZXJzYW1wbGluZyh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19DT05WX05SUyk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBzYW1wbGUgdGltZQorICoKKyAqIFNhbXBsZSB0aW1lIGlzIFxwIG11bHQgeCAzMiBjbG9jayBjeWNsZXMgb3IgMSBjbG9jayBjeWNsZSB3aGVuIFxwIG11bHQgaXMgMC4gVmFsaWQgdmFsdWVzIGFyZQorICogMC0xNS4KKyAqCisgKiBccGFyYW0gW2luXSBtdWx0IG11bHRpcGxpZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfc2FtcGxlX3RpbWUodWludDhfdCBtdWx0KQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkwyX1JFRywgR1BfQURDX1NNUExfVElNRSwgbXVsdCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IHNhbXBsZSB0aW1lCisgKgorICogXHJldHVybiBtdWx0aXBsaWVyCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9zYW1wbGVfdGltZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X2dwYWRjX2dldF9zYW1wbGVfdGltZSh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19TTVBMX1RJTUUpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgc3RhdGUgb2YgaW5wdXQgYXR0ZW51YXRvcgorICoKKyAqIEVuYWJsaW5nIGludGVybmFsIGF0dGVudWF0b3Igc2NhbGVzIGlucHV0IHZvbHRhZ2UgYnkgZmFjdG9yIG9mIDMgdGh1cyBpbmNyZWFzaW5nIGVmZmVjdGl2ZSBpbnB1dAorICogc2NhbGUgZnJvbSAwLTEuMlYgdG8gMC0zLjZWIGluIHNpbmdsZSBlbmRlZCBtb2RlIG9yIGZyb20gLTEuMi0xLjJWIHRvIC0zLjYtMy42ViBpbiBkaWZmZXJlbnRpYWwKKyAqIG1vZGUuCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBhdHRlbnVhdG9yIHN0YXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2lucHV0X2F0dGVudWF0b3Jfc3RhdGUoYm9vbCBlbmFibGVkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkwyX1JFRywgR1BfQURDX0FUVE4zWCwgISFlbmFibGVkKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgc3RhdGUgb2YgaW5wdXQgYXR0ZW51YXRvcgorICoKKyAqIFxyZXR1cm4gYXR0ZW51YXRvciBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX2dldF9pbnB1dF9hdHRlbnVhdG9yX3N0YXRlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkwyX1JFRywgR1BfQURDX0FUVE4zWCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBpbnB1dCBtdXRlIHN0YXRlCisgKgorICogT25jZSBlbmFibGVkLCBzYW1wbGVzIGFyZSB0YWtlbiBhdCBtaWQtc2NhbGUgdG8gZGV0ZXJtaW5lIGludGVybmFsIG9mZnNldCBhbmQvb3Igbm90aWNlIG9mIHRoZQorICogQURDIHdpdGggcmVnYXJkcyB0byBWRERfUkVGLgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgbXV0ZSBzdGF0ZQorICoKKyAqIFxzYSBod19ncGFkY19jYWxpYnJhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfbXV0ZShib29sIGVuYWJsZWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19NVVRFLCAhIWVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBpbnB1dCBtdXRlIHN0YXRlCisgKgorICogXHJldHVybiBtdXRlIHN0YXRlCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9tdXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfZ3BhZGNfZ2V0X211dGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19NVVRFKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGlucHV0IGFuZCBvdXRwdXQgc2lnbiBjaGFuZ2UKKyAqCisgKiBPbmNlIGVuYWJsZWQsIHNpZ24gb2YgQURDIGlucHV0IGFuZCBvdXRwdXQgaXMgY2hhbmdlZC4KKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGVkIHNpZ24gY2hhbmdlIHN0YXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X3NpZ25fY2hhbmdlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX1NJR04sICEhZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBpbnB1dCBhbmQgb3V0cHV0IHNpZ24gY2hhbmdlCisgKgorICogXHJldHVybiBzaWduIGNoYW5nZSBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX2dldF9zaWduX2NoYW5nZSh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMX1JFRywgR1BfQURDX1NJR04pOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY2hvcHBpbmcgc3RhdGUKKyAqCisgKiBPbmNlIGVuYWJsZWQsIHR3byBzYW1wbGVzIHdpdGggb3Bwb3NpdGUgcG9sYXJpdHkgYXJlIHRha2VuIHRvIGNhbmNlbCBvZmZzZXQuCisgKgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBjaG9wcGluZyBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9jaG9wcGluZyhib29sIGVuYWJsZWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19DSE9QLCAhIWVuYWJsZWQpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBjaG9wcGluZyBzdGF0ZQorICoKKyAqIFxyZXR1cm4gY2hvcHBpbmcgc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod19ncGFkY19nZXRfY2hvcHBpbmcodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTF9SRUcsIEdQX0FEQ19DSE9QKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHN0YXRlIG9mIGNvbnN0YW50IDIwdUEgbG9hZCBjdXJyZW50IG9uIEFEQyBMRE8gb3V0cHV0CisgKgorICogQ29uc3RhbnQgMjB1QSBsb2FkIGN1cnJlbnQgb24gTERPIG91dHB1dCBjYW4gYmUgZW5hYmxlZCBzbyB0aGF0IHRoZSBjdXJyZW50IHdpbGwgbm90IGRyb3AgdG8gMC4KKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGVkIGxvYWQgY3VycmVudCBzdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X2dwYWRjX3NldF9sZG9fY29uc3RhbnRfY3VycmVudChib29sIGVuYWJsZWQpCit7CisgICAgICAgIFJFR19TRVRGKEdQQURDLCBHUF9BRENfQ1RSTDJfUkVHLCBHUF9BRENfSTIwVSwgISFlbmFibGVkKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgc3RhdGUgb2YgY29uc3RhbnQgMjB1QSBsb2FkIGN1cnJlbnQgb24gQURDIExETyBvdXRwdXQKKyAqCisgKiBccmV0dXJuIGxvYWQgY3VycmVudCBjdXJyZW50IHN0YXRlCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9sZG9fY29uc3RhbnRfY3VycmVudAorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX2dldF9sZG9fY29uc3RhbnRfY3VycmVudCh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMMl9SRUcsIEdQX0FEQ19JMjBVKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHN0YXRlIG9mIGR5bmFtaWMgMTB1QSBsb2FkIGN1cnJlbnQgb24gQURDIExETyBvdXRwdXQKKyAqCisgKiAxMHVBIGxvYWQgY3VycmVudCBvbiBMRE8gb3V0cHV0IGNhbiBiZSBlbmFibGVkIGR1cmluZyBzYW1wbGUgcGhhc2Ugc28gdGhhdCB0aGUgbG9hZCBjdXJyZW50CisgKiBkdXJpbmcgc2FtcGxpbmcgYW5kIGNvbnZlcnNpb24gcGhhc2UgYmVjb21lcyBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lLgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgbG9hZCBjdXJyZW50IHN0YXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2xkb19keW5hbWljX2N1cnJlbnQoYm9vbCBlbmFibGVkKQoreworICAgICAgICBSRUdfU0VURihHUEFEQywgR1BfQURDX0NUUkwyX1JFRywgR1BfQURDX0lEWU4sICEhZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IHN0YXRlIG9mIGR5bmFtaWMgMTB1QSBsb2FkIGN1cnJlbnQgb24gQURDIExETyBvdXRwdXQKKyAqCisgKiBccmV0dXJuIGxvYWQgY3VycmVudCBjdXJyZW50IHN0YXRlCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9sZG9fZHluYW1pY19jdXJyZW50CisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfZ3BhZGNfZ2V0X2xkb19keW5hbWljX2N1cnJlbnQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKEdQQURDLCBHUF9BRENfQ1RSTDJfUkVHLCBHUF9BRENfSURZTik7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBpbnRlcnZhbCBiZXR3ZWVuIGNvbnZlcnNpb25zIGluIGNvbnRpbnVvdXMgbW9kZQorICoKKyAqIEludGVydmFsIHRpbWUgaXMgXHAgbXVsdCB4IDEuMDI0bXMuIFZhbGlkIHZhbHVlcyBhcmUgMC0yNTUuCisgKgorICogXHBhcmFtIFtpbl0gbXVsdCBtdWx0aXBsaWVyCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9jb250aW51b3VzCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X2ludGVydmFsKHVpbnQ4X3QgbXVsdCkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BBREMsIEdQX0FEQ19DVFJMM19SRUcsIEdQX0FEQ19JTlRFUlZBTCwgbXVsdCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IGludGVydmFsIGJldHdlZW4gY29udmVyc2lvbnMgaW4gY29udGludW91cyBtb2RlCisgKgorICogXHJldHVybiBtdWx0aXBsaWVyCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9pbnRlcnZhbAorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X2dwYWRjX2dldF9pbnRlcnZhbCh2b2lkKQoreworICAgICAgICByZXR1cm4gUkVHX0dFVEYoR1BBREMsIEdQX0FEQ19DVFJMM19SRUcsIEdQX0FEQ19JTlRFUlZBTCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBvZmZzZXQgYWRqdXN0bWVudCBmb3IgcG9zaXRpdmUgQURDIGFycmF5CisgKgorICogXHBhcmFtIFtpbl0gb2Zmc2V0IG9mZnNldCB2YWx1ZQorICoKKyAqIFxzYSBod19ncGFkY19jYWxpYnJhdGUKKyAqIFxzYSBod19ncGFkY19zZXRfbmVnYXRpdmVfb2Zmc2V0CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZ3BhZGNfc2V0X29mZnNldF9wb3NpdGl2ZSh1aW50MTZfdCBvZmZzZXQpCit7CisgICAgICAgIEdQQURDLT5HUF9BRENfT0ZGUF9SRUcgPSBvZmZzZXQgJiBSRUdfTVNLKEdQQURDLCBHUF9BRENfT0ZGUF9SRUcsIEdQX0FEQ19PRkZQKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgb2Zmc2V0IGFkanVzdG1lbnQgZm9yIHBvc2l0aXZlIEFEQyBhcnJheQorICoKKyAqIFxyZXR1cm4gb2Zmc2V0IHZhbHVlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X2dwYWRjX2dldF9vZmZzZXRfcG9zaXRpdmUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEdQQURDLT5HUF9BRENfT0ZGUF9SRUcgJiBSRUdfTVNLKEdQQURDLCBHUF9BRENfT0ZGUF9SRUcsIEdQX0FEQ19PRkZQKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IG9mZnNldCBhZGp1c3RtZW50IGZvciBuZWdhdGl2ZSBBREMgYXJyYXkKKyAqCisgKiBccGFyYW0gW2luXSBvZmZzZXQgb2Zmc2V0IHZhbHVlCisgKgorICogXHNhIGh3X2dwYWRjX2NhbGlicmF0ZQorICogXHNhIGh3X2dwYWRjX3NldF9wb3NpdGl2ZV9vZmZzZXQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zZXRfb2Zmc2V0X25lZ2F0aXZlKHVpbnQxNl90IG9mZnNldCkKK3sKKyAgICAgICAgR1BBREMtPkdQX0FEQ19PRkZOX1JFRyA9IG9mZnNldCAmIFJFR19NU0soR1BBREMsIEdQX0FEQ19PRkZOX1JFRywgR1BfQURDX09GRk4pOworfQorCisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IG9mZnNldCBhZGp1c3RtZW50IGZvciBuZWdhdGl2ZSBBREMgYXJyYXkKKyAqCisgKiBccmV0dXJuIG9mZnNldCB2YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod19ncGFkY19nZXRfb2Zmc2V0X25lZ2F0aXZlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBHUEFEQy0+R1BfQURDX09GRk5fUkVHICYgUkVHX01TSyhHUEFEQywgR1BfQURDX09GRk5fUkVHLCBHUF9BRENfT0ZGTik7Cit9CisKKy8qKgorICogXGJyaWVmIFN0b3JlIFNpbmdsZSBFbmRlZCBBREMgR2FpbiBFcnJvcgorICoKKyAqIFxwYXJhbSBbaW5dIHNpbmdsZSBBREMgU2luZ2xlIEVuZGVkIEdhaW4gRXJyb3IKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zdG9yZV9zZV9nYWluX2Vycm9yKGludDE2X3Qgc2luZ2xlKQoreworICAgICAgICBod19ncGFkY19zaW5nbGVfZW5kZWRfZ2Fpbl9lcnJvciA9IHNpbmdsZTsKK30KKworLyoqCisgKiBcYnJpZWYgU3RvcmUgRGlmZmVyZW50aWFsIEFEQyBHYWluIEVycm9yCisgKgorICogXHBhcmFtIFtpbl0gZGlmZiBBREMgRGlmZmVyZW50aWFsIEdhaW4gRXJyb3IKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19ncGFkY19zdG9yZV9kaWZmX2dhaW5fZXJyb3IoaW50MTZfdCBkaWZmKQoreworICAgICAgICBod19ncGFkY19kaWZmZXJlbnRpYWxfZ2Fpbl9lcnJvciA9IGRpZmY7Cit9CisKKy8qKgorICogXGJyaWVmIENoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgQURDIEdhaW4gRXJyb3IKKyAqCisgKiBccmV0dXJuIEFEQyBHYWluIEVycm9yIGF2YWlsYWJpbGl0eQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X2dwYWRjX3ByZV9jaGVja19mb3JfZ2Fpbl9lcnJvcih2b2lkKQoreworICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0FEQ19HQUlOX0VSUk9SX0NPUlJFQ1RJT04gPT0gMSkgeworICAgICAgICAgICAgICAgIHJldHVybiAoaHdfZ3BhZGNfc2luZ2xlX2VuZGVkX2dhaW5fZXJyb3IgJiYgaHdfZ3BhZGNfZGlmZmVyZW50aWFsX2dhaW5fZXJyb3IpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFxicmllZiBHZXQgcmF3IGNvbnZlcnNpb24gcmVzdWx0IHZhbHVlCisgKgorICogVXBwZXIgMTAgYml0cyBhcmUgYWx3YXlzIHZhbGlkLCBsb3dlciA2IGJpdHMgYXJlIG9ubHkgdmFsaWQgaW4gY2FzZSBvdmVyc2FtcGxpbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBccmV0dXJuIGNvbnZlcnNpb24gcmVzdWx0IHZhbHVlCisgKgorICogXHNhIGh3X2dwYWRjX3N0YXJ0CisgKiBcc2EgaHdfZ3BhZGNfc2V0X292ZXJzYW1wbGluZworICogXHNhIGh3X2dwYWRjX2dldF92YWx1ZQorICoKKyAqLwordWludDE2X3QgaHdfZ3BhZGNfZ2V0X3Jhd192YWx1ZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IGNvbnZlcnNpb24gcmVzdWx0IHZhbHVlCisgKgorICogSW52YWxpZCBiaXRzIGFyZSBkaXNjYXJkZWQgZnJvbSByZXN1bHQsIGkuZS4gb3ZlcnNhbXBsaW5nIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nCisgKiB2YWx1ZS4KKyAqCisgKiBccmV0dXJuIGNvbnZlcnNpb24gcmVzdWx0IHZhbHVlCisgKgorICogXHNhIGh3X2dwYWRjX3NldF9vdmVyc2FtcGxpbmcKKyAqIFxzYSBod19ncGFkY19nZXRfcmF3X3ZhbHVlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X2dwYWRjX2dldF92YWx1ZSh2b2lkKQoreworICAgICAgICByZXR1cm4gaHdfZ3BhZGNfZ2V0X3Jhd192YWx1ZSgpID4+ICg2IC0gTUlOKDYsIGh3X2dwYWRjX2dldF9vdmVyc2FtcGxpbmcoKSkpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY29udmVyc2lvbiByZXN1bHQgdmFsdWUgd2l0aG91dCBnYWluIGNvbXBlbnNhdGlvbiBhbmQgb3ZlciBzYW1wbGluZy4KKyAqCisgKiBccmV0dXJuIGNvbnZlcnNpb24gcmVzdWx0IHZhbHVlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X2dwYWRjX2dldF92YWx1ZV93aXRob3V0X2dhaW4odm9pZCkKK3sKKyAgICAgICAgdWludDE2X3QgYWRjX3Jhd19yZXMgPSBHUEFEQy0+R1BfQURDX1JFU1VMVF9SRUc7CisgICAgICAgIHJldHVybiBhZGNfcmF3X3JlczsKK30KKworLyoqCisgKiBcYnJpZWYgU3RhcnQgYSBtZWFzdXJlbWVudCBhbmQgd2FpdCBmb3IgdGhlIHJlc3VsdC4KKyAqCisgKiBcc2EgaHdfZ3BhZGNfc3RhcnQKKyAqIFxzYSBod19ncGFkY19pbl9wcm9ncmVzcworICogXHNhIGh3X2dwYWRjX2NsZWFyX2ludGVycnVwdAorICoKKyAqLwordm9pZCBod19ncGFkY19hZGNfbWVhc3VyZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgVGFrZSBtZWFzdXJlbWVudHMgdXNpbmcgdGhlIEFEQyBhbmQgZXZhbHVhdGUgdGhlIHJlc3VsdHMuCisgKgorICogXHNhIGh3X2dwYWRjX2FkY19tZWFzdXJlCisgKiBcc2EgaHdfZ3BhZGNfZ2V0X3Jhd192YWx1ZQorICoKKyAqLwordm9pZCBod19ncGFkY190ZXN0X21lYXN1cmVtZW50cyh2b2lkKTsKKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19HUEFEQyAqLworCisjZW5kaWYgLyogSFdfR1BBRENfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZ3Bpby5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyMTkzZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfZ3Bpby5oCkBAIC0wLDAgKzEsNDk1IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBHUElPCisgKiBceworICogXGJyaWVmIEdQSU8gQ29udHJvbAorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfZ3Bpby5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgR1BJTyBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfR1BJT19IXworI2RlZmluZSBIV19HUElPX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfR1BJTworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisKKy8qIEdQSU8gbGF5b3V0IGRlZmluaXRpb25zICovCisKKy8qKiBOdW1iZXIgb2YgR1BJTyBwb3J0cyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgSFdfR1BJT19OVU1fUE9SVFMgICAgICAgKDUpCisvKiogTnVtYmVyIG9mIEdQSU8gcGlucyBhdmFpbGFibGUgKGN1bXVsYXRpdmUpICovCisjZGVmaW5lIEhXX0dQSU9fTlVNX1BJTlMgICAgICAgIChIV19HUElPX1BPUlRfMF9OVU1fUElOUyArIEhXX0dQSU9fUE9SVF8xX05VTV9QSU5TICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fUE9SVF8yX05VTV9QSU5TICsgSFdfR1BJT19QT1JUXzNfTlVNX1BJTlMgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19QT1JUXzRfTlVNX1BJTlMpCisvKiogTnVtYmVyIG9mIEdQSU8gcGlucyBhdmFpbGFibGUgaW4gcG9ydCAwICovCisjZGVmaW5lIEhXX0dQSU9fUE9SVF8wX05VTV9QSU5TICg4KQorLyoqIE51bWJlciBvZiBHUElPIHBpbnMgYXZhaWxhYmxlIGluIHBvcnQgMSAqLworI2RlZmluZSBIV19HUElPX1BPUlRfMV9OVU1fUElOUyAoOCkKKy8qKiBOdW1iZXIgb2YgR1BJTyBwaW5zIGF2YWlsYWJsZSBpbiBwb3J0IDIgKi8KKyNkZWZpbmUgSFdfR1BJT19QT1JUXzJfTlVNX1BJTlMgKDUpCisvKiogTnVtYmVyIG9mIEdQSU8gcGlucyBhdmFpbGFibGUgaW4gcG9ydCAzICovCisjZGVmaW5lIEhXX0dQSU9fUE9SVF8zX05VTV9QSU5TICg4KQorLyoqIE51bWJlciBvZiBHUElPIHBpbnMgYXZhaWxhYmxlIGluIHBvcnQgNCAqLworI2RlZmluZSBIV19HUElPX1BPUlRfNF9OVU1fUElOUyAoOCkKKy8qKiBOdW1iZXIgb2YgcGlucyBpbiBlYWNoIEdQSU8gcG9ydCAqLworZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgaHdfZ3Bpb19wb3J0X251bV9waW5zW0hXX0dQSU9fTlVNX1BPUlRTXTsKKworCisvKioKKyAqIFxicmllZiBHUElPIGlucHV0L291dHB1dCBtb2RlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19HUElPX01PREVfSU5QVVQgPSAwLCAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIGFuIGlucHV0ICovCisgICAgICAgIEhXX0dQSU9fTU9ERV9JTlBVVF9QVUxMVVAgPSAweDEwMCwgICAgICAvKio8IEdQSU8gYXMgYW4gaW5wdXQgd2l0aCBwdWxsLXVwICovCisgICAgICAgIEhXX0dQSU9fTU9ERV9JTlBVVF9QVUxMRE9XTiA9IDB4MjAwLCAgICAvKio8IEdQSU8gYXMgYW4gaW5wdXQgd2l0aCBwdWxsLWRvd24gKi8KKyAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCA9IDB4MzAwLCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBhbiAoaW1wbGljaXRseSBwdXNoLXB1bGwpIG91dHB1dCAqLworICAgICAgICBIV19HUElPX01PREVfT1VUUFVUX1BVU0hfUFVMTCA9IDB4MzAwLCAgLyoqPCBHUElPIGFzIGFuIChleHBsaWNpdGx5IHB1c2gtcHVsbCkgb3V0cHV0ICovCisgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVRfT1BFTl9EUkFJTiA9IDB4NzAwLCAvKio8IEdQSU8gYXMgYW4gb3Blbi1kcmFpbiBvdXRwdXQgKi8KK30gSFdfR1BJT19NT0RFOworCisvKioKKyAqIFxicmllZiBHUElPIHBvd2VyIHNvdXJjZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BJT19QT1dFUl9WMzMgPSAwLCAgICAgICAgICAvKio8IFYzMyAoMy4zIFYpIHBvd2VyIHJhaWwgKi8KKyAgICAgICAgSFdfR1BJT19QT1dFUl9WREQxVjhQID0gMSwgICAgICAvKio8IFZERDFWOFAgKDEuOCBWKSBwb3dlciByYWlsICovCit9IEhXX0dQSU9fUE9XRVI7CisKKy8qKgorICogXGJyaWVmIEdQSU8gcG9ydCBudW1iZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX0dQSU9fUE9SVF8wID0gMCwgICAgIC8qKjwgR1BJTyBQb3J0IDAgKi8KKyAgICAgICAgSFdfR1BJT19QT1JUXzEgPSAxLCAgICAgLyoqPCBHUElPIFBvcnQgMSAqLworICAgICAgICBIV19HUElPX1BPUlRfMiA9IDIsICAgICAvKio8IEdQSU8gUG9ydCAyICovCisgICAgICAgIEhXX0dQSU9fUE9SVF8zID0gMywgICAgIC8qKjwgR1BJTyBQb3J0IDMgKi8KKyAgICAgICAgSFdfR1BJT19QT1JUXzQgPSA0ICAgICAgLyoqPCBHUElPIFBvcnQgNCAqLworfSBIV19HUElPX1BPUlQ7CisKKy8qKgorICogXGJyaWVmIEdQSU8gcGluIG51bWJlcgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BJT19QSU5fMCA9IDAsICAgICAgLyoqPCBHUElPIFBpbiAwICovCisgICAgICAgIEhXX0dQSU9fUElOXzEgPSAxLCAgICAgIC8qKjwgR1BJTyBQaW4gMSAqLworICAgICAgICBIV19HUElPX1BJTl8yID0gMiwgICAgICAvKio8IEdQSU8gUGluIDIgKi8KKyAgICAgICAgSFdfR1BJT19QSU5fMyA9IDMsICAgICAgLyoqPCBHUElPIFBpbiAzICovCisgICAgICAgIEhXX0dQSU9fUElOXzQgPSA0LCAgICAgIC8qKjwgR1BJTyBQaW4gNCAqLworICAgICAgICBIV19HUElPX1BJTl81ID0gNSwgICAgICAvKio8IEdQSU8gUGluIDUgKi8KKyAgICAgICAgSFdfR1BJT19QSU5fNiA9IDYsICAgICAgLyoqPCBHUElPIFBpbiA2ICovCisgICAgICAgIEhXX0dQSU9fUElOXzcgPSA3LCAgICAgIC8qKjwgR1BJTyBQaW4gNyAqLworfSBIV19HUElPX1BJTjsKKworLyoqCisgKiBcYnJpZWYgR1BJTyBmdW5jdGlvbgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfR1BJT19GVU5DX0dQSU8gPSAwLCAgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVF9SWCA9IDEsICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQgUlggKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VBUlRfVFggPSAyLCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBVQVJUIFRYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUX0lSREFfUlggPSAzLCAgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVCBJUkRBIFJYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUX0lSREFfVFggPSA0LCAgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVCBJUkRBIFRYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUMl9SWCA9IDUsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVDIgUlggKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VBUlQyX1RYID0gNiwgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBVQVJUMiBUWCAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVDJfSVJEQV9SWCA9IDcsICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQyIElSREEgUlggKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1VBUlQyX0lSREFfVFggPSA4LCAgICAgICAgIC8qKjwgR1BJTyBhcyBVQVJUMiBJUkRBIFRYICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VQVJUMl9DVFNOID0gOSwgICAgICAgICAgICAvKio8IEdQSU8gYXMgVUFSVDIgQ1RTTiAqLworICAgICAgICBIV19HUElPX0ZVTkNfVUFSVDJfUlRTTiA9IDEwLCAgICAgICAgICAgLyoqPCBHUElPIGFzIFVBUlQyIFJUU04gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1NQSV9ESSA9IDExLCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBTUEkgREkgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1NQSV9ETyA9IDEyLCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBTUEkgRE8gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1NQSV9DTEsgPSAxMywgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBTUEkgQ0xLICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19TUElfRU4gPSAxNCwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgU1BJIEVOICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19TUEkyX0RJID0gMTUsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgU1BJMiBESSAqLworICAgICAgICBIV19HUElPX0ZVTkNfU1BJMl9ETyA9IDE2LCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFNQSTIgRE8gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1NQSTJfQ0xLID0gMTcsICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBTUEkyIENMSyAqLworICAgICAgICBIV19HUElPX0ZVTkNfU1BJMl9FTiA9IDE4LCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFNQSTIgRU4gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0kyQ19TQ0wgPSAxOSwgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBJMkMgU0NMICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19JMkNfU0RBID0gMjAsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgSTJDIFNEQSAqLworICAgICAgICBIV19HUElPX0ZVTkNfSTJDMl9TQ0wgPSAyMSwgICAgICAgICAgICAgLyoqPCBHUElPIGFzIEkyQzIgU0NMICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19JMkMyX1NEQSA9IDIyLCAgICAgICAgICAgICAvKio8IEdQSU8gYXMgSTJDMiBTREEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BXTTAgPSAyMywgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQV00wICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QV00xID0gMjQsICAgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUFdNMSAqLworICAgICAgICBIV19HUElPX0ZVTkNfUFdNMiA9IDI1LCAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBXTTIgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BXTTMgPSAyNiwgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQV00zICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QV000ID0gMjcsICAgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUFdNNCAqLworICAgICAgICBIV19HUElPX0ZVTkNfQkxFX0RJQUcgPSAyOCwgICAgICAgICAgICAgLyoqPCBHUElPIGFzIEJMRSBESUFHICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19GVERGX0RJQUcgPSAyOSwgICAgICAgICAgICAvKio8IEdQSU8gYXMgRlRERiBESUFHICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QQ01fREkgPSAzMCwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUENNIERJICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QQ01fRE8gPSAzMSwgICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUENNIERPICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QQ01fRlNDID0gMzIsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgUENNIEZTQyAqLworICAgICAgICBIV19HUElPX0ZVTkNfUENNX0NMSyA9IDMzLCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFBDTSBDTEsgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BETV9ESSA9IDM0LCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQRE0gREkgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BETV9ETyA9IDM1LCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQRE0gRE8gKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BETV9DTEsgPSAzNiwgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQRE0gQ0xLICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19VU0JfU09GID0gMzcsICAgICAgICAgICAgICAvKio8IEdQSU8gYXMgVVNCIFNPRiAqLworICAgICAgICBIV19HUElPX0ZVTkNfQURDID0gMzgsICAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIEFEQyAqLworICAgICAgICBIV19HUElPX0ZVTkNfVVNCID0gMzgsICAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFVTQiAqLworICAgICAgICBIV19HUElPX0ZVTkNfUVNQSSA9IDM4LCAgICAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIFFTUEkgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1hUQUwzMiA9IDM4LCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBYVEFMMzIgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FVQURFQ19YQSA9IDM5LCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRVUFERUMgWEEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FVQURFQ19YQiA9IDQwLCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRVUFERUMgWEIgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FVQURFQ19ZQSA9IDQxLCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRVUFERUMgWUEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FVQURFQ19ZQiA9IDQyLCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRVUFERUMgWUIgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FVQURFQ19aQSA9IDQzLCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRVUFERUMgWkEgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1FVQURFQ19aQiA9IDQ0LCAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBRVUFERUMgWkIgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0lSX09VVCA9IDQ1LCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBJUiBPVVQgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0JSRUFUSCA9IDQ2LCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBCUkVBVEggKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0tCX1JPVyA9IDQ3LCAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBLQiBST1cgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0NPRVhfRVhUX0FDVDAgPSA0OCwgICAgICAgIC8qKjwgR1BJTyBhcyBDT0VYIEVYVCBBQ1QwICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19DT0VYX0VYVF9BQ1QxID0gNDksICAgICAgICAvKio8IEdQSU8gYXMgQ09FWCBFWFQgQUNUMSAqLworICAgICAgICBIV19HUElPX0ZVTkNfQ09FWF9TTUFSVF9BQ1QgPSA1MCwgICAgICAgLyoqPCBHUElPIGFzIENPRVggU01BUlQgQUNUICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19DT0VYX1NNQVJUX1BSSSA9IDUxLCAgICAgICAvKio8IEdQSU8gYXMgQ09FWCBTTUFSVCBQUkkgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX0NMT0NLID0gNTIsICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBDTE9DSyAqLworICAgICAgICBIV19HUElPX0ZVTkNfT05FU0hPVCA9IDUzLCAgICAgICAgICAgICAgLyoqPCBHUElPIGFzIE9ORVNIT1QgKi8KKyAgICAgICAgSFdfR1BJT19GVU5DX1BXTTUgPSA1NCwgICAgICAgICAgICAgICAgIC8qKjwgR1BJTyBhcyBQV001ICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QT1JUMF9EQ0YgPSA1NSwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUE9SVDAgRENGICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QT1JUMV9EQ0YgPSA1NiwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUE9SVDEgRENGICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QT1JUMl9EQ0YgPSA1NywgICAgICAgICAgICAvKio8IEdQSU8gYXMgUE9SVDIgRENGICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QT1JUM19EQ0YgPSA1OCwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUE9SVDMgRENGICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19QT1JUNF9EQ0YgPSA1OSwgICAgICAgICAgICAvKio8IEdQSU8gYXMgUE9SVDQgRENGICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19SRl9BTlRfVFJJTTAgPSA2MCwgICAgICAgICAvKio8IEdQSU8gYXMgUkYgQU5UIFRSSU0wICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19SRl9BTlRfVFJJTTEgPSA2MSwgICAgICAgICAvKio8IEdQSU8gYXMgUkYgQU5UIFRSSU0xICovCisgICAgICAgIEhXX0dQSU9fRlVOQ19SRl9BTlRfVFJJTTIgPSA2MiAgICAgICAgICAvKio8IEdQSU8gYXMgUkYgQU5UIFRSSU0yICovCit9IEhXX0dQSU9fRlVOQzsKKworLyoqCisgKiBcYnJpZWYgR1BJTyBwaW4gY29uZmlndXJhdGlvbgorICoKKyAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIFxwIEhXX0dQSU9fUElOQ09ORklHIGFuZCBccCBIV19HUElPX1BJTkNPTkZJR19SRVNFUlZFIHRvIHNldCBwaW4gZW50cmllcy4KKyAqIEVhY2ggY29uZmlndXJhdGlvbiBtdXN0IGJlIHRlcm1pbmF0ZWQgdXNpbmcgXHAgSFdfR1BJT19QSU5DT05GSUdfRU5EIG1hY3JvLgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1aW50OF90ICAgICAgICAgcGluOyAgICAgLyoqPCBwaW4gbmFtZSwgaGlnaC1uaWJibGUgaXMgcG9ydCBudW1iZXIgYW5kIGxvdy1uaWJibGUgaXMgcGluICovCisgICAgICAgIEhXX0dQSU9fTU9ERSAgICBtb2RlOyAgICAvKio8IHBpbiBtb2RlICovCisgICAgICAgIEhXX0dQSU9fRlVOQyAgICBmdW5jOyAgICAvKio8IHBpbiBmdW5jdGlvbiAqLworICAgICAgICBib29sICAgICAgICAgICAgaGlnaDsgICAgLyoqPCBpbml0aWFsIHBpbiBzdGF0ZSwgdHJ1ZSBmb3IgaGlnaCBhbmQgZmFsc2UgZm9yIGxvdyAqLworICAgICAgICBib29sICAgICAgICAgICAgcmVzZXJ2ZTsgLyo8PCB0cnVlIGlmIHBpbiBzaG91bGQgYmUgYWxzbyByZXNlcnZlZCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBncGlvX2NvbmZpZzsKKworLyoqCisgKiBcYnJpZWYgR1BJTyBwaW4gY29uZmlndXJhdGlvbiBmb3IgXHAgZ3Bpb19jb25maWcKKyAqCisgKiBccCB4cG9ydCBhbmQgXHAgeHBpbiBhcmUgc3BlY2lmaWVkIGFzIHN5bWJvbHMgZnJvbSBccCBIV19HUElPX1BPUlQgYW5kIFxwIEhXX0dQSU9fUElOIGVudW1zCisgKiByZXNwZWN0aXZlbHkgb3IgbW9yZSBjb252ZW5pZW50bHkgYXMgcGxhaW4gbnVtZXJpYyB2YWx1ZXMuCisgKiBccCB4bW9kZSBhbmQgXHAgeGZ1bmMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBccCBIV19HUElPX01PREUgYW5kIFxwIEhXX0dQSU9fRlVOQyBlbnVtcworICogcmVzcGVjdGl2ZWx5LCBleGNlcHQgdGhleSBoYXZlIHByZWZpeCBzdHJpcHBlZC4KKyAqCisgKiBccGFyYW0gW2luXSB4cG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0geHBpbiBwaW4gbnVtYmVyCisgKiBccGFyYW0gW2luXSB4bW9kZSBwaW4gbW9kZQorICogXHBhcmFtIFtpbl0geGZ1bmMgcGluIGZ1bmN0aW9uCisgKiBccGFyYW0gW2luXSB4aGlnaCB0cnVlIGZvciBoaWdoIHN0YXRlLCBmYWxzZSBvdGhlcndpc2UKKyAqCisgKi8KKyNkZWZpbmUgSFdfR1BJT19QSU5DT05GSUcoeHBvcnQsIHhwaW4sIHhtb2RlLCB4ZnVuYywgeGhpZ2gpIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIC5waW4gPSAoeHBvcnQgPDwgNCkgfCAoeHBpbiAmIDB4MEYpLCAgICBcCisgICAgICAgICAgICAgICAgLm1vZGUgPSBIV19HUElPX01PREVfICMjIHhtb2RlLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAuZnVuYyA9IEhXX0dQSU9fRlVOQ18gIyMgeGZ1bmMsICAgICAgICAgXAorICAgICAgICAgICAgICAgIC5oaWdoID0geGhpZ2gsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLnJlc2VydmUgPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisvKioKKyAqIFxicmllZiBHUElPIHBpbiBjb25maWd1cmF0aW9uIGFuZCByZXNlcnZhdGlvbiBmb3IgXHAgZ3Bpb19jb25maWcKKyAqCisgKiBUaGlzIG1hY3JvIGlzIHZpcnR1YWxseSBpZGVudGljYWwgdG8gXHAgSFdfR1BJT19QSU5DT05GSUcsIGV4Y2VwdCBpdCBhbHNvIHJlc2VydmVzIHBpbi4KKyAqCisgKiBccGFyYW0gW2luXSB4cG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0geHBpbiBwaW4gbnVtYmVyCisgKiBccGFyYW0gW2luXSB4bW9kZSBwaW4gbW9kZQorICogXHBhcmFtIFtpbl0geGZ1bmMgcGluIGZ1bmN0aW9uCisgKiBccGFyYW0gW2luXSB4aGlnaCB0cnVlIGZvciBoaWdoIHN0YXRlLCBmYWxzZSBvdGhlcndpc2UKKyAqCisgKiBcc2EgSFdfR1BJT19QSU5DT05GSUcKKyAqCisgKi8KKyNkZWZpbmUgSFdfR1BJT19QSU5DT05GSUdfUkVTRVJWRSh4cG9ydCwgeHBpbiwgeG1vZGUsIHhmdW5jLCB4aGlnaCkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLnBpbiA9ICh4cG9ydCA8PCA0KSB8ICh4cGluICYgMHgwRiksICAgIFwKKyAgICAgICAgICAgICAgICAubW9kZSA9IEhXX0dQSU9fTU9ERV8gIyMgeG1vZGUsICAgICAgICAgXAorICAgICAgICAgICAgICAgIC5mdW5jID0gSFdfR1BJT19GVU5DXyAjIyB4ZnVuYywgICAgICAgICBcCisgICAgICAgICAgICAgICAgLmhpZ2ggPSB4aGlnaCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAucmVzZXJ2ZSA9IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKy8qKgorICogXGJyaWVmIE1hY3JvIHRvIHByb3Blcmx5IHRlcm1pbmF0ZSBhcnJheSBvZiBccCBncGlvX2NvbmZpZyBkZWZpbml0aW9uCisgKgorICovCisjZGVmaW5lIEhXX0dQSU9fUElOQ09ORklHX0VORCBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAucGluID0gMHhGRiwgICAgXAorICAgICAgICB9CisKKy8qKgorICogXGJyaWVmIEdQSU8gY29uZmlndXJhdGlvbgorICoKKyAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBjb25maWd1cmUgbXVsdGlwbGUgR1BJT3MgaW4gb25lIGNhbGwuCisgKiBccCBjZmcgaXMgYW4gYXJyYXkgb2YgR1BJTyBwaW5zIGNvbmZpZ3VyYXRpb24sIGl0IHNob3VsZCBiZSB0ZXJtaW5hdGVkIGJ5IGR1bW15IGVsZW1lbnQgd2l0aAorICogXHAgcGluIG1lbWJlciBzZXQgdG8gMHhGRiAobWFjcm8gXHAgSFdfR1BJT19QSU5DT05GSUcgY2FuIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZSkuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIEdQSU8gcGlucyBjb25maWd1cmF0aW9uCisgKgorICogXHNhIGh3X2dwaW9fY29uZmlndXJlX3BpbgorICogXHNhIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbgorICoKKyAqLwordm9pZCBod19ncGlvX2NvbmZpZ3VyZShjb25zdCBncGlvX2NvbmZpZyBjZmdbXSk7CisKKy8qKgorICogXGJyaWVmIFJlc2VydmUgR1BJTyBwaW4KKyAqCisgKiBSZXNlcnZlIHBpbiBmb3IgZXhjbHVzaXZlIHVzYWdlLgorICogVGhpcyBtYWNybyBjYW4gYmUgdXNlZCBpbiBhcHBsaWNhdGlvbiBwZXJpcGhlcmFsX3NldHVwIGZ1bmN0aW9uIHRvIGRldGVjdAorICogdXNhZ2Ugb2Ygc2FtZSBHUElPIHBpbiBieSBkaWZmZXJlbnQgYXBwbGljYXRpb25zLgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluIG51bWJlcgorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBwaW4gd2FzIHN1Y2Nlc3NmdWxseSByZXNlcnZlZCBhbmQgc2V0dXAsIGZhbHNlIGlmIHBpbiB3YXMgYWxyZWFkeSByZXNlcnZlZAorICoKKyAqLworYm9vbCBod19ncGlvX3Jlc2VydmVfcGluKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pOworCisvKioKKyAqIFxicmllZiBSZXNlcnZlIEdQSU8gcGluIGFuZCBzZXQgcGluIGZ1bmN0aW9uCisgKgorICogUmVzZXJ2ZSBwaW4gYW5kIHNldCB1cCBpdCBmdW5jdGlvbi4gSWYgcGluIHdhcyBhbHJlYWR5IHJlc2VydmVkIGRvIG5vdGhpbmcuCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBHUElPIHBvcnQgbnVtYmVyCisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4gbnVtYmVyCisgKiBccGFyYW0gW2luXSBtb2RlIEdQSU8gYWNjZXNzIG1vZGUKKyAqIFxwYXJhbSBbaW5dIGZ1bmN0aW9uIEdQSU8gZnVuY3Rpb24KKyAqIFxwYXJhbSBbaW5dIGhpZ2ggaW4gY2FzZSBvZiBQSURfR1BJTyBhbmQgT1VUUFVUIHZhbHVlIHRvIHNldCBvbiBwaW4KKyAqCisgKiBccmV0dXJuIHRydWUgaWYgcGluIHdhcyBzdWNjZXNzZnVsbHkgcmVzZXJ2ZWQgYW5kIHNldHVwLCBmYWxzZSBpZiBwaW4gd2FzIGFscmVhZHkgcmVzZXJ2ZWQKKyAqCisgKi8KK2Jvb2wgaHdfZ3Bpb19yZXNlcnZlX2FuZF9jb25maWd1cmVfcGluKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fTU9ERSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyBmdW5jdGlvbiwgYm9vbCBoaWdoKTsKKworLyoqCisgKiBcYnJpZWYgVW5yZXNlcnZlIEdQSU8gcGluCisgKgorICogRnJlZSByZXNlcnZlZCBwaW4uIElmIHBpbiB3YXMgbm90IHJlc2VydmVkIGRvIG5vdGhpbmcuCisgKiBDb25maWd1cmF0aW9uIG9mIHBpbiBkb2VzIG5vdCBjaGFuZ2UganVzdCByZXNlcnZhdGlvbi4KKyAqCisgKiBcbm90ZSBJZiBwaW4gd2FzIHJlc2VydmVkIHVzaW5nIFJFU0VSVkVfR1BJTyBpdCB3aWxsIGFsc28gYmUgdW5yZXNlcnZlZC4KKyAqIElmIFJFU0VSVkVfR1BJTyB3YXMgbm90IGVuYWJsZWQgYnkgY29tcGlsZSB0aW1lIGZsYWdzIGNhbGwgdG8gdGhpcyBmdW5jdGlvbgorICogbWF5IGNhdXNlIHVuZXhwZWN0ZWQgcmVzdWx0LgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluIG51bWJlcgorICoKKyAqIFxzYSBod19ncGlvX3Jlc2VydmVfYW5kX2NvbmZpZ3VyZV9waW4KKyAqIFxzYSBod19ncGlvX3Jlc2VydmVfcGluCisgKiBcc2EgUkVTRVJWRV9HUElPCisgKgorICovCit2b2lkIGh3X2dwaW9fdW5yZXNlcnZlX3BpbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKTsKKworI2lmIChERUJVR19HUElPX0FMTE9DX01PTklUT1JfRU5BQkxFRCA9PSAxKQorLyoqCisgKiBcYnJpZWYgUmVzZXJ2ZSBHUElPIHBpbgorICoKKyAqIFJlc2VydmUgcGluIGZvciBleGNsdXNpdmUgdXNhZ2UuIElmIHBpbiBpcyBhbHJlYWR5IGFsbG9jYXRlZCB0cmlnZ2VyIGJyZWFrcG9pbnQuCisgKiBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIGluIGFwcGxpY2F0aW9uIHBlcmlwaGVyYWxfc2V0dXAgZnVuY3Rpb24gdG8gZGV0ZWN0CisgKiB1c2FnZSBvZiBzYW1lIEdQSU8gcGluIGJ5IGRpZmZlcmVudCBhcHBsaWNhdGlvbnMuCisgKgorICogSWYgcnVudGltZSBHUElPIHJlc2VydmF0aW9uIGlzIG5lZWRlZCwgdXNlIGh3X2dwaW9fcmVzZXJ2ZV9waW4sCisgKiBod19ncGlvX3Jlc2VydmVfYW5kX2NvbmZpZ3VyZV9waW4gYW5kIGh3X2dwaW9fdW5yZXNlcnZlX3BpbiBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBbaW5dIG5hbWUgcGFyYW1ldGVyIGlnbm9yZWQsIHVzZWQgZm9yIGRlYnVnIG9ubHkKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluIG51bWJlcgorICogXHBhcmFtIFtpbl0gZnVuYyBwYXJhbWV0ZXIgaWdub3JlZCAoZm9yIGNvbXBhdGliaWxpdHkpCisgKgorICogXHNhIGh3X2dwaW9fcmVzZXJ2ZV9waW4KKyAqIFxzYSBod19ncGlvX3Jlc2VydmVfYW5kX2NvbmZpZ3VyZV9waW4KKyAqIFxzYSBod19ncGlvX3VucmVzZXJ2ZV9waW4gaW5zdGVhZAorICoKKyAqLworI2RlZmluZSBSRVNFUlZFX0dQSU8obmFtZSwgcG9ydCwgcGluLCBmdW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICghaHdfZ3Bpb19yZXNlcnZlX3BpbigocG9ydCksIChwaW4pKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgZGVidWdnZXIgc3RvcHMgYXQgdGhpcyBsaW5lLCB0aGVyZSBpcyBjb25maWd1cmF0aW9uIHByb2JsZW0gKi8gICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgLyogcGluIGlzIHVzZWQgd2l0aG91dCBiZWluZyByZXNlcnZlZCBmaXJzdCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19CS1BUKDApOyAvKiB0aGlzIHBpbiBoYXMgbm90IGJlZW4gcHJldmlvdXNseSByZXNlcnZlZCEgKi8gICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIFJFU0VSVkVfR1BJTyggbmFtZSwgcG9ydCwgcGluLCBmdW5jICkgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNlbmRpZiAvLyAoREVCVUdfR1BJT19BTExPQ19NT05JVE9SX0VOQUJMRUQgPT0gMSkKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBwaW4gdHlwZSBhbmQgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqIFxwYXJhbSBbaW5dIG1vZGUgR1BJTyBwaW4gbW9kZQorICogXHBhcmFtIFtpbl0gZnVuY3Rpb24gR1BJTyBwaW4gdXNhZ2UKKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fTU9ERSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DIGZ1bmN0aW9uKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBwaW4gdHlwZSBhbmQgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqIFxwYXJhbSBbb3V0XSBtb2RlIEdQSU8gcGluIG1vZGUKKyAqIFxwYXJhbSBbb3V0XSBmdW5jdGlvbiBHUElPIHBpbiB1c2FnZQorICoKKyAqLwordm9pZCBod19ncGlvX2dldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbiwgSFdfR1BJT19NT0RFKiBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DKiBmdW5jdGlvbik7CisKKy8qKgorICogXGJyaWVmIENvbWJpbmVkIGZ1bmN0aW9uIHRvIHNldCB0aGUgc3RhdGUgYW5kIHRoZSB0eXBlIGFuZCBtb2RlIG9mIHRoZSBHUElPIHBpbgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqIFxwYXJhbSBbaW5dIG1vZGUgR1BJTyBwaW4gbW9kZQorICogXHBhcmFtIFtpbl0gZnVuY3Rpb24gR1BJTyBwaW4gdXNhZ2UKKyAqIFxwYXJhbSBbaW5dIGhpZ2ggc2V0IHRvIFRSVUUgdG8gc2V0IHRoZSBwaW4gaW50byBoaWdoIGVsc2UgbG93CisgKgorICovCit2b2lkIGh3X2dwaW9fY29uZmlndXJlX3BpbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DIGZ1bmN0aW9uLCBjb25zdCBib29sIGhpZ2gpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgcG93ZXIgc291cmNlIGZvciBwaW4gb3V0cHV0CisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBHUElPIHBvcnQKKyAqIFxwYXJhbSBbaW5dIHBpbiBHUElPIHBpbgorICogXHBhcmFtIFtpbl0gcG93ZXIgR1BJTyBwb3dlciBzb3VyY2UKKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb19jb25maWd1cmVfcGluX3Bvd2VyKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fUE9XRVIgcG93ZXIpOworCisvKioKKyAqIFxicmllZiBTZXQgYSBHUElPIGluIGhpZ2ggc3RhdGUKKyAqCisgKiBUaGUgR1BJTyBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY29uZmlndXJlZCBhcyBhbiBvdXRwdXQhCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBHUElPIHBvcnQKKyAqIFxwYXJhbSBbaW5dIHBpbiBHUElPIHBpbgorICoKKyAqLwordm9pZCBod19ncGlvX3NldF9hY3RpdmUoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbik7CisKKy8qKgorICogXGJyaWVmIFNldCBhIEdQSU8gaW4gbG93IHN0YXRlCisgKgorICogVGhlIEdQSU8gc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0IQorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb19zZXRfaW5hY3RpdmUoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbik7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgR1BJTyBzdGF0dXMKKyAqCisgKiBUaGUgR1BJTyBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY29uZmlndXJlZCBhcyBpbnB1dCEKKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IEdQSU8gcG9ydAorICogXHBhcmFtIFtpbl0gcGluIEdQSU8gcGluCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZSBwaW4gaXMgaGlnaCwgZmFsc2UgaWYgbG93CisgKgorICovCitib29sIGh3X2dwaW9fZ2V0X3Bpbl9zdGF0dXMoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbik7CisKKy8qKgorICogXGJyaWVmIFRvZ2dsZSBHUElPIHBpbiBzdGF0ZQorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgR1BJTyBwb3J0CisgKiBccGFyYW0gW2luXSBwaW4gR1BJTyBwaW4KKyAqCisgKi8KK3ZvaWQgaHdfZ3Bpb190b2dnbGUoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbik7CisKKy8qKgorICogXGJyaWVmIEZpbmQgcGlucyB3aXRoIHNwZWNpZmljIGZ1bmN0aW9uCisgKgorICogRnVuY3Rpb24gc2VhcmNoZXMgZm9yIHBpbnMgY29uZmlndXJlZCBmb3Igc3BlY2lmaWMgZnVuY3Rpb24uCisgKiBJZiBidWYgaXMgbm90IE5VTEwgYW5kIGJ1Zl9zaXplIGlzIGdyZWF0ZXIgdGhhbiAwIHBpbnMgYXJlIHN0b3JlZCBpbiBidWYKKyAqIGhpZ2gtbmliYmxlIGlzIHBvcnQgbnVtYmVyIGFuZCBsb3ctbmliYmxlIGlzIHBpbi4KKyAqIElmIG51bWJlciBvZiBwaW5zIGZvdW5kIGlzIGdyZWF0ZXIgdGhlbiBidWZfc2l6ZSBvbmx5IGJ1Zl9zaXplIGVudHJpZXMgYXJlIGZpbGxlZCwgdGhvdWdoCisgKiB0aGUgcmV0dXJuZWQgbnVtYmVyIG9mIGZvdW5kIHBpbnMgaXMgY29ycmVjdC4KKyAqCisgKiBccGFyYW0gW2luXSBmdW5jIGZ1bmN0aW9uIHRvIGxvb2t1cAorICogXHBhcmFtIFtvdXRdIGJ1ZiBidWZmZXIgZm9yIHBvcnQtcGluIHBhaXJzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgZm9yIHNwZWNpZmljIGZ1bmN0aW9uCisgKiBccGFyYW0gW2luXSBidWZfc2l6ZSBzaXplIG9mIGJ1ZgorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIHBpbnMgd2l0aCBzcGVjaWZpYyBmdW5jdGlvbiBwdXQgaW4gYnVmCisgKiAgICAgICAgIDAgLSBubyBwaW4gaXMgY29uZmlndXJlZCBmb3IgdGhpcyBmdW5jdGlvbgorICoKKyAqLworaW50IGh3X2dwaW9fZ2V0X3BpbnNfd2l0aF9mdW5jdGlvbihIV19HUElPX0ZVTkMgZnVuYywgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpOworCisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfR1BJTyAqLworCisjZW5kaWYgLyogSFdfR1BJT19IXyAqLworCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19oYXJkX2ZhdWx0LmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2hhcmRfZmF1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMzZmFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19oYXJkX2ZhdWx0LmgKQEAgLTAsMCArMSw3MiBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBTWVNURU0KKyAqIFx7CisgKiBcYWRkdG9ncm91cCBFeGNlcHRpb25fSGFuZGxlcnMKKyAqIFx7CisgKiBcYnJpZWYgR2VuZXJpYyBFeGNlcHRpb24gSGFuZGxlcnMKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X2hhcmRfZmF1bHQuaAorICoKKyAqIEBicmllZiBIYXJkLUZhdWx0IEhhbmRsZXIgaW5jbHVkZSBmaWxlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfSEFSRF9GQVVMVF9IXworI2RlZmluZSBIV19IQVJEX0ZBVUxUX0hfCisKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisjZGVmaW5lIEhBUkRGQVVMVF9NQUdJQ19OVU1CRVIgICAgICAgICAgMHhCQURDMEZGRQorCisvKioKKyAqIFxicmllZiBIb2xkcyB0aGUgc3RhY2sgY29udGVudHMgd2hlbiBhIGhhcmQtZmF1bHQgb2NjdXJzLgorICoKKyAqIFxkZXRhaWxzIFRoZSBzdGFjayBjb250ZW50cyBhcmUgY29waWVkIGF0IHRoaXMgdmFyaWFibGUgd2hlbiBhIGhhcmQtZmF1bHQgb2NjdXJzLiBUaGUgZmlyc3QKKyAqICAgICAgICBwb3NpdGlvbiBpcyBtYXJrZWQgd2l0aCBhIHNwZWNpYWwgImZsYWciICgweEJBREMwRkZFKSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkYXRhIHRoYXQKKyAqICAgICAgICBmb2xsb3cgYXJlIHZhbGlkLgorICovCitleHRlcm4gdWludDMyX3QgaGFyZGZhdWx0X2V2ZW50X2RhdGFbOV07CisKKyNlbmRpZiAvKiBIV19IQVJEX0ZBVUxUX0hfICovCisKKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfbGVkLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNGM0ODQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X2xlZC5oCkBAIC0wLDAgKzEsMTUyIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBMRUQKKyAqIFx7CisgKiBcYnJpZWYgTEVEIENvbnRyb2xsZXIKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X2xlZC5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgTEVEIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19MRURfSF8KKyNkZWZpbmUgSFdfTEVEX0hfCisKKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisvKioKKyAqIFxicmllZiBTb3VyY2UgZm9yIExFRDEKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfTEVEX1NSQzFfUFdNMiAgID0gMCwgICAgICAvKio8IExFRDEgY29udHJvbGxlZCBieSBQV00yICovCisgICAgICAgIEhXX0xFRF9TUkMxX0JSRUFUSCA9IDEgICAgICAgLyoqPCBMRUQxIGNvbnRyb2xsZWQgYnkgQnJlYXRoIFRpbWVyICovCit9IEhXX0xFRF9TUkMxOworCisvKioKKyAqIFxicmllZiBTb3VyY2UgZm9yIExFRDIKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfTEVEX1NSQzJfUFdNMyAgID0gMCwgICAgICAvKio8IExFRDIgY29udHJvbGxlZCBieSBQV00zICovCisgICAgICAgIEhXX0xFRF9TUkMyX0JSRUFUSCA9IDEgICAgICAgLyoqPCBMRUQyIGNvbnRyb2xsZWQgYnkgQnJlYXRoIFRpbWVyICovCit9IEhXX0xFRF9TUkMyOworCisvKioKKyAqIFxicmllZiBTb3VyY2UgZm9yIExFRDMKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfTEVEX1NSQzNfUFdNNCAgID0gMCwgICAgICAvKio8IExFRDMgY29udHJvbGxlZCBieSBQV000ICovCisgICAgICAgIEhXX0xFRF9TUkMzX0JSRUFUSCA9IDEgICAgICAgLyoqPCBMRUQzIGNvbnRyb2xsZWQgYnkgQnJlYXRoIFRpbWVyICovCit9IEhXX0xFRF9TUkMzOworCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgc291cmNlIHRoYXQgY29udHJvbHMgTEVEMQorICoKKyAqIFxwYXJhbSBbaW5dIHNyYyB0aGUgc291cmNlIHRoYXQgY29udHJvbHMgTEVEMQorICoKKyAqIFxzYSBIV19MRURfU1JDMQorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19sZWRfc2V0X2xlZDFfc3JjKEhXX0xFRF9TUkMxIHNyYykKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BSRUcsIExFRF9DT05UUk9MX1JFRywgTEVEMV9TUkNfU0VMLCBzcmMpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHNvdXJjZSB0aGF0IGNvbnRyb2xzIExFRDIKKyAqCisgKiBccGFyYW0gW2luXSBzcmMgdGhlIHNvdXJjZSB0aGF0IGNvbnRyb2xzIExFRDIKKyAqCisgKiBcc2EgSFdfTEVEX1NSQzIKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfbGVkX3NldF9sZWQyX3NyYyhIV19MRURfU1JDMiBzcmMpCit7CisgICAgICAgIFJFR19TRVRGKEdQUkVHLCBMRURfQ09OVFJPTF9SRUcsIExFRDJfU1JDX1NFTCwgc3JjKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBzb3VyY2UgdGhhdCBjb250cm9scyBMRUQzCisgKgorICogXHBhcmFtIFtpbl0gc3JjIHRoZSBzb3VyY2UgdGhhdCBjb250cm9scyBMRUQzCisgKgorICogXHNhIEhXX0xFRF9TUkMzCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2xlZF9zZXRfbGVkM19zcmMoSFdfTEVEX1NSQzMgc3JjKQoreworICAgICAgICBSRUdfU0VURihHUFJFRywgTEVEX0NPTlRST0xfUkVHLCBMRUQzX1NSQ19TRUwsIHNyYyk7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIExFRDEKKyAqCisgKiBccGFyYW0gW2luXSBzdGF0ZSB0cnVlIHRvIGVuYWJsZSBMRUQxLCBvciBmYWxzZSB0byBkaXNhYmxlIGl0CisgKgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBod19sZWRfZW5hYmxlX2xlZDEoYm9vbCBzdGF0ZSkKK3sKKyAgICAgICAgUkVHX1NFVEYoR1BSRUcsIExFRF9DT05UUk9MX1JFRywgTEVEMV9FTiwgc3RhdGUpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBMRUQyCisgKgorICogXHBhcmFtIFtpbl0gc3RhdGUgdHJ1ZSB0byBlbmFibGUgTEVEMiwgb3IgZmFsc2UgdG8gZGlzYWJsZSBpdAorICoKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgaHdfbGVkX2VuYWJsZV9sZWQyKGJvb2wgc3RhdGUpCit7CisgICAgICAgIFJFR19TRVRGKEdQUkVHLCBMRURfQ09OVFJPTF9SRUcsIExFRDJfRU4sIHN0YXRlKTsKK30KKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgTEVEMworICoKKyAqIFxwYXJhbSBbaW5dIHN0YXRlIHRydWUgdG8gZW5hYmxlIExFRDMsIG9yIGZhbHNlIHRvIGRpc2FibGUgaXQKKyAqCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIGh3X2xlZF9lbmFibGVfbGVkMyhib29sIHN0YXRlKQoreworICAgICAgICBSRUdfU0VURihHUFJFRywgTEVEX0NPTlRST0xfUkVHLCBMRUQzX0VOLCBzdGF0ZSk7Cit9CisKKworI2VuZGlmIC8qIEhXX0xFRF9IXyAqLworCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19vdHBjLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X290cGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTE1Njg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19vdHBjLmgKQEAgLTAsMCArMSw1NzYgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIE9UUEMKKyAqIFx7CisgKiBcYnJpZWYgT1RQIE1lbW9yeSBDb250cm9sbGVyCisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X290cGMuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIE9UUCBDb250cm9sbGVyIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfT1RQQ19IXworI2RlZmluZSBIV19PVFBDX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfT1RQQworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHNka19kZWZzLmg+CisKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBtYXNrIG9mIGEgZmllbGQgb2YgYW4gT1RQQyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19PVFBDX1JFR19GSUVMRF9NQVNLKHJlZywgZmllbGQpIFwKKyAgICAgICAgKE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGJpdCBwb3NpdGlvbiBvZiBhIGZpZWxkIG9mIGFuIE9UUEMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfT1RQQ19SRUdfRklFTERfUE9TKHJlZywgZmllbGQpIFwKKyAgICAgICAgKE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfUG9zKQorCisvKioKKyAqIFxicmllZiBQcmVwYXJlIChpLmUuIHNoaWZ0IGFuZCBtYXNrKSBhIHZhbHVlIHRvIGJlIHVzZWQgZm9yIGFuIE9UUEMgcmVnaXN0ZXIgZmllbGQuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIHZhbCBpcyB0aGUgdmFsdWUgdG8gcHJlcGFyZQorICoKKyAqLworI2RlZmluZSBIV19PVFBDX0ZJRUxEX1ZBTChyZWcsIGZpZWxkLCB2YWwpIFwKKyAgICAgICAgKCgodmFsKSA8PCBIV19PVFBDX1JFR19GSUVMRF9QT1MocmVnLCBmaWVsZCkpICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhyZWcsIGZpZWxkKSkKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGFuIE9UUEMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byB3cml0ZQorICoKKyAqIFxyZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBmaWVsZAorICoKKyAqLworI2RlZmluZSBIV19PVFBDX1JFR19HRVRGKHJlZywgZmllbGQpIFwKKyAgICAgICAgKChPVFBDLT5PVFBDXyMjcmVnIyNfUkVHICYgKE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKSkgPj4gKE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGFuIE9UUEMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byB3cml0ZQorICogXHBhcmFtIFtpbl0gbmV3X3ZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUKKyAqCisgKi8KKyNkZWZpbmUgSFdfT1RQQ19SRUdfU0VURihyZWcsIGZpZWxkLCBuZXdfdmFsKSBcCisgICAgICAgIE9UUEMtPk9UUENfIyNyZWcjI19SRUcgPSAoKE9UUEMtPk9UUENfIyNyZWcjI19SRUcgJiB+KE9UUENfT1RQQ18jI3JlZyMjX1JFR18jI09UUENfIyNyZWcjI18jI2ZpZWxkIyNfTXNrKSkgfCBcCisgICAgICAgICgoT1RQQ19PVFBDXyMjcmVnIyNfUkVHXyMjT1RQQ18jI3JlZyMjXyMjZmllbGQjI19Nc2spICYgKChuZXdfdmFsKSA8PCAoT1RQQ19PVFBDXyMjcmVnIyNfUkVHXyMjT1RQQ18jI3JlZyMjXyMjZmllbGQjI19Qb3MpKSkpCisKKworLyoqCisgKiBcYnJpZWYgT1RQIENvbnRyb2xsZXIgbW9kZQorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19PVFBDX01PREVfU1RCWSAgICAgICA9IDAsCisgICAgICAgIEhXX09UUENfTU9ERV9NUkVBRCAgICAgID0gMSwKKyAgICAgICAgSFdfT1RQQ19NT0RFX01QUk9HICAgICAgPSAyLAorICAgICAgICBIV19PVFBDX01PREVfQVJFQUQgICAgICA9IDMsCisgICAgICAgIEhXX09UUENfTU9ERV9BUFJPRyAgICAgID0gNCwKKyAgICAgICAgSFdfT1RQQ19NT0RFX1RCTEFOSyAgICAgPSA1LAorICAgICAgICBIV19PVFBDX01PREVfVERFQyAgICAgICA9IDYsCisgICAgICAgIEhXX09UUENfTU9ERV9UV1IgICAgICAgID0gNworfSBIV19PVFBDX01PREU7CisKKyNkZWZpbmUgTUFYX1JSX0FWQUlMICAgICAgICAgICAgKDgpCisKKyNkZWZpbmUgT1RQX0NMS19JU18xNk0gICAgICAgICAgKDApCisjZGVmaW5lIE9UUF9DTEtfSVNfMzJNICAgICAgICAgICgxKQorI2RlZmluZSBPVFBfQ0xLX0lTXzQ4TSAgICAgICAgICAoMikKKworCisvKioKKyAqIFxicmllZiBXb3JkIGluc2lkZSBjZWxsIHRvIHByb2dyYW0vcmVhZAorICoKKyAqIENlbGwgY29udGVudHMgaW4gbWVtb3J5IHN0YXJ0cyB3aXRoIGxvdyB3b3JkIChpLmUuIHRvIHByb2dyYW0vcmVhZCBib3RoIHdvcmRzIGluIGNlbGwgYXQgb25jZSwKKyAqIEhXX09UUENfV09SRF9MT1cgc2hvdWxkIGJlIHVzZWQgZm9yIGFkZHJlc3NpbmcpLgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfT1RQQ19XT1JEX0xPVyA9IDAsCisgICAgICAgIEhXX09UUENfV09SRF9ISUdIID0gMQorfSBIV19PVFBDX1dPUkQ7CisKKworLyoqCisgKiBcYnJpZWYgU3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBpbiBNSHoKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzEgPSAwLAorICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV8yID0gMSwKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfMyA9IDIsCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzQgPSAzLAorICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV82ID0gNCwKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfOCA9IDUsCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzEyID0gNiwKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfMTYgPSA3LAorICAgICAgICBIV19PVFBDX1NZU19DTEtfRlJFUV8yNCA9IDgsCisgICAgICAgIEhXX09UUENfU1lTX0NMS19GUkVRXzMyID0gOSwKKyAgICAgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfNDggPSAxMAorfSBIV19PVFBDX1NZU19DTEtfRlJFUTsKKworLyoKKyAqIFJlc2V0IHZhbHVlcyBvZiBPVFBDIHJlZ2lzdGVycworICovCisjZGVmaW5lIE9UUENfTU9ERV9SRUdfUkVTRVQgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgT1RQQ19QQ1RSTF9SRUdfUkVTRVQgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBPVFBDX1NUQVRfUkVHX1JFU0VUICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNTEpCisjZGVmaW5lIE9UUENfQUhCQURSX1JFR19SRVNFVCAgICAgICAgICAgICAgICAoMHgwN0ZDMDAwMCkKKyNkZWZpbmUgT1RQQ19DRUxBRFJfUkVHX1JFU0VUICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBPVFBDX05XT1JEU19SRUdfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE9UUENfRkZQUlRfUkVHX1JFU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgT1RQQ19GRlJEX1JFR19SRVNFVCAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBPVFBDX1BXT1JETF9SRUdfUkVTRVQgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE9UUENfUFdPUkRIX1JFR19SRVNFVCAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgT1RQQ19USU0xX1JFR19SRVNFVCAgICAgICAgICAgICAgICAgICgweDFBMTA0RjIwKQorI2RlZmluZSBPVFBDX1RJTTJfUkVHX1JFU0VUICAgICAgICAgICAgICAgICAgKDB4MDAwMTAwMDApCisKKy8qKgorICogXGJyaWVmIENvbnZlcnQgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBleHByZXNzZWQgaW4gTUh6IHRvIGVxdWl2YWxlbnQgSFdfT1RQQ19TWVNfQ0xLX0ZSRVEgdmFsdWUKKyAqCisgKiBcc2EgSFdfT1RQQ19TWVNfQ0xLX0ZSRVEKKyAqLworX19SRVRBSU5FRF9DT0RFIEhXX09UUENfU1lTX0NMS19GUkVRIGh3X290cGNfY29udmVydF9zeXNfY2xrX21oeih1aW50MzJfdCBjbGtfZnJlcSk7CisKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZSB0aGUgT1RQIENvbnRyb2xsZXIuCisgKgorICogXHdhcm5pbmcgVGhlIEFIQiBjbG9jayBtdXN0IGJlIHVwIHRvIDQ4TUh6ISBJdCBpcyBhIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gY2hlY2sgdGhpcyEKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19vdHBjX2luaXQodm9pZCkKK3sKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIGlmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgICAgICAgICB8fCAoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpICYmIChDSElQX0lTX0FFKSkpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFJlc2V0IE9UUCBjb250cm9sbGVyCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgT1RQQy0+T1RQQ19NT0RFX1JFRyA9IEhXX09UUENfTU9ERV9TVEJZOyAgICAgICAgICAgICAgICAvLyBTZXQgT1RQQyB0byBzdGFuZGJ5CisgICAgICAgICAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBPVFBDX1JFU0VUX1JFUSk7ICAgICAvLyBSZXNldCB0aGUgT1RQQworICAgICAgICAgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIFNZU19DVFJMX1JFRywgT1RQQ19SRVNFVF9SRVEpOyAgICAgLy8gR2V0IHRoZSBPVFBDIG91dCBvZiBSZXNldAorCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBJbml0aWFsaXplIHRoZSBQT1IgcmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgT1RQQy0+T1RQQ19OV09SRFNfUkVHID0gT1RQQ19OV09SRFNfUkVHX1JFU0VUOworICAgICAgICAgICAgICAgIE9UUEMtPk9UUENfVElNMV9SRUcgPSBPVFBDX1RJTTFfUkVHX1JFU0VUOworICAgICAgICAgICAgICAgIE9UUEMtPk9UUENfVElNMl9SRUcgPSBPVFBDX1RJTTJfUkVHX1JFU0VUOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRW5hYmxlIE9UUEMgY2xvY2sKKyAgICAgICAgICovCisgICAgICAgIENSR19UT1AtPkNMS19BTUJBX1JFRyB8PSAxIDw8IFJFR19QT1MoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBPVFBfRU5BQkxFKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKy8qKgorICogXGJyaWVmIENsb3NlIHRoZSBPVFAgQ29udHJvbGxlci4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19vdHBjX2Nsb3NlKHZvaWQpCit7CisgICAgICAgIC8qCisgICAgICAgICAqIERpc2FibGUgT1RQQyBjbG9jaworICAgICAgICAgKi8KKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIENSR19UT1AtPkNMS19BTUJBX1JFRyAmPSB+UkVHX01TSyhDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIE9UUF9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGhlIE9UUCBDb3Rucm9sbGVyIGlzIGFjdGl2ZS4KKyAqCisgKiBccmV0dXJuIDEgaWYgaXQgaXMgYWN0aXZlLCBlbHNlIDAuCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X290cGNfaXNfYWN0aXZlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBod19vdHBjX2lzX2FjdGl2ZSh2b2lkKQoreworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiB0aGUgT1RQQyBjbG9jayBpcyBlbmFibGVkCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gISEoQ1JHX1RPUC0+Q0xLX0FNQkFfUkVHICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIE9UUF9FTkFCTEUpKTsKK30KKworLyoqCisgKiBcYnJpZWYgUHV0IHRoZSBPVFAgQ29udHJvbGxlciBpbiBTVEJZIG1vZGUgYW5kIHR1cm4tb2ZmIGNsb2NrLgorICoKKyAqLwordm9pZCBod19vdHBjX2Rpc2FibGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgYWNjZXNzIHNwZWVkIG9mIHRoZSBPVFAgQ29udHJvbGxlciBiYXNlZCBvbiB0aGUgc3lzdGVtIGNsb2NrLgorICoKKyAqIFxkZXRhaWxzIFN3aXRjaCBmcm9tIFBMTCB0byBYVEFMIDogY2FsbCBmdW5jdGlvbiBhZnRlciBjbG9jayBzd2l0Y2ggd2l0aCBoaWdoX2Nsa19zcGVlZCA9PSBmYWxzZQorICogICAgICAgICAgU3dpdGNoIGZyb20gWFRBTCB0byBQTEwgOiBjYWxsIGZ1bmN0aW9uIGJlZm9yZSBjbG9jayBzd2l0Y2ggd2l0aCBoaWdoX2Nsa19zcGVlZCA9PSB0cnVlCisgKgorICogXHBhcmFtIFtpbl0gY2xrX3NwZWVkIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHN5c3RlbSBjbG9jazogMSwgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzIgYW5kIDQ4LgorICoKKyAqIFx3YXJuaW5nIFRoZSBPVFAgY2xvY2sgbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCAoT1RQX0VOQUJMRSA9PSAxKS4KKyAqICAgICAgICAgIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIHZvaWQgaHdfb3RwY19zZXRfc3BlZWQoSFdfT1RQQ19TWVNfQ0xLX0ZSRVEgY2xrX3NwZWVkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IG9yIHJlc2V0IHRoZSBwb3dlciBzYXZpbmcgbW9kZSBvZiB0aGUgT1RQIENvbnRyb2xsZXIuCisgKgorICogXHBhcmFtIFtpbl0gaW5hY3Rpdml0eV9wZXJpb2QgVGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byByZW1haW4gcG93ZXJlZCB3aGlsZSBubyBhY2Nlc3MgaXMgbWFkZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAwLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZC4KKyAqICAgICAgICAgIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICovCit2b2lkIGh3X290cGNfcG93ZXJfc2F2ZSh1aW50MzJfdCBpbmFjdGl2aXR5X3BlcmlvZCk7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbnVtYmVyIG9mIHRoZSBSZXBhaXIgUmVjb3Jkcy4KKyAqCisgKiBccmV0dXJuIFRoZSBudW1iZXIgb2YgdXNlZCBSZXBhaXIgUmVjb3Jkcy4KKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkLiBUaGUgT1RQQyBtb2RlIHdpbGwgYmUgcmVzZXQuCisgKiAgICAgICAgICAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqLwordWludDMyX3QgaHdfb3RwY19udW1fb2ZfcnIodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFByb2dyYW0gbWFudWFsbHkgYW4gT1RQIGVudHJ5LgorICoKKyAqIFxwYXJhbSBbaW5dIGNlbGxfb2Zmc2V0IENlbGwgb2Zmc2V0IHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gcHdvcmRfbCAgIFRoZSBsb3cgMzItYml0cyBvZiB0aGUgNjQtYml0IHdvcmQgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBccGFyYW0gW2luXSBwd29yZF9oICAgVGhlIGhpZ2ggMzItYml0cyBvZiB0aGUgNjQtYml0IHdvcmQgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBccGFyYW0gW2luXSB1c2VfcnIgICAgVXNlIGEgUmVwYWlyIFJlY29yZCBpZiB3cml0aW5nIGZhaWxzIHdoZW4gdHJ1ZS4KKyAqCisgKiBccmV0dXJuIHRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBmYWlsdXJlCisgKgorICogXHdhcm5pbmcgVGhlIGh3X290cGNfaW5pdCgpIGFuZCB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYW5kIHRoZSBtb2RlIG11c3QKKyAqICAgICAgICAgIGJlIFNUQlkuIChOb3RlOiB0aGUgaHdfb3RwY19zZXRfc3BlZWQoKSBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgUExMIGlzIHVzZWQgb3IKKyAqICAgICAgICAgIGR1cmluZyBlYWNoIGNsb2NrIHN3aXRjaCB3aGVuIGJvdGggUExMIGFuZCBYVEFMMTYgYXJlIHVzZWQsIHNpbmNlIHRoZSByZWdpc3RlciBiaXRzIGl0CisgKiAgICAgICAgICBtb2RpZmllcyBhcmUgcmV0YWluZWQuKQorICoKKyAqLworYm9vbCBod19vdHBjX21hbnVhbF93b3JkX3Byb2codWludDMyX3QgY2VsbF9vZmZzZXQsIHVpbnQzMl90IHB3b3JkX2wsIHVpbnQzMl90IHB3b3JkX2gsIGJvb2wgdXNlX3JyKTsKKworLyoqCisgKiBcYnJpZWYgUHJvZ3JhbSBtYW51YWxseSBhbiBPVFAgYmxvY2suCisgKgorICogXHBhcmFtIFtpbl0gcF9kYXRhICAgICAgIFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkYXRhIHRvIGNvcHkgZnJvbS4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX29mZnNldCAgQ2VsbCBvZmZzZXQgdG8gc3RhcnQgcHJvZ3JhbW1pbmcgZnJvbS4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX3dvcmQgICAgV29yZCBpbnNpZGUgY2VsbCB0byBzdGFydCBwcm9ncmFtbWluZyBmcm9tLgorICoKKyAqIFxwYXJhbSBbaW5dIG51bV9vZl93b3JkcyBUaGUgYWN0dWFsIG51bWJlciBvZiB0aGUgd29yZHMgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBccGFyYW0gW2luXSB1c2VfcnIgICAgICAgdHJ1ZSB0byB1c2UgUmVwYWlyIFJlY29yZHMgaWYgd3JpdGluZyBmYWlscworICoKKyAqIFxyZXR1cm4gdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmUKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCitib29sIGh3X290cGNfbWFudWFsX3Byb2coY29uc3QgdWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHVzZV9ycik7CisKKy8qKgorICogXGJyaWVmIFB1dCB0aGUgT1RQIGluIG1hbnVhbCByZWFkIG1vZGUuCisgKgorICogXGRldGFpbHMgSW4gbWFudWFsIHJlYWQgbW9kZSB0aGUgT1RQIGlzIG1lbW9yeSBtYXBwZWQgdG8gdGhlIGFkZHJlc3MgTUVNT1JZX09UUF9CQVNFLiBTbywgYW55CisgKiAgICAgICAgICBhY2Nlc3MgdG8gdGhpcyBtZW1vcnkgc3BhY2UgcmVzdWx0cyBpbnRvIHJlYWRpbmcgZnJvbSB0aGUgT1RQLiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlCisgKiAgICAgICAgICB0aGF0IHRoZSBmdW5jdGlvbiBod19vdHBjX21hbnVhbF9yZWFkX29mZigpIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgT1RQIGlzCisgKiAgICAgICAgICBmaW5pc2hlZC4KKyAqCisgKiBccGFyYW0gW2luXSBzcGFyZV9yb3dzIHRydWUgdG8gYWNjZXNzIHRoZSBzcGFyZSByb3dzIGFyZWEsIGZhbHNlIHRvIGFjY2VzcyBub3JtYWwgbWVtb3J5IGNlbGwKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCit2b2lkIGh3X290cGNfbWFudWFsX3JlYWRfb24oYm9vbCBzcGFyZV9yb3dzKTsKKworLyoqCisgKiBcYnJpZWYgVGFrZSB0aGUgT1RQIG91dCBvZiBtYW51YWwgcmVhZCBtb2RlIGFuZCBwdXQgaXQgaW4gU1RCWS4KKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCit2b2lkIGh3X290cGNfbWFudWFsX3JlYWRfb2ZmKHZvaWQpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtIG1hbnVhbGx5IGEgUmVwYWlyIFJlY29yZCBpbiB0aGUgT1RQJ3Mgc3BhcmUgYXJlYS4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX29mZnNldCBUaGUgYWRkcmVzcyBwcm9ncmFtbWVkIHdpdGggZXJyb3JzLgorICogXHBhcmFtIFtpbl0gcHdvcmRfbCAgIFRoZSBsb3cgMzItYml0cyBvZiB0aGUgNjQtYml0IHdvcmQgdG8gYmUgd3JpdHRlbi4KKyAqIFxwYXJhbSBbaW5dIHB3b3JkX2ggICBUaGUgaGlnaCAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgd29yZCB0byBiZSB3cml0dGVuLgorICogXHJldHVybiB0cnVlIGZvciBzdWNjZXNzLCBmYWxzZSBmb3IgZmFpbHVyZQorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFuZCB0aGUgbW9kZSBtdXN0CisgKiAgICAgICAgICBiZSBTVEJZLiAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK2Jvb2wgaHdfb3RwY193cml0ZV9ycih1aW50MzJfdCBjZWxsX29mZnNldCwgdWludDMyX3QgcHdvcmRfbCwgdWludDMyX3QgcHdvcmRfaCk7CisKKy8qKgorICogXGJyaWVmIFByb2dyYW0gT1RQIHZpYSBETUEuCisgKgorICogXHBhcmFtIFtpbl0gcF9kYXRhICAgIFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkYXRhIGluIFJBTS4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX29mZnNldCBDZWxsIG9mZnNldCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFxwYXJhbSBbaW5dIGNlbGxfd29yZCAgIFdvcmQgaW5zaWRlIGNlbGwgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBccGFyYW0gW2luXSBudW1fb2Zfd29yZHMgVGhlIGFjdHVhbCBudW1iZXIgb2YgdGhlIHdvcmRzIHRvIGJlIHdyaXR0ZW4uIFRoZSBkcml2ZXIgd2lsbCB3cml0ZSB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbWludXMgMSB0byB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gc3BhcmVfcm93cyB0cnVlIHRvIGFjY2VzcyB0aGUgc3BhcmUgcm93cyBhcmVhLCBmYWxzZSB0byBhY2Nlc3Mgbm9ybWFsIG1lbW9yeSBjZWxsCisgKgorICogXHJldHVybiB0cnVlIGZvciBzdWNjZXNzLCBmYWxzZSBmb3IgZmFpbHVyZSAodGhlIHByb2dyYW1taW5nIHNob3VsZCBiZSByZXRyaWVkIG9yIGZpeGVkISkKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCitib29sIGh3X290cGNfZG1hX3Byb2coY29uc3QgdWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpOworCisvKioKKyAqIFxicmllZiBSZWFkIE9UUCB2aWEgRE1BLgorICoKKyAqIFxwYXJhbSBbaW5dIHBfZGF0YSAgICBUaGUgYWRkcmVzcyBpbiBSQU0gdG8gd3JpdGUgdGhlIGRhdGEgdG8uCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgQ2VsbCBvZmZzZXQgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX3dvcmQgICBXb3JkIGluc2lkZSBjZWxsIHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gbnVtX29mX3dvcmRzIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHRoZSB3b3JkcyB0byBiZSByZWFkLiBUaGUgZHJpdmVyIHdpbGwgd3JpdGUgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG1pbnVzIDEgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHNwYXJlX3Jvd3MgdHJ1ZSB0byBhY2Nlc3MgdGhlIHNwYXJlIHJvd3MgYXJlYSwgZmFsc2UgdG8gYWNjZXNzIG5vcm1hbCBtZW1vcnkgY2VsbAorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFuZCB0aGUgbW9kZSBtdXN0CisgKiAgICAgICAgICBiZSBTVEJZLiAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK3ZvaWQgaHdfb3RwY19kbWFfcmVhZCh1aW50MzJfdCAqcF9kYXRhLCB1aW50MzJfdCBjZWxsX29mZnNldCwgSFdfT1RQQ19XT1JEIGNlbGxfd29yZCwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fb2Zfd29yZHMsIGJvb2wgc3BhcmVfcm93cyk7CisKKy8qKgorICogXGJyaWVmIFByb2dyYW0gT1RQIHZpYSBGSUZPIChBdXRvIG1vZGUpLgorICoKKyAqIFxwYXJhbSBbaW5dIHBfZGF0YSAgICBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGF0YSBpbiBSQU0uCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgQ2VsbCBvZmZzZXQgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX3dvcmQgICBXb3JkIGluc2lkZSBjZWxsIHRvIGJlIHByb2dyYW1tZWQuCisgKgorICogXHBhcmFtIFtpbl0gbnVtX29mX3dvcmRzIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHRoZSB3b3JkcyB0byBiZSB3cml0dGVuLiBUaGUgZHJpdmVyIHdpbGwgd3JpdGUgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG1pbnVzIDEgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHNwYXJlX3Jvd3MgdHJ1ZSB0byBhY2Nlc3MgdGhlIHNwYXJlIHJvd3MgYXJlYSwgZmFsc2UgdG8gYWNjZXNzIG5vcm1hbCBtZW1vcnkgY2VsbAorICoKKyAqIFxyZXR1cm4gdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmUKKyAqCisgKiBcd2FybmluZyBUaGUgaHdfb3RwY19pbml0KCkgYW5kIHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbmQgdGhlIG1vZGUgbXVzdAorICogICAgICAgICAgYmUgU1RCWS4gKE5vdGU6IHRoZSBod19vdHBjX3NldF9zcGVlZCgpIG11c3QgYmUgY2FsbGVkIG9ubHkgb25jZSB3aGVuIHRoZSBQTEwgaXMgdXNlZCBvcgorICogICAgICAgICAgZHVyaW5nIGVhY2ggY2xvY2sgc3dpdGNoIHdoZW4gYm90aCBQTEwgYW5kIFhUQUwxNiBhcmUgdXNlZCwgc2luY2UgdGhlIHJlZ2lzdGVyIGJpdHMgaXQKKyAqICAgICAgICAgIG1vZGlmaWVzIGFyZSByZXRhaW5lZC4pCisgKgorICovCitib29sIGh3X290cGNfZmlmb19wcm9nKGNvbnN0IHVpbnQzMl90ICpwX2RhdGEsIHVpbnQzMl90IGNlbGxfb2Zmc2V0LCBIV19PVFBDX1dPUkQgY2VsbF93b3JkLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9vZl93b3JkcywgYm9vbCBzcGFyZV9yb3dzKTsKKworLyoqCisgKiBcYnJpZWYgUmVhZCBPVFAgdmlhIEZJRk8uCisgKgorICogXHBhcmFtIFtpbl0gcF9kYXRhICAgIFRoZSBhZGRyZXNzIGluIFJBTSB0byB3cml0ZSB0aGUgZGF0YSB0by4KKyAqCisgKiBccGFyYW0gW2luXSBjZWxsX29mZnNldCBDZWxsIG9mZnNldCB0byBiZSBwcm9ncmFtbWVkLgorICoKKyAqIFxwYXJhbSBbaW5dIGNlbGxfd29yZCAgIFdvcmQgaW5zaWRlIGNlbGwgdG8gYmUgcHJvZ3JhbW1lZC4KKyAqCisgKiBccGFyYW0gW2luXSBudW1fb2Zfd29yZHMgVGhlIGFjdHVhbCBudW1iZXIgb2YgdGhlIHdvcmRzIHRvIGJlIHJlYWQuIFRoZSBkcml2ZXIgd2lsbCB3cml0ZSB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbWludXMgMSB0byB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gc3BhcmVfcm93cyB0cnVlIHRvIGFjY2VzcyB0aGUgc3BhcmUgcm93cyBhcmVhLCBmYWxzZSB0byBhY2Nlc3Mgbm9ybWFsIG1lbW9yeSBjZWxsCisgKgorICogXHJldHVybiB0cnVlIGZvciBzdWNjZXNzLCBmYWxzZSBmb3IgZmFpbHVyZQorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFuZCB0aGUgbW9kZSBtdXN0CisgKiAgICAgICAgICBiZSBTVEJZLiAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK2Jvb2wgaHdfb3RwY19maWZvX3JlYWQodWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpOworCisvKioKKyAqIFxicmllZiBQcmVwYXJlIE9UUEMgdG8gZXhlY3V0ZSBhbiBPVFAgY29weSBhZnRlciB3YWtldXAuCisgKgorICogXHBhcmFtIFtpbl0gbnVtX29mX2J5dGVzIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHRoZSBieXRlcyB0byBiZSBjb3BpZWQuIFRoZSBkcml2ZXIgd2lsbCB3cml0ZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXIgdmFsdWUgdG8gdGhlIHNwZWNpZmljIHJlZ2lzdGVyLgorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFuZCB0aGUgbW9kZSBtdXN0CisgKiAgICAgICAgICBiZSBTVEJZLiAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK3ZvaWQgaHdfb3RwY19wcmVwYXJlKHVpbnQzMl90IG51bV9vZl9ieXRlcyk7CisKKy8qKgorICogXGJyaWVmIENhbmNlbCBhbnkgcHJldmlvdXMgcHJlcGFyYXRpb25zIG9mIHRoZSBPVFBDIGZvciBleGVjdXRpbmcgYW4gT1RQIGNvcHkgYWZ0ZXIgd2FrZXVwLgorICoKKyAqIFx3YXJuaW5nIFRoZSBod19vdHBjX2luaXQoKSBhbmQgdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFuZCB0aGUgbW9kZSBtdXN0CisgKiAgICAgICAgICBiZSBTVEJZLiAoTm90ZTogdGhlIGh3X290cGNfc2V0X3NwZWVkKCkgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIHdoZW4gdGhlIFBMTCBpcyB1c2VkIG9yCisgKiAgICAgICAgICBkdXJpbmcgZWFjaCBjbG9jayBzd2l0Y2ggd2hlbiBib3RoIFBMTCBhbmQgWFRBTDE2IGFyZSB1c2VkLCBzaW5jZSB0aGUgcmVnaXN0ZXIgYml0cyBpdAorICogICAgICAgICAgbW9kaWZpZXMgYXJlIHJldGFpbmVkLikKKyAqCisgKi8KK3ZvaWQgaHdfb3RwY19jYW5jZWxfcHJlcGFyZSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IGNlbGwgbWVtb3J5IGFkZHJlc3MKKyAqCisgKiBSZXR1cm5zIG1hcHBlZCBtZW1vcnkgYWRkcmVzcyBmb3IgZ2l2ZW4gY2VsbCwgY2FuIGJlIHVzZWQgZm9yIGUuZy4gbWFudWFsIHJlYWRpbmcuCisgKgorICogXHBhcmFtIFtpbl0gY2VsbF9vZmZzZXQgY2VsbCBvZmZzZXQKKyAqCisgKiBccmV0dXJuIGNlbGwgbWVtb3J5IGFkZHJlc3MKKyAqCisgKiBcc2EgaHdfb3RwY19tYW51YWxfcmVhZF9vbgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkICpod19vdHBjX2NlbGxfdG9fbWVtKHVpbnQzMl90IGNlbGxfb2Zmc2V0KQoreworICAgICAgICByZXR1cm4gKHZvaWQgKikgKE1FTU9SWV9PVFBfQkFTRSArIChjZWxsX29mZnNldCA8PCAzKSk7IC8vIGNlbGwgc2l6ZSBpcyA4IGJ5dGVzCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRFU1QgRlVOQ1RJT05BTElUWQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioKKyAqIFxicmllZiBFeGVjdXRpb24gb2YgdGhlIEJMQU5LIHRlc3QuCisgKgorICogXHJldHVybiBUaGUgdGVzdCByZXN1bHQuCisgKiAgICAgICAgIDx1bD4KKyAqICAgICAgICAgICAgIDxsaT4gMCwgaWYgdGhlIHRlc3Qgc3VjY2VlZGVkCisgKiAgICAgICAgICAgICA8bGk+IDEsIGlmIHRoZSB0ZXN0IDEgZmFpbGVkCisgKiAgICAgICAgIDwvdWw+CisgKgorICovCitpbnQgaHdfb3RwY19ibGFuayh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgRXhlY3V0aW9uIG9mIHRoZSBUREVDIHRlc3QuCisgKgorICogXHJldHVybiBUaGUgdGVzdCByZXN1bHQuCisgKiAgICAgICAgIDx1bD4KKyAqICAgICAgICAgICAgIDxsaT4gMCwgaWYgdGhlIHRlc3Qgc3VjY2VlZGVkCisgKiAgICAgICAgICAgICA8bGk+IDEsIGlmIHRoZSB0ZXN0IDEgZmFpbGVkCisgKiAgICAgICAgIDwvdWw+CisgKgorICovCitpbnQgaHdfb3RwY190ZGVjKHZvaWQpOworCisvKioKKyAqIFxicmllZiBFeGVjdXRpb24gb2YgdGhlIFRXUiB0ZXN0LgorICoKKyAqIFxyZXR1cm4gVGhlIHRlc3QgcmVzdWx0LgorICogICAgICAgICA8dWw+CisgKiAgICAgICAgICAgICA8bGk+IDAsIGlmIHRoZSB0ZXN0IHN1Y2NlZWRlZAorICogICAgICAgICAgICAgPGxpPiAxLCBpZiB0aGUgdGVzdCAxIGZhaWxlZAorICogICAgICAgICA8L3VsPgorICoKKyAqLworaW50IGh3X290cGNfdHdyKHZvaWQpOworCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX09UUEMgKi8KKworI2VuZGlmIC8qIEhXX09UUENfSF8gKi8KKworLyoqCitcfQorXH0KK1x9CisqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19xc3BpLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3FzcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWU5NjdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od19xc3BpLmgKQEAgLTAsMCArMSwxMjAzIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBRU1BJCisgKiBceworICogXGJyaWVmIFFTUEkgRmxhc2ggTWVtb3J5IENvbnRyb2xsZXIKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3FzcGkuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIFFTUEkgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX1FTUElfSF8KKyNkZWZpbmUgSFdfUVNQSV9IXworCisjaWYgZGdfY29uZmlnVVNFX0hXX1FTUEkKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbWFzayBvZiBhIGZpZWxkIG9mIGFuIFFTUElDIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gYWNjZXNzCisgKgorICovCisjZGVmaW5lIEhXX1FTUElDX1JFR19GSUVMRF9NQVNLKHJlZywgZmllbGQpIFwKKyAgICAgICAgKFFTUElDX1FTUElDXyMjcmVnIyNfUkVHXyMjUVNQSUNfIyNmaWVsZCMjX01zaykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiaXQgcG9zaXRpb24gb2YgYSBmaWVsZCBvZiBhbiBRU1BJQyByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19RU1BJQ19SRUdfRklFTERfUE9TKHJlZywgZmllbGQpIFwKKyAgICAgICAgKFFTUElDX1FTUElDXyMjcmVnIyNfUkVHXyMjUVNQSUNfIyNmaWVsZCMjX1BvcykKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGFuIFFTUElDIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZmllbGQKKyAqCisgKi8KKyNkZWZpbmUgSFdfUVNQSUNfUkVHX0dFVEYocmVnLCBmaWVsZCkgXAorICAgICAgICAoKFFTUElDLT5RU1BJQ18jI3JlZyMjX1JFRyAmIChRU1BJQ19RU1BJQ18jI3JlZyMjX1JFR18jI1FTUElDXyMjZmllbGQjI19Nc2spKSA+PiAoUVNQSUNfUVNQSUNfIyNyZWcjI19SRUdfIyNRU1BJQ18jI2ZpZWxkIyNfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGFuIFFTUElDIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqIFxwYXJhbSBbaW5dIG5ld192YWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlCisgKgorICovCisjZGVmaW5lIEhXX1FTUElDX1JFR19TRVRGKHJlZywgZmllbGQsIG5ld192YWwpIFwKKyAgICAgICAgUVNQSUMtPlFTUElDXyMjcmVnIyNfUkVHID0gKChRU1BJQy0+UVNQSUNfIyNyZWcjI19SRUcgJiB+KFFTUElDX1FTUElDXyMjcmVnIyNfUkVHXyMjUVNQSUNfIyNmaWVsZCMjX01zaykpIHwgXAorICAgICAgICAoKFFTUElDX1FTUElDXyMjcmVnIyNfUkVHXyMjUVNQSUNfIyNmaWVsZCMjX01zaykgJiAoKG5ld192YWwpIDw8IChRU1BJQ19RU1BJQ18jI3JlZyMjX1JFR18jI1FTUElDXyMjZmllbGQjI19Qb3MpKSkpCisKKworZXh0ZXJuIHVpbnQ4X3QgZHVtbXlfbnVtW107CisKKy8qCisgKiBFTlVNRVJBVElPTiBERUZJTklUSU9OUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoqCisgKiBcYnJpZWYgQnVzIG1vZGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1FTUElfQlVTX01PREVfU0lOR0xFLCAgIC8qKjwgQnVzIG1vZGUgaW4gc2luZ2xlIG1vZGUgKi8KKyAgICAgICAgSFdfUVNQSV9CVVNfTU9ERV9EVUFMLCAgICAgLyoqPCBCdXMgbW9kZSBpbiBkdWFsIG1vZGUgKi8KKyAgICAgICAgSFdfUVNQSV9CVVNfTU9ERV9RVUFEICAgICAgLyoqPCBCdXMgbW9kZSBpbiBxdWFkIG1vZGUgKi8KK30gSFdfUVNQSV9CVVNfTU9ERTsKKworLyoqCisgKiBcYnJpZWYgRmxhc2ggbWVtb3J5IGFkZHJlc3Mgc2l6ZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9BRERSX1NJWkVfMjQsICAgICAgLyoqPCBRU1BJIGZsYXNoIG1lbW9yeSB1c2VzIDI0IGJpdHMgYWRkcmVzcyAqLworICAgICAgICBIV19RU1BJX0FERFJfU0laRV8zMiAgICAgICAvKio8IFFTUEkgZmxhc2ggbWVtb3J5IHVzZXMgMzIgYml0cyBhZGRyZXNzICovCit9IEhXX1FTUElfQUREUl9TSVpFOworCisvKioKKyAqIFxicmllZiBJZGxlIGNsb2NrIHN0YXRlCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19RU1BJX1BPTF9MT1cgPSAwLCAgICAgICAgLyoqPCBTUEkgY2xvY2sgd2lsbCBiZSBsb3cgYXQgaWRsZSAqLworICAgICAgICBIV19RU1BJX1BPTF9ISUdIID0gMSAgICAgICAgLyoqPCBTUEkgY2xvY2sgd2lsbCBiZSBoaWdoIGF0IGlkbGUgKi8KK30gSFdfUVNQSV9QT0w7CisKKy8qKgorICogXGJyaWVmIFR5cGUgb2YgUVNQSV9DTEsgZWRnZSBmb3Igc2FtcGxpbmcgcmVjZWl2ZWQgZGF0YQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9TQU1QTElOR19FREdFX1BPU0lUSVZFID0gMCwgICAgICAgIC8qKjwgU2FtcGxlIHRoZSByZWNlaXZlZCBkYXRhIHdpdGggdGhlIHBvc2l0aXZlIGVkZ2Ugb2YgdGhlIFFTUElfU0NLICovCisgICAgICAgIEhXX1FTUElfU0FNUExJTkdfRURHRV9ORUdBVElWRSA9IDEgICAgICAgICAvKio8IFNhbXBsZSB0aGUgcmVjZWl2ZWQgZGF0YSB3aXRoIHRoZSBuZWdhdGl2ZSBlZGdlIG9mIHRoZSBRU1BJX1NDSyAqLworfSBIV19RU1BJX1NBTVBMSU5HX0VER0U7CisKKy8qKgorICogXGJyaWVmIFNlbGVjdGVkIGRhdGEgc2l6ZSBvZiBhIHdyYXBwaW5nIGJ1cnN0CisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19RU1BJX1dSQVBfU0laRV84QklUUyA9IDAsICAgICAgIC8qKjwgQnl0ZSBhY2Nlc3MgKDgtYml0cykgKi8KKyAgICAgICAgSFdfUVNQSV9XUkFQX1NJWkVfMTZCSVRTID0gMSwgICAgICAvKio8IEhhbGYgd29yZCBhY2Nlc3MgKDgtYml0cykgKi8KKyAgICAgICAgSFdfUVNQSV9XUkFQX1NJWkVfMzJCSVRTID0gMiwgICAgICAvKio8IFdvcmQgYWNjZXNzICg4LWJpdHMpICovCit9IEhXX1FTUElfV1JBUF9TSVpFOworCisvKioKKyAqIFxicmllZiBTZWxlY3RlZCBkYXRhIGxlbmd0aCBvZiBhIHdyYXBwaW5nIGJ1cnN0CisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19RU1BJX1dSQVBfTEVOXzRCRUFUID0gMCwgICAgICAgIC8qKjwgNCBiZWF0IHdyYXBwaW5nIGJ1cnN0ICovCisgICAgICAgIEhXX1FTUElfV1JBUF9MRU5fOEJFQVQgPSAxLCAgICAgICAgLyoqPCA4IGJlYXQgd3JhcHBpbmcgYnVyc3QgKi8KKyAgICAgICAgSFdfUVNQSV9XUkFQX0xFTl8xNkJFQVQgPSAyLCAgICAgICAvKio8IDE2IGJlYXQgd3JhcHBpbmcgYnVyc3QgKi8KK30gSFdfUVNQSV9XUkFQX0xFTjsKKworLyoqCisgKiBcYnJpZWYgU2l6ZSBvZiBCdXJzdCBCcmVhayBTZXF1ZW5jZQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9CUkVBS19TRVFfU0laRV8xQiA9IDAsICAgICAvKio8IE9uZSBieXRlICovCisgICAgICAgIEhXX1FTUElfQlJFQUtfU0VRX1NJWkVfMkIgPSAxICAgICAgLyoqPCBUd28gYnl0ZXMgKi8KK30gSFdfUVNQSV9CUkVBS19TRVFfU0laRTsKKworLyoqCisgKiBcYnJpZWYgUVNQSSBwYWRzIHNsZXcgcmF0ZSBjb250cm9sCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19RU1BJX1NMRVdfUkFURV8wLCAgICAgICAvKio8IHh4IFYvbnMgKHdlYWspICovCisgICAgICAgIEhXX1FTUElfU0xFV19SQVRFXzEsICAgICAgIC8qKjwgeHggVi9ucyAqLworICAgICAgICBIV19RU1BJX1NMRVdfUkFURV8yLCAgICAgICAvKio8IHh4IFYvbnMgKi8KKyAgICAgICAgSFdfUVNQSV9TTEVXX1JBVEVfMyAgICAgICAgLyoqPCB4eCBWL25zIChzdHJvbmcpICovCit9IEhXX1FTUElfU0xFV19SQVRFOworCisvKioKKyAqIFxicmllZiBRU1BJIHBhZHMgZHJpdmUgY3VycmVudAorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9EUklWRV9DVVJSRU5UXzQsICAgLyoqPCA0IG1BICovCisgICAgICAgIEhXX1FTUElfRFJJVkVfQ1VSUkVOVF84LCAgIC8qKjwgOCBtQSAqLworICAgICAgICBIV19RU1BJX0RSSVZFX0NVUlJFTlRfMTIsICAvKio8IDEyIG1BICovCisgICAgICAgIEhXX1FTUElfRFJJVkVfQ1VSUkVOVF8xNiwgIC8qKjwgMTYgbUEgKi8KK30gSFdfUVNQSV9EUklWRV9DVVJSRU5UOworCisvKioKKyAqIFxicmllZiBRU1BJIGNsb2NrIGRpdmlkZXIgc2V0dGluZworICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfUVNQSV9ESVZfMSA9IDAsICAgICAgLyoqPCBkaXZpZGUgYnkgMSAqLworICAgICAgICBIV19RU1BJX0RJVl8yID0gMSwgICAgICAvKio8IGRpdmlkZSBieSAyICovCisgICAgICAgIEhXX1FTUElfRElWXzQgPSAyLCAgICAgIC8qKjwgZGl2aWRlIGJ5IDQgKi8KKyAgICAgICAgSFdfUVNQSV9ESVZfOCA9IDMgICAgICAgLyoqPCBkaXZpZGUgYnkgOCAqLworfSBIV19RU1BJX0RJVjsKKworLyoqCisgKiBcYnJpZWYgUVNQSSBjb25maWd1cmF0aW9uCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIEhXX1FTUElfQUREUl9TSVpFIGFkZHJlc3Nfc2l6ZTsKKyAgICAgICAgSFdfUVNQSV9QT0wgaWRsZV9jbG9jazsKKyAgICAgICAgSFdfUVNQSV9TQU1QTElOR19FREdFIHNhbXBsaW5nX2VkZ2U7Cit9IHFzcGlfY29uZmlnOworCisvKioKKyAqIFxicmllZiBFbmFibGUgQ1Mgb24gUVNQSSBidXMKKyAqCisgKiBVc2UgdGhpcyBpbiBtYW51YWwgbW9kZS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2NzX2VuYWJsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2NzX2VuYWJsZSh2b2lkKQoreworICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTEJVU19SRUcgPSBRU1BJQ19RU1BJQ19DVFJMQlVTX1JFR19RU1BJQ19FTl9DU19Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgQ1Mgb24gUVNQSSBidXMKKyAqCisgKiBVc2UgdGhpcyBpbiBtYW51YWwgbW9kZS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2NzX2Rpc2FibGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9jc19kaXNhYmxlKHZvaWQpCit7CisgICAgICAgIFFTUElDLT5RU1BJQ19DVFJMQlVTX1JFRyA9IFFTUElDX1FTUElDX0NUUkxCVVNfUkVHX1FTUElDX0RJU19DU19Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIFNlbGVjdCBRU1BJIGJ1cyBtb2RlCisgKgorICogVXNlIHRoaXMgaW4gbWFudWFsIG1vZGUuCisgKgorICogXG5vdGUgU2VsZWN0aW5nIFFVQUQgbW9kZSB3aWxsIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHBpbnMgSU8yIGFuZCBJTzMgdG8gaW5wdXQuCisgKgorICogXHBhcmFtIFtpbl0gbW9kZSBzZWxlY3RzIHNpbmdsZS9kdWFsL3F1YWQgbW9kZSBmb3IgUVNQSSBidXMKKyAqCisgKi8KK3ZvaWQgaHdfcXNwaV9zZXRfYnVzX21vZGUoSFdfUVNQSV9CVVNfTU9ERSBtb2RlKTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaXMgU1BJIEJ1cyBpcyBidXN5CisgKgorICogXHJldHVybiAwIC0gU1BJIEJ1cyBpcyBpZGxlLAorICogICAgICAgICAxIC0gU1BJIEJ1cyBpcyBhY3RpdmUuIFJlYWREYXRhLCBXcml0ZURhdGEgb3IgRHVtbXlEYXRhIGFjdGl2aXR5IGlzIGluIHByb2dyZXNzCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9pc19idXN5KHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfaXNfYnVzeSh2b2lkKQoreworICAgICAgICByZXR1cm4gKHVpbnQ4X3QpIFFTUElDLT5RU1BJQ19TVEFUVVNfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSAzMiBiaXRzIHJlYWQgdHJhbnNmZXIgb24gUVNQSSBidXMKKyAqCisgKiBUaGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCB1c2luZyB0aGUgc2VsZWN0ZWQgbW9kZSBvZiB0aGUgU1BJIGJ1cyAoU1BJLCBEdWFsCisgKiBTUEksIFF1YWQgU1BJKS4KKyAqCisgKiBccmV0dXJuIGRhdGEgcmVhZCBkdXJpbmcgcmVhZCB0cmFuc2ZlcgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod19xc3BpX3JlYWQzMih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfcXNwaV9yZWFkMzIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFFTUElDLT5RU1BJQ19SRUFEREFUQV9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIDE2IGJpdHMgcmVhZCB0cmFuc2ZlciBvbiBRU1BJIGJ1cworICoKKyAqIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHVzaW5nIHRoZSBzZWxlY3RlZCBtb2RlIG9mIHRoZSBTUEkgYnVzIChTUEksIER1YWwKKyAqIFNQSSwgUXVhZCBTUEkpLgorICoKKyAqIFxyZXR1cm4gZGF0YSByZWFkIGR1cmluZyByZWFkIHRyYW5zZmVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X3FzcGlfcmVhZDE2KHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50MTZfdCBod19xc3BpX3JlYWQxNih2b2lkKQoreworICAgICAgICByZXR1cm4gKigodm9sYXRpbGUgdWludDE2X3QgKikgJihRU1BJQy0+UVNQSUNfUkVBRERBVEFfUkVHKSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIDggYml0cyByZWFkIHRyYW5zZmVyIG9uIFFTUEkgYnVzCisgKgorICogVGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdXNpbmcgdGhlIHNlbGVjdGVkIG1vZGUgb2YgdGhlIFNQSSBidXMgKFNQSSwgRHVhbAorICogU1BJLCBRdWFkIFNQSSkuCisgKgorICogXHJldHVybiBkYXRhIHJlYWQgZHVyaW5nIHJlYWQgdHJhbnNmZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX3JlYWQ4KHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfcmVhZDgodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQ4X3QgKikgJihRU1BJQy0+UVNQSUNfUkVBRERBVEFfUkVHKSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIDMyIGJpdHMgd3JpdGUgdHJhbnNmZXIgb24gUVNQSSBidXMKKyAqCisgKiBUaGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCB1c2luZyB0aGUgc2VsZWN0ZWQgbW9kZSBvZiB0aGUgU1BJIGJ1cyAoU1BJLCBEdWFsCisgKiBTUEksIFF1YWQgU1BJKS4KKyAqCisgKiBwYXJhbSBbaW5dIGRhdGEgZGF0YSB0byB0cmFuc2ZlcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfd3JpdGUzMih1aW50MzJfdCBkYXRhKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3dyaXRlMzIodWludDMyX3QgZGF0YSkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX1dSSVRFREFUQV9SRUcgPSBkYXRhOworfQorCisvKioKKyAqIFxicmllZiBHZW5lcmF0ZSAxNiBiaXRzIHdyaXRlIHRyYW5zZmVyIG9uIFFTUEkgYnVzCisgKgorICogVGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdXNpbmcgdGhlIHNlbGVjdGVkIG1vZGUgb2YgdGhlIFNQSSBidXMgKFNQSSwgRHVhbAorICogU1BJLCBRdWFkIFNQSSkuCisgKgorICogcGFyYW0gW2luXSBkYXRhIGRhdGEgdG8gdHJhbnNmZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3dyaXRlMTYodWludDE2X3QgZGF0YSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV93cml0ZTE2KHVpbnQxNl90IGRhdGEpCit7CisgICAgICAgICooKHZvbGF0aWxlIHVpbnQxNl90ICopICYoUVNQSUMtPlFTUElDX1dSSVRFREFUQV9SRUcpKSA9IGRhdGE7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIDggYml0cyB3cml0ZSB0cmFuc2ZlciBvbiBRU1BJIGJ1cworICoKKyAqIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHVzaW5nIHRoZSBzZWxlY3RlZCBtb2RlIG9mIHRoZSBTUEkgYnVzIChTUEksIER1YWwKKyAqIFNQSSwgUXVhZCBTUEkpLgorICoKKyAqIHBhcmFtIFtpbl0gZGF0YSBkYXRhIHRvIHRyYW5zZmVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV93cml0ZTgodWludDhfdCBkYXRhKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3dyaXRlOCh1aW50OF90IGRhdGEpCit7CisgICAgICAgICooKHZvbGF0aWxlIHVpbnQ4X3QgKikgJihRU1BJQy0+UVNQSUNfV1JJVEVEQVRBX1JFRykpID0gZGF0YTsKK30KKworLyoqCisgKiBcYnJpZWYgR2VuZXJhdGUgYSBjbG9jayBwdWxzZXMgdG8gdGhlIFNQSSBidXMgZm9yIDMyIGJpdHMgdHJhbnNmZXIKKyAqCisgKiBEdXJpbmcgdGhpcyBhY3Rpdml0eSBpbiB0aGUgU1BJIGJ1cywgdGhlIFFTUElfSU94IGRhdGEgcGFkcyBhcmUgaW4gaGkteiBzdGF0ZS4KKyAqIE51bWJlciBvZiBwdWxzZXMgZGVwZW5kcyBvbiBzZWxlY3RlZCBtb2RlIG9mIHRoZSBTUEkgYnVzIChTUEksIER1YWwgU1BJLCBRdWFkIFNQSSkuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kdW1teTMyKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZHVtbXkzMih2b2lkKQoreworICAgICAgICBRU1BJQy0+UVNQSUNfRFVNTVlEQVRBX1JFRyA9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIEdlbmVyYXRlIGEgY2xvY2sgcHVsc2VzIHRvIHRoZSBTUEkgYnVzIGZvciAxNiBiaXRzIHRyYW5zZmVyCisgKgorICogRHVyaW5nIHRoaXMgYWN0aXZpdHkgaW4gdGhlIFNQSSBidXMsIHRoZSBRU1BJX0lPeCBkYXRhIHBhZHMgYXJlIGluIGhpLXogc3RhdGUuCisgKiBOdW1iZXIgb2YgcHVsc2VzIGRlcGVuZHMgb24gc2VsZWN0ZWQgbW9kZSBvZiB0aGUgU1BJIGJ1cyAoU1BJLCBEdWFsIFNQSSwgUXVhZCBTUEkpLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZHVtbXkxNih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2R1bW15MTYodm9pZCkKK3sKKyAgICAgICAgKigodm9sYXRpbGUgdWludDE2X3QgKikgJihRU1BJQy0+UVNQSUNfRFVNTVlEQVRBX1JFRykpID0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgR2VuZXJhdGUgYSBjbG9jayBwdWxzZXMgdG8gdGhlIFNQSSBidXMgZm9yIDggYml0cyB0cmFuc2ZlcgorICoKKyAqIER1cmluZyB0aGlzIGFjdGl2aXR5IGluIHRoZSBTUEkgYnVzLCB0aGUgUVNQSV9JT3ggZGF0YSBwYWRzIGFyZSBpbiBoaS16IHN0YXRlLgorICogTnVtYmVyIG9mIHB1bHNlcyBkZXBlbmRzIG9uIHNlbGVjdGVkIG1vZGUgb2YgdGhlIFNQSSBidXMgKFNQSSwgRHVhbCBTUEksIFF1YWQgU1BJKS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2R1bW15OCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2R1bW15OCh2b2lkKQoreworICAgICAgICAqKCh2b2xhdGlsZSB1aW50OF90ICopICYoUVNQSUMtPlFTUElDX0RVTU1ZREFUQV9SRUcpKSA9IDA7Cit9CisKKy8qKgorICogXGJyaWVmIFNwZWNpZmllcyBhZGRyZXNzIHdpdGggdGhhdCBmbGFzaCBtZW1vcnkgdXNlcworICoKKyAqIFRoZSBjb250cm9sbGVyIHVzZXMgMzIgb2YgMjQgYml0cyBmb3IgYWRkcmVzcyBkdXJpbmcgQXV0byBtb2RlIHRyYW5zZmVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHNpemUgc2VsZWN0cyAzMiBvciAyNCBhZGRyZXNzIHNpemUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9hZGRyZXNzX3NpemUoSFdfUVNQSV9BRERSX1NJWkUgc2l6ZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfYWRkcmVzc19zaXplKEhXX1FTUElfQUREUl9TSVpFIHNpemUpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBVU0VfMzJCQSwgKHNpemUgPT0gSFdfUVNQSV9BRERSX1NJWkVfMzIgPyAxIDogMCkpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgYWRkcmVzcyBzaXplIHRoYXQgZmxhc2ggbWVtb3J5IHVzZXMKKyAqCisgKiBUaGUgY29udHJvbGxlciB1c2VzIDMyIG9mIDI0IGJpdHMgZm9yIGFkZHJlc3MgZHVyaW5nIEF1dG8gbW9kZSB0cmFuc2Zlci4KKyAqCisgKiBccmV0dXJuIGN1cnJlbnRseSBzZWxlY3RlZCBhZGRyZXNzIHNpemUKKyAqCisgKiBcc2EgaHdfcXNwaV9zZXRfYWRkcmVzc19zaXplCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1FTUElfQUREUl9TSVpFIGh3X3FzcGlfZ2V0X2FkZHJlc3Nfc2l6ZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgSFdfUVNQSV9BRERSX1NJWkUgaHdfcXNwaV9nZXRfYWRkcmVzc19zaXplKHZvaWQpCit7CisgICAgICAgIHJldHVybiAoSFdfUVNQSV9BRERSX1NJWkUpIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBVU0VfMzJCQSk7Cit9CisKKy8qKgorICogXGJyaWVmIENvbnRyb2xzIHRyYW5zbGF0aW9uIG9mIGJ1cnN0IGFjY2Vzc2VzIGZvcm0gQU1CQSBidXMgdG8gdGhlIFFTUEkgYnVzCisgKgorICogXHBhcmFtIFtpbl0gZm9yY2UgMCAtIGNvbnRyb2xsZXIgdHJhbnNsYXRlcyBhIGJ1cnN0IGFjY2VzcyBvbiB0aGUgQU1CQSBidXMKKyAqICAgICAgICAgICAgICAgICAgICAgICB0byBhIGJ1cnN0IGFjY2VzcyBvbiB0aGUgUVNQSSBidXMuIFRoYXQgcmVzdWx0cyB0byBhIG1pbmltdW0KKyAqICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kL2FkZHJlc3MgcGhhc2VzLCBidXQgdGhlIFFTUElfQ1MgaXMgbG93IGZvciBhcworICogICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXMgdGhlIGFjY2VzcyBvY2N1cmVzLAorICogICAgICAgICAgICAgICAgICAgMSAtIGNvbnRyb2xsZXIgd2lsbCBzcGxpdCBhIGJ1cnN0IGFjY2VzcyBvbiB0aGUgQU1CQSBidXMKKyAqICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHNpbmdsZSBhY2Nlc3NlcyBvbiB0aGUgcXNwaSBidXMuIFRoaXMgcmVzdWx0cyB0byBhIHNlcGFyYXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBjb21tYW5kIHRvIHRoZSBGTEFTSCBtZW1vcnkgZm9yZWFjaCBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQuIEEgNC1iZWF0IHdvcmQgaW5jcmVtZW50YWwgQU1CQSBhY2Nlc3Mgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAgIHNwbGl0IGludG8gNCBkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIHJlYWRpbmcgKGNvbW1hbmQvYWRkcmVzcy8KKyAqICAgICAgICAgICAgICAgICAgICAgICBleHRyYSBjbG9jay9yZWFkIGRhdGEpLiBRU1BJX0NTIHdpbGwgYmUgb25seSBoaWdoIHdoaWxlIGEgcXNwaQorICogICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyBvY2N1cmVzLiBUaGlzIHJlc3VsdHMgdG8gbG93ZXIgcG93ZXIgZGlzc2lwYXRpb24gd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgIHJlc3BlY3QgdG8gUVNQSUNfRk9SQ0VOU0VRX0VOPTAgYXQgY29zdCBvZiBwZXJmb3JtYW5jZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZm9yY2VfbnNlcSh1aW50OF90IGZvcmNlKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2ZvcmNlX25zZXEodWludDhfdCBmb3JjZSkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIEZPUkNFTlNFUV9FTiwgZm9yY2UpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvIG1vZGUgb24gUVNQSQorICoKKyAqIFxub3RlIFNlbGVjdGluZyBhdXRvIG1vZGUgd2hlbiBhbnkgY29tbWFuZCBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgaGFzIGNob3NlbgorICogUVVBRCBtb2RlIGZvciBhbnkgcGhhc2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBwaW5zIElPMiBhbmQgSU8zIHRvIGlucHV0LgorICoKKyAqIFxwYXJhbSBbaW5dIGF1dG9tb2RlIHRydWUgYXV0byBtb2RlIHNlbGVjdGVkLAorICogICAgICAgICAgICAgICAgICAgICAgZmFsc2UgbWFudWFsIG1vZGUgc2VsZWN0ZWQKKyAqCisgKiBcc2EgaHdfcXNwaV9zZXRfcmVhZF9pbnN0cnVjdGlvbgorICogXHNhIGh3X3FzcGlfc2V0X3JlYWRfc3RhdHVzX2luc3RydWN0aW9uCisgKiBcc2EgaHdfcXNwaV9zZXRfc3VzcGVuZF9yZXN1bWVfaW5zdHJ1Y3Rpb25zCisgKiBcc2EgaHdfcXNwaV9zZXRfd3JpdGVfZW5hYmxlX2luc3RydWN0aW9uCisgKiBcc2EgaHdfcXNwaV9zZXRfZXh0cmFfYnl0ZQorICogXHNhIGh3X3FzcGlfc2V0X2VyYXNlX2luc3RydWN0aW9uCisgKiBcc2EgaHdfcXNwaV9zZXRfYnJlYWtfc2VxdWVuY2UKKyAqCisgKi8KK3ZvaWQgaHdfcXNwaV9zZXRfYXV0b21vZGUoYm9vbCBhdXRvbW9kZSk7CisKKy8qKgorICogXGJyaWVmIFJlYWQgYXV0b21vZGUgc3RhdGUKKyAqCisgKiBccmV0dXJuIHRydWUgYXV0byBtb2RlIGlzIHNlbGVjdGVkLAorICogICAgICAgICBmYWxzZSBtYW51YWwgbW9kZSBpcyBzZWxlY3RlZAorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3FzcGlfZ2V0X2F1dG9tb2RlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSBib29sIGh3X3FzcGlfZ2V0X2F1dG9tb2RlKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19RU1BJQ19SRUdfR0VURihDVFJMTU9ERSwgQVVUT19NRCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCByZWFkIHBpcGUgY2xvY2sgZGVsYXkKKyAqCisgKiBccmV0dXJuIHJlYWQgcGlwZSBjbG9jayBkZWxheSByZWxhdGl2ZSB0byB0aGUgZmFsbGluZyBlZGdlIG9mIFFTUElfU0NLCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9nZXRfcmVhZF9waXBlX2Nsb2NrX2RlbGF5KHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X3JlYWRfcGlwZV9jbG9ja19kZWxheSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfUVNQSUNfUkVHX0dFVEYoQ1RSTE1PREUsIFBDTEtfTUQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgcmVhZCBwaXBlIGNsb2NrIGRlbGF5CisgKgorICogXHBhcmFtIFtpbl0gZGVsYXkgcmVhZCBwaXBlIGNsb2NrIGRlbGF5IHJlbGF0aXZlIHRvIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgUVNQSV9TQ0sKKyAqICAgICAgICAgICAgICAgICAgIHZhbHVlIHNob3VsZCBiZSBpbiByYW5nZSAwLi43CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfcmVhZF9waXBlX2Nsb2NrX2RlbGF5KHVpbnQ4X3QgZGVsYXkpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3JlYWRfcGlwZV9jbG9ja19kZWxheSh1aW50OF90IGRlbGF5KQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgUENMS19NRCwgZGVsYXkpOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiByZWFkIHBpcGUgaXMgZW5hYmxlZAorICoKKyAqIFxyZXR1cm4gMSBpZiByZWFkIHBpcGUgaXMgZW5hYmxlZCwgMCBvdGhlcndpc2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2lzX3JlYWRfcGlwZV9jbG9ja19lbmFibGVkKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfaXNfcmVhZF9waXBlX2Nsb2NrX2VuYWJsZWQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBSUElQRV9FTik7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSByZWFkIHBpcGUKKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGUgMSBlbmFibGUgcmVhZCBwaXBlLAorICogICAgICAgICAgICAgICAgICAgIDAgZGlzYWJsZSByZWFkIHBpcGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2VuYWJsZV9yZWFkcGlwZSh1aW50OF90IGVuYWJsZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9lbmFibGVfcmVhZHBpcGUodWludDhfdCBlbmFibGUpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBSUElQRV9FTiwgZW5hYmxlKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHJlYWQgc2FtcGxpbmcgZWRnZQorICoKKyAqIFxyZXR1cm4gdHlwZSBvZiBRU1BJX0NMSyBlZGdlIGZvciBzYW1wbGluZyByZWNlaXZlZCBkYXRhCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1FTUElfU0FNUExJTkdfRURHRSBod19xc3BpX2dldF9yZWFkX3NhbXBsaW5nX2VkZ2Uodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIEhXX1FTUElfU0FNUExJTkdfRURHRSBod19xc3BpX2dldF9yZWFkX3NhbXBsaW5nX2VkZ2Uodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBSWERfTkVHKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHJlYWQgc2FtcGxpbmcgZWRnZQorICoKKyAqIFxwYXJhbSBbaW5dIGVkZ2Ugc2V0cyB3aGV0aGVyIHJlYWQgc2FtcGxlcyBvciB0YWtlbiBvbiByaXNpbmcgb3IgZmFsbGluZyBlZGdlCisgKiAgICAgICAgICAgICAgICAgIG9mIFFTUElfU0NLCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfcmVhZF9zYW1wbGluZ19lZGdlKEhXX1FTUElfU0FNUExJTkdfRURHRSBlZGdlKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9yZWFkX3NhbXBsaW5nX2VkZ2UoSFdfUVNQSV9TQU1QTElOR19FREdFIGVkZ2UpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBSWERfTkVHLCBlZGdlKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgaHJlYWR5IHNpZ25hbCBpcyB1c2VkCisgKgorICogXHJldHVybiAwIC0gd2hlbiB3YWl0IHN0YXRlcyBhcmUgbm90IGFkZGVkIHZpYSBocmVhZHkgc2lnbmFsIGR1cmluZyBhY2Nlc3MgdG8KKyAqICAgICAgICAgICAgIFFTUElDX1dSSVRFREFUQSwgUVNQSUNfUkVBRERBVEEgYW5kIFFTUElDX0RVTU1ZREFUQSByZWdpc3RlcnMsCisgKiAgICAgICAgIDEgLSB3aGVuIHdhaXQgc3RhdGVzIGFyZSBhZGRlZCB2aWEgaHJlYWR5IHNpZ25hbCBkdXJpbmcgYWNjZXNzIHRvCisgKiAgICAgICAgICAgICBRU1BJQ19XUklURURBVEEsIFFTUElDX1JFQUREQVRBIGFuZCBRU1BJQ19EVU1NWURBVEEgcmVnaXN0ZXJzLgorICogICAgICAgICAgICAgSW4gdGhpcyBjYXNlIHJlYWQgcmVhZCBRU1BJX1NUQVRVUyByZWdpc3RlciB0byBjaGVjayB0aGUgZW5kIG9mCisgKiAgICAgICAgICAgICBhY3Rpdml0eSBhdCB0aGUgU1BJIGJ1cworICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfaXNfaHJlYWR5X2VuYWJsZWQodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9pc19ocmVhZHlfZW5hYmxlZCh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfUVNQSUNfUkVHX0dFVEYoQ1RSTE1PREUsIEhSRFlfTUQpOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUvZGlzYWJsZSBhZGRpbmcgd2FpdCBzdGF0ZXMgZHVyaW5nIHJlZ2lzdGVyIGFjY2VzcworICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSAwIC0gd2FpdCBzdGF0ZXMgd2lsbCBiZSBhZGRlZCBpbiBocmVhZHkgc2lnbmFsIGR1cmluZyBhY2Nlc3MgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgUVNQSUNfV1JJVEVEQVRBLCBRU1BJQ19SRUFEREFUQSBhbmQgUVNQSUNfRFVNTVlEQVRBIHJlZ2lzdGVycworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZW5hYmxlX2hyZWFkeSh1aW50OF90IGVuYWJsZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9lbmFibGVfaHJlYWR5KHVpbnQ4X3QgZW5hYmxlKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgSFJEWV9NRCwgZW5hYmxlKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGNsb2NrIG1vZGUKKyAqCisgKiBccmV0dXJuIDAgLSBTUEkgbW9kZSAwIGlzIHVzZWQgZm9yIFFTUElfQ0xLLCB0aGUgUVNQSV9TQ0sgaXMgbG93IHdoZW4gUVNQSV9DUyBpcyBoaWdoIChpZGxlKSwKKyAqICAgICAgICAgMSAtIFNQSSBtb2RlIDMgaXMgdXNlZCBmb3IgUVNQSV9DTEssIHRoZSBRU1BJX1NDSyBpcyBoaWdoIHdoZW4gUVNQSV9DUyBpcyBoaWdoIChpZGxlKQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2Nsb2NrX21vZGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9nZXRfY2xvY2tfbW9kZSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfUVNQSUNfUkVHX0dFVEYoQ1RSTE1PREUsIENMS19NRCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBjbG9jayBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gbW9kZSBIV19TUElfUE9MX0xPVyAtIFNQSSBtb2RlIDAgaXMgdXNlZCBmb3IgUVNQSV9DTEssCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGUgUVNQSV9TQ0sgaXMgbG93IHdoZW4gUVNQSV9DUyBpcyBoaWdoIChpZGxlKSwKKyAqICAgICAgICAgICAgICAgICAgSFdfU1BJX1BPTF9ISUdIIC0gU1BJIG1vZGUgMyBpcyB1c2VkIGZvciBRU1BJX0NMSywKKyAqICAgICAgICAgICAgICAgICAgICAgIFRoZSBRU1BJX1NDSyBpcyBoaWdoIHdoZW4gUVNQSV9DUyBpcyBoaWdoIChpZGxlKQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2Nsb2NrX21vZGUoSFdfUVNQSV9QT0wgbW9kZSkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfY2xvY2tfbW9kZShIV19RU1BJX1BPTCBtb2RlKQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgQ0xLX01ELCBtb2RlKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IElPMiBkaXJlY3Rpb24KKyAqCisgKiBccGFyYW0gW2luXSBvdXRwdXQgUVNQSV9JTzIgb3V0cHV0IGVuYWJsZS4gVXNlIHRoaXMgb25seSBpbiBTUEkgb3IgRHVhbCBTUEkKKyAqICAgICAgICAgICAgICAgICAgICBtb2RlIHRvIGNvbnRyb2wgL1dQIHNpZ25hbC4gV2hlbiB0aGUgQXV0byBNb2RlIGlzIHNlbGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBRVUFEIFNQSSBpcyB1c2VkLCBzZXQgdGhpcyB0byBmYWxzZS4KKyAqICAgICAgICAgICAgICAgICAgICBmYWxzZTogVGhlIFFTUElfSU8yIHBhZCBpcyBpbnB1dAorICogICAgICAgICAgICAgICAgICAgIHRydWU6IFRoZSBRU1BJX0lPMiBwYWQgaXMgb3V0cHV0CisgKgorICovCisjaWYgKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX0RPV04gPT0gMSkKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oInRleHRfcmV0YWluZWQiKSkpCisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzJfb3V0cHV0KGJvb2wgb3V0cHV0KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzJfb3V0cHV0KGJvb2wgb3V0cHV0KQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgSU8yX09FTiwgb3V0cHV0KTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IElPMyBkaXJlY3Rpb24KKyAqCisgKiBccGFyYW0gW2luXSBvdXRwdXQgVXNlIHRoaXMgb25seSBpbiBTUEkgb3IgRHVhbCBTUEkgbW9kZSB0byBjb250cm9sIC9IT0xEIHNpZ25hbC4KKyAqICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBBdXRvIE1vZGUgaXMgc2VsZWN0ZWQgYW5kIHRoZSBRVUFEIFNQSSBpcyB1c2VkLAorICogICAgICAgICAgICAgICAgICAgIHNldCB0aGlzIHRvIGZhbHNlLgorICogICAgICAgICAgICAgICAgICAgIGZhbHNlOiBUaGUgUVNQSV9JTzMgcGFkIGlzIGlucHV0LAorICogICAgICAgICAgICAgICAgICAgIHRydWU6IFRoZSBRU1BJX0lPMyBwYWQgaXMgb3V0cHV0CisgKgorICovCisjaWYgKGRnX2NvbmZpZ0ZMQVNIX1BPV0VSX0RPV04gPT0gMSkKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oInRleHRfcmV0YWluZWQiKSkpCisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzNfb3V0cHV0KGJvb2wgb3V0cHV0KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzNfb3V0cHV0KGJvb2wgb3V0cHV0KQoreworICAgICAgICBIV19RU1BJQ19SRUdfU0VURihDVFJMTU9ERSwgSU8zX09FTiwgb3V0cHV0KTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHN0YXRlIGZvciBJTzIgd2hlbiBpdCdzIGNvbmZpZ3VyZWQgYXMgb3V0cHV0CisgKgorICogXHBhcmFtIFtpbl0gdmFsIFFTUElfSU8yIHZhbHVlIHRvIHNldCAoMCBvciAxKQorICoKKyAqIFxzYSBod19xc3BpX3NldF9pbzJfZGlyZWN0aW9uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfaW8yKHVpbnQ4X3QgdmFsKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzIodWludDhfdCB2YWwpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKENUUkxNT0RFLCBJTzJfREFULCB2YWwpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgc3RhdGUgZm9yIElPMyB3aGVuIGl0J3MgY29uZmlndXJlZCBhcyBvdXRwdXQKKyAqCisgKiBccGFyYW0gW2luXSB2YWwgUVNQSV9JTzMgdmFsdWUgdG8gc2V0ICgwIG9yIDEpCisgKgorICogXHNhIGh3X3FzcGlfc2V0X2lvM19kaXJlY3Rpb24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9pbzModWludDhfdCB2YWwpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2lvMyh1aW50OF90IHZhbCkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIElPM19EQVQsIHZhbCk7Cit9CisKKy8qKgorICogXGJyaWVmIFJlYWQgc3RhdGUgb2YgSU8yIHdoZW4gbm90IGluIFFVQUQgbW9kZQorICoKKyAqIFxyZXR1cm4gdmFsdWUgb2YgSU8yIHBpbiAoMCBvciAxKQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2lvMih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod19xc3BpX2dldF9pbzIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1FTUElDX1JFR19HRVRGKENUUkxNT0RFLCBJTzJfREFUKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmVhZCBzdGF0ZSBvZiBJTzMgd2hlbiBub3QgaW4gUVVBRCBtb2RlCisgKgorICogXHJldHVybiB2YWx1ZSBvZiBJTzMgcGluICgwIG9yIDEpCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9nZXRfaW8zKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2lvMyh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfUVNQSUNfUkVHX0dFVEYoQ1RSTE1PREUsIElPM19EQVQpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgcmVhZCBpbnN0cnVjdGlvbnMgZm9yIFFTUEkgZmxhc2gKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgaW5zdHJ1Y3Rpb24gdG8gYmUgc2VudCB0byBmbGFzaCBtZW1vcnkgd2hlbiBkYXRhIGlzIHJlcXVlc3RlZAorICogb24gQUhCIGJ1cy4KKyAqCisgKiBccGFyYW0gW2luXSBpbnN0IGluc3RydWN0aW9uIGZvciBJbmNyZW1lbnRhbCBCdXJzdCBvciBTaW5nbGUgcmVhZCBhY2Nlc3MuCisgKiAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgdGhlIHNlbGVjdGVkIGluc3RydWN0aW9uIGF0IHRoZSBjYXNlcyBvZiBpbmNyZW1lbnRhbAorICogICAgICAgICAgICAgICAgICBidXJzdCBvciBzaW5nbGUgcmVhZCBhY2Nlc3MuIEFsc28gdGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gYSB3cmFwcGluZworICogICAgICAgICAgICAgICAgICBidXJzdCBpcyBub3Qgc3VwcG9ydGVkLgorICogXHBhcmFtIFtpbl0gc2VuZF9vbmNlIDAgLSB0cmFuc21pdCBpbnN0cnVjdGlvbiBhdCBhbnkgYnVyc3QgYWNjZXNzLAorICogICAgICAgICAgICAgICAgICAgICAgIDEgLSB0cmFuc21pdCBpbnN0cnVjdGlvbiBvbmx5IGluIHRoZSBmaXJzdCBhY2Nlc3MgYWZ0ZXIgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIG9mIEF1dG8gTW9kZS4KKyAqIFxwYXJhbSBbaW5dIGR1bW15X2NvdW50IG51bWJlciBvZiBkdW1teSBieXRlcyB0byBzZW5kIDAuLjQKKyAqIFxwYXJhbSBbaW5dIGluc3RfcGhhc2UgZGVzY3JpYmVzIHRoZSBtb2RlIG9mIHRoZSBTUEkgYnVzIGR1cmluZyB0aGUgaW5zdHJ1Y3Rpb24gcGhhc2UKKyAqIFxwYXJhbSBbaW5dIGFkZHJfcGhhc2UgZGVzY3JpYmVzIHRoZSBtb2RlIG9mIHRoZSBTUEkgYnVzIGR1cmluZyB0aGUgYWRkcmVzcyBwaGFzZQorICogXHBhcmFtIFtpbl0gZHVtbXlfcGhhc2UgZGVzY3JpYmVzIHRoZSBtb2RlIG9mIHRoZSBTUEkgYnVzIGR1cmluZyB0aGUgZHVtbXkgcGhhc2UKKyAqIFxwYXJhbSBbaW5dIGRhdGFfcGhhc2UgZGVzY3JpYmVzIHRoZSBtb2RlIG9mIHRoZSBTUEkgYnVzIGR1cmluZyB0aGUgZGF0YSBwaGFzZQorICoKKyAqIFxzYSBod19xc3BpX3NldF9leHRyYV9ieXRlCisgKiBcc2EgaHdfcXNwaV9zZXRfd3JhcHBpbmdfYnVyc3RfaW5zdHJ1Y3Rpb24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9yZWFkX2luc3RydWN0aW9uKHVpbnQ4X3QgaW5zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2VuZF9vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkdW1teV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgYWRkcl9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgZHVtbXlfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGRhdGFfcGhhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZSgoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfcmVhZF9pbnN0cnVjdGlvbih1aW50OF90IGluc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNlbmRfb25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZHVtbXlfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGFkZHJfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGR1bW15X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBkYXRhX3BoYXNlKQoreworICAgICAgICBRU1BJQy0+UVNQSUNfQlVSU1RDTURBX1JFRyA9CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19JTlNULCBpbnN0KSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19JTlNUX1RYX01ELCBpbnN0X3BoYXNlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19BRFJfVFhfTUQsIGFkZHJfcGhhc2UpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIFFTUElDX0RNWV9UWF9NRCwgZHVtbXlfcGhhc2UpOworCisgICAgICAgIFFTUElDLT5RU1BJQ19CVVJTVENNREJfUkVHID0KKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0RBVF9SWF9NRCwgZGF0YV9waGFzZSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfSU5TVF9NRCwgc2VuZF9vbmNlKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19ETVlfRk9SQ0UsIChkdW1teV9jb3VudCA9PSAzID8gMSA6IDApKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19ETVlfTlVNLCBkdW1teV9udW1bZHVtbXlfY291bnRdKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHdyYXBwaW5nIGJ1cnN0IHJlYWQgaW5zdHJ1Y3Rpb25zIGZvciBRU1BJIGZsYXNoCisgKgorICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHVwIHdyYXBwaW5nIGJ1cnN0IGluc3RydWN0aW9uIHRvIHVzZS4KKyAqIFVzZSB0aGlzIGZlYXR1cmUgb25seSB3aGVuIHRoZSBzZXJpYWwgRkxBU0ggbWVtb3J5IHN1cHBvcnRzIGEgc3BlY2lhbAorICogaW5zdHJ1Y3Rpb24gZm9yIHdyYXBwaW5nIGJ1cnN0IGFjY2Vzcy4KKyAqCisgKiBccGFyYW0gW2luXSBpbnN0IGluc3RydWN0aW9uIGZvciBXcmFwcGluZyBCdXJzdAorICogXHBhcmFtIFtpbl0gbGVuIGRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgbGVuZ3RoIG9mIGEgd3JhcHBpbmcgYnVyc3QKKyAqIFxwYXJhbSBbaW5dIHNpemUgZGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBkYXRhIHNpemUgb2YgYSB3cmFwcGluZyBidXJzdAorICoKKyAqLwordm9pZCBod19xc3BpX3NldF93cmFwcGluZ19idXJzdF9pbnN0cnVjdGlvbih1aW50OF90IGluc3QsIEhXX1FTUElfV1JBUF9MRU4gbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9XUkFQX1NJWkUgc2l6ZSk7CisKKy8qKgorICogXGJyaWVmIFNldCBleHRyYSBieXRlIHRvIHVzZSBpbiByZWFkIGluc3RydWN0aW9uCisgKgorICogXHBhcmFtIFtpbl0gZXh0cmFfYnl0ZSB0aGUgdmFsdWUgb2YgYW4gZXh0cmEgYnl0ZSB3aGljaCB3aWxsIGJlIHRyYW5zZmVycmVkIGFmdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuIFRoaXMgYnl0ZSBpcyB1c2VkIGZvciB0ZWxsaW5nIG1lbW9yeSBpZiBpdCBzaG91bGQgc3RheQorICogICAgICAgICAgICAgICAgICAgICAgICBpbiBjb250aW51b3VzIHJlYWQgbW9kZSBvciB3YWl0IGZvciBub3JtYWwgaW5zdHJ1Y3Rpb24gYWZ0ZXIgQ1MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZ29lcyBpbmFjdGl2ZQorICogXHBhcmFtIFtpbl0gYnVzX21vZGUgZGVzY3JpYmVzIHRoZSBtb2RlIG9mIHRoZSBTUEkgYnVzIGR1cmluZyB0aGUgZXh0cmEgYnl0ZSBwaGFzZS4KKyAqIFxwYXJhbSBbaW5dIGhhbGZfZGlzYWJsZV9vdXQgMSAtIGRpc2FibGUgKGhpLXopIG91dHB1dCBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBiaXRzIFszOjBdIG9mIGV4dHJhIGJ5dGUKKyAqCisgKiBcc2EgaHdfcXNwaV9zZXRfcmVhZF9pbnN0cnVjdGlvbgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2V4dHJhX2J5dGUodWludDhfdCBleHRyYV9ieXRlLCBIV19RU1BJX0JVU19NT0RFIGJ1c19tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBoYWxmX2Rpc2FibGVfb3V0KSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9leHRyYV9ieXRlKHVpbnQ4X3QgZXh0cmFfYnl0ZSwgSFdfUVNQSV9CVVNfTU9ERSBidXNfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgaGFsZl9kaXNhYmxlX291dCkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0JVUlNUQ01EQV9SRUcgPQorICAgICAgICAgICAgICAgIChRU1BJQy0+UVNQSUNfQlVSU1RDTURBX1JFRyAmCisgICAgICAgICAgICAgICAgICAgICAgICB+KFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIFFTUElDX0VYVF9CWVRFKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIFFTUElDX0VYVF9UWF9NRCkpKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBRU1BJQ19FWFRfQllURSwgZXh0cmFfYnl0ZSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgUVNQSUNfRVhUX1RYX01ELCBidXNfbW9kZSk7CisKKyAgICAgICAgUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgPQorICAgICAgICAgICAgICAgIChRU1BJQy0+UVNQSUNfQlVSU1RDTURCX1JFRyAmCisgICAgICAgICAgICAgICAgICAgICAgICB+KFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0VYVF9CWVRFX0VOKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX0VYVF9IRl9EUykpKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19FWFRfQllURV9FTiwgMSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRVhUX0hGX0RTLCBoYWxmX2Rpc2FibGVfb3V0ID8gMSA6IDApOworfQorCisvKioKKyAqIFxicmllZiBTZXQgZHVtbXkgYnl0ZSBjb3VudAorICoKKyAqIE51bWJlciBvZiBkdW1teSBieXRlcyB0byBzZW5kIHdoZW4gcmVhZCBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZC4KKyAqCisgKiBccGFyYW0gW2luXSBjb3VudCBudW1iZXIgb2YgZHVtbXkgYnl0ZXMgdG8gc2VuZCAwLi40CisgKgorICovCit2b2lkIGh3X3FzcGlfc2V0X2R1bW15X2J5dGVzX2NvdW50KHVpbnQ4X3QgY291bnQpOworCisvKioKKyAqIFxicmllZiBTZXQgbnVtYmVyIG9mIGNsb2NrIHdoZW4gQ1Mgc3RheXMgaGlnaAorICoKKyAqIFxwYXJhbSBbaW5dIGNsb2NrX2NvdW50IGJldHdlZW4gdGhlIHRyYW5zbWlzc2lvbiBvZiB0d28gZGlmZmVyZW50IGluc3RydWN0aW9ucyB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoIG1lbW9yeSwgdGhlIHFzcGkgYnVzIHN0YXlzIGluIGlkbGUgc3RhdGUgKFFTUElfQ1MgaGlnaCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhdCBsZWFzdCB0aGlzIG51bWJlciBvZiBzcGkgY2xvY2sgY3ljbGVzLiBTZWUgdGhlIFFTUElDX0VSU19DU19ISQorICogICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgZm9yIGFuIGV4Y2VwdGlvbgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X21pbl9jc19oaWdoKHVpbnQ4X3QgY2xvY2tfY291bnQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X21pbl9jc19oaWdoKHVpbnQ4X3QgY2xvY2tfY291bnQpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEJVUlNUQ01EQiwgQ1NfSElHSF9NSU4sIGNsb2NrX2NvdW50KTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHVwIGVyYXNlIGluc3RydWN0aW9ucworICoKKyAqIEluc3RydWN0aW9uIHdpbGwgYmUgc2VuZCBhZnRlciBjYWxsIHRvIGh3X3FzcGlfZXJhc2VfYmxvY2suCisgKgorICogXHBhcmFtIFtpbl0gaW5zdCBjb2RlIHZhbHVlIG9mIHRoZSBlcmFzZSBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gaW5zdF9waGFzZSBtb2RlIG9mIHRoZSBRU1BJIEJ1cyBkdXJpbmcgdGhlIGluc3RydWN0aW9uIHBoYXNlIG9mIHRoZSBlcmFzZSBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gYWRkcl9waGFzZSB0aGUgbW9kZSBvZiB0aGUgUVNQSSBCdXMgZHVyaW5nIHRoZSBhZGRyZXNzIHBoYXNlIG9mIHRoZSBlcmFzZSBpbnN0cnVjdGlvbgorICogXHBhcmFtIFtpbl0gaGNsa19jeWNsZXMgdGhlIGNvbnRyb2xsZXIgbXVzdCBzdGF5IHdpdGhvdXQgZmxhc2ggbWVtb3J5IHJlYWRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzIGZvciB0aGlzIG51bWJlciBvZiBBTUJBIEFIQiBoY2xrIGN5Y2xlcywgYmVmb3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtcyB0aGUgY29tbWFuZCBvZiBlcmFzZSBvciByZXN1bWUgMTUgLSAwCisgKiBccGFyYW0gW2luXSBjc19oaV9jeWNsZXMgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBpbnN0cnVjdGlvbnM6IHdyaXRlIGVuYWJsZSwgZXJhc2UsIGVyYXNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVuZCBhbmQgZXJhc2UgcmVzdW1lLCB0aGUgUVNQSV9DUyByZW1haW5zIGhpZ2ggZm9yIGF0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhc3QgdGhpcyBudW1iZXIgb2YgcXNwaSBidXMgY2xvY2sgY3ljbGVzCisgKgorICogXHNhIGh3X3FzcGlfZXJhc2VfYmxvY2sKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9lcmFzZV9pbnN0cnVjdGlvbih1aW50OF90IGluc3QsIEhXX1FTUElfQlVTX01PREUgaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgYWRkcl9waGFzZSwgdWludDhfdCBoY2xrX2N5Y2xlcywgdWludDhfdCBjc19oaV9jeWNsZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9lcmFzZV9pbnN0cnVjdGlvbih1aW50OF90IGluc3QsIEhXX1FTUElfQlVTX01PREUgaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgYWRkcl9waGFzZSwgdWludDhfdCBoY2xrX2N5Y2xlcywgdWludDhfdCBjc19oaV9jeWNsZXMpCit7CisgICAgICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ01EQSwgRVJTX0lOU1QsIGluc3QpOworICAgICAgICBRU1BJQy0+UVNQSUNfRVJBU0VDTURCX1JFRyA9CisgICAgICAgICAgICAgICAgKFFTUElDLT5RU1BJQ19FUkFTRUNNREJfUkVHICYKKyAgICAgICAgICAgICAgICAgICAgICAgIH4oUkVHX01TSyhRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfRVJTX1RYX01EKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX0VBRF9UWF9NRCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19FUlNSRVNfSExEKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX0VSU19DU19ISSkpKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfRVJTX1RYX01ELCBpbnN0X3BoYXNlKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfRUFEX1RYX01ELCBhZGRyX3BoYXNlKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfRVJTUkVTX0hMRCwgaGNsa19jeWNsZXMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19FUlNfQ1NfSEksIGNzX2hpX2N5Y2xlcyk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB1cCB3cml0ZSBlbmFibGUgaW5zdHJ1Y3Rpb24KKyAqCisgKiBJbnN0cnVjdGlvbiBzZXR1cCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIGVyYXNlLgorICoKKyAqIFxwYXJhbSBbaW5dIHdyaXRlX2VuYWJsZSBjb2RlIHZhbHVlIG9mIHRoZSB3cml0ZSBlbmFibGUgaW5zdHJ1Y3Rpb24KKyAqIFxwYXJhbSBbaW5dIGluc3RfcGhhc2UgbW9kZSBvZiB0aGUgUVNQSSBCdXMgZHVyaW5nIHRoZSBpbnN0cnVjdGlvbiBwaGFzZQorICoKKyAqIFxzYSBod19xc3BpX2VyYXNlX2Jsb2NrCisgKiBcc2EgaHdfcXNwaV9zZXRfZXJhc2VfaW5zdHJ1Y3Rpb24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF93cml0ZV9lbmFibGVfaW5zdHJ1Y3Rpb24odWludDhfdCB3cml0ZV9lbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgaW5zdF9waGFzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF93cml0ZV9lbmFibGVfaW5zdHJ1Y3Rpb24odWludDhfdCB3cml0ZV9lbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgaW5zdF9waGFzZSkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoRVJBU0VDTURBLCBXRU5fSU5TVCwgd3JpdGVfZW5hYmxlKTsKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoRVJBU0VDTURCLCBXRU5fVFhfTUQsIGluc3RfcGhhc2UpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdXAgZXJhc2Ugc3VzcGVuZC9yZXN1bWUgaW5zdHJ1Y3Rpb25zCisgKgorICogXHBhcmFtIFtpbl0gZXJhc2Vfc3VzcGVuZF9pbnN0IGNvZGUgdmFsdWUgb2YgdGhlIGVyYXNlIHN1c3BlbmQgaW5zdHJ1Y3Rpb24uCisgKiBccGFyYW0gW2luXSBzdXNwZW5kX2luc3RfcGhhc2UgbW9kZSBvZiB0aGUgUVNQSSBCdXMgZHVyaW5nIHRoZSBpbnN0cnVjdGlvbiBwaGFzZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzdXNwZW5kIGluc3RydWN0aW9uCisgKiBccGFyYW0gW2luXSBlcmFzZV9yZXN1bWVfaW5zdCBjb2RlIHZhbHVlIG9mIHRoZSBlcmFzZSByZXN1bWUgaW5zdHJ1Y3Rpb24uCisgKiBccGFyYW0gW2luXSByZXN1bWVfaW5zdF9waGFzZSBtb2RlIG9mIHRoZSBRU1BJIEJ1cyBkdXJpbmcgdGhlIGluc3RydWN0aW9uIHBoYXNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVzdW1lIGluc3RydWN0aW9uCisgKiBccGFyYW0gW2luXSBtaW5pbXVtX2RlbGF5IGRlZmluZXMgdGhlIG1pbmltdW0gdGltZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBpbnN0cnVjdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBlcmFzZSBzdXNwZW5kIGFuZCB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24gZXJhc2UgcmVzdW1lLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlbGF5IHdpbGwgYmUgYWxzbyBhcHBsaWVkIGFmdGVyIHRoZSBFcmFzZSBjb21tYW5kLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAwIC0gZG9uJ3Qgd2FpdC4gVGhlIGNvbnRyb2xsZXIgc3RhcnRzIHRoZSBlcmFzZSBzdXNwZW5kIHByb2NlZHVyZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuLjYzIC0gY29udHJvbGxlciB3YWl0cyBhdCBsZWFzdCB0aGlzIG51bWJlciBvZiAyODhrSHogY2xvY2sgY3ljbGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHRoZSBzdXNwZW5zaW9uIG9mIGVyYXNpbmcuIFRpbWUgc3RhcnRzIGNvdW50aW5nIGFmdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZXJhc2UgcmVzdW1lCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfc3VzcGVuZF9yZXN1bWVfaW5zdHJ1Y3Rpb25zKHVpbnQ4X3QgZXJhc2Vfc3VzcGVuZF9pbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgc3VzcGVuZF9pbnN0X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXJhc2VfcmVzdW1lX2luc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSByZXN1bWVfaW5zdF9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1pbmltdW1fZGVsYXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX3NldF9zdXNwZW5kX3Jlc3VtZV9pbnN0cnVjdGlvbnModWludDhfdCBlcmFzZV9zdXNwZW5kX2luc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBzdXNwZW5kX2luc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcmFzZV9yZXN1bWVfaW5zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIHJlc3VtZV9pbnN0X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWluaW11bV9kZWxheSkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX0VSQVNFQ01EQV9SRUcgPQorICAgICAgICAgICAgICAgIChRU1BJQy0+UVNQSUNfRVJBU0VDTURBX1JFRyAmCisgICAgICAgICAgICAgICAgICAgICAgICB+KFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQV9SRUcsIFFTUElDX1NVU19JTlNUKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQV9SRUcsIFFTUElDX1JFU19JTlNUKSkpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQV9SRUcsIFFTUElDX1NVU19JTlNULCBlcmFzZV9zdXNwZW5kX2luc3QpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQV9SRUcsIFFTUElDX1JFU19JTlNULCBlcmFzZV9yZXN1bWVfaW5zdCk7CisgICAgICAgIFFTUElDLT5RU1BJQ19FUkFTRUNNREJfUkVHID0KKyAgICAgICAgICAgICAgICAoUVNQSUMtPlFTUElDX0VSQVNFQ01EQl9SRUcgJgorICAgICAgICAgICAgICAgICAgICAgICAgfihSRUdfTVNLKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBRU1BJQ19TVVNfVFhfTUQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfUkVTX1RYX01EKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX1JFU1NVU19ETFkpKSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgUVNQSUNfU1VTX1RYX01ELCBzdXNwZW5kX2luc3RfcGhhc2UpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX1JFU19UWF9NRCwgcmVzdW1lX2luc3RfcGhhc2UpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIFFTUElDX1JFU1NVU19ETFksIG1pbmltdW1fZGVsYXkpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgc3RhdHVzIGNvbW1hbmQKKyAqCisgKiBUaGlzIGNvbW1hbmQgd2lsbCBiZSBzZW5kIGJ5IFFTUEkgY29udHJvbGxlciB3aGVuIGl0IG5lZWRzIHRvIGNoZWNrIHN0YXR1cyBvZiBmbGFzaCBtZW1vcnkuCisgKiBUaGlzIGNvbW1hbmQgaXMgYWxzbyBzZW5kIGluZGlyZWN0bHkgd2hlbiBod19xc3BpX2dldF9lcmFzZV9zdGF0dXMgaXMgY2FsbGVkLgorICoKKyAqIFxwYXJhbSBbaW5dIGluc3QgaW5zdHJ1Y3Rpb24gZm9yIHJlYWQgc3RhdHVzCisgKiBccGFyYW0gW2luXSBpbnN0X3BoYXNlIG1vZGUgb2YgdGhlIFFTUEkgQnVzIGR1cmluZyB0aGUgaW5zdHJ1Y3Rpb24gcGhhc2Ugb2YgdGhlIHJlYWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGluc3RydWN0aW9uCisgKiBccGFyYW0gW2luXSByZWNlaXZlX3BoYXNlIG1vZGUgb2YgdGhlIFFTUEkgQnVzIGR1cmluZyB0aGUgcmVjZWl2ZSBzdGF0dXMgcGhhc2Ugb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlYWQgc3RhdHVzIGluc3RydWN0aW9uCisgKiBccGFyYW0gW2luXSBidXN5X3BvcyBpdCBkZXNjcmliZXMgd2hpY2ggYml0IGZyb20gdGhlIGJpdHMgb2Ygc3RhdHVzIHJlcHJlc2VudHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBCdXN5IGJpdCAoNyAtIDApCisgKiBccGFyYW0gW2luXSBidXN5X3ZhbCBkZWZpbmVzIHRoZSB2YWx1ZSBvZiB0aGUgQnVzeSBiaXQgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZmxhc2ggaXMgYnVzeQorICogICAgICAgICAgICAgICAgICAgICAgMCAtIGZsYXNoIGlzIGJ1c3kgd2hlbiB0aGUgQnVzeSBiaXQgaXMgZXF1YWwgdG8gMCwKKyAqICAgICAgICAgICAgICAgICAgICAgIDEgLSBmbGFzaCBpcyBidXN5IHdoZW4gdGhlIEJ1c3kgYml0IGlzIGVxdWFsIHRvIDEKKyAqIFxwYXJhbSBbaW5dIHJlYWRfZGVsYXkgZGVmaW5lcyB0aGUgbWluaW11bSB0aW1lIGRpc3RhbmNlIGJldHdlZW4gdGhlIGluc3RydWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgc3RhdHVzIHJlZ2lzdGVyIGFuZCBwcmV2aW91cyBpbnN0cnVjdGlvbnMgbGlrZSBlcmFzZSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICByZXN1bWUuIFRoZSBzYW1lIGRlbGF5IHdpbGwgYmUgYWxzbyBhcHBsaWVkIGFmdGVyIHRoZSBFcmFzZSBjb21tYW5kLgorICogICAgICAgICAgICAgICAgICAgICAgICAwIC0gZG9uJ3Qgd2FpdC4gVGhlIGNvbnRyb2xsZXIgc3RhcnRzIHRvIHJlYWQgdGhlIEZsYXNoIG1lbW9yeQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHJlZ2lzdGVyIGltbWVkaWF0ZWx5LgorICogICAgICAgICAgICAgICAgICAgICAgICAxLi42MyAtIGNvbnRyb2xsZXIgd2FpdHMgYXQgbGVhc3QgdGhlIG51bWJlciBvZiBRU1BJX0NMSworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlcyBhbmQgYWZ0ZXJ3YXJkcyBpdCBzdGFydHMgdG8gcmVhZCB0aGUgRmxhc2ggbWVtb3J5IHN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLiBUaW1lIHN0YXJ0cyBjb3VudGluZyBhZnRlciB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyYXNlL3Jlc3VtZS4KKyAqIFxwYXJhbSBbaW5dIHN0c19kZWxheSBkZWZpbmVzIHRoZSByZWdpc3RlciB0byBjb3VudCB0aGUgZGVsYXkgdG8gd2FpdCBmb3IgdGhlIEZMQVNIIFN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlYWQgYWZ0ZXIgYW4gZXJhc2Ugb3IgZXJhc2UvIHJlc3VtZSBjb21tYW5kLgorICogICAgICAgICAgICAgICAgICAgICAgIDAgLSBkZWxheSBpcyBjb250cm9sbGVkIGJ5IHRoZSBccCByZWFkX2RlYWx5IChRU1BJQ19SRVNTVFNfRExZKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBjb3VudHMgb24gdGhlIHFzcGkgY2xvY2ssCisgKiAgICAgICAgICAgICAgICAgICAgICAgMSAtIGRlbGF5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIFxwIG1pbmltdW1fZGVsYXkgdmFsdWUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X3FzcGlfc2V0X3N1c3BlbmRfcmVzdW1lX2luc3RydWN0aW9ucyAoUVNQSUNfUkVTU1VTX0RMWSkgd2hpY2gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzIG9uIHRoZSAyODgga0h6IGNsb2NrCisgKgorICogXHNhIGh3X3FzcGlfc2V0X3N1c3BlbmRfcmVzdW1lX2luc3RydWN0aW9ucworICogXHNhIGh3X3FzcGlfZ2V0X2VyYXNlX3N0YXR1cworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X3JlYWRfc3RhdHVzX2luc3RydWN0aW9uKHVpbnQ4X3QgaW5zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfUVNQSV9CVVNfTU9ERSBpbnN0X3BoYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIHJlY2VpdmVfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzeV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnVzeV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgcmVhZF9kZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzdHNfZGVsYXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZSgoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfcmVhZF9zdGF0dXNfaW5zdHJ1Y3Rpb24odWludDhfdCBpbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX0JVU19NT0RFIGluc3RfcGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlVTX01PREUgcmVjZWl2ZV9waGFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBidXN5X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBidXN5X3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCByZWFkX2RlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHN0c19kZWxheSkKK3sKKyAgICAgICAgUVNQSUMtPlFTUElDX1NUQVRVU0NNRF9SRUcgPQorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfU1RBVFVTQ01EX1JFRywgUVNQSUNfQlVTWV9WQUwsIGJ1c3lfdmFsKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19TVEFUVVNDTURfUkVHLCBRU1BJQ19CVVNZX1BPUyAsIGJ1c3lfcG9zKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19TVEFUVVNDTURfUkVHLCBRU1BJQ19SU1RBVF9SWF9NRCwgcmVjZWl2ZV9waGFzZSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfU1RBVFVTQ01EX1JFRywgUVNQSUNfUlNUQVRfVFhfTUQsIGluc3RfcGhhc2UpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIFFTUElDX1JTVEFUX0lOU1QsIGluc3QpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIFFTUElDX1NUU0RMWV9TRUwsIHN0c19kZWxheSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfU1RBVFVTQ01EX1JFRywgUVNQSUNfUkVTU1RTX0RMWSwgcmVhZF9kZWxheSk7Cit9CisKKy8qKgorICogXGJyaWVmIEVyYXNlIGJsb2NrL3NlY3RvciBvZiBmbGFzaCBtZW1vcnkKKyAqCisgKiBGb3IgdGhpcyBmdW5jdGlvbiB0byB3b3JrLCBlcmFzZSBpbnN0cnVjdGlvbnMgbXVzdCBiZSBzZXQgdXAKKyAqIHdpdGggaHdfcXNwaV9zZXRfZXJhc2VfaW5zdHJ1Y3Rpb24uCisgKiBVc2VyIHNob3VsZCBjYWxsIGh3X3FzcGlfZ2V0X2VyYXNlX3N0YXR1cyB0byBjaGVjayBpZiBibG9jayBlcmFzZWQuCisgKgorICogXG5vdGUgSWYgdXNlciBkb2Vzbid0IGNhbGwgaHdfcXNwaV9nZXRfZXJhc2Vfc3RhdHVzIHRoYXQgcmV0dXJucyBzdGF0dXMgMAorICogUVNQSSBjb250cm9sbGVyIHdpbGwgbm90IGJlIGFibGUgdG8gc3dpdGNoIHRvIG1hbnVhbCBtb2RlLgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHIgbWVtb3J5IGFkZHJlc3Mgb2YgYmxvY2svc2VjdG9yIHRoYXRzIGlzIHJlcXVlc3RlZCB0byBiZSBlcmFzZWQKKyAqICAgICAgICAgICAgICAgICAgZm9yIDI0IGJpdHMgYWRkcmVzc2luZywgYml0cyBbMjM6MTJdIGRldGVybWluZSB0aGUgYmxvY2svc2VjdG9yCisgKiAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYml0cy4gQml0cyBbMTE6MF0gYXJlIGlnbm9yZWQgYnkgdGhlIGNvbnRyb2xsZXIuCisgKiAgICAgICAgICAgICAgICAgIEZvciAzMiBiaXRzIGFkZHJlc3NpbmcsIGJpdHMgWzMxOjEyXSBkZXRlcm1pbmUgdGhlIGJsb2NrL3NlY3RvcnMKKyAqICAgICAgICAgICAgICAgICAgYWRkcmVzcyBiaXRzLiBCaXRzIFsxMTowXSBhcmUgaWdub3JlZCBieSB0aGUgY29udHJvbGxlcgorICoKKyAqIFxzYSBod19xc3BpX3NldF9lcmFzZV9pbnN0cnVjdGlvbgorICogXHNhIGh3X3FzcGlfZ2V0X2VyYXNlX3N0YXR1cworICogXHNhIGh3X3FzcGlfc2V0X2F1dG9tb2RlCisgKgorICovCit2b2lkIGh3X3FzcGlfZXJhc2VfYmxvY2sodWludDMyX3QgYWRkcik7CisKKy8qKgorICogXGJyaWVmIEdldCBlcmFzZSBzdGF0dXMKKyAqCisgKiBccmV0dXJuIHByb2dyZXNzIG9mIHNlY3Rvci9ibG9jayBlcmFzaW5nCisgKiAgICAgICAgIDAgPSBubyBlcmFzZSwKKyAqICAgICAgICAgMSA9IHBlbmRpbmcgZXJhc2UgcmVxdWVzdCwKKyAqICAgICAgICAgMiA9IGVyYXNlIHByb2NlZHVyZSBpcyBydW5uaW5nLAorICogICAgICAgICAzID0gc3VzcGVuZGVkIGVyYXNlIHByb2NlZHVyZSwKKyAqICAgICAgICAgNCA9IGZpbmlzaGluZyB0aGUgZXJhc2UgcHJvY2VkdXJlCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfcXNwaV9nZXRfZXJhc2Vfc3RhdHVzKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IGh3X3FzcGlfZ2V0X2VyYXNlX3N0YXR1cyh2b2lkKQoreworICAgICAgICBRU1BJQy0+UVNQSUNfQ0hDS0VSQVNFX1JFRyA9IDA7CisgICAgICAgIHJldHVybiBIV19RU1BJQ19SRUdfR0VURihFUkFTRUNUUkwsIEVSU19TVEFURSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBidXJzdCBicmVhayBzZXF1ZW5jZQorICoKKyAqIFxwYXJhbSBbaW5dIHNlcXVlbmNlIHZhbHVlIHdpbGwgYmUgdHJhbnNtaXR0ZWQgYXMgdGhlIGJ1cnN0IGJyZWFrIHNlcXVlbmNlCisgKiBccGFyYW0gW2luXSBtb2RlIG1vZGUgb2YgdGhlIFFTUEkgQnVzIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBidXJzdCBicmVhayBzZXF1ZW5jZQorICogXHBhcmFtIFtpbl0gc2l6ZSBzaXplIG9mIEJ1cnN0IEJyZWFrIFNlcXVlbmNlCisgKiBccGFyYW0gW2luXSBkaXNfb3V0IGRpc2FibGUgb3V0cHV0IGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBzZWNvbmQgaGFsZiAoc2VxdWVuY2VbMzowXSkuCisgKiAgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyBiaXQgaXMgb25seSB1c2VmdWwgaWYgc2l6ZSA9IDEuCisgKiAgICAgICAgICAgICAgICAgICAgIDAgLSBjb250cm9sbGVyIGRyaXZlcyB0aGUgUVNQSSBidXMgZHVyaW5nIHRoZSB0cmFuc21pc3Npb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzZXF1ZW5jZVszOjBdLAorICogICAgICAgICAgICAgICAgICAgICAxIC0gY29udHJvbGxlciBsZWF2ZXMgdGhlIFFTUEkgYnVzIGluIEhpLVogZHVyaW5nIHRoZSB0cmFuc21pc3Npb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzZXF1ZW5jZVszOjBdCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfYnJlYWtfc2VxdWVuY2UodWludDE2X3Qgc2VxdWVuY2UsIEhXX1FTUElfQlVTX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlJFQUtfU0VRX1NJWkUgc2l6ZSwgdWludDhfdCBkaXNfb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9zZXRfYnJlYWtfc2VxdWVuY2UodWludDE2X3Qgc2VxdWVuY2UsIEhXX1FTUElfQlVTX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX1FTUElfQlJFQUtfU0VRX1NJWkUgc2l6ZSwgdWludDhfdCBkaXNfb3V0KQoreworICAgICAgICBRU1BJQy0+UVNQSUNfQlVSU1RCUktfUkVHID0KKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQlJLX1JFRywgUVNQSUNfU0VDX0hGX0RTLCBkaXNfb3V0KSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVEJSS19SRUcsIFFTUElDX0JSS19TWiwgc2l6ZSkgfAorICAgICAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RCUktfUkVHLCBRU1BJQ19CUktfVFhfTUQsIG1vZGUpIHwKKyAgICAgICAgICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQlJLX1JFRywgUVNQSUNfQlJLX0VOLCAxKSB8CisgICAgICAgICAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVEJSS19SRUcsIFFTUElDX0JSS19XUkQsIHNlcXVlbmNlKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBidXJzdCBicmVhayBzZXF1ZW5jZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZGlzYWJsZV9idXJzdF9icmVha19zZXF1ZW5jZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2Rpc2FibGVfYnVyc3RfYnJlYWtfc2VxdWVuY2Uodm9pZCkKK3sKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQlVSU1RCUkssIEJSS19FTiwgMCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBjb25maWd1cmF0aW9uIG9mIFFTUEkgcGFkcworICoKKyAqIFxwYXJhbSBbaW5dIHJhdGUgUVNQSSBwYWRzIHNsZXcgcmF0ZSBjb250cm9sCisgKiBccGFyYW0gW2luXSBjdXJyZW50IFFTUEkgcGFkcyBkcml2ZSBjdXJyZW50CisgKgorICovCit2b2lkIGh3X3FzcGlfc2V0X3BhZHMoSFdfUVNQSV9TTEVXX1JBVEUgcmF0ZSwgSFdfUVNQSV9EUklWRV9DVVJSRU5UIGN1cnJlbnQpOworCisvKioKKyAqIFxicmllZiBRU1BJIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIFFTUEkgY29udHJvbGxlciBpbiBtYW51YWwgbW9kZS4KKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hhbmdlIFFTUElfRElWCisgKgorICovCit2b2lkIGh3X3FzcGlfaW5pdChjb25zdCBxc3BpX2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIFFTUEkgY29udHJvbGxlciBjbG9jaworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZW5hYmxlX2Nsb2NrKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfZW5hYmxlX2Nsb2NrKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBDUkdfVE9QLT5DTEtfQU1CQV9SRUcgfD0gMSA8PCBSRUdfUE9TKENSR19UT1AsIENMS19BTUJBX1JFRywgUVNQSV9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBRU1BJIGNvbnRyb2xsZXIgY2xvY2sKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xc3BpX2Rpc2FibGVfY2xvY2sodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcXNwaV9kaXNhYmxlX2Nsb2NrKHZvaWQpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBDUkdfVE9QLT5DTEtfQU1CQV9SRUcgJj0gflJFR19NU0soQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBRU1BJX0VOQUJMRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIFFTUEkgY2xvY2sgZGl2aWRlcgorICoKKyAqIFxwYXJhbSBbaW5dIGRpdiBRU1BJIGNsb2NrIGRpdmlkZXIKKyAqCisgKiBcc2EgSFdfUVNQSV9ESVYKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2RpdihIV19RU1BJX0RJViBkaXYpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3FzcGlfc2V0X2RpdihIV19RU1BJX0RJViBkaXYpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFFTUElfRElWLCBkaXYpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBRU1BJIGNsb2NrIGRpdmlkZXIKKyAqCisgKiBccmV0dXJuIHRoZSBRU1BJIGNsb2NrIGRpdmlkZXIgc2V0dGluZworICoKKyAqIFxzYSBIV19RU1BJX0RJVgorICovCitzdGF0aWMgaW5saW5lIEhXX1FTUElfRElWIGh3X3FzcGlfZ2V0X2Rpdih2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgSFdfUVNQSV9ESVYgaHdfcXNwaV9nZXRfZGl2KHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFFTUElfRElWKTsKK30KKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19RU1BJICovCisKKyNlbmRpZiAvKiBIV19RU1BJX0hfICovCisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3JmLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3JmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4ZjRhMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfcmYuaApAQCAtMCwwICsxLDM3NyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgUkYKKyAqIFx7CisgKiBcYnJpZWYgUmFkaW8gQ29udHJvbAorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfcmYuaAorICoKKyAqIEBicmllZiBSYWRpbyBtb2R1bGUgKFJGKSBMb3cgTGV2ZWwgRHJpdmVyIEFQSS4KKyAqCisgKiBAbm90ZSBUaGUgZm9sbG93aW5nIHJlY2FsaWJyYXRpb24tcmVsYXRlZCB3ZWFrIGZ1bmN0aW9ucyBjYW4gYmUgb3ZlcnJpZGRlbiwgaWYgbmVlZGVkLCAKKyAqICAgICAgIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5CisgKgorICogQG5vdGUKKyAqIH5+fnsuY30KKyAqIGJvb2wgaHdfcmZfcHJlb2ZmX2NiKHZvaWQpCisgKiB+fn4KKyAqCisgKiBAbm90ZSBDYWxsZWQgYmVmb3JlIGFjdHVhbGx5IHNodXR0aW5nIGRvd24gdGhlIFJGIFBELiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIFBECisgKiAgICAgICB3aWxsIE5PVCBiZSBzaHV0ZG93biwgYnV0IHdpbGwgc3RheSBvbi4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBkZWNpZGUKKyAqICAgICAgIHdoZXRoZXIgYW4gUkYgcmVjYWxpYnJhdGlvbiBpcyBuZWVkZWQgYW5kIHRvIHN0YXJ0IHRoZSByZXNwZWN0aXZlIG9wZXJhdGlvbi4KKyAqICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIChpZiBhbiBleHBsaWNpdCBpbXBsZW1lbnRhdGlvbiBpcyBvbWl0dGVkKSByZXR1cm5zCisgKiAgICAgICBmYWxzZSAoaS5lLiB0aGUgUkYgUEQgc2h1dHMgb2ZmIGltbWVkaWF0ZWx5KS4KKyAqCisgKiBAbm90ZSAKKyAqIH5+fnsuY30KKyAqIHZvaWQgaHdfcmZfcG9zdGNvbmZfY2Iodm9pZCkKKyAqIH5+fgorICoKKyAqIEBub3RlIENhbGxlZCBhZnRlciB0aGUgUkYgcmVjb21tZW5kZWQgc2V0dGluZ3MgYXJlIGFwcGxpZWQsIG9yIGFmdGVyIHRoZQorICogICAgICAgcmVjYWxpYnJhdGlvbiBwcm9jZWR1cmUgaXMgY29tcGxldGVkLiBDYW4gYmUgdXNlZCB0byBzdGFydC9yZXNldCBhCisgKiAgICAgICByZWNhbGlicmF0aW9uIHRpbWVyLCBpbiBjYXNlIHBlcmlvZGljIHJlY2FsaWJyYXRpb24gaXMgZW5hYmxlZCB1c2luZworICogICAgICAgZGdfY29uZmlnUkZfUkVDQUxJQlJBVElPTl9USU1FUl9USU1FT1VUCisgKgorICogQG5vdGUgCisgKiB+fn57LmN9CisgKiB2b2lkIGh3X3JmX3ByZWNhbGliX2NiKHZvaWQpCisgKiB2b2lkIGh3X3JmX3Bvc3RjYWxpYl9jYih2b2lkKToKKyAqIH5+fgorICoKKyAqIEBub3RlIENhbGxlZCB3aGVuIHRoZSByZS1jYWxpYnJhdGlvbiAobm90IHRoZSBpbml0aWFsIGNhbGlicmF0aW9uKSBwcm9jZWR1cmUKKyAqICAgICAgIHN0YXJ0cy9lbmRzLiBDYW4gYmUgdXNlZCB0byBpbnN0cnVjdCB0aGUgc3lzdGVtIG5vdCB0byBnbyB0byBzbGVlcCBkdXJpbmcKKyAqICAgICAgIHRoaXMgdGltZS4KKyAqCisgKiBAbm90ZQorICogfn5+ey5jfQorICogdm9pZCBod19yZl9hcHBseV90Y3NfY2Iodm9pZCkKKyAqIH5+fgorICoKKyAqIEBub3RlIENhbGxlZCBiZWZvcmUgYXBwbHlpbmcgdGhlIHJmIHJlY29tbWVuZGVkIHNldHRpbmdzLiBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkCisgKiAgICAgICBhcHBseSB0aGUgVENTIHZhbHVlcworICoKKyAqIEBub3RlCisgKiB+fn57LmN9CisgKiB1aW50NjRfdCBod19yZl9nZXRfc3RhcnRfaWZmX3RpbWUodm9pZCkKKyAqIH5+fgorICoKKyAqIEBub3RlIENhbGxlZCB0byBnZXQgdGhlIHRpbWUgd2hlbiBJRkYgY2FsaWJyYXRpb24gc3RhcnRzCisgKgorICogQG5vdGUKKyAqIH5+fnsuY30KKyAqIGJvb2wgaHdfcmZfY2hlY2tfaWZmX3RpbWVvdXQodWludDY0X3Qgc3RhcnRfdGltZSkKKyAqIH5+fgorICoKKyAqIEBub3RlIENhbGxlZCB0byBjaGVjayBpZiBJRkYgY2FsaWJyYXRpb24gaGFzIHRpbWVkLW91dCAoaS5lLiB0b29rIHRvbyBsb25nKS4gSXQgdGFrZXMgYXJndW1lbnQgdGhlCisgKiAgICAgICBJRkYgY2FsaWIgc3RhcnRfdGltZSwgYXMgcmV0dXJuIGJ5IGh3X3JmX2dldF9zdGFydF9pZmZfdGltZSgpLiBJdCBzaG91bGQgbm9ybWFsbHkgY2hlY2sgYWdhaW5zdAorICogICAgICAgY29uZmlnIG1hY3JvIGRnX2NvbmZpZ1JGX0lGRl9DQUxJQlJBVElPTl9USU1FT1VULgorICoKKyAqIEB3YXJuaW5nIEFsbCB0aGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gYSBjcml0aWNhbCBzZWN0aW9uLiBUaGV5IHNob3VsZCBub3QgYmxvY2suCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgSFdfUkZfSF8KKyNkZWZpbmUgSFdfUkZfSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19SRgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgInNka19kZWZzLmgiCisKKyNpbmNsdWRlICJod19jcG0uaCIKKworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyNpbmNsdWRlICJod19mZW1fc2t5NjYxMTItMTEuaCIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHsKKyAgICAgICAgdWludDhfdCB0eF9wb3dlcl9ibGU6IDQ7CisgICAgICAgIHVpbnQ4X3QgdHhfcG93ZXJfZnRkZjogNDsKK30gaHdfcmZfdHhfcG93ZXJfbHV0c190OworCitleHRlcm4gaHdfcmZfdHhfcG93ZXJfbHV0c190IHJmX3R4X3Bvd2VyX2x1dHM7CisKKy8qKgorICogXGJyaWVmIFBvd2VyIExVVCBzZXR0aW5nCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19SRl9QV1JfTFVUXzBkYm0gPSAwLCAgIC8qKjwgVFggUFdSIGF0dGVudWF0aW9uIDAgZGJtICovCisgICAgICAgIEhXX1JGX1BXUl9MVVRfbTFkYm0gPSAxLCAgLyoqPCBUWCBQV1IgYXR0ZW51YXRpb24gLTEgZGJtICovCisgICAgICAgIEhXX1JGX1BXUl9MVVRfbTJkYm0gPSAyLCAgLyoqPCBUWCBQV1IgYXR0ZW51YXRpb24gLTIgZGJtICovCisgICAgICAgIEhXX1JGX1BXUl9MVVRfbTNkYm0gPSAzLCAgLyoqPCBUWCBQV1IgYXR0ZW51YXRpb24gLTMgZGJtICovCisgICAgICAgIEhXX1JGX1BXUl9MVVRfbTRkYm0gPSA0LCAgLyoqPCBUWCBQV1IgYXR0ZW51YXRpb24gLTQgZGJtICovCit9IEhXX1JGX1BXUl9MVVRfU0VUVElORzsKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZXMgUkYgc3lzdGVtLCBhbmQgcGVyZm9ybXMgdGhlIGluaXRpYWwgY2FsaWJyYXRpb24KKyAqCisgKiBcbm90ZSBUaGUgUkYgUEQgbXVzdCBiZSBvbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQKKyAqCisgKiBccmV0dXJuIFRydWUsIGlmIGlmZiBjYWxpYiBpcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UKKyAqLworYm9vbCBod19yZl9zeXN0ZW1faW5pdCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byB0aGVpciByZWNvbW1lbmRlZCB2YWx1ZXMuCisgKi8KK3ZvaWQgaHdfcmZfc2V0X3JlY29tbWVuZGVkX3NldHRpbmdzKHZvaWQpOworCisvKioKKyAqIFxicmllZiAoUmUpY2FsaWJyYXRlcyBSRiBEQyBvZmZzZXQuCisgKi8KK3ZvaWQgaHdfcmZfZGNfb2Zmc2V0X2NhbGlicmF0aW9uKHZvaWQpOworCisvKioKKyAqIFxicmllZiAoUmUpY2FsaWJyYXRlcyBtb2R1bGF0aW9uIGdhaW4uCisgKi8KK3ZvaWQgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uKGJvb2wpOworCisvKioKKyAqIFxicmllZiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byAocmUpY2FsaWJyYXRlIGFsbCBSRiByZWxhdGVkIG1vZHVsZXMuCisgKgorICogXHJldHVybiBUcnVlIGlmIGNhbGlicmF0aW9uIChzcGVjaWZpY2FsbHksIHRoZSBpZmYgY2FsaWJyYXRpb24gcGFydCkKKyAqICAgICAgICAgc3VjY2VlZHMsIGZhbHNlIGlmIG5vdAorICovCitib29sIGh3X3JmX2NhbGlicmF0aW9uKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTdGFydCBDYWxpYnJhdGlvbiBwcm9jZWR1cmUgYW5kIHJldHVybi4KKyAqCisgKiBUaGlzIHdpbGwgYmxvY2sgZm9yIHNvbWUgdGltZSBpbiBvcmRlciB0byBwZXJmb3JtCisgKiB0aGUgZmlyc3QgcGFydCBvZiBjYWxpYnJhdGlvbiAoSUZGLCBEQyBvZmZzZXQgYW5kIHRoZSBzdGFydCBvZiBnYWluIGNhbGliKS4KKyAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIFxyZXR1cm4gVHJ1ZSBpZiBjYWxpYnJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgbm90IChpLmUuIGlmZiBjYWxpYiBoYW5nKQorICoKKyAqLworYm9vbCBod19yZl9zdGFydF9jYWxpYnJhdGlvbih2b2lkKTsKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKy8qKgorICogXGJyaWVmIFNldCBUWCBQb3dlcgorICoKKyAqIFRoaXMgYWN0dWFsbHkgc2V0cyB0aGUgaW5kZXggb2YgdGhlIFJGX1RYX1BXRVJfTFVUX1hfUkVHIHRvIHVzZS4KKyAqCisgKiBccGFyYW0gW2luXSBsdXQgVGhlIFRYIHBvd2VyIGF0dGVudWF0aW9uIHNldHRpbmcKKyAqCisgKiBcd2FybmluZyBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSByZWNvbW1lbmRlZCBzZXR0aW5ncyBhcmUgYXBwbGllZAorICovCit2b2lkIGh3X3JmX3NldF90eF9wb3dlcihIV19SRl9QV1JfTFVUX1NFVFRJTkcgbHV0KTsKKyNlbHNlCisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorLyoqCisgKiBcYnJpZWYgU2V0IFRYIFBvd2VyIGZvciBCTEUKKyAqCisgKiBUaGlzIGFjdHVhbGx5IHNldHMgdGhlIGluZGV4IG9mIHRoZSBSRl9UWF9QV1JfTFVUX1hfUkVHIHRvIHVzZS4KKyAqCisgKiBccGFyYW0gW2luXSBsdXQgVGhlIFRYIHBvd2VyIGF0dGVudWF0aW9uIHNldHRpbmcKKyAqCisgKiBcd2FybmluZyBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSByZWNvbW1lbmRlZCBzZXR0aW5ncyBhcmUgYXBwbGllZAorICovCit2b2lkIGh3X3JmX3NldF90eF9wb3dlcl9ibGUoSFdfUkZfUFdSX0xVVF9TRVRUSU5HIGx1dCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfRlRERgorLyoqCisgKiBcYnJpZWYgU2V0IFRYIFBvd2VyIGZvciBGVERGCisgKgorICogVGhpcyBhY3R1YWxseSBzZXRzIHRoZSBpbmRleCBvZiB0aGUgUkZfVFhfUFdSX0xVVF9YX1JFRyB0byB1c2UuCisgKgorICogXHBhcmFtIFtpbl0gbHV0IFRoZSBUWCBwb3dlciBhdHRlbnVhdGlvbiBzZXR0aW5nCisgKgorICogXHdhcm5pbmcgRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgcmVjb21tZW5kZWQgc2V0dGluZ3MgYXJlIGFwcGxpZWQKKyAqLwordm9pZCBod19yZl9zZXRfdHhfcG93ZXJfZnRkZihIV19SRl9QV1JfTFVUX1NFVFRJTkcgbHV0KTsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBTZXQgVFggUG93ZXIKKyAqCisgKiBUaGlzIGFjdHVhbGx5IHNldHMgdGhlIGluZGV4IG9mIHRoZSBSRl9UWF9QV1JfTFVUX1hfUkVHIHRvIHVzZS4KKyAqCisgKiBccGFyYW0gW2luXSBsdXQgVGhlIFRYIHBvd2VyIGF0dGVudWF0aW9uIHNldHRpbmcKKyAqCisgKiBcZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgaXQgY2FuIG9ubHkgc2V0CisgKiAgQkxFIGFuZCBGVERGIFRYIHBvd2VyIHdpdGggdGhlIHNhbWUgdmFsdWUuIFVzZSBod19yZl9zZXRfdHhfcG93ZXJfYmxlKCkKKyAqICBhbmQgaHdfcmZfc2V0X3R4X3Bvd2VyX2Z0ZGYoKSBpbnN0ZWFkLgorICoKKyAqIFx3YXJuaW5nIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHJlY29tbWVuZGVkIHNldHRpbmdzIGFyZSBhcHBsaWVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZl9zZXRfdHhfcG93ZXIoSFdfUkZfUFdSX0xVVF9TRVRUSU5HIGx1dCkKK3sKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorICAgICAgICBod19yZl9zZXRfdHhfcG93ZXJfYmxlKGx1dCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAgICAgaHdfcmZfc2V0X3R4X3Bvd2VyX2Z0ZGYobHV0KTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFR1cm5zIG9uIFJGIG1vZHVsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3JmX3Bvd2Vyb24odm9pZCkgIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JmX3Bvd2Vyb24odm9pZCkKK3sKKyAgICAgICAgaWYgKChkZ19jb25maWdVU0VfQk9EID09IDEpICYmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgICAgICAgICB8fCAoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpICYmIChDSElQX0lTX0FFKSkpKSB7CisgICAgICAgICAgICAgICAgaHdfY3BtX2RlYWN0aXZhdGVfYm9kX3Byb3RlY3Rpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElmIFBEX1JBRCBpcyB1cCwgbWFrZSBzdXJlIHRvIHBvd2VyIGl0IGRvd24gdG8gaXNzdWUgYSByZXNldCAqLworICAgICAgICBpZiAoUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBSQURfSVNfVVApKSB7CisgICAgICAgICAgICAgICAgaWYgKChkZ19jb25maWdVU0VfQk9EID09IDEpICYmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gPT0gMSkgJiYgKENISVBfSVNfQUUpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3X2NwbV9kZWxheV91c2VjKDMwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSQURJT19TTEVFUCk7CisgICAgICAgICAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgUkFEX0lTX0RPV04pID09IDB4MCk7CisgICAgICAgIH0KKworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBSQURJT19TTEVFUCk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgICAgICB3aGlsZSAoIVJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgUkFEX0lTX1VQKSk7CisKKyAgICAgICAgaWYgKChkZ19jb25maWdVU0VfQk9EID09IDEpICYmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgICAgICAgICB8fCAoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpICYmIChDSElQX0lTX0FFKSkpKSB7CisgICAgICAgICAgICAgICAgaHdfY3BtX2RlbGF5X3VzZWMoMzApOworICAgICAgICAgICAgICAgIGh3X2NwbV9hY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW5hYmxlIHRoZSBQTExkaWcvUkZDVSBjbG9jaworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLX1JBRElPX1JFRywgUkZDVV9FTkFCTEUpOworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfUkFESU9fUkVHLCBSRkNVX0RJViwgMSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCisjaWYgZGdfY29uZmlnRkVNID09IEZFTV9TS1k2NjExMl8xMQorICAgICAgICBod19mZW1fc3RhcnQoKTsKKyNlbmRpZgorfQorCisvKioKKyAqIFxicmllZiBUdXJucyBvZmYgUkYgbW9kdWxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmZfcG93ZXJvZmYoKQoreworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyAgICAgICAgaHdfZmVtX3N0b3AoKTsKKyNlbmRpZgorCisgICAgICAgIGlmICgoZGdfY29uZmlnVVNFX0JPRCA9PSAxKSAmJiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgICAgICAgICAgfHwgKChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKSAmJiAoQ0hJUF9JU19BRSkpKSkgeworICAgICAgICAgICAgICAgIGh3X2NwbV9kZWFjdGl2YXRlX2JvZF9wcm90ZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgaHdfY3BtX2RlbGF5X3VzZWMoMzApOworICAgICAgICB9CisKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgUkFESU9fU0xFRVApOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgd2hpbGUgKCFSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFJBRF9JU19ET1dOKSk7CisKKyAgICAgICAgaWYgKChkZ19jb25maWdVU0VfQk9EID09IDEpICYmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgICAgICAgICB8fCAoKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OID09IDEpICYmIChDSElQX0lTX0FFKSkpKSB7CisgICAgICAgICAgICAgICAgaHdfY3BtX2RlbGF5X3VzZWMoMzApOworICAgICAgICAgICAgICAgIGh3X2NwbV9hY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbigpOworICAgICAgICB9Cit9CisKKy8qKgorICogXGJyaWVmIFNldHMgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gdGhlaXIgcmVjb21tZW5kZWQgdmFsdWVzLCB0YWtpbmcgUkYgc3RhdGUgaW50byBhY2NvdW50LgorICoKKyAqIEFjdHMgbGlrZSBccmVmIGh3X3JmX3NldF9yZWNvbW1lbmRlZF9zZXR0aW5ncyBidXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBSRiBwb3dlciBkb21haW4gaXMgb24gYW5kCisgKiB1bmNvbmZpZ3VyZWQuCisgKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKi8KK3ZvaWQgaHdfcmZfcmVxdWVzdF9yZWNvbW1lbmRlZF9zZXR0aW5ncyh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9uCisgKgorICogUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9uLCBpZiBub3QgYWxyZWFkeSBvbi4KKyAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGVfYmxlIFRydWUsIGlmIHRoZSByZiBpcyBuZWVkZWQgZm9yIGJsZQorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod19yZl9yZXF1ZXN0X29uKGJvb2wgbW9kZV9ibGUpOworCisvKioKKyAqIFxicmllZiBSZXF1ZXN0cyB0aGF0IHRoZSBSRiBpcyB0dXJuZWQgb2ZmCisgKgorICogUmVxdWVzdHMgdGhhdCB0aGUgUkYgaXMgdHVybmVkIG9mZiwgaWYgbm90IGFscmVhZHkgb2ZmLgorICogVGhlIFJGIHdpbGwgYmUgdHVybmVkIG9mZiBvbmx5IGlmIHRoZXJlIGFyZSBubyBtb3JlCisgKiByZXF1ZXN0cyAoaWUuIGFsbCByZXF1ZXN0ZXJzIGhhdmUgY2FsbGVkIGh3X3JmX3JlcXVlc3Rfb2ZmKCkpCisgKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBccGFyYW0gW2luXSBtb2RlX2JsZSBUcnVlLCBpZiB0aGUgcmYgd2FzIG5lZWRlZCBmb3IgYmxlCisgKi8KK3ZvaWQgaHdfcmZfcmVxdWVzdF9vZmYoYm9vbCBtb2RlX2JsZSk7CisKKy8qKgorICogXGJyaWVmIFN0YXJ0IHRyYW5zbWl0dGluZyBhIGNvbnRpbnVvdXMgd2F2ZSAodW5tb2R1bGF0ZWQgdHJhbnNtaXNzaW9uKQorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgaXMgdGhlIG1vZGUgdG8gdXNlLiAxOiBCTEUsIDIgb3IgMzogRlRERiAoMDogTm9ybWFsLCB1c2UgaHdfcmZfc3RvcF8qKQorICoKKyAqIFxwYXJhbSBbaW5dIGNoIGlzIHRoZSBDaGFubmVsIHRvIHRyYW5zbWl0IG9uLCBjYWxjdWxhdGVkIGFzOgorICogICAgICAgICAgICAgKG1vZGUgaXMgQkxFKSAgY2ggPSAoRiDigJMgMjQwMikgLyAyLCB3aGVyZSBGIHJhbmdlcyBmcm9tIDI0MDIgTUh6IHRvIDI0ODAgTUh6LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2U6IDB4MDAg4oCTIDB4MjcuCisgKiAgICAgICAgICAgICAobW9kZSBpcyBGVERGKSBjaCA9IChGIOKAkyAyNDA1KSAvIDUsIHdoZXJlIEYgcmFuZ2VzIGZyb20gMjQwNSBNSHogdG8gMjQ4MCBNSHouCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZTogMHgwMCDigJMgMHhmLgorICovCit2b2lkIGh3X3JmX3N0YXJ0X2NvbnRpbnVvdXNfd2F2ZSh1aW50OF90IG1vZGUsIHVpbnQ4X3QgY2gpOworCisvKioKKyAqIFxicmllZiBTdG9wIHRyYW5zbWl0dGluZyBhIGNvbnRpbnVvdXMgd2F2ZSAodW5tb2R1bGF0ZWQgdHJhbnNtaXNzaW9uKQorICoKKyAqLwordm9pZCBod19yZl9zdG9wX2NvbnRpbnVvdXNfd2F2ZSh2b2lkKTsKKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19SRiAqLworCisjZW5kaWYgLyogSFdfUkZfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfdGltZXIwLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RpbWVyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGMyM2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RpbWVyMC5oCkBAIC0wLDAgKzEsMzg1IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBUaW1lcjAKKyAqIFx7CisgKiBcYnJpZWYgVGltZXIwIAorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfdGltZXIwLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBUaW1lcjAgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX1RJTUVSMF9IXworI2RlZmluZSBIV19USU1FUjBfSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19USU1FUjAKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbWFzayBvZiBhIGZpZWxkIG9mIGFuIFRJTUVSMCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19USU1FUjBfUkVHX0ZJRUxEX01BU0socmVnLCBmaWVsZCkgXAorICAgICAgICAoR1BfVElNRVJTX1RJTUVSMF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGJpdCBwb3NpdGlvbiBvZiBhIGZpZWxkIG9mIGFuIFRJTUVSMCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19USU1FUjBfUkVHX0ZJRUxEX1BPUyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChHUF9USU1FUlNfVElNRVIwXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBUSU1FUjAgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byB3cml0ZQorICoKKyAqIFxyZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBmaWVsZAorICoKKyAqLworI2RlZmluZSBIV19USU1FUjBfUkVHX0dFVEYocmVnLCBmaWVsZCkgXAorICAgICAgICAoKEdQX1RJTUVSUy0+VElNRVIwXyMjcmVnIyNfUkVHICYgKEdQX1RJTUVSU19USU1FUjBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpID4+IChHUF9USU1FUlNfVElNRVIwXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYW4gVElNRVIwIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqIFxwYXJhbSBbaW5dIG5ld192YWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlCisgKgorICovCisjZGVmaW5lIEhXX1RJTUVSMF9SRUdfU0VURihyZWcsIGZpZWxkLCBuZXdfdmFsKSBcCisgICAgICAgIEdQX1RJTUVSUy0+VElNRVIwXyMjcmVnIyNfUkVHID0gKChHUF9USU1FUlMtPlRJTUVSMF8jI3JlZyMjX1JFRyAmIH4oR1BfVElNRVJTX1RJTUVSMF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSkgfCBcCisgICAgICAgICgoR1BfVElNRVJTX1RJTUVSMF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSAmICgobmV3X3ZhbCkgPDwgKEdQX1RJTUVSU19USU1FUjBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX1BvcykpKSkKKworCisvKioKKyAqIFxicmllZiBDbG9jayBzb3VyY2UgZm9yIHRpbWVyCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjBfQ0xLX1NSQ19TTE9XID0gMCwgICAgICAgIC8qKjwgMzJrSHogKHNsb3cpIGNsb2NrICovCisgICAgICAgIEhXX1RJTUVSMF9DTEtfU1JDX0ZBU1QgPSAxICAgICAgICAgLyoqPCAyLzQvOC8xNk1IeiAoZmFzdCkgY2xvY2sgKi8KK30gSFdfVElNRVIwX0NMS19TUkM7CisKKy8qKgorICogXGJyaWVmIEZhc3QgY2xvY2sgZGl2aXNpb24gZmFjdG9yCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19USU1FUjBfRkFTVF9DTEtfRElWXzEgPSAwLCAgICAgIC8qKjwgZGl2aWRlIGJ5IDEgKi8KKyAgICAgICAgSFdfVElNRVIwX0ZBU1RfQ0xLX0RJVl8yLCAgICAgICAgICAvKio8IGRpdmlkZSBieSAyICovCisgICAgICAgIEhXX1RJTUVSMF9GQVNUX0NMS19ESVZfNCwgICAgICAgICAgLyoqPCBkaXZpZGUgYnkgNCAqLworICAgICAgICBIV19USU1FUjBfRkFTVF9DTEtfRElWXzgsICAgICAgICAgIC8qKjwgZGl2aWRlIGJ5IDggKi8KK30gSFdfVElNRVIwX0ZBU1RfQ0xLX0RJVjsKKworLyoqCisgKiBcYnJpZWYgUFdNIG1vZGUKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMF9NT0RFX1BXTSA9IDAsICAgICAgICAgICAgLyoqPCBQV00gc2lnbmFsIGlzICcxJyBkdXJpbmcgaGlnaCBzdGF0ZSAqLworICAgICAgICBIV19USU1FUjBfTU9ERV9DTE9DSyA9IDEgICAgICAgICAgIC8qKjwgUFdNIHNpZ25hbCBpcyBjbG9jayBkaXZpZGVkIGJ5IDIgZHVyaW5nIGhpZ2ggc3RhdGUgKi8KK30gSFdfVElNRVIwX01PREU7CisKKy8qKgorICogXGJyaWVmIFRpbWVyIGludGVycnVwdCBjYWxsYmFjaworICoKKyAqLwordHlwZWRlZiB2b2lkICgqaHdfdGltZXIwX2ludGVycnVwdF9jYikodm9pZCk7CisKKy8qCisgKiBcYnJpZWYgVGltZXIgY29uZmlndXJhdGlvbgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBIV19USU1FUjBfQ0xLX1NSQyAgICAgICBjbGtfc3JjOyAgICAgICAgLyoqPCBjbG9jayBzb3VyY2UgKi8KKyAgICAgICAgSFdfVElNRVIwX0ZBU1RfQ0xLX0RJViAgZmFzdF9jbGtfZGl2OyAgIC8qKjwgY2xvY2sgZGl2aXNpb24gZmFjdG9yIChvbmx5IGFwcGxpY2FibGUgd2hlbiBmYXN0IGNsb2NrIGlzIHNlbGVjdGVkIGFzIHNvdXJjZSkgKi8KKyAgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgb25fY2xvY2tfZGl2OyAgIC8qKjwgZW5hYmxlIE9OLWNvdW50ZXIgY2xvY2sgZGl2aWRlciAoY2xvY2sgZm9yIE9OLWNvdW50ZXIgaXMgZGl2aWRlZCBieSAxMCkgKi8KKyAgICAgICAgdWludDE2X3QgICAgICAgICAgICAgICAgb25fcmVsb2FkOyAgICAgIC8qKjwgcmVsb2FkIHZhbHVlIGZvciBPTi1jb3VudGVyICovCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgIHQwX3JlbG9hZF9tOyAgICAvKio8IHJlbG9hZCB2YWx1ZSBmb3IgVDAtY291bnRlciBNLXJlZ2lzdGVyICovCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgIHQwX3JlbG9hZF9uOyAgICAvKio8IHJlbG9hZCB2YWx1ZSBmb3IgVDAtY291bnRlciBOLXJlZ2lzdGVyICovCit9IHRpbWVyMF9jb25maWc7CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgdGhlIHRpbWVyCisgKgorICogVHVybiBvbiBjbG9jayBmb3IgdGltZXIgYW5kIGNvbmZpZ3VyZSB0aW1lci4gQWZ0ZXIgaW5pdGlhbGl6YXRpb24gYm90aCB0aW1lciBhbmQgaXRzIGludGVycnVwdAorICogYXJlIGRpc2FibGVkLiBccCBjZmcgY2FuIGJlIE5VTEwgLSBubyBjb25maWd1cmF0aW9uIGlzIHBlcmZvcm1lZCBpbiBzdWNoIGNhc2UuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIwX2luaXQoY29uc3QgdGltZXIwX2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgVGltZXIgY29uZmlndXJhdGlvbgorICoKKyAqIFNob3J0Y3V0IHRvIGNhbGwgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4gSWYgXHAgY2ZnIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gZG9lcworICogbm90aGluZy4KKyAqCisgKiBccGFyYW0gW2luXSBjZmcgY29uZmlndXJhdGlvbgorICoKKyAqLwordm9pZCBod190aW1lcjBfY29uZmlndXJlKGNvbnN0IHRpbWVyMF9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyCisgKgorICogXHBhcmFtIFtpbl0gaGFuZGxlciBGdW5jdGlvbiBwb2ludGVyIHRvIGNhbGwgd2hlbiB0aW1lciBpbnRlcnJ1cHQgb2NjdXJzCisgKgorICovCit2b2lkIGh3X3RpbWVyMF9yZWdpc3Rlcl9pbnQoaHdfdGltZXIwX2ludGVycnVwdF9jYiBoYW5kbGVyKTsKKworLyoqCisgKiBcYnJpZWYgVW5yZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqLwordm9pZCBod190aW1lcjBfdW5yZWdpc3Rlcl9pbnQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSB0aGUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjBfZW5hYmxlKHZvaWQpCit7CisgICAgICAgIEhXX1RJTUVSMF9SRUdfU0VURihDVFJMLCBUSU0wX0NUUkwsIDEpOworfQorCisvKioKKyAqIFxicmllZiBEaXNhYmxlIHRoZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9kaXNhYmxlKHZvaWQpCit7CisgICAgICAgIEhXX1RJTUVSMF9SRUdfU0VURihDVFJMLCBUSU0wX0NUUkwsIDApOworfQorCisvKioKKyAqIFxicmllZiBTZXQgY2xvY2sgc291cmNlIGZvciB0aW1lcgorICoKKyAqIFxwYXJhbSBbaW5dIGNsa19zcmMgY2xvY2sgc291cmNlCisgKgorICogXHNhIFRJTUVSMF9DTEtfU1JDCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIwX3NldF9jbG9ja19zb3VyY2UoSFdfVElNRVIwX0NMS19TUkMgY2xrX3NyYykKK3sKKyAgICAgICAgSFdfVElNRVIwX1JFR19TRVRGKENUUkwsIFRJTTBfQ0xLX1NFTCwgY2xrX3NyYyk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IGNsb2NrIHNvdXJjZSBmb3IgdGltZXIKKyAqCisgKiBccmV0dXJuIGNsb2NrIHNvdXJjZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjBfQ0xLX1NSQyBod190aW1lcjBfZ2V0X2Nsb2NrX3NvdXJjZSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfVElNRVIwX1JFR19HRVRGKENUUkwsIFRJTTBfQ0xLX1NFTCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBmYXN0IGNsb2NrIGRpdmlzaW9uIGZhY3RvcgorICoKKyAqIFxwYXJhbSBbaW5dIGRpdiBkaXZpc2lvbiBmYWN0b3IKKyAqCisgKiBcc2EgVElNRVIwX0ZBU1RfQ0xLX0RJVgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9zZXRfZmFzdF9jbG9ja19kaXYoSFdfVElNRVIwX0ZBU1RfQ0xLX0RJViBkaXYpCit7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMF9ESVYsIGRpdik7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY3VycmVudCBmYXN0IGNsb2NrIGRpdmlzaW9uIGZhY3RvcgorICoKKyAqIFxyZXR1cm4gZGl2aXNpb24gZmFjdG9yCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMF9GQVNUX0NMS19ESVYgIGh3X3RpbWVyMF9nZXRfZmFzdF9jbG9ja19kaXYodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFJFR19HRVRGKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIwX0RJVik7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBzdGF0ZSBvZiBjbG9jayBkaXZpZGVyIGZvciBPTi1jb3VudGVyCisgKgorICogT25jZSBlbmFibGVkLCBPTi1jb3VudGVyIGNsb2NrIHdpbGwgYmUgZGl2aWRlZCBieSAxMC4KKyAqCisgKiBccGFyYW0gW2luXSBlbmFibGVkIGNsb2NrIGRpdmlkZXIgc3RhdHVzCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIwX3NldF9vbl9jbG9ja19kaXYoYm9vbCBlbmFibGVkKQoreworICAgICAgICBIV19USU1FUjBfUkVHX1NFVEYoQ1RSTCwgVElNMF9DTEtfRElWLCAhZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IHN0YXRlIG9mIGNsb2NrIGRpdmlkZXIgZm9yIE9OLWNvdW50ZXIKKyAqCisgKiBccmV0dXJuIGNsb2NrIGRpdmlkZXIgc3RhdHVzCisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfdGltZXIwX2dldF9vbl9jbG9ja19kaXYodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuICFIV19USU1FUjBfUkVHX0dFVEYoQ1RSTCwgVElNMF9DTEtfRElWKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IFBXTSBtb2RlIGZvciB0aW1lcgorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgUFdNIG1vZGUKKyAqCisgKiBcc2EgVElNRVIwX01PREUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjBfc2V0X3B3bV9tb2RlKEhXX1RJTUVSMF9NT0RFIG1vZGUpCit7CisgICAgICAgIEhXX1RJTUVSMF9SRUdfU0VURihDVFJMLCBQV01fTU9ERSwgbW9kZSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IFBXTSBtb2RlIGZvciB0aW1lcgorICoKKyAqIFxyZXR1cm4gUFdNIG1vZGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfVElNRVIwX01PREUgaHdfdGltZXIwX2dldF9wd21fbW9kZSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfVElNRVIwX1JFR19HRVRGKENUUkwsIFBXTV9NT0RFKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IHJlbG9hZCB2YWx1ZSBmb3IgVDAtY291bnRlcgorICoKKyAqIFQwIGNvdW50ZXIgdmFsdWUgaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBjbG9jayBjeWNsZS4gQXQgdGhlIGJlZ2lubmluZyBpdCdzIGxvYWRlZCBmcm9tIE0tcmVnaXN0ZXIKKyAqIGFuZCB0aGVuLCBvbmNlIHJlYWNoZWQgemVybywgbG9hZGVkIGZyb20gTi1yZWdpc3RlciAoYW5kIHRoZW4gTSBhbmQgTiBhZ2FpbikuCisgKgorICogUFdNMCBpcyBoaWdoIHdoZW4gY291bnRpbmcgZG93biBNLXJlZ2lzdGVyIGFuZCBsb3cgd2hlbiBjb3VudGluZyBkb3duIE4tcmVnaXN0ZXIuCisgKiBGb3IgUFdNMSBpcyB0aGUgb3Bwb3NpdGUuCisgKgorICogXHBhcmFtIFtpbl0gbV92YWx1ZSBNLXJlZ2lzdGVyIHJlbG9hZCB2YWx1ZQorICogXHBhcmFtIFtpbl0gbl92YWx1ZSBOLXJlZ2lzdGVyIHJlbG9hZCB2YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9zZXRfdDBfcmVsb2FkKHVpbnQxNl90IG1fdmFsdWUsIHVpbnQxNl90IG5fdmFsdWUpCit7CisgICAgICAgIEdQX1RJTUVSUy0+VElNRVIwX1JFTE9BRF9NX1JFRyA9IG1fdmFsdWU7CisgICAgICAgIEdQX1RJTUVSUy0+VElNRVIwX1JFTE9BRF9OX1JFRyA9IG5fdmFsdWU7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCByZWxvYWQgdmFsdWUgZm9yIE9OLWNvdW50ZXIKKyAqCisgKiBPTiBjb3VudGVyIHZhbHVlIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggY2xvY2sgY3ljbGUuIE9uY2UgT04gcmVhY2hlcyB6ZXJvIGl0IHdpbGwgcmVtYWluIHplcm8KKyAqIHVudGlsIFQwIGNvdW50ZXIgY29tcGxldGVzIGRlY3JlbWVudGluZyBOLXJlZ2lzdGVyIHZhbHVlLiBXaGVuIHRoaXMgaGFwcGVucywgaW50ZXJydXB0IGlzCisgKiBnZW5lcmF0ZWQuCisgKgorICogXHBhcmFtIFtpbl0gdmFsdWUgcmVsb2FkIHZhbHVlCisgKgorICogXHNhIGh3X3RpbWVyMF9zZXRfb25fY2xvY2tfZGl2CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIwX3NldF9vbl9yZWxvYWQodWludDE2X3QgdmFsdWUpCit7CisgICAgICAgIEdQX1RJTUVSUy0+VElNRVIwX09OX1JFRyA9IHZhbHVlOworfQorCisvKioKKyAqIFxicmllZiBHZXQgVDAtY291bnRlciB2YWx1ZQorICoKKyAqIFxyZXR1cm4gY291bnRlciB2YWx1ZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod190aW1lcjBfZ2V0X3QwKHZvaWQpCit7CisgICAgICAgIHJldHVybiAoR1BfVElNRVJTLT5USU1FUjBfUkVMT0FEX01fUkVHKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IE9OLWNvdW50ZXIgdmFsdWUKKyAqCisgKiBccmV0dXJuIGNvdW50ZXIgdmFsdWUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdGltZXIwX2dldF9vbih2b2lkKQoreworICAgICAgICByZXR1cm4gKEdQX1RJTUVSUy0+VElNRVIwX09OX1JFRyk7Cit9CisKKy8qKgorICogXGJyaWVmIEZyZWV6ZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMF9mcmVlemUodm9pZCkKK3sKKyAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMF9Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIFVuZnJlZXplIHRpbWVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIwX3VuZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5SRVNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMF9Nc2s7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfVElNRVIwICovCisKKyNlbmRpZiAvKiBIV19USU1FUjBfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfdGltZXIxLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RpbWVyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTZiYWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RpbWVyMS5oCkBAIC0wLDAgKzEsMTA1MiBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgVGltZXIxCisgKiBceworICogXGJyaWVmIFRpbWVyMQorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfdGltZXIxLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBUaW1lcjEgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX1RJTUVSMV9IXworI2RlZmluZSBIV19USU1FUjFfSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19USU1FUjEKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbWFzayBvZiBhIGZpZWxkIG9mIGFuIFRJTUVSMSByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19USU1FUjFfUkVHX0ZJRUxEX01BU0socmVnLCBmaWVsZCkgXAorICAgICAgICAoVElNRVIxX0NBUFRJTV8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGJpdCBwb3NpdGlvbiBvZiBhIGZpZWxkIG9mIGFuIFRJTUVSMSByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIGFjY2VzcworICoKKyAqLworI2RlZmluZSBIV19USU1FUjFfUkVHX0ZJRUxEX1BPUyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChUSU1FUjFfQ0FQVElNXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBUSU1FUjEgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byB3cml0ZQorICoKKyAqIFxyZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBmaWVsZAorICoKKyAqLworI2RlZmluZSBIV19USU1FUjFfUkVHX0dFVEYocmVnLCBmaWVsZCkgXAorICAgICAgICAoKFRJTUVSMS0+Q0FQVElNXyMjcmVnIyNfUkVHICYgKFRJTUVSMV9DQVBUSU1fIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpID4+IChUSU1FUjFfQ0FQVElNXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYW4gVElNRVIxIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqIFxwYXJhbSBbaW5dIG5ld192YWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlCisgKgorICovCisjZGVmaW5lIEhXX1RJTUVSMV9SRUdfU0VURihyZWcsIGZpZWxkLCBuZXdfdmFsKSBcCisgICAgICAgIFRJTUVSMS0+Q0FQVElNXyMjcmVnIyNfUkVHID0gKChUSU1FUjEtPkNBUFRJTV8jI3JlZyMjX1JFRyAmIH4oVElNRVIxX0NBUFRJTV8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSkgfCBcCisgICAgICAgICgoVElNRVIxX0NBUFRJTV8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSAmICgobmV3X3ZhbCkgPDwgKFRJTUVSMV9DQVBUSU1fIyNyZWcjI19SRUdfIyNmaWVsZCMjX1BvcykpKSkKKworCisjZGVmaW5lIEVYVF9DTEsgICAgMTYgICAgLy8gMTYgTUh6CisjZGVmaW5lIElOVF9DTEsgICAgMzIgICAgLy8gMzIga0h6CisKKy8qKgorICogXGJyaWVmIE1vZGUgb2Ygb3BlcmF0aW9uCisgKgorICogUFdNIGlzIGVuYWJsZWQgaW4gYm90aCBtb2Rlcy4KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMV9NT0RFX1RJTUVSID0gMCwgICAgICAgLyoqPCB0aW1lci9jYXB0dXJlIG1vZGUgKi8KKyAgICAgICAgSFdfVElNRVIxX01PREVfT05FU0hPVCA9IDEgICAgICAvKio8IG9uZS1zaG90IG1vZGUgKi8KK30gSFdfVElNRVIxX01PREU7CisKKy8qKgorICogXGJyaWVmIENsb2NrIHNvdXJjZSBmb3IgdGltZXIKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMV9DTEtfU1JDX0lOVCA9IDAsICAgICAgLyoqPCBJbnRlcm5hbCBjbG9jayAzMiBrSHogKHNsb3cpICovCisgICAgICAgIEhXX1RJTUVSMV9DTEtfU1JDX0VYVCA9IDEgICAgICAgLyoqPCBFeHRlcm5hbCBjbG9jayAyLzQvOC8xNiBNSHogKGZhc3QpICovCit9IEhXX1RJTUVSMV9DTEtfU1JDOworCisvKioKKyAqIFxicmllZiBDb3VudGluZyBkaXJlY3Rpb24KKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMV9ESVJfVVAgPSAwLCAgICAgICAgICAgLyoqPCBUaW1lciBjb3VudHMgdXAgKGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQpICovCisgICAgICAgIEhXX1RJTUVSMV9ESVJfRE9XTiA9IDEgICAgICAgICAgLyoqPCBUaW1lciBjb3VudHMgZG93biAoY291bnRlciBpcyBkZWNyZW1lbnRlZCkgKi8KK30gSFdfVElNRVIxX0RJUjsKKworLyoqCisgKiBcYnJpZWYgVHlwZSBvZiB0cmlnZ2VyaW5nIGV2ZW50cworICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVElNRVIxX1RSSUdHRVJfUklTSU5HID0gMCwgICAvKio8IEV2ZW50IGFjdGl2YXRlZCByaXNpbmcgZWRnZSAqLworICAgICAgICBIV19USU1FUjFfVFJJR0dFUl9GQUxMSU5HID0gMSAgIC8qKjwgRXZlbnQgYWN0aXZhdGVkIGZhbGxpbmcgZWRnZSAqLworfSBIV19USU1FUjFfVFJJR0dFUjsKKworLyoqCisgKiBcYnJpZWYgT25lIHNob3QgbW9kZSBwaGFzZXMKKyAqCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEhXX1RJTUVSMV9PTkVTSE9UX1dBSVQgPSAwLCAgICAgLyoqPCBXYWl0IGZvciB0aGUgZXZlbnQgKi8KKyAgICAgICAgSFdfVElNRVIxX09ORVNIT1RfREVMQVkgPSAxLCAgICAvKio8IERlbGF5IGJlZm9yZSBzdGFydGVkICovCisgICAgICAgIEhXX1RJTUVSMV9PTkVTSE9UX1NUQVJURUQgPSAyLCAgLyoqPCBTdGFydCBzaG90ICovCisgICAgICAgIEhXX1RJTUVSMV9PTkVTSE9UX0FDVElWRSA9IDMgICAgLyoqPCBTaG90IGlzIGFjdGl2ZSAqLworfSBIV19USU1FUjFfT05FU0hPVDsKKworLyoqCisgKiBcYnJpZWYgR1BJT3MgZm9yIHRpbWVyMQorICoKKyAqIE1haW5seSB1c2UgZm9yIG1hcmsgd2hpY2ggR1BJTyB3aWxsIHRyaWdnZXJzIHRpbWVyIGNvdW50aW5nLgorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVElNRVIxX0dQSU9fTk9ORSA9IDAsICAgICAgICAvKio8IE5vbmUgb2YgR1BJTyAqLworICAgICAgICAvKiBwb3J0IDAgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDAwID0gMSwgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDAgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDAxID0gMiwgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDEgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDAyID0gMywgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDIgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDAzID0gNCwgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDMgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDA0ID0gNSwgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDQgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDA1ID0gNiwgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDUgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDA2ID0gNywgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDYgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDA3ID0gOCwgICAgICAgICAvKio8IFBvcnQgMCwgcGluIDcgKi8KKyAgICAgICAgLyogcG9ydCAxICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxMCA9IDksICAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiAwICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxMSA9IDEwLCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiAxICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxMiA9IDExLCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiAyICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxMyA9IDEyLCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiAzICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxNCA9IDEzLCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiA0ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxNSA9IDE0LCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiA1ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxNiA9IDE1LCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiA2ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1AxNyA9IDE2LCAgICAgICAgLyoqPCBQb3J0IDEsIHBpbiA3ICovCisgICAgICAgIC8qIHBvcnQgMiAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMjAgPSAxNywgICAgICAgIC8qKjwgUG9ydCAyLCBwaW4gMCAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMjEgPSAxOCwgICAgICAgIC8qKjwgUG9ydCAyLCBwaW4gMSAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMjIgPSAxOSwgICAgICAgIC8qKjwgUG9ydCAyLCBwaW4gMiAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMjMgPSAyMCwgICAgICAgIC8qKjwgUG9ydCAyLCBwaW4gMyAqLworICAgICAgICBIV19USU1FUjFfR1BJT19QMjQgPSAyMSwgICAgICAgIC8qKjwgUG9ydCAyLCBwaW4gNCAqLworICAgICAgICAvKiBwb3J0IDMgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDMwID0gMjIsICAgICAgICAvKio8IFBvcnQgMywgcGluIDAgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDMxID0gMjMsICAgICAgICAvKio8IFBvcnQgMywgcGluIDEgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDMyID0gMjQsICAgICAgICAvKio8IFBvcnQgMywgcGluIDIgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDMzID0gMjUsICAgICAgICAvKio8IFBvcnQgMywgcGluIDMgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDM0ID0gMjYsICAgICAgICAvKio8IFBvcnQgMywgcGluIDQgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDM1ID0gMjcsICAgICAgICAvKio8IFBvcnQgMywgcGluIDUgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDM2ID0gMjgsICAgICAgICAvKio8IFBvcnQgMywgcGluIDYgKi8KKyAgICAgICAgSFdfVElNRVIxX0dQSU9fUDM3ID0gMjksICAgICAgICAvKio8IFBvcnQgMywgcGluIDcgKi8KKyAgICAgICAgLyogcG9ydCA0ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0MCA9IDMwLCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiAwICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0MSA9IDMxLCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiAxICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0MiA9IDMyLCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiAyICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0MyA9IDMzLCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiAzICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0NCA9IDM0LCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiA0ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0NSA9IDM1LCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiA1ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0NiA9IDM2LCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiA2ICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPX1A0NyA9IDM3LCAgICAgICAgLyoqPCBQb3J0IDQsIHBpbiA3ICovCit9IEhXX1RJTUVSMV9HUElPOworCisvKioKKyAqIFxicmllZiBUaW1lciBpbnRlcnJ1cHQgY2FsbGJhY2sKKyAqCisgKi8KK3R5cGVkZWYgdm9pZCAoKmh3X3RpbWVyMV9oYW5kbGVyX2NiKSh2b2lkKTsKKworLyoKKyAqIFxicmllZiBUaW1lciBjb25maWd1cmF0aW9uIGZvciB0aW1lci9jYXB0dXJlIG1vZGUKKyAqCisgKiBcc2EgdGltZXIxX2NvbmZpZworICogXHNhIGh3X3RpbWVyMV9jb25maWd1cmVfdGltZXIKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgSFdfVElNRVIxX0RJUiAgICAgICBkaXJlY3Rpb247ICAgIC8qKjwgY291bnRpbmcgZGlyZWN0aW9uICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgcmVsb2FkX3ZhbDsgICAvKio8IHJlbG9hZCB2YWx1ZSAqLworICAgICAgICBib29sICAgICAgICAgICAgICAgIGZyZWVfcnVuOyAgICAgLyoqPCBmcmVlLXJ1bm5pbmcgbW9kZSBzdGF0ZSAqLworCisgICAgICAgIEhXX1RJTUVSMV9HUElPICAgICAgZ3BpbzE7ICAgICAgICAvKio8IDFzdCBHUElPIGZvciBjYXB0dXJlIG1vZGUgKi8KKyAgICAgICAgSFdfVElNRVIxX1RSSUdHRVIgICB0cmlnZ2VyMTsgICAgIC8qKjwgMXN0IEdQSU8gY2FwdHVyZSB0cmlnZ2VyICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPICAgICAgZ3BpbzI7ICAgICAgICAvKio8IDJuZCBHUElPIGZvciBjYXB0dXJlIG1vZGUgKi8KKyAgICAgICAgSFdfVElNRVIxX1RSSUdHRVIgICB0cmlnZ2VyMjsgICAgIC8qKjwgMm5kIEdQSU8gY2FwdHVyZSB0cmlnZ2VyICovCit9IHRpbWVyMV9jb25maWdfdGltZXJfY2FwdHVyZTsKKworLyoKKyAqIFxicmllZiBUaW1lciBjb25maWd1cmF0aW9uIGZvciBvbmVzaG90IG1vZGUKKyAqCisgKiBcc2EgdGltZXIxX2NvbmZpZworICogXHNhIGh3X3RpbWVyMV9jb25maWd1cmVfb25lc2hvdAorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgIGRlbGF5OyAgICAgICAgLyoqPCBkZWxheSAodGlja3MpIGJldHdlZW4gR1BJTyBldmVudCBhbmQgb3V0cHV0IHB1bHNlICovCisgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgc2hvdF93aWR0aDsgICAvKio8IHdpZHRoICh0aWNrcykgb2YgZ2VuZXJhdGVkIHB1bHNlICovCisgICAgICAgIEhXX1RJTUVSMV9HUElPICAgICAgZ3BpbzsgICAgICAgICAvKio8IEdQSU8gdG8gd2FpdCBmb3IgZXZlbnQgKi8KKyAgICAgICAgSFdfVElNRVIxX1RSSUdHRVIgICB0cmlnZ2VyOyAgICAgIC8qKjwgR1BJTyB0cmlnZ2VyICovCit9IHRpbWVyMV9jb25maWdfb25lc2hvdDsKKworLyoKKyAqIFxicmllZiBUaW1lciBQV00gY29uZmlndXJhdGlvbgorICoKKyAqIFxzYSB0aW1lcjFfY29uZmlnCisgKiBcc2EgaHdfdGltZXIxX2NvbmZpZ3VyZV9wd20KKyAqIFxzYSBod190aW1lcjFfc2V0X3B3bV9mcmVxCisgKiBcc2EgaHdfdGltZXIxX3NldF9wd21fZHV0eV9jeWNsZQorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgZnJlcXVlbmN5OyAgICAvKio8IGZyZXF1ZW5jeSAqLworICAgICAgICB1aW50MTZfdCAgICAgICAgICAgIGR1dHlfY3ljbGU7ICAgLyoqPCBkdXR5IGN5Y2xlICovCit9IHRpbWVyMV9jb25maWdfcHdtOworCisvKgorICogXGJyaWVmIFRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBPbmx5IG9uZSBvZiBccCB0aW1lciBhbmQgXHAgb25lc2hvdCBjb25maWd1cmF0aW9uIGNhbiBiZSBzZXQgc2luY2UgdGhleSBhcmUgc3RvcmVkIGluIHRoZSBzYW1lCisgKiB1bmlvbiAoYW5kIHdpbGwgb3ZlcndyaXRlIGVhY2ggb3RoZXIpLiBQcm9wZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaXMgc2VsZWN0ZWQgZGVwZW5kaW5nIG9uCisgKiB0aW1lciBtb2RlIHNldC4KKyAqCisgKiBcc2EgdGltZXIxX2NvbmZpZ190aW1lcl9jYXB0dXJlCisgKiBcc2EgdGltZXIxX2NvbmZpZ19vbmVzaG90CisgKiBcc2EgdGltZXIxX2NvbmZpZ19wd20KKyAqIFxzYSBod190aW1lcjFfY29uZmlndXJlCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIEhXX1RJTUVSMV9DTEtfU1JDICAgY2xrX3NyYzsgICAgICAgICAgICAgICAgICAgIC8qKjwgY2xvY2sgc291cmNlICovCisgICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgcHJlc2NhbGVyOyAgICAgICAgICAgICAgICAgIC8qKjwgY2xvY2sgcHJlc2NhbGVyICovCisKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIHRpbWVyMV9jb25maWdfdGltZXJfY2FwdHVyZSAgIHRpbWVyOyAgICAvKio8IGNvbmZpZ3VyYXRpb24gZm9yIHRpbWVyL2NhcHR1cmUgbW9kZSAqLworICAgICAgICAgICAgICAgIHRpbWVyMV9jb25maWdfb25lc2hvdCAgICAgICAgIG9uZXNob3Q7ICAvKio8IGNvbmZpZ3VyYXRpb24gZm9yIG9uZXNob3QgbW9kZSAqLworICAgICAgICB9OworICAgICAgICB0aW1lcjFfY29uZmlnX3B3bSAgIHB3bTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBXTSBjb25maWd1cmF0aW9uICovCit9IHRpbWVyMV9jb25maWc7CisKKworI2lmIGRnX2NvbmZpZ1VTRVJfQ0FOX1VTRV9USU1FUjEgPT0gMQorCisvKioKKyAqIFxicmllZiBUaW1lciBpbml0aWFsaXphdGlvbgorICoKKyAqIFR1cm4gb24gY2xvY2sgZm9yIHRpbWVyIGFuZCBjb25maWd1cmUgdGltZXIuIEFmdGVyIGluaXRpYWxpemF0aW9uIGJvdGggdGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQKKyAqIGFyZSBkaXNhYmxlZC4gXHAgY2ZnIGNhbiBiZSBOVUxMIC0gbm8gY29uZmlndXJhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc3VjaCBjYXNlLgorICoKKyAqIFxwYXJhbSBbaW5dIG1vZGUgdGltZXIgbW9kZQorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX2luaXQoSFdfVElNRVIxX01PREUgbW9kZSwgY29uc3QgdGltZXIxX2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgVGltZXIgY29uZmlndXJhdGlvbgorICoKKyAqIFNob3J0Y3V0IHRvIGNhbGwgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4gSWYgXHAgY2ZnIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gZG9lcworICogbm90aGluZyBleGNlcHQgc3dpdGNoaW5nIHRpbWVyIHRvIHNlbGVjdGVkIG1vZGUuCisgKgorICogXHBhcmFtIFtpbl0gbW9kZSB0aW1lciBtb2RlCisgKiBccGFyYW0gW2luXSBjZmcgY29uZmlndXJhdGlvbgorICoKKyAqLwordm9pZCBod190aW1lcjFfY29uZmlndXJlKEhXX1RJTUVSMV9NT0RFIG1vZGUsIGNvbnN0IHRpbWVyMV9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFRpbWVyIGNvbmZpZ3VyYXRpb24gZm9yIHRpbWVyL2NhcHR1cmUgbW9kZQorICoKKyAqIFNob3J0Y3V0IHRvIGNhbGwgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4gVGhpcyBkb2VzIG5vdCBzd2l0Y2ggdGltZXIgdG8gdGltZXIvY2FwdHVyZQorICogbW9kZSwgaXQgc2hvdWxkIGJlIGRvbmUgc2VwYXJhdGVseSB1c2luZyBod190aW1lcjFfc2V0X21vZGUoKS4KKyAqCisgKiBccGFyYW0gW2luXSBjZmcgY29uZmlndXJhdGlvbgorICoKKyAqLwordm9pZCBod190aW1lcjFfY29uZmlndXJlX3RpbWVyKGNvbnN0IHRpbWVyMV9jb25maWdfdGltZXJfY2FwdHVyZSAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgVGltZXIgY29uZmlndXJhdGlvbiBmb3Igb25lc2hvdCBtb2RlCisgKgorICogU2hvcnRjdXQgdG8gY2FsbCBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLiBUaGlzIGRvZXMgbm90IHN3aXRjaCB0aW1lciB0byBvbmVzaG90CisgKiBtb2RlLCBpdCBzaG91bGQgYmUgZG9uZSBzZXBhcmF0ZWx5IHVzaW5nIGh3X3RpbWVyMV9zZXRfbW9kZSgpLgorICoKKyAqIFxwYXJhbSBbaW5dIGNmZyBjb25maWd1cmF0aW9uCisgKgorICovCit2b2lkIGh3X3RpbWVyMV9jb25maWd1cmVfb25lc2hvdChjb25zdCB0aW1lcjFfY29uZmlnX29uZXNob3QgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIEZyZWV6ZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9mcmVlemUodm9pZCkKK3sKKyAgICAgICAgR1BSRUctPlNFVF9GUkVFWkVfUkVHID0gR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMV9Nc2s7Cit9CisKKy8qKgorICogXGJyaWVmIFVuZnJlZXplIHRpbWVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3VuZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5SRVNFVF9GUkVFWkVfUkVHID0gR1BSRUdfUkVTRVRfRlJFRVpFX1JFR19GUlpfU1dUSU0xX01zazsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgdGltZXIgaXMgZnJvemVuCisgKgorICogXHJldHVybiB0cnVlIGlmIGl0IGlzIGZyb3plbiBlbHNlIGZhbHNlCisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfdGltZXIxX2Zyb3plbih2b2lkKQoreworICAgICAgICByZXR1cm4gR1BSRUctPlNFVF9GUkVFWkVfUkVHICYgR1BSRUdfU0VUX0ZSRUVaRV9SRUdfRlJaX1NXVElNMV9Nc2sgPyB0cnVlIDogZmFsc2U7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBjbG9jayBzb3VyY2Ugb2YgdGhlIHRpbWVyCisgKgorICogXHBhcmFtIFtpbl0gY2xrIGNsb2NrIHNvdXJjZSBvZiB0aGUgdGltZXIsIGV4dGVybmFsIG9yIGludGVybmFsCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9jbGsoSFdfVElNRVIxX0NMS19TUkMgY2xrKQoreworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX1NZU19DTEtfRU4sIGNsayk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aW1lciBjbG9jayBwcmVzY2FsZXIKKyAqCisgKiBBY3R1YWwgdGltZXIgZnJlcXVlbmN5IGlzIFxwIHRpbWVyX2ZyZXEgPSBccCBmcmVxX2Nsb2NrIC8gKFxwIHZhbHVlICsgMSkKKyAqCisgKiBccGFyYW0gW2luXSB2YWx1ZSBwcmVzY2FsZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X3ByZXNjYWxlcih1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUFJFU0NBTEVSX1JFRyA9IHZhbHVlOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGltZXIgcmVsb2FkIHZhbHVlCisgKgorICogXG5vdGUgVGhpcyBjaGFuZ2VzIHRoZSBzYW1lIHJlZ2lzdGVyIHZhbHVlIGFzIGh3X3RpbWVyMV9zZXRfb25lc2hvdF9kZWxheSgpIHNpbmNlIGJvdGggcGFyYW1ldGVycworICogc2hhcmUgdGhlIHNhbWUgcmVnaXN0ZXIgKHZhbHVlIGlzIGludGVycHJldGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB0aW1lciBtb2RlKS4KKyAqCisgKiBccGFyYW0gW2luXSB2YWx1ZSByZWxvYWQgdmFsdWUKKyAqCisgKiBcc2EgaHdfdGltZXIxX3NldF9vbmVzaG90X2RlbGF5CisgKiBcbm90ZSBGb3IgREExNDY4Mi8zIGNoaXBzLCBzZXR0aW5nIHRoZSByZWxvYWQgdmFsdWUgd2lsbCBhbHNvIGZyZWV6ZSB0aGUgdGltZXIgdW50aWwgYm90aAorICogcmVsb2FkIHJlZ2lzdGVycyBhcmUgc2V0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9yZWxvYWQodWludDMyX3QgdmFsdWUpCit7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpICYmIChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiAhPSAxKQorICAgICAgICBib29sIHRpbWVyMV9mcm96ZW4gPSBod190aW1lcjFfZnJvemVuKCk7CisgICAgICAgIGlmICghdGltZXIxX2Zyb3plbikgeworICAgICAgICAgICAgICAgIGh3X3RpbWVyMV9mcmVlemUoKTsKKyAgICAgICAgfQorICAgICAgICBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHID0gKHVpbnQxNl90KSB2YWx1ZTsKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUkVMT0FEX0hJR0hfUkVHID0gKHVpbnQxNl90KSB2YWx1ZSA+PiAxNjsKKyAgICAgICAgaWYgKCF0aW1lcjFfZnJvemVuKSB7CisgICAgICAgICAgICAgICAgaHdfdGltZXIxX3VuZnJlZXplKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUcgPSAodWludDE2X3QpIHZhbHVlOworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIFNldCBwdWxzZSBkZWxheSBpbiBvbmVzaG90IG1vZGUKKyAqCisgKiBcbm90ZSBUaGlzIGNoYW5nZXMgdGhlIHNhbWUgcmVnaXN0ZXIgdmFsdWUgYXMgaHdfdGltZXIxX3NldF9yZWxvYWQoKSBzaW5jZSBib3RoIHBhcmFtZXRlcnMgc2hhcmUKKyAqIHRoZSBzYW1lIHJlZ2lzdGVyICh2YWx1ZSBpcyBpbnRlcnByZXRlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGltZXIgbW9kZSkuCisgKgorICogXHBhcmFtIFtpbl0gZGVsYXkgZGVsYXkgKHRpY2tzKQorICoKKyAqIFxzYSBod190aW1lcjFfc2V0X3JlbG9hZAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfb25lc2hvdF9kZWxheSh1aW50MzJfdCBkZWxheSkKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRyA9ICh1aW50MTZfdCkgZGVsYXk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBzaG90IHdpZHRoCisgKgorICogVGhpcyBhcHBsaWVzIG9ubHkgdG8gb25lLXNob3QgbW9kZS4KKyAqCisgKiBccGFyYW0gW2luXSBkdXJhdGlvbiBzaG90IHBoYXNlIGR1cmF0aW9uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9zaG90X3dpZHRoKHVpbnQzMl90IGR1cmF0aW9uKQoreworICAgICAgICBUSU1FUjEtPkNBUFRJTV9TSE9UV0lEVEhfUkVHID0gKHVpbnQxNl90KSBkdXJhdGlvbjsKK30KKworLyoqCisgKiBcYnJpZWYgVHVybiBvbiBmcmVlIHJ1biBtb2RlIG9mIHRoZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfZnJlZXJ1bihib29sIGVuYWJsZWQpCit7CisgICAgICAgIEhXX1RJTUVSMV9SRUdfU0VURihDVFJMLCBDQVBUSU1fRlJFRV9SVU5fTU9ERV9FTiwgZW5hYmxlZCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBhIHR5cGUgb2YgdGhlIGVkZ2Ugd2hpY2ggdHJpZ2dlcnMgZXZlbnQxCisgKgorICogXHBhcmFtIFtpbl0gZWRnZSB0eXBlIG9mIGVkZ2UsIHJpc2luZyBvciBmYWxsaW5nCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9ldmVudDFfdHJpZ2dlcihIV19USU1FUjFfVFJJR0dFUiBlZGdlKQoreworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX0lOMV9FVkVOVF9GQUxMX0VOLCBlZGdlKTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGEgdHlwZSBvZiB0aGUgZWRnZSB3aGljaCB0cmlnZ2VycyBldmVudDIKKyAqCisgKiBccGFyYW0gW2luXSBlZGdlIHR5cGUgb2YgZWRnZSwgcmlzaW5nIG9yIGZhbGxpbmcKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X2V2ZW50Ml90cmlnZ2VyKEhXX1RJTUVSMV9UUklHR0VSIGVkZ2UpCit7CisgICAgICAgIEhXX1RJTUVSMV9SRUdfU0VURihDVFJMLCBDQVBUSU1fSU4yX0VWRU5UX0ZBTExfRU4sIGVkZ2UpOworfQorCisvKioKKyAqIFxicmllZiBTZXQgYSBHUElPIGlucHV0IHdoaWNoIHRyaWdnZXJzIGV2ZW50MQorICoKKyAqIFxwYXJhbSBbaW5dIGdwaW8gR1BJTyBpbnB1dAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfZXZlbnQxX2dwaW8oSFdfVElNRVIxX0dQSU8gZ3BpbykKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fR1BJTzFfQ09ORl9SRUcgPSBncGlvOworfQorCisvKioKKyAqIFxicmllZiBTZXQgYSBHUElPIGlucHV0IHdoaWNoIHRyaWdnZXJzIGV2ZW50MgorICoKKyAqIFxwYXJhbSBbaW5dIGdwaW8gR1BJTyBpbnB1dAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9zZXRfZXZlbnQyX2dwaW8oSFdfVElNRVIxX0dQSU8gZ3BpbykKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fR1BJTzJfQ09ORl9SRUcgPSBncGlvOworfQorCisvKioKKyAqIFxicmllZiBHZXQgY2xvY2sgc291cmNlIG9mIHRoZSB0aW1lcgorICoKKyAqIFxyZXR1cm4gY2xvY2sgc291cmNlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMV9DTEtfU1JDIGh3X3RpbWVyMV9nZXRfY2xrKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoQ1RSTCwgQ0FQVElNX1NZU19DTEtfRU4pOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGltZXIgY2xvY2sgcHJlc2NhbGVyCisgKgorICogQWN0dWFsIHRpbWVyIGZyZXF1ZW5jeSBpcyBccCB0aW1lcl9mcmVxID0gXHAgZnJlcV9jbG9jayAvIChccCByZXR2YWwgKyAxKQorICoKKyAqIFxyZXR1cm4gcHJlc2NhbGVyIHZhbHVlCisgKgorICogXHNhIGh3X3RpbWVyMV9nZXRfcHJlc2NhbGVyX3ZhbAorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod190aW1lcjFfZ2V0X3ByZXNjYWxlcih2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fUFJFU0NBTEVSX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRpbWVyIHJlbG9hZCB2YWx1ZQorICoKKyAqIFxyZXR1cm4gcmVsb2FkIHZhbHVlCisgKgorICogXHNhIGh3X3RpbWVyMV9zZXRfcmVsb2FkCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfcmVsb2FkKHZvaWQpCit7CisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZXQgcHVsc2UgZGVsYXkgaW4gb25lc2hvdCBtb2RlCisgKgorICogXHJldHVybiBkZWxheSAodGlja3MpCisgKgorICogXHNhIGh3X3RpbWVyMV9nZXRfb25lc2hvdF9kZWxheQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBod190aW1lcjFfZ2V0X29uZXNob3RfZGVsYXkodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBzaG90IHdpZHRoCisgKgorICogVGhpcyBhcHBsaWVzIG9ubHkgdG8gb25lLXNob3QgbW9kZS4KKyAqCisgKiBccmV0dXJuIHNob3Qgd2lkdGggdmFsdWUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfdGltZXIxX2dldF9zaG90X3dpZHRoKHZvaWQpCit7CisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9TSE9UV0lEVEhfUkVHOworfQorCisvKioKKyAqIFxicmllZiBHZXQgZnJlZS1ydW5uaW5nIG1vZGUgc3RhdGUKKyAqCisgKiBccmV0dXJuIGZyZWUtcnVubmluZyBtb2RlIHN0YXRlCisgKgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfdGltZXIxX2dldF9mcmVlcnVuKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19USU1FUjFfUkVHX0dFVEYoQ1RSTCwgQ0FQVElNX0ZSRUVfUlVOX01PREVfRU4pOworfQorCisvKioKKyAqIFxicmllZiBHZXQgYSB0eXBlIG9mIHRoZSBlZGdlIHdoaWNoIHRyaWdnZXJzIGV2ZW50MQorICoKKyAqIFxyZXR1cm4gZWRnZSB0eXBlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMV9UUklHR0VSIGh3X3RpbWVyMV9nZXRfZXZlbnQxX3RyaWdnZXIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMV9SRUdfR0VURihDVFJMLCBDQVBUSU1fSU4xX0VWRU5UX0ZBTExfRU4pOworfQorCisvKioKKyAqIFxicmllZiBHZXQgYSB0eXBlIG9mIHRoZSBlZGdlIHdoaWNoIHRyaWdnZXJzIGV2ZW50MgorICoKKyAqIFxyZXR1cm4gZWRnZSB0eXBlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMV9UUklHR0VSIGh3X3RpbWVyMV9nZXRfZXZlbnQyX3RyaWdnZXIodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMV9SRUdfR0VURihDVFJMLCBDQVBUSU1fSU4yX0VWRU5UX0ZBTExfRU4pOworfQorCisvKioKKyAqIFxicmllZiBHZXQgYSBHUElPIGlucHV0IHdoaWNoIHRyaWdnZXJzIGV2ZW50MQorICoKKyAqIFxyZXR1cm4gR1BJTyBpbnB1dAorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjFfR1BJTyBod190aW1lcjFfZ2V0X2V2ZW50MV9ncGlvKHZvaWQpCit7CisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9HUElPMV9DT05GX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IGEgR1BJTyBpbnB1dCB3aGljaCB0cmlnZ2VycyBldmVudDIKKyAqCisgKiBccmV0dXJuIEdQSU8gaW5wdXQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgSFdfVElNRVIxX0dQSU8gaHdfdGltZXIxX2dldF9ldmVudDJfZ3Bpbyh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fR1BJTzJfQ09ORl9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgY2FwdHVyZSB0aW1lIGZvciBldmVudCBvbiBHUElPMQorICoKKyAqIFxyZXR1cm4gdGltZSBmb3IgZXZlbnQgb24gR1BJTzEKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfdGltZXIxX2dldF9jYXB0dXJlMSh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fQ0FQVFVSRV9HUElPMV9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgY2FwdHVyZSB0aW1lIGZvciBldmVudCBvbiBHUElPMgorICoKKyAqIFxyZXR1cm4gdGltZSBmb3IgZXZlbnQgb24gR1BJTzIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfdGltZXIxX2dldF9jYXB0dXJlMih2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fQ0FQVFVSRV9HUElPMl9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgZGlyZWN0aW9uIG9mIHRpbWVyIGNvdW50aW5nCisgKgorICogXHBhcmFtIFtpbl0gZGlyIGNvdW50aW5nIGRpcmVjdGlvbiBvZiB0aGUgdGltZXIsIHVwIG9yIGRvd24KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X2RpcmVjdGlvbihIV19USU1FUjFfRElSIGRpcikKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9DT1VOVF9ET1dOX0VOLCBkaXIpOworfQorCisvKioKKyAqIFxicmllZiBUdXJuIG9uIG9uZSBzaG90IG1vZGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X21vZGUoSFdfVElNRVIxX01PREUgbW9kZSkKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9PTkVTSE9UX01PREVfRU4sIG1vZGUpOworfQorCisvKioKKyAqIFxicmllZiBUdXJuIG9uIGNhcHR1cmUgbW9kZQorICoKKyAqLworc3RhdGljIGlubGluZSBIV19USU1FUjFfTU9ERSBod190aW1lcjFfZ2V0X21vZGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMV9SRUdfR0VURihDVFJMLCBDQVBUSU1fT05FU0hPVF9NT0RFX0VOKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB0aWNrIGNvdW50IG9mIHRoZSB0aW1lcgorICoKKyAqIFxyZXR1cm4gY3VycmVudCB2YWx1ZSBvZiB0aGUgdGltZXIgdGlja3MKKyAqCisgKiBcc2EgaHdfdGltZXIxX2dldF9wcmVzY2FsZXJfdmFsCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfY291bnQodm9pZCkKK3sKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgKGRnX2NvbmZpZ1VTRV9BVVRPX0NISVBfREVURUNUSU9OICE9IDEpCisgICAgICAgIHVpbnQzMl90IGxvLCBoaTsKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBsbyA9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUc7CisgICAgICAgICAgICAgICAgaGkgPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9IVkFMX1JFRzsKKyAgICAgICAgfSB3aGlsZSAobG8gIT0gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRyk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgICAgICByZXR1cm4gKGhpIDw8IDE2KSB8IGxvOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUc7CisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IHBoYXNlIG9mIHRoZSBvbmUgc2hvdCBtb2RlCisgKgorICogXHJldHVybiBjdXJyZW50IHBoYXNlIG9mIHRoZSBvbmUgc2hvdCBtb2RlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1RJTUVSMV9PTkVTSE9UIGh3X3RpbWVyMV9nZXRfb25lc2hvdF9waGFzZSh2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfVElNRVIxX1JFR19HRVRGKFNUQVRVUywgQ0FQVElNX09ORVNIT1RfUEhBU0UpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgSU4xCisgKgorICogXHJldHVybiBjdXJyZW50IGxvZ2ljIGxldmVsIG9mIElOMQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3RpbWVyMV9nZXRfZ3BpbzFfc3RhdGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMV9SRUdfR0VURihTVEFUVVMsIENBUFRJTV9JTjFfU1RBVEUpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgSU4yCisgKgorICogXHJldHVybiBjdXJyZW50IGxvZ2ljIGxldmVsIG9mIElOMgorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3RpbWVyMV9nZXRfZ3BpbzJfc3RhdGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1RJTUVSMV9SRUdfR0VURihTVEFUVVMsIENBUFRJTV9JTjJfU1RBVEUpOworfQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgcHJlc2NhbGVyIGNvdW50ZXIgdmFsdWUKKyAqCisgKiBUaGlzIGlzIHZhbHVlIG9mIGludGVybmFsIGNvdW50ZXIgdXNlZCBmb3IgcHJlc2NhbGluZy4gSXQgY2FuIGJlIHVzZWQgdG8gaGF2ZSBmaW5lciBncmFudWxhcml0eQorICogd2hlbiByZWFkaW5nIHRpbWVyIHZhbHVlLgorICoKKyAqIEZvciByZWFkaW5nIGN1cnJlbnQgc2V0dGluZyBvZiBwcmVzY2FsZXIsIHNlZSBod190aW1lcjFfZ2V0X3ByZXNjYWxlcigpLgorICoKKyAqIFxyZXR1cm4gY3VycmVudCBwcmVzY2FsZXIgY291bnRlciB2YWx1ZQorICoKKyAqIFxzYSBod190aW1lcjFfZ2V0X2NvdW50CisgKiBcc2EgaHdfdGltZXIxX2dldF9wcmVzY2FsZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdGltZXIxX2dldF9wcmVzY2FsZXJfdmFsKHZvaWQpCit7CisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9QUkVTQ0FMRVJfVkFMX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIuCisgKgorICogXHBhcmFtIFtpbl0gaGFuZGxlciBmdW5jdGlvbiBwb2ludGVyIHRvIGhhbmRsZXIgdG8gY2FsbCB3aGVuIGFuIGludGVycnVwdCBvY2N1cnMKKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX3JlZ2lzdGVyX2ludChod190aW1lcjFfaGFuZGxlcl9jYiBoYW5kbGVyKTsKKworLyoqCisgKiBcYnJpZWYgVW5yZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqLwordm9pZCBod190aW1lcjFfdW5yZWdpc3Rlcl9pbnQodm9pZCk7CisKKyNlbHNlIC8vIChkZ19jb25maWdVU0VSX0NBTl9VU0VfVElNRVIxID09IDApCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZGVmaW5lIExQX0NOVF9SRUdfUkFOR0UgICAgICAgICggMTYgKQorI2Vsc2UKKyNkZWZpbmUgTFBfQ05UX1JFR19SQU5HRSAgICAgICAgKCAzMiApCisjZW5kaWYKKyNkZWZpbmUgTFBfQ05UX01BWF9WQUxVRSAgICAgICAgKCAoMVVMTCA8PCBMUF9DTlRfUkVHX1JBTkdFKSAtIDEgKQorI2RlZmluZSBMUF9DTlRfUFJFU0NBTEVEX01BU0sgICAoIExQX0NOVF9NQVhfVkFMVUUgKQorI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNkZWZpbmUgTFBfQ05UX05BVElWRV9NQVNLICAgICAgKCAoMVVMTCA8PCAoTFBfQ05UX1JFR19SQU5HRSArIGRnX2NvbmZpZ1RpbTFQcmVzY2FsZXJCaXRSYW5nZSkpIC0gMSApCisjZWxzZQorI2RlZmluZSBMUF9DTlRfTkFUSVZFX01BU0sgICAgICAoICgxVUxMIDw8IChMUF9DTlRfUkVHX1JBTkdFKSkgLSAxICkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgdGltZXIgYXMgdGljayB0aW1lcgorICoKKyAqIFxkZXRhaWxzIFNldHVwIFRpbWVyMSBmb3IgdXNlIGFzIGEgdGljayB0aW1lcjoKKyAqICAgICAgICAgPHVsPgorICogICAgICAgICAgICAgIDxsaT4gdXNlIExQIGNsb2NrIGFuZCBwcmVzY2FsZXIgKGlmIGNvbmZpZ3VyZWQpCisgKiAgICAgICAgICAgICAgPGxpPiBmcmVlIHJ1bm5pbmcgbW9kZQorICogICAgICAgICAgICAgIDxsaT4gSVJRIG1hc2tlZAorICogICAgICAgICAgICAgIDxsaT4gdXAgY291bnRlcgorICogICAgICAgICAgICAgIDxsaT4gdGltZXIgbW9kZQorICogICAgICAgICAgICAgIDxsaT4gZGlzYWJsZWQKKyAqICAgICAgICAgPC91bD4KKyAqCisgKi8KK3ZvaWQgaHdfdGltZXIxX2xwX2Nsa19pbml0KHZvaWQpOworCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBpbnRlcnJ1cHQKKyAqCisgKiBccmV0dXJuIHZvaWQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfaW50X2VuYWJsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfaW50X2VuYWJsZSh2b2lkKQoreworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX0lSUV9FTiwgMSk7CisgICAgICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFNXVElNMV9JUlFuKTsKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoU1dUSU0xX0lSUW4pOworfQorCisKKy8qKgorICogXGJyaWVmIERpc2FibGUgaW50ZXJydXB0CisgKgorICogXHJldHVybiB2b2lkCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX2ludF9kaXNhYmxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9pbnRfZGlzYWJsZSh2b2lkKQoreworICAgICAgICBOVklDX0Rpc2FibGVJUlEoU1dUSU0xX0lSUW4pOworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX0lSUV9FTiwgMCk7Cit9CisKKworLyoqCisgKiBcYnJpZWYgR2V0IGNvdW50ZXIncyB2YWx1ZQorICoKKyAqIFxyZXR1cm4gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvdW50ZXIgKHByZXNjYWxlZCkuCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfdmFsdWUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfdmFsdWUodm9pZCkKK3sKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9USU1FUl9WQUxfUkVHOworI2Vsc2UKKyAgICAgICAgdWludDMyX3QgbG8sIGhpOworICAgICAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGxvID0gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRzsKKyAgICAgICAgICAgICAgICBoaSA9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX0hWQUxfUkVHOworICAgICAgICB9IHdoaWxlIChsbyAhPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9WQUxfUkVHKTsKKyAgICAgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisgICAgICAgIHJldHVybiAoaGkgPDwgMTYpIHwgbG87CisjZW5kaWYKK30KKworCisvKioKKyAqIFxicmllZiBNYWNybyB0byBnZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRpbWVyLCBib3RoIHByZXNjYWxlZCBhbmQgaW4gTFAgY2xvY2sgY3ljbGVzLgorICoKKyAqIFxkZXRhaWxzIFNwZWNpYWwgY2FyZSBpcyBuZWVkZWQgd2hlbiBhIHByZXNjYWxlciBpcyB1c2VkLiBJbiB0aGlzIGNhc2UsIHRoZQorICogICAgICAgICBjb3VudGluZyBzZXF1ZW5jZSBpcyB0aGUgZm9sbG93aW5nIChhc3N1bWluZ2EgcHJlc2NhbGVyIG9mIDMpOgorICogICAgICAgICBwcmVzY2FsZXI6IDAgIDEgIDIgIDMgIDAgIDEgIDIgIDMgIDAKKyAqICAgICAgICAgY291bnRlcjogICAwICAgICAgICAgICAxICAgICAgICAgICAyCisgKgorICogICAgICAgICBJZiBub3QgaW1wbGVtZW50ZWQgcHJvcGVybHkgdGhlbiB0aGUgZm9sbG93aW5nIG1heSBoYXBwZW46CisgKiAgICAgICAgIC0gbGV0J3MgYXNzdW1lIHRoYXQgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHswLCAzfSBwZXJpb2QKKyAqICAgICAgICAgLSB0aGUgY291bnRlcidzIHZhbHVlIGlzIHJlYWQgYW5kIHRoZSByZXN1bHQgaXMgMAorICogICAgICAgICAtIGF0IHRoYXQgbW9tZW50LCB0aGUgY291bnRlciBpbmNyZWFzZXMgaXQncyBwcmVzY2FsZXIgdmFsdWUgKGFuZCB0aGUgY291bnRlcidzIHZhbHVlCisgKiAgICAgICAgICAgcmVzcGVjdGl2ZWx5KSwgc28gdGhlIHRpbWUgYmVjb21lcyB7MSwgMH0KKyAqICAgICAgICAgLSB0aGUgcmVhZGluZyBvZiB0aGUgcHJlc2NhbGVyJ3MgdmFsdWUgd2lsbCBnaXZlIDAgYnV0IHswLCAwfSBpcyBlYXJsaWVyIHRoYW4gezAsIDN9ICh3aGVuCisgKiAgICAgICAgICAgdGhlIG9wZXJhdGlvbiBzdGFydGVkKSBhbmQgdGhpcyBtYXkgcmVzdWx0IGluIGVycm9ycyBpbiB0aW1lIGNvbXB1dGF0aW9ucy4KKyAqIFxub3RlIFRoaXMgbWFjcm8gc2hvdWxkIGJlIHVzZWQgaW5zaWRlIGEgY3JpdGljYWwgc2VjdGlvbi4KKyAqCisgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZGVmaW5lIEhXX1RJTUVSMV9HRVRfSU5TVEFOVChwcmVzY2FsZWQsIGZpbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChkZ19jb25maWdUaW0xUHJlc2NhbGVyICE9IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdWludDMyX3QgcHJlc2NhbGVyX3Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzY2FsZXJfdiA9IFRJTUVSMS0+Q0FQVElNX1BSRVNDQUxFUl9WQUxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzY2FsZWQgPSBUSU1FUjEtPkNBUFRJTV9USU1FUl9WQUxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSB3aGlsZSAocHJlc2NhbGVyX3YgIT0gVElNRVIxLT5DQVBUSU1fUFJFU0NBTEVSX1ZBTF9SRUcpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZmluZSA9ICggKHVpbnQzMl90KXByZXNjYWxlZCAqICgxICsgZGdfY29uZmlnVGltMVByZXNjYWxlcikgKyBwcmVzY2FsZXJfdik7ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcHJlc2NhbGVkID0gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZmluZSA9IHByZXNjYWxlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgSFdfVElNRVIxX0dFVF9JTlNUQU5UKHByZXNjYWxlZCwgZmluZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdWludDMyX3QgbG8sIGhpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsbyA9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX1ZBTF9SRUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBoaSA9IFRJTUVSMS0+Q0FQVElNX1RJTUVSX0hWQUxfUkVHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAobG8gIT0gVElNRVIxLT5DQVBUSU1fVElNRVJfVkFMX1JFRyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJlc2NhbGVkID0gZmluZSA9IChoaSA8PCAxNikgfCBsbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZW5kaWYKKy8qKgorICogXGJyaWVmIE1hY3JvIHRvIHNldCB0aGUgdHJpZ2dlciB2YWx1ZS4gVGhlIHByZXZpb3VzIHRyaWdnZXIgdmFsdWUgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAqIFxub3RlIEZvciBEQTE0NjgyLzMgY2hpcHMsIHRoaXMgbWFjcm8gd2lsbCBkaXNhYmxlIHRpbWVyMSBpbnRlcnJ1cHQgdW50aWwgcmVsb2FkIHJlZ2lzdGVycworICogcHJvZ3JhbW1lZCBzbyB0aGF0IGZhbHNlIGludGVycnVwdHMgYXJlIGF2b2lkZWQuCisgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZGVmaW5lIEhXX1RJTUVSMV9TRVRfVFJJR0dFUih2YWx1ZSwgbGFzdF92YWx1ZSkgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsYXN0X3ZhbHVlID0gVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRzsgICAgICAgICBcCisgICAgICAgIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUcgPSB2YWx1ZTsgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBIV19USU1FUjFfU0VUX1RSSUdHRVIodmFsdWUsIGxhc3RfdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBib29sIHRpbWVyMV9pcnFfZW4gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRJTUVSMS0+Q0FQVElNX0NUUkxfUkVHICYgVElNRVIxX0NBUFRJTV9DVFJMX1JFR19DQVBUSU1fSVJRX0VOX01zayA/IHRydWUgOiBmYWxzZTsgXAorICAgICAgICBsYXN0X3ZhbHVlID0gVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICgodWludDMyX3QpIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9ISUdIX1JFRykgPDwgMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodGltZXIxX2lycV9lbikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRJTUVSMS0+Q0FQVElNX0NUUkxfUkVHICY9IH5USU1FUjFfQ0FQVElNX0NUUkxfUkVHX0NBUFRJTV9JUlFfRU5fTXNrOyAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUSU1FUjEtPkNBUFRJTV9SRUxPQURfUkVHID0gKHVpbnQxNl90KSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUSU1FUjEtPkNBUFRJTV9SRUxPQURfSElHSF9SRUcgPSAodWludDE2X3QpICgodmFsdWUpID4+IDE2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodGltZXIxX2lycV9lbikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRJTUVSMS0+Q0FQVElNX0NUUkxfUkVHIHw9IFRJTUVSMV9DQVBUSU1fQ1RSTF9SRUdfQ0FQVElNX0lSUV9FTl9Nc2s7ICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiBHZXQgdHJpZ2dlciB2YWx1ZQorICoKKyAqIFxyZXR1cm4gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRyaWdnZXIgKHByZXNjYWxlZCkuCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGh3X3RpbWVyMV9nZXRfdHJpZ2dlcih2b2lkKQoreworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgcmV0dXJuIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9SRUc7CisjZWxzZQorICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fUkVMT0FEX1JFRyB8ICgodWludDMyX3QpIFRJTUVSMS0+Q0FQVElNX1JFTE9BRF9ISUdIX1JFRykgPDwgMTY7CisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IGFuICJpbnZhbGlkIiB0cmlnZ2VyIHZhbHVlLCB3aGljaCByZWZlcnMgZmFyIGF3YXkgaW4gdGhlIGZ1dHVyZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9pbnZhbGlkYXRlX3RyaWdnZXIodm9pZCkgIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9pbnZhbGlkYXRlX3RyaWdnZXIodm9pZCkKK3sKKyAgICAgICAgdWludDMyX3QgbHBfY3VycmVudF90aW1lOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlc2NhbGVkCisgICAgICAgIHVpbnQzMl90IHRyaWdnZXI7CisgICAgICAgIHVpbnQzMl90IGR1bW15IF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworCisgICAgICAgIGxwX2N1cnJlbnRfdGltZSA9IGh3X3RpbWVyMV9nZXRfdmFsdWUoKTsgICAgICAgIC8vIEdldCBjdXJyZW50IHRpbWUKKyAgICAgICAgdHJpZ2dlciA9IChscF9jdXJyZW50X3RpbWUgLSAxKSAmIExQX0NOVF9QUkVTQ0FMRURfTUFTSzsgIC8vIEdldCBhbiAiaW52YWxpZCIgdHJpZ2dlcgorICAgICAgICBIV19USU1FUjFfU0VUX1RSSUdHRVIodHJpZ2dlciwgZHVtbXkpOyAgICAgICAgICAvLyBNb3ZlIHRyaWdnZXIgdG9vIGZhciBpbiB0aGUgZnV0dXJlIHNvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm8gaW50ZXJydXB0IGZyb20gdGhlIHRpbWVyIGFycml2ZXMuCit9CisKKyNlbmRpZiAvLyBkZ19jb25maWdVU0VSX0NBTl9VU0VfVElNRVIxCisKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIHRoZSB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3RpbWVyMV9lbmFibGUodm9pZCkKK3sKKyAgICAgICAgSFdfVElNRVIxX1JFR19TRVRGKENUUkwsIENBUFRJTV9FTiwgMSk7CisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMV9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSB0aGUgdGltZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfZGlzYWJsZSh2b2lkKQoreworICAgICAgICBIV19USU1FUjFfUkVHX1NFVEYoQ1RSTCwgQ0FQVElNX0VOLCAwKTsKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIxX0VOQUJMRSk7CisgICAgICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorCisvKioKKyAqIFxicmllZiBUaW1lciBQV00gY29uZmlndXJhdGlvbgorICoKKyAqIFNob3J0Y3V0IHRvIGNhbGwgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4KKyAqCisgKiBccGFyYW0gW2luXSBjZmcgY29uZmlndXJhdGlvbgorICoKKyAqLwordm9pZCBod190aW1lcjFfY29uZmlndXJlX3B3bShjb25zdCB0aW1lcjFfY29uZmlnX3B3bSAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IFBXTSBmcmVxdWVuY3kgcHJlc2NhbGVyCisgKgorICogQWN0dWFsIFBXTSBmcmVxdWVuY3kgaXMgXHAgcHdtX2ZyZXEgPSBccCB0aW1lcl9mcmVxIC8gKFxwIHZhbHVlICsgMSkKKyAqCisgKiBccGFyYW0gW2luXSB2YWx1ZSBQV00gZnJlcXVlbmN5IGRlZmluZWQgYXMgYWJvdmUKKyAqCisgKiBcc2EgaHdfdGltZXIxX3NldF9wcmVzY2FsZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod190aW1lcjFfc2V0X3B3bV9mcmVxKHVpbnQxNl90IHZhbHVlKQoreworICAgICAgICBUSU1FUjEtPkNBUFRJTV9QV01fRlJFUV9SRUcgPSB2YWx1ZTsKK30KKworLyoqCisgKiBcYnJpZWYgU2V0IFBXTSBkdXR5IGN5Y2xlCisgKgorICogQWN0dWFseSBQV00gZHV0eSBjeWNsZSBpcyBccCBwd21fZGMgPSBccCB2YWx1ZSAvIChccCBwd21fZnJlcSArIDEpCisgKgorICogXHBhcmFtIFtpbl0gdmFsdWUgUFdNIGR1dHkgY3ljbGUgZGVmaW5lZCBhcyBhYm92ZQorICoKKyAqIFxzYSBod190aW1lcjFfc2V0X3B3bV9mcmVxCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdGltZXIxX3NldF9wd21fZHV0eV9jeWNsZSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICAgICAgVElNRVIxLT5DQVBUSU1fUFdNX0RDX1JFRyA9IHZhbHVlOworfQorCisvKioKKyAqIFxicmllZiBHZXQgUFdNIGZyZXF1ZW5jeSBwcmVzY2FsZXIKKyAqCisgKiBBY3R1YWwgUFdNIGZyZXF1ZW5jeSBpcyBccCBwd21fZnJlcSA9IFxwIHRpbWVyX2ZyZXEgLyAoXHAgcmV0dmFsICsgMSkKKyAqCisgKiBccmV0dXJuIFBXTSBmcmVxdWVuY3kgYXMgZGVmaW5lZCBhYm92ZQorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod190aW1lcjFfZ2V0X3B3bV9mcmVxKHZvaWQpCit7CisgICAgICAgIHJldHVybiBUSU1FUjEtPkNBUFRJTV9QV01fRlJFUV9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBQV00gZHV0eSBjeWNsZQorICoKKyAqIEFjdHVhbHkgUFdNIGR1dHkgY3ljbGUgaXMgXHAgcHdtX2RjID0gXHAgcmV0dmFsIC8gKFxwIHB3bV9mcmVxICsgMSkKKyAqCisgKiBccmV0dXJuIFBXTSBkdXR5IGN5Y2xlIGFzIGRlZmluZWQgYWJvdmUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdGltZXIxX2dldF9wd21fZHV0eV9jeWNsZSh2b2lkKQoreworICAgICAgICByZXR1cm4gVElNRVIxLT5DQVBUSU1fUFdNX0RDX1JFRzsKK30KKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19USU1FUjEgKi8KKworI2VuZGlmIC8qIEhXX1RJTUVSMV9IXyAqLworCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190cm5nLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3RybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjA5MjQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od190cm5nLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfdHJuZy5oCisgKgorICogQGJyaWVmIERlZmluaXRpb24gb2YgQVBJIGZvciB0aGUgVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgSFdfVFJOR19IXworI2RlZmluZSBIV19UUk5HX0hfCisKKyNpZiBkZ19jb25maWdVU0VfSFdfVFJORworCisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworLyoqCisgKiBcYnJpZWYgVFJORyBjYWxsYmFjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVFJORyBkcml2ZXIgd2hlbiB0aGUgaW50ZXJydXB0IGlzIGZpcmVkLgorICoKKyAqIFxub3RlIElmIHRoZSBUUk5HIGlzIG5vdCBuZWVkZWQgYW55bW9yZSB0aGUgaHdfdHJuZ19kaXNhYmxlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byBzYXZlIHBvd2VyLgorICoKKyAqLwordHlwZWRlZiB2b2lkICgqaHdfdHJuZ19jYikodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFRSTkcgZW5hYmxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgVFJORy4gSWYgY2FsbGJhY2sgaXMgbm90IE5VTEwgaXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIFRSTkcgaW50ZXJydXB0CisgKiBvY2N1cnMuIFRoZSBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFRSTkcgRklGTyBpcyBmdWxsLgorICoKKyAqIFxwYXJhbSBbaW5dIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgVFJORyBpbnRlcnJ1cHQgb2NjdXJzLgorICoKKyAqIFxub3RlIElmIHRoZSBhbW91bnQgb2YgcmFuZG9tIG51bWJlcnMgbmVlZGVkIGlzIGxlc3MgdGhhbiB0aGUgY29udGVudHMgb2YgdGhlIEZJRk8gaXQgaXMgZmFzdGVyCisgKiBhbmQgbW9yZSBwb3dlciBlZmZpY2llbnQgdG8gdXNlIGEgd2FpdCBsb29wIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGh3X3RybmdfZ2V0X2ZpZm9fbGV2ZWwKKyAqIGZ1bmN0aW9uLiBJZiB0aGUgRklGTyBoYXMgdGhlIHJlcXVpcmVkIGxldmVsIHVzZSB0aGUgaHdfdHJuZ19nZXRfbnVtYmVycyBmdW5jdGlvbiB0byBnZXQgdGhlCisgKiByYW5kb20gbnVtYmVycy4KKyAqCisgKi8KK3ZvaWQgaHdfdHJuZ19lbmFibGUoaHdfdHJuZ19jYiBjYWxsYmFjayk7CisKKy8qKgorICogXGJyaWVmIEdldCBhIHJhbmRvbSBudW1iZXIgZnJvbSBUUk5HLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgYSByYW5kb20gbnVtYmVyIGZyb20gdGhlIFRSTkcgRklGTy4KKyAqCisgKiBccmV0dXJuIEEgMzItYml0IHVuc2lnbmVkIHJhbmRvbSBudW1iZXIuCisgKgorICogXHdhcm5pbmcgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgbnVtYmVyIGF2YWlsYWJpbGl0eSBpbiB0aGUgRklGTworICoKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgaHdfdHJuZ19nZXRfbnVtYmVyKHZvaWQpCit7CisgICAgICAgIHJldHVybiAqKCh2b2xhdGlsZSB1aW50MzJfdCAqKU1FTU9SWV9UUk5HX0ZJRk8pOworfQorCisvKioKKyAqIFxicmllZiBHZXQgcmFuZG9tIG51bWJlcnMgZnJvbSBUUk5HLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBidWZmZXIgd2l0aCByYW5kb20gbnVtYmVycyByZWFkIGZyb20gdGhlIFRSTkcgRklGTy4KKyAqCisgKiBccGFyYW0gW2luXSBidWZmZXIgVGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgbnVtYmVycyB0by4KKyAqIFxwYXJhbSBbaW5dIHNpemUgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobWF4IDMyKS4KKyAqCisgKiBcbm90ZSBEbyBub3QgZm9yZ2V0IHRvIGRpc2FibGUgdGhlIFRSTkcgYWZ0ZXIgcmVhZGluZyB0aGUgYW1vdW50IG9mIG51bWJlcnMgbmVlZGVkIHRvIHNhdmUKKyAqIHBvd2VyLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIG51bWJlciBhdmFpbGFiaWxpdHkgaW4gdGhlIEZJRk8KKyAqCisgKi8KK3ZvaWQgaHdfdHJuZ19nZXRfbnVtYmVycyh1aW50MzJfdCogYnVmZmVyLCB1aW50OF90IHNpemUpOworCisvKioKKyAqIFxicmllZiBUUk5HIGdldCBGSUZPIGxldmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgVFJORyBGSUZPLgorICoKKyAqIFxyZXR1cm4gVGhlIGN1cnJlbnQgbGV2ZWwgb2YgdGhlIFRSTkcgRklGTy4KKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB1aW50OF90IGh3X3RybmdfZ2V0X2ZpZm9fbGV2ZWwodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFRSTkcgZGlzYWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIFRSTkcsIGRpc2FibGVzIGl0cyBjbG9jayBhbmQgaXRzIGludGVycnVwdC4KKyAqCisgKi8KK3ZvaWQgaHdfdHJuZ19kaXNhYmxlKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTdG9wIFRSTkcgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdHJuZ19zdG9wKHZvaWQpCit7CisgICAgICAgIFJFR19DTFJfQklUKFRSTkcsIFRSTkdfQ1RSTF9SRUcsIFRSTkdfRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBUUk5HIGNsb2NrLgorICovCit2b2lkIGh3X3RybmdfZGlzYWJsZV9jbGsodm9pZCk7CisKKy8qKgorICogXGJyaWVmIERpc2FibGUgVFJORyBpbnRlcnJ1cHQuCisgKi8KK3ZvaWQgaHdfdHJuZ19kaXNhYmxlX2ludGVycnVwdCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQ2xlYXIgVFJORyBwZW5kaW5nIGludGVycnVwdC4KKyAqLwordm9pZCBod190cm5nX2NsZWFyX3BlbmRpbmcodm9pZCk7CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfVFJORyAqLworCisjZW5kaWYgLyogSFdfVFJOR19IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3VhcnQuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODg1MzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9pbmNsdWRlL2h3X3VhcnQuaApAQCAtMCwwICsxLDEyNTAgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFVBUlQKKyAqIFx7CisgKiBcYnJpZWYgVUFSVCBDb250cm9sbGVyCisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod191YXJ0LmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBVQVJUIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19VQVJUX0hfCisjZGVmaW5lIEhXX1VBUlRfSF8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19VQVJUCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKyNpbmNsdWRlICJod19kbWEuaCIKKworI2lmbmRlZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorIyAgZGVmaW5lIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCTEKKyNlbmRpZgorCisjZGVmaW5lIFVCQShpZCkgICAgICAgICAoKFVBUlQyX1R5cGUgKilpZCkKKyNkZWZpbmUgSFdfVUFSVDEgICAgICAgICgodWludDE2X3QgKilVQVJUX0JBU0UpCisjZGVmaW5lIEhXX1VBUlQyICAgICAgICAoKHVpbnQxNl90ICopVUFSVDJfQkFTRSkKK3R5cGVkZWYgdWludDE2X3QgKiBIV19VQVJUX0lEOworCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbWFzayBvZiBhIGZpZWxkIG9mIGEgVUFSVCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBpbnN0YW5jZSBpZGVudGlmaWVzIHRoZSBVQVJUIGluc3RhbmNlIHRvIHVzZSAoZW1wdHk6IFVBUlQsIDI6IFVBUlQyKQorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKiBcbm90ZSBUaGUgc3RyaXBwZWQgcmVnaXN0ZXIgbmFtZSBzaG91bGQgYmUgcHJvdmlkZWQsIGUuZy46CisgKiAgICAgICAgLSB0byBnZXQgVUFSVF9VQVJUX1VTUl9SRUdfVUFSVF9CVVNZX01zaywgdXNlCisgKiAgICAgICAgICAgICAgSFdfVUFSVF9SRUdfRklFTERfTUFTSygsIFVTUiwgVUFSVF9CVVNZKQorICogICAgICAgIC0gdG8gZ2V0IFVBUlQyX1VBUlQyX1NGRV9SRUdfVUFSVF9TSEFET1dfRklGT19FTkFCTEVfTXNrLCB1c2UKKyAqICAgICAgICAgICAgICBIV19VQVJUX1JFR19GSUVMRF9NQVNLKDIsIFNGRSwgVUFSVF9TSEFET1dfRklGT19FTkFCTEUpCisgKgorICovCisjZGVmaW5lIEhXX1VBUlRfUkVHX0ZJRUxEX01BU0soaW5zdGFuY2UsIHJlZywgZmllbGQpIFwKKyAgICAgICAgKFVBUlQjI2luc3RhbmNlIyNfVUFSVCMjaW5zdGFuY2UjI18jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGJpdCBwb3NpdGlvbiBvZiBhIGZpZWxkIG9mIGEgVUFSVCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBpbnN0YW5jZSBpZGVudGlmaWVzIHRoZSBVQVJUIGluc3RhbmNlIHRvIHVzZSAoZW1wdHk6IFVBUlQsIDI6IFVBUlQyKQorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKiBcbm90ZSBUaGUgc3RyaXBwZWQgcmVnaXN0ZXIgbmFtZSBzaG91bGQgYmUgcHJvdmlkZWQsIGUuZy46CisgKiAgICAgICAgLSB0byBnZXQgVUFSVF9VQVJUX1VTUl9SRUdfVUFSVF9CVVNZX1BvcywgdXNlCisgKiAgICAgICAgICAgICAgSFdfVUFSVF9SRUdfRklFTERfUE9TKCwgVVNSLCBVQVJUX0JVU1kpCisgKiAgICAgICAgLSB0byBnZXQgVUFSVDJfVUFSVDJfU0ZFX1JFR19VQVJUX1NIQURPV19GSUZPX0VOQUJMRV9Qb3MsIHVzZQorICogICAgICAgICAgICAgIEhXX1VBUlRfUkVHX0ZJRUxEX1BPUygyLCBTRkUsIFVBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFKQorICoKKyAqLworI2RlZmluZSBIV19VQVJUX1JFR19GSUVMRF9QT1MoaW5zdGFuY2UsIHJlZywgZmllbGQpIFwKKyAgICAgICAgKFVBUlQjI2luc3RhbmNlIyNfVUFSVCMjaW5zdGFuY2UjI18jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgb2YgYSBVQVJUIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIGlkIGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZmllbGQKKyAqCisgKi8KKyNkZWZpbmUgSFdfVUFSVF9SRUdfR0VURihpZCwgcmVnLCBmaWVsZCkgXAorICAgICAgICAgICAgICAgICgoVUJBKGlkKS0+VUFSVDJfIyNyZWcjI19SRUcgJiAoVUFSVDJfVUFSVDJfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpID4+IChVQVJUMl9VQVJUMl8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfUG9zKSkKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkIG9mIGEgVUFSVCByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBpZCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSByZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIGFjY2VzcworICogXHBhcmFtIFtpbl0gZmllbGQgaXMgdGhlIHJlZ2lzdGVyIGZpZWxkIHRvIHdyaXRlCisgKiBccGFyYW0gW2luXSBuZXdfdmFsIGlzIHRoZSB2YWx1ZSB0byB3cml0ZQorICoKKyAqLworI2RlZmluZSBIV19VQVJUX1JFR19TRVRGKGlkLCByZWcsIGZpZWxkLCBuZXdfdmFsKSBcCisgICAgICAgICAgICAgICAgVUJBKGlkKS0+VUFSVDJfIyNyZWcjI19SRUcgPSAoKFVCQShpZCktPlVBUlQyXyMjcmVnIyNfUkVHICYgfihVQVJUMl9VQVJUMl8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSkgfCBcCisgICAgICAgICAgICAgICAgKChVQVJUMl9VQVJUMl8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKSAmICgobmV3X3ZhbCkgPDwgKFVBUlQyX1VBUlQyXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpKSkpCisKKworCisvKgorICogRU5VTUVSQVRJT04gREVGSU5JVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qKgorICogXGJyaWVmIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBjb2RlcworICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVUFSVF9JTlRfTU9ERU1fU1RBVCAgICAgICAgID0gMCwKKyAgICAgICAgSFdfVUFSVF9JTlRfTk9fSU5UX1BFTkQgICAgICAgID0gMSwKKyAgICAgICAgSFdfVUFSVF9JTlRfVEhSX0VNUFRZICAgICAgICAgID0gMiwKKyAgICAgICAgSFdfVUFSVF9JTlRfUkVDRUlWRURfQVZBSUxBQkxFID0gNCwKKyAgICAgICAgSFdfVUFSVF9JTlRfUkVDRUlWRV9MSU5FX1NUQVQgID0gNiwKKyAgICAgICAgSFdfVUFSVF9JTlRfQlVTWV9ERVRFQ1RFRCAgICAgID0gNywKKyAgICAgICAgSFdfVUFSVF9JTlRfVElNRU9VVCAgICAgICAgICAgID0gMTIsCit9IEhXX1VBUlRfSU5UOworCisvKioKKyAqIFxicmllZiBCYXVkIHJhdGVzIGRpdmlkZXJzCisgKgorICogVGhlIGRlZmluZWQgdmFsdWVzIGNvbXByaXNlIHRoZSB2YWx1ZXMgb2YgMyByZWdpc3RlcnM6IERMSCwgRExMLCBETEYuCisgKiBUaGUgZW5jb2Rpbmcgb2YgdGhlIHZhbHVlcyBmb3IgZWFjaCByZWdpc3RlciBpczoKKyAqCisgKiArLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgKiB8IHVudXNlZCB8ICAgRExIICB8ICAgRExMICB8ICAgRExGICB8CisgKiArLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19VQVJUX0JBVURSQVRFXzEwMDAwMDAgICA9IDB4MDAwMDAxMDAsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfNTAwMDAwICAgID0gMHgwMDAwMDIwMCwKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV8yMzA0MDAgICAgPSAweDAwMDAwNDA1LAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzExNTIwMCAgICA9IDB4MDAwMDA4MGIsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfNTc2MDAgICAgID0gMHgwMDAwMTEwNiwKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV8zODQwMCAgICAgPSAweDAwMDAxYTAxLAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzI4ODAwICAgICA9IDB4MDAwMDIyMGMsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfMTkyMDAgICAgID0gMHgwMDAwMzQwMSwKKyAgICAgICAgSFdfVUFSVF9CQVVEUkFURV8xNDQwMCAgICAgPSAweDAwMDA0NTA3LAorICAgICAgICBIV19VQVJUX0JBVURSQVRFXzk2MDAgICAgICA9IDB4MDAwMDY4MDMsCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEVfNDgwMCAgICAgID0gMHgwMDAwZDAwNSwKK30gSFdfVUFSVF9CQVVEUkFURTsKKworLyoqCisgKiBcYnJpZWYgQ2hhcmFjdGVyIGZvcm1hdAorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVUFSVF9EQVRBQklUU181ICAgICAgICA9IDAsCisgICAgICAgIEhXX1VBUlRfREFUQUJJVFNfNiAgICAgICAgPSAxLAorICAgICAgICBIV19VQVJUX0RBVEFCSVRTXzcgICAgICAgID0gMiwKKyAgICAgICAgSFdfVUFSVF9EQVRBQklUU184ICAgICAgICA9IDMsCit9IEhXX1VBUlRfREFUQUJJVFM7CisKKy8qKgorICogXGJyaWVmIFBhcml0eQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVUFSVF9QQVJJVFlfTk9ORSAgICAgPSAwLAorICAgICAgICBIV19VQVJUX1BBUklUWV9PREQgICAgICA9IDEsCisgICAgICAgIEhXX1VBUlRfUEFSSVRZX0VWRU4gICAgID0gMywKK30gSFdfVUFSVF9QQVJJVFk7CisKKy8qKgorICogXGJyaWVmIFN0b3AgYml0cworICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfVUFSVF9TVE9QQklUU18xID0gMCwKKyAgICAgICAgLyoqPCBUaGUgbnVtYmVyIG9mIHN0b3AgYml0cyBpcyAxLjUgaWYgYSBjaGFyYWN0ZXIgZm9ybWF0IHdpdGggNSBiaXQgaXMgY2hvc2VuICovCisgICAgICAgIEhXX1VBUlRfU1RPUEJJVFNfMiA9IDEsICAgICAgICAgLyoqPCBTdG9wIGJpdCAyICovCit9IEhXX1VBUlRfU1RPUEJJVFM7CisKKy8qKgorICogXGJyaWVmIFVBUlQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvLyBCYXVkIHJhdGUgZGl2aXNvcgorICAgICAgICBIV19VQVJUX0JBVURSQVRFICAgICAgICBiYXVkX3JhdGU7CisgICAgICAgIEhXX1VBUlRfREFUQUJJVFMgICAgICAgIGRhdGE6MjsKKyAgICAgICAgSFdfVUFSVF9QQVJJVFkgICAgICAgICAgcGFyaXR5OjI7CisgICAgICAgIEhXX1VBUlRfU1RPUEJJVFMgICAgICAgIHN0b3A6MTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgYXV0b19mbG93X2NvbnRyb2w6MTsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgdXNlX2RtYToxOworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICB1c2VfZmlmbzoxOworCisgICAgICAgIEhXX0RNQV9DSEFOTkVMICAgICAgICAgIHR4X2RtYV9jaGFubmVsOjQ7CisgICAgICAgIEhXX0RNQV9DSEFOTkVMICAgICAgICAgIHJ4X2RtYV9jaGFubmVsOjQ7Cit9IHVhcnRfY29uZmlnOworCisvKioKKyAqIFxicmllZiBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGRlZmluaXRpb24gKGV4dGVuZGVkIHZlcnNpb24pCisgKgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIC8vIEJhdWQgcmF0ZSBkaXZpc29yCisgICAgICAgIEhXX1VBUlRfQkFVRFJBVEUgICAgICAgIGJhdWRfcmF0ZTsKKyAgICAgICAgSFdfVUFSVF9EQVRBQklUUyAgICAgICAgZGF0YToyOworICAgICAgICBIV19VQVJUX1BBUklUWSAgICAgICAgICBwYXJpdHk6MjsKKyAgICAgICAgSFdfVUFSVF9TVE9QQklUUyAgICAgICAgc3RvcDoxOworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBhdXRvX2Zsb3dfY29udHJvbDoxOworICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICB1c2VfZG1hOjE7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHVzZV9maWZvOjE7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHR4X2ZpZm9fdHJfbHZsOjI7CisgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHJ4X2ZpZm9fdHJfbHZsOjI7CisKKyAgICAgICAgSFdfRE1BX0NIQU5ORUwgICAgICAgICAgdHhfZG1hX2NoYW5uZWw6NDsKKyAgICAgICAgSFdfRE1BX0NIQU5ORUwgICAgICAgICAgcnhfZG1hX2NoYW5uZWw6NDsKK30gdWFydF9jb25maWdfZXg7CisKKyNpZmRlZiBIV19VQVJUX0VOQUJMRV9VU0VSX0lTUgorLyoqCisgKiBcYnJpZWYgVXNlciBkZWZpbmVkIGludGVycnVwdCBmdW5jdGlvbgorICoKKyAqIFVzZXIgY29kZSBkb2VzIG5vdCBuZWVkIHRvIGhhbmRsZSBpbnRlcnJ1cHRzLiBJbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIuCisgKiBJZiBmb3Igc29tZSByZWFzb24gdGhlIHVzZXIgbmVlZCB0byBoYW5kbGUgaW50ZXJydXB0cyBkaWZmZXJlbnRseSBpdCBpcyBwb3NzaWJsZSB0bworICogc2V0IGEgZGlmZmVyZW50IElTUiB2aWEgaHdfdWFydF9zZXRfaXNyKHVhcnRfaWQsIHVzZXJfaXNyKS4KKyAqIEluIHRoYXQgY2FzZSwgdGhlIHVzZXItZGVmaW5lZCBJU1IgbXVzdCBoYW5kbGUgYWxsIFVBUlQgaW50ZXJydXB0cyBhcyByZXF1aXJlZC4KKyAqCisgKiBcc2EgaHdfdWFydF9zZXRfaXNyCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpod191YXJ0X2ludGVycnVwdF9pc3IpKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXR1cCB1c2VyIGRlZmluZWQgaW50ZXJydXB0IGZ1bmN0aW9uIGZvciB1YXJ0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQKKyAqIFxwYXJhbSBbaW5dIGlzciB1c2VyIGRlZmluZWQgaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9zZXRfaXNyKEhXX1VBUlRfSUQgdWFydCwgaHdfdWFydF9pbnRlcnJ1cHRfaXNyIGlzcik7CisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgqaHdfdWFydF90eF9jYWxsYmFjaykodm9pZCAqdXNlcl9kYXRhLCB1aW50MTZfdCB3cml0dGVuKTsKK3R5cGVkZWYgdm9pZCAoKmh3X3VhcnRfcnhfY2FsbGJhY2spKHZvaWQgKnVzZXJfZGF0YSwgdWludDE2X3QgcmVhZCk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT0gU3RhdHVzIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgYSBzZXJpYWwgdHJhbnNmZXIgaXMgaW5wcm9ncmVzcworICoKKyAqIFxyZXR1cm4gdHJ1ZSBvciBmYWxzZQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaHdfdWFydF9pc19idXN5KEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgVVNSLCBVQVJUX0JVU1kpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PSBSZWFkL1dyaXRlIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIFxicmllZiBSZWFkIG9uZSBieXRlIGZyb20gVUFSVAorICoKKyAqIFRoaXMgaXMgYmxvY2tpbmcgZnVuY3Rpb24gdG8gcmVhZCBzaW5nbGUgYnl0ZSBmcm9tIFVBUlQuCisgKiBVQVJUIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0aGUgcmVjZWl2ZWQgYnl0ZQorICoKKyAqLwordWludDhfdCBod191YXJ0X3JlYWQoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgV3JpdGUgb25lIGJ5dGUgdG8gVUFSVAorICoKKyAqIEZ1bmN0aW9uIHdhaXQgdGlsbCBvdXRwdXQgRklGTyBoYXMgZW1wdHkgc3BhY2UgYWNjb3JkaW5nIHRvCisgKiB0aHJlc2hvbGQgbGV2ZWwsIGFuZCBwdXRzIGJ5dGUgdG8gYmUgdHJhbnNtaXR0ZWQuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBkYXRhIGJ5dGUgdG8gYmUgd3JpdHRlbgorICoKKyAqLwordm9pZCBod191YXJ0X3dyaXRlKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBkYXRhKTsKKworLyoqCisgKiBcYnJpZWYgU3RvcCBhc3luY2hyb25vdXMgcmVhZCBmcm9tIFVBUlQKKyAqCisgKiBJZiB0aGVyZSBpcyBvdXRzdGFuZGluZyByZWFkIG9uIGdpdmVuIFVBUlQgaXQgd2lsbCBiZSBzdG9wcGVkLgorICogQ2FsbGJhY2sgd2lsbCBiZSBmaXJlZCB3aXRoIGRhdGEgYWxyZWFkeSBwcmVzZW50IGluIGJ1ZmZlci4KKyAqIENhbGxiYWNrIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaW4gdGhlIG1lYW50aW1lIGJ1dCB3aWxsIGJlIGNhbGxlZAorICogb25seSBvbmNlLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlY2VpdmVkCisgKgorICovCit1aW50MTZfdCBod191YXJ0X2Fib3J0X3JlY2VpdmUoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgR2V0IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgcmVjZWl2ZWQgYnkgYXN5bmNocm9ub3VzIHJlYWQKKyAqCisgKiBJZiB0aGVyZSBpcyBvdXRzdGFuZGluZyByZWFkIG9uIGdpdmVuIFVBUlQgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YKKyAqIGJ5dGUgY3VycmVudGx5IHJlY2VpdmVkLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqLwordWludDE2X3QgaHdfdWFydF9wZWVrX3JlY2VpdmVkKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIFJlYWQgcmVjZWl2ZSBidWZmZXIgcmVnaXN0ZXIKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRoZSByZWFkIGJ5dGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod191YXJ0X3J4ZGF0YV9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgLy8gUmVhZCBlbGVtZW50IGZyb20gdGhlIHJlY2VpdmUgRklGTworICAgICAgICByZXR1cm4gVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUc7Cit9CisKKy8qKgorICogXGJyaWVmIFdyaXRlIGJ5dGUgdG8gdGhlIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGRhdGEgYnl0ZSB0byBiZSB3cml0dGVuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF90eGRhdGFfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgZGF0YSkKK3sKKyAgICAgICAgLy8gV3JpdGUgZGF0YSB0byB0aGUgdHJhbnNtaXQgRklGTworICAgICAgICBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRyA9IGRhdGE7Cit9CisKKy8qKgorICogXGJyaWVmIFdyaXRlcyBudW1iZXIgb2YgYnl0ZXMgdG8gVUFSVCBzeW5jaHJvbm91c2x5CisgKgorICogVGhpcyBmdW5jdGlvbiBmaW5pc2hlcyB3aGVuIGFsbCBkYXRhIGlzIHB1dCBpbiBGSUZPLiBJdCBkb2VzIG5vdCB3YWl0IGZvciBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkCisgKiBvdXQgZnJvbSBVQVJULiBDYWxsIFxzYSBod191YXJ0X2lzX3R4X2ZpZm9fZW1wdHkoKSB0byB3YWl0IGZvciB0cmFuc21pc3Npb24gdG8gZmluaXNoLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgaW50ZXJydXB0cyBub3IgRE1BLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gZGF0YSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIFxwYXJhbSBbaW5dIGxlbiBsZW5ndGggb2YgdG8gYmUgd3JpdHRlbgorICoKKyAqLwordm9pZCBod191YXJ0X3dyaXRlX2J1ZmZlcihIV19VQVJUX0lEIHVhcnQsIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IGxlbik7CisKKy8qKgorICogXGJyaWVmIFdyaXRlcyBudW1iZXIgb2YgYnl0ZXMgdG8gVUFSVAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gZGF0YSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIFxwYXJhbSBbaW5dIGxlbiBsZW5ndGggb2YgdG8gYmUgd3JpdHRlbgorICogXHBhcmFtIFtpbl0gY2IgZnVuY3Rpb24gdG8gY2FsbCBmcm9tIGludGVycnVwdCB3aGVuIHRyYW5zbWlzc2lvbiBlbmRzCisgKiBccGFyYW0gW2luXSB1c2VyX2RhdGEgcGFyYW1ldGVyIHBhc3NlZCB0byBjYiBmdW5jdGlvbgorICoKKyAqLwordm9pZCBod191YXJ0X3NlbmQoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4sIGh3X3VhcnRfdHhfY2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogXGJyaWVmIFJlYWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gVUFSVCBzeW5jaHJvbm91c2x5CisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyB0byByZWNlaXZlIFxwIGxlbiBieXRlcyBmcm9tIFVBUlQuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSBpbnRlcnJ1cHRzIG5vdCBETUEsIGl0IGp1c3Qgd2FpdHMgZm9yIGFsbCBkYXRhIHRvIGFyaXZlLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtvdXRdIGRhdGEgYnVmZmVyIGZvciBpbmNvbWluZyBkYXRhCisgKiBccGFyYW0gW2luXSBsZW4gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9yZWFkX2J1ZmZlcihIV19VQVJUX0lEIHVhcnQsIHZvaWQgKmRhdGEsIHVpbnQxNl90IGxlbik7CisKKy8qKgorICogXGJyaWVmIFJlYWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gVUFSVAorICoKKyAqIEZ1bmN0aW9uIGluaXRpYWxpemVzIFVBUlQgZm9yIHJlY2VpdmluZyBkYXRhLgorICogV2hlbiBccCBsZW4gZGF0YSBpcyByZWNlaXZlZCBvciB0aW1lb3V0IG9jY3VycyB1c2VyIHByb3ZpZGVkIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQgd2l0aAorICogbnVtYmVyIG9mIGJ5dGVzIHJlYWQgc28gZmFyLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtvdXRdIGRhdGEgYnVmZmVyIGZvciBpbmNvbWluZyBkYXRhCisgKiBccGFyYW0gW2luXSBsZW4gbWF4IG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBccGFyYW0gW2luXSBjYiBmdW5jdGlvbiB0byBjYWxsIGZyb20gaW50ZXJydXB0IHdoZW4gZGF0YSBpcyByZWNlaXZlZAorICogXHBhcmFtIFtpbl0gdXNlcl9kYXRhIHBhcmFtZXRlciBwYXNzZWQgdG8gY2IgZnVuY3Rpb24KKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9yZWNlaXZlKEhXX1VBUlRfSUQgdWFydCwgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuLCBod191YXJ0X3J4X2NhbGxiYWNrIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisjaWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKworLyoqCisgKiBcYnJpZWYgQXNzaWduIERNQSBjaGFubmVsIHRvIFVBUlQgcnggYW5kIHR4CisgKgorICogRnVuY3Rpb24gc3BlY2lmaWVzIERNQSBjaGFubmVsIHRvIHVzZSBmb3Igc3BlY2lmaWVkIFVBUlQgcnggYW5kIHR4IEZJRk8uCisgKiBJdCB3aWxsIHNldHVwIGNoYW5uZWwgb25seSBpZiB0aGVyZSBpcyBubyB0cmFuc21pc3Npb24gaW4gcHJvZ3Jlc3MuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBjaGFubmVsIGlkIG9mIERNQSBjaGFubmVsIHRvIHVzZSBmb3IgcngsCisgKiAgICAgICAgICAgICAgICAgICAgIHR4IHdpbGwgdXNlIG5leHQgY2hhbm5lbCwKKyAqICAgICAgICAgICAgICAgICAgICAgLTEgaWYgRE1BIHNob3VsZCBub3QgYmUgdXNlZAorICogXHBhcmFtIFtpbl0gcHJpIHByaW9yaXR5IERNQV9QUklPXzAgKGxvd2VzdCksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uLi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfUFJJT183IChoaWdoZXN0KQorICoKKyAqLwordm9pZCBod191YXJ0X3NldF9kbWFfY2hhbm5lbHMoSFdfVUFSVF9JRCB1YXJ0LCBpbnQ4X3QgY2hhbm5lbCwgSFdfRE1BX1BSSU8gcHJpKTsKKworLyoqCisgKiBcYnJpZWYgQXNzaWduIERNQSBjaGFubmVsIHRvIFVBUlQgcnggYW5kIHR4CisgKgorICogRnVuY3Rpb24gc3BlY2lmaWVzIERNQSBjaGFubmVsIHRvIHVzZSBmb3Igc3BlY2lmaWVkIFVBUlQgcnggYW5kIHR4IEZJRk8uCisgKiBJdCB3aWxsIHNldHVwIGNoYW5uZWwgb25seSBpZiB0aGVyZSBpcyBubyB0cmFuc21pc3Npb24gaW4gcHJvZ3Jlc3MuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSB0eF9jaGFubmVsIGlkIG9mIERNQSBjaGFubmVsIHRvIHVzZSBmb3IgdHg6CisgKiAJCQkJCUhXX0RNQV9DSEFOTkVMXzAuLkhXX0RNQV9DSEFOTkVMX0lOVkFMSUQKKyAqIFxwYXJhbSBbaW5dIHJ4X2NoYW5uZWwgaWQgb2YgRE1BIGNoYW5uZWwgdG8gdXNlIGZvciByeDoKKyAqIAkJCQkJSFdfRE1BX0NIQU5ORUxfMC4uSFdfRE1BX0NIQU5ORUxfSU5WQUxJRAorICogXHBhcmFtIFtpbl0gcHJpIHByaW9yaXR5IERNQV9QUklPXzAgKGxvd2VzdCksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uLi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfUFJJT183IChoaWdoZXN0KQorICoKKyAqLwordm9pZCBod191YXJ0X3NldF9kbWFfY2hhbm5lbHNfZXgoSFdfVUFSVF9JRCB1YXJ0LCBpbnQ4X3QgdHhfY2hhbm5lbCwgaW50OF90IHJ4X2NoYW5uZWwsIEhXX0RNQV9QUklPIHByaSk7CisjZW5kaWYKKworLy89PT09PT09PT09PT09PSBJbnRlcnJ1cHQgaGFuZGxpbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBSZWNlaXZlZCBEYXRhIEF2YWlsYWJsZSBpbnRlcnJ1cHQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHJlY2RhdGFhdmFpbCBzaG91bGQgYmUgMCB0byBkaXNhYmxlIGFuZCAxIHRvIGVuYWJsZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfcmVjX2RhdGFfaW50X3NldChIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgcmVjZGF0YWF2YWlsKQoreworICAgICAgICAvLyBTZXQgRVJCRkkgYml0IGluIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgICAgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBJRVJfRExILCBFUkJGSV9kbGgwLCByZWNkYXRhYXZhaWwpOworfQorLyoqCisgKiBcYnJpZWYgU2V0IHRoZSBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIGVtcHR5IGludGVycnVwdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gdHhlbXB0eSBzaG91bGQgYmUgMCB0byBkaXNhYmxlIGFuZCAxIHRvIGVuYWJsZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfdHhfZW1wdHlfaW50X3NldChIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgdHhlbXB0eSkKK3sKKyAgICAgICAgLy8gU2V0IEVUQkVJIGJpdCBpbiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgSUVSX0RMSCwgRVRCRUlfZGxoMSwgdHhlbXB0eSk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgTGluZSBTdGF0dXMgaW50ZXJydXB0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBsaW5lc3RhdCBzaG91bGQgYmUgMCB0byBkaXNhYmxlIGFuZCAxIHRvIGVuYWJsZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfbGluZXN0YXRfaW50X3NldChIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgbGluZXN0YXQpCit7CisgICAgICAgIC8vIFNldCBFTFNJIGJpdCBpbiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICAgICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgSUVSX0RMSCwgRUxTSV9kaGwyLCBsaW5lc3RhdCk7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgUHJvZ3JhbW1hYmxlIFRIUkUgaW50ZXJydXB0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBwdGhyZSBzaG91bGQgYmUgMCB0byBkaXNhYmxlIGFuZCAxIHRvIGVuYWJsZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfcHRocmVfaW50X3NldChIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgcHRocmUpCit7CisgICAgICAgIC8vIFNldCBQVElNRSBiaXQgaW4gSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgorICAgICAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIElFUl9ETEgsIFBUSU1FX2RsaDcsIHB0aHJlKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBJbnRlcnJ1cHQgSUQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIGludGVycnVwdCB0eXBlCisgKgorICovCitzdGF0aWMgaW5saW5lIEhXX1VBUlRfSU5UIGh3X3VhcnRfZ2V0X2ludGVycnVwdF9pZChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIHJldHVybiAoSFdfVUFSVF9JTlQpIChVQkEodWFydCktPlVBUlQyX0lJUl9GQ1JfUkVHICYgMHhGKTsKK30KKworLyoqCisgKiBcYnJpZWYgV3JpdGUgU2NyYXRjaCBwYWQgcmVnaXN0ZXIKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuCisgKgorICogL3dhcm5pbmcgUmVzZXJ2ZWQgd2hlbiByZXRhcmdldCBpcyB1c2VkIGVsc2UgaXQgaXMgZnJlZSB0byB1c2UuCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF93cml0ZV9zY3IoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHZhbHVlKQoreworICAgICAgICBVQkEodWFydCktPlVBUlQyX1NDUl9SRUcgPSB2YWx1ZTsKK30KKworLyoqCisgKiBcYnJpZWYgUmVhZCBTY3JhdGNoIHBhZCByZWdpc3RlcgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiBcd2FybmluZyBSZXNlcnZlZCB3aGVuIHJldGFyZ2V0IGlzIHVzZWQgZWxzZSBpdCBpcyBmcmVlIHRvIHVzZS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod191YXJ0X3JlYWRfc2NyKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgcmV0dXJuIFVCQSh1YXJ0KS0+VUFSVDJfU0NSX1JFRzsKK30KKworLy89PT09PT09PT09PT09PT09PT09PSBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBiYXVkIHJhdGUgc2V0dGluZworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gYmF1ZCByYXRlIG9mIHNwZWNpZmllZCB1YXJ0CisgKgorICovCitIV19VQVJUX0JBVURSQVRFIGh3X3VhcnRfYmF1ZHJhdGVfZ2V0KEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgYmF1ZCByYXRlCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBiYXVkX3JhdGUgdWFydCBiYXVkIHJhdGUKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9iYXVkcmF0ZV9zZXQoSFdfVUFSVF9JRCB1YXJ0LCBIV19VQVJUX0JBVURSQVRFIGJhdWRfcmF0ZSk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IEZJRk8gY29udHJvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIHRoZXJlIGlzIGRhdGEgYXZhaWxhYmxlIGZvciByZWFkCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGRhdGEgdG8gcmVjZWl2ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfaXNfZGF0YV9yZWFkeShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIHJldHVybiAoVUJBKHVhcnQpLT5VQVJUMl9MU1JfUkVHICYgMSkgIT0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBGSUZPIG1vZGUgc2V0dGluZworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBGSUZPIGlzIGVuYWJsZWQgKGJvdGggdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyKQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfaXNfZmlmb19lbmFibGVkKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgLyogT25seSBVQVJUMiBoYXMgYSBGSUZPICovCisgICAgICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKworICAgICAgICByZXR1cm4gVUFSVDItPlVBUlQyX1NGRV9SRUcgIT0gMDsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBib3RoIEZJRk9zCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9kaXNhYmxlX2ZpZm8oSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICB1aW50MTZfdCBpaXJfZmNyX3JlZyA9IFVCQSh1YXJ0KS0+VUFSVDJfSUlSX0ZDUl9SRUc7CisgICAgICAgIGlpcl9mY3JfcmVnICY9IDB4ZmZmZTsKKyAgICAgICAgVUJBKHVhcnQpLT5VQVJUMl9JSVJfRkNSX1JFRyA9IGlpcl9mY3JfcmVnOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgYm90aCBGSUZPcworICoKKyAqIFRocmVzaG9sZHMgc2hvdWxkIGJlIHNldCBiZWZvcmUgZm9yIHByZWRpY3RhYmxlIHJlc3VsdHMuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9lbmFibGVfZmlmbyhIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICAgICAgVUFSVDItPlVBUlQyX1NGRV9SRUcgPSAxIDw8IEhXX1VBUlRfUkVHX0ZJRUxEX1BPUygyLCBTRkUsIFVBUlRfU0hBRE9XX0ZJRk9fRU5BQkxFKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgcmVjZWl2ZSBGSUZPIGlzIG5vdCBlbXB0eQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBGSUZPIGlzIG5vdCBlbXB0eQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfcmVjZWl2ZV9maWZvX25vdF9lbXB0eShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisgICAgICAgIHJldHVybiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIFVTUiwgVUFSVF9SRk5FKSAhPSAwOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0cmFuc21pdCBGSUZPIGlzIG5vdCBmdWxsCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0cnVlIGlmIEZJRk8gaXMgZnVsbAorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfdHJhbnNtaXRfZmlmb19ub3RfZnVsbChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisgICAgICAgIHJldHVybiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIFVTUiwgVUFSVF9URk5GKSAhPSAwOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayBpZiB0cmFuc21pdCBGSUZPIGlzIGVtcHR5CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0cnVlIGlmIEZJRk8gZW1wdHkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBod191YXJ0X3RyYW5zbWl0X2ZpZm9fZW1wdHkoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBVU1IsIFVBUlRfVEZFKSAhPSAwOworfQorCisKKy8qKgorICogXGJyaWVmIFJlYWQgbnVtYmVyIG9mIGJ5dGUgaW4gcmVjZWl2ZSBGSUZPCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBudW1iZXIgb2YgYnl0ZSBpbiByZWNlaXZlIEZJRk8KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgaHdfdWFydF9yZWNlaXZlX2ZpZm9fY291bnQoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworCisgICAgICAgIHJldHVybiBVQVJUMi0+VUFSVDJfUkZMX1JFRzsKK30KKworLyoqCisgKiBcYnJpZWYgUmVhZCBudW1iZXIgb2YgYnl0ZSBpbiB0cmFuc21pdCBGSUZPCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBudW1iZXIgb2YgYnl0ZSBpbiB0cmFuc21pdCBGSUZPCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGh3X3VhcnRfdHJhbnNtaXRfZmlmb19jb3VudChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICAgICAgcmV0dXJuIFVBUlQyLT5VQVJUMl9URkxfUkVHOworfQorCisvKioKKyAqIFxicmllZiBFbmFibGUgbG9vcGJhY2sKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X2VuYWJsZV9sb29wYmFjayhIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX0xCLCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgRGlzYWJsZSBsb29wYmFjaworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfZGlzYWJsZV9sb29wYmFjayhIV19VQVJUX0lEIHVhcnQpCit7CisgICAgICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX0xCLCAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBGSUZPIG1vZGUgc2V0dGluZworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdGhlIEZJRk8gbW9kZSB0aGF0IGhhcyBiZWVuIHNldCBpbiB0aGUgRklGTyBDb250cm9sIFJlZ2lzdGVyOgorICogICAgICAgICAwID0gRklGTyBtb2RlIGRpc2FibGVkLAorICogICAgICAgICAxID0gRklGTyBtb2RlIGVuYWJsZWQKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9maWZvX2VuX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgdGhlIFVBUlQgRklGTyBtb2RlCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBlbiBzaG91bGQgYmUgMCB0byBkaXNhYmxlIGFuZCAxIHRvIGVuYWJsZSBGSUZPIG1vZGUKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X2ZpZm9fZW5fc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgZW4pCit7CisgICAgICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgICAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisgICAgICAgIC8vIFdyaXRlIEZJRk8gRW5hYmxlIChGSUZPRSkgYml0IGluIEZJRk8gQ29udHJvbCBSZWdpc3RlcgorICAgICAgICB1aW50MTZfdCBpaXJfZmNyX3JlZyA9IFVCQSh1YXJ0KS0+VUFSVDJfSUlSX0ZDUl9SRUc7CisgICAgICAgIGlpcl9mY3JfcmVnICY9IH4weDE7CisgICAgICAgIGlpcl9mY3JfcmVnIHw9IChlbiAmIDB4MSk7CisgICAgICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUlSX0ZDUl9SRUcgPSBpaXJfZmNyX3JlZzsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSByZWNlaXZlIEZJRk8gdHJpZ2dlciBsZXZlbCBhdCB3aGljaCB0aGUKKyAqICAgICAgICBSZWNlaXZlZCBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0aGUgcmVjZWl2ZSBGSUZPIHRyaWdnZXIgbGV2ZWw6CisgKiAgICAgICAgIDAgPSAxIGNoYXJhY3RlciBpbiB0aGUgRklGTywKKyAqICAgICAgICAgMSA9IEZJRk8gMS80IGZ1bGwsCisgKiAgICAgICAgIDIgPSBGSUZPIDEvMiBmdWxsLAorICogICAgICAgICAzID0gRklGTyAyIGxlc3MgdGhhbiBmdWxsCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfdWFydF9yeF9maWZvX3RyX2x2bF9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgLyogT25seSBVQVJUMiBoYXMgYSBGSUZPICovCisgICAgICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKyAgICAgICAgcmV0dXJuIFVBUlQyLT5VQVJUMl9TUlRfUkVHICYgVUFSVDJfVUFSVDJfU1JUX1JFR19VQVJUX1NIQURPV19SQ1ZSX1RSSUdHRVJfTXNrOworfQorCisvKioKKyAqIFxicmllZiBTZXQgdGhlIHJlY2VpdmUgRklGTyB0cmlnZ2VyIGxldmVsIGF0IHdoaWNoIHRoZQorICogICAgICAgIFJlY2VpdmVkIERhdGEgQXZhaWxhYmxlIEludGVycnVwdCBpcyBnZW5lcmF0ZWQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHRyX2x2bCBUaGUgcmVjZWl2ZSBGSUZPIHRyaWdnZXIgbGV2ZWw6CisgKiAgICAgICAgICAgICAgICAgICAgMCA9IDEgY2hhcmFjdGVyIGluIHRoZSBGSUZPLAorICogICAgICAgICAgICAgICAgICAgIDEgPSBGSUZPIDEvNCBmdWxsLAorICogICAgICAgICAgICAgICAgICAgIDIgPSBGSUZPIDEvMiBmdWxsLAorICogICAgICAgICAgICAgICAgICAgIDMgPSBGSUZPIDIgbGVzcyB0aGFuIGZ1bGwKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3J4X2ZpZm9fdHJfbHZsX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHRyX2x2bCkKK3sKKyAgICAgICAgLyogT25seSBVQVJUMiBoYXMgYSBGSUZPICovCisgICAgICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKworICAgICAgICBVQVJUMi0+VUFSVDJfU1JUX1JFRyA9IHRyX2x2bDsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB0cmFuc21pdCBGSUZPIHRyaWdnZXIgbGV2ZWwgYXQgd2hpY2ggdGhlCisgKiAgICAgICAgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSAoVEhSRSkgSW50ZXJydXB0IGlzIGdlbmVyYXRlZAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdGhlIHRyYW5zbWl0IEZJRk8gdHJpZ2dlciBsZXZlbDoKKyAqICAgICAgICAgMCA9IEZJRk8gZW1wdHksCisgKiAgICAgICAgIDEgPSAyIGNoYXJhY3RlcnMgaW4gdGhlIEZJRk8sCisgKiAgICAgICAgIDIgPSBGSUZPIDEvNCBmdWxsLAorICogICAgICAgICAzID0gRklGTyAxLzIgZnVsbAorICoKKyAqLwordWludDhfdCBod191YXJ0X3R4X2ZpZm9fdHJfbHZsX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgU2V0IHRoZSB0cmFuc21pdCBGSUZPIHRyaWdnZXIgbGV2ZWwgYXQgd2hpY2ggdGhlCisgKiAgICAgICAgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSAoVEhSRSkgSW50ZXJydXB0IGlzIGdlbmVyYXRlZAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gdHJfbHZsIHRoZSB0cmFuc21pdCBGSUZPIHRyaWdnZXIgbGV2ZWw6CisgKiAgICAgICAgICAgICAgICAgICAgMCA9IEZJRk8gZW1wdHksCisgKiAgICAgICAgICAgICAgICAgICAgMSA9IDIgY2hhcmFjdGVycyBpbiB0aGUgRklGTywKKyAqICAgICAgICAgICAgICAgICAgICAyID0gRklGTyAxLzQgZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgICAzID0gRklGTyAxLzIgZnVsbAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfdHhfZmlmb190cl9sdmxfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgdHJfbHZsKQoreworICAgICAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICAgICAgQVNTRVJUX0VSUk9SKHVhcnQgPT0gSFdfVUFSVDIpOworCisgICAgICAgIFVBUlQyLT5VQVJUMl9TVEVUX1JFRyA9IHRyX2x2bDsKK30KKworLyoqCisgKiBcYnJpZWYgUmVzZXQgVUFSVCB0cmFuc21pdCBGSUZPCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF90eF9maWZvX2ZsdXNoKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBTUlIsIFVBUlRfWEZSLCAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmVzZXQgVUFSVCByZWNlaXZlIEZJRk8KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3J4X2ZpZm9fZmx1c2goSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIFNSUiwgVUFSVF9SRlIsIDEpOworfQorCisvKioKKyAqIFxicmllZiBDaGVjayB3aGV0aGVyIHJlYWRpbmcgYnVmZmVyIGlzIGVtcHR5CisgKgorICogV29ya3MgZm9yIGJvdGggd2hlbiBSeCBGSUZPIGlzIGVuYWJsZWQgb3Igbm90LgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBubyBkYXRhIGF2YWlsYWJsZSBmb3IgcmVhZGluZworICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfcmVhZF9idWZfZW1wdHkoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICByZXR1cm4gIUhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX0RSKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgd2hldGhlciB3cml0aW5nIGJ1ZmZlciBpcyBmdWxsCisgKgorICogV29ya3MgZm9yIGJvdGggd2hlbiBUeCBGSUZPIGlzIGVuYWJsZWQgb3Igbm90LgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiB0cmFuc21pdCBidWZmZXIgaXMgZnVsbAorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3VhcnRfd3JpdGVfYnVmX2Z1bGwoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgICAgICByZXR1cm4gIUhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX1RIUkUpOworfQorCisjaWYgZGdfY29uZmlnVUFSVF9TT0ZUV0FSRV9GSUZPCisvKioKKyAqIFxicmllZiBTZXQgYnVmZmVyIHRoYXQgd2lsbCBiZSB1c2UgZm9yIGluY29taW5nIGRhdGEgd2hlbiB0aGVyZSBpcyBubyByZWFkIGluIHByb2dyZXNzCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBidWYgYnVmZmVyIHRvIHVzZSBhcyBzb2Z0d2FyZSBGSUZPCisgKiBccGFyYW0gW2luXSBzaXplIHNpemUgb2YgXHAgYnVmCisgKgorICovCit2b2lkIGh3X3VhcnRfc2V0X3NvZnRfZmlmbyhIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCBzaXplKTsKKyNlbmRpZgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBETUEgY29udHJvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIFxicmllZiBTZXQgVUFSVCBETUEgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gZG1hX21vZGUgRE1BIG1vZGUgMCBvciAxCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9kbWFfbW9kZV9zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBkbWFfbW9kZSkKK3sKKyAgICAgICAgLyogT25seSBVQVJUMiBoYXMgdGhlIFNETUFNIHJlZ2lzdGVyICovCisgICAgICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKworICAgICAgICBVQVJUMi0+VUFSVDJfU0RNQU1fUkVHID0gKChkbWFfbW9kZSAmIDEpIDw8IFVBUlQyX1VBUlQyX1NETUFNX1JFR19VQVJUX1NIQURPV19ETUFfTU9ERV9Qb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgVUFSVDJfVUFSVDJfU0RNQU1fUkVHX1VBUlRfU0hBRE9XX0RNQV9NT0RFX01zazsKK30KKworLyoqCisgKiBcYnJpZWYgQ2xlYXIgRE1BIHJlcXVlc3QKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X2NsZWFyX2RtYV9yZXF1ZXN0KEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAgICAgVUJBKHVhcnQpLT5VQVJUMl9ETUFTQV9SRUcgPSAxOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBMaW5lIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgU2V0IFVBUlQgbGluZSBzZXR0aW5ncworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSBVQVJUIHJlZ2lzdGVycyB3aXRoIGdpdmVuIGNvbmZpZ3VyYXRpb24uCisgKiBJdCBhbHNvIGluaXRpYWxpemVzIGFsbCBpbnRlcm5hbCBzb2Z0d2FyZSB2YXJpYWJsZXMgZm9yIGJ1ZmZlcmVkIHRyYW5zbWlzc2lvbnMuCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKiBccGFyYW0gW2luXSBjZmcgcG9pbnRlciB0byB0aGUgVUFSVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqLwordm9pZCBod191YXJ0X2luaXQoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB1YXJ0X2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgU2V0IFVBUlQgbGluZSBzZXR0aW5ncworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZSBVQVJUIHJlZ2lzdGVycyB3aXRoIGdpdmVuIGNvbmZpZ3VyYXRpb24sCisgKiBpbmNsdWRpbmcgdHggYW5kIHJ4IGZpZm8gdHJpZ2dlciBsZXZlbHMKKyAqIEl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIGludGVybmFsIHNvZnR3YXJlIHZhcmlhYmxlcyBmb3IgYnVmZmVyZWQgdHJhbnNtaXNzaW9ucy4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGNmZyBwb2ludGVyIHRvIHRoZSBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICovCit2b2lkIGh3X3VhcnRfaW5pdF9leChIV19VQVJUX0lEIHVhcnQsIGNvbnN0IHVhcnRfY29uZmlnX2V4ICpjZmcpOworCisvKioKKyAqIFxicmllZiBSZS1pbml0aWFsaXplIFVBUlQgcmVnaXN0ZXJzCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSByZS1hcHBsaWVkLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZQorICogY2FsbGVkIGFmdGVyIHBsYXRmb3JtIGV4aXRzIHBvd2VyIHNsZWVwIG1vZGUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdWFydF9pbml0LCBidXQgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSBzb2Z0d2FyZSB2YXJpYWJsZXMKKyAqIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBjb250cm9sIGl0IGp1c3QgcmUtYXBwbGllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLgorICogSXQgd2lsbCB0dXJuIG9uIGludGVycnVwdHMgaWYgdHJhbnNtaXNzaW9uIHdhcyBpbiBwcm9ncmVzcy4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGNmZyBwb2ludGVyIHRvIHRoZSBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICovCit2b2lkIGh3X3VhcnRfcmVpbml0KEhXX1VBUlRfSUQgdWFydCwgY29uc3QgdWFydF9jb25maWcgKmNmZyk7CisKKy8qKgorICogXGJyaWVmIFJlLWluaXRpYWxpemUgVUFSVCByZWdpc3RlcnMKKyAqCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIHJlLWFwcGxpZWQsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisgKiBjYWxsZWQgYWZ0ZXIgcGxhdGZvcm0gZXhpdHMgcG93ZXIgc2xlZXAgbW9kZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB1YXJ0X2luaXRfZXgsIGJ1dCBpdCBkb2VzIG5vdCBpbml0aWFsaXplIHNvZnR3YXJlIHZhcmlhYmxlcworICogdXNlZCBmb3IgdHJhbnNtaXNzaW9uIGNvbnRyb2wgaXQganVzdCByZS1hcHBsaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCisgKiBJdCB3aWxsIHR1cm4gb24gaW50ZXJydXB0cyBpZiB0cmFuc21pc3Npb24gd2FzIGluIHByb2dyZXNzLgorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gY2ZnIHBvaW50ZXIgdG8gdGhlIFVBUlQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9yZWluaXRfZXgoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB1YXJ0X2NvbmZpZ19leCAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IFVBUlQgbGluZSBzZXR0aW5ncworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gY2ZnIHBvaW50ZXIgdG8gdGhlIFVBUlQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqLwordm9pZCBod191YXJ0X2NmZ19nZXQoSFdfVUFSVF9JRCB1YXJ0LCB1YXJ0X2NvbmZpZyAqY2ZnKTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTW9kZW0gY29udHJvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSBJckRBIFNJUiBtb2RlIHNldHRpbmcKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIElyREEgU0lSIG1vZGU6CisgKiAgICAgICAgIDAgPSBJckRBIFNJUiBtb2RlIGRpc2FibGVkLAorICogICAgICAgICAxID0gSXJEQSBTSVIgbW9kZSBlbmFibGVkCisgKgorICovCit1aW50OF90IGh3X3VhcnRfc2lyZV9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgSXJEQSBTSVIgbW9kZQorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICogXHBhcmFtIFtpbl0gc2lyZSAwID0gZGlzYWJsZSBJckRBIFNJUiBtb2RlLAorICogICAgICAgICAgICAgICAgICAxID0gZW5hYmxlIElyREEgU0lSIG1vZGUKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9zaXJlX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHNpcmUpOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIEF1dG8gRmxvdyBDb250cm9sIEVuYWJsZSAoQUZDRSkgc2V0dGluZworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gQXV0byBGbG93IENvbnRyb2wgRW5hYmxlIChBRkNFKToKKyAqICAgICAgICAgMCA9IEF1dG8gRmxvdyBDb250cm9sIE1vZGUgZGlzYWJsZWQsCisgKiAgICAgICAgIDEgPSBBdXRvIEZsb3cgQ29udHJvbCBNb2RlIGVuYWJsZWQKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9hZmNlX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgQXV0byBGbG93IENvbnRyb2wKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGFmY2UgQXV0byBGbG93IENvbnRyb2wgRW5hYmxlIChBRkNFKToKKyAqICAgICAgICAgICAgICAgICAgMCA9IGRpc2FibGUgQXV0byBGbG93IENvbnRyb2wgTW9kZSwKKyAqICAgICAgICAgICAgICAgICAgMSA9IGVuYWJsZSBBdXRvIEZsb3cgQ29udHJvbCBNb2RlCisgKgorICovCit2b2lkIGh3X3VhcnRfYWZjZV9zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBhZmNlKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IFVBUlQgZGlhZ25vc3RpYyBtb2RlIHN0YXR1cworICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBsb29wIGJhY2sgYml0CisgKgorICovCit1aW50OF90IGh3X3VhcnRfbG9vcGJhY2tfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBTZXQgVUFSVCBpbiBkaWFnbm9zdGljIG1vZGUKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGxiIGxvb3AgYmFjayBiaXQgdmFsdWUKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9sb29wYmFja19zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBsYik7CisKKy8qKgorICogXGJyaWVmIEdldCBSVFMgb3V0cHV0IHZhbHVlCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBSVFMgb3V0cHV0IHZhbHVlCisgKgorICovCit1aW50OF90IGh3X3VhcnRfcnRzX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgU2V0IFJUUyBvdXRwdXQgdmFsdWUKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIHJ0c24gVmFsdWUgZm9yIHRoZSBSVFMgb3V0cHV0IChhc3NlcnRlZCBsb3cpCisgKgorICovCit2b2lkIGh3X3VhcnRfcnRzX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHJ0c24pOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBMaW5lIHN0YXR1cyBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBSZWNlaXZlciBGSUZPIEVycm9yIGJpdAorICoKKyAqIFxwYXJhbSBbaW5dIHVhcnQgaWRlbnRpZmllcyBVQVJUIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gcmVjZWl2ZXIgRklGTyBFcnJvciBiaXQgdmFsdWU6CisgKiAgICAgICAgIDAgPSBubyBlcnJvciBpbiBSWCBGSUZPLAorICogICAgICAgICAxID0gZXJyb3IgaW4gUlggRklGTworICoKKyAqLwordWludDhfdCBod191YXJ0X3J4X2ZpZm9fZXJyX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgVHJhbnNtaXR0ZXIgRW1wdHkgYml0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiAxIGlmIHRyYW5zbWl0dGVyIEZJRk8gaXMgZW1wdHkKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9pc190eF9maWZvX2VtcHR5KEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgdGhlIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgYml0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0aGUgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSBiaXQgdmFsdWUKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF90aHJfZW1wdHlfZ2V0ZihIV19VQVJUX0lEIHVhcnQpOworCisvKioKKyAqIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBCcmVhayBJbnRlcnJ1cHQgYml0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBicmVhayBpbnRlcnJ1cHQgYml0IHZhbHVlOiBUaGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGRldGVjdGlvbiBvZiBhCisgKiAgICAgICAgIGJyZWFrIHNlcXVlbmNlIG9uIHRoZSBzZXJpYWwgaW5wdXQgZGF0YQorICoKKyAqLwordWludDhfdCBod191YXJ0X2JyZWFrX2ludF9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgdGhlIEZyYW1pbmcgRXJyb3IgYml0CisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBmcmFtaW5nIGVycm9yIGJpdCB2YWx1ZToKKyAqICAgICAgICAgMCA9IG5vIGZyYW1pbmcgZXJyb3IsCisgKiAgICAgICAgIDEgPSBmcmFtaW5nIGVycm9yCisgKgorICoKKyAqLwordWludDhfdCBod191YXJ0X2ZyYW1lX2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgdGhlIFBhcml0eSBFcnJvciBiaXQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHBhcml0eSBlcnJvciBiaXQgdmFsdWU6CisgKiAgICAgICAgIDAgPSBubyBwYXJpdHkgZXJyb3IsCisgKiAgICAgICAgIDEgPSBwYXJpdHkgZXJyb3IKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9wYXJpdHlfZXJyX2dldGYoSFdfVUFSVF9JRCB1YXJ0KTsKKworLyoqCisgKiBcYnJpZWYgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgT3ZlcnJ1biBFcnJvciBiaXQKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIG92ZXJydW4gZXJyb3IgYml0IHZhbHVlOgorICogICAgICAgICAwID0gbm8gb3ZlcnJ1biBlcnJvciwKKyAqICAgICAgICAgMSA9IG92ZXJydW4gZXJyb3IKKyAqCisgKi8KK3VpbnQ4X3QgaHdfdWFydF9vdmVycnVuX2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IE1vZGVtIHN0YXR1cyBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qKgorICogXGJyaWVmIEdldCBDVFMgaW5wdXQgc3RhdHVzCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiBzdGF0dXMgb2YgQ1RTIGlucHV0OgorICogICAgICAgICAwID0gQ1RTbiBpbnB1dCBpcyBkZS1hc3NlcnRlZCAobG9naWMgMSksCisgKiAgICAgICAgIDEgPSBDVFNuIGlucHV0IGlzIGFzc2VydGVkIChsb2dpYyAwKSwKKyAqICAgICAgICAgSW4gbG9vcGJhY2sgbW9kZSwgQ1RTIGlzIHRoZSBzYW1lIGFzIFJUUworICoKKyAqLwordWludDhfdCBod191YXJ0X2N0c19nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIEdldCBEZWx0YSBDVFMKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIERDVFM6CisgKiAgICAgICAgIDAgPSBObyBjaGFuZ2Ugb24gQ1RTIHNpbmNlIGxhc3QgcmVhZCBvZiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyLAorICogICAgICAgICAxID0gQ2hhbmdlIG9uIENUUyBzaW5jZSBsYXN0IHJlYWQgb2YgTW9kZW0gQ29udHJvbCBSZWdpc3RlciwKKyAqICAgICAgICAgTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBEQ1RTIGJpdCwKKyAqICAgICAgICAgSW4gbG9vcGJhY2sgbW9kZSwgRENUUyByZWZsZWN0cyBjaGFuZ2VzIG9uIFJUUworICoKKyAqLwordWludDhfdCBod191YXJ0X2RlbHRhX2N0c19nZXRmKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIGJ1ZmZlcmVkIHdyaXRlIGlzIGluIHByb2dyZXNzCisgKgorICogXHBhcmFtIFtpbl0gdWFydCBpZGVudGlmaWVzIFVBUlQgdG8gdXNlCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIFRYIHRyYW5zbWlzc2lvbiBpbiBwcm9ncmVzcworICoKKyAqLworYm9vbCBod191YXJ0X3R4X2luX3Byb2dyZXNzKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIGlmIGJ1ZmZlcmVkIHJlYWQgaXMgaW4gcHJvZ3Jlc3MKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKiBccmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgUlggdHJhbnNtaXNzaW9uIGluIHByb2dyZXNzCisgKgorICovCitib29sIGh3X3VhcnRfcnhfaW5fcHJvZ3Jlc3MoSFdfVUFSVF9JRCB1YXJ0KTsKKworI2lmIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BCisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBjaXJjdWxhciBSWCBETUEgZm9yIFVBUlQKKyAqCisgKiBUaGlzIHJlY29uZmlndXJlcyBSWCBETUEgY2hhbm5lbCB0byB1c2UgY2lyY3VsYXIgYnVmZmVyIGZvciBpbmNvbWluZyBkYXRhIGFuZCBlbmFibGVkIGl0CisgKiBpbW1lZGlhdGVseS4gSW5jb21pbmcgZGF0YSB3aWxsIGJlIHJlYWQgYnkgRE1BIHRvIGludGVybWVkaWF0ZSBidWZmZXIuIFN1YnNlcXVlbnQgY2FsbHMgdG8KKyAqIGh3X3VhcnRfcmVjZWl2ZSgpIHdpbGwgZmlyZSBjYWxsYmFjayBhcyBzb29uIGFzIGVub3VnaCBkYXRhIGFyZSBhdmFpbGFibGUgaW4gYnVmZmVyIHRvIGJlIHJlYWQsCisgKiBidXQgdGhlIGFjdHVhbCByZWFkIGZyb20gaW50ZXJtZWRpYXRlIGJ1ZmZlciBoYXMgdG8gYmUgZG9uZSB1c2luZyBod191YXJ0X2NvcHlfcnhfY2lyY3VsYXJfZG1hX2J1ZmZlcigpLgorICoKKyAqIFJlY29tbWVuZGVkIHdheSB0byBtb3ZlIGJldHdlZW4gRE1BIGJ1ZmZlciBhbmQgdXNlciBidWZmZXIgaXMgdG8gY2FsbCBod191YXJ0X2Fib3J0X3JlY2VpdmUoKQorICogdGhhdCB3aWxsIGNvcHkgdGhlIGFtb3VudCBzcGVjaWZpZWQgb24gcmVhZCBvciB0aGUgYWN0dWFsIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpZgorICogaHdfdWFydF9hYm9ydF9yZWNlaXZlKCkgd2FzIGNhbGxlZCBiZWZvcmUgcmVxdWVzdGVkIHRoZSBhbW91bnQgd2FzIHJlY2VpdmVkLgorICoKKyAqIFxub3RlCisgKiBUaGlzIGNhbiBiZSBvbmx5IGNhbGxlZCBmb3IgYW4gVUFSVCB3aGljaCBpcyBjb25maWd1cmVkIHVzaW5nIFxwIGRnX2NvbmZpZ1VBUlR4X1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRS4KKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9lbmFibGVfcnhfY2lyY3VsYXJfZG1hKEhXX1VBUlRfSUQgdWFydCk7CisKKy8qKgorICogXGJyaWVmIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIFJYIERNQSBidWZmZXIgdG8gdXNlciBidWZmZXIKKyAqCisgKiBccGFyYW0gW2luXSB1YXJ0IGlkZW50aWZpZXMgVUFSVCB0byB1c2UKKyAqIFxwYXJhbSBbaW5dIGJ1ZiBidWZmZXIgdG8gY29weSBkYXRhIHRvCisgKiBccGFyYW0gW2luXSBsZW4gbGVuZ3RoIG9mIGRhdGEgdG8gY29weSB0byBidWZmZXIKKyAqCisgKi8KK3ZvaWQgaHdfdWFydF9jb3B5X3J4X2NpcmN1bGFyX2RtYV9idWZmZXIoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90ICpidWYsIHVpbnQxNl90IGxlbik7CisKKyNlbmRpZiAvKiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQSAqLworCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1VBUlQgKi8KKworI2VuZGlmIC8qIEhXX1VBUlRfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfd2F0Y2hkb2cuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk2OWJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od193YXRjaGRvZy5oCkBAIC0wLDAgKzEsMTg4IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBXYXRjaGRvZ19UaW1lcgorICogXHsKKyAqIFxicmllZiBXYXRjaGRvZyBUaW1lcgorICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfd2F0Y2hkb2cuaAorICoKKyAqIEBicmllZiBEZWZpbml0aW9uIG9mIEFQSSBmb3IgdGhlIFdhdGNoZG9nIHRpbWVyIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBIV19XQVRDSERPR19IXworI2RlZmluZSBIV19XQVRDSERPR19IXworCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKworI2RlZmluZSBOTUlfTUFHSUNfTlVNQkVSICAgICAgICAgICAgICAgIDB4REVBREJFRUYKKworLyoqCisgKiBcYnJpZWYgSG9sZHMgdGhlIHN0YWNrIGNvbnRlbnRzIHdoZW4gYW4gTk1JIG9jY3Vycy4KKyAqCisgKiBcZGV0YWlscyBUaGUgc3RhY2sgY29udGVudHMgYXJlIGNvcGllZCBhdCB0aGlzIHZhcmlhYmxlIHdoZW4gYW4gTk1JIG9jY3Vycy4gVGhlIGZpcnN0IHBvc2l0aW9uIGlzCisgKiAgICAgICAgbWFya2VkIHdpdGggYSBzcGVjaWFsICJmbGFnIiAoMHhERUFEQkVFRikgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZGF0YSB0aGF0IGZvbGxvdyBhcmUgdmFsaWQuCisgKi8KK2V4dGVybiB1aW50MzJfdCBubWlfZXZlbnRfZGF0YVs5XTsKKworLyoqCisgKiBcYnJpZWYgVHlwZXMgb2YgZ2VuZXJhdGVkIHN0YXRlcyBpZiByZWxvYWQgdmFsdWUgaXMgMAorICoKKyAqIEdlbmVyYXRlIE5NSSAobm9uLW1hc2thYmxlIGludGVycnVwdCkgb3IgUlNUIChyZXNldCBvZiB0aGUgc3lzdGVtKQorICoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgSFdfV0RHX1JFU0VUX05NSSA9IDAsICAgICAvKio8IEdlbmVyYXRlIE5NSSBpZiB0aGUgd2F0Y2hkb2cgcmVhY2hlcyAwIGFuZCBXRE9HIHJlc2V0IGlmIHRoZSBjb3VudGVyIGJlY29tZSBsZXNzIG9yIGVxdWFsIHRvIC0xNiAqLworICAgICAgICBIV19XREdfUkVTRVRfUlNUID0gMSAgICAgIC8qKjwgR2VuZXJhdGUgV0RPRyByZXNldCBpdCB0aGUgY291bnRlciBiZWNvbWVzIGxlc3Mgb3IgZXF1YWwgdGhhbiAwICovCit9IEhXX1dER19SRVNFVDsKKworLyoqCisgKiBcYnJpZWYgV2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0IGNhbGxiYWNrCisgKgorICogXHBhcmFtIFtpbl0gaGFyZGZhdWx0X2FyZ3MgcG9pbnRlciB0byBjYWxsIHN0YWNrCisgKgorICovCit0eXBlZGVmIHZvaWQgKCpod193YXRjaGRvZ19pbnRlcnJ1cHRfY2IpKHVuc2lnbmVkIGxvbmcgKmV4Y2VwdGlvbl9hcmdzKTsKKworLyoqCisgKiBcYnJpZWYgRnJlZXplIHRoZSB3YXRjaGRvZworICoKKyAqIFxyZXR1cm4gdHJ1ZSBpZiBvcGVyYXRpb24gaXMgYWxsb3dlZCwgZWxzZSBmYWxzZQorICoKKyAqLworX19SRVRBSU5FRF9DT0RFIGJvb2wgaHdfd2F0Y2hkb2dfZnJlZXplKHZvaWQpOworCisvKioKKyAqIFxicmllZiBVbmZyZWV6ZSB0aGUgd2F0Y2hkb2cKKyAqCisgKi8KK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X3dhdGNoZG9nX3VuZnJlZXplKHZvaWQpOworCisvKioKKyAqIFxicmllZiBTZXQgcG9zaXRpdmUgcmVsb2FkIHZhbHVlIG9mIHRoZSB3YXRjaGRvZyB0aW1lcgorICoKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHJlbG9hZCB2YWx1ZSBmcm9tIDAgKDB4MDApIHRvIDI1NSAoMHhGRikKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193YXRjaGRvZ19zZXRfcG9zX3ZhbCh1aW50OF90IHZhbHVlKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193YXRjaGRvZ19zZXRfcG9zX3ZhbCh1aW50OF90IHZhbHVlKQoreworICAgICAgICBXRE9HLT5XQVRDSERPR19SRUcgPSAodWludDE2X3QpdmFsdWU7Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBuZWdhdGl2ZSByZWxvYWQgdmFsdWUgb2YgdGhlIHdhdGNoZG9nIHRpbWVyCisgKgorICogXHBhcmFtIFtpbl0gdmFsdWUgcmVsb2FkIHZhbHVlIGZyb20gLTE2ICgweDFGRikgdG8gMCAoMHgwMCkKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193YXRjaGRvZ19zZXRfbmVnX3ZhbCh1aW50OF90IHZhbHVlKQoreworICAgICAgICBXRE9HLT5XQVRDSERPR19SRUcgPSBXRE9HX1dBVENIRE9HX1JFR19XRE9HX1ZBTF9ORUdfTXNrIHwgKHVpbnQxNl90KXZhbHVlOworfQorCisvKioKKyAqIFxicmllZiBHZXQgcmVsb2FkIHZhbHVlIG9mIHRoZSB3YXRjaGRvZyB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB1aW50MTZfdCBod193YXRjaGRvZ19nZXRfdmFsKHZvaWQpCit7CisgICAgICAgIHJldHVybiBSRUdfR0VURihXRE9HLCBXQVRDSERPR19SRUcsIFdET0dfVkFMKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2VuZXJhdGUgYSByZXNldCBzaWduYWwgb2YgdGhlIHN5c3RlbSBpZiByZWxvYWQgdmFsdWUgcmVhY2hlcyAwCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2F0Y2hkb2dfZ2VuX1JTVCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193YXRjaGRvZ19nZW5fUlNUKHZvaWQpCit7CisgICAgICAgIFJFR19TRVRfQklUKFdET0csIFdBVENIRE9HX0NUUkxfUkVHLCBOTUlfUlNUKTsKK30KKworLyoqCisgKiBcYnJpZWYgUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBccGFyYW0gW2luXSBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaGFuZGxlciB0byBjYWxsIHdoZW4gYW4gaW50ZXJydXB0IG9jY3VycworICoKKyAqLwordm9pZCBod193YXRjaGRvZ19yZWdpc3Rlcl9pbnQoaHdfd2F0Y2hkb2dfaW50ZXJydXB0X2NiIGhhbmRsZXIpOworCisvKioKKyAqIFxicmllZiBVbnJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod193YXRjaGRvZ191bnJlZ2lzdGVyX2ludCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgSGFuZGxlIE5NSSBpbnRlcnJ1cHQuCisgKgorICogXHBhcmFtIFtpbl0gaGFyZGZhdWx0X2FyZ3MgcG9pbnRlciB0byBjYWxsIHN0YWNrCisgKgorICovCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod193YXRjaGRvZ19oYW5kbGVfaW50KHVuc2lnbmVkIGxvbmcgKmhhcmRmYXVsdF9hcmdzKTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgd2hldGhlciB0aGUgdGltZXIgaGFzIGV4cGlyZWQKKyAqCisgKiBccmV0dXJuIHRydWUsIGlmIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgKgorICovCitib29sIGh3X3dhdGNoZG9nX2lzX3RpbWVyX2V4cGlyZWQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIHdoYXQgaXMgZ2VuZXJhdGVkIHdoZW4gd2F0Y2hkb2cgcmVhY2hlcyAwIHZhbHVlCisgKgorICogSWYgaXQgaXMgTk1JIChpbnRlcnJ1cHQpIG9yIFJTVCAoc3lzdGVtL3dkb2cgcmVzZXQpLgorICoKKyAqIFxyZXR1cm4gSFdfV0RHX1JFU0VUX05NSSBpZiBOTUkgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIEhXX1dER19SRVNFVF9SU1QKKyAqCisgKi8KK0hXX1dER19SRVNFVCBod193YXRjaGRvZ19pc19pcnFfb3JfcnN0X2dlbih2b2lkKTsKKworI2VuZGlmIC8qIEhXX1dBVENIRE9HX0hfICovCisKKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfd2t1cC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9od193a3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhODMzMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvaHdfd2t1cC5oCkBAIC0wLDAgKzEsNjAwIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBXYWtldXBfVGltZXIKKyAqIFx7CisgKiBcYnJpZWYgV2FrZXVwIFRpbWVyCisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod193a3VwLmgKKyAqCisgKiBAYnJpZWYgRGVmaW5pdGlvbiBvZiBBUEkgZm9yIHRoZSBXYWtldXAgdGltZXIgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEhXX1dLVVBfSF8KKyNkZWZpbmUgSFdfV0tVUF9IXworCisjaWYgZGdfY29uZmlnVVNFX0hXX1dLVVAKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzZGtfZGVmcy5oPgorI2luY2x1ZGUgImh3X2dwaW8uaCIKKworCisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpICYmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisjZGVmaW5lIFdLVVBfU0VMX1AwX0JBU0VfUkVHICh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1NFTF9HUElPX1AwX1JFRykKKyNlbHNlCisjZGVmaW5lIFdLVVBfU0VMX1AwX0JBU0VfUkVHICh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1NFTEVDVF9QMF9SRUcpCisjZW5kaWYKKworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorLyoqCisgKiBcYnJpZWYgV2FrZXVwIHRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgdWludDhfdCBwaW5fc3RhdGVbSFdfR1BJT19OVU1fUE9SVFNdOyAgIC8qKjwgcGluIHN0YXRlcyBpbiBlYWNoIHBvcnQsIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkICovCisgICAgICAgIHVpbnQ4X3QgcGluX3RyaWdnZXJbSFdfR1BJT19OVU1fUE9SVFNdOyAvKio8IHBpbiB0cmlnZ2VycyBpbiBlYWNoIHBvcnQsIDE6IGxvdywgMDogaGlnaCAqLworfSB3a3VwX3Bpbl9jb25maWdfdDsKK2V4dGVybiB2b2xhdGlsZSB3a3VwX3Bpbl9jb25maWdfdCB3a3VwX3Bpbl9jb25maWc7ICAgICAgLyoqPCBzdG9yZXMgd2t1cCBwaW4gY29uZmlndXJhdGlvbiAqLworZXh0ZXJuIHZvbGF0aWxlIHVpbnQ4X3Qgd2t1cF9zdGF0dXNbSFdfR1BJT19OVU1fUE9SVFNdOyAvKio8IHN0b3JlcyB3YWtldXAgc291cmNlcyAqLworI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgbWFzayBvZiBhIGZpZWxkIG9mIGFuIFdLVVAgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfV0tVUF9SRUdfRklFTERfTUFTSyhyZWcsIGZpZWxkKSBcCisgICAgICAgIChXQUtFVVBfV0tVUF8jI3JlZyMjX1JFR18jI2ZpZWxkIyNfTXNrKQorCisvKioKKyAqIFxicmllZiBHZXQgdGhlIGJpdCBwb3NpdGlvbiBvZiBhIGZpZWxkIG9mIGFuIFdLVVAgcmVnaXN0ZXIuCisgKgorICogXHBhcmFtIFtpbl0gcmVnIGlzIHRoZSByZWdpc3RlciB0byBhY2Nlc3MKKyAqIFxwYXJhbSBbaW5dIGZpZWxkIGlzIHRoZSByZWdpc3RlciBmaWVsZCB0byBhY2Nlc3MKKyAqCisgKi8KKyNkZWZpbmUgSFdfV0tVUF9SRUdfRklFTERfUE9TKHJlZywgZmllbGQpIFwKKyAgICAgICAgKFdBS0VVUF9XS1VQXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Qb3MpCisKKy8qKgorICogXGJyaWVmIEdldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBXS1VQIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZmllbGQKKyAqCisgKi8KKyNkZWZpbmUgSFdfV0tVUF9SRUdfR0VURihyZWcsIGZpZWxkKSBcCisgICAgICAgICgoV0FLRVVQLT5XS1VQXyMjcmVnIyNfUkVHICYgKFdBS0VVUF9XS1VQXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Nc2spKSA+PiAoV0FLRVVQX1dLVVBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX1BvcykpCisKKy8qKgorICogXGJyaWVmIFNldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBvZiBhbiBXS1VQIHJlZ2lzdGVyLgorICoKKyAqIFxwYXJhbSBbaW5dIHJlZyBpcyB0aGUgcmVnaXN0ZXIgdG8gYWNjZXNzCisgKiBccGFyYW0gW2luXSBmaWVsZCBpcyB0aGUgcmVnaXN0ZXIgZmllbGQgdG8gd3JpdGUKKyAqIFxwYXJhbSBbaW5dIG5ld192YWwgaXMgdGhlIHZhbHVlIHRvIHdyaXRlCisgKgorICovCisjZGVmaW5lIEhXX1dLVVBfUkVHX1NFVEYocmVnLCBmaWVsZCwgbmV3X3ZhbCkgXAorICAgICAgICBXQUtFVVAtPldLVVBfIyNyZWcjI19SRUcgPSAoKFdBS0VVUC0+V0tVUF8jI3JlZyMjX1JFRyAmIH4oV0FLRVVQX1dLVVBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX01zaykpIHwgXAorICAgICAgICAoKFdBS0VVUF9XS1VQXyMjcmVnIyNfUkVHXyMjZmllbGQjI19Nc2spICYgKChuZXdfdmFsKSA8PCAoV0FLRVVQX1dLVVBfIyNyZWcjI19SRUdfIyNmaWVsZCMjX1BvcykpKSkKKworCisvKioKKyAqIFxicmllZiBQaW4gc3RhdGUgd2hpY2ggaW5jcmVtZW50cyBldmVudCBjb3VudGVyCisgKgorICovCit0eXBlZGVmIGVudW0geworICAgICAgICBIV19XS1VQX1BJTl9TVEFURV9ISUdIID0gMCwKKyAgICAgICAgSFdfV0tVUF9QSU5fU1RBVEVfTE9XID0gMQorfSBIV19XS1VQX1BJTl9TVEFURTsKKworLyoqCisgKiBcYnJpZWYgV2FrZXVwIHRpbWVyIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIC8qKgorICAgICAgICAgKiBjb3VudGVyIHRocmVzaG9sZAorICAgICAgICAgKgorICAgICAgICAgKiBcd2FybmluZyBTdXBwb3J0ZWQgb25seSBpbiBEQTE0NjgwLzEgY2hpcHMKKyAgICAgICAgICovCisgICAgICAgIHVpbnQ4X3QgdGhyZXNob2xkOworI2VuZGlmCisjaWYgISgoZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UpICYmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSkKKyAgICAgICAgdWludDhfdCBkZWJvdW5jZTsgICAgICAgLyoqPCBkZWJvdW5jZSB0aW1lIGluIG1zICovCisjZW5kaWYKKyAgICAgICAgdWludDhfdCBwaW5fc3RhdGVbSFdfR1BJT19OVU1fUE9SVFNdOyAgIC8qKjwgcGluIHN0YXRlcyBpbiBlYWNoIHBvcnQsIHNlZSBod193a3VwX2NvbmZpZ3VyZV9wb3J0ICovCisgICAgICAgIHVpbnQ4X3QgcGluX3RyaWdnZXJbSFdfR1BJT19OVU1fUE9SVFNdOyAvKio8IHBpbiB0cmlnZ2VycyBpbiBlYWNoIHBvcnQsIHNlZSBod193a3VwX2NvbmZpZ3VyZV9wb3J0ICovCit9IHdrdXBfY29uZmlnOworCit0eXBlZGVmIHZvaWQgKCpod193a3VwX2ludGVycnVwdF9jYikodm9pZCk7CisKKy8qKgorICogXGJyaWVmIEluaXRpYWxpemUgcGVyaXBoZXJhbAorICoKKyAqIFJlc2V0cyBXYWtldXAgVGltZXIgdG8gaW5pdGlhbCBzdGF0ZSwgaS5lLiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgYW5kIGFsbCBwaW4gdHJpZ2dlcnMgYXJlCisgKiBkaXNhYmxlZC4KKyAqCisgKiBccCBjZmcgY2FuIGJlIE5VTEwgLSBubyBjb25maWd1cmF0aW9uIGlzIHBlcmZvcm1lZCBpbiBzdWNoIGNhc2UuCisgKgorICogXHBhcmFtIFtpbl0gY2ZnIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KK3ZvaWQgaHdfd2t1cF9pbml0KGNvbnN0IHdrdXBfY29uZmlnICpjZmcpOworCisvKioKKyAqIFxicmllZiBDb25maWd1cmUgcGVyaXBoZXJhbAorICoKKyAqIFNob3J0Y3V0IHRvIGNhbGwgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4gSWYgXHAgY2ZnIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gZG9lcworICogbm90aGluZy4KKyAqCisgKiBccGFyYW0gW2luXSBjZmcgY29uZmlndXJhdGlvbgorICoKKyAqLwordm9pZCBod193a3VwX2NvbmZpZ3VyZShjb25zdCB3a3VwX2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBcYnJpZWYgUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLCBpLmUuIGV2ZW50IGNvdW50ZXIgcmVhY2hlcyBjb25maWd1cmVkCisgKiB2YWx1ZS4gSW50ZXJydXB0IGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEFwcGxpY2F0aW9uIHNob3VsZCByZXNldAorICogaW50ZXJydXB0IGluIGNhbGxiYWNrIGZ1bmN0aW9uIHVzaW5nIGh3X3drdXBfcmVzZXRfaW50ZXJydXB0KCkuIElmIG5vIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwKKyAqIGludGVycnVwdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBieSB0aGUgZHJpdmVyLgorICoKKyAqIFxwYXJhbSBbaW5dIGNiIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBccGFyYW0gW2luXSBwcmlvIHRoZSBwcmlvcml0eSBvZiB0aGUgaW50ZXJydXB0CisgKgorICogXHNhIGh3X3drdXBfdW5yZWdpc3Rlcl9pbnRlcnJ1cHQKKyAqIFxzYSBod193a3VwX2NsZWFyX2ludGVycnVwdAorICogXHNhIGh3X3drdXBfc2V0X2NvdW50ZXJfdGhyZXNob2xkCisgKiBcc2EgaHdfd2t1cF9nZXRfY291bnRlcgorICoKKyAqLwordm9pZCBod193a3VwX3JlZ2lzdGVyX2ludGVycnVwdChod193a3VwX2ludGVycnVwdF9jYiBjYiwgdWludDMyX3QgcHJpbyk7CisKKy8qKgorICogXGJyaWVmIFVucmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBJbnRlcnJ1cHQgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICovCit2b2lkIGh3X3drdXBfdW5yZWdpc3Rlcl9pbnRlcnJ1cHQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFJlc2V0IGludGVycnVwdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgYnkgYW55IHVzZXItc3BlY2lmaWVkIGludGVycnVwdCBjYWxsYmFjaywgdG8gY2xlYXIgdGhlIGludGVycnVwdC4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX3Jlc2V0X2ludGVycnVwdCh2b2lkKQoreworICAgICAgICBXQUtFVVAtPldLVVBfUkVTRVRfSVJRX1JFRyA9IDE7Cit9CisKKy8qKgorICogXGJyaWVmIEludGVycnVwdCBoYW5kbGVyCisgKgorICovCit2b2lkIGh3X3drdXBfaGFuZGxlcih2b2lkKTsKKworI2lmICEoKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSAmJiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkpCisvKioKKyAqIFxicmllZiBTZXQgZGVib3VuY2UgdGltZQorICoKKyAqIFNldHRpbmcgZGVib3VuY2UgdGltZSB0byAwIHdpbGwgZGlzYWJsZSBoYXJkd2FyZSBkZWJvdW5jaW5nLiBNYXhpbXVtIGRlYm91bmNlIHRpbWUgaXMgNjNtcy4KKyAqCisgKiBccGFyYW0gW2luXSB0aW1lX21zIGRlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9zZXRfZGVib3VuY2VfdGltZSh1aW50OF90IHRpbWVfbXMpCit7CisgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ1RSTCwgV0tVUF9ERUJfVkFMVUUsIHRpbWVfbXMpOworfQorI2VuZGlmIC8vISgoZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UpICYmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BKSkKKworLyoqCisgKiBcYnJpZWYgR2V0IGN1cnJlbnQgZGVib3VuY2UgdGltZQorICoKKyAqIFxyZXR1cm4gZGVib3VuY2UgdGltZSBpbiBtaWxsaXNlY29uZHMKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod193a3VwX2dldF9kZWJvdW5jZV90aW1lKHZvaWQpCit7CisgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKENUUkwsIFdLVVBfREVCX1ZBTFVFKTsKK30KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKy8qKgorICogXGJyaWVmIFNldCB0aHJlc2hvbGQgZm9yIGV2ZW50IGNvdW50ZXIKKyAqCisgKiBJbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGFmdGVyIGV2ZW50IGNvdW50ZXIgcmVhY2hlcyBjb25maWd1cmVkIHZhbHVlLgorICoKKyAqIFxwYXJhbSBbaW5dIGxldmVsIG51bWJlciBvZiBldmVudHMKKyAqCisgKiBcd2FybmluZyBTdXBwb3J0ZWQgb25seSBpbiBEQTE0NjgwLzEgY2hpcHMKKyAqIFxzYSBod193a3VwX3JlZ2lzdGVyX2ludGVycnVwdAorICogXHNhIGh3X3drdXBfZ2V0X2NvdW50ZXIKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX3NldF9jb3VudGVyX3RocmVzaG9sZCh1aW50OF90IGxldmVsKQoreworICAgICAgICBIV19XS1VQX1JFR19TRVRGKENPTVBBUkUsIENPTVBBUkUsIGxldmVsKTsKK30KKworLyoqCisgKiBcYnJpZWYgR2V0IHRocmVzaG9sZCBmb3IgZXZlbnQgY291bnRlcgorICoKKyAqIFxyZXR1cm4gbnVtYmVyIG9mIGV2ZW50cworICoKKyAqIFx3YXJuaW5nIFN1cHBvcnRlZCBvbmx5IGluIERBMTQ2ODAvMSBjaGlwcworICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfY291bnRlcl90aHJlc2hvbGQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIEhXX1dLVVBfUkVHX0dFVEYoQ09NUEFSRSwgQ09NUEFSRSk7Cit9CisKKy8qKgorICogXGJyaWVmIEdldCBjdXJyZW50IHZhbHVlIG9mIGV2ZW50IGNvdW50ZXIKKyAqCisgKiBOdW1iZXIgb2YgZXZlbnRzIGNvdW50ZWQgc28gZmFyLiBDYW4gYmUgcmVzZXQgdXNpbmcgaHdfd2t1cF9yZXNldF9jb3VudGVyKCkuCisgKgorICogXHJldHVybiBudW1iZXIgb2YgZXZlbnRzCisgKgorICogXG5vdGUgVGhlIGNvdW50ZXIgaXMgYXV0b21hdGljYWxseSByZXNldCBieSB0aGUgaGFyZHdhcmUgd2hlbiB0aGUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAqCisgKiBcd2FybmluZyBTdXBwb3J0ZWQgb25seSBpbiBEQTE0NjgwLzEgY2hpcHMKKyAqCisgKiBcc2EgaHdfd2t1cF9yZXNldF9jb3VudGVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaHdfd2t1cF9nZXRfY291bnRlcih2b2lkKQoreworICAgICAgICByZXR1cm4gSFdfV0tVUF9SRUdfR0VURihDT1VOVEVSLCBFVkVOVF9WQUxVRSk7Cit9CisKKy8qKgorICogXGJyaWVmIFJlc2V0IGV2ZW50IGNvdW50ZXIKKyAqCisgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IGNvdW50ZXIgbWFudWFsbHkgaW4gaW50ZXJydXB0IGNhbGxiYWNrIC0gaXQncyByZXNldCBhdXRvbWF0aWNhbGx5IGJ5CisgKiBoYXJkd2FyZS4KKyAqCisgKiBcd2FybmluZyBTdXBwb3J0ZWQgb25seSBpbiBEQTE0NjgwLzEgY2hpcHMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfcmVzZXRfY291bnRlcih2b2lkKQoreworICAgICAgICBXQUtFVVAtPldLVVBfUkVTRVRfQ05UUl9SRUcgPSAxOworfQorI2VuZGlmCisKKy8qKgorICogXGJyaWVmIFNldCBHUElPIHBpbiBldmVudCBjb3VudGluZyBzdGF0ZQorICoKKyAqIE9uY2UgZW5hYmxlZCwgc3RhdGUgY2hhbmdlcyBvbiBwaW4gd2lsbCBpbmNyZW1lbnQgZXZlbnQgY291bnRlci4gU3RhdGUgd2hpY2ggdHJpZ2dlcnMgZXZlbnQgY2FuCisgKiBiZSBzZXQgdXNpbmcgaHdfd2t1cF9zZXRfcGluX3RyaWdnZXIoKS4KKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IHBvcnQgbnVtYmVyCisgKiBccGFyYW0gW2luXSBwaW4gcGluIG51bWJlcgorICogXHBhcmFtIFtpbl0gZW5hYmxlZCBwaW4gZXZlbnQgY291bnRpbmcgc3RhdGUKKyAqCisgKiBcc2EgaHdfd2t1cF9zZXRfcGluX3RyaWdnZXIKKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9waW4KKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9wb3J0CisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF9zZXRfcGluX3N0YXRlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICAgICAgdm9sYXRpbGUgdWludDE2X3QgKndrdXBfcGluX2VuYWJsZV9yZWcgPSBXS1VQX1NFTF9QMF9CQVNFX1JFRyArIHBvcnQ7CisgICAgICAgIHVpbnQxNl90IHdrdXBfcGluX2VuYWJsZV92YWwgPSAqd2t1cF9waW5fZW5hYmxlX3JlZzsKKyAgICAgICAgd2t1cF9waW5fZW5hYmxlX3ZhbCAmPSB+KDEgPDwgcGluKTsKKyAgICAgICAgd2t1cF9waW5fZW5hYmxlX3ZhbCB8PSAoISFlbmFibGVkKSA8PCBwaW47CisgICAgICAgICp3a3VwX3Bpbl9lbmFibGVfcmVnID0gd2t1cF9waW5fZW5hYmxlX3ZhbDsKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyAgICAgICAgd2t1cF9waW5fY29uZmlnLnBpbl9zdGF0ZVtwb3J0XSA9IHdrdXBfcGluX2VuYWJsZV92YWw7CisjZW5kaWYKK30KKworLyoqIFxicmllZiBHZXQgR1BJTyBwaW4gZXZlbnQgY291bnRpbmcgc3RhdGUKKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IHBvcnQgbnVtYmVyCisgKiBccGFyYW0gW2luXSBwaW4gcGluIG51bWJlcgorICoKKyAqIFxyZXR1cm4gcGluIGV2ZW50IGNvdW50aW5nIHN0YXRlCisgKgorICogXHNhIGh3X3drdXBfc2V0X3Bpbl9zdGF0ZQorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGh3X3drdXBfZ2V0X3Bpbl9zdGF0ZShIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKQoreworICAgICAgICB1aW50MTZfdCB3a3VwX3Bpbl9lbmFibGVfdmFsID0gKihXS1VQX1NFTF9QMF9CQVNFX1JFRyArIHBvcnQpOworICAgICAgICByZXR1cm4gKHdrdXBfcGluX2VuYWJsZV92YWwgJiAoMSA8PCBwaW4pKSA+PiBwaW47Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBHUElPIHBpbiBzdGF0ZSB3aGljaCB0cmlnZ2VycyBldmVudAorICoKKyAqIFBpbiBldmVudCBjb3VudGluZyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhpcyBzZXR0aW5nIHRvIGhhdmUgYW55IGVmZmVjdC4KKyAqCisgKiBccGFyYW0gW2luXSBwb3J0IHBvcnQgbnVtYmVyCisgKiBccGFyYW0gW2luXSBwaW4gcGluIG51bWJlcgorICogXHBhcmFtIFtpbl0gc3RhdGUgcGluIHN0YXRlCisgKgorICogXHNhIGh3X3drdXBfc2V0X3Bpbl9jb3VudGVyX3N0YXRlCisgKiBcc2EgaHdfd2t1cF9jb25maWd1cmVfcGluCisgKiBcc2EgaHdfd2t1cF9jb25maWd1cmVfcG9ydAorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfc2V0X3Bpbl90cmlnZ2VyKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19XS1VQX1BJTl9TVEFURSBzdGF0ZSkKK3sKKyAgICAgICAgdWludDE2X3QgcG9sX3J4X3JlZyA9ICooKHZvbGF0aWxlIHVpbnQxNl90ICopKCZXQUtFVVAtPldLVVBfUE9MX1AwX1JFRykgKyBwb3J0KTsKKyAgICAgICAgcG9sX3J4X3JlZyAmPSB+KDEgPDwgcGluKTsKKyAgICAgICAgcG9sX3J4X3JlZyB8PSAoISFzdGF0ZSkgPDwgcGluOworICAgICAgICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1BPTF9QMF9SRUcpICsgcG9ydCkgPSBwb2xfcnhfcmVnOworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorICAgICAgICB3a3VwX3Bpbl9jb25maWcucGluX3RyaWdnZXJbcG9ydF0gPSBwb2xfcnhfcmVnOworI2VuZGlmCit9CisKKy8qKiBcYnJpZWYgR2V0IEdQSU8gcGluIHN0YXRlIHdoaWNoIHRyaWdnZXJzIGV2ZW50CisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIHBpbiBudW1iZXIKKyAqCisgKiBccmV0dXJuIHBpbiBzdGF0ZQorICoKKyAqIFxzYSBod193a3VwX3NldF9waW5fdHJpZ2dlcgorICoKKyAqLworc3RhdGljIGlubGluZSBIV19XS1VQX1BJTl9TVEFURSBod193a3VwX2dldF9waW5fdHJpZ2dlcihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKQoreworICAgICAgICB1aW50MTZfdCBwb2xfcnhfcmVnID0gKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9QT0xfUDBfUkVHKSArIHBvcnQpOworICAgICAgICByZXR1cm4gKHBvbF9yeF9yZWcgJiAoMSA8PCBwaW4pKSA+PiBwaW47Cit9CisKKy8qKgorICogXGJyaWVmIFNldCBHUElPIHBpbiBldmVudCBjb3VudGluZyBhbmQgdHJpZ2dlcmVkIHN0YXRlCisgKgorICogRWZmZWN0aXZlbHksIHRoaXMgaXMgc2hvcnRjdXQgZm9yIGNhbGxpbmcgaHdfd2t1cF9zZXRfcGluX3N0YXRlKCkgYW5kIGh3X3drdXBfc2V0X3Bpbl90cmlnZ2VyKCkuCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gcGluIHBpbiBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgcGluIGV2ZW50IGNvdW50aW5nIHN0YXRlCisgKiBccGFyYW0gW2luXSBzdGF0ZSBwaW4gc3RhdGUKKyAqCisgKiBcc2EgaHdfd2t1cF9zZXRfcGluX2NvdW50ZXJfc3RhdGUKKyAqIFxzYSBod193a3VwX3NldF9waW5fdHJpZ2dlcgorICogXHNhIGh3X3drdXBfY29uZmlndXJlX3BvcnQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX2NvbmZpZ3VyZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbiwgYm9vbCBlbmFibGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfV0tVUF9QSU5fU1RBVEUgc3RhdGUpCit7CisgICAgICAgIC8vIGZpcnN0IHNldCB1cCB0aGUgcHJvcGVyIHBvbGFyaXR5Li4uCisgICAgICAgIGh3X3drdXBfc2V0X3Bpbl90cmlnZ2VyKHBvcnQsIHBpbiwgc3RhdGUpOworICAgICAgICAvLyAuLi50aGVuIGVuYWJsZSBjb3VudGluZyBvbiB0aGUgc3BlY2lmaWMgR1BJTworICAgICAgICBod193a3VwX3NldF9waW5fc3RhdGUocG9ydCwgcGluLCBlbmFibGVkKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlIGV2ZW50IGNvdW50aW5nIGFuZCB0cmlnZ2VyaW5nIHN0YXRlIGZvciB3aG9sZSBHUElPIHBvcnQKKyAqCisgKiBJbiBccCBlbmFibGVkIGFuZCBccCBzdGF0ZSBiaXRtYXNrcyBlYWNoIGJpdCBkZXNjcmliZXMgc3RhdGUgb2YgY29ycmVzcG9uZGluZyBwaW4gaW4gcG9ydC4KKyAqIEZvciBccCBlbmFibGVkIDAgbWVhbnMgZGlzYWJsZWQgYW5kIDEgbWVhbnMgZW5hYmxlZC4KKyAqIEZvciBccCBzdGF0ZSAwIG1lYW5zIGV2ZW50IGlzIHRyaWdnZXJlZCBvbiBsb3cgc3RhdGUgYW5kIDEgbWVhbnMgdHJpZ2dlciBpcyBvbiBoaWdoIHN0YXRlLgorICoKKyAqIFxwYXJhbSBbaW5dIHBvcnQgcG9ydCBudW1iZXIKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZWQgcGluIGV2ZW50IGNvdW50aW5nIGJpdG1hc2sKKyAqIFxwYXJhbSBbaW5dIHN0YXRlIHBpbiBzdGF0ZSBiaXRtYXNrCisgKgorICogXHNhIGh3X3drdXBfc2V0X3Bpbl9jb3VudGVyX3N0YXRlCisgKiBcc2EgaHdfd2t1cF9zZXRfcGluX3RyaWdnZXIKKyAqIFxzYSBod193a3VwX2NvbmZpZ3VyZV9waW4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX2NvbmZpZ3VyZV9wb3J0KEhXX0dQSU9fUE9SVCBwb3J0LCB1aW50OF90IGVuYWJsZWQsIHVpbnQ4X3Qgc3RhdGUpCit7CisgICAgICAgICooKHZvbGF0aWxlIHVpbnQxNl90ICopKCZXQUtFVVAtPldLVVBfUE9MX1AwX1JFRykgKyBwb3J0KSA9IH5zdGF0ZTsgLy8gcmVnaXN0ZXIgaGFzIGludmVydGVkIGxvZ2ljIHRoYW4gc3RhdGUgYml0bWFzaworICAgICAgICAqKFdLVVBfU0VMX1AwX0JBU0VfUkVHICsgcG9ydCkgPSBlbmFibGVkOworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorICAgICAgICB3a3VwX3Bpbl9jb25maWcucGluX3N0YXRlW3BvcnRdID0gZW5hYmxlZDsKKyAgICAgICAgd2t1cF9waW5fY29uZmlnLnBpbl90cmlnZ2VyW3BvcnRdID0gfnN0YXRlOworI2VuZGlmCit9CisKKy8qKgorICogXGJyaWVmIEdldCBzdGF0ZSAoZW5hYmxlZC9kaXNhYmxlZCkgb2YgYWxsIHBpbnMgaW4gR1BJTyBwb3J0CisgKgorICogTWVhbmluZyBvZiBiaXRzIGluIHJldHVybmVkIGJpdG1hc2sgaXMgdGhlIHNhbWUgYXMgaW4gaHdfd2t1cF9jb25maWd1cmVfcG9ydCgpLgorICoKKyAqIFxyZXR1cm4gcG9ydCBwaW4gZXZlbnQgY291bnRlciBzdGF0ZSBiaXRtYXNrCisgKgorICogXHNhIGh3X3drdXBfY29uZmlndXJlX3BvcnQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod193a3VwX2dldF9wb3J0X3N0YXRlKEhXX0dQSU9fUE9SVCBwb3J0KQoreworI2lmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICByZXR1cm4gd2t1cF9waW5fY29uZmlnLnBpbl9zdGF0ZVtwb3J0XTsKKyNlbHNlCisgICAgICAgIHJldHVybiAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1NFTF9HUElPX1AwX1JFRykgKyBwb3J0KTsKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQxNl90ICopKCZXQUtFVVAtPldLVVBfU0VMRUNUX1AwX1JFRykgKyBwb3J0KTsKKyNlbmRpZgorfQorCisvKioKKyAqIFxicmllZiBHZXQgZXZlbnQgdHJpZ2dlcmluZyBzdGF0ZSBmb3IgYWxsIHBpbnMgaW4gR1BJTyBwb3J0CisgKgorICogTWVhbmluZyBvZiBiaXRzIGluIHJldHVybmVkIGJpdG1hc2sgaXMgdGhlIHNhbWUgYXMgaW4gaHdfd2t1cF9jb25maWd1cmVfcG9ydCgpLgorICoKKyAqIFxyZXR1cm4gcG9ydCBwaW4gZXZlbnQgdHJpZ2dlcmluZyBzdGF0ZSBiaXRtYXNrCisgKgorICogXHNhIGh3X3drdXBfY29uZmlndXJlX3BvcnQKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod193a3VwX2dldF9wb3J0X3RyaWdnZXIoSFdfR1BJT19QT1JUIHBvcnQpCit7CisjaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpICYmIGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFCisgICAgICAgIHJldHVybiB3a3VwX3Bpbl9jb25maWcucGluX3RyaWdnZXJbcG9ydF07CisjZWxzZQorICAgICAgICByZXR1cm4gfigqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1BPTF9QMF9SRUcpICsgcG9ydCkpOyAvLyByZWdpc3RlciBoYXMgaW52ZXJ0ZWQgbG9naWMgdGhhdCByZXR1cm5lZCBiaXRtYXNrCisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgRW11bGF0ZSBrZXkgaGl0CisgKgorICogRXZlbnQgY291bnRlciB3aWxsIGJlIGluY3JlYXNlZCB3aXRoIGRlYm91bmNlIHRpbWUgdGFrZW4gaW50byBhY2NvdW50IChpZiBlbmFibGVkKS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBod193a3VwX2VtdWxhdGVfa2V5X2hpdCh2b2lkKQoreworICAgICAgICBIV19XS1VQX1JFR19TRVRGKENUUkwsIFdLVVBfU0ZUX0tFWUhJVCwgMSk7CisgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ1RSTCwgV0tVUF9TRlRfS0VZSElULCAwKTsKK30KKworLyoqCisgKiBcYnJpZWYgRnJlZXplIHdha2V1cCB0aW1lcgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfZnJlZXplKHZvaWQpCit7CisgICAgICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XS1VQVElNX01zazsKK30KKworLyoqCisgKiBcYnJpZWYgVW5mcmVlemUgd2FrZXVwIHRpbWVyCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd2t1cF91bmZyZWV6ZSh2b2lkKQoreworICAgICAgICBHUFJFRy0+UkVTRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1JFU0VUX0ZSRUVaRV9SRUdfRlJaX1dLVVBUSU1fTXNrOworfQorCisvKioKKyAqIFxicmllZiBHZXQgcG9ydCBzdGF0dXMgb24gbGFzdCB3YWtlIHVwCisgKgorICogTWVhbmluZyBvZiBiaXRzIGluIHJldHVybmVkIGJpdG1hc2sgaXMgdGhlIHNhbWUgYXMgaW4gaHdfd2t1cF9jb25maWd1cmVfcG9ydCgpLgorICoKKyAqIFxyZXR1cm4gcG9ydCBwaW4gZXZlbnQgY291bnRlciBzdGF0ZSBiaXRtYXNrCisgKgorICogXHNhIGh3X3drdXBfY29uZmlndXJlX3BvcnQKKyAqCisgKi8KKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkgJiYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod193a3VwX2dldF9zdGF0dXMoSFdfR1BJT19QT1JUIHBvcnQpCit7CisgICAgICAgIHJldHVybiB3a3VwX3N0YXR1c1twb3J0XTsKK30KKyNlbGlmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBod193a3VwX2dldF9zdGF0dXMoSFdfR1BJT19QT1JUIHBvcnQpCit7CisgICAgICAgIHN3aXRjaCAocG9ydCkgeworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8wOgorICAgICAgICAgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKFNUQVRVU18wLCBXS1VQX1NUQVRfUDApOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8xOgorICAgICAgICAgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKFNUQVRVU18wLCBXS1VQX1NUQVRfUDEpOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8yOgorICAgICAgICAgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKFNUQVRVU18xLCBXS1VQX1NUQVRfUDIpOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8zOgorICAgICAgICAgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKFNUQVRVU18yLCBXS1VQX1NUQVRfUDMpOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF80OgorICAgICAgICAgICAgICAgIHJldHVybiBIV19XS1VQX1JFR19HRVRGKFNUQVRVU18yLCBXS1VQX1NUQVRfUDQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOy8vSW52YWxpZCBhcmd1bWVudAorICAgICAgICB9Cit9CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgQ2xlYXIgbGF0Y2ggc3RhdHVzCisgKgorICogVGhpcyBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBieSBhbnkgdXNlci1zcGVjaWZpZWQgaW50ZXJydXB0IGNhbGxiYWNrLAorICogdG8gY2xlYXIgdGhlIGludGVycnVwdCBsYXRjaCBzdGF0dXMuCisgKgorICogXHBhcmFtIFtpbl0gcG9ydCBwb3J0IG51bWJlcgorICogXHBhcmFtIFtpbl0gc3RhdHVzIHBpbiBzdGF0dXMgYml0bWFzaworICoKKyAqIFxzYSBod193a3VwX2dldF9zdGF0dXMKKyAqLworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKSAmJiBkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRQorc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfY2xlYXJfc3RhdHVzKEhXX0dQSU9fUE9SVCBwb3J0LCB1aW50OF90IHN0YXR1cykKK3sKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoKHBvcnQ+PUhXX0dQSU9fUE9SVF8wKSAmJiAocG9ydDw9SFdfR1BJT19QT1JUXzQpKQorICAgICAgICB3a3VwX3N0YXR1c1twb3J0XSAmPSB+c3RhdHVzOworfQorI2VsaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorc3RhdGljIGlubGluZSB2b2lkIGh3X3drdXBfY2xlYXJfc3RhdHVzKEhXX0dQSU9fUE9SVCBwb3J0LCB1aW50OF90IHN0YXR1cykKK3sKKyAgICAgICAgc3dpdGNoIChwb3J0KSB7CisgICAgICAgIGNhc2UgSFdfR1BJT19QT1JUXzA6CisgICAgICAgICAgICAgICAgSFdfV0tVUF9SRUdfU0VURihDTEVBUl8wLCBXS1VQX0NMRUFSX1AwLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF8xOgorICAgICAgICAgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ0xFQVJfMCwgV0tVUF9DTEVBUl9QMSwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIV19HUElPX1BPUlRfMjoKKyAgICAgICAgICAgICAgICBIV19XS1VQX1JFR19TRVRGKENMRUFSXzEsIFdLVVBfQ0xFQVJfUDIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFdfR1BJT19QT1JUXzM6CisgICAgICAgICAgICAgICAgSFdfV0tVUF9SRUdfU0VURihDTEVBUl8yLCBXS1VQX0NMRUFSX1AzLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhXX0dQSU9fUE9SVF80OgorICAgICAgICAgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ0xFQVJfMiwgV0tVUF9DTEVBUl9QNCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygwKTsvL0ludmFsaWQgYXJndW1lbnQKKyAgICAgICAgfQorfQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfV0tVUCAqLworI2VuZGlmIC8qIEhXX1dLVVBfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvc3lzX3Rjcy5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvaW5jbHVkZS9zeXNfdGNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlYzJkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL2luY2x1ZGUvc3lzX3Rjcy5oCkBAIC0wLDAgKzEsMTIzIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIFRDU19IQU5ETEVSCisgKiAKKyAqIFxicmllZiBUQ1MgSGFuZGxlcgorICoKKyAqIFx7CisgKi8KKworLyoqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEBmaWxlIHN5c190Y3MuaAorKgorKiBAYnJpZWYgVENTIEhhbmRsZXIgaGVhZGVyIGZpbGUuCisqCisqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgU1lTX1RDU19IXworI2RlZmluZSBTWVNfVENTX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorCit0eXBlZGVmIGVudW0gc3lzX3Rjc19hcmVhX3R5cGUgeworI2lmZGVmIENPTkZJR19VU0VfQkxFCisgICAgICAgIHRjc19ibGUsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKyAgICAgICAgdGNzX2Z0ZGYsCisjZW5kaWYKKyAgICAgICAgdGNzX3JhZGlvLAorICAgICAgICB0Y3NfY2hhcmdlciwKKyAgICAgICAgdGNzX2F1ZGlvLAorICAgICAgICB0Y3Nfc3lzdGVtLCAvKiBMYXN0IGFyZWEuIEFkZCBhbnkgbWlzc2luZyBhcmVhcyBhYm92ZSB0aGlzISAqLworfSBzeXNfdGNzX2FyZWFfdDsKKworLyoqCisgKiBcYnJpZWYgRmxhZyB0byBjaGVjayB3aGV0aGVyIHRoZSBUQ1MgaXMgd3JpdHRlbiBvciBub3QuCisgKiBcZGV0YWlscyB0cnVlLCB0aGUgVENTIGlzIHdyaXR0ZW4gKHRoZSBCQU5ER0FQX1JFRyB2YWx1ZSBleGlzdHMgaW4gdGhlIFRDUykKKyAqICAgICAgICAgIGZhbHNlLCB0aGUgVENTIGlzIGVtcHR5CisgKi8KK2V4dGVybiBib29sIHN5c190Y3NfaXNfY2FsaWJyYXRlZF9jaGlwOworCisvKioKKyAqIFxicmllZiBUaGUgWFRBTDE2TSBzZXR0bGluZyB0aW1lIChpbiBUQ1MpLgorICogXGRldGFpbHMgWFRBTDMySywgdGhlIHNldHRsaW5nIHRpbWUgaXMgZXhwcmVzc2VkIGluIGNsb2NrIGN5Y2xlcworICogICAgICAgICAgUkNYLCBub3QgYXBwbGljYWJsZTsgdGhlIFNESyBoYXJkLWNvZGVkIHZhbHVlIGlzIHVzZWQKKyAqICAgICAgICAgIElmIGl0IGlzIHplcm8sIHRoZSBoYXJkLWNvZGVkIHZhbHVlIChkZ19jb25maWdYVEFMMTZfU0VUVExFX1RJTUUpIGlzIGFwcGxpZWQuCisgKi8KK2V4dGVybiB1aW50MTZfdCBzeXNfdGNzX3h0YWwxNm1fc2V0dGxpbmdfdGltZTsKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZSB0aGUgdmFyaWFibGVzIHVzZWQgZnJvbSB0aGUgVENTIGhhbmRsaW5nIG1vZHVsZS4KKyAqCisgKi8KK3ZvaWQgc3lzX3Rjc19pbml0KHZvaWQpOworCisvKioKKyAqIFxicmllZiBTdG9yZSBUQ1MgPGFkZHJlc3MsIHZhbHVlPiBwYWlyIGluIHRoZSBHbG9iYWwgVENTIGFycmF5IGlmIGl0IHBvaW50cyB0byBhIHJlZ2lzdGVyCisgKiAgICAgICAgdGhhdCBpcyBub3QgaW4gdGhlIEFPTiBwb3dlciBkb3dtYWluIG9yIGlzIG5vdCByZXRhaW5lZCwgZWxzZSBpdCBhcHBsaWVzIHRoZSB2YXVsZSB0bworICogICAgICAgIHRoZSByZWdpc3Rlci4KKyAqCisgKiBccGFyYW0gW2luXSBhZGRyZXNzIHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlcgorICogXHBhcmFtIFtpbl0gdmFsdWUgdGhlIHZhbHVlIGZvciB0aGlzIHJlZ2lzdGVyCisgKgorICogXHJldHVybiB0cnVlIGlmIHRoZSBjaGlwIGlzIGNhbGlicmF0ZWQgKHRoZSBCQU5ER0FQIHNldHRpbmcgaGFzIGJlZW4gYXBwbGllZCksIGVsc2UgZmFsc2UuCisgKgorICogXHdhcm5pbmcgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIFJDMTYgbXVzdCBoYXZlIGJlZW4gc2V0IGFzIHRoZSBzeXN0ZW0gY2xvY2shCisgKgorICovCitib29sIHN5c190Y3Nfc3RvcmVfcGFpcih1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCB2YWx1ZSk7CisKKy8qKgorICogXGJyaWVmIFNvcnQgdGhlIHJlZ2lzdGVycyBvZiB0aGUgcmVnaXN0ZXJzIGluIHRoZSBNZW1vcnkgTWFwIG9mIHRoZSBjaGlwIHRvIGEgZGlmZmVyZW50ICJjbGFzc2VzIgorICogICAgICAgIGluIHRoZSBUQ1MgYXJyYXkuCisgKgorICovCit2b2lkIHN5c190Y3Nfc29ydF9hcnJheSh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgQXBwbHkgdGhlIDxhZGRyZXNzLCB2YWx1ZT4gcGFpcnMgbG9jYXRlZCBpbiBhICJjbGFzcyIgb2YgdGhlIFRDUyBhcnJheS4gVGhpcyBpcyBkb25lIG9ubHkKKyAqICAgICAgICBmb3IgY2FsaWJyYXRlZCBjaGlwcyEKKyAqCisgKi8KK3ZvaWQgc3lzX3Rjc19hcHBseShzeXNfdGNzX2FyZWFfdCBhcmVhKTsKKworI2VuZGlmIC8qIFNZU19UQ1NfSF8gKi8KKworLyoqCitcfQorXH0KK1x9CisqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2NwbS5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2NwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmQ0NjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfY3BtLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qKgorXGFkZHRvZ3JvdXAgQlNQCitceworXGFkZHRvZ3JvdXAgREVWSUNFUworXHsKK1xhZGR0b2dyb3VwIENQTQorXHsKKyovCisKKy8qKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBAZmlsZSBod19jcG0uYworKgorKiBAYnJpZWYgQ2xvY2sgYW5kIFBvd2VyIE1hbmFnZXIgRHJpdmVyCisqCisqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19DUE0KKworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiaHdfY3BtLmgiCisjaW5jbHVkZSAiaHdfd2F0Y2hkb2cuaCIKKworCisvKgorICogVGhlc2UgdmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgZnJhbWV3b3JrL3NkayB1c2VkCisgKi8KK2V4dGVybiBzeXNfY2xrX3QgY21fc3lzY2xrOworZXh0ZXJuIGFoYl9kaXZfdCBjbV9haGJjbGs7CisKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMKKyAqLworX19SRVRBSU5FRF9VTklOSVQgdWludDE2X3QgaHdfY3BtX2JvZF9lbmFibGVkX2luX3RjczsKKworI2lmIChkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFID09IDEpCitfX1JFVEFJTkVEX1JXIHN0YXRpYyBib29sIGNwbV8xdjhfc3RhdGUgPSB0cnVlOworI2Vsc2UKK3N0YXRpYyBjb25zdCBib29sIGNwbV8xdjhfc3RhdGUgPSBmYWxzZTsKKyNlbmRpZgorCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqLworCisKKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KKworCisKKy8qCisgKiBGdW5jdGlvbiBkZWZpbml0aW9ucworICovCisKKwordWludDMyX3QgaHdfY3BtX3N5c2Nsa19pc19yYzE2KHZvaWQpCit7CisgICAgdWludDMyX3QgcmV0ID0gMDsKKworICAgIGlmIChSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFNZU19DTEtfU0VMKSA9PSBTWVNfQ0xLX0lTX1JDMTYpCisgICAgeworICAgICAgICByZXQgPSAxOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKwordWludDMyX3QgaHdfY3BtX3N5c2Nsa19pc194dGFsMTZtKHZvaWQpCit7CisgICAgdWludDMyX3QgcmV0ID0gMDsKKworICAgIGlmIChSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFNZU19DTEtfU0VMKSA9PSBTWVNfQ0xLX0lTX1hUQUwxNk0pCisgICAgeworICAgICAgICByZXQgPSAxOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKwordm9pZCBod19jcG1fc2V0X2Rpdm4oYm9vbCBmcmVxKQoreworICAgIHVpbnQzMl90IHJlZ3ZhbDsKKyAgICBpbnQgdmFsOworCisgICAgaWYgKGZyZXEpCisgICAgeworICAgICAgICB2YWwgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWwgPSAwOworICAgIH0KKworICAgIHJlZ3ZhbCA9IENSR19UT1AtPkNMS19DVFJMX1JFRzsKKyAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS19DVFJMX1JFRywgRElWTl9YVEFMMzJNX01PREUsIHJlZ3ZhbCwgdmFsKTsKKyAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS19DVFJMX1JFRywgWFRBTDMyTV9NT0RFLCByZWd2YWwsIHZhbCk7CisgICAgQ1JHX1RPUC0+Q0xLX0NUUkxfUkVHID0gcmVndmFsOworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKQorICAgIENSR19UT1AtPkRJVk5fU1lOQ19SRUcgPSB2YWw7CisjZW5kaWYKK30KKworCitib29sIGh3X2NwbV9pc19yYzE2X2FsbG93ZWQodm9pZCkKK3sKKyAgICBib29sIHJldCA9IGZhbHNlOworICAgIHVpbnQzMl90IHRtcDsKKworICAgIGRvCisgICAgeworICAgICAgICB0bXAgPSBDUkdfVE9QLT5TWVNfU1RBVF9SRUc7CisKKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKworICAgICAgICAvLyBDaGVjayBGVERGCisgICAgICAgIGlmICh0bXAgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgRlRERl9JU19VUCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9CTEUKKworICAgICAgICAvLyBDaGVjayBCTEUKKyAgICAgICAgaWYgKHRtcCAmIFJFR19NU0soQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBCTEVfSVNfVVApKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisjZW5kaWYKKworICAgICAgICAvLyBDaGVjayBBUEhZL0RQSFkgJiBDT0VYCisgICAgICAgIGlmICh0bXAgJiBSRUdfTVNLKENSR19UT1AsIFNZU19TVEFUX1JFRywgUkFEX0lTX1VQKSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG1wICYgUkVHX01TSyhDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIFBFUl9JU19VUCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIFNSQworICAgICAgICAgICAgaWYgKFJFR19HRVRGKEFQVSwgU1JDMV9DVFJMX1JFRywgU1JDX0VOKSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBQRE0KKyAgICAgICAgICAgIGlmIChSRUdfR0VURihDUkdfUEVSLCBQRE1fRElWX1JFRywgQ0xLX1BETV9FTikgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgVVNCCisgICAgICAgICAgICBpZiAoUkVHX0dFVEYoVVNCLCBVU0JfTUNUUkxfUkVHLCBVU0JFTikgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG1wID0gQ1JHX1BFUi0+Q0xLX1BFUl9SRUc7CisKKyAgICAgICAgICAgIC8vIENoZWNrIFVBUlQxLzIKKyAgICAgICAgICAgIGlmICh0bXAgJiBSRUdfTVNLKENSR19QRVIsIENMS19QRVJfUkVHLCBVQVJUX0VOQUJMRSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgICAgICAgICAvLyBDaGVjayBBREMgY2xvY2sKKyAgICAgICAgICAgIGlmIChSRUdfR0VURihHUEFEQywgR1BfQURDX0NUUkxfUkVHLCBHUF9BRENfRU4pICYmCisgICAgICAgICAgICAgICAgKCEodG1wICYgUkVHX01TSyhDUkdfUEVSLCBDTEtfUEVSX1JFRywgQURDX0NMS19TRUwpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIEkyQyBjbG9jaworICAgICAgICAgICAgaWYgKCh0bXAgJiBSRUdfTVNLKENSR19QRVIsIENMS19QRVJfUkVHLCBJMkNfRU5BQkxFKSkgJiYKKyAgICAgICAgICAgICAgICAoISh0bXAgJiBSRUdfTVNLKENSR19QRVIsIENMS19QRVJfUkVHLCBJMkNfQ0xLX1NFTCkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgU1BJIGNsb2NrCisgICAgICAgICAgICBpZiAoKHRtcCAmIFJFR19NU0soQ1JHX1BFUiwgQ0xLX1BFUl9SRUcsIFNQSV9FTkFCTEUpKSAmJgorICAgICAgICAgICAgICAgICghKHRtcCAmIFJFR19NU0soQ1JHX1BFUiwgQ0xLX1BFUl9SRUcsIFNQSV9DTEtfU0VMKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBQQ00gY2xvY2sKKyAgICAgICAgICAgIHRtcCA9IENSR19QRVItPlBDTV9ESVZfUkVHOworCisgICAgICAgICAgICBpZiAoKHRtcCAmIFJFR19NU0soQ1JHX1BFUiwgUENNX0RJVl9SRUcsIENMS19QQ01fRU4pKSAmJgorICAgICAgICAgICAgICAgICghKHRtcCAmIFJFR19NU0soQ1JHX1BFUiwgUENNX0RJVl9SRUcsIFBDTV9TUkNfU0VMKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBLQlNDTiBhbmQgUVVBRCBhcmUgbm90IHNlcmlvdXNseSBhZmZlY3RlZCBieSB0aGUgY2xvY2sgc3dpdGNoIGFuZCwgdGh1cywKKyAgICAgICAgICAgICAqIHRoZXkgY2Fubm90IGJsb2NrIGl0IQorICAgICAgICAgICAgICovCisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBDUkdfVE9QLT5DTEtfVE1SX1JFRzsKKworICAgICAgICAvLyBDaGVjayBUaW1lcjAgY2xvY2sKKyAgICAgICAgaWYgKCh0bXAgJiBSRUdfTVNLKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIwX0VOQUJMRSkpICYmCisgICAgICAgICAgICAoISh0bXAgJiBSRUdfTVNLKENSR19UT1AsIENMS19UTVJfUkVHLCBUTVIwX0NMS19TRUwpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgVGltZXIyIGNsb2NrCisgICAgICAgIGlmICgodG1wICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMl9FTkFCTEUpKSAmJgorICAgICAgICAgICAgKCEodG1wICYgUkVHX01TSyhDUkdfVE9QLCBDTEtfVE1SX1JFRywgVE1SMl9DTEtfU0VMKSkpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEJyZWF0aGUsIFNPQyBhbmQgV0RPRyBhcmUgbm90IHNlcmlvdXNseSBhZmZlY3RlZCBieSB0aGUgY2xvY2sgc3dpdGNoIGFuZCwgdGh1cywKKyAgICAgICAgICogdGhleSBjYW5ub3QgYmxvY2sgaXQhCisgICAgICAgICAqLworCisgICAgICAgIHJldCA9IHRydWU7CisgICAgfQorICAgIHdoaWxlICgwKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKwordm9pZCBod19jcG1fc2V0X3N5c2Nsayh1aW50MzJfdCBtb2RlKQoreworICAgIC8qIE1ha2Ugc3VyZSBhIHZhbGlkIHN5cyBjbG9jayBpcyByZXF1ZXN0ZWQgKi8KKyAgICBBU1NFUlRfV0FSTklORyhtb2RlIDw9IFNZU19DTEtfSVNfUExMKTsKKworICAgIFJFR19TRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgU1lTX0NMS19TRUwsIG1vZGUpOworCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgc3dpdGNoIGlzIGRvbmUhCisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICBjYXNlIFNZU19DTEtfSVNfWFRBTDE2TToKKyAgICAgICAgd2hpbGUgKFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgUlVOTklOR19BVF9YVEFMMTZNKSA9PSAwKSB7fQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTWVNfQ0xLX0lTX1JDMTY6CisgICAgICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFJVTk5JTkdfQVRfUkMxNk0pID09IDApIHt9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNZU19DTEtfSVNfTFA6CisgICAgICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBDTEtfQ1RSTF9SRUcsIFJVTk5JTkdfQVRfMzJLKSA9PSAwKSB7fQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTWVNfQ0xLX0lTX1BMTDoKKyAgICAgICAgd2hpbGUgKFJFR19HRVRGKENSR19UT1AsIENMS19DVFJMX1JFRywgUlVOTklOR19BVF9QTEw5Nk0pID09IDApIHt9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3ZvaWQgaHdfY3BtX3Nob3J0X2RlbGF5KHZvaWQpCit7CisgICAgdm9sYXRpbGUgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKyk7Cit9CisKKwordm9pZCBod19jcG1fcGxsX3N5c19vbih2b2lkKQoreworICAgIC8qIEJlZm9yZSBlbmFibGluZyB0aGUgUExMIExETywgdGhlIDEuNFYgdm9sdGFnZSBuZWVkcyB0byBiZSBwcmVzZW50OyBpbiByZWFsLWxpZmUgdGhpcworICAgICAqIGlzIGFjaGlldmVkIGJ5IGZpcnN0IHR1cm5pbmcgb24gdGhlIDEuNFYgQUNPUkUgTERPLCB0aGVuIHRoZSBEQ0RDIGNvbnZlcnRlciB0byB0YWtlIG92ZXIKKyAgICAgKiB0aGUgZ2VuZXJhdGlvbiBvZiAxLjRWIGFuZCBmaW5hbGx5IHR1cm5pbmcgb2ZmIHRoZSBBQ09SRSBMRE8uCisgICAgICovCisKKyAgICAvKiBMRE8gUExMIGVuYWJsZS4gKi8KKyAgICBSRUdfU0VUX0JJVChHUFJFRywgUExMX1NZU19DVFJMMV9SRUcsIExET19QTExfRU5BQkxFKTsKKworICAgIC8qIENvbmZpZ3VyZSBzeXN0ZW0gUExMLiAqLworICAgIFJFR19TRVRGKEdQUkVHLCBQTExfU1lTX0NUUkwxX1JFRywgUExMX1JfRElWLCAxKTsgLyogRGVmYXVsdC9yZXNldCB2YWx1ZS4gKi8KKworICAgIC8qIFByb2dyYW0gTi1kaXZpZGVyIGFuZCBERUxfU0VMLiAqLworICAgIFJFR19TRVRfQklUKEdQUkVHLCBQTExfU1lTX0NUUkwyX1JFRywgUExMX1NFTF9NSU5fQ1VSX0lOVCk7ICAgICAvLyBMYXN0IHJldmlldyBkYXRlOiBGZWIgMTUsIDIwMTYgLSAxMjoyNTo0NworCisgICAgLyogTm93IHR1cm4gb24gUExMLiAqLworICAgIFJFR19TRVRfQklUKEdQUkVHLCBQTExfU1lTX0NUUkwxX1JFRywgUExMX0VOKTsKKworICAgIHdoaWxlICgoR1BSRUctPlBMTF9TWVNfU1RBVFVTX1JFRyAmIFJFR19NU0soR1BSRUcsIFBMTF9TWVNfU1RBVFVTX1JFRywgTERPX1BMTF9PSykpID09IDApIHt9CisKKyAgICAvKiBBbmQgd2FpdCB1bnRpbCBsb2NrLiAqLworICAgIHdoaWxlICgoR1BSRUctPlBMTF9TWVNfU1RBVFVTX1JFRyAmIFJFR19NU0soR1BSRUcsIFBMTF9TWVNfU1RBVFVTX1JFRywgUExMX0xPQ0tfRklORSkpID09IDApIHt9Cit9CisKKwordm9pZCBod19jcG1fcGxsX3N5c19vZmYodm9pZCkKK3sKKyAgICAvLyBUaGUgUExMIGlzIG5vdCB0aGUgc3lzdGVtIGNsay4KKyAgICB3aGlsZSAoKENSR19UT1AtPkNMS19DVFJMX1JFRyAmIFJFR19NU0soQ1JHX1RPUCwgQ0xLX0NUUkxfUkVHLCBSVU5OSU5HX0FUX1BMTDk2TSkpICE9IDApOworCisgICAgR1BSRUctPlBMTF9TWVNfQ1RSTDFfUkVHID0gMHgwMDAwOyAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBvZmYgdGhlIFBMTC4KK30KKworCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod19jcG1fc3RhcnRfY2FsaWJyYXRpb24oY2FsX2Nsa190IGNsa190eXBlLCB1aW50MzJfdCBjeWNsZXMpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoUkVHX0dFVEYoQU5BTUlTQywgQ0xLX1JFRl9TRUxfUkVHLCBSRUZfQ0FMX1NUQVJUKSA9PSAwKTsgLy8gTXVzdCBiZSBkaXNhYmxlZAorCisgICAgQU5BTUlTQy0+Q0xLX1JFRl9DTlRfUkVHID0gY3ljbGVzOyAgICAgICAgICAgICAgICAgICAgICAvLyAjIG9mIGNhbCBjbG9jayBjeWNsZXMKKyAgICBSRUdfU0VURihBTkFNSVNDLCBDTEtfUkVGX1NFTF9SRUcsIFJFRl9DTEtfU0VMLCBjbGtfdHlwZSk7CisgICAgUkVHX1NFVF9CSVQoQU5BTUlTQywgQ0xLX1JFRl9TRUxfUkVHLCBSRUZfQ0FMX1NUQVJUKTsKK30KKworCit1aW50MzJfdCBod19jcG1fZ2V0X2NhbGlicmF0aW9uX2RhdGEodm9pZCkKK3sKKyAgICB1aW50MzJfdCBoaWdoOworICAgIHVpbnQzMl90IGxvdzsKKyAgICB1aW50MzJfdCB2YWx1ZTsKKworICAgIHdoaWxlIChSRUdfR0VURihBTkFNSVNDLCBDTEtfUkVGX1NFTF9SRUcsIFJFRl9DQUxfU1RBUlQpID09IDEpOyAgICAgICAgIC8vIFdhaXQgdW50aWwgaXQncyBmaW5pc2hlZAorCisgICAgaGlnaCA9IEFOQU1JU0MtPkNMS19SRUZfVkFMX0hfUkVHOworICAgIGxvdyA9IEFOQU1JU0MtPkNMS19SRUZfVkFMX0xfUkVHOworICAgIHZhbHVlID0gKGhpZ2ggPDwgMTYpICsgbG93OworCisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIGh3X2NwbV9kY2RjX2NvbmZpZyh2b2lkKQoreworICAgIHVpbnQzMl90IHJlZzsKKworICAgIC8qCisgICAgICogUHJlZmVycmVkIHNldHRpbmdzIHNlY3Rpb24KKyAgICAgKiBMYXN0IHJldmlldyBkYXRlOiBGZWIgMTUsIDIwMTYgLSAxMjoyNTo0NworICAgICAqLworICAgIFJFR19DTFJfQklUKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19GV19FTkFCTEUpOworCisgICAgcmVnID0gRENEQy0+RENEQ19JUlFfTUFTS19SRUc7CisgICAgUkVHX1NFVF9GSUVMRChEQ0RDLCBEQ0RDX0lSUV9NQVNLX1JFRywgRENEQ19WMThQX1RJTUVPVVRfSVJRX01BU0ssIHJlZywgMSk7CisgICAgUkVHX1NFVF9GSUVMRChEQ0RDLCBEQ0RDX0lSUV9NQVNLX1JFRywgRENEQ19WRERfVElNRU9VVF9JUlFfTUFTSywgcmVnLCAxKTsKKyAgICBSRUdfU0VUX0ZJRUxEKERDREMsIERDRENfSVJRX01BU0tfUkVHLCBEQ0RDX1YxOF9USU1FT1VUX0lSUV9NQVNLLCByZWcsIDEpOworICAgIFJFR19TRVRfRklFTEQoRENEQywgRENEQ19JUlFfTUFTS19SRUcsIERDRENfVjE0X1RJTUVPVVRfSVJRX01BU0ssIHJlZywgMSk7CisgICAgRENEQy0+RENEQ19JUlFfTUFTS19SRUcgPSByZWc7CisKKyAgICBSRUdfU0VUX0JJVChEQ0RDLCBEQ0RDX1RSSU1fUkVHLCBEQ0RDX1BfQ09NUF9NQU5fVFJJTSk7CisKKyAgICBEQ0RDLT5EQ0RDX1YxNF8wX1JFRyAmPSB+KFJFR19NU0soRENEQywgRENEQ19WMTRfMF9SRUcsIERDRENfVjE0X0NVUl9MSU1fTUlOKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKERDREMsIERDRENfVjE0XzBfUkVHLCBEQ0RDX1YxNF9GQVNUX1JBTVBJTkcpKTsKKworICAgIERDREMtPkRDRENfVjE4XzBfUkVHICY9IH4oUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOF8wX1JFRywgRENEQ19WMThfQ1VSX0xJTV9NSU4pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soRENEQywgRENEQ19WMThfMF9SRUcsIERDRENfVjE4X0ZBU1RfUkFNUElORykpOworCisgICAgRENEQy0+RENEQ19WMThQXzBfUkVHICY9IH4oUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOFBfMF9SRUcsIERDRENfVjE4UF9DVVJfTElNX01JTikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soRENEQywgRENEQ19WMThQXzBfUkVHLCBEQ0RDX1YxOFBfRkFTVF9SQU1QSU5HKSk7CisKKyAgICBEQ0RDLT5EQ0RDX1ZERF8wX1JFRyAmPSB+KFJFR19NU0soRENEQywgRENEQ19WRERfMF9SRUcsIERDRENfVkREX0NVUl9MSU1fTUlOKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKERDREMsIERDRENfVkREXzBfUkVHLCBEQ0RDX1ZERF9GQVNUX1JBTVBJTkcpKTsKKworICAgIFJFR19TRVRGKERDREMsIERDRENfVkREXzFfUkVHLCBEQ0RDX1ZERF9DVVJfTElNX01BWF9MViwgMHhEKTsKKworICAgIFJFR19TRVRGKERDREMsIERDRENfVjE0XzBfUkVHLCBEQ0RDX1YxNF9WT0xUQUdFLCAweDcpOworCisgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgPT0gMSkKKyAgICB7CisgICAgICAgIFJFR19TRVRGKERDREMsIERDRENfVjE4XzBfUkVHLCBEQ0RDX1YxOF9WT0xUQUdFLCAweDE2KTsKKyAgICB9CisKKyAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4UCA9PSAxKQorICAgIHsKKyAgICAgICAgUkVHX1NFVEYoRENEQywgRENEQ19WMThQXzBfUkVHLCBEQ0RDX1YxOFBfVk9MVEFHRSwgMHgxNik7CisgICAgfQorCisgICAgLy8gRW5kIG9mIHByZWZlcnJlZCBzZXR0aW5ncworCisgICAgRENEQy0+RENEQ19WRERfMV9SRUcgfD0gKCgxIDw8IFJFR19QT1MoRENEQywgRENEQ19WRERfMV9SRUcsIERDRENfVkREX0VOQUJMRV9IVikpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgUkVHX1BPUyhEQ0RDLCBEQ0RDX1ZERF8xX1JFRywgRENEQ19WRERfRU5BQkxFX0xWKSkpOworCisgICAgaWYgKChkZ19jb25maWdQT1dFUl8xVjhfQUNUSVZFID09IDEpICYmIGNwbV8xdjhfc3RhdGUpCisgICAgeworICAgICAgICBEQ0RDLT5EQ0RDX1YxOF8xX1JFRyB8PSAoMSA8PCBSRUdfUE9TKERDREMsIERDRENfVjE4XzFfUkVHLCBEQ0RDX1YxOF9FTkFCTEVfSFYpKTsKKyAgICAgICAgRENEQy0+RENEQ19WMThfMV9SRUcgJj0gflJFR19NU0soRENEQywgRENEQ19WMThfMV9SRUcsIERDRENfVjE4X0VOQUJMRV9MVik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERDREMtPkRDRENfVjE4XzFfUkVHICY9IH4oUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOF8xX1JFRywgRENEQ19WMThfRU5BQkxFX0hWKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOF8xX1JFRywgRENEQ19WMThfRU5BQkxFX0xWKSk7CisgICAgfQorCisgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMSkKKyAgICB7CisgICAgICAgIERDREMtPkRDRENfVjE4UF8xX1JFRyB8PSAoMSA8PCBSRUdfUE9TKERDREMsIERDRENfVjE4UF8xX1JFRywgRENEQ19WMThQX0VOQUJMRV9IVikpOworICAgICAgICBEQ0RDLT5EQ0RDX1YxOFBfMV9SRUcgJj0gflJFR19NU0soRENEQywgRENEQ19WMThQXzFfUkVHLCBEQ0RDX1YxOFBfRU5BQkxFX0xWKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRENEQy0+RENEQ19WMThQXzFfUkVHICY9IH4oUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOFBfMV9SRUcsIERDRENfVjE4UF9FTkFCTEVfSFYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhEQ0RDLCBEQ0RDX1YxOFBfMV9SRUcsIERDRENfVjE4UF9FTkFCTEVfTFYpKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfY3BtX2RjZGNfb24odm9pZCkKK3sKKyAgICBEQ0RDLT5EQ0RDX1YxNF8xX1JFRyB8PSAoKDEgPDwgUkVHX1BPUyhEQ0RDLCBEQ0RDX1YxNF8xX1JFRywgRENEQ19WMTRfRU5BQkxFX0hWKSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBSRUdfUE9TKERDREMsIERDRENfVjE0XzFfUkVHLCBEQ0RDX1YxNF9FTkFCTEVfTFYpKSk7CisKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1ZERF8wX1JFRywgRENEQ19WRERfVk9MVEFHRSwgMHgxMCk7ICAgICAgLy8gMS4yIFYKKworICAgIFJFR19TRVRGKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFLCAxKTsKKworICAgIC8vIFRyaW0gdGhlIExET3MgZG93biB0byBsb3dlc3QgcG9zc2libGUgdm9sdGFnZSBzbyBEQ0RDIGNhbiB0YWtlIG92ZXIKKyAgICBDUkdfVE9QLT5MRE9fQ1RSTDFfUkVHICY9IH5SRUdfTVNLKENSR19UT1AsIExET19DVFJMMV9SRUcsIExET19SQURJT19TRVRWREQpOworICAgIFJFR19TRVRGKENSR19UT1AsIExET19DVFJMMV9SRUcsIExET19DT1JFX1NFVFZERCwgMHgyKTsKKworICAgIC8vIFR1cm4gb2ZmIExET3MKKyAgICBDUkdfVE9QLT5MRE9fQ1RSTDFfUkVHICY9IH5SRUdfTVNLKENSR19UT1AsIExET19DVFJMMV9SRUcsIExET19SQURJT19FTkFCTEUpOworICAgIENSR19UT1AtPkxET19DVFJMMl9SRUcgJj0gfihSRUdfTVNLKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjJfT04pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX09OKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19NU0soQ1JHX1RPUCwgTERPX0NUUkwyX1JFRywgTERPXzFWOF9QQV9PTikpOworCisgICAgLy8gVHJpbSB0aGUgTERPcyBiYWNrIHRvIG5vcm1hbCBsZXZlbHMKKyAgICBod19jcG1fcmVzZXRfcmFkaW9fdmRkKCk7CisgICAgQ1JHX1RPUC0+TERPX0NUUkwxX1JFRyAmPSB+UkVHX01TSyhDUkdfVE9QLCBMRE9fQ1RSTDFfUkVHLCBMRE9fQ09SRV9TRVRWREQpOworfQorCisKK3ZvaWQgaHdfY3BtX3NldF9wcmVmZXJyZWRfdmFsdWVzKHZvaWQpCit7CisgICAgdWludDMyX3QgcmVnOworCisgICAgcmVnID0gQ1JHX1RPUC0+Q0xLXzE2TV9SRUc7CisKKyAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS18xNk1fUkVHLCBYVEFMMTZfSFBBU1NfRkxUX0VOLCByZWcsIDEpOyAvLyBMYXN0IHJldmlldyBkYXRlOiBGZWIgMTUsIDIwMTYgLSAxMjoyNTo0NworICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQ0xLXzE2TV9SRUcsIFhUQUwxNl9BTVBfVFJJTSwgcmVnLCA1KTsKKyAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIENMS18xNk1fUkVHLCBYVEFMMTZfQ1VSX1NFVCwgcmVnLCA1KTsKKworICAgIENSR19UT1AtPkNMS18xNk1fUkVHID0gcmVnOworCisgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQkFOREdBUF9SRUcsIExET19TTEVFUF9UUklNLCAweDgpOworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICBSRUdfU0VURihDUkdfVE9QLCBCQU5ER0FQX1JFRywgQllQQVNTX0NPTERfQk9PVF9ESVNBQkxFLCAxKTsgLy8gTGFzdCByZXZpZXcgZGF0ZTogRmViIDE1LCAyMDE2IC0gMTI6MjU6NDcKKyNlbmRpZgorfQorCit2b2lkIGh3X2NwbV9jb25maWd1cmVfeHRhbDMya19waW5zKHZvaWQpCit7CisgICAgR1BJTy0+UDIwX01PREVfUkVHID0gMHgyNjsKKyAgICBHUElPLT5QMjFfTU9ERV9SRUcgPSAweDI2OworfQorCit2b2lkIGh3X2NwbV9jb25maWd1cmVfZXh0MzJrX3BpbnModm9pZCkKK3sKKyAgICBHUElPLT5QMjBfTU9ERV9SRUcgPSAweDA7Cit9CisKK3ZvaWQgaHdfY3BtX3RyaWdnZXJfc3dfY3Vyc29yKHZvaWQpCit7CisgICAgaWYgKGRnX2NvbmZpZ1VTRV9TV19DVVJTT1IgPT0gMSkKKyAgICB7CisgICAgICAgIGlmIChkZ19jb25maWdCTEFDS19PUkNBX01CX1JFViA9PSBCTEFDS19PUkNBX01CX1JFVl9EKQorICAgICAgICB7CisgICAgICAgICAgICBTV19DVVJTT1JfU0VUID0gMSA8PCBTV19DVVJTT1JfUElOOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU1dfQ1VSU09SX1JFU0VUID0gMSA8PCBTV19DVVJTT1JfUElOOworICAgICAgICB9CisKKyAgICAgICAgU1dfQ1VSU09SX0dQSU8gPSAweDMwMDsKKworICAgICAgICBod19jcG1fZGVsYXlfdXNlYyg1MCk7CisKKyAgICAgICAgaWYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfTUJfUkVWID09IEJMQUNLX09SQ0FfTUJfUkVWX0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNXX0NVUlNPUl9SRVNFVCA9IDEgPDwgU1dfQ1VSU09SX1BJTjsKKyAgICAgICAgfQorCisgICAgICAgIGh3X2NwbV9zZXR1cF9zd19jdXJzb3IoKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfY3BtX3Jlc2V0X3N5c3RlbSh2b2lkKQoreworICAgIF9fYXNtIHZvbGF0aWxlKCIgY3BzaWQgaSAiKTsKKworICAgIGh3X3dhdGNoZG9nX3VucmVnaXN0ZXJfaW50KCk7CisgICAgaHdfd2F0Y2hkb2dfc2V0X3Bvc192YWwoMSk7CisgICAgaHdfd2F0Y2hkb2dfdW5mcmVlemUoKTsKKworICAgIHdoaWxlICgxKTsKK30KKwordm9pZCBod19jcG1fcmVib290X3N5c3RlbSh2b2lkKQoreworICAgIF9fYXNtIHZvbGF0aWxlKCIgY3BzaWQgaSAiKTsKKworICAgIGh3X3dhdGNoZG9nX2dlbl9SU1QoKTsKKyAgICBod193YXRjaGRvZ19zZXRfcG9zX3ZhbCgxKTsKKyAgICBod193YXRjaGRvZ191bmZyZWV6ZSgpOworCisgICAgd2hpbGUgKDEpOworfQorCit2b2lkIGh3X2NwbV9hc3NlcnRfdHJpZ2dlcl9ncGlvKHZvaWQpCit7CisgICAgaWYgKEVYQ0VQVElPTl9ERUJVRyA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKGRnX2NvbmZpZ0xQX0NMS19TT1VSQ0UgPT0gTFBfQ0xLX0lTX0RJR0lUQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X2NwbV9jb25maWd1cmVfZXh0MzJrX3BpbnMoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoZGdfY29uZmlnVVNFX0xQX0NMSyA9PSBMUF9DTEtfMzIwMDApCisgICAgICAgICAgICAgICAgIHx8IChkZ19jb25maWdVU0VfTFBfQ0xLID09IExQX0NMS18zMjc2OCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X2NwbV9jb25maWd1cmVfeHRhbDMya19waW5zKCk7CisgICAgICAgIH0KKworICAgICAgICBod19jcG1fcG93ZXJfdXBfcGVyX3BkKCk7CisgICAgICAgIGh3X2NwbV9kZWFjdGl2YXRlX3BhZF9sYXRjaGVzKCk7CisKKyAgICAgICAgREJHX1NFVF9ISUdIKEVYQ0VQVElPTl9ERUJVRywgRVhDRVBUSU9OREJHKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgSFdfQ1BNX0FDVElWQVRFX0JPRF9QUk9URUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdWludDE2X3QgdmFsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVHX1NFVEYoQ1JHX1RPUCwgQk9EX0NUUkxfUkVHLCBCT0RfVkREX0xWTCwgMSk7ICAgICAgICAgICAgICAgIC8qIFZERCBMZXZlbCAoNzAwbVYpICovICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGh3X2NwbV9ib2RfZW5hYmxlZF9pbl90Y3MgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB2YWwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAvKiBWQkFUIGVuYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9WQkFUX0VOLCB2YWwsIDEpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAvKiAxVjggRmxhc2ggZW5hYmxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoKGRnX2NvbmZpZ1BPV0VSXzFWOF9BQ1RJVkUgPT0gMSkgJiYgKGRnX2NvbmZpZ1BPV0VSXzFWOF9TTEVFUCA9PSAxKSkgeyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9GTEFTSF9FTiwgdmFsLCAxKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAvKiAxVjhQIGVuYWJsZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4UCA9PSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFR19TRVRfRklFTEQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9QQV9FTiwgdmFsLCAxKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9WRERfRU4sIHZhbCwgMSk7ICAgICAgIC8qIFZERCBlbmFibGUgKi8gIFwKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9SRVNFVF9FTiwgdmFsLCAxKTsgICAgIC8qIFJlc2V0IGVuYWJsZSAqL1wKKyAgICAgICAgICAgICAgICBDUkdfVE9QLT5CT0RfQ1RSTDJfUkVHID0gdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQ1JHX1RPUC0+Qk9EX0NUUkwyX1JFRyA9IGh3X2NwbV9ib2RfZW5hYmxlZF9pbl90Y3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApOworCit2b2lkIGh3X2NwbV9hY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbih2b2lkKQoreworICAgIEhXX0NQTV9BQ1RJVkFURV9CT0RfUFJPVEVDVElPTgorfQorCit2b2lkIGh3X2NwbV9hY3RpdmF0ZV9ib2RfcHJvdGVjdGlvbl9hdF9pbml0KHZvaWQpCit7CisgICAgSFdfQ1BNX0FDVElWQVRFX0JPRF9QUk9URUNUSU9OCit9CisKK3ZvaWQgaHdfY3BtX2NvbmZpZ3VyZV9ib2RfcHJvdGVjdGlvbih2b2lkKQoreworICAgIFJFR19TRVRGKENSR19UT1AsIEJPRF9DVFJMX1JFRywgQk9EX1ZERF9MVkwsIDEpOyAgICAgICAgICAgICAgICAvKiBWREQgTGV2ZWwgKDcwMG1WKSAqLworCisgICAgaWYgKGh3X2NwbV9ib2RfZW5hYmxlZF9pbl90Y3MgPT0gMCkKKyAgICB7CisgICAgICAgIC8qIFZCQVQgZW5hYmxlICovCisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9WQkFUX0VOKTsKKworICAgICAgICAvKiAxVjggRmxhc2ggZW5hYmxlICovCisgICAgICAgIGlmICgoZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSA9PSAxKSAmJiAoZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfMVY4X0ZMQVNIX0VOKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19DTFJfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF8xVjhfRkxBU0hfRU4pOworICAgICAgICB9CisKKyAgICAgICAgLyogMVY4UCBlbmFibGUgKi8KKyAgICAgICAgaWYgKGRnX2NvbmZpZ1BPV0VSXzFWOFAgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9QQV9FTik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBCT0RfQ1RSTDJfUkVHLCBCT0RfMVY4X1BBX0VOKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdlbmVyYXRlIFJlc2V0IG9uIGEgQk9EIGV2ZW50ICovCisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIEJPRF9DVFJMMl9SRUcsIEJPRF9SRVNFVF9FTik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIENSR19UT1AtPkJPRF9DVFJMMl9SRUcgPSBod19jcG1fYm9kX2VuYWJsZWRfaW5fdGNzOworICAgIH0KK30KKwordm9pZCBod19jcG1fc2V0XzF2OF9zdGF0ZShib29sIHN0YXRlKQoreworICAgIGlmICgoZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSA9PSAxKSAmJiAoY3BtXzF2OF9zdGF0ZSAhPSBzdGF0ZSkpCisgICAgeworICAgICAgICB1aW50MzJfdCByZWc7CisgICAgICAgIHVpbnQzMl90IGRjZGNfc3RhdGU7CisKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisKKyAgICAgICAgcmVnID0gQ1JHX1RPUC0+TERPX0NUUkwyX1JFRzsKKyAgICAgICAgZGNkY19zdGF0ZSA9ICh1aW50MzJfdClSRUdfR0VURihEQ0RDLCBEQ0RDX0NUUkxfMF9SRUcsIERDRENfTU9ERSk7CisKKyNpZiAoZGdfY29uZmlnUE9XRVJfMVY4X0FDVElWRSA9PSAxKQorICAgICAgICBjcG1fMXY4X3N0YXRlID0gc3RhdGU7CisjZW5kaWYKKworICAgICAgICBpZiAoIWNwbV8xdjhfc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERpc2FibGUgQk9EIGZvciB0aGUgMVY4IHJhaWwKKyAgICAgICAgICAgIGlmIChkZ19jb25maWdVU0VfQk9EID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgQk9EX0NUUkwyX1JFRywgQk9EXzFWOF9GTEFTSF9FTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERlYWN0aXZhdGUgMVY4IHJhaWwgaW4gTERPcworICAgICAgICAgICAgUkVHX0NMUl9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX09OLCByZWcpOworCisgICAgICAgICAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX1NFVF9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ1JHX1RPUC0+TERPX0NUUkwyX1JFRyA9IHJlZzsKKworICAgICAgICAgICAgLy8gRGVhY3RpdmF0ZSAxVjggcmFpbCBpbiBEQ0RDCisgICAgICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0RDREMgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIERDREMgdG8gYXBwbHkgY2hhbmdlCisgICAgICAgICAgICAgICAgUkVHX1NFVEYoRENEQywgRENEQ19DVFJMXzBfUkVHLCBEQ0RDX01PREUsIDApOworCisgICAgICAgICAgICAgICAgRENEQy0+RENEQ19WMThfMV9SRUcgJj0KKyAgICAgICAgICAgICAgICAgICAgfihSRUdfTVNLKERDREMsIERDRENfVjE4XzFfUkVHLCBEQ0RDX1YxOF9FTkFCTEVfSFYpIHwKKyAgICAgICAgICAgICAgICAgICAgICBSRUdfTVNLKERDREMsIERDRENfVjE4XzFfUkVHLCBEQ0RDX1YxOF9FTkFCTEVfTFYpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgRENEQworICAgICAgICAgICAgICAgIFJFR19TRVRGKERDREMsIERDRENfQ1RSTF8wX1JFRywgRENEQ19NT0RFLCBkY2RjX3N0YXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgMVY4IHJhaWwgaW4gTERPcworICAgICAgICAgICAgLyogQnV0IG5vdCB3aGVuIERDREMgaXMgcnVubmluZy4uLiAqLworICAgICAgICAgICAgaWYgKGRjZGNfc3RhdGUgIT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUdfU0VUX0ZJRUxEKENSR19UT1AsIExET19DVFJMMl9SRUcsIExET18xVjhfRkxBU0hfT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcsIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGdfY29uZmlnUE9XRVJfMVY4X1NMRUVQID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX0NMUl9GSUVMRChDUkdfVE9QLCBMRE9fQ1RSTDJfUkVHLCBMRE9fMVY4X0ZMQVNIX1JFVF9ESVNBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ1JHX1RPUC0+TERPX0NUUkwyX1JFRyA9IHJlZzsKKworICAgICAgICAgICAgLy8gUmVzdG9yZSAxVjggcmFpbCBpbiBEQ0RDCisgICAgICAgICAgICBpZiAoZGdfY29uZmlnVVNFX0RDREMgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQ0RDLT5EQ0RDX1YxOF8xX1JFRyB8PSAoMSA8PCBSRUdfUE9TKERDREMsIERDRENfVjE4XzFfUkVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENEQ19WMThfRU5BQkxFX0hWKSk7CisgICAgICAgICAgICAgICAgRENEQy0+RENEQ19WMThfMV9SRUcgJj0gflJFR19NU0soRENEQywgRENEQ19WMThfMV9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENEQ19WMThfRU5BQkxFX0xWKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVzdG9yZSBCT0Qgc2V0dXAKKyAgICAgICAgICAgIGlmIChkZ19jb25maWdVU0VfQk9EID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHdfY3BtX2RlbGF5X3VzZWMoMjAwKTsKKyAgICAgICAgICAgICAgICBod19jcG1fY29uZmlndXJlX2JvZF9wcm90ZWN0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICB9Cit9CisKK2Jvb2wgaHdfY3BtX2dldF8xdjhfc3RhdGUodm9pZCkKK3sKKyAgICByZXR1cm4gY3BtXzF2OF9zdGF0ZTsKK30KKwordm9pZCBod19jcG1fZGVsYXlfdXNlYyh1aW50MzJfdCB1c2VjKQoreworICAgIHN5c19jbGtfdCBzY2xrOworICAgIGFoYl9kaXZfdCBoY2xrOworICAgIHVpbnQ4X3QgZnJlcTsKKworICAgIHNjbGsgPSBjbV9zeXNjbGs7CisgICAgaGNsayA9IGNtX2FoYmNsazsKKyAgICBmcmVxID0gMTYgPj4gaGNsazsKKworICAgIC8qIFJlcXVlc3RlZCBkZWxheSB0aW1lIG11c3QgYmUgPiAwIHVzZWMgKi8KKyAgICBBU1NFUlRfV0FSTklORyh1c2VjICE9IDApOworCisgICAgLyoKKyAgICAgKiAgICAgIGxkciByMywgW3BjLCAjMTQ4XSAgICAgIDIgY3ljbGVzCisgICAgICogICAgICBwdXNoIHtyNCwgbHJ9ICAgICAgICAgICAyIGN5Y2xlcworICAgICAqICAgICAgbGRyYiByMSwgW3IzLCAjMTddICAgICAgMiBjeWNsZXMKKyAgICAgKiAgICAgIGxkcmIgcjIsIFtyMywgIzhdICAgICAgIDIgY3ljbGVzCisgICAgICogICAgICBtb3ZzIHIzLCAjMTYgICAgICAgICAgICAxIGN5Y2xlCisgICAgICogICAgICBhc3JzIHIzLCByMiAgICAgICAgICAgICAxIGN5Y2xlCisgICAgICogICAgICB1eHRiIHIzLCByMiAgICAgICAgICAgICAxIGN5Y2xlCisgICAgICogICAgICAtLS0tLS0tLS0tCisgICAgICogICAgICBjbXAgcjAsICMwICAgICAgICAgICAgICA0IGN5Y2xlcyBvdmVyaGVhZCBpbiB0b3RhbAorICAgICAqICAgICAgYm5lLm4gMHg4MDAzMTA2IDxod19jcG1fZGVsYXlfdXNlYyszMD4KKyAgICAgKiAgICAgIGNwc2lkIGkKKyAgICAgKiAgICAgIGJrcHQgMHgwMDAyCisgICAgICoKKyAgICAgKiAgICAgIFRvdGFsOiAxMSBjeWNsZXMKKyAgICAgKi8KKworICAgIF9fYXNtIHZvbGF0aWxlKCIgICAgICAgY21wICVbc2Nsa10sICMxICAgICAgICAgICAgICAgICBcbiIgICAgICAgIC8vIDEgY3ljbGUgICAgICA6IDEgKHN5c2Nsa19SQzE2LCBzeXNjbGtfWFRBTDE2TSkKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJsZSBzdGFydCAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAyLzQKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGNtcCAlW3NjbGtdLCAjMyAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAzIChzeXNjbGtfUExMNDgpCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiZ3Qgczk2TSAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogNC82CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibHQgczMyTSAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogNS83CisgICAgICAgICAgICAgICAgICAgInM0OE06ICBhZGQgcjQsICVbZnJlcV0sICVbZnJlcV0gICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogNgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYWRkICVbZnJlcV0sIHI0LCAlW2ZyZXFdICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDcKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgc3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAxMAorICAgICAgICAgICAgICAgICAgICJzOTZNOiAgYWRkIHI0LCAlW2ZyZXFdLCAlW2ZyZXFdICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDcKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGFkZCAlW2ZyZXFdLCByNCwgJVtmcmVxXSAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA4CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBsc2wgJVtmcmVxXSwgJVtmcmVxXSwgIzEgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogOQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBzdGFydCAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDEyCisgICAgICAgICAgICAgICAgICAgInMzMk06ICBsc2wgJVtmcmVxXSwgJVtmcmVxXSwgIzEgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogOAorICAgICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgICAgICAgICAgICAgICAvKiBPdmVyaGVhZCB1cCB0byB0aGlzIHBvaW50OgorICAgICAgICAgICAgICAgICAgICAqICAgICAgc3lzY2xrX1JDMTYgICAgIDogMTUgY3ljbGVzIChlcnJvcjogMTUvMTYgIC0gMTUgICB1c2VjKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgc3lzY2xrX1hUQUwxNk0gIDogMTUgY3ljbGVzIChlcnJvcjogMTUvMTYgIC0gMTUgICB1c2VjKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgc3lzY2xrX1hUQUwzMk0gIDogMTkgY3ljbGVzIChlcnJvcjogMTkvMzIgIC0gMTkvMiB1c2VjKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgc3lzY2xrX1BMTDQ4ICAgIDogMjEgY3ljbGVzIChlcnJvcjogMjEvNDggIC0gMjEvMyB1c2VjKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgc3lzY2xrX1BMTDk2ICAgIDogMjMgY3ljbGVzIChlcnJvcjogMjMvOTYgLSAgMjMvNiB1c2VjKQorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICJzdGFydDogY21wICVbZnJlcV0sICMxNiAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDEKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJndCBoaWdoICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAyLzQKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJsdCBsb3cgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAzLzUKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIG1vdiAlW3NjbGtdLCAjNCAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA0CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGNhbGMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogNworICAgICAgICAgICAgICAgICAgICJoaWdoOiAgY21wICVbZnJlcV0sICMyNCAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDUKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJuZSBjMzJNICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiA2LzgKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIG1vdiAlW3NjbGtdLCAjNiAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA3CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGNhbGMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMTAKKyAgICAgICAgICAgICAgICAgICAiYzMyTTogIGNtcCAlW2ZyZXFdLCAjMzIgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiA5CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibmUgYzQ4TSAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMTAvMTIKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIG1vdiAlW3NjbGtdLCAjOCAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxMQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBjYWxjICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDEyCisgICAgICAgICAgICAgICAgICAgImM0OE06ICBjbXAgJVtmcmVxXSwgIzQ4ICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMTMKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJuZSBjOTZNICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAxNC8xNgorICAgICAgICAgICAgICAgICAgICIgICAgICAgbW92ICVbc2Nsa10sICMxMiAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDE1CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGNhbGMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMTgKKyAgICAgICAgICAgICAgICAgICAiYzk2TTogIG1vdiAlW3NjbGtdLCAjMjQgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxNworICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBjYWxjICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDIwCisgICAgICAgICAgICAgICAgICAgImxvdzogICBjbXAgJVtmcmVxXSwgIzEgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogNgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmd0IGMyTSAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDcvOQorICAgICAgICAgICAgICAgICAgICIgICAgICAgbHNyICVbdXNlY10sICVbdXNlY10sICMyICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDgKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAxMQorICAgICAgICAgICAgICAgICAgICJjMk06ICAgY21wICVbZnJlcV0sICMyICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDEwCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiZ3QgYzNNICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBvciAzIGN5Y2xlczogMTEvMTMKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGxzciAlW3VzZWNdLCAlW3VzZWNdLCAjMSAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxMgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYiBsb29wICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzICAgICA6IDE1CisgICAgICAgICAgICAgICAgICAgImMzTTogICBjbXAgJVtmcmVxXSwgIzMgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMTQKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGJndCBjNE0gICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIG9yIDMgY3ljbGVzOiAxNS8xNworICAgICAgICAgICAgICAgICAgICIgICAgICAgbHNyICVbdXNlY10sICVbdXNlY10sICMxICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDE2CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGxvb3AxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMTkKKyAgICAgICAgICAgICAgICAgICAiYzRNOiAgIGNtcCAlW2ZyZXFdLCAjNCAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAxOAorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmd0IGM2TSAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDE5LzIxCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMjIKKyAgICAgICAgICAgICAgICAgICAiYzZNOiAgIGNtcCAlW2ZyZXFdLCM2ICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAyMgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmd0IGM4TSAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDIzLzI1CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBiIGxvb3AxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgICAgIDogMjYKKyAgICAgICAgICAgICAgICAgICAiYzhNOiAgIGNtcCAlW2ZyZXFdLCAjOCAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlICAgICAgOiAyNgorICAgICAgICAgICAgICAgICAgICIgICAgICAgYmd0IGMxMk0gICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgb3IgMyBjeWNsZXM6IDI3LzI5CisgICAgICAgICAgICAgICAgICAgIiAgICAgICBtb3YgJVtzY2xrXSwgIzIgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMjgKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgY2FsYyAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcyAgICAgOiAzMQorICAgICAgICAgICAgICAgICAgICJjMTJNOiAgbW92ICVbc2Nsa10sICMyICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUgICAgICA6IDMwCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBtdWwgJVt1c2VjXSwgJVtzY2xrXSwgJVt1c2VjXSAgIFxuIiAgICAgLy8gMSBjeWNsZSAgICAgIDogMzEKKyAgICAgICAgICAgICAgICAgICAvKiBFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAxTUh6OiAxMSBjeWNsZXMsIDExdXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgIDJNSHo6IDE1IGN5Y2xlcywgIDcuNXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAzTUh6OiAxOSBjeWNsZXMsICA2LjMzdXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgIDRNSHo6IDIyIGN5Y2xlcywgIDUuNXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA2TUh6OiAyNiBjeWNsZXMsICA0LjMzdXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgIDhNSHo6IDMxIGN5Y2xlcywgIDMuODc1dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgMTJNSHo6IDMxIGN5Y2xlcywgIDIuNTg0dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgMTZNSHo6ICA4IGN5Y2xlcywgIDAuNXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDI0TUh6OiAxMSBjeWNsZXMsICAwLjQ1OXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDMyTUh6OiAxMyBjeWNsZXMsICAwLjQwNnVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDQ4TUh6OiAxOSBjeWNsZXMsICAwLjM5NnVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDk2TUh6OiAyMSBjeWNsZXMsICAwLjIxOXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAqIDEgbG9vcCBvZiA0IGN5Y2xlcyBpcyAtLS0gMSB1c2VjIGlzICMgbG9vcHMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAxTUh6OiA0dXNlYyAgICAgLS0tICBkaXZpZGUgKHVzZWMpIGJ5IDQgKHVwIHRvIDV1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgIDJNSHo6IDJ1c2VjICAgICAtLS0gIGRpdmlkZSAodXNlYykgYnkgMiAodXAgdG8gMnVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICogICAgICAgNE1IejogMXVzZWMgICAgIC0tLSAgMSBsb29wICAoIDAqNCArIDEqMiwgMC41MDAwdXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICA4TUh6OiA1MDBuc2VjICAgLS0tICAyIGxvb3BzICggMSo0ICsgMSoyLCAwLjI1MDB1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgMTZNSHo6IDI1MG5zZWMgICAtLS0gIDQgbG9vcHMgKCAzKjQgKyAxKjIsIDAuNTAwMHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICogICAgICAyNE1IejogMTY3bnNlYyAgIC0tLSAgNiBsb29wcyAoIDUqNCArIDEqMiwgMC4wODMwdXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDMyTUh6OiAxMjVuc2VjICAgLS0tICA4IGxvb3BzICggNyo0ICsgMSoyLCAwLjA2MjV1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgNDhNSHo6ICA4NG5zZWMgICAtLS0gMTIgbG9vcHMgKDExKjQgKyAxKjIsIDAuMDQyMHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICogICAgICA5Nk1IejogIDQybnNlYyAgIC0tLSAyNCBsb29wcyAoMjMqNCArIDEqMiwgMC4wMjEwdXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAqIDEgbG9vcCBvZiA2IGN5Y2xlcyBpcyAtLS0gMSB1c2VjIGlzICMgbG9vcHMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAzTUh6OiAydXNlYyAgICAgLS0tICBkaXZpZGUgKHVzZWMpIGJ5IDIgKHVwIHRvIDN1c2VjIGVycm9yKQorICAgICAgICAgICAgICAgICAgICAqICAgICAgIDZNSHo6IDF1c2VjICAgICAtLS0gIDEgbG9vcCAgKCAwKjYgKyAxKjcsIDAuMTY3MHVzZWMgZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICogICAgICAxMk1IejogMC41dXNlYyAgIC0tLSAgMiBsb29wcyAoIDEqNiArIDEqNywgMC4wODMwdXNlYyBlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAqIEN1bXVsYXRpdmUgZXJyb3IgaXM6CisgICAgICAgICAgICAgICAgICAgICogICAgICAgMU1IejogMTEgKyA1ICAgICAgICAgPSAxNnVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAyTUh6OiA3LjUgKyAyICAgICAgICA9IDkuNXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgICAzTUh6OiA2LjMzICsgMyAgICAgICA9IDkuMzN1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAgNE1IejogNS41ICsgMC41ICAgICAgPSA2dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgIDZNSHo6IDQuMzMgKyAwLjE2NyAgID0gNC41dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgIDhNSHo6IDMuODc1ICsgMC4yNSAgID0gNC4xMjV1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICAxMk1IejogMi41ODQgKyAwLjA4MyAgPSAyLjY3dXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgMTZNSHo6IDAuNSArIDAuNSAgICAgID0gMXVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDI0TUh6OiAwLjQ1OSArIDAuMDgzICA9IDAuNTQxdXNlYworICAgICAgICAgICAgICAgICAgICAqICAgICAgMzJNSHo6IDAuNDA2ICsgMC4wNjI1ID0gMC40Njl1c2VjCisgICAgICAgICAgICAgICAgICAgICogICAgICA0OE1IejogMC4zOTYgKyAwLjA0MiAgPSAwLjQzOHVzZWMKKyAgICAgICAgICAgICAgICAgICAgKiAgICAgIDk2TUh6OiAwLjIxOSArIDAuMDIxICA9IDAuNDI5dXNlYworICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICJsb29wMTogc3ViICAlW3VzZWNdLCAlW3VzZWNdLCAjMSAgICAgICBcbiIgICAgIC8vIDEgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMSBjeWNsZQorICAgICAgICAgICAgICAgICAgICIgICAgICAgYm5lIGxvb3AxICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAgIC8vIDMgY3ljbGVzIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgb25lIHdoaWNoIGlzIDEKKyAgICAgICAgICAgICAgICAgICAiICAgICAgIGIgZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgICAvLyAzIGN5Y2xlcworICAgICAgICAgICAgICAgICAgICJjYWxjOiAgbXVsICVbdXNlY10sICVbc2Nsa10sICVbdXNlY10gICBcbiIgICAgIC8vIDEgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAibG9vcDogIHN1YiAgJVt1c2VjXSwgJVt1c2VjXSwgIzEgICAgICAgXG4iICAgICAvLyAxIGN5Y2xlCisgICAgICAgICAgICAgICAgICAgIiAgICAgICBibmUgbG9vcCAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICAgLy8gMyBjeWNsZXMgZXhjZXB0IGZvciB0aGUgbGFzdCBvbmUgd2hpY2ggaXMgMQorICAgICAgICAgICAgICAgICAgICJleGl0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLworICAgICAgICAgICAgICAgICAgIFt1c2VjXSAiciIodXNlYyksIFtmcmVxXSAiciIoZnJlcSksIFtzY2xrXSAiciIoc2NsaykgOiAgICAvKiBpbnB1dHMgKCUwLCAlMSwgJTIpICovCisgICAgICAgICAgICAgICAgICAgInI0Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVycyB0aGF0IGFyZSBkZXN0cm95ZWQgKi8KK30KKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19DUE0gKi8KKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19kbWEuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTcyNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2RtYS5jCkBAIC0wLDAgKzEsNDY2IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIERNQQorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfZG1hLmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIERNQSBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWYgZGdfY29uZmlnVVNFX0hXX0RNQQorCisjaW5jbHVkZSA8aHdfZ3Bpby5oPgorI2luY2x1ZGUgPGh3X2RtYS5oPgorCisjaWYgKGRnX2NvbmZpZ1NZU1RFTVZJRVcpCisjICBpbmNsdWRlICJTRUdHRVJfU1lTVklFV19GcmVlUlRPUy5oIgorI2Vsc2UKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCkKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGh3X2RtYV9jYWxsYmFja19kYXRhCit7CisgICAgaHdfZG1hX3RyYW5zZmVyX2NiIGNhbGxiYWNrOworICAgIHZvaWQgKnVzZXJfZGF0YTsKK30gZG1hX2NhbGxiYWNrc191c2VyX2RhdGFbOF07CisKKyNkZWZpbmUgRE1BX0NITl9SRUcocmVnLCBjaGFuKSAoKHZvbGF0aWxlIHVpbnQxNiAqKSgmKHJlZykpICsgKChjaGFuKSAqIDgpKQorCisvKioKKyAqIFxicmllZiBJbml0aWFsaXplIERNQSBDaGFubmVsCisgKgorICogXHBhcmFtIFtpbl0gY2hhbm5lbF9zZXR1cCBwb2ludGVyIHRvIHN0cnVjdCBvZiB0eXBlIERNQV9TZXR1cAorICoKKyAqLwordm9pZCBod19kbWFfY2hhbm5lbF9pbml0aWFsaXphdGlvbihETUFfc2V0dXAgKmNoYW5uZWxfc2V0dXApCit7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9jdHJsX3JlZzsKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2Ffc3RhcnRfbG93X3JlZzsKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2Ffc3RhcnRfaGlnaF9yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9iX3N0YXJ0X2xvd19yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9iX3N0YXJ0X2hpZ2hfcmVnOworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfbGVuX3JlZzsKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2ludF9yZWc7CisgICAgdWludDMyIHNyY19hZGRyZXNzOworICAgIHVpbnQzMiBkZXN0X2FkZHJlc3M7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIERNQSBjaGFubmVsIGxlbmd0aCBpcyBub3QgemVybyAqLworICAgIEFTU0VSVF9XQVJOSU5HKGNoYW5uZWxfc2V0dXAtPmxlbmd0aCA+IDApOworCisgICAgLy8gTG9vayB1cCBETUF4X0NUUkxfUkVHIGFkZHJlc3MKKyAgICBkbWFfeF9jdHJsX3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9DVFJMX1JFRywgY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIpOworCisgICAgLy8gTG9vayB1cCBETUF4X0FfU1RBUlRMX1JFRyBhZGRyZXNzCisgICAgZG1hX3hfYV9zdGFydF9sb3dfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0FfU1RBUlRMX1JFRywgY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIpOworCisgICAgLy8gTG9vayB1cCBETUF4X0FfU1RBUlRIX1JFRyBhZGRyZXNzCisgICAgZG1hX3hfYV9zdGFydF9oaWdoX3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9BX1NUQVJUSF9SRUcsIGNoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyKTsKKworICAgIC8vIExvb2sgdXAgRE1BeF9CX1NUQVJUTF9SRUcgYWRkcmVzcworICAgIGRtYV94X2Jfc3RhcnRfbG93X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9CX1NUQVJUTF9SRUcsIGNoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyKTsKKworICAgIC8vIExvb2sgdXAgRE1BeF9CX1NUQVJUSF9SRUcgYWRkcmVzcworICAgIGRtYV94X2Jfc3RhcnRfaGlnaF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQl9TVEFSVEhfUkVHLCBjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcik7CisKKyAgICAvLyBMb29rIHVwIERNQVhfTEVOX1JFRyBhZGRyZXNzCisgICAgZG1hX3hfbGVuX3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9MRU5fUkVHLCBjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcik7CisKKyAgICAvLyBMb29rIHVwIERNQVhfSU5UCisgICAgZG1hX3hfaW50X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9JTlRfUkVHLCBjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcik7CisKKyAgICAvLyBNYWtlIHN1cmUgRE1BIGNoYW5uZWwgaXMgZGlzYWJsZWQgZmlyc3QKKyAgICBSRUdfU0VUX0ZJRUxEKERNQSwgRE1BMF9DVFJMX1JFRywgRE1BX09OLCAqZG1hX3hfY3RybF9yZWcsIEhXX0RNQV9TVEFURV9ESVNBQkxFRCk7CisKKyAgICAvLyBTZXQgRE1BeF9DVFJMX1JFRyB3aWR0aCBwcm92aWRlZCBzZXR0aW5ncywgYnV0IGRvIG5vdCBzdGFydCB0aGUgY2hhbm5lbC4KKyAgICAvLyBTdGFydCB0aGUgY2hhbm5lbCB3aXRoIHRoZSAiZG1hX2NoYW5uZWxfZW5hYmxlIiBmdW5jdGlvbiBzZXBhcmF0ZWx5LgorICAgICpkbWFfeF9jdHJsX3JlZyA9CisgICAgICAgIGNoYW5uZWxfc2V0dXAtPmJ1c193aWR0aCB8CisgICAgICAgIGNoYW5uZWxfc2V0dXAtPmlycV9lbmFibGUgfAorICAgICAgICBjaGFubmVsX3NldHVwLT5kcmVxX21vZGUgfAorICAgICAgICBjaGFubmVsX3NldHVwLT5iX2luYyB8CisgICAgICAgIGNoYW5uZWxfc2V0dXAtPmFfaW5jIHwKKyAgICAgICAgY2hhbm5lbF9zZXR1cC0+Y2lyY3VsYXIgfAorICAgICAgICBjaGFubmVsX3NldHVwLT5kbWFfcHJpbyB8CisgICAgICAgIGNoYW5uZWxfc2V0dXAtPmRtYV9pZGxlIHwKKyAgICAgICAgY2hhbm5lbF9zZXR1cC0+ZG1hX2luaXQ7CisKKyAgICAvLyBTZXQgRE1BX1JFUV9NVVhfUkVHIGZvciB0aGUgcmVxdWVzdGVkIGNoYW5uZWwgLyB0cmlnZ2VyIGNvbWJpbmF0aW9uCisgICAgaWYgKGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4ICE9IEhXX0RNQV9UUklHX05PTkUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyKQorICAgICAgICB7CisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMDoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF8xOgorICAgICAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgICAgICBSRUdfU0VURihETUEsIERNQV9SRVFfTVVYX1JFRywgRE1BMDFfU0VMLCBjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCk7CisgICAgICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMjoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF8zOgorICAgICAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgICAgICBSRUdfU0VURihETUEsIERNQV9SRVFfTVVYX1JFRywgRE1BMjNfU0VMLCBjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCk7CisgICAgICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfNDoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF81OgorICAgICAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgICAgICBSRUdfU0VURihETUEsIERNQV9SRVFfTVVYX1JFRywgRE1BNDVfU0VMLCBjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCk7CisgICAgICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfNjoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF83OgorICAgICAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgICAgICBSRUdfU0VURihETUEsIERNQV9SRVFfTVVYX1JFRywgRE1BNjdfU0VMLCBjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCk7CisgICAgICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisjaWYgZGdfY29uZmlnRE1BX0RZTkFNSUNfTVVYIHx8IChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BKQorICAgICAgICAvKgorICAgICAgICAgKiBXaGVuIGRpZmZlcmVudCBETUEgY2hhbm5lbHMgYXJlIHVzZWQgZm9yIHNhbWUgZGV2aWNlIGl0IGlzIGltcG9ydGFudAorICAgICAgICAgKiB0aGF0IG9ubHkgb25lIHRyaWdnZXIgaXMgc2V0IGZvciBzcGVjaWZpYyBkZXZpY2UgYXQgYSB0aW1lLgorICAgICAgICAgKiBIYXZpbmcgc2FtZSB0cmlnZ2VyIGZvciBkaWZmZXJlbnQgY2hhbm5lbHMgY2FuIGNhdXNlIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKyAgICAgICAgICogRm9sbG93aW5nIGNvZGUgYWxzbyBzaG91bGQgaGVscCB3aGVuIFNQSTEgaXMgYXNzaWduZWQgdG8gbm9uIDAgY2hhbm5lbC4KKyAgICAgICAgICovCisgICAgICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworCisgICAgICAgIHN3aXRjaCAoY2hhbm5lbF9zZXR1cC0+Y2hhbm5lbF9udW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF82OgorICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzc6CisgICAgICAgICAgICBpZiAoUkVHX0dFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTQ1X1NFTCkgPT0gY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTQ1X1NFTCwgSFdfRE1BX1RSSUdfTk9ORSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgLyogbm8gYnJlYWsgKi8KKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF80OgorICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzU6CisgICAgICAgICAgICBpZiAoUkVHX0dFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTIzX1NFTCkgPT0gY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTIzX1NFTCwgSFdfRE1BX1RSSUdfTk9ORSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgLyogbm8gYnJlYWsgKi8KKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF8yOgorICAgICAgICBjYXNlIEhXX0RNQV9DSEFOTkVMXzM6CisgICAgICAgICAgICBpZiAoUkVHX0dFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTAxX1NFTCkgPT0gY2hhbm5lbF9zZXR1cC0+ZG1hX3JlcV9tdXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVHX1NFVEYoRE1BLCBETUFfUkVRX01VWF9SRUcsIERNQTAxX1NFTCwgSFdfRE1BX1RSSUdfTk9ORSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfRE1BX0NIQU5ORUxfMDoKKyAgICAgICAgY2FzZSBIV19ETUFfQ0hBTk5FTF8xOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorICAgIH0KKworI2lmIChkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CKQorCisgICAgLy9TZXQgUkVRX1NFTlNFIGJpdCBvZiBpMmMgYW5kIFVhcnQgcGVyaXBoZXJhbHMgVFggcGF0aAorICAgIGlmICgoKGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4ID09IEhXX0RNQV9UUklHX1VBUlRfUlhUWCkgfHwKKyAgICAgICAgIChjaGFubmVsX3NldHVwLT5kbWFfcmVxX211eCA9PSBIV19ETUFfVFJJR19VQVJUMl9SWFRYKSB8fAorICAgICAgICAgKGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4ID09IEhXX0RNQV9UUklHX0kyQ19SWFRYKSB8fAorICAgICAgICAgKGNoYW5uZWxfc2V0dXAtPmRtYV9yZXFfbXV4ID09IEhXX0RNQV9UUklHX0kyQzJfUlhUWCkpICYmCisgICAgICAgIChjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlciAmIDEpKSAgLy9vZGQgY2hhbm5lbHMgdXNlZCBmb3IgVFgKKyAgICB7CisgICAgICAgIFJFR19TRVRfRklFTEQoRE1BLCBETUEwX0NUUkxfUkVHLCBSRVFfU0VOU0UsICpkbWFfeF9jdHJsX3JlZywgMSk7CisgICAgfQorCisjZW5kaWYKKyAgICBzcmNfYWRkcmVzcyA9IGJsYWNrX29yY2FfcGh5X2FkZHIoY2hhbm5lbF9zZXR1cC0+c3JjX2FkZHJlc3MpOworICAgIGRlc3RfYWRkcmVzcyA9IGJsYWNrX29yY2FfcGh5X2FkZHIoY2hhbm5lbF9zZXR1cC0+ZGVzdF9hZGRyZXNzKTsKKworICAgIC8vIFNldCBzb3VyY2UgYWRkcmVzcyByZWdpc3RlcnMKKyAgICAqZG1hX3hfYV9zdGFydF9sb3dfcmVnID0gKHNyY19hZGRyZXNzICYgMHhmZmZmKTsKKyAgICAqZG1hX3hfYV9zdGFydF9oaWdoX3JlZyA9IChzcmNfYWRkcmVzcyA+PiAxNik7CisKKyAgICAvLyBTZXQgZGVzdGluYXRpb24gYWRkcmVzcyByZWdpc3RlcnMKKyAgICAqZG1hX3hfYl9zdGFydF9sb3dfcmVnID0gKGRlc3RfYWRkcmVzcyAmIDB4ZmZmZik7CisgICAgKmRtYV94X2Jfc3RhcnRfaGlnaF9yZWcgPSAoZGVzdF9hZGRyZXNzID4+IDE2KTsKKworICAgIC8vIFNldCBJUlEgbnVtYmVyIG9mIHRyYW5zZmVycworICAgIGlmIChjaGFubmVsX3NldHVwLT5pcnFfbnJfb2ZfdHJhbnMgPiAwKQorICAgIHsKKyAgICAgICAgLy8gSWYgdXNlciBleHBsaWNpdGx5IHNldCB0aGlzIG51bWJlciB1c2UgaXQKKyAgICAgICAgKmRtYV94X2ludF9yZWcgPSBjaGFubmVsX3NldHVwLT5pcnFfbnJfb2ZfdHJhbnMgLSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBJZiB1c2VyIHBhc3NlZCAwLCB1c2UgdHJhbnNmZXIgbGVuZ3RoIHRvIGZpcmUgaW50ZXJydXB0IGFmdGVyIHRyYW5zZmVyIGVuZHMKKyAgICAgICAgKmRtYV94X2ludF9yZWcgPSBjaGFubmVsX3NldHVwLT5sZW5ndGggLSAxOworICAgIH0KKworICAgIC8vIFNldCB0aGUgdHJhbnNmZXIgbGVuZ3RoCisgICAgKmRtYV94X2xlbl9yZWcgPSAoY2hhbm5lbF9zZXR1cC0+bGVuZ3RoKSAtIDE7CisKKyAgICBpZiAoY2hhbm5lbF9zZXR1cC0+aXJxX2VuYWJsZSkKKyAgICB7CisgICAgICAgIGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhW2NoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyXS5jYWxsYmFjayA9IGNoYW5uZWxfc2V0dXAtPmNhbGxiYWNrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX3NldHVwLT5jaGFubmVsX251bWJlcl0uY2FsbGJhY2sgPSBOVUxMOworICAgIH0KKworICAgIGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhW2NoYW5uZWxfc2V0dXAtPmNoYW5uZWxfbnVtYmVyXS51c2VyX2RhdGEgPSBjaGFubmVsX3NldHVwLT51c2VyX2RhdGE7Cit9CisKK3ZvaWQgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX3NvdXJjZShIV19ETUFfQ0hBTk5FTCBjaGFubmVsLCB2b2lkICphZGRyLCB1aW50MTZfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdfZG1hX3RyYW5zZmVyX2NiIGNiKQoreworICAgIHVpbnQzMl90IHBoeV9hZGRyID0gYmxhY2tfb3JjYV9waHlfYWRkcigodWludDMyX3QpIGFkZHIpOworCisgICAgZG1hX2NhbGxiYWNrc191c2VyX2RhdGFbY2hhbm5lbF0uY2FsbGJhY2sgPSBjYjsKKworICAgIC8vIExvb2sgdXAgRE1BeF9BX1NUQVJUTF9SRUcgYWRkcmVzcworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfYV9zdGFydF9sb3dfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0FfU1RBUlRMX1JFRywgY2hhbm5lbCk7CisKKyAgICAvLyBMb29rIHVwIERNQXhfQV9TVEFSVEhfUkVHIGFkZHJlc3MKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2Ffc3RhcnRfaGlnaF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQV9TVEFSVEhfUkVHLCBjaGFubmVsKTsKKworICAgIC8vIExvb2sgdXAgRE1BWF9MRU5fUkVHIGFkZHJlc3MKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2xlbl9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfTEVOX1JFRywgY2hhbm5lbCk7CisKKworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfaW50X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9JTlRfUkVHLCBjaGFubmVsKTsKKworICAgIC8vIFNldCBzb3VyY2UgYWRkcmVzcyByZWdpc3RlcnMKKyAgICAqZG1hX3hfYV9zdGFydF9sb3dfcmVnID0gKHBoeV9hZGRyICYgMHhmZmZmKTsKKyAgICAqZG1hX3hfYV9zdGFydF9oaWdoX3JlZyA9IChwaHlfYWRkciA+PiAxNik7CisKKyAgICAqZG1hX3hfaW50X3JlZyA9IGxlbmd0aCAtIDE7CisKKyAgICAvLyBTZXQgdGhlIHRyYW5zZmVyIGxlbmd0aAorICAgICpkbWFfeF9sZW5fcmVnID0gbGVuZ3RoIC0gMTsKK30KKwordm9pZCBod19kbWFfY2hhbm5lbF91cGRhdGVfZGVzdGluYXRpb24oSFdfRE1BX0NIQU5ORUwgY2hhbm5lbCwgdm9pZCAqYWRkciwgdWludDE2X3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdfZG1hX3RyYW5zZmVyX2NiIGNiKQoreworICAgIHVpbnQzMl90IHBoeV9hZGRyID0gYmxhY2tfb3JjYV9waHlfYWRkcigodWludDMyX3QpIGFkZHIpOworCisgICAgZG1hX2NhbGxiYWNrc191c2VyX2RhdGFbY2hhbm5lbF0uY2FsbGJhY2sgPSBjYjsKKworICAgIC8vIExvb2sgdXAgRE1BeF9CX1NUQVJUTF9SRUcgYWRkcmVzcworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfYl9zdGFydF9sb3dfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0JfU1RBUlRMX1JFRywgY2hhbm5lbCk7CisKKyAgICAvLyBMb29rIHVwIERNQXhfQl9TVEFSVEhfUkVHIGFkZHJlc3MKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2Jfc3RhcnRfaGlnaF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQl9TVEFSVEhfUkVHLCBjaGFubmVsKTsKKworICAgIC8vIExvb2sgdXAgRE1BWF9MRU5fUkVHIGFkZHJlc3MKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2xlbl9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfTEVOX1JFRywgY2hhbm5lbCk7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9pbnRfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0lOVF9SRUcsIGNoYW5uZWwpOworCisgICAgLy8gU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgcmVnaXN0ZXJzCisgICAgKmRtYV94X2Jfc3RhcnRfbG93X3JlZyA9IChwaHlfYWRkciAmIDB4ZmZmZik7CisgICAgKmRtYV94X2Jfc3RhcnRfaGlnaF9yZWcgPSAocGh5X2FkZHIgPj4gMTYpOworCisgICAgKmRtYV94X2ludF9yZWcgPSBsZW5ndGggLSAxOworCisgICAgLy8gU2V0IHRoZSB0cmFuc2ZlciBsZW5ndGgKKyAgICAqZG1hX3hfbGVuX3JlZyA9IGxlbmd0aCAtIDE7Cit9CisKK3ZvaWQgaHdfZG1hX2NoYW5uZWxfdXBkYXRlX2ludF9peChIV19ETUFfQ0hBTk5FTCBjaGFubmVsLCB1aW50MTZfdCBpbnRfaXgpCit7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9pbnRfcmVnID0gRE1BX0NITl9SRUcoRE1BLT5ETUEwX0lOVF9SRUcsIGNoYW5uZWwpOworCisgICAgKmRtYV94X2ludF9yZWcgPSBpbnRfaXg7Cit9CisKKy8qKgorICogXGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIGEgRE1BIGNoYW5uZWwKKyAqCisgKiBccGFyYW0gW2luXSBjaGFubmVsX251bWJlciBETUEgY2hhbm5lbCBudW1iZXIgdG8gc3RhcnQvc3RvcAorICogXHBhcmFtIFtpbl0gZG1hX29uIGVuYWJsZS9kaXNhYmxlIERNQSBjaGFubmVsCisgKgorICovCit2b2lkIGh3X2RtYV9jaGFubmVsX2VuYWJsZShIV19ETUFfQ0hBTk5FTCBjaGFubmVsX251bWJlciwgSFdfRE1BX1NUQVRFIGRtYV9vbikKK3sKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2N0cmxfcmVnOworCisgICAgLy8gTG9vayB1cCBETUF4X0NUUkxfUkVHIGFkZHJlc3MKKyAgICBkbWFfeF9jdHJsX3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9DVFJMX1JFRywgY2hhbm5lbF9udW1iZXIpOworCisKKyAgICBpZiAoZG1hX29uID09IEhXX0RNQV9TVEFURV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgdWludDE2X3QgZG1hX2N0cmwgPSAqZG1hX3hfY3RybF9yZWc7CisKKyAgICAgICAgUkVHX1NFVF9GSUVMRChETUEsIERNQTBfQ1RSTF9SRUcsIERNQV9PTiwgZG1hX2N0cmwsIDEpOworCisgICAgICAgIGlmIChkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX251bWJlcl0uY2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19TRVRfRklFTEQoRE1BLCBETUEwX0NUUkxfUkVHLCBJUlFfRU5BQkxFLCBkbWFfY3RybCwgMSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdGFydCB0aGUgY2hvc2VuIERNQSBjaGFubmVsCisgICAgICAgICpkbWFfeF9jdHJsX3JlZyA9IGRtYV9jdHJsOworICAgICAgICBOVklDX0VuYWJsZUlSUShETUFfSVJRbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFN0b3AgdGhlIGNob3NlbiBETUEgY2hhbm5lbAorICAgICAgICBSRUdfU0VUX0ZJRUxEKERNQSwgRE1BMF9DVFJMX1JFRywgRE1BX09OLCAqZG1hX3hfY3RybF9yZWcsIDApOworICAgICAgICBSRUdfU0VUX0ZJRUxEKERNQSwgRE1BMF9DVFJMX1JFRywgSVJRX0VOQUJMRSwgKmRtYV94X2N0cmxfcmVnLCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfaGVscGVyKEhXX0RNQV9DSEFOTkVMIGNoYW5uZWxfbnVtYmVyLCB1aW50MTZfdCBsZW4sIGJvb2wgc3RvcF9kbWEpCit7CisgICAgaHdfZG1hX3RyYW5zZmVyX2NiIGNiOworCisgICAgTlZJQ19EaXNhYmxlSVJRKERNQV9JUlFuKTsKKyAgICBjYiA9IGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhW2NoYW5uZWxfbnVtYmVyXS5jYWxsYmFjazsKKworICAgIGlmIChzdG9wX2RtYSkKKyAgICB7CisgICAgICAgIGRtYV9jYWxsYmFja3NfdXNlcl9kYXRhW2NoYW5uZWxfbnVtYmVyXS5jYWxsYmFjayA9IE5VTEw7CisgICAgICAgIGh3X2RtYV9jaGFubmVsX2VuYWJsZShjaGFubmVsX251bWJlciwgSFdfRE1BX1NUQVRFX0RJU0FCTEVEKTsKKyAgICB9CisKKyAgICBpZiAoY2IpCisgICAgeworICAgICAgICBjYihkbWFfY2FsbGJhY2tzX3VzZXJfZGF0YVtjaGFubmVsX251bWJlcl0udXNlcl9kYXRhLCBsZW4pOworICAgIH0KKworICAgIE5WSUNfRW5hYmxlSVJRKERNQV9JUlFuKTsKK30KKworYm9vbCBod19kbWFfY2hhbm5lbF9hY3RpdmUodm9pZCkKK3sKKyAgICBpbnQgZG1hX29uOworCisgICAgZG1hX29uID0gUkVHX0dFVEYoRE1BLCBETUEwX0NUUkxfUkVHLCBETUFfT04pOworICAgIGRtYV9vbiB8PSBSRUdfR0VURihETUEsIERNQTFfQ1RSTF9SRUcsIERNQV9PTik7CisgICAgZG1hX29uIHw9IFJFR19HRVRGKERNQSwgRE1BMl9DVFJMX1JFRywgRE1BX09OKTsKKyAgICBkbWFfb24gfD0gUkVHX0dFVEYoRE1BLCBETUEzX0NUUkxfUkVHLCBETUFfT04pOworICAgIGRtYV9vbiB8PSBSRUdfR0VURihETUEsIERNQTRfQ1RSTF9SRUcsIERNQV9PTik7CisgICAgZG1hX29uIHw9IFJFR19HRVRGKERNQSwgRE1BNV9DVFJMX1JFRywgRE1BX09OKTsKKyAgICBkbWFfb24gfD0gUkVHX0dFVEYoRE1BLCBETUE2X0NUUkxfUkVHLCBETUFfT04pOworICAgIGRtYV9vbiB8PSBSRUdfR0VURihETUEsIERNQTdfQ1RSTF9SRUcsIERNQV9PTik7CisKKyAgICByZXR1cm4gKGRtYV9vbiA9PSAxKTsKK30KKworLyoqCisgKiBcYnJpZWYgQ2FwdHVyZSBETUEgSW50ZXJydXB0IEhhbmRsZXIKKyAqCisgKiBDYWxscyB1c2VyIGludGVycnVwdCBoYW5kbGVyCisgKgorICovCit2b2lkIERNQV9IYW5kbGVyKHZvaWQpCit7CisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCk7CisKKyAgICB1aW50MTZfdCByaXNlbjsKKyAgICB1aW50MTZfdCBpOworICAgIHZvbGF0aWxlIHVpbnQxNiAqZG1hX3hfbGVuX3JlZzsKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2ludF9yZWc7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9jdHJsX3JlZzsKKworICAgIHJpc2VuID0gRE1BLT5ETUFfSU5UX1NUQVRVU19SRUc7CisKKyAgICBmb3IgKGkgPSAwOyByaXNlbiAhPSAwICYmIGkgPCA4OyArK2ksIHJpc2VuID4+PSAxKQorICAgIHsKKyAgICAgICAgaWYgKHJpc2VuICYgMSkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBzdG9wOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRE1BeF9JTlRfUkVHIHNob3dzIGFmdGVyIGhvdyBtYW55IHRyYW5zZmVycyB0aGUgaW50ZXJydXB0CisgICAgICAgICAgICAgKiBpcyBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZG1hX3hfaW50X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9JTlRfUkVHLCBpKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIERNQXhfTEVOX1JFRyBzaG93cyB0aGUgbGVuZ3RoIG9mIHRoZSBETUEgdHJhbnNmZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZG1hX3hfbGVuX3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9MRU5fUkVHLCBpKTsKKworICAgICAgICAgICAgZG1hX3hfY3RybF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfQ1RSTF9SRUcsIGkpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU3RvcCBETUEgaWY6CisgICAgICAgICAgICAgKiAgLSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQKKyAgICAgICAgICAgICAqICAtIG1vZGUgaXMgbm90IGNpcmN1bGFyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0b3AgPSAoKmRtYV94X2ludF9yZWcgPT0gKmRtYV94X2xlbl9yZWcpCisgICAgICAgICAgICAgICAgICAgJiYgKCFSRUdfR0VUX0ZJRUxEKERNQSwgRE1BMF9DVFJMX1JFRywgQ0lSQ1VMQVIsICpkbWFfeF9jdHJsX3JlZykpOworICAgICAgICAgICAgRE1BLT5ETUFfQ0xFQVJfSU5UX1JFRyA9IDEgPDwgaTsKKyAgICAgICAgICAgIGRtYV9oZWxwZXIoaSwgKmRtYV94X2ludF9yZWcgKyAxLCBzdG9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCk7Cit9CisKK3ZvaWQgaHdfZG1hX2NoYW5uZWxfc3RvcChIV19ETUFfQ0hBTk5FTCBjaGFubmVsX251bWJlcikKK3sKKyAgICAvLyBTdG9wcGluZyBETUEgd2lsbCBjbGVhciBETUF4X0lEWF9SRUcgc28gcmVhZCBpdCBiZWZvcmUKKyAgICB2b2xhdGlsZSB1aW50MTYgKmRtYV94X2lkeF9yZWcgPSBETUFfQ0hOX1JFRyhETUEtPkRNQTBfSURYX1JFRywgY2hhbm5lbF9udW1iZXIpOworICAgIGRtYV9oZWxwZXIoY2hhbm5lbF9udW1iZXIsICpkbWFfeF9pZHhfcmVnLCB0cnVlKTsKK30KKwordWludDE2X3QgaHdfZG1hX3RyYW5zZmVyZWRfYnl0ZXMoSFdfRE1BX0NIQU5ORUwgY2hhbm5lbF9udW1iZXIpCit7CisgICAgdm9sYXRpbGUgdWludDE2ICpkbWFfeF9pbnRfcmVnID0gZG1hX3hfaW50X3JlZyA9IERNQV9DSE5fUkVHKERNQS0+RE1BMF9JRFhfUkVHLCBjaGFubmVsX251bWJlcik7CisKKyAgICByZXR1cm4gKmRtYV94X2ludF9yZWc7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfRE1BICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2ZlbV9za3k2NjExMi0xMS5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X2ZlbV9za3k2NjExMi0xMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjA2MzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfZmVtX3NreTY2MTEyLTExLmMKQEAgLTAsMCArMSw2ODAgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIEZFTQorICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlCisgKgorICogQGJyaWVmIEZFTSBEcml2ZXIgZm9yIFNLWVdPUktTIFNLWTY2MTEyLTExIFJhZGlvIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyNpbmNsdWRlICJzdGRpbnQuaCIKKworI2luY2x1ZGUgInNka19kZWZzLmgiCisjaW5jbHVkZSAiaHdfZ3Bpby5oIgorI2luY2x1ZGUgImh3X2ZlbV9za3k2NjExMi0xMS5oIgorCitzdGF0aWMgaHdfZmVtX2NvbmZpZyBmZW1fY29uZmlnIF9fUkVUQUlORUQ7CisKKyNpZiAhZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1RYX1BPUlQpIHx8ICFkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUElOKQorI2Vycm9yIEZFTSBDVFggR1BJTyBtdXN0IGJlIGRlZmluZWQhIQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1JYX1BPUlQpIHx8ICFkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUElOKQorI2Vycm9yIEZFTSBDUlggR1BJTyBtdXN0IGJlIGRlZmluZWQhIQorI2VuZGlmCisKKworaW50IGh3X2ZlbV9zZXRfYmlhcyh1aW50MTZfdCB2b2x0YWdlKQoreworICAgIHVpbnQxNl90IHZhbHVlOworCisgICAgaWYgKHZvbHRhZ2UgPCAxMjAwIHx8IHZvbHRhZ2UgPiAxOTc1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZhbHVlID0gKHZvbHRhZ2UgLSAxMjAwKSAvIDI3LjU7CisKKyNpZmRlZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfRkVNX0JJQVNfVjE4UAorICAgIFJFR19TRVRGKERDREMsIERDRENfVjE4UF8wX1JFRywgRENEQ19WMThQX1ZPTFRBR0UsIHZhbHVlKTsKKyAgICByZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTX1YxOCkKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1YxOF8wX1JFRywgRENEQ19WMThfVk9MVEFHRSwgdmFsdWUpOworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gLTI7CisjZW5kaWYKKworfQorCitpbnQgaHdfZmVtX3NldF9iaWFzMih1aW50MTZfdCB2b2x0YWdlKQoreworICAgIHVpbnQxNl90IHZhbHVlOworCisgICAgaWYgKHZvbHRhZ2UgPCAxMjAwIHx8IHZvbHRhZ2UgPiAxOTc1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZhbHVlID0gKHZvbHRhZ2UgLSAxMjAwKSAvIDI3LjU7CisKKy8vICAgICAgICAvKiBWYWx1ZSBpcyBhY3R1YWxseSBvbmUgbG93ZXIgdGhhbiBjb21wdXRlZCAqLworLy8gICAgICAgIGlmICh2YWx1ZSA+IDApCisvLyAgICAgICAgICAgICAgICB2YWx1ZS0tOworCisjaWZkZWYgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0ZFTV9CSUFTMl9WMThQCisgICAgUkVHX1NFVEYoRENEQywgRENEQ19WMThQXzBfUkVHLCBEQ0RDX1YxOFBfVk9MVEFHRSwgdmFsdWUpOworI2VsaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfRkVNX0JJQVMyX1YxOCkKKyAgICBSRUdfU0VURihEQ0RDLCBEQ0RDX1YxOF8wX1JFRywgRENEQ19WMThfVk9MVEFHRSwgdmFsdWUpOworI2Vsc2UKKyAgICByZXR1cm4gLTI7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3ZvaWQgaHdfZmVtX3NldF90eHBvd2VyKGJvb2wgaGlnaCkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnR4X3Bvd2VyID0gaGlnaDsKKworICAgIGlmIChmZW1fY29uZmlnLnN0YXJ0ZWQpCisgICAgeworICAgICAgICBpZiAoaGlnaCA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVFggUG93ZXIgbG93LiBTdG9wIERDRiwgc2V0IEdQSU8gdG8gbG93ICovCisgICAgICAgICAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisgICAgICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX1JFRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDRfUlhfTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDRfVFhfTXNrLCAwKTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVFggUG93ZXIgaGlnaC4gQ29uZmlndXJlIEdQSU8gZm9yIERDRi4gRW5hYmxlIERDRiBvbiBUWC4gKi8KKyAgICAgICAgICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX1BPUlQ0X0RDRik7CisgICAgICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX1JFRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDRfUlhfTXNrIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9SRUdfUkZfUE9SVDRfVFhfTXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX1JFR19SRl9QT1JUNF9UWF9Nc2spOworCisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzZXRfYnlwYXNzKHZvaWQpCit7CisgICAgdWludDE2X3QgbSA9IDA7CisKKyAgICBpZiAoZmVtX2NvbmZpZy50eF9ieXBhc3MpCisgICAgeworICAgICAgICBtID0gUkZDVV9QT1dFUl9SRl9QT1JUX0VOX1JFR19SRl9QT1JUM19UWF9Nc2s7CisgICAgfQorCisgICAgaWYgKGZlbV9jb25maWcucnhfYnlwYXNzKQorICAgIHsKKyAgICAgICAgbSB8PSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fUkVHX1JGX1BPUlQzX1JYX01zazsKKyAgICB9CisKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX1JFRywKKyAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fUkVHX1JGX1BPUlQzX1JYX01zayB8CisgICAgICAgICAgICAgICAgICAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX1JFR19SRl9QT1JUM19UWF9Nc2ssIG0pOworCisgICAgaWYgKG0gPT0gMCkKKyAgICB7CisgICAgICAgIC8qIE5vIFJYL1RYIGJ5cGFzcy4gRHJpdmUgdGhlIGludGVyZmFjZSBsaW5lIHRvIGxvdyAqLworICAgICAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBBdCBsZWFzdCBvbmUgb2YgVFgvUlggbmVlZHMgYnlwYXNzICovCisgICAgICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUM19EQ0YpOworICAgIH0KK30KKworCit2b2lkIGh3X2ZlbV9zZXRfdHhfYnlwYXNzKGJvb2wgZW5hYmxlKQoreworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOKQorICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcudHhfYnlwYXNzID0gZW5hYmxlOworCisgICAgaWYgKGZlbV9jb25maWcuc3RhcnRlZCkKKyAgICB7CisgICAgICAgIHNldF9ieXBhc3MoKTsKKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCit2b2lkIGh3X2ZlbV9zZXRfcnhfYnlwYXNzKGJvb2wgZW5hYmxlKQoreworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOKQorICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcucnhfYnlwYXNzID0gZW5hYmxlOworCisgICAgaWYgKGZlbV9jb25maWcuc3RhcnRlZCkKKyAgICB7CisgICAgICAgIHNldF9ieXBhc3MoKTsKKyAgICB9CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCitib29sIGh3X2ZlbV9nZXRfdHhwb3dlcih2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X3Bvd2VyOworfQorCitib29sIGh3X2ZlbV9nZXRfdHhfYnlwYXNzKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcudHhfYnlwYXNzOworfQorCitib29sIGh3X2ZlbV9nZXRfcnhfYnlwYXNzKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcucnhfYnlwYXNzOworfQorCisjZWxzZSAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorYm9vbCBod19mZW1fZ2V0X3R4cG93ZXJfYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcudHhfcG93ZXJfYmxlOworfQorCitib29sIGh3X2ZlbV9nZXRfdHhfYnlwYXNzX2JsZSh2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X2J5cGFzc19ibGU7Cit9CisKK2Jvb2wgaHdfZmVtX2dldF9yeF9ieXBhc3NfYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcucnhfYnlwYXNzX2JsZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfVVNFX0JMRSAqLworCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCitib29sIGh3X2ZlbV9nZXRfdHhwb3dlcl9mdGRmKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcudHhfcG93ZXJfZnRkZjsKK30KKworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzc19mdGRmKHZvaWQpCit7CisgICAgcmV0dXJuIGZlbV9jb25maWcudHhfYnlwYXNzX2Z0ZGY7Cit9CisKK2Jvb2wgaHdfZmVtX2dldF9yeF9ieXBhc3NfZnRkZih2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnJ4X2J5cGFzc19mdGRmOworfQorI2VuZGlmIC8qIENPTkZJR19VU0VfRlRERiAqLworCitib29sIGh3X2ZlbV9nZXRfdHhwb3dlcih2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X3Bvd2VyX2JsZTsKK30KKworYm9vbCBod19mZW1fZ2V0X3R4X2J5cGFzcyh2b2lkKQoreworICAgIHJldHVybiBmZW1fY29uZmlnLnR4X2J5cGFzc19ibGU7Cit9CisKK2Jvb2wgaHdfZmVtX2dldF9yeF9ieXBhc3Modm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy5yeF9ieXBhc3NfYmxlOworfQorCitzdGF0aWMgdm9pZCBzZXRfdHhwb3dlcih2b2lkKQoreworICAgIGlmICghZmVtX2NvbmZpZy5zdGFydGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIENITCBpcyBhbHdheXMgMCBvbiBSWCAqLworICAgIFJFR19DTFJfQklUKFJGQ1VfUE9XRVIsIFJGX1BPUlRfRU5fQkxFX1JFRywgUkZfUE9SVDRfUlgpOworICAgIFJFR19DTFJfQklUKFJGQ1VfUE9XRVIsIFJGX1BPUlRfRU5fRlRERl9SRUcsIFJGX1BPUlQ0X1JYKTsKKworICAgIGlmIChmZW1fY29uZmlnLnR4X3Bvd2VyX2JsZSkKKyAgICB7CisgICAgICAgIFJFR19TRVRfQklUKFJGQ1VfUE9XRVIsIFJGX1BPUlRfRU5fQkxFX1JFRywgUkZfUE9SVDRfVFgpOworICAgIH0KKworICAgIGlmIChmZW1fY29uZmlnLnR4X3Bvd2VyX2Z0ZGYpCisgICAgeworICAgICAgICBSRUdfU0VUX0JJVChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX0ZUREZfUkVHLCBSRl9QT1JUNF9UWCk7CisgICAgfQorCisgICAgaWYgKGZlbV9jb25maWcudHhfcG93ZXJfYmxlIHx8IGZlbV9jb25maWcudHhfcG93ZXJfZnRkZikKKyAgICB7CisgICAgICAgIC8qIFRYIFBvd2VyIGhpZ2guIENvbmZpZ3VyZSBHUElPIGZvciBEQ0YuIEVuYWJsZSBEQ0Ygb24gVFguICovCisgICAgICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUNF9EQ0YpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBUWCBQb3dlciBsb3cuIFN0b3AgRENGLCBzZXQgR1BJTyB0byBsb3cgKi8KKyAgICAgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZhbHNlKTsKKyAgICB9Cit9CisKKwordm9pZCBod19mZW1fc2V0X3R4cG93ZXJfYmxlKGJvb2wgaGlnaCkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnR4X3Bvd2VyX2JsZSA9IGhpZ2g7CisgICAgc2V0X3R4cG93ZXIoKTsKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCit2b2lkIGh3X2ZlbV9zZXRfdHhwb3dlcl9mdGRmKGJvb2wgaGlnaCkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnR4X3Bvd2VyX2Z0ZGYgPSBoaWdoOworICAgIHNldF90eHBvd2VyKCk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKwordm9pZCBod19mZW1fc2V0X3R4cG93ZXIoYm9vbCBoaWdoKQoreworICAgIGh3X2ZlbV9zZXRfdHhwb3dlcl9ibGUoaGlnaCk7Cit9CisKKworCitzdGF0aWMgdm9pZCBzZXRfYnlwYXNzKHZvaWQpCit7CisgICAgdWludDE2X3QgbV9ibGUgPSAwOworICAgIHVpbnQxNl90IG1fZnRkZiA9IDA7CisKKyAgICBpZiAoZmVtX2NvbmZpZy50eF9ieXBhc3NfYmxlKQorICAgIHsKKyAgICAgICAgbV9ibGUgPSBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUM19UWF9Nc2s7CisgICAgfQorCisgICAgaWYgKGZlbV9jb25maWcucnhfYnlwYXNzX2JsZSkKKyAgICB7CisgICAgICAgIG1fYmxlIHw9IFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9CTEVfUkVHX1JGX1BPUlQzX1JYX01zazsKKyAgICB9CisKKyAgICBpZiAoZmVtX2NvbmZpZy50eF9ieXBhc3NfZnRkZikKKyAgICB7CisgICAgICAgIG1fZnRkZiA9IFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9GVERGX1JFR19SRl9QT1JUM19UWF9Nc2s7CisgICAgfQorCisgICAgaWYgKGZlbV9jb25maWcucnhfYnlwYXNzX2Z0ZGYpCisgICAgeworICAgICAgICBtX2Z0ZGYgfD0gUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0ZUREZfUkVHX1JGX1BPUlQzX1JYX01zazsKKyAgICB9CisKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX0JMRV9SRUcsCisgICAgICAgICAgICAgICAgICAgUkZDVV9QT1dFUl9SRl9QT1JUX0VOX0JMRV9SRUdfUkZfUE9SVDNfUlhfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBSRkNVX1BPV0VSX1JGX1BPUlRfRU5fQkxFX1JFR19SRl9QT1JUM19UWF9Nc2ssIG1fYmxlKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9QT1JUX0VOX0ZUREZfUkVHLAorICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9GVERGX1JFR19SRl9QT1JUM19SWF9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFJGQ1VfUE9XRVJfUkZfUE9SVF9FTl9GVERGX1JFR19SRl9QT1JUM19UWF9Nc2ssIG1fZnRkZik7CisKKyAgICBpZiAobV9ibGUgPT0gMCAmJiBtX2Z0ZGYgPT0gMCkKKyAgICB7CisgICAgICAgIC8qIE5vIFJYL1RYIGJ5cGFzcy4gRHJpdmUgdGhlIGludGVyZmFjZSBsaW5lIHRvIGxvdyAqLworICAgICAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgZmFsc2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBBdCBsZWFzdCBvbmUgb2YgVFgvUlggbmVlZHMgYnlwYXNzICovCisgICAgICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUM19EQ0YpOworICAgIH0KK30KKworI2lmZGVmIENPTkZJR19VU0VfQkxFCit2b2lkIGh3X2ZlbV9zZXRfdHhfYnlwYXNzX2JsZShib29sIGVuYWJsZSkKK3sKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTikKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBmZW1fY29uZmlnLnR4X2J5cGFzc19ibGUgPSBlbmFibGU7CisKKyAgICBpZiAoZmVtX2NvbmZpZy5zdGFydGVkKQorICAgIHsKKyAgICAgICAgc2V0X2J5cGFzcygpOworICAgIH0KKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworI2VuZGlmCit9CisKK3ZvaWQgaHdfZmVtX3NldF9yeF9ieXBhc3NfYmxlKGJvb2wgZW5hYmxlKQoreworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOKQorICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcucnhfYnlwYXNzX2JsZSA9IGVuYWJsZTsKKworICAgIGlmIChmZW1fY29uZmlnLnN0YXJ0ZWQpCisgICAgeworICAgICAgICBzZXRfYnlwYXNzKCk7CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKyNlbmRpZiAvKiBDT05GSUdfVVNFX0JMRSAqLworCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCit2b2lkIGh3X2ZlbV9zZXRfdHhfYnlwYXNzX2Z0ZGYoYm9vbCBlbmFibGUpCit7CisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QSU4pCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgZmVtX2NvbmZpZy50eF9ieXBhc3NfZnRkZiA9IGVuYWJsZTsKKworICAgIGlmIChmZW1fY29uZmlnLnN0YXJ0ZWQpCisgICAgeworICAgICAgICBzZXRfYnlwYXNzKCk7CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKwordm9pZCBod19mZW1fc2V0X3J4X2J5cGFzc19mdGRmKGJvb2wgZW5hYmxlKQoreworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUElOKQorICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcucnhfYnlwYXNzX2Z0ZGYgPSBlbmFibGU7CisKKyAgICBpZiAoZmVtX2NvbmZpZy5zdGFydGVkKQorICAgIHsKKyAgICAgICAgc2V0X2J5cGFzcygpOworICAgIH0KKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworI2VuZGlmCit9CisjZW5kaWYgLyogQ09ORklHX1VTRV9GVERGICovCisKK3ZvaWQgaHdfZmVtX3NldF90eF9ieXBhc3MoYm9vbCBlbmFibGUpCit7CisgICAgaHdfZmVtX3NldF90eF9ieXBhc3NfZnRkZihlbmFibGUpOworfQorCit2b2lkIGh3X2ZlbV9zZXRfcnhfYnlwYXNzKGJvb2wgZW5hYmxlKQoreworICAgIGh3X2ZlbV9zZXRfcnhfYnlwYXNzX2Z0ZGYoZW5hYmxlKTsKK30KKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9CICovCisKK3ZvaWQgaHdfZmVtX3NldF9hbnRlbm5hKGJvb2wgb25lKQoreworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUElOKQorICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcuYW50c2VsID0gb25lOworCisgICAgaWYgKGZlbV9jb25maWcuc3RhcnRlZCkKKyAgICB7CisgICAgICAgIC8qIEFudGVubmEgc2VsZWN0aW9uICovCisgICAgICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmZW1fY29uZmlnLmFudHNlbCk7CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisjZW5kaWYKK30KKworYm9vbCBod19mZW1fZ2V0X2FudGVubmEodm9pZCkKK3sKKyAgICByZXR1cm4gZmVtX2NvbmZpZy5hbnRzZWw7Cit9CisKK3ZvaWQgaHdfZmVtX3N0YXJ0KHZvaWQpCit7CisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgZmVtX2NvbmZpZy5zdGFydGVkID0gdHJ1ZTsKKworICAgIHVpbnQ4X3Qgc2V0X2RlbGF5OworICAgIHVpbnQ4X3QgcmVzZXRfZGVsYXk7CisgICAgdWludDE2X3QgcmZfcG9ydF9lbjsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBTZXR1cCBHUElPcworICAgICAqLworCisgICAgLyogQ1NEIEdQSU8gQ29uZmlnICovCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4pCisjIGlmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfVVNFX0RDRiA9PSAwCisgICAgLyogTWFudWFsbHkgc2V0IENTRCAoRW5hYmxlIEZFTSkgKi8KKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIHRydWUpOworIyBlbHNlCisgICAgLyogVXNlIERDRiBmb3IgQ1NEICovCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUMl9EQ0YpOworIyBlbmRpZgorI2VuZGlmCisKKyAgICAvKiBUaW1lciAyNyBHUElPIChEQ0YgUG9ydCAwKS4gVXNlZCBmb3IgVFggRU4gKi8KKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1RYX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX1BPUlQwX0RDRik7CisKKyAgICAvKiBUaW1lciAyOCAoRENGIFBvcnQgMSkuIFVzZWQgZm9yIFJYIEVOICovCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19QT1JUMV9EQ0YpOworCisgICAgLyogQW50ZW5uYSBzZWxlY3Rpb24gKi8KKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BJTikKKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZlbV9jb25maWcuYW50c2VsKTsKKyNlbmRpZgorCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFNldHVwIFJGX0FOVF9UUklNIEdQSU9zCisgICAgICovCisKKyAgICAvKiBSRl9BTlRfVFJJTV8wIENvbmZpZyAqLworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzBfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QSU4pCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX1JGX0FOVF9UUklNMCk7CisjZW5kaWYKKworICAgIC8qIFJGX0FOVF9UUklNXzEgQ29uZmlnICovCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMV9QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BJTikKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzFfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzFfUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfUkZfQU5UX1RSSU0xKTsKKyNlbmRpZgorCisgICAgLyogUkZfQU5UX1RSSU1fMiBDb25maWcgKi8KKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8yX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzJfUElOKQorICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19SRl9BTlRfVFJJTTIpOworI2VuZGlmCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU2V0dXAgRENGcworICAgICAqLworCisgICAgLyogYXNzaWduIHZhbHVlcyB0byB0aGUgdGltZXIgcmVnaXN0ZXJzIGZvciBDVFgvQ1JYIChpbiB1c2VjKSAqLworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzI3X1JFRywgU0VUX09GRlNFVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1RYU0VUX0RDRik7CisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMjdfUkVHLCBSRVNFVF9PRkZTRVQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFJFU0VUX0RDRik7CisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMjhfUkVHLCBTRVRfT0ZGU0VULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhTRVRfRENGKTsKKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yOF9SRUcsIFJFU0VUX09GRlNFVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYUkVTRVRfRENGKTsKKworICAgIHJmX3BvcnRfZW4gPSAweDY7IC8qIFN0YXJ0IHdpdGggUG9ydCAwOiBUWCwgUG9ydCAxOiBSWCAqLworCisgICAgLyogQ29tcHV0ZSBzZXQvcmVzZXQgZGVsYXlzIHRvIHVzZSBmb3IgQ1NELCBDUFMsIENITCBEQ0ZzOiBGb3Igc2V0dGluZyBkZWxheSwKKyAgICAgKiBzbWFsbGVyIG9mIFRYU0VULCBSWFNFVCwgYW5kIGZvciByZXNldHRpbmcgZGVsYXksIGxhcmdlciBvZiBUWFNFVCwgUlhTRVQKKyAgICAgKi8KKyNpZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfUlhTRVRfRENGID4gZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1RYU0VUX0RDRgorICAgIHNldF9kZWxheSA9IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFNFVF9EQ0Y7CisjZWxzZQorICAgIHNldF9kZWxheSA9IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9SWFNFVF9EQ0Y7CisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9SWFJFU0VUX0RDRiA+IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFJFU0VUX0RDRgorICAgIHJlc2V0X2RlbGF5ID0gZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX1JYUkVTRVRfRENGOworI2Vsc2UKKyAgICByZXNldF9kZWxheSA9IGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFJFU0VUX0RDRjsKKyNlbmRpZgorCisgICAgLyogQ1NEIERDRiAoaWYgZW5hYmxlZCkgY29uZmlndXJhdGlvbiAqLworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QT1JUKSAmJiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUElOKQorIyBpZiBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1VTRV9EQ0YgIT0gMAorICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzI5X1JFRywgU0VUX09GRlNFVCwgc2V0X2RlbGF5KTsKKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yOV9SRUcsIFJFU0VUX09GRlNFVCwgcmVzZXRfZGVsYXkpOworCisgICAgLyogZW5hYmxlIERDRiBTaWduYWxzIGZvciBQb3J0IDIgKENTRCkgZm9yIGJvdGggcngvdHggKi8KKyAgICByZl9wb3J0X2VuIHw9IDB4MzA7CisKKyMgZW5kaWYgLyogZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9VU0VfRENGICE9IDAgKi8KKyNlbmRpZgorCisgICAgLyogU2V0IGJ5cGFzcyAoQ1BTKSBEQ0YgdGltZXJzIChidXQgZG9uJ3QgZW5hYmxlIHlldCkgKi8KKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8zMF9SRUcsIFNFVF9PRkZTRVQsIHNldF9kZWxheSk7CisgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMzBfUkVHLCBSRVNFVF9PRkZTRVQsIHJlc2V0X2RlbGF5KTsKKworICAgIC8qIFNldCBUWCBQb3dlciAoQ0hMKSBEQ0YgdGltZXJzIChidXQgZG9uJ3QgZW5hYmxlIHlldCkgKi8KKyAgICBSRUdfU0VURihSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8zMV9SRUcsIFNFVF9PRkZTRVQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9UWFNFVF9EQ0YpOworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzMxX1JFRywgUkVTRVRfT0ZGU0VULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfVFhSRVNFVF9EQ0YpOworCisgICAgLyogRW5hYmxlIERDRnMgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgUkZDVV9QT1dFUi0+UkZfUE9SVF9FTl9SRUcgPSByZl9wb3J0X2VuOworICAgIGh3X2ZlbV9zZXRfdHhwb3dlcihmZW1fY29uZmlnLnR4X3Bvd2VyKTsKKyNlbHNlCisgICAgUkZDVV9QT1dFUi0+UkZfUE9SVF9FTl9CTEVfUkVHID0gcmZfcG9ydF9lbjsKKyAgICBSRkNVX1BPV0VSLT5SRl9QT1JUX0VOX0ZUREZfUkVHID0gcmZfcG9ydF9lbjsKKworICAgIHNldF90eHBvd2VyKCk7CisjZW5kaWYKKyAgICBzZXRfYnlwYXNzKCk7CisKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKK30KKwordm9pZCBod19mZW1fc3RvcCh2b2lkKQoreworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGZlbV9jb25maWcuc3RhcnRlZCA9IGZhbHNlOworCisgICAgLyogU3RvcCBEQ0YgVGltZXJzICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIFJGQ1VfUE9XRVItPlJGX1BPUlRfRU5fUkVHID0gMHgwOworI2Vsc2UKKyAgICBSRkNVX1BPV0VSLT5SRl9QT1JUX0VOX0JMRV9SRUcgPSAweDA7CisgICAgUkZDVV9QT1dFUi0+UkZfUE9SVF9FTl9GVERGX1JFRyA9IDB4MDsKKyNlbmRpZgorCisgICAgLyogU2V0IGFsbCBGRU0gaW50ZXJmYWNlIG91dHB1dHMgdG8gR1BJTyBtb2RlLCBhbmQgdmFsdWUgMCwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBtaW5pbXVtCisgICAgICogcG9zc2libGUgcG93ZXIgY29uc3VtcHRpb24gZnJvbSBGRU0KKyAgICAgKi8KKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DU0RfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BJTikKKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NTRF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1NEX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZhbHNlKTsKKyNlbmRpZgorCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DVFhfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NUWF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DSExfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTikKKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NITF9QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ0hMX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZhbHNlKTsKKyNlbmRpZgorCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUlhfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NSWF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisKKyNpZiBkZWZpbmVkKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9DUFNfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTikKKyAgICBod19ncGlvX2NvbmZpZ3VyZV9waW4oZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0NQU19QT1JULCBkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQ1BTX1BJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19NT0RFX09VVFBVVCwgSFdfR1BJT19GVU5DX0dQSU8sIGZhbHNlKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UU0VMX1BPUlQpICYmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRTRUxfUE9SVCwgZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVFNFTF9QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzBfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMF9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8wX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzFfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMV9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8xX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoZGdfY29uZmlnRkVNX1NLWTY2MTEyXzExX0FOVF9UUklNXzJfUE9SVCkgJiYgZGVmaW5lZChkZ19jb25maWdGRU1fU0tZNjYxMTJfMTFfQU5UX1RSSU1fMl9QSU4pCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8yX1BPUlQsIGRnX2NvbmZpZ0ZFTV9TS1k2NjExMl8xMV9BTlRfVFJJTV8yX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCBmYWxzZSk7CisjZW5kaWYKKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworfQorI2VuZGlmIC8qIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEgKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19ncGlvLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmRlOWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfZ3Bpby5jCkBAIC0wLDAgKzEsMzQzIEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBHUElPCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19ncGlvLmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIEdQSU8gTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19HUElPCisKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGh3X2dwaW8uaD4KKworLyogUmVnaXN0ZXIgYWRyZXNzZXMgKi8KKyNkZWZpbmUgUFhfREFUQV9SRUdfQUREUihfcG9ydCkgICAgICAgICAoKHZvbGF0aWxlIHVpbnQxNl90ICopKEdQSU9fQkFTRSArIG9mZnNldG9mKEdQSU9fVHlwZSwgUDBfREFUQV9SRUcpKSArIF9wb3J0KQorI2RlZmluZSBQWF9EQVRBX1JFRyhfcG9ydCkgICAgICAgICAgICAgICpQWF9EQVRBX1JFR19BRERSKF9wb3J0KQorI2RlZmluZSBQWF9TRVRfREFUQV9SRUdfQUREUihfcG9ydCkgICAgICgodm9sYXRpbGUgdWludDE2X3QgKikoR1BJT19CQVNFICsgb2Zmc2V0b2YoR1BJT19UeXBlLCBQMF9TRVRfREFUQV9SRUcpKSArIF9wb3J0KQorI2RlZmluZSBQWF9TRVRfREFUQV9SRUcoX3BvcnQpICAgICAgICAgICpQWF9TRVRfREFUQV9SRUdfQUREUihfcG9ydCkKKyNkZWZpbmUgUFhfUkVTRVRfREFUQV9SRUdfQUREUihfcG9ydCkgICAoKHZvbGF0aWxlIHVpbnQxNl90ICopKEdQSU9fQkFTRSArIG9mZnNldG9mKEdQSU9fVHlwZSwgUDBfUkVTRVRfREFUQV9SRUcpKSArIF9wb3J0KQorI2RlZmluZSBQWF9SRVNFVF9EQVRBX1JFRyhfcG9ydCkgICAgICAgICpQWF9SRVNFVF9EQVRBX1JFR19BRERSKF9wb3J0KQorI2RlZmluZSBQWFhfTU9ERV9SRUdfQUREUihfcG9ydCwgX3BpbikgICgodm9sYXRpbGUgdWludDE2X3QgKikoR1BJT19CQVNFICsgb2Zmc2V0b2YoR1BJT19UeXBlLCBQMDBfTU9ERV9SRUcpKSArIChfcG9ydCAqIDgpICArIF9waW4pCisjZGVmaW5lIFBYWF9NT0RFX1JFRyhfcG9ydCwgX3BpbikgICAgICAgKlBYWF9NT0RFX1JFR19BRERSKF9wb3J0LCBfcGluKQorI2RlZmluZSBQWF9QQURQV1JfQ1RSTF9SRUdfQUREUihfcG9ydCkgICgodm9sYXRpbGUgdWludDE2X3QgKikoR1BJT19CQVNFICsgb2Zmc2V0b2YoR1BJT19UeXBlLCBQMF9QQURQV1JfQ1RSTF9SRUcpKSArIF9wb3J0KQorI2RlZmluZSBQWF9QQURQV1JfQ1RSTF9SRUcoX3BvcnQpICAgICAgICpQWF9QQURQV1JfQ1RSTF9SRUdfQUREUihfcG9ydCkKKworLyogb24gRlBHQSB3ZSBjYW5ub3QgcmVhZCB0aGUgc3RhdGUgb2YgYW4gb3V0cHV0IEdQSU8gKi8KKworI2lmZGVmIEZQR0FfUEFEX0xPT1BCQUNLX0JST0tFTgorc3RhdGljIHVpbnQxNl90IFB4X0RBVEFfUkVHX2NhY2hlWzVdOworI2VuZGlmCisKKyNpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gUFJPRFVDVElPTl9NT0RFKSAmJiAoREVCVUdfR1BJT19BTExPQ19NT05JVE9SX0VOQUJMRUQgPT0gMSkKKyN3YXJuaW5nICJHUElPIGFzc2lnbm1lbnQgbW9uaXRvcmluZyBpcyBhY3RpdmUgaW4gUFJPRFVDVElPTiBidWlsZCEiCisjZW5kaWYKKworc3RhdGljIHZvbGF0aWxlIHVpbnQ4X3QgR1BJT19zdGF0dXNbSFdfR1BJT19OVU1fUE9SVFNdID0geyAwIH07CisKK2NvbnN0IHVpbnQ4X3QgaHdfZ3Bpb19wb3J0X251bV9waW5zW0hXX0dQSU9fTlVNX1BPUlRTXSA9Cit7CisgICAgSFdfR1BJT19QT1JUXzBfTlVNX1BJTlMsIEhXX0dQSU9fUE9SVF8xX05VTV9QSU5TLAorICAgIEhXX0dQSU9fUE9SVF8yX05VTV9QSU5TLCBIV19HUElPX1BPUlRfM19OVU1fUElOUywKKyAgICBIV19HUElPX1BPUlRfNF9OVU1fUElOUworfTsKKworLyoKKyAqIEdsb2JhbCBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKwordm9pZCBod19ncGlvX2NvbmZpZ3VyZShjb25zdCBncGlvX2NvbmZpZyBjZmdbXSkKK3sKKyNpZiBkZ19jb25maWdJTUFHRV9TRVRVUCA9PSBERVZFTE9QTUVOVF9NT0RFCisgICAgaW50IG51bV9waW5zID0gMDsKKyAgICB1aW50OF90IHNldF9tYXNrW0hXX0dQSU9fTlVNX1BPUlRTXTsKKyNlbmRpZgorCisgICAgaWYgKCFjZmcpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKGNmZy0+cGluICE9IDB4RkYpCisgICAgeworICAgICAgICB1aW50OF90IHBvcnQgPSBjZmctPnBpbiA+PiA0OworICAgICAgICB1aW50OF90IHBpbiA9IGNmZy0+cGluICYgMHgwRjsKKworI2lmIGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUKKworICAgICAgICBpZiAocG9ydCA+PSBIV19HUElPX05VTV9QT1JUUyB8fCBwaW4gPj0gaHdfZ3Bpb19wb3J0X251bV9waW5zW3BvcnRdKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogaW52YWxpZCBwb3J0IG9yIHBpbiBudW1iZXIgc3BlY2lmaWVkLCBpdCB3YXMgZWl0aGVyIGluY29ycmVjdGx5IHNwZWNpZmllZAorICAgICAgICAgICAgICogb2YgY2ZnIHdhcyBub3QgdGVybWluYXRlZCBwcm9wZXJseSB1c2luZyBIV19HUElPX1BJTkNPTkZJR19FTkQgc28gd2UncmUKKyAgICAgICAgICAgICAqIHJlYWRpbmcgZ2FyYmFnZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBfX0JLUFQoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKytudW1fcGlucyA+IEhXX0dQSU9fTlVNX1BJTlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB0cnlpbmcgdG8gc2V0IG1vcmUgcGlucyB0aGFuIGF2YWlsYWJsZSwgcGVyaGFwcyBjZmcgd2FzIG5vdCB0ZXJtaW5hdGVkCisgICAgICAgICAgICAgKiBwcm9wZXJseSB1c2luZyBIV19HUElPX1BJTkNPTkZJR19FTkQ/CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIF9fQktQVCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXRfbWFza1twb3J0XSAmICgxIDw8IHBpbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB0cnlpbmcgdG8gc2V0IHBpbiB3aGljaCBoYXMgYmVlbiBhbHJlYWR5IHNldCBieSB0aGlzIGNhbGwgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICAqIHRoZXJlIGlzIGR1cGxpY2F0ZWQgcGluIGluIGNvbmZpZ3VyYXRpb24gLSBkb2VzIG5vdCBtYWtlIHNlbnNlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIF9fQktQVCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldF9tYXNrW3BvcnRdIHw9ICgxIDw8IHBpbik7CisjZW5kaWYKKworICAgICAgICBpZiAoY2ZnLT5yZXNlcnZlKQorICAgICAgICB7CisgICAgICAgICAgICBod19ncGlvX3Jlc2VydmVfYW5kX2NvbmZpZ3VyZV9waW4ocG9ydCwgcGluLCBjZmctPm1vZGUsIGNmZy0+ZnVuYywgY2ZnLT5oaWdoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X2dwaW9fY29uZmlndXJlX3Bpbihwb3J0LCBwaW4sIGNmZy0+bW9kZSwgY2ZnLT5mdW5jLCBjZmctPmhpZ2gpOworICAgICAgICB9CisKKyAgICAgICAgY2ZnKys7CisgICAgfQorfQorCitib29sIGh3X2dwaW9fcmVzZXJ2ZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyAgICBpZiAoKEdQSU9fc3RhdHVzW3BvcnRdICYgKDEgPDwgcGluKSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR1BJT19zdGF0dXNbcG9ydF0gfD0gKDEgPDwgcGluKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIGh3X2dwaW9fcmVzZXJ2ZV9hbmRfY29uZmlndXJlX3BpbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyBmdW5jdGlvbiwgYm9vbCBoaWdoKQoreworICAgIGlmICghaHdfZ3Bpb19yZXNlcnZlX3Bpbihwb3J0LCBwaW4pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGh3X2dwaW9fY29uZmlndXJlX3Bpbihwb3J0LCBwaW4sIG1vZGUsIGZ1bmN0aW9uLCBoaWdoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGh3X2dwaW9fdW5yZXNlcnZlX3BpbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKQoreworICAgIEdQSU9fc3RhdHVzW3BvcnRdICY9IH4oMSA8PCBwaW4pOworfQorCitzdGF0aWMgdm9pZCBod19ncGlvX3ZlcmlmeV9yZXNlcnZlZChIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluKQoreworI2lmIChERUJVR19HUElPX0FMTE9DX01PTklUT1JfRU5BQkxFRCA9PSAxKQorCisgICAgaWYgKCEoR1BJT19zdGF0dXNbcG9ydF0gJiAoMSA8PCBwaW4pKSkKKyAgICB7CisgICAgICAgIC8vIElmIGRlYnVnZ2VyIHN0b3BzIGF0IHRoaXMgbGluZSwgdGhlcmUgaXMgY29uZmlndXJhdGlvbiBwcm9ibGVtCisgICAgICAgIC8vIHBpbiBpcyB1c2VkIHdpdGhvdXQgYmVpbmcgcmVzZXJ2ZWQgZmlyc3QKKyAgICAgICAgX19CS1BUKDApOyAvKiB0aGlzIHBpbiBoYXMgbm90IGJlZW4gcHJldmlvdXNseSByZXNlcnZlZCEgKi8KKyAgICB9CisKKyNlbmRpZiAvLyAoREVCVUdfR1BJT19BTExPQ19NT05JVE9SX0VOQUJMRUQgPT0gMSkKK30KKworCit2b2lkIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlQgcG9ydCwgSFdfR1BJT19QSU4gcGluLCBIV19HUElPX01PREUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyBmdW5jdGlvbikKK3sKKyAgICBod19ncGlvX3ZlcmlmeV9yZXNlcnZlZChwb3J0LCBwaW4pOworCisgICAgUFhYX01PREVfUkVHKHBvcnQsIHBpbikgPSBtb2RlIHwgZnVuY3Rpb247Cit9CisKK3ZvaWQgaHdfZ3Bpb19nZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fTU9ERSAqbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQyAqZnVuY3Rpb24pCit7CisgICAgdWludDE2X3QgdmFsOworCisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworICAgIHZhbCA9IFBYWF9NT0RFX1JFRyhwb3J0LCBwaW4pOworICAgICptb2RlID0gdmFsICYgMHgwNzAwOworICAgICpmdW5jdGlvbiA9IHZhbCAmIDB4MDBmZjsKK30KKwordm9pZCBod19ncGlvX2NvbmZpZ3VyZV9waW4oSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbiwgSFdfR1BJT19NT0RFIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkMgZnVuY3Rpb24sIGNvbnN0IGJvb2wgaGlnaCkKK3sKKyAgICBod19ncGlvX3ZlcmlmeV9yZXNlcnZlZChwb3J0LCBwaW4pOworCisgICAgaWYgKGhpZ2gpCisgICAgeworICAgICAgICBod19ncGlvX3NldF9hY3RpdmUocG9ydCwgcGluKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaHdfZ3Bpb19zZXRfaW5hY3RpdmUocG9ydCwgcGluKTsKKyAgICB9CisKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24ocG9ydCwgcGluLCBtb2RlLCBmdW5jdGlvbik7Cit9CisKK3ZvaWQgaHdfZ3Bpb19jb25maWd1cmVfcGluX3Bvd2VyKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4sIEhXX0dQSU9fUE9XRVIgcG93ZXIpCit7CisgICAgdWludDE2X3QgcGFkcHdyOworCisgICAgcGFkcHdyID0gUFhfUEFEUFdSX0NUUkxfUkVHKHBvcnQpOworICAgIHBhZHB3ciAmPSB+KDEgPDwgcGluKTsKKworICAgIGlmIChwb3dlciA9PSBIV19HUElPX1BPV0VSX1ZERDFWOFApCisgICAgeworICAgICAgICBwYWRwd3IgfD0gKDEgPDwgcGluKTsKKyAgICB9CisKKyAgICBQWF9QQURQV1JfQ1RSTF9SRUcocG9ydCkgPSBwYWRwd3I7Cit9CisKK3ZvaWQgaHdfZ3Bpb19zZXRfYWN0aXZlKEhXX0dQSU9fUE9SVCBwb3J0LCBIV19HUElPX1BJTiBwaW4pCit7CisgICAgaHdfZ3Bpb192ZXJpZnlfcmVzZXJ2ZWQocG9ydCwgcGluKTsKKworICAgIFBYX1NFVF9EQVRBX1JFRyhwb3J0KSA9IDEgPDwgcGluOworI2lmZGVmIEZQR0FfUEFEX0xPT1BCQUNLX0JST0tFTgorICAgIFB4X0RBVEFfUkVHX2NhY2hlW3BvcnRdIHw9IDEgPDwgcGluOworI2VuZGlmCit9CisKK3ZvaWQgaHdfZ3Bpb19zZXRfaW5hY3RpdmUoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyAgICBod19ncGlvX3ZlcmlmeV9yZXNlcnZlZChwb3J0LCBwaW4pOworCisgICAgUFhfUkVTRVRfREFUQV9SRUcocG9ydCkgPSAxIDw8IHBpbjsKKyNpZmRlZiBGUEdBX1BBRF9MT09QQkFDS19CUk9LRU4KKyAgICBQeF9EQVRBX1JFR19jYWNoZVtwb3J0XSAmPSB+KDEgPDwgcGluKTsKKyNlbmRpZgorfQorCitib29sIGh3X2dwaW9fZ2V0X3Bpbl9zdGF0dXMoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyNpZmRlZiBGUEdBX1BBRF9MT09QQkFDS19CUk9LRU4KKyAgICBIV19HUElPX01PREUgbW9kZTsKKyAgICBIV19HUElPX0ZVTkMgZnVuY3Rpb247CisjZW5kaWYKKyAgICBod19ncGlvX3ZlcmlmeV9yZXNlcnZlZChwb3J0LCBwaW4pOworCisjaWZkZWYgRlBHQV9QQURfTE9PUEJBQ0tfQlJPS0VOCisgICAgaHdfZ3Bpb19nZXRfcGluX2Z1bmN0aW9uKHBvcnQsIHBpbiwgJm1vZGUsICZmdW5jdGlvbik7CisKKyAgICBpZiAobW9kZSAhPSBIV19HUElPX01PREVfT1VUUFVUKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKFBYX0RBVEFfUkVHKHBvcnQpICYgKDEgPDwgcGluKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAhIShQeF9EQVRBX1JFR19jYWNoZVtwb3J0XSAmICgxIDw8IHBpbikpOworICAgIH0KKworI2Vsc2UKKyAgICByZXR1cm4gKChQWF9EQVRBX1JFRyhwb3J0KSAmICgxIDw8IHBpbikpICE9IDApOworI2VuZGlmCit9CisKK3ZvaWQgaHdfZ3Bpb190b2dnbGUoSFdfR1BJT19QT1JUIHBvcnQsIEhXX0dQSU9fUElOIHBpbikKK3sKKyAgICBod19ncGlvX3ZlcmlmeV9yZXNlcnZlZChwb3J0LCBwaW4pOworCisgICAgaWYgKGh3X2dwaW9fZ2V0X3Bpbl9zdGF0dXMocG9ydCwgcGluKSkKKyAgICB7CisgICAgICAgIGh3X2dwaW9fc2V0X2luYWN0aXZlKHBvcnQsIHBpbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGh3X2dwaW9fc2V0X2FjdGl2ZShwb3J0LCBwaW4pOworICAgIH0KK30KKworaW50IGh3X2dwaW9fZ2V0X3BpbnNfd2l0aF9mdW5jdGlvbihIV19HUElPX0ZVTkMgZnVuYywgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgcG9ydDsKKyAgICBpbnQgcGluOworICAgIEhXX0dQSU9fTU9ERSBtb2RlOworICAgIEhXX0dQSU9fRlVOQyBwaW5fZnVuYzsKKworCisgICAgZm9yIChwb3J0ID0gMDsgcG9ydCA8IEhXX0dQSU9fTlVNX1BPUlRTOyArK3BvcnQpCisgICAgeworICAgICAgICBmb3IgKHBpbiA9IDA7IHBpbiA8IGh3X2dwaW9fcG9ydF9udW1fcGluc1twb3J0XTsgKytwaW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X2dwaW9fZ2V0X3Bpbl9mdW5jdGlvbihwb3J0LCBwaW4sICZtb2RlLCAmcGluX2Z1bmMpOworCisgICAgICAgICAgICBpZiAocGluX2Z1bmMgIT0gZnVuYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwgYnVmX3NpemUgJiYgYnVmICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmW2NvdW50XSA9ICh1aW50OF90KSgocG9ydCA8PCA0KSB8IHBpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfR1BJTyAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19oYXJkX2ZhdWx0LmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfaGFyZF9mYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGQyOGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfaGFyZF9mYXVsdC5jCkBAIC0wLDAgKzEsMTc0IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIFNZU1RFTQorICogXHsKKyAqIFxhZGR0b2dyb3VwIEV4Y2VwdGlvbl9IYW5kbGVycworICogXHsKKyovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod19oYXJkX2ZhdWx0LmMKKyAqCisgKiBAYnJpZWYgSGFyZEZhdWx0IGhhbmRsZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImh3X2hhcmRfZmF1bHQuaCIKKyNpbmNsdWRlICJod193YXRjaGRvZy5oIgorI2luY2x1ZGUgImh3X2NwbS5oIgorCisKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMKKyAqLwordWludDMyX3QgaGFyZGZhdWx0X2V2ZW50X2RhdGFbOV0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiaGFyZF9mYXVsdF9pbmZvIikpKTsKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlcworICovCisKKworLyoKKyAqIFRoaXMgaXMgdGhlIGJhc2UgYWRkcmVzcyBpbiBSZXRlbnRpb24gUkFNIHdoZXJlIHRoZSBzdGFja2VkIGluZm9ybWF0aW9uIHdpbGwgYmUgY29waWVkLgorICovCisjZGVmaW5lIFNUQVRVU19CQVNFICgweDdGQzU2MDApCisKKy8qCisgKiBDb21waWxhdGlvbiBzd2l0Y2ggdG8gZW5hYmxlIHZlcmJvc2Ugb3V0cHV0IG9uIEhhcmRGYXVsdAorICovCisjaWZuZGVmIFZFUkJPU0VfSEFSREZBVUxUCisjICAgICAgIGRlZmluZSBWRVJCT1NFX0hBUkRGQVVMVCAgICAgICAgMAorI2VuZGlmCisKKworLyoKKyAqIEZ1bmN0aW9uIGRlZmluaXRpb25zCisgKi8KKworLyoqCisqIFxicmllZiBIYXJkRmF1bHQgaGFuZGxlciBpbXBsZW1lbnRhdGlvbi4gRHVyaW5nIGRldmVsb3BtZW50IGl0IHdpbGwgY29weSB0aGUgc3lzdGVtJ3Mgc3RhdHVzCisqICAgICAgICB0byBhIHByZWRlZmluZWQgbG9jYXRpb24gaW4gbWVtb3J5LiBJbiByZWxlYXNlIG1vZGUsIGl0IHdpbGwgY2F1c2UgYSBzeXN0ZW0gcmVzZXQuCisqCisqIFxwYXJhbSBbaW5dIGhhcmRmYXVsdF9hcmdzIFRoZSBzeXN0ZW0ncyBzdGF0dXMgd2hlbiB0aGUgSGFyZEZhdWx0IGV2ZW50IG9jY3VycmVkLgorKgorKiBccmV0dXJuIHZvaWQKKyoKKyovCisjaWYgKGRnX2NvbmZpZ0NPREVfTE9DQVRJT04gPT0gTk9OX1ZPTEFUSUxFX0lTX0ZMQVNIKQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigidGV4dF9yZXRhaW5lZCIpKSkKKyNlbmRpZgordm9pZCBIYXJkRmF1bHRfSGFuZGxlckModW5zaWduZWQgbG9uZyAqaGFyZGZhdWx0X2FyZ3MpCit7CisgICAgLy8gU3RhY2sgZnJhbWUgY29udGFpbnM6CisgICAgLy8gcjAsIHIxLCByMiwgcjMsIHIxMiwgcjE0LCB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHhQU1IKKyAgICAvLyAtIFN0YWNrZWQgUjAgPSBoZl9hcmdzWzBdCisgICAgLy8gLSBTdGFja2VkIFIxID0gaGZfYXJnc1sxXQorICAgIC8vIC0gU3RhY2tlZCBSMiA9IGhmX2FyZ3NbMl0KKyAgICAvLyAtIFN0YWNrZWQgUjMgPSBoZl9hcmdzWzNdCisgICAgLy8gLSBTdGFja2VkIFIxMiA9IGhmX2FyZ3NbNF0KKyAgICAvLyAtIFN0YWNrZWQgTFIgPSBoZl9hcmdzWzVdCisgICAgLy8gLSBTdGFja2VkIFBDID0gaGZfYXJnc1s2XQorICAgIC8vIC0gU3RhY2tlZCB4UFNSPSBoZl9hcmdzWzddCisgICAgaWYgKGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUpCisgICAgeworICAgICAgICBod193YXRjaGRvZ19mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIFdET0cKKworICAgICAgICBFTkFCTEVfREVCVUdHRVI7CisKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFKSA9IGhhcmRmYXVsdF9hcmdzWzBdOyAgICAgICAgICAgLy8gUjAKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgwNCkgPSBoYXJkZmF1bHRfYXJnc1sxXTsgICAgLy8gUjEKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgwOCkgPSBoYXJkZmF1bHRfYXJnc1syXTsgICAgLy8gUjIKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgwQykgPSBoYXJkZmF1bHRfYXJnc1szXTsgICAgLy8gUjMKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgxMCkgPSBoYXJkZmF1bHRfYXJnc1s0XTsgICAgLy8gUjEyCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MTQpID0gaGFyZGZhdWx0X2FyZ3NbNV07ICAgIC8vIExSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MTgpID0gaGFyZGZhdWx0X2FyZ3NbNl07ICAgIC8vIFBDCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MUMpID0gaGFyZGZhdWx0X2FyZ3NbN107ICAgIC8vIFBTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDIwKSA9ICh1bnNpZ25lZCBsb25nKWhhcmRmYXVsdF9hcmdzOyAgICAvLyBTdGFjayBQb2ludGVyCisKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgyNCkgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDI4KSkpOyAgICAvLyBDRlNSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MjgpID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQyQykpKTsgICAgLy8gSEZTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDJDKSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMzApKSk7ICAgIC8vIERGU1IKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgzMCkgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDNDKSkpOyAgICAvLyBBRlNSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MzQpID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQzNCkpKTsgICAgLy8gTU1BUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDM4KSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMzgpKSk7ICAgIC8vIEJGQVIKKworICAgICAgICBpZiAoVkVSQk9TRV9IQVJERkFVTFQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiSGFyZEZhdWx0IEhhbmRsZXI6XHJcbiIpOworICAgICAgICAgICAgcHJpbnRmKCItIFIwICA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbMF0pOworICAgICAgICAgICAgcHJpbnRmKCItIFIxICA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbMV0pOworICAgICAgICAgICAgcHJpbnRmKCItIFIyICA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbMl0pOworICAgICAgICAgICAgcHJpbnRmKCItIFIzICA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbM10pOworICAgICAgICAgICAgcHJpbnRmKCItIFIxMiA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbNF0pOworICAgICAgICAgICAgcHJpbnRmKCItIExSICA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbNV0pOworICAgICAgICAgICAgcHJpbnRmKCItIFBDICA9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbNl0pOworICAgICAgICAgICAgcHJpbnRmKCItIHhQU1I9IDB4JTA4bHhcclxuIiwgaGFyZGZhdWx0X2FyZ3NbN10pOworICAgICAgICB9CisKKyAgICAgICAgaHdfY3BtX2Fzc2VydF90cmlnZ2VyX2dwaW8oKTsKKworICAgICAgICB3aGlsZSAoMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjIGlmZGVmIFBST0RVQ1RJT05fREVCVUdfT1VUUFVUCisjIGlmIChVU0VfV0RPRykKKyAgICAgICAgV0RPRy0+V0FUQ0hET0dfUkVHID0gMHhDODsgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgV0RPRyEgMjAwICogMTAuMjRtcyBhY3RpdmUgdGltZSBmb3IgVUFSVCB0byBmaW5pc2ggcHJpbnRpbmchCisjIGVuZGlmCisKKyAgICAgICAgZGJnX3Byb2Rfb3V0cHV0KDEsIGhhcmRmYXVsdF9hcmdzKTsKKyMgZW5kaWYgLy8gUFJPRFVDVElPTl9ERUJVR19PVVRQVVQKKworICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVswXSA9IEhBUkRGQVVMVF9NQUdJQ19OVU1CRVI7CisgICAgICAgIGhhcmRmYXVsdF9ldmVudF9kYXRhWzFdID0gaGFyZGZhdWx0X2FyZ3NbMF07ICAgIC8vIFIwCisgICAgICAgIGhhcmRmYXVsdF9ldmVudF9kYXRhWzJdID0gaGFyZGZhdWx0X2FyZ3NbMV07ICAgIC8vIFIxCisgICAgICAgIGhhcmRmYXVsdF9ldmVudF9kYXRhWzNdID0gaGFyZGZhdWx0X2FyZ3NbMl07ICAgIC8vIFIyCisgICAgICAgIGhhcmRmYXVsdF9ldmVudF9kYXRhWzRdID0gaGFyZGZhdWx0X2FyZ3NbM107ICAgIC8vIFIzCisgICAgICAgIGhhcmRmYXVsdF9ldmVudF9kYXRhWzVdID0gaGFyZGZhdWx0X2FyZ3NbNF07ICAgIC8vIFIxMgorICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVs2XSA9IGhhcmRmYXVsdF9hcmdzWzVdOyAgICAvLyBMUgorICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVs3XSA9IGhhcmRmYXVsdF9hcmdzWzZdOyAgICAvLyBQQworICAgICAgICBoYXJkZmF1bHRfZXZlbnRfZGF0YVs4XSA9IGhhcmRmYXVsdF9hcmdzWzddOyAgICAvLyBQU1IKKworICAgICAgICBod19jcG1fcmVib290X3N5c3RlbSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSByZXNldAorCisgICAgICAgIHdoaWxlICgxKTsKKyAgICB9Cit9CisKKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICogKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19vdHBjLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfb3RwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTQ2MWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfb3RwYy5jCkBAIC0wLDAgKzEsMTA5NyBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgT1RQQworICogXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgaHdfb3RwYy5jCisgKgorICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIHRoZSBPVFAgQ29udHJvbGxlciBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWYgZGdfY29uZmlnVVNFX0hXX09UUEMKKworCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJod19vdHBjLmgiCisKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlcworICovCisKKy8qCisgKiAxTUh6OiAxIGN5Y2xlID0gMXVzID09PgorICogICAgMjVucyA6IDF1cywgICAyMDBucyA6IDF1cywgICA1MDBucyA6IDF1cywgICAxdXMgOiAydXMsICAgICA1dXMgOiA1dXMsIDJ1cyA6IDN1cywgICAgIGJsYW5jIDogMXVzCisgKgorICogMk1IejogMSBjeWNsZSA9IDUwMG5zID09PgorICogICAgMjVucyA6IDUwMG5zLCAyMDBucyA6IDUwMG5zLCA1MDBucyA6IDF1cywgICAxdXMgOiAxLjV1cywgICA1dXMgOiA1dXMsIDJ1cyA6IDIuNXVzLCAgIGJsYW5jIDogNTAwbnMKKyAqCisgKiAzTUh6OiAxIGN5Y2xlID0gMzMzbnMgPT0+CisgKiAgICAyNW5zIDogMzMzbnMsIDIwMG5zIDogMzMzbnMsIDUwMG5zIDogNjY2bnMsIDF1cyA6IDEuMzN1cywgIDV1cyA6IDV1cywgMnVzIDogMi4zM3VzLCAgYmxhbmMgOiAzMzNucworICoKKyAqIDRNSHo6IDEgY3ljbGUgPSAyNTBucyA9PT4KKyAqICAgIDI1bnMgOiAyNTBucywgMjAwbnMgOiAyNTBucywgNTAwbnMgOiA3NTBucywgMXVzIDogMS4yNW5zLCAgNXVzIDogNXVzLCAydXMgOiAyLjI1bnMsICBibGFuYyA6IDI1MG5zCisgKgorICogNk1IejogMSBjeWNsZSA9IDE2N25zID09PgorICogICAgMjVucyA6IDE2N25zLCAyMDBucyA6IDMzM25zLCA1MDBucyA6IDY2N25zLCAxdXMgOiAxLjE2N25zLCA1dXMgOiA1dXMsIDJ1cyA6IDIuMTY3bnMsIGJsYW5jIDogMTY3bnMKKyAqCisgKiA4TUh6OiAxIGN5Y2xlID0gMTI1bnMgPT0+CisgKiAgICAyNW5zIDogMTI1bnMsIDIwMG5zIDogMjUwbnMsIDUwMG5zIDogNjI1bnMsIDF1cyA6IDEuMTI1bnMsIDV1cyA6IDV1cywgMnVzIDogMi4xMjVucywgYmxhbmMgOiAxMjVucworICoKKyAqIDEyTUh6OiAxIGN5Y2xlID0gODMuMzNucyA9PT4KKyAqICAgIDI1bnMgOiA4M25zLCAyMDBucyA6IDI1MG5zLCAgNTAwbnMgOiA1ODNucywgMXVzIDogMS4wODNucywgNXVzIDogNXVzLCAydXMgOiAyLjA4M25zLCBibGFuYyA6IDE2N25zCisgKgorICogMTZNSHo6IDEgY3ljbGUgPSA2Mi41bnMgPT0+CisgKiAgICAyNW5zIDogNjJucywgMjAwbnMgOiAyNTBucywgIDUwMG5zIDogNTYybnMsIDF1cyA6IDEuMDYybnMsIDV1cyA6IDV1cywgMnVzIDogMi4wNjJucywgYmxhbmMgOiAxMjVucworICoKKyAqIDI0TUh6OiAxIGN5Y2xlID0gNDEuNjducyA9PT4KKyAqICAgIDI1bnMgOiA0MW5zLCAyMDBucyA6IDIwOG5zLCAgNTAwbnMgOiA1NDFucywgMXVzIDogMS4wNDFucywgNXVzIDogNXVzLCAydXMgOiAyLjA0MW5zLCBibGFuYyA6IDEyNW5zCisgKgorICogMzJNSHo6IDEgY3ljbGUgPSAzMS4yNW5zID09PgorICogICAgMjVucyA6IDMxbnMsIDIwMG5zIDogMjE5bnMsICA1MDBucyA6IDUzMW5zLCAxdXMgOiAxLjAzMW5zLCA1dXMgOiA1dXMsIDJ1cyA6IDIuMDMxbnMsIGJsYW5jIDogMTI1bnMKKyAqCisgKiA0OE1IejogMSBjeWNsZSA9IDQxLjY3bnMgPT0+CisgKiAgICAyNW5zIDogNDFucywgMjAwbnMgOiAyMDhucywgIDUwMG5zIDogNTIxbnMsIDF1cyA6IDEuMDIxbnMsIDV1cyA6IDV1cywgMnVzIDogMi4wMjFucywgYmxhbmMgOiAxMjVucworICoKKyAqLworY29uc3QgdWludDMyX3QgdGltMVsxMV0gPQoreworICAgIC8qIDEgTUh6ICovCisgICAgKDAgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzI1TlNfUG9zKSB8CisgICAgKDAgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzIwME5TX1BvcykgfAorICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Qb3MpIHwKKyAgICAoMSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICg0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDJNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDEgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICgyIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDkgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcykgfAorICAgICg0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogM01IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoMSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDMgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MpIHwKKyAgICAoMTQgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcykgfAorICAgICg2IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogNE1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDQgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MpIHwKKyAgICAoMTkgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcykgfAorICAgICg4IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogNk1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICgxIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoMyA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDYgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MpIHwKKyAgICAoMjkgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcykgfAorICAgICgxMiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDhNSHogKi8KKyAgICAoMCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoMSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDQgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICg4IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDM5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoMTYgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKSwKKyAgICAvKiAxMk1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICgyIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoNiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDEyIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDU5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoMjQgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKSwKKyAgICAvKiAxNk1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICgzIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoOCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDE2IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDc5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoMzIgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKSwKKyAgICAvKiAyNE1IeiAqLworICAgICgwIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yNU5TX1BvcykgfAorICAgICg0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8yMDBOU19Qb3MpIHwKKyAgICAoMTIgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzUwME5TX1BvcykgfAorICAgICgyNCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMVVTX1BvcykgfAorICAgICgxMTkgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX1BXX1BvcykgfAorICAgICg0OCA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfQ0FEWF9Qb3MpLAorICAgIC8qIDMyTUh6ICovCisgICAgKDAgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzI1TlNfUG9zKSB8CisgICAgKDYgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzIwME5TX1BvcykgfAorICAgICgxNiA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfNTAwTlNfUG9zKSB8CisgICAgKDMyIDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF8xVVNfUG9zKSB8CisgICAgKDE1OSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfUFdfUG9zKSB8CisgICAgKDY0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9DQURYX1BvcyksCisgICAgLyogNDhNSHogKi8KKyAgICAoMSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjVOU19Qb3MpIHwKKyAgICAoOSA8PCBPVFBDX09UUENfVElNMV9SRUdfT1RQQ19USU0xX0NDX1RfMjAwTlNfUG9zKSB8CisgICAgKDI0IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF81MDBOU19Qb3MpIHwKKyAgICAoNDggPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UXzFVU19Qb3MpIHwKKyAgICAoMjM5IDw8IE9UUENfT1RQQ19USU0xX1JFR19PVFBDX1RJTTFfQ0NfVF9QV19Qb3MpIHwKKyAgICAoOTYgPDwgT1RQQ19PVFBDX1RJTTFfUkVHX09UUENfVElNMV9DQ19UX0NBRFhfUG9zKQorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGltMltIV19PVFBDX1NZU19DTEtfRlJFUV80OCArIDFdID0KK3sgMCwgMCwgMCwgMCwgMCwgMCwgIDEsICAxLCAgMiwgIDMsICA1IH07CisKKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KKworCisKKy8qCisgKiBJbmxpbmUgaGVscGVycworICovCisKKy8qKgorICogV2FpdCBmb3IgcHJvZ3JhbW1pbmcgdG8gZmluaXNoLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCB3YWl0X2Zvcl9wcm9nX2RvbmUodm9pZCkKK3sKKyAgICB3aGlsZSAoIShPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBQUkRZKSkpCisgICAgICAgIDsKK30KKworLyoqCisgKiBXYWl0IGZvciBBUkVBRCBvciBBUFJPRyB0byBmaW5pc2guCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIHdhaXRfZm9yX2F1dG9fZG9uZSh2b2lkKQoreworICAgIHdoaWxlICghKE9UUEMtPk9UUENfU1RBVF9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKFNUQVQsIEFSRFkpKSkKKyAgICAgICAgOworfQorCisvKioKKyAqIENoZWNrIGZvciBjb3JyZWN0YWJsZSBvciB1bmNvcnJlY3RhYmxlIHByb2dyYW1taW5nIGVycm9yLgorICovCitfX1NUQVRJQ19JTkxJTkUgYm9vbCBoYXZlX3Byb2dfZXJyb3Iodm9pZCkKK3sKKyAgICByZXR1cm4gT1RQQy0+T1RQQ19TVEFUX1JFRyAmCisgICAgICAgICAgIChIV19PVFBDX0ZJRUxEX1ZBTChTVEFULCBQRVJSX1VOQywgMSkgfCBIV19PVFBDX0ZJRUxEX1ZBTChTVEFULCBQRVJSX0NPUiwgMSkpOworfQorCisvKgorICogQXNzZXJ0aW9uIG1hY3JvcworICovCisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgT1RQIGNsb2NrIGlzIGVuYWJsZWQKKyAqLworI2RlZmluZSBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQgXAorICAgICAgICBBU1NFUlRfV0FSTklORyhDUkdfVE9QLT5DTEtfQU1CQV9SRUcgJiBSRUdfTVNLKENSR19UT1AsIENMS19BTUJBX1JFRywgT1RQX0VOQUJMRSkpCisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgT1RQQyBpcyBpbiBnaXZlbiBzdGF0ZQorICovCisjZGVmaW5lIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShzKSBcCisgICAgICAgIEFTU0VSVF9XQVJOSU5HKChPVFBDLT5PVFBDX01PREVfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhNT0RFLCBNT0RFKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBNT0RFLCBzKSkKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjZWxsIGFkZHJlc3MgaXMgdmFsaWQKKyAqLworI2RlZmluZSBBU1NFUlRfQ0VMTF9PRkZTRVRfVkFMSUQob2ZmKSBcCisgICAgICAgIEFTU0VSVF9XQVJOSU5HKG9mZiA8IDB4MjAwMCkKKworLyoKKyAqIE1ha2Ugc3VyZSB2YWwgaXMgbm9uLXplcm8gYW5kIGxlc3MgdGhhbiBtYXhpbXVtCisgKi8KKyNkZWZpbmUgQVNTRVJUX1dBUk5JTkdfTk9OWkVST19SQU5HRSh2YWwsIG1heGltdW0pIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcodmFsKTsgXAorICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKCh2YWwpIDwgKG1heGltdW0pKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorCisKKy8qCisgKiBGdW5jdGlvbiBkZWZpbml0aW9ucworICovCisKK19fUkVUQUlORURfQ09ERSBIV19PVFBDX1NZU19DTEtfRlJFUSBod19vdHBjX2NvbnZlcnRfc3lzX2Nsa19taHoodWludDMyX3QgY2xrX2ZyZXEpCit7CisgICAgSFdfT1RQQ19TWVNfQ0xLX0ZSRVEgZjsKKworICAgIC8qIFZhbHVlIHRvIGNvbnZlcnQgbXVzdCBiZSBhdCBtb3N0IDQ4IE1IeiAqLworICAgIEFTU0VSVF9XQVJOSU5HKGNsa19mcmVxIDw9IDQ4KTsKKworICAgIGlmICgtLWNsa19mcmVxIDwgNCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNvdmVyIDEsIDIsIDMsIDQKKyAgICAgICAgICovCisgICAgICAgIGYgPSAoSFdfT1RQQ19TWVNfQ0xLX0ZSRVEpY2xrX2ZyZXE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsa19mcmVxIC09IDU7CisgICAgICAgIC8qCisgICAgICAgICAqIHJlbWFpbmluZyB2YWxpZCB2YWx1ZXM6CisgICAgICAgICAqICAtICAwIChpbml0aWFsbHkgNikKKyAgICAgICAgICogIC0gIDIgKGluaXRpYWxseSA4KQorICAgICAgICAgKiAgLSAgNiAoaW5pdGlhbGx5IDEyKQorICAgICAgICAgKiAgLSAxMCAoaW5pdGlhbGx5IDE2KQorICAgICAgICAgKiAgLSAxOCAoaW5pdGlhbGx5IDI0KQorICAgICAgICAgKiAgLSAyNiAoaW5pdGlhbGx5IDMyKQorICAgICAgICAgKiAgLSA0MiAoaW5pdGlhbGx5IDQ4KQorICAgICAgICAgKi8KKworICAgICAgICAvKiBubyBvZGQgdmFsaWQgdmFsdWVzIGFueSBtb3JlICovCisgICAgICAgIEFTU0VSVF9XQVJOSU5HKCEoY2xrX2ZyZXEgJiAxKSk7CisKKyAgICAgICAgY2xrX2ZyZXEgPj49IDE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtYWluaW5nIHZhbGlkIHZhbHVlczoKKyAgICAgICAgICogIC0gIDAgKGluaXRpYWxseSA2KQorICAgICAgICAgKiAgLSAgMSAoaW5pdGlhbGx5IDgpCisgICAgICAgICAqICAtICAzIChpbml0aWFsbHkgMTIpCisgICAgICAgICAqICAtICA1IChpbml0aWFsbHkgMTYpCisgICAgICAgICAqICAtICA5IChpbml0aWFsbHkgMjQpCisgICAgICAgICAqICAtIDEzIChpbml0aWFsbHkgMzIpCisgICAgICAgICAqICAtIDIxIChpbml0aWFsbHkgNDgpCisgICAgICAgICAqLworICAgICAgICBpZiAoY2xrX2ZyZXEgPiA4KQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogcmVtYWluaW5nIHZhbGlkIHZhbHVlczoKKyAgICAgICAgICAgICAqICAtICA5IChpbml0aWFsbHkgMjQpCisgICAgICAgICAgICAgKiAgLSAxMyAoaW5pdGlhbGx5IDMyKQorICAgICAgICAgICAgICogIC0gMjEgKGluaXRpYWxseSA0OCkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGNsa19mcmVxID4gMTYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoY2xrX2ZyZXEgPT0gMjEpOworCisgICAgICAgICAgICAgICAgZiA9IEhXX09UUENfU1lTX0NMS19GUkVRXzQ4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsa19mcmVxIC09IDg7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZW1haW5pbmcgdmFsaWQgdmFsdWVzOgorICAgICAgICAgICAgICAgICAqICAtICAxIChpbml0aWFsbHkgMjQpCisgICAgICAgICAgICAgICAgICogIC0gIDUgKGluaXRpYWxseSAzMikKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygoY2xrX2ZyZXEgPT0gMSkgfHwgKGNsa19mcmVxID09IDUpKTsKKworICAgICAgICAgICAgICAgIGlmIChjbGtfZnJlcSA8IDQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmID0gKEhXX09UUENfU1lTX0NMS19GUkVRKUhXX09UUENfU1lTX0NMS19GUkVRXzI0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmID0gKEhXX09UUENfU1lTX0NMS19GUkVRKUhXX09UUENfU1lTX0NMS19GUkVRXzMyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiByZW1haW5pbmcgdmFsaWQgdmFsdWVzOgorICAgICAgICAgICAgICogIC0gIDAgKGluaXRpYWxseSA2KQorICAgICAgICAgICAgICogIC0gIDEgKGluaXRpYWxseSA4KQorICAgICAgICAgICAgICogIC0gIDMgKGluaXRpYWxseSAxMikKKyAgICAgICAgICAgICAqICAtICA1IChpbml0aWFsbHkgMTYpCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChjbGtfZnJlcSA+IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoKGNsa19mcmVxID09IDMpIHx8IChjbGtfZnJlcSA9PSA1KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2xrX2ZyZXEgPiA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZiA9IChIV19PVFBDX1NZU19DTEtfRlJFUSlIV19PVFBDX1NZU19DTEtfRlJFUV8xNjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZiA9IChIV19PVFBDX1NZU19DTEtfRlJFUSlIV19PVFBDX1NZU19DTEtfRlJFUV8xMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZiA9IChIV19PVFBDX1NZU19DTEtfRlJFUSkoSFdfT1RQQ19TWVNfQ0xLX0ZSRVFfNiArIGNsa19mcmVxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmOworfQorCisKK3ZvaWQgaHdfb3RwY19kaXNhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBFbmFibGUgT1RQQyBjbG9jaworICAgICAqLworICAgIGh3X290cGNfaW5pdCgpOworCisgICAgLyoKKyAgICAgKiBzZXQgT1RQQyB0byBzdGFuZC1ieSBtb2RlCisgICAgICovCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICAvKgorICAgICAqIERpc2FibGUgT1RQQyBjbG9jaworICAgICAqLworICAgIGh3X290cGNfY2xvc2UoKTsKK30KKworCitfX1JFVEFJTkVEX0NPREUgdm9pZCBod19vdHBjX3NldF9zcGVlZChIV19PVFBDX1NZU19DTEtfRlJFUSBjbGtfc3BlZWQpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgLyoKKyAgICAgKiBTZXQgYWNjZXNzIHNwZWVkCisgICAgICovCisgICAgQVNTRVJUX1dBUk5JTkcoY2xrX3NwZWVkIDw9IEhXX09UUENfU1lTX0NMS19GUkVRXzQ4KTsKKworICAgIE9UUEMtPk9UUENfVElNMV9SRUcgPSB0aW0xW2Nsa19zcGVlZF07CisgICAgSFdfT1RQQ19SRUdfU0VURihUSU0yLCBDQ19UX0JDSEssIHRpbTJbY2xrX3NwZWVkXSk7Cit9CisKKwordm9pZCBod19vdHBjX3Bvd2VyX3NhdmUodWludDMyX3QgaW5hY3Rpdml0eV9wZXJpb2QpCit7CisgICAgLyogT25seSBnbyB0byBwb3dlciBzYXZlIGZvciBhbiBpbmFjdGl2aXR5X3BlcmlvZCA8IDEwMjQgKi8KKyAgICBBU1NFUlRfV0FSTklORyhpbmFjdGl2aXR5X3BlcmlvZCA8IDEwMjQpOworCisgICAgSFdfT1RQQ19SRUdfU0VURihUSU0yLCBDQ19TVEJZX1RIUiwgaW5hY3Rpdml0eV9wZXJpb2QpOworfQorCisKK3VpbnQzMl90IGh3X290cGNfbnVtX29mX3JyKHZvaWQpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqcHRyID0gKHZvbGF0aWxlIHVpbnQzMl90ICopTUVNT1JZX09UUF9CQVNFOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgLy8gU1RCWSBtb2RlCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICAvLyBUaGUgYWNjZXNzIHdpbGwgYmUgcGVyZm9ybWVkIGluIHRoZSBzcGFyZSByb3dzCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBVU0VfU1BfUk9XUywgMSk7CisKKyAgICAvLyBNUkVBRCBtb2RlCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfTVJFQUQpOworCisgICAgLy8gUmVhZCBSZWNvcmRzCisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoKGkgPCBNQVhfUlJfQVZBSUwpICYmIChwdHJbMHg5ZSAtIDQgKiBpXSAmIDB4MSkpCisgICAgeworICAgICAgICBpKys7CisgICAgfQorCisgICAgLy8gU1RCWSBtb2RlCisgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICAvLyBTZWxlY3QgdGhlIG5vcm1hbCBtZW1vcnkgYXJyYXkKKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIFVTRV9TUF9ST1dTLCAwKTsKKworICAgIHJldHVybiBpOworfQorCitzdGF0aWMgYm9vbCBtYW51YWxfcHJvZ192ZXJpZnkodWludDMyX3QgY2VsbF9vZmZzZXQsIHVpbnQzMl90IHB3b3JkX2wsIHVpbnQzMl90IHB3b3JkX2gpCit7CisgICAgdWludDMyX3QgdmFsX2wsIHZhbF9oLCBvbGRfbW9kZSA9IE9UUEMtPk9UUENfTU9ERV9SRUc7CisgICAgdWludDMyX3QgKmFkZHIgPSBod19vdHBjX2NlbGxfdG9fbWVtKGNlbGxfb2Zmc2V0KTsKKworICAgIC8qIHdlIGhhdmUgdG8gZ28gdGhyb3VnaCBzdGFuZGJ5IG1vZGUgZmlyc3QgKi8KKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9TVEJZKTsKKyAgICBfX0RNQigpOworICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgRVJSX1JFU1BfRElTLCAxKTsKKyAgICBfX0RNQigpOworICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX01SRUFEKTsKKworICAgIGlmIChPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBSRVJST1IpKQorICAgIHsKKyAgICAgICAgSFdfT1RQQ19SRUdfU0VURihTVEFULCBSRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSk7IC8vVGhpcyBiaXQgbmVlZCB0byBiZSBjbGVhcmVkIG1hbnVhbGx5IChjYW4gb25seSBoYXBwZW4gaWYgYSBwcmV2aW91cyByZWFkIGhhcyBub3QgY2hlY2tlZC9jbGVhcmVkIGl0KQorICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCBjZWxsIGluIG1hbnVhbCBtb2RlLCBhcyAyIDMyLWJpdCB2YWx1ZXMgKGxpdHRsZS1lbmRpYW4pCisgICAgICovCisgICAgdmFsX2wgPSBhZGRyWzBdOworICAgIHZhbF9oID0gYWRkclsxXTsKKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9TVEJZKTsKKyAgICBfX0RNQigpOworICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPSBvbGRfbW9kZTsKKworICAgIGlmIChPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBSRVJST1IpKQorICAgIHsKKyAgICAgICAgSFdfT1RQQ19SRUdfU0VURihTVEFULCBSRVJST1IsIDEpOyAvL1RoaXMgYml0IG5lZWQgdG8gYmUgY2xlYXJlZCBtYW51YWxseQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIChwd29yZF9oID09IHZhbF9oKSAmJiAocHdvcmRfbCA9PSB2YWxfbCk7Cit9CisKKy8qCisgKiBTZXQgdG8gMSB0byBtYW51YWxseSB2ZXJpZnkgdGhlIHByb2dyYW1tZWQgY2VsbCB2YWx1ZSwgaWYgdGhlIGF1dG8tdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCisjZGVmaW5lIE1BTlVBTF9QUk9HX1ZFUklGSUNBVElPTiAgICAgICAgMQorCitib29sIGh3X290cGNfbWFudWFsX3dvcmRfcHJvZyh1aW50MzJfdCBjZWxsX29mZnNldCwgdWludDMyX3QgcHdvcmRfbCwgdWludDMyX3QgcHdvcmRfaCwgYm9vbCB1c2VfcnIpCit7CisgICAgaW50IGk7CisgICAgYm9vbCByZXQgPSB0cnVlOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIEFTU0VSVF9DRUxMX09GRlNFVF9WQUxJRChjZWxsX29mZnNldCk7CisKKyAgICAvKgorICAgICAqIFByb2dyYW0gdGhlIGRhdGEgcmVncworICAgICAqLworICAgIE9UUEMtPk9UUENfUFdPUkRMX1JFRyA9IHB3b3JkX2w7CisgICAgT1RQQy0+T1RQQ19QV09SREhfUkVHID0gcHdvcmRfaDsKKworICAgIC8qCisgICAgICogU3RhcnQgcHJvZ3JhbW1pbmcKKyAgICAgKi8KKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9NUFJPRyk7CisgICAgT1RQQy0+T1RQQ19QQ1RSTF9SRUcgPQorICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChQQ1RSTCwgV0FERFIsIGNlbGxfb2Zmc2V0KSB8CisgICAgICAgIEhXX09UUENfRklFTERfVkFMKFBDVFJMLCBQU1RBUlQsIDEpOworICAgIHdhaXRfZm9yX3Byb2dfZG9uZSgpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBhbmQgcmV0cnkgdXAgdG8gMTAgdGltZXMKKyAgICAgKi8KKyAgICBpID0gMDsKKworICAgIHdoaWxlIChoYXZlX3Byb2dfZXJyb3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpID09IDEwKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGkgPSBpICsgMTsKKworICAgICAgICBPVFBDLT5PVFBDX1BDVFJMX1JFRyA9CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChQQ1RSTCwgV0FERFIsIGNlbGxfb2Zmc2V0KSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChQQ1RSTCwgUFNUQVJULCAxKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChQQ1RSTCwgUFJFVFJZLCAxKTsKKworICAgICAgICB3YWl0X2Zvcl9wcm9nX2RvbmUoKTsKKyAgICB9CisKKyAgICBpZiAoaSA9PSAxMCkKKyAgICB7CisgICAgICAgIHJldCA9IGZhbHNlOworCisgICAgICAgIGlmIChNQU5VQUxfUFJPR19WRVJJRklDQVRJT04pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IG1hbnVhbF9wcm9nX3ZlcmlmeShjZWxsX29mZnNldCwgcHdvcmRfbCwgcHdvcmRfaCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlX3JyICYmICFyZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUmVzZXQgc3RhdGUKKyAgICAgICAgICAgICAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZSB3cml0aW5nIHdhcyBkb25lIGluIHRoZSBzcGFyZSBhcmVhCisgICAgICAgICAgICAgICAgaWYgKE9UUEMtPk9UUENfTU9ERV9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKE1PREUsIFVTRV9TUF9ST1dTKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSByZXBhaXIgcmVjb3JkIHRvIHRoZSBzcGFyZSBhcmVhCisgICAgICAgICAgICAgICAgaWYgKCFod19vdHBjX3dyaXRlX3JyKGNlbGxfb2Zmc2V0LCBwd29yZF9sLCBwd29yZF9oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX1NUQlkpOworICAgICAgICAgICAgICAgIC8vIGZvcmNlIHJlbG9hZGluZworICAgICAgICAgICAgICAgIEhXX09UUENfUkVHX1NFVEYoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX01SRUFEKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgaHdfb3RwY19tYW51YWxfcHJvZyhjb25zdCB1aW50MzJfdCAqcF9kYXRhLCB1aW50MzJfdCBjZWxsX29mZnNldCwgSFdfT1RQQ19XT1JEIGNlbGxfd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fb2Zfd29yZHMsIGJvb2wgdXNlX3JyKQoreworICAgIHVpbnQzMl90IHcsIGMsIG5jZWxscywgb2ZmLCB2YWw7CisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIGNvbnN0IHVpbnQzMl90ICphZGRyOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIEFTU0VSVF9DRUxMX09GRlNFVF9WQUxJRChjZWxsX29mZnNldCk7CisKKyAgICBpZiAobnVtX29mX3dvcmRzID09IDApCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsgICAgLy8gZWFybHkgZXhpdAorICAgIH0KKworICAgIC8qIGluZGV4IGluIHBfZGF0YVtdICovCisgICAgdyA9IDA7CisgICAgb2ZmID0gY2VsbF9vZmZzZXQ7CisKKyAgICBpZiAoY2VsbF93b3JkID09IEhXX09UUENfV09SRF9ISUdIKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVhZCBsb3cgMzItYml0IHdvcmQgc28gdGhhdCB3ZSBwcm9ncmFtIHRoZSBzYW1lIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBhZGRyID0gaHdfb3RwY19jZWxsX3RvX21lbShjZWxsX29mZnNldCk7CisKKyAgICAgICAgaHdfb3RwY19tYW51YWxfcmVhZF9vbih1c2VfcnIpOworICAgICAgICAvKiBsaXR0bGUtZW5kaWFuICovCisgICAgICAgIHZhbCA9IGFkZHJbMF07CisgICAgICAgIGh3X290cGNfbWFudWFsX3JlYWRfb2ZmKCk7CisKKyAgICAgICAgaWYgKCFod19vdHBjX21hbnVhbF93b3JkX3Byb2cob2ZmKyssIHZhbCwgcF9kYXRhW3crK10sIHVzZV9ycikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG5jZWxscyA9IChudW1fb2Zfd29yZHMgLSAxKSA+PiAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuY2VsbHMgPSBudW1fb2Zfd29yZHMgPj4gMTsKKyAgICB9CisKKyAgICBmb3IgKGMgPSAwOyBjIDwgbmNlbGxzOyBjKyssIG9mZisrLCB3ICs9IDIpCisgICAgeworICAgICAgICBpZiAoIWh3X290cGNfbWFudWFsX3dvcmRfcHJvZyhvZmYsIHBfZGF0YVt3XSwgcF9kYXRhW3cgKyAxXSwgdXNlX3JyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHcgPCBudW1fb2Zfd29yZHMpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiByZWFkIGhpZ2ggMzItYml0IHdvcmQgc28gdGhhdCB3ZSBwcm9ncmFtIHRoZSBzYW1lIHZhbHVlCisgICAgICAgICAqLworICAgICAgICBhZGRyID0gaHdfb3RwY19jZWxsX3RvX21lbShvZmYpOworCisgICAgICAgIGh3X290cGNfbWFudWFsX3JlYWRfb24odXNlX3JyKTsKKyAgICAgICAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICB2YWwgPSBhZGRyWzFdOworICAgICAgICBod19vdHBjX21hbnVhbF9yZWFkX29mZigpOworCisgICAgICAgIGlmICghaHdfb3RwY19tYW51YWxfd29yZF9wcm9nKG9mZiwgcF9kYXRhW3crK10sIHZhbCwgdXNlX3JyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX1dBUk5JTkcodyA9PSBudW1fb2Zfd29yZHMpOworCisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBod19vdHBjX3dyaXRlX3JyKHVpbnQzMl90IGNlbGxfYWRkciwgdWludDMyX3QgcHdvcmRfbCwgdWludDMyX3QgcHdvcmRfaCkKK3sKKyAgICB1aW50MzJfdCByZXBhaXJfY250OworICAgIGJvb2wgcmV0ID0gZmFsc2U7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgdXNlZCBSZXBhaXIgUmVjb3JkcworICAgIHJlcGFpcl9jbnQgPSBod19vdHBjX251bV9vZl9ycigpOworCisgICAgLy8gQWJvcnQgaWYgYWxsIHJlcGFpciByZWNvcmRzIGFyZSBiZWluZyB1c2VkCisgICAgaWYgKHJlcGFpcl9jbnQgPCBNQVhfUlJfQVZBSUwpCisgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgYWNjZXNzIHdpbGwgYmUgcGVyZm9ybWVkIGluIHRoZSBzcGFyZSByb3dzCisgICAgICAgICAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIFVTRV9TUF9ST1dTLCAxKTsKKworICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIHNwYXJlIGFyZWEKKyAgICAgICAgICAgIGlmICghaHdfb3RwY19tYW51YWxfd29yZF9wcm9nKDB4NEYgLSByZXBhaXJfY250IC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3b3JkX2wsIHB3b3JkX2gsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGhlYWRlciBvZiB0aGUgcmVwYWlyIHJlY29yZCB0byB0aGUgc3BhcmUgYXJlYQorICAgICAgICAgICAgaWYgKCFod19vdHBjX21hbnVhbF93b3JkX3Byb2coMHg0RiAtIHJlcGFpcl9jbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHwgKGNlbGxfYWRkciA8PCAxKSwgMHgwMDAwMDAwMCwgZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgwKTsKKworICAgICAgICAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCBtZW1vcnkgYXJyYXkKKyAgICAgICAgSFdfT1RQQ19SRUdfU0VURihNT0RFLCBVU0VfU1BfUk9XUywgMCk7CisKKyAgICAgICAgaWYgKHJldCkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFJlcXVlc3QgdGhlIHJlbG9hZGluZyBvZiB0aGUgcmVwYWlyIHJlY29yZHMgYXQgdGhlIG5leHQKKyAgICAgICAgICAgICAqIGVuYWJsaW5nIG9mIHRoZSBPVFAgY2VsbAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIFJMRF9SUl9SRVEsIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworCit2b2lkIGh3X290cGNfbWFudWFsX3JlYWRfb24oYm9vbCBzcGFyZV9yb3dzKQoreworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICAvKgorICAgICAqIFBsYWNlIHRoZSBPVFBDIGluIG1hbnVhbCByZWFkIG1vZGUKKyAgICAgKi8KKyAgICBpZiAoc3BhcmVfcm93cykKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPQorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX01SRUFEKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBVU0VfU1BfUk9XUywgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPSBIV19PVFBDX01PREVfTVJFQUQ7CisgICAgfQorfQorCisKK3ZvaWQgaHdfb3RwY19tYW51YWxfcmVhZF9vZmYodm9pZCkKK3sKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX01SRUFEKTsKKworICAgIC8qCisgICAgICogUGxhY2UgdGhlIE9UUEMgaW4gU1RCWSBtb2RlCisgICAgICovCisgICAgT1RQQy0+T1RQQ19NT0RFX1JFRyA9IEhXX09UUENfTU9ERV9TVEJZOworfQorCisKK2Jvb2wgaHdfb3RwY19kbWFfcHJvZyhjb25zdCB1aW50MzJfdCAqcF9kYXRhLCB1aW50MzJfdCBjZWxsX29mZnNldCwgSFdfT1RQQ19XT1JEIGNlbGxfd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fb2Zfd29yZHMsIGJvb2wgc3BhcmVfcm93cykKK3sKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgQVNTRVJUX0NFTExfT0ZGU0VUX1ZBTElEKGNlbGxfb2Zmc2V0KTsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHRoYXQgdGhlIHNpemUgaXMgdmFsaWQKKyAgICAgKi8KKyAgICBBU1NFUlRfV0FSTklORyhudW1fb2Zfd29yZHMpOworICAgIEFTU0VSVF9XQVJOSU5HKG51bV9vZl93b3JkcyA8IDE2Mzg0KTsKKworICAgIC8qCisgICAgICogU2V0IHVwIERNQQorICAgICAqLworICAgIHVuc2lnbmVkIGludCByZW1hcF90eXBlID0gUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX0NUUkxfUkVHLCBSRU1BUF9BRFIwKTsKKworICAgIGlmIChJU19TWVNSQU1fQUREUkVTUyhwX2RhdGEpIHx8CisgICAgICAgIChJU19SRU1BUFBFRF9BRERSRVNTKHBfZGF0YSkgJiYgKHJlbWFwX3R5cGUgPT0gMHgzKSkpCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX0FIQkFEUl9SRUcgPSBibGFja19vcmNhX3BoeV9hZGRyKCh1aW50MzJfdClwX2RhdGEpOworI2lmIGRnX2NvbmZpZ0VYRUNfTU9ERSAhPSBNT0RFX0lTX0NBQ0hFRAorICAgIH0KKyAgICBlbHNlIGlmIChJU19DQUNIRVJBTV9BRERSRVNTKHBfZGF0YSkpCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX0FIQkFEUl9SRUcgPSBibGFja19vcmNhX3BoeV9hZGRyKCh1aW50MzJfdClwX2RhdGEpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIERlc3RpbmF0aW9uIGFkZHJlc3MgY2FuIG9ubHkgcmVzaWRlIGluIFJBTSBvciBDYWNoZSBSQU0sIGJ1dCBpbiBjYXNlIG9mIHJlbWFwcGVkCisgICAgICAgICAqIGFkZHJlc3MsIFJFTUFQX0FEUjAgY2Fubm90IGJlIDB4NiAoQ2FjaGUgRGF0YSBSQU0pCisgICAgICAgICAqLworICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9CisKKyAgICBPVFBDLT5PVFBDX0NFTEFEUl9SRUcgPSAoY2VsbF9vZmZzZXQgPDwgMSkgfCAoY2VsbF93b3JkID09IEhXX09UUENfV09SRF9ISUdIKTsKKyAgICBPVFBDLT5PVFBDX05XT1JEU19SRUcgPSBudW1fb2Zfd29yZHMgLSAxOworCisgICAgLyoKKyAgICAgKiBTdGFydCBETUEgcHJvZ3JhbW1pbmcKKyAgICAgKi8KKyAgICBpZiAoc3BhcmVfcm93cykKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPQorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX0FQUk9HKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBVU0VfRE1BLCAxKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBVU0VfU1BfUk9XUywgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPQorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX0FQUk9HKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBVU0VfRE1BLCAxKTsKKyAgICB9CisKKyAgICB3YWl0X2Zvcl9hdXRvX2RvbmUoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgcmVzdWx0CisgICAgICovCisgICAgaWYgKE9UUEMtPk9UUENfU1RBVF9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKFNUQVQsIFBFUlJfVU5DKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIGh3X290cGNfZG1hX3JlYWQodWludDMyX3QgKnBfZGF0YSwgdWludDMyX3QgY2VsbF9vZmZzZXQsIEhXX09UUENfV09SRCBjZWxsX3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQX0NMS19FTkFCTEVEOworCisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIEFTU0VSVF9DRUxMX09GRlNFVF9WQUxJRChjZWxsX29mZnNldCk7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBzaXplIGlzIHZhbGlkCisgICAgICovCisgICAgQVNTRVJUX1dBUk5JTkcobnVtX29mX3dvcmRzKTsKKyAgICBBU1NFUlRfV0FSTklORyhudW1fb2Zfd29yZHMgPCAxNjM4NCk7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBETUEKKyAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgcmVtYXBfdHlwZSA9IFJFR19HRVRGKENSR19UT1AsIFNZU19DVFJMX1JFRywgUkVNQVBfQURSMCk7CisKKyAgICBpZiAoSVNfU1lTUkFNX0FERFJFU1MocF9kYXRhKSB8fAorICAgICAgICAoSVNfUkVNQVBQRURfQUREUkVTUyhwX2RhdGEpICYmIChyZW1hcF90eXBlID09IDB4MykpKQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19BSEJBRFJfUkVHID0gYmxhY2tfb3JjYV9waHlfYWRkcigodWludDMyX3QpcF9kYXRhKTsKKyNpZiBkZ19jb25maWdFWEVDX01PREUgIT0gTU9ERV9JU19DQUNIRUQKKyAgICB9CisgICAgZWxzZSBpZiAoSVNfQ0FDSEVSQU1fQUREUkVTUyhwX2RhdGEpKQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19BSEJBRFJfUkVHID0gYmxhY2tfb3JjYV9waHlfYWRkcigodWludDMyX3QpcF9kYXRhKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBEZXN0aW5hdGlvbiBhZGRyZXNzIGNhbiBvbmx5IHJlc2lkZSBpbiBSQU0gb3IgQ2FjaGUgUkFNLCBidXQgaW4gY2FzZSBvZiByZW1hcHBlZAorICAgICAgICAgKiBhZGRyZXNzLCBSRU1BUF9BRFIwIGNhbm5vdCBiZSAweDYgKENhY2hlIERhdGEgUkFNKQorICAgICAgICAgKi8KKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorCisgICAgT1RQQy0+T1RQQ19DRUxBRFJfUkVHID0gKGNlbGxfb2Zmc2V0IDw8IDEpIHwgKGNlbGxfd29yZCA9PSBIV19PVFBDX1dPUkRfSElHSCk7CisgICAgT1RQQy0+T1RQQ19OV09SRFNfUkVHID0gbnVtX29mX3dvcmRzIC0gMTsKKworICAgIC8qCisgICAgICogU3RhcnQgRE1BIHByb2dyYW1taW5nCisgICAgICovCisgICAgaWYgKHNwYXJlX3Jvd3MpCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0KKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9BUkVBRCkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX0RNQSwgMSkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX1NQX1JPV1MsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBPVFBDLT5PVFBDX01PREVfUkVHID0KKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9BUkVBRCkgfAorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgVVNFX0RNQSwgMSk7CisgICAgfQorCisgICAgd2FpdF9mb3JfYXV0b19kb25lKCk7Cit9CisKKworYm9vbCBod19vdHBjX2ZpZm9fcHJvZyhjb25zdCB1aW50MzJfdCAqcF9kYXRhLCB1aW50MzJfdCBjZWxsX29mZnNldCwgSFdfT1RQQ19XT1JEIGNlbGxfd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX29mX3dvcmRzLCBib29sIHNwYXJlX3Jvd3MpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgQVNTRVJUX0NFTExfT0ZGU0VUX1ZBTElEKGNlbGxfb2Zmc2V0KTsKKworICAgIEFTU0VSVF9XQVJOSU5HX05PTlpFUk9fUkFOR0UobnVtX29mX3dvcmRzLCAxNjM4NCk7CisKKyAgICAvKgorICAgICAqIFNldCB1cCBGSUZPCisgICAgICovCisgICAgT1RQQy0+T1RQQ19DRUxBRFJfUkVHID0gKGNlbGxfb2Zmc2V0IDw8IDEpIHwgKGNlbGxfd29yZCA9PSBIV19PVFBDX1dPUkRfSElHSCk7CisgICAgT1RQQy0+T1RQQ19OV09SRFNfUkVHID0gbnVtX29mX3dvcmRzIC0gMTsKKworICAgIC8qCisgICAgICogUGVyZm9ybSBwcm9ncmFtbWluZyB2aWEgRklGTworICAgICAqLworICAgIGlmIChzcGFyZV9yb3dzKQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19NT0RFX1JFRyA9CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBNT0RFLCBIV19PVFBDX01PREVfQVBST0cpIHwKKyAgICAgICAgICAgIEhXX09UUENfRklFTERfVkFMKE1PREUsIFVTRV9TUF9ST1dTLCAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgT1RQQy0+T1RQQ19NT0RFX1JFRyA9IEhXX09UUENfRklFTERfVkFMKE1PREUsIE1PREUsIEhXX09UUENfTU9ERV9BUFJPRyk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl93b3JkczsgaSsrKQorICAgIHsKKyAgICAgICAgd2hpbGUgKEhXX09UUENfUkVHX0dFVEYoU1RBVCwgRldPUkRTKSA9PSA4KQorICAgICAgICAgICAgOworCisgICAgICAgIE9UUEMtPk9UUENfRkZQUlRfUkVHID0gcF9kYXRhW2ldOyAvLyBXcml0ZSBGSUZPIGRhdGEKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhaXQgZm9yIGNvbXBsZXRpb24KKyAgICAgKi8KKyAgICB3YWl0X2Zvcl9hdXRvX2RvbmUoKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgcmVzdWx0CisgICAgICovCisgICAgaWYgKE9UUEMtPk9UUENfU1RBVF9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKFNUQVQsIFBFUlJfVU5DKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIGh3X290cGNfZmlmb19yZWFkKHVpbnQzMl90ICpwX2RhdGEsIHVpbnQzMl90IGNlbGxfb2Zmc2V0LCBIV19PVFBDX1dPUkQgY2VsbF93b3JkLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fb2Zfd29yZHMsIGJvb2wgc3BhcmVfcm93cykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUF9DTEtfRU5BQkxFRDsKKworICAgIEFTU0VSVF9XQVJOSU5HX09UUENfTU9ERShIV19PVFBDX01PREVfU1RCWSk7CisKKyAgICBBU1NFUlRfQ0VMTF9PRkZTRVRfVkFMSUQoY2VsbF9vZmZzZXQpOworCisgICAgQVNTRVJUX1dBUk5JTkdfTk9OWkVST19SQU5HRShudW1fb2Zfd29yZHMsIDE2Mzg0KTsKKworICAgIGlmIChPVFBDLT5PVFBDX1NUQVRfUkVHICYgSFdfT1RQQ19SRUdfRklFTERfTUFTSyhTVEFULCBSRVJST1IpKQorICAgIHsKKyAgICAgICAgSFdfT1RQQ19SRUdfU0VURihTVEFULCBSRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSk7IC8vVGhpcyBiaXQgbmVlZCB0byBiZSBjbGVhcmVkIG1hbnVhbGx5IChjYW4gb25seSBoYXBwZW4gaWYgYSBwcmV2aW91cyByZWFkIGhhcyBub3QgY2hlY2tlZC9jbGVhcmVkIGl0KQorICAgIH0KKworICAgIC8qCisgICAgICogU2V0IHVwIEZJRk8KKyAgICAgKi8KKyAgICBPVFBDLT5PVFBDX0NFTEFEUl9SRUcgPSAoY2VsbF9vZmZzZXQgPDwgMSkgfCAoY2VsbF93b3JkID09IEhXX09UUENfV09SRF9ISUdIKTsKKyAgICBPVFBDLT5PVFBDX05XT1JEU19SRUcgPSBudW1fb2Zfd29yZHMgLSAxOworCisgICAgLyoKKyAgICAgKiBQZXJmb3JtIHJlYWRpbmcgdmlhIEZJRk8KKyAgICAgKi8KKyAgICBpZiAoc3BhcmVfcm93cykKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPQorICAgICAgICAgICAgSFdfT1RQQ19GSUVMRF9WQUwoTU9ERSwgTU9ERSwgSFdfT1RQQ19NT0RFX0FSRUFEKSB8CisgICAgICAgICAgICBIV19PVFBDX0ZJRUxEX1ZBTChNT0RFLCBVU0VfU1BfUk9XUywgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE9UUEMtPk9UUENfTU9ERV9SRUcgPSBIV19PVFBDX01PREVfQVJFQUQ7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl93b3JkczsgaSsrKQorICAgIHsKKyAgICAgICAgd2hpbGUgKEhXX09UUENfUkVHX0dFVEYoU1RBVCwgRldPUkRTKSA9PSAwKQorICAgICAgICAgICAgOworCisgICAgICAgIHBfZGF0YVtpXSA9IE9UUEMtPk9UUENfRkZQUlRfUkVHOworICAgIH0KKworICAgIC8qCisgICAgICogV2FpdCBmb3IgY29tcGxldGlvbgorICAgICAqLworICAgIHdhaXRfZm9yX2F1dG9fZG9uZSgpOworCisgICAgLyoKKyAgICAgKiBDaGVjayByZXN1bHQKKyAgICAgKi8KKyAgICBpZiAoT1RQQy0+T1RQQ19TVEFUX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soU1RBVCwgUkVSUk9SKSkKKyAgICB7CisgICAgICAgIEhXX09UUENfUkVHX1NFVEYoU1RBVCwgUkVSUk9SLCAxKTsgLy9UaGlzIGJpdCBuZWVkIHRvIGJlIGNsZWFyZWQgbWFudWFsbHkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgaHdfb3RwY19wcmVwYXJlKHVpbnQzMl90IG51bV9vZl9ieXRlcykKK3sKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgQVNTRVJUX1dBUk5JTkdfTk9OWkVST19SQU5HRShudW1fb2ZfYnl0ZXMsIDY1NTM2KTsKKworICAgIC8qCisgICAgICogU2V0IHVwIGltYWdlIHNpemUKKyAgICAgKi8KKyAgICBPVFBDLT5PVFBDX05XT1JEU19SRUcgPSAoKG51bV9vZl9ieXRlcyArIDMpID4+IDIpIC0gMTsKKworICAgIC8qCisgICAgICogRW5hYmxlIE9UUF9DT1BZCisgICAgICovCisgICAgQ1JHX1RPUC0+U1lTX0NUUkxfUkVHIHw9IDEgPDwgUkVHX1BPUyhDUkdfVE9QLCBTWVNfQ1RSTF9SRUcsIE9UUF9DT1BZKTsKK30KKworCit2b2lkIGh3X290cGNfY2FuY2VsX3ByZXBhcmUodm9pZCkKK3sKKyAgICBBU1NFUlRfV0FSTklOR19PVFBfQ0xLX0VOQUJMRUQ7CisKKyAgICBBU1NFUlRfV0FSTklOR19PVFBDX01PREUoSFdfT1RQQ19NT0RFX1NUQlkpOworCisgICAgLyoKKyAgICAgKiBEaXNhYmxlIE9UUF9DT1BZCisgICAgICovCisgICAgQ1JHX1RPUC0+U1lTX0NUUkxfUkVHICY9IH5SRUdfTVNLKENSR19UT1AsIFNZU19DVFJMX1JFRywgT1RQX0NPUFkpOworfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRFU1QgRlVOQ1RJT05BTElUWQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKy8qKgorICogXGJyaWVmIEV4ZWN1dGlvbiBvZiB0aGUgdGVzdC4KKyAqCisgKiBccmV0dXJuIFRoZSB0ZXN0IHJlc3VsdC4KKyAqICAgICAgICAgPHVsPgorICogICAgICAgICAgICAgPGxpPiAwLCBpZiB0aGUgdGVzdCBzdWNjZWVkZWQKKyAqICAgICAgICAgICAgIDxsaT4gMSwgaWYgdGhlIHRlc3QgMSBmYWlsZWQKKyAqICAgICAgICAgPC91bD4KKyAqCisgKi8KK3N0YXRpYyBpbnQgaHdfb3RwY19jb3JlX3Rlc3QoaW50IG1vZGUpCit7CisgICAgQVNTRVJUX1dBUk5JTkdfT1RQQ19NT0RFKEhXX09UUENfTU9ERV9TVEJZKTsKKworICAgIC8qCisgICAgICogUHV0IE9UUEMgaW4gdGhlIHByb3BlciB0ZXN0IG1vZGUKKyAgICAgKi8KKyAgICBIV19PVFBDX1JFR19TRVRGKE1PREUsIE1PREUsIG1vZGUpOworCisgICAgLyoKKyAgICAgKiBXYWl0IGVuZCBvZiB0ZXN0CisgICAgICovCisgICAgd2hpbGUgKCEoT1RQQy0+T1RQQ19TVEFUX1JFRyAmIEhXX09UUENfUkVHX0ZJRUxEX01BU0soU1RBVCwgVFJEWSkpKQorICAgICAgICA7CisKKworICAgIC8qCisgICAgICogQ2hlY2sgcmVzdWx0CisgICAgICovCisgICAgaWYgKE9UUEMtPk9UUENfU1RBVF9SRUcgJiBIV19PVFBDX1JFR19GSUVMRF9NQVNLKFNUQVQsIFRFUlJPUikpCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQgaHdfb3RwY19ibGFuayh2b2lkKQoreworICAgIHJldHVybiBod19vdHBjX2NvcmVfdGVzdChIV19PVFBDX01PREVfVEJMQU5LKTsKK30KKworCitpbnQgaHdfb3RwY190ZGVjKHZvaWQpCit7CisgICAgcmV0dXJuIGh3X290cGNfY29yZV90ZXN0KEhXX09UUENfTU9ERV9UREVDKTsKK30KKworCitpbnQgaHdfb3RwY190d3Iodm9pZCkKK3sKKyAgICByZXR1cm4gaHdfb3RwY19jb3JlX3Rlc3QoSFdfT1RQQ19NT0RFX1RXUik7Cit9CisKKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19PVFBDICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3FzcGkuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19xc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZjI5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19xc3BpLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFFTUEkKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3FzcGkuYworICoKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUVNQSSBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWYgZGdfY29uZmlnVVNFX0hXX1FTUEkKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImh3X3FzcGkuaCIKKworX19SRVRBSU5FRF9SVyB1aW50OF90IGR1bW15X251bVtdID0geyAwLCAxLCAyLCAwLCAzIH07CisKKyNpZiAoZGdfY29uZmlnRkxBU0hfUE9XRVJfRE9XTiA9PSAxKQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigidGV4dF9yZXRhaW5lZCIpKSkKKyNlbmRpZgordm9pZCBod19xc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICBjYXNlIEhXX1FTUElfQlVTX01PREVfU0lOR0xFOgorICAgICAgICBRU1BJQy0+UVNQSUNfQ1RSTEJVU19SRUcgPSBSRUdfTVNLKFFTUElDLCBRU1BJQ19DVFJMQlVTX1JFRywgUVNQSUNfU0VUX1NJTkdMRSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIV19RU1BJX0JVU19NT0RFX0RVQUw6CisgICAgICAgIFFTUElDLT5RU1BJQ19DVFJMQlVTX1JFRyA9IFJFR19NU0soUVNQSUMsIFFTUElDX0NUUkxCVVNfUkVHLCBRU1BJQ19TRVRfRFVBTCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIV19RU1BJX0JVU19NT0RFX1FVQUQ6CisgICAgICAgIFFTUElDLT5RU1BJQ19DVFJMQlVTX1JFRyA9IFJFR19NU0soUVNQSUMsIFFTUElDX0NUUkxCVVNfUkVHLCBRU1BJQ19TRVRfUVVBRCk7CisgICAgICAgIGh3X3FzcGlfc2V0X2lvMl9vdXRwdXQoZmFsc2UpOworICAgICAgICBod19xc3BpX3NldF9pbzNfb3V0cHV0KGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJ0ZXh0X3JldGFpbmVkIikpKSB2b2lkIGh3X3FzcGlfc2V0X2F1dG9tb2RlKGJvb2wgYXV0b21vZGUpCit7CisgICAgaWYgKGF1dG9tb2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDMyX3QgYnVyc3RfY21kX2EgPSBRU1BJQy0+UVNQSUNfQlVSU1RDTURBX1JFRzsKKyAgICAgICAgY29uc3QgdWludDMyX3QgYnVyc3RfY21kX2IgPSBRU1BJQy0+UVNQSUNfQlVSU1RDTURCX1JFRzsKKyAgICAgICAgY29uc3QgdWludDMyX3Qgc3RhdHVzX2NtZCA9IFFTUElDLT5RU1BJQ19TVEFUVVNDTURfUkVHOworICAgICAgICBjb25zdCB1aW50MzJfdCBlcmFzZV9jbWRfYiA9IFFTUElDLT5RU1BJQ19FUkFTRUNNREJfUkVHOworICAgICAgICBjb25zdCB1aW50MzJfdCBidXJzdGJyayA9IFFTUElDLT5RU1BJQ19CVVJTVEJSS19SRUc7CisKKyAgICAgICAgaWYgKEdFVEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgYnVyc3RfY21kX2EsIFFTUElDX0lOU1RfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREFfUkVHLCBidXJzdF9jbWRfYSwgUVNQSUNfQURSX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURBX1JFRywgYnVyc3RfY21kX2EsIFFTUElDX0RNWV9UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQV9SRUcsIGJ1cnN0X2NtZF9hLCBRU1BJQ19FWFRfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBidXJzdF9jbWRfYiwgUVNQSUNfREFUX1JYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgYnVyc3RfY21kX2IsIFFTUElDX0RBVF9SWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX1NUQVRVU0NNRF9SRUcsIHN0YXR1c19jbWQsIFFTUElDX1JTVEFUX1JYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfU1RBVFVTQ01EX1JFRywgc3RhdHVzX2NtZCwgUVNQSUNfUlNUQVRfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBlcmFzZV9jbWRfYiwgUVNQSUNfRVJTX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgZXJhc2VfY21kX2IsIFFTUElDX1dFTl9UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0VSQVNFQ01EQl9SRUcsIGVyYXNlX2NtZF9iLCBRU1BJQ19TVVNfVFhfTUQpID09IEhXX1FTUElfQlVTX01PREVfUVVBRCB8fAorICAgICAgICAgICAgR0VUQklUUzMyKFFTUElDLCBRU1BJQ19FUkFTRUNNREJfUkVHLCBlcmFzZV9jbWRfYiwgUVNQSUNfUkVTX1RYX01EKSA9PSBIV19RU1BJX0JVU19NT0RFX1FVQUQgfHwKKyAgICAgICAgICAgIEdFVEJJVFMzMihRU1BJQywgUVNQSUNfRVJBU0VDTURCX1JFRywgZXJhc2VfY21kX2IsIFFTUElDX0VBRF9UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEIHx8CisgICAgICAgICAgICBHRVRCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQlJLX1JFRywgYnVyc3RicmssIFFTUElDX0JSS19UWF9NRCkgPT0gSFdfUVNQSV9CVVNfTU9ERV9RVUFEKQorICAgICAgICB7CisgICAgICAgICAgICBod19xc3BpX3NldF9pbzJfb3V0cHV0KGZhbHNlKTsKKyAgICAgICAgICAgIGh3X3FzcGlfc2V0X2lvM19vdXRwdXQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgSFdfUVNQSUNfUkVHX1NFVEYoQ1RSTE1PREUsIEFVVE9fTUQsIGF1dG9tb2RlKTsKK30KKwordm9pZCBod19xc3BpX3NldF93cmFwcGluZ19idXJzdF9pbnN0cnVjdGlvbih1aW50OF90IGluc3QsIEhXX1FTUElfV1JBUF9MRU4gbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19RU1BJX1dSQVBfU0laRSBzaXplKQoreworICAgIEhXX1FTUElDX1JFR19TRVRGKEJVUlNUQ01EQSwgSU5TVF9XQiwgaW5zdCk7CisgICAgUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgPQorICAgICAgICAoUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgJgorICAgICAgICAgfihSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19XUkFQX1NJWkUpIHwKKyAgICAgICAgICAgUkVHX01TSyhRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfV1JBUF9MRU4pKSkgfAorICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX1dSQVBfU0laRSwgc2l6ZSkgfAorICAgICAgICBCSVRTMzIoUVNQSUMsIFFTUElDX0JVUlNUQ01EQl9SRUcsIFFTUElDX1dSQVBfTEVOLCBsZW4pIHwKKyAgICAgICAgQklUUzMyKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19XUkFQX01ELCAxKTsKK30KKwordm9pZCBod19xc3BpX3NldF9kdW1teV9ieXRlc19jb3VudCh1aW50OF90IGNvdW50KQoreworICAgIGlmIChjb3VudCA9PSAzKQorICAgIHsKKyAgICAgICAgSFdfUVNQSUNfUkVHX1NFVEYoQlVSU1RDTURCLCBETVlfRk9SQ0UsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBRU1BJQy0+UVNQSUNfQlVSU1RDTURCX1JFRyA9CisgICAgICAgICAgICAoUVNQSUMtPlFTUElDX0JVUlNUQ01EQl9SRUcgJgorICAgICAgICAgICAgIH4oUkVHX01TSyhRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRE1ZX0ZPUkNFKSB8CisgICAgICAgICAgICAgICBSRUdfTVNLKFFTUElDLCBRU1BJQ19CVVJTVENNREJfUkVHLCBRU1BJQ19ETVlfTlVNKSkpIHwKKyAgICAgICAgICAgIEJJVFMzMihRU1BJQywgUVNQSUNfQlVSU1RDTURCX1JFRywgUVNQSUNfRE1ZX05VTSwKKyAgICAgICAgICAgICAgICAgICBkdW1teV9udW1bY291bnRdKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfcXNwaV9lcmFzZV9ibG9jayh1aW50MzJfdCBhZGRyKQoreworICAgIGlmICghaHdfcXNwaV9nZXRfYXV0b21vZGUoKSkKKyAgICB7CisgICAgICAgIGh3X3FzcGlfc2V0X2F1dG9tb2RlKHRydWUpOworICAgIH0KKworICAgIC8vIFdhaXQgZm9yIHByZXZpb3VzIGVyYXNlIHRvIGVuZAorICAgIHdoaWxlIChod19xc3BpX2dldF9lcmFzZV9zdGF0dXMoKSAhPSAwKQorICAgIHsKKyAgICB9CisKKyAgICBpZiAoaHdfcXNwaV9nZXRfYWRkcmVzc19zaXplKCkgPT0gSFdfUVNQSV9BRERSX1NJWkVfMzIpCisgICAgeworICAgICAgICBhZGRyID4+PSAxMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYWRkciA+Pj0gNDsKKyAgICB9CisKKyAgICAvLyBTZXR1cCBlcmFzZSBibG9jayBwYWdlCisgICAgSFdfUVNQSUNfUkVHX1NFVEYoRVJBU0VDVFJMLCBFUlNfQUREUiwgYWRkcik7CisgICAgLy8gRmlyZSBlcmFzZQorICAgIEhXX1FTUElDX1JFR19TRVRGKEVSQVNFQ1RSTCwgRVJBU0VfRU4sIDEpOworfQorCit2b2lkIGh3X3FzcGlfc2V0X3BhZHMoSFdfUVNQSV9TTEVXX1JBVEUgcmF0ZSwgSFdfUVNQSV9EUklWRV9DVVJSRU5UIGN1cnJlbnQpCit7CisgICAgUVNQSUMtPlFTUElDX0dQX1JFRyA9CisgICAgICAgIEJJVFMxNihRU1BJQywgUVNQSUNfR1BfUkVHLCBRU1BJQ19QQURTX1NMRVcsIHJhdGUpIHwKKyAgICAgICAgQklUUzE2KFFTUElDLCBRU1BJQ19HUF9SRUcsIFFTUElDX1BBRFNfRFJWLCBjdXJyZW50KTsKK30KKwordm9pZCBod19xc3BpX2luaXQoY29uc3QgcXNwaV9jb25maWcgKmNmZykKK3sKKyAgICBod19xc3BpX2VuYWJsZV9jbG9jaygpOworICAgIGh3X3FzcGlfc2V0X2F1dG9tb2RlKGZhbHNlKTsKKyAgICBod19xc3BpX3NldF9idXNfbW9kZShIV19RU1BJX0JVU19NT0RFX1NJTkdMRSk7CisgICAgaHdfcXNwaV9zZXRfaW8yX291dHB1dCh0cnVlKTsKKyAgICBod19xc3BpX3NldF9pbzIoMSk7CisgICAgaHdfcXNwaV9zZXRfaW8zX291dHB1dCh0cnVlKTsKKyAgICBod19xc3BpX3NldF9pbzMoMSk7CisKKyAgICBpZiAoY2ZnKQorICAgIHsKKyAgICAgICAgaHdfcXNwaV9zZXRfYWRkcmVzc19zaXplKGNmZy0+YWRkcmVzc19zaXplKTsKKyAgICAgICAgaHdfcXNwaV9zZXRfY2xvY2tfbW9kZShjZmctPmlkbGVfY2xvY2spOworICAgICAgICBod19xc3BpX3NldF9yZWFkX3NhbXBsaW5nX2VkZ2UoY2ZnLT5zYW1wbGluZ19lZGdlKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfUVNQSSAqLworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19yZi5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3JmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYzZjNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od19yZi5jCkBAIC0wLDAgKzEsMTYwMCBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgUkYKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZQorICoKKyAqIEBicmllZiBSYWRpbyBtb2R1bGUgKFJGKSBMb3cgTGV2ZWwgRHJpdmVyIEFQSSBkZWZpbml0aW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19SRgorCisKKyNpbmNsdWRlICJod19yZi5oIgorI2luY2x1ZGUgInNka19kZWZzLmgiCisjaW5jbHVkZSAiaHdfY3BtLmgiCisjaW5jbHVkZSAiaHdfZ3Bpby5oIgorCisjaWYgKGRnX2NvbmZpZ1NZU1RFTVZJRVcpCisjICBpbmNsdWRlICJTRUdHRVJfU1lTVklFV19GcmVlUlRPUy5oIgorI2Vsc2UKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCkKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnVVNFX0hXX0NPRVggPT0gMQorI2luY2x1ZGUgImh3X2NvZXguaCIKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBLTU9ERV9BTFBIQV9BQ0FEX1BSRUYgMHgwNDEwCisjZGVmaW5lIEtNT0RFX0FMUEhBX0FBX1BSRUYgMHgwNDE2CisKKyNkZWZpbmUgREYxX0RBQ19DSEVDS19WQUxVRSAzMgorI2RlZmluZSBERjFfREdBSU5fVEhSMCAxNgorI2RlZmluZSBERjFfREdBSU5fVEhSMSAyNAorI2RlZmluZSBERjFfREdBSU5fVEhSMiAzMgorI2VuZGlmCisKKy8qIFVzZXIgY2FsbGJhY2tzIChkZWZpbmVkIGFzIHdlYWsgZnVuY3Rpb25zKSBkZWZpbml0aW9ucyAqLworYm9vbCBod19yZl9wcmVvZmZfY2Iodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOwordm9pZCBod19yZl9wb3N0Y29uZl9jYih2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Cit2b2lkIGh3X3JmX3ByZWNhbGliX2NiKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK3ZvaWQgaHdfcmZfcG9zdGNhbGliX2NiKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK3ZvaWQgaHdfcmZfYXBwbHlfdGNzX2NiKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK3VpbnQ2NF90IGh3X3JmX2dldF9zdGFydF9pZmZfdGltZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Citib29sIGh3X3JmX2NoZWNrX2lmZl90aW1lb3V0KHVpbnQ2NF90IHN0YXJ0X3RpbWUpIF9fYXR0cmlidXRlX18oKHdlYWspKTsKKworI2lmIGRnX2NvbmZpZ0ZFTSA9PSBGRU1fU0tZNjYxMTJfMTEKKyNpbmNsdWRlICJod19mZW1fc2t5NjYxMTItMTEuaCIKKyNlbmRpZgorCit0eXBlZGVmIGVudW0gcmZfc3RhdGVzX2UKK3sKKyAgICBSRl9TVF9PRkYgPSAwLAorICAgIFJGX1NUX09OLAorICAgIFJGX1NUX0NPTkZJRywKKyAgICBSRl9TVF9XQUlUX05FWFQxLAorICAgIFJGX1NUX1dBSVRfTkVYVDIKK30gcmZfc3RhdGVzX2U7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCit0eXBlZGVmIGVudW0KK3sKKyAgICBJRkZfTU9ERV9DVFJMX0JMRSA9IDAsCisgICAgSUZGX01PREVfQ1RSTF9GVERGID0gMSwKKyAgICBJRkZfTU9ERV9DVFJMX0NPTUJPID0gMgorfSBpZmZfbW9kZV9jdHJsX2U7CisKK3R5cGVkZWYgZW51bQoreworICAgIElGRl9NT0RFX09WUl9CTEUgPSAxLAorICAgIElGRl9NT0RFX09WUl9GVERGID0gMgorfSBpZmZfbW9kZV9vdnJfZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTUdDX01PREVfQ1RSTF9CTEVfR0FVU1NEQUMgPSAwLAorICAgIE1HQ19NT0RFX0NUUkxfQkxFX1RYREFDID0gMSwKKyAgICBNR0NfTU9ERV9DVFJMX0ZUREYgPSAyCit9IG1nY19tb2RlX2N0cmxfZTsKKworI2VuZGlmCisKKy8qKiBSRiBzdGF0dXMgYml0bWFwLiAqLwordHlwZWRlZiB1aW50OF90IHJmX3JlcXVlc3RfdDsKKworLyoqIEluZGljYXRlcyB3aGV0aGVyIEZUREYgTUFDIGhhcyB0dXJuZWQgUkYgb24uICovCisjZGVmaW5lIFJGX1JFUVVFU1RfRlRERl9PTiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qKiBJbmRpY2F0ZXMgd2hldGhlciBCTEUgTUFDIGhhcyB0dXJuZWQgUkYgb24uICovCisjZGVmaW5lIFJGX1JFUVVFU1RfQkxFX09OICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKworCisKK3N0YXRpYyByZl9yZXF1ZXN0X3QgcmZfcmVxdWVzdCBfX1JFVEFJTkVEOworc3RhdGljIHJmX3N0YXRlc19lIHJmX3N0YXRlIF9fUkVUQUlORUQ7Citod19yZl90eF9wb3dlcl9sdXRzX3QgcmZfdHhfcG93ZXJfbHV0cyBfX1JFVEFJTkVEOworCisvKiBWYXJpYWJsZXMgdXNlZCBmb3IgaG9sZGluZyBwcmV2aW91cyByZWcgdmFsdWVzIGR1cmluZyBnYWluIGNhbGliICovCitzdGF0aWMgdWludDMyX3QgcmZfY250cmxfdGltZXIxNF9yZWdfc2V0X29mZnNldDsKK3N0YXRpYyB1aW50MzJfdCByZl9jbnRybF90aW1lcl83X3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MzJfdCByZl9jYWxfY3RybF9yZWdfdmFsdWU7CitzdGF0aWMgdWludDMyX3QgcmZfbWdhaW5fY3RybF9yZWdfdmFsdWU7CitzdGF0aWMgdWludDMyX3QgcmZfbWdhaW5fY3RybDJfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX3N5bnRoX2N0cmwyX2JsZV9yZWdfdmFsdWU7CitzdGF0aWMgdWludDE2X3QgcmZfc3ludGhfY3RybDJfZnRkZl9yZWdfdmFsdWU7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCitzdGF0aWMgdWludDhfdCBrbW9kYV9jYWwgX19SRVRBSU5FRDsKK19fUkVUQUlORURfUlcgc3RhdGljIHVpbnQzMl90IGdnX2NhbF9tb2RpZmllZCA9IDEyODsKK3N0YXRpYyB1aW50MzJfdCByZl9lbmFibGVfY29uZmlnMTRfYmxlX3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MzJfdCByZl9lbmFibGVfY29uZmlnMTVfYmxlX3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MzJfdCByZl9lbmFibGVfY29uZmlnMTRfZnRkZl9yZWdfdmFsdWU7CitzdGF0aWMgdWludDMyX3QgcmZfZW5hYmxlX2NvbmZpZzE1X2Z0ZGZfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX2JtY3dfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX3Zjb2NhbF9jdHJsX3JlZ192YWx1ZTsKKyNlbHNlCitzdGF0aWMgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzE0X3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnMTVfcmVnX3ZhbHVlOworc3RhdGljIHVpbnQxNl90IHJmX292ZXJydWxlX3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnMjNfYmxlX3JlZ192YWx1ZTsKK3N0YXRpYyB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnMjNfZnRkZl9yZWdfdmFsdWU7CitzdGF0aWMgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzQ1X2JsZV9yZWdfdmFsdWU7CitzdGF0aWMgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzQ1X2Z0ZGZfcmVnX3ZhbHVlOworI2VuZGlmCitib29sIGh3X3JmX3N5c3RlbV9pbml0KHZvaWQpCit7CisgICAgYm9vbCBjYWxpYl9zdWNjZWVkZWQ7CisKKyAgICByZl9zdGF0ZSA9IFJGX1NUX09GRjsKKyAgICByZl9yZXF1ZXN0ID0gMDsKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKworICAgIC8qIEluaXRpYWxseSBzZXQga21vZGFfY2FsIHRvIGl0cyBwcmVmZXJyZWQgc2V0dGluZ3MgdmFsdWUgKi8KKyAgICBpZiAoKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EpCisgICAgICAgIHx8ICgoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gPT0gMSkKKyAgICAgICAgICAgICYmIChDSElQX0lTX0FFKSkpCisgICAgeworICAgICAgICBrbW9kYV9jYWwgPSBLTU9ERV9BTFBIQV9BQ0FEX1BSRUYgJiBSRUdfTVNLKFBMTERJRywgUkZfS01PRF9BTFBIQV9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS01PRF9BTFBIQV9CTEUpOworICAgIH0KKworI2VuZGlmCisKKyNpZiBkZ19jb25maWdDT0VYX0VOQUJMRV9DT05GSUcgPT0gMQorICAgIGh3X2NvZXhfaW5pdCgpOworI2VuZGlmCisgICAgLyogQXBwbHkgdGNzIGFuZCBwcmVmZXJyZWQgc2V0dGluZ3MgKi8KKyAgICBod19yZl9hcHBseV90Y3NfY2IoKTsKKyAgICBod19yZl9zZXRfcmVjb21tZW5kZWRfc2V0dGluZ3MoKTsKKworICAgIC8qIFBlcmZvcm0gY2FsaWJyYXRpb24gKi8KKyAgICBjYWxpYl9zdWNjZWVkZWQgPSBod19yZl9jYWxpYnJhdGlvbigpOworCisjaWZuZGVmIENPTkZJR19VU0VfQkxFCisgICAgLyogRm9yY2UgZGlzYWJsZSB0aGUgYmxlLCBtYWtpbmcgdGhlIGZ0ZGYgdGhlIG9ubHkgcmVxdWVzdGVyICovCisgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgRk9SQ0VfU0xFRVBfUkVHLCBGT1JDRV9CTEVfU0xFRVApOworI2VuZGlmCisjaWZuZGVmIENPTkZJR19VU0VfRlRERgorICAgIC8qIEZvcmNlIGRpc2FibGUgdGhlIGZ0ZGYsIG1ha2luZyB0aGUgYmxlIHRoZSBvbmx5IHJlcXVlc3RlciAqLworICAgIFJFR19TRVRfQklUKENSR19UT1AsIEZPUkNFX1NMRUVQX1JFRywgRk9SQ0VfRlRERl9TTEVFUCk7CisjZW5kaWYKKworICAgIC8qIFN5c3RlbSBpcyByZWFkeSB0byBiZSB1c2VkICovCisgICAgcmV0dXJuIGNhbGliX3N1Y2NlZWRlZDsKK30KKworLyoqCisgKiBcYnJpZWYgUHJlZmVycmVkIHNldHRpbmdzIDY4MCByYWRpbworICoKKyAqLwordm9pZCBod19yZl9zZXRfcmVjb21tZW5kZWRfc2V0dGluZ3Modm9pZCkKK3sKKworICAgIC8vIFByZWZlcnJlZCBTZXR0aW5ncyBGaWxlIGZvciBEQ1RNT04KKyAgICAvLyBEZXZpY2UgICAgICAgICAgICAgOiBEQTE0NjgwQUEKKyAgICAvLyBQYWNrYWdlICAgICAgICAgICAgOiBBbGwgcGFja2FnZXMsIG5vIGRlcGVuZGVuY3kgb24gcGFja2FnZS4KKyAgICAvLyBMYXN0IGNoYW5nZSBkYXRlICAgOiBKdW5lIDE4LCAyMDE1IC0gMTg6MDA6NDgKKyAgICAvLyBMYXN0IGNoYW5nZSBpdGVtICAgOiBSZWdpc3RlcjogUkZfS01PRF9BTFBIQV9SRUcsIEZpZWxkOiBLTU9EX0FMUEhBX0ZUREYsIFZhbHVlOiAweDEwCisgICAgLy8gRmlsZSBkYXRlICAgICAgICAgIDogSnVuZSAxOCwgMjAxNSAtIDE5OjE2OjE2CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgaWYgKCgoZGdfY29uZmlnVVNFX0FVVE9fQ0hJUF9ERVRFQ1RJT04gPT0gMSkgJiYgKENISVBfSVNfQUUpKQorICAgICAgICB8fCAoQkxBQ0tfT1JDQV9UQVJHRVRfSUMgPT0gQkxBQ0tfT1JDQV9JQ19WRVJTSU9OKEEsIEUpKSkKKyAgICB7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfQUZDX0NUUkxfUkVHLCAgICAgICAgICAgICAgICAgICAgMHgwMDMwLCAweDAwRjUpOworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0FHQ19DVFJMMl9SRUcsICAgICAgICAgICAgICAgICAgIDB4MDAzRiwgMHgwMDQ5KTsKKworICAgICAgICAvLyBNUAorICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0FHQ19DVFJMMV9SRUcsICAgICAgICAgICAgICAgICAgIDB4MDA3RiwgMHg5NTBBKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMTBfUkVHLCAgICAgICAweEZGMDAsIDB4MTgyRSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzExX1JFRywgICAgICAgMHhGRjAwLCAweDE4MzApOworICAgICAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8xMl9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQzsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTNfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYzQzsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTVfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgzQzsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTZfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwNzsKKyAgICAgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTdfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDEwOworICAgICAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8xOF9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTg7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzE5X1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxODsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMV9SRUcsICAgICAgICAweEZGMDAsIDB4MUUwMCk7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzIwX1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwODsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMjFfUkVHLCAgICAgICAweDAwRkYsIDB4NDQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8yMl9SRUcsICAgICAgIDB4MDBGRiwgMHg0MCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzIzX1JFRywgICAgICAgMHgwMEZGLCAweDUyKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfMl9SRUcsICAgICAgICAweEZGMDAsIDB4MUIwOCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzNfUkVHLCAgICAgICAgMHhGRjAwLCAweDFBMTApOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl81X1JFRywgICAgICAgIDB4RkYwMCwgMHgxODE4KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfN19SRUcsICAgICAgICAweEZGMDAsIDB4MTgxOCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX0NQX0NUUkxfQkxFX1JFRywgICAgICAgICAgICAgICAgMHgwRjBGLCAweDc1NzUpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9DUF9DVFJMX0ZUREZfUkVHLCAgICAgICAgICAgICAgIDB4MEYwRiwgMHg3NTc1KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHLCAgICAgICAgICAgICAweDAyMDIsIDB4MDFEMCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRENfT0ZGU0VUX0NUUkwzX1JFRywgICAgICAgICAgICAgMHgwMEZGLCAweERDRTQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9ESVZfSVFfVFhfUkVHLCAgICAgICAgICAgICAgICAgIDB4MDBGRiwgMHgwMEExKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzExX0JMRV9SRUcsICAweDAwMUYsIDB4MDA1NCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxMV9GVERGX1JFRywgMHgwMDFGLCAweDAwNTQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMTJfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzEyX0ZUREZfUkVHLCAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxNV9CTEVfUkVHLCAgMHgwM0UwLCAweDAxRTApOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMTVfRlRERl9SRUcsIDB4MDNFMCwgMHgwMUUwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzE5X0JMRV9SRUcsICAweDAwMUYsIDB4MDA1NCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcxOV9GVERGX1JFRywgMHgwMDFGLCAweDAwNTQpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjBfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzIwX0ZUREZfUkVHLCAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyMV9CTEVfUkVHLCAgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjFfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzIyX0JMRV9SRUcsICAweDAwMUYsIDB4MDA3MSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyMl9GVERGX1JFRywgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjRfRlRERl9SRUcsIDB4MDNFMCwgMHgwMUEwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzI1X0ZUREZfUkVHLCAweDAzRTAsIDB4MDA2MCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyN19CTEVfUkVHLCAgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjdfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzI4X0JMRV9SRUcsICAweDAwMUYsIDB4MDBCMik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyOF9GVERGX1JFRywgMHgwMDFGLCAweDAwQjIpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMjlfQkxFX1JFRywgIDB4MDAxRiwgMHgwMEIyKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzI5X0ZUREZfUkVHLCAweDAwMUYsIDB4MDBCMik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUczM19CTEVfUkVHLCAgMHgwMDFGLCAweDAwNzEpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHMzNfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDcxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzM0X0JMRV9SRUcsICAweDAwMUYsIDB4MDBGMyk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUczNF9GVERGX1JFRywgMHgwMDFGLCAweDAwRjMpOworICAgICAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDJfQkxFX1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTA7CisgICAgICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Ml9GVERGX1JFRyA9ICAgICAgICAgICAgICAgICAgICAgICAweDIxMDsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcsICAweDAwMUYsIDB4MDAxNSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRywgMHgwMDFGLCAweDAwMTUpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDdfQkxFX1JFRywgIDB4MDAxRiwgMHgwMDE2KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ3X0ZUREZfUkVHLCAweDAwMUYsIDB4MDAxNik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0OF9CTEVfUkVHLCAgMHgwMDFGLCAweDAwMTcpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDhfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDE3KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9GVERGX0NUUkwxX1JFRywgICAgICAgICAgICAgICAgICAweEMwMDAsIDB4ODdDMCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRlRERl9DVFJMMl9SRUcsICAgICAgICAgICAgICAgICAgMHgwNzAwLCAweDY4MTApOworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0ZUREZfQ1RSTDVfUkVHLCAgICAgICAgICAgICAgICAgIDB4MUZGRiwgMHg0NzA4KTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoREVNLCBSRl9GVERGX0xPT1BfR0FJTl9EU19SRUcsICAgICAgICAgICAweDAwRkYsIDB4MDA2MCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRlRERl9MT09QX0dBSU5fUERfUkVHLCAgICAgICAgICAgMHgwMEZGLCAweDAwNjApOworICAgICAgICBQTExESUctPlJGX0tNT0RfQUxQSEFfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS01PREVfQUxQSEFfQUNBRF9QUkVGOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9MRl9DVFJMX1JFRywgICAgICAgICAgICAgICAgICAgIDB4MDAxRiwgMHgwMEMwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTEZfUkVTX0NUUkxfQkxFX1JFRywgICAgICAgICAgICAweDBGMEYsIDB4NzQ3NCk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX0xGX1JFU19DVFJMX0ZUREZfUkVHLCAgICAgICAgICAgMHgwRjBGLCAweDc0NzQpOworCisKKyAgICAgICAgUExMRElHLT5SRl9NR0FJTl9DVFJMMl9SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNjsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsICAgICAgICAgICAweDFDMDAsIDB4MTQwMyk7CisKKworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHLCAgICAgICAgICAgIDB4MDAwRiwgMHgwMDMxKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUcsICAgICAgICAgICAweDAwMEYsIDB4MDAzMSk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX01JWEVSX0NUUkwyX1JFRywgICAgICAgICAgICAgICAgMHgwMDFGLCAweDAwMDApOworICAgICAgICBSRUdfU0VUX01BU0tFRChQTExESUcsIFJGX01TS01PRF9DVFJMMV9SRUcsICAgICAgICAgICAgIDB4MDAwMywgMHgwMDAzKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfUkVGX09TQ19CTEVfUkVHLCAgICAgICAgICAgICAgICAweDdGQzAsIDB4MzAyQyk7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1JFRl9PU0NfRlRERl9SRUcsICAgICAgICAgICAgICAgMHg3RkMwLCAweDMwMkMpOworICAgICAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX1JTU0lfQ09NUF9DVFJMX1JFRywgICAgICAgICAgICAgIDB4RjAwMCwgMHg5Nzc3KTsKKworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9TUEFSRTFfRlRERl9SRUcsICAgICAgICAgICAgICAgIDB4NDgwMCwgMHg0MDAwKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUExMRElHLCBSRl9TWU5USF9DVFJMMl9CTEVfUkVHLCAgICAgICAgICAweDE0QzAsIDB4MTA4Qik7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfRlRERl9SRUcsICAgICAgICAgMHgwMEMwLCAweDAwOUIpOworICAgICAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9UWF9QV1JfTFVUXzFfUkVHLCAgICAgICAgICAgICAgIDB4MDAzRiwgMHgwMDNCKTsKKyAgICAgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfVFhfUFdSX0xVVF8yX1JFRywgICAgICAgICAgICAgICAweDAwM0YsIDB4MDAzNyk7CisgICAgICAgIFJGQ1UtPlJGX1RYX1BXUl9MVVRfM19SRUcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRjY7CisgICAgICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1RYX1BXUl9MVVRfNF9SRUcsICAgICAgICAgICAgICAgMHgwMDNGLCAweDAwMzYpOworICAgICAgICBQTExESUctPlJGX1ZDT19DQUxDQVBfQklUMTRfUkVHID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhENTlEOworCisgICAgICAgIC8qIEZUREYgc3BlY2lmaWMgKi8KKyAgICAgICAgUkVHX1NFVEYoREVNLCBSRl9GVERGX0NUUkw1X1JFRywgUlNTSVRILCAxODAwKTsKKyAgICB9CisKKyAgICBSRUdfU0VURihQTExESUcsIFJGX0tNT0RfQUxQSEFfUkVHLCBLTU9EX0FMUEhBX0JMRSwga21vZGFfY2FsKTsKKyAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9XUiwgZ2dfY2FsX21vZGlmaWVkKTsKKyAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9TRUwpOworI2Vsc2UKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0FGQ19DVFJMX1JFRywgICAgICAgICAgICAgICAgICAgIDB4MDMzMCwgMHgwMUY1KTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0FHQ19DVFJMMV9SRUcsICAgICAgICAgICAgICAgICAgIDB4MDA3RiwgMHg5NTBBKTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0FHQ19DVFJMMl9SRUcsICAgICAgICAgICAgICAgICAgIDB4MDAzRiwgMHgwMDQ5KTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0NDQV9SU1NJVEhfUkVHLCAgICAgICAgICAgICAgICAgIDB4RTAwMCwgMHhFNzA4KTsKKworICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzEwX1JFRyA9ICAweDBBNDI7CisgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTFfUkVHID0gIDB4MEE0NDsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8xMl9SRUcsICAgICAgIDB4MDBGRiwgMHgwMDUwKTsKKyAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl8xM19SRUcgPSAgMHgwODUwOworICAgIFJGQ1VfUE9XRVItPlJGX0NOVFJMX1RJTUVSXzE0X1JFRyA9ICAweDE4NTg7CisgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfMTVfUkVHID0gIDB4MEE1MDsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8xNl9SRUcsIDB4RkYwMCwgMHgxMjA3KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl8xX1JFRywgMHhGRjAwLCAweDBGMDApOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzIxX1JFRywgMHgwMEZGLCAweDAwNDQpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzIyX1JFRywgMHgwMEZGLCAweDAwNDApOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzIzX1JFRywgMHgwMEZGLCAweDAwNTIpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzJfUkVHLCAweEZGMDAsIDB4MEQwOCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfQ05UUkxfVElNRVJfM19SRUcsIDB4RkYwMCwgMHgwQzEwKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9DTlRSTF9USU1FUl81X1JFRywgMHhGRjAwLCAweDBBMTgpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzdfUkVHLCAweEZGMDAsIDB4MEExOCk7CisgICAgUkZDVS0+UkZfQ1BfQ1RSTF9CTEVfUkVHID0gMHgzNTM1OworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX0NQX0NUUkxfRlRERl9SRUcsIDB4MEYwRiwgMHg3NTc1KTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX0RDX09GRlNFVF9DVFJMMl9SRUcsIDB4MDQwMiwgMHgwNUQwKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9ESVZfSVFfVFhfUkVHLCAweDAwRkYsIDB4MDBBMSk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzE2X1JFRywgMHgwMDFGLCAweDAwMTQpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHLCAweDAzRTAsIDB4MDAwMCk7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQyX1JFRyA9IDB4MDIxMDsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRywgMHgwM0UwLCAweDAwNjApOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHLCAweDAwMUYsIDB4MDAxNSk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ2X0ZUREZfUkVHLCAweDAwMUYsIDB4MDAxNSk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ3X0JMRV9SRUcsIDB4MDAxRiwgMHgwMDE2KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDdfRlRERl9SRUcsIDB4MDAxRiwgMHgwMDE2KTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVX1BPV0VSLCBSRl9FTkFCTEVfQ09ORklHNDhfQkxFX1JFRywgMHgwMDFGLCAweDAwMTcpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0OF9GVERGX1JFRywgMHgwMDFGLCAweDAwMTcpOworICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRlRERl9DVFJMMV9SRUcsICAgICAgICAgICAgICAgICAgMHhDMDAwLCAweDQ3QzApOworICAgIFJFR19TRVRfTUFTS0VEKERFTSwgUkZfRlRERl9TSUdERVRfQ1RSTF9SRUcsICAgICAgICAgICAgMHgxRkZGLCAweDBCNkEpOworICAgIFJFR19TRVRfTUFTS0VEKFBMTERJRywgUkZfS01PRF9BTFBIQV9CTEVfUkVHLCAweDBGQzAsIDB4MDMwQyk7CisgICAgUExMRElHLT5SRl9LTU9EX0FMUEhBX0ZUREZfUkVHID0gMHgwMDBEOworICAgIFJGQ1UtPlJGX0xGX1JFU19DVFJMX0JMRV9SRUcgPSAweDM0MzQ7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTEZfQ1RSTF9SRUcsICAgICAgICAgICAgICAgICAgICAweDAwNDAsIDB4MDA4MCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTEZfUkVTX0NUUkxfRlRERl9SRUcsIDB4MEYwRiwgMHg3NDc0KTsKKyAgICBSRkNVLT5SRl9MT19JUV9UUklNX1JFRyA9IDB4MDAwMTsKKyAgICBQTExESUctPlJGX01HQUlOX0NUUkwzX1JFRyA9IDB4MDA1MDsKKyAgICBSRUdfU0VUX01BU0tFRChQTExESUcsIFJGX01HQUlOX0NUUkxfRlRERl9SRUcsIDB4RkYwMCwgMHg1MDAwKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9NSVhFUl9DVFJMMV9CTEVfUkVHLCAweDAwMEYsIDB4MDAzMSk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfTUlYRVJfQ1RSTDFfRlRERl9SRUcsIDB4MDAwRiwgMHgwMDMxKTsKKyAgICBSRUdfU0VUX01BU0tFRChSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIDB4M0MwMCwgMHg1ODAwKTsKKyAgICBSRUdfU0VUX01BU0tFRChERU0sIFJGX1JTU0lfQ09NUF9DVFJMX1JFRywgMHhGMDAwLCAweDk3NzcpOworICAgIFJFR19TRVRfTUFTS0VEKFJGQ1UsIFJGX1NQQVJFMV9CTEVfUkVHLCAweDAwMzgsIDB4MDAxOCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfU1BBUkUxX0ZUREZfUkVHLCAweDAwMDgsIDB4MDAwOCk7CisgICAgUkVHX1NFVF9NQVNLRUQoUExMRElHLCBSRl9TWU5USF9DVFJMMl9CTEVfUkVHLCAweDIwQzAsIDB4MzA0Qik7CisgICAgUkVHX1NFVF9NQVNLRUQoUExMRElHLCBSRl9TWU5USF9DVFJMMl9GVERGX1JFRywgMHgwMDQwLCAweDAwNEIpOworICAgIFJGQ1UtPlJGX1RYX1BXUl9MVVRfNV9SRUcgPSAweDA5RkY7CisgICAgUkVHX1NFVF9NQVNLRUQoUkZDVSwgUkZfVFhEQUNfQ1RSTF9SRUcsIDB4MDA0MCwgMHgwMDAwKTsKKyNlbmRpZgorfQorCisKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKy8qKgorICogXGJyaWVmIE1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbgorICoKKyAqIFxwYXJhbVtpbl0gYm9vbCwgdHJ1ZSBmb3IgQkxFLCBmYWxzZSBmb3IgRlRERgorICogXHBhcmFtW2luXSBib29sLCB0cnVlIHRvIGVuYWJsZSBSRkNBTCBJUlEsIGZhbHNlIHRvIHBvbGwKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9zdGFydChib29sIG1vZGVfYmxlKQoreworCisgICAgdWludDMyX3QgY2FsY2FwX21pZDsgIC8vICBNUC0xMi0wMi0yMDE2CisKKyAgICAvLyBTdG9yZSBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGlzIGZ1bmN0aW9uCisgICAgcmZfY250cmxfdGltZXIxNF9yZWdfc2V0X29mZnNldCA9IFJFR19HRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzE0X1JFRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX09GRlNFVCk7CisgICAgcmZfY250cmxfdGltZXJfN19yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl83X1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnMTRfYmxlX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNF9CTEVfUkVHOworICAgIHJmX2VuYWJsZV9jb25maWcxNV9ibGVfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X0JMRV9SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzE0X2Z0ZGZfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X0ZUREZfUkVHOworICAgIHJmX2VuYWJsZV9jb25maWcxNV9mdGRmX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNV9GVERGX1JFRzsKKyAgICByZl9jYWxfY3RybF9yZWdfdmFsdWUgPSBSRkNVLT5SRl9DQUxfQ1RSTF9SRUc7CisgICAgcmZfbWdhaW5fY3RybF9yZWdfdmFsdWUgPSBQTExESUctPlJGX01HQUlOX0NUUkxfQkxFX1JFRzsKKyAgICByZl9tZ2Fpbl9jdHJsMl9yZWdfdmFsdWUgPSBQTExESUctPlJGX01HQUlOX0NUUkwyX1JFRzsKKyAgICByZl9zeW50aF9jdHJsMl9ibGVfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9TWU5USF9DVFJMMl9CTEVfUkVHOworICAgIHJmX3N5bnRoX2N0cmwyX2Z0ZGZfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9TWU5USF9DVFJMMl9GVERGX1JFRzsKKyAgICByZl9ibWN3X3JlZ192YWx1ZSA9IFBMTERJRy0+UkZfQk1DV19SRUc7CisgICAgcmZfdmNvY2FsX2N0cmxfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9WQ09DQUxfQ1RSTF9SRUc7CisKKyAgICAvLyBtb3ZlIFBMTENMT1NFRF9FTiB0byBhZnRlciBQTEwgaXMgaW4gbG9jaworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzdfUkVHLCBTRVRfT0ZGU0VULAorICAgICAgICAgICAgIHJmX2NudHJsX3RpbWVyMTRfcmVnX3NldF9vZmZzZXQgKyAxNTApOworCisgICAgLy8gRGlzYWJsZSBQQSBhbmQgUEEgcmFtcC4KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTRfQkxFX1JFRyA9IDB4MDAwMDsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTVfQkxFX1JFRyA9IDB4MDAwMDsKKworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNF9GVERGX1JFRyA9IDB4MDAwMDsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTVfRlRERl9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBEaXNhYmxlIGVuZC1vZi1wYWNrZXQgZGV0ZWN0aW9uIChub3QgbmVlZGVkIGZvciB0aGUgTUdDKQorICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgRU9fUEFDS0VUX0RJUyk7CisKKyAgICAvL1NldCBtb2R1bGF0b3IgaW52ZXJzaW9uCisvLyAgICAgICAgUkVHX0NMUl9CSVQoUExMRElHLCBSRl9NU0tNT0RfQ1RSTDFfUkVHLCBJTlZfU0RNX1BPTCk7ICAgICAgICAvLyBOb3JtYWwgU0RNIHBvbGFyaXR5CisvLyAgICAgICAgUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NU0tNT0RfQ1RSTDFfUkVHLCBJTlZfREFDX1BPTCk7ICAgICAgLy8gSW52ZXJ0ZWQgREFDIHBvbGFyaXR5CisKKyAgICAvL01ha2Ugc3VyZSB0aGF0IG5vcm1hbCBvcGVyYXRpb24gaXMgc2VsZWN0ZWQuCisgICAgUkVHX0NMUl9CSVQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIEdBVVNTX0dBSU5fU0VMKTsKKworICAgIC8vIFNldHRpbmdzIGZvciBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24KKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9NR0NfQ1RSTF9SRUcsIE1HQ19HQUlOX1NFVCk7CisgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0FWRVIsIDB4Mik7CisKKyAgICAvLyBpbnZlcnQgdGhlIGNvbXBhcmF0b3IgdmFsdWUgaWYgbW9kZSBiaXQgaXMgc2V0IHRvIHRydWUuCisgICAgaWYgKCFtb2RlX2JsZSkKKyAgICB7CisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4Mik7ICAgLy8gU2V0IHJhZGlvIGluIEZUREYgbW9kZQorICAgICAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgTUdBSU5fQ01QX0lOVik7CisgICAgICAgIC8vIFNldCBsZW5ndGggZGVwZW5kZW50IG9uIG1vZGUgLCBKSC0wOS0xMS0yMDE1CisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9UUkFOU01JVF9MRU5HVEgsIDEyKTsKKyAgICAgICAgLy8gTmVlZCB0byBzZXQgTW9kSW5kZXggdmFsdWUgdG8gMHgzRi4KKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9TWU5USF9DVFJMMl9GVERGX1JFRywgRlRERl9NT0RJTkRFWCwgMHgzRik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4MSk7ICAgLy8gU2V0IHJhZGlvIGluIEJMRSBtb2RlCisgICAgICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBNR0FJTl9DTVBfSU5WKTsKKyAgICAgICAgLy8gU2V0IGxlbmd0aCBkZXBlbmRlbnQgb24gbW9kZSAsIEpILTA5LTExLTIwMTUKKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX1RSQU5TTUlUX0xFTkdUSCwgOCk7CisgICAgICAgIC8vIFNldCBtb2RpbmRleCB0byAyNjZrSHogdG8gaW1wcm92ZSBkZjIvZGYxICwgSkgtMDktMTctMjAxNQorICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUcsIE1PRElOREVYLCAweDIpOworCisgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBWQ08gY29hcnNlIGNhbCB0byBmaW5kIHRoZSBjYWxjYXAgZm9yIG1pZCBjaGFubmVsCisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfQk1DV19SRUcsIENOX1NFTCwgMSk7CisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfQk1DV19SRUcsIENOX1dSLCAxOCk7CisKKyAgICAgICAgLy8gRGlzYWJsZSBhbGwgY2FsaWJyYXRpb25zIGV4Y2VwdCB0aGUgVkNPIGNvYXJzZSBjYWwuCisgICAgICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IDB4MDAxQzsKKworICAgICAgICAvLyBDbGVhciBlby1jYWwgaW50ZXJydXB0LCBzdWNoIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFyZWQKKyAgICAgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgICAgIC8vIFdhaXQgdW50aWwgdGhlIFZDTyBjb2Fyc2UgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICAgICAgd2hpbGUgKChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkpIHt9CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIFZDTyBjb2Fyc2UgY2FsaWJyYXRpb24KKyAgICAgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpOworCisgICAgICAgIC8vIFdhaXQgdW50aWwgdGhlIFZDTyBjb2Fyc2UgY2FsaWJyYXRpb24gaGFzIHN0YXJ0ZWQKKyAgICAgICAgd2hpbGUgKCEoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpKSB7fQorCisgICAgICAgIC8vIFdhaXQgdW50aWwgdGhlIFZDTyBjb2Fyc2UgY2FsaWJyYXRpb24gaXMgY29tcGxldGVkCisgICAgICAgIHdoaWxlICgoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpKSB7fQorCisgICAgICAgIC8vIENsZWFyIGVvX2NhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgICAgICBjYWxjYXBfbWlkID0gUkVHX0dFVEYoUExMRElHLCBSRl9TWU5USF9SRVNVTFRfQkxFX1JFRywgVkNPX0ZSRVFUUklNX1JEKTsKKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9WQ09DQUxfQ1RSTF9SRUcsICBWQ09fRlJFUVRSSU1fV1IsCisgICAgICAgICAgICAgICAgIGNhbGNhcF9taWQgLSBSRUdfR0VURihQTExESUcsIFJGX1ZDT0NBTF9DVFJMX1JFRywgVkNPX0ZSRVFUUklNX1NFTCkpOworCisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfVkNPQ0FMX0NUUkxfUkVHLCAgVkNPX0ZSRVFUUklNX1NFTCwgMik7IC8vIG1hbnVhbCBjYWxjYXAKKworICAgIH0KKworICAgIC8vIERpc2FibGUgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWwuCisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gMHgwMDM4OworCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc3VjaCB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIC8vIFdhaXQgdW50aWwgbmV4dCBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkge30KKworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFJGQ0FMX0lSUW4pOworCisgICAgLy8gU3RhcnQgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbgorICAgIFJFR19TRVRfQklUKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbiBoYXMgc3RhcnRlZAorICAgIHdoaWxlICghKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSkge30KK30KKyNlbHNlIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0IgKi8KK3N0YXRpYyB2b2lkIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9nZW5lcmljX3N0YXJ0KG1nY19tb2RlX2N0cmxfZSBtb2RlX2N0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IGF2ZXJhZ2UsIGludDE2X3QgbWdhaW5fbW9kZSwgaW50MTZfdCBmb3JjZSwgaW50MTZfdCBsZW5ndGgpCit7CisKKyAgICAvLyBTdG9yZSBhbGwgdGhlIHJlZ2lzdGVycyB0aGF0IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGlzIGZ1bmN0aW9uCisgICAgcmZfY250cmxfdGltZXIxNF9yZWdfc2V0X29mZnNldCA9IFJFR19HRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzE0X1JFRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX09GRlNFVCk7CisgICAgcmZfY250cmxfdGltZXJfN19yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl83X1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnMTRfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnMTVfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X1JFRzsKKyAgICByZl9jYWxfY3RybF9yZWdfdmFsdWUgPSBSRkNVLT5SRl9DQUxfQ1RSTF9SRUc7CisgICAgcmZfbWdhaW5fY3RybF9yZWdfdmFsdWUgPSBQTExESUctPlJGX01HQUlOX0NUUkxfQkxFX1JFRzsKKyAgICByZl9tZ2Fpbl9jdHJsMl9yZWdfdmFsdWUgPSBQTExESUctPlJGX01HQUlOX0NUUkwyX1JFRzsKKyAgICByZl9zeW50aF9jdHJsMl9ibGVfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9TWU5USF9DVFJMMl9CTEVfUkVHOworICAgIHJmX3N5bnRoX2N0cmwyX2Z0ZGZfcmVnX3ZhbHVlID0gUExMRElHLT5SRl9TWU5USF9DVFJMMl9GVERGX1JFRzsKKyAgICByZl9vdmVycnVsZV9yZWdfdmFsdWUgPSBSRkNVLT5SRl9PVkVSUlVMRV9SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzIzX2JsZV9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMjNfQkxFX1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnMjNfZnRkZl9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMjNfRlRERl9SRUc7CisgICAgcmZfZW5hYmxlX2NvbmZpZzQ1X2JsZV9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDVfQkxFX1JFRzsKKyAgICByZl9lbmFibGVfY29uZmlnNDVfZnRkZl9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDVfRlRERl9SRUc7CisKKyAgICAvLyBtb3ZlIFBMTENMT1NFRF9FTiB0byBhZnRlciBQTEwgaXMgaW4gbG9jaworICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0NOVFJMX1RJTUVSXzdfUkVHLCBTRVRfT0ZGU0VULAorICAgICAgICAgICAgIHJmX2NudHJsX3RpbWVyMTRfcmVnX3NldF9vZmZzZXQgKyAxNTApOworCisgICAgLy8gRGlzYWJsZSBQQSBhbmQgUEEgcmFtcC4KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTRfUkVHID0gMHgwMDAwOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcxNV9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBEaXNhYmxlIGVuZC1vZi1wYWNrZXQgZGV0ZWN0aW9uIChub3QgbmVlZGVkIGZvciB0aGUgTUdDKQorICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgRU9fUEFDS0VUX0RJUyk7CisKKyAgICAvLyBTZXQgR2FpbiBpbiBBbmFsb2cgY29tcGFyYXRvciB0byAxCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfTUdDX0NUUkxfUkVHLCBNR0NfR0FJTl9TRVQpOworCisKKyAgICAvKiBTZXQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgQkxFIG1vZGUgd2l0aCBHYXVzc0RBQyAqLworICAgIGlmIChtb2RlX2N0cmwgPT0gTUdDX01PREVfQ1RSTF9CTEVfR0FVU1NEQUMpCisgICAgeworICAgICAgICAvKiBTZXQgcmFkaW8gaW4gQkxFIG1vZGUgKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBSRl9NT0RFX09WUiwgMHgxKTsKKyAgICAgICAgLyogSW52ZXJzaW9uIG9mIGFuYWxvZyBjb21wYXJhdG9yIHNpZ25hbCAqLworICAgICAgICBSRUdfU0VUX0JJVChQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgTUdBSU5fQ01QX0lOVik7CisKKyAgICAgICAgaWYgKGZvcmNlICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEaXNhYmxlIEdhdXNzIEdhaW4gb3ZlcnJpZGUgKi8KKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBHQVVTU19HQUlOX1NFTCwgZm9yY2UgJiAweDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF2ZXJhZ2UgIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFNldCBudW1iZXIgb2YgYXZlcmFnaW5nICovCisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgTUdBSU5fQVZFUiwgYXZlcmFnZSAmIDB4Myk7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXR0aW5nIG51bWJlciBvZiB6ZXJvcyBhbmQgb25lcyAqLworICAgICAgICBpZiAobGVuZ3RoID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkwyX1JFRywgTUdBSU5fVFJBTlNNSVRfTEVOR1RILCA4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9UUkFOU01JVF9MRU5HVEgsCisgICAgICAgICAgICAgICAgICAgICBsZW5ndGggJiAweDdmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBtb2RpbmRleCB0byAyNjZrSHogKi8KKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9TWU5USF9DVFJMMl9CTEVfUkVHLCBNT0RJTkRFWCwgMHgyKTsKKyAgICAgICAgLyogU2VsZWN0IHRoZSBHYXVzc0RhYyBpbiBCTEUgbW9kZSAqLworICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX1NZTlRIX0NUUkwyX0JMRV9SRUcsIEJMRV9EQUNfU0VMLCAweDApOworCisgICAgICAgIGlmIChtZ2Fpbl9tb2RlICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBVc2UgdGhlIG5ldyBhbGdvcml0aG0gKi8KKyAgICAgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTDJfUkVHLCBNR0FJTl9NT0RFX1NFTCwgbWdhaW5fbW9kZSAmIDB4MSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBEaXNhYmxlIFRYREFDIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHLCB0eGRhY19lbl9ibGVfZGNmX3R4LCAweDApOworICAgICAgICAvKiBFbmFibGUgR2F1c3NEQUMgaW4gQkxFIG1vZGUgKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzIzX0JMRV9SRUcsIGdhdXNzX2VuX2JsZV9kY2ZfdHgsIDB4Myk7CisgICAgICAgIC8qIERpc2FibGUgVFgtREFDIG91dHB1dCBzZWxlY3Rpb24gKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBUWERBQ19TRUwsIDB4MCk7CisgICAgICAgIC8qIEVuYWJsZSBHYXVzc0RBQyBvdXRwdXQgc2VsZWN0aW9uIHN3aXRjaCAqLworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIEdBVVNTX0RBQ19TRUwsIDB4MCk7CisgICAgfQorCisgICAgLyogU2V0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEJMRSBtb2RlIHdpdGggVFhEQUMgKi8KKyAgICBpZiAobW9kZV9jdHJsID09IE1HQ19NT0RFX0NUUkxfQkxFX1RYREFDKQorICAgIHsKKyAgICAgICAgLyogU2V0IHJhZGlvIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4MSk7CisgICAgICAgIC8qIEludmVyc2lvbiBvZiBhbmFsb2cgY29tcGFyYXRvciBzaWduYWwgKi8KKyAgICAgICAgUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0NNUF9JTlYpOworCisgICAgICAgIGlmIChmb3JjZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRGlzYWJsZSBHYXVzcyBHYWluIG92ZXJyaWRlICovCisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9TRUwsIGZvcmNlICYgMHgxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmVyYWdlICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgbnVtYmVyIG9mIGF2ZXJhZ2luZyAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0FWRVIsIGF2ZXJhZ2UgJiAweDMpOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0dGluZyBudW1iZXIgb2YgemVyb3MgYW5kIG9uZXMgKi8KKyAgICAgICAgaWYgKGxlbmd0aCA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX1RSQU5TTUlUX0xFTkdUSCwgOCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkwyX1JFRywgTUdBSU5fVFJBTlNNSVRfTEVOR1RILAorICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICYgMHg3Zik7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXQgbW9kaW5kZXggdG8gMjUwa0h6ICovCisgICAgICAgIFJFR19TRVRGKFBMTERJRywgUkZfU1lOVEhfQ1RSTDJfQkxFX1JFRywgTU9ESU5ERVgsIDB4MCk7CisgICAgICAgIC8qIFNlbGVjdCB0aGUgVFhEQUMgaW4gQkxFIG1vZGUgKi8KKyAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9TWU5USF9DVFJMMl9CTEVfUkVHLCBCTEVfREFDX1NFTCwgMHgxKTsKKworICAgICAgICBpZiAobWdhaW5fbW9kZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVXNlIHRoZSBuZXcgYWxnb3JpdGhtICovCisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkwyX1JFRywgTUdBSU5fTU9ERV9TRUwsIG1nYWluX21vZGUgJiAweDEpOworICAgICAgICB9CisKKyAgICAgICAgLyogRW5hYmxlIFRYREFDIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHLCB0eGRhY19lbl9ibGVfZGNmX3R4LCAweDMpOworICAgICAgICAvKiBEaXNhYmxlIEdhdXNzREFDIGluIEJMRSBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1VfUE9XRVIsIFJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHLCBnYXVzc19lbl9ibGVfZGNmX3R4LCAweDApOworICAgICAgICAvKiBTZWxlY3QgVFgtREFDIG91dHB1dCBzZWxlY3Rpb24gKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBUWERBQ19TRUwsIDB4Mik7CisgICAgICAgIC8qIFVuc2VsZWN0IEdhdXNzREFDIG91dHB1dCBzZWxlY3Rpb24gc3dpdGNoICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgR0FVU1NfREFDX1NFTCwgMHgxKTsKKyAgICB9CisKKyAgICAvKiBTZXQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgRlRERiBtb2RlICovCisgICAgaWYgKG1vZGVfY3RybCA9PSBNR0NfTU9ERV9DVFJMX0ZUREYpCisgICAgeworICAgICAgICAvKiBTZXQgcmFkaW8gaW4gRlRERiBtb2RlICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4Mik7CisgICAgICAgIC8qIEludmVyc2lvbiBvZiBhbmFsb2cgY29tcGFyYXRvciBzaWduYWwgKi8KKyAgICAgICAgUkVHX1NFVF9CSVQoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0NNUF9JTlYpOworCisgICAgICAgIGlmIChmb3JjZSAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRGlzYWJsZSBHYXVzcyBHYWluIG92ZXJyaWRlICovCisgICAgICAgICAgICBSRUdfU0VURihQTExESUcsIFJGX01HQUlOX0NUUkxfQkxFX1JFRywgR0FVU1NfR0FJTl9TRUwsIGZvcmNlICYgMHgxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmVyYWdlICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgbnVtYmVyIG9mIGF2ZXJhZ2luZyAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMX0JMRV9SRUcsIE1HQUlOX0FWRVIsIGF2ZXJhZ2UgJiAweDMpOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0dGluZyBudW1iZXIgb2YgemVyb3MgYW5kIG9uZXMgKi8KKyAgICAgICAgaWYgKGxlbmd0aCA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX1RSQU5TTUlUX0xFTkdUSCwgMTYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX1RSQU5TTUlUX0xFTkdUSCwKKyAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAmIDB4N2YpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1nYWluX21vZGUgIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFVzZSB0aGUgbmV3IGFsZ29yaXRobSAqLworICAgICAgICAgICAgUkVHX1NFVEYoUExMRElHLCBSRl9NR0FJTl9DVFJMMl9SRUcsIE1HQUlOX01PREVfU0VMLCBtZ2Fpbl9tb2RlICYgMHgxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVuYWJsZSBUWERBQyBpbiBGVERGIG1vZGUgKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHLCB0eGRhY19lbl9mdGRmX2RjZl90eCwgMHgzKTsKKyAgICAgICAgLyogRGlzYWJsZSBHYXVzc0RBQyBpbiBGVERGIG1vZGUgKi8KKyAgICAgICAgUkVHX1NFVEYoUkZDVV9QT1dFUiwgUkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHLCBnYXVzc19lbl9mdGRmX2RjZl90eCwgMHgwKTsKKyAgICAgICAgLyogU2VsZWN0IFRYLURBQyBvdXRwdXQgc2VsZWN0aW9uICovCisgICAgICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgVFhEQUNfU0VMLCAweDApOworICAgICAgICAvKiBVbnNlbGVjdCBHYXVzc0RBQyBvdXRwdXQgc2VsZWN0aW9uIHN3aXRjaCAqLworICAgICAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIEdBVVNTX0RBQ19TRUwsIDB4MCk7CisgICAgfQorCisgICAgLy8gRGlzYWJsZSBhbGwgY2FsaWJyYXRpb25zIGV4Y2VwdCB0aGUgbW9kdWxhdGlvbiBnYWluIGNhbC4KKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSAweDAwMzg7CisKKyAgICAvLyBDbGVhciBlby1jYWwgaW50ZXJydXB0LCBzdWNoIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgLy8gV2FpdCB1bnRpbCBuZXh0IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBFT19DQUwpKSB7fQorCisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoUkZDQUxfSVJRbik7CisKKyAgICAvLyBTdGFydCB0aGUgbW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uCisgICAgUkVHX1NFVF9CSVQoUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpOworCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgbW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uIGhhcyBzdGFydGVkCisgICAgd2hpbGUgKCEoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpKSB7fQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX3N0YXJ0KGJvb2wgbW9kZV9ibGUpCit7CisgICAgaWYgKG1vZGVfYmxlKQorICAgIHsKKyAgICAgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX2dlbmVyaWNfc3RhcnQoTUdDX01PREVfQ1RSTF9CTEVfVFhEQUMsIDIsIDEsIDAsIDgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fZ2VuZXJpY19zdGFydChNR0NfTU9ERV9DVFJMX0ZUREYsIDIsIDEsIDAsIDgpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fZW5kKHZvaWQpCit7CisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIHVpbnQzMl90ICBjaF9jYWwsIGdnX2NhbCwgZ2dfY2hfcHJvZCwga21vZGFfbWF4LCBnZzAsIGdnX3RoMSwgZ2dfdGgyOyAvLyAgTVAtMTItMDItMjAxNgorICAgIHVpbnQzMl90IGttb2RhX2Jhc2U7CisgICAgdWludDMyX3QgWTsKKyAgICB1aW50MzJfdCB0bXA7CisgICAgdWludDMyX3QgZGdhaW5fa2lsbF9zZWNvbmRfanVtcDsKKyAgICB1aW50MzJfdCBkZ2FpbjsKKworICAgIGlmICgoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgfHwgKChkZ19jb25maWdVU0VfQVVUT19DSElQX0RFVEVDVElPTiA9PSAxKQorICAgICAgICAgICAgJiYgKENISVBfSVNfQUUpKSkKKyAgICB7CisgICAgICAgIGttb2RhX2Jhc2UgPSBLTU9ERV9BTFBIQV9BQ0FEX1BSRUYgJiBSRUdfTVNLKFBMTERJRywgUkZfS01PRF9BTFBIQV9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtNT0RfQUxQSEFfQkxFKTsKKyAgICB9CisKKyAgICAvLyBDbGVhciBlb19jYWwgaW50ZXJydXB0LCBzbyB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIGNoX2NhbCA9IFJFR19HRVRGKFBMTERJRywgUkZfU1lOVEhfUkVTVUxUMl9CTEVfUkVHLCBDTl9DQUxfUkQpOworICAgIGdnX2NhbCA9IFJFR19HRVRGKFBMTERJRywgUkZfU1lOVEhfUkVTVUxUX0JMRV9SRUcsICBHQVVTU19HQUlOX0NBTF9SRCk7CisKKyAgICBnZzAgICAgPSBnZ19jYWwgKyAoKGdnX2NhbCAqIGttb2RhX2Jhc2UgKiBjaF9jYWwgKyAxMDI0KSA+PiAxMSk7CisgICAgZ2dfdGgxID0gKGdnX2NhbCAmIDB4RTApICsgREYxX0RBQ19DSEVDS19WQUxVRTsgLy8gZ2dfdGgxID0gKGdnX2NhbCYweEUwKSszMjsKKyAgICBnZ190aDIgPSAoZ2dfdGgxICsgREYxX0RBQ19DSEVDS19WQUxVRSk7ICAgICAgLy8gZ2dfdGgyID0gKGdnX3RoMSszMik7CisKKyAgICBpZiAoZ2cwID49IGdnX3RoMikgICAvL3NvIDIganVtcHMgYXJlIG9uIHRoZSBsZWZ0IG9mIHRoZSBjYWwuIGNoYW5uZWwKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgIEZvcm11bGEgKE1QKToKKyAgICAgICAgWSA9IDEgKyAoKGttb2RhX2Jhc2UqY2hfY2FsKS8yMDQ4KTsKKyAgICAgICAgZGdhaW5fa2lsbF9zZWNvbmRfanVtcCA9IGdnX2NhbCAtIChnZ190aDItMSkvWTsKKworICAgICAgICBJbXByb3ZlIHRoZSByZXNvbHV0aW9uLAorICAgICAgICBZID0gMjA0OCogKyAoa21vZGFfYmFzZSpjaF9jYWwpOworICAgICAgICBkZ2Fpbl9raWxsX3NlY29uZF9qdW1wID0gZ2dfY2FsIC0gKGdnX3RoMi0xKSoyMDQ4L1k7CisgICAgICAgICAqLworCisgICAgICAgIFkgPSAyMDQ4ICsgKGttb2RhX2Jhc2UgKiBjaF9jYWwpOworICAgICAgICB0bXAgPSAoKChnZ190aDIgLSAxKSA8PCAxMSkgLyBZKTsKKworICAgICAgICBpZiAoZ2dfY2FsID4gdG1wKSAgLy9jaGVjayB0byBwcmV2ZW50IG5lZ2F0aXZlIHZhbHVlIGZvciBkZ2Fpbl9raWxsX3NlY29uZF9qdW1wCisgICAgICAgIHsKKyAgICAgICAgICAgIGRnYWluX2tpbGxfc2Vjb25kX2p1bXAgPSBnZ19jYWwgLSB0bXA7CisKKyAgICAgICAgICAgIGlmIChkZ2Fpbl9raWxsX3NlY29uZF9qdW1wIDw9IERGMV9ER0FJTl9USFIxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRnYWluID0gREYxX0RHQUlOX1RIUjE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChkZ2Fpbl9raWxsX3NlY29uZF9qdW1wID49IERGMV9ER0FJTl9USFIyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRnYWluID0gREYxX0RHQUlOX1RIUjI7ICAvLyBTaG91bGQgbmV2ZXIgZW5kIHVwIGhlcmUg77+9IGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LiBkZ2Fpbl90aHIyIGlzIGRlZmF1bHQgMTYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZ2FpbiA9IGRnYWluX2tpbGxfc2Vjb25kX2p1bXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkZ2FpbiA9IDA7IC8vIEVuZCB1cCBoZXJlIGJlY2F1c2Ugc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsY3VsYXRpb24gb2YgdG1wIQorICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZiAoZ2cwID49IGdnX3RoMSkKKyAgICB7CisgICAgICAgIGRnYWluID0gREYxX0RHQUlOX1RIUjE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRnYWluID0gREYxX0RHQUlOX1RIUjA7CisgICAgfQorCisgICAgaWYgKGdnX2NhbCA+IGRnYWluKQorICAgIHsKKyAgICAgICAgZ2dfY2FsX21vZGlmaWVkID0gZ2dfY2FsIC0gZGdhaW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdnX2NhbF9tb2RpZmllZCA9IGdnX2NhbDsKKyAgICB9CisKKyAgICBnZ19jaF9wcm9kID0gKHVpbnQzMl90KShnZ19jYWxfbW9kaWZpZWQgKiBjaF9jYWwpOworCisgICAgaWYgKGdnX2NoX3Byb2QgPT0gMCkgICAvLyBBdm9pZCBIYXJkRmF1bHQgZHVlIHRvIGRpdmlzaW9uIGJ5IDAgKG5vdCBsaWtlbHkpCisgICAgeworICAgICAgICBrbW9kYV9jYWwgPSBrbW9kYV9iYXNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworCisgICAgICAgIGttb2RhX21heCA9ICgyNTUgKiAyMDQ4IC0gMjA0OCAqIGdnX2NhbF9tb2RpZmllZCkgLyBnZ19jaF9wcm9kIDsKKworICAgICAgICBpZiAoa21vZGFfbWF4ID49IGttb2RhX2Jhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGttb2RhX2NhbCA9IGttb2RhX2Jhc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBrbW9kYV9jYWwgPSBrbW9kYV9tYXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBkb25lIGJvdGggaGVyZSAodG8gdGFrZSBlZmZlY3QgYWZ0ZXIgY2FsaWIpIEFORCBhZnRlciBwcmVmZXJyZWQgc2V0dGluZ3MKKyAgICBSRUdfU0VURihQTExESUcsIFJGX0tNT0RfQUxQSEFfUkVHLCBLTU9EX0FMUEhBX0JMRSwga21vZGFfY2FsKTsKKworICAgIC8vUmVzdG9yZSB0aGUgdmFsdWVzIG9mIHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgLy9SRUdfU0VUX0JJVChQTExESUcsIFJGX01TS01PRF9DVFJMMV9SRUcsIElOVl9TRE1fUE9MKTsgIC8vIEludmVydGVkIFNETSBwb2xhcml0eQorICAgIC8vUkVHX0NMUl9CSVQoUExMRElHLCBSRl9NU0tNT0RfQ1RSTDFfUkVHLCBJTlZfREFDX1BPTCk7ICAvLyBOb3JtYWwgREFDIHBvbGFyaXR5CisgICAgUkZDVV9QT1dFUi0+UkZfQ05UUkxfVElNRVJfN19SRUcgPSByZl9jbnRybF90aW1lcl83X3JlZ192YWx1ZTsKKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSByZl9jYWxfY3RybF9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE0X0JMRV9SRUcgPSByZl9lbmFibGVfY29uZmlnMTRfYmxlX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTRfRlRERl9SRUcgPSByZl9lbmFibGVfY29uZmlnMTRfZnRkZl9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzE1X0JMRV9SRUcgPSByZl9lbmFibGVfY29uZmlnMTVfYmxlX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTVfRlRERl9SRUcgPSByZl9lbmFibGVfY29uZmlnMTVfZnRkZl9yZWdfdmFsdWU7CisKKyAgICBQTExESUctPlJGX01HQUlOX0NUUkxfQkxFX1JFRyA9IHJmX21nYWluX2N0cmxfcmVnX3ZhbHVlOworICAgIFBMTERJRy0+UkZfTUdBSU5fQ1RSTDJfUkVHID0gcmZfbWdhaW5fY3RybDJfcmVnX3ZhbHVlOworICAgIFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfQkxFX1JFRyA9IHJmX3N5bnRoX2N0cmwyX2JsZV9yZWdfdmFsdWU7CisgICAgUExMRElHLT5SRl9TWU5USF9DVFJMMl9GVERGX1JFRyA9IHJmX3N5bnRoX2N0cmwyX2Z0ZGZfcmVnX3ZhbHVlOworCisgICAgUExMRElHLT5SRl9CTUNXX1JFRyA9IHJmX2JtY3dfcmVnX3ZhbHVlOyAvLyBNUC0xMi0wMi0yMDE2CisgICAgUExMRElHLT5SRl9WQ09DQUxfQ1RSTF9SRUcgPSByZl92Y29jYWxfY3RybF9yZWdfdmFsdWU7IC8vIE1QLTEyLTAyLTIwMTYKKworICAgIFJFR19TRVRGKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBHQVVTU19HQUlOX1dSLCBnZ19jYWxfbW9kaWZpZWQpOworICAgIFJFR19TRVRfQklUKFBMTERJRywgUkZfTUdBSU5fQ1RSTF9CTEVfUkVHLCBHQVVTU19HQUlOX1NFTCk7CisKKyAgICAvLyBEaXNhYmxlIG92ZXJydWxlIG1vZGUKKyAgICBSRkNVLT5SRl9PVkVSUlVMRV9SRUcgJj0gflJFR19NU0soUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBSRl9NT0RFX09WUik7CisjZWxzZQorICAgIC8vIENsZWFyIGVvX2NhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgLy9SZXN0b3JlIHRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICBSRkNVX1BPV0VSLT5SRl9DTlRSTF9USU1FUl83X1JFRyA9IHJmX2NudHJsX3RpbWVyXzdfcmVnX3ZhbHVlOworICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IHJmX2NhbF9jdHJsX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTRfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzE0X3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMTVfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzE1X3JlZ192YWx1ZTsKKyAgICBQTExESUctPlJGX01HQUlOX0NUUkxfQkxFX1JFRyA9IHJmX21nYWluX2N0cmxfcmVnX3ZhbHVlOworICAgIFBMTERJRy0+UkZfTUdBSU5fQ1RSTDJfUkVHID0gcmZfbWdhaW5fY3RybDJfcmVnX3ZhbHVlOworICAgIFBMTERJRy0+UkZfU1lOVEhfQ1RSTDJfQkxFX1JFRyA9IHJmX3N5bnRoX2N0cmwyX2JsZV9yZWdfdmFsdWU7CisgICAgUExMRElHLT5SRl9TWU5USF9DVFJMMl9GVERGX1JFRyA9IHJmX3N5bnRoX2N0cmwyX2Z0ZGZfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyM19CTEVfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzIzX2JsZV9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzIzX0ZUREZfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzIzX2Z0ZGZfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0NV9CTEVfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzQ1X2JsZV9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ1X0ZUREZfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzQ1X2Z0ZGZfcmVnX3ZhbHVlOworCisgICAgLy8gRGlzYWJsZSBvdmVycnVsZSBtb2RlCisgICAgUkZDVS0+UkZfT1ZFUlJVTEVfUkVHID0gcmZfb3ZlcnJ1bGVfcmVnX3ZhbHVlOworCisjZW5kaWYKK30KKworLyoqCisgKiBcYnJpZWYgTW9kdWxhdGlvbiBnYWluIGNhbGlicmF0aW9uIC0gV3JhcHBlciBmdW5jdGlvbgorICoKKyAqIFVzZWQgb24gYm9vdCwgYW5kIGdlbmVyYWxseSB3aGVuZXZlciB0aGUgaW50ZXJydXB0LWJhc2VkIGFwcHJvYWNoIGlzIG5vdAorICogbmVlZGVkCisgKgorICogXHBhcmFtW2luXSBib29sLCB0cnVlIGZvciBGVERGLCBmYWxzZSBmb3IgQkxFCisgKgorICovCit2b2lkIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbihib29sIG1vZGVfYmxlKQoreworICAgIC8qIFN0YXJ0IHRoZSBnYWluIGNhbGlicmF0aW9uICovCisgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX3N0YXJ0KG1vZGVfYmxlKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQKKyAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpIHt9CisKKyAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fZW5kKCk7Cit9CisKKwordm9pZCBod19yZl9kY19vZmZzZXRfY2FsaWJyYXRpb24odm9pZCkKK3sKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgLy8gU2F2ZSB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMF9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMV9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMl9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFRzsKKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOworCisgICAgdWludDMyX3QgUkZfRENfT0ZGU0VUX0NUUkwyX1JFR192YWx1ZSA9IERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRzsKKyAgICB1aW50MzJfdCByZl9jYWxfY3RybF9yZWdfdmFsdWVfbG9jYWwgPSBSRkNVLT5SRl9DQUxfQ1RSTF9SRUc7CisgICAgdWludDMyX3QgcmZfb3ZlcnJ1bGVfcmVnX3ZhbHVlX2xvY2FsID0gUkZDVS0+UkZfT1ZFUlJVTEVfUkVHOworCisgICAgLy8gUmVxdWlyZWQgc2V0dGluZyBmb3IgdGhlIERDLW9mZnNldCBjYWxpYnJhdGlvbgorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfTERPCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9DT1JFCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9DR00KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyA9IDB4MDAwMDsgICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgRENGIHRyaWdnZXJlZCBQYXJ0aWFsIERDT0MKKworICAgIC8vIERDTkdBSU4gPSAzLCBEQ05TVEVQID0gNSwgRENQQVJDQUxfRU4gPSAwLCBEQ09GRlNFVF9TRUwgPSAwCisgICAgREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHID0gMHgwMUQwOworICAgIC8vIERpc2FibGUgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgdGhlIERDLW9mZnNldCBjYWwuCisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gMHgwMDJDOworCisgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBSRl9NT0RFX09WUiwgMHgxKTsgICAvLyBPdmVycnVsZSBSRl9NT0RFIDwtIEJMRV9NT0RFCisKKyAgICAvLyBDbGVhciBlby1jYWwgaW50ZXJydXB0LCBzbyB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcmVkCisgICAgUkZDVS0+UkZfSVJRX0NUUkxfUkVHID0gMHgwMDAwOworCisgICAgLy8gV2FpdCB1bnRpbCB0aGUgREMtb2Zmc2V0IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFydGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBFT19DQUwpKSB7fQorCisgICAgLy8gU3RhcnQgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbgorICAgIFJFR19TRVRfQklUKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbiBoYXMgc3RhcnRlZAorICAgIHdoaWxlICghKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSkge30KKworICAgIC8vIFdhaXQgdW50aWwgdGhlIG1vZHVsYXRpb24gZ2FpbiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQKKyAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpIHt9CisKKyAgICAvLyBDbGVhciBlby1jYWwgaW50ZXJydXB0LCBzbyB0aGF0IG5ldyBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIC8vIFJlc3RvcmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcxX0JMRV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcyX0JMRV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUcgPSBSRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFR192YWx1ZTsKKworICAgIERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRyA9IFJGX0RDX09GRlNFVF9DVFJMMl9SRUdfdmFsdWU7CisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsOworICAgIFJGQ1UtPlJGX09WRVJSVUxFX1JFRyA9IHJmX292ZXJydWxlX3JlZ192YWx1ZV9sb2NhbDsKKyNlbHNlIC8qIFJFVl9CICovCisgICAgLy8gU2F2ZSB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICB1aW50MzJfdCBSRl9FTkFCTEVfQ09ORklHMF9SRUdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9SRUc7CisgICAgdWludDMyX3QgUkZfRU5BQkxFX0NPTkZJRzFfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfUkVHOworICAgIHVpbnQzMl90IFJGX0VOQUJMRV9DT05GSUcyX1JFR192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX1JFRzsKKworICAgIHVpbnQzMl90IFJGX0RDX09GRlNFVF9DVFJMMl9SRUdfdmFsdWUgPSBERU0tPlJGX0RDX09GRlNFVF9DVFJMMl9SRUc7CisgICAgdWludDMyX3QgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsID0gUkZDVS0+UkZfQ0FMX0NUUkxfUkVHOworICAgIHVpbnQzMl90IHJmX292ZXJydWxlX3JlZ192YWx1ZV9sb2NhbCA9IFJGQ1UtPlJGX09WRVJSVUxFX1JFRzsKKworICAgIC8vIFJlcXVpcmVkIHNldHRpbmcgZm9yIHRoZSBEQy1vZmZzZXQgY2FsaWJyYXRpb24KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfTERPCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0NPUkUKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfQ0dNCisKKyAgICAvLyBEQ05HQUlOID0gMywgRENOU1RFUCA9IDUsIERDUEFSQ0FMX0VOID0gMCwgRENPRkZTRVRfU0VMID0gMAorICAgIERFTS0+UkZfRENfT0ZGU0VUX0NUUkwyX1JFRyA9IDB4MDFEMDsKKyAgICAvLyBEaXNhYmxlIGFsbCBjYWxpYnJhdGlvbnMgZXhjZXB0IHRoZSBEQy1vZmZzZXQgY2FsLgorICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IDB4MDAyQzsKKworICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIDB4MSk7ICAgLy8gT3ZlcnJ1bGUgUkZfTU9ERSA8LSBCTEVfTU9ERQorCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIERDLW9mZnNldCBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkge30KKworICAgIC8vIFN0YXJ0IHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24KKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24gaGFzIHN0YXJ0ZWQKKyAgICB3aGlsZSAoIShSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkpIHt9CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBtb2R1bGF0aW9uIGdhaW4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKSB7fQorCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBSZXN0b3JlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2VyZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcwX1JFRyA9IFJGX0VOQUJMRV9DT05GSUcwX1JFR192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMV9SRUcgPSBSRl9FTkFCTEVfQ09ORklHMV9SRUdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzJfUkVHID0gUkZfRU5BQkxFX0NPTkZJRzJfUkVHX3ZhbHVlOworCisgICAgREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHID0gUkZfRENfT0ZGU0VUX0NUUkwyX1JFR192YWx1ZTsKKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSByZl9jYWxfY3RybF9yZWdfdmFsdWVfbG9jYWw7CisgICAgUkZDVS0+UkZfT1ZFUlJVTEVfUkVHID0gcmZfb3ZlcnJ1bGVfcmVnX3ZhbHVlX2xvY2FsOworI2VuZGlmCit9CisKKworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorYm9vbCBod19yZl9pZmZfY2FsaWJyYXRpb24odm9pZCkKK3sKKyAgICB1aW50NjRfdCBzdGFydF90aW1lOworCisgICAgdWludDE2X3QgY2FsY2FwX3Jlc3VsdDsKKworICAgIC8vIFNhdmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgdWludDMyX3QgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsID0gUkZDVS0+UkZfQ0FMX0NUUkxfUkVHOworCisgICAgLy8gQ29uZmlndXJlIHRoZSByZWZlcmVuY2Ugb3NjaWxsYXRvciBmb3IgdGhlIGNhbGlicmF0aW9uCisgICAgLy8gMjEtMDQtMjAxNSA6ICBKSCAgLSAgUmVtb3ZlZCB0byB1c2UgcHJlZmVycmVkIHNldHRpbmdzIGluc3RlYWQKKyAgICAvL3VpbnQxNl90IHJlZyA9IFJGQ1UtPlJGX1JFRl9PU0NfQkxFX1JFRzsKKyAgICAvL1JFR19TRVRfRklFTEQoUkZDVSwgUkZfUkVGX09TQ19CTEVfUkVHLCBDTlRfQ0xLLCByZWcsIDB4QTYpOworICAgIC8vUkVHX1NFVF9GSUVMRChSRkNVLCBSRl9SRUZfT1NDX0JMRV9SRUcsIENOVF9STywgcmVnLCAweDJDKTsKKyAgICAvL1JGQ1UtPlJGX1JFRl9PU0NfQkxFX1JFRyA9IHJlZzsKKyAgICAvL3JlZyA9IFJGQ1UtPlJGX1JFRl9PU0NfRlRERl9SRUc7CisgICAgLy9SRUdfU0VUX0ZJRUxEKFJGQ1UsIFJGX1JFRl9PU0NfRlRERl9SRUcsIENOVF9DTEssIHJlZywgMHhBNik7CisgICAgLy9SRUdfU0VUX0ZJRUxEKFJGQ1UsIFJGX1JFRl9PU0NfRlRERl9SRUcsIENOVF9STywgcmVnLCAweDJDKTsKKyAgICAvL1JGQ1UtPlJGX1JFRl9PU0NfRlRERl9SRUcgPSByZWc7CisKKyAgICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIHVpbnQzMl90IFJGX0VOQUJMRV9DT05GSUcwX0JMRV9SRUdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9CTEVfUkVHOworICAgIHVpbnQzMl90IFJGX0VOQUJMRV9DT05GSUcxX0JMRV9SRUdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMV9CTEVfUkVHOworICAgIHVpbnQzMl90IFJGX0VOQUJMRV9DT05GSUcyX0JMRV9SRUdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9CTEVfUkVHOworICAgIHVpbnQzMl90IFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzQ2X0JMRV9SRUc7CisKKyAgICAvLyBSZXF1aXJlZCBzZXR0aW5nIGZvciB0aGUgREMtb2Zmc2V0IGNhbGlicmF0aW9uCisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9MRE8KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMV9CTEVfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0NPUkUKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9CTEVfUkVHID0gMHgwMDAwOyAgIC8vIERpc2FibGUgTE5BX0NHTQorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHID0gMHgwMDAwOyAgICAgICAgICAgICAvLyBEaXNhYmxlIHRoZSBEQ0YgdHJpZ2dlcmVkIFBhcnRpYWwgRENPQworCisgICAgLy8gRGlzYWJsZSBhbGwgY2FsaWJyYXRpb25zIGV4Y2VwdCB0aGUgSWZmIGNhbC4KKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSAweDAwMzQ7CisgICAgLy8gU2VsZWN0IHRoZSBJRiBjYWxjYXAgdG8gdXNlIHRoZSBGU00gdmFsdWUKKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9JRkZfQ1RSTDFfUkVHLCBJRl9TRUxFQ1RfRlNNKTsKKworICAgIC8vIENsZWFyIGVvLWNhbCBpbnRlcnJ1cHQsIHNvIHRoYXQgbmV3IGNhbGlicmF0aW9uIGNhbiBiZSBzdGFyZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKworICAgIHN0YXJ0X3RpbWUgPSBod19yZl9nZXRfc3RhcnRfaWZmX3RpbWUoKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIElGRiBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkKKyAgICB7CisgICAgICAgIGlmIChod19yZl9jaGVja19pZmZfdGltZW91dChzdGFydF90aW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSUZGIGxvY2t1cCBkZXRlY3RlZC4gQWJvcnQgKi8KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogTmV3IGNvZGUgYnkgU1IgMy8yMy8yMDE2CisgICAgICogKERpc2FibGUgcGFydGlhbCBjYWxpYnJhdGlvbiBiZWZvcmUgSUZGIGNhbGlicmF0aW9ucyBzdGFydHMpCisgICAgICoKKyAgICAgKiBTYXZlIGN1cnJlbnQgY29udGVudCBvZiBSRl9EQ19PRkZTRVRfQ1RSbDJfUkVHIGFuZCBzZXQgRENQQVJDQUxfRU4gPSAwCisgICAgICoKKyAgICAgKi8KKyAgICB1aW50MTZfdCByZl9kY19vZmZzZXRfY3RybDJfcmVnID0gREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOyAvL0dldFdvcmQxNihSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHKTsKKyAgICBSRUdfQ0xSX0JJVChERU0sIFJGX0RDX09GRlNFVF9DVFJMMl9SRUcsIERDUEFSQ0FMX0VOKTsKKworICAgIC8vIFN0YXJ0IHRoZSBJRkYgY2FsaWJyYXRpb24KKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBJRkYgY2FsaWJyYXRpb24gaGFzIHN0YXJ0ZWQKKyAgICB3aGlsZSAoIShSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkpCisgICAgeworICAgICAgICBpZiAoaHdfcmZfY2hlY2tfaWZmX3RpbWVvdXQoc3RhcnRfdGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElGRiBsb2NrdXAgZGV0ZWN0ZWQuIEFib3J0ICovCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBJRkYgY2FsaWJyYXRpb24gaXMgY29tcGxldGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKQorICAgIHsKKyAgICAgICAgaWYgKGh3X3JmX2NoZWNrX2lmZl90aW1lb3V0KHN0YXJ0X3RpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJRkYgbG9ja3VwIGRldGVjdGVkLiBBYm9ydCAqLworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBTdG9yZSB0aGUgcmVzdWx0IHRvIGFsbCBJRkYgQ0MgcmVnaXN0ZXJzCisgICAgY2FsY2FwX3Jlc3VsdCA9IFJGQ1UtPlJGX0lGRl9DQUxfQ0FQX1NUQVRfUkVHOworICAgIFJGQ1UtPlJGX0lGRl9DQ19CTEVfU0VUMV9SRUcgPSBjYWxjYXBfcmVzdWx0OworICAgIFJGQ1UtPlJGX0lGRl9DQ19CTEVfU0VUMl9SRUcgPSBjYWxjYXBfcmVzdWx0OworICAgIFJGQ1UtPlJGX0lGRl9DQ19GVERGX1NFVDFfUkVHID0gY2FsY2FwX3Jlc3VsdDsKKyAgICBSRkNVLT5SRl9JRkZfQ0NfRlRERl9TRVQyX1JFRyA9IGNhbGNhcF9yZXN1bHQ7CisKKyAgICAvLyBSZXN0b3JlIHRoZSB2YWx1ZXMgb2YgcmVnaXN0ZXJzIHRoYXQgd2VyZSBjaGFuZ2VkIGluIHRoZSBmdW5jdGlvbgorICAgIFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyA9IHJmX2NhbF9jdHJsX3JlZ192YWx1ZV9sb2NhbDsKKyAgICAvLyBEZS1zZWxlY3QgdGhlIElGIGNhbGNhcCB0byB1c2UgdGhlIEZTTSB2YWx1ZQorICAgIFJFR19DTFJfQklUKFJGQ1UsIFJGX0lGRl9DVFJMMV9SRUcsIElGX1NFTEVDVF9GU00pOworCisKKyAgICAvKgorICAgICAqIE5ldyBjb2RlIGJ5IFNSIDMvMjMvMjAxNgorICAgICAqIChEaXNhYmxlIHBhcnRpYWwgY2FsaWJyYXRpb24gYmVmb3JlIElGRiBjYWxpYnJhdGlvbnMgc3RhcnRzKQorICAgICAqCisgICAgICogUmVzdG9yZSBSRl9EQ19PRkZTRVRfQ1RSbDJfUkVHCisgICAgICoKKyAgICAgKi8KKyAgICBERU0tPlJGX0RDX09GRlNFVF9DVFJMMl9SRUcgPSByZl9kY19vZmZzZXRfY3RybDJfcmVnOworCisgICAgLy8gUmVzdG9yZSB0aGUgdmFsdWVzIG9mIHJlZ2lzdGVycyB0aGF0IHdlcmUgY2hhbmdlZCBpbiB0aGUgZnVuY3Rpb24KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9CTEVfUkVHID0gUkZfRU5BQkxFX0NPTkZJRzBfQkxFX1JFR192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMV9CTEVfUkVHID0gUkZfRU5BQkxFX0NPTkZJRzFfQkxFX1JFR192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMl9CTEVfUkVHID0gUkZfRU5BQkxFX0NPTkZJRzJfQkxFX1JFR192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyA9IFJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHX3ZhbHVlOworICAgIHJldHVybiB0cnVlOworfQorI2Vsc2UgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQiAqLworc3RhdGljIGJvb2wgaWZmX2NhbGliX2ludGVybmFsKGlmZl9tb2RlX292cl9lIHJmX21vZGVfb3ZyLCBpZmZfbW9kZV9jdHJsX2UgbW9kZV9jdHJsKQoreworICAgIHVpbnQxNl90IGNhbGNhcF9yZXN1bHQ7CisgICAgdWludDY0X3Qgc3RhcnRfdGltZTsKKworICAgIC8vIFNldCBtb2RlCisgICAgUkVHX1NFVEYoUkZDVSwgUkZfT1ZFUlJVTEVfUkVHLCBSRl9NT0RFX09WUiwgcmZfbW9kZV9vdnIpOworCisgICAgLy8gRGlzYWJsZSBhbGwgY2FsaWJyYXRpb25zIGV4Y2VwdCB0aGUgSWZmIGNhbC4KKyAgICBSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgPSAweDAwMzQ7CisKKyAgICAvLyBTZWxlY3QgdGhlIElGIGNhbGNhcCB0byB1c2UgdGhlIEZTTSB2YWx1ZQorICAgIFJFR19TRVRfQklUKFJGQ1UsIFJGX0lGRl9DVFJMMV9SRUcsIElGX1NFTEVDVF9GU00pOworCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJlZAorICAgIFJGQ1UtPlJGX0lSUV9DVFJMX1JFRyA9IDB4MDAwMDsKKworICAgIHN0YXJ0X3RpbWUgPSBod19yZl9nZXRfc3RhcnRfaWZmX3RpbWUoKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIElGRiBjYWxpYnJhdGlvbiBjYW4gYmUgc3RhcnRlZAorICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgRU9fQ0FMKSkKKyAgICB7CisgICAgICAgIGlmIChod19yZl9jaGVja19pZmZfdGltZW91dChzdGFydF90aW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSUZGIGxvY2t1cCBkZXRlY3RlZC4gQWJvcnQgKi8KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFN0YXJ0IHRoZSBJRkYgY2FsaWJyYXRpb24KKyAgICBSRUdfU0VUX0JJVChSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCk7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBJRkYgY2FsaWJyYXRpb24gaGFzIHN0YXJ0ZWQKKyAgICB3aGlsZSAoIShSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkpCisgICAgeworICAgICAgICBpZiAoaHdfcmZfY2hlY2tfaWZmX3RpbWVvdXQoc3RhcnRfdGltZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElGRiBsb2NrdXAgZGV0ZWN0ZWQuIEFib3J0ICovCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBJRkYgY2FsaWJyYXRpb24gaXMgY29tcGxldGVkCisgICAgd2hpbGUgKFJGQ1UtPlJGX0NBTF9DVFJMX1JFRyAmIFJFR19NU0soUkZDVSwgUkZfQ0FMX0NUUkxfUkVHLCBTT19DQUwpKQorICAgIHsKKyAgICAgICAgaWYgKGh3X3JmX2NoZWNrX2lmZl90aW1lb3V0KHN0YXJ0X3RpbWUpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJRkYgbG9ja3VwIGRldGVjdGVkLiBBYm9ydCAqLworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYXIgZW8tY2FsIGludGVycnVwdCwgc28gdGhhdCBuZXcgY2FsaWJyYXRpb24gY2FuIGJlIHN0YXJ0ZWQKKyAgICBSRkNVLT5SRl9JUlFfQ1RSTF9SRUcgPSAweDAwMDA7CisKKyAgICAvLyBTdG9yZSB0aGUgcmVzdWx0IHRvIGFsbCBJRkYgQ0MgQkxFIHJlZ2lzdGVycworICAgIGNhbGNhcF9yZXN1bHQgPSBSRkNVLT5SRl9JRkZfQ0FMX0NBUF9TVEFUX1JFRzsKKworICAgIGlmIChtb2RlX2N0cmwgIT0gSUZGX01PREVfQ1RSTF9DT01CTyB8fCByZl9tb2RlX292ciA9PSBJRkZfTU9ERV9PVlJfQkxFKQorICAgIHsKKyAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0JMRV9TRVQxX1JFRyA9IGNhbGNhcF9yZXN1bHQ7CisgICAgICAgIFJGQ1UtPlJGX0lGRl9DQ19CTEVfU0VUMl9SRUcgPSBjYWxjYXBfcmVzdWx0OworICAgIH0KKworICAgIHN3aXRjaCAobW9kZV9jdHJsKQorICAgIHsKKyAgICBjYXNlIElGRl9NT0RFX0NUUkxfQkxFOiAvLyBCTEUKKyAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMV9SRUcgPSBjYWxjYXBfcmVzdWx0IC0gMjsKKyAgICAgICAgUkZDVS0+UkZfSUZGX0NDX0ZUREZfU0VUMl9SRUcgPSBjYWxjYXBfcmVzdWx0IC0gMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElGRl9NT0RFX0NUUkxfRlRERjogLy8gRlRERgorICAgICAgICBSRkNVLT5SRl9JRkZfQ0NfRlRERl9TRVQxX1JFRyA9IGNhbGNhcF9yZXN1bHQgKyAyOworICAgICAgICBSRkNVLT5SRl9JRkZfQ0NfRlRERl9TRVQyX1JFRyA9IGNhbGNhcF9yZXN1bHQgKyAyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSUZGX01PREVfQ1RSTF9DT01CTzogLy8gQ09NQk8KKyAgICAgICAgaWYgKHJmX21vZGVfb3ZyID09IElGRl9NT0RFX09WUl9GVERGKQorICAgICAgICB7CisgICAgICAgICAgICBSRkNVLT5SRl9JRkZfQ0NfRlRERl9TRVQxX1JFRyA9IGNhbGNhcF9yZXN1bHQ7CisgICAgICAgICAgICBSRkNVLT5SRl9JRkZfQ0NfRlRERl9TRVQyX1JFRyA9IGNhbGNhcF9yZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaHdfcmZfaWZmX2NhbGlicmF0aW9uKGlmZl9tb2RlX2N0cmxfZSBtb2RlX2N0cmwpCit7CisgICAgYm9vbCByZXQ7CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLyBDYXBhY2l0YW5jZSBjYWxpYnJhdGlvbiBmb3IgZGlmZmVyZW50IG1vZGVzCisgICAgLy8vIG1vZGVfY3RybD0wIDogQ2FsaWJyYXRpb24gaW4gQkxFIG1vZGUsIHVzZSBvZmZzZXR0ZWQgdmFsdWVzIGluIEZUREYKKyAgICAvLy8gbW9kZV9jdHJsPTEgOiBDYWxpYnJhdGlvbiBpbiBGVERGIG1vZGUsIHVzZSBvZmZzZXR0ZWQgdmFsdWVzIGluIEJMRQorICAgIC8vLyBtb2RlX2N0cmw9MiA6IENhbGlicmF0aW9uIGRvbmUgaW4gQkxFIG1vZGUgYW5kIEZUREYgbW9kZQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworICAgIC8vIFNhdmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgdWludDE2X3QgcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsID0gUkZDVS0+UkZfQ0FMX0NUUkxfUkVHOworICAgIHVpbnQxNl90IHJmX292ZXJydWxlX3JlZ192YWx1ZV9sb2NhbCA9IFJGQ1UtPlJGX09WRVJSVUxFX1JFRzsKKyAgICB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnMF9yZWdfdmFsdWUgPSBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9SRUc7CisgICAgdWludDE2X3QgcmZfZW5hYmxlX2NvbmZpZzFfcmVnX3ZhbHVlID0gUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfUkVHOworICAgIHVpbnQxNl90IHJmX2VuYWJsZV9jb25maWcyX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX1JFRzsKKyAgICB1aW50MTZfdCByZl9lbmFibGVfY29uZmlnNDZfYmxlX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9CTEVfUkVHOworICAgIHVpbnQxNl90IHJmX2VuYWJsZV9jb25maWc0Nl9mdGRmX3JlZ192YWx1ZSA9IFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRzsKKyAgICB1aW50MTZfdCByZl9kY19vZmZzZXRfY3RybDJfcmVnX3ZhbHVlID0gREVNLT5SRl9EQ19PRkZTRVRfQ1RSTDJfUkVHOworCisgICAgLy8gUmVxdWlyZWQgc2V0dGluZyBmb3IgdGhlIERDLW9mZnNldCBjYWxpYnJhdGlvbgorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcwX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9MRE8KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMV9SRUcgPSAweDAwMDA7ICAgLy8gRGlzYWJsZSBMTkFfQ09SRQorICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX1JFRyA9IDB4MDAwMDsgICAvLyBEaXNhYmxlIExOQV9DR00KKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyA9IDB4MDAwMDsgICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgRENGIHRyaWdnZXJlZCBQYXJ0aWFsIERDT0MKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfRlRERl9SRUcgPSAweDAwMDA7ICAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIERDRiB0cmlnZ2VyZWQgUGFydGlhbCBEQ09DCisgICAgUkVHX1NFVEYoREVNLCBSRl9EQ19PRkZTRVRfQ1RSTDJfUkVHLCBEQ1BBUkNBTF9FTiwgMHgwKTsKKworCisgICAgc3dpdGNoIChtb2RlX2N0cmwpCisgICAgeworICAgIGNhc2UgSUZGX01PREVfQ1RSTF9CTEU6IC8vIEJMRQorICAgICAgICByZXQgPSBpZmZfY2FsaWJfaW50ZXJuYWwoSUZGX01PREVfT1ZSX0JMRSwgSUZGX01PREVfQ1RSTF9CTEUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSUZGX01PREVfQ1RSTF9GVERGOiAvLyBGVERGCisgICAgICAgIHJldCA9IGlmZl9jYWxpYl9pbnRlcm5hbChJRkZfTU9ERV9PVlJfRlRERiwgSUZGX01PREVfQ1RSTF9GVERGKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElGRl9NT0RFX0NUUkxfQ09NQk86IC8vIENPTUJPCisgICAgICAgIHJldCA9IGlmZl9jYWxpYl9pbnRlcm5hbChJRkZfTU9ERV9PVlJfQkxFLCBJRkZfTU9ERV9DVFJMX0NPTUJPKTsKKworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gaWZmX2NhbGliX2ludGVybmFsKElGRl9NT0RFX09WUl9GVERGLCBJRkZfTU9ERV9DVFJMX0NPTUJPKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghcmV0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc3RvcmUgdGhlIHZhbHVlcyBvZiByZWdpc3RlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgUkZDVS0+UkZfQ0FMX0NUUkxfUkVHID0gcmZfY2FsX2N0cmxfcmVnX3ZhbHVlX2xvY2FsOworICAgIFJGQ1UtPlJGX09WRVJSVUxFX1JFRyA9IHJmX292ZXJydWxlX3JlZ192YWx1ZV9sb2NhbDsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHMF9SRUcgPSByZl9lbmFibGVfY29uZmlnMF9yZWdfdmFsdWU7CisgICAgUkZDVV9QT1dFUi0+UkZfRU5BQkxFX0NPTkZJRzFfUkVHID0gcmZfZW5hYmxlX2NvbmZpZzFfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUcyX1JFRyA9IHJmX2VuYWJsZV9jb25maWcyX3JlZ192YWx1ZTsKKyAgICBSRkNVX1BPV0VSLT5SRl9FTkFCTEVfQ09ORklHNDZfQkxFX1JFRyA9IHJmX2VuYWJsZV9jb25maWc0Nl9ibGVfcmVnX3ZhbHVlOworICAgIFJGQ1VfUE9XRVItPlJGX0VOQUJMRV9DT05GSUc0Nl9GVERGX1JFRyA9IHJmX2VuYWJsZV9jb25maWc0Nl9mdGRmX3JlZ192YWx1ZTsKKyAgICBERU0tPlJGX0RDX09GRlNFVF9DVFJMMl9SRUcgPSByZl9kY19vZmZzZXRfY3RybDJfcmVnX3ZhbHVlOworCisgICAgLy8gRGUtc2VsZWN0IHRoZSBJRiBjYWxjYXAgdG8gdXNlIHRoZSBGU00gdmFsdWUKKyAgICBSRUdfQ0xSX0JJVChSRkNVLCBSRl9JRkZfQ1RSTDFfUkVHLCBJRl9TRUxFQ1RfRlNNKTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jvb2wgaHdfcmZfY2FsaWJyYXRpb24odm9pZCkKK3sKKyAgICBib29sIGlmZl9yZXN1bHQ7CisKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBod19yZl9kY19vZmZzZXRfY2FsaWJyYXRpb24oKTsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgaWZmX3Jlc3VsdCA9IGh3X3JmX2lmZl9jYWxpYnJhdGlvbigpOworI2Vsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikgJiYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyAgICBpZmZfcmVzdWx0ID0gaHdfcmZfaWZmX2NhbGlicmF0aW9uKDB4Mik7CisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0VfQkxFKQorICAgIGlmZl9yZXN1bHQgPSBod19yZl9pZmZfY2FsaWJyYXRpb24oMHgwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1VTRV9GVERGKQorICAgIGlmZl9yZXN1bHQgPSBod19yZl9pZmZfY2FsaWJyYXRpb24oMHgxKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBpZiAoaWZmX3Jlc3VsdCkKKyAgICB7CisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisgICAgICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbigwKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0VfQkxFCisgICAgICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbigxKTsKKyNlbmRpZgorICAgIH0KKworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworCisgICAgcmV0dXJuIGlmZl9yZXN1bHQ7Cit9CisKK3ZvaWQgaHdfcmZfcmVxdWVzdF9vbihib29sIG1vZGVfYmxlKQoreworICAgIC8qIEZpcnN0IFJGIHJlcXVlc3Rlci4gU3dpdGNoIGl0IG9uICovCisgICAgaWYgKHJmX3JlcXVlc3QgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChyZl9zdGF0ZSA9PSBSRl9TVF9PRkYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3JmX3Bvd2Vyb24oKTsKKyAgICAgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfT047CisjaWYgZGdfY29uZmlnQ09FWF9FTkFCTEVfQ09ORklHID09IDEKKyAgICAgICAgICAgIGh3X2NvZXhfYXBwbHlfY29uZmlnKCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtb2RlX2JsZSkKKyAgICB7CisgICAgICAgIHJmX3JlcXVlc3QgfD0gUkZfUkVRVUVTVF9CTEVfT047CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJmX3JlcXVlc3QgfD0gUkZfUkVRVUVTVF9GVERGX09OOworICAgIH0KKworfQorCisKK3ZvaWQgaHdfcmZfcmVxdWVzdF9vZmYoYm9vbCBtb2RlX2JsZSkKK3sKKyAgICBpZiAobW9kZV9ibGUpCisgICAgeworICAgICAgICByZl9yZXF1ZXN0ICY9IH5SRl9SRVFVRVNUX0JMRV9PTjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmZfcmVxdWVzdCAmPSB+UkZfUkVRVUVTVF9GVERGX09OOworICAgIH0KKworICAgIC8qIElmIG5vdCBhbHJlYWR5IG9mZiBvciBkdXJpbmcgcmVjYWxpYnJhdGlvbi4uLiAqLworICAgIGlmIChyZl9zdGF0ZSA9PSBSRl9TVF9PTiB8fCByZl9zdGF0ZSA9PSBSRl9TVF9DT05GSUcpCisgICAgeworICAgICAgICAvKiBJZiBub3QgUkYgcmVxdWVzdGVycyByZW1haW4sIHN3aXRjaCBpdCBvZmYgKi8KKyAgICAgICAgaWYgKHJmX3JlcXVlc3QgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSWYgdXNlciBwcmUtb2ZmIGNiIHJldHVybnMgdHJ1ZSwgZG9uJ3Qgc2h1dGRvd24gKi8KKyAgICAgICAgICAgIGlmIChod19yZl9wcmVvZmZfY2IoKSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBod19yZl9wb3dlcm9mZigpOworICAgICAgICAgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfT0ZGOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKK2Jvb2wgaHdfcmZfc3RhcnRfY2FsaWJyYXRpb24oKQoreworICAgIGJvb2wgaWZmX3Jlc3VsdDsKKworICAgIGlmIChyZl9zdGF0ZSA9PSBSRl9TVF9DT05GSUcpCisgICAgeworICAgICAgICAvKiBDYWxsIHByZS1jYWxpYnJhdGlvbiB1c2VyIGNiICovCisgICAgICAgIGh3X3JmX3ByZWNhbGliX2NiKCk7CisKKyAgICAgICAgLyogZm9yY2UgUkFESU9fQlVTWSB0byBCTEUgdG8gMCAqLworICAgICAgICBSRUdfU0VURihDT0VYLCBDT0VYX0NUUkxfUkVHLCBTRUxfQkxFX1JBRElPX0JVU1ksIDEpOworICAgICAgICAvKiBJZ25vcmUgQkxFL0ZUREYgVFgvUlhfRU4gKi8KKyAgICAgICAgUkVHX1NFVF9CSVQoQ09FWCwgQ09FWF9DVFJMX1JFRywgSUdOT1JFX0JMRSk7CisgICAgICAgIFJFR19TRVRfQklUKENPRVgsIENPRVhfQ1RSTF9SRUcsIElHTk9SRV9GVERGKTsKKworICAgICAgICAvKiBXYWl0IHVudGlsIERDRnMgaGF2ZSBzZXR0bGVkICovCisgICAgICAgIHdoaWxlIChSRUdfR0VURihDT0VYLCBDT0VYX1NUQVRfUkVHLCBDT0VYX1JBRElPX0JVU1kpKTsKKworICAgICAgICAvKiBQZXJmb3JtIERDIG9mZnNldCBjYWxpYnJhdGlvbiAqLworICAgICAgICBod19yZl9kY19vZmZzZXRfY2FsaWJyYXRpb24oKTsKKworICAgICAgICAvKiBQZXJmb3JtIElGRiBjYWxpYnJhdGlvbiAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgaWZmX3Jlc3VsdCA9IGh3X3JmX2lmZl9jYWxpYnJhdGlvbigpOworI2Vsc2UgLyogQkxBQ0tfT1JDQV9JQ19SRVZfQiAqLworI2lmIGRlZmluZWQoQ09ORklHX1VTRV9GVERGKSAmJiBkZWZpbmVkKENPTkZJR19VU0VfQkxFKQorICAgICAgICBpZmZfcmVzdWx0ID0gaHdfcmZfaWZmX2NhbGlicmF0aW9uKDB4Mik7CisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0VfQkxFKQorICAgICAgICBpZmZfcmVzdWx0ID0gaHdfcmZfaWZmX2NhbGlicmF0aW9uKDB4MCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikKKyAgICAgICAgaWZmX3Jlc3VsdCA9IGh3X3JmX2lmZl9jYWxpYnJhdGlvbigweDEpOworI2VuZGlmCisjZW5kaWYKKworICAgICAgICBpZiAoaWZmX3Jlc3VsdCA9PSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgTlZJQ19FbmFibGVJUlEoUkZDQUxfSVJRbik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0VfRlRERikgJiYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyAgICAgICAgLyogU3RhcnQgdGhlIGdhaW4gY2FsaWJyYXRpb24sIG9uIGZ0ZGYgbW9kZSAqLworICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fc3RhcnQoMCk7CisgICAgICAgIHJmX3N0YXRlID0gUkZfU1RfV0FJVF9ORVhUMTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1VTRV9GVERGKQorICAgICAgICAvKiBTdGFydCB0aGUgZ2FpbiBjYWxpYnJhdGlvbiwgb24gZnRkZiBtb2RlICovCisgICAgICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9zdGFydCgwKTsKKyAgICAgICAgcmZfc3RhdGUgPSBSRl9TVF9XQUlUX05FWFQyOworI2VsaWYgZGVmaW5lZChDT05GSUdfVVNFX0JMRSkKKyAgICAgICAgLyogU3RhcnQgdGhlIGdhaW4gY2FsaWJyYXRpb24sIG9uIGJsZSBtb2RlICovCisgICAgICAgIGh3X3JmX21vZHVsYXRpb25fZ2Fpbl9jYWxpYnJhdGlvbl9zdGFydCgxKTsKKyAgICAgICAgcmZfc3RhdGUgPSBSRl9TVF9XQUlUX05FWFQyOworI2VuZGlmCisKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSRkNBTF9IYW5kbGVyKHZvaWQpCit7CisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCk7CisKKyAgICB1aW50MzJfdCBpc2VyOworCisgICAgLyogSW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkLiBIb3dldmVyLCBzb21lIGNhbGxiYWNrcyBhY3R1YWxseQorICAgICAqIHVzZSBGcmVlUlRPUyBjcml0aWNhbCBzZWN0aW9ucy4gVG8gb3ZlcmNvbWUgdGhpcyBwcm9ibGVtLiB1c2UKKyAgICAgKiBJU0VSL0lDRVIgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJydXB0cworICAgICAqLworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIGlzZXIgPSBOVklDLT5JU0VSWzBdOzsKKyAgICBOVklDLT5JQ0VSWzBdID0gaXNlcjsKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIHN3aXRjaCAocmZfc3RhdGUpCisgICAgeworICAgIGNhc2UgUkZfU1RfV0FJVF9ORVhUMToKKworICAgICAgICAvKiBGVERGIGdhaW4gY2FsaWIgKGJvb3QpIGNvbXBsZXRlZC4gUHJvY2VlZCB3aXRoIGJsZSBnYWluCisgICAgICAgICAqIGNhbGliCisgICAgICAgICAqLworICAgICAgICB3aGlsZSAoUkZDVS0+UkZfQ0FMX0NUUkxfUkVHICYgUkVHX01TSyhSRkNVLCBSRl9DQUxfQ1RSTF9SRUcsIFNPX0NBTCkpIHt9CisKKyAgICAgICAgaHdfcmZfbW9kdWxhdGlvbl9nYWluX2NhbGlicmF0aW9uX2VuZCgpOworCisgICAgICAgIC8qIE1ha2Ugc3VyZSBSRkNBTCBJUlEgd2lsbCBiZSBlbmFibGVkIHdoZW4gaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLworICAgICAgICBpc2VyIHw9ICgodWludDMyX3QpKDEgPDwgUkZDQUxfSVJRbikpOworCisgICAgICAgIC8qIFN0YXJ0IHRoZSBnYWluIGNhbGlicmF0aW9uLCBvbiBibGUgbW9kZSAqLworICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fc3RhcnQoMSk7CisKKyAgICAgICAgcmZfc3RhdGUgPSBSRl9TVF9XQUlUX05FWFQyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUkZfU1RfV0FJVF9ORVhUMjoKKworICAgICAgICAvKiBCTEUgKG9yIGZ0ZGYpIGdhaW4gY2FsaWIgKGJvb3QpIGNvbXBsZXRlZC4KKyAgICAgICAgICovCisgICAgICAgIHdoaWxlIChSRkNVLT5SRl9DQUxfQ1RSTF9SRUcgJiBSRUdfTVNLKFJGQ1UsIFJGX0NBTF9DVFJMX1JFRywgU09fQ0FMKSkge30KKworICAgICAgICBod19yZl9tb2R1bGF0aW9uX2dhaW5fY2FsaWJyYXRpb25fZW5kKCk7CisKKyAgICAgICAgLyogTWFrZSBzdXJlIFJGQ0FMIElSUSB3aWxsIGJlIGRpc2FibGVkIHdoZW4gaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLworICAgICAgICBpc2VyICY9IH4oKHVpbnQzMl90KSgxIDw8IFJGQ0FMX0lSUW4pKTsKKworICAgICAgICAvKiBSZXN0b3JlIHN0YXRlIHRvIG5vcm1hbCBCTEUvRlRERiBNQUMgb3BlcmF0aW9uICovCisgICAgICAgIFJFR19DTFJfQklUKENPRVgsIENPRVhfQ1RSTF9SRUcsIElHTk9SRV9CTEUpOworICAgICAgICBSRUdfQ0xSX0JJVChDT0VYLCBDT0VYX0NUUkxfUkVHLCBJR05PUkVfRlRERik7CisgICAgICAgIFJFR19TRVRGKENPRVgsIENPRVhfQ1RSTF9SRUcsIFNFTF9CTEVfUkFESU9fQlVTWSwgMCk7CisKKyAgICAgICAgLyogQ2FsaWJyYXRpb24gY29tcGxldGUuICovCisgICAgICAgIC8qIENhbGwgcG9zdC1jYWxpYnJhdGlvbiB1c2VyIGNiICovCisgICAgICAgIGh3X3JmX3Bvc3RjYWxpYl9jYigpOworCisgICAgICAgIC8qIENoZWNrIGlmIFJGIGlzIHN0aWxsIG5lZWRlZCBvbiwKKyAgICAgICAgICogb3RoZXJ3aXNlLCBzd2l0Y2ggaXQgb2ZmCisgICAgICAgICAqLworICAgICAgICBpZiAocmZfcmVxdWVzdCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBod19yZl9wb3dlcm9mZigpOworICAgICAgICAgICAgcmZfc3RhdGUgPSBSRl9TVF9PRkY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZl9zdGF0ZSA9IFJGX1NUX0NPTkZJRzsKKyAgICAgICAgICAgIGh3X3JmX3Bvc3Rjb25mX2NiKCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisgICAgTlZJQy0+SVNFUlswXSA9IGlzZXI7CisKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpOworfQorCit2b2lkIGh3X3JmX3JlcXVlc3RfcmVjb21tZW5kZWRfc2V0dGluZ3Modm9pZCkKK3sKKyAgICBpZiAocmZfc3RhdGUgPT0gUkZfU1RfT04pCisgICAgeworICAgICAgICBod19yZl9hcHBseV90Y3NfY2IoKTsKKyAgICAgICAgaHdfcmZfc2V0X3JlY29tbWVuZGVkX3NldHRpbmdzKCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBUWCBQb3dlciBMVVRzICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICBod19yZl9zZXRfdHhfcG93ZXIocmZfdHhfcG93ZXJfbHV0cy50eF9wb3dlcl9ibGUpOworI2Vsc2UKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorICAgICAgICBod19yZl9zZXRfdHhfcG93ZXJfYmxlKHJmX3R4X3Bvd2VyX2x1dHMudHhfcG93ZXJfYmxlKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0VfRlRERgorICAgICAgICBod19yZl9zZXRfdHhfcG93ZXJfZnRkZihyZl90eF9wb3dlcl9sdXRzLnR4X3Bvd2VyX2Z0ZGYpOworI2VuZGlmCisjZW5kaWYKKworICAgICAgICByZl9zdGF0ZSA9IFJGX1NUX0NPTkZJRzsKKyAgICAgICAgaHdfcmZfcG9zdGNvbmZfY2IoKTsKKyAgICB9Cit9CisKK2Jvb2wgX19hdHRyaWJ1dGVfXygod2VhaykpIGh3X3JmX3ByZW9mZl9jYih2b2lkKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBod19yZl9zdGFydF9jb250aW51b3VzX3dhdmUodWludDhfdCBtb2RlLCB1aW50OF90IGNoKQoreworICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgVFhfRU5fT1ZSLCAxKTsgIC8vIGRpc2FibGUgVFggb3ZlcnJ1bGUKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFRYX0VOX09WUiwgMCk7ICAvLyBOT1JNQUwgVFgKKworICAgIFJFR19TRVRGKFBMTERJRywgUkZfQk1DV19SRUcsIENOX1NFTCwgMSk7CisgICAgUkVHX1NFVEYoUExMRElHLCBSRl9CTUNXX1JFRywgQ05fV1IsIGNoKTsKKworICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgUkZfTU9ERV9PVlIsIG1vZGUpOworICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgVFhfRU5fT1ZSLCAyKTsgIC8vIE9WRVJSVUxFIFRYIEVOQUJMRUQKK30KKwordm9pZCBod19yZl9zdG9wX2NvbnRpbnVvdXNfd2F2ZSh2b2lkKQoreworICAgIFJFR19TRVRGKFBMTERJRywgUkZfQk1DV19SRUcsIENOX1NFTCwgMCk7CisgICAgUkVHX1NFVEYoUExMRElHLCBSRl9CTUNXX1JFRywgQ05fV1IsICAwKTsKKworICAgIFJFR19TRVRGKFJGQ1UsIFJGX09WRVJSVUxFX1JFRywgVFhfRU5fT1ZSLCAxKTsgIC8vIGRpc2FibGUgVFggb3ZlcnJ1bGUKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFRYX0VOX09WUiwgMCk7ICAvLyBOT1JNQUwgVFgKKyAgICBSRUdfU0VURihSRkNVLCBSRl9PVkVSUlVMRV9SRUcsIFJGX01PREVfT1ZSLCAwKTsgLy8gTk9STUFMIFJGIG1vZGUsIHNvIGRpc2FibGUgQkxFIG1vZGUKK30KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3ZvaWQgaHdfcmZfc2V0X3R4X3Bvd2VyKEhXX1JGX1BXUl9MVVRfU0VUVElORyBsdXQpCit7CisgICAgUkZDVS0+UkZfVFhfUFdSX1JFRyA9IGx1dDsKKyAgICByZl90eF9wb3dlcl9sdXRzLnR4X3Bvd2VyX2JsZSA9IGx1dDsKK30KKyNlbHNlCisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQordm9pZCBod19yZl9zZXRfdHhfcG93ZXJfYmxlKEhXX1JGX1BXUl9MVVRfU0VUVElORyBsdXQpCit7CisgICAgUkZDVS0+UkZfVFhfUFdSX0JMRV9SRUcgPSBsdXQ7CisgICAgcmZfdHhfcG93ZXJfbHV0cy50eF9wb3dlcl9ibGUgPSBsdXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfRlRERgordm9pZCBod19yZl9zZXRfdHhfcG93ZXJfZnRkZihIV19SRl9QV1JfTFVUX1NFVFRJTkcgbHV0KQoreworICAgIFJGQ1UtPlJGX1RYX1BXUl9GVERGX1JFRyA9IGx1dDsKKyAgICByZl90eF9wb3dlcl9sdXRzLnR4X3Bvd2VyX2Z0ZGYgPSBsdXQ7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfUkYgKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfdGltZXIwLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfdGltZXIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjZmY0YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190aW1lcjAuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoqCisgKiBcYWRkdG9ncm91cCBCU1AKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBERVZJQ0VTCisgKiBceworICogXGFkZHRvZ3JvdXAgVGltZXIwCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod190aW1lcjAuYworICoKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGltZXIwIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZiBkZ19jb25maWdVU0VfSFdfVElNRVIwCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2RrX2RlZnMuaD4KKyNpbmNsdWRlIDxod190aW1lcjAuaD4KKworI2lmIChkZ19jb25maWdTWVNURU1WSUVXKQorIyAgaW5jbHVkZSAiU0VHR0VSX1NZU1ZJRVdfRnJlZVJUT1MuaCIKKyNlbHNlCisjICBkZWZpbmUgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCkKKyMgIGRlZmluZSBTRUdHRVJfU1lTVEVNVklFV19JU1JfRVhJVCgpCisjZW5kaWYKKworc3RhdGljIGh3X3RpbWVyMF9pbnRlcnJ1cHRfY2IgaW50cl9jYjsKKwordm9pZCBod190aW1lcjBfaW5pdChjb25zdCB0aW1lcjBfY29uZmlnICpjZmcpCit7CisgICAgLyogRW5hYmxlIGNsb2NrIGZvciBwZXJpcGhlcmFsICovCisgICAgdWludDMyX3QgY2xrX3Rtcl9yZWcgPSBDUkdfVE9QLT5DTEtfVE1SX1JFRzsKKyAgICBjbGtfdG1yX3JlZyAmPSB+Q1JHX1RPUF9DTEtfVE1SX1JFR19UTVIwX0RJVl9Nc2s7CisgICAgY2xrX3Rtcl9yZWcgJj0gfkNSR19UT1BfQ0xLX1RNUl9SRUdfVE1SMF9DTEtfU0VMX01zazsKKyAgICBjbGtfdG1yX3JlZyB8PSBDUkdfVE9QX0NMS19UTVJfUkVHX1RNUjBfRU5BQkxFX01zazsKKyAgICBDUkdfVE9QLT5DTEtfVE1SX1JFRyA9IGNsa190bXJfcmVnIDsKKworICAgIC8qIFJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIsIGkuZS4gZGlzYWJsZSB0aW1lciAqLworICAgIEdQX1RJTUVSUy0+VElNRVIwX0NUUkxfUkVHID0gMHgwOworCisgICAgLyogRGlzYWJsZSBOVklDIGludGVycnVwdCAqLworICAgIE5WSUNfRGlzYWJsZUlSUShTV1RJTTBfSVJRbik7CisKKyAgICBpbnRyX2NiID0gTlVMTDsKKworICAgIGh3X3RpbWVyMF9jb25maWd1cmUoY2ZnKTsKK30KKwordm9pZCBod190aW1lcjBfY29uZmlndXJlKGNvbnN0IHRpbWVyMF9jb25maWcgKmNmZykKK3sKKyAgICBpZiAoY2ZnKQorICAgIHsKKyAgICAgICAgaHdfdGltZXIwX3NldF9jbG9ja19zb3VyY2UoY2ZnLT5jbGtfc3JjKTsKKyAgICAgICAgaHdfdGltZXIwX3NldF9mYXN0X2Nsb2NrX2RpdihjZmctPmZhc3RfY2xrX2Rpdik7CisgICAgICAgIGh3X3RpbWVyMF9zZXRfb25fY2xvY2tfZGl2KGNmZy0+b25fY2xvY2tfZGl2KTsKKyAgICAgICAgaHdfdGltZXIwX3NldF9vbl9yZWxvYWQoY2ZnLT5vbl9yZWxvYWQpOworICAgICAgICBod190aW1lcjBfc2V0X3QwX3JlbG9hZChjZmctPnQwX3JlbG9hZF9tLCBjZmctPnQwX3JlbG9hZF9uKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfdGltZXIwX3JlZ2lzdGVyX2ludChod190aW1lcjBfaW50ZXJydXB0X2NiIGhhbmRsZXIpCit7CisgICAgaW50cl9jYiA9IGhhbmRsZXI7CisgICAgTlZJQ19FbmFibGVJUlEoU1dUSU0wX0lSUW4pOworfQorCit2b2lkIGh3X3RpbWVyMF91bnJlZ2lzdGVyX2ludCh2b2lkKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShTV1RJTTBfSVJRbik7CisgICAgaW50cl9jYiA9IE5VTEw7Cit9CisKK3ZvaWQgU1dUSU0wX0hhbmRsZXIodm9pZCkKK3sKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKTsKKworICAgIGlmIChpbnRyX2NiKQorICAgIHsKKyAgICAgICAgaW50cl9jYigpOworICAgIH0KKworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCk7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVU0VfSFdfVElNRVIwICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3RybmcuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190cm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzZGVjYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od190cm5nLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod190cm5nLmMKKyAqCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgdGhlIFRydWUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgTG93IExldmVsIERyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9IV19UUk5HCisKKyNpbmNsdWRlIDxod190cm5nLmg+CisKKyNpZiAoZGdfY29uZmlnU1lTVEVNVklFVykKKyMgIGluY2x1ZGUgIlNFR0dFUl9TWVNWSUVXX0ZyZWVSVE9TLmgiCisjZWxzZQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FTlRFUigpCisjICBkZWZpbmUgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VYSVQoKQorI2VuZGlmCisKKyNkZWZpbmUgSFdfVFJOR19GSUZPX0RFUFRIICAgICAgKDMyKQorCitzdGF0aWMgaHdfdHJuZ19jYiB0cm5nX2NiOworCit2b2lkIGh3X3RybmdfZGlzYWJsZV9jbGsodm9pZCkKK3sKKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICBSRUdfQ0xSX0JJVChDUkdfVE9QLCBDTEtfQU1CQV9SRUcsIFRSTkdfQ0xLX0VOQUJMRSk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKK3ZvaWQgaHdfdHJuZ19jbGVhcl9wZW5kaW5nKHZvaWQpCit7CisgICAgdWludDMyX3QgZHVtbXkgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CisgICAgLyogcmVhZCBUUk5HX0ZJRk9MVkxfUkVHIHRvIGNsZWFyIGxldmVsLXNlbnNpdGl2ZSBzb3VyY2UuICovCisgICAgZHVtbXkgPSBUUk5HLT5UUk5HX0ZJRk9MVkxfUkVHOworICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFRSTkdfSVJRbik7Cit9CisKK3ZvaWQgaHdfdHJuZ19lbmFibGUoaHdfdHJuZ19jYiBjYWxsYmFjaykKK3sKKyAgICBpZiAoY2FsbGJhY2sgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRybmdfY2IgPSBjYWxsYmFjazsKKyAgICAgICAgaHdfdHJuZ19jbGVhcl9wZW5kaW5nKCk7CisgICAgICAgIE5WSUNfRW5hYmxlSVJRKFRSTkdfSVJRbik7CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgQ0xLX0FNQkFfUkVHLCBUUk5HX0NMS19FTkFCTEUpOworICAgIEdMT0JBTF9JTlRfUkVTVE9SRSgpOworICAgIFJFR19TRVRfQklUKFRSTkcsIFRSTkdfQ1RSTF9SRUcsIFRSTkdfRU5BQkxFKTsKK30KKwordm9pZCBod190cm5nX2dldF9udW1iZXJzKHVpbnQzMl90ICpidWZmZXIsIHVpbnQ4X3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA+IEhXX1RSTkdfRklGT19ERVBUSCkKKyAgICB7CisgICAgICAgIHNpemUgPSBIV19UUk5HX0ZJRk9fREVQVEg7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIDsgaSsrKQorICAgIHsKKyAgICAgICAgYnVmZmVyW2ldID0gaHdfdHJuZ19nZXRfbnVtYmVyKCk7CisgICAgfQorfQorCitfX1JFVEFJTkVEX0NPREUgdWludDhfdCBod190cm5nX2dldF9maWZvX2xldmVsKHZvaWQpCit7CisgICAgcmV0dXJuIChUUk5HLT5UUk5HX0ZJRk9MVkxfUkVHKSAmIChSRUdfTVNLKFRSTkcsIFRSTkdfRklGT0xWTF9SRUcsIFRSTkdfRklGT0xWTCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX01TSyhUUk5HLCBUUk5HX0ZJRk9MVkxfUkVHLCBUUk5HX0ZJRk9GVUxMKSk7Cit9CisKK3ZvaWQgaHdfdHJuZ19kaXNhYmxlX2ludGVycnVwdCh2b2lkKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShUUk5HX0lSUW4pOworICAgIHRybmdfY2IgPSBOVUxMOworfQorCit2b2lkIGh3X3RybmdfZGlzYWJsZSh2b2lkKQoreworICAgIGh3X3Rybmdfc3RvcCgpOworICAgIGh3X3RybmdfZGlzYWJsZV9pbnRlcnJ1cHQoKTsKKyAgICBod190cm5nX2NsZWFyX3BlbmRpbmcoKTsKKyAgICBod190cm5nX2Rpc2FibGVfY2xrKCk7Cit9CisKK3ZvaWQgVFJOR19IYW5kbGVyKHZvaWQpCit7CisgICAgdWludDMyX3QgZHVtbXkgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7CisKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKTsKKworICAgIGlmICh0cm5nX2NiICE9IE5VTEwpCisgICAgeworICAgICAgICB0cm5nX2NiKCk7CisgICAgfQorCisgICAgLyogcmVhZCBUUk5HX0ZJRk9MVkxfUkVHIHRvIGNsZWFyIGxldmVsLXNlbnNpdGl2ZSBzb3VyY2UuICovCisgICAgZHVtbXkgPSBUUk5HLT5UUk5HX0ZJRk9MVkxfUkVHOworCisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VYSVQoKTsKK30KKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19UUk5HICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfdWFydC5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDYyYjViCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3VhcnQuYwpAQCAtMCwwICsxLDE2MDMgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFVBUlQKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3VhcnQuYworICoKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVUFSVCBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWYgZGdfY29uZmlnVVNFX0hXX1VBUlQKKworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y29yZV9jbTAuaD4KKyNpbmNsdWRlIDxod191YXJ0Lmg+CisKKyNpZiAoZGdfY29uZmlnU1lTVEVNVklFVykKKyMgIGluY2x1ZGUgIlNFR0dFUl9TWVNWSUVXX0ZyZWVSVE9TLmgiCisjZWxzZQorIyAgZGVmaW5lIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FTlRFUigpCisjICBkZWZpbmUgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VYSVQoKQorI2VuZGlmCisKKyNpZiAoZGdfY29uZmlnVUFSVDFfU09GVFdBUkVfRklGT19TSVpFICYmIGRnX2NvbmZpZ1VBUlRfU09GVFdBUkVfRklGTykKKyNpZiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQSAmJiAoZGdfY29uZmlnVUFSVDFfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFID4gMCkKKyNlcnJvciBVQVJUMSBjYW4gbm90IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHNvZnR3YXJlIEZJRk8gYW5kIGNpcmN1bGFyIERNQSBGSUZPIGF0IHRoZSBzYW1lIHRpbWUKKyNlbmRpZgorX19SRVRBSU5FRCBzdGF0aWMgdWludDhfdCB1YXJ0MV9zd19maWZvW2RnX2NvbmZpZ1VBUlQxX1NPRlRXQVJFX0ZJRk9fU0laRV07CisjZWxzZQorI2RlZmluZSB1YXJ0MV9zd19maWZvICAgKE5VTEwpCisjZW5kaWYKKworI2lmIChkZ19jb25maWdVQVJUMl9TT0ZUV0FSRV9GSUZPX1NJWkUgJiYgZGdfY29uZmlnVUFSVF9TT0ZUV0FSRV9GSUZPKQorI2lmIGRnX2NvbmZpZ1VBUlRfUlhfQ0lSQ1VMQVJfRE1BICYmIChkZ19jb25maWdVQVJUMl9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkUgPiAwKQorI2Vycm9yIFVBUlQyIGNhbiBub3QgYmUgY29uZmlndXJlZCB0byB1c2Ugc29mdHdhcmUgRklGTyBhbmQgY2lyY3VsYXIgRE1BIEZJRk8gYXQgdGhlIHNhbWUgdGltZQorI2VuZGlmCitfX1JFVEFJTkVEIHN0YXRpYyB1aW50OF90IHVhcnQyX3N3X2ZpZm9bZGdfY29uZmlnVUFSVDJfU09GVFdBUkVfRklGT19TSVpFXTsKKyNlbHNlCisjZGVmaW5lIHVhcnQyX3N3X2ZpZm8gICAoTlVMTCkKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnVUFSVDFfU09GVFdBUkVfRklGT19TSVpFID4gMjU1IHx8IGRnX2NvbmZpZ1VBUlQyX1NPRlRXQVJFX0ZJRk9fU0laRSA+IDI1NQordHlwZWRlZiB1aW50MTZfdCBmaWZvX3NpemVfdDsKKyNlbHNlCit0eXBlZGVmIHVpbnQ4X3QgZmlmb19zaXplX3Q7CisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ1VBUlQxX1NPRlRXQVJFX0ZJRk9fU0laRSA+IDI1NiB8fCBkZ19jb25maWdVQVJUMl9TT0ZUV0FSRV9GSUZPX1NJWkUgPiAyNTYKK3R5cGVkZWYgdWludDE2X3QgZmlmb19wdHJfdDsKKyNlbHNlCit0eXBlZGVmIHVpbnQ4X3QgZmlmb19wdHJfdDsKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKKworI2lmICFIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorIyAgICAgICBlcnJvciAiZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgcmVxdWlyZXMgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQgdG8gYmUgZW5hYmxlZCEiCisjZW5kaWYKKworI2lmIGRnX2NvbmZpZ1VBUlQxX1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRSA+IDAKK19fUkVUQUlORUQgc3RhdGljIHVpbnQ4X3QgdWFydDFfcnhfZG1hX2J1ZltkZ19jb25maWdVQVJUMV9SWF9DSVJDVUxBUl9ETUFfQlVGX1NJWkVdOworI2Vsc2UKKyNkZWZpbmUgdWFydDFfcnhfZG1hX2J1ZiAoTlVMTCkKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnVUFSVDJfUlhfQ0lSQ1VMQVJfRE1BX0JVRl9TSVpFID4gMAorX19SRVRBSU5FRCBzdGF0aWMgdWludDhfdCB1YXJ0Ml9yeF9kbWFfYnVmW2RnX2NvbmZpZ1VBUlQyX1JYX0NJUkNVTEFSX0RNQV9CVUZfU0laRV07CisjZWxzZQorI2RlZmluZSB1YXJ0Ml9yeF9kbWFfYnVmIChOVUxMKQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQSAqLworCit0eXBlZGVmIHN0cnVjdAoreworI2lmZGVmIEhXX1VBUlRfRU5BQkxFX1VTRVJfSVNSCisgICAgaHdfdWFydF9pbnRlcnJ1cHRfaXNyIHVzZXJfaXNyOworI2VuZGlmCisgICAgY29uc3QgdWludDhfdCAgICAgICAqdHhfYnVmZmVyOworICAgIHZvaWQgICAgICAgICAgICAgICAgKnR4X3VzZXJfZGF0YTsKKyAgICBod191YXJ0X3R4X2NhbGxiYWNrIHR4X2NiOworICAgIHVpbnQxNl90ICAgICAgICAgICAgdHhfbGVuOworICAgIHVpbnQxNl90ICAgICAgICAgICAgdHhfaXg7CisKKyAgICB2b2lkICAgICAgICAgICAgICAgICpyeF91c2VyX2RhdGE7CisgICAgdWludDhfdCAgICAgICAgICAgICAqcnhfYnVmZmVyOworICAgIGh3X3VhcnRfcnhfY2FsbGJhY2sgcnhfY2I7CisgICAgdWludDE2X3QgICAgICAgICAgICByeF9sZW47CisgICAgdWludDE2X3QgICAgICAgICAgICByeF9peDsKKworICAgIHVpbnQ4X3QgICAgICAgICAgICAgdHhfZmlmb19vbjogMTsKKyAgICB1aW50OF90ICAgICAgICAgICAgIHJ4X2ZpZm9fb246IDE7CisgICAgdWludDhfdCAgICAgICAgICAgICB0eF9maWZvX2xldmVsOiAyOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgcnhfZmlmb19sZXZlbDogMjsKKyNpZiBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8KKyAgICB1aW50OF90ICAgICAgICAgICAgKnJ4X3NvZnRfZmlmbzsKKyAgICBmaWZvX3NpemVfdCAgICAgICAgIHJ4X3NvZnRfZmlmb19zaXplOworICAgIGZpZm9fcHRyX3QgICAgICAgICAgcnhfc29mdF9maWZvX3JkX3B0cjsKKyAgICBmaWZvX3B0cl90ICAgICAgICAgIHJ4X3NvZnRfZmlmb193cl9wdHI7CisjZW5kaWYKKyNpZiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVAorICAgIHVpbnQ4X3QgICAgICAgICAgICAgdXNlX2RtYTogMTsKKyAgICBETUFfc2V0dXAgICAgICAgICAgIHR4X2RtYTsKKyAgICBETUFfc2V0dXAgICAgICAgICAgIHJ4X2RtYTsKKyNpZiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQQorICAgIGJvb2wgICAgICAgICAgICAgICAgcnhfZG1hX2FjdGl2ZTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICpyeF9kbWFfYnVmOworICAgIHVpbnQxNl90ICAgICAgICAgICAgcnhfZG1hX2J1Zl9zaXplOworICAgIHVpbnQxNl90ICAgICAgICAgICAgcnhfZG1hX2hlYWQ7CisjZW5kaWYgLyogZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEgKi8KKyNlbmRpZiAvKiBIV19VQVJUX1VTRV9ETUFfU1VQUE9SVCAqLworfSBVQVJUX0RhdGE7CisKK19fUkVUQUlORURfUlcgc3RhdGljIFVBUlRfRGF0YSB1YXJ0X2RhdGFbMl07CisKKyNkZWZpbmUgVUFSVF9JTlQoaWQpICgoaWQpID09IEhXX1VBUlQxID8gKFVBUlRfSVJRbikgOiAoVUFSVDJfSVJRbikpCisjZGVmaW5lIFVBUlRJWChpZCkgKChpZCkgPT0gSFdfVUFSVDEgPyAwIDogMSkKKyNkZWZpbmUgVUFSVERBVEEoaWQpICgmdWFydF9kYXRhW1VBUlRJWChpZCldKQorI2RlZmluZSBVQVJUSUQodWQpICgodWQpID09IHVhcnRfZGF0YSA/IEhXX1VBUlQxIDogSFdfVUFSVDIpCisKKyNpZmRlZiBIV19VQVJUX0VOQUJMRV9VU0VSX0lTUgordm9pZCBod191YXJ0X3NldF9pc3IoSFdfVUFSVF9JRCB1YXJ0LCBod191YXJ0X2ludGVycnVwdF9pc3IgaXNyKQoreworICAgIHVhcnRfZGF0YVtVQVJUSVgodWFydCldLnVzZXJfaXNyID0gaXNyOworfQorI2VuZGlmCisKKy8vPT09PT09PT09PT09PT09PT09PT09IFJlYWQvV3JpdGUgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3VpbnQ4X3QgaHdfdWFydF9yZWFkKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBXYWl0IHVudGlsIHJlY2VpdmVkIGRhdGEgYXJlIGF2YWlsYWJsZQorICAgIHdoaWxlIChod191YXJ0X3JlYWRfYnVmX2VtcHR5KHVhcnQpKTsKKworICAgIC8vIFJlYWQgZWxlbWVudCBmcm9tIHRoZSByZWNlaXZlIEZJRk8KKyAgICByZXR1cm4gVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUc7Cit9CisKK3ZvaWQgaHdfdWFydF93cml0ZShIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgZGF0YSkKK3sKKyAgICAvLyBXYWl0IGlmIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgaXMgZnVsbAorICAgIHdoaWxlIChod191YXJ0X3dyaXRlX2J1Zl9mdWxsKHVhcnQpKTsKKworICAgIC8vIFdyaXRlIGRhdGEgdG8gdGhlIHRyYW5zbWl0IEZJRk8KKyAgICBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRyA9IGRhdGE7Cit9CisKK3ZvaWQgaHdfdWFydF93cml0ZV9idWZmZXIoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4pCit7CisgICAgY29uc3QgdWludDhfdCAqcCA9IGRhdGE7CisKKyAgICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisgICAgICAgIGh3X3VhcnRfd3JpdGUodWFydCwgKnArKyk7CisgICAgICAgIGxlbi0tOworICAgIH0KK30KKwordm9pZCBod191YXJ0X3NlbmQoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4sIGh3X3VhcnRfdHhfY2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9ICZ1YXJ0X2RhdGFbVUFSVElYKHVhcnQpXTsKKworICAgIGlmIChjYiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaHdfdWFydF93cml0ZV9idWZmZXIodWFydCwgZGF0YSwgbGVuKTsKKyAgICAgICAgdWQtPnR4X2l4ID0gMDsKKyAgICAgICAgdWQtPnR4X2xlbiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1ZC0+dHhfYnVmZmVyID0gZGF0YTsKKyAgICB1ZC0+dHhfdXNlcl9kYXRhID0gdXNlcl9kYXRhOworICAgIHVkLT50eF9sZW4gPSBsZW47CisgICAgdWQtPnR4X2l4ID0gMDsKKyAgICB1ZC0+dHhfY2IgPSBjYjsKKworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKyAgICBpZiAodWQtPnR4X2RtYS5jaGFubmVsX251bWJlciAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEICYmIGxlbiA+IDEpCisgICAgeworICAgICAgICB1ZC0+dHhfZG1hLnNyY19hZGRyZXNzID0gKHVpbnQzMikgZGF0YTsKKyAgICAgICAgdWQtPnR4X2RtYS5sZW5ndGggPSBsZW47CisgICAgICAgIC8vIERNQSByZXF1ZXN0ZWQKKyAgICAgICAgaHdfdWFydF9jbGVhcl9kbWFfcmVxdWVzdCh1YXJ0KTsKKyAgICAgICAgaHdfZG1hX2NoYW5uZWxfaW5pdGlhbGl6YXRpb24oJnVkLT50eF9kbWEpOworICAgICAgICBod19kbWFfY2hhbm5lbF9lbmFibGUodWQtPnR4X2RtYS5jaGFubmVsX251bWJlciwgSFdfRE1BX1NUQVRFX0VOQUJMRUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKyAgICAvLyBJbnRlcnJ1cHQgZHJpdmVuCisgICAgTlZJQ19EaXNhYmxlSVJRKFVBUlRfSU5UKHVhcnQpKTsKKyAgICAvLyBFbmFibGUgdHJhbnNtaXQgaW50ZXJydXB0cworICAgIHVpbnQxNl90IGllcl9kbGhfcmVnID0gVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRzsKKyAgICBpZXJfZGxoX3JlZyB8PSAoKDEgPDwgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX0VUQkVJX2RsaDFfUG9zKSB8ICgxIDw8IFVBUlRfVUFSVF9JRVJfRExIX1JFR19QVElNRV9kbGg3X1BvcykpOworICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcgPSBpZXJfZGxoX3JlZzsKKworICAgIE5WSUNfRW5hYmxlSVJRKFVBUlRfSU5UKHVhcnQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfZW5hYmxlX3J4X2ludChIV19VQVJUX0lEIHVhcnQsIGJvb2wgZW5hYmxlKQoreworICAgIE5WSUNfRGlzYWJsZUlSUShVQVJUX0lOVCh1YXJ0KSk7CisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBJRVJfRExILCBFUkJGSV9kbGgwLCBlbmFibGUpOworICAgIE5WSUNfRW5hYmxlSVJRKFVBUlRfSU5UKHVhcnQpKTsKK30KKworI2lmIGRnX2NvbmZpZ1VBUlRfU09GVFdBUkVfRklGTworCisjZGVmaW5lIFNPRlRXQVJFX0ZJRk9fUFJFU0VOVCh1ZCkgKCh1ZCktPnJ4X3NvZnRfZmlmbyAhPSBOVUxMKQorCisvKgorICogQ29weSBieXRlcyBmcm9tIHNvZnR3YXJlIEZJRk8gdG8gdXNlciBwcm92aWRlZCBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBzb2Z0d2FyZSBGSUZPIGludGVycnVwdHMgdG8gcmVhZCBtb3JlIGRhdGEgd2hpbGUgY29weSB0YWtlcyBwbGFjZS4KKyAqCisgKiBGdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgYWxsIHJlcXVlc3RlZCBkYXRhIGlzIGFscmVhZHkgaW4gdXNlciBidWZmZXIuCisgKi8KK3N0YXRpYyBib29sIGh3X3VhcnRfZHJhaW5fcngoSFdfVUFSVF9JRCB1YXJ0LCBVQVJUX0RhdGEgKnVkLCBpbnQgbGVuKQoreworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBSWCBpbnRlcnJ1cHQgZGlzYWJsZWQuCisgICAgICoKKyAgICAgKiBHZXQgY3VycmVudCBzb2Z0d2FyZSBGSUZPIHBvaW50ZXJzIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHQgYWdhaW4uCisgICAgICogdWQtPnJ4X2xlbiBpcyBzdGlsbCBzZXQgdG8gMCwgc28gaW50ZXJydXB0IHdpbGwgbm90IHRyeSB0byBjb3B5IGRhdGEgdG8KKyAgICAgKiBhcHBsaWNhdGlvbiBidWZmZXIgdGlsbCBhbGwgZGF0YSBmcm9tIHNvZnR3YXJlIEZJRk8gaXMgZHJhaW5lZCB0byB1c2VyIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBmaWZvX3B0cl90IHJkX3B0ciA9IHVkLT5yeF9zb2Z0X2ZpZm9fcmRfcHRyOworICAgIGZpZm9fcHRyX3Qgd3JfcHRyID0gdWQtPnJ4X3NvZnRfZmlmb193cl9wdHI7CisgICAgaW50IGlkeCA9IDA7CisKKyAgICAvKgorICAgICAqIHVkLT5yeF9peCBpcyAwLCBzZXQgdWQtPnJ4X2xlbiB0byAwIHRvIHByZXZlbnQgaW50ZXJydXB0IGZyb20gdXNpbmcgaXQKKyAgICAgKiBiZWZvcmUgYWxsIGRhdGEgZnJvbSBzb2Z0d2FyZSBGSUZPIGlzIG1vdmVkIHRvIGFwcGxpY2F0aW9uIGJ1ZmZlci4KKyAgICAgKi8KKyAgICB1ZC0+cnhfbGVuID0gMDsKKworICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCB0cnVlKTsKKworICAgIHdoaWxlIChpZHggPCBsZW4pCisgICAgeworCisgICAgICAgIGlmICh3cl9wdHIgPT0gcmRfcHRyKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTm8gbW9yZSBkYXRhIGluIHNvZnR3YXJlIEZJRk8sIGF0IGxlYXN0IGZyb20gc3RhdGUgYmVmb3JlCisgICAgICAgICAgICAgKiBpbnRlcnJ1cHQgd2FzIGVuYWJsZWQuCisgICAgICAgICAgICAgKiBEaXNhYmxlIGludGVycnVwdCBhbmQgdXBkYXRlIHJlYWQgcG9pbnRlciB0byByZWZsZWN0IHBvc2l0aW9uCisgICAgICAgICAgICAgKiBvZiBhbHJlYWR5IGNvcGllZCBkYXRhLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgZmFsc2UpOworICAgICAgICAgICAgdWQtPnJ4X3NvZnRfZmlmb19yZF9wdHIgPSByZF9wdHI7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDaGVjayBpZiB3cml0ZSBwb2ludGVyIG1vdmVkLCBpZiBzbyBpbnRlcnJ1cHQgcHV0IHNvbWUgbW9yZSBkYXRhCisgICAgICAgICAgICAgKiBpbiBidWZmZXIuIFJlbWVtYmVyIGN1cnJlbnQgd3JpdGUgcG9zaXRpb24gYW5kIHRyeSBhZ2FpbiB3aXRoCisgICAgICAgICAgICAgKiBpbnRlcnJ1cHRzIGVuYWJsZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICh1ZC0+cnhfc29mdF9maWZvX3dyX3B0ciAhPSB3cl9wdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JfcHRyID0gdWQtPnJ4X3NvZnRfZmlmb193cl9wdHI7CisgICAgICAgICAgICAgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQWxsIHdhcyBjb3BpZWQgZnJvbSBzb2Z0d2FyZSBGSUZPLgorICAgICAgICAgICAgICogU2V0dXAgdXNlciB0cmFuc2FjdGlvbiBpeCBhbmQgbGVuIHNvIHdoZW4gaW50ZXJydXB0cyBhcmUgZW5hYmxlZAorICAgICAgICAgICAgICogYWdhaW4gKG5vdCBpbiB0aGlzIGZ1bmN0aW9uKSBpbnRlcnJ1cHQgb3IgRE1BIGNhbiBjb250aW51ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdWQtPnJ4X2l4ID0gaWR4OworICAgICAgICAgICAgdWQtPnJ4X2xlbiA9IGxlbjsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyogQ29weSBmcm9tIHNvZnR3YXJlIEZJRk8gdG8gdXNlciBwcm92aWRlZCBidWZmZXIgKi8KKyAgICAgICAgdWQtPnJ4X2J1ZmZlcltpZHgrK10gPSB1ZC0+cnhfc29mdF9maWZvW3JkX3B0cisrXTsKKworICAgICAgICBpZiAocmRfcHRyID49IHVkLT5yeF9zb2Z0X2ZpZm9fc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmRfcHRyID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogVXNlciBidWZmZXIgaXMgZmlsbGVkLCBibG9jayBpbnRlcnJ1cHQgc28gZW5kIG9mIHRyYW5zbWlzc2lvbiBjYWxsYmFjayB3aWxsIG5vdCBiZQorICAgICAqIGNhbGxlZCBmcm9tIGludGVycnVwdC4KKyAgICAgKi8KKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgZmFsc2UpOworICAgIHVkLT5yeF9zb2Z0X2ZpZm9fcmRfcHRyID0gcmRfcHRyOworICAgIHVkLT5yeF9sZW4gPSBsZW47CisgICAgdWQtPnJ4X2l4ID0gbGVuOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgaHdfdWFydF9yZWFkX2J1ZmZlcihIV19VQVJUX0lEIHVhcnQsIHZvaWQgKmRhdGEsIHVpbnQxNl90IGxlbikKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisgICAgdWludDhfdCAqcCA9IGRhdGE7CisKKyAgICAvKgorICAgICAqIERpc2FibGUgUlggaW50ZXJydXB0IGJlZm9yZSBkcmFpbmluZyBzb2Z0d2FyZSBGSUZPLgorICAgICAqLworICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCBmYWxzZSk7CisKKyAgICBpZiAoU09GVFdBUkVfRklGT19QUkVTRU5UKHVkKSkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIERyYWluIHVzZXMgdWQgZmllbGRzIHNvIHNldHVwIHRoZW0gYWNjb3JkaW5nbHkuCisgICAgICAgICAqLworICAgICAgICB1ZC0+cnhfYnVmZmVyID0gZGF0YTsKKworICAgICAgICBod191YXJ0X2RyYWluX3J4KHVhcnQsIHVkLCBsZW4pOworICAgICAgICBsZW4gLT0gdWQtPnJ4X2l4OworICAgICAgICBwICs9IHVkLT5yeF9peDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgYWxsIHJlbWFpbmluZyBieXRlcyB3aXRoIFJYIGludGVycnVwdCBzdGlsbCBkaXNhYmxlZC4KKyAgICAgKi8KKyAgICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisgICAgICAgICpwKysgPSBod191YXJ0X3JlYWQodWFydCk7CisgICAgICAgIGxlbi0tOworICAgIH0KKworICAgIHVkLT5yeF9peCA9IDA7CisgICAgdWQtPnJ4X2xlbiA9IDA7CisgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIFNPRlRXQVJFX0ZJRk9fUFJFU0VOVCh1ZCkpOworfQorCit2b2lkIGh3X3VhcnRfc2V0X3NvZnRfZmlmbyhIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCBzaXplKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCBmYWxzZSk7CisKKyAgICB1ZC0+cnhfc29mdF9maWZvID0gYnVmOworICAgIHVkLT5yeF9zb2Z0X2ZpZm9fc2l6ZSA9IHNpemU7CisgICAgdWQtPnJ4X3NvZnRfZmlmb19yZF9wdHIgPSAwOworICAgIHVkLT5yeF9zb2Z0X2ZpZm9fd3JfcHRyID0gMDsKKworICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCBidWYgIT0gTlVMTCk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgU09GVFdBUkVfRklGT19QUkVTRU5UKHVkKSAgZmFsc2UKKwordm9pZCBod191YXJ0X3JlYWRfYnVmZmVyKEhXX1VBUlRfSUQgdWFydCwgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuKQoreworICAgIHVpbnQ4X3QgKnAgPSBkYXRhOworCisgICAgd2hpbGUgKGxlbiA+IDApCisgICAgeworICAgICAgICAqcCsrID0gaHdfdWFydF9yZWFkKHVhcnQpOworICAgICAgICBsZW4tLTsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaHdfdWFydF9maXJlX2NhbGxiYWNrKFVBUlRfRGF0YSAqdWQpCit7CisgICAgaHdfdWFydF9yeF9jYWxsYmFjayBjYiA9IHVkLT5yeF9jYjsKKyAgICB1ZC0+cnhfY2IgPSBOVUxMOworICAgIC8qIEp1c3QgZmluaXNoZWQgcmVjZWl2aW5nLCBkaXNhYmxlIFJYIGludGVycnVwdHMgdW5sZXNzIHNvZnR3YXJlIEZJRk8gaXMgZW5hYmxlZCAqLworICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludChVQVJUSUQodWQpLCBTT0ZUV0FSRV9GSUZPX1BSRVNFTlQodWQpKTsKKworICAgIGlmIChjYikKKyAgICB7CisgICAgICAgIGNiKHVkLT5yeF91c2VyX2RhdGEsIHVkLT5yeF9sZW4pOworICAgIH0KK30KKwordm9pZCBod191YXJ0X3JlY2VpdmUoSFdfVUFSVF9JRCB1YXJ0LCB2b2lkICpkYXRhLCB1aW50MTZfdCBsZW4sIGh3X3VhcnRfcnhfY2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgaWYgKGNiID09IE5VTEwpCisgICAgeworICAgICAgICBod191YXJ0X3JlYWRfYnVmZmVyKHVhcnQsIGRhdGEsIGxlbik7CisgICAgICAgIHVkLT5yeF9peCA9IDA7CisgICAgICAgIHVkLT5yeF9sZW4gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWQtPnJ4X2J1ZmZlciA9IGRhdGE7CisgICAgdWQtPnJ4X3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgZmFsc2UpOworICAgIHVkLT5yeF9sZW4gPSBsZW47CisgICAgdWQtPnJ4X2l4ID0gMDsKKyAgICB1ZC0+cnhfY2IgPSBjYjsKKyNpZiBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8KKworICAgIGlmIChod191YXJ0X2RyYWluX3J4KHVhcnQsIHVkLCBsZW4pKQorICAgIHsKKyAgICAgICAgaHdfdWFydF9maXJlX2NhbGxiYWNrKHVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmCisKKyNpZiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQQorCisgICAgaWYgKHVkLT5yeF9kbWFfYnVmX3NpemUgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUX0VSUk9SKGxlbiA8IHVkLT5yeF9kbWFfYnVmX3NpemUpOworCisgICAgICAgIHVpbnQxNl90IG5ld19pbnQsIGN1cl9pZHg7CisgICAgICAgIGJvb2wgZGF0YV9yZWFkeSA9IGZhbHNlOworCisgICAgICAgIEFTU0VSVF9FUlJPUih1ZC0+cnhfZG1hX2FjdGl2ZSA9PSBmYWxzZSk7CisKKyAgICAgICAgLyogQ2FsY3VsYXRlIGluZGV4IG9mIGVuZCBvZiByZXF1ZXN0ZWQgZGF0YSAoZG8gbm90IHdyYXAgaXQhKSAqLworICAgICAgICBuZXdfaW50ID0gdWQtPnJ4X2RtYV9oZWFkICsgdWQtPnJ4X2xlbiAtIDE7CisKKyAgICAgICAgLyogRnJlZXplIERNQSBzbyBpdCBkb2VzIG5vdCBtb3ZlIHBvaW50ZXJzIHdoaWxlIHdlIHRyeSB0byB1cGRhdGUgdGhlbSAqLworICAgICAgICBod19kbWFfZnJlZXplKCk7CisKKyAgICAgICAgY3VyX2lkeCA9IGh3X2RtYV90cmFuc2ZlcmVkX2J5dGVzKHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIpOworCisgICAgICAgIC8qIGN1cl9pZHggaXMgbG93ZXIgdGhhbiByeF9oZWFkIG9ubHkgaWYgaXQgd3JhcHBlZC1hcm91bmQgLSBmaXggaXQgKi8KKyAgICAgICAgaWYgKGN1cl9pZHggPCB1ZC0+cnhfZG1hX2hlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cl9pZHggKz0gdWQtPnJ4X2RtYV9idWZfc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIElmIERNQSBoYXMgbm90IHJlYWQgcGFzdCB0aGUgY2FsY3VsYXRlZCBpbmRleCwgd2UgY2FuIHNldCBpdCBhbmQganVzdCB3YWl0IGZvciBhbgorICAgICAgICAgKiBpbnRlcnJ1cHQuIEluIG90aGVyIGNhc2UsIGRhdGEgYXJlIHJlYWR5IGltbWVkaWF0ZWx5IGluIGJ1ZmZlci4KKyAgICAgICAgICovCisgICAgICAgIGlmIChjdXJfaWR4IDw9IG5ld19pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld19pbnQgJT0gdWQtPnJ4X2RtYV9idWZfc2l6ZTsKKyAgICAgICAgICAgIGh3X2RtYV9jaGFubmVsX3VwZGF0ZV9pbnRfaXgodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciwgbmV3X2ludCk7CisgICAgICAgICAgICB1ZC0+cnhfZG1hX2FjdGl2ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBod19kbWFfY2hhbm5lbF91cGRhdGVfaW50X2l4KHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIsIGN1cl9pZHggLSAxKTsKKyAgICAgICAgICAgIGRhdGFfcmVhZHkgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogVW5mcmVlemUgRE1BIG5vdywgaXQgY2FuIHN0YXJ0IHJlYWRpbmcgKi8KKyAgICAgICAgaHdfZG1hX3VuZnJlZXplKCk7CisKKyAgICAgICAgLyogRmlyZSBjYWxsYmFjayBpbW1lZGlhdGVseSBpZiBkYXRhIGFscmVhZHkgYXZhaWxhYmxlIGluIGJ1ZmZlciAqLworICAgICAgICBpZiAoZGF0YV9yZWFkeSkKKyAgICAgICAgeworICAgICAgICAgICAgaHdfdWFydF9maXJlX2NhbGxiYWNrKHVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisjaWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKworICAgIGlmICh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQgJiYgKHVkLT5yeF9sZW4gLSB1ZC0+cnhfaXggPiAxKSkKKyAgICB7CisgICAgICAgIC8qIHJ4X2l4IGNvdWxkIGFscmVhZHkgYmUgY2hhbmdlZCBieSBod191YXJ0X2RyYWluX3J4KCkgKi8KKyAgICAgICAgdWQtPnJ4X2RtYS5kZXN0X2FkZHJlc3MgPSAodWludDMyKSBkYXRhICsgdWQtPnJ4X2l4OworICAgICAgICB1ZC0+cnhfZG1hLmxlbmd0aCA9IHVkLT5yeF9sZW4gLSB1ZC0+cnhfaXg7CisgICAgICAgIGh3X3VhcnRfY2xlYXJfZG1hX3JlcXVlc3QodWFydCk7CisgICAgICAgIC8qIFByZXBhcmUgYW5kIHN0YXJ0IERNQSAqLworICAgICAgICBod19kbWFfY2hhbm5lbF9pbml0aWFsaXphdGlvbigmdWQtPnJ4X2RtYSk7CisgICAgICAgIGh3X2RtYV9jaGFubmVsX2VuYWJsZSh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyLCBIV19ETUFfU1RBVEVfRU5BQkxFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorICAgIC8qIEludGVycnVwdCBkcml2ZW4gKi8KKyAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGh3X3VhcnRfaXJxX3N0b3BfcmVjZWl2ZShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9ICZ1YXJ0X2RhdGFbVUFSVElYKHVhcnQpXTsKKworICAgIC8vIERpc2FibGUgUlggaW50ZXJydXB0CisgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIGZhbHNlKTsKKworICAgIHVkLT5yeF9sZW4gPSB1ZC0+cnhfaXg7CisKKyAgICBod191YXJ0X2ZpcmVfY2FsbGJhY2sodWQpOworfQorCisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKK3N0YXRpYyB2b2lkIGh3X3VhcnRfY29weV9kbWFfcnhfdG9fdXNlcl9idWZmZXIoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSAmdWFydF9kYXRhW1VBUlRJWCh1YXJ0KV07CisKKyAgICB1aW50MTZfdCBjdXJfaWR4OworICAgIHVpbnQxNl90IHRvX2NvcHk7CisgICAgaHdfdWFydF9yeF9jYWxsYmFjayBjYjsKKworICAgIHVkLT5yeF9kbWFfYWN0aXZlID0gZmFsc2U7CisgICAgY2IgPSB1ZC0+cnhfY2I7CisKKyAgICBpZiAoY2IpCisgICAgeworICAgICAgICB1ZC0+cnhfY2IgPSBOVUxMOworICAgICAgICAvKgorICAgICAgICAgKiBVc2VyIGNhbGxiYWNrIHdhcyBub3QgZmlyZWQsIHNpbmNlIHJ4X2RtYV9hY3RpdmUgaXMgZmFsc2UgaXQgd2lsbCBub3QKKyAgICAgICAgICogZmlyZSBldmVuIGlmIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMgd2FzIHJlY2VpdmVkIHdoZW4gYWJvcnQgd2FzIGluaXRpYXRlZC4KKyAgICAgICAgICovCisgICAgICAgIGN1cl9pZHggPSBod19kbWFfdHJhbnNmZXJlZF9ieXRlcyh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyKTsKKworICAgICAgICBpZiAodWQtPnJ4X2l4IDwgdWQtPnJ4X2xlbikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1cl9pZHggPCB1ZC0+cnhfZG1hX2hlYWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3VyX2lkeCArPSB1ZC0+cnhfZG1hX2J1Zl9zaXplOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b19jb3B5ID0gY3VyX2lkeCAtIHVkLT5yeF9kbWFfaGVhZDsKKworICAgICAgICAgICAgaWYgKHRvX2NvcHkgPj0gdWQtPnJ4X2xlbiAtIHVkLT5yeF9peCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b19jb3B5ID0gdWQtPnJ4X2xlbiAtIHVkLT5yeF9peDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBDYWxsYmFjayBhbHJlYWR5IGZpcmVkLCBjaXJjdWxhciBidWZmZXIgaG9sZHMgZW5vdWdoIGRhdGEuCisgICAgICAgICAqLworICAgICAgICB0b19jb3B5ID0gdWQtPnJ4X2xlbiAtIHVkLT5yeF9peDsKKyAgICB9CisKKyAgICBod191YXJ0X2NvcHlfcnhfY2lyY3VsYXJfZG1hX2J1ZmZlcih1YXJ0LCB1ZC0+cnhfYnVmZmVyICsgdWQtPnJ4X2l4LCB0b19jb3B5KTsKKyAgICB1ZC0+cnhfaXggKz0gdG9fY29weTsKKyAgICB1ZC0+cnhfbGVuID0gdWQtPnJ4X2l4OworCisgICAgaWYgKGNiKQorICAgIHsKKyAgICAgICAgY2IodWQtPnJ4X3VzZXJfZGF0YSwgdWQtPnJ4X2xlbik7CisgICAgfQorfQorI2VuZGlmCisKK3VpbnQxNl90IGh3X3VhcnRfYWJvcnRfcmVjZWl2ZShIV19VQVJUX0lEIHVhcnQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9ICZ1YXJ0X2RhdGFbVUFSVElYKHVhcnQpXTsKKworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKyAgICBpZiAodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKQorICAgIHsKKyNpZiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQQorCisgICAgICAgIGlmICh1ZC0+cnhfZG1hX2J1Zl9zaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaHdfdWFydF9jb3B5X2RtYV9yeF90b191c2VyX2J1ZmZlcih1YXJ0KTsKKyAgICAgICAgICAgIHJldHVybiB1ZC0+cnhfaXg7CisgICAgICAgIH0KKworI2Vsc2UKKyAgICAgICAgLyogTm8gRE1BIGNpcmN1bGFyIGJ1ZmZlciwgc3RvcCBETUEgKi8KKyAgICAgICAgaHdfZG1hX2NoYW5uZWxfc3RvcCh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyKTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgaHdfdWFydF9pcnFfc3RvcF9yZWNlaXZlKHVhcnQpOworCisgICAgcmV0dXJuIHVkLT5yeF9peDsKK30KKwordWludDE2X3QgaHdfdWFydF9wZWVrX3JlY2VpdmVkKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gJnVhcnRfZGF0YVtVQVJUSVgodWFydCldOworCisjaWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKworICAgIGlmICh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpCisgICAgeworICAgICAgICB1ZC0+cnhfaXggPSBod19kbWFfdHJhbnNmZXJlZF9ieXRlcyh1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyKTsKKyAgICB9CisKKyNlbmRpZgorICAgIHJldHVybiB1ZC0+cnhfaXg7Cit9CisKKy8vPT09PT09PT09PT09PT0gSW50ZXJydXB0IGhhbmRsaW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod191YXJ0X3R4X2lzcihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgd2hpbGUgKHVkLT50eF9peCA8IHVkLT50eF9sZW4pCisgICAgeworICAgICAgICBpZiAodWQtPnR4X2ZpZm9fb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaHdfdWFydF90cmFuc21pdF9maWZvX25vdF9mdWxsKHVhcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFod191YXJ0X3Rocl9lbXB0eV9nZXRmKHVhcnQpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGh3X3VhcnRfdHhkYXRhX3NldGYodWFydCwgdWQtPnR4X2J1ZmZlclt1ZC0+dHhfaXgrK10pOworICAgIH0KKworICAgIC8vIEV2ZXJ5dGhpbmcgc2VudD8KKyAgICBpZiAodWQtPnR4X2l4ID49IHVkLT50eF9sZW4pCisgICAgeworICAgICAgICBod191YXJ0X3R4X2NhbGxiYWNrIGNiID0gdWQtPnR4X2NiOworICAgICAgICAvLyBEaXNhYmxlIFRYIGludGVycnVwdHMKKyAgICAgICAgLy8gVGhleSBjYW4gYmUgcmUtZW5hYmxlZCBpbiB1c2VyIGNhbGxiYWNrCisgICAgICAgIHVpbnQxNl90IGllcl9kbGhfcmVnID0gVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRzsKKyAgICAgICAgaWVyX2RsaF9yZWcgJj0gfigoMSA8PCBVQVJUX1VBUlRfSUVSX0RMSF9SRUdfRVRCRUlfZGxoMV9Qb3MpIHwgKDEgPDwgVUFSVF9VQVJUX0lFUl9ETEhfUkVHX1BUSU1FX2RsaDdfUG9zKSk7CisgICAgICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcgPSBpZXJfZGxoX3JlZzsKKyAgICAgICAgdWQtPnR4X2NiID0gTlVMTDsKKworICAgICAgICBpZiAoY2IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNiKHVkLT50eF91c2VyX2RhdGEsIHVkLT50eF9sZW4pOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdWFydF9yeF9pc3IoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIGlmIChTT0ZUV0FSRV9GSUZPX1BSRVNFTlQodWQpKQorICAgIHsKKyNpZiBkZ19jb25maWdVQVJUX1NPRlRXQVJFX0ZJRk8KKworICAgICAgICBmb3IgKDs7KQorICAgICAgICB7CisgICAgICAgICAgICBmaWZvX3B0cl90IHdyX3B0ciA9IHVkLT5yeF9zb2Z0X2ZpZm9fd3JfcHRyICsgMTsKKworICAgICAgICAgICAgaWYgKHdyX3B0ciA+PSB1ZC0+cnhfc29mdF9maWZvX3NpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JfcHRyID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdyX3B0ciA9PSB1ZC0+cnhfc29mdF9maWZvX3JkX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTb2Z0d2FyZSBGSUZPIGZ1bGwsIGRpc2FibGUgaW50ZXJydXB0IHNpbmNlIG5vIG9uZSBpcyByZWFkaW5nICovCisgICAgICAgICAgICAgICAgaHdfdWFydF9lbmFibGVfcnhfaW50KHVhcnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaHdfdWFydF9pc19kYXRhX3JlYWR5KHVhcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1ZC0+cnhfc29mdF9maWZvW3VkLT5yeF9zb2Z0X2ZpZm9fd3JfcHRyXSA9IGh3X3VhcnRfcnhkYXRhX2dldGYodWFydCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBcHBsaWNhdGlvbiByZWFkIGlzIGluIHByb2dyZXNzLiBDb3B5IGRhdGEgZnJvbSBzb2Z0d2FyZSBGSUZPIHRvCisgICAgICAgICAgICAgKiB1c2VyIHByb3ZpZGVkIGJ1ZmZlci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHVkLT5yeF9peCA8IHVkLT5yeF9sZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWQtPnJ4X2J1ZmZlclt1ZC0+cnhfaXgrK10gPSB1ZC0+cnhfc29mdF9maWZvW3VkLT5yeF9zb2Z0X2ZpZm9fd3JfcHRyXTsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFdoZW4gYXBwbGljYXRpb24gcmVhZCBpcyBpbiBwcm9ncmVzcywgcnhfaXggPCByeF9sZW4KKyAgICAgICAgICAgICAgICAgKiBUaGlzIGludGVycnVwdCBpcyBlbmFibGVkIG9ubHkgaWYgYWxsIGRhdGEgd2FzIGFscmVhZHkgY29waWVkIGZyb20KKyAgICAgICAgICAgICAgICAgKiBGSUZPIHRvIHVzZXIgYnVmZmVyLiBJdCBpcyBzYWZlIHRvIG1vZGlmeSByeF9zb2Z0X2ZpZm9fcmRfcHRyLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHVkLT5yeF9zb2Z0X2ZpZm9fcmRfcHRyID0gd3JfcHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1ZC0+cnhfc29mdF9maWZvX3dyX3B0ciA9IHdyX3B0cjsKKyAgICAgICAgfQorCisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUgKHVkLT5yeF9peCA8IHVkLT5yeF9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChod191YXJ0X2lzX2RhdGFfcmVhZHkodWFydCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWQtPnJ4X2J1ZmZlclt1ZC0+cnhfaXgrK10gPSBod191YXJ0X3J4ZGF0YV9nZXRmKHVhcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXZlcnl0aGluZyByZWFkPworICAgIGlmICh1ZC0+cnhfbGVuID4gMCAmJiB1ZC0+cnhfaXggPj0gdWQtPnJ4X2xlbikKKyAgICB7CisgICAgICAgIC8vIERpc2FibGUgUlggaW50ZXJydXB0cywgZmlyZSBjYWxsYmFjayBpZiBwcmVzZW50CisgICAgICAgIGh3X3VhcnRfaXJxX3N0b3BfcmVjZWl2ZSh1YXJ0KTsKKyAgICB9CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3VhcnRfcnhfdGltZW91dF9pc3IoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIGh3X3VhcnRfcnhfaXNyKHVhcnQpOworCisgICAgLyoKKyAgICAgKiBOb3QgZXZlcnl0aGluZyB3YXMgcmVjZWl2ZWQgeWV0LCBkaXNhYmxlIGludGVycnVwdCBhbnl3YXkgc2luY2UKKyAgICAgKiBzb21lIGRhdGEgd2FzIHJlY2VpdmVkLgorICAgICAqLworICAgIGlmICh1ZC0+cnhfaXggPiAwICYmIHVkLT5yeF9peCA8IHVkLT5yeF9sZW4pCisgICAgeworICAgICAgICAvLyBEaXNhYmxlIFJYIGludGVycnVwdHMgZmlyZSBjYWxsYmFjayBpZiBwcmVzZW50CisgICAgICAgIGh3X3VhcnRfaXJxX3N0b3BfcmVjZWl2ZSh1YXJ0KTsKKyAgICB9Cit9CisKK3ZvaWQgVUFSVF9JbnRlcnJ1cHRfSGFuZGxlcihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgSFdfVUFSVF9JTlQgaW50X2lkOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGludF9pZCA9IGh3X3VhcnRfZ2V0X2ludGVycnVwdF9pZCh1YXJ0KTsKKworICAgICAgICBzd2l0Y2ggKGludF9pZCkKKyAgICAgICAgeworICAgICAgICBjYXNlIEhXX1VBUlRfSU5UX1RJTUVPVVQ6CisgICAgICAgICAgICBod191YXJ0X3J4X3RpbWVvdXRfaXNyKHVhcnQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIV19VQVJUX0lOVF9NT0RFTV9TVEFUOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIV19VQVJUX0lOVF9OT19JTlRfUEVORDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfVUFSVF9JTlRfVEhSX0VNUFRZOgorICAgICAgICAgICAgaHdfdWFydF90eF9pc3IodWFydCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhXX1VBUlRfSU5UX1JFQ0VJVkVEX0FWQUlMQUJMRToKKyAgICAgICAgICAgIGh3X3VhcnRfcnhfaXNyKHVhcnQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIV19VQVJUX0lOVF9SRUNFSVZFX0xJTkVfU1RBVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSFdfVUFSVF9JTlRfQlVTWV9ERVRFQ1RFRDoKKyNpZmRlZiBDT05GSUdfVUFSVF9JR05PUkVfQlVTWV9ERVRFQ1QKKyAgICAgICAgICAgIGh3X3VhcnRfdHJhbnNtaXRfZmlmb19lbXB0eSh1YXJ0KTsKKyNlbHNlCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU3RvcCBoZXJlIG1lYW5zIHRoYXQgdGltaW5nIHJ1bGVzIGZvciBhY2Nlc3MgZGl2aXNvciBsYXRjaCB3ZXJlIG5vdAorICAgICAgICAgICAgICogZm9sbG93ZWQuIFNlZSBkZXNjcmlwdGlvbiBvZiByZWdpc3RlciBSQlJfVEhSX0RMTC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgX19CS1BUKDApOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBcYnJpZWYgSFdfVUFSVDEgSW50ZXJydXB0IEhhbmRsZXIKKyAqCisgKi8KK3ZvaWQgVUFSVF9IYW5kbGVyKHZvaWQpCit7CisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VOVEVSKCk7CisKKyNpZmRlZiBIV19VQVJUX0VOQUJMRV9VU0VSX0lTUgorCisgICAgaWYgKHVhcnRfZGF0YVtVQVJUSVgoSFdfVUFSVDEpXS51c2VyX2lzcikKKyAgICB7CisgICAgICAgIHVhcnRfZGF0YVtVQVJUSVgoSFdfVUFSVDEpXS51c2VyX2lzcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworI2VuZGlmCisgICAgICAgIFVBUlRfSW50ZXJydXB0X0hhbmRsZXIoSFdfVUFSVDEpOworI2lmZGVmIEhXX1VBUlRfRU5BQkxFX1VTRVJfSVNSCisgICAgfQorCisjZW5kaWYKKworICAgIFNFR0dFUl9TWVNURU1WSUVXX0lTUl9FWElUKCk7Cit9CisKKy8qKgorICogXGJyaWVmIFVBUlQyIEludGVycnVwdCBIYW5kbGVyCisgKgorICovCit2b2lkIFVBUlQyX0hhbmRsZXIodm9pZCkKK3sKKyAgICBTRUdHRVJfU1lTVEVNVklFV19JU1JfRU5URVIoKTsKKworI2lmZGVmIEhXX1VBUlRfRU5BQkxFX1VTRVJfSVNSCisKKyAgICBpZiAodWFydF9kYXRhW1VBUlRJWChIV19VQVJUMildLnVzZXJfaXNyKQorICAgIHsKKyAgICAgICAgdWFydF9kYXRhW1VBUlRJWChIV19VQVJUMildLnVzZXJfaXNyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgICAgVUFSVF9JbnRlcnJ1cHRfSGFuZGxlcihIV19VQVJUMik7CisjaWZkZWYgSFdfVUFSVF9FTkFCTEVfVVNFUl9JU1IKKyAgICB9CisKKyNlbmRpZgorCisgICAgU0VHR0VSX1NZU1RFTVZJRVdfSVNSX0VYSVQoKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PSBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSFdfVUFSVF9CQVVEUkFURSBod191YXJ0X2JhdWRyYXRlX2dldChIV19VQVJUX0lEIHVhcnQpCit7CisgICAgdWludDMyX3QgYmF1ZF9yYXRlOworCisgICAgLy8gU2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIgdG8gYWNjZXNzIERMTCAmIERMSCByZWdpc3RlcnMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAxKTsKKyAgICAvLyBSZWFkIGJhdWQgcmF0ZSBsb3cgYnl0ZSBmcm9tIERMTCByZWdpc3RlcgorICAgIGJhdWRfcmF0ZSA9ICgweEZGICYgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcpIDw8IDg7CisgICAgLy8gUmVhZCBiYXVkIHJhdGUgaGlnaCBieXRlIGZyb20gRExIIHJlZ2lzdGVyCisgICAgYmF1ZF9yYXRlICs9ICgweEZGICYgVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRykgPDwgMTY7CisgICAgLy8gUmVhZCBiYXVkIHJhdGUgZnJhY3Rpb24gYnl0ZSBmcm9tIERMRiByZWdpc3RlcgorICAgIGJhdWRfcmF0ZSArPSAweEZGICYgVUJBKHVhcnQpLT5VQVJUMl9ETEZfUkVHOworICAgIC8vIFJlc2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAwKTsKKworICAgIHJldHVybiAoSFdfVUFSVF9CQVVEUkFURSkgYmF1ZF9yYXRlOworfQorCit2b2lkIGh3X3VhcnRfYmF1ZHJhdGVfc2V0KEhXX1VBUlRfSUQgdWFydCwgSFdfVUFSVF9CQVVEUkFURSBiYXVkX3JhdGUpCit7CisgICAgLy8gU2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIgdG8gYWNjZXNzIERMTCAmIERMSCByZWdpc3RlcnMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAxKTsKKyAgICAvLyBTZXQgZnJhY3Rpb24gYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX0RMRl9SRUcgPSAweEZGICYgYmF1ZF9yYXRlOworICAgIC8vIFNldCBsb3cgYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRyA9IDB4RkYgJiAoYmF1ZF9yYXRlID4+IDgpOworICAgIC8vIFNldCBoaWdoIGJ5dGUgb2YgYmF1ZCByYXJlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRyA9IDB4RkYgJiAoYmF1ZF9yYXRlID4+IDE2KTsKKyAgICAvLyBSZXNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMCk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09IEZJRk8gY29udHJvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3VpbnQ4X3QgaHdfdWFydF9maWZvX2VuX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIHVpbnQxNl90IGZpZm9fZW5hYmxlZDsKKworICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKworICAgIGZpZm9fZW5hYmxlZCA9IChVQkEodWFydCktPlVBUlQyX0lJUl9GQ1JfUkVHICYgMHgwMEMwKTsgLyogQml0c1s3OjZdICovCisKKyAgICBzd2l0Y2ggKGZpZm9fZW5hYmxlZCkKKyAgICB7CisgICAgY2FzZSAweDAwQzA6CisgICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSAweDAwMDA6CisgICAgICAgIHJldHVybiAwOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX0VSUk9SKDApOworICAgICAgICByZXR1cm4gMjU1OyAgICAgLy8gVG8gc2F0aXNmeSB0aGUgY29tcGlsZXIKKyAgICB9Cit9CisKK3VpbnQ4X3QgaHdfdWFydF90eF9maWZvX3RyX2x2bF9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvKiBPbmx5IFVBUlQyIGhhcyBhIEZJRk8gKi8KKyAgICBBU1NFUlRfRVJST1IodWFydCA9PSBIV19VQVJUMik7CisKKyAgICByZXR1cm4gKFVBUlQyLT5VQVJUMl9TVEVUX1JFRyAmIEhXX1VBUlRfUkVHX0ZJRUxEX01BU0soMiwgU1RFVCwgVUFSVF9TSEFET1dfVFhfRU1QVFlfVFJJR0dFUikpCisgICAgICAgICAgID4+IEhXX1VBUlRfUkVHX0ZJRUxEX1BPUygyLCBTVEVULCBVQVJUX1NIQURPV19UWF9FTVBUWV9UUklHR0VSKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gRE1BIGNvbnRyb2wgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKK3N0YXRpYyB2b2lkIGh3X3VhcnRfcnhfZG1hX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDE2X3QgbGVuKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSB1c2VyX2RhdGE7CisgICAgaHdfdWFydF9yeF9jYWxsYmFjayBjYiA9IHVkLT5yeF9jYjsKKworICAgIHVkLT5yeF9jYiA9IE5VTEw7CisgICAgdWQtPnJ4X2l4ICs9IGxlbjsKKworICAgIGlmIChjYikKKyAgICB7CisgICAgICAgIHVkLT5yeF9sZW4gPSB1ZC0+cnhfaXg7CisgICAgICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludChVQVJUSUQodWQpLCBTT0ZUV0FSRV9GSUZPX1BSRVNFTlQodWQpKTsKKyAgICAgICAgY2IodWQtPnJ4X3VzZXJfZGF0YSwgdWQtPnJ4X2l4KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGh3X3VhcnRfdHhfZG1hX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDE2X3QgbGVuKQoreworICAgIFVBUlRfRGF0YSAqdWQgPSB1c2VyX2RhdGE7CisgICAgaHdfdWFydF90eF9jYWxsYmFjayBjYiA9IHVkLT50eF9jYjsKKworICAgIHVkLT50eF9jYiA9IE5VTEw7CisgICAgdWQtPnR4X2l4ID0gbGVuOworCisgICAgaWYgKGNiKQorICAgIHsKKyAgICAgICAgY2IodWQtPnR4X3VzZXJfZGF0YSwgbGVuKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9zZXRfZG1hX2NoYW5uZWxzKEhXX1VBUlRfSUQgdWFydCwgaW50OF90IGNoYW5uZWwsIEhXX0RNQV9QUklPIHByaSkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICAvKiBPbmx5IHNwZWNpZmljIERNQSBjaGFubmVscyAob3IgLTEgZm9yIG5vIERNQSkgYXJlIGFsbG93ZWQgKi8KKyAgICBBU1NFUlRfRVJST1IoY2hhbm5lbCA8IDAgfHwKKyAgICAgICAgICAgICAgICAgY2hhbm5lbCA9PSBIV19ETUFfQ0hBTk5FTF8wIHx8CisgICAgICAgICAgICAgICAgIGNoYW5uZWwgPT0gSFdfRE1BX0NIQU5ORUxfMiB8fAorICAgICAgICAgICAgICAgICBjaGFubmVsID09IEhXX0RNQV9DSEFOTkVMXzQgfHwKKyAgICAgICAgICAgICAgICAgY2hhbm5lbCA9PSBIV19ETUFfQ0hBTk5FTF82IHx8CisgICAgICAgICAgICAgICAgIGNoYW5uZWwgPT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCk7CisKKyAgICBpZiAoY2hhbm5lbCA8IDApCisgICAgeworICAgICAgICB1ZC0+dXNlX2RtYSA9IDA7CisgICAgICAgIHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEOworICAgICAgICB1ZC0+dHhfZG1hLmNoYW5uZWxfbnVtYmVyID0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWQtPnVzZV9kbWEgPSAxOworCisgICAgICAgIHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgPSBjaGFubmVsOworICAgICAgICB1ZC0+cnhfZG1hLmJ1c193aWR0aCA9IEhXX0RNQV9CV19CWVRFOworICAgICAgICB1ZC0+cnhfZG1hLmlycV9lbmFibGUgPSBIV19ETUFfSVJRX1NUQVRFX0VOQUJMRUQ7CisgICAgICAgIHVkLT5yeF9kbWEuZG1hX3JlcV9tdXggPSBVQVJUSVgodWFydCkgPT0gMCA/IEhXX0RNQV9UUklHX1VBUlRfUlhUWCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19ETUFfVFJJR19VQVJUMl9SWFRYOworICAgICAgICB1ZC0+cnhfZG1hLmlycV9ucl9vZl90cmFucyA9IDA7CisgICAgICAgIHVkLT5yeF9kbWEuYV9pbmMgPSBIV19ETUFfQUlOQ19GQUxTRTsKKyAgICAgICAgdWQtPnJ4X2RtYS5iX2luYyA9IEhXX0RNQV9CSU5DX1RSVUU7CisgICAgICAgIHVkLT5yeF9kbWEuY2lyY3VsYXIgPSBIV19ETUFfTU9ERV9OT1JNQUw7CisgICAgICAgIHVkLT5yeF9kbWEuZG1hX3ByaW8gPSBwcmk7CisgICAgICAgIHVkLT5yeF9kbWEuZG1hX2lkbGUgPSBIV19ETUFfSURMRV9JTlRFUlJVUFRJTkdfTU9ERTsgLyogTm90IHVzZWQgYnkgdGhlIEhXIGluIHRoaXMgY2FzZSAqLworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9pbml0ID0gSFdfRE1BX0lOSVRfQVhfQlhfQVlfQlk7CisgICAgICAgIHVkLT5yeF9kbWEuZHJlcV9tb2RlID0gSFdfRE1BX0RSRVFfVFJJR0dFUkVEOworICAgICAgICB1ZC0+cnhfZG1hLnNyY19hZGRyZXNzID0gKHVpbnQzMl90KSAmVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUc7CisgICAgICAgIHVkLT5yeF9kbWEuZGVzdF9hZGRyZXNzID0gMDsgIC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT5yeF9kbWEubGVuZ3RoID0gMDsgLy8gQ2hhbmdlIGR1cmluZyB0cmFuc21pc3Npb24KKyAgICAgICAgdWQtPnJ4X2RtYS5jYWxsYmFjayA9IGh3X3VhcnRfcnhfZG1hX2NhbGxiYWNrOworICAgICAgICB1ZC0+cnhfZG1hLnVzZXJfZGF0YSA9IHVkOworCisgICAgICAgIHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXIgPSBjaGFubmVsICsgMTsKKyAgICAgICAgdWQtPnR4X2RtYS5idXNfd2lkdGggPSBIV19ETUFfQldfQllURTsKKyAgICAgICAgdWQtPnR4X2RtYS5pcnFfZW5hYmxlID0gSFdfRE1BX0lSUV9TVEFURV9FTkFCTEVEOworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9yZXFfbXV4ID0gVUFSVElYKHVhcnQpID09IDAgPyBIV19ETUFfVFJJR19VQVJUX1JYVFggOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfRE1BX1RSSUdfVUFSVDJfUlhUWDsKKyAgICAgICAgdWQtPnR4X2RtYS5pcnFfbnJfb2ZfdHJhbnMgPSAwOworICAgICAgICB1ZC0+dHhfZG1hLmFfaW5jID0gSFdfRE1BX0FJTkNfVFJVRTsKKyAgICAgICAgdWQtPnR4X2RtYS5iX2luYyA9IEhXX0RNQV9CSU5DX0ZBTFNFOworICAgICAgICB1ZC0+dHhfZG1hLmNpcmN1bGFyID0gSFdfRE1BX01PREVfTk9STUFMOworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9wcmlvID0gcHJpOworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9pZGxlID0gSFdfRE1BX0lETEVfSU5URVJSVVBUSU5HX01PREU7IC8qIE5vdCB1c2VkIGJ5IHRoZSBIVyBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgdWQtPnR4X2RtYS5kbWFfaW5pdCA9IEhXX0RNQV9JTklUX0FYX0JYX0FZX0JZOworICAgICAgICB1ZC0+dHhfZG1hLmRyZXFfbW9kZSA9IEhXX0RNQV9EUkVRX1RSSUdHRVJFRDsKKyAgICAgICAgdWQtPnR4X2RtYS5zcmNfYWRkcmVzcyA9IDA7IC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT50eF9kbWEuZGVzdF9hZGRyZXNzID0gKHVpbnQzMl90KSAmVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUc7CisgICAgICAgIHVkLT50eF9kbWEubGVuZ3RoID0gMDsgLy8gQ2hhbmdlIGR1cmluZyB0cmFuc21pc3Npb24KKyAgICAgICAgdWQtPnR4X2RtYS5jYWxsYmFjayA9IGh3X3VhcnRfdHhfZG1hX2NhbGxiYWNrOworICAgICAgICB1ZC0+dHhfZG1hLnVzZXJfZGF0YSA9IHVkOworICAgIH0KK30KKwordm9pZCBod191YXJ0X3NldF9kbWFfY2hhbm5lbHNfZXgoSFdfVUFSVF9JRCB1YXJ0LCBpbnQ4X3QgdHhfY2hhbm5lbCwgaW50OF90IHJ4X2NoYW5uZWwsIEhXX0RNQV9QUklPIHByaSkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICAvKiBPbmx5IHNwZWNpZmljIERNQSBjaGFubmVscyBhcmUgYWxsb3dlZCAob3IgSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCBmb3Igbm8gRE1BKSAqLworICAgIEFTU0VSVF9FUlJPUih0eF9jaGFubmVsID49IEhXX0RNQV9DSEFOTkVMXzAgJiYKKyAgICAgICAgICAgICAgICAgdHhfY2hhbm5lbCA8PSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKTsKKworICAgIC8qIE9ubHkgc3BlY2lmaWMgRE1BIGNoYW5uZWxzIGFyZSBhbGxvd2VkIChvciBIV19ETUFfQ0hBTk5FTF9JTlZBTElEIGZvciBubyBETUEpICovCisgICAgQVNTRVJUX0VSUk9SKHJ4X2NoYW5uZWwgPj0gSFdfRE1BX0NIQU5ORUxfMCAmJgorICAgICAgICAgICAgICAgICByeF9jaGFubmVsIDw9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpOworCisgICAgaWYgKHR4X2NoYW5uZWwgPT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCAmJiByeF9jaGFubmVsID09IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpCisgICAgeworICAgICAgICB1ZC0+dXNlX2RtYSA9IDA7CisgICAgICAgIHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEOworICAgICAgICB1ZC0+dHhfZG1hLmNoYW5uZWxfbnVtYmVyID0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHR4X2NoYW5uZWwgIT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCAmJiByeF9jaGFubmVsICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpIC8vbm90IGJvdGggaW52YWxpZAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfRVJST1IodHhfY2hhbm5lbCAhPSByeF9jaGFubmVsKTsvL25vdCBlcXVhbAorICAgICAgICAgICAgQVNTRVJUX0VSUk9SKHR4X2NoYW5uZWwgPj4gMSA9PSByeF9jaGFubmVsID4+IDEpOyAvL29uIHNhbWUgcGFpcgorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR4X2NoYW5uZWwgIT0gSFdfRE1BX0NIQU5ORUxfSU5WQUxJRCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX0VSUk9SKHR4X2NoYW5uZWwgJiAxKTsvL29kZCBudW1iZXIKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyeF9jaGFubmVsICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9FUlJPUigocnhfY2hhbm5lbCAmIDEpID09IDApOy8vb2RkIG51bWJlcgorICAgICAgICB9CisKKyAgICAgICAgdWQtPnVzZV9kbWEgPSAxOworCisgICAgICAgIHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgPSByeF9jaGFubmVsOworICAgICAgICB1ZC0+cnhfZG1hLmJ1c193aWR0aCA9IEhXX0RNQV9CV19CWVRFOworICAgICAgICB1ZC0+cnhfZG1hLmlycV9lbmFibGUgPSBIV19ETUFfSVJRX1NUQVRFX0VOQUJMRUQ7CisgICAgICAgIHVkLT5yeF9kbWEuZG1hX3JlcV9tdXggPSBVQVJUSVgodWFydCkgPT0gMCA/IEhXX0RNQV9UUklHX1VBUlRfUlhUWCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19ETUFfVFJJR19VQVJUMl9SWFRYOworICAgICAgICB1ZC0+cnhfZG1hLmlycV9ucl9vZl90cmFucyA9IDA7CisgICAgICAgIHVkLT5yeF9kbWEuYV9pbmMgPSBIV19ETUFfQUlOQ19GQUxTRTsKKyAgICAgICAgdWQtPnJ4X2RtYS5iX2luYyA9IEhXX0RNQV9CSU5DX1RSVUU7CisgICAgICAgIHVkLT5yeF9kbWEuY2lyY3VsYXIgPSBIV19ETUFfTU9ERV9OT1JNQUw7CisgICAgICAgIHVkLT5yeF9kbWEuZG1hX3ByaW8gPSBwcmk7CisgICAgICAgIHVkLT5yeF9kbWEuZG1hX2lkbGUgPSBIV19ETUFfSURMRV9JTlRFUlJVUFRJTkdfTU9ERTsgLyogTm90IHVzZWQgYnkgdGhlIEhXIGluIHRoaXMgY2FzZSAqLworICAgICAgICB1ZC0+cnhfZG1hLmRtYV9pbml0ID0gSFdfRE1BX0lOSVRfQVhfQlhfQVlfQlk7CisgICAgICAgIHVkLT5yeF9kbWEuZHJlcV9tb2RlID0gSFdfRE1BX0RSRVFfVFJJR0dFUkVEOworICAgICAgICB1ZC0+cnhfZG1hLnNyY19hZGRyZXNzID0gKHVpbnQzMl90KSAmVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUc7CisgICAgICAgIHVkLT5yeF9kbWEuZGVzdF9hZGRyZXNzID0gMDsgIC8vIENoYW5nZSBkdXJpbmcgdHJhbnNtaXNzaW9uCisgICAgICAgIHVkLT5yeF9kbWEubGVuZ3RoID0gMDsgLy8gQ2hhbmdlIGR1cmluZyB0cmFuc21pc3Npb24KKyAgICAgICAgdWQtPnJ4X2RtYS5jYWxsYmFjayA9IGh3X3VhcnRfcnhfZG1hX2NhbGxiYWNrOworICAgICAgICB1ZC0+cnhfZG1hLnVzZXJfZGF0YSA9IHVkOworCisgICAgICAgIHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXIgPSB0eF9jaGFubmVsOworICAgICAgICB1ZC0+dHhfZG1hLmJ1c193aWR0aCA9IEhXX0RNQV9CV19CWVRFOworICAgICAgICB1ZC0+dHhfZG1hLmlycV9lbmFibGUgPSBIV19ETUFfSVJRX1NUQVRFX0VOQUJMRUQ7CisgICAgICAgIHVkLT50eF9kbWEuZG1hX3JlcV9tdXggPSBVQVJUSVgodWFydCkgPT0gMCA/IEhXX0RNQV9UUklHX1VBUlRfUlhUWCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19ETUFfVFJJR19VQVJUMl9SWFRYOworICAgICAgICB1ZC0+dHhfZG1hLmlycV9ucl9vZl90cmFucyA9IDA7CisgICAgICAgIHVkLT50eF9kbWEuYV9pbmMgPSBIV19ETUFfQUlOQ19UUlVFOworICAgICAgICB1ZC0+dHhfZG1hLmJfaW5jID0gSFdfRE1BX0JJTkNfRkFMU0U7CisgICAgICAgIHVkLT50eF9kbWEuY2lyY3VsYXIgPSBIV19ETUFfTU9ERV9OT1JNQUw7CisgICAgICAgIHVkLT50eF9kbWEuZG1hX3ByaW8gPSBwcmk7CisgICAgICAgIHVkLT50eF9kbWEuZG1hX2lkbGUgPSBIV19ETUFfSURMRV9JTlRFUlJVUFRJTkdfTU9ERTsgLyogTm90IHVzZWQgYnkgdGhlIEhXIGluIHRoaXMgY2FzZSAqLworICAgICAgICB1ZC0+dHhfZG1hLmRtYV9pbml0ID0gSFdfRE1BX0lOSVRfQVhfQlhfQVlfQlk7CisgICAgICAgIHVkLT50eF9kbWEuZHJlcV9tb2RlID0gSFdfRE1BX0RSRVFfVFJJR0dFUkVEOworICAgICAgICB1ZC0+dHhfZG1hLnNyY19hZGRyZXNzID0gMDsgLy8gQ2hhbmdlIGR1cmluZyB0cmFuc21pc3Npb24KKyAgICAgICAgdWQtPnR4X2RtYS5kZXN0X2FkZHJlc3MgPSAodWludDMyX3QpICZVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRzsKKyAgICAgICAgdWQtPnR4X2RtYS5sZW5ndGggPSAwOyAvLyBDaGFuZ2UgZHVyaW5nIHRyYW5zbWlzc2lvbgorICAgICAgICB1ZC0+dHhfZG1hLmNhbGxiYWNrID0gaHdfdWFydF90eF9kbWFfY2FsbGJhY2s7CisgICAgICAgIHVkLT50eF9kbWEudXNlcl9kYXRhID0gdWQ7CisgICAgfQorfQorCisjaWYgZGdfY29uZmlnVUFSVF9SWF9DSVJDVUxBUl9ETUEKKworc3RhdGljIHZvaWQgaHdfdWFydF9yeF9jaXJjdWxhcl9kbWFfY2FsbGJhY2sodm9pZCAqdXNlcl9kYXRhLCB1aW50MTZfdCBsZW4pCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IHVzZXJfZGF0YTsKKyAgICBod191YXJ0X3J4X2NhbGxiYWNrIGNiID0gdWQtPnJ4X2NiOworCisgICAgaWYgKCF1ZC0+cnhfZG1hX2FjdGl2ZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1ZC0+cnhfY2IgPSBOVUxMOworICAgIHVkLT5yeF9kbWFfYWN0aXZlID0gZmFsc2U7CisKKyAgICBpZiAoY2IpCisgICAgeworICAgICAgICBjYih1ZC0+cnhfdXNlcl9kYXRhLCB1ZC0+cnhfbGVuKTsKKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9lbmFibGVfcnhfY2lyY3VsYXJfZG1hKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICBBU1NFUlRfRVJST1IodWQtPnJ4X2RtYV9idWZfc2l6ZSA+IDApOworCisgICAgaHdfZG1hX2NoYW5uZWxfZW5hYmxlKHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIsIEhXX0RNQV9TVEFURV9ESVNBQkxFRCk7CisKKyAgICAvKiBOZWVkIHRvIHJlY29uZmlndXJlIGZldyB0aGluZ3MgZm9yIGNpcmN1bGFyIG9wZXJhdGlvbi4uLiAqLworICAgIHVkLT5yeF9kbWEuY2lyY3VsYXIgPSBIV19ETUFfTU9ERV9DSVJDVUxBUjsKKyAgICB1ZC0+cnhfZG1hLmRlc3RfYWRkcmVzcyA9ICh1aW50MzJfdCkgdWQtPnJ4X2RtYV9idWY7CisgICAgdWQtPnJ4X2RtYS5sZW5ndGggPSB1ZC0+cnhfZG1hX2J1Zl9zaXplOworICAgIHVkLT5yeF9kbWEuY2FsbGJhY2sgPSBod191YXJ0X3J4X2NpcmN1bGFyX2RtYV9jYWxsYmFjazsKKyAgICB1ZC0+cnhfZG1hLnVzZXJfZGF0YSA9IHVkOworCisgICAgLyogUmVzZXQgRE1BIGJ1ZmZlciByZWFkIHBvaW50ZXIgKi8KKyAgICB1ZC0+cnhfZG1hX2hlYWQgPSAwOworCisgICAgLyogU3RhcnQgRE1BIG5vdyBzaW5jZSBpdCBzaG91bGQgYmUgYWx3YXlzLXJ1bm5pbmcgKi8KKyAgICBod191YXJ0X2NsZWFyX2RtYV9yZXF1ZXN0KHVhcnQpOworICAgIGh3X2RtYV9jaGFubmVsX2luaXRpYWxpemF0aW9uKCZ1ZC0+cnhfZG1hKTsKKyAgICBod19kbWFfY2hhbm5lbF9lbmFibGUodWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciwgSFdfRE1BX1NUQVRFX0VOQUJMRUQpOworfQorCit2b2lkIGh3X3VhcnRfY29weV9yeF9jaXJjdWxhcl9kbWFfYnVmZmVyKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCAqYnVmLCB1aW50MTZfdCBsZW4pCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgQVNTRVJUX0VSUk9SKGxlbiA8IHVkLT5yeF9kbWFfYnVmX3NpemUpOworCisgICAgaWYgKHVkLT5yeF9kbWFfaGVhZCArIGxlbiA8PSB1ZC0+cnhfZG1hX2J1Zl9zaXplKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGJ1ZiwgJnVkLT5yeF9kbWFfYnVmW3VkLT5yeF9kbWFfaGVhZF0sIGxlbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGNodW5rX2xlbiA9IHVkLT5yeF9kbWFfYnVmX3NpemUgLSB1ZC0+cnhfZG1hX2hlYWQ7CisgICAgICAgIG1lbWNweShidWYsICZ1ZC0+cnhfZG1hX2J1Zlt1ZC0+cnhfZG1hX2hlYWRdLCBjaHVua19sZW4pOworICAgICAgICBtZW1jcHkoYnVmICsgY2h1bmtfbGVuLCAmdWQtPnJ4X2RtYV9idWZbMF0sIGxlbiAtIGNodW5rX2xlbik7CisgICAgfQorCisgICAgLyogVGhpcyBzaG91bGQgYmUgcHJvdGVjdGVkIHNvIElTUiBkb2VzIG5vdCB0cnkgdG8gcmVhZCByeF9kbWFfaGVhZCB3aGlsZSB3ZSB1cGRhdGUgaXQgKi8KKyAgICBHTE9CQUxfSU5UX0RJU0FCTEUoKTsKKyAgICB1ZC0+cnhfZG1hX2hlYWQgPSAodWQtPnJ4X2RtYV9oZWFkICsgbGVuKSAlIHVkLT5yeF9kbWFfYnVmX3NpemU7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7Cit9CisKKyNlbmRpZiAvKiBkZ19jb25maWdVQVJUX1JYX0NJUkNVTEFSX0RNQSAqLworCisjZW5kaWYgLyogSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQgKi8KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGluZSBjb250cm9sIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIGh3X3VhcnRfaW5pdF9leChIV19VQVJUX0lEIHVhcnQsIGNvbnN0IHVhcnRfY29uZmlnX2V4ICp1YXJ0X2luaXQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgLyoKKyAgICAgKiBSZWFkIFVBUlRfVVNSX1JFRyB0byBjbGVhciBhbnkgcGVuZGluZyBidXN5IGludGVycnVwdC4KKyAgICAgKi8KKyAgICBod191YXJ0X3RyYW5zbWl0X2ZpZm9fZW1wdHkodWFydCk7CisKKworICAgIGlmICh1YXJ0ID09IEhXX1VBUlQxKQorICAgIHsKKyAgICAgICAgLy8gdGhlcmUgaXMgbm8gRklGTyBmb3IgVUFSVDAgYXMgeWV0CisgICAgICAgIHVkLT5yeF9maWZvX29uID0gMDsKKyAgICAgICAgdWQtPnR4X2ZpZm9fb24gPSAwOworICAgICAgICBod191YXJ0X2Rpc2FibGVfZmlmbyh1YXJ0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHVhcnRfaW5pdC0+dXNlX2ZpZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHVkLT5yeF9maWZvX29uID0gMTsKKyAgICAgICAgICAgIHVkLT50eF9maWZvX29uID0gMTsKKyAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX2ZpZm8odWFydCk7CisgICAgICAgICAgICB1ZC0+cnhfZmlmb19sZXZlbCA9IHVhcnRfaW5pdC0+cnhfZmlmb190cl9sdmw7CisgICAgICAgICAgICBod191YXJ0X3J4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgdWFydF9pbml0LT5yeF9maWZvX3RyX2x2bCk7CisgICAgICAgICAgICB1ZC0+dHhfZmlmb19sZXZlbCA9IHVhcnRfaW5pdC0+dHhfZmlmb190cl9sdmw7CisgICAgICAgICAgICBod191YXJ0X3R4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgdWFydF9pbml0LT50eF9maWZvX3RyX2x2bCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1ZC0+cnhfZmlmb19vbiA9IDA7CisgICAgICAgICAgICB1ZC0+dHhfZmlmb19vbiA9IDA7CisgICAgICAgICAgICBod191YXJ0X2Rpc2FibGVfZmlmbyh1YXJ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIFJFR19TRVRfQklUKENSR19QRVIsIENMS19QRVJfUkVHLCBVQVJUX0VOQUJMRSk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICAvLyBTZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlciB0byBhY2Nlc3MgRExMICYgRExIIHJlZ2lzdGVycworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDEpOworICAgIC8vIFNldCBmcmFjdGlvbiBieXRlIG9mIGJhdWQgcmF0ZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfRExGX1JFRyA9IDB4RkYgJiB1YXJ0X2luaXQtPmJhdWRfcmF0ZTsKKyAgICAvLyBTZXQgbG93IGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9SQlJfVEhSX0RMTF9SRUcgPSAweEZGICYgKHVhcnRfaW5pdC0+YmF1ZF9yYXRlID4+IDgpOworICAgIC8vIFNldCBoaWdoIGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRyA9IDB4RkYgJiAodWFydF9pbml0LT5iYXVkX3JhdGUgPj4gMTYpOworICAgIC8vIFJlc2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAwKTsKKyAgICAvLyBTZXQgUGFyaXR5CisgICAgVUJBKHVhcnQpLT5VQVJUMl9MQ1JfUkVHID0gKHVhcnRfaW5pdC0+cGFyaXR5KSA8PCAzOworICAgIC8vIFNldCBEYXRhIEJpdHMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETFMsIHVhcnRfaW5pdC0+ZGF0YSk7CisgICAgLy8gU2V0IFN0b3AgQml0cworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX1NUT1AsIHVhcnRfaW5pdC0+c3RvcCk7CisgICAgLy8gU2V0IEF1dG8gZmxvdyBjb250cm9sCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfQUZDRSwgdWFydF9pbml0LT5hdXRvX2Zsb3dfY29udHJvbCk7CisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfUlRTLCB1YXJ0X2luaXQtPmF1dG9fZmxvd19jb250cm9sKTsKKyAgICB1ZC0+dHhfY2IgPSBOVUxMOworICAgIHVkLT5yeF9jYiA9IE5VTEw7CisgICAgdWQtPnJ4X2xlbiA9IDA7CisgICAgdWQtPnR4X2xlbiA9IDA7CisgICAgdWQtPnVzZV9kbWEgPSAwOworICAgIHVkLT5yeF9kbWEuY2hhbm5lbF9udW1iZXIgPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEOworICAgIHVkLT50eF9kbWEuY2hhbm5lbF9udW1iZXIgPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEOworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisKKyAgICBpZiAodWFydF9pbml0LT51c2VfZG1hKQorICAgIHsKKyAgICAgICAgaHdfdWFydF9zZXRfZG1hX2NoYW5uZWxzX2V4KHVhcnQsIHVhcnRfaW5pdC0+dHhfZG1hX2NoYW5uZWwsIHVhcnRfaW5pdC0+cnhfZG1hX2NoYW5uZWwsIEhXX0RNQV9QUklPXzIpOworICAgIH0KKworI2VuZGlmCit9CisKK3ZvaWQgaHdfdWFydF9yZWluaXRfZXgoSFdfVUFSVF9JRCB1YXJ0LCBjb25zdCB1YXJ0X2NvbmZpZ19leCAqdWFydF9pbml0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKworICAgIEdMT0JBTF9JTlRfRElTQUJMRSgpOworICAgIFJFR19TRVRfQklUKENSR19QRVIsIENMS19QRVJfUkVHLCBVQVJUX0VOQUJMRSk7CisgICAgR0xPQkFMX0lOVF9SRVNUT1JFKCk7CisKKyAgICAvKgorICAgICAqIFJlYWQgVUFSVF9VU1JfUkVHIHRvIGNsZWFyIGFueSBwZW5kaW5nIGJ1c3kgaW50ZXJydXB0LgorICAgICAqLworICAgIGh3X3VhcnRfdHJhbnNtaXRfZmlmb19lbXB0eSh1YXJ0KTsKKworICAgIGlmICh1YXJ0ID09IEhXX1VBUlQyKQorICAgIHsKKyAgICAgICAgaWYgKHVhcnRfaW5pdC0+dXNlX2ZpZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX2ZpZm8odWFydCk7CisgICAgICAgICAgICBod191YXJ0X3J4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgdWFydF9pbml0LT5yeF9maWZvX3RyX2x2bCk7CisgICAgICAgICAgICBod191YXJ0X3R4X2ZpZm9fdHJfbHZsX3NldGYodWFydCwgdWFydF9pbml0LT50eF9maWZvX3RyX2x2bCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBod191YXJ0X2Rpc2FibGVfZmlmbyh1YXJ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyIHRvIGFjY2VzcyBETEwgJiBETEggcmVnaXN0ZXJzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMSk7CisgICAgLy8gU2V0IGZyYWN0aW9uIGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9ETEZfUkVHID0gMHhGRiAmIHVhcnRfaW5pdC0+YmF1ZF9yYXRlOworICAgIC8vIFNldCBsb3cgYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRyA9IDB4RkYgJiAodWFydF9pbml0LT5iYXVkX3JhdGUgPj4gOCk7CisgICAgLy8gU2V0IGhpZ2ggYnl0ZSBvZiBiYXVkIHJhcmUKKyAgICBVQkEodWFydCktPlVBUlQyX0lFUl9ETEhfUkVHID0gMHhGRiAmICh1YXJ0X2luaXQtPmJhdWRfcmF0ZSA+PiAxNik7CisgICAgLy8gUmVzZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDApOworICAgIC8vIFNldCBQYXJpdHkKKyAgICBVQkEodWFydCktPlVBUlQyX0xDUl9SRUcgPSAodWFydF9pbml0LT5wYXJpdHkpIDw8IDM7CisgICAgLy8gU2V0IERhdGEgQml0cworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMUywgdWFydF9pbml0LT5kYXRhKTsKKyAgICAvLyBTZXQgU3RvcCBCaXRzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfU1RPUCwgdWFydF9pbml0LT5zdG9wKTsKKyAgICAvLyBTZXQgQXV0byBmbG93IGNvbnRyb2wKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9BRkNFLCB1YXJ0X2luaXQtPmF1dG9fZmxvd19jb250cm9sKTsKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9SVFMsIHVhcnRfaW5pdC0+YXV0b19mbG93X2NvbnRyb2wpOworCisgICAgaWYgKHVkLT5yeF9jYiAmJiB1ZC0+cnhfbGVuICE9IHVkLT5yeF9peCkKKyAgICB7CisgICAgICAgIGlmICh1ZC0+cnhfbGVuID4gMSAmJiB1YXJ0X2luaXQtPnVzZV9kbWEgJiYgdWFydF9pbml0LT5yeF9kbWFfY2hhbm5lbCAhPSBIV19ETUFfQ0hBTk5FTF9JTlZBTElEKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgZHJpdmVuCisgICAgICAgICAgICBod191YXJ0X2VuYWJsZV9yeF9pbnQodWFydCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgaHdfdWFydF9pbml0KEhXX1VBUlRfSUQgdWFydCwgY29uc3QgdWFydF9jb25maWcgKnVhcnRfaW5pdCkKK3sKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisKKyAgICAvKgorICAgICAqIFJlYWQgVUFSVF9VU1JfUkVHIHRvIGNsZWFyIGFueSBwZW5kaW5nIGJ1c3kgaW50ZXJydXB0LgorICAgICAqLworICAgIGh3X3VhcnRfdHJhbnNtaXRfZmlmb19lbXB0eSh1YXJ0KTsKKworCisgICAgaWYgKHVhcnQgPT0gSFdfVUFSVDEpCisgICAgeworICAgICAgICAvLyB0aGVyZSBpcyBubyBGSUZPIGZvciBVQVJUMCBhcyB5ZXQKKyAgICAgICAgdWQtPnJ4X2ZpZm9fb24gPSAwOworICAgICAgICB1ZC0+dHhfZmlmb19vbiA9IDA7CisgICAgICAgIGh3X3VhcnRfZGlzYWJsZV9maWZvKHVhcnQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAodWFydF9pbml0LT51c2VfZmlmbykKKyAgICAgICAgeworICAgICAgICAgICAgdWQtPnJ4X2ZpZm9fb24gPSAxOworICAgICAgICAgICAgdWQtPnR4X2ZpZm9fb24gPSAxOworICAgICAgICAgICAgaHdfdWFydF9lbmFibGVfZmlmbyh1YXJ0KTsKKyAgICAgICAgICAgIGh3X3VhcnRfcnhfZmlmb190cl9sdmxfc2V0Zih1YXJ0LCAwKTsKKyAgICAgICAgICAgIGh3X3VhcnRfdHhfZmlmb190cl9sdmxfc2V0Zih1YXJ0LCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVkLT5yeF9maWZvX29uID0gMDsKKyAgICAgICAgICAgIHVkLT50eF9maWZvX29uID0gMDsKKyAgICAgICAgICAgIGh3X3VhcnRfZGlzYWJsZV9maWZvKHVhcnQpOworICAgICAgICB9CisgICAgfQorCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgUkVHX1NFVF9CSVQoQ1JHX1BFUiwgQ0xLX1BFUl9SRUcsIFVBUlRfRU5BQkxFKTsKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIC8vIFNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyIHRvIGFjY2VzcyBETEwgJiBETEggcmVnaXN0ZXJzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMSk7CisgICAgLy8gU2V0IGZyYWN0aW9uIGJ5dGUgb2YgYmF1ZCByYXRlCisgICAgVUJBKHVhcnQpLT5VQVJUMl9ETEZfUkVHID0gMHhGRiAmIHVhcnRfaW5pdC0+YmF1ZF9yYXRlOworICAgIC8vIFNldCBsb3cgYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRyA9IDB4RkYgJiAodWFydF9pbml0LT5iYXVkX3JhdGUgPj4gOCk7CisgICAgLy8gU2V0IGhpZ2ggYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX0lFUl9ETEhfUkVHID0gMHhGRiAmICh1YXJ0X2luaXQtPmJhdWRfcmF0ZSA+PiAxNik7CisgICAgLy8gUmVzZXQgRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0IGluIExDUiByZWdpc3RlcgorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMQUIsIDApOworICAgIC8vIFNldCBQYXJpdHkKKyAgICBVQkEodWFydCktPlVBUlQyX0xDUl9SRUcgPSAodWFydF9pbml0LT5wYXJpdHkpIDw8IDM7CisgICAgLy8gU2V0IERhdGEgQml0cworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTENSLCBVQVJUX0RMUywgdWFydF9pbml0LT5kYXRhKTsKKyAgICAvLyBTZXQgU3RvcCBCaXRzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfU1RPUCwgdWFydF9pbml0LT5zdG9wKTsKKyAgICAvLyBTZXQgQXV0byBmbG93IGNvbnRyb2wKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9BRkNFLCB1YXJ0X2luaXQtPmF1dG9fZmxvd19jb250cm9sKTsKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9SVFMsIHVhcnRfaW5pdC0+YXV0b19mbG93X2NvbnRyb2wpOworICAgIHVkLT50eF9jYiA9IE5VTEw7CisgICAgdWQtPnJ4X2NiID0gTlVMTDsKKyAgICB1ZC0+cnhfbGVuID0gMDsKKyAgICB1ZC0+dHhfbGVuID0gMDsKKyAgICB1ZC0+dXNlX2RtYSA9IDA7CisgICAgdWQtPnJ4X2RtYS5jaGFubmVsX251bWJlciA9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQ7CisgICAgdWQtPnR4X2RtYS5jaGFubmVsX251bWJlciA9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQ7CisjaWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKworICAgIGlmICh1YXJ0X2luaXQtPnVzZV9kbWEpCisgICAgeworICAgICAgICBod191YXJ0X3NldF9kbWFfY2hhbm5lbHNfZXgodWFydCwgdWFydF9pbml0LT50eF9kbWFfY2hhbm5lbCwgdWFydF9pbml0LT5yeF9kbWFfY2hhbm5lbCwgSFdfRE1BX1BSSU9fMik7CisgICAgfQorCisjZW5kaWYKK30KKwordm9pZCBod191YXJ0X3JlaW5pdChIV19VQVJUX0lEIHVhcnQsIGNvbnN0IHVhcnRfY29uZmlnICp1YXJ0X2luaXQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworCisgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgUkVHX1NFVF9CSVQoQ1JHX1BFUiwgQ0xLX1BFUl9SRUcsIFVBUlRfRU5BQkxFKTsKKyAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgIC8qCisgICAgICogUmVhZCBVQVJUX1VTUl9SRUcgdG8gY2xlYXIgYW55IHBlbmRpbmcgYnVzeSBpbnRlcnJ1cHQuCisgICAgICovCisgICAgaHdfdWFydF90cmFuc21pdF9maWZvX2VtcHR5KHVhcnQpOworCisgICAgaWYgKHVhcnQgPT0gSFdfVUFSVDIpCisgICAgeworICAgICAgICBpZiAodWFydF9pbml0LT51c2VfZmlmbykKKyAgICAgICAgeworICAgICAgICAgICAgaHdfdWFydF9lbmFibGVfZmlmbyh1YXJ0KTsKKyAgICAgICAgICAgIGh3X3VhcnRfcnhfZmlmb190cl9sdmxfc2V0Zih1YXJ0LCAwKTsKKyAgICAgICAgICAgIGh3X3VhcnRfdHhfZmlmb190cl9sdmxfc2V0Zih1YXJ0LCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGh3X3VhcnRfZGlzYWJsZV9maWZvKHVhcnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCBpbiBMQ1IgcmVnaXN0ZXIgdG8gYWNjZXNzIERMTCAmIERMSCByZWdpc3RlcnMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9ETEFCLCAxKTsKKyAgICAvLyBTZXQgZnJhY3Rpb24gYnl0ZSBvZiBiYXVkIHJhdGUKKyAgICBVQkEodWFydCktPlVBUlQyX0RMRl9SRUcgPSAweEZGICYgdWFydF9pbml0LT5iYXVkX3JhdGU7CisgICAgLy8gU2V0IGxvdyBieXRlIG9mIGJhdWQgcmF0ZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfUkJSX1RIUl9ETExfUkVHID0gMHhGRiAmICh1YXJ0X2luaXQtPmJhdWRfcmF0ZSA+PiA4KTsKKyAgICAvLyBTZXQgaGlnaCBieXRlIG9mIGJhdWQgcmFyZQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfSUVSX0RMSF9SRUcgPSAweEZGICYgKHVhcnRfaW5pdC0+YmF1ZF9yYXRlID4+IDE2KTsKKyAgICAvLyBSZXNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMCk7CisgICAgLy8gU2V0IFBhcml0eQorICAgIFVCQSh1YXJ0KS0+VUFSVDJfTENSX1JFRyA9ICh1YXJ0X2luaXQtPnBhcml0eSkgPDwgMzsKKyAgICAvLyBTZXQgRGF0YSBCaXRzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExTLCB1YXJ0X2luaXQtPmRhdGEpOworICAgIC8vIFNldCBTdG9wIEJpdHMKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIExDUiwgVUFSVF9TVE9QLCB1YXJ0X2luaXQtPnN0b3ApOworICAgIC8vIFNldCBBdXRvIGZsb3cgY29udHJvbAorICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX0FGQ0UsIHVhcnRfaW5pdC0+YXV0b19mbG93X2NvbnRyb2wpOworICAgIEhXX1VBUlRfUkVHX1NFVEYodWFydCwgTUNSLCBVQVJUX1JUUywgdWFydF9pbml0LT5hdXRvX2Zsb3dfY29udHJvbCk7CisKKyAgICBpZiAodWQtPnJ4X2NiICYmIHVkLT5yeF9sZW4gIT0gdWQtPnJ4X2l4KQorICAgIHsKKyAgICAgICAgaWYgKHVkLT5yeF9sZW4gPiAxICYmIHVhcnRfaW5pdC0+dXNlX2RtYSAmJiB1YXJ0X2luaXQtPnJ4X2RtYV9jaGFubmVsICE9IEhXX0RNQV9DSEFOTkVMX0lOVkFMSUQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEludGVycnVwdCBkcml2ZW4KKyAgICAgICAgICAgIGh3X3VhcnRfZW5hYmxlX3J4X2ludCh1YXJ0LCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBod191YXJ0X2NmZ19nZXQoSFdfVUFSVF9JRCB1YXJ0LCB1YXJ0X2NvbmZpZyAqdWFydF9jZmcpCit7CisjaWYgSFdfVUFSVF9VU0VfRE1BX1NVUFBPUlQKKyAgICBVQVJUX0RhdGEgKnVkID0gVUFSVERBVEEodWFydCk7CisjZW5kaWYKKworICAgIC8vIFNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTENSIHJlZ2lzdGVyIHRvIGFjY2VzcyBETEwgJiBETEggcmVnaXN0ZXJzCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMSk7CisgICAgLy8gUmVhZCBiYXVkIHJhdGUgbG93IGJ5dGUgZnJvbSBETEwgcmVnaXN0ZXIKKyAgICB1YXJ0X2NmZy0+YmF1ZF9yYXRlID0gKDB4RkYgJiBVQkEodWFydCktPlVBUlQyX1JCUl9USFJfRExMX1JFRykgPDwgODsKKyAgICAvLyBSZWFkIGJhdWQgcmF0ZSBoaWdoIGJ5dGUgZnJvbSBETEggcmVnaXN0ZXIKKyAgICB1YXJ0X2NmZy0+YmF1ZF9yYXRlICs9ICgweEZGICYgVUJBKHVhcnQpLT5VQVJUMl9JRVJfRExIX1JFRykgPDwgMTY7CisgICAgLy8gUmVhZCBiYXVkIHJhdGUgZnJhY3Rpb24gYnl0ZSBmcm9tIERMRiByZWdpc3RlcgorICAgIHVhcnRfY2ZnLT5iYXVkX3JhdGUgKz0gMHhGRiAmIFVCQSh1YXJ0KS0+VUFSVDJfRExGX1JFRzsKKyAgICAvLyBSZXNldCBEaXZpc29yIExhdGNoIEFjY2VzcyBCaXQgaW4gTGluZSBDb250cm9sIFJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBMQ1IsIFVBUlRfRExBQiwgMCk7CisKKyAgICAvLyBGaWxsLWluIHRoZSByZXN0IG9mIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzCisgICAgdWFydF9jZmctPmRhdGEgPSBIV19VQVJUX1JFR19HRVRGKHVhcnQsIExDUiwgVUFSVF9ETFMpOworICAgIHVhcnRfY2ZnLT5wYXJpdHkgPSBVQkEodWFydCktPlVBUlQyX0xDUl9SRUc7CisgICAgdWFydF9jZmctPnBhcml0eSAmPSAoKDEgPDwgVUFSVF9VQVJUX0xDUl9SRUdfVUFSVF9FUFNfUG9zKSB8ICgxIDw8IFVBUlRfVUFSVF9MQ1JfUkVHX1VBUlRfUEVOX1BvcykpOworICAgIHVhcnRfY2ZnLT5wYXJpdHkgPSB1YXJ0X2NmZy0+cGFyaXR5ID4+IFVBUlRfVUFSVF9MQ1JfUkVHX1VBUlRfUEVOX1BvczsKKyAgICB1YXJ0X2NmZy0+c3RvcCA9IEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTENSLCBVQVJUX1NUT1ApOworI2lmIEhXX1VBUlRfVVNFX0RNQV9TVVBQT1JUCisgICAgdWFydF9jZmctPnR4X2RtYV9jaGFubmVsID0gdWQtPnR4X2RtYS5jaGFubmVsX251bWJlcjsKKyAgICB1YXJ0X2NmZy0+cnhfZG1hX2NoYW5uZWwgPSB1ZC0+cnhfZG1hLmNoYW5uZWxfbnVtYmVyOworICAgIHVhcnRfY2ZnLT51c2VfZG1hID0gdWQtPnVzZV9kbWE7CisjZW5kaWYKKyAgICB1YXJ0X2NmZy0+YXV0b19mbG93X2NvbnRyb2wgPSBod191YXJ0X2FmY2VfZ2V0Zih1YXJ0KTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTW9kZW0gY29udHJvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordWludDhfdCBod191YXJ0X3NpcmVfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgU0lSRSBiaXQgZnJvbSB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorICAgIHJldHVybiAodWludDhfdCkgSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBNQ1IsIFVBUlRfU0lSRSk7Cit9CisKK3ZvaWQgaHdfdWFydF9zaXJlX3NldGYoSFdfVUFSVF9JRCB1YXJ0LCB1aW50OF90IHNpcmUpCit7CisgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgU0lSRSBiaXQgaW4gdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICBIV19VQVJUX1JFR19TRVRGKHVhcnQsIE1DUiwgVUFSVF9TSVJFLCAgc2lyZSk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9hZmNlX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIC8vIEdldCB0aGUgdmFsdWUgb2YgdGhlIEFGQ0UgYml0IGZyb20gdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICByZXR1cm4gMHhGRiAmIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTUNSLCBVQVJUX0FGQ0UpOworfQorCit2b2lkIGh3X3VhcnRfYWZjZV9zZXRmKEhXX1VBUlRfSUQgdWFydCwgdWludDhfdCBhZmNlKQoreworICAgIC8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIEFGQ0UgYml0IGluIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfQUZDRSwgYWZjZSk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9sb29wYmFja19nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSBsb29wIGJhY2sgKExCKSBiaXQgZnJvbSB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorICAgIHJldHVybiAodWludDhfdCkgSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBNQ1IsIFVBUlRfTEIpOworfQorCit2b2lkIGh3X3VhcnRfbG9vcGJhY2tfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgbGIpCit7CisgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgbG9vcCBiYWNrIChMQikgYml0IGluIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfTEIsIGxiKTsKK30KKwordWludDhfdCBod191YXJ0X3J0c19nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSBSVFMgYml0IGZyb20gdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICByZXR1cm4gMHhGRiAmIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTUNSLCBVQVJUX1JUUyk7Cit9CisKK3ZvaWQgaHdfdWFydF9ydHNfc2V0ZihIV19VQVJUX0lEIHVhcnQsIHVpbnQ4X3QgcnRzbikKK3sKKyAgICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBSVFMgYml0IGluIHRoZSBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisgICAgSFdfVUFSVF9SRUdfU0VURih1YXJ0LCBNQ1IsIFVBUlRfUlRTLCBydHNuKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGluZSBzdGF0dXMgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordWludDhfdCBod191YXJ0X3J4X2ZpZm9fZXJyX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIC8qIE9ubHkgVUFSVDIgaGFzIGEgRklGTyAqLworICAgIEFTU0VSVF9FUlJPUih1YXJ0ID09IEhXX1VBUlQyKTsKKyAgICAvLyBHZXQgUmVjZWl2ZXIgRklGTyBFcnJvciBiaXQKKyAgICByZXR1cm4gKHVpbnQ4X3QpIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX1JGRSk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9pc190eF9maWZvX2VtcHR5KEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgVHJhbnNtaXR0ZXIgRW1wdHkgYml0IGZyb20gTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBMU1IsIFVBUlRfVEVNVCkgIT0gMDsKK30KKwordWludDhfdCBod191YXJ0X3Rocl9lbXB0eV9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciBFbXB0eSBiaXQgdmFsdWUgZnJvbSBMaW5lIFN0YXR1cyBSZWdpc3RlcgorICAgIHJldHVybiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIExTUiwgVUFSVF9USFJFKTsKK30KKwordWludDhfdCBod191YXJ0X2JyZWFrX2ludF9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgQnJlYWsgSW50ZXJydXB0IGJpdCB2YWx1ZSBmcm9tIExpbmUgU3RhdHVzIFJlZ2lzdGVyCisgICAgcmV0dXJuIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTFNSLCBVQVJUX0JJKTsKK30KKwordWludDhfdCBod191YXJ0X2ZyYW1lX2Vycl9nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgRnJhbWluZyBFcnJvciBiaXQgdmFsdWUgZnJvbSBMaW5lIFN0YXR1cyBSZWdpc3RlcgorICAgIHJldHVybiBIV19VQVJUX1JFR19HRVRGKHVhcnQsIExTUiwgVUFSVF9GRSk7Cit9CisKK3VpbnQ4X3QgaHdfdWFydF9wYXJpdHlfZXJyX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIC8vIEdldCBQYXJpdHkgRXJyb3IgYml0IHZhbHVlIGZyb20gTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBMU1IsIFVBUlRfUEUpOworfQorCit1aW50OF90IGh3X3VhcnRfb3ZlcnJ1bl9lcnJfZ2V0ZihIV19VQVJUX0lEIHVhcnQpCit7CisgICAgLy8gR2V0IE92ZXJydW4gRXJyb3IgYml0IHZhbHVlIGZyb20gTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZXR1cm4gSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBMU1IsIFVBUlRfT0UpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PSBNb2RlbSBzdGF0dXMgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit1aW50OF90IGh3X3VhcnRfY3RzX2dldGYoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIC8vIEdldCBDVFMgYml0IGZyb20gTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorICAgIHJldHVybiAodWludDhfdCkgSFdfVUFSVF9SRUdfR0VURih1YXJ0LCBNU1IsIFVBUlRfQ1RTKTsKK30KKwordWludDhfdCBod191YXJ0X2RlbHRhX2N0c19nZXRmKEhXX1VBUlRfSUQgdWFydCkKK3sKKyAgICAvLyBHZXQgdGhlIERDVFMgYml0IHZhbHVlIGZyb20gdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKKyAgICByZXR1cm4gKHVpbnQ4X3QpIEhXX1VBUlRfUkVHX0dFVEYodWFydCwgTVNSLCBVQVJUX0RDVFMpOworfQorCitib29sIGh3X3VhcnRfdHhfaW5fcHJvZ3Jlc3MoSFdfVUFSVF9JRCB1YXJ0KQoreworICAgIFVBUlRfRGF0YSAqdWQgPSBVQVJUREFUQSh1YXJ0KTsKKyAgICByZXR1cm4gdWQtPnR4X2NiICE9IE5VTEw7Cit9CisKK2Jvb2wgaHdfdWFydF9yeF9pbl9wcm9ncmVzcyhIV19VQVJUX0lEIHVhcnQpCit7CisgICAgVUFSVF9EYXRhICp1ZCA9IFVBUlREQVRBKHVhcnQpOworICAgIHJldHVybiB1ZC0+cnhfY2IgIT0gTlVMTDsKK30KKworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9IV19VQVJUICovCisvKioKKyAqIFx9CisgKiBcfQorICogXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3dhdGNoZG9nLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfd2F0Y2hkb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzc2NGIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL2h3X3dhdGNoZG9nLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qKgorICogXGFkZHRvZ3JvdXAgQlNQCisgKiBceworICogXGFkZHRvZ3JvdXAgREVWSUNFUworICogXHsKKyAqIFxhZGR0b2dyb3VwIFdhdGNoZG9nX1RpbWVyCisgKiBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBod193YXRjaGRvZy5jCisgKgorICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIHRoZSBXYXRjaGRvZyB0aW1lciBMb3cgTGV2ZWwgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiaHdfd2F0Y2hkb2cuaCIKKyNpbmNsdWRlICJod19jcG0uaCIKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMKKyAqLwordWludDMyX3Qgbm1pX2V2ZW50X2RhdGFbOV0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbigibm1pX2luZm8iKSkpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzCisgKi8KK3N0YXRpYyBod193YXRjaGRvZ19pbnRlcnJ1cHRfY2IgaW50X2hhbmRsZXIgX19SRVRBSU5FRCA9IE5VTEw7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBiYXNlIGFkZHJlc3MgaW4gUmV0ZW50aW9uIFJBTSB3aGVyZSB0aGUgc3RhY2tlZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcGllZC4KKyAqLworI2RlZmluZSBTVEFUVVNfQkFTRSAoMHg3RkM1NjAwKQorCitib29sIGh3X3dhdGNoZG9nX2ZyZWV6ZSh2b2lkKQoreworICAgIEdQUkVHLT5TRVRfRlJFRVpFX1JFRyA9IEdQUkVHX1NFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX01zazsKKworICAgIHJldHVybiAhUkVHX0dFVEYoV0RPRywgV0FUQ0hET0dfQ1RSTF9SRUcsIE5NSV9SU1QpOworfQorCit2b2lkIGh3X3dhdGNoZG9nX3VuZnJlZXplKHZvaWQpCit7CisgICAgR1BSRUctPlJFU0VUX0ZSRUVaRV9SRUcgPSBHUFJFR19SRVNFVF9GUkVFWkVfUkVHX0ZSWl9XRE9HX01zazsKK30KKworSFdfV0RHX1JFU0VUIGh3X3dhdGNoZG9nX2lzX2lycV9vcl9yc3RfZ2VuKHZvaWQpCit7CisgICAgaWYgKFJFR19HRVRGKFdET0csIFdBVENIRE9HX0NUUkxfUkVHLCBOTUlfUlNUKSkKKyAgICB7CisgICAgICAgIHJldHVybiBIV19XREdfUkVTRVRfUlNUOworICAgIH0KKworICAgIHJldHVybiBIV19XREdfUkVTRVRfTk1JOworfQorCit2b2lkIGh3X3dhdGNoZG9nX3JlZ2lzdGVyX2ludChod193YXRjaGRvZ19pbnRlcnJ1cHRfY2IgaGFuZGxlcikKK3sKKyAgICBpbnRfaGFuZGxlciA9IGhhbmRsZXI7Cit9CisKK3ZvaWQgaHdfd2F0Y2hkb2dfdW5yZWdpc3Rlcl9pbnQodm9pZCkKK3sKKyAgICBpbnRfaGFuZGxlciA9IE5VTEw7Cit9CisKK19fUkVUQUlORURfQ09ERSB2b2lkIGh3X3dhdGNoZG9nX2hhbmRsZV9pbnQodW5zaWduZWQgbG9uZyAqZXhjZXB0aW9uX2FyZ3MpCit7CisgICAgLy8gUmVhY2hlZCB0aGlzIHBvaW50IGR1ZSB0byBhIFdET0cgdGltZW91dAorICAgIHVpbnQxNl90IHBtdV9jdHJsX3JlZyA9IENSR19UT1AtPlBNVV9DVFJMX1JFRzsKKyAgICBwbXVfY3RybF9yZWcgfD0gKCgxIDw8IENSR19UT1BfUE1VX0NUUkxfUkVHX0JMRV9TTEVFUF9Qb3MpICAgICB8ICAgICAgICAvKiB0dXJuIG9mZiBCTEUgKi8KKyAgICAgICAgICAgICAgICAgICAgICgxIDw8IENSR19UT1BfUE1VX0NUUkxfUkVHX0ZUREZfU0xFRVBfUG9zKSAgICB8ICAgICAgICAvKiB0dXJuIG9mZiBGVERGICovCisgICAgICAgICAgICAgICAgICAgICAoMSA8PCBDUkdfVE9QX1BNVV9DVFJMX1JFR19SQURJT19TTEVFUF9Qb3MpICAgfCAgICAgICAgLyogdHVybiBvZmYgcmFkaW8gUEQgKi8KKyAgICAgICAgICAgICAgICAgICAgICgxIDw8IENSR19UT1BfUE1VX0NUUkxfUkVHX1BFUklQSF9TTEVFUF9Qb3MpKTsgICAgICAgICAvKiB0dXJuIG9mZiBwZXJpcGhlcmFsIHBvd2VyIGRvbWFpbiAqLworICAgIENSR19UT1AtPlBNVV9DVFJMX1JFRyA9IHBtdV9jdHJsX3JlZzsKKyAgICBSRUdfU0VUX0JJVChDUkdfVE9QLCBDTEtfUkFESU9fUkVHLCBCTEVfTFBfUkVTRVQpOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldCB0aGUgQkxFIExQIHRpbWVyICovCisKKyNpZiAoZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERSkKKyAgICBod193YXRjaGRvZ19mcmVlemUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIFdET0cKKworICAgIEVOQUJMRV9ERUJVR0dFUjsKKworICAgIGlmIChleGNlcHRpb25fYXJncyAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFKSA9IGV4Y2VwdGlvbl9hcmdzWzBdOyAgICAgICAgICAgLy8gUjAKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgwNCkgPSBleGNlcHRpb25fYXJnc1sxXTsgICAgLy8gUjEKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgwOCkgPSBleGNlcHRpb25fYXJnc1syXTsgICAgLy8gUjIKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgwQykgPSBleGNlcHRpb25fYXJnc1szXTsgICAgLy8gUjMKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgxMCkgPSBleGNlcHRpb25fYXJnc1s0XTsgICAgLy8gUjEyCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MTQpID0gZXhjZXB0aW9uX2FyZ3NbNV07ICAgIC8vIExSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MTgpID0gZXhjZXB0aW9uX2FyZ3NbNl07ICAgIC8vIFBDCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MUMpID0gZXhjZXB0aW9uX2FyZ3NbN107ICAgIC8vIFBTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDIwKSA9ICh1bnNpZ25lZCBsb25nKWV4Y2VwdGlvbl9hcmdzOyAgICAvLyBTdGFjayBQb2ludGVyCisKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgyNCkgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDI4KSkpOyAgICAvLyBDRlNSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MjgpID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQyQykpKTsgICAgLy8gSEZTUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDJDKSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMzApKSk7ICAgIC8vIERGU1IKKyAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFNUQVRVU19CQVNFICsgMHgzMCkgPSAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgweEUwMDBFRDNDKSkpOyAgICAvLyBBRlNSCisgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShTVEFUVVNfQkFTRSArIDB4MzQpID0gKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoMHhFMDAwRUQzNCkpKTsgICAgLy8gTU1BUgorICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoU1RBVFVTX0JBU0UgKyAweDM4KSA9ICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKDB4RTAwMEVEMzgpKSk7ICAgIC8vIEJGQVIKKyAgICB9CisKKyAgICBod19jcG1fYXNzZXJ0X3RyaWdnZXJfZ3BpbygpOworCisgICAgaWYgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgREJHX0lTX0FDVElWRSkpCisgICAgeworICAgICAgICBfX0JLUFQoMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlICgxKTsKKyAgICB9CisKKyNlbHNlIC8vIGRnX2NvbmZpZ0lNQUdFX1NFVFVQID09IERFVkVMT1BNRU5UX01PREUKKworICAgIGlmIChleGNlcHRpb25fYXJncyAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbMF0gPSBOTUlfTUFHSUNfTlVNQkVSOworICAgICAgICBubWlfZXZlbnRfZGF0YVsxXSA9IGV4Y2VwdGlvbl9hcmdzWzBdOyAgICAgICAgICAvLyBSMAorICAgICAgICBubWlfZXZlbnRfZGF0YVsyXSA9IGV4Y2VwdGlvbl9hcmdzWzFdOyAgICAgICAgICAvLyBSMQorICAgICAgICBubWlfZXZlbnRfZGF0YVszXSA9IGV4Y2VwdGlvbl9hcmdzWzJdOyAgICAgICAgICAvLyBSMgorICAgICAgICBubWlfZXZlbnRfZGF0YVs0XSA9IGV4Y2VwdGlvbl9hcmdzWzNdOyAgICAgICAgICAvLyBSMworICAgICAgICBubWlfZXZlbnRfZGF0YVs1XSA9IGV4Y2VwdGlvbl9hcmdzWzRdOyAgICAgICAgICAvLyBSMTIKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbNl0gPSBleGNlcHRpb25fYXJnc1s1XTsgICAgICAgICAgLy8gTFIKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbN10gPSBleGNlcHRpb25fYXJnc1s2XTsgICAgICAgICAgLy8gUEMKKyAgICAgICAgbm1pX2V2ZW50X2RhdGFbOF0gPSBleGNlcHRpb25fYXJnc1s3XTsgICAgICAgICAgLy8gUFNSCisgICAgfQorCisgICAgLy8gV2FpdCBmb3IgdGhlIHJlc2V0IHRvIG9jY3VyCisgICAgd2hpbGUgKDEpOworCisjZW5kaWYgLy8gZGdfY29uZmlnSU1BR0VfU0VUVVAgPT0gREVWRUxPUE1FTlRfTU9ERQorfQorCitfX1JFVEFJTkVEX0NPREUgdm9pZCBOTUlfSGFuZGxlckModW5zaWduZWQgbG9uZyAqZXhjZXB0aW9uX2FyZ3MpOworCit2b2lkIE5NSV9IYW5kbGVyQyh1bnNpZ25lZCBsb25nICpleGNlcHRpb25fYXJncykKK3sKKyAgICBpZiAoaW50X2hhbmRsZXIpCisgICAgeworICAgICAgICBpbnRfaGFuZGxlcihleGNlcHRpb25fYXJncyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGh3X3dhdGNoZG9nX2hhbmRsZV9pbnQoZXhjZXB0aW9uX2FyZ3MpOworICAgIH0KK30KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvYnNwL3BlcmlwaGVyYWxzL3NyYy9od193a3VwLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfd2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDlkNmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvaHdfd2t1cC5jCkBAIC0wLDAgKzEsMjA5IEBACisvKioKKyAqIFxhZGR0b2dyb3VwIEJTUAorICogXHsKKyAqIFxhZGR0b2dyb3VwIERFVklDRVMKKyAqIFx7CisgKiBcYWRkdG9ncm91cCBXYWtldXBfVGltZXIKKyAqIFx7CisgKi8KKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGh3X3drdXAuYworICoKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2FrZXVwIHRpbWVyIExvdyBMZXZlbCBEcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWYgZGdfY29uZmlnVVNFX0hXX1dLVVAKKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxod193a3VwLmg+CisKK3N0YXRpYyBod193a3VwX2ludGVycnVwdF9jYiBpbnRyX2NiIF9fUkVUQUlORUQgLyogPSBOVUxMKi87CisKKyNpZiAoKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSAmJiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkpCisjZGVmaW5lIFBYX0RBVEFfUkVHX0FERFIoX3BvcnQpICAgICAgICAgKCh1aW50MTZfdCAqKShHUElPX0JBU0UgKyBvZmZzZXRvZihHUElPX1R5cGUsIFAwX0RBVEFfUkVHKSkgKyBfcG9ydCkKKyNkZWZpbmUgUFhfREFUQV9SRUcoX3BvcnQpICAgICAgICAgICAgICAqUFhfREFUQV9SRUdfQUREUihfcG9ydCkKKyNkZWZpbmUgQkZfR0VUKF92YXIsIF9wb3MpICAgICAgICAgICAgICAoKF92YXI+Pl9wb3MpICYgMSkKKworX19SRVRBSU5FRCB2b2xhdGlsZSB3a3VwX3Bpbl9jb25maWdfdCB3a3VwX3Bpbl9jb25maWc7Cit2b2xhdGlsZSB1aW50OF90IHdrdXBfc3RhdHVzW0hXX0dQSU9fTlVNX1BPUlRTXTsKKworc3RhdGljIGJvb2wgaHdfd2t1cF91cGRhdGVfc3RhdHVzKHZvaWQpCit7CisgICAgICAgIHVpbnQ4X3QgaSwgaiwgZW5hYmxlX2xvb3BfY250ID0gMDsKKyAgICAgICAgdWludDhfdCBwb2xfcnhfcmVnOworICAgICAgICBib29sIHdrdXBfc3RhdHVzX3VwZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgdWludDhfdCBjdXJfcG9ydF9kYXRhW0hXX0dQSU9fTlVNX1BPUlRTXTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFdfR1BJT19OVU1fUE9SVFM7IGkrKykgeworICAgICAgICAgICAgICAgIHdrdXBfc3RhdHVzW2ldID0gMDsKKyAgICAgICAgICAgICAgICBpZiAod2t1cF9waW5fY29uZmlnLnBpbl9zdGF0ZVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWFkIHBvcnQgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfcG9ydF9kYXRhW2ldID0gUFhfREFUQV9SRUcoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3JlYWQgdHJpZ2dlciBwb2xhcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgcG9sX3J4X3JlZyA9ICooKHZvbGF0aWxlIHVpbnQxNl90ICopV0FLRVVQX0JBU0UgKyAxMCArIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHdrdXBfcGluX2NvbmZpZy5waW5fc3RhdGVbaV0gJiAoMSA8PCBqKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQkZfR0VUKHBvbF9yeF9yZWcsIGopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBCRl9HRVQofmN1cl9wb3J0X2RhdGFbaV0sIGopKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaW52ZXJ0IHRyaWdnZXIgcG9sYXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xfcnhfcmVnIF49ICgxIDw8IGopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCRl9HRVQod2t1cF9waW5fY29uZmlnLnBpbl90cmlnZ2VyW2ldLCBqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQkZfR0VUKH5jdXJfcG9ydF9kYXRhW2ldLCBqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2t1cF9zdGF0dXNbaV0gfD0gKDEgPDwgaik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3a3VwX3N0YXR1c191cGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRyaWdnZXIgcG9sYXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICooKHZvbGF0aWxlIHVpbnQxNl90ICopV0FLRVVQX0JBU0UgKyAxMCArIGkpID0gcG9sX3J4X3JlZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gd2t1cF9zdGF0dXNfdXBkYXRlZDsKK30KKyNlbmRpZiAgLyogZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UgKi8KKwordm9pZCBod193a3VwX2luaXQoY29uc3Qgd2t1cF9jb25maWcgKmNmZykKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAgICAgR0xPQkFMX0lOVF9ESVNBQkxFKCk7CisgICAgICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS19UTVJfUkVHLCBXQUtFVVBDVF9FTkFCTEUpOworICAgICAgICBHTE9CQUxfSU5UX1JFU1RPUkUoKTsKKworICAgICAgICAvKiByZXNldCBjb25maWd1cmF0aW9uICovCisgICAgICAgIFdBS0VVUC0+V0tVUF9DVFJMX1JFRyA9IDA7CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIFdBS0VVUC0+V0tVUF9DT01QQVJFX1JFRyA9IDA7CisjZW5kaWYKKworICAgICAgICAvKiBkaXNhYmxlIGFsbCBwaW5zICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIV19HUElPX05VTV9QT1JUUzsgaSsrKSB7CisgICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdWludDE2X3QgKikoJldBS0VVUC0+V0tVUF9QT0xfUDBfUkVHKSArIGkpID0gMDsKKyAgICAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT5XS1VQX1NFTEVDVF9QMF9SRUcpICsgaSkgPSAwOworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1aW50MTZfdCAqKSgmV0FLRVVQLT4gV0tVUF9TRUxfR1BJT19QMF9SRUcpICsgaSkgPSAwOworI2VuZGlmCisjaWYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyNpZiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkKKyAgICAgICAgICAgICAgICB3a3VwX3Bpbl9jb25maWcucGluX3N0YXRlW2ldID0gMDsKKyAgICAgICAgICAgICAgICB3a3VwX3Bpbl9jb25maWcucGluX3RyaWdnZXJbaV0gPSAwOworICAgICAgICAgICAgICAgIHdrdXBfc3RhdHVzW2ldID0gMDsKKyAgICAgICAgICAgICAgICBod193a3VwX2NsZWFyX3N0YXR1cyhpLCAweEZGKTsKKyNlbmRpZgorI2VuZGlmIC8vZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyAgICAgICAgfQorI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgV0FLRVVQLT5XS1VQX0NMRUFSXzBfUkVHID0gV0FLRVVQLT5XS1VQX0NMRUFSXzFfUkVHID0gV0FLRVVQLT5XS1VQX0NMRUFSXzJfUkVHID0gMHhGRkZGOworI2VuZGlmCisgICAgICAgIE5WSUNfRGlzYWJsZUlSUShXS1VQX0dQSU9fSVJRbik7CisKKyAgICAgICAgaHdfd2t1cF9jb25maWd1cmUoY2ZnKTsKK30KKwordm9pZCBod193a3VwX2NvbmZpZ3VyZShjb25zdCB3a3VwX2NvbmZpZyAqY2ZnKQoreworICAgICAgICBpbnQgaTsKKworICAgICAgICBpZiAoIWNmZykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICAgICBod193a3VwX3NldF9jb3VudGVyX3RocmVzaG9sZChjZmctPnRocmVzaG9sZCk7CisjZW5kaWYKKyNpZiAhKChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkgJiYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpKQorICAgICAgICBod193a3VwX3NldF9kZWJvdW5jZV90aW1lKGNmZy0+ZGVib3VuY2UpOworI2VuZGlmCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIV19HUElPX05VTV9QT1JUUzsgaSsrKSB7CisgICAgICAgICAgICAgICAgaHdfd2t1cF9jb25maWd1cmVfcG9ydChpLCBjZmctPnBpbl9zdGF0ZVtpXSwgY2ZnLT5waW5fdHJpZ2dlcltpXSk7CisgICAgICAgIH0KK30KKwordm9pZCBod193a3VwX3JlZ2lzdGVyX2ludGVycnVwdChod193a3VwX2ludGVycnVwdF9jYiBjYiwgdWludDMyX3QgcHJpbykKK3sKKyAgICAgICAgaW50cl9jYiA9IGNiOworI2lmICEoKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSAmJiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkpCisgICAgICAgIEhXX1dLVVBfUkVHX1NFVEYoQ1RSTCwgV0tVUF9FTkFCTEVfSVJRLCAxKTsKKyNlbmRpZgorICAgICAgICBOVklDX0NsZWFyUGVuZGluZ0lSUShXS1VQX0dQSU9fSVJRbik7CisgICAgICAgIE5WSUNfU2V0UHJpb3JpdHkoV0tVUF9HUElPX0lSUW4sIHByaW8pOworICAgICAgICBOVklDX0VuYWJsZUlSUShXS1VQX0dQSU9fSVJRbik7Cit9CisKK3ZvaWQgaHdfd2t1cF91bnJlZ2lzdGVyX2ludGVycnVwdCh2b2lkKQoreworICAgICAgICBpbnRyX2NiID0gTlVMTDsKKyNpZiAhKChkZ19jb25maWdMQVRDSF9XS1VQX1NPVVJDRSkgJiYgKGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EpKQorICAgICAgICBIV19XS1VQX1JFR19TRVRGKENUUkwsIFdLVVBfRU5BQkxFX0lSUSwgMCk7CisjZW5kaWYKKyAgICAgICAgTlZJQ19EaXNhYmxlSVJRKFdLVVBfR1BJT19JUlFuKTsKK30KKwordm9pZCBod193a3VwX2hhbmRsZXIodm9pZCkKK3sKKyNpZiAoKGRnX2NvbmZpZ0xBVENIX1dLVVBfU09VUkNFKSAmJiAoZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgPT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSkpCisgICAgICAgIGlmIChpbnRyX2NiICYmIGh3X3drdXBfdXBkYXRlX3N0YXR1cygpKSB7CisjZWxzZQorICAgICAgICBpZiAoaW50cl9jYikgeworI2VuZGlmCisgICAgICAgICAgICAgICAgaW50cl9jYigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGh3X3drdXBfcmVzZXRfaW50ZXJydXB0KCk7CisjaWYgZGdfY29uZmlnTEFUQ0hfV0tVUF9TT1VSQ0UKKyAgICAgICAgICAgICAgICBod193a3VwX2NsZWFyX3N0YXR1cyhIV19HUElPX1BPUlRfMCwgMHhGRik7CisgICAgICAgICAgICAgICAgaHdfd2t1cF9jbGVhcl9zdGF0dXMoSFdfR1BJT19QT1JUXzEsIDB4RkYpOworICAgICAgICAgICAgICAgIGh3X3drdXBfY2xlYXJfc3RhdHVzKEhXX0dQSU9fUE9SVF8yLCAweEZGKTsKKyAgICAgICAgICAgICAgICBod193a3VwX2NsZWFyX3N0YXR1cyhIV19HUElPX1BPUlRfMywgMHhGRik7CisgICAgICAgICAgICAgICAgaHdfd2t1cF9jbGVhcl9zdGF0dXMoSFdfR1BJT19QT1JUXzQsIDB4RkYpOworI2VuZGlmCisgICAgICAgIH0KK30KKworI2lmZGVmIE9TX0JBUkVNRVRBTAordm9pZCBXS1VQX0dQSU9fSGFuZGxlcih2b2lkKQoreworICAgICAgICBod193a3VwX2hhbmRsZXIoKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0hXX1dLVVAgKi8KKy8qKgorICogXH0KKyAqIFx9CisgKiBcfQorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2JzcC9wZXJpcGhlcmFscy9zcmMvc3lzX3Rjcy5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL3N5c190Y3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJkZTBiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9ic3AvcGVyaXBoZXJhbHMvc3JjL3N5c190Y3MuYwpAQCAtMCwwICsxLDUwMyBAQAorLyoqCitcYWRkdG9ncm91cCBCU1AKK1x7CitcYWRkdG9ncm91cCBTWVNURU0KK1x7CitcYWRkdG9ncm91cCBUQ1NfSGFuZGxpbmcKK1x7CisqLworCisvKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBzeXNfdGNzLmMKKyAqCisgKiBAYnJpZWYgVENTIEhBbmRsZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJod19jcG0uaCIKKyNpbmNsdWRlICJzeXNfdGNzLmgiCisjaW5jbHVkZSAiaHdfZ3BhZGMuaCIKKyNpbmNsdWRlICJod19ncGlvLmgiCisKKyNkZWZpbmUgQVBQRU5EX1RDU19MRU5HVEggICAgICAgKDApCisKKyNkZWZpbmUgUkFESU9fQVJFQV9TSVpFICAgICAgICAgKDB4MTAwMCkKKyNkZWZpbmUgUEVSSVBIRVJBTF9BUkVBX1NJWkUgICAgKDB4QzRBKQorCisjZGVmaW5lIElTX0lOX0FSRUEoYWRkciwgYmFzZSwgc2l6ZSkgICAgKChhZGRyID49IGJhc2UpICYmIChhZGRyIDw9IChiYXNlICsgc2l6ZSkpKQorCisjZGVmaW5lIEFEQ19TRV9HQUlOX0VSUk9SKHZhbHVlKSAgICAgICAgKCh2YWx1ZSkgICYgMHgwMDAwRkZGRikKKyNkZWZpbmUgQURDX0RJRkZfR0FJTl9FUlJPUih2YWx1ZSkgICAgICAoKCh2YWx1ZSkgJiAweEZGRkYwMDAwKSA+PiAxNikKKworLyoKKyAqIEdsb2JhbCBhbmQgLyBvciByZXRhaW5lZCB2YXJpYWJsZXMKKyAqLworCit1aW50MzJfdCB0Y3NfZGF0YVsyNCAqIDIgKyBBUFBFTkRfVENTX0xFTkdUSF0gX19SRVRBSU5FRF9VTklOSVQ7Cit1aW50OF90IHRjc19sZW5ndGggX19SRVRBSU5FRF9VTklOSVQ7CisKK3VpbnQ4X3QgYXJlYV9vZmZzZXRbdGNzX3N5c3RlbSArIDFdIF9fUkVUQUlORUQ7Cit1aW50OF90IGFyZWFfc2l6ZV9nbG9iYWxbdGNzX3N5c3RlbSArIDFdIF9fUkVUQUlORUQ7Cit1aW50MTZfdCBzeXNfdGNzX3h0YWwxNm1fc2V0dGxpbmdfdGltZSBfX1JFVEFJTkVEOworCisKK2NvbnN0IHVpbnQzMl90ICp0Y3NfcHRyIF9fUkVUQUlORUQ7CisKK2Jvb2wgc3lzX3Rjc19pc19jYWxpYnJhdGVkX2NoaXAgX19SRVRBSU5FRF9VTklOSVQ7ICAgICAgLy8gSW5pdGlhbCB2YWx1ZTogZmFsc2UKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlcworICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCB1bmNhbGlicmF0ZWRfdGNzX2RhdGFbXSA9Cit7CisgICAgLyogQkFOREdBUF9SRUc6IChvZmZzZXQgMCkKKyAgICAgKiAgIFsxNF06IEJZUEFTU19DT0xEX0JPT1RfRElTQUJMRSA9IDAKKyAgICAgKiAgIFsxMzoxMF06IExET19TTEVFUF9UUklNID0gMHg0CisgICAgICogICBbOTo1XTogQkdSX0lUUklNID0gMHgwMAorICAgICAqICAgWzQ6MF06IEJHUl9UUklNID0gMHgxMyAoY2hhbmdlIHVudGlsIFYxMiBpcyAxLjJWKQorICAgICAqCisgICAgICogICBFc3BlY2lhbGx5IGZvciB0aGlzIHJlZ2lzdGVyLCBtZXJnZSB0aGUgdHJpbW1lZCBhbmQgcHJlZmVycmVkIHNldHRpbmdzLgorICAgICAqLworICAgICh1aW50MzJfdCkgJkNSR19UT1AtPkJBTkRHQVBfUkVHLCAweDEwMTMsCisKKyAgICAvKiBDTEtfRlJFUV9UUklNX1JFRzogKG9mZnNldCAyKQorICAgICAqICAgWzEwOjhdOiBDT0FSU0VfQURKID0gMHg0CisgICAgICogICBbNzowXTogRklORV9BREogPSAweDYwCisgICAgICovCisgICAgKHVpbnQzMl90KSAmQ1JHX1RPUC0+Q0xLX0ZSRVFfVFJJTV9SRUcsIDB4MDQ2MCwKKworICAgIC8qIENMS18xNk1fUkVHOiAob2Zmc2V0IDQpCisgICAgICogICBbMTVdOiBSQzE2TV9TVEFSVFVQX0RJU0FCTEUgPSAwCisgICAgICogICBbMTRdOiBYVEFMMTZfSFBBU1NfRkxUX0VOID0gMAorICAgICAqICAgWzEzXTogWFRBTDE2X1NQSUtFX0ZMVF9CWVBBU1MgPSAwCisgICAgICogICBbMTI6MTBdOiBYVEFMMTZfQU1QX1RSSU0gPSAweDUKKyAgICAgKiAgIFs5XTogWFRBTDE2X0VYVF9DTEtfRU5BQkxFID0gMAorICAgICAqICAgWzhdOiBYVEFMMTZfTUFYX0NVUlJFTlQgPSAwCisgICAgICogICBbNzo1XTogWFRBTDE2X0NVUl9TRVQgPSAweDUKKyAgICAgKiAgIFs0OjFdOiBSQzE2TV9UUklNID0gMHg5CisgICAgICogICBbMF06IFJDMTZNX0VOQUJMRSA9IDAKKyAgICAgKgorICAgICAqICAgQXBwbHkgdGhlIHRyaW1tZWQgYW5kIGEgZGVmYXVsdCBwcmVmZXJyZWQgdmFsdWUuIFRoZSBjb3JyZWN0IG9uZSBpcyBhcHBsaWVkCisgICAgICogICBsYXRlci4KKyAgICAgKi8KKyAgICAodWludDMyX3QpICZDUkdfVE9QLT5DTEtfMTZNX1JFRywgMHgxNEIyLAorCisgICAgLyogQ0xLXzMyS19SRUc6ICAob2Zmc2V0IDYpCisgICAgICogICBbMTU6MTNdOiAwCisgICAgICogICBbMTJdOiBYVEFMMzJLX0RJU0FCTEVfQU1QUkVHMCA9IDAKKyAgICAgKiAgIFsxMTo4XTogUkMzMktfVFJJTSA9IDB4MDcKKyAgICAgKiAgIFs3XTogUkMzMktfRU5BQkxFID0gMHgxIChyZXNldCB2YWx1ZSkKKyAgICAgKiAgIFs2OjNdOiBYVEFMMzJLX0NVUiA9IDB4MyAocmVzZXQgdmFsdWUpCisgICAgICogICBbMjoxXTogWFRBTDMyS19SQklBUyA9IDB4MiAocmVzZXQgdmFsdWUpCisgICAgICogICBbMF06IFhUQUwzMktfRU5BQkxFID0gMAorICAgICAqLworICAgICh1aW50MzJfdCkgJkNSR19UT1AtPkNMS18zMktfUkVHLCAweDc5QywKKworICAgIC8qIENIQVJHRVJfQ1RSTDJfUkVHOiAob2Zmc2V0IDgpCisgICAgICogICBbMTU6MTNdOiAwCisgICAgICogICBbMTI6OF06IENVUlJFTlRfT0ZGU0VUX1RSSU0gPSAweDBDCisgICAgICogICBbNzo0XTogQ0hBUkdFUl9WRkxPQVRfQURKID0gMHg1CisgICAgICogICBbMzowXTogQ1VSUkVOVF9HQUlOX1RSSU0gPSAweEEKKyAgICAgKi8KKyAgICAodWludDMyX3QpICZBTkFNSVNDLT5DSEFSR0VSX0NUUkwyX1JFRywgMHgwQzVBLAorfTsKKworI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9OT05fUkVUQUlORURfT0ZGU0VUICAgKDgpCisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9CTEVfU0laRSAgICAgICAgICAgICAgKDApCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0JMRV9PRkZTRVQgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0ZUREZfU0laRSAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfRlRERl9PRkZTRVQgICAgICAgICAgICgwKQorI2VuZGlmCisKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfUkFESU9fU0laRSAgICAgICAgICAgICgwKQorI2RlZmluZSBVTkNBTElCUkFURURfREFUQV9SQURJT19PRkZTRVQgICAgICAgICAgKDApCisKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfQ0hBUkdFUl9TSVpFICAgICAgICAgICgxICogMikKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfQ0hBUkdFUl9PRkZTRVQgICAgICAgICg4KQorCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX0FVRElPX1NJWkUgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfQVVESU9fT0ZGU0VUICAgICAgICAgICgwKQorCisjZGVmaW5lIFVOQ0FMSUJSQVRFRF9EQVRBX1NZU1RFTV9TSVpFICAgICAgICAgICAoMCkKKyNkZWZpbmUgVU5DQUxJQlJBVEVEX0RBVEFfU1lTVEVNX09GRlNFVCAgICAgICAgICgwKQorCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCisKKworCisvKgorICogRnVuY3Rpb24gZGVmaW5pdGlvbnMKKyAqLworCisvKioKKyAqIFxicmllZiBBcHBseSBhIFRDUyA8YWRkcmVzcywgdmFsdWU+IHBhaXIuCisgKgorICogXHBhcmFtIFtpbl0gYWRkcmVzcyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHRoZSB2YWx1ZSBmb3IgdGhpcyByZWdpc3RlcgorICoKKyAqLworc3RhdGljIHZvaWQgYXBwbHlfcGFpcih1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBpZiAoYWRkcmVzcyAmIDB4MikKKyAgICB7CisgICAgICAgICoodm9sYXRpbGUgdWludDE2X3QgKilhZGRyZXNzID0gdmFsdWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICoodm9sYXRpbGUgdWludDMyX3QgKilhZGRyZXNzID0gdmFsdWU7CisgICAgfQorfQorCisvKioKKyAqIFxicmllZiBBcHBseSBhIFRDUyA8YWRkcmVzcywgdmFsdWU+IGVudHJ5IG9mIHRoZSBUQ1MgYXJyYXkuCisgKgorICogXHBhcmFtIFtpbl0gYWRkcmVzcyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIKKyAqIFxwYXJhbSBbaW5dIHZhbHVlIHRoZSB2YWx1ZSBmb3IgdGhpcyByZWdpc3RlcgorICoKKyAqLworc3RhdGljIHZvaWQgYXBwbHlfZW50cnkodWludDhfdCBpbmRleCkKK3sKKyAgICB1aW50MzJfdCBhZGRyZXNzID0gdGNzX3B0cltpbmRleF07CisgICAgdWludDMyX3QgdmFsdWUgPSB0Y3NfcHRyW2luZGV4ICsgMV07CisKKyAgICBpZiAoYWRkcmVzcyAmIDB4MikKKyAgICB7CisgICAgICAgICoodm9sYXRpbGUgdWludDE2X3QgKilhZGRyZXNzID0gdmFsdWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICoodm9sYXRpbGUgdWludDMyX3QgKilhZGRyZXNzID0gdmFsdWU7CisgICAgfQorfQorCisvKioKKyAqIFxicmllZiBTdG9yZSBUQ1MgPGFkZHJlc3MsIHZhbHVlPiBwYWlyIGluIHRoZSBHbG9iYWwgVENTIGFycmF5LgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHJlc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKiBccGFyYW0gW2luXSB2YWx1ZSB0aGUgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN0b3JlX2luX2FycmF5KHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHZhbHVlKQoreworICAgIHRjc19kYXRhW3Rjc19sZW5ndGhdID0gYWRkcmVzczsKKyAgICB0Y3NfbGVuZ3RoKys7CisgICAgdGNzX2RhdGFbdGNzX2xlbmd0aF0gPSB2YWx1ZTsKKyAgICB0Y3NfbGVuZ3RoKys7Cit9CisKKy8qKgorICogXGJyaWVmIFN3YXBzIHRoZSBjb250ZW50cyBvZiB0d28gZW50cmllcyBpbiB0aGUgVENTIGFycmF5LgorICoKKyAqIFxwYXJhbSBbaW5dIGFkZHJlc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKiBccGFyYW0gW2luXSB2YWx1ZSB0aGUgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIKKyAqCisgKiBcd2FybmluZyBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgUkMxNiBtdXN0IGhhdmUgYmVlbiBzZXQgYXMgdGhlIHN5c3RlbSBjbG9jayEKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN3YXBfZW50cmllcyh1aW50MzJfdCBmaXJzdF9wb3MsIHVpbnQzMl90IHNlY29uZF9wb3MpCit7CisgICAgdWludDMyX3QgYWRkcmVzc19zdG9yZWQ7CisgICAgdWludDMyX3QgdmFsdWVfc3RvcmVkOworCisgICAgYWRkcmVzc19zdG9yZWQgPSB0Y3NfZGF0YVtzZWNvbmRfcG9zXTsKKyAgICB2YWx1ZV9zdG9yZWQgPSB0Y3NfZGF0YVtzZWNvbmRfcG9zICsgMV07CisgICAgdGNzX2RhdGFbc2Vjb25kX3Bvc10gPSB0Y3NfZGF0YVtmaXJzdF9wb3NdOworICAgIHRjc19kYXRhW3NlY29uZF9wb3MgKyAxXSA9IHRjc19kYXRhW2ZpcnN0X3BvcyArIDFdOworICAgIHRjc19kYXRhW2ZpcnN0X3Bvc10gPSBhZGRyZXNzX3N0b3JlZDsKKyAgICB0Y3NfZGF0YVtmaXJzdF9wb3MgKyAxXSA9IHZhbHVlX3N0b3JlZDsKK30KKworLyoqCisgKiBcYnJpZWYgU29ydCB0aGUgcmVnaXN0ZXJzIG9mIGEgc3BlY2lmaWMgTWVtb3J5IE1hcCBhcmVhIG9mIHRoZSBjaGlwIHRvIGEgY29udGludW91cyByZWdpb24gaW4gdGhlCisgKiAgICAgICAgVENTIGFycmF5LgorICoKKyAqIFxwYXJhbSBbaW5dIGFyZWFfYmFzZSB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBNZW1vcnkgTWFwIGFyZWEKKyAqIFxwYXJhbSBbaW5dIGFyZWFfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgTWVtb3J5IE1hcCByZWdpb24gaW4gYnl0ZXMKKyAqIFxwYXJhbSBbaW5dIGFycmF5X3B0ciB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgVENTIGFycmF5IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSAoYWxsIHByZXZpb3VzCisgKiAgICAgICAgcG9zaXRpb25zIGhhdmUgYmVlbiBzb3J0ZWQpCisgKiBccGFyYW0gW291dF0gcHRyIHRoZSBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgc29ydGVkIHJlZ2lvbiBpbiB0aGUgVENTIGFycmF5CisgKiBccGFyYW0gW291dF0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgc29ydGVkIHJlZ2lvbiBpbiBieXRlcworICoKKyAqIFxyZXR1cm4gVGhlIHVwZGF0ZWQgcG9zaXRpb24gaW4gdGhlIFRDUyBhcnJheSB0byBzdGFydCByZWFkaW5nIG5leHQgdGltZQorICovCitzdGF0aWMgaW50IHN5c190Y3Nfc29ydF9hcmVhKHVpbnQzMl90IGFyZWFfYmFzZSwgdWludDMyX3QgYXJlYV9zaXplLCB1aW50MzJfdCBhcnJheV9wdHIsIHVpbnQ4X3QgKnB0ciwgdWludDhfdCAqc2l6ZSkKK3sKKyAgICB1aW50MzJfdCBpID0gYXJyYXlfcHRyOworICAgIHVpbnQzMl90IHNvcnRfc3RhcnQ7CisgICAgdWludDMyX3Qgc29ydF9lbmQ7CisKKyAgICBpZiAoYXJyYXlfcHRyID09IHRjc19sZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXlfcHRyOyAgICAgICAvLyBOb3RoaW5nIGVsc2UgaXMgbGVmdCBpbiB0aGUgYXJyYXkgb3IgdGNzX2xlbmd0aCBpcyB6ZXJvCisgICAgfQorCisgICAgc29ydF9zdGFydCA9IGFycmF5X3B0cjsKKyAgICBzb3J0X2VuZCA9IGFycmF5X3B0cjsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZXMgaW4gVENTIGRvbid0IG92ZXJmbG93IHRoZSBhbGxvY2F0ZWQgYXJyYXkgKi8KKyAgICBBU1NFUlRfV0FSTklORyh0Y3NfbGVuZ3RoIDw9IHNpemVvZih0Y3NfZGF0YSkgLyBzaXplb2YodGNzX2RhdGFbMF0pKTsKKworICAgIHdoaWxlIChpIDwgKHRjc19sZW5ndGggLSAxKSkKKyAgICB7CisgICAgICAgIGlmIChJU19JTl9BUkVBKHRjc19kYXRhW2ldLCBhcmVhX2Jhc2UsIGFyZWFfc2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpID09IGFycmF5X3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc29ydF9zdGFydCA9PSBhcnJheV9wdHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzb3J0X3N0YXJ0ID0gYXJyYXlfcHRyOworICAgICAgICAgICAgICAgICAgICBzb3J0X2VuZCA9IHNvcnRfc3RhcnQgKyAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDb3B5IGl0IHRvIHRoZSBwcm9wZXIgcGxhY2UuCisgICAgICAgICAgICAgICAgaWYgKGkgIT0gc29ydF9lbmQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2FwX2VudHJpZXMoc29ydF9lbmQsIGkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNvcnRfZW5kICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpICs9IDI7CisgICAgfQorCisgICAgKnB0ciA9IHNvcnRfc3RhcnQ7CisgICAgKnNpemUgPSBzb3J0X2VuZCAtIHNvcnRfc3RhcnQ7CisKKyAgICByZXR1cm4gc29ydF9lbmQ7Cit9CisKK3ZvaWQgc3lzX3Rjc19pbml0KHZvaWQpCit7CisgICAgdGNzX2xlbmd0aCA9IDA7CisgICAgc3lzX3Rjc19pc19jYWxpYnJhdGVkX2NoaXAgPSBmYWxzZTsKKyAgICBod19jcG1fYm9kX2VuYWJsZWRfaW5fdGNzID0gMDsKK30KKworYm9vbCBzeXNfdGNzX3N0b3JlX3BhaXIodWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgdmFsdWUpCit7CisgICAgLy8gSWYgaXQgc3RvcHMgaGVyZSB0aGVuIHRjc19sZW5ndGggbXVzdCBiZWNvbWUgdWludDE2X3QuCisgICAgQVNTRVJUX1dBUk5JTkcoKDI1NiAqIHNpemVvZih0Y3NfbGVuZ3RoKSkgPj0gKDI0ICogMiArIEFQUEVORF9UQ1NfTEVOR1RIKSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgYWRkcmVzcyBpcyBpbiBBbHdheXMtT04gb3Igb2YgYSByZXRhaW5lZCByZWdpc3RlciBhbmQgYXBwbHkgaXQuCisgICAgaWYgKElTX0lOX0FSRUEoYWRkcmVzcywgQ1JHX1RPUF9CQVNFLCBzaXplb2YoQ1JHX1RPUF9UeXBlKSkKKyAgICAgICAgfHwgSVNfSU5fQVJFQShhZGRyZXNzLCBUSU1FUjFfQkFTRSwgc2l6ZW9mKFRJTUVSMV9UeXBlKSkKKyAgICAgICAgfHwgSVNfSU5fQVJFQShhZGRyZXNzLCBXQUtFVVBfQkFTRSwgc2l6ZW9mKFdBS0VVUF9UeXBlKSkKKyAgICAgICAgfHwgSVNfSU5fQVJFQShhZGRyZXNzLCBEQ0RDX0JBU0UsIHNpemVvZihEQ0RDX1R5cGUpKQorICAgICAgICB8fCBJU19JTl9BUkVBKGFkZHJlc3MsIFFTUElDX0JBU0UsIHNpemVvZihRU1BJQ19UeXBlKSkKKyAgICAgICAgfHwgSVNfSU5fQVJFQShhZGRyZXNzLCBDQUNIRV9CQVNFLCBzaXplb2YoQ0FDSEVfVHlwZSkpCisgICAgICAgIHx8IElTX0lOX0FSRUEoYWRkcmVzcywgT1RQQ19CQVNFLCBzaXplb2YoT1RQQ19UeXBlKSkpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcyA9PSAodWludDMyX3QpJkNSR19UT1AtPkJBTkRHQVBfUkVHKQorICAgICAgICB7CisgICAgICAgICAgICBzeXNfdGNzX2lzX2NhbGlicmF0ZWRfY2hpcCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWRkcmVzcyA9PSAodWludDMyX3QpJkNSR19UT1AtPkNMS18xNk1fUkVHKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZSB8PSBDUkdfVE9QX0NMS18xNk1fUkVHX1JDMTZNX0VOQUJMRV9Nc2s7IC8vIE1ha2Ugc3VyZSB0aGF0IFJDMTYgaXMgZW5hYmxlZCEKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhZGRyZXNzID09ICh1aW50MzJfdCkmQ1JHX1RPUC0+WFRBTFJEWV9DVFJMX1JFRykKKyAgICAgICAgeworICAgICAgICAgICAgc3lzX3Rjc194dGFsMTZtX3NldHRsaW5nX3RpbWUgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhZGRyZXNzID09ICh1aW50MzJfdCkmQ1JHX1RPUC0+Qk9EX0NUUkwyX1JFRykKKyAgICAgICAgeworICAgICAgICAgICAgaHdfY3BtX2JvZF9lbmFibGVkX2luX3RjcyA9IHZhbHVlOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFJlYWQgdGhlIEFEQyBHYWluIEVycm9yLiBHaXZlbiB0aGF0IHRoZSBDaGlwIENvbmZpZ3VyYXRpb24gU2VjdGlvbgorICAgICAgICAgICAgICogKENDUykgb2YgT1RQIGlzIG91dCBvZiBzcGFjZSwgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBUQ1Mgc2VjdGlvbgorICAgICAgICAgICAgICogdXNpbmcgYXMgYWRkcmVzcyB0aGUgcmVhZC1vbmx5IHJlZ2lzdGVyIFNZU19TVEFUX1JFRy4KKyAgICAgICAgICAgICAqIFRoZSAxNiBMU0Igb2YgdGhlIDMyYml0IGRhdGEtdmFsdWUgaXMgdGhlIHNpbmdsZSBlbmRlZCBnYWluIGVycm9yLgorICAgICAgICAgICAgICogVGhlIDE2IE1TQiBvZiB0aGUgMzJiaXQgZGF0YS12YWx1ZSBpcyB0aGUgZGlmZmVyZW50aWFsIGdhaW4gZXJyb3IuCisgICAgICAgICAgICAgKiBCb3RoIGdhaW4gZXJyb3IgdmFsdWVzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBzaWduZWQgMTZiaXQgaW50ZWdlcnMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZ19jb25maWdVU0VfQURDX0dBSU5fRVJST1JfQ09SUkVDVElPTiA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWRkcmVzcyA9PSAodWludDMyX3QpJkNSR19UT1AtPlNZU19TVEFUX1JFRykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBod19ncGFkY19zdG9yZV9zZV9nYWluX2Vycm9yKEFEQ19TRV9HQUlOX0VSUk9SKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgaHdfZ3BhZGNfc3RvcmVfZGlmZl9nYWluX2Vycm9yKEFEQ19ESUZGX0dBSU5fRVJST1IodmFsdWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFwcGx5X3BhaXIoYWRkcmVzcywgdmFsdWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdG9yZV9pbl9hcnJheShhZGRyZXNzLCB2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHN5c190Y3NfaXNfY2FsaWJyYXRlZF9jaGlwOworfQorCit2b2lkIHN5c190Y3Nfc29ydF9hcnJheSh2b2lkKQoreworICAgIGludCBlbnRyeV9wdHIgPSAwOworICAgIGludCBpOworCisgICAgLyoKKyAgICAgKiBBcHBseSBhIGRlZmF1bHQgdmFsdWUgdG8gQ0xLX0ZSRVFfVFJJTV9SRUcsIGlmIG5vdCBzZXQgaW4gVENTLgorICAgICAqICAgWzEwOjhdOiBDT0FSU0VfQURKID0gMHg0CisgICAgICogICBbNzowXTogRklORV9BREogPSAweDYwCisgICAgICovCisgICAgaWYgKENSR19UT1AtPkNMS19GUkVRX1RSSU1fUkVHID09IDApCisgICAgeworICAgICAgICBDUkdfVE9QLT5DTEtfRlJFUV9UUklNX1JFRyA9IDB4MDQ2MDsKKyAgICB9CisKKyAgICBpZiAoc3lzX3Rjc19pc19jYWxpYnJhdGVkX2NoaXApCisgICAgeworI2lmZGVmIENPTkZJR19VU0VfQkxFCisgICAgICAgIGVudHJ5X3B0ciA9IHN5c190Y3Nfc29ydF9hcmVhKEJMRV9CQVNFLCBzaXplb2YoQkxFX1R5cGUpLCBlbnRyeV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmVhX29mZnNldFt0Y3NfYmxlXSwgJmFyZWFfc2l6ZVt0Y3NfYmxlXSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfRlRERgorICAgICAgICBlbnRyeV9wdHIgPSBzeXNfdGNzX3NvcnRfYXJlYShGVERGX0JBU0UsIHNpemVvZihGVERGX1R5cGUpLCBlbnRyeV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmVhX29mZnNldFt0Y3NfZnRkZl0sICZhcmVhX3NpemVfZ2xvYmFsW3Rjc19mdGRmXSk7CisjZW5kaWYKKworICAgICAgICBlbnRyeV9wdHIgPSBzeXNfdGNzX3NvcnRfYXJlYShSRkNVX0JBU0UsIFJBRElPX0FSRUFfU0laRSwgZW50cnlfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJlYV9vZmZzZXRbdGNzX3JhZGlvXSwgJmFyZWFfc2l6ZV9nbG9iYWxbdGNzX3JhZGlvXSk7CisKKyAgICAgICAgZW50cnlfcHRyID0gc3lzX3Rjc19zb3J0X2FyZWEoKHVpbnQzMl90KSZBTkFNSVNDLT5DSEFSR0VSX0NUUkwyX1JFRywgMSwgZW50cnlfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJlYV9vZmZzZXRbdGNzX2NoYXJnZXJdLCAmYXJlYV9zaXplX2dsb2JhbFt0Y3NfY2hhcmdlcl0pOworCisgICAgICAgIGVudHJ5X3B0ciA9IHN5c190Y3Nfc29ydF9hcmVhKEFQVV9CQVNFLCBzaXplb2YoQVBVX1R5cGUpLCBlbnRyeV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmVhX29mZnNldFt0Y3NfYXVkaW9dLCAmYXJlYV9zaXplX2dsb2JhbFt0Y3NfYXVkaW9dKTsKKworICAgICAgICAvLyBUaGUgcmVzdCBzaG91bGQgYmUgU3lzdGVtLiBBc3NlcnQgaWYgbm90IQorICAgICAgICBmb3IgKGkgPSBlbnRyeV9wdHI7IGkgPCB0Y3NfbGVuZ3RoOyBpICs9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJU19JTl9BUkVBKHRjc19kYXRhW2ldLCBVQVJUX0JBU0UsIFBFUklQSEVSQUxfQVJFQV9TSVpFKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKElTX0lOX0FSRUEodGNzX2RhdGFbaV0sIENSR19UT1BfQkFTRSwgMHg2MTAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJdCBpcyBvayAobW9zdCBwcm9iYWJseSkuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhcmVhX29mZnNldFt0Y3Nfc3lzdGVtXSA9IGVudHJ5X3B0cjsKKyAgICAgICAgYXJlYV9zaXplX2dsb2JhbFt0Y3Nfc3lzdGVtXSA9IHRjc19sZW5ndGggLSBlbnRyeV9wdHI7CisKKyAgICAgICAgdGNzX3B0ciA9IHRjc19kYXRhOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0Y3NfcHRyID0gdW5jYWxpYnJhdGVkX3Rjc19kYXRhOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBVTkNBTElCUkFURURfREFUQV9OT05fUkVUQUlORURfT0ZGU0VUOyBpICs9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwcGx5X3BhaXIodGNzX3B0cltpXSwgdGNzX3B0cltpICsgMV0pOworICAgICAgICB9CisKKyNpZmRlZiBDT05GSUdfVVNFX0JMRQorCisgICAgICAgIGlmIChVTkNBTElCUkFURURfREFUQV9CTEVfU0laRSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFyZWFfb2Zmc2V0W3Rjc19ibGVdID0gVU5DQUxJQlJBVEVEX0RBVEFfQkxFX09GRlNFVDsKKyAgICAgICAgICAgIGFyZWFfc2l6ZVt0Y3NfYmxlXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX0JMRV9TSVpFOworICAgICAgICB9CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9GVERGCisKKyAgICAgICAgaWYgKFVOQ0FMSUJSQVRFRF9EQVRBX0ZUREZfU0laRSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFyZWFfb2Zmc2V0W3Rjc19mdGRmXSA9IFVOQ0FMSUJSQVRFRF9EQVRBX0ZUREZfT0ZGU0VUOworICAgICAgICAgICAgYXJlYV9zaXplX2dsb2JhbFt0Y3NfZnRkZl0gPSBVTkNBTElCUkFURURfREFUQV9GVERGX1NJWkU7CisgICAgICAgIH0KKworI2VuZGlmCisKKyAgICAgICAgaWYgKFVOQ0FMSUJSQVRFRF9EQVRBX1JBRElPX1NJWkUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhcmVhX29mZnNldFt0Y3NfcmFkaW9dID0gVU5DQUxJQlJBVEVEX0RBVEFfUkFESU9fT0ZGU0VUOworICAgICAgICAgICAgYXJlYV9zaXplX2dsb2JhbFt0Y3NfcmFkaW9dID0gVU5DQUxJQlJBVEVEX0RBVEFfUkFESU9fU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkNBTElCUkFURURfREFUQV9DSEFSR0VSX1NJWkUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhcmVhX29mZnNldFt0Y3NfY2hhcmdlcl0gPSBVTkNBTElCUkFURURfREFUQV9DSEFSR0VSX09GRlNFVDsKKyAgICAgICAgICAgIGFyZWFfc2l6ZV9nbG9iYWxbdGNzX2NoYXJnZXJdID0gVU5DQUxJQlJBVEVEX0RBVEFfQ0hBUkdFUl9TSVpFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFVOQ0FMSUJSQVRFRF9EQVRBX0FVRElPX1NJWkUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBhcmVhX29mZnNldFt0Y3NfYXVkaW9dID0gVU5DQUxJQlJBVEVEX0RBVEFfQVVESU9fT0ZGU0VUOworICAgICAgICAgICAgYXJlYV9zaXplX2dsb2JhbFt0Y3NfYXVkaW9dID0gVU5DQUxJQlJBVEVEX0RBVEFfQVVESU9fU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkNBTElCUkFURURfREFUQV9TWVNURU1fU0laRSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFyZWFfb2Zmc2V0W3Rjc19zeXN0ZW1dID0gVU5DQUxJQlJBVEVEX0RBVEFfU1lTVEVNX09GRlNFVDsKKyAgICAgICAgICAgIGFyZWFfc2l6ZV9nbG9iYWxbdGNzX3N5c3RlbV0gPSBVTkNBTElCUkFURURfREFUQV9TWVNURU1fU0laRTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBzeXNfdGNzX2FwcGx5KHN5c190Y3NfYXJlYV90IGFyZWEpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSBhcmVhX29mZnNldFthcmVhXTsgaSA8IChhcmVhX29mZnNldFthcmVhXSArIGFyZWFfc2l6ZV9nbG9iYWxbYXJlYV0pOyBpICs9IDIpCisgICAgeworICAgICAgICBhcHBseV9lbnRyeShpKTsKKyAgICB9Cit9CisKKy8qKgorXH0KK1x9CitcfQorKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvYWRfZnRkZl9jb25maWcuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvYWRfZnRkZl9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdjODdjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9hZF9mdGRmX2NvbmZpZy5oCkBAIC0wLDAgKzEsMTE3IEBACisvKioKKyBcYWRkdG9ncm91cCBJTlRFUkZBQ0VTCisgXHsKKyBcYWRkdG9ncm91cCBGVERGCisgXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAZmlsZSBhZF9mdGRmX2NvbmZpZy5oCisgKgorICogQGJyaWVmIEZUREYgQWRhcHRlciBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgQURfRlRERl9DT05GSUdfSAorI2RlZmluZSBBRF9GVERGX0NPTkZJR19ICisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisjaW5jbHVkZSAicXVldWUuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZnRkZi5oIgorCisKKy8qKgorICogXGJyaWVmIFNsZWVwIFdoZW4gSWRsZQorICoKKyAqIElmIHNldCwgdGhlIGJsb2NrIHdpbGwgc2xlZXAgd2hlbiBJZGxlCisgKgorICovCisjZGVmaW5lIEFEX0ZUREZfU0xFRVBfV0hFTl9JRExFIDEKKworLyoqCisgKiBcYnJpZWYgSWRsZSBUaW1lb3V0CisgKgorICogSWRsZSBUaW1lb3V0LCBpbiBPUyBzY2hlZHVsZXIgdGlja3MsIGFmdGVyIHdoaWNoLCBpZiBzdGlsbCBJZGxlLCBGVERGIHdpbGwKKyAqIGJlIHB1dCB0byBzbGVlcC4gT25seSBhcHBsaWNhYmxlIGlmIEFEX0ZUREZfU0xFRVBfV0hFTl9JRExFIDEKKyAqCisgKi8KKyNkZWZpbmUgQURfRlRERl9JRExFX1RJTUVPVVQgMQorCisvKioKKyAqIFxicmllZiBVUCBRdWV1ZSBzaXplCisgKgorICogRGVmaW5lcyB0aGUgVVAgKFVNQUMgdG8gY2xpZW50IGFwcCkgUXVldWUgbGVuZ3RoLCBpbiBudW1iZXIgb2YgbWVzc2FnZXMKKyAqCisgKi8KKyNkZWZpbmUgQURfRlRERl9VUF9RVUVVRV9MRU5HVEggICAgMTYKKworLyoqCisgKiBcYnJpZWYgRE9XTiBRdWV1ZSBzaXplCisgKgorICogRGVmaW5lcyB0aGUgRE9XTiAoY2xpZW50IGFwcCB0byBVTUFDKSBRdWV1ZSBsZW5ndGgsIGluIG51bWJlciBvZiBtZXNzYWdlcworICoKKyAqLworI2RlZmluZSBBRF9GVERGX0RPV05fUVVFVUVfTEVOR1RIICAxNgorCisvKioKKyAqIFxicmllZiBMb3cgUG93ZXIgQ2xvY2sgY3ljbGUKKyAqCisgKiBEZWZpbmVzIHRoZSBMb3cgUG93ZXIgY2xvY2sgY3ljbGUgaW4gcGljbyBzZWNzLiBVc2VkIGZvciBjb21wdXRhdGlvbiBuZWVkZWQKKyAqIGZvciBzbGVlcGluZyAvIHdha2luZyB1cCBGVERGCisgKgorICovCisjZGVmaW5lIEFEX0ZUREZfTFBfQ0xPQ0tfQ1lDTEUgMzA1MTc1NzgKKworLyoqCisgKiBcYnJpZWYgV2FrZSBVcCBMYXRlbmN5CisgKgorICogRGVmaW5lcyB0aGUgV2FrZSBVcCBMYXRlbmN5IGV4cHJlc3NlZCBpbiBMb3cgUG93ZXIgY2xvY2sgY3ljbGVzLCB0aGF0IGlzCisgKiB0aGUgbnVtYmVyIG9mIExQIGNsb2NrIGN5Y2xlcyBuZWVkZWQgZm9yIHRoZSBGVERGIHRvIGJlIGZ1bGx5IG9wZXJhdGlvbmFsCisgKiAoY2FsY3VsYXRpb25zIGFuZCBGVERGIHRpbWVyIHN5bmNocm9uaXphdGlvbikKKyAqCisgKi8KKyNkZWZpbmUgQURfRlRERl9XVVBfTEFURU5DWSAxMAorCisvKioKKyAqIFxicmllZiBTbGVlcCB2YWx1ZSBjb21wZW5zYXRpb24KKyAqCisgKiBEZWZpbmVzIHRoZSBzbGVlcCB2YWx1ZSBjb21wZW5zYXRpb24gZXhwcmVzc2VkIGluIG1pY3Jvc2Vjb25kcy4gVGhpcyB2YWx1ZQorICogaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBzbGVlcCB0aW1lIHJldHVybmVkIGJ5IEZUREZfY2FuU2xlZXAoICkKKyAqLworI2RlZmluZSBBRF9GVERGX1NMRUVQX0NPTVBFTlNBVElPTiAxNTAwCisKKyNlbmRpZiAvKiBBRF9GVERGX0NPTkZJR19IICovCisvKioKKyBcfQorIFx9CisgXH0KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9hZF9mdGRmX3BoeV9hcGkuaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvYWRfZnRkZl9waHlfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5NmM2OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL2luY2x1ZGUvYWRfZnRkZl9waHlfYXBpLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qKgorIFxhZGR0b2dyb3VwIElOVEVSRkFDRVMKKyBceworIFxhZGR0b2dyb3VwIEZUREYKKyBceworICovCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBmaWxlIGFkX2Z0ZGZfcGh5X2FwaS5oCisgKgorICogQGJyaWVmIEZUREYgUEhZIEFkYXB0ZXIgQVBJCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEFEX0ZUREZfUEhZX0FQSV9ICisjZGVmaW5lIEFEX0ZUREZfUEhZX0FQSV9ICisKKyNpbmNsdWRlICJmdGRmLmgiCisjaW5jbHVkZSAiYWRfZnRkZl9jb25maWcuaCIKKworLyoqCisgKiBcYnJpZWYgSW5pdGlhbGl6ZSBhZGFwdGVyIC0gY3JlYXRlIHF1ZXVlcworICoKKyAqLwordm9pZCBhZF9mdGRmX2luaXQodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldCBFeHRlbmRlZCBBZGRyZXNzCisgKgorICogU2V0cyBpbnRlcmZhY2UgZXh0ZW5kZWQgYWRkcmVzcy4gVGhpcyBpcyB0aHJlYWQgc2FmZS4KKyAqCisgKiBccGFyYW1baW5dIGFkZHJlc3MgLSBUaGUgZXh0ZW5kZWQgYWRkcmVzcyB0byBzZXQKKyAqLwordm9pZCBhZF9mdGRmX3NldEV4dEFkZHJlc3MoIEZUREZfRXh0QWRkcmVzcyBhZGRyZXNzKTsKKworLyoqCisgKiBcYnJpZWYgR2V0IEV4dGVuZGVkIEFkZHJlc3MKKyAqCisgKiBHZXRzIGludGVyZmFjZSBleHRlbmRlZCBhZGRyZXNzLiBUaGlzIGlzIHRocmVhZCBzYWZlLgorICoKKyAqIFxyZXR1cm5zIFRoZSBleHRlbmRlZCBhZGRyZXNzIG9mIHRoZSBpbnRlcmZhY2UKKyAqLworRlRERl9FeHRBZGRyZXNzIGFkX2Z0ZGZfZ2V0RXh0QWRkcmVzcyggdm9pZCk7CisKKy8qKgorICogXGJyaWVmIFRyYW5zbWl0cyBhIGZyYW1lCisgKgorICogVHJhbnNtaXRzIGEgZnJhbWUuIFBhcmFtczoKKyAqCisgKiBccGFyYW1baW5dIGZyYW1lTGVuZ3RoIC0gVGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgZnJhbWUgcGFzc2VkIGluIGJ5dGVzCisgKiBccGFyYW1baW5dIGZyYW1lIC0gYSBwb2ludGVyIHRvIHRoZSBwYXNzZWQgZnJhbWUgYnVmZmVyCisgKiBccGFyYW1baW5dIGNoYW5uZWwgLSBUaGUgY2hhbm5lbCB0byB1c2UgZm9yIHRyYW5zbWlzc2lvbiBpbiBbMTEsIDI2XQorICogXHBhcmFtW2luXSBjc21hU3VwcHJlc3MgLSBJZiB0cnVlLCBjc21hIHByb3RvY29sIChpLmUuIENDQSkgd2lsbCBub3QgYmUgcGVyZm9ybWVkCisgKiBccGFyYW1baW5dIHB0aSAtIFBhY2tldCBUcmFmZmljIEluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHRyYW5zYWN0aW9uLgorICovCitGVERGX1N0YXR1cyBhZF9mdGRmX3NlbmRfZnJhbWVfc2ltcGxlKCBGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUFRJICAgICAgICAgICBwdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiAgICAgICBjc21hU3VwcHJlc3MpOworCisvKioKKyAqIFxicmllZiBJbnN0cnVjdHMgdGhlIE1BQyBhbmQgUEhZIHRvIGdvIHRvIHNsZWVwCisgKgorICogXHBhcmFtW2luXSBhbGxvd19kZWZlcnJlZF9zbGVlcCAtIElmIHRydWUsIHRoZW4gaWYgdGhlIE1BQyBjYW5ub3QgZ28gdG8gc2xlZXAgaW1tZWRpYXRlbHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBhIHRyYW5zbWlzc2lvbiBpcyBwZW5kaW5nKSwgdGhlIE1BQyB3aWxsIGdvIHRvIHNsZWVwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgc29vbiBhcyBwb3NzaWJsZS4gSWYgZmFsc2UsIGFuZCB0aGUgTUFDIGNhbm5vdCBnbyB0byBzbGVlcAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5LCBzbGVlcCB3aWxsIGJlIGFib3J0ZWQuCisgKi8KK3ZvaWQgYWRfZnRkZl9zbGVlcF93aGVuX3Bvc3NpYmxlKCBGVERGX0Jvb2xlYW4gYWxsb3dfZGVmZXJyZWRfc2xlZXApOworCisvKioKKyAqIFxicmllZiBJbnN0cnVjdHMgdGhlIE1BQyBhbmQgUEhZIHRvIHdha2V1cCwgaWYgc2xlZXBpbmcKKyAqCisgKi8KK3ZvaWQgYWRfZnRkZl93YWtlX3VwKHZvaWQpOworCisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorLyoqCisgKiBcYnJpZWYgQ29uZmlndXJlcyBHUElPIHBpbnMgZm9yIHRoZSBGVERGIGRlYnVnIGJ1cworICoKKyAqIERlYnVnIGJ1cyB1c2VzIHRoZSBmb2xsb3dpbmcgKGZpeGVkKSBHUElPIHBpbnM6CisgKgorICogYml0IDA6IEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl80CisgKiBiaXQgMTogSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzUKKyAqIGJpdCAyOiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNgorICogYml0IDM6IEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl83CisgKiBiaXQgNDogSFdfR1BJT19QT1JUXzAsIEhXX0dQSU9fUElOXzYKKyAqIGJpdCA1OiBIV19HUElPX1BPUlRfMCwgSFdfR1BJT19QSU5fNworICogYml0IDY6IEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl8zCisgKiBiaXQgNzogSFdfR1BJT19QT1JUXzIsIEhXX0dQSU9fUElOXzMKKyAqLwordm9pZCBhZF9mdGRmX2RiZ0J1c0dwaW9Db25maWcodm9pZCk7CisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworCisjZW5kaWYgLyogQURfRlRERl9QSFlfQVBJX0ggKi8KKworLyoqCisgXH0KKyBcfQorIFx9CisgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9mdGRmLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlL2Z0ZGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzk4YzZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9mdGRmLmgKQEAgLTAsMCArMSwzNDMxIEBACisvKioKKyBcYWRkdG9ncm91cCBJTlRFUkZBQ0VTCisgXHsKKyBcYWRkdG9ncm91cCBGVERGCisgXHsKKyBcYnJpZWYgSUVFRSA4MDIuMTUuNCBXaXJlbGVzcworICovCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgZnRkZi5oCisgKgorICogQGJyaWVmIEZUREYgVU1BQyBBUEkgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIAorICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgRlRERl9IXworI2RlZmluZSBGVERGX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpZmRlZiBGVERGX1BIWV9BUEkKKyNpbmNsdWRlIDxmdGRmX2NvbmZpZ19waHlfYXBpLmg+CisjZWxzZQorI2luY2x1ZGUgPGZ0ZGZfY29uZmlnX21hY19hcGkuaD4KKyNlbmRpZgorCisjZGVmaW5lIF9fcHJpdmF0ZTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdAorI2RlZmluZSBfX3ByaXZhdGUyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBU04KKyNkZWZpbmUgX19wcml2YXRlMyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0U04KKworI2RlZmluZSBGVERGX0NBUEFCSUxJVFlfSVNfRkZEICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRlRERl9DQVBBQklMSVRZX0FDX1BPV0VSICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEZUREZfQ0FQQUJJTElUWV9SRUNFSVZFUl9PTl9XSEVOX0lETEUgMHgwOAorI2RlZmluZSBGVERGX0NBUEFCSUxJVFlfRkFTVF9BU1NPQ0lBVElPTiAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9DQVBBQklMSVRZX1NVUFBPUlRTX1NFQ1VSSVRZICAgICAweDQwCisjZGVmaW5lIEZUREZfQ0FQQUJJTElUWV9XQU5UU19TSE9SVF9BRERSRVNTICAgMHg4MAorCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfVVNFX1dBSVRfRk9SX0FDSyAgICAgICAxCisKKy8vIFRyYW5zcGFyZW5jeSBvcHRpb25zCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzEgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzIgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzMgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzQgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzUgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzYgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzcgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfRlJBTUVfVFlQRVMgICAweDAwMDAwMGZmCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfQVVUT19BQ0sgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfQVVUT19GUF9BQ0sgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19DUkNfRVJST1IgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfRlJBTUVfVkVSU0lPTiAweDAwMDAxMDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfUEFOX0lEICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfQUREUiAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfQkVBQ09OICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfTk9fREVTVF9BRERSICAweDAwMDEwMDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX0NTTUFfQ0EgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX0ZDU19HRU5FUkFUSU9OICAweDAyMDAwMDAwCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfRU5BQkxFX1NFQ1VSSVRZICAgICAgICAweDA0MDAwMDAwCisjaWYgRlRERl9UUkFOU1BBUkVOVF9VU0VfV0FJVF9GT1JfQUNLCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfV0FJVF9GT1JfQUNLICAgICAgICAgICAweDA4MDAwMDAwCisjZW5kaWYKKworLy8gVHJhbnNwYXJlbnQgVFggc3RhdHVzZXMKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9TRU5EX1NVQ0NFU1NGVUwgMHgwMDAwMDAwMAorI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0NTTUFDQV9GQUlMVVJFICAweDAwMDAwMDAxCisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfT1ZFUkZMT1cgICAgICAgIDB4MDAwMDAwMDIKKyNpZiBGVERGX1RSQU5TUEFSRU5UX1dBSVRfRk9SX0FDSworI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX05PX0FDSyAgICAgICAgICAweDAwMDAwMDA0CisjZW5kaWYKKworLy8gVHJhbnNwYXJlbnQgUlggc3RhdHVzZXMKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfU1VDQ0VTU0ZVTCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfQ1JDX0VSUk9SICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfU0VDVVJJVFlfRVJST1IgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfUkVTX0ZSQU1FVFlQRSAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfUkVTX0ZSQU1FX1ZFUlNJT04gIDB4MDAwMDAwMDgKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfRFNUX0FERFIgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfRFNUX1BBTl9JRCAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfQkVBQ09OICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfTk9fREVTVF9BRERSIDB4MDAwMDAwODAKKwordHlwZWRlZiB1aW50OF90IEZUREZfTXNnSWQ7CisjZGVmaW5lIEZUREZfREFUQV9SRVFVRVNUICAgICAgICAgICAgICAgMQorI2RlZmluZSBGVERGX0RBVEFfSU5ESUNBVElPTiAgICAgICAgICAgIDIKKyNkZWZpbmUgRlRERl9EQVRBX0NPTkZJUk0gICAgICAgICAgICAgICAzCisjZGVmaW5lIEZUREZfUFVSR0VfUkVRVUVTVCAgICAgICAgICAgICAgNAorI2RlZmluZSBGVERGX1BVUkdFX0NPTkZJUk0gICAgICAgICAgICAgIDUKKyNkZWZpbmUgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVCAgICAgICAgICA2CisjZGVmaW5lIEZUREZfQVNTT0NJQVRFX0lORElDQVRJT04gICAgICAgNworI2RlZmluZSBGVERGX0FTU09DSUFURV9SRVNQT05TRSAgICAgICAgIDgKKyNkZWZpbmUgRlRERl9BU1NPQ0lBVEVfQ09ORklSTSAgICAgICAgICA5CisjZGVmaW5lIEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1QgICAgICAgMTAKKyNkZWZpbmUgRlRERl9ESVNBU1NPQ0lBVEVfSU5ESUNBVElPTiAgICAxMQorI2RlZmluZSBGVERGX0RJU0FTU09DSUFURV9DT05GSVJNICAgICAgIDEyCisjZGVmaW5lIEZUREZfQkVBQ09OX05PVElGWV9JTkRJQ0FUSU9OICAgMTMKKyNkZWZpbmUgRlRERl9DT01NX1NUQVRVU19JTkRJQ0FUSU9OICAgICAxNAorI2RlZmluZSBGVERGX0dFVF9SRVFVRVNUICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEZUREZfR0VUX0NPTkZJUk0gICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRlRERl9TRVRfUkVRVUVTVCAgICAgICAgICAgICAgICAxNworI2RlZmluZSBGVERGX1NFVF9DT05GSVJNICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEZUREZfR1RTX1JFUVVFU1QgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgRlRERl9HVFNfQ09ORklSTSAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBGVERGX0dUU19JTkRJQ0FUSU9OICAgICAgICAgICAgIDIxCisjZGVmaW5lIEZUREZfT1JQSEFOX0lORElDQVRJT04gICAgICAgICAgMjIKKyNkZWZpbmUgRlRERl9PUlBIQU5fUkVTUE9OU0UgICAgICAgICAgICAyMworI2RlZmluZSBGVERGX1JFU0VUX1JFUVVFU1QgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZUREZfUkVTRVRfQ09ORklSTSAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgRlRERl9SWF9FTkFCTEVfUkVRVUVTVCAgICAgICAgICAyNgorI2RlZmluZSBGVERGX1JYX0VOQUJMRV9DT05GSVJNICAgICAgICAgIDI3CisjZGVmaW5lIEZUREZfU0NBTl9SRVFVRVNUICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgRlRERl9TQ0FOX0NPTkZJUk0gICAgICAgICAgICAgICAyOQorI2RlZmluZSBGVERGX1NUQVJUX1JFUVVFU1QgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEZUREZfU1RBUlRfQ09ORklSTSAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRlRERl9TWU5DX1JFUVVFU1QgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGVERGX1NZTkNfTE9TU19JTkRJQ0FUSU9OICAgICAgIDMzCisjZGVmaW5lIEZUREZfUE9MTF9SRVFVRVNUICAgICAgICAgICAgICAgMzQKKyNkZWZpbmUgRlRERl9QT0xMX0NPTkZJUk0gICAgICAgICAgICAgICAzNQorI2RlZmluZSBGVERGX1NFVF9TTE9URlJBTUVfUkVRVUVTVCAgICAgIDM2CisjZGVmaW5lIEZUREZfU0VUX1NMT1RGUkFNRV9DT05GSVJNICAgICAgMzcKKyNkZWZpbmUgRlRERl9TRVRfTElOS19SRVFVRVNUICAgICAgICAgICAzOAorI2RlZmluZSBGVERGX1NFVF9MSU5LX0NPTkZJUk0gICAgICAgICAgIDM5CisjZGVmaW5lIEZUREZfVFNDSF9NT0RFX1JFUVVFU1QgICAgICAgICAgNDAKKyNkZWZpbmUgRlRERl9UU0NIX01PREVfQ09ORklSTSAgICAgICAgICA0MQorI2RlZmluZSBGVERGX0tFRVBfQUxJVkVfUkVRVUVTVCAgICAgICAgIDQyCisjZGVmaW5lIEZUREZfS0VFUF9BTElWRV9DT05GSVJNICAgICAgICAgNDMKKyNkZWZpbmUgRlRERl9CRUFDT05fUkVRVUVTVCAgICAgICAgICAgICA0NAorI2RlZmluZSBGVERGX0JFQUNPTl9DT05GSVJNICAgICAgICAgICAgIDQ1CisjZGVmaW5lIEZUREZfQkVBQ09OX1JFUVVFU1RfSU5ESUNBVElPTiAgNDYKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9DT05GSVJNICAgICAgICA0NworI2RlZmluZSBGVERGX1RSQU5TUEFSRU5UX0lORElDQVRJT04gICAgIDQ4CisjZGVmaW5lIEZUREZfVFJBTlNQQVJFTlRfUkVRVUVTVCAgICAgICAgNDkKKyNkZWZpbmUgRlRERl9UUkFOU1BBUkVOVF9FTkFCTEVfUkVRVUVTVCA1MAorI2RlZmluZSBGVERGX1NMRUVQX1JFUVVFU1QgICAgICAgICAgICAgIDUxCisjZGVmaW5lIEZUREZfRVhQTElDSVRfV0FLRV9VUCAgICAgICAgICAgNTIKKyNkZWZpbmUgRlRERl9SRU1PVEVfUkVRVUVTVCAgICAgICAgICAgICA1MworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKyNkZWZpbmUgRlRERl9EQkdfTU9ERV9TRVRfUkVRVUVTVCAgICAgICA1NAorI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisjZGVmaW5lIEZUREZfRlBQUl9NT0RFX1NFVF9SRVFVRVNUICAgICAgNTUKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisvKioKKyAqIFxicmllZiAgUmVxdWVzdCBzdGF0dXMKKyAqIFxyZW1hcmsgVmFsaWQgc3RhdHVzZXM6CisgKiAgICAgICAgIC0gRlRERl9TVUNDRVNTOiBTdWNjZXNzZnVsCisgKiAgICAgICAgIC0gRlRERl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOiBDQ0EgZmFpbHVyZQorICogICAgICAgICAtIEZUREZfTk9fQUNLOiBObyBhY2sgcmVjZWl2ZWQgYWZ0ZXIgbWFjTWF4RnJhbWVSZXRyaWVzCisgKiAgICAgICAgIC0gRlRERl9OT19EQVRBOiBObyBkYXRhIGZyYW1lcyBwZW5kaW5nCisgKiAgICAgICAgIC0gRlRERl9DT1VOVEVSX0VSUk9SOiBTZWN1cml0eSBmcmFtZSBjb3VudGVyIGVycm9yCisgKiAgICAgICAgIC0gRlRERl9GUkFNRV9UT09fTE9ORzogVG9vIGxvbmcgZnJhbWUKKyAqICAgICAgICAgLSBGVERGX0lNUFJPUEVSX0tFWV9UWVBFOiBJbXByb3BlciBrZXkgdHlwZQorICogICAgICAgICAtIEZUREZfSU1QUk9QRVJfU0VDVVJJVFlfTEVWRUw6IEltcHJvcGVyIHNlY3VyaXR5IGxldmVsCisgKiAgICAgICAgIC0gRlRERl9TRUNVUklUWV9FUlJPUjogU2VjdXJpdHkgYXV0aGVudGljYXRpb24gZXJyb3IKKyAqICAgICAgICAgLSBGVERGX1VOQVZBSUxBQkxFX0tFWTogVW5hdmFpbGFibGUga2V5CisgKiAgICAgICAgIC0gRlRERl9VTkFWQUlMQUJMRV9ERVZJQ0U6IFVuYXZhaWxhYmxlIGRldmljZQorICogICAgICAgICAtIEZUREZfVU5BVkFJTEFCTEVfU0VDVVJJVFlfTEVWRUw6IFVuYXZhaWxhYmxlIHNlY3VyaXR5IGxldmVsCisgKiAgICAgICAgIC0gRlRERl9VTlNVUFBPUlRFRF9MRUdBQ1k6IFVuc3VwcG9ydGVkIGxlZ2FjeQorICogICAgICAgICAtIEZUREZfVU5TVVBQT1JURURfU0VDVVJJVFk6IFVuc3VwcG9ydGVkcyBzZWN1cml0eQorICogICAgICAgICAtIEZUREZfSU5WQUxJRF9QQVJBTUVURVI6IEludmFsaWQgcGFyYW1ldGVyCisgKiAgICAgICAgIC0gRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVzogVHJhbnNhY3Rpb24gb3ZlcmZsb3cKKyAqICAgICAgICAgLSBGVERGX1RSQU5TQUNUSU9OX0VYUElSRUQ6IFRyYW5zYWN0aW9uIGV4cGlyZWQKKyAqICAgICAgICAgLSBGVERGX05PX0JFQUNPTjogTm8gYmVhY29uIHJlY2VpdmVkCisgKiAgICAgICAgIC0gRlRERl9TQ0FOX0lOX1BST0dSRVNTOiBTY2FuIGluIHByb2dyZXNzCisgKiAgICAgICAgIC0gRlRERl9OT19TSE9SVF9BRERSRVNTOiBGVERGIGRvZXMgbm90IGhhdmUgYSBzaG9ydCBhZGRyZXNzCisgKiAgICAgICAgIC0gRlRERl9TTE9URlJBTUVfTk9UX0ZPVU5EOiBTbG90ZnJhbWUgbm90IGZvdW5kCisgKiAgICAgICAgIC0gRlRERl9NQVhfU0xPVEZSQU1FU19FWENFRURFRDogTWF4IHNsb3RmcmFtZXMgZXhjZWVkZWQKKyAqICAgICAgICAgLSBGVERGX1VOS05PV05fTElOSzogVW5rbm93biBsaW5rCisgKiAgICAgICAgIC0gRlRERl9NQVhfTElOS1NfRVhDRUVERUQ6IE1heCBsaW5rcyBleGNlZWRlZAorICogICAgICAgICAtIEZUREZfVU5TVVBQT1JURURfQVRUUklCVVRFOiBVbnN1cHBvcnRlZCBQSUIgYXR0cmlidXRlCisgKiAgICAgICAgIC0gRlRERl9SRUFEX09OTFk6IFJlYWQgb25saSBQSUIgYXR0cmlidXRlCisgKiAgICAgICAgIC0gRlRERl9JTlZBTElEX0hBTkRMRTogSW52YWxpZCBoYW5kbGUKKyAqICAgICAgICAgLSBGVERGX1BBTl9BVF9DQVBBQ0lUWTogUEFOIGF0IGNhcGFjaXR5CisgKiAgICAgICAgIC0gRlRERl9QQU5fQUNDRVNTX0RFTklFRDogUEFOIGFjY2VzcyBkZW5pZWQKKyAqICAgICAgICAgLSBGVERGX0hPUFBJTkdfU0VRVUVOQ0VfT0ZGU0VUX0RVUExJQ0FUSU9OOiBIb3BwaW5nIHNlcXVlbmNlIG9mZnNldCBkdXBsaWNhdGlvbgorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9TdGF0dXM7CisjZGVmaW5lIEZUREZfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGVERGX0NIQU5ORUxfQUNDRVNTX0ZBSUxVUkUgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRlRERl9OT19BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZUREZfTk9fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGVERGX0NPVU5URVJfRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRlRERl9GUkFNRV9UT09fTE9ORyAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZUREZfSU1QUk9QRVJfS0VZX1RZUEUgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGVERGX0lNUFJPUEVSX1NFQ1VSSVRZX0xFVkVMICAgICAgICAgICAgIDcKKyNkZWZpbmUgRlRERl9TRUNVUklUWV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZUREZfVU5BVkFJTEFCTEVfS0VZICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGVERGX1VOQVZBSUxBQkxFX0RFVklDRSAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEZUREZfVU5BVkFJTEFCTEVfU0VDVVJJVFlfTEVWRUwgICAgICAgICAgMTEKKyNkZWZpbmUgRlRERl9VTlNVUFBPUlRFRF9MRUdBQ1kgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGVERGX1VOU1VQUE9SVEVEX1NFQ1VSSVRZICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEZUREZfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVyAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBGVERGX1RSQU5TQUNUSU9OX0VYUElSRUQgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZUREZfT05fVElNRV9UT09fTE9ORyAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRlRERl9MSU1JVF9SRUFDSEVEICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBGVERGX05PX0JFQUNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEZUREZfU0NBTl9JTl9QUk9HUkVTUyAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRlRERl9JTlZBTElEX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBGVERGX05PX1NIT1JUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEZUREZfU1VQRVJGUkFNRV9PVkVSTEFQICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgRlRERl9UUkFDS0lOR19PRkYgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGVERGX1NMT1RGUkFNRV9OT1RfRk9VTkQgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEZUREZfTUFYX1NMT1RGUkFNRVNfRVhDRUVERUQgICAgICAgICAgICAgMjYKKyNkZWZpbmUgRlRERl9VTktOT1dOX0xJTksgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBGVERGX01BWF9MSU5LU19FWENFRURFRCAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEZUREZfVU5TVVBQT1JURURfQVRUUklCVVRFICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgRlRERl9SRUFEX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBGVERGX0lOVkFMSURfSEFORExFICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEZUREZfUEFOX0FUX0NBUEFDSVRZICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRlRERl9QQU5fQUNDRVNTX0RFTklFRCAgICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBGVERGX0hPUFBJTkdfU0VRVUVOQ0VfT0ZGU0VUX0RVUExJQ0FUSU9OIDM0CisKKy8qKgorICogXGJyaWVmIEFzc29jaWF0aW9uIHN0YXR1cworICogXHJlbWFyayBTdXBwb3J0ZWQgc3RhdHVzZXM6CisgKiAgICAgICAgIC0gRlRERl9BU1NPQ0lBVElPTl9TVUNDRVNTRlVMOiBBc3NvY2lhdGUgcmVxdWVzdCBncmFudGVkCisgKiAgICAgICAgIC0gRlRERl9BU1NPQ0lBVElPTl9QQU5fQVRfQ0FQQUNJVFk6IEFzc2NvY2lhdGUgZGVuaWVkLCBQQU4gYXQgY2FwYWNpdHkKKyAqICAgICAgICAgLSBGVERGX0FTU09DSUFUSU9OX1BBTl9BQ0NFU1NfREVOSUVEOiBBc3NvY2lhdGUgZGVuaWVkCisgKiAgICAgICAgIC0gRlRERl9GQVNUX0FTU09DSUFUSU9OX1NVQ0NFU1NGVUw6IEFzc29jaWF0ZSByZXF1ZXN0IGdyYW50ZWQgKGZhc3QpCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0Fzc29jaWF0aW9uU3RhdHVzOworI2RlZmluZSBGVERGX0FTU09DSUFUSU9OX1NVQ0NFU1NGVUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgRlRERl9BU1NPQ0lBVElPTl9QQU5fQVRfQ0FQQUNJVFkgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEZUREZfQVNTT0NJQVRJT05fUEFOX0FDQ0VTU19ERU5JRUQgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBGVERGX0FTU09DSUFUSU9OX0hPUFBJTkdfU0VRVUVOQ0VfT0ZGU0VUX0RVUExJQ0FUSU9OIDB4MDMKKyNkZWZpbmUgRlRERl9GQVNUX0FTU09DSUFUSU9OX1NVQ0NFU1NGVUwgICAgICAgICAgICAgICAgICAgICAweDgwCisKKy8qKgorICogXGJyaWVmIEFkZHJlc3MgbW9kZQorICogXHJlbWFyayBTdXBwb3J0ZWQgYWRkcmVzcyBtb2RlczoKKyAqICAgICAgICAgLSBGVERGX05PX0FERFJFU1MgCisgKiAgICAgICAgIC0gRlRERl9TSE9SVF9BRERSRVNTIAorICogICAgICAgICAtIEZUREZfRVhURU5ERURfQUREUkVTUyAKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfQWRkcmVzc01vZGU7CisjZGVmaW5lIEZUREZfTk9fQUREUkVTUyAgICAgICAwCisjZGVmaW5lIEZUREZfU0lNUExFX0FERFJFU1MgICAxCisjZGVmaW5lIEZUREZfU0hPUlRfQUREUkVTUyAgICAyCisjZGVmaW5lIEZUREZfRVhURU5ERURfQUREUkVTUyAzCisKKy8qKgorICogXGJyaWVmICBQQU4gSUQKKyAqIFxyZW1hcmsgUmFuZ2UgMC4uIDY1NTM1CisgKi8KK3R5cGVkZWYgdWludDE2X3QgRlRERl9QQU5JZDsKKwordHlwZWRlZiB1aW50OF90ICBGVERGX1NpbXBsZUFkZHJlc3M7CisKKy8qKgorICogXGJyaWVmICBTaG9ydCBhZGRyZXNzCisgKiBccmVtYXJrIFJhbmdlIDAwOjAwIC0gZmY6ZmYKKyAqLwordHlwZWRlZiB1aW50MTZfdCBGVERGX1Nob3J0QWRkcmVzczsKKworLyoqCisgKiBcYnJpZWYgIEV4dGVuZGVkIGFkZHJlc3MKKyAqIFxyZW1hcmsgUmFuZ2UgMDA6MDA6MDA6MDA6MDA6MDA6MDA6MDAgLSBmZjpmZjpmZjpmZjpmZjpmZjpmZjpmZgorICovCit0eXBlZGVmIHVpbnQ2NF90IEZUREZfRXh0QWRkcmVzczsKKwordHlwZWRlZiB1bmlvbgoreworICAgIC8qKiBcYnJpZWYgRE8gTk9UIFVTRSAqLworICAgIEZUREZfU2ltcGxlQWRkcmVzcyBzaW1wbGVBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgU2hvcnQgYWRkcmVzcyAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICBzaG9ydEFkZHJlc3M7CisgICAgLyoqIFxicmllZiBFeHRlbmRlZCBhZGRyZXNzICovCisgICAgRlRERl9FeHRBZGRyZXNzICAgIGV4dEFkZHJlc3M7Cit9IEZUREZfQWRkcmVzczsKKworI2lmZGVmIFNJTVVMQVRPUgordHlwZWRlZiB1aW50MTZfdCBGVERGX0RhdGFMZW5ndGg7CisjZWxzZQordHlwZWRlZiB1aW50OF90ICBGVERGX0RhdGFMZW5ndGg7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgIEhhbmRsZQorICogXHJlbWFyayBSYW5nZSAwLi4yNTUKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfSGFuZGxlOworCisvKioKKyAqIFxicmllZiAgQm9vbGVhbgorICogXHJlbWFyayBWYWxpZCB2YWx1ZXM6CisgKiAgICAgICAgIC0gRlRERl9GQUxTRQorICogICAgICAgICAtIEZUREZfVFJVRQorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9Cb29sZWFuOworI2RlZmluZSBGVERGX0ZBTFNFIDAKKyNkZWZpbmUgRlRERl9UUlVFICAxCisKKy8qKgorICogXGJyaWVmICBTZWN1cml0eSBsZXZlbAorICogXHJlbWFyayBWYWxpZCByYW5nZSAwLi43CisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9TZWN1cml0eUxldmVsOworCisvKioKKyAqIFxicmllZiAgU2VjdXJpdHkga2V5IElEIG1vZGUKKyAqIFxyZW1hcmsgVmFsaWQgcmFuZ2UgMC4uMworICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfS2V5SWRNb2RlOworCisvKioKKyAqIFxicmllZiAgU2VjdXJpdHkga2V5IGluZGV4CisgKiBccmVtYXJrIFZhbGlkIHJhbmdlIDAuLjI1NQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfS2V5SW5kZXg7CisKKy8qKgorICogXGJyaWVmICBTZXF1ZW5jZSBudW1iZXIKKyAqIFxyZW1hcmsgVmFsaWQgcmFuZ2UgMC4uMjU1CisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9TTjsKKworLyoqCisgKiBcYnJpZWYgIFNlcXVlbmNlIG51bWJlcgorICogXHJlbWFyayBWYWxpZCByYW5nZSAwLi4weGZmZmZmZmZmZmYgKDUgb2N0ZXRzKQorICovCit0eXBlZGVmIHVpbnQ2NF90IEZUREZfQVNOOworCisvKioKKyAqIFxicmllZiAgT3JkZXIKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX09yZGVyOworCisvKioKKyAqIFxicmllZiAgVGltZQorICogXHJlbWFyayBUaW1lc3RhbXAgaW4gc3ltYm9scyB3aGljaCB3cmFwcyBhcm91bmQgZXZlcnkgMHgxMDAwMDAwMDAgc3ltYm9scworICovCit0eXBlZGVmIHVpbnQzMl90IEZUREZfVGltZTsKKworLyoqCisgKiBcYnJpZWYgIFJlYWwgdGltZQorICogXHJlbWFyayBUaW1lc3RhbXAgaW4gc3ltYm9scyB3aGljaCBkb2VzIG5vdCB3cmFwIChpbiB0aGUgbGlmZXRpbWUgb2YgdGhlIGRldmljZSkKKyAqLwordHlwZWRlZiB1aW50NjRfdCBGVERGX1RpbWU2NDsKKwordHlwZWRlZiB1aW50MzJfdCBGVERGX1VTZWM7CisKK3R5cGVkZWYgdWludDY0X3QgRlRERl9QU2VjOworCit0eXBlZGVmIHVpbnQzMl90IEZUREZfTnJMb3dQb3dlckNsb2NrQ3ljbGVzOworCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9OckJhY2tvZmZQZXJpb2RzOworCisvKioKKyAqIFxicmllZiAgUGVyaW9kIG9mIHRpbWUKKyAqIFxyZW1hcmsgUmFuZ2UgMC4uNjU1MzUKKyAqLwordHlwZWRlZiB1aW50MTZfdCBGVERGX1BlcmlvZDsKKworLyoqCisgKiBcYnJpZWYgIFNpemUgdHlwZQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfU2l6ZTsKKworLyoqCisgKiBcYnJpZWYgIExlbmd0aCB0eXBlCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9MZW5ndGg7CisKKy8qKgorICogXGJyaWVmICBQcmlvcml0eSB0eXBlCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9Qcmlvcml0eTsKKworLyoqCisgKiBcYnJpZWYgIFBlcmZvcm1hbmNlIGNvdW50ZXIKKyAqIFxyZW1hcmsgUmFuZ2UgMC4uMHhmZmZmZmZmZgorICovCit0eXBlZGVmIHVpbnQzMl90IEZUREZfQ291bnQ7CisKKy8qKgorICogXGJyaWVmIERpc2Fzc29jaWF0ZSByZWFzb24KKyAqIFxyZW1hcmsgQWxsb3dlZCB2YWx1ZXM6CisgKiAgICAgICAgIC0gRlRERl9DT09SRF9XSVNIX0RFVklDRV9MRUFWRV9QQU46IENvb3JkaW5hdG9yIHdpc2hlcyB0aGF0IGRldmljZSBsZWF2ZXMgUEFOCisgKiAgICAgICAgIC0gRlRERl9ERVZJQ0VfV0lTSF9MRUFWRV9QQU46IERldmljZSB3aXNoZXMgdG8gbGVhdmUgUEFOCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9EaXNhc3NvY2lhdGVSZWFzb247CisjZGVmaW5lIEZUREZfQ09PUkRfV0lTSF9ERVZJQ0VfTEVBVkVfUEFOIDEKKyNkZWZpbmUgRlRERl9ERVZJQ0VfV0lTSF9MRUFWRV9QQU4gICAgICAgMgorCisvKioKKyAqIFxicmllZiBCZWFjb24gdHlwZQorICogXHJlbWFyayBBbGxvd2VkIHZhbHVlczoKKyAqICAgICAgICAgLSBGVERGX05PUk1BTF9CRUFDT046IE5vcm1hbCBiZWFjb24KKyAqICAgICAgICAgLSBGVERGX0VOSEFOQ0VEX0JFQUNPTjogRW5oYW5jZWQgYmVhY29uCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0JlYWNvblR5cGU7CisjZGVmaW5lIEZUREZfTk9STUFMX0JFQUNPTiAgIDAKKyNkZWZpbmUgRlRERl9FTkhBTkNFRF9CRUFDT04gMQorCisvLyBNQUMgY29uc3RhbnRzCisvKiogXGJyaWVmIGFCYXNlU2xvdER1cmF0aW9uICovCisjZGVmaW5lIEZUREZfQkFTRV9TTE9UX0RVUkFUSU9OICAgICAgICAgIDYwCisvKiogXGJyaWVmIGFOdW1TdXBlcmZyYW1lU2xvdHMgKi8KKyNkZWZpbmUgRlRERl9OVU1fU1VQRVJGUkFNRV9TTE9UUyAgICAgICAgMTYKKy8qKiBcYnJpZWYgYUJhc2VTdXBlcmZyYW1lRHVyYXRpb24gKi8KKyNkZWZpbmUgRlRERl9CQVNFX1NVUEVSRlJBTUVfRFVSQVRJT04gICAgKCBGVERGX0JBU0VfU0xPVF9EVVJBVElPTiAqIEZUREZfTlVNX1NVUEVSRlJBTUVfU0xPVFMgKQorLyoqIFxicmllZiBOT1QgVVNFRCAqLworI2RlZmluZSBGVERGX0dUU19QRVJTSVNURU5DRV9USU1FICAgICAgICA0CisvKiogXGJyaWVmIGFNYXhCZWFjb25PdmVyaGVhZCAqLworI2RlZmluZSBGVERGX01BWF9CRUFDT05fT1ZFUkhFQUQgICAgICAgICA3NQorLyoqIFxicmllZiBhTWF4QmVhY29uT3ZlcmhlYWQgKi8KKyNkZWZpbmUgRlRERl9NQVhfUEhZX1BBQ0tFVF9TSVpFICAgICAgICAgMTI3CisvKiogXGJyaWVmIGFNYXhQSFlQYWNrZXRTaXplICovCisjZGVmaW5lIEZUREZfTUFYX0JFQUNPTl9QQVlMT0FEX0xFTkdUSCAgICggRlRERl9NQVhfUEhZX1BBQ0tFVF9TSVpFIC0gRlRERl9NQVhfQkVBQ09OX09WRVJIRUFEICkKKy8qKiBcYnJpZWYgTk9UIFVTRUQgICovCisjZGVmaW5lIEZUREZfTUFYX0xPU1RfQkVBQ09OUyAgICAgICAgICAgIDQKKy8qKiBcYnJpZWYgYU1heE1QRFVVbnNlY3VyZWRPdmVyaGVhZCAqLworI2RlZmluZSBGVERGX01BWF9NUERVX1VOU0VDVVJFRF9PVkVSSEVBRCAyNQorLyoqIFxicmllZiBhTWluTVBEVU92ZXJoZWFkICovCisjZGVmaW5lIEZUREZfTUlOX01QRFVfT1ZFUkhFQUQgICAgICAgICAgIDkKKy8qKiBcYnJpZWYgYU1heE1BQ1NhZmVQYXlsb2FkU2l6ZSAqLworI2RlZmluZSBGVERGX01BWF9NQUNfU0FGRV9QQVlMT0FEX1NJWkUgICAoIEZUREZfTUFYX1BIWV9QQUNLRVRfU0laRSAtIEZUREZfTUFYX01QRFVfVU5TRUNVUkVEX09WRVJIRUFEICkKKy8qKiBcYnJpZWYgYU1heE1BQ1NhZmVQYXlsb2FkU2l6ZSAqLworI2RlZmluZSBGVERGX01BWF9QQVlMT0FEX1NJWkUgICAgICAgICAgICAoIEZUREZfTUFYX1BIWV9QQUNLRVRfU0laRSAtIEZUREZfTUlOX01QRFVfT1ZFUkhFQUQgKQorLyoqIFxicmllZiBhTWF4TUFDUGF5bG9hZFNpemUgKi8KKyNkZWZpbmUgRlRERl9NQVhfU0lGU19GUkFNRV9TSVpFICAgICAgICAgMTgKKy8qKiBcYnJpZWYgTk9UIFVTRUQgICovCisjZGVmaW5lIEZUREZfTUlOX0NBUF9MRU5HVEggICAgICAgICAgICAgIDQ0MAorLyoqIFxicmllZiBhVW5pdEJhY2tvZmZQZXJpb2QgKi8KKyNkZWZpbmUgRlRERl9VTklUX0JBQ0tPRkZfUEVSSU9EICAgICAgICAgMjAKKworLyoqCisgKiBcYnJpZWYgUElCIGF0dHJpYnV0ZSBJRAorICogXHJlbWFyayBMaXN0IG9mIHN1cHBvcnRlZCBQSUIgYXR0cmlidXRlcywgdGhlaXIgdHlwZXMvc3RydWN0dXJlcyBhbmQgZGVzY3JpcHRpb24KKyAqIC0gRlRERl9QSUJfRVhURU5ERURfQUREUkVTUywgXGxpbmsgRlRERl9FeHRBZGRyZXNzIFxlbmRsaW5rLAorICogICAgICAgICBUaGUgZXh0ZW5kZWQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCisgKiAtIEZUREZfUElCX0FDS19XQUlUX0RVUkFUSU9OLCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIG1heGltdW0gdGltZSBpbiBzeW1ib2xzIHRoYXQgaXMgd2FpdGVkIGZvciBhbiBhY2ssIFJlYWQgb25seQorICogLSBGVERGX1BJQl9BU1NPQ0lBVElPTl9QQU5fQ09PUkQsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGlvbiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGEgUEFOIGNvb3JkaW5hdG9yCisgKiAtIEZUREZfUElCX0FTU09DSUFUSU9OX1BFUk1JVCwgXGxpbmsgIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGlvbiB3aGV0aGVyIHRoZSBQQU4gY29vcmRpbmF0b3IgZ3JhdHMgYXNzb2NpYXRpb24gcmVxdWVzdHMKKyAqIC0gRlRERl9QSUJfQVVUT19SRVFVRVNULCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRpb24gd2hldGhlciBiZWFjb24gcmVjZWl2ZWQgd2hpbGUgc2Nhbm5pbmcgYXJlIGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24gb3Igbm90CisgKiAtIEZUREZfUElCX0JFQUNPTl9QQVlMT0FELCBGVERGX09jdGV0KiwgUG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBhIGJlYWNvbiBhcyBwYXlsb2FkCisgKiAtIEZUREZfUElCX0JFQUNPTl9QQVlMT0FEX0xFTkdUSCwgXGxpbmsgRlRERl9TaXplIFxlbmRsaW5rLCBTaXplIG9mIHRoZSBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIGEgYmVhY29uIGFzIHBheWxvYWQKKyAqIC0gRlRERl9QSUJfQkVBQ09OX09SREVSLCBcbGluayBGVERGX09yZGVyIFxlbmRsaW5rLCBGaXhlZCB0byAxNSBpbmRpY2F0aW5nIGJlYWNvbmxlc3MgbW9kZQorICogLSBGVERGX1BJQl9CU04sIFxsaW5rIEZUREZfU04gXGVuZGxpbmssIFRoZSBjdXJyZW50IGJlYWNvbiBzZXF1ZW5jZSBudW1iZXIKKyAqIC0gRlRERl9QSUJfQ09PUkRfRVhURU5ERURfQUREUkVTUywgXGxpbmsgRlRERl9FeHRBZGRyZXNzIFxlbmRsaW5rLCBUaGUgZXh0ZW5kZWQgYWRkcmVzcyBvZiB0aGUgY29vcmRpbmF0b3IKKyAqIC0gRlRERl9QSUJfQ09PUkRfU0hPUlRfQUREUkVTUywgXGxpbmsgRlRERl9TaG9ydEFkZHJlc3MgXGVuZGxpbmssIFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBjb29yZGluYXRvcgorICogLSBGVERGX1BJQl9EU04sIFxsaW5rIEZUREZfU04gXGVuZGxpbmssIFRoZSBjdXJyZW50IGRhdGEgc2VxdWVuY2UgbnVtYmVyCisgKiAtIEZUREZfUElCX01BWF9CRSwgXGxpbmsgRlRERl9CRUV4cG9uZW50IFxlbmRsaW5rLCBUaGUgbWF4aW11bSBiYWNrb2ZmIGV4cG9uZW50CisgKiAtIEZUREZfUElCX01BWF9DU01BX0JBQ0tPRkZTLCBcbGluayBGVERGX1NpemUgXGVuZGxpbmssIFRoZSBtYXhpbXVtIG51bWJlciBvZiBiYWNrb2ZmcworICogLSBGVERGX1BJQl9NQVhfRlJBTUVfVE9UQUxfV0FJVF9USU1FLCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIG1heGltdW0gdGltZSBpbiBzeW1ib2xzIHRoYXQgUlggaXMgT04gYWZ0ZXIgdGhhdCBhIGZyYW1lIGlzIHJlY2VpdmVkIHdpdGggRlAgc2V0LgorICogLSBGVERGX1BJQl9NQVhfRlJBTUVfUkVUUklFUywgXGxpbmsgRlRERl9TaXplIFxlbmRsaW5rLCBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWUgcmV0cmllcworICogLSBGVERGX1BJQl9NSU5fQkUsIFxsaW5rIEZUREZfQkVFeHBvbmVudCBcZW5kbGluaywgVGhlIG1pbmltdW0gYmFja29mZiBleHBvbmVudAorICogLSBGVERGX1BJQl9MSUZTX1BFUklPRCwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBsb25nIElGUyBwZXJpb2QgaW4gbnVtYmVyIG9mIHN5bWJvbHMsIFJlYWQgb29ubHkKKyAqIC0gRlRERl9QSUJfU0lGU19QRVJJT0QsIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgc2hvcnQgSUZTIHBlcmlvZCBpbiBudW1iZXIgb2Ygc3ltYm9scywgUmVhZCBvb25seQorICogLSBGVERGX1BJQl9QQU5fSUQsIFxsaW5rIEZUREZfUEFOSWQgXGVuZGxpbmssIFRoZSBQQU4gSUQgb2YgdGhlIGRldmljZQorICogLSBGVERGX1BJQl9QUk9NSVNDVU9VU19NT0RFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRpb24gd2hldGhlciB0aGUgcHJvbWlzY3VvdXMgaXMgZW5hYmxlIG9yIG5vdAorICogLSBGVERGX1BJQl9SRVNQT05TRV9XQUlUX1RJTUUsIFxsaW5rIEZUREZfU2l6ZSBcZW5kbGluaywgVGhlIG1heGltdW0gdGltZSBpbiBhQmFzZVN1cGVyRnJhbWVQZXJpb2QncyAoOTYwIHN5bWJvbHMpIHRoYXQgaXMgd2FpdGVkIGZvciBhIGNvbW1hbmQgZnJhbWUgcmVzcG9uc2UKKyAqIC0gRlRERl9QSUJfUlhfT05fV0hFTl9JRExFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRpb24gd2hldGhlciB0aGUgcmVjZWl2ZXIgbXVzdCBiZSBvbiB3aGVuIGlkbGUKKyAqIC0gRlRERl9QSUJfU0VDVVJJVFlfRU5BQkxFRCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIHNlY3VyaXR5IGlzIGVuYWJsZWQKKyAqIC0gRlRERl9QSUJfU0hPUlRfQUREUkVTUywgXGxpbmsgRlRERl9TaG9ydEFkZHJlc3MgXGVuZGxpbmssIFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UKKyAqIC0gRlRERl9QSUJfU1lOQ19TWU1CT0xfT0ZGU0VULCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIG9mZnNldCBpbiBzeW1ib2xzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGZyYW1lIGFuZCB0aGF0IHRoZSB0aW1lc3RhbXAgaXMgdGFrZW4KKyAqIC0gRlRERl9QSUJfVElNRVNUQU1QX1NVUFBPUlRFRCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0aW9uIHdoZXRoZXIgdGltZXN0YW1waW5nIGlzIHN1cHBvcnRlZAorICogLSBGVERGX1BJQl9UUkFOU0FDVElPTl9QRVJTSVNURU5DRV9USU1FLCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIG1heGltdW0gdGltZSBpbiBhQmFzZVN1cGVyRnJhbWVQZXJpb2QncyAoOTYwIHN5bWJvbHMpIHRoYXQgaW5kaXJlY3QgZGF0YSByZXF1ZXN0cyBhcmUgcXVldWVkCisgKiAtIEZUREZfUElCX0VOSF9BQ0tfV0FJVF9EVVJBVElPTiwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXhpbXVtIHRpbWUgaW4gc3ltYm9scyB0aGF0IGlzIHdhaXRlZCBmb3IgYW4gZW5oYW5jZWQgYWNrCisgKiAtIEZUREZfUElCX0lNUExJQ0lUX0JST0FEQ0FTVCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0aW9uIHdoZXRoZXIgZnJhbWVzIHdpdGhvdXQgYSBkZXN0aW5hdGlvbiBQQU4gYXJlIHRyZWF0ZWQgYXMgYnJvYWRjYXN0cworICogLSBGVERGX1BJQl9ESVNDT05ORUNUX1RJTUUsIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgdGltZSBpbiB0aW1lc2xvdHMgdGhhdCBkaXNhc3NvY3RhdGUgZnJhbWVzIGFyZSBzZW5kIGJlZm9yZSBkaXNjb25uZWN0aW5nCisgKiAtIEZUREZfUElCX0pPSU5fUFJJT1JJVFksIFxsaW5rIEZUREZfUHJpb3JpdHkgXGVuZGxpbmssIFRoZSBqb2luIHByaW9yaXR5CisgKiAtIEZUREZfUElCX0FTTiwgXGxpbmsgRlRERl9BU04gXGVuZGxpbmssIFRoZSBjdXJyZW50IEFTTgorICogLSBGVERGX1BJQl9TTE9URlJBTUVfVEFCTEUsIFxsaW5rIEZUREZfU2xvdGZyYW1lVGFibGUgXGVuZGxpbmssIFRoZSBzbG90ZnJhbWUgdGFibGUsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9MSU5LX1RBQkxFLCBcbGluayBGVERGX0xpbmtUYWJsZSBcZW5kbGluaywgVGhlIGxpbmsgdGFibGUsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9USU1FU0xPVF9URU1QTEFURSwgXGxpbmsgRlRERl9UaW1lc2xvdFRlbXBsYXRlIFxlbmRsaW5rLCBUaGUgY3VycmVudCB0aW1lc2xvdCB0ZW1wbGF0ZQorICogLSBGVERGX1BJQl9IT1BQSU5HU0VRVUVOQ0VfSUQsIFxsaW5rIEZUREZfSG9wcGluZ1NlcXVlbmNlSWQgXGVuZGxpbmssIFRoZSBJRCBvZiB0aGUgY3VycmVudCBob3BwaW5nIHNlcXVlbmNlCisgKiAtIEZUREZfUElCX0NIQU5ORUxfUEFHRSwgXGxpbmsgRlRERl9DaGFubmVsUGFnZSBcZW5kbGluaywgVGhlIGN1cnJlbnQgY2hhbm5lbCBwYWdlCisgKiAtIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RILCBcbGluayBGVERGX0xlbmd0aCBcZW5kbGluaywgTGVuZ3RoIG9mIHRoZSBjdXJyZW50IGhvcHBpbmcgc2VxdWVuY2UKKyAqIC0gRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MSVNULCBcbGluayBGVERGX0NoYW5uZWxOdW1iZXIgXGVuZGxpbmssIEhvcHBpbmcgc2VxdWVuY2UKKyAqIC0gRlRERl9QSUJfQ1VSUkVOVF9IT1AsIFxsaW5rIEZUREZfTGVuZ3RoIFxlbmRsaW5rLCBUaGUgY3VycmVudCBob3AKKyAqIC0gRlRERl9QSUJfQ1NMX1BFUklPRCwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBDU0wgc2FtcGxlIHBlcmlvZCBpbiB1bml0cyBvZiAxMCBzeW1ib2xzCisgKiAtIEZUREZfUElCX0NTTF9NQVhfUEVSSU9ELCBcbGluayBGVERGX1BlcmlvZCBcZW5kbGluaywgVGhlIG1heGltdW0gQ1NMIHNhbXBsZSBwZXJpb2Qgb2YgZGV2aWNlcyBpbiB0aGUgUEFOIGluIHVuaXRzIG9mIDEwIHN5bWJvbHMKKyAqIC0gRlRERl9QSUJfQ1NMX0NIQU5ORUxfTUFTSywgXGxpbmsgRlRERl9CaXRtYXAzMiBcZW5kbGluaywgQml0bWFwcGVkIGxpc3Qgb2YgY2hhbm5lbHMgdG8gYmUgc2FtcGxlIGluIENTTCBtb2RlCisgKiAtIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXhpbXVtIHRpbWUgaW4gc3ltYm9scyB0aGF0IFJYIGlzIE9OIGFmdGVyIHRoYXQgYSBmcmFtZSBpcyByZWNlaXZlZCB3aXRoIEZQIHNldCBpbiBDU0wgbW9kZS4KKyAqIC0gRlRERl9QSUJfUEVSRk9STUFOQ0VfTUVUUklDUywgXGxpbmsgRlRERl9QZXJmb3JtYW5jZU1ldHJpY3MgXGVuZGxpbmssIFRoZSBwZXJmb3JtYW5jZSBtZXRyaWNzLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfRUJfSUVfTElTVCwgXGxpbmsgRlRERl9JRUxpc3QgXGVuZGxpbmssIFBheWxvYWQgSUUgbGlzdCB0byBiZSBhZGRlZCB0byBhbiBlbmhhbmNlZCBiZWFjb24KKyAqIC0gRlRERl9QSUJfRUJTTiwgXGxpbmsgRlRERl9TTiBcZW5kbGluaywgQ3VycmVudCBlbmhhbmNlZCBiZWFjb24gc2VxdWVuY2UgbnVtYmVyCisgKiAtIEZUREZfUElCX0VCX0FVVE9fU0EsIFxsaW5rIEZUREZfQXV0b1NBIFxlbmRsaW5rLCBTb3VyY2UgYWRkcmVzcyBtb2RlIG9mIGF1dG8gZ2VuZXJhdGVkIGVuaGFuY2VkIGJlYWNvbnMKKyAqIC0gRlRERl9QSUJfRUFDS19JRV9MSVNULCBcbGluayBGVERGX0lFTGlzdCBcZW5kbGluaywgUGF5bG9hZCBJRSBsaXN0IHRvIGJlIGFkZGVkIHRvIGFuIGVuaGFuY2VkIGFjaworICogLSBGVERGX1BJQl9LRVlfVEFCTEUsIFxsaW5rIEZUREZfS2V5VGFibGUgXGVuZGxpbmssIFNlY3VyaXR5IGtleSB0YWJsZQorICogLSBGVERGX1BJQl9ERVZJQ0VfVEFCTEUsIFxsaW5rIEZUREZfRGV2aWNlVGFibGUgXGVuZGxpbmssIFNlY3VyaXR5IGRldmljZSB0YWJsZQorICogLSBGVERGX1BJQl9TRUNVUklUWV9MRVZFTF9UQUJMRSwgXGxpbmsgRlRERl9TZWN1cml0eUxldmVsVGFibGUgXGVuZGxpbmssIFNlY3VyaXR5IGxldmVsIHRhYmxlCisgKiAtIEZUREZfUElCX0ZSQU1FX0NPVU5URVIsIFxsaW5rIEZUREZfRnJhbWVDb3VudGVyIFxlbmRsaW5rLCBDdXJyZW50IHNlY3VyaXR5IGZyYW1lIGNvdW50ZXIKKyAqIC0gRlRERl9QSUJfTVRfREFUQV9TRUNVUklUWV9MRVZFTCwgXGxpbmsgRlRERl9TZWN1cml0eUxldmVsIFxlbmRsaW5rLCBTZWN1cml0eSBsZXZlbCBmb3IgYXV0byBnZW5lcmF0ZWQgZGF0YSBmcmFtZXMKKyAqIC0gRlRERl9QSUJfTVRfREFUQV9LRVlfSURfTU9ERSwgXGxpbmsgRlRERl9LZXlJZE1vZGUgXGVuZGxpbmssIFNlY3VyaXR5IGtleSBJRCBtb2RlIGZvciBhdXRvIGdlbmVyYXRlZCBkYXRhIGZyYW1lcworICogLSBGVERGX1BJQl9NVF9EQVRBX0tFWV9TT1VSQ0UsIEZUREZfT2N0ZXRbIDggXSwgU2VjdXJpdHkga2V5IHNvdXJjZSBmb3IgYXV0byBnZW5lcmF0ZWQgZGF0YSBmcmFtZXMKKyAqIC0gRlRERl9QSUJfTVRfREFUQV9LRVlfSU5ERVgsIFxsaW5rIEZUREZfS2V5SW5kZXggXGVuZGxpbmssIFNlY3VyaXR5IGtleSBpbmRleCBmb3IgYXV0byBnZW5lcmF0ZWQgZGF0YSBmcmFtZXMKKyAqIC0gRlRERl9QSUJfREVGQVVMVF9LRVlfU09VUkNFLCBGVERGX09jdGV0WyA4IF0sIERlZmF1bHQga2V5IHNvdXJjZQorICogLSBGVERGX1BJQl9GUkFNRV9DT1VOVEVSX01PREUsIFxsaW5rIEZUREZfRnJhbWVDb3VudGVyTW9kZSBcZW5kbGluaywgU2VjdXJpdHkgZnJhbWUgY291bnRlciBtb2RlCisgKiAtIEZUREZfUElCX0NTTF9TWU5DX1RYX01BUkdJTiwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtYXJnaW4gaW4gdW5pdCBvZiAxMCBzeW1ib2xzIHVzZWQgYnkgRlRERiBpbiBDU0wgbW9kZSBpbiBjYXNlIG9mIGEgc3luY2hyb25pc2VkIHRyYW5zbWlzc2lvbgorICogLSBGVERGX1BJQl9DU0xfTUFYX0FHRV9SRU1PVEVfSU5GTywgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSB0aW1lIGluIHVuaXQgb2YgMTAgc3ltYm9scyBhZnRlciB3aGljaCBGVERGIGRpc2NhcmQgdGhlIHJlbW90ZSBzeW5jaHJvbmlzYXRpb24gaW5mby4KKyAqIC0gRlRERl9QSUJfVFNDSF9FTkFCTEVELCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIHRoZSBUU0NIIG1vZGUgaXMgZW5hYmxlZCBvciBub3QsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9MRV9FTkFCTEVELCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIHRoZSBDU0wgbW9kZSBpcyBlbmFibGVkIG9yIG5vdAorICogLSBGVERGX1BJQl9DVVJSRU5UX0NIQU5ORUwsIFxsaW5rIEZUREZfQ2hhbm5lbE51bWJlciBcZW5kbGluaywgVGhlIGN1cnJlbnQgY2hhbm5lbCB1c2VkIGJ5IEZUREYKKyAqIC0gRlRERl9QSUJfQ0hBTk5FTFNfU1VQUE9SVEVELCBcbGluayBGVERGX0NoYW5uZWxEZXNjcmlwdG9yTGlzdCBcZW5kbGluaywgTGlzdCBvZiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgRlRERgorICogLSBGVERGX1BJQl9UWF9QT1dFUl9UT0xFUkFOQ0UsIFxsaW5rIEZUREZfVFhQb3dlclRvbGVyYW5jZSBcZW5kbGluaywgVFggcG93ZXIgdG9sZXJhbmNlCisgKiAtIEZUREZfUElCX1RYX1BPV0VSLCBcbGluayBGVERGX0RCbSBcZW5kbGluaywgVFggcG93ZXIKKyAqIC0gRlRERl9QSUJfQ0NBX01PREUsIFxsaW5rIEZUREZfQ0NBTW9kZSBcZW5kbGluaywgQ0NBIG1vZGUKKyAqIC0gRlRERl9QSUJfQ1VSUkVOVF9QQUdFLCBcbGluayBGVERGX0NoYW5uZWxQYWdlIFxlbmRsaW5rLCBDdXJyZW50IGNoYW5uZWwgcGFnZQorICogLSBGVERGX1BJQl9NQVhfRlJBTUVfRFVSQVRJT04sIFxsaW5rIEZUREZfUGVyaW9kIFxlbmRsaW5rLCBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3ltYm9scyBpbiBmcmFtZSwgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX1NIUl9EVVJBVElPTiwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFN5bmNocm9uaXNhdGlvbiBoZWFkZXIgbGVuZ3RoIGluIHN5bWJvbHMsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9UUkFGRklDX0NPVU5URVJTLCBcbGluayBGVERGX1RyYWZmaWNDb3VudGVycyBcZW5kbGluaywgTWlzY2VsYW5lb3VzIHRyYWZmaWMgY291bnRlcnMsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9MRV9DQVBBQkxFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgTEUgKENTTCksIFJlYWQgb25seQorICogLSBGVERGX1BJQl9MTF9DQVBBQkxFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgTEwsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9EU01FX0NBUEFCTEUsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGVzIHdoZXRoZXIgRlRERiBzdXBwb3J0cyBEU01FLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfUkZJRF9DQVBBQkxFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgUkZJRCwgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX0FNQ0FfQ0FQQUJMRSwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIHN1cHBvcnRzIEFNQ0EsIFJlYWQgb25seQorICogLSBGVERGX1BJQl9UU0NIX0NBUEFCTEUsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGVzIHdoZXRoZXIgRlRERiBzdXBwb3J0cyBGVERGLCBSZWFkIG9ubHkKKyAqIC0gRlRERl9QSUJfTUVUUklDU19DQVBBQkxFLCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgbWV0cmljcywgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX1JBTkdJTkdfU1VQUE9SVEVELCBcbGluayBGVERGX0Jvb2xlYW4gXGVuZGxpbmssIEluZGljYXRlcyB3aGV0aGVyIEZUREYgc3VwcG9ydHMgcmFuZ2luZywgUmVhZCBvbmx5CisgKiAtIEZUREZfUElCX0tFRVBfUEhZX0VOQUJMRUQsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFBIWSBtdXN0IGJlIGtlcHQgZW5hYmxlZAorICogLSBGVERGX1BJQl9NRVRSSUNTX0VOQUJMRUQsIFxsaW5rIEZUREZfQm9vbGVhbiBcZW5kbGluaywgSW5kaWNhdGVzIHdoZXRoZXIgbWV0cmljcyBhcmUgZW5hYmxlZCBvciBub3QKKyAqIC0gRlRERl9QSUJfQkVBQ09OX0FVVE9fUkVTUE9ORCwgXGxpbmsgRlRERl9Cb29sZWFuIFxlbmRsaW5rLCBJbmRpY2F0ZXMgd2hldGhlciBGVERGIG11c3Qgc2VuZCBhdXRvbWF0aWNhbGx5IGEgYmVhY29uIGF0IGEgQkVDQU9OX1JFUVVFU1QgY29tbWFuZCBmcmFtZSBvciBtdXN0IGZvcndhcmQgdGhlIHJlcXVlc3QgdG8gdGhlIGFwcGxpY2F0aW9uIHVzaW5nIEZUREZfQkVBQ09OX1JFUVVFU1RfSU5ESUNBVElPTi4KKyAqIC0gRlRERl9QSUJfVFNfU1lOQ19DT1JSRUNUX1RIUkVTSE9MRCwgXGxpbmsgRlRERl9QZXJpb2QgXGVuZGxpbmssIFRoZSBtaW5pbXVtIFRTQ0ggc2xvdCBzeW5jIG9mZnNldCBpbiBtaWNyb3NlY29uZHMgYmVmb3JlIHJlc3luY2luZworICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9QSUJBdHRyaWJ1dGU7CisvLyBTZWUgVGFibGUgNTIgIk1BQyBQSUIgYXR0cmlidXRlcyIgb2YgSUVFRSA4MDIuMTUuNC0yMDExIGFuZCBJRUVFIDgwMi4xNS40ZS0yMDEyIGZvciBtb3JlIGRldGFpbHMKKworLy8gTk9URTogQmUgY2FyZWZ1bCB3aXRoIGNoYW5naW5nIHRoZSBvcmRlciBvZiB0aGVzZSBQSUIgYXR0cmlidXRlcyBiZWNhdXNlIGluaXRpYWxpemF0aW9uIG9mIHJlbGF0ZWQKKy8vICAgICAgIHJlZ2lzdGVycyB3aWxsIGJlIGRvbmUgaW4gdGhlIG9yZGVyIGRlZmluZWQgaGVyZS4KKyNkZWZpbmUgRlRERl9QSUJfRVhURU5ERURfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGVERGX1BJQl9BQ0tfV0FJVF9EVVJBVElPTiAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZUREZfUElCX0FTU09DSUFUSU9OX1BBTl9DT09SRCAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRlRERl9QSUJfQVNTT0NJQVRJT05fUEVSTUlUICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGVERGX1BJQl9BVVRPX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZUREZfUElCX0JBVFRfTElGRV9FWFQgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRlRERl9QSUJfQkFUVF9MSUZFX0VYVF9QRVJJT0RTICAgICAgICAgICAgICAgNworI2RlZmluZSBGVERGX1BJQl9CRUFDT05fUEFZTE9BRCAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZUREZfUElCX0JFQUNPTl9QQVlMT0FEX0xFTkdUSCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRlRERl9QSUJfQkVBQ09OX09SREVSICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRlRERl9QSUJfQkVBQ09OX1RYX1RJTUUgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRlRERl9QSUJfQlNOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRlRERl9QSUJfQ09PUkRfRVhURU5ERURfQUREUkVTUyAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRlRERl9QSUJfQ09PUkRfU0hPUlRfQUREUkVTUyAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRlRERl9QSUJfRFNOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgRlRERl9QSUJfR1RTX1BFUk1JVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRlRERl9QSUJfTUFYX0JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRlRERl9QSUJfTUFYX0NTTUFfQkFDS09GRlMgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRlRERl9QSUJfTUFYX0ZSQU1FX1RPVEFMX1dBSVRfVElNRSAgICAgICAgICAgMTkKKyNkZWZpbmUgRlRERl9QSUJfTUFYX0ZSQU1FX1JFVFJJRVMgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgRlRERl9QSUJfTUlOX0JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgRlRERl9QSUJfTElGU19QRVJJT0QgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgRlRERl9QSUJfU0lGU19QRVJJT0QgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgRlRERl9QSUJfUEFOX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRlRERl9QSUJfUFJPTUlTQ1VPVVNfTU9ERSAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgRlRERl9QSUJfUkVTUE9OU0VfV0FJVF9USU1FICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgRlRERl9QSUJfUlhfT05fV0hFTl9JRExFICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgRlRERl9QSUJfU0VDVVJJVFlfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgRlRERl9QSUJfU0hPUlRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgRlRERl9QSUJfU1VQRVJGUkFNRV9PUkRFUiAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgRlRERl9QSUJfU1lOQ19TWU1CT0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRlRERl9QSUJfVElNRVNUQU1QX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRlRERl9QSUJfVFJBTlNBQ1RJT05fUEVSU0lTVEVOQ0VfVElNRSAgICAgICAgMzMKKyNkZWZpbmUgRlRERl9QSUJfVFhfQ09OVFJPTF9BQ1RJVkVfRFVSQVRJT04gICAgICAgICAgMzQKKyNkZWZpbmUgRlRERl9QSUJfVFhfQ09OVFJPTF9QQVVTRV9EVVJBVElPTiAgICAgICAgICAgMzUKKyNkZWZpbmUgRlRERl9QSUJfRU5IX0FDS19XQUlUX0RVUkFUSU9OICAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgRlRERl9QSUJfSU1QTElDSVRfQlJPQURDQVNUICAgICAgICAgICAgICAgICAgMzcKKyNkZWZpbmUgRlRERl9QSUJfU0lNUExFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgRlRERl9QSUJfRElTQ09OTkVDVF9USU1FICAgICAgICAgICAgICAgICAgICAgMzkKKyNkZWZpbmUgRlRERl9QSUJfSk9JTl9QUklPUklUWSAgICAgICAgICAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgRlRERl9QSUJfQVNOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDEKKyNkZWZpbmUgRlRERl9QSUJfTk9fSExfQlVGRkVSUyAgICAgICAgICAgICAgICAgICAgICAgNDIKKyNkZWZpbmUgRlRERl9QSUJfU0xPVEZSQU1FX1RBQkxFICAgICAgICAgICAgICAgICAgICAgNDMKKyNkZWZpbmUgRlRERl9QSUJfTElOS19UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgRlRERl9QSUJfVElNRVNMT1RfVEVNUExBVEUgICAgICAgICAgICAgICAgICAgNDUKKyNkZWZpbmUgRlRERl9QSUJfSE9QUElOR1NFUVVFTkNFX0lEICAgICAgICAgICAgICAgICAgNDYKKyNkZWZpbmUgRlRERl9QSUJfQ0hBTk5FTF9QQUdFICAgICAgICAgICAgICAgICAgICAgICAgNDcKKyNkZWZpbmUgRlRERl9QSUJfTlVNQkVSX09GX0NIQU5ORUxTICAgICAgICAgICAgICAgICAgNDgKKyNkZWZpbmUgRlRERl9QSUJfUEhZX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgNDkKKyNkZWZpbmUgRlRERl9QSUJfRVhURU5URURfQklUTUFQICAgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MRU5HVEggICAgICAgICAgICAgNTEKKyNkZWZpbmUgRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MSVNUICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgRlRERl9QSUJfQ1VSUkVOVF9IT1AgICAgICAgICAgICAgICAgICAgICAgICAgNTMKKyNkZWZpbmUgRlRERl9QSUJfRFdFTExfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgNTQKKyNkZWZpbmUgRlRERl9QSUJfQ1NMX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICAgICAgNTUKKyNkZWZpbmUgRlRERl9QSUJfQ1NMX01BWF9QRVJJT0QgICAgICAgICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgRlRERl9QSUJfQ1NMX0NIQU5ORUxfTUFTSyAgICAgICAgICAgICAgICAgICAgNTcKKyNkZWZpbmUgRlRERl9QSUJfQ1NMX0ZSQU1FX1BFTkRJTkdfV0FJVF9UICAgICAgICAgICAgNTgKKyNkZWZpbmUgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NVUFBPUlRFRCAgICAgNTkKKyNkZWZpbmUgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NZTkNfSU5URVJWQUwgNjAKKyNkZWZpbmUgRlRERl9QSUJfUEVSRk9STUFOQ0VfTUVUUklDUyAgICAgICAgICAgICAgICAgNjEKKyNkZWZpbmUgRlRERl9QSUJfVVNFX0VOSEFOQ0VEX0JFQUNPTiAgICAgICAgICAgICAgICAgNjIKKyNkZWZpbmUgRlRERl9QSUJfRUJfSUVfTElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRlRERl9QSUJfRUJfRklMVEVSSU5HX0VOQUJMRUQgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgRlRERl9QSUJfRUJTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUKKyNkZWZpbmUgRlRERl9QSUJfRUJfQVVUT19TQSAgICAgICAgICAgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgRlRERl9QSUJfRUFDS19JRV9MSVNUICAgICAgICAgICAgICAgICAgICAgICAgNjcKKyNkZWZpbmUgRlRERl9QSUJfS0VZX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgRlRERl9QSUJfREVWSUNFX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgNjkKKyNkZWZpbmUgRlRERl9QSUJfU0VDVVJJVFlfTEVWRUxfVEFCTEUgICAgICAgICAgICAgICAgNzAKKyNkZWZpbmUgRlRERl9QSUJfRlJBTUVfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgNzEKKyNkZWZpbmUgRlRERl9QSUJfTVRfREFUQV9TRUNVUklUWV9MRVZFTCAgICAgICAgICAgICAgNzIKKyNkZWZpbmUgRlRERl9QSUJfTVRfREFUQV9LRVlfSURfTU9ERSAgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgRlRERl9QSUJfTVRfREFUQV9LRVlfU09VUkNFICAgICAgICAgICAgICAgICAgNzQKKyNkZWZpbmUgRlRERl9QSUJfTVRfREFUQV9LRVlfSU5ERVggICAgICAgICAgICAgICAgICAgNzUKKyNkZWZpbmUgRlRERl9QSUJfREVGQVVMVF9LRVlfU09VUkNFICAgICAgICAgICAgICAgICAgNzYKKyNkZWZpbmUgRlRERl9QSUJfUEFOX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgICAgICAgICAgNzcKKyNkZWZpbmUgRlRERl9QSUJfUEFOX0NPT1JEX1NIT1JUX0FERFJFU1MgICAgICAgICAgICAgNzgKKyNkZWZpbmUgRlRERl9QSUJfRlJBTUVfQ09VTlRFUl9NT0RFICAgICAgICAgICAgICAgICAgNzkKKyNkZWZpbmUgRlRERl9QSUJfQ1NMX1NZTkNfVFhfTUFSR0lOICAgICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgRlRERl9QSUJfQ1NMX01BWF9BR0VfUkVNT1RFX0lORk8gICAgICAgICAgICAgODEKKyNkZWZpbmUgRlRERl9QSUJfVFNDSF9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgODIKKyNkZWZpbmUgRlRERl9QSUJfTEVfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgODMKKworLy8gU2VlIFRhYmxlIDcxICJQSFkgUElCIGF0dHJpYnV0ZXMiIG9mIElFRUUgODAyLjE1LjQtMjAxMSBmb3IgbW9yZSBkZXRhaWxzCisjZGVmaW5lIEZUREZfUElCX0NVUlJFTlRfQ0hBTk5FTCAgICAgICAgICAgODQKKyNkZWZpbmUgRlRERl9QSUJfQ0hBTk5FTFNfU1VQUE9SVEVEICAgICAgICA4NQorI2RlZmluZSBGVERGX1BJQl9UWF9QT1dFUl9UT0xFUkFOQ0UgICAgICAgIDg2CisjZGVmaW5lIEZUREZfUElCX1RYX1BPV0VSICAgICAgICAgICAgICAgICAgODcKKyNkZWZpbmUgRlRERl9QSUJfQ0NBX01PREUgICAgICAgICAgICAgICAgICA4OAorI2RlZmluZSBGVERGX1BJQl9DVVJSRU5UX1BBR0UgICAgICAgICAgICAgIDg5CisjZGVmaW5lIEZUREZfUElCX01BWF9GUkFNRV9EVVJBVElPTiAgICAgICAgOTAKKyNkZWZpbmUgRlRERl9QSUJfU0hSX0RVUkFUSU9OICAgICAgICAgICAgICA5MQorCisjZGVmaW5lIEZUREZfUElCX1RSQUZGSUNfQ09VTlRFUlMgICAgICAgICAgOTIKKyNkZWZpbmUgRlRERl9QSUJfTEVfQ0FQQUJMRSAgICAgICAgICAgICAgICA5MworI2RlZmluZSBGVERGX1BJQl9MTF9DQVBBQkxFICAgICAgICAgICAgICAgIDk0CisjZGVmaW5lIEZUREZfUElCX0RTTUVfQ0FQQUJMRSAgICAgICAgICAgICAgOTUKKyNkZWZpbmUgRlRERl9QSUJfUkZJRF9DQVBBQkxFICAgICAgICAgICAgICA5NgorI2RlZmluZSBGVERGX1BJQl9BTUNBX0NBUEFCTEUgICAgICAgICAgICAgIDk3CisjZGVmaW5lIEZUREZfUElCX01FVFJJQ1NfQ0FQQUJMRSAgICAgICAgICAgOTgKKyNkZWZpbmUgRlRERl9QSUJfUkFOR0lOR19TVVBQT1JURUQgICAgICAgICA5OQorI2RlZmluZSBGVERGX1BJQl9LRUVQX1BIWV9FTkFCTEVEICAgICAgICAgIDEwMAorI2RlZmluZSBGVERGX1BJQl9NRVRSSUNTX0VOQUJMRUQgICAgICAgICAgIDEwMQorI2RlZmluZSBGVERGX1BJQl9CRUFDT05fQVVUT19SRVNQT05EICAgICAgIDEwMgorI2RlZmluZSBGVERGX1BJQl9UU0NIX0NBUEFCTEUgICAgICAgICAgICAgIDEwMworI2RlZmluZSBGVERGX1BJQl9UU19TWU5DX0NPUlJFQ1RfVEhSRVNIT0xEIDEwNAorCisvKiBQcm9wcmlldGFyeSBQSUIuICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBGVERGX1BJQl9CT19JUlFfVEhSRVNIT0xEICAgICAgICAgIDEwNQorI2RlZmluZSBGVERGX1BJQl9QVElfQ09ORklHICAgICAgICAgICAgICAgIDEwNgorI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworLy8gVG90YWwgbnVtYmVyIG9mIFBJQiBhdHRyaWJ1dGVzCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorI2RlZmluZSBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTICAgICAgICAgIDEwNgorI2Vsc2UgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworI2RlZmluZSBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTICAgICAgICAgIDEwNAorI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworLyogRGVmYXVsdCB2YWx1ZXMgKi8KKyNpZm5kZWYgRlRERl9CT19JUlFfVEhSRVNIT0xECisjZGVmaW5lIEZUREZfQk9fSVJRX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDB4ZmYKKyNlbmRpZgorCisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorLyoqCisgKiBcYnJpZWYgRGVidWcgYnVzIG1vZGUuCisgKgorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9EYmdNb2RlOworCisvKioKKyAqIFxicmllZiBEaXNhYmxlIGRlYnVnIHNpZ25hbHMKKyAqLworI2RlZmluZSBGVERGX0RCR19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorCisvKioKKyAqIFxicmllZiBMZWdhY3kgZGVidWcgbW9kZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyA9IGVkX3JlcXVlc3QKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgPSBnZW5faXJxCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiA9IHR4X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxID0gcnhfc29mCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwID0gcnhfZW9mCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTEVHQUNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKworLyoqCisgKiBcYnJpZWYgQ2xvY2tzIGFuZCByZXNldAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNy0zID0gIjAwMDAwIgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gbHBfY2xrIGRpdmlkZSBieSAyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBtYWNfY2xrIGRpdmlkZSBieSAyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBoY2xrIGRpdmlkZWQgYnkgMgorICovCisjZGVmaW5lIEZUREZfREJHX0NMS19SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDAyCisKKy8qKgorICogXGJyaWVmIFJ4IHBoeSBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9lbmFibGUgdG93YXJkcyB0aGUgcnhfcGlwZWxpbmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHJ4X3NvZiBmcm9tIHBoeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNS0yID0gcnhfZGF0YSBmcm9tIHBoeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZW9mIHRvIHBoeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mIGV2ZW50IGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICovCisjZGVmaW5lIEZUREZfREJHX1JYX1BIWV9TSUdOQUxTICAgICAgICAgICAgICAgICAweDEwCisKKy8qKgorICogXGJyaWVmIFJ4IHNvZiBhbmQgbGVuZ3RoCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9zb2YKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IHJ4X21hY19sZW5ndGggZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfU09GX0FORF9MRU5HVEggICAgICAgICAgICAgIDB4MTEKKworLyoqCisgKiBcYnJpZWYgUnggbWFjIHRpbWluZyBvdXRwdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IEVuYWJsZSBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IFNvcCAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IEVvcCAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IENyYyAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IEVyciAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IERyb3AgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IEZvcndhcmQgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqLworI2RlZmluZSBGVERGX0RCR19SWF9NQUNfVElNSU5HX09VVFBVVCAgICAgICAgICAgMHgxMgorCisvKioKKyAqIFxicmllZiBSeCBtYWMgZnJhbWUgcGFyc2VyIG91dHB1dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gRW5hYmxlIGZyb20gbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gU29wICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IEVvcCAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBDcmMgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gRXJyICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IERyb3AgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBGb3J3YXJkIGZyb20gbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfTUFDX0ZSQU1FX1BBUlNFUl9PVVRQVVQgICAgIDB4MTMKKworLyoqCisgKiBcYnJpZWYgUnggc3RhdHVzIHRvIFVtYWMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5jcmMxNl9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gcnhfZnJhbWVfc3RhdF91bWFjLnJlc19mcm1fdHlwZV9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gcnhfZnJhbWVfc3RhdF91bWFjLnJlc19mcm1fdmVyc2lvbl9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmRwYW5pZF9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmRhZGRyX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuc3BhbmlkX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuaXNwYW5fY29vcmRfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICovCisjZGVmaW5lIEZUREZfREJHX1JYX1NUQVRVU19UT19VTUFDICAgICAgICAgICAgICAweDE0CisKKy8qKgorICogXGJyaWVmIFJ4IHN0YXR1cyB0byBsbWFjCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9mcmFtZV9zdGF0LnBhY2tldF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gcnhfZnJhbWVfc3RhdC5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gcnhfZnJhbWVfc3RhdC5yeF9lb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gcnhfZnJhbWVfc3RhdC53YWtldXBfZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMtMSA9IHJ4X2ZyYW1lX3N0YXQuZnJhbWVfdHlwZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfZnJhbWVfc3RhdC5yeF9zcW5yX3ZhbGlkCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfU1RBVFVTX1RPX0xNQUMgICAgICAgICAgICAgIDB4MTUKKworLyoqCisgKiBcYnJpZWYgUnggYnVmZmVyIGNvbnRyb2wKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDctNCA9IHByb3ZfZnJvbV9zd2lvLnJ4X3JlYWRfYnVmX3B0cgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMy0wID0gc3RhdF90b19zd2lvLnJ4X3dyaXRlX2J1Zl9wdHIKKyAqLworI2RlZmluZSBGVERGX0RCR19SWF9CVUZGRVJfQ09OVFJPTCAgICAgICAgICAgICAgMHgxNgorCisvKioKKyAqIFxicmllZiBSeCBpbnRlcnJ1cHRzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBzdGF0X3RvX3N3aW8ucnhfYnVmX2F2YWlsX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHN0YXRfdG9fc3dpby5yeF9idWZfZnVsbAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gc3RhdF90b19zd2lvLnJ4X2J1Zl9vdmVyZmxvd19lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBzdGF0X3RvX3N3aW8ucnhfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IHN0YXRfdG9fc3dpby5yeGJ5dGVfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gcnhfZnJhbWVfY3RybC5yeF9lbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2VvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfUlhfSU5URVJSVVBUUyAgICAgICAgICAgICAgICAgIDB4MTcKKworLyoqCisgKiBcYnJpZWYgTUFDIGZyYW1lIHBhcnNlciBldmVudHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDctMyA9CisgKiAgICAgICAgICAgICAgICAgICAgICBQcnQgc3RhdGVtZW50cyBtYWMgZnJhbWUgcGFyc2VyCisgKiAgICAgICAgICAgICAgICAgICAgICAwIFJlc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAxIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRlc3RpbmF0aW9uIFBBTiBJRCBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgYW5kIG5vdCBQQU4gY29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMiBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcworICogICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSBhbmQgbm90IFBBTiBjb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzIFJYIHVuc3VwcG9ydGVkIGZyYW1lIHR5cGUgZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDQgUlggbm9uIEJlYWNvbiBmcmFtZSBkZXRlY3RlZCBhbmQgZHJvcHBlZCBpbiBSeEJlYWNvbk9ubHkgbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgNSBSWCBmcmFtZSBwYXNzZWQgZHVlIHRvIG1hY0Fsd2F5c1Bhc3NGcm1UeXBlIHNldAorICogICAgICAgICAgICAgICAgICAgICAgNiBSWCB1bnN1cHBvcnRlZCBkYV9tb2RlID0gMDEgZm9yIGZyYW1lX3ZlcnNpb24gMHgwLSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgNyBSWCB1bnN1cHBvcnRlZCBzYV9tb2RlID0gMDEgZm9yIGZyYW1lX3ZlcnNpb24gMHgwLSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgOCBEYXRhIG9yIGNvbW1hbmQgZnJhbWUgd2l0aCBubyBkZXN0aW5hdGlvbiBQQU4gSUQgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlIGFuZCBub3QgUEFOIGNvb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgRGF0YSBvciBjb21tYW5kIGZyYW1lIHdpdGggbm8gZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UgYW5kIG5vdCBQQU4gY29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTAgUlggdW5zdXBwb3J0ZWQgZnJhbWVfdmVyc2lvbiBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgMTEgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZGVzdGluYXRpb24gUEFOIElEIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcworICogICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgYW5kIG5vdCBQQU4gY29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTIgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlIGFuZCBub3QgUEFOIGNvb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDEzIFJYIHVuc3VwcG9ydGVkIGZyYW1lX3ZlcnNpb24gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE0IFJYIERlc3RpbmF0aW9uIFBBTiBJZCBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE1IFJYIERlc3RpbmF0aW9uIGFkZHJlc3MgKDEgYnl0ZSkgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNiBSWCBEZXN0aW5hdGlvbiBhZGRyZXNzICgyIGJ5dGUpIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTcgUlggRGVzdGluYXRpb24gYWRkcmVzcyAoOCBieXRlKSBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE4IFJYIFNvdXJjZSBQQU4gSWQgY2hlY2sgZm9yIEJlYWNvbiBmcmFtZXMgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxOSBSWCBTb3VyY2UgUEFOIElkIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMjAgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciBzZWN1cml0eSBjb250cm9sIHdvcmQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIxIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgdW5zdXBwb3J0ZWRfbGVnYWN5IHJlY2VpdmVkIGZyYW1lX3ZlcnNpb24gMDAKKyAqICAgICAgICAgICAgICAgICAgICAgIDIyIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgdW5zdXBwb3J0ZWRfbGVnYWN5IHNlY3VyaXR5IGZyYW1lX3ZlcnNpb24gMTEKKyAqICAgICAgICAgICAgICAgICAgICAgIDIzIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgZnJhbWUgY291bnRlciBmaWVsZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMjQgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciBLZXkgaWRlbnRpZmllciBmaWVsZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMjUgRXJyb3JlZCBkRGVzdGluYXRpb24gV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gVU1BQywgbm90IGluZGljYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgdG93YXJkcyBMTUFDIGNvbnRyb2xsZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDI2IE1hY0Fsd2F5c1Bhc3NXYWtlVXBGcmFtZXMgPSAxLCBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBVTUFDLCBub3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlZCB0b3dhcmRzIExNQUMgY29udHJvbGxlcgorICogICAgICAgICAgICAgICAgICAgICAgMjcgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gTE1BQyBjb250cm9sbGVyIGFuZCBVTUFDCisgKiAgICAgICAgICAgICAgICAgICAgICAyOCBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBMTUFDIGNvbnRyb2xsZXIsIGRyb3BwZWQgdG93YXJkcyBVTUFDCisgKiAgICAgICAgICAgICAgICAgICAgICAyOSBDb21tYW5kIGZyYW1lIHdpdGggZGF0YV9yZXF1ZXN0IGNvbW1hbmQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMwIENvb3JkaW5hdG9yIHJlYWxpZ25tZW50IGZyYW1lIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzMSBOb3QgVXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0wID0gZnJhbWVfdHlwZQorICovCisjZGVmaW5lIEZUREZfREJHX1JYX01BQ19GUkFNRV9QQVJTRVJfRVZFTlRTICAgICAweDE4CisKKy8qKgorICogXGJyaWVmIE1BQyBmcmFtZSBwYXJzZXIgc3RhdGVzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPQorICogICAgICAgICAgICAgICAgICAgICAgRnJhbWVzdGF0ZXMgbWFjIGZyYW1lIHBhcnNlcgorICogICAgICAgICAgICAgICAgICAgICAgMCBpZGxlX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxIGZyX2N0cmxfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDIgZnJfY3RybF9sb25nX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAzIHNlcV9ucl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNCBkZXN0X3Bhbl9pZF9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNSBkZXN0X2FkZHJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgc3JjX3Bhbl9pZF9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNyBzcmNfYWRkcl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgOCBhdXhfc2VjX2hkcl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgOSBoZHJfaWVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDEwIHB5bGRfaWVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDExIGlnbm9yZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMTItMTYgIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSByeF9tYWNfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMCA9IGZyYW1lX3R5cGUKKyAqLworI2RlZmluZSBGVERGX0RCR19SWF9NQUNfRlJBTUVfUEFSU0VSX1NUQVRFUyAgICAgMHgxOQorCisvKioKKyAqIFxicmllZiBUb3AgYW5kIGJvdHRvbSBpbnRlcmZhY2VzIHR4IGRhdGFwYXRoCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9tYWNfbGRfc3RyYgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gdHhfbWFjX2RyZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHR4X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTEgPSB0eF9kYXRhCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBzeW1ib2xfZW5hCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfVFhfVE9QX0JPVFRPTV9JTlRFUkZBQ0VTICAgICAgIDB4MjAKKworLyoqCisgKiBcYnJpZWYgQ29udHJvbCBzaWduYWxzIGZvciB0eCBkYXRhcGF0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gVHhUcmFuc3BhcmVudE1vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5DUkMxNl9lbmEKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDItMSA9IGN0cmxfbG1hY190b190eC50eF9mcmFtZV9ubWJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSB0eF92YWxpZAorICovCisjZGVmaW5lIEZUREZfREJHX1RYX0NPTlRST0xfU0lHTkFMUyAgICAgICAgICAgICAweDIxCisKKy8qKgorICogXGJyaWVmIENvbnRyb2wgc2lnbmFscyBmb3Igd2FrZXVwIGZyYW1lcworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1LTEgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1X1JaKDQgRE9XTlRPIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfcnpfemVybworICovCisjZGVmaW5lIEZUREZfREJHX1RYX1dBS0VVUF9DT05UUk9MX1NJR05BTFMgICAgICAweDIyCisKKy8qKgorICogXGJyaWVmIERhdGEgc2lnbmFscyBmb3Igd2FrZXVwIGZyYW1lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHR4X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTEgPSB0eF9kYXRhCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfcnpfemVybworICovCisjZGVmaW5lIEZUREZfREJHX1RYX1dBS1VQX0RBVEFfU0lHTkFMUyAgICAgICAgICAweDIzCisKKy8qKgorICogXGJyaWVmIERhdGEgYW5kIGNvbnRyb2wgYWNrIGZyYW1lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gc3ltYm9sX2VuYQorICovCisjZGVmaW5lIEZUREZfREJHX1RYX0FDS18gICAgICAgICAgICAgICAgICAgICAgICAweDI0CisKKworLyoqCisgKiBcYnJpZWYgUEhZIHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTEgPSBwaHlhdHRyKDMgZG93bnRvIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBlZF9yZXF1ZXN0CisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19QSFlfU0lHTkFMUyAgICAgICAgICAgICAgIDB4MzAKKworLyoqCisgKiBcYnJpZWYgUEhZIGVuYWJsZSBhbmQgZGV0YWlsZWQgc3RhdGUgbWFjaGluZSBpbmZvCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IHBydCBzdGF0ZW1lbnRzIGRldGFpbGVkIHN0YXRlIG1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgICAgICAgICAgMCBSZXNldAorICogICAgICAgICAgICAgICAgICAgICAgMSBNQUlOX1NUQVRFX0lETEUgVFhfQUNLbm93bGVkZ2VtZW50IGZyYW1lIHNraXAgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMiBNQUlOX1NUQVRFX0lETEUgOiBXYWtlLVVwIGZyYW1lIHJlc2lkZXMgaW4gYnVmZmVyIG5vCisgKiAgICAgICAgICAgICAgICAgICAgICAzIE1BSU5fU1RBVEVfSURMRSA6IFRYIGZyYW1lIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgNCBNQUlOX1NUQVRFX0lETEUgOiBUWCBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgNSBNQUlOX1NUQVRFX0lETEUgOiBnb3RvIFNJTkdMRV9DQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgTUFJTl9TVEFURV9JRExFIDogZ290byBFbmVyZ3kgRGV0ZWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3IE1BSU5fU1RBVEVfSURMRSA6IGdvdG8gUlgKKyAqICAgICAgICAgICAgICAgICAgICAgIDggTUFJTl9TVEFURV9JRExFIGRlLWFzc2VydCBwaHlfZW4gd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgTUFJTl9TVEFURV9JRExFIFN0YXJ0IHBoeV9lbiBhbmQgYXNzZXJ0IHBoeV9lbiB3YWl0IGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMCBNQUlOX1NUQVRFX0NTTUFfQ0FfV0FJVF9GT1JfTUVUQURBVEEgZnJhbWVuciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMSBNQUlOX1NUQVRFX0NTTUFfQ0EgZnJhbWVuciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMiBNQUlOX1NUQVRFX0NTTUFfQ0Egc3RhcnQgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMTQgTUFJTl9TVEFURV9DU01BX0NBIHNraXAgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMTUgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgRmFpbGVkIGZvciBDU0wgbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMTYgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgRmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNyBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0EgY3NtYV9jYSBTdWNjZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICAxOCBNQUlOX1NUQVRFX1NJTkdMRV9DQ0EgQ0NBIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTkgTUFJTl9TVEFURV9TSU5HTEVfQ0NBIENDQSBvaworICogICAgICAgICAgICAgICAgICAgICAgMjAgTUFJTl9TVEFURV9XQUlUX0FDS19ERUxBWSB3YWl0IHRpbWUgZWxhcHNlZAorICogICAgICAgICAgICAgICAgICAgICAgMjEgTUFJTl9TVEFURV9XQUlUIEFDS19ERUxBWSA6IFNlbmQgQWNrIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMjIgTUFJTl9TVEFURV9XQUlUIEFDS19ERUxBWSA6IEFjayBub3Qgc2NoZWR1bGVkIGluIHRpbWUgaW4gVFNDSCBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICAyMyBNQUlOX1NUQVRFX1RTQ0hfVFhfRlJBTUUgbWFjVFNSeFR4IHRpbWUgZWxhcHNlZAorICogICAgICAgICAgICAgICAgICAgICAgMjQgTUFJTl9TVEFURV9UWF9GUkFNRSBpdCBpcyBDU0wgbW9kZSwgc3RhcnQgdGhlIFdVIHNlcSBmb3IgbWFjV1VQZXJpb2QKKyAqICAgICAgICAgICAgICAgICAgICAgIDI1IE1BSU5fU1RBVEVfVFhfRlJBTUUxCisgKiAgICAgICAgICAgICAgICAgICAgICAyNiBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cxIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMjcgTUFJTl9TVEFURV9UWF9GUkFNRV9XMiBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDI4IE1BSU5fU1RBVEVfVFhfV0FJVF9MQVNUX1NZTUJPTCBleGl0CisgKiAgICAgICAgICAgICAgICAgICAgICAyOSBNQUlOX1NUQVRFX1RYX1JBTVBET1dOX1cgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAzMCBNQUlOX1NUQVRFX1RYX1BIWVRSWFdBSVQgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAzMSBNQUlOX1NUQVRFX0dFTl9JRlMgLCBBY2sgd2l0aCBmcmFtZSBwZW5kaW5nIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzMiBNQUlOX1NUQVRFX0dFTl9JRlMgLCBBY2sgcmVxdWVzdGVkIGJ1dCBEaXNSWGFja1JlY2VpdmVkY2EgaXMgc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAzMyBNQUlOX1NUQVRFX0dFTl9JRlMgLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYW4gSUZTLCBzd2l0Y2ggdGhlIHJ4LW9uIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgYW4gQUNLCisgKiAgICAgICAgICAgICAgICAgICAgICAzNCBNQUlOX1NUQVRFX0dFTl9JRlMgLCBnZW5lcmF0aW5nIGFuIFNJRlMgKFNob3J0IEludGVyIEZyYW1lIFNwYWNlKQorICogICAgICAgICAgICAgICAgICAgICAgMzUgTUFJTl9TVEFURV9HRU5fSUZTICwgZ2VuZXJhdGluZyBhbiBMSUZTIChMb25nIEludGVyIEZyYW1lIFNwYWNlKQorICogICAgICAgICAgICAgICAgICAgICAgMzYgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgJ2NzbHBlcmlvZF90aW1lcl9yZWFkeScgaXMgcmVhZHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgdGhlIGRhdGEgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDM3IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggaW4gQ1NMIG1vZGUsICdSZW5kZXp2b3VzIHplcm8gdGltZSBub3QgeWV0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBzZW50IGFub3RoZXIgV1UgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDM4IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggZXhpdCwgY29ycmVjdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAzOSBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGluIENTTCBtb2RlLCByeF9yZXN1bWVfYWZ0ZXJfdHggaXMgc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA0MCBNQUlOX1NUQVRFX1NFTlRfU1RBVFVTIENTTE1vZGUgd3Vfc2VxdWVuY2VfZG9uZV9mbGFnIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDQxIE1BSU5fU1RBVEVfQUREX0RFTEFZIGV4aXQsIGdvdG8gUlggZm9yIGZyYW1lIHBlbmRpbmcgdGltZQorICogICAgICAgICAgICAgICAgICAgICAgNDIgTUFJTl9TVEFURV9BRERfREVMQVkgZXhpdCwgZ290byBJRExFCisgKiAgICAgICAgICAgICAgICAgICAgICA0MyBNQUlOX1NUQVRFX1JYIHN3aXRjaCB0aGUgUlggZnJvbSBvZmYgdG8gb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDQ0IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUQVJUIHdhaXRlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ1IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgc3RhcnQgdGhlIE1hY0Fja0R1cmF0aW9uIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA0NiBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIHN0YXJ0IHRoZSBhY2sgd2FpdCB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDcgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBOT1JNQUwgbW9kZSA6IHN0YXJ0IHJ4X2R1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA0OCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIFRTQ0ggbW9kZSA6IHN0YXJ0IG1hY1RTUnhXYWl0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAobWFjVFNSeFdhaXQpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA0OSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIENTTCBtb2RlIDogc3RhcnQgdGhlIGNzbF9yeF9kdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgKG1hY0NTTHNhbXBsZVBlcmlvZCkgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDUwIE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgQ1NMIG1vZGUgOiBzdGFydCB0aGUgY3NsX3J4X2R1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAobWFjQ1NMZGF0YVBlcmlvZCkgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDUxIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMSBhY2t3YWl0X3RpbWVyX3JlYWR5IG9yIGFja19yZWNlaXZlZF9pbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIDUyIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMiBub3JtYWxfbW9kZS4gQUNLIHdpdGggRlAgYml0IHNldCwgc3RhcnQgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDU0IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNCBSeEFsd2F5c09uIGlzIHNldCB0byAwCisgKiAgICAgICAgICAgICAgICAgICAgICA1NSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDUgVFNDSCBtb2RlIHZhbGlkIGZyYW1lIHJ4ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDU2IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNiBUU0NIIG1vZGUgbWFjVFNSeHdhaXQgZXhwaXJlZAorICogICAgICAgICAgICAgICAgICAgICAgNTcgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA3IG1hY0NTTHNhbXBsZVBlcmlvZCB0aW1lciByZWFkeQorICogICAgICAgICAgICAgICAgICAgICAgNTggTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA4IGNzbF9tb2RlLiBEYXRhIGZyYW1lIHJlY2lldmVkIHdpdGggRlAgYml0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIGluY3JlbWVudCBSWCBkdXJhdGlvbiB0aW1lCisgKiAgICAgICAgICAgICAgICAgICAgICA1OSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDkgQ1NMIG1vZGUgOiBSZWNlaXZlZCB3dSBmcmFtZSBpbiBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmcgcGVyaW9kIHJlc3RhcnQgbWFjQ1NMZGF0YVBlcmlvZCB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNjAgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMCBjc2xfcnhfZHVyYXRpb25fcmVhZHkgb3IgY3NsIGRhdGEgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkOgorICogICAgICAgICAgICAgICAgICAgICAgNjEgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMSBub3JtYWxfbW9kZS4gRlAgYml0IGlzIHNldCwgc3RhcnQgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDYyIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTIgbm9ybWFsIG1vZGUgcnhfZHVyYXRpb25fdGltZXJfcmVhZHkgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9wZW5kaW5nX3RpbWVyX3JlYWR5CisgKiAgICAgICAgICAgICAgICAgICAgICA2MyBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEzIGFja25vd2xlZGdlIGZyYW1lIHJlcXVlc3RlZAorICogICAgICAgICAgICAgICAgICAgICAgNjQgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxNCBJbnRlcnJ1cHQgdG8gc2VudCBhIGZyYW1lLiBmb3VuZF90eF9wYWNrZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDY1IE1BSU5fU1RBVEVfQ1NMX1JYX0lETEVfRU5EIFJaIHRpbWUgaXMgZmFyIGF3YXksIHN3aXRjaCByZWNlaXZlciBPZmYgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBjc2xfcnhfcnpfdGltZSBiZWZvcmUgc3dpdGNoaW5nIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA2NiBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORCBSWiB0aW1lIGlzIG5vdCBzbyBmYXIgYXdheSwga2VlcCByZWNlaXZlciBPbgorICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdhaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA2NyBNQUlOX1NUQVRFX1JYX1NUQVJUX1BIWVJYU1RPUCBhY2sgd2l0aCBmcCByZWNlaXZlZCBrZWVwIHJ4IG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA2OCBNQUlOX1NUQVRFX1JYX1NUQVJUX1BIWVJYU1RPUCBzd2l0Y2ggdGhlIFJYIGZyb20gb24gdG8gb2ZmCisgKiAgICAgICAgICAgICAgICAgICAgICA2OSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVE9QIGFja25vd2xlZGdlIGRvbmUgOiBzd2l0Y2ggYmFjayB0byBmaW5pc2ggVFgKKyAqICAgICAgICAgICAgICAgICAgICAgIDcwIE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUT1Agc3dpdGNoIHRoZSBSWCBvZmYKKyAqICAgICAgICAgICAgICAgICAgICAgIDcxIE1BSU5fU1RBVEVfRUQgc3dpdGNoIHRoZSBSWCBmcm9tIG9mZiB0byBvbgorICogICAgICAgICAgICAgICAgICAgICAgNzIgTUFJTl9TVEFURV9FRF9XQUlUX1BIWVJYU1RBUlQgd2FpdGVkIGZvciBwaHlSeFN0YXJ0dXAKKyAqICAgICAgICAgICAgICAgICAgICAgIDczIE1BSU5fU1RBVEVfRURfV0FJVF9FRFNDQU5EVVJBVElPTiB3YWl0ZWQgZm9yIEVkU2NhbkR1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3NCBNQUlOX1NUQVRFX0VEX1dBSVRfUEhZUlhTVE9QIGVuZCBvZiBFbmVyZ3kgRGV0ZWN0aW9uLCBnb3QgSURMRQorICogICAgICAgICAgICAgICAgICAgICAgICAgNzUgLSAxMjcgTm90IHVzZWQKKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX0VOQUJMRV9BTkRfU00gICAgICAgICAgICAgMHgzMQorCisvKioKKyAqIFxicmllZiBSWCBlbmFibGUgYW5kIGRldGFpbGVkIHN0YXRlIG1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IGRldGFpbGVkIHN0YXRlIG1hY2hpbmUgaW5mbyBzZWUgRlRERl9EQkdfTE1BQ19FTkFCTEVfQU5EX1NNCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19SWF9FTkFCTEVfQU5EX1NNICAgICAgICAgIDB4MzIKKworLyoqCisgKiBcYnJpZWYgVFggZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZSBtYWNoaW5lIGluZm8KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBkZXRhaWxlZCBzdGF0ZSBtYWNoaW5lIGluZm8gc2VlIEZUREZfREJHX0xNQUNfRU5BQkxFX0FORF9TTQorICovCisjZGVmaW5lIEZUREZfREJHX0xNQUNfVFhfRU5BQkxFX0FORF9TTSAgICAgICAgICAweDMzCisKKy8qKgorICogXGJyaWVmIFBIWSBlbmFibGUsIFRYIGVuYWJsZSBhbmQgUnggZW5hYmxlIGFuZCBzdGF0ZSBtYWNoaW5lIHN0YXRlcworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQtMCA9IFN0YXRlIG1hY2hpbmUgc3RhdGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgMSAgTUFJTl9TVEFURV9JRExFCisgKiAgICAgICAgICAgICAgICAgICAgICAgMiAgTUFJTl9TVEFURV9DU01BX0NBX1dBSVRfRk9SX01FVEFEQVRBCisgKiAgICAgICAgICAgICAgICAgICAgICAgMyAgTUFJTl9TVEFURV9DU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAgNCAgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBXzAKKyAqICAgICAgICAgICAgICAgICAgICAgICA1ICBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgICA2ICBNQUlOX1NUQVRFX1NJTkdMRV9DQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgICA3ICBNQUlOX1NUQVRFX1dBSVRfQUNLX0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgICAgOCAgTUFJTl9TVEFURV9UU0NIX1RYX0ZSQU1FCisgKiAgICAgICAgICAgICAgICAgICAgICAgOSAgTUFJTl9TVEFURV9UWF9GUkFNRQorICogICAgICAgICAgICAgICAgICAgICAgIDEwIE1BSU5fU1RBVEVfVFhfRlJBTUUxCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTEgTUFJTl9TVEFURV9UWF9GUkFNRV9XMQorICogICAgICAgICAgICAgICAgICAgICAgIDEyIE1BSU5fU1RBVEVfVFhfRlJBTUVfVzIKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMyBNQUlOX1NUQVRFX1RYX1dBSVRfTEFTVF9TWU1CT0wKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNCBNQUlOX1NUQVRFX1RYX1JBTVBET1dOCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTUgTUFJTl9TVEFURV9UWF9SQU1QRE9XTl9XCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTYgTUFJTl9TVEFURV9UWF9QSFlUUlhXQUlUCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTcgTUFJTl9TVEFURV9HRU5fSUZTCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTggTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSAorICogICAgICAgICAgICAgICAgICAgICAgIDE5IE1BSU5fU1RBVEVfU0VOVF9TVEFUVVMKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMCBNQUlOX1NUQVRFX0FERF9ERUxBWQorICogICAgICAgICAgICAgICAgICAgICAgIDIxIE1BSU5fU1RBVEVfVFNDSF9SWF9BQ0tERUxBWQorICogICAgICAgICAgICAgICAgICAgICAgIDIyIE1BSU5fU1RBVEVfUlgKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMyBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVEFSVAorICogICAgICAgICAgICAgICAgICAgICAgIDI0IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVECisgKiAgICAgICAgICAgICAgICAgICAgICAgMjYgTUFJTl9TVEFURV9DU0xfUlhfSURMRV9FTkQKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNyBNQUlOX1NUQVRFX1JYX1NUQVJUX1BIWVJYU1RPUAorICogICAgICAgICAgICAgICAgICAgICAgIDI4IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUT1AKKyAqICAgICAgICAgICAgICAgICAgICAgICAyOSBNQUlOX1NUQVRFX0VECisgKiAgICAgICAgICAgICAgICAgICAgICAgMzAgTUFJTl9TVEFURV9FRF9XQUlUX1BIWVJYU1RBUlQKKyAqICAgICAgICAgICAgICAgICAgICAgICAzMSBNQUlOX1NUQVRFX0VEX1dBSVRfRURTQ0FORFVSQVRJT04KKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX1JYX1RYX0VOQUJMRV9BTkRfU1RBVEVTICAgMHgzNAorCisvKioKKyAqIFxicmllZiBMTUFDIGNvbnRyb2xsZXIgdG8gdHggaW50ZXJmYWNlIHdpdGggd2FrZXVwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfbGFzdF9zeW1ib2wKKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX1RPX1RYX0FORF9XQUtFVVAgICAgICAgICAgMHgzNQorCisvKioKKyAqIFxicmllZiBMTUFDIGNvbnRyb2xsZXIgdG8gdHggaW50ZXJmYWNlIHdpdGggZnJhbWUgcGVuZGluZworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuLmZwX2JpdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGN0cmxfbG1hY190b190eC50eF9mcmFtZV9ubWJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGN0cmxfdHhfdG9fbG1hYy50eF9sYXN0X3N5bWJvbAorICovCisjZGVmaW5lIEZUREZfREJHX0xNQUNfVE9fVFhfQU5EX0ZSQU1FX1BFTkRJTkcgICAweDM2CisKKy8qKgorICogXGJyaWVmIFJ4IHBpcGVwbGluZSB0byBMTUFDIGNvbnRyb2xsZXIgaW50ZXJmYWNlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGN0cmxfcnhfdG9fbG1hYy5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gY3RybF9yeF90b19sbWFjLnJ4X2VvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBjdHJsX3J4X3RvX2xtYWMucGFja2V0X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSBhY2tfcmVjZWl2ZWRfaW5kCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBhY2tfcmVxdWVzdF9pbmQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGN0cmxfcnhfdG9fbG1hYy5kYXRhX3JlcXVlc3RfZnJhbWUKKyAqLworI2RlZmluZSBGVERGX0RCR19MTUFDX1JYX1RPX0xNQUMgICAgICAgICAgICAgICAgMHgzNworCisvKioKKyAqIFxicmllZiBDU0wgc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3NsX3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0LTEgPSBzd2lvX2Fsd2F5c19vbl90b19sbWFjX2N0cmwudHhfZmxhZ19zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBmb3VuZF93dV9wYWNrZXQ7CisgKi8KKyNkZWZpbmUgRlRERl9EQkdfTE1BQ19DU0xfU1RBUlQgICAgICAgICAgICAgICAgIDB4MzgKKworLyoqCisgKiBcYnJpZWYgVFNDSCBUWCBBQ0sgdGltaW5nCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPSBzd2lvX2Fsd2F5c19vbl90b19sbWFjX2N0cmwudHhfZmxhZ19zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGN0cmxfcnhfdG9fbG1hYy5wYWNrZXRfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IG9uZV91c190aW1lcl9yZWFkeQorICovCisjZGVmaW5lIEZUREZfREJHX0xNQUNfVFNDSF9BQ0tfVElNSU5HICAgICAgICAgICAweDM5CisKKworLyoqCisgKiBcYnJpZWYgU2VjdXJpdHkgY29udHJvbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gc3dpb190b19zZWN1cml0eS5zZWNTdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gc3dpb190b19zZWN1cml0eS5zZWNUeFJ4bgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gc3dpb190b19zZWN1cml0eS5zZWNBYm9ydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gc3dpb190b19zZWN1cml0eS5zZWNFbmNEZWNuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBzd2lvX2Zyb21fc2VjdXJpdHkuc2VjQnVzeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gc3dpb19mcm9tX3NlY3VyaXR5LnNlY0F1dGhGYWlsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBzd2lvX2Zyb21fc2VjdXJpdHkuc2VjUmVhZHlfZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gJzAnCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfU0VDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4NDAKKworLyoqCisgKiBcYnJpZWYgU2VjdXJpdHkgQ1RMSUQgYWNjZXNzIFJ4IGFuZCBUeAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gdHhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gcnhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gcnhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IHJ4X3NlY19jby5kX3JkeQorICovCisjZGVmaW5lIEZUREZfREJHX1NFQ19DVExJRF9BQ0NFU1NfUlhfVFggICAgICAgICAweDQxCisKKy8qKgorICogXGJyaWVmIFNlY3VyaXR5IGN0bGlkIGFjY2VzcyB0eCB3aXRoIHNlY193cl9kYXRhX3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9zZWNfY2kubGRfc3RyYgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gdHhfc2VjX2NpLmN0bGlkX3J3CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSB0eF9zZWNfY2kuc2VsZWN0cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gdHhfc2VjX2NvLmRfcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTAgPSBzZWNfd3JfZGF0YV92YWxpZAorICovCisjZGVmaW5lIEZUREZfREJHX1NFQ19DVExJRF9BQ0NFU1NfVFhfQU5EX1NFQ19XUl9EQVRBX1ZBTElEICAgICAgMHg0MgorCisvKioKKyAqIFxicmllZiBTZWN1cml0eSBjdGxpZCBhY2Nlc3Mgcnggd2l0aCBzZWNfd3JfZGF0YV92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gcnhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHJ4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0wID0gc2VjX3dyX2RhdGFfdmFsaWQKKyAqLworI2RlZmluZSBGVERGX0RCR19TRUNfQ1RMSURfQUNDRVNTX1JYX0FORF9TRUNfV1JfREFUQV9WQUxJRCAgICAgMHg0MworCisvKioKKyAqIFxicmllZiBBSEIgYnVzIHdpdGhvdXQgaHNpemUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGhzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYtNSA9IGh0cmFucworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gaHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBocmVhZHlfaW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IGhyZWFkeV9vdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEtMCA9IGhyZXNwCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfQUhCX1dPX0hTSVpFICAgICAgICAgICAgICAgICAgIDB4NTAKKworLyoqCisgKiBcYnJpZWYgQUhCIGJ1cyB3aXRob3V0IGh3cmVhZHlfaW4gYW5kIGhyZXNwKDEpCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBoc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2LTUgPSBodHJhbnMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGh3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0yID0gaGhzaXplKDEgZG93bnRvIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBocmVhZHlfb3V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVzcCgwKQorICovCisjZGVmaW5lIEZUREZfREJHX0FIQl9XT19IV19SRUFEWV9IUkVTUCAgICAgICAgICAweDUxCisKKy8qKgorICogXGJyaWVmIEFNQkEgVHggc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfdHgucGVuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYWlfdHgucHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gYWlfdHgucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb190eC5wcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGFvX3R4LnBzbHZlcnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDItMSA9IHBzaXplX3R4CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVhZHlfb3V0CisgKi8KKyNkZWZpbmUgRlRERl9EQkdfQUhCX0FNQkFfVFhfU0lHTkFMUyAgICAgICAgICAgIDB4NTIKKworLyoqCisgKiBcYnJpZWYgQU1CQSBSeCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV9yeC5wZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhaV9yeC5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV9yeC5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3J4LnByZWFkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYW9fcngucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gcHNpemVfcngKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZWFkeV9vdXQKKyAqLworI2RlZmluZSBGVERGX0RCR19BSEJfQU1CQV9SWF9TSUdOQUxTICAgICAgICAgICAgMHg1MworCisvKioKKyAqIFxicmllZiBBTUJBIHJlZ2lzdGVyIG1hcCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV9yZWcucGVuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYWlfcmVnLnBzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFpX3JlZy5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3JlZy5wcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGFvX3JlZy5wc2x2ZXJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyLTEgPSAiMDAiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVhZHlfb3V0CisgKi8KKyNkZWZpbmUgRlRERl9EQkdfQUhCX0FNQkFfUkVHX01BUF9TSUdOQUxTICAgICAgIDB4NTQKKworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2RlZmluZSBGVERGX01BWF9IT1BQSU5HX1NFUVVFTkNFX0xFTkdUSCAxNgorCit0eXBlZGVmIHZvaWQgICAgIEZUREZfUElCQXR0cmlidXRlVmFsdWU7CisKKy8qKgorICogXGJyaWVmICBMaW5rIHF1YWxpdHkKKyAqIFxyZW1hcmsgUmFuZ2U6IDAuLjI1NQorICogXHJlbWFyayBBIGhpZ2hlciBudW1iZXIgaXMgYSBoaWdoZXIgcXVhbGl0eQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfTGlua1F1YWxpdHk7CisKKy8qKgorICogXGJyaWVmIEhvcHBpbmcgc2VxdWVuY2UgSUQKKyAqLwordHlwZWRlZiB1aW50MTZfdCBGVERGX0hvcHBpbmdTZXF1ZW5jZUlkOworCisvKioKKyAqIFxicmllZiAgQ2hhbm5lbCBudW1iZXIKKyAqIFxyZW1hcmsgU3VwcG9ydGVkIHJhbmdlOiAxMS4uMjcKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0NoYW5uZWxOdW1iZXI7CisKKy8qKgorICogXGJyaWVmICBQYWNrZXQgVHJhZmZpYyBJbmZvcm1hdGlvbiAoUFRJKSB1c2VkIHRvIGNsYXNzaWZ5IGEgdHJhbnNhY3Rpb24gaW4gdGhlIHJhZGlvIGFyYml0ZXIuCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9QVEk7CisKK2VudW0KK3sKKyAgICAgICAgLyogUFRJIGluZGV4IGZvciBleHBsaWNpdCBSeC4gKi8KKyAgICAgICAgRlRERl9QVElfQ09ORklHX1JYLAorICAgICAgICAvKiBQVEkgaW5kZXggZm9yIFR4LiAqLworICAgICAgICBGVERGX1BUSV9DT05GSUdfVFgsCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SRVNFUlZFRDAsCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SRVNFUlZFRDEsCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SRVNFUlZFRDIsCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SRVNFUlZFRDMsCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SRVNFUlZFRDQsCisgICAgICAgIEZUREZfUFRJX0NPTkZJR19SRVNFUlZFRDUsCisgICAgICAgIC8qIEVudW1lcmF0aW9uIGVuZC4gKi8KKyAgICAgICAgRlRERl9QVElTLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgRlRERl9QVEkgcHRpc1tGVERGX1BUSVNdOworfSBGVERGX1B0aUNvbmZpZzsKKworLyoqCisgKiBcYnJpZWYgIENoYW5uZWwgcGFnZQorICogXHJlbWFyayBTdXBwb3J0ZWQgdmFsdWVzOiAwCisgKi8KK3R5cGVkZWYgdWludDhfdCAgRlRERl9DaGFubmVsUGFnZTsKKwordHlwZWRlZiB1aW50OF90ICBGVERGX0NoYW5uZWxPZmZzZXQ7CisKK3R5cGVkZWYgdWludDhfdCAgRlRERl9PY3RldDsKKworLyoqCisgKiBcYnJpZWYgOC1iaXQgdHlwZSBiaXRtYXAKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0JpdG1hcDg7CisKKy8qKgorICogXGJyaWVmIDE2LWJpdCB0eXBlIGJpdG1hcAorICovCit0eXBlZGVmIHVpbnQxNl90IEZUREZfQml0bWFwMTY7CisKKy8qKgorICogXGJyaWVmIDMyLWJpdCB0eXBlIGJpdG1hcAorICovCit0eXBlZGVmIHVpbnQzMl90IEZUREZfQml0bWFwMzI7CisKK3R5cGVkZWYgdWludDhfdCAgRlRERl9OdW1PZkJhY2tvZmZzOworCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfR1RTQ2hhcmF0ZXJpc3RpY3M7CisKKy8qKgorICogXGJyaWVmIFNjYW4gdHlwZQorICogXHJlbWFyayBBbGxvd2VkIHZhbHVlczoKKyAqICAgICAgICAgLSBGVERGX0VEX1NDQU46IEVuZXJneSBkZXRlY3Qgc2NhbgorICogICAgICAgICAtIEZUREZfQUNUSVZFX1NDQU46IEFjdGl2ZSBzY2FuCisgKiAgICAgICAgIC0gRlRERl9QQVNTSVZFX1NDQU46IFBhc3NpdmUgc2NhbgorICogICAgICAgICAtIEZUREZfT1JQSEFOX1NDQU46IE9ycGhhbiBzY2FuCisgKiAgICAgICAgIC0gRlRERl9FTkhBTkNFRF9BQ1RJVkVfU0NBTjogRW5oYW5jZWQgYWN0aXZlIHNjYW4KKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX1NjYW5UeXBlOworI2RlZmluZSBGVERGX0VEX1NDQU4gICAgICAgICAgICAgIDEKKyNkZWZpbmUgRlRERl9BQ1RJVkVfU0NBTiAgICAgICAgICAyCisjZGVmaW5lIEZUREZfUEFTU0lWRV9TQ0FOICAgICAgICAgMworI2RlZmluZSBGVERGX09SUEhBTl9TQ0FOICAgICAgICAgIDQKKyNkZWZpbmUgRlRERl9FTkhBTkNFRF9BQ1RJVkVfU0NBTiA3CisKK3R5cGVkZWYgdWludDhfdCBGVERGX1NjYW5EdXJhdGlvbjsKKworLyoqCisgKiBcYnJpZWYgTG9zcyBvcGVyYXRpb24KKyAqIFxyZW1hcmsgUG9zc2libGUgdmFsdWVzOgorICogICAgICAgICAtIEZUREZfUEFOX0lEX0NPTkZMSUNUCisgKiAgICAgICAgIC0gRlRERl9SRUFMSUdOTUVOVAorICogICAgICAgICAtIEZUREZfQkVBQ09OX0xPU1QgKG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSBvbmx5IGJlYWNvbmxlc3MgbW9kZSBpcyBzdXBwb3J0ZWQpCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0xvc3NSZWFzb247CisjZGVmaW5lIEZUREZfUEFOX0lEX0NPTkZMSUNUIDEKKyNkZWZpbmUgRlRERl9SRUFMSUdOTUVOVCAgICAgMgorI2RlZmluZSBGVERGX0JFQUNPTl9MT1NUICAgICAzCisKK3R5cGVkZWYgdWludDE2X3QgRlRERl9TbG90ZnJhbWVTaXplOworCisvKioKKyAqIFxicmllZiBTZXQgb3BlcmF0aW9uCisgKiBccmVtYXJrIEFsbG93ZWQgdmFsdWVzOgorICogICAgICAgICAtIEZUREZfQUREOiBBZGQgYW4gZW50cnkKKyAqICAgICAgICAgLSBGVERGX0RFTEVURTogRGVsZXRlIGFuIGVudHJ5CisgKiAgICAgICAgIC0gRlRERl9NT0RJRlk6IE1vZGlmeSBhbiBlbnRyeQorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfT3BlcmF0aW9uOworI2RlZmluZSBGVERGX0FERCAgICAwCisjZGVmaW5lIEZUREZfREVMRVRFIDIKKyNkZWZpbmUgRlRERl9NT0RJRlkgMworCit0eXBlZGVmIHVpbnQxNl90IEZUREZfVGltZXNsb3Q7CisKKy8qKgorICogXGJyaWVmIFNldCBvcGVyYXRpb24KKyAqIFxyZW1hcmsgQWxsb3dlZCB2YWx1ZXM6CisgKiAgICAgICAgIC0gRlRERl9OT1JNQUxfTElOSworICogICAgICAgICAtIEZUREZfQURWRVJUSVNJTkdfTElOSworICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfTGlua1R5cGU7CisjZGVmaW5lIEZUREZfTk9STUFMX0xJTksgICAgICAwCisjZGVmaW5lIEZUREZfQURWRVJUSVNJTkdfTElOSyAxCisKKy8qKgorICogXGJyaWVmIFRTQ0ggbW9kZSBzdGF0dXMKKyAqIFxyZW1hcmsgQWxsb3dlZCB2YWx1ZXM6CisgKiAgICAgICAgIC0gRlRERl9UU0NIX09GRgorICogICAgICAgICAtIEZUREZfVFNDSF9PTgorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9UU0NITW9kZTsKKyNkZWZpbmUgRlRERl9UU0NIX09GRiAwCisjZGVmaW5lIEZUREZfVFNDSF9PTiAgMQorCit0eXBlZGVmIHVpbnQxNl90IEZUREZfS2VlcEFsaXZlUGVyaW9kOworCisvKioKKyAqIFxicmllZiBCRSBleHBvbmVudAorICovCit0eXBlZGVmIHVpbnQ4X3QgIEZUREZfQkVFeHBvbmVudDsKKworI2RlZmluZSBGVERGX01BWF9TTE9URlJBTUVTIDQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIEhhbmRsZSBvZiB0aGlzIHNsb3RmcmFtZSAqLworICAgIEZUREZfSGFuZGxlICAgICAgICBzbG90ZnJhbWVIYW5kbGU7CisgICAgLyoqIFxicmllZiBUaGUgbnVtYmVyIG9mIHRpbWVzbG90cyBpbiB0aGlzIHNsb3RmcmFtZSAqLworICAgIEZUREZfU2xvdGZyYW1lU2l6ZSBzbG90ZnJhbWVTaXplOworfSBGVERGX1Nsb3RmcmFtZUVudHJ5OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIHNsb3RmcmFtZXMgaW4gdGhlIHNsb3RmcmFtZSB0YWJsZSAqLworICAgIEZUREZfU2l6ZSAgICAgICAgICAgIG5yT2ZTbG90ZnJhbWVzOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgZmlyc3Qgc2xvdGZyYW1lIGVudHJ5ICovCisgICAgRlRERl9TbG90ZnJhbWVFbnRyeSogc2xvdGZyYW1lRW50cmllczsKK30gRlRERl9TbG90ZnJhbWVUYWJsZTsKKworI2RlZmluZSBGVERGX01BWF9MSU5LUyAgICAgICAgICAgICAgICAxNgorCisjZGVmaW5lIEZUREZfTElOS19PUFRJT05fVFJBTlNNSVQgICAgIDB4MDEKKyNkZWZpbmUgRlRERl9MSU5LX09QVElPTl9SRUNFSVZFICAgICAgMHgwMgorI2RlZmluZSBGVERGX0xJTktfT1BUSU9OX1NIQVJFRCAgICAgICAweDA0CisjZGVmaW5lIEZUREZfTElOS19PUFRJT05fVElNRV9LRUVQSU5HIDB4MDgKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIEhhbmRsZSBvZiB0aGlzIGxpbmssIHVzZWQgZm9yIGRlbGV0ZSBhbmQgbW9kaWZ5IG9wZXJhdGlvbnMgKi8KKyAgICBGVERGX0hhbmRsZSAgICAgICAgbGlua0hhbmRsZTsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgQml0IG1hcHBlZCBsaW5rIG9wdGlvbnMsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOjxicj4KKyAgICAgKiAgICAgICAgRlRERl9MSU5LX09QVElPTl9UUkFOU01JVDogTGlrIGNhbiBiZSB1c2VkIGZvciB0cmFuc21pdHRpbmc8YnI+CisgICAgICogICAgICAgIEZUREZfTElOS19PUFRJT05fUkVDRUlWRTogTGluayBjYW4gYmUgdXNlZCBmb3IgcmVjZWl2aW5nPGJyPgorICAgICAqICAgICAgICBGVERGX0xJTktfT1BUSU9OX1NIQVJFRDogU2hhcmVkIGxpbmssIG11bHRpcGxlIGRldmljZSBjYW4gdHJhbnNtaXQgaW4gdGhpcyBsaW5rPGJyPgorICAgICAqICAgICAgICBGVERGX0xJTktfT1BUSU9OX1RJTUVfS0VFUElORzogTGluayB3aWxsIGJlIHVzZWQgdG8gc3luY2hyb25pc2UgdGltZXNsb3RzPGJyPgorICAgICAqICAgICAgICBNdWx0aXBsZSBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGJ5IG9yLWluZyB0aGVtLgorICAgICAqLworICAgIEZUREZfQml0bWFwOCAgICAgICBsaW5rT3B0aW9uczsKKyAgICAvKiogXGJyaWVmIExpbmsgdHlwZSAqLworICAgIEZUREZfTGlua1R5cGUgICAgICBsaW5rVHlwZTsKKyAgICAvKiogXGJyaWVmIEhhbmRsZSBvZiB0aGUgc2xvdGZyYW1lIG9mIHRoaXMgbGluayAqLworICAgIEZUREZfSGFuZGxlICAgICAgICBzbG90ZnJhbWVIYW5kbGU7CisgICAgLyoqIFxicmllZiBTaG9ydCBhZGRyZXNzIG9mIHRoZSBwZWVyIG5vZGUsIG9ubHkgdmFsaWQgaWYgaXMgYSB0cmFuc21pdCBsaW5rICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgIG5vZGVBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgVGltZXNsb3QgaW4gdGhlIHNsb3RmcmFtZSAqLworICAgIEZUREZfVGltZXNsb3QgICAgICB0aW1lc2xvdDsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgb2Zmc2V0ICovCisgICAgRlRERl9DaGFubmVsT2Zmc2V0IGNoYW5uZWxPZmZzZXQ7CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdm9pZCogICAgICAgICAgICAgIF9fcHJpdmF0ZTE7CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdWludDY0X3QgICAgICAgICAgIF9fcHJpdmF0ZTI7Cit9IEZUREZfTGlua0VudHJ5OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIGxpbmtzIGluIHRoZSBsaW5rIHRhYmxlICovCisgICAgRlRERl9TaXplICAgICAgIG5yT2ZMaW5rczsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGxpbmsgZW50cnkgKi8KKyAgICBGVERGX0xpbmtFbnRyeSogbGlua0VudHJpZXM7Cit9IEZUREZfTGlua1RhYmxlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfSGFuZGxlIHRpbWVzbG90VGVtcGxhdGVJZDsKKyAgICBGVERGX1BlcmlvZCB0c0NDQU9mZnNldDsKKyAgICBGVERGX1BlcmlvZCB0c0NDQTsKKyAgICBGVERGX1BlcmlvZCB0c1R4T2Zmc2V0OworICAgIEZUREZfUGVyaW9kIHRzUnhPZmZzZXQ7CisgICAgRlRERl9QZXJpb2QgdHNSeEFja0RlbGF5OworICAgIEZUREZfUGVyaW9kIHRzVHhBY2tEZWxheTsKKyAgICBGVERGX1BlcmlvZCB0c1J4V2FpdDsKKyAgICBGVERGX1BlcmlvZCB0c0Fja1dhaXQ7CisgICAgRlRERl9QZXJpb2QgdHNSeFR4OworICAgIEZUREZfUGVyaW9kIHRzTWF4QWNrOworICAgIEZUREZfUGVyaW9kIHRzTWF4VHM7CisgICAgRlRERl9QZXJpb2QgdHNUaW1lc2xvdExlbmd0aDsKK30gRlRERl9UaW1lc2xvdFRlbXBsYXRlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfU2l6ZSAgY291bnRlck9jdGV0czsKKyAgICBGVERGX0NvdW50IHJldHJ5Q291bnQ7CisgICAgRlRERl9Db3VudCBtdWx0aXBsZVJldHJ5Q291bnQ7CisgICAgRlRERl9Db3VudCBUWEZhaWxDb3VudDsKKyAgICBGVERGX0NvdW50IFRYU3VjY2Vzc0NvdW50OworICAgIEZUREZfQ291bnQgRkNTRXJyb3JDb3VudDsKKyAgICBGVERGX0NvdW50IHNlY3VyaXR5RmFpbHVyZUNvdW50OworICAgIEZUREZfQ291bnQgZHVwbGljYXRlRnJhbWVDb3VudDsKKyAgICBGVERGX0NvdW50IFJYU3VjY2Vzc0NvdW50OworICAgIEZUREZfQ291bnQgTkFDS0NvdW50OworICAgIEZUREZfQ291bnQgUnhFeHBpcmVkQ291bnQ7CisgICAgRlRERl9Db3VudCBCT0lycUNvdW50OworfSBGVERGX1BlcmZvcm1hbmNlTWV0cmljczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0NvdW50IHR4RGF0YUZybUNudDsKKyAgICBGVERGX0NvdW50IHR4Q21kRnJtQ250OworICAgIEZUREZfQ291bnQgdHhTdGRBY2tGcm1DbnQ7CisgICAgRlRERl9Db3VudCB0eEVuaEFja0ZybUNudDsKKyAgICBGVERGX0NvdW50IHR4QmVhY29uRnJtQ250OworICAgIEZUREZfQ291bnQgdHhNdWx0aVB1cnBGcm1DbnQ7CisgICAgRlRERl9Db3VudCByeERhdGFGcm1Pa0NudDsKKyAgICBGVERGX0NvdW50IHJ4Q21kRnJtT2tDbnQ7CisgICAgRlRERl9Db3VudCByeFN0ZEFja0ZybU9rQ250OworICAgIEZUREZfQ291bnQgcnhFbmhBY2tGcm1Pa0NudDsKKyAgICBGVERGX0NvdW50IHJ4QmVhY29uRnJtT2tDbnQ7CisgICAgRlRERl9Db3VudCByeE11bHRpUHVycEZybU9rQ250OworfSBGVERGX1RyYWZmaWNDb3VudGVyczsKKwordHlwZWRlZiB1aW50OF90IEZUREZfRW5lcmd5OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgQ29vcmRpbmF0b3IgYWRkcmVzcyBtb2RlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgIGNvb3JkQWRkck1vZGU7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgY29vcmRQQU5JZDsKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgY29vcmRBZGRyOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBudW1iZXIgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbE51bWJlcjsKKyAgICAvKiogXGJyaWVmIENoYW5ubmVsIHBhZ2UgKi8KKyAgICBGVERGX0NoYW5uZWxQYWdlICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQml0bWFwMTYgICAgICBzdXBlcmZyYW1lU3BlYzsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9Cb29sZWFuICAgICAgIEdUU1Blcm1pdDsKKyAgICAvKiogXGJyaWVmIExpbmsgcXVhbGl0eSAqLworICAgIEZUREZfTGlua1F1YWxpdHkgICBsaW5rUXVhbGl0eTsKKyAgICAvKiogXGJyaWVmICovCisgICAgRlRERl9UaW1lICAgICAgICAgIHRpbWVzdGFtcDsKK30gRlRERl9QQU5EZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgQ29vcmRpbmF0b3IgUEFOIElEICovCisgICAgRlRERl9QQU5JZCAgICAgICAgIGNvb3JkUEFOSWQ7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBzaG9ydCBhZGRyZXNzICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgIGNvb3JkU2hvcnRBZGRyOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBudW1iZXIgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbE51bWJlcjsKKyAgICAvKiogXGJyaWVmIERldmljZSBzaG9ydCBhZGRyZXNzICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgIHNob3J0QWRkcjsKKyAgICAvKiogXGJyaWVmIENoYW5ubmVsIHBhZ2UgKi8KKyAgICBGVERGX0NoYW5uZWxQYWdlICAgY2hhbm5lbFBhZ2U7Cit9IEZUREZfQ29vcmRSZWFsaWduRGVzY3JpcHRvcjsKKworLyoqCisgKiBcYnJpZWYgIEF1dG8gZnJhbWUgc291cmNlIGFkZHJlc3MgbW9kZQorICogXHJlbWFyayBWYWxpZCB2YWx1ZXM6CisgKiAtIEZUREZfQVVUT19OT05FOiBObyBhZGRyZXNzCisgKiAtIEZUREZfQVVUT19TSE9SVDogU2hvcnQgYWRkcmVzcworICogLSBGVERGX0FVVE9fRlVMTDogRXh0ZW5kZWQgYWRkcmVzcworICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9BdXRvU0E7CisjZGVmaW5lIEZUREZfQVVUT19OT05FICAxCisjZGVmaW5lIEZUREZfQVVUT19TSE9SVCAyCisjZGVmaW5lIEZUREZfQVVUT19GVUxMICAzCisKKy8qKgorICogXGJyaWVmICBUWCBQb3dlciB0b2xlcmFuY2UKKyAqIFxyZW1hcmsgVmFsaWQgdmFsdWVzOgorICogLSBGVERGX1BPV0VSX1RPTEVSQU5DRV8xX0RCCisgKiAtIEZUREZfUE9XRVJfVE9MRVJBTkNFXzNfREIKKyAqIC0gRlRERl9QT1dFUl9UT0xFUkFOQ0VfNl9EQgorICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9UWFBvd2VyVG9sZXJhbmNlOworI2RlZmluZSBGVERGX1BPV0VSX1RPTEVSQU5DRV8xX0RCIDEKKyNkZWZpbmUgRlRERl9QT1dFUl9UT0xFUkFOQ0VfM19EQiAyCisjZGVmaW5lIEZUREZfUE9XRVJfVE9MRVJBTkNFXzZfREIgMworCisvKioKKyAqIFxicmllZiAgQ0NBIG1vZGUKKyAqIFxyZW1hcmsgVmFsaWQgdmFsdWVzOgorICogLSBGVERGX0NDQV9NT0RFXzEKKyAqIC0gRlRERl9DQ0FfTU9ERV8yCisgKiAtIEZUREZfQ0NBX01PREVfMworICovCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9DQ0FNb2RlOworI2RlZmluZSBGVERGX0NDQV9NT0RFXzEgMQorI2RlZmluZSBGVERGX0NDQV9NT0RFXzIgMgorI2RlZmluZSBGVERGX0NDQV9NT0RFXzMgMworCisvKioKKyAqIFxicmllZiAgRnJhbWUgY29udHJvbCBvcHRpb25zCisgKiBccmVtYXJrIFN1cHBvcnRlZCBvcHRpb25zOgorICogLSBGVERGX1BBTl9JRF9QUkVTRU5UOiAgICBDb250cm9scyB0aGUgUEFOIElEIGNvbXByZXNzaW9uL3ByZXNlbnQgYml0IGluIG11bHRpcHVycG9zZSBhbmQgdmVyc2lvbiAyIGZyYW1lcyAKKyAqIC0gRlRERl9JRVNfSU5DTFVERUQ6ICAgICAgSW5kaWNhdGVzIHRoYXQgSUVzIG11c3QgYmUgaW5jbHVkZWQKKyAqIC0gRlRERl9TRVFfTlJfU1VQUFJFU1NFRDogQ29udHJvbHMgc3VwcHJlc3Npb24gb2YgdGhlIHNlcXVlbmNlIG51bWJlcgorICogXHJlbWFyayBNdWx0aXBsZSBvcHRpb25zIGNhbiBzcGVjaWZpZWQgYnkgYml0IHdpc2Ugb3ItaW5nIHRoZW0KKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfRnJhbWVDb250cm9sT3B0aW9uczsKKyNkZWZpbmUgRlRERl9QQU5fSURfUFJFU0VOVCAgICAweDAxCisjZGVmaW5lIEZUREZfSUVTX0lOQ0xVREVEICAgICAgMHgwMgorI2RlZmluZSBGVERGX1NFUV9OUl9TVVBQUkVTU0VEIDB4MDQKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0NoYW5uZWxQYWdlICAgIGNoYW5uZWxQYWdlOworICAgIEZUREZfU2l6ZSAgICAgICAgICAgbnJPZkNoYW5uZWxzOworICAgIEZUREZfQ2hhbm5lbE51bWJlciogY2hhbm5lbHM7Cit9IEZUREZfQ2hhbm5lbERlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgbnJPZkNoYW5uZWxEZXNjcmlwdG9yczsKKyAgICBGVERGX0NoYW5uZWxEZXNjcmlwdG9yKiBjaGFubmVsRGVzY3JpcHRvcnM7Cit9IEZUREZfQ2hhbm5lbERlc2NyaXB0b3JMaXN0OworCisvKioKKyAqIFxicmllZiBEYm0gZGF0YSB0eXBlCisgKi8KK3R5cGVkZWYgaW50OF90ICBGVERGX0RCbTsKKwordHlwZWRlZiB1aW50OF90IEZUREZfRnJhbWVUeXBlOworI2RlZmluZSBGVERGX0JFQUNPTl9GUkFNRSAgICAgICAgICAwCisjZGVmaW5lIEZUREZfREFUQV9GUkFNRSAgICAgICAgICAgIDEKKyNkZWZpbmUgRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUgMgorI2RlZmluZSBGVERGX01BQ19DT01NQU5EX0ZSQU1FICAgICAzCisjZGVmaW5lIEZUREZfTExETl9GUkFNRSAgICAgICAgICAgIDQKKyNkZWZpbmUgRlRERl9NVUxUSVBVUlBPU0VfRlJBTUUgICAgNQorCisvKioKKyAqIFxicmllZiAgQ29tbWFuZCBmcmFtZSBJRAorICogXHJlbWFyayBTdXBwb3J0ZWQgY29tbWFuZCBmcmFtZSBJRHM6CisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0FTU09DSUFUSU9OX1JFUVVFU1QKKyAqICAgICAgICAgLSBGVERGX0NPTU1BTkRfQVNTT0NJQVRJT05fUkVTUE9OU0UKKyAqICAgICAgICAgLSBGVERGX0NPTU1BTkRfRElTQVNTT0NJQVRJT05fTk9USUZJQ0FUSU9OCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX0RBVEFfUkVRVUVTVAorICogICAgICAgICAtIEZUREZfQ09NTUFORF9QQU5fSURfQ09ORkxJQ1RfTk9USUZJQ0FUSU9OCisgKiAgICAgICAgIC0gRlRERl9DT01NQU5EX09SUEhBTl9OT1RJRklDQVRJT04KKyAqICAgICAgICAgLSBGVERGX0NPTU1BTkRfQkVBQ09OX1JFUVVFU1QKKyAqICAgICAgICAgLSBGVERGX0NPTU1BTkRfQ09PUkRJTkFUT1JfUkVBTElHTk1FTlQKKyAqICAgICAgICAgLSBGVERGX0NPTU1BTkRfR1RTX1JFUVVFU1QKKyAqLwordHlwZWRlZiB1aW50OF90IEZUREZfQ29tbWFuZEZyYW1lSWQ7CisjZGVmaW5lIEZUREZfQ09NTUFORF9BU1NPQ0lBVElPTl9SRVFVRVNUICAgICAgICAgIDEKKyNkZWZpbmUgRlRERl9DT01NQU5EX0FTU09DSUFUSU9OX1JFU1BPTlNFICAgICAgICAgMgorI2RlZmluZSBGVERGX0NPTU1BTkRfRElTQVNTT0NJQVRJT05fTk9USUZJQ0FUSU9OICAzCisjZGVmaW5lIEZUREZfQ09NTUFORF9EQVRBX1JFUVVFU1QgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRlRERl9DT01NQU5EX1BBTl9JRF9DT05GTElDVF9OT1RJRklDQVRJT04gNQorI2RlZmluZSBGVERGX0NPTU1BTkRfT1JQSEFOX05PVElGSUNBVElPTiAgICAgICAgICA2CisjZGVmaW5lIEZUREZfQ09NTUFORF9CRUFDT05fUkVRVUVTVCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRlRERl9DT01NQU5EX0NPT1JESU5BVE9SX1JFQUxJR05NRU5UICAgICAgOAorI2RlZmluZSBGVERGX0NPTU1BTkRfR1RTX1JFUVVFU1QgICAgICAgICAgICAgICAgICA5CisKKy8qKgorICogXGJyaWVmIFNlY3VyaXR5IGZyYW1lIGNvdW50ZXIKKyAqIFxyZW1hcmsgVmFsaWQgcmFuZ2UgMC4uMHhmZmZmZmZmZiAoNCBvY3RldHMpIGlmIGZyYW1lIGNvdW50ZXIgbW9kZSBlcXVhbHMgNAorICogXHJlbWFyayBWYWxpZCByYW5nZSAwLi4weGZmZmZmZmZmZmYgKDUgb2N0ZXRzKSBpZiBmcmFtZSBjb3VudGVyIG1vZGUgZXF1YWxzIDUKKyAqLwordHlwZWRlZiB1aW50NjRfdCBGVERGX0ZyYW1lQ291bnRlcjsKKworLyoqCisgKiBcYnJpZWYgU2VjdXJpdHkgZnJhbWUgY291bnRlciBtb2RlCisgKiBccmVtYXJrIFZhbGlkIHJhbmdlIDQuLjUKKyAqLwordHlwZWRlZiB1aW50OF90ICBGVERGX0ZyYW1lQ291bnRlck1vZGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9LZXlJZE1vZGUgICBrZXlJZE1vZGU7CisgICAgRlRERl9PY3RldCAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICBGVERGX0tleUluZGV4ICAgIGtleUluZGV4OworICAgIEZUREZfQWRkcmVzc01vZGUgZGV2aWNlQWRkck1vZGU7CisgICAgRlRERl9QQU5JZCAgICAgICBkZXZpY2VQQU5JZDsKKyAgICBGVERGX0FkZHJlc3MgICAgIGRldmljZUFkZHJlc3M7Cit9IEZUREZfS2V5SWRMb29rdXBEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfUEFOSWQgICAgICAgIFBBTklkOworICAgIEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkcmVzczsKKyAgICBGVERGX0V4dEFkZHJlc3MgICBleHRBZGRyZXNzOworICAgIEZUREZfRnJhbWVDb3VudGVyIGZyYW1lQ291bnRlcjsKKyAgICBGVERGX0Jvb2xlYW4gICAgICBleGVtcHQ7Cit9IEZUREZfRGV2aWNlRGVzY3JpcHRvcjsKKworLyoqCisgKiBcYnJpZWYgIERldmljZSBkZXNjcmlwdG9yIGhhbmRsZQorICogXHJlbWFyayBUaGlzIGlzIHRoZSBpbmRleCBvZiBhIGRldmljZSBpbiBcbGluayBGVERGX0RldmljZVRhYmxlIFxlbmRsaW5rCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0RldmljZURlc2NyaXB0b3JIYW5kbGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBGcmFtZSB0eXBlICovCisgICAgRlRERl9GcmFtZVR5cGUgICAgICBmcmFtZVR5cGU7CisgICAgLyoqIFxicmllZiBDb21tYW5kIGZyYW1lIElEICovCisgICAgRlRERl9Db21tYW5kRnJhbWVJZCBjb21tYW5kRnJhbWVJZDsKK30gRlRERl9LZXlVc2FnZURlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgICAgICBuck9mS2V5SWRMb29rdXBEZXNjcmlwdG9yczsKKyAgICBGVERGX0tleUlkTG9va3VwRGVzY3JpcHRvciogIGtleUlkTG9va3VwRGVzY3JpcHRvcnM7CisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgICAgICBuck9mRGV2aWNlRGVzY3JpcHRvckhhbmRsZXM7CisgICAgRlRERl9EZXZpY2VEZXNjcmlwdG9ySGFuZGxlKiBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlczsKKyAgICBGVERGX1NpemUgICAgICAgICAgICAgICAgICAgIG5yT2ZLZXlVc2FnZURlc2NyaXB0b3JzOworICAgIEZUREZfS2V5VXNhZ2VEZXNjcmlwdG9yKiAgICAga2V5VXNhZ2VEZXNjcmlwdG9yczsKKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICAgICAgIGtleVsgMTYgXTsKK30gRlRERl9LZXlEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfRnJhbWVUeXBlICAgICAgZnJhbWVUeXBlOworICAgIEZUREZfQ29tbWFuZEZyYW1lSWQgY29tbWFuZEZyYW1lSWQ7CisgICAgRlRERl9TZWN1cml0eUxldmVsICBzZWN1cml0eU1pbmltdW07CisgICAgRlRERl9Cb29sZWFuICAgICAgICBkZXZpY2VPdmVycmlkZVNlY3VyaXR5TWluaW11bTsKKyAgICBGVERGX0JpdG1hcDggICAgICAgIGFsbG93ZWRTZWN1cml0eUxldmVsczsKK30gRlRERl9TZWN1cml0eUxldmVsRGVzY3JpcHRvcjsKKworLyoqCisgKiBcYnJpZWYgIEtleSB0YWJsZQorICogXHJlbWFyayBBcyBmb2xsb3dlcyBhbiBleGFtcGxlIGhvdyB0byBpbml0aWFsaXplIGEga2V5IHRhYmxlIGZvciB1c2FnZSB3aXRoIEZUREZfU0VUX1JFUVVFU1Q6CisgKiBcY29kZQorICogRlRERl9LZXlJZExvb2t1cERlc2NyaXB0b3IgIGxvb2t1cERlc2NyaXB0b3JzS2V5MVsgXSA9IAorICogICAgICAgICAgeyB7IDIsIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiB9LCA3LCAwLCAwIDAgfSwKKyAqICAgICAgICAgICAgeyAwLCB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgMCwgMiwgMHgxMjM0LCAweDAwMDEgfSB9OworICogRlRERl9LZXlJZExvb2t1cERlc2NyaXB0b3IgIGxvb2t1cERlc2NyaXB0b3JzS2V5MlsgXSA9IAorICogICAgICAgICAgeyB7IDEsIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCA1LCAwLCAwLCAwIH0gfTsKKyAqIEZUREZfRGV2aWNlRGVzY3JpcHRvckhhbmRsZSBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlc0tleTFbIF0gPSB7IDAsIDIgfTsKKyAqIEZUREZfRGV2aWNlRGVzY3JpcHRvckhhbmRsZSBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlc0tleTJbIF0gPSB7IDEgfTsKKyAqIEZUREZfS2V5VXNhZ2VEZXNjcmlwdG9yICAgICBrZXlVc2FnZURlc2NyaXB0b3JLZXkxWyBdID0geyB7IDEsIDAgfSwgeyAzLCA0IH0gfTsKKyAqIEZUREZfS2V5VXNhZ2VEZXNjcmlwdG9yICAgICBrZXlVc2FnZURlc2NyaXB0b3JLZXkyWyBdID0geyB7IDEsIDAgfSB9OworICogRlRERl9LZXlEZXNjcmlwdG9yICAgICAgICAgIGtleURlc2NyaXB0b3JzWyBdID0gCisgKiAgICAgICAgICB7IHsgc2l6ZW9mKCBsb29rdXBEZXNjcmlwdG9yc0tleTEgKSAvIHNpemVvZiggRlRERl9LZXlJZExvb2t1cERlc2NyaXB0b3IgKSwKKyAqICAgICAgICAgICAgICBsb29rdXBEZXNjcmlwdG9yc0tleTEsCisgKiAgICAgICAgICAgICAgc2l6ZW9mKCBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlc0tleTEgKSAvIHNpemVvZiggRlRERl9EZXZpY2VEZXNjcmlwdG9ySGFuZGxlICksCisgKiAgICAgICAgICAgICAgZGV2aWNlRGVzY3JpcHRvckhhbmRsZXNLZXkxLAorICogICAgICAgICAgICAgIHNpemVvZigga2V5VXNhZ2VEZXNjcmlwdG9yS2V5MSApIC8gc2l6ZW9mKCBGVERGX0tleVVzYWdlRGVzY3JpcHRvciApLAorICogICAgICAgICAgICAgIGtleVVzYWdlRGVzY3JpcHRvcktleTEsCisgKiAgICAgICAgICAgICAgeyAweDdlLCAweDM3LCAweDJkLCAweDQxLCAweGRmLCAweDc0LCAweDcyLCAweDNmLCAweDRjLCAweDNhLCAweGE3LCAweDUzLCAweGExLCAweDExLCAweDQ2LCAweDhiIH0gfSwKKyAqICAgICAgICAgICAgeyBzaXplb2YoIGxvb2t1cERlc2NyaXB0b3JzS2V5MiApIC8gc2l6ZW9mKCBGVERGX0tleUlkTG9va3VwRGVzY3JpcHRvciApLAorICogICAgICAgICAgICAgIGxvb2t1cERlc2NyaXB0b3JzS2V5MiwKKyAqICAgICAgICAgICAgICBzaXplb2YoIGRldmljZURlc2NyaXB0b3JIYW5kbGVzS2V5MiApIC8gc2l6ZW9mKCBGVERGX0RldmljZURlc2NyaXB0b3JIYW5kbGUgKSwKKyAqICAgICAgICAgICAgICBkZXZpY2VEZXNjcmlwdG9ySGFuZGxlc0tleTIsCisgKiAgICAgICAgICAgICAgc2l6ZW9mKCBrZXlVc2FnZURlc2NyaXB0b3JLZXkyICkgLyBzaXplb2YoIEZUREZfS2V5VXNhZ2VEZXNjcmlwdG9yICksCisgKiAgICAgICAgICAgICAga2V5VXNhZ2VEZXNjcmlwdG9yS2V5MSwKKyAqICAgICAgICAgICAgICB7IDB4ZGYsIDB4NzQsIDB4NzIsIDB4M2YsIDB4N2UsIDB4MzcsIDB4MmQsIDB4NDEsIDB4NGMsIDB4M2EsIDB4YTEsIDB4MTEsIDB4NDYsIDB4OCwgMHhhNywgMHg1M2IgfSB9IH07CisgKiBGVERGX0tleVRhYmxlICAgICAgICAgICAgICAga2V5VGFibGUgPQorICogICAgICAgICAgIHsgc2l6ZW9mKCBrZXlEZXNjcmlwdG9ycyApIC8gc2l6ZW9mKCBGVERGX0tleURlc2NyaXB0b3IgKSwga2V5RGVzY3JpcHRvcnMgfTsKKyAqIFxlbmRjb2RlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBOdW1iZXIgb2Yga2V5IGRlc2NyaXB0b3JzIGluIHRoZSBrZXkgdGFibGUgKi8KKyAgICBGVERGX1NpemUgICAgICAgICAgIG5yT2ZLZXlEZXNjcmlwdG9yczsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGtleSBkZXNjcmlwdG9yIGVudHJ5ICovCisgICAgRlRERl9LZXlEZXNjcmlwdG9yKiBrZXlEZXNjcmlwdG9yczsKK30gRlRERl9LZXlUYWJsZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBkZXZpY2UgZGVzY3JpcHRvcnMgaW4gdGhlIGtleSB0YWJsZSAqLworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgbnJPZkRldmljZURlc2NyaXB0b3JzOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgZmlyc3QgZGV2aWNlIGRlc2NyaXB0b3IgZW50cnkgKi8KKyAgICBGVERGX0RldmljZURlc2NyaXB0b3IqIGRldmljZURlc2NyaXB0b3JzOworfSBGVERGX0RldmljZVRhYmxlOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIHNlY3VyaXR5IGxldmVsIGRlc2NyaXB0b3JzIGluIHRoZSBrZXkgdGFibGUgKi8KKyAgICBGVERGX1NpemUgICAgICAgICAgICAgICAgICAgICBuck9mU2VjdXJpdHlMZXZlbERlc2NyaXB0b3JzOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byB0aGUgZmlyc3Qgc2VjdXJpdHkgbGV2ZWwgZGVzY3JpcHRvciBlbnRyeSAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbERlc2NyaXB0b3IqIHNlY3VyaXR5TGV2ZWxEZXNjcmlwdG9yczsKK30gRlRERl9TZWN1cml0eUxldmVsVGFibGU7CisKKy8qKgorICogXGJyaWVmICBJRSB0eXBlCisgKiBccmVtYXJrIFN1cHBvcnRlZCBJRSB0eXBlczoKKyAqICAgICAgICAgLSBGVERGX1NIT1JUX0lFCisgKiAgICAgICAgIC0gRlRERl9MT05HX0lFCisgKi8KK3R5cGVkZWYgdWludDhfdCBGVERGX0lFVHlwZTsKKyNkZWZpbmUgRlRERl9TSE9SVF9JRSAwCisjZGVmaW5lIEZUREZfTE9OR19JRSAgMQorCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9JRUlkOworCit0eXBlZGVmIHVpbnQ4X3QgRlRERl9JRUxlbmd0aDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIElFIHR5cGUgKi8KKyAgICBGVERGX0lFVHlwZSAgIHR5cGU7CisgICAgLyoqIFxicmllZiBTdWIgSUUgSUQqLworICAgIEZUREZfSUVJZCAgICAgc3ViSUQ7CisgICAgLyoqIFxicmllZiBTdWIgSUUgbGVuZ3RoICovCisgICAgRlRERl9JRUxlbmd0aCBsZW5ndGg7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHN1YiBJRSBjb250ZW50ICovCisgICAgRlRERl9PY3RldCogICBzdWJDb250ZW50OworfSBGVERGX1N1YklFRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE51bWJlciBvZiBzdWIgSUUgZGVzY3JpcHRvcnMgaW4gYW4gTUxNRSBwYXlsb2FkIElFIChJRCA9IDEpICovCisgICAgRlRERl9TaXplICAgICAgICAgICAgIG5yT2ZTdWJJRXM7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHRoZSBmaXJzdCBzdWIgSUUgZGVzY3JpcHRvciAqLworICAgIEZUREZfU3ViSUVEZXNjcmlwdG9yKiBzdWJJRXM7Cit9IEZUREZfU3ViSUVMaXN0OworCit0eXBlZGVmIHVuaW9uCit7CisgICAgLyoqIFxicmllZiBJRSBjb250ZW50IGlmIG5vdCBhIE1MTUUgcGF5bG9hZCBJRSAoSUQgPSAxKSAqLworICAgIEZUREZfT2N0ZXQqICAgICByYXc7CisgICAgLyoqIFxicmllZiBJRSBjb250ZW50IGlmIGEgTUxNRSBwYXlsb2FkIElFIChJRCA9IDEpICovCisgICAgRlRERl9TdWJJRUxpc3QqIG5lc3RlZDsKK30gRlRERl9JRUNvbnRlbnQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBJRSBJRCAqLworICAgIEZUREZfSUVJZCAgICAgIElEOworICAgIC8qKiBcYnJpZWYgQ29udGVudCBsZW5ndGggb2YgdGhlIElFLCB1bmRlZmluZWQvdW51c2VkIGluIGNhc2Ugb2YgYSBNTE1FIHBheWxvYWQgSUUgKElEID0gMSkgKi8KKyAgICBGVERGX0lFTGVuZ3RoICBsZW5ndGg7CisgICAgLyoqIFxicmllZiBDb250ZW50IG9mIHRoZSBJRSAqLworICAgIEZUREZfSUVDb250ZW50IGNvbnRlbnQ7Cit9IEZUREZfSUVEZXNjcmlwdG9yOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIElFIGRlc2NyaXB0b3JzICovCisgICAgRlRERl9TaXplICAgICAgICAgIG5yT2ZJRXM7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHRoZSBmaXJzdCBJRSBkZXNjcmlwdG9yICovCisgICAgRlRERl9JRURlc2NyaXB0b3IqIElFczsKK30gRlRERl9JRUxpc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEICovCisgICAgRlRERl9Nc2dJZCBtc2dJZDsKK30gRlRERl9Nc2dCdWZmZXI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9EQVRBX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTb3VyY2UgYWRkcmVzcyBtb2RlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgICAgICAgIHNyY0FkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgRGVzdGluYXRpb24gYWRkcmVzcyBtb2RlICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgICAgICAgIGRzdEFkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgRGVzdGluYXRpb24gUEFOIElEICovCisgICAgRlRERl9QQU5JZCAgICAgICAgICAgICAgIGRzdFBBTklkOworICAgIC8qKiBcYnJpZWYgRGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIEZUREZfQWRkcmVzcyAgICAgICAgICAgICBkc3RBZGRyOworICAgIC8qKiBcYnJpZWYgTGVuZ3RoIG9mIE1TRFUgcGF5bG9hZCAqLworICAgIEZUREZfRGF0YUxlbmd0aCAgICAgICAgICBtc2R1TGVuZ3RoOworICAgIC8qKgorICAgICAqIFxicmllZiBNU0RVIHBheWxvYWQgZGF0YSBidWZmZXIuIE11c3QgYmUgZnJlZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIEZUREZfUkVMX0RBVEFfQlVGRkVSCisgICAgICogICAgICAgIHdoZW4gaXQgcmVjZWl2ZXMgdGhlIEZUREZfREFUQV9DT05GSVJNIG1lc3NhZ2UKKyAgICAgKi8KKyAgICBGVERGX09jdGV0KiAgICAgICAgICAgICAgbXNkdTsKKyAgICAvKiogXGJyaWVmIEhhbmRsZSAqLworICAgIEZUREZfSGFuZGxlICAgICAgICAgICAgICBtc2R1SGFuZGxlOworICAgIC8qKiBcYnJpZWYgV2hldGhlciB0aGUgZGF0YSBmcmFtZSBuZWVkcyB0byBiZSBhY2tub3dsZWRnZWQgb3IgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICAgYWNrVFg7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgICBHVFNUWDsKKyAgICAvKiogCisgICAgICogXGJyaWVmIEluZGljYXRpb24gd2hldGhlciB0aGUgZnJhbWUgbXVzdCBiZSBzZW5kIGRpcmVjdGx5IG9yIGJlIHF1ZXVlZCB1bnRpbCBhIERBVEFfUkVRVUVTVCBDT01NQU5ECisgICAgICogICAgICAgIGZyYW1lIGlzIHJlY2VpdmVkCisgICAgICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgIGluZGlyZWN0VFg7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgICAgICBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgICAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICAgICAgICBrZXlJbmRleDsKKyAgICAvKiogXGJyaWVmIEZyYW1lIGNvbnRyb2wgb3B0aW9uIGJpdG1hcCAqLworICAgIEZUREZfRnJhbWVDb250cm9sT3B0aW9ucyBmcmFtZUNvbnRyb2xPcHRpb25zOworICAgIC8qKgorICAgICAqIFxicmllZiAgSGVhZGVyIElFIGxpc3QgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICogICAgICAgICBJZ25vcmVkIGlmIHRoZSBGVERGX0lFU19JTkNMVURFRCBmcmFtZSBjb250cm9sIG9wdGlvbiBpcyBOT1Qgc2V0LgorICAgICAqICAgICAgICAgVGhlIElFIGxpc3QgbXVzdCBiZSBsb2NhdGVkIGluIHJlbnRlbnRpb24gUkFNCisgICAgICovCisgICAgRlRERl9JRUxpc3QqICAgICAgICAgICAgIGhlYWRlcklFTGlzdDsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgIFBheWxvYWQgSUUgbGlzdCB0byBiZSBpbnNlcnRlZC4KKyAgICAgKiAgICAgICAgIElnbm9yZWQgaWYgdGhlIEZUREZfSUVTX0lOQ0xVREVEIGZyYW1lIGNvbnRyb2wgb3B0aW9uIGlzIE5PVCBzZXQuCisgICAgICogICAgICAgICBUaGUgSUUgbGlzdCBtdXN0IGJlIGxvY2F0ZWQgaW4gcmVudGVudGlvbiBSQU0KKyAgICAgKi8KKyAgICBGVERGX0lFTGlzdCogICAgICAgICAgICAgcGF5bG9hZElFTGlzdDsKKyAgICAvKiogSW5kaWNhdGlvbiB3aGV0aGVyIGEgREFUQSBvciBNVUxUSVBVUlBPU0UgZnJhbWUgbXVzdCBiZSBzZXQgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICAgc2VuZE11bHRpUHVycG9zZTsKKyAgICAvKiogXGJyaWVmIERPIE5PVCBVU0UgKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgX19wcml2YXRlMzsKK30gRlRERl9EYXRhUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0RBVEFfSU5ESUNBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFNvdXJjZSBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlICAgc3JjQWRkck1vZGU7CisgICAgLyoqIFxicmllZiBTb3VyY2UgUEFOIElEICovCisgICAgRlRERl9QQU5JZCAgICAgICAgIHNyY1BBTklkOworICAgIC8qKiBcYnJpZWYgU291cmNlIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgc3JjQWRkcjsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICBkc3RBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICBkc3RQQU5JZDsKKyAgICAvKiogXGJyaWVmIERlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgZHN0QWRkcjsKKyAgICAvKiogXGJyaWVmIExlbmd0aCBvZiBNU0RVIHBheWxvYWQgKi8KKyAgICBGVERGX0RhdGFMZW5ndGggICAgbXNkdUxlbmd0aDsKKyAgICAvKiogXGJyaWVmIE1TRFUgcGF5bG9hZCBkYXRhIGJ1ZmZlciBNdXN0IGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUiAqLworICAgIEZUREZfT2N0ZXQqICAgICAgICBtc2R1OworICAgIC8qKiBcYnJpZWYgTVBEVSBsaW5rIHF1YWxpdHkgKi8KKyAgICBGVERGX0xpbmtRdWFsaXR5ICAgbXBkdUxpbmtRdWFsaXR5OworICAgIC8qKiBcYnJpZWYgRGF0YSBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICBGVERGX1NOICAgICAgICAgICAgRFNOOworICAgIC8qKiBcYnJpZWYgVGltZXN0YW1wIG9mIHRoZSB0aW1lIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgKi8KKyAgICBGVERGX1RpbWUgICAgICAgICAgdGltZXN0YW1wOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAga2V5SW5kZXg7CisgICAgLyoqIC9icmllZiBQYXlsb2FkIElFIGxpc3Q8YnI+CisgICAgICogICAgICAgICBUaGUgd2hvbGUgcGF5bG9hZCBJRSBsaXN0IChpbmNsdWRpbmcgSUUgZGVzY3JpcHRvcnMsIFN1YiBJRSBkZXNjcmlwdG9ycyBhbmQgY29udGVudCkKKyAgICAgKiAgICAgICAgIGlzIGFsbG9jYXRlZCBpbiBvbmUgZGF0YSBidWZmZXIgdGhhdCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUgorICAgICAqICAgICAgICAgd2l0aCB0aGUgSUVMaXN0IHBvaW50ZXIgYXMgcGFyYW1ldGVyCisgICAgICovCisgICAgRlRERl9JRUxpc3QqICAgICAgIHBheWxvYWRJRUxpc3Q7Cit9IEZUREZfRGF0YUluZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9EQVRBX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIC9icmllZiBUaGUgaGFuZGxlIGdpdmVuIGJ5IHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgY29ycmVzcG9kaW5nIEZUREZfREFUQV9SRVFVRVNUICovCisgICAgRlRERl9IYW5kbGUgICAgICAgIG1zZHVIYW5kbGU7CisgICAgLyoqIC9icmllZiBUaW1lc3RtYXAgb2YgdGhlIHRpbWUgdGhlIGZyYW1lIGhhcyBiZWVuIHNlbnQgKi8KKyAgICBGVERGX1RpbWUgICAgICAgICAgdGltZXN0YW1wOworICAgIC8qKiAvYnJpZWYgU3RhdHVzIG9mIHRoZSBkYXRhIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyAgICAgICAgc3RhdHVzOworICAgIC8qKiAvYnJpZWYgTnVtYmVyIG9mIGJhY2tvZmZzLCB1bmRlZmluZWQgaW4gY2FzZSBzdGF0dXMgbm90IGVxdWFsIHRvIEZUREZfU1VDQ0VTUyBvciBUU0NIIGVuYWJsZWQgKi8KKyAgICBGVERGX051bU9mQmFja29mZnMgbnVtT2ZCYWNrb2ZmczsKKyAgICAvKiogL2JyaWVmIERhdGEgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBzZW50IGZyYW1lICovCisgICAgRlRERl9TTiAgICAgICAgICAgIERTTjsKKyAgICAvKiogL2JyaWVmIEFja25vd2xlZGdlbWVudCBwYXlsb2FkIElFIGxpc3Q8YnI+CisgICAgICogICAgICAgICBUaGUgd2hvbGUgcGF5bG9hZCBJRSBsaXN0IChpbmNsdWRpbmcgSUUgZGVzY3JpcHRvcnMsIFN1YiBJRSBkZXNjcmlwdG9ycyBhbmQgY29udGVudCkKKyAgICAgKiAgICAgICAgIGlzIGFsbG9jYXRlZCBpbiBvbmUgZGF0YSBidWZmZXIgdGhhdCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUgorICAgICAqICAgICAgICAgd2l0aCB0aGUgSUVMaXN0IHBvaW50ZXIgYXMgcGFyYW1ldGVyCisgICAgICovCisgICAgRlRERl9JRUxpc3QqICAgICAgIGFja1BheWxvYWQ7Cit9IEZUREZfRGF0YUNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9QVVJHRV9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBIYW5kbGUgdGhlIGRhdGEgcmVxdWVzdCB0byBiZSBwdXJnZWQgKi8KKyAgICBGVERGX0hhbmRsZSBtc2R1SGFuZGxlOworfSBGVERGX1B1cmdlUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1BVUkdFX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEhhbmRsZSBvZiB0aGUgcHVyZ2VkIGRhdGEgcmVxdWVzdCAqLworICAgIEZUREZfSGFuZGxlIG1zZHVIYW5kbGU7CisgICAgLyoqIC9icmllZiBTdGF0dXMgb2YgdGhlIHB1cmdlIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfUHVyZ2VDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfQVNTT0NJQVRFX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBudW1iZXIgdG8gYmUgdXNlZCBmb3IgdGhlIGFzc29jaWF0ZSByZXF1ZXN0LiBJZ25vcmVkIGluIFRTQ0ggbW9kZSAqLworICAgIEZUREZfQ2hhbm5lbE51bWJlciAgICAgY2hhbm5lbE51bWJlcjsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgcGFnZSB0byBiZSB1c2VkIGZvciB0aGUgYXNzb2NpYXRlIHJlcXVlc3QuIElnbm9yZWQgaW4gVFNDSCBtb2RlICovCisgICAgRlRERl9DaGFubmVsUGFnZSAgICAgICBjaGFubmVsUGFnZTsKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICAgICAgY29vcmRBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICAgICAgY29vcmRQQU5JZDsKKyAgICAvKiogXGJyaWVmIENvb3JkaW5hdG9yIGFkZHJlc3MgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgICAgIGNvb3JkQWRkcjsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgQ2FwYWJpbGxpdHkgaW5mb3JtYXRpb24gYml0bWFwLiBUaGUgZm9sbG93aW5nIGNhcGFiaWxpdGllcyBhcmUgZGVmaW5lZDo8YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9JU19GRkQ6IERldmljZSBpcyBhIGZ1bGwgZnVuY3Rpb24gZGV2aWNlPGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfQUNfUE9XRVI6IERldmljZSBoYXMgQUMgcG93ZXI8YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9SRUNFSVZFUl9PTl9XSEVOX0lETEU6IERldmljZSByZWNlaXZlciBpcyBvbiB3aGVuIGlkbGU8YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9GQVNUX0FTU09DSUFUSU9OOiBEZXZpY2Ugd2FudHMgYSBmYXN0IGFzc29jaWF0aW9uPGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfU1VQUE9SVFNfU0VDVVJJVFk6IERldmljZSBzdXBwb3J0cyBzZWN1cml0eTxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX1dBTlRTX1NIT1JUX0FERFJFU1M6IERldmljZSB3YW50cyBzaG9ydCBhZGRyZXNzPGJyPgorICAgICAqLworICAgIEZUREZfQml0bWFwOCAgICAgICAgICAgY2FwYWJpbGl0eUluZm9ybWF0aW9uOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgIGtleUluZGV4OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0NoYW5uZWxPZmZzZXQgICAgIGNoYW5uZWxPZmZzZXQ7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfSG9wcGluZ1NlcXVlbmNlSWQgaG9wcGluZ1NlcXVlbmNlSWQ7CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICBfX3ByaXZhdGUzOworfSBGVERGX0Fzc29jaWF0ZVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9BU1NPQ0lBVEVfSU5ESUNBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBFeHRlbmRlZCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdGhhdCBkaWQgdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgKi8KKyAgICBGVERGX0V4dEFkZHJlc3MgICAgICAgIGRldmljZUFkZHJlc3M7CisgICAgLyoqCisgICAgICogXGJyaWVmIENhcGFiaWxsaXR5IGluZm9ybWF0aW9uIGJpdG1hcC4gVGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXMgYXJlIGRlZmluZWQ6PGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfSVNfRkZEOiBEZXZpY2UgaXMgYSBmdWxsIGZ1bmN0aW9uIGRldmljZTxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX0FDX1BPV0VSOiBEZXZpY2UgaGFzIEFDIHBvd2VyPGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfUkVDRUlWRVJfT05fV0hFTl9JRExFOiBEZXZpY2UgcmVjZWl2ZXIgaXMgb24gd2hlbiBpZGxlPGJyPgorICAgICAqICAgICAgICBGVERGX0NBUEFCSUxJVFlfRkFTVF9BU1NPQ0lBVElPTjogRGV2aWNlIHdhbnRzIGEgZmFzdCBhc3NvY2lhdGlvbjxicj4KKyAgICAgKiAgICAgICAgRlRERl9DQVBBQklMSVRZX1NVUFBPUlRTX1NFQ1VSSVRZOiBEZXZpY2Ugc3VwcG9ydHMgc2VjdXJpdHk8YnI+CisgICAgICogICAgICAgIEZUREZfQ0FQQUJJTElUWV9XQU5UU19TSE9SVF9BRERSRVNTOiBEZXZpY2Ugd2FudHMgc2hvcnQgYWRkcmVzczxicj4KKyAgICAgKi8KKyAgICBGVERGX0JpdG1hcDggICAgICAgICAgIGNhcGFiaWxpdHlJbmZvcm1hdGlvbjsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICBrZXlJbmRleDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9DaGFubmVsT2Zmc2V0ICAgICBjaGFubmVsT2Zmc2V0OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0hvcHBpbmdTZXF1ZW5jZUlkIGhvcHBpbmdTZXF1ZW5jZUlkOworfSBGVERGX0Fzc29jaWF0ZUluZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9BU1NPQ0lBVEVfUkVTUE9OU0UgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRXh0ZW5kZWQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHRoYXQgZGlkIGFzc29jaWF0aW9uIHJlcXVlc3QgYW5kIHRvIHdoaWNoIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBzZW5kICovCisgICAgRlRERl9FeHRBZGRyZXNzICAgICAgICBkZXZpY2VBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgVGhlIHNob3J0IGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UgdGhhdCBkaWQgdGhlIGFzc29jaWF0ZSByZXF1ZXN0ICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgICAgICBhc3NvY1Nob3J0QWRkcmVzczsKKyAgICAvKiogXGJyaWVmIFRoZSBhc3NvY2lhdGlvbiBzdGF0dXMgb2YgdGhlIGFzc29jaWF0ZSByZXF1ZXN0ICovCisgICAgRlRERl9Bc3NvY2lhdGlvblN0YXR1cyBzdGF0dXM7CisgICAgLyoqIFxicmllZiBJbmRpY2F0aW9uIHdoZXRoZXIgdGhpcyBhIHJlc3BvbnNlIHRvIGZhc3Qgb3Igbm9ybWFsIGFzc29jaWF0aW9uIHJlcXVlc3QgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgIGZhc3RBOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgIGtleUluZGV4OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0NoYW5uZWxPZmZzZXQgICAgIGNoYW5uZWxPZmZzZXQ7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfTGVuZ3RoICAgICAgICAgICAgaG9wcGluZ1NlcXVlbmNlTGVuZ3RoOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX09jdGV0KiAgICAgICAgICAgIGhvcHBpbmdTZXF1ZW5jZTsKKyAgICAvKiogXGJyaWVmIERPIE5PVCBVU0UgKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgIF9fcHJpdmF0ZTM7Cit9IEZUREZfQXNzb2NpYXRlUmVzcG9uc2U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9BU1NPQ0lBVEVfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFRoZSBzaG9ydCBhZGRkcmVzcyBhc3NpZ25lZCBieSB0aGUgY29vcmRpbmF0b3IgKi8KKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgYXNzb2NTaG9ydEFkZHJlc3M7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIGFzc29jaWF0ZSByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgICAgICAgIHN0YXR1czsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICBrZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgIGtleUluZGV4OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0NoYW5uZWxPZmZzZXQgY2hhbm5lbE9mZnNldDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9MZW5ndGggICAgICAgIGhvcHBpbmdTZXF1ZW5jZUxlbmd0aDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9PY3RldCogICAgICAgIGhvcHBpbmdTZXF1ZW5jZTsKK30gRlRERl9Bc3NvY2lhdGVDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIERldmljZSBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlICAgICAgICBkZXZpY2VBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIERldmljZSBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgICAgICBkZXZpY2VQQU5JZDsKKyAgICAvKiogXGJyaWVmIERldmljZSBhZGRyZXNzICovCisgICAgRlRERl9BZGRyZXNzICAgICAgICAgICAgZGV2aWNlQWRkcmVzczsKKyAgICAvKiogXGJyaWVmIERpc2Fzc29jaWF0ZSByZWFzb24gKi8KKyAgICBGVERGX0Rpc2Fzc29jaWF0ZVJlYXNvbiBkaXNhc3NvY2lhdGVSZWFzb247CisgICAgLyoqCisgICAgICogXGJyaWVmIEluZGljYXRpb24gd2hldGhlciB0aGUgZGlzYXNzb2NpYXRlIHJlcXVlc3QgbXVzdCBiZSBzZW5kIGRpcmVjdGx5IG9yIGJlIHF1ZXVlZCB1bnRpbCBhCisgICAgICogICAgICAgIERBVEFfUkVRVUVTVCBjb21tYW5kIGZyYW1lIGlzIHJlY2VpdmVkCisgICAgICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgdHhJbmRpcmVjdDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsICAgICAgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgICAgICAga2V5SW5kZXg7CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgX19wcml2YXRlMzsKK30gRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfRElTQVNTT0NJQVRFX0lORElDQVRJT04gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEV4dGVuZGVkIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB0aGF0IGRpZCBkaXNhc3NvY2lhdGUgcmVxdWVzdCAqLworICAgIEZUREZfRXh0QWRkcmVzcyAgICAgICAgIGRldmljZUFkZHJlc3M7CisgICAgLyoqIFxicmllZiBEaXNhc3NvY2lhdGUgcmVhc29uICovCisgICAgRlRERl9EaXNhc3NvY2lhdGVSZWFzb24gZGlzYXNzb2NpYXRlUmVhc29uOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgICBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgICAgICBrZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgICBrZXlJbmRleDsKK30gRlRERl9EaXNhc3NvY2lhdGVJbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfRElTQVNTT0NJQVRFX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRGlzYXNzb2NpYXRlIHJlcXVlc3Qgc3RhdHVzICovCisgICAgRlRERl9TdGF0dXMgICAgICBzdGF0dXM7CisgICAgLyoqIFxicmllZiBBZGRyZXNzIG1vZGUgb2YgdGhlIGRldmljZSB0aGF0IHdhbnQvbXVzdCBkaXNhc3NvY2lhdGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlIGRldmljZUFkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgUEFOIElEIG9mIHRoZSBkZXZpY2UgdGhhdCB3YW50L211c3QgZGlzYXNzb2NpYXRlICovCisgICAgRlRERl9QQU5JZCAgICAgICBkZXZpY2VQQU5JZDsKKyAgICAvKiogXGJyaWVmIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB0aGF0IHdhbnQvbXVzdCBkaXNhc3NvY2lhdGUgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgIGRldmljZUFkZHJlc3M7Cit9IEZUREZfRGlzYXNzb2NpYXRlQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0JFQUNPTl9OT1RJRllfSU5EQ0FUSU9OICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiBzZXF1ZW5jZSBudW1iZXIsIHZhbGlkIG9ubHkgd2hlbiBiZWFjb24gdHlwZSBpcyBGVERGX05PUk1BTF9CRUFDT04gKi8KKyAgICBGVERGX1NOICAgICAgICAgICAgIEJTTjsKKyAgICAvKiogXGJyaWVmIFBBTiBkZXNjcmlwdG9yKi8KKyAgICBGVERGX1BBTkRlc2NyaXB0b3IqIFBBTkRlc2NyaXB0b3I7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQml0bWFwOCAgICAgICAgcGVuZEFkZHJTcGVjOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0FkZHJlc3MqICAgICAgIGFkZHJMaXN0OworICAgIC8qKiBcYnJpZWYgTGVuZ3RoIG9mIHRoZSBiZWFjb24gcGF5bG9hZCAqLworICAgIEZUREZfRGF0YUxlbmd0aCAgICAgc2R1TGVuZ3RoOworICAgIC8qKiBcYnJpZWYgQmVhY29uIHBheWxvYWQgKi8KKyAgICBGVERGX09jdGV0KiAgICAgICAgIHNkdTsKKyAgICAvKiogXGJyaWVmIEVuaGFuY2VkIGJlYWNvbiBzZXF1ZW5jZSBudW1iZXIsIHZhbGlkIG9ubHkgd2hlbiBiZWFjb24gdHlwZSBpcyBGVERGX0VOSEFOQ0VEX0JFQUNPTiAqLworICAgIEZUREZfU04gICAgICAgICAgICAgRUJTTjsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiB0eXBlICovCisgICAgRlRERl9CZWFjb25UeXBlICAgICBiZWFjb25UeXBlOworICAgIC8qKgorICAgICAqIFxicmllZiBQYXlsb2FkIElFIGxpc3Q8YnI+CisgICAgICogICAgICAgIFRoZSB3aG9sZSBQYXlsb2FkIElFIGxpc3QgKGluY2x1ZGluZyBJRSBkZXNjcmlwdG9ycywgU3ViIElFIGRlc2NyaXB0b3JzIGFuZCBjb250ZW50KQorICAgICAqICAgICAgICBpcyBhbGxvY2F0ZSBpbiBvbmUgZGF0YSBidWZmZXIgdGhhdCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUgorICAgICAqICAgICAgICB3aXRoIHRoZSBJRUxpc3QgcG9pbnRlciBhcyBwYXJhbWV0ZXIuCisgICAgICovCisgICAgRlRERl9JRUxpc3QqICAgICAgICBJRUxpc3Q7CisgICAgLyoqCisgICAgICogXGJyaWVmIFRpbWVzdGFtcCBvZiB0aGUgdGltZSB0aGUgYmVhY29uIGZyYW1lIHdhcyByZWNlaXZlZDxicj4KKyAgICAgKiAgICAgICAgSW4gVFNDSCBtb2RlIHRoaXMgdGltZXN0YW1wIHNob3VsZCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgVFNDSCB0aW1lc2xvdCBzdGFydCB0aW1lCisgICAgICogICAgICAgIHJlcXVpcmVkIGluIGEgRlRERl9UU0NIX01PREVfUkVRVUVTVCBtZXNzYWdlCisgICAgICovCisgICAgRlRERl9UaW1lNjQgICAgICAgICB0aW1lc3RhbXA7Cit9IEZUREZfQmVhY29uTm90aWZ5SW5kaWNhdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0NPTU1fU1RBVFVTX0lORElDQVRJT04gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBQQU4gSUQgb2YgdGhlIGZyYW1lIGNhdXNpbmcgdGhlIGVycm9yICovCisgICAgRlRERl9QQU5JZCAgICAgICAgIFBBTklkOworICAgIC8qKiBcYnJpZWYgU291cmNlIGFkZHJlc3MgbW9kZSBvZiB0aGUgZnJhbWUgY2F1c2luZyB0aGUgZXJyb3IgICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgIHNyY0FkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgU291cmNlIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGNhdXNpbmcgdGhlIGVycm9yICovCisgICAgRlRERl9BZGRyZXNzICAgICAgIHNyY0FkZHI7CisgICAgLyoqIFxicmllZiBEZXN0aW5hdGlvbiBhZGRyZXNzIG1vZGUgb2YgdGhlIGZyYW1lIGNhdXNpbmcgdGhlIGVycm9yICovCisgICAgRlRERl9BZGRyZXNzTW9kZSAgIGRzdEFkZHJNb2RlOworICAgIC8qKiBcYnJpZWYgRGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZnJhbWUgY2F1c2luZyB0aGUgZXJyb3IgKi8KKyAgICBGVERGX0FkZHJlc3MgICAgICAgZHN0QWRkcjsKKyAgICAvKiogXGJyaWVmIEVycm9yIHN0YXR1cyAqLworICAgIEZUREZfU3RhdHVzICAgICAgICBzdGF0dXM7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBrZXlJbmRleDsKK30gRlRERl9Db21tU3RhdHVzSW5kaWNhdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0dFVF9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgbXNnSWQ7CisgICAgRlRERl9QSUJBdHRyaWJ1dGUgUElCQXR0cmlidXRlOworfSBGVERGX0dldFJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9HRVRfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBnZXQgcmVxdWVzdCAqLworICAgIEZUREZfU3RhdHVzICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICAvKiogXGJyaWVmIFBJQiBhdHRyaWJ1dGUgSUQgb2YgUElCIGF0dHJpYnV0ZSBnb3R0ZW4gKi8KKyAgICBGVERGX1BJQkF0dHJpYnV0ZSAgICAgICAgICAgICBQSUJBdHRyaWJ1dGU7CisgICAgLyoqCisgICAgICogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIFBJQiBhdHRyaWJ1dGUgdmFsdWUgdG8gYmUgc2V0PGJyPgorICAgICAqICAgICAgICBFYWNoIFBJQiBhdHRyaWJ1dGUgaGFzIGl0cyBvd24gdHlwZSwgc2VlIFxsaW5rIEZUREZfUElCQXR0cmlidXRlIFxlbmRsaW5rPGJyPgorICAgICAqICAgICAgICBJbiBvcmRlciB0byBhY2Nlc3MgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0aGUgYXBwbGljYXRpb24gbXVzdCBjYXN0IHRoaXMgcGludGVyCisgICAgICogICAgICAgIHRvIHRoZSBjb3JyZWN0IHR5cGUuIAorICAgICAqLworICAgIGNvbnN0IEZUREZfUElCQXR0cmlidXRlVmFsdWUqIFBJQkF0dHJpYnV0ZVZhbHVlOworfSBGVERGX0dldENvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TRVRfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgUElCIGF0dHJpYnV0ZSBJRCBvZiBhdHRyaWJ1dGUgdG8gYmUgc2V0ICovCisgICAgRlRERl9QSUJBdHRyaWJ1dGUgICAgICAgICAgICAgUElCQXR0cmlidXRlOworICAgIC8qKgorICAgICAqIFxicmllZiBQb2ludGVyIHRvIHRoZSBQSUIgYXR0cmlidXRlIHZhbHVlIHRvIGJlIHNldDxicj4KKyAgICAgKiAgICAgICAgRWFjaCBQSUIgYXR0cmlidXRlIGhhcyBpdHMgb3duIHR5cGUsIHNlZSBcbGluayBGVERGX1BJQkF0dHJpYnV0ZSBcZW5kbGluazxicj4KKyAgICAgKiAgICAgICAgRlRERiBkb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBQSUIgYXR0cmlidXRlLiBTbyBpZiB0aGUgUElCIGF0dHJpYnV0ZSBjb250YWlucyBwb2ludGVycyB0bworICAgICAqICAgICAgICBvdGhlciBkYXRhIHRoaXMgZGF0YSBpcyBOT1QgY29waWVkIGJ5IEZUREYuIFRoZSBhcHBsaWNhdGlvbiBtdXN0IG1ha2Ugc3VyZSB0aGF0IGRhdGEgcmVmZXJyZWQKKyAgICAgKiAgICAgICAgZnJvbSBhIFBJQiBhdHRyaWJ1dGUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgaW4gcmV0ZW50aW9uIFJBTS4KKyAgICAgKi8KKyAgICBjb25zdCBGVERGX1BJQkF0dHJpYnV0ZVZhbHVlKiBQSUJBdHRyaWJ1dGVWYWx1ZTsKK30gRlRERl9TZXRSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfR0VUX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFNldCByZXF1ZXN0IHN0YXR1cyAqLworICAgIEZUREZfU3RhdHVzICAgICAgIHN0YXR1czsKKyAgICAvKiogXGJyaWVmIFBJQiBBdHRyaWJ1dGUgSUQgb2YgUElCIGF0dHJpYnV0ZSB0aGF0IGhhcyBiZWVuIHNldCAqLworICAgIEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZTsKK30gRlRERl9TZXRDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfTXNnSWQgICAgICAgICAgICAgbXNnSWQ7CisgICAgRlRERl9HVFNDaGFyYXRlcmlzdGljcyBHVFNDaGFyYXRlcmlzdGljczsKKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgIHNlY3VyaXR5TGV2ZWw7CisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICBrZXlJZE1vZGU7CisgICAgRlRERl9PY3RldCAgICAgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgIGtleUluZGV4OworfSBGVERGX0d0c1JlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICBtc2dJZDsKKyAgICBGVERGX0dUU0NoYXJhdGVyaXN0aWNzIEdUU0NoYXJhdGVyaXN0aWNzOworICAgIEZUREZfU3RhdHVzICAgICAgICAgICAgc3RhdHVzOworfSBGVERGX0d0c0NvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICBtc2dJZDsKKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgICAgIGRldmljZUFkZHJlc3M7CisgICAgRlRERl9HVFNDaGFyYXRlcmlzdGljcyBHVFNDaGFyYXRlcmlzdGljczsKKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgICAgIHNlY3VyaXR5TGV2ZWw7CisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICBrZXlJZE1vZGU7CisgICAgRlRERl9PY3RldCAgICAgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICBGVERGX0tleUluZGV4ICAgICAgICAgIGtleUluZGV4OworfSBGVERGX0d0c0luZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9PUlBIQU5fSU5ESUNBVElPTiAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEV4dGVuZGVkIGFkZHJlc3Mgb2Ygb3JwaGFuZWQgZGV2aWNlICovCisgICAgRlRERl9FeHRBZGRyZXNzICAgIG9ycGhhbkFkZHJlc3M7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBrZXlJbmRleDsKK30gRlRERl9PcnBoYW5JbmRpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfT1JQSEFOX1JFU1BPTlNFICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRXh0ZW5kZWQgYWRkcmVzcyBvZiBvcnBoYW5lZCBkZXZpY2UgKi8KKyAgICBGVERGX0V4dEFkZHJlc3MgICAgb3JwaGFuQWRkcmVzczsKKyAgICAvKiogXGJyaWVmIFNob3J0IGFkZHJlc3Mgb2Ygb3JwaGFuZWQgZGV2aWNlICovCisgICAgRlRERl9TaG9ydEFkZHJlc3MgIHNob3J0QWRkcmVzczsKKyAgICAvKiogXGJyaWVmIEluZGljYXRpb24gd2hldGhlciB0aGUgZGV2aWNlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvb3JkaW5hdG9yIG9yIG5vdCAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICBhc3NvY2lhdGVkTWVtYmVyOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBJRCBtb2RlICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGtleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBzb3VyY2UgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAga2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgaW5kZXggKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAga2V5SW5kZXg7Cit9IEZUREZfT3JwaGFuUmVzcG9uc2U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9SRVNFVF9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgSW5kaWNhdGlvbmUgd2hldGhlciB0aGUgUElCIGF0dHJpYnV0ZXMgbXVzdCBiZSByZXNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlcyBvciBub3QgKi8KKyAgICBGVERGX0Jvb2xlYW4gc2V0RGVmYXVsdFBJQjsKK30gRlRERl9SZXNldFJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9SRVNFVF9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIHJlc2V0IHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfUmVzZXRDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfUlhfRU5BQkxFX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQm9vbGVhbiBkZWZlclBlcm1pdDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9UaW1lICAgIHJ4T25UaW1lOworICAgIC8qKiBcYnJpZWYgVGhlIHRpbWUgaW4gYUJhc2VTdXBlckZyYW1lUGVyaW9kJ3MgKDk2MCBzeW1ib2xzKSB0aGF0IHRoZSByZWNlaXZlciB3aWxsIGJlIG9uICovCisgICAgRlRERl9UaW1lICAgIHJ4T25EdXJhdGlvbjsKK30gRlRERl9SeEVuYWJsZVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9SWF9FTkFCTEVfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBSWCBlbmFibGUgcmVxdWVzdCAqLworICAgIEZUREZfU3RhdHVzIHN0YXR1czsKK30gRlRERl9SeEVuYWJsZUNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TQ0FOX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTY2FuIFR5cGUgKi8KKyAgICBGVERGX1NjYW5UeXBlICAgICAgc2NhblR5cGU7CisgICAgLyoqIFxicmllZiBCaXRtYXAgb2YgdGhlIGNoYW5uZWxzIHRvIGJlIHNjYW5uZWQgIChvbmx5IGNoYW5uZWwgMTEgLSAyNyBhcmUgc3VwcG9ydGVkICkgKi8KKyAgICBGVERGX0JpdG1hcDMyICAgICAgc2NhbkNoYW5uZWxzOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBwYWdlIG9mIHRoZSBjaGFubmVscyB0byBiZSBzY2FubmVkIChvbmx5IHBhZ2UgMCBpcyBzdXBwb3J0ZWQgKSAqLworICAgIEZUREZfQ2hhbm5lbFBhZ2UgICBjaGFubmVsUGFnZTsKKyAgICAvKiogXGJyaWVmIFNjYW4gZHVyYXRpb24gcGVyIGNoYW5uZWwsIGR1cmF0aW9uID0gKCAoIHNjYW5EdXJhdGlvbiBeIDIgKSAtIDEgKSAqIGFCYXNlU3VwZXJGcmFtZVBlcmlvZCBzeW1ib2xzICovCisgICAgRlRERl9TY2FuRHVyYXRpb24gIHNjYW5EdXJhdGlvbjsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsIHNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICBrZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGtleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgIGtleUluZGV4OworfSBGVERGX1NjYW5SZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU0NBTl9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgICAgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFN0YXR1cyBvZiB0aGUgc2NhbiByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgICAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgLyoqIFxicmllZiBTY2FuIFR5cGUgKi8KKyAgICBGVERGX1NjYW5UeXBlICAgICAgICAgICAgICAgIHNjYW5UeXBlOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBwYWdlIG9mIHRoZSBzY2FubmVkIGNoYW5uZWxzICovCisgICAgRlRERl9DaGFubmVsUGFnZSAgICAgICAgICAgICBjaGFubmVsUGFnZTsKKyAgICAvKiogXGJyaWVmIEJpdG1hcCBvZiB0aGUgY2hhbm5lbHMgbm90IHNjYW5uZWQgYnV0IHdlcmUgcmVxdWVzdGVkIHRvIGJlIHNjYW5uZWQgKi8KKyAgICBGVERGX0JpdG1hcDMyICAgICAgICAgICAgICAgIHVuc2Nhbm5lZENoYW5uZWxzOworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIGVudHJpZXMgaW4gZW5lcmd5RGV0ZWN0TGlzdCBvciBQQU5EZXNjcmlwdG9yTGlzdCAqLworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgICAgICAgcmVzdWx0TGlzdFNpemU7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIHRoZSBmaXJzdCBlbmVyZ3kgZGV0ZWN0IHJlc3VsdCAqLworICAgIEZUREZfRW5lcmd5KiAgICAgICAgICAgICAgICAgZW5lcmd5RGV0ZWN0TGlzdDsKKyAgICAvKiogXGJyaWVmIFBvaW50ZXIgdG8gdGhlIGZpcnN0IFBBTiBkZXNjcmlwdG9yICovCisgICAgRlRERl9QQU5EZXNjcmlwdG9yKiAgICAgICAgICBQQU5EZXNjcmlwdG9yTGlzdDsKKyAgICAvKiogXGJyaWVmICovCisgICAgRlRERl9Db29yZFJlYWxpZ25EZXNjcmlwdG9yKiBjb29yZFJlYWxpZ25EZXNjcmlwdG9yOworfSBGVERGX1NjYW5Db25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfU1RBUlRfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFBBTiBJRCB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgY29vcmRpbmF0b3IgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgUEFOSWQ7CisgICAgLyoqIFxicmllZiBDaGFubmVsIG51bWJlciB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgY29vcmRpbmF0b3IgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbE51bWJlcjsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgcGFnZSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgY29vcmRpbmF0b3IgKi8KKyAgICBGVERGX0NoYW5uZWxQYWdlICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfVGltZSAgICAgICAgICBzdGFydFRpbWU7CisgICAgLyoqIFxicmllZiBCZWFjb24gb3JkZXIsIG9ubHkgYmVhY29uIG9yZGVyIDE1IChiZWFjb25sZXNzKSBpcyBzdXBwb3J0ZWQgICovCisgICAgRlRERl9PcmRlciAgICAgICAgIGJlYWNvbk9yZGVyOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX09yZGVyICAgICAgICAgc3VwZXJmcmFtZU9yZGVyOworICAgIC8qKiBcYnJpZWYgSW5kaWNhdGlvbiB3aGV0aGVyIHRoZSBkZXZpY2UgbXVzdCBiZSBhIGNvb3JkaW5hdG9yIG9yIGEgUEFOIGNvb3JkaW5hdG9yICovCisgICAgRlRERl9Cb29sZWFuICAgICAgIFBBTkNvb3JkaW5hdG9yOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgYmF0dGVyeUxpZmVFeHRlbnNpb247CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfQm9vbGVhbiAgICAgICBjb29yZFJlYWxpZ25tZW50OworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX1NlY3VyaXR5TGV2ZWwgY29vcmRSZWFsaWduU2VjdXJpdHlMZXZlbDsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9LZXlJZE1vZGUgICAgIGNvb3JkUmVhbGlnbktleUlkTW9kZTsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGNvb3JkUmVhbGlnbktleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0tleUluZGV4ICAgICAgY29vcmRSZWFsaWduS2V5SW5kZXg7CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBiZWFjb25TZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAgYmVhY29uS2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgTk9UIFVTRUQgKi8KKyAgICBGVERGX09jdGV0ICAgICAgICAgYmVhY29uS2V5U291cmNlWyA4IF07CisgICAgLyoqIFxicmllZiBOT1QgVVNFRCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBiZWFjb25LZXlJbmRleDsKK30gRlRERl9TdGFydFJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TVEFSVF9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIHN0YXJ0IHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfU3RhcnRDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfTXNnSWQgICAgICAgICBtc2dJZDsKKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5uZWxOdW1iZXI7CisgICAgRlRERl9DaGFubmVsUGFnZSAgIGNoYW5uZWxQYWdlOworICAgIEZUREZfQm9vbGVhbiAgICAgICB0cmFja2JlYWNvbjsKK30gRlRERl9TeW5jUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1NZTkNfTE9TU19JTkRJQ0FUSU9OICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgTG9zcyBSZWFzb24gKi8KKyAgICBGVERGX0xvc3NSZWFzb24gICAgbG9zc1JlYXNvbjsKKyAgICAvKiogXGJyaWVmIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICBQQU5JZDsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgbnVtYmVyICovCisgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWxOdW1iZXI7CisgICAgLyoqIFxicmllZiBDaGFubmVsIHBhZ2UgKi8KKyAgICBGVERGX0NoYW5uZWxQYWdlICAgY2hhbm5lbFBhZ2U7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBrZXlJbmRleDsKK30gRlRERl9TeW5jTG9zc0luZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9QT0xMX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBDb29yZGluYXRvciBhZGRyZXNzIG1vZGUgKi8KKyAgICBGVERGX0FkZHJlc3NNb2RlICAgY29vcmRBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIGNvb3JkaW5hdG9yIFBBTiBJRCAqLworICAgIEZUREZfUEFOSWQgICAgICAgICBjb29yZFBBTklkOworICAgIC8qKiBcYnJpZWYgQ29vcmRpbmF0b3IgYWRkcmVzcyAqLworICAgIEZUREZfQWRkcmVzcyAgICAgICBjb29yZEFkZHI7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBsZXZlbCAqLworICAgIEZUREZfU2VjdXJpdHlMZXZlbCBzZWN1cml0eUxldmVsOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IElEIG1vZGUgKi8KKyAgICBGVERGX0tleUlkTW9kZSAgICAga2V5SWRNb2RlOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IHNvdXJjZSAqLworICAgIEZUREZfT2N0ZXQgICAgICAgICBrZXlTb3VyY2VbIDggXTsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGtleSBpbmRleCAqLworICAgIEZUREZfS2V5SW5kZXggICAgICBrZXlJbmRleDsKK30gRlRERl9Qb2xsUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1BPTExfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBwb2xsIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfUG9sbENvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TRVRfU0xPVEZSQU1FX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTbG90ZnJhbWUgaGFuZGxlICovCisgICAgRlRERl9IYW5kbGUgICAgICAgIGhhbmRsZTsKKyAgICAvKiogXGJyaWVmIFNldCBvcGVyYXRpb24gKi8KKyAgICBGVERGX09wZXJhdGlvbiAgICAgb3BlcmF0aW9uOworICAgIC8qKiBcYnJpZWYgTnVtYmVyIG9mIHRpbWVzbG90cyBpbiB0aGlzIHNsb3RmcmFtZSAqLworICAgIEZUREZfU2xvdGZyYW1lU2l6ZSBzaXplOworfSBGVERGX1NldFNsb3RmcmFtZVJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TRVRfU0xPVEZSQU1FX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIFNsb3RmcmFtZSBoYW5kbGUgKi8KKyAgICBGVERGX0hhbmRsZSBoYW5kbGU7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIHNldCBzbG95dGZyYW1lIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfU2V0U2xvdGZyYW1lQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1NFVF9MSU5LX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTZXQgb3BlcmF0aW9uICovCisgICAgRlRERl9PcGVyYXRpb24gICAgIG9wZXJhdGlvbjsKKyAgICAvKiogXGJyaWVmIEhhbmRsZSBvZiB0aGlzIGxpbmssIHVzZWQgZm9yIGRlbGV0ZSBhbmQgbW9kaWZ5IG9wZXJhdGlvbnMgKi8KKyAgICBGVERGX0hhbmRsZSAgICAgICAgbGlua0hhbmRsZTsKKyAgICAvKiogXGJyaWVmIEhhbmRsZSBvZiB0aGUgc2xvdGZyYW1lIG9mIHRoaXMgbGluayAqLworICAgIEZUREZfSGFuZGxlICAgICAgICBzbG90ZnJhbWVIYW5kbGU7CisgICAgLyoqIFxicmllZiBUaW1lc2xvdCBpbiB0aGUgc2xvdGZyYW1lICovCisgICAgRlRERl9UaW1lc2xvdCAgICAgIHRpbWVzbG90OworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBvZmZzZXQgKi8KKyAgICBGVERGX0NoYW5uZWxPZmZzZXQgY2hhbm5lbE9mZnNldDsKKyAgICAvKioKKyAgICAgKiBcYnJpZWYgQml0IG1hcHBlZCBsaW5rIG9wdGlvbnMsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOjxicj4KKyAgICAgKiAgICAgICAgRlRERl9MSU5LX09QVElPTl9UUkFOU01JVDogTGlrIGNhbiBiZSB1c2VkIGZvciB0cmFuc21pdHRpbmc8YnI+CisgICAgICogICAgICAgIEZUREZfTElOS19PUFRJT05fUkVDRUlWRTogTGluayBjYW4gYmUgdXNlZCBmb3IgcmVjZWl2aW5nPGJyPgorICAgICAqICAgICAgICBGVERGX0xJTktfT1BUSU9OX1NIQVJFRDogU2hhcmVkIGxpbmssIG11bHRpcGxlIGRldmljZSBjYW4gdHJhbnNtaXQgaW4gdGhpcyBsaW5rPGJyPgorICAgICAqICAgICAgICBGVERGX0xJTktfT1BUSU9OX1RJTUVfS0VFUElORzogTGluayB3aWxsIGJlIHVzZWQgdG8gc3luY2hyb25pc2UgdGltZXNsb3RzPGJyPgorICAgICAqICAgICAgICBNdWx0aXBsZSBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGJ5IG9yLWluZyB0aGVtLgorICAgICAqLworICAgIEZUREZfQml0bWFwOCAgICAgICBsaW5rT3B0aW9uczsKKyAgICAvKiogXGJyaWVmIExpbmsgdHlwZSAqLworICAgIEZUREZfTGlua1R5cGUgICAgICBsaW5rVHlwZTsKKyAgICAvKiogXGJyaWVmIFNob3J0IGFkZHJlc3Mgb2YgdGhlIHBlZXIgbm9kZSwgb25seSB2YWxpZCBpZiBpcyBhIHRyYW5zbWl0IGxpbmsgKi8KKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgbm9kZUFkZHJlc3M7Cit9IEZUREZfU2V0TGlua1JlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TRVRfTElOS19DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIHNldCBsaW5rIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7CisgICAgLyoqIFxicmllZiBMaW5rIGhhbmRsZSAqLworICAgIEZUREZfSGFuZGxlIGxpbmtIYW5kbGU7CisgICAgLyoqIFxicmllZiBTbG90ZnJhbWUgaGFuZGxlICovCisgICAgRlRERl9IYW5kbGUgc2xvdGZyYW1lSGFuZGxlOworfSBGVERGX1NldExpbmtDb25maXJtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfVFNDSF9NT0RFX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgVGhlIG5ldyBUU0NIIG1vZGUgKi8KKyAgICBGVERGX1RTQ0hNb2RlIHRzY2hNb2RlOworICAgIC8qKgorICAgICAqIFxicmllZiBUaGUgdGltZXN0YW1wIGluIHN5bWJvbHMgb2YgdGhlIHN0YXJ0IG9mIHRoZSB0aW1lc2xvdCB3aXRoIEFTTiBlcXVhbCB0byB0aGUgUElCIGF0dHJpYnV0ZQorICAgICAqICAgICAgICBGVERGX1BJQl9BU048YnI+CisgICAgICogICAgICAgIFRoZSB0aW1lc3RhbXAgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgdGltZXN0YW1wIG9mIHRoZSBCRUFDT05fTk9USUZZX0lORElDQVRJT04gbWVzc2FnZTxicj4KKyAgICAgKiAgICAgICAgQmVmb3JlIHNlbmRpbmcgdGhlIEZUREZfVFNDSF9NT0RFX1JFUVVFU1QgbWVzc2FnZSB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHNldCBGVERGX1BJQl9BU04gd2l0aAorICAgICAqICAgICAgICB0aGUgQVNOIG9mIHRoZSBUU0NIIHN5bmNocm9uaXphdGlvbiBJRSBvZiB0aGUgSUVMaXN0IG9mIHRoZSBCRUFDT05fTk9USUZZX0lORElDQVRJT04gbWVzc2FnZQorICAgICAqLworICAgIEZUREZfVGltZSAgICAgdGltZXNsb3RTdGFydFRpbWU7Cit9IEZUREZfVHNjaE1vZGVSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBcYnJpZWYgTWVzc2FnZSBJRCA9IEZUREZfVFNDSF9NT0RFX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgVGhlIG5ldyBUU0NIIG1vZGUgKi8KKyAgICBGVERGX1RTQ0hNb2RlIHRzY2hNb2RlOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBUU0NIIG1vZGUgcmVxdWVzdCAqLworICAgIEZUREZfU3RhdHVzICAgc3RhdHVzOworfSBGVERGX1RzY2hNb2RlQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0tFRVBfQUxJVkVfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU2hvcnQgYWRkcmVzcyB0byB3aGljaCBrZWVwIGFsaXZlIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbmQgKi8KKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgICBkc3RBZGRyZXNzOworICAgIC8qKiBcYnJpZWYgKi8KKyAgICBGVERGX0tlZXBBbGl2ZVBlcmlvZCBrZWVwQWxpdmVQZXJpb2Q7Cit9IEZUREZfS2VlcEFsaXZlUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0tFRVBfQUxJVkVfQ09ORklSTSAqLworICAgIEZUREZfTXNnSWQgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgU3RhdHVzIG9mIHRoZSBrZWVwIGFsaXZlIHJlcXVlc3QgKi8KKyAgICBGVERGX1N0YXR1cyBzdGF0dXM7Cit9IEZUREZfS2VlcEFsaXZlQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0JFQUNPTl9SRVFVRVNUICovCisgICAgRlRERl9Nc2dJZCAgICAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgQmVhY29uIHR5cGUgKi8KKyAgICBGVERGX0JlYWNvblR5cGUgICAgYmVhY29uVHlwZTsKKyAgICAvKiogXGJyaWVmIENoYW5uZWwgbnVtYmVyIGF0IHdoaWNoIHRoZSBiZWFjb24gbXVzdCBiZSBzZW50LCBpZ25vcmVkIGluIFRTQ0ggbW9kZSAqLworICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBwYWdlLCBpZ25vcmVkIGluIFRTQ0ggbW9kZSAqLworICAgIEZUREZfQ2hhbm5lbFBhZ2UgICBjaGFubmVsUGFnZTsKKyAgICAvKiogXGJyaWVmIE5PVCBVU0VEICovCisgICAgRlRERl9PcmRlciAgICAgICAgIHN1cGVyZnJhbWVPcmRlcjsKKyAgICAvKiogXGJyaWVmIFNlY3VyaXR5IGxldmVsICovCisgICAgRlRERl9TZWN1cml0eUxldmVsIGJlYWNvblNlY3VyaXR5TGV2ZWw7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgSUQgbW9kZSAqLworICAgIEZUREZfS2V5SWRNb2RlICAgICBiZWFjb25LZXlJZE1vZGU7CisgICAgLyoqIFxicmllZiBTZWN1cml0eSBrZXkgc291cmNlICovCisgICAgRlRERl9PY3RldCAgICAgICAgIGJlYWNvbktleVNvdXJjZVsgOCBdOworICAgIC8qKiBcYnJpZWYgU2VjdXJpdHkga2V5IGluZGV4ICovCisgICAgRlRERl9LZXlJbmRleCAgICAgIGJlYWNvbktleUluZGV4OworICAgIC8qKiBcYnJpZWYgQmVhY29uIGRlc3RpbmF0aW9uIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgICBkc3RBZGRyTW9kZTsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisgICAgRlRERl9BZGRyZXNzICAgICAgIGRzdEFkZHI7CisgICAgLyoqIFxicmllZiBJbmRpY2F0aW9uIHdoZXRoZXIgdGhlIEJTTiAob3IgRUJTTikgaW4gdGhlIGJlYWNvbiBmcmFtZSBtdXN0IHN1cHByZXNzZWQgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgQlNOU3VwcHJlc3Npb247CisgICAgLyoqIFxicmllZiBETyBOT1QgVVNFICovCisgICAgdWludDhfdCAgICAgICAgICAgIF9fcHJpdmF0ZTM7Cit9IEZUREZfQmVhY29uUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0JFQUNPTl9DT05GSVJNICovCisgICAgRlRERl9Nc2dJZCAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBTdGF0dXMgb2YgdGhlIGJlYWNvbiByZXF1ZXN0ICovCisgICAgRlRERl9TdGF0dXMgc3RhdHVzOworfSBGVERGX0JlYWNvbkNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9CRUFDT05fUkVRVUVTVF9JTkRJQ0FUSU9OICovCisgICAgRlRERl9Nc2dJZCAgICAgICBtc2dJZDsKKyAgICAvKiogXGJyaWVmIEJlYWNvbiB0eXBlICovCisgICAgRlRERl9CZWFjb25UeXBlICBiZWFjb25UeXBlOworICAgIC8qKiBcYnJpZWYgU291cmNlIGFkZHJlc3MgbW9kZSAqLworICAgIEZUREZfQWRkcmVzc01vZGUgc3JjQWRkck1vZGU7CisgICAgLyoqIFxicmllZiBTb3VyY2UgYWRkcmVzcyAqLworICAgIEZUREZfQWRkcmVzcyAgICAgc3JjQWRkcjsKKyAgICAvKiogXGJyaWVmIFNvdXJjZSBQQU4gSUQgKi8KKyAgICBGVERGX1BBTklkICAgICAgIGRzdFBBTklkOworICAgIC8qKgorICAgICAqIFxicmllZiBQYXlsb2FkIElFIGxpc3Q8YnI+CisgICAgICogICAgICAgIFRoZSB3aG9sZSBQYXlsb2FkIElFIGxpc3QgKGluY2x1ZGluZyBJRSBkZXNjcmlwdG9ycywgU3ViIElFIGRlc2NyaXB0b3JzIGFuZCBjb250ZW50KQorICAgICAqICAgICAgICBpcyBhbGxvY2F0ZSBpbiBvbmUgZGF0YSBidWZmZXIgdGhhdCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUgorICAgICAqICAgICAgICB3aXRoIHRoZSBJRUxpc3QgcG9pbnRlciBhcyBwYXJhbWV0ZXIuCisgICAgICovCisgICAgRlRERl9JRUxpc3QqICAgICBJRUxpc3Q7Cit9IEZUREZfQmVhY29uUmVxdWVzdEluZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9UUkFOU1BBUkVOVF9FTkFCTEVfUkVRVUVTVCAqLworICAgIEZUREZfTXNnSWQgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBvZiB0cmFuc3BhcmVudCBtb2RlICovCisgICAgRlRERl9Cb29sZWFuICBlbmFibGU7CisgICAgLyoqIFxicmllZiBCaXRtYXBwZWQgdHJhbnNwYXJlbnQgb3B0aW9ucywgc2VlIEZUREZfZW5hYmxlVHJhbnNwYXJlbnRNb2RlICovCisgICAgRlRERl9CaXRtYXAzMiBvcHRpb25zOworfSBGVERGX1RyYW5zcGFyZW50RW5hYmxlUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1RSQU5TUEFSRU5UX1JFUVVFU1QgKi8KKyAgICBGVERGX01zZ0lkICAgICAgICAgbXNnSWQ7CisgICAgLyoqIFxicmllZiBGcmFtZSBsZW5ndGggKi8KKyAgICBGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGg7CisgICAgLyoqIFxicmllZiBQb2ludGVyIHRvIGZyYW1lLCBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoIEZUREZfR0VUX0RBVEFfQlVGRkVSICovCisgICAgRlRERl9PY3RldCogICAgICAgIGZyYW1lOworICAgIC8qKiBcYnJpZWYgQ2hhbm5lbCBudW1iZXIgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbDsKKyAgICAvKiogXGJyaWVmIFBhY2tldCBUcmFmZmljIEluZm9ybWF0aW9uIChQVEkpIHVzZWQgZm9yIHRyYW5zbWl0dGluZyB0aGUgZnJhbWUuICovCisgICAgRlRERl9QVEkgICAgICAgICAgIHB0aTsKKyAgICAvKiogXGJyaWVmIENTTUEgc3VwcHJlc3Npb24gKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgY21zYVN1cHByZXNzOworICAgIC8qKiBcYnJpZWYgQXBwbGljYXRpb24gcHJvdmlkZWQgaGFuZGxlLCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSB0cmFuc3BhcmVudCBjb25maXJtIGNhbGwgKi8KKyAgICB2b2lkKiAgICAgICAgICAgICAgaGFuZGxlOworfSBGVERGX1RyYW5zcGFyZW50UmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX1RSQU5TUEFSRU5UX0NPTkZJUk0gKi8KKyAgICBGVERGX01zZ0lkICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgQXBwbGljYXRpb24gcHJvdmlkZWQgaGFuZGxlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEZUREZfc2VuZEZyYW1lVHJhbnNwYXJlbnQgY2FsbCAqLworICAgIHZvaWQqICAgICAgICAgaGFuZGxlOworICAgIC8qKiBcYnJpZWYgQml0IG1hcHBlZCBzdGF0dXMgKi8KKyAgICBGVERGX0JpdG1hcDMyIHN0YXR1czsKK30gRlRERl9UcmFuc3BhcmVudENvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9UUkFOU1BBUkVOVF9JTkRJQ0FUSU9OICovCisgICAgRlRERl9Nc2dJZCAgICAgIG1zZ0lkOworICAgIC8qKiBcYnJpZWYgRnJhbWUgbGVuZ3RoICovCisgICAgRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoOworICAgIC8qKiBcYnJpZWYgUG9pbnRlciB0byBmcmFtZSwgbXVzdCBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIgKi8KKyAgICBGVERGX09jdGV0KiAgICAgZnJhbWU7CisgICAgLyoqIFxicmllZiBCaXQgbWFwcGVkIHJlY2VpdmUgc3RhdHVzICovCisgICAgRlRERl9CaXRtYXAzMiAgIHN0YXR1czsKK30gRlRERl9UcmFuc3BhcmVudEluZGljYXRpb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisJLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9TTEVFUF9SRVFVRVNUICovCisJRlRERl9Nc2dJZCBtc2dJZDsKKwkvKiogXGJyaWVmIFNsZWVwIHRpbWUgKi8KKwlGVERGX1VTZWMgIHNsZWVwVGltZTsKK30gRlRERl9TbGVlcFJlcXVlc3Q7CisKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICAvKiogXGJyaWVmIE1lc3NhZ2UgSUQgPSBGVERGX0RCR19NT0RFX1NFVF9SRVFVRVNUICovCisgICAgICAgIEZUREZfTXNnSWQgbXNnSWQ7CisgICAgICAgIC8qKiBcYnJpZWYgRGVidWcgYnVzIG1vZGUgKi8KKyAgICAgICAgRlRERl9EYmdNb2RlIGRiZ01vZGU7Cit9IEZUREZfRGJnTW9kZVNldFJlcXVlc3Q7CisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgLyoqIFxicmllZiBNZXNzYWdlIElEID0gRlRERl9GUFBSX01PREVfU0VUX1JFUVVFU1QgKi8KKyAgICAgICAgRlRERl9Nc2dJZCBtc2dJZDsKKyAgICAgICAgLyoqIFxicmllZiBmcCBiaXQgdmFsdWUgdG8gc2V0IHdoZW4gc3JjIGFkZHJlc3MgbWF0Y2hlcyovCisgICAgICAgIEZUREZfQml0bWFwOCBtYXRjaEZwOworICAgICAgICAvKiogXGJyaWVmIFdoZW4gc2V0LCBmcF9mb3JjZV92YWx1ZSB3aWxsIGJlIGFwcGxpZWQgdG8gZnAgYml0IGZvciBhbGwgc3JjIGFkZHJlc3NlcyovCisgICAgICAgIEZUREZfQml0bWFwOCBmcE92ZXJyaWRlOworICAgICAgICAvKiogXGJyaWVmIFRoZSB2YWx1ZSB3aWxsIGJlIHNldCB0byBmcCBiaXQgZm9yIGFsbCBzcmMgYWRkcmVzc2VzIHdoZW4gZnBfb3ZlcnJpZGUgaXMgc2V0Ki8KKyAgICAgICAgRlRERl9CaXRtYXA4IGZwRm9yY2U7Cit9IEZUREZfRnBwck1vZGVTZXRSZXF1ZXN0OworI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfZ2V0UmVsZWFzZUluZm8gLSBnZXRzIHRoZSBMTUFDIChGUEdBKSBhbmQgVU1BQyAoRlRERiBTVyBkcml2ZXIpIHJlbGVhc2UgaW5mbworICogXHBhcmFtW291dF0gIGxtYWNSZWxOYW1lOiAgICAgTE1BQyByZWxlYXNlIG5hbWUKKyAqIFxwYXJhbVtvdXRdICBsbWFjQnVpbGRUaW1lOiAgIExNQUMgYnVpbGQgdGltZQorICogXHBhcmFtW291dF0gIHVtYWNSZWxOYW1lOiAgICAgVU1BQyByZWxlYXNlIG5hbWUKKyAqIFxwYXJhbVtvdXRdICB1bWFjQnVpbGRUaW1lOiAgIFVNQUMgYnVpbGQgdGltZQorICogXHJlbWFyayAgICAgIFNldHMgdGhlIGFwcGxpY2F0aW9uIGNoYXJhY3RlciBzdHJpbmdzIHBvaW50ZXJzIHRvIGNoYXJhY3RlciBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIHJlbGVhc2UKKyAqICAgICAgICAgICAgICBpbmZvLiBUaGUgY2hhcmFjdGVyIHN0cmluZyBzcGFjZSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBieSBGVERGIGFuZCBkb2VzIG5vdCBuZWVkIAorICogICAgICAgICAgICAgIHRvIGJlIHJlbGVhc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0UmVsZWFzZUluZm8oIGNoYXIqKiBsbWFjUmVsTmFtZSwgY2hhcioqIGxtYWNCdWlsZFRpbWUsIGNoYXIqKiB1bWFjUmVsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiogdW1hY0J1aWxkVGltZSApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX2NvbmZpcm1MbWFjSW50ZXJydXB0IC0gQ29uZmlybWF0aW9uIHRoYXQgdGhlIExNQUMgaW50ZXJydXB0IGhhcyBiZWVuIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgYnkgdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgTE1BQyBpbnRlcnJ1cHQuIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHdhaXQgZm9yIGFueSBvdGhlcgorICogICAgICAgICAgICAgIEZUREYgQVBJIGZ1bmN0aW9uIHRvIGJlIGNvbXBsZXRlZCBhbmQgY2FsbCB0aGUgZnVuY3Rpb24gRlRERl9ldmVudEhhbmRsZXIuIFRoaXMgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICB3aWxsIGVuYWJsZSB0aGUgTE1BQyBpbnRlcnJ1cHQgYWdhaW4gdGhlIGZ1bmN0aW9uIEZUREZfZXZlbnRIYW5kbGVyLgorICovCit2b2lkICAgICAgICAgICAgRlRERl9jb25maXJtTG1hY0ludGVycnVwdCggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX2V2ZW50SGFuZGxlciAtIEhhbmRsZXMgYW4gZXZlbnQgc2lnbmFsbGVkIGJ5IHRoZSBMTUFDIGludGVycnVwdAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXZlbnQgc2lnbmFsbGVkIGJ5IHRoZSBMTUFDIGludGVycnVwdCBhbmQgZW5hYmxlcyB0aGUgTE1BQworICogICAgICAgICAgICAgIGludGVycnVwdCB3aGVuIGZpbmlzaGVkLgorICogXHdhcm5pbmcgICAgIEZUREYgaXMgc3RyaWN0bHkgTk9OIHJlZW50cmFudCwgc28gRlRERl9ldmVudEhhbmRsZXIgaXMgTk9UIGFsbG93ZWQgdG8gYmUgY2FsbGVkIHdoZW4gYW5vdGhlciBGVERGCisgKiAgICAgICAgICAgICAgaXMgYmVpbmcgZXhlY3V0ZWQKKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfZXZlbnRIYW5kbGVyKCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfc25kTXNnIC0gU2VuZHMgYSByZXF1ZXN0IChyZXNwb25zZSkgbWVzc2FnZSB0byBGVERGIGRyaXZlcgorICogXHBhcmFtW2luXSAgIG1zZ0J1ZjogICAgICBUaGUgbWVzc2FnZSB0byBiZSBzZW5kLiBUbyBhcHBsaWNhdGlvbiBtdXN0IHNldCB0aGUgbXNnSWQgZmllbGQgYW5kIHRoZSByZXF1ZXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHBhcmFtZXRlcnMgYnkgY2FzdGluZyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgcmVxdWVzdCBtZXNzYWdlIHN0cnVjdHVyZS4KKyAqIFxyZW1hcmsgICAgICBUaGUgbWVzc2FnZSBtdXN0IGJlIGFsbG9jYXRlZCBieSB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIGZ1bmN0aW9uIEZUREZfR0VUX01TR19CVUZGRVIKKyAqICAgICAgICAgICAgICBhbmQgd2lsbCBiZSByZWxlYXNlZCBieSBGVERGIHVzaW5nIEZUREZfUkVMX01TR19CVUZGRVIuIFdoZW4gZmluaXNoZWQgRlRERiByZWxlYXNlcyB0aGUgbWVzc2FnZQorICogICAgICAgICAgICAgIGJ1ZmZlciBhbmQgc2VuZHMgYSBjb25maXJtIChpbmRpY2F0aW9uKSB0byB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIGZ1bmN0aW9uIEZUREZfUkNWX01TRy4KKyAqIFxyZW1hcmsgICAgICBBcyBmb2xsb3dzIGEgdGFibGUgb2YgbWVzc2FnZSBJRHMgYWNjZXB0ZWQgYnkgRlRERl9zbmRNc2csIHRoZSBtZXNzYWdlIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nCisgKiAgICAgICAgICAgICAgdG8gdGhpcyBtZXNzYWdlIElEIGFuZCB0aGUgY29uZmlybSBzZW5kIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGJlZW4KKyAqICAgICAgICAgICAgICBjb21wbGV0ZWQgYnkgRlRERjoKKyAqIFxyZW1hcmsgICAgICA8YnI+CisgKiBccmVtYXJrICAgICAgUmVxdWVzdCBtZXNzYWdlIElELCBSZXF1ZXN0IHN0cnVjdHVyZSwgUmVxdWVzdCBjb25maXJtCisgKiBccmVtYXJrICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBccmVtYXJrICAgICAgRlRERl9EQVRBX1JFUVVFU1QsIEZUREZfRGF0YVJlcXVlc3QsIEZUREZfREFUQV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9QVVJHRV9SRVFVRVNULCBGVERGX1B1cmdlUmVxdWVzdCwgRlRERl9EQVRBX0NPTkZJUk0KKyAqIFxyZW1hcmsgICAgICBGVERGX0FTU09DSUFURV9SRVFVRVNULCBGVERGX0Fzc29jaWF0ZVJlcXVlc3QsIEZUREZfQVNTT0NJQVRFX0NPTkZJUk0KKyAqIFxyZW1hcmsgICAgICBGVERGX0FTU09DSUFURV9SRVNQT05TRSwgRlRERl9Bc3NvY2lhdGVSZXNwb25zZSwgRlRERl9DT01NX1NUQVRVU19JTkRJQ0FUSU9OCisgKiBccmVtYXJrICAgICAgRlRERl9ESVNBU1NPQ0lBVEVfUkVRVUVTVCwgRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0LCBGVERGX0RJU0FTU09DSUFURV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9HRVRfUkVRVUVTVCwgRlRERl9HZXRSZXF1ZXN0LCBGVERGX0dFVF9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9TRVRfUkVRVUVTVCwgRlRERl9TZXRSZXF1ZXN0LCBGVERGX1NFVF9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9PUlBIQU5fUkVTUE9OU0UsIEZUREZfT3JwaGFuUmVzcG9uc2UsICBGVERGX0NPTU1fU1RBVFVTX0lORElDQVRJT04KKyAqIFxyZW1hcmsgICAgICBGVERGX1JFU0VUX1JFUVVFU1QsIEZUREZfUmVzZXRSZXF1ZXN0LCBGVERGX1JFU0VUX0NPTkZJUk0KKyAqIFxyZW1hcmsgICAgICBGVERGX1JYX0VOQUJMRV9SRVFVRVNULCBGVERGX1NjYW5SZXF1ZXN0LCBGVERGX1JYX0VOQUJMRV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9TQ0FOX1JFUVVFU1QsIEZUREZfU2NhblJlcXVlc3QsIEZUREZfU0NBTl9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9TVEFSVF9SRVFVRVNULCBGVERGX1N0YXJ0UmVxdWVzdCwgRlRERl9TVEFSVF9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9QT0xMX1JFUVVFU1QsIEZUREZfUG9sbFJlcXVlc3QsIEZUREZfUE9MTF9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9TRVRfU0xPVEZSQU1FX1JFUVVFU1QsIEZUREZfU2V0U2xvdGZyYW1lUmVxdWVzdCwgRlRERl9TRVRfU0xPVEZSQU1FX0NPTkZJUk0KKyAqIFxyZW1hcmsgICAgICBGVERGX1NFVF9MSU5LX1JFUVVFU1QsIEZUREZfU2V0TGlua1JlcXVlc3QsIEZUREZfU0VUX0xJTktfQ09ORklSTQorICogXHJlbWFyayAgICAgIEZUREZfVFNDSF9NT0RFX1JFUVVFU1QsIEZUREZfVHNjaE1vZGVSZXF1ZXN0LCBGVERGX1RTQ0hfTU9ERV9DT05GSVJNCisgKiBccmVtYXJrICAgICAgRlRERl9LRUVQX0FMSVZFX1JFUVVFU1QsIEZUREZfS2VlcEFsaXZlUmVxdWVzdCwgRlRERl9LRUVQX0FMSVZFX0NPTkZJUk0KKyAqIFxyZW1hcmsgICAgICBGVERGX0JFQUNPTl9SRVFVRVNULCBGVERGX0JlYWNvblJlcXVlc3QsIEZUREZfQkVBQ09OX0NPTkZJUk0KKyAqIFx3YXJuaW5nICAgICBGVERGIGlzIHN0cmljdGx5IE5PTiByZWVudHJhbnQsIHNvIGl0IGlzIE5PVCBhbGxvd2VkIHRvIGNhbGwgYW55IG90aGVyIEZUREYgZnVuY3Rpb24gYmVmb3JlIHRoaXMgQVBJIGhhcyBiZWVuIGNvbXBsZXRlZC4gVGhpcyBpbmNsdWRpbmcgdGhlIEZUREZfZXZlbnRIYW5kbGVyIGZ1bmN0aW9uLgorICovCit2b2lkICAgICAgICAgICAgRlRERl9zbmRNc2coIEZUREZfTXNnQnVmZmVyKiBtc2dCdWYgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9SQ1ZfTVNHIC0gUmVjZWl2ZXMgYSBjb25maXIgb3IgaW5kaWNhdGlvbiBtZXNzYWdlIGZyb20gdGhlIEZUREYgZHJpdmVyCisgKiBccGFyYW1baW5dICAgbXNnQnVmOiAgICAgIFRoZSByZWNlaXZlZCBtZXNzYWdlLiBUaGUgbXNnSWQgZmllbGQgaW5kaWNhdGVzIHRoZSByZWNlaXZlZCBtZXNzYWdlCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQgaXMgY2FsbGVkIGJ5IEZUREYgdG8gcGFzcyAKKyAqICAgICAgICAgICAgICBhIGNvbmZpcm0gb3IgaW5kaWNhdGlvbiBtZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbi4gSXQgbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZQorICogICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIFRoZSBtZXNzYWdlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYnkgRlRERiB1c2luZyBGVERGX0dFVF9NU0dfQlVGRkVSIGFuZCBtdXN0IGJlIHJlbGVhc2VkCisgKiAgICAgICAgICAgICAgYnkgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIEZUREZfUkVMX01TR19CVUZGRVIKKyAqIFxyZW1hcmsgICAgICBBcyBmb2xsb3dzIGEgdGFibGUgb2YgdGhlIGNvbmZpcm0gYW5kIGluZGljYXRpb25zIG1lc3NhZ2VzIGFuZCB0aGVpciBtZXNzYWdlIHN0cnVjdHVyZXMuCisgKiBccmVtYXJrICAgICAgPGJyPgorICogXHJlbWFyayAgICAgIENvbmZpcm0vaW5kaWNhdGlvbiBtZXNzYWdlIElELCBDb25maXJtL2luZGljYXRpb24gc3RydWN0dXJlCisgKiBccmVtYXJrICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBccmVtYXJrICAgICAgRlRERl9EQVRBX0lORElDQVRJT04sIEZUREZfRGF0YUluZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX0RBVEFfQ09ORklSTSwgRlRERl9EYXRhQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfUFVSR0VfQ09ORklSTSwgRlRERl9QdXJnZUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX0FTU09DSUFURV9JTkRJQ0FUSU9OLCBGVERGX0Fzc29jaWF0ZUluZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX0FTU09DSUFURV9DT05GSVJNLCBGVERGX0Fzc29jaWF0ZUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX0RJU0FTU09DSUFURV9JTkRJQ0FUSU9OLCBGVERGX0Rpc2Fzc29jaWF0ZUluZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX0RJU0FTU09DSUFURV9DT05GSVJNLEZUREZfRGlzYXNzb2NpYXRlQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfQkVBQ09OX05PVElGWV9JTkRJQ0FUSU9OLCBGVERGX0JlYWNvbk5vdGlmeUluZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX0NPTU1fU1RBVFVTX0lORElDQVRJT04sIEZUREZfQ29tbVN0YXR1c0luZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX0dFVF9DT05GSVJNLCBGVERGX0dldENvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1NFVF9DT05GSVJNLCBGVERGX1NldENvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX09SUEhBTl9JTkRJQ0FUSU9OLCBGVERGX09ycGhhbkluZGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1JFU0VUX0NPTkZJUk0sIEZUREZfUmVzZXRDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9SWF9FTkFCTEVfQ09ORklSTSwgRlRERl9SeEVuYWJsZUNvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1NDQU5fQ09ORklSTSwgRlRERl9TY2FuQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfU1RBUlRfQ09ORklSTSwgRlRERl9TdGFydENvbmZpcm0KKyAqIFxyZW1hcmsgICAgICBGVERGX1NZTkNfTE9TU19JTkRJQ0FUSU9OLCBGVERGX1N5bmNMb3NzSW5kaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfUE9MTF9DT05GSVJNLCBGVERGX1BvbGxDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9TRVRfU0xPVEZSQU1FX0NPTkZJUk0sIEZUREZfU2V0U2xvdGZyYW1lQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfU0VUX0xJTktfQ09ORklSTSwgRlRERl9TZXRMaW5rQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfVFNDSF9NT0RFX0NPTkZJUk0sIEZUREZfVHNjaE1vZGVDb25maXJtCisgKiBccmVtYXJrICAgICAgRlRERl9LRUVQX0FMSVZFX0NPTkZJUk0sIEZUREZfS2VlcEFsaXZlQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfQkVBQ09OX0NPTkZJUk0sIEZUREZfQmVhY29uQ29uZmlybQorICogXHJlbWFyayAgICAgIEZUREZfQkVBQ09OX1JFUVVFU1RfSU5ESUNBVElPTiwgRlRERl9CZWFjb25SZXF1ZXN0SW5kaWNhdGlvbgorICogXHdhcm5pbmcgICAgIEZUREYgaXMgc3RyaWN0bHkgTk9OIHJlZW50cmFudC4gQmVjYXVzZSBGVERGX1JDVl9NU0cgY2FuIGJlIGNhbGxlZCBieSBGVERGX3NuZE1zZyBvciBGVERGX2V2ZW50SGFuZGxlcgorICogICAgICAgICAgICAgIGl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgb3RoZXIgRlRERiBmdW5jdGlvbnMgd2l0aGluIEZUREZfUkNWX01TRworICovCit2b2lkICAgICAgICAgICAgRlRERl9SQ1ZfTVNHKCBGVERGX01zZ0J1ZmZlciogbXNnQnVmICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfR0VUX01TR19CVUZGRVIgLSBBbGxvY2F0ZXMgYSBtZXNzYWdlIGJ1ZmZlcgorICogXHBhcmFtW2luXSAgIGxlbjogICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGJ1ZmZlciB0byBiZSBhbGxvY2F0ZWQKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0IHdpbGwgY2FsbGVkIGJ5IGJvdGggdGhlCisgKiAgICAgICAgICAgICAgYXBwbGljYXRpb24gYW5kIEZUREYuIEl0IG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZ0ZGZfY29uZmlnLmguCisgKiBccmVtYXJrICAgICAgVGhlIGFsbG9jYXRlZCBtZXNzYWdlIGJ1ZmZlciBtdXN0IGJlIGZyZWVkIHVzaW5nIEZUREZfUkVMX01TR19CVUZGRVIKKyAqIFxyZW1hcmsgICAgICBUaGUgbWVzc2FnZSBidWZmZXIgbXVzdCBiZSBsb2NhdGVkIGluIHJldGVudGlvbiBSQU0KKyAqIFxyZXR1cm4gICAgICBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWVzc2FnZSBidWZmZXIuCisgKi8KK0ZUREZfTXNnQnVmZmVyKiBGVERGX0dFVF9NU0dfQlVGRkVSKCBGVERGX1NpemUgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIgLSBGcmVlcyBhIG1lc3NhZ2UgYnVmZmVyCisgKiBccGFyYW1baW5dICAgbXNnQnVmOiAgICAgIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIHRvIGJlIHJlbGVhc2VkCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpdCB3aWxsIGNhbGxlZCBieSBib3RoIHRoZQorICogICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBGVERGLiBJdCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIEl0IHdpbGwgZnJlZSBtZXNzYWdlIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggRlRERl9HRVRfTVNHX0JVRkZFUgorICovCit2b2lkICAgICAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUiggRlRERl9Nc2dCdWZmZXIqIG1zZ0J1ZiApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX0dFVF9EQVRBX0JVRkZFUiAtIEFsbG9jYXRlcyBhIGRhdGEgYnVmZmVyCisgKiBccGFyYW1baW5dICAgbGVuOiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBjYWxsZWQgYnkgYm90aCB0aGUKKyAqICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBhbmQgRlRERi4gSXQgbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBUaGUgYWxsb2NhdGVkIGRhdGEgYnVmZmVyIG11c3QgYmUgZnJlZWQgdXNpbmcgRlRERl9SRUxfREFUQV9CVUZGRVIKKyAqIFxyZW1hcmsgICAgICBUaGUgZGF0YSBidWZmZXIgbXVzdCBsb2NhdGVkIGluIHJldGVudGlvbiBSQU0KKyAqIFxyZXR1cm4gICAgICBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgZGF0YSBidWZmZXIuCisgKi8KK0ZUREZfT2N0ZXQqICAgICBGVERGX0dFVF9EQVRBX0JVRkZFUiggRlRERl9EYXRhTGVuZ3RoIGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUiAtIEZyZWVzIGEgZGF0YSBidWZmZXIKKyAqIFxwYXJhbVtpbl0gICBkYXRhQnVmOiAgICAgIFBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyIHRvIGJlIHJlbGVhc2VkCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpdCB3aWxsIGNhbGxlZCBieSBib3RoIHRoZQorICogICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBGVERGLiBJdCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIEl0IHdpbGwgZnJlZSBkYXRhIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggRlRERl9HRVRfREFUQV9CVUZGRVIKKyAqLwordm9pZCAgICAgICAgICAgIEZUREZfUkVMX0RBVEFfQlVGRkVSKCBGVERGX09jdGV0KiBkYXRhQnVmICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfR0VUX0VYVF9BRERSRVNTIC0gR2V0cyB0aGUgZXh0ZW5kZWQgYWRkcmVzcworICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBjYWxsZWQgYnkgRlRERi4gSXQgbXVzdAorICogICAgICAgICAgICAgIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIEFmdGVyIGEgcmVzZXQgaXQgaXMgdXNlZCBieSBGVERGIHRvIGdldCB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlCisgKiBccmV0dXJuICAgICAgQW4gZXh0ZW5kZWQgYWRkcmVzcy4gCisgKi8KK0ZUREZfRXh0QWRkcmVzcyBGVERGX0dFVF9FWFRfQUREUkVTUyggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX2VuYWJsZVRyYW5zcGFyZW50TW9kZSAtIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRyYW5zcGFyZW50IG1vZGUKKyAqIFxwYXJhbVtpbl0gICBlbmFibGU6IElmIEZUREZfVFJVRSB0cmFuc3BhcmVudCBtb2RlIGlzIGVuYWJsZWQgZWxzZSBpdCB3aWxsIGJlIGRpc2FibGVkCisgKiBccGFyYW1baW5dICAgb3B0aW9uczogQSBiaXRtYXAgb2YgdHJhbnNwYXJlbnQgbW9kZSBvcHRpb25zLiBOb3QgdXNlZCBpZiBlbmFibGUgZXF1YWxzIHRvIEZUREZfRkFMU0UuCisgKiBccmVtYXJrICAgICAgSWYgdGhlIHRyYW5zcGFyZW50IG1vZGUgaXMgZW5hYmxlZCByZWNlaXZlZCBmcmFtZSBhcmUgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiB1c2luZworICogICAgICAgICAgICAgIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5ULiBUaGUgd2hvbGUgTUFDIGZyYW1lIGluY2x1ZGluZyBmcmFtZSBoZWFkZXJzLCBzZWN1cml0eSBoZWFkZXJzCisgKiAgICAgICAgICAgICAgYW5kIEZDUyBhcmUgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSBkZWZpbmVkIG9wdGlvbnMgc29tZSBmaWx0ZXJpbmcKKyAqICAgICAgICAgICAgICBpcyBkb25lLgorICogXHJlbWFyayAgICAgIFdoZW4gdGhlIHRyYW5zcGFyZW50IG1vZGUgaXMgZW5hYmxlZCBmcmFtZXMgbXVzdCBiZSBzZW5kIHVzaW5nIHRoZSBmdW5jdGlvbiBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50CisgKiBccmVtYXJrICAgICAgV2hlbiB0aGUgdHJhbnNwYXJlbnQgbW9kZSBpcyBlbmFibGVkIG9ubHkgdGhlIGZvbGxvd2luZyByZXF1ZXN0IG1lc3NhZ2VzIGFyZSBzdXBwb3J0ZWQ6CisgKiBccmVtYXJrICAgICAgPGJyPgorICogXHJlbWFyayAgICAgIEZUREZfR0VUX1JFUVVFU1QKKyAqIFxyZW1hcmsgICAgICBGVERGX1NFVF9SRVFVRVNUCisgKiBccmVtYXJrICAgICAgRlRERl9SRVNFVF9SRVFVRVNUCisgKiBccmVtYXJrICAgICAgPGJyPgorICogXHJlbWFyayAgICAgIFRoZSBiZWhhdmlvciBvZiBGVERGIHdoZW4gaXQgcmVjZWl2ZXMgcmVxdWVzdCBub3Qgc3VwcG9ydGVkIGluIHRyYW5zcGFyZW50IG1vZGUgaXMgTk9UIGRlZmluZWQhCisgKiBccmVtYXJrICAgICAgPGJyPgorICogXHJlbWFyayAgICAgIFRyYW5zcGFyZW50IG1vZGUgY2Fubm90IGJlIGVuYWJsZWQgaWYgRlRERiBpcyBpbiBDU0wgb3IgVFNDSCBtb2RlLgorICogXHJlbWFyayAgICAgIDxicj4KKyAqIFxyZW1hcmsgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKyAqIFxyZW1hcmsgICAgICA8YnI+CisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0ZSQU1FX1RZUEVfMDogRnJhbWVzIG9mIHR5cGUgMCBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV8xOiBGcmFtZXMgb2YgdHlwZSAxIGFyZSBhbHdheXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzI6IEZyYW1lcyBvZiB0eXBlIDIgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0ZSQU1FX1RZUEVfMzogRnJhbWVzIG9mIHR5cGUgMyBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV80OiBGcmFtZXMgb2YgdHlwZSA0IGFyZSBhbHdheXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19GUkFNRV9UWVBFXzU6IEZyYW1lcyBvZiB0eXBlIDUgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0ZSQU1FX1RZUEVfNjogRnJhbWVzIG9mIHR5cGUgNiBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfRlJBTUVfVFlQRV83OiBGcmFtZXMgb2YgdHlwZSA3IGFyZSBhbHdheXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfRlJBTUVfVFlQRVM6IEFsbCBmcmFtZSB0eXBlcyBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX0FVVE9fQUNLOiBGVERGIHNlbmRzIGFuIGF1dG9tYXRpY2FsbHkgYW5kIEFDSyBpZiBpdCByZWNlaXZlcyBhbiB2ZXJzaW9uIDAgb3IgMQorICogICAgICAgICAgICAgIGZyYW1lIHdpdGggQVIgc2V0IGluIHRoZSBmcmFtIGNvbnRyb2wgZmllbGQKKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX0FVVE9fRlBfQUNLOiAgRlRERiBzZW5kcyBhbiBhdXRvbWF0aWNhbGx5IGFuZCBBQ0sgZnJhbWUgd2l0aCBGUCBzZXQgaWYgaXQKKyAqICAgICAgICAgICAgICByZWNlaXZlcyBhbiB2ZXJzaW9uIDAgb3IgMSBEQVRBX1JFUVVFU1QgY29tbWFuZCBmcmFtZSB3aXRoIEFSIHNldCBpbiB0aGUgZnJhbSBjb250cm9sIGZpZWxkCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0NSQ19FUlJPUjogRnJhbWVzIHdpdGggYSBDUkMgKEZDUykgZXJyb3IgYXJlIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0ZSQU1FX1ZFUlNJT046IEZyYW1lcyB3aXRoIGFueSBmcmFtZSB2ZXJzaW9uIGFyZSBwYXNzZWQgdG8gdGhlCisgKiAgICAgICAgICAgICAgYXBwbGljYXRpb24KKyAqIFxyZW1hcmsgICAgICBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX1BBTl9JRDogRnJhbWVzIHdpdGggYW55IFBBTiBJRCAoZXZlbiB3aGVuIGl0IGRvZXMgbm90IG1hdGNoIGl0cyBvd24KKyAqICAgICAgICAgICAgICBQQU4gSUQpIGFyZSBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9QQU5fSUQ6IEZyYW1lcyB3aXRoIGFueSBhZGRyZXNzIChldmVuIHdoZW4gaXQgZG9lcyBub3QgbWF0Y2ggaXRzIG93bgorICogICAgICAgICAgICAgIGV4dGVuZGVkIG9yIHNob3J0IGFkZHJlc3MpIGFyZSBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9CRUFDT046IEFueSBiZWFjb24gZnJhbWUgaXMgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbgorICogXHJlbWFyayAgICAgIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfTk9fREVTVF9BRERSOiBGcmFtZXMgd2l0aCBubyBkZXN0aW5hdGlvbiBhZGRyZXNzIGFyZSBhbHdheXMgcGFzc2VkIHRvCisgKiAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uCisgKiBccmVtYXJrICAgICAgRlRERl9UUkFOU1BBUkVOVF9FTkFCTEVfRkNTX0dFTkVSQVRJT046IEZUREYgYWRkcyBhbiBGQ1MgdG8gZnJhbWVzIHNlbmQgd2l0aCBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50CisgKi8KK3ZvaWQgICAgICAgICAgICBGVERGX2VuYWJsZVRyYW5zcGFyZW50TW9kZSggRlRERl9Cb29sZWFuICBlbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgb3B0aW9ucyApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50IC0gU2VuZHMgYSBmcmFtZSB0cmFuc3BhcmVudAorICogXHBhcmFtW2luXSAgIGZyYW1lTGVuZ3RoOiAgIExlbmd0aCBvZiB0aGUgTUFDIGZyYW1lIHRvIGJlIHNlbmQKKyAqIFxwYXJhbVtpbl0gICBmcmFtZTogICAgICAgICBEYXRhIGJ1ZmZlciB3aXRoIHRoZSBmcmFtZSB0byBiZSBzZW50LiBNdXN0IGJlIGFsbG9jYXRlIHVzaW5nIEZUREZfR0VUX0RBVEFfQlVGRkVSCisgKiBccGFyYW1baW5dICAgY2hhbm5lbDogICAgICAgVGhlIGNoYW5uZWwgdXNlZCB0byBzZW5kIHRoZSBmcmFtZQorICogXHBhcmFtW2luXSAgIHB0aTogICAgICAgICAgIFBhY2tldCBUcmFmZmljIEluZm9ybWF0aW9uIHVzZWQgZm9yIHRyYW5zbWl0dGluZyB0aGUgcGFja2V0CisgKiBccGFyYW1baW5dICAgY21zYVN1cHByZXNzOiAgSWYgRlRERl9UUlVFIG5vIENTTUEtQ0EgaXMgcGVyZm9ybWVkIGJlZm9yZSBzZW5kaW5nIHRoZSBmcmFtZQorICogXHBhcmFtW2luXSAgIGhhbmRsZTogICAgICAgIEEgdXNlciBkZWZpbmVkIGhhbmRsZS4KKyAqIFxyZW1hcmsgICAgICBGVERGIHNlbmRzIHRoZSBmcmFtZSB0YXJuc3BhcmVudGx5LiBUaGF0IGlzIHRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gY29tcG9zZSB0aGUgTUFDIGZyYW1lIGhlYWRlciwgCisgKiAgICAgICAgICAgICAgc2VjdXJpdHkgaGVhZGVyLCBldGMgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IGNvbXBsaWVzIHdpdGggdGhlIElFRUU4MDIuMTUuNCBzdGFuZGFyZC4gQmVmb3JlIHNlbmRpbmcKKyAqICAgICAgICAgICAgICBpdCBGVERGIGFkZHMgdGhlICBwcmVhbWJsZSwgZnJhbWUgc3RhcnQsIHBoeSBoZWFkZXIgb2N0ZXRzIGFuZCBvcHRpb25hbGx5IGFuIEZDUyB0byB0aGUgZnJhbWUgcHJvdmlkZQorICogICAgICAgICAgICAgIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqIFxyZW1hcmsgICAgICBXaGVuIEZUREYgaGFzIHNlbmQgdGhlIGZyYW1lIG9yIGZhaWxlZCB0byBzZW5kIHRoZSBmcmFtZSBpdCB3aWxsIGNhbGwgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0KKyAqICAgICAgICAgICAgICB3aXRoIHRoZSBoYW5kbGUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgc2VuZCBzdGF0dXMuCisgKi8KK3ZvaWQgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudCggRlRERl9EYXRhTGVuZ3RoICAgIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BUSSAgICAgICAgICAgcHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gICAgICAgY21zYVN1cHByZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgaGFuZGxlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfU0VORF9GUkFNRV9UUkFOU1BBUkVOVF9DT05GSVJNIC0gQ29uZmlybXMgYSB0cmFuc3BhcmVudCBzZW5kCisgKiBccGFyYW1baW5dICAgaGFuZGxlOiAgIFRoZSBhcHBsaWNhdGlvbiBwcm92aWRlZCBoYW5kbGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudCBjYWxsCisgKiBccGFyYW1baW5dICAgc3RhdHVzOiAgIEJpdCBtYXBwZWQgc3RhdHVzCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpdCB3aWxsIGNhbGxlZCBieSBGVERGLiBJdCBtdXN0CisgKiAgICAgICAgICAgICAgYmUgY29uZmlndXJlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZ0ZGZfY29uZmlnLmguCisgKiBccmVtYXJrICAgICAgRlRERiBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBmcmFtZSBoYXMgc2VuZCBzdWNjZXNzZnVsbHkgb3IgZmFpbGVkIHRvIHNlbmQuIFRoZSBhcHBsaWNhdGlvbiBjYW4KKyAqICAgICAgICAgICAgICBub3cgZnJlZSB0aGUgZGF0YSBidWZmZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudCB1c2luZyBGVERGX1JFTF9EQVRBX0JVRkZFUgorICogXHJlbWFyayAgICAgIElmIHRoZSBmcmFtZSBpcyBzZW5kIHN1Y2Nlc3NmdWxseSBzdGF0dXMgaXMgZXF1YWwgdG8gMAorICogXHJlbWFyayAgICAgIElmIHNlbmRpbmcgdGhlIGZyYW1lIGZhaWxlZCBvbmUgb2YgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHN0YXR1cyBiaXRzIGlzIHNldDoKKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfQ1NNQUNBX0ZBSUxVUkU6IFNlbmRpbmcgZmFpbGVkIGJlY2F1c2UgQ1NNQS1DQSBmYWlsZWQKKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfT1ZFUkZMT1c6IFNlbmRpbmcgZmFpbGVkIGJlY2F1c2Ugb2YgaW50ZXJuYWwgcmVzb3VyY2Ugb3ZlcmZsb3cKKyAqLwordm9pZCBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSggdm9pZCogICAgICAgICBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0JpdG1hcDMyIHN0YXR1cyApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50Q29uZmlybSAtIENvbnZlcnRzIHRoZSBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSB0byBhIG1zZyBidWZmZXIKKyAqICAgICAgICAgICAgICBhbmQgdGhlbiBjYWxscyBGVERGX1JDVl9NU0cuCisgKiBccGFyYW1baW5dICAgaGFuZGxlOiAgIFRoZSBhcHBsaWNhdGlvbiBwcm92aWRlZCBoYW5kbGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRlRERl9zZW5kRnJhbWVUcmFuc3BhcmVudCBjYWxsCisgKiBccGFyYW1baW5dICAgc3RhdHVzOiAgIEJpdCBtYXBwZWQgc3RhdHVzCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byBhIEZUREZfVHJhbnNwYXJlbnRDb25maXJtIHN0cnVjdHVyZQorICogICAgICAgICAgICAgIGFuZCB0aGVuIGNhbGxzIEZUREZfUkNWX01TRy4KKyAqIFxyZW1hcmsgICAgICBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSBjYW4gYmUgZGVmaW5lZCB0byBiZSB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIEZUREZfc2VuZEZyYW1lVHJhbnNwYXJlbnRDb25maXJtKCB2b2lkKiAgICAgICAgIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgc3RhdHVzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5UIC0gUmVjZWl2ZSBmcmFtZSB0cmFuc3BhcmVudAorICogXHBhcmFtW2luXSAgIGZyYW1lTGVuZ3RoOiBMZW5ndGggb2YgdGhlIHJlY2VpdmVkIGZyYW1lCisgKiBccGFyYW1baW5dICAgZnJhbWU6ICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZWQgZnJhbWUuIAorICogXHBhcmFtW2luXSAgIHN0YXR1czogICAgICBCaXRtYXBwZWQgcmVjZWl2ZSBzdGF0dXMKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0IHdpbGwgY2FsbGVkIGJ5IEZUREYuIEl0IG11c3QKKyAqICAgICAgICAgICAgICBiZSBjb25maWd1cmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnRkZl9jb25maWcuaC4KKyAqIFxyZW1hcmsgICAgICBGVERGIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBhIGZyYW1lIGlzIHJlY2VpdmVkIHdoZW4gdHJhbnNwYXJlbnQgbW9kZSBpcyBlbmFibGVkCisgKiBccmVtYXJrICAgICAgVGhlIGJ1ZmZlciB3aXRoIHRoZSBmcmFtZSBtdXN0IGJlIGNvcGllZCBieSB0aGUgYXBwbGljYXRpb24gYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogXHJlbWFyayAgICAgIFRoZSBmb2xsb3dpbmcgc3RhdHVzIGJpdHMgY2FuIGJlIHNldDoKKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfUkNWX0NSQ19FUlJPUjogVGhlIENSQyAoRkNTKSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgbm90IGNvcnJlY3QKKyAqICAgICAgICAgICAgICAtIEZUREZfVFJBTlNQQVJFTlRfUkNWX1JFU19GUkFNRVRZUEU6IFJlY2VpdmVkIGEgcmVzZXJ2ZWQgZnJhbWUgdHlwZQorICogICAgICAgICAgICAgIC0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfUkVTX0ZSQU1FX1ZFUlNJT046IFJlY2VpdmVkIGEgcmVzZXJ2ZWQgZnJhbWUgdmVyc2lvbgorICogICAgICAgICAgICAgIC0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfRFNUX0FERFI6IFVuZXhwZWN0ZWQgZGVzdGluYXRpb24gYWRkcmVzcworICogICAgICAgICAgICAgIC0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfVU5FWFBfRFNUX1BBTl9JRDogVW5leHBlY3RlZCBkZXN0aW9uYXRpb24gUEFOIElECisgKiAgICAgICAgICAgICAgLSBGVERGX1RSQU5TUEFSRU5UX1JDVl9VTkVYUF9CRUFDT046IFVuZXhwZWN0ZWQgYmVhY29uIGZyYW1lCisgKiAgICAgICAgICAgICAgLSBGVERGX1RSQU5TUEFSRU5UX1JDVl9VTkVYUF9OT19ERVNUX0FERFI6IFVuZXhwZWN0ZWQgZnJhbWUgd2l0aG91dCBkZXN0aW5hdGlvbiBhZHJlcy4KKyAqLwordm9pZCBGVERGX1JDVl9GUkFNRV9UUkFOU1BBUkVOVCggRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgbHFpKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRlRERl9yY3ZGcmFtZVRyYW5zcGFyZW50IC0gQ29udmVydHMgdGhlIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5UIHRvIGEgbXNnIGJ1ZmZlcgorICogICAgICAgICAgICAgIGFuZCB0aGVuIGNhbGxzIEZUREZfUkNWX01TRy4KKyAqIFxwYXJhbVtpbl0gICBmcmFtZUxlbmd0aDogTGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBmcmFtZQorICogXHBhcmFtW2luXSAgIGZyYW1lOiAgICAgICBQb2ludGVyIHRvIHJlY2VpdmVkIGZyYW1lLiAKKyAqIFxwYXJhbVtpbl0gICBzdGF0dXM6ICAgICAgQml0bWFwcGVkIHJlY2VpdmUgc3RhdHVzCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiBjb252ZXJzIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvIGEgRlRERl9UcmFuc3BhcmVudEluZGljYXRpb24gc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgYW5kIHRoZW4gY2FsbHMgRlRERl9SQ1ZfTVNHLgorICogXHJlbWFyayAgICAgIEZUREZfUkNWX0ZSQU1FX1RSQU5TUEFSRU5UIGNhbiBiZSBkZWZpbmVkIHRvIGJlIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRlRERl9yY3ZGcmFtZVRyYW5zcGFyZW50KCBGVERGX0RhdGFMZW5ndGggZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQml0bWFwMzIgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9MaW5rUXVhbGl0eSBscWkpOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX3NldFNsZWVwQXR0cmlidXRlcyAtIFNldCBzbGVlcCBhdHJpYnV0ZXMKKyAqIFxwYXJhbVtpbl0gICBsb3dQb3dlckNsb2NrQ3ljbGU6IFRoZSBMUCBjbG9jayBjeWNsZSBpbiBwaWNvc2Vjb25kcworICogXHBhcmFtW2luXSAgIHdha2VVcExhdGVuY3k6ICAgICAgVGhlIHdha2VwIHVwIGxhdGVuY3kgdGltZSBpbiBsb3cgcG93ZXIgY2xvY2sgY3ljbGVzCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbnMgc2V0cyBzb21lIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgRlRERiB0byBnbyBpbnRvIGEgZGVlcCBzbGVlcCBhbmQgd2FrZSB1cCBmcm9tIGl0LgorICogXHJlbWFyayAgICAgIFRoZSB3YWtlIHVwIGxhdGVuY3kgaXMgdGhlIHRpbWUgYmV0d2VlbiB0aGUgd2FrZXVwIHNpZ25hbCBzZW5kIGJ5IEZUREYgYW5kIHRoZSBtb21lbnQgdGhhdCB0aGUKKyAqICAgICAgICAgICAgICBjbG9ja3MgYXJlIHN0YWJsZS4gSXQgd2lsbCBiZSB1c2VkIGJ5IEZUREYgdG8gZGV0ZXJtaW5lIHdoZW4gaXQgbXVzdCBtdXN0IHNlbmQgdGhlIHdha2V1cCBzaWduYWwuCisgKiBccmVtYXJrICAgICAgVGhlIGxvdyBwb3dlciBjbG9jayBjeWNsZSB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBsb25nIHRoZSBzeXN0ZW0gaGFzIHNsZXB0IGFuZCByZWNvdmVyIAorICogICAgICAgICAgICAgIHRoZSBzeW1ib2wgY291bnRlciBpbnRlcm5hbGx5IHVzZWQgYnkgRlRERi4KKyAqLwordm9pZCBGVERGX3NldFNsZWVwQXR0cmlidXRlcyggRlRERl9QU2VjICAgICAgICAgICAgICAgICAgbG93UG93ZXJDbG9ja0N5Y2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Ockxvd1Bvd2VyQ2xvY2tDeWNsZXMgd2FrZVVwTGF0ZW5jeSApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX2NhblNsZWVwIC0gSW5kaWNhdGVzIHdoZXRoZXIgRlRERiBjYW4gZ28gaW4gYSBkZWVwIHNsZWVwCisgKiBccmVtYXJrICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lIGluIG1pY3Jvc2Vjb25kcyB0aGF0IHRoZSBGVERGIGNhbiBkZWVwIHNsZWVwLgorICogXHJlbWFyayAgICAgIEl0IGRvZXMgTk9UIHRha2UgaW50byBhY2NvdW50IHRoZSB3YWtldXAgbGF0ZW5jeS4KKyAqIFxyZXR1cm4gICAgICBUaGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyB0aGF0IHRoZSBGVERGIGNhbiBkZWVwIHNsZWVwLiBJZiBlcXVhbCB0byAwIHRoZSBGVERGIGlzIHN0aWxsIGFjdGl2ZQorICogICAgICAgICAgICAgIGFuZCBjYW5ub3QgZGVlcCBzbGVlcAorICovCitGVERGX1VTZWMgRlRERl9jYW5TbGVlcCggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX3ByZXBhcmVGb3JTbGVlcCAtIFByZXBhcmUgdGhlIEZUREYgZm9yIGEgZGVlcCBzbGVlcAorICogXHBhcmFtW2luXSAgIHNsZWVwVGltZTogVGhlIHNsZWVwIHRpbWUuIEFmdGVyIHRoZSBzbGVlcCB0aW1lIHRoZSBGVERGIG11c3QgYmUgcmVhZHkgdG8gZG8gbmV4dCBzY2hlZHVsZWQgYWN0aXZpdHkuCisgKiBccmVtYXJrICAgICAgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbXBsZXRlZCB0aGUgYXBwbGljYXRpb24gY2FuIHNhZmVseSBwb3dlciBvZmYgdGhlIEZUREYgYW5kIHB1dCB0aGUgdVAgaW4KKyAqICAgICAgICAgICAgICBhIGRlZXAgc2xlZXAuIEF0IGxlYXN0IHdha2UgdXAgbGF0ZW5jeSB0aW1lIG1pY3Jvc2Vjb25kcyBiZWZvcmUgc2xlZXAgdGltZSBpcyBleHBpcmVkIHRoZSBGVERGCisgKiAgICAgICAgICAgICAgd2lsbCBzZW5kIGEgd2FrZXVwIHNpZ25hbC4gRlRERiBleHBlY3QgdGhhdCB0aGUgYXBwbGljYXRpb24gY2FsbHMgRlRERl93YWtlVXAgYXMgaXQgaGFzIGJlZW4KKyAqICAgICAgICAgICAgICB3b2tlbiB1cC4KKyAqIFxyZXR1cm4gICAgICBGVERGX1RSVUUgaWYgdGhlIEZUREYgY2FuIGJlIHB1dCBpbiBkZWVwIHNsZWVwLCBGVERGX0ZBTFNFIGlmIHRoZSBzbGVlcFRpbWUgaXMgdG9vIHNob3J0IHRvIGdvIHRvCisgKiAgICAgICAgICAgICAgZGVlcCBzbGVlcCBhbmQgd2FrZSB1cCBhZ2FpbiBhZnRlciBzbGVlcFRpbWUgbWljcm9zZWNvbmRzLCB0aGUgRlRERiBjYW5ub3QgYmUgcHV0IGluIGRlZXAgc2xlZXAuCisgKi8KK0ZUREZfQm9vbGVhbiBGVERGX3ByZXBhcmVGb3JTbGVlcCggRlRERl9VU2VjIHNsZWVwVGltZSApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX3dha2VVcCAtIFdha2UgdXAgdGhlIEZUREYgYWZ0ZXIgYSBzbGVlcAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZXN0b3JlcyB0aGUgRlRERiB0byBzdGF0ZSBiZWZvcmUgdGhlIGRlZXAgc2xlZXAuIEl0IHdpbGwgZG9lcyB0aGlzIGluIDIgc3RlcHMKKyAqICAgICAgICAgICAgICAxLiBJdCBpbml0aWFsaXNlcyBpdCBpbnRlcm5hbCBzdGF0ZXMgYW5kIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxsIHRoZSBub24gdGltaW5nIHNwZWNpZmljIEhXLiBBZnRlcgorICogICAgICAgICAgICAgIHRoYXQgaXQgd2FpdHMgdW50aWwgdGhlIHdha2UgdXAgbGF0ZW5jeSB0aW1lIGhhcyBiZWVuIGV4cGlyZWQuIFdoZW4gZXhwaXJlZCBGVERGIGFzc3VtZXMgdGhhdCB0aGUKKyAqICAgICAgICAgICAgICBzbG9ja3MgYXJlIHN0YWJsZS4KKyAqICAgICAgICAgICAgICAyLiBJdCByZXN0b3JlcyB0aW1lcnMgaW4gSFcgYW5kIGNhbGxzIHRoZSBmdW5jdGlvbiBGVERGX1dBS0VfVVBfUkVBRFkgdG8gaW5kaWNhdGUgRlRERiBpcyB1cCBhZ2FpbiwKKyAqICAgICAgICAgICAgICByZWFkeSB0byBwZXJmb3JtIHNjaGVkdWxlZCBhY3Rpdml0aWVzIGFuZCByZWFkeSB0byBwcm9jZXNzIG5ldyByZXF1ZXN0cyBmcm9tIHRoZSBhcHBsaWNhdGlvbi4KKyAqLwordm9pZCBGVERGX3dha2VVcCggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX1dBS0VfVVBfUkVBRFkgLSBJbmRpY2F0aW9uIHRoYXQgRlRERiBoYXMgd29rZSB1cAorICogXHJlbWFyayAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gaXQgd2lsbCBjYWxsZWQgYnkgRlRERi4gSXQgbXVzdAorICogICAgICAgICAgICAgIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmdGRmX2NvbmZpZy5oLgorICogXHJlbWFyayAgICAgIEZUREYgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aGVuIGl0IGlzIHVwIGFnYWluLCByZWFkeSB0byBwZXJmb3JtIHNjaGVkdWxlZCBhY3Rpdml0aWVzIGFuZCByZWFkeSB0bworICogICAgICAgICAgICAgIHByb2Nlc3MgbmV3IHJlcXVlc3RzIGZyb20gdGhlIGFwcGxpY2F0aW9uLgorICovCit2b2lkIEZUREZfV0FLRV9VUF9SRUFEWSggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICBGVERGX1NMRUVQX0NBTExCQUNLIC0gQ2FsbGJhY2sgZnJvbSBGVERGX1NMRUVQX1JFUVVFU1QKKyAqIFxyZW1hcmsgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBieSBGVERGLgorICogICAgICAgICAgICAgIEl0IG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZ0ZGZfY29uZmlnLmgKKyAqIFxyZW1hcmsgICAgICBGVERGIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBhbiBGVERGX1NMRUVQX1JFUVVFU1QgbWVzc2FnZSBpcyBzZW50IHRocm91Z2ggdGhlIEZUREZfc25kTXNnIGZ1bmN0aW9uLgorICovCit2b2lkIEZUREZfU0xFRVBfQ0FMTEJBQ0soIEZUREZfVVNlYyBzbGVlcFRpbWUgKTsKKwordm9pZCBGVERGX3Jlc2V0KGludCBzZXREZWZhdWx0UElCKTsKKworRlRERl9QVEkgRlRERl9nZXRSeFB0aSggdm9pZCApOworCisjaWYgRlRERl9VU0VfUFRJCit2b2lkIEZUREZfc2V0UnhQdGkoIEZUREZfUFRJIHJ4X3B0aSApOworI2lmIEZUREZfVVNFX0FVVE9fUFRJCit2b2lkIEZUREZfcmVzdG9yZVJ4UHRpKHZvaWQpOworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEZUREZfUEhZX0FQSQorRlRERl9TdGF0dXMgRlRERl9zZW5kRnJhbWVTaW1wbGUoIEZUREZfRGF0YUxlbmd0aCAgICBmcmFtZUxlbmd0aCwKKyAgICAgICAgRlRERl9PY3RldCogICAgICAgIGZyYW1lLAorICAgICAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbCwKKyAgICAgICAgRlRERl9QVEkgICAgICAgICAgIHB0aSwKKyAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGNzbWFTdXBwcmVzcyk7CitGVERGX1BJQkF0dHJpYnV0ZVZhbHVlICpGVERGX2dldFZhbHVlKEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZSk7CitGVERGX1N0YXR1cyBGVERGX3NldFZhbHVlKEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZSwgY29uc3QgRlRERl9QSUJBdHRyaWJ1dGVWYWx1ZSAqUElCQXR0cmlidXRlVmFsdWUpOwordm9pZCBGVERGX3J4RW5hYmxlKEZUREZfVGltZSByeE9uRHVyYXRpb24pOworI2VuZGlmIC8qIEZUREZfUEhZX0FQSSAqLworCisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorLyoqCisgKiBcYnJpZWYgQ2hlY2tzIGN1cnJlbnQgZGVidWcgbW9kZSBhbmQgbWFrZXMgYXBwcm9wcmlhdGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuCisgKi8KK3ZvaWQgRlRERl9jaGVja0RiZ01vZGUodm9pZCk7CisKKy8qKgorICogXGJyaWVmIFNldHMgZGVidWcgYnVzIG1vZGUuCisgKi8KK3ZvaWQgRlRERl9zZXREYmdNb2RlKEZUREZfRGJnTW9kZSBkYmdNb2RlKTsKKworLyoqCisgKiBcYnJpZWYgRGVidWcgYnVzIEdQSU8gY29uZmlndXJhdGlvbiBjYWxsYmFjay4gTWFrZXMgYXBwcm9wcmlhdGUgR1BJTyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGRlYnVnCisgKiBidXMuCisgKi8KK3ZvaWQgRlRERl9EQkdfQlVTX0dQSU9fQ09ORklHKHZvaWQpOworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2lmIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZID09IDEKK3ZvaWQgRlRERl9kZHBoeVNldCh1aW50MTZfdCBjY2FSZWcpOworI2VuZGlmIC8qIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZID09IDEgKi8KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKworI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisjaWZuZGVmIEZUREZfTElURQorLyoqCisgKiBcYnJpZWYgQ29udHJvbHMgd2hlbiB0aGUgRlBQUiBhZGRyZXNzIGludmFsaWRhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBJZiBzZXQgdG8gMCAocmVjb21tZW5kZWQpLCBhZGRyZXNzIGludmFsaWRhdGlvbiBpbiBGUFBSIG9jY3VycyByaWdodCBhZnRlciB0aGUgZnJhbWUgaXMgcGFzc2VkIHRvCisgKiBMTUFDIGZvciBkaXJlY3QgdHJhbnNtaXNzaW9uLiBJZiBzZXQgdG8gMSwgYWRkcmVzcyBpbnZhbGlkYXRpb24gb2NjdXJzIGFmdGVyIHRoZSBhc3NvY2lhdGVkCisgKiBjb25maXJtIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCisgKi8KKyNkZWZpbmUgRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTiAgICAgICAgICAgICAgICAgICAgMAorCisvKioKKyAqIFxicmllZiBBZGRzIGEgbmV3IHNob3J0IGFkZHJlc3MgdG8gRlBQUiwgaW5pdGlhbGl6aW5nIHRoZSBjb3JyZXNwb25kaW5nIEZTTS4KKyAqCisgKiBBIHNob3J0IGFkZHJlc3MgRlAgRlNNIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBub3RpZmljYXRpb25zIChldmVudHMpOgorICoKKyAqIC0gTmV3IGFkZHJlc3MgKGluaXRpYWxpemUpIGJ5IGNhbGxpbmcgQHJlZiBGVERGX2ZwRnNtU2hvcnRBZGRyZXNzTmV3KCkKKyAqIC0gTGFzdCBmcmFtZSBwZW5kaW5nIChwYXNzZWQgdG8gZGlyZWN0IHNlbmRpbmcpIGJ5IGNhbGxpbmcgQHJlZgorICogRlRERl9mcEZzbVNob3J0QWRkcmVzc0xhc3RGcmFtZVBlbmRpbmcoKQorICogLSBMYXN0IHBlbmRpbmcgZnJhbWUgc2VudCBieSBjYWxsaW5nIEByZWYgRlRERl9mcEZzbUNsZWFyUGVuZGluZygpCisgKgorICogQSBuZXcgYWRkcmVzcyBtYXkgYmUgcmVqZWN0ZWQgaWYgdGhlcmUgaXMgbm8gYWRlcXVhdGUgc3BhY2UgbGVmdCBpbiBGUFBSLgorICoKKyAqIFxwYXJhbSBbaW5dIHBhbklkIERlc3RpbmF0aW9uIFBBTiBJRC4KKyAqIFxwYXJhbSBbaW5dIHNob3J0QWRkcmVzcyBEZXN0aW5hdGlvbiBzaG9ydCBhZGRyZXNzLgorICoKKyAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgb24gc3VjY2Vzcy4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBGc21TaG9ydEFkZHJlc3NOZXcoRlRERl9QQU5JZCBwYW5JZCwgRlRERl9TaG9ydEFkZHJlc3Mgc2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBcYnJpZWYgQWRkcyBhIG5ldyBleHRlbmRlZCBhZGRyZXNzIHRvIEZQUFIsIGluaXRpYWxpemluZyB0aGUgY29ycmVzcG9uZGluZyBGU00uCisgKgorICogQW4gZXh0ZW5kZWQgYWRkcmVzcyBGUCBGU00gYWNjZXB0cyB0aGUgZm9sbG93aW5nIG5vdGlmaWNhdGlvbnMgKGV2ZW50cyk6CisgKgorICogLSBOZXcgYWRkcmVzcyAoaW5pdGlhbGl6ZSkgYnkgY2FsbGluZyBAcmVmIEZUREZfZnBGc21FeHRBZGRyZXNzTmV3KCkKKyAqIC0gTGFzdCBmcmFtZSBwZW5kaW5nIChwYXNzZWQgdG8gZGlyZWN0IHNlbmRpbmcpIGJ5IGNhbGxpbmcgQHJlZgorICogRlRERl9mcEZzbUV4dEFkZHJlc3NMYXN0RnJhbWVQZW5kaW5nKCkKKyAqIC0gTGFzdCBwZW5kaW5nIGZyYW1lIHNlbnQgYnkgY2FsbGluZyBAcmVmIEZUREZfZnBGc21DbGVhclBlbmRpbmcoKQorICoKKyAqIEEgbmV3IGFkZHJlc3MgbWF5IGJlIHJlamVjdGVkIGlmIHRoZXJlIGlzIG5vIGFkZXF1YXRlIHNwYWNlIGxlZnQgaW4gRlBQUi4KKyAqCisgKiBccGFyYW0gW2luXSBwYW5JZCBEZXN0aW5hdGlvbiBQQU4gSUQuCisgKiBccGFyYW0gW2luXSBleHRBZGRyZXNzIERlc3RpbmF0aW9uIGV4dGVuZGVkIGFkZHJlc3MuCisgKgorICogXHJldHVybiBccmVmIEZUREZfVFJVRSBvbiBzdWNjZXNzLgorICovCitGVERGX0Jvb2xlYW4gRlRERl9mcEZzbUV4dEFkZHJlc3NOZXcoRlRERl9QQU5JZCBwYW5JZCwgRlRERl9FeHRBZGRyZXNzIGV4dEFkZHJlc3MpOworCisvKioKKyAqIFxicmllZiBOb3RpZmllcyBGUCBGU00gdGhhdCB0aGUgbGFzdCBwYWNrZXQgZm9yIHRoZSBhc3NvY2lhdGVkIGRlc3RpbmF0aW9uIGhhcyBiZWVuIHBhc3NlZCBmb3IKKyAqIGRpcmVjdCB0cmFuc21pc3Npb24uCisgKgorICogXHBhcmFtIFtpbl0gcGFuSWQgRGVzdGluYXRpb24gUEFOIElELgorICogXHBhcmFtIFtpbl0gc2hvcnRBZGRyZXNzIERlc3RpbmF0aW9uIHNob3J0IGFkZHJlc3MuCisgKi8KK3ZvaWQgRlRERl9mcEZzbVNob3J0QWRkcmVzc0xhc3RGcmFtZVBlbmRpbmcoRlRERl9QQU5JZCBwYW5JZCwgRlRERl9TaG9ydEFkZHJlc3Mgc2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBcYnJpZWYgTm90aWZpZXMgRlAgRlNNIHRoYXQgdGhlIGxhc3QgcGFja2V0IGZvciB0aGUgYXNzb2NpYXRlZCBkZXN0aW5hdGlvbiBoYXMgYmVlbiBwYXNzZWQgZm9yCisgKiBkaXJlY3QgdHJhbnNtaXNzaW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIHBhbklkIERlc3RpbmF0aW9uIFBBTiBJRC4KKyAqIFxwYXJhbSBbaW5dIHNob3J0QWRkcmVzcyBEZXN0aW5hdGlvbiBleHRlbmRlZCBhZGRyZXNzLgorICovCit2b2lkIEZUREZfZnBGc21FeHRBZGRyZXNzTGFzdEZyYW1lUGVuZGluZyhGVERGX1BBTklkIHBhbklkLCBGVERGX0V4dEFkZHJlc3MgZXh0QWRkcmVzcyk7CisKKy8qKgorICogXGJyaWVmIE5vdGlmaWVzIEZQIEZTTSB0aGF0IHRoZSBsYXN0IHBlbmRpbmcgcGFja2V0IGhhcyBiZWVuIHRyYW5zbWl0dGVkIChVTUFDIHN0YXRlIG1hY2hpbmUKKyAqIGNsb3NlZCkuCisgKi8KK3ZvaWQgRlRERl9mcEZzbUNsZWFyUGVuZGluZyh2b2lkKTsKKworI2VuZGlmIC8qICNpZm5kZWYgRlRERl9MSVRFICovCisKKy8qKgorICogXGJyaWVmIE51bWJlciBvZiBGUFBSIHRhYmxlIGVudHJpZXMuCisgKi8KKyNkZWZpbmUgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLyoqCisgKiBcYnJpZWYgTnVtYmVyIG9mIGV4dGVuZGVkIGFkZHJlc3MgdGFibGUgZW50cmllcy4KKyAqLworI2RlZmluZSBGVERGX0ZQUFJfVEFCTEVfRVhUX0FERFJFU1NfRU5UUklFUyAgICAgICAgICAgICBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUworCisvKioKKyAqIFxicmllZiBOdW1iZXIgb2Ygc2hvcnQgYWRkcmVzcyB0YWJsZSBlbnRyaWVzLgorICovCisjZGVmaW5lIEZUREZfRlBQUl9UQUJMRV9TSE9SVF9BRERSRVNTX0VOVFJJRVMgICAgICAgICAgIChGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAqIDQpCisKKy8qKgorICogXGJyaWVmIFJlc2V0cyBGUFBSIHRhYmxlLCBpbnZhbGlkYXRpbmcgYWxsIGFkZHJlc3Nlcy4KKyAqLwordm9pZCBGVERGX2ZwcHJSZXNldCh2b2lkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyB0aGUgc2hvcnQgYWRkcmVzcyBwcm9ncmFtbWVkIGF0IHRoZSBzcGVjaWZpZWQgRlBQUiB0YWJsZSBwb3NpdGlvbi4KKyAqCisgKiBccGFyYW0gW2luXSBlbnRyeSBGUFBSIHRhYmxlIGVudHJ5ICgwIHRvIFxyZWYgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMgLSAxKS4KKyAqIFxwYXJhbSBbaW5dIHNob3J0QWRkcklkeCBTaG9ydCBhZGRyZXNzIHBvc2l0aW9uIHdpdGhpbiB0aGUgZW50cnkgKDAgdG8gMykuCisgKgorICogXHJldHVybiBSZXF1ZXN0ZWQgc2hvcnQgYWRkcmVzcworICovCitGVERGX1Nob3J0QWRkcmVzcyBGVERGX2ZwcHJHZXRTaG9ydEFkZHJlc3ModWludDhfdCBlbnRyeSwgdWludDhfdCBzaG9ydEFkZHJJZHgpOworCisvKioKKyAqIFxicmllZiBQcm9ncmFtcyBhIHNob3J0IGFkZHJlc3MgcHJvZ3JhbW1lZCBhdCB0aGUgc3BlY2lmaWVkIEZQUFIgdGFibGUgcG9zaXRpb24uCisgKgorICogXHBhcmFtIFtpbl0gZW50cnkgRlBQUiB0YWJsZSBlbnRyeSAoMCB0byBccmVmIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTIC0gMSkuCisgKiBccGFyYW0gW2luXSBzaG9ydEFkZHJJZHggU2hvcnQgYWRkcmVzcyBwb3NpdGlvbiB3aXRoaW4gdGhlIGVudHJ5ICgwIHRvIDMpLgorICogXHBhcmFtIFtpbl0gQXNzb2NpYXRlZCBzaG9ydCBhZGRyZXNzLgorICovCit2b2lkIEZUREZfZnBwclNldFNob3J0QWRkcmVzcyh1aW50OF90IGVudHJ5LCB1aW50OF90IHNob3J0QWRkcklkeCwKKyAgICAgICAgRlRERl9TaG9ydEFkZHJlc3Mgc2hvcnRBZGRyZXNzKTsKKworLyoqCisgKiBcYnJpZWYgRGV0ZXJtaW5lcyB2YWxpZGl0eSBvZiBhIHNob3J0IGFkZHJlc3MgcHJvZ3JhbW1lZCBhdCB0aGUgc3BlY2lmaWVkIEZQUFIgdGFibGUgcG9zaXRpb24uCisgKgorICogXHBhcmFtIFtpbl0gZW50cnkgRlBQUiB0YWJsZSBlbnRyeSAoMCB0byBccmVmIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTIC0gMSkuCisgKiBccGFyYW0gW2luXSBzaG9ydEFkZHJJZHggU2hvcnQgYWRkcmVzcyBwb3NpdGlvbiB3aXRoaW4gdGhlIGVudHJ5ICgwIHRvIDMpLgorICoKKyAqIFxyZXR1cm4gRlRERl9UUlVFIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLgorICovCitGVERGX0Jvb2xlYW4gRlRERl9mcHByR2V0U2hvcnRBZGRyZXNzVmFsaWQodWludDhfdCBlbnRyeSwgdWludDhfdCBzaG9ydEFkZHJJZHgpOworCisvKioKKyAqIFxicmllZiBTZXRzIHZhbGlkaXR5IG9mIGEgc2hvcnQgYWRkcmVzcyBwcm9ncmFtbWVkIGF0IHRoZSBzcGVjaWZpZWQgRlBQUiB0YWJsZSBwb3NpdGlvbi4KKyAqCisgKiBccGFyYW0gW2luXSBlbnRyeSBGUFBSIHRhYmxlIGVudHJ5ICgwIHRvIFxyZWYgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMgLSAxKS4KKyAqIFxwYXJhbSBbaW5dIHNob3J0QWRkcklkeCBTaG9ydCBhZGRyZXNzIHBvc2l0aW9uIHdpdGhpbiB0aGUgZW50cnkgKDAgdG8gMykuCisgKiBccGFyYW0gW2luXSB2YWxpZCBBc3NvY2lhdGVkIHZhbGlkaXR5LgorICovCit2b2lkIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKHVpbnQ4X3QgZW50cnksIHVpbnQ4X3Qgc2hvcnRBZGRySWR4LAorICAgICAgICBGVERGX0Jvb2xlYW4gdmFsaWQpOworCisvKioKKyAqIFxicmllZiBHZXRzIHRoZSBleHRlbmRlZCBhZGRyZXNzIHByb2dyYW1tZWQgYXQgdGhlIHNwZWNpZmllZCBGUFBSIHRhYmxlIHBvc2l0aW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGVudHJ5IEZQUFIgdGFibGUgZW50cnkgKDAgdG8gXHJlZiBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAtIDEpLgorICoKKyAqIFxyZXR1cm4gUmVxdWVzdGVkIGV4dGVuZGVkIGFkZHJlc3MKKyAqLworRlRERl9FeHRBZGRyZXNzIEZUREZfZnBwckdldEV4dEFkZHJlc3ModWludDhfdCBlbnRyeSk7CisKKy8qKgorICogXGJyaWVmIFByb2dyYW1zIGFuIGV4dGVuZGVkIGFkZHJlc3MgcHJvZ3JhbW1lZCBhdCB0aGUgc3BlY2lmaWVkIEZQUFIgdGFibGUgcG9zaXRpb24uCisgKgorICogXHBhcmFtIFtpbl0gZW50cnkgRlBQUiB0YWJsZSBlbnRyeSAoMCB0byBccmVmIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTIC0gMSkuCisgKiBccGFyYW0gW2luXSBBc3NvY2lhdGVkIGV4dGVuZGVkIGFkZHJlc3MuCisgKi8KK3ZvaWQgRlRERl9mcHByU2V0RXh0QWRkcmVzcyh1aW50OF90IGVudHJ5LCBGVERGX0V4dEFkZHJlc3MgZXh0QWRkcmVzcyk7CisKKy8qKgorICogXGJyaWVmIERldGVybWluZXMgdmFsaWRpdHkgb2YgYW4gZXh0ZW5kZWQgYWRkcmVzcyBwcm9ncmFtbWVkIGF0IHRoZSBzcGVjaWZpZWQgRlBQUiB0YWJsZQorICogcG9zaXRpb24uCisgKgorICogXHBhcmFtIFtpbl0gZW50cnkgRlBQUiB0YWJsZSBlbnRyeSAoMCB0byBccmVmIEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTIC0gMSkuCisgKgorICogXHJldHVybiBccmVmIEZUREZfVFJVRSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBwckdldEV4dEFkZHJlc3NWYWxpZCh1aW50OF90IGVudHJ5KTsKKworLyoqCisgKiBcYnJpZWYgU2V0cyB2YWxpZGl0eSBvZiBhbiBleHRlbmRlZCBhZGRyZXNzIHByb2dyYW1tZWQgYXQgdGhlIHNwZWNpZmllZCBGUFBSIHRhYmxlIHBvc2l0aW9uLgorICoKKyAqIFxwYXJhbSBbaW5dIGVudHJ5IEZQUFIgdGFibGUgZW50cnkgKDAgdG8gXHJlZiBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyAtIDEpLgorICogXHBhcmFtIFtpbl0gdmFsaWQgQXNzb2NpYXRlZCB2YWxpZGl0eS4KKyAqLwordm9pZCBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQodWludDhfdCBlbnRyeSwgRlRERl9Cb29sZWFuIHZhbGlkKTsKKworLyoqCisgKiBcYnJpZWYgR2V0cyBhIGZyZWUgKGludmFsaWQpIHNob3J0IGFkZHJlc3MgcG9zaXRpb24gaW4gdGhlIEZQUFIgdGFibGUuCisgKgorICogXHBhcmFtIFtvdXRdIGVudHJ5IFJlZmVyZW5jZSB0byB0aGUgRlBQUiB0YWJsZSBlbnRyeS4KKyAqIFxwYXJhbSBbb3V0XSBzaG9ydEFkZHJJZHggUmVmZXJlbmNlIHRvIHRoZSBzaG9ydCBhZGRyZXNzIHBvc2l0aW9uIHdpdGhpbiB0aGUgZW50cnkuCisgKgorICogXHJldHVybiBccmVmIEZUREZfVFJVRSBpZiBhIGZyZWUgcG9zaXRpb24gd2FzIGZvdW5kLgorICovCitGVERGX0Jvb2xlYW4gRlRERl9mcHByR2V0RnJlZVNob3J0QWRkcmVzcyh1aW50OF90ICogZW50cnksCisgICAgICAgIHVpbnQ4X3QgKiBzaG9ydEFkZHJJZHgpOworCisvKioKKyAqIFxicmllZiBHZXRzIGEgZnJlZSAoaW52YWxpZCkgZXh0ZW5kZWQgYWRkcmVzcyBwb3NpdGlvbiBpbiB0aGUgRlBQUiB0YWJsZS4KKyAqCisgKiBccGFyYW0gW291dF0gZW50cnkgUmVmZXJlbmNlIHRvIHRoZSBGUFBSIHRhYmxlIGVudHJ5LgorICoKKyAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgaWYgYSBmcmVlIHBvc2l0aW9uIHdhcyBmb3VuZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfZnBwckdldEZyZWVFeHRBZGRyZXNzKHVpbnQ4X3QgKiBlbnRyeSk7CisKKy8qKgorICogXGJyaWVmIExvb2tzIHVwIGEgc2hvcnQgYWRkcmVzcyB3aXRoaW4gdGhlIEZQUFIgdGFibGUuCisgKgorICogXHBhcmFtIFtpbl0gc2hvcnRBZGRyIEFzc29jaWF0ZWQgc2hvcnQgYWRkcmVzcy4KKyAqIFxwYXJhbSBbb3V0XSBlbnRyeSBSZWZlcmVuY2UgdG8gdGhlIEZQUFIgdGFibGUgZW50cnkuCisgKiBccGFyYW0gW291dF0gc2hvcnRBZGRySWR4IFJlZmVyZW5jZSB0byB0aGUgc2hvcnQgYWRkcmVzcyBwb3NpdGlvbiB3aXRoaW4gdGhlIGVudHJ5LgorICoKKyAqICAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgaWYgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kLgorICovCitGVERGX0Jvb2xlYW4gRlRERl9mcHByTG9va3VwU2hvcnRBZGRyZXNzKEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkciwgdWludDhfdCAqIGVudHJ5LAorICAgICAgICB1aW50OF90ICogc2hvcnRBZGRySWR4KTsKKworLyoqCisgKiBcYnJpZWYgTG9va3MgdXAgYW4gZXh0ZW5kZWQgYWRkcmVzcyB3aXRoaW4gdGhlIEZQUFIgdGFibGUuCisgKgorICogXHBhcmFtIFtpbl0gZXh0QWRkciBBc3NvY2lhdGVkIGV4dGVuZGVkIGFkZHJlc3MuCisgKiBccGFyYW0gW291dF0gZW50cnkgUmVmZXJlbmNlIHRvIHRoZSBGUFBSIHRhYmxlIGVudHJ5LgorICoKKyAqICAqIFxyZXR1cm4gXHJlZiBGVERGX1RSVUUgaWYgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kLgorICovCitGVERGX0Jvb2xlYW4gRlRERl9mcHByTG9va3VwRXh0QWRkcmVzcyhGVERGX0V4dEFkZHJlc3MgZXh0QWRkciwgdWludDhfdCAqIGVudHJ5KTsKKworI2VuZGlmIC8qIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPICovCisKKy8qKgorICogXGJyaWVmIFNldHMgRlBQUiBtb2RlLgorICoKKyAqIFxwYXJhbSBbaW5dIG1hdGNoRnAgU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgRlAgYml0IHdoZW4gYWNrbm93bGVkZ2luZyBhIHJlY2VpdmVkIGZyYW1lIHdpdGggYQorICogc291cmNlIGFkZHJlc3MgdGhhdCBtYXRjaGVzIGEgdmFsaWQgYSBhZGRyZXNzIGluIHRoZSBGUFBSIHRhYmxlLiBUaGUgb3Bwb3NpdGUgdmFsdWUgaXMgc2V0IGlmIHRoZQorICogc291cmNlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2guIElnbm9yZWQgaWYgXGEgZnBPdmVycmlkZSBpcyBccmVmIEZUREZfVFJVRS4KKyAqCisgKiBccGFyYW0gW2luXSBmcE92ZXJyaWRlIElmIFxyZWYgRlRERl9UUlVFLCB0aGUgdmFsdWUgb2YgXGEgZnBGb3JjZSBpcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBGUCBiaXQsCisgKiByZWdhcmRsZXNzIG9mIHRoZSBhZGRyZXNzIHRhYmxlIG1hdGNoaW5nIHJlc3VsdC4KKyAqCisgKiBccGFyYW0gW2luXSBmcEZvcmNlIEZQIGJpdCB2YWx1ZSB3aGVuIGZwT3ZlcnJpZGUgaXMgXHJlZiBGVERGX1RSVUUuIElnbm9yZWQgb3RoZXJ3aXNlLgorICovCit2b2lkIEZUREZfZnBwclNldE1vZGUoRlRERl9Cb29sZWFuIG1hdGNoRnAsIEZUREZfQm9vbGVhbiBmcE92ZXJyaWRlLCBGVERGX0Jvb2xlYW4gZnBGb3JjZSk7CisKKyNpZiBGVERGX0ZQX0JJVF9URVNUX01PREUKKy8qKgorICogXGJyaWVmIEdldHMgRlBQUiBtb2RlLgorICoKKyAqIFxwYXJhbSBbb3V0XSBtYXRjaEZwIFJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgdmFsdWUuIFxzZWUgRlRERl9mcHByUmFtU2V0TW9kZQorICoKKyAqIFxwYXJhbSBbb3V0XSBmcE92ZXJyaWRlIFJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgdmFsdWUuIFxzZWUgRlRERl9mcHByUmFtU2V0TW9kZQorICoKKyAqIFxwYXJhbSBbb3V0XSBmcEZvcmNlIEZQIFJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgdmFsdWUuIFxzZWUgRlRERl9mcHByUmFtU2V0TW9kZQorICovCit2b2lkIEZUREZfZnBwckdldE1vZGUoRlRERl9Cb29sZWFuICogbWF0Y2hGcCwgRlRERl9Cb29sZWFuICogZnBPdmVycmlkZSwgRlRERl9Cb29sZWFuICogZnBGb3JjZSk7CisjZW5kaWYgLy9GVERGX0ZQX0JJVF9URVNUX01PREUKKworI2lmIEZUREZfVVNFX0xQRFAgPT0gMQorCisvKioKKyAqIFxicmllZiBFbmFibGUgb3IgZGlzYWJsZSBMUERQLgorICoKKyAqIFxwYXJhbSBbaW5dIGVuYWJsZSBpZiBGVERGX1RSVUUsIExQRFAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLgorICovCit2b2lkIEZUREZfbHBkcEVuYWJsZShGVERGX0Jvb2xlYW4gZW5hYmxlKTsKKworI2lmIEZUREZfRlBfQklUX1RFU1RfTU9ERQorLyoqCisgKiBcYnJpZWYgQ2hlY2tzIHdoZXRoZXIgTFBEUCBpcyBlbmFibGVkLgorICoKKyAqIFxyZXR1cm4gRlRERl9UUlVFLCBpZiBMUERQIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4KKyAqLworRlRERl9Cb29sZWFuIEZUREZfbHBkcElzRW5hYmxlZCh2b2lkKTsKKyNlbmRpZgorCisjZW5kaWYgLyogI2lmIEZUREZfVVNFX0xQRFAgPT0gMSAqLworI2VuZGlmIC8qIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKworI2VuZGlmIC8qIEZUREZfSF8gKi8KKworLyoqCisgKiBcfQorICogXH0KKyAqIFx9CisgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9mdGRmX2NvbmZpZ19waHlfYXBpLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9pbmNsdWRlL2Z0ZGZfY29uZmlnX3BoeV9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGU2OGMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvaW5jbHVkZS9mdGRmX2NvbmZpZ19waHlfYXBpLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBmdGRmX2NvbmZpZ19waHlfYXBpLmgKKyAqCisgKiBAYnJpZWYgRlRERiBQSFkgQVBJIGNvbmZpZ3VyYXRpb24gdGVtcGxhdGUgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBGVERGX0NPTkZJR19QSFlfQVBJX0hfCisjZGVmaW5lIEZUREZfQ09ORklHX1BIWV9BUElfSF8KKworLyoqCisgKiBccmVtYXJrICAgICAgcGh5IGNvbmZpZ3VyYXRpb24gdmFsdWVzIGluIG1pY3Jvc2Vjb25kcworICovCisjZGVmaW5lIEZUREZfUEhZVFhTVEFSVFVQIDB4NGMKKyNkZWZpbmUgRlRERl9QSFlUWExBVEVOQ1kgMHgwMQorI2RlZmluZSBGVERGX1BIWVRYRklOSVNIICAweDAwCisjZGVmaW5lIEZUREZfUEhZVFJYV0FJVCAgIDB4MjAKKyNkZWZpbmUgRlRERl9QSFlSWFNUQVJUVVAgMAorI2RlZmluZSBGVERGX1BIWVJYTEFURU5DWSAwCisjZGVmaW5lIEZUREZfUEhZRU5BQkxFICAgIDB4MjEKKworI2lmbmRlZiBGVERGX0xJVEUKKyNkZWZpbmUgRlRERl9MSVRFCisjZW5kaWYKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfR0VUX01TR19CVUZGRVIgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9HRVRfTVNHX0JVRkZFUiAgICAgICAgYWRfZnRkZl9nZXRNc2dCdWZmZXIKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfUkVMX01TR19CVUZGRVIgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9SRUxfTVNHX0JVRkZFUiAgICAgICAgYWRfZnRkZl9yZWxNc2dCdWZmZXIKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfUkVDX01TRyBpbiBmdGRmLmgKKyAqLworI2RlZmluZSBGVERGX1JDVl9NU0cgICAgICAgICAgICAgICBhZF9mdGRmX3Jjdk1zZworCisvKioKKyAqIFxyZW1hcmsgICAgICBTZWUgRlRERl9HRVRfREFUQV9CVUZGRVIgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9HRVRfREFUQV9CVUZGRVIgICAgICAgYWRfZnRkZl9nZXREYXRhQnVmZmVyCisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX1JFTF9EQVRBX0JVRkZFUiBpbiBmdGRmLmgKKyAqLworI2RlZmluZSBGVERGX1JFTF9EQVRBX0JVRkZFUiAgICAgICBhZF9mdGRmX3JlbERhdGFCdWZmZXIKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfR0VUX0VYVF9BRERSRVNTIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfR0VUX0VYVF9BRERSRVNTICAgICAgIGFkX2Z0ZGZfZ2V0RXh0QWRkcmVzcworCisvKioKKyAqIFxyZW1hcmsgICAgICBTZWUgRlRERl9SQ1ZfRlJBTUVfVFJBTlNQQVJFTlQgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9SQ1ZfRlJBTUVfVFJBTlNQQVJFTlQgRlRERl9yY3ZGcmFtZVRyYW5zcGFyZW50CisKKy8qKgorICogXHJlbWFyayAgICAgIFNlZSBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSBpbiBmdGRmLmgKKyAqLworI2RlZmluZSBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50Q29uZmlybQorCisvKioKKyAqIFxyZW1hcmsgICAgICBTZWUgRlRERl9XQUtFX1VQX1JFQURZIGluIGZ0ZGYuaAorICovCisjZGVmaW5lIEZUREZfV0FLRV9VUF9SRUFEWSAgICAgICAgIGFkX2Z0ZGZfd2FrZVVwUmVhZHkKKworLyoqCisgKiBccmVtYXJrICAgICAgU2VlIEZUREZfU0xFRVBfQ0FMTEJBQ0sgaW4gZnRkZi5oCisgKi8KKyNkZWZpbmUgRlRERl9TTEVFUF9DQUxMQkFDSyAgICAgICAgYWRfZnRkZl9zbGVlcENiCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3ZvaWQgc2xlZXBfd2hlbl9wb3NzaWJsZSggdWludDhfdCBleHBsaWNpdF9yZXF1ZXN0LCB1aW50MzJfdCBzbGVlcFRpbWUgKTsKKworI2RlZmluZSBGVERGX0xNQUNSRUFEWTRTTEVFUF9DQiAgICBzbGVlcF93aGVuX3Bvc3NpYmxlCisKKyNpZm5kZWYgT1NfRlJFRVJUT1MKKyNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIFwKKyAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgICggIiBjcHNpZCBpICIgKTsgXAorICAgICAgICAgICAgICAgIERCR19DT05GSUdVUkVfSElHSChDTU5fVElNSU5HX0RFQlVHLCBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTik7IFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCkgXAorICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICBEQkdfQ09ORklHVVJFX0xPVyhDTU5fVElNSU5HX0RFQlVHLCBDTU5EQkdfQ1JJVElDQUxfU0VDVElPTik7IFwKKyAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSAgKCAiIGNwc2llIGkgIiApOyBcCisgICAgICAgIH0gd2hpbGUgKDApCit2b2lkIHZQb3J0RW50ZXJDcml0aWNhbCggdm9pZCApOwordm9pZCB2UG9ydEV4aXRDcml0aWNhbCggdm9pZCApOworI2VuZGlmCisKKy8qKgorICogXHJlbWFyayAgICAgIENyaXRpY2FsIHNlY3Rpb24KKyAqLworCisKKyNkZWZpbmUgRlRERl9jcml0aWNhbFZhciggKQorI2RlZmluZSBGVERGX2VudGVyQ3JpdGljYWwoICkgdlBvcnRFbnRlckNyaXRpY2FsKCkKKyNkZWZpbmUgRlRERl9leGl0Q3JpdGljYWwoICkgdlBvcnRFeGl0Q3JpdGljYWwoKQorCisjaWZuZGVmIEZUREZfREJHX0JVU19FTkFCTEUKKy8qKgorICogXGJyaWVmIFdoZXRoZXIgRlRERiBkZWJ1ZyBidXMgd2lsbCBiZSBhdmFpbGFibGUgb3Igbm90LgorICoKKyAqIERlZmluZSB0byAwIGZvciBwcm9kdWN0aW9uIHNvZnR3YXJlLgorICoKKyAqIFJlZmVyIHRvIFxyZWYgYWRfZnRkZl9kYmdCdXNHcGlvQ29uZmlnIGZvciB0aGUgR1BJTyBwaW5zIHVzZWQgZm9yIHRoZSBkZWJ1ZyBidXMuCisgKi8KKyNkZWZpbmUgRlRERl9EQkdfQlVTX0VOQUJMRSAgICAgICAgIDAKKyNlbmRpZgorCisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorI2RlZmluZSBGVERGX0RCR19CVVNfR1BJT19DT05GSUcgICBhZF9mdGRmX2RiZ0J1c0dwaW9Db25maWcKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisKKyNpZm5kZWYgRlRERl9VU0VfRlBfUFJPQ0VTU0lOR19SQU0KKy8qKgorICogXGJyaWVmIFdoZXRoZXIgdG8gdXNlIEhXIGFjY2VsZXJhdGlvbiBmb3IgaW5kaXJlY3Qgc2VuZGluZy4KKyAqCisgKiBGZWF0dXJlIGlzIHN1cHBvcnRlZCBhcyBvZiBJQyByZXZpc2lvbiAxNDY4My0wMC4KKyAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNkZWZpbmUgRlRERl9VU0VfRlBfUFJPQ0VTU0lOR19SQU0gICAgICAgICAgICAgIDEKKyNlbHNlCisjZGVmaW5lIEZUREZfVVNFX0ZQX1BST0NFU1NJTkdfUkFNICAgICAgICAgICAgICAwCisjZW5kaWYKKyNlbmRpZiAvKiBGVERGX1VTRV9GUF9QUk9DRVNTSU5HX1JBTSAqLworCisjZW5kaWYgLyogRlRERl9DT05GSUdfUEhZX0FQSV9IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvYWRfZnRkZi5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzgyOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGYuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGZ0ZGYuYworICoKKyAqIEBicmllZiBGVERGIEZyZWVSVE9TIEFkYXB0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0ZUREYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpZm5kZWYgRlRERl9QSFlfQVBJCisjaW5jbHVkZSAib3NhbC5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisKKyNpbmNsdWRlICJzeXNfcG93ZXJfbWdyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImFkX3JmLmgiCisKKyNpbmNsdWRlICJzeXNfdGNzLmgiCisKKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImFkX2Z0ZGYuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ21hcC5oIgorI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKyNpbmNsdWRlICJod19ncGlvLmgiCisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworCisjaWYgRlRERl9EQkdfQkxPQ0tfU0xFRVBfRU5BQkxFCisjaW5jbHVkZSAiaHdfZ3Bpby5oIgorI2VuZGlmCisKKyNpZiBkZ19jb25maWdVU0VfRlRERl9ERFBIWSA9PSAxCisjaW5jbHVkZSAicmFkaW8uaCIKKyNlbmRpZgorCisjZGVmaW5lIFdVUF9MQVRFTkNZICAoQURfRlRERl9MUF9DTE9DS19DWUNMRSAqIEFEX0ZUREZfV1VQX0xBVEVOQ1kpCisKKyNpZmRlZiBGVERGX1BIWV9BUEkKKyNpZm5kZWYgUFJJVklMRUdFRF9EQVRBCisjZGVmaW5lIFBSSVZJTEVHRURfREFUQSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJwcml2aWxlZ2VkX2RhdGFfemkiKSkpCisjZW5kaWYKKyNpZm5kZWYgSU5JVElBTElaRURfUFJJVklMRUdFRF9EQVRBCisjZGVmaW5lIElOSVRJQUxJWkVEX1BSSVZJTEVHRURfREFUQSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJwcml2aWxlZ2VkX2RhdGFfaW5pdCIpKSkKKyNlbmRpZgorI2VuZGlmCisKK1BSSVZJTEVHRURfREFUQSBGVERGX0Jvb2xlYW4gZXhwbGljaXRfc2xlZXA7IC8qID0gRlRERl9GQUxTRTsgKi8KK1BSSVZJTEVHRURfREFUQSBlU2xlZXBTdGF0dXMgc2xlZXBfc3RhdHVzOworCitQUklWSUxFR0VEX0RBVEEgRlRERl9FeHRBZGRyZXNzIHVFeHRBZGRyZXNzOworCitzdGF0aWMgdm9pZCBhZF9mdGRmX3NsZWVwKHZvaWQpCit7CisKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgUkVHX1NFVF9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBGVERGX1NMRUVQKTsgICAgICAgICAgICAgICAgIC8vIGdvIHNsZWVwCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworICAgIHdoaWxlIChSRUdfR0VURihDUkdfVE9QLCBTWVNfU1RBVF9SRUcsIEZUREZfSVNfRE9XTikgPT0gMHgwKSAgICAvLyBkb24ndCBnby1nbyBiZWZvcmUgSSBzbGVlcAorICAgIHsKKyAgICB9CisKKyNpZiBGVERGX0RCR19CTE9DS19TTEVFUF9FTkFCTEUKKyAgICBod19ncGlvX3NldF9pbmFjdGl2ZShGVERGX0RCR19CTE9DS19TTEVFUF9HUElPX1BPUlQsIEZUREZfREJHX0JMT0NLX1NMRUVQX0dQSU9fUElOKTsKKyNlbmRpZgorfQorCit2b2lkIGFkX2Z0ZGZfd2FrZV91cF9pbnRlcm5hbChib29sIHN5bmMpCit7CisgICAgaWYgKHNsZWVwX3N0YXR1cyAhPSBCTE9DS19TTEVFUElORykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisgICAgLyogV2FrZSB1cCBwb3dlciBkb21haW5zICovCisgICAgUkVHX0NMUl9CSVQoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBGVERGX1NMRUVQKTsgICAgICAgICAgICAgICAgIC8vIGdvIHdha2UgdXAKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworCisgICAgd2hpbGUgKFJFR19HRVRGKENSR19UT1AsIFNZU19TVEFUX1JFRywgRlRERl9JU19VUCkgPT0gMHgwKSAgICAgIC8vIGRvbid0IGdvLWdvIGJlZm9yZSBJIHNsZWVwCisgICAgeworICAgIH0KKworI2lmIEZUREZfREJHX0JMT0NLX1NMRUVQX0VOQUJMRQorICAgIGh3X2dwaW9fY29uZmlndXJlX3BpbihGVERGX0RCR19CTE9DS19TTEVFUF9HUElPX1BPUlQsIEZUREZfREJHX0JMT0NLX1NMRUVQX0dQSU9fUElOLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX01PREVfT1VUUFVULCBIV19HUElPX0ZVTkNfR1BJTywgdHJ1ZSk7CisjZW5kaWYKKworICAgIC8qIFBvd2VyIG9uIGFuZCBjb25maWd1cmUgUkYgKi8KKyAgICBhZF9yZl9yZXF1ZXN0X29uKGZhbHNlKTsKKworICAgIC8qIEFwcGx5IHRyaW0gdmFsdWVzICovCisvLyAgICAgICAgc3lzX3Rjc19hcHBseSh0Y3NfZnRkZik7CisKKyAgICBhZF9yZl9yZXF1ZXN0X3JlY29tbWVuZGVkX3NldHRpbmdzKCk7CisKKyAgICBpZiAoc3luYykKKyAgICB7CisgICAgICAgIEZUREZfaW5pdExtYWMoKTsKKyAgICAgICAgc2xlZXBfc3RhdHVzID0gQkxPQ0tfQUNUSVZFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBXYWtlIHVwIEZUREYgYmxvY2sgKi8KKyAgICAgICAgc2xlZXBfc3RhdHVzID0gQkxPQ0tfV0FLSU5HX1VQOworICAgICAgICBGVERGX3dha2VVcCgpOworI2lmIGRlZmluZWQoRlRERl9OT19DU0wpICYmIGRlZmluZWQoRlRERl9OT19UU0NIKQorICAgICAgICBhZF9mdGRmX3dha2VVcFJlYWR5KCk7CisjZW5kaWYKKyAgICB9CisKK30KKwordm9pZCBhZF9mdGRmX3dha2VfdXBfYXN5bmModm9pZCkKK3sKKyAgICBhZF9mdGRmX3dha2VfdXBfaW50ZXJuYWwoZmFsc2UpOworfQorCit2b2lkIGFkX2Z0ZGZfd2FrZV91cF9zeW5jKHZvaWQpCit7CisgICAgYWRfZnRkZl93YWtlX3VwX2ludGVybmFsKHRydWUpOworfQorCit2b2lkIHNsZWVwX3doZW5fcG9zc2libGUodWludDhfdCBleHBsaWNpdF9yZXF1ZXN0LCB1aW50MzJfdCBzbGVlcFRpbWUpCit7CisgICAgRlRERl9Cb29sZWFuIGJsb2NrU2xlZXAgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKCghQURfRlRERl9TTEVFUF9XSEVOX0lETEUgJiYgIWV4cGxpY2l0X3JlcXVlc3QpIHx8IHNsZWVwX3N0YXR1cyAhPSBCTE9DS19BQ1RJVkUpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9VU2VjIHVzOworCisKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisjaWZkZWYgRlRERl9QSFlfQVBJCisKKyAgICBpZiAoZXhwbGljaXRfcmVxdWVzdCAmJiBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCkgPT0gMCkKKyAgICB7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjQ3RybE1hc2sgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLKTsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKmxtYWNSZWFkeTRzbGVlcEV2ZW50ID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EKTsKKworICAgICAgICAvKiBjbGVhciBhIHByZXZpb3VzIGludGVycnVwdCAqLworICAgICAgICAqbG1hY1JlYWR5NHNsZWVwRXZlbnQgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0Q7CisKKyAgICAgICAgLyogRW5hYmxlICh1bm1hc2spIGludGVycnVwdCAqLworICAgICAgICAqbG1hY0N0cmxNYXNrIHw9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTTsKKyAgICAgICAgdXMgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1cyA9IEZUREZfY2FuU2xlZXAoKTsKKyAgICB9CisKKyNlbHNlCisgICAgdXMgPSBGVERGX2NhblNsZWVwKCk7CisjZW5kaWYKKworICAgIC8qIFRyeSB0byBzbGVlcCBhcyBtdWNoIGFzIG5lZWRlZCAoaWYgc2xlZXBUaW1lIGlzIDAsIHRoZW4gc2xlZXAgYXMgbXVjaCBhcyBwb3NzaWJsZSkuCisgICAgICogT3RoZXJ3aXNlLCBzbGVlcCBhcyBtdWNoIGFzIHBvc3NpYmxlLiAqLworICAgIGlmIChleHBsaWNpdF9yZXF1ZXN0ID09IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIGlmIChzbGVlcFRpbWUgJiYgdXMgPiBzbGVlcFRpbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzID0gc2xlZXBUaW1lOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHVzID4gKFdVUF9MQVRFTkNZIC8gMTAwMDAwMCkgKyBBRF9GVERGX1NMRUVQX0NPTVBFTlNBVElPTikKKyAgICB7CisgICAgICAgIC8vIFN1YnRyYWN0IHNsZWVwIGNvbXBlbnNhdGlvbiBmcm9tIHRoZSBzbGVlcCB0aW1lLCBjb21wZW5zYXRpbmcgZm9yIGRlbGF5cworICAgICAgICB1cyAtPSBBRF9GVERGX1NMRUVQX0NPTVBFTlNBVElPTjsKKworICAgICAgICBibG9ja1NsZWVwID0gRlRERl9wcmVwYXJlRm9yU2xlZXAodXMpOworCisgICAgICAgIGlmIChibG9ja1NsZWVwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGVERGIHJlYWR5IHRvIHNsZWVwLCBkaXNhYmxlIGNsb2NrcworICAgICAgICAgICAgc2xlZXBfc3RhdHVzID0gQkxPQ0tfU0xFRVBJTkc7CisgICAgICAgICAgICBleHBsaWNpdF9zbGVlcCA9IGV4cGxpY2l0X3JlcXVlc3Q7CisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKyAgICAgICAgICAgIEZUREZfc2RiRnNtU2xlZXAoKTsKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworI2lmIGRnX2NvbmZpZ1VTRV9GVERGX0REUEhZID09IDEKKyAgICAgICAgICAgIEZUREZfZGRwaHlTYXZlKCk7CisjZW5kaWYgLyogZGdfY29uZmlnVVNFX0ZUREZfRERQSFkgKi8KKyAgICAgICAgICAgIGFkX2Z0ZGZfc2xlZXAoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorICAgICAgICAgICAgRlRERl9zZGJGc21BYm9ydFNsZWVwKCk7CisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisKKyAgICBpZiAoYmxvY2tTbGVlcCkKKyAgICB7CisgICAgICAgIGFkX3JmX3JlcXVlc3Rfb2ZmKGZhbHNlKTsKKyAgICB9Cit9CisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIG9mIEZUREYgYWRhcHRlcgorICovCit2b2lkIGFkX2Z0ZGZfaW5pdCh2b2lkKQoreworICAgIC8qIFdha2UgdXAgcG93ZXIgZG9tYWlucyAqLworICAgIFJFR19DTFJfQklUKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRlRERl9TTEVFUCk7ICAgICAgICAgICAgICAgICAvLyBnbyB3YWtlIHVwCisKKyAgICB3aGlsZSAoUkVHX0dFVEYoQ1JHX1RPUCwgU1lTX1NUQVRfUkVHLCBGVERGX0lTX1VQKSA9PSAweDApICAgICAgLy8gZG9uJ3QgZ28tZ28gYmVmb3JlIEkgc2xlZXAKKyAgICB7CisgICAgfQorCisjaWYgRlRERl9EQkdfQkxPQ0tfU0xFRVBfRU5BQkxFCisgICAgaHdfZ3Bpb19jb25maWd1cmVfcGluKEZUREZfREJHX0JMT0NLX1NMRUVQX0dQSU9fUE9SVCwgRlRERl9EQkdfQkxPQ0tfU0xFRVBfR1BJT19QSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fTU9ERV9PVVRQVVQsIEhXX0dQSU9fRlVOQ19HUElPLCB0cnVlKTsKKyNlbmRpZgorICAgIFJFR19TRVRfQklUKENSR19UT1AsIENMS19SQURJT19SRUcsIEZUREZfTUFDX0VOQUJMRSk7ICAgLy8gb24KKyAgICBSRUdfU0VURihDUkdfVE9QLCBDTEtfUkFESU9fUkVHLCBGVERGX01BQ19ESVYsIDApOyAgICAgIC8vIGRpdmlkZSBieSAxCisKKyAgICAvKiBQb3dlciBvbiBhbmQgY29uZmlndXJlIFJGICovCisgICAgYWRfcmZfcmVxdWVzdF9vbihmYWxzZSk7CisKKyAgICAvKiBBcHBseSB0cmltIHZhbHVlcyAqLworICAgIHN5c190Y3NfYXBwbHkodGNzX2Z0ZGYpOworCisgICAgYWRfcmZfcmVxdWVzdF9yZWNvbW1lbmRlZF9zZXR0aW5ncygpOworCisgICAgRlRERl9zZXRTbGVlcEF0dHJpYnV0ZXMoQURfRlRERl9MUF9DTE9DS19DWUNMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRF9GVERGX1dVUF9MQVRFTkNZKTsKKworI2lmZGVmIEZUREZfUEhZX0FQSQorICAgIGFkX2Z0ZGZfaW5pdF9waHlfYXBpKCk7CisjZWxzZQorICAgIGFkX2Z0ZGZfaW5pdF9tYWNfYXBpKCk7CisjZW5kaWYKK30KKwordm9pZCBhZF9mdGRmX3NsZWVwQ2IoRlRERl9VU2VjIHNsZWVwVGltZSkKK3sKKyAgICBzbGVlcF93aGVuX3Bvc3NpYmxlKEZUREZfVFJVRSwgc2xlZXBUaW1lKTsKKworCit9CisKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCit2b2lkIGFkX2Z0ZGZfZGJnQnVzR3Bpb0NvbmZpZyh2b2lkKQoreworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNCwgSFdfR1BJT19NT0RFX09VVFBVVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DX0ZUREZfRElBRyk7CisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl81LCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfRlRERl9ESUFHKTsKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzYsIEhXX0dQSU9fTU9ERV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQ19GVERGX0RJQUcpOworICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNywgSFdfR1BJT19NT0RFX09VVFBVVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DX0ZUREZfRElBRyk7CisjaWYgRlRERl9EQkdfQlVTX1VTRV9TV0RJT19QSU4KKyAgICAvKgorICAgICAqIE5vdGUgdGhhdCB0aGlzIHBpbiBoYXMgYSBjb25mbGljdCB3aXRoIFNXRC4gRGlzYWJsZSB0aGUgZGVidWdnZXIgaW4gb3JkZXIgdG8gdXNlIHRoaXMKKyAgICAgKiBwaW4uCisgICAgICovCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8wLCBIV19HUElPX1BJTl82LCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfRlRERl9ESUFHKTsKKyNlbmRpZgorICAgIGh3X2dwaW9fc2V0X3Bpbl9mdW5jdGlvbihIV19HUElPX1BPUlRfMCwgSFdfR1BJT19QSU5fNywgSFdfR1BJT19NT0RFX09VVFBVVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdfR1BJT19GVU5DX0ZUREZfRElBRyk7CisjaWYgRlRERl9EQkdfQlVTX1VTRV9HUElPX1AxXzNfUDJfMgorICAgIC8qCisgICAgICogTm90ZSB0aGF0IHRoZXNlIHBpbnMgaGF2ZSBhIGNvbmZsaWN0IHdpdGggdGhlIHBpbnMgdXNlZCBmb3IgVUFSVCBieSBkZWZhdWx0LiBDb25maWd1cmUKKyAgICAgKiBVQVJUIG9uIGRpZmZlcmVudCBwaW5zIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgcGlucyBiZWxvdyBmb3IgZGlhZ25vc3RpY3MuCisgICAgICovCisgICAgaHdfZ3Bpb19zZXRfcGluX2Z1bmN0aW9uKEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl8zLCBIV19HUElPX01PREVfT1VUUFVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV19HUElPX0ZVTkNfRlRERl9ESUFHKTsKKyAgICBod19ncGlvX3NldF9waW5fZnVuY3Rpb24oSFdfR1BJT19QT1JUXzIsIEhXX0dQSU9fUElOXzMsIEhXX0dQSU9fTU9ERV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXX0dQSU9fRlVOQ19GVERGX0RJQUcpOworI2VuZGlmCit9CisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvYWRfZnRkZi5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGRhMmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGYuaApAQCAtMCwwICsxLDkzIEBACisvKioKKyBcYWRkdG9ncm91cCBJTlRFUkZBQ0VTCisgXHsKKyBcYWRkdG9ncm91cCBGVERGCisgXHsKKyAqLworCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAZmlsZSBhZF9mdGRmLmgKKyAqCisgKiBAYnJpZWYgRlRERiBBZGFwdGVyIGludGVybmFsIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIEFEX0ZUREZfSAorI2RlZmluZSBBRF9GVERGX0gKKworI2lmbmRlZiBGVERGX1BIWV9BUEkKKyNpbmNsdWRlICJGcmVlUlRPUy5oIgorI2luY2x1ZGUgInF1ZXVlLmgiCisjaW5jbHVkZSAidGFzay5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJmdGRmLmgiCisjaW5jbHVkZSAiYWRfZnRkZl9jb25maWcuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgQkxPQ0tfQUNUSVZFID0gMCwgQkxPQ0tfU0xFRVBJTkcsIEJMT0NLX1dBS0lOR19VUAorfSBlU2xlZXBTdGF0dXM7CisKK2V4dGVybiBlU2xlZXBTdGF0dXMgc2xlZXBfc3RhdHVzOworZXh0ZXJuIEZUREZfRXh0QWRkcmVzcyB1RXh0QWRkcmVzczsKK2V4dGVybiBGVERGX0Jvb2xlYW4gZXhwbGljaXRfc2xlZXA7CisKK3ZvaWQgYWRfZnRkZl9pbml0X21hY19hcGkodm9pZCk7Cit2b2lkIGFkX2Z0ZGZfaW5pdF9waHlfYXBpKHZvaWQpOworCit2b2lkIGFkX2Z0ZGZfd2FrZV91cF9hc3luYyh2b2lkKTsKK3ZvaWQgYWRfZnRkZl93YWtlX3VwX3N5bmModm9pZCk7CisKK3ZvaWQgc2xlZXBfd2hlbl9wb3NzaWJsZSggdWludDhfdCBleHBsaWNpdF9yZXF1ZXN0LCB1aW50MzJfdCBzbGVlcFRpbWUgKTsKKworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKy8qKgorICogXGJyaWVmIENvbmZpZ3VyZXMgR1BJTyBwaW5zIGZvciB0aGUgRlRERiBkZWJ1ZyBidXMKKyAqCisgKiBEZWJ1ZyBidXMgdXNlcyB0aGUgZm9sbG93aW5nIChmaXhlZCkgR1BJTyBwaW5zOgorICoKKyAqIGJpdCAwOiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNAorICogYml0IDE6IEhXX0dQSU9fUE9SVF8xLCBIV19HUElPX1BJTl81CisgKiBiaXQgMjogSFdfR1BJT19QT1JUXzEsIEhXX0dQSU9fUElOXzYKKyAqIGJpdCAzOiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fNworICogYml0IDQ6IEhXX0dQSU9fUE9SVF8wLCBIV19HUElPX1BJTl82CisgKiBiaXQgNTogSFdfR1BJT19QT1JUXzAsIEhXX0dQSU9fUElOXzcKKyAqIGJpdCA2OiBIV19HUElPX1BPUlRfMSwgSFdfR1BJT19QSU5fMworICogYml0IDc6IEhXX0dQSU9fUE9SVF8yLCBIV19HUElPX1BJTl8zCisgKi8KK3ZvaWQgYWRfZnRkZl9kYmdCdXNHcGlvQ29uZmlnKHZvaWQpOworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2VuZGlmIC8qIEFEX0ZUREZfSCAqLworLyoqCisgXH0KKyBcfQorIFx9CisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmX3BoeV9hcGkuYyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9hZF9mdGRmX3BoeV9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjE5Y2I0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2FkX2Z0ZGZfcGh5X2FwaS5jCkBAIC0wLDAgKzEsMTcxIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgZnRkZi5jCisgKgorICogQGJyaWVmIEZUREYgRnJlZVJUT1MgQWRhcHRlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmZGVmIENPTkZJR19VU0VfRlRERgorCisjaWZkZWYgRlRERl9QSFlfQVBJCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJzZGtfZGVmcy5oIgorI2luY2x1ZGUgImFkX2Z0ZGYuaCIKKyNpbmNsdWRlICJhZF9mdGRmX3BoeV9hcGkuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKyNpbmNsdWRlICJod19ncGlvLmgiCisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworCisjaWZuZGVmIE9TX0ZSRUVSVE9TCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1eENyaXRpY2FsTmVzdGluZyA9IDB4YWFhYWFhYWE7CisKK3ZvaWQgdlBvcnRFbnRlckNyaXRpY2FsKHZvaWQpCit7CisgICAgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOworICAgIHV4Q3JpdGljYWxOZXN0aW5nKys7CisgICAgX19hc20gdm9sYXRpbGUoImRzYiIpOworICAgIF9fYXNtIHZvbGF0aWxlKCJpc2IiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgdlBvcnRFeGl0Q3JpdGljYWwodm9pZCkKK3sKKworICAgIHV4Q3JpdGljYWxOZXN0aW5nLS07CisKKyAgICBpZiAodXhDcml0aWNhbE5lc3RpbmcgPT0gMCkKKyAgICB7CisgICAgICAgIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpOworICAgIH0KK30KKyNlbmRpZiAvKiAhT1NfRlJFRVJUT1MgKi8KKworLyoqCisgKiBAYnJpZWYgZnRkZl9nZW5faXJxIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKKyAqLwordm9pZCBGVERGX0dFTl9IYW5kbGVyKHZvaWQpCit7CisgICAgRlRERl9jb25maXJtTG1hY0ludGVycnVwdCgpOworICAgIEZUREZfZXZlbnRIYW5kbGVyKCk7Cit9CisvKioKKyAqIEBicmllZiBmdGRmX3dha3VwX2lycSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKi8KK3ZvaWQgRlRERl9XQUtFVVBfSGFuZGxlcih2b2lkKQoreworICAgIGFkX2Z0ZGZfd2FrZV91cF9hc3luYygpOworfQorCit2b2lkIGFkX2Z0ZGZfc2V0RXh0QWRkcmVzcyhGVERGX0V4dEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICB1RXh0QWRkcmVzcyA9IGFkZHJlc3M7Cit9CisKK0ZUREZfRXh0QWRkcmVzcyBhZF9mdGRmX2dldEV4dEFkZHJlc3Modm9pZCkKK3sKKyAgICByZXR1cm4gdUV4dEFkZHJlc3M7Cit9CisKK3ZvaWQgYWRfZnRkZl93YWtlVXBSZWFkeSh2b2lkKQoreworfQorCitGVERGX1N0YXR1cyBhZF9mdGRmX3NlbmRfZnJhbWVfc2ltcGxlKEZUREZfRGF0YUxlbmd0aCAgICBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0NoYW5uZWxOdW1iZXIgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QVEkgICAgICAgICAgIHB0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGNzbWFTdXBwcmVzcykKK3sKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICBpZiAoRlRERl90eEluUHJvZ3Jlc3MgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgcmV0dXJuIEZUREZfVFJBTlNQQVJFTlRfT1ZFUkZMT1c7CisgICAgfQorCisgICAgRlRERl90eEluUHJvZ3Jlc3MgPSBGVERGX1RSVUU7CisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworICAgIGlmIChzbGVlcF9zdGF0dXMgPT0gQkxPQ0tfU0xFRVBJTkcpCisgICAgeworICAgICAgICAvKiBXYWtlLXVwIHRoZSBibG9jayAqLworICAgICAgICBhZF9mdGRmX3dha2VfdXBfYXN5bmMoKTsKKyNpZiBGVERGX0RCR19CVVNfRU5BQkxFCisgICAgICAgIEZUREZfY2hlY2tEYmdNb2RlKCk7CisjZW5kaWYgLyogRlRERl9EQkdfQlVTX0VOQUJMRSAqLworICAgICAgICBzbGVlcF9zdGF0dXMgPSBCTE9DS19BQ1RJVkU7CisgICAgfQorCisgICAgcmV0dXJuIEZUREZfc2VuZEZyYW1lU2ltcGxlKGZyYW1lTGVuZ3RoLCBmcmFtZSwgY2hhbm5lbCwgcHRpLCBjc21hU3VwcHJlc3MpOworfQorCisKK3ZvaWQgYWRfZnRkZl9zbGVlcF93aGVuX3Bvc3NpYmxlKEZUREZfQm9vbGVhbiBhbGxvd19kZWZlcnJlZF9zbGVlcCkKK3sKKyAgICBzbGVlcF93aGVuX3Bvc3NpYmxlKGFsbG93X2RlZmVycmVkX3NsZWVwLCAwKTsKK30KKwordm9pZCBhZF9mdGRmX3dha2VfdXAodm9pZCkKK3sKKyAgICBpZiAoc2xlZXBfc3RhdHVzID09IEJMT0NLX1NMRUVQSU5HKQorICAgIHsKKyAgICAgICAgLyogV2FrZS11cCB0aGUgYmxvY2sgKi8KKyAgICAgICAgYWRfZnRkZl93YWtlX3VwX2FzeW5jKCk7CisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorICAgICAgICBGVERGX2NoZWNrRGJnTW9kZSgpOworI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKyAgICAgICAgc2xlZXBfc3RhdHVzID0gQkxPQ0tfQUNUSVZFOworICAgIH0KKworfQorCit2b2lkIGFkX2Z0ZGZfaW5pdF9waHlfYXBpKHZvaWQpCit7CisgICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoRlRERl9XQUtFVVBfSVJRbik7CisgICAgTlZJQ19FbmFibGVJUlEoRlRERl9XQUtFVVBfSVJRbik7CisKKyAgICAvL05WSUNfQ2xlYXJQZW5kaW5nSVJRKEZUREZfR0VOX0lSUW4pOyAgICAvLyBEaXNhYmxlIGZ0ZGYgaW50ZXJydXB0cworICAgIC8vTlZJQ19FbmFibGVJUlEoRlRERl9HRU5fSVJRbik7ICAgICAgICAgIC8vIGZ0ZGYgd2lsbCBiZSBoYW5kbGVkIGJ5IHBvaWxpbmcKKyAgICBzbGVlcF9zdGF0dXMgPSBCTE9DS19BQ1RJVkU7CisjaWZuZGVmIE9TX0ZSRUVSVE9TCisgICAgdXhDcml0aWNhbE5lc3RpbmcgPSAwOworI2VuZGlmCisKKyAgICBGVERGX3Jlc2V0KDEpOworfQorI2VuZGlmIC8qIEZUREZfUEhZX0FQSSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvY29tbW9uLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhMzc5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9jb21tb24uYwpAQCAtMCwwICsxLDU1OTkgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBjb21tb24uYworICoKKyAqIEBicmllZiBDb21tb24gRlRERiBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8ZnRkZi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnbWFwLmgiCisjaW5jbHVkZSAic2RrX2RlZnMuaCIKKworI2lmIGRnX2NvbmZpZ0NPRVhfRU5BQkxFX0NPTkZJRworI2luY2x1ZGUgImh3X2NvZXguaCIKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2b2lkICAgKmFkZHI7CisgICAgdWludDhfdCBzaXplOworICAgIHZvaWQgKCogZ2V0RnVuYykodm9pZCk7CisgICAgdm9pZCAoKiBzZXRGdW5jKSh2b2lkKTsKK30gUElCQXR0cmlidXRlRGVmOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFBJQkF0dHJpYnV0ZURlZiBhdHRyaWJ1dGVEZWZzWyBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTICsgMSBdOworfSBQSUJBdHRyaWJ1dGVUYWJsZTsKKworc3RydWN0IEZUREZfUGliICAgICAgICAgICAgICAgICAgRlRERl9waWIgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisKKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTworI2lmIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04KK3N0YXRpYyBzdHJ1Y3QKK3sKKyAgICBGVERGX0FkZHJlc3NNb2RlICAgICAgICBhZGRyTW9kZTsKKyAgICBGVERGX1BBTklkICAgICAgICAgICAgICBQQU5JZDsKKyAgICBGVERGX0FkZHJlc3MgICAgICAgICAgICBhZGRyOworfSBGVERGX2ZwcHJQZW5kaW5nIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmIC8qIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04gKi8KKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworCisjaWZuZGVmIEZUREZfTElURQorY29uc3QgRlRERl9DaGFubmVsTnVtYmVyICAgICAgICAgcGFnZTBDaGFubmVsc1sgRlRERl9OUl9PRl9DSEFOTkVMUyBdID0KK3sgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYgfTsKK2NvbnN0IEZUREZfQ2hhbm5lbERlc2NyaXB0b3IgICAgIGNoYW5uZWxEZXNjcmlwdG9yc1sgMSBdID0geyB7IDAsIDE2LCAoRlRERl9DaGFubmVsTnVtYmVyICopIHBhZ2UwQ2hhbm5lbHMgfSB9OworY29uc3QgRlRERl9DaGFubmVsRGVzY3JpcHRvckxpc3QgY2hhbm5lbHNTdXBwb3J0ZWQgPSB7IDEsIChGVERGX0NoYW5uZWxEZXNjcmlwdG9yICopIGNoYW5uZWxEZXNjcmlwdG9ycyB9OworI2VuZGlmCisKK2NvbnN0IFBJQkF0dHJpYnV0ZVRhYmxlICAgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlID0KK3sKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRVhURU5ERURfQUREUkVTUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmV4dEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOREVEX0FERFJFU1MgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5leHRBZGRyZXNzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRVhURU5ERURfQUREUkVTUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gRlRERl9nZXRFeHRBZGRyZXNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FWFRFTkRFRF9BRERSRVNTIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldEV4dEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FDS19XQUlUX0RVUkFUSU9OIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5hY2tXYWl0RHVyYXRpb24sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FDS19XQUlUX0RVUkFUSU9OIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FDS19XQUlUX0RVUkFUSU9OIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IEZUREZfZ2V0QWNrV2FpdER1cmF0aW9uLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BQ0tfV0FJVF9EVVJBVElPTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNTT0NJQVRJT05fUEFOX0NPT1JEIF0uYWRkciAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmFzc29jaWF0ZWRQQU5Db29yZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNTT0NJQVRJT05fUEFOX0NPT1JEIF0uc2l6ZSAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmFzc29jaWF0ZWRQQU5Db29yZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BBTl9DT09SRCBdLmdldEZ1bmMgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BBTl9DT09SRCBdLnNldEZ1bmMgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTU09DSUFUSU9OX1BFUk1JVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5hc3NvY2lhdGlvblBlcm1pdCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNTT0NJQVRJT05fUEVSTUlUIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmFzc29jaWF0aW9uUGVybWl0KSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNTT0NJQVRJT05fUEVSTUlUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVNTT0NJQVRJT05fUEVSTUlUIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQVVUT19SRVFVRVNUIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmF1dG9SZXF1ZXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BVVRPX1JFUVVFU1QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuYXV0b1JlcXVlc3QpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BVVRPX1JFUVVFU1QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BVVRPX1JFUVVFU1QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmF0dExpZmVFeHQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JBVFRfTElGRV9FWFQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5iYXR0TGlmZUV4dCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JBVFRfTElGRV9FWFQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JBVFRfTElGRV9FWFQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JBVFRfTElGRV9FWFRfUEVSSU9EUyBdLmFkZHIgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5iYXR0TGlmZUV4dFBlcmlvZHMsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JBVFRfTElGRV9FWFRfUEVSSU9EUyBdLnNpemUgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5iYXR0TGlmZUV4dFBlcmlvZHMpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUX1BFUklPRFMgXS5nZXRGdW5jICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CQVRUX0xJRkVfRVhUX1BFUklPRFMgXS5zZXRGdW5jICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fUEFZTE9BRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmVhY29uUGF5bG9hZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmJlYWNvblBheWxvYWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fUEFZTE9BRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fUEFZTE9BRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fUEFZTE9BRF9MRU5HVEggXS5hZGRyICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmVhY29uUGF5bG9hZExlbmd0aCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQkVBQ09OX1BBWUxPQURfTEVOR1RIIF0uc2l6ZSAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmJlYWNvblBheWxvYWRMZW5ndGgpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fUEFZTE9BRF9MRU5HVEggXS5nZXRGdW5jICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fUEFZTE9BRF9MRU5HVEggXS5zZXRGdW5jICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fT1JERVIgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmVhY29uT3JkZXIsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9PUkRFUiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9PUkRFUiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9PUkRFUiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9UWF9USU1FIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5iZWFjb25UeFRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9UWF9USU1FIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5iZWFjb25UeFRpbWUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fVFhfVElNRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fVFhfVElNRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CU04gXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQlNOLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CU04gXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQlNOKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQlNOIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQlNOIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ09PUkRfRVhURU5ERURfQUREUkVTUyBdLmFkZHIgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmNvb3JkRXh0QWRkcmVzcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ09PUkRfRVhURU5ERURfQUREUkVTUyBdLnNpemUgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmNvb3JkRXh0QWRkcmVzcyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgXS5nZXRGdW5jICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX0VYVEVOREVEX0FERFJFU1MgXS5zZXRGdW5jICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NPT1JEX1NIT1JUX0FERFJFU1MgXS5hZGRyICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5jb29yZFNob3J0QWRkcmVzcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ09PUkRfU0hPUlRfQUREUkVTUyBdLnNpemUgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmNvb3JkU2hvcnRBZGRyZXNzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ09PUkRfU0hPUlRfQUREUkVTUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ09PUkRfU0hPUlRfQUREUkVTUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFNOIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkRTTiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFNOIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkRTTiksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RTTiBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RTTiBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0dUU19QRVJNSVQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5HVFNQZXJtaXQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0dUU19QRVJNSVQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0dUU19QRVJNSVQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0dUU19QRVJNSVQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQkUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubWF4QkUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9CRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tYXhCRSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9CRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9CRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0TWF4QkUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9DU01BX0JBQ0tPRkZTIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tYXhDU01BQmFja29mZnMsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9DU01BX0JBQ0tPRkZTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tYXhDU01BQmFja29mZnMpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQ1NNQV9CQUNLT0ZGUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfQ1NNQV9CQUNLT0ZGUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldE1heENTTUFCYWNrb2ZmcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX1RPVEFMX1dBSVRfVElNRSBdLmFkZHIgICAgICAgICAgICAgID0gJkZUREZfcGliLm1heEZyYW1lVG90YWxXYWl0VGltZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX1RPVEFMX1dBSVRfVElNRSBdLnNpemUgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLm1heEZyYW1lVG90YWxXYWl0VGltZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9UT1RBTF9XQUlUX1RJTUUgXS5nZXRGdW5jICAgICAgICAgICA9IEZUREZfZ2V0TWF4RnJhbWVUb3RhbFdhaXRUaW1lLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfRlJBTUVfVE9UQUxfV0FJVF9USU1FIF0uc2V0RnVuYyAgICAgICAgICAgPSBGVERGX3NldE1heEZyYW1lVG90YWxXYWl0VGltZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX1JFVFJJRVMgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm1heEZyYW1lUmV0cmllcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX1JFVFJJRVMgXS5zaXplICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLm1heEZyYW1lUmV0cmllcyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9SRVRSSUVTIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01BWF9GUkFNRV9SRVRSSUVTIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01JTl9CRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5taW5CRSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUlOX0JFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLm1pbkJFKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUlOX0JFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUlOX0JFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRNaW5CRSwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xJRlNfUEVSSU9EIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5MSUZTUGVyaW9kLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MSUZTX1BFUklPRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MSUZTX1BFUklPRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MSUZTX1BFUklPRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSUZTX1BFUklPRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuU0lGU1BlcmlvZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lGU19QRVJJT0QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lGU19QRVJJT0QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lGU19QRVJJT0QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZgorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fSUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuUEFOSWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9JRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5QQU5JZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9JRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfZ2V0UEFOSWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9JRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0UEFOSWQsCisjaWZuZGVmIEZUREZfTElURQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QUk9NSVNDVU9VU19NT0RFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIucHJvbWlzY3VvdXNNb2RlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QUk9NSVNDVU9VU19NT0RFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIucHJvbWlzY3VvdXNNb2RlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUFJPTUlTQ1VPVVNfTU9ERSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUFJPTUlTQ1VPVVNfTU9ERSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkVTUE9OU0VfV0FJVF9USU1FIF0uYWRkciAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnJlc3BvbnNlV2FpdFRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JFU1BPTlNFX1dBSVRfVElNRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5yZXNwb25zZVdhaXRUaW1lKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkVTUE9OU0VfV0FJVF9USU1FIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUkVTUE9OU0VfV0FJVF9USU1FIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JYX09OX1dIRU5fSURMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5yeE9uV2hlbklkbGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JYX09OX1dIRU5fSURMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5yeE9uV2hlbklkbGUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SWF9PTl9XSEVOX0lETEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgPSBGVERGX2dldFJ4T25XaGVuSWRsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUlhfT05fV0hFTl9JRExFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRSeE9uV2hlbklkbGUsCisjaWZuZGVmIEZUREZfTElURQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TRUNVUklUWV9FTkFCTEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc2VjdXJpdHlFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TRUNVUklUWV9FTkFCTEVEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuc2VjdXJpdHlFbmFibGVkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NIT1JUX0FERFJFU1MgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5zaG9ydEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NIT1JUX0FERFJFU1MgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5zaG9ydEFkZHJlc3MpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSE9SVF9BRERSRVNTIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSE9SVF9BRERSRVNTIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldFNob3J0QWRkcmVzcywKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NVUEVSRlJBTUVfT1JERVIgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5zdXBlcmZyYW1lT3JkZXIsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NVUEVSRlJBTUVfT1JERVIgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NVUEVSRlJBTUVfT1JERVIgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NVUEVSRlJBTUVfT1JERVIgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NZTkNfU1lNQk9MX09GRlNFVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5zeW5jU3ltYm9sT2Zmc2V0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TWU5DX1NZTUJPTF9PRkZTRVQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TWU5DX1NZTUJPTF9PRkZTRVQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TWU5DX1NZTUJPTF9PRkZTRVQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9USU1FU1RBTVBfU1VQUE9SVEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIudGltZXN0YW1wU3VwcG9ydGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9USU1FU1RBTVBfU1VQUE9SVEVEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9USU1FU1RBTVBfU1VQUE9SVEVEIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9USU1FU1RBTVBfU1VQUE9SVEVEIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UUkFOU0FDVElPTl9QRVJTSVNURU5DRV9USU1FIF0uYWRkciAgICAgICAgICAgPSAmRlRERl9waWIudHJhbnNhY3Rpb25QZXJzaXN0ZW5jZVRpbWUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RSQU5TQUNUSU9OX1BFUlNJU1RFTkNFX1RJTUUgXS5zaXplICAgICAgICAgICA9CisgICAgc2l6ZW9mKEZUREZfcGliLnRyYW5zYWN0aW9uUGVyc2lzdGVuY2VUaW1lKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBTlNBQ1RJT05fUEVSU0lTVEVOQ0VfVElNRSBdLmdldEZ1bmMgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBTlNBQ1RJT05fUEVSU0lTVEVOQ0VfVElNRSBdLnNldEZ1bmMgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRU5IX0FDS19XQUlUX0RVUkFUSU9OIF0uYWRkciAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmVuaEFja1dhaXREdXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRU5IX0FDS19XQUlUX0RVUkFUSU9OIF0uc2l6ZSAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmVuaEFja1dhaXREdXJhdGlvbiksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VOSF9BQ0tfV0FJVF9EVVJBVElPTiBdLmdldEZ1bmMgICAgICAgICAgICAgICA9IEZUREZfZ2V0RW5oQWNrV2FpdER1cmF0aW9uLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FTkhfQUNLX1dBSVRfRFVSQVRJT04gXS5zZXRGdW5jICAgICAgICAgICAgICAgPSBGVERGX3NldEVuaEFja1dhaXREdXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSU1QTElDSVRfQlJPQURDQVNUIF0uYWRkciAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmltcGxpY2l0QnJvYWRjYXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9JTVBMSUNJVF9CUk9BRENBU1QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuaW1wbGljaXRCcm9hZGNhc3QpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9JTVBMSUNJVF9CUk9BRENBU1QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBGVERGX2dldEltcGxpY2l0QnJvYWRjYXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9JTVBMSUNJVF9CUk9BRENBU1QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBGVERGX3NldEltcGxpY2l0QnJvYWRjYXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSU1QTEVfQUREUkVTUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc2ltcGxlQWRkcmVzcywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0lNUExFX0FERFJFU1MgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLnNpbXBsZUFkZHJlc3MpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSU1QTEVfQUREUkVTUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSU1QTEVfQUREUkVTUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldFNpbXBsZUFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RJU0NPTk5FQ1RfVElNRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5kaXNjb25uZWN0VGltZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRElTQ09OTkVDVF9USU1FIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmRpc2Nvbm5lY3RUaW1lKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRElTQ09OTkVDVF9USU1FIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRElTQ09OTkVDVF9USU1FIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSk9JTl9QUklPUklUWSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmpvaW5Qcmlvcml0eSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSk9JTl9QUklPUklUWSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmpvaW5Qcmlvcml0eSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0pPSU5fUFJJT1JJVFkgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0pPSU5fUFJJT1JJVFkgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5BU04sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FTTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5BU04pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU04gXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9BU04gXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OT19ITF9CVUZGRVJTIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubm9ITEJ1ZmZlcnMsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX05PX0hMX0JVRkZFUlMgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5ub0hMQnVmZmVycyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX05PX0hMX0JVRkZFUlMgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX05PX0hMX0JVRkZFUlMgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1NMT1RGUkFNRV9UQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5zbG90ZnJhbWVUYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0xPVEZSQU1FX1RBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0xPVEZSQU1FX1RBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0xPVEZSQU1FX1RBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElOS19UQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmxpbmtUYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElOS19UQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElOS19UQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTElOS19UQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNMT1RfVEVNUExBVEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RJTUVTTE9UX1RFTVBMQVRFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNMT1RfVEVNUExBVEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNpZmRlZiBGVERGX05PX1RTQ0gKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVElNRVNMT1RfVEVNUExBVEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbHNlCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RJTUVTTE9UX1RFTVBMQVRFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0VGltZXNsb3RUZW1wbGF0ZSwKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR1NFUVVFTkNFX0lEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkhvcHBpbmdTZXF1ZW5jZUlkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HU0VRVUVOQ0VfSUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuSG9wcGluZ1NlcXVlbmNlSWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HU0VRVUVOQ0VfSUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9IT1BQSU5HU0VRVUVOQ0VfSUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMX1BBR0UgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuY2hhbm5lbFBhZ2UsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NIQU5ORUxfUEFHRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5jaGFubmVsUGFnZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NIQU5ORUxfUEFHRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NIQU5ORUxfUEFHRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX05VTUJFUl9PRl9DSEFOTkVMUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5udW1iZXJPZkNoYW5uZWxzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9OVU1CRVJfT0ZfQ0hBTk5FTFMgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIubnVtYmVyT2ZDaGFubmVscyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX05VTUJFUl9PRl9DSEFOTkVMUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX05VTUJFUl9PRl9DSEFOTkVMUyBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BIWV9DT05GSUdVUkFUSU9OIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5waHlDb25maWd1cmF0aW9uLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QSFlfQ09ORklHVVJBVElPTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIucGh5Q29uZmlndXJhdGlvbiksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BIWV9DT05GSUdVUkFUSU9OIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BIWV9DT05GSUdVUkFUSU9OIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VYVEVOVEVEX0JJVE1BUCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5leHRlbmRlZEJpdG1hcCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRVhURU5URURfQklUTUFQIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmV4dGVuZGVkQml0bWFwKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRVhURU5URURfQklUTUFQIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRVhURU5URURfQklUTUFQIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MRU5HVEggXS5hZGRyICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmhvcHBpbmdTZXF1ZW5jZUxlbmd0aCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MRU5HVEggXS5zaXplICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmhvcHBpbmdTZXF1ZW5jZUxlbmd0aCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RIIF0uZ2V0RnVuYyAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTEVOR1RIIF0uc2V0RnVuYyAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTElTVCBdLmFkZHIgICAgICAgICAgICAgICAgICA9IEZUREZfcGliLmhvcHBpbmdTZXF1ZW5jZUxpc3QsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0hPUFBJTkdfU0VRVUVOQ0VfTElTVCBdLnNpemUgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5ob3BwaW5nU2VxdWVuY2VMaXN0KSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MSVNUIF0uZ2V0RnVuYyAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfSE9QUElOR19TRVFVRU5DRV9MSVNUIF0uc2V0RnVuYyAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9IT1AgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmN1cnJlbnRIb3AsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NVUlJFTlRfSE9QIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5jdXJyZW50SG9wKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9IT1AgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9IT1AgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFdFTExfVElNRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmR3ZWxsVGltZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFdFTExfVElNRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmR3ZWxsVGltZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RXRUxMX1RJTUUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RXRUxMX1RJTUUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9QRVJJT0QgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5DU0xQZXJpb2QsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9QRVJJT0QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5DU0xQZXJpb2QpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfUEVSSU9EIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfUEVSSU9EIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfTUFYX1BFUklPRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQ1NMTWF4UGVyaW9kLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfTUFYX1BFUklPRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQ1NMTWF4UGVyaW9kKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9QRVJJT0QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9QRVJJT0QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0NIQU5ORUxfTUFTSyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkNTTENoYW5uZWxNYXNrLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfQ0hBTk5FTF9NQVNLIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuQ1NMQ2hhbm5lbE1hc2spLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfQ0hBTk5FTF9NQVNLIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfQ0hBTk5FTF9NQVNLIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfRlJBTUVfUEVORElOR19XQUlUX1QgXS5hZGRyICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQ1NMRnJhbWVQZW5kaW5nV2FpdFQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCBdLnNpemUgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5DU0xGcmFtZVBlbmRpbmdXYWl0VCksCisjaWZkZWYgRlRERl9OT19DU0wKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0ZSQU1FX1BFTkRJTkdfV0FJVF9UIF0uZ2V0RnVuYyAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX0ZSQU1FX1BFTkRJTkdfV0FJVF9UIF0uc2V0RnVuYyAgICAgICAgICAgID0gTlVMTCwKKyNlbHNlCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCBdLmdldEZ1bmMgICAgICAgICAgICA9IEZUREZfZ2V0Q3NsRnJhbWVQZW5kaW5nV2FpdFQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9GUkFNRV9QRU5ESU5HX1dBSVRfVCBdLnNldEZ1bmMgICAgICAgICAgICA9IEZUREZfc2V0Q3NsRnJhbWVQZW5kaW5nV2FpdFQsCisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NVUFBPUlRFRCBdLmFkZHIgICAgICAgID0gJkZUREZfcGliLmxvd0VuZXJneVN1cGVyZnJhbWVTdXBwb3J0ZWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TVVBQT1JURUQgXS5zaXplICAgICAgICA9CisgICAgc2l6ZW9mKEZUREZfcGliLmxvd0VuZXJneVN1cGVyZnJhbWVTdXBwb3J0ZWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MT1dfRU5FUkdZX1NVUEVSRlJBTUVfU1VQUE9SVEVEIF0uZ2V0RnVuYyAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MT1dfRU5FUkdZX1NVUEVSRlJBTUVfU1VQUE9SVEVEIF0uc2V0RnVuYyAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MT1dfRU5FUkdZX1NVUEVSRlJBTUVfU1lOQ19JTlRFUlZBTCBdLmFkZHIgICAgPSAmRlRERl9waWIubG93RW5lcmd5U3VwZXJmcmFtZVN5bmNJbnRlcnZhbCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTE9XX0VORVJHWV9TVVBFUkZSQU1FX1NZTkNfSU5URVJWQUwgXS5zaXplICAgID0KKyAgICBzaXplb2YoRlRERl9waWIubG93RW5lcmd5U3VwZXJmcmFtZVN5bmNJbnRlcnZhbCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TWU5DX0lOVEVSVkFMIF0uZ2V0RnVuYyA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xPV19FTkVSR1lfU1VQRVJGUkFNRV9TWU5DX0lOVEVSVkFMIF0uc2V0RnVuYyA9IE5VTEwsCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QRVJGT1JNQU5DRV9NRVRSSUNTIF0uYWRkciAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QRVJGT1JNQU5DRV9NRVRSSUNTIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfUEVSRk9STUFOQ0VfTUVUUklDUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgID0gRlRERl9nZXRMbWFjUG1EYXRhLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QRVJGT1JNQU5DRV9NRVRSSUNTIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVVNFX0VOSEFOQ0VEX0JFQUNPTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnVzZUVuaGFuY2VkQmVjYW9uLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9VU0VfRU5IQU5DRURfQkVBQ09OIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIudXNlRW5oYW5jZWRCZWNhb24pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9VU0VfRU5IQU5DRURfQkVBQ09OIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9VU0VfRU5IQU5DRURfQkVBQ09OIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9JRV9MSVNUIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuRUJJRUxpc3QsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0lFX0xJU1QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5FQklFTGlzdCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0lFX0xJU1QgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0lFX0xJU1QgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0ZJTFRFUklOR19FTkFCTEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5FQkZpbHRlcmluZ0VuYWJsZWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0ZJTFRFUklOR19FTkFCTEVEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5FQkZpbHRlcmluZ0VuYWJsZWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9GSUxURVJJTkdfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9GSUxURVJJTkdfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQlNOIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuRUJTTiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRUJTTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkVCU04pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQlNOIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQlNOIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQl9BVVRPX1NBIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuRUJBdXRvU0EsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0FVVE9fU0EgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5FQkF1dG9TQSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0FVVE9fU0EgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VCX0FVVE9fU0EgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VBQ0tfSUVfTElTVCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5FQWNrSUVMaXN0LAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9FQUNLX0lFX0xJU1QgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuRUFja0lFTGlzdCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VBQ0tfSUVfTElTVCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0VBQ0tfSUVfTElTVCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0tFWV9UQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5rZXlUYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VZX1RBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmtleVRhYmxlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VZX1RBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VZX1RBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfREVWSUNFX1RBQkxFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmRldmljZVRhYmxlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERVZJQ0VfVEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuZGV2aWNlVGFibGUpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERVZJQ0VfVEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERVZJQ0VfVEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TRUNVUklUWV9MRVZFTF9UQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuc2VjdXJpdHlMZXZlbFRhYmxlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TRUNVUklUWV9MRVZFTF9UQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuc2VjdXJpdHlMZXZlbFRhYmxlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfTEVWRUxfVEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0VDVVJJVFlfTEVWRUxfVEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRlJBTUVfQ09VTlRFUiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmZyYW1lQ291bnRlciwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRlJBTUVfQ09VTlRFUiBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLmZyYW1lQ291bnRlciksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVIgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVIgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfU0VDVVJJVFlfTEVWRUwgXS5hZGRyICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tdERhdGFTZWN1cml0eUxldmVsLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX1NFQ1VSSVRZX0xFVkVMIF0uc2l6ZSAgICAgICAgICAgICAgICAgPQorICAgIHNpemVvZihGVERGX3BpYi5tdERhdGFTZWN1cml0eUxldmVsKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9TRUNVUklUWV9MRVZFTCBdLmdldEZ1bmMgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9TRUNVUklUWV9MRVZFTCBdLnNldEZ1bmMgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9LRVlfSURfTU9ERSBdLmFkZHIgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLm10RGF0YUtleUlkTW9kZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTVRfREFUQV9LRVlfSURfTU9ERSBdLnNpemUgICAgICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLm10RGF0YUtleUlkTW9kZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lEX01PREUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lEX01PREUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX1NPVVJDRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tdERhdGFLZXlTb3VyY2UsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX1NPVVJDRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tdERhdGFLZXlTb3VyY2UpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9TT1VSQ0UgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9TT1VSQ0UgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NVF9EQVRBX0tFWV9JTkRFWCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubXREYXRhS2V5SW5kZXgsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lOREVYIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tdERhdGFLZXlJbmRleCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lOREVYIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01UX0RBVEFfS0VZX0lOREVYIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RFRkFVTFRfS0VZX1NPVVJDRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5kZWZhdWx0S2V5U291cmNlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9ERUZBVUxUX0tFWV9TT1VSQ0UgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuZGVmYXVsdEtleVNvdXJjZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RFRkFVTFRfS0VZX1NPVVJDRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0RFRkFVTFRfS0VZX1NPVVJDRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9DT09SRF9FWFRFTkRFRF9BRERSRVNTIF0uYWRkciAgICAgICAgICAgICA9ICZGVERGX3BpYi5QQU5Db29yZEV4dEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9DT09SRF9FWFRFTkRFRF9BRERSRVNTIF0uc2l6ZSAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5QQU5Db29yZEV4dEFkZHJlc3MpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfRVhURU5ERURfQUREUkVTUyBdLmdldEZ1bmMgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfRVhURU5ERURfQUREUkVTUyBdLnNldEZ1bmMgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QQU5fQ09PUkRfU0hPUlRfQUREUkVTUyBdLmFkZHIgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuUEFOQ29vcmRTaG9ydEFkZHJlc3MsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9DT09SRF9TSE9SVF9BRERSRVNTIF0uc2l6ZSAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5QQU5Db29yZFNob3J0QWRkcmVzcyksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9DT09SRF9TSE9SVF9BRERSRVNTIF0uZ2V0RnVuYyAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BBTl9DT09SRF9TSE9SVF9BRERSRVNTIF0uc2V0RnVuYyAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVJfTU9ERSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5mcmFtZUNvdW50ZXJNb2RlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9GUkFNRV9DT1VOVEVSX01PREUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuZnJhbWVDb3VudGVyTW9kZSksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVJfTU9ERSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0ZSQU1FX0NPVU5URVJfTU9ERSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9TWU5DX1RYX01BUkdJTiBdLmFkZHIgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5DU0xTeW5jVHhNYXJnaW4sCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NTTF9TWU5DX1RYX01BUkdJTiBdLnNpemUgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5DU0xTeW5jVHhNYXJnaW4pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfU1lOQ19UWF9NQVJHSU4gXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfU1lOQ19UWF9NQVJHSU4gXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfTUFYX0FHRV9SRU1PVEVfSU5GTyBdLmFkZHIgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuQ1NMTWF4QWdlUmVtb3RlSW5mbywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1NMX01BWF9BR0VfUkVNT1RFX0lORk8gXS5zaXplICAgICAgICAgICAgICAgID0gc2l6ZW9mKEZUREZfcGliLkNTTE1heEFnZVJlbW90ZUluZm8pLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfTUFYX0FHRV9SRU1PVEVfSU5GTyBdLmdldEZ1bmMgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DU0xfTUFYX0FHRV9SRU1PVEVfSU5GTyBdLnNldEZ1bmMgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UU0NIX0VOQUJMRUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIudHNjaEVuYWJsZWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfRU5BQkxFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjaWZkZWYgRlRERl9OT19DU0wKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfRU5BQkxFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmxlRW5hYmxlZCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfRU5BQkxFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbHNlCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0VOQUJMRUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5sZUVuYWJsZWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0xFX0VOQUJMRUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5sZUVuYWJsZWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MRV9FTkFCTEVEIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9MRV9FTkFCTEVEIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldExlRW5hYmxlZCwKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9DSEFOTkVMIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmN1cnJlbnRDaGFubmVsLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX0NIQU5ORUwgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIuY3VycmVudENoYW5uZWwpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX0NIQU5ORUwgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgPSBGVERGX2dldEN1cnJlbnRDaGFubmVsLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX0NIQU5ORUwgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldEN1cnJlbnRDaGFubmVsLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0hBTk5FTFNfU1VQUE9SVEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgID0gKHZvaWQgKikgJmNoYW5uZWxzU3VwcG9ydGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMU19TVVBQT1JURUQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMU19TVVBQT1JURUQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DSEFOTkVMU19TVVBQT1JURUQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFhfUE9XRVJfVE9MRVJBTkNFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlRYUG93ZXJUb2xlcmFuY2UsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSX1RPTEVSQU5DRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5UWFBvd2VyVG9sZXJhbmNlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFhfUE9XRVJfVE9MRVJBTkNFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFhfUE9XRVJfVE9MRVJBTkNFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFhfUE9XRVIgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlRYUG93ZXIsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RYX1BPV0VSIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5UWFBvd2VyKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFhfUE9XRVIgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFhfUE9XRVIgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0NBX01PREUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkNDQU1vZGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0NDQV9NT0RFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5DQ0FNb2RlKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0NBX01PREUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ0NBX01PREUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9zZXRUWFBvd2VyLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQ1VSUkVOVF9QQUdFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmN1cnJlbnRQYWdlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX1BBR0UgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX1BBR0UgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9DVVJSRU5UX1BBR0UgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NQVhfRlJBTUVfRFVSQVRJT04gXS5hZGRyICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubWF4RnJhbWVEdXJhdGlvbiwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX0RVUkFUSU9OIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX0RVUkFUSU9OIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUFYX0ZSQU1FX0RVUkFUSU9OIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfU0hSX0RVUkFUSU9OIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLlNIUkR1cmF0aW9uLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSFJfRFVSQVRJT04gXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSFJfRFVSQVRJT04gXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9TSFJfRFVSQVRJT04gXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBRkZJQ19DT1VOVEVSUyBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLnRyYWZmaWNDb3VudGVycywKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBRkZJQ19DT1VOVEVSUyBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFJBRkZJQ19DT1VOVEVSUyBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgID0gRlRERl9nZXRMbWFjVHJhZmZpY0NvdW50ZXJzLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9UUkFGRklDX0NPVU5URVJTIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2lmbmRlZiBGVERGX0xJVEUKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfQ0FQQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkxFQ2FwYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfQ0FQQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfQ0FQQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTEVfQ0FQQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTExfQ0FQQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkxMQ2FwYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTExfQ0FQQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTExfQ0FQQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTExfQ0FQQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfRFNNRV9DQVBBQkxFIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLkRTTUVDYXBhYmxlLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EU01FX0NBUEFCTEUgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EU01FX0NBUEFCTEUgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9EU01FX0NBUEFCTEUgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SRklEX0NBUEFCTEUgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuUkZJRENhcGFibGUsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JGSURfQ0FQQUJMRSBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JGSURfQ0FQQUJMRSBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JGSURfQ0FQQUJMRSBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0FNQ0FfQ0FQQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5BTUNBQ2FwYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQU1DQV9DQVBBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQU1DQV9DQVBBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfQU1DQV9DQVBBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfQ0FQQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5tZXRyaWNzQ2FwYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUVUUklDU19DQVBBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUVUUklDU19DQVBBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfTUVUUklDU19DQVBBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1JBTkdJTkdfU1VQUE9SVEVEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5yYW5naW5nU3VwcG9ydGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SQU5HSU5HX1NVUFBPUlRFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SQU5HSU5HX1NVUFBPUlRFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9SQU5HSU5HX1NVUFBPUlRFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfS0VFUF9QSFlfRU5BQkxFRCBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgID0gJkZUREZfcGliLmtlZXBQaHlFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9LRUVQX1BIWV9FTkFCTEVEIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgPSBzaXplb2YoRlRERl9waWIua2VlcFBoeUVuYWJsZWQpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9LRUVQX1BIWV9FTkFCTEVEIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBGVERGX2dldEtlZXBQaHlFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9LRUVQX1BIWV9FTkFCTEVEIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldEtlZXBQaHlFbmFibGVkLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9NRVRSSUNTX0VOQUJMRUQgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIubWV0cmljc0VuYWJsZWQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfRU5BQkxFRCBdLnNpemUgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfRU5BQkxFRCBdLmdldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX01FVFJJQ1NfRU5BQkxFRCBdLnNldEZ1bmMgICAgICAgICAgICAgICAgICAgICA9IE5VTEwsCisjaWZuZGVmIEZUREZfTElURQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CRUFDT05fQVVUT19SRVNQT05EIF0uYWRkciAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYmVhY29uQXV0b1Jlc3BvbmQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9BVVRPX1JFU1BPTkQgXS5zaXplICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5iZWFjb25BdXRvUmVzcG9uZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9BVVRPX1JFU1BPTkQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JFQUNPTl9BVVRPX1JFU1BPTkQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTQ0hfQ0FQQUJMRSBdLmFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi50c2NoQ2FwYWJsZSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNDSF9DQVBBQkxFIF0uc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNDSF9DQVBBQkxFIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNDSF9DQVBBQkxFIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNfU1lOQ19DT1JSRUNUX1RIUkVTSE9MRCBdLmFkZHIgICAgICAgICAgICAgID0gJkZUREZfcGliLnRzU3luY0NvcnJlY3RUaHJlc2hvbGQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1RTX1NZTkNfQ09SUkVDVF9USFJFU0hPTEQgXS5zaXplICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi50c1N5bmNDb3JyZWN0VGhyZXNob2xkKSwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNfU1lOQ19DT1JSRUNUX1RIUkVTSE9MRCBdLmdldEZ1bmMgICAgICAgICAgID0gTlVMTCwKKyAgICAuYXR0cmlidXRlRGVmc1sgRlRERl9QSUJfVFNfU1lOQ19DT1JSRUNUX1RIUkVTSE9MRCBdLnNldEZ1bmMgICAgICAgICAgID0gTlVMTCwKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9CT19JUlFfVEhSRVNIT0xEIF0uYWRkciAgICAgICAgICAgICAgICAgICAgICAgPSAmRlRERl9waWIuYm9JcnFUaHJlc2hvbGQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JPX0lSUV9USFJFU0hPTEQgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5ib0lycVRocmVzaG9sZCksCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JPX0lSUV9USFJFU0hPTEQgXS5nZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IEZUREZfZ2V0Qm9JcnFUaHJlc2hvbGQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX0JPX0lSUV9USFJFU0hPTEQgXS5zZXRGdW5jICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2V0Qm9JcnFUaHJlc2hvbGQsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BUSV9DT05GSUcgXS5hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZGVERGX3BpYi5wdGlDb25maWcsCisgICAgLmF0dHJpYnV0ZURlZnNbIEZUREZfUElCX1BUSV9DT05GSUcgXS5zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNpemVvZihGVERGX3BpYi5wdGlDb25maWcpLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QVElfQ09ORklHIF0uZ2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5hdHRyaWJ1dGVEZWZzWyBGVERGX1BJQl9QVElfQ09ORklHIF0uc2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3NldFB0aUNvbmZpZywKKyNlbmRpZiAvKiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCit9OworCitGVERGX0Jvb2xlYW4gICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitGVERGX0JpdG1hcDMyICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjaWYgRlRERl9EQkdfQlVTX0VOQUJMRQorRlRERl9EYmdNb2RlICAgICAgICBGVERGX2RiZ01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmCisjaWYgZGdfY29uZmlnVVNFX0ZUREZfRERQSFkgPT0gMQordWludDE2X3QgICAgICAgICAgICBGVERGX2RkcGh5Q2NhUmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmCisjaWZuZGVmIEZUREZfTElURQorRlRERl9CdWZmZXIgICAgICAgICBGVERGX3JlcUJ1ZmZlcnNbIEZUREZfTlJfT0ZfUkVRX0JVRkZFUlMgXSAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9RdWV1ZSAgICAgICAgICBGVERGX3JlcVF1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9RdWV1ZSAgICAgICAgICBGVERGX2ZyZWVRdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9QZW5kaW5nICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIEZUREZfTlJfT0ZfUkVRX0JVRkZFUlMgXSAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9QZW5kaW5nVEwgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyTGlzdFsgRlRERl9OUl9PRl9SRVFfQlVGRkVSUyBdIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9QZW5kaW5nVEwgICAgICpGVERGX3R4UGVuZGluZ1RpbWVySGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9UaW1lICAgICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9UaW1lICAgICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyNpZm5kZWYgRlRERl9QSFlfQVBJCitGVERGX01zZ0J1ZmZlciAgICAgKkZUREZfcmVxQ3VycmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjZW5kaWYKK0ZUREZfU2l6ZSAgICAgICAgICAgRlRERl9uck9mUmV0cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorc3RhdGljIEZUREZfU2RiICAgICBGVERGX3NkYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisjaWZuZGVmIEZUREZfTElURQorRlRERl9Cb29sZWFuICAgICAgICBGVERGX2lzUEFOQ29vcmRpbmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9UaW1lICAgICAgICAgICBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworRlRERl9SeEFkZHJlc3NBZG1pbiBGVERGX3J4YVsgRlRERl9OUl9PRl9SWF9BRERSUyBdICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KK0ZUREZfQm9vbGVhbiAgICAgICAgRlRERl90eEluUHJvZ3Jlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fQ1NMCitGVERGX1BlZXJDc2xUaW1pbmcgIEZUREZfcGVlckNzbFRpbWluZ1sgRlRERl9OUl9PRl9DU0xfUEVFUlMgXSAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitGVERGX0Jvb2xlYW4gICAgICAgIEZUREZfb2xkTGVFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitGVERGX1RpbWUgICAgICAgICAgIEZUREZfcnpUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitGVERGX1Nob3J0QWRkcmVzcyAgIEZUREZfc2VuZEZyYW1lUGVuZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCit1aW50MzJfdCAgICAgICAgICAgIEZUREZfY3VyVGltZVsgMiBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitGVERGX0xtYWNDb3VudGVycyAgIEZUREZfbG1hY0NvdW50ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitGVERGX0ZyYW1lSGVhZGVyICAgIEZUREZfZmg7CisjaWZuZGVmIEZUREZfTElURQorRlRERl9TZWN1cml0eUhlYWRlciBGVERGX3NoOworRlRERl9Bc3NvY0FkbWluICAgICBGVERGX2FhOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworI2lmIEZUREZfVVNFX1BUSQorLyogUGFja2V0IHRyYWZmaWMgaW5mb3JtYXRpb24gdXNlZCB3aGVuIEZUREYgaXMgaW4gUlggZW5hYmxlLiAqLworc3RhdGljIEZUREZfUFRJICBGVERGX1J4UHRpIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworI2VuZGlmCitzdGF0aWMgdm9pZCBzZW5kQ29uZmlybShGVERGX1N0YXR1cyBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX01zZ0lkICBtc2dJZCk7CisKK3ZvaWQgRlRERl9yZXNldChpbnQgc2V0RGVmYXVsdFBJQikKK3sKKyAgICBpZiAoc2V0RGVmYXVsdFBJQikKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IFBJQiB2YWx1ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgbWVtc2V0KCZGVERGX3BpYiwgMCwgc2l6ZW9mKEZUREZfcGliKSk7CisKKyAgICAgICAgRlRERl9waWIuZXh0QWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9HRVRfRVhUX0FERFJFU1MoKTsKKyAgICAgICAgRlRERl9waWIuYWNrV2FpdER1cmF0aW9uICAgICAgICAgICAgICAgICAgID0gMHgzNjsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfcGliLmF1dG9SZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfVFJVRTsKKyAgICAgICAgRlRERl9waWIuYmVhY29uT3JkZXIgICAgICAgICAgICAgICAgICAgICAgID0gMTU7CisgICAgICAgIEZUREZfcGliLkRTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfcGliLmV4dEFkZHJlc3MgJiAweGZmOworICAgICAgICBGVERGX3BpYi5CU04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3BpYi5leHRBZGRyZXNzICYgMHhmZjsKKyAgICAgICAgRlRERl9waWIuRUJTTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9waWIuZXh0QWRkcmVzcyAmIDB4ZmY7CisgICAgICAgIEZUREZfcGliLmNvb3JkU2hvcnRBZGRyZXNzICAgICAgICAgICAgICAgICA9IDB4ZmZmZjsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgICAgIEZUREZfcGliLm1heEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDU7CisgICAgICAgIEZUREZfcGliLm1heENTTUFCYWNrb2ZmcyAgICAgICAgICAgICAgICAgICA9IDQ7CisgICAgICAgIEZUREZfcGliLm1heEZyYW1lVG90YWxXYWl0VGltZSAgICAgICAgICAgICA9IDEwMjY7IC8vIHNlZSBhc2ljX3ZvbCB2NDAuMTAwLjIuMzAgUFIyNTQwCisgICAgICAgIEZUREZfcGliLm1heEZyYW1lUmV0cmllcyAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgICAgIEZUREZfcGliLm1pbkJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDM7CisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX3BpYi5MSUZTUGVyaW9kICAgICAgICAgICAgICAgICAgICAgICAgPSA0MDsKKyAgICAgICAgRlRERl9waWIuU0lGU1BlcmlvZCAgICAgICAgICAgICAgICAgICAgICAgID0gMTI7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICBGVERGX3BpYi5QQU5JZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGZmZmY7CisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX3BpYi5yZXNwb25zZVdhaXRUaW1lICAgICAgICAgICAgICAgICAgPSAzMjsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgICAgIEZUREZfcGliLnNob3J0QWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICA9IDB4ZmZmZjsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfcGliLnN1cGVyZnJhbWVPcmRlciAgICAgICAgICAgICAgICAgICA9IDE1OworICAgICAgICBGVERGX3BpYi50aW1lc3RhbXBTdXBwb3J0ZWQgICAgICAgICAgICAgICAgPSBGVERGX1RSVUU7CisgICAgICAgIEZUREZfcGliLnRyYW5zYWN0aW9uUGVyc2lzdGVuY2VUaW1lICAgICAgICA9IDB4MWY0OworICAgICAgICBGVERGX3BpYi5lbmhBY2tXYWl0RHVyYXRpb24gICAgICAgICAgICAgICAgPSAweDM2MDsKKyAgICAgICAgRlRERl9waWIuRUJBdXRvU0EgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9BVVRPX0ZVTEw7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICBGVERGX3BpYi5jdXJyZW50Q2hhbm5lbCAgICAgICAgICAgICAgICAgICAgPSAxMTsKKyAgICAgICAgRlRERl9waWIuQ0NBTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9DQ0FfTU9ERV8xOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9waWIubWF4RnJhbWVEdXJhdGlvbiAgICAgICAgICAgICAgICAgID0gRlRERl9UQkQ7CisgICAgICAgIEZUREZfcGliLlNIUkR1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfVEJEOworICAgICAgICBGVERGX3BpYi5mcmFtZUNvdW50ZXJNb2RlICAgICAgICAgICAgICAgICAgPSA0OworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgRlRERl9waWIubWV0cmljc0NhcGFibGUgICAgICAgICAgICAgICAgICAgID0gRlRERl9UUlVFOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9waWIuYmVhY29uQXV0b1Jlc3BvbmQgICAgICAgICAgICAgICAgID0gRlRERl9UUlVFOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLmNvdW50ZXJPY3RldHMgID0gNDsgLy8gMzIgYml0IGNvdW50ZXJzCisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX3BpYi5qb2luUHJpb3JpdHkgICAgICAgICAgICAgICAgICAgICAgPSAxOworICAgICAgICBGVERGX3BpYi5zbG90ZnJhbWVUYWJsZS5zbG90ZnJhbWVFbnRyaWVzICAgPSBGVERGX3Nsb3RmcmFtZVRhYmxlOworICAgICAgICBGVERGX3BpYi5saW5rVGFibGUubGlua0VudHJpZXMgICAgICAgICAgICAgPSBGVERGX2xpbmtUYWJsZTsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c0NDQU9mZnNldCAgICAgID0gMTgwMDsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c0NDQSAgICAgICAgICAgID0gMTI4OworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzVHhPZmZzZXQgICAgICAgPSAyMTIwOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzUnhPZmZzZXQgICAgICAgPSAxMDIwOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzUnhBY2tEZWxheSAgICAgPSA4MDA7CisgICAgICAgIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNUeEFja0RlbGF5ICAgICA9IDEwMDA7CisgICAgICAgIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNSeFdhaXQgICAgICAgICA9IDIyMDA7CisgICAgICAgIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNBY2tXYWl0ICAgICAgICA9IDQwMDsKKyAgICAgICAgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1J4VHggICAgICAgICAgID0gMTkyOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzTWF4QWNrICAgICAgICAgPSAyNDAwOworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzTWF4VHMgICAgICAgICAgPSA0MjU2OworICAgICAgICBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzVGltZXNsb3RMZW5ndGggPSAxMDAwMDsKKyAgICAgICAgRlRERl9waWIudHNTeW5jQ29ycmVjdFRocmVzaG9sZCAgICAgICAgICAgID0gMjIwOworICAgICAgICBGVERGX3BpYi5ob3BwaW5nU2VxdWVuY2VMZW5ndGggICAgICAgICAgICAgPSAxNjsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisgICAgICAgIGludCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX1BUSVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIucHRpQ29uZmlnLnB0aXNbaV0gPSAwOworICAgICAgICB9CisKKyNlbmRpZgorI2lmZGVmIEZUREZfTk9fQ1NMCisgICAgICAgIEZUREZfcGliLkxFQ2FwYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfRkFMU0U7CisjZWxzZQorICAgICAgICBGVERGX3BpYi5MRUNhcGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX1RSVUU7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyNpZmRlZiBGVERGX05PX1RTQ0gKKyAgICAgICAgRlRERl9waWIudHNjaENhcGFibGUgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9GQUxTRTsKKyNlbHNlCisgICAgICAgIEZUREZfcGliLnRzY2hDYXBhYmxlICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfVFJVRTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworICAgICAgICBpbnQgbjsKKworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9NQVhfSE9QUElOR19TRVFVRU5DRV9MRU5HVEg7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIuaG9wcGluZ1NlcXVlbmNlTGlzdFsgbiBdID0gbiArIDExOworICAgICAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICAgICAgRlRERl90cmFuc3BhcmVudE1vZGUgID0gRlRERl9GQUxTRTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfaXNQQU5Db29yZGluYXRvciA9IEZUREZfRkFMU0U7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICBGVERGX2xtYWNDb3VudGVycy5mY3NFcnJvckNudCA9IDA7CisgICAgICAgIEZUREZfbG1hY0NvdW50ZXJzLnR4U3RkQWNrQ250ID0gMDsKKyAgICAgICAgRlRERl9sbWFjQ291bnRlcnMucnhTdGRBY2tDbnQgPSAwOworCisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBtZW1zZXQoRlRERl9waWIuZGVmYXVsdEtleVNvdXJjZSwgMHhmZiwgOCk7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICAgICAgRlRERl9waWIuYm9JcnFUaHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX0JPX0lSUV9USFJFU0hPTEQ7CisjZW5kaWYgLyogI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EgKi8KKyAgICB9CisKKyAgICBGVERGX2luaXRRdWV1ZXMoKTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjUmVzZXQgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0xNQUNSRVNFVCk7CisgICAgKmxtYWNSZXNldCA9IE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQ7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqY29udHJvbFN0YXR1cyA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUyk7CisgICAgdWludDMyX3QgICAgICAgICAgIHdhaXQgICAgICAgICAgPSAwOworCisgICAgd2hpbGUgKCgqY29udHJvbFN0YXR1cyAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVApID09IDApCisgICAgeworICAgICAgICB3YWl0Kys7CisgICAgfQorCisgICAgdm9sYXRpbGUgdWludDMyX3QgKndha2V1cFRpbWVyRW5hYmxlU3RhdHVzID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTKTsKKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICBGVERGX1NFVF9GSUVMRChBTFdBWVNfT05fUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFLCAwKTsKKworI2Vsc2UKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX0NMRUFSLCAxKTsKKyNlbmRpZgorCisgICAgd2hpbGUgKCp3YWtldXBUaW1lckVuYWJsZVN0YXR1cyAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUykKKyAgICB7IH0KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWID09IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICBGVERGX1NFVF9GSUVMRChBTFdBWVNfT05fUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFLCAxKTsKKworI2Vsc2UKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX1NFVCwgMSk7CisjZW5kaWYKKworICAgIHdoaWxlICgoKndha2V1cFRpbWVyRW5hYmxlU3RhdHVzICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTKSA9PSAwKQorICAgIHsgfQorCisjaWZuZGVmIEZUREZfTElURQorICAgIGludCBuOworCisjaWZuZGVmIEZUREZfTk9fQ1NMCisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9DU0xfUEVFUlM7IG4rKykKKyAgICB7CisgICAgICAgIEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLmFkZHIgPSAweGZmZmY7CisgICAgfQorCisgICAgRlRERl9vbGRMZUVuYWJsZWQgICAgID0gRlRERl9GQUxTRTsKKyAgICBGVERGX3dha2VVcEVuYWJsZUxlICAgPSBGVERGX0ZBTFNFOworICAgIEZUREZfc2VuZEZyYW1lUGVuZGluZyA9IDB4ZmZmZTsKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX3R4SW5Qcm9ncmVzcyAgICAgPSBGVERGX0ZBTFNFOworCisgICAgRlRERl9pbml0Q3VyVGltZTY0KCk7CisjaWZuZGVmIEZUREZfTk9fVFNDSAorICAgIEZUREZfaW5pdFRzY2hSZXRyaWVzKCk7CisgICAgRlRERl9pbml0QmFja29mZigpOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisjaWZuZGVmIEZUREZfTElURQorCisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfUlhfQUREUlM7IG4rKykKKyAgICB7CisgICAgICAgIEZUREZfcnhhWyBuIF0uYWRkck1vZGUgID0gRlRERl9OT19BRERSRVNTOworICAgICAgICBGVERGX3J4YVsgbiBdLmRzblZhbGlkICA9IEZUREZfRkFMU0U7CisgICAgICAgIEZUREZfcnhhWyBuIF0uYnNuVmFsaWQgID0gRlRERl9GQUxTRTsKKyAgICAgICAgRlRERl9yeGFbIG4gXS5lYnNuVmFsaWQgPSBGVERGX0ZBTFNFOworICAgIH0KKworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX05FSUdIQk9SUzsgbisrKQorICAgIHsKKyAgICAgICAgRlRERl9uZWlnaGJvclRhYmxlWyBuIF0uZHN0QWRkciA9IDB4ZmZmZjsKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKyAgICBGVERGX3NkYkZzbVJlc2V0KCk7CisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICBGVERGX2luaXRMbWFjKCk7CisKKyNpZm5kZWYgRlRERl9OT19DU0wKKyAgICBGVERGX3J6VGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworCisjaWYgZGdfY29uZmlnVVNFX0ZUREZfRERQSFkgPT0gMQorICAgIEZUREZfZGRwaHlTZXQoMCk7CisjZW5kaWYKK30KKworI2lmbmRlZiBGVERGX1BIWV9BUEkKK3ZvaWQgRlRERl9wcm9jZXNzUmVzZXRSZXF1ZXN0KEZUREZfUmVzZXRSZXF1ZXN0ICpyZXNldFJlcXVlc3QpCit7CisKKyAgICBGVERGX3Jlc2V0KHJlc2V0UmVxdWVzdC0+c2V0RGVmYXVsdFBJQik7CisgICAgRlRERl9SZXNldENvbmZpcm0gKnJlc2V0Q29uZmlybSA9IChGVERGX1Jlc2V0Q29uZmlybSAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX1Jlc2V0Q29uZmlybSkpOworCisgICAgcmVzZXRDb25maXJtLT5tc2dJZCAgPSBGVERGX1JFU0VUX0NPTkZJUk07CisgICAgcmVzZXRDb25maXJtLT5zdGF0dXMgPSBGVERGX1NVQ0NFU1M7CisKKyAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSByZXNldFJlcXVlc3QpOworCisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSByZXNldENvbmZpcm0pOworfQorI2VuZGlmIC8qIEZUREZfUEhZX0FQSSAqLworCit2b2lkIEZUREZfaW5pdExtYWModm9pZCkKK3sKKyAgICBGVERGX1BJQkF0dHJpYnV0ZSBQSUJBdHRyaWJ1dGU7CisKKyAgICBmb3IgKFBJQkF0dHJpYnV0ZSA9IDE7IFBJQkF0dHJpYnV0ZSA8PSBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTOyBQSUJBdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zZXRGdW5jICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLnNldEZ1bmMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChGVERGX3RyYW5zcGFyZW50TW9kZSA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBGVERGX2VuYWJsZVRyYW5zcGFyZW50TW9kZShGVERGX1RSVUUsIEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9ucyk7CisgICAgfQorCisjaWZuZGVmIEZUREZfTElURQorCisgICAgaWYgKEZUREZfaXNQQU5Db29yZGluYXRvcikKKyAgICB7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfSVNQQU5DT09SRElOQVRPUiwgMSk7CisgICAgfQorCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ0NBSURMRVdBSVQsIDE5Mik7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnQ2xlYXIgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUik7CisgICAgKnR4RmxhZ0NsZWFyID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVI7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqcGh5UGFyYW1zID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yKTsKKyAgICAqcGh5UGFyYW1zID0gKEZUREZfUEhZVFhTVEFSVFVQIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWFNUQVJUVVApIHwKKyAgICAgICAgICAgICAgICAgKEZUREZfUEhZVFhMQVRFTkNZIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWExBVEVOQ1kpIHwKKyAgICAgICAgICAgICAgICAgKEZUREZfUEhZVFhGSU5JU0ggPDwgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYRklOSVNIKSB8CisgICAgICAgICAgICAgICAgIChGVERGX1BIWVRSWFdBSVQgPDwgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRSWFdBSVQpOworCisgICAgcGh5UGFyYW1zID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zKTsKKyAgICAqcGh5UGFyYW1zID0gKEZUREZfUEhZUlhTVEFSVFVQIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWFNUQVJUVVApIHwKKyAgICAgICAgICAgICAgICAgKEZUREZfUEhZUlhMQVRFTkNZIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kpIHwKKyAgICAgICAgICAgICAgICAgKEZUREZfUEhZRU5BQkxFIDw8IE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlFTkFCTEUpOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKmZ0ZGZDbSA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfRlRERl9DTSk7CisgICAgKmZ0ZGZDbSA9IEZUREZfTVNLX1RYX0NFIHwgRlRERl9NU0tfUlhfQ0UgfCBGVERGX01TS19TWU1CT0xfVE1SX0NFOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnJ4TWFzayA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfUlhfTUFTSyk7CisgICAgKnJ4TWFzayA9IE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKmxtYWNNYXNrID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9MTUFDX01BU0spOworICAgICpsbWFjTWFzayA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKmxtYWNDdHJsTWFzayA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0spOworICAgICpsbWFjQ3RybE1hc2sgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9NIHwKKyAgICAgICAgICAgICAgICAgICAgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX00gfAorICAgICAgICAgICAgICAgICAgICBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9NOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ0NsZWFyTTsKKyAgICB0eEZsYWdDbGVhck0gICA9IEZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgKnR4RmxhZ0NsZWFyTSB8PSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NOworICAgIHR4RmxhZ0NsZWFyTSAgID0gRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKE9OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NLCBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworICAgICp0eEZsYWdDbGVhck0gfD0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTTsKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKyAgICBGVERGX2ZwcHJSZXNldCgpOworICAgIEZUREZfZnBwclNldE1vZGUoRlRERl9UUlVFLCBGVERGX0ZBTFNFLCBGVERGX0ZBTFNFKTsKKyNlbHNlCisgICAgRlRERl9mcHByU2V0TW9kZShGVERGX0ZBTFNFLCBGVERGX1RSVUUsIEZUREZfVFJVRSk7CisjZW5kaWYgLyogI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPICovCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKyAgICAvKiBVbm1hc2sgbG9uZyBCTyBpbnRlcnJ1cHQuICovCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9NLCAxKTsKKyNlbHNlIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisgICAgLyogU2V0IEJPIHRocmVzaG9sZC4gKi8KKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSRVNIT0xELCBGVERGX0JPX0lSUV9USFJFU0hPTEQpOworCisgICAgLyogTWFzayBsb25nIEJPIGludGVycnVwdC4gKi8KKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX00sIDApOworI2VuZGlmIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisjaWYgRlRERl9VU0VfTFBEUCA9PSAxCisgICAgRlRERl9scGRwRW5hYmxlKEZUREZfVFJVRSk7CisjZW5kaWYgLyogI2lmIEZUREZfVVNFX0xQRFAgPT0gMSAqLworI2VuZGlmIC8qICNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCit9CisKKyNpZmRlZiBGVERGX1BIWV9BUEkKK0ZUREZfUElCQXR0cmlidXRlVmFsdWUgKkZUREZfZ2V0VmFsdWUoRlRERl9QSUJBdHRyaWJ1dGUgUElCQXR0cmlidXRlKQoreworCisgICAgaWYgKFBJQkF0dHJpYnV0ZSA8PSBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTICYmCisgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmFkZHIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8vIFVwZGF0ZSBQSUIgYXR0cmlidXRlIHdpdGggY3VycmVudCBMTUFDIHN0YXR1cyBpZiBhIGdldEZ1bmMgaXMgZGVmaW5lZAorICAgICAgICBpZiAocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uZ2V0RnVuYyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5nZXRGdW5jKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uYWRkcjsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRlRERl9TdGF0dXMgRlRERl9zZXRWYWx1ZShGVERGX1BJQkF0dHJpYnV0ZSBQSUJBdHRyaWJ1dGUsIGNvbnN0IEZUREZfUElCQXR0cmlidXRlVmFsdWUgKlBJQkF0dHJpYnV0ZVZhbHVlKQoreworICAgIGlmIChQSUJBdHRyaWJ1dGUgPD0gRlRERl9OUl9PRl9QSUJfQVRUUklCVVRFUyAmJgorICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5hZGRyICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uc2l6ZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uYWRkciwKKyAgICAgICAgICAgICAgICAgICBQSUJBdHRyaWJ1dGVWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zaXplKTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIExNQUMgd2l0aCBuZXcgUElCIGF0dHJpYnV0ZSB2YWx1ZSBpZiBhIHNldEZ1bmMgaXMgZGVmaW5lZAorICAgICAgICAgICAgaWYgKHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLnNldEZ1bmMgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zZXRGdW5jKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBGVERGX1NVQ0NFU1M7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGVERGX1JFQURfT05MWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBGVERGX1VOU1VQUE9SVEVEX0FUVFJJQlVURTsKK30KKworI2Vsc2UgLyogRlRERl9QSFlfQVBJICovCit2b2lkIEZUREZfcHJvY2Vzc0dldFJlcXVlc3QoRlRERl9HZXRSZXF1ZXN0ICpnZXRSZXF1ZXN0KQoreworICAgIEZUREZfR2V0Q29uZmlybSAgKmdldENvbmZpcm0gICA9IChGVERGX0dldENvbmZpcm0gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9HZXRDb25maXJtKSk7CisgICAgRlRERl9QSUJBdHRyaWJ1dGUgUElCQXR0cmlidXRlID0gZ2V0UmVxdWVzdC0+UElCQXR0cmlidXRlOworCisgICAgZ2V0Q29uZmlybS0+bXNnSWQgICAgICAgID0gRlRERl9HRVRfQ09ORklSTTsKKyAgICBnZXRDb25maXJtLT5QSUJBdHRyaWJ1dGUgPSBQSUJBdHRyaWJ1dGU7CisKKyAgICBpZiAoUElCQXR0cmlidXRlIDw9IEZUREZfTlJfT0ZfUElCX0FUVFJJQlVURVMgJiYKKyAgICAgICAgcGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uYWRkciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgLy8gVXBkYXRlIFBJQiBhdHRyaWJ1dGUgd2l0aCBjdXJyZW50IExNQUMgc3RhdHVzIGlmIGEgZ2V0RnVuYyBpcyBkZWZpbmVkCisgICAgICAgIGlmIChwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5nZXRGdW5jICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmdldEZ1bmMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGdldENvbmZpcm0tPnN0YXR1cyAgICAgICAgICAgID0gRlRERl9TVUNDRVNTOworICAgICAgICBnZXRDb25maXJtLT5QSUJBdHRyaWJ1dGVWYWx1ZSA9IHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmFkZHI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdldENvbmZpcm0tPnN0YXR1cyA9IEZUREZfVU5TVVBQT1JURURfQVRUUklCVVRFOworICAgIH0KKworICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIGdldFJlcXVlc3QpOworCisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBnZXRDb25maXJtKTsKK30KKwordm9pZCBGVERGX3Byb2Nlc3NTZXRSZXF1ZXN0KEZUREZfU2V0UmVxdWVzdCAqc2V0UmVxdWVzdCkKK3sKKyAgICBGVERGX1NldENvbmZpcm0gICpzZXRDb25maXJtICAgPSAoRlRERl9TZXRDb25maXJtICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfU2V0Q29uZmlybSkpOworICAgIEZUREZfUElCQXR0cmlidXRlIFBJQkF0dHJpYnV0ZSA9IHNldFJlcXVlc3QtPlBJQkF0dHJpYnV0ZTsKKworICAgIHNldENvbmZpcm0tPm1zZ0lkICAgICAgICA9IEZUREZfU0VUX0NPTkZJUk07CisgICAgc2V0Q29uZmlybS0+UElCQXR0cmlidXRlID0gUElCQXR0cmlidXRlOworCisgICAgaWYgKFBJQkF0dHJpYnV0ZSA8PSBGVERGX05SX09GX1BJQl9BVFRSSUJVVEVTICYmCisgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLmFkZHIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5zaXplICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldENvbmZpcm0tPnN0YXR1cyA9IEZUREZfU1VDQ0VTUzsKKyAgICAgICAgICAgIG1lbWNweShwaWJBdHRyaWJ1dGVUYWJsZS5hdHRyaWJ1dGVEZWZzWyBQSUJBdHRyaWJ1dGUgXS5hZGRyLAorICAgICAgICAgICAgICAgICAgIHNldFJlcXVlc3QtPlBJQkF0dHJpYnV0ZVZhbHVlLAorICAgICAgICAgICAgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLnNpemUpOworCisgICAgICAgICAgICAvLyBVcGRhdGUgTE1BQyB3aXRoIG5ldyBQSUIgYXR0cmlidXRlIHZhbHVlIGlmIGEgc2V0RnVuYyBpcyBkZWZpbmVkCisgICAgICAgICAgICBpZiAocGliQXR0cmlidXRlVGFibGUuYXR0cmlidXRlRGVmc1sgUElCQXR0cmlidXRlIF0uc2V0RnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBpYkF0dHJpYnV0ZVRhYmxlLmF0dHJpYnV0ZURlZnNbIFBJQkF0dHJpYnV0ZSBdLnNldEZ1bmMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldENvbmZpcm0tPnN0YXR1cyA9IEZUREZfUkVBRF9PTkxZOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNldENvbmZpcm0tPnN0YXR1cyA9IEZUREZfVU5TVVBQT1JURURfQVRUUklCVVRFOworICAgIH0KKworICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIHNldFJlcXVlc3QpOworCisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBzZXRDb25maXJtKTsKK30KKworCit2b2lkIEZUREZfc2VuZENvbW1TdGF0dXNJbmRpY2F0aW9uKEZUREZfTXNnQnVmZmVyICAgICAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TdGF0dXMgICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUEFOSWQgICAgICAgICAgUEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzc01vZGUgICAgc3JjQWRkck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyAgICAgICAgc3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzTW9kZSAgICBkc3RBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzICAgICAgICBkc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5TGV2ZWwgIHNlY3VyaXR5TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfS2V5SWRNb2RlICAgICAga2V5SWRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0ICAgICAgICAgKmtleVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9LZXlJbmRleCAgICAgICBrZXlJbmRleCkKK3sKKyAgICBGVERGX0NvbW1TdGF0dXNJbmRpY2F0aW9uICpjb21tU3RhdHVzID0KKyAgICAgICAgKEZUREZfQ29tbVN0YXR1c0luZGljYXRpb24gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9Db21tU3RhdHVzSW5kaWNhdGlvbikpOworCisgICAgY29tbVN0YXR1cy0+bXNnSWQgICAgICAgICA9IEZUREZfQ09NTV9TVEFUVVNfSU5ESUNBVElPTjsKKyAgICBjb21tU3RhdHVzLT5QQU5JZCAgICAgICAgID0gUEFOSWQ7CisgICAgY29tbVN0YXR1cy0+c3JjQWRkck1vZGUgICA9IHNyY0FkZHJNb2RlOworICAgIGNvbW1TdGF0dXMtPnNyY0FkZHIgICAgICAgPSBzcmNBZGRyOworICAgIGNvbW1TdGF0dXMtPmRzdEFkZHJNb2RlICAgPSBkc3RBZGRyTW9kZTsKKyAgICBjb21tU3RhdHVzLT5kc3RBZGRyICAgICAgID0gZHN0QWRkcjsKKyAgICBjb21tU3RhdHVzLT5zdGF0dXMgICAgICAgID0gc3RhdHVzOworICAgIGNvbW1TdGF0dXMtPnNlY3VyaXR5TGV2ZWwgPSBzZWN1cml0eUxldmVsOworICAgIGNvbW1TdGF0dXMtPmtleUlkTW9kZSAgICAgPSBrZXlJZE1vZGU7CisgICAgY29tbVN0YXR1cy0+a2V5SW5kZXggICAgICA9IGtleUluZGV4OworCisgICAgdWludDhfdCBuOworCisgICAgaWYgKHNlY3VyaXR5TGV2ZWwgIT0gMCkKKyAgICB7CisgICAgICAgIGlmIChrZXlJZE1vZGUgPT0gMHgyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgNDsgbisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbW1TdGF0dXMtPmtleVNvdXJjZVsgbiBdID0ga2V5U291cmNlWyBuIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoa2V5SWRNb2RlID09IDB4MykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IDg7IG4rKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb21tU3RhdHVzLT5rZXlTb3VyY2VbIG4gXSA9IGtleVNvdXJjZVsgbiBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisjaWZuZGVmIEZUREZfTElURQorCisgICAgaWYgKHJlcXVlc3QgJiYKKyAgICAgICAgKHJlcXVlc3QtPm1zZ0lkID09IEZUREZfT1JQSEFOX1JFU1BPTlNFIHx8CisgICAgICAgICByZXF1ZXN0LT5tc2dJZCA9PSBGVERGX0FTU09DSUFURV9SRVNQT05TRSkpCisgICAgeworICAgICAgICBpZiAoRlRERl9yZXFDdXJyZW50ID09IHJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKHJlcXVlc3QpOworICAgICAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIGNvbW1TdGF0dXMpOworICAgICAgICAvKiBDaGVjayBmb3Igb3JwaGFuIHJlc3BvbnNlLiAqLworI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisgICAgICAgIEZUREZfZnBGc21DbGVhclBlbmRpbmcoKTsKKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworICAgICAgICBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgY29tbVN0YXR1cyk7Cit9CisjZW5kaWYgLyogRlRERl9QSFlfQVBJICovCisKKyNpZm5kZWYgRlRERl9MSVRFCitGVERGX09jdGV0ICpGVERGX2FkZEZyYW1lSGVhZGVyKEZUREZfT2N0ZXQgICAgICAgKnR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lSGVhZGVyICpmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9EYXRhTGVuZ3RoICAgbXNkdUxlbmd0aCkKK3sKKyAgICB1aW50OF90ICAgICAgICAgIGZyYW1lVmVyc2lvbjsKKyAgICB1aW50OF90ICAgICAgICAgIGxvbmdGcmFtZUNvbnRyb2wgPSAweDAwOworICAgIEZUREZfQm9vbGVhbiAgICAgcGFuSWRDb21wcmVzc2lvbiA9IEZUREZfRkFMU0U7CisgICAgRlRERl9CaXRtYXA4ICAgICBvcHRpb25zICAgICAgICAgID0gZnJhbWVIZWFkZXItPm9wdGlvbnM7CisgICAgRlRERl9Cb29sZWFuICAgICBzZWN1cmUgICAgICAgICAgID0gb3B0aW9ucyAmIEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQ7CisgICAgRlRERl9Cb29sZWFuICAgICBmcmFtZVBlbmRpbmcgICAgID0gb3B0aW9ucyAmIEZUREZfT1BUX0ZSQU1FX1BFTkRJTkc7CisgICAgRlRERl9Cb29sZWFuICAgICBhY2tUWCAgICAgICAgICAgID0gb3B0aW9ucyAmIEZUREZfT1BUX0FDS19SRVFVRVNURUQ7CisgICAgRlRERl9Cb29sZWFuICAgICBwYW5JZFByZXNlbnQgICAgID0gb3B0aW9ucyAmIEZUREZfT1BUX1BBTl9JRF9QUkVTRU5UOworICAgIEZUREZfQm9vbGVhbiAgICAgc2VxTnJTdXBwcmVzc2VkICA9IG9wdGlvbnMgJiBGVERGX09QVF9TRVFfTlJfU1VQUFJFU1NFRDsKKyAgICBGVERGX0Jvb2xlYW4gICAgIGllc0luY2x1ZGVkICAgICAgPSBvcHRpb25zICYgRlRERl9PUFRfSUVTX1BSRVNFTlQ7CisgICAgRlRERl9GcmFtZVR5cGUgICBmcmFtZVR5cGUgICAgICAgID0gZnJhbWVIZWFkZXItPmZyYW1lVHlwZTsKKyAgICBGVERGX0FkZHJlc3NNb2RlIGRzdEFkZHJNb2RlICAgICAgPSBmcmFtZUhlYWRlci0+ZHN0QWRkck1vZGU7CisgICAgRlRERl9BZGRyZXNzTW9kZSBzcmNBZGRyTW9kZSAgICAgID0gZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlOworICAgIEZUREZfUEFOSWQgICAgICAgZHN0UEFOSWQgICAgICAgICA9IGZyYW1lSGVhZGVyLT5kc3RQQU5JZDsKKworICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9NVUxUSVBVUlBPU0VfRlJBTUUpCisgICAgeworICAgICAgICBpZiAob3B0aW9ucyAmIChGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEIHwgRlRERl9PUFRfQUNLX1JFUVVFU1RFRCB8IEZUREZfT1BUX1BBTl9JRF9QUkVTRU5UIHwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PUFRfSUVTX1BSRVNFTlQgfCBGVERGX09QVF9TRVFfTlJfU1VQUFJFU1NFRCB8IEZUREZfT1BUX0ZSQU1FX1BFTkRJTkcpKQorICAgICAgICB7CisgICAgICAgICAgICBsb25nRnJhbWVDb250cm9sID0gMHgwODsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZyYW1lIGNvbnRyb2wgZmllbGQgYnl0ZSAxCisgICAgICAgICp0eFB0cisrID0gMHgwNSB8IGxvbmdGcmFtZUNvbnRyb2wgfCBkc3RBZGRyTW9kZSA8PCA0IHwgc3JjQWRkck1vZGUgPDwgNjsKKworICAgICAgICBpZiAobG9uZ0ZyYW1lQ29udHJvbCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRnJhbWUgY29udHJvbCBmaWVsZCBieXRlIDIKKyAgICAgICAgICAgICp0eFB0cisrID0KKyAgICAgICAgICAgICAgICAocGFuSWRQcmVzZW50ID8gMHgwMSA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAoc2VjdXJlID8gMHgwMiA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAoc2VxTnJTdXBwcmVzc2VkID8gMHgwNCA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAoZnJhbWVQZW5kaW5nID8gMHgwOCA6IDB4MDApIHwKKyAgICAgICAgICAgICAgICAoYWNrVFggPyAweDQwIDogMHgwMCkgfAorICAgICAgICAgICAgICAgIChpZXNJbmNsdWRlZCA/IDB4ODAgOiAweDAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyAgICAgICAgaWYgKCBwYW5JZFByZXNlbnQgfHwgaWVzSW5jbHVkZWQgfHwgc2VxTnJTdXBwcmVzc2VkIHx8ICggb3B0aW9ucyAmIEZUREZfT1BUX0VOSEFOQ0VEICkgfHwgRlRERl9waWIudHNjaEVuYWJsZWQgKQorICAgICAgICBpZiAocGFuSWRQcmVzZW50IHx8IGllc0luY2x1ZGVkIHx8IHNlcU5yU3VwcHJlc3NlZCB8fCAob3B0aW9ucyAmIEZUREZfT1BUX0VOSEFOQ0VEKSkKKyAgICAgICAgeworICAgICAgICAgICAgZnJhbWVWZXJzaW9uID0gMGIxMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzZWN1cmUgfHwKKyAgICAgICAgICAgICAgICBtc2R1TGVuZ3RoID4gRlRERl9NQVhfTUFDX1NBRkVfUEFZTE9BRF9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lVmVyc2lvbiA9IDBiMDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVWZXJzaW9uID0gMGIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmFtZVZlcnNpb24gPCAwYjEwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHN0QWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmCisgICAgICAgICAgICAgICAgc3JjQWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmCisgICAgICAgICAgICAgICAgZHN0UEFOSWQgPT0gZnJhbWVIZWFkZXItPnNyY1BBTklkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhbklkQ29tcHJlc3Npb24gPSBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwYW5JZENvbXByZXNzaW9uID0gcGFuSWRQcmVzZW50OworICAgICAgICB9CisKKyAgICAgICAgLy8gRnJhbWUgY29udHJvbCBmaWVsZCBieXRlIDEKKyAgICAgICAgKnR4UHRyKysgPQorICAgICAgICAgICAgKGZyYW1lVHlwZSAmIDB4NykgfAorICAgICAgICAgICAgKHNlY3VyZSA/IDB4MDggOiAweDAwKSB8CisgICAgICAgICAgICAoZnJhbWVQZW5kaW5nID8gMHgxMCA6IDB4MDApIHwKKyAgICAgICAgICAgIChhY2tUWCA/IDB4MjAgOiAweDAwKSB8CisgICAgICAgICAgICAocGFuSWRDb21wcmVzc2lvbiA/IDB4NDAgOiAweDAwKTsKKworICAgICAgICAvLyBGcmFtZSBjb250cm9sIGZpZWxkIGJ5dGUgMgorICAgICAgICAqdHhQdHIrKyA9CisgICAgICAgICAgICAoc2VxTnJTdXBwcmVzc2VkID8gMHgwMSA6IDB4MDApIHwKKyAgICAgICAgICAgIChpZXNJbmNsdWRlZCA/IDB4MDIgOiAweDAwKSB8CisgICAgICAgICAgICBkc3RBZGRyTW9kZSA8PCAyIHwKKyAgICAgICAgICAgIGZyYW1lVmVyc2lvbiA8PCA0IHwKKyAgICAgICAgICAgIHNyY0FkZHJNb2RlIDw8IDY7CisgICAgfQorCisgICAgaWYgKCFzZXFOclN1cHByZXNzZWQpCisgICAgeworICAgICAgICAqdHhQdHIrKyA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICB9CisKKyAgICBGVERGX0Jvb2xlYW4gYWRkRHN0UEFOSWQgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKGZyYW1lVHlwZSA9PSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSkKKyAgICB7CisgICAgICAgIGlmIChwYW5JZFByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZERzdFBBTklkID0gRlRERl9UUlVFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChmcmFtZVZlcnNpb24gPCAwYjEwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHN0QWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZERzdFBBTklkID0gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2VlIFRhYmxlIDJhICJQQU4gSUQgQ29tcHJlc3Npb24iIG9mIElFRUUgODAyLjE1LjQtMjAxMSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgICAgICBpZiAoKHNyY0FkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUyAmJiBkc3RBZGRyTW9kZSA9PSBGVERGX05PX0FERFJFU1MgJiYgcGFuSWRDb21wcmVzc2lvbikgfHwKKyAgICAgICAgICAgICAgICAoc3JjQWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTICYmIGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiAhcGFuSWRDb21wcmVzc2lvbikgfHwKKyAgICAgICAgICAgICAgICAoc3JjQWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmIGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiAhcGFuSWRDb21wcmVzc2lvbikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWRkRHN0UEFOSWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWRkRHN0UEFOSWQpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpQQU5JZFB0ciA9IChGVERGX09jdGV0ICopJmRzdFBBTklkOworCisgICAgICAgICp0eFB0cisrID0gKlBBTklkUHRyKys7CisgICAgICAgICp0eFB0cisrID0gKlBBTklkUHRyOworICAgIH0KKworICAgIEZUREZfQWRkcmVzcyBkc3RBZGRyID0gZnJhbWVIZWFkZXItPmRzdEFkZHI7CisKKyAgICBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSU1QTEVfQUREUkVTUykKKyAgICB7CisgICAgICAgICp0eFB0cisrID0gZHN0QWRkci5zaW1wbGVBZGRyZXNzOworICAgIH0KKyAgICBlbHNlIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpzaG9ydEFkZHJlc3NQdHIgPSAoRlRERl9PY3RldCAqKSZkc3RBZGRyLnNob3J0QWRkcmVzczsKKworICAgICAgICAqdHhQdHIrKyA9ICpzaG9ydEFkZHJlc3NQdHIrKzsKKyAgICAgICAgKnR4UHRyKysgPSAqc2hvcnRBZGRyZXNzUHRyOworICAgIH0KKyAgICBlbHNlIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpleHRBZGRyZXNzUHRyID0gKEZUREZfT2N0ZXQgKikmZHN0QWRkci5leHRBZGRyZXNzOworICAgICAgICBpbnQgICAgICAgICBuOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCA4OyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICp0eFB0cisrID0gKmV4dEFkZHJlc3NQdHIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUREZfQm9vbGVhbiBhZGRTcmNQQU5JZCA9IEZUREZfRkFMU0U7CisKKyAgICBpZiAoZnJhbWVUeXBlICE9IEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FKQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lVmVyc2lvbiA8IDBiMTApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcmNBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgIXBhbklkQ29tcHJlc3Npb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWRkU3JjUEFOSWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTZWUgVGFibGUgMmEgIlBBTiBJRCBDb21wcmVzc2lvbiIgb2YgSUVFRSA4MDIuMTUuNC0yMDExIGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgICAgIGlmIChzcmNBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgZHN0QWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTICYmICFwYW5JZENvbXByZXNzaW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZFNyY1BBTklkID0gRlRERl9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFkZFNyY1BBTklkKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqUEFOSWRQdHIgPSAoRlRERl9PY3RldCAqKSZmcmFtZUhlYWRlci0+c3JjUEFOSWQ7CisKKyAgICAgICAgKnR4UHRyKysgPSAqUEFOSWRQdHIrKzsKKyAgICAgICAgKnR4UHRyKysgPSAqUEFOSWRQdHI7CisgICAgfQorCisgICAgaWYgKHNyY0FkZHJNb2RlID09IEZUREZfU0lNUExFX0FERFJFU1MpCisgICAgeworICAgICAgICAqdHhQdHIrKyA9IEZUREZfcGliLnNpbXBsZUFkZHJlc3M7CisgICAgfQorICAgIGVsc2UgaWYgKHNyY0FkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICB7CisgICAgICAgIEZUREZfT2N0ZXQgKnNob3J0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopJkZUREZfcGliLnNob3J0QWRkcmVzczsKKworICAgICAgICAqdHhQdHIrKyA9ICpzaG9ydEFkZHJlc3NQdHIrKzsKKyAgICAgICAgKnR4UHRyKysgPSAqc2hvcnRBZGRyZXNzUHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzcmNBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpleHRBZGRyZXNzUHRyID0gKEZUREZfT2N0ZXQgKikmRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICAgICAgaW50ICAgICAgICAgbjsKKworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICAqdHhQdHIrKyA9ICpleHRBZGRyZXNzUHRyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHhQdHI7Cit9CisjZW5kaWYgLyogIUZUREZfTElURSAqLworCitGVERGX1BUSSBGVERGX2dldFJ4UHRpKHZvaWQpCit7CisjaWYgRlRERl9VU0VfUFRJCisgICAgRlRERl9QVEkgcnhfcHRpOworICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICByeF9wdGkgPSBGVERGX1J4UHRpOworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgcmV0dXJuIHJ4X3B0aTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworI2lmZGVmIEZUREZfUEhZX0FQSQordm9pZCBGVERGX3J4RW5hYmxlKEZUREZfVGltZSByeE9uRHVyYXRpb24pCit7CisjaWYgZGdfY29uZmlnQ09FWF9FTkFCTEVfQ09ORklHCisgICAgLyogV2UgZG8gbm90IGZvcmNlIGRlY2lzaW9uIGhlcmUuIEl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBtYWRlIHdoZW4gRlRERiBiZWdpbnMKKyAgICAgKiB0cmFuc2FjdGlvbi4KKyAgICAgKi8KKyAgICBod19jb2V4X3VwZGF0ZV9mdGRmX3B0aSgoaHdfY29leF9wdGlfdCkgRlRERl9nZXRSeFB0aSgpLCBOVUxMLCBmYWxzZSk7CisjZW5kaWYKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYRU5BQkxFLCAwKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiwgcnhPbkR1cmF0aW9uKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYRU5BQkxFLCAxKTsKK30KKyNlbHNlCit2b2lkIEZUREZfcHJvY2Vzc1J4RW5hYmxlUmVxdWVzdChGVERGX1J4RW5hYmxlUmVxdWVzdCAqcnhFbmFibGVSZXF1ZXN0KQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhFTkFCTEUsIDApOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OLCByeEVuYWJsZVJlcXVlc3QtPnJ4T25EdXJhdGlvbik7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWEVOQUJMRSwgMSk7CisKKyAgICBGVERGX1J4RW5hYmxlQ29uZmlybSAqcnhFbmFibGVDb25maXJtID0KKyAgICAgICAgKEZUREZfUnhFbmFibGVDb25maXJtICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfUnhFbmFibGVDb25maXJtKSk7CisKKyAgICByeEVuYWJsZUNvbmZpcm0tPm1zZ0lkICA9IEZUREZfUlhfRU5BQkxFX0NPTkZJUk07CisgICAgcnhFbmFibGVDb25maXJtLT5zdGF0dXMgPSBGVERGX1NVQ0NFU1M7CisKKyAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSByeEVuYWJsZVJlcXVlc3QpOworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgcnhFbmFibGVDb25maXJtKTsKK30KKyNlbmRpZiAvKiBGVERGX1BIWV9BUEkgKi8KKworRlRERl9PY3RldCAqRlRERl9nZXRGcmFtZUhlYWRlcihGVERGX09jdGV0ICAgICAgICpyeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZUhlYWRlciAqZnJhbWVIZWFkZXIpCit7CisgICAgRlRERl9GcmFtZVR5cGUgICBmcmFtZVR5cGUgICAgPSAqcnhCdWZmZXIgJiAweDA3OworICAgIHVpbnQ4X3QgICAgICAgICAgZnJhbWVWZXJzaW9uID0gMDsKKyAgICBGVERGX0JpdG1hcDggICAgIG9wdGlvbnMgICAgICA9IDA7CisgICAgRlRERl9BZGRyZXNzTW9kZSBkc3RBZGRyTW9kZTsKKyAgICBGVERGX0FkZHJlc3NNb2RlIHNyY0FkZHJNb2RlOworICAgIEZUREZfQm9vbGVhbiAgICAgcGFuSWRDb21wcmVzc2lvbiA9IEZUREZfRkFMU0U7CisgICAgRlRERl9Cb29sZWFuICAgICBwYW5JZFByZXNlbnQgICAgID0gRlRERl9GQUxTRTsKKworICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9NVUxUSVBVUlBPU0VfRlJBTUUpCisgICAgeworICAgICAgICBkc3RBZGRyTW9kZSA9ICgqcnhCdWZmZXIgJiAweDMwKSA+PiA0OworICAgICAgICBzcmNBZGRyTW9kZSA9ICgqcnhCdWZmZXIgJiAweGMwKSA+PiA2OworCisgICAgICAgIC8vIENoZWNrIExvbmcgRnJhbWUgQ29udHJvbAorICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgwOCkKKyAgICAgICAgeworICAgICAgICAgICAgcnhCdWZmZXIrKzsKKworICAgICAgICAgICAgcGFuSWRQcmVzZW50ID0gKnJ4QnVmZmVyICYgMHgwMTsKKworICAgICAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4MDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgwNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX1NFUV9OUl9TVVBQUkVTU0VEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgwOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX0ZSQU1FX1BFTkRJTkc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDQwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfQUNLX1JFUVVFU1RFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4ODApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBGVERGX09QVF9JRVNfUFJFU0VOVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnJhbWVWZXJzaW9uICAgICAgICAgICAgICA9IDA7CisKKyAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPSBGVERGX0ZSQU1FX1ZFUlNJT05fRTsKKworICAgICAgICAgICAgcnhCdWZmZXIrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4QnVmZmVyKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCpyeEJ1ZmZlciAmIDB4MDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfU0VDVVJJVFlfRU5BQkxFRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDEwKQorICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25zIHw9IEZUREZfT1BUX0ZSQU1FX1BFTkRJTkc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKnJ4QnVmZmVyICYgMHgyMCkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0aW9ucyB8PSBGVERGX09QVF9BQ0tfUkVRVUVTVEVEOworICAgICAgICB9CisKKyAgICAgICAgcGFuSWRDb21wcmVzc2lvbiA9ICpyeEJ1ZmZlciAmIDB4NDA7CisKKyAgICAgICAgcnhCdWZmZXIrKzsKKworICAgICAgICBmcmFtZVZlcnNpb24gPSAoKnJ4QnVmZmVyICYgMHgzMCkgPj4gNDsKKworICAgICAgICBpZiAoZnJhbWVWZXJzaW9uID09IDB4MDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgqcnhCdWZmZXIgJiAweDAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gRlRERl9PUFRfSUVTX1BSRVNFTlQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPSBGVERGX0ZSQU1FX1ZFUlNJT05fRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmcmFtZVZlcnNpb24gPT0gMHgwMSkKKyAgICAgICAgeworICAgICAgICAgICAgZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9IEZUREZfRlJBTUVfVkVSU0lPTl8yMDExOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZyYW1lVmVyc2lvbiA9PSAweDAwKQorICAgICAgICB7CisgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID0gRlRERl9GUkFNRV9WRVJTSU9OXzIwMDM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID0gRlRERl9GUkFNRV9WRVJTSU9OX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgICByZXR1cm4gcnhCdWZmZXI7CisgICAgICAgIH0KKworICAgICAgICBkc3RBZGRyTW9kZSA9ICgqcnhCdWZmZXIgJiAweDBjKSA+PiAyOworICAgICAgICBzcmNBZGRyTW9kZSA9ICgqcnhCdWZmZXIgJiAweGMwKSA+PiA2OworCisgICAgICAgIHJ4QnVmZmVyKys7CisgICAgfQorCisgICAgaWYgKChvcHRpb25zICYgRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQpID09IDApCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+U04gPSAqcnhCdWZmZXIrKzsKKyAgICB9CisKKyAgICBGVERGX0Jvb2xlYW4gaGFzRHN0UEFOSWQgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKGZyYW1lVHlwZSA9PSBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSkKKyAgICB7CisgICAgICAgIGhhc0RzdFBBTklkID0gcGFuSWRQcmVzZW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZnJhbWVWZXJzaW9uIDwgMHgwMikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdEFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYXNEc3RQQU5JZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoc3JjQWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTICYmIGRzdEFkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUyAmJiBwYW5JZENvbXByZXNzaW9uKSB8fAorICAgICAgICAgICAgICAgIChzcmNBZGRyTW9kZSA9PSBGVERGX05PX0FERFJFU1MgJiYgZHN0QWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmICFwYW5JZENvbXByZXNzaW9uKSB8fAorICAgICAgICAgICAgICAgIChzcmNBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MgJiYgZHN0QWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTICYmICFwYW5JZENvbXByZXNzaW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYXNEc3RQQU5JZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNEc3RQQU5JZCkKKyAgICB7CisgICAgICAgIEZUREZfT2N0ZXQgKlBBTklkUHRyID0gKEZUREZfT2N0ZXQgKikgJmZyYW1lSGVhZGVyLT5kc3RQQU5JZDsKKworICAgICAgICAqUEFOSWRQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICAqUEFOSWRQdHIgICA9ICpyeEJ1ZmZlcisrOworICAgIH0KKworICAgIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX1NJTVBMRV9BRERSRVNTKQorICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPmRzdEFkZHIuc2ltcGxlQWRkcmVzcyA9ICpyeEJ1ZmZlcisrOworICAgIH0KKyAgICBlbHNlIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpzaG9ydEFkZHJlc3NQdHIgPSAoRlRERl9PY3RldCAqKSZmcmFtZUhlYWRlci0+ZHN0QWRkci5zaG9ydEFkZHJlc3M7CisKKyAgICAgICAgKnNob3J0QWRkcmVzc1B0cisrID0gKnJ4QnVmZmVyKys7CisgICAgICAgICpzaG9ydEFkZHJlc3NQdHIgICA9ICpyeEJ1ZmZlcisrOworICAgIH0KKyAgICBlbHNlIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpleHRBZGRyZXNzUHRyID0gKEZUREZfT2N0ZXQgKikmZnJhbWVIZWFkZXItPmRzdEFkZHIuZXh0QWRkcmVzczsKKyAgICAgICAgaW50ICAgICAgICAgbjsKKworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICAqZXh0QWRkcmVzc1B0cisrID0gKnJ4QnVmZmVyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX0Jvb2xlYW4gaGFzU3JjUEFOSWQgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKGZyYW1lVmVyc2lvbiA8IDB4MDIgJiYgZnJhbWVUeXBlICE9IEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FKQorICAgIHsKKyAgICAgICAgaWYgKHNyY0FkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiAhcGFuSWRDb21wcmVzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgaGFzU3JjUEFOSWQgPSBGVERGX1RSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNyY0FkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUyAmJiBkc3RBZGRyTW9kZSA9PSBGVERGX05PX0FERFJFU1MgJiYgIXBhbklkQ29tcHJlc3Npb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc1NyY1BBTklkID0gRlRERl9UUlVFOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc1NyY1BBTklkKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqUEFOSWRQdHIgPSAoRlRERl9PY3RldCAqKSAmZnJhbWVIZWFkZXItPnNyY1BBTklkOworCisgICAgICAgICpQQU5JZFB0cisrID0gKnJ4QnVmZmVyKys7CisgICAgICAgICpQQU5JZFB0ciAgID0gKnJ4QnVmZmVyKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNQQU5JZCA9IGZyYW1lSGVhZGVyLT5kc3RQQU5JZDsKKyAgICB9CisKKyAgICBpZiAoc3JjQWRkck1vZGUgPT0gRlRERl9TSU1QTEVfQUREUkVTUykKKyAgICB7CisgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLnNpbXBsZUFkZHJlc3MgPSAqcnhCdWZmZXIrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjQWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqc2hvcnRBZGRyZXNzUHRyID0gKEZUREZfT2N0ZXQgKikmZnJhbWVIZWFkZXItPnNyY0FkZHIuc2hvcnRBZGRyZXNzOworCisgICAgICAgICpzaG9ydEFkZHJlc3NQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICAqc2hvcnRBZGRyZXNzUHRyICAgPSAqcnhCdWZmZXIrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjQWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9PY3RldCAqZXh0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopJmZyYW1lSGVhZGVyLT5zcmNBZGRyLmV4dEFkZHJlc3M7CisgICAgICAgIGludCAgICAgICAgIG47CisKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDg7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgKmV4dEFkZHJlc3NQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVIZWFkZXItPmZyYW1lVHlwZSAgID0gZnJhbWVUeXBlOworICAgIGZyYW1lSGVhZGVyLT5vcHRpb25zICAgICA9IG9wdGlvbnM7CisgICAgZnJhbWVIZWFkZXItPmRzdEFkZHJNb2RlID0gZHN0QWRkck1vZGU7CisgICAgZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID0gc3JjQWRkck1vZGU7CisKKyAgICByZXR1cm4gcnhCdWZmZXI7Cit9CisKKyNpZm5kZWYgRlRERl9MSVRFCit2b2lkIEZUREZfcHJvY2Vzc05leHRSZXF1ZXN0KHZvaWQpCit7CisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QgPSBGVERGX3RzY2hHZXRQZW5kaW5nKEZUREZfdHNjaFNsb3RMaW5rLT5yZXF1ZXN0KTsKKworICAgICAgICBGVERGX3RzY2hTbG90TGluay0+cmVxdWVzdCA9IE5VTEw7CisKKyAgICAgICAgRlRERl9zY2hlZHVsZVRzY2gocmVxdWVzdCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisgICAgd2hpbGUgKEZUREZfcmVxQ3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QgPSBGVERGX2RlcXVldWVSZXFUYWlsKCZGVERGX3JlcVF1ZXVlKTsKKworICAgICAgICBpZiAocmVxdWVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9wcm9jZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworc3RhdGljIHZvaWQgcHJvY2Vzc1J4RnJhbWUoaW50IHJlYWRCdWYpCit7CisgICAgc3RhdGljIEZUREZfUEFORGVzY3JpcHRvciBQQU5EZXNjcmlwdG9yOworICAgIHN0YXRpYyBGVERGX0FkZHJlc3MgICAgICAgcGVuZEFkZHJMaXN0WyA3IF07CisKKyAgICBGVERGX0ZyYW1lSGVhZGVyICAgICAgICAgKmZyYW1lSGVhZGVyICAgID0gJkZUREZfZmg7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfU2VjdXJpdHlIZWFkZXIgICAgICAqc2VjdXJpdHlIZWFkZXIgPSAmRlRERl9zaDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgIHBlbmRBZGRyU3BlYyAgID0gMDsKKworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgICAqcnhCdWZmZXIgICAgICAgPQorICAgICAgICAoRlRERl9PY3RldCAqKShJTkRfUl9GVERGX1JYX1JBTV9SWF9GSUZPICsgKGludHB0cl90KSByZWFkQnVmICogRlRERl9CVUZGRVJfTEVOR1RIKTsKKyAgICBGVERGX09jdGV0ICAgICAgICAgICAgICAgKnJ4UHRyICAgICAgICAgID0gcnhCdWZmZXI7CisgICAgRlRERl9EYXRhTGVuZ3RoICAgICAgICAgICBmcmFtZUxlbiAgICAgICA9ICpyeFB0cisrOworCisgICAgaWYgKEZUREZfdHJhbnNwYXJlbnRNb2RlKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuUlhTdWNjZXNzQ291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQzMl90ICAgICAgICAgICByeE1ldGExID0gKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9SWF9NRVRBXzEsIChpbnRwdHJfdClyZWFkQnVmKTsKKyAgICAgICAgRlRERl9MaW5rUXVhbGl0eSAgIGxxaSAgICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1IsIHJlYWRCdWYpOworICAgICAgICBGVERGX0JpdG1hcDMyICAgICAgc3RhdHVzICA9IEZUREZfVFJBTlNQQVJFTlRfUkNWX1NVQ0NFU1NGVUw7CisKKyAgICAgICAgc3RhdHVzIHw9IHJ4TWV0YTEgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1IgPyBGVERGX1RSQU5TUEFSRU5UX1JDVl9DUkNfRVJST1IgOiAwOworICAgICAgICBzdGF0dXMgfD0gcnhNZXRhMSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1RZUEVfRVJST1IgPyBGVERGX1RSQU5TUEFSRU5UX1JDVl9SRVNfRlJBTUVUWVBFIDogMDsKKyAgICAgICAgc3RhdHVzIHw9IHJ4TWV0YTEgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SID8gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfUkVTX0ZSQU1FX1ZFUlNJT04gOiAwOworICAgICAgICBzdGF0dXMgfD0gcnhNZXRhMSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgPyBGVERGX1RSQU5TUEFSRU5UX1JDVl9VTkVYUF9EU1RfUEFOX0lEIDogMDsKKyAgICAgICAgc3RhdHVzIHw9IHJ4TWV0YTEgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1IgPyBGVERGX1RSQU5TUEFSRU5UX1JDVl9VTkVYUF9EU1RfQUREUiA6IDA7CisKKyAgICAgICAgRlRERl9SQ1ZfRlJBTUVfVFJBTlNQQVJFTlQoZnJhbWVMZW4sIHJ4UHRyLCBzdGF0dXMsIGxxaSk7CisKKyNpZiBGVERGX1RSQU5TUEFSRU5UX1VTRV9XQUlUX0ZPUl9BQ0sKKworICAgICAgICBpZiAoKEZUREZfdHJhbnNwYXJlbnRNb2RlT3B0aW9ucyAmIEZUREZfVFJBTlNQQVJFTlRfV0FJVF9GT1JfQUNLKSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9nZXRGcmFtZUhlYWRlcihyeFB0ciwgZnJhbWVIZWFkZXIpOworCisgICAgICAgICAgICBpZiAoZnJhbWVIZWFkZXItPmZyYW1lVHlwZSA9PSBGVERGX0FDS05PV0xFREdFTUVOVF9GUkFNRSAmJgorICAgICAgICAgICAgICAgIChzdGF0dXMgPT0gRlRERl9UUkFOU1BBUkVOVF9SQ1ZfU1VDQ0VTU0ZVTCkpCisgICAgICAgICAgICB7CisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1MgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgICAgICAgICAgICAgIHdoaWxlICgqdHhGbGFnUyAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQpCisgICAgICAgICAgICAgICAgeyB9CisKKyAgICAgICAgICAgICAgICAvLyBJdCBpcyByZXF1aXJlZCB0byBjYWxsIEZUREZfcHJvY2Vzc1R4RXZlbnQgaGVyZSBiZWNhdXNlIGFuIFJYIGFjayBnZW5lcmF0ZXMgdHdvIGV2ZW50cworICAgICAgICAgICAgICAgIC8vIFRoZSBSWCBldmVudCBpcyByYWlzZWQgZmlyc3QsIHRoZW4gYWZ0ZXIgYW4gSUZTIHRoZSBUWCBldmVudCBpcyByYWlzZWQuIEhvd2V2ZXIsCisgICAgICAgICAgICAgICAgLy8gdGhlIEZUREZfcHJvY2Vzc05leHRSZXF1ZXN0IHJlcXVpcmVzIHRoYXQgYm90aCBldmVudHMgaGF2ZSBiZWVuIGhhbmRsZWQuCisgICAgICAgICAgICAgICAgRlRERl9wcm9jZXNzVHhFdmVudCgpOworI2VuZGlmIC8qICFGVERGX1BIWV9BUEkgKi8KKworICAgICAgICAgICAgICAgIEZUREZfU04gU04gPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fTUFDU04sIEZUREZfVFhfREFUQV9CVUZGRVIpOworCisjaWZkZWYgRlRERl9QSFlfQVBJCisgICAgICAgICAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICAgICAgICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgICAgICAgICAgICAgaWYgKEZUREZfdHhJblByb2dyZXNzICYmCisgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5TTiA9PSBTTikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworI2Vsc2UKKworICAgICAgICAgICAgICAgIGlmIChGVERGX3JlcUN1cnJlbnQgJiYKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPlNOID09IFNOKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKnRyYW5zcGFyZW50UmVxdWVzdCA9IChGVERGX1RyYW5zcGFyZW50UmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICAgICAgICAgICAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9TRU5EX0ZSQU1FX1RSQU5TUEFSRU5UX0NPTkZJUk0odHJhbnNwYXJlbnRSZXF1ZXN0LT5oYW5kbGUsIEZUREZfVFJBTlNQQVJFTlRfU0VORF9TVUNDRVNTRlVMKTsKKworICAgICAgICAgICAgICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSB0cmFuc3BhcmVudFJlcXVlc3QpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX1BIWV9BUEkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9UUkFOU1BBUkVOVF9VU0VfV0FJVF9GT1JfQUNLICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgcnhQdHIgPSBGVERGX2dldEZyYW1lSGVhZGVyKHJ4UHRyLCBmcmFtZUhlYWRlcik7CisKKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfTUFOVUFMCisKKyAgICBpZiAoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9BQ0tfUkVRVUVTVEVEKQorICAgIHsKKyAgICAgICAgaW50IG47CisgICAgICAgIEZUREZfQm9vbGVhbiBhZGRyZXNzRm91bmQgPSBGVERGX0ZBTFNFOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX1JFUV9CVUZGRVJTOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSA9PSBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgJiYKKyAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5QQU5JZCA9PSBmcmFtZUhlYWRlci0+c3JjUEFOSWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkci5zaG9ydEFkZHJlc3MgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLnNob3J0QWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0ZvdW5kID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyLmV4dEFkZHJlc3MgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLmV4dEFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NGb3VuZCA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgc3JjQWRkck1vZGUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGRyZXNzRm91bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfZnBwclNldE1vZGUoRlRERl9GQUxTRSwgRlRERl9UUlVFLCBGVERGX1RSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9mcHByU2V0TW9kZShGVERGX0ZBTFNFLCBGVERGX1RSVUUsIEZUREZfRkFMU0UpOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKworICAgIGlmIChmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID09IEZUREZfRlJBTUVfVkVSU0lPTl9OT1RfU1VQUE9SVEVEKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIGRlZmluZWQoRlRERl9OT19DU0wpICYmIGRlZmluZWQoRlRERl9OT19UU0NIKQorICAgIGVsc2UgaWYgKGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPT0gRlRERl9GUkFNRV9WRVJTSU9OX0UgfHwKKyAgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZnJhbWVUeXBlID09IEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICYmIEZUREZfTk9fVFNDSCAqLworCisgICAgRlRERl9GcmFtZVR5cGUgZnJhbWVUeXBlID0gZnJhbWVIZWFkZXItPmZyYW1lVHlwZTsKKyAgICBGVERGX0Jvb2xlYW4gICBkdXBsaWNhdGUgPSBGVERGX0ZBTFNFOworCisgICAgaWYgKChmcmFtZUhlYWRlci0+b3B0aW9ucyAmIEZUREZfT1BUX1NFUV9OUl9TVVBQUkVTU0VEKSA9PSAwICYmCisgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSAhPSBGVERGX05PX0FERFJFU1MpCisgICAgeworICAgICAgICBGVERGX1RpbWUgICAgdGltZXN0YW1wID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCwgcmVhZEJ1Zik7CisgICAgICAgIEZUREZfU05TZWwgICBzblNlbCAgICAgPSBGVERGX1NOX1NFTF9EU047CisgICAgICAgIEZUREZfQm9vbGVhbiBkcm9wOworCisgICAgICAgIGlmICgoRlRERl9waWIudHNjaEVuYWJsZWQgfHwgZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9PSBGVERGX0ZSQU1FX1ZFUlNJT05fRSkgJiYKKyAgICAgICAgICAgIChmcmFtZUhlYWRlci0+b3B0aW9ucyAmIEZUREZfT1BUX0FDS19SRVFVRVNURUQpKQorICAgICAgICB7CisgICAgICAgICAgICBkcm9wID0gRlRERl9GQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRyb3AgPSBGVERGX1RSVUU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnJhbWVUeXBlID09IEZUREZfQkVBQ09OX0ZSQU1FKQorICAgICAgICB7CisgICAgICAgICAgICBzblNlbCA9IGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24gPT0gRlRERl9GUkFNRV9WRVJTSU9OX0UgPyBGVERGX1NOX1NFTF9FQlNOIDogRlRERl9TTl9TRUxfQlNOOworICAgICAgICB9CisKKyAgICAgICAgdWludDhfdCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX05SX09GX1JYX0FERFJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGVudHJ5IGlzIGVtcHR5IG9yIG1hdGNoZXMKKyAgICAgICAgICAgIGlmIChGVERGX3J4YVsgaSBdLmFkZHJNb2RlID09IEZUREZfTk9fQUREUkVTUyB8fAorICAgICAgICAgICAgICAgIChGVERGX3J4YVsgaSBdLmFkZHJNb2RlID09IGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSAmJgorICAgICAgICAgICAgICAgICAoKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MgJiYKKyAgICAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkci5zaG9ydEFkZHJlc3MgPT0gRlRERl9yeGFbIGkgXS5hZGRyLnNob3J0QWRkcmVzcykgfHwKKyAgICAgICAgICAgICAgICAgIChmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTICYmCisgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuZXh0QWRkcmVzcyA9PSBGVERGX3J4YVsgaSBdLmFkZHIuZXh0QWRkcmVzcykpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpIDwgRlRERl9OUl9PRl9SWF9BRERSUykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfcnhhWyBpIF0uYWRkck1vZGUgIT0gRlRERl9OT19BRERSRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc25TZWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfRFNOOgorCisgICAgICAgICAgICAgICAgICAgIGlmIChGVERGX3J4YVsgaSBdLmRzblZhbGlkID09IEZUREZfVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5TTiA9PSBGVERGX3J4YVsgaSBdLmRzbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuZHVwbGljYXRlRnJhbWVDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcm9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcnhhWyBpIF0uZHNuVmFsaWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmRzbiA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0JTTjoKKworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9yeGFbIGkgXS5ic25WYWxpZCA9PSBGVERGX1RSVUUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUhlYWRlci0+U04gPT0gRlRERl9yeGFbIGkgXS5ic24pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLmR1cGxpY2F0ZUZyYW1lQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmJzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5ic24gPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBGVERGX1NOX1NFTF9FQlNOOgorCisgICAgICAgICAgICAgICAgICAgIGlmIChGVERGX3J4YVsgaSBdLmVic25WYWxpZCA9PSBGVERGX1RSVUUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUhlYWRlci0+U04gPT0gRlRERl9yeGFbIGkgXS5lYnNuKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5kdXBsaWNhdGVGcmFtZUNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5lYnNuVmFsaWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmVic24gPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmFkZHJNb2RlID0gZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBpIF0uYWRkciAgICAgPSBmcmFtZUhlYWRlci0+c3JjQWRkcjsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoc25TZWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfRFNOOgorICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmRzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmRzbiAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfQlNOOgorICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmJzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgICAgICBGVERGX3J4YVsgaSBdLmJzbiAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfRUJTTjoKKyAgICAgICAgICAgICAgICAgICAgRlRERl9yeGFbIGkgXS5lYnNuVmFsaWQgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgIEZUREZfcnhhWyBpIF0uZWJzbiAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZUREZfcnhhWyBpIF0udGltZXN0YW1wID0gdGltZXN0YW1wOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZmluZCBvbGRlc3QgZW50cnkgYW5kIG92ZXJ3cml0ZSBpdAorICAgICAgICAgICAgRlRERl9UaW1lIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgICAgICAgICBGVERGX1RpbWUgZGVsdGEsIGdyZWF0ZXN0RGVsdGEgPSAwOworICAgICAgICAgICAgdWludDhfdCAgIGVudHJ5ICAgPSAwOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRERl9OUl9PRl9SWF9BRERSUzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbHRhID0gY3VyVGltZSAtIEZUREZfcnhhWyBpIF0udGltZXN0YW1wOworCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhID4gZ3JlYXRlc3REZWx0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdyZWF0ZXN0RGVsdGEgPSBkZWx0YTsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgICAgICAgICA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5hZGRyTW9kZSA9IGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZTsKKyAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmFkZHIgICAgID0gZnJhbWVIZWFkZXItPnNyY0FkZHI7CisKKyAgICAgICAgICAgIHN3aXRjaCAoc25TZWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEZUREZfU05fU0VMX0RTTjoKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5ic25WYWxpZCAgPSBGVERGX0ZBTFNFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmVic25WYWxpZCA9IEZUREZfRkFMU0U7CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uZHNuVmFsaWQgID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmRzbiAgICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGVERGX1NOX1NFTF9CU046CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uZHNuVmFsaWQgID0gRlRERl9GQUxTRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5lYnNuVmFsaWQgPSBGVERGX0ZBTFNFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmJzblZhbGlkICA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5ic24gICAgICAgPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9TTl9TRUxfRUJTTjoKKyAgICAgICAgICAgICAgICBGVERGX3J4YVsgZW50cnkgXS5kc25WYWxpZCAgPSBGVERGX0ZBTFNFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmJzblZhbGlkICA9IEZUREZfRkFMU0U7CisgICAgICAgICAgICAgICAgRlRERl9yeGFbIGVudHJ5IF0uZWJzblZhbGlkID0gRlRERl9UUlVFOworICAgICAgICAgICAgICAgIEZUREZfcnhhWyBlbnRyeSBdLmVic24gICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmcmFtZUhlYWRlci0+b3B0aW9ucyAmIEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQpCisgICAgeworICAgICAgICByeFB0ciA9IEZUREZfZ2V0U2VjdXJpdHlIZWFkZXIocnhQdHIsIGZyYW1lSGVhZGVyLT5mcmFtZVZlcnNpb24sIHNlY3VyaXR5SGVhZGVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2VjdXJpdHlIZWFkZXItPnNlY3VyaXR5TGV2ZWwgPSAwOworICAgICAgICBzZWN1cml0eUhlYWRlci0+a2V5SWRNb2RlICAgICA9IDA7CisgICAgfQorCisgICAgRlRERl9JRUxpc3QgKmhlYWRlcklFTGlzdCAgPSBOVUxMOworICAgIEZUREZfSUVMaXN0ICpwYXlsb2FkSUVMaXN0ID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgbWljTGVuZ3RoICAgICA9IEZUREZfZ2V0TWljTGVuZ3RoKHNlY3VyaXR5SGVhZGVyLT5zZWN1cml0eUxldmVsKTsKKworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisKKyAgICBpZiAoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9JRVNfUFJFU0VOVCkKKyAgICB7CisgICAgICAgIHJ4UHRyID0KKyAgICAgICAgICAgIEZUREZfZ2V0SWVzKHJ4UHRyLCByeEJ1ZmZlciArIChmcmFtZUxlbiAtIG1pY0xlbmd0aCAtIEZUREZfRkNTX0xFTkdUSCksICZoZWFkZXJJRUxpc3QsICZwYXlsb2FkSUVMaXN0KTsKKyAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9OT19DU0wgfHwgIUZUREZfTk9fVFNDSCAqLworCisgICAgLy8gR2V0IHN0YXJ0IG9mIHByaXZhdGUgZGF0YSAobmVlZGVkIHRvIHVuc2VjdXJlIGEgZnJhbWUpCisgICAgaWYgKGZyYW1lVHlwZSA9PSBGVERGX01BQ19DT01NQU5EX0ZSQU1FKQorICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPmNvbW1hbmRGcmFtZUlkID0gKnJ4UHRyKys7CisgICAgfQorICAgIGVsc2UgaWYgKGZyYW1lVHlwZSA9PSBGVERGX0JFQUNPTl9GUkFNRSkKKyAgICB7CisgICAgICAgIFBBTkRlc2NyaXB0b3IuY29vcmRBZGRyTW9kZSA9IGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZTsKKyAgICAgICAgUEFORGVzY3JpcHRvci5jb29yZFBBTklkICAgID0gZnJhbWVIZWFkZXItPnNyY1BBTklkOworICAgICAgICBQQU5EZXNjcmlwdG9yLmNvb3JkQWRkciAgICAgPSBmcmFtZUhlYWRlci0+c3JjQWRkcjsKKyAgICAgICAgUEFORGVzY3JpcHRvci5jaGFubmVsTnVtYmVyID0gKChGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1BIWVJYQVRUUikgPj4gNCkgJiAweGYpICsgMTE7CisgICAgICAgIFBBTkRlc2NyaXB0b3IuY2hhbm5lbFBhZ2UgICA9IDA7CisgICAgICAgIFBBTkRlc2NyaXB0b3IudGltZXN0YW1wICAgICA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAsIHJlYWRCdWYpOworICAgICAgICBQQU5EZXNjcmlwdG9yLmxpbmtRdWFsaXR5ICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1IsIHJlYWRCdWYpOworCisgICAgICAgIEZUREZfT2N0ZXQgKnN1cGVyZnJhbWVTcGVjUHRyID0gKEZUREZfT2N0ZXQgKikgJlBBTkRlc2NyaXB0b3Iuc3VwZXJmcmFtZVNwZWM7CisgICAgICAgICpzdXBlcmZyYW1lU3BlY1B0cisrID0gKnJ4UHRyKys7CisgICAgICAgICpzdXBlcmZyYW1lU3BlY1B0ciAgID0gKnJ4UHRyKys7CisKKyAgICAgICAgdWludDhfdCBndHNTcGVjID0gKnJ4UHRyKys7CisKKyAgICAgICAgUEFORGVzY3JpcHRvci5HVFNQZXJtaXQgPSAoZ3RzU3BlYyAmIDB4MDgpID8gRlRERl9UUlVFIDogRlRERl9GQUxTRTsKKyAgICAgICAgdWludDhfdCBndHNEZXNjckNvdW50ID0gZ3RzU3BlYyAmIDB4NzsKKworICAgICAgICBpZiAoZ3RzRGVzY3JDb3VudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBHVFMgaXMgbm90IHN1cHBvcnRlZCwgc28ganVzdCBza2lwIHRoZSBHVFMgZGlyZWN0aW9uIGFuZCBHVFMgbGlzdCBmaWVsZHMgaWYgcHJlc2VudAorICAgICAgICAgICAgcnhQdHIgKz0gKDEgKyAoMyAqIGd0c0Rlc2NyQ291bnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHBlbmRBZGRyU3BlYyA9ICpyeFB0cisrOworICAgICAgICB1aW50OF90IG5yT2ZTaG9ydEFkZHJzID0gcGVuZEFkZHJTcGVjICYgMHgwNzsKKyAgICAgICAgdWludDhfdCBuck9mRXh0QWRkcnMgICA9IChwZW5kQWRkclNwZWMgJiAweDcwKSA+PiA0OworCisgICAgICAgIGludCAgICAgbjsKKworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKG5yT2ZTaG9ydEFkZHJzICsgbnJPZkV4dEFkZHJzKTsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobiA8IG5yT2ZTaG9ydEFkZHJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgKnNob3J0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopICZwZW5kQWRkckxpc3RbIG4gXS5zaG9ydEFkZHJlc3M7CisgICAgICAgICAgICAgICAgKnNob3J0QWRkcmVzc1B0cisrID0gKnJ4QnVmZmVyKys7CisgICAgICAgICAgICAgICAgKnNob3J0QWRkcmVzc1B0ciAgID0gKnJ4QnVmZmVyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9PY3RldCAqZXh0QWRkcmVzc1B0ciA9IChGVERGX09jdGV0ICopICZwZW5kQWRkckxpc3RbIG4gXS5leHRBZGRyZXNzOworICAgICAgICAgICAgICAgIGludCAgICAgICAgIG07CisKKyAgICAgICAgICAgICAgICBmb3IgKG0gPSAwOyBtIDwgODsgbSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKmV4dEFkZHJlc3NQdHIrKyA9ICpyeEJ1ZmZlcisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZVR5cGUgPT0gRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUgJiYKKyAgICAgICAgICAgICBzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbCAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfcmVxQ3VycmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChGVERGX3JlcUN1cnJlbnQtPm1zZ0lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBGVERGX0RBVEFfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX0RhdGFSZXF1ZXN0ICpkYXRhUmVxdWVzdCA9IChGVERGX0RhdGFSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgICAgPSBkYXRhUmVxdWVzdC0+ZHN0UEFOSWQ7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID0gZGF0YVJlcXVlc3QtPmRzdEFkZHJNb2RlOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyICAgICA9IGRhdGFSZXF1ZXN0LT5kc3RBZGRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfUE9MTF9SRVFVRVNUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfUG9sbFJlcXVlc3QgKnBvbGxSZXF1ZXN0ID0gKEZUREZfUG9sbFJlcXVlc3QgKikgRlRERl9yZXFDdXJyZW50OworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNQQU5JZCAgICA9IHBvbGxSZXF1ZXN0LT5jb29yZFBBTklkOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9IHBvbGxSZXF1ZXN0LT5jb29yZEFkZHJNb2RlOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyICAgICA9IHBvbGxSZXF1ZXN0LT5jb29yZEFkZHI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX0Fzc29jaWF0ZVJlcXVlc3QgKmFzc29jaWF0ZVJlcXVlc3QgPSAoRlRERl9Bc3NvY2lhdGVSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgICAgPSBhc3NvY2lhdGVSZXF1ZXN0LT5jb29yZFBBTklkOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9IGFzc29jaWF0ZVJlcXVlc3QtPmNvb3JkQWRkck1vZGU7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIgICAgID0gYXNzb2NpYXRlUmVxdWVzdC0+Y29vcmRBZGRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfRElTQVNTT0NJQVRFX1JFUVVFU1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0ICpkaXNhc3NvY2lhdGVSZXF1ZXN0ID0KKyAgICAgICAgICAgICAgICAgICAgKEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQ7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY1BBTklkICAgID0gZGlzYXNzb2NpYXRlUmVxdWVzdC0+ZGV2aWNlUEFOSWQ7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID0gZGlzYXNzb2NpYXRlUmVxdWVzdC0+ZGV2aWNlQWRkck1vZGU7CisgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIgICAgID0gZGlzYXNzb2NpYXRlUmVxdWVzdC0+ZGV2aWNlQWRkcmVzczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVNQT05TRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX0Fzc29jaWF0ZVJlc3BvbnNlICphc3NvY2lhdGVSZXNwb25zZSA9IChGVERGX0Fzc29jaWF0ZVJlc3BvbnNlICopIEZUREZfcmVxQ3VycmVudDsKKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgICAgICAgID0gRlRERl9FWFRFTkRFRF9BRERSRVNTOworICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyLmV4dEFkZHJlc3MgPSBhc3NvY2lhdGVSZXNwb25zZS0+ZGV2aWNlQWRkcmVzczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEZUREZfU3RhdHVzIHN0YXR1cyA9IEZUREZfdW5zZWN1cmVGcmFtZShyeEJ1ZmZlciwgcnhQdHIsIGZyYW1lSGVhZGVyLCBzZWN1cml0eUhlYWRlcik7CisKKyAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLnNlY3VyaXR5RmFpbHVyZUNvdW50Kys7CisgICAgICAgIH0KKworICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUigoRlRERl9PY3RldCAqKXBheWxvYWRJRUxpc3QpOworCisgICAgICAgIC8vIFNpbmNlIHVuc2VjdXJlIG9mIGFja25vd2xlZGdlbWVudCBmcmFtZSBpcyBhbHdheXMgc3VjY2Vzc2Z1bCwKKyAgICAgICAgLy8gbm90aGluZyBzcGVjaWFsIGhhcyB0byBiZSBkb25lIHRvIGdldCB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbiBjb3JyZWN0LgorICAgICAgICBGVERGX3NlbmRDb21tU3RhdHVzSW5kaWNhdGlvbihGVERGX3JlcUN1cnJlbnQsIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIuUEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPmRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyLT5zZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlci0+a2V5SWRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlci0+a2V5U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlci0+a2V5SW5kZXgpOworCisgICAgICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUgJiYgRlRERl9yZXFDdXJyZW50KQorICAgICAgICB7CisgICAgICAgICAgICBzZW5kQ29uZmlybShGVERGX05PX0FDSywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudC0+bXNnSWQpOworCisgICAgICAgICAgICBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCAmJiBmcmFtZVR5cGUgIT0gRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUpCisgICAgeworICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuUlhTdWNjZXNzQ291bnQrKzsKKyAgICB9CisKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQgJiYgZnJhbWVUeXBlICE9IEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FKQorICAgIHsKKyAgICAgICAgRlRERl9UaW1lIHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAsIHJlYWRCdWYpOworCisgICAgICAgIEZUREZfY29ycmVjdFNsb3RUaW1lKHRpbWVzdGFtcCk7CisgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKKyAgICBzd2l0Y2ggKGZyYW1lVHlwZSkKKyAgICB7CisgICAgY2FzZSBGVERGX0FDS05PV0xFREdFTUVOVF9GUkFNRToKKworICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX25yT2ZSZXRyaWVzID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlRYU3VjY2Vzc0NvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChGVERGX25yT2ZSZXRyaWVzID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLnJldHJ5Q291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MubXVsdGlwbGVSZXRyeUNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9PSBGVERGX0ZSQU1FX1ZFUlNJT05fRSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnJ4RW5oQWNrRnJtT2tDbnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0JFQUNPTl9GUkFNRToKKyAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnJ4QmVhY29uRnJtT2tDbnQrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfREFUQV9GUkFNRToKKyAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnJ4RGF0YUZybU9rQ250Kys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX01BQ19DT01NQU5EX0ZSQU1FOgorICAgICAgICBGVERGX3BpYi50cmFmZmljQ291bnRlcnMucnhDbWRGcm1Pa0NudCsrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9NVUxUSVBVUlBPU0VfRlJBTUU6CisgICAgICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy5yeE11bHRpUHVycEZybU9rQ250Kys7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChmcmFtZVR5cGUgPT0gRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUpCisgICAgeworICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnUyA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoT05fT0ZGX1JFR01BUF9UWF9GTEFHX1MsIEZUREZfVFhfREFUQV9CVUZGRVIpOworCisgICAgICAgIHdoaWxlICgqdHhGbGFnUyAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVQpCisgICAgICAgIHsgfQorCisgICAgICAgIC8vIEl0IGlzIHJlcXVpcmVkIHRvIGNhbGwgRlRERl9wcm9jZXNzVHhFdmVudCBoZXJlIGJlY2F1c2UgYW4gUlggYWNrIGdlbmVyYXRlcyB0d28gZXZlbnRzCisgICAgICAgIC8vIFRoZSBSWCBldmVudCBpcyByYWlzZWQgZmlyc3QsIHRoZW4gYWZ0ZXIgYW4gSUZTIHRoZSBUWCBldmVudCBpcyByYWlzZWQuIEhvd2V2ZXIsCisgICAgICAgIC8vIHRoZSBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCByZXF1aXJlcyB0aGF0IGJvdGggZXZlbnRzIGhhdmUgYmVlbiBoYW5kbGVkLgorICAgICAgICBGVERGX3Byb2Nlc3NUeEV2ZW50KCk7CisKKyAgICAgICAgRlRERl9TTiBTTiA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9NQUNTTiwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAgICAgaWYgKEZUREZfcmVxQ3VycmVudCAmJgorICAgICAgICAgICAgZnJhbWVIZWFkZXItPlNOID09IFNOKQorICAgICAgICB7CisjaWZuZGVmIEZUREZfTk9fQ1NMCisKKyAgICAgICAgICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfVGltZSB0aW1lc3RhbXAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWYpOworCisgICAgICAgICAgICAgICAgRlRERl9zZXRQZWVyQ3NsVGltaW5nKGhlYWRlcklFTGlzdCwgdGltZXN0YW1wKTsKKyAgICAgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCA9PSBGVERGX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9jb3JyZWN0U2xvdFRpbWVGcm9tQWNrKGhlYWRlcklFTGlzdCk7CisKKyAgICAgICAgICAgICAgICBGVERGX1RzY2hSZXRyeSAqdHNjaFJldHJ5ID0gRlRERl9nZXRUc2NoUmV0cnkoRlRERl9nZXRSZXF1ZXN0QWRkcmVzcyhGVERGX3JlcUN1cnJlbnQpKTsKKworICAgICAgICAgICAgICAgIHRzY2hSZXRyeS0+bnJPZlJldHJpZXMgICAgID0gMDsKKyAgICAgICAgICAgICAgICBGVERGX3RzY2hTbG90TGluay0+cmVxdWVzdCA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworICAgICAgICAgICAgc3dpdGNoIChGVERGX3JlcUN1cnJlbnQtPm1zZ0lkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBGVERGX0RBVEFfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX1RpbWUgICAgICAgICAgdGltZXN0YW1wICAgICA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgICAgICAgICAgICAgRlRERl9OdW1PZkJhY2tvZmZzIG51bU9mQmFja29mZnMgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgICAgICAgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKChGVERGX0RhdGFSZXF1ZXN0ICopRlRERl9yZXFDdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU1VDQ0VTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtT2ZCYWNrb2ZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSUVMaXN0KTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfUE9MTF9SRVFVRVNUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghKGZyYW1lSGVhZGVyLT5vcHRpb25zICYgRlRERl9PUFRfRlJBTUVfUEVORElORykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX3NlbmRQb2xsQ29uZmlybSgoRlRERl9Qb2xsUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwgRlRERl9OT19EQVRBKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVFVRVNUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfQXNzb2NBZG1pbiAqYXNzb2NBZG1pbiA9ICZGVERGX2FhOworCisgICAgICAgICAgICAgICAgaWYgKGFzc29jQWRtaW4tPmZhc3RBID09IEZUREZfVFJVRSB8fAorICAgICAgICAgICAgICAgICAgICBhc3NvY0FkbWluLT5kYXRhUiA9PSBGVERGX0ZBTFNFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGltZXN0YW1wID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgICAgICAgICAgICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZXN0YW1wICsgRlRERl9waWIucmVzcG9uc2VXYWl0VGltZSAqIEZUREZfQkFTRV9TVVBFUkZSQU1FX0RVUkFUSU9OKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9GUkFNRV9QRU5ESU5HKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfc2VuZEFzc29jaWF0ZUNvbmZpcm0oKEZUREZfQXNzb2NpYXRlUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX05PX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVNQT05TRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX0Fzc29jaWF0ZVJlc3BvbnNlICphc3NvY1Jlc3AgPSAoRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqKUZUREZfcmVxQ3VycmVudDsKKworICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyBzcmNBZGRyLCBkc3RBZGRyOworICAgICAgICAgICAgICAgIHNyY0FkZHIuZXh0QWRkcmVzcyA9IEZUREZfcGliLmV4dEFkZHJlc3M7CisgICAgICAgICAgICAgICAgZHN0QWRkci5leHRBZGRyZXNzID0gYXNzb2NSZXNwLT5kZXZpY2VBZGRyZXNzOworCisgICAgICAgICAgICAgICAgRlRERl9zZW5kQ29tbVN0YXR1c0luZGljYXRpb24oRlRERl9yZXFDdXJyZW50LCBGVERGX1NVQ0NFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIuUEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9FWFRFTkRFRF9BRERSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9FWFRFTkRFRF9BRERSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5zZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5SWRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5SW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEZUREZfT1JQSEFOX1JFU1BPTlNFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfT3JwaGFuUmVzcG9uc2UgKm9ycGhhblJlc3AgPSAoRlRERl9PcnBoYW5SZXNwb25zZSAqKUZUREZfcmVxQ3VycmVudDsKKworICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyBzcmNBZGRyLCBkc3RBZGRyOworICAgICAgICAgICAgICAgIHNyY0FkZHIuZXh0QWRkcmVzcyA9IEZUREZfcGliLmV4dEFkZHJlc3M7CisgICAgICAgICAgICAgICAgZHN0QWRkci5leHRBZGRyZXNzID0gb3JwaGFuUmVzcC0+b3JwaGFuQWRkcmVzczsKKworICAgICAgICAgICAgICAgIEZUREZfc2VuZENvbW1TdGF0dXNJbmRpY2F0aW9uKEZUREZfcmVxQ3VycmVudCwgRlRERl9TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLlBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPnNlY3VyaXR5TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JwaGFuUmVzcC0+a2V5SWRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPmtleVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnBoYW5SZXNwLT5rZXlJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9ESVNBU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX3NlbmREaXNhc3NvY2lhdGVDb25maXJtKChGVERGX0Rpc2Fzc29jaWF0ZVJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsIEZUREZfU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgRlRERl9SRU1PVEVfUkVRVUVTVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX1JlbW90ZVJlcXVlc3QgKnJlbW90ZVJlcXVlc3QgPSAoRlRERl9SZW1vdGVSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKworICAgICAgICAgICAgICAgIGlmIChyZW1vdGVSZXF1ZXN0LT5yZW1vdGVJZCA9PSBGVERGX1JFTU9URV9QQU5fSURfQ09ORkxJQ1RfTk9USUZJQ0FUSU9OKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9zZW5kU3luY0xvc3NJbmRpY2F0aW9uKEZUREZfUEFOX0lEX0NPTkZMSUNULCBzZWN1cml0eUhlYWRlcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoRlRERl9yZXFDdXJyZW50LT5tc2dJZCAhPSBGVERGX0RBVEFfUkVRVUVTVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBmb3IgZGF0YSByZXF1ZXN0IHRoZSBhcHBsaWNhdGlvbiBvd25zIHRoZSBtZW1vcnkKKyAgICAgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUigoRlRERl9PY3RldCAqKXBheWxvYWRJRUxpc3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICgoZnJhbWVIZWFkZXItPmZyYW1lVmVyc2lvbiA9PSBGVERGX0ZSQU1FX1ZFUlNJT05fRSB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkgJiYKKyAgICAgICAgICAgICAoZnJhbWVIZWFkZXItPm9wdGlvbnMgJiBGVERGX09QVF9BQ0tfUkVRVUVTVEVEKSkKKyAgICB7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKyAgICAgICAgc3RhdGljIEZUREZfRnJhbWVIZWFkZXIgYWZoOworICAgICAgICBGVERGX0ZyYW1lSGVhZGVyICAgICAgICphY2tGcmFtZUhlYWRlciA9ICZhZmg7CisKKyAgICAgICAgYWNrRnJhbWVIZWFkZXItPmZyYW1lVHlwZSA9IEZUREZfQUNLTk9XTEVER0VNRU5UX0ZSQU1FOworICAgICAgICBhY2tGcmFtZUhlYWRlci0+b3B0aW9ucyAgID0KKyAgICAgICAgICAgIChmcmFtZUhlYWRlci0+b3B0aW9ucyAmCisgICAgICAgICAgICAgKEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQgfCBGVERGX09QVF9TRVFfTlJfU1VQUFJFU1NFRCkpIHwgRlRERl9PUFRfRU5IQU5DRUQ7CisKKyAgICAgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCA9PSBGVERGX1RSVUUgfHwKKyAgICAgICAgICAgIEZUREZfcGliLnRzY2hFbmFibGVkID09IEZUREZfVFJVRSB8fAorICAgICAgICAgICAgRlRERl9waWIuRUFja0lFTGlzdC5uck9mSUVzICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFja0ZyYW1lSGVhZGVyLT5vcHRpb25zIHw9IEZUREZfT1BUX0lFU19QUkVTRU5UOworICAgICAgICB9CisKKyAgICAgICAgYWNrRnJhbWVIZWFkZXItPmRzdEFkZHJNb2RlID0gRlRERl9OT19BRERSRVNTOworICAgICAgICBhY2tGcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgPSBGVERGX05PX0FERFJFU1M7CisgICAgICAgIGFja0ZyYW1lSGVhZGVyLT5TTiAgICAgICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKworICAgICAgICBGVERGX09jdGV0ICp0eFB0ciA9IChGVERGX09jdGV0ICopIEZUREZfR0VUX1JFR19BRERSKFJFVEVOVElPTl9SQU1fVFhfRklGTykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX0JVRkZFUl9MRU5HVEggKiBGVERGX1RYX0FDS19CVUZGRVIpOworCisgICAgICAgIC8vIFNraXAgUEhZIGhlYWRlciAoPSBNQUMgbGVuZ3RoKQorICAgICAgICB0eFB0cisrOworCisgICAgICAgIHR4UHRyID0gRlRERl9hZGRGcmFtZUhlYWRlcih0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFja0ZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5vcHRpb25zICYgRlRERl9PUFRfU0VDVVJJVFlfRU5BQkxFRCkKKyAgICAgICAgeworICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXItPmZyYW1lQ291bnRlciAgICAgPSBGVERGX3BpYi5mcmFtZUNvdW50ZXI7CisgICAgICAgICAgICBzZWN1cml0eUhlYWRlci0+ZnJhbWVDb3VudGVyTW9kZSA9IEZUREZfcGliLmZyYW1lQ291bnRlck1vZGU7CisKKyAgICAgICAgICAgIHR4UHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRlRERl9hZGRTZWN1cml0eUhlYWRlcih0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlcik7CisgICAgICAgIH0KKworI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9UUlVFKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgRlRERl9PY3RldCAgICAgICAgcGhhc2VBbmRQZXJpb2RbIDQgXTsKKyAgICAgICAgICAgIHN0YXRpYyBGVERGX0lFRGVzY3JpcHRvciBjc2xJRSAgICAgPSB7IDB4MWEsIDQsIHsgcGhhc2VBbmRQZXJpb2QgfSB9OworICAgICAgICAgICAgc3RhdGljIEZUREZfSUVMaXN0ICAgICAgIGNzbElFTGlzdCA9IHsgMSwgJmNzbElFIH07CisgICAgICAgICAgICBGVERGX1RpbWUgICAgICAgICAgICAgICAgY3VyVGltZSAgID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworCisgICAgICAgICAgICBGVERGX1RpbWUgICAgICAgICAgICAgICAgZGVsdGEgICAgID0gY3VyVGltZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lIC0gRlRERl9waWIuQ1NMUGVyaW9kICogMTApOworCisgICAgICAgICAgICAqKEZUREZfUGVyaW9kICopKHBoYXNlQW5kUGVyaW9kICsgMCkgPSAoRlRERl9QZXJpb2QpKGRlbHRhIC8gMTApOworICAgICAgICAgICAgKihGVERGX1BlcmlvZCAqKShwaGFzZUFuZFBlcmlvZCArIDIpID0gRlRERl9waWIuQ1NMUGVyaW9kOworCisgICAgICAgICAgICB0eFB0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEZUREZfYWRkSWVzKHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3NsSUVMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRlRERl9waWIuRUFja0lFTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GQUxTRSk7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkID09IEZUREZfVFJVRSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9UaW1lIHJ4VGltZXN0YW1wID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCwgcmVhZEJ1Zik7CisKKyAgICAgICAgICAgIHR4UHRyID0gRlRERl9hZGRDb3JyVGltZUlFKHR4UHRyLCByeFRpbWVzdGFtcCk7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisgICAgICAgIGlmICghRlRERl9waWIubGVFbmFibGVkICYmICFGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgdHhQdHIgPSBGVERGX2FkZEllcyh0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZUREZfcGliLkVBY2tJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgRlRERl9zZW5kQWNrRnJhbWUoZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eFB0cik7CisjZW5kaWYgLyogIUZUREZfTk9fQ1NMIHx8ICFGVERGX05PX1RTQ0ggKi8KKworICAgICAgICBpZiAoZHVwbGljYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUigoRlRERl9PY3RldCAqKXBheWxvYWRJRUxpc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZyYW1lVHlwZSA9PSBGVERGX0RBVEFfRlJBTUUgfHwgZnJhbWVUeXBlID09IEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FKQorICAgIHsKKyAgICAgICAgRlRERl9EYXRhTGVuZ3RoIHBheWxvYWRMZW5ndGggPSBmcmFtZUxlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ4UHRyIC0gcnhCdWZmZXIpICsgMSAtIG1pY0xlbmd0aCAtIEZUREZfRkNTX0xFTkdUSDsKKworICAgICAgICBpZiAoRlRERl9yZXFDdXJyZW50ICYmCisgICAgICAgICAgICBGVERGX3JlcUN1cnJlbnQtPm1zZ0lkID09IEZUREZfUE9MTF9SRVFVRVNUKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1BvbGxSZXF1ZXN0ICpwb2xsUmVxdWVzdCA9IChGVERGX1BvbGxSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKworICAgICAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSA9PSBwb2xsUmVxdWVzdC0+Y29vcmRBZGRyTW9kZSAmJgorICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNQQU5JZCA9PSBwb2xsUmVxdWVzdC0+Y29vcmRQQU5JZCAmJgorICAgICAgICAgICAgICAgICgoZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUyAmJgorICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuc2hvcnRBZGRyZXNzID09IHBvbGxSZXF1ZXN0LT5jb29yZEFkZHIuc2hvcnRBZGRyZXNzKSB8fAorICAgICAgICAgICAgICAgICAoZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUyAmJgorICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuZXh0QWRkcmVzcyA9PSBwb2xsUmVxdWVzdC0+Y29vcmRBZGRyLmV4dEFkZHJlc3MpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9zZW5kUG9sbENvbmZpcm0ocG9sbFJlcXVlc3QsIEZUREZfTk9fREFUQSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUREZfc2VuZFBvbGxDb25maXJtKHBvbGxSZXF1ZXN0LCBGVERGX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGVERGX3JlcUN1cnJlbnQgJiYKKyAgICAgICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50LT5tc2dJZCA9PSBGVERGX0FTU09DSUFURV9SRVFVRVNUICYmCisgICAgICAgICAgICAgICAgIHBheWxvYWRMZW5ndGggPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc2VuZENvbmZpcm0oRlRERl9OT19EQVRBLCBGVERGX0FTU09DSUFURV9SRVFVRVNUKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgbXBkdUxpbmtRdWFsaXR5ID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWYpOworICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICB0aW1lc3RhbXAgICAgICAgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKFJFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWYpOworCisgICAgICAgICAgICBGVERGX3NlbmREYXRhSW5kaWNhdGlvbihmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZElFTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wZHVMaW5rUXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCk7CisgICAgICAgIH0KKworI2lmbmRlZiBGVERGX05PX0NTTAorICAgICAgICBlbHNlIGlmIChoZWFkZXJJRUxpc3QtPm5yT2ZJRXMgPT0gMSAmJgorICAgICAgICAgICAgICAgICBoZWFkZXJJRUxpc3QtPklFc1sgMCBdLklEID09IDB4MWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfUGVyaW9kIHJ6VGltZSA9ICoodWludDE2X3QgKikgaGVhZGVySUVMaXN0LT5JRXNbIDAgXS5jb250ZW50LnJhdzsKKworICAgICAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICAgICAgICAgIEZUREZfVGltZSBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworCisgICAgICAgICAgICBGVERGX3J6VGltZSA9IGN1clRpbWUgKyAoRlRERl9UaW1lKSByelRpbWUgKiAxMCArIDI2MDsgIC8vIDI2MCBsZW5ndGggb2YgbWF4IGZyYW1lIGluIHN5bWJvbHMKKworICAgICAgICAgICAgRlRERl9UaW1lIENTTFBlcmlvZCA9IEZUREZfcGliLkNTTFBlcmlvZCAqIDEwOworICAgICAgICAgICAgRlRERl9UaW1lIGRlbHRhICAgICA9IEZUREZfcnpUaW1lIC0gRlRERl9zdGFydENzbFNhbXBsZVRpbWU7CisKKyAgICAgICAgICAgIHdoaWxlIChkZWx0YSA8IDB4ODAwMDAwMDApICAgIC8vIEEgZGVsdGEgbGFyZ2VyIHRoYW4gMHg4MDAwMDAwMCBpcyBhc3N1bWVkIGEgbmVnYXRpdmUgZGVsdGEKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSArPSBDU0xQZXJpb2Q7CisgICAgICAgICAgICAgICAgZGVsdGEgICAgICAgICAgICAgICAgICAgID0gRlRERl9yelRpbWUgLSBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUsIEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lKTsKKworICAgICAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUigoRlRERl9PY3RldCAqKXBheWxvYWRJRUxpc3QpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGZyYW1lVHlwZSA9PSBGVERGX01BQ19DT01NQU5EX0ZSQU1FKQorICAgIHsKKyAgICAgICAgRlRERl9wcm9jZXNzQ29tbWFuZEZyYW1lKHJ4UHRyLCBmcmFtZUhlYWRlciwgc2VjdXJpdHlIZWFkZXIsIHBheWxvYWRJRUxpc3QpOworICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZVR5cGUgPT0gRlRERl9CRUFDT05fRlJBTUUpCisgICAgeworICAgICAgICBGVERGX09jdGV0ICpzdXBlcmZyYW1lU3BlY1B0ciA9IChGVERGX09jdGV0ICopJlBBTkRlc2NyaXB0b3Iuc3VwZXJmcmFtZVNwZWM7CisgICAgICAgIHN1cGVyZnJhbWVTcGVjUHRyKys7CisKKyAgICAgICAgaWYgKEZUREZfaXNQQU5Db29yZGluYXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZyYW1lSGVhZGVyLT5zcmNQQU5JZCA9PSBGVERGX3BpYi5QQU5JZCAmJiAoKnN1cGVyZnJhbWVTcGVjUHRyICYgMHg0MCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgICAgICAgICBGVERGX3NlbmRTeW5jTG9zc0luZGljYXRpb24oRlRERl9QQU5fSURfQ09ORkxJQ1QsIHNlY3VyaXR5SGVhZGVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRlRERl9waWIuYXNzb2NpYXRlZFBBTkNvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZnJhbWVIZWFkZXItPnNyY1BBTklkID09IEZUREZfcGliLlBBTklkICYmICgqc3VwZXJmcmFtZVNwZWNQdHIgJiAweDQwKSAmJgorICAgICAgICAgICAgICAgICgoZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUyAmJgorICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuc2hvcnRBZGRyZXNzICE9IEZUREZfcGliLmNvb3JkU2hvcnRBZGRyZXNzKSB8fAorICAgICAgICAgICAgICAgICAoZnJhbWVIZWFkZXItPnNyY0FkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUyAmJgorICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuZXh0QWRkcmVzcyAhPSBGVERGX3BpYi5jb29yZEV4dEFkZHJlc3MpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUigoRlRERl9PY3RldCAqKXBheWxvYWRJRUxpc3QpOworICAgICAgICAgICAgICAgIEZUREZfc2VuZFBBTklkQ29uZmxpY3ROb3RpZmljYXRpb24oZnJhbWVIZWFkZXIsIHNlY3VyaXR5SGVhZGVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGVERGX0RhdGFMZW5ndGggYmVhY29uUGF5bG9hZExlbmd0aCA9IGZyYW1lTGVuIC0gKHJ4UHRyIC0gcnhCdWZmZXIpICsgMSAtIG1pY0xlbmd0aCAtIEZUREZfRkNTX0xFTkdUSDsKKworICAgICAgICBpZiAoRlRERl9waWIuYXV0b1JlcXVlc3QgPT0gRlRERl9GQUxTRSB8fAorICAgICAgICAgICAgYmVhY29uUGF5bG9hZExlbmd0aCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1RpbWUgdGltZXN0YW1wID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCdWYpOworCisgICAgICAgICAgICBGVERGX0JlYWNvbk5vdGlmeUluZGljYXRpb24gKmJlYWNvbk5vdGlmeUluZGljYXRpb24gPQorICAgICAgICAgICAgICAgIChGVERGX0JlYWNvbk5vdGlmeUluZGljYXRpb24gKikgRlRERl9HRVRfTVNHX0JVRkZFUigKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEZUREZfQmVhY29uTm90aWZ5SW5kaWNhdGlvbikpOworCisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5tc2dJZCAgICAgICAgID0gRlRERl9CRUFDT05fTk9USUZZX0lORElDQVRJT047CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5CU04gICAgICAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+UEFORGVzY3JpcHRvciA9ICZQQU5EZXNjcmlwdG9yOworICAgICAgICAgICAgYmVhY29uTm90aWZ5SW5kaWNhdGlvbi0+cGVuZEFkZHJTcGVjICA9IHBlbmRBZGRyU3BlYzsKKyAgICAgICAgICAgIGJlYWNvbk5vdGlmeUluZGljYXRpb24tPmFkZHJMaXN0ICAgICAgPSBwZW5kQWRkckxpc3Q7CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5zZHVMZW5ndGggICAgID0gYmVhY29uUGF5bG9hZExlbmd0aDsKKyAgICAgICAgICAgIGJlYWNvbk5vdGlmeUluZGljYXRpb24tPnNkdSAgICAgICAgICAgPSBGVERGX0dFVF9EQVRBX0JVRkZFUihiZWFjb25QYXlsb2FkTGVuZ3RoKTsKKyAgICAgICAgICAgIGJlYWNvbk5vdGlmeUluZGljYXRpb24tPkVCU04gICAgICAgICAgPSBmcmFtZUhlYWRlci0+U047CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5iZWFjb25UeXBlICAgID0KKyAgICAgICAgICAgICAgICBmcmFtZUhlYWRlci0+ZnJhbWVWZXJzaW9uID09IEZUREZfRlJBTUVfVkVSU0lPTl9FID8gRlRERl9FTkhBTkNFRF9CRUFDT04gOiBGVERGX05PUk1BTF9CRUFDT047CisgICAgICAgICAgICBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5JRUxpc3QgICAgICAgID0gcGF5bG9hZElFTGlzdDsKKyAgICAgICAgICAgIGJlYWNvbk5vdGlmeUluZGljYXRpb24tPnRpbWVzdGFtcCAgICAgPSB0aW1lc3RhbXA7CisKKyAgICAgICAgICAgIG1lbWNweShiZWFjb25Ob3RpZnlJbmRpY2F0aW9uLT5zZHUsIHJ4UHRyLCBiZWFjb25QYXlsb2FkTGVuZ3RoKTsKKworICAgICAgICAgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBiZWFjb25Ob3RpZnlJbmRpY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGVERGX3JlcUN1cnJlbnQgJiYKKyAgICAgICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50LT5tc2dJZCA9PSBGVERGX1NDQU5fUkVRVUVTVCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9SRUxfREFUQV9CVUZGRVIoKEZUREZfT2N0ZXQgKilwYXlsb2FkSUVMaXN0KTsKKyAgICAgICAgICAgIEZUREZfYWRkUEFOZGVzY3JpcHRvcigmUEFORGVzY3JpcHRvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX1JFTF9EQVRBX0JVRkZFUigoRlRERl9PY3RldCAqKXBheWxvYWRJRUxpc3QpOworICAgICAgICB9CisgICAgfQorCisjaWYgRlRERl9VU0VfTFBEUAorI2lmIEZUREZfRlBfQklUX1RFU1RfTU9ERQorCisgICAgaWYgKEZUREZfbHBkcElzRW5hYmxlZCgpICYmICFGVERGX3JlcUN1cnJlbnQgJiYgZnJhbWVUeXBlID09IEZUREZfREFUQV9GUkFNRSkKKyAgICB7CisgICAgICAgIEZUREZfcHJvY2Vzc1R4UGVuZGluZyhmcmFtZUhlYWRlciwgc2VjdXJpdHlIZWFkZXIpOworICAgIH0KKworI2Vsc2UgLyogRlRERl9GUF9CSVRfVEVTVF9NT0RFICovCisKKyAgICBpZiAoIUZUREZfcmVxQ3VycmVudCAmJiBmcmFtZVR5cGUgPT0gRlRERl9EQVRBX0ZSQU1FKQorICAgIHsKKyAgICAgICAgRlRERl9wcm9jZXNzVHhQZW5kaW5nKGZyYW1lSGVhZGVyLCBzZWN1cml0eUhlYWRlcik7CisgICAgfQorCisjZW5kaWYgLyogRlRERl9GUF9CSVRfVEVTVF9NT0RFICovCisjZW5kaWYgLyogRlRERl9VU0VfTFBEUCAqLworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBGVERGX3NjaGVkdWxlVHNjaChOVUxMKTsKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCit9CisKKworCit2b2lkIEZUREZfcHJvY2Vzc1J4RXZlbnQodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqcnhFdmVudCA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQ7CisKKyAgICBpZiAoKnJ4RXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpyeEV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRTsKKyNlbHNlCisgICAgICAgICpyeEV2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCpyeEV2ZW50ICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FKQorICAgIHsKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKnJ4RXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRTsKKyNlbHNlCisgICAgICAgICpyeEV2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmICgqcnhFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FKQorICAgIHsKKyAgICAgICAgLy8gTm8gQVBJIGRlZmluZWQgdG8gcmVwb3J0IHRoaXMgZXJyb3IgdG8gdGhlIGhpZ2hlciBsYXllciwgc28ganVzdCBjbGVhciBpdC4KKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKnJ4RXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FOworI2Vsc2UKKyAgICAgICAgKnJ4RXZlbnQgID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0U7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoKnJ4RXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0UpCisgICAgeworICAgICAgICBpbnQgcmVhZEJ1ZiAgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUik7CisgICAgICAgIGludCB3cml0ZUJ1ZiA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhfV1JJVEVfQlVGX1BUUik7CisKKyAgICAgICAgd2hpbGUgKHJlYWRCdWYgIT0gd3JpdGVCdWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb2Nlc3NSeEZyYW1lKHJlYWRCdWYgJSA4KTsKKyAgICAgICAgICAgIHJlYWRCdWYgPSAocmVhZEJ1ZiArIDEpICUgMTY7CisgICAgICAgIH0KKworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUiwgcmVhZEJ1Zik7CisKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKnJ4RXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRTsKKyNlbHNlCisgICAgICAgICpyeEV2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjRXZlbnQgPSAodm9sYXRpbGUgdWludDMyX3QgKikgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQ7CisKKyAgICBpZiAoKmxtYWNFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FKQorICAgIHsKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKmxtYWNFdmVudCAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0U7CisjZWxzZQorICAgICAgICAqbG1hY0V2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FOworI2VuZGlmCisKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgICAgIEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0ID0gRlRERl9yZXFDdXJyZW50OworCisgICAgICAgIGlmIChyZXF1ZXN0LT5tc2dJZCA9PSBGVERGX1NDQU5fUkVRVUVTVCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zY2FuUmVhZHkoKEZUREZfU2NhblJlcXVlc3QgKikgcmVxdWVzdCk7CisgICAgICAgIH0KKworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICB9CisKKyAgICBpZiAoKmxtYWNFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FKQorICAgIHsKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKmxtYWNFdmVudCAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX0U7CisjZWxzZQorICAgICAgICAqbG1hY0V2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FOworI2VuZGlmCisKKyAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuUnhFeHBpcmVkQ291bnQrKzsKKyAgICAgICAgfQorCisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfc2NoZWR1bGVUc2NoKE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyAgICAgICAgICAgIGlmIChGVERGX3JlcUN1cnJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9Nc2dJZCBtc2dJZCA9IEZUREZfcmVxQ3VycmVudC0+bXNnSWQ7CisKKyAgICAgICAgICAgICAgICBpZiAobXNnSWQgPT0gRlRERl9QT0xMX1JFUVVFU1QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX3NlbmRQb2xsQ29uZmlybSgoRlRERl9Qb2xsUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwgRlRERl9OT19EQVRBKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobXNnSWQgPT0gRlRERl9TQ0FOX1JFUVVFU1QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX3NjYW5SZWFkeSgoRlRERl9TY2FuUmVxdWVzdCAqKSBGVERGX3JlcUN1cnJlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtc2dJZCA9PSBGVERGX0FTU09DSUFURV9SRVFVRVNUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9zZW5kQXNzb2NpYXRlQ29uZmlybSgoRlRERl9Bc3NvY2lhdGVSZXF1ZXN0ICopRlRERl9yZXFDdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTk9fREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICB9CisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisKKyAgICBpZiAoKmxtYWNFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FKQorICAgIHsKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKmxtYWNFdmVudCAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX0U7CisjZWxzZQorICAgICAgICAqbG1hY0V2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FOworI2VuZGlmCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKworICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5CT0lycUNvdW50Kys7CisgICAgICAgIH0KKworICAgICAgICBGVERGX3NkYkZzbUJhY2tvZmZJUlEoKTsKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworICAgIH0KKworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNlbmRDb25maXJtKEZUREZfU3RhdHVzIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTXNnSWQgIG1zZ0lkKQoreworICAgIHN3aXRjaCAobXNnSWQpCisgICAgeworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGNhc2UgRlRERl9EQVRBX1JFUVVFU1Q6CisgICAgeworICAgICAgICBGVERGX0RhdGFSZXF1ZXN0ICAqZGF0YVJlcXVlc3QgICA9IChGVERGX0RhdGFSZXF1ZXN0ICopIEZUREZfcmVxQ3VycmVudDsKKworICAgICAgICBGVERGX1RpbWUgICAgICAgICAgdGltZXN0YW1wICAgICA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgICAgICBGVERGX1NOICAgICAgICAgICAgU04gICAgICAgICAgICA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9NQUNTTiwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgICAgIEZUREZfTnVtT2ZCYWNrb2ZmcyBudW1PZkJhY2tvZmZzID0gRlRERl9HRVRfRklFTERfSU5ERVhFRChSRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVFhfREFUQV9CVUZGRVIpOworCisgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKGRhdGFSZXF1ZXN0LCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU9mQmFja29mZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRlRERl9QT0xMX1JFUVVFU1Q6CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfc2VuZFBvbGxDb25maXJtKChGVERGX1BvbGxSZXF1ZXN0ICopRlRERl9yZXFDdXJyZW50LCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfQVNTT0NJQVRFX1JFUVVFU1Q6CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfc2VuZEFzc29jaWF0ZUNvbmZpcm0oKEZUREZfQXNzb2NpYXRlUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmYpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfQVNTT0NJQVRFX1JFU1BPTlNFOgorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX0Fzc29jaWF0ZVJlc3BvbnNlICphc3NvY1Jlc3AgPSAoRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqKUZUREZfcmVxQ3VycmVudDsKKworICAgICAgICAgICAgRlRERl9BZGRyZXNzIHNyY0FkZHIsIGRzdEFkZHI7CisgICAgICAgICAgICBzcmNBZGRyLmV4dEFkZHJlc3MgPSBGVERGX3BpYi5leHRBZGRyZXNzOworICAgICAgICAgICAgZHN0QWRkci5leHRBZGRyZXNzID0gYXNzb2NSZXNwLT5kZXZpY2VBZGRyZXNzOworCisgICAgICAgICAgICBGVERGX3NlbmRDb21tU3RhdHVzSW5kaWNhdGlvbihGVERGX3JlcUN1cnJlbnQsIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLlBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9FWFRFTkRFRF9BRERSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPnNlY3VyaXR5TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5rZXlJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9PUlBIQU5fUkVTUE9OU0U6CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfT3JwaGFuUmVzcG9uc2UgKm9ycGhhblJlc3AgPSAoRlRERl9PcnBoYW5SZXNwb25zZSAqKUZUREZfcmVxQ3VycmVudDsKKworICAgICAgICAgICAgRlRERl9BZGRyZXNzIHNyY0FkZHIsIGRzdEFkZHI7CisgICAgICAgICAgICBzcmNBZGRyLmV4dEFkZHJlc3MgPSBGVERGX3BpYi5leHRBZGRyZXNzOworICAgICAgICAgICAgZHN0QWRkci5leHRBZGRyZXNzID0gb3JwaGFuUmVzcC0+b3JwaGFuQWRkcmVzczsKKworICAgICAgICAgICAgRlRERl9zZW5kQ29tbVN0YXR1c0luZGljYXRpb24oRlRERl9yZXFDdXJyZW50LCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi5QQU5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JwaGFuUmVzcC0+c2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPmtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPmtleVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ycGhhblJlc3AtPmtleUluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0RJU0FTU09DSUFURV9SRVFVRVNUOgorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NlbmREaXNhc3NvY2lhdGVDb25maXJtKChGVERGX0Rpc2Fzc29jaWF0ZVJlcXVlc3QgKilGVERGX3JlcUN1cnJlbnQsIHN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TQ0FOX1JFUVVFU1Q6CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfc2VuZFNjYW5Db25maXJtKChGVERGX1NjYW5SZXF1ZXN0ICopRlRERl9yZXFDdXJyZW50LCBzdGF0dXMpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfQkVBQ09OX1JFUVVFU1Q6CisgICAgICAgIEZUREZfc2VuZEJlYWNvbkNvbmZpcm0oKEZUREZfQmVhY29uUmVxdWVzdCAqKUZUREZfcmVxQ3VycmVudCwgc3RhdHVzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfUkVNT1RFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworICAgIGNhc2UgRlRERl9UUkFOU1BBUkVOVF9SRVFVRVNUOgorICAgIHsKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisgICAgICAgIEZUREZfVHJhbnNwYXJlbnRSZXF1ZXN0ICp0cmFuc3BhcmVudFJlcXVlc3QgPSAoRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKikgRlRERl9yZXFDdXJyZW50OworI2VuZGlmCisgICAgICAgIEZUREZfQml0bWFwMzIgICAgICAgICAgICB0cmFuc3BhcmVudFN0YXR1cyAgPSAwOworCisgICAgICAgIHN3aXRjaCAoc3RhdHVzKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRlRERl9TVUNDRVNTOgorICAgICAgICAgICAgdHJhbnNwYXJlbnRTdGF0dXMgPSBGVERGX1RSQU5TUEFSRU5UX1NFTkRfU1VDQ0VTU0ZVTDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRlRERl9DSEFOTkVMX0FDQ0VTU19GQUlMVVJFOgorICAgICAgICAgICAgdHJhbnNwYXJlbnRTdGF0dXMgPSBGVERGX1RSQU5TUEFSRU5UX0NTTUFDQV9GQUlMVVJFOworICAgICAgICAgICAgYnJlYWs7CisjaWYgRlRERl9UUkFOU1BBUkVOVF9XQUlUX0ZPUl9BQ0sKKworICAgICAgICBjYXNlIEZUREZfTk9fQUNLOgorICAgICAgICAgICAgdHJhbnNwYXJlbnRTdGF0dXMgPSBGVERGX1RSQU5TUEFSRU5UX05PX0FDSzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5UWFN1Y2Nlc3NDb3VudCsrOworICAgICAgICB9CisKKyNpZmRlZiBGVERGX1BIWV9BUEkKKyAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICAgICAgRlRERl90eEluUHJvZ3Jlc3MgPSBGVERGX0ZBTFNFOworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworCisgICAgICAgIEZUREZfU0VORF9GUkFNRV9UUkFOU1BBUkVOVF9DT05GSVJNKE5VTEwsIHRyYW5zcGFyZW50U3RhdHVzKTsKKyNlbHNlCisKKyAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKworICAgICAgICBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSh0cmFuc3BhcmVudFJlcXVlc3QtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRTdGF0dXMpOworCisgICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIHRyYW5zcGFyZW50UmVxdWVzdCk7CisjaWZuZGVmIEZUREZfTElURQorICAgICAgICBGVERGX3Byb2Nlc3NOZXh0UmVxdWVzdCgpOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworI2VuZGlmIC8qIEZUREZfUEhZX0FQSSAqLworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCit2b2lkIEZUREZfcHJvY2Vzc1R4RXZlbnQodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnU3RhdEU7CisgICAgRlRERl9TdGF0dXMgICAgICAgIHN0YXR1cyA9IEZUREZfU1VDQ0VTUzsKKworI2lmIEZUREZfVVNFX1BUSSAmJiAhRlRERl9VU0VfQVVUT19QVEkKKyAgICAvKiBSZXN0b3JlIFJ4IFBUSSBpbiBjYXNlIHRoZSBUeCB0cmFuc2FjdGlvbiB0aGF0IGp1c3QgZW5kZWQgaW50ZXJydXB0ZWQgYW4gUngtYWx3YXlzLW9uCisgICAgICogdHJhbnNhY3Rpb24uICovCisgICAgaHdfY29leF9wdGlfdCB0eF9wdGk7CisgICAgaHdfY29leF91cGRhdGVfZnRkZl9wdGkoRlRERl9nZXRSeFB0aSgpLCAmdHhfcHRpLCB0cnVlKTsKKyNlbmRpZgorCisgICAgdHhGbGFnU3RhdEUgPSBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UsIEZUREZfVFhfV0FLRVVQX0JVRkZFUik7CisKKyAgICBpZiAoKnR4RmxhZ1N0YXRFICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICp0eEZsYWdTdGF0RSAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRTsKKyNlbHNlCisgICAgICAgICp0eEZsYWdTdGF0RSAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FOworI2VuZGlmCisKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4U3RhdHVzID0KKyAgICAgICAgICAgIEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEsIEZUREZfVFhfV0FLRVVQX0JVRkZFUik7CisKKyAgICAgICAgaWYgKCp0eFN0YXR1cyAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlRYRmFpbENvdW50Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR4RmxhZ1N0YXRFID0gRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKE9OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgIGlmICgqdHhGbGFnU3RhdEUgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FKQorICAgIHsKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAgICAgKnR4RmxhZ1N0YXRFICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FOworI2Vsc2UKKyAgICAgICAgKnR4RmxhZ1N0YXRFICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0U7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmbmRlZiBGVERGX1BIWV9BUEkKKyAgICBGVERGX3R4SW5Qcm9ncmVzcyA9IEZUREZfRkFMU0U7CisKKyAgICBpZiAoRlRERl9yZXFDdXJyZW50ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjZWxzZQorICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworICAgIGlmIChGVERGX3R4SW5Qcm9ncmVzcyA9PSBGVERGX0ZBTFNFKQorICAgIHsKKyAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisjZW5kaWYKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgorICAgIEZUREZfc2RiRnNtVHhJUlEoKTsKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworICAgIEZUREZfQm9vbGVhbiBhY2tUWCA9IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNULCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgIGlmIChzdGF0dXMgPT0gRlRERl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4TWV0YSAgICA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgICAgIEZUREZfRnJhbWVUeXBlICAgICBmcmFtZVR5cGUgPQorICAgICAgICAgICAgKCp0eE1ldGEgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSA+PiBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFOworCisgICAgICAgIHN3aXRjaCAoZnJhbWVUeXBlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRlRERl9CRUFDT05fRlJBTUU6CisgICAgICAgICAgICBGVERGX3BpYi50cmFmZmljQ291bnRlcnMudHhCZWFjb25Gcm1DbnQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRlRERl9EQVRBX0ZSQU1FOgorICAgICAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnR4RGF0YUZybUNudCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBGVERGX01BQ19DT01NQU5EX0ZSQU1FOgorICAgICAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnR4Q21kRnJtQ250Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FOgorICAgICAgICAgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnR4TXVsdGlQdXJwRnJtQ250Kys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eFN0YXR1cyA9CisgICAgICAgICAgICBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fVFNDSAorICAgICAgICBGVERGX1RzY2hSZXRyeSAqdHNjaFJldHJ5ID0gTlVMTDsKKworICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzY2hSZXRyeSA9IEZUREZfZ2V0VHNjaFJldHJ5KEZUREZfZ2V0UmVxdWVzdEFkZHJlc3MoRlRERl9yZXFDdXJyZW50KSk7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworICAgICAgICBpZiAoKnR4U3RhdHVzICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwpCisgICAgICAgIHsKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHNjaFJldHJ5LT5uck9mUmV0cmllcysrOworICAgICAgICAgICAgICAgIEZUREZfdHNjaFNsb3RMaW5rLT5yZXF1ZXN0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2NoZWR1bGVUc2NoKEZUREZfcmVxQ3VycmVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IEZUREZfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIEZUREZfcmVxQ3VycmVudCBpcyBub3QgZXF1YWwgdG8gTlVMTCB0aGUgcmV0cmllZCByZXF1ZXN0IHdpbGwgYmUgcXVldWVkCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGVuIHNlbmQgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLworCisgICAgICAgICAgICAgICAgaWYgKEZUREZfbnJPZlJldHJpZXMgPCBGVERGX3BpYi5tYXhGcmFtZVJldHJpZXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX25yT2ZSZXRyaWVzKys7CisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgICAgICAgICAgICAgICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfc2V0UGVlckNzbFRpbWluZyhOVUxMLCAwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVGltZSBjdXJUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3R4SW5Qcm9ncmVzcyA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FLCBjdXJUaW1lICsgNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9ELCBGVERGX3BpYi5DU0xNYXhQZXJpb2QpOworCisgICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnU2V0ID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0eEZsYWdTZXQgfD0gKCgxIDw8IEZUREZfVFhfREFUQV9CVUZGRVIpIHwgKDEgPDwgRlRERl9UWF9XQUtFVVBfQlVGRkVSKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICAgICAgICAgICAgICB7CisjaWYgRlRERl9VU0VfUFRJICYmICFGVERGX1VTRV9BVVRPX1BUSQorICAgICAgICAgICAgICAgICAgICAgICAgaHdfY29leF91cGRhdGVfZnRkZl9wdGkodHhfcHRpLCBOVUxMLCB0cnVlKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1NldCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHhGbGFnU2V0IHw9ICgxIDw8IEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoRlRERl9waWIubWV0cmljc0VuYWJsZWQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLnBlcmZvcm1hbmNlTWV0cmljcy5UWEZhaWxDb3VudCsrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gRlRERl9OT19BQ0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCp0eFN0YXR1cyAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMKQorICAgICAgICB7CisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgICAgICAgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzY2hSZXRyeS0+bnJPZkNjYVJldHJpZXMrKzsKKworICAgICAgICAgICAgICAgIGlmICh0c2NoUmV0cnktPm5yT2ZDY2FSZXRyaWVzIDwgRlRERl9waWIubWF4Q1NNQUJhY2tvZmZzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRERl90c2NoU2xvdExpbmstPnJlcXVlc3QgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgICA9IEZUREZfc2NoZWR1bGVUc2NoKEZUREZfcmVxQ3VycmVudCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBGVERGX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIEZUREZfcmVxQ3VycmVudCBpcyBub3QgZXF1YWwgdG8gTlVMTCB0aGUgcmV0cmllZCByZXF1ZXN0IHdpbGwgYmUgcXVldWVkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhlbiBzZW5kIGFnYWluCisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfQ0hBTk5FTF9BQ0NFU1NfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZUREZfcGliLm1ldHJpY3NFbmFibGVkICYmIHN0YXR1cyAhPSBGVERGX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9waWIucGVyZm9ybWFuY2VNZXRyaWNzLlRYRmFpbENvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWNrVFggPT0gRlRERl9GQUxTRSAmJiBGVERGX3BpYi5tZXRyaWNzRW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuVFhTdWNjZXNzQ291bnQrKzsKKyAgICAgICAgICAgIH0KKworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICAgICAgICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0c2NoUmV0cnktPm5yT2ZDY2FSZXRyaWVzID0gMDsKKyAgICAgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBGVERGX1BIWV9BUEkKKworICAgIGlmICgoYWNrVFggPT0gRlRERl9GQUxTRSB8fCBzdGF0dXMgIT0gRlRERl9TVUNDRVNTKSAmJiBGVERGX3JlcUN1cnJlbnQpCisgICAgeworICAgICAgICBzZW5kQ29uZmlybShzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudC0+bXNnSWQpOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QoKTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgfQorCisjZWxzZQorCisgICAgaWYgKEZUREZfdHhJblByb2dyZXNzKQorICAgIHsKKyAgICAgICAgc2VuZENvbmZpcm0oc3RhdHVzLCBGVERGX1RSQU5TUEFSRU5UX1JFUVVFU1QpOworICAgIH0KKworI2VuZGlmCit9CisKK3ZvaWQgRlRERl9wcm9jZXNzU3ltYm9sVGltZXJFdmVudCh2b2lkKQoreworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpzeW1ib2xUaW1lVGhyRXZlbnQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FKTsKKworI2lmZGVmIEZUREZfUEhZX0FQSQorICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjUmVhZHk0c2xlZXBFdmVudCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfRCk7CisKKyAgICBpZiAoKmxtYWNSZWFkeTRzbGVlcEV2ZW50ICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EKQorICAgIHsKKyAgICAgICAgKmxtYWNSZWFkeTRzbGVlcEV2ZW50ID0gTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9EOworCisgICAgICAgIC8qIElmIGxtYWMgcmVhZHkgNCBzbGVlcCwgY2FsbCByZXNwZWN0aXZlIGNhbGxiYWNrLCBhZnRlciBkaXNhYmxpbmcgdGhlIGludGVycnVwdCAqLworICAgICAgICBpZiAoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVApID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICpsbWFjQ3RybE1hc2sgPSBGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLKTsKKyAgICAgICAgICAgICpsbWFjQ3RybE1hc2sgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTTsKKyAgICAgICAgICAgIEZUREZfTE1BQ1JFQURZNFNMRUVQX0NCKEZUREZfVFJVRSwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCisgICAgLy8gc3luYyB0aW1lc3RhbXAgZXZlbnQKKyAgICBpZiAoKnN5bWJvbFRpbWVUaHJFdmVudCAmIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX0UpCisgICAgeworI2lmZGVmIFNJTVVMQVRPUgorICAgICAgICAqc3ltYm9sVGltZVRockV2ZW50ICY9IH5NU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FOworI2Vsc2UKKyAgICAgICAgKnN5bWJvbFRpbWVUaHJFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FOworI2VuZGlmCisKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BLCAwKTsKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fQ1NMCisgICAgICAgIEZUREZfb2xkTGVFbmFibGVkID0gRlRERl9GQUxTRTsKKworICAgICAgICBpZiAoRlRERl93YWtlVXBFbmFibGVMZSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9waWIubGVFbmFibGVkICA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIEZUREZfc2V0TGVFbmFibGVkKCk7CisgICAgICAgICAgICBGVERGX3dha2VVcEVuYWJsZUxlID0gRlRERl9GQUxTRTsKKyAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgICAgICBpZiAoRlRERl93YWtlVXBFbmFibGVUc2NoKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NldFRzY2hFbmFibGVkKCk7CisgICAgICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisgICAgICAgIEZUREZfcmVzdG9yZVR4UGVuZGluZ1RpbWVyKCk7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICBGVERGX1dBS0VfVVBfUkVBRFkoKTsKKyAgICB9CisKKyAgICAvLyBtaXNjZWxsYW5lb3VzIGV2ZW50CisgICAgLy8gLSBOb24tVFNDSCBtb2RlOiBhc3NvY2lhdGlvbiB0aW1lcgorICAgIC8vIC0gVFNDSCBtb2RlOiBuZXh0IGFjdGl2ZSBsaW5rIHRpbWVyCisgICAgaWYgKCpzeW1ib2xUaW1lVGhyRXZlbnQgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpzeW1ib2xUaW1lVGhyRXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9FOworI2Vsc2UKKyAgICAgICAgKnN5bWJvbFRpbWVUaHJFdmVudCAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRTsKKyNlbmRpZgorCisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgICAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfdHNjaFByb2Nlc3NSZXF1ZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworICAgICAgICAgICAgaWYgKEZUREZfcmVxQ3VycmVudCAmJgorICAgICAgICAgICAgICAgIEZUREZfcmVxQ3VycmVudC0+bXNnSWQgPT0gRlRERl9BU1NPQ0lBVEVfUkVRVUVTVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVERGX0Fzc29jQWRtaW4gKmFzc29jQWRtaW4gPSAmRlRERl9hYTsKKworICAgICAgICAgICAgICAgIC8vIG1hY1Jlc3BvbnNlV2FpdFRpbWUgZXhwaXJlZAorICAgICAgICAgICAgICAgIGFzc29jQWRtaW4tPmRhdGFSID0gRlRERl9UUlVFOworCisgICAgICAgICAgICAgICAgRlRERl9zZW5kQXNzb2NpYXRlRGF0YVJlcXVlc3QoKTsKKyAgICAgICAgICAgIH0KKworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICB9CisKKyAgICAvLyBwZW5kaW5nIHF1ZXVlIHN5bWJvbCB0aW1lciBldmVudAorICAgIGlmICgqc3ltYm9sVGltZVRockV2ZW50ICYgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSkKKyAgICB7CisjaWZkZWYgU0lNVUxBVE9SCisgICAgICAgICpzeW1ib2xUaW1lVGhyRXZlbnQgJj0gfk1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0U7CisjZWxzZQorICAgICAgICAqc3ltYm9sVGltZVRockV2ZW50ICA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0U7CisjZW5kaWYKKworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgRlRERl9yZW1vdmVUeFBlbmRpbmdUaW1lcihOVUxMKTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgfQorfQorCisjaWZuZGVmIEZUREZfTElURQorRlRERl9TdGF0dXMgRlRERl9zZW5kRnJhbWUoRlRERl9DaGFubmVsTnVtYmVyICAgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVIZWFkZXIgICAgKmZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciAqc2VjdXJpdHlIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0ICAgICAgICAgICp0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRGF0YUxlbmd0aCAgICAgIHBheWxvYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgICAqcGF5bG9hZCkKK3sKKyAgICBGVERGX09jdGV0ICAgICAqdHhCdWZQdHIgICAgICAgPSAoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pOworCisgICAgRlRERl9EYXRhTGVuZ3RoIG1pY0xlbmd0aCAgICAgID0gRlRERl9nZXRNaWNMZW5ndGgoc2VjdXJpdHlIZWFkZXItPnNlY3VyaXR5TGV2ZWwpOworICAgIEZUREZfRGF0YUxlbmd0aCBwaHlQYXlsb2FkU2l6ZSA9ICh0eFB0ciAtIHR4QnVmUHRyKSAtIDEgKyBwYXlsb2FkU2l6ZSArIG1pY0xlbmd0aCArIEZUREZfRkNTX0xFTkdUSDsKKworICAgIGlmIChwaHlQYXlsb2FkU2l6ZSA+IChGVERGX0JVRkZFUl9MRU5HVEggLSAxKSkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZSQU1FX1RPT19MT05HOworICAgIH0KKworICAgICp0eEJ1ZlB0ciA9IHBoeVBheWxvYWRTaXplOworCisgICAgRlRERl9PY3RldCAqcHJpdlB0ciA9IHR4UHRyOworCisgICAgaW50ICAgICAgICAgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBwYXlsb2FkU2l6ZTsgbisrKQorICAgIHsKKyAgICAgICAgKnR4UHRyKysgPSAqcGF5bG9hZCsrOworICAgIH0KKworICAgIEZUREZfU3RhdHVzIHN0YXR1cyA9IEZUREZfc2VjdXJlRnJhbWUodHhCdWZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlcik7CisKKyAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgRlRERl9CaXRtYXA4ICAgICAgIG9wdGlvbnMgICA9IGZyYW1lSGVhZGVyLT5vcHRpb25zOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKm1ldGFEYXRhMCA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKm1ldGFEYXRhMSA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICB1aW50MTZfdCAgICAgICAgICAgcGh5QXR0ciAgID0gKEZUREZfcGliLkNDQU1vZGUgJiAweDMpIHwgMHgwOCB8ICgoY2hhbm5lbCAtIDExKSAmIDB4MEYpIDw8IDQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRERl9waWIuVFhQb3dlciAmIDB4MDcpIDw8IDEyOworCisgICAgbWV0YURhdGEwICA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgbWV0YURhdGExICA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisKKyAgICAqbWV0YURhdGEwID0KKyAgICAgICAgKChwaHlQYXlsb2FkU2l6ZSA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEgpIHwKKyAgICAgICAgKChwaHlBdHRyIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSB8CisgICAgICAgICgoZnJhbWVIZWFkZXItPmZyYW1lVHlwZSA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUpIHwKKyAgICAgICAgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgfAorICAgICAgICAoKG9wdGlvbnMgJiBGVERGX09QVF9BQ0tfUkVRVUVTVEVEKSA/IE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUIDogMCkgfAorICAgICAgICBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BOworCisgICAgKm1ldGFEYXRhMSA9CisgICAgICAgICgoZnJhbWVIZWFkZXItPlNOIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTikgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pOworCisgICAgdWludDMyX3QgcGh5Q3NtYUNhQXR0ciA9IChGVERGX3BpYi5DQ0FNb2RlICYgMHgzKSB8ICgoY2hhbm5lbCAtIDExKSAmIDB4ZikgPDwgNCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX3BpYi5UWFBvd2VyICYgMHgwNykgPDwgMTI7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSLCBwaHlDc21hQ2FBdHRyKTsKKworI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBpZiAoZnJhbWVIZWFkZXItPmRzdEFkZHJNb2RlICE9IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZUREZfTk9fU0hPUlRfQUREUkVTUzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFyIENTTUFDQSBvZiBkYXRhIGZyYW1lIGJ1ZmZlcgorICAgICAgICAqbWV0YURhdGEwICY9IH5NU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQTsKKworICAgICAgICB0eFB0ciAgICAgICA9IHR4QnVmUHRyID0gKChGVERGX09jdGV0ICopIEZUREZfR0VUX1JFR19BRERSKFJFVEVOVElPTl9SQU1fVFhfRklGTykpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX0JVRkZFUl9MRU5HVEggKiBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworCisgICAgICAgICp0eFB0cisrICAgICAgICAgICAgICAgICAgICA9IDB4MGQ7CisgICAgICAgICp0eFB0cisrICAgICAgICAgICAgICAgICAgICA9IDB4MmQ7CisgICAgICAgICp0eFB0cisrICAgICAgICAgICAgICAgICAgICA9IDB4ODE7CisgICAgICAgICp0eFB0cisrICAgICAgICAgICAgICAgICAgICA9IGZyYW1lSGVhZGVyLT5TTjsKKyAgICAgICAgKihGVERGX1BBTklkICopIHR4UHRyICAgICAgICA9IGZyYW1lSGVhZGVyLT5kc3RQQU5JZDsKKyAgICAgICAgdHhQdHIgICAgICAgICAgICAgICAgICAgICAgKz0gMjsKKyAgICAgICAgKihGVERGX1Nob3J0QWRkcmVzcyAqKSB0eFB0ciA9IGZyYW1lSGVhZGVyLT5kc3RBZGRyLnNob3J0QWRkcmVzczsKKyAgICAgICAgdHhQdHIgICAgICAgICAgICAgICAgICAgICAgKz0gMjsKKyAgICAgICAgKnR4UHRyKysgICAgICAgICAgICAgICAgICAgID0gMHg4MjsKKyAgICAgICAgKnR4UHRyKysgICAgICAgICAgICAgICAgICAgID0gMHgwZTsKKworICAgICAgICBtZXRhRGF0YTAgICAgICAgICAgICAgICAgICAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsIEZUREZfVFhfV0FLRVVQX0JVRkZFUik7CisgICAgICAgIG1ldGFEYXRhMSAgICAgICAgICAgICAgICAgICA9IEZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSwgRlRERl9UWF9XQUtFVVBfQlVGRkVSKTsKKyAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4UHJpb3JpdHkgPQorICAgICAgICAgICAgRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZLCBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworCisgICAgICAgICptZXRhRGF0YTAgPQorICAgICAgICAgICAgKCgweDBkIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEgpICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCkgfAorICAgICAgICAgICAgKChwaHlBdHRyIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSB8CisgICAgICAgICAgICAoKEZUREZfTVVMVElQVVJQT1NFX0ZSQU1FIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUpICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSkgfAorICAgICAgICAgICAgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgfAorICAgICAgICAgICAgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQTsKKworICAgICAgICAqbWV0YURhdGExID0KKyAgICAgICAgICAgICgoZnJhbWVIZWFkZXItPlNOIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTikgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pOworI2lmIEZUREZfVVNFX1BUSSAmJiBGVERGX1VTRV9BVVRPX1BUSQorICAgICAgICAqdHhQcmlvcml0eSB8PSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVA7CisjZWxzZQorICAgICAgICAqdHhQcmlvcml0eSA9IE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUDsKKyNlbmRpZgorICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqdHhGbGFnU2V0ID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUKTsKKworI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBGVERGX1RpbWUgY3VyVGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKyAgICAgICAgRlRERl9UaW1lIGRlbHRhICAgPSBjdXJUaW1lIC0gRlRERl9yelRpbWU7CisKKyAgICAgICAgaWYgKGRlbHRhID4gMHg4MDAwMDAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVjZWl2aW5nIGFuIHdha2V1cCBmcmFtZSBzZXF1ZW5jZSwgZGVsYXkgc2VuZGluZyB1bnRpbCBSWiBoYXMgcGFzc2VkLgorICAgICAgICAgICAgRlRERl9zZW5kRnJhbWVQZW5kaW5nID0gZnJhbWVIZWFkZXItPmRzdEFkZHIuc2hvcnRBZGRyZXNzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9UaW1lICAgd2FrZXVwU3RhcnRUaW1lOworICAgICAgICAgICAgRlRERl9QZXJpb2Qgd2FrZXVwUGVyaW9kOworCisgICAgICAgICAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgICAgICAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworICAgICAgICAgICAgRlRERl9nZXRXYWtldXBQYXJhbXMoZnJhbWVIZWFkZXItPmRzdEFkZHIuc2hvcnRBZGRyZXNzLCAmd2FrZXVwU3RhcnRUaW1lLCAmd2FrZXVwUGVyaW9kKTsKKworICAgICAgICAgICAgRlRERl90eEluUHJvZ3Jlc3MgPSBGVERGX1RSVUU7CisgICAgICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSwgd2FrZXVwU3RhcnRUaW1lKTsKKyAgICAgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDV1VQRVJJT0QsIHdha2V1cFBlcmlvZCk7CisKKyAgICAgICAgICAgICp0eEZsYWdTZXQgfD0gKCgxIDw8IEZUREZfVFhfREFUQV9CVUZGRVIpIHwgKDEgPDwgRlRERl9UWF9XQUtFVVBfQlVGRkVSKSk7CisKKyAgICAgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisgICAgICAgIGlmICghRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgICp0eEZsYWdTZXQgfD0gKDEgPDwgRlRERl9UWF9EQVRBX0JVRkZFUik7CisvLyAgICAgICAgICAgICAgICBTZXRXb3JkMTYoUDJfU0VUX0RBVEFfUkVHLCAoMSA8PCAzKSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFNldFdvcmQxNihQMjNfTU9ERV9SRUcsIDB4MzAwKTsgLy8gU1cgdHJpZ2dlciAtIG91dHB1dAorLy8gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZvbGF0aWxlIGludCBrID0gMDsgayA8IDEwMDsgaysrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgU2V0V29yZDE2KFAyM19NT0RFX1JFRywgMHgwMDApOy8vIFNXIHRyaWdnZXIgLSBoaWdoIFoKKworCisgICAgICAgIH0KKworICAgIHJldHVybiBGVERGX1NVQ0NFU1M7Cit9CisKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorRlRERl9TdGF0dXMgRlRERl9zZW5kQWNrRnJhbWUoRlRERl9GcmFtZUhlYWRlciAgICAqZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyICpzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgICAgICAgICAgKnR4UHRyKQoreworICAgIEZUREZfT2N0ZXQgICAgICp0eEJ1ZlB0ciAgICAgICA9ICgoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIEZUREZfQlVGRkVSX0xFTkdUSDsKKyAgICBGVERGX0RhdGFMZW5ndGggbWljTGVuZ3RoICAgICAgPSBGVERGX2dldE1pY0xlbmd0aChzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbCk7CisgICAgRlRERl9EYXRhTGVuZ3RoIHBoeVBheWxvYWRTaXplID0gKHR4UHRyIC0gdHhCdWZQdHIpIC0gMSArIG1pY0xlbmd0aCArIEZUREZfRkNTX0xFTkdUSDsKKworICAgICp0eEJ1ZlB0ciA9IHBoeVBheWxvYWRTaXplOworCisgICAgRlRERl9TdGF0dXMgc3RhdHVzID0gRlRERl9zZWN1cmVGcmFtZSh0eEJ1ZlB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eUhlYWRlcik7CisKKyAgICBpZiAoc3RhdHVzICE9IEZUREZfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgdm9sYXRpbGUgdWludDMyX3QgKm1ldGFEYXRhMCAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsIEZUREZfVFhfQUNLX0JVRkZFUik7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKm1ldGFEYXRhMSAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEsIEZUREZfVFhfQUNLX0JVRkZFUik7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4UHJpb3JpdHkgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKE9OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFksIEZUREZfVFhfQUNLX0JVRkZFUik7CisKKyAgICB1aW50MTZfdCAgICAgICAgICAgcGh5QXR0ciAgICA9CisgICAgICAgIChGVERGX3BpYi5DQ0FNb2RlICYgMHgzKSB8IDB4MDggfCAoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIpICYgMHgwMGYwKSB8CisgICAgICAgIChGVERGX3BpYi5UWFBvd2VyICYgMHgwNykgPDwgMTI7CisKKyAgICAqbWV0YURhdGEwID0KKyAgICAgICAgKChwaHlQYXlsb2FkU2l6ZSA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEgpIHwKKyAgICAgICAgKChwaHlBdHRyIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSKSB8CisgICAgICAgICgoRlRERl9BQ0tOT1dMRURHRU1FTlRfRlJBTUUgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSkgJiBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSB8CisgICAgICAgIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkE7CisKKyAgICAqbWV0YURhdGExID0KKyAgICAgICAgKChmcmFtZUhlYWRlci0+U04gPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTik7CisKKyNpZiBGVERGX1VTRV9QVEkgJiYgRlRERl9VU0VfQVVUT19QVEkKKyAgICAqdHhQcmlvcml0eSB8PSAxOworI2Vsc2UKKyAgICAqdHhQcmlvcml0eSA9IDE7CisjZW5kaWYKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdTZXQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQpOworCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworICAgICAgICBGVERGX1BlcmlvZCB0eEFja0RlbGF5VmFsID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwpOworCisgICAgICAgIGlmICh0eEFja0RlbGF5VmFsID4gMjApCisgICAgICAgIHsKKyAgICAgICAgICAgICp0eEZsYWdTZXQgfD0gMSA8PCBGVERGX1RYX0FDS19CVUZGRVI7CisgICAgICAgIH0KKworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisgICAgeworICAgICAgICAqdHhGbGFnU2V0IHw9IDEgPDwgRlRERl9UWF9BQ0tfQlVGRkVSOworICAgIH0KKworICAgIEZUREZfcGliLnRyYWZmaWNDb3VudGVycy50eEVuaEFja0ZybUNudCsrOworCisgICAgcmV0dXJuIEZUREZfU1VDQ0VTUzsKK30KKyNlbmRpZiAvKiAhRlRERl9OT19DU0wgfHwgIUZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKwordm9pZCBGVERGX3NlbmRUcmFuc3BhcmVudEZyYW1lKEZUREZfRGF0YUxlbmd0aCAgICBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0ICAgICAgICAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QVEkgICAgICAgICAgIHB0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gICAgICAgY21zYVN1cHByZXNzKQoreworICAgIHZvbGF0aWxlIHVpbnQzMl90ICptZXRhRGF0YTAgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICptZXRhRGF0YTEgPSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEsIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eFByaW9yaXR5ID0gRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZLCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworI2lmIEZUREZfVFJBTlNQQVJFTlRfVVNFX1dBSVRfRk9SX0FDSworICAgIEZUREZfQm9vbGVhbiB1c2VBY2sgPSBGVERGX0ZBTFNFOworICAgIC8vRlRERl9GcmFtZUhlYWRlciogICAgICAgICBmcmFtZUhlYWRlciAgICA9ICZGVERGX2ZoOworICAgIEZUREZfRnJhbWVIZWFkZXIgZnJhbWVIZWFkZXI7CisgICAgRlRERl9TTiBTTjsKKyNlbmRpZgorICAgIHVpbnQxNl90ICAgICAgICAgICBwaHlBdHRyICAgPSAoRlRERl9waWIuQ0NBTW9kZSAmIDB4MykgfCAweDA4IHwgKChjaGFubmVsIC0gMTEpICYgMHgwRikgPDwgNCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX3BpYi5UWFBvd2VyICYgMHgwNykgPDwgMTI7CisjaWYgRlRERl9UUkFOU1BBUkVOVF9VU0VfV0FJVF9GT1JfQUNLCisKKyAgICBpZiAoRlRERl90cmFuc3BhcmVudE1vZGVPcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9XQUlUX0ZPUl9BQ0spCisgICAgeworICAgICAgICBGVERGX2dldEZyYW1lSGVhZGVyKGZyYW1lLCAmZnJhbWVIZWFkZXIpOworCisgICAgICAgIGlmIChmcmFtZUhlYWRlci5vcHRpb25zICYgRlRERl9PUFRfQUNLX1JFUVVFU1RFRCkKKyAgICAgICAgeworICAgICAgICAgICAgdXNlQWNrID0gRlRERl9UUlVFOworICAgICAgICB9CisKKyAgICAgICAgU04gPSBmcmFtZUhlYWRlci5TTjsKKyAgICB9CisKKyNlbmRpZgorCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorICAgICp0eFByaW9yaXR5ID0gKChwdGkgPDwgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9UWCkgJgorICAgICAgICAgICAgICAgICAgIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfVFgpIHwgMTsKKyNlbmRpZgorICAgICptZXRhRGF0YTAgPQorICAgICAgICAoKGZyYW1lTGVuZ3RoIDw8IE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEgpICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCkgfAorICAgICAgICAoKHBoeUF0dHIgPDwgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFIpICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFIpIHwKKyAgICAgICAgKCgoKmZyYW1lICYgMHg3KSA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFKSAmIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUpIHwKKyAgICAgICAgKChjbXNhU3VwcHJlc3MpID8gMCA6IE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BKSB8CisjaWYgRlRERl9UUkFOU1BBUkVOVF9VU0VfV0FJVF9GT1JfQUNLCisgICAgICAgICgodXNlQWNrKSA/IE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUIDogMCkgfAorI2VuZGlmCisgICAgICAgICgoRlRERl90cmFuc3BhcmVudE1vZGVPcHRpb25zICYKKyAgICAgICAgICBGVERGX1RSQU5TUEFSRU5UX0VOQUJMRV9GQ1NfR0VORVJBVElPTikgPyBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BIDogMCk7CisKKyNpZiBGVERGX1RSQU5TUEFSRU5UX1VTRV9XQUlUX0ZPUl9BQ0sKKworICAgIGlmICh1c2VBY2spCisgICAgeworICAgICAgICAqbWV0YURhdGExID0gKChTTiA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKm1ldGFEYXRhMSA9ICgoMCA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKTsKKyAgICB9CisKKyNlbHNlCisgICAgKm1ldGFEYXRhMSA9CisgICAgICAgICgoMCA8PCBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04pICYgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX01BQ1NOKTsKKyNlbmRpZgorCisgICAgdWludDMyX3QgcGh5Q3NtYUNhQXR0ciA9IChGVERGX3BpYi5DQ0FNb2RlICYgMHgzKSB8ICgoY2hhbm5lbCAtIDExKSAmIDB4ZikgPDwgNCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX3BpYi5UWFBvd2VyICYgMHgwNykgPDwgMTI7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSLCBwaHlDc21hQ2FBdHRyKTsKKyNpZiBGVERGX1VTRV9QVEkgJiYgIUZUREZfVVNFX0FVVE9fUFRJCisgICAgaHdfY29leF91cGRhdGVfZnRkZl9wdGkoKGh3X2NvZXhfcHRpX3QpIHB0aSwgTlVMTCwgdHJ1ZSk7CisjZWxzZQorICAgIC8vIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUFRJX1RYLCBwdGkpOworI2VuZGlmCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1NldCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCk7CisgICAgKnR4RmxhZ1NldCB8PSAoMSA8PCBGVERGX1RYX0RBVEFfQlVGRkVSKTsKK30KKwordm9pZCBGVERGX2luaXRRdWV1ZXModm9pZCkKK3sKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9pbml0UXVldWUoJkZUREZfZnJlZVF1ZXVlKTsKKyAgICBGVERGX2luaXRRdWV1ZSgmRlRERl9yZXFRdWV1ZSk7CisKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX1JFUV9CVUZGRVJTOyBuKyspCisgICAgeworICAgICAgICBGVERGX3F1ZXVlQnVmZmVySGVhZCgmRlRERl9yZXFCdWZmZXJzWyBuIF0sICZGVERGX2ZyZWVRdWV1ZSk7CisKKyAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkci5leHRBZGRyZXNzID0gMHhGRkZGRkZGRkZGRkZGRkZGTEw7CisgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHJNb2RlICAgICAgICA9IEZUREZfTk9fQUREUkVTUzsKKyAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uUEFOSWQgICAgICAgICAgID0gMHhGRkZGOworICAgICAgICBGVERGX2luaXRRdWV1ZSgmRlRERl90eFBlbmRpbmdMaXN0WyBuIF0ucXVldWUpOworCisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJMaXN0WyBuIF0uZnJlZSA9IEZUREZfVFJVRTsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckxpc3RbIG4gXS5uZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZCA9IEZUREZfdHhQZW5kaW5nVGltZXJMaXN0OworICAgIEZUREZfdHhQZW5kaW5nVGltZXJUaW1lID0gMDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisjaWZuZGVmIEZUREZfUEhZX0FQSQorICAgIEZUREZfcmVxQ3VycmVudCAgICAgICAgID0gTlVMTDsKKyNlbmRpZgorfQorCisjaWZuZGVmIEZUREZfTElURQordm9pZCBGVERGX2luaXRRdWV1ZShGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBxdWV1ZS0+aGVhZC5uZXh0ID0gKEZUREZfQnVmZmVyICopICZxdWV1ZS0+dGFpbDsKKyAgICBxdWV1ZS0+aGVhZC5wcmV2ID0gTlVMTDsKKyAgICBxdWV1ZS0+dGFpbC5uZXh0ID0gTlVMTDsKKyAgICBxdWV1ZS0+dGFpbC5wcmV2ID0gKEZUREZfQnVmZmVyICopICZxdWV1ZS0+aGVhZDsKK30KKwordm9pZCBGVERGX3F1ZXVlQnVmZmVySGVhZChGVERGX0J1ZmZlciAqYnVmZmVyLCBGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBGVERGX0J1ZmZlciAqbmV4dCA9IHF1ZXVlLT5oZWFkLm5leHQ7CisKKyAgICBxdWV1ZS0+aGVhZC5uZXh0ICAgID0gYnVmZmVyOworICAgIG5leHQtPmhlYWRlci5wcmV2ICAgPSBidWZmZXI7CisgICAgYnVmZmVyLT5oZWFkZXIubmV4dCA9IG5leHQ7CisgICAgYnVmZmVyLT5oZWFkZXIucHJldiA9IChGVERGX0J1ZmZlciAqKSAmcXVldWUtPmhlYWQ7Cit9CisKK0ZUREZfQnVmZmVyICpGVERGX2RlcXVldWVCdWZmZXJUYWlsKEZUREZfUXVldWUgKnF1ZXVlKQoreworICAgIEZUREZfQnVmZmVyICpidWZmZXIgPSBxdWV1ZS0+dGFpbC5wcmV2OworCisgICAgaWYgKGJ1ZmZlci0+aGVhZGVyLnByZXYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHF1ZXVlLT50YWlsLnByZXYgICAgICAgICAgICAgICAgID0gYnVmZmVyLT5oZWFkZXIucHJldjsKKyAgICBidWZmZXItPmhlYWRlci5wcmV2LT5oZWFkZXIubmV4dCA9IChGVERGX0J1ZmZlciAqKSAmcXVldWUtPnRhaWw7CisKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitGVERGX1N0YXR1cyBGVERGX3F1ZXVlUmVxSGVhZChGVERGX01zZ0J1ZmZlciAqcmVxdWVzdCwgRlRERl9RdWV1ZSAqcXVldWUpCit7CisgICAgRlRERl9CdWZmZXIgKmJ1ZmZlciA9IEZUREZfZGVxdWV1ZUJ1ZmZlclRhaWwoJkZUREZfZnJlZVF1ZXVlKTsKKworICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX1RSQU5TQUNUSU9OX09WRVJGTE9XOworICAgIH0KKworICAgIEZUREZfQnVmZmVyICpuZXh0ID0gcXVldWUtPmhlYWQubmV4dDsKKworICAgIHF1ZXVlLT5oZWFkLm5leHQgICAgPSBidWZmZXI7CisgICAgbmV4dC0+aGVhZGVyLnByZXYgICA9IGJ1ZmZlcjsKKyAgICBidWZmZXItPmhlYWRlci5uZXh0ID0gbmV4dDsKKyAgICBidWZmZXItPmhlYWRlci5wcmV2ID0gKEZUREZfQnVmZmVyICopICZxdWV1ZS0+aGVhZDsKKyAgICBidWZmZXItPnJlcXVlc3QgICAgID0gcmVxdWVzdDsKKworICAgIHJldHVybiBGVERGX1NVQ0NFU1M7Cit9CisKK0ZUREZfTXNnQnVmZmVyICpGVERGX2RlcXVldWVSZXFUYWlsKEZUREZfUXVldWUgKnF1ZXVlKQoreworICAgIEZUREZfQnVmZmVyICpidWZmZXIgPSBxdWV1ZS0+dGFpbC5wcmV2OworCisgICAgaWYgKGJ1ZmZlci0+aGVhZGVyLnByZXYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHF1ZXVlLT50YWlsLnByZXYgICAgICAgICAgICAgICAgID0gYnVmZmVyLT5oZWFkZXIucHJldjsKKyAgICBidWZmZXItPmhlYWRlci5wcmV2LT5oZWFkZXIubmV4dCA9IChGVERGX0J1ZmZlciAqKSAmcXVldWUtPnRhaWw7CisKKyAgICBGVERGX01zZ0J1ZmZlciAqcmVxdWVzdCA9IGJ1ZmZlci0+cmVxdWVzdDsKKworICAgIEZUREZfcXVldWVCdWZmZXJIZWFkKGJ1ZmZlciwgJkZUREZfZnJlZVF1ZXVlKTsKKworICAgIHJldHVybiByZXF1ZXN0OworfQorCitGVERGX01zZ0J1ZmZlciAqRlRERl9kZXF1ZXVlQnlIYW5kbGUoRlRERl9IYW5kbGUgaGFuZGxlLCBGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBGVERGX0J1ZmZlciAqYnVmZmVyID0gcXVldWUtPmhlYWQubmV4dDsKKworICAgIHdoaWxlIChidWZmZXItPmhlYWRlci5uZXh0ICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAoYnVmZmVyLT5yZXF1ZXN0ICYmCisgICAgICAgICAgICBidWZmZXItPnJlcXVlc3QtPm1zZ0lkID09IEZUREZfREFUQV9SRVFVRVNUICYmCisgICAgICAgICAgICAoKEZUREZfRGF0YVJlcXVlc3QgKikgYnVmZmVyLT5yZXF1ZXN0KS0+bXNkdUhhbmRsZSA9PSBoYW5kbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+aGVhZGVyLnByZXYtPmhlYWRlci5uZXh0ID0gYnVmZmVyLT5oZWFkZXIubmV4dDsKKyAgICAgICAgICAgIGJ1ZmZlci0+aGVhZGVyLm5leHQtPmhlYWRlci5wcmV2ID0gYnVmZmVyLT5oZWFkZXIucHJldjsKKworICAgICAgICAgICAgRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QgPSBidWZmZXItPnJlcXVlc3Q7CisKKyAgICAgICAgICAgIEZUREZfcXVldWVCdWZmZXJIZWFkKGJ1ZmZlciwgJkZUREZfZnJlZVF1ZXVlKTsKKworICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgPSBidWZmZXItPmhlYWRlci5uZXh0OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitGVERGX01zZ0J1ZmZlciAqRlRERl9kZXF1ZXVlQnlSZXF1ZXN0KEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0LCBGVERGX1F1ZXVlICpxdWV1ZSkKK3sKKyAgICBGVERGX0J1ZmZlciAqYnVmZmVyID0gcXVldWUtPmhlYWQubmV4dDsKKworICAgIHdoaWxlIChidWZmZXItPmhlYWRlci5uZXh0ICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAoYnVmZmVyLT5yZXF1ZXN0ID09IHJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+aGVhZGVyLnByZXYtPmhlYWRlci5uZXh0ID0gYnVmZmVyLT5oZWFkZXIubmV4dDsKKyAgICAgICAgICAgIGJ1ZmZlci0+aGVhZGVyLm5leHQtPmhlYWRlci5wcmV2ID0gYnVmZmVyLT5oZWFkZXIucHJldjsKKworICAgICAgICAgICAgRlRERl9Nc2dCdWZmZXIgKnJlcSA9IGJ1ZmZlci0+cmVxdWVzdDsKKworICAgICAgICAgICAgRlRERl9xdWV1ZUJ1ZmZlckhlYWQoYnVmZmVyLCAmRlRERl9mcmVlUXVldWUpOworCisgICAgICAgICAgICByZXR1cm4gcmVxOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gYnVmZmVyLT5oZWFkZXIubmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworRlRERl9Cb29sZWFuIEZUREZfaXNRdWV1ZUVtcHR5KEZUREZfUXVldWUgKnF1ZXVlKQoreworICAgIGlmIChxdWV1ZS0+aGVhZC5uZXh0LT5oZWFkZXIubmV4dCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgfQorfQorCitzdGF0aWMgRlRERl9QZW5kaW5nVEwgKkZUREZfZmluZEZyZWVQZW5kaW5nVGltZXIodm9pZCkKK3sKKyAgICB1aW50OF90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nVGltZXJMaXN0WyBpIF0uZnJlZSA9PSBGVERGX1RSVUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZGVERGX3R4UGVuZGluZ1RpbWVyTGlzdFsgaSBdOworfQorCit2b2lkIEZUREZfYWRkVHhQZW5kaW5nVGltZXIoRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QsIHVpbnQ4X3QgcGVuZExpc3ROciwgRlRERl9UaW1lIGRlbHRhLCB2b2lkICgqIGZ1bmMpKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BlbmRpbmdUTCAqKSkKK3sKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICBGVERGX1BlbmRpbmdUTCAqcHRyICAgICAgID0gRlRERl90eFBlbmRpbmdUaW1lckhlYWQ7CisgICAgRlRERl9UaW1lICAgICAgIHRpbWVzdGFtcCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgIGlmIChwdHItPmZyZWUgPT0gRlRERl9GQUxTRSkKKyAgICB7CisgICAgICAgIHdoaWxlIChwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB0ci0+ZGVsdGEgLT0gdGltZXN0YW1wIC0gRlRERl90eFBlbmRpbmdUaW1lckxUOworICAgICAgICAgICAgcHRyICAgICAgICAgPSBwdHItPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX3R4UGVuZGluZ1RpbWVyTFQgPSB0aW1lc3RhbXA7CisgICAgcHRyICAgICAgICAgICAgICAgICAgID0gRlRERl90eFBlbmRpbmdUaW1lckhlYWQ7CisKKyAgICBpZiAocHRyLT5mcmVlID09IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIHB0ci0+ZnJlZSAgICAgICA9IEZUREZfRkFMU0U7CisgICAgICAgIHB0ci0+bmV4dCAgICAgICA9IE5VTEw7CisgICAgICAgIHB0ci0+cmVxdWVzdCAgICA9IHJlcXVlc3Q7CisgICAgICAgIHB0ci0+ZGVsdGEgICAgICA9IGRlbHRhOworICAgICAgICBwdHItPnBlbmRMaXN0TnIgPSBwZW5kTGlzdE5yOworICAgICAgICBwdHItPmZ1bmMgICAgICAgPSBmdW5jOworCisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiwgZGVsdGEgKyB0aW1lc3RhbXApOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSA9IGRlbHRhICsgdGltZXN0YW1wOworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHB0ci0+ZGVsdGEgPiBkZWx0YSkKKyAgICB7CisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkICAgICAgICAgICAgID0gRlRERl9maW5kRnJlZVBlbmRpbmdUaW1lcigpOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZC0+ZnJlZSAgICAgICA9IEZUREZfRkFMU0U7CisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkLT5uZXh0ICAgICAgID0gcHRyOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVySGVhZC0+cmVxdWVzdCAgICA9IHJlcXVlc3Q7CisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkLT5kZWx0YSAgICAgID0gZGVsdGE7CisgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJIZWFkLT5wZW5kTGlzdE5yID0gcGVuZExpc3ROcjsKKyAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckhlYWQtPmZ1bmMgICAgICAgPSBmdW5jOworCisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiwgZGVsdGEgKyB0aW1lc3RhbXApOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSA9IGRlbHRhICsgdGltZXN0YW1wOworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKHB0ci0+ZGVsdGEgPT0gZGVsdGEpCisgICAgeworICAgICAgICBkZWx0YSsrOworICAgIH0KKworICAgIEZUREZfUGVuZGluZ1RMICpwcmV2OworCisgICAgd2hpbGUgKHB0ci0+bmV4dCkKKyAgICB7CisgICAgICAgIHByZXYgPSBwdHI7CisgICAgICAgIHB0ciAgPSBwdHItPm5leHQ7CisKKyAgICAgICAgaWYgKHB0ci0+ZGVsdGEgPT0gZGVsdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbHRhKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJldi0+ZGVsdGEgPCBkZWx0YSAmJiBwdHItPmRlbHRhID4gZGVsdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByZXYtPm5leHQgICAgICAgPSBGVERGX2ZpbmRGcmVlUGVuZGluZ1RpbWVyKCk7CisgICAgICAgICAgICBwcmV2LT5uZXh0LT5uZXh0ID0gcHRyOworICAgICAgICAgICAgcHRyICAgICAgICAgICAgICA9IHByZXYtPm5leHQ7CisgICAgICAgICAgICBwdHItPmZyZWUgICAgICAgID0gRlRERl9GQUxTRTsKKyAgICAgICAgICAgIHB0ci0+cmVxdWVzdCAgICAgPSByZXF1ZXN0OworICAgICAgICAgICAgcHRyLT5kZWx0YSAgICAgICA9IGRlbHRhOworICAgICAgICAgICAgcHRyLT5wZW5kTGlzdE5yICA9IHBlbmRMaXN0TnI7CisgICAgICAgICAgICBwdHItPmZ1bmMgICAgICAgID0gZnVuYzsKKworICAgICAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB0ci0+bmV4dCAgICAgICA9IEZUREZfZmluZEZyZWVQZW5kaW5nVGltZXIoKTsKKyAgICBwdHIgICAgICAgICAgICAgPSBwdHItPm5leHQ7CisgICAgcHRyLT5mcmVlICAgICAgID0gRlRERl9GQUxTRTsKKyAgICBwdHItPm5leHQgICAgICAgPSBOVUxMOworICAgIHB0ci0+cmVxdWVzdCAgICA9IHJlcXVlc3Q7CisgICAgcHRyLT5kZWx0YSAgICAgID0gZGVsdGE7CisgICAgcHRyLT5wZW5kTGlzdE5yID0gcGVuZExpc3ROcjsKKyAgICBwdHItPmZ1bmMgICAgICAgPSBmdW5jOworCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKK30KKwordm9pZCBGVERGX3JlbW92ZVR4UGVuZGluZ1RpbWVyKEZUREZfTXNnQnVmZmVyICpyZXF1ZXN0KQoreworICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKworICAgIEZUREZfUGVuZGluZ1RMICpwdHIgICAgICAgPSBGVERGX3R4UGVuZGluZ1RpbWVySGVhZDsKKyAgICBGVERGX1RpbWUgICAgICAgdGltZXN0YW1wID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworCisgICAgaWYgKHB0ci0+ZnJlZSA9PSBGVERGX1RSVUUpCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIsIHRpbWVzdGFtcCAtIDEpOworICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSA9IHRpbWVzdGFtcCAtIDE7CisgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAocHRyKQorICAgIHsKKyAgICAgICAgcHRyLT5kZWx0YSAtPSB0aW1lc3RhbXAgLSBGVERGX3R4UGVuZGluZ1RpbWVyTFQ7CisgICAgICAgIHB0ciAgICAgICAgID0gcHRyLT5uZXh0OworICAgIH0KKworICAgIEZUREZfdHhQZW5kaW5nVGltZXJMVCA9IHRpbWVzdGFtcDsKKyAgICBwdHIgICAgICAgICAgICAgICAgICAgPSBGVERGX3R4UGVuZGluZ1RpbWVySGVhZDsKKworICAgIGlmICghcmVxdWVzdCB8fCBwdHItPnJlcXVlc3QgPT0gcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGlmIChwdHItPm5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfUGVuZGluZ1RMICp0ZW1wID0gcHRyOworCisgICAgICAgICAgICBpZiAocHRyLT5uZXh0LT5kZWx0YSA8IDc1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlICh0ZW1wKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcC0+ZGVsdGEgKz0gNzU7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgICAgICAgICA9IHRlbXAtPm5leHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIsIHRpbWVzdGFtcCArIHB0ci0+bmV4dC0+ZGVsdGEpOworICAgICAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lclRpbWUgPSB0aW1lc3RhbXAgKyBwdHItPm5leHQtPmRlbHRhOworICAgICAgICAgICAgRlRERl90eFBlbmRpbmdUaW1lckhlYWQgPSBwdHItPm5leHQ7CisKKyAgICAgICAgICAgIHB0ci0+ZnJlZSAgICAgICAgICAgICAgID0gRlRERl9UUlVFOworICAgICAgICAgICAgcHRyLT5uZXh0ICAgICAgICAgICAgICAgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSLCB0aW1lc3RhbXAgLSAxKTsKKyAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nVGltZXJUaW1lID0gdGltZXN0YW1wIC0gMTsKKworICAgICAgICAgICAgcHRyLT5mcmVlID0gRlRERl9UUlVFOworICAgICAgICAgICAgcHRyLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisKKyAgICAgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHRyLT5mdW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHB0ci0+ZnVuYyhwdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfUGVuZGluZ1RMICpwcmV2ID0gcHRyOworCisgICAgd2hpbGUgKHB0ci0+bmV4dCkKKyAgICB7CisgICAgICAgIHByZXYgPSBwdHI7CisgICAgICAgIHB0ciAgPSBwdHItPm5leHQ7CisKKyAgICAgICAgaWYgKHB0ci0+cmVxdWVzdCA9PSByZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBwcmV2LT5uZXh0ID0gcHRyLT5uZXh0OworICAgICAgICAgICAgcHRyLT5mcmVlICA9IEZUREZfVFJVRTsKKyAgICAgICAgICAgIHB0ci0+bmV4dCAgPSBOVUxMOworCisgICAgICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSLCB0aW1lc3RhbXAgLSAxKTsKKyAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZSA9IHRpbWVzdGFtcCAtIDE7CisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKK30KKwordm9pZCBGVERGX3Jlc3RvcmVUeFBlbmRpbmdUaW1lcih2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiwgRlRERl90eFBlbmRpbmdUaW1lclRpbWUpOworfQorCitGVERGX0Jvb2xlYW4gRlRERl9nZXRUeFBlbmRpbmdUaW1lckhlYWQoRlRERl9UaW1lICp0aW1lKQoreworICAgIEZUREZfUGVuZGluZ1RMICpwdHIgPSBGVERGX3R4UGVuZGluZ1RpbWVySGVhZDsKKworICAgIGlmIChwdHItPmZyZWUgPT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgfQorCisgICAgKnRpbWUgPSBGVERGX3R4UGVuZGluZ1RpbWVyVGltZTsKKyAgICByZXR1cm4gRlRERl9UUlVFOworfQorCisjaWZuZGVmIEZUREZfTk9fVFNDSAordm9pZCBGVERGX3Byb2Nlc3NLZWVwQWxpdmVUaW1lckV4cChGVERGX1BlbmRpbmdUTCAqcHRyKQoreworICAgIEZUREZfUmVtb3RlUmVxdWVzdCAqcmVtb3RlUmVxdWVzdCA9IChGVERGX1JlbW90ZVJlcXVlc3QgKilwdHItPnJlcXVlc3Q7CisKKyAgICByZW1vdGVSZXF1ZXN0LT5tc2dJZCAgICA9IEZUREZfUkVNT1RFX1JFUVVFU1Q7CisgICAgcmVtb3RlUmVxdWVzdC0+cmVtb3RlSWQgPSBGVERGX1JFTU9URV9LRUVQX0FMSVZFOworICAgIHJlbW90ZVJlcXVlc3QtPmRzdEFkZHIgID0gRlRERl9uZWlnaGJvclRhYmxlWyBwdHItPnBlbmRMaXN0TnIgXS5kc3RBZGRyOworCisgICAgRlRERl9wcm9jZXNzUmVtb3RlUmVxdWVzdChyZW1vdGVSZXF1ZXN0KTsKK30KKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKwordm9pZCBGVERGX3NlbmRUcmFuc2FjdGlvbkV4cGlyZWQoRlRERl9QZW5kaW5nVEwgKnB0cikKK3sKKyAgICBGVERGX01zZ0J1ZmZlciAqcmVxID0KKyAgICAgICAgRlRERl9kZXF1ZXVlQnlSZXF1ZXN0KHB0ci0+cmVxdWVzdCwgJkZUREZfdHhQZW5kaW5nTGlzdFsgcHRyLT5wZW5kTGlzdE5yIF0ucXVldWUpOworCisgICAgaWYgKCFyZXEpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKEZUREZfaXNRdWV1ZUVtcHR5KCZGVERGX3R4UGVuZGluZ0xpc3RbIHB0ci0+cGVuZExpc3ROciBdLnF1ZXVlKSkKKyAgICB7CisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgICAgIGlmIChGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBwdHItPnBlbmRMaXN0TnIgXS5hZGRyLnNob3J0QWRkcmVzcyA9IDB4ZmZmZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisgICAgICAgIHsKKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTworCisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBwdHItPnBlbmRMaXN0TnIgXS5hZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWludDhfdCBlbnRyeSwgc2hvcnRBZGRySWR4OworICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBwdHItPnBlbmRMaXN0TnIgXS5hZGRyLnNob3J0QWRkcmVzcywgJmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hvcnRBZGRySWR4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORyhmb3VuZCk7CisgICAgICAgICAgICAgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzVmFsaWQoZW50cnksIHNob3J0QWRkcklkeCwgRlRERl9GQUxTRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIHB0ci0+cGVuZExpc3ROciBdLmFkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGVudHJ5OworICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcHRyLT5wZW5kTGlzdE5yIF0uYWRkci5leHRBZGRyZXNzLCAmZW50cnkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKGZvdW5kKTsKKyAgICAgICAgICAgICAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgICAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8gKi8KKyAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcHRyLT5wZW5kTGlzdE5yIF0uYWRkck1vZGUgPSBGVERGX05PX0FERFJFU1M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHJlcS0+bXNnSWQpCisgICAgeworICAgIGNhc2UgRlRERl9EQVRBX1JFUVVFU1Q6CisgICAgeworICAgICAgICBGVERGX0RhdGFSZXF1ZXN0ICpkYXRhUmVxdWVzdCA9IChGVERGX0RhdGFSZXF1ZXN0ICopcmVxOworCisgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKGRhdGFSZXF1ZXN0LCBGVERGX1RSQU5TQUNUSU9OX0VYUElSRUQsIDAsIDAsIDAsIE5VTEwpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRlRERl9BU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICB7CisgICAgICAgIEZUREZfQXNzb2NpYXRlUmVxdWVzdCAqYXNzb2NpYXRlUmVxdWVzdCA9IChGVERGX0Fzc29jaWF0ZVJlcXVlc3QgKilyZXE7CisKKyAgICAgICAgRlRERl9zZW5kQXNzb2NpYXRlQ29uZmlybShhc3NvY2lhdGVSZXF1ZXN0LCBGVERGX1RSQU5TQUNUSU9OX0VYUElSRUQsIDB4ZmZmZik7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVNQT05TRToKKyAgICB7CisgICAgICAgIEZUREZfQXNzb2NpYXRlUmVzcG9uc2UgKmFzc29jUmVzcCA9IChGVERGX0Fzc29jaWF0ZVJlc3BvbnNlICopcmVxOworCisgICAgICAgIEZUREZfQWRkcmVzcyBzcmNBZGRyLCBkc3RBZGRyOworICAgICAgICBzcmNBZGRyLmV4dEFkZHJlc3MgPSBGVERGX3BpYi5leHRBZGRyZXNzOworICAgICAgICBkc3RBZGRyLmV4dEFkZHJlc3MgPSBhc3NvY1Jlc3AtPmRldmljZUFkZHJlc3M7CisKKyAgICAgICAgRlRERl9zZW5kQ29tbVN0YXR1c0luZGljYXRpb24ocmVxLCBGVERGX1RSQU5TQUNUSU9OX0VYUElSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLlBBTklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0VYVEVOREVEX0FERFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRVhURU5ERURfQUREUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5zZWN1cml0eUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NvY1Jlc3AtPmtleUlkTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NSZXNwLT5rZXlTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcC0+a2V5SW5kZXgpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRlRERl9ESVNBU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICB7CisgICAgICAgIEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCAqZGlzUmVxID0gKEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCAqKXJlcTsKKworICAgICAgICBGVERGX3NlbmREaXNhc3NvY2lhdGVDb25maXJtKGRpc1JlcSwgRlRERl9UUkFOU0FDVElPTl9FWFBJUkVEKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZUREZfQkVBQ09OX1JFUVVFU1Q6CisgICAgeworICAgICAgICBGVERGX0JlYWNvblJlcXVlc3QgKmJlYWNvblJlcXVlc3QgPSAoRlRERl9CZWFjb25SZXF1ZXN0ICopcmVxOworCisgICAgICAgIEZUREZfc2VuZEJlYWNvbkNvbmZpcm0oYmVhY29uUmVxdWVzdCwgRlRERl9UUkFOU0FDVElPTl9FWFBJUkVEKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCisjaWZuZGVmIEZUREZfTk9fVFNDSAordm9pZCBGVERGX3Jlc2V0S2VlcEFsaXZlVGltZXIoRlRERl9TaG9ydEFkZHJlc3MgZHN0QWRkcikKK3sKKyAgICB1aW50OF90IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9ORUlHSEJPUlM7IG4rKykKKyAgICB7CisgICAgICAgIGlmIChGVERGX25laWdoYm9yVGFibGVbIG4gXS5kc3RBZGRyID09IGRzdEFkZHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG4gPT0gRlRERl9OUl9PRl9ORUlHSEJPUlMpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9yZW1vdmVUeFBlbmRpbmdUaW1lcigoRlRERl9Nc2dCdWZmZXIgKikmRlRERl9uZWlnaGJvclRhYmxlWyBuIF0ubXNnKTsKKworICAgIEZUREZfVGltZSB0c1RpbWVzbG90TGVuZ3RoID0gKEZUREZfVGltZSkgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1RpbWVzbG90TGVuZ3RoIC8gMTY7CisgICAgRlRERl9UaW1lIGRlbHRhICAgICAgICAgICAgPSB0c1RpbWVzbG90TGVuZ3RoICogRlRERl9uZWlnaGJvclRhYmxlWyBuIF0ucGVyaW9kOworCisgICAgRlRERl9hZGRUeFBlbmRpbmdUaW1lcigoRlRERl9Nc2dCdWZmZXIgKikmRlRERl9uZWlnaGJvclRhYmxlWyBuIF0ubXNnLCBuLCBkZWx0YSwgRlRERl9wcm9jZXNzS2VlcEFsaXZlVGltZXJFeHApOworfQorI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKwordm9pZCBGVERGX2VuYWJsZVRyYW5zcGFyZW50TW9kZShGVERGX0Jvb2xlYW4gIGVuYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiBvcHRpb25zKQoreworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgPT0gRlRERl9UUlVFIHx8CisgICAgICAgIEZUREZfcGliLnRzY2hFbmFibGVkID09IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyAgICBGVERGX3RyYW5zcGFyZW50TW9kZSAgICAgICAgPSBlbmFibGU7CisgICAgRlRERl90cmFuc3BhcmVudE1vZGVPcHRpb25zID0gb3B0aW9uczsKKworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NGUk1UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucyAmIEZUREZfVFJBTlNQQVJFTlRfUEFTU19BTExfRlJBTUVfVFlQRVMpKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSwgKG9wdGlvbnMgJiBGVERGX1RSQU5TUEFSRU5UX0FVVE9fQUNLID8gMCA6IDEpKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IsIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0NSQ19FUlJPUiA/IDEgOiAwKSk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMgJiBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0ZSQU1FX1ZFUlNJT04gPyAxIDogMCkpOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMgJiBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX1BBTl9JRCA/IDEgOiAwKSk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIsIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9BRERSID8gMSA6IDApKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMgJiBGVERGX1RSQU5TUEFSRU5UX1BBU1NfQUxMX0JFQUNPTiA/IDEgOiAwKSk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1RPUEFOQ09PUkRJTkFUT1IsCisgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zICYgRlRERl9UUkFOU1BBUkVOVF9QQVNTX0FMTF9OT19ERVNUX0FERFIgPyAxIDogMCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NGUk1UWVBFLCAwKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSwgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SLCAwKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTUkVTRlJBTUVWRVJTSU9OLCAwKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQsIDApOworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSLCAwKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCwgMCk7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1RPUEFOQ09PUkRJTkFUT1IsIDApOworICAgIH0KK30KKworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKK3ZvaWQgRlRERl9jaGVja0RiZ01vZGUodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MLCBGVERGX2RiZ01vZGUpOworCisgICAgaWYgKEZUREZfZGJnTW9kZSkKKyAgICB7CisgICAgICAgIEZUREZfREJHX0JVU19HUElPX0NPTkZJRygpOworICAgIH0KK30KKwordm9pZCBGVERGX3NldERiZ01vZGUoRlRERl9EYmdNb2RlIGRiZ01vZGUpCit7CisgICAgRlRERl9kYmdNb2RlID0gZGJnTW9kZTsKKyAgICBGVERGX2NoZWNrRGJnTW9kZSgpOworfQorI2VuZGlmIC8qIEZUREZfREJHX0JVU19FTkFCTEUgKi8KKworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19DU0wKK3ZvaWQgRlRERl9zZXRQZWVyQ3NsVGltaW5nKEZUREZfSUVMaXN0ICpoZWFkZXJJRUxpc3QsIEZUREZfVGltZSB0aW1lU3RhbXApCit7CisgICAgaWYgKEZUREZfcmVxQ3VycmVudC0+bXNnSWQgIT0gRlRERl9EQVRBX1JFUVVFU1QpCisgICAgeworICAgICAgICAvLyBPbmx5IHVzZSB0aGUgQ1NMIHRpbWluZyBvZiBkYXRhIGZyYW1lIGFja3MKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfRGF0YVJlcXVlc3QgKmRhdGFSZXF1ZXN0ID0gKEZUREZfRGF0YVJlcXVlc3QgKikgRlRERl9yZXFDdXJyZW50OworICAgIEZUREZfU2hvcnRBZGRyZXNzIGRzdEFkZHIgICAgID0gZGF0YVJlcXVlc3QtPmRzdEFkZHIuc2hvcnRBZGRyZXNzOworCisgICAgaWYgKGRhdGFSZXF1ZXN0LT5kc3RBZGRyTW9kZSAhPSBGVERGX1NIT1JUX0FERFJFU1MgfHwKKyAgICAgICAgZHN0QWRkciA9PSAweGZmZmYpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IG47CisKKyAgICAvLyBTZWFyY2ggZm9yIGFuIGV4aXN0aW5nIGVudHJ5CisgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfQ1NMX1BFRVJTOyBuKyspCisgICAgeworICAgICAgICBpZiAoRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0uYWRkciA9PSBkc3RBZGRyKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoZWFkZXJJRUxpc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChuIDwgRlRERl9OUl9PRl9DU0xfUEVFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSBlbnRyeQorICAgICAgICAgICAgRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0uYWRkciA9IDB4ZmZmZjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaWVOciA9IDA7CisKKyAgICB3aGlsZSAoaWVOciA8IGhlYWRlcklFTGlzdC0+bnJPZklFcyAmJgorICAgICAgICAgICBoZWFkZXJJRUxpc3QtPklFc1sgaWVOciBdLklEICE9IDB4MWEpCisgICAgeworICAgICAgICBpZU5yKys7CisgICAgfQorCisgICAgaWYgKGllTnIgPT0gaGVhZGVySUVMaXN0LT5uck9mSUVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChuID09IEZUREZfTlJfT0ZfQ1NMX1BFRVJTKQorICAgIHsKKyAgICAgICAgLy8gU2VhcmNoIGZvciBhbiBlbXB0eSBlbnRyeQorICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9DU0xfUEVFUlM7IG4rKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLmFkZHIgPT0gMHhmZmZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG4gPT0gRlRERl9OUl9PRl9DU0xfUEVFUlMpCisgICAgeworICAgICAgICAvLyBObyBmcmVlIGVudHJ5LCBzZWFyY2ggZm9yIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5CisgICAgICAgIEZUREZfVGltZSBtYXhEZWx0YSA9IDA7CisgICAgICAgIGludCAgICAgICBscnUgICAgICA9IDA7CisKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IEZUREZfTlJfT0ZfQ1NMX1BFRVJTOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZUREZfVGltZSBkZWx0YSA9IHRpbWVTdGFtcCAtIEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLnRpbWU7CisKKyAgICAgICAgICAgIGlmIChkZWx0YSA+IG1heERlbHRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1heERlbHRhID0gZGVsdGE7CisgICAgICAgICAgICAgICAgbHJ1ICAgICAgPSBuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbiA9IGxydTsKKyAgICB9CisKKyAgICBGVERGX1BlcmlvZCBwaGFzZSAgPSAoKihGVERGX1BlcmlvZCAqKShoZWFkZXJJRUxpc3QtPklFc1sgMCBdLmNvbnRlbnQucmF3ICsgMCkpOworICAgIEZUREZfUGVyaW9kIHBlcmlvZCA9ICgqKEZUREZfUGVyaW9kICopKGhlYWRlcklFTGlzdC0+SUVzWyAwIF0uY29udGVudC5yYXcgKyAyKSk7CisKKyAgICBGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS5hZGRyICAgPSBkc3RBZGRyOworICAgIEZUREZfcGVlckNzbFRpbWluZ1sgbiBdLnRpbWUgICA9IHRpbWVTdGFtcCAtIChwaGFzZSAqIDEwKTsKKyAgICBGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS5wZXJpb2QgPSBwZXJpb2Q7Cit9CisKK3ZvaWQgRlRERl9nZXRXYWtldXBQYXJhbXMoRlRERl9TaG9ydEFkZHJlc3MgZHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICAqd2FrZXVwU3RhcnRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BlcmlvZCAgICAgICp3YWtldXBQZXJpb2QpCit7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9DU0xfUEVFUlM7IG4rKykKKyAgICB7CisgICAgICAgIGlmIChGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS5hZGRyID09IGRzdEFkZHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgRlRERl9UaW1lIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisKKyAgICBpZiAoZHN0QWRkciA9PSAweGZmZmYgfHwKKyAgICAgICAgbiA9PSBGVERGX05SX09GX0NTTF9QRUVSUykKKyAgICB7CisgICAgICAgICp3YWtldXBTdGFydFRpbWUgPSBjdXJUaW1lICsgNTsKKyAgICAgICAgKndha2V1cFBlcmlvZCAgICA9IEZUREZfcGliLkNTTE1heFBlcmlvZDsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9UaW1lIHBlZXJUaW1lICAgPSBGVERGX3BlZXJDc2xUaW1pbmdbIG4gXS50aW1lOworICAgIEZUREZfVGltZSBwZWVyUGVyaW9kID0gRlRERl9wZWVyQ3NsVGltaW5nWyBuIF0ucGVyaW9kICogMTA7CisgICAgRlRERl9UaW1lIGRlbHRhICAgICAgPSBjdXJUaW1lIC0gcGVlclRpbWU7CisKKyAgICBpZiAoZGVsdGEgPiAodWludDMyX3QpKEZUREZfcGliLkNTTE1heEFnZVJlbW90ZUluZm8gKiAxMCkpCisgICAgeworICAgICAgICAqd2FrZXVwU3RhcnRUaW1lID0gY3VyVGltZSArIDU7CisgICAgICAgICp3YWtldXBQZXJpb2QgICAgPSBGVERGX3BpYi5DU0xNYXhQZXJpb2Q7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfVGltZSB3U3RhcnQgPSBwZWVyVGltZSArICgoKGRlbHRhIC8gcGVlclBlcmlvZCkgKyAxKSAqIHBlZXJQZXJpb2QpIC0gRlRERl9waWIuQ1NMU3luY1R4TWFyZ2luOworICAgIGRlbHRhID0gd1N0YXJ0IC0gY3VyVGltZTsKKworICAgIGlmIChkZWx0YSA8IDMgfHwgZGVsdGEgPiAweDgwMDAwMDAwKSAgICAvLyBBIGRlbHRhIGxhcmdlciB0aGFuIDB4ODAwMDAwMDAgaXMgYXNzdW1lZCBhIG5lZ2F0aXZlIGRlbHRhCisgICAgeworICAgICAgICB3U3RhcnQgKz0gcGVlclBlcmlvZDsKKyAgICB9CisKKyAgICAqd2FrZXVwUGVyaW9kICAgID0gKEZUREZfcGliLkNTTFN5bmNUeE1hcmdpbiAvIDEwKSAqIDI7CisgICAgKndha2V1cFN0YXJ0VGltZSA9IHdTdGFydDsKK30KKwordm9pZCBGVERGX3NldENzbFNhbXBsZVRpbWUodm9pZCkKK3sKKyAgICBGVERGX1RpbWUgQ1NMUGVyaW9kID0gRlRERl9waWIuQ1NMUGVyaW9kICogMTA7CisKKyAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICBGVERGX1RpbWUgY3VyVGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKyAgICBGVERGX1RpbWUgZGVsdGEgICA9IChjdXJUaW1lIC0gRlRERl9zdGFydENzbFNhbXBsZVRpbWUpOworCisgICAgLy8gQSBkZWx0YSBsYXJnZXIgdGhhbiAweDgwMDAwMDAwIGlzIGFzc3VtZWQgYSBuZWdhdGl2ZSBkZWx0YSwgaW4gdGhpcyBjYXNlIHRoZSBzYW1wbGUgdGltZSBkb2VzCisgICAgLy8gbm90IG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICBpZiAoZGVsdGEgPCAweDgwMDAwMDAwKQorICAgIHsKKyAgICAgICAgaWYgKGRlbHRhIDwgQ1NMUGVyaW9kKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSArPSBDU0xQZXJpb2Q7CisKKyAgICAgICAgICAgIGlmIChkZWx0YSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgdG8gc2V0IHRoZSBDU0wgc2FtcGxlIHRpbWUgdG8gYSB0aW1lIHN0YW1wIGluIHRoZSBwYXN0IHNldCBpdCB0byBhIHNhbXBsZSBwZXJpb2QgbGF0ZXIKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbmV4dCBzYW1wbGUgd291bGQgYmUgd2l0aGluIDMgc3ltYm9scy4KKyAgICAgICAgICAgICAgICBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSArPSBDU0xQZXJpb2Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSA9IEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lICsgKChkZWx0YSAvIENTTFBlcmlvZCkgKyAxKSAqIENTTFBlcmlvZDsKKyAgICAgICAgfQorCisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FLCBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSk7CisgICAgfQorCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKK30KKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworRlRERl9UaW1lNjQgRlRERl9nZXRDdXJUaW1lNjQodm9pZCkKK3sKKyAgICBGVERGX1RpbWUgbmV3VGltZSA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMKTsKKworICAgIGlmIChuZXdUaW1lIDwgRlRERl9jdXJUaW1lWyAwIF0pCisgICAgeworICAgICAgICBGVERGX2N1clRpbWVbIDEgXSsrOworICAgIH0KKworICAgIEZUREZfY3VyVGltZVsgMCBdID0gbmV3VGltZTsKKworICAgIHJldHVybiAqKEZUREZfVGltZTY0ICopRlRERl9jdXJUaW1lOworfQorCit2b2lkIEZUREZfaW5pdEN1clRpbWU2NCh2b2lkKQoreworICAgIEZUREZfY3VyVGltZVsgMCBdID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgIEZUREZfY3VyVGltZVsgMSBdID0gMDsKK30KKwordm9pZCBGVERGX2dldEV4dEFkZHJlc3Modm9pZCkKK3sKKyAgICB1aW50MzJfdCAqZXh0QWRkcmVzcyA9ICh1aW50MzJfdCAqKSAmRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICBleHRBZGRyZXNzWyAwIF0gPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCk7CisgICAgZXh0QWRkcmVzc1sgMSBdID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0gpOworfQorCit2b2lkIEZUREZfc2V0RXh0QWRkcmVzcyh2b2lkKQoreworICAgIHVpbnQzMl90ICpleHRBZGRyZXNzID0gKHVpbnQzMl90ICopICZGVERGX3BpYi5leHRBZGRyZXNzOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19MLCBleHRBZGRyZXNzWyAwIF0pOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19ILCBleHRBZGRyZXNzWyAxIF0pOworfQorCit2b2lkIEZUREZfZ2V0QWNrV2FpdER1cmF0aW9uKHZvaWQpCit7CisgICAgRlRERl9waWIuYWNrV2FpdER1cmF0aW9uID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04pOworfQorCisjaWZuZGVmIEZUREZfTElURQordm9pZCBGVERGX2dldEVuaEFja1dhaXREdXJhdGlvbih2b2lkKQoreworICAgIEZUREZfcGliLmVuaEFja1dhaXREdXJhdGlvbiA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OKTsKK30KKwordm9pZCBGVERGX3NldEVuaEFja1dhaXREdXJhdGlvbih2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OLCBGVERGX3BpYi5lbmhBY2tXYWl0RHVyYXRpb24pOworfQorCit2b2lkIEZUREZfZ2V0SW1wbGljaXRCcm9hZGNhc3Qodm9pZCkKK3sKKyAgICBGVERGX3BpYi5pbXBsaWNpdEJyb2FkY2FzdCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDSU1QTElDSVRCUk9BRENBU1QpOworfQorCit2b2lkIEZUREZfc2V0SW1wbGljaXRCcm9hZGNhc3Qodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNULCBGVERGX3BpYi5pbXBsaWNpdEJyb2FkY2FzdCk7Cit9CisjZW5kaWYgLyogIUZUREZfTElURSAqLworCit2b2lkIEZUREZfc2V0U2hvcnRBZGRyZXNzKHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNTSE9SVEFERFJFU1MsIEZUREZfcGliLnNob3J0QWRkcmVzcyk7Cit9CisKKyNpZm5kZWYgRlRERl9MSVRFCit2b2lkIEZUREZfc2V0U2ltcGxlQWRkcmVzcyh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDU0lNUExFQUREUkVTUywgRlRERl9waWIuc2ltcGxlQWRkcmVzcyk7Cit9CisjZW5kaWYgLyogIUZUREZfTElURSAqLworCit2b2lkIEZUREZfZ2V0UnhPbldoZW5JZGxlKHZvaWQpCit7CisgICAgRlRERl9waWIucnhPbldoZW5JZGxlID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWEFMV0FZU09OKTsKK30KKwordm9pZCBGVERGX3NldFJ4T25XaGVuSWRsZSh2b2lkKQoreworI2lmIEZUREZfVVNFX1BUSSAmJiAhRlRERl9VU0VfQVVUT19QVEkKKyAgICAvKiBXZSBkbyBub3QgZm9yY2UgZGVjaXNpb24gaGVyZS4gSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1hZGUgd2hlbiBGVERGIGJlZ2lucworICAgICAqIHRyYW5zYWN0aW9uLgorICAgICAqLworICAgIGh3X2NvZXhfdXBkYXRlX2Z0ZGZfcHRpKChod19jb2V4X3B0aV90KSBGVERGX2dldFJ4UHRpKCksIE5VTEwsIGZhbHNlKTsKKyNlbmRpZiAvKiBGVERGX1VTRV9QVEkgJiYgIUZUREZfVVNFX0FVVE9fUFRJICovCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWEVOQUJMRSwgMCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9SWEFMV0FZU09OLCBGVERGX3BpYi5yeE9uV2hlbklkbGUpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUlhFTkFCTEUsIDEpOworCit9CisKK3ZvaWQgRlRERl9nZXRQQU5JZCh2b2lkKQoreworICAgIEZUREZfcGliLlBBTklkID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNQQU5JRCk7Cit9CisKK3ZvaWQgRlRERl9zZXRQQU5JZCh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDUEFOSUQsIEZUREZfcGliLlBBTklkKTsKK30KKwordm9pZCBGVERGX2dldEN1cnJlbnRDaGFubmVsKHZvaWQpCit7CisgICAgRlRERl9waWIuY3VycmVudENoYW5uZWwgPSAoKEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZUlhBVFRSKSAmIDB4MDBmMCkgPj4gNCkgKyAxMTsKK30KKwordm9pZCBGVERGX3NldEN1cnJlbnRDaGFubmVsKHZvaWQpCit7CisgICAgdWludDMyX3QgcGh5QWNrQXR0ciA9IDB4MDggfCAoKEZUREZfcGliLmN1cnJlbnRDaGFubmVsIC0gMTEpICYgMHhmKSA8PCA0IHwgKEZUREZfcGliLlRYUG93ZXIgJiAweDcpIDw8IDEyOworCisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIsICgoKEZUREZfcGliLmN1cnJlbnRDaGFubmVsIC0gMTEpICYgMHhmKSA8PCA0KSk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSLCBwaHlBY2tBdHRyKTsKK30KKwordm9pZCBGVERGX3NldFRYUG93ZXIodm9pZCkKK3sKKyAgICAvKiBKdXN0IGxpa2Ugc2V0Q3VycmVudENoYW5uZWwsIHRoaXMgc2V0cyBweUFja0F0dHIgKi8KKyAgICB1aW50MzJfdCBwaHlBY2tBdHRyID0gMHgwOCB8ICgoRlRERl9waWIuY3VycmVudENoYW5uZWwgLSAxMSkgJiAweGYpIDw8IDQgfCAoRlRERl9waWIuVFhQb3dlciAmIDB4NykgPDwgMTI7CisKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIsIHBoeUFja0F0dHIpOworfQorCit2b2lkIEZUREZfZ2V0TWF4RnJhbWVUb3RhbFdhaXRUaW1lKHZvaWQpCit7CisgICAgRlRERl9waWIubWF4RnJhbWVUb3RhbFdhaXRUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUpOworfQorCit2b2lkIEZUREZfc2V0TWF4RnJhbWVUb3RhbFdhaXRUaW1lKHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUsIEZUREZfcGliLm1heEZyYW1lVG90YWxXYWl0VGltZSk7Cit9CisKK3ZvaWQgRlRERl9zZXRNYXhDU01BQmFja29mZnModm9pZCkKK3sKKyNpZm5kZWYgRlRERl9MSVRFCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkID09IEZUREZfRkFMU0UgJiYgRlRERl9waWIudHNjaEVuYWJsZWQgPT0gRlRERl9GQUxTRSkKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUywgRlRERl9waWIubWF4Q1NNQUJhY2tvZmZzKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZXRNYXhCRSh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUFYQkUsIEZUREZfcGliLm1heEJFKTsKK30KKwordm9pZCBGVERGX3NldE1pbkJFKHZvaWQpCit7CisjaWZuZGVmIEZUREZfTElURQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCA9PSBGVERGX0ZBTFNFICYmIEZUREZfcGliLnRzY2hFbmFibGVkID09IEZUREZfRkFMU0UpCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIHsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNSU5CRSwgRlRERl9waWIubWluQkUpOworICAgIH0KK30KKworI2lmbmRlZiBGVERGX0xJVEUKKyNpZm5kZWYgRlRERl9OT19DU0wKK3ZvaWQgRlRERl9zZXRMZUVuYWJsZWQodm9pZCkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCwgNjYpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMREFUQVBFUklPRCwgNjYpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlosIDEpOworCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCkKKyAgICB7CisgICAgICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTLCAwKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNSU5CRSwgMCk7CisKKyAgICAgICAgaWYgKEZUREZfb2xkTGVFbmFibGVkID09IEZUREZfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3dha2VVcEVuYWJsZUxlID09IEZUREZfRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9zdGFydENzbFNhbXBsZVRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgICAgICAgICAgICAgRlRERl9zZXRDc2xTYW1wbGVUaW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUsIEZUREZfc3RhcnRDc2xTYW1wbGVUaW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ01BWENTTUFCQUNLT0ZGUywgRlRERl9waWIubWF4Q1NNQUJhY2tvZmZzKTsKKyAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNNSU5CRSwgRlRERl9waWIubWluQkUpOworICAgIH0KKworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDTEVFTkFCTEVELCBGVERGX3BpYi5sZUVuYWJsZWQpOworCisgICAgRlRERl9vbGRMZUVuYWJsZWQgPSBGVERGX3BpYi5sZUVuYWJsZWQ7Cit9CisKK3ZvaWQgRlRERl9nZXRDc2xGcmFtZVBlbmRpbmdXYWl0VCh2b2lkKQoreworICAgIEZUREZfcGliLkNTTEZyYW1lUGVuZGluZ1dhaXRUID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCk7Cit9CisKK3ZvaWQgRlRERl9zZXRDc2xGcmFtZVBlbmRpbmdXYWl0VCh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQsIEZUREZfcGliLkNTTEZyYW1lUGVuZGluZ1dhaXRUKTsKK30KKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKwordm9pZCBGVERGX2dldExtYWNQbURhdGEodm9pZCkKK3sKKyAgICBGVERGX3BpYi5wZXJmb3JtYW5jZU1ldHJpY3MuRkNTRXJyb3JDb3VudCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9sbWFjQ291bnRlcnMuZmNzRXJyb3JDbnQ7Cit9CisKK3ZvaWQgRlRERl9nZXRMbWFjVHJhZmZpY0NvdW50ZXJzKHZvaWQpCit7CisgICAgRlRERl9waWIudHJhZmZpY0NvdW50ZXJzLnR4U3RkQWNrRnJtQ250ICAgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX2xtYWNDb3VudGVycy50eFN0ZEFja0NudDsKKyAgICBGVERGX3BpYi50cmFmZmljQ291bnRlcnMucnhTdGRBY2tGcm1Pa0NudCA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9sbWFjQ291bnRlcnMucnhTdGRBY2tDbnQ7Cit9CisKK3ZvaWQgRlRERl9nZXRLZWVwUGh5RW5hYmxlZCh2b2lkKQoreworICAgIEZUREZfcGliLmtlZXBQaHlFbmFibGVkID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTik7Cit9CisKK3ZvaWQgRlRERl9zZXRLZWVwUGh5RW5hYmxlZCh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfS0VFUF9QSFlfRU4sIEZUREZfcGliLmtlZXBQaHlFbmFibGVkKTsKK30KKworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3ZvaWQgRlRERl9zZXRCb0lycVRocmVzaG9sZCh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJFU0hPTEQsIEZUREZfcGliLmJvSXJxVGhyZXNob2xkKTsKK30KK3ZvaWQgRlRERl9nZXRCb0lycVRocmVzaG9sZCh2b2lkKQoreworICAgIEZUREZfcGliLmJvSXJxVGhyZXNob2xkID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUkVTSE9MRCk7Cit9Cit2b2lkIEZUREZfc2V0UHRpQ29uZmlnKHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTERfSU5ERVhFRChPTl9PRkZfUkVHTUFQX1BUSV9UWCwgRlRERl9waWIucHRpQ29uZmlnLnB0aXNbRlRERl9QVElfQ09ORklHX1RYXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVFhfREFUQV9CVUZGRVIpOworICAgIEZUREZfU0VUX0ZJRUxEX0lOREVYRUQoT05fT0ZGX1JFR01BUF9QVElfVFgsIEZUREZfcGliLnB0aUNvbmZpZy5wdGlzW0ZUREZfUFRJX0NPTkZJR19UWF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX1dBS0VVUF9CVUZGRVIpOworICAgIEZUREZfU0VUX0ZJRUxEX0lOREVYRUQoT05fT0ZGX1JFR01BUF9QVElfVFgsIEZUREZfcGliLnB0aUNvbmZpZy5wdGlzW0ZUREZfUFRJX0NPTkZJR19SWF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX0FDS19CVUZGRVIpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUFRJX1JYLCBGVERGX3BpYi5wdGlDb25maWcucHRpc1tGVERGX1BUSV9DT05GSUdfUlhdKTsKK30KKyNlbmRpZiAvKiAjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworCisjaWZuZGVmIEZUREZfTElURQorI2lmbmRlZiBGVERGX05PX1RTQ0gKK3ZvaWQgRlRERl9zZXRUaW1lc2xvdFRlbXBsYXRlKHZvaWQpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVksIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNUeEFja0RlbGF5KTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1RTUlhXQUlULCBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzUnhXYWl0KTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ1RTUlhBQ0tERUxBWSwgRlRERl9waWIudGltZXNsb3RUZW1wbGF0ZS50c1J4QWNrRGVsYXkpOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDVFNBQ0tXQUlULCBGVERGX3BpYi50aW1lc2xvdFRlbXBsYXRlLnRzQWNrV2FpdCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNUU1JYVFgsIEZUREZfcGliLnRpbWVzbG90VGVtcGxhdGUudHNSeFR4IC0KKyAgICAgICAgICAgICAgICAgICBGVERGX1BIWVRSWFdBSVQgLSBGVERGX1BIWVRYU1RBUlRVUCAtIEZUREZfUEhZVFhMQVRFTkNZKTsKK30KKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BCisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRlBQUiBjb21tb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgRlRERl9MSVRFCisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwRnNtU2hvcnRBZGRyZXNzTmV3KEZUREZfUEFOSWQgcGFuSWQsIEZUREZfU2hvcnRBZGRyZXNzIHNob3J0QWRkcmVzcykKK3sKKyAgICB1aW50OF90IGVudHJ5OworICAgIHVpbnQ4X3Qgc2hvcnRBZGRySWR4OworCisgICAgaWYgKEZUREZfZnBwckdldEZyZWVTaG9ydEFkZHJlc3MoJmVudHJ5LCAmc2hvcnRBZGRySWR4KSA9PSBGVERGX0ZBTFNFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgfQorCisgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzKGVudHJ5LCBzaG9ydEFkZHJJZHgsIHNob3J0QWRkcmVzcyk7CisgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzVmFsaWQoZW50cnksIHNob3J0QWRkcklkeCwgRlRERl9UUlVFKTsKKworICAgIHJldHVybiBGVERGX1RSVUU7Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwRnNtRXh0QWRkcmVzc05ldyhGVERGX1BBTklkIHBhbklkLCBGVERGX0V4dEFkZHJlc3MgZXh0QWRkcmVzcykKK3sKKyAgICB1aW50OF90IGVudHJ5OworCisgICAgaWYgKEZUREZfZnBwckdldEZyZWVFeHRBZGRyZXNzKCZlbnRyeSkgPT0gRlRERl9GQUxTRSkKKyAgICB7CisgICAgICAgIHJldHVybiBGVERGX0ZBTFNFOworICAgIH0KKworICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3MoZW50cnksIGV4dEFkZHJlc3MpOworICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3NWYWxpZChlbnRyeSwgRlRERl9UUlVFKTsKKworICAgIHJldHVybiBGVERGX1RSVUU7Cit9CisKK3ZvaWQgRlRERl9mcEZzbVNob3J0QWRkcmVzc0xhc3RGcmFtZVBlbmRpbmcoRlRERl9QQU5JZCBQQU5JZCwgRlRERl9TaG9ydEFkZHJlc3Mgc2hvcnRBZGRyZXNzKQoreworI2lmIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04KKyAgICBGVERGX2ZwcHJQZW5kaW5nLmFkZHJNb2RlID0gRlRERl9TSE9SVF9BRERSRVNTOworICAgIEZUREZfZnBwclBlbmRpbmcuUEFOSWQgPSBQQU5JZDsKKyAgICBGVERGX2ZwcHJQZW5kaW5nLmFkZHIuc2hvcnRBZGRyZXNzID0gc2hvcnRBZGRyZXNzOworI2Vsc2UgLyogRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTiAqLworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgdWludDhfdCBzaG9ydEFkZHJJZHg7CisgICAgRlRERl9Cb29sZWFuIGZvdW5kID0gRlRERl9mcHByTG9va3VwU2hvcnRBZGRyZXNzKHNob3J0QWRkcmVzcywgJmVudHJ5LCAmc2hvcnRBZGRySWR4KTsKKyAgICBBU1NFUlRfV0FSTklORyhmb3VuZCk7CisgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzVmFsaWQoZW50cnksIHNob3J0QWRkcklkeCwgRlRERl9GQUxTRSk7CisjZW5kaWYgLyogRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTiAqLworfQorCit2b2lkIEZUREZfZnBGc21FeHRBZGRyZXNzTGFzdEZyYW1lUGVuZGluZyhGVERGX1BBTklkIFBBTklkLCBGVERGX0V4dEFkZHJlc3MgZXh0QWRkcmVzcykKK3sKKyNpZiBGVERGX0ZQUFJfREVGRVJfSU5WQUxJREFUSU9OCisgICAgRlRERl9mcHByUGVuZGluZy5hZGRyTW9kZSA9IEZUREZfRVhURU5ERURfQUREUkVTUzsKKyAgICBGVERGX2ZwcHJQZW5kaW5nLlBBTklkID0gUEFOSWQ7CisgICAgRlRERl9mcHByUGVuZGluZy5hZGRyLmV4dEFkZHJlc3MgPSBleHRBZGRyZXNzOworI2Vsc2UgLyogRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTiAqLworICAgIHVpbnQ4X3QgZW50cnk7CisgICAgRlRERl9Cb29sZWFuIGZvdW5kID0gRlRERl9mcHByTG9va3VwRXh0QWRkcmVzcyhleHRBZGRyZXNzLCAmZW50cnkpOworICAgIEFTU0VSVF9XQVJOSU5HKGZvdW5kKTsKKyAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfRkFMU0UpOworI2VuZGlmIC8qIEZUREZfRlBQUl9ERUZFUl9JTlZBTElEQVRJT04gKi8KK30KKwordm9pZCBGVERGX2ZwRnNtQ2xlYXJQZW5kaW5nKHZvaWQpCit7CisjaWYgRlRERl9GUFBSX0RFRkVSX0lOVkFMSURBVElPTgorICAgIGludCBuOworCisgICAgaWYgKEZUREZfZnBwclBlbmRpbmcuYWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChGVERGX2ZwcHJQZW5kaW5nLmFkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICB7CisgICAgICAgIGZvciAobiA9IDA7IG4gPCBGVERGX05SX09GX1JFUV9CVUZGRVJTOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5QQU5JZCA9PSBGVERGX2ZwcHJQZW5kaW5nLlBBTklkKSAmJgorICAgICAgICAgICAgICAgICAgICAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkci5zaG9ydEFkZHJlc3MgPT0KKyAgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclBlbmRpbmcuYWRkci5zaG9ydEFkZHJlc3MpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZHJlc3Mgbm90IGZvdW5kLgorICAgICAgICB1aW50OF90IGVudHJ5OworICAgICAgICB1aW50OF90IHNob3J0QWRkcklkeDsKKyAgICAgICAgRlRERl9Cb29sZWFuIGZvdW5kID0gRlRERl9mcHByTG9va3VwU2hvcnRBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9mcHByUGVuZGluZy5hZGRyLnNob3J0QWRkcmVzcywgJmVudHJ5LCAmc2hvcnRBZGRySWR4KTsKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoZm91bmQpOworICAgICAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3NWYWxpZChlbnRyeSwgc2hvcnRBZGRySWR4LCBGVERGX0ZBTFNFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoRlRERl9mcHByUGVuZGluZy5hZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgeworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyLmV4dEFkZHJlc3MgPT0KKyAgICAgICAgICAgICAgICAgICAgRlRERl9mcHByUGVuZGluZy5hZGRyLmV4dEFkZHJlc3MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkcmVzcyBub3QgZm91bmQuCisgICAgICAgIHVpbnQ4X3QgZW50cnk7CisgICAgICAgIEZUREZfQm9vbGVhbiBmb3VuZCA9IEZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoRlRERl9mcHByUGVuZGluZy5hZGRyLmV4dEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5KTsKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoZm91bmQpOworICAgICAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfRkFMU0UpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCisgICAgfQorCisgICAgRlRERl9mcHByUGVuZGluZy5hZGRyTW9kZSA9IEZUREZfTk9fQUREUkVTUzsKKyNlbmRpZiAvKiBGVERGX0ZQUFJfREVGRVJfSU5WQUxJREFUSU9OICovCit9CisKKyNlbmRpZiAvKiAjaWZuZGVmIEZUREZfTElURSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEZQUFIgbG93LWxldmVsIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBGVERGX2ZwcHJSZXNldCh2b2lkKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICAqRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9TSVpFX0FORF9WQUwsIGkpID0gMDsKKyAgICB9Cit9CisKK0ZUREZfU2hvcnRBZGRyZXNzIEZUREZfZnBwckdldFNob3J0QWRkcmVzcyh1aW50OF90IGVudHJ5LCB1aW50OF90IHNob3J0QWRkcklkeCkKK3sKKyAgICBBU1NFUlRfV0FSTklORyhlbnRyeSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTKTsKKworICAgIHN3aXRjaCAoc2hvcnRBZGRySWR4KQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiAoRlRERl9TaG9ydEFkZHJlc3MpCisgICAgICAgICAgICAgICAqIEZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCwgZW50cnkpICYKKyAgICAgICAgICAgICAgIDB4MDAwMGZmZmY7CisKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiAoRlRERl9TaG9ydEFkZHJlc3MpCisgICAgICAgICAgICAgICAoKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCwgZW50cnkpID4+IDE2KSAmCisgICAgICAgICAgICAgICAweDAwMDBmZmZmOworCisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gKEZUREZfU2hvcnRBZGRyZXNzKQorICAgICAgICAgICAgICAgKiBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0gsIGVudHJ5KSAmCisgICAgICAgICAgICAgICAweDAwMDBmZmZmOworCisgICAgY2FzZSAzOgorICAgICAgICByZXR1cm4gKEZUREZfU2hvcnRBZGRyZXNzKQorICAgICAgICAgICAgICAgKCpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0gsIGVudHJ5KSA+PiAxNikgJgorICAgICAgICAgICAgICAgMHgwMDAwZmZmZjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgIH0KK30KKwordm9pZCBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3ModWludDhfdCBlbnRyeSwgdWludDhfdCBzaG9ydEFkZHJJZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1Nob3J0QWRkcmVzcyBzaG9ydEFkZHJlc3MpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoZW50cnkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyk7CisgICAgdWludDMyX3QgdmFsMzI7CisKKyAgICBzd2l0Y2ggKHNob3J0QWRkcklkeCkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICB2YWwzMiA9ICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsIGVudHJ5KTsKKyAgICAgICAgdmFsMzIgJj0gMHhmZmZmMDAwMDsKKyAgICAgICAgdmFsMzIgfD0gKHNob3J0QWRkcmVzcyAmIDB4MDAwMGZmZmYpOworICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLCBlbnRyeSkgPSB2YWwzMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICAgIHZhbDMyID0gKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCwgZW50cnkpOworICAgICAgICB2YWwzMiAmPSAweDAwMDBmZmZmOworICAgICAgICB2YWwzMiB8PSAoc2hvcnRBZGRyZXNzICYgMHgwMDAwZmZmZikgPDwgMTY7CisgICAgICAgICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsIGVudHJ5KSA9IHZhbDMyOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgICAgdmFsMzIgPSAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBlbnRyeSk7CisgICAgICAgIHZhbDMyICY9IDB4ZmZmZjAwMDA7CisgICAgICAgIHZhbDMyIHw9IChzaG9ydEFkZHJlc3MgJiAweDAwMDBmZmZmKTsKKyAgICAgICAgKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCwgZW50cnkpID0gdmFsMzI7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgICB2YWwzMiA9ICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0gsIGVudHJ5KTsKKyAgICAgICAgdmFsMzIgJj0gMHgwMDAwZmZmZjsKKyAgICAgICAgdmFsMzIgfD0gKHNob3J0QWRkcmVzcyAmIDB4MDAwMGZmZmYpIDw8IDE2OworICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBlbnRyeSkgPSB2YWwzMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJHZXRTaG9ydEFkZHJlc3NWYWxpZCh1aW50OF90IGVudHJ5LCB1aW50OF90IHNob3J0QWRkcklkeCkKK3sKKyAgICBBU1NFUlRfV0FSTklORyhlbnRyeSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTKTsKKyAgICBBU1NFUlRfV0FSTklORyhzaG9ydEFkZHJJZHggPCA0KTsKKyAgICB1aW50MzJfdCB2YWwzMjsKKyAgICB2YWwzMiA9ICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EsIGVudHJ5KTsKKyAgICByZXR1cm4gKCh2YWwzMiAmIChNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QgfCAoMSA8PCBzaG9ydEFkZHJJZHgpKSkgPT0KKyAgICAgICAgICAgIChNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QgfCAoMSA8PCBzaG9ydEFkZHJJZHgpKSkgPworICAgICAgICAgICBGVERGX1RSVUUgOiBGVERGX0ZBTFNFOworfQorCit2b2lkIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKHVpbnQ4X3QgZW50cnksIHVpbnQ4X3Qgc2hvcnRBZGRySWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gdmFsaWQpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoZW50cnkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyk7CisgICAgQVNTRVJUX1dBUk5JTkcoc2hvcnRBZGRySWR4IDwgNCk7CisgICAgdWludDMyX3QgdmFsMzI7CisgICAgdmFsMzIgPSAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBLCBlbnRyeSk7CisKKyAgICBpZiAodmFsaWQpCisgICAgeworICAgICAgICB2YWwzMiB8PSBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QgfCAoMSA8PCBzaG9ydEFkZHJJZHgpOyAvKiBBbHNvIGluZGljYXRlIHNob3J0IGFkZHJlc3MuICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHZhbDMyICY9IH4oMSA8PCBzaG9ydEFkZHJJZHgpOworICAgIH0KKworICAgICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EsIGVudHJ5KSA9IHZhbDMyOworfQorCitGVERGX0V4dEFkZHJlc3MgRlRERl9mcHByR2V0RXh0QWRkcmVzcyh1aW50OF90IGVudHJ5KQoreworICAgIEZUREZfRXh0QWRkcmVzcyBleHRBZGRyZXNzOworICAgIEFTU0VSVF9XQVJOSU5HKGVudHJ5IDwgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVMpOworICAgIGV4dEFkZHJlc3MgPSAoRlRERl9FeHRBZGRyZXNzKSAqIEZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkpIDw8IDMyOworICAgIGV4dEFkZHJlc3MgfD0gKEZUREZfRXh0QWRkcmVzcykgKiBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSk7CisgICAgcmV0dXJuIGV4dEFkZHJlc3M7Cit9CisKK3ZvaWQgRlRERl9mcHByU2V0RXh0QWRkcmVzcyh1aW50OF90IGVudHJ5LCBGVERGX0V4dEFkZHJlc3MgZXh0QWRkcmVzcykKK3sKKyAgICBBU1NFUlRfV0FSTklORyhlbnRyeSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTKTsKKyAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLCBlbnRyeSkgPQorICAgICAgICAodWludDMyX3QpKGV4dEFkZHJlc3MpOworICAgICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0gsIGVudHJ5KSA9CisgICAgICAgICh1aW50MzJfdCkoKGV4dEFkZHJlc3MgPj4gMzIpKTsKK30KKworRlRERl9Cb29sZWFuIEZUREZfZnBwckdldEV4dEFkZHJlc3NWYWxpZCh1aW50OF90IGVudHJ5KQoreworICAgIHJldHVybiAoKkZUREZfR0VUX0ZJRUxEX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSwgZW50cnkpID09IDB4MSkgPworICAgICAgICAgICBGVERGX1RSVUUgOiBGVERGX0ZBTFNFOworfQorCit2b2lkIEZUREZfZnBwclNldEV4dEFkZHJlc3NWYWxpZCh1aW50OF90IGVudHJ5LCBGVERGX0Jvb2xlYW4gdmFsaWQpCit7CisgICAgQVNTRVJUX1dBUk5JTkcoZW50cnkgPCBGVERGX0ZQUFJfVEFCTEVfRU5UUklFUyk7CisKKyAgICBpZiAodmFsaWQpCisgICAgeworICAgICAgICAvKiBBbHNvIGluZGljYXRlIGV4dCBhZGRyZXNzLiAqLworICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBLCBlbnRyeSkgPSAweDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EsIGVudHJ5KSA9IDB4MDsKKyAgICB9Cit9CisKK0ZUREZfQm9vbGVhbiBGVERGX2ZwcHJHZXRGcmVlU2hvcnRBZGRyZXNzKHVpbnQ4X3QgKmVudHJ5LCB1aW50OF90ICpzaG9ydEFkZHJJZHgpCit7CisgICAgaW50IGksIGo7CisgICAgdWludDMyX3Qgc2l6ZUFuZFZhbDsKKyAgICBpbnQgZW1wdHlFbnRyeTsKKyAgICBib29sIGVtcHR5Rm91bmQgPSBmYWxzZSwgbm9uRW1wdHlGb3VuZCA9IGZhbHNlOworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBzaXplQW5kVmFsID0gKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMLCBpKTsKKworICAgICAgICBpZiAoc2l6ZUFuZFZhbCA9PSAweDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGEgdmFsaWQgZXh0ZW5kZWQgYWRkcmVzcy4gICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc2l6ZUFuZFZhbCAmIE1TS19GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlcmUgaXMgYW4gaW52YWxpZCBleHRlbmRlZCBhZGRyZXNzLCBpZ25vcmUgU0EgdmFsaWQgYml0cyAgKi8KKyAgICAgICAgICAgIHNpemVBbmRWYWwgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlcmUgaXMgYSBTQS4gV2UgYXJlIGludGVyZXN0ZWQgaW4gYml0cyBWMCAtIFYzLiAqLworICAgICAgICAgICAgc2l6ZUFuZFZhbCAmPSAweGY7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBpZiBlbnRpcmUgZW50cnkgaXMgZnJlZS4gKi8KKyAgICAgICAgaWYgKHNpemVBbmRWYWwgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogV2UgcHJlZmVyIHRvIHVzZSBwYXJ0aWFsbHkgZnVsbCBlbnRyaWVzLiBNYWtlIG5vdGUgb2YgdGhpcyBhbmQKKyAgICAgICAgICAgICAqIGNvbnRpbnVlLiAqLworICAgICAgICAgICAgaWYgKCFlbXB0eUZvdW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVtcHR5RW50cnkgPSBpOworICAgICAgICAgICAgICAgIGVtcHR5Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGZvciBmcmVlIHNob3J0IGFkZHJlc3MgZW50cmllcy4gKi8KKyAgICAgICAgc2l6ZUFuZFZhbCA9ICh+c2l6ZUFuZFZhbCkgJiAweGY7CisgICAgICAgIGogPSAwOworCisgICAgICAgIHdoaWxlIChzaXplQW5kVmFsKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6ZUFuZFZhbCAmIDB4MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub25FbXB0eUZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2l6ZUFuZFZhbCA+Pj0gMTsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub25FbXB0eUZvdW5kKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChub25FbXB0eUZvdW5kKQorICAgIHsKKyAgICAgICAgKmVudHJ5ID0gaTsKKyAgICAgICAgKnNob3J0QWRkcklkeCA9IGo7CisgICAgfQorICAgIGVsc2UgaWYgKGVtcHR5Rm91bmQpCisgICAgeworICAgICAgICAqZW50cnkgPSBlbXB0eUVudHJ5OworICAgICAgICAqc2hvcnRBZGRySWR4ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEZUREZfVFJVRTsKK30KKworRlRERl9Cb29sZWFuIEZUREZfZnBwckdldEZyZWVFeHRBZGRyZXNzKHVpbnQ4X3QgKmVudHJ5KQoreworICAgIGludCBpOworICAgIHVpbnQzMl90IHNpemVBbmRWYWw7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBzaXplQW5kVmFsID0gKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMLCBpKTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBubyB2YWxpZCBleHRlbmRlZCBvciBzaG9ydCBhZGRyZXNzLiAgKi8KKyAgICAgICAgaWYgKCFzaXplQW5kVmFsIHx8IChzaXplQW5kVmFsID09IE1TS19GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvdW5kKQorICAgIHsKKyAgICAgICAgKmVudHJ5ID0gaTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEZUREZfVFJVRTsKK30KKworRlRERl9Cb29sZWFuIEZUREZfZnBwckxvb2t1cFNob3J0QWRkcmVzcyhGVERGX1Nob3J0QWRkcmVzcyBzaG9ydEFkZHIsIHVpbnQ4X3QgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpzaG9ydEFkZHJJZHgpCit7CisgICAgdWludDhfdCBpOworICAgIHVpbnQzMl90IHNpemVBbmRWYWw7CisgICAgdWludDMyX3Qgc2FQYXJ0OworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfRlBQUl9UQUJMRV9FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBzaXplQW5kVmFsID0gKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMLCBpKTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBhIHZhbGlkIHNob3J0IGFkZHJlc3MuICovCisgICAgICAgIGlmICghKHNpemVBbmRWYWwgJiBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QpIHx8CisgICAgICAgICAgICAhKHNpemVBbmRWYWwgJiBNU0tfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzYVBhcnQgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MLCBpKTsKKworICAgICAgICBpZiAoc2l6ZUFuZFZhbCAmIDB4MSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNob3J0QWRkciA9PSAoRlRERl9TaG9ydEFkZHJlc3MpKHNhUGFydCAmIDB4MDAwMGZmZmYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICplbnRyeSA9IGk7CisgICAgICAgICAgICAgICAgKnNob3J0QWRkcklkeCA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZUREZfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplQW5kVmFsICYgMHgyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2hvcnRBZGRyID09IChGVERGX1Nob3J0QWRkcmVzcykoKHNhUGFydCA+PiAxNikgJiAweDAwMDBmZmZmKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZW50cnkgPSBpOworICAgICAgICAgICAgICAgICpzaG9ydEFkZHJJZHggPSAxOworICAgICAgICAgICAgICAgIHJldHVybiBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzYVBhcnQgPSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBpKTsKKworICAgICAgICBpZiAoc2l6ZUFuZFZhbCAmIDB4NCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNob3J0QWRkciA9PSAoRlRERl9TaG9ydEFkZHJlc3MpKHNhUGFydCAmIDB4MDAwMGZmZmYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICplbnRyeSA9IGk7CisgICAgICAgICAgICAgICAgKnNob3J0QWRkcklkeCA9IDI7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZUREZfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplQW5kVmFsICYgMHg4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2hvcnRBZGRyID09ICgoRlRERl9TaG9ydEFkZHJlc3MpKHNhUGFydCA+PiAxNikgJiAweDAwMDBmZmZmKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZW50cnkgPSBpOworICAgICAgICAgICAgICAgICpzaG9ydEFkZHJJZHggPSAzOworICAgICAgICAgICAgICAgIHJldHVybiBGVERGX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRlRERl9GQUxTRTsKK30KKworRlRERl9Cb29sZWFuIEZUREZfZnBwckxvb2t1cEV4dEFkZHJlc3MoRlRERl9FeHRBZGRyZXNzIGV4dEFkZHIsIHVpbnQ4X3QgKmVudHJ5KQoreworICAgIHVpbnQ4X3QgaTsKKyAgICB1aW50MzJfdCBzaXplQW5kVmFsOworICAgIHVpbnQzMl90IGV4dEFkZHJIaSwgZXh0QWRkckxvOworICAgIGV4dEFkZHJIaSA9ICh1aW50MzJfdCkoKGV4dEFkZHIgPj4gMzIpICYgMHhmZmZmZmZmZik7CisgICAgZXh0QWRkckxvID0gKHVpbnQzMl90KShleHRBZGRyICYgMHhmZmZmZmZmZik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRlRERl9GUFBSX1RBQkxFX0VOVFJJRVM7IGkrKykKKyAgICB7CisgICAgICAgIHNpemVBbmRWYWwgPSAqRlRERl9HRVRfUkVHX0FERFJfSU5ERVhFRChGUF9QUk9DRVNTSU5HX1JBTV9TSVpFX0FORF9WQUwsIGkpOworCisgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGEgdmFsaWQgZXh0ZW5kZWQgYWRkcmVzcy4gKi8KKyAgICAgICAgaWYgKHNpemVBbmRWYWwgIT0gMHgxKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZXh0QWRkckxvID09IEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wsIGkpKSAmJgorICAgICAgICAgICAgKGV4dEFkZHJIaSA9PSBGVERGX0dFVF9GSUVMRF9JTkRFWEVEKEZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9ILCBpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICplbnRyeSA9IGk7CisgICAgICAgICAgICByZXR1cm4gRlRERl9UUlVFOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZUREZfRkFMU0U7Cit9CisKKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworCit2b2lkIEZUREZfZnBwclNldE1vZGUoRlRERl9Cb29sZWFuIG1hdGNoRnAsIEZUREZfQm9vbGVhbiBmcE92ZXJyaWRlLCBGVERGX0Jvb2xlYW4gZnBGb3JjZSkKK3sKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0FERFJfVEFCX01BVENIX0ZQX1ZBTFVFLCBtYXRjaEZwID8gMSA6IDApOworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRlBfT1ZFUlJJREUsIGZwT3ZlcnJpZGUgPyAxIDogMCk7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9GUF9GT1JDRV9WQUxVRSwgZnBGb3JjZSA/IDEgOiAwKTsKK30KKworI2lmIEZUREZfRlBfQklUX1RFU1RfTU9ERQordm9pZCBGVERGX2ZwcHJHZXRNb2RlKEZUREZfQm9vbGVhbiAqbWF0Y2hGcCwgRlRERl9Cb29sZWFuICpmcE92ZXJyaWRlLCBGVERGX0Jvb2xlYW4gKmZwRm9yY2UpCit7CisgICAgKm1hdGNoRnAgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0FERFJfVEFCX01BVENIX0ZQX1ZBTFVFKSA/IEZUREZfVFJVRSA6IEZUREZfRkFMU0U7CisgICAgKmZwT3ZlcnJpZGUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0ZQX09WRVJSSURFKSA/IEZUREZfVFJVRSA6IEZUREZfRkFMU0U7CisgICAgKmZwRm9yY2UgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0ZQX0ZPUkNFX1ZBTFVFKSA/IEZUREZfVFJVRSA6IEZUREZfRkFMU0U7Cit9CisjZW5kaWYgLy8gRlRERl9GUF9CSVRfVEVTVF9NT0RFCisKK3ZvaWQgRlRERl9scGRwRW5hYmxlKEZUREZfQm9vbGVhbiBlbmFibGUpCit7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9GVERGX0xQRFBfRU5BQkxFLCBlbmFibGUgPyAxIDogMCk7Cit9CisKKyNpZiBGVERGX0ZQX0JJVF9URVNUX01PREUKK0ZUREZfQm9vbGVhbiBGVERGX2xwZHBJc0VuYWJsZWQodm9pZCkKK3sKKyAgICByZXR1cm4gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9GVERGX0xQRFBfRU5BQkxFKSA/IEZUREZfVFJVRSA6IEZUREZfRkFMU0U7Cit9CisjZW5kaWYKKworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBGVERGX3NkYlNhdmVTdGF0ZSh2b2lkKQoreworICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZpZm9QdHIgPSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pOworICAgIHVpbnQzMl90ICpkc3RQdHIgPSAodWludDMyX3QgKikgRlRERl9zZGIuYnVmZmVyOworICAgIHVpbnQ4X3Qgd29yZF9sZW5ndGhfcmVtOworCisgICAgRlRERl9zZGIubnJPZkJhY2tvZmZzID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9DU01BX0NBX05CX1NUQVQpOworCisgICAgLyogUmVhZCBmaXJzdCA0IGJ5dGVzLiAqLworICAgICpkc3RQdHIrKyA9ICp0eEZpZm9QdHIrKzsKKworICAgIEFTU0VSVF9XQVJOSU5HKChGVERGX3NkYi5idWZmZXJbMF0gPj0gMykgJiYgKEZUREZfc2RiLmJ1ZmZlclswXSA8IEZUREZfQlVGRkVSX0xFTkdUSCkpOworICAgIC8qIFRoZSBsZW5ndGggaXMgdGhlIGJ1ZmZlciBsZW5ndGggZXhjbHVkaW5nIHRoZSBsZW5ndGggYnl0ZSBpdHNlbGYgKi8KKyAgICB3b3JkX2xlbmd0aF9yZW0gPSAoRlRERl9zZGIuYnVmZmVyWzBdICsgNCkgLyA0IC0gMTsgLyogMSB3b3JkIHdlIGFscmVhZHkgcmVhZCAqLworCisgICAgd2hpbGUgKHdvcmRfbGVuZ3RoX3JlbS0tKQorICAgIHsKKyAgICAgICAgKmRzdFB0cisrID0gKnR4Rmlmb1B0cisrOworICAgIH0KKworICAgIEZUREZfc2RiLm1ldGFkYXRhMCA9ICpGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKFJFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UWF9EQVRBX0JVRkZFUik7CisgICAgRlRERl9zZGIubWV0YWRhdGExID0gKkZUREZfR0VUX1JFR19BRERSX0lOREVYRUQoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKyAgICBGVERGX3NkYi5waHlDc21hQ2FBdHRyID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEZUREZfc2RiUmVzdW1lKHZvaWQpCit7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4Rmlmb1B0ciA9IEZUREZfR0VUX1JFR19BRERSKFJFVEVOVElPTl9SQU1fVFhfRklGTyk7CisgICAgdm9sYXRpbGUgdWludDMyX3QgKnR4RmxhZ1NldCA9IEZUREZfR0VUX0ZJRUxEX0FERFIoT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCk7CisgICAgdWludDMyX3QgKnNyY1B0ciA9ICh1aW50MzJfdCAqKSBGVERGX3NkYi5idWZmZXI7CisKKyAgICB1aW50OF90IHdvcmRfbGVuZ3RoX3JlbTsKKworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ1NNQV9DQV9OQl9WQUwsIEZUREZfc2RiLm5yT2ZCYWNrb2Zmcyk7CisKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX1NFVCwgMSk7CisKKyAgICBBU1NFUlRfV0FSTklORygoRlRERl9zZGIuYnVmZmVyWzBdID49IDMpICYmIChGVERGX3NkYi5idWZmZXJbMF0gPCBGVERGX0JVRkZFUl9MRU5HVEgpKTsKKworICAgIC8qIFRoZSBsZW5ndGggaXMgdGhlIGJ1ZmZlciBsZW5ndGggZXhjbHVkaW5nIHRoZSBsZW5ndGggYnl0ZSBpdHNlbGYgKi8KKyAgICB3b3JkX2xlbmd0aF9yZW0gPSAoRlRERl9zZGIuYnVmZmVyWzBdICsgNCkgLyA0OworCisgICAgd2hpbGUgKHdvcmRfbGVuZ3RoX3JlbS0tKQorICAgIHsKKyAgICAgICAgKnR4Rmlmb1B0cisrID0gKnNyY1B0cisrOworICAgIH0KKworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiwgRlRERl9zZGIucGh5Q3NtYUNhQXR0cik7CisKKyAgICAqRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCkgPSBGVERGX3NkYi5tZXRhZGF0YTA7CisKKyAgICAqRlRERl9HRVRfUkVHX0FERFIoUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSkgPSBGVERGX3NkYi5tZXRhZGF0YTE7CisKKyAgICAqdHhGbGFnU2V0IHw9ICgxIDw8IEZUREZfVFhfREFUQV9CVUZGRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgRlRERl9zZGJSZXNldCh2b2lkKQoreworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfQ0xFQVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgRlRERl9zZGJTZXRDQ0FSZXRyeVRpbWUodm9pZCkKK3sKKyAgICBGVERGX1RpbWUgdGltZXN0YW1wID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworICAgIEZUREZfVGltZSBib1N0YXQgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fU1RBVCkgKgorICAgICAgICAgICAgICAgICAgICAgICBGVERGX1VOSVRfQkFDS09GRl9QRVJJT0Q7CisgICAgRlRERl9zZGIuY2NhUmV0cnlUaW1lID0gdGltZXN0YW1wICsgYm9TdGF0OworfQorCit2b2lkIEZUREZfc2RiRnNtUmVzZXQodm9pZCkKK3sKKyAgICBGVERGX3NkYlJlc2V0KCk7CisgICAgRlRERl9zZGIuc3RhdGUgPSBGVERGX1NEQl9TVEFURV9JTklUOworfQorCit2b2lkIEZUREZfc2RiRnNtQmFja29mZklSUSh2b2lkKQoreworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkIHx8IEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmCisKKyAgICBzd2l0Y2ggKEZUREZfc2RiLnN0YXRlKQorICAgIHsKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX1JFU1VNSU5HOgorICAgICAgICBGVERGX3NkYlJlc2V0KCk7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0lOSVQ6CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9CQUNLSU5HX09GRjoKKyAgICAgICAgRlRERl9zZGJTZXRDQ0FSZXRyeVRpbWUoKTsKKyAgICAgICAgRlRERl9zZGIuc3RhdGUgPSBGVERGX1NEQl9TVEFURV9CQUNLSU5HX09GRjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZGJGc21TbGVlcCh2b2lkKQoreworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkIHx8IEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2VuZGlmCisKKyAgICBzd2l0Y2ggKEZUREZfc2RiLnN0YXRlKQorICAgIHsKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0JBQ0tJTkdfT0ZGOgorICAgICAgICBGVERGX3NkYlNhdmVTdGF0ZSgpOworICAgICAgICBGVERGX3NkYi5zdGF0ZSA9IEZUREZfU0RCX1NUQVRFX1dBSVRJTkdfV0FLRV9VUF9JUlE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9JTklUOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgIH0KK30KKwordm9pZCBGVERGX3NkYkZzbUFib3J0U2xlZXAodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisgICAgc3dpdGNoIChGVERGX3NkYi5zdGF0ZSkKKyAgICB7CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9CQUNLSU5HX09GRjoKKyAgICAgICAgRlRERl9zZGIuc3RhdGUgPSBGVERGX1NEQl9TVEFURV9JTklUOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfSU5JVDoKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX1dBSVRJTkdfV0FLRV9VUF9JUlE6CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9SRVNVTUlORzoKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZGJGc21XYWtlVXBJUlEodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisgICAgc3dpdGNoIChGVERGX3NkYi5zdGF0ZSkKKyAgICB7CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9XQUlUSU5HX1dBS0VfVVBfSVJROgorICAgICAgICBGVERGX3NkYi5zdGF0ZSA9IEZUREZfU0RCX1NUQVRFX1JFU1VNSU5HOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfSU5JVDoKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9Cit9CisKK3ZvaWQgRlRERl9zZGJGc21XYWtlVXAodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNlbmRpZgorCisgICAgc3dpdGNoIChGVERGX3NkYi5zdGF0ZSkKKyAgICB7CisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9SRVNVTUlORzoKKyAgICAgICAgRlRERl9zZGJSZXN1bWUoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX1dBSVRJTkdfV0FLRV9VUF9JUlE6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1NEQl9TVEFURV9JTklUOgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgIH0KK30KKwordm9pZCBGVERGX3NkYkZzbVR4SVJRKHZvaWQpCit7CisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKworICAgIHN3aXRjaCAoRlRERl9zZGIuc3RhdGUpCisgICAgeworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfUkVTVU1JTkc6CisgICAgICAgIEZUREZfc2RiUmVzZXQoKTsKKyAgICAgICAgRlRERl9zZGIuc3RhdGUgPSBGVERGX1NEQl9TVEFURV9JTklUOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfQkFDS0lOR19PRkY6CisgICAgICAgIEZUREZfc2RiLnN0YXRlID0gRlRERl9TREJfU1RBVEVfSU5JVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0lOSVQ6CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoMCk7CisgICAgfQorfQorCitGVERGX1VTZWMgRlRERl9zZGJHZXRTbGVlcFRpbWUodm9pZCkKK3sKKyAgICBGVERGX1VTZWMgc2xlZXBUaW1lID0gfigoRlRERl9VU2VjKSAwKTsKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzbGVlcFRpbWU7CisgICAgfQorCisjZW5kaWYKKworICAgIHN3aXRjaCAoRlRERl9zZGIuc3RhdGUpCisgICAgeworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfSU5JVDoKKyAgICB7CisgICAgICAgIGlmICgoRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVApID09IDApIHx8IEZUREZfcmVxQ3VycmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgc2xlZXBUaW1lID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNsZWVwVGltZSA9IH4oKEZUREZfVVNlYykgMCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX0JBQ0tJTkdfT0ZGOgorICAgIHsKKyAgICAgICAgRlRERl9UaW1lIGN1cnJlbnRUaW1lID0gRlRERl9HRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwpOworCisgICAgICAgIGlmIChjdXJyZW50VGltZSA8PSBGVERGX3NkYi5jY2FSZXRyeVRpbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNsZWVwVGltZSA9IChGVERGX3NkYi5jY2FSZXRyeVRpbWUgLSBjdXJyZW50VGltZSkgKiAxNjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNsZWVwVGltZSA9ICgxIDw8IFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIC0gMSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUaW1lICsgRlRERl9zZGIuY2NhUmV0cnlUaW1lKSAqIDE2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNsZWVwVGltZSA+IDI1NiAqIEZUREZfVU5JVF9CQUNLT0ZGX1BFUklPRCAqIDE2KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXZSBoYXZlIGV4Y2VlZGVkIHRoZSBDQ0EgcmV0cnkgdGltZS4gQWJvcnQgc2xlZXAgYW5kIHdhaXQgZm9yIFR4IElSUS4gKi8KKyAgICAgICAgICAgIHNsZWVwVGltZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZUREZfU0RCX1NUQVRFX1JFU1VNSU5HOgorICAgICAgICBzbGVlcFRpbWUgPSAwOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TREJfU1RBVEVfV0FJVElOR19XQUtFX1VQX0lSUToKKyAgICAgICAgc2xlZXBUaW1lID0gfigoRlRERl9VU2VjKSAwKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2xlZXBUaW1lOworfQorCisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKworI2VuZGlmIC8qICNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViAhPSBCTEFDS19PUkNBX0lDX1JFVl9BICovCisKKyNpZiBkZ19jb25maWdVU0VfRlRERl9ERFBIWSA9PSAxCit2b2lkIEZUREZfZGRwaHlTZXQodWludDE2X3QgY2NhUmVnKQoreworICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICAvKiBXZSB1c2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaGVyZSBhcyBwcm90ZWN0aW9uIGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlIGFuZCB0aGUgSFcgc2xlZXAKKyAgICAgKiBzdGF0ZS4gKi8KKyAgICBGVERGX2RkcGh5Q2NhUmVnID0gY2NhUmVnOworCisgICAgLyogQXBwbHkgaW1tZWRpYXRlbHkgaWYgYmxvY2sgaXMgdXAuICovCisgICAgaWYgKFJFR19HRVRGKENSR19UT1AsIFBNVV9DVFJMX1JFRywgRlRERl9TTEVFUCkgPT0gMHgwKQorICAgIHsKKyAgICAgICAgRlRERl9EUEhZLT5ERFBIWV9DQ0FfUkVHID0gRlRERl9kZHBoeUNjYVJlZzsKKyAgICB9CisKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworfQorCit2b2lkIEZUREZfZGRwaHlSZXN0b3JlKHZvaWQpCit7CisgICAgaWYgKEZUREZfZGRwaHlDY2FSZWcpCisgICAgeworICAgICAgICAvKiBBcHBseSBpbW1lZGlhdGVseSBpZiBibG9jayBpcyB1cC4gKi8KKyAgICAgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgICAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICAgICAgQVNTRVJUX1dBUk5JTkcoUkVHX0dFVEYoQ1JHX1RPUCwgUE1VX0NUUkxfUkVHLCBGVERGX1NMRUVQKSA9PSAweDApOworICAgICAgICBGVERGX0RQSFktPkREUEhZX0NDQV9SRUcgPSBGVERGX2RkcGh5Q2NhUmVnOworICAgICAgICBGVERGX2V4aXRDcml0aWNhbCgpOworICAgIH0KK30KKwordm9pZCBGVERGX2RkcGh5U2F2ZSh2b2lkKQoreworICAgIC8qIEFwcGx5IGltbWVkaWF0ZWx5IGlmIGJsb2NrIGlzIHVwLiAqLworICAgIEZUREZfY3JpdGljYWxWYXIoKTsKKyAgICBGVERGX2VudGVyQ3JpdGljYWwoKTsKKyAgICBBU1NFUlRfV0FSTklORyhSRUdfR0VURihDUkdfVE9QLCBQTVVfQ1RSTF9SRUcsIEZUREZfU0xFRVApID09IDB4MCk7CisgICAgRlRERl9kZHBoeUNjYVJlZyA9IEZUREZfRFBIWS0+RERQSFlfQ0NBX1JFRzsKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvZGF0YS5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzYzOGRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2RhdGEuYwpAQCAtMCwwICsxLDczNSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEBmaWxlIGRhdGEuYworICoKKyAqIEBicmllZiBGVERGIGRhdGEgc2VuZC9yZWNlaXZlIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsCisgKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxmdGRmLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJyZWdtYXAuaCIKKworI2lmbmRlZiBGVERGX0xJVEUKK3ZvaWQgRlRERl9wcm9jZXNzRGF0YVJlcXVlc3QoRlRERl9EYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QpCit7CisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkICYmCisgICAgICAgIEZUREZfdHNjaFNsb3RMaW5rLT5yZXF1ZXN0ICE9IGRhdGFSZXF1ZXN0KQorICAgIHsKKyAgICAgICAgRlRERl9TdGF0dXMgc3RhdHVzOworCisgICAgICAgIGlmIChkYXRhUmVxdWVzdC0+ZHN0QWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTICYmCisgICAgICAgICAgICAhZGF0YVJlcXVlc3QtPmluZGlyZWN0VFgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfc2NoZWR1bGVUc2NoKChGVERGX01zZ0J1ZmZlciAqKSBkYXRhUmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRlRERl9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IEZUREZfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgICAgIH0KKworICAgICAgICBGVERGX3NlbmREYXRhQ29uZmlybShkYXRhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisKKyAgICBpbnQgICAgICAgICAgICAgIHF1ZXVlOworICAgIEZUREZfQWRkcmVzc01vZGUgZHN0QWRkck1vZGUgPSBkYXRhUmVxdWVzdC0+ZHN0QWRkck1vZGU7CisgICAgRlRERl9QQU5JZCAgICAgICBkc3RQQU5JZCAgICA9IGRhdGFSZXF1ZXN0LT5kc3RQQU5JZDsKKyAgICBGVERGX0FkZHJlc3MgICAgIGRzdEFkZHIgICAgID0gZGF0YVJlcXVlc3QtPmRzdEFkZHI7CisKKyAgICAvLyBTZWFyY2ggZm9yIGFuIGV4aXN0aW5nIGluZGlyZWN0IHF1ZXVlCisgICAgZm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgcXVldWUrKykKKyAgICB7CisgICAgICAgIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0uYWRkck1vZGUgPT0gZHN0QWRkck1vZGUgJiYKKyAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0uYWRkci5zaG9ydEFkZHJlc3MgPT0gZHN0QWRkci5zaG9ydEFkZHJlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRlRERl90eFBlbmRpbmdMaXN0WyBxdWV1ZSBdLmFkZHJNb2RlID09IGRzdEFkZHJNb2RlICYmCisgICAgICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBxdWV1ZSBdLmFkZHIuZXh0QWRkcmVzcyA9PSBkc3RBZGRyLmV4dEFkZHJlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGF0YVJlcXVlc3QtPmluZGlyZWN0VFgpCisgICAgeworICAgICAgICBGVERGX1N0YXR1cyBzdGF0dXMgPSBGVERGX1NVQ0NFU1M7CisKKyAgICAgICAgaWYgKHF1ZXVlIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUXVldWUgcmVxdWVzdCBpbiBleGlzdGluZyBxdWV1ZQorICAgICAgICAgICAgc3RhdHVzID0gRlRERl9xdWV1ZVJlcUhlYWQoKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0LCAmRlRERl90eFBlbmRpbmdMaXN0WyBxdWV1ZSBdLnF1ZXVlKTsKKworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBGVERGX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9hZGRUeFBlbmRpbmdUaW1lcigoRlRERl9Nc2dCdWZmZXIgKikgZGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfcGliLnRyYW5zYWN0aW9uUGVyc2lzdGVuY2VUaW1lICogRlRERl9CQVNFX1NVUEVSRlJBTUVfRFVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3NlbmRUcmFuc2FjdGlvbkV4cGlyZWQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChkc3RBZGRyTW9kZSAhPSBGVERGX0VYVEVOREVEX0FERFJFU1MgJiYKKyAgICAgICAgICAgIGRzdEFkZHJNb2RlICE9IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gRlRERl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBRdWV1ZWluZyBvZiBpbmRpcmVjdCB0cmFuc2ZlciB3YXMgbm90IHN1Y2Nlc3NmdWwKKyAgICAgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKGRhdGFSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKyAgICAgICAgdWludDhfdCBlbnRyeSwgc2hvcnRBZGRySWR4OworCisgICAgICAgIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX1NIT1JUX0FERFJFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX2ZwcHJHZXRGcmVlU2hvcnRBZGRyZXNzKCZlbnRyeSwgJnNob3J0QWRkcklkeCkgPT0gRlRERl9GQUxTRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnb3RvIHRyYW5zYWN0aW9uX292ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRzdEFkZHJNb2RlID09IEZUREZfRVhURU5ERURfQUREUkVTUykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEZUREZfZnBwckdldEZyZWVFeHRBZGRyZXNzKCZlbnRyeSkgPT0gRlRERl9GQUxTRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnb3RvIHRyYW5zYWN0aW9uX292ZXJmbG93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gRlRERl9JTlZBTElEX1BBUkFNRVRFUjsKKyAgICAgICAgfQorCisjZW5kaWYKKworICAgICAgICAvLyBTZWFyY2ggZm9yIGFuIGVtcHR5IGluZGlyZWN0IHF1ZXVlCisgICAgICAgIGZvciAocXVldWUgPSAwOyBxdWV1ZSA8IEZUREZfTlJfT0ZfUkVRX0JVRkZFUlM7IHF1ZXVlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIHF1ZXVlIF0uYWRkck1vZGUgPT0gRlRERl9OT19BRERSRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5hZGRyTW9kZSA9IGRzdEFkZHJNb2RlOworICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5QQU5JZCAgICA9IGRzdFBBTklkOworICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5hZGRyICAgICA9IGRzdEFkZHI7CisKKyAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBGVERGX3F1ZXVlUmVxSGVhZCgoRlRERl9Nc2dCdWZmZXIgKikgZGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZUREZfdHhQZW5kaW5nTGlzdFsgcXVldWUgXS5xdWV1ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IEZUREZfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICB7CisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KKworICAgICAgICAgICAgICAgICAgICBpZiAoZHN0QWRkck1vZGUgPT0gRlRERl9TSE9SVF9BRERSRVNTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGVERGX2ZwcHJTZXRTaG9ydEFkZHJlc3MoZW50cnksIHNob3J0QWRkcklkeCwgZHN0QWRkci5zaG9ydEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9mcHByU2V0U2hvcnRBZGRyZXNzVmFsaWQoZW50cnksIHNob3J0QWRkcklkeCwgRlRERl9UUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkc3RBZGRyTW9kZSA9PSBGVERGX0VYVEVOREVEX0FERFJFU1MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3MoZW50cnksIGRzdEFkZHIuc2hvcnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclNldEV4dEFkZHJlc3NWYWxpZChlbnRyeSwgRlRERl9UUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9XQVJOSU5HKDApOworICAgICAgICAgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworICAgICAgICAgICAgICAgICAgICBGVERGX2FkZFR4UGVuZGluZ1RpbWVyKChGVERGX01zZ0J1ZmZlciAqKSBkYXRhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX3BpYi50cmFuc2FjdGlvblBlcnNpc3RlbmNlVGltZSAqIEZUREZfQkFTRV9TVVBFUkZSQU1FX0RVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfc2VuZFRyYW5zYWN0aW9uRXhwaXJlZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFuIGV4aXN0aW5nIG9yIGFuIGVtcHR5IHF1ZXVlCisjaWYgRlRERl9GUF9CSVRfTU9ERSA9PSBGVERGX0ZQX0JJVF9NT0RFX0FVVE8KK3RyYW5zYWN0aW9uX292ZXJmbG93OgorI2VuZGlmCisgICAgICAgIEZUREZfc2VuZERhdGFDb25maXJtKGRhdGFSZXF1ZXN0LCBGVERGX1RSQU5TQUNUSU9OX09WRVJGTE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKEZUREZfcmVxQ3VycmVudCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoRlRERl9xdWV1ZVJlcUhlYWQoKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0LCAmRlRERl9yZXFRdWV1ZSkgPT0gRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVykKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9zZW5kRGF0YUNvbmZpcm0oZGF0YVJlcXVlc3QsIEZUREZfVFJBTlNBQ1RJT05fT1ZFUkZMT1csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGVERGX0ZyYW1lSGVhZGVyICAgICpmcmFtZUhlYWRlciAgICA9ICZGVERGX2ZoOworICAgIEZUREZfU2VjdXJpdHlIZWFkZXIgKnNlY3VyaXR5SGVhZGVyID0gJkZUREZfc2g7CisKKyAgICBmcmFtZUhlYWRlci0+ZnJhbWVUeXBlID0gZGF0YVJlcXVlc3QtPnNlbmRNdWx0aVB1cnBvc2UgPyBGVERGX01VTFRJUFVSUE9TRV9GUkFNRSA6IEZUREZfREFUQV9GUkFNRTsKKworICAgIEZUREZfQm9vbGVhbiBmcmFtZVBlbmRpbmc7CisKKyAgICBpZiAocXVldWUgPCBGVERGX05SX09GX1JFUV9CVUZGRVJTKQorICAgIHsKKyAgICAgICAgZnJhbWVQZW5kaW5nID0gRlRERl9UUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmcmFtZVBlbmRpbmcgPSBGVERGX0ZBTFNFOworICAgIH0KKworICAgIGZyYW1lSGVhZGVyLT5vcHRpb25zID0KKyAgICAgICAgKGRhdGFSZXF1ZXN0LT5zZWN1cml0eUxldmVsID4gMCA/IEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQgOiAwKSB8CisgICAgICAgIChkYXRhUmVxdWVzdC0+YWNrVFggPyBGVERGX09QVF9BQ0tfUkVRVUVTVEVEIDogMCkgfAorICAgICAgICAoZnJhbWVQZW5kaW5nID8gRlRERl9PUFRfRlJBTUVfUEVORElORyA6IDApIHwKKyAgICAgICAgKChkYXRhUmVxdWVzdC0+ZnJhbWVDb250cm9sT3B0aW9ucyAmIEZUREZfUEFOX0lEX1BSRVNFTlQpID8gRlRERl9PUFRfUEFOX0lEX1BSRVNFTlQgOiAwKSB8CisgICAgICAgICgoZGF0YVJlcXVlc3QtPmZyYW1lQ29udHJvbE9wdGlvbnMgJiBGVERGX0lFU19JTkNMVURFRCkgPyBGVERGX09QVF9JRVNfUFJFU0VOVCA6IDApIHwKKyAgICAgICAgKChkYXRhUmVxdWVzdC0+ZnJhbWVDb250cm9sT3B0aW9ucyAmIEZUREZfU0VRX05SX1NVUFBSRVNTRUQpID8gRlRERl9PUFRfU0VRX05SX1NVUFBSRVNTRUQgOiAwKTsKKworICAgIGlmIChGVERGX3BpYi5sZUVuYWJsZWQgfHwgRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+b3B0aW9ucyB8PSBGVERGX09QVF9FTkhBTkNFRDsKKyAgICB9CisKKyAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgICAgICAgICA9IGRhdGFSZXF1ZXN0LT5zcmNBZGRyTW9kZTsKKyAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgICAgICAgICAgICA9IEZUREZfcGliLlBBTklkOworICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZSAgICAgICAgID0gZGF0YVJlcXVlc3QtPmRzdEFkZHJNb2RlOworICAgIGZyYW1lSGVhZGVyLT5kc3RQQU5JZCAgICAgICAgICAgID0gZGF0YVJlcXVlc3QtPmRzdFBBTklkOworICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyICAgICAgICAgICAgID0gZGF0YVJlcXVlc3QtPmRzdEFkZHI7CisKKyAgICBzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbCAgICA9IGRhdGFSZXF1ZXN0LT5zZWN1cml0eUxldmVsOworICAgIHNlY3VyaXR5SGVhZGVyLT5rZXlJZE1vZGUgICAgICAgID0gZGF0YVJlcXVlc3QtPmtleUlkTW9kZTsKKyAgICBzZWN1cml0eUhlYWRlci0+a2V5SW5kZXggICAgICAgICA9IGRhdGFSZXF1ZXN0LT5rZXlJbmRleDsKKyAgICBzZWN1cml0eUhlYWRlci0+a2V5U291cmNlICAgICAgICA9IGRhdGFSZXF1ZXN0LT5rZXlTb3VyY2U7CisgICAgc2VjdXJpdHlIZWFkZXItPmZyYW1lQ291bnRlciAgICAgPSBGVERGX3BpYi5mcmFtZUNvdW50ZXI7CisgICAgc2VjdXJpdHlIZWFkZXItPmZyYW1lQ291bnRlck1vZGUgPSBGVERGX3BpYi5mcmFtZUNvdW50ZXJNb2RlOworCisjaWZuZGVmIEZUREZfTk9fVFNDSAorCisgICAgaWYgKEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgZnJhbWVIZWFkZXItPlNOID0gRlRERl9wcm9jZXNzVHNjaFNOKChGVERGX01zZ0J1ZmZlciAqKWRhdGFSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9waWIuRFNOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFSZXF1ZXN0LT5yZXF1ZXN0U04pOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+U04gPSBGVERGX3BpYi5EU047CisgICAgfQorCisgICAgRlRERl9PY3RldCAqdHhQdHIgPSAoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX0JVRkZFUl9MRU5HVEggKiBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgIC8vIFNraXAgUEhZIGhlYWRlciAoPSBNQUMgbGVuZ3RoKQorICAgIHR4UHRyKys7CisKKyAgICBGVERGX0RhdGFMZW5ndGggbXNkdUxlbmd0aCA9IGRhdGFSZXF1ZXN0LT5tc2R1TGVuZ3RoOworCisgICAgdHhQdHIgICAgICAgICAgID0gRlRERl9hZGRGcmFtZUhlYWRlcih0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNkdUxlbmd0aCk7CisKKyAgICB0eFB0ciA9IEZUREZfYWRkU2VjdXJpdHlIZWFkZXIodHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyKTsKKworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCisKKyAgICBpZiAoZGF0YVJlcXVlc3QtPmZyYW1lQ29udHJvbE9wdGlvbnMgJiBGVERGX0lFU19JTkNMVURFRCkKKyAgICB7CisgICAgICAgIHR4UHRyID0gRlRERl9hZGRJZXModHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlcXVlc3QtPmhlYWRlcklFTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdC0+cGF5bG9hZElFTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdC0+bXNkdUxlbmd0aCk7CisgICAgfQorCisjZW5kaWYgLyogIUZUREZfTk9fQ1NMIHx8ICFGVERGX05PX1RTQ0ggKi8KKworICAgIEZUREZfU3RhdHVzIHN0YXR1cyA9IEZUREZfc2VuZEZyYW1lKEZUREZfcGliLmN1cnJlbnRDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZXF1ZXN0LT5tc2R1TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZXF1ZXN0LT5tc2R1KTsKKworICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9zZW5kRGF0YUNvbmZpcm0oZGF0YVJlcXVlc3QsIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgRlRERl9yZXFDdXJyZW50ID0gTlVMTDsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9uck9mUmV0cmllcyA9IDA7CisKKyAgICBpZiAoZnJhbWVIZWFkZXItPlNOID09IEZUREZfcGliLkRTTikKKyAgICB7CisgICAgICAgIEZUREZfcGliLkRTTisrOworICAgIH0KK30KKwordm9pZCBGVERGX3NlbmREYXRhQ29uZmlybShGVERGX0RhdGFSZXF1ZXN0ICAqZGF0YVJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU3RhdHVzICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVGltZSAgICAgICAgICB0aW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU04gICAgICAgICAgICBEU04sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTnVtT2ZCYWNrb2ZmcyBudW1PZkJhY2tvZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0lFTGlzdCAgICAgICAqYWNrUGF5bG9hZCkKK3sKKyAgICBGVERGX1JFTF9EQVRBX0JVRkZFUihkYXRhUmVxdWVzdC0+bXNkdSk7CisKKyAgICBGVERGX0RhdGFDb25maXJtICpkYXRhQ29uZmlybSA9IChGVERGX0RhdGFDb25maXJtICopIEZUREZfR0VUX01TR19CVUZGRVIoc2l6ZW9mKEZUREZfRGF0YUNvbmZpcm0pKTsKKworICAgIGRhdGFDb25maXJtLT5tc2dJZCAgICAgICAgID0gRlRERl9EQVRBX0NPTkZJUk07CisgICAgZGF0YUNvbmZpcm0tPm1zZHVIYW5kbGUgICAgPSBkYXRhUmVxdWVzdC0+bXNkdUhhbmRsZTsKKyAgICBkYXRhQ29uZmlybS0+c3RhdHVzICAgICAgICA9IHN0YXR1czsKKyAgICBkYXRhQ29uZmlybS0+dGltZXN0YW1wICAgICA9IHRpbWVzdGFtcDsKKyAgICBkYXRhQ29uZmlybS0+bnVtT2ZCYWNrb2ZmcyA9IG51bU9mQmFja29mZnM7CisgICAgZGF0YUNvbmZpcm0tPkRTTiAgICAgICAgICAgPSBEU047CisgICAgZGF0YUNvbmZpcm0tPmFja1BheWxvYWQgICAgPSBhY2tQYXlsb2FkOworCisgICAgaWYgKEZUREZfcmVxQ3VycmVudCA9PSAoRlRERl9Nc2dCdWZmZXIgKilkYXRhUmVxdWVzdCkKKyAgICB7CisgICAgICAgIEZUREZfcmVxQ3VycmVudCA9IE5VTEw7CisgICAgfQorCisgICAgRlRERl9SRUxfTVNHX0JVRkZFUigoRlRERl9Nc2dCdWZmZXIgKikgZGF0YVJlcXVlc3QpOworICAgIEZUREZfUkNWX01TRygoRlRERl9Nc2dCdWZmZXIgKikgZGF0YUNvbmZpcm0pOworI2lmIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPCisgICAgRlRERl9mcEZzbUNsZWFyUGVuZGluZygpOworI2VuZGlmIC8qIEZUREZfRlBfQklUX01PREUgPT0gRlRERl9GUF9CSVRfTU9ERV9BVVRPICovCisgICAgRlRERl9wcm9jZXNzTmV4dFJlcXVlc3QoKTsKK30KKwordm9pZCBGVERGX3NlbmREYXRhSW5kaWNhdGlvbihGVERGX0ZyYW1lSGVhZGVyICAgICpmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciAqc2VjdXJpdHlIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0ICAgICAgICAgKnBheWxvYWRJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRGF0YUxlbmd0aCAgICAgIG1zZHVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQgICAgICAgICAgKm1zZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgICAgIG1wZHVMaW5rUXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UaW1lICAgICAgICAgICAgdGltZXN0YW1wKQoreworICAgIEZUREZfRGF0YUluZGljYXRpb24gKmRhdGFJbmRpY2F0aW9uID0gKEZUREZfRGF0YUluZGljYXRpb24gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9EYXRhSW5kaWNhdGlvbikpOworICAgIEZUREZfT2N0ZXQgICAgICAgICAgKm1zZHVCdWYgICAgICAgID0gRlRERl9HRVRfREFUQV9CVUZGRVIobXNkdUxlbmd0aCk7CisgICAgRlRERl9PY3RldCAgICAgICAgICAqYnVmUHRyICAgICAgICAgPSBtc2R1QnVmOworCisgICAgaW50ICAgICAgICAgICAgICAgICAgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBtc2R1TGVuZ3RoOyBuKyspCisgICAgeworICAgICAgICAqbXNkdUJ1ZisrID0gKm1zZHUrKzsKKyAgICB9CisKKyAgICBkYXRhSW5kaWNhdGlvbi0+bXNnSWQgICAgICAgICAgID0gRlRERl9EQVRBX0lORElDQVRJT047CisgICAgZGF0YUluZGljYXRpb24tPnNyY0FkZHJNb2RlICAgICA9IGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZTsKKyAgICBkYXRhSW5kaWNhdGlvbi0+c3JjUEFOSWQgICAgICAgID0gZnJhbWVIZWFkZXItPnNyY1BBTklkOworICAgIGRhdGFJbmRpY2F0aW9uLT5zcmNBZGRyICAgICAgICAgPSBmcmFtZUhlYWRlci0+c3JjQWRkcjsKKyAgICBkYXRhSW5kaWNhdGlvbi0+ZHN0QWRkck1vZGUgICAgID0gZnJhbWVIZWFkZXItPmRzdEFkZHJNb2RlOworICAgIGRhdGFJbmRpY2F0aW9uLT5kc3RQQU5JZCAgICAgICAgPSBmcmFtZUhlYWRlci0+ZHN0UEFOSWQ7CisgICAgZGF0YUluZGljYXRpb24tPmRzdEFkZHIgICAgICAgICA9IGZyYW1lSGVhZGVyLT5kc3RBZGRyOworICAgIGRhdGFJbmRpY2F0aW9uLT5tc2R1TGVuZ3RoICAgICAgPSBtc2R1TGVuZ3RoOworICAgIGRhdGFJbmRpY2F0aW9uLT5tc2R1ICAgICAgICAgICAgPSBidWZQdHI7CisgICAgZGF0YUluZGljYXRpb24tPm1wZHVMaW5rUXVhbGl0eSA9IG1wZHVMaW5rUXVhbGl0eTsKKyAgICBkYXRhSW5kaWNhdGlvbi0+RFNOICAgICAgICAgICAgID0gZnJhbWVIZWFkZXItPlNOOworICAgIGRhdGFJbmRpY2F0aW9uLT50aW1lc3RhbXAgICAgICAgPSB0aW1lc3RhbXA7CisgICAgZGF0YUluZGljYXRpb24tPnNlY3VyaXR5TGV2ZWwgICA9IHNlY3VyaXR5SGVhZGVyLT5zZWN1cml0eUxldmVsOworICAgIGRhdGFJbmRpY2F0aW9uLT5rZXlJZE1vZGUgICAgICAgPSBzZWN1cml0eUhlYWRlci0+a2V5SWRNb2RlOworICAgIGRhdGFJbmRpY2F0aW9uLT5rZXlJbmRleCAgICAgICAgPSBzZWN1cml0eUhlYWRlci0+a2V5SW5kZXg7CisgICAgZGF0YUluZGljYXRpb24tPnBheWxvYWRJRUxpc3QgICA9IHBheWxvYWRJRUxpc3Q7CisKKyAgICBpZiAoZGF0YUluZGljYXRpb24tPmtleUlkTW9kZSA9PSAweDIpCisgICAgeworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgNDsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhSW5kaWNhdGlvbi0+a2V5U291cmNlWyBuIF0gPSBzZWN1cml0eUhlYWRlci0+a2V5U291cmNlWyBuIF07CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YUluZGljYXRpb24tPmtleUlkTW9kZSA9PSAweDMpCisgICAgeworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrKQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhSW5kaWNhdGlvbi0+a2V5U291cmNlWyBuIF0gPSBzZWN1cml0eUhlYWRlci0+a2V5U291cmNlWyBuIF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIGRhdGFJbmRpY2F0aW9uKTsKK30KKwordm9pZCBGVERGX3Byb2Nlc3NQb2xsUmVxdWVzdChGVERGX1BvbGxSZXF1ZXN0ICpwb2xsUmVxdWVzdCkKK3sKKyAgICBpZiAoRlRERl9yZXFDdXJyZW50ID09IE5VTEwpCisgICAgeworICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSAoRlRERl9Nc2dCdWZmZXIgKikgcG9sbFJlcXVlc3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChGVERGX3F1ZXVlUmVxSGVhZCgoRlRERl9Nc2dCdWZmZXIgKikgcG9sbFJlcXVlc3QsICZGVERGX3JlcVF1ZXVlKSA9PSBGVERGX1RSQU5TQUNUSU9OX09WRVJGTE9XKQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX3NlbmRQb2xsQ29uZmlybShwb2xsUmVxdWVzdCwgRlRERl9UUkFOU0FDVElPTl9PVkVSRkxPVyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9GcmFtZUhlYWRlciAgICAqZnJhbWVIZWFkZXIgICAgPSAmRlRERl9maDsKKyAgICBGVERGX1NlY3VyaXR5SGVhZGVyICpzZWN1cml0eUhlYWRlciA9ICZGVERGX3NoOworCisgICAgZnJhbWVIZWFkZXItPmZyYW1lVHlwZSA9IEZUREZfTUFDX0NPTU1BTkRfRlJBTUU7CisgICAgZnJhbWVIZWFkZXItPm9wdGlvbnMgICA9CisgICAgICAgIChwb2xsUmVxdWVzdC0+c2VjdXJpdHlMZXZlbCA+IDAgPyBGVERGX09QVF9TRUNVUklUWV9FTkFCTEVEIDogMCkgfCBGVERGX09QVF9BQ0tfUkVRVUVTVEVEOworCisgICAgaWYgKEZUREZfcGliLnNob3J0QWRkcmVzcyA8IDB4ZmZmZSkKKyAgICB7CisgICAgICAgIGZyYW1lSGVhZGVyLT5zcmNBZGRyTW9kZSAgICAgICAgICA9IEZUREZfU0hPUlRfQUREUkVTUzsKKyAgICAgICAgZnJhbWVIZWFkZXItPnNyY0FkZHIuc2hvcnRBZGRyZXNzID0gRlRERl9waWIuc2hvcnRBZGRyZXNzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkck1vZGUgICAgICAgID0gRlRERl9FWFRFTkRFRF9BRERSRVNTOworICAgICAgICBmcmFtZUhlYWRlci0+c3JjQWRkci5leHRBZGRyZXNzID0gRlRERl9waWIuZXh0QWRkcmVzczsKKyAgICB9CisKKyAgICBmcmFtZUhlYWRlci0+c3JjUEFOSWQgICAgICAgICAgICA9IEZUREZfcGliLlBBTklkOworICAgIGZyYW1lSGVhZGVyLT5kc3RBZGRyTW9kZSAgICAgICAgID0gcG9sbFJlcXVlc3QtPmNvb3JkQWRkck1vZGU7CisgICAgZnJhbWVIZWFkZXItPmRzdFBBTklkICAgICAgICAgICAgPSBwb2xsUmVxdWVzdC0+Y29vcmRQQU5JZDsKKyAgICBmcmFtZUhlYWRlci0+ZHN0QWRkciAgICAgICAgICAgICA9IHBvbGxSZXF1ZXN0LT5jb29yZEFkZHI7CisKKyAgICBzZWN1cml0eUhlYWRlci0+c2VjdXJpdHlMZXZlbCAgICA9IHBvbGxSZXF1ZXN0LT5zZWN1cml0eUxldmVsOworICAgIHNlY3VyaXR5SGVhZGVyLT5rZXlJZE1vZGUgICAgICAgID0gcG9sbFJlcXVlc3QtPmtleUlkTW9kZTsKKyAgICBzZWN1cml0eUhlYWRlci0+a2V5SW5kZXggICAgICAgICA9IHBvbGxSZXF1ZXN0LT5rZXlJbmRleDsKKyAgICBzZWN1cml0eUhlYWRlci0+a2V5U291cmNlICAgICAgICA9IHBvbGxSZXF1ZXN0LT5rZXlTb3VyY2U7CisgICAgc2VjdXJpdHlIZWFkZXItPmZyYW1lQ291bnRlciAgICAgPSBGVERGX3BpYi5mcmFtZUNvdW50ZXI7CisgICAgc2VjdXJpdHlIZWFkZXItPmZyYW1lQ291bnRlck1vZGUgPSBGVERGX3BpYi5mcmFtZUNvdW50ZXJNb2RlOworCisgICAgRlRERl9PY3RldCAqdHhQdHIgPSAoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX0JVRkZFUl9MRU5HVEggKiBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgIC8vIFNraXAgUEhZIGhlYWRlciAoPSBNQUMgbGVuZ3RoKQorICAgIHR4UHRyKys7CisKKyAgICBmcmFtZUhlYWRlci0+U04gPSBGVERGX3BpYi5EU047CisKKyAgICB0eFB0ciAgICAgICAgICAgPSBGVERGX2FkZEZyYW1lSGVhZGVyKHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKworICAgIHR4UHRyID0gRlRERl9hZGRTZWN1cml0eUhlYWRlcih0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXIpOworCisgICAgKnR4UHRyKysgPSBGVERGX0NPTU1BTkRfREFUQV9SRVFVRVNUOworCisgICAgRlRERl9TdGF0dXMgc3RhdHVzID0gRlRERl9zZW5kRnJhbWUoRlRERl9waWIuY3VycmVudENoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChzdGF0dXMgIT0gRlRERl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgRlRERl9zZW5kUG9sbENvbmZpcm0ocG9sbFJlcXVlc3QsIHN0YXR1cyk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZUREZfbnJPZlJldHJpZXMgPSAwOworICAgIEZUREZfcGliLkRTTisrOworfQorCit2b2lkIEZUREZfc2VuZFBvbGxDb25maXJtKEZUREZfUG9sbFJlcXVlc3QgKnBvbGxSZXF1ZXN0LCBGVERGX1N0YXR1cyBzdGF0dXMpCit7CisgICAgRlRERl9Qb2xsQ29uZmlybSAqcG9sbENvbmZpcm0gPSAoRlRERl9Qb2xsQ29uZmlybSAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX1BvbGxDb25maXJtKSk7CisKKyAgICBwb2xsQ29uZmlybS0+bXNnSWQgID0gRlRERl9QT0xMX0NPTkZJUk07CisgICAgcG9sbENvbmZpcm0tPnN0YXR1cyA9IHN0YXR1czsKKworICAgIGlmIChGVERGX3JlcUN1cnJlbnQgPT0gKEZUREZfTXNnQnVmZmVyICopcG9sbFJlcXVlc3QpCisgICAgeworICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSBOVUxMOworICAgIH0KKworICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIHBvbGxSZXF1ZXN0KTsKKyAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIHBvbGxDb25maXJtKTsKKworICAgIEZUREZfcHJvY2Vzc05leHRSZXF1ZXN0KCk7Cit9CisKK3ZvaWQgRlRERl9wcm9jZXNzUHVyZ2VSZXF1ZXN0KEZUREZfUHVyZ2VSZXF1ZXN0ICpwdXJnZVJlcXVlc3QpCit7CisgICAgRlRERl9IYW5kbGUgbXNkdUhhbmRsZSA9IHB1cmdlUmVxdWVzdC0+bXNkdUhhbmRsZTsKKyAgICBGVERGX1N0YXR1cyBzdGF0dXMgICAgID0gRlRERl9JTlZBTElEX0hBTkRMRTsKKworICAgIGludCAgICAgICAgIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgbisrKQorICAgIHsKKyAgICAgICAgRlRERl9Nc2dCdWZmZXIgKnJlcXVlc3QgPSBGVERGX2RlcXVldWVCeUhhbmRsZShtc2R1SGFuZGxlLCAmRlRERl90eFBlbmRpbmdMaXN0WyBuIF0ucXVldWUpOworCisgICAgICAgIGlmIChyZXF1ZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBGVERGX0RhdGFSZXF1ZXN0ICpkYXRhUmVxdWVzdCA9IChGVERGX0RhdGFSZXF1ZXN0ICopIHJlcXVlc3Q7CisKKyAgICAgICAgICAgIGlmIChkYXRhUmVxdWVzdC0+aW5kaXJlY3RUWCA9PSBGVERGX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9yZW1vdmVUeFBlbmRpbmdUaW1lcihyZXF1ZXN0KTsKKyNpZiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTworCisgICAgICAgICAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHJNb2RlID09IEZUREZfU0hPUlRfQUREUkVTUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZW50cnksIHNob3J0QWRkcklkeDsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuIGZvdW5kID0gRlRERl9mcHByTG9va3VwU2hvcnRBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBuIF0uYWRkci5zaG9ydEFkZHJlc3MsICZlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaG9ydEFkZHJJZHgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORyhmb3VuZCk7CisgICAgICAgICAgICAgICAgICAgIEZUREZfZnBwclNldFNob3J0QWRkcmVzc1ZhbGlkKGVudHJ5LCBzaG9ydEFkZHJJZHgsIEZUREZfRkFMU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSAgPT0gRlRERl9FWFRFTkRFRF9BRERSRVNTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuIGZvdW5kID0gRlRERl9mcHByTG9va3VwRXh0QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHIuZXh0QWRkcmVzcywgJmVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoZm91bmQpOworICAgICAgICAgICAgICAgICAgICBGVERGX2ZwcHJTZXRFeHRBZGRyZXNzVmFsaWQoZW50cnksIEZUREZfRkFMU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfV0FSTklORygwKTsKKyAgICAgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBGVERGX0ZQX0JJVF9NT0RFID09IEZUREZfRlBfQklUX01PREVfQVVUTyAqLworCisgICAgICAgICAgICAgICAgaWYgKEZUREZfaXNRdWV1ZUVtcHR5KCZGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5xdWV1ZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVERGX3R4UGVuZGluZ0xpc3RbIG4gXS5hZGRyTW9kZSA9IEZUREZfTk9fQUREUkVTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZUREZfUkVMX0RBVEFfQlVGRkVSKGRhdGFSZXF1ZXN0LT5tc2R1KTsKKyAgICAgICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIGRhdGFSZXF1ZXN0KTsKKworICAgICAgICAgICAgc3RhdHVzID0gRlRERl9TVUNDRVNTOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUREZfUHVyZ2VDb25maXJtICpwdXJnZUNvbmZpcm0gPSAoRlRERl9QdXJnZUNvbmZpcm0gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9QdXJnZUNvbmZpcm0pKTsKKworICAgIHB1cmdlQ29uZmlybS0+bXNnSWQgICAgICA9IEZUREZfUFVSR0VfQ09ORklSTTsKKyAgICBwdXJnZUNvbmZpcm0tPm1zZHVIYW5kbGUgPSBtc2R1SGFuZGxlOworICAgIHB1cmdlQ29uZmlybS0+c3RhdHVzICAgICA9IHN0YXR1czsKKworICAgIEZUREZfUkVMX01TR19CVUZGRVIoKEZUREZfTXNnQnVmZmVyICopIHB1cmdlUmVxdWVzdCk7CisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBwdXJnZUNvbmZpcm0pOworfQorI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworI2lmZGVmIEZUREZfUEhZX0FQSQorRlRERl9TdGF0dXMgRlRERl9zZW5kRnJhbWVTaW1wbGUoRlRERl9EYXRhTGVuZ3RoICAgIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BUSSAgICAgICAgICAgcHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuICAgICAgIGNzbWFTdXBwcmVzcykKK3sKKworICAgIEZUREZfT2N0ZXQgKmZwID0gZnJhbWU7CisKKyAgICBpZiAoZnJhbWVMZW5ndGggPiAxMjcgfHwKKyAgICAgICAgRlRERl90cmFuc3BhcmVudE1vZGUgIT0gRlRERl9UUlVFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZUREZfSU5WQUxJRF9QQVJBTUVURVI7CisgICAgfQorCisgICAgRlRERl9PY3RldCAqdHhQdHIgPSAoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX0JVRkZFUl9MRU5HVEggKiBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgIC8qIFRoaXMgZGF0YSBjb3B5IGNvdWxkL3Nob3VsZCBiZSBvcHRpbWl6ZWQgdXNpbmcgRE1BICovCisgICAgKnR4UHRyKysgPSBmcmFtZUxlbmd0aDsKKworICAgIGludCAgICAgICAgIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgZnJhbWVMZW5ndGg7IG4rKykKKyAgICB7CisgICAgICAgICp0eFB0cisrID0gKmZwKys7CisgICAgfQorCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworICAgIEZUREZfbnJPZlJldHJpZXMgPSAwOworICAgIEZUREZfZXhpdENyaXRpY2FsKCk7CisgICAgRlRERl9zZW5kVHJhbnNwYXJlbnRGcmFtZShmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzbWFTdXBwcmVzcyk7CisKKyAgICByZXR1cm4gRlRERl9TVUNDRVNTOworfQorCisKKworI2Vsc2UgLyogIUZUREZfUEhZX0FQSSAqLwordm9pZCBGVERGX3Byb2Nlc3NUcmFuc3BhcmVudFJlcXVlc3QoRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKnRyYW5zcGFyZW50UmVxdWVzdCkKK3sKKyAgICBGVERGX0RhdGFMZW5ndGggZnJhbWVMZW5ndGggPSB0cmFuc3BhcmVudFJlcXVlc3QtPmZyYW1lTGVuZ3RoOworCisgICAgaWYgKGZyYW1lTGVuZ3RoID4gMTI3IHx8CisgICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlICE9IEZUREZfVFJVRSkKKyAgICB7CisgICAgICAgIEZUREZfU0VORF9GUkFNRV9UUkFOU1BBUkVOVF9DT05GSVJNKHRyYW5zcGFyZW50UmVxdWVzdC0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0lOVkFMSURfUEFSQU1FVEVSKTsKKworICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSB0cmFuc3BhcmVudFJlcXVlc3QpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoRlRERl9yZXFDdXJyZW50ID09IE5VTEwpCisgICAgeworICAgICAgICBGVERGX3JlcUN1cnJlbnQgPSAoRlRERl9Nc2dCdWZmZXIgKikgdHJhbnNwYXJlbnRSZXF1ZXN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworI2lmbmRlZiBGVERGX0xJVEUKKworICAgICAgICBpZiAoRlRERl9xdWV1ZVJlcUhlYWQoKEZUREZfTXNnQnVmZmVyICopIHRyYW5zcGFyZW50UmVxdWVzdCwgJkZUREZfcmVxUXVldWUpID09IEZUREZfVFJBTlNBQ1RJT05fT1ZFUkZMT1cpCisgICAgICAgIHsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgICAgICAgICBGVERGX1NFTkRfRlJBTUVfVFJBTlNQQVJFTlRfQ09ORklSTSh0cmFuc3BhcmVudFJlcXVlc3QtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVFJBTlNQQVJFTlRfT1ZFUkZMT1cpOworCisgICAgICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKChGVERGX01zZ0J1ZmZlciAqKSB0cmFuc3BhcmVudFJlcXVlc3QpOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICAgICAgfQorCisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRlRERl9PY3RldCAqdHhQdHIgPSAoRlRERl9PY3RldCAqKSBGVERGX0dFVF9SRUdfQUREUihSRVRFTlRJT05fUkFNX1RYX0ZJRk8pICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChGVERGX0JVRkZFUl9MRU5HVEggKiBGVERGX1RYX0RBVEFfQlVGRkVSKTsKKworICAgICp0eFB0cisrID0gZnJhbWVMZW5ndGg7CisKKyAgICBGVERGX09jdGV0ICpmcmFtZSA9IHRyYW5zcGFyZW50UmVxdWVzdC0+ZnJhbWU7CisKKyAgICBpbnQgICAgICAgICBuOworCisgICAgZm9yIChuID0gMDsgbiA8IGZyYW1lTGVuZ3RoOyBuKyspCisgICAgeworICAgICAgICAqdHhQdHIrKyA9ICpmcmFtZSsrOworICAgIH0KKworICAgIEZUREZfc2VuZFRyYW5zcGFyZW50RnJhbWUoZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudFJlcXVlc3QtPmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5wdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudFJlcXVlc3QtPmNtc2FTdXBwcmVzcyk7CisgICAgRlRERl9uck9mUmV0cmllcyA9IDA7Cit9CisKKwordm9pZCBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50KEZUREZfRGF0YUxlbmd0aCAgICBmcmFtZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0ICAgICAgICAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QVEkgICAgICAgICAgIHB0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gICAgICAgY21zYVN1cHByZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICpoYW5kbGUpCit7CisgICAgRlRERl9UcmFuc3BhcmVudFJlcXVlc3QgKnRyYW5zcGFyZW50UmVxdWVzdCA9CisgICAgICAgIChGVERGX1RyYW5zcGFyZW50UmVxdWVzdCAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX1RyYW5zcGFyZW50UmVxdWVzdCkpOworCisgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5tc2dJZCAgICAgICAgPSBGVERGX1RSQU5TUEFSRU5UX1JFUVVFU1Q7CisgICAgdHJhbnNwYXJlbnRSZXF1ZXN0LT5mcmFtZUxlbmd0aCAgPSBmcmFtZUxlbmd0aDsKKyAgICB0cmFuc3BhcmVudFJlcXVlc3QtPmZyYW1lICAgICAgICA9IGZyYW1lOworICAgIHRyYW5zcGFyZW50UmVxdWVzdC0+Y2hhbm5lbCAgICAgID0gY2hhbm5lbDsKKyAgICB0cmFuc3BhcmVudFJlcXVlc3QtPnB0aSAgICAgICAgICA9IHB0aTsKKyAgICB0cmFuc3BhcmVudFJlcXVlc3QtPmNtc2FTdXBwcmVzcyA9IGNtc2FTdXBwcmVzczsKKyAgICB0cmFuc3BhcmVudFJlcXVlc3QtPmhhbmRsZSAgICAgICA9IGhhbmRsZTsKKworICAgIEZUREZfcHJvY2Vzc1RyYW5zcGFyZW50UmVxdWVzdCh0cmFuc3BhcmVudFJlcXVlc3QpOworfQorCisjZW5kaWYgLyogRlRERl9QSFlfQVBJICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvZnRkZkluZm8uaCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9mdGRmSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4ZDBjMTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvZnRkZkluZm8uaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIEZUREZJTkZPX0hfCisjZGVmaW5lIEZUREZJTkZPX0hfCisKKy8qCisgKiBUaGUgRlRERiByZWxlYXNlIG5hbWUgKHZlcnNpb24pIGlzIGxpc3RlZCBiZWxvdywgYW5kIG1hbnVhbGx5IG1haW50YWluZWQuCisgKiBUaGUgYnVpbGQgdGltZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KKyAqLworI2RlZmluZSBGVERGX0FSQ0hJVEVDVFVSRV9WRVJTSU9OIDEKKyNkZWZpbmUgRlRERl9CUkFOQ0hfVkVSU0lPTiAgICAgICAwCisjZGVmaW5lIEZUREZfTE9BRF9WRVJTSU9OICAgICAgICAgMzIKKworY29uc3QgY2hhciogRlRERl9nZXRVbWFjUmVsTmFtZSggdm9pZCApOworY29uc3QgY2hhciogRlRERl9nZXRVbWFjQnVpbGRUaW1lKCB2b2lkICk7CisKKyNlbmRpZiAvKiBGVERGSU5GT19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2ludGVybmFsLmggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWU1ZDUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL2ludGVybmFsLmgKQEAgLTAsMCArMSw3NDQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBAZmlsZSBpbnRlcm5hbC5oCisgKgorICogQGJyaWVmIEludGVybmFsIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LCBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCAgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCAKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCAKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lIEZUREZfVEJEICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBGVERGX0ZDU19MRU5HVEggICAgICAgICAgICAyCisjZGVmaW5lIEZUREZfQlVGRkVSX0xFTkdUSCAgICAgICAgIDEyOAorI2lmbmRlZiBGVERGX05SX09GX1JFUV9CVUZGRVJTCisjZGVmaW5lIEZUREZfTlJfT0ZfUkVRX0JVRkZFUlMgICAgIDk2CisjZW5kaWYKKyNkZWZpbmUgRlRERl9OUl9PRl9SWF9CVUZGRVJTICAgICAgOAorI2RlZmluZSBGVERGX05SX09GX0NIQU5ORUxTICAgICAgICAxNgorI2RlZmluZSBGVERGX05SX09GX1NDQU5fUkVTVUxUUyAgICAxNgorI2RlZmluZSBGVERGX05SX09GX0NTTF9QRUVSUyAgICAgICAxNgorI2RlZmluZSBGVERGX01BWF9IRUFERVJfSUVTICAgICAgICA4CisjZGVmaW5lIEZUREZfTUFYX1BBWUxPQURfSUVTICAgICAgIDQKKyNkZWZpbmUgRlRERl9NQVhfU1VCX0lFUyAgICAgICAgICAgOAorI2RlZmluZSBGVERGX01BWF9JRV9DT05URU5UICAgICAgICAxMjgKKyNkZWZpbmUgRlRERl9OUl9PRl9SWF9BRERSUyAgICAgICAgMTYKKyNkZWZpbmUgRlRERl9OUl9PRl9ORUlHSEJPUlMgICAgICAgMTYKKworI2RlZmluZSBGVERGX1RYX0RBVEFfQlVGRkVSICAgICAgICAwCisjZGVmaW5lIEZUREZfVFhfV0FLRVVQX0JVRkZFUiAgICAgIDEKKyNkZWZpbmUgRlRERl9UWF9BQ0tfQlVGRkVSICAgICAgICAgMgorCisjZGVmaW5lIEZUREZfT1BUX1NFQ1VSSVRZX0VOQUJMRUQgIDB4MDEKKyNkZWZpbmUgRlRERl9PUFRfRlJBTUVfUEVORElORyAgICAgMHgwMgorI2RlZmluZSBGVERGX09QVF9TRVFfTlJfU1VQUFJFU1NFRCAweDA0CisjZGVmaW5lIEZUREZfT1BUX0FDS19SRVFVRVNURUQgICAgIDB4MDgKKyNkZWZpbmUgRlRERl9PUFRfSUVTX1BSRVNFTlQgICAgICAgMHgxMAorI2RlZmluZSBGVERGX09QVF9QQU5fSURfUFJFU0VOVCAgICAweDIwCisjZGVmaW5lIEZUREZfT1BUX0VOSEFOQ0VEICAgICAgICAgIDB4NDAKKworI2RlZmluZSBGVERGX01TS19SWF9DRSAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZUREZfTVNLX1NZTUJPTF9UTVJfQ0UgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRlRERl9NU0tfVFhfQ0UgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBUaGUgbWF4aW11bSB0aW1lIGluIHN5bWJvbHMgdGhhdCBpcyB0YWtlcyB0byBwcm9jZXNzIHJlcXVlc3QuIEFmdGVyIHN1Y2Nlc2Z1bAorLy8gcHJvY2Vzc2luZyBhIHJlcXVlc3QgdGhlIFRYIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgcmVhZHkgdG8gYmUgc2VudC4KKyNkZWZpbmUgRlRERl9UU0NIX01BWF9QUk9DRVNTX1JFUVVFU1RfVElNRSAzNQorCisvLyBUaGUgbWF4aW11bSB0aW1lIGluIHN5bWJvbHMgbmVlZGVkIHRvIHNlYXJjaCBmb3IgdGhlIG5leHQgc2xvdCBmb3Igd2hpY2ggYQorLy8gVFggb3IgUlggbmVlZHMgdG8gYmUgZG9uZQorI2RlZmluZSBGVERGX1RTQ0hfTUFYX1NDSEVEVUxFX1RJTUUgMzAKKworI2RlZmluZSBGVERGX0dFVF9GSUVMRF9BRERSKCBmaWVsZE5hbWUgKSAgICAgICAgICAgICAgICAoICh2b2xhdGlsZSB1aW50MzJfdCopICggSU5EX0ZfRlRERl8gIyMgZmllbGROYW1lICkgKQorI2RlZmluZSBGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoIGZpZWxkTmFtZSwgaW5kZXggKSAoICh2b2xhdGlsZSB1aW50MzJfdCopICggSU5EX0ZfRlRERl8gIyMgZmllbGROYW1lICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludHB0cl90KSBpbmRleCAqIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfICMjIGZpZWxkTmFtZSAjIyBfSU5UVkwgKSApCisjZGVmaW5lIEZUREZfR0VUX1JFR19BRERSKCByZWdOYW1lICkgICAgICAgICAgICAgICAgICAgICggKHZvbGF0aWxlIHVpbnQzMl90KikgKCBJTkRfUl9GVERGXyAjIyByZWdOYW1lICkgKQorI2RlZmluZSBGVERGX0dFVF9SRUdfQUREUl9JTkRFWEVEKCByZWdOYW1lLCBpbmRleCApICAgICAoICh2b2xhdGlsZSB1aW50MzJfdCopICggSU5EX1JfRlRERl8gIyMgcmVnTmFtZSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRwdHJfdCkgaW5kZXggKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGXyAjIyByZWdOYW1lICMjIF9JTlRWTCApICkKKyNkZWZpbmUgRlRERl9HRVRfRklFTEQoIGZpZWxkTmFtZSApICAgICAgICAgICAgICAgICAgICAgKCAoICggKih2b2xhdGlsZSB1aW50MzJfdCopICggSU5EX0ZfRlRERl8gIyMgZmllbGROYW1lICkgKSAmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1TS19GX0ZUREZfICMjIGZpZWxkTmFtZSApID4+IE9GRl9GX0ZUREZfICMjIGZpZWxkTmFtZSApCisjZGVmaW5lIEZUREZfR0VUX0ZJRUxEX0lOREVYRUQoIGZpZWxkTmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCApICAgICAgICAgICAgICAgICAoICggKCAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKCBmaWVsZE5hbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKSApIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgTVNLX0ZfRlRERl8gIyMgZmllbGROYW1lICkgPj4gT0ZGX0ZfRlRERl8gIyMgZmllbGROYW1lICkKKworI2RlZmluZSBGVERGX1NFVF9GSUVMRCggZmllbGROYW1lLCB2YWx1ZSApICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgXAorICAgICAgICB1aW50MzJfdCB0bXAgPSAgKkZUREZfR0VUX0ZJRUxEX0FERFIoIGZpZWxkTmFtZSApICYgfk1TS19GX0ZUREZfICMjIGZpZWxkTmFtZTsgXAorICAgICAgICAqRlRERl9HRVRfRklFTERfQUREUiggZmllbGROYW1lICkgPSB0bXAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCAoIHZhbHVlICkgPDwgT0ZGX0ZfRlRERl8gIyMgZmllbGROYW1lICkgJiBNU0tfRl9GVERGXyAjIyBmaWVsZE5hbWUgKTsgXAorfSBcCisgICAgd2hpbGUgKCAwICkKKworCisjZGVmaW5lIEZUREZfU0VUX0ZJRUxEX0lOREVYRUQoIGZpZWxkTmFtZSwgdmFsdWUsIGluZGV4ICkgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIHVpbnQzMl90IHRtcCA9ICAqRlRERl9HRVRfRklFTERfQUREUl9JTkRFWEVEKCBmaWVsZE5hbWUsIGluZGV4ICkgJiB+TVNLX0ZfRlRERl8gIyMgZmllbGROYW1lOyBcCisgICAgICAgICpGVERGX0dFVF9GSUVMRF9BRERSX0lOREVYRUQoIGZpZWxkTmFtZSwgaW5kZXggKSA9IHRtcCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoICggdmFsdWUgKSA8PCBPRkZfRl9GVERGXyAjIyBmaWVsZE5hbWUgKSAmIE1TS19GX0ZUREZfICMjIGZpZWxkTmFtZSApOyBcCit9IFwKKyAgICB3aGlsZSAoIDAgKQorCisjZGVmaW5lIEZUREZfcHJvY2Vzc1JlcXVlc3QgRlRERl9zbmRNc2cKKworc3RydWN0IEZUREZfUGliCit7CisgICAgRlRERl9FeHRBZGRyZXNzICAgICAgICAgZXh0QWRkcmVzczsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBhY2tXYWl0RHVyYXRpb247CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIGFzc29jaWF0ZWRQQU5Db29yZDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBhc3NvY2lhdGlvblBlcm1pdDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBhdXRvUmVxdWVzdDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBiYXR0TGlmZUV4dDsKKyAgICBGVERGX051bU9mQmFja29mZnMgICAgICBiYXR0TGlmZUV4dFBlcmlvZHM7CisgICAgRlRERl9PY3RldCAgICAgICAgICAgICAgYmVhY29uUGF5bG9hZFsgRlRERl9NQVhfQkVBQ09OX1BBWUxPQURfTEVOR1RIIF07CisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgYmVhY29uUGF5bG9hZExlbmd0aDsKKyAgICBGVERGX09yZGVyICAgICAgICAgICAgICBiZWFjb25PcmRlcjsKKyAgICBGVERGX1RpbWUgICAgICAgICAgICAgICBiZWFjb25UeFRpbWU7CisgICAgRlRERl9TTiAgICAgICAgICAgICAgICAgQlNOOworICAgIEZUREZfRXh0QWRkcmVzcyAgICAgICAgIGNvb3JkRXh0QWRkcmVzczsKKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgICAgICBjb29yZFNob3J0QWRkcmVzczsKKyAgICBGVERGX1NOICAgICAgICAgICAgICAgICBEU047CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgR1RTUGVybWl0OworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX0JFRXhwb25lbnQgICAgICAgICBtYXhCRTsKKyAgICBGVERGX1NpemUgICAgICAgICAgICAgICBtYXhDU01BQmFja29mZnM7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgbWF4RnJhbWVUb3RhbFdhaXRUaW1lOworICAgIEZUREZfU2l6ZSAgICAgICAgICAgICAgIG1heEZyYW1lUmV0cmllczsKKyAgICBGVERGX0JFRXhwb25lbnQgICAgICAgICBtaW5CRTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgTElGU1BlcmlvZDsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBTSUZTUGVyaW9kOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX1BBTklkICAgICAgICAgICAgICBQQU5JZDsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgcHJvbWlzY3VvdXNNb2RlOyAvKiBOb3Qgc3VwcG9ydGVkLiBVc2UgdHJhbnNwYXJlbnQgbW9kZSBpbnN0ZWFkICovCisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgcmVzcG9uc2VXYWl0VGltZTsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgcnhPbldoZW5JZGxlOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBzZWN1cml0eUVuYWJsZWQ7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworICAgIEZUREZfU2hvcnRBZGRyZXNzICAgICAgIHNob3J0QWRkcmVzczsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9TaXplICAgICAgICAgICAgICAgc3VwZXJmcmFtZU9yZGVyOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIHN5bmNTeW1ib2xPZmZzZXQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgdGltZXN0YW1wU3VwcG9ydGVkOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIHRyYW5zYWN0aW9uUGVyc2lzdGVuY2VUaW1lOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIGVuaEFja1dhaXREdXJhdGlvbjsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBpbXBsaWNpdEJyb2FkY2FzdDsKKyAgICBGVERGX1NpbXBsZUFkZHJlc3MgICAgICBzaW1wbGVBZGRyZXNzOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIGRpc2Nvbm5lY3RUaW1lOworICAgIEZUREZfUHJpb3JpdHkgICAgICAgICAgIGpvaW5Qcmlvcml0eTsKKyAgICBGVERGX0FTTiAgICAgICAgICAgICAgICBBU047CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgbm9ITEJ1ZmZlcnM7CisgICAgRlRERl9TbG90ZnJhbWVUYWJsZSAgICAgc2xvdGZyYW1lVGFibGU7CisgICAgRlRERl9MaW5rVGFibGUgICAgICAgICAgbGlua1RhYmxlOworICAgIEZUREZfVGltZXNsb3RUZW1wbGF0ZSAgIHRpbWVzbG90VGVtcGxhdGU7CisgICAgRlRERl9Ib3BwaW5nU2VxdWVuY2VJZCAgSG9wcGluZ1NlcXVlbmNlSWQ7CisgICAgRlRERl9DaGFubmVsUGFnZSAgICAgICAgY2hhbm5lbFBhZ2U7CisgICAgRlRERl9DaGFubmVsTnVtYmVyICAgICAgbnVtYmVyT2ZDaGFubmVsczsKKyAgICBGVERGX0JpdG1hcDMyICAgICAgICAgICBwaHlDb25maWd1cmF0aW9uOworICAgIEZUREZfQml0bWFwOCAgICAgICAgICAgIGV4dGVuZGVkQml0bWFwOworICAgIEZUREZfTGVuZ3RoICAgICAgICAgICAgIGhvcHBpbmdTZXF1ZW5jZUxlbmd0aDsKKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgICAgICBob3BwaW5nU2VxdWVuY2VMaXN0WyBGVERGX01BWF9IT1BQSU5HX1NFUVVFTkNFX0xFTkdUSCBdOworICAgIEZUREZfTGVuZ3RoICAgICAgICAgICAgIGN1cnJlbnRIb3A7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgZHdlbGxUaW1lOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIENTTFBlcmlvZDsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBDU0xNYXhQZXJpb2Q7CisgICAgRlRERl9CaXRtYXAzMiAgICAgICAgICAgQ1NMQ2hhbm5lbE1hc2s7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgQ1NMRnJhbWVQZW5kaW5nV2FpdFQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgbG93RW5lcmd5U3VwZXJmcmFtZVN1cHBvcnRlZDsKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBsb3dFbmVyZ3lTdXBlcmZyYW1lU3luY0ludGVydmFsOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX1BlcmZvcm1hbmNlTWV0cmljcyBwZXJmb3JtYW5jZU1ldHJpY3M7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHVzZUVuaGFuY2VkQmVjYW9uOworICAgIEZUREZfSUVMaXN0ICAgICAgICAgICAgIEVCSUVMaXN0OworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIEVCRmlsdGVyaW5nRW5hYmxlZDsKKyAgICBGVERGX1NOICAgICAgICAgICAgICAgICBFQlNOOworICAgIEZUREZfQXV0b1NBICAgICAgICAgICAgIEVCQXV0b1NBOworICAgIEZUREZfSUVMaXN0ICAgICAgICAgICAgIEVBY2tJRUxpc3Q7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgdHNjaEVuYWJsZWQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgbGVFbmFibGVkOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX0NoYW5uZWxOdW1iZXIgICAgICBjdXJyZW50Q2hhbm5lbDsKKyAgICBGVERGX1RYUG93ZXJUb2xlcmFuY2UgICBUWFBvd2VyVG9sZXJhbmNlOworICAgIEZUREZfREJtICAgICAgICAgICAgICAgIFRYUG93ZXI7CisgICAgRlRERl9DQ0FNb2RlICAgICAgICAgICAgQ0NBTW9kZTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9DaGFubmVsUGFnZSAgICAgICAgY3VycmVudFBhZ2U7CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgbWF4RnJhbWVEdXJhdGlvbjsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBTSFJEdXJhdGlvbjsKKyAgICBGVERGX0tleVRhYmxlICAgICAgICAgICBrZXlUYWJsZTsKKyAgICBGVERGX0RldmljZVRhYmxlICAgICAgICBkZXZpY2VUYWJsZTsKKyAgICBGVERGX1NlY3VyaXR5TGV2ZWxUYWJsZSBzZWN1cml0eUxldmVsVGFibGU7CisgICAgRlRERl9GcmFtZUNvdW50ZXIgICAgICAgZnJhbWVDb3VudGVyOworICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgICAgIG10RGF0YVNlY3VyaXR5TGV2ZWw7CisgICAgRlRERl9LZXlJZE1vZGUgICAgICAgICAgbXREYXRhS2V5SWRNb2RlOworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgIG10RGF0YUtleVNvdXJjZVsgOCBdOworICAgIEZUREZfS2V5SW5kZXggICAgICAgICAgIG10RGF0YUtleUluZGV4OworICAgIEZUREZfT2N0ZXQgICAgICAgICAgICAgIGRlZmF1bHRLZXlTb3VyY2VbIDggXTsKKyAgICBGVERGX0V4dEFkZHJlc3MgICAgICAgICBQQU5Db29yZEV4dEFkZHJlc3M7CisgICAgRlRERl9TaG9ydEFkZHJlc3MgICAgICAgUEFOQ29vcmRTaG9ydEFkZHJlc3M7CisgICAgRlRERl9GcmFtZUNvdW50ZXJNb2RlICAgZnJhbWVDb3VudGVyTW9kZTsKKyAgICBGVERGX1BlcmlvZCAgICAgICAgICAgICBDU0xTeW5jVHhNYXJnaW47CisgICAgRlRERl9QZXJpb2QgICAgICAgICAgICAgQ1NMTWF4QWdlUmVtb3RlSW5mbzsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9UcmFmZmljQ291bnRlcnMgICAgdHJhZmZpY0NvdW50ZXJzOworI2lmbmRlZiBGVERGX0xJVEUKKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBMRUNhcGFibGU7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgTExDYXBhYmxlOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIERTTUVDYXBhYmxlOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIFJGSURDYXBhYmxlOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIEFNQ0FDYXBhYmxlOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICBGVERGX0Jvb2xlYW4gICAgICAgICAgICBtZXRyaWNzQ2FwYWJsZTsKKyNpZm5kZWYgRlRERl9MSVRFCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgcmFuZ2luZ1N1cHBvcnRlZDsKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAga2VlcFBoeUVuYWJsZWQ7CisgICAgRlRERl9Cb29sZWFuICAgICAgICAgICAgbWV0cmljc0VuYWJsZWQ7CisjaWZuZGVmIEZUREZfTElURQorICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIGJlYWNvbkF1dG9SZXNwb25kOworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgIHRzY2hDYXBhYmxlOworICAgIEZUREZfUGVyaW9kICAgICAgICAgICAgIHRzU3luY0NvcnJlY3RUaHJlc2hvbGQ7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyAgICBGVERGX05yQmFja29mZlBlcmlvZHMgICBib0lycVRocmVzaG9sZDsKKyAgICBGVERGX1B0aUNvbmZpZyAgICAgICAgICBwdGlDb25maWc7CisjZW5kaWYKK307CisKK3R5cGVkZWYgdWludDhfdCBGVERGX0ZyYW1lVmVyc2lvbjsKKyNkZWZpbmUgRlRERl9GUkFNRV9WRVJTSU9OXzIwMDMgICAgICAgICAgMAorI2RlZmluZSBGVERGX0ZSQU1FX1ZFUlNJT05fMjAxMSAgICAgICAgICAxCisjZGVmaW5lIEZUREZfRlJBTUVfVkVSU0lPTl9FICAgICAgICAgICAgIDIKKyNkZWZpbmUgRlRERl9GUkFNRV9WRVJTSU9OX05PVF9TVVBQT1JURUQgMworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfRnJhbWVUeXBlICAgICAgZnJhbWVUeXBlOworICAgIEZUREZfRnJhbWVWZXJzaW9uICAgZnJhbWVWZXJzaW9uOworICAgIEZUREZfQml0bWFwOCAgICAgICAgb3B0aW9uczsKKyAgICBGVERGX1NOICAgICAgICAgICAgIFNOOworICAgIEZUREZfQWRkcmVzc01vZGUgICAgc3JjQWRkck1vZGU7CisgICAgRlRERl9QQU5JZCAgICAgICAgICBzcmNQQU5JZDsKKyAgICBGVERGX0FkZHJlc3MgICAgICAgIHNyY0FkZHI7CisgICAgRlRERl9BZGRyZXNzTW9kZSAgICBkc3RBZGRyTW9kZTsKKyAgICBGVERGX1BBTklkICAgICAgICAgIGRzdFBBTklkOworICAgIEZUREZfQWRkcmVzcyAgICAgICAgZHN0QWRkcjsKKyAgICBGVERGX0NvbW1hbmRGcmFtZUlkIGNvbW1hbmRGcmFtZUlkOworfSBGVERGX0ZyYW1lSGVhZGVyOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgICBzZWN1cml0eUxldmVsOworICAgIEZUREZfS2V5SWRNb2RlICAgICAgICBrZXlJZE1vZGU7CisgICAgRlRERl9LZXlJbmRleCAgICAgICAgIGtleUluZGV4OworICAgIEZUREZfRnJhbWVDb3VudGVyTW9kZSBmcmFtZUNvdW50ZXJNb2RlOworICAgIEZUREZfT2N0ZXQqICAgICAgICAgICBrZXlTb3VyY2U7CisgICAgRlRERl9GcmFtZUNvdW50ZXIgICAgIGZyYW1lQ291bnRlcjsKK30gRlRERl9TZWN1cml0eUhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0Jvb2xlYW4gZmFzdEE7CisgICAgRlRERl9Cb29sZWFuIGRhdGFSOworfSBGVERGX0Fzc29jQWRtaW47CisKK3R5cGVkZWYgdWludDhfdCBGVERGX1NOU2VsOworI2RlZmluZSBGVERGX1NOX1NFTF9EU04gIDAKKyNkZWZpbmUgRlRERl9TTl9TRUxfQlNOICAxCisjZGVmaW5lIEZUREZfU05fU0VMX0VCU04gMgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfQWRkcmVzc01vZGUgYWRkck1vZGU7CisgICAgRlRERl9BZGRyZXNzICAgICBhZGRyOworICAgIEZUREZfVGltZSAgICAgICAgdGltZXN0YW1wOworICAgIEZUREZfQm9vbGVhbiAgICAgZHNuVmFsaWQ7CisgICAgRlRERl9TTiAgICAgICAgICBkc247CisgICAgRlRERl9Cb29sZWFuICAgICBic25WYWxpZDsKKyAgICBGVERGX1NOICAgICAgICAgIGJzbjsKKyAgICBGVERGX0Jvb2xlYW4gICAgIGVic25WYWxpZDsKKyAgICBGVERGX1NOICAgICAgICAgIGVic247Cit9IEZUREZfUnhBZGRyZXNzQWRtaW47CisKK3N0cnVjdCBGVERGX0J1ZmZlcl87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgc3RydWN0IEZUREZfQnVmZmVyXyogbmV4dDsKKyAgICBzdHJ1Y3QgRlRERl9CdWZmZXJfKiBwcmV2OworfSBGVERGX0J1ZmZlckhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgRlRERl9CdWZmZXJfCit7CisgICAgRlRERl9CdWZmZXJIZWFkZXIgaGVhZGVyOworICAgIEZUREZfTXNnQnVmZmVyKiAgIHJlcXVlc3Q7Cit9IEZUREZfQnVmZmVyOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfQnVmZmVySGVhZGVyIGhlYWQ7CisgICAgRlRERl9CdWZmZXJIZWFkZXIgdGFpbDsKK30gRlRERl9RdWV1ZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0FkZHJlc3MgICAgIGFkZHI7CisgICAgRlRERl9BZGRyZXNzTW9kZSBhZGRyTW9kZTsKKyAgICBGVERGX1BBTklkICAgICAgIFBBTklkOworICAgIEZUREZfUXVldWUgICAgICAgcXVldWU7Cit9IEZUREZfUGVuZGluZzsKKwordHlwZWRlZiBzdHJ1Y3QgX0ZUREZfUGVuZGluZ1RMXworeworICAgIHN0cnVjdCBfRlRERl9QZW5kaW5nVExfKiBuZXh0OworICAgIEZUREZfQm9vbGVhbiAgICAgICAgICAgICBmcmVlOworICAgIEZUREZfTXNnQnVmZmVyKiAgICAgICAgICByZXF1ZXN0OworICAgIEZUREZfVGltZSAgICAgICAgICAgICAgICBkZWx0YTsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgcGVuZExpc3ROcjsKKyAgICB2b2lkICggKiBmdW5jICkoIHN0cnVjdCBfRlRERl9QZW5kaW5nVExfKiApOworfSBGVERGX1BlbmRpbmdUTDsKKwordHlwZWRlZiB1aW50OF90IEZUREZfUmVtb3RlSWQ7CisjZGVmaW5lIEZUREZfUkVNT1RFX0RBVEFfUkVRVUVTVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGVERGX1JFTU9URV9QQU5fSURfQ09ORkxJQ1RfTk9USUZJQ0FUSU9OIDEKKyNkZWZpbmUgRlRERl9SRU1PVEVfQkVBQ09OICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZUREZfUkVNT1RFX0tFRVBfQUxJVkUgICAgICAgICAgICAgICAgICAgMworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfTXNnSWQgICAgICAgIG1zZ0lkOworICAgIEZUREZfUmVtb3RlSWQgICAgIHJlbW90ZUlkOworICAgIEZUREZfU2hvcnRBZGRyZXNzIGRzdEFkZHI7Cit9IEZUREZfUmVtb3RlUmVxdWVzdDsKKworI2lmbmRlZiBGVERGX05PX0NTTAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX1Nob3J0QWRkcmVzcyBhZGRyOworICAgIEZUREZfVGltZSAgICAgICAgIHRpbWU7CisgICAgRlRERl9QZXJpb2QgICAgICAgcGVyaW9kOworfSBGVERGX1BlZXJDc2xUaW1pbmc7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKwordHlwZWRlZiB1aW50OF90IEZUREZfU3RhdGU7CisjZGVmaW5lIEZUREZfU1RBVEVfVU5JTklUSUFMSVpFRCAwCisjZGVmaW5lIEZUREZfU1RBVEVfSURMRSAgICAgICAgICAxCisjZGVmaW5lIEZUREZfU1RBVEVfREFUQV9SRVFVRVNUICAyCisjZGVmaW5lIEZUREZfU1RBVEVfUE9MTF9SRVFVRVNUICAzCisjZGVmaW5lIEZUREZfU1RBVEVfU0NBTk5JTkcgICAgICA0CisKKyNpZm5kZWYgRlRERl9OT19UU0NICit0eXBlZGVmIHN0cnVjdAoreworICAgIEZUREZfU2hvcnRBZGRyZXNzIG5vZGVBZGRyOworICAgIEZUREZfU2l6ZSAgICAgICAgIG5yT2ZSZXRyaWVzOworICAgIEZUREZfU2l6ZSAgICAgICAgIG5yT2ZDY2FSZXRyaWVzOworICAgIEZUREZfQkVFeHBvbmVudCAgIEJFOworfSBGVERGX1RzY2hSZXRyeTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX1Nob3J0QWRkcmVzcyAgICBkc3RBZGRyOworICAgIEZUREZfS2VlcEFsaXZlUGVyaW9kIHBlcmlvZDsKKyAgICBGVERGX1JlbW90ZVJlcXVlc3QgICBtc2c7Cit9IEZUREZfTmVpZ2hib3JFbnRyeTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGVERGX0NvdW50IGZjc0Vycm9yQ250OworICAgIEZUREZfQ291bnQgdHhTdGRBY2tDbnQ7CisgICAgRlRERl9Db3VudCByeFN0ZEFja0NudDsKK30gRlRERl9MbWFjQ291bnRlcnM7CisKK2V4dGVybiBzdHJ1Y3QgRlRERl9QaWIgICAgIEZUREZfcGliOworZXh0ZXJuIEZUREZfU3RhdGUqICAgICAgICAgRlRERl9zdGF0ZTsKK2V4dGVybiBGVERGX0Jvb2xlYW4gICAgICAgIEZUREZfdHJhbnNwYXJlbnRNb2RlOworZXh0ZXJuIEZUREZfQml0bWFwMzIgICAgICAgRlRERl90cmFuc3BhcmVudE1vZGVPcHRpb25zOworZXh0ZXJuIEZUREZfUXVldWUgICAgICAgICAgRlRERl9yZXFRdWV1ZTsKK2V4dGVybiBGVERGX1F1ZXVlICAgICAgICAgIEZUREZfZnJlZVF1ZXVlOworZXh0ZXJuIEZUREZfUGVuZGluZyAgICAgICAgRlRERl90eFBlbmRpbmdMaXN0WyBGVERGX05SX09GX1JFUV9CVUZGRVJTIF07CitleHRlcm4gRlRERl9QZW5kaW5nVEwgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyTGlzdFsgRlRERl9OUl9PRl9SRVFfQlVGRkVSUyBdOworZXh0ZXJuIEZUREZfUGVuZGluZ1RMKiAgICAgRlRERl90eFBlbmRpbmdUaW1lckhlYWQ7CitleHRlcm4gRlRERl9UaW1lICAgICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyTFQ7CitleHRlcm4gRlRERl9UaW1lICAgICAgICAgICBGVERGX3R4UGVuZGluZ1RpbWVyVGltZTsKK2V4dGVybiBGVERGX01zZ0J1ZmZlciogICAgIEZUREZfcmVxQ3VycmVudDsKK2V4dGVybiBGVERGX1NpemUgICAgICAgICAgIEZUREZfbnJPZlJldHJpZXM7CitleHRlcm4gRlRERl9Cb29sZWFuICAgICAgICBGVERGX2lzUEFOQ29vcmRpbmF0b3I7CitleHRlcm4gRlRERl9TbG90ZnJhbWVFbnRyeSBGVERGX3Nsb3RmcmFtZVRhYmxlWyBGVERGX01BWF9TTE9URlJBTUVTIF07CitleHRlcm4gRlRERl9MaW5rRW50cnkgICAgICBGVERGX2xpbmtUYWJsZVsgRlRERl9NQVhfTElOS1MgXTsKKyNpZm5kZWYgRlRERl9OT19UU0NICitleHRlcm4gRlRERl9MaW5rRW50cnkqICAgICBGVERGX3N0YXJ0TGlua3NbIEZUREZfTUFYX1NMT1RGUkFNRVMgXTsKK2V4dGVybiBGVERGX0xpbmtFbnRyeSogICAgIEZUREZfZW5kTGlua3NbIEZUREZfTUFYX1NMT1RGUkFNRVMgXTsKK2V4dGVybiBGVERGX05laWdoYm9yRW50cnkgIEZUREZfbmVpZ2hib3JUYWJsZVsgRlRERl9OUl9PRl9ORUlHSEJPUlMgXTsKK2V4dGVybiBGVERGX0Jvb2xlYW4gICAgICAgIEZUREZfd2FrZVVwRW5hYmxlVHNjaDsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKyNpZm5kZWYgRlRERl9OT19DU0wKK2V4dGVybiBGVERGX0Jvb2xlYW4gICAgICAgIEZUREZfd2FrZVVwRW5hYmxlTGU7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KK2V4dGVybiBGVERGX0xtYWNDb3VudGVycyAgIEZUREZfbG1hY0NvdW50ZXJzOworCitleHRlcm4gRlRERl9GcmFtZUhlYWRlciAgICBGVERGX2ZoOworZXh0ZXJuIEZUREZfU2VjdXJpdHlIZWFkZXIgRlRERl9zaDsKK2V4dGVybiBGVERGX0Fzc29jQWRtaW4gICAgIEZUREZfYWE7CitleHRlcm4gRlRERl9Cb29sZWFuICAgICAgICBGVERGX3R4SW5Qcm9ncmVzczsKKyNpZm5kZWYgRlRERl9OT19DU0wKK2V4dGVybiBGVERGX1RpbWUgICAgICAgICAgIEZUREZfcnpUaW1lOworZXh0ZXJuIEZUREZfU2hvcnRBZGRyZXNzICAgRlRERl9zZW5kRnJhbWVQZW5kaW5nOworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCitleHRlcm4gRlRERl9UaW1lICAgICAgICAgICBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZTsKKworI2lmbmRlZiBGVERGX05PX1RTQ0gKK2V4dGVybiBGVERGX0xpbmtFbnRyeSogICAgIEZUREZfdHNjaFNsb3RMaW5rOworZXh0ZXJuIEZUREZfVGltZTY0ICAgICAgICAgRlRERl90c2NoU2xvdFRpbWU7CitleHRlcm4gRlRERl9BU04gICAgICAgICAgICBGVERGX3RzY2hTbG90QVNOOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCit2b2lkIEZUREZfcHJvY2Vzc0RhdGFSZXF1ZXN0KCBGVERGX0RhdGFSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzUHVyZ2VSZXF1ZXN0KCBGVERGX1B1cmdlUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc0Fzc29jaWF0ZVJlcXVlc3QoIEZUREZfQXNzb2NpYXRlUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc0Fzc29jaWF0ZVJlc3BvbnNlKCBGVERGX0Fzc29jaWF0ZVJlc3BvbnNlKiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzRGlzYXNzb2NpYXRlUmVxdWVzdCggRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzR2V0UmVxdWVzdCggRlRERl9HZXRSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzU2V0UmVxdWVzdCggRlRERl9TZXRSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzT3JwaGFuUmVzcG9uc2UoIEZUREZfT3JwaGFuUmVzcG9uc2UqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NSZXNldFJlcXVlc3QoIEZUREZfUmVzZXRSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzUnhFbmFibGVSZXF1ZXN0KCBGVERGX1J4RW5hYmxlUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1NjYW5SZXF1ZXN0KCBGVERGX1NjYW5SZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzU3RhcnRSZXF1ZXN0KCBGVERGX1N0YXJ0UmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1BvbGxSZXF1ZXN0KCBGVERGX1BvbGxSZXF1ZXN0KiByZXEgKTsKKyNpZm5kZWYgRlRERl9OT19UU0NICit2b2lkIEZUREZfcHJvY2Vzc1NldFNsb3RmcmFtZVJlcXVlc3QoIEZUREZfU2V0U2xvdGZyYW1lUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1NldExpbmtSZXF1ZXN0KCBGVERGX1NldExpbmtSZXF1ZXN0KiByZXEgKTsKK3ZvaWQgRlRERl9wcm9jZXNzVHNjaE1vZGVSZXF1ZXN0KCBGVERGX1RzY2hNb2RlUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc0tlZXBBbGl2ZVJlcXVlc3QoIEZUREZfS2VlcEFsaXZlUmVxdWVzdCogcmVxICk7CisjZW5kaWYgLyogRlRERl9OT19UU0NIICovCit2b2lkIEZUREZfcHJvY2Vzc0JlYWNvblJlcXVlc3QoIEZUREZfQmVhY29uUmVxdWVzdCogcmVxICk7Cit2b2lkIEZUREZfcHJvY2Vzc1RyYW5zcGFyZW50UmVxdWVzdCggRlRERl9UcmFuc3BhcmVudFJlcXVlc3QqIHJlcSApOwordm9pZCBGVERGX3Byb2Nlc3NSZW1vdGVSZXF1ZXN0KCBGVERGX1JlbW90ZVJlcXVlc3QqIHJlcSApOworCit2b2lkIEZUREZfcHJvY2Vzc05leHRSZXF1ZXN0KCB2b2lkICk7Cit2b2lkIEZUREZfcHJvY2Vzc1J4RXZlbnQoIHZvaWQgKTsKK3ZvaWQgRlRERl9wcm9jZXNzVHhFdmVudCggdm9pZCApOwordm9pZCBGVERGX3Byb2Nlc3NTeW1ib2xUaW1lckV2ZW50KCB2b2lkICk7CisKK3ZvaWQgRlRERl9zZW5kRGF0YUNvbmZpcm0oIEZUREZfRGF0YVJlcXVlc3QqICBkYXRhUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU3RhdHVzICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RpbWUgICAgICAgICAgdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TTiAgICAgICAgICAgIERTTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTnVtT2ZCYWNrb2ZmcyBudW1PZkJhY2tvZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JRUxpc3QqICAgICAgIGFja1BheWxvYWQgKTsKKwordm9pZCBGVERGX3NlbmREYXRhSW5kaWNhdGlvbiggRlRERl9GcmFtZUhlYWRlciogICAgZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiAgICAgICAgIHBheWxvYWRJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RhdGFMZW5ndGggICAgICBtc2R1TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICAgICAgbXNkdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfTGlua1F1YWxpdHkgICAgIG1wZHVMaW5rUXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfVGltZSAgICAgICAgICAgIHRpbWVzdGFtcCApOworCit2b2lkIEZUREZfc2VuZFBvbGxDb25maXJtKCBGVERGX1BvbGxSZXF1ZXN0KiBwb2xsUmVxdWVzdCwgRlRERl9TdGF0dXMgc3RhdHVzICk7CisKK3ZvaWQgRlRERl9zZW5kU2NhbkNvbmZpcm0oIEZUREZfU2NhblJlcXVlc3QqIHNjYW5SZXF1ZXN0LCBGVERGX1N0YXR1cyBzdGF0dXMgKTsKKwordm9pZCBGVERGX3NlbmRCZWFjb25Ob3RpZnlJbmRpY2F0aW9uKCBGVERGX1BBTkRlc2NyaXB0b3IqIFBBTkRlc2NyaXB0b3IgKTsKKwordm9pZCBGVERGX3NlbmRCZWFjb25Db25maXJtKCBGVERGX0JlYWNvblJlcXVlc3QqIGJlYWNvblJlcXVlc3QsIEZUREZfU3RhdHVzIHN0YXR1cyApOworCit2b2lkIEZUREZfc2VuZEFzc29jaWF0ZUNvbmZpcm0oIEZUREZfQXNzb2NpYXRlUmVxdWVzdCogYXNzb2NpYXRlUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TdGF0dXMgICAgICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2hvcnRBZGRyZXNzICAgICAgYXNzb2NTaG9ydEFkZHIgKTsKKwordm9pZCBGVERGX3NlbmRBc3NvY2lhdGVEYXRhUmVxdWVzdCggdm9pZCApOworCit2b2lkIEZUREZfc2VuZERpc2Fzc29jaWF0ZUNvbmZpcm0oIEZUREZfRGlzYXNzb2NpYXRlUmVxdWVzdCogZGlzUmVxLCBGVERGX1N0YXR1cyBzdGF0dXMgKTsKKwordm9pZCBGVERGX3NlbmRTeW5jTG9zc0luZGljYXRpb24oIEZUREZfTG9zc1JlYXNvbiBsb3NzUmVhc29uLCBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciApOworCit2b2lkIEZUREZfc2VuZFBBTklkQ29uZmxpY3ROb3RpZmljYXRpb24oIEZUREZfRnJhbWVIZWFkZXIqIGZyYW1lSGVhZGVyLCBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciApOworCit2b2lkIEZUREZfc2VuZENvbW1TdGF0dXNJbmRpY2F0aW9uKCBGVERGX01zZ0J1ZmZlciogICAgIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1N0YXR1cyAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUEFOSWQgICAgICAgICAgUEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3NNb2RlICAgIHNyY0FkZHJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzICAgICAgICBzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzTW9kZSAgICBkc3RBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyAgICAgICAgZHN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlMZXZlbCAgc2VjdXJpdHlMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfS2V5SWRNb2RlICAgICAga2V5SWRNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICAgICBrZXlTb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0tleUluZGV4ICAgICAgIGtleUluZGV4ICk7CisKK3ZvaWQgRlRERl9zdGFydFRpbWVyKCBGVERGX1BlcmlvZCBwZXJpb2QsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgKCAqIHRpbWVyRnVuYyApKCB2b2lkKiBwYXJhbXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICBwYXJhbXMgKTsKKworRlRERl9PY3RldCogRlRERl9nZXRUeEJ1ZlB0ciggRlRERl9CdWZmZXIqIHR4QnVmZmVyICk7CisKK3ZvaWQgICAgICAgIEZUREZfc2V0VHhNZXRhRGF0YSggRlRERl9CdWZmZXIqICAgICAgIHR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lVHlwZSAgICAgZnJhbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0Jvb2xlYW4gICAgICAgYWNrVFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU04gICAgICAgICAgICBTTiApOworCitGVERGX1N0YXR1cyBGVERGX3NlbmRGcmFtZSggRlRERl9DaGFubmVsTnVtYmVyICAgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lSGVhZGVyKiAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgICB0eFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RhdGFMZW5ndGggICAgICBwYXlsb2FkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX09jdGV0KiAgICAgICAgICBwYXlsb2FkICk7CisKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorRlRERl9TdGF0dXMgRlRERl9zZW5kQWNrRnJhbWUoIEZUREZfRnJhbWVIZWFkZXIqICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIqIHNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICAgIHR4UHRyICk7CisjZW5kaWYgLyogIUZUREZfTk9fQ1NMIHx8ICFGVERGX05PX1RTQ0ggKi8KKwordm9pZCBGVERGX3NlbmRUcmFuc3BhcmVudEZyYW1lKCBGVERGX0RhdGFMZW5ndGggICAgZnJhbWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUFRJICAgICAgICAgICBwdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQm9vbGVhbiAgICAgICBjbXNhU3VwcHJlc3MgKTsKKworRlRERl9PY3RldCogRlRERl9nZXRSeEJ1ZmZlciggdm9pZCApOworCit2b2lkICAgICAgICBGVERGX3Byb2Nlc3NSeEV2ZW50KCB2b2lkICk7CisKK0ZUREZfT2N0ZXQqIEZUREZfYWRkRnJhbWVIZWFkZXIoIEZUREZfT2N0ZXQqICAgICAgIHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZUhlYWRlciogZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RhdGFMZW5ndGggICBtc2R1TGVuZ3RoICk7CisKK0ZUREZfT2N0ZXQqIEZUREZfZ2V0RnJhbWVIZWFkZXIoIEZUREZfT2N0ZXQqICAgICAgIHJ4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9GcmFtZUhlYWRlciogZnJhbWVIZWFkZXIgKTsKKworRlRERl9EYXRhTGVuZ3RoIEZUREZfZ2V0TWljTGVuZ3RoKCBGVERGX1NlY3VyaXR5TGV2ZWwgc2VjdXJpdHlMZXZlbCApOworCitGVERGX09jdGV0KiAgICAgRlRERl9nZXRTZWN1cml0eUhlYWRlciggRlRERl9PY3RldCogICAgICAgICAgcnhQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgZnJhbWVWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIqIHNlY3VyaXR5SGVhZGVyICk7CisKK0ZUREZfT2N0ZXQqIEZUREZfYWRkU2VjdXJpdHlIZWFkZXIoIEZUREZfT2N0ZXQqICAgICAgICAgIHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIgKTsKKworRlRERl9TdGF0dXMgRlRERl9zZWN1cmVGcmFtZSggRlRERl9PY3RldCogICAgICAgICAgYnVmUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICAgICAgcHJpdlB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVIZWFkZXIqICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIgKTsKKworRlRERl9TdGF0dXMgRlRERl91bnNlY3VyZUZyYW1lKCBGVERGX09jdGV0KiAgICAgICAgICBidWZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgICAgICAgIHByaXZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVIZWFkZXIqICAgIGZyYW1lSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1NlY3VyaXR5SGVhZGVyKiBzZWN1cml0eUhlYWRlciApOworCitGVERGX0tleURlc2NyaXB0b3IqIEZUREZfbG9va3VwS2V5KCBGVERGX0FkZHJlc3NNb2RlIGRldkFkZHJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QQU5JZCAgICAgICBkZXZQQU5JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQWRkcmVzcyAgICAgZGV2QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfRnJhbWVUeXBlICAgZnJhbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9LZXlJZE1vZGUgICBrZXlJZE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0tleUluZGV4ICAgIGtleUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCogICAgICBrZXlTb3VyY2UgKTsKKworRlRERl9EZXZpY2VEZXNjcmlwdG9yKiBGVERGX2xvb2t1cERldmljZSggRlRERl9TaXplICAgICAgICAgICAgICAgICAgICBuck9mRGV2aWNlRGVzY3JpcHRvckhhbmRsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0RldmljZURlc2NyaXB0b3JIYW5kbGUqIGRldmljZURlc2NyaXB0b3JIYW5kbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9BZGRyZXNzTW9kZSAgICAgICAgICAgICBkZXZBZGRyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfUEFOSWQgICAgICAgICAgICAgICAgICAgZGV2UEFOSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0FkZHJlc3MgICAgICAgICAgICAgICAgIGRldkFkZHIgKTsKKworRlRERl9TZWN1cml0eUxldmVsRGVzY3JpcHRvciogRlRERl9nZXRTZWN1cml0eUxldmVsRGVzY3IoIEZUREZfRnJhbWVUeXBlICAgICAgZnJhbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfQ29tbWFuZEZyYW1lSWQgY29tbWFuZEZyYW1lSWQgKTsKKworI2lmICFkZWZpbmVkKEZUREZfTk9fQ1NMKSB8fCAhZGVmaW5lZChGVERGX05PX1RTQ0gpCitGVERGX09jdGV0KiBGVERGX2FkZEllcyggRlRERl9PY3RldCogIHR4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiBoZWFkZXJJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JRUxpc3QqIHBheWxvYWRJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Cb29sZWFuIHdpdGhUZXJtaW5hdGlvbklFICk7CisKK0ZUREZfT2N0ZXQqIEZUREZfZ2V0SWVzKCBGVERGX09jdGV0KiAgIHJ4UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfT2N0ZXQqICAgZnJhbWVFbmRQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JRUxpc3QqKiBoZWFkZXJJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JRUxpc3QqKiBwYXlsb2FkSUVMaXN0ICk7CisjZW5kaWYgLyogIUZUREZfTk9fQ1NMIHx8ICFGVERGX05PX1RTQ0ggKi8KKworI2lmbmRlZiBGVERGX05PX0NTTAordm9pZCBGVERGX3NldFBlZXJDc2xUaW1pbmcoIEZUREZfSUVMaXN0KiBoZWFkZXJJRUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9UaW1lICAgIHRpbWVTdGFtcCApOwordm9pZCBGVERGX3NldENzbFNhbXBsZVRpbWUoIHZvaWQgKTsKK3ZvaWQgRlRERl9nZXRXYWtldXBQYXJhbXMoIEZUREZfU2hvcnRBZGRyZXNzIGRzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1RpbWUqICAgICAgICB3YWtldXBTdGFydFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX1BlcmlvZCogICAgICB3YWtldXBQZXJpb2QgKTsKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworCit2b2lkICAgICAgICAgICAgRlRERl9nZXRFeHRBZGRyZXNzKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRFeHRBZGRyZXNzKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRBY2tXYWl0RHVyYXRpb24oIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2dldEVuaEFja1dhaXREdXJhdGlvbiggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0RW5oQWNrV2FpdER1cmF0aW9uKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRJbXBsaWNpdEJyb2FkY2FzdCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0SW1wbGljaXRCcm9hZGNhc3QoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldFNob3J0QWRkcmVzcyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0U2ltcGxlQWRkcmVzcyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0UnhPbldoZW5JZGxlKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRSeE9uV2hlbklkbGUoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2dldFBBTklkKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRQQU5JZCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0Q3VycmVudENoYW5uZWwoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldEN1cnJlbnRDaGFubmVsKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRUWFBvd2VyKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRNYXhGcmFtZVRvdGFsV2FpdFRpbWUoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3NldE1heEZyYW1lVG90YWxXYWl0VGltZSggdm9pZCApOworI2lmbmRlZiBGVERGX05PX0NTTAordm9pZCAgICAgICAgICAgIEZUREZfc2V0TGVFbmFibGVkKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRDc2xGcmFtZVBlbmRpbmdXYWl0VCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0Q3NsRnJhbWVQZW5kaW5nV2FpdFQoIHZvaWQgKTsKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0TG1hY1BtRGF0YSggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfZ2V0TG1hY1RyYWZmaWNDb3VudGVycyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0TWF4Q1NNQUJhY2tvZmZzKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRNYXhCRSggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0TWluQkUoIHZvaWQgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2dldEtlZXBQaHlFbmFibGVkKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9zZXRLZWVwUGh5RW5hYmxlZCggdm9pZCApOworI2lmIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKK3ZvaWQgICAgICAgICAgICBGVERGX3NldEJvSXJxVGhyZXNob2xkKCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgRlRERl9nZXRCb0lycVRocmVzaG9sZCggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfc2V0UHRpQ29uZmlnKCB2b2lkICk7CisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworCisjaWZuZGVmIEZUREZfTk9fVFNDSAordm9pZCAgICAgICAgICAgIEZUREZfc2V0VGltZXNsb3RUZW1wbGF0ZSggdm9pZCApOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCit2b2lkICAgICAgICAgICAgRlRERl9pbml0TG1hYyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfaW5pdFF1ZXVlcyggdm9pZCApOwordm9pZCAgICAgICAgICAgIEZUREZfaW5pdFF1ZXVlKCBGVERGX1F1ZXVlKiBxdWV1ZSApOwordm9pZCAgICAgICAgICAgIEZUREZfcXVldWVCdWZmZXJIZWFkKCBGVERGX0J1ZmZlciogYnVmZmVyLCBGVERGX1F1ZXVlKiBxdWV1ZSApOworRlRERl9TdGF0dXMgICAgIEZUREZfcXVldWVSZXFIZWFkKCBGVERGX01zZ0J1ZmZlciogcmVxdWVzdCwgRlRERl9RdWV1ZSogcXVldWUgKTsKK0ZUREZfQnVmZmVyKiAgICBGVERGX2RlcXVldWVCdWZmZXJUYWlsKCBGVERGX1F1ZXVlKiBxdWV1ZSApOworRlRERl9Nc2dCdWZmZXIqIEZUREZfZGVxdWV1ZVJlcVRhaWwoIEZUREZfUXVldWUqIHF1ZXVlICk7CitGVERGX01zZ0J1ZmZlciogRlRERl9kZXF1ZXVlQnlIYW5kbGUoIEZUREZfSGFuZGxlIGhhbmRsZSwgRlRERl9RdWV1ZSogcXVldWUgKTsKK0ZUREZfQnVmZmVyKiAgICBGVERGX2RlcXVldWVCeUJ1ZmZlciggRlRERl9CdWZmZXIqIGJ1ZmZlciwgRlRERl9RdWV1ZSogcXVldWUgKTsKK0ZUREZfQm9vbGVhbiAgICBGVERGX2lzUXVldWVFbXB0eSggRlRERl9RdWV1ZSogcXVldWUgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX2FkZFR4UGVuZGluZ1RpbWVyKCBGVERGX01zZ0J1ZmZlciogcmVxdWVzdCwgdWludDhfdCBwZW5kTGlzdE5yLCBGVERGX1RpbWUgZGVsdGEsIHZvaWQgKCAqIGZ1bmMgKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9QZW5kaW5nVEwqICkgKTsKK3ZvaWQgICAgICAgICAgICBGVERGX3JlbW92ZVR4UGVuZGluZ1RpbWVyKCBGVERGX01zZ0J1ZmZlciogcmVxdWVzdCApOwordm9pZCAgICAgICAgICAgIEZUREZfcmVzdG9yZVR4UGVuZGluZ1RpbWVyKCB2b2lkICk7CitGVERGX0Jvb2xlYW4gICAgRlRERl9nZXRUeFBlbmRpbmdUaW1lckhlYWQoIEZUREZfVGltZSogdGltZSApOwordm9pZCAgICAgICAgICAgIEZUREZfc2VuZFRyYW5zYWN0aW9uRXhwaXJlZCggRlRERl9QZW5kaW5nVEwqIHB0ciApOworI2lmbmRlZiBGVERGX05PX1RTQ0gKK3ZvaWQgICAgICAgICAgICBGVERGX3Byb2Nlc3NLZWVwQWxpdmVUaW1lckV4cCggRlRERl9QZW5kaW5nVEwqIHB0ciApOwordm9pZCAgICAgICAgICAgIEZUREZfcmVzZXRLZWVwQWxpdmVUaW1lciggRlRERl9TaG9ydEFkZHJlc3MgZHN0QWRkciApOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCit2b2lkIEZUREZfcHJvY2Vzc1R4UGVuZGluZyhGVERGX0ZyYW1lSGVhZGVyKiAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgRlRERl9TZWN1cml0eUhlYWRlciogc2VjdXJpdHlIZWFkZXIgKTsKKwordm9pZCAgICAgICAgICAgIEZUREZfcHJvY2Vzc0NvbW1hbmRGcmFtZSggRlRERl9PY3RldCogICAgICAgICAgcnhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVERGX0ZyYW1lSGVhZGVyKiAgICBmcmFtZUhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfU2VjdXJpdHlIZWFkZXIqIHNlY3VyaXR5SGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9JRUxpc3QqICAgICAgICAgcGF5bG9hZElFTGlzdCApOworCit2b2lkICAgICAgICAgICAgICAgRlRERl9zY2FuUmVhZHkoIEZUREZfU2NhblJlcXVlc3QqICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9hZGRQQU5kZXNjcmlwdG9yKCBGVERGX1BBTkRlc2NyaXB0b3IqICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9zZW5kQmVhY29uUmVxdWVzdCggRlRERl9DaGFubmVsTnVtYmVyIGNoYW5uZWwgKTsKK3ZvaWQgICAgICAgICAgICAgICBGVERGX3NlbmRCZWFjb25SZXF1ZXN0SW5kaWNhdGlvbiggRlRERl9GcmFtZUhlYWRlciogZnJhbWVIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUREZfSUVMaXN0KiAgICAgIHBheWxvYWRJRUxpc3QgKTsKK3ZvaWQgICAgICAgICAgICAgICBGVERGX3NlbmRPcnBoYW5Ob3RpZmljYXRpb24oIEZUREZfQ2hhbm5lbE51bWJlciBjaGFubmVsICk7CisKKyNpZm5kZWYgRlRERl9OT19UU0NICit2b2lkICAgICAgICAgICAgICAgRlRERl9zZXRUc2NoRW5hYmxlZCggdm9pZCApOworRlRERl9TdGF0dXMgICAgICAgIEZUREZfc2NoZWR1bGVUc2NoKCBGVERGX01zZ0J1ZmZlciogcmVxdWVzdCApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfdHNjaFByb2Nlc3NSZXF1ZXN0KCB2b2lkICk7CitGVERGX1NpemUgICAgICAgICAgRlRERl9nZXRUc2NoU3luY1N1YkllKCB2b2lkICk7CitGVERGX09jdGV0KiAgICAgICAgRlRERl9hZGRUc2NoU3luY1N1YkllKCBGVERGX09jdGV0KiB0eFB0ciApOworRlRERl9TaG9ydEFkZHJlc3MgIEZUREZfZ2V0UmVxdWVzdEFkZHJlc3MoIEZUREZfTXNnQnVmZmVyKiByZXF1ZXN0ICk7CitGVERGX01zZ0J1ZmZlciogICAgRlRERl90c2NoR2V0UGVuZGluZyggRlRERl9Nc2dCdWZmZXIqIHJlcXVlc3QgKTsKK0ZUREZfT2N0ZXQqICAgICAgICBGVERGX2FkZENvcnJUaW1lSUUoIEZUREZfT2N0ZXQqIHR4UHRyLCBGVERGX1RpbWUgcnhUaW1lc3RhbXAgKTsKK3ZvaWQgICAgICAgICAgICAgICBGVERGX2NvcnJlY3RTbG90VGltZSggRlRERl9UaW1lIHJ4VGltZXN0YW1wICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9jb3JyZWN0U2xvdFRpbWVGcm9tQWNrKCBGVERGX0lFTGlzdCogaGVhZGVySUVMaXN0ICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9pbml0VHNjaFJldHJpZXMoIHZvaWQgKTsKK0ZUREZfVHNjaFJldHJ5KiAgICBGVERGX2dldFRzY2hSZXRyeSggRlRERl9TaG9ydEFkZHJlc3Mgbm9kZUFkZHIgKTsKK0ZUREZfTnVtT2ZCYWNrb2ZmcyBGVERGX2dldE51bU9mQmFja29mZnMoIEZUREZfQkVFeHBvbmVudCBCRSApOwordm9pZCAgICAgICAgICAgICAgIEZUREZfaW5pdEJhY2tvZmYoIHZvaWQgKTsKK0ZUREZfU04gICAgICAgICAgICBGVERGX3Byb2Nlc3NUc2NoU04oIEZUREZfTXNnQnVmZmVyKiBtc2csIEZUREZfU04gc24sIHVpbnQ4X3QqIHByaXYgKTsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworRlRERl9UaW1lNjQgICAgICAgIEZUREZfZ2V0Q3VyVGltZTY0KCB2b2lkICk7Cit2b2lkICAgICAgICAgICAgICAgRlRERl9pbml0Q3VyVGltZTY0KCB2b2lkICk7CisKKyNpZiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRgordHlwZWRlZiBlbnVtCit7CisgICAgICAgIEZUREZfU0RCX1NUQVRFX0lOSVQgPSAwLAorICAgICAgICBGVERGX1NEQl9TVEFURV9CQUNLSU5HX09GRiwKKyAgICAgICAgRlRERl9TREJfU1RBVEVfV0FJVElOR19XQUtFX1VQX0lSUSwKKyAgICAgICAgRlRERl9TREJfU1RBVEVfUkVTVU1JTkcsCit9IEZUREZfU2RiU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIEZUREZfU2RiU3RhdGUgc3RhdGU7CisgICAgICAgIEZUREZfU2l6ZSBuck9mQmFja29mZnM7CisgICAgICAgIEZUREZfVGltZSBjY2FSZXRyeVRpbWU7CisgICAgICAgIEZUREZfT2N0ZXQgYnVmZmVyW0ZUREZfQlVGRkVSX0xFTkdUSF07CisgICAgICAgIHVpbnQzMl90IG1ldGFkYXRhMDsKKyAgICAgICAgdWludDMyX3QgbWV0YWRhdGExOworICAgICAgICB1aW50MzJfdCBwaHlDc21hQ2FBdHRyOworfSBGVERGX1NkYjsKKwordm9pZCBGVERGX3NkYkZzbVJlc2V0KHZvaWQpOworCit2b2lkIEZUREZfc2RiRnNtQmFja29mZklSUSh2b2lkKTsKKwordm9pZCBGVERGX3NkYkZzbVNsZWVwKHZvaWQpOworCit2b2lkIEZUREZfc2RiRnNtQWJvcnRTbGVlcCh2b2lkKTsKKwordm9pZCBGVERGX3NkYkZzbVdha2VVcElSUSh2b2lkKTsKKwordm9pZCBGVERGX3NkYkZzbVdha2VVcCh2b2lkKTsKKwordm9pZCBGVERGX3NkYkZzbVR4SVJRKHZvaWQpOworCitGVERGX1VTZWMgRlRERl9zZGJHZXRTbGVlcFRpbWUodm9pZCk7CisKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworCisjaWYgZGdfY29uZmlnVVNFX0ZUREZfRERQSFkgPT0gMQorCit2b2lkIEZUREZfZGRwaHlSZXN0b3JlKHZvaWQpOworCit2b2lkIEZUREZfZGRwaHlTYXZlKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9tYWluLmMgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjlmOTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvbWFpbi5jCkBAIC0wLDAgKzEsMzMxIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgbWFpbi5jCisgKgorICogQGJyaWVmIE1haW4gRlRERiBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgPGZ0ZGYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnbWFwLmgiCisjaW5jbHVkZSAiZnRkZkluZm8uaCIKKwordm9pZCBGVERGX2dldFJlbGVhc2VJbmZvKGNoYXIgKipsbWFjUmVsTmFtZSwgY2hhciAqKmxtYWNCdWlsZFRpbWUsIGNoYXIgKip1bWFjUmVsTmFtZSwgY2hhciAqKnVtYWNCdWlsZFRpbWUpCit7CisgICAgc3RhdGljIGNoYXIgICAgICAgIGxyZWxOYW1lWyAxNiBdOworICAgIHN0YXRpYyBjaGFyICAgICAgICBsYmxkVGltZVsgMTYgXTsKKyAgICBzdGF0aWMgY2hhciAgICAgICAgdXJlbE5hbWVbIDE2IF07CisgICAgc3RhdGljIGNoYXIgICAgICAgIHVibGRUaW1lWyAxNiBdOworICAgIHVpbnQ4X3QgICAgICAgICAgICBpOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnB0ciAgICA9IEZUREZfR0VUX1JFR19BRERSKE9OX09GRl9SRUdNQVBfUkVMX05BTUUpOworICAgIHVpbnQzMl90ICAgICAgICAgICpjaHJQdHIgPSAodWludDMyX3QgKilscmVsTmFtZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfTlVNOyBpKyspCisgICAgeworICAgICAgICAqY2hyUHRyKysgPSAqcHRyKys7CisgICAgfQorCisgICAgcHRyICAgID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUpOworICAgIGNoclB0ciA9ICh1aW50MzJfdCAqKWxibGRUaW1lOworCisgICAgZm9yIChpID0gMDsgaSA8IEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfTlVNOyBpKyspCisgICAgeworICAgICAgICAqY2hyUHRyKysgPSAqcHRyKys7CisgICAgfQorCisgICAgY29uc3QgY2hhciAqdW1hY1ZQdHIgPSBGVERGX2dldFVtYWNSZWxOYW1lKCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICB7CisgICAgICAgIHVyZWxOYW1lWyBpIF0gPSB1bWFjVlB0clsgaSBdOworCisgICAgICAgIGlmICh1bWFjVlB0clsgaSBdID09ICdcMCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdW1hY1ZQdHIgPSBGVERGX2dldFVtYWNCdWlsZFRpbWUoKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIHsKKyAgICAgICAgdWJsZFRpbWVbIGkgXSA9IHVtYWNWUHRyWyBpIF07CisKKyAgICAgICAgaWYgKHVtYWNWUHRyWyBpIF0gPT0gJ1wwJykKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBscmVsTmFtZVsgMTUgXSA9ICdcMCc7CisgICAgbGJsZFRpbWVbIDE1IF0gPSAnXDAnOworICAgIHVyZWxOYW1lWyAxNSBdID0gJ1wwJzsKKyAgICB1YmxkVGltZVsgMTUgXSA9ICdcMCc7CisKKyAgICAqbG1hY1JlbE5hbWUgICA9IGxyZWxOYW1lOworICAgICpsbWFjQnVpbGRUaW1lID0gbGJsZFRpbWU7CisgICAgKnVtYWNSZWxOYW1lICAgPSB1cmVsTmFtZTsKKyAgICAqdW1hY0J1aWxkVGltZSA9IHVibGRUaW1lOworfQorCit2b2lkIEZUREZfY29uZmlybUxtYWNJbnRlcnJ1cHQodm9pZCkKK3sKKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqZnRkZkNtID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9GVERGX0NNKTsKKyAgICAqZnRkZkNtID0gMDsKK30KKwordm9pZCBGVERGX2V2ZW50SGFuZGxlcih2b2lkKQoreworICAgIHZvbGF0aWxlIHVpbnQzMl90IGZ0ZGZDZSA9ICpGVERGX0dFVF9SRUdfQUREUihPTl9PRkZfUkVHTUFQX0ZUREZfQ0UpOworCisgICAgaWYgKGZ0ZGZDZSAmIEZUREZfTVNLX1JYX0NFKQorICAgIHsKKyAgICAgICAgRlRERl9wcm9jZXNzUnhFdmVudCgpOworICAgIH0KKworICAgIGlmIChmdGRmQ2UgJiBGVERGX01TS19UWF9DRSkKKyAgICB7CisgICAgICAgIEZUREZfcHJvY2Vzc1R4RXZlbnQoKTsKKyAgICB9CisKKyAgICBpZiAoZnRkZkNlICYgRlRERl9NU0tfU1lNQk9MX1RNUl9DRSkKKyAgICB7CisgICAgICAgIEZUREZfcHJvY2Vzc1N5bWJvbFRpbWVyRXZlbnQoKTsKKyAgICB9CisKKyNpZm5kZWYgRlRERl9MSVRFCisjaWZuZGVmIEZUREZfTk9fQ1NMCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkKQorICAgIHsKKyAgICAgICAgRlRERl9UaW1lIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgICAgIEZUREZfVGltZSBkZWx0YSAgID0gY3VyVGltZSAtIEZUREZfcnpUaW1lOworCisgICAgICAgIGlmIChkZWx0YSA8IDB4ODAwMDAwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJaIGhhcyBwYXNzZWQgY2hlY2sgaWYgYSBzZW5kIGZyYW1lIGlzIHBlbmRpbmcKKyAgICAgICAgICAgIGlmIChGVERGX3NlbmRGcmFtZVBlbmRpbmcgIT0gMHhmZmZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUREZfVGltZSAgIHdha2V1cFN0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICBGVERGX1BlcmlvZCB3YWtldXBQZXJpb2Q7CisKKyAgICAgICAgICAgICAgICBGVERGX2NyaXRpY2FsVmFyKCk7CisgICAgICAgICAgICAgICAgRlRERl9lbnRlckNyaXRpY2FsKCk7CisKKyAgICAgICAgICAgICAgICBGVERGX2dldFdha2V1cFBhcmFtcyhGVERGX3NlbmRGcmFtZVBlbmRpbmcsICZ3YWtldXBTdGFydFRpbWUsICZ3YWtldXBQZXJpb2QpOworCisgICAgICAgICAgICAgICAgRlRERl90eEluUHJvZ3Jlc3MgPSBGVERGX1RSVUU7CisgICAgICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUsIHdha2V1cFN0YXJ0VGltZSk7CisgICAgICAgICAgICAgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCwgd2FrZXVwUGVyaW9kKTsKKworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICp0eEZsYWdTZXQgPSBGVERGX0dFVF9GSUVMRF9BRERSKE9OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQpOworICAgICAgICAgICAgICAgICp0eEZsYWdTZXQgICAgICAgICAgIHw9ICgoMSA8PCBGVERGX1RYX0RBVEFfQlVGRkVSKSB8ICgxIDw8IEZUREZfVFhfV0FLRVVQX0JVRkZFUikpOworCisgICAgICAgICAgICAgICAgRlRERl9zZW5kRnJhbWVQZW5kaW5nID0gMHhmZmZlOworCisgICAgICAgICAgICAgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZUREZfdHhJblByb2dyZXNzID09IEZUREZfRkFMU0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRERl9zZXRDc2xTYW1wbGVUaW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCAqZnRkZkNtID0gRlRERl9HRVRfUkVHX0FERFIoT05fT0ZGX1JFR01BUF9GVERGX0NNKTsKKyAgICAqZnRkZkNtID0gRlRERl9NU0tfVFhfQ0UgfCBGVERGX01TS19SWF9DRSB8IEZUREZfTVNLX1NZTUJPTF9UTVJfQ0U7Cit9CisKKyNpZm5kZWYgRlRERl9QSFlfQVBJCit2b2lkIEZUREZfc25kTXNnKEZUREZfTXNnQnVmZmVyICptc2dCdWYpCit7CisgICAgc3dpdGNoIChtc2dCdWYtPm1zZ0lkKQorICAgIHsKKyNpZm5kZWYgRlRERl9MSVRFCisKKyAgICBjYXNlIEZUREZfREFUQV9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NEYXRhUmVxdWVzdCgoRlRERl9EYXRhUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9QVVJHRV9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NQdXJnZVJlcXVlc3QoKEZUREZfUHVyZ2VSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX0FTU09DSUFURV9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NBc3NvY2lhdGVSZXF1ZXN0KChGVERGX0Fzc29jaWF0ZVJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfQVNTT0NJQVRFX1JFU1BPTlNFOgorICAgICAgICBGVERGX3Byb2Nlc3NBc3NvY2lhdGVSZXNwb25zZSgoRlRERl9Bc3NvY2lhdGVSZXNwb25zZSAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9ESVNBU1NPQ0lBVEVfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzRGlzYXNzb2NpYXRlUmVxdWVzdCgoRlRERl9EaXNhc3NvY2lhdGVSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworICAgIGNhc2UgRlRERl9HRVRfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzR2V0UmVxdWVzdCgoRlRERl9HZXRSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVERGX1NFVF9SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NTZXRSZXF1ZXN0KChGVERGX1NldFJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjaWZuZGVmIEZUREZfTElURQorCisgICAgY2FzZSBGVERGX09SUEhBTl9SRVNQT05TRToKKyAgICAgICAgRlRERl9wcm9jZXNzT3JwaGFuUmVzcG9uc2UoKEZUREZfT3JwaGFuUmVzcG9uc2UgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworCisgICAgY2FzZSBGVERGX1JFU0VUX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1Jlc2V0UmVxdWVzdCgoRlRERl9SZXNldFJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfUlhfRU5BQkxFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1J4RW5hYmxlUmVxdWVzdCgoRlRERl9SeEVuYWJsZVJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjaWZuZGVmIEZUREZfTElURQorCisgICAgY2FzZSBGVERGX1NDQU5fUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzU2NhblJlcXVlc3QoKEZUREZfU2NhblJlcXVlc3QgKikgbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfU1RBUlRfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzU3RhcnRSZXF1ZXN0KChGVERGX1N0YXJ0UmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9QT0xMX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1BvbGxSZXF1ZXN0KChGVERGX1BvbGxSZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBGVERGX05PX1RTQ0gKKworICAgIGNhc2UgRlRERl9TRVRfU0xPVEZSQU1FX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc1NldFNsb3RmcmFtZVJlcXVlc3QoKEZUREZfU2V0U2xvdGZyYW1lUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TRVRfTElOS19SRVFVRVNUOgorICAgICAgICBGVERGX3Byb2Nlc3NTZXRMaW5rUmVxdWVzdCgoRlRERl9TZXRMaW5rUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9UU0NIX01PREVfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzVHNjaE1vZGVSZXF1ZXN0KChGVERGX1RzY2hNb2RlUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9LRUVQX0FMSVZFX1JFUVVFU1Q6CisgICAgICAgIEZUREZfcHJvY2Vzc0tlZXBBbGl2ZVJlcXVlc3QoKEZUREZfS2VlcEFsaXZlUmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGVERGX05PX1RTQ0ggKi8KKworICAgIGNhc2UgRlRERl9CRUFDT05fUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzQmVhY29uUmVxdWVzdCgoRlRERl9CZWFjb25SZXF1ZXN0ICopIG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFGVERGX0xJVEUgKi8KKworICAgIGNhc2UgRlRERl9UUkFOU1BBUkVOVF9FTkFCTEVfUkVRVUVTVDoKKyAgICAgICAgRlRERl9lbmFibGVUcmFuc3BhcmVudE1vZGUoKChGVERGX1RyYW5zcGFyZW50RW5hYmxlUmVxdWVzdCAqKSBtc2dCdWYpLT5lbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlRERl9UcmFuc3BhcmVudEVuYWJsZVJlcXVlc3QgKikgbXNnQnVmKS0+b3B0aW9ucyk7CisgICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIobXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUREZfVFJBTlNQQVJFTlRfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzVHJhbnNwYXJlbnRSZXF1ZXN0KChGVERGX1RyYW5zcGFyZW50UmVxdWVzdCAqKSBtc2dCdWYpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRlRERl9TTEVFUF9SRVFVRVNUOgorICAgICAgICBGVERGX1NMRUVQX0NBTExCQUNLKCgoRlRERl9TbGVlcFJlcXVlc3QgKiltc2dCdWYpLT5zbGVlcFRpbWUpOworICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBGVERGX0xJVEUKKworICAgIGNhc2UgRlRERl9SRU1PVEVfUkVRVUVTVDoKKyAgICAgICAgRlRERl9wcm9jZXNzUmVtb3RlUmVxdWVzdCgoRlRERl9SZW1vdGVSZXF1ZXN0ICopbXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIUZUREZfTElURSAqLworI2lmIEZUREZfREJHX0JVU19FTkFCTEUKKworICAgIGNhc2UgRlRERl9EQkdfTU9ERV9TRVRfUkVRVUVTVDoKKyAgICAgICAgRlRERl9zZXREYmdNb2RlKCgoRlRERl9EYmdNb2RlU2V0UmVxdWVzdCAqKSBtc2dCdWYpLT5kYmdNb2RlKTsKKyAgICAgICAgRlRERl9SRUxfTVNHX0JVRkZFUihtc2dCdWYpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGVERGX0RCR19CVVNfRU5BQkxFICovCisjaWYgZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQQorCisgICAgY2FzZSBGVERGX0ZQUFJfTU9ERV9TRVRfUkVRVUVTVDoKKyAgICAgICAgRlRERl9mcHByU2V0TW9kZSgoKEZUREZfRnBwck1vZGVTZXRSZXF1ZXN0ICopIG1zZ0J1ZiktPm1hdGNoRnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgKChGVERGX0ZwcHJNb2RlU2V0UmVxdWVzdCAqKSBtc2dCdWYpLT5mcE92ZXJyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoRlRERl9GcHByTW9kZVNldFJlcXVlc3QgKikgbXNnQnVmKS0+ZnBGb3JjZSk7CisgICAgICAgIEZUREZfUkVMX01TR19CVUZGRVIobXNnQnVmKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogZGdfY29uZmlnQkxBQ0tfT1JDQV9JQ19SRVYgIT0gQkxBQ0tfT1JDQV9JQ19SRVZfQSAqLworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU2lsZW50eSByZWxlYXNlIHRoZSBtZXNzYWdlIGJ1ZmZlcgorICAgICAgICBGVERGX1JFTF9NU0dfQlVGRkVSKG1zZ0J1Zik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBGVERGX3NlbmRGcmFtZVRyYW5zcGFyZW50Q29uZmlybSh2b2lkICAgICAgICAgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiBzdGF0dXMpCit7CisgICAgRlRERl9UcmFuc3BhcmVudENvbmZpcm0gKmNvbmZpcm0gPQorICAgICAgICAoRlRERl9UcmFuc3BhcmVudENvbmZpcm0gKikgRlRERl9HRVRfTVNHX0JVRkZFUihzaXplb2YoRlRERl9UcmFuc3BhcmVudENvbmZpcm0pKTsKKworICAgIGNvbmZpcm0tPm1zZ0lkICA9IEZUREZfVFJBTlNQQVJFTlRfQ09ORklSTTsKKyAgICBjb25maXJtLT5oYW5kbGUgPSBoYW5kbGU7CisgICAgY29uZmlybS0+c3RhdHVzID0gc3RhdHVzOworCisgICAgRlRERl9SQ1ZfTVNHKChGVERGX01zZ0J1ZmZlciAqKSBjb25maXJtKTsKK30KKwordm9pZCBGVERGX3JjdkZyYW1lVHJhbnNwYXJlbnQoRlRERl9EYXRhTGVuZ3RoIGZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9PY3RldCAgICAgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9CaXRtYXAzMiAgIHN0YXR1cykKK3sKKyAgICBGVERGX1RyYW5zcGFyZW50SW5kaWNhdGlvbiAqaW5kaWNhdGlvbiA9CisgICAgICAgIChGVERGX1RyYW5zcGFyZW50SW5kaWNhdGlvbiAqKSBGVERGX0dFVF9NU0dfQlVGRkVSKHNpemVvZihGVERGX1RyYW5zcGFyZW50SW5kaWNhdGlvbikpOworCisgICAgaW5kaWNhdGlvbi0+bXNnSWQgICAgICAgPSBGVERGX1RSQU5TUEFSRU5UX0lORElDQVRJT047CisgICAgaW5kaWNhdGlvbi0+ZnJhbWVMZW5ndGggPSBmcmFtZUxlbmd0aDsKKyAgICBpbmRpY2F0aW9uLT5zdGF0dXMgICAgICA9IHN0YXR1czsKKyAgICBpbmRpY2F0aW9uLT5mcmFtZSAgICAgICA9IEZUREZfR0VUX0RBVEFfQlVGRkVSKGZyYW1lTGVuZ3RoKTsKKyAgICBtZW1jcHkoaW5kaWNhdGlvbi0+ZnJhbWUsIGZyYW1lLCBmcmFtZUxlbmd0aCk7CisKKyAgICBGVERGX1JDVl9NU0coKEZUREZfTXNnQnVmZmVyICopIGluZGljYXRpb24pOworfQorI2VuZGlmIC8qICFGVERGX1BIWV9BUEkgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9wb3dlci5jIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL3Bvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzY2Y5NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9EaWFsb2dTREsvaW50ZXJmYWNlcy9mdGRmL3NyYy9wb3dlci5jCkBAIC0wLDAgKzEsMzcxIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQGZpbGUgcG93ZXIuYworICoKKyAqIEBicmllZiBGVERGIHBvd2VyIG9uL29mZiBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIERpYWxvZyBTZW1pY29uZHVjdG9yCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsICBTUEVDSUFMLCAgRVhFTVBMQVJZLCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAorICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZnRkZi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicmVnbWFwLmgiCisKK3N0YXRpYyBGVERGX1BTZWMgRlRERl9sb3dQb3dlckNsb2NrQ3ljbGUgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitzdGF0aWMgRlRERl9QU2VjIEZUREZfd2FrZVVwTGF0ZW5jeSAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworLyogUHJlLWNhbGN1bGF0ZWQgdmFsdWUgZm9yIG9wdGltaXphdGlvbi4gKi8KK3N0YXRpYyBGVERGX1VTZWMgRlRERl9sb3dQb3dlckNsb2NrQ3ljbGVVU2VjIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworLyogUHJlLWNhbGN1bGF0ZWQgdmFsdWUgZm9yIG9wdGltaXphdGlvbi4gKi8KK3N0YXRpYyBGVERGX1VTZWMgRlRERl93YWtlVXBMYXRlbmN5VVNlYyAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CisvKiBQcmUtY2FsY3VsYXRlZCB2YWx1ZSBmb3Igb3B0aW1pemF0aW9uLiAqLworc3RhdGljIEZUREZfTnJMb3dQb3dlckNsb2NrQ3ljbGVzIEZUREZfY3NtYWNhV2FrZXVwVGhyIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworCisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKK3N0YXRpYyB1aW50MzJfdCAgRlRERl9ldmVudEN1cnJWYWwgICAgICAgICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldGVudGlvbiIpKSk7CitzdGF0aWMgdWludDMyX3QgIEZUREZfdGltZVN0YW1wQ3VyclZhbCAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5yZXRlbnRpb24iKSkpOworc3RhdGljIHVpbnQzMl90ICBGVERGX3RpbWVTdGFtcEN1cnJQaGFzZVZhbCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZgorI2lmbmRlZiBGVERGX05PX0NTTAorRlRERl9Cb29sZWFuICAgICBGVERGX3dha2VVcEVuYWJsZUxlICAgICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV0ZW50aW9uIikpKTsKKyNlbmRpZiAvKiBGVERGX05PX0NTTCAqLworI2lmbmRlZiBGVERGX05PX1RTQ0gKK0ZUREZfQm9vbGVhbiAgICAgRlRERl93YWtlVXBFbmFibGVUc2NoOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCit2b2lkIEZUREZfc2V0U2xlZXBBdHRyaWJ1dGVzKEZUREZfUFNlYyAgICAgICAgICAgICAgICAgIGxvd1Bvd2VyQ2xvY2tDeWNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRERl9Ockxvd1Bvd2VyQ2xvY2tDeWNsZXMgd2FrZVVwTGF0ZW5jeSkKK3sKKyAgICBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZSA9IGxvd1Bvd2VyQ2xvY2tDeWNsZTsKKyAgICBGVERGX3dha2VVcExhdGVuY3kgICAgICA9ICh1aW50NjRfdCl3YWtlVXBMYXRlbmN5ICogbG93UG93ZXJDbG9ja0N5Y2xlOworICAgIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlVVNlYyA9IEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlIC8gMTAwMDAwMDsKKyAgICBGVERGX3dha2VVcExhdGVuY3lVU2VjID0gRlRERl93YWtlVXBMYXRlbmN5IC8gMTAwMDAwMDsKKyAgICBGVERGX2NzbWFjYVdha2V1cFRociA9IChGVERGX05yTG93UG93ZXJDbG9ja0N5Y2xlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKEZUREZfUFNlYykgMHhmZmZmZmZmZiAqIDEwMDAwMDAgLSBGVERGX3dha2VVcExhdGVuY3kpIC8gRlRERl9sb3dQb3dlckNsb2NrQ3ljbGUpOworfQorCitGVERGX1VTZWMgRlRERl9jYW5TbGVlcCh2b2lkKQoreworI2lmZGVmIEZUREZfUEhZX0FQSQorCisgICAgaWYgKEZUREZfdHhJblByb2dyZXNzIHx8IEZUREZfcGliLmtlZXBQaHlFbmFibGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjZWxzZQorI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisKKyAgICBpZiAoRlRERl9waWIua2VlcFBoeUVuYWJsZWQpCisjZWxzZQorICAgIGlmIChGVERGX3JlcUN1cnJlbnQgfHwgRlRERl9waWIua2VlcFBoeUVuYWJsZWQpCisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2VuZGlmCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKworICAgIGlmIChGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NFQ0JVU1kpID09IDEpCisjZWxzZSAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworICAgIGlmIChGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCkgPT0gMCB8fAorICAgICAgICBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NFQ0JVU1kpID09IDEpCisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2lmbmRlZiBGVERGX05PX0NTTAorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCkKKyAgICB7CisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKworICAgICAgICAvKiBBYm9ydCBzbGVlcCB3aGVuIExNQUMgaXMgYnVzeS4gKi8KKyAgICAgICAgaWYgKEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKworICAgICAgICBpZiAoRlRERl90eEluUHJvZ3Jlc3MgPT0gRlRERl9GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgRlRERl9UaW1lIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgICAgICAgICBGVERGX1RpbWUgZGVsdGEgICA9IGN1clRpbWUgLSBGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZTsKKworICAgICAgICAgICAgLy8gQSBkZWx0YSBsYXJnZXIgdGhhbiAweDgwMDAwMDAwIGlzIGFzc3VtZWQgdG8gYmUgbmVnYXRpdmUKKyAgICAgICAgICAgIC8vIERvIG5vdCByZXR1cm4gYSBzbGVlcCB2YWx1ZSB3aGVuIENTTCBzYW1wbGUgdGltZSBpcyBpbiB0aGUgcGFzdAorICAgICAgICAgICAgaWYgKGRlbHRhIDwgMHg4MDAwMDAwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIChGVERGX3N0YXJ0Q3NsU2FtcGxlVGltZSAtIGN1clRpbWUpICogMTY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fQ1NMICovCisKKyNpZm5kZWYgRlRERl9OT19UU0NICisKKyAgICBpZiAoRlRERl9waWIudHNjaEVuYWJsZWQpCisgICAgeworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisKKyAgICAgICAgLyogQWJvcnQgc2xlZXAgd2hlbiBMTUFDIGlzIGJ1c3kuICovCisgICAgICAgIGlmIChGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworI2VuZGlmCisgICAgICAgIEZUREZfVGltZTY0IGN1clRpbWU2NCA9IEZUREZfZ2V0Q3VyVGltZTY0KCk7CisgICAgICAgIEZUREZfVGltZTY0IGRlbHRhICAgICA9IGN1clRpbWU2NCAtIEZUREZfdHNjaFNsb3RUaW1lOworCisgICAgICAgIC8vIEEgZGVsdGEgbGFyZ2VyIHRoYW4gMHg4MDAwMDAwMDAwMDAwMDAwIGlzIGFzc3VtZWQgdG8gYmUgbmVnYXRpdmUKKyAgICAgICAgLy8gRG8gbm90IHJldHVybiBhIHNsZWVwIHZhbHVlIHdoZW4gVFNDSCBzbG90IHRpbWUgaXMgaW4gdGhlIHBhc3QKKyAgICAgICAgaWYgKGRlbHRhIDwgMHg4MDAwMDAwMDAwMDAwMDAwVUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIEZUREZfVVNlYyAgICBzbGVlcFRpbWUgPSAoRlRERl9VU2VjKShGVERGX3RzY2hTbG90VGltZSAtIGN1clRpbWU2NCk7CisKKyAgICAgICAgRlRERl9UaW1lICAgIHBlbmRMaXN0VGltZTsKKyAgICAgICAgRlRERl9UaW1lICAgIGN1clRpbWUgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCk7CisgICAgICAgIEZUREZfQm9vbGVhbiBwZW5kaW5nID0gRlRERl9nZXRUeFBlbmRpbmdUaW1lckhlYWQoJnBlbmRMaXN0VGltZSk7CisKKyAgICAgICAgaWYgKHBlbmRpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEEgZGVsdGEgbGFyZ2VyIHRoYW4gMHg4MDAwMDAwMCBpcyBhc3N1bWVkIHRvIGJlIG5lZ2F0aXZlCisgICAgICAgICAgICAvLyBEbyBub3QgcmV0dXJuIGEgc2xlZXAgdmFsdWUgd2hlbiBwZW5kaW5nIHRpbWVyIHRpbWUgaXMgaW4gdGhlIHBhc3QKKyAgICAgICAgICAgIGlmIChjdXJUaW1lIC0gcGVuZExpc3RUaW1lIDwgMHg4MDAwMDAwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRlRERl9VU2VjIHRtcFNsZWVwVGltZSA9IChGVERGX1VTZWMpKHBlbmRMaXN0VGltZSAtIGN1clRpbWUpOworCisgICAgICAgICAgICBpZiAodG1wU2xlZXBUaW1lIDwgc2xlZXBUaW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNsZWVwVGltZSA9IHRtcFNsZWVwVGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzbGVlcFRpbWUgPCBGVERGX1RTQ0hfTUFYX1BST0NFU1NfUkVRVUVTVF9USU1FICsgRlRERl9UU0NIX01BWF9TQ0hFRFVMRV9USU1FKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoc2xlZXBUaW1lIC0gKEZUREZfVFNDSF9NQVhfUFJPQ0VTU19SRVFVRVNUX1RJTUUgKyBGVERGX1RTQ0hfTUFYX1NDSEVEVUxFX1RJTUUpKSAqIDE2OworICAgIH0KKworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworCisjaWZuZGVmIEZUREZfTElURQorICAgIC8vIE5vcm1hbCBtb2RlCisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgRlRERl9OUl9PRl9SRVFfQlVGRkVSUzsgbisrKQorICAgIHsKKyAgICAgICAgaWYgKEZUREZfdHhQZW5kaW5nTGlzdFsgbiBdLmFkZHJNb2RlICE9IEZUREZfTk9fQUREUkVTUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZiAvKiAhRlRERl9MSVRFICovCisjaWYgRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYKKyAgICByZXR1cm4gRlRERl9zZGJHZXRTbGVlcFRpbWUoKTsKKyNlbHNlIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisgICAgcmV0dXJuIDB4ZmZmZmZmZmY7CisjZW5kaWYgLyogRlRERl9VU0VfU0xFRVBfRFVSSU5HX0JBQ0tPRkYgKi8KKworfQorCitGVERGX0Jvb2xlYW4gRlRERl9wcmVwYXJlRm9yU2xlZXAoRlRERl9VU2VjIHNsZWVwVGltZSkKK3sKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorCisgICAgaWYgKEZUREZfcGliLmxlRW5hYmxlZCB8fCBGVERGX3BpYi50c2NoRW5hYmxlZCkKKyAgICB7CisgICAgICAgIGlmIChzbGVlcFRpbWUgPCAyICogRlRERl9sb3dQb3dlckNsb2NrQ3ljbGVVU2VjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRlRERl9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcnJlY3Qgc2xlZXB0aW1lIHdpdGggdGhlIGluYWNjdXJhY3kgb2YgdGhpcyBmdW5jdGlvbgorICAgICAgICBzbGVlcFRpbWUgLT0gMiAqIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlVVNlYzsKKworICAgICAgICBpZiAoc2xlZXBUaW1lIDwgRlRERl93YWtlVXBMYXRlbmN5VVNlYyArIDUwMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZUREZfRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKyAgICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50IHZhbHVlIG9mIGJvdGggdGhlIGV2ZW50IGdlbmVyYXRvciBhbmQgdGhlIHRpbWVzdGFtcCBnZW5lcmF0b3IKKyAgICAvLyBhbmQgcGhhc2Ugb24gdGhlIHJpc2luZyBlZGdlIG9mIExQX0NMSworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMLCAxKTsKKworI2VuZGlmCisgICAgLy8gU2F2ZSBjdXJyZW50IExNQUMgUE0gY291bnRlcnMKKyAgICBGVERGX2xtYWNDb3VudGVycy5mY3NFcnJvckNudCArPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQpOworICAgIEZUREZfbG1hY0NvdW50ZXJzLnR4U3RkQWNrQ250ICs9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQpOworICAgIEZUREZfbG1hY0NvdW50ZXJzLnJ4U3RkQWNrQ250ICs9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCk7CisKKyNpZiAhZGVmaW5lZChGVERGX05PX0NTTCkgfHwgIWRlZmluZWQoRlRERl9OT19UU0NIKQorICAgIHZvbGF0aWxlIHVpbnQzMl90ICpnZXRHZW5lcmF0b3JWYWxFID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FKTsKKworICAgIC8vIFdhaXQgdW50aWwgZGF0YSBpcyByZWFkeQorICAgIHdoaWxlICgoKmdldEdlbmVyYXRvclZhbEUgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX0UpID09IDApCisgICAgeyB9CisKKyAgICBGVERGX2V2ZW50Q3VyclZhbCAgICAgICAgICA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMKTsKKyAgICBGVERGX3RpbWVTdGFtcEN1cnJWYWwgICAgICA9IEZUREZfR0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCk7CisgICAgRlRERl90aW1lU3RhbXBDdXJyUGhhc2VWYWwgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCk7CisKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAqZ2V0R2VuZXJhdG9yVmFsRSAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FOworI2Vsc2UKKyAgICAqZ2V0R2VuZXJhdG9yVmFsRSAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX0U7CisjZW5kaWYKKyAgICB1aW50NjRfdCBuZXh0V2FrZVVwVGhyOworI2lmIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGCisgICAgdWludDY0X3QgcGljb1NsZWVwVGltZSA9ICh1aW50NjRfdClzbGVlcFRpbWUgKiAxMDAwMDAwOworICAgIG5leHRXYWtlVXBUaHIgPSAocGljb1NsZWVwVGltZSAtIEZUREZfd2FrZVVwTGF0ZW5jeSkgLyBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZTsKKyNlbHNlIC8qIEZUREZfVVNFX1NMRUVQX0RVUklOR19CQUNLT0ZGICovCisKKyAgICBpZiAoRlRERl9waWIubGVFbmFibGVkIHx8IEZUREZfcGliLnRzY2hFbmFibGVkKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgcGljb1NsZWVwVGltZSA9ICh1aW50NjRfdClzbGVlcFRpbWUgKiAxMDAwMDAwOworICAgICAgICBuZXh0V2FrZVVwVGhyID0gKHBpY29TbGVlcFRpbWUgLSBGVERGX3dha2VVcExhdGVuY3kpIC8gRlRERl9sb3dQb3dlckNsb2NrQ3ljbGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5leHRXYWtlVXBUaHIgPSBGVERGX2NzbWFjYVdha2V1cFRocjsKKyAgICB9CisKKyNlbmRpZiAvKiBGVERGX1VTRV9TTEVFUF9EVVJJTkdfQkFDS09GRiAqLworCisgICAgLy8gU2V0IHdha2UgdXAgdGhyZXNob2xkCisgICAgdWludDMyX3Qgd2FrZVVwSW50VGhyID0gRlRERl9ldmVudEN1cnJWYWwgKyBuZXh0V2FrZVVwVGhyOworICAgIC8vIE5vdGUgdGhhdCBmb3IgSUMgcmV2cyBvdGhlciB0aGFuIEEgdGhlIHNpemUgb2YgV0FLRVVQSU5UVEhSIGlzIDI1IGJpdHMuCisgICAgRlRERl9TRVRfRklFTEQoQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIsIHdha2VVcEludFRocik7CisgICAgRlRERl9TRVRfRklFTEQoQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUsIDEpOworI2VuZGlmCisgICAgRlRERl9leGl0Q3JpdGljYWwoKTsKKworICAgIHJldHVybiBGVERGX1RSVUU7Cit9CisKK3ZvaWQgRlRERl93YWtlVXAodm9pZCkKK3sKKyNpZm5kZWYgRlRERl9QSFlfQVBJCisgICAgRlRERl9jcml0aWNhbFZhcigpOworICAgIEZUREZfZW50ZXJDcml0aWNhbCgpOworCisgICAgRlRERl9TRVRfRklFTEQoQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUsIDApOworCisjaWYgIWRlZmluZWQoRlRERl9OT19DU0wpIHx8ICFkZWZpbmVkKEZUREZfTk9fVFNDSCkKKyAgICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50IHZhbHVlIG9mIGJvdGggdGhlIGV2ZW50IGdlbmVyYXRvciBhbmQgdGhlIHRpbWVzdGFtcCBnZW5lcmF0b3IKKyAgICAvLyBhbmQgcGhhc2Ugb24gdGhlIHJpc2luZyBlZGdlIG9mIExQX0NMSworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMLCAxKTsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90ICpnZXRHZW5lcmF0b3JWYWxFID0gRlRERl9HRVRfRklFTERfQUREUihPTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FKTsKKworICAgIC8vIFdhaXQgdW50aWwgZGF0YSBpcyByZWFkeQorICAgIHdoaWxlICgoKmdldEdlbmVyYXRvclZhbEUgJiBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX0UpID09IDApCisgICAgeyB9CisKKyAgICB1aW50MzJfdCBldmVudE5ld0N1cnJWYWwgPSBGVERGX0dFVF9GSUVMRChPTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCk7CisKKyNpZmRlZiBTSU1VTEFUT1IKKyAgICAqZ2V0R2VuZXJhdG9yVmFsRSAmPSB+TVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FOworI2Vsc2UKKyAgICAqZ2V0R2VuZXJhdG9yVmFsRSAgPSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX0U7CisjZW5kaWYKKworICAgIC8vIEJhY2t3YXJkIGNhbGN1bGF0ZSB0aGUgdGltZSBzbGVwdAorICAgIC8vRlRERl9QU2VjIHNsZWVwVGltZSA9ICggKHVpbnQ2NF90KSggZXZlbnROZXdDdXJyVmFsIC0gRlRERl9ldmVudEN1cnJWYWwgKSAqIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlICkgKyBGVERGX3dha2VVcExhdGVuY3k7CisKKyAgICBGVERGX1BTZWMgc2xlZXBUaW1lOworCisgICAgaWYgKGV2ZW50TmV3Q3VyclZhbCA+PSBGVERGX2V2ZW50Q3VyclZhbCkgICAvKiBDaGVjayBmb3Igd3JhcHMuICovCisgICAgeworICAgICAgICBzbGVlcFRpbWUgPSAoZXZlbnROZXdDdXJyVmFsIC0gRlRERl9ldmVudEN1cnJWYWwpICogRlRERl9sb3dQb3dlckNsb2NrQ3ljbGUgICsKKyAgICAgICAgICAgICAgICAgICAgRlRERl93YWtlVXBMYXRlbmN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzbGVlcFRpbWUgPSAoZXZlbnROZXdDdXJyVmFsICsKKyAgICAgICAgICAgICAgICAgICAgIChNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMIC0gRlRERl9ldmVudEN1cnJWYWwpKSAqCisgICAgICAgICAgICAgICAgICAgIEZUREZfbG93UG93ZXJDbG9ja0N5Y2xlICArIEZUREZfd2FrZVVwTGF0ZW5jeTsKKyAgICB9CisKKyAgICAvLyBDYWxjdWxhdGUgc3luYyB2YWx1ZXMKKyAgICB1aW50NjRfdCBuZXdTeW5jVmFscyA9ICgodWludDY0X3QpRlRERl90aW1lU3RhbXBDdXJyVmFsIDw8IDgpIHwgKEZUREZfdGltZVN0YW1wQ3VyclBoYXNlVmFsICYgMHhmZik7CisgICAgbmV3U3luY1ZhbHMgKz0gKHNsZWVwVGltZSAvIDYyNTAwKSArIDE7CisKKyAgICB1aW50MzJfdCBzeW5jVGltZXN0YW1wVGhyICAgICAgPSBGVERGX2V2ZW50Q3VyclZhbCArIChzbGVlcFRpbWUgLyBGVERGX2xvd1Bvd2VyQ2xvY2tDeWNsZSk7CisgICAgdWludDMyX3Qgc3luY1RpbWVzdGFtcFZhbCAgICAgID0gKG5ld1N5bmNWYWxzICYgMHhmZmZmZmZmZjAwKSA+PiA4OworICAgIHVpbnQzMl90IHN5bmNUaW1lc3RhbXBQaGFzZVZhbCA9IChuZXdTeW5jVmFscyAmIDB4ZmYpOworCisgICAgLy8gU2V0IHZhbHVlcworICAgIEZUREZfU0VUX0ZJRUxEKE9OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiwgc3luY1RpbWVzdGFtcFRocik7CisgICAgRlRERl9TRVRfRklFTEQoT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMLCBzeW5jVGltZXN0YW1wVmFsKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCwgc3luY1RpbWVzdGFtcFBoYXNlVmFsKTsKKyAgICBGVERGX1NFVF9GSUVMRChPTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBFTkEsIDEpOworI2VuZGlmCisKKyAgICBGVERGX2V4aXRDcml0aWNhbCgpOworCisjaWZuZGVmIEZUREZfTk9fQ1NMCisgICAgRlRERl93YWtlVXBFbmFibGVMZSAgID0gRlRERl9waWIubGVFbmFibGVkOworICAgIEZUREZfcGliLmxlRW5hYmxlZCAgICA9IEZUREZfRkFMU0U7CisjZW5kaWYgLyogRlRERl9OT19DU0wgKi8KKworI2lmbmRlZiBGVERGX05PX1RTQ0gKKyAgICBGVERGX3dha2VVcEVuYWJsZVRzY2ggPSBGVERGX3BpYi50c2NoRW5hYmxlZDsKKyAgICBGVERGX3BpYi50c2NoRW5hYmxlZCAgPSBGVERGX0ZBTFNFOworI2VuZGlmIC8qIEZUREZfTk9fVFNDSCAqLworI2VuZGlmIC8qICEgRlRERl9QSFlfQVBJICovCisgICAgLy8gSW5pdCBMTUFDCisgICAgRlRERl9pbml0TG1hYygpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL3JlZ21hcC5oIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1NESy9pbnRlcmZhY2VzL2Z0ZGYvc3JjL3JlZ21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDUwM2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nU0RLL2ludGVyZmFjZXMvZnRkZi9zcmMvcmVnbWFwLmgKQEAgLTAsMCArMSw4NjA5IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ3JlYXRlZCBhdCAyNS4xMS4yMDE0LCAxMjo0MiBieSBta3JlZ21hcAorLy8gICByZWxlYXNlOiB2Ml80MiAoYnVpbGQgZGF0ZSBPY3QgIDkgMjAxNCkKKy8vICAgb3B0aW9uczogIC1pIGZ0ZGZfc3JjLnJnbSAtaGRyIC1hbGwKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaWZuZGVmIF9mdGRmCisjZGVmaW5lIF9mdGRmCisKKyNpZiBkZ19jb25maWdCTEFDS19PUkNBX0lDX1JFViA9PSBCTEFDS19PUkNBX0lDX1JFVl9BCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfZmlmbworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIFNQRUNJQUwsICBFWEVNUExBUlksICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCAKKyAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgCisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAgICAweDQwMDgwMDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAgIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAgICAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8xRCAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8yRCAgIDB4MjAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fSU5UVkxfMkQgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8xRCAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8yRCAgIDB4MjAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fSU5UVkxfMkQgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9maWZvCisgKgorICogVHJhbnNtaXQgZmlmbyBidWZmZXIsIGNvbnRhaW5zIDMyIGFkZHJlc3NlcyBwZXIgZW50cnkgKDMyYiB4IDMyYSA9IDEyOEIpLiBUaGVyZSBhcmUgNCBlbnRyaWVzIHN1cHBvcnRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8KKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9tZXRhX2RhdGFfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMCAgMHg0MDA4MDIwMAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAgIDB4NTdmZmZmZmYKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wX0lOVFZMICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEhfTlVNICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9GUkFNRV9MRU5HVEhfSU5UVkwgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUl9OVU0gICAgICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUl9JTlRWTCAgICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRV9OVU0gICAgICAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRV9JTlRWTCAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BX05VTSAgICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BX0lOVFZMICAgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVF9OVU0gICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVF9JTlRWTCAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQV9OVU0gICAgICAgICAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQV9JTlRWTCAgICAgICAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9mcmFtZV9sZW5ndGgKKyAqCisgKiBGcmFtZSBsZW5ndGgKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCAgMHg3ZgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIIDcKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9waHlBdHRyCisgKgorICogRHVyaW5nIHRoZSBSWC1PTiBwaGFzZSwgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgcGh5UnhBdHRyWzE2XSBzb3VyY2VzIHRoZSBQSFlBVFRSIG91dHB1dCBzaWduYWwgdG8gdGhlIERQSFkuCisgKiBUaGlzIGlzIGFsc28gYXBwbGljYWJsZSBkdXJpbmcgYSBDQ0Egb3IgRW5lcmd5IGRldGVjdCBzY2FuIHBoYXNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSICAgICAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiAgICAgICAweDdmZmY4MAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiAgICAgICA3CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUEhZQVRUUiAgICAgIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fZnJhbWV0eXBlCisgKgorICogRGF0YS9DbWQvQWNrIGV0Yy4gQWxzbyBpbmRpY2F0ZSB3YWtldXAgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSAgICAgMHgzODAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9GUkFNRVRZUEUgICAgIDIzCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFICAgIDMKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQ3NtYUNhX2VuYQorICoKKyAqIEluZGljYXRlcyB3aGV0aGVyIGEgQ1NNQS1DQSBpcyByZXF1aXJlZCBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGlzIHBhY2tldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgICAgMHg0MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BICAgIDI2CisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQWNrUmVxdWVzdAorICoKKyAqIEluZGljYXRlcyB3aGV0aGVyIGFuIGFja25vd2xlZGdlIGlzIGV4cGVjdGVkIGZyb20gdGhlIHJlY2lwaWVudCBvZiB0aGlzIHBhY2tldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1QgICAgMHgxMDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVCAgICAyOAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1QgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0NSQzE2X2VuYQorICoKKyAqIEluZGljYXRlcyB3aGV0aGVyIENSQzE2IGluc2VydGlvbiBtdXN0IGJlIGVuYWJsZWQgb3Igbm90LgorICogIDAgOiBObyBoYXJkd2FyZSBpbnNlcnRlZCBDUkMxNgorICogIDEgOiBIYXJkd2FyZSBpbnNlcnRzIENSQzE2CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkEgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSAgICAgMzAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkEgICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfbWV0YV9kYXRhXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEgIDB4NDAwODAyMDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xICAweGZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMV9JTlRWTCAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fTUFDU05fTlVNICAgICAgICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fTUFDU05fSU5UVkwgICAgICAgICAgIDB4MTAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX21hY1NOCisgKgorICogU2VxdWVuY2UgTnVtYmVyIG9mIHRoaXMgcGFja2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTiAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTiAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTiA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9yZXR1cm5fc3RhdHVzXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wICAweDQwMDgwMjQwCisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wICAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzBfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wX0lOVFZMICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUF9OVU0gICAgICAgICAgIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVBfSU5UVkwgICAgICAgICAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9UeFRpbWVzdGFtcAorICoKKyAqIFRyYW5zbWl0IFRpbWVzdGFtcAorICogVGhlIFRpbWVTdGFtcCBvZiB0aGUgdHJhbnNtaXR0ZWQgcGFja2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVAgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3R4X3JldHVybl9zdGF0dXNfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEgIDB4NDAwODAyNDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEgIDB4MWYKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzFfSU5UVkwgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUxfTlVNICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMX0lOVFZMICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQUZBSUxfTlVNICAgICAgICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMX0lOVFZMICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFU19OVU0gICAgICAgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVNfSU5UVkwgICAgIDB4MTAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9BY2tGYWlsCisgKgorICogQWNrbm93bGVkZ2VtZW50IHN0YXR1cworICogIDAgOiBTVUNDRVNTCisgKiAgMSA6IEZBSUwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTCAgICAgICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMICAgICAgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTCAgICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTCAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQ3NtYUNhRmFpbAorICoKKyAqIENTTUEtQ0Egc3RhdHVzCisgKiAgMCA6IFNVQ0NFU1MKKyAqICAxIDogRkFJTAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMICAgICAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQUZBSUwgICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMICAgICAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMICAgICAgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX0NzbWFDYU5yUmV0cmllcworICoKKyAqIE51bWJlciBvZiBDU01BLUNBIHJldHJpZXMKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVMgIDB4MWMKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUyAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUyAzCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yeF9tZXRhXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wICAgIDB4NDAwODAyODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzAgICAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMCAgICAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzBfTlVNICAgICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzBfSU5UVkwgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QX05VTSAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yZXRlbnRpb25fcmFtX3J4X3RpbWVzdGFtcAorICoKKyAqIFRpbWVzdGFtcCB0YWtlbiB3aGVuIGZyYW1lIHdhcyByZWNlaXZlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yeF9tZXRhXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xICAgICAgICAgICAgIDB4NDAwODAyODQKKyNkZWZpbmUgU0laRV9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEgICAgICAgICAgICAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMSAgICAgICAgICAgICAweGZmZmQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMV9OVU0gICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMV9JTlRWTCAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUl9OVU0gICAgICAgICAgICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FUlJPUl9JTlRWTCAgICAgICAgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SX05VTSAgICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SX0lOVFZMICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9OVU0gICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVkVSU0lPTl9FUlJPUl9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1JfTlVNICAgICAgICAgICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1JfSU5UVkwgICAgICAgICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1JfTlVNICAgICAgICAgICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1JfSU5UVkwgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUl9OVU0gICAgICAgICAgICAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUl9JTlRWTCAgICAgICAgICAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SX05VTSAgICAgMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SX0lOVFZMICAgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1JfTlVNICAgICAgIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1JfSU5UVkwgICAgIDB4MTAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9jcmMxNl9lcnJvcgorICoKKyAqIENSQyBlcnJvciwgYXBwbGljYWJsZSBmb3IgdHJhbnNwYXJlbnQgbW9kZSBvbmx5CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SICAgICAgICAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1IgICAgICAgICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SICAgICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX3Jlc19mcm1fdHlwZV9lcnJvcgorICoKKyAqIE5vdCBzdXBwb3J0ZWQgZnJhbWUgdHlwZSBlcnJvciwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1RZUEVfRVJST1IgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SICAgICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fcmVzX2ZybV92ZXJzaW9uX2Vycm9yCisgKgorICogTm90IHN1cHBvcnRlZCBmcmFtZSB2ZXJzaW9uIGVycm9yLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1ZFUlNJT05fRVJST1IgIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SICAzCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fZHBhbmlkX2Vycm9yCisgKgorICogRCBQQU4gSUQgZXJyb3IsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RQQU5JRF9FUlJPUiAgICAgICAgICAgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SICAgICAgICAgICAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgICAgICAgICAgIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9kYWRkcl9lcnJvcgorICoKKyAqIEQgQWRkcmVzcyBlcnJvciwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1IgICAgICAgICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SICAgICAgICAgICAgNQorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX3NwYW5pZF9lcnJvcgorICoKKyAqIFBBTiBJRCBlcnJvciwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fU1BBTklEX0VSUk9SICAgICAgICAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1IgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUiAgICAgICAgICAgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUiAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX2lzcGFuaWRfY29vcmRfZXJyb3IKKyAqCisgKiBSZWNlaXZlZCBmcmFtZSBub3QgZm9yIFBBTiBjb29yZGluYXRvciwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUiAgICBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SICAgIDB4ODAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0lTUEFOSURfQ09PUkRfRVJST1IgICAgNworI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0lTUEFOSURfQ09PUkRfRVJST1IgICAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fcXVhbGl0eV9pbmRpY2F0b3IKKyAqCisgKiBMaW5rIFF1YWxpdHkgSW5kaWNhdGlvbgorICoKKyAqICMgJHNvZnR3YXJlX3NjcmF0Y2hAcmV0ZW50aW9uX3JhbQorICogIyBUWCByYW0gbm90IHVzZWQgYnkgaGFyZHdhcmUsIGNhbiBiZSB1c2VkIGJ5IHNvZnR3YXJlIGFzIHNjcmF0Y2ggcmFtIHdpdGggcmV0ZW50aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiAgICAgIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SICAgICAgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiAgICAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9RVUFMSVRZX0lORElDQVRPUiAgICAgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3J4X3JhbV9yeF9maWZvCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SWF9SQU1fUlhfRklGTyAgICAweDQwMDg4MDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX1JYX1JBTV9SWF9GSUZPICAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUlhfUkFNX1JYX0ZJRk8gICAgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX05VTV8xRCAgIDB4OAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX0lOVFZMXzFEIDB4ODAKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19OVU1fMkQgICAweDIwCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fSU5UVkxfMkQgMHg0CisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fTlVNXzFEICAgMHg4CisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fSU5UVkxfMUQgMHg4MAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX05VTV8yRCAgIDB4MjAKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19JTlRWTF8yRCAweDQKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yeF9yYW1fcnhfZmlmbworICoKKyAqIFJlY2VpdmUgZmlmbyByYW0sIGNvbnRhaW5zIDMyIGFkZHJlc3NlcyBwZXIgZW50cnkgKDMyYiB4IDMyYSA9IDEyOEIpLiBUaGVyZSBhcmUgOCBlbnRyaWVzIHN1cHBvcnRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JYX1JBTV9SWF9GSUZPICBJTkRfUl9GVERGX1JYX1JBTV9SWF9GSUZPCisjZGVmaW5lIE1TS19GX0ZUREZfUlhfUkFNX1JYX0ZJRk8gIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SWF9SQU1fUlhfRklGTyAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SWF9SQU1fUlhfRklGTyAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfUmVsX05hbWUKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgIDB4NDAwOTAwMDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FICAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRV9JTlRWTCAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRV9JTlRWTCAgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SZWxfTmFtZQorICoKKyAqIE5hbWUgb2YgdGhlIHJlbGVhc2UKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX0J1aWxkVGltZQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgIDB4NDAwOTAwMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRV9OVU0gICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfSU5UVkwgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRV9JTlRWTCAgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9CdWlsZFRpbWUKKyAqCisgKiBCdWlsZCB0aW1lIG9mIGRldmljZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nbG9iX2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGZmMDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4NmZmMGUKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAgIDB4NDAwOTAwMjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wICAweDZmZjBlCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfSXNQQU5Db29yZGluYXRvcgorICoKKyAqIEVuYWJsZS9kaXNhYmxlIHJlY2VpdmVyIGNoZWNrIG9uIGFkZHJlc3MKKyAqIGZpZWxkcyAoMD1lbmFibGVkLCAxPWRpc2FibGVkKQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1BBTkNPT1JESU5BVE9SICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfSVNQQU5DT09SRElOQVRPUiAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9kbWFfcmVxCisgKgorICogU291cmNlIG9mIHRoZSBSWF9ETUFfUkVRIG91dHB1dCBvZiB0aGlzIGJsb2NrLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9ETUFfUkVRICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0RNQV9SRVEgICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfRE1BX1JFUSAgICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0RNQV9SRVEgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9kbWFfcmVxCisgKgorICogU291cmNlIG9mIHRoZSBUWF9ETUFfUkVRIG91dHB1dCBvZiB0aGlzIGJsb2NrLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9ETUFfUkVRICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0RNQV9SRVEgICAgICAgIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRE1BX1JFUSAgICAgICAgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0RNQV9SRVEgICAgICAgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1NpbXBsZUFkZHJlc3MKKyAqCisgKiBTaW1wbGUgYWRkcmVzcyBvZiB0aGUgUEFOIGNvb3JkaW5hdG9yCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0lNUExFQUREUkVTUyAgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSU1QTEVBRERSRVNTICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0lNUExFQUREUkVTUyA4CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0xFZW5hYmxlZAorICoKKyAqIElmIHNldCwgTG93IEVuZXJneSBtb2RlIGlzIGVuYWJsZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTEVFTkFCTEVEICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNMRUVOQUJMRUQgICAgICAweDIwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNMRUVOQUJMRUQgICAgICAxNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU0NIZW5hYmxlZAorICoKKyAqIElmIHNldCwgVFNDSCBtb2RlIGlzIGVuYWJsZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNDSEVOQUJMRUQgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0NIRU5BQkxFRCAgICAweDQwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0NIRU5BQkxFRCAgICAxOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQ0hFTkFCTEVEICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZmZmZmZmZiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMSAgMHg0MDA5MDAyNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzEgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1BBTklkCisgKgorICogVGhlIHZhbHVlcyAweEZGRkYgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZQorICogaXMgbm90IGFzc29jaWF0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFOSUQgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBTklEICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQU5JRCAgICAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQU5JRCAgICAgICAgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNTaG9ydEFkZHJlc3MKKyAqCisgKiBUaGUgdmFsdWVzIDB4RkZGRiBhbmQgMHhGRkZFIGluZGljYXRlCisgKiB0aGF0IG5vIElFRUUgU2hvcnQgQWRkcmVzcyBpcyBhdmFpbGFibGUuCisgKiBUaGUgbGF0dGVyIG9uZSBpcyB1c2VkIGlmIHRoZSBkZXZpY2UgaQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSE9SVEFERFJFU1MgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTICAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSE9SVEFERFJFU1MgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nbG9iX2NvbnRyb2xfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGZmZmZmZmZmICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8yICAweDQwMDkwMDI4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfYUV4dGVuZGVkQWRkcmVzc19sCisgKgorICogVW5pcXVlIGRldmljZSBhZGRyZXNzLCBsb3dlciAzMiBiaXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19MICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19MICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19MIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nbG9iX2NvbnRyb2xfMworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGZmZmZmZmZmICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8zICAweDQwMDkwMDJjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMyAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfYUV4dGVuZGVkQWRkcmVzc19oCisgKgorICogVW5pcXVlIGRldmljZSBhZGRyZXNzLCBoaWdoZXIgMTYgYml0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0ggIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZiZmZmZmZlCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wICAweDQwMDkwMDMwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMCAgMHhmYmZmZmZmZQorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfUnhvbkR1cmF0aW9uCisgKgorICogVGltZSB0aGUgUnggbXVzdCBiZSBvbgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWE9ORFVSQVRJT04gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OICAweDFmZmZmZmUKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYT05EVVJBVElPTiAyNAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeEFsd2F5c09uCisgKgorICogSWYgc2V0LCB0aGUgcmVjZWl2ZXIgc2hhbGwgYmUgYWx3YXlzIG9uIGlmCisgKiBSeEVuYWJsZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQUxXQVlTT04gICAgMHgyMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEFMV0FZU09OICAgIDI1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiAgIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9wdGkKKyAqCisgKiBJbmZvIHRvIGFyYml0ZXIgaWYgcGh5X2VuIGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVEkgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJICAgICAgICAgICAweDc4MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVEkgICAgICAgICAgIDI3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJICAgICAgICAgIDQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfa2VlcF9waHlfZW4KKyAqCisgKiBXaGVuIHRoZSB0cmFuc21pdCBvciByZWNlaXZlIGFjdGlvbiBpcyByZWFkeSAoTG1hY1JlYWR5NFNsZWVwIHdpbGwgaXMgc2V0KSwgdGhlIHBoeV9lbiBzaWduYWwgaXMgY2xlYXJlZCB1bmxlc3MgdGhlIGNvbnRyb2wgcmVnaXN0ZXIga2VlcF9waHlfZW4gaXMgc2V0LgorICogV2hlbiB0aGUgY29udHJvbCByZWdpc3RlciBrZWVwX3BoeV9lbiBpcyBzZXQsIHRoZSBzaWduYWwgcGh5X2VuIHNoYWxsIHJlbWFpbiBiZWluZyBzZXQgdW50aWwgdGhlIGtlZXBfcGh5X2VuIGlzIGNsZWFyZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0tFRVBfUEhZX0VOICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0tFRVBfUEhZX0VOICAgMzEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfVHhQaXBlUHJvcERlbGF5CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgIDB4NDAwOTAwMzQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1R4UGlwZVByb3BEZWxheQorICoKKyAqIFByb3AgZGVsYXkgb2YgdHggcGlwZSwgc3RhcnQgdG8gRFBIWQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX01hY0Fja1dhaXREdXJhdGlvbgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDM2ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAgMHg0MDA5MDAzOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfTWFjQWNrV2FpdER1cmF0aW9uCisgKgorICogTWF4IHRpbWUgdG8gd2FpdCBmb3IgYSAobm9ybWFsKSBBQ0sKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9NYWNFbmhBY2tXYWl0RHVyYXRpb24KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgzNjAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gIDB4NDAwOTAwM2MKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gIDB4ZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfTWFjRW5oQWNrV2FpdER1cmF0aW9uCisgKgorICogVGhlIG1heGltdW0gdGltZSAoaW4gPz9zKSB0byB3YWl0IGZvciBhbgorICogZW5oYW5jZWQgYWNrbm93bGVkZ2VtZW50IGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEgIDB4NDAwOTAwNDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xICAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVJ4QXR0cgorICoKKyAqIHBoeWF0dHIgdG8gRFBIWSBkdXJpbmcgUnggb3BlcmF0aW9uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYQVRUUiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIgIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhBVFRSICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhBVFRSIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmMDEKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIgIDB4NDAwOTAwNDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8yICAweGZmZmZmZjAxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuRW5hYmxlCisgKgorICogaWYgc2V0LCBFbmVyZ3kgRGV0ZWN0IHNjYW4gd2lsbCBiZSBkb25lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkVOQUJMRSAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORU5BQkxFICAgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0VkU2NhbkR1cmF0aW9uCisgKgorICogTGVuZ3RoIG9mIEVEIHNjYW4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORFVSQVRJT04gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORFVSQVRJT04gIDB4ZmZmZmZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkRVUkFUSU9OICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORFVSQVRJT04gMjQKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NGM0ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMyAgMHg0MDA5MDA0OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMgIDB4ZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNNYXhGcmFtZVRvdGFsV2FpdFRpbWUKKyAqCisgKiBNYXggdGltZSB0byB3YWl0IGZvciBhIHJlcXVlc3RlZCBEYXRhIEZyYW1lIG9yIGFuIGFubm91bmNlZCBicm9hZGNhc3QgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYRlJBTUVUT1RBTFdBSVRUSU1FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEZSQU1FVE9UQUxXQUlUVElNRSAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DY2FJZGxlV2FpdAorICoKKyAqIFRpbWUgdG8gd2FpdCBhZnRlciBDQ0EgcmV0dXJuZWQgIm1lZGl1bSBpZGxlIiBiZWZvcmUgc3RhcnRpbmcgVFgtT04gKGluIHVzKS4KKyAqIE5vdGU6IG5vdCBhcHBsaWNhYmxlIGluIFRTQ0ggbW9kZSBzaW5jZSB0aGVyZSBtYWNUU1J4VHggc2hhbGwgYmUgdXNlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBSURMRVdBSVQgICAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQUlETEVXQUlUICAgICAgICAgICAgICAgMHhmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQUlETEVXQUlUICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCAgICAgICAgICAgICAgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sX29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3CisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TICAweDQwMDkwMDUwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TICAweDcKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nZXRHZW5lcmF0b3JWYWwKKyAqCisgKiBJZiBzZXQsIHRoZSBjdXJyZW50IHZhbHVlcyBvZiBXVSBnZW4gYW5kIFRTIGdlbiB3aWxsIGJlIGNhcHR1cmVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTCAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUwgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUwgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeEVuYWJsZQorICoKKyAqIElmIHNldCwgcmVjZWl2aW5nIGRhdGEgbWF5IGJlIGRvbmUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEVOQUJMRSAgICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgICAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU2luZ2xlQ0NBCisgKgorICogSWYgc2V0LCBhIHNpbmdsZSBDQ0Egd2lsbCBiZSBwZXJmb3JtZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0lOR0xFQ0NBICAgICAgICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAgICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAgICAgICAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMgIDB4NDAwOTAwNTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUyAgMHhmZjQ2CisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1JlYWR5NHNsZWVwCisgKgorICogSW5kaWNhdGVzIHRoYXQgdGhlIExNQUMgaXMgcmVhZHkgdG8gZ28gdG8gc2xlZXAuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQICAgICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQICAgICAgICAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0NDQVN0YXQKKyAqCisgKiBWYWx1ZSBzaW5nbGUgQ0NBIHdoZW4gQ0NBc3RhdF9lIGlzIHNldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVCAgICAgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVQgICAgICAgICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfV2FrZXVwVGltZXJFbmFibGVTdGF0dXMKKyAqCisgKiBTdGF0dXMgb2YgV2FrZXVwVGltZXJFbmFibGUgYWZ0ZXIgYmVpbmcgY2xvY2tlZCBieSBMUF9DTEsgKHNob3dpbmcgaXQncyBlZmZlY3RpdmUgdmFsdWUpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTICAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5WYWx1ZQorICoKKyAqIFJlc3VsdCBvZiBFRCBzY2FuLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5WQUxVRSAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlZBTFVFICAgICAgICAgICAgICAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlZBTFVFICAgICAgICAgICAgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOVkFMVUUgICAgICAgICAgICAgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfRXZlbnRDdXJyVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAgMHg0MDA5MDA1OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfRXZlbnRDdXJyVmFsCisgKgorICogVmFsdWUgb2YgY2FwdHVyZWQgRXZlbnQgZ2VuZXJhdG9yCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1RpbWVTdGFtcEN1cnJWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAgMHg0MDA5MDA1YworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UaW1lU3RhbXBDdXJyVmFsCisgKgorICogVmFsdWUgb2YgY2FwdHVyZWQgVFMgZ2VuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfVGltZVN0YW1wQ3VyclBoYXNlVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAgMHg0MDA5MDA3NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfVGltZVN0YW1wQ3VyclBoYXNlVmFsCisgKgorICogVmFsdWUgb2YgY2FwdHVyZWQgVFMgZ2VuIHBoYXNlIHdpdGhpbiBhIHN5bWJvbAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTVHhBY2tEZWxheVZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgIDB4NDAwOTAwNzgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgIDB4ZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNUeEFja0RlbGF5VmFsCisgKgorICogVGhlIHRpbWUgaW4gdXMgbGVmdCB1bnRpbCB0aGUgYWNrIGZyYW1lIGlzIHNlbnQgYnkgdGhlIGxtYWMKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQgIDB4NDAwOTAwNjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80ICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlTbGVlcFdhaXQKKyAqCisgKiBUaW1lIGJldHdlZW4gbmVnYXRlIGFuZCBhc3NlcnQgUEhZX0VOCisgKiBXaGVuIHRoZSBzaWduYWwgcGh5X2VuIGlzIGRlYXNzZXJ0ZWQsIGl0IHdpbGwgbm90IGJlIGFzc2VydGVkIHdpdGhpbiB0aGUgdGltZSBwaHlTbGVlcFdhaXQuCisgKiBUaGlzIHRpbWUgaXMgaW5kaWNhdGVkIGJ5IHRoZSBjb250cm9sIHJlZ2lzdGVyIHBoeVNsZWVwV2FpdCAocmVzb2x1dGlvbjogfnMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZU0xFRVBXQUlUICAgICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgICAgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4UGlwZVByb3BEZWxheQorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIFJ4UGlwZVByb3BEZWxheSBpbmRpY2F0ZXMgdGhlIHByb3BhZ2F0aW9uIGRlbGF5IGluIH5zIG9mIHRoZSBSeCBwaXBlbGluZSBiZXR3ZWVuIHRoZSBsYXN0IHN5bWJvbCBiZWluZyBjYXB0dXJlZCBhdCB0aGUgRFBIWSBpbnRlcmZhY2UgYW5kIHRoZSAiZGF0YSB2YWxpZCIgaW5kaWNhdGlvbiB0byB0aGUgTE1BQyBjb250cm9sbGVyLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFBJUEVQUk9QREVMQVkgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhQSVBFUFJPUERFTEFZICAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5QWNrQXR0cgorICoKKyAqIER1cmluZyB0cmFuc21pc3Npb24gb2YgYW4gQUNLIGZyYW1lLCBwaHlBY2tBdHRyIGlzIHVzZWQgYXMgcGh5QXR0ciBvbiB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIgICAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlBQ0tBVFRSICAgICAgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF81CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4OGMwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYwZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81ICAweDQwMDkwMDY0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNSAgMHhmZmZmMGZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfQWNrX1Jlc3BvbnNlX0RlbGF5CisgKgorICogSW4gb3JkZXIgdG8gaGF2ZSBzb21lIGZsZXhpYmlsaXR5IHRoZSBjb250cm9sIHJlZ2lzdGVyIEFja19SZXNwb25zZV9EZWxheSBpbmRpY2F0ZXMgdGhlIEFja25vd2xlZGdlIHJlc3BvbnNlIHRpbWUgaW4gfnMuCisgKiBUaGUgZGVmYXVsdCB2YWx1ZSBzaGFsbCBpcyAxOTIgfnMgKDEyIHN5bWJvbHMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9BQ0tfUkVTUE9OU0VfREVMQVkgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9BQ0tfUkVTUE9OU0VfREVMQVkgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9BQ0tfUkVTUE9OU0VfREVMQVkgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0NjYVN0YXRXYWl0CisgKgorICogVGhlIG91dHB1dCBDQ0FTVEFUIGlzIHZhbGlkIGFmdGVyIDggc3ltYm9scyArIHBoeVJ4U3RhcnR1cC4KKyAqIFRoZSA4IHN5bWJvbHMgYXJlIHByb2dyYW1tYWJsZSBieSBjb250cm9sIHJlZ2lzdGVyQ2NhU3RhdFdhaXRbNF0gaW4gc3ltYm9sIHRpbWVzbC4KKyAqIERlZmF1bHQgdmFsdWUgaXMgOGQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRXQUlUICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCAgICAgICAgIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCAgICAgICAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCAgICAgICAgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeUNzbWFDYUF0dHIKKyAqCisgKiBUaGUgY29udHJvbCByZWdpc3RlciBwaHlDc21hQ2FBdHRyIGlzIHVzZWQgdG8gc291cmNlIFBIWUFUVCBvbiB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIgICAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlDU01BQ0FBVFRSICAgICAgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF82CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4YzBjMjggIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82ICAweDQwMDkwMDY4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNiAgMHhmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0xpZnNQZXJpb2QKKyAqCisgKiBUaGUgTElGUyBwZXJpb2QgaXMgcHJvZ3JhbW1hYmxlIGJ5IExpZnNQZXJpb2QgKGluIHN5bWJvbHMpLgorICogVGhlIGRlZmF1bHQgaXMgNDAgc3ltYm9scyAoNjQwIH5zKSwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCAgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xJRlNQRVJJT0QgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCAgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1NpZnNQZXJpb2QKKyAqCisgKiBUaGUgU0lGUyBwZXJpb2QgaXMgcHJvZ3JhbW1hYmxlIGJ5IFNpZnNQZXJpb2QgKGluIHN5bWJvbHMpLgorICogVGhlIGRlZmF1bHQgaXMgMTIgc3ltYm9scyAoMTkyIH5zKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCAgIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSUZTUEVSSU9EICA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfV1VpZnNQZXJpb2QKKyAqCisgKiBUaGUgV2FrZVVwIElGUyBwZXJpb2QgaXMgcHJvZ3JhbW1hYmxlIGJ5IFdVaWZzUGVyaW9kIChpbiBzeW1ib2xzKS4KKyAqIFRoZSBkZWZhdWx0IGlzIDEyIHN5bWJvbHMgKDE5MiB+cykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dVSUZTUEVSSU9EICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dVSUZTUEVSSU9EICAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfV1VJRlNQRVJJT0QgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV1VJRlNQRVJJT0QgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzExCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEgIDB4NDAwOTAwNmMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEgIDB4MWZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4VG90YWxDeWNsZVRpbWUKKyAqCisgKiBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciB0byBjYWxjdWxhdGUgaWYgaXQgaXMgZWZmaWNpZW50IHRvIGRpc2FibGUgYW5kIGVuYWJsZSB0aGUgUEhZIFJ4IHVudGlsIHRoZSBSWiB0aW1lIGlzIHJlYWNoZWQsIGEgY29udHJvbCByZWdpc3RlciBpbmRpY2F0ZXMgdGhlIHRpbWUgbmVlZGVkIHRvIGRpc2FibGUgYW5kIGVuYWJsZSB0aGUgUEhZIFJ4OiBtYWNSeFRvdGFsQ3ljbGVUaW1lIChyZXNvbHV0aW9uIGluIDEwIHN5bSkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFRPVEFMQ1lDTEVUSU1FICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAxNgorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNEaXNDYVJ4T2ZmdG9SWgorICoKKyAqIFRoaXMgc3dpdGNoaW5nIG9mZiBhbmQgb24gb2YgdGhlIFBIWSBSeCBjYW4gYmUgZGlzYWJsZWQgd2hpdGggdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjRGlzQ2FSeE9mZnRvUlouCisgKiAgMCA6IERpc2FibGVkCisgKiAgMSA6IEVuYWJsZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRElTQ0FSWE9GRlRPUlogICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRElTQ0FSWE9GRlRPUlogICAgMHgxMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRElTQ0FSWE9GRlRPUlogICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNESVNDQVJYT0ZGVE9SWiAgIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF9kZWx0YQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4N2UKKyAqIEFjY2VzcyBtb2RlOiBELVJDVyAoZGVsdGEgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEgIDB4NDAwOTAwNzAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEgIDB4N2UKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVhZHk0c2xlZXBfZAorICoKKyAqIERlbHRhIGJpdCBmb3IgcmVnaXN0ZXIgIkxtYWNSZWFkeTRzbGVlcCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgICAgICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfRCAgICAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBfZQorICoKKyAqIFRoZSBTeW5jVGltZVN0YW1wX2UgZXZlbnQgaXMgc2V0IHdoZW4gdGhlIFRpbWVTdGFtcGdlbmVyYXRvciBpcyBsb2FkZWQgd2l0aCBTeW5jVGltZVN0YW1wVmFsLgorICogVGhpcyBvY2N1cnMgYXQgdGhlIHJpc2luZyBlZGdlIG9mIGxwX2NsayB3aGVuIFN5bmNUaW1lU3RhbXBFbmEgaXMgc2V0IGFuZCB0aGUgdmFsdWUgb2YgdGhlIEV2ZW50IGdlbmVyYXRvciBpcyBlcXVhbCB0byB0aGUgdmFsdWUgU3luY1RpbWVzdGFtcFRoci4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FICAgICAgICAgICAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX0UgICAgICAgICAgICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVUaHJfZQorICoKKyAqIEV2ZW50IHRoYXQgc3ltYm9sdGltZSBjb3VudGVyIG1hdGNoZWQgU3ltYm9sVGltZVRocgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UgICAgICAgICAgICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSAgICAgICAgICAgIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX0UgICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZTJUaHJfZQorICoKKyAqIEV2ZW50IHRoYXQgc3ltYm9sdGltZSBjb3VudGVyIG1hdGNoZWQgU3ltYm9sVGltZTJUaHIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSAgICAgICAgICAgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSAgICAgICAgICAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nZXRHZW5lcmF0b3JWYWxfZQorICoKKyAqIEV2ZW50IHdoaWNoIGluZGljYXRlcyB0aGF0IFdha2V1cFRpbWVyRW5hYmxlU3RhdHVzIGhhcyBjaGFuZ2VkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FICAgICAgICAgIDB4MjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FICAgICAgICAgIDUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfV2FrZXVwVGltZXJFbmFibGVTdGF0dXNfZAorICoKKyAqIERlbHRhIHdoaWNoIGluZGljYXRlcyB0aGUgZ2V0R2VuZXJhdG9yVmFsIHJlcXVlc3QgaXMgY29tcGxldGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgIDB4NDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF9tYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3ZQorICogQWNjZXNzIG1vZGU6IERNLVJXIChkZWx0YSBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyAgMHg0MDA5MDA4MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sgIDB4N2UKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVhZHk0c2xlZXBfbQorICoKKyAqIE1hc2sgYml0IGZvciBkZWx0YSBiaXQgIkxtYWNSZWFkeTRzbGVlcF9kIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTSAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9NICAgICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX00gICAgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9NICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgcmVnaXN0ZXIgU3luY1RpbWVTdGFtcF9lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfTSAgICAgICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9NICAgICAgICAgICAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfTSAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lVGhyX20KKyAqCisgKiBNYXNrIGZvciBTeW1ib2xUaW1lVGhyX2UKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9NICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX00gICAgICAgICAgICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSAgICAgICAgICAgIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSX00gICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZTJUaHJfbQorICoKKyAqIE1hc2sgZm9yIFN5bWJvbFRpbWUyVGhyX2UKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9NICAgICAgICAgICAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9NICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2dldEdlbmVyYXRvclZhbF9tCisgKgorICogTWFzayBmb3IgZ2V0R2VuZXJhdG9yVmFsX2UKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX00gICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfTSAgICAgICAgICAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfTSAgICAgICAgICA1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX00gICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlU3RhdHVzX20KKyAqCisgKiBNYXNrIGZvciBXYWtldXBUaW1lckVuYWJsZVN0YXR1c19kCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSAgMHg0MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSAgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19ldmVudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4NworICogQWNjZXNzIG1vZGU6IEUtUkNXIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQgIDB4NDAwOTAwOTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVCAgMHg3CisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRWRTY2FuUmVhZHlfZQorICoKKyAqIFRoZSBldmVudCBFZFNjYW5SZWFkeV9lIGlzIHNldCB0byBub3RpZnkgdGhhdCB0aGUgRUQgc2NhbiBpcyByZWFkeS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfRSAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0UgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfRSAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0UgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DQ0FzdGF0X2UKKyAqCisgKiBJZiBzZXQsIHRoZSBzaW5nbGUgQ0NBIGlzIHJlYWR5CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfRSAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX0UgICAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfRSAgICAgICAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX0UgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhUaW1lckV4cGlyZWRfZQorICoKKyAqIFNldCBpZiBvbmUgb2YgdGhlIHRpbWVycyBlbmFibGluZyB0aGUgUlgtT04gbW9kZSBleHBpcmVzIHdpdGhvdXQgaGF2aW5nIHJlY2VpdmVkIGFueSB2YWxpZCBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hc2sKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDcKKyAqIEFjY2VzcyBtb2RlOiBFTS1SVyAoZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLICAweDQwMDkwMDk0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLICAweDcKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5SZWFkeV9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJFZFNjYW5SZWFkeV9lIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX00gICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9NICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ0NBc3RhdF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJDQ0FzdGF0X2UiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfTSAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfTSAgICAgICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9NICAgICAgICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfTSAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFRpbWVyRXhwaXJlZF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJSeFRpbWVyRXhwaXJlZF9lIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NICAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX00gIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYwZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEgIDB4NDAwOTAwYTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMSAgMHhmZmZmMGZmZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX21vZGUKKyAqCisgKiBJZiB0aGUgY29udHJvbCByZWdpc3RlciBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCwgdGhlIExNQUMgY29udHJvbGxlciBjb250cm9sCisgKiBzaWduYWxzIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IHRoZSBsbWFjX21hbnVhbF9jb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9NT0RFICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAgICAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9NT0RFICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3BoeV9lbgorICoKKyAqIGxtYWNfbWFudWFsX3BoeV9lbiBjb250cm9scyB0aGUgUEhZX0VOIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfRU4gICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfRU4gICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3R4X2VuCisgKgorICogbG1hY19tYW51YWxfdHhfZW4gY29udHJvbHMgdGhlIFRYX0VOIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9FTiAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gICAgICAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9FTiAgICAgICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3J4X2VuCisgKgorICogbG1hY19tYW51YWxfcnhfZW4gY29udHJvbHMgdGhlIFJYX0VOIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9FTiAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gICAgICAgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9FTiAgICAgICAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3J4X3BpcGVfZW4KKyAqCisgKiBsbWFjX21hbnVhbF9yeF9waXBlX2VuIGNvbnRyb2xzIHRoZSByeF9lbmFibGUgc2lnbmFsIHRvd2FyZHMgdGhlIHJ4IHBpcGVsaW5lIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfUElQRV9FTiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU4gIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1JYX1BJUEVfRU4gIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9QSVBFX0VOIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfZWRfcmVxdWVzdAorICoKKyAqIGxtYWNfbWFudWFsX2VkX3JlcXVlc3QgY29udHJvbHMgdGhlIEVEX1JFUVVFU1QgaW50ZXJmYWNlIHNpZ25hbCB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0VEX1JFUVVFU1QgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9SRVFVRVNUICAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9SRVFVRVNUICA1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfdHhfZnJtX25yCisgKgorICogbG1hY19tYW51YWxfdHhfZnJtX25yIGNvbnRyb2xzIHRoZSBlbnRyeSBpbiB0aGUgdHggYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9GUk1fTlIgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRlJNX05SICAgMHhjMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRlJNX05SICAgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiAgMgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3B0aQorICoKKyAqIGxtYWNfbWFudWFsX3B0aSBjb250cm9scyB0aGUgUFRJIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QVEkgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUFRJICAgICAgICAgMHhmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BUSSAgICAgICAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QVEkgICAgICAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9waHlfYXR0cgorICoKKyAqIGxtYWNfbWFudWFsX3BoeV9hdHRyIGNvbnRyb2xzIHRoZSBQSFlfQVRUUiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0FUVFIgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9BVFRSICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9BVFRSICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0FUVFIgICAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9PUyAgMHg0MDA5MDBhNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfT1MgIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3R4X3N0YXJ0CisgKgorICogT25lIHNob3QgcmVnaXN0ZXIgd2hpY2ggdHJpZ2dlcnMgdGhlIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lIGZyb20gdGhlIHR4IGJ1ZmZlciBpbiBsbWFjX21hbnVhbF9tb2RlCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX1NUQVJUICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX1NUQVJUICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX1NUQVJUICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfU1RBUlQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUyAgMHg0MDA5MDBhOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUyAgMHhmZjAxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfY2NhX3N0YXQKKyAqCisgKiBsbWFjX21hbnVhbF9jY2Ffc3RhdCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBDQ0FfU1RBVAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9DQ0FfU1RBVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfQ0NBX1NUQVQgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfQ0NBX1NUQVQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9DQ0FfU1RBVCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfZWRfc3RhdAorICoKKyAqIGxtYWNfbWFudWFsX2VkX3N0YXQgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgRURfU1RBVCBpbnRlcmZhY2Ugc2lnbmFsLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9TVEFUICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCAgIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9TVEFUICA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDQyMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNyAgMHg0MDA5MDEwMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF83IDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1dVUGVyaW9kCisgKgorICogV2FrZS11cCBkdXJhdGlvbiBpbiBzeW1ib2xzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VQRVJJT0QgICAgICAgICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9EICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9EICAgICAgICAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0NTTHNhbXBsZVBlcmlvZAorICoKKyAqIFdoZW4gcGVyZm9ybWluZyBhIGlkbGUgbGlzdGVuaW5nLCB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCBmb3IgYXQgbGVhc3QgbWFjQ1NMc2FtcGxlUGVyaW9kIChpbiBzeW1ib2xzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU0FNUExFUEVSSU9EICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCAgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU0FNUExFUEVSSU9EICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzgKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF84ICAweDQwMDkwMTA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzggMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMc3RhcnRTYW1wbGVUaW1lCisgKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjQ1NMc3RhcnRTYW1wbGVUaW1lIGluZGljYXRlcyB0aGUgVGltZVN0YW1wIGdlbmVyYXRvciB0aW1lIChpbiBzeW1ib2xzKSB3aGVuIHRvIHN0YXJ0IGxpc3RlbmluZyAoY2FsbGVkICJpZGxlIGxpc3RlbmluZyIpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTVEFSVFNBTVBMRVRJTUUgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF85CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NDIgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzkgIDB4NDAwOTAxMDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85ICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xkYXRhUGVyaW9kCisgKgorICogQWZ0ZXIgdGhlIHdha2UtdXAgc2VxdWVuY2UgYSBmcmFtZSBpcyBleHBlY3RlZCwgdGhlIHJlY2VpdmVyIHdpbGwgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3QgYSBwZXJpb2Qgb2YgbWFjQ1NMZGF0YVBlcmlvZCAoaW4gc3ltYm9scykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzkKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgICAgICAgICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMREFUQVBFUklPRCAgICAgICAgMTYKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xGcmFtZVBlbmRpbmdXYWl0VAorICoKKyAqIElmIGEgbm9uIFdha2UtdXAgZnJhbWUgd2l0aCBGcmFtZSBQZW5kaW5nIGJpdCA9ICcxJyBpcyByZWNlaXZlZCwgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQgZm9yIGF0IGxlYXN0IGFuIGV4dHJhIHBlcmlvZCBvZiBtYWNDU0xGcmFtZVBlbmRpbmdXYWl0VCAoaW4gc3ltYm9scykgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCisgKiBUaGUgdGltZSB0aGUgRW5oYW5jZWQgQUNLIHRyYW5zbWlzc2lvbiBsYXN0cyAoaWYgYXBwbGljYWJsZSkgaXMgaW5jbHVkZWQgaW4gdGhpcyB0aW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCAgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF8xMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDIwMDAwMDAwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYwMGYwMGZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMCAgMHg0MDA5MDEwYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMCAgMHhmMDBmMDBmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUlp6ZXJvVmFsCisgKgorICogSWYgdGhlIGN1cnJlbnQgUlp0aW1lIGlzIGxlc3Mgb3IgRXF1YWwgdG8gbWFjUlp6ZXJvVmFsIGFuIFJadGltZSB3aXRoIHZhbHVlIHplcm8gaXMgaW5zZXJ0ZWQgaW4gdGhlIHdha2V1cCBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWlpFUk9WQUwgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlpaRVJPVkFMICAgICAgIDB4ZjAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JaWkVST1ZBTCAgICAgICAyOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JaWkVST1ZBTCAgICAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xtYXJnaW5SWgorICoKKyAqIFRoZSBVTUFDIGNhbiBzZXQgdGhlIG1hcmdpbiBmb3IgdGhlIGV4cGVjdGVkIGZyYW1lIGJ5IGNvbnRyb2wgcmVnaXN0ZXIgbWFjQ1NMbWFyZ2luUlogKGluIDEwIHN5bSkuCisgKiBTbyB0aGUgTE1BQyB3aWxsIG1ha2Ugc3VyZSB0aGUgcmVjZWl2ZXIgaXMgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhIHRoaXMgYW1vdW50IG9mIHRpbWUgZWFybGllciB0aGFuIHRvIGJlIGV4cGVjdGVkIGJ5IHRoZSByZWNlaXZlZCBSWiB0aW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTE1BUkdJTlJaICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEwCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xNQVJHSU5SWiAgICAgMHhmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogICAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogICAgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1dVUlpDb3JyZWN0aW9uCisgKgorICogVGhpcyByZWdpc3RlciBzaGFsbCBiZSB1c2VkIGlmIHRoZSBXYWtlLXVwIGZyYW1lIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGxhcmdlciB0aGFuIDE1IG9jdGV0cy4KKyAqIEl0IHNoYWxsIGluZGljYXRlIHRoZSBhbW91bnQgb2YgZXh0cmEgZGF0YSBpbiBhIFdha2UtdXAgZnJhbWUgYWZ0ZXIgdGhlIFJaIHBvc2l0aW9uIGluIHRoZSBmcmFtZSAoaW4gMTAgc3ltKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VSWkNPUlJFQ1RJT04gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVJaQ09SUkVDVElPTiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5XzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmN2YwZjAyCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAgIDB4NDAwOTAxMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMCAgMHhmZjdmMGYwMgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY1R4UnhuCisgKgorICogU2VlIHJlZ2lzdGVyICJzZWNFbnRyeSIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDVFhSWE4gICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOICAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDVFhSWE4gICAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOICAgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0VudHJ5CisgKgorICogVGhlIFVNQUMgc2hhbGwgaW5kaWNhdGUgYnkgY29udHJvbCByZWdpc3RlcnMgc2VjRW50cnkgYW5kIHNlY1R4UnhuIHdoaWNoIGVudHJ5IHRvIHVzZSBhbmQgaWYgaXQncyBmcm9tIHRoZSBUeCBvciBSeCBidWZmZXIgKCcxJyByZXNwLiAnMCcpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTlRSWSAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5UUlkgICAgMHhmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOVFJZICAgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTlRSWSAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBbGVuZ3RoCisgKgorICogVGhlIGxlbmd0aCBvZiB0aGUgYV9kYXRhIGlzIGluZGljYXRlZCBieSBjb250cm9sIHJlZ2lzdGVyIHNlY0FsZW5ndGguCisgKiBUaGUgZW5kIG9mIHRoZSBhX2RhdGEgaXMgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBtX2RhdGEuIChTbyBzZWNBbGVuZ3RoIG11c3QgYWxzbyBiZSBzZXQgaWYgc2VjdXJpdHkgbGV2ZWw9PTQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FMRU5HVEggIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBTEVOR1RIICAweDdmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUxFTkdUSCAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBTEVOR1RIIDcKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNNbGVuZ3RoCisgKgorICogVGhlIGxlbmd0aCBvZiB0aGUgbV9kYXRhIGlzIGluZGljYXRlZCBieSBjb250cm9sIHJlZ2lzdGVyIHNlY01sZW5ndGguCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ01MRU5HVEggIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNNTEVOR1RIICAweDdmMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNNTEVOR1RIICAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ01MRU5HVEggNworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNFbmNEZWNuCisgKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VjRW5jRGVjbiBpbmRpY2F0ZXMgd2hldGhlciB0byBlbmNyeXB0ICgnMScpIG9yIGRlY3J5cHQgKCcwJykgdGhlIGRhdGEuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ0RFQ04gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOICAweDgwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNERUNOICAzMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ0RFQ04gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xICAweDQwMDkwMTE0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzEgIDB4ZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjQXV0aEZsYWdzCisgKgorICogUmVnaXN0ZXIgc2VjQXV0aEZsYWdzIGNvbnRhaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBmbGFncyBmaWVsZHMuCisgKiBiaXRbN10gaXMgJzAnCisgKiBiaXRbNl0gaXMgIkFfZGF0YSBwcmVzZW50IgorICogYml0WzU6M106IDMtYml0IHNlY3VyaXR5IGxldmVsIG9mIG1fZGF0YQorICogYml0WzI6MF06IDMtYml0IHNlY3VyaXR5IGxldmVsIG9mIGFfZGF0YS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZMQUdTICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZMQUdTICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkxBR1MgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkxBR1MgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0VuY3JGbGFncworICoKKyAqIFJlZ2lzdGVyIHNlY0VuY3JGbGFncyBjb250YWluIHRoZSBlbmNyeXB0aW9uIGZsYWdzIGZpZWxkLgorICogQml0cyBbMjowXSBhcmUgdGhlIDMtYml0IGVuY29kaW5nIGZsYWdzIG9mIGFfZGF0YSwgdGhlIG90aGVyIGJpdHMgbXN1dCBiZSBzZXQgdG8gJzAnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNSRkxBR1MgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNSRkxBR1MgIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAgMHg0MDA5MDExOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8wCisgKgorICogUmVnaXN0ZXJzIHNlY0tleVswLi4zXSAgY29udGFpbiB0aGUga2V5IHRvIGJlIHVzZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgIDB4NDAwOTAxMWMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMQorICoKKyAqIFNlZSByZWdpc3RlciAic2VjS2V5XzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgIDB4NDAwOTAxMjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMgorICoKKyAqIFNlZSByZWdpc3RlciAic2VjS2V5XzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMgIDB4NDAwOTAxMjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMworICoKKyAqIFNlZSByZWdpc3RlciAic2VjS2V5XzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wICAweDQwMDkwMTI4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzAKKyAqCisgKiBSZWdpc3RlciBzZWNOb25jZVswLi4zXSBjb250YWlucyB0aGUgTm9uY2UgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgIDB4NDAwOTAxMmMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMQorICoKKyAqIFNlZSByZWdpc3RlciAiTm9uY2VfMCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8xIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8yCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yICAweDQwMDkwMTMwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY05vbmNlXzIKKyAqCisgKiBTZWUgcmVnaXN0ZXIgIk5vbmNlXzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8yICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAgMHg0MDA5MDEzNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zICAweGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8zCisgKgorICogU2VlIHJlZ2lzdGVyICJOb25jZV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8zICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDMKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUyAgMHg0MDA5MDEzOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfT1MgIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0Fib3J0CisgKgorICogU2VlIHJlZ2lzdGVyICJOb25jZV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FCT1JUIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjU3RhcnQKKyAqCisgKiBPbmVfc2hvdCByZWdpc3RlciB0byBzdGFydCB0aGUgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24gc3VwcG9ydCB0YXNrLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNTVEFSVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNTVEFSVCAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNTVEFSVCAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1NUQVJUIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5X3N0YXR1cworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMgIDB4NDAwOTAxNDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9TVEFUVVMgIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0J1c3kKKyAqCisgKiBSZWdpc3RlciAic2VjQnVzeSIgaW5kaWNhdGVzIGlmIHRoZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNCVVNZICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNCVVNZICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0F1dGhGYWlsCisgKgorICogSW4gY2FzZSBvZiBkZWNyeXB0aW9uLCB0aGUgc3RhdHVzIGJpdCBzZWNBdXRoRmFpbCB3aWxsIGJlIHNldCB3aGVuIHRoZSBhdXRoZW50aWNhdGlvbiBoYXMgZmFpbGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkFJTCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkFJTCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWN1cml0eV9ldmVudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IEUtUkNXIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UICAweDQwMDkwMTUwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVCAgMHgxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjUmVhZHlfZQorICoKKyAqIFRoZSBFdmVudCBiaXQgc2VjUmVhZHlfZSBpcyBzZXQgd2hlbiB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcyBpcyByZWFkeSAoaS5lLiBzZWNCdXN5IGlzIGNsZWFyZWQpLgorICogVGhpcyBFdmVudCBzaGFsbCBjb250cmlidXRlIHRvIHRoZSBnZW5faXJxLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9FICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX0UgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfRSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX0UgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfZXZlbnRtYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRU0tUlcgKGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UTUFTSyAgMHg0MDA5MDE1NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UTUFTSyAgMHgxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjUmVhZHlfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAic2VjUmVhZHlfZSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVE1BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfTSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHNjaF9jb250cm9sXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg4OTgwM2U4ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wICAweDQwMDkwMTYwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNUeEFja0RlbGF5CisgKgorICogRW5kIG9mIFJ4IGZyYW1lIHRvIHN0YXJ0IG9mIEFjaworICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWSAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTUnhXYWl0CisgKgorICogVGhlIHRpbWVzIHRvIHdhaXQgZm9yIHN0YXJ0IG9mIGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhXQUlUICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhXQUlUICAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAgICAgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3RzY2hfY29udHJvbF8xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4YzAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMSAgMHg0MDA5MDE2NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzEgIDB4ZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNSeFR4CisgKgorICogVGhlIHRpbWUgYmV0d2VlbiB0aGUgQ0NBIGFuZCB0aGUgVFggb2YgYSBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYVFggIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFRYICAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhUWCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhUWCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHNjaF9jb250cm9sXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgxOTAwMzIwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8yICAweDQwMDkwMTY4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNSeEFja0RlbGF5CisgKgorICogRW5kIG9mIGZyYW1lIHRvIHdoZW4gdGhlIHRyYW5zbWl0dGVyIHNoYWxsIGxpc3RlbiBmb3IgQWNrbm93bGVkZ2VtZW50CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhBQ0tERUxBWSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVkgIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWEFDS0RFTEFZICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWEFDS0RFTEFZIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNBY2tXYWl0CisgKgorICogVGhlIG1pbmltdW0gdGltZSB0byB3YWl0IGZvciBzdGFydCBvZiBhbiBBY2tub3dsZWRnZW1lbnQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNBQ0tXQUlUICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNBQ0tXQUlUICAgICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAgICAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5X3BhcmFtZXRlcnNfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDc2NTQzMjEwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDc3Nzc3Nzc3CisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAgIDB4NDAwOTAxODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMCAgMHg3Nzc3Nzc3NworCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfMAorICoKKyAqIENvbnRyb2wgcnhCaXRQb3MoOCkoMykgY29udHJvbHMgdGhlIHBvc2l0aW9uIHRoYXQgYSBiaXQgc2hvdWxkIGhhdmUgYXQgdGhlIERQSFkgaW50ZXJmYWNlLgorICogU28gdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSByeEJpdFBvc18wID0gMCwgcnhCaXRQb3NfMSA9IDEsIHJ4Qml0UG9zXzIgPSAyLCBldGMuCisgKgorICogTm90ZTEgdGhhdCB0aGlzIGlzIGEgY29udmVyc2lvbiBmcm9tIHJ4IERQSFkgaW50ZXJmYWNlIHRvIHRoZSBpbnRlcm5hbCBkYXRhIGJ5dGUKKyAqIFNvCisgKiAgZm9yKG49NztuPj0wO24tLSkKKyAqICAgIHJ4X2RhdGEobikgPSBkcGh5X2JpdCh0eF9CaXRQb3MobikpCisgKiAgZW5kZm9yCisgKgorICogTm90ZTIgdGhhdCByeEJpdFBvcyBhbmQgdHhCaXRQb3MgbXVzdCBoYXZlIGludmVyc2UgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18wICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMCAgMHg3CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18wICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMCAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfMQorICoKKyAqIFNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzEgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18xICAweDcwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18xICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMSAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfMgorICoKKyAqIFNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzIgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yICAweDcwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMiAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzIgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzMKKyAqCisgKiBTZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18zICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMyAgMHg3MDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18zICAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzMgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzQKKyAqCisgKiBTZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU180ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCAgMHg3MDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNCAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU180IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc181CisgKgorICogU2VlIHJ4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzUgIDB4NzAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181ICAyMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzUgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzYKKyAqCisgKiBTZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU182ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNiAgMHg3MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU182ICAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzYgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzcKKyAqCisgKiBTZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU183ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyAgMHg3MDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNyAgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU183IDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg3NjU0MzIxMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3Nzc3Nzc3NworICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xICAweDQwMDkwMTg0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEgIDB4Nzc3Nzc3NzcKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzAKKyAqCisgKiBDb250cm9sIHR4Qml0UG9zKDgpKDMpIGNvbnRyb2xzIHRoZSBwb3NpdGlvbiB0aGF0IGEgYml0IHNob3VsZCBoYXZlIGF0IHRoZSBEUEhZIGludGVyZmFjZS4KKyAqIFNvIHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgdHhCaXRQb3NfMCA9IDAsIHR4Qml0UG9zXzEgPSAxLCB0eEJpdFBvc18yID0gMiwgZXRjLgorICoKKyAqIE5vdGUxIHRoYXQgdGhpcyBpcyBhIGNvbnZlcnNpb24gZnJvbSBpbnRlcm5hbCBkYXRhIGJ5dGUgdG8gdGhlIERQSFkgaW50ZXJmYWNlLgorICogU28KKyAqICBmb3Iobj03O24+PTA7bi0tKQorICogICAgdHhfZHBoeV9iaXQobikgPSB0eF9kYXRhKHR4X0JpdFBvcyhuKSkKKyAqICBlbmRmb3IKKyAqCisgKiBOb3RlMiB0aGF0IHR4Qml0UG9zIGFuZCByeEJpdFBvcyBtdXN0IGhhdmUgaW52ZXJzZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18wICAweDcKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18wIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18xCisgKgorICogU2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzEgIDB4NzAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzEgIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18xIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18yCisgKgorICogU2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMiAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgIDB4NzAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18yICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMiAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfMworICoKKyAqIFNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzMgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18zICAweDcwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzMgIDEyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMyAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfNAorICoKKyAqIFNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180ICAweDcwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU180ICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzQgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzUKKyAqCisgKiBTZWUgdHhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU181ICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNSAgMHg3MDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgIDIwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNSAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfNgorICoKKyAqIFNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzYgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU182ICAweDcwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzYgIDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNiAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhCaXRQb3NfNworICoKKyAqIFNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzcgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183ICAweDcwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU183ICAyOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzcgMworCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5X3BhcmFtZXRlcnNfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMiAgMHg0MDA5MDE4OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlUeFN0YXJ0dXAKKyAqCisgKiBQaHkgd2FpdCB0aW1lIGJlZm9yZSB0cmFuc21pc3Npb24KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQICAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWFNUQVJUVVAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWFNUQVJUVVAgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVR4TGF0ZW5jeQorICoKKyAqIFBoeSBkZWxheSBiZXR3ZWVuIERQSFkgaS9mIGFuZCBhaXIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhMQVRFTkNZICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhMQVRFTkNZICAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5VHhGaW5pc2gKKyAqCisgKiBQaHkgd2FpdCB0aW1lIGJlZm9yZSBkZWFzc2VydGluZyBUWF9FTgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWEZJTklTSCAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWEZJTklTSCAgIDB4ZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWEZJTklTSCAgIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlUUnhXYWl0CisgKgorICogUGh5IHdhaXQgdGltZSBiZXR3ZWVuIFRYX0VOL1JYX0VOCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRSWFdBSVQgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRSWFdBSVQgICAgMHhmZjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFJYV0FJVCAgICAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRSWFdBSVQgICA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlfcGFyYW1ldGVyc18zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMyAgMHg0MDA5MDE4YworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zICAweGZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5UnhTdGFydHVwCisgKgorICogUGh5IHdhaXQgdGltZSBiZWZvcmUgcmVjZWl2aW5nCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhTVEFSVFVQICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhTVEFSVFVQIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlSeExhdGVuY3kKKyAqCisgKiBQaHkgZGVsYXkgYmV0d2VlbiBhaXIgYW5kIERQSFkgaS9mCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYTEFURU5DWSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYTEFURU5DWSAgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeUVuYWJsZQorICoKKyAqIEFzc2VydGluZyB0aGUgRFBIWSBpbnRlcmZhY2Ugc2lnbmFscyBUWF9FTiBvciBSWF9FTiBkb2VzIG5vdCB0YWtlIHBsYWNlIHdpdGhpbiB0aGUgdGltZSBwaHlFbmFibGUgYWZ0ZXIgYXNzZXJ0aW5nIHRoZSBzaWduYWwgcGh5X2VuLgorICogKHJlc29sdXRpb246IH5zKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFICAgICAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFICAgICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSAgICA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9jb250cm9sXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wICAweDQwMDkwMjAwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wICAweGZmZmZmZmYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EYmdSeFRyYW5zcGFyZW50TW9kZQorICoKKyAqIElmIHNldCwgUnggcGlwZSBpcyBmdWxseSBzZXQgaW4gdHJhbnNwYXJlbnQgbW9kZSAoZm9yIGRlYnVnIHB1cnBvc2UpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdSWFRSQU5TUEFSRU5UTU9ERSAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgICAgICAgICAgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfREJHUlhUUkFOU1BBUkVOVE1PREUgICAgICAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdSWFRSQU5TUEFSRU5UTU9ERSAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4QmVhY29uT25seQorICoKKyAqIElmIHNldCwgb25seSBCZWFjb25zIGZyYW1lcyBhcmUgYWNjZXB0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCRUFDT05PTkxZICAgICAgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQkVBQ09OT05MWSAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQkVBQ09OT05MWSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCRUFDT05PTkxZICAgICAgICAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeENvb3JkUmVhbGlnbk9ubHkKKyAqCisgKiBJZiBzZXQsIG9ubHkgQ29vcmRpbmF0b3IgUmVhbGlnbm1lbnQgZnJhbWVzIGFyZSBhY2NlcHRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWENPT1JEUkVBTElHTk9OTFkgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZICAgICAgICAgICAgIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZICAgICAgICAgICAgIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWENPT1JEUkVBTElHTk9OTFkgICAgICAgICAgICAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfcmVhZF9idWZfcHRyCisgKgorICogSW5kaWNhdGlvbiB3aGVyZSBuZXcgZGF0YSB3aWxsIGJlIHJlYWQKKyAqIEFsbCBmb3VyIGJpdHMgc2hhbGwgYmUgdXNlZCB3aGVuIHVzaW5nIHRoZXNlIHBvaW50ZXIgdmFsdWVzICgwZCAtIDE1ZCkuCisgKiBIb3dldmVyLCB0aGUgUmVjZWl2ZSBQYWNrZXQgYnVmZmVyIGhhcyBhIHNpemUgb2YgOCBlbnRyaWVzLgorICogU28gcmVhZGluZyB0aGUgUmVjZWl2ZSBQYWNrZXQgYnVmZmVyIGVudHJpZXMgc2hhbGwgdXNlIHRoZSBtb2Q4IG9mIHRoZSBwb2ludGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfUkVBRF9CVUZfUFRSICAgICAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUiAgICAgICAgICAgICAgICAweDc4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIgICAgICAgICAgICAgICAgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUiAgICAgICAgICAgICAgIDQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzUnhGcm1QZW5kaW5nY2EKKyAqCisgKiBXaGFuIHRoZSBjb250cm9sIHJlZ2lzdGVyIERpc1J4RnJtUGVuZGluZ0NhIGlzIHNldCwgdGhlIG5vdGlmaWNhdGlvbiBvZiB0aGUgcmVjZWl2ZWQgRlAgYml0IHRvIHRoZSBMTUFDIENvbnRyb2xsZXIgaXMgZGlzYWJsZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYRlJNUEVORElOR0NBICAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEZSTVBFTkRJTkdDQSAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhGUk1QRU5ESU5HQ0EgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEZSTVBFTkRJTkdDQSAgICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0Rpc1J4QWNrUmVxdWVzdGNhCisgKgorICogV2hlbiB0aGUgY29udHJvbCByZWdpc3RlciBEaXNSeEFja1JlcXVlc3RjYSBpcyBzZXQgYWxsIGNvbnNlcXVlbnQgYWN0aW9ucyBmb3IgYSByZWNlaXZlZCBBY2tub3dsZWRnZSBSZXF1ZXN0IGJpdCBhcmUgZGlzYWJsZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVRVUVTVENBICAgICAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVRVUVTVENBICAgICAgICAgICAgICA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRVFVRVNUQ0EgICAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzQ3JjZXJyb3IKKyAqCisgKiBJZiBzZXQsIGEgRkNTIGVycm9yIHdpbGwgbm90IGRyb3AgdGhlIGZyYW1lCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiAgICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiAgICAgICAgICA5CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EaXNEYXRhUmVxdWVzdGNhCisgKgorICogV2hlbiB0aGUgY29udHJvbCByZWdpc3RlciBEaXNEYXRhUmVxdWVzdENhIGlzIHNldCwgdGhlIG5vdGlmaWNhdGlvbiBvZiB0aGUgcmVjZWl2ZWQgRGF0YSBSZXF1ZXN0IGlzIGRpc2FibGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNEQVRBUkVRVUVTVENBICAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAgICAgICAgICAgICAgIDB4NDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNEQVRBUkVRVUVTVENBICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNEQVRBUkVRVUVTVENBICAgICAgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NSZXNGcmFtZVZlcnNpb24KKyAqCisgKiBJZiBzZXQsIGEgcGFja2V0IHdpdGggYSByZXNlcnZlZCBGcmFtZVZlcnNpb24gc2hhbGwgbm90IGJlIGRyb3BwZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gICAweDgwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiAgIDExCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzV3JvbmdEUEFOSWQKKyAqCisgKiBJZiByZWdpc3RlciBtYWNBbHdheXNQYXNzV3JvbmdEUEFOSWQgaXMgc2V0LCBwYWNrZXQgd2l0aCBhIHdyb25nIERlc3RpYW50aW9uIFBhbklEIHdpbGwgbm90IGJlIGRyb3BwZWQuCisgKiBIb3dldmVyLCBpbiBjYXNlIG9mIGFuIEZDUyBlcnJvciwgdGhlIHBhY2tldCBpcyBkcm9wcGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEUEFOSUQgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HRFBBTklEICAgICAgIDB4MTAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HRFBBTklEICAgICAgIDEyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HRFBBTklEICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzV3JvbmdEQWRkcgorICoKKyAqIElmIHNldCwgYSBwYWNrZXQgd2l0aCBhIHdyb25nIERBZGRyIGlzICBub3QgZHJvcHBlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEQUREUiAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgICAgICAgIDB4MjAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgICAgICAgIDEzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzQmVhY29uV3JvbmdQQU5JZAorICoKKyAqIElmIHRoZSBjb250cm9sIHJlZ2lzdGVyIG1hY0Fsd2F5c1Bhc3NCZWFjb25Xcm9uZ1BBTklkIGlzIHNldCwgdGhlIGZyYW1lIGlzIG5vdCBkcm9wcGVkIGluIGNhc2Ugb2YgYSBtaXNtYXRjaCBpbiBQQU4tSUQsIGlycmVzcGVjdGl2ZSBvZiB0aGUgc2V0dGluZyBvZiBSeEJlYWNvbk9ubHkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAgMHg0MDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAgMTQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NUb1BhbkNvb3JkaW5hdG9yCisgKgorICogV2hlbiB0aGUgY29udHJvbCByZWdpc3RlciBtYWNBbHdheXNQYXNzVG9QYW5Db29yZGluYXRvciBpcyBzZXQsIHRoZSBmcmFtZSBpcyBub3QgZHJvcHBlZCBkdWUgdG8gYSBzcGFuX2Nvb3JkX2Vycm9yLgorICogSG93ZXZlciwgaW4gY2FzZSBvZiBhbiBGQ1MgZXJyb3IsIHRoZSBwYWNrZXQgaXMgZHJvcHBlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1RPUEFOQ09PUkRJTkFUT1IgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SICAweDgwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SICAxNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzRnJtVHlwZQorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVycyBtYWNBbHdheXNQYXNzRnJtVHlwZVs3OjBdLCBzaGFsbCBjb250cm9sIGlmIHRoaXMgRnJhbWUgVHlwZSBzaGFsbCBiZSBkcm9wcGVkLgorICogSWYgYSBiaXQgaXMgc2V0LCB0aGUgRnJhbWUgVHlwZSBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGJpdCBwb3NpdGlvbiBpcyBub3QgZHJvcHBlZCwgZXZlbiBpbiBjYXNlIG9mIGEgQ1JDIGVycm9yLgorICogRXhhbXBsZTogaWYgYml0IDEgaXMgc2V0LCBGcmFtZSBUeXBlIDEgc2hhbGwgbm90IGJlIGRyb3BwZWQuCisgKiBUaGUgZXJyb3Igc2hhbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIFJ4IG1ldGEgZGF0YQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0ZSTVRZUEUgICAgICAgICAgIDB4ZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSAgICAgICAgICAgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSAgICAgICAgICA4CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NXYWtlVXAKKyAqCisgKiBJZiB0aGUgY29udHJvbCByZWdpc3RlciBtYWNBbHdheXNQYXNzV2FrZVVwIGlzIHNldCwgcmVjZWl2ZWQgV2FrZS0gdXAgZnJhbWVzIGZvciB0aGlzIGRldmljZSBhcmUgcHV0IGludG8gdGhlIFJ4IHBhY2tldCBidWZmZXIgd2l0aG91dCBub3RpZnlpbmcgdGhlIExNQUMgQ29udHJvbGxlci4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dBS0VVUCAgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgICAgICAgICAgICAweDEwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgICAgICAgICAgICAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUGFzc1dha2VVcAorICoKKyAqIElmIHNldCwgV2FrZVVwIGZyYW1lcyB3aWxsIG5vdCBiZSByZXBvcnRlZCBidXQgd2lsbCBiZSBwdXQgaW50byB0aGUgUnggYnVmZmVyLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQVNTV0FLRVVQICAgICAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCAgICAgICAgICAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNJbXBsaWNpdEJyb2FkY2FzdAorICoKKyAqIElmIHNldCwgRnJhbWUgVmVyc2lvbiAyIGZyYW1lcyB3aXRob3V0IERhZGRyIG9yIERQQU5JZCBzaGFsbCBiZSBhY2NlcHRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDSU1QTElDSVRCUk9BRENBU1QgICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUICAgICAgICAgICAweDQwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUICAgICAgICAgICAyNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUICAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzUnhBY2tSZWNlaXZlZGNhCisgKgorICogSWYgc2V0LCB0aGUgTE1BQyBjb250cm9sbGVyIHNoYWxsIGlnbm9yZSBhbGwgY29uc2VxdWVudCBhY3Rpb25zIHVwb24gYSBzZXQgQVIgYml0IGluIHRoZSB0cmFuc21pdHRlZCBmcmFtZQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFQ0VJVkVEQ0EgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBICAgICAgICAgICAgIDB4ODAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBICAgICAgICAgICAgIDI3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBICAgICAgICAgICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfZXZlbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVzIgKGV2ZW50IHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQgIDB4NDAwOTAyMDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UICAweGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFNvZl9lCisgKgorICogU2V0IHdoZW4gUlhfU09GIGhhcyBiZWVuIGRldGVjdGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FICAgICAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FICAgICAgICAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX0UgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfb3ZlcmZsb3dfZQorICoKKyAqIEluZGljYXRlcyB0aGF0IHRoZSBSeCBwYWNrZXQgYnVmZmVyIGhhcyBhbgorICogb3ZlcmZsb3dsCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0UgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0UgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0UgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfRSAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9idWZfYXZhaWxfZQorICoKKyAqIEluZGljYXRlcyB0aGF0IGEgbmV3IHBhY2tldCBpcyByZWNlaXZlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSAgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhieXRlX2UKKyAqCisgKiBJbmRpY2F0ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgYSBuZXcgcGFja2V0IGlzIHJlY2VpdmVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FICAgICAgICAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FICAgICAgICAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX0UgICAgICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfbWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLICAweDQwMDkwMjA4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sgIDB4ZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4U29mX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgIlJ4U29mX2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX00gICAgICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX00gICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfTSAgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9vdmVyZmxvd19tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICIgcnhfb3ZlcmZsb3dfZSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX00gICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfTSAgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfTSAgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19NICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1Zl9hdmFpbF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJyeF9idWZfYXZhaWxfZSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Ynl0ZV9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJyeGJ5dGVfZSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9NICAgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX00gICAgICAgIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX00gICAgICAgIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfTSAgICAgICAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9zdGF0dXMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTICAweDQwMDkwMjBjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTICAweDFmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfYnVmZl9pc19mdWxsCisgKgorICogSW5kaWNhdGVzIHRoYXQgdGhlIFJ4IHBhY2tldCBidWZmZXIgaXMgZnVsbAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTEwgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTEwgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTCAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTEwgIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF93cml0ZV9idWZfcHRyCisgKgorICogSW5kaWNhdGlvbiB3aGVyZSBuZXcgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uCisgKiBBbGwgZm91ciBiaXRzIHNoYWxsIGJlIHVzZWQgd2hlbiB1c2luZyB0aGVzZSBwb2ludGVyIHZhbHVlcyAoMGQgLSAxNWQpLgorICogSG93ZXZlciwgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBoYXMgYSBzaXplIG9mIDggZW50cmllcy4KKyAqIFNvIHJlYWRpbmcgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBlbnRyaWVzIHNoYWxsIHVzZSB0aGUgbW9kOCBvZiB0aGUgcG9pbnRlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1dSSVRFX0JVRl9QVFIgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1dSSVRFX0JVRl9QVFIgIDB4MWUKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1dSSVRFX0JVRl9QVFIgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSIDQKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVTbmFwc2hvdFZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgIDB4NDAwOTAyMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVTbmFwc2hvdFZhbAorICoKKyAqIFRoZSBTdGF0dXMgcmVnaXN0ZXIgU3ltYm9sVGltZVNuYXBzaG90VmFsIGluZGljYXRlcyB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBUaW1lU3RhbXAgZ2VuZXJhdG9yLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9zdGF0dXNfZGVsdGEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBELVJDVyAoZGVsdGEgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfREVMVEEgIDB4NDAwOTAyMjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfREVMVEEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfREVMVEEgIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1ZmZfaXNfZnVsbF9kCisgKgorICogRGVsdGEgYml0IG9mIHN0YXR1cyAicnhfYnVmZl9pc19mdWxsIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfRCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX0QgIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX0QgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfRCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9zdGF0dXNfbWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IERNLVJXIChkZWx0YSBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfTUFTSyAgMHg0MDA5MDIyNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19NQVNLIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX01BU0sgIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1ZmZfaXNfZnVsbF9tCisgKgorICogTWFzayBiaXQgb2Ygc3RhdHVzICJyeF9idWZmX2lzX2Z1bGwiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NDM1MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3ZmYxCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMCAgMHg0MDA5MDI0MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMCAgMHg3ZmYxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGJnVHhUcmFuc3BhcmVudE1vZGUKKyAqCisgKiBJZiAxLCB0aGUgTVBEVSBvY3RldHMgcGFzcyB0cmFuc3BhcmVudGx5IHRocm91Z2ggdGhlIE1BQyBpbiB0aGUgdHJhbnNtaXQgZGlyZWN0aW9uIChmb3IgZGVidWcgcHVycG9zZSkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR1RYVFJBTlNQQVJFTlRNT0RFICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR1RYVFJBTlNQQVJFTlRNT0RFIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNNYXhCRQorICoKKyAqIE1heGltdW0gQmFja29mZiBFeHBvbmVudCAocmFuZ2UgMy04KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhCRSAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQkUgICAgICAgICAgICAgIDB4ZjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFICAgICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQkUgICAgICAgICAgICAgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY01pbkJFCisgKgorICogTWluaW11bSBCYWNrb2ZmIEV4cG9uZW50IChyYW5nZSAwLW1hY01heEJFKQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNSU5CRSAgICAgICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUlOQkUgICAgICAgICAgICAgIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNSU5CRSAgICAgICAgICAgICAgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01JTkJFICAgICAgICAgICAgIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNNYXhDU01BQmFja29mZnMKKyAqCisgKiBNYXhpbXVtIG51bWJlciBvZiBDU01BLUNBIGJhY2tvZmZzCisgKiAocmFuZ2UgMC01KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhDU01BQkFDS09GRlMgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTICAgIDB4NzAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTICAgIDEyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTICAgMworCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZnRkZl9jZQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEVDLVIgKGNvbXBvc2l0ZSBldmVudCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSAgMHg0MDA5MDI1MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFICAweDNmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9mdGRmX2NlCisgKgorICogQ29tcG9zaXRlIHNlcnZlaWNlIHJlcXVlc3QgZnJvbSBmdGRmIG1hY3JvIChzZWUgRlIwNDAwIGluIHY0MC4xMDAuMi40MS5wZGYpCisgKiBCaXQgMCA9IHVudXNlZAorICogQml0IDEgPSByeCBpbnRlcnJ1cHRzCisgKiBCaXQgMiA9IHR4IGludGVycnVwdHMKKyAqIEJpdCAzID0gbWlzY2VsYW5lb3VzIGludGVycnVwdHMKKyAqIEJpdCA0ID0gdHggaW50ZXJydXB0cyBmcm9tIHBhZ2VzIGJlbG93ICgweDMgYW5kIDB4NCkKKyAqIEJpdCA1ID0gUmVzZXJ2ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgIDB4M2YKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2Z0ZGZfY20KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDNmCisgKiBBY2Nlc3MgbW9kZTogRUNNLVJXIChjb21wb3NpdGUgZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAgMHg0MDA5MDI1NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNICAweDNmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9mdGRmX2NtCisgKgorICogbWFzayBiaXRzIGZvciBmdGZfY2UKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gIDB4M2YKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ00gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNIDYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBUaHIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgIDB4NDAwOTAzMDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFRocgorICoKKyAqIFRocmVzaG9sZCBmb3Igc3luY2hyb25pemUgVFMgZ2VuLgorICogTm90ZSB0aGF0IGR1ZSB0byBpbXBsZW1lbnRhdGlvbiB0aGlzIHJlZ2lzdGVyIG1heSBvbmx5IGJlIHdyaXR0ZW4gb25jZSBwZXIgdHdvIExQX0NMSyBwZXJpb2RzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgIDB4NDAwOTAzMDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFZhbAorICoKKyAqIFZhbHVlIHRvIHN5bmMgVFMgZ2VuIHdpdGguCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVkFMICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFBoYXNlVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgIDB4NDAwOTAzMjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBQaGFzZVZhbAorICoKKyAqIFZhbHVlIHRvIHN5bmMgVFMgZ2VuIHBoYXNlIHdpdGhpbiBhIHN5bWJvbCB3aXRoLgorICogUGxlYXNlIG5vdGUgdGhlICsxIGNvcnJlY3Rpb24gbmVlZGVkIGZvciBtb3N0IGFjY3VyYXRlIHJlc3VsdCAoKzAuNSBpcyB0aGFuIHRoZSBhdmVyYWdlIGVycm9yLCByZXN1bHRpbmcgaXMgYSBqdXN0IHRvbyBmYXN0IGNsb2NrKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90aW1lcl9jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDIKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xICAweDQwMDkwMzBjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xICAweDIKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wRW5hCisgKgorICogSWYgc2V0LCB0aGUgVGltZVN0YW1wVGhyIGlzIGVuYWJsZWQgdG8gZ2VuZXJhdGUgYSBzeW5jIG9mIHRoZSBUUyBnZW4uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBFTkEgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FUl9DT05UUk9MXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBFTkEgIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUEVOQSAgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBFTkEgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVHhTdGRBY2tGcm1DbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgIDB4NDAwOTAzMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUeFN0ZEFja0ZybUNudAorICoKKyAqIFN0YW5kYXJkIEFja25vd2xlZGdtZW50IGZyYW1lcyB0cmFuc21pdHRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhTdGRBY2tGcm1Pa0NudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UICAweDQwMDkwMzE0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4U3RkQWNrRnJtT2tDbnQKKyAqCisgKiBTdGFuZGFyZCBBY2tub3dsZWRnbWVudCBmcmFtZXMgcmVjZWl2ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeEFkZHJGYWlsRnJtQ250CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgIDB4NDAwOTAzMTgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhBZGRyRmFpbEZybUNudAorICoKKyAqIEZyYW1lcyBkaXNjYXJkZWQgZHVlIHRvIGluY29ycmVjdCBhZGRyZXNzIG9yIFBBTiBJZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4VW5zdXBGcm1DbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAgMHg0MDA5MDMxYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFVuc3VwRnJtQ250CisgKgorICogRnJhbWVzIHdoaWNoIGRvIHBhc3MgdGhlIGNoZWNrcyBidXQgYXJlIG5vdCBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNGQ1NFcnJvckNvdW50CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgIDB4NDAwOTAzNDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjRkNTRXJyb3JDb3VudAorICoKKyAqIFRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgd2VyZSBkaXNjYXJkZWQgZHVlIHRvIGFuIGluY29ycmVjdCBGQ1MuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxMDZkZgorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVCAgMHg0MDA5MDM2MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVCAgMHgxMDZkZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9jb250cm9sCisgKgorICogTG1hY1Jlc2V0X2NvbnRyb2w6IEEgJzEnIFJlc2V0cyBMTUFDIENvbnRyb2xsZXIgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09OVFJPTCAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9yeAorICoKKyAqIExtYWNSZXNldF9yeDogQSAnMScgUmVzZXRzIExNQUMgcnggcGlwZWxpbmUgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1JYICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1JYICAgICAgICAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfUlggICAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1JYICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF90eAorICoKKyAqIExtYWNSZXNldF90eDogQSAnMScgUmVzZXRzIExNQUMgdHggcGlwZWxpbmUgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RYICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RYICAgICAgICAgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFggICAgICAgICAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RYICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9haGIKKyAqCisgKiBMbWFjUmVzZXRfYWhiOiBBICcxJyBSZXNldHMgTE1BQyBhaGIgaW50ZXJmYWNlIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgICAgICAgIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0FIQiAgICAgICAgMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9BSEIgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfb3JlZworICoKKyAqIExtYWNSZXNldF9vcmVnOiBBICcxJyBSZXNldHMgTE1BQyBvbl9vZmYgcmVnbWFwIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKgorICogIyRMbWFjUmVzZXRfYXJlZ0Bvbl9vZmZfcmVnbWFwCisgKiAjTG1hY1Jlc2V0X2FyZWc6IEEgJzEnIFJlc2V0cyBMTUFDIGFsd2F5c19vbiByZWdtYXAgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgICAgICAgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgICAgICAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9PUkVHICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfdHN0aW0KKyAqCisgKiBMbWFjUmVzZXRfdHN0aW06IEEgJzEnIFJlc2V0cyBMTUFDIHRpbWVzdGFtcCB0aW1lciAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFNUSU0gICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFNUSU0gICAgICAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFNUSU0gICAgICA2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9zZWMKKyAqCisgKiBMbWFjUmVzZXRfc2VjOiBBICcxJyBSZXNldHMgTE1BQyBzZWN1cml0eSAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICoKKyAqICMkTG1hY1Jlc2V0X3d1dGltQG9uX29mZl9yZWdtYXAKKyAqICNMbWFjUmVzZXRfd3V0aW06IEEgJzEnIFJlc2V0cyBMTUFDIHdha2UtdXAgdGltZXIgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1NFQyAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1NFQyAgICAgICAgMHg4MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1NFQyAgICAgICAgNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfY291bnQKKyAqCisgKiBMbWFjUmVzZXRfY291bnQ6IEEgJzEnIFJlc2V0cyBMTUFDIG1hYyBjb3VudGVycyAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09VTlQgICAgICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09VTlQgICAgICAweDIwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPVU5UICAgICAgOQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT1VOVCAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfdGltY3RybAorICoKKyAqIExtYWNSZXNldF9jb3VudDogQSAnMScgUmVzZXRzIExNQUMgdGltaW5nIGNvbnRyb2wgYmxvY2sgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RJTUNUUkwgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RJTUNUUkwgICAgMHg0MDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMICAgIDEwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RJTUNUUkwgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNHbG9iUmVzZXRfY291bnQKKyAqCisgKiBJZiBzZXQsIHRoZSBMTUFDIHBlcmZvcm1hbmNlIGFuZCB0cmFmZmljIGNvdW50ZXJzIHdpbGwgYmUgcmVzZXQuCisgKiBVc2UgdGhpcyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbGx5IHJlc2V0IHRoZXNlIGNvdW50ZXJzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDR0xPQlJFU0VUX0NPVU5UICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDR0xPQlJFU0VUX0NPVU5UICAweDEwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDR0xPQlJFU0VUX0NPVU5UICAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNHTE9CUkVTRVRfQ09VTlQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVRocgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAgMHg0MDA5MDM4MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSICAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lVGhyCisgKgorICogU3ltYm9sdGltZSBUaHJlc2hvbGQgdG8gZ2VuZXJhdGUgYSBnZW5lcmFsIGludGVycnVwdAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAgMHg0MDA5MDM4NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyCisgKgorICogU3ltYm9sdGltZSAyIFRocmVzaG9sZCB0byBnZW5lcmF0ZSBhIGdlbmVyYWwgaW50ZXJydXB0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSICAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EZWJ1Z0NvbnRyb2wKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDFmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wgIDB4NDAwOTAzOTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wgIDB4MWZmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfZGJnX3J4X2lucHV0CisgKgorICogSWYgc2V0LCB0aGUgUnggZGVidWcgaW50ZXJmYWNlIHdpbGwgYmUgc2VsZWN0ZWQgYXMgaW5wdXQgZm9yIHRoZSBSeCBwaXBlbGluZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUICBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfUlhfSU5QVVQgIDB4MTAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfUlhfSU5QVVQgIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfUlhfSU5QVVQgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2RiZ19jb250cm9sCisgKgorICogQ29udHJvbCBvZiB0aGUgZGVidWcgaW50ZXJmYWNlCisgKgorICogZGJnX2NvbnRyb2wgMHgwMCBOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyAtIDAgPSBhbGwgJzAnCisgKgorICogZGJnX2NvbnRyb2wgMHgwMSBMZWdhY3kgZGVidWcgbW9kZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyA9IGVkX3JlcXVlc3QKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgPSBnZW5faXJxCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiA9IHR4X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxID0gcnhfc29mCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwID0gcnhfZW9mCisgKgorICogZGJnX2NvbnRyb2wgMHgwMiBDbG9ja3MgYW5kIHJlc2V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3LTMgPSAiMDAwMDAiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBscF9jbGsgZGl2aWRlIGJ5IDIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IG1hY19jbGsgZGl2aWRlIGJ5IDIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IGhjbGsgZGl2aWRlZCBieSAyCisgKgorICogZGJnX2NvbnRyb2wgaW4gcmFuZ2UgMHgwMiAtIDB4MGYgTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4MTAgLSAweDFmIERlYnVnIHJ4IHBpcGVsaW5lCisgKgorICogICAgICAweDEwCVJ4IHBoeSBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9lbmFibGUgdG93YXJkcyB0aGUgcnhfcGlwZWxpbmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHJ4X3NvZiBmcm9tIHBoeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNS0yID0gcnhfZGF0YSBmcm9tIHBoeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZW9mIHRvIHBoeQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mIGV2ZW50IGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICoKKyAqICAgICAgMHgxMQlSeCBzb2YgYW5kIGxlbmd0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfc29mCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSByeF9tYWNfbGVuZ3RoIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICoKKyAqICAgICAgMHgxMglSeCBtYWMgdGltaW5nIG91dHB1dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gRW5hYmxlIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gU29wICAgIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gRW9wICAgIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gQ3JjICAgIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gRXJyICAgIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gRHJvcCAgIGZyb20gcnhfbWFjX3RpbWluZyBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gRm9yd2FyZCBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICoKKyAqICAgICAgMHgxMwlSeCBtYWMgZnJhbWUgcGFyc2VyIG91dHB1dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gRW5hYmxlIGZyb20gbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gU29wICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IEVvcCAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBDcmMgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gRXJyICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IERyb3AgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBGb3J3YXJkIGZyb20gbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKgorICogICAgICAweDE0CVJ4IHN0YXR1cyB0byBVbWFjCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuY3JjMTZfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5yZXNfZnJtX3R5cGVfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5yZXNfZnJtX3ZlcnNpb25fZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5kcGFuaWRfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5kYWRkcl9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gcnhfZnJhbWVfc3RhdF91bWFjLnNwYW5pZF9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmlzcGFuX2Nvb3JkX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqCisgKiAgICAgIDB4MTUJUnggc3RhdHVzIHRvIGxtYWMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X2ZyYW1lX3N0YXQucGFja2V0X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSByeF9mcmFtZV9zdGF0LnJ4X3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSByeF9mcmFtZV9zdGF0LnJ4X2VvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSByeF9mcmFtZV9zdGF0Lndha2V1cF9mcmFtZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMy0xID0gcnhfZnJhbWVfc3RhdC5mcmFtZV90eXBlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9mcmFtZV9zdGF0LnJ4X3NxbnJfdmFsaWQKKyAqCisgKiAgICAgIDB4MTYJUnggYnVmZmVyIGNvbnRyb2wKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDctNCA9IHByb3ZfZnJvbV9zd2lvLnJ4X3JlYWRfYnVmX3B0cgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMy0wID0gc3RhdF90b19zd2lvLnJ4X3dyaXRlX2J1Zl9wdHIKKyAqCisgKiAgICAgIDB4MTcJUnggaW50ZXJydXB0cworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gc3RhdF90b19zd2lvLnJ4X2J1Zl9hdmFpbF9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBzdGF0X3RvX3N3aW8ucnhfYnVmX2Z1bGwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHN0YXRfdG9fc3dpby5yeF9idWZfb3ZlcmZsb3dfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gc3RhdF90b19zd2lvLnJ4X3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSBzdGF0X3RvX3N3aW8ucnhieXRlX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IHJ4X2ZyYW1lX2N0cmwucnhfZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSByeF9lb2YKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICoKKyAqICAgICAgMHgxOAlkaWFnbm9zZV9idXMgYml0IDctMyA9CisgKiAgICAgICAgICAgICAgICAgICAgICBQcnQgc3RhdGVtZW50cyBtYWMgZnJhbWUgcGFyc2VyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIFJlc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAxIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRwYW5pZCBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZGVzdCBhZGRyZXNzIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMyBSWCB1bnN1cHBvcnRlZCBmcmFtZSB0eXBlIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA0IFJYIG5vbiBCZWFjb24gZnJhbWUgZGV0ZWN0ZWQgYW5kIGRyb3BwZWQgaW4gUnhCZWFjb25Pbmx5IG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDUgUlggZnJhbWUgcGFzc2VkIGR1ZSB0byBtYWNBbHdheXNQYXNzRnJtVHlwZSBzZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgUlggdW5zdXBwb3J0ZWQgZGFfbW9kZSA9IDAxIGZvciBmcmFtZV92ZXJzaW9uIDB4MC0gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDcgUlggdW5zdXBwb3J0ZWQgc2FfbW9kZSA9IDAxIGZvciBmcmFtZV92ZXJzaW9uIDB4MC0gZGV0ZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDggRGF0YSBvciBjb21tYW5kIGZyYW1lIHdpdGggbm8gZHBhbmlkIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgOSBEYXRhIG9yIGNvbW1hbmQgZnJhbWUgd2l0aCBubyBkZXN0IGFkZHJlc3MgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxMCBSWCB1bnN1cHBvcnRlZCBmcmFtZV92ZXJzaW9uIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxMSBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkcGFuaWQgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxMiBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkZXN0IGFkZHJlc3MgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxMyBSWCB1bnN1cHBvcnRlZCBmcmFtZV92ZXJzaW9uIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNCBSWCBEZXN0aW5hdGlvbiBQQU4gSWQgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNSBSWCBEZXN0aW5hdGlvbiBhZGRyZXNzICgxIGJ5dGUpICBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE2IFJYIERlc3RpbmF0aW9uIGFkZHJlc3MgKDIgYnl0ZSkgIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTcgUlggRGVzdGluYXRpb24gYWRkcmVzcyAoOCBieXRlKSAgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxOCBSWCBTb3VyY2UgUEFOIElkIGNoZWNrIGZvciBCZWFjb24gZnJhbWVzIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTkgUlggU291cmNlIFBBTiBJZCBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIwIEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgc2VjdXJpdHkgY29udHJvbCB3b3JkIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyMSBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIHVuc3VwcG9ydGVkX2xlZ2FjeSByZWNlaXZlZCBmcmFtZV92ZXJzaW9uIDAwCisgKiAgICAgICAgICAgICAgICAgICAgICAyMiBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIHVuc3VwcG9ydGVkX2xlZ2FjeSBzZWN1cml0eSBmcmFtZV92ZXJzaW9uIDExCisgKiAgICAgICAgICAgICAgICAgICAgICAyMyBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIGZyYW1lIGNvdW50ZXIgZmllbGQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI0IEF1eGlsaWFyeSBTZWN1cml0eSBIZWFkZXIgS2V5IGlkZW50aWZpZXIgZmllbGQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI1IEVycm9yZWQgRGVzdGluYXRpb24gIFdha2V1cCBmcmFtZSBmb3VuZCBzZW5kIHRvIFVtYWMsIG5vdCBpbmRpY2F0ZWQgdG93YXJkcyBsbWFjIGNvbnRyb2xsZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDI2IE1hY0Fsd2F5c1Bhc3NXYWtlVXBGcmFtZXMgPSAxLCBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBVbWFjLCBub3QgaW5kaWNhdGVkIHRvd2FyZHMgbG1hYyBjb250cm9sbGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAyNyBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBsbWFjIGNvbnRyb2xsZXIgYW5kIFVtYWMKKyAqICAgICAgICAgICAgICAgICAgICAgIDI4IFdha2V1cCBmcmFtZSBmb3VuZCBzZW5kIHRvIGxtYWMgY29udHJvbGxlciwgZHJvcHBlZCB0b3dhcmRzIFVtYWMKKyAqICAgICAgICAgICAgICAgICAgICAgIDI5IENvbW1hbmQgZnJhbWUgd2l0aCBkYXRhX3JlcXVlc3QgY29tbWFuZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMzAgQ29vcmRpbmF0b3IgcmVhbGlnbm1lbnQgZnJhbWUgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDMxIE5vdCBVc2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyLTAgPSBmcmFtZV90eXBlCisgKgorICogICAgICAweDE5CWRpYWdub3NlX2J1cyBiaXQgNy00ID0KKyAqICAgICAgICAgICAgICAgICAgICAgIEZyYW1lc3RhdGVzIG1hYyBmcmFtZSBwYXJzZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgaWRsZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMSBmcl9jdHJsX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAyIGZyX2N0cmxfbG9uZ19zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMyBzZXFfbnJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQgZGVzdF9wYW5faWRfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDUgZGVzdF9hZGRyX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA2IHNyY19wYW5faWRfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDcgc3JjX2FkZHJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDggYXV4X3NlY19oZHJfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgaGRyX2llX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxMCBweWxkX2llX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxMSBpZ25vcmVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDEyLTE2ICBOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gcnhfbWFjX3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyLTAgPSBmcmFtZV90eXBlCisgKgorICogICAgICAweDFhLTB4MWYJTm90IFVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4MjAgLSAweDJmIERlYnVnIHR4IHBpcGVsaW5lCisgKiAgICAgIDB4MjAJVG9wIGFuZCBib3R0b20gaW50ZXJmYWNlcyB0eCBkYXRhcGF0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfbWFjX2xkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHR4X21hY19kcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gc3ltYm9sX2VuYQorICoKKyAqICAgICAgMHgyMQlDb250cm9sIHNpZ25hbHMgZm9yIHR4IGRhdGFwYXRoCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBUeFRyYW5zcGFyZW50TW9kZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4LkNSQzE2X2VuYQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX2FjaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0xID0gY3RybF9sbWFjX3RvX3R4LnR4X2ZyYW1lX25tYnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHR4X3ZhbGlkCisgKgorICogICAgICAweDIyCUNvbnRyb2wgc2lnbmFscyBmb3Igd2FrZXVwIGZyYW1lcworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1LTEgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1X1JaKDQgRE9XTlRPIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfcnpfemVybworICoKKyAqICAgICAgMHgyMwlEYXRhIHNpZ25hbHMgZm9yIHdha2V1cCBmcmFtZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X3J6X3plcm8KKyAqCisgKiAgICAgIDB4MjQJRGF0YSBhbmQgY29udHJvbCBhY2sgZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHR4X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTEgPSB0eF9kYXRhCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBzeW1ib2xfZW5hCisgKgorICogICAgICAweDI1LTB4MmYJTm90IFVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4MzAgLSAweDNmIERlYnVnIGxtYWNfY29udHJvbGxlcgorICogICAgICAweDMwCVBoeSBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gcGh5YXR0cigzIGRvd250byAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gZWRfcmVxdWVzdAorICoKKyAqICAgICAgMHgzMQlQaHkgZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2LTAgPSBwcnQgc3RhdGVtZW50cyBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgICAgICAgICAgMCBSZXNldAorICogICAgICAgICAgICAgICAgICAgICAgMSBNQUlOX1NUQVRFX0lETEUgVFhfQUNLbm93bGVkZ2VtZW50IGZyYW1lIHNraXAgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMiBNQUlOX1NUQVRFX0lETEUgOiBXYWtlLVVwIGZyYW1lIHJlc2lkZXMgaW4gYnVmZmVyIG5vCisgKiAgICAgICAgICAgICAgICAgICAgICAzIE1BSU5fU1RBVEVfSURMRSA6IFRYIGZyYW1lIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgNCBNQUlOX1NUQVRFX0lETEUgOiBUWCBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgNSBNQUlOX1NUQVRFX0lETEUgOiBnb3RvIFNJTkdMRV9DQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDYgTUFJTl9TVEFURV9JRExFIDogZ290byBFbmVyZ3kgRGV0ZWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3IE1BSU5fU1RBVEVfSURMRSA6IGdvdG8gUlgKKyAqICAgICAgICAgICAgICAgICAgICAgIDggTUFJTl9TVEFURV9JRExFIGRlLWFzc2VydCBwaHlfZW4gd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgTUFJTl9TVEFURV9JRExFIFN0YXJ0IHBoeV9lbiBhbmQgYXNzZXJ0IHBoeV9lbiB3YWl0IGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMCBNQUlOX1NUQVRFX0NTTUFfQ0FfV0FJVF9GT1JfTUVUQURBVEEgIGZyYW1lbnIgOgorICogICAgICAgICAgICAgICAgICAgICAgMTEgTUFJTl9TVEFURV9DU01BX0NBIGZyYW1lbnIgOgorICogICAgICAgICAgICAgICAgICAgICAgMTIgTUFJTl9TVEFURV9DU01BX0NBIHN0YXJ0IENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDE0IE1BSU5fU1RBVEVfQ1NNQV9DQSBza2lwIENTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgIDE1IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIEZhaWxlZCBmb3IgQ1NMIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDE2IE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQSBjc21hX2NhIEZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTcgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgU3VjY2VzcworICogICAgICAgICAgICAgICAgICAgICAgMTggTUFJTl9TVEFURV9TSU5HTEVfQ0NBIGNjYSBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE5IE1BSU5fU1RBVEVfU0lOR0xFX0NDQSBjY2Egb2sKKyAqICAgICAgICAgICAgICAgICAgICAgIDIwIE1BSU5fU1RBVEVfV0FJVF9BQ0tfREVMQVkgd2FpdCB0aW1lIGVsYXBzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDIxIE1BSU5fU1RBVEVfV0FJVCBBQ0tfREVMQVkgOiBTZW5kIEFjayBpbiBUU0NIIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDIyIE1BSU5fU1RBVEVfV0FJVCBBQ0tfREVMQVkgOiBBY2sgbm90IHNjaGVkdWxlZCBpbiB0aW1lIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMjMgTUFJTl9TVEFURV9UU0NIX1RYX0ZSQU1FIG1hY1RTUnhUeCB0aW1lIGVsYXBzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDI0IE1BSU5fU1RBVEVfVFhfRlJBTUUgaXQgaXMgQ1NMIG1vZGUsIHN0YXJ0IHRoZSBXVSBzZXEgZm9yIG1hY1dVUGVyaW9kCisgKiAgICAgICAgICAgICAgICAgICAgICAyNSBNQUlOX1NUQVRFX1RYX0ZSQU1FMQorICogICAgICAgICAgICAgICAgICAgICAgMjYgTUFJTl9TVEFURV9UWF9GUkFNRV9XMSBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDI3IE1BSU5fU1RBVEVfVFhfRlJBTUVfVzIgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAyOCBNQUlOX1NUQVRFX1RYX1dBSVRfTEFTVF9TWU1CT0wgZXhpdAorICogICAgICAgICAgICAgICAgICAgICAgMjkgTUFJTl9TVEFURV9UWF9SQU1QRE9XTl9XIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzAgTUFJTl9TVEFURV9UWF9QSFlUUlhXQUlUIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzEgTUFJTl9TVEFURV9HRU5fSUZTICwgQWNrIHdpdGggZnJhbWUgcGVuZGluZyByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMzIgTUFJTl9TVEFURV9HRU5fSUZTICwgQWNrIHJlcXVlc3RlZCBidXQgRGlzUlhhY2tSZWNlaXZlZGNhIGlzIHNldAorICogICAgICAgICAgICAgICAgICAgICAgMzMgTUFJTl9TVEFURV9HRU5fSUZTICwgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFuIElGUywgc3dpdGNoIHRoZSByeC1vbiBmb3IgYW4gQUNLCisgKiAgICAgICAgICAgICAgICAgICAgICAzNCBNQUlOX1NUQVRFX0dFTl9JRlMgLCBnZW5lcmF0aW5nIGFuIFNJRlMgKFNob3J0IEludGVyIEZyYW1lIFNwYWNlKQorICogICAgICAgICAgICAgICAgICAgICAgMzUgTUFJTl9TVEFURV9HRU5fSUZTICwgZ2VuZXJhdGluZyBhbiBMSUZTIChMb25nIEludGVyIEZyYW1lIFNwYWNlKQorICogICAgICAgICAgICAgICAgICAgICAgMzYgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgJ2NzbHBlcmlvZF90aW1lcl9yZWFkeScgaXMgcmVhZHkgc2VudCB0aGUgZGF0YSBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgMzcgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgJ1JlbmRlenZvdXMgemVybyB0aW1lIG5vdCB5ZXQgdHJhbnNtaXR0ZWQgc2VudCBhbm90aGVyIFdVIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAzOCBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGV4aXQsIGNvcnJlY3RlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMzkgTUFJTl9TVEFURV9HRU5fSUZTX0ZJTklTSCBpbiBDU0wgbW9kZSwgcnhfcmVzdW1lX2FmdGVyX3R4IGlzIHNldAorICogICAgICAgICAgICAgICAgICAgICAgNDAgTUFJTl9TVEFURV9TRU5UX1NUQVRVUyBDU0xNb2RlIHd1X3NlcXVlbmNlX2RvbmVfZmxhZyA6CisgKiAgICAgICAgICAgICAgICAgICAgICA0MSBNQUlOX1NUQVRFX0FERF9ERUxBWSBleGl0LCBnb3RvIFJYIGZvciBmcmFtZSBwZW5kaW5nIHRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDQyIE1BSU5fU1RBVEVfQUREX0RFTEFZIGV4aXQsIGdvdG8gSURMRQorICogICAgICAgICAgICAgICAgICAgICAgNDMgTUFJTl9TVEFURV9SWCBzd2l0Y2ggdGhlIFJYIGZyb20gb2ZmIHRvIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA0NCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVEFSVCB3YWl0ZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICA0NSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIHN0YXJ0IHRoZSBNYWNBY2tEdXJhdGlvbiB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDYgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBzdGFydCB0aGUgYWNrIHdhaXQgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ3IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgTk9STUFMIG1vZGUgOiBzdGFydCByeF9kdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNDggTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBUU0NIIG1vZGUgOiBzdGFydCBtYWNUU1J4V2FpdCAobWFjVFNSeFdhaXQpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA0OSBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIENTTCBtb2RlIDogc3RhcnQgdGhlIGNzbF9yeF9kdXJhdGlvbiAobWFjQ1NMc2FtcGxlUGVyaW9kKSB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNTAgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBDU0wgbW9kZSA6IHN0YXJ0IHRoZSBjc2xfcnhfZHVyYXRpb24gKG1hY0NTTGRhdGFQZXJpb2QpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1MSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEgYWNrd2FpdF90aW1lcl9yZWFkeSBvciBhY2tfcmVjZWl2ZWRfaW5kCisgKiAgICAgICAgICAgICAgICAgICAgICA1MiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDIgbm9ybWFsX21vZGUuIEFDSyB3aXRoIEZQIGJpdCBzZXQsIHN0YXJ0IGZyYW1lIHBlbmRpbmcgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDU0IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNCBSeEFsd2F5c09uIGlzIHNldCB0byAwCisgKiAgICAgICAgICAgICAgICAgICAgICA1NSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDUgVFNDSCBtb2RlIHZhbGlkIGZyYW1lIHJ4ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDU2IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNiBUU0NIIG1vZGUgbWFjVFNSeHdhaXQgZXhwaXJlZAorICogICAgICAgICAgICAgICAgICAgICAgNTcgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA3IG1hY0NTTHNhbXBsZVBlcmlvZCB0aW1lciByZWFkeQorICogICAgICAgICAgICAgICAgICAgICAgNTggTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA4IGNzbF9tb2RlLiBEYXRhIGZyYW1lIHJlY2lldmVkIHdpdGggRlAgYml0IHNldCwgaW5jcmVtZW50IFJYIGR1cmF0aW9uIHRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDU5IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgOSBDU0wgbW9kZSA6IFJlY2VpdmVkIHd1IGZyYW1lIGluIGRhdGEgbGlzdGVuaW5nIHBlcmlvZCByZXN0YXJ0IG1hY0NTTGRhdGFQZXJpb2QgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDYwIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTAgY3NsX3J4X2R1cmF0aW9uX3JlYWR5IG9yIGNzbCBkYXRhIGZyYW1lIHJlY2VpdmVkOgorICogICAgICAgICAgICAgICAgICAgICAgNjEgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMSBub3JtYWxfbW9kZS4gRlAgYml0IGlzIHNldCwgc3RhcnQgZnJhbWUgcGVuZGluZyB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNjIgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMiBub3JtYWwgbW9kZSByeF9kdXJhdGlvbl90aW1lcl9yZWFkeSBhbmQgZnJhbWVfcGVuZGluZ190aW1lcl9yZWFkeQorICogICAgICAgICAgICAgICAgICAgICAgNjMgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMyBhY2tub3dsZWRnZSBmcmFtZSByZXF1ZXN0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDY0IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMTQgSW50ZXJydXB0IHRvIHNlbnQgYSBmcmFtZS4gZm91bmRfdHhfcGFja2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA2NSBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORCBSWiB0aW1lIGlzIGZhciBhd2F5LCBzd2l0Y2ggcmVjZWl2ZXIgT2ZmIGFuZCB3YWl0IGZvciBjc2xfcnhfcnpfdGltZSBiZWZvcmUgc3dpdGNoaW5nIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA2NiBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORCBSWiB0aW1lIGlzIG5vdCBzbyBmYXIgYXdheSwga2VlcCByZWNlaXZlciBPbiBhbmQgd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDY3IE1BSU5fU1RBVEVfUlhfU1RBUlRfUEhZUlhTVE9QIGFjayB3aXRoIGZwIHJlY2VpdmVkIGtlZXAgcnggb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDY4IE1BSU5fU1RBVEVfUlhfU1RBUlRfUEhZUlhTVE9QIHN3aXRjaCB0aGUgUlggZnJvbSBvbiB0byBvZmYKKyAqICAgICAgICAgICAgICAgICAgICAgIDY5IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUT1AgYWNrbm93bGVkZ2UgZG9uZSA6IHN3aXRjaCBiYWNrIHRvIGZpbmlzaCBUWAorICogICAgICAgICAgICAgICAgICAgICAgNzAgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RPUCBzd2l0Y2ggdGhlIFJYIG9mZgorICogICAgICAgICAgICAgICAgICAgICAgNzEgTUFJTl9TVEFURV9FRCBzd2l0Y2ggdGhlIFJYIGZyb20gb2ZmIHRvIG9uCisgKiAgICAgICAgICAgICAgICAgICAgICA3MiBNQUlOX1NUQVRFX0VEX1dBSVRfUEhZUlhTVEFSVCB3YWl0ZWQgZm9yIHBoeVJ4U3RhcnR1cAorICogICAgICAgICAgICAgICAgICAgICAgNzMgTUFJTl9TVEFURV9FRF9XQUlUX0VEU0NBTkRVUkFUSU9OIHdhaXRlZCBmb3IgRWRTY2FuRHVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDc0IE1BSU5fU1RBVEVfRURfV0FJVF9QSFlSWFNUT1AgZW5kIG9mIEVuZXJneSBEZXRlY3Rpb24sIGdvdCBJRExFCisgKiAgICAgICAgICAgICAgICAgICAgICAgICA3NSAtIDEyNyBOb3QgdXNlZAorICoKKyAqICAgICAgMHgzMglSWCBlbmFibGUgYW5kIGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNi0wID0gZGV0YWlsZWQgc3RhdGVtYWNoaW5lIGluZm8gc2VlIGRiZ19jb250cm9sID0gMHgzMQorICoKKyAqICAgICAgMHgzMwlUWCBlbmFibGUgYW5kIGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNi0wID0gZGV0YWlsZWQgc3RhdGVtYWNoaW5lIGluZm8gc2VlIGRiZ19jb250cm9sID0gMHgzMQorICoKKyAqICAgICAgMHgzNAlQaHkgZW5hYmxlLCBUWCBlbmFibGUgYW5kIFJ4IGVuYWJsZSBhbmQgc3RhdGUgbWFjaGluZSBzdGF0ZXMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTAgPSBTdGF0ZSBtYWNoaW5lIHN0YXRlcworICogICAgICAgICAgICAgICAgICAgICAgIDEgIE1BSU5fU1RBVEVfSURMRQorICogICAgICAgICAgICAgICAgICAgICAgIDIgIE1BSU5fU1RBVEVfQ1NNQV9DQV9XQUlUX0ZPUl9NRVRBREFUQQorICogICAgICAgICAgICAgICAgICAgICAgIDMgIE1BSU5fU1RBVEVfQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgIDQgIE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQV8wCisgKiAgICAgICAgICAgICAgICAgICAgICAgNSAgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAgNiAgTUFJTl9TVEFURV9TSU5HTEVfQ0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAgNyAgTUFJTl9TVEFURV9XQUlUX0FDS19ERUxBWQorICogICAgICAgICAgICAgICAgICAgICAgIDggIE1BSU5fU1RBVEVfVFNDSF9UWF9GUkFNRQorICogICAgICAgICAgICAgICAgICAgICAgIDkgIE1BSU5fU1RBVEVfVFhfRlJBTUUKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMCBNQUlOX1NUQVRFX1RYX0ZSQU1FMQorICogICAgICAgICAgICAgICAgICAgICAgIDExIE1BSU5fU1RBVEVfVFhfRlJBTUVfVzEKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMiBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cyCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTMgTUFJTl9TVEFURV9UWF9XQUlUX0xBU1RfU1lNQk9MCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTQgTUFJTl9TVEFURV9UWF9SQU1QRE9XTgorICogICAgICAgICAgICAgICAgICAgICAgIDE1IE1BSU5fU1RBVEVfVFhfUkFNUERPV05fVworICogICAgICAgICAgICAgICAgICAgICAgIDE2IE1BSU5fU1RBVEVfVFhfUEhZVFJYV0FJVAorICogICAgICAgICAgICAgICAgICAgICAgIDE3IE1BSU5fU1RBVEVfR0VOX0lGUworICogICAgICAgICAgICAgICAgICAgICAgIDE4IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0gKKyAqICAgICAgICAgICAgICAgICAgICAgICAxOSBNQUlOX1NUQVRFX1NFTlRfU1RBVFVTCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjAgTUFJTl9TVEFURV9BRERfREVMQVkKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMSBNQUlOX1NUQVRFX1RTQ0hfUlhfQUNLREVMQVkKKyAqICAgICAgICAgICAgICAgICAgICAgICAyMiBNQUlOX1NUQVRFX1JYCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjMgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RBUlQKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjUgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRAorICogICAgICAgICAgICAgICAgICAgICAgIDI2IE1BSU5fU1RBVEVfQ1NMX1JYX0lETEVfRU5ECisgKiAgICAgICAgICAgICAgICAgICAgICAgMjcgTUFJTl9TVEFURV9SWF9TVEFSVF9QSFlSWFNUT1AKKyAqICAgICAgICAgICAgICAgICAgICAgICAyOCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVE9QCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjkgTUFJTl9TVEFURV9FRAorICogICAgICAgICAgICAgICAgICAgICAgIDMwIE1BSU5fU1RBVEVfRURfV0FJVF9QSFlSWFNUQVJUCisgKiAgICAgICAgICAgICAgICAgICAgICAgMzEgTUFJTl9TVEFURV9FRF9XQUlUX0VEU0NBTkRVUkFUSU9OCisgKgorICogICAgICAweDM1CWxtYWMgY29udHJvbGxlciB0byB0eCBpbnRlcmZhY2Ugd2l0aCB3YWtldXAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGN0cmxfbG1hY190b190eC50eF9mcmFtZV9ubWJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGN0cmxfdHhfdG9fbG1hYy50eF9sYXN0X3N5bWJvbAorICoKKyAqICAgICAgMHgzNglsbWFjIGNvbnRyb2xsZXIgdG8gdHggaW50ZXJmYWNlIHdpdGggZnJhbWUgcGVuZGluZworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuLmZwX2JpdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGN0cmxfbG1hY190b190eC50eF9mcmFtZV9ubWJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBjdHJsX2xtYWNfdG9fdHgudHhfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGN0cmxfdHhfdG9fbG1hYy50eF9sYXN0X3N5bWJvbAorICoKKyAqICAgICAgMHgzNwlyeCBwaXBlcGxpbmUgdG8gbG1hYyBjb250cm9sbGVyIGludGVyZmFjZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjdHJsX3J4X3RvX2xtYWMucnhfc29mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfcnhfdG9fbG1hYy5yeF9lb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gY3RybF9yeF90b19sbWFjLnBhY2tldF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gYWNrX3JlY2VpdmVkX2luZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gYWNrX3JlcXVlc3RfaW5kCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3J4X3RvX2xtYWMuZGF0YV9yZXF1ZXN0X2ZyYW1lCisgKgorICogICAgICAweDM4CWNzbCBzdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBjc2xfc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQtMSA9IHN3aW9fYWx3YXlzX29uX3RvX2xtYWNfY3RybC50eF9mbGFnX3N0YXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGZvdW5kX3d1X3BhY2tldDsKKyAqCisgKiAgICAgIDB4MzkJVHNjaCBUWCBhY2sgdGltaW5nCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPSBzd2lvX2Fsd2F5c19vbl90b19sbWFjX2N0cmwudHhfZmxhZ19zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGN0cmxfcnhfdG9fbG1hYy5wYWNrZXRfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IG9uZV91c190aW1lcl9yZWFkeQorICoKKyAqICAgICAgMHgzYS0weDNmCU5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDQwIC0gMHg0ZiBEZWJ1ZyBzZWN1cml0eQorICogICAgICAweDQwCVNlY3VyaXR5IGNvbnRyb2wKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjU3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjVHhSeG4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjQWJvcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHN3aW9fdG9fc2VjdXJpdHkuc2VjRW5jRGVjbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gc3dpb19mcm9tX3NlY3VyaXR5LnNlY0J1c3kKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHN3aW9fZnJvbV9zZWN1cml0eS5zZWNBdXRoRmFpbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gc3dpb19mcm9tX3NlY3VyaXR5LnNlY1JlYWR5X2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9ICcwJworICoKKyAqICAgICAgMHg0MQlTZWN1cml0eSBjdGxpZCBhY2Nlc3MgcnggYW5kIHR4CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9zZWNfY2kubGRfc3RyYgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gdHhfc2VjX2NpLmN0bGlkX3J3CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSB0eF9zZWNfY2kuc2VsZWN0cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gdHhfc2VjX2NvLmRfcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSByeF9zZWNfY2kubGRfc3RyYgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gcnhfc2VjX2NpLmN0bGlkX3J3CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSByeF9zZWNfY2kuc2VsZWN0cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gcnhfc2VjX2NvLmRfcmR5CisgKgorICogICAgICAweDQyCVNlY3VyaXR5IGN0bGlkIGFjY2VzcyB0eCB3aXRoIHNlY193cl9kYXRhX3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9zZWNfY2kubGRfc3RyYgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gdHhfc2VjX2NpLmN0bGlkX3J3CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSB0eF9zZWNfY2kuc2VsZWN0cAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gdHhfc2VjX2NvLmRfcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTAgPSBzZWNfd3JfZGF0YV92YWxpZAorICoKKyAqICAgICAgMHg0MwlTZWN1cml0eSBjdGxpZCBhY2Nlc3Mgcnggd2l0aCBzZWNfd3JfZGF0YV92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHJ4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gcnhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHJ4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0wID0gc2VjX3dyX2RhdGFfdmFsaWQKKyAqCisgKiAgICAgIDB4NDQtMHg0ZglOb3QgdXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNyAtIDAgPSBhbGwgJzAnCisgKgorICogZGJnX2NvbnRyb2wgaW4gcmFuZ2UgMHg1MCAtIDB4NWYgQUhCIGJ1cworICogICAgICAweDUwCWFoYiBidXMgd2l0aG91dCBoc2l6ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gaHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNi01ID0gaHRyYW5zCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBod3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGhyZWFkeV9pbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gaHJlYWR5X291dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMS0wID0gaHJlc3AKKyAqCisgKiAgICAgIDB4NTEJYWhiIGJ1cyB3aXRob3V0IGh3cmVhZHlfaW4gYW5kIGhyZXNwKDEpCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBoc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2LTUgPSBodHJhbnMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGh3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0yID0gaGhzaXplKDEgZG93bnRvIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBocmVhZHlfb3V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVzcCgwKQorICoKKyAqICAgICAgMHg1MglBbWJhIHR4IHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGFpX3R4LnBlbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFpX3R4LnBzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFpX3R4LnB3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gYW9fdHgucHJlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhb190eC5wc2x2ZXJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyLTEgPSBwc2l6ZV90eAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlYWR5X291dAorICoKKyAqICAgICAgMHg1MwlBbWJhIHJ4IHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGFpX3J4LnBlbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFpX3J4LnBzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFpX3J4LnB3cml0ZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gYW9fcngucHJlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhb19yeC5wc2x2ZXJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyLTEgPSBwc2l6ZV9yeAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlYWR5X291dAorICoKKyAqICAgICAgMHg1NAlBbWJhIHJlZ2lzdGVyIG1hcCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV9yZWcucGVuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYWlfcmVnLnBzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFpX3JlZy5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3JlZy5wcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGFvX3JlZy5wc2x2ZXJyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyLTEgPSAiMDAiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBocmVhZHlfb3V0CisgKgorICogICAgICAweDU1LTB4NWYJTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfQ09OVFJPTCAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MICAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX0NPTlRST0wgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX0NPTlRST0wgIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Ynl0ZV9lCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgzCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cgKGV2ZW50IHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgIDB4NDAwOTAzOTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FICAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eGJ5dGVfZQorICoKKyAqIEluZGljYXRlcyB0aGUgZmlyc3QgYnl0ZSBvZiBhIGZyYW1lIGlzIHRyYW5zbWl0dGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FICAgICAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgICAgICAgICAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAgICAgICAgICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgICAgICAgICAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2xhc3Rfc3ltYm9sX2UKKyAqCisgKiBJbmRpY2F0ZXMgdGhlIGxhc3Qgc3ltYm9sIG9mIGEgZnJhbWUgaXMgdHJhbnNtaXR0ZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfRSAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9FICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX0UgIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9FIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Ynl0ZV9tCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgzCisgKiBBY2Nlc3MgbW9kZTogRU0tUlcgKGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NICAweDQwMDkwMzk4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAgMHgzCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhieXRlX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInR4Ynl0ZV9lIi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gICAgICAgICAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAgICAgICAgICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NICAgICAgICAgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAgICAgICAgIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfbGFzdF9zeW1ib2xfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAidHhfbGFzdF9zeW1ib2xfZSIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX00gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfTSAgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9NICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfTSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TICAgIDB4NDAwOTA0MDAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1MgICAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUyAgICAweDEKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU19OVU0gICAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU19JTlRWTCAgICAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVRfTlVNICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVRfSU5UVkwgMHgyMAorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfc3RhdAorICoKKyAqIFBhY2tldCBpcyByZWFkeSBmb3IgdHJhbnNtaXNzaW9uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUICAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyX2UKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVyAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgIDB4NDAwOTA0MDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgIDB4MQorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9JTlRWTCAgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9JTlRWTCAgMHgyMAorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfY2xlYXJfZQorICoKKyAqIFdoZW4gdGhlIExNQUMgY2xlYXJzIHRoZSB0eF9mbGFnX3N0YXQgc3RhdHVzIGV2ZW50IGJpdCB0eF9mbGFnX2NsZWFyX2UgaXMgc2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcl9tCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRU0tUlcgKGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAgMHg0MDA5MDQwOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAgMHgxCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX01fTlVNICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NX0lOVFZMICAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX01fTlVNICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NX0lOVFZMICAweDIwCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcl9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJ0eF9mbGFnX2NsZWFyX2UiLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfcHJpb3JpdHkKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDFmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZICAweDQwMDkwNDEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSAgMHgxZgorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFlfTlVNICAgIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFlfSU5UVkwgIDB4MjAKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZX05VTSAgICAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZX0lOVFZMICAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUF9OVU0gICAgICAgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUF9JTlRWTCAgICAgMHgyMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfcHJpb3JpdHkKKyAqCisgKiBQcmlvcml0eSBvZiBwYWNrZXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgIDB4ZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSA0CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0lzV2FrZVVwCisgKgorICogQSBiYXNpYyB3YWtlLXVwIGZyYW1lIGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIFVNQUMgaW4gdGhlIFR4IGJ1ZmZlci4KKyAqIFRoZSBtZXRhIGRhdGEgY29udHJvbCBiaXQgSXNXYWtlVXAgbXVzdCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGEgV2FrZS11cCBmcmFtZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVAgICAgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVAgICAgIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQICAgICA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVAgICAgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfc2V0X29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfU0VUX09TICAweDQwMDkwNDgwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfU0VUX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfU0VUX09TICAweGYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfc2V0CisgKgorICogVG8gc2V0IHR4X2ZsYWdfc3RhdAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1NFVF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQgIDB4ZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQgIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NFVCA0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9jbGVhcl9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NMRUFSX09TICAweDQwMDkwNDg0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ0xFQVJfT1MgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DTEVBUl9PUyAgMHhmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyCisgKgorICogVG8gY2xlYXIgdHhfZmxhZ19zdGF0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIgIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DTEVBUl9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUiAgMHhmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSICAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUiA0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfYWx3YXlzX29uX3JlZ21hcF9XYWtlVXBJbnRUaHIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAgMHg0MDA5MTAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfV2FrZVVwSW50VGhyCisgKgorICogVGhyZXNob2xkIGZvciB3YWtlLXVwIGludGVycnVwdC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSICBJTkRfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQSU5UVEhSCisjZGVmaW5lIE1TS19GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfd2FrZXVwX2NvbnRyb2wKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDMKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wgIDB4NDAwOTEwMDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfQ09OVFJPTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MICAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfYWx3YXlzX29uX3JlZ21hcF9XYWtlVXBFbmFibGUKKyAqCisgKiBJZiBzZXQsIHRoZSBXYWtlVXBJbnRUaHIgaXMgZW5hYmxlZCB0byBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUEVOQUJMRSAgICAgICBJTkRfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wKKyNkZWZpbmUgTVNLX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUEVOQUJMRSAgICAgICAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUEVOQUJMRSAgICAgICAxCisjZGVmaW5lIFNJWkVfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQRU5BQkxFICAgICAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfYWx3YXlzX29uX3JlZ21hcF9XYWtldXBUaW1lckVuYWJsZQorICoKKyAqIEEgJzEnIEVuYWJsZXMgdGhlIHdha2V1cCB0aW1lci4KKyAqIE5vdGUgdGhhdCBpbiBvbl9vZmZfcmVnbWFwLCB0aGUgcmVnaXN0ZXIgV2FrZXVwVGltZXJFbmFibGVTdGF0dXMgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGlzIHJlZ2lzdGVyIGFmdGVyIGJlaW5nIGNsb2NrZWQgYnkgTFBfQ0xLLgorICogQ2hlY2tpbmcgdGhpcyByZWdpc3RlciBjYW4gYmUgdXNlZCBhcyBpbmRpY2F0aW9uIGZvciBzb2Z0d2FyZSB0aGF0IHRoaXMgYml0IGlzIGVmZmVjdGl2ZSBpbiB0aGUgZGVzaW5nLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRSAgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRSAgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRSAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFIDEKKyNlbHNlIC8vIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9maWZvCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gMHg0MDA4MDAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fTlVNXzFEIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX05VTV8yRCAweDIwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX0lOVFZMXzJEIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfRklGT19OVU1fMUQgMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9GSUZPX0lOVFZMXzFEIDB4ODAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fTlVNXzJEIDB4MjAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk9fSU5UVkxfMkQgMHg0CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9maWZvCisgKgorICogVHJhbnNtaXQgZmlmbyBidWZmZXIsIGNvbnRhaW5zIDMyIGFkZHJlc3NlcyBwZXIgZW50cnkgKDMyYiB4IDMyYSA9IDEyOEIpLiBUaGVyZSBhcmUgNCBlbnRyaWVzIHN1cHBvcnRlZC4KKyAqIE5vdGUgdGhhdCwgZGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBmaWZvIGlzIE5PVCByZXRhaW5lZCB3aGVuIHRoZSBMTUFDIGlzIHB1dCBpbnRvIGRlZXAtc2xlZXAhCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8KKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYX0ZJRk8gMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fVFhfRklGTyAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfbWV0YV9kYXRhXzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAgMHg0MDA4MDIwMAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAgMHg1N2ZmZmZmZgorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzBfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzBfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFJfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fRlJBTUVUWVBFX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRV9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BX05VTSAweDQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkFfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLUkVRVUVTVF9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQV9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DUkMxNl9FTkFfSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fZnJhbWVfbGVuZ3RoCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogRnJhbWUgbGVuZ3RoIChpbiBieXRlcykKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIIDB4N2YKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FX0xFTkdUSCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fRlJBTUVfTEVOR1RIIDcKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9waHlBdHRyCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogZHVyaW5nIHRoZSBUeC1vbiBwaGFzZSwgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgcGh5UnhBdHRyWzE2XSBzb3VyY2VzIHRoZSBQSFlBVFRSIG91dHB1dCBzaWduYWwgdG8gdGhlIERQSFkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1BIWUFUVFIgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSIDB4N2ZmZjgwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSIDcKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9QSFlBVFRSIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fZnJhbWV0eXBlCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogdGhlIGZyYW1lIHR5cGUgb2YgdGhlIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgKERhdGEvQ21kL0Fjay93YWtldXAgZnJhbWUvZXRjLikuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSAweDM4MDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSAyMworI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0ZSQU1FVFlQRSAzCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX0NzbWFDYV9lbmEKKyAqCisgKiBUeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiAnMScgaW5kaWNhdGVzIHRoYXQgYSBDU01BLUNBIGlzIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoaXMgcGFja2V0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBX0VOQSAweDQwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQV9FTkEgMjYKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FfRU5BIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQWNrUmVxdWVzdAorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6ICcxJyBpbmRpY2F0ZXMgdGhhdCBhbiBhY2tub3dsZWRnZSBpcyBleHBlY3RlZCBmcm9tIHRoZSByZWNpcGllbnQgb2YgdGhpcyBwYWNrZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1QgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUIDB4MTAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS1JFUVVFU1QgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9BQ0tSRVFVRVNUIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fQ1JDMTZfZW5hCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogSW5kaWNhdGVzIHdoZXRoZXIgQ1JDMTYgaW5zZXJ0aW9uIG11c3QgYmUgZW5hYmxlZCBvciBub3QuCisgKiAgMCA6IE5vIGhhcmR3YXJlIGluc2VydGVkIENSQzE2CisgKiAgMSA6IEhhcmR3YXJlIGluc2VydHMgQ1JDMTYKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMAorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRU5BIDB4NDAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSAzMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VOQSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfcmV0ZW50aW9uX3JhbV90eF9tZXRhX2RhdGFfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSAweDQwMDgwMjA0CisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfTUVUQV9EQVRBXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMSAweGZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMV9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9NRVRBX0RBVEFfMV9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9NQUNTTl9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9NQUNTTl9JTlRWTCAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9tYWNTTgorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IFNlcXVlbmNlIE51bWJlciBvZiB0aGlzIHBhY2tldC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX01FVEFfREFUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTiAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9NQUNTTiAwCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fTUFDU04gOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfcmV0dXJuX3N0YXR1c18wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMCAweDQwMDgwMjQwCisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18wIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMF9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzBfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVBfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fVFhUSU1FU1RBTVBfSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fVHhUaW1lc3RhbXAKKyAqCisgKiBUeCByZXR1cm4gc3RhdHVzIHBlciBlbnRyeTogVHJhbnNtaXQgVGltZXN0YW1wCisgKiBUaGUgVGltZXN0YW1wIG9mIHRoZSB0cmFuc21pdHRlZCBwYWNrZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX1RYVElNRVNUQU1QIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9UWFRJTUVTVEFNUCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX3JldGVudGlvbl9yYW1fdHhfcmV0dXJuX3N0YXR1c18xCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMSAweDQwMDgwMjQ0CisjZGVmaW5lIFNJWkVfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX1JFVEVOVElPTl9SQU1fVFhfUkVUVVJOX1NUQVRVU18xIDB4MWYKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMV9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzFfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTF9OVU0gMHg0CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9BQ0tGQUlMX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQUZBSUxfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBRkFJTF9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVNfTlVNIDB4NAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9BY2tGYWlsCisgKgorICogVHggcmV0dXJuIHN0YXR1cyBwZXIgZW50cnk6IEFja25vd2xlZGdlbWVudCBzdGF0dXMKKyAqICAwIDogU1VDQ0VTUworICogIDEgOiBGQUlMCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQUNLRkFJTCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0FDS0ZBSUwgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9Dc21hQ2FGYWlsCisgKgorICogVHggcmV0dXJuIHN0YXR1cyBwZXIgZW50cnk6IENTTUEtQ0Egc3RhdHVzCisgKiAgMCA6IFNVQ0NFU1MKKyAqICAxIDogRkFJTAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9UWF9SRVRVUk5fU1RBVFVTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQUZBSUwgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FGQUlMIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9Dc21hQ2FOclJldHJpZXMKKyAqCisgKiBUeCByZXR1cm4gc3RhdHVzIHBlciBlbnRyeTogTnVtYmVyIG9mIENTTUEtQ0EgcmV0cmllcyBiZWZvcmUgdGhpcyBmcmFtZSBoYXMgYmVlbiB0cmFuc21pdHRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9DU01BQ0FOUlJFVFJJRVMgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1RYX1JFVFVSTl9TVEFUVVNfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTIDB4MWMKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NTTUFDQU5SUkVUUklFUyAyCisjZGVmaW5lIFNJWkVfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1NNQUNBTlJSRVRSSUVTIDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3J4X21ldGFfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzAgMHg0MDA4MDI4MAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMCAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzBfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUF9OVU0gMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVBfSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX3JldGVudGlvbl9yYW1fcnhfdGltZXN0YW1wCisgKgorICogUnggbWV0YSBkYXRhIHBlciBlbnRyeTogVGltZXN0YW1wIHRha2VuIHdoZW4gZnJhbWUgd2FzIHJlY2VpdmVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1JYX1RJTUVTVEFNUCBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8wCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUlhfVElNRVNUQU1QIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9SWF9USU1FU1RBTVAgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yZXRlbnRpb25fcmFtX3J4X21ldGFfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEgMHg0MDA4MDI4NAorI2RlZmluZSBTSVpFX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMSAweGZmZmQKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMV9OVU0gMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzFfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1JfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1JFU19GUk1fVFlQRV9FUlJPUl9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1ZFUlNJT05fRVJST1JfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0RQQU5JRF9FUlJPUl9OVU0gMHg4CisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1JfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fREFERFJfRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fU1BBTklEX0VSUk9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUl9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SX05VTSAweDgKKyNkZWZpbmUgRlRERl9SRVRFTlRJT05fUkFNX0lTUEFOSURfQ09PUkRfRVJST1JfSU5UVkwgMHgxMAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1JfTlVNIDB4OAorI2RlZmluZSBGVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1JfSU5UVkwgMHgxMAorCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX2NyYzE2X2Vycm9yCisgKgorICogUnggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0LCBhIENSQyBlcnJvciBoYXMgb2NjdXJyZWQgaW4gdGhpcyBmcmFtZSwgYXBwbGljYWJsZSBmb3IgdHJhbnNwYXJlbnQgbW9kZSBvbmx5CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fQ1JDMTZfRVJST1IgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX0NSQzE2X0VSUk9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX3JldGVudGlvbl9yYW1fcmVzX2ZybV90eXBlX2Vycm9yCisgKgorICogUnggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJyB0aGlzIGZyYW1lIGlzIGEgbm90IHN1cHBvcnRlZCBmcmFtZSB0eXBlLCBhcHBsaWNhYmxlIHdoZW4gZnJhbWUgaXMgbm90IGRpc2NhcmRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1RZUEVfRVJST1IgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9UWVBFX0VSUk9SIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1RZUEVfRVJST1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9yZXNfZnJtX3ZlcnNpb25fZXJyb3IKKyAqCisgKiBSeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnIHRoaXMgZnJhbWUgaXMgYSBub3Qgc3VwcG9ydGVkIGZyYW1lIHZlcnNpb24sIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1ZFUlNJT05fRVJST1IgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUkVTX0ZSTV9WRVJTSU9OX0VSUk9SIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9SRVNfRlJNX1ZFUlNJT05fRVJST1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9kcGFuaWRfZXJyb3IKKyAqCisgKiBSeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnLCBhIGRlc3RpbmF0aW9uIFBBTiBJRCBlcnJvciBoYXMgb2NjdXJyZWQsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RQQU5JRF9FUlJPUiBJTkRfUl9GVERGX1JFVEVOVElPTl9SQU1fUlhfTUVUQV8xCisjZGVmaW5lIE1TS19GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fRFBBTklEX0VSUk9SIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9EUEFOSURfRVJST1IgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9kYWRkcl9lcnJvcgorICoKKyAqIFJ4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGlmIHNldCB0byAnMScsIGEgZGVzdGluYXRpb24gQWRkcmVzcyBlcnJvciBoYXMgb2NjdXJyZWQsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SIDB4MjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9SRVRFTlRJT05fUkFNX0RBRERSX0VSUk9SIDUKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9EQUREUl9FUlJPUiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX3NwYW5pZF9lcnJvcgorICoKKyAqIFJ4IG1ldGEgZGF0YSBwZXIgZW50cnk6IGlmIHNldCB0byAnMScsIGEgUEFOIElEIGVycm9yIGhhcyBvY2N1cnJlZCwgYXBwbGljYWJsZSB3aGVuIGZyYW1lIGlzIG5vdCBkaXNjYXJkZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JFVEVOVElPTl9SQU1fU1BBTklEX0VSUk9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUiAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9TUEFOSURfRVJST1IgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1NQQU5JRF9FUlJPUiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9yZXRlbnRpb25fcmFtX2lzcGFuaWRfY29vcmRfZXJyb3IKKyAqCisgKiBSeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnLCB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgbm90IGZvciBQQU4gY29vcmRpbmF0b3IsIGFwcGxpY2FibGUgd2hlbiBmcmFtZSBpcyBub3QgZGlzY2FyZGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX0lTUEFOSURfQ09PUkRfRVJST1IgSU5EX1JfRlRERl9SRVRFTlRJT05fUkFNX1JYX01FVEFfMQorI2RlZmluZSBNU0tfRl9GVERGX1JFVEVOVElPTl9SQU1fSVNQQU5JRF9DT09SRF9FUlJPUiAweDgwCisjZGVmaW5lIE9GRl9GX0ZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SIDcKKyNkZWZpbmUgU0laRV9GX0ZUREZfUkVURU5USU9OX1JBTV9JU1BBTklEX0NPT1JEX0VSUk9SIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfcmV0ZW50aW9uX3JhbV9xdWFsaXR5X2luZGljYXRvcgorICoKKyAqIFJ4IG1ldGEgZGF0YSBwZXIgZW50cnk6IHRoZSBMaW5rIFF1YWxpdHkgSW5kaWNhdGlvbiB2YWx1ZSBkdXJpbmcgcmVjZXB0aW9uIG9mIHRoaXMgZnJhbWUuCisgKgorICogIyAkc29mdHdhcmVfc2NyYXRjaEByZXRlbnRpb25fcmFtCisgKiAjIFRYIHJhbSBub3QgdXNlZCBieSBoYXJkd2FyZSwgY2FuIGJlIHVzZWQgYnkgc29mdHdhcmUgYXMgc2NyYXRjaCByYW0gd2l0aCByZXRlbnRpb24uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SIElORF9SX0ZUREZfUkVURU5USU9OX1JBTV9SWF9NRVRBXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX1JFVEVOVElPTl9SQU1fUVVBTElUWV9JTkRJQ0FUT1IgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9SRVRFTlRJT05fUkFNX1FVQUxJVFlfSU5ESUNBVE9SIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9yeF9yYW1fcnhfZmlmbworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMHg0MDA4ODAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9SWF9SQU1fUlhfRklGTyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9SWF9SQU1fUlhfRklGTyAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fTlVNXzFEIDB4OAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX0lOVFZMXzFEIDB4ODAKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19OVU1fMkQgMHgyMAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX0lOVFZMXzJEIDB4NAorI2RlZmluZSBGVERGX1JYX1JBTV9SWF9GSUZPX05VTV8xRCAweDgKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19JTlRWTF8xRCAweDgwCisjZGVmaW5lIEZUREZfUlhfUkFNX1JYX0ZJRk9fTlVNXzJEIDB4MjAKKyNkZWZpbmUgRlRERl9SWF9SQU1fUlhfRklGT19JTlRWTF8yRCAweDQKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9yeF9yYW1fcnhfZmlmbworICoKKyAqIFJlY2VpdmUgZmlmbyByYW0sIGNvbnRhaW5zIDMyIGFkZHJlc3NlcyBwZXIgZW50cnkgKDMyYiB4IDMyYSA9IDEyOEIpLiBUaGVyZSBhcmUgOCBlbnRyaWVzIHN1cHBvcnRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX1JYX1JBTV9SWF9GSUZPIElORF9SX0ZUREZfUlhfUkFNX1JYX0ZJRk8KKyNkZWZpbmUgTVNLX0ZfRlRERl9SWF9SQU1fUlhfRklGTyAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfUlhfUkFNX1JYX0ZJRk8gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9SWF9SQU1fUlhfRklGTyAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfUmVsX05hbWUKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgMHg0MDA5MDAwMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUgMHhmZmZmZmZmZgorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUVfSU5UVkwgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRV9JTlRWTCAweDQKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1JlbF9OYW1lCisgKgorICogQSA0IHdvcmRzIHdpZGUgcmVnaXN0ZXIsIHNob3dpbmcgaW4gQVNDSUkgdGhlIG5hbWUgb2YgdGhlIHJlbGVhc2UsIGVnLiAiZnRkZl8xMDciLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUkVMX05BTUUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JFTF9OQU1FIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SRUxfTkFNRSAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfQnVpbGRUaW1lCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSAweDQwMDkwMDEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfSU5UVkwgMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUVfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FX0lOVFZMIDB4NAorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfQnVpbGRUaW1lCisgKgorICogQSA0IHdvcmRzIHdpZGUgcmVnaXN0ZXIsIHNob3dpbmcgaW4gQVNDSUkgdGhlIGJ1aWxkIGRhdGUgKGRkIG1tbSB5eSkgYW5kIHRpbWUgKGhoOm1tKSBvZiBkZXZpY2UsIGVnLiAiMDEgRGVjIDE0IDE0OjEwICIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0JVSUxEVElNRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQlVJTERUSU1FIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9CVUlMRFRJTUUgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2dsb2JfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4ZmYwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg2ZmYwZQorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMCAweDQwMDkwMDIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMCAweDZmZjBlCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfSXNQQU5Db29yZGluYXRvcgorICoKKyAqIEVuYWJsZS9kaXNhYmxlIHJlY2VpdmVyIGNoZWNrIG9uIGFkZHJlc3MgZmllbGRzICgwPWVuYWJsZWQsIDE9ZGlzYWJsZWQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTUEFOQ09PUkRJTkFUT1IgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9JU1BBTkNPT1JESU5BVE9SIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfSVNQQU5DT09SRElOQVRPUiAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfSVNQQU5DT09SRElOQVRPUiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2RtYV9yZXEKKyAqCisgKiBTb3VyY2Ugb2YgdGhlIFJYX0RNQV9SRVEgb3V0cHV0IHBpbiBvZiB0aGlzIGJsb2NrLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9ETUFfUkVRIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfRE1BX1JFUSAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0RNQV9SRVEgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0RNQV9SRVEgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9kbWFfcmVxCisgKgorICogU291cmNlIG9mIHRoZSBUWF9ETUFfUkVRIG91dHB1dCBwaW4gb2YgdGhpcyBibG9jay4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRE1BX1JFUSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0RNQV9SRVEgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9ETUFfUkVRIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9ETUFfUkVRIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNTaW1wbGVBZGRyZXNzCisgKgorICogU2ltcGxlIGFkZHJlc3Mgb2YgdGhlIFBBTiBjb29yZGluYXRvcgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSU1QTEVBRERSRVNTIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0lNUExFQUREUkVTUyAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1NJTVBMRUFERFJFU1MgOAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNMRWVuYWJsZWQKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCB0aGUgTG93IEVuZXJneSBtb2RlIChhbHNvIGNhbGxlZCBDU0wpIGlzIGVuYWJsZWQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTEVFTkFCTEVEIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTEVFTkFCTEVEIDB4MjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCAxNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0xFRU5BQkxFRCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTQ0hlbmFibGVkCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIFRTQ0ggbW9kZSBpcyBlbmFibGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQ0hFTkFCTEVEIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNDSEVOQUJMRUQgMHg0MDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNDSEVOQUJMRUQgMTgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU0NIRU5BQkxFRCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nbG9iX2NvbnRyb2xfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGZmZmZmZmZmICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xIDB4NDAwOTAwMjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1BBTklkCisgKgorICogVGhlIFBBTiBJRCBvZiB0aGlzIGRldmljZS4KKyAqIFRoZSB2YWx1ZSAweEZGRkYgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhIFBBTi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFOSUQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQU5JRCAweGZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBTklEIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQU5JRCAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1Nob3J0QWRkcmVzcworICoKKyAqIFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuIFRoZSB2YWx1ZXMgMHhGRkZGIGFuZCAweEZGRkUgaW5kaWNhdGUgdGhhdCBubyBJRUVFIFNob3J0IEFkZHJlc3MgaXMgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSE9SVEFERFJFU1MgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNTSE9SVEFERFJFU1MgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDU0hPUlRBRERSRVNTIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nbG9iX2NvbnRyb2xfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGZmZmZmZmZmICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8yIDB4NDAwOTAwMjgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0dMT0JfQ09OVFJPTF8yIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2FFeHRlbmRlZEFkZHJlc3NfbAorICoKKyAqIFVuaXF1ZSBkZXZpY2UgYWRkcmVzcywgNDggYml0cyB3aWRlLCBsb3dlc3QgMzIgYml0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRVhURU5ERURBRERSRVNTX0wgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZ2xvYl9jb250cm9sXzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZmZmZmZmZiAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMyAweDQwMDkwMDJjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfR0xPQl9DT05UUk9MXzMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMyAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9hRXh0ZW5kZWRBZGRyZXNzX2gKKyAqCisgKiBVbmlxdWUgZGV2aWNlIGFkZHJlc3MsIDQ4IGJpdHMgd2lkZSwgaGlnaGVzdCAxNiBiaXQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19IIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9HTE9CX0NPTlRST0xfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19IIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FFWFRFTkRFREFERFJFU1NfSCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQUVYVEVOREVEQUREUkVTU19IIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmJmZmZmZmUKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAgMHg0MDA5MDAzMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAgMHhmYmZmZmZmZQorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfUnhvbkR1cmF0aW9uCisgKgorICogVGhlIHRpbWUgKGluIHN5bWJvbCBwZXJpb2RzKSB0aGUgUnggbXVzdCBiZSBvbiBhZnRlciBzZXR0aW5nIFJ4RW5hYmxlIHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OIDB4MWZmZmZmZQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhPTkRVUkFUSU9OIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWE9ORFVSQVRJT04gMjQKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfUnhBbHdheXNPbgorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSByZWNlaXZlciBzaGFsbCBiZSBhbHdheXMgb24gaWYgUnhFbmFibGUgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQUxXQVlTT04gMHgyMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEFMV0FZU09OIDI1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhBTFdBWVNPTiAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcHRpX3J4CisgKgorICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgZHVyaW5nIHJlY2VpdmluZyBmcmFtZXMsIGR1cmluZyB0aGUgYXV0byBBQ0sgKHdoZW4gdGhlIEFSIGJpdCBpcyBzZXQgaW4gdGhlIHJlY2VpdmVkIGZyYW1lLCBzZWUgW0ZSMDY1NV0gYW5kIGZ1cnRoZXIpLCBhIHNpbmdsZSBDQ0EgYW5kIEVEIHNjYW4uCisgKiBJbiBUU0NIIG1vZGUgdGhpcyByZWdpc3RlciB3aWxsIGJlIHVzZWQgZHVyaW5nIHRoZSB0aW1lIHNsb3QgaW4gd2hpY2ggZnJhbWVzIGNhbiBiZSByZWNlaXZlZCBhbmQgY29uc2VxdWVudGx5IGFuIEVuaGFuY2VkIEFDSyBjYW4gYmUgdHJhbnNtaXR0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9SWCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9SWCAweDc4MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfUlggMjcKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfUlggNAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9rZWVwX3BoeV9lbgorICoKKyAqIFdoZW4gdGhlIHRyYW5zbWl0IG9yIHJlY2VpdmUgYWN0aW9uIGlzIHJlYWR5IChMbWFjUmVhZHk0U2xlZXAgaXMgc2V0KSwgdGhlIFBIWV9FTiBzaWduYWwgaXMgY2xlYXJlZCB1bmxlc3MgdGhlIGNvbnRyb2wgcmVnaXN0ZXIga2VlcF9waHlfZW4gaXMgc2V0IHRvICcxJy4KKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIga2VlcF9waHlfZW4gaXMgc2V0IHRvICcxJywgdGhlIHNpZ25hbCBQSFlfRU4gc2hhbGwgcmVtYWluIGJlaW5nIHNldCB1bnRpbCB0aGUga2VlcF9waHlfZW4gaXMgY2xlYXJlZC4KKyAqIFRoaXMgd2lsbCBoZWxwIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoZSBhcmJpdGVyIGJldHdlZW4gdGhlIExNQUMgYW5kIHRoZSBEUEhZLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9LRUVQX1BIWV9FTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0tFRVBfUEhZX0VOIDB4ODAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0tFRVBfUEhZX0VOIDMxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfS0VFUF9QSFlfRU4gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfVHhQaXBlUHJvcERlbGF5CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgMHg0MDA5MDAzNAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSAweGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UeFBpcGVQcm9wRGVsYXkKKyAqCisgKiBQcm9wYWdhdGlvbiBkZWxheSAoaW4gdXMpIG9mIHRoZSB0eCBwaXBlLCBiZXR3ZWVuIHN0YXJ0IG9mIHRyYW5zbWlzc2lvbiAoaW5kaWNhdGVkIGJ5IHNldHRpbmcgdHhfZmxhZ19zdGF0dXMpIHRvIHRoZSBEUEhZLgorICogVGhlIHJlc2V0IHZhbHVlIGlzIDAgdXMsIHdoaWNoIGlzIGFsc28gdGhlIGNsb3Nlc3QgdmFsdWUgdG8gdGhlIHJlYWwgaW1wbGVtZW50YXRpb24gZmlndXJlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWFBJUEVQUk9QREVMQVkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYUElQRVBST1BERUxBWSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhQSVBFUFJPUERFTEFZIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX01hY0Fja1dhaXREdXJhdGlvbgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDM2ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAweDQwMDkwMDM4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OIDB4ZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX01hY0Fja1dhaXREdXJhdGlvbgorICoKKyAqIE1heGltdW0gdGltZSAoaW4gc3ltYm9sIHBlcmlvZHMpIHRvIHdhaXQgZm9yIGFuIEFDSyByZXNwb25zZSBhZnRlciB0cmFuc21pdHRpbmcgYSBmcmFtZSB3aXRoIHRoZSBBUiBiaXQgc2V0IHRvICcxJy4KKyAqIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgbm9ybWFsIG1vZGUgZm9yIHRoZSB3YWl0IG9mIGFuIEFDSyByZXNwb25zZSwgaXJyZXNwZWN0aXZlIGlmIHRoZSBBQ0sgaXMgYSBub3JtYWwgQUNLIG9yIGFuIEVuaGFuY2VkIEFDSy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUNLV0FJVERVUkFUSU9OIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04KKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBQ0tXQUlURFVSQVRJT04gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FDS1dBSVREVVJBVElPTiA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9NYWNFbmhBY2tXYWl0RHVyYXRpb24KKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgzNjAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMHg0MDA5MDAzYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX01hY0VuaEFja1dhaXREdXJhdGlvbgorICoKKyAqIE1heGltdW0gdGltZSAoaW4gdXMpIHRvIHdhaXQgZm9yIGFuIEVuaGFuY2VkIEFDSyByZXNwb25zZSBhZnRlciB0cmFuc21pdHRpbmcgYSBmcmFtZSB3aXRoIHRoZSBBUiBiaXQgc2V0IHRvICcxJy4KKyAqIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgTEUvQ1NMIG1vZGUgZm9yIHRoZSB3YWl0IG9mIGFuIEFDSyByZXNwb25zZSAod2hpY2ggaXMgYWx3YXlzIGFuIEVuaGFuY2VkIEFDSykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRU5IQUNLV0FJVERVUkFUSU9OCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNFTkhBQ0tXQUlURFVSQVRJT04gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0VOSEFDS1dBSVREVVJBVElPTiAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEgMHg0MDA5MDA0MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzEgMHhmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlSeEF0dHIKKyAqCisgKiBWYWx1ZSBvZiB0aGUgUEhZQVRUUiBidXMgdG8gRFBIWSBkdXJpbmcgUnggb3BlcmF0aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWEFUVFIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYQVRUUiAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZjAxCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8yIDB4NDAwOTAwNDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8yIDB4ZmZmZmZmMDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5FbmFibGUKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCB0aGUgRW5lcmd5IERldGVjdCBzY2FuIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gUnhFbmFibGUgaXMgc2V0IHRvICcxJyByYXRoZXIgdGhhbiBzdGFydGluZyBhIHJlY2VpdmUgYWN0aW9uLgorICogVGhlIGxlbmd0aCBvZiB0aGlzIHNjYW4gaXMgZGVmaW5lZCBieSBFZFNjYW5EdXJhdGlvbi4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORU5BQkxFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORU5BQkxFIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FORU5BQkxFIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5FTkFCTEUgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0VkU2NhbkR1cmF0aW9uCisgKgorICogVGhlIGxlbmd0aCBvZiBFRCBzY2FuIGluIHN5bWJvbCBwZXJpb2RzLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5EVVJBVElPTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkRVUkFUSU9OIDB4ZmZmZmZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTkRVUkFUSU9OIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5EVVJBVElPTiAyNAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg3MDAwNGM0ICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMgMHg0MDA5MDA0OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMgMHhmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNNYXhGcmFtZVRvdGFsV2FpdFRpbWUKKyAqCisgKiBNYXggdGltZSB0byB3YWl0IChpbiBzeW1ib2wgcGVyaW9kcykgZm9yIGEgcmVxdWVzdGVkIERhdGEgRnJhbWUgb3IgYW4gYW5ub3VuY2VkIGJyb2FkY2FzdCBmcmFtZSwgdHJpZ2dlcmVkIGJ5IHRoZSBGUCBiaXQgaW4gdGhlIHJlY2VpdmVkIGZyYW1lIHdhcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhGUkFNRVRPVEFMV0FJVFRJTUUgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEZSQU1FVE9UQUxXQUlUVElNRSAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0NjYUlkbGVXYWl0CisgKgorICogVGltZSB0byB3YWl0IChpbiB1cykgYWZ0ZXIgQ0NBIHJldHVybmVkICJtZWRpdW0gaWRsZSIgYmVmb3JlIHN0YXJ0aW5nIFRYLU9OLgorICogTm90ZXM6CisgKiAxKSBleHRyYSB3YWl0IHRpbWVzIGFyZSBpbnZvbHZlZCBiZWZvcmUgYSBwYWNrZXQgaXMgcmVhbGx5IHRyYW5zbWl0dGVkLCBzZWUgdGhlIHJlbGV2YW50IHRpbWluZyBmaWd1cmVzLgorICogMikgbm90IGFwcGxpY2FibGUgaW4gVFNDSCBtb2RlIHNpbmNlIHRoZXJlIG1hY1RTUnhUeCBzaGFsbCBiZSB1c2VkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQUlETEVXQUlUIDB4ZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FJRExFV0FJVCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQUlETEVXQUlUIDgKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQWRkcl90YWJfbWF0Y2hfRlBfdmFsdWUKKyAqCisgKiBJbiBjYXNlIHRoZSByZWNlaXZlZCBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHdpdGggb25lIG9mIHRoZSBFeHBfU0EgcmVnaXN0ZXJzLCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgQWRkcl90YXBfbWF0Y2hfRlBfdmFsdWUgd2lsbCBiZSBpbnNlcnRlZCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIEZQIGJpdC4KKyAqIEluIGNhc2UgdGhlcmUgaXMgbm8gbWF0Y2ggZm91bmQsIHRoZSBpbnZlcnNlIHZhbHVlIG9mIEFkZHJfdGFwX21hdGNoX0ZQX3ZhbHVlIHdpbGwgYmUgaW5zZXJ0ZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FERFJfVEFCX01BVENIX0ZQX1ZBTFVFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQUREUl9UQUJfTUFUQ0hfRlBfVkFMVUUgMHgxMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9BRERSX1RBQl9NQVRDSF9GUF9WQUxVRSAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FERFJfVEFCX01BVENIX0ZQX1ZBTFVFIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRlBfb3ZlcnJpZGUKKyAqCisgKiBJbiBjYXNlIHRoZSBjb250cm9sIHJlZ2lzdGVyIEZQX292ZXJyaWRlIGlzIHNldCwgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIEZQX2ZvcmNlX3ZhbHVlIHdpbGwgYWx3YXlzIGJlIHRoZSB2YWx1ZSBvZiB0aGUgRlAgYml0IGluIHRoZSBhdXRvbWF0aWMgQUNLIHJlc3BvbnNlIGZyYW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9GUF9PVkVSUklERSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZQX09WRVJSSURFIDB4MjAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRlBfT1ZFUlJJREUgMjUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9GUF9PVkVSUklERSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0ZQX2ZvcmNlX3ZhbHVlCisgKgorICogSW4gY2FzZSB0aGUgY29udHJvbCByZWdpc3RlciBGUF9vdmVycmlkZSBpcyBzZXQsIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlciBGUF9mb3JjZV92YWx1ZSB3aWxsIGFsd2F5cyBiZSB0aGUgdmFsdWUgb2YgdGhlIEZQIGJpdCBpbiB0aGUgYXV0b21hdGljIEFDSyByZXNwb25zZSBmcmFtZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRlBfRk9SQ0VfVkFMVUUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9GUF9GT1JDRV9WQUxVRSAweDQwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZQX0ZPUkNFX1ZBTFVFIDI2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRlBfRk9SQ0VfVkFMVUUgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9GVERGX0xQRFBfRW5hYmxlCisgKgorICogSWYgc2V0LCBub3Qgb25seSBpcyBGUF9vdmVycmlkZSBhbmQgU0EgbWF0Y2hpbmcgZG9uZSBvbiBkYXRhX3JlcXVlc3QgZnJhbWVzIGJ1dCB0byBhbGwgY29tbWFuZCBhbmQgZGF0YSBmcmFtZSB0eXBlcyAoaW4gbm9ybWFsIG1vZGUpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfTFBEUF9FTkFCTEUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0xQRFBfRU5BQkxFIDB4ODAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9MUERQX0VOQUJMRSAyNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfTFBEUF9FTkFCTEUgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sX29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxZgorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUyAweDQwMDkwMDUwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX09TIDB4MWYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9nZXRHZW5lcmF0b3JWYWwKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIFdha2UtdXAgKGV2ZW50KSBjb3VudGVyL2dlbmVyYXRvciAoRXZlbnRDdXJyVmFsKSBhbmQgVGltZXN0YW1wIChzeW1ib2wpIGNvdW50ZXIvZ2VuZXJhdG9yIChUaW1lU3RhbXBDdXJyVmFsIGFuZCBUaW1lU3RhbXBDdXJyUGhhc2VWYWwpIHdpbGwgYmUgY2FwdHVyZWQuCisgKiBOb3RlIHRoYXQgdGhpcyBjYXB0dXJlIGFjdHVhbGx5IGhhcyBiZWVuIGRvbmUgd2hlbiBnZXRHZW5lcmF0b3JWYWxfZSBpcyBzZXQgKGFzc3VtaW5nIGl0IHdhcyBjbGVhcmVkIGluIGFkdmFuY2UpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUwgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeEVuYWJsZQorICoKKyAqIElmIHNldCwgcmVjZWl2aW5nIGRhdGEgbWF5IGJlIGRvbmUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEVOQUJMRSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhFTkFCTEUgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TaW5nbGVDQ0EKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBhIHNpbmdsZSBDQ0Egd2lsbCBiZSBwZXJmb3JtZWQuCisgKiBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gZS5nLiB0aGUgVFNDSCB0aW1pbmcgaXMgbm90IHBlcmZvcm1lZCBieSB0aGUgTE1BQyBidXQgY29tcGxldGVseSBieSBzb2Z0d2FyZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0lOR0xFQ0NBIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJTkdMRUNDQSAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0lOR0xFQ0NBIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ3NtYV9DYV9yZXN1bWVfc2V0CisgKgorICogSWYgc2V0LCBDc21hX0NhX3Jlc3VtZV9zdGF0IGlzIHNldAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9TRVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU0VUIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU0VUIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9TRVQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Dc21hX0NhX3Jlc3VtZV9jbGVhcgorICoKKyAqIElmIHNldCwgQ3NtYV9DYV9yZXN1bWVfc3RhdCBpcyBjbGVhcmVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX0NMRUFSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX0NMRUFSIDB4MTAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfUkVTVU1FX0NMRUFSIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9DTEVBUiAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMgMHg0MDA5MDA1NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTIDB4ZmYwZmZmNDYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVhZHk0c2xlZXAKKyAqCisgKiBJZiBzZXQgdG8gJzEnIHRoaXMgcmVnaXN0ZXIgaW5kaWNhdGVzIHRoYXQgdGhlIExNQUMgaXMgcmVhZHkgdG8gZ28gdG8gc2xlZXAuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DQ0FTdGF0CisgKgorICogVGhlIHZhbHVlIG9mIGEgc2luZ2xlIENDQSwgdmFsaWQgd2hlbiBDQ0FzdGF0X2UgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVCAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVQgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVQgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9XYWtldXBUaW1lckVuYWJsZVN0YXR1cworICoKKyAqIFN0YXR1cyBvZiBXYWtldXBUaW1lckVuYWJsZSBhZnRlciBiZWluZyBjbG9ja2VkIGJ5IExQX0NMSyAoc2hvd2luZyBpdCdzIGVmZmVjdGl2ZSB2YWx1ZSkuCisgKiBXYWtldXBUaW1lckVuYWJsZVN0YXR1cyBjYW4gYmUgc2V0IGJ5IHNldHRpbmcgdGhlIG9uZS1zaG90IHJlZ2lzdGVyIFdha2V1cFRpbWVyRW5hYmxlX3NldCBhbmQgY2xlYXJlZCBieSBzZXR0aW5nIHRoZSBvbmUtc2hvdCByZWdpc3RlciBXYWtldXBUaW1lckVuYWJsZV9jbGVhci4KKyAqIFdoZW4gV2FrZXVwVGltZXJFbmFibGVTdGF0dXMgaXMgc2V0IChhZnRlciBiZWluZyBjbGVhcmVkKSwgdGhlIGV2ZW50IGNvdW50ZXIgd2lsbCBiZSByZXNldCB0byAweDAuCisgKgorICogVGhpcyBzdGF0dXMgY2FuIGJlIHVzZWQgYnkgc29mdHdhcmUgc2luY2UgV2FrZXVwVGltZXJFbmFibGUgaXMgdXNlZCBpbiB0aGUgc2xvdyBMUF9DTEsgYXJlYS4KKyAqIFJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGEgY2VydGFpbiBudW1iZXIgb2YgTFBfQ0xLIHBlcmlvZHMsIHNpbXBseSBzY2FubmluZyB0aGlzIHN0YXR1cyAob3IgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgY3JlYXRlZCBieSBXYWtldXBUaW1lckVuYWJsZVN0YXR1c19lKSB3aWxsIGFsbG93IHNvZnR3YXJlIHRvIGRldGVybWluZSBpZiB0aGlzIHNpZ25hbCBoYXMgYmVlbiBlZmZlY3RlZC4KKyAqIE5vdGUgdGhhdCB0aGUgcmlzaW5nIGVkZ2Ugb2YgV2FrZXVwVGltZXJFbmFibGUgd2lsbCByZXNldCB0aGUgV2FrZS11cCAoZXZlbnQpIGNvdW50ZXIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVUyA2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVMgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0VkU2NhblZhbHVlCisgKgorICogVGhlIHJlc3VsdCBvZiBhbiBFRCBzY2FuLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5WQUxVRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOVkFMVUUgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5WQUxVRSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOVkFMVUUgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfTkJfc3RhdAorICoKKyAqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSBOdW1iZXIgb2YgQmFja29mZnMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfU1RBVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9OQl9TVEFUIDB4NzAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfU1RBVCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfU1RBVCAzCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfcmVzdW1lX3N0YXQKKyAqCisgKiBJbiBjYXNlIENzbWFfQ2FfcmVzdW1lX3N0YXQgaXMgc2V0IHRoZSBMTUFDIHdpbGwKKyAqIC0gdXNlIHRoZSB2YWx1ZSBvZiBDc21hX0NhX05CX3ZhbCBpbiB0aGUgQ1NNQS1DQSBwcm9jZXNzIHJhdGhlciB0aGFuIHRoZSBpbml0aWFsIHZhbHVlIDBkLgorICogLSBpbW1lZGlhdGVseSBwZXJmb3JtIENDQSBhZnRlciB0aGUgc2xlZXAsIG5vdCB3YWl0aW5nIGZvciB0aGUgYmFja29mZiB0aW1lLgorICogLSByZXNldCBDc21hX0NhX3Jlc3VtZV9zdGF0IHdoZW4gaXQgcmVzdW1lcyBDU01BLUNBIGFmdGVyIHRoZSBzbGVlcC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU1RBVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU1RBVCAweDgwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX1JFU1VNRV9TVEFUIDE5CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9SRVNVTUVfU1RBVCAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfQ3NtYV9DYV9CT19zdGF0CisgKgorICogVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50bHkgY2FsY3VsYXRlZCBCYWNrT2ZmIHZhbHVlLiBUbyBiZSB1c2VkIGZvciB0aGUgc2xlZXAgdGltZSBjYWxjdWxhdGlvbiBpbiBjYXNlIG9mIHNsZWVwIGR1cmluZyB0aGUgQmFja09mZiB0aW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1NUQVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fU1RBVCAweGZmMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1NUQVQgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1NUQVQgOAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfRXZlbnRDdXJyVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAweDQwMDkwMDU4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMIDB4MWZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfRXZlbnRDdXJyVmFsCisgKgorICogVGhlIHZhbHVlIG9mIHRoZSBjYXB0dXJlZCBFdmVudCBnZW5lcmF0b3IgKFdha2UtdXAgY291bnRlcikgKGluaXRpYXRlZCBieSBnZXRHZW5lcmF0b3JWYWwsIHZhbGlkIHdoZW4gZ2V0R2VuZXJhdG9yVmFsX2UgaXMgc2V0KS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9FVkVOVENVUlJWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAweDFmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VWRU5UQ1VSUlZBTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRVZFTlRDVVJSVkFMIDI1CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UaW1lU3RhbXBDdXJyVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgMHg0MDA5MDA1YworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1RpbWVTdGFtcEN1cnJWYWwKKyAqCisgKiBUaGUgdmFsdWUgb2YgY2FwdHVyZWQgdGltZXN0YW1wIGdlbmVyYXRvciAoc3ltYm9sIGNvdW50ZXIpIChpbml0aWF0ZWQgYnkgZ2V0R2VuZXJhdG9yVmFsLCB2YWxpZCB3aGVuIGdldEdlbmVyYXRvclZhbF9lIGlzIHNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlZBTCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSVkFMIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9UaW1lU3RhbXBDdXJyUGhhc2VWYWwKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIDB4NDAwOTAwNzQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfVGltZVN0YW1wQ3VyclBoYXNlVmFsCisgKgorICogVmFsdWUgb2YgY2FwdHVyZWQgdGltZXN0YW1wIGdlbmVyYXRvciBwaGFzZSB3aXRoaW4gYSBzeW1ib2wgKGluaXRpYXRlZCBieSBnZXRHZW5lcmF0b3JWYWwsIHZhbGlkIHdoZW4gZ2V0R2VuZXJhdG9yVmFsX2UgaXMgc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FU1RBTVBDVVJSUEhBU0VWQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RJTUVTVEFNUENVUlJQSEFTRVZBTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVElNRVNUQU1QQ1VSUlBIQVNFVkFMIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTVHhBY2tEZWxheVZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMHg0MDA5MDA3OAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTVHhBY2tEZWxheVZhbAorICoKKyAqIFRoZSB0aW1lIChpbiB1cykgbGVmdCB1bnRpbCB0aGUgYWNrIGZyYW1lIGlzIHNlbnQgYnkgdGhlIGxtYWMuCisgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHNvZnR3YXJlIHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBlbm91Z2ggdGltZSBsZWZ0IHRvIHNlbmQgdGhlLCBieSBzb2Z0d2FyZSBjcmVhdGVkLCBFbmhhbmNlZCBBQ0sgZnJhbWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNUWEFDS0RFTEFZVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVlWQUwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWVZBTCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sXzQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80IDB4NDAwOTAwNjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF80IDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVNsZWVwV2FpdAorICoKKyAqIFRoZSBtaW51bWUgdGltZSAoaW4gdXMpIHJlcXVpcmVkIGJldHdlZW4gdGhlIGNsZWFyIHRvICcwJyBhbmQgc2V0IHRvICcxJyBvZiBQSFlfRU4uCisgKiBXaGVuIHRoZSBzaWduYWwgUEhZX0VOIGlzIGRlYXNzZXJ0ZWQsIGl0IHdpbGwgbm90IGJlIGFzc2VydGVkIHdpdGhpbiB0aGUgdGltZSBwaHlTbGVlcFdhaXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVNMRUVQV0FJVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVNMRUVQV0FJVCAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlTTEVFUFdBSVQgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVNMRUVQV0FJVCA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfUnhQaXBlUHJvcERlbGF5CisgKgorICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgUnhQaXBlUHJvcERlbGF5IGluZGljYXRlcyB0aGUgcHJvcGFnYXRpb24gZGVsYXkgaW4gfnMgb2YgdGhlIFJ4IHBpcGVsaW5lIGJldHdlZW4gdGhlIGxhc3Qgc3ltYm9sIGJlaW5nIGNhcHR1cmVkIGF0IHRoZSBEUEhZIGludGVyZmFjZSBhbmQgdGhlICJkYXRhIHZhbGlkIiBpbmRpY2F0aW9uIHRvIHRoZSBMTUFDIGNvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYUElQRVBST1BERUxBWSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhQSVBFUFJPUERFTEFZIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlBY2tBdHRyCisgKgorICogRHVyaW5nIHRyYW5zbWlzc2lvbiBvZiBhbiBBQ0sgZnJhbWUsIHBoeUFja0F0dHIgaXMgdXNlZCBhcyBQSFlBVFRSIG9uIHRoZSBEUEhZIGludGVyZmFjZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQUNLQVRUUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQUNLQVRUUiAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUFDS0FUVFIgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF81CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4OGMwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYwZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81IDB4NDAwOTAwNjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF81IDB4ZmZmZjBmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0Fja19SZXNwb25zZV9EZWxheQorICoKKyAqIEluIG9yZGVyIHRvIGhhdmUgc29tZSBmbGV4aWJpbGl0eSB0aGUgY29udHJvbCByZWdpc3RlciBBY2tfUmVzcG9uc2VfRGVsYXkgaW5kaWNhdGVzIHRoZSBBY2tub3dsZWRnZSByZXNwb25zZSB0aW1lIGluIH5zLgorICogVGhlIGRlZmF1bHQgdmFsdWUgc2hhbGwgaXMgMTkyIH5zICgxMiBzeW1ib2xzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0FDS19SRVNQT05TRV9ERUxBWSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQUNLX1JFU1BPTlNFX0RFTEFZIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DY2FTdGF0V2FpdAorICoKKyAqIFRoZSBvdXRwdXQgQ0NBU1RBVCBpcyB2YWxpZCBhZnRlciA4IHN5bWJvbHMgKyBwaHlSeFN0YXJ0dXAuCisgKiBUaGUgOCBzeW1ib2xzIGFyZSBwcm9ncmFtbWFibGUgYnkgY29udHJvbCByZWdpc3RlckNjYVN0YXRXYWl0IChpbiBzeW1ib2wgcGVyaW9kcykuCisgKiBEZWZhdWx0IHZhbHVlIGlzIDhkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRXQUlUIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUV0FJVCA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVFdBSVQgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeUNzbWFDYUF0dHIKKyAqCisgKiBEdXJpbmcgQ1NNQS1DQSBvciBDQ0EsIHRoZSBjb250cm9sIHJlZ2lzdGVyIHBoeUNzbWFDYUF0dHIgaXMgdXNlZCB0byBzb3VyY2UgUEhZQVRUIG9uIHRoZSBEUEhZIGludGVyZmFjZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzUKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIgMHhmZmZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZQ1NNQUNBQVRUUiAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUNTTUFDQUFUVFIgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF82CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4YzBjMjggIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82IDB4NDAwOTAwNjgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82IDB4ZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MaWZzUGVyaW9kCisgKgorICogVGhlIExvbmcgSUZTIHBlcmlvZCBpcyBwcm9ncmFtbWFibGUgYnkgTGlmc1BlcmlvZCAoaW4gc3ltYm9scykuCisgKiBUaGUgZGVmYXVsdCBpcyA0MCBzeW1ib2xzICg2NDAgdXMpLAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MSUZTUEVSSU9EIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTElGU1BFUklPRCAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MSUZTUEVSSU9EIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MSUZTUEVSSU9EIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TaWZzUGVyaW9kCisgKgorICogVGhlIFNob3J0IElGUyBwZXJpb2QgaXMgcHJvZ3JhbW1hYmxlIGJ5IFNpZnNQZXJpb2QgKGluIHN5bWJvbHMpLgorICogVGhlIGRlZmF1bHQgaXMgMTIgc3ltYm9scyAoMTkyIGlzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0lGU1BFUklPRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzYKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NJRlNQRVJJT0QgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSUZTUEVSSU9EIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TSUZTUEVSSU9EIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9XVWlmc1BlcmlvZAorICoKKyAqIFRoZSBXYWtlVXAgSUZTIHBlcmlvZCBpcyBwcm9ncmFtbWFibGUgYnkgV1VpZnNQZXJpb2QgKGluIHN5bWJvbHMpLgorICogVGhlIGRlZmF1bHQgaXMgMTIgc3ltYm9scyAoMTkyIHVzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfV1VJRlNQRVJJT0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF82CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XVUlGU1BFUklPRCAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfV1VJRlNQRVJJT0QgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XVUlGU1BFUklPRCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfMTEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHhmZjAwMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZjBmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEgMHg0MDA5MDA2YworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMSAweGZmMGZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFRvdGFsQ3ljbGVUaW1lCisgKgorICogSW4gQ1NMIG1vZGUgaXQgY2FuIGJlIGRlY2lkZWQgdG8gZGlzYWJsZSB0aGUgUEhZIFJ4IChSeC1vZmYpIGFmdGVyIHJlY2VwdGlvbiBvZiBhIFdha2UtdXAgZnJhbWUgYW5kIGVuYWJsZSB0aGUgUEhZIFJ4IChSeC1vbikgd2hlbiB0aGUgZGF0YSBmcmFtZSBpcyB0byBiZSBleHBlY3RlZCwgYmFzZWQgb24gdGhlIHJlY2VpdmVkIFJaIHRpbWUuCisgKiBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciB0byBjYWxjdWxhdGUgaWYgaXQgaXMgZWZmaWNpZW50IHRvIHN3aXRjaCB0byBSeC1vZmYgYW5kIFJ4LW9uIGFnYWluLCBhIGNvbnRyb2wgcmVnaXN0ZXIgaW5kaWNhdGVzIHRoZSB0aW1lIG5lZWRlZCB0byBkaXNhYmxlIGFuZCBlbmFibGUgdGhlIFBIWSBSeDogbWFjUnhUb3RhbEN5Y2xlVGltZSAocmVzb2x1dGlvbiBpcyAxMCBzeW1ib2wgcGVyaW9kcykKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFRPVEFMQ1lDTEVUSU1FIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhUT1RBTENZQ0xFVElNRSAxNgorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNEaXNDYVJ4T2ZmdG9SWgorICoKKyAqIFRoZSBzd2l0Y2hpbmcgb2ZmIGFuZCBvbiBvZiB0aGUgUEhZIFJ4IChzZWUgbWFjUnhUb3RhbEN5Y2xlVGltZSkgY2FuIGJlIGRpc2FibGVkIHdoaXRoIHRoZSBjb250cm9sIHJlZ2lzdGVyIG1hY0Rpc0NhUnhPZmZ0b1JaLgorICogIDAgOiBEaXNhYmxlZAorICogIDEgOiBFbmFibGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaIDB4MTAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0RJU0NBUlhPRkZUT1JaIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRElTQ0FSWE9GRlRPUlogMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfTkJfdmFsCisgKgorICogTnVtYmVyIG9mIGJhY2tvZmZzIHZhbHVlIGluIGNhc2Ugb2YgYSBDU01BLUNBIHJlc3VtZSBhY3Rpb24uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfVkFMIDB4ZTAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfTkJfVkFMIDE3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9OQl9WQUwgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX0NzbWFfQ2FfQk9fdGhyZXNob2xkCisgKgorICogSWYgdGhlIGJhY2tvZmYgdGltZSBjYWxjdWxhdGVkIGluIHRoZSBDU01BLUNBIHByb2NlZHVyZSBhcyBkZXNjcmliZWQgaW4gW0ZSMzI4MF0gaXMgZXF1YWwgdG8gb3IgaGlnaGVyIHRoYW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgQ3NtYV9DYV9CT190aHJlc2hvbGRbOF0gKHJlc29sdXRpb24gMzIwdXMsIHNlZSBbRlIzMjkwXSkgdGhlIGV2ZW50IHJlZ2lzdGVyIENzbWFfQ2FfQk9fdGhyX2Ugd2lsbCBiZSBzZXQgYW5kIGFuIGludGVycnVwdC4KKyAqIEluIGNhc2UgQ3NtYV9DYV9CT190aHJlc2hvbGQgZXF1YWxzIDB4RkYgbm8gY2hlY2sgd2lsbCBiZSBwZXJmb3JtZWQgYW5kIGNvbnNlcXVlbnRseSBDc21hX0NhX0JPX3Rocl9lIHdpbGwgbm90IGJlIHNldCBhbmQgbm8gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUkVTSE9MRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzExCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUkVTSE9MRCAweGZmMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUkVTSE9MRCAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSRVNIT0xEIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF9kZWx0YQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4N2UKKyAqIEFjY2VzcyBtb2RlOiBELVJDVyAoZGVsdGEgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEgMHg0MDA5MDA3MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQSAweDdlCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1JlYWR5NHNsZWVwX2QKKyAqCisgKiBEZWx0YSBiaXQgZm9yIHJlZ2lzdGVyICJMbWFjUmVhZHk0c2xlZXAiLgorICogVGhpcyBkZWx0YSBiaXQgaXMgc2V0IHRvICcxJyBvbiBlYWNoIGNoYW5nZSBvZiB0aGlzIHN0YXR1cywgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVszXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9ERUxUQQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfRCAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX0QgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wX2UKKyAqCisgKiBUaGUgU3luY1RpbWVTdGFtcF9lIGV2ZW50IGlzIHNldCB0byAnMScgd2hlbiB0aGUgVGltZVN0YW1wZ2VuZXJhdG9yIGlzIGxvYWRlZCB3aXRoIFN5bmNUaW1lU3RhbXBWYWwuCisgKiBUaGlzIG9jY3VycyBhdCB0aGUgcmlzaW5nIGVkZ2Ugb2YgbHBfY2xrIHdoZW4gU3luY1RpbWVTdGFtcEVuYSBpcyBzZXQgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgRXZlbnQgZ2VuZXJhdG9yIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBTeW5jVGltZXN0YW1wVGhyLgorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVszXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfRSAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUF9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZVRocl9lCisgKgorICogRXZlbnQsIHNldCB0byAnMScgd2hlbiB0aGUgc3ltYm9sdGltZSBjb3VudGVyIG1hdGNoZWQgU3ltYm9sVGltZVRocgorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVszXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfRSAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZTJUaHJfZQorICoKKyAqIEV2ZW50LCBzZXQgdG8gJzEnIHdoZW4gdGhlIHN5bWJvbHRpbWUgY291bnRlciBtYXRjaGVkIFN5bWJvbFRpbWUyVGhyCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzNdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSX0UgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2dldEdlbmVyYXRvclZhbF9lCisgKgorICogRXZlbnQsIHNldCB0byAnMScgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGhlIGdldEdlbmVyYXRvclZhbCByZXF1ZXN0IGlzIGNvbXBsZXRlZC4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbM10uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FIDB4MjAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9FIDUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9HRVRHRU5FUkFUT1JWQUxfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlU3RhdHVzX2QKKyAqCisgKiBEZWx0YSB3aGljaCBpbmRpY2F0ZXMgdGhhdCBXYWtldXBUaW1lckVuYWJsZVN0YXR1cyBoYXMgY2hhbmdlZAorICogVGhpcyBkZWx0YSBiaXQgaXMgc2V0IHRvICcxJyBvbiBlYWNoIGNoYW5nZSBvZiB0aGlzIHN0YXR1cywgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVszXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX0RFTFRBCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19EIDB4NDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFU1RBVFVTX0QgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19jb250cm9sX21hc2sKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDdlCisgKiBBY2Nlc3MgbW9kZTogRE0tUlcgKGRlbHRhIG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLIDB4NDAwOTAwODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLIDB4N2UKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVhZHk0c2xlZXBfbQorICoKKyAqIE1hc2sgYml0IGZvciBkZWx0YSBiaXQgIkxtYWNSZWFkeTRzbGVlcF9kIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVBRFk0U0xFRVBfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9NIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFQURZNFNMRUVQX00gMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRUFEWTRTTEVFUF9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50IHJlZ2lzdGVyIFN5bmNUaW1lU3RhbXBfZS4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QX00gMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBfTSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVUaHJfbQorICoKKyAqIE1hc2sgZm9yIFN5bWJvbFRpbWVUaHJfZQorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFJfTSAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUl9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZTJUaHJfbQorICoKKyAqIE1hc2sgZm9yIFN5bWJvbFRpbWUyVGhyX2UKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFJfTSAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9NIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUl9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfZ2V0R2VuZXJhdG9yVmFsX20KKyAqCisgKiBNYXNrIGZvciBnZXRHZW5lcmF0b3JWYWxfZQorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX00gMHgyMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfR0VUR0VORVJBVE9SVkFMX00gNQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0dFVEdFTkVSQVRPUlZBTF9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfV2FrZXVwVGltZXJFbmFibGVTdGF0dXNfbQorICoKKyAqIE1hc2sgZm9yIFdha2V1cFRpbWVyRW5hYmxlU3RhdHVzX2QKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVTVEFUVVNfTSAweDQwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NIDYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRVNUQVRVU19NIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfZXZlbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVyAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UIDB4NDAwOTAwOTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0VWRU5UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVCAweGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5SZWFkeV9lCisgKgorICogVGhlIGV2ZW50IEVkU2NhblJlYWR5X2UgaXMgc2V0IHRvICcxJyB0byBub3RpZnkgdGhhdCB0aGUgRUQgc2NhbiBpcyByZWFkeS4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX0UgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9FRFNDQU5SRUFEWV9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ0NBc3RhdF9lCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIHNpbmdsZSBDQ0EgaXMgcmVhZHkKKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NDQVNUQVRfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19FVkVOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9FIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9FIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX0UgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFRpbWVyRXhwaXJlZF9lCisgKgorICogU2V0IHRvICcxJyBpZiBvbmUgb2YgdGhlIHRpbWVycyBlbmFibGluZyB0aGUgUngtb24gbW9kZSBleHBpcmVzIHdpdGhvdXQgaGF2aW5nIHJlY2VpdmVkIGFueSB2YWxpZCBmcmFtZS4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX0UgMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFRJTUVSRVhQSVJFRF9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfQ3NtYV9DYV9CT190aHJfZQorICoKKyAqIElmIHNldCwgdGhlIGNhbGN1bGF0ZWQgYmFja29mZiB0aW1lIGlzIG1vcmUgdGhhbiBDc21hX0NhX0JPX3RocmVzaG9sZC4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX0UgMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DU01BX0NBX0JPX1RIUl9FIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFzaworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZgorICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BU0sgMHg0MDA5MDA5NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSyAweGYKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9FZFNjYW5SZWFkeV9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJFZFNjYW5SZWFkeV9lIgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRURTQ0FOUkVBRFlfTSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX00gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0VEU0NBTlJFQURZX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9DQ0FzdGF0X20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgIkNDQXN0YXRfZSIKKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9NIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfQ0NBU1RBVF9NIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9DQ0FTVEFUX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9SeFRpbWVyRXhwaXJlZF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJSeFRpbWVyRXhwaXJlZF9lIgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhUSU1FUkVYUElSRURfTSAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX00gMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYVElNRVJFWFBJUkVEX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Dc21hX0NhX0JPX3Rocl9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJDc21hX0NhX0JPX3Rocl9lIgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfQ1NNQV9DQV9CT19USFJfTSAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX00gMworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0NTTUFfQ0FfQk9fVEhSX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZjBmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMSAweDQwMDkwMGEwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEgMHhmZmZmMGZmZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX21vZGUKKyAqCisgKiBJZiB0aGUgY29udHJvbCByZWdpc3RlciBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCB0byAnMScsIHRoZSBMTUFDIGNvbnRyb2xsZXIgY29udHJvbCBzaWduYWxzIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IHRoZSBsbWFjX21hbnVhbF9jb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9NT0RFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9NT0RFIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfTU9ERSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3BoeV9lbgorICoKKyAqIGxtYWNfbWFudWFsX3BoeV9lbiBjb250cm9scyB0aGUgUEhZX0VOIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9FTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUEhZX0VOIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfRU4gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF90eF9lbgorICoKKyAqIGxtYWNfbWFudWFsX3R4X2VuIGNvbnRyb2xzIHRoZSBUWF9FTiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9FTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9FTiAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRU4gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9yeF9lbgorICoKKyAqIGxtYWNfbWFudWFsX3J4X2VuIGNvbnRyb2xzIHRoZSBSWF9FTiBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9FTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gMHg4CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9FTiAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfRU4gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9yeF9waXBlX2VuCisgKgorICogbG1hY19tYW51YWxfcnhfcGlwZV9lbiBjb250cm9scyB0aGUgcnhfZW5hYmxlIHNpZ25hbCB0b3dhcmRzIHRoZSByeCBwaXBlbGluZSB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfUElQRV9FTiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUlhfUElQRV9FTiAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9QSVBFX0VOIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9SWF9QSVBFX0VOIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfZWRfcmVxdWVzdAorICoKKyAqIGxtYWNfbWFudWFsX2VkX3JlcXVlc3QgY29udHJvbHMgdGhlIEVEX1JFUVVFU1QgaW50ZXJmYWNlIHNpZ25hbCB3aGVuIGxtYWNfbWFudWFsX21vZGUgaXMgc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfUkVRVUVTVCAweDIwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9SRVFVRVNUIDUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9SRVFVRVNUIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF90eF9mcm1fbnIKKyAqCisgKiBsbWFjX21hbnVhbF90eF9mcm1fbnIgY29udHJvbHMgdGhlIGVudHJ5IGluIHRoZSB0eCBidWZmZXIgdG8gYmUgdHJhbnNtaXR0ZWQgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRlJNX05SIDB4YzAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX0ZSTV9OUiA2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfRlJNX05SIDIKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9wdGkKKyAqCisgKiBsbWFjX21hbnVhbF9wdGkgY29udHJvbHMgdGhlIFBUSSBpbnRlcmZhY2Ugc2lnbmFsIHdoZW4gbG1hY19tYW51YWxfbW9kZSBpcyBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QVEkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BUSSAweGYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfUFRJIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QVEkgNAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3BoeV9hdHRyCisgKgorICogbG1hY19tYW51YWxfcGh5X2F0dHIgY29udHJvbHMgdGhlIFBIWV9BVFRSIGludGVyZmFjZSBzaWduYWwgd2hlbiBsbWFjX21hbnVhbF9tb2RlIGlzIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9BVFRSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfQVRUUiAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9QSFlfQVRUUiAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1BIWV9BVFRSIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX09TIDB4NDAwOTAwYTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX09TIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfbWFudWFsX3R4X3N0YXJ0CisgKgorICogT25lIHNob3QgcmVnaXN0ZXIgd2hpY2ggdHJpZ2dlcnMgdGhlIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lIGZyb20gdGhlIHR4IGJ1ZmZlciBpbiBsbWFjX21hbnVhbF9tb2RlIHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfVFhfU1RBUlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9TVEFSVCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX1RYX1NUQVJUIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9UWF9TVEFSVCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9zdGF0dXMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfU1RBVFVTIDB4NDAwOTAwYTgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMgMHhmZjAxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbG1hY19tYW51YWxfY2NhX3N0YXQKKyAqCisgKiBsbWFjX21hbnVhbF9jY2Ffc3RhdCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBDQ0FfU1RBVCBEUEhZIGludGVyZmFjZSBzaWduYWwuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0NDQV9TVEFUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0NDQV9TVEFUIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfQ0NBX1NUQVQgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfTUFOVUFMX0NDQV9TVEFUIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX21hbnVhbF9lZF9zdGF0CisgKgorICogbG1hY19tYW51YWxfZWRfc3RhdCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBFRF9TVEFUIERQSFkgaW50ZXJmYWNlIHNpZ25hbC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX01BTlVBTF9FRF9TVEFUIDB4ZmYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19NQU5VQUxfRURfU1RBVCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfNworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDQyMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNyAweDQwMDkwMTAwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfNyAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNXVVBlcmlvZAorICoKKyAqIEluIENTTCBtb2RlLCB0aGUgV2FrZS11cCBkdXJhdGlvbiBpbiBzeW1ib2wgcGVyaW9kcy4gRHVyaW5nIHRoaXMgcGVyaW9kLCBXYWtlLXVwIGZyYW1lcyB3aWxsIGJlIHRyYW5zbWl0dGVkLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNXVVBFUklPRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9EIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VQRVJJT0QgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUEVSSU9EIDE2CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMc2FtcGxlUGVyaW9kCisgKgorICogSW4gQ1NMIG1vZGUsIHdoZW4gcGVyZm9ybWluZyBhIGlkbGUgbGlzdGVuaW5nLCB0aGUgcmVjZWl2ZXIgaXMgZW5hYmxlZCBmb3IgYXQgbGVhc3QgbWFjQ1NMc2FtcGxlUGVyaW9kIChpbiBzeW1ib2wgb2VyaW9kcykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzcKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNBTVBMRVBFUklPRCAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xTQU1QTEVQRVJJT0QgMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2xtYWNfY29udHJvbF84CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOCAweDQwMDkwMTA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ19DT05UUk9MXzggMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNDU0xzdGFydFNhbXBsZVRpbWUKKyAqCisgKiBJbiBDU0wgbW9kZSwgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFjQ1NMc3RhcnRTYW1wbGVUaW1lIGluZGljYXRlcyB0aGUgVGltZVN0YW1wIGdlbmVyYXRvciB0aW1lIChpbiBzeW1ib2wgcGVyaW9kcykgd2hlbiB0byBzdGFydCBsaXN0ZW5pbmcgKGNhbGxlZCAiaWRsZSBsaXN0ZW5pbmciKSBvciB0cmFuc21pdHRpbmcgKHdoZW4gdHhfZmxhZ19zdGF0dXMgaXMgc2V0KS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTFNUQVJUU0FNUExFVElNRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMU1RBUlRTQU1QTEVUSU1FIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfOQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDQyICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85IDB4NDAwOTAxMDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfOSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85IDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0NTTGRhdGFQZXJpb2QKKyAqCisgKiBJbiBDU0wgbW9kZSwgYWZ0ZXIgdGhlIHdha2UtdXAgc2VxdWVuY2UgYSBkYXRhIGZyYW1lIGlzIGV4cGVjdGVkLiBUaGUgcmVjZWl2ZXIgd2lsbCBiZSBlbmFibGVkIGZvciBhdCBsZWFzdCBhIHBlcmlvZCBvZiBtYWNDU0xkYXRhUGVyaW9kIChpbiBzeW1ib2wgcGVyaW9kcykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTERBVEFQRVJJT0QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xEQVRBUEVSSU9EIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMREFUQVBFUklPRCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMREFUQVBFUklPRCAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0NTTEZyYW1lUGVuZGluZ1dhaXRUCisgKgorICogSW4gQ1NMIG1vZGUsIGlmIGEgbm9uIFdha2UtdXAgZnJhbWUgd2l0aCBGcmFtZSBQZW5kaW5nIGJpdCA9ICcxJyBpcyByZWNlaXZlZCwgdGhlIHJlY2VpdmVyIGlzIGVuYWJsZWQgZm9yIGF0IGxlYXN0IGFuIGV4dHJhIHBlcmlvZCBvZiBtYWNDU0xGcmFtZVBlbmRpbmdXYWl0VCAoaW4gc3ltYm9sIHBlcmlvZHMpIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgorICogVGhlIHRpbWUgdGhlIEVuaGFuY2VkIEFDSyB0cmFuc21pc3Npb24gbGFzdHMgKGlmIGFwcGxpY2FibGUpIGlzIGluY2x1ZGVkIGluIHRoaXMgdGltZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMRlJBTUVQRU5ESU5HV0FJVFQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF85CisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xGUkFNRVBFTkRJTkdXQUlUVCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0NTTEZSQU1FUEVORElOR1dBSVRUIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9sbWFjX2NvbnRyb2xfMTAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgyMDAwMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmMDBmMDBmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDX0NPTlRST0xfMTAgMHg0MDA5MDEwYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMCAweGYwMGYwMGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSWnplcm9WYWwKKyAqCisgKiBJbiBDU0wgbW9kZSwgaWYgdGhlIGN1cnJlbnQgUlp0aW1lIGlzIGxlc3Mgb3IgRXF1YWwgdG8gbWFjUlp6ZXJvVmFsIGFuIFJadGltZSB3aXRoIHZhbHVlIHplcm8gaXMgaW5zZXJ0ZWQgaW4gdGhlIHdha2V1cCBmcmFtZS4gU28gdGhpcyBpcyBieSBkZWZhdWx0IHRoZSBsYXN0IFdha2UtdXAgZnJhbWUgb2YgYSBXYWtlLXVwIHNlcXVlbmNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWlpFUk9WQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlpaRVJPVkFMIDB4ZjAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JaWkVST1ZBTCAyOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JaWkVST1ZBTCA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQ1NMbWFyZ2luUloKKyAqCisgKiBJbiBDU0wgbW9kZSwgdGhlIHNvZnR3YXJlIGNhbiBzZXQgdGhlIG1hcmdpbiBmb3IgdGhlIGV4cGVjdGVkIGZyYW1lIGJ5IGNvbnRyb2wgcmVnaXN0ZXIgbWFjQ1NMbWFyZ2luUlogKGluIDEwIHN5bWJvbCBwZXJpb2RzKS4KKyAqIFRoZSBMTUFDIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIHJlY2VpdmVyIGlzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YSB0aGlzIGFtb3VudCBvZiB0aW1lIGVhcmxpZXIgdGhhbiB0byBiZSBleHBlY3RlZCBieSB0aGUgcmVjZWl2ZWQgUlogdGltZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogMHhmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQ1NMTUFSR0lOUlogMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNDU0xNQVJHSU5SWiA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjV1VSWkNvcnJlY3Rpb24KKyAqCisgKiBJbiBDU0wgbW9kZSwgdGhpcyByZWdpc3RlciBzaGFsbCBiZSB1c2VkIGlmIHRoZSBXYWtlLXVwIGZyYW1lIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGxhcmdlciB0aGFuIDE1IG9jdGV0cy4KKyAqIEl0IHNoYWxsIGluZGljYXRlIHRoZSBhbW91bnQgb2YgZXh0cmEgZGF0YSBpbiBhIFdha2UtdXAgZnJhbWUgYWZ0ZXIgdGhlIFJaIHBvc2l0aW9uIGluIHRoZSBmcmFtZSAoaW4gMTAgc3ltYm9sIHBlcmlvZHMpLgorICogVGhpcyBjb3JyZWN0aW9uIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29ycmVjdCBSWiB0aW1lIGlzIGZpbGxlZCBpbiBieSB0aGUgTE1BQy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VSWkNPUlJFQ1RJT04gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNfQ09OVFJPTF8xMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VSWkNPUlJFQ1RJT04gMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDV1VSWkNPUlJFQ1RJT04gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1dVUlpDT1JSRUNUSU9OIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY3VyaXR5XzAKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmN2YwZjAyCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAgMHg0MDA5MDExMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wIDB4ZmY3ZjBmMDIKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNUeFJ4bgorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgInNlY0VudHJ5Ii4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDVFhSWE4gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDVFhSWE4gMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1RYUlhOIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNFbnRyeQorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiB0aGUgc29mdHdhcmUgaW5kaWNhdGVzIGJ5IHRoZSBjb250cm9sIHJlZ2lzdGVycyBzZWNFbnRyeSBhbmQgc2VjVHhSeG4gd2hpY2ggZW50cnkgdG8gdXNlIGFuZCBpZiBpdCdzIGZyb20gdGhlIFR4IG9yIFJ4IGJ1ZmZlciAoJzEnIHJlc3AuICcwJykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOVFJZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTlRSWSAweGYwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5UUlkgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOVFJZIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNBbGVuZ3RoCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHRoZSBsZW5ndGggb2YgdGhlIGFfZGF0YSBpcyBpbmRpY2F0ZWQgYnkgY29udHJvbCByZWdpc3RlciBzZWNBbGVuZ3RoIChpbiBieXRlcykuCisgKiBUaGUgZW5kIG9mIHRoZSBhX2RhdGEgaXMgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBtX2RhdGEuIFNvIHNlY0FsZW5ndGggbXVzdCBhbHNvIGJlIHNldCBpZiBzZWN1cml0eSBsZXZlbD09NC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUxFTkdUSCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUxFTkdUSCAweDdmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUxFTkdUSCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FMRU5HVEggNworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY01sZW5ndGgKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogdGhlIGxlbmd0aCBvZiB0aGUgbV9kYXRhIGlzIGluZGljYXRlZCBieSBjb250cm9sIHJlZ2lzdGVyIHNlY01sZW5ndGggKGluIGJ5dGVzKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTUxFTkdUSCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTUxFTkdUSCAweDdmMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNNTEVOR1RIIDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTUxFTkdUSCA3CisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0VuY0RlY24KKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogdGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VjRW5jRGVjbiBpbmRpY2F0ZXMgd2hldGhlciB0byBlbmNyeXB0ICgnMScpIG9yIGRlY3J5cHQgKCcwJykgdGhlIGRhdGEuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ0RFQ04gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ0RFQ04gMHg4MDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DREVDTiAzMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ0RFQ04gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xIDB4NDAwOTAxMTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfMSAweGZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0F1dGhGbGFncworICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiByZWdpc3RlciBzZWNBdXRoRmxhZ3MgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIGZsYWdzIGZpZWxkcy4KKyAqIGJpdFs3XSBpcyAnMCcKKyAqIGJpdFs2XSBpcyAiQV9kYXRhIHByZXNlbnQiCisgKiBiaXRbNTozXTogMy1iaXQgc2VjdXJpdHkgbGV2ZWwgb2YgbV9kYXRhCisgKiBiaXRbMjowXTogMy1iaXQgc2VjdXJpdHkgbGV2ZWwgb2YgYV9kYXRhLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkxBR1MgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGTEFHUyAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkxBR1MgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FVVEhGTEFHUyA4CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjRW5jckZsYWdzCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHJlZ2lzdGVyIHNlY0VuY3JGbGFncyBjb250YWlucyB0aGUgZW5jcnlwdGlvbiBmbGFncyBmaWVsZC4KKyAqIEJpdHMgWzI6MF0gYXJlIHRoZSAzLWJpdCBlbmNvZGluZyBmbGFncyBvZiBhX2RhdGEsIHRoZSBvdGhlciBiaXRzIG1zdXQgYmUgc2V0IHRvICcwJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDRU5DUkZMQUdTIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNSRkxBR1MgMHhmZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNFTkNSRkxBR1MgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0VOQ1JGTEFHUyA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgMHg0MDA5MDExOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzAKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogUmVnaXN0ZXJzIHNlY0tleVswLi4zXSAgY29udGFpbiB0aGUga2V5IHRvIGJlIHVzZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8wIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgMHg0MDA5MDExYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzEKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogc2VlIHJlZ2lzdGVyICJzZWNLZXlfMCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8xCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzEgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8yCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAweDQwMDkwMTIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNLZXlfMgorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgInNlY0tleV8wIgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8yIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjS2V5XzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIDB4NDAwOTAxMjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0tleV8zCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHNlZSByZWdpc3RlciAic2VjS2V5XzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNLRVlfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDS0VZXzMgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0tFWV8zIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wIDB4NDAwOTAxMjgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNOT05DRV8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNOb25jZV8wCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHJlZ2lzdGVyIHNlY05vbmNlWzAuLjNdIGNvbnRhaW5zIHRoZSBOb25jZSB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzAgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAweDQwMDkwMTJjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMQorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgIk5vbmNlXzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzEgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMSAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAweDQwMDkwMTMwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMgorICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgIk5vbmNlXzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzIgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAweDQwMDkwMTM0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgMHhmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjTm9uY2VfMworICoKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2RlOiBzZWUgcmVnaXN0ZXIgIk5vbmNlXzAiCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ05PTkNFXzMgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDTk9OQ0VfMyA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWN1cml0eV9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MworICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TIDB4NDAwOTAxMzgKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0Fib3J0CisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHNlZSByZWdpc3RlciAiTm9uY2VfMCIKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQUJPUlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ0FCT1JUIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBQk9SVCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY1N0YXJ0CisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IG9uZV9zaG90IHJlZ2lzdGVyIHRvIHN0YXJ0IHRoZSBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IHRhc2suCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1NUQVJUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDU1RBUlQgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNTVEFSVCAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDU1RBUlQgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfc3RhdHVzCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUyAweDQwMDkwMTQwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfU1RBVFVTIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfU1RBVFVTIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0J1c3kKKyAqCisgKiBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kZTogcmVnaXN0ZXIgInNlY0J1c3kiIGluZGljYXRlcyBpZiB0aGUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfU1RBVFVTCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNCVVNZIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQlVTWSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3NlY0F1dGhGYWlsCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IGluIGNhc2Ugb2YgZGVjcnlwdGlvbiwgdGhlIHN0YXR1cyBiaXQgc2VjQXV0aEZhaWwgd2lsbCBiZSBzZXQgd2hlbiB0aGUgYXV0aGVudGljYXRpb24gaGFzIGZhaWxlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNBVVRIRkFJTCAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDQVVUSEZBSUwgMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfc2VjdXJpdHlfZXZlbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBFLVJDVyAoZXZlbnQgcmVhZC9jbGVhciBvbiB3cml0ZSAxKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVCAweDQwMDkwMTUwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVCAweDEKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWNSZWFkeV9lCisgKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZGU6IHRoZSBFdmVudCBiaXQgc2VjUmVhZHlfZSBpcyBzZXQgdG8gJzEnIHdoZW4gdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaXMgcmVhZHkgKGkuZS4gc2VjQnVzeSBpcyBjbGVhcmVkKS4KKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbM10uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1JFQURZX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NFQ1VSSVRZX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9FIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9zZWN1cml0eV9ldmVudG1hc2sKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEKKyAqIEFjY2VzcyBtb2RlOiBFTS1SVyAoZXZlbnQgbWFzaykKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlRNQVNLIDB4NDAwOTAxNTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVE1BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNVUklUWV9FVkVOVE1BU0sgMHgxCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfc2VjUmVhZHlfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAic2VjUmVhZHlfZSIuCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU0VDVVJJVFlfRVZFTlRNQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TRUNSRUFEWV9NIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfTSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU0VDUkVBRFlfTSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90c2NoX2NvbnRyb2xfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDg5ODAzZTggIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzAgMHg0MDA5MDE2MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzAgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjVFNUeEFja0RlbGF5CisgKgorICogVFNDSCBtb2RlOiB0aGUgdGltZSBiZXR3ZWVuIHRoZSBlbmQgb2YgYSBSeCBmcmFtZSBhbmQgdGhlIHN0YXJ0IG9mIGFuIEVuaGFuY2VkIEFja25vd2xlZ2RlIGZyYW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1RYQUNLREVMQVkgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTVFhBQ0tERUxBWSAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTUnhXYWl0CisgKgorICogVFNDSCBtb2RlOiBUaGUgdGltZXMgdG8gd2FpdCBmb3Igc3RhcnQgb2YgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFdBSVQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAweGZmZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYV0FJVCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhXQUlUIDE2CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90c2NoX2NvbnRyb2xfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweGMwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzEgMHg0MDA5MDE2NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzEgMHhmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1J4VHgKKyAqCisgKiBUU0NIIG1vZGU6IFRoZSB0aW1lIGJldHdlZW4gdGhlIENDQSBhbmQgdGhlIFRYIG9mIGEgZnJhbWUKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFRYIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFRYIDB4ZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNSWFRYIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYVFggMTYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3RzY2hfY29udHJvbF8yCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MTkwMDMyMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMiAweDQwMDkwMTY4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFNDSF9DT05UUk9MXzIgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMiAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNUU1J4QWNrRGVsYXkKKyAqCisgKiBUU0NIIG1vZGU6IEVuZCBvZiBmcmFtZSB0byB3aGVuIHRoZSB0cmFuc21pdHRlciBzaGFsbCBsaXN0ZW4gZm9yIEFja25vd2xlZGdlbWVudAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RTQ0hfQ09OVFJPTF8yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVkgMHhmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUU1JYQUNLREVMQVkgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTUlhBQ0tERUxBWSAxNgorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1RTQWNrV2FpdAorICoKKyAqIFRTQ0ggbW9kZTogVGhlIG1pbmltdW0gdGltZSB0byB3YWl0IGZvciBzdGFydCBvZiBhbiBBY2tub3dsZWRnZW1lbnQKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNBQ0tXQUlUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UU0NIX0NPTlRST0xfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFNBQ0tXQUlUIDB4ZmZmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RTQUNLV0FJVCAxNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5X3BhcmFtZXRlcnNfMAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDc2NTQzMjEwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDc3Nzc3Nzc3CisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAgMHg0MDA5MDE4MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wIDB4Nzc3Nzc3NzcKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4Qml0UG9zXzAKKyAqCisgKiBEUEhZIGludGVyZmFjZTogY29udHJvbCByeEJpdFBvcyg4KSgzKSBjb250cm9scyB0aGUgcG9zaXRpb24gdGhhdCBhIGJpdCBzaG91bGQgaGF2ZSBhdCB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKiBTbyB0aGUgZGVmYXVsdCB2YWx1ZXMgYXJlIHJ4Qml0UG9zXzAgPSAwLCByeEJpdFBvc18xID0gMSwgcnhCaXRQb3NfMiA9IDIsIGV0Yy4KKyAqCisgKiBOb3RlMSB0aGF0IHRoaXMgaXMgYSBjb252ZXJzaW9uIGZyb20gcnggRFBIWSBpbnRlcmZhY2UgdG8gdGhlIGludGVybmFsIGRhdGEgYnl0ZQorICogU28KKyAqICBmb3Iobj03O24+PTA7bi0tKQorICogICAgcnhfZGF0YShuKSA9IGRwaHlfYml0KHR4X0JpdFBvcyhuKSkKKyAqICBlbmRmb3IKKyAqCisgKiBOb3RlMiB0aGF0IHJ4Qml0UG9zIGFuZCB0eEJpdFBvcyBtdXN0IGhhdmUgaW52ZXJzZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzAgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzAgMHg3CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18wIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18wIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc18xCisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzEgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzEgMHg3MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMSA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMSAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfMgorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yIDB4NzAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18yIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc18zCisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzMgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzMgMHg3MDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU18zIDEyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfMyAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfNAorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU180IElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU180IDB4NzAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzQgMTYKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU180IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc181CisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzUgMHg3MDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzUgMjAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU181IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeEJpdFBvc182CisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSByeEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzYgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzYgMHg3MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU182IDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCSVRQT1NfNiAzCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcnhCaXRQb3NfNworICoKKyAqIERQSFkgaW50ZXJmYWNlOiBzZWUgcnhCaXRQb3NfMAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU183IElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU183IDB4NzAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQklUUE9TXzcgMjgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJJVFBPU183IDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg3NjU0MzIxMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3Nzc3Nzc3NworICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xIDB4NDAwOTAxODQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18xIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMSAweDc3Nzc3Nzc3CisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18wCisgKgorICogRFBIWSBpbnRlcmZhY2U6IGNvbnRyb2wgdHhCaXRQb3MoOCkoMykgY29udHJvbHMgdGhlIHBvc2l0aW9uIHRoYXQgYSBiaXQgc2hvdWxkIGhhdmUgYXQgdGhlIERQSFkgaW50ZXJmYWNlLgorICogU28gdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSB0eEJpdFBvc18wID0gMCwgdHhCaXRQb3NfMSA9IDEsIHR4Qml0UG9zXzIgPSAyLCBldGMuCisgKgorICogTm90ZTEgdGhhdCB0aGlzIGlzIGEgY29udmVyc2lvbiBmcm9tIGludGVybmFsIGRhdGEgYnl0ZSB0byB0aGUgRFBIWSBpbnRlcmZhY2UuCisgKiBTbworICogIGZvcihuPTc7bj49MDtuLS0pCisgKiAgICB0eF9kcGh5X2JpdChuKSA9IHR4X2RhdGEodHhfQml0UG9zKG4pKQorICogIGVuZGZvcgorICoKKyAqIE5vdGUyIHRoYXQgdHhCaXRQb3MgYW5kIHJ4Qml0UG9zIG11c3QgaGF2ZSBpbnZlcnNlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMCAweDcKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzAgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzAgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzEKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMSAweDcwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18xIDQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18xIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc18yCisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgMHg3MDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzIgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzMKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfMyAweDcwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzMgMTIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU18zIDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc180CisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzQgMHg3MDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNCAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzQgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzUKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNSAweDcwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNSAyMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzUgMworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Qml0UG9zXzYKKyAqCisgKiBEUEhZIGludGVyZmFjZTogc2VlIHR4Qml0UG9zXzAKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNiAweDcwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzYgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJJVFBPU182IDMKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eEJpdFBvc183CisgKgorICogRFBIWSBpbnRlcmZhY2U6IHNlZSB0eEJpdFBvc18wCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzcgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzcgMHg3MDAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCSVRQT1NfNyAyOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQklUUE9TXzcgMworCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5X3BhcmFtZXRlcnNfMgorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMiAweDQwMDkwMTg4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfcGh5VHhTdGFydHVwCisgKgorICogRFBIWSBpbnRlcmZhY2U6IHRoZSBwaHkgd2FpdCB0aW1lIChpbiB1cykgYmVmb3JlIHRyYW5zbWlzc2lvbiBvZiBhIGZyYW1lIG1heSBzdGFydC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWFNUQVJUVVAgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhTVEFSVFVQIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWFNUQVJUVVAgOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVR4TGF0ZW5jeQorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBwaHkgZGVsYXkgKGluIHVzKSBiZXR3ZWVuIERQSFkgaW50ZXJmYWNlIGFuZCBhaXIgaW50ZXJmYWNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWExBVEVOQ1kgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYTEFURU5DWSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhMQVRFTkNZIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlUeEZpbmlzaAorICoKKyAqIERQSFkgaW50ZXJmYWNlOiBQaHkgd2FpdCB0aW1lIChpbiB1cykgYmVmb3JlIGRlYXNzZXJ0aW5nIFRYX0VOIGFmdGVyIGRlYXNzZXJ0aW5nIFRYX1ZBTElELgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUWEZJTklTSCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMgorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggMHhmZjAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRYRklOSVNIIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZVFhGSU5JU0ggOAorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeVRSeFdhaXQKKyAqCisgKiBEUEhZIGludGVyZmFjZTogUGh5IHdhaXQgdGltZSAoaW4gdXMpIGJldHdlZW4gZGVhc3NlcnRpb24gb2YgVFhfRU4gYW5kIGFzc2VydGlvbiBvZiBSWF9FTiBvciB2aWNlIHZlcnNhLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18yCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUIDB4ZmYwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVRSWFdBSVQgMjQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlUUlhXQUlUIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3BoeV9wYXJhbWV0ZXJzXzMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgxMDAwMDAwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDFmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMyAweDQwMDkwMThjCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMgMHgxZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlSeFN0YXJ0dXAKKyAqCisgKiBEUEhZIGludGVyZmFjZTogUGh5IHdhaXQgdGltZSAoaW4gdXMpIGJlZm9yZSByZWNlaXZpbmcgb2YgYSBmcmFtZSBtYXkgc3RhcnQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUEhZX1BBUkFNRVRFUlNfMworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhTVEFSVFVQIDB4ZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYU1RBUlRVUCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhTVEFSVFVQIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlSeExhdGVuY3kKKyAqCisgKiBEUEhZIGludGVyZmFjZTogUGh5IGRlbGF5IChpbiB1cykgYmV0d2VlbiBhaXIgYW5kIERQSFkgaW50ZXJmYWNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlSWExBVEVOQ1kgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYTEFURU5DWSAweGZmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWVJYTEFURU5DWSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZUlhMQVRFTkNZIDgKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9waHlFbmFibGUKKyAqCisgKiBEUEhZIGludGVyZmFjZTogQXNzZXJ0aW5nIHRoZSBEUEhZIGludGVyZmFjZSBzaWduYWxzIFRYX0VOIG9yIFJYX0VOIGRvZXMgbm90IHRha2UgcGxhY2Ugd2l0aGluIHRoZSB0aW1lIHBoeUVuYWJsZSBhZnRlciBhc3NlcnRpbmcgdGhlIHNpZ25hbCBQSFlfRU4uCisgKiAoaW4gdXMpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlFTkFCTEUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1BIWV9QQVJBTUVURVJTXzMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BIWUVOQUJMRSAweGZmMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUEhZRU5BQkxFIDgKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdXNlX2xlZ2FjeV9waHlfZW4KKyAqCisgKiBJZiB0aGUgY29udHJvbCByZWdpc3RlciB1c2VfbGVnYWN5X3BoeV9lbiBpcyBzZXQgKGRlZmF1bHQpLCB0aGUgb3V0cHV0IHNpZ25hbCBQSFlfVFJBTlNBQ1RJT04gd2lsbCBiZSBzb3VyY2VkIGJ5IFBIWV9FTiByYXRoZXIgdGhhbiBQSFlfVFJBTlNBQ1RJT04uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1VTRV9MRUdBQ1lfUEhZX0VOIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9QSFlfUEFSQU1FVEVSU18zCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9VU0VfTEVHQUNZX1BIWV9FTiAweDEwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1VTRV9MRUdBQ1lfUEhZX0VOIDI0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVVNFX0xFR0FDWV9QSFlfRU4gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfcnhfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMCAweDQwMDkwMjAwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wIDB4ZmZmZmZmZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0RiZ1J4VHJhbnNwYXJlbnRNb2RlCisgKgorICogSWYgc2V0IHlvICcxJywgUnggcGlwZSBpcyBmdWxseSBzZXQgaW4gdHJhbnNwYXJlbnQgbW9kZSAoZm9yIGRlYnVnIHB1cnBvc2UpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdSWFRSQU5TUEFSRU5UTU9ERSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdSWFRSQU5TUEFSRU5UTU9ERSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR1JYVFJBTlNQQVJFTlRNT0RFIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdSWFRSQU5TUEFSRU5UTU9ERSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4QmVhY29uT25seQorICoKKyAqIElmIHNldCB0byAnMScsIG9ubHkgQmVhY29ucyBmcmFtZXMgYXJlIGFjY2VwdGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQkVBQ09OT05MWSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJFQUNPTk9OTFkgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJFQUNPTk9OTFkgMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQkVBQ09OT05MWSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4Q29vcmRSZWFsaWduT25seQorICoKKyAqIElmIHNldCB0byAnMScsIG9ubHkgQ29vcmRpbmF0b3IgUmVhbGlnbm1lbnQgZnJhbWVzIGFyZSBhY2NlcHRlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWENPT1JEUkVBTElHTk9OTFkgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhDT09SRFJFQUxJR05PTkxZIDIKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWENPT1JEUkVBTElHTk9OTFkgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X3JlYWRfYnVmX3B0cgorICoKKyAqIEluZGljYXRpb24gd2hlcmUgbmV3IGRhdGEgd2lsbCBiZSByZWFkCisgKiBBbGwgZm91ciBiaXRzIHNoYWxsIGJlIHVzZWQgd2hlbiB1c2luZyB0aGVzZSBwb2ludGVyIHZhbHVlcyAoMGQgLSAxNWQpLgorICogSG93ZXZlciwgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBoYXMgYSBzaXplIG9mIDggZW50cmllcy4KKyAqIFNvIHJlYWRpbmcgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBlbnRyaWVzIHNoYWxsIHVzZSB0aGUgbW9kOCBvZiB0aGUgcG9pbnRlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1JFQURfQlVGX1BUUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIgMHg3OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfUkVBRF9CVUZfUFRSIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9SRUFEX0JVRl9QVFIgNAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9EaXNSeEZybVBlbmRpbmdjYQorICoKKyAqIFdoYW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgRGlzUnhGcm1QZW5kaW5nQ2EgaXMgc2V0IHRvICcxJywgdGhlIG5vdGlmaWNhdGlvbiBvZiB0aGUgcmVjZWl2ZWQgRlAgYml0IHRvIHRoZSBMTUFDIENvbnRyb2xsZXIgaXMgZGlzYWJsZWQgYW5kIHRodXMgbm8gY29uc2VxdWVudCBhY3Rpb25zIHdpbGwgdGFrZSBwbGFjZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhGUk1QRU5ESU5HQ0EgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhGUk1QRU5ESU5HQ0EgMHg4MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhGUk1QRU5ESU5HQ0EgNworI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYRlJNUEVORElOR0NBIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzUnhBY2tSZXF1ZXN0Y2EKKyAqCisgKiBXaGVuIHRoZSBjb250cm9sIHJlZ2lzdGVyIERpc1J4QWNrUmVxdWVzdGNhIGlzIHNldCB0byAnMScgYWxsIGNvbnNlcXVlbnQgYWN0aW9ucyBmb3IgYSByZWNlaXZlZCBBY2tub3dsZWRnZSBSZXF1ZXN0IGJpdCBhcmUgZGlzYWJsZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVRVUVTVENBIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RJU1JYQUNLUkVRVUVTVENBIDB4MTAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFUVVFU1RDQSA4CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRVFVRVNUQ0EgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzQ3JjZXJyb3IKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBhIEZDUyBlcnJvciB3aWxsIG5vdCBkcm9wIHRoZSBmcmFtZS4gSG93ZXZlciwgYW4gRkNTIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIFJ4IG1ldGEgZGF0YSAoY3JjMTZfZXJyb3IgaXMgc2V0IHRvICcxJykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQ1JDRVJST1IgMHgyMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NDUkNFUlJPUiA5CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0NSQ0VSUk9SIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzRGF0YVJlcXVlc3RjYQorICoKKyAqIFdoZW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgRGlzRGF0YVJlcXVlc3RDYSBpcyBzZXQsIHRoZSBub3RpZmljYXRpb24gb2YgdGhlIHJlY2VpdmVkIERhdGEgUmVxdWVzdCBpcyBkaXNhYmxlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNEQVRBUkVRVUVTVENBIDB4NDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNEQVRBUkVRVUVTVENBIDEwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTREFUQVJFUVVFU1RDQSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NSZXNGcmFtZVZlcnNpb24KKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBhIHBhY2tldCB3aXRoIGEgcmVzZXJ2ZWQgRnJhbWVWZXJzaW9uIHNoYWxsIG5vdCBiZSBkcm9wcGVkCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiAweDgwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1JFU0ZSQU1FVkVSU0lPTiAxMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NSRVNGUkFNRVZFUlNJT04gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzV3JvbmdEUEFOSWQKKyAqCisgKiBJZiByZWdpc3RlciBtYWNBbHdheXNQYXNzV3JvbmdEUEFOSWQgaXMgc2V0IHRvICcxJywgcGFja2V0IHdpdGggYSB3cm9uZyBEZXN0aWFudGlvbiBQYW5JRCB3aWxsIG5vdCBiZSBkcm9wcGVkLgorICogSG93ZXZlciwgaW4gY2FzZSBvZiBhbiBGQ1MgZXJyb3IsIHRoZSBwYWNrZXQgaXMgZHJvcHBlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HRFBBTklEIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAweDEwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAxMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RQQU5JRCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NXcm9uZ0RBZGRyCisgKgorICogSWYgc2V0IHRvICcxJywgYSBwYWNrZXQgd2l0aCBhIHdyb25nIERBZGRyIGlzICBub3QgZHJvcHBlZAorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEQUREUiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV1JPTkdEQUREUiAweDIwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXUk9OR0RBRERSIDEzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dST05HREFERFIgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNBbHdheXNQYXNzQmVhY29uV3JvbmdQQU5JZAorICoKKyAqIElmIHRoZSBjb250cm9sIHJlZ2lzdGVyIG1hY0Fsd2F5c1Bhc3NCZWFjb25Xcm9uZ1BBTklkIGlzIHNldCwgdGhlIGZyYW1lIGlzIG5vdCBkcm9wcGVkIGluIGNhc2Ugb2YgYSBtaXNtYXRjaCBpbiBQQU4tSUQsIGlycmVzcGVjdGl2ZSBvZiB0aGUgc2V0dGluZyBvZiBSeEJlYWNvbk9ubHkuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NCRUFDT05XUk9OR1BBTklEIDB4NDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU0JFQUNPTldST05HUEFOSUQgMTQKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTQkVBQ09OV1JPTkdQQU5JRCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0Fsd2F5c1Bhc3NUb1BhbkNvb3JkaW5hdG9yCisgKgorICogV2hlbiB0aGUgY29udHJvbCByZWdpc3RlciBtYWNBbHdheXNQYXNzVG9QYW5Db29yZGluYXRvciBpcyBzZXQgdG8gJzEnLCB0aGUgZnJhbWUgaXMgbm90IGRyb3BwZWQgZHVlIHRvIGEgc3Bhbl9jb29yZF9lcnJvci4KKyAqIEhvd2V2ZXIsIGluIGNhc2Ugb2YgYW4gRkNTIGVycm9yLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NUT1BBTkNPT1JESU5BVE9SIDB4ODAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1RPUEFOQ09PUkRJTkFUT1IgMTUKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTVE9QQU5DT09SRElOQVRPUiAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc0ZybVR5cGUKKyAqCisgKiBUaGUgY29udHJvbCByZWdpc3RlcnMgbWFjQWx3YXlzUGFzc0ZybVR5cGVbNzowXSwgc2hhbGwgY29udHJvbCBpZiB0aGlzIEZyYW1lIFR5cGUgc2hhbGwgYmUgZHJvcHBlZC4KKyAqIElmIGEgYml0IGlzIHNldCB0byAnMScsIHRoZSBGcmFtZSBUeXBlIGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgYml0IHBvc2l0aW9uIGlzIG5vdCBkcm9wcGVkLCBldmVuIGluIGNhc2Ugb2YgYSBDUkMgZXJyb3IuCisgKiBFeGFtcGxlOgorICogICBpZiBiaXQgMyBpcyBzZXQgdG8gJzEnLCBGcmFtZSBUeXBlIDMgc2hhbGwgbm90IGJlIGRyb3BwZWQuCisgKiAgIElmIHRoZXJlIGlzIGEgRkNTIGVycm9yLCB0aGUgZXJyb3Igc2hhbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIFJ4IG1ldGEgZGF0YSAoY3JjMTZfZXJyb3IgaXMgc2V0IHRvICcxJykuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NGUk1UWVBFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NGUk1UWVBFIDB4ZmYwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTRlJNVFlQRSAxNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NGUk1UWVBFIDgKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfbWFjQWx3YXlzUGFzc1dha2VVcAorICoKKyAqIEluIENTTCBtb2RlLCBpZiB0aGUgY29udHJvbCByZWdpc3RlciBtYWNBbHdheXNQYXNzV2FrZVVwIGlzIHNldCB0byAnMScsIHJlY2VpdmVkIFdha2UtIHVwIGZyYW1lcyBmb3IgdGhpcyBkZXZpY2UgYXJlIHB1dCBpbnRvIHRoZSBSeCBwYWNrZXQgYnVmZmVyIHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBMTUFDIENvbnRyb2xsZXIgKHBhcnQgb2YgdHJhbnNwYXJlbnQgbW9kZSBjb250cm9sKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dBS0VVUCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNBTFdBWVNQQVNTV0FLRVVQIDB4MTAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDQUxXQVlTUEFTU1dBS0VVUCAyNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0FMV0FZU1BBU1NXQUtFVVAgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNQYXNzV2FrZVVwCisgKgorICogSW4gQ1NMIG1vZGUsIGlmIHNldCB0byAnMScsIFdha2VVcCBmcmFtZXMgd2lsbCBiZSBwdXQgaW50byB0aGUgUnggYnVmZmVyLgorICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBzb2Z0d2FyZSB0byBwYXJzZSB0aGUgV2FrZVVwIGZyYW1lLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQVNTV0FLRVVQIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9DT05UUk9MXzAKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1BBU1NXQUtFVVAgMHgyMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNQQVNTV0FLRVVQIDI1CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUEFTU1dBS0VVUCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0ltcGxpY2l0QnJvYWRjYXN0CisgKgorICogSWYgc2V0IHRvICcxJywgRnJhbWUgVmVyc2lvbiAyIGZyYW1lcyB3aXRob3V0IERhZGRyIG9yIERQQU5JZCBzaGFsbCBiZSBhY2NlcHRlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDSU1QTElDSVRCUk9BRENBU1QgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDSU1QTElDSVRCUk9BRENBU1QgMHg0MDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNJTVBMSUNJVEJST0FEQ0FTVCAyNgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0lNUExJQ0lUQlJPQURDQVNUIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfRGlzUnhBY2tSZWNlaXZlZGNhCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIExNQUMgY29udHJvbGxlciBzaGFsbCBpZ25vcmUgYWxsIGNvbnNlcXVlbnQgYWN0aW9ucyB1cG9uIGEgc2V0IEFSIGJpdCBpbiB0aGUgdHJhbnNtaXR0ZWQgZnJhbWUgKGUuZy4gZW5hYmxpbmcgUngtb24gbW9kZSBhZnRlciB0aGUgdHJhbnNtaXNzaW9uIGFuZCB3YWl0IGZvciBhbiBBQ0spLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9ESVNSWEFDS1JFQ0VJVkVEQ0EgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBIDB4ODAwMDAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBIDI3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfRElTUlhBQ0tSRUNFSVZFRENBIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2V2ZW50CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cyIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UIDB4NDAwOTAyMDQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9FVkVOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UIDB4ZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4U29mX2UKKyAqCisgKiBTZXQgdG8gJzEnIHdoZW4gUlhfU09GIGhhcyBiZWVuIGRldGVjdGVkLgorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVsxXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhTT0ZfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX0UgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfb3ZlcmZsb3dfZQorICoKKyAqIElmIHNldCB0byAnMScgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIFJ4IHBhY2tldCBidWZmZXIgaGFzIGFuIG92ZXJmbG93LgorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVsxXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfT1ZFUkZMT1dfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX0UgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfYnVmX2F2YWlsX2UKKyAqCisgKiBJZiBzZXQgdG8gJzEnIGl0IGluZGljYXRlcyB0aGF0IGEgbmV3IHZhbGlkIHBhY2tldCBjb21wbGV0ZWx5IGhhcyBiZWVuIHJlY2VpdmVkCisgKiBUaGlzIGV2ZW50IGJpdCBjb250cmlidXRlcyB0byBmdGRmX2NlWzFdLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfRSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfRVZFTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9FIDB4NAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX0UgMgorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRl9BVkFJTF9FIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhieXRlX2UKKyAqCisgKiBJZiBzZXQgdG8gJzEnIGl0IGluZGljYXRlcyB0aGF0IHRoZSBmaXJzdCBieXRlIG9mIGEgbmV3IHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZAorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVsxXS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhCWVRFX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0VWRU5UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9FIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9tYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogRU0tUlcgKGV2ZW50IG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sgMHg0MDA5MDIwOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLIDB4ZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1J4U29mX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgIlJ4U29mX2UiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYU09GX00gMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWFNPRl9NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfb3ZlcmZsb3dfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAiIHJ4X292ZXJmbG93X2UiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX00gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX01BU0sKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX09WRVJGTE9XX00gMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19NIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9PVkVSRkxPV19NIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfcnhfYnVmX2F2YWlsX20KKyAqCisgKiBNYXNrIGJpdCBmb3IgZXZlbnQgInJ4X2J1Zl9hdmFpbF9lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gMHg0CisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZfQVZBSUxfTSAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGX0FWQUlMX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeGJ5dGVfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAicnhieXRlX2UiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9NQVNLCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfTSAweDgKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYQllURV9NIDMKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWEJZVEVfTSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF9zdGF0dXMKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTIDB4NDAwOTAyMGMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVMgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVMgMHgxZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1ZmZfaXNfZnVsbAorICoKKyAqIElmIHNldCB0byAnMScsIGl0IGluZGljYXRlcyB0aGF0IHRoZSBSeCBwYWNrZXQgYnVmZmVyIGlzIGZ1bGwKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVMKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9yeF93cml0ZV9idWZfcHRyCisgKgorICogSW5kaWNhdGlvbiB3aGVyZSBuZXcgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uCisgKiBBbGwgZm91ciBiaXRzIHNoYWxsIGJlIHVzZWQgd2hlbiB1c2luZyB0aGVzZSBwb2ludGVyIHZhbHVlcyAoMGQgLSAxNWQpLgorICogSG93ZXZlciwgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBoYXMgYSBzaXplIG9mIDggZW50cmllcy4KKyAqIFNvIHJlYWRpbmcgdGhlIFJlY2VpdmUgUGFja2V0IGJ1ZmZlciBlbnRyaWVzIHNoYWxsIHVzZSB0aGUgbW9kOCBvZiB0aGUgcG9pbnRlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1dSSVRFX0JVRl9QVFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfV1JJVEVfQlVGX1BUUiAweDFlCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9XUklURV9CVUZfUFRSIDQKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWVTbmFwc2hvdFZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgMHg0MDA5MDIxMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lU25hcHNob3RWYWwKKyAqCisgKiBUaGUgU3RhdHVzIHJlZ2lzdGVyIFN5bWJvbFRpbWVTbmFwc2hvdFZhbCBpbmRpY2F0ZXMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgVGltZVN0YW1wIGdlbmVyYXRvci4KKyAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29mdHdhcmUgdG8gdXNlIGUuZy4gaW4gQ1NMIG1vZGUgYXQgY3JlYXRpbmcgYW4gRW5oYW5jZWQgQUNLIHRvIGNhbGN1bGF0ZSB0aGUgQ1NMIHBoYXNlIGFuZCBwZXJpb2QuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVTTkFQU0hPVFZBTCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVNOQVBTSE9UVkFMIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FU05BUFNIT1RWQUwgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X3N0YXR1c19kZWx0YQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IEQtUkNXIChkZWx0YSByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19ERUxUQSAweDQwMDkwMjIwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX0RFTFRBIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfUlhfU1RBVFVTX0RFTFRBIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1ZmZfaXNfZnVsbF9kCisgKgorICogRGVsdGEgYml0IG9mIHN0YXR1cyAicnhfYnVmZl9pc19mdWxsIi4KKyAqIFRoaXMgZGVsdGEgYml0IGlzIHNldCB0byAnMScgb24gZWFjaCBjaGFuZ2Ugb2YgdGhpcyBzdGF0dXMsIGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbMV0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9EIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfREVMVEEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9EIDB4MQorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX0QgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9EIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X3N0YXR1c19tYXNrCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgxCisgKiBBY2Nlc3MgbW9kZTogRE0tUlcgKGRlbHRhIG1hc2spCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19NQVNLIDB4NDAwOTAyMjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfTUFTSyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1JYX1NUQVRVU19NQVNLIDB4MQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3J4X2J1ZmZfaXNfZnVsbF9tCisgKgorICogTWFzayBiaXQgZm9yIGRlbHRhIGJpdCAicnhfYnVmZl9pc19mdWxsX2QiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1JYX0JVRkZfSVNfRlVMTF9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9TVEFUVVNfTUFTSworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX00gMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9SWF9CVUZGX0lTX0ZVTExfTSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfUlhfQlVGRl9JU19GVUxMX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfY29udHJvbF8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4NDM1MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHg3ZmYxCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMCAweDQwMDkwMjQwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ09OVFJPTF8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ09OVFJPTF8wIDB4N2ZmMQorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0RiZ1R4VHJhbnNwYXJlbnRNb2RlCisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIE1QRFUgb2N0ZXRzIHBhc3MgdHJhbnNwYXJlbnRseSB0aHJvdWdoIHRoZSBNQUMgaW4gdGhlIHRyYW5zbWl0IGRpcmVjdGlvbiAoZm9yIGRlYnVnIHB1cnBvc2UpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ09OVFJPTF8wCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR1RYVFJBTlNQQVJFTlRNT0RFIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdUWFRSQU5TUEFSRU5UTU9ERSAxCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWF4QkUKKyAqCisgKiBDU01BLUNBOiBNYXhpbXVtIEJhY2tvZmYgRXhwb25lbnQgKHJhbmdlIDMtOCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQkUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQkUgMHhmMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQkUgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01BWEJFIDQKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNNaW5CRQorICoKKyAqIENTTUEtQ0E6IE1pbmltdW0gQmFja29mZiBFeHBvbmVudCAocmFuZ2UgMC1tYWNNYXhCRSkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUlOQkUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUlOQkUgMHhmMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ01JTkJFIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNSU5CRSA0CisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjTWF4Q1NNQUJhY2tvZmZzCisgKgorICogQ1NNQS1DQTogTWF4aW11bSBudW1iZXIgb2YgQ1NNQS1DQSBiYWNrb2ZmcyAocmFuZ2UgMC01KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNNQVhDU01BQkFDS09GRlMgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NPTlRST0xfMAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTIDB4NzAwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTIDEyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDTUFYQ1NNQUJBQ0tPRkZTIDMKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX2Z0ZGZfY2UKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBFQy1SIChjb21wb3NpdGUgZXZlbnQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgMHg0MDA5MDI1MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDB4M2YKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2Z0ZGZfY2UKKyAqCisgKiBDb21wb3NpdGUgc2VydmljZSByZXF1ZXN0IGZyb20gZnRkZiBtYWNybyAoc2VlIEZSMDQwMCBpbiB2NDAuMTAwLjIuNDEucGRmKSwgc2V0IHRvICcxJyBpZiB0aGUgYnJhbmNoIGN1cnJlbnRseSBjb250cmlidXRlcyB0byB0aGUgaW50ZXJydXB0LgorICogQml0IDAgPSB1bnVzZWQKKyAqIEJpdCAxID0gcnggaW50ZXJydXB0cworICogQml0IDIgPSB1bnVzZWQKKyAqIEJpdCAzID0gbWlzY2VsYW5lb3VzIGludGVycnVwdHMKKyAqIEJpdCA0ID0gdHggaW50ZXJydXB0cworICogQml0IDUgPSBSZXNlcnZlZAorICogVXBvbiBhbiBpbnRlcnJ1cHQsIHVzaW5nIHRoZSBmdGRmX2NlIGJpdHMgaXQgY2FuIGJlIGNoZWNrZWQgd2hpY2ggaW50ZXJydXB0IGJyYW5jaCBjcmVhdGVzIHRoaXMgaW50ZXJydXB0LgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NFIDB4M2YKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0ZUREZfQ0UgNgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfZnRkZl9jbQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4M2YKKyAqIEFjY2VzcyBtb2RlOiBFQ00tUlcgKGNvbXBvc2l0ZSBldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNIDB4NDAwOTAyNTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAweDNmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9mdGRmX2NtCisgKgorICogbWFzayBiaXRzIGZvciBmdGZfY2UuCisgKiBUaGUgbWFzayBiaXQgaXMgbWFza2luZyB3aGVuIGNsZWFyZWQgdG8gJzAnIChkZWZhdWx0IHZhbHVlKSBhbmQgd2lsbCBlbmFibGUgdGhlIGNvbnRyaWJ1dGlvbiB0byB0aGUgaW50ZXJydXB0IHdoZW4gc2V0IHRvICcxJy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfRlRERl9DTSAweDNmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9GVERGX0NNIDYKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bmNUaW1lU3RhbXBUaHIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDFmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAweDQwMDkwMzA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBUSFIgMHgxZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wVGhyCisgKgorICogVGhyZXNob2xkIGZvciBzeW5jaHJvbml6ZSB0aGUgdGltZXN0YW1wIGNvdW50ZXI6IGF0IHRoaXMgdmFsdWUgb2YgdGhlIGV2ZW50IGNvdW50ZXIgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgdGltZXN0YW1wIChzeW1ib2wpIGNvdW50ZXIgaXMgZG9uZSAoaWYgU3luY1RpbWVTdGFtcEVuYSBpcyBzZXQgdG8gJzEnKS4KKyAqIElmIFN5bmNUaW1lU3RhbXBfZSBpcyBzZXQgdG8gJzEnIHRoZSBzeW5jaHJvbml6YXRpb24gaGFzIHRha2VuIHBsYWNlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QVEhSIDB4MWZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFRIUiAyNQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZmZmZmZmZmYKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAweDQwMDkwMzA4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFZhbAorICoKKyAqIFZhbHVlIHRvIHN5bmNocm9uaXplIHRoZSB0aW1lc3RhbXAgY291bnRlciB3aXRoIGF0IHRoZSBtb21lbnQgaW5kaWNhdGVkIGJ5IFN5bmNUaW1lU3RhbXBUaHIuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBWQUwgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFZBTCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcFBoYXNlVmFsCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgMHg0MDA5MDMyMAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCAweGZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW5jVGltZVN0YW1wUGhhc2VWYWwKKyAqCisgKiBWYWx1ZSB0byBzeW5jaHJvbml6ZSB0aGUgdGltZXN0YW1wIGNvdW50ZXIgcGhhc2Ugd2l0aCBhdCB0aGUgbW9tZW50IGluZGljYXRlZCBieSBTeW5jVGltZVN0YW1wVGhyLgorICogUGxlYXNlIG5vdGUgdGhlICsxIGNvcnJlY3Rpb24gbmVlZGVkIGZvciBtb3N0IGFjY3VyYXRlIHJlc3VsdCAoKzAuNSBpcyB0aGFuIHRoZSBhdmVyYWdlIGVycm9yLCByZXN1bHRpbmcgaXMgYSBqdXN0IHRvbyBmYXN0IGNsb2NrKS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lOQ1RJTUVTVEFNUFBIQVNFVkFMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCAweGZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QUEhBU0VWQUwgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBQSEFTRVZBTCA4CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90aW1lcl9jb250cm9sXzEKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDIKKyAqIEFjY2VzcyBtb2RlOiBDLVJXIChjb250cm9sIC0gcmVhZC93cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVElNRVJfQ09OVFJPTF8xIDB4NDAwOTAzMGMKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FUl9DT05UUk9MXzEgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FUl9DT05UUk9MXzEgMHgyCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfU3luY1RpbWVTdGFtcEVuYQorICoKKyAqIElmIHNldCB0byAnMScsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIHRpbWVzdGFtcCBjb3VudGVyIGFmdGVyIGEgZGVlcC1zbGVlcCBjeWNsZSB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIFN5bmNUaW1lU3RhbXBUaHIgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIGV2ZW50ICh3YWtlLXVwKSBjb3VudGVyLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9USU1FUl9DT05UUk9MXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTkNUSU1FU1RBTVBFTkEgMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU5DVElNRVNUQU1QRU5BIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1R4U3RkQWNrRnJtQ250CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UIDB4NDAwOTAzMTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1R4U3RkQWNrRnJtQ250CisgKgorICogVHJhZmZpYyBjb3VudGVyOiB0aGUgbnVtYmVyIG9mIHN0YW5kYXJkIEFja25vd2xlZGdtZW50IGZyYW1lcyB0cmFuc21pdHRlZCBhZnRlciB0aGUgbGFzdCBkZWVwLXNsZWVwIGN5Y2xlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDVFhTVERBQ0tGUk1DTlQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1RYU1REQUNLRlJNQ05UIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNUWFNUREFDS0ZSTUNOVCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhTdGRBY2tGcm1Pa0NudAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IFMtUiAoc3RhdGUgLSByZWFkKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIDB4NDAwOTAzMTQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhTVERBQ0tGUk1PS0NOVCAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFN0ZEFja0ZybU9rQ250CisgKgorICogVHJhZmZpYyBjb3VudGVyOiB0aGUgbnVtYmVyIG9mIFN0YW5kYXJkIEFja25vd2xlZGdtZW50IGZyYW1lcyByZWNlaXZlZCBhZnRlciB0aGUgbGFzdCBkZWVwLXNsZWVwIGN5Y2xlLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFNUREFDS0ZSTU9LQ05UIDB4ZmZmZmZmZmYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYU1REQUNLRlJNT0tDTlQgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4QWRkckZhaWxGcm1DbnQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogbm9uZS4KKyAqIEFjY2VzcyBtb2RlOiBTLVIgKHN0YXRlIC0gcmVhZCkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAweDQwMDkwMzE4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYQUREUkZBSUxGUk1DTlQgMHhmZmZmZmZmZgorCisvKgorICoKKyAqIEZpZWxkOiBmdGRmX29uX29mZl9yZWdtYXBfbWFjUnhBZGRyRmFpbEZybUNudAorICoKKyAqIFRyYWZmaWMgY291bnRlcjogdGhlIG51bWJlciBvZiBmcmFtZXMgZGlzY2FyZGVkIGR1ZSB0byBpbmNvcnJlY3QgYWRkcmVzcyBvciBQQU4gSWQgYWZ0ZXIgdGhlIGxhc3QgZGVlcC1zbGVlcCBjeWNsZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhBRERSRkFJTEZSTUNOVCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWEFERFJGQUlMRlJNQ05UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNSeFVuc3VwRnJtQ250CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgMHg0MDA5MDMxYworI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ1JYVU5TVVBGUk1DTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY1J4VW5zdXBGcm1DbnQKKyAqCisgKiBUcmFmZmljIGNvdW50ZXI6IHRoZSBudW1iZXIgb2YgZnJhbWVzIHdoaWNoIGRvIHBhc3MgdGhlIGNoZWNrcyBidXQgYXJlIG5vdCBzdXBwb3J0ZWQgYWZ0ZXIgdGhlIGxhc3QgZGVlcC1zbGVlcCBjeWNsZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDUlhVTlNVUEZSTUNOVCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNSWFVOU1VQRlJNQ05UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9tYWNGQ1NFcnJvckNvdW50CisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgMHg0MDA5MDM0MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX01BQ0ZDU0VSUk9SQ09VTlQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX21hY0ZDU0Vycm9yQ291bnQKKyAqCisgKiBtZXRyaWNzIGNvdW50ZXI6IHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgd2VyZSBkaXNjYXJkZWQgZHVlIHRvIGFuIGluY29ycmVjdCBGQ1MgYWZ0ZXIgdGhlIGxhc3QgZGVlcC1zbGVlcCBjeWNsZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTUFDRkNTRVJST1JDT1VOVCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9NQUNGQ1NFUlJPUkNPVU5UIDMyCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXQKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweDEwNmRmCisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUIDB4NDAwOTAzNjAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQgMHgxMDZkZgorCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9jb250cm9sCisgKgorICogTG1hY1Jlc2V0X2NvbnRyb2w6IEEgJzEnIHJlc2V0cyBMTUFDIENvbnRyb2xsZXIgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09OVFJPTCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPTlRST0wgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfcngKKyAqCisgKiBMbWFjUmVzZXRfcng6IEEgJzEnIHJlc2V0cyBMTUFDIHJ4IHBpcGVsaW5lIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9SWCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfUlggMHgyCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfUlggMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9SWCAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF90eAorICoKKyAqIExtYWNSZXNldF90eDogQSAnMScgcmVzZXRzIExNQUMgdHggcGlwZWxpbmUgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RYIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCAweDQKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UWCAyCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RYIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X2FoYgorICoKKyAqIExtYWNSZXNldF9haGI6IEEgJzEnIHJlc2V0cyBMTUFDIGFoYiBpbnRlcmZhY2UgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0FIQiBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQUhCIDB4OAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0FIQiAzCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0FIQiAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9vcmVnCisgKgorICogTG1hY1Jlc2V0X29yZWc6IEEgJzEnIHJlc2V0cyBMTUFDIG9uX29mZiByZWdtYXAgKGZvciBkZWJ1ZyBhbmQgTUxNRS1yZXNldCkKKyAqCisgKiAjJExtYWNSZXNldF9hcmVnQG9uX29mZl9yZWdtYXAKKyAqICNMbWFjUmVzZXRfYXJlZzogQSAnMScgUmVzZXRzIExNQUMgYWx3YXlzX29uIHJlZ21hcCAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfT1JFRyBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfT1JFRyAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfT1JFRyA0CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX09SRUcgMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9MbWFjUmVzZXRfdHN0aW0KKyAqCisgKiBMbWFjUmVzZXRfdHN0aW06IEEgJzEnIHJlc2V0cyBMTUFDIHRpbWVzdGFtcCB0aW1lciAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVFNUSU0gSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNIDB4NDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9UU1RJTSA2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1RTVElNIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X3NlYworICoKKyAqIExtYWNSZXNldF9zZWM6IEEgJzEnIHJlc2V0cyBMTUFDIHNlY3VyaXR5IChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKgorICogIyRMbWFjUmVzZXRfd3V0aW1Ab25fb2ZmX3JlZ21hcAorICogI0xtYWNSZXNldF93dXRpbTogQSAnMScgUmVzZXRzIExNQUMgd2FrZS11cCB0aW1lciAoZm9yIGRlYnVnIGFuZCBNTE1FLXJlc2V0KQorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfU0VDIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9TRUMgMHg4MAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1NFQyA3CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX1NFQyAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX0xtYWNSZXNldF9jb3VudAorICoKKyAqIExtYWNSZXNldF9jb3VudDogQSAnMScgcmVzZXRzIExNQUMgbWFjIGNvdW50ZXJzIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT1VOVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfQ09VTlQgMHgyMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9DT1VOVCA5CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ1JFU0VUX0NPVU5UIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY1Jlc2V0X3RpbWN0cmwKKyAqCisgKiBMbWFjUmVzZXRfY291bnQ6IEEgJzEnIHJlc2V0cyBMTUFDIHRpbWluZyBjb250cm9sIGJsb2NrIChmb3IgZGVidWcgYW5kIE1MTUUtcmVzZXQpCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVQKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMIDB4NDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDUkVTRVRfVElNQ1RSTCAxMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVF9USU1DVFJMIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfTG1hY0dsb2JSZXNldF9jb3VudAorICoKKyAqIElmIHNldCwgdGhlIExNQUMgcGVyZm9ybWFuY2UgYW5kIHRyYWZmaWMgY291bnRlcnMgd2lsbCBiZSByZXNldC4KKyAqIFVzZSB0aGlzIHJlZ2lzdGVyIGZvciBmdW5jdGlvbmFsbHkgcmVzZXQgdGhlc2UgY291bnRlcnMuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNHTE9CUkVTRVRfQ09VTlQgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0xNQUNSRVNFVAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ0dMT0JSRVNFVF9DT1VOVCAweDEwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9MTUFDR0xPQlJFU0VUX0NPVU5UIDE2CisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfTE1BQ0dMT0JSRVNFVF9DT1VOVCAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF93YWtldXBfY29udHJvbF9vcworICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MworICogQWNjZXNzIG1vZGU6IE9TLVcgKG9uZS1zaG90IC0gd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUF9DT05UUk9MX09TIDB4NDAwOTAzNjQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBfQ09OVFJPTF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUF9DT05UUk9MX09TIDB4MworCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX1dha2V1cFRpbWVyRW5hYmxlX3NldAorICoKKyAqIElmIHNldCwgV2FrZXVwVGltZXJFbmFibGVTdGF0dXMgd2lsbCBiZSBzZXQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX1NFVCBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQX0NPTlRST0xfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX1NFVCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX1NFVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVfU0VUIDEKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfV2FrZXVwVGltZXJFbmFibGVfY2xlYXIKKyAqCisgKiBJZiBzZXQsIFdha2V1cFRpbWVyRW5hYmxlU3RhdHVzIHdpbGwgYmUgY2xlYXJlZC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfV0FLRVVQVElNRVJFTkFCTEVfQ0xFQVIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUF9DT05UUk9MX09TCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9DTEVBUiAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1dBS0VVUFRJTUVSRU5BQkxFX0NMRUFSIDEKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9XQUtFVVBUSU1FUkVOQUJMRV9DTEVBUiAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lVGhyCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmZmZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSIDB4NDAwOTAzODAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FVEhSIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAweGZmZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9TeW1ib2xUaW1lVGhyCisgKgorICogU3ltYm9sdGltZSBUaHJlc2hvbGQgdG8gZ2VuZXJhdGUgYSBnZW5lcmFsIGludGVycnVwdCB3aGVuIHRoaXMgdmFsdWUgbWF0Y2hlcyB0aGUgc3ltYm9sIGNvdW50ZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUVUSFIgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRVRIUiAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfU3ltYm9sVGltZTJUaHIKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGZmZmZmZmZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSIDB4NDAwOTAzODQKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSIDB4ZmZmZmZmZmYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX1N5bWJvbFRpbWUyVGhyCisgKgorICogU3ltYm9sdGltZSAyIFRocmVzaG9sZCB0byBnZW5lcmF0ZSBhIGdlbmVyYWwgaW50ZXJydXB0IHdoZW4gdGhpcyB2YWx1ZSBtYXRjaGVzIHRoZSBzeW1ib2wgY291bnRlciB2YWx1ZS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1NZTUJPTFRJTUUyVEhSCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9TWU1CT0xUSU1FMlRIUiAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfU1lNQk9MVElNRTJUSFIgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX0RlYnVnQ29udHJvbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MWZmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0RFQlVHQ09OVFJPTCAweDQwMDkwMzkwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfREVCVUdDT05UUk9MIDB4MWZmCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfZGJnX3J4X2lucHV0CisgKgorICogSWYgc2V0IHRvICcxJywgdGhlIFJ4IGRlYnVnIGludGVyZmFjZSB3aWxsIGJlIHNlbGVjdGVkIGFzIGlucHV0IGZvciB0aGUgUnggcGlwZWxpbmUgcmF0aGVyIHRoYW4gdGhlIERQSFkgaW50ZXJmYWNlIHNpZ25hbHMuCisgKiBOb3RlIHRoYXQgaW4gdGhpcyBtb2RlLCBEQkdfUlhfREFUQVszOjBdIGFuZCBEQkdfUlhfU09GIGFyZSBzb3VyY2VkIGJ5IGFub3RoZXIgc291cmNlIChvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgTE1BQykgd2hpbGUgdGhlIG90aGVyIFJ4IGlucHV0cyAoQ0NBX1NUQVQsIExRSVs3OjBdIGFuZCBFRF9TVEFUWzc6MF0pIGFyZSBmb3JjZWQgdG8gMHgwMC4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9ERUJVR0NPTlRST0wKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19SWF9JTlBVVCAweDEwMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX1JYX0lOUFVUIDgKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9EQkdfUlhfSU5QVVQgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX2RiZ19jb250cm9sCisgKgorICogQ29udHJvbCBvZiB0aGUgZGVidWcgaW50ZXJmYWNlOgorICoKKyAqIGRiZ19jb250cm9sIDB4MDAgTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIDB4MDEgTGVnYWN5IGRlYnVnIG1vZGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgPSBlZF9yZXF1ZXN0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ID0gZ2VuX2lycQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSA9IHJ4X3NvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCA9IHJ4X2VvZgorICoKKyAqIGRiZ19jb250cm9sIDB4MDIgQ2xvY2tzIGFuZCByZXNldAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNy0zID0gIjAwMDAwIgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gbHBfY2xrIGRpdmlkZSBieSAyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBtYWNfY2xrIGRpdmlkZSBieSAyCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBoY2xrIGRpdmlkZWQgYnkgMgorICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4MDIgLSAweDBmIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDEwIC0gMHgxZiBEZWJ1ZyByeCBwaXBlbGluZQorICoKKyAqICAgICAgMHgxMCAgICBSeCBwaHkgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZW5hYmxlIHRvd2FyZHMgdGhlIHJ4X3BpcGVsaW5lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSByeF9zb2YgZnJvbSBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUtMiA9IHJ4X2RhdGEgZnJvbSBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2VvZiB0byBwaHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZiBldmVudCBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqCisgKiAgICAgIDB4MTEgICAgUnggc29mIGFuZCBsZW5ndGgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X3NvZgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNi0wID0gcnhfbWFjX2xlbmd0aCBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqCisgKiAgICAgIDB4MTIgICAgUnggbWFjIHRpbWluZyBvdXRwdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IEVuYWJsZSBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IFNvcCAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IEVvcCAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IENyYyAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IEVyciAgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IERyb3AgICBmcm9tIHJ4X21hY190aW1pbmcgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IEZvcndhcmQgZnJvbSByeF9tYWNfdGltaW5nIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqCisgKiAgICAgIDB4MTMgICAgUnggbWFjIGZyYW1lIHBhcnNlciBvdXRwdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IEVuYWJsZSBmcm9tIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IFNvcCAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBFb3AgICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gQ3JjICAgIGZyb20gIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IEVyciAgICBmcm9tICBtYWNfZnJhbWVfcGFyc2VyIGJsb2NrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBEcm9wICAgZnJvbSAgbWFjX2ZyYW1lX3BhcnNlciBibG9jaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gRm9yd2FyZCBmcm9tIG1hY19mcmFtZV9wYXJzZXIgYmxvY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHJ4X3NvZgorICoKKyAqICAgICAgMHgxNCAgICBSeCBzdGF0dXMgdG8gVW1hYworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZnJhbWVfc3RhdF91bWFjLmNyYzE2X2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMucmVzX2ZybV90eXBlX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMucmVzX2ZybV92ZXJzaW9uX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuZHBhbmlkX2Vycm9yCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAzICAgPSByeF9mcmFtZV9zdGF0X3VtYWMuZGFkZHJfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5zcGFuaWRfZXJyb3IKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IHJ4X2ZyYW1lX3N0YXRfdW1hYy5pc3Bhbl9jb29yZF9lcnJvcgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfc29mCisgKgorICogICAgICAweDE1ICAgIFJ4IHN0YXR1cyB0byBsbWFjCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSByeF9mcmFtZV9zdGF0LnBhY2tldF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gcnhfZnJhbWVfc3RhdC5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gcnhfZnJhbWVfc3RhdC5yeF9lb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNCAgID0gcnhfZnJhbWVfc3RhdC53YWtldXBfZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMtMSA9IHJ4X2ZyYW1lX3N0YXQuZnJhbWVfdHlwZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gcnhfZnJhbWVfc3RhdC5yeF9zcW5yX3ZhbGlkCisgKgorICogICAgICAweDE2ICAgIFJ4IGJ1ZmZlciBjb250cm9sCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3LTQgPSBwcm92X2Zyb21fc3dpby5yeF9yZWFkX2J1Zl9wdHIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMtMCA9IHN0YXRfdG9fc3dpby5yeF93cml0ZV9idWZfcHRyCisgKgorICogICAgICAweDE3ICAgIFJ4IGludGVycnVwdHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHN0YXRfdG9fc3dpby5yeF9idWZfYXZhaWxfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gc3RhdF90b19zd2lvLnJ4X2J1Zl9mdWxsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSBzdGF0X3RvX3N3aW8ucnhfYnVmX292ZXJmbG93X2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDQgICA9IHN0YXRfdG9fc3dpby5yeF9zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gc3RhdF90b19zd2lvLnJ4Ynl0ZV9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSByeF9mcmFtZV9jdHJsLnJ4X2VuYWJsZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gcnhfZW9mCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByeF9zb2YKKyAqCisgKiAgICAgIDB4MTggICAgZGlhZ25vc2VfYnVzIGJpdCA3LTMgPQorICogICAgICAgICAgICAgICAgICAgICAgUHJ0IHN0YXRlbWVudHMgbWFjIGZyYW1lIHBhcnNlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgMCBSZXNldAorICogICAgICAgICAgICAgICAgICAgICAgMSBNdWx0aXB1cnBvc2UgZnJhbWUgd2l0aCBubyBkcGFuaWQgYW5kIG1hY0ltcGxpY2l0QnJvYWRjYXN0IGlzIGZhbHNlIGFuZCBub3QgcGFuIGNvb29yZGluYXRvciBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyIE11bHRpcHVycG9zZSBmcmFtZSB3aXRoIG5vIGRlc3QgYWRkcmVzcyBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMgUlggdW5zdXBwb3J0ZWQgZnJhbWUgdHlwZSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgNCBSWCBub24gQmVhY29uIGZyYW1lIGRldGVjdGVkIGFuZCBkcm9wcGVkIGluIFJ4QmVhY29uT25seSBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICA1IFJYIGZyYW1lIHBhc3NlZCBkdWUgdG8gbWFjQWx3YXlzUGFzc0ZybVR5cGUgc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA2IFJYIHVuc3VwcG9ydGVkIGRhX21vZGUgPSAwMSBmb3IgZnJhbWVfdmVyc2lvbiAweDAtIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA3IFJYIHVuc3VwcG9ydGVkIHNhX21vZGUgPSAwMSBmb3IgZnJhbWVfdmVyc2lvbiAweDAtIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICA4IERhdGEgb3IgY29tbWFuZCBmcmFtZSB3aXRoIG5vIGRwYW5pZCBhbmQgbWFjSW1wbGljaXRCcm9hZGNhc3QgaXMgZmFsc2UgYW5kIG5vdCBwYW4gY29vb3JkaW5hdG9yIGRyb3BwZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDkgRGF0YSBvciBjb21tYW5kIGZyYW1lIHdpdGggbm8gZGVzdCBhZGRyZXNzIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTAgUlggdW5zdXBwb3J0ZWQgZnJhbWVfdmVyc2lvbiBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgMTEgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZHBhbmlkIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTIgTXVsdGlwdXJwb3NlIGZyYW1lIHdpdGggbm8gZGVzdCBhZGRyZXNzIGFuZCBtYWNJbXBsaWNpdEJyb2FkY2FzdCBpcyBmYWxzZSBhbmQgbm90IHBhbiBjb29vcmRpbmF0b3IgZHJvcHBlZAorICogICAgICAgICAgICAgICAgICAgICAgMTMgUlggdW5zdXBwb3J0ZWQgZnJhbWVfdmVyc2lvbiBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgICAgICAgMTQgUlggRGVzdGluYXRpb24gUEFOIElkIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTUgUlggRGVzdGluYXRpb24gYWRkcmVzcyAoMSBieXRlKSAgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNiBSWCBEZXN0aW5hdGlvbiBhZGRyZXNzICgyIGJ5dGUpICBjaGVjayBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE3IFJYIERlc3RpbmF0aW9uIGFkZHJlc3MgKDggYnl0ZSkgIGNoZWNrIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTggUlggU291cmNlIFBBTiBJZCBjaGVjayBmb3IgQmVhY29uIGZyYW1lcyBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDE5IFJYIFNvdXJjZSBQQU4gSWQgY2hlY2sgZmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyMCBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIHNlY3VyaXR5IGNvbnRyb2wgd29yZCByZWNlaXZlZAorICogICAgICAgICAgICAgICAgICAgICAgMjEgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciB1bnN1cHBvcnRlZF9sZWdhY3kgcmVjZWl2ZWQgZnJhbWVfdmVyc2lvbiAwMAorICogICAgICAgICAgICAgICAgICAgICAgMjIgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciB1bnN1cHBvcnRlZF9sZWdhY3kgc2VjdXJpdHkgZnJhbWVfdmVyc2lvbiAxMQorICogICAgICAgICAgICAgICAgICAgICAgMjMgQXV4aWxpYXJ5IFNlY3VyaXR5IEhlYWRlciBmcmFtZSBjb3VudGVyIGZpZWxkIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyNCBBdXhpbGlhcnkgU2VjdXJpdHkgSGVhZGVyIEtleSBpZGVudGlmaWVyIGZpZWxkIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAyNSBFcnJvcmVkIERlc3RpbmF0aW9uICBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBVbWFjLCBub3QgaW5kaWNhdGVkIHRvd2FyZHMgbG1hYyBjb250cm9sbGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAyNiBNYWNBbHdheXNQYXNzV2FrZVVwRnJhbWVzID0gMSwgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gVW1hYywgbm90IGluZGljYXRlZCB0b3dhcmRzIGxtYWMgY29udHJvbGxlcgorICogICAgICAgICAgICAgICAgICAgICAgMjcgV2FrZXVwIGZyYW1lIGZvdW5kIHNlbmQgdG8gbG1hYyBjb250cm9sbGVyIGFuZCBVbWFjCisgKiAgICAgICAgICAgICAgICAgICAgICAyOCBXYWtldXAgZnJhbWUgZm91bmQgc2VuZCB0byBsbWFjIGNvbnRyb2xsZXIsIGRyb3BwZWQgdG93YXJkcyBVbWFjCisgKiAgICAgICAgICAgICAgICAgICAgICAyOSBDb21tYW5kIGZyYW1lIHdpdGggZGF0YV9yZXF1ZXN0IGNvbW1hbmQgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIDMwIENvb3JkaW5hdG9yIHJlYWxpZ25tZW50IGZyYW1lIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAzMSBOb3QgVXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0wID0gZnJhbWVfdHlwZQorICoKKyAqICAgICAgMHgxOSAgICBkaWFnbm9zZV9idXMgYml0IDctNCA9CisgKiAgICAgICAgICAgICAgICAgICAgICBGcmFtZXN0YXRlcyBtYWMgZnJhbWUgcGFyc2VyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIGlkbGVfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDEgZnJfY3RybF9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMiBmcl9jdHJsX2xvbmdfc3RhdGUKKyAqICAgICAgICAgICAgICAgICAgICAgIDMgc2VxX25yX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA0IGRlc3RfcGFuX2lkX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA1IGRlc3RfYWRkcl9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgNiBzcmNfcGFuX2lkX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA3IHNyY19hZGRyX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA4IGF1eF9zZWNfaGRyX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICA5IGhkcl9pZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMTAgcHlsZF9pZV9zdGF0ZQorICogICAgICAgICAgICAgICAgICAgICAgMTEgaWdub3JlX3N0YXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAxMi0xNiAgTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDMgICA9IHJ4X21hY19zb2ZfZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0wID0gZnJhbWVfdHlwZQorICoKKyAqICAgICAgMHgxYSAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGV4ZWN1dGVfc2FfbWF0Y2gKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHNhX21hdGNoX2ZvdW5kICgxIGNsayBkZWxheWVkKQorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gcHJvdl9mcm9tX3N3aW8uRlBfb3ZlcnJpZGUKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGZwX21hY19kcmR5CisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBmcF9tYWNfbGRfc3RyYgorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gcnhfZnJhbWVfc3RhdF9sbWFjLnJ4X3NhX21vZGUKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IHJ4X21hY19zb2ZfZQorICoKKyAqICAgICAgMHgxYiAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGV4ZWN1dGVfc2FfbWF0Y2gKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYtMiA9IGZwX21hY19hZGRyX2NudAorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gZnBfYml0X2RlY2lkZWQKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IHByb3ZfZnJvbV9zd2lvLkFkZHJfdGFiX21hdGNoX0ZQX3ZhbHVlCisgKgorICogICAgICAweDFjICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gZXhlY3V0ZV9zYV9tYXRjaAorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gc2FfbWF0Y2hfZm91bmQgKDEgY2xrIGRlbGF5ZWQpCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBmcF9tYWNfcmRhdGEoNjgpOiBTaG9ydF9Mb25nTm90CisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0LTEgPSBmcF9tYWNfcmRhdGEoNjcgRE9XTlRPIDY0KTogU0EgdmFsaWQgYml0cworICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gZnBfbWFjX3JkYXRhKDApOiBsZWFzdCBzaWduaWZpY2FudCBiaXQgZnJvbSBGUFBSCisgKgorICogICAgICAweDFkICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gZXhlY3V0ZV9zYV9tYXRjaAorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gc2FfbWF0Y2hfZm91bmQgKDEgY2xrIGRlbGF5ZWQpCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1LTAgPSBmcF9tYWNfcmRhdGEoNSBET1dOVE8gMCk6IDYgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBmcm9tIEZQUFIKKyAqCisgKiAgICAgICAgIDB4MWUtMHgxZiAgICBOb3QgVXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNy0wID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4MjAgLSAweDJmIERlYnVnIHR4IHBpcGVsaW5lCisgKiAgICAgIDB4MjAgICAgVG9wIGFuZCBib3R0b20gaW50ZXJmYWNlcyB0eCBkYXRhcGF0aAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfbWFjX2xkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IHR4X21hY19kcmR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gc3ltYm9sX2VuYQorICoKKyAqICAgICAgMHgyMSAgICBDb250cm9sIHNpZ25hbHMgZm9yIHR4IGRhdGFwYXRoCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBUeFRyYW5zcGFyZW50TW9kZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4LkNSQzE2X2VuYQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX2FjaworICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMyAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl93dQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0xID0gY3RybF9sbWFjX3RvX3R4LnR4X2ZyYW1lX25tYnIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHR4X3ZhbGlkCisgKgorICogICAgICAweDIyICAgIENvbnRyb2wgc2lnbmFscyBmb3Igd2FrZXVwIGZyYW1lcworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1LTEgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1X1JaKDQgRE9XTlRPIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfcnpfemVybworICoKKyAqICAgICAgMHgyMyAgICBEYXRhIHNpZ25hbHMgZm9yIHdha2V1cCBmcmFtZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA2ICAgPSBjdHJsX2xtYWNfdG9fdHguZ2VuX3d1CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA1ICAgPSB0eF92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0xID0gdHhfZGF0YQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gY3RybF90eF90b19sbWFjLnR4X3J6X3plcm8KKyAqCisgKiAgICAgIDB4MjQgICAgRGF0YSBhbmQgY29udHJvbCBhY2sgZnJhbWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGN0cmxfbG1hY190b190eC50eF9zdGFydAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbl9hY2sKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHR4X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTEgPSB0eF9kYXRhCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBzeW1ib2xfZW5hCisgKgorICogICAgICAweDI1ICAgIEZQIGJpdCBkZWNpc2lvbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gZnBfYml0X2RlY2lkZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYgICA9IGV4ZWN1dGVfc2FfbWF0Y2gKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC5yeF9mcF9kZWNpZGVkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTMgPSBjdHJsX2xtYWNfdG9fdHgucnhfc2FfbW9kZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMiAgID0gc3dpb190b19sbWFjX3R4LkZQX292ZXJyaWRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSBzd2lvX3RvX2xtYWNfdHguRlBfZm9yY2VfdmFsdWUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IHR4X3ZhbGlkCisgKgorICogICAgICAweDJhICAgIEV2ZW50IGNvdW50ZXIsIDggbGVhc3Qgc2lnbmlmaWNhbnQgYml0cywgc3luY2hyb25pemVkIHRvIG1hY19jbGsKKyAqCisgKiAgICAgICAgIDB4MmIgICAgc3ltYm9sIGNvdW50ZXIsIDggZm9yZSBtb3N0IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgKDE1IGRvd250byA4KQorICoKKyAqICAgICAgICAgMHgyYyAgICBzeW1ib2wgY291bnRlciwgOCBsZWFzdCBzaWduaWZpY2FudCBiaXRzICg3IGRvd250byAwKQorICoKKyAqCisgKiBkYmdfY29udHJvbCBpbiByYW5nZSAweDJlIC0gMHgzZiBEZWJ1ZyBsbWFjX2NvbnRyb2xsZXIKKyAqICAgICAgMHgyZCAgICBOb3QgVXNlZAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNy0wID0gYWxsICcwJworICoKKyAqICAgICAgICAgMHgyMyAgICBQaHlfdHJhbnNhY3Rpb24gbGFzdCBtaW51dGUgY2hhbmdlcyBkdWUgdG8gY29ybmVyIGNhc2VzCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfdHJhbnNhY3Rpb24KKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHN5bWJvbF90aW1lcl9wcmVzZXQKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHN5bWJvbF90aW1lcl9hbG1vc3RfcmVhZHkKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGNzbF9pZGxlX3J4CisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBjc2xfZGF0YV9yeAorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMiAgID0gcnhfZW5hYmxlX29zX2NhcHQKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IHJ4X2VuYWJsZV9vc19jYXB0X2RvbmUKKyAqICAgICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IHBoeV9lbl9yZWFkeQorICoKKyAqICAgICAgICAgMHgyZiAgICBQaHkgY29udHJvbCBpbiBjb21iaW5hdGlvbiB3aXRoIGFyYml0ZXIgc3RhdGUgbWFjaGluZQorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X3RyYW5zYWN0aW9uCisgKiAgICAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhcmJfcGh5X3RyYW5zX3Jlc19zdG9yZQorICogICAgICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNS0wID0gYXJiX2RlYnVnX2luZm8KKyAqCisgKiAgICAgIDB4MzAgICAgUGh5IHNpZ25hbHMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNiAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDUgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA0LTEgPSBwaHlhdHRyKDMgZG93bnRvIDApCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSBlZF9yZXF1ZXN0CisgKgorICogICAgICAweDMxICAgIFBoeSBlbmFibGUgYW5kIGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IHBydCBzdGF0ZW1lbnRzIGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvCisgKiAgICAgICAgICAgICAgICAgICAgICAwIFJlc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAxIE1BSU5fU1RBVEVfSURMRSBUWF9BQ0tub3dsZWRnZW1lbnQgZnJhbWUgc2tpcCBDU01BX0NBCisgKiAgICAgICAgICAgICAgICAgICAgICAyIE1BSU5fU1RBVEVfSURMRSA6IFdha2UtVXAgZnJhbWUgcmVzaWRlcyBpbiBidWZmZXIgbm8KKyAqICAgICAgICAgICAgICAgICAgICAgIDMgTUFJTl9TVEFURV9JRExFIDogVFggZnJhbWUgaW4gVFNDSCBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICA0IE1BSU5fU1RBVEVfSURMRSA6IFRYIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICA1IE1BSU5fU1RBVEVfSURMRSA6IGdvdG8gU0lOR0xFX0NDQQorICogICAgICAgICAgICAgICAgICAgICAgNiBNQUlOX1NUQVRFX0lETEUgOiBnb3RvIEVuZXJneSBEZXRlY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDcgTUFJTl9TVEFURV9JRExFIDogZ290byBSWAorICogICAgICAgICAgICAgICAgICAgICAgOCBNQUlOX1NUQVRFX0lETEUgZGUtYXNzZXJ0IHBoeV9lbiB3YWl0IGZvcgorICogICAgICAgICAgICAgICAgICAgICAgOSBNQUlOX1NUQVRFX0lETEUgU3RhcnQgcGh5X2VuIGFuZCBhc3NlcnQgcGh5X2VuIHdhaXQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDEwIE1BSU5fU1RBVEVfQ1NNQV9DQV9XQUlUX0ZPUl9NRVRBREFUQSAgZnJhbWVuciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMSBNQUlOX1NUQVRFX0NTTUFfQ0EgZnJhbWVuciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAxMiBNQUlOX1NUQVRFX0NTTUFfQ0Egc3RhcnQgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMTQgTUFJTl9TVEFURV9DU01BX0NBIHNraXAgQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgMTUgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgRmFpbGVkIGZvciBDU0wgbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMTYgTUFJTl9TVEFURV9XQUlUX0ZPUl9DU01BX0NBIGNzbWFfY2EgRmFpbGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAxNyBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0EgY3NtYV9jYSBTdWNjZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICAxOCBNQUlOX1NUQVRFX1NJTkdMRV9DQ0EgY2NhIGZhaWxlZAorICogICAgICAgICAgICAgICAgICAgICAgMTkgTUFJTl9TVEFURV9TSU5HTEVfQ0NBIGNjYSBvaworICogICAgICAgICAgICAgICAgICAgICAgMjAgTUFJTl9TVEFURV9XQUlUX0FDS19ERUxBWSB3YWl0IHRpbWUgZWxhcHNlZAorICogICAgICAgICAgICAgICAgICAgICAgMjEgTUFJTl9TVEFURV9XQUlUIEFDS19ERUxBWSA6IFNlbmQgQWNrIGluIFRTQ0ggbW9kZQorICogICAgICAgICAgICAgICAgICAgICAgMjIgTUFJTl9TVEFURV9XQUlUIEFDS19ERUxBWSA6IEFjayBub3Qgc2NoZWR1bGVkIGluIHRpbWUgaW4gVFNDSCBtb2RlCisgKiAgICAgICAgICAgICAgICAgICAgICAyMyBNQUlOX1NUQVRFX1RTQ0hfVFhfRlJBTUUgbWFjVFNSeFR4IHRpbWUgZWxhcHNlZAorICogICAgICAgICAgICAgICAgICAgICAgMjQgTUFJTl9TVEFURV9UWF9GUkFNRSBpdCBpcyBDU0wgbW9kZSwgc3RhcnQgdGhlIFdVIHNlcSBmb3IgbWFjV1VQZXJpb2QKKyAqICAgICAgICAgICAgICAgICAgICAgIDI1IE1BSU5fU1RBVEVfVFhfRlJBTUUxCisgKiAgICAgICAgICAgICAgICAgICAgICAyNiBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cxIGV4aXQsIHdhaXRlZCBmb3IgOgorICogICAgICAgICAgICAgICAgICAgICAgMjcgTUFJTl9TVEFURV9UWF9GUkFNRV9XMiBleGl0LCB3YWl0ZWQgZm9yIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDI4IE1BSU5fU1RBVEVfVFhfV0FJVF9MQVNUX1NZTUJPTCBleGl0CisgKiAgICAgICAgICAgICAgICAgICAgICAyOSBNQUlOX1NUQVRFX1RYX1JBTVBET1dOX1cgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAzMCBNQUlOX1NUQVRFX1RYX1BIWVRSWFdBSVQgZXhpdCwgd2FpdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAzMSBNQUlOX1NUQVRFX0dFTl9JRlMgLCBBY2sgd2l0aCBmcmFtZSBwZW5kaW5nIHJlY2VpdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAzMiBNQUlOX1NUQVRFX0dFTl9JRlMgLCBBY2sgcmVxdWVzdGVkIGJ1dCBEaXNSWGFja1JlY2VpdmVkY2EgaXMgc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICAzMyBNQUlOX1NUQVRFX0dFTl9JRlMgLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYW4gSUZTLCBzd2l0Y2ggdGhlIHJ4LW9uIGZvciBhbiBBQ0sKKyAqICAgICAgICAgICAgICAgICAgICAgIDM0IE1BSU5fU1RBVEVfR0VOX0lGUyAsIGdlbmVyYXRpbmcgYW4gU0lGUyAoU2hvcnQgSW50ZXIgRnJhbWUgU3BhY2UpCisgKiAgICAgICAgICAgICAgICAgICAgICAzNSBNQUlOX1NUQVRFX0dFTl9JRlMgLCBnZW5lcmF0aW5nIGFuIExJRlMgKExvbmcgSW50ZXIgRnJhbWUgU3BhY2UpCisgKiAgICAgICAgICAgICAgICAgICAgICAzNiBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGluIENTTCBtb2RlLCAnY3NscGVyaW9kX3RpbWVyX3JlYWR5JyBpcyByZWFkeSBzZW50IHRoZSBkYXRhIGZyYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAzNyBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGluIENTTCBtb2RlLCAnUmVuZGV6dm91cyB6ZXJvIHRpbWUgbm90IHlldCB0cmFuc21pdHRlZCBzZW50IGFub3RoZXIgV1UgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgIDM4IE1BSU5fU1RBVEVfR0VOX0lGU19GSU5JU0ggZXhpdCwgY29ycmVjdGVkIGZvciA6CisgKiAgICAgICAgICAgICAgICAgICAgICAzOSBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNIIGluIENTTCBtb2RlLCByeF9yZXN1bWVfYWZ0ZXJfdHggaXMgc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICA0MCBNQUlOX1NUQVRFX1NFTlRfU1RBVFVTIENTTE1vZGUgd3Vfc2VxdWVuY2VfZG9uZV9mbGFnIDoKKyAqICAgICAgICAgICAgICAgICAgICAgIDQxIE1BSU5fU1RBVEVfQUREX0RFTEFZIGV4aXQsIGdvdG8gUlggZm9yIGZyYW1lIHBlbmRpbmcgdGltZQorICogICAgICAgICAgICAgICAgICAgICAgNDIgTUFJTl9TVEFURV9BRERfREVMQVkgZXhpdCwgZ290byBJRExFCisgKiAgICAgICAgICAgICAgICAgICAgICA0MyBNQUlOX1NUQVRFX1JYIHN3aXRjaCB0aGUgUlggZnJvbSBvZmYgdG8gb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDQ0IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUQVJUIHdhaXRlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ1IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgc3RhcnQgdGhlIE1hY0Fja0R1cmF0aW9uIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA0NiBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIHN0YXJ0IHRoZSBhY2sgd2FpdCB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNDcgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWSBOT1JNQUwgbW9kZSA6IHN0YXJ0IHJ4X2R1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICA0OCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIFRTQ0ggbW9kZSA6IHN0YXJ0IG1hY1RTUnhXYWl0IChtYWNUU1J4V2FpdCkgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDQ5IE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWExBVEVOQ1kgQ1NMIG1vZGUgOiBzdGFydCB0aGUgY3NsX3J4X2R1cmF0aW9uIChtYWNDU0xzYW1wbGVQZXJpb2QpIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA1MCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhMQVRFTkNZIENTTCBtb2RlIDogc3RhcnQgdGhlIGNzbF9yeF9kdXJhdGlvbiAobWFjQ1NMZGF0YVBlcmlvZCkgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIDUxIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMSBhY2t3YWl0X3RpbWVyX3JlYWR5IG9yIGFja19yZWNlaXZlZF9pbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIDUyIE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgMiBub3JtYWxfbW9kZS4gQUNLIHdpdGggRlAgYml0IHNldCwgc3RhcnQgZnJhbWUgcGVuZGluZyB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNTQgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA0IFJ4QWx3YXlzT24gaXMgc2V0IHRvIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIDU1IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQgNSBUU0NIIG1vZGUgdmFsaWQgZnJhbWUgcnhlZAorICogICAgICAgICAgICAgICAgICAgICAgNTYgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA2IFRTQ0ggbW9kZSBtYWNUU1J4d2FpdCBleHBpcmVkCisgKiAgICAgICAgICAgICAgICAgICAgICA1NyBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDcgbWFjQ1NMc2FtcGxlUGVyaW9kIHRpbWVyIHJlYWR5CisgKiAgICAgICAgICAgICAgICAgICAgICA1OCBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDggY3NsX21vZGUuIERhdGEgZnJhbWUgcmVjaWV2ZWQgd2l0aCBGUCBiaXQgc2V0LCBpbmNyZW1lbnQgUlggZHVyYXRpb24gdGltZQorICogICAgICAgICAgICAgICAgICAgICAgNTkgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCA5IENTTCBtb2RlIDogUmVjZWl2ZWQgd3UgZnJhbWUgaW4gZGF0YSBsaXN0ZW5pbmcgcGVyaW9kIHJlc3RhcnQgbWFjQ1NMZGF0YVBlcmlvZCB0aW1lcgorICogICAgICAgICAgICAgICAgICAgICAgNjAgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxMCBjc2xfcnhfZHVyYXRpb25fcmVhZHkgb3IgY3NsIGRhdGEgZnJhbWUgcmVjZWl2ZWQ6CisgKiAgICAgICAgICAgICAgICAgICAgICA2MSBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDExIG5vcm1hbF9tb2RlLiBGUCBiaXQgaXMgc2V0LCBzdGFydCBmcmFtZSBwZW5kaW5nIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgICAgICA2MiBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEyIG5vcm1hbCBtb2RlIHJ4X2R1cmF0aW9uX3RpbWVyX3JlYWR5IGFuZCBmcmFtZV9wZW5kaW5nX3RpbWVyX3JlYWR5CisgKiAgICAgICAgICAgICAgICAgICAgICA2MyBNQUlOX1NUQVRFX1JYX0NIS19FWFBJUkVEIDEzIGFja25vd2xlZGdlIGZyYW1lIHJlcXVlc3RlZAorICogICAgICAgICAgICAgICAgICAgICAgNjQgTUFJTl9TVEFURV9SWF9DSEtfRVhQSVJFRCAxNCBJbnRlcnJ1cHQgdG8gc2VudCBhIGZyYW1lLiBmb3VuZF90eF9wYWNrZXQKKyAqICAgICAgICAgICAgICAgICAgICAgIDY1IE1BSU5fU1RBVEVfQ1NMX1JYX0lETEVfRU5EIFJaIHRpbWUgaXMgZmFyIGF3YXksIHN3aXRjaCByZWNlaXZlciBPZmYgYW5kIHdhaXQgZm9yIGNzbF9yeF9yel90aW1lIGJlZm9yZSBzd2l0Y2hpbmcgb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDY2IE1BSU5fU1RBVEVfQ1NMX1JYX0lETEVfRU5EIFJaIHRpbWUgaXMgbm90IHNvIGZhciBhd2F5LCBrZWVwIHJlY2VpdmVyIE9uIGFuZCB3YWl0IGZvcgorICogICAgICAgICAgICAgICAgICAgICAgNjcgTUFJTl9TVEFURV9SWF9TVEFSVF9QSFlSWFNUT1AgYWNrIHdpdGggZnAgcmVjZWl2ZWQga2VlcCByeCBvbgorICogICAgICAgICAgICAgICAgICAgICAgNjggTUFJTl9TVEFURV9SWF9TVEFSVF9QSFlSWFNUT1Agc3dpdGNoIHRoZSBSWCBmcm9tIG9uIHRvIG9mZgorICogICAgICAgICAgICAgICAgICAgICAgNjkgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RPUCBhY2tub3dsZWRnZSBkb25lIDogc3dpdGNoIGJhY2sgdG8gZmluaXNoIFRYCisgKiAgICAgICAgICAgICAgICAgICAgICA3MCBNQUlOX1NUQVRFX1JYX1dBSVRfUEhZUlhTVE9QIHN3aXRjaCB0aGUgUlggb2ZmCisgKiAgICAgICAgICAgICAgICAgICAgICA3MSBNQUlOX1NUQVRFX0VEIHN3aXRjaCB0aGUgUlggZnJvbSBvZmYgdG8gb24KKyAqICAgICAgICAgICAgICAgICAgICAgIDcyIE1BSU5fU1RBVEVfRURfV0FJVF9QSFlSWFNUQVJUIHdhaXRlZCBmb3IgcGh5UnhTdGFydHVwCisgKiAgICAgICAgICAgICAgICAgICAgICA3MyBNQUlOX1NUQVRFX0VEX1dBSVRfRURTQ0FORFVSQVRJT04gd2FpdGVkIGZvciBFZFNjYW5EdXJhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgNzQgTUFJTl9TVEFURV9FRF9XQUlUX1BIWVJYU1RPUCBlbmQgb2YgRW5lcmd5IERldGVjdGlvbiwgZ290IElETEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIDc1IE1BSU5fU1RBVEVfSURMRSwgdXNlX2xlZ2FjeV9waHlfZW4gPSAnMCcsIHJ4X2VuYWJsZV9vc19jYXB0IGRldGVjdGVkIGFuZCBub3QgeWV0IDEgdXMgMTAxIG9mIFBIWV9FTiBkb25lLgorICogICAgICAgICAgICAgICAgICAgICAgICAgNzYgLSAxMjcgTm90IHVzZWQKKyAqCisgKiAgICAgIDB4MzIgICAgUlggZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvIHNlZSBkYmdfY29udHJvbCA9IDB4MzEKKyAqCisgKiAgICAgIDB4MzMgICAgVFggZW5hYmxlIGFuZCBkZXRhaWxlZCBzdGF0ZW1hY2hpbmUgaW5mbworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDYtMCA9IGRldGFpbGVkIHN0YXRlbWFjaGluZSBpbmZvIHNlZSBkYmdfY29udHJvbCA9IDB4MzEKKyAqCisgKiAgICAgIDB4MzQgICAgUGh5IGVuYWJsZSwgVFggZW5hYmxlIGFuZCBSeCBlbmFibGUgYW5kIHN0YXRlIG1hY2hpbmUgc3RhdGVzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgNC0wID0gU3RhdGUgbWFjaGluZSBzdGF0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAxICBNQUlOX1NUQVRFX0lETEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAyICBNQUlOX1NUQVRFX0NTTUFfQ0FfV0FJVF9GT1JfTUVUQURBVEEKKyAqICAgICAgICAgICAgICAgICAgICAgICAzICBNQUlOX1NUQVRFX0NTTUFfQ0EKKyAqICAgICAgICAgICAgICAgICAgICAgICA0ICBNQUlOX1NUQVRFX1dBSVRfRk9SX0NTTUFfQ0FfMAorICogICAgICAgICAgICAgICAgICAgICAgIDUgIE1BSU5fU1RBVEVfV0FJVF9GT1JfQ1NNQV9DQQorICogICAgICAgICAgICAgICAgICAgICAgIDYgIE1BSU5fU1RBVEVfU0lOR0xFX0NDQQorICogICAgICAgICAgICAgICAgICAgICAgIDcgIE1BSU5fU1RBVEVfV0FJVF9BQ0tfREVMQVkKKyAqICAgICAgICAgICAgICAgICAgICAgICA4ICBNQUlOX1NUQVRFX1RTQ0hfVFhfRlJBTUUKKyAqICAgICAgICAgICAgICAgICAgICAgICA5ICBNQUlOX1NUQVRFX1RYX0ZSQU1FCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTAgTUFJTl9TVEFURV9UWF9GUkFNRTEKKyAqICAgICAgICAgICAgICAgICAgICAgICAxMSBNQUlOX1NUQVRFX1RYX0ZSQU1FX1cxCisgKiAgICAgICAgICAgICAgICAgICAgICAgMTIgTUFJTl9TVEFURV9UWF9GUkFNRV9XMgorICogICAgICAgICAgICAgICAgICAgICAgIDEzIE1BSU5fU1RBVEVfVFhfV0FJVF9MQVNUX1NZTUJPTAorICogICAgICAgICAgICAgICAgICAgICAgIDE0IE1BSU5fU1RBVEVfVFhfUkFNUERPV04KKyAqICAgICAgICAgICAgICAgICAgICAgICAxNSBNQUlOX1NUQVRFX1RYX1JBTVBET1dOX1cKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNiBNQUlOX1NUQVRFX1RYX1BIWVRSWFdBSVQKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNyBNQUlOX1NUQVRFX0dFTl9JRlMKKyAqICAgICAgICAgICAgICAgICAgICAgICAxOCBNQUlOX1NUQVRFX0dFTl9JRlNfRklOSVNICisgKiAgICAgICAgICAgICAgICAgICAgICAgMTkgTUFJTl9TVEFURV9TRU5UX1NUQVRVUworICogICAgICAgICAgICAgICAgICAgICAgIDIwIE1BSU5fU1RBVEVfQUREX0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjEgTUFJTl9TVEFURV9UU0NIX1JYX0FDS0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjIgTUFJTl9TVEFURV9SWAorICogICAgICAgICAgICAgICAgICAgICAgIDIzIE1BSU5fU1RBVEVfUlhfV0FJVF9QSFlSWFNUQVJUCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjQgTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYTEFURU5DWQorICogICAgICAgICAgICAgICAgICAgICAgIDI1IE1BSU5fU1RBVEVfUlhfQ0hLX0VYUElSRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICAyNiBNQUlOX1NUQVRFX0NTTF9SWF9JRExFX0VORAorICogICAgICAgICAgICAgICAgICAgICAgIDI3IE1BSU5fU1RBVEVfUlhfU1RBUlRfUEhZUlhTVE9QCisgKiAgICAgICAgICAgICAgICAgICAgICAgMjggTUFJTl9TVEFURV9SWF9XQUlUX1BIWVJYU1RPUAorICogICAgICAgICAgICAgICAgICAgICAgIDI5IE1BSU5fU1RBVEVfRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICAzMCBNQUlOX1NUQVRFX0VEX1dBSVRfUEhZUlhTVEFSVAorICogICAgICAgICAgICAgICAgICAgICAgIDMxIE1BSU5fU1RBVEVfRURfV0FJVF9FRFNDQU5EVVJBVElPTgorICoKKyAqICAgICAgMHgzNSAgICBsbWFjIGNvbnRyb2xsZXIgdG8gdHggaW50ZXJmYWNlIHdpdGggd2FrZXVwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcnhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGN0cmxfbG1hY190b190eC5nZW5fd3UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfbGFzdF9zeW1ib2wKKyAqCisgKiAgICAgIDB4MzYgICAgbG1hYyBjb250cm9sbGVyIHRvIHR4IGludGVyZmFjZSB3aXRoIGZyYW1lIHBlbmRpbmcKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3RybF9sbWFjX3RvX3R4Lmdlbi5mcF9iaXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGN0cmxfbG1hY190b190eC5nZW5fYWNrCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzLTIgPSBjdHJsX2xtYWNfdG9fdHgudHhfZnJhbWVfbm1icgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gY3RybF9sbWFjX3RvX3R4LnR4X3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBjdHJsX3R4X3RvX2xtYWMudHhfbGFzdF9zeW1ib2wKKyAqCisgKiAgICAgIDB4MzcgICAgcnggcGlwZXBsaW5lIHRvIGxtYWMgY29udHJvbGxlciBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3RybF9yeF90b19sbWFjLnJ4X3NvZl9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBjdHJsX3J4X3RvX2xtYWMucnhfZW9mX2UKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGN0cmxfcnhfdG9fbG1hYy5wYWNrZXRfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IGFja19yZWNlaXZlZF9pbmQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IGFja19yZXF1ZXN0X2luZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gY3RybF9yeF90b19sbWFjLmRhdGFfcmVxdWVzdF9mcmFtZQorICoKKyAqICAgICAgMHgzOCAgICBjc2wgc3RhcnQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHR4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gY3NsX3N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0LTEgPSBzd2lvX2Fsd2F5c19vbl90b19sbWFjX2N0cmwudHhfZmxhZ19zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBmb3VuZF93dV9wYWNrZXQ7CisgKgorICogICAgICAweDM5ICAgIFRzY2ggVFggYWNrIHRpbWluZworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNy00ID0gc3dpb19hbHdheXNfb25fdG9fbG1hY19jdHJsLnR4X2ZsYWdfc3RhdAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAxICAgPSBjdHJsX3J4X3RvX2xtYWMucGFja2V0X3ZhbGlkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSBvbmVfdXNfdGltZXJfcmVhZHkKKyAqCisgKiAgICAgIDB4M2EgICAgUGh5IGNvbnRyb2wgYW5kIFBoeSBzdGF0dXMKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV90cmFuc2FjdGlvbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gcGh5X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gdHhfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IGNjYV9zdGF0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBlZF9yZXF1ZXN0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAxICAgPSByeF9lbmFibGVfb3NfY2FwdAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMCAgID0gZm91bmRfdHhfcGFja2V0CisgKgorICogICAgICAweDNiICAgIFBoeSBjb250cm9sLCBpbmNsIG9sZCBQSFlfRU4gKHRvIHNob3cgdGhlIGltcHJvdmVtZW50IHVzaW5nIHYyKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X3RyYW5zYWN0aW9uCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBwaHlfZW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHJ4X2VuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSB0eF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0wID0gcHRpCisgKgorICogICAgICAgICAweDNjICAgIENvbnRyb2wgc2lnbmFscyBmb3IgYXJiaXRlciBjb250cm9sIHN0YXRlIG1hY2hpbmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHBoeV90cmFuc2FjdGlvbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNiAgID0gYXJiX3BoeV90cmFuc19zZXRfc3RvcmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IGFyYl9waHlfdHJhbnNfY2xyX3N0b3JlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhcmJfcGh5X3RyYW5zX3Jlc19zdG9yZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gZm91bmRfdHhfcGFja2V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAyICAgPSBmb3VuZF90eF9wYWNrZXRfbmV4dAorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMSAgID0gZm91bmRfd3VfcGFja2V0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCAwICAgPSByZXFfZm9yX2Fja19mbGFnCisgKgorICogICAgICAweDNkICAgIE91dHB1dCBvZiBjaGVjayB3aGljaCBwYWNrZXQgdG8gc2VuZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X3RyYW5zYWN0aW9uCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBMbWFjUmVhZHk0c2xlZXAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUtNCA9IGZvdW5kX3R4X251bWJlcgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0yID0gZm91bmRfdHhfbnVtYmVyX25leHQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEtMCA9IGZvdW5kX3d1X251bWJlcgorICoKKyAqICAgICAgICAgMHgzZSAgICBDU01BX0NBIGFuZCB0aW1lciBjb250cm9sCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBwaHlfdHJhbnNhY3Rpb24KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IENzbWFfY2FfcmVzdW1lX3N0YXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IFNpbmdsZUNDQV9vc19jYXB0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBiYWNrb2ZmX3RpbWVyX3ByZXNldAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYmFja29mZl90aW1lcl9hbG1vc3RfcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDIgICA9IGJhY2tvZmZfdGltZXJfcmVhZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDEgICA9IGFyYl90aW1lcl9wcmVzZXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDAgICA9IGFyYl90aW1lcl9yZWFkeQorICoKKyAqICAgICAgICAgMHgzZiAgICBhcmJpdGVyIGNvbnRyb2wgc3RhdGUgbWFjaGluZQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gcGh5X3RyYW5zYWN0aW9uCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9lbgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gYXJiX3BoeV90cmFuc19zZXRfc3RvcmUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFyYl9waHlfdHJhbnNfY2xyX3N0b3JlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhcmJfcGh5X3RyYW5zX3Jlc19zdG9yZQorICogICAgICAgICAgICAgIGRpYWdub3NlIGJ1cyBiaXQgMi0wID0gYXJiX3N0YXRlX2luZm8KKyAqCisgKgorICogZGJnX2NvbnRyb2wgaW4gcmFuZ2UgMHg0MCAtIDB4NGYgRGVidWcgc2VjdXJpdHkKKyAqICAgICAgMHg0MCAgICBTZWN1cml0eSBjb250cm9sCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY1N0YXJ0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY1R4UnhuCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY0Fib3J0CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBzd2lvX3RvX3NlY3VyaXR5LnNlY0VuY0RlY24KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMgICA9IHN3aW9fZnJvbV9zZWN1cml0eS5zZWNCdXN5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAyICAgPSBzd2lvX2Zyb21fc2VjdXJpdHkuc2VjQXV0aEZhaWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEgICA9IHN3aW9fZnJvbV9zZWN1cml0eS5zZWNSZWFkeV9lCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAwICAgPSAnMCcKKyAqCisgKiAgICAgIDB4NDEgICAgU2VjdXJpdHkgY3RsaWQgYWNjZXNzIHJ4IGFuZCB0eAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gdHhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gcnhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IHJ4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gcnhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IHJ4X3NlY19jby5kX3JkeQorICoKKyAqICAgICAgMHg0MiAgICBTZWN1cml0eSBjdGxpZCBhY2Nlc3MgdHggd2l0aCBzZWNfd3JfZGF0YV92YWxpZAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gdHhfc2VjX2NpLmxkX3N0cmIKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IHR4X3NlY19jaS5jdGxpZF9ydworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNSAgID0gdHhfc2VjX2NpLnNlbGVjdHAKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IHR4X3NlY19jby5kX3JkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMy0wID0gc2VjX3dyX2RhdGFfdmFsaWQKKyAqCisgKiAgICAgIDB4NDMgICAgU2VjdXJpdHkgY3RsaWQgYWNjZXNzIHJ4IHdpdGggc2VjX3dyX2RhdGFfdmFsaWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IHJ4X3NlY19jaS5sZF9zdHJiCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSByeF9zZWNfY2kuY3RsaWRfcncKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDUgICA9IHJ4X3NlY19jaS5zZWxlY3RwCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSByeF9zZWNfY28uZF9yZHkKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMCA9IHNlY193cl9kYXRhX3ZhbGlkCisgKgorICogICAgICAweDQ0LTB4NGYgICAgICAgTm90IHVzZWQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZSBidXMgYml0IDcgLSAwID0gYWxsICcwJworICoKKyAqIGRiZ19jb250cm9sIGluIHJhbmdlIDB4NTAgLSAweDVmIEFIQiBidXMKKyAqICAgICAgMHg1MCAgICBhaGIgYnVzIHdpdGhvdXQgaHNpemUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDcgICA9IGhzZWwKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYtNSA9IGh0cmFucworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNCAgID0gaHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBocmVhZHlfaW4KKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDIgICA9IGhyZWFkeV9vdXQKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDEtMCA9IGhyZXNwCisgKgorICogICAgICAweDUxICAgIGFoYiBidXMgd2l0aG91dCBod3JlYWR5X2luIGFuZCBocmVzcCgxKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gaHNlbAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNi01ID0gaHRyYW5zCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBod3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDMtMiA9IGhoc2l6ZSgxIGRvd250byAwKQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMSAgID0gaHJlYWR5X291dAorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlc3AoMCkKKyAqCisgKiAgICAgIDB4NTIgICAgQW1iYSB0eCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV90eC5wZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhaV90eC5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV90eC5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3R4LnByZWFkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYW9fdHgucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gcHNpemVfdHgKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZWFkeV9vdXQKKyAqCisgKiAgICAgIDB4NTMgICAgQW1iYSByeCBzaWduYWxzCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA3ICAgPSBhaV9yeC5wZW5hYmxlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA2ICAgPSBhaV9yeC5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV9yeC5wd3JpdGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDQgICA9IGFvX3J4LnByZWFkeQorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMyAgID0gYW9fcngucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gcHNpemVfcngKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDAgICA9IGhyZWFkeV9vdXQKKyAqCisgKiAgICAgIDB4NTQgICAgQW1iYSByZWdpc3RlciBtYXAgc2lnbmFscworICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgNyAgID0gYWlfcmVnLnBlbmFibGUKKyAqICAgICAgICAgICAgICBkaWFnbm9zZV9idXMgYml0IDYgICA9IGFpX3JlZy5wc2VsCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA1ICAgPSBhaV9yZWcucHdyaXRlCisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCA0ICAgPSBhb19yZWcucHJlYWR5CisgKiAgICAgICAgICAgICAgZGlhZ25vc2VfYnVzIGJpdCAzICAgPSBhb19yZWcucHNsdmVycgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMi0xID0gIjAwIgorICogICAgICAgICAgICAgIGRpYWdub3NlX2J1cyBiaXQgMCAgID0gaHJlYWR5X291dAorICoKKyAqICAgICAgMHg1NS0weDVmICAgICAgIE5vdCB1c2VkCisgKiAgICAgICAgICAgICAgZGlhZ25vc2UgYnVzIGJpdCA3IC0gMCA9IGFsbCAnMCcKKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX0NPTlRST0wgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX0RFQlVHQ09OVFJPTAorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX0NPTlRST0wgMHhmZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfREJHX0NPTlRST0wgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0RCR19DT05UUk9MIDgKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4Ynl0ZV9lCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHgzCisgKiBBY2Nlc3MgbW9kZTogRS1SQ1cgKGV2ZW50IHJlYWQvY2xlYXIgb24gd3JpdGUgMSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgMHg0MDA5MDM5NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgMHgzCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhieXRlX2UKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBpdCBpbmRpY2F0ZXMgdGhlIGZpcnN0IGJ5dGUgb2YgYSBmcmFtZSBpcyB0cmFuc21pdHRlZAorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVs0XS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfRSAxCisvKgorICoKKyAqIEJpdDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2xhc3Rfc3ltYm9sX2UKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCBpdCBpbmRpY2F0ZXMgdGhlIGxhc3Qgc3ltYm9sIG9mIGEgZnJhbWUgaXMgdHJhbnNtaXR0ZWQKKyAqIFRoaXMgZXZlbnQgYml0IGNvbnRyaWJ1dGVzIHRvIGZ0ZGZfY2VbNF0uCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX0UgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9FCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9FIDB4MgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfRSAxCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfRSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eGJ5dGVfbQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MworICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAweDQwMDkwMzk4CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAweDMKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eGJ5dGVfbQorICoKKyAqIE1hc2sgYml0IGZvciBldmVudCAidHhieXRlX2UiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYQllURV9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhCWVRFX00gMQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9sYXN0X3N5bWJvbF9tCisgKgorICogTWFzayBiaXQgZm9yIGV2ZW50ICJ0eF9sYXN0X3N5bWJvbF9lIi4KKyAqIFRoZSBtYXNrIGJpdCBpcyBtYXNraW5nIHdoZW4gY2xlYXJlZCB0byAnMCcgKGRlZmF1bHQgdmFsdWUpIGFuZCB3aWxsIGVuYWJsZSB0aGUgY29udHJpYnV0aW9uIHRvIHRoZSBpbnRlcnJ1cHQgd2hlbiBzZXQgdG8gJzEnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9MQVNUX1NZTUJPTF9NIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWEJZVEVfTQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfTEFTVF9TWU1CT0xfTSAweDIKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX00gMQorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0xBU1RfU1lNQk9MX00gMQorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogUy1SIChzdGF0ZSAtIHJlYWQpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfUyAweDQwMDkwNDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TIDB4MQorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU19JTlRWTCAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1NUQVRfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUX0lOVFZMIDB4MjAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX3N0YXQKKyAqCisgKiBUeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnLCB0aGUgcGFja2V0IGlzIHJlYWR5IGZvciB0cmFuc21pc3Npb24KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU1RBVCAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TVEFUIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfY2xlYXJfZQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IEUtUkNXIChldmVudCByZWFkL2NsZWFyIG9uIHdyaXRlIDEpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAweDQwMDkwNDA0CisjZGVmaW5lIFNJWkVfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FIDB4MQorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRV9JTlRWTCAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0VfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FX0lOVFZMIDB4MjAKKworLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyX2UKKyAqCisgKiBUeCBtZXRhIGRhdGEgcGVyIGVudHJ5OiBpZiBzZXQgdG8gJzEnIHRoZSBMTUFDIGhhcmR3YXJlIGhhcyBjbGVhcmVkIHRoZSB0eF9mbGFnX3N0YXQgc3RhdHVzLgorICogVGhpcyBldmVudCBiaXQgY29udHJpYnV0ZXMgdG8gZnRkZl9jZVs0XS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX0UKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAweDEKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfRSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9FIDEKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfY2xlYXJfbQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4MQorICogQWNjZXNzIG1vZGU6IEVNLVJXIChldmVudCBtYXNrKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMHg0MDA5MDQwOAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAweDEKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX01fSU5UVkwgMHgyMAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NX05VTSAweDQKKyNkZWZpbmUgRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTV9JTlRWTCAweDIwCisKKy8qCisgKgorICogQml0OiBmdGRmX29uX29mZl9yZWdtYXBfdHhfZmxhZ19jbGVhcl9tCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogTWFzayBiaXQgZm9yIGV2ZW50ICJ0eF9mbGFnX2NsZWFyX2UiLgorICogVGhlIG1hc2sgYml0IGlzIG1hc2tpbmcgd2hlbiBjbGVhcmVkIHRvICcwJyAoZGVmYXVsdCB2YWx1ZSkgYW5kIHdpbGwgZW5hYmxlIHRoZSBjb250cmlidXRpb24gdG8gdGhlIGludGVycnVwdCB3aGVuIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUl9NCisjZGVmaW5lIE1TS19GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMHgxCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSX00gMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVJfTSAxCisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9wcmlvcml0eQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiAweDAgIEluaXRpYWxpemF0aW9uIG1hc2s6IDB4ZjFmCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZIDB4NDAwOTA0MTAKKyNkZWZpbmUgU0laRV9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZIDB4ZjFmCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWV9JTlRWTCAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWV9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWV9JTlRWTCAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUF9OVU0gMHg0CisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9JU1dBS0VVUF9JTlRWTCAweDIwCisjZGVmaW5lIEZUREZfT05fT0ZGX1JFR01BUF9QVElfVFhfTlVNIDB4NAorI2RlZmluZSBGVERGX09OX09GRl9SRUdNQVBfUFRJX1RYX0lOVFZMIDB4MjAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X3ByaW9yaXR5CisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogUHJpb3JpdHkgb2YgcGFja2V0CisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1BSSU9SSVRZIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgMHhmCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfUFJJT1JJVFkgNAorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9Jc1dha2VVcAorICoKKyAqIFR4IG1ldGEgZGF0YSBwZXIgZW50cnk6IEEgYmFzaWMgd2FrZS11cCBmcmFtZSBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHRoZSBVTUFDIGluIHRoZSBUeCBidWZmZXIuCisgKiBUaGUgbWV0YSBkYXRhIGNvbnRyb2wgYml0IElzV2FrZVVwIG11c3QgYmUgc2V0IHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIFdha2UtdXAgZnJhbWUuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVAgMHgxMAorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfSVNXQUtFVVAgNAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX0lTV0FLRVVQIDEKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF9wdGlfdHgKKyAqCisgKiBUaGlzIHJlZ2lzdGVyIGhhcyA0IGVudHJpZXMsIGJlbG9uZ2luZyB0byB0aGUgZW50cnkgb2YgdGhlIFR4IGZyYW1lIHRvIHNlbmQsIHRvIGJlIHVzZWQgZHVyaW5nIHRyYW5zbWl0dGluZyBmcmFtZXMgYW5kIHRoZSBDTVNBLUNBIHBoYXNlIGJlZm9yZSAod2hlbiByZXF1ZXN0ZWQpLgorICogSW4gVFNDSCBtb2RlIHRoaXMgcmVnaXN0ZXIgc2hhbGwgYmUgdXNlZCBkdXJpbmcgdGhlIHRpbWUgc2xvdCBpbiB3aGljaCBmcmFtZXMgY2FuIGJlIHRyYW5zbWl0dGVkIGFuZCBjb25zZXF1ZW50bHkgYW4gRW5oYW5jZWQgQUNLIGNhbiBiZSByZWNlaXZlZC4KKyAqIFNpbmNlIHB0aV90eCBiZWxvbmdzIHRvIGEgY2VydGFpbiBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCwgcHRpX3R4IGNhbiBiZSBjb25zaWRlcmVkIGFzIGV4dHJhIFR4IG1ldGEgZGF0YS4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJX1RYIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9QUklPUklUWQorI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfUFRJX1RYIDB4ZjAwCisjZGVmaW5lIE9GRl9GX0ZUREZfT05fT0ZGX1JFR01BUF9QVElfVFggOAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1BUSV9UWCA0CisKKy8qCisgKgorICogUkVHSVNURVI6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9zZXRfb3MKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHgwICBJbml0aWFsaXphdGlvbiBtYXNrOiAweGYKKyAqIEFjY2VzcyBtb2RlOiBPUy1XIChvbmUtc2hvdCAtIHdyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9TRVRfT1MgMHg0MDA5MDQ4MAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1NFVF9PUyAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX1NFVF9PUyAweGYKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2ZsYWdfc2V0CisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJywgdGhlIHR4X2ZsYWdfc3RhdCB3aWxsIGJlIHNldCB0byAnMScuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9TRVRfT1MKKyNkZWZpbmUgTVNLX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUIDB4ZgorI2RlZmluZSBPRkZfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19TRVQgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfU0VUIDQKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9vbl9vZmZfcmVnbWFwX3R4X2NsZWFyX29zCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IDB4MCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhmCisgKiBBY2Nlc3MgbW9kZTogT1MtVyAob25lLXNob3QgLSB3cml0ZSkKKyAqLworI2RlZmluZSBJTkRfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ0xFQVJfT1MgMHg0MDA5MDQ4NAorI2RlZmluZSBTSVpFX1JfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0NMRUFSX09TIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX09OX09GRl9SRUdNQVBfVFhfQ0xFQVJfT1MgMHhmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfb25fb2ZmX3JlZ21hcF90eF9mbGFnX2NsZWFyCisgKgorICogVHggbWV0YSBkYXRhIHBlciBlbnRyeTogaWYgc2V0IHRvICcxJywgdGhlIHR4X2ZsYWdfc3RhdCB3aWxsIGJlIGNsZWFyZWQgdG8gJzAnLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9GTEFHX0NMRUFSIElORF9SX0ZUREZfT05fT0ZGX1JFR01BUF9UWF9DTEVBUl9PUworI2RlZmluZSBNU0tfRl9GVERGX09OX09GRl9SRUdNQVBfVFhfRkxBR19DTEVBUiAweGYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9PTl9PRkZfUkVHTUFQX1RYX0ZMQUdfQ0xFQVIgNAorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX2Fsd2F5c19vbl9yZWdtYXBfd2FrZXVwX2NvbnRyb2wKKyAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZTogMHg0MDAwMDAwMCAgSW5pdGlhbGl6YXRpb24gbWFzazogMHhlMWZmZmZmZgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfQ09OVFJPTCAweDQwMDkxMDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wgMHg0CisjZGVmaW5lIE1TS19SX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfQ09OVFJPTCAweGUxZmZmZmZmCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfYWx3YXlzX29uX3JlZ21hcF9XYWtlVXBJbnRUaHIKKyAqCisgKiBUaHJlc2hvbGQgZm9yIHdha2UtdXAgaW50ZXJydXB0LiBXaGVuIFdha2VVcEVuYWJsZSBpcyBzZXQgdG8gJzEnIGFuZCB0aGUgV2FrZS11cCAoZXZlbnQpIGNvdW50ZXIgbWF0Y2hlcyB0aGlzIHZhbHVlLCB0aGUgaW50ZXJydXB0IFdBS0VVUF9JUlEgaXMgc2V0IHRvICcxJyBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBMUF9DTEsgcGVyaW9kLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgSU5EX1JfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9DT05UUk9MCisjZGVmaW5lIE1TS19GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgMHgxZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBJTlRUSFIgMAorI2RlZmluZSBTSVpFX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUElOVFRIUiAyNQorLyoKKyAqCisgKiBCaXQ6IGZ0ZGZfYWx3YXlzX29uX3JlZ21hcF9XYWtlVXBFbmFibGUKKyAqCisgKiBJZiBzZXQgdG8gJzEnLCB0aGUgV2FrZVVwSW50VGhyIGlzIGVuYWJsZWQgdG8gZ2VuZXJhdGUgYW4gV0FLRVVQX0lSUSBpbnRlcnJ1cHQuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUEVOQUJMRSBJTkRfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wKKyNkZWZpbmUgTVNLX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUEVOQUJMRSAweDIwMDAwMDAwCisjZGVmaW5lIE9GRl9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgMjkKKyNkZWZpbmUgU0laRV9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBFTkFCTEUgMQorLyoKKyAqCisgKiBGaWVsZDogZnRkZl9hbHdheXNfb25fcmVnbWFwX1dha2VVcF9tb2RlCisgKgorICogVGhlIENvbnRyb2wgcmVnaXN0ZXIgV2FrZVVwX21vZGUgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBFdmVudCBjb3VudGVyOgorICogMGQgPSBvZmYsIDFkID0gZnJlZSBydW5uaW5nIChkZWZhdWx0KSwgMmQgPSBvbmUgc2hvdCB3aXRoIGF1dG8gY2xlYXIsIDNkID0gY29uZmlndXJhYmxlIHBlcmlvZCAodGltZXIKKyAqIG1vZGUpLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfQUxXQVlTX09OX1JFR01BUF9XQUtFVVBfTU9ERSBJTkRfUl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX0NPTlRST0wKKyNkZWZpbmUgTVNLX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9NT0RFIDB4YzAwMDAwMDAKKyNkZWZpbmUgT0ZGX0ZfRlRERl9BTFdBWVNfT05fUkVHTUFQX1dBS0VVUF9NT0RFIDMwCisjZGVmaW5lIFNJWkVfRl9GVERGX0FMV0FZU19PTl9SRUdNQVBfV0FLRVVQX01PREUgMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX2ZwX3Byb2Nlc3NpbmdfcmFtX2xvbmdfYWRkcl8wCisgKgorICogSW5pdGlhbGl6YXRpb24gdmFsdWU6IG5vbmUuCisgKiBBY2Nlc3MgbW9kZTogQy1SVyAoY29udHJvbCAtIHJlYWQvd3JpdGUpCisgKi8KKyNkZWZpbmUgSU5EX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMCAweDQwMDkyMDAwCisjZGVmaW5lIFNJWkVfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8wIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8wIDB4ZmZmZmZmZmYKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMF9OVU0gMHgxOAorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8wX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTF9OVU0gMHgxOAorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MX0lOVFZMIDB4MTAKKworLyoKKyAqCisgKiBGaWVsZDogZnRkZl9mcF9wcm9jZXNzaW5nX3JhbV9FeHBfU0FfbAorICoKKyAqIExvd2VzdCBwYXJ0IG9mIHRoZSA2NCBiaXRzIGxvbmcgc291cmNlIGFkZHJlc3Mgb3IgU0EgZW50cnkgMSByZXNwLiBTQSBlbnRyeSAwIGluIGNhc2Ugb2Ygc2hvcnQgc291cmNlIGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfTCBJTkRfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0xPTkdfQUREUl8wCisjZGVmaW5lIE1TS19GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wgMHhmZmZmZmZmZgorI2RlZmluZSBPRkZfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9MIDAKKyNkZWZpbmUgU0laRV9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0wgMzIKKworLyoKKyAqCisgKiBSRUdJU1RFUjogZnRkZl9mcF9wcm9jZXNzaW5nX3JhbV9sb25nX2FkZHJfMQorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzEgMHg0MDA5MjAwNAorI2RlZmluZSBTSVpFX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMSAweDQKKyNkZWZpbmUgTVNLX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMSAweGZmZmZmZmZmCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzFfTlVNIDB4MTgKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9MT05HX0FERFJfMV9JTlRWTCAweDEwCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0hfTlVNIDB4MTgKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSF9JTlRWTCAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfZnBfcHJvY2Vzc2luZ19yYW1fRXhwX1NBX2gKKyAqCisgKiBIaWdoZXN0IHBhcnQgb2YgdGhlIDY0IGJpdHMgbG9uZyBzb3VyY2UgYWRkcmVzcyBvciBTQSBlbnRyeSAzIHJlc3AuIFNBIGVudHJ5IDIgaW4gY2FzZSBvZiBzaG9ydCBzb3VyY2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBJTkRfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX0VYUF9TQV9IIElORF9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fTE9OR19BRERSXzEKKyNkZWZpbmUgTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCAweGZmZmZmZmZmCisjZGVmaW5lIE9GRl9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fRVhQX1NBX0ggMAorI2RlZmluZSBTSVpFX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9FWFBfU0FfSCAzMgorCisvKgorICoKKyAqIFJFR0lTVEVSOiBmdGRmX2ZwX3Byb2Nlc3NpbmdfcmFtX3NpemVfYW5kX3ZhbAorICoKKyAqIEluaXRpYWxpemF0aW9uIHZhbHVlOiBub25lLgorICogQWNjZXNzIG1vZGU6IEMtUlcgKGNvbnRyb2wgLSByZWFkL3dyaXRlKQorICovCisjZGVmaW5lIElORF9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMIDB4NDAwOTIwMDgKKyNkZWZpbmUgU0laRV9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMIDB4NAorI2RlZmluZSBNU0tfUl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NJWkVfQU5EX1ZBTCAweDFmCisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMX05VTSAweDE4CisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQV9OVU0gMHgxOAorI2RlZmluZSBGVERGX0ZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBX0lOVFZMIDB4MTAKKyNkZWZpbmUgRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UX05VTSAweDE4CisjZGVmaW5lIEZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVF9JTlRWTCAweDEwCisKKy8qCisgKgorICogRmllbGQ6IGZ0ZGZfZnBfcHJvY2Vzc2luZ19yYW1fVmFsaWRfU0EKKyAqCisgKiBJbmRpY2F0aW9uIHdoaWNoIFNBIGVudHJ5IGlzIHZhbGlkIChpZiBzZXQpLiBJbiBjYXNlIG9mIDQgc2hvcnQgU0EgVmFsaWQgYml0IDMgYmVsb25ncyB0byBTQSBlbnRyeSAzIGV0Yy4KKyAqIEluIGNhc2Ugb2YgYSBsb25nIFNBIFZhbGlkIGJpdCAwIGlzIHRoZSB2YWxpZCBpbmRpY2F0aW9uLgorICovCisjZGVmaW5lIElORF9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fVkFMSURfU0EgSU5EX1JfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSVpFX0FORF9WQUwKKyNkZWZpbmUgTVNLX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSAweGYKKyNkZWZpbmUgT0ZGX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9WQUxJRF9TQSAwCisjZGVmaW5lIFNJWkVfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1ZBTElEX1NBIDQKKy8qCisgKgorICogQml0OiBmdGRmX2ZwX3Byb2Nlc3NpbmdfcmFtX1Nob3J0X0xvbmdOb3QKKyAqCisgKiBBICcxJyBpbmRpY2F0ZXMgdGhhdCBFeHBfU0EgY29udGFpbnMgZm91ciBzaG9ydCBTQSdzLCBhICcwJyBpbmRpY2F0ZXMgb25lIGxvbmcgU0EuCisgKi8KKyNkZWZpbmUgSU5EX0ZfRlRERl9GUF9QUk9DRVNTSU5HX1JBTV9TSE9SVF9MT05HTk9UIElORF9SX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0laRV9BTkRfVkFMCisjZGVmaW5lIE1TS19GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVCAweDEwCisjZGVmaW5lIE9GRl9GX0ZUREZfRlBfUFJPQ0VTU0lOR19SQU1fU0hPUlRfTE9OR05PVCA0CisjZGVmaW5lIFNJWkVfRl9GVERGX0ZQX1BST0NFU1NJTkdfUkFNX1NIT1JUX0xPTkdOT1QgMQorI2VuZGlmIC8vIGRnX2NvbmZpZ0JMQUNLX09SQ0FfSUNfUkVWICE9IEJMQUNLX09SQ0FfSUNfUkVWX0EKKyNlbmRpZiAvLyBfZnRkZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1Rvb2xzL2NsaV9wcm9ncmFtbWVyIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1Rvb2xzL2NsaV9wcm9ncmFtbWVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3OTU1MWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nVG9vbHMvY2xpX3Byb2dyYW1tZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1Rvb2xzL2ltZ3ByZXAuc2ggYi90aGlyZF9wYXJ0eS9kaWFsb2cvRGlhbG9nVG9vbHMvaW1ncHJlcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTIwNjAzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvZGlhbG9nL0RpYWxvZ1Rvb2xzL2ltZ3ByZXAuc2gKQEAgLTAsMCArMSw0IEBACithcm0tbm9uZS1lYWJpLW9iamNvcHkgLU8gYmluYXJ5IC4uLy4uLy4uL291dHB1dC9kYTE1MDAwL2Jpbi9vdC1jbGktZnRkIC4uLy4uLy4uL291dHB1dC9kYTE1MDAwL2Jpbi9vdC1jbGktZnRkLmJpbgorCisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGlhbG9nL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L2RpYWxvZy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiZmM2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2RpYWxvZy9SRUFETUUubWQKQEAgLTAsMCArMSwxNyBAQAorVVJMOiBodHRwOi8vd3d3LmRpYWxvZy1zZW1pY29uZHVjdG9yLmNvbS9vcGVudGhyZWFkLXNhbmRib3gtZGV2ZWxvcG1lbnQta2l0CisKK1ZlcnNpb246ICAgVE8gQkUgVVBEQVRFRCEKKworCitMaWNlbnNlOiAgIEJTRDMKKworCitEZXNjcmlwdGlvbjoKKworRGlhbG9nU0RLIC0gY29udGFpbiBib2FyZCBzdXBwb3J0IHBhY2thZ2UgYW5kIHJhZGlvIGludGVyZmFjZSB1c2VkIGZvciBidWlsZAorCitEaWFsb2dUb29scyAtIGNvbnRhaW4gZmxhc2ggdG9vbHMKKwlpbWdwcmVwLnNoIC0gcHJlcGFyZSBpbWFnZSBmcm9tIGdlbmVyYXRlZCBiaW5hcnkgdXNpbmcgYmluMmltYWdlIHRvb2wKKwljbGlfcHJvZ3JhbW1lciBhbmQgdWFydGJvb3QgLSB1dGlsaXRpZXMgZm9yIGxvYWRpbmcgaW1hZ2UgaW50byB0aGUgcGxhdGZvcm0KKworTG9vayBpbnRvIGV4YW1wbGVzL3BsYXRmb3JtL2RhMTUwMDAvUkVBRE1FLmFtIGZvciBEaWFsb2dUb29scyB1c2FnZSBkZXNjcmlwdGlvbi4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvTWFrZWZpbGUuYW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmYwYjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTM4IEBACisjCisjICAgIENvcHlyaWdodCAyMDE2IFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIG1iZWR0bHMtY29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcG8vaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworbGliX0xJQlJBUklFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGlibWJlZGNyeXB0by5hCisKKyMgRG8gbm90IGVuYWJsZSAtV2NvbnZlcnNpb24gZm9yIG1iZWR0bHMKK292ZXJyaWRlIENGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtV2NvbnZlcnNpb24sJChDRkxBR1MpKQorb3ZlcnJpZGUgQ1hYRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gJChmaWx0ZXItb3V0IC1XY29udmVyc2lvbiwkKENYWEZMQUdTKSkKKworIyBEbyBub3QgZW5hYmxlIC1wZWRhbnRpYy1lcnJvcnMgZm9yIG1iZWR0bHMKK292ZXJyaWRlIENGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtcGVkYW50aWMtZXJyb3JzLCQoQ0ZMQUdTKSkKK292ZXJyaWRlIENYWEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoZmlsdGVyLW91dCAtcGVkYW50aWMtZXJyb3JzLCQoQ1hYRkxBR1MpKQorCitNQkVEVExTX1NSQ0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwbworCitsaWJtYmVkY3J5cHRvX2FfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9jb3JlICAgICAgICAgICAgICAgICAgICBcCisgICAgLUkkKE1CRURUTFNfU1JDRElSKS9pbmNsdWRlICAgICAgICAgICAgICAgICBcCisgICAgJChNQkVEVExTX0NQUEZMQUdTKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJtYmVkY3J5cHRvX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgaGFyZHdhcmVfZW50cm9weS5jICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L21kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L21kX3dyYXAuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L21lbW9yeV9idWZmZXJfYWxsb2MuYyAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3BsYXRmb3JtLmMgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NoYTI1Ni5jICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCitub2Rpc3RfbGlibWJlZGNyeXB0b19hX1NPVVJDRVMgICAgICAgICAgICAgICAgPSBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3V0aWwvdGhpcmRfcGFydHkvbWJlZHRscy9zbF9jcnlwdG8vc3JjL3NsX2Flcy5jIFwKKyAgICAkKE5VTEwpCitlbHNlCitsaWJtYmVkY3J5cHRvX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgcmVwby9saWJyYXJ5L2Flcy5jICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorZW5kaWYgICMgT1BFTlRIUkVBRF9FWEFNUExFU19FRlIzMgorCitpZiBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCitsaWJtYmVkY3J5cHRvX2FfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgcmVwby9saWJyYXJ5L2JpZ251bS5jICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2NjbS5jICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2NpcGhlci5jICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2NpcGhlcl93cmFwLmMgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2NtYWMuYyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2N0cl9kcmJnLmMgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2RlYnVnLmMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2VjanBha2UuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2VjcF9jdXJ2ZXMuYyAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2VudHJvcHkuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L2VudHJvcHlfcG9sbC5jICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NzbF9jb29raWUuYyAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NzbF9jaXBoZXJzdWl0ZXMuYyAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NzbF9jbGkuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NzbF9zcnYuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NzbF90aWNrZXQuYyAgICAgICAgICAgICAgICAgICBcCisgICAgcmVwby9saWJyYXJ5L3NzbF90bHMuYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpZiBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCitub2Rpc3RfbGlibWJlZGNyeXB0b19hX1NPVVJDRVMgICAgICAgICAgICAgICArPSBcCisgICAgQHRvcF9idWlsZGRpckAvdGhpcmRfcGFydHkvc2lsYWJzL2dlY2tvX3Nka19zdWl0ZS92MS4xL3V0aWwvdGhpcmRfcGFydHkvbWJlZHRscy9saWJyYXJ5L2VjcC5jIFwKKyAgICBAdG9wX2J1aWxkZGlyQC90aGlyZF9wYXJ0eS9zaWxhYnMvZ2Vja29fc2RrX3N1aXRlL3YxLjEvdXRpbC90aGlyZF9wYXJ0eS9tYmVkdGxzL3NsX2NyeXB0by9zcmMvc2xfZWNwLmMgXAorICAgICQoTlVMTCkKK2Vsc2UKK2xpYm1iZWRjcnlwdG9fYV9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICs9IFwKKyAgICByZXBvL2xpYnJhcnkvZWNwLmMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCitlbmRpZiAgIyBPUEVOVEhSRUFEX0VYQU1QTEVTX0VGUjMyCisKKyMKKyMgbWJlZHRscyBwYXRjaGVzCisjCisKK01CRURUTFNfQUJTX1NSQ0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9ICQoYWJzcGF0aCAkKHRvcF9zcmNkaXIpL3RoaXJkX3BhcnR5L21iZWR0bHMpCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBcCisgICAgcGF0Y2gvMDAwMS1GaXgtY29tbWlzc2lvbmluZy1wcm9ibGVtLXdpdGgtcmV0cmFuc21pc3Npb25zLnBhdGNoICAgXAorICAgIHBhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK3JlcG8vbGlicmFyeS9saWJtYmVkY3J5cHRvX2Etc3NsX3Rscy4kKE9CSkVYVCk6ICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Rscy5jLnBhdGNoZWQKKworJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfdGxzLmMucGF0Y2hlZDogJChNQkVEVExTX0FCU19TUkNESVIpL3BhdGNoLzAwMDEtRml4LWNvbW1pc3Npb25pbmctcHJvYmxlbS13aXRoLXJldHJhbnNtaXNzaW9ucy5wYXRjaAorCWNobW9kIHUrdyAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5LworCWNobW9kIHUrdyAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF90bHMuYworCWlmIFsgLWUgJEAgXTsgdGhlbiBwYXRjaCAtUiAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF90bHMuYyAkQDsgZmkKKwlwYXRjaCAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF90bHMuYyAkPAorCWNwICQoTUJFRFRMU19BQlNfU1JDRElSKS9wYXRjaC8wMDAxLUZpeC1jb21taXNzaW9uaW5nLXByb2JsZW0td2l0aC1yZXRyYW5zbWlzc2lvbnMucGF0Y2ggJEAKKworcmVwby9saWJyYXJ5L2xpYm1iZWRjcnlwdG9fYS1zc2xfc3J2LiQoT0JKRVhUKTogJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfc3J2LmMucGF0Y2hlZAorCiskKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF9zcnYuYy5wYXRjaGVkOiAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcGF0Y2gvMDAwMi1GaXgtd2FybmluZy1kZWFkLXN0b3JlLnBhdGNoCisJY2htb2QgdSt3ICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvCisJY2htb2QgdSt3ICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jCisJaWYgWyAtZSAkQCBdOyB0aGVuIHBhdGNoIC1SICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jICRAOyBmaQorCXBhdGNoICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jICQ8CisJY3AgJChNQkVEVExTX0FCU19TUkNESVIpL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaCAkQAorCithbGwtbG9jYWw6IGxpYm1iZWRjcnlwdG8uYQorCWlmIFsgLWUgJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfdGxzLmMucGF0Y2hlZCBdOyB0aGVuIHBhdGNoIC1SICQoTUJFRFRMU19BQlNfU1JDRElSKS9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jICQoTUJFRFRMU19BQlNfU1JDRElSKS9wYXRjaC8wMDAxLUZpeC1jb21taXNzaW9uaW5nLXByb2JsZW0td2l0aC1yZXRyYW5zbWlzc2lvbnMucGF0Y2g7IHJtIC1mICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Rscy5jLnBhdGNoZWQ7IGZpCisJaWYgWyAtZSAkKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF9zcnYuYy5wYXRjaGVkIF07IHRoZW4gcGF0Y2ggLVIgJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS9zc2xfc3J2LmMgJChNQkVEVExTX0FCU19TUkNESVIpL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaDsgcm0gLWYgJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfc3J2LmMucGF0Y2hlZDsgZmkKKworY2xlYW4tbG9jYWw6CisJaWYgWyAtZSAkKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF90bHMuYy5wYXRjaGVkIF07IHRoZW4gcGF0Y2ggLVIgJChNQkVEVExTX0FCU19TUkNESVIpL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMgJChNQkVEVExTX0FCU19TUkNESVIpL3BhdGNoLzAwMDEtRml4LWNvbW1pc3Npb25pbmctcHJvYmxlbS13aXRoLXJldHJhbnNtaXNzaW9ucy5wYXRjaDsgcm0gLWYgJChNQkVEVExTX1NSQ0RJUikvbGlicmFyeS9zc2xfdGxzLmMucGF0Y2hlZDsgZmkKKwlpZiBbIC1lICQoTUJFRFRMU19TUkNESVIpL2xpYnJhcnkvc3NsX3Nydi5jLnBhdGNoZWQgXTsgdGhlbiBwYXRjaCAtUiAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcmVwby9saWJyYXJ5L3NzbF9zcnYuYyAkKE1CRURUTFNfQUJTX1NSQ0RJUikvcGF0Y2gvMDAwMi1GaXgtd2FybmluZy1kZWFkLXN0b3JlLnBhdGNoOyBybSAtZiAkKE1CRURUTFNfU1JDRElSKS9saWJyYXJ5L3NzbF9zcnYuYy5wYXRjaGVkOyBmaQorCitlbmRpZiAgIyBPUEVOVEhSRUFEX0VOQUJMRV9EVExTCisKK2lmIE9QRU5USFJFQURfQlVJTERfQ09WRVJBR0UKK0Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IC0KK0NMRUFORklMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoc2hlbGwgZmluZCAkKHRvcF9idWlsZGRpcikvdGhpcmRfcGFydHkvbWJlZHRscyAkKERhc2gpbmFtZSAiKi5nY2RhIiAkKERhc2gpbyAkKERhc2gpbmFtZSAiKi5nY25vIikKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvbWJlZHRscy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiZGUzNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMjQgQEAKKyMgbWJlZCBUTFMKKworIyMgVVJMCisKK2h0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvcmVsZWFzZXMvdGFnL21iZWR0bHMtMi40LjEKKworIyMgVmVyc2lvbgorCisyLjQuMQorCisjIyBMaWNlbnNlCisKK0FwYWNoZSAyLjAKKworIyMgTGljZW5zZSBGaWxlCisKK1tMSUNFTlNFXShyZXBvL0xJQ0VOU0UpCisKKyMjIERlc2NyaXB0aW9uCisKK21iZWQgVExTIChmb3JtZXJseSBrbm93biBhcyBQb2xhclNTTCkgbWFrZXMgaXQgdHJpdmlhbGx5IGVhc3kgZm9yCitkZXZlbG9wZXJzIHRvIGluY2x1ZGUgY3J5cHRvZ3JhcGhpYyBhbmQgU1NML1RMUyBjYXBhYmlsaXRpZXMgaW4gdGhlaXIKKyhlbWJlZGRlZCkgcHJvZHVjdHMsIGZhY2lsaXRhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCBhIG1pbmltYWwKK2NvZGluZyBmb290cHJpbnQuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL2hhcmR3YXJlX2VudHJvcHkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvaGFyZHdhcmVfZW50cm9weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0M2YyY2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL2hhcmR3YXJlX2VudHJvcHkuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogICAgQ29weXJpZ2h0IDIwMTYgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGZpbGUKKyAqICAgVGhpcyBmaWxlIGltcGxlbWVudHMgdG8gdXNlIGhhcmR3YXJlIGVudHJvcHkgc291cmNlLgorICogICB1bmNvbW1lbnQgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCBpbiBtYmVkdGxzL21iZWR0bHNfY29uZmlnLmggdG8gdXNlIHRoaXMuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSAib3BlbnRocmVhZC90eXBlcy5oIgorI2luY2x1ZGUgIm9wZW50aHJlYWQvcGxhdGZvcm0vcmFuZG9tLmgiCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKworaW50IG1iZWR0bHNfaGFyZHdhcmVfcG9sbCh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbikKK3sKKyAgICBvdEVycm9yIGVycm9yOworCisgICAgKHZvaWQpZGF0YTsKKworICAgIGVycm9yID0gb3RQbGF0UmFuZG9tR2V0VHJ1ZSgodWludDhfdCAqKW91dHB1dCwgKHVpbnQxNl90KWxlbik7CisKKyAgICBpZiAoZXJyb3IgIT0gT1RfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAgIHJldHVybiBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQ7CisgICAgfQorCisgICAgaWYgKG9sZW4gIT0gTlVMTCkKKyAgICB7CisgICAgICAgICpvbGVuID0gbGVuOworICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9tYmVkdGxzLWNvbmZpZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9tYmVkdGxzLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTY5M2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL21iZWR0bHMtY29uZmlnLmgKQEAgLTAsMCArMSwyNjMzIEBACisvKioKKyAqIFxmaWxlIGNvbmZpZy5oCisgKgorICogXGJyaWVmIENvbmZpZ3VyYXRpb24gb3B0aW9ucyAoc2V0IG9mIGRlZmluZXMpCisgKgorICogIFRoaXMgc2V0IG9mIGNvbXBpbGUtdGltZSBvcHRpb25zIG1heSBiZSB1c2VkIHRvIGVuYWJsZQorICogIG9yIGRpc2FibGUgZmVhdHVyZXMgc2VsZWN0aXZlbHksIGFuZCByZWR1Y2UgdGhlIGdsb2JhbAorICogIG1lbW9yeSBmb290cHJpbnQuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPG9wZW50aHJlYWQvY29uZmlnLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9sb2dnaW5nLmg+CisjaW5jbHVkZSA8b3BlbnRocmVhZC9wbGF0Zm9ybS9tZW1vcnkuaD4KKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisvLyBUZW1wb3JhcnksIHVudGlsIHRoZSB3YXJuaW5ncyBjYW4gZ2V0IGZpeGVkIGluIHRoZSBtYmVkIGxpYnJhcnkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDIpICAvLyBjb252ZXJzaW9uIGZyb20gJyonIHRvICcqJywgcG9zc2libGUgbG9zcyBvZiBkYXRhCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0KSAgLy8gY29udmVyc2lvbiBmcm9tICcqJyB0byAnKicsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI2NykgIC8vIGNvbnZlcnNpb24gZnJvbSAnKicgdG8gJyonLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfS0VSTkVMX01PREUpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTworX19pbmxpbmUgaW50IHdpbmRvd3Nfa2VybmVsX3NucHJpbnRmKGNoYXIgKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKyAgICB2YV9zdGFydCggYXJncCwgZm9ybWF0ICk7CisgICAgaW50IHJldCA9IF92c25wcmludGZfcyggcywgbiwgX1RSVU5DQVRFLCBmb3JtYXQsIGFyZ3AgKTsKKyAgICB2YV9lbmQoIGFyZ3AgKTsKKyAgICByZXR1cm4gcmV0OworfQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URiAgICB3aW5kb3dzX2tlcm5lbF9zbnByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpICYmICFkZWZpbmVkKF9LRVJORUxfTU9ERSkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IFN5c3RlbSBzdXBwb3J0CisgKgorICogVGhpcyBzZWN0aW9uIHNldHMgc3lzdGVtIHNwZWNpZmljIHNldHRpbmdzLgorICogXHsKKyAqLworCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX0FTTQorICoKKyAqIFRoZSBjb21waWxlciBoYXMgc3VwcG9ydCBmb3IgYXNtKCkuCisgKgorICogUmVxdWlyZXMgc3VwcG9ydCBmb3IgYXNtKCkgaW4gY29tcGlsZXIuCisgKgorICogVXNlZCBpbjoKKyAqICAgICAgbGlicmFyeS90aW1pbmcuYworICogICAgICBsaWJyYXJ5L3BhZGxvY2suYworICogICAgICBpbmNsdWRlL21iZWR0bHMvYm5fbXVsLmgKKyAqCisgKiBDb21tZW50IHRvIGRpc2FibGUgdGhlIHVzZSBvZiBhc3NlbWJseSBjb2RlLgorICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9TU0UyCisgKgorICogQ1BVIHN1cHBvcnRzIFNTRTIgaW5zdHJ1Y3Rpb24gc2V0LgorICoKKyAqIFVuY29tbWVudCBpZiB0aGUgQ1BVIHN1cHBvcnRzIFNTRTIgKElBLTMyIHNwZWNpZmljKS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRV9TU0UyCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfVElNRQorICoKKyAqIFN5c3RlbSBoYXMgdGltZS5oIGFuZCB0aW1lKCkuCisgKiBUaGUgdGltZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNvcnJlY3QsIG9ubHkgdGltZSBkaWZmZXJlbmNlcyBhcmUgdXNlZCwKKyAqIGJ5IGNvbnRyYXN0IHdpdGggTUJFRFRMU19IQVZFX1RJTUVfREFURQorICoKKyAqIERlZmluaW5nIE1CRURUTFNfSEFWRV9USU1FIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxULAorICogTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPLCBNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTyBhbmQKKyAqIE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUuCisgKgorICogQ29tbWVudCBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IHRpbWUgZnVuY3Rpb25zCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hBVkVfVElNRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX1RJTUVfREFURQorICoKKyAqIFN5c3RlbSBoYXMgdGltZS5oIGFuZCB0aW1lKCksIGdtdGltZSgpIGFuZCB0aGUgY2xvY2sgaXMgY29ycmVjdC4KKyAqIFRoZSB0aW1lIG5lZWRzIHRvIGJlIGNvcnJlY3QgKG5vdCBuZWNlc2FyaWx5IHZlcnkgYWNjdXJhdGUsIGJ1dCBhdCBsZWFzdAorICogdGhlIGRhdGUgc2hvdWxkIGJlIGNvcnJlY3QpLiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBwZXJpb2Qgb2YKKyAqIFguNTA5IGNlcnRpZmljYXRlcy4KKyAqCisgKiBDb21tZW50IGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgYSBjb3JyZWN0IGNsb2NrLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUVfREFURQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9NRU1PUlkKKyAqCisgKiBFbmFibGUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxheWVyLgorICoKKyAqIEJ5IGRlZmF1bHQgbWJlZCBUTFMgdXNlcyB0aGUgc3lzdGVtLXByb3ZpZGVkIGNhbGxvYygpIGFuZCBmcmVlKCkuCisgKiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgYWxsb2NhdG9ycyAoc2VsZi1pbXBsZW1lbnRlZCBvciBwcm92aWRlZCkgdG8gYmUKKyAqIHByb3ZpZGVkIHRvIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBsYXllci4KKyAqCisgKiBFbmFibGluZyBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSB3aXRob3V0IHRoZQorICogTUJFRFRMU19QTEFURk9STV97RlJFRSxDQUxMT0N9X01BQ1JPcyB3aWxsIHByb3ZpZGUKKyAqICJtYmVkdGxzX3BsYXRmb3JtX3NldF9jYWxsb2NfZnJlZSgpIiBhbGxvd2luZyB5b3UgdG8gc2V0IGFuIGFsdGVybmF0aXZlIGNhbGxvYygpIGFuZAorICogZnJlZSgpIGZ1bmN0aW9uIHBvaW50ZXIgYXQgcnVudGltZS4KKyAqCisgKiBFbmFibGluZyBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSBhbmQgc3BlY2lmeWluZworICogTUJFRFRMU19QTEFURk9STV97Q0FMTE9DLEZSRUV9X01BQ1JPcyB3aWxsIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoZQorICogYWx0ZXJuYXRlIGZ1bmN0aW9uIGF0IGNvbXBpbGUgdGltZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QTEFURk9STV9DCisgKgorICogRW5hYmxlIHRoaXMgbGF5ZXIgdG8gYWxsb3cgdXNlIG9mIGFsdGVybmF0aXZlIG1lbW9yeSBhbGxvY2F0b3JzLgorICovCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKyAqCisgKiBEbyBub3QgYXNzaWduIHN0YW5kYXJkIGZ1bmN0aW9ucyBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIgKGUuZy4gY2FsbG9jKCkgdG8KKyAqIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyBhbmQgcHJpbnRmKCkgdG8gTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGKQorICoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGVyZSBhcmUgbm8gbGlua2luZyBlcnJvcnMgb24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAqIHRoZXNlIGZ1bmN0aW9ucy4gWW91IHdpbGwgSEFWRSB0byBwcm92aWRlIGFsdGVybmF0aXZlcywgZWl0aGVyIGF0IHJ1bnRpbWUKKyAqIHZpYSB0aGUgcGxhdGZvcm1fc2V0X3h4eCgpIGZ1bmN0aW9ucyBvciBhdCBjb21waWxlIHRpbWUgYnkgc2V0dGluZworICogdGhlIE1CRURUTFNfUExBVEZPUk1fU1REX1hYWCBkZWZpbmVzLCBvciBlbmFibGluZyBhCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9NQUNSTy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QTEFURk9STV9DCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgZGVmYXVsdCBhc3NpZ25tZW50IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBpbiB0aGUKKyAqIHBsYXRmb3JtIGxheWVyLgorICovCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorICoKKyAqIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVDogVW5jb21tZW50IGEgbWFjcm8gdG8gbGV0IG1iZWQgVExTIHN1cHBvcnQgdGhlCisgKiBmdW5jdGlvbiBpbiB0aGUgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCwgbWJlZCBUTFMgd2lsbAorICogcHJvdmlkZSBhIGZ1bmN0aW9uICJtYmVkdGxzX3BsYXRmb3JtX3NldF9wcmludGYoKSIgdGhhdCBhbGxvd3MgeW91IHRvIHNldCBhbgorICogYWx0ZXJuYXRpdmUgcHJpbnRmIGZ1bmN0aW9uIHBvaW50ZXIuCisgKgorICogQWxsIHRoZXNlIGRlZmluZSByZXF1aXJlIE1CRURUTFNfUExBVEZPUk1fQyB0byBiZSBkZWZpbmVkIQorICoKKyAqIFxub3RlIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3M7CisgKiBpdCB3aWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseSBieSBjaGVja19jb25maWcuaAorICoKKyAqIFx3YXJuaW5nIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVCBjYW5ub3QgYmUgZGVmaW5lZCBhdCB0aGUgc2FtZSB0aW1lIGFzCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9NQUNSTyEKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCByZXF1aXJlcyBNQkVEVExTX0hBVkVfVElNRQorICoKKyAqIFVuY29tbWVudCBhIG1hY3JvIHRvIGVuYWJsZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2Ygc3BlY2lmaWMgYmFzZQorICogcGxhdGZvcm0gZnVuY3Rpb24KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcKKyAqCisgKiBNYXJrIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIHNvIHRoYXQgdGhleSBnZW5lcmF0ZSBhIHdhcm5pbmcgaWYgdXNlZC4KKyAqIEZ1bmN0aW9ucyBkZXByZWNhdGVkIGluIG9uZSB2ZXJzaW9uIHdpbGwgdXN1YWxseSBiZSByZW1vdmVkIGluIHRoZSBuZXh0CisgKiB2ZXJzaW9uLiBZb3UgY2FuIGVuYWJsZSB0aGlzIHRvIGhlbHAgeW91IHByZXBhcmUgdGhlIHRyYW5zaXRpb24gdG8gYSBuZXcKKyAqIG1ham9yIHZlcnNpb24gYnkgbWFraW5nIHN1cmUgeW91ciBjb2RlIGlzIG5vdCB1c2luZyB0aGVzZSBmdW5jdGlvbnMuCisgKgorICogVGhpcyBvbmx5IHdvcmtzIHdpdGggR0NDIGFuZCBDbGFuZy4gV2l0aCBvdGhlciBjb21waWxlcnMsIHlvdSBtYXkgd2FudCB0bworICogdXNlIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECisgKgorICogVW5jb21tZW50IHRvIGdldCB3YXJuaW5ncyBvbiB1c2luZyBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorICoKKyAqIFJlbW92ZSBkZXByZWNhdGVkIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgZ2VuZXJhdGUgYW4gZXJyb3IgaWYgdXNlZC4KKyAqIEZ1bmN0aW9ucyBkZXByZWNhdGVkIGluIG9uZSB2ZXJzaW9uIHdpbGwgdXN1YWxseSBiZSByZW1vdmVkIGluIHRoZSBuZXh0CisgKiB2ZXJzaW9uLiBZb3UgY2FuIGVuYWJsZSB0aGlzIHRvIGhlbHAgeW91IHByZXBhcmUgdGhlIHRyYW5zaXRpb24gdG8gYSBuZXcKKyAqIG1ham9yIHZlcnNpb24gYnkgbWFraW5nIHN1cmUgeW91ciBjb2RlIGlzIG5vdCB1c2luZyB0aGVzZSBmdW5jdGlvbnMuCisgKgorICogVW5jb21tZW50IHRvIGdldCBlcnJvcnMgb24gdXNpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorCisvKiBcfSBuYW1lIFNFQ1RJT046IFN5c3RlbSBzdXBwb3J0ICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0CisgKgorICogVGhpcyBzZWN0aW9uIHNldHMgc3VwcG9ydCBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgb3IgYXJlIG5vdCBuZWVkZWQKKyAqIHdpdGhpbiB0aGUgbW9kdWxlcyB0aGF0IGFyZSBlbmFibGVkLgorICogXHsKKyAqLworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USU1JTkdfQUxUCisgKgorICogVW5jb21tZW50IHRvIHByb3ZpZGUgeW91ciBvd24gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIGZvciBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKSwKKyAqIG1iZWR0bHNfdGltaW5nX2dldF90aW1lcigpLCBtYmVkdGxzX3NldF9hbGFybSgpLCBtYmVkdGxzX3NldC9nZXRfZGVsYXkoKQorICoKKyAqIE9ubHkgd29ya3MgaWYgeW91IGhhdmUgTUJFRFRMU19USU1JTkdfQyBlbmFibGVkLgorICoKKyAqIFlvdSB3aWxsIG5lZWQgdG8gcHJvdmlkZSBhIGhlYWRlciAidGltaW5nX2FsdC5oIiBhbmQgYW4gaW1wbGVtZW50YXRpb24gYXQKKyAqIGNvbXBpbGUgdGltZS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVElNSU5HX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfQUxUCisgKgorICogTUJFRFRMU19fTU9EVUxFX05BTUVfX0FMVDogVW5jb21tZW50IGEgbWFjcm8gdG8gbGV0IG1iZWQgVExTIHVzZSB5b3VyCisgKiBhbHRlcm5hdGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHN5bW1ldHJpYyBjcnlwdG8gb3IgaGFzaCBtb2R1bGUgKGUuZy4KKyAqIHBsYXRmb3JtIHNwZWNpZmljIGFzc2VtYmx5IG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMpLiBLZWVwIGluIG1pbmQgdGhhdAorICogdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KKyAqCisgKiBUaGlzIHJlcGxhY2VzIHRoZSB3aG9sZSBtb2R1bGUuIElmIHlvdSBvbmx5IHdhbnQgdG8gcmVwbGFjZSBvbmUgb2YgdGhlCisgKiBmdW5jdGlvbnMsIHVzZSBvbmUgb2YgdGhlIE1CRURUTFNfX0ZVTkNUSU9OX05BTUVfX0FMVCBmbGFncy4KKyAqCisgKiBFeGFtcGxlOiBJbiBjYXNlIHlvdSB1bmNvbW1lbnQgTUJFRFRMU19BRVNfQUxULCBtYmVkIFRMUyB3aWxsIG5vIGxvbmdlcgorICogcHJvdmlkZSB0aGUgInN0cnVjdCBtYmVkdGxzX2Flc19jb250ZXh0IiBkZWZpbml0aW9uIGFuZCBvbWl0IHRoZSBiYXNlIGZ1bmN0aW9uCisgKiBkZWNsYXJhdGlvbnMgYW5kIGltcGxlbWVudGF0aW9ucy4gImFlc19hbHQuaCIgd2lsbCBiZSBpbmNsdWRlZCBmcm9tCisgKiAiYWVzLmgiIHRvIGluY2x1ZGUgdGhlIG5ldyBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKyAqCisgKiBVbmNvbW1lbnQgYSBtYWNybyB0byBlbmFibGUgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiBtb2R1bGUuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0FFU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FSQzRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0NBTUVMTElBX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfWFRFQV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX01EMl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX01ENF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX01ENV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTFfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorICoKKyAqIE1CRURUTFNfX0ZVTkNUSU9OX05BTUVfX0FMVDogVW5jb21tZW50IGEgbWFjcm8gdG8gbGV0IG1iZWQgVExTIHVzZSB5b3UKKyAqIGFsdGVybmF0ZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHN5bW1ldHJpYyBjcnlwdG8gb3IgaGFzaCBmdW5jdGlvbi4gS2VlcCBpbgorICogbWluZCB0aGF0IGZ1bmN0aW9uIHByb3RvdHlwZXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KKyAqCisgKiBUaGlzIHJlcGxhY2VzIG9ubHkgb25lIGZ1bmN0aW9uLiBUaGUgaGVhZGVyIGZpbGUgZnJvbSBtYmVkIFRMUyBpcyBzdGlsbAorICogdXNlZCwgaW4gY29udHJhc3QgdG8gdGhlIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxULCBtYmVkIFRMUyB3aWxsCisgKiBubyBsb25nZXIgcHJvdmlkZSB0aGUgbWJlZHRsc19zaGExX3Byb2Nlc3MoKSBmdW5jdGlvbiwgYnV0IGl0IHdpbGwgc3RpbGwgcHJvdmlkZQorICogdGhlIG90aGVyIGZ1bmN0aW9uICh1c2luZyB5b3VyIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCkgZnVuY3Rpb24pIGFuZCB0aGUgZGVmaW5pdGlvbgorICogb2YgbWJlZHRsc19zaGExX2NvbnRleHQsIHNvIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgbWJlZHRsc19zaGExX3Byb2Nlc3MgbXVzdCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIHRoaXMgZGVmaW5pdGlvbi4KKyAqCisgKiBOb3RlOiBpZiB5b3UgdXNlIHRoZSBBRVNfeHh4X0FMVCBtYWNyb3MsIHRoZW4gaXMgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyBzZXQKKyAqIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMgaW4gb3JkZXIgdG8gaGVscCB0aGUgbGlua2VyIGdhcmJhZ2UtY29sbGVjdCB0aGUgQUVTCisgKiB0YWJsZXMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogZnVuY3Rpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFU19TRVRLRVlfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQ1JZUFRfRUNCX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTM19DUllQVF9FQ0JfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX0VOQ1JZUFRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfREVDUllQVF9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKKyAqCisgKiBFbmFibGVzIHRlc3RpbmcgYW5kIHVzZSBvZiBtYmVkIFRMUyB3aXRob3V0IGFueSBjb25maWd1cmVkIGVudHJvcHkgc291cmNlcy4KKyAqIFRoaXMgcGVybWl0cyB1c2Ugb2YgdGhlIGxpYnJhcnkgb24gcGxhdGZvcm1zIGJlZm9yZSBhbiBlbnRyb3B5IHNvdXJjZSBoYXMKKyAqIGJlZW4gaW50ZWdyYXRlZCAoc2VlIGZvciBleGFtcGxlIHRoZSBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUIG9yIHRoZQorICogTUJFRFRMU19FTlRST1BZX05WX1NFRUQgc3dpdGNoZXMpLgorICoKKyAqIFdBUk5JTkchIFRoaXMgc3dpdGNoIE1VU1QgYmUgZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMsIGFuZCBpcyBzdWl0YWJsZQorICogb25seSBmb3IgZGV2ZWxvcG1lbnQuCisgKiBFbmFibGluZyB0aGUgc3dpdGNoIG5lZ2F0ZXMgYW55IHNlY3VyaXR5IHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5LgorICoKKyAqIFJlcXVpcmVzIE1CRURUTFNfRU5UUk9QWV9DLCBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisgKgorICovCisvLyNkZWZpbmUgTUJFRFRMU19URVNUX05VTExfRU5UUk9QWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVAorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgYQorICogaGFyZHdhcmUgZW50cm9weSBjb2xsZWN0b3IuCisgKgorICogWW91ciBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBcYyBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoKSwgaGF2ZSB0aGUgc2FtZQorICogcHJvdG90eXBlIGFzIGRlY2xhcmVkIGluIGVudHJvcHlfcG9sbC5oLCBhbmQgYWNjZXB0IE5VTEwgYXMgZmlyc3QgYXJndW1lbnQuCisgKgorICogVW5jb21tZW50IHRvIHVzZSB5b3VyIG93biBoYXJkd2FyZSBlbnRyb3B5IGNvbGxlY3Rvci4KKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FFU19ST01fVEFCTEVTCisgKgorICogU3RvcmUgdGhlIEFFUyB0YWJsZXMgaW4gUk9NLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIHN0b3JlIHRoZSBBRVMgdGFibGVzIGluIFJPTS4KKyAqLworI2RlZmluZSBNQkVEVExTX0FFU19ST01fVEFCTEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWQorICoKKyAqIFVzZSBsZXNzIFJPTSBmb3IgdGhlIENhbWVsbGlhIGltcGxlbWVudGF0aW9uIChzYXZlcyBhYm91dCA3NjggYnl0ZXMpLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIHVzZSBsZXNzIG1lbW9yeSBmb3IgQ2FtZWxsaWEuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKKyAqCisgKiBFbmFibGUgQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUgKENCQykgZm9yIHN5bW1ldHJpYyBjaXBoZXJzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCisgKgorICogRW5hYmxlIENpcGhlciBGZWVkYmFjayBtb2RlIChDRkIpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorICoKKyAqIEVuYWJsZSBDb3VudGVyIEJsb2NrIENpcGhlciBtb2RlIChDVFIpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorICoKKyAqIEVuYWJsZSBOVUxMIGNpcGhlci4KKyAqIFdhcm5pbmc6IE9ubHkgZG8gc28gd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFRoaXMgYWxsb3dzIGZvcgorICogZW5jcnlwdGlvbiBvciBjaGFubmVscyB3aXRob3V0IGFueSBzZWN1cml0eSEKKyAqCisgKiBSZXF1aXJlcyBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUyBhcyB3ZWxsIHRvIGVuYWJsZQorICogdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXM6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9NRDUKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgdGhlIE5VTEwgY2lwaGVyIGFuZCBjaXBoZXJzdWl0ZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisgKgorICogTUJFRFRMU19DSVBIRVJfUEFERElOR19YWFg6IFVuY29tbWVudCBvciBjb21tZW50IG1hY3JvcyB0byBhZGQgc3VwcG9ydCBmb3IKKyAqIHNwZWNpZmljIHBhZGRpbmcgbW9kZXMgaW4gdGhlIGNpcGhlciBsYXllciB3aXRoIGNpcGhlciBtb2RlcyB0aGF0IHN1cHBvcnQKKyAqIHBhZGRpbmcgKGUuZy4gQ0JDKQorICoKKyAqIElmIHlvdSBkaXNhYmxlIGFsbCBwYWRkaW5nIG1vZGVzLCBvbmx5IGZ1bGwgYmxvY2tzIGNhbiBiZSB1c2VkIHdpdGggQ0JDLgorICoKKyAqIEVuYWJsZSBwYWRkaW5nIG1vZGVzIGluIHRoZSBjaXBoZXIgbGF5ZXIuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMKKyAqCisgKiBFbmFibGUgd2VhayBjaXBoZXJzdWl0ZXMgaW4gU1NMIC8gVExTLgorICogV2FybmluZzogT25seSBkbyBzbyB3aGVuIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gVGhpcyBhbGxvd3MgZm9yCisgKiBjaGFubmVscyB3aXRoIHZpcnR1YWxseSBubyBzZWN1cml0eSBhdCBhbGwhCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzOgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgd2VhayBjaXBoZXJzdWl0ZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworICoKKyAqIFJlbW92ZSBSQzQgY2lwaGVyc3VpdGVzIGJ5IGRlZmF1bHQgaW4gU1NMIC8gVExTLgorICogVGhpcyBmbGFnIHJlbW92ZXMgdGhlIGNpcGhlcnN1aXRlcyBiYXNlZCBvbiBSQzQgZnJvbSB0aGUgZGVmYXVsdCBsaXN0IGFzCisgKiByZXR1cm5lZCBieSBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcygpLiBIb3dldmVyLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICogZW5hYmxlIChzb21lIG9mKSB0aGVtIHdpdGggbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoKSBieSBpbmNsdWRpbmcgdGhlbQorICogZXhwbGljaXRseS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZW1vdmUgUkM0IGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0LgorICovCisvLyNkZWZpbmUgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECisgKgorICogTUJFRFRMU19FQ1BfWFhYWF9FTkFCTEVEOiBFbmFibGVzIHNwZWNpZmljIGN1cnZlcyB3aXRoaW4gdGhlIEVsbGlwdGljIEN1cnZlCisgKiBtb2R1bGUuICBCeSBkZWZhdWx0IGFsbCBzdXBwb3J0ZWQgY3VydmVzIGFyZSBlbmFibGVkLgorICoKKyAqIENvbW1lbnQgbWFjcm9zIHRvIGRpc2FibGUgdGhlIGN1cnZlIGFuZCBmdW5jdGlvbnMgZm9yIGl0CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVECisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQKKy8vI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorLy8jZGVmaW5lIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ1BfTklTVF9PUFRJTQorICoKKyAqIEVuYWJsZSBzcGVjaWZpYyAnbW9kdWxvIHAnIHJvdXRpbmVzIGZvciBlYWNoIE5JU1QgcHJpbWUuCisgKiBEZXBlbmRpbmcgb24gdGhlIHByaW1lIGFuZCBhcmNoaXRlY3R1cmUsIG1ha2VzIG9wZXJhdGlvbnMgNCB0byA4IHRpbWVzCisgKiBmYXN0ZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgY3VydmUuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgTklTVCBjdXJ2ZXMgb3B0aW1pc2F0aW9uLgorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQworICoKKyAqIEVuYWJsZSBkZXRlcm1pbmlzdGljIEVDRFNBIChSRkMgNjk3OSkuCisgKiBTdGFuZGFyZCBFQ0RTQSBpcyAiZnJhZ2lsZSIgaW4gdGhlIHNlbnNlIHRoYXQgbGFjayBvZiBlbnRyb3B5IHdoZW4gc2lnbmluZworICogbWF5IHJlc3VsdCBpbiBhIGNvbXByb21pc2Ugb2YgdGhlIGxvbmctdGVybSBzaWduaW5nIGtleS4gVGhpcyBpcyBhdm9pZGVkIGJ5CisgKiB0aGUgZGV0ZXJtaW5pc3RpYyB2YXJpYW50LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0hNQUNfRFJCR19DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIFBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgREhFLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfREhNX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1QU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBSU0EtUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUlNBLW9ubHkgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DLCBNQkVEVExTX1BLQ1MxX1YxNSwKKyAqICAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBESEUtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ESE1fQywgTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREhFLVJTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX1JTQV9DLCBNQkVEVExTX1BLQ1MxX1YxNSwKKyAqICAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESEUtRUNEU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19FQ0RTQV9DLCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MsCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RILUVDRFNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgRUNESC1SU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICovCisvLyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0pQQUtFIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBcd2FybmluZyBUaGlzIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwuIEVDIEotUEFLRSBzdXBwb3J0IGlzIGJhc2VkIG9uIHRoZQorICogVGhyZWFkIHYxLjAuMCBzcGVjaWZpY2F0aW9uOyBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWNhdGlvbgorICogbWlnaHQgc3RpbGwgaGFwcGVuLiBGb3IgdGhpcyByZWFzb24sIHRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0pQQUtFX0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTI1Nl9DCisgKiAgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOAorICovCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorICoKKyAqIEVuaGFuY2Ugc3VwcG9ydCBmb3IgcmVhZGluZyBFQyBrZXlzIHVzaW5nIHZhcmlhbnRzIG9mIFNFQzEgbm90IGFsbG93ZWQgYnkKKyAqIFJGQyA1OTE1IGFuZCBSRkMgNTQ4MC4KKyAqCisgKiBDdXJyZW50bHkgdGhpcyBtZWFucyBwYXJzaW5nIHRoZSBTcGVjaWZpZWRFQ0RvbWFpbiBjaG9pY2Ugb2YgRUMKKyAqIHBhcmFtZXRlcnMgKG9ubHkga25vd24gZ3JvdXBzIGFyZSBzdXBwb3J0ZWQsIG5vdCBhcmJpdHJhcnkgZG9tYWlucywgdG8KKyAqIGF2b2lkIHZhbGlkYXRpb24gaXNzdWVzKS4KKyAqCisgKiBEaXNhYmxlIGlmIHlvdSBvbmx5IG5lZWQgdG8gc3VwcG9ydCBSRkMgNTkxNSArIDU0ODAga2V5IGZvcm1hdHMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZCisgKgorICogRW5hYmxlIGEgZHVtbXkgZXJyb3IgZnVuY3Rpb24gdG8gbWFrZSB1c2Ugb2YgbWJlZHRsc19zdHJlcnJvcigpIGluCisgKiB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgZWFzaWVyIHdoZW4gTUJFRFRMU19FUlJPUl9DIGlzIGRpc2FibGVkCisgKiAobm8gZWZmZWN0IHdoZW4gTUJFRFRMU19FUlJPUl9DIGlzIGVuYWJsZWQpLgorICoKKyAqIFlvdSBjYW4gc2FmZWx5IGRpc2FibGUgdGhpcyBpZiBNQkVEVExTX0VSUk9SX0MgaXMgZW5hYmxlZCwgb3IgaWYgeW91J3JlCisgKiBub3QgdXNpbmcgbWJlZHRsc19zdHJlcnJvcigpIG9yIGVycm9yX3N0cmVycm9yKCkgaW4geW91ciBhcHBsaWNhdGlvbi4KKyAqCisgKiBEaXNhYmxlIGlmIHlvdSBydW4gaW50byBuYW1lIGNvbmZsaWN0cyBhbmQgd2FudCB0byByZWFsbHkgcmVtb3ZlIHRoZQorICogbWJlZHRsc19zdHJlcnJvcigpCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZCisKKy8qKgorICogXGRlZiBNQkVEVExTX0dFTlBSSU1FCisgKgorICogRW5hYmxlIHRoZSBwcmltZS1udW1iZXIgZ2VuZXJhdGlvbiBjb2RlLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0dFTlBSSU1FCisKKy8qKgorICogXGRlZiBNQkVEVExTX0ZTX0lPCisgKgorICogRW5hYmxlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGUgZmlsZXN5c3RlbS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRlNfSU8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKKyAqCisgKiBEbyBub3QgYWRkIGRlZmF1bHQgZW50cm9weSBzb3VyY2VzLiBUaGVzZSBhcmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljLAorICogbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrIGFuZCBIQVZFR0UgYmFzZWQgcG9sbCBmdW5jdGlvbnMuCisgKgorICogVGhpcyBpcyB1c2VmdWwgdG8gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgYWRkZWQgZW50cm9weSBzb3VyY2VzIGluIGFuCisgKiBhcHBsaWNhdGlvbi4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBwcmV2ZW50IGxvYWRpbmcgb2YgZGVmYXVsdCBlbnRyb3B5IGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorICoKKyAqIERvIG5vdCB1c2UgYnVpbHQtaW4gcGxhdGZvcm0gZW50cm9weSBmdW5jdGlvbnMuCisgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQKKyAqIHN0YW5kYXJkcyBsaWtlIHRoZSAvZGV2L3VyYW5kb20gb3IgV2luZG93cyBDcnlwdG9BUEkuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSB0aGUgYnVpbHQtaW4gcGxhdGZvcm0gZW50cm9weSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2CisgKgorICogRm9yY2UgdGhlIGVudHJvcHkgYWNjdW11bGF0b3IgdG8gdXNlIGEgU0hBLTI1NiBhY2N1bXVsYXRvciBpbnN0ZWFkIG9mIHRoZQorICogZGVmYXVsdCBTSEEtNTEyIGJhc2VkIG9uZSAoaWYgYm90aCBhcmUgYXZhaWxhYmxlKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TSEEyNTZfQworICoKKyAqIE9uIDMyLWJpdCBzeXN0ZW1zIFNIQS0yNTYgY2FuIGJlIG11Y2ggZmFzdGVyIHRoYW4gU0hBLTUxMi4gVXNlIHRoaXMgb3B0aW9uCisgKiBpZiB5b3UgaGF2ZSBwZXJmb3JtYW5jZSBjb25jZXJucy4KKyAqCisgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBpZiBib3RoIE1CRURUTFNfU0hBMjU2X0MgYW5kCisgKiBNQkVEVExTX1NIQTUxMl9DIGFyZSBkZWZpbmVkLiBPdGhlcndpc2UgdGhlIGF2YWlsYWJsZSBoYXNoIG1vZHVsZSBpcyB1c2VkLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX05WX1NFRUQKKyAqCisgKiBFbmFibGUgdGhlIG5vbi12b2xhdGlsZSAoTlYpIHNlZWQgZmlsZS1iYXNlZCBlbnRyb3B5IHNvdXJjZS4KKyAqIChBbHNvIGVuYWJsZXMgdGhlIE5WIHNlZWQgcmVhZC93cml0ZSBmdW5jdGlvbnMgaW4gdGhlIHBsYXRmb3JtIGxheWVyKQorICoKKyAqIFRoaXMgaXMgY3J1Y2lhbCAoaWYgbm90IHJlcXVpcmVkKSBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYQorICogY3J5cHRvZ3JhcGhpYyBlbnRyb3B5IHNvdXJjZSAoaW4gaGFyZHdhcmUgb3Iga2VybmVsKSBhdmFpbGFibGUuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRU5UUk9QWV9DLCBNQkVEVExTX1BMQVRGT1JNX0MKKyAqCisgKiBcbm90ZSBUaGUgcmVhZC93cml0ZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBieSB0aGUgZW50cm9weSBzb3VyY2UgYXJlCisgKiAgICAgICBkZXRlcm1pbmVkIGluIHRoZSBwbGF0Zm9ybSBsYXllciwgYW5kIGNhbiBiZSBtb2RpZmllZCBhdCBydW50aW1lIGFuZC9vcgorICogICAgICAgY29tcGlsZS10aW1lIGRlcGVuZGluZyBvbiB0aGUgZmxhZ3MgKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF8qKSB1c2VkLgorICoKKyAqIFxub3RlIElmIHlvdSB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zIHRoYXQgcmVhZCBhIHNlZWRmaWxlCisgKiAgICAgICB3aXRoIHJlZ3VsYXIgZm9wZW4oKSwgcGxlYXNlIG1ha2Ugc3VyZSB5b3UgbWFrZSBhIHNlZWRmaWxlIHdpdGggdGhlCisgKiAgICAgICBwcm9wZXIgbmFtZSAoZGVmaW5lZCBpbiBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX0ZJTEUpIGFuZCBhdAorICogICAgICAgbGVhc3QgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgYnl0ZXMgaW4gc2l6ZSB0aGF0IGNhbiBiZSByZWFkIGZyb20KKyAqICAgICAgIGFuZCB3cml0dGVuIHRvIG9yIHlvdSB3aWxsIGdldCBhbiBlbnRyb3B5IHNvdXJjZSBlcnJvciEgVGhlIGRlZmF1bHQKKyAqICAgICAgIGltcGxlbWVudGF0aW9uIHdpbGwgb25seSB1c2UgdGhlIGZpcnN0IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFCisgKiAgICAgICBieXRlcyBmcm9tIHRoZSBmaWxlLgorICoKKyAqIFxub3RlIFRoZSBlbnRyb3B5IGNvbGxlY3RvciB3aWxsIHdyaXRlIHRvIHRoZSBzZWVkIGZpbGUgYmVmb3JlIGVudHJvcHkgaXMKKyAqICAgICAgIGdpdmVuIHRvIGFuIGV4dGVybmFsIHNvdXJjZSwgdG8gdXBkYXRlIGl0LgorICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX05WX1NFRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0RFQlVHCisgKgorICogRW5hYmxlIGRlYnVnZ2luZyBvZiBidWZmZXIgYWxsb2NhdG9yIG1lbW9yeSBpc3N1ZXMuIEF1dG9tYXRpY2FsbHkgcHJpbnRzCisgKiAodG8gc3RkZXJyKSBhbGwgKGZhdGFsKSBtZXNzYWdlcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEVuYWJsZXMKKyAqIGZ1bmN0aW9uIGZvciAnZGVidWcgb3V0cHV0JyBvZiBhbGxvY2F0ZWQgbWVtb3J5LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGxldCB0aGUgYnVmZmVyIGFsbG9jYXRvciBwcmludCBvdXQgZXJyb3IgbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9ERUJVRworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisgKgorICogSW5jbHVkZSBiYWNrdHJhY2UgaW5mb3JtYXRpb24gd2l0aCBlYWNoIGFsbG9jYXRlZCBibG9jay4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAqICAgICAgICAgICBHTElCQy1jb21wYXRpYmxlIGJhY2t0cmFjZSgpIGFuIGJhY2t0cmFjZV9zeW1ib2xzKCkgc3VwcG9ydAorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGluY2x1ZGUgYmFja3RyYWNlIGluZm9ybWF0aW9uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisgKgorICogU3VwcG9ydCBleHRlcm5hbCBwcml2YXRlIFJTQSBrZXlzIChlZyBmcm9tIGEgSFNNKSBpbiB0aGUgUEsgbGF5ZXIuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgcHJpdmF0ZSBSU0Ega2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxX1YxNQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBlbmNvZGluZy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQworICoKKyAqIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQS0NTIzEgdjEuNSBvcGVyYXRpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMTUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzFfVjIxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2Mi4xIGVuY29kaW5nLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MsIE1CRURUTFNfUlNBX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUlNBRVMtT0FFUCBhbmQgUlNBU1NBLVBTUyBvcGVyYXRpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMjEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUlNBX05PX0NSVAorICoKKyAqIERvIG5vdCB1c2UgdGhlIENoaW5lc2UgUmVtYWluZGVyIFRoZW9yZW0gZm9yIHRoZSBSU0EgcHJpdmF0ZSBvcGVyYXRpb24uCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSB0aGUgdXNlIG9mIENSVCBpbiBSU0EuCisgKgorICovCisvLyNkZWZpbmUgTUJFRFRMU19SU0FfTk9fQ1JUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NFTEZfVEVTVAorICoKKyAqIEVuYWJsZSB0aGUgY2hlY2t1cCBmdW5jdGlvbnMgKCpfc2VsZl90ZXN0KS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU0VMRl9URVNUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSCisgKgorICogRW5hYmxlIGFuIGltcGxlbWVudGF0aW9uIG9mIFNIQS0yNTYgdGhhdCBoYXMgbG93ZXIgUk9NIGZvb3RwcmludCBidXQgYWxzbworICogbG93ZXIgcGVyZm9ybWFuY2UuCisgKgorICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgbWVhbnQgdG8gYmUgYSByZWFzb25uYWJsZSBjb21wcm9taXNlIGJldHdlZW4KKyAqIHBlcmZvcm1hbmNlIGFuZCBzaXplLiBUaGlzIHZlcnNpb24gb3B0aW1pemVzIG1vcmUgYWdncmVzc2l2ZWx5IGZvciBzaXplIGF0CisgKiB0aGUgZXhwZW5zZSBvZiBwZXJmb3JtYW5jZS4gRWcgb24gQ29ydGV4LU00IGl0IHJlZHVjZXMgdGhlIHNpemUgb2YKKyAqIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MoKSBmcm9tIH4yS0IgdG8gfjAuNUtCIGZvciBhIHBlcmZvcm1hbmNlIGhpdCBvZiBhYm91dAorICogMzAlLgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIHNtYWxsZXIgaW1wbGVtZW50YXRpb24gb2YgU0hBMjU2LgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X1NNQUxMRVIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworICoKKyAqIEVuYWJsZSBzZW5kaW5nIG9mIGFsZXJ0IG1lc3NhZ2VzIGluIGNhc2Ugb2YgZW5jb3VudGVyZWQgZXJyb3JzIGFzIHBlciBSRkMuCisgKiBJZiB5b3UgY2hvb3NlIG5vdCB0byBzZW5kIHRoZSBhbGVydCBtZXNzYWdlcywgbWJlZCBUTFMgY2FuIHN0aWxsIGNvbW11bmljYXRlCisgKiB3aXRoIG90aGVyIHNlcnZlcnMsIG9ubHkgZGVidWdnaW5nIG9mIGZhaWx1cmVzIGlzIGhhcmRlci4KKyAqCisgKiBUaGUgYWR2YW50YWdlIG9mIG5vdCBzZW5kaW5nIGFsZXJ0IG1lc3NhZ2VzLCBpcyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGdpdmVuCisgKiBhYm91dCByZWFzb25zIGZvciBmYWlsdXJlcyB0aHVzIHByZXZlbnRpbmcgYWR2ZXJzYXJpZXMgb2YgZ2FpbmluZyBpbnRlbC4KKyAqCisgKiBFbmFibGUgc2VuZGluZyBvZiBhbGwgYWxlcnQgbWVzc2FnZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfREVCVUdfQUxMCisgKgorICogRW5hYmxlIHRoZSBkZWJ1ZyBtZXNzYWdlcyBpbiBTU0wgbW9kdWxlIGZvciBhbGwgaXNzdWVzLgorICogRGVidWcgbWVzc2FnZXMgaGF2ZSBiZWVuIGRpc2FibGVkIGluIHNvbWUgcGxhY2VzIHRvIHByZXZlbnQgdGltaW5nCisgKiBhdHRhY2tzIGR1ZSB0byAodW5iYWxhbmNlZCkgZGVidWdnaW5nIGZ1bmN0aW9uIGNhbGxzLgorICoKKyAqIElmIHlvdSBuZWVkIGFsbCBlcnJvciByZXBvcnRpbmcgeW91IHNob3VsZCBlbmFibGUgdGhpcyBkdXJpbmcgZGVidWdnaW5nLAorICogYnV0IHJlbW92ZSB0aGlzIGZvciBwcm9kdWN0aW9uIHNlcnZlcnMgdGhhdCBzaG91bGQgbG9nIGFzIHdlbGwuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gcmVwb3J0IGFsbCBkZWJ1ZyBtZXNzYWdlcyBvbiBlcnJvcnMgaW50cm9kdWNpbmcKKyAqIGEgdGltaW5nIHNpZGUtY2hhbm5lbC4KKyAqCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfREVCVUdfQUxMCisKKy8qKiBcZGVmIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRW5jcnlwdC10aGVuLU1BQywgUkZDIDczNjYuCisgKgorICogVGhpcyBhbGxvd3MgcGVlcnMgdGhhdCBib3RoIHN1cHBvcnQgaXQgdG8gdXNlIGEgbW9yZSByb2J1c3QgcHJvdGVjdGlvbiBmb3IKKyAqIGNpcGhlcnN1aXRlcyB1c2luZyBDQkMsIHByb3ZpZGluZyBkZWVwIHJlc2lzdGFuY2UgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcworICogb24gdGhlIHBhZGRpbmcgb3IgdW5kZXJseWluZyBjaXBoZXIuCisgKgorICogVGhpcyBvbmx5IGFmZmVjdHMgQ0JDIGNpcGhlcnN1aXRlcywgYW5kIGlzIHVzZWxlc3MgaWYgbm9uZSBpcyBkZWZpbmVkLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxICAgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIEVuY3J5cHQtdGhlbi1NQUMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKworLyoqIFxkZWYgTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0LCBha2EgU2Vzc2lvbiBIYXNoCisgKiAoZHJhZnQtaWV0Zi10bHMtc2Vzc2lvbi1oYXNoLTAyKS4KKyAqCisgKiBUaGlzIHdhcyBpbnRyb2R1Y2VkIGFzICJ0aGUgcHJvcGVyIGZpeCIgdG8gdGhlIFRyaXBsZSBIYW5kc2hha2UgZmFtaWxpeSBvZgorICogYXR0YWNrcywgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyB1c2UgaXQgKGV2ZW4gaWYgeW91IGRpc2FibGUKKyAqIHJlbmVnb3RpYXRpb24pLCBzaW5jZSBpdCBhY3R1YWxseSBmaXhlcyBhIG1vcmUgZnVuZGFtZW50YWwgaXNzdWUgaW4gdGhlCisgKiBvcmlnaW5hbCBTU0wvVExTIGRlc2lnbiwgYW5kIGhhcyBpbXBsaWNhdGlvbnMgYmV5b25kIFRyaXBsZSBIYW5kc2hha2UuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgIG9yCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTViAoZHJhZnQtaWV0Zi10bHMtZG93bmdyYWRlLXNjc3YtMDApLgorICoKKyAqIEZvciBzZXJ2ZXJzLCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgZW5hYmxlIHRoaXMsIHVubGVzcyB5b3Ugc3VwcG9ydAorICogb25seSBvbmUgdmVyc2lvbiBvZiBUTFMsIG9yIGtub3cgZm9yIHN1cmUgdGhhdCBub25lIG9mIHlvdXIgY2xpZW50cworICogaW1wbGVtZW50cyBhIGZhbGxiYWNrIHN0cmF0ZWd5LgorICoKKyAqIEZvciBjbGllbnRzLCB5b3Ugb25seSBuZWVkIHRoaXMgaWYgeW91J3JlIHVzaW5nIGEgZmFsbGJhY2sgc3RyYXRlZ3ksIHdoaWNoCisgKiBpcyBub3QgcmVjb21tZW5kZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCB1bmxlc3MgeW91IGFic29sdXRlbHkgbmVlZCBpdCB0bworICogaW50ZXJvcGVyYXRlIHdpdGggYnVnZ3kgKHZlcnNpb24taW50b2xlcmFudCkgc2VydmVycy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBGQUxMQkFDS19TQ1NWCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKyAqCisgKiBFbmFibGUgaG9va2luZyBmdW5jdGlvbnMgaW4gU1NMIG1vZHVsZSBmb3IgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mCisgKiBpbmRpdmlkdWFsIHJlY29yZHMuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gZW5hYmxlIGhvb2tpbmcgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworICoKKyAqIEVuYWJsZSAxL24tMSByZWNvcmQgc3BsaXR0aW5nIGZvciBDQkMgbW9kZSBpbiBTU0x2MyBhbmQgVExTIDEuMC4KKyAqCisgKiBUaGlzIGlzIGEgY291bnRlcm1lYXN1cmUgdG8gdGhlIEJFQVNUIGF0dGFjaywgd2hpY2ggYWxzbyBtaW5pbWl6ZXMgdGhlIHJpc2sKKyAqIG9mIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIGNvbXBhcmVkIHRvIHNlbmRpbmcgMC1sZW5ndGggcmVjb3Jkcy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSAxL24tMSByZWNvcmQgc3BsaXR0aW5nLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KKyAqCisgKiBEaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyByZW5lZ290aWF0aW9uLgorICoKKyAqIFRoZSB0d28gbWFpbiB1c2VzIG9mIHJlbmVnb3RpYXRpb24gYXJlICgxKSByZWZyZXNoIGtleXMgb24gbG9uZy1saXZlZAorICogY29ubmVjdGlvbnMgYW5kICgyKSBjbGllbnQgYXV0aGVudGljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgaGFuZHNoYWtlLgorICogSWYgeW91IGRvbid0IG5lZWQgcmVuZWdvdGlhdGlvbiwgaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZGlzYWJsZSBpdCwgc2luY2UKKyAqIGl0IGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIHBhc3QgYW5kIGlzIGVhc3kgdG8KKyAqIG1pc3VzZS9taXN1bmRlcnN0YW5kLgorICoKKyAqIENvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHJlbmVnb3RpYXRpb24uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIGFuZCBwYXJzaW5nIFNTTHYyIENsaWVudCBIZWxsbyBtZXNzYWdlcyBmb3IgdGhlCisgKiBTU0wgU2VydmVyIG1vZHVsZSAoTUJFRFRMU19TU0xfU1JWX0MpLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBTU0x2MiBDbGllbnQgSGVsbG8gbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFCisgKgorICogUGljayB0aGUgY2lwaGVyc3VpdGUgYWNjb3JkaW5nIHRvIHRoZSBjbGllbnQncyBwcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBvdXJzCisgKiBpbiB0aGUgU1NMIFNlcnZlciBtb2R1bGUgKE1CRURUTFNfU1NMX1NSVl9DKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZXNwZWN0IGNsaWVudCdzIGNpcGhlcnN1aXRlIG9yZGVyCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdGhlIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19TU0wzCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUQ1X0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTFfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4xIChhbmQgRFRMUyAxLjAgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRDVfQworICogICAgICAgICAgIE1CRURUTFNfU0hBMV9DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgVExTIDEuMSAvIERUTFMgMS4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBUTFMgMS4yIChhbmQgRFRMUyAxLjIgaWYgRFRMUyBpcyBlbmFibGVkKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TSEExX0Mgb3IgTUJFRFRMU19TSEEyNTZfQyBvciBNQkVEVExTX1NIQTUxMl9DCisgKiAgICAgICAgICAgKERlcGVuZHMgb24gY2lwaGVyc3VpdGVzKQorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjIgLyBEVExTIDEuMgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBEVExTIChhbGwgYXZhaWxhYmxlIHZlcnNpb25zKS4KKyAqCisgKiBFbmFibGUgdGhpcyBhbmQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHRvIGVuYWJsZSBEVExTIDEuMCwKKyAqIGFuZC9vciB0aGlzIGFuZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgdG8gZW5hYmxlIERUTFMgMS4yLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKyAqICAgICAgICBvciBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBEVExTCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQUxQTgorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNzMwMSBBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBOZWdvdGlhdGlvbi4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBBTFBOLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQUxQTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYW50aS1yZXBsYXkgbWVjaGFuaXNtIGluIERUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGlzIG9mdGVuIGEgc2VjdXJpdHkgcmlzayEKKyAqIFNlZSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkoKSBmb3IgZGV0YWlscy4KKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBhbnRpLXJlcGxheSBpbiBEVExTLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEhlbGxvVmVyaWZ5UmVxdWVzdCBvbiBEVExTIHNlcnZlcnMuCisgKgorICogVGhpcyBmZWF0dXJlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBwcmV2ZW50IERUTFMgc2VydmVycyBiZWluZyB1c2VkIGFzCisgKiBhbXBsaWZpZXJzIGluIERvUyBhdHRhY2tzIGFnYWluc3Qgb3RoZXIgaG9zdHMuIEl0IHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZAorICogdW5sZXNzIHlvdSBrbm93IGZvciBzdXJlIGFtcGxpZmljYXRpb24gY2Fubm90IGJlIGEgcHJvYmxlbSBpbiB0aGUKKyAqIGVudmlyb25tZW50IGluIHdoaWNoIHlvdXIgc2VydmVyIG9wZXJhdGVzLgorICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGNhbiBiYSBhIHNlY3VyaXR5IHJpc2shIChzZWUgYWJvdmUpCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBIZWxsb1ZlcmlmeVJlcXVlc3QuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKyAqCisgKiBFbmFibGUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgY2xpZW50cyB0aGF0IHJlY29ubmVjdCBmcm9tIHRoZSBzYW1lIHBvcnQuCisgKgorICogU29tZSBjbGllbnRzIHVuZXhwZWN0ZWRseSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgdHJ5IHRvIHJlY29ubmVjdCB1c2luZyB0aGUKKyAqIHNhbWUgc291cmNlIHBvcnQuIFRoaXMgbmVlZHMgc3BlY2lhbCBzdXBwb3J0IGZyb20gdGhlIHNlcnZlciB0byBoYW5kbGUgdGhlCisgKiBuZXcgY29ubmVjdGlvbiBzZWN1cmVseSwgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gNC4yLjggb2YgUkZDIDYzNDcuIFRoaXMKKyAqIGZsYWcgZW5hYmxlcyB0aGF0IHN1cHBvcnQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgY2xpZW50cyByZXVzaW5nIHRoZSBzb3VyY2UgcG9ydC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIGEgbGltaXQgb2YgcmVjb3JkcyB3aXRoIGJhZCBNQUMuCisgKgorICogU2VlIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQoKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNTA3NyBzZXNzaW9uIHRpY2tldHMgaW4gU1NMLgorICogQ2xpZW50LXNpZGUsIHByb3ZpZGVzIGZ1bGwgc3VwcG9ydCBmb3Igc2Vzc2lvbiB0aWNrZXRzIChtYWludGFpbmFuY2Ugb2YgYQorICogc2Vzc2lvbiBzdG9yZSByZW1haW5zIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24sIHRob3VnaCkuCisgKiBTZXJ2ZXItc2lkZSwgeW91IGFsc28gbmVlZCB0byBwcm92aWRlIGNhbGxiYWNrcyBmb3Igd3JpdGluZyBhbmQgcGFyc2luZworICogdGlja2V0cywgaW5jbHVkaW5nIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQuIEV4YW1wbGUKKyAqIGNhbGxiYWNrcyBhcmUgcHJvdmlkZWQgYnkgTUJFRFRMU19TU0xfVElDS0VUX0MuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgU1NMIHNlc3Npb24gdGlja2V0cworICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBleHBvcnRpbmcga2V5IGJsb2NrIGFuZCBtYXN0ZXIgc2VjcmV0LgorICogVGhpcyBpcyByZXF1aXJlZCBmb3IgY2VydGFpbiB1c2VycyBvZiBUTFMsIGUuZy4gRUFQLVRMUy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBrZXkgZXhwb3J0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSBpbiBTU0wuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHNlcnZlciBuYW1lIGluZGljYXRpb24gaW4gU1NMCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiB0cnVuY2F0ZWQgSE1BQyBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdHJ1bmNhdGVkIEhNQUMgaW4gU1NMCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfQUxUCisgKgorICogUHJvdmlkZSB5b3VyIG93biBhbHRlcm5hdGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gYWxsb3cgeW91ciBvd24gYWx0ZXJuYXRlIHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorICoKKyAqIEVuYWJsZSB0aGUgcHRocmVhZCB3cmFwcGVyIGxheWVyIGZvciB0aGUgdGhyZWFkaW5nIGxheWVyLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHB0aHJlYWQgbXV0ZXhlcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworICoKKyAqIEFsbG93IHJ1bi10aW1lIGNoZWNraW5nIG9mIGNvbXBpbGUtdGltZSBlbmFibGVkIGZlYXR1cmVzLiBUaHVzIGFsbG93aW5nIHVzZXJzCisgKiB0byBjaGVjayBhdCBydW4tdGltZSBpZiB0aGUgbGlicmFyeSBpcyBmb3IgaW5zdGFuY2UgY29tcGlsZWQgd2l0aCB0aHJlYWRpbmcKKyAqIHN1cHBvcnQgdmlhIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVkVSU0lPTl9DCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgcnVuLXRpbWUgY2hlY2tpbmcgYW5kIHNhdmUgUk9NIHNwYWNlCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiBleHRlbnNpb24gaW4gYSB2MSBvciB2MiBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBVbmNvbW1lbnQgdG8gcHJldmVudCBhbiBlcnJvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiB1bmtub3duIGNyaXRpY2FsIGV4dGVuc2lvbi4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBlbmFibGluZyB0aGlzIGNhbiBiZSBhIHNlY3VyaXR5IHJpc2shCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgYW4gZXJyb3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIChDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMpLgorICoKKyAqIERpc2FibGluZyB0aGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIG1pcy1pc3N1ZWQgYW5kL29yIG1pc3VzZWQKKyAqIChpbnRlcm1lZGlhdGUpIENBIGFuZCBsZWFmIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBrZXlVc2FnZSBjaGVja2luZyBmb3IgYm90aCBDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUgZXh0ZW5kZWRLZXlVc2FnZSBleHRlbnNpb24gKGxlYWYgY2VydGlmaWNhdGVzKS4KKyAqCisgKiBEaXNhYmxpbmcgdGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aCBtaXMtaXNzdWVkIGFuZC9vciBtaXN1c2VkIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBleHRlbmRlZEtleVVzYWdlIGNoZWNraW5nIGZvciBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCisgKgorICogRW5hYmxlIHBhcnNpbmcgYW5kIHZlcmlmaWNhdGlvbiBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMsIENSTHMgYW5kIENTUlMKKyAqIHNpZ25lZCB3aXRoIFJTQVNTQS1QU1MgKGFrYSBQS0NTIzEgdjIuMSkuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FsbG93IHVzaW5nIFJTQVNTQS1QU1MgaW4gY2VydGlmaWNhdGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19aTElCX1NVUFBPUlQKKyAqCisgKiBJZiBzZXQsIHRoZSBTU0wvVExTIG1vZHVsZSB1c2VzIFpMSUIgdG8gc3VwcG9ydCBjb21wcmVzc2lvbiBhbmQKKyAqIGRlY29tcHJlc3Npb24gb2YgcGFja2V0IGRhdGEuCisgKgorICogXHdhcm5pbmcgVExTLWxldmVsIGNvbXByZXNzaW9uIE1BWSBSRURVQ0UgU0VDVVJJVFkhIFNlZSBmb3IgZXhhbXBsZSB0aGUKKyAqIENSSU1FIGF0dGFjay4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB5b3Ugc2hvdWxkIGV4YW1pbmUgd2l0aCBjYXJlIGlmCisgKiBDUklNRSBvciBzaW1pbGFyIGV4cGxvaXRzIG1heSBiZSBhIGFwcGxpY2FibGUgdG8geW91ciB1c2UgY2FzZS4KKyAqCisgKiBcbm90ZSBDdXJyZW50bHkgY29tcHJlc3Npb24gY2FuJ3QgYmUgdXNlZCB3aXRoIERUTFMuCisgKgorICogVXNlZCBpbjogbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgZmVhdHVyZSByZXF1aXJlcyB6bGliIGxpYnJhcnkgYW5kIGhlYWRlcnMgdG8gYmUgcHJlc2VudC4KKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHVzZSBvZiBaTElCCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1pMSUJfU1VQUE9SVAorLyogXH0gbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBtb2R1bGVzCisgKgorICogVGhpcyBzZWN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50aXJlIG1vZHVsZXMgaW4gbWJlZCBUTFMKKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTTklfQworICoKKyAqIEVuYWJsZSBBRVMtTkkgc3VwcG9ydCBvbiB4ODYtNjQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hZXNuaS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2Flcy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUVTLU5JIGluc3RydWN0aW9ucyBvbiB4ODYtNjQKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQUVTTklfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BRVNfQworICoKKyAqIEVuYWJsZSB0aGUgQUVTIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Flcy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS9wZW0uYworICogICAgICAgICAgbGlicmFyeS9jdHJfZHJiZy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIEFFUyBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FSQzRfQworICoKKyAqIEVuYWJsZSB0aGUgQVJDRk9VUiBzdHJlYW0gY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYXJjNC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQVJDNF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FTTjFfUEFSU0VfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBBU04xIHBhcnNlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FzbjEuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvZGhtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczEyLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczUuYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqLworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BU04xX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgQVNOMSB3cml0ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hc24xd3JpdGUuYworICogQ2FsbGVyOiAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICovCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogRW5hYmxlIHRoZSBCYXNlNjQgbW9kdWxlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYmFzZTY0LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgUEVNIHN1cHBvcnQgKHJlcXVpcmVkIGJ5IFguNTA5KS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQkFTRTY0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQklHTlVNX0MKKyAqCisgKiBFbmFibGUgdGhlIG11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9iaWdudW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9lY3AuYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3JzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBSU0EsIERITSBhbmQgRUNDIChFQ0RILCBFQ0RTQSkgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JMT1dGSVNIX0MKKyAqCisgKiBFbmFibGUgdGhlIEJsb3dmaXNoIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Jsb3dmaXNoLmMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogRW5hYmxlIHRoZSBDYW1lbGxpYSBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jYW1lbGxpYS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DQ01fQworICoKKyAqIEVuYWJsZSB0aGUgQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkgbW9kZSBmb3IgMTI4LWJpdCBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jY20uYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FFU19DIG9yIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIEFFUy1DQ00gY2lwaGVyc3VpdGVzLCBpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsLgorICovCisjZGVmaW5lIE1CRURUTFNfQ0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0VSVFNfQworICoKKyAqIEVuYWJsZSB0aGUgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jZXJ0cy5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBmb3IgdGVzdGluZyAoc3NsX2NsaWVudC9zZXJ2ZXIpLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19DRVJUU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIGNpcGhlciBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NpcGhlci5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBjaXBoZXIgd3JhcHBlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DTUFDX0MKKyAqCisgKiBFbmFibGUgdGhlIENNQUMgKENpcGhlci1iYXNlZCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUpIG1vZGUgZm9yIGJsb2NrCisgKiBjaXBoZXJzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY21hYy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19ERVNfQworICoKKyAqLworI2RlZmluZSBNQkVEVExTX0NNQUNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DVFJfRFJCR19DCisgKgorICogRW5hYmxlIHRoZSBDVFJfRFJCRyBBRVMtMjU2LWJhc2VkIHJhbmRvbSBnZW5lcmF0b3IuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9jdHJfZHJiZy5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgQ1RSX0RSQkcgQUVTLTI1NiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVCVUdfQworICoKKyAqIEVuYWJsZSB0aGUgZGVidWcgZnVuY3Rpb25zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVidWcuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlYnVnZ2luZyBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ERUJVR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0RFU19DCisgKgorICogRW5hYmxlIHRoZSBERVMgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZGVzLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICoKKyAqIFBFTV9QQVJTRSB1c2VzIERFUy8zREVTIGZvciBkZWNyeXB0aW5nIGVuY3J5cHRlZCBrZXlzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ESE1fQworICoKKyAqIEVuYWJsZSB0aGUgRGlmZmllLUhlbGxtYW4tTWVya2xlIG1vZHVsZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2RobS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgREhFLVJTQSwgREhFLVBTSworICovCisvLyNkZWZpbmUgTUJFRFRMU19ESE1fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0RIX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERpZmZpZS1IZWxsbWFuIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lY2RoLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQSwgRUNESEUtUlNBLCBESEUtUFNLCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNQX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNESF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDRFNBX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIERTQSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNkc2EuYworICogQ2FsbGVyOgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBFQ0RIRS1FQ0RTQQorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDUF9DLCBNQkVEVExTX0FTTjFfV1JJVEVfQywgTUJFRFRMU19BU04xX1BBUlNFX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNEU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0pQQUtFX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIEotUEFLRSBsaWJyYXJ5LgorICoKKyAqIFx3YXJuaW5nIFRoaXMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gRUMgSi1QQUtFIHN1cHBvcnQgaXMgYmFzZWQgb24gdGhlCisgKiBUaHJlYWQgdjEuMC4wIHNwZWNpZmljYXRpb247IGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpY2F0aW9uCisgKiBtaWdodCBzdGlsbCBoYXBwZW4uIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNqcGFrZS5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIEVDSlBBS0UKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ1BfQywgTUJFRFRMU19NRF9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ0pQQUtFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNQX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIG92ZXIgR0YocCkgbGlicmFyeS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2VjcC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VjZGguYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjanBha2UuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DIGFuZCBhdCBsZWFzdCBvbmUgTUJFRFRMU19FQ1BfRFBfWFhYX0VOQUJMRUQKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VOVFJPUFlfQworICoKKyAqIEVuYWJsZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZW50cm9weSBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZW50cm9weS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBNTEyX0Mgb3IgTUJFRFRMU19TSEEyNTZfQworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZ2VuZXJpYyBlbnRyb3B5IHBvb2wKKyAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FUlJPUl9DCisgKgorICogRW5hYmxlIGVycm9yIGNvZGUgdG8gZXJyb3Igc3RyaW5nIGNvbnZlcnNpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lcnJvci5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBtYmVkdGxzX3N0cmVycm9yKCkuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VSUk9SX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfR0NNX0MKKyAqCisgKiBFbmFibGUgdGhlIEdhbG9pcy9Db3VudGVyIE1vZGUgKEdDTSkgZm9yIEFFUy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2djbS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgQUVTLUdDTSBhbmQgQ0FNRUxMSUEtR0NNIGNpcGhlcnN1aXRlcywgaWYgb3RoZXIKKyAqIHJlcXVpc2l0ZXMgYXJlIGVuYWJsZWQgYXMgd2VsbC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfR0NNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRUdFX0MKKyAqCisgKiBFbmFibGUgdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIFdhcm5pbmc6IHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvciBpcyBub3Qgc3VpdGFibGUgZm9yIHZpcnR1YWxpemVkCisgKiAgICAgICAgICBlbnZpcm9ubWVudHMKKyAqCisgKiBXYXJuaW5nOiB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IgaXMgZGVwZW5kZW50IG9uIHRpbWluZyBhbmQgc3BlY2lmaWMKKyAqICAgICAgICAgIHByb2Nlc3NvciB0cmFpdHMuIEl0IGlzIHRoZXJlZm9yZSBub3QgYWR2aXNlZCB0byB1c2UgSEFWRUdFIGFzCisgKiAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9ucyBwcmltYXJ5IHJhbmRvbSBnZW5lcmF0b3Igb3IgcHJpbWFyeSBlbnRyb3B5IHBvb2wKKyAqICAgICAgICAgIGlucHV0LiBBcyBhIHNlY29uZGFyeSBpbnB1dCB0byB5b3VyIGVudHJvcHkgcG9vbCwgaXQgSVMgYWJsZSBhZGQKKyAqICAgICAgICAgIHRoZSAobGltaXRlZCkgZXh0cmEgZW50cm9weSBpdCBwcm92aWRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2hhdmVnZS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVElNSU5HX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfSEFWRUdFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfSE1BQ19EUkJHX0MKKyAqCisgKiBFbmFibGUgdGhlIEhNQUNfRFJCRyByYW5kb20gZ2VuZXJhdG9yLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvaG1hY19kcmJnLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRF9DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB0aGUgSE1BQ19EUkJHIHJhbmRvbSBudW1iZXIgZ2VlcmF0b3IuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRF9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGxheWVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfTURfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDJfQworICoKKyAqIEVuYWJsZSB0aGUgTUQyIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZDIuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgKHJhcmUpIE1EMi1zaWduZWQgWC41MDkgY2VydHMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01EMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01ENF9DCisgKgorICogRW5hYmxlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kNC5jCisgKiBDYWxsZXI6CisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciAocmFyZSkgTUQ0LXNpZ25lZCBYLjUwOSBjZXJ0cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQ0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQ1X0MKKyAqCisgKiBFbmFibGUgdGhlIE1ENSBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQ1LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BlbS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTIGFuZCBYLjUwOS4KKyAqIFBFTV9QQVJTRSB1c2VzIE1ENSBmb3IgZGVjcnlwdGluZyBlbmNyeXB0ZWQga2V5cy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUQ1X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKgorICogRW5hYmxlIHRoZSBidWZmZXIgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9uIHRoYXQgbWFrZXMgdXNlIG9mIGEgKHN0YWNrKQorICogYmFzZWQgYnVmZmVyIHRvICdhbGxvY2F0ZScgZHluYW1pYyBtZW1vcnkuIChyZXBsYWNlcyBjYWxsb2MoKSBhbmQgZnJlZSgpCisgKiBjYWxscykKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21lbW9yeV9idWZmZXJfYWxsb2MuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BMQVRGT1JNX0MKKyAqICAgICAgICAgICBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSAodG8gdXNlIGl0IHdpdGhpbiBtYmVkIFRMUykKKyAqCisgKiBFbmFibGUgdGhpcyBtb2R1bGUgdG8gZW5hYmxlIHRoZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRvci4KKyAqLworI2lmICFPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyNlbmRpZgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19ORVRfQworICoKKyAqIEVuYWJsZSB0aGUgVENQIGFuZCBVRFAgb3ZlciBJUHY2L0lQdjQgbmV0d29ya2luZyByb3V0aW5lcy4KKyAqCisgKiBcbm90ZSBUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIG9uIFBPU0lYL1VuaXggKGluY2x1ZGluZyBMaW51eCwgQlNEIGFuZCBPUyBYKQorICogYW5kIFdpbmRvd3MuIEZvciBvdGhlciBwbGF0Zm9ybXMsIHlvdSdsbCB3YW50IHRvIGRpc2FibGUgaXQsIGFuZCB3cml0ZSB5b3VyCisgKiBvd24gbmV0d29ya2luZyBjYWxsYmFja3MgdG8gYmUgcGFzc2VkIHRvIFxjIG1iZWR0bHNfc3NsX3NldF9iaW8oKS4KKyAqCisgKiBcbm90ZSBTZWUgYWxzbyBvdXIgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZSBhYm91dCBwb3J0aW5nIHRvIGEgbmV3CisgKiBlbnZpcm9ubWVudDoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2hvdy10by9ob3ctZG8taS1wb3J0LW1iZWQtdGxzLXRvLWEtbmV3LWVudmlyb25tZW50LU9TCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9uZXRfc29ja2V0cy5jCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgbmV0d29ya2luZyByb3V0aW5lcy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTkVUX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfT0lEX0MKKyAqCisgKiBFbmFibGUgdGhlIE9JRCBkYXRhYmFzZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L29pZC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2FzbjF3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrY3M1LmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtwYXJzZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3Brd3JpdGUuYworICogICAgICAgICAgbGlicmFyeS9yc2EuYworICogICAgICAgICAgbGlicmFyeS94NTA5LmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOV9jcmVhdGUuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3JsLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5d3JpdGVfY3NyLmMKKyAqCisgKiBUaGlzIG1vZHVsZXMgdHJhbnNsYXRlcyBiZXR3ZWVuIE9JRHMgYW5kIGludGVybmFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BBRExPQ0tfQworICoKKyAqIEVuYWJsZSBWSUEgUGFkbG9jayBzdXBwb3J0IG9uIHg4Ni4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BhZGxvY2suYworICogQ2FsbGVyOiAgbGlicmFyeS9hZXMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0hBVkVfQVNNCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFZJQSBQYWRMb2NrIG9uIHg4Ni4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEFETE9DS19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BFTV9QQVJTRV9DCisgKgorICogRW5hYmxlIFBFTSBkZWNvZGluZyAvIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wZW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CQVNFNjRfQworICoKKyAqIFRoaXMgbW9kdWxlcyBhZGRzIHN1cHBvcnQgZm9yIGRlY29kaW5nIC8gcGFyc2luZyBQRU0gZmlsZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BFTV9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BFTV9XUklURV9DCisgKgorICogRW5hYmxlIFBFTSBlbmNvZGluZyAvIHdyaXRpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wZW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9wa3dyaXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOXdyaXRlX2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOXdyaXRlX2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQkFTRTY0X0MKKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciBlbmNvZGluZyAvIHdyaXRpbmcgUEVNIGZpbGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QRU1fV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIHB1YmxpYyAoYXN5bWV0cmljKSBrZXkgbGF5ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9way5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0Mgb3IgTUJFRFRMU19FQ1BfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHdyYXBwZXJzLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19QQVJTRV9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIHB1YmxpYyAoYXN5bWV0cmljKSBrZXkgcGFyc2VyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGtwYXJzZS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QS19DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIHB1YmxpYyBrZXkgcGFyc2UgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS19XUklURV9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIHB1YmxpYyAoYXN5bWV0cmljKSBrZXkgd3JpdGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGt3cml0ZS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3g1MDl3cml0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBwdWJsaWMga2V5IHdyaXRlIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtfV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS0NTNV9DCisgKgorICogRW5hYmxlIFBLQ1MjNSBmdW5jdGlvbnMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzNS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTURfQworICoKKyAqIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBLQ1MjNSBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BLQ1M1X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzExX0MKKyAqCisgKiBFbmFibGUgd3JhcHBlciBmb3IgUEtDUyMxMSBzbWFydGNhcmQgc3VwcG9ydC4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BrY3MxMS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3BrLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QS19DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBTU0wvVExTIFBLQ1MgIzExIHNtYXJ0Y2FyZCBzdXBwb3J0LgorICogUmVxdWlyZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBQS0NTIzExIGhlbHBlciBsaWJyYXJ5IChsaWJwa2NzMTEtaGVscGVyKQorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMTFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS0NTMTJfQworICoKKyAqIEVuYWJsZSBQS0NTIzEyIFBCRSBmdW5jdGlvbnMuCisgKiBBZGRzIGFsZ29yaXRobXMgZm9yIHBhcnNpbmcgUEtDUyM4IGVuY3J5cHRlZCBwcml2YXRlIGtleXMKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BrY3MxMi5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3BrcGFyc2UuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FTTjFfUEFSU0VfQywgTUJFRFRMU19DSVBIRVJfQywgTUJFRFRMU19NRF9DCisgKiBDYW4gdXNlOiAgTUJFRFRMU19BUkM0X0MKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIFBLQ1MjMTIgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9DCisgKgorICogRW5hYmxlIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBsYXllciB0aGF0IGFsbG93cyB5b3UgdG8gcmUtYXNzaWduCisgKiBmdW5jdGlvbnMgbGlrZSBjYWxsb2MoKSwgZnJlZSgpLCBzbnByaW50ZigpLCBwcmludGYoKSwgZnByaW50ZigpLCBleGl0KCkuCisgKgorICogRW5hYmxpbmcgTUJFRFRMU19QTEFURk9STV9DIGVuYWJsZXMgdG8gdXNlIG9mIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVAorICogb3IgTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8gZGlyZWN0aXZlcywgYWxsb3dpbmcgdGhlIGZ1bmN0aW9ucyBtZW50aW9uZWQKKyAqIGFib3ZlIHRvIGJlIHNwZWNpZmllZCBhdCBydW50aW1lIG9yIGNvbXBpbGUgdGltZSByZXNwZWN0aXZlbHkuCisgKgorICogXG5vdGUgVGhpcyBhYnN0cmFjdGlvbiBsYXllciBtdXN0IGJlIGVuYWJsZWQgb24gV2luZG93cyAoaW5jbHVkaW5nIE1TWVMyKQorICogYXMgb3RoZXIgbW9kdWxlIHJlbHkgb24gaXQgZm9yIGEgZml4ZWQgc25wcmludGYgaW1wbGVtZW50YXRpb24uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wbGF0Zm9ybS5jCisgKiBDYWxsZXI6ICBNb3N0IG90aGVyIC5jIGZpbGVzCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBhYnN0cmFjdGlvbiBvZiBjb21tb24gKGxpYmMpIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUklQRU1EMTYwX0MKKyAqCisgKiBFbmFibGUgdGhlIFJJUEVNRC0xNjAgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3JpcGVtZDE2MC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUlNBX0MKKyAqCisgKiBFbmFibGUgdGhlIFJTQSBwdWJsaWMta2V5IGNyeXB0b3N5c3RlbS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3JzYS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDkuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBSU0EsIERIRS1SU0EsIEVDREhFLVJTQSwgUlNBLVBTSworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DLCBNQkVEVExTX09JRF9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1JTQV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTFfQworICoKKyAqIEVuYWJsZSB0aGUgU0hBMSBjcnlwdG9ncmFwaGljIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19zaGExLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTIGFuZCBTSEExLXNpZ25lZCBjZXJ0aWZpY2F0ZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NIQTFfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEEyNTZfQworICoKKyAqIEVuYWJsZSB0aGUgU0hBLTIyNCBhbmQgU0hBLTI1NiBjcnlwdG9ncmFwaGljIGhhc2ggYWxnb3JpdGhtcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhMjU2LmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZW50cm9weS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgU0hBLTIyNCBhbmQgU0hBLTI1Ni4KKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciB0aGUgU1NML1RMUyAxLjIgUFJGIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBNTEyX0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQS0zODQgYW5kIFNIQS01MTIgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3NoYTUxMi5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VudHJvcHkuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX21kLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgU0hBLTM4NCBhbmQgU0hBLTUxMi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU0hBNTEyX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NBQ0hFX0MKKyAqCisgKiBFbmFibGUgc2ltcGxlIFNTTCBjYWNoZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jYWNoZS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX0NBQ0hFX0MKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NBQ0hFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NPT0tJRV9DCisgKgorICogRW5hYmxlIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIERUTFMgY29va2llcyBmb3IgaGVsbG8gdmVyaWZpY2F0aW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX2Nvb2tpZS5jCisgKiBDYWxsZXI6CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09PS0lFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1RJQ0tFVF9DCisgKgorICogRW5hYmxlIGFuIGltcGxlbWVudGF0aW9uIG9mIFRMUyBzZXJ2ZXItc2lkZSBjYWxsYmFja3MgZm9yIHNlc3Npb24gdGlja2V0cy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF90aWNrZXQuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0NJUEhFUl9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9USUNLRVRfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQ0xJX0MKKyAqCisgKiBFbmFibGUgdGhlIFNTTC9UTFMgY2xpZW50IGNvZGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfVExTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBjbGllbnQgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DTElfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfU1JWX0MKKyAqCisgKiBFbmFibGUgdGhlIFNTTC9UTFMgc2VydmVyIGNvZGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfc3J2LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfVExTX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBzZXJ2ZXIgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfVExTX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgU1NML1RMUyBjb2RlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvc3NsX3Rscy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19DSVBIRVJfQywgTUJFRFRMU19NRF9DCisgKiAgICAgICAgICAgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgTUJFRFRMU19TU0xfUFJPVE9fWFhYIGRlZmluZXMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9UTFNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USFJFQURJTkdfQworICoKKyAqIEVuYWJsZSB0aGUgdGhyZWFkaW5nIGFic3RyYWN0aW9uIGxheWVyLgorICogQnkgZGVmYXVsdCBtYmVkIFRMUyBhc3N1bWVzIGl0IGlzIHVzZWQgaW4gYSBub24tdGhyZWFkZWQgZW52aXJvbm1lbnQgb3IgdGhhdAorICogY29udGV4dHMgYXJlIG5vdCBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLiBJZiB5b3UgZG8gaW50ZW5kIHRvIHVzZSBjb250ZXh0cworICogYmV0d2VlbiB0aHJlYWRzLCB5b3Ugd2lsbCBuZWVkIHRvIGVuYWJsZSB0aGlzIGxheWVyIHRvIHByZXZlbnQgcmFjZQorICogY29uZGl0aW9ucy4gU2VlIGFsc28gb3VyIEtub3dsZWRnZSBCYXNlIGFydGljbGUgYWJvdXQgdGhyZWFkaW5nOgorICogaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvZGV2ZWxvcG1lbnQvdGhyZWFkLXNhZmV0eS1hbmQtbXVsdGktdGhyZWFkaW5nCisgKgorICogTW9kdWxlOiAgbGlicmFyeS90aHJlYWRpbmcuYworICoKKyAqIFRoaXMgYWxsb3dzIGRpZmZlcmVudCB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb25zIChzZWxmLWltcGxlbWVudGVkIG9yCisgKiBwcm92aWRlZCkuCisgKgorICogWW91IHdpbGwgaGF2ZSB0byBlbmFibGUgZWl0aGVyIE1CRURUTFNfVEhSRUFESU5HX0FMVCBvcgorICogTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRC4KKyAqCisgKiBFbmFibGUgdGhpcyBsYXllciB0byBhbGxvdyB1c2Ugb2YgbXV0ZXhlcyB3aXRoaW4gbWJlZCBUTFMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfVElNSU5HX0MKKyAqCisgKiBFbmFibGUgdGhlIHNlbWktcG9ydGFibGUgdGltaW5nIGludGVyZmFjZS4KKyAqCisgKiBcbm90ZSBUaGUgcHJvdmlkZWQgaW1wbGVtZW50YXRpb24gb25seSB3b3JrcyBvbiBQT1NJWC9Vbml4IChpbmNsdWRpbmcgTGludXgsCisgKiBCU0QgYW5kIE9TIFgpIGFuZCBXaW5kb3dzLiBPbiBvdGhlciBwbGF0Zm9ybXMsIHlvdSBjYW4gZWl0aGVyIGRpc2FibGUgdGhhdAorICogbW9kdWxlIGFuZCBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY2FsbGJhY2tzIG5lZWRlZCBieQorICogXGMgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkgZm9yIERUTFMsIG9yIGxlYXZlIGl0IGVuYWJsZWQgYW5kIHByb3ZpZGUKKyAqIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoZSB3aG9sZSBtb2R1bGUgYnkgc2V0dGluZworICogXGMgTUJFRFRMU19USU1JTkdfQUxUIGluIHRoZSBjdXJyZW50IGZpbGUuCisgKgorICogXG5vdGUgU2VlIGFsc28gb3VyIEtub3dsZWRnZSBCYXNlIGFydGljbGUgYWJvdXQgcG9ydGluZyB0byBhIG5ldworICogZW52aXJvbm1lbnQ6CisgKiBodHRwczovL3Rscy5tYmVkLm9yZy9rYi9ob3ctdG8vaG93LWRvLWktcG9ydC1tYmVkLXRscy10by1hLW5ldy1lbnZpcm9ubWVudC1PUworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdGltaW5nLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvaGF2ZWdlLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBIQVZFR0UgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RJTUlOR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1ZFUlNJT05fQworICoKKyAqIEVuYWJsZSBydW4tdGltZSB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdmVyc2lvbi5jCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgY29yZSBmb3IgdXNpbmcgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQVNOMV9QQVJTRV9DLCBNQkVEVExTX0JJR05VTV9DLCBNQkVEVExTX09JRF9DLAorICogICAgICAgICAgIE1CRURUTFNfUEtfUEFSU0VfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciB0aGUgWC41MDkgcGFyc2luZyBtb2R1bGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X1VTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgY2VydGlmaWNhdGUgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgcGFyc2luZy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCisgKgorICogRW5hYmxlIFguNTA5IENSTCBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgQ1JMIHBhcnNpbmcuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QgKENTUikgcGFyc2luZy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICogQ2FsbGVyOiAgbGlicmFyeS94NTA5X2NydF93cml0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9VU0VfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgZm9yIHJlYWRpbmcgWC41MDkgY2VydGlmaWNhdGUgcmVxdWVzdC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSRUFURV9DCisgKgorICogRW5hYmxlIFguNTA5IGNvcmUgZm9yIGNyZWF0aW5nIGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDlfY3JlYXRlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQywgTUJFRFRMU19QS19XUklURV9DCisgKgorICogVGhpcyBtb2R1bGUgaXMgdGhlIGJhc2lzIGZvciBjcmVhdGluZyBYLjUwOSBjZXJ0aWZpY2F0ZXMgYW5kIENTUnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworICoKKyAqIEVuYWJsZSBjcmVhdGluZyBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5X2NydF93cml0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUkVBVEVfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBYLjUwOSBjZXJ0aWZpY2F0ZSBjcmVhdGlvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCisgKgorICogRW5hYmxlIGNyZWF0aW5nIFguNTA5IENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdHMgKENTUikuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5X2Nzcl93cml0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUkVBVEVfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBYLjUwOSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IHdyaXRpbmcuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWFRFQV9DCisgKgorICogRW5hYmxlIHRoZSBYVEVBIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3h0ZWEuYworICogQ2FsbGVyOgorICovCisvLyNkZWZpbmUgTUJFRFRMU19YVEVBX0MKKworLyogXH0gbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBtb2R1bGVzICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICoKKyAqIFRoaXMgc2VjdGlvbiBhbGxvd3MgZm9yIHRoZSBzZXR0aW5nIG9mIG1vZHVsZSBzcGVjaWZpYyBzaXplcyBhbmQKKyAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlCisgKiByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIHNob3VsZCBzdWZmaWNlIGZvciB0aGUgcmVndWxhciB1c2UgY2FzZXMuCisgKgorICogT3VyIGFkdmljZSBpcyB0byBlbmFibGUgb3B0aW9ucyBhbmQgY2hhbmdlIHRoZWlyIHZhbHVlcyBoZXJlCisgKiBvbmx5IGlmIHlvdSBoYXZlIGEgZ29vZCByZWFzb24gYW5kIGtub3cgdGhlIGNvbnNlcXVlbmNlcy4KKyAqCisgKiBQbGVhc2UgY2hlY2sgdGhlIHJlc3BlY3RpdmUgaGVhZGVyIGZpbGUgZm9yIGRvY3VtZW50YXRpb24gb24gdGhlc2UKKyAqIHBhcmFtZXRlcnMgKHRvIHByZXZlbnQgZHVwbGljYXRlIGRvY3VtZW50YXRpb24pLgorICogXHsKKyAqLworCisvKiBNUEkgLyBCSUdOVU0gb3B0aW9ucyAqLworI2RlZmluZSBNQkVEVExTX01QSV9XSU5ET1dfU0laRSAgICAgICAgICAgIDEgLyoqPCBNYXhpbXVtIHdpbmRvd3Mgc2l6ZSB1c2VkLiAqLworI2RlZmluZSBNQkVEVExTX01QSV9NQVhfU0laRSAgICAgICAgICAgIDMyIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgZm9yIHVzYWJsZSBNUElzLiAqLworCisvKiBDVFJfRFJCRyBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTiAgICAgICAgICAgICAgIDQ4IC8qKjwgQW1vdW50IG9mIGVudHJvcHkgdXNlZCBwZXIgc2VlZCBieSBkZWZhdWx0ICg0OCB3aXRoIFNIQS01MTIsIDMyIHdpdGggU0hBLTI1NikgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTCAgICAgICAgMTAwMDAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgICAgICAgICAgICAgICAgMjU2IC8qKjwgTWF4aW11bSBudW1iZXIgb2YgYWRkaXRpb25hbCBpbnB1dCBieXRlcyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgICAgICAgMTAyNCAvKio8IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBwZXIgY2FsbCAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgICAgICAgICAgIDM4NCAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKworLyogSE1BQ19EUkJHIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwgICAxMDAwMCAvKio8IEludGVydmFsIGJlZm9yZSByZXNlZWQgaXMgcGVyZm9ybWVkIGJ5IGRlZmF1bHQgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgICAgICAgICAgIDI1NiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfUkVRVUVTVCAgICAgICAgMTAyNCAvKio8IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBwZXIgY2FsbCAqLworLy8jZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUICAgICAgMzg0IC8qKjwgTWF4aW11bSBzaXplIG9mIChyZSlzZWVkIGJ1ZmZlciAqLworCisvKiBFQ1Agb3B0aW9ucyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9NQVhfQklUUyAgICAgICAgICAgICAyNTYgLyoqPCBNYXhpbXVtIGJpdCBzaXplIG9mIGdyb3VwcyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAgICAgICAgICAgIDIgLyoqPCBNYXhpbXVtIHdpbmRvdyBzaXplIHVzZWQgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gICAgICAwIC8qKjwgRW5hYmxlIGZpeGVkLXBvaW50IHNwZWVkLXVwICovCisKKy8qIEVudHJvcHkgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUyAgICAgICAgICAgICAgICAyMCAvKio8IE1heGltdW0gbnVtYmVyIG9mIHNvdXJjZXMgc3VwcG9ydGVkICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIgICAgICAgICAgICAgICAgMTI4IC8qKjwgTWF4aW11bSBhbW91bnQgcmVxdWVzdGVkIGZyb20gZW50cm9weSBzb3VyY2VzICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01JTl9IQVJEV0FSRSAgICAgICAgICAgICAgIDMyIC8qKjwgRGVmYXVsdCBtaW5pbXVtIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBmb3IgdGhlIGhhcmR3YXJlIGVudHJvcHkgc291cmNlIG1iZWR0bHNfaGFyZHdhcmVfcG9sbCgpIGJlZm9yZSBlbnRyb3B5IGlzIHJlbGVhc2VkICovCisKKworLyogTWVtb3J5IGJ1ZmZlciBhbGxvY2F0b3Igb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFICAgICAgNCAvKio8IEFsaWduIG9uIG11bHRpcGxlcyBvZiB0aGlzIHZhbHVlICovCisKKy8qIFBsYXRmb3JtIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9NRU1fSERSICAgPHN0ZGxpYi5oPiAvKio8IEhlYWRlciB0byBpbmNsdWRlIGlmIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUyBpcyBkZWZpbmVkLiBEb24ndCBkZWZpbmUgaWYgbm8gaGVhZGVyIGlzIG5lZWRlZC4gKi8KKyNpZiBPUEVOVEhSRUFEX0VOQUJMRV9NVUxUSVBMRV9JTlNUQU5DRVMKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DICAgIG90UGxhdENBbGxvYyAvKio8IERlZmF1bHQgYWxsb2NhdG9yIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFICAgICAgICBvdFBsYXRGcmVlIC8qKjwgRGVmYXVsdCBmcmVlIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworI2VuZGlmCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCAgICAgICAgICAgIGV4aXQgLyoqPCBEZWZhdWx0IGV4aXQgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfVElNRSAgICAgICAgICAgIHRpbWUgLyoqPCBEZWZhdWx0IHRpbWUgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkLiBNQkVEVExTX0hBVkVfVElNRSBtdXN0IGJlIGVuYWJsZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGICAgICAgZnByaW50ZiAvKio8IERlZmF1bHQgZnByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYgICAgICAgIHByaW50ZiAvKio8IERlZmF1bHQgcHJpbnRmIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLyogTm90ZTogeW91ciBzbnByaW50ZiBtdXN0IGNvcnJlY2x0eSB6ZXJvLXRlcm1pbmF0ZSB0aGUgYnVmZmVyISAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGICAgIHNucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX1NVQ0NFU1MgICAgICAgMCAvKio8IERlZmF1bHQgZXhpdCB2YWx1ZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX0ZBSUxVUkUgICAgICAgMSAvKio8IERlZmF1bHQgZXhpdCB2YWx1ZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQgLyoqPCBEZWZhdWx0IG52X3NlZWRfcmVhZCBmdW5jdGlvbiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlIC8qKjwgRGVmYXVsdCBudl9zZWVkX3dyaXRlIGZ1bmN0aW9uIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSAgInNlZWRmaWxlIiAvKio8IFNlZWQgZmlsZSB0byByZWFkL3dyaXRlIHdpdGggZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLworCisvKiBUbyBVc2UgRnVuY3Rpb24gTWFjcm9zIE1CRURUTFNfUExBVEZPUk1fQyBtdXN0IGJlIGVuYWJsZWQgKi8KKy8qIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQgY2Fubm90IGJvdGggYmUgZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPICAgICAgICBjYWxsb2MgLyoqPCBEZWZhdWx0IGFsbG9jYXRvciBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8gICAgICAgICAgICBmcmVlIC8qKjwgRGVmYXVsdCBmcmVlIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTyAgICAgICAgICAgIGV4aXQgLyoqPCBEZWZhdWx0IGV4aXQgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPICAgICAgICAgICAgdGltZSAvKio8IERlZmF1bHQgdGltZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQuIE1CRURUTFNfSEFWRV9USU1FIG11c3QgYmUgZW5hYmxlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPICAgICAgIHRpbWVfdCAvKio8IERlZmF1bHQgdGltZSBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQuIE1CRURUTFNfSEFWRV9USU1FIG11c3QgYmUgZW5hYmxlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTyAgICAgIGZwcmludGYgLyoqPCBEZWZhdWx0IGZwcmludGYgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8gICAgICAgIHByaW50ZiAvKio8IERlZmF1bHQgcHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLyogTm90ZTogeW91ciBzbnByaW50ZiBtdXN0IGNvcnJlY2x0eSB6ZXJvLXRlcm1pbmF0ZSB0aGUgYnVmZmVyISAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gICAgc25wcmludGYgLyoqPCBEZWZhdWx0IHNucHJpbnRmIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9SRUFEX01BQ1JPICAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkIC8qKjwgRGVmYXVsdCBudl9zZWVkX3JlYWQgZnVuY3Rpb24gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1dSSVRFX01BQ1JPICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlIC8qKjwgRGVmYXVsdCBudl9zZWVkX3dyaXRlIGZ1bmN0aW9uIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworCisvKiBTU0wgQ2FjaGUgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVCAgICAgICA4NjQwMCAvKio8IDEgZGF5ICAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMgICAgICA1MCAvKio8IE1heGltdW0gZW50cmllcyBpbiBjYWNoZSAqLworCisvKiBTU0wgb3B0aW9ucyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gICAgICAgICAgICAgNzY4IC8qKjwgTWF4aXVtIGZyYWdtZW50IGxlbmd0aCBpbiBieXRlcywgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBlYWNoIG9mIHRoZSB0d28gaW50ZXJuYWwgSS9PIGJ1ZmZlcnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRSAgICAgODY0MDAgLyoqPCBMaWZldGltZSBvZiBzZXNzaW9uIHRpY2tldHMgKGlmIGVuYWJsZWQpICovCisvLyNkZWZpbmUgTUJFRFRMU19QU0tfTUFYX0xFTiAgICAgICAgICAgICAgIDMyIC8qKjwgTWF4IHNpemUgb2YgVExTIHByZS1zaGFyZWQga2V5cywgaW4gYnl0ZXMgKGRlZmF1bHQgMjU2IGJpdHMpICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQgICAgICAgIDYwIC8qKjwgRGVmYXVsdCBleHBpcmF0aW9uIGRlbGF5IG9mIERUTFMgY29va2llcywgaW4gc2Vjb25kcyBpZiBIQVZFX1RJTUUsIG9yIGluIG51bWJlciBvZiBjb29raWVzIGlzc3VlZCAqLworCisvKioKKyAqIENvbXBsZXRlIGxpc3Qgb2YgY2lwaGVyc3VpdGVzIHRvIHVzZSwgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KKyAqCisgKiBcd2FybmluZyBObyBkZXBlbmRlbmN5IGNoZWNraW5nIGlzIGRvbmUgb24gdGhhdCBmaWVsZCEgVGhpcyBvcHRpb24gY2FuIG9ubHkKKyAqIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHNldCBvZiBhdmFpbGFibGUgY2lwaGVyc3VpdGVzLiBJdCBpcyB5b3VyCisgKiByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBhY3RpdmUuCisgKgorICogVXNlIHRoaXMgdG8gc2F2ZSBhIGZldyBodW5kcmVkIGJ5dGVzIG9mIFJPTSAoZGVmYXVsdCBvcmRlcmluZyBvZiBhbGwKKyAqIGF2YWlsYWJsZSBjaXBoZXJzdWl0ZXMpIGFuZCBhIGZldyB0byBhIGZldyBodW5kcmVkIGJ5dGVzIG9mIFJBTS4KKyAqCisgKiBUaGUgdmFsdWUgYmVsb3cgaXMgb25seSBhbiBleGFtcGxlLCBub3QgdGhlIGRlZmF1bHQuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTIE1CRURUTFNfVExTX0VDSlBBS0VfV0lUSF9BRVNfMTI4X0NDTV84CisKKy8qIFg1MDkgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBICAgOCAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIENBcyBpbiBhIHZlcmlmaWNhdGlvbiBjaGFpbi4gKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0ZJTEVfUEFUSF9MRU4gICAgIDUxMiAvKio8IE1heGltdW0gbGVuZ3RoIG9mIGEgcGF0aC9maWxlbmFtZSBzdHJpbmcgaW4gYnl0ZXMgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IgY2hhcmFjdGVyICgnXDAnKS4gKi8KKworLyogXH0gbmFtZSBTRUNUSU9OOiBDdXN0b21pc2F0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworCisvKiBUYXJnZXQgYW5kIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zICovCisvLyNkZWZpbmUgWU9UVEFfQ0ZHX01CRURUTFNfVEFSR0VUX0NPTkZJR19GSUxFICJtYmVkdGxzL3RhcmdldF9jb25maWcuaCIKKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkgJiYgZGVmaW5lZChZT1RUQV9DRkdfTUJFRFRMU19UQVJHRVRfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSBZT1RUQV9DRkdfTUJFRFRMU19UQVJHRVRfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisvKgorICogQWxsb3cgdXNlciB0byBvdmVycmlkZSBhbnkgcHJldmlvdXMgZGVmYXVsdC4KKyAqCisgKiBVc2UgdHdvIG1hY3JvIG5hbWVzIGZvciB0aGF0LCBhczoKKyAqIC0gd2l0aCB5b3R0YSB0aGUgcHJlZml4IFlPVFRBX0NGR18gaXMgZm9yY2VkCisgKiAtIHdpdGhvdXQgeW90dGEgaXMgbG9va3Mgd2VpcmQgdG8gaGF2ZSBhIFlPVFRBIHByZWZpeC4KKyAqLworI2lmIGRlZmluZWQoWU9UVEFfQ0ZHX01CRURUTFNfVVNFUl9DT05GSUdfRklMRSkKKyNpbmNsdWRlIFlPVFRBX0NGR19NQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUKKyNlbGlmIGRlZmluZWQoTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3BhdGNoLzAwMDEtRml4LWNvbW1pc3Npb25pbmctcHJvYmxlbS13aXRoLXJldHJhbnNtaXNzaW9ucy5wYXRjaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcGF0Y2gvMDAwMS1GaXgtY29tbWlzc2lvbmluZy1wcm9ibGVtLXdpdGgtcmV0cmFuc21pc3Npb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTUxYWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3BhdGNoLzAwMDEtRml4LWNvbW1pc3Npb25pbmctcHJvYmxlbS13aXRoLXJldHJhbnNtaXNzaW9ucy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jCitpbmRleCA4NGEwNGFlLi4yMTUzYzgwIDEwMDY0NAorLS0tIGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jCisrKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfdGxzLmMKK0BAIC0zNjA4LDYgKzM2MDgsMjQgQEAgc3RhdGljIGludCBzc2xfcGFyc2VfcmVjb3JkX2hlYWRlciggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVkLCByZWNlaXZlZCAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fZXBvY2gsIHJlY19lcG9jaCApICk7CisgCisrI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisrICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgKiBDaGVjayBmb3IgYW4gZXBvY2ggMCBDaGFuZ2UgQ2lwaGVyIFNwZWMgcmV0cmFuc21pc3Npb24uCisrICAgICAgICAgICAgICovCisrICAgICAgICAgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisrICAgICAgICAgICAgICAgIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgJiYKKysgICAgICAgICAgICAgICAgcmVjX2Vwb2NoID09IDAgJiYKKysgICAgICAgICAgICAgICAgc3NsLT5pbl9lcG9jaCA9PSAxICYmCisrICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICYmCisrICAgICAgICAgICAgICAgIHNzbC0+aW5fbGVmdCA+IDEzICYmCisrICAgICAgICAgICAgICAgIHNzbC0+aW5fYnVmWzEzXSA9PSBNQkVEVExTX1NTTF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicG9zc2libGUgQ2xpZW50IEtleSBFeGNoYW5nZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0cmFuc21pc3Npb24iICkgKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3NzbF9yZXNlbmQoIHNzbCApICk7CisrICAgICAgICAgICAgfQorKyNlbmRpZgorKworICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgKiBDaGVjayBmb3IgYW4gZXBvY2ggMCBDbGllbnRIZWxsby4gV2UgY2FuJ3QgdXNlIGluX21zZyBoZXJlIHRvCitAQCAtMzczNyw3ICszNzU1LDggQEAgaW50IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQorIAorICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZGxlX21lc3NhZ2VfdHlwZSggc3NsICk7CisgCistICAgIH0gd2hpbGUoIE1CRURUTFNfRVJSX1NTTF9OT05fRkFUQUwgPT0gcmV0ICk7CisrICAgIH0gd2hpbGUoIE1CRURUTFNfRVJSX1NTTF9OT05fRkFUQUwgPT0gcmV0IHx8CisrICAgICAgICAgICAgICggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCA9PSByZXQgJiYgc3NsLT5pbl9tc2dsZW4gKSApOworIAorICAgICBpZiggMCAhPSByZXQgKQorICAgICB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcGF0Y2gvMDAwMi1GaXgtd2FybmluZy1kZWFkLXN0b3JlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzFhZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3BhdGNoLzAwMDItRml4LXdhcm5pbmctZGVhZC1zdG9yZS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jCitpbmRleCBmYzBkMmQ3Yi4uZmFkNTRkZDggMTAwNjQ0CistLS0gYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfc3J2LmMKKysrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9zcnYuYworQEAgLTMwMTcsNiArMzAxNyw5IEBAIGN1cnZlX21hdGNoaW5nX2RvbmU6CisgICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgKi8KKyAKKysgICAgLy8gbWFzayBkZWFkIHN0b3JlIG9mIHAKKysgICAgKHZvaWQpcDsKKysKKyAgICAgc3NsLT5vdXRfbXNnbGVuICA9IDQgKyBuOworICAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0U7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vLnRyYXZpcy55bWwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vLnRyYXZpcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwMWU1YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby8udHJhdmlzLnltbApAQCAtMCwwICsxLDM5IEBACitsYW5ndWFnZTogYworY29tcGlsZXI6CistIGNsYW5nCistIGdjYworc3VkbzogZmFsc2UKK2NhY2hlOiBjY2FjaGUKK3NjcmlwdDoKKy0gdGVzdHMvc2NyaXB0cy9yZWN1cnNpb24ucGwgbGlicmFyeS8qLmMKKy0gdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKKy0gdGVzdHMvc2NyaXB0cy9jaGVjay1kb3h5LWJsb2Nrcy5wbAorLSB0ZXN0cy9zY3JpcHRzL2NoZWNrLW5hbWVzLnNoCistIHRlc3RzL3NjcmlwdHMvZG94eWdlbi5zaAorLSBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz0iQ2hlY2siIC4KKy0gbWFrZQorLSBtYWtlIHRlc3QKKy0gcHJvZ3JhbXMvdGVzdC9zZWxmdGVzdAorLSBPU1NMX05PX0RUTFM9MSB0ZXN0cy9jb21wYXQuc2gKKy0gdGVzdHMvc3NsLW9wdC5zaCAtZSAnXChEVExTXHxTQ1NWXCkuKm9wZW5zc2wnCistIHRlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbAorLSB0ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbAorLSB0ZXN0cy9zY3JpcHRzL2tleS1leGNoYW5nZXMucGwKK2FmdGVyX2ZhaWx1cmU6CistIHRlc3RzL3NjcmlwdHMvdHJhdmlzLWxvZy1mYWlsdXJlLnNoCitlbnY6CisgIGdsb2JhbDoKKyAgICBzZWN1cmU6ICJiYXJIbGRuaUFmWHlvV09EL3ZjTytFNi9YbTRmbWNhVW9DOUJlS1crTHdzSHFsRE1MdnVnYUpubUxYa1Nwa2JZaFZMNjFIemYzYm8wS1BKbjg4QUZjNVJrZjhvWUhQakg0YWRNblZYa2YzQjlnaEhDZ3pucUhzQUgzY2hvbzZ0blB4YUZnT3dPWW1MR2IzODJuUXhmRTVsVWR2bk0vVy9wc1FqV3Q2NkExK2s9IgorCithZGRvbnM6CisgIGFwdDoKKyAgICBwYWNrYWdlczoKKyAgICAtIGRveHlnZW4KKyAgICAtIGdyYXBodml6CisgIGNvdmVyaXR5X3NjYW46CisgICAgcHJvamVjdDoKKyAgICAgIG5hbWU6ICJBUk1tYmVkL21iZWR0bHMiCisgICAgbm90aWZpY2F0aW9uX2VtYWlsOiBwLmouYmFra2VyQHBvbGFyc3NsLm9yZworICAgIGJ1aWxkX2NvbW1hbmRfcHJlcGVuZDoKKyAgICBidWlsZF9jb21tYW5kOiBtYWtlCisgICAgYnJhbmNoX3BhdHRlcm46IGNvdmVyaXR5X3NjYW4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ViZmMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTY0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi42KQorcHJvamVjdCgibWJlZCBUTFMiIEMpCisKK29wdGlvbihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZICJCdWlsZCBtYmVkIFRMUyB3aXRoIHRoZSBwa2NzMTEtaGVscGVyIGxpYnJhcnkuIiBPRkYpCitvcHRpb24oRU5BQkxFX1pMSUJfU1VQUE9SVCAiQnVpbGQgbWJlZCBUTFMgd2l0aCB6bGliIGxpYnJhcnkuIiBPRkYpCisKK29wdGlvbihFTkFCTEVfUFJPR1JBTVMgIkJ1aWxkIG1iZWQgVExTIHByb2dyYW1zLiIgT04pCisKK29wdGlvbihVTlNBRkVfQlVJTEQgIkFsbG93IHVuc2FmZSBidWlsZHMuIFRoZXNlIGJ1aWxkcyBBUkUgTk9UIFNFQ1VSRS4iIE9GRikKKworIyB0aGUgdGVzdCBzdWl0ZXMgY3VycmVudGx5IGhhdmUgY29tcGlsZSBlcnJvcnMgd2l0aCBNU1ZDCitpZihNU1ZDKQorICAgIG9wdGlvbihFTkFCTEVfVEVTVElORyAiQnVpbGQgbWJlZCBUTFMgdGVzdHMuIiBPRkYpCitlbHNlKCkKKyAgICBvcHRpb24oRU5BQkxFX1RFU1RJTkcgIkJ1aWxkIG1iZWQgVExTIHRlc3RzLiIgT04pCitlbmRpZigpCisKKyMgV2FybmluZyBzdHJpbmcgLSBjcmVhdGVkIGFzIGEgbGlzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDIuOAorc2V0KFdBUk5JTkdfQk9SREVSICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKQorc2V0KE5VTExfRU5UUk9QWV9XQVJOX0wxICIqKioqICBXQVJOSU5HISAgTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSBkZWZpbmVkIVxuIikKK3NldChOVUxMX0VOVFJPUFlfV0FSTl9MMiAiKioqKiAgVEhJUyBCVUlMRCBIQVMgTk8gREVGSU5FRCBFTlRST1BZIFNPVVJDRVNcbiIpCitzZXQoTlVMTF9FTlRST1BZX1dBUk5fTDMgIioqKiogIEFORCBJUyAqTk9UKiBTVUlUQUJMRSBGT1IgUFJPRFVDVElPTiBVU0VcbiIpCisKK3NldChOVUxMX0VOVFJPUFlfV0FSTklORyAiJHtXQVJOSU5HX0JPUkRFUn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7TlVMTF9FTlRST1BZX1dBUk5fTDF9IgorICAgICAgICAgICAgICAgICAgICAgICAgICIke05VTExfRU5UUk9QWV9XQVJOX0wyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJHtOVUxMX0VOVFJPUFlfV0FSTl9MM30iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7V0FSTklOR19CT1JERVJ9IikKKworZmluZF9wYWNrYWdlKFBlcmwpCitpZihQRVJMX0ZPVU5EKQorCisgICAgIyBJZiBOVUxMIEVudHJvcHkgaXMgY29uZmlndXJlZCwgZGlzcGxheSBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nCisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7Q01BS0VfU09VUkNFX0RJUn0vc2NyaXB0cy9jb25maWcucGwgLWYgJHtDTUFLRV9TT1VSQ0VfRElSfS9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmggZ2V0IE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQpCisgICAgaWYoJHtyZXN1bHR9IEVRVUFMIDApCisgICAgICAgIG1lc3NhZ2UoV0FSTklORyAke05VTExfRU5UUk9QWV9XQVJOSU5HfSkKKworICAgICAgICBpZihOT1QgVU5TQUZFX0JVSUxEKQorICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiXAorXG5cCitXYXJuaW5nISBZb3UgaGF2ZSBlbmFibGVkIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkuIFwKK1RoaXMgb3B0aW9uIGlzIG5vdCBzYWZlIGZvciBwcm9kdWN0aW9uIHVzZSBhbmQgbmVnYXRlcyBhbGwgc2VjdXJpdHkgXAorSXQgaXMgaW50ZW5kZWQgZm9yIGRldmVsb3BtZW50IHVzZSBvbmx5LiBcCitcblwKK1RvIGNvbmZpcm0geW91IHdhbnQgdG8gYnVpbGQgd2l0aCB0aGlzIG9wdGlvbiwgcmUtcnVuIGNtYWtlIHdpdGggdGhlIFwKK29wdGlvbjogXG5cCisgIGNtYWtlIC1EVU5TQUZFX0JVSUxEPU9OICIpCisKKyAgICAgICAgICAgIHJldHVybigpCisgICAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCitlbmRpZigpCisKK3NldChDTUFLRV9CVUlMRF9UWVBFICR7Q01BS0VfQlVJTERfVFlQRX0KKyAgICBDQUNIRSBTVFJJTkcgIkNob29zZSB0aGUgdHlwZSBvZiBidWlsZDogTm9uZSBEZWJ1ZyBSZWxlYXNlIENvdmVyYWdlIEFTYW4gQVNhbkRiZyBNZW1TYW4gTWVtU2FuRGJnIENoZWNrIENoZWNrRnVsbCIKKyAgICBGT1JDRSkKKworc3RyaW5nKFJFR0VYIE1BVENIICJDbGFuZyIgQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcgIiR7Q01BS0VfQ19DT01QSUxFUl9JRH0iKQorCitpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKKyAgICAjIHNvbWUgd2FybmluZ3Mgd2Ugd2FudCBhcmUgbm90IGF2YWlsYWJsZSB3aXRoIG9sZCBHQ0MgdmVyc2lvbnMKKyAgICAjIG5vdGU6IHN0YXJ0aW5nIHdpdGggQ01ha2UgMi44IHdlIGNvdWxkIHVzZSBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04KKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NfQ09NUElMRVJ9IC1kdW1wdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgR0NDX1ZFUlNJT04pCisgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdhbGwgLVdleHRyYSAtVyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV3dyaXRlLXN0cmluZ3MiKQorICAgIGlmIChHQ0NfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVIgNC41IE9SIEdDQ19WRVJTSU9OIFZFUlNJT05fRVFVQUwgNC41KQorICAgICAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV2xvZ2ljYWwtb3AiKQorICAgIGVuZGlmKCkKKyAgICBpZiAoR0NDX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSIDQuOCBPUiBHQ0NfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIDQuOCkKKyAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdzaGFkb3ciKQorICAgIGVuZGlmKCkKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19SRUxFQVNFICAgICAiLU8yIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19ERUJVRyAgICAgICAiLU8wIC1nMyIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQ09WRVJBR0UgICAgIi1PMCAtZzMgLS1jb3ZlcmFnZSIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQVNBTiAgICAgICAgIi1XZXJyb3IgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tY29tbW9uIC1PMyIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQVNBTkRCRyAgICAgIi1XZXJyb3IgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tY29tbW9uIC1PMSAtZzMgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1vcHRpbWl6ZS1zaWJsaW5nLWNhbGxzICIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQ0hFQ0sgICAgICAgIi1XZXJyb3IgLU9zIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19DSEVDS0ZVTEwgICAiJHtDTUFLRV9DX0ZMQUdTX0NIRUNLfSAtV2Nhc3QtcXVhbCIpCitlbmRpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKKworaWYoQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcpCisgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdhbGwgLVdleHRyYSAtVyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV3dyaXRlLXN0cmluZ3MgLVdwb2ludGVyLWFyaXRoIC1XaW1wbGljaXQtZmFsbHRocm91Z2ggLVdzaGFkb3ciKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX1JFTEVBU0UgICAgICItTzIiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX0RFQlVHICAgICAgICItTzAgLWczIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19DT1ZFUkFHRSAgICAiLU8wIC1nMyAtLWNvdmVyYWdlIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19BU0FOICAgICAgICAiLVdlcnJvciAtZnNhbml0aXplPWFkZHJlc3MgLWZuby1jb21tb24gLWZzYW5pdGl6ZT11bmRlZmluZWQgLWZuby1zYW5pdGl6ZS1yZWNvdmVyIC1PMyIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQVNBTkRCRyAgICAgIi1XZXJyb3IgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tY29tbW9uIC1mc2FuaXRpemU9dW5kZWZpbmVkIC1mbm8tc2FuaXRpemUtcmVjb3ZlciAtTzEgLWczIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscyAiKQorICAgIHNldChDTUFLRV9DX0ZMQUdTX01FTVNBTiAgICAgICItV2Vycm9yIC1mc2FuaXRpemU9bWVtb3J5IC1PMyIpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfTUVNU0FOREJHICAgIi1XZXJyb3IgLWZzYW5pdGl6ZT1tZW1vcnkgLU8xIC1nMyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZm5vLW9wdGltaXplLXNpYmxpbmctY2FsbHMgLWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucz0yIikKKyAgICBzZXQoQ01BS0VfQ19GTEFHU19DSEVDSyAgICAgICAiLVdlcnJvciAtT3MiKQorZW5kaWYoQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcpCisKK2lmKE1TVkMpCisgICAgc2V0KENNQUtFX0NfRkxBR1NfQ0hFQ0sgICAgICAgIi9XWCIpCitlbmRpZihNU1ZDKQorCitpZihDTUFLRV9CVUlMRF9UWVBFIFNUUkVRVUFMICJDb3ZlcmFnZSIpCisgICAgaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MgT1IgQ01BS0VfQ09NUElMRVJfSVNfQ0xBTkcpCisgICAgICAgIHNldChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICItLWNvdmVyYWdlIikKKyAgICBlbmRpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQyBPUiBDTUFLRV9DT01QSUxFUl9JU19DTEFORykKK2VuZGlmKENNQUtFX0JVSUxEX1RZUEUgU1RSRVFVQUwgIkNvdmVyYWdlIikKKworaWYoTElCX0lOU1RBTExfRElSKQorZWxzZSgpCisgICAgc2V0KExJQl9JTlNUQUxMX0RJUiBsaWIpCitlbmRpZigpCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMoaW5jbHVkZS8pCisKK2lmKEVOQUJMRV9aTElCX1NVUFBPUlQpCisgICAgZmluZF9wYWNrYWdlKFpMSUIpCisKKyAgICBpZihaTElCX0ZPVU5EKQorICAgICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7WkxJQl9JTkNMVURFX0RJUn0pCisgICAgZW5kaWYoWkxJQl9GT1VORCkKK2VuZGlmKEVOQUJMRV9aTElCX1NVUFBPUlQpCisKK2FkZF9zdWJkaXJlY3RvcnkobGlicmFyeSkKK2FkZF9zdWJkaXJlY3RvcnkoaW5jbHVkZSkKKworaWYoRU5BQkxFX1BST0dSQU1TKQorICAgIGFkZF9zdWJkaXJlY3RvcnkocHJvZ3JhbXMpCitlbmRpZigpCisKK0FERF9DVVNUT01fVEFSR0VUKGFwaWRvYworICAgIENPTU1BTkQgZG94eWdlbiBkb3h5Z2VuL21iZWR0bHMuZG94eWZpbGUKKyAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCisKK2lmKEVOQUJMRV9URVNUSU5HKQorICAgIGVuYWJsZV90ZXN0aW5nKCkKKworICAgIGFkZF9zdWJkaXJlY3RvcnkodGVzdHMpCisKKyAgICAjIGFkZGl0aW9uYWwgY29udmVuaWVuY2UgdGFyZ2V0cyBmb3IgVW5peCBvbmx5CisgICAgaWYoVU5JWCkKKworICAgICAgICBBRERfQ1VTVE9NX1RBUkdFVChjb3Z0ZXN0CisgICAgICAgICAgICBDT01NQU5EIG1ha2UgdGVzdAorICAgICAgICAgICAgQ09NTUFORCBwcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0CisgICAgICAgICAgICBDT01NQU5EIHRlc3RzL2NvbXBhdC5zaAorICAgICAgICAgICAgQ09NTUFORCB0ZXN0cy9zc2wtb3B0LnNoCisgICAgICAgICkKKworICAgICAgICBBRERfQ1VTVE9NX1RBUkdFVChsY292CisgICAgICAgICAgICBDT01NQU5EIHJtIC1yZiBDb3ZlcmFnZQorICAgICAgICAgICAgQ09NTUFORCBsY292IC0tY2FwdHVyZSAtLWluaXRpYWwgLS1kaXJlY3RvcnkgbGlicmFyeS9DTWFrZUZpbGVzL21iZWR0bHMuZGlyIC1vIGZpbGVzLmluZm8KKyAgICAgICAgICAgIENPTU1BTkQgbGNvdiAtLWNhcHR1cmUgLS1kaXJlY3RvcnkgbGlicmFyeS9DTWFrZUZpbGVzL21iZWR0bHMuZGlyIC1vIHRlc3RzLmluZm8KKyAgICAgICAgICAgIENPTU1BTkQgbGNvdiAtLWFkZC10cmFjZWZpbGUgZmlsZXMuaW5mbyAtLWFkZC10cmFjZWZpbGUgdGVzdHMuaW5mbyAtbyBhbGwuaW5mbworICAgICAgICAgICAgQ09NTUFORCBsY292IC0tcmVtb3ZlIGFsbC5pbmZvIC1vIGZpbmFsLmluZm8gJyouaCcKKyAgICAgICAgICAgIENPTU1BTkQgZ2VuZGVzYyB0ZXN0cy9EZXNjcmlwdGlvbnMudHh0IC1vIGRlc2NyaXB0aW9ucworICAgICAgICAgICAgQ09NTUFORCBnZW5odG1sIC0tdGl0bGUgIm1iZWQgVExTIiAtLWRlc2NyaXB0aW9uLWZpbGUgZGVzY3JpcHRpb25zIC0ta2VlcC1kZXNjcmlwdGlvbnMgLS1sZWdlbmQgLS1uby1icmFuY2gtY292ZXJhZ2UgLW8gQ292ZXJhZ2UgZmluYWwuaW5mbworICAgICAgICAgICAgQ09NTUFORCBybSAtZiBmaWxlcy5pbmZvIHRlc3RzLmluZm8gYWxsLmluZm8gZmluYWwuaW5mbyBkZXNjcmlwdGlvbnMKKyAgICAgICAgKQorCisgICAgICAgIEFERF9DVVNUT01fVEFSR0VUKG1lbWNoZWNrCisgICAgICAgICAgICBDT01NQU5EIHNlZCAtaS5iYWsgcysvdXNyL2Jpbi92YWxncmluZCtgd2hpY2ggdmFsZ3JpbmRgKyBEYXJ0Q29uZmlndXJhdGlvbi50Y2wKKyAgICAgICAgICAgIENPTU1BTkQgY3Rlc3QgLU8gbWVtY2hlY2subG9nIC1EIEV4cGVyaW1lbnRhbE1lbUNoZWNrCisgICAgICAgICAgICBDT01NQU5EIHRhaWwgLW4xIG1lbWNoZWNrLmxvZyB8IGdyZXAgJ01lbW9yeSBjaGVja2luZyByZXN1bHRzOicgPiAvZGV2L251bGwKKyAgICAgICAgICAgIENPTU1BTkQgcm0gLWYgbWVtY2hlY2subG9nCisgICAgICAgICAgICBDT01NQU5EIG12IERhcnRDb25maWd1cmF0aW9uLnRjbC5iYWsgRGFydENvbmZpZ3VyYXRpb24udGNsCisgICAgICAgICkKKyAgICBlbmRpZihVTklYKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL0NoYW5nZUxvZyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NTdiYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9DaGFuZ2VMb2cKQEAgLTAsMCArMSwyMDg0IEBACittYmVkIFRMUyBDaGFuZ2VMb2cgKFNvcnRlZCBwZXIgYnJhbmNoLCBkYXRlKQorCis9IG1iZWQgVExTIDIuNC4xIGJyYW5jaCByZWxlYXNlZCAyMDE2LTEyLTEzCisKK0NoYW5nZXMKKyAgICogVXBkYXRlIHRvIENNQUMgdGVzdCBkYXRhLCB0YWtlbiBmcm9tIC0gTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEIgLQorICAgICBSZWNvbW1lbmRhdGlvbiBmb3IgQmxvY2sgQ2lwaGVyIE1vZGVzIG9mIE9wZXJhdGlvbjogVGhlIENNQUMgTW9kZSBmb3IKKyAgICAgQXV0aGVudGljYXRpb24g4oCTIE9jdG9iZXIgIDIwMTYKKworPSBtYmVkIFRMUyAyLjQuMCBicmFuY2ggcmVsZWFzZWQgMjAxNi0xMC0xNworCitTZWN1cml0eQorICAgKiBSZW1vdmVkIHRoZSBNQkVEVExTX1NTTF9BRUFEX1JBTkRPTV9JViBvcHRpb24sIGJlY2F1c2UgaXQgd2FzIG5vdCBjb21wbGlhbnQKKyAgICAgd2l0aCBSRkMtNTExNiBhbmQgY291bGQgbGVhZCB0byBzZXNzaW9uIGtleSByZWNvdmVyeSBpbiB2ZXJ5IGxvbmcgVExTCisgICAgIHNlc3Npb25zLiAiTm9uY2UtRGlzcmVzcGVjdGluZyBBZHZlcnNhcmllcyBQcmFjdGljYWwgRm9yZ2VyeSBBdHRhY2tzIG9uIEdDTSBpbgorICAgICBUTFMiIC0gSC4gQm9jaywgQS4gWmF1bmVyLCBTLiBEZXZsaW4sIEouIFNvbW9yb3Zza3ksIFAuIEpvdmFub3ZpYy4KKyAgICAgaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNi80NzUucGRmCisgICAqIEZpeGVkIHBvdGVudGlhbCBzdGFjayBjb3JydXB0aW9uIGluIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIoKSBhbmQKKyAgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlcigpIHdoZW4gdGhlIHNpZ25hdHVyZSBpcyBjb3BpZWQgdG8gdGhlIGJ1ZmZlcgorICAgICB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBkZXN0aW5hdGlvbi4gVGhlCisgICAgIGlzc3VlIGNhbm5vdCBiZSB0cmlnZ2VyZWQgcmVtb3RlbHkuIEZvdW5kIGJ5IEpldGhybyBCZWVrbWFuLgorCitGZWF0dXJlcworICAgKiBBZGRlZCBzdXBwb3J0IGZvciBDTUFDIGZvciBBRVMgYW5kIDNERVMgYW5kIEFFUy1DTUFDLVBSRi0xMjgsIGFzIGRlZmluZWQgYnkKKyAgICAgTklTVCBTUCA4MDAtMzhCLCBSRkMtNDQ5MyBhbmQgUkZDLTQ2MTUuCisgICAqIEFkZGVkIGhhcmR3YXJlIGVudHJvcHkgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoYXQgdGhlIGhhcmR3YXJlIGVudHJvcHkgc291cmNlCisgICAgIGlzIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4KKyAgICogQWRkZWQgYSBzY3JpcHQgdG8gcHJpbnQgYnVpbGQgZW52aXJvbm1lbnQgaW5mbyBmb3IgZGlhZ25vc3RpYyB1c2UgaW4gdGVzdAorICAgICBzY3JpcHRzLCB3aGljaCBpcyBhbHNvIG5vdyBjYWxsZWQgYnkgYWxsLnNoLgorICAgKiBBZGRlZCB0aGUgbWFjcm8gTUJFRFRMU19YNTA5X01BWF9GSUxFX1BBVEhfTEVOIHRoYXQgZW5hYmxlcyB0aGUgdXNlciB0bworICAgICBjb25maWd1cmUgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgZmlsZSBwYXRoIHRoYXQgY2FuIGJlIGJ1ZmZlcmVkIHdoZW4KKyAgICAgY2FsbGluZyBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgoKS4KKyAgICogQWRkZWQgYSBjb25maWd1cmF0aW9uIGZpbGUgY29uZmlnLW5vLWVudHJvcHkuaCB0aGF0IGNvbmZpZ3VyZXMgdGhlIHN1YnNldCBvZgorICAgICBsaWJyYXJ5IGZlYXR1cmVzIHRoYXQgZG8gbm90IHJlcXVpcmUgYW4gZW50cm9weSBzb3VyY2UuCisgICAqIEFkZGVkIHRoZSBtYWNybyBNQkVEVExTX0VOVFJPUFlfTUlOX0hBUkRXQVJFIGluIGNvbmZpZy5oLiBUaGlzIGFsbG93cyB1c2VycworICAgICB0byBjb25maWd1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIGZvciBlbnRyb3B5IHNvdXJjZXMgdXNpbmcgdGhlCisgICAgIG1iZWR0bHNfaGFyZHdhcmVfcG9sbCgpIGZ1bmN0aW9uLgorCitCdWdmaXgKKyAgICogRml4IGZvciBwbGF0Zm9ybSB0aW1lIGFic3RyYWN0aW9uIHRvIGF2b2lkIGRlcGVuZGVuY3kgaXNzdWVzIHdoZXJlIGEgYnVpbGQKKyAgICAgbWF5IG5lZWQgdGltZSBidXQgbm90IHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgYWJzdHJhY3Rpb24sIGFuZCBhZGRlZAorICAgICBjb25maWd1cmF0aW9uIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBjaGVja19jb25maWcuaAorICAgKiBGaXggZGVwZW5kZW5jeSBpc3N1ZSBpbiBNYWtlZmlsZSB0byBhbGxvdyBwYXJhbGxlbCBidWlsZHMuCisgICAqIEZpeCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgYmxvY2sgbGVuZ3RocyBpbiBjcnlwdF9hbmRfaGFzaC5jIHNhbXBsZSBwcm9ncmFtLAorICAgICB3aGVuIEdDTSBpcyB1c2VkLiBGb3VuZCBieSB1ZGYyNDU3LiAjNDQxCisgICAqIEZpeCBmb3Iga2V5IGV4Y2hhbmdlcyBiYXNlZCBvbiBFQ0RILVJTQSBvciBFQ0RILUVDRFNBIHdoaWNoIHdlcmVuJ3QKKyAgICAgZW5hYmxlZCB1bmxlc3Mgb3RoZXJzIHdlcmUgYWxzbyBwcmVzZW50LiBGb3VuZCBieSBEYXZpZCBGZXJuYW5kZXouICM0MjgKKyAgICogRml4IGZvciBvdXQtb2YtdHJlZSBidWlsZHMgdXNpbmcgQ01ha2UuIEZvdW5kIGJ5IGp3dXJ6ZXIsIGFuZCBmaXggYmFzZWQgb24KKyAgICAgYSBjb250cmlidXRpb24gZnJvbSBUb2JpYXMgVGFuZ2VtYW5uLiAjNTQxCisgICAqIEZpeGVkIGNlcnRfYXBwLmMgc2FtcGxlIHByb2dyYW0gZm9yIGRlYnVnIG91dHB1dCBhbmQgZm9yIHVzZSB3aGVuIG5vIHJvb3QKKyAgICAgY2VydGlmaWNhdGVzIGFyZSBwcm92aWRlZC4KKyAgICogRml4IGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0aGF0IHdvdWxkIGNhdXNlIGEgMSBieXRlIG92ZXJyZWFkIGluCisgICAgIG1iZWR0bHNfYXNuMV9nZXRfaW50KCkuIEZvdW5kIGFuZCBmaXhlZCBieSBHdWlkbyBWcmFua2VuLiAjNTk5CisgICAqIEZpeGVkIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgdW5pbnRlbmRlZCBkb3VibGUgaW5pdGlhbGlzYXRpb25zCisgICAgIGFuZCBkb3VibGUgZnJlZXMuIEZvdW5kIGJ5IE5pa2xhcyBBbW5lYnJhdHQuCisgICAqIEZpeGVkIHRoZSBzYW1wbGUgYXBwbGljYXRpb25zIGdlbl9rZXkuYywgY2VydF9yZXEuYyBhbmQgY2VydF93cml0ZS5jIGZvcgorICAgICBidWlsZHMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gTUJFRFRMU19QRU1fV1JJVEVfQyBpcyBub3QgZGVmaW5lZC4gRm91bmQKKyAgICAgYnkgaW5lc3RsZXJvZGUuICM1NTkuCisgICAqIEZpeCBtYmVkdGxzX3g1MDlfZ2V0X3NpZygpIHRvIHVwZGF0ZSB0aGUgQVNOMSB0eXBlIGluIHRoZSBtYmVkdGxzX3g1MDlfYnVmCisgICAgIGRhdGEgc3RydWN0dXJlIHVudGlsIGFmdGVyIGVycm9yIGNoZWNrcyBhcmUgc3VjY2Vzc2Z1bC4gRm91bmQgYnkKKyAgICAgc3VicmFtYW55YW0tYy4gIzYyMgorICAgKiBGaXggZG9jdW1lbnRhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gbWlzc21hdGNoIGZvciBmdW5jdGlvbiBhcmd1bWVudHMgb2YKKyAgICAgbWJlZHRsc19nY21fZmluaXNoKCkuIEZvdW5kIGJ5IGNtaWF0cGFhci4gIzYwMgorICAgKiBHdWFyYW50ZWUgdGhhdCBQPlEgYXQgUlNBIGtleSBnZW5lcmF0aW9uLiBGb3VuZCBieSBpbmVzdGxlcm9kZS4gIzU1OAorICAgKiBGaXggcG90ZW50aWFsIGJ5dGUgb3ZlcnJlYWQgd2hlbiB2ZXJpZnlpbmcgbWFsZm9ybWVkIFNFUlZFUl9IRUxMTyBpbgorICAgICBzc2xfcGFyc2VfaGVsbG9fdmVyaWZ5X3JlcXVlc3QoKSBmb3IgRFRMUy4gRm91bmQgYnkgR3VpZG8gVnJhbmtlbi4KKyAgICogRml4IGNoZWNrIGZvciB2YWxpZGl0eSBvZiBkYXRlIHdoZW4gcGFyc2luZyBpbiBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoKS4KKyAgICAgRm91bmQgYnkgc3VicmFtYW55YW0tYy4gIzYyNgorICAgKiBGaXggY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIEludGVybmV0IEV4cGxvcmVyIGNsaWVudCBhdXRoZW50aWNhdGlvbiwKKyAgICAgd2hlcmUgdGhlIGxpbWl0ZWQgaGFzaCBjaG9pY2VzIHByZXZlbnRlZCB0aGUgY2xpZW50IGZyb20gc2VuZGluZyBpdHMKKyAgICAgY2VydGlmaWNhdGUuIEZvdW5kIGJ5IHRldW1hcy4gIzUxMworICAgKiBGaXggY29tcGlsYXRpb24gd2l0aG91dCBNQkVEVExTX1NFTEZfVEVTVCBlbmFibGVkLgorCitDaGFuZ2VzCisgICAqIEV4dGVuZGVkIHRlc3QgY292ZXJhZ2Ugb2Ygc3BlY2lhbCBjYXNlcywgYW5kIGFkZGVkIG5ldyB0aW1pbmcgdGVzdCBzdWl0ZS4KKyAgICogUmVtb3ZlZCBzZWxmLXRlc3RzIGZyb20gdGhlIGJhc2ljLWJ1aWx0LXRlc3Quc2ggc2NyaXB0LCBhbmQgYWRkZWQgYWxsCisgICAgIG1pc3Npbmcgc2VsZi10ZXN0cyB0byB0aGUgdGVzdCBzdWl0ZXMsIHRvIGVuc3VyZSBzZWxmLXRlc3RzIGFyZSBvbmx5CisgICAgIGV4ZWN1dGVkIG9uY2UuCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIDMgYW5kIDQgYnl0ZSBsZW5ndGhzIHRvIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oKS4KKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgYSBZb3R0YSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgLQorICAgICB0aHJvdWdoIHRoZSBzeW1ib2wgWU9UVEFfQ0ZHX01CRURUTFNfVEFSR0VUX0NPTkZJR19GSUxFLgorICAgKiBBZGRlZCBvcHRpbWl6YXRpb24gZm9yIGNvZGUgc3BhY2UgZm9yIFguNTA5L09JRCBiYXNlZCBvbiBjb25maWd1cmVkCisgICAgIGZlYXR1cmVzLiBDb250cmlidXRlZCBieSBBdml2IFBhbGl2b2RhLgorICAgKiBSZW5hbWVkIHNvdXJjZSBmaWxlIGxpYnJhcnkvbmV0LmMgdG8gbGlicmFyeS9uZXRfc29ja2V0cy5jIHRvIGF2b2lkCisgICAgIG5hbWluZyBjb2xsaXNpb24gaW4gcHJvamVjdHMgd2hpY2ggYWxzbyBoYXZlIGZpbGVzIHdpdGggdGhlIGNvbW1vbiBuYW1lCisgICAgIG5ldC5jLiBGb3IgY29uc2lzdGVuY3ksIHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlLCBuZXQuaCwgaXMgbWFya2VkIGFzCisgICAgIGRlcHJlY2F0ZWQsIGFuZCBpdHMgY29udGVudHMgbW92ZWQgdG8gbmV0X3NvY2tldHMuaC4KKyAgICogQ2hhbmdlZCB0aGUgc3RyYXRlZ3kgZm9yIFguNTA5IGNlcnRpZmljYXRlIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24sIHRvIG5vCisgICAgIGxvbmdlciBkaXNyZWdhcmQgY2VydGlmaWNhdGVzIHdpdGggdW5yZWNvZ25pc2VkIGZpZWxkcy4KKworPSBtYmVkIFRMUyAyLjMuMCBicmFuY2ggcmVsZWFzZWQgMjAxNi0wNi0yOAorCitTZWN1cml0eQorICAgKiBGaXggbWlzc2luZyBwYWRkaW5nIGxlbmd0aCBjaGVjayBpbiBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdAorICAgICByZXF1aXJlZCBieSBQS0NTMSB2Mi4yCisgICAqIEZpeCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB0byBidWZmZXIgb3ZlcmZsb3cgaW4KKyAgICAgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQgYW5kIG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZW5jcnlwdAorICAgICAobm90IHRyaWdnZXJhYmxlIHJlbW90ZWx5IGluIChEKVRMUykuCisgICAqIEZpeCBhIHBvdGVudGlhbCBpbnRlZ2VyIHVuZGVyZmxvdyB0byBidWZmZXIgb3ZlcnJlYWQgaW4gCisgICAgIG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZGVjcnlwdC4gSXQgaXMgbm90IHRyaWdnZXJhYmxlIHJlbW90ZWx5IGluCisgICAgIFNTTC9UTFMuCisKK0ZlYXR1cmVzCisgICAqIFN1cHBvcnQgZm9yIHBsYXRmb3JtIGFic3RyYWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgdGltZSgpCisgICAgIGZ1bmN0aW9uLgorCitCdWdmaXgKKyAgICogRml4IGJ1ZyBpbiBtYmVkdGxzX21waV9hZGRfbXBpKCkgdGhhdCBjYXVzZWQgd3JvbmcgcmVzdWx0cyB3aGVuIHRoZSB0aHJlZQorICAgICBhcmd1bWVudHMgd2hlcmUgdGhlIHNhbWUgKGluLXBsYWNlIGRvdWJsaW5nKS4gRm91bmQgYW5kIGZpeGVkIGJ5IEphbm9zCisgICAgIEZvbGxhdGguICMzMDkKKyAgICogRml4IHBvdGVudGlhbCBidWlsZCBmYWlsdXJlcyByZWxhdGVkIHRvIHRoZSAnYXBpZG9jJyB0YXJnZXQsIGludHJvZHVjZWQKKyAgICAgaW4gdGhlIHByZXZpb3VzIHBhdGNoIHJlbGVhc2UuIEZvdW5kIGJ5IFJvYmVydCBTY2hlY2suICMzOTAgIzM5MQorICAgKiBGaXggaXNzdWUgaW4gTWFrZWZpbGUgdGhhdCBwcmV2ZW50ZWQgYnVpbGRpbmcgdXNpbmcgYXJtYXIuICMzODYKKyAgICogRml4IG1lbW9yeSBsZWFrIHRoYXQgb2NjdXJlZCBvbmx5IHdoZW4gRUNKUEFLRSB3YXMgZW5hYmxlZCBhbmQgRUNESEUgYW5kCisgICAgIEVDRFNBIHdhcyBkaXNhYmxlZCBpbiBjb25maWcuaCAuIFRoZSBsZWFrIGRpZG4ndCBvY2N1ciBieSBkZWZhdWx0LgorICAgKiBGaXggYW4gaXNzdWUgdGhhdCBjYXVzZWQgdmFsaWQgY2VydGlmaWNhdGVzIHRvIGJlIHJlamVjdGVkIHdoZW5ldmVyIGFuCisgICAgIGV4cGlyZWQgb3Igbm90IHlldCB2YWxpZCBjZXJ0aWZpY2F0ZSB3YXMgcGFyc2VkIGJlZm9yZSBhIHZhbGlkIGNlcnRpZmljYXRlCisgICAgIGluIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlIGxpc3QuCisgICAqIEZpeCBidWcgaW4gbWJlZHRsc194NTA5X2NydF9wYXJzZSB0aGF0IGNhdXNlZCB0cmFpbGluZyBleHRyYSBkYXRhIGluIHRoZSAKKyAgICAgYnVmZmVyIGFmdGVyIERFUiBjZXJ0aWZpY2F0ZXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHJhdyByZXByZXNlbnRhdGlvbi4KKyAgICogRml4IGlzc3VlIHRoYXQgY2F1c2VkIGEgaGFuZyB3aGVuIGdlbmVyYXRpbmcgUlNBIGtleXMgb2Ygb2RkIGJpdGxlbmd0aAorICAgKiBGaXggYnVnIGluIG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0IHRoYXQgbWFkZSBudWxsIHBvaW50ZXIKKyAgICAgZGVyZWZlcmVuY2UgcG9zc2libGUuCisgICAqIEZpeCBpc3N1ZSB0aGF0IGNhdXNlZCBhIGNyYXNoIGlmIGludmFsaWQgY3VydmVzIHdlcmUgcGFzc2VkIHRvCisgICAgIG1iZWR0bHNfc3NsX2NvbmZfY3VydmVzLiAjMzczCisgICAqIEZpeCBpc3N1ZSBpbiBzc2xfZm9ya19zZXJ2ZXIgd2hpY2ggd2FzIHByZXZlbnRpbmcgaXQgZnJvbSBmdW5jdGlvbmluZy4gIzQyOQorICAgKiBGaXggbWVtb3J5IGxlYWtzIGluIHRlc3QgZnJhbWV3b3JrCisgICAqIEZpeCB0ZXN0IGluIHNzbC1vcHQuc2ggdGhhdCBkb2VzIG5vdCBydW4gcHJvcGVybHkgd2l0aCB2YWxncmluZAorICAgKiBGaXggdW5jaGVja2VkIGNhbGxzIHRvIG1tYmVkdGxzX21kX3NldHVwKCkuIEZpeCBieSBCcmlhbiBNdXJyYXkuICM1MDIKKworQ2hhbmdlcworICAgKiBPbiBBUk0gcGxhdGZvcm1zLCB3aGVuIGNvbXBpbGluZyB3aXRoIC1PMCB3aXRoIEdDQywgQ2xhbmcgb3IgYXJtY2M1LAorICAgICBkb24ndCB1c2UgdGhlIG9wdGltaXplZCBhc3NlbWJseSBmb3IgYmlnbnVtIG11bHRpcGxpY2F0aW9uLiBUaGlzIHJlbW92ZXMKKyAgICAgdGhlIG5lZWQgdG8gcGFzcyAtZm9taXQtZnJhbWUtcG9pbnRlciB0byBhdm9pZCBhIGJ1aWxkIGVycm9yIHdpdGggLU8wLgorICAgKiBEaXNhYmxlZCBTU0x2MyBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgKiBPcHRpbWl6ZWQgbWJlZHRsc19tcGlfemVyb2l6ZSgpIGZvciBNUEkgaW50ZWdlciBzaXplLiAoRml4IGJ5IEFsZXhleQorICAgICBTa2Fsb3p1YikuCisgICAqIEZpeCBub24tY29tcGxpYW5jZSBzZXJ2ZXIgZXh0ZW5zaW9uIGhhbmRsaW5nLiBFeHRlbnNpb25zIGZvciBTU0x2MyBhcmUgbm93CisgICAgIGlnbm9yZWQsIGFzIHJlcXVpcmVkIGJ5IFJGQzYxMDEuCisKKz0gbWJlZCBUTFMgMi4yLjEgcmVsZWFzZWQgMjAxNi0wMS0wNQorCitTZWN1cml0eQorICAgKiBGaXggcG90ZW50aWFsIGRvdWJsZSBmcmVlIHdoZW4gbWJlZHRsc19hc24xX3N0b3JlX25hbWVkX2RhdGEoKSBmYWlscyB0bworICAgICBhbGxvY2F0ZSBtZW1vcnkuIE9ubHkgdXNlZCBmb3IgY2VydGlmaWNhdGUgZ2VuZXJhdGlvbiwgbm90IHRyaWdnZXJhYmxlCisgICAgIHJlbW90ZWx5IGluIFNTTC9UTFMuIEZvdW5kIGJ5IFJhZmHFgiBQcnp5d2FyYS4gIzM2NworICAgKiBEaXNhYmxlIE1ENSBoYW5kc2hha2Ugc2lnbmF0dXJlcyBpbiBUTFMgMS4yIGJ5IGRlZmF1bHQgdG8gcHJldmVudCB0aGUKKyAgICAgU0xPVEggYXR0YWNrIG9uIFRMUyAxLjIgc2VydmVyIGF1dGhlbnRpY2F0aW9uIChvdGhlciBhdHRhY2tzIGZyb20gdGhlCisgICAgIFNMT1RIIHBhcGVyIGRvIG5vdCBhcHBseSB0byBhbnkgdmVyc2lvbiBvZiBtYmVkIFRMUyBvciBQb2xhclNTTCkuCisgICAgIGh0dHBzOi8vd3d3Lm1pdGxzLm9yZy9wYWdlcy9hdHRhY2tzL1NMT1RICisKK0J1Z2ZpeAorICAgKiBGaXggb3Zlci1yZXN0cmljdGl2ZSBsZW5ndGggbGltaXQgaW4gR0NNLiBGb3VuZCBieSBBbmRyZWFzLU4uICMzNjIKKyAgICogRml4IGJ1ZyBpbiBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIHRoYXQgY2F1c2VkIHZhbGlkIGNoYWlucyB0byBiZSByZWplY3RlZAorICAgICB3aGVuIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgY2VydGlmaWNhdGUgaGFzIHBhdGhMZW5Db25zdHJhaW50PTAuIEZvdW5kIGJ5CisgICAgIE5pY2hvbGFzIFdpbHNvbi4gSW50cm9kdWNlZCBpbiBtYmVkIFRMUyAyLjIuMC4gIzI4MAorICAgKiBSZW1vdmVkIHBvdGVudGlhbCBsZWFrIGluIG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfc2lnbigpLCBmb3VuZCBieQorICAgICBKYXlhcmFnaGF2ZW5kcmFuSy4gIzM3MgorICAgKiBGaXggc3Vib3B0aW1hbCBoYW5kbGluZyBvZiB1bmV4cGVjdGVkIHJlY29yZHMgdGhhdCBjYXVzZWQgaW50ZXJvcCBpc3N1ZXMKKyAgICAgd2l0aCBzb21lIHBlZXJzIG92ZXIgdW5yZWxpYWJsZSBsaW5rcy4gQXZvaWQgZHJvcHBpbmcgYW4gZW50aXJlIERUTFMKKyAgICAgZGF0YWdyYW0gaWYgYSBzaW5nbGUgcmVjb3JkIGluIGEgZGF0YWdyYW0gaXMgdW5leHBlY3RlZCwgaW5zdGVhZCBvbmx5CisgICAgIGRyb3AgdGhlIHJlY29yZCBhbmQgbG9vayBhdCBzdWJzZXF1ZW50IHJlY29yZHMgKGlmIGFueSBhcmUgcHJlc2VudCkgaW4KKyAgICAgdGhlIHNhbWUgZGF0YWdyYW0uIEZvdW5kIGJ5IGplYW5ub3RsYXBpbi4gIzM0NQorCis9IG1iZWQgVExTIDIuMi4wIHJlbGVhc2VkIDIwMTUtMTEtMDQKKworU2VjdXJpdHkKKyAgICogRml4IHBvdGVudGlhbCBkb3VibGUgZnJlZSBpZiBtYmVkdGxzX3NzbF9jb25mX3BzaygpIGlzIGNhbGxlZCBtb3JlIHRoYW4KKyAgICAgb25jZSBhbmQgc29tZSBhbGxvY2F0aW9uIGZhaWxzLiBDYW5ub3QgYmUgZm9yY2VkIHJlbW90ZWx5LiBGb3VuZCBieSBHdWlkbworICAgICBWcmFua2VuLCBJbnRlbHdvcmtzLgorICAgKiBGaXggcG90ZW50aWFsIGhlYXAgY29ycnVwdGlvbiBvbiBXaW5kb3dzIHdoZW4KKyAgICAgbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCkgaXMgcGFzc2VkIGEgcGF0aCBsb25nZXIgdGhhbiAyR0IuIENhbm5vdCBiZQorICAgICB0cmlnZ2VyZWQgcmVtb3RlbHkuIEZvdW5kIGJ5IEd1aWRvIFZyYW5rZW4sIEludGVsd29ya3MuCisgICAqIEZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHNvbWUgYXNuMV93cml0ZV94eHgoKSBmdW5jdGlvbnMuCisgICAgIENhbm5vdCBiZSB0cmlnZ2VyZWQgcmVtb3RlbHkgdW5sZXNzIHlvdSBjcmVhdGUgWC41MDkgY2VydGlmaWNhdGVzIGJhc2VkCisgICAgIG9uIHVudHJ1c3RlZCBpbnB1dCBvciB3cml0ZSBrZXlzIG9mIHVudHJ1c3RlZCBvcmlnaW4uIEZvdW5kIGJ5IEd1aWRvCisgICAgIFZyYW5rZW4sIEludGVsd29ya3MuCisgICAqIFRoZSBYNTA5IG1heF9wYXRobGVuIGNvbnN0cmFpbnQgd2FzIG5vdCBlbmZvcmNlZCBvbiBpbnRlcm1lZGlhdGUKKyAgICAgY2VydGlmaWNhdGVzLiBGb3VuZCBieSBOaWNob2xhcyBXaWxzb24sIGZpeCBhbmQgdGVzdHMgcHJvdmlkZWQgYnkKKyAgICAgSmFub3MgRm9sbGF0aC4gIzI4MCBhbmQgIzMxOQorCitGZWF0dXJlcworICAgKiBFeHBlcmltZW50YWwgc3VwcG9ydCBmb3IgRUMgSi1QQUtFIGFzIGRlZmluZWQgaW4gVGhyZWFkIDEuMC4wLgorICAgICBEaXNhYmxlZCBieSBkZWZhdWx0IGFzIHRoZSBzcGVjaWZpY2F0aW9uIG1pZ2h0IHN0aWxsIGNoYW5nZS4KKyAgICogQWRkZWQgYSBrZXkgZXh0cmFjdGlvbiBjYWxsYmFjayB0byBhY2NlZXMgdGhlIG1hc3RlciBzZWNyZXQgYW5kIGtleQorICAgICBibG9jay4gKFBvdGVudGlhbCB1c2VzIGluY2x1ZGUgRUFQLVRMUyBhbmQgVGhyZWFkLikKKworQnVnZml4CisgICAqIFNlbGYtc2lnbmVkIGNlcnRpZmljYXRlcyB3ZXJlIG5vdCBleGNsdWRlZCBmcm9tIHBhdGhsZW4gY291bnRpbmcsCisgICAgIHJlc3VsdGluZyBpbiBzb21lIHZhbGlkIFguNTA5IGJlaW5nIGluY29ycmVjdGx5IHJlamVjdGVkLiBGb3VuZCBhbmQgZml4CisgICAgIHByb3ZpZGVkIGJ5IEphbm9zIEZvbGxhdGguICMzMTkKKyAgICogRml4IGJ1aWxkIGVycm9yIHdpdGggY29uZmlndXJhdGlvbnMgd2hlcmUgRUNESEUtUFNLIGlzIHRoZSBvbmx5IGtleQorICAgICBleGNoYW5nZS4gRm91bmQgYW5kIGZpeCBwcm92aWRlZCBieSBDaHJpcyBIYW1tb25kLiAjMjcwCisgICAqIEZpeCBidWlsZCBlcnJvciB3aXRoIGNvbmZpZ3VyYXRpb25zIHdoZXJlIFJTQSwgUlNBLVBTSywgRUNESC1SU0Egb3IKKyAgICAgRUNIRC1FQ0RTQSBpZiB0aGUgb25seSBrZXkgZXhjaGFuZ2UuIE11bHRpcGxlIHJlcG9ydHMuICMzMTAKKyAgICogRml4ZWQgYSBidWcgY2F1c2luZyBzb21lIGhhbmRzaGFrZXMgdG8gZmFpbCBkdWUgdG8gc29tZSBub24tZmF0YWwgYWxlcnRzCisgICAgIG5vdCBiZWluZyBwcm9wZXJseSBpZ25vcmVkLiBGb3VuZCBieSBtYW5jaGEgYW5kIEthc29tIEtvaHQtYXJzYSwgIzMwOAorICAgKiBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeShfd2l0aF9wcm9maWxlKSgpIG5vdyBhbHNvIGNoZWNrcyB0aGUga2V5IHR5cGUgYW5kCisgICAgIHNpemUvY3VydmUgYWdhaW5zdCB0aGUgcHJvZmlsZS4gQmVmb3JlIHRoYXQsIHRoZXJlIHdhcyBubyB3YXkgdG8gc2V0IGEKKyAgICAgbWluaW11bSBrZXkgc2l6ZSBmb3IgZW5kLWVudGl0eSBjZXJ0aWZpY2F0ZXMgd2l0aCBSU0Ega2V5cy4gRm91bmQgYnkKKyAgICAgTWF0dGhldyBQYWdlIG9mIFNjYW5uZXggRWxlY3Ryb25pY3MgTHRkLgorICAgKiBGaXggZmFpbHVyZXMgaW4gTVBJIG9uIFNwYXJjKDY0KSBkdWUgdG8gdXNlIG9mIGJhZCBhc3NlbWJseSBjb2RlLgorICAgICBGb3VuZCBieSBLdXJ0IERhbmllbHNvbi4gIzI5MgorICAgKiBGaXggdHlwbyBpbiBuYW1lIG9mIHRoZSBleHRLZXlVc2FnZSBPSUQuIEZvdW5kIGJ5IGluZXN0bGVyb2RlLCAjMzE0CisgICAqIEZpeCBidWcgaW4gQVNOLjEgZW5jb2Rpbmcgb2YgYm9vbGVhbnMgdGhhdCBjYXVzZWQgZ2VuZXJhdGVkIENBCisgICAgIGNlcnRpZmljYXRlcyB0byBiZSByZWplY3RlZCBieSBzb21lIGFwcGxpY2F0aW9ucywgaW5jbHVkaW5nIE9TIFgKKyAgICAgS2V5Y2hhaW4uIEZvdW5kIGFuZCBmaXhlZCBieSBKb25hdGhhbiBMZXJveSwgSW5pa3VwLgorCitDaGFuZ2VzCisgICAqIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIG1iZWR0bHNfZWNwX211bGFkZCgpIHdoZW4gb25lIG9mIHRoZSBzY2FsYXJzIGlzIDEKKyAgICAgb3IgLTEuCisKKz0gbWJlZCBUTFMgMi4xLjIgcmVsZWFzZWQgMjAxNS0xMC0wNgorCitTZWN1cml0eQorICAgKiBBZGRlZCBmaXggZm9yIENWRS0yMDE1LTUyOTEgdG8gcHJldmVudCBoZWFwIGNvcnJ1cHRpb24gZHVlIHRvIGJ1ZmZlcgorICAgICBvdmVyZmxvdyBvZiB0aGUgaG9zdG5hbWUgb3Igc2Vzc2lvbiB0aWNrZXQuIEZvdW5kIGJ5IEd1aWRvIFZyYW5rZW4sCisgICAgIEludGVsd29ya3MuCisgICAqIEZpeCBwb3RlbnRpYWwgZG91YmxlLWZyZWUgaWYgbWJlZHRsc19zc2xfc2V0X2hzX3BzaygpIGlzIGNhbGxlZCBtb3JlIHRoYW4KKyAgICAgb25jZSBpbiB0aGUgc2FtZSBoYW5kaGFrZSBhbmQgbWJlZHRsc19zc2xfY29uZl9wc2soKSB3YXMgdXNlZC4KKyAgICAgRm91bmQgYW5kIHBhdGNoIHByb3ZpZGVkIGJ5IEd1aWRvIFZyYW5rZW4sIEludGVsd29ya3MuIENhbm5vdCBiZSBmb3JjZWQKKyAgICAgcmVtb3RlbHkuCisgICAqIEZpeCBzdGFjayBidWZmZXIgb3ZlcmZsb3cgaW4gcGtjczEyIGRlY3J5cHRpb24gKHVzZWQgYnkKKyAgICAgbWJlZHRsc19wa19wYXJzZV9rZXkoZmlsZSkoKSB3aGVuIHRoZSBwYXNzd29yZCBpcyA+IDEyOSBieXRlcy4KKyAgICAgRm91bmQgYnkgR3VpZG8gVnJhbmtlbiwgSW50ZWx3b3Jrcy4gTm90IHRyaWdnZXJhYmxlIHJlbW90ZWx5LgorICAgKiBGaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBtYmVkdGxzX21waV9yZWFkX3N0cmluZygpLgorICAgICBGb3VuZCBieSBHdWlkbyBWcmFua2VuLCBJbnRlbHdvcmtzLiBOb3QgZXhwbG9pdGFibGUgcmVtb3RlbHkgaW4gdGhlIGNvbnRleHQKKyAgICAgb2YgVExTLCBidXQgbWlnaHQgYmUgaW4gb3RoZXIgdXNlcy4gT24gMzIgYml0IG1hY2hpbmVzLCByZXF1aXJlcyByZWFkaW5nIGEKKyAgICAgc3RyaW5nIG9mIGNsb3NlIHRvIG9yIGxhcmdlciB0aGFuIDFHQiB0byBleHBsb2l0OyBvbiA2NCBiaXQgbWFjaGluZXMsIHdvdWxkCisgICAgIHJlcXVpcmUgcmVhZGluZyBhIHN0cmluZyBvZiBjbG9zZSB0byBvciBsYXJnZXIgdGhhbiAyXjYyIGJ5dGVzLgorICAgKiBGaXggcG90ZW50aWFsIHJhbmRvbSBtZW1vcnkgYWxsb2NhdGlvbiBpbiBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpCisgICAgIG9uIGNyYWZ0ZWQgUEVNIGlucHV0IGRhdGEuIEZvdW5kIGFuZCBmaXggcHJvdmlkZWQgYnkgR3VpZG8gVnJhbmtlbiwKKyAgICAgSW50ZWx3b3Jrcy4gTm90IHRyaWdnZXJhYmxlIHJlbW90ZWx5IGluIFRMUy4gVHJpZ2dlcmFibGUgcmVtb3RlbHkgaWYgeW91CisgICAgIGFjY2VwdCBQRU0gZGF0YSBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UuCisgICAqIEZpeCBwb3NzaWJsZSBoZWFwIGJ1ZmZlciBvdmVyZmxvdyBpbiBiYXNlNjRfZW5jb2RlZCgpIHdoZW4gdGhlIGlucHV0CisgICAgIGJ1ZmZlciBpcyA1MTJNQiBvciBsYXJnZXIgb24gMzItYml0IHBsYXRmb3Jtcy4gRm91bmQgYnkgR3VpZG8gVnJhbmtlbiwKKyAgICAgSW50ZWx3b3Jrcy4gTm90IHRyaWdlcnJhYmxlIHJlbW90ZWx5IGluIFRMUy4KKyAgICogRml4IHBvdGVudGlhbCBkb3VibGUtZnJlZSBpZiBtYmVkdGxzX2NvbmZfcHNrKCkgaXMgY2FsbGVkIHJlcGVhdGVkbHkgb24KKyAgICAgdGhlIHNhbWUgbWJlZHRsc19zc2xfY29uZmlnIG9iamVjdCBhbmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIEZvdW5kIGJ5CisgICAgIEd1aWRvIFZyYW5rZW4sIEludGVsd29ya3MuIENhbm5vdCBiZSBmb3JjZWQgcmVtb3RlbHkuCisgICAqIEZpeCBwb3RlbnRpYWwgaGVhcCBidWZmZXIgb3ZlcmZsb3cgaW4gc2VydmVycyB0aGF0IHBlcmZvcm0gY2xpZW50CisgICAgIGF1dGhlbnRpY2F0aW9uIGFnYWluc3QgYSBjcmFmdGVkIENBIGNlcnQuIENhbm5vdCBiZSB0cmlnZ2VyZWQgcmVtb3RlbHkKKyAgICAgdW5sZXNzIHlvdSBhbGxvdyB0aGlyZCBwYXJ0aWVzIHRvIHBpY2sgdHJ1c3QgQ0FzIGZvciBjbGllbnQgYXV0aC4KKyAgICAgRm91bmQgYnkgR3VpZG8gVnJhbmtlbiwgSW50ZWx3b3Jrcy4KKworQnVnZml4CisgICAqIEZpeCBjb21waWxlIGVycm9yIGluIG5ldC5jIHdpdGggbXVzbCBsaWJjLiBGb3VuZCBhbmQgcGF0Y2ggcHJvdmlkZWQgYnkKKyAgICAgemhhc2hhICgjMjc4KS4KKyAgICogRml4IG1hY3JvaXphdGlvbiBvZiAnaW5saW5lJyBrZXl3b3JkIHdoZW4gYnVpbGRpbmcgYXMgQysrLiAoIzI3OSkKKworQ2hhbmdlcworICAgKiBBZGRlZCBjaGVja2luZyBvZiBob3N0bmFtZSBsZW5ndGggaW4gbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCkgdG8gZW5zdXJlCisgICAgIGRvbWFpbiBuYW1lcyBhcmUgY29tcGxpYW50IHdpdGggUkZDIDEwMzUuCisgICAqIEZpeGVkIHBhdGhzIGZvciBjaGVja19jb25maWcuaCBpbiBleGFtcGxlIGNvbmZpZyBmaWxlcy4gKEZvdW5kIGJ5IGJhY2hwKQorICAgICAoIzI5MSkKKworPSBtYmVkIFRMUyAyLjEuMSByZWxlYXNlZCAyMDE1LTA5LTE3CisKK1NlY3VyaXR5CisgICAqIEFkZCBjb3VudGVybWVhc3VyZSBhZ2FpbnN0IExlbnN0cmEncyBSU0EtQ1JUIGF0dGFjayBmb3IgUEtDUyMxIHYxLjUKKyAgICAgc2lnbmF0dXJlcy4gKEZvdW5kIGJ5IEZsb3JpYW4gV2VpbWVyLCBSZWQgSGF0LikKKyAgICAgaHR0cHM6Ly9zZWN1cml0eWJsb2cucmVkaGF0LmNvbS8yMDE1LzA5LzAyL2ZhY3RvcmluZy1yc2Eta2V5cy13aXRoLXRscy1wZXJmZWN0LWZvcndhcmQtc2VjcmVjeS8KKyAgICogRml4IHBvc3NpYmxlIGNsaWVudC1zaWRlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAocmVhZCkgd2hlbiB0aGUgY2xpZW50CisgICAgIHRyaWVzIHRvIGNvbnRpbnVlIHRoZSBoYW5kc2hha2UgYWZ0ZXIgaXQgZmFpbGVkIChhIG1pc3VzZSBvZiB0aGUgQVBJKS4KKyAgICAgKEZvdW5kIGFuZCBwYXRjaCBwcm92aWRlZCBieSBGYWJpYW4gRm9lcmcsIEdvdGhhbSBEaWdpdGFsIFNjaWVuY2UgdXNpbmcKKyAgICAgYWZsLWZ1enouKQorCitCdWdmaXgKKyAgICogRml4IHdhcm5pbmcgd2hlbiB1c2luZyBhIDY0Yml0IHBsYXRmb3JtLiAoZm91bmQgYnkgZW1iZWR0aGlzKSAoIzI3NSkKKyAgICogRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gcGFyc2luZyBTdXBwb3J0ZWQgUG9pbnQgRm9ybWF0IGV4dGVuc2lvbiB0aGF0CisgICAgIGNhdXNlZCBzb21lIGhhbmRzaGFrZXMgdG8gZmFpbC4KKworQ2hhbmdlcworICAgKiBNYWRlIFg1MDkgcHJvZmlsZSBwb2ludGVyIGNvbnN0IGluIG1iZWR0bHNfc3NsX2NvbmZfY2VydF9wcm9maWxlKCkgdG8gYWxsb3cKKyAgICAgdXNlIG9mIG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9uZXh0LiAoZm91bmQgYnkgTldpbHNvbikKKyAgICogV2hlbiBhIGNsaWVudCBpbml0aWF0ZXMgYSByZWNvbm5lY3QgZnJvbSB0aGUgc2FtZSBwb3J0IGFzIGEgbGl2ZQorICAgICBjb25uZWN0aW9uLCBpZiBjb29raWUgdmVyaWZpY2F0aW9uIGlzIGF2YWlsYWJsZQorICAgICAoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgZGVmaW5lZCBpbiBjb25maWcuaCwgYW5kIHVzYWJsZSBjb29raWUKKyAgICAgY2FsbGJhY2tzIHNldCB3aXRoIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzKCkpLCB0aGlzIHdpbGwgYmUKKyAgICAgZGV0ZWN0ZWQgYW5kIG1iZWR0bHNfc3NsX3JlYWQoKSB3aWxsIHJldHVybgorICAgICBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCAtIGl0IGlzIHRoZW4gcG9zc2libGUgdG8gc3RhcnQgYSBuZXcKKyAgICAgaGFuZHNoYWtlIHdpdGggdGhlIHNhbWUgY29udGV4dC4gKFNlZSBSRkMgNjM0NyBzZWN0aW9uIDQuMi44LikKKworPSBtYmVkIFRMUyAyLjEuMCByZWxlYXNlZCAyMDE1LTA5LTA0CisKK0ZlYXR1cmVzCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIHlvdHRhIGFzIGEgYnVpbGQgc3lzdGVtLgorICAgKiBQcmltYXJ5IG9wZW4gc291cmNlIGxpY2Vuc2UgY2hhbmdlZCB0byBBcGFjaGUgMi4wIGxpY2Vuc2UuCisKK0J1Z2ZpeAorICAgKiBGaXggc2VnZmF1bHQgaW4gdGhlIGJlbmNobWFyayBwcm9ncmFtIHdoZW4gYmVuY2htYXJraW5nIERITS4KKyAgICogRml4IGJ1aWxkIGVycm9yIHdpdGggQ01ha2UgYW5kIHByZS00LjUgdmVyc2lvbnMgb2YgR0NDIChmb3VuZCBieSBIdWdvCisgICAgIExlaXNpbmspLgorICAgKiBGaXggYnVnIHdoZW4gcGFyc2luZyBhIFNlcnZlckhlbGxvIHdpdGhvdXQgZXh0ZW5zaW9ucyAoZm91bmQgYnkgRGF2aWQKKyAgICAgU2VhcnMpLgorICAgKiBGaXggYnVnIGluIENNYWtlIGxpc3RzIHRoYXQgY2F1c2VkIGxpYm1iZWRjcnlwdG8uYSBub3QgdG8gYmUgaW5zdGFsbGVkCisgICAgIChmb3VuZCBieSBCZW5vaXQgTGVjb2NxKS4KKyAgICogRml4IGJ1ZyBpbiBNYWtlZmlsZSB0aGF0IGNhdXNlZCBsaWJtYmVkY3J5cHRvIGFuZCBsaWJtYmVkeDUwOSBub3QgdG8gYmUKKyAgICAgaW5zdGFsbGVkIChmb3VuZCBieSBSYXdpNjY2KS4KKyAgICogRml4IGNvbXBpbGUgZXJyb3Igd2l0aCBhcm1jYyA1IHdpdGggLS1nbnUgb3B0aW9uLgorICAgKiBGaXggYnVnIGluIE1ha2VmaWxlIHRoYXQgY2F1c2VkIHByb2dyYW1zIG5vdCB0byBiZSBpbnN0YWxsZWQgY29ycmVjdGx5CisgICAgIChmb3VuZCBieSByb2JvdGFuYXJjaHkpICgjMjMyKS4KKyAgICogRml4IGJ1ZyBpbiBNYWtlZmlsZSB0aGF0IHByZXZlbnRlZCBmcm9tIGluc3RhbGxpbmcgd2l0aG91dCBidWlsZGluZyB0aGUKKyAgICAgdGVzdHMgKGZvdW5kIGJ5IHJvYm90YW5hcmNoeSkgKCMyMzIpLgorICAgKiBGaXggbWlzc2luZyAtc3RhdGljLWxpYmdjYyB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgZm9yIFdpbmRvd3MKKyAgICAgd2l0aCBtYWtlLgorICAgKiBGaXggbGluayBlcnJvciB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgZm9yIFdpbmRvd3Mgd2l0aCBtYWtlLgorICAgKiBGaXggZXJyb3Igd2hlbiBsb2FkaW5nIGxpYm1iZWR0bHMuc28uCisgICAqIEZpeCBidWcgaW4gbWJlZHRsc19zc2xfY29uZl9kZWZhdWx0KCkgdGhhdCBjYXVzZWQgdGhlIGRlZmF1bHQgcHJlc2V0IHRvCisgICAgIGJlIGFsd2F5cyB1c2VkIChmb3VuZCBieSBkY2IzMTQpICgjMjM1KQorICAgKiBGaXggYnVnIGluIG1iZWR0bHNfcnNhX3B1YmxpYygpIGFuZCBtYmVkdGxzX3JzYV9wcml2YXRlKCkgdGhhdCBjb3VsZAorICAgICByZXN1bHQgdHJ5aW5nIHRvIHVubG9jayBhbiB1bmxvY2tlZCBtdXRleCBvbiBpbnZhbGlkIGlucHV0IChmb3VuZCBieQorICAgICBGcmVkcmlrIEF4ZWxzc29uKSAoIzI1NykKKyAgICogRml4IC1Xc2hhZG93IHdhcm5pbmdzIChmb3VuZCBieSBobnJrcCkgKCMyNDApCisgICAqIEZpeCBtZW1vcnkgY29ycnVwdGlvbiBvbiBjbGllbnQgd2l0aCBvdmVybG9uZyBQU0sgaWRlbnRpdHksIGFyb3VuZAorICAgICBTU0xfTUFYX0NPTlRFTlRfTEVOIG9yIGhpZ2hlciAtIG5vdCB0cmlnZ2VycmFibGUgcmVtb3RlbHkgKGZvdW5kIGJ5CisgICAgIEFsZWtzYW5kcnMgU2F2ZWxqZXZzKSAoIzIzOCkKKyAgICogRml4IHVudXNlZCBmdW5jdGlvbiB3YXJuaW5nIHdoZW4gdXNpbmcgTUJFRFRMU19NRHhfQUxUIG9yCisgICAgIE1CRURUTFNfU0hBeHh4X0FMVCAoZm91bmQgYnkgSGVucmlrKSAoIzIzOSkKKyAgICogRml4IG1lbW9yeSBjb3JydXB0aW9uIGluIHBrZXkgcHJvZ3JhbXMgKGZvdW5kIGJ5IHlhbmt1bmNoZW5nKSAoIzIxMCkKKworQ2hhbmdlcworICAgKiBUaGUgUEVNIHBhcnNlciBub3cgYWNjZXB0cyBhIHRyYWlsaW5nIHNwYWNlIGF0IGVuZCBvZiBsaW5lcyAoIzIyNikuCisgICAqIEl0IGlzIG5vdyBwb3NzaWJsZSB0byAjaW5jbHVkZSBhIHVzZXItcHJvdmlkZWQgY29uZmlndXJhdGlvbiBmaWxlIGF0IHRoZQorICAgICBlbmQgb2YgdGhlIGRlZmF1bHQgY29uZmlnLmggYnkgZGVmaW5pbmcgTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFIG9uIHRoZQorICAgICBjb21waWxlcidzIGNvbW1hbmQgbGluZS4KKyAgICogV2hlbiB2ZXJpZnlpbmcgYSBjZXJ0aWZpY2F0ZSBjaGFpbiwgaWYgYW4gaW50ZXJtZWRpYXRlIGNlcnRpZmljYXRlIGlzCisgICAgIHRydXN0ZWQsIG5vIGxhdGVyIGNlcnQgaXMgY2hlY2tlZC4gKHN1Z2dlc3RlZCBieSBoYW5uZXMtbGFuZGVob2xtKQorICAgICAoIzIyMCkuCisgICAqIFByZXBlbmQgYSAidGhyZWFkIGlkZW50aWZpZXIiIHRvIGRlYnVnIG1lc3NhZ2VzIChpc3N1ZSBwb2ludGVkIG91dCBieQorICAgICBIdWdvIExlaXNpbmspICgjMjEwKS4KKyAgICogQWRkIG1iZWR0bHNfc3NsX2dldF9tYXhfZnJhZ19sZW4oKSB0byBxdWVyeSB0aGUgY3VycmVudCBtYXhpbXVtIGZyYWdtZW50CisgICAgIGxlbmd0aC4KKworPSBtYmVkIFRMUyAyLjAuMCByZWxlYXNlZCAyMDE1LTA3LTEzCisKK0ZlYXR1cmVzCisgICAqIFN1cHBvcnQgZm9yIERUTFMgMS4wIGFuZCAxLjIgKFJGQyA2MzQ3KS4KKyAgICogQWJpbGl0eSB0byBvdmVycmlkZSBjb3JlIGZ1bmN0aW9ucyBmcm9tIE1EeCwgU0hBeCwgQUVTIGFuZCBERVMgbW9kdWxlcworICAgICB3aXRoIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiAoZWcgaGFyZHdhcmUgYWNjZWxlcmF0ZWQpLCBjb21wbGVtZW50aW5nIHRoZQorICAgICBhYmlsaXR5IHRvIG92ZXJyaWRlIHRoZSB3aG9sZSBtb2R1bGUuCisgICAqIE5ldyBzZXJ2ZXItc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXNzaW9uIHRpY2tldHMgdGhhdCByb3RhdGUga2V5cyB0bworICAgICBwcmVzZXJ2ZSBmb3J3YXJkIHNlY3JlY3ksIGFuZCBhbGxvd3Mgc2hhcmluZyBhY3Jvc3MgbXVsdGlwbGUgY29udGV4dHMuCisgICAqIEFkZGVkIGEgY29uY2VwdCBvZiBYLjUwOSBjZXJpZmljYXRlIHZlcmlmaWNhdGlvbiBwcm9maWxlIHRoYXQgY29udHJvbHMKKyAgICAgd2hpY2ggYWxnb3JpdGhtcyBhbmQga2V5IHNpemVzIChjdXJ2ZXMgZm9yIEVDRFNBKSBhcmUgYWNjZXB0YWJsZS4KKyAgICogRXhwYW5kZWQgY29uZmlndXJhYmlsaXR5IG9mIHNlY3VyaXR5IHBhcmFtZXRlcnMgaW4gdGhlIFNTTCBtb2R1bGUgd2l0aAorICAgICBtYmVkdGxzX3NzbF9jb25mX2RobV9taW5fYml0bGVuKCkgYW5kIG1iZWR0bHNfc3NsX2NvbmZfc2lnX2hhc2hlcygpLgorICAgKiBJbnRyb2R1Y2VkIGEgY29uY2VwdCBvZiBwcmVzZXRzIGZvciBTU0wgc2VjdXJpdHktcmVsZXZhbnQgY29uZmlndXJhdGlvbgorICAgICBwYXJhbWV0ZXJzLgorCitBUEkgQ2hhbmdlcworICAgKiBUaGUgbGlicmFyeSBoYXMgYmVlbiBzcGxpdCBpbnRvIGxpYm1iZWRjcnlwdG8sIGxpYm1iZWR4NTA5LCBsaWJtYmVkdGxzLgorICAgICBZb3Ugbm93IG5lZWQgdG8gbGluayB0byBhbGwgb2YgdGhlbSBpZiB5b3UgdXNlIFRMUyBmb3IgZXhhbXBsZS4KKyAgICogQWxsIHB1YmxpYyBpZGVudGlmaWVycyBtb3ZlZCB0byB0aGUgbWJlZHRsc18qIG9yIE1CRURUTFNfKiBuYW1lc3BhY2UuCisgICAgIFNvbWUgbmFtZXMgaGF2ZSBiZWVuIGZ1cnRoZXIgY2hhbmdlZCB0byBtYWtlIHRoZW0gbW9yZSBjb25zaXN0ZW50LgorICAgICBNaWdyYXRpb24gaGVscGVycyBzY3JpcHRzL3JlbmFtZS5wbCBhbmQgaW5jbHVkZS9tYmVkbHRzL2NvbXBhdC0xLjMuaCBhcmUKKyAgICAgcHJvdmlkZWQuIEZ1bGwgbGlzdCBvZiByZW5hbWluZ3MgaW4gc2NyaXB0cy9kYXRhX2ZpbGVzL3JlbmFtZS0xLjMtMi4wLnR4dAorICAgKiBSZW5hbWluZ3Mgb2YgZmllbGRzIGluc2lkZSBzdHJ1Y3R1cmVzLCBub3QgY292ZXJlZCBieSB0aGUgcHJldmlvdXMgbGlzdDoKKyAgICAgbWJlZHRsc19jaXBoZXJfaW5mb190LmtleV9sZW5ndGggLT4ga2V5X2JpdGxlbgorICAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3Qua2V5X2xlbmd0aCAtPiBrZXlfYml0bGVuCisgICAgIG1iZWR0bHNfZWNwX2N1cnZlX2luZm8uc2l6ZSAtPiBiaXRfc2l6ZQorICAgKiBIZWFkZXJzIGFyZSBub3cgZm91bmQgaW4gdGhlICdtYmVkdGxzJyBkaXJlY3RvcnkgKHByZXZpb3VzbHkgJ3BvbGFyc3NsJykuCisgICAqIFRoZSBmb2xsb3dpbmcgX2luaXQoKSBmdW5jdGlvbnMgdGhhdCBjb3VsZCByZXR1cm4gZXJyb3JzIGhhdmUKKyAgICAgYmVlbiBzcGxpdCBpbnRvIGFuIF9pbml0KCkgdGhhdCByZXR1cm5zIHZvaWQgYW5kIGFub3RoZXIgZnVuY3Rpb24gdGhhdAorICAgICBzaG91bGQgZ2VuZXJhbGx5IGJlIHRoZSBmaXJzdCBmdW5jdGlvbiBjYWxsZWQgb24gdGhpcyBjb250ZXh0IGFmdGVyIGluaXQ6CisgICAgIG1iZWR0bHNfc3NsX2luaXQoKSAtPiBtYmVkdGxzX3NzbF9zZXR1cCgpCisgICAgIG1iZWR0bHNfY2NtX2luaXQoKSAtPiBtYmVkdGxzX2NjbV9zZXRrZXkoKQorICAgICBtYmVkdGxzX2djbV9pbml0KCkgLT4gbWJlZHRsc19nY21fc2V0a2V5KCkKKyAgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCgpIC0+IG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoX2J1ZikoKQorICAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoKSAgLT4gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCkKKyAgICAgTm90ZSB0aGF0IGZvciBtYmVkdGxzX3NzbF9zZXR1cCgpLCB5b3UgbmVlZCB0byBiZSBkb25lIHNldHRpbmcgdXAgdGhlCisgICAgIHNzbF9jb25maWcgc3RydWN0dXJlIGJlZm9yZSBjYWxsaW5nIGl0LgorICAgKiBNb3N0IHNzbF9zZXRfeHh4KCkgZnVuY3Rpb25zIChhbGwgZXhjZXB0IHNzbF9zZXRfYmlvKCksIHNzbF9zZXRfaG9zdG5hbWUoKSwKKyAgICAgc3NsX3NldF9zZXNzaW9uKCkgYW5kIHNzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCgpLCBwbHVzCisgICAgIHNzbF9sZWdhY3lfcmVuZWdvdGlhdGlvbigpKSBoYXZlIGJlZW4gcmVuYW1lZCB0byBtYmVkdGxzX3NzbF9jb25mX3h4eCgpCisgICAgIChzZWUgcmVuYW1lLnBsIGFuZCBjb21wYXQtMS4zLmggYWJvdmUpIGFuZCB0aGVpciBmaXJzdCBhcmd1bWVudCdzIHR5cGUKKyAgICAgY2hhbmdlZCBmcm9tIHNzbF9jb250ZXh0IHRvIHNzbF9jb25maWcuCisgICAqIHNzbF9zZXRfYmlvKCkgY2hhbmdlZCBzaWduYXR1cmUgKGNvbnRleHRzIG1lcmdlZCwgb3JkZXIgc3dpdGNoZWQsIG9uZQorICAgICBhZGRpdGlvbmFsIGNhbGxiYWNrIGZvciByZWFkLXdpdGgtdGltZW91dCkuCisgICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIGFuZCBtdXN0IGJlIHVzZWQgaW4gY2FsbGJhY2sKKyAgICAgaW1wbGVtZW50YXRpb25zIChTTkksIFBTSykgaW5zdGVhZCBvZiB0aGVpciAqY29uZiBjb3VudGVycGFydHM6CisgICAgIG1iZWR0bHNfc3NsX3NldF9oc19vd25fY2VydCgpCisgICAgIG1iZWR0bHNfc3NsX3NldF9oc19jYV9jaGFpbigpCisgICAgIG1iZWR0bHNfc3NsX3NldF9oc19wc2soKQorICAgKiBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCkgbG9zdCBpdHMgbGFzdCBhcmd1bWVudCAocGVlcl9jbiksIG5vdyBzZXQKKyAgICAgdXNpbmcgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCkuCisgICAqIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZSgpIGNoYW5nZWQgcHJvdG90eXBlIChvbmx5IG9uZSBjb250ZXh0CisgICAgIHBvaW50ZXIsIHBhcmFtZXRlcnMgcmVvcmRlcmVkKS4KKyAgICogT24gc2VydmVyLCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0c19jYigpIG11c3Qgbm93IGJlIHVzZWQgaW4KKyAgICAgcGxhY2Ugb2YgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoKSB0byBlbmFibGUgc2Vzc2lvbiB0aWNrZXRzLgorICAgKiBUaGUgU1NMIGRlYnVnIGNhbGxiYWNrIGdhaW5lZCB0d28gbmV3IGFyZ3VtZW50cyAoZmlsZSBuYW1lLCBsaW5lIG51bWJlcikuCisgICAqIERlYnVnIG1vZGVzIHdlcmUgcmVtb3ZlZC4KKyAgICogbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYygpIG5vdyByZXR1cm5zIHZvaWQuCisgICAqIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCkgbm93IHJldHVybnMgdm9pZC4KKyAgICogWC41MDkgdmVyaWZpY2F0aW9uIGZsYWdzIGFyZSBub3cgYW4gdWludDMyX3QuIEFmZmVjdCB0aGUgc2lnbmF0dXJlIG9mOgorICAgICBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgpCisgICAgIG1iZWR0bHNfeDUwOV9jdHJfdmVyaWZ5X2luZm8oKQorICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSgpIChmbGFncywgZl92cmZ5IC0+IG5lZWRzIHRvIGJlIHVwZGF0ZWQpCisgICAgIG1iZWR0bHNfc3NsX2NvbmZfdmVyaWZ5KCkgKGZfdnJmeSAtPiBuZWVkcyB0byBiZSB1cGRhdGVkKQorICAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjaGFuZ2VkIHByb3RvdHlwZSB0byBhdm9pZCBhbiBpbi1vdXQgbGVuZ3RoCisgICAgIHBhcmFtZXRlcjoKKyAgICAgbWJlZHRsc19iYXNlNjRfZW5jb2RlKCkKKyAgICAgbWJlZHRsc19iYXNlNjRfZGVjb2RlKCkKKyAgICAgbWJlZHRsc19tcGlfd3JpdGVfc3RyaW5nKCkKKyAgICAgbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoKQorICAgKiBJbiB0aGUgTkVUIG1vZHVsZSwgYWxsICJpbnQiIGFuZCAiaW50ICoiIGFyZ3VtZW50cyBmb3IgZmlsZSBkZXNjcmlwdG9ycworICAgICBjaGFuZ2VkIHR5cGUgdG8gIm1iZWR0bHNfbmV0X2NvbnRleHQgKiIuCisgICAqIG5ldF9hY2NlcHQoKSBnYWluZWQgbmV3IGFyZ3VtZW50cyBmb3IgdGhlIHNpemUgb2YgdGhlIGNsaWVudF9pcCBidWZmZXIuCisgICAqIEluIHRoZSB0aHJlYWRpbmcgbGF5ZXIsIG1iZWR0bHNfbXV0ZXhfaW5pdCgpIGFuZCBtYmVkdGxzX211dGV4X2ZyZWUoKSBub3cKKyAgICAgcmV0dXJuIHZvaWQuCisgICAqIGVjZHNhX3dyaXRlX3NpZ25hdHVyZSgpIGdhaW5lZCBhbiBhZGR0aW9uYWwgbWRfYWxnIGFyZ3VtZW50IGFuZAorICAgICBlY2RzYV93cml0ZV9zaWduYXR1cmVfZGV0KCkgd2FzIGRlcHJlY2F0ZWQuCisgICAqIHBrX3NpZ24oKSBubyBsb25nZXIgYWNjZXB0cyBtZF9hbGcgPT0gUE9MQVJTU0xfTURfTk9ORSB3aXRoIEVDRFNBLgorICAgKiBMYXN0IGFyZ3VtZW50IG9mIHg1MDlfY3J0X2NoZWNrX2tleV91c2FnZSgpIGFuZAorICAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSgpIGNoYW5nZWQgZnJvbSBpbnQgdG8gdW5zaWduZWQuCisgICAqIHRlc3RfY2FfbGlzdCAoZnJvbSBjZXJ0cy5oKSBpcyByZW5hbWVkIHRvIHRlc3RfY2FzX3BlbSBhbmQgaXMgb25seQorICAgICBhdmFpbGFibGUgaWYgUE9MQVJTU0xfUEVNX1BBUlNFX0MgaXMgZGVmaW5lZCAoaXQgbmV2ZXIgd29ya2VkIHdpdGhvdXQpLgorICAgKiBUZXN0IGNlcnRpZmljYXRlcyBpbiBjZXJ0cy5jIGFyZSBubyBsb25nZXIgZ3VhcmFudGVlZCB0byBiZSBudWwtdGVybWluYXRlZAorICAgICBzdHJpbmdzOyB1c2UgdGhlIG5ldyAqX2xlbiB2YXJpYWJsZXMgaW5zdGVhZCBvZiBzdHJsZW4oKS4KKyAgICogRnVuY3Rpb25zIG1iZWR0bHNfeDUwOV94eHhfcGFyc2UoKSwgbWJlZHRsc19wa19wYXJzZV9rZXkoKSwKKyAgICAgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5KCkgYW5kIG1iZWR0bHNfZGhtX3BhcnNlX2RobSgpIG5vdyBleHBlY3QgdGhlCisgICAgIGxlbmd0aCBwYXJhbWV0ZXIgdG8gaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlIGZvciBQRU0gaW5wdXQuCisgICAqIFNpZ25hdHVyZSBvZiBtcGlfbXVsX21waSgpIGNoYW5nZWQgdG8gbWFrZSB0aGUgbGFzdCBhcmd1bWVudCB1bnNpZ25lZAorICAgKiBjYWxsb2MoKSBpcyBub3cgdXNlZCBpbnN0ZWFkIG9mIG1hbGxvYygpIGV2ZXJ5d2hlcmUuIEFQSSBvZiBwbGF0Zm9ybQorICAgICBsYXllciBhbmQgdGhlIG1lbW9yeV9idWZmZXJfYWxsb2MgbW9kdWxlIGNoYW5nZWQgYWNjb3JkaW5nbHkuCisgICAgIChUaGFua3MgdG8gTWFuc291ciBNb3VmaWQgZm9yIGhlbHBpbmcgd2l0aCB0aGUgcmVwbGFjZW1lbnQuKQorICAgKiBDaGFuZ2UgU1NMX0RJU0FCTEVfUkVORUdPVElBVElPTiBjb25maWcuaCBmbGFnIHRvIFNTTF9SRU5FR09USUFUSU9OCisgICAgIChzdXBwb3J0IGZvciByZW5lZ290aWF0aW9uIG5vdyBuZWVkcyBleHBsaWNpdCBlbmFibGluZyBpbiBjb25maWcuaCkuCisgICAqIFNwbGl0IE1CRURUTFNfSEFWRV9USU1FIGludG8gTUJFRFRMU19IQVZFX1RJTUUgYW5kIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKyAgICAgaW4gY29uZmlnLmgKKyAgICogbmV0X2Nvbm5lY3QoKSBhbmQgbmV0X2JpbmQoKSBoYXZlIGEgbmV3ICdwcm90bycgYXJndW1lbnQgdG8gY2hvb3NlCisgICAgIGJldHdlZW4gVENQIGFuZCBVRFAsIHVzaW5nIHRoZSBtYWNyb3MgTkVUX1BST1RPX1RDUCBvciBORVRfUFJPVE9fVURQLgorICAgICBUaGVpciAncG9ydCcgYXJndW1lbnQgdHlwZSBpcyBjaGFuZ2VkIHRvIGEgc3RyaW5nLgorICAgKiBTb21lIGNvbnN0bmVzcyBmaXhlcworCitSZW1vdmFscworICAgKiBSZW1vdmVkIG1iZWR0bHNfZWNwX2dyb3VwX3JlYWRfc3RyaW5nKCkuIE9ubHkgbmFtZWQgZ3JvdXBzIGFyZSBzdXBwb3J0ZWQuCisgICAqIFJlbW92ZWQgbWJlZHRsc19lY3Bfc3ViKCkgYW5kIG1iZWR0bHNfZWNwX2FkZCgpLCB1c2UKKyAgICAgbWJlZHRsc19lY3BfbXVsYWRkKCkuCisgICAqIFJlbW92ZWQgaW5kaXZpZHVhbCBtZFhfaG1hYywgc2hhWF9obWFjLCBtZFhfZmlsZSBhbmQgc2hhWF9maWxlIGZ1bmN0aW9ucworICAgICAodXNlIGdlbmVyaWMgZnVuY3Rpb25zIGZyb20gbWQuaCkKKyAgICogUmVtb3ZlZCBtYmVkdGxzX3RpbWluZ19tc2xlZXAoKS4gVXNlIG1iZWR0bHNfbmV0X3VzbGVlcCgpIG9yIGEgY3VzdG9tCisgICAgIHdhaXRpbmcgZnVuY3Rpb24uCisgICAqIFJlbW92ZWQgdGVzdCBESE0gcGFyYW1ldGVycyBmcm9tIHRoZSB0ZXN0IGNlcnRzIG1vZHVsZS4KKyAgICogUmVtb3ZlZCB0aGUgUEJLREYyIG1vZHVsZSAodXNlIFBLQ1M1KS4KKyAgICogUmVtb3ZlZCBQT0xBUlNTTF9FUlJPUl9TVFJFUlJPUl9CQyAodXNlIG1iZWR0bHNfc3RyZXJyb3IoKSkuCisgICAqIFJlbW92ZWQgY29tcGF0LTEuMi5oIChoZWxwZXIgZm9yIG1pZ3JhdGluZyBmcm9tIDEuMiB0byAxLjMpLgorICAgKiBSZW1vdmVkIG9wZW5zc2wuaCAodmVyeSBwYXJ0aWFsIE9wZW5TU0wgY29tcGF0aWJpbGl0eSBsYXllcikuCisgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBQT0xBUlNTTF9IQVZFX0xPTkdMT05HIHdhcyByZW1vdmVkIChub3cgYWx3YXlzIG9uKS4KKyAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIFBPTEFSU1NMX0hBVkVfSU5UOCBhbmQgUE9MQVJTU0xfSEFWRV9JTlQxNiBoYXZlCisgICAgIGJlZW4gcmVtb3ZlZCAoY29tcGlsZXIgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCAzMi1iaXQgb3BlcmF0aW9ucykuCisgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9uIFBPTEFSU1NMX0hBVkVfSVBWNiB3YXMgcmVtb3ZlZCAoYWx3YXlzIGVuYWJsZWQpLgorICAgKiBSZW1vdmVkIHRlc3QgcHJvZ3JhbSBvX3BfdGVzdCwgdGhlIHNjcmlwdCBjb21wYXQuc2ggZG9lcyBtb3JlLgorICAgKiBSZW1vdmVkIHRlc3QgcHJvZ3JhbSBzc2xfdGVzdCwgc3VwZXJzZWRlZCBieSBzc2wtb3B0LnNoLgorICAgKiBSZW1vdmVkIGhlbHBlciBzY3JpcHQgYWN0aXZlLWNvbmZpZy5wbAorCitOZXcgZGVwcmVjYXRpb25zCisgICAqIG1kX2luaXRfY3R4KCkgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgbWRfc2V0dXAoKSwgdGhhdCBhZGRzIGEgdGhpcmQKKyAgICAgYXJndW1lbnQgKGFsbG93aW5nIG1lbW9yeSBzYXZpbmdzIGlmIEhNQUMgaXMgbm90IHVzZWQpCisKK1NlbWktQVBJIGNoYW5nZXMgKHRlY2huaWNhbGx5IHB1YmxpYywgbW9yYWxseSBwcml2YXRlKQorICAgKiBSZW5hbWVkIGEgZmV3IGhlYWRlcnMgdG8gaW5jbHVkZSBfaW50ZXJuYWwgaW4gdGhlIG5hbWUuIFRob3NlIGhlYWRlcnMgYXJlCisgICAgIG5vdCBzdXBwb3NlZCB0byBiZSBpbmNsdWRlZCBieSB1c2Vycy4KKyAgICogQ2hhbmdlZCBtZF9pbmZvX3QgaW50byBhbiBvcGFxdWUgc3RydWN0dXJlICh1c2UgbWRfZ2V0X3h4eCgpIGFjY2Vzc29ycykuCisgICAqIENoYW5nZWQgcGtfaW5mb190IGludG8gYW4gb3BhcXVlIHN0cnVjdHVyZS4KKyAgICogQ2hhbmdlZCBjaXBoZXJfYmFzZV90IGludG8gYW4gb3BhcXVlIHN0cnVjdHVyZS4KKyAgICogUmVtb3ZlZCBzaWdfb2lkMiBhbmQgcmVuYW1lIHNpZ19vaWQxIHRvIHNpZ19vaWQgaW4geDUwOV9jcnQgYW5kIHg1MDlfY3JsLgorICAgKiB4NTA5X2NydC5rZXlfdXNhZ2UgY2hhbmdlZCBmcm9tIHVuc2lnbmVkIGNoYXIgdG8gdW5zaWduZWQgaW50LgorICAgKiBSZW1vdmVkIHIgYW5kIHMgZnJvbSBlY2RzYV9jb250ZXh0CisgICAqIFJlbW92ZWQgbW9kZSBmcm9tIGRlc19jb250ZXh0IGFuZCBkZXMzX2NvbnRleHQKKworRGVmYXVsdCBiZWhhdmlvciBjaGFuZ2VzCisgICAqIFRoZSBkZWZhdWx0IG1pbmltdW0gVExTIHZlcnNpb24gaXMgbm93IFRMUyAxLjAuCisgICAqIFJDNCBpcyBub3cgYmxhY2tsaXN0ZWQgYnkgZGVmYXVsdCBpbiB0aGUgU1NML1RMUyBsYXllciwgYW5kIGV4Y2x1ZGVkIGZyb20gdGhlCisgICAgIGRlZmF1bHQgY2lwaGVyc3VpdGUgbGlzdCByZXR1cm5lZCBieSBzc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKQorICAgKiBTdXBwb3J0IGZvciByZWNlaXZpbmcgU1NMdjIgQ2xpZW50SGVsbG8gaXMgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgYXQKKyAgICAgY29tcGlsZSB0aW1lLgorICAgKiBUaGUgZGVmYXVsdCBhdXRobW9kZSBmb3IgU1NML1RMUyBjbGllbnRzIGlzIG5vdyBSRVFVSVJFRC4KKyAgICogU3VwcG9ydCBmb3IgUlNBX0FMVCBjb250ZXh0cyBpbiB0aGUgUEsgbGF5ZXIgaXMgbm93IG9wdGlvbmFsLiBTaW5jZSBpcyBpcworICAgICBlbmFibGVkIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgb25seSBub3RpY2VhYmxlIGlmIHVzaW5nIGEKKyAgICAgY3VzdG9tIGNvbmZpZy5oCisgICAqIERlZmF1bHQgREhNIHBhcmFtZXRlcnMgc2VydmVyLXNpZGUgdXBncmFkZWQgZnJvbSAxMDI0IHRvIDIwNDggYml0cy4KKyAgICogQSBtaW5pbXVtIFJTQSBrZXkgc2l6ZSBvZiAyMDQ4IGJpdHMgaXMgbm93IGVuZm9yY2VkIGR1cmluZyBjZXJpdGlmaWNhdGUKKyAgICAgY2hhaW4gdmVyaWZpY2F0aW9uLgorICAgKiBOZWdvdGlhdGlvbiBvZiB0cnVuY2F0ZWQgSE1BQyBpcyBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCBvbiBzZXJ2ZXIgdG9vLgorICAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbm93IGNhc2Utc2Vuc2l0aXZlOgorICAgICBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fc3RyaW5nKCkKKyAgICAgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX25hbWUoKQorICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoKQorICAgICBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZygpCisgICAgIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCkKKworUmVxdWlyZW1lbnQgY2hhbmdlcworICAgKiBUaGUgbWluaW11bSBNU1ZDIHZlcnNpb24gcmVxdWlyZWQgaXMgbm93IDIwMTAgKGJldHRlciBDOTkgc3VwcG9ydCkuCisgICAqIFRoZSBORVQgbGF5ZXIgbm93IHVuY29uZGl0aW9ubmFseSByZWxpZXMgb24gZ2V0YWRkcmluZm8oKSBhbmQgc2VsZWN0KCkuCisgICAqIENvbXBpbGVyIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgQzk5IHR5cGVzIHN1Y2ggYXMgbG9uZyBsb25nIGFuZCB1aW50MzJfdC4KKworQVBJIGNoYW5nZXMgZnJvbSB0aGUgMS40IHByZXZpZXcgYnJhbmNoCisgICAqIHNzbF9zZXRfYmlvX3RpbWVvdXQoKSB3YXMgcmVtb3ZlZCwgc3BsaXQgaW50byBtYmVkdGxzX3NzbF9zZXRfYmlvKCkgd2l0aAorICAgICBuZXcgcHJvdG90eXBlLCBhbmQgbWJlZHRsc19zc2xfc2V0X3JlYWRfdGltZW91dCgpLgorICAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBub3cgcmV0dXJuIHZvaWQ6CisgICAgIG1iZWR0bHNfc3NsX2NvbmZfdHJhbnNwb3J0KCkKKyAgICAgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbigpCisgICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oKQorICAgKiBEVExTIG5vIGxvbmdlciBoYXJkLWRlcGVuZHMgb24gVElNSU5HX0MsIGJ1dCB1c2VzIGEgY2FsbGJhY2sgaW50ZXJmYWNlCisgICAgIGluc3RlYWQsIHNlZSBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoKSwgd2l0aCB0aGUgVGltaW5nIG1vZHVsZSBwcm92aWRpbmcKKyAgICAgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiwgc2VlIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgYW5kCisgICAgIG1iZWR0bHNfdGltaW5nX3NldC9nZXRfZGVsYXkoKS4KKyAgICogV2l0aCBVRFAgc29ja2V0cywgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBjYWxsIG5ldF9iaW5kKCkgYWdhaW4KKyAgICAgYWZ0ZXIgYSBzdWNjZXNzZnVsIG5ldF9hY2NlcHQoKS4KKworQ2hhbmdlcworICAgKiBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSgpIGFuZCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oKSBhcmUgbm93CisgICAgIHRocmVhZC1zYWZlIGlmIE1CRURUTFNfVEhSRUFESU5HX0MgaXMgZW5hYmxlZC4KKyAgICogUmVkdWNlZCBST00gZm9vcHJpbnQgb2YgU0hBLTI1NiBhbmQgYWRkZWQgYW4gb3B0aW9uIHRvIHJlZHVjZSBpdCBldmVuCisgICAgIG1vcmUgKGF0IHRoZSBleHBlbnNlIG9mIHBlcmZvcm1hbmNlKSBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSLgorCis9IG1iZWQgVExTIDEuMyBicmFuY2gKKworU2VjdXJpdHkKKyAgICogV2l0aCBhdXRobW9kZSBzZXQgdG8gU1NMX1ZFUklGWV9PUFRJT05BTCwgdmVyaWZpY2F0aW9uIG9mIGtleVVzYWdlIGFuZAorICAgICBleHRlbmRlZEtleVVzYWdlIG9uIHRoZSBsZWFmIGNlcnRpZmljYXRlIHdhcyBsb3N0IChyZXN1bHRzIG5vdCBhY2Nlc3NpYmxlCisgICAgIHZpYSBzc2xfZ2V0X3ZlcmlmeV9yZXN1bHRzKCkpLgorICAgKiBBZGQgY291bnRlcm1lYXN1cmUgYWdhaW5zdCAiTHVja3kgMTMgc3RyaWtlcyBiYWNrIiBjYWNoZS1iYXNlZCBhdHRhY2ssCisgICAgIGh0dHBzOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MjcxNDYyNQorCitGZWF0dXJlcworICAgKiBJbXByb3ZlIEVDQyBwZXJmb3JtYW5jZSBieSB1c2luZyBtb3JlIGVmZmljaWVudCBkb3VibGluZyBmb3JtdWxhcworICAgICAoY29udHJpYnV0ZWQgYnkgUGV0ZXIgRGV0dG1hbikuCisgICAqIEFkZCB4NTA5X2NydF92ZXJpZnlfaW5mbygpIHRvIGRpc3BsYXkgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHJlc3VsdHMuCisgICAqIEFkZCBzdXBwb3J0IGZvciByZWFkaW5nIERIIHBhcmFtZXRlcnMgd2l0aCBwcml2YXRlVmFsdWVMZW5ndGggaW5jbHVkZWQKKyAgICAgKGNvbnRyaWJ1dGVkIGJ5IERhbmllbCBLYWhuIEdpbGxtb3IpLgorICAgKiBBZGQgc3VwcG9ydCBmb3IgYml0IHN0cmluZ3MgaW4gWC41MDkgbmFtZXMgKHJlcXVlc3QgYnkgRnJlZHJpayBBeGVsc3NvbikuCisgICAqIEFkZCBzdXBwb3J0IGZvciBpZC1hdC11bmlxdWVJZGVudGlmaWVyIGluIFguNTA5IG5hbWVzLgorICAgKiBBZGQgc3VwcG9ydCBmb3Igb3ZlcnJpZGluZyBzbnByaW50ZigpIChleGNlcHQgb24gV2luZG93cykgYW5kIGV4aXQoKSBpbgorICAgICB0aGUgcGxhdGZvcm0gbGF5ZXIuCisgICAqIEFkZCBhbiBvcHRpb24gdG8gdXNlIG1hY3JvcyBpbnN0ZWFkIG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBwbGF0Zm9ybQorICAgICBsYXllciAoaGVscHMgZ2V0IHJpZCBvZiB1bndhbnRlZCByZWZlcmVuY2VzKS4KKyAgICogSW1wcm92ZWQgTWFrZWZpbGVzIGZvciBXaW5kb3dzIHRhcmdldHMgYnkgZml4aW5nIGxpYnJhcnkgdGFyZ2V0cyBhbmQgbWFraW5nCisgICAgIGNyb3NzLWNvbXBpbGF0aW9uIGVhc2llciAodGhhbmtzIHRvIEFsb24gQmFyLUxldikuCisgICAqIFRoZSBiZW5jaG1hcmsgcHJvZ3JhbSBhbHNvIHByaW50cyBoZWFwIHVzYWdlIGZvciBwdWJsaWMta2V5IHByaW1pdGl2ZXMKKyAgICAgaWYgUE9MQVJTU0xfTUVNT1JZX0JVRkZFUl9BTExPQ19DIGFuZCBQT0xBUlNTTF9NRU1PUllfREVCVUcgYXJlIGRlZmluZWQuCisgICAqIE5ldyBzY3JpcHQgZWNjLWhlYXAuc2ggaGVscHMgbWVhc3VyaW5nIHRoZSBpbXBhY3Qgb2YgRUNDIHBhcmFtZXRlcnMgb24KKyAgICAgc3BlZWQgYW5kIFJBTSAoaGVhcCBvbmx5IGZvciBub3cpIHVzYWdlLgorICAgKiBOZXcgc2NyaXB0IG1lbW9yeS5zaCBoZWxwcyBtZWFzdXJpbmcgdGhlIFJPTSBhbmQgUkFNIHJlcXVpcmVtZW50cyBvZiB0d28KKyAgICAgcmVkdWNlZCBjb25maWd1cmF0aW9ucyAoUFNLLUNDTSBhbmQgTlNBIHN1aXRlIEIpLgorICAgKiBBZGQgY29uZmlnIGZsYWcgUE9MQVJTU0xfREVQUkVDQVRFRF9XQVJOSU5HIChvZmYgYnkgZGVmYXVsdCkgdG8gcHJvZHVjZQorICAgICB3YXJuaW5ncyBvbiB1c2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKHdpdGggR0NDIGFuZCBDbGFuZyBvbmx5KS4KKyAgICogQWRkIGNvbmZpZyBmbGFnIFBPTEFSU1NMX0RFUFJFQ0FURURfUkVNT1ZFRCAob2ZmIGJ5IGRlZmF1bHQpIHRvIHByb2R1Y2UKKyAgICAgZXJyb3JzIG9uIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KKworQnVnZml4CisgICAqIEZpeCBjb21waWxlIGVycm9ycyB3aXRoIFBMQVRGT1JNX05PX1NURF9GVU5DVElPTlMuCisgICAqIEZpeCBjb21waWxlIGVycm9yIHdpdGggUExBVEZPUk1fRVhJVF9BTFQgKHRoYW5rcyB0byBSYWZhxYIgUHJ6eXdhcmEpLgorICAgKiBGaXggYnVnIGluIGVudHJvcHkuYyB3aGVuIFRIUkVBRElOR19DIGlzIGFsc28gZW5hYmxlZCB0aGF0IGNhdXNlZAorICAgICBlbnRyb3B5X2ZyZWUoKSB0byBjcmFzaCAodGhhbmtzIHRvIFJhZmHFgiBQcnp5d2FyYSkuCisgICAqIEZpeCBtZW1vcnkgbGVhayB3aGVuIGdjbV9zZXRrZXkoKSBhbmQgY2NtX3NldGtleSgpIGFyZSB1c2VkIG1vcmUgdGhhbgorICAgICBvbmNlIG9uIHRoZSBzYW1lIGNvbnRleHQuCisgICAqIEZpeCBidWcgaW4gc3NsX21haWxfY2xpZW50IHdoZW4gcGFzc3dvcmQgaXMgbG9uZ2VyIHRoYXQgdXNlcm5hbWUgKGZvdW5kCisgICAgIGJ5IEJydW5vIFBhcGUpLgorICAgKiBGaXggdW5kZWZpbmVkIGJlaGF2aW91ciAobWVtY21wKCBOVUxMLCBOVUxMLCAwICk7KSBpbiBYLjUwOSBtb2R1bGVzCisgICAgIChkZXRlY3RlZCBieSBDbGFuZydzIDMuNiBVQlNhbikuCisgICAqIG1waV9zaXplKCkgYW5kIG1waV9tc2IoKSB3b3VsZCBzZWdmYXVsdCB3aGVuIGNhbGxlZCBvbiBhbiBtcGkgdGhhdCBpcworICAgICBpbml0aWFsaXplZCBidXQgbm90IHNldCAoZm91bmQgYnkgcHJhdmljKS4KKyAgICogRml4IGRldGVjdGlvbiBvZiBzdXBwb3J0IGZvciBnZXRyYW5kb20oKSBvbiBMaW51eCAocmVwb3J0ZWQgYnkgc3l6emVyKSBieQorICAgICBkb2luZyBpdCBhdCBydW50aW1lICh1c2luZyB1bmFtZSkgcmF0aGVyIHRoYXQgY29tcGlsZSB0aW1lLgorICAgKiBGaXggaGFuZGxpbmcgb2Ygc3ltbGlua3MgYnkgIm1ha2UgaW5zdGFsbCIgKGZvdW5kIGJ5IEdhw6tsIFBPUlRBWSkuCisgICAqIEZpeCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIChub3QgdHJpZ2VycmFibGUgcmVtb3RlbHkpIHdoZW4KKyAgICAgc3NsX3dyaXRlKCkgaXMgY2FsbGVkIGJlZm9yZSB0aGUgaGFuZHNoYWtlIGlzIGZpbmlzaGVkIChpbnRyb2R1Y2VkIGluCisgICAgIDEuMy4xMCkgKGZpcnN0IHJlcG9ydGVkIGJ5IE1hcnRpbiBCbHVtZW5zdGluZ2wpLgorICAgKiBGaXggYnVnIGluIHBrX3BhcnNlX2tleSgpIHRoYXQgY2F1c2VkIHNvbWUgdmFsaWQgcHJpdmF0ZSBFQyBrZXlzIHRvIGJlCisgICAgIHJlamVjdGVkLgorICAgKiBGaXggYnVnIGluIFZpYSBQYWRsb2NrIHN1cHBvcnQgKGZvdW5kIGJ5IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zKS4KKyAgICogRml4IHRocmVhZCBzYWZldHkgYnVnIGluIFJTQSBvcGVyYXRpb25zIChmb3VuZCBieSBGcmVkcmlrIEF4ZWxzc29uKS4KKyAgICogRml4IGhhcmRjbG9jaygpIChvbmx5IHVzZWQgaW4gdGhlIGJlbmNobWFya2luZyBwcm9ncmFtKSB3aXRoIHNvbWUKKyAgICAgdmVyc2lvbnMgb2YgbWluZ3c2NCAoZm91bmQgYnkga3hqaGxlbGUpLgorICAgKiBGaXggd2FybmluZ3MgZnJvbSBtaW5ndzY0IGluIHRpbWluZy5jIChmb3VuZCBieSBreGprbGVsZSkuCisgICAqIEZpeCBwb3RlbnRpYWwgdW5pbnRlbmRlZCBzaWduIGV4dGVuc2lvbiBpbiBhc24xX2dldF9sZW4oKSBvbiA2NC1iaXQKKyAgICAgcGxhdGZvcm1zLgorICAgKiBGaXggcG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIHNzbF9zZXRfcHNrKCkgKGZvdW5kIGJ5IE1hbnNvdXIgTW91ZmlkKS4KKyAgICogRml4IGNvbXBpbGUgZXJyb3Igd2hlbiBQT0xBUlNTTF9TU0xfRElTQUJMRV9SRU5FR09UQVRJT04gYW5kCisgICAgIFBPTEFSU1NMX1NTTF9TU0VTU0lPTl9USUNLRVRTIHdoZXJlIGJvdGggZW5hYmxlZCBpbiBjb25maWcuaCAoaW50cm9kdWNlZAorICAgICBpbiAxLjMuMTApLgorICAgKiBBZGQgbWlzc2luZyBleHRlcm4gIkMiIGd1YXJkIGluIGFlc25pLmggKHJlcG9ydGVkIGJ5IGFtaXIgemFtYW5pKS4KKyAgICogQWRkIG1pc3NpbmcgZGVwZW5kZW5jeSBvbiBTSEEtMjU2IGluIHNvbWUgeDUwOSBwcm9ncmFtcyAocmVwb3J0ZWQgYnkKKyAgICAgR2VyZ2VseSBCdWRhaSkuCisgICAqIEZpeCBidWcgcmVsYXRlZCB0byBzc2xfc2V0X2N1cnZlcygpOiB0aGUgY2xpZW50IGRpZG4ndCBjaGVjayB0aGF0IHRoZQorICAgICBjdXJ2ZSBwaWNrZWQgYnkgdGhlIHNlcnZlciB3YXMgYWN0dWFsbHkgYWxsb3dlZC4KKworQ2hhbmdlcworICAgKiBSZW1vdmUgYmlhcyBpbiBtcGlfZ2VuX3ByaW1lIChjb250cmlidXRlZCBieSBQYXNjYWwgSnVub2QpLgorICAgKiBSZW1vdmUgcG90ZW50aWFsIHNvdXJjZXMgb2YgdGltaW5nIHZhcmlhdGlvbnMgKHNvbWUgY29udHJpYnV0ZWQgYnkgUGFzY2FsCisgICAgIEp1bm9kKS4KKyAgICogT3B0aW9ucyBQT0xBUlNTTF9IQVZFX0lOVDggYW5kIFBPTEFSU1NMX0hBVkVfSU5UMTYgYXJlIGRlcHJlY2F0ZWQuCisgICAqIEVuYWJsaW5nIFBPTEFSU1NMX05FVF9DIHdpdGhvdXQgUE9MQVJTU0xfSEFWRV9JUFY2IGlzIGRlcHJlY2F0ZWQuCisgICAqIGNvbXBhdC0xLjIuaCBhbmQgb3BlbnNzbC5oIGFyZSBkZXByZWNhdGVkLgorICAgKiBBZGp1c3Rpbmcvb3ZlcnJpZGluZyBDRkxBR1MgYW5kIExERkxBR1Mgd2l0aCB0aGUgbWFrZSBidWlsZCBzeXN0ZW0gaXMgbm93CisgICAgIG1vcmUgZmxleGlibGUgKHdhcm5pbmc6IE9GTEFHUyBpcyBub3QgdXNlZCBhbnkgbW9yZSkgKHNlZSB0aGUgUkVBRE1FKQorICAgICAoY29udHJpYnV0ZWQgYnkgQWxvbiBCYXItTGV2KS4KKyAgICogc3NsX3NldF9vd25fY2VydCgpIG5vIGxvbmdlciBjYWxscyBwa19jaGVja19wYWlyKCkgc2luY2UgdGhlCisgICAgIHBlcmZvcm1hbmNlIGltcGFjdCB3YXMgYmFkIGZvciBzb21lIHVzZXJzICh0aGlzIHdhcyBpbnRyb2R1Y2VkIGluIDEuMy4xMCkuCisgICAqIE1vdmUgZnJvbSBTSEEtMSB0byBTSEEtMjU2IGluIGV4YW1wbGUgcHJvZ3JhbXMgdXNpbmcgc2lnbmF0dXJlcworICAgICAoc3VnZ2VzdGVkIGJ5IFRob3JzdGVuIE3DvGhsZmVsZGVyKS4KKyAgICogUmVtb3ZlIHNvbWUgdW5uZWVkZWQgaW5jbHVzaW9ucyBvZiBoZWFkZXIgZmlsZXMgZnJvbSB0aGUgc3RhbmRhcmQgbGlicmFyeQorICAgICAibWluaW1pemUiIG90aGVycyAoZWcgdXNlIHN0ZGRlZi5oIGlmIG9ubHkgc2l6ZV90IGlzIG5lZWRlZCkuCisgICAqIENoYW5nZSAjaW5jbHVkZSBsaW5lcyBpbiB0ZXN0IGZpbGVzIHRvIHVzZSBkb3VibGUgcXVvdGVzIGluc3RlYWQgb2YgYW5nbGUKKyAgICAgYnJhY2tldHMgZm9yIHVuaWZvcm1pdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAgICogUmVtb3ZlIGRlcGVuZGVuY3kgb24gc3NjYW5mKCkgaW4gWC41MDkgcGFyc2luZyBtb2R1bGVzLgorCis9IG1iZWQgVExTIDEuMy4xMCByZWxlYXNlZCAyMDE1LTAyLTA5CitTZWN1cml0eQorICAgKiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGJ1ZmZlci1iYXNlZCBhbGxvY2F0b3Igd2hlbiB0aGUgYnVmZmVyIGlzCisgICAgIGZ1bGwgYW5kIHBvbGFyc3NsX2ZyZWUoKSBpcyBjYWxsZWQgKGZvdW5kIGJ5IE1hcmsgSGFzZW1leWVyKQorICAgICAob25seSBwb3NzaWJsZSBpZiBQT0xBUlNTTF9NRU1PUllfQlVGRkVSX0FMTE9DX0MgaXMgZW5hYmxlZCwgd2hpY2ggaXQgaXMKKyAgICAgbm90IGJ5IGRlZmF1bHQpLgorICAgKiBGaXggcmVtb3RlbHktdHJpZ2dlcmFibGUgdW5pbml0aWFsaXNlZCBwb2ludGVyIGRlcmVmZXJlbmNlIGNhdXNlZCBieQorICAgICBjcmFmdGVkIFguNTA5IGNlcnRpZmljYXRlIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYQorICAgICBjbGllbnQgY2VydGlmaWNhdGUpIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MpLgorICAgKiBGaXggcmVtb3RlbHktdHJpZ2dlcmFibGUgbWVtb3J5IGxlYWsgY2F1c2VkIGJ5IGNyYWZ0ZWQgWC41MDkgY2VydGlmaWNhdGVzCisgICAgIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpCisgICAgIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MpLgorICAgKiBGaXggcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHdoaWxlIHBhcnNpbmcgY3JhZnRlZCBYLjUwOSBjZXJ0aWZpY2F0ZXMKKyAgICAgKFRMUyBzZXJ2ZXIgaXMgbm90IGFmZmVjdGVkIGlmIGl0IGRvZXNuJ3QgYXNrIGZvciBhIGNsaWVudCBjZXJ0aWZpY2F0ZSkKKyAgICAgKGZvdW5kIHVzaW5nIENvZGVub21pY29uIERlZmVuc2ljcykuCisgICAqIEZpeCB0aW1pbmcgZGlmZmVyZW5jZSB0aGF0IGNvdWxkIHRoZW9yZXRpY2FsbHkgbGVhZCB0byBhCisgICAgIEJsZWljaGVuYmFjaGVyLXN0eWxlIGF0dGFjayBpbiB0aGUgUlNBIGFuZCBSU0EtUFNLIGtleSBleGNoYW5nZXMKKyAgICAgKHJlcG9ydGVkIGJ5IFNlYmFzdGlhbiBTY2hpbnplbCkuCisKK0ZlYXR1cmVzCisgICAqIEFkZCBzdXBwb3J0IGZvciBGQUxMQkFDS19TQ1NWIChkcmFmdC1pZXRmLXRscy1kb3duZ3JhZGUtc2NzdikuCisgICAqIEFkZCBzdXBwb3J0IGZvciBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0IChkcmFmdC1pZXRmLXRscy1zZXNzaW9uLWhhc2gpLgorICAgKiBBZGQgc3VwcG9ydCBmb3IgRW5jcnlwdC10aGVuLU1BQyAoUkZDIDczNjYpLgorICAgKiBBZGQgZnVuY3Rpb24gcGtfY2hlY2tfcGFpcigpIHRvIHRlc3QgaWYgcHVibGljIGFuZCBwcml2YXRlIGtleXMgbWF0Y2guCisgICAqIEFkZCB4NTA5X2NybF9wYXJzZV9kZXIoKS4KKyAgICogQWRkIGNvbXBpbGUtdGltZSBvcHRpb24gUE9MQVJTU0xfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBIHRvIGxpbWl0IHRoZQorICAgICBsZW5ndGggb2YgYW4gWC41MDkgdmVyaWZpY2F0aW9uIGNoYWluLgorICAgKiBTdXBwb3J0IGZvciByZW5lZ290aWF0aW9uIGNhbiBub3cgYmUgZGlzYWJsZWQgYXQgY29tcGlsZS10aW1lCisgICAqIFN1cHBvcnQgZm9yIDEvbi0xIHJlY29yZCBzcGxpdHRpbmcsIGEgY291bnRlcm1lYXN1cmUgYWdhaW5zdCBCRUFTVC4KKyAgICogQ2VydGlmaWNhdGUgc2VsZWN0aW9uIGJhc2VkIG9uIHNpZ25hdHVyZSBoYXNoLCBwcmVmZXJyaW5nIFNIQS0xIG92ZXIgU0hBLTIKKyAgICAgZm9yIHByZS0xLjIgY2xpZW50cyB3aGVuIG11bHRpcGxlIGNlcnRpZmljYXRlcyBhcmUgYXZhaWxhYmxlLgorICAgKiBBZGQgc3VwcG9ydCBmb3IgZ2V0cmFuZG9tKCkgc3lzY2FsbCBvbiByZWNlbnQgTGludXgga2VybmVscyB3aXRoIEdsaWJjIG9yCisgICAgIGEgY29tcGF0aWJsZSBlbm91Z2ggbGliYyAoZWcgdUNsaWJjKS4KKyAgICogQWRkIHNzbF9zZXRfYXJjNF9zdXBwb3J0KCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzYWJsZSBSQzQgYXQgcnVudGltZQorICAgICB3aGlsZSB1c2luZyB0aGUgZGVmYXVsdCBjaXBoZXJzdWl0ZSBsaXN0LgorICAgKiBBZGRlZCBuZXcgZXJyb3IgY29kZXMgYW5kIGRlYnVnIG1lc3NhZ2VzIGFib3V0IHNlbGVjdGlvbiBvZgorICAgICBjaXBoZXJzdWl0ZS9jZXJ0aWZpY2F0ZS4KKworQnVnZml4CisgICAqIFN0YWNrIGJ1ZmZlciBvdmVyZmxvdyBpZiBjdHJfZHJiZ191cGRhdGUoKSBpcyBjYWxsZWQgd2l0aCB0b28gbGFyZ2UKKyAgICAgYWRkX2xlbiAoZm91bmQgYnkgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbikgKG5vdCB0cmlnZ2VyYWJsZSByZW1vdGVseSkuCisgICAqIFBvc3NpYmxlIGJ1ZmZlciBvdmVyZmxvdyBvZiBsZW5ndGggYXQgbW9zdCBQT0xBUlNTTF9NRU1PUllfQUxJR05fTVVMVElQTEUKKyAgICAgaWYgbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCkgd2FzIGNhbGxlZCB3aXRoIGJ1ZiBub3QgYWxpZ25lZCBhbmQgbGVuIG5vdAorICAgICBhIG11bHRpcGxlIG9mIFBPTEFSU1NMX01FTU9SWV9BTElHTl9NVUxUSVBMRSAobm90IHRyaWdnZXJhYmxlIHJlbW90ZWx5KS4KKyAgICogVXNlciBzZXQgQ0ZMQUdTIHdlcmUgaWdub3JlZCBieSBDbWFrZSB3aXRoIGdjYyAoaW50cm9kdWNlZCBpbiAxLjMuOSwgZm91bmQKKyAgICAgYnkgSnVsaWFuIE9zcGFsZCkuCisgICAqIEZpeCBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW91ciBpbiBDYW1lbGxpYS4KKyAgICogRml4IHBvdGVudGlhbCBmYWlsdXJlIGluIEVDRFNBIHNpZ25hdHVyZXMgd2hlbiBQT0xBUlNTTF9FQ1BfTUFYX0JJVFMgaXMgYQorICAgICBtdWx0aXBsZSBvZiA4IChmb3VuZCBieSBHZXJnZWx5IEJ1ZGFpKS4KKyAgICogRml4IHVuY2hlY2tlZCByZXR1cm4gY29kZSBpbiB4NTA5X2NydF9wYXJzZV9wYXRoKCkgb24gV2luZG93cyAoZm91bmQgYnkKKyAgICAgUGV0ZXIgVmFza292aWMpLgorICAgKiBGaXggYXNzZW1ibHkgc2VsZWN0aW9uIGZvciBNSVBTNjQgKHRoYW5rcyB0byBKYW1lcyBDb3dnaWxsKS4KKyAgICogc3NsX2dldF92ZXJpZnlfcmVzdWx0KCkgbm93IHdvcmtzIGV2ZW4gaWYgdGhlIGhhbmRzaGFrZSB3YXMgYWJvcnRlZCBkdWUKKyAgICAgdG8gYSBmYWlsZWQgdmVyaWZpY2F0aW9uIChmb3VuZCBieSBGcmVkcmlrIEF4ZWxzc29uKS4KKyAgICogU2tpcCB3cml0aW5nIGFuZCBwYXJzaW5nIHNpZ25hdHVyZV9hbGdvcml0aG0gZXh0ZW5zaW9uIGlmIG5vbmUgb2YgdGhlCisgICAgIGtleSBleGNoYW5nZXMgZW5hYmxlZCBuZWVkcyBjZXJ0aWZpY2F0ZXMuIFRoaXMgZml4ZXMgYSBwb3NzaWJsZSBpbnRlcm9wCisgICAgIGlzc3VlIHdpdGggc29tZSBzZXJ2ZXJzIHdoZW4gYSB6ZXJvLWxlbmd0aCBleHRlbnNpb24gd2FzIHNlbnQuIChSZXBvcnRlZAorICAgICBieSBQZXRlciBEZXR0bWFuLikKKyAgICogT24gYSAwLWxlbmd0aCBpbnB1dCwgYmFzZTY0X2VuY29kZSgpIGRpZCBub3QgY29ycmVjdGx5IHNldCBvdXRwdXQgbGVuZ3RoCisgICAgIChmb3VuZCBieSBIZW5kcmlrIHZhbiBkZW4gQm9vZ2FhcmQpLgorCitDaGFuZ2VzCisgICAqIFVzZSBkZXRlcm1pbmlzdGljIG5vbmNlcyBmb3IgQUVBRCBjaXBoZXJzIGluIFRMUyBieSBkZWZhdWx0IChwb3NzaWJsZSB0bworICAgICBzd2l0Y2ggYmFjayB0byByYW5kb20gd2l0aCBQT0xBUlNTTF9TU0xfQUVBRF9SQU5ET01fSVYgaW4gY29uZmlnLmgpLgorICAgKiBCbGluZCBSU0EgcHJpdmF0ZSBvcGVyYXRpb25zIGV2ZW4gd2hlbiBQT0xBUlNTTF9SU0FfTk9fQ1JUIGlzIGRlZmluZWQuCisgICAqIHNzbF9zZXRfb3duX2NlcnQoKSBub3cgcmV0dXJucyBhbiBlcnJvciBvbiBrZXktY2VydGlmaWNhdGUgbWlzbWF0Y2guCisgICAqIEZvcmJpZCByZXBlYXRlZCBleHRlbnNpb25zIGluIFguNTA5IGNlcnRpZmljYXRlcy4KKyAgICogZGVidWdfcHJpbnRfYnVmKCkgbm93IHByaW50cyBhIHRleHQgdmlldyBpbiBhZGRpdGlvbiB0byBoZXhhZGVjaW1hbC4KKyAgICogQSBzcGVjaWZpYyBlcnJvciBpcyBub3cgcmV0dXJuZWQgd2hlbiB0aGVyZSBhcmUgY2lwaGVyc3VpdGVzIGluIGNvbW1vbgorICAgICBidXQgbm9uZSBvZiB0aGVtIGlzIHVzYWJsZSBkdWUgdG8gZXh0ZXJuYWwgZmFjdG9ycyBzdWNoIGFzIG5vIGNlcnRpZmljYXRlCisgICAgIHdpdGggYSBzdWl0YWJsZSAoZXh0ZW5kZWQpS2V5VXNhZ2Ugb3IgY3VydmUgb3Igbm8gUFNLIHNldC4KKyAgICogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGRpc2FibGUgbmVnb3RpYXRpb24gb2YgdHJ1bmNhdGVkIEhNQUMgc2VydmVyLXNpZGUKKyAgICAgYXQgcnVudGltZSB3aXRoIHNzbF9zZXRfdHJ1bmNhdGVkX2htYWMoKS4KKyAgICogRXhhbXBsZSBwcm9ncmFtcyBmb3IgU1NMIGNsaWVudCBhbmQgc2VydmVyIG5vdyBkaXNhYmxlIFNTTHYzIGJ5IGRlZmF1bHQuCisgICAqIEV4YW1wbGUgcHJvZ3JhbXMgZm9yIFNTTCBjbGllbnQgYW5kIHNlcnZlciBub3cgZGlzYWJsZSBSQzQgYnkgZGVmYXVsdC4KKyAgICogVXNlIHBsYXRmb3JtLmggaW4gYWxsIHRlc3Qgc3VpdGVzIGFuZCBwcm9ncmFtcy4KKworPSBQb2xhclNTTCAxLjMuOSByZWxlYXNlZCAyMDE0LTEwLTIwCitTZWN1cml0eQorICAgKiBMb3dlc3QgY29tbW9uIGhhc2ggd2FzIHNlbGVjdGVkIGZyb20gc2lnbmF0dXJlX2FsZ29yaXRobXMgZXh0ZW5zaW9uIGluCisgICAgIFRMUyAxLjIgKGZvdW5kIGJ5IERhcnJlbiBCYW5lKSAoaW50cm9kdWNlZCBpbiAxLjMuOCkuCisgICAqIFJlbW90ZWx5LXRyaWdnZXJhYmxlIG1lbW9yeSBsZWFrIHdoZW4gcGFyc2luZyBzb21lIFguNTA5IGNlcnRpZmljYXRlcworICAgICAoc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpCisgICAgIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MpLgorICAgKiBSZW1vdGVseS10cmlnZ2VyYWJsZSBtZW1vcnkgbGVhayB3aGVuIHBhcnNpbmcgY3JhZnRlZCBDbGllbnRIZWxsbworICAgICAobm90IGFmZmVjdGVkIGlmIEVDQyBzdXBwb3J0IHdhcyBjb21waWxlZCBvdXQpIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbgorICAgICBEZWZlbnNpY3MpLgorCitCdWdmaXgKKyAgICogU3VwcG9ydCBlc2NhcGluZyBvZiBjb21tYXMgaW4geDUwOV9zdHJpbmdfdG9fbmFtZXMoKQorICAgKiBGaXggY29tcGlsZSBlcnJvciBpbiBzc2xfcHRocmVhZF9zZXJ2ZXIgKGZvdW5kIGJ5IEp1bGlhbiBPc3BhbGQpLgorICAgKiBGaXggbmV0X2FjY2VwdCgpIHJlZ2FyZGluZyBub24tYmxvY2tpbmcgc29ja2V0cyAoZm91bmQgYnkgTHVjYSBQZXNjZSkuCisgICAqIERvbid0IHByaW50IHVuaW5pdGlhbGlzZWQgYnVmZmVyIGluIHNzbF9tYWlsX2NsaWVudCAoZm91bmQgYnkgTWFyYyBBYmVsKS4KKyAgICogRml4IHdhcm5pbmdzIGZyb20gQ2xhbmcncyBzY2FuLWJ1aWxkIChjb250cmlidXRlZCBieSBBbGZyZWQgS2xvbXApLgorICAgKiBGaXggY29tcGlsZSBlcnJvciBpbiB0aW1pbmcuYyB3aGVuIFBPTEFSU1NMX05FVF9DIGFuZCBQT0xBUlNTTF9TRUxGVEVTVAorICAgICBhcmUgZGVmaW5lZCBidXQgbm90IFBPTEFSU1NMX0hBVkVfVElNRSAoZm91bmQgYnkgU3RlcGhhbmUgRGkgVml0bykuCisgICAqIFJlbW92ZSBub24tZXhpc3RlbnQgZmlsZSBmcm9tIFZTIHByb2plY3RzIChmb3VuZCBieSBQZXRlciBWYXNrb3ZpYykuCisgICAqIHNzbF9yZWFkKCkgY291bGQgcmV0dXJuIG5vbi1hcHBsaWNhdGlvbiBkYXRhIHJlY29yZHMgb24gc2VydmVyIHdoaWxlCisgICAgIHJlbmVnb3RhdGlvbiB3YXMgcGVuZGluZywgYW5kIG9uIGNsaWVudCB3aGVuIGEgSGVsbG9SZXF1ZXN0IHdhcyByZWNlaXZlZC4KKyAgICogU2VydmVyLWluaXRpYXRlZCByZW5lZ290aWF0aW9uIHdvdWxkIGZhaWwgd2l0aCBub24tYmxvY2tpbmcgSS9PIGlmIHRoZQorICAgICB3cml0ZSBjYWxsYmFjayByZXR1cm5lZCBXQU5UX1dSSVRFIHdoZW4gcmVxdWVzdGluZyByZW5lZ290aWF0aW9uLgorICAgKiBzc2xfY2xvc2Vfbm90aWZ5KCkgY291bGQgc2VuZCBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzCisgICAgIHdpdGggbm9uLWJsb2NraW5nIEkvTy4KKyAgICogRml4IGNvbXBpbGVyIHdhcm5pbmdzIG9uIGlPUyAoZm91bmQgYnkgU2FuZGVyIE5pZW1laWplcikuCisgICAqIHg1MDlfY3J0X3BhcnNlKCkgZGlkIG5vdCBpbmNyZWFzZSB0b3RhbF9mYWlsZWQgb24gUEVNIGVycm9yCisgICAqIEZpeCBjb21waWxlIGVycm9yIHdpdGggYXJtY2MgaW4gbXBpX2lzX3ByaW1lKCkKKyAgICogRml4IHBvdGVudGlhbCBiYWQgcmVhZCBpbiBwYXJzaW5nIFNlcnZlckhlbGxvIChmb3VuZCBieSBBZHJpZW4KKyAgICAgVmlhbGxldGVsbGUpLgorCitDaGFuZ2VzCisgICAqIENpcGhlcnN1aXRlcyB1c2luZyBTSEEtMjU2IG9yIFNIQS0zODQgbm93IHJlcXVpcmUgVExTIDEueCAodGhlcmUgaXMgbm8KKyAgICAgc3RhbmRhcmQgZGVmaW5pbmcgaG93IHRvIHVzZSBTSEEtMiB3aXRoIFNTTCAzLjApLgorICAgKiBDaXBoZXJzdWl0ZXMgdXNpbmcgUlNBLVBTSyBrZXkgZXhjaGFuZ2UgbmV3IHJlcXVpcmUgVExTIDEueCAodGhlIHNwZWMgaXMKKyAgICAgYW1iaWd1b3VzIG9uIGhvdyB0byBlbmNvZGUgc29tZSBwYWNrZXRzIHdpdGggU1NMIDMuMCkuCisgICAqIE1hZGUgYnVmZmVyIHNpemUgaW4gcGtfd3JpdGVfKHB1YilrZXlfcGVtKCkgbW9yZSBkeW5hbWljLCBlZyBzbWFsbGVyIGlmCisgICAgIFJTQSBpcyBkaXNhYmxlZCwgbGFyZ2VyIGlmIFBPTEFSU1NMX01QSV9NQVhfU0laRSBpcyBsYXJnZXIuCisgICAqIHNzbF9yZWFkKCkgbm93IHJldHVybnMgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQgcmF0aGVyIHRoYW4KKyAgICAgUE9MQVJTU0xfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0Ugb24gaGFybWxlc3MgYWxlcnRzLgorICAgKiBQT0xBUlNTTF9NUElfTUFYX1NJWkUgbm93IGRlZmF1bHRzIHRvIDEwMjQgaW4gb3JkZXIgdG8gYWxsb3cgODE5MiBiaXRzCisgICAgIFJTQSBrZXlzLgorICAgKiBBY2NlcHQgc3BhY2VzIGF0IGVuZCBvZiBsaW5lIG9yIGVuZCBvZiBidWZmZXIgaW4gYmFzZTY0X2RlY29kZSgpLgorICAgKiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBtb3JlIHRoYW4gb25lIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZSBwZXIKKyAgICAgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSBhcmUgbm90IGFjY2VwdGVkIGFueSBtb3JlLgorCis9IFBvbGFyU1NMIDEuMy44IHJlbGVhc2VkIDIwMTQtMDctMTEKK1NlY3VyaXR5CisgICAqIEZpeCBsZW5ndGggY2hlY2tpbmcgZm9yIEFFQUQgY2lwaGVyc3VpdGVzIChmb3VuZCBieSBDb2Rlbm9taWNvbikuCisgICAgIEl0IHdhcyBwb3NzaWJsZSB0byBjcmFzaCB0aGUgc2VydmVyIChhbmQgY2xpZW50KSB1c2luZyBjcmFmdGVkIG1lc3NhZ2VzCisgICAgIHdoZW4gYSBHQ00gc3VpdGUgd2FzIGNob3Nlbi4KKworRmVhdHVyZXMKKyAgICogQWRkIENDTSBtb2R1bGUgYW5kIGNpcGhlciBtb2RlIHRvIENpcGhlciBMYXllcgorICAgKiBTdXBwb3J0IGZvciBDQ00gYW5kIENDTV84IGNpcGhlcnN1aXRlcworICAgKiBTdXBwb3J0IGZvciBwYXJzaW5nIGFuZCB2ZXJpZnlpbmcgUlNBU1NBLVBTUyBzaWduYXR1cmVzIGluIHRoZSBYLjUwOQorICAgICBtb2R1bGVzIChjZXJ0aWZpY2F0ZXMsIENSTHMgYW5kIENTUnMpLgorICAgKiBCbG93ZmlzaCBpbiB0aGUgY2lwaGVyIGxheWVyIG5vdyBzdXBwb3J0cyB2YXJpYWJsZSBsZW5ndGgga2V5cy4KKyAgICogQWRkIGV4YW1wbGUgY29uZmlnLmggZm9yIFBTSyB3aXRoIENDTSwgb3B0aW1pemVkIGZvciBsb3cgUkFNIHVzYWdlLgorICAgKiBPcHRpbWl6ZSBmb3IgUkFNIHVzYWdlIGluIGV4YW1wbGUgY29uZmlnLmggZm9yIE5TQSBTdWl0ZSBCIHByb2ZpbGUuCisgICAqIEFkZCBQT0xBUlNTTF9SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMgdG8gYWxsb3cgcmVtb3ZpbmcgUkM0IGNpcGhlcnN1aXRlcworICAgICBmcm9tIHRoZSBkZWZhdWx0IGxpc3QgKGluYWN0aXZlIGJ5IGRlZmF1bHQpLgorICAgKiBBZGQgc2VydmVyLXNpZGUgZW5mb3JjZW1lbnQgb2Ygc2VudCByZW5lZ290aWF0aW9uIHJlcXVlc3RzCisgICAgIChzc2xfc2V0X3JlbmVnb3RpYXRpb25fZW5mb3JjZWQoKSkKKyAgICogQWRkIFNTTF9DSVBIRVJTVUlURVMgY29uZmlnLmggZmxhZyB0byBhbGxvdyBzcGVjaWZ5aW5nIGEgbGlzdCBvZgorICAgICBjaXBoZXJzdWl0ZXMgdG8gdXNlIGFuZCBzYXZlIHNvbWUgbWVtb3J5IGlmIHRoZSBsaXN0IGlzIHNtYWxsLgorCitDaGFuZ2VzCisgICAqIEFkZCBMSU5LX1dJVEhfUFRIUkVBRCBvcHRpb24gaW4gQ01ha2UgZm9yIGV4cGxpY2l0IGxpbmtpbmcgdGhhdCBpcworICAgICByZXF1aXJlZCBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBPcGVuQlNEKQorICAgKiBNaWdyYXRlIHplcm9pemluZyBvZiBkYXRhIHRvIHBvbGFyc3NsX3plcm9pemUoKSBpbnN0ZWFkIG9mIG1lbXNldCgpCisgICAgIGFnYWluc3QgdW53YW50ZWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucworICAgKiBtZF9saXN0KCkgbm93IHJldHVybnMgaGFzaGVzIHN0cm9uZ2VzdCBmaXJzdAorICAgKiBTZWxlY3Rpb24gb2YgaGFzaCBmb3Igc2lnbmluZyBTZXJ2ZXJLZXlFeGNoYW5nZSBpbiBUTFMgMS4yIG5vdyBwaWNrcworICAgICBzdHJvbmdlc3Qgb2ZmZXJlZCBieSBjbGllbnQuCisgICAqIEFsbCBwdWJsaWMgY29udGV4dHMgaGF2ZSBfaW5pdCgpIGFuZCBfZnJlZSgpIGZ1bmN0aW9ucyBub3cgZm9yIHNpbXBsZXIKKyAgICAgdXNhZ2UgcGF0dGVybgorCitCdWdmaXgKKyAgICogRml4IGluIGRlYnVnX3ByaW50X21zZygpCisgICAqIEVuZm9yY2UgYWxpZ25tZW50IGluIHRoZSBidWZmZXIgYWxsb2NhdG9yIGV2ZW4gaWYgYnVmZmVyIGlzIG5vdCBhbGlnbmVkCisgICAqIFJlbW92ZSBsZXNzLXRoYW4temVybyBjaGVja3Mgb24gdW5zaWduZWQgbnVtYmVycworICAgKiBTdHJpY3RlciBjaGVjayBvbiBTU0wgQ2xpZW50SGVsbG8gaW50ZXJuYWwgc2l6ZXMgY29tcGFyZWQgdG8gYWN0dWFsIHBhY2tldAorICAgICBzaXplIChmb3VuZCBieSBUcnVzdEluU29mdCkKKyAgICogRml4IFdTQVN0YXJ0dXAoKSByZXR1cm4gdmFsdWUgY2hlY2sgKGZvdW5kIGJ5IFBldGVyIFZhc2tvdmljKQorICAgKiBPdGhlciBtaW5vciBpc3N1ZXMgKGZvdW5kIGJ5IFBldGVyIFZhc2tvdmljKQorICAgKiBGaXggc3ltbGluayBjb21tYW5kIGZvciBjcm9zcyBjb21waWxpbmcgd2l0aCBDTWFrZSAoZm91bmQgYnkgQW5kcmUKKyAgICAgSGVpbmVja2UpCisgICAqIEZpeCBERVIgb3V0cHV0IG9mIGdlbl9rZXkgYXBwIChmb3VuZCBieSBHZXJnZWx5IEJ1ZGFpKQorICAgKiBWZXJ5IHNtYWxsIHJlY29yZHMgd2VyZSBpbmNvcnJlY3RseSByZWplY3RlZCB3aGVuIHRydW5jYXRlZCBITUFDIHdhcyBpbgorICAgICB1c2Ugd2l0aCBzb21lIGNpcGhlcnN1aXRlcyBhbmQgdmVyc2lvbnMgKFJDNCBpbiBhbGwgdmVyc2lvbnMsIENCQyB3aXRoCisgICAgIHZlcnNpb25zIDwgVExTIDEuMSkuCisgICAqIFZlcnkgbGFyZ2UgcmVjb3JkcyB1c2luZyBtb3JlIHRoYW4gMjI0IGJ5dGVzIG9mIHBhZGRpbmcgd2VyZSBpbmNvcnJlY3RseQorICAgICByZWplY3RlZCB3aXRoIENCQy1iYXNlZCBjaXBoZXJzdWl0ZXMgYW5kIFRMUyA+PSAxLjEKKyAgICogVmVyeSBsYXJnZSByZWNvcmRzIHVzaW5nIGxlc3MgcGFkZGluZyBjb3VsZCBjYXVzZSBhIGJ1ZmZlciBvdmVycmVhZCBvZiB1cAorICAgICB0byAzMiBieXRlcyB3aXRoIENCQy1iYXNlZCBjaXBoZXJzdWl0ZXMgYW5kIFRMUyA+PSAxLjEKKyAgICogUmVzdG9yZSBhYmlsaXR5IHRvIHVzZSBhIHYxIGNlcnQgYXMgYSBDQSBpZiB0cnVzdGVkIGxvY2FsbHkuIChUaGlzIGhhZAorICAgICBiZWVuIHJlbW92ZWQgaW4gMS4zLjYuKQorICAgKiBSZXN0b3JlIGFiaWxpdHkgdG8gbG9jYWxseSB0cnVzdCBhIHNlbGYtc2lnbmVkIGNlcnQgdGhhdCBpcyBub3QgYSBwcm9wZXIKKyAgICAgQ0EgZm9yIHVzZSBhcyBhbiBlbmQgZW50aXR5IGNlcnRpZmljYXRlLiAoVGhpcyBoYWQgYmVlbiByZW1vdmVkIGluCisgICAgIDEuMy42LikKKyAgICogRml4IHByZXByb2Nlc3NvciBjaGVja3MgZm9yIGJuX211bCBQUEMgYXNtIChmb3VuZCBieSBCYXJyeSBLLiBOYXRoYW4pLgorICAgKiBVc2UgXG5cdCByYXRoZXIgdGhhbiBzZW1pY29sb25zIGZvciBibl9tdWwgYXNtLCBzaW5jZSBzb21lIGFzc2VtYmxlcnMKKyAgICAgaW50ZXJwcmV0IHNlbWljb2xvbnMgYXMgY29tbWVudCBkZWxpbWl0ZXJzIChmb3VuZCBieSBCYXJyeSBLLiBOYXRoYW4pLgorICAgKiBGaXggb2ZmLWJ5LW9uZSBlcnJvciBpbiBwYXJzaW5nIFN1cHBvcnRlZCBQb2ludCBGb3JtYXQgZXh0ZW5zaW9uIHRoYXQKKyAgICAgY2F1c2VkIHNvbWUgaGFuZHNoYWtlcyB0byBmYWlsLgorICAgKiBGaXggcG9zc2libGUgbWlzY29tcHV0YXRpb24gb2YgdGhlIHByZW1hc3RlciBzZWNyZXQgd2l0aCBESEUtUFNLIGtleQorICAgICBleGNoYW5nZSB0aGF0IGNhdXNlZCBzb21lIGhhbmRzaGFrZXMgdG8gZmFpbCB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKyAgICAgKEZhaWx1cmUgcmF0ZSA8PSAxLzI1NSB3aXRoIGNvbW1vbiBESE0gbW9kdWxpLikKKyAgICogRGlzYWJsZSBicm9rZW4gU3BhcmM2NCBibl9tdWwgYXNzZW1ibHkgKGZvdW5kIGJ5IEZsb3JpYW4gT2JzZXIpLgorICAgKiBGaXggYmFzZTY0X2RlY29kZSgpIHRvIHJldHVybiBhbmQgY2hlY2sgbGVuZ3RoIGNvcnJlY3RseSAoaW4gY2FzZSBvZgorICAgICB0aWdodCBidWZmZXJzKQorICAgKiBGaXggbXBpX3dyaXRlX3N0cmluZygpIHRvIHdyaXRlICIwMCIgYXMgaGV4IG91dHB1dCBmb3IgZW1wdHkgTVBJIChmb3VuZAorICAgICBieSBIdWkgRG9uZykKKworPSBQb2xhclNTTCAxLjMuNyByZWxlYXNlZCBvbiAyMDE0LTA1LTAyCitGZWF0dXJlcworICAgKiBkZWJ1Z19zZXRfbG9nX21vZGUoKSBhZGRlZCB0byBkZXRlcm1pbmUgcmF3IG9yIGZ1bGwgbG9nZ2luZworICAgKiBkZWJ1Z19zZXRfdGhyZXNob2xkKCkgYWRkZWQgdG8gaWdub3JlIG1lc3NhZ2VzIG92ZXIgdGhyZXNob2xkIGxldmVsCisgICAqIHZlcnNpb25fY2hlY2tfZmVhdHVyZSgpIGFkZGVkIHRvIGNoZWNrIGZvciBjb21waWxlLXRpbWUgb3B0aW9ucyBhdAorICAgICBydW4tdGltZQorCitDaGFuZ2VzCisgICAqIFBPTEFSU1NMX0NPTkZJR19PUFRJT05TIGhhcyBiZWVuIHJlbW92ZWQuIEFsbCB2YWx1ZXMgYXJlIGluZGl2aWR1YWxseQorICAgICBjaGVja2VkIGFuZCBmaWxsZWQgaW4gdGhlIHJlbGV2YW50IG1vZHVsZSBoZWFkZXJzCisgICAqIERlYnVnIG1vZHVsZSBvbmx5IG91dHB1dHMgZnVsbCBsaW5lcyBpbnN0ZWFkIG9mIHBhcnRzCisgICAqIEJldHRlciBzdXBwb3J0IGZvciB0aGUgZGlmZmVyZW50IEF0dHJpYnV0ZSBUeXBlcyBmcm9tIElFVEYgUEtJWCAoUkZDIDUyODApCisgICAqIEFFUy1OSSBub3cgY29tcGlsZXMgd2l0aCAib2xkIiBhc3NlbWJsZXJzIHRvbworICAgKiBDaXBoZXJzdWl0ZXMgYmFzZWQgb24gUkM0IG5vdyBoYXZlIHRoZSBsb3dlc3QgcHJpb3JpdHkgYnkgZGVmYXVsdAorCitCdWdmaXgKKyAgICogT25seSBpdGVyYXRlIG92ZXIgYWN0dWFsIGNlcnRpZmljYXRlcyBpbiBzc2xfd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCgpCisgICAgIChmb3VuZCBieSBNYXR0aGV3IFBhZ2UpCisgICAqIFR5cG9zIGluIHBsYXRmb3JtLmMgYW5kIHBrY3MxMS5jIChmb3VuZCBieSBEYW5pZWwgUGhpbGxpcHMgYW5kIFN0ZWZmYW4KKyAgICAgS2FyZ2VyKQorICAgKiBjZXJ0X3dyaXRlIGFwcCBzaG91bGQgdXNlIHN1YmplY3Qgb2YgaXNzdWVyIGNlcnRpZmljYXRlIGFzIGlzc3VlciBvZiBjZXJ0CisgICAqIEZpeCBmYWxzZSByZWplY3QgaW4gcGFkZGluZyBjaGVjayBpbiBzc2xfZGVjcnlwdF9idWYoKSBmb3IgQ0JDCisgICAgIGNpcGhlcnN1aXRlcywgZm9yIGZ1bGwgU1NMIGZyYW1lcyBvZiBkYXRhLgorICAgKiBJbXByb3ZlIGludGVyb3BlcmFiaWxpdHkgYnkgbm90IHdyaXRpbmcgZXh0ZW5zaW9uIGxlbmd0aCBpbiBDbGllbnRIZWxsbyAvCisgICAgIFNlcnZlckhlbGxvIHdoZW4gbm8gZXh0ZW5zaW9ucyBhcmUgcHJlc2VudCAoZm91bmQgYnkgTWF0dGhldyBQYWdlKQorICAgKiByc2FfY2hlY2tfcHVia2V5KCkgbm93IGFsbG93cyBhbiBFIHVwIHRvIE4KKyAgICogT24gT3BlbkJTRCwgdXNlIGFyYzRyYW5kb21fYnVmKCkgaW5zdGVhZCBvZiByYW5kKCkgdG8gcHJldmVudCB3YXJuaW5ncworICAgKiBtcGlfZmlsbF9yYW5kb20oKSB3YXMgY3JlYXRpbmcgbnVtYmVycyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQgb24KKyAgICAgYmlnLWVuZGlhbiBwbGF0Zm9ybSB3aGVuIHNpemUgd2FzIG5vdCBhbiBpbnRlZ2VyIG51bWJlciBvZiBsaW1icworICAgKiBGaXggZGVwZW5kZW5jaWVzIGlzc3VlcyBpbiBYLjUwOSB0ZXN0IHN1aXRlLgorICAgKiBTb21lIHBhcnRzIG9mIHNzbF90bHMuYyB3ZXJlIGNvbXBpbGVkIGV2ZW4gd2hlbiB0aGUgbW9kdWxlIHdhcyBkaXNhYmxlZC4KKyAgICogRml4IGRldGVjdGlvbiBvZiBEcmFnb25mbHlCU0QgaW4gbmV0LmMgKGZvdW5kIGJ5IE1hcmt1cyBQZmVpZmZlcikKKyAgICogRml4IGRldGVjdGlvbiBvZiBDbGFuZyBvbiBzb21lIEFwcGxlIHBsYXRmb3JtcyB3aXRoIENNYWtlCisgICAgIChmb3VuZCBieSBCYXJyeSBLLiBOYXRoYW4pCisKKz0gUG9sYXJTU0wgMS4zLjYgcmVsZWFzZWQgb24gMjAxNC0wNC0xMQorCitGZWF0dXJlcworICAgKiBTdXBwb3J0IGZvciB0aGUgQUxQTiBTU0wgZXh0ZW5zaW9uCisgICAqIEFkZCBvcHRpb24gJ3VzZV9kZXZfcmFuZG9tJyB0byBnZW5fa2V5IGFwcGxpY2F0aW9uCisgICAqIEVuYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIGtleVVzYWdlIGV4dGVuc2lvbiBmb3IgQ0EgYW5kIGxlYWYKKyAgICAgY2VydGlmaWNhdGVzIChQT0xBUlNTTF9YNTA5X0NIRUNLX0tFWV9VU0FHRSkKKyAgICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUgZXh0ZW5kZWRLZXlVc2FnZSBleHRlbnNpb24KKyAgICAgKFBPTEFSU1NMX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFKQorCitDaGFuZ2VzCisgICAqIHg1MDlfY3J0X2luZm8oKSBub3cgcHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IHBhcnNlZCBleHRlbnNpb25zIGFzIHdlbGwKKyAgICogcGtfdmVyaWZ5KCkgbm93IHJldHVybnMgYSBzcGVjaWZpYyBlcnJvciBjb2RlIHdoZW4gdGhlIHNpZ25hdHVyZSBpcyB2YWxpZAorICAgICBidXQgc2hvcnRlciB0aGFuIHRoZSBzdXBwbGllZCBsZW5ndGguCisgICAqIFVzZSBVVEMgdGltZSB0byBjaGVjayBjZXJ0aWZpY2F0ZSB2YWxpZGl0eS4KKyAgICogUmVqZWN0IGNlcnRpZmljYXRlcyB3aXRoIHRpbWVzIG5vdCBpbiBVVEMsIHBlciBSRkMgNTI4MC4KKworU2VjdXJpdHkKKyAgICogQXZvaWQgcG90ZW50aWFsIHRpbWluZyBsZWFrIGluIGVjZHNhX3NpZ24oKSBieSBibGluZGluZyBtb2R1bGFyIGRpdmlzaW9uLgorICAgICAoRm91bmQgYnkgV2F0c29uIExhZGQuKQorICAgKiBUaGUgbm90QWZ0ZXIgZGF0ZSBvZiBzb21lIGNlcnRpZmljYXRlcyB3YXMgbm8gbG9uZ2VyIGNoZWNrZWQgc2luY2UgMS4zLjUuCisgICAgIFRoaXMgYWZmZWN0cyBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHVzZXItc3VwcGxpZWQgY2hhaW4gZXhjZXB0IHRoZSB0b3AKKyAgICAgY2VydGlmaWNhdGUuIElmIHRoZSB1c2VyLXN1cHBsaWVkIGNoYWluIGNvbnRhaW5zIG9ubHkgb25lIGNlcnRpZmljYXRlcywKKyAgICAgaXQgaXMgbm90IGFmZmVjdGVkIChpZSwgaXRzIG5vdEFmdGVyIGRhdGUgaXMgcHJvcGVybHkgY2hlY2tlZCkuCisgICAqIFByZXZlbnQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzc2xfcmVhZF9yZWNvcmQoKSAoZm91bmQgYnkKKyAgICAgVHJ1c3RJblNvZnQpCisKK0J1Z2ZpeAorICAgKiBUaGUgbGVuZ3RoIG9mIHZhcmlvdXMgQ2xpZW50S2V5RXhjaGFuZ2UgbWVzc2FnZXMgd2FzIG5vdCBwcm9wZXJseSBjaGVja2VkLgorICAgKiBTb21lIGV4YW1wbGUgc2VydmVyIHByb2dyYW1zIHdlcmUgbm90IHNlbmRpbmcgdGhlIGNsb3NlX25vdGlmeSBhbGVydC4KKyAgICogUG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIG1waV9leHBfbW9kKCkgd2hlbiBlcnJvciBvY2N1cnMgZHVyaW5nCisgICAgIGNhbGN1bGF0aW9uIG9mIFJSLgorICAgKiBGaXhlZCBtYWxsb2MvZnJlZSBkZWZhdWx0ICNkZWZpbmUgaW4gcGxhdGZvcm0uYyAoZm91bmQgYnkgR2VyZ2VseSBCdWRhaSkuCisgICAqIEZpeGVkIHR5cGUgd2hpY2ggbWFkZSBQT0xBUlNTTF9FTlRST1BZX0ZPUkNFX1NIQTI1NiB1bmVmZmVjdGl2ZSAoZm91bmQgYnkKKyAgICAgR2VyZ2VseSBCdWRhaSkuCisgICAqIEZpeCAjaW5jbHVkZSBwYXRoIGluIGVjZHNhLmggd2hpY2ggd2Fzbid0IGFjY2VwdGVkIGJ5IHNvbWUgY29tcGlsZXJzLgorICAgICAoZm91bmQgYnkgR2VyZ2VseSBCdWRhaSkKKyAgICogRml4IGNvbXBpbGUgZXJyb3JzIHdoZW4gUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfQkMgaXMgdW5kZWZpbmVkIChmb3VuZCBieQorICAgICBTaHVvIENoZW4pLgorICAgKiBvaWRfZ2V0X251bWVyaWNfc3RyaW5nKCkgdXNlZCB0byB0cnVuY2F0ZSB0aGUgb3V0cHV0IHdpdGhvdXQgcmV0dXJuaW5nIGFuCisgICAgIGVycm9yIGlmIHRoZSBvdXRwdXQgYnVmZmVyIHdhcyBqdXN0IDEgYnl0ZSB0b28gc21hbGwuCisgICAqIGRobV9wYXJzZV9kaG0oKSAoaGVuY2UgZGhtX3BhcnNlX2RobWZpbGUoKSkgZGlkIG5vdCBzZXQgZGhtLT5sZW4uCisgICAqIENhbGxpbmcgcGtfZGVidWcoKSBvbiBhbiBSU0EtYWx0IGtleSB3b3VsZCBzZWdmYXVsdC4KKyAgICogcGtfZ2V0X3NpemUoKSBhbmQgcGtfZ2V0X2xlbigpIHdlcmUgb2ZmIGJ5IGEgZmFjdG9yIDggZm9yIFJTQS1hbHQga2V5cy4KKyAgICogUG90ZW50aWFsIGJ1ZmZlciBvdmVyd3JpdGUgaW4gcGVtX3dyaXRlX2J1ZmZlcigpIGJlY2F1c2Ugb2YgbG93IGxlbmd0aAorICAgICBpbmRpY2F0aW9uIChmb3VuZCBieSBUaGlqcyBBbGtlbWFkZSkKKyAgICogRUMgY3VydmVzIGNvbnN0YW50cywgd2hpY2ggc2hvdWxkIGJlIG9ubHkgaW4gUk9NIHNpbmNlIDEuMy4zLCB3ZXJlIGFsc28KKyAgICAgc3RvcmVkIGluIFJBTSBkdWUgdG8gbWlzc2luZyAnY29uc3QncyAoZm91bmQgYnkgR2VyZ2VseSBCdWRhaSkuCisKKz0gUG9sYXJTU0wgMS4zLjUgcmVsZWFzZWQgb24gMjAxNC0wMy0yNgorRmVhdHVyZXMKKyAgICogSE1BQy1EUkJHIGFzIGEgc2VwYXJhdGUgbW9kdWxlCisgICAqIE9wdGlvbiB0byBzZXQgdGhlIEN1cnZlIHByZWZlcmVuY2Ugb3JkZXIgKGRpc2FibGVkIGJ5IGRlZmF1bHQpCisgICAqIFNpbmdsZSBQbGF0Zm9ybSBjb21wYXRpbGliaXR5IGxheWVyIChmb3IgbWVtb3J5IC8gcHJpbnRmIC8gZnByaW50ZikKKyAgICogQWJpbGl0eSB0byBwcm92aWRlIGFsdGVybmF0ZSB0aW1pbmcgaW1wbGVtZW50YXRpb24KKyAgICogQWJpbGl0eSB0byBmb3JjZSB0aGUgZW50cm9weSBtb2R1bGUgdG8gdXNlIFNIQS0yNTYgYXMgaXRzIGJhc2lzCisgICAgIChQT0xBUlNTTF9FTlRST1BZX0ZPUkNFX1NIQTI1NikKKyAgICogVGVzdGluZyBzY3JpcHQgc3NsLW9wdC5zaCBhZGRlZCBmb3IgdGVzdGluZyAnbGl2ZScgc3NsIG9wdGlvbgorICAgICBpbnRlcm9wZXJhYmlsaXR5IGFnYWluc3QgT3BlblNTTCBhbmQgUG9sYXJTU0wKKyAgICogU3VwcG9ydCBmb3IgcmVhZGluZyBFQyBrZXlzIHRoYXQgdXNlIFNwZWNpZmllZEVDRG9tYWluIGluIHNvbWUgY2FzZXMuCisgICAqIEVudHJvcHkgbW9kdWxlIG5vdyBzdXBwb3J0cyBzZWVkIHdyaXRpbmcgYW5kIHJlYWRpbmcKKworQ2hhbmdlcworICAgKiBEZXByZWNhdGVkIHRoZSBNZW1vcnkgbGF5ZXIKKyAgICogZW50cm9weV9hZGRfc291cmNlKCksIGVudHJvcHlfdXBkYXRlX21hbnVhbCgpIGFuZCBlbnRyb3B5X2dhdGhlcigpCisgICAgIG5vdyB0aHJlYWQtc2FmZSBpZiBQT0xBUlNTTF9USFJFQURJTkdfQyBkZWZpbmVkCisgICAqIEltcHJvdmVtZW50cyB0byB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtLCBjb250cmlidXRlZCBieSBKdWxpYW4gT3NwYWxkLgorICAgKiBXb3JrIGFyb3VuZCBhIGJ1ZyBvZiB0aGUgdmVyc2lvbiBvZiBDbGFuZyBzaGlwcGVkIGJ5IEFwcGxlIHdpdGggTWF2ZXJpY2tzCisgICAgIHRoYXQgcHJldmVudGVkIGJpZ251bS5jIGZyb20gY29tcGlsaW5nLiAoUmVwb3J0ZWQgYnkgUmFmYWVsIEJhcHRpc3RhLikKKyAgICogUmV2YW1wZWQgdGhlIGNvbXBhdC5zaCBpbnRlcm9wZXJhdGliaWxpdHkgc2NyaXB0IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IKKyAgICAgdGVzdGluZyBhZ2FpbnN0IEdudVRMUworICAgKiBEZXByZWNhdGVkIHNzbF9zZXRfb3duX2NlcnRfcnNhKCkgYW5kIHNzbF9zZXRfb3duX2NlcnRfcnNhX2FsdCgpCisgICAqIEltcHJvdmVtZW50cyB0byB0ZXN0cy9NYWtlZmlsZSwgY29udHJpYnV0ZWQgYnkgT2RlbiBFcmlrc3Nvbi4KKworU2VjdXJpdHkKKyAgICogRm9yYmlkIGNoYW5nZSBvZiBzZXJ2ZXIgY2VydGlmaWNhdGUgZHVyaW5nIHJlbmVnb3RpYXRpb24gdG8gcHJldmVudAorICAgICAidHJpcGxlIGhhbmRzaGFrZSIgYXR0YWNrIHdoZW4gYXV0aGVudGljYXRpb24gbW9kZSBpcyAnb3B0aW9uYWwnICh0aGUKKyAgICAgYXR0YWNrIHdhcyBhbHJlYWR5IGltcG9zc2libGUgd2hlbiBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCkuCisgICAqIENoZWNrIG5vdEJlZm9yZSB0aW1lc3RhbXAgb2YgY2VydGlmaWNhdGVzIGFuZCBDUkxzIGZyb20gdGhlIGZ1dHVyZS4KKyAgICogRm9yYmlkIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZworICAgKiBGaXhlZCBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3cgd2l0aCBvdmVybG9uZyBQU0sKKyAgICogUG9zc2libGUgcmVtb3RlbHktdHJpZ2dlcmVkIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBmaXhlZCAoZm91bmQgYnkKKyAgICAgVHJ1c3RJblNvZnQpCisKK0J1Z2ZpeAorICAgKiBlY3BfZ2VuX2tleXBhaXIoKSBkb2VzIG1vcmUgdHJpZXMgdG8gcHJldmVudCBmYWlsdXJlIGJlY2F1c2Ugb2YKKyAgICAgc3RhdGlzdGljcworICAgKiBGaXhlZCBidWcgaW4gUlNBIFBLQ1MjMSB2MS41ICJyZXZlcnNlZCIgb3BlcmF0aW9ucworICAgKiBGaXhlZCB0ZXN0aW5nIHdpdGggb3V0LW9mLXNvdXJjZSBidWlsZHMgdXNpbmcgY21ha2UKKyAgICogRml4ZWQgdmVyc2lvbi1tYWpvciBpbnRvbGVyYW5jZSBpbiBzZXJ2ZXIKKyAgICogRml4ZWQgQ01ha2Ugc3ltbGlua2luZyBvbiBvdXQtb2Ytc291cmNlIGJ1aWxkcworICAgKiBGaXhlZCBkZXBlbmRlbmN5IGlzc3VlcyBpbiB0ZXN0IHN1aXRlCisgICAqIFByb2dyYW1zIHJzYV9zaWduX3BzcyBhbmQgcnNhX3ZlcmlmeV9wc3Mgd2VyZSBub3QgdXNpbmcgUFNTIHNpbmNlIDEuMy4wCisgICAqIEJpZ251bSdzIE1JUFMtMzIgYXNzZW1ibHkgd2FzIHVzZWQgb24gTUlQUy02NCwgY2F1c2luZyBjaGFvcy4gKEZvdW5kIGJ5CisgICAgIEFsZXggV2lsc29uLikKKyAgICogc3NsX2NhY2hlIHdhcyBjcmVhdGluZyBlbnRyaWVzIHdoZW4gbWF4X2VudHJpZXM9MCBpZiBUSU1JTkdfQyB3YXMgZW5hYmxlZC4KKyAgICogbV9zbGVlcCgpIHdhcyBzbGVlcGluZyB0d2ljZSB0b28gbG9uZyBvbiBtb3N0IFVuaXggcGxhdGZvcm1zLgorICAgKiBGaXhlZCBidWcgd2l0aCBzZXNzaW9uIHRpY2tldHMgYW5kIG5vbi1ibG9ja2luZyBJL08gaW4gdGhlIHVubGlrZWx5IGNhc2UKKyAgICAgc2VuZCgpIHdvdWxkIHJldHVybiBhbiBFQUdBSU4gZXJyb3Igd2hlbiBzZW5kaW5nIHRoZSB0aWNrZXQuCisgICAqIHNzbF9jYWNoZSB3YXMgbGVha2luZyBtZW1vcnkgd2hlbiByZXVzaW5nIGEgdGltZWQgb3V0IGVudHJ5IGNvbnRhaW5pbmcgYQorICAgICBjbGllbnQgY2VydGlmaWNhdGUuCisgICAqIHNzbF9zcnYgd2FzIGxlYWtpbmcgbWVtb3J5IHdoZW4gY2xpZW50IHByZXNlbnRlZCBhIHRpbWVkIG91dCB0aWNrZXQKKyAgICAgY29udGFpbmluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZQorICAgKiBzc2xfaW5pdCgpIHdhcyBsZWF2aW5nIGEgZGlydHkgcG9pbnRlciBpbiBzc2xfY29udGV4dCBpZiBtYWxsb2Mgb2YKKyAgICAgb3V0X2N0ciBmYWlsZWQKKyAgICogc3NsX2hhbmRzaGFrZV9pbml0KCkgd2FzIGxlYXZpbmcgZGlydHkgcG9pbnRlcnMgaW4gc3ViY29udGV4dHMgaWYgbWFsbG9jCisgICAgIG9mIG9uZSBvZiB0aGVtIGZhaWxlZAorICAgKiBGaXggdHlwbyBpbiByc2FfY29weSgpIHRoYXQgaW1wYWN0ZWQgUEtDUyMxIHYyIGNvbnRleHRzCisgICAqIHg1MDlfZ2V0X2N1cnJlbnRfdGltZSgpIHVzZXMgbG9jYWx0aW1lX3IoKSB0byBwcmV2ZW50IHRocmVhZCBpc3N1ZXMKKworPSBQb2xhclNTTCAxLjMuNCByZWxlYXNlZCBvbiAyMDE0LTAxLTI3CitGZWF0dXJlcworICAgKiBTdXBwb3J0IGZvciB0aGUgS29ibGl0eiBjdXJ2ZXM6IHNlY3AxOTJrMSwgc2VjcDIyNGsxLCBzZWNwMjU2azEKKyAgICogU3VwcG9ydCBmb3IgUklQRU1ELTE2MAorICAgKiBTdXBwb3J0IGZvciBBRVMgQ0ZCOCBtb2RlCisgICAqIFN1cHBvcnQgZm9yIGRldGVybWluaXN0aWMgRUNEU0EgKFJGQyA2OTc5KQorCitCdWdmaXgKKyAgICogUG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIGJpZ251bV9zZWxmdGVzdCgpCisgICAqIFJlcGxhY2VkIGV4cGlyZWQgdGVzdCBjZXJ0aWZpY2F0ZQorICAgKiBzc2xfbWFpbF9jbGllbnQgbm93IHRlcm1pbmF0ZXMgbGluZXMgd2l0aCBDUkxGLCBpbnN0ZWFkIG9mIExGCisgICAqIG5ldCBtb2R1bGUgaGFuZGxlcyB0aW1lb3V0cyBvbiBibG9ja2luZyBzb2NrZXRzIGJldHRlciAoZm91bmQgYnkgVGlsbWFuCisgICAgIFNhdWVyYmVjaykKKyAgICogQXNzZW1ibHkgZm9ybWF0IGZpeGVzIGluIGJuX211bC5oCisKK1NlY3VyaXR5CisgICAqIE1pc3NpbmcgTVBJX0NISyBjYWxscyBhZGRlZCBhcm91bmQgdW5ndWFyZGVkIG1waSBjYWxscyAoZm91bmQgYnkKKyAgICAgVHJ1c3RJblNvZnQpCisKKz0gUG9sYXJTU0wgMS4zLjMgcmVsZWFzZWQgb24gMjAxMy0xMi0zMQorRmVhdHVyZXMKKyAgICogRUMga2V5IGdlbmVyYXRpb24gc3VwcG9ydCBpbiBnZW5fa2V5IGFwcAorICAgKiBTdXBwb3J0IGZvciBhZGhlcmluZyB0byBjbGllbnQgY2lwaGVyc3VpdGUgb3JkZXIgcHJlZmVyZW5jZQorICAgICAoUE9MQVJTU0xfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFKQorICAgKiBTdXBwb3J0IGZvciBDdXJ2ZTI1NTE5CisgICAqIFN1cHBvcnQgZm9yIEVDREgtUlNBIGFuZCBFQ0RILUVDRFNBIGtleSBleGNoYW5nZXMgYW5kIGNpcGhlcnN1aXRlcworICAgKiBTdXBwb3J0IGZvciBJUHY2IGluIHRoZSBORVQgbW9kdWxlCisgICAqIEFFUy1OSSBzdXBwb3J0IGZvciBBRVMsIEFFUy1HQ00gYW5kIEFFUyBrZXkgc2NoZWR1bGluZworICAgKiBTU0wgUHRocmVhZC1iYXNlZCBzZXJ2ZXIgZXhhbXBsZSBhZGRlZCAoc3NsX3B0aHJlYWRfc2VydmVyKQorCitDaGFuZ2VzCisgICAqIGdlbl9wcmltZSgpIHNwZWVkdXAKKyAgICogU3BlZWR1cCBvZiBFQ1AgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uCisgICAqIFJlbGF4ZWQgc29tZSBTSEEyIGNpcGhlcnN1aXRlJ3MgdmVyc2lvbiByZXF1aXJlbWVudHMKKyAgICogRHJvcHBlZCB1c2Ugb2YgcmVhZGRpcl9yKCkgaW5zdGVhZCBvZiByZWFkZGlyKCkgd2l0aCB0aHJlYWRpbmcgc3VwcG9ydAorICAgKiBNb3JlIGNvbnN0YW50LXRpbWUgY2hlY2tzIGluIHRoZSBSU0EgbW9kdWxlCisgICAqIFNwbGl0IG9mZiBjdXJ2ZXMgZnJvbSBlY3AuYyBpbnRvIGVjcF9jdXJ2ZXMuYworICAgKiBDdXJ2ZXMgYXJlIG5vdyBzdG9yZWQgZnVsbHkgaW4gUk9NCisgICAqIE1lbW9yeSB1c2FnZSBvcHRpbWl6YXRpb25zIGluIEVDUCBtb2R1bGUKKyAgICogUmVtb3ZlZCBQT0xBUlNTTF9USFJFQURJTkdfRFVNTVkKKworQnVnZml4CisgICAqIEZpeGVkIGJ1ZyBpbiBtcGlfc2V0X2JpdCgpIG9uIHBsYXRmb3JtcyB3aGVyZSB0X3VpbnQgaXMgd2lkZXIgdGhhbiBpbnQKKyAgICogRml4ZWQgWC41MDkgaG9zdG5hbWUgY29tcGFyaXNvbiAod2l0aCBub24tcmVndWxhciBjaGFyYWN0ZXJzKQorICAgKiBTU0wgbm93IGdyYWNlZnVsbHkgaGFuZGxlcyBtaXNzaW5nIFJORworICAgKiBNaXNzaW5nIGRlZmluZXMgLyBjYXNlcyBmb3IgUlNBX1BTSyBrZXkgZXhjaGFuZ2UKKyAgICogY3J5cHRfYW5kX2hhc2ggYXBwIGNoZWNrcyBNQUMgYmVmb3JlIGZpbmFsIGRlY3J5cHRpb24KKyAgICogUG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIHNzbF90aWNrZXRfa2V5c19pbml0KCkKKyAgICogTWVtb3J5IGxlYWsgaW4gYmVuY2htYXJrIGFwcGxpY2F0aW9uCisgICAqIEZpeGVkIHg1MDlfY3J0X3BhcnNlX3BhdGgoKSBidWcgb24gV2luZG93cyBwbGF0Zm9ybXMKKyAgICogQWRkZWQgbWlzc2luZyBNUElfQ0hLKCkgYXJvdW5kIHNvbWUgc3RhdGVtZW50cyBpbiBtcGlfZGl2X21waSgpIChmb3VuZCBieQorICAgICBUcnVzdEluU29mdCkKKyAgICogRml4ZWQgcG90ZW50aWFsIG92ZXJmbG93IGluIGNlcnRpZmljYXRlIHNpemUgdmVyaWZpY2F0aW9uIGluCisgICAgIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZSgpIChmb3VuZCBieSBUcnVzdEluU29mdCkKKworU2VjdXJpdHkKKyAgICogUG9zc2libGUgcmVtb3RlbHktdHJpZ2dlcmVkIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBmaXhlZCAoZm91bmQgYnkKKyAgICAgVHJ1c3RJblNvZnQpCisKKz0gUG9sYXJTU0wgMS4zLjIgcmVsZWFzZWQgb24gMjAxMy0xMS0wNAorRmVhdHVyZXMKKyAgICogUEsgdGVzdHMgYWRkZWQgdG8gdGVzdCBmcmFtZXdvcmsKKyAgICogQWRkZWQgb3B0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBOSVNUIE1PRFAgY3VydmVzIChQT0xBUlNTTF9FQ1BfTklTVF9PUFRJTSkKKyAgICogU3VwcG9ydCBmb3IgQ2FtZWxsaWEtR0NNIG1vZGUgYW5kIGNpcGhlcnN1aXRlcworCitDaGFuZ2VzCisgICAqIFBhZGRpbmcgY2hlY2tzIGluIGNpcGhlciBsYXllciBhcmUgbm93IGNvbnN0YW50LXRpbWUKKyAgICogVmFsdWUgY29tcGFyaXNvbnMgaW4gU1NMIGxheWVyIGFyZSBub3cgY29uc3RhbnQtdGltZQorICAgKiBTdXBwb3J0IGZvciBzZXJpYWxOdW1iZXIsIHBvc3RhbEFkZHJlc3MgYW5kIHBvc3RhbENvZGUgaW4gWDUwOSBuYW1lcworICAgKiBTU0wgUmVuZWdvdGlhdGlvbiB3YXMgcmVmYWN0b3JlZAorCitCdWdmaXgKKyAgICogTW9yZSBzdHJpbmdlbnQgY2hlY2tzIGluIGNpcGhlciBsYXllcgorICAgKiBTZXJ2ZXIgZG9lcyBub3Qgc2VuZCBvdXQgZXh0ZW5zaW9ucyBub3QgYWR2ZXJ0aXNlZCBieSBjbGllbnQKKyAgICogUHJldmVudCBwb3NzaWJsZSBhbGlnbm1lbnQgd2FybmluZ3Mgb24gY2FzdGluZyBmcm9tIGNoYXIgKiB0byAnYWxpZ25lZCAqJworICAgKiBNaXNjIGZpeGVzIGFuZCBhZGRpdGlvbnMgdG8gZGVwZW5kZW5jeSBjaGVja3MKKyAgICogQ29uc3QgY29ycmVjdG5lc3MKKyAgICogY2VydF93cml0ZSB3aXRoIHNlbGZzaWduIHNob3VsZCB1c2UgaXNzdWVyX25hbWUgYXMgc3ViamVjdF9uYW1lCisgICAqIEZpeCBFQ0RTQSBjb3JuZXIgY2FzZTogbWlzc2luZyByZWR1Y3Rpb24gbW9kIE4gKGZvdW5kIGJ5IER1YWxUYWNoeW9uKQorICAgKiBEZWZpbmVzIHRvIGhhbmRsZSBVRUZJIGVudmlyb25tZW50IHVuZGVyIE1TVkMKKyAgICogU2VydmVyLXNpZGUgaW5pdGlhdGVkIHJlbmVnb3RpYXRpb25zIHNlbmQgSGVsbG9SZXF1ZXN0CisKKz0gUG9sYXJTU0wgMS4zLjEgcmVsZWFzZWQgb24gMjAxMy0xMC0xNQorRmVhdHVyZXMKKyAgICogU3VwcG9ydCBmb3IgQnJhaW5wb29sIGN1cnZlcyBhbmQgVExTIGNpcGhlcnN1aXRlcyAoUkZDIDcwMjcpCisgICAqIFN1cHBvcnQgZm9yIEVDREhFLVBTSyBrZXktZXhjaGFuZ2UgYW5kIGNpcGhlcnN1aXRlcworICAgKiBTdXBwb3J0IGZvciBSU0EtUFNLIGtleS1leGNoYW5nZSBhbmQgY2lwaGVyc3VpdGVzCisKK0NoYW5nZXMKKyAgICogUlNBIGJsaW5kaW5nIGxvY2tzIGZvciBhIHNtYWxsZXIgYW1vdW50IG9mIHRpbWUKKyAgICogVExTIGNvbXByZXNzaW9uIG9ubHkgYWxsb2NhdGVzIHdvcmtpbmcgYnVmZmVyIG9uY2UKKyAgICogSW50cm9kdWNlZCBQT0xBUlNTTF9IQVZFX1JFQURESVJfUiBmb3Igc3lzdGVtcyB3aXRob3V0IGl0CisgICAqIGNvbmZpZy5oIGlzIG1vcmUgc2NyaXB0LWZyaWVuZGx5CisKK0J1Z2ZpeAorICAgKiBNaXNzaW5nIE1TVkMgZGVmaW5lcyBhZGRlZAorICAgKiBDb21waWxlIGVycm9ycyB3aXRoIFBPTEFSU1NMX1JTQV9OT19DUlQKKyAgICogSGVhZGVyIGZpbGVzIHdpdGggJ3BvbGFyc3NsLycKKyAgICogQ29uc3QgY29ycmVjdG5lc3MKKyAgICogUG9zc2libGUgbmFtaW5nIGNvbGxpc2lvbiBpbiBkaG1fY29udGV4dAorICAgKiBCZXR0ZXIgc3VwcG9ydCBmb3IgTVNWQworICAgKiB0aHJlYWRpbmdfc2V0X2FsdCgpIG5hbWUKKyAgICogQWRkZWQgbWlzc2luZyB4NTA5d3JpdGVfY3J0X3NldF92ZXJzaW9uKCkKKworPSBQb2xhclNTTCAxLjMuMCByZWxlYXNlZCBvbiAyMDEzLTEwLTAxCitGZWF0dXJlcworICAgKiBFbGxpcHRpYyBDdXJ2ZSBDcnlwdG9ncmFwaHkgbW9kdWxlIGFkZGVkCisgICAqIEVsbGlwdGljIEN1cnZlIERpZmZpZSBIZWxsbWFuIG1vZHVsZSBhZGRlZAorICAgKiBFcGhlbWVyYWwgRWxsaXB0aWMgQ3VydmUgRGlmZmllIEhlbGxtYW4gc3VwcG9ydCBmb3IgU1NML1RMUworICAgIChFQ0RIRS1iYXNlZCBjaXBoZXJzdWl0ZXMpCisgICAqIEVwaGVtZXJhbCBFbGxpcHRpYyBDdXJ2ZSBEaWdpdGFsIFNpZ25hdHVyZSBBbGdvcml0aG0gc3VwcG9ydCBmb3IgU1NML1RMUworICAgIChFQ0RTQS1iYXNlZCBjaXBoZXJzdWl0ZXMpCisgICAqIEFiaWxpdHkgdG8gc3BlY2lmeSBhbGxvd2VkIGNpcGhlcnN1aXRlcyBiYXNlZCBvbiB0aGUgcHJvdG9jb2wgdmVyc2lvbi4KKyAgICogUFNLIGFuZCBESEUtUFNLIGJhc2VkIGNpcGhlcnN1aXRlcyBhZGRlZAorICAgKiBNZW1vcnkgYWxsb2NhdGlvbiBhYnN0cmFjdGlvbiBsYXllciBhZGRlZAorICAgKiBCdWZmZXItYmFzZWQgbWVtb3J5IGFsbG9jYXRvciBhZGRlZCAobm8gbWFsbG9jKCkgLyBmcmVlKCkgLyBIRUFQIHVzYWdlKQorICAgKiBUaHJlYWRpbmcgYWJzdHJhY3Rpb24gbGF5ZXIgYWRkZWQgKGR1bW15IC8gcHRocmVhZCAvIGFsdGVybmF0ZSkKKyAgICogUHVibGljIEtleSBhYnN0cmFjdGlvbiBsYXllciBhZGRlZAorICAgKiBQYXJzaW5nIEVsbGlwdGljIEN1cnZlIGtleXMKKyAgICogUGFyc2luZyBFbGxpcHRpYyBDdXJ2ZSBjZXJ0aWZpY2F0ZXMKKyAgICogU3VwcG9ydCBmb3IgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24gKFJGQyA2MDY2KQorICAgKiBTdXBwb3J0IGZvciB0cnVuY2F0ZWRfaG1hYyBleHRlbnNpb24gKFJGQyA2MDY2KQorICAgKiBTdXBwb3J0IGZvciB6ZXJvcy1hbmQtbGVuZ3RoIChBTlNJIFguOTIzKSBwYWRkaW5nLCBvbmUtYW5kLXplcm9zCisgICAgIChJU08vSUVDIDc4MTYtNCkgcGFkZGluZyBhbmQgemVybyBwYWRkaW5nIGluIHRoZSBjaXBoZXIgbGF5ZXIKKyAgICogU3VwcG9ydCBmb3Igc2Vzc2lvbiB0aWNrZXRzIChSRkMgNTA3NykKKyAgICogQ2VydGlmaWNhdGUgUmVxdWVzdCAoQ1NSKSBnZW5lcmF0aW9uIHdpdGggZXh0ZW5zaW9ucyAoa2V5X3VzYWdlLAorICAgICBuc19jZXJ0X3R5cGUpCisgICAqIFg1MDkgQ2VydGlmaWNhdGUgd3JpdGluZyB3aXRoIGV4dGVuc2lvbnMgKGJhc2ljX2NvbnN0cmFpbnRzLAorICAgICBpc3N1ZXJfa2V5X2lkZW50aWZpZXIsIGV0YykKKyAgICogT3B0aW9uYWwgYmxpbmRpbmcgZm9yIFJTQSwgREhNIGFuZCBFQworICAgKiBTdXBwb3J0IGZvciBtdWx0aXBsZSBhY3RpdmUgY2VydGlmaWNhdGUgLyBrZXkgcGFpcnMgaW4gU1NMIHNlcnZlcnMgZm9yCisgICAJIHRoZSBzYW1lIGhvc3QgKE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIFNOSSEpCisKK0NoYW5nZXMKKyAgICogQWJpbGl0eSB0byBlbmFibGUgLyBkaXNhYmxlIFNTTCB2MyAvIFRMUyAxLjAgLyBUTFMgMS4xIC8gVExTIDEuMgorICAgICBpbmRpdmlkdWFsbHkKKyAgICogSW50cm9kdWNlZCBzZXBhcmF0ZSBTU0wgQ2lwaGVyc3VpdGVzIG1vZHVsZSB0aGF0IGlzIGJhc2VkIG9uCisgICAgIENpcGhlciBhbmQgTUQgaW5mb3JtYXRpb24KKyAgICogSW50ZXJuYWxzIGZvciBTU0wgbW9kdWxlIGFkYXB0ZWQgdG8gaGF2ZSBzZXBhcmF0ZSBJViBwb2ludGVyIHRoYXQgaXMKKyAgICAgZHluYW1pY2FsbHkgc2V0IChCZXR0ZXIgc3VwcG9ydCBmb3IgaGFyZHdhcmUgYWNjZWxlcmF0aW9uKQorICAgKiBNb3ZlZCBhbGwgT0lEIGZ1bmN0aW9uYWxpdHkgdG8gYSBzZXBhcmF0ZSBtb2R1bGUuIFJTQSBmdW5jdGlvbgorICAgICBwcm90b3R5cGVzIGZvciB0aGUgUlNBIHNpZ24gYW5kIHZlcmlmeSBmdW5jdGlvbnMgY2hhbmdlZCBhcyBhIHJlc3VsdAorICAgKiBTcGxpdCB1cCB0aGUgR0NNIG1vZHVsZSBpbnRvIGEgc3RhcnRzL3VwZGF0ZS9maW5pc2ggY3ljbGUKKyAgICogQ2xpZW50IGFuZCBzZXJ2ZXIgbm93IGZpbHRlciBzZW50IGFuZCBhY2NlcHRlZCBjaXBoZXJzdWl0ZXMgb24gbWluaW11bQorICAgICBhbmQgbWF4aW11bSBwcm90b2NvbCB2ZXJzaW9uCisgICAqIEFiaWxpdHkgdG8gZGlzYWJsZSBzZXJ2ZXJfbmFtZSBleHRlbnNpb24gKFJGQyA2MDY2KQorICAgKiBSZW5hbWVkIGVycm9yX3N0cmVycm9yKCkgdG8gdGhlIGxlc3MgY29uZmxpY3RpbmcgcG9sYXJzc2xfc3RyZXJyb3IoKQorICAgICAoQWJpbGl0eSB0byBrZWVwIG9sZCBhcyB3ZWxsIHdpdGggUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfQkMpCisgICAqIFNIQTIgcmVuYW1lZCB0byBTSEEyNTYsIFNIQTQgcmVuYW1lZCB0byBTSEE1MTIgYW5kIGZ1bmN0aW9ucyBhY2NvcmRpbmdseQorICAgKiBBbGwgUlNBIG9wZXJhdGlvbnMgcmVxdWlyZSBhIHJhbmRvbSBnZW5lcmF0b3IgZm9yIGJsaW5kaW5nIHB1cnBvc2VzCisgICAqIFg1MDkgY29yZSByZWZhY3RvcmVkCisgICAqIHg1MDlfY3J0X3ZlcmlmeSgpIG5vdyBjYXNlIGluc2Vuc2l0aXZlIGZvciBjbiAoUkZDIDYxMjUgNi40KQorICAgKiBBbHNvIGNvbXBpbGVzIC8gcnVucyB3aXRob3V0IHRpbWUtYmFzZWQgZnVuY3Rpb25zICghUE9MQVJTU0xfSEFWRV9USU1FKQorICAgKiBTdXBwb3J0IGZhdWx0eSBYNTA5IHYxIGNlcnRpZmljYXRlcyB3aXRoIGV4dGVuc2lvbnMKKyAgICAgKFBPTEFSU1NMX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMpCisKK0J1Z2ZpeAorICAgKiBGaXhlZCBwYXJzZSBlcnJvciBpbiBzc2xfcGFyc2VfY2VydGlmaWNhdGVfcmVxdWVzdCgpCisgICAqIHpsaWIgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBza2lwcGVkIG9uIGVtcHR5IGJsb2NrcworICAgKiBTdXBwb3J0IGZvciBBSVggaGVhZGVyIGxvY2F0aW9ucyBpbiBuZXQuYyBtb2R1bGUKKyAgICogRml4ZWQgZmlsZSBkZXNjcmlwdG9yIGxlYWtzCisKK1NlY3VyaXR5CisgICAqIFJTQSBibGluZGluZyBvbiBDUlQgb3BlcmF0aW9ucyB0byBjb3VudGVyIHRpbWluZyBhdHRhY2tzCisgICAgIChmb3VuZCBieSBDeXJpbCBBcm5hdWQgYW5kIFBpZXJyZS1BbGFpbiBGb3VxdWUpCisKKworPSBWZXJzaW9uIDEuMi4xNCByZWxlYXNlZCAyMDE1LTA1LT8/CisKK1NlY3VyaXR5CisgICAqIEZpeCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgcmVhZCBpbiB0aGUgc2VydmVyLCB0aGF0IGFsbG93cyBhIGNsaWVudCB0bworICAgICBjcmFzaCBpdCByZW1vdGVseSAoZm91bmQgYnkgQ2FqIExhcnNzb24pLgorICAgKiBGaXggcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IHJlYWQgaW4gY2VydGlmaWNhdGUgcGFyc2luZywgdGhhdCBhbGxvd3MgYQorICAgICBjbGllbnQgdG8gY3Jhc2ggdGhlIHNlcnZlciByZW1vdGVseSBpZiBjbGllbnQgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZAorICAgICAoZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogQWRkIGNvdW50ZXJtZWFzdXJlIGFnYWluc3QgIkx1Y2t5IDEzIHN0cmlrZXMgYmFjayIgY2FjaGUtYmFzZWQgYXR0YWNrLAorICAgICBodHRwczovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTI3MTQ2MjUKKworQnVnZml4CisgICAqIEZpeCBidWcgaW4gVmlhIFBhZGxvY2sgc3VwcG9ydCAoZm91bmQgYnkgTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MpLgorICAgKiBGaXggaGFyZGNsb2NrKCkgKG9ubHkgdXNlZCBpbiB0aGUgYmVuY2htYXJraW5nIHByb2dyYW0pIHdpdGggc29tZQorICAgICB2ZXJzaW9ucyBvZiBtaW5ndzY0IChmb3VuZCBieSBreGpobGVsZSkuCisgICAqIEZpeCB3YXJuaW5ncyBmcm9tIG1pbmd3NjQgaW4gdGltaW5nLmMgKGZvdW5kIGJ5IGt4amtsZWxlKS4KKyAgICogRml4IHBvdGVudGlhbCB1bmludGVuZGVkIHNpZ24gZXh0ZW5zaW9uIGluIGFzbjFfZ2V0X2xlbigpIG9uIDY0LWJpdAorICAgICBwbGF0Zm9ybXMgKGZvdW5kIHdpdGggQ292ZXJpdHkgU2NhbikuCisKKz0gVmVyc2lvbiAxLjIuMTMgcmVsZWFzZWQgMjAxNS0wMi0xNgorTm90ZTogQWx0aG91Z2ggUG9sYXJTU0wgaGFzIGJlZW4gcmVuYW1lZCB0byBtYmVkIFRMUywgbm8gY2hhbmdlcyByZWZsZWN0aW5nCisgICAgICB0aGlzIHdpbGwgYmUgbWFkZSBpbiB0aGUgMS4yIGJyYW5jaCBhdCB0aGlzIHBvaW50LgorCitTZWN1cml0eQorICAgKiBGaXggcmVtb3RlbHktdHJpZ2dlcmFibGUgdW5pbml0aWFsaXNlZCBwb2ludGVyIGRlcmVmZXJlbmNlIGNhdXNlZCBieQorICAgICBjcmFmdGVkIFguNTA5IGNlcnRpZmljYXRlIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzaworICAgICBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MpLgorICAgKiBGaXggcmVtb3RlbHktdHJpZ2dlcmFibGUgbWVtb3J5IGxlYWsgY2F1c2VkIGJ5IGNyYWZ0ZWQgWC41MDkgY2VydGlmaWNhdGVzCisgICAgIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpCisgICAgIChmb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MpLgorICAgKiBGaXggcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHdoaWxlIHBhcnNpbmcgY3JhZnRlZCBYLjUwOSBjZXJ0aWZpY2F0ZXMKKyAgICAgKFRMUyBzZXJ2ZXIgaXMgbm90IGFmZmVjdGVkIGlmIGl0IGRvZXNuJ3QgYXNrIGZvciBhIGNsaWVudCBjZXJ0aWZpY2F0ZSkKKyAgICAgZm91bmQgdXNpbmcgQ29kZW5vbWljb24gRGVmZW5zaWNzKS4KKyAgICogRml4IGJ1ZmZlciBvdmVycmVhZCBvZiBzaXplIDEgd2hlbiBwYXJzaW5nIGNyYWZ0ZWQgWC41MDkgY2VydGlmaWNhdGVzCisgICAgIChUTFMgc2VydmVyIGlzIG5vdCBhZmZlY3RlZCBpZiBpdCBkb2Vzbid0IGFzayBmb3IgYSBjbGllbnQgY2VydGlmaWNhdGUpLgorCitCdWdmaXgKKyAgICogRml4IHBvdGVudGlhbCB1bmRlZmluZWQgYmVoYXZpb3VyIGluIENhbWVsbGlhLgorICAgKiBGaXggbWVtb3J5IGxlYWtzIGluIFBLQ1MjNSBhbmQgUEtDUyMxMi4KKyAgICogU3RhY2sgYnVmZmVyIG92ZXJmbG93IGlmIGN0cl9kcmJnX3VwZGF0ZSgpIGlzIGNhbGxlZCB3aXRoIHRvbyBsYXJnZQorICAgICBhZGRfbGVuIChmb3VuZCBieSBKZWFuLVBoaWxpcHBlIEF1bWFzc29uKSAobm90IHRyaWdnZXJhYmxlIHJlbW90ZWx5KS4KKyAgICogRml4IGJ1ZyBpbiBNUEkvYmlnbnVtIG9uIHMzOTAvczM5MHggKHJlcG9ydGVkIGJ5IERhbiBIb3LDoWspIChpbnRyb2R1Y2VkCisgICAgIGluIDEuMi4xMikuCisgICAqIEZpeCB1bmNoZWNrZWQgcmV0dXJuIGNvZGUgaW4geDUwOV9jcnRfcGFyc2VfcGF0aCgpIG9uIFdpbmRvd3MgKGZvdW5kIGJ5CisgICAgIFBldGVyIFZhc2tvdmljKS4KKyAgICogRml4IGFzc2VtYmx5IHNlbGVjdGlvbiBmb3IgTUlQUzY0ICh0aGFua3MgdG8gSmFtZXMgQ293Z2lsbCkuCisgICAqIHNzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIG5vdyB3b3JrcyBldmVuIGlmIHRoZSBoYW5kc2hha2Ugd2FzIGFib3J0ZWQgZHVlCisgICAgIHRvIGEgZmFpbGVkIHZlcmlmaWNhdGlvbiAoZm91bmQgYnkgRnJlZHJpayBBeGVsc3NvbikuCisgICAqIFNraXAgd3JpdGluZyBhbmQgcGFyc2luZyBzaWduYXR1cmVfYWxnb3JpdGhtIGV4dGVuc2lvbiBpZiBub25lIG9mIHRoZQorICAgICBrZXkgZXhjaGFuZ2VzIGVuYWJsZWQgbmVlZHMgY2VydGlmaWNhdGVzLiBUaGlzIGZpeGVzIGEgcG9zc2libGUgaW50ZXJvcAorICAgICBpc3N1ZSB3aXRoIHNvbWUgc2VydmVycyB3aGVuIGEgemVyby1sZW5ndGggZXh0ZW5zaW9uIHdhcyBzZW50LiAoUmVwb3J0ZWQKKyAgICAgYnkgUGV0ZXIgRGV0dG1hbi4pCisgICAqIE9uIGEgMC1sZW5ndGggaW5wdXQsIGJhc2U2NF9lbmNvZGUoKSBkaWQgbm90IGNvcnJlY3RseSBzZXQgb3V0cHV0IGxlbmd0aAorICAgICAoZm91bmQgYnkgSGVuZHJpayB2YW4gZGVuIEJvb2dhYXJkKS4KKworQ2hhbmdlcworICAgKiBCbGluZCBSU0EgcHJpdmF0ZSBvcGVyYXRpb25zIGV2ZW4gd2hlbiBQT0xBUlNTTF9SU0FfTk9fQ1JUIGlzIGRlZmluZWQuCisgICAqIEZvcmJpZCByZXBlYXRlZCBleHRlbnNpb25zIGluIFguNTA5IGNlcnRpZmljYXRlcy4KKyAgICogQWRkIGNvbXBpbGUtdGltZSBvcHRpb24gUE9MQVJTU0xfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBIHRvIGxpbWl0IHRoZQorICAgICBsZW5ndGggb2YgYW4gWC41MDkgdmVyaWZpY2F0aW9uIGNoYWluIChkZWZhdWx0ID0gOCkuCis9IFZlcnNpb24gMS4yLjEyIHJlbGVhc2VkIDIwMTQtMTAtMjQKKworU2VjdXJpdHkKKyAgICogUmVtb3RlbHktdHJpZ2dlcmFibGUgbWVtb3J5IGxlYWsgd2hlbiBwYXJzaW5nIHNvbWUgWC41MDkgY2VydGlmaWNhdGVzCisgICAgIChzZXJ2ZXIgaXMgbm90IGFmZmVjdGVkIGlmIGl0IGRvZXNuJ3QgYXNrIGZvciBhIGNsaWVudCBjZXJ0aWZpY2F0ZSkuCisgICAgIChGb3VuZCB1c2luZyBDb2Rlbm9taWNvbiBEZWZlbnNpY3MuKQorCitCdWdmaXgKKyAgICogRml4IHBvdGVudGlhbCBiYWQgcmVhZCBpbiBwYXJzaW5nIFNlcnZlckhlbGxvIChmb3VuZCBieSBBZHJpZW4KKyAgICAgVmlhbGxldGVsbGUpLgorICAgKiBzc2xfY2xvc2Vfbm90aWZ5KCkgY291bGQgc2VuZCBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgaW4gc29tZSBjaXJjdW1zdGFuY2VzCisgICAgIHdpdGggbm9uLWJsb2NraW5nIEkvTy4KKyAgICogeDUwOV9jcnRfcGFyc2UoKSBkaWQgbm90IGluY3JlYXNlIHRvdGFsX2ZhaWxlZCBvbiBQRU0gZXJyb3IKKyAgICogRml4IGNvbXBpbGVyIHdhcm5pbmdzIG9uIGlPUyAoZm91bmQgYnkgU2FuZGVyIE5pZW1laWplcikuCisgICAqIERvbid0IHByaW50IHVuaW5pdGlhbGlzZWQgYnVmZmVyIGluIHNzbF9tYWlsX2NsaWVudCAoZm91bmQgYnkgTWFyYyBBYmVsKS4KKyAgICogRml4IG5ldF9hY2NlcHQoKSByZWdhcmRpbmcgbm9uLWJsb2NraW5nIHNvY2tldHMgKGZvdW5kIGJ5IEx1Y2EgUGVzY2UpLgorICAgKiBzc2xfcmVhZCgpIGNvdWxkIHJldHVybiBub24tYXBwbGljYXRpb24gZGF0YSByZWNvcmRzIG9uIHNlcnZlciB3aGlsZQorICAgICByZW5lZ290YXRpb24gd2FzIHBlbmRpbmcsIGFuZCBvbiBjbGllbnQgd2hlbiBhIEhlbGxvUmVxdWVzdCB3YXMgcmVjZWl2ZWQuCisgICAqIEZpeCB3YXJuaW5ncyBmcm9tIENsYW5nJ3Mgc2Nhbi1idWlsZCAoY29udHJpYnV0ZWQgYnkgQWxmcmVkIEtsb21wKS4KKworQ2hhbmdlcworICAgKiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBtb3JlIHRoYW4gb25lIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZSBwZXIKKyAgICAgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSBhcmUgbm90IGFjY2VwdGVkIGFueSBtb3JlLgorICAgKiBzc2xfcmVhZCgpIG5vdyByZXR1cm5zIFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEIHJhdGhlciB0aGFuCisgICAgIFBPTEFSU1NMX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFIG9uIGhhcm1sZXNzIGFsZXJ0cy4KKyAgICogQWNjZXB0IHNwYWNlcyBhdCBlbmQgb2YgbGluZSBvciBlbmQgb2YgYnVmZmVyIGluIGJhc2U2NF9kZWNvZGUoKS4KKworPSBWZXJzaW9uIDEuMi4xMSByZWxlYXNlZCAyMDE0LTA3LTExCitGZWF0dXJlcworICAgKiBFbnRyb3B5IG1vZHVsZSBub3cgc3VwcG9ydHMgc2VlZCB3cml0aW5nIGFuZCByZWFkaW5nCisKK0NoYW5nZXMKKyAgICogSW50cm9kdWNlZCBQT0xBUlNTTF9IQVZFX1JFQURESVJfUiBmb3Igc3lzdGVtcyB3aXRob3V0IGl0CisgICAqIEltcHJvdmVtZW50cyB0byB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtLCBjb250cmlidXRlZCBieSBKdWxpYW4gT3NwYWxkLgorICAgKiBXb3JrIGFyb3VuZCBhIGJ1ZyBvZiB0aGUgdmVyc2lvbiBvZiBDbGFuZyBzaGlwcGVkIGJ5IEFwcGxlIHdpdGggTWF2ZXJpY2tzCisgICAgIHRoYXQgcHJldmVudGVkIGJpZ251bS5jIGZyb20gY29tcGlsaW5nLiAoUmVwb3J0ZWQgYnkgUmFmYWVsIEJhcHRpc3RhLikKKyAgICogSW1wcm92ZW1lbnRzIHRvIHRlc3RzL01ha2VmaWxlLCBjb250cmlidXRlZCBieSBPZGVuIEVyaWtzc29uLgorICAgKiBVc2UgVVRDIHRpbWUgdG8gY2hlY2sgY2VydGlmaWNhdGUgdmFsaWRpdHkuCisgICAqIFJlamVjdCBjZXJ0aWZpY2F0ZXMgd2l0aCB0aW1lcyBub3QgaW4gVVRDLCBwZXIgUkZDIDUyODAuCisgICAqIE1pZ3JhdGUgemVyb2l6aW5nIG9mIGRhdGEgdG8gcG9sYXJzc2xfemVyb2l6ZSgpIGluc3RlYWQgb2YgbWVtc2V0KCkKKyAgICAgYWdhaW5zdCB1bndhbnRlZCBjb21waWxlciBvcHRpbWl6YXRpb25zCisKK1NlY3VyaXR5CisgICAqIEZvcmJpZCBjaGFuZ2Ugb2Ygc2VydmVyIGNlcnRpZmljYXRlIGR1cmluZyByZW5lZ290aWF0aW9uIHRvIHByZXZlbnQKKyAgICAgInRyaXBsZSBoYW5kc2hha2UiIGF0dGFjayB3aGVuIGF1dGhlbnRpY2F0aW9uIG1vZGUgaXMgb3B0aW9uYWwgKHRoZQorICAgICBhdHRhY2sgd2FzIGFscmVhZHkgaW1wb3NzaWJsZSB3aGVuIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkKS4KKyAgICogQ2hlY2sgbm90QmVmb3JlIHRpbWVzdGFtcCBvZiBjZXJ0aWZpY2F0ZXMgYW5kIENSTHMgZnJvbSB0aGUgZnV0dXJlLgorICAgKiBGb3JiaWQgc2VxdWVuY2UgbnVtYmVyIHdyYXBwaW5nCisgICAqIFByZXZlbnQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzc2xfcmVhZF9yZWNvcmQoKSAoZm91bmQgYnkKKyAgICAgVHJ1c3RJblNvZnQpCisgICAqIEZpeCBsZW5ndGggY2hlY2tpbmcgZm9yIEFFQUQgY2lwaGVyc3VpdGVzIChmb3VuZCBieSBDb2Rlbm9taWNvbikuCisgICAgIEl0IHdhcyBwb3NzaWJsZSB0byBjcmFzaCB0aGUgc2VydmVyIChhbmQgY2xpZW50KSB1c2luZyBjcmFmdGVkIG1lc3NhZ2VzCisgICAgIHdoZW4gYSBHQ00gc3VpdGUgd2FzIGNob3Nlbi4KKworQnVnZml4CisgICAqIEZpeGVkIFguNTA5IGhvc3RuYW1lIGNvbXBhcmlzb24gKHdpdGggbm9uLXJlZ3VsYXIgY2hhcmFjdGVycykKKyAgICogU1NMIG5vdyBncmFjZWZ1bGx5IGhhbmRsZXMgbWlzc2luZyBSTkcKKyAgICogY3J5cHRfYW5kX2hhc2ggYXBwIGNoZWNrcyBNQUMgYmVmb3JlIGZpbmFsIGRlY3J5cHRpb24KKyAgICogRml4ZWQgeDUwOV9jcnRfcGFyc2VfcGF0aCgpIGJ1ZyBvbiBXaW5kb3dzIHBsYXRmb3JtcworICAgKiBBZGRlZCBtaXNzaW5nIE1QSV9DSEsoKSBhcm91bmQgc29tZSBzdGF0ZW1lbnRzIGluIG1waV9kaXZfbXBpKCkgKGZvdW5kIGJ5CisgICAgIFRydXN0SW5Tb2Z0KQorICAgKiBGaXhlZCBwb3RlbnRpYWwgb3ZlcmZsb3cgaW4gY2VydGlmaWNhdGUgc2l6ZSB2ZXJpZmljYXRpb24gaW4KKyAgICAgc3NsX3dyaXRlX2NlcnRpZmljYXRlKCkgKGZvdW5kIGJ5IFRydXN0SW5Tb2Z0KQorICAgKiBGaXggQVNNIGZvcm1hdCBpbiBibl9tdWwuaAorICAgKiBQb3RlbnRpYWwgbWVtb3J5IGxlYWsgaW4gYmlnbnVtX3NlbGZ0ZXN0KCkKKyAgICogUmVwbGFjZWQgZXhwaXJlZCB0ZXN0IGNlcnRpZmljYXRlCisgICAqIHNzbF9tYWlsX2NsaWVudCBub3cgdGVybWluYXRlcyBsaW5lcyB3aXRoIENSTEYsIGluc3RlYWQgb2YgTEYKKyAgICogRml4IGJ1ZyBpbiBSU0EgUEtDUyMxIHYxLjUgInJldmVyc2VkIiBvcGVyYXRpb25zCisgICAqIEZpeGVkIHRlc3Rpbmcgd2l0aCBvdXQtb2Ytc291cmNlIGJ1aWxkcyB1c2luZyBjbWFrZQorICAgKiBGaXhlZCB2ZXJzaW9uLW1ham9yIGludG9sZXJhbmNlIGluIHNlcnZlcgorICAgKiBGaXhlZCBDTWFrZSBzeW1saW5raW5nIG9uIG91dC1vZi1zb3VyY2UgYnVpbGRzCisgICAqIEJpZ251bSdzIE1JUFMtMzIgYXNzZW1ibHkgd2FzIHVzZWQgb24gTUlQUy02NCwgY2F1c2luZyBjaGFvcy4gKEZvdW5kIGJ5CisgICAgIEFsZXggV2lsc29uLikKKyAgICogc3NsX2luaXQoKSB3YXMgbGVhdmluZyBhIGRpcnR5IHBvaW50ZXIgaW4gc3NsX2NvbnRleHQgaWYgbWFsbG9jIG9mCisgICAgIG91dF9jdHIgZmFpbGVkCisgICAqIHNzbF9oYW5kc2hha2VfaW5pdCgpIHdhcyBsZWF2aW5nIGRpcnR5IHBvaW50ZXJzIGluIHN1YmNvbnRleHRzIGlmIG1hbGxvYworICAgICBvZiBvbmUgb2YgdGhlbSBmYWlsZWQKKyAgICogeDUwOV9nZXRfY3VycmVudF90aW1lKCkgdXNlcyBsb2NhbHRpbWVfcigpIHRvIHByZXZlbnQgdGhyZWFkIGlzc3VlcworICAgKiBTb21lIGV4YW1wbGUgc2VydmVyIHByb2dyYW1zIHdlcmUgbm90IHNlbmRpbmcgdGhlIGNsb3NlX25vdGlmeSBhbGVydC4KKyAgICogUG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIG1waV9leHBfbW9kKCkgd2hlbiBlcnJvciBvY2N1cnMgZHVyaW5nCisgICAgIGNhbGN1bGF0aW9uIG9mIFJSLgorICAgKiBJbXByb3ZlIGludGVyb3BlcmFiaWxpdHkgYnkgbm90IHdyaXRpbmcgZXh0ZW5zaW9uIGxlbmd0aCBpbiBDbGllbnRIZWxsbworICAgICB3aGVuIG5vIGV4dGVuc2lvbnMgYXJlIHByZXNlbnQgKGZvdW5kIGJ5IE1hdHRoZXcgUGFnZSkKKyAgICogcnNhX2NoZWNrX3B1YmtleSgpIG5vdyBhbGxvd3MgYW4gRSB1cCB0byBOCisgICAqIE9uIE9wZW5CU0QsIHVzZSBhcmM0cmFuZG9tX2J1ZigpIGluc3RlYWQgb2YgcmFuZCgpIHRvIHByZXZlbnQgd2FybmluZ3MKKyAgICogbXBpX2ZpbGxfcmFuZG9tKCkgd2FzIGNyZWF0aW5nIG51bWJlcnMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkIG9uCisgICAgIGJpZy1lbmRpYW4gcGxhdGZvcm0gd2hlbiBzaXplIHdhcyBub3QgYW4gaW50ZWdlciBudW1iZXIgb2YgbGltYnMKKyAgICogRml4IGRldGVjdGlvbiBvZiBEcmFnb25mbHlCU0QgaW4gbmV0LmMgKGZvdW5kIGJ5IE1hcmt1cyBQZmVpZmZlcikKKyAgICogU3RyaWN0ZXIgY2hlY2sgb24gU1NMIENsaWVudEhlbGxvIGludGVybmFsIHNpemVzIGNvbXBhcmVkIHRvIGFjdHVhbCBwYWNrZXQKKyAgICAgc2l6ZSAoZm91bmQgYnkgVHJ1c3RJblNvZnQpCisgICAqIEZpeCBwcmVwcm9jZXNzb3IgY2hlY2tzIGZvciBibl9tdWwgUFBDIGFzbSAoZm91bmQgYnkgQmFycnkgSy4gTmF0aGFuKS4KKyAgICogVXNlIFxuXHQgcmF0aGVyIHRoYW4gc2VtaWNvbG9ucyBmb3IgYm5fbXVsIGFzbSwgc2luY2Ugc29tZSBhc3NlbWJsZXJzCisgICAgIGludGVycHJldCBzZW1pY29sb25zIGFzIGNvbW1lbnQgZGVsaW1pdGVycyAoZm91bmQgYnkgQmFycnkgSy4gTmF0aGFuKS4KKyAgICogRGlzYWJsZSBicm9rZW4gU3BhcmM2NCBibl9tdWwgYXNzZW1ibHkgKGZvdW5kIGJ5IEZsb3JpYW4gT2JzZXIpLgorICAgKiBGaXggYmFzZTY0X2RlY29kZSgpIHRvIHJldHVybiBhbmQgY2hlY2sgbGVuZ3RoIGNvcnJlY3RseSAoaW4gY2FzZSBvZgorICAgICB0aWdodCBidWZmZXJzKQorCis9IFZlcnNpb24gMS4yLjEwIHJlbGVhc2VkIDIwMTMtMTAtMDcKK0NoYW5nZXMKKyAgICogQ2hhbmdlZCBSU0EgYmxpbmRpbmcgdG8gYSBzbG93ZXIgYnV0IHRocmVhZC1zYWZlIHZlcnNpb24KKworQnVnZml4CisgICAqIEZpeGVkIG1lbW9yeSBsZWFrIGluIFJTQSBhcyBhIHJlc3VsdCBvZiBpbnRyb2R1Y3Rpb24gb2YgYmxpbmRpbmcKKyAgICogRml4ZWQgc3NsX3BrY3MxMV9kZWNyeXB0KCkgcHJvdG90eXBlCisgICAqIEZpeGVkIE1TVkMgcHJvamVjdCBmaWxlcworCis9IFZlcnNpb24gMS4yLjkgcmVsZWFzZWQgMjAxMy0xMC0wMQorQ2hhbmdlcworICAgKiB4NTA5X3ZlcmlmeSgpIG5vdyBjYXNlIGluc2Vuc2l0aXZlIGZvciBjbiAoUkZDIDYxMjUgNi40KQorCitCdWdmaXgKKyAgICogRml4ZWQgcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gZmFpbGluZyB0byByZXN1bWUgYSBzZXNzaW9uCisgICAqIEZpeGVkIHBvdGVudGlhbCBmaWxlIGRlc2NyaXB0b3IgbGVha3MgKGZvdW5kIGJ5IFJlbWkgR2Fjb2duZSkKKyAgICogTWlub3IgZml4ZXMKKworU2VjdXJpdHkKKyAgICogRml4ZWQgcG90ZW50aWFsIGhlYXAgYnVmZmVyIG92ZXJmbG93IG9uIGxhcmdlIGhvc3RuYW1lIHNldHRpbmcKKyAgICogRml4ZWQgcG90ZW50aWFsIG5lZ2F0aXZlIHZhbHVlIG1pc2ludGVycHJldGF0aW9uIGluIGxvYWRfZmlsZSgpCisgICAqIFJTQSBibGluZGluZyBvbiBDUlQgb3BlcmF0aW9ucyB0byBjb3VudGVyIHRpbWluZyBhdHRhY2tzCisgICAgIChmb3VuZCBieSBDeXJpbCBBcm5hdWQgYW5kIFBpZXJyZS1BbGFpbiBGb3VxdWUpCisKKz0gVmVyc2lvbiAxLjIuOCByZWxlYXNlZCAyMDEzLTA2LTE5CitGZWF0dXJlcworICAgKiBQYXJzaW5nIG9mIFBLQ1MjOCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXkgZmlsZXMKKyAgICogUEtDUyMxMiBQQkUgYW5kIGRlcml2YXRpb24gZnVuY3Rpb25zCisgICAqIENlbnRyYWxpemVkIG1vZHVsZSBvcHRpb24gdmFsdWVzIGluIGNvbmZpZy5oIHRvIGFsbG93IHVzZXItZGVmaW5lZAorICAgICBzZXR0aW5ncyB3aXRob3V0IGVkaXRpbmcgaGVhZGVyIGZpbGVzIGJ5IHVzaW5nIFBPTEFSU1NMX0NPTkZJR19PUFRJT05TCisKK0NoYW5nZXMKKyAgICogSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IgZGlzYWJsZWQgYnkgZGVmYXVsdAorICAgKiBJbnRlcm5hbGx5IHNwbGl0IHVwIHg1MDlwYXJzZV9rZXkoKSBpbnRvIGEgKFBFTSkgaGFuZGxlciBmdW5jdGlvbgorICAgICBhbmQgc3BlY2lmaWMgREVSIHBhcnNlciBmdW5jdGlvbnMgZm9yIHRoZSBQS0NTIzEgYW5kIHVuZW5jcnlwdGVkCisgICAgIFBLQ1MjOCBwcml2YXRlIGtleSBmb3JtYXRzCisgICAqIEFkZGVkIG1lY2hhbmlzbSB0byBwcm92aWRlIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBmb3IgYWxsCisgICAgIHN5bW1ldHJpYyBjaXBoZXIgYW5kIGhhc2ggYWxnb3JpdGhtcyAoZS5nLiBQT0xBUlNTTF9BRVNfQUxUIGluCisJIGNvbmZpZy5oKQorICAgKiBQS0NTIzUgbW9kdWxlIGFkZGVkLiBNb3ZlZCBQQktERjIgZnVuY3Rpb25hbGl0eSBpbnNpZGUgYW5kIGRlcHJlY2F0ZWQKKyAgICAgb2xkIFBCS0RGMiBtb2R1bGUKKworQnVnZml4CisgICAqIFNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiBzaG91bGQgb25seSBiZSBzZW50IGluIGNhc2UgY2xpZW50CisgICAgIHN1cHBvcnRzIHNlY3VyZSByZW5lZ290aWF0aW9uCisgICAqIEZpeGVkIG9mZnNldCBmb3IgY2VydF90eXBlIGxpc3QgaW4gc3NsX3BhcnNlX2NlcnRpZmljYXRlX3JlcXVlc3QoKQorICAgKiBGaXhlZCBjb25zdCBjb3JyZWN0bmVzcyBpc3N1ZXMgdGhhdCBoYXZlIG5vIGltcGFjdCBvbiB0aGUgQUJJCisgICAqIHg1MDlwYXJzZV9jcnQoKSBub3cgYmV0dGVyIGhhbmRsZXMgUEVNIGVycm9yIHNpdHVhdGlvbnMKKyAgICogc3NsX3BhcnNlX2NlcnRpZmljYXRlKCkgbm93IGNhbGxzIHg1MDlwYXJzZV9jcnRfZGVyKCkgZGlyZWN0bHkKKyAgICAgaW5zdGVhZCBvZiB0aGUgeDUwOXBhcnNlX2NydCgpIHdyYXBwZXIgdGhhdCBjYW4gYWxzbyBwYXJzZSBQRU0KKwkgY2VydGlmaWNhdGVzCisgICAqIHg1MDlwYXJzZV9jcnRwYXRoKCkgaXMgbm93IHJlZW50cmFudCBhbmQgdXNlcyBtb3JlIHBvcnRhYmxlIHN0YXQoKQorICAgKiBGaXhlZCBiaWdudW0uYyBhbmQgYm5fbXVsLmggdG8gc3VwcG9ydCBUaHVtYjIgYW5kIExMVk0gY29tcGlsZXIKKyAgICogRml4ZWQgdmFsdWVzIGZvciAyLWtleSBUcmlwbGUgREVTIGluIGNpcGhlciBsYXllcgorICAgKiBzc2xfd3JpdGVfY2VydGlmaWNhdGVfcmVxdWVzdCgpIGNhbiBoYW5kbGUgZW1wdHkgY2FfY2hhaW4KKworU2VjdXJpdHkKKyAgICogQSBwb3NzaWJsZSBEb1MgZHVyaW5nIHRoZSBTU0wgSGFuZHNoYWtlLCBkdWUgdG8gZmF1bHR5IHBhcnNpbmcgb2YKKyAgICAgUEVNLWVuY29kZWQgY2VydGlmaWNhdGVzIGhhcyBiZWVuIGZpeGVkIChmb3VuZCBieSBKYWNrIExsb3lkKQorCis9IFZlcnNpb24gMS4yLjcgcmVsZWFzZWQgMjAxMy0wNC0xMworRmVhdHVyZXMKKyAgICogQWJpbGl0eSB0byBzcGVjaWZ5IGFsbG93ZWQgY2lwaGVyc3VpdGVzIGJhc2VkIG9uIHRoZSBwcm90b2NvbCB2ZXJzaW9uLgorCitDaGFuZ2VzCisgICAqIERlZmF1bHQgQmxvd2Zpc2gga2V5c2l6ZSBpcyBub3cgMTI4LWJpdHMKKyAgICogVGVzdCBzdWl0ZXMgbWFkZSBzbWFsbGVyIHRvIGFjY29tbW9kYXRlIFJhc3BiZXJyeSBQaQorCitCdWdmaXgKKyAgICogRml4IGZvciBNUEkgYXNzZW1ibHkgZm9yIEFSTQorICAgKiBHQ00gYWRhcHRlZCB0byBzdXBwb3J0IHNpemVzID4gMl4yOQorCis9IFZlcnNpb24gMS4yLjYgcmVsZWFzZWQgMjAxMy0wMy0xMQorQnVnZml4CisgICAqIEZpeGVkIG1lbW9yeSBsZWFrIGluIHNzbF9mcmVlKCkgYW5kIHNzbF9yZXNldCgpIGZvciBhY3RpdmUgc2Vzc2lvbgorICAgKiBDb3JyZWN0ZWQgR0NNIGNvdW50ZXIgaW5jcmVtZW50YXRpb24gdG8gdXNlIG9ubHkgMzItYml0cyBpbnN0ZWFkIG9mCisgICAgIDEyOC1iaXRzIChmb3VuZCBieSBZYXduaW5nIEFuZ2VsKQorICAgKiBGaXhlcyBmb3IgNjQtYml0IGNvbXBpbGF0aW9uIHdpdGggTVMgVmlzdWFsIFN0dWRpbworICAgKiBGaXhlZCBuZXRfYmluZCgpIGZvciBzcGVjaWZpZWQgSVAgYWRkcmVzc2VzIG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcworICAgKiBGaXhlZCBhc3NlbWJseSBjb2RlIGZvciBBUk0gKFRodW1iIGFuZCByZWd1bGFyKSBmb3Igc29tZSBjb21waWxlcnMKKworQ2hhbmdlcworICAgKiBJbnRlcm5hbGx5IHNwbGl0IHVwIHJzYV9wa2NzMV9lbmNyeXB0KCksIHJzYV9wa2NzMV9kZWNyeXB0KCksCisgICAgIHJzYV9wa2NzMV9zaWduKCkgYW5kIHJzYV9wa2NzMV92ZXJpZnkoKSB0byBzZXBhcmF0ZSBQS0NTIzEgdjEuNSBhbmQKKyAgICAgUEtDUyMxIHYyLjEgZnVuY3Rpb25zCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBsYWJlbHMgd2hlbiB1c2luZyByc2FfcnNhZXNfb2FlcF9lbmNyeXB0KCkKKyAgICAgb3IgcnNhX3JzYWVzX29hZXBfZGVjcnlwdCgpCisgICAqIFJlLWFkZGVkIGhhbmRsaW5nIGZvciBTU0x2MiBDbGllbnQgSGVsbG8gd2hlbiB0aGUgZGVmaW5lCisgICAgIFBPTEFSU1NMX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8gaXMgc2V0CisgICAqIFRoZSBTU0wgc2Vzc2lvbiBjYWNoZSBtb2R1bGUgKHNzbF9jYWNoZSkgbm93IGFsc28gcmV0YWlucyBwZWVyX2NlcnQKKyAgICAgaW5mb3JtYXRpb24gKG5vdCB0aGUgZW50aXJlIGNoYWluKQorCitTZWN1cml0eQorICAgKiBSZW1vdmVkIGZ1cnRoZXIgdGltaW5nIGRpZmZlcmVuY2VzIGR1cmluZyBTU0wgbWVzc2FnZSBkZWNyeXB0aW9uIGluCisgICAgIHNzbF9kZWNyeXB0X2J1ZigpCisgICAqIFJlbW92ZWQgdGltaW5nIGRpZmZlcmVuY2VzIGR1ZSB0byBiYWQgcGFkZGluZyBmcm9tCisgICAgIHJzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdCgpIGFuZCByc2FfcGtjczFfZGVjcnlwdCgpIGZvciBQS0NTIzEgdjEuNQorICAgICBvcGVyYXRpb25zCisKKz0gVmVyc2lvbiAxLjIuNSByZWxlYXNlZCAyMDEzLTAyLTAyCitDaGFuZ2VzCisgICAqIEFsbG93IGVuYWJsaW5nIG9mIGR1bW15IGVycm9yX3N0cmVycm9yKCkgdG8gc3VwcG9ydCBzb21lIHVzZS1jYXNlcworICAgKiBEZWJ1ZyBtZXNzYWdlcyBhYm91dCBwYWRkaW5nIGVycm9ycyBkdXJpbmcgU1NMIG1lc3NhZ2UgZGVjcnlwdGlvbiBhcmUKKyAgICAgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgY2FuIGJlIGVuYWJsZWQgd2l0aCBQT0xBUlNTTF9TU0xfREVCVUdfQUxMIAorICAgKiBTZW5kaW5nIG9mIHNlY3VyaXR5LXJlbGV2YW50IGFsZXJ0IG1lc3NhZ2VzIHRoYXQgZG8gbm90IGJyZWFrCisgICAgIGludGVyb3BlcmFiaWxpdHkgY2FuIGJlIHN3aXRjaGVkIG9uL29mZiB3aXRoIHRoZSBmbGFnCisgICAgIFBPTEFSU1NMX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMKKworU2VjdXJpdHkKKyAgICogUmVtb3ZlZCB0aW1pbmcgZGlmZmVyZW5jZXMgZHVyaW5nIFNTTCBtZXNzYWdlIGRlY3J5cHRpb24gaW4KKyAgICAgc3NsX2RlY3J5cHRfYnVmKCkgZHVlIHRvIGJhZGx5IGZvcm1hdHRlZCBwYWRkaW5nCisKKz0gVmVyc2lvbiAxLjIuNCByZWxlYXNlZCAyMDEzLTAxLTI1CitDaGFuZ2VzCisgICAqIE1vcmUgYWR2YW5jZWQgU1NMIGNpcGhlcnN1aXRlIHJlcHJlc2VudGF0aW9uIGFuZCBtb3ZlZCB0byBtb3JlIGR5bmFtaWMKKyAgICAgU1NMIGNvcmUKKyAgICogQWRkZWQgc3NsX2hhbmRzaGFrZV9zdGVwKCkgdG8gYWxsb3cgc2luZ2xlIHN0ZXBwaW5nIHRoZSBoYW5kc2hha2UgcHJvY2VzcworCitCdWdmaXgKKyAgICogTWVtb3J5IGxlYWsgd2hlbiB1c2luZyBSU0FfUEtDU19WMjEgb3BlcmF0aW9ucyBmaXhlZAorICAgKiBIYW5kbGUgZnV0dXJlIHZlcnNpb24gcHJvcGVybHkgaW4gc3NsX3dyaXRlX2NlcnRpZmljYXRlX3JlcXVlc3QoKQorICAgKiBDb3JyZWN0bHkgaGFuZGxlIENlcnRpZmljYXRlUmVxdWVzdCBtZXNzYWdlIGluIGNsaWVudCBmb3IgPD0gVExTIDEuMQorICAgICB3aXRob3V0IEROIGxpc3QKKworPSBWZXJzaW9uIDEuMi4zIHJlbGVhc2VkIDIwMTItMTEtMjYKK0J1Z2ZpeAorICAgKiBTZXJ2ZXIgbm90IGFsd2F5cyBzZW5kaW5nIGNvcnJlY3QgQ2VydGlmaWNhdGVSZXF1ZXN0IG1lc3NhZ2UKKworPSBWZXJzaW9uIDEuMi4yIHJlbGVhc2VkIDIwMTItMTEtMjQKK0NoYW5nZXMKKyAgICogQWRkZWQgcF9od19kYXRhIHRvIHNzbF9jb250ZXh0IGZvciBjb250ZXh0IHNwZWNpZmljIGhhcmR3YXJlIGFjY2VsZXJhdGlvbgorICAgICBkYXRhCisgICAqIER1cmluZyB2ZXJpZnkgdHJ1c3QtQ0EgaXMgb25seSBjaGVja2VkIGZvciBleHBpcmF0aW9uIGFuZCBDUkwgcHJlc2VuY2UgIAorCitCdWdmaXhlcworICAgKiBGaXhlZCBjbGllbnQgYXV0aGVudGljYXRpb24gY29tcGF0aWJpbGl0eQorICAgKiBGaXhlZCBkZXBlbmRlbmN5IG9uIFBPTEFSU1NMX1NIQTRfQyBpbiBTU0wgbW9kdWxlcworCis9IFZlcnNpb24gMS4yLjEgcmVsZWFzZWQgMjAxMi0xMS0yMAorQ2hhbmdlcworICAgKiBEZXB0aCB0aGF0IHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkgY2FsbGJhY2sgcmVjZWl2ZXMgaXMgbm93IG51bWJlcmVkCisgICAgIGJvdHRvbS11cCAoUGVlciBjZXJ0IGRlcHRoIGlzIDApCisKK0J1Z2ZpeGVzCisgICAqIEZpeGVzIGZvciBNU1ZDNgorICAgKiBNb3ZlZCBtcGlfaW52X21vZCgpIG91dHNpZGUgUE9MQVJTU0xfR0VOUFJJTUUKKyAgICogQWxsb3cgUiBhbmQgQSB0byBwb2ludCB0byBzYW1lIG1waSBpbiBtcGlfZGl2X21waSAoZm91bmQgYnkgTWFudWVsCisgICAgIFDDqWdvdXJpw6ktR29ubmFyZCkKKyAgICogRml4ZWQgcG9zc2libGUgc2VnZmF1bHQgaW4gbXBpX3NoaWZ0X3IoKSAoZm91bmQgYnkgTWFudWVsCisgICAgIFDDqWdvdXJpw6ktR29ubmFyZCkKKyAgICogQWRkZWQgbWF4IGxlbmd0aCBjaGVjayBmb3IgcnNhX3BrY3MxX3NpZ24gd2l0aCBQS0NTIzEgdjIuMQorCis9IFZlcnNpb24gMS4yLjAgcmVsZWFzZWQgMjAxMi0xMC0zMQorRmVhdHVyZXMKKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgTlVMTCBjaXBoZXIgKFBPTEFSU1NMX0NJUEhFUl9OVUxMX0NJUEhFUikgYW5kIHdlYWsKKyAgICAgY2lwaGVyc3VpdGVzIChQT0xBUlNTTF9FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMpLiBUaGV5IGFyZSBkaXNhYmxlZCBieQorICAgICBkZWZhdWx0IQorICAgKiBBZGRlZCBzdXBwb3J0IGZvciB3aWxkY2FyZCBjZXJ0aWZpY2F0ZXMKKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGktZG9tYWluIGNlcnRpZmljYXRlcyB0aHJvdWdoIHRoZSBYNTA5IFN1YmplY3QKKyAgICAgQWx0ZXJuYXRpdmUgTmFtZSBleHRlbnNpb24KKyAgICogQWRkZWQgcHJlbGltaW5hcnkgQVNOLjEgYnVmZmVyIHdyaXRpbmcgc3VwcG9ydAorICAgKiBBZGRlZCBwcmVsaW1pbmFyeSBYNTA5IENlcnRpZmljYXRlIFJlcXVlc3Qgd3JpdGluZyBzdXBwb3J0CisgICAqIEFkZGVkIGtleV9hcHBfd3JpdGVyIGV4YW1wbGUgYXBwbGljYXRpb24KKyAgICogQWRkZWQgY2VydF9yZXEgZXhhbXBsZSBhcHBsaWNhdGlvbgorICAgKiBBZGRlZCBiYXNlIEdhbG9pcyBDb3VudGVyIE1vZGUgKEdDTSkgZm9yIEFFUworICAgKiBBZGRlZCBUTFMgMS4yIHN1cHBvcnQgKFJGQyA1MjQ2KQorICAgKiBBZGRlZCBHQ00gc3VpdGVzIHRvIFRMUyAxLjIgKFJGQyA1Mjg4KQorICAgKiBBZGRlZCBjb21tYW5kbGluZSBlcnJvciBjb2RlIGNvbnZlcnRvciAodXRpbC9zdHJlcnJvcikKKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgSGFyZHdhcmUgQWNjZWxlcmF0aW9uIGhvb2tpbmcgaW4gU1NML1RMUworICAgKiBBZGRlZCBPcGVuU1NMIC8gUG9sYXJTU0wgY29tcGF0aWJpbGl0eSBzY3JpcHQgKHRlc3RzL2NvbXBhdC5zaCkgYW5kCisgICAgIGV4YW1wbGUgYXBwbGljYXRpb24gKHByb2dyYW1zL3NzbC9vX3BfdGVzdCkgKHJlcXVpcmVzIE9wZW5TU0wpCisgICAqIEFkZGVkIFg1MDkgQ0EgUGF0aCBzdXBwb3J0CisgICAqIEFkZGVkIFRodW1iIGFzc2VtYmx5IG9wdGltaXphdGlvbnMKKyAgICogQWRkZWQgREVGTEFURSBjb21wcmVzc2lvbiBzdXBwb3J0IGFzIHBlciBSRkMzNzQ5IChyZXF1aXJlcyB6bGliKQorICAgKiBBZGRlZCBibG93ZmlzaCBhbGdvcml0aG0gKEdlbmVyaWMgYW5kIGNpcGhlciBsYXllcikKKyAgICogQWRkZWQgUEtDUyM1IFBCS0RGMiBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbgorICAgKiBBZGRlZCBTZWN1cmUgUmVuZWdvdGlhdGlvbiAoUkZDIDU3NDYpCisgICAqIEFkZGVkIHByZWRlZmluZWQgREhNIGdyb3VwcyBmcm9tIFJGQyA1MTE0CisgICAqIEFkZGVkIHNpbXBsZSBTU0wgc2Vzc2lvbiBjYWNoZSBpbXBsZW1lbnRhdGlvbgorICAgKiBBZGRlZCBTZXJ2ZXJOYW1lIGV4dGVuc2lvbiBwYXJzaW5nIChTTkkpIGF0IHNlcnZlciBzaWRlCisgICAqIEFkZGVkIG9wdGlvbiB0byBhZGQgbWluaW11bSBhY2NlcHRlZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24KKworQ2hhbmdlcworICAgKiBSZW1vdmVkIHJlZHVuZGFudCBQT0xBUlNTTF9ERUJVR19NU0cgZGVmaW5lCisgICAqIEFFUyBjb2RlIG9ubHkgY2hlY2sgZm9yIFBhZGxvY2sgb25jZQorICAgKiBGaXhlZCBjb25zdC1jb3JyZWN0bmVzcyBtcGlfZ2V0X2JpdCgpCisgICAqIERvY3VtZW50YXRpb24gZm9yIG1waV9sc2IoKSBhbmQgbXBpX21zYigpCisgICAqIE1vdmVkIG91dF9tc2cgdG8gb3V0X2hkciArIDMyIHRvIHN1cHBvcnQgaGFyZHdhcmUgYWNjZWxlcmF0aW9uCisgICAqIENoYW5nZWQgY2VydGlmaWNhdGUgdmVyaWZ5IGJlaGF2aW91ciB0byBjb21wbHkgd2l0aCBSRkMgNjEyNSBzZWN0aW9uIDYuMworICAgICB0byBub3QgbWF0Y2ggQ04gaWYgc3ViamVjdEFsdE5hbWUgZXh0ZW5zaW9uIGlzIHByZXNlbnQgKENsb3NlcyB0aWNrZXQgIzU2KQorICAgKiBDaXBoZXIgbGF5ZXIgY2lwaGVyX21vZGVfdCBQT0xBUlNTTF9NT0RFX0NGQjEyOCBpcyByZW5hbWVkIHRvCisgICAgIFBPTEFSU1NMX01PREVfQ0ZCLCB0byBhbHNvIGhhbmRsZSBkaWZmZXJlbnQgYmxvY2sgc2l6ZSBDRkIgbW9kZXMuCisgICAqIFJlbW92ZWQgaGFuZGxpbmcgZm9yIFNTTHYyIENsaWVudCBIZWxsbyAoYXMgcGVyIFJGQyA1MjQ2IHJlY29tbWVuZGF0aW9uKQorICAgKiBSZXZhbXBlZCBzZXNzaW9uIHJlc3VtcHRpb24gaGFuZGxpbmcKKyAgICogR2VuZXJhbGl6ZWQgZXh0ZXJuYWwgcHJpdmF0ZSBrZXkgaW1wbGVtZW50YXRpb24gaGFuZGxpbmcgKGxpa2UgUEtDUyMxMSkKKyAgICAgaW4gU1NML1RMUworICAgKiBSZXZhbXBlZCB4NTA5X3ZlcmlmeSgpIGFuZCB0aGUgU1NMIGZfdnJmeSBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbnMKKyAgICogTW92ZWQgZnJvbSB1bnNpZ25lZCBsb25nIHRvIGZpeGVkIHdpZHRoIHVpbnQzMl90IHR5cGVzIHRocm91Z2hvdXQgY29kZQorICAgKiBSZW5hbWVkIGNpcGhlcnN1aXRlcyBuYW1pbmcgc2NoZW1lIHRvIElBTkEgcmVzZXJ2ZWQgbmFtZXMKKworQnVnZml4CisgICAqIEZpeGVkIGhhbmRsaW5nIGVycm9yIGluIG1waV9jbXBfbXBpKCkgb24gbG9uZ2VyIEIgdmFsdWVzIChmb3VuZCBieQorICAgICBIdWkgRG9uZykKKyAgICogRml4ZWQgcG90ZW50aWFsIGhlYXAgY29ycnVwdGlvbiBpbiB4NTA5X25hbWUgYWxsb2NhdGlvbgorICAgKiBGaXhlZCBzaW5nbGUgUlNBIHRlc3QgdGhhdCBmYWlsZWQgb24gQmlnIEVuZGlhbiBzeXN0ZW1zIChDbG9zZXMgdGlja2V0ICM1NCkKKyAgICogbXBpX2V4cF9tb2QoKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgYmFzZSBudW1iZXJzIChDbG9zZXMgdGlja2V0CisgICAgICM1MikKKyAgICogSGFuZGxlIGVuY3J5cHRpb24gd2l0aCBwcml2YXRlIGtleSBhbmQgZGVjcnlwdGlvbiB3aXRoIHB1YmxpYyBrZXkgYXMgcGVyCisgICAJIFJGQyAyMzEzCisgICAqIEhhbmRsZSBlbXB0eSBjZXJ0aWZpY2F0ZSBzdWJqZWN0IG5hbWVzCisgICAqIFByZXZlbnQgcmVhZGluZyBvdmVyIGJ1ZmZlciBib3VuZGFyaWVzIG9uIFg1MDkgY2VydGlmaWNhdGUgcGFyc2luZworICAgKiBtcGlfYWRkX2FicygpIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBhZGRpbmcgc2hvcnQgbnVtYmVycyB0byBsb25nIG51bWJlcnMKKyAgICAgd2l0aCBjYXJyeSByb2xsb3ZlciAoZm91bmQgYnkgUnVzbGFuIFl1c2hjaGVua28pCisgICAqIEhhbmRsZSBleGlzdGVuY2Ugb2YgT3BlblNTTCBUcnVzdCBFeHRlbnNpb25zIGF0IGVuZCBvZiBYLjUwOSBERVIgYmxvYgorICAgKiBGaXhlZCBNUEkgYXNzZW1ibHkgZm9yIFNQQVJDNjQgcGxhdGZvcm0KKworU2VjdXJpdHkKKyAgICogRml4ZWQgcG90ZW50aWFsIG1lbW9yeSB6ZXJvaXphdGlvbiBvbiBtaXNjcmFmdGVkIFJTQSBrZXkgKGZvdW5kIGJ5IEVsb2kKKyAgICAgVmFuZGVyYmVrZW4pCisKKz0gVmVyc2lvbiAxLjEuOCByZWxlYXNlZCBvbiAyMDEzLTEwLTAxCitCdWdmaXgKKyAgICogRml4ZWQgcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gZmFpbGluZyB0byByZXN1bWUgYSBzZXNzaW9uCisgICAqIEZpeGVkIHBvdGVudGlhbCBmaWxlIGRlc2NyaXB0b3IgbGVha3MKKworU2VjdXJpdHkKKyAgICogUG90ZW50aWFsIGJ1ZmZlci1vdmVyZmxvdyBmb3Igc3NsX3JlYWRfcmVjb3JkKCkgKGluZGVwZW5kZW50bHkgZm91bmQgYnkKKyAgICAgYm90aCBUcnVzdEluU29mdCBhbmQgUGF1bCBCcm9kZXVyIG9mIExldmlhdGhhbiBTZWN1cml0eSBHcm91cCkKKyAgICogUG90ZW50aWFsIG5lZ2F0aXZlIHZhbHVlIG1pc2ludGVycHJldGF0aW9uIGluIGxvYWRfZmlsZSgpCisgICAqIFBvdGVudGlhbCBoZWFwIGJ1ZmZlciBvdmVyZmxvdyBvbiBsYXJnZSBob3N0bmFtZSBzZXR0aW5nCisKKz0gVmVyc2lvbiAxLjEuNyByZWxlYXNlZCBvbiAyMDEzLTA2LTE5CitDaGFuZ2VzCisgICAqIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQKKworQnVnZml4CisgICAqIHg1MDlwYXJzZV9jcnQoKSBub3cgYmV0dGVyIGhhbmRsZXMgUEVNIGVycm9yIHNpdHVhdGlvbnMKKyAgICogc3NsX3BhcnNlX2NlcnRpZmljYXRlKCkgbm93IGNhbGxzIHg1MDlwYXJzZV9jcnRfZGVyKCkgZGlyZWN0bHkKKyAgICAgaW5zdGVhZCBvZiB0aGUgeDUwOXBhcnNlX2NydCgpIHdyYXBwZXIgdGhhdCBjYW4gYWxzbyBwYXJzZSBQRU0KKwkgY2VydGlmaWNhdGVzCisgICAqIEZpeGVkIHZhbHVlcyBmb3IgMi1rZXkgVHJpcGxlIERFUyBpbiBjaXBoZXIgbGF5ZXIKKyAgICogc3NsX3dyaXRlX2NlcnRpZmljYXRlX3JlcXVlc3QoKSBjYW4gaGFuZGxlIGVtcHR5IGNhX2NoYWluCisKK1NlY3VyaXR5CisgICAqIEEgcG9zc2libGUgRG9TIGR1cmluZyB0aGUgU1NMIEhhbmRzaGFrZSwgZHVlIHRvIGZhdWx0eSBwYXJzaW5nIG9mCisgICAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBoYXMgYmVlbiBmaXhlZCAoZm91bmQgYnkgSmFjayBMbG95ZCkKKworPSBWZXJzaW9uIDEuMS42IHJlbGVhc2VkIG9uIDIwMTMtMDMtMTEKK0J1Z2ZpeAorICAgKiBGaXhlZCBuZXRfYmluZCgpIGZvciBzcGVjaWZpZWQgSVAgYWRkcmVzc2VzIG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcworCitDaGFuZ2VzCisgICAqIEFsbG93IGVuYWJsaW5nIG9mIGR1bW15IGVycm9yX3N0cmVycm9yKCkgdG8gc3VwcG9ydCBzb21lIHVzZS1jYXNlcworICAgKiBEZWJ1ZyBtZXNzYWdlcyBhYm91dCBwYWRkaW5nIGVycm9ycyBkdXJpbmcgU1NMIG1lc3NhZ2UgZGVjcnlwdGlvbiBhcmUKKyAgICAgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgY2FuIGJlIGVuYWJsZWQgd2l0aCBQT0xBUlNTTF9TU0xfREVCVUdfQUxMCisKK1NlY3VyaXR5CisgICAqIFJlbW92ZWQgdGltaW5nIGRpZmZlcmVuY2VzIGR1cmluZyBTU0wgbWVzc2FnZSBkZWNyeXB0aW9uIGluCisgICAgIHNzbF9kZWNyeXB0X2J1ZigpCisgICAqIFJlbW92ZWQgdGltaW5nIGRpZmZlcmVuY2VzIGR1ZSB0byBiYWQgcGFkZGluZyBmcm9tCisgICAgIHJzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdCgpIGFuZCByc2FfcGtjczFfZGVjcnlwdCgpIGZvciBQS0NTIzEgdjEuNQorICAgICBvcGVyYXRpb25zCisKKz0gVmVyc2lvbiAxLjEuNSByZWxlYXNlZCBvbiAyMDEzLTAxLTE2CitCdWdmaXgKKyAgICogRml4ZWQgTVBJIGFzc2VtYmx5IGZvciBTUEFSQzY0IHBsYXRmb3JtCisgICAqIEhhbmRsZSBleGlzdGVuY2Ugb2YgT3BlblNTTCBUcnVzdCBFeHRlbnNpb25zIGF0IGVuZCBvZiBYLjUwOSBERVIgYmxvYgorICAgKiBtcGlfYWRkX2FicygpIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBhZGRpbmcgc2hvcnQgbnVtYmVycyB0byBsb25nIG51bWJlcnMKKyAgICAgd2l0aCBjYXJyeSByb2xsb3ZlcgorICAgKiBNb3ZlZCBtcGlfaW52X21vZCgpIG91dHNpZGUgUE9MQVJTU0xfR0VOUFJJTUUKKyAgICogUHJldmVudCByZWFkaW5nIG92ZXIgYnVmZmVyIGJvdW5kYXJpZXMgb24gWDUwOSBjZXJ0aWZpY2F0ZSBwYXJzaW5nCisgICAqIG1waV9leHBfbW9kKCkgbm93IGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIGJhc2UgbnVtYmVycyAoQ2xvc2VzIHRpY2tldAorICAgICAjNTIpCisgICAqIEZpeGVkIHBvc3NpYmxlIHNlZ2ZhdWx0IGluIG1waV9zaGlmdF9yKCkgKGZvdW5kIGJ5IE1hbnVlbAorICAgICBQw6lnb3VyacOpLUdvbm5hcmQpCisgICAqIEFsbG93IFIgYW5kIEEgdG8gcG9pbnQgdG8gc2FtZSBtcGkgaW4gbXBpX2Rpdl9tcGkgKGZvdW5kIGJ5IE1hbnVlbAorICAgICBQw6lnb3VyacOpLUdvbm5hcmQpCisgICAqIEFkZGVkIG1heCBsZW5ndGggY2hlY2sgZm9yIHJzYV9wa2NzMV9zaWduIHdpdGggUEtDUyMxIHYyLjEKKyAgICogTWVtb3J5IGxlYWsgd2hlbiB1c2luZyBSU0FfUEtDU19WMjEgb3BlcmF0aW9ucyBmaXhlZAorICAgKiBIYW5kbGUgZW5jcnlwdGlvbiB3aXRoIHByaXZhdGUga2V5IGFuZCBkZWNyeXB0aW9uIHdpdGggcHVibGljIGtleSBhcyBwZXIKKyAgICAgUkZDIDIzMTMKKyAgICogRml4ZXMgZm9yIE1TVkM2CisKK1NlY3VyaXR5CisgICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgemVyb2l6YXRpb24gb24gbWlzY3JhZnRlZCBSU0Ega2V5IChmb3VuZCBieSBFbG9pCisgICAgIFZhbmRlcmJla2VuKQorCis9IFZlcnNpb24gMS4xLjQgcmVsZWFzZWQgb24gMjAxMi0wNS0zMQorQnVnZml4CisgICAqIENvcnJlY3RseSBoYW5kbGUgZW1wdHkgU1NML1RMUyBwYWNrZXRzIChGb3VuZCBieSBKYW1lcyBZb25hbikKKyAgICogRml4ZWQgcG90ZW50aWFsIGhlYXAgY29ycnVwdGlvbiBpbiB4NTA5X25hbWUgYWxsb2NhdGlvbgorICAgKiBGaXhlZCBzaW5nbGUgUlNBIHRlc3QgdGhhdCBmYWlsZWQgb24gQmlnIEVuZGlhbiBzeXN0ZW1zIChDbG9zZXMgdGlja2V0ICM1NCkKKworPSBWZXJzaW9uIDEuMS4zIHJlbGVhc2VkIG9uIDIwMTItMDQtMjkKK0J1Z2ZpeAorICAgKiBGaXhlZCByYW5kb20gTVBJIGdlbmVyYXRpb24gdG8gbm90IGdlbmVyYXRlIG1vcmUgc2l6ZSB0aGFuIHJlcXVlc3RlZC4KKworPSBWZXJzaW9uIDEuMS4yIHJlbGVhc2VkIG9uIDIwMTItMDQtMjYKK0J1Z2ZpeAorICAgKiBGaXhlZCBoYW5kbGluZyBlcnJvciBpbiBtcGlfY21wX21waSgpIG9uIGxvbmdlciBCIHZhbHVlcyAoZm91bmQgYnkKKyAgICAgSHVpIERvbmcpCisKK1NlY3VyaXR5CisgICAqIEZpeGVkIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvbiBtaXNjcmFmdGVkIGNsaWVudCBtZXNzYWdlcyAoZm91bmQgYnkKKyAgICAgRnJhbWEtQyB0ZWFtIGF0IENFQSBMSVNUKQorICAgKiBGaXhlZCBnZW5lcmF0aW9uIG9mIERITSBwYXJhbWV0ZXJzIHRvIGNvcnJlY3QgbGVuZ3RoIChmb3VuZCBieSBSdXNsYW4KKyAgICAgWXVzaGNoZW5rbykKKworPSBWZXJzaW9uIDEuMS4xIHJlbGVhc2VkIG9uIDIwMTItMDEtMjMKK0J1Z2ZpeAorICAgKiBDaGVjayBmb3IgZmFpbGVkIG1hbGxvYygpIGluIHNzbF9zZXRfaG9zdG5hbWUoKSBhbmQgeDUwOV9nZXRfZW50cmllcygpCisgICAgIChDbG9zZXMgdGlja2V0ICM0NywgZm91bmQgYnkgSHVnbyBMZWlzaW5rKQorICAgKiBGaXhlZCBpc3N1ZXMgd2l0aCBJbnRlbCBjb21waWxlciBvbiA2NC1iaXQgc3lzdGVtcyAoQ2xvc2VzIHRpY2tldCAjNTApCisgICAqIEZpeGVkIG11bHRpcGxlIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBWUzYgYW5kIGFybWNjCisgICAqIEZpeGVkIGJ1ZyBpbiBDVFJfQ1JCRyBzZWxmdGVzdAorCis9IFZlcnNpb24gMS4xLjAgcmVsZWFzZWQgb24gMjAxMS0xMi0yMgorRmVhdHVyZXMKKyAgICogQWRkZWQgc3NsX3Nlc3Npb25fcmVzZXQoKSB0byBhbGxvdyBiZXR0ZXIgbXVsdGktY29ubmVjdGlvbiBwb29scyBvZgorICAgICBTU0wgY29udGV4dHMgd2l0aG91dCBuZWVkaW5nIHRvIHNldCBhbGwgbm9uLWNvbm5lY3Rpb24tc3BlY2lmaWMKKwkgZGF0YSBhbmQgcG9pbnRlcnMgYWdhaW4uIEFkYXB0ZWQgc3NsX3NlcnZlciB0byB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgKiBBZGRlZCBzc2xfc2V0X21heF92ZXJzaW9uKCkgdG8gYWxsb3cgY2xpZW50cyB0byBvZmZlciBhIGxvd2VyIG1heGltdW0KKyAgICAgc3VwcG9ydGVkIHZlcnNpb24gdG8gYSBzZXJ2ZXIgdG8gaGVscCBidWdneSBzZXJ2ZXIgaW1wbGVtZW50YXRpb25zLgorCSAoQ2xvc2VzIHRpY2tldCAjMzYpCisgICAqIEFkZGVkIGNpcGhlcl9nZXRfY2lwaGVyX21vZGUoKSBhbmQgY2lwaGVyX2dldF9jaXBoZXJfb3BlcmF0aW9uKCkKKyAgICAgaW50cm9zcGVjdGlvbiBmdW5jdGlvbnMgKENsb3NlcyB0aWNrZXQgIzQwKQorICAgKiBBZGRlZCBDVFJfRFJCRyBiYXNlZCBvbiBBRVMtMjU2LUNUUiAoTklTVCBTUCA4MDAtOTApIHJhbmRvbSBnZW5lcmF0b3IKKyAgICogQWRkZWQgYSBnZW5lcmljIGVudHJvcHkgYWNjdW11bGF0b3IgdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBhZGRpbmcKKyAgICAgY3VzdG9tIGVudHJvcHkgc291cmNlcyBhbmQgYWRkZWQgc29tZSBnZW5lcmljIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQKKwkgZW50cm9weSBzb3VyY2VzCisKK0NoYW5nZXMKKyAgICogRG9jdW1lbnRhdGlvbiBmb3IgQUVTIGFuZCBDYW1lbGxpYSBpbiBtb2RlcyBDVFIgYW5kIENGQjEyOCBjbGFyaWZpZWQuCisgICAqIEZpeGVkIHJzYV9lbmNyeXB0IGFuZCByc2FfZGVjcnlwdCBleGFtcGxlcyB0byB1c2UgcHVibGljIGtleSBmb3IKKyAgICAgZW5jcnlwdGlvbiBhbmQgcHJpdmF0ZSBrZXkgZm9yIGRlY3J5cHRpb24uIChDbG9zZXMgdGlja2V0ICMzNCkKKyAgICogSW5jZWFzZWQgbWF4aW11bSBzaXplIG9mIEFTTjEgbGVuZ3RoIHJlYWRzIHRvIDMyLWJpdHMuCisgICAqIEFkZGVkIGFuIEVYUExJQ0lUIHRhZyBudW1iZXIgcGFyYW1ldGVyIHRvIHg1MDlfZ2V0X2V4dCgpCisgICAqIEFkZGVkIGEgc2VwYXJhdGUgQ1JMIGVudHJ5IGV4dGVuc2lvbiBwYXJzaW5nIGZ1bmN0aW9uCisgICAqIFNlcGFyYXRlZCB0aGUgQVNOLjEgcGFyc2luZyBjb2RlIGZyb20gdGhlIFguNTA5IHNwZWNpZmljIHBhcnNpbmcgY29kZS4KKyAgICAgU28gbm93IHRoZXJlIGlzIGEgbW9kdWxlIHRoYXQgaXMgY29udHJvbGxlZCB3aXRoIFBPTEFSU1NMX0FTTjFfUEFSU0VfQy4KKyAgICogQ2hhbmdlZCB0aGUgZGVmaW5lZCBrZXktbGVuZ3RoIG9mIERFUyBjaXBoZXJzIGluIGNpcGhlci5oIHRvIGluY2x1ZGUgdGhlCisgICAgIHBhcml0eSBiaXRzLCB0byBwcmV2ZW50IG1pc3Rha2VzIGluIGNvcHlpbmcgZGF0YS4gKENsb3NlcyB0aWNrZXQgIzMzKQorICAgKiBMb2FkcyBvZiBtaW5pbWFsIGNoYW5nZXMgdG8gYmV0dGVyIHN1cHBvcnQgV0lOQ0UgYXMgYSBidWlsZCB0YXJnZXQKKyAgICAgKENyZWRpdHMgZ28gdG8gTWFyY28gTGl6emEpCisgICAqIEFkZGVkIFBPTEFSU1NMX01QSV9XSU5ET1dfU0laRSBkZWZpbml0aW9uIHRvIGFsbG93IGVhc2llciB0aW1lIHRvIG1lbW9yeQorICAgICB0cmFkZS1vZmYKKyAgICogSW50cm9kdWNlZCBQT0xBUlNTTF9NUElfTUFYX1NJWkUgYW5kIFBPTEFSU1NMX01QSV9NQVhfQklUUyBmb3IgTVBJIHNpemUKKyAgICAgbWFuYWdlbWVudCAoQ2xvc2VzIHRpY2tldCAjNDQpCisgICAqIENoYW5nZWQgdGhlIHVzZWQgcmFuZG9tIGZ1bmN0aW9uIHBvaW50ZXIgdG8gbW9yZSBmbGV4aWJsZSBmb3JtYXQuIFJlbmFtZWQKKyAgICAgaGF2ZWdlX3JhbmQoKSB0byBoYXZlZ2VfcmFuZG9tKCkgdG8gcHJldmVudCBtaXN0YWtlcy4gTG90cyBvZiBjaGFuZ2VzIGFzCisgICAgIGEgY29uc2VxdWVuY2UgaW4gbGlicmFyeSBjb2RlIGFuZCBwcm9ncmFtcworICAgKiBNb3ZlZCBhbGwgZXhhbXBsZXMgcHJvZ3JhbXMgdG8gdXNlIHRoZSBuZXcgZW50cm9weSBhbmQgQ1RSX0RSQkcKKyAgICogQWRkZWQgcGVybWlzc2l2ZSBjZXJ0aWZpY2F0ZSBwYXJzaW5nIHRvIHg1MDlwYXJzZV9jcnQoKSBhbmQKKyAgICAgeDUwOXBhcnNlX2NydGZpbGUoKS4gV2l0aCBwZXJtaXNzaXZlIHBhcnNpbmcgdGhlIHBhcnNpbmcgZG9lcyBub3Qgc3RvcCBvbgorICAgICBlbmNvdW50ZXJpbmcgYSBwYXJzZS1lcnJvci4gQmV3YXJlIHRoYXQgdGhlIG1lYW5pbmcgb2YgcmV0dXJuIHZhbHVlcyBoYXMKKyAgICAgY2hhbmdlZCEKKyAgICogQWxsIGVycm9yIGNvZGVzIGFyZSBub3cgbmVnYXRpdmUuIEV2ZW4gb24gbWVybW9yeSBmYWlsdXJlcyBhbmQgSU8gZXJyb3JzLgorCitCdWdmaXgKKyAgICogRml4ZWQgZmF1bHR5IEhNQUMtTUQyIGltcGxlbWVudGF0aW9uLiBGb3VuZCBieSBkaWJhYy4gKENsb3NlcworICAgICB0aWNrZXQgIzM3KQorICAgKiBGaXhlZCBhIGJ1ZyB3aGVyZSB0aGUgQ1JMIHBhcnNlciBleHBlY3RlZCBhbiBFWFBMSUNJVCBBU04uMSB0YWcKKyAgICAgYmVmb3JlIHZlcnNpb24gbnVtYmVycworICAgKiBBbGxvd2VkIFg1MDkga2V5IHVzYWdlIHBhcnNpbmcgdG8gYWNjZXB0IDQgYnl0ZSB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUKKyAgICAgc3RhbmRhcmQgMSBieXRlIHZlcnNpb24gc29tZXRpbWVzIHVzZWQgYnkgTWljcm9zb2Z0LiAoQ2xvc2VzIHRpY2tldCAjMzgpCisgICAqIEZpeGVkIGluY29ycmVjdCBiZWhhdmlvdXIgaW4gY2FzZSBvZiBSU0FTU0EtUFNTIHdpdGggYSBzYWx0IGxlbmd0aAorICAgICBzbWFsbGVyIHRoYW4gdGhlIGhhc2ggbGVuZ3RoLiAoQ2xvc2VzIHRpY2tldCAjNDEpCisgICAqIElmIGNlcnRpZmljYXRlIHNlcmlhbCBpcyBsb25nZXIgdGhhbiAzMiBvY3RldHMsIHNlcmlhbCBudW1iZXIgaXMgbm93CisgICAgIGFwcGVuZGVkIHdpdGggJy4uLi4nIGFmdGVyIGZpcnN0IDI4IG9jdGV0cworICAgKiBJbXByb3ZlZCBidWlsZCBzdXBwb3J0IGZvciBzMzkweCBhbmQgc3BhcmM2NCBpbiBiaWdudW0uaAorICAgKiBGaXhlZCBNUyBWaXN1YWwgQysrIG5hbWUgY2xhc2ggd2l0aCBpbnQ2NCBpbiBzaGE0LmgKKyAgICogQ29ycmVjdGVkIHJlbW92YWwgb2YgbGVhZGluZyAiMDA6IiBpbiBwcmludGluZyBzZXJpYWwgbnVtYmVycyBpbgorICAgICBjZXJ0aWZpY2F0ZXMgYW5kIENSTHMKKworPSBWZXJzaW9uIDEuMC4wIHJlbGVhc2VkIG9uIDIwMTEtMDctMjcKK0ZlYXR1cmVzCisgICAqIEV4cGFuZGVkIGNpcGhlciBsYXllciB3aXRoIHN1cHBvcnQgZm9yIENGQjEyOCBhbmQgQ1RSIG1vZGUKKyAgICogQWRkZWQgcnNhX2VuY3J5cHQgYW5kIHJzYV9kZWNyeXB0IHNpbXBsZSBleGFtcGxlIHByb2dyYW1zLgorCitDaGFuZ2VzCisgICAqIFRoZSBnZW5lcmljIGNpcGhlciBhbmQgbWVzc2FnZSBkaWdlc3QgbGF5ZXIgbm93IGhhdmUgbm9ybWFsIGVycm9yCisgICAgIGNvZGVzIGluc3RlYWQgb2YgaW50ZWdlcnMKKworQnVnZml4CisgICAqIFVuZGlkIGZhdWx0eSBidWcgZml4IGluIHNzbF93cml0ZSgpIHdoZW4gZmx1c2hpbmcgb2xkIGRhdGEgKFRpY2tldAorICAgICAjMTgpCisKKz0gVmVyc2lvbiAwLjk5LXByZTUgcmVsZWFzZWQgb24gMjAxMS0wNS0yNgorRmVhdHVyZXMKKyAgICogQWRkZWQgYWRkaXRpb25hbCBDaXBoZXIgQmxvY2sgTW9kZXMgdG8gc3ltbWV0cmljIGNpcGhlcnMKKyAgICAgKEFFUyBDVFIsIENhbWVsbGlhIENUUiwgWFRFQSBDQkMpIGluY2x1ZGluZyB0aGUgb3B0aW9uIHRvCisgICAgIGVuYWJsZSBhbmQgZGlzYWJsZSBpbmRpdmlkdWFsIG1vZGVzIHdoZW4gbmVlZGVkCisgICAqIEZ1bmN0aW9ucyByZXF1aXJpbmcgRmlsZSBTeXN0ZW0gZnVuY3Rpb25zIGNhbiBub3cgYmUgZGlzYWJsZWQKKyAgICAgYnkgdW5kZWZpbmluZyBQT0xBUlNTTF9GU19JTworICAgKiBBIGVycm9yX3N0cmVycm9yIGZ1bmN0aW9uKCkgaGFzIGJlZW4gYWRkZWQgdG8gdHJhbnNsYXRlIGJldHdlZW4KKyAgICAgZXJyb3IgY29kZXMgYW5kIHRoZWlyIGRlc2NyaXB0aW9uLgorICAgKiBBZGRlZCBtcGlfZ2V0X2JpdCgpIGFuZCBtcGlfc2V0X2JpdCgpIGluZGl2aWR1YWwgYml0IHNldHRlci9nZXR0ZXIKKyAgICAgZnVuY3Rpb25zLgorICAgKiBBZGRlZCBzc2xfbWFpbF9jbGllbnQgYW5kIHNzbF9mb3JrX3NlcnZlciBhcyBleGFtcGxlIHByb2dyYW1zLgorCitDaGFuZ2VzCisgICAqIE1ham9yIGFyZ3VtZW50IC8gdmFyaWFibGUgcmV3cml0ZS4gSW50cm9kdWNlZCB1c2Ugb2Ygc2l6ZV90CisgICAgIGluc3RlYWQgb2YgaW50IGZvciBidWZmZXIgbGVuZ3RocyBhbmQgbG9vcCB2YXJpYWJsZXMgZm9yCisgICAgIGJldHRlciB1bnNpZ25lZCAvIHNpZ25lZCB1c2UuIFJlbmFtZWQgaW50ZXJuYWwgYmlnaW50IHR5cGVzCisgICAgIHRfaW50IGFuZCB0X2RibCB0byB0X3VpbnQgYW5kIHRfdWRibCBpbiB0aGUgcHJvY2VzcworICAgKiBtcGlfaW5pdCgpIGFuZCBtcGlfZnJlZSgpIG5vdyBvbmx5IGFjY2VwdCBhIHNpbmdsZSBNUEkKKyAgICAgYXJndW1lbnQgYW5kIGRvIG5vdCBhY2NlcHQgdmFyaWFibGUgYXJndW1lbnQgbGlzdHMgYW55bW9yZS4KKyAgICogVGhlIGVycm9yIGNvZGVzIGhhdmUgYmVlbiByZW1hcHBlZCBhbmQgY29tYmluaW5nIGVycm9yIGNvZGVzCisgICAgIGlzIG5vdyBkb25lIHdpdGggYSBQTFVTIGluc3RlYWQgb2YgYW4gT1IgYXMgZXJyb3IgY29kZXMKKyAgICAgdXNlZCBhcmUgbmVnYXRpdmUuCisgICAqIENoYW5nZWQgYmVoYXZpb3VyIG9mIG5ldF9yZWFkKCksIHNzbF9mZXRjaF9pbnB1dCgpIGFuZCBzc2xfcmVjdigpLgorICAgICBuZXRfcmVjdigpIG5vdyByZXR1cm5zIDAgb24gRU9GIGluc3RlYWQgb2YKKyAgICAgUE9MQVJTU0xfRVJSX05FVF9DT05OX1JFU0VULiBzc2xfZmV0Y2hfaW5wdXQoKSByZXR1cm5zCisgICAgIFBPTEFSU1NMX0VSUl9TU0xfQ09OTl9FT0Ygb24gYW4gRU9GIGZyb20gaXRzIGZfcmVjdigpIGZ1bmN0aW9uLgorICAgICBzc2xfcmVhZCgpIHJldHVybnMgMCBpZiBhIFBPTEFSU1NMX0VSUl9TU0xfQ09OTl9FT0YgaXMgcmVjZWl2ZWQKKyAgICAgYWZ0ZXIgdGhlIGhhbmRzaGFrZS4KKyAgICogTmV0d29yayBmdW5jdGlvbnMgbm93IHJldHVybiBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfUkVBRCBvcgorICAgICBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfV1JJVEUgaW5zdGVhZCBvZiB0aGUgYW1iaWd1b3VzCisgICAgIFBPTEFSU1NMX0VSUl9ORVRfVFJZX0FHQUlOCisKKz0gVmVyc2lvbiAwLjk5LXByZTQgcmVsZWFzZWQgb24gMjAxMS0wNC0wMQorRmVhdHVyZXMKKyAgICogQWRkZWQgc3VwcG9ydCBmb3IgUEtDUyMxIHYyLjEgZW5jb2RpbmcgYW5kIHRodXMgc3VwcG9ydAorICAgICBmb3IgdGhlIFJTQUVTLU9BRVAgYW5kIFJTQVNTQS1QU1Mgb3BlcmF0aW9ucy4KKyAgICogUmVhZGluZyBvZiBQdWJsaWMgS2V5IGZpbGVzIGluY29ycG9yYXRlZCBpbnRvIGRlZmF1bHQgeDUwOQorICAgICBmdW5jdGlvbmFsaXR5IGFzIHdlbGwuCisgICAqIEFkZGVkIG1waV9maWxsX3JhbmRvbSgpIGZvciBjZW50cmFsaXplZCBmaWxsaW5nIG9mIGJpZyBudW1iZXJzCisgICAgIHdpdGggcmFuZG9tIGRhdGEgKEZpeGVkIHRpY2tldCAjMTApCisKK0NoYW5nZXMKKyAgICogRGVidWcgcHJpbnQgb2YgTVBJIG5vdyByZW1vdmVzIGxlYWRpbmcgemVybyBvY3RldHMgYW5kIAorICAgICBkaXNwbGF5cyBhY3R1YWwgYml0IHNpemUgb2YgdGhlIHZhbHVlLgorICAgKiB4NTA5cGFyc2Vfa2V5KCkgKGFuZCBhcyBhIGNvbnNlcXVlbmNlIHg1MDlwYXJzZV9rZXlmaWxlKCkpIAorICAgICBkb2VzIG5vdCB6ZXJvaXplIG1lbW9yeSBpbiBhZHZhbmNlIGFueW1vcmUuIFVzZSByc2FfaW5pdCgpCisgICAgIGJlZm9yZSBwYXJzaW5nIGEga2V5IG9yIGtleWZpbGUhCisKK0J1Z2ZpeAorICAgKiBEZWJ1ZyBvdXRwdXQgb2YgTVBJJ3Mgbm93IHRoZSBzYW1lIGluZGVwZW5kZW50IG9mIHVuZGVybHlpbmcKKyAgICAgcGxhdGZvcm0gKDMyLWJpdCAvIDY0LWJpdCkgKEZpeGVzIHRpY2tldCAjMTksIGZvdW5kIGJ5IE1hZHMKKyAgICAgS2lpbGVyaWNoIGFuZCBNaWhhaSBNaWxpdGFydSkKKyAgICogRml4ZWQgYnVnIGluIHNzbF93cml0ZSgpIHdoZW4gZmx1c2hpbmcgb2xkIGRhdGEgKEZpeGVkIHRpY2tldAorICAgICAjMTgsIGZvdW5kIGJ5IE5pa29sYXkgRXBpZmFub3YpCisgICAqIEZpeGVkIHByb3BlciBoYW5kbGluZyBvZiBSU0FTU0EtUFNTIHZlcmlmaWNhdGlvbiB3aXRoIHZhcmlhYmxlCisgICAgIGxlbmd0aCBzYWx0IGxlbmd0aHMKKworPSBWZXJzaW9uIDAuOTktcHJlMyByZWxlYXNlZCBvbiAyMDExLTAyLTI4CitUaGlzIHJlbGVhc2UgcmVwbGFjZXMgdmVyc2lvbiAwLjk5LXByZTIgd2hpY2ggaGFkIHBvc3NpYmxlIGNvcHlyaWdodCBpc3N1ZXMuCitGZWF0dXJlcworICAgKiBQYXJzaW5nIFBFTSBwcml2YXRlIGtleXMgZW5jcnlwdGVkIHdpdGggREVTIGFuZCBBRVMKKyAgICAgYXJlIG5vdyBzdXBwb3J0ZWQgYXMgd2VsbCAoRml4ZXMgdGlja2V0ICM1KQorICAgKiBBZGRlZCBjcmxfYXBwIHByb2dyYW0gdG8gYWxsb3cgZWFzeSByZWFkaW5nIGFuZAorICAgICBwcmludGluZyBvZiBYNTA5IENSTHMgZnJvbSBmaWxlCisKK0NoYW5nZXMKKyAgICogUGFyc2luZyBvZiBQRU0gZmlsZXMgbW92ZWQgdG8gc2VwYXJhdGUgbW9kdWxlIChGaXhlcyAKKyAgICAgdGlja2V0ICMxMykuIEFsc28gcG9zc2libGUgdG8gcmVtb3ZlIFBFTSBzdXBwb3J0IGZvcgorICAgICBzeXN0ZW1zIG9ubHkgdXNpbmcgREVSIGVuY29kaW5nCisKK0J1Z2ZpeGVzCisgICAqIENvcnJlY3RlZCBwYXJzaW5nIG9mIFVUQ1RpbWUgZGF0ZXMgYmVmb3JlIDE5OTAgYW5kCisgICAgIGFmdGVyIDE5NTAKKyAgICogU3VwcG9ydCBtb3JlIGV4b3RpYyBPSUQncyB3aGVuIHBhcnNpbmcgY2VydGlmaWNhdGVzCisgICAJIChmb3VuZCBieSBNYWRzIEtpaWxlcmljaCkKKyAgICogU3VwcG9ydCBtb3JlIGV4b3RpYyBuYW1lIHJlcHJlc2VudGF0aW9ucyB3aGVuIHBhcnNpbmcKKyAgICAgY2VydGlmaWNhdGVzIChmb3VuZCBieSBNYWRzIEtpaWxlcmljaCkKKyAgICogUmVwbGFjZWQgdGhlIGV4cGlyZWQgdGVzdCBjZXJ0aWZpY2F0ZXMKKyAgICogRG8gbm90IGJhaWwgb3V0IGlmIG5vIGNsaWVudCBjZXJ0aWZpY2F0ZSBzcGVjaWZpZWQuIFRyeQorICAgICB0byBuZWdvdGlhdGUgYW5vbnltb3VzIGNvbm5lY3Rpb24gKEZpeGVzIHRpY2tldCAjMTIsCisgICAgIGZvdW5kIGJ5IEJvcmlzIEtyYXNub3Zza2l5KQorCitTZWN1cml0eSBmaXhlcworICAgKiBGaXhlZCBhIHBvc3NpYmxlIE1hbi1pbi10aGUtTWlkZGxlIGF0dGFjayBvbiB0aGUKKyAgICAgRGlmZmllIEhlbGxtYW4ga2V5IGV4Y2hhbmdlICh0aGFua3MgdG8gTGFycnkgSGlnaHNtaXRoLAorICAgICBTdWJyZXB0aW9uIExMQykKKworPSBWZXJzaW9uIDAuOTktcHJlMSByZWxlYXNlZCBvbiAyMDExLTAxLTMwCitGZWF0dXJlcworTm90ZTogTW9zdCBvZiB0aGVzZSBmZWF0dXJlcyBoYXZlIGJlZW4gZG9uYXRlZCBieSBGb3gtSVQKKyAgICogQWRkZWQgRG94eWdlbiBzb3VyY2UgY29kZSBkb2N1bWVudGF0aW9uIHBhcnRzCisgICAqIEFkZGVkIHJlYWRpbmcgb2YgREhNIGNvbnRleHQgZnJvbSBtZW1vcnkgYW5kIGZpbGUKKyAgICogSW1wcm92ZWQgWDUwOSBjZXJ0aWZpY2F0ZSBwYXJzaW5nIHRvIGluY2x1ZGUgZXh0ZW5kZWQKKyAgICAgY2VydGlmaWNhdGUgZmllbGRzLCBpbmNsdWRpbmcgS2V5IFVzYWdlCisgICAqIEltcHJvdmVkIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBhbmQgdmVyaWZpY2F0aW9uCisgICAgIGFnYWluc3QgdGhlIGF2YWlsYWJsZSBDUkxzCisgICAqIERldGVjdGlvbiBmb3IgREVTIHdlYWsga2V5cyBhbmQgcGFyaXR5IGJpdHMgYWRkZWQKKyAgICogSW1wcm92ZW1lbnRzIHRvIHN1cHBvcnQgaW50ZWdyYXRpb24gaW4gb3RoZXIKKyAgICAgYXBwbGljYXRpb25zOgorICAgICAgICsgQWRkZWQgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBhbmQgY2lwaGVyIHdyYXBwZXIKKyAgICAgICArIEltcHJvdmVkIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgY2FwYWJpbGl0aWVzLAorICAgICAgICAgc3RhdHVzLCBvYmplY3RzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgKyBBZGRlZCB2ZXJpZmljYXRpb24gY2FsbGJhY2sgb24gY2VydGlmaWNhdGUgY2hhaW4KKyAgICAgICAgIHZlcmlmaWNhdGlvbiB0byBhbGxvdyBleHRlcm5hbCBibGFja2xpc3RpbmcKKwkgICArIEFkZGl0aW9uYWwgZXhhbXBsZSBwcm9ncmFtcyB0byBzaG93IHVzYWdlCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBLQ1MjMTEgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZQorICAgICBsaWJwa2NzMTEtaGVscGVyIGxpYnJhcnkKKworQ2hhbmdlcworICAgKiB4NTA5cGFyc2VfdGltZV9leHBpcmVkKCkgY2hlY2tzIHRpbWUgaW4gYWRkaXRpb24gdG8KKyAgICAgdGhlIGV4aXN0aW5nIGRhdGUgY2hlY2sKKyAgICogVGhlIGNpcGhlcnMgbWVtYmVyIG9mIHNzbF9jb250ZXh0IGFuZCB0aGUgY2lwaGVyIG1lbWJlcgorICAgICBvZiBzc2xfc2Vzc2lvbiBoYXZlIGJlZW4gcmVuYW1lZCB0byBjaXBoZXJzdWl0ZXMgYW5kCisgICAgIGNpcGhlcnN1aXRlIHJlc3BlY3RpdmVseS4gVGhpcyBjbGFyaWZpZXMgdGhlIGRpZmZlcmVuY2UKKyAgICAgd2l0aCB0aGUgZ2VuZXJpYyBjaXBoZXIgbGF5ZXIgYW5kIGlzIGJldHRlciBuYW1pbmcKKyAgICAgYWx0b2dldGhlcgorCis9IFZlcnNpb24gMC4xNC4wIHJlbGVhc2VkIG9uIDIwMTAtMDgtMTYKK0ZlYXR1cmVzCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFNTTF9FREhfUlNBX0FFU18xMjhfU0hBIGFuZAorICAgICBTU0xfRURIX1JTQV9DQU1FTExJQV8xMjhfU0hBIGNpcGhlcnN1aXRlcworICAgKiBBZGRlZCBjb21waWxlLXRpbWUgYW5kIHJ1bi10aW1lIHZlcnNpb24gaW5mb3JtYXRpb24KKyAgICogRXhwYW5kZWQgc3NsX2NsaWVudDIgYXJndW1lbnRzIGZvciBtb3JlIGZsZXhpYmlsaXR5CisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFRMUyB2MS4xCisKK0NoYW5nZXMKKyAgICogTWFkZSBNYWtlZmlsZSBjbGVhbmVyCisgICAqIFJlbW92ZWQgZGVwZW5kZW5jeSBvbiByYW5kKCkgaW4gcnNhX3BrY3MxX2VuY3J5cHQoKS4KKyAgICAgTm93IHVzaW5nIHJhbmRvbSBmdWN0aW9uIHByb3ZpZGVkIHRvIGZ1bmN0aW9uIGFuZAorICAgICBjaGFuZ2VkIHRoZSBwcm90b3R5cGUgb2YgcnNhX3BrY3MxX2VuY3J5cHQoKSwKKyAgICAgcnNhX2luaXQoKSBhbmQgcnNhX2dlbl9rZXkoKS4KKyAgICogU29tZSBTU0wgZGVmaW5lcyB3ZXJlIHJlbmFtZWQgaW4gb3JkZXIgdG8gYXZvaWQKKyAgICAgZnV0dXJlIGNvbmZ1c2lvbgorCitCdWcgZml4ZXMKKyAgICogRml4ZWQgQ01ha2Ugb3V0IG9mIHNvdXJjZSBidWlsZCBmb3IgdGVzdHMgKGZvdW5kIGJ5CisgICAgIGtrZXJ0KQorICAgKiByc2FfY2hlY2tfcHJpdmF0ZSgpIG5vdyBzdXBwb3J0cyBQS0NTMXYyIGtleXMgYXMgd2VsbAorICAgKiBGaXhlZCBkZWFkbG9jayBpbiByc2FfcGtjczFfZW5jcnlwdCgpIG9uIGZhaWxpbmcgcmFuZG9tCisgICAgIGdlbmVyYXRvcgorCis9IFZlcnNpb24gMC4xMy4xIHJlbGVhc2VkIG9uIDIwMTAtMDMtMjQKK0J1ZyBmaXhlcworICAgKiBGaXhlZCBNYWtlZmlsZSBpbiBsaWJyYXJ5IHRoYXQgd2FzIG1pc3Rha2VubHkgbWVyZ2VkCisgICAqIEFkZGVkIG1pc3NpbmcgY29uc3Qgc3RyaW5nIGZpeGVzCisKKz0gVmVyc2lvbiAwLjEzLjAgcmVsZWFzZWQgb24gMjAxMC0wMy0yMQorRmVhdHVyZXMKKyAgICogQWRkZWQgb3B0aW9uIHBhcnNpbmcgZm9yIGhvc3QgYW5kIHBvcnQgc2VsZWN0aW9uIHRvCisgICAgIHNzbF9jbGllbnQyCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIEdlbmVyYWxpemVkVGltZSBpbiBYNTA5IHBhcnNpbmcKKyAgICogQWRkZWQgY2VydF9hcHAgcHJvZ3JhbSB0byBhbGxvdyBlYXN5IHJlYWRpbmcgYW5kCisgICAgIHByaW50aW5nIG9mIFg1MDkgY2VydGlmaWNhdGVzIGZyb20gZmlsZSBvciBTU0wKKyAgICAgY29ubmVjdGlvbi4KKworQ2hhbmdlcworICAgKiBBZGRlZCBjb25zdCBjb3JyZWN0bmVzcyBmb3IgbWFpbiBjb2RlIGJhc2UKKyAgICogWDUwOSBzaWduYXR1cmUgYWxnb3JpdGhtIGRldGVybWluYXRpb24gaXMgbm93CisgICAgIGluIGEgZnVuY3Rpb24gdG8gYWxsb3cgZWFzeSBmdXR1cmUgZXhwYW5zaW9uCisgICAqIENoYW5nZWQgc3ltbWV0cmljIGNpcGhlciBmdW5jdGlvbnMgdG8KKyAgICAgaWRlbnRpY2FsIGludGVyZmFjZSAocmV0dXJuaW5nIGludCByZXN1bHQgdmFsdWVzKQorICAgKiBDaGFuZ2VkIEFSQzQgdG8gdXNlIHNlcGFyYXRlIGlucHV0L291dHB1dCBidWZmZXIKKyAgICogQWRkZWQgcmVzZXQgZnVuY3Rpb24gZm9yIEhNQUMgY29udGV4dCBhcyBzcGVlZC11cAorICAgICBmb3Igc3BlY2lmaWMgdXNlLWNhc2VzCisKK0J1ZyBmaXhlcworICAgKiBGaXhlZCBidWcgcmVzdWx0aW5nIGluIGZhaWx1cmUgdG8gc2VuZCB0aGUgbGFzdAorICAgICBjZXJ0aWZpY2F0ZSBpbiB0aGUgY2hhaW4gaW4gc3NsX3dyaXRlX2NlcnRpZmljYXRlKCkgYW5kCisgICAgIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCkgKGZvdW5kIGJ5IGZhdGJvYikKKyAgICogQWRkZWQgc21hbGwgZml4ZXMgZm9yIGNvbXBpbGVyIHdhcm5pbmdzIG9uIGEgTWFjCisgICAgIChmb3VuZCBieSBGcmFuayBkZSBCcmFiYW5kZXIpCisgICAqIEZpeGVkIGFsZ29yaXRobWljIGJ1ZyBpbiBtcGlfaXNfcHJpbWUoKSAoZm91bmQgYnkKKyAgICAgU21iYXQgVG9ub3lhbikKKworPSBWZXJzaW9uIDAuMTIuMSByZWxlYXNlZCBvbiAyMDA5LTEwLTA0CitDaGFuZ2VzCisgICAqIENvdmVyYWdlIHRlc3QgZGVmaW5pdGlvbnMgbm93IHN1cHBvcnQgJ2RlcGVuZHNfb24nCisgICAgIHRhZ2dpbmcgc3lzdGVtLgorICAgKiBUZXN0cyByZXF1aXJpbmcgc3BlY2lmaWMgaGFzaGluZyBhbGdvcml0aG1zIG5vdyBob25vcgorICAgICB0aGUgZGVmaW5lcy4KKworQnVnIGZpeGVzCisgICAqIENoYW5nZWQgdHlwbyBpbiAjaWZkZWYgaW4geDUwOXBhcnNlLmMgKGZvdW5kCisgICAgIGJ5IEVkdWFyZG8pCisKKz0gVmVyc2lvbiAwLjEyLjAgcmVsZWFzZWQgb24gMjAwOS0wNy0yOAorRmVhdHVyZXMKKyAgICogQWRkZWQgQ01ha2UgbWFrZWZpbGVzIGFzIGFsdGVybmF0aXZlIHRvIHJlZ3VsYXIgTWFrZWZpbGVzLgorICAgKiBBZGRlZCBwcmVsaW1pbmFyeSBDb2RlIENvdmVyYWdlIHRlc3RzIGZvciBBRVMsIEFSQzQsCisgICAgIEJhc2U2NCwgTVBJLCBTSEEtZmFtaWx5LCBNRC1mYW1pbHksIEhNQUMtU0hBLWZhbWlseSwKKyAgICAgQ2FtZWxsaWEsIERFUywgMy1ERVMsIFJTQSBQS0NTIzEsIFhURUEsIERpZmZpZS1IZWxsbWFuCisgICAgIGFuZCBYNTA5cGFyc2UuCisKK0NoYW5nZXMKKyAgICogRXJyb3IgY29kZXMgYXJlIG5vdCAobmVjZXNzYXJpbHkpIG5lZ2F0aXZlLiBLZWVwCisgICAgIHRoaXMgaXMgbWluZCB3aGVuIGNoZWNraW5nIGZvciBlcnJvcnMuCisgICAqIFJTQV9SQVcgcmVuYW1lZCB0byBTSUdfUlNBX1JBVyBmb3IgY29uc2lzdGVuY3kuCisgICAqIEZpeGVkIHR5cG8gaW4gbmFtZSBvZiBQT0xBUlNTTF9FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UuCisgICAqIENoYW5nZWQgaW50ZXJmYWNlIGZvciBBRVMgYW5kIENhbWVsbGlhIHNldGtleSBmdW5jdGlvbnMKKyAgICAgdG8gaW5kaWNhdGUgaW52YWxpZCBrZXkgbGVuZ3Rocy4KKworQnVnIGZpeGVzCisgICAqIEZpeGVkIGluY2x1ZGUgbG9jYXRpb24gb2YgZW5kaWFuLmggb24gRnJlZUJTRCAoZm91bmQgYnkKKyAgICAgR2FicmllbCkKKyAgICogRml4ZWQgaW5jbHVkZSBsb2NhdGlvbiBvZiBlbmRpYW4uaCBhbmQgbmFtZSBjbGFzaCBvbgorICAgICBBcHBsZXMgKGZvdW5kIGJ5IE1hcnRpbiB2YW4gSGVuc2JlcmdlbikKKyAgICogRml4ZWQgSE1BQy1NRDIgYnkgbW9kaWZ5aW5nIG1kMl9zdGFydHMoKSwgc28gdGhhdCB0aGUKKyAgICAgcmVxdWlyZWQgSE1BQyBpcGFkIGFuZCBvcGFkIHZhcmlhYmxlcyBhcmUgbm90IGNsZWFyZWQuCisgICAgIChmb3VuZCBieSBjb2RlIGNvdmVyYWdlIHRlc3RzKQorICAgKiBQcmV2ZW50ZWQgdXNlIG9mIGxvbmcgbG9uZyBpbiBiaWdudW0gaWYgCisgICAgIFBPTEFSU1NMX0hBVkVfTE9OR0xPTkcgbm90IGRlZmluZWQgKGZvdW5kIGJ5IEdpbGVzCisgICAgIEJhdGhnYXRlKS4KKyAgICogRml4ZWQgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIG5lZ2F0aXZlIHN0cmluZ3MgaW4KKyAgICAgbXBpX3JlYWRfc3RyaW5nKCkgKGZvdW5kIGJ5IGNvZGUgY292ZXJhZ2UgdGVzdHMpLgorICAgKiBGaXhlZCBzZWdmYXVsdCBvbiBoYW5kbGluZyBlbXB0eSByc2FfY29udGV4dCBpbgorICAgICByc2FfY2hlY2tfcHVia2V5KCkgYW5kIHJzYV9jaGVja19wcml2a2V5KCkgKGZvdW5kIGJ5CisgICAgIGNvZGUgY292ZXJhZ2UgdGVzdHMpLgorICAgKiBGaXhlZCBpbmNvcnJlY3QgaGFuZGxpbmcgb2Ygb25lIHNpbmdsZSBuZWdhdGl2ZSBpbnB1dAorICAgICB2YWx1ZSBpbiBtcGlfYWRkX2FicygpIChmb3VuZCBieSBjb2RlIGNvdmVyYWdlIHRlc3RzKS4KKyAgICogRml4ZWQgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIG5lZ2F0aXZlIGZpcnN0IGlucHV0CisgICAgIHZhbHVlIGluIG1waV9zdWJfYWJzKCkgKGZvdW5kIGJ5IGNvZGUgY292ZXJhZ2UgdGVzdHMpLgorICAgKiBGaXhlZCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgbmVnYXRpdmUgZmlyc3QgaW5wdXQKKyAgICAgdmFsdWUgaW4gbXBpX21vZF9tcGkoKSBhbmQgbXBpX21vZF9pbnQoKS4gUmVzdWx0aW5nCisgICAgIGNoYW5nZSBhbHNvIGFmZmVjdHMgbXBpX3dyaXRlX3N0cmluZygpIChmb3VuZCBieSBjb2RlCisgICAgIGNvdmVyYWdlIHRlc3RzKS4KKyAgICogQ29ycmVjdGVkIGlzX3ByaW1lKCkgcmVzdWx0cyBmb3IgMCwgMSBhbmQgMiAoZm91bmQgYnkKKyAgICAgY29kZSBjb3ZlcmFnZSB0ZXN0cykuCisgICAqIEZpeGVkIENhbWVsbGlhIGFuZCBYVEVBIGZvciA2NC1iaXQgV2luZG93cyBzeXN0ZW1zLgorCis9IFZlcnNpb24gMC4xMS4xIHJlbGVhc2VkIG9uIDIwMDktMDUtMTcKKyAgICogRml4ZWQgbWlzc2luZyBmdW5jdGlvbmFsaXR5IGZvciBTSEEtMjI0LCBTSEEtMjU2LCBTSEEzODQsCisgICAgIFNIQS01MTIgaW4gcnNhX3BrY3MxX3NpZ24oKQorCis9IFZlcnNpb24gMC4xMS4wIHJlbGVhc2VkIG9uIDIwMDktMDUtMDMKKyAgICogRml4ZWQgYSBidWcgaW4gbXBpX2djZCgpIHNvIHRoYXQgaXQgYWxzbyB3b3JrcyB3aGVuIGJvdGgKKyAgICAgaW5wdXQgbnVtYmVycyBhcmUgZXZlbiBhbmQgYWRkZWQgdGVzdGNhc2VzIHRvIGNoZWNrCisgICAgIChmb3VuZCBieSBQaWVycmUgSGFib3V6aXQpLgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBTSEEtMjI0LCBTSEEtMjU2LCBTSEEtMzg0IGFuZCBTSEEtNTEyCisgICAgIG9uZSB3YXkgaGFzaCBmdW5jdGlvbnMgd2l0aCB0aGUgUEtDUyMxIHYxLjUgc2lnbmluZyBhbmQKKyAgICAgdmVyaWZpY2F0aW9uLgorICAgKiBGaXhlZCBtaW5vciBidWcgcmVnYXJkaW5nIG1waV9nY2QgbG9jYXRlZCB3aXRoaW4gdGhlCisgICAgIFBPTEFSU1NMX0dFTlBSSU1FIGJsb2NrLgorICAgKiBGaXhlZCBtaW5vciBtZW1vcnkgbGVhayBpbiB4NTA5cGFyc2VfY3J0KCkgYW5kIGFkZGVkIGJldHRlcgorICAgICBoYW5kbGluZyBvZiAnZnVsbCcgY2VydGlmaWNhdGUgY2hhaW5zIChmb3VuZCBieSBNYXRoaWFzCisgICAgIE9sc3NvbikuCisgICAqIENlbnRyYWxpemVkIGZpbGUgb3BlbmluZyBhbmQgcmVhZGluZyBmb3IgeDUwOSBmaWxlcyBpbnRvCisgICAgIGxvYWRfZmlsZSgpCisgICAqIE1hZGUgZGVmaW5pdGlvbiBvZiBuZXRfaHRvbnMoKSBlbmRpYW4tY2xlYW4gZm9yIGJpZyBlbmRpYW4KKyAgICAgc3lzdGVtcyAoRm91bmQgYnkgR2Vybm90KS4KKyAgICogVW5kZWZpbmluZyBQT0xBUlNTTF9IQVZFX0FTTSBub3cgYWxzbyBoYW5kbGVzIHByZXZlbnRzIGFzbSBpbgorICAgICBwYWRsb2NrIGFuZCB0aW1pbmcgY29kZS4gCisgICAqIEZpeGVkIGFuIG9mZi1ieS1vbmUgYnVmZmVyIGFsbG9jYXRpb24gaW4gc3NsX3NldF9ob3N0bmFtZSgpCisgICAgIHJlc3BvbnNpYmxlIGZvciBjcmFzaGVzIGFuZCB1bndhbnRlZCBiZWhhdmlvdXIuCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIENlcnRpZmljYXRlIFJldm9jYXRpb24gTGlzdCAoQ1JMKSBwYXJzaW5nLgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBDUkwgcmV2b2NhdGlvbiB0byB4NTA5cGFyc2VfdmVyaWZ5KCkgYW5kCisgICAgIFNTTC9UTFMgY29kZS4KKyAgICogRml4ZWQgY29tcGF0aWJpbGl0eSBvZiBYVEVBIGFuZCBDYW1lbGxpYSBvbiBhIDY0LWJpdCBzeXN0ZW0KKyAgICAgKGZvdW5kIGJ5IEZlbGl4IHZvbiBMZWl0bmVyKS4KKworPSBWZXJzaW9uIDAuMTAuMCByZWxlYXNlZCBvbiAyMDA5LTAxLTEyCisgICAqIE1pZ3JhdGVkIFh5U1NMIHRvIFBvbGFyU1NMCisgICAqIEFkZGVkIFhURUEgc3ltbWV0cmljIGNpcGhlcgorICAgKiBBZGRlZCBDYW1lbGxpYSBzeW1tZXRyaWMgY2lwaGVyCisgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGNpcGhlcnN1aXRlczogU1NMX1JTQV9DQU1FTExJQV8xMjhfU0hBLAorICAgICBTU0xfUlNBX0NBTUVMTElBXzI1Nl9TSEEgYW5kIFNTTF9FREhfUlNBX0NBTUVMTElBXzI1Nl9TSEEKKyAgICogRml4ZWQgZGFuZ2Vyb3VzIGJ1ZyB0aGF0IGNhbiBjYXVzZSBhIGhlYXAgb3ZlcmZsb3cgaW4KKyAgICAgcnNhX3BrY3MxX2RlY3J5cHQgKGZvdW5kIGJ5IENocmlzdG9waGUgRGV2aW5lKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitYeVNTTCBDaGFuZ2VMb2cKKworPSBWZXJzaW9uIDAuOSByZWxlYXNlZCBvbiAyMDA4LTAzLTE2CisKKyAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGNpcGhlcnN1aXRlOiBTU0xfUlNBX0FFU18xMjhfU0hBCisgICAgKiBFbmFibGVkIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQgaW4gYWVzY3J5cHQyLmMKKyAgICAqIFByZWxpbWluYXJ5IG9wZW5zc2wgd3JhcHBlciBjb250cmlidXRlZCBieSBEYXZpZCBCYXJyZXR0CisgICAgKiBGaXhlZCBhIGJ1ZyBpbiBzc2xfd3JpdGUoKSB0aGF0IGNhdXNlZCB0aGUgc2FtZSBwYXlsb2FkIHRvCisgICAgICBiZSBzZW50IHR3aWNlIGluIG5vbi1ibG9ja2luZyBtb2RlIHdoZW4gc2VuZCByZXR1cm5zIEVBR0FJTgorICAgICogRml4ZWQgc3NsX3BhcnNlX2NsaWVudF9oZWxsbygpOiBzZXNzaW9uIGlkIGFuZCBjaGFsbGVuZ2UgbXVzdAorICAgICAgbm90IGJlIHN3YXBwZWQgaW4gdGhlIFNTTHYyIENsaWVudEhlbGxvIChmb3VuZCBieSBHcmVnIFJvYnNvbikKKyAgICAqIEFkZGVkIHVzZXItZGVmaW5lZCBjYWxsYmFjayBkZWJ1ZyBmdW5jdGlvbiAoS3J5c3RpYW4gS29sb2R6aWVqKQorICAgICogQmVmb3JlIGZyZWVpbmcgYSBjZXJ0aWZpY2F0ZSwgcHJvcGVybHkgemVybyBvdXQgYWxsIGNlcnQuIGRhdGEKKyAgICAqIEZpeGVkIHRoZSAibW9kZSIgcGFyYW1ldGVyIHNvIHRoYXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGFyZQorICAgICAgbm90IHN3YXBwZWQgb24gUGFkTG9jazsgYWxzbyBmaXhlZCBjb21waWxhdGlvbiBvbiBvbGRlciB2ZXJzaW9ucworICAgICAgb2YgZ2NjIChidWcgcmVwb3J0ZWQgYnkgRGF2aWQgQmFycmV0dCkKKyAgICAqIENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2UgaW4gcGFkbG9ja194Y3J5cHRjYmMoKSB3aGVuIGlucHV0IG9yCisgICAgICBvdXB1dCBkYXRhIGlzIG5vbi1hbGlnbmVkIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUgc29mdHdhcmUKKyAgICAgIGltcGxlbWVudGF0aW9uLCBhcyBWSUEgTmVoZW1pYWggY2Fubm90IGhhbmRsZSBub24tYWxpZ25lZCBidWZmZXJzCisgICAgKiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHg1MDlwYXJzZV9jcnQoKSB3aGljaCB3YXMgcmVwb3J0ZWQgYnkgR3JlZworICAgICAgUm9ic29uLUdhcnRoOyBzb21lIHg1MDl3cml0ZS5jIGZpeGVzIGJ5IFBhc2NhbCBWaXplbGksIHRoYW5rcyB0bworICAgICAgTWF0dGhldyBQYWdlIHdobyByZXBvcnRlZCBzZXZlcmFsIGJ1Z3MKKyAgICAqIEZpeGVkIHg1MDlfZ2V0X2V4dCgpIHRvIGFjY2VwdCBzb21lIHJhcmUgY2VydGlmaWNhdGVzIHdoaWNoIGhhdmUKKyAgICAgIGFuIElOVEVHRVIgaW5zdGVhZCBvZiBhIEJPT0xFQU4gZm9yIEJhc2ljQ29uc3RyYWludHM6OmNBLgorICAgICogQWRkZWQgc3VwcG9ydCBvbiB0aGUgY2xpZW50IHNpZGUgZm9yIHRoZSBUTFMgImhvc3RuYW1lIiBleHRlbnNpb24KKyAgICAgIChwYXRjaCBjb250cmlidXRlZCBieSBEYXZpZCBQYXRpbm8pCisgICAgKiBNYWtlIHg1MDlwYXJzZV92ZXJpZnkoKSByZXR1cm4gQkFEQ0VSVF9DTl9NSVNNQVRDSCB3aGVuIGFuIGVtcHR5CisgICAgICBzdHJpbmcgaXMgcGFzc2VkIGFzIHRoZSBDTiAoYnVnIHJlcG9ydGVkIGJ5IHNwb29meSkKKyAgICAqIEFkZGVkIGFuIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSB0aGUgQk4gYXNzZW1ibHkgY29kZQorICAgICogVXBkYXRlZCByc2FfY2hlY2tfcHJpdmtleSgpIHRvIHZlcmlmeSB0aGF0IChEKkUpID0gMSAlIChQLTEpKihRLTEpCisgICAgKiBEaXNhYmxlZCBvYnNvbGV0ZSBoYXNoIGZ1bmN0aW9ucyBieSBkZWZhdWx0IChNRDIsIE1ENCk7IHVwZGF0ZWQKKyAgICAgIHNlbGZ0ZXN0IGFuZCBiZW5jaG1hcmsgdG8gbm90IHRlc3QgY2lwaGVycyB0aGF0IGhhdmUgYmVlbiBkaXNhYmxlZAorICAgICogVXBkYXRlZCB4NTA5cGFyc2VfY2VydF9pbmZvKCkgdG8gY29ycmVjdGx5IGRpc3BsYXkgYnl0ZSAwIG9mIHRoZQorICAgICAgc2VyaWFsIG51bWJlciwgc2V0dXAgY29ycmVjdCBzZXJ2ZXIgcG9ydCBpbiB0aGUgc3NsIGNsaWVudCBleGFtcGxlCisgICAgKiBGaXhlZCBhIGNyaXRpY2FsIGRlbmlhbC1vZi1zZXJ2aWNlIHdpdGggWC41MDkgY2VydC4gdmVyaWZpY2F0aW9uOgorICAgICAgcGVlciBtYXkgY2F1c2UgeHlzc2wgdG8gbG9vcCBpbmRlZmluaXRlbHkgYnkgc2VuZGluZyBhIGNlcnRpZmljYXRlCisgICAgICBmb3Igd2hpY2ggdGhlIFJTQSBzaWduYXR1cmUgY2hlY2sgZmFpbHMgKGJ1ZyByZXBvcnRlZCBieSBCZW5vaXQpCisgICAgKiBBZGRlZCB0ZXN0IHZlY3RvcnMgZm9yOiBBRVMtQ0JDLCBBRVMtQ0ZCLCBERVMtQ0JDIGFuZCAzREVTLUNCQywKKyAgICAgIEhNQUMtTUQ1LCBITUFDLVNIQTEsIEhNQUMtU0hBLTI1NiwgSE1BQy1TSEEtMzg0LCBhbmQgSE1BQy1TSEEtNTEyCisgICAgKiBGaXhlZCBITUFDLVNIQS0zODQgYW5kIEhNQUMtU0hBLTUxMiAodGhhbmtzIHRvIEpvc2ggU2lueWtpbikKKyAgICAqIE1vZGlmaWVkIHNzbF9wYXJzZV9jbGllbnRfa2V5X2V4Y2hhbmdlKCkgdG8gcHJvdGVjdCBhZ2FpbnN0CisgICAgICBEYW5pZWwgQmxlaWNoZW5iYWNoZXIgYXR0YWNrIG9uIFBLQ1MjMSB2MS41IHBhZGRpbmcsIGFzIHdlbGwKKyAgICAgIGFzIHRoZSBLbGltYS1Qb2tvcm55LVJvc2EgZXh0ZW5zaW9uIG9mIEJsZWljaGVuYmFjaGVyJ3MgYXR0YWNrCisgICAgKiBVcGRhdGVkIHJzYV9nZW5fa2V5KCkgc28gdGhhdCBjdHgtPk4gaXMgYWx3YXlzIG5iaXRzIGluIHNpemUKKyAgICAqIEZpeGVkIGFzc2VtYmx5IFBQQyBjb21waWxhdGlvbiBlcnJvcnMgb24gTWFjIE9TIFgsIHRoYW5rcyB0bworICAgICAgRGF2aWQgQmFycmV0dCBhbmQgRHVzYW4gU2VtZW4KKworPSBWZXJzaW9uIDAuOCByZWxlYXNlZCBvbiAyMDA3LTEwLTIwCisKKyAgICAqIE1vZGlmaWVkIHRoZSBITUFDIGZ1bmN0aW9ucyB0byBoYW5kbGUga2V5cyBsYXJnZXIKKyAgICAgIHRoYW4gNjQgYnl0ZXMsIHRoYW5rcyB0byBTdGVwaGFuZSBEZXNuZXV4IGFuZCBnYXJ5IG5nCisgICAgKiBGaXhlZCBzc2xfcmVhZF9yZWNvcmQoKSB0byBwcm9wZXJseSB1cGRhdGUgdGhlIGhhbmRzaGFrZQorICAgICAgbWVzc2FnZSBkaWdlc3RzLCB3aGljaCBmaXhlcyBJRTYvSUU3IGNsaWVudCBhdXRoZW50aWNhdGlvbgorICAgICogQ2xlYW5lZCB1cCB0aGUgWFlTU0wqICNkZWZpbmVzLCBzdWdnZXN0ZWQgYnkgQXpyaWVsIEZhc3RlbgorICAgICogRml4ZWQgbmV0X3JlY3YoKSwgdGhhbmtzIHRvIExvcmVueiBTY2hvcmkgYW5kIEVnb24gS29jamFuCisgICAgKiBBZGRlZCB1c2VyLWRlZmluZWQgY2FsbGJhY2tzIGZvciBoYW5kbGluZyBJL08gYW5kIHNlc3Npb25zCisgICAgKiBBZGRlZCBsb3RzIG9mIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIFNTTC9UTFMgZnVuY3Rpb25zCisgICAgKiBBZGRlZCBwcmVsaW1pbmFyeSBYLjUwOSBjZXJ0LiB3cml0aW5nIGJ5IFBhc2NhbCBWaXplbGkKKyAgICAqIEFkZGVkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHRoZSBWSUEgUGFkTG9jayByb3V0aW5lcworICAgICogQWRkZWQgQUVTLUNGQiBtb2RlIG9mIG9wZXJhdGlvbiwgY29udHJpYnV0ZWQgYnkgY2htaWtlCisgICAgKiBBZGRlZCBhbiBTU0wvVExTIHN0cmVzcyB0ZXN0aW5nIHByb2dyYW0gKHNzbF90ZXN0LmMpCisgICAgKiBVcGRhdGVkIHRoZSBSU0EgUEtDUyMxIGNvZGUgdG8gYWxsb3cgY2hvb3NpbmcgYmV0d2VlbgorICAgICAgUlNBX1BVQkxJQyBhbmQgUlNBX1BSSVZBVEUsIGFzIHN1Z2dlc3RlZCBieSBEYXZpZCBCYXJyZXR0CisgICAgKiBVcGRhdGVkIHNzbF9yZWFkKCkgdG8gc2tpcCAwLWxlbmd0aCByZWNvcmRzIGZyb20gT3BlblNTTAorICAgICogRml4ZWQgdGhlIG1ha2UgaW5zdGFsbCB0YXJnZXQgdG8gY29tcGx5IHdpdGggKkJTRCBtYWtlCisgICAgKiBGaXhlZCBhIGJ1ZyBpbiBtcGlfcmVhZF9iaW5hcnkoKSBvbiA2NC1iaXQgcGxhdGZvcm1zCisgICAgKiBtcGlfaXNfcHJpbWUoKSBzcGVlZHVwcywgdGhhbmtzIHRvIEtldmluIE1jTGF1Z2hsaW4KKyAgICAqIEZpeGVkIGEgbG9uZyBzdGFuZGluZyBtZW1vcnkgbGVhayBpbiBtcGlfaXNfcHJpbWUoKQorICAgICogUmVwbGFjZWQgcmVhbGxvYyB3aXRoIG1hbGxvYyBpbiBtcGlfZ3JvdygpLCBhbmQgc2V0CisgICAgICB0aGUgc2lnbiBvZiB6ZXJvIGFzIHBvc2l0aXZlIGluIG1waV9pbml0KCkgKHJlcG9ydGVkCisgICAgICBieSBKb25hdGhhbiBNLiBNY0N1bmUpCisKKz0gVmVyc2lvbiAwLjcgcmVsZWFzZWQgb24gMjAwNy0wNy0wNworCisgICAgKiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgTWljcm9CbGF6ZSBzb2Z0LWNvcmUgcHJvY2Vzc29yCisgICAgKiBGaXhlZCBhIGJ1ZyBpbiBzc2xfdGxzLmMgd2hpY2ggc29tZXRpbWVzIHByZXZlbnRlZCBTU0wKKyAgICAgIGNvbm5lY3Rpb25zIGZyb20gYmVpbmcgZXN0YWJsaXNoZWQgd2l0aCBub24tYmxvY2tpbmcgSS9PCisgICAgKiBGaXhlZCBhIGNvdXBsZSBidWdzIGluIHRoZSBWUzYgYW5kIFVOSVggTWFrZWZpbGVzCisgICAgKiBGaXhlZCB0aGUgIlBJQyByZWdpc3RlciBlYnggY2xvYmJlcmVkIGluIGFzbSIgYnVnCisgICAgKiBBZGRlZCBITUFDIHN0YXJ0cy91cGRhdGUvZmluaXNoIHN1cHBvcnQgZnVuY3Rpb25zCisgICAgKiBBZGRlZCB0aGUgU0hBLTIyNCwgU0hBLTM4NCBhbmQgU0hBLTUxMiBoYXNoIGZ1bmN0aW9ucworICAgICogRml4ZWQgdGhlIG5ldF9zZXRfKmJsb2NrIHJvdXRpbmVzLCB0aGFua3MgdG8gQW5kcmVhcworICAgICogQWRkZWQgYSBmZXcgZGVtb25zdHJhdGlvbiBwcm9ncmFtczogbWQ1c3VtLCBzaGExc3VtLAorICAgICAgZGhfY2xpZW50LCBkaF9zZXJ2ZXIsIHJzYV9nZW5rZXksIHJzYV9zaWduLCByc2FfdmVyaWZ5CisgICAgKiBBZGRlZCBuZXcgYmlnbnVtIGltcG9ydCBhbmQgZXhwb3J0IGhlbHBlciBmdW5jdGlvbnMKKyAgICAqIFJld3JvdGUgUkVBRE1FLnR4dCBpbiBwcm9ncmFtL3NzbC9jYSB0byBiZXR0ZXIgZXhwbGFpbgorICAgICAgaG93IHRvIGNyZWF0ZSBhIHRlc3QgUEtJCisKKz0gVmVyc2lvbiAwLjYgcmVsZWFzZWQgb24gMjAwNy0wNC0wMQorCisgICAgKiBDaXBoZXJzIHVzZWQgaW4gU1NML1RMUyBjYW4gbm93IGJlIGRpc2FibGVkIGF0IGNvbXBpbGUKKyAgICAgIHRpbWUsIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludCBvbiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgKiBBZGRlZCBtdWx0aXBseSBhc3NlbWJseSBjb2RlIGZvciB0aGUgVHJpQ29yZSBhbmQgbW9kaWZpZWQKKyAgICAgIGhhdmVnZV9zdHJ1Y3QgZm9yIHRoaXMgcHJvY2Vzc29yLCB0aGFua3MgdG8gRGF2aWQgUGF0acOxbworICAgICogQWRkZWQgbXVsdGlwbHkgYXNzZW1ibHkgY29kZSBmb3IgNjQtYml0IFBvd2VyUENzLAorICAgICAgdGhhbmtzIHRvIFBla2luZyBVbml2ZXJzaXR5IGFuZCB0aGUgT1NVIE9wZW4gU291cmNlIExhYgorICAgICogQWRkZWQgZXhwZXJpbWVudGFsIHN1cHBvcnQgb2YgUXVhbnR1bSBDcnlwdG9ncmFwaHkKKyAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGF1dG9jb25mLCBjb250cmlidXRlZCBieSBBcm5hdWQgQ29ybmV0CisgICAgKiBGaXhlZCAibG9uZyBsb25nIiBjb21waWxhdGlvbiBpc3N1ZXMgb24gSUEtNjQgYW5kIFBQQzY0CisgICAgKiBGaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIHh5c3NsLTAuNS90aW1pbmcuYzogaGFyZGNsb2NrCisgICAgICB3YXMgbm90IGJlaW5nIGNvcnJlY3RseSBkZWZpbmVkIG9uIEFSTSBhbmQgTUlQUworCis9IFZlcnNpb24gMC41IHJlbGVhc2VkIG9uIDIwMDctMDMtMDEKKworICAgICogQWRkZWQgbXVsdGlwbHkgYXNzZW1ibHkgY29kZSBmb3IgU1BBUkMgYW5kIEFscGhhCisgICAgKiBBZGRlZCAoYmV0YSkgc3VwcG9ydCBmb3Igbm9uLWJsb2NraW5nIEkvTyBvcGVyYXRpb25zCisgICAgKiBJbXBsZW1lbnRlZCBzZXNzaW9uIHJlc3VtaW5nIGFuZCBjbGllbnQgYXV0aGVudGljYXRpb24KKyAgICAqIEZpeGVkIHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzIG9uIFdpbkNFLCBNSU5JWCAzLCBQbGFuOQorICAgICAgKHRoYW5rcyB0byBCZW5qYW1pbiBOZXdtYW4pLCBIUC1VWCwgRnJlZUJTRCBhbmQgU29sYXJpcworICAgICogSW1wcm92ZWQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBFREgga2V5IGV4Y2hhbmdlCisgICAgKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB2YWxpZCBwYWNrZXRzIHdpdGggYSBwYXlsb2FkCisgICAgICBzaXplIG9mIDE2Mzg0IGJ5dGVzIHRvIGJlIHJlamVjdGVkCisKKz0gVmVyc2lvbiAwLjQgcmVsZWFzZWQgb24gMjAwNy0wMi0wMQorCisgICAgKiBBZGRlZCBzdXBwb3J0IGZvciBFcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlCisgICAgKiBBZGRlZCBtdWx0aXBseSBhc20gY29kZSBmb3IgU1NFMiwgQVJNLCBQUEMsIE1JUFMgYW5kIE02OEsKKyAgICAqIFZhcmlvdXMgaW1wcm92ZW1lbnQgdG8gdGhlIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gY29kZQorICAgICogUmV3cm90ZSB0aGUgaGVhZGVycyB0byBnZW5lcmF0ZSB0aGUgQVBJIGRvY3Mgd2l0aCBkb3h5Z2VuCisgICAgKiBGaXhlZCBhIGJ1ZyBpbiBzc2xfZW5jcnlwdF9idWYgKGluY29ycmVjdCBwYWRkaW5nIHdhcworICAgICAgZ2VuZXJhdGVkKSBhbmQgaW4gc3NsX3BhcnNlX2NsaWVudF9oZWxsbyAobWF4LiBjbGllbnQKKyAgICAgIHZlcnNpb24gd2FzIG5vdCBwcm9wZXJseSBzZXQpLCB0aGFua3MgdG8gRGlkaWVyIFJlYmVpeAorICAgICogRml4ZWQgYW5vdGhlciBidWcgaW4gc3NsX3BhcnNlX2NsaWVudF9oZWxsbzogY2xpZW50cyB3aXRoCisgICAgICBjaXBoZXJsaXN0cyBsYXJnZXIgdGhhbiA5NiBieXRlcyB3ZXJlIGluY29ycmVjdGx5IHJlamVjdGVkCisgICAgKiBGaXhlZCBhIGNvdXBsZSBtZW1vcnkgbGVhayBpbiB4NTA5X3JlYWQuYworCis9IFZlcnNpb24gMC4zIHJlbGVhc2VkIG9uIDIwMDctMDEtMDEKKworICAgICogQWRkZWQgc2VydmVyLXNpZGUgU1NMdjMgYW5kIFRMU3YxLjAgc3VwcG9ydAorICAgICogTXVsdGlwbGUgZml4ZXMgdG8gZW5oYW5jZSB0aGUgY29tcGF0aWJpbGl0eSB3aXRoIGcrKywKKyAgICAgIHRoYW5rcyB0byBYb3PDqSBBbnTDs24gT3Rlcm8gRmVycmVpcmEKKyAgICAqIEZpeGVkIGEgYnVnIGluIHRoZSBDQkMgY29kZSwgdGhhbmtzIHRvIGRvd3N0OyBhbHNvLAorICAgICAgdGhlIGJpZ251bSBjb2RlIGlzIG5vIGxvbmdlciBkZXBlbmRlbnQgb24gbG9uZyBsb25nCisgICAgKiBVcGRhdGVkIHJzYV9wa2NzMV9zaWduIHRvIGhhbmRsZSBhcmJpdHJhcnkgbGFyZ2UgaW5wdXRzCisgICAgKiBVcGRhdGVkIHRpbWluZy5jIGZvciBpbXByb3ZlZCBjb21wYXRpYmlsaXR5IHdpdGggaTM4NgorICAgICAgYW5kIDQ4NiBwcm9jZXNzb3JzLCB0aGFua3MgdG8gQXJuYXVkIENvcm5ldAorCis9IFZlcnNpb24gMC4yIHJlbGVhc2VkIG9uIDIwMDYtMTItMDEKKworICAgICogVXBkYXRlZCB0aW1pbmcuYyB0byBzdXBwb3J0IEFSTSBhbmQgTUlQUyBhcmNoCisgICAgKiBVcGRhdGVkIHRoZSBNUEkgY29kZSB0byBzdXBwb3J0IDgwODYgb24gTVNWQyAxLjUKKyAgICAqIEFkZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGF0IHRoZSB0b3Agb2YgaGF2ZWdlLmgKKyAgICAqIEZpeGVkIGEgYnVnIGluIHNoYTJfaG1hYywgdGhhbmtzIHRvIG5ld3NvZnQvV2VuZmFuZyBaaGFuZworICAgICogRml4ZWQgYSBidWcgcmVwb3J0ZWQgYnkgQWRyaWFuIFLDvGVnc2VnZ2VyIGluIHg1MDlfcmVhZF9rZXkKKyAgICAqIEZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IFRvcnN0ZW4gTGF1dGVyIGluIHNzbF9yZWFkX3JlY29yZAorICAgICogRml4ZWQgYSBidWcgaW4gcnNhX2NoZWNrX3ByaXZrZXkgdGhhdCB3b3VsZCB3cm9uZ2x5IGNhdXNlCisgICAgICB2YWxpZCBSU0Ega2V5cyB0byBiZSBkaXNtaXNzZWQgKHRoYW5rcyB0byBvbGR3b2xmKQorICAgICogRml4ZWQgYSBidWcgaW4gbXBpX2lzX3ByaW1lIHRoYXQgY2F1c2VkIHNvbWUgcHJpbWVzIHRvIGZhaWwKKyAgICAgIHRoZSBNaWxsZXItUmFiaW4gcHJpbWFsaXR5IHRlc3QKKworICAgIEknZCBhbHNvIGxpa2UgdG8gdGhhbmsgWW91bsOocyBIYWZyaSBmb3IgdGhlIENSVVggbGludXggcG9ydCwKKyAgICBLaGFsaWwgUGV0aXQgd2hvIGFkZGVkIFh5U1NMIGludG8gcGtnc3JjIGFuZCBBcm5hdWQgQ29ybmV0CisgICAgd2hvIG1haW50YWlucyB0aGUgRGViaWFuIHBhY2thZ2UgOi0pCisKKz0gVmVyc2lvbiAwLjEgcmVsZWFzZWQgb24gMjAwNi0xMS0wMQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vRGFydENvbmZpZ3VyYXRpb24udGNsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL0RhcnRDb25maWd1cmF0aW9uLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmEwZjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL0RhcnRDb25maWd1cmF0aW9uLnRjbApAQCAtMCwwICsxLDQgQEAKK1NpdGU6IGxvY2FsaG9zdAorQnVpbGROYW1lOiBtYmVkIFRMUy10ZXN0CitDb3ZlcmFnZUNvbW1hbmQ6IC91c3IvYmluL2djb3YKK01lbW9yeUNoZWNrQ29tbWFuZDogL3Vzci9iaW4vdmFsZ3JpbmQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9MSUNFTlNFIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2YThlNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9MSUNFTlNFCkBAIC0wLDAgKzEsMiBAQAorVW5sZXNzIHNwZWNpZmljYWxseSBpbmRpY2F0ZWQgb3RoZXJ3aXNlIGluIGEgZmlsZSwgZmlsZXMgYXJlIGxpY2Vuc2VkCit1bmRlciB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlLCBhcyBjYW4gYmUgZm91bmQgaW46IGFwYWNoZS0yLjAudHh0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vTWFrZWZpbGUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3NTg2OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9NYWtlZmlsZQpAQCAtMCwwICsxLDExMCBAQAorCitERVNURElSPS91c3IvbG9jYWwKK1BSRUZJWD1tYmVkdGxzXworCisuU0lMRU5UOgorCisuUEhPTlk6IGFsbCBub190ZXN0IHByb2dyYW1zIGxpYiB0ZXN0cyBpbnN0YWxsIHVuaW5zdGFsbCBjbGVhbiB0ZXN0IGNoZWNrIGNvdnRlc3QgbGNvdiBhcGlkb2MgYXBpZG9jX2NsZWFuCisKK2FsbDogcHJvZ3JhbXMgdGVzdHMKKwkkKE1BS0UpIHBvc3RfYnVpbGQKKworbm9fdGVzdDogcHJvZ3JhbXMKKworcHJvZ3JhbXM6IGxpYgorCSQoTUFLRSkgLUMgcHJvZ3JhbXMKKworbGliOgorCSQoTUFLRSkgLUMgbGlicmFyeQorCit0ZXN0czogbGliCisJJChNQUtFKSAtQyB0ZXN0cworCitpZm5kZWYgV0lORE9XUworaW5zdGFsbDogbm9fdGVzdAorCW1rZGlyIC1wICQoREVTVERJUikvaW5jbHVkZS9tYmVkdGxzCisJY3AgLXIgaW5jbHVkZS9tYmVkdGxzICQoREVTVERJUikvaW5jbHVkZQorCQorCW1rZGlyIC1wICQoREVTVERJUikvbGliCisJY3AgLVJQIGxpYnJhcnkvbGlibWJlZHRscy4qICAgICQoREVTVERJUikvbGliCisJY3AgLVJQIGxpYnJhcnkvbGlibWJlZHg1MDkuKiAgICQoREVTVERJUikvbGliCisJY3AgLVJQIGxpYnJhcnkvbGlibWJlZGNyeXB0by4qICQoREVTVERJUikvbGliCisJCisJbWtkaXIgLXAgJChERVNURElSKS9iaW4KKwlmb3IgcCBpbiBwcm9ncmFtcy8qLyogOyBkbyAgICAgICAgICAgICAgXAorCSAgICBpZiBbIC14ICQkcCBdICYmIFsgISAtZCAkJHAgXSA7ICAgICBcCisJICAgIHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgIGY9JChQUkVGSVgpYGJhc2VuYW1lICQkcGAgOyAgICAgXAorCSAgICAgICAgY3AgJCRwICQoREVTVERJUikvYmluLyQkZiA7ICAgICBcCisJICAgIGZpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkb25lCisKK3VuaW5zdGFsbDoKKwlybSAtcmYgJChERVNURElSKS9pbmNsdWRlL21iZWR0bHMKKwlybSAtZiAkKERFU1RESVIpL2xpYi9saWJtYmVkdGxzLioKKwlybSAtZiAkKERFU1RESVIpL2xpYi9saWJtYmVkeDUwOS4qCisJcm0gLWYgJChERVNURElSKS9saWIvbGlibWJlZGNyeXB0by4qCisJCisJZm9yIHAgaW4gcHJvZ3JhbXMvKi8qIDsgZG8gICAgICAgICAgICAgIFwKKwkgICAgaWYgWyAteCAkJHAgXSAmJiBbICEgLWQgJCRwIF0gOyAgICAgXAorCSAgICB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICBmPSQoUFJFRklYKWBiYXNlbmFtZSAkJHBgIDsgICAgIFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikvYmluLyQkZiA7ICAgICAgXAorCSAgICBmaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG9uZQorZW5kaWYKKworV0FSTklOR19CT1JERVIgICAgICA9KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuCitOVUxMX0VOVFJPUFlfV0FSTl9MMT0qKioqICBXQVJOSU5HISAgTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSBkZWZpbmVkISAqKioqXG4KK05VTExfRU5UUk9QWV9XQVJOX0wyPSoqKiogIFRISVMgQlVJTEQgSEFTIE5PIERFRklORUQgRU5UUk9QWSBTT1VSQ0VTICAgICoqKipcbgorTlVMTF9FTlRST1BZX1dBUk5fTDM9KioqKiAgQU5EIElTICpOT1QqIFNVSVRBQkxFIEZPUiBQUk9EVUNUSU9OIFVTRSAgICAgKioqKlxuCisKK05VTExfRU5UUk9QWV9XQVJOSU5HPVxuJChXQVJOSU5HX0JPUkRFUikkKE5VTExfRU5UUk9QWV9XQVJOX0wxKSQoTlVMTF9FTlRST1BZX1dBUk5fTDIpJChOVUxMX0VOVFJPUFlfV0FSTl9MMykkKFdBUk5JTkdfQk9SREVSKQorCisjIFBvc3QgYnVpbGQgc3RlcHMKK3Bvc3RfYnVpbGQ6CitpZm5kZWYgV0lORE9XUworCSMgSWYgTlVMTCBFbnRyb3B5IGlzIGNvbmZpZ3VyZWQsIGRpc3BsYXkgYW4gYXBwcm9wcmlhdGUgd2FybmluZworCS1zY3JpcHRzL2NvbmZpZy5wbCBnZXQgTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSAmJiAoWyAkJD8gLWVxIDAgXSkgJiYgXAorCSAgICBlY2hvICckKE5VTExfRU5UUk9QWV9XQVJOSU5HKScKK2VuZGlmCisKK2NsZWFuOgorCSQoTUFLRSkgLUMgbGlicmFyeSBjbGVhbgorCSQoTUFLRSkgLUMgcHJvZ3JhbXMgY2xlYW4KKwkkKE1BS0UpIC1DIHRlc3RzIGNsZWFuCitpZm5kZWYgV0lORE9XUworCWZpbmQgLiBcKCAtbmFtZSBcKi5nY25vIC1vIC1uYW1lIFwqLmdjZGEgLW8gLW5hbWUgXCouaW5mbyBcKSAtZXhlYyBybSB7fSArCitlbmRpZgorCitjaGVjazogbGliIHRlc3RzCisJJChNQUtFKSAtQyB0ZXN0cyBjaGVjaworCit0ZXN0OiBjaGVjaworCitpZm5kZWYgV0lORE9XUworIyBub3RlOiBmb3IgY292ZXJhZ2UgdGVzdGluZywgYnVpbGQgd2l0aDoKKyMgbWFrZSBDRkxBR1M9Jy0tY292ZXJhZ2UgLWczIC1PMCcKK2NvdnRlc3Q6CisJJChNQUtFKSBjaGVjaworCXByb2dyYW1zL3Rlc3Qvc2VsZnRlc3QKKwl0ZXN0cy9jb21wYXQuc2gKKwl0ZXN0cy9zc2wtb3B0LnNoCisKK2xjb3Y6CisJcm0gLXJmIENvdmVyYWdlCisJbGNvdiAtLWNhcHR1cmUgLS1pbml0aWFsIC0tZGlyZWN0b3J5IGxpYnJhcnkgLW8gZmlsZXMuaW5mbworCWxjb3YgLS1jYXB0dXJlIC0tZGlyZWN0b3J5IGxpYnJhcnkgLW8gdGVzdHMuaW5mbworCWxjb3YgLS1hZGQtdHJhY2VmaWxlIGZpbGVzLmluZm8gLS1hZGQtdHJhY2VmaWxlIHRlc3RzLmluZm8gLW8gYWxsLmluZm8KKwlsY292IC0tcmVtb3ZlIGFsbC5pbmZvIC1vIGZpbmFsLmluZm8gJyouaCcKKwlnZW5kZXNjIHRlc3RzL0Rlc2NyaXB0aW9ucy50eHQgLW8gZGVzY3JpcHRpb25zCisJZ2VuaHRtbCAtLXRpdGxlICJtYmVkIFRMUyIgLS1kZXNjcmlwdGlvbi1maWxlIGRlc2NyaXB0aW9ucyAtLWtlZXAtZGVzY3JpcHRpb25zIC0tbGVnZW5kIC0tbm8tYnJhbmNoLWNvdmVyYWdlIC1vIENvdmVyYWdlIGZpbmFsLmluZm8KKwlybSAtZiBmaWxlcy5pbmZvIHRlc3RzLmluZm8gYWxsLmluZm8gZmluYWwuaW5mbyBkZXNjcmlwdGlvbnMKKworYXBpZG9jOgorCW1rZGlyIC1wIGFwaWRvYworCWRveHlnZW4gZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlCisKK2FwaWRvY19jbGVhbjoKKwlybSAtcmYgYXBpZG9jCitlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhZTQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9SRUFETUUubWQKQEAgLTAsMCArMSwxNzYgQEAKK1JFQURNRSBmb3IgbWJlZCBUTFMKKz09PT09PT09PT09PT09PT09PT0KKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCittYmVkIFRMUyBzaG91bGQgYnVpbGQgb3V0IG9mIHRoZSBib3ggb24gbW9zdCBzeXN0ZW1zLiBTb21lIHBsYXRmb3JtIHNwZWNpZmljIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZnVsbHkgZG9jdW1lbnRlZCBjb25maWd1cmF0aW9uIGZpbGUgYGluY2x1ZGUvbWJlZHRscy9jb25maWcuaGAsIHdoaWNoIGlzIGFsc28gdGhlIHBsYWNlIHdoZXJlIGZlYXR1cmVzIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBmaWxlIGNhbiBiZSBlZGl0ZWQgbWFudWFsbHksIG9yIGluIGEgbW9yZSBwcm9ncmFtbWF0aWMgd2F5IHVzaW5nIHRoZSBQZXJsIHNjcmlwdCBgc2NyaXB0cy9jb25maWcucGxgICh1c2UgYC0taGVscGAgZm9yIHVzYWdlIGluc3RydWN0aW9ucykuCisKK0NvbXBpbGVyIG9wdGlvbnMgY2FuIGJlIHNldCB1c2luZyBjb252ZW50aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgYENDYCBhbmQgYENGTEFHU2Agd2hlbiB1c2luZyB0aGUgTWFrZSBhbmQgQ01ha2UgYnVpbGQgc3lzdGVtIChzZWUgYmVsb3cpLgorCitDb21waWxpbmcKKy0tLS0tLS0tLQorCitUaGVyZSBhcmUgY3VycmVudGx5IGZvdXIgYWN0aXZlIGJ1aWxkIHN5c3RlbXMgdXNlZCB3aXRoaW4gbWJlZCBUTFMgcmVsZWFzZXM6CisKKy0gICB5b3R0YQorLSAgIE1ha2UKKy0gICBDTWFrZQorLSAgIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIChWaXN1YWwgU3R1ZGlvIDYgYW5kIFZpc3VhbCBTdHVkaW8gMjAxMCkKKworVGhlIG1haW4gc3lzdGVtcyB1c2VkIGZvciBkZXZlbG9wbWVudCBhcmUgQ01ha2UgYW5kIE1ha2UuIFRob3NlIHN5c3RlbXMgYXJlIGFsd2F5cyBjb21wbGV0ZSBhbmQgdXAtdG8tZGF0ZS4gVGhlIG90aGVycyBzaG91bGQgcmVmbGVjdCBhbGwgY2hhbmdlcyBwcmVzZW50IGluIHRoZSBDTWFrZSBhbmQgTWFrZSBidWlsZCBzeXN0ZW0sIGFsdGhvdWdoIGZlYXR1cmVzIG1heSBub3QgYmUgcG9ydGVkIHRoZXJlIGF1dG9tYXRpY2FsbHkuCisKK1lvdHRhLCBhcyBhIGJ1aWxkIHN5c3RlbSwgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyIGJ1aWxkIHN5c3RlbXM6CisKKy0gICBpdCBwcm92aWRlcyBhIG1pbmltYWxpc3RpYyBjb25maWd1cmF0aW9uIGZpbGUgYnkgZGVmYXVsdAorLSAgIGRlcGVuZGluZyBvbiB0aGUgeW90dGEgdGFyZ2V0LCBmZWF0dXJlcyBvZiBtYmVkIE9TIG1heSBiZSB1c2VkIGluIGV4YW1wbGVzIGFuZCB0ZXN0cworCitUaGUgTWFrZSBhbmQgQ01ha2UgYnVpbGQgc3lzdGVtcyBjcmVhdGUgdGhyZWUgbGlicmFyaWVzOiBsaWJtYmVkY3J5cHRvLCBsaWJtYmVkeDUwOSwgYW5kIGxpYm1iZWR0bHMuIE5vdGUgdGhhdCBsaWJtYmVkdGxzIGRlcGVuZHMgb24gbGlibWJlZHg1MDkgYW5kIGxpYm1iZWRjcnlwdG8sIGFuZCBsaWJtYmVkeDUwOSBkZXBlbmRzIG9uIGxpYm1iZWRjcnlwdG8uIEFzIGEgcmVzdWx0LCBzb21lIGxpbmtlcnMgd2lsbCBleHBlY3QgZmxhZ3MgdG8gYmUgaW4gYSBzcGVjaWZpYyBvcmRlciwgZm9yIGV4YW1wbGUgdGhlIEdOVSBsaW5rZXIgd2FudHMgYC1sbWJlZHRscyAtbG1iZWR4NTA5IC1sbWJlZGNyeXB0b2AuIEFsc28sIHdoZW4gbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzIHVzaW5nIGRsb3BlbigpLCB5b3UnbGwgbmVlZCB0byBsb2FkIGxpYm1iZWRjcnlwdG8gZmlyc3QsIHRoZW4gbGlibWJlZHg1MDksIGJlZm9yZSB5b3UgY2FuIGxvYWQgbGlibWJlZHRscy4KKworIyMjIFlvdHRhCisKK1t5b3R0YV0oaHR0cDovL3lvdHRhYnVpbGQub3JnKSBpcyBhIHBhY2thZ2UgbWFuYWdlciBhbmQgYnVpbGQgc3lzdGVtIGRldmVsb3BlZCBieSBtYmVkLCBhbmQgaXMgdGhlIGJ1aWxkIHN5c3RlbSBvZiBtYmVkIE9TIDE2LjAzLiBUbyBpbnN0YWxsIGl0IG9uIHlvdXIgcGxhdGZvcm0sIHBsZWFzZSBmb2xsb3cgdGhlIHlvdHRhIFtpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zXShodHRwOi8vZG9jcy55b3R0YWJ1aWxkLm9yZy8jaW5zdGFsbGluZykuCisKK09uY2UgeW90dGEgaXMgaW5zdGFsbGVkLCB5b3UgY2FuIHVzZSBpdCB0byBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgbWJlZCBUTFMgZnJvbSB0aGUgeW90dGEgcmVnaXN0cnkgd2l0aDoKKworICAgIHlvdHRhIGluc3RhbGwgbWJlZHRscworCithbmQgYnVpbGQgaXQgd2l0aDoKKworICAgIHlvdHRhIGJ1aWxkCisKK0lmLCBvbiB0aGUgb3RoZXIgaGFuZCwgeW91IGFscmVhZHkgaGF2ZSBhIGNvcHkgb2YgbWJlZCBUTFMgZnJvbSBhIHNvdXJjZSBvdGhlciB0aGFuIHRoZSB5b3R0YSByZWdpc3RyeSwgZm9yIGV4YW1wbGUgZnJvbSBjbG9uaW5nIG91ciBHaXRIdWIgcmVwb3NpdG9yeSwgb3IgZnJvbSBkb3dubG9hZGluZyBhIHRhcmJhbGwgb2YgdGhlIHN0YW5kYWxvbmUgZWRpdGlvbiwgdGhlbiB5b3UnbGwgZmlyc3QgbmVlZCB0byBnZW5lcmF0ZSB0aGUgeW90dGEgbW9kdWxlIGJ5IHJ1bm5pbmc6CisKKyAgICB5b3R0YS9jcmVhdGUtbW9kdWxlLnNoCisKK1RoaXMgc2hvdWxkIGJlIGV4ZWN1dGVkIGZyb20gdGhlIHJvb3QgbWJlZCBUTFMgcHJvamVjdCBkaXJlY3RvcnkuIFRoaXMgd2lsbCBjcmVhdGUgdGhlIHlvdHRhIG1vZHVsZSBpbiB0aGUgYHlvdHRhL21vZHVsZWAgZGlyZWN0b3J5IHdpdGhpbiBpdC4gWW91IGNhbiB0aGVuIGNoYW5nZSB0byB0aGF0IGRpcmVjdG9yeSBhbmQgYnVpbGQgYXMgdXN1YWw6CisKKyAgICBjZCB5b3R0YS9tb2R1bGUKKyAgICB5b3R0YSBidWlsZAorCitJbiBhbnkgY2FzZSwgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gc2V0IHRoZSB5b3R0YSB0YXJnZXQgYmVmb3JlIGJ1aWxkaW5nIHVubGVzcyBpdCBoYXMgYWxyZWFkeSBiZWVuIHNldCBnbG9iYWxseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgeW90dGEsIHBsZWFzZSBjb25zdWx0IHRoZSBbeW90dGEgZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MueW90dGFidWlsZC5vcmcvKS4KKworRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgeW90dGEvbWJlZCBPUyBlZGl0aW9uIG9mIG1iZWQgVExTLCBpbmNsdWRpbmcgZXhhbXBsZSBwcm9ncmFtcywgcGxlYXNlIGNvbnN1bHQgdGhlIFtSZWFkbWUgYXQgdGhlIHJvb3Qgb2YgdGhlIHlvdHRhIG1vZHVsZV0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9ibG9iL2RldmVsb3BtZW50L3lvdHRhL2RhdGEvUkVBRE1FLm1kKS4KKworIyMjIE1ha2UKKworV2UgaW50ZW50aW9uYWxseSBvbmx5IHVzZSB0aGUgbWluaW11bSBvZiBgTWFrZWAgZnVuY3Rpb25hbGl0eSwgYXMgYSBsb3Qgb2YgYE1ha2VgIGZlYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGFsbCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIE1ha2Ugb3Igb24gZGlmZmVyZW50IHBsYXRmb3Jtcy4gQXMgc3VjaCwgdGhlIE1ha2VmaWxlcyBzb21ldGltZXMgcmVxdWlyZSBzb21lIG1hbnVhbCBjaGFuZ2VzIG9yIGV4cG9ydCBzdGF0ZW1lbnRzIGluIG9yZGVyIHRvIHdvcmsgZm9yIHlvdXIgcGxhdGZvcm0uCisKK0luIG9yZGVyIHRvIGJ1aWxkIGZyb20gdGhlIHNvdXJjZSBjb2RlIHVzaW5nIE1ha2UsIGp1c3QgZW50ZXIgYXQgdGhlIGNvbW1hbmQgbGluZToKKworICAgIG1ha2UKKworSW4gb3JkZXIgdG8gcnVuIHRoZSB0ZXN0cywgZW50ZXI6CisKKyAgICBtYWtlIGNoZWNrCisKK1RoZSB0ZXN0cyBuZWVkIFBlcmwgdG8gYmUgYnVpbHQgYW5kIHJ1bi4gSWYgeW91IGRvbid0IGhhdmUgUGVybCBpbnN0YWxsZWQsIHlvdSBjYW4gc2tpcCBidWlsZGluZyB0aGUgdGVzdHMgd2l0aDoKKworICAgIG1ha2Ugbm9fdGVzdAorCitZb3UnbGwgc3RpbGwgYmUgYWJsZSB0byBydW4gYSBtdWNoIHNtYWxsZXIgc2V0IG9mIHRlc3RzIHdpdGg6CisKKyAgICBwcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0CisKK0luIG9yZGVyIHRvIGJ1aWxkIGZvciBhIFdpbmRvd3MgcGxhdGZvcm0sIHlvdSBzaG91bGQgdXNlIGBXSU5ET1dTX0JVSUxEPTFgIGlmIHRoZSB0YXJnZXQgaXMgV2luZG93cyBidXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIFVuaXgtbGlrZSAoZm9yIGluc3RhbmNlIHdoZW4gY3Jvc3MtY29tcGlsaW5nLCBvciBjb21waWxpbmcgZnJvbSBhbiBNU1lTIHNoZWxsKSwgYW5kIGBXSU5ET1dTPTFgIGlmIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBhIFdpbmRvd3Mgc2hlbGwgKGZvciBpbnN0YW5jZSB1c2luZyBtaW5ndzMyLW1ha2UpIChpbiB0aGF0IGNhc2Ugc29tZSB0YXJnZXRzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSkuCisKK1NldHRpbmcgdGhlIHZhcmlhYmxlIGBTSEFSRURgIGluIHlvdXIgZW52aXJvbm1lbnQgd2lsbCBidWlsZCBzaGFyZWQgbGlicmFyaWVzIGluIGFkZGl0aW9uIHRvIHRoZSBzdGF0aWMgbGlicmFyaWVzLiBTZXR0aW5nIGBERUJVR2AgZ2l2ZXMgeW91IGEgZGVidWcgYnVpbGQuIFlvdSBjYW4gb3ZlcnJpZGUgYENGTEFHU2AgYW5kIGBMREZMQUdTYCBieSBzZXR0aW5nIHRoZW0gaW4geW91ciBlbnZpcm9ubWVudCBvciBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmU7IGlmIHlvdSBkbyBzbywgZXNzZW50aWFsIHBhcnRzIHN1Y2ggYXMgYC1JYCB3aWxsIHN0aWxsIGJlIHByZXNlcnZlZC4gV2FybmluZyBvcHRpb25zIG1heSBiZSBvdmVycmlkZGVuIHNlcGFyYXRlbHkgdXNpbmcgYFdBUk5JTkdfQ0ZMQUdTYC4KKworRGVwZW5kaW5nIG9uIHlvdXIgcGxhdGZvcm0sIHlvdSBtaWdodCBydW4gaW50byBzb21lIGlzc3Vlcy4gUGxlYXNlIGNoZWNrIHRoZSBNYWtlZmlsZXMgaW4gYGxpYnJhcnkvYCwgYHByb2dyYW1zL2AgYW5kIGB0ZXN0cy9gIGZvciBvcHRpb25zIHRvIG1hbnVhbGx5IGFkZCBvciByZW1vdmUgZm9yIHNwZWNpZmljIHBsYXRmb3Jtcy4gWW91IGNhbiBhbHNvIGNoZWNrIFt0aGUgbWJlZCBUTFMgS25vd2xlZGdlIEJhc2VdKGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiKSBmb3IgYXJ0aWNsZXMgb24geW91ciBwbGF0Zm9ybSBvciBpc3N1ZS4KKworSW4gY2FzZSB5b3UgZmluZCB0aGF0IHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBlbHNlIGFzIHdlbGwsIHBsZWFzZSBsZXQgdXMga25vdyB3aGF0LCBzbyB3ZSBjYW4gYWRkIGl0IHRvIHRoZSBbbWJlZCBUTFMga25vd2xlZGdlIGJhc2VdKGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiKS4KKworIyMjIENNYWtlCisKK0luIG9yZGVyIHRvIGJ1aWxkIHRoZSBzb3VyY2UgdXNpbmcgQ01ha2UsIGp1c3QgZW50ZXIgYXQgdGhlIGNvbW1hbmQgbGluZToKKworICAgIGNtYWtlIC4KKyAgICBtYWtlCisKK0luIG9yZGVyIHRvIHJ1biB0aGUgdGVzdHMsIGVudGVyOgorCisgICAgbWFrZSB0ZXN0CisKK1RoZSB0ZXN0IHN1aXRlcyBuZWVkIFBlcmwgdG8gYmUgYnVpbHQuIElmIHlvdSBkb24ndCBoYXZlIFBlcmwgaW5zdGFsbGVkLCB5b3UnbGwgd2FudCB0byBkaXNhYmxlIHRoZSB0ZXN0IHN1aXRlcyB3aXRoOgorCisgICAgY21ha2UgLURFTkFCTEVfVEVTVElORz1PZmYgLgorCitJZiB5b3UgZGlzYWJsZWQgdGhlIHRlc3Qgc3VpdGVzLCBidXQga2VwdCB0aGUgcHJvZ3JhbXMgZW5hYmxlZCwgeW91IGNhbiBzdGlsbCBydW4gYSBtdWNoIHNtYWxsZXIgc2V0IG9mIHRlc3RzIHdpdGg6CisKKyAgICBwcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0CisKK1RvIGNvbmZpZ3VyZSBDTWFrZSBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcywgdXNlOgorCisgICAgY21ha2UgLURVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWT1PbiAuCisKK1RoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBidWlsZCBtb2RlcyBhdmFpbGFibGUgd2l0aGluIHRoZSBDTWFrZSBidWlsZHN5c3RlbS4gTW9zdCBvZiB0aGVtIGFyZSBhdmFpbGFibGUgZm9yIGdjYyBhbmQgY2xhbmcsIHRob3VnaCBzb21lIGFyZSBjb21waWxlci1zcGVjaWZpYzoKKworLSAgIFJlbGVhc2UuIFRoaXMgZ2VuZXJhdGVzIHRoZSBkZWZhdWx0IGNvZGUgd2l0aG91dCBhbnkgdW5uZWNlc3NhcnkgaW5mb3JtYXRpb24gaW4gdGhlIGJpbmFyeSBmaWxlcy4KKy0gICBEZWJ1Zy4gVGhpcyBnZW5lcmF0ZXMgZGVidWcgaW5mb3JtYXRpb24gYW5kIGRpc2FibGVzIG9wdGltaXphdGlvbiBvZiB0aGUgY29kZS4KKy0gICBDb3ZlcmFnZS4gVGhpcyBnZW5lcmF0ZXMgY29kZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBpbiBhZGRpdGlvbiB0byBkZWJ1ZyBpbmZvcm1hdGlvbi4KKy0gICBBU2FuLiBUaGlzIGluc3RydW1lbnRzIHRoZSBjb2RlIHdpdGggQWRkcmVzc1Nhbml0aXplciB0byBjaGVjayBmb3IgbWVtb3J5IGVycm9ycy4gKFRoaXMgaW5jbHVkZXMgTGVha1Nhbml0aXplciwgd2l0aCByZWNlbnQgdmVyc2lvbiBvZiBnY2MgYW5kIGNsYW5nLikgKFdpdGggcmVjZW50IHZlcnNpb24gb2YgY2xhbmcsIHRoaXMgbW9kZSBhbHNvIGluc3RydW1lbnRzIHRoZSBjb2RlIHdpdGggVW5kZWZpbmVkU2FuaXRpemVyIHRvIGNoZWNrIGZvciB1bmRlZmluZWQgYmVoYXZpb3VyLikKKy0gICBBU2FuRGJnLiBTYW1lIGFzIEFTYW4gYnV0IHNsb3dlciwgd2l0aCBkZWJ1ZyBpbmZvcm1hdGlvbiBhbmQgYmV0dGVyIHN0YWNrIHRyYWNlcy4KKy0gICBNZW1TYW4uIFRoaXMgaW5zdHJ1bWVudHMgdGhlIGNvZGUgd2l0aCBNZW1vcnlTYW5pdGl6ZXIgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGlzZWQgbWVtb3J5IHJlYWRzLiBFeHBlcmltZW50YWwsIG5lZWRzIHJlY2VudCBjbGFuZyBvbiBMaW51eC94ODZcXzY0LgorLSAgIE1lbVNhbkRiZy4gU2FtZSBhcyBNZW1TYW4gYnV0IHNsb3dlciwgd2l0aCBkZWJ1ZyBpbmZvcm1hdGlvbiwgYmV0dGVyIHN0YWNrIHRyYWNlcyBhbmQgb3JpZ2luIHRyYWNraW5nLgorLSAgIENoZWNrLiBUaGlzIGFjdGl2YXRlcyB0aGUgY29tcGlsZXIgd2FybmluZ3MgdGhhdCBkZXBlbmQgb24gb3B0aW1pemF0aW9uIGFuZCB0cmVhdHMgYWxsIHdhcm5pbmdzIGFzIGVycm9ycy4KKworU3dpdGNoaW5nIGJ1aWxkIG1vZGVzIGluIENNYWtlIGlzIHNpbXBsZS4gRm9yIGRlYnVnIG1vZGUsIGVudGVyIGF0IHRoZSBjb21tYW5kIGxpbmU6CisKKyAgICBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFPURlYnVnIC4KKworVG8gbGlzdCBvdGhlciBhdmFpbGFibGUgQ01ha2Ugb3B0aW9ucywgdXNlOgorCisgICAgY21ha2UgLUxICisKK05vdGUgdGhhdCwgd2l0aCBDTWFrZSwgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb21waWxlciBvciBpdHMgb3B0aW9ucyBhZnRlciB5b3UgYWxyZWFkeSByYW4gQ01ha2UsIHlvdSBuZWVkIHRvIGNsZWFyIGl0cyBjYWNoZSBmaXJzdCwgZS5nLiAodXNpbmcgR05VIGZpbmQpOgorCisgICAgZmluZCAuIC1pbmFtZSAnKmNtYWtlKicgLW5vdCAtbmFtZSBDTWFrZUxpc3RzLnR4dCAtZXhlYyBybSAtcmYge30gKworICAgIENDPWdjYyBDRkxBR1M9Jy1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyAtV2EsLS1ub2V4ZWNzdGFjaycgY21ha2UgLgorCisjIyMgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8KKworVGhlIGJ1aWxkIGZpbGVzIGZvciBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBhcmUgZ2VuZXJhdGVkIGZvciBWaXN1YWwgU3R1ZGlvIDIwMTAuCisKK1RoZSBzb2x1dGlvbiBmaWxlIGBtYmVkVExTLnNsbmAgY29udGFpbnMgYWxsIHRoZSBiYXNpYyBwcm9qZWN0cyBuZWVkZWQgdG8gYnVpbGQgdGhlIGxpYnJhcnkgYW5kIGFsbCB0aGUgcHJvZ3JhbXMuIFRoZSBmaWxlcyBpbiB0ZXN0cyBhcmUgbm90IGdlbmVyYXRlZCBhbmQgY29tcGlsZWQsIGFzIHRoZXNlIG5lZWQgYSBwZXJsIGVudmlyb25tZW50IGFzIHdlbGwuIEhvd2V2ZXIsIHRoZSBzZWxmdGVzdCBwcm9ncmFtIGluIGBwcm9ncmFtcy90ZXN0L2AgaXMgc3RpbGwgYXZhaWxhYmxlLgorCitFeGFtcGxlIHByb2dyYW1zCistLS0tLS0tLS0tLS0tLS0tCisKK1dlJ3ZlIGluY2x1ZGVkIGV4YW1wbGUgcHJvZ3JhbXMgZm9yIGEgbG90IG9mIGRpZmZlcmVudCBmZWF0dXJlcyBhbmQgdXNlcyBpbiBgcHJvZ3JhbXMvYC4gTW9zdCBwcm9ncmFtcyBvbmx5IGZvY3VzIG9uIGEgc2luZ2xlIGZlYXR1cmUgb3IgdXNhZ2Ugc2NlbmFyaW8sIHNvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gY29weWluZyBwYXJ0cyBvZiB0aGUgY29kZS4KKworVGVzdHMKKy0tLS0tCisKK21iZWQgVExTIGluY2x1ZGVzIGFuIGVsYWJvcmF0ZSB0ZXN0IHN1aXRlIGluIGB0ZXN0cy9gIHRoYXQgaW5pdGlhbGx5IHJlcXVpcmVzIFBlcmwgdG8gZ2VuZXJhdGUgdGhlIHRlc3RzIGZpbGVzIChlLmcuIGB0ZXN0XF9zdWl0ZVxfbXBpLmNgKS4gVGhlc2UgZmlsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGEgYGZ1bmN0aW9uIGZpbGVgIChlLmcuIGBzdWl0ZXMvdGVzdFxfc3VpdGVcX21waS5mdW5jdGlvbmApIGFuZCBhIGBkYXRhIGZpbGVgIChlLmcuIGBzdWl0ZXMvdGVzdFxfc3VpdGVcX21waS5kYXRhYCkuIFRoZSBgZnVuY3Rpb24gZmlsZWAgY29udGFpbnMgdGhlIHRlc3QgZnVuY3Rpb25zLiBUaGUgYGRhdGEgZmlsZWAgY29udGFpbnMgdGhlIHRlc3QgY2FzZXMsIHNwZWNpZmllZCBhcyBwYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRlc3QgZnVuY3Rpb24uCisKK0ZvciBtYWNoaW5lcyB3aXRoIGEgVW5peCBzaGVsbCBhbmQgT3BlblNTTCAoYW5kIG9wdGlvbmFsbHkgR251VExTKSBpbnN0YWxsZWQsIGFkZGl0aW9uYWwgdGVzdCBzY3JpcHRzIGFyZSBhdmFpbGFibGU6CisKKy0gICBgdGVzdHMvc3NsLW9wdC5zaGAgcnVucyBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdmFyaW91cyBUTFMgb3B0aW9ucyAocmVuZWdvdGlhdGlvbiwgcmVzdW1wdGlvbiwgZXRjLikgYW5kIHRlc3RzIGludGVyb3BlcmFiaWxpdHkgb2YgdGhlc2Ugb3B0aW9ucyB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKy0gICBgdGVzdHMvY29tcGF0LnNoYCB0ZXN0cyBpbnRlcm9wZXJhYmlsaXR5IG9mIGV2ZXJ5IGNpcGhlcnN1aXRlIHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zLgorLSAgIGB0ZXN0cy9zY3JpcHRzL3Rlc3QtcmVmLWNvbmZpZ3MucGxgIHRlc3QgYnVpbGRzIGluIHZhcmlvdXMgcmVkdWNlZCBjb25maWd1cmF0aW9ucy4KKy0gICBgdGVzdHMvc2NyaXB0cy9rZXktZXhjaGFuZ2VzLnBsYCB0ZXN0IGJ1aWxkcyBpbiBjb25maWd1cmF0aW9ucyB3aXRoIGEgc2luZ2xlIGtleSBleGNoYW5nZSBlbmFibGVkCistICAgYHRlc3RzL3NjcmlwdHMvYWxsLnNoYCBydW5zIGEgY29tYmluYXRpb24gb2YgdGhlIGFib3ZlIHRlc3RzLCBwbHVzIHNvbWUgbW9yZSwgd2l0aCB2YXJpb3VzIGJ1aWxkIG9wdGlvbnMgKHN1Y2ggYXMgQVNhbiwgZnVsbCBgY29uZmlnLmhgLCBldGMpLgorCitDb25maWd1cmF0aW9ucworLS0tLS0tLS0tLS0tLS0KKworV2UgcHJvdmlkZSBzb21lIG5vbi1zdGFuZGFyZCBjb25maWd1cmF0aW9ucyBmb2N1c2VkIG9uIHNwZWNpZmljIHVzZSBjYXNlcyBpbiB0aGUgYGNvbmZpZ3MvYCBkaXJlY3RvcnkuIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRob3NlIGluIGBjb25maWdzL1JFQURNRS50eHRgCisKK0NvbnRyaWJ1dGluZworLS0tLS0tLS0tLS0tCisKK1dlIGdyYXRlZnVsbHkgYWNjZXB0IGJ1ZyByZXBvcnRzIGFuZCBjb250cmlidXRpb25zIGZyb20gdGhlIGNvbW11bml0eS4gVGhlcmUgYXJlIHNvbWUgcmVxdWlyZW1lbnRzIHdlIG5lZWQgdG8gZnVsZmlsbCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGludGVncmF0ZSBjb250cmlidXRpb25zOgorCistICAgQWxsIGNvbnRyaWJ1dGlvbnMsIHdoZXRoZXIgbGFyZ2Ugb3Igc21hbGwgcmVxdWlyZSBhIENvbnRyaWJ1dG9yJ3MgTGljZW5zZSBBZ3JlZW1lbnQgKENMQSkgdG8gYmUgYWNjZXB0ZWQuIFRoaXMgaXMgYmVjYXVzZSBzb3VyY2UgY29kZSBjYW4gcG9zc2libHkgZmFsbCB1bmRlciBjb3B5cmlnaHQgbGF3IGFuZCB3ZSBuZWVkIHlvdXIgY29uc2VudCB0byBzaGFyZSBpbiB0aGUgb3duZXJzaGlwIG9mIHRoZSBjb3B5cmlnaHQuCistICAgV2Ugd291bGQgYXNrIHRoYXQgY29udHJpYnV0aW9ucyBjb25mb3JtIHRvIFtvdXIgY29kaW5nIHN0YW5kYXJkc10oaHR0cHM6Ly90bHMubWJlZC5vcmcva2IvZGV2ZWxvcG1lbnQvbWJlZHRscy1jb2Rpbmctc3RhbmRhcmRzKSwgYW5kIHRoYXQgY29udHJpYnV0aW9ucyBzaG91bGQgYmUgZnVsbHkgdGVzdGVkIGJlZm9yZSBzdWJtaXNzaW9uLgorLSAgIEFzIHdpdGggYW55IG9wZW4gc291cmNlIHByb2plY3QsIGNvbnRyaWJ1dGlvbnMgd2lsbCBiZSByZXZpZXdlZCBieSB0aGUgcHJvamVjdCB0ZWFtIGFuZCBjb21tdW5pdHkgYW5kIG1heSBuZWVkIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBiZSBhY2NlcHRlZC4KKworVG8gYWNjZXB0IHRoZSBDb250cmlidXRvcuKAmXMgTGljZW5jZSBBZ3JlZW1lbnQgKENMQSksIGluZGl2aWR1YWwgY29udHJpYnV0b3JzIGNhbiBkbyB0aGlzIGJ5IGNyZWF0aW5nIGFuIG1iZWQgYWNjb3VudCBhbmQgW2FjY2VwdGluZyB0aGUgb25saW5lIGFncmVlbWVudCBoZXJlIHdpdGggYSBjbGljayB0aHJvdWdoXShodHRwczovL2RldmVsb3Blci5tYmVkLm9yZy9jb250cmlidXRvcl9hZ3JlZW1lbnQvKS4gQWx0ZXJuYXRpdmVseSwgZm9yIGNvbnRyaWJ1dGlvbnMgZnJvbSBjb3Jwb3JhdGlvbnMsIG9yIHRob3NlIHRoYXQgZG8gbm90IHdpc2ggdG8gY3JlYXRlIGFuIG1iZWQgYWNjb3VudCwgYSBzbGlnaHRseSBkaWZmZXJlbnQgYWdyZWVlbWVudCBjYW4gYmUgZm91bmQgW2hlcmVdKGh0dHBzOi8vd3d3Lm1iZWQuY29tL2VuL2Fib3V0LW1iZWQvY29udHJpYnV0b3ItbGljZW5zZS1hZ3JlZW1lbnRzLykuIFRoaXMgYWdyZWVtZW50IHNob3VsZCBiZSBzaWduZWQgYW5kIHJldHVybmVkIHRvIEFSTSBhcyBkZXNjcmliZWQgaW4gdGhlIGluc3RydWN0aW9ucyBnaXZlbi4KKworIyMjIE1ha2luZyBhIENvbnRyaWJ1dGlvbgorCisxLiAgW0NoZWNrIGZvciBvcGVuIGlzc3Vlc10oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9pc3N1ZXMpIG9yIFtzdGFydCBhIGRpc2N1c3Npb25dKGh0dHBzOi8vdGxzLm1iZWQub3JnL2Rpc2N1c3Npb25zKSBhcm91bmQgYSBmZWF0dXJlIGlkZWEgb3IgYSBidWcuCisyLiAgRm9yayB0aGUgW21iZWQgVExTIHJlcG9zaXRvcnkgb24gR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzKSB0byBzdGFydCBtYWtpbmcgeW91ciBjaGFuZ2VzLiBBcyBhIGdlbmVyYWwgcnVsZSwgeW91IHNob3VsZCB1c2UgdGhlICJkZXZlbG9wbWVudCIgYnJhbmNoIGFzIGEgYmFzaXMuCiszLiAgV3JpdGUgYSB0ZXN0IHdoaWNoIHNob3dzIHRoYXQgdGhlIGJ1ZyB3YXMgZml4ZWQgb3IgdGhhdCB0aGUgZmVhdHVyZSB3b3JrcyBhcyBleHBlY3RlZC4KKzQuICBTZW5kIGEgcHVsbCByZXF1ZXN0IGFuZCBidWcgdXMgdW50aWwgaXQgZ2V0cyBtZXJnZWQgYW5kIHB1Ymxpc2hlZC4gQ29udHJpYnV0aW9ucyBtYXkgbmVlZCBzb21lIG1vZGlmaWNhdGlvbnMsIHNvIHdvcmsgd2l0aCB1cyB0byBnZXQgeW91ciBjaGFuZ2UgYWNjZXB0ZWQuIFdlIHdpbGwgaW5jbHVkZSB5b3VyIG5hbWUgaW4gdGhlIENoYW5nZUxvZyA6KQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vYXBhY2hlLTIuMC50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vYXBhY2hlLTIuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NTY5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9hcGFjaGUtMi4wLnR4dApAQCAtMCwwICsxLDIwMiBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jaXJjbGUueW1sIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NpcmNsZS55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlZDAyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jaXJjbGUueW1sCkBAIC0wLDAgKzEsNDQgQEAKKyMgUHVycG9zZToKKyMgLSBUbyB0ZXN0IGFuZCBwcm92ZSB0aGF0IGEgbmV3IGNvbW1pdCBpbiAgdGhlIG1iZWQgVExTIHJlcG9zaXRvcnkgYnVpbGRzCisjIGFuZCBpbnRlZ3JhdGVzIHdpdGggbWJlZC1vcyBwcm9wZXJseS4KKyMgICAgICAgICAgIEFORAorIyAtIFRvIHRlc3QgYW5kIHByb3ZlIHRoYXQgdGhlIGN1cnJlbnQgZGV2ZWxvcG1lbnQgaGVhZCBvZiBtYmVkIFRMUyBidWlsZHMKKyMgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgY3VycmVudCBtYmVkLW9zIG1hc3RlciBicmFuY2guCisjCisjIFRoZSBzY3JpcHQgZmV0Y2hlcyBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgYW5kIGJ1aWxkcyB0aGUgbWJlZCBUTFMgJ3Rscy1jbGllbnQnCisjIGV4YW1wbGUuIFRoaXMgc2NyaXB0IGlzIHRyaWdnZXJlZCBieSBldmVyeSBjb21taXQgYW5kIG9uY2UgZWFjaCBuaWdodCBhbmQgdGhlCisjIGV4YWN0IGJlaGF2aW91ciBkZXBlbmRzIG9uIGhvdyBpdCB3YXMgdHJpZ2dlcmVkOgorIyAtIElmIGl0IGlzIGEgbmlnaHRseSBidWlsZCB0aGVuIGl0IGJ1aWxkcyB0aGUgbWJlZCBUTFMgZGV2ZWxvcG1lbnQgaGVhZCB3aXRoCisjICAgbWJlZC1vcyBtYXN0ZXIuCisjIC0gSWYgaXQgd2FzIHRyaWdnZXJlZCBieSB0aGUgY29tbWl0LCB0aGVuIGl0IGJ1aWxkcyB0aGUgZXhhbXBsZSB3aXRoIG1iZWQgVExTCisjICAgYXQgdGhhdCBjb21taXQgYW5kIG1iZWQtb3MgYXQgdGhlIGNvbW1pdCBwb2ludGVkIGJ5IG1iZWQtb3MubGliIGluIHRoZQorIyAgIGV4YW1wbGUgcmVwb3NpdG9yeS4KKwordGVzdDoKKyAgICBvdmVycmlkZToKKyAgICAgICAgLSBjZCAuLi9tYmVkLW9zLWV4YW1wbGUtdGxzL3Rscy1jbGllbnQvICYmIG1iZWQgY29tcGlsZSAtbSBLNjRGIC10IEdDQ19BUk0gLWMKKworZGVwZW5kZW5jaWVzOgorICAgIHByZToKKyAgICAgICAgIyBJbnN0YWxsIGdjYy1hcm0KKyAgICAgICAgLSBjZCAuLiAmJiB3Z2V0ICJodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZC80LjkvNC45LTIwMTUtcTMtdXBkYXRlLytkb3dubG9hZC9nY2MtYXJtLW5vbmUtZWFiaS00XzktMjAxNXEzLTIwMTUwOTIxLWxpbnV4LnRhci5iejIiCisgICAgICAgIC0gY2QgLi4gJiYgdGFyIC14dmpmIGdjYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMtMjAxNTA5MjEtbGludXgudGFyLmJ6MgorICAgICAgICAtIGxuIC1zIC4uL2djYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMvYmluLyogLi4vYmluLworICAgICAgICAjIEluc3RhbGwgbWJlZC1jbGkKKyAgICAgICAgLSBjZCAuLi8gJiYgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWQtY2xpLmdpdAorICAgICAgICAtIGNkIC4uL21iZWQtY2xpICYmIHN1ZG8gLUggcGlwIGluc3RhbGwgLWUgLgorICAgICAgICAjIEdldCB0aGUgc2FtcGxlIGFwcGxpY2F0aW9uCisgICAgICAgIC0gY2QgLi4vICYmIGdpdCBjbG9uZSBnaXRAZ2l0aHViLmNvbTpBUk1tYmVkL21iZWQtb3MtZXhhbXBsZS10bHMuZ2l0CisgICAgICAgICMgR2V0IG1iZWQtb3MKKyAgICAgICAgLSBjZCAuLi9tYmVkLW9zLWV4YW1wbGUtdGxzL3Rscy1jbGllbnQgJiYgbWJlZCBkZXBsb3kKKyAgICAgICAgIyBVcGRhdGUgbWJlZC1vcyB0byBtYXN0ZXIgb25seSBpZiBpdCBpcyBhIG5pZ2h0bHkgYnVpbGQKKyAgICAgICAgLSA+CisgICAgICAgICAgICBpZiBbIC1uICIke1JVTl9OSUdIVExZX0JVSUxEfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGNkIC4uL21iZWQtb3MtZXhhbXBsZS10bHMvdGxzLWNsaWVudC9tYmVkLW9zLyAmJiBtYmVkIHVwZGF0ZSBtYXN0ZXI7CisgICAgICAgICAgICBmaQorICAgICAgICAjIEltcG9ydCBtYmVkdGxzIGN1cnJlbnQgcmV2aXNpb24KKyAgICAgICAgLSBsbiAtcyAuLi8uLi8uLi8uLi8uLi8uLi8uLi9tYmVkdGxzLyAuLi9tYmVkLW9zLWV4YW1wbGUtdGxzL3Rscy1jbGllbnQvbWJlZC1vcy9mZWF0dXJlcy9tYmVkdGxzL2ltcG9ydGVyL1RBUkdFVF9JR05PUkUvbWJlZHRscworICAgICAgICAtIGNkIC4uL21iZWQtb3MtZXhhbXBsZS10bHMvdGxzLWNsaWVudC9tYmVkLW9zL2ZlYXR1cmVzL21iZWR0bHMvaW1wb3J0ZXIvICYmIG1ha2UKKyAgICBvdmVycmlkZToKKyAgICAgICAgIyBJbnN0YWxsIHRoZSBtaXNzaW5nIHB5dGhvbiBwYWNrYWdlcworICAgICAgICAtIGNkIC4uL21iZWQtb3MtZXhhbXBsZS10bHMvdGxzLWNsaWVudC9tYmVkLW9zLyAmJiBzdWRvIC1IIHBpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL1JFQURNRS50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODY3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlcy4KKworVGhlIGV4YW1wbGVzIGFyZSBnZW5lcmFsbHkgZm9jdXNlZCBvbiBhIHBhcnRpY3VsYXIgdXNhZ2UgY2FzZSAoZWcsIHN1cHBvcnQgZm9yCithIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIGNpcGhlcnN1aXRlcykgYW5kIGFpbSBhdCBtaW5pbWl6aW5nIHJlc291cmNlIHVzYWdlIGZvcgordGhpcyB0YXJnZXQuIFRoZXkgY2FuIGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgY3VzdG9tIGNvbmZpZ3VyYXRpb25zLgorCitUaGVzZSBmaWxlcyBhcmUgY29tcGxldGUgcmVwbGFjZW1lbnRzIGZvciB0aGUgZGVmYXVsdCBjb25maWcuaC4gVG8gdXNlIG9uZSBvZgordGhlbSwgeW91IGNhbiBwaWNrIG9uZSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKKzEuIFJlcGxhY2UgdGhlIGRlZmF1bHQgZmlsZSBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmggd2l0aCB0aGUgY2hvc2VuIG9uZS4KKyAgIChEZXBlbmRpbmcgb24geW91ciBjb21waWxlciwgeW91IG1heSBuZWVkIHRvIGFqdXN0IHRoZSBsaW5lIHdpdGgKKyAgICNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIiB0aGVuLikKKworMi4gRGVmaW5lIE1CRURUTFNfQ09ORklHX0ZJTEUgYW5kIGFkanVzdCB0aGUgaW5jbHVkZSBwYXRoIGFjY29yZGluZ2x5LgorICAgRm9yIGV4YW1wbGUsIHVzaW5nIG1ha2U6CisKKyAgICBDRkxBR1M9Ii1JJFBXRC9jb25maWdzIC1ETUJFRFRMU19DT05GSUdfRklMRT0nPGZvby5oPiciIG1ha2UKKworICAgT3IsIHVzaW5nIGNtYWtlOgorCisgICAgZmluZCAuIC1pbmFtZSAnKmNtYWtlKicgLW5vdCAtbmFtZSBDTWFrZUxpc3RzLnR4dCAtZXhlYyBybSAtcmYge30gKworICAgIENGTEFHUz0iLUkkUFdEL2NvbmZpZ3MgLURNQkVEVExTX0NPTkZJR19GSUxFPSc8Zm9vLmg+JyIgY21ha2UgLgorICAgIG1ha2UKKworTm90ZSB0aGF0IHRoZSBzZWNvbmQgbWV0aG9kIGFsc28gd29ya3MgaWYgeW91IHdhbnQgdG8ga2VlcCB5b3VyIGN1c3RvbQorY29uZmlndXJhdGlvbiBmaWxlIG91dHNpZGUgdGhlIG1iZWQgVExTIHRyZWUuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctY2NtLXBzay10bHMxXzIuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1jY20tcHNrLXRsczFfMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTEwYjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctY2NtLXBzay10bHMxXzIuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogIE1pbmltYWwgY29uZmlndXJhdGlvbiBmb3IgVExTIDEuMiB3aXRoIFBTSyBhbmQgQUVTLUNDTSBjaXBoZXJzdWl0ZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIFRMUyAxLjIgd2l0aCBQU0sgYW5kIEFFUy1DQ00gY2lwaGVyc3VpdGVzCisgKiBEaXN0aW5ndWlzaGluZyBmZWF0dXJlczoKKyAqIC0gbm8gYmlnbnVtLCBubyBQSywgbm8gWDUwOQorICogLSBmdWxseSBtb2Rlcm4gYW5kIHNlY3VyZSAocHJvdmlkZWQgdGhlIHByZS1zaGFyZWQga2V5cyBoYXZlIGhpZ2ggZW50cm9weSkKKyAqIC0gdmVyeSBsb3cgcmVjb3JkIG92ZXJoZWFkIHdpdGggQ0NNLTgKKyAqIC0gb3B0aW1pemVkIGZvciBsb3cgUkFNIHVzYWdlCisgKgorICogU2VlIFJFQURNRS50eHQgZm9yIHVzYWdlIGluc3RydWN0aW9ucy4KKyAqLworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX0gKKworLyogU3lzdGVtIHN1cHBvcnQgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hBVkVfVElNRSAvKiBPcHRpb25hbGx5IHVzZWQgaW4gSGVsbG8gbWVzc2FnZXMgKi8KKy8qIE90aGVyIE1CRURUTFNfSEFWRV9YWFggZmxhZ3MgaXJyZWxldmFudCBmb3IgdGhpcyBjb25maWd1cmF0aW9uICovCisKKy8qIG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKworLyogbWJlZCBUTFMgbW9kdWxlcyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisjZGVmaW5lIE1CRURUTFNfQ0NNX0MKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0MKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0MKKyNkZWZpbmUgTUJFRFRMU19NRF9DCisjZGVmaW5lIE1CRURUTFNfTkVUX0MKKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQworI2RlZmluZSBNQkVEVExTX1NTTF9DTElfQworI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfQworI2RlZmluZSBNQkVEVExTX1NTTF9UTFNfQworCisvKiBTYXZlIFJBTSBhdCB0aGUgZXhwZW5zZSBvZiBST00gKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworCisvKiBTYXZlIHNvbWUgUkFNIGJ5IGFkanVzdGluZyB0byB5b3VyIGV4YWN0IG5lZWRzICovCisjZGVmaW5lIE1CRURUTFNfUFNLX01BWF9MRU4gICAgMTYgLyogMTI4LWJpdHMga2V5cyBhcmUgZ2VuZXJhbGx5IGVub3VnaCAqLworCisvKgorICogWW91IHNob3VsZCBhZGp1c3QgdGhpcyB0byB0aGUgZXhhY3QgbnVtYmVyIG9mIHNvdXJjZXMgeW91J3JlIHVzaW5nOiBkZWZhdWx0CisgKiBpcyB0aGUgInBsYXRmb3JtX2VudHJvcHlfcG9sbCIgc291cmNlLCBidXQgeW91IG1heSB3YW50IHRvIGFkZCBvdGhlciBvbmVzCisgKiBNaW5pbXVtIGlzIDIgZm9yIHRoZSBlbnRyb3B5IHRlc3Qgc3VpdGUuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01BWF9TT1VSQ0VTIDIKKworLyoKKyAqIFVzZSBvbmx5IENDTV84IGNpcGhlcnN1aXRlcywgYW5kCisgKiBzYXZlIFJPTSBhbmQgYSBmZXcgYnl0ZXMgb2YgUkFNIGJ5IHNwZWNpZnlpbmcgb3VyIG93biBjaXBoZXJzdWl0ZSBsaXN0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTV84LCAgICAgICAgICAgICBcCisgICAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgKKworLyoKKyAqIFNhdmUgUkFNIGF0IHRoZSBleHBlbnNlIG9mIGludGVyb3BlcmFiaWxpdHk6IGRvIHRoaXMgb25seSBpZiB5b3UgY29udHJvbAorICogYm90aCBlbmRzIG9mIHRoZSBjb25uZWN0aW9uISAgKFNlZSBjb21tZW50cyBpbiAibWJlZHRscy9zc2wuaCIuKQorICogVGhlIG9wdGltYWwgc2l6ZSBoZXJlIGRlcGVuZHMgb24gdGhlIHR5cGljYWwgc2l6ZSBvZiByZWNvcmRzLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAgICAgICAgICAgICA1MTIKKworI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctbWluaS10bHMxXzEuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1taW5pLXRsczFfMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMjM2M2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctbWluaS10bHMxXzEuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIE1pbmltYWwgY29uZmlndXJhdGlvbiBmb3IgVExTIDEuMSAoUkZDIDQzNDYpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogTWluaW1hbCBjb25maWd1cmF0aW9uIGZvciBUTFMgMS4xIChSRkMgNDM0NiksIGltcGxlbWVudGluZyBvbmx5IHRoZQorICogcmVxdWlyZWQgY2lwaGVyc3VpdGU6IE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgdXNhZ2UgaW5zdHJ1Y3Rpb25zLgorICovCisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKy8qIFN5c3RlbSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjE1CisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorCisvKiBtYmVkIFRMUyBtb2R1bGVzICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9DCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfQworI2RlZmluZSBNQkVEVExTX0RFU19DCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9DCisjZGVmaW5lIE1CRURUTFNfTURfQworI2RlZmluZSBNQkVEVExTX01ENV9DCisjZGVmaW5lIE1CRURUTFNfTkVUX0MKKyNkZWZpbmUgTUJFRFRMU19PSURfQworI2RlZmluZSBNQkVEVExTX1BLX0MKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfUlNBX0MKKyNkZWZpbmUgTUJFRFRMU19TSEExX0MKKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQworI2RlZmluZSBNQkVEVExTX1NTTF9DTElfQworI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfQworI2RlZmluZSBNQkVEVExTX1NTTF9UTFNfQworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19YNTA5X1VTRV9DCisKKy8qIEZvciB0ZXN0IGNlcnRpZmljYXRlcyAqLworI2RlZmluZSBNQkVEVExTX0JBU0U2NF9DCisjZGVmaW5lIE1CRURUTFNfQ0VSVFNfQworI2RlZmluZSBNQkVEVExTX1BFTV9QQVJTRV9DCisKKy8qIEZvciB0ZXN0aW5nIHdpdGggY29tcGF0LnNoICovCisjZGVmaW5lIE1CRURUTFNfRlNfSU8KKworI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctbm8tZW50cm9weS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLW5vLWVudHJvcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWYxN2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLW5vLWVudHJvcHkuaApAQCAtMCwwICsxLDg1IEBACisvKioKKyAqICBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gb2YgZmVhdHVyZXMgdGhhdCBkbyBub3QgcmVxdWlyZSBhbiBlbnRyb3B5IHNvdXJjZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gb2YgZmVhdHVyZXMgdGhhdCBkbyBub3QgcmVxdWlyZSBhbiBlbnRyb3B5IHNvdXJjZQorICogRGlzdGluZ3Vpc2hpbmcgcmVhdHVyZXM6CisgKiAtIG5vIGVudHJvcHkgbW9kdWxlCisgKiAtIG5vIFRMUyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZHVlIHRvIGFic2VuY2Ugb2YgYW4gZW50cm9weQorICogICBzb3VyY2UKKyAqCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgdXNhZ2UgaW5zdHJ1Y3Rpb25zLgorICovCisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKy8qIFN5c3RlbSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKKyNkZWZpbmUgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDCisjZGVmaW5lIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjE1CisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjIxCisjZGVmaW5lIE1CRURUTFNfU0VMRl9URVNUCisjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworI2RlZmluZSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UKKworLyogbWJlZCBUTFMgbW9kdWxlcyAqLworI2RlZmluZSBNQkVEVExTX0FFU19DCisjZGVmaW5lIE1CRURUTFNfQVNOMV9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfQVNOMV9XUklURV9DCisjZGVmaW5lIE1CRURUTFNfQkFTRTY0X0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX0NDTV9DCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0MKKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9DCisjZGVmaW5lIE1CRURUTFNfRUNQX0MKKyNkZWZpbmUgTUJFRFRMU19FUlJPUl9DCisjZGVmaW5lIE1CRURUTFNfR0NNX0MKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworI2RlZmluZSBNQkVEVExTX01EX0MKKyNkZWZpbmUgTUJFRFRMU19PSURfQworI2RlZmluZSBNQkVEVExTX1BFTV9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfUEtfQworI2RlZmluZSBNQkVEVExTX1BLX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19QS19XUklURV9DCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fQworI2RlZmluZSBNQkVEVExTX1JTQV9DCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfQworI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fQworI2RlZmluZSBNQkVEVExTX1g1MDlfVVNFX0MKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworCisjaW5jbHVkZSAiY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctcGljb2NvaW4uaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy1waWNvY29pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjI0YTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctcGljb2NvaW4uaApAQCAtMCwwICsxLDcxIEBACisvKgorICogIFJlZHVjZWQgY29uZmlndXJhdGlvbiB1c2VkIGJ5IFBpY29jb2luLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFJlZHVjZWQgY29uZmlndXJhdGlvbiB1c2VkIGJ5IFBpY29jb2luLgorICoKKyAqIFNlZSBSRUFETUUudHh0IGZvciB1c2FnZSBpbnN0cnVjdGlvbnMuCisgKgorICogRGlzdGluZ3Vpc2hpbmcgZmVhdHVyZXM6CisgKiAtIG5vIFNTTC9UTFM7CisgKiAtIG5vIFguNTA5OworICogLSBFQ0RTQS9QSyBhbmQgc29tZSBvdGhlciBjaG9zZW4gY3J5cHRvIGJpdHMuCisgKi8KKworI2lmbmRlZiBNQkVEVExTX0NPTkZJR19ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX0gKKworLyogU3lzdGVtIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUJFRFRMU19IQVZFX0FTTQorI2RlZmluZSBNQkVEVExTX0hBVkVfVElNRQorCisvKiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorI2RlZmluZSBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZCisjZGVmaW5lIE1CRURUTFNfRlNfSU8KKworLyogbWJlZCBUTFMgbW9kdWxlcyAqLworI2RlZmluZSBNQkVEVExTX0FFU05JX0MKKyNkZWZpbmUgTUJFRFRMU19BRVNfQworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX0FTTjFfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX0JBU0U2NF9DCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9DCisjZGVmaW5lIE1CRURUTFNfRUNQX0MKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0MKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworI2RlZmluZSBNQkVEVExTX01EX0MKKyNkZWZpbmUgTUJFRFRMU19PSURfQworI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQworI2RlZmluZSBNQkVEVExTX1BLX0MKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfUEtfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX1JJUEVNRDE2MF9DCisjZGVmaW5lIE1CRURUTFNfU0hBMV9DCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKworI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctc3VpdGUtYi5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXN1aXRlLWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ4MDRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2NvbmZpZ3MvY29uZmlnLXN1aXRlLWIuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIFRMUyBOU0EgU3VpdGUgQiBQcm9maWxlIChSRkMgNjQ2MCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIFRMUyBOU0EgU3VpdGUgQiBQcm9maWxlIChSRkMgNjQ2MCkKKyAqCisgKiBEaXN0aW5ndWlzaGluZyBmZWF0dXJlczoKKyAqIC0gbm8gUlNBIG9yIGNsYXNzaWMgREgsIGZ1bGx5IGJhc2VkIG9uIEVDQworICogLSBvcHRpbWl6ZWQgZm9yIGxvdyBSQU0gdXNhZ2UKKyAqCisgKiBQb3NzaWJsZSBpbXByb3ZlbWVudHM6CisgKiAtIGlmIDEyOC1iaXQgc2VjdXJpdHkgaXMgZW5vdWdoLCBkaXNhYmxlIHNlY3AzODRyMSBhbmQgU0hBLTUxMgorICogLSB1c2UgZW1iZWRkZWQgY2VydHMgaW4gREVSIGZvcm1hdCBhbmQgZGlzYWJsZSBQRU1fUEFSU0VfQyBhbmQgQkFTRTY0X0MKKyAqCisgKiBTZWUgUkVBRE1FLnR4dCBmb3IgdXNhZ2UgaW5zdHJ1Y3Rpb25zLgorICovCisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKy8qIFN5c3RlbSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU00KKyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUUKKworLyogbWJlZCBUTFMgZmVhdHVyZSBzdXBwb3J0ICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisKKy8qIG1iZWQgVExTIG1vZHVsZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfQworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX0FTTjFfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0MKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19DCisjZGVmaW5lIE1CRURUTFNfRUNESF9DCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfQworI2RlZmluZSBNQkVEVExTX0VDUF9DCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9DCisjZGVmaW5lIE1CRURUTFNfR0NNX0MKKyNkZWZpbmUgTUJFRFRMU19NRF9DCisjZGVmaW5lIE1CRURUTFNfTkVUX0MKKyNkZWZpbmUgTUJFRFRMU19PSURfQworI2RlZmluZSBNQkVEVExTX1BLX0MKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKyNkZWZpbmUgTUJFRFRMU19TSEE1MTJfQworI2RlZmluZSBNQkVEVExTX1NTTF9DTElfQworI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfQworI2RlZmluZSBNQkVEVExTX1NTTF9UTFNfQworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19YNTA5X1VTRV9DCisKKy8qIEZvciB0ZXN0IGNlcnRpZmljYXRlcyAqLworI2RlZmluZSBNQkVEVExTX0JBU0U2NF9DCisjZGVmaW5lIE1CRURUTFNfQ0VSVFNfQworI2RlZmluZSBNQkVEVExTX1BFTV9QQVJTRV9DCisKKy8qIFNhdmUgUkFNIGF0IHRoZSBleHBlbnNlIG9mIFJPTSAqLworI2RlZmluZSBNQkVEVExTX0FFU19ST01fVEFCTEVTCisKKy8qIFNhdmUgUkFNIGJ5IGFkanVzdGluZyB0byBvdXIgZXhhY3QgbmVlZHMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfTUFYX0JJVFMgICAzODQKKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX1NJWkUgICAgNDggLy8gMzg0IGJpdHMgaXMgNDggYnl0ZXMKKworLyogU2F2ZSBSQU0gYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQsIHNlZSBlY3AuaCAqLworI2RlZmluZSBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAgICAgICAgMgorI2RlZmluZSBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSAgMAorCisvKiBTaWduaWZpY2FudCBzcGVlZCBiZW5lZml0IGF0IHRoZSBleHBlbnNlIG9mIHNvbWUgUk9NICovCisjZGVmaW5lIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKworLyoKKyAqIFlvdSBzaG91bGQgYWRqdXN0IHRoaXMgdG8gdGhlIGV4YWN0IG51bWJlciBvZiBzb3VyY2VzIHlvdSdyZSB1c2luZzogZGVmYXVsdAorICogaXMgdGhlICJtYmVkdGxzX3BsYXRmb3JtX2VudHJvcHlfcG9sbCIgc291cmNlLCBidXQgeW91IG1heSB3YW50IHRvIGFkZCBvdGhlciBvbmVzLgorICogTWluaW11bSBpcyAyIGZvciB0aGUgZW50cm9weSB0ZXN0IHN1aXRlLgorICovCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUyAyCisKKy8qIFNhdmUgUk9NIGFuZCBhIGZldyBieXRlcyBvZiBSQU0gYnkgc3BlY2lmeWluZyBvdXIgb3duIGNpcGhlcnN1aXRlIGxpc3QgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAgICBcCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKworLyoKKyAqIFNhdmUgUkFNIGF0IHRoZSBleHBlbnNlIG9mIGludGVyb3BlcmFiaWxpdHk6IGRvIHRoaXMgb25seSBpZiB5b3UgY29udHJvbAorICogYm90aCBlbmRzIG9mIHRoZSBjb25uZWN0aW9uISAgKFNlZSBjb21lbnRzIGluICJtYmVkdGxzL3NzbC5oIi4pCisgKiBUaGUgbWluaW11bSBzaXplIGhlcmUgZGVwZW5kcyBvbiB0aGUgY2VydGlmaWNhdGUgY2hhaW4gdXNlZCBhcyB3ZWxsIGFzIHRoZQorICogdHlwaWNhbCBzaXplIG9mIHJlY29yZHMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICAgICAgICAgICAgIDEwMjQKKworI2luY2x1ZGUgIm1iZWR0bHMvY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctdGhyZWFkLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vY29uZmlncy9jb25maWctdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZmUwOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9jb25maWdzL2NvbmZpZy10aHJlYWQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogIE1pbmltYWwgY29uZmlndXJhdGlvbiBmb3IgdXNpbmcgVExTIGFzIHBhcnQgb2YgVGhyZWFkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZm9yIHVzaW5nIFRMUyBhIHBhcnQgb2YgVGhyZWFkCisgKiBodHRwOi8vdGhyZWFkZ3JvdXAub3JnLworICoKKyAqIERpc3Rpbmd1aXNoaW5nIGZlYXR1cmVzOgorICogLSBubyBSU0Egb3IgY2xhc3NpYyBESCwgZnVsbHkgYmFzZWQgb24gRUNDCisgKiAtIG5vIFguNTA5CisgKiAtIHN1cHBvcnQgZm9yIGV4cGVyaW1lbnRhbCBFQyBKLVBBS0Uga2V5IGV4Y2hhbmdlCisgKgorICogU2VlIFJFQURNRS50eHQgZm9yIHVzYWdlIGluc3RydWN0aW9ucy4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19DT05GSUdfSAorCisvKiBTeXN0ZW0gc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfQVNNCisKKy8qIG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydCAqLworI2RlZmluZSBNQkVEVExTX0FFU19ST01fVEFCTEVTCisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgKKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWQorI2RlZmluZSBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUworCisvKiBtYmVkIFRMUyBtb2R1bGVzICovCisjZGVmaW5lIE1CRURUTFNfQUVTX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BBUlNFX0MKKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0MKKyNkZWZpbmUgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBNQkVEVExTX0NDTV9DCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX0MKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19DCisjZGVmaW5lIE1CRURUTFNfQ01BQ19DCisjZGVmaW5lIE1CRURUTFNfRUNKUEFLRV9DCisjZGVmaW5lIE1CRURUTFNfRUNQX0MKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0MKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworI2RlZmluZSBNQkVEVExTX01EX0MKKyNkZWZpbmUgTUJFRFRMU19PSURfQworI2RlZmluZSBNQkVEVExTX1BLX0MKKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09PS0lFX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0xJX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfU1JWX0MKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTX0MKKworLyogRm9yIHRlc3RzIHVzaW5nIHNzbC1vcHQuc2ggKi8KKyNkZWZpbmUgTUJFRFRMU19ORVRfQworI2RlZmluZSBNQkVEVExTX1RJTUlOR19DCisKKy8qIFNhdmUgUkFNIGF0IHRoZSBleHBlbnNlIG9mIFJPTSAqLworI2RlZmluZSBNQkVEVExTX0FFU19ST01fVEFCTEVTCisKKy8qIFNhdmUgUkFNIGJ5IGFkanVzdGluZyB0byBvdXIgZXhhY3QgbmVlZHMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ1BfTUFYX0JJVFMgICAgICAgICAgICAgMjU2CisjZGVmaW5lIE1CRURUTFNfTVBJX01BWF9TSVpFICAgICAgICAgICAgICAzMiAvLyAyNTYgYml0cyBpcyAzMiBieXRlcworCisvKiBTYXZlIFJPTSBhbmQgYSBmZXcgYnl0ZXMgb2YgUkFNIGJ5IHNwZWNpZnlpbmcgb3VyIG93biBjaXBoZXJzdWl0ZSBsaXN0ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOAorCisjaW5jbHVkZSAibWJlZHRscy9jaGVja19jb25maWcuaCIKKworI2VuZGlmIC8qIE1CRURUTFNfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19lbmNkZWMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19lbmNkZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM4ZWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX2VuY2RlYy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKgorICogQGZpbGUKKyAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmaWxlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKioKKyAqIEBhZGR0b2dyb3VwIGVuY2RlY19tb2R1bGUgRW5jcnlwdGlvbi9kZWNyeXB0aW9uIG1vZHVsZQorICoKKyAqIFRoZSBFbmNyeXB0aW9uL2RlY3J5cHRpb24gbW9kdWxlIHByb3ZpZGVzIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBmdW5jdGlvbnMuCisgKiBPbmUgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgYWxnb3JpdGhtczsgdGhlCisgKiBzeW1tZXRyaWMgb25lcyBhcmUgbW9zdGx5IHVzZWQgZm9yIG1lc3NhZ2UgY29uZmlkZW50aWFsaXR5IGFuZCB0aGUgYXN5bW1ldHJpYworICogb25lcyBmb3Iga2V5IGV4Y2hhbmdlIGFuZCBtZXNzYWdlIGludGVncml0eS4KKyAqIFNvbWUgc3ltbWV0cmljIGFsZ29yaXRobXMgcHJvdmlkZSBkaWZmZXJlbnQgYmxvY2sgY2lwaGVyIG1vZGVzLCBtYWlubHkKKyAqIEVsZWN0cm9uaWMgQ29kZSBCb29rIChFQ0IpIHdoaWNoIGlzIHVzZWQgZm9yIHNob3J0ICg2NC1iaXQpIG1lc3NhZ2VzIGFuZAorICogQ2lwaGVyIEJsb2NrIENoYWluaW5nIChDQkMpIHdoaWNoIHByb3ZpZGVzIHRoZSBzdHJ1Y3R1cmUgbmVlZGVkIGZvciBsb25nZXIKKyAqIG1lc3NhZ2VzLiBJbiBhZGRpdGlvbiB0aGUgQ2lwaGVyIEZlZWRiYWNrIE1vZGUgKENGQi0xMjgpIHN0cmVhbSBjaXBoZXIgbW9kZSwKKyAqIENvdW50ZXIgbW9kZSAoQ1RSKSBhbmQgR2Fsb2lzIENvdW50ZXIgTW9kZSAoR0NNKSBhcmUgaW1wbGVtZW50ZWQgZm9yCisgKiBzcGVjaWZpYyBhbGdvcml0aG1zLgorICoKKyAqIEFsbCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgZ2VuZXJpYyBjaXBoZXIgbGF5ZXIKKyAqIChzZWUgXGMgbWJlZHRsc19jaXBoZXJfc2V0dXAoKSkuCisgKgorICogVGhlIGFzeW1tZXRyaWMgZW5jcnlwdHJpb24gYWxnb3JpdGhtcyBhcmUgYWNjZXNzaWJsZSB2aWEgdGhlIGdlbmVyaWMgcHVibGljCisgKiBrZXkgbGF5ZXIgKHNlZSBcYyBtYmVkdGxzX3BrX2luaXQoKSkuCisgKgorICogVGhlIGZvbGxvd2luZyBhbGdvcml0aG1zIGFyZSBwcm92aWRlZDoKKyAqIC0gU3ltbWV0cmljOgorICogICAtIEFFUyAoc2VlIFxjIG1iZWR0bHNfYWVzX2NyeXB0X2VjYigpLCBcYyBtYmVkdGxzX2Flc19jcnlwdF9jYmMoKSwgXGMgbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCkgYW5kCisgKiAgICAgXGMgbWJlZHRsc19hZXNfY3J5cHRfY3RyKCkpLgorICogICAtIEFSQ0ZPVVIgKHNlZSBcYyBtYmVkdGxzX2FyYzRfY3J5cHQoKSkuCisgKiAgIC0gQmxvd2Zpc2ggLyBCRiAoc2VlIFxjIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCksIFxjIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCksCisgKiAgICAgXGMgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NCgpIGFuZCBcYyBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0cigpKQorICogICAtIENhbWVsbGlhIChzZWUgXGMgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoKSwgXGMgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoKSwKKyAqICAgICBcYyBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NmYjEyOCgpIGFuZCBcYyBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2N0cigpKS4KKyAqICAgLSBERVMvM0RFUyAoc2VlIFxjIG1iZWR0bHNfZGVzX2NyeXB0X2VjYigpLCBcYyBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoKSwgXGMgbWJlZHRsc19kZXMzX2NyeXB0X2VjYigpCisgKiAgICAgYW5kIFxjIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoKSkuCisgKiAgIC0gR0NNIChBRVMtR0NNIGFuZCBDQU1FTExJQS1HQ00pIChzZWUgXGMgbWJlZHRsc19nY21faW5pdCgpKQorICogICAtIFhURUEgKHNlZSBcYyBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiKCkpLgorICogLSBBc3ltbWV0cmljOgorICogICAtIERpZmZpZS1IZWxsbWFuLU1lcmtsZSAoc2VlIFxjIG1iZWR0bHNfZGhtX3JlYWRfcHVibGljKCksIFxjIG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCkKKyAqICAgICBhbmQgXGMgbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoKSkuCisgKiAgIC0gUlNBIChzZWUgXGMgbWJlZHRsc19yc2FfcHVibGljKCkgYW5kIFxjIG1iZWR0bHNfcnNhX3ByaXZhdGUoKSkuCisgKiAgIC0gRWxsaXB0aWMgQ3VydmVzIG92ZXIgR0YocCkgKHNlZSBcYyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCkpLgorICogICAtIEVsbGlwdGljIEN1cnZlIERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSAoRUNEU0EpIChzZWUgXGMgbWJlZHRsc19lY2RzYV9pbml0KCkpLgorICogICAtIEVsbGlwdGljIEN1cnZlIERpZmZpZSBIZWxsbWFuIChFQ0RIKSAoc2VlIFxjIG1iZWR0bHNfZWNkaF9pbml0KCkpLgorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlCisgKiBzZWNyZWN5LgorICoKKyAqIEl0IGFsc28gcHJvdmlkZXMgYXN5bW1ldHJpYyBrZXkgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSB1c2VkIGZvcgorICogY29uZmlkZW50aWFsaXR5LCBpbnRlZ3JpdHksIGF1dGhlbnRpY2F0aW9uIGFuZCBub24tcmVwdWRpYXRpb24uCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19oYXNoaW5nLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfaGFzaGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjE1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfaGFzaGluZy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKgorICogQGZpbGUKKyAqIEhhc2hpbmcgbW9kdWxlIGRvY3VtZW50YXRpb24gZmlsZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoqCisgKiBAYWRkdG9ncm91cCBoYXNoaW5nX21vZHVsZSBIYXNoaW5nIG1vZHVsZQorICoKKyAqIFRoZSBNZXNzYWdlIERpZ2VzdCAoTUQpIG9yIEhhc2hpbmcgbW9kdWxlIHByb3ZpZGVzIG9uZS13YXkgaGFzaGluZworICogZnVuY3Rpb25zLiBTdWNoIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBoYXNoIG1lc3NhZ2UKKyAqIGF1dGhlbnRpY2F0aW9uIGNvZGUgKEhNQUMpIHdoZW4gc2VuZGluZyBhIG1lc3NhZ2UuIFN1Y2ggYSBITUFDIGNhbiBiZSB1c2VkCisgKiBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcHJpdmF0ZSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uLCB3aGljaCBpcyBhIG1lc3NhZ2UKKyAqIGludGVncml0eSBjb250cm9sLgorICoKKyAqIEFsbCBoYXNoIGFsZ29yaXRobXMgY2FuIGJlIGFjY2Vzc2VkIHZpYSB0aGUgZ2VuZXJpYyBNRCBsYXllciAoc2VlCisgKiBcYyBtYmVkdGxzX21kX3NldHVwKCkpCisgKgorICogVGhlIGZvbGxvd2luZyBoYXNoaW5nLWFsZ29yaXRobXMgYXJlIHByb3ZpZGVkOgorICogLSBNRDIsIE1ENCwgTUQ1IDEyOC1iaXQgb25lLXdheSBoYXNoIGZ1bmN0aW9ucyBieSBSb24gUml2ZXN0LgorICogLSBTSEEtMSwgU0hBLTI1NiwgU0hBLTM4NC81MTIgMTYwLWJpdCBvciBtb3JlIG9uZS13YXkgaGFzaCBmdW5jdGlvbnMgYnkKKyAqICAgTklTVCBhbmQgTlNBLgorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG9uZS13YXkgaGFzaGluZyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX21haW5wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5NDE2NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qKgorICogQGZpbGUKKyAqIE1haW4gcGFnZSBkb2N1bWVudGF0aW9uIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qKgorICogQG1haW5wYWdlIG1iZWQgVExTIHYyLjQuMSBzb3VyY2UgY29kZSBkb2N1bWVudGF0aW9uCisgKgorICogVGhpcyBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIG1iZWQgVExTLiAgSXQgd2FzCisgKiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNwZWNpYWxseSBmb3JtYXR0ZWQgY29tbWVudCBibG9ja3MgaW4KKyAqIG1iZWQgVExTJ3Mgc291cmNlIGNvZGUgdXNpbmcgRG94eWdlbi4gIChTZWUKKyAqIGh0dHA6Ly93d3cuc3RhY2submwvfmRpbWl0cmkvZG94eWdlbi8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRG94eWdlbikKKyAqCisgKiBtYmVkIFRMUyBoYXMgYSBzaW1wbGUgc2V0dXA6IGl0IHByb3ZpZGVzIHRoZSBpbmdyZWRpZW50cyBmb3IgYW4gU1NML1RMUworICogaW1wbGVtZW50YXRpb24uIFRoZXNlIGluZ3JlZGllbnRzIGFyZSBsaXN0ZWQgYXMgbW9kdWxlcyBpbiB0aGUKKyAqIFxyZWYgbWFpbnBhZ2VfbW9kdWxlcyAiTW9kdWxlcyBzZWN0aW9uIi4gVGhpcyAiTW9kdWxlcyBzZWN0aW9uIiBpbnRyb2R1Y2VzCisgKiB0aGUgaGlnaC1sZXZlbCBtb2R1bGUgY29uY2VwdHMgdXNlZCB0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnRhdGlvbi5cbgorICogU29tZSBleGFtcGxlcyBvZiBtYmVkIFRMUyB1c2FnZSBjYW4gYmUgZm91bmQgaW4gdGhlIFxyZWYgbWFpbnBhZ2VfZXhhbXBsZXMKKyAqICJFeGFtcGxlcyBzZWN0aW9uIi4KKyAqCisgKiBAc2VjdGlvbiBtYWlucGFnZV9tb2R1bGVzIE1vZHVsZXMKKyAqCisgKiBtYmVkIFRMUyBzdXBwb3J0cyBTU0x2MyB1cCB0byBUTFN2MS4yIGNvbW11bmljYXRpb24gYnkgcHJvdmlkaW5nIHRoZQorICogZm9sbG93aW5nOgorICogLSBUQ1AvSVAgY29tbXVuaWNhdGlvbiBmdW5jdGlvbnM6IGxpc3RlbiwgY29ubmVjdCwgYWNjZXB0LCByZWFkL3dyaXRlLgorICogLSBTU0wvVExTIGNvbW11bmljYXRpb24gZnVuY3Rpb25zOiBpbml0LCBoYW5kc2hha2UsIHJlYWQvd3JpdGUuCisgKiAtIFguNTA5IGZ1bmN0aW9uczogQ1JULCBDUkwgYW5kIGtleSBoYW5kbGluZworICogLSBSYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KKyAqIC0gSGFzaGluZworICogLSBFbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBBYm92ZSBmdW5jdGlvbnMgYXJlIHNwbGl0IHVwIG5lYXRseSBpbnRvIGxvZ2ljYWwgaW50ZXJmYWNlcy4gVGhlc2UgY2FuIGJlCisgKiB1c2VkIHNlcGFyYXRlbHkgdG8gcHJvdmlkZSBhbnkgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBvciB0byBtaXgtYW5kLW1hdGNoCisgKiBpbnRvIGFuIFNTTCBzZXJ2ZXIvY2xpZW50IHNvbHV0aW9uIHRoYXQgdXRpbGlzZXMgYSBYLjUwOSBQS0kuIEV4YW1wbGVzIG9mCisgKiBzdWNoIGltcGxlbWVudGF0aW9ucyBhcmUgYW1wbHkgcHJvdmlkZWQgd2l0aCB0aGUgc291cmNlIGNvZGUuCisgKgorICogTm90ZSB0aGF0IG1iZWQgVExTIGRvZXMgbm90IHByb3ZpZGUgYSBjb250cm9sIGNoYW5uZWwgb3IgKG11bHRpcGxlKSBzZXNzaW9uCisgKiBoYW5kbGluZyB3aXRob3V0IGFkZGl0aW9uYWwgd29yayBmcm9tIHRoZSBkZXZlbG9wZXIuCisgKgorICogQHNlY3Rpb24gbWFpbnBhZ2VfZXhhbXBsZXMgRXhhbXBsZXMKKyAqCisgKiBFeGFtcGxlIHNlcnZlciBzZXR1cDoKKyAqCisgKiBcYiBQcmVyZXF1aXNpdGVzOgorICogLSBYLjUwOSBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkKKyAqIC0gc2Vzc2lvbiBoYW5kbGluZyBmdW5jdGlvbnMKKyAqCisgKiBcYiBTZXR1cDoKKyAqIC0gTG9hZCB5b3VyIGNlcnRpZmljYXRlIGFuZCB5b3VyIHByaXZhdGUgUlNBIGtleSAoWC41MDkgaW50ZXJmYWNlKQorICogLSBTZXR1cCB0aGUgbGlzdGVuaW5nIFRDUCBzb2NrZXQgKFRDUC9JUCBpbnRlcmZhY2UpCisgKiAtIEFjY2VwdCBpbmNvbWluZyBjbGllbnQgY29ubmVjdGlvbiAoVENQL0lQIGludGVyZmFjZSkKKyAqIC0gSW5pdGlhbGlzZSBhcyBhbiBTU0wtc2VydmVyIChTU0wvVExTIGludGVyZmFjZSkKKyAqICAgLSBTZXQgcGFyYW1ldGVycywgZS5nLiBhdXRoZW50aWNhdGlvbiwgY2lwaGVycywgQ0EtY2hhaW4sIGtleSBleGNoYW5nZQorICogICAtIFNldCBjYWxsYmFjayBmdW5jdGlvbnMgUk5HLCBJTywgc2Vzc2lvbiBoYW5kbGluZworICogLSBQZXJmb3JtIGFuIFNTTC1oYW5kc2hha2UgKFNTTC9UTFMgaW50ZXJmYWNlKQorICogLSBSZWFkL3dyaXRlIGRhdGEgKFNTTC9UTFMgaW50ZXJmYWNlKQorICogLSBDbG9zZSBhbmQgY2xlYW51cCAoYWxsIGludGVyZmFjZXMpCisgKgorICogRXhhbXBsZSBjbGllbnQgc2V0dXA6CisgKgorICogXGIgUHJlcmVxdWlzaXRlczoKKyAqIC0gWC41MDkgY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5CisgKiAtIFguNTA5IHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzCisgKgorICogXGIgU2V0dXA6CisgKiAtIExvYWQgdGhlIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzIChYLjUwOSBpbnRlcmZhY2UpCisgKiAtIExvYWQgeW91ciBjZXJ0aWZpY2F0ZSBhbmQgeW91ciBwcml2YXRlIFJTQSBrZXkgKFguNTA5IGludGVyZmFjZSkKKyAqIC0gU2V0dXAgYSBUQ1AvSVAgY29ubmVjdGlvbiAoVENQL0lQIGludGVyZmFjZSkKKyAqIC0gSW5pdGlhbGlzZSBhcyBhbiBTU0wtY2xpZW50IChTU0wvVExTIGludGVyZmFjZSkKKyAqICAgLSBTZXQgcGFyYW1ldGVycywgZS5nLiBhdXRoZW50aWNhdGlvbiBtb2RlLCBjaXBoZXJzLCBDQS1jaGFpbiwgc2Vzc2lvbgorICogICAtIFNldCBjYWxsYmFjayBmdW5jdGlvbnMgUk5HLCBJTworICogLSBQZXJmb3JtIGFuIFNTTC1oYW5kc2hha2UgKFNTTC9UTFMgaW50ZXJmYWNlKQorICogLSBWZXJpZnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoU1NML1RMUyBpbnRlcmZhY2UpCisgKiAtIFdyaXRlL3JlYWQgZGF0YSAoU1NML1RMUyBpbnRlcmZhY2UpCisgKiAtIENsb3NlIGFuZCBjbGVhbnVwIChhbGwgaW50ZXJmYWNlcykKKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3JuZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3JuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTllZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2Nfcm5nLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqCisgKiBAZmlsZQorICogUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFJORykgbW9kdWxlIGRvY3VtZW50YXRpb24gZmlsZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoqCisgKiBAYWRkdG9ncm91cCBybmdfbW9kdWxlIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChSTkcpIG1vZHVsZQorICoKKyAqIFRoZSBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUk5HKSBtb2R1bGUgcHJvdmlkZXMgcmFuZG9tIG51bWJlcgorICogZ2VuZXJhdGlvbiwgc2VlIFxjIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCkuCisgKgorICogVGhlIGJsb2NrLWNpcGhlciBjb3VudGVyLW1vZGUgYmFzZWQgZGV0ZXJtaW5pc3RpYyByYW5kb20KKyAqIGJpdCBnZW5lcmF0b3IgKENUUl9EQlJHKSBhcyBzcGVjaWZpZWQgaW4gTklTVCBTUDgwMC05MC4gSXQgbmVlZHMgYW4gZXh0ZXJuYWwKKyAqIHNvdXJjZSBvZiBlbnRyb3B5LiBGb3IgdGhlc2UgcHVycG9zZXMgXGMgbWJlZHRsc19lbnRyb3B5X2Z1bmMoKSBjYW4gYmUgdXNlZC4KKyAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYSBzaW1wbGUgZW50cm9weSBhY2N1bXVsYXRvciBkZXNpZ24uCisgKgorICogVGhlIG90aGVyIG51bWJlciBnZW5lcmF0b3IgdGhhdCBpcyBpbmNsdWRlZCBpcyBsZXNzIHN0cm9uZyBhbmQgdXNlcyB0aGUKKyAqIEhBVkVHRSAoSEFyZHdhcmUgVm9sYXRpbGUgRW50cm9weSBHYXRoZXJpbmcgYW5kIEV4cGFuc2lvbikgc29mdHdhcmUgaGV1cmlzdGljCisgKiB3aGljaCBjb25zaWRlcmVkIHVuc2FmZSBmb3IgcHJpbWFyeSB1c2FnZSwgYnV0IHByb3ZpZGVzIGFkZGl0aW9uYWwgcmFuZG9tCisgKiB0byB0aGUgZW50cm9weSBwb29sIGlmIGVuYWJsZXMuCisgKgorICogTWVhbmluZyB0aGF0IHRoZXJlIHNlZW1zIHRvIGJlIG5vIHByYWN0aWNhbCBhbGdvcml0aG0gdGhhdCBjYW4gZ3Vlc3MKKyAqIHRoZSBuZXh0IGJpdCB3aXRoIGEgcHJvYmFiaWxpdHkgbGFyZ2VyIHRoYW4gMS8yIGluIGFuIG91dHB1dCBzZXF1ZW5jZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVycy4KKyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3NzbHRscy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3NzbHRscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMTA0YmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2Nfc3NsdGxzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqCisgKiBAZmlsZQorICogU1NML1RMUyBjb21tdW5pY2F0aW9uIG1vZHVsZSBkb2N1bWVudGF0aW9uIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgc3NsdGxzX2NvbW11bmljYXRpb25fbW9kdWxlIFNTTC9UTFMgY29tbXVuaWNhdGlvbiBtb2R1bGUKKyAqCisgKiBUaGUgU1NML1RMUyBjb21tdW5pY2F0aW9uIG1vZHVsZSBwcm92aWRlcyB0aGUgbWVhbnMgdG8gY3JlYXRlIGFuIFNTTC9UTFMKKyAqIGNvbW11bmljYXRpb24gY2hhbm5lbC4KKyAqCisgKiBUaGUgYmFzaWMgcHJvdmlzaW9ucyBhcmU6CisgKiAtIGluaXRpYWxpc2UgYW4gU1NML1RMUyBjb250ZXh0IChzZWUgXGMgbWJlZHRsc19zc2xfaW5pdCgpKS4KKyAqIC0gcGVyZm9ybSBhbiBTU0wvVExTIGhhbmRzaGFrZSAoc2VlIFxjIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgpKS4KKyAqIC0gcmVhZC93cml0ZSAoc2VlIFxjIG1iZWR0bHNfc3NsX3JlYWQoKSBhbmQgXGMgbWJlZHRsc19zc2xfd3JpdGUoKSkuCisgKiAtIG5vdGlmeSBhIHBlZXIgdGhhdCBjb25uZWN0aW9uIGlzIGJlaW5nIGNsb3NlZCAoc2VlIFxjIG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSgpKS4KKyAqCisgKiBNYW55IGFzcGVjdHMgb2Ygc3VjaCBhIGNoYW5uZWwgYXJlIHNldCB0aHJvdWdoIHBhcmFtZXRlcnMgYW5kIGNhbGxiYWNrCisgKiBmdW5jdGlvbnM6CisgKiAtIHRoZSBlbmRwb2ludCByb2xlOiBjbGllbnQgb3Igc2VydmVyLgorICogLSB0aGUgYXV0aGVudGljYXRpb24gbW9kZS4gU2hvdWxkIHZlcmlmaWNhdGlvbiB0YWtlIHBsYWNlLgorICogLSB0aGUgSG9zdC10by1ob3N0IGNvbW11bmljYXRpb24gY2hhbm5lbC4gQSBUQ1AvSVAgbW9kdWxlIGlzIHByb3ZpZGVkLgorICogLSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFJORykuCisgKiAtIHRoZSBjaXBoZXJzIHRvIHVzZSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLgorICogLSBzZXNzaW9uIGNvbnRyb2wgZnVuY3Rpb25zLgorICogLSBYLjUwOSBwYXJhbWV0ZXJzIGZvciBjZXJ0aWZpY2F0ZS1oYW5kbGluZyBhbmQga2V5IGV4Y2hhbmdlLgorICoKKyAqIFRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBTU0wvVExTIHNlcnZlciBhbmQgY2xpZW50IGFuZCB0byBwcm92aWRlIGEgYmFzaWMKKyAqIGZyYW1ld29yayB0byBzZXR1cCBhbmQgY29tbXVuaWNhdGUgdGhyb3VnaCBhbiBTU0wvVExTIGNvbW11bmljYXRpb24gY2hhbm5lbC5cbgorICogTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHByb3ZpZGUgZm9yIHNldmVyYWwgYXNwZWN0cyB5b3Vyc2VsZiBhcyBtZW50aW9uZWQgYWJvdmUuCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY190Y3BpcC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vaW5wdXQvZG9jX3RjcGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkM2NhMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY190Y3BpcC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogQGZpbGUKKyAqIFRDUC9JUCBjb21tdW5pY2F0aW9uIG1vZHVsZSBkb2N1bWVudGF0aW9uIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgdGNwaXBfY29tbXVuaWNhdGlvbl9tb2R1bGUgVENQL0lQIGNvbW11bmljYXRpb24gbW9kdWxlCisgKgorICogVGhlIFRDUC9JUCBjb21tdW5pY2F0aW9uIG1vZHVsZSBwcm92aWRlcyBmb3IgYSBjaGFubmVsIG9mCisgKiBjb21tdW5pY2F0aW9uIGZvciB0aGUgXGxpbmsgc3NsdGxzX2NvbW11bmljYXRpb25fbW9kdWxlIFNTTC9UTFMgY29tbXVuaWNhdGlvbgorICogbW9kdWxlXGVuZGxpbmsgdG8gdXNlLgorICogSW4gdGhlIFRDUC9JUC1tb2RlbCBpdCBwcm92aWRlcyBmb3IgY29tbXVuaWNhdGlvbiB1cCB0byB0aGUgVHJhbnNwb3J0CisgKiAob3IgSG9zdC10by1ob3N0KSBsYXllci4KKyAqIFNTTC9UTFMgcmVzaWRlcyBvbiB0b3Agb2YgdGhhdCwgaW4gdGhlIEFwcGxpY2F0aW9uIGxheWVyLCBhbmQgbWFrZXMgdXNlIG9mCisgKiBpdHMgYmFzaWMgcHJvdmlzaW9uczoKKyAqIC0gbGlzdGVuaW5nIG9uIGEgcG9ydCAoc2VlIFxjIG1iZWR0bHNfbmV0X2JpbmQoKSkuCisgKiAtIGFjY2VwdGluZyBhIGNvbm5lY3Rpb24gKHRocm91Z2ggXGMgbWJlZHRsc19uZXRfYWNjZXB0KCkpLgorICogLSByZWFkL3dyaXRlICh0aHJvdWdoIFxjIG1iZWR0bHNfbmV0X3JlY3YoKS9cYyBtYmVkdGxzX25ldF9zZW5kKCkpLgorICogLSBjbG9zZSBhIGNvbm5lY3Rpb24gKHRocm91Z2ggXGMgbWJlZHRsc19uZXRfY2xvc2UoKSkuCisgKgorICogVGhpcyB3YXkgeW91IGhhdmUgdGhlIG1lYW5zIHRvLCBmb3IgZXhhbXBsZSwgaW1wbGVtZW50IGFuZCB1c2UgYW4gVURQIG9yCisgKiBJUFNlYyBjb21tdW5pY2F0aW9uIHNvbHV0aW9uIGFzIGEgYmFzaXMuCisgKgorICogVGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgYXQgc2VydmVyLSBhbmQgY2xpZW50c2lkZSB0byBwcm92aWRlIGEgYmFzaWMKKyAqIG1lYW5zIG9mIGNvbW11bmljYXRpb24gb3ZlciB0aGUgaW50ZXJuZXQuCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9kb3h5Z2VuL2lucHV0L2RvY194NTA5LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfeDUwOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNWYwZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9pbnB1dC9kb2NfeDUwOS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKgorICogQGZpbGUKKyAqIFguNTA5IG1vZHVsZSBkb2N1bWVudGF0aW9uIGZpbGUuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qKgorICogQGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUgWC41MDkgbW9kdWxlCisgKgorICogVGhlIFguNTA5IG1vZHVsZSBwcm92aWRlcyBYLjUwOSBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nIGFuZCB2ZXJpZmljYXRpb24KKyAqIG9mIGNlcnRpZmljYXRlcy4KKyAqIEluIHN1bW1hcnk6CisgKiAgIC0gWC41MDkgY2VydGlmaWNhdGUgKENSVCkgcmVhZGluZyAoc2VlIFxjIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoKSwKKyAqICAgICBcYyBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlcigpLCBcYyBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoKSkuCisgKiAgIC0gWC41MDkgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0IChDUkwpIHJlYWRpbmcgKHNlZQorICogICAgIFxjIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2UoKSwgXGMgbWJlZHRsc194NTA5X2NybF9wYXJzZV9kZXIoKSwKKyAqICAgICBhbmQgXGMgbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCkpLgorICogICAtIFguNTA5IGNlcnRpZmljYXRlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gKHNlZSBcYworICogICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCkgYW5kIFxjIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X3dpdGhfcHJvZmlsZSgpLgorICogICAtIFguNTA5IGNlcnRpZmljYXRlIHdyaXRpbmcgYW5kIGNlcnRpZmljYXRlIHJlcXVlc3Qgd3JpdGluZyAoc2VlCisgKiAgICAgXGMgbWJlZHRsc194NTA5d3JpdGVfY3J0X2RlcigpIGFuZCBcYyBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZGVyKCkpLgorICoKKyAqIFRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGJ1aWxkIGEgY2VydGlmaWNhdGUgYXV0aG9yaXR5IChDQSkgY2hhaW4gYW5kCisgKiB2ZXJpZnkgaXRzIHNpZ25hdHVyZS4gSXQgaXMgYWxzbyB1c2VkIHRvIGdlbmVyYXRlIENlcnRpZmljYXRlIFNpZ25pbmcKKyAqIFJlcXVlc3RzIGFuZCBYLjUwOSBjZXJ0aWZpY2F0ZXMganVzdCBhcyBhIENBIHdvdWxkIGRvLgorICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vbWJlZHRscy5kb3h5ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg3OTRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2RveHlnZW4vbWJlZHRscy5kb3h5ZmlsZQpAQCAtMCwwICsxLDE5MTEgQEAKKyMgRG94eWZpbGUgMS44LjQKKworIyBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbQorIyBkb3h5Z2VuICh3d3cuZG94eWdlbi5vcmcpIGZvciBhIHByb2plY3QuCisjCisjIEFsbCB0ZXh0IGFmdGVyIGEgZG91YmxlIGhhc2ggKCMjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgaXMgcGxhY2VkCisjIGluIGZyb250IG9mIHRoZSBUQUcgaXQgaXMgcHJlY2VkaW5nIC4KKyMgQWxsIHRleHQgYWZ0ZXIgYSBoYXNoICgjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgd2lsbCBiZSBpZ25vcmVkLgorIyBUaGUgZm9ybWF0IGlzOgorIyAgICAgICBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMgRm9yIGxpc3RzIGl0ZW1zIGNhbiBhbHNvIGJlIGFwcGVuZGVkIHVzaW5nOgorIyAgICAgICBUQUcgKz0gdmFsdWUgW3ZhbHVlLCAuLi5dCisjIFZhbHVlcyB0aGF0IGNvbnRhaW4gc3BhY2VzIHNob3VsZCBiZSBwbGFjZWQgYmV0d2VlbiBxdW90ZXMgKCIgIikuCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlCisjIHRoYXQgZm9sbG93LiBUaGUgZGVmYXVsdCBpcyBVVEYtOCB3aGljaCBpcyBhbHNvIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwKKyMgdGV4dCBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlCisjIGljb252IGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlCisjIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiBmb3IgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorCitET1hZRklMRV9FTkNPRElORyAgICAgID0gVVRGLTgKKworIyBUaGUgUFJPSkVDVF9OQU1FIHRhZyBpcyBhIHNpbmdsZSB3b3JkIChvciBzZXF1ZW5jZSBvZiB3b3JkcykgdGhhdCBzaG91bGQKKyMgaWRlbnRpZnkgdGhlIHByb2plY3QuIE5vdGUgdGhhdCBpZiB5b3UgZG8gbm90IHVzZSBEb3h5d2l6YXJkIHlvdSBuZWVkCisjIHRvIHB1dCBxdW90ZXMgYXJvdW5kIHRoZSBwcm9qZWN0IG5hbWUgaWYgaXQgY29udGFpbnMgc3BhY2VzLgorCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gIm1iZWQgVExTIHYyLjQuMSIKKworIyBUaGUgUFJPSkVDVF9OVU1CRVIgdGFnIGNhbiBiZSB1c2VkIHRvIGVudGVyIGEgcHJvamVjdCBvciByZXZpc2lvbiBudW1iZXIuCisjIFRoaXMgY291bGQgYmUgaGFuZHkgZm9yIGFyY2hpdmluZyB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb3IKKyMgaWYgc29tZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGlzIHVzZWQuCisKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPQorCisjIFVzaW5nIHRoZSBQUk9KRUNUX0JSSUVGIHRhZyBvbmUgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgb25lIGxpbmUgZGVzY3JpcHRpb24KKyMgZm9yIGEgcHJvamVjdCB0aGF0IGFwcGVhcnMgYXQgdGhlIHRvcCBvZiBlYWNoIHBhZ2UgYW5kIHNob3VsZCBnaXZlIHZpZXdlcgorIyBhIHF1aWNrIGlkZWEgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIHByb2plY3QuIEtlZXAgdGhlIGRlc2NyaXB0aW9uIHNob3J0LgorCitQUk9KRUNUX0JSSUVGICAgICAgICAgID0KKworIyBXaXRoIHRoZSBQUk9KRUNUX0xPR08gdGFnIG9uZSBjYW4gc3BlY2lmeSBhbiBsb2dvIG9yIGljb24gdGhhdCBpcworIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlIG1heGltdW0gaGVpZ2h0IG9mIHRoZSBsb2dvIHNob3VsZCBub3QKKyMgZXhjZWVkIDU1IHBpeGVscyBhbmQgdGhlIG1heGltdW0gd2lkdGggc2hvdWxkIG5vdCBleGNlZWQgMjAwIHBpeGVscy4KKyMgRG94eWdlbiB3aWxsIGNvcHkgdGhlIGxvZ28gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisKK1BST0pFQ1RfTE9HTyAgICAgICAgICAgPQorCisjIFRoZSBPVVRQVVRfRElSRUNUT1JZIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkKKyMgYmFzZSBwYXRoIHdoZXJlIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQsIGl0IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uCisjIHdoZXJlIGRveHlnZW4gd2FzIHN0YXJ0ZWQuIElmIGxlZnQgYmxhbmsgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZC4KKworT1VUUFVUX0RJUkVDVE9SWSAgICAgICA9IGFwaWRvYy8KKworIyBJZiB0aGUgQ1JFQVRFX1NVQkRJUlMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGNyZWF0ZQorIyA0MDk2IHN1Yi1kaXJlY3RvcmllcyAoaW4gMiBsZXZlbHMpIHVuZGVyIHRoZSBvdXRwdXQgZGlyZWN0b3J5IG9mIGVhY2ggb3V0cHV0CisjIGZvcm1hdCBhbmQgd2lsbCBkaXN0cmlidXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMgb3ZlciB0aGVzZSBkaXJlY3Rvcmllcy4KKyMgRW5hYmxpbmcgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIGZlZWRpbmcgZG94eWdlbiBhIGh1Z2UgYW1vdW50IG9mCisjIHNvdXJjZSBmaWxlcywgd2hlcmUgcHV0dGluZyBhbGwgZ2VuZXJhdGVkIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3b3VsZAorIyBvdGhlcndpc2UgY2F1c2UgcGVyZm9ybWFuY2UgcHJvYmxlbXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KKworQ1JFQVRFX1NVQkRJUlMgICAgICAgICA9IE5PCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwKKyMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgYnkgZG94eWdlbiBpcyB3cml0dGVuLiBEb3h5Z2VuIHdpbGwgdXNlIHRoaXMKKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLgorIyBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLCBvdGhlciBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZToKKyMgQWZyaWthYW5zLCBBcmFiaWMsIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwgQ2hpbmVzZS1UcmFkaXRpb25hbCwKKyMgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIER1dGNoLCBFc3BlcmFudG8sIEZhcnNpLCBGaW5uaXNoLCBGcmVuY2gsIEdlcm1hbiwKKyMgR3JlZWssIEh1bmdhcmlhbiwgSXRhbGlhbiwgSmFwYW5lc2UsIEphcGFuZXNlLWVuIChKYXBhbmVzZSB3aXRoIEVuZ2xpc2gKKyMgbWVzc2FnZXMpLCBLb3JlYW4sIEtvcmVhbi1lbiwgTGF0dmlhbiwgTGl0aHVhbmlhbiwgTm9yd2VnaWFuLCBNYWNlZG9uaWFuLAorIyBQZXJzaWFuLCBQb2xpc2gsIFBvcnR1Z3Vlc2UsIFJvbWFuaWFuLCBSdXNzaWFuLCBTZXJiaWFuLCBTZXJiaWFuLUN5cmlsbGljLAorIyBTbG92YWssIFNsb3ZlbmUsIFNwYW5pc2gsIFN3ZWRpc2gsIFVrcmFpbmlhbiwgYW5kIFZpZXRuYW1lc2UuCisKK09VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoCisKKyMgSWYgdGhlIEJSSUVGX01FTUJFUl9ERVNDIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGluY2x1ZGUgYnJpZWYgbWVtYmVyIGRlc2NyaXB0aW9ucyBhZnRlciB0aGUgbWVtYmVycyB0aGF0IGFyZSBsaXN0ZWQgaW4KKyMgdGhlIGZpbGUgYW5kIGNsYXNzIGRvY3VtZW50YXRpb24gKHNpbWlsYXIgdG8gSmF2YURvYykuCisjIFNldCB0byBOTyB0byBkaXNhYmxlIHRoaXMuCisKK0JSSUVGX01FTUJFUl9ERVNDICAgICAgPSBZRVMKKworIyBJZiB0aGUgUkVQRUFUX0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIHByZXBlbmQKKyMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisjIE5vdGU6IGlmIGJvdGggSElERV9VTkRPQ19NRU1CRVJTIGFuZCBCUklFRl9NRU1CRVJfREVTQyBhcmUgc2V0IHRvIE5PLCB0aGUKKyMgYnJpZWYgZGVzY3JpcHRpb25zIHdpbGwgYmUgY29tcGxldGVseSBzdXBwcmVzc2VkLgorCitSRVBFQVRfQlJJRUYgICAgICAgICAgID0gWUVTCisKKyMgVGhpcyB0YWcgaW1wbGVtZW50cyBhIHF1YXNpLWludGVsbGlnZW50IGJyaWVmIGRlc2NyaXB0aW9uIGFiYnJldmlhdG9yCisjIHRoYXQgaXMgdXNlZCB0byBmb3JtIHRoZSB0ZXh0IGluIHZhcmlvdXMgbGlzdGluZ3MuIEVhY2ggc3RyaW5nCisjIGluIHRoaXMgbGlzdCwgaWYgZm91bmQgYXMgdGhlIGxlYWRpbmcgdGV4dCBvZiB0aGUgYnJpZWYgZGVzY3JpcHRpb24sIHdpbGwgYmUKKyMgc3RyaXBwZWQgZnJvbSB0aGUgdGV4dCBhbmQgdGhlIHJlc3VsdCBhZnRlciBwcm9jZXNzaW5nIHRoZSB3aG9sZSBsaXN0LCBpcworIyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4KKyMgSWYgbGVmdCBibGFuaywgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgKCIkbmFtZSIgaXMgYXV0b21hdGljYWxseQorIyByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkpOiAiVGhlICRuYW1lIGNsYXNzIiAiVGhlICRuYW1lIHdpZGdldCIKKyMgIlRoZSAkbmFtZSBmaWxlIiAiaXMiICJwcm92aWRlcyIgInNwZWNpZmllcyIgImNvbnRhaW5zIgorIyAicmVwcmVzZW50cyIgImEiICJhbiIgInRoZSIKKworQUJCUkVWSUFURV9CUklFRiAgICAgICA9ICJUaGUgJG5hbWUgY2xhc3MiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRuYW1lIHdpZGdldCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgJG5hbWUgZmlsZSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGlzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50cyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYW4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorCisjIElmIHRoZSBBTFdBWVNfREVUQUlMRURfU0VDIGFuZCBSRVBFQVRfQlJJRUYgdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTIHRoZW4KKyMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZGV0YWlsZWQgc2VjdGlvbiBldmVuIGlmIHRoZXJlIGlzIG9ubHkgYSBicmllZgorIyBkZXNjcmlwdGlvbi4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsCisjIGluaGVyaXRlZCBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZQorIyBtZW1iZXJzIHdlcmUgb3JkaW5hcnkgY2xhc3MgbWVtYmVycy4gQ29uc3RydWN0b3JzLCBkZXN0cnVjdG9ycyBhbmQgYXNzaWdubWVudAorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4KKworSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4gd2lsbCBwcmVwZW5kIHRoZSBmdWxsCisjIHBhdGggYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0CisjIHRvIE5PIHRoZSBzaG9ydGVzdCBwYXRoIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUgd2lsbCBiZSB1c2VkLgorCitGVUxMX1BBVEhfTkFNRVMgICAgICAgID0gTk8KKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIFNUUklQX0ZST01fUEFUSCB0YWcKKyMgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUgcGF0aC4gU3RyaXBwaW5nIGlzCisjIG9ubHkgZG9uZSBpZiBvbmUgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmdzIG1hdGNoZXMgdGhlIGxlZnQtaGFuZCBwYXJ0IG9mCisjIHRoZSBwYXRoLiBUaGUgdGFnIGNhbiBiZSB1c2VkIHRvIHNob3cgcmVsYXRpdmUgcGF0aHMgaW4gdGhlIGZpbGUgbGlzdC4KKyMgSWYgbGVmdCBibGFuayB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggZG94eWdlbiBpcyBydW4gaXMgdXNlZCBhcyB0aGUKKyMgcGF0aCB0byBzdHJpcC4gTm90ZSB0aGF0IHlvdSBzcGVjaWZ5IGFic29sdXRlIHBhdGhzIGhlcmUsIGJ1dCBhbHNvCisjIHJlbGF0aXZlIHBhdGhzLCB3aGljaCB3aWxsIGJlIHJlbGF0aXZlIGZyb20gdGhlIGRpcmVjdG9yeSB3aGVyZSBkb3h5Z2VuIGlzCisjIHN0YXJ0ZWQuCisKK1NUUklQX0ZST01fUEFUSCAgICAgICAgPQorCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mCisjIHRoZSBwYXRoIG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIGNsYXNzLCB3aGljaCB0ZWxscworIyB0aGUgcmVhZGVyIHdoaWNoIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIGEgY2xhc3MuCisjIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MKKyMgZGVmaW5pdGlvbiBpcyB1c2VkLiBPdGhlcndpc2Ugb25lIHNob3VsZCBzcGVjaWZ5IHRoZSBpbmNsdWRlIHBhdGhzIHRoYXQKKyMgYXJlIG5vcm1hbGx5IHBhc3NlZCB0byB0aGUgY29tcGlsZXIgdXNpbmcgdGhlIC1JIGZsYWcuCisKK1NUUklQX0ZST01fSU5DX1BBVEggICAgPQorCisjIElmIHRoZSBTSE9SVF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIG11Y2ggc2hvcnRlcgorIyAoYnV0IGxlc3MgcmVhZGFibGUpIGZpbGUgbmFtZXMuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3VyIGZpbGUgc3lzdGVtCisjIGRvZXNuJ3Qgc3VwcG9ydCBsb25nIG5hbWVzIGxpa2Ugb24gRE9TLCBNYWMsIG9yIENELVJPTS4KKworU0hPUlRfTkFNRVMgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEpBVkFET0NfQVVUT0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbgorIyB3aWxsIGludGVycHJldCB0aGUgZmlyc3QgbGluZSAodW50aWwgdGhlIGZpcnN0IGRvdCkgb2YgYSBKYXZhRG9jLXN0eWxlCisjIGNvbW1lbnQgYXMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLiBJZiBzZXQgdG8gTk8sIHRoZSBKYXZhRG9jCisjIGNvbW1lbnRzIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzCisjICh0aHVzIHJlcXVpcmluZyBhbiBleHBsaWNpdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisKK0pBVkFET0NfQVVUT0JSSUVGICAgICAgPSBZRVMKKworIyBJZiB0aGUgUVRfQVVUT0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsCisjIGludGVycHJldCB0aGUgZmlyc3QgbGluZSAodW50aWwgdGhlIGZpcnN0IGRvdCkgb2YgYSBRdC1zdHlsZQorIyBjb21tZW50IGFzIHRoZSBicmllZiBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgY29tbWVudHMKKyMgd2lsbCBiZWhhdmUganVzdCBsaWtlIHJlZ3VsYXIgUXQtc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nCisjIGFuIGV4cGxpY2l0IFxicmllZiBjb21tYW5kIGZvciBhIGJyaWVmIGRlc2NyaXB0aW9uLikKKworUVRfQVVUT0JSSUVGICAgICAgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgRG94eWdlbgorIyB0cmVhdCBhIG11bHRpLWxpbmUgQysrIHNwZWNpYWwgY29tbWVudCBibG9jayAoaS5lLiBhIGJsb2NrIG9mIC8vISBvciAvLy8KKyMgY29tbWVudHMpIGFzIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisjIFRoZSBuZXcgZGVmYXVsdCBpcyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZAorIyBkZXNjcmlwdGlvbi4gU2V0IHRoaXMgdGFnIHRvIFlFUyBpZiB5b3UgcHJlZmVyIHRoZSBvbGQgYmVoYXZpb3VyIGluc3RlYWQuCisKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworCisjIElmIHRoZSBJTkhFUklUX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGFuIHVuZG9jdW1lbnRlZAorIyBtZW1iZXIgaW5oZXJpdHMgdGhlIGRvY3VtZW50YXRpb24gZnJvbSBhbnkgZG9jdW1lbnRlZCBtZW1iZXIgdGhhdCBpdAorIyByZS1pbXBsZW1lbnRzLgorCitJTkhFUklUX0RPQ1MgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNFUEFSQVRFX01FTUJFUl9QQUdFUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgcHJvZHVjZQorIyBhIG5ldyBwYWdlIGZvciBlYWNoIG1lbWJlci4gSWYgc2V0IHRvIE5PLCB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIG1lbWJlciB3aWxsCisjIGJlIHBhcnQgb2YgdGhlIGZpbGUvY2xhc3MvbmFtZXNwYWNlIHRoYXQgY29udGFpbnMgaXQuCisKK1NFUEFSQVRFX01FTUJFUl9QQUdFUyAgPSBOTworCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLgorIyBEb3h5Z2VuIHVzZXMgdGhpcyB2YWx1ZSB0byByZXBsYWNlIHRhYnMgYnkgc3BhY2VzIGluIGNvZGUgZnJhZ21lbnRzLgorCitUQUJfU0laRSAgICAgICAgICAgICAgID0gOAorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2YgYWxpYXNlcyB0aGF0IGFjdHMKKyMgYXMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybSAibmFtZT12YWx1ZSIuCisjIEZvciBleGFtcGxlIGFkZGluZyAic2lkZWVmZmVjdD1ccGFyIFNpZGUgRWZmZWN0czpcbiIgd2lsbCBhbGxvdyB5b3UgdG8KKyMgcHV0IHRoZSBjb21tYW5kIFxzaWRlZWZmZWN0IChvciBAc2lkZWVmZmVjdCkgaW4gdGhlIGRvY3VtZW50YXRpb24sIHdoaWNoCisjIHdpbGwgcmVzdWx0IGluIGEgdXNlci1kZWZpbmVkIHBhcmFncmFwaCB3aXRoIGhlYWRpbmcgIlNpZGUgRWZmZWN0czoiLgorIyBZb3UgY2FuIHB1dCBcbidzIGluIHRoZSB2YWx1ZSBwYXJ0IG9mIGFuIGFsaWFzIHRvIGluc2VydCBuZXdsaW5lcy4KKworQUxJQVNFUyAgICAgICAgICAgICAgICA9CisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIG51bWJlciBvZiB3b3JkLWtleXdvcmQgbWFwcGluZ3MgKFRDTCBvbmx5KS4KKyMgQSBtYXBwaW5nIGhhcyB0aGUgZm9ybSAibmFtZT12YWx1ZSIuIEZvciBleGFtcGxlIGFkZGluZworIyAiY2xhc3M9aXRjbDo6Y2xhc3MiIHdpbGwgYWxsb3cgeW91IHRvIHVzZSB0aGUgY29tbWFuZCBjbGFzcyBpbiB0aGUKKyMgaXRjbDo6Y2xhc3MgbWVhbmluZy4KKworVENMX1NVQlNUICAgICAgICAgICAgICA9CisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfRk9SX0MgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgQworIyBzb3VyY2VzIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIEMuCisjIEZvciBpbnN0YW5jZSwgc29tZSBvZiB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCB3aWxsIGJlIGRpZmZlcmVudC4gVGhlIGxpc3QKKyMgb2YgYWxsIG1lbWJlcnMgd2lsbCBiZSBvbWl0dGVkLCBldGMuCisKK09QVElNSVpFX09VVFBVVF9GT1JfQyAgPSBZRVMKKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9KQVZBIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEphdmEKKyMgc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvcgorIyBKYXZhLiBGb3IgaW5zdGFuY2UsIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsIHF1YWxpZmllZAorIyBzY29wZXMgd2lsbCBsb29rIGRpZmZlcmVudCwgZXRjLgorCitPUFRJTUlaRV9PVVRQVVRfSkFWQSAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX0ZPUl9GT1JUUkFOIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEZvcnRyYW4KKyMgc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvcgorIyBGb3J0cmFuLgorCitPUFRJTUlaRV9GT1JfRk9SVFJBTiAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9WSERMIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIFZIREwKKyMgc291cmNlcy4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgdGFpbG9yZWQgZm9yCisjIFZIREwuCisKK09QVElNSVpFX09VVFBVVF9WSERMICAgPSBOTworCisjIERveHlnZW4gc2VsZWN0cyB0aGUgcGFyc2VyIHRvIHVzZSBkZXBlbmRpbmcgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZXMgaXQKKyMgcGFyc2VzLiBXaXRoIHRoaXMgdGFnIHlvdSBjYW4gYXNzaWduIHdoaWNoIHBhcnNlciB0byB1c2UgZm9yIGEgZ2l2ZW4KKyMgZXh0ZW5zaW9uLiBEb3h5Z2VuIGhhcyBhIGJ1aWx0LWluIG1hcHBpbmcsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIG9yIGV4dGVuZCBpdAorIyB1c2luZyB0aGlzIHRhZy4gVGhlIGZvcm1hdCBpcyBleHQ9bGFuZ3VhZ2UsIHdoZXJlIGV4dCBpcyBhIGZpbGUgZXh0ZW5zaW9uLAorIyBhbmQgbGFuZ3VhZ2UgaXMgb25lIG9mIHRoZSBwYXJzZXJzIHN1cHBvcnRlZCBieSBkb3h5Z2VuOiBJREwsIEphdmEsCisjIEphdmFzY3JpcHQsIENTaGFycCwgQywgQysrLCBELCBQSFAsIE9iamVjdGl2ZS1DLCBQeXRob24sIEZvcnRyYW4sIFZIREwsIEMsCisjIEMrKy4gRm9yIGluc3RhbmNlIHRvIG1ha2UgZG94eWdlbiB0cmVhdCAuaW5jIGZpbGVzIGFzIEZvcnRyYW4gZmlsZXMgKGRlZmF1bHQKKyMgaXMgUEhQKSwgYW5kIC5mIGZpbGVzIGFzIEMgKGRlZmF1bHQgaXMgRm9ydHJhbiksIHVzZTogaW5jPUZvcnRyYW4gZj1DLiBOb3RlCisjIHRoYXQgZm9yIGN1c3RvbSBleHRlbnNpb25zIHlvdSBhbHNvIG5lZWQgdG8gc2V0IEZJTEVfUEFUVEVSTlMgb3RoZXJ3aXNlIHRoZQorIyBmaWxlcyBhcmUgbm90IHJlYWQgYnkgZG94eWdlbi4KKworRVhURU5TSU9OX01BUFBJTkcgICAgICA9CisKKyMgSWYgTUFSS0RPV05fU1VQUE9SVCBpcyBlbmFibGVkICh0aGUgZGVmYXVsdCkgdGhlbiBkb3h5Z2VuIHByZS1wcm9jZXNzZXMgYWxsCisjIGNvbW1lbnRzIGFjY29yZGluZyB0byB0aGUgTWFya2Rvd24gZm9ybWF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcmVhZGFibGUKKyMgZG9jdW1lbnRhdGlvbi4gU2VlIGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vIGZvciBkZXRhaWxzLgorIyBUaGUgb3V0cHV0IG9mIG1hcmtkb3duIHByb2Nlc3NpbmcgaXMgZnVydGhlciBwcm9jZXNzZWQgYnkgZG94eWdlbiwgc28geW91CisjIGNhbiBtaXggZG94eWdlbiwgSFRNTCwgYW5kIFhNTCBjb21tYW5kcyB3aXRoIE1hcmtkb3duIGZvcm1hdHRpbmcuCisjIERpc2FibGUgb25seSBpbiBjYXNlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdGllcyBpc3N1ZXMuCisKK01BUktET1dOX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBXaGVuIGVuYWJsZWQgZG94eWdlbiB0cmllcyB0byBsaW5rIHdvcmRzIHRoYXQgY29ycmVzcG9uZCB0byBkb2N1bWVudGVkCisjIGNsYXNzZXMsIG9yIG5hbWVzcGFjZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uLiBTdWNoIGEgbGluayBjYW4KKyMgYmUgcHJldmVudGVkIGluIGluZGl2aWR1YWwgY2FzZXMgYnkgYnkgcHV0dGluZyBhICUgc2lnbiBpbiBmcm9udCBvZiB0aGUgd29yZAorIyBvciBnbG9iYWxseSBieSBzZXR0aW5nIEFVVE9MSU5LX1NVUFBPUlQgdG8gTk8uCisKK0FVVE9MSU5LX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50CisjIHRvIGluY2x1ZGUgKGEgdGFnIGZpbGUgZm9yKSB0aGUgU1RMIHNvdXJjZXMgYXMgaW5wdXQsIHRoZW4geW91IHNob3VsZAorIyBzZXQgdGhpcyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOyB2LnMuCisjIGZ1bmMoc3RkOjpzdHJpbmcpIHt9KS4gVGhpcyBhbHNvIG1ha2VzIHRoZSBpbmhlcml0YW5jZSBhbmQgY29sbGFib3JhdGlvbgorIyBkaWFncmFtcyB0aGF0IGludm9sdmUgU1RMIGNsYXNzZXMgbW9yZSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuCisKK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBOTworCisjIElmIHlvdSB1c2UgTWljcm9zb2Z0J3MgQysrL0NMSSBsYW5ndWFnZSwgeW91IHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvCisjIGVuYWJsZSBwYXJzaW5nIHN1cHBvcnQuCisKK0NQUF9DTElfU1VQUE9SVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgU0lQX1NVUFBPUlQgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2Ygc2lwIHNvdXJjZXMgb25seS4KKyMgRG94eWdlbiB3aWxsIHBhcnNlIHRoZW0gbGlrZSBub3JtYWwgQysrIGJ1dCB3aWxsIGFzc3VtZSBhbGwgY2xhc3NlcyB1c2UgcHVibGljCisjIGluc3RlYWQgb2YgcHJpdmF0ZSBpbmhlcml0YW5jZSB3aGVuIG5vIGV4cGxpY2l0IHByb3RlY3Rpb24ga2V5d29yZCBpcyBwcmVzZW50LgorCitTSVBfU1VQUE9SVCAgICAgICAgICAgID0gTk8KKworIyBGb3IgTWljcm9zb2Z0J3MgSURMIHRoZXJlIGFyZSBwcm9wZ2V0IGFuZCBwcm9wcHV0IGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUKKyMgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBZRVMgKHRoZQorIyBkZWZhdWx0KSB3aWxsIG1ha2UgZG94eWdlbiByZXBsYWNlIHRoZSBnZXQgYW5kIHNldCBtZXRob2RzIGJ5IGEgcHJvcGVydHkgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIG1ldGhvZHMgYXJlIGluZGVlZCBnZXR0aW5nIG9yCisjIHNldHRpbmcgYSBzaW1wbGUgdHlwZS4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIG9yIHlvdSB3YW50IHRvIHNob3cgdGhlCisjIG1ldGhvZHMgYW55d2F5LCB5b3Ugc2hvdWxkIHNldCB0aGlzIG9wdGlvbiB0byBOTy4KKworSURMX1BST1BFUlRZX1NVUFBPUlQgICA9IFlFUworCisjIElmIG1lbWJlciBncm91cGluZyBpcyB1c2VkIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgRElTVFJJQlVURV9HUk9VUF9ET0MKKyMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdAorIyBtZW1iZXIgaW4gdGhlIGdyb3VwIChpZiBhbnkpIGZvciB0aGUgb3RoZXIgbWVtYmVycyBvZiB0aGUgZ3JvdXAuIEJ5IGRlZmF1bHQKKyMgYWxsIG1lbWJlcnMgb2YgYSBncm91cCBtdXN0IGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KKworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCisKKyMgU2V0IHRoZSBTVUJHUk9VUElORyB0YWcgdG8gWUVTICh0aGUgZGVmYXVsdCkgdG8gYWxsb3cgY2xhc3MgbWVtYmVyIGdyb3VwcyBvZgorIyB0aGUgc2FtZSB0eXBlIChmb3IgaW5zdGFuY2UgYSBncm91cCBvZiBwdWJsaWMgZnVuY3Rpb25zKSB0byBiZSBwdXQgYXMgYQorIyBzdWJncm91cCBvZiB0aGF0IHR5cGUgKGUuZy4gdW5kZXIgdGhlIFB1YmxpYyBGdW5jdGlvbnMgc2VjdGlvbikuIFNldCBpdCB0bworIyBOTyB0byBwcmV2ZW50IHN1Ymdyb3VwaW5nLiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSBkb25lIHBlciBjbGFzcyB1c2luZworIyB0aGUgXG5vc3ViZ3JvdXBpbmcgY29tbWFuZC4KKworU1VCR1JPVVBJTkcgICAgICAgICAgICA9IFlFUworCisjIFdoZW4gdGhlIElOTElORV9HUk9VUEVEX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIGNsYXNzZXMsIHN0cnVjdHMgYW5kCisjIHVuaW9ucyBhcmUgc2hvd24gaW5zaWRlIHRoZSBncm91cCBpbiB3aGljaCB0aGV5IGFyZSBpbmNsdWRlZCAoZS5nLiB1c2luZworIyBAaW5ncm91cCkgaW5zdGVhZCBvZiBvbiBhIHNlcGFyYXRlIHBhZ2UgKGZvciBIVE1MIGFuZCBNYW4gcGFnZXMpIG9yCisjIHNlY3Rpb24gKGZvciBMYVRlWCBhbmQgUlRGKS4KKworSU5MSU5FX0dST1VQRURfQ0xBU1NFUyA9IE5PCisKKyMgV2hlbiB0aGUgSU5MSU5FX1NJTVBMRV9TVFJVQ1RTIHRhZyBpcyBzZXQgdG8gWUVTLCBzdHJ1Y3RzLCBjbGFzc2VzLCBhbmQKKyMgdW5pb25zIHdpdGggb25seSBwdWJsaWMgZGF0YSBmaWVsZHMgb3Igc2ltcGxlIHR5cGVkZWYgZmllbGRzIHdpbGwgYmUgc2hvd24KKyMgaW5saW5lIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBzY29wZSBpbiB3aGljaCB0aGV5IGFyZSBkZWZpbmVkIChpLmUuIGZpbGUsCisjIG5hbWVzcGFjZSwgb3IgZ3JvdXAgZG9jdW1lbnRhdGlvbiksIHByb3ZpZGVkIHRoaXMgc2NvcGUgaXMgZG9jdW1lbnRlZC4gSWYgc2V0CisjIHRvIE5PICh0aGUgZGVmYXVsdCksIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMgYXJlIHNob3duIG9uIGEgc2VwYXJhdGUKKyMgcGFnZSAoZm9yIEhUTUwgYW5kIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYIGFuZCBSVEYpLgorCitJTkxJTkVfU0lNUExFX1NUUlVDVFMgID0gTk8KKworIyBXaGVuIFRZUEVERUZfSElERVNfU1RSVUNUIGlzIGVuYWJsZWQsIGEgdHlwZWRlZiBvZiBhIHN0cnVjdCwgdW5pb24sIG9yIGVudW0KKyMgaXMgZG9jdW1lbnRlZCBhcyBzdHJ1Y3QsIHVuaW9uLCBvciBlbnVtIHdpdGggdGhlIG5hbWUgb2YgdGhlIHR5cGVkZWYuIFNvCisjIHR5cGVkZWYgc3RydWN0IFR5cGVTIHt9IFR5cGVULCB3aWxsIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHN0cnVjdAorIyB3aXRoIG5hbWUgVHlwZVQuIFdoZW4gZGlzYWJsZWQgdGhlIHR5cGVkZWYgd2lsbCBhcHBlYXIgYXMgYSBtZW1iZXIgb2YgYSBmaWxlLAorIyBuYW1lc3BhY2UsIG9yIGNsYXNzLiBBbmQgdGhlIHN0cnVjdCB3aWxsIGJlIG5hbWVkIFR5cGVTLiBUaGlzIGNhbiB0eXBpY2FsbHkKKyMgYmUgdXNlZnVsIGZvciBDIGNvZGUgaW4gY2FzZSB0aGUgY29kaW5nIGNvbnZlbnRpb24gZGljdGF0ZXMgdGhhdCBhbGwgY29tcG91bmQKKyMgdHlwZXMgYXJlIHR5cGVkZWYnZWQgYW5kIG9ubHkgdGhlIHR5cGVkZWYgaXMgcmVmZXJlbmNlZCwgbmV2ZXIgdGhlIHRhZyBuYW1lLgorCitUWVBFREVGX0hJREVTX1NUUlVDVCAgID0gTk8KKworIyBUaGUgc2l6ZSBvZiB0aGUgc3ltYm9sIGxvb2t1cCBjYWNoZSBjYW4gYmUgc2V0IHVzaW5nIExPT0tVUF9DQUNIRV9TSVpFLiBUaGlzCisjIGNhY2hlIGlzIHVzZWQgdG8gcmVzb2x2ZSBzeW1ib2xzIGdpdmVuIHRoZWlyIG5hbWUgYW5kIHNjb3BlLiBTaW5jZSB0aGlzIGNhbgorIyBiZSBhbiBleHBlbnNpdmUgcHJvY2VzcyBhbmQgb2Z0ZW4gdGhlIHNhbWUgc3ltYm9sIGFwcGVhciBtdWx0aXBsZSB0aW1lcyBpbgorIyB0aGUgY29kZSwgZG94eWdlbiBrZWVwcyBhIGNhY2hlIG9mIHByZS1yZXNvbHZlZCBzeW1ib2xzLiBJZiB0aGUgY2FjaGUgaXMgdG9vCisjIHNtYWxsIGRveHlnZW4gd2lsbCBiZWNvbWUgc2xvd2VyLiBJZiB0aGUgY2FjaGUgaXMgdG9vIGxhcmdlLCBtZW1vcnkgaXMgd2FzdGVkLgorIyBUaGUgY2FjaGUgc2l6ZSBpcyBnaXZlbiBieSB0aGlzIGZvcm11bGE6IDJeKDE2K0xPT0tVUF9DQUNIRV9TSVpFKS4gVGhlIHZhbGlkCisjIHJhbmdlIGlzIDAuLjksIHRoZSBkZWZhdWx0IGlzIDAsIGNvcnJlc3BvbmRpbmcgdG8gYSBjYWNoZSBzaXplIG9mIDJeMTYgPSA2NTUzNgorIyBzeW1ib2xzLgorCitMT09LVVBfQ0FDSEVfU0laRSAgICAgID0gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLgorIyBQcml2YXRlIGNsYXNzIG1lbWJlcnMgYW5kIHN0YXRpYyBmaWxlIG1lbWJlcnMgd2lsbCBiZSBoaWRkZW4gdW5sZXNzCisjIHRoZSBFWFRSQUNUX1BSSVZBVEUgcmVzcGVjdGl2ZWx5IEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMKKworRVhUUkFDVF9BTEwgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX1BSSVZBVEUgdGFnIGlzIHNldCB0byBZRVMgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzCisjIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0VYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRVhUUkFDVF9QQUNLQUdFIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBtZW1iZXJzIHdpdGggcGFja2FnZSBvciBpbnRlcm5hbAorIyBzY29wZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitFWFRSQUNUX1BBQ0tBR0UgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9TVEFUSUMgdGFnIGlzIHNldCB0byBZRVMgYWxsIHN0YXRpYyBtZW1iZXJzIG9mIGEgZmlsZQorIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUyBjbGFzc2VzIChhbmQgc3RydWN0cykKKyMgZGVmaW5lZCBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBJZiBzZXQgdG8gTk8gb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworCisjIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWZ1bCBmb3IgT2JqZWN0aXZlLUMgY29kZS4gV2hlbiBzZXQgdG8gWUVTIGxvY2FsCisjIG1ldGhvZHMsIHdoaWNoIGFyZSBkZWZpbmVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBzZWN0aW9uIGJ1dCBub3QgaW4KKyMgdGhlIGludGVyZmFjZSBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgbWV0aG9kcyBpbiB0aGUgaW50ZXJmYWNlIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9NRVRIT0RTICA9IFlFUworCisjIElmIHRoaXMgZmxhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBhbm9ueW1vdXMgbmFtZXNwYWNlcyB3aWxsIGJlCisjIGV4dHJhY3RlZCBhbmQgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFzIGEgbmFtZXNwYWNlIGNhbGxlZAorIyAnYW5vbnltb3VzX25hbWVzcGFjZXtmaWxlfScsIHdoZXJlIGZpbGUgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBiYXNlCisjIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZS4gQnkgZGVmYXVsdAorIyBhbm9ueW1vdXMgbmFtZXNwYWNlcyBhcmUgaGlkZGVuLgorCitFWFRSQUNUX0FOT05fTlNQQUNFUyAgID0gWUVTCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIHVuZG9jdW1lbnRlZCBtZW1iZXJzIG9mIGRvY3VtZW50ZWQgY2xhc3NlcywgZmlsZXMgb3IgbmFtZXNwYWNlcy4KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgbWVtYmVycyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZQorIyB2YXJpb3VzIG92ZXJ2aWV3cywgYnV0IG5vIGRvY3VtZW50YXRpb24gc2VjdGlvbiBpcyBnZW5lcmF0ZWQuCisjIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgRVhUUkFDVF9BTEwgaXMgZW5hYmxlZC4KKworSElERV9VTkRPQ19NRU1CRVJTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIHVuZG9jdW1lbnRlZCBjbGFzc2VzIHRoYXQgYXJlIG5vcm1hbGx5IHZpc2libGUgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeS4KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB2YXJpb3VzCisjIG92ZXJ2aWV3cy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorCitISURFX1VORE9DX0NMQVNTRVMgICAgID0gTk8KKworIyBJZiB0aGUgSElERV9GUklFTkRfQ09NUE9VTkRTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwKKyMgZnJpZW5kIChjbGFzc3xzdHJ1Y3R8dW5pb24pIGRlY2xhcmF0aW9ucy4KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgZGVjbGFyYXRpb25zIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uCisKK0hJREVfRlJJRU5EX0NPTVBPVU5EUyAgPSBOTworCisjIElmIHRoZSBISURFX0lOX0JPRFlfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYW55CisjIGRvY3VtZW50YXRpb24gYmxvY2tzIGZvdW5kIGluc2lkZSB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uLgorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVzZSBibG9ja3Mgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUKKyMgZnVuY3Rpb24ncyBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGJsb2NrLgorCitISURFX0lOX0JPRFlfRE9DUyAgICAgID0gTk8KKworIyBUaGUgSU5URVJOQUxfRE9DUyB0YWcgZGV0ZXJtaW5lcyBpZiBkb2N1bWVudGF0aW9uCisjIHRoYXQgaXMgdHlwZWQgYWZ0ZXIgYSBcaW50ZXJuYWwgY29tbWFuZCBpcyBpbmNsdWRlZC4gSWYgdGhlIHRhZyBpcyBzZXQKKyMgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIHRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgZXhjbHVkZWQuCisjIFNldCBpdCB0byBZRVMgdG8gaW5jbHVkZSB0aGUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbi4KKworSU5URVJOQUxfRE9DUyAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIENBU0VfU0VOU0VfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIERveHlnZW4gd2lsbCBvbmx5IGdlbmVyYXRlCisjIGZpbGUgbmFtZXMgaW4gbG93ZXItY2FzZSBsZXR0ZXJzLiBJZiBzZXQgdG8gWUVTIHVwcGVyLWNhc2UgbGV0dGVycyBhcmUgYWxzbworIyBhbGxvd2VkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBjbGFzc2VzIG9yIGZpbGVzIHdob3NlIG5hbWVzIG9ubHkgZGlmZmVyCisjIGluIGNhc2UgYW5kIGlmIHlvdXIgZmlsZSBzeXN0ZW0gc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgZmlsZSBuYW1lcy4gV2luZG93cworIyBhbmQgTWFjIHVzZXJzIGFyZSBhZHZpc2VkIHRvIHNldCB0aGlzIG9wdGlvbiB0byBOTy4KKworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbgorIyB3aWxsIHNob3cgbWVtYmVycyB3aXRoIHRoZWlyIGZ1bGwgY2xhc3MgYW5kIG5hbWVzcGFjZSBzY29wZXMgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIElmIHNldCB0byBZRVMgdGhlIHNjb3BlIHdpbGwgYmUgaGlkZGVuLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuCisjIHdpbGwgcHV0IGEgbGlzdCBvZiB0aGUgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgYSBmaWxlIGluIHRoZSBkb2N1bWVudGF0aW9uCisjIG9mIHRoYXQgZmlsZS4KKworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUworCisjIElmIHRoZSBGT1JDRV9MT0NBTF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4KKyMgd2lsbCBsaXN0IGluY2x1ZGUgZmlsZXMgd2l0aCBkb3VibGUgcXVvdGVzIGluIHRoZSBkb2N1bWVudGF0aW9uCisjIHJhdGhlciB0aGFuIHdpdGggc2hhcnAgYnJhY2tldHMuCisKK0ZPUkNFX0xPQ0FMX0lOQ0xVREVTICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYSB0YWcgW2lubGluZV0KKyMgaXMgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGlubGluZSBtZW1iZXJzLgorCitJTkxJTkVfSU5GTyAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGRveHlnZW4KKyMgd2lsbCBzb3J0IHRoZSAoZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgZmlsZSBhbmQgY2xhc3MgbWVtYmVycworIyBhbHBoYWJldGljYWxseSBieSBtZW1iZXIgbmFtZS4gSWYgc2V0IHRvIE5PIHRoZSBtZW1iZXJzIHdpbGwgYXBwZWFyIGluCisjIGRlY2xhcmF0aW9uIG9yZGVyLgorCitTT1JUX01FTUJFUl9ET0NTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfQlJJRUZfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZQorIyBicmllZiBkb2N1bWVudGF0aW9uIG9mIGZpbGUsIG5hbWVzcGFjZSBhbmQgY2xhc3MgbWVtYmVycyBhbHBoYWJldGljYWxseQorIyBieSBtZW1iZXIgbmFtZS4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4KKyMgZGVjbGFyYXRpb24gb3JkZXIuCisKK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTworCisjIElmIHRoZSBTT1JUX01FTUJFUlNfQ1RPUlNfMVNUIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbgorIyB3aWxsIHNvcnQgdGhlIChicmllZiBhbmQgZGV0YWlsZWQpIGRvY3VtZW50YXRpb24gb2YgY2xhc3MgbWVtYmVycyBzbyB0aGF0CisjIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgYXJlIGxpc3RlZCBmaXJzdC4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkKKyMgdGhlIGNvbnN0cnVjdG9ycyB3aWxsIGFwcGVhciBpbiB0aGUgcmVzcGVjdGl2ZSBvcmRlcnMgZGVmaW5lZCBieQorIyBTT1JUX01FTUJFUl9ET0NTIGFuZCBTT1JUX0JSSUVGX0RPQ1MuCisjIFRoaXMgdGFnIHdpbGwgYmUgaWdub3JlZCBmb3IgYnJpZWYgZG9jcyBpZiBTT1JUX0JSSUVGX0RPQ1MgaXMgc2V0IHRvIE5PCisjIGFuZCBpZ25vcmVkIGZvciBkZXRhaWxlZCBkb2NzIGlmIFNPUlRfTUVNQkVSX0RPQ1MgaXMgc2V0IHRvIE5PLgorCitTT1JUX01FTUJFUlNfQ1RPUlNfMVNUID0gTk8KKworIyBJZiB0aGUgU09SVF9HUk9VUF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZQorIyBoaWVyYXJjaHkgb2YgZ3JvdXAgbmFtZXMgaW50byBhbHBoYWJldGljYWwgb3JkZXIuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpCisjIHRoZSBncm91cCBuYW1lcyB3aWxsIGFwcGVhciBpbiB0aGVpciBkZWZpbmVkIG9yZGVyLgorCitTT1JUX0dST1VQX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9CWV9TQ09QRV9OQU1FIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlCisjIHNvcnRlZCBieSBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8KKyMgTk8gKHRoZSBkZWZhdWx0KSwgdGhlIGNsYXNzIGxpc3Qgd2lsbCBiZSBzb3J0ZWQgb25seSBieSBjbGFzcyBuYW1lLAorIyBub3QgaW5jbHVkaW5nIHRoZSBuYW1lc3BhY2UgcGFydC4KKyMgTm90ZTogVGhpcyBvcHRpb24gaXMgbm90IHZlcnkgdXNlZnVsIGlmIEhJREVfU0NPUEVfTkFNRVMgaXMgc2V0IHRvIFlFUy4KKyMgTm90ZTogVGhpcyBvcHRpb24gYXBwbGllcyBvbmx5IHRvIHRoZSBjbGFzcyBsaXN0LCBub3QgdG8gdGhlCisjIGFscGhhYmV0aWNhbCBsaXN0LgorCitTT1JUX0JZX1NDT1BFX05BTUUgICAgID0gTk8KKworIyBJZiB0aGUgU1RSSUNUX1BST1RPX01BVENISU5HIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBkb3h5Z2VuIGZhaWxzIHRvCisjIGRvIHByb3BlciB0eXBlIHJlc29sdXRpb24gb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBpdCB3aWxsIHJlamVjdCBhCisjIG1hdGNoIGJldHdlZW4gdGhlIHByb3RvdHlwZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGV2ZW4KKyMgaWYgdGhlcmUgaXMgb25seSBvbmUgY2FuZGlkYXRlIG9yIGl0IGlzIG9idmlvdXMgd2hpY2ggY2FuZGlkYXRlIHRvIGNob29zZQorIyBieSBkb2luZyBhIHNpbXBsZSBzdHJpbmcgbWF0Y2guIEJ5IGRpc2FibGluZyBTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgZG94eWdlbgorIyB3aWxsIHN0aWxsIGFjY2VwdCBhIG1hdGNoIGJldHdlZW4gcHJvdG90eXBlIGFuZCBpbXBsZW1lbnRhdGlvbiBpbiBzdWNoIGNhc2VzLgorCitTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVE9ET0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvcgorIyBkaXNhYmxlIChOTykgdGhlIHRvZG8gbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdG9kbworIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9URVNUTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yCisjIGRpc2FibGUgKE5PKSB0aGUgdGVzdCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0ZXN0CisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvcgorIyBkaXNhYmxlIChOTykgdGhlIGJ1ZyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxidWcKKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0JVR0xJU1QgICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfREVQUkVDQVRFRExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvcgorIyBkaXNhYmxlIChOTykgdGhlIGRlcHJlY2F0ZWQgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZworIyBcZGVwcmVjYXRlZCBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfREVQUkVDQVRFRExJU1Q9IFlFUworCisjIFRoZSBFTkFCTEVEX1NFQ1RJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgY29uZGl0aW9uYWwKKyMgZG9jdW1lbnRhdGlvbiBzZWN0aW9ucywgbWFya2VkIGJ5IFxpZiBzZWN0aW9uLWxhYmVsIC4uLiBcZW5kaWYKKyMgYW5kIFxjb25kIHNlY3Rpb24tbGFiZWwgLi4uIFxlbmRjb25kIGJsb2Nrcy4KKworRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9CisKKyMgVGhlIE1BWF9JTklUSUFMSVpFUl9MSU5FUyB0YWcgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMKKyMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZSBvciBtYWNybyBjb25zaXN0cyBvZiBmb3IgaXQgdG8gYXBwZWFyIGluCisjIHRoZSBkb2N1bWVudGF0aW9uLiBJZiB0aGUgaW5pdGlhbGl6ZXIgY29uc2lzdHMgb2YgbW9yZSBsaW5lcyB0aGFuIHNwZWNpZmllZAorIyBoZXJlIGl0IHdpbGwgYmUgaGlkZGVuLiBVc2UgYSB2YWx1ZSBvZiAwIHRvIGhpZGUgaW5pdGlhbGl6ZXJzIGNvbXBsZXRlbHkuCisjIFRoZSBhcHBlYXJhbmNlIG9mIHRoZSBpbml0aWFsaXplciBvZiBpbmRpdmlkdWFsIHZhcmlhYmxlcyBhbmQgbWFjcm9zIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplcgorIyBjb21tYW5kIGluIHRoZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLgorCitNQVhfSU5JVElBTElaRVJfTElORVMgID0gMzAKKworIyBTZXQgdGhlIFNIT1dfVVNFRF9GSUxFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgbGlzdCBvZiBmaWxlcyBnZW5lcmF0ZWQKKyMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBjbGFzc2VzIGFuZCBzdHJ1Y3RzLiBJZiBzZXQgdG8gWUVTIHRoZQorIyBsaXN0IHdpbGwgbWVudGlvbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24uCisKK1NIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMKKworIyBTZXQgdGhlIFNIT1dfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIEZpbGVzIHBhZ2UuCisjIFRoaXMgd2lsbCByZW1vdmUgdGhlIEZpbGVzIGVudHJ5IGZyb20gdGhlIFF1aWNrIEluZGV4IGFuZCBmcm9tIHRoZQorIyBGb2xkZXIgVHJlZSBWaWV3IChpZiBzcGVjaWZpZWQpLiBUaGUgZGVmYXVsdCBpcyBZRVMuCisKK1NIT1dfRklMRVMgICAgICAgICAgICAgPSBZRVMKKworIyBTZXQgdGhlIFNIT1dfTkFNRVNQQUNFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUKKyMgTmFtZXNwYWNlcyBwYWdlLgorIyBUaGlzIHdpbGwgcmVtb3ZlIHRoZSBOYW1lc3BhY2VzIGVudHJ5IGZyb20gdGhlIFF1aWNrIEluZGV4CisjIGFuZCBmcm9tIHRoZSBGb2xkZXIgVHJlZSBWaWV3IChpZiBzcGVjaWZpZWQpLiBUaGUgZGVmYXVsdCBpcyBZRVMuCisKK1NIT1dfTkFNRVNQQUNFUyAgICAgICAgPSBZRVMKKworIyBUaGUgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gb3Igc2NyaXB0IHRoYXQKKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tCisjIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtKS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgcHJvZ3JhbSBieSBleGVjdXRpbmcgKHZpYQorIyBwb3BlbigpKSB0aGUgY29tbWFuZCA8Y29tbWFuZD4gPGlucHV0LWZpbGU+LCB3aGVyZSA8Y29tbWFuZD4gaXMgdGhlIHZhbHVlIG9mCisjIHRoZSBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbiBpbnB1dCBmaWxlCisjIHByb3ZpZGVkIGJ5IGRveHlnZW4uIFdoYXRldmVyIHRoZSBwcm9ncmFtIHdyaXRlcyB0byBzdGFuZGFyZCBvdXRwdXQKKyMgaXMgdXNlZCBhcyB0aGUgZmlsZSB2ZXJzaW9uLiBTZWUgdGhlIG1hbnVhbCBmb3IgZXhhbXBsZXMuCisKK0ZJTEVfVkVSU0lPTl9GSUxURVIgICAgPQorCisjIFRoZSBMQVlPVVRfRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxheW91dCBmaWxlIHdoaWNoIHdpbGwgYmUgcGFyc2VkCisjIGJ5IGRveHlnZW4uIFRoZSBsYXlvdXQgZmlsZSBjb250cm9scyB0aGUgZ2xvYmFsIHN0cnVjdHVyZSBvZiB0aGUgZ2VuZXJhdGVkCisjIG91dHB1dCBmaWxlcyBpbiBhbiBvdXRwdXQgZm9ybWF0IGluZGVwZW5kZW50IHdheS4gVG8gY3JlYXRlIHRoZSBsYXlvdXQgZmlsZQorIyB0aGF0IHJlcHJlc2VudHMgZG94eWdlbidzIGRlZmF1bHRzLCBydW4gZG94eWdlbiB3aXRoIHRoZSAtbCBvcHRpb24uCisjIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgZmlsZSBuYW1lIGFmdGVyIHRoZSBvcHRpb24sIGlmIG9taXR0ZWQKKyMgRG94eWdlbkxheW91dC54bWwgd2lsbCBiZSB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgZmlsZS4KKworTEFZT1VUX0ZJTEUgICAgICAgICAgICA9CisKKyMgVGhlIENJVEVfQklCX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGJpYiBmaWxlcworIyBjb250YWluaW5nIHRoZSByZWZlcmVuY2VzIGRhdGEuIFRoaXMgbXVzdCBiZSBhIGxpc3Qgb2YgLmJpYiBmaWxlcy4gVGhlCisjIC5iaWIgZXh0ZW5zaW9uIGlzIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWQgaWYgb21pdHRlZC4gVXNpbmcgdGhpcyBjb21tYW5kCisjIHJlcXVpcmVzIHRoZSBiaWJ0ZXggdG9vbCB0byBiZSBpbnN0YWxsZWQuIFNlZSBhbHNvCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGZvciBtb3JlIGluZm8uIEZvciBMYVRlWCB0aGUgc3R5bGUKKyMgb2YgdGhlIGJpYmxpb2dyYXBoeSBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBMQVRFWF9CSUJfU1RZTEUuIFRvIHVzZSB0aGlzCisjIGZlYXR1cmUgeW91IG5lZWQgYmlidGV4IGFuZCBwZXJsIGF2YWlsYWJsZSBpbiB0aGUgc2VhcmNoIHBhdGguIERvIG5vdCB1c2UKKyMgZmlsZSBuYW1lcyB3aXRoIHNwYWNlcywgYmlidGV4IGNhbm5vdCBoYW5kbGUgdGhlbS4KKworQ0lURV9CSUJfRklMRVMgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2FybmluZyBhbmQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgUVVJRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSBnZW5lcmF0ZWQKKyMgYnkgZG94eWdlbi4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK1FVSUVUICAgICAgICAgICAgICAgICAgPSBOTworCisjIFRoZSBXQVJOSU5HUyB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBhcmUKKyMgZ2VuZXJhdGVkIGJ5IGRveHlnZW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gSWYgbGVmdCBibGFuaworIyBOTyBpcyB1c2VkLgorCitXQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCisKKyMgSWYgV0FSTl9JRl9VTkRPQ1VNRU5URUQgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MKKyMgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnIHdpbGwKKyMgYXV0b21hdGljYWxseSBiZSBkaXNhYmxlZC4KKworV0FSTl9JRl9VTkRPQ1VNRU5URUQgICA9IFlFUworCisjIElmIFdBUk5fSUZfRE9DX0VSUk9SIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IKKyMgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBub3QgZG9jdW1lbnRpbmcgc29tZQorIyBwYXJhbWV0ZXJzIGluIGEgZG9jdW1lbnRlZCBmdW5jdGlvbiwgb3IgZG9jdW1lbnRpbmcgcGFyYW1ldGVycyB0aGF0CisjIGRvbid0IGV4aXN0IG9yIHVzaW5nIG1hcmt1cCBjb21tYW5kcyB3cm9uZ2x5LgorCitXQVJOX0lGX0RPQ19FUlJPUiAgICAgID0gWUVTCisKKyMgVGhlIFdBUk5fTk9fUEFSQU1ET0Mgb3B0aW9uIGNhbiBiZSBlbmFibGVkIHRvIGdldCB3YXJuaW5ncyBmb3IKKyMgZnVuY3Rpb25zIHRoYXQgYXJlIGRvY3VtZW50ZWQsIGJ1dCBoYXZlIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZWlyIHBhcmFtZXRlcnMKKyMgb3IgcmV0dXJuIHZhbHVlLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSBkb3h5Z2VuIHdpbGwgb25seSB3YXJuIGFib3V0CisjIHdyb25nIG9yIGluY29tcGxldGUgcGFyYW1ldGVyIGRvY3VtZW50YXRpb24sIGJ1dCBub3QgYWJvdXQgdGhlIGFic2VuY2Ugb2YKKyMgZG9jdW1lbnRhdGlvbi4KKworV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5fRk9STUFUIHRhZyBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdAorIyBkb3h5Z2VuIGNhbiBwcm9kdWNlLiBUaGUgc3RyaW5nIHNob3VsZCBjb250YWluIHRoZSAkZmlsZSwgJGxpbmUsIGFuZCAkdGV4dAorIyB0YWdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZQorIyB3YXJuaW5nIG9yaWdpbmF0ZWQgYW5kIHRoZSB3YXJuaW5nIHRleHQuIE9wdGlvbmFsbHkgdGhlIGZvcm1hdCBtYXkgY29udGFpbgorIyAkdmVyc2lvbiwgd2hpY2ggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSAoaWYgaXQgY291bGQKKyMgYmUgb2J0YWluZWQgdmlhIEZJTEVfVkVSU0lPTl9GSUxURVIpCisKK1dBUk5fRk9STUFUICAgICAgICAgICAgPSAiJGZpbGU6JGxpbmU6ICR0ZXh0IgorCisjIFRoZSBXQVJOX0xPR0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHRvIHdoaWNoIHdhcm5pbmcKKyMgYW5kIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSB3cml0dGVuLiBJZiBsZWZ0IGJsYW5rIHRoZSBvdXRwdXQgaXMgd3JpdHRlbgorIyB0byBzdGRlcnIuCisKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBpbnB1dCBmaWxlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBJTlBVVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbgorIyBkb2N1bWVudGVkIHNvdXJjZSBmaWxlcy4gWW91IG1heSBlbnRlciBmaWxlIG5hbWVzIGxpa2UgIm15ZmlsZS5jcHAiIG9yCisjIGRpcmVjdG9yaWVzIGxpa2UgIi91c3Ivc3JjL215cHJvamVjdCIuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcworIyB3aXRoIHNwYWNlcy4KKworSU5QVVQgICAgICAgICAgICAgICAgICA9IC4KKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcworIyB0aGF0IGRveHlnZW4gcGFyc2VzLiBJbnRlcm5hbGx5IGRveHlnZW4gdXNlcyB0aGUgVVRGLTggZW5jb2RpbmcsIHdoaWNoIGlzCisjIGFsc28gdGhlIGRlZmF1bHQgaW5wdXQgZW5jb2RpbmcuIERveHlnZW4gdXNlcyBsaWJpY29udiAob3IgdGhlIGljb252IGJ1aWx0CisjIGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiBmb3IKKyMgdGhlIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLgorCitJTlBVVF9FTkNPRElORyAgICAgICAgID0gVVRGLTgKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybiAobGlrZSAqLmNwcAorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0CisjIGJsYW5rIHRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIHRlc3RlZDoKKyMgKi5jICouY2MgKi5jeHggKi5jcHAgKi5jKysgKi5kICouamF2YSAqLmlpICouaXh4ICouaXBwICouaSsrICouaW5sICouaCAqLmhoCisjICouaHh4ICouaHBwICouaCsrICouaWRsICoub2RsICouY3MgKi5waHAgKi5waHAzICouaW5jICoubSAqLm1tICouZG94ICoucHkKKyMgKi5mOTAgKi5mICouZm9yICoudmhkICoudmhkbAorCitGSUxFX1BBVFRFUk5TICAgICAgICAgID0gKi5oCisKKyMgVGhlIFJFQ1VSU0lWRSB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHN1YmRpcmVjdG9yaWVzCisjIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgaW5wdXQgZmlsZXMgYXMgd2VsbC4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLgorIyBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBZRVMKKworIyBUaGUgRVhDTFVERSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisjIE5vdGUgdGhhdCByZWxhdGl2ZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMKKyMgcnVuLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gY29uZmlncyB5b3R0YS9tb2R1bGUKKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZSBzeXN0ZW0gZmVhdHVyZSkgYXJlIGV4Y2x1ZGVkCisjIGZyb20gdGhlIGlucHV0LgorCitFWENMVURFX1NZTUxJTktTICAgICAgID0gTk8KKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEVYQ0xVREVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybnMgdG8gZXhjbHVkZQorIyBjZXJ0YWluIGZpbGVzIGZyb20gdGhvc2UgZGlyZWN0b3JpZXMuIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkCisjIGFnYWluc3QgdGhlIGZpbGUgd2l0aCBhYnNvbHV0ZSBwYXRoLCBzbyB0byBleGNsdWRlIGFsbCB0ZXN0IGRpcmVjdG9yaWVzCisjIGZvciBleGFtcGxlIHVzZSB0aGUgcGF0dGVybiAqL3Rlc3QvKgorCitFWENMVURFX1BBVFRFUk5TICAgICAgID0gKl9pbnRlcm5hbC5oICpfd3JhcC5oCisKKyMgVGhlIEVYQ0xVREVfU1lNQk9MUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBzeW1ib2wgbmFtZXMKKyMgKG5hbWVzcGFjZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXRjLikgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyMgb3V0cHV0LiBUaGUgc3ltYm9sIG5hbWUgY2FuIGJlIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUsIGEgd29yZCwgb3IgaWYgdGhlCisjIHdpbGRjYXJkICogaXMgdXNlZCwgYSBzdWJzdHJpbmcuIEV4YW1wbGVzOiBBTmFtZXNwYWNlLCBBQ2xhc3MsCisjIEFDbGFzczo6QU5hbWVzcGFjZSwgQU5hbWVzcGFjZTo6KlRlc3QKKworRVhDTFVERV9TWU1CT0xTICAgICAgICA9CisKKyMgVGhlIEVYQU1QTEVfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlcyBvcgorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gZXhhbXBsZSBjb2RlIGZyYWdtZW50cyB0aGF0IGFyZSBpbmNsdWRlZCAoc2VlCisjIHRoZSBcaW5jbHVkZSBjb21tYW5kKS4KKworRVhBTVBMRV9QQVRIICAgICAgICAgICA9CisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBFWEFNUExFX1BBVEggdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRVhBTVBMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwCisjIGFuZCAqLmgpIHRvIGZpbHRlciBvdXQgdGhlIHNvdXJjZS1maWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMuIElmIGxlZnQKKyMgYmxhbmsgYWxsIGZpbGVzIGFyZSBpbmNsdWRlZC4KKworRVhBTVBMRV9QQVRURVJOUyAgICAgICA9ICoKKworIyBJZiB0aGUgRVhBTVBMRV9SRUNVUlNJVkUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBzdWJkaXJlY3RvcmllcyB3aWxsIGJlCisjIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyB0byBiZSB1c2VkIHdpdGggdGhlIFxpbmNsdWRlIG9yIFxkb250aW5jbHVkZQorIyBjb21tYW5kcyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLgorIyBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsgTk8gaXMgdXNlZC4KKworRVhBTVBMRV9SRUNVUlNJVkUgICAgICA9IE5PCisKKyMgVGhlIElNQUdFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IKKyMgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGltYWdlIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUKKyMgdGhlIFxpbWFnZSBjb21tYW5kKS4KKworSU1BR0VfUEFUSCAgICAgICAgICAgICA9CisKKyMgVGhlIElOUFVUX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gdGhhdCBkb3h5Z2VuIHNob3VsZAorIyBpbnZva2UgdG8gZmlsdGVyIGZvciBlYWNoIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIGZpbHRlciBwcm9ncmFtCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxmaWx0ZXI+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGZpbHRlcj4KKyMgaXMgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVF9GSUxURVIgdGFnLCBhbmQgPGlucHV0LWZpbGU+IGlzIHRoZSBuYW1lIG9mIGFuCisjIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCB0aGVuIHVzZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZpbHRlciBwcm9ncmFtIHdyaXRlcworIyB0byBzdGFuZGFyZCBvdXRwdXQuCisjIElmIEZJTFRFUl9QQVRURVJOUyBpcyBzcGVjaWZpZWQsIHRoaXMgdGFnIHdpbGwgYmUgaWdub3JlZC4KKyMgTm90ZSB0aGF0IHRoZSBmaWx0ZXIgbXVzdCBub3QgYWRkIG9yIHJlbW92ZSBsaW5lczsgaXQgaXMgYXBwbGllZCBiZWZvcmUgdGhlCisjIGNvZGUgaXMgc2Nhbm5lZCwgYnV0IG5vdCB3aGVuIHRoZSBvdXRwdXQgY29kZSBpcyBnZW5lcmF0ZWQuIElmIGxpbmVzIGFyZSBhZGRlZAorIyBvciByZW1vdmVkLCB0aGUgYW5jaG9ycyB3aWxsIG5vdCBiZSBwbGFjZWQgY29ycmVjdGx5LgorCitJTlBVVF9GSUxURVIgICAgICAgICAgID0KKworIyBUaGUgRklMVEVSX1BBVFRFUk5TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbHRlcnMgb24gYSBwZXIgZmlsZSBwYXR0ZXJuCisjIGJhc2lzLgorIyBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUKKyMgZmlsdGVyIGlmIHRoZXJlIGlzIGEgbWF0Y2guCisjIFRoZSBmaWx0ZXJzIGFyZSBhIGxpc3Qgb2YgdGhlIGZvcm06CisjIHBhdHRlcm49ZmlsdGVyIChsaWtlICouY3BwPW15X2NwcF9maWx0ZXIpLiBTZWUgSU5QVVRfRklMVEVSIGZvciBmdXJ0aGVyCisjIGluZm8gb24gaG93IGZpbHRlcnMgYXJlIHVzZWQuIElmIEZJTFRFUl9QQVRURVJOUyBpcyBlbXB0eSBvciBpZgorIyBub24gb2YgdGhlIHBhdHRlcm5zIG1hdGNoIHRoZSBmaWxlIG5hbWUsIElOUFVUX0ZJTFRFUiBpcyBhcHBsaWVkLgorCitGSUxURVJfUEFUVEVSTlMgICAgICAgID0KKworIyBJZiB0aGUgRklMVEVSX1NPVVJDRV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGlucHV0IGZpbHRlciAoaWYgc2V0IHVzaW5nCisjIElOUFVUX0ZJTFRFUikgd2lsbCBiZSB1c2VkIHRvIGZpbHRlciB0aGUgaW5wdXQgZmlsZXMgd2hlbiBwcm9kdWNpbmcgc291cmNlCisjIGZpbGVzIHRvIGJyb3dzZSAoaS5lLiB3aGVuIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMpLgorCitGSUxURVJfU09VUkNFX0ZJTEVTICAgID0gTk8KKworIyBUaGUgRklMVEVSX1NPVVJDRV9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBzb3VyY2UgZmlsdGVycyBwZXIgZmlsZQorIyBwYXR0ZXJuLiBBIHBhdHRlcm4gd2lsbCBvdmVycmlkZSB0aGUgc2V0dGluZyBmb3IgRklMVEVSX1BBVFRFUk4gKGlmIGFueSkKKyMgYW5kIGl0IGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJsZSBzb3VyY2UgZmlsdGVyaW5nIGZvciBhIHNwZWNpZmljIHBhdHRlcm4KKyMgdXNpbmcgKi5leHQ9IChzbyB3aXRob3V0IG5hbWluZyBhIGZpbHRlcikuIFRoaXMgb3B0aW9uIG9ubHkgaGFzIGVmZmVjdCB3aGVuCisjIEZJTFRFUl9TT1VSQ0VfRklMRVMgaXMgZW5hYmxlZC4KKworRklMVEVSX1NPVVJDRV9QQVRURVJOUyA9CisKKyMgSWYgdGhlIFVTRV9NRF9GSUxFX0FTX01BSU5QQUdFIHRhZyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgYSBtYXJrZG93biBmaWxlIHRoYXQKKyMgaXMgcGFydCBvZiB0aGUgaW5wdXQsIGl0cyBjb250ZW50cyB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgbWFpbiBwYWdlCisjIChpbmRleC5odG1sKS4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIGEgcHJvamVjdCBvbiBmb3IgaW5zdGFuY2UgR2l0SHViCisjIGFuZCB3YW50IHJldXNlIHRoZSBpbnRyb2R1Y3Rpb24gcGFnZSBhbHNvIGZvciB0aGUgZG94eWdlbiBvdXRwdXQuCisKK1VTRV9NREZJTEVfQVNfTUFJTlBBR0UgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbAorIyBiZSBnZW5lcmF0ZWQuIERvY3VtZW50ZWQgZW50aXRpZXMgd2lsbCBiZSBjcm9zcy1yZWZlcmVuY2VkIHdpdGggdGhlc2Ugc291cmNlcy4KKyMgTm90ZTogVG8gZ2V0IHJpZCBvZiBhbGwgc291cmNlIGNvZGUgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQsIG1ha2Ugc3VyZSBhbHNvCisjIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorCitTT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gWUVTCisKKyMgU2V0dGluZyB0aGUgSU5MSU5FX1NPVVJDRVMgdGFnIHRvIFlFUyB3aWxsIGluY2x1ZGUgdGhlIGJvZHkKKyMgb2YgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGRpcmVjdGx5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgKHRoZSBkZWZhdWx0KSB3aWxsIGluc3RydWN0CisjIGRveHlnZW4gdG8gaGlkZSBhbnkgc3BlY2lhbCBjb21tZW50IGJsb2NrcyBmcm9tIGdlbmVyYXRlZCBzb3VyY2UgY29kZQorIyBmcmFnbWVudHMuIE5vcm1hbCBDLCBDKysgYW5kIEZvcnRyYW4gY29tbWVudHMgd2lsbCBhbHdheXMgcmVtYWluIHZpc2libGUuCisKK1NUUklQX0NPREVfQ09NTUVOVFMgICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUworIyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQgZnVuY3Rpb24gYWxsIGRvY3VtZW50ZWQKKyMgZnVuY3Rpb25zIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgbGlzdGVkLgorCitSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OID0gWUVTCisKKyMgSWYgdGhlIFJFRkVSRU5DRVNfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMKKyMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkIGVudGl0aWVzCisjIGNhbGxlZC91c2VkIGJ5IHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBsaXN0ZWQuCisKK1JFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFU19MSU5LX1NPVVJDRSB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpCisjIGFuZCBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiB0aGUgaHlwZXJsaW5rcyBmcm9tCisjIGZ1bmN0aW9ucyBpbiBSRUZFUkVOQ0VTX1JFTEFUSU9OIGFuZCBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIGxpc3RzIHdpbGwKKyMgbGluayB0byB0aGUgc291cmNlIGNvZGUuCisjIE90aGVyd2lzZSB0aGV5IHdpbGwgbGluayB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKworUkVGRVJFTkNFU19MSU5LX1NPVVJDRSA9IFlFUworCisjIElmIHRoZSBVU0VfSFRBR1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgcmVmZXJlbmNlcyB0byBzb3VyY2UgY29kZQorIyB3aWxsIHBvaW50IHRvIHRoZSBIVE1MIGdlbmVyYXRlZCBieSB0aGUgaHRhZ3MoMSkgdG9vbCBpbnN0ZWFkIG9mIGRveHlnZW4KKyMgYnVpbHQtaW4gc291cmNlIGJyb3dzZXIuIFRoZSBodGFncyB0b29sIGlzIHBhcnQgb2YgR05VJ3MgZ2xvYmFsIHNvdXJjZQorIyB0YWdnaW5nIHN5c3RlbSAoc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbG9iYWwvZ2xvYmFsLmh0bWwpLiBZb3UKKyMgd2lsbCBuZWVkIHZlcnNpb24gNC44LjYgb3IgaGlnaGVyLgorCitVU0VfSFRBR1MgICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgVkVSQkFUSU1fSEVBREVSUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbgorIyB3aWxsIGdlbmVyYXRlIGEgdmVyYmF0aW0gY29weSBvZiB0aGUgaGVhZGVyIGZpbGUgZm9yIGVhY2ggY2xhc3MgZm9yCisjIHdoaWNoIGFuIGluY2x1ZGUgaXMgc3BlY2lmaWVkLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorCitWRVJCQVRJTV9IRUFERVJTICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBBTFBIQUJFVElDQUxfSU5ERVggdGFnIGlzIHNldCB0byBZRVMsIGFuIGFscGhhYmV0aWNhbCBpbmRleAorIyBvZiBhbGwgY29tcG91bmRzIHdpbGwgYmUgZ2VuZXJhdGVkLiBFbmFibGUgdGhpcyBpZiB0aGUgcHJvamVjdAorIyBjb250YWlucyBhIGxvdCBvZiBjbGFzc2VzLCBzdHJ1Y3RzLCB1bmlvbnMgb3IgaW50ZXJmYWNlcy4KKworQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IE5PCisKKyMgSWYgdGhlIGFscGhhYmV0aWNhbCBpbmRleCBpcyBlbmFibGVkIChzZWUgQUxQSEFCRVRJQ0FMX0lOREVYKSB0aGVuCisjIHRoZSBDT0xTX0lOX0FMUEhBX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucworIyBpbiB3aGljaCB0aGlzIGxpc3Qgd2lsbCBiZSBzcGxpdCAoY2FuIGJlIGEgbnVtYmVyIGluIHRoZSByYW5nZSBbMS4uMjBdKQorCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorCisjIEluIGNhc2UgYWxsIGNsYXNzZXMgaW4gYSBwcm9qZWN0IHN0YXJ0IHdpdGggYSBjb21tb24gcHJlZml4LCBhbGwKKyMgY2xhc3NlcyB3aWxsIGJlIHB1dCB1bmRlciB0aGUgc2FtZSBoZWFkZXIgaW4gdGhlIGFscGhhYmV0aWNhbCBpbmRleC4KKyMgVGhlIElHTk9SRV9QUkVGSVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgcHJlZml4ZXMgdGhhdAorIyBzaG91bGQgYmUgaWdub3JlZCB3aGlsZSBnZW5lcmF0aW5nIHRoZSBpbmRleCBoZWFkZXJzLgorCitJR05PUkVfUFJFRklYICAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgSFRNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBIVE1MIG91dHB1dC4KKworR0VORVJBVEVfSFRNTCAgICAgICAgICA9IFlFUworCisjIFRoZSBIVE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBIVE1MIGRvY3Mgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBodG1sJyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGF0aC4KKworSFRNTF9PVVRQVVQgICAgICAgICAgICA9IC4KKworIyBUaGUgSFRNTF9GSUxFX0VYVEVOU0lPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gZm9yCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZSAoZm9yIGV4YW1wbGU6IC5odG0sLnBocCwuYXNwKS4gSWYgaXQgaXMgbGVmdCBibGFuaworIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgZmlsZXMgd2l0aCAuaHRtbCBleHRlbnNpb24uCisKK0hUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbAorCisjIFRoZSBIVE1MX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgaGVhZGVyIGZvcgorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgaGVhZGVyLiBOb3RlIHRoYXQgd2hlbiB1c2luZyBhIGN1c3RvbSBoZWFkZXIgeW91IGFyZSByZXNwb25zaWJsZQorIyAgZm9yIHRoZSBwcm9wZXIgaW5jbHVzaW9uIG9mIGFueSBzY3JpcHRzIGFuZCBzdHlsZSBzaGVldHMgdGhhdCBkb3h5Z2VuCisjIG5lZWRzLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2VkLgorIyBJdCBpcyBhZHZpc2VkIHRvIGdlbmVyYXRlIGEgZGVmYXVsdCBoZWFkZXIgdXNpbmcgImRveHlnZW4gLXcgaHRtbAorIyBoZWFkZXIuaHRtbCBmb290ZXIuaHRtbCBzdHlsZXNoZWV0LmNzcyBZb3VyQ29uZmlnRmlsZSIgYW5kIHRoZW4gbW9kaWZ5CisjIHRoYXQgaGVhZGVyLiBOb3RlIHRoYXQgdGhlIGhlYWRlciBpcyBzdWJqZWN0IHRvIGNoYW5nZSBzbyB5b3UgdHlwaWNhbGx5CisjIGhhdmUgdG8gcmVkbyB0aGlzIHdoZW4gdXBncmFkaW5nIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBkb3h5Z2VuIG9yIHdoZW4KKyMgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3VjaCBhcyBHRU5FUkFURV9UUkVFVklFVyEKKworSFRNTF9IRUFERVIgICAgICAgICAgICA9CisKKyMgVGhlIEhUTUxfRk9PVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgSFRNTCBmb290ZXIgZm9yCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYQorIyBzdGFuZGFyZCBmb290ZXIuCisKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPQorCisjIFRoZSBIVE1MX1NUWUxFU0hFRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB1c2VyLWRlZmluZWQgY2FzY2FkaW5nCisjIHN0eWxlIHNoZWV0IHRoYXQgaXMgdXNlZCBieSBlYWNoIEhUTUwgcGFnZS4gSXQgY2FuIGJlIHVzZWQgdG8KKyMgZmluZS10dW5lIHRoZSBsb29rIG9mIHRoZSBIVE1MIG91dHB1dC4gSWYgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwKKyMgZ2VuZXJhdGUgYSBkZWZhdWx0IHN0eWxlIHNoZWV0LiBOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlCisjIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBhcyBpdCBpcyBtb3JlIHJvYnVzdCBhbmQgdGhpcworIyB0YWcgd2lsbCBpbiB0aGUgZnV0dXJlIGJlY29tZSBvYnNvbGV0ZS4KKworSFRNTF9TVFlMRVNIRUVUICAgICAgICA9CisKKyMgVGhlIEhUTUxfRVhUUkFfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBhZGRpdGlvbmFsCisjIHVzZXItZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUgc2hlZXQgdGhhdCBpcyBpbmNsdWRlZCBhZnRlciB0aGUgc3RhbmRhcmQKKyMgc3R5bGUgc2hlZXRzIGNyZWF0ZWQgYnkgZG94eWdlbi4gVXNpbmcgdGhpcyBvcHRpb24gb25lIGNhbiBvdmVycnVsZQorIyBjZXJ0YWluIHN0eWxlIGFzcGVjdHMuIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgdXNpbmcgSFRNTF9TVFlMRVNIRUVUCisjIHNpbmNlIGl0IGRvZXMgbm90IHJlcGxhY2UgdGhlIHN0YW5kYXJkIHN0eWxlIHNoZWV0IGFuZCBpcyB0aGVyZWZvciBtb3JlCisjIHJvYnVzdCBhZ2FpbnN0IGZ1dHVyZSB1cGRhdGVzLiBEb3h5Z2VuIHdpbGwgY29weSB0aGUgc3R5bGUgc2hlZXQgZmlsZSB0bworIyB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKworSFRNTF9FWFRSQV9TVFlMRVNIRUVUICA9CisKKyMgVGhlIEhUTUxfRVhUUkFfRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZXh0cmEgaW1hZ2VzIG9yCisjIG90aGVyIHNvdXJjZSBmaWxlcyB3aGljaCBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIE5vdGUKKyMgdGhhdCB0aGVzZSBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byB0aGUgYmFzZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFVzZSB0aGUKKyMgJHJlbHBhdGheIG1hcmtlciBpbiB0aGUgSFRNTF9IRUFERVIgYW5kL29yIEhUTUxfRk9PVEVSIGZpbGVzIHRvIGxvYWQgdGhlc2UKKyMgZmlsZXMuIEluIHRoZSBIVE1MX1NUWUxFU0hFRVQgZmlsZSwgdXNlIHRoZSBmaWxlIG5hbWUgb25seS4gQWxzbyBub3RlIHRoYXQKKyMgdGhlIGZpbGVzIHdpbGwgYmUgY29waWVkIGFzLWlzOyB0aGVyZSBhcmUgbm8gY29tbWFuZHMgb3IgbWFya2VycyBhdmFpbGFibGUuCisKK0hUTUxfRVhUUkFfRklMRVMgICAgICAgPQorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfSFVFIHRhZyBjb250cm9scyB0aGUgY29sb3Igb2YgdGhlIEhUTUwgb3V0cHV0LgorIyBEb3h5Z2VuIHdpbGwgYWRqdXN0IHRoZSBjb2xvcnMgaW4gdGhlIHN0eWxlIHNoZWV0IGFuZCBiYWNrZ3JvdW5kIGltYWdlcworIyBhY2NvcmRpbmcgdG8gdGhpcyBjb2xvci4gSHVlIGlzIHNwZWNpZmllZCBhcyBhbiBhbmdsZSBvbiBhIGNvbG9yd2hlZWwsCisjIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0h1ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgRm9yIGluc3RhbmNlIHRoZSB2YWx1ZSAwIHJlcHJlc2VudHMgcmVkLCA2MCBpcyB5ZWxsb3csIDEyMCBpcyBncmVlbiwKKyMgMTgwIGlzIGN5YW4sIDI0MCBpcyBibHVlLCAzMDAgcHVycGxlLCBhbmQgMzYwIGlzIHJlZCBhZ2Fpbi4KKyMgVGhlIGFsbG93ZWQgcmFuZ2UgaXMgMCB0byAzNTkuCisKK0hUTUxfQ09MT1JTVFlMRV9IVUUgICAgPSAyMjAKKworIyBUaGUgSFRNTF9DT0xPUlNUWUxFX1NBVCB0YWcgY29udHJvbHMgdGhlIHB1cml0eSAob3Igc2F0dXJhdGlvbikgb2YKKyMgdGhlIGNvbG9ycyBpbiB0aGUgSFRNTCBvdXRwdXQuIEZvciBhIHZhbHVlIG9mIDAgdGhlIG91dHB1dCB3aWxsIHVzZQorIyBncmF5c2NhbGVzIG9ubHkuIEEgdmFsdWUgb2YgMjU1IHdpbGwgcHJvZHVjZSB0aGUgbW9zdCB2aXZpZCBjb2xvcnMuCisKK0hUTUxfQ09MT1JTVFlMRV9TQVQgICAgPSAxMDAKKworIyBUaGUgSFRNTF9DT0xPUlNUWUxFX0dBTU1BIHRhZyBjb250cm9scyB0aGUgZ2FtbWEgY29ycmVjdGlvbiBhcHBsaWVkIHRvCisjIHRoZSBsdW1pbmFuY2UgY29tcG9uZW50IG9mIHRoZSBjb2xvcnMgaW4gdGhlIEhUTUwgb3V0cHV0LiBWYWx1ZXMgYmVsb3cKKyMgMTAwIGdyYWR1YWxseSBtYWtlIHRoZSBvdXRwdXQgbGlnaHRlciwgd2hlcmVhcyB2YWx1ZXMgYWJvdmUgMTAwIG1ha2UKKyMgdGhlIG91dHB1dCBkYXJrZXIuIFRoZSB2YWx1ZSBkaXZpZGVkIGJ5IDEwMCBpcyB0aGUgYWN0dWFsIGdhbW1hIGFwcGxpZWQsCisjIHNvIDgwIHJlcHJlc2VudHMgYSBnYW1tYSBvZiAwLjgsIFRoZSB2YWx1ZSAyMjAgcmVwcmVzZW50cyBhIGdhbW1hIG9mIDIuMiwKKyMgYW5kIDEwMCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGdhbW1hLgorCitIVE1MX0NPTE9SU1RZTEVfR0FNTUEgID0gODAKKworIyBJZiB0aGUgSFRNTF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkIEhUTUwKKyMgcGFnZSB3aWxsIGNvbnRhaW4gdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgcGFnZSB3YXMgZ2VuZXJhdGVkLiBTZXR0aW5nCisjIHRoaXMgdG8gTk8gY2FuIGhlbHAgd2hlbiBjb21wYXJpbmcgdGhlIG91dHB1dCBvZiBtdWx0aXBsZSBydW5zLgorCitIVE1MX1RJTUVTVEFNUCAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhUTUxfRFlOQU1JQ19TRUNUSU9OUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBnZW5lcmF0ZWQgSFRNTAorIyBkb2N1bWVudGF0aW9uIHdpbGwgY29udGFpbiBzZWN0aW9ucyB0aGF0IGNhbiBiZSBoaWRkZW4gYW5kIHNob3duIGFmdGVyIHRoZQorIyBwYWdlIGhhcyBsb2FkZWQuCisKK0hUTUxfRFlOQU1JQ19TRUNUSU9OUyAgPSBOTworCisjIFdpdGggSFRNTF9JTkRFWF9OVU1fRU5UUklFUyBvbmUgY2FuIGNvbnRyb2wgdGhlIHByZWZlcnJlZCBudW1iZXIgb2YKKyMgZW50cmllcyBzaG93biBpbiB0aGUgdmFyaW91cyB0cmVlIHN0cnVjdHVyZWQgaW5kaWNlcyBpbml0aWFsbHk7IHRoZSB1c2VyCisjIGNhbiBleHBhbmQgYW5kIGNvbGxhcHNlIGVudHJpZXMgZHluYW1pY2FsbHkgbGF0ZXIgb24uIERveHlnZW4gd2lsbCBleHBhbmQKKyMgdGhlIHRyZWUgdG8gc3VjaCBhIGxldmVsIHRoYXQgYXQgbW9zdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbnRyaWVzIGFyZQorIyB2aXNpYmxlICh1bmxlc3MgYSBmdWxseSBjb2xsYXBzZWQgdHJlZSBhbHJlYWR5IGV4Y2VlZHMgdGhpcyBhbW91bnQpLgorIyBTbyBzZXR0aW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyAxIHdpbGwgcHJvZHVjZSBhIGZ1bGwgY29sbGFwc2VkIHRyZWUgYnkKKyMgZGVmYXVsdC4gMCBpcyBhIHNwZWNpYWwgdmFsdWUgcmVwcmVzZW50aW5nIGFuIGluZmluaXRlIG51bWJlciBvZiBlbnRyaWVzCisjIGFuZCB3aWxsIHJlc3VsdCBpbiBhIGZ1bGwgZXhwYW5kZWQgdHJlZSBieSBkZWZhdWx0LgorCitIVE1MX0lOREVYX05VTV9FTlRSSUVTID0gMTAwCisKKyMgSWYgdGhlIEdFTkVSQVRFX0RPQ1NFVCB0YWcgaXMgc2V0IHRvIFlFUywgYWRkaXRpb25hbCBpbmRleCBmaWxlcworIyB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciBBcHBsZSdzIFhjb2RlIDMKKyMgaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgaW50cm9kdWNlZCB3aXRoIE9TWCAxMC41IChMZW9wYXJkKS4KKyMgVG8gY3JlYXRlIGEgZG9jdW1lbnRhdGlvbiBzZXQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIE1ha2VmaWxlIGluIHRoZQorIyBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFJ1bm5pbmcgbWFrZSB3aWxsIHByb2R1Y2UgdGhlIGRvY3NldCBpbiB0aGF0CisjIGRpcmVjdG9yeSBhbmQgcnVubmluZyAibWFrZSBpbnN0YWxsIiB3aWxsIGluc3RhbGwgdGhlIGRvY3NldCBpbgorIyB+L0xpYnJhcnkvRGV2ZWxvcGVyL1NoYXJlZC9Eb2N1bWVudGF0aW9uL0RvY1NldHMgc28gdGhhdCBYY29kZSB3aWxsIGZpbmQKKyMgaXQgYXQgc3RhcnR1cC4KKyMgU2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3Rvb2xzL2NyZWF0aW5nZG9jc2V0c3dpdGhkb3h5Z2VuLmh0bWwKKyMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0dFTkVSQVRFX0RPQ1NFVCAgICAgICAgPSBOTworCisjIFdoZW4gR0VORVJBVEVfRE9DU0VUIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGlzIHRhZyBkZXRlcm1pbmVzIHRoZSBuYW1lIG9mIHRoZQorIyBmZWVkLiBBIGRvY3VtZW50YXRpb24gZmVlZCBwcm92aWRlcyBhbiB1bWJyZWxsYSB1bmRlciB3aGljaCBtdWx0aXBsZQorIyBkb2N1bWVudGF0aW9uIHNldHMgZnJvbSBhIHNpbmdsZSBwcm92aWRlciAoc3VjaCBhcyBhIGNvbXBhbnkgb3IgcHJvZHVjdCBzdWl0ZSkKKyMgY2FuIGJlIGdyb3VwZWQuCisKK0RPQ1NFVF9GRUVETkFNRSAgICAgICAgPSAiRG94eWdlbiBnZW5lcmF0ZWQgZG9jcyIKKworIyBXaGVuIEdFTkVSQVRFX0RPQ1NFVCB0YWcgaXMgc2V0IHRvIFlFUywgdGhpcyB0YWcgc3BlY2lmaWVzIGEgc3RyaW5nIHRoYXQKKyMgc2hvdWxkIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkb2N1bWVudGF0aW9uIHNldCBidW5kbGUuIFRoaXMgc2hvdWxkIGJlIGEKKyMgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZSBzdHJpbmcsIGUuZy4gY29tLm15Y29tcGFueS5NeURvY1NldC4gRG94eWdlbgorIyB3aWxsIGFwcGVuZCAuZG9jc2V0IHRvIHRoZSBuYW1lLgorCitET0NTRVRfQlVORExFX0lEICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFdoZW4gR0VORVJBVEVfUFVCTElTSEVSX0lEIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkKKyMgaWRlbnRpZnkgdGhlIGRvY3VtZW50YXRpb24gcHVibGlzaGVyLiBUaGlzIHNob3VsZCBiZSBhIHJldmVyc2UgZG9tYWluLW5hbWUKKyMgc3R5bGUgc3RyaW5nLCBlLmcuIGNvbS5teWNvbXBhbnkuTXlEb2NTZXQuZG9jdW1lbnRhdGlvbi4KKworRE9DU0VUX1BVQkxJU0hFUl9JRCAgICA9IG9yZy5kb3h5Z2VuLlB1Ymxpc2hlcgorCisjIFRoZSBHRU5FUkFURV9QVUJMSVNIRVJfTkFNRSB0YWcgaWRlbnRpZmllcyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuCisKK0RPQ1NFVF9QVUJMSVNIRVJfTkFNRSAgPSBQdWJsaXNoZXIKKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMKKyMgd2lsbCBiZSBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdG9vbHMgbGlrZSB0aGUKKyMgTWljcm9zb2Z0IEhUTUwgaGVscCB3b3Jrc2hvcCB0byBnZW5lcmF0ZSBhIGNvbXBpbGVkIEhUTUwgaGVscCBmaWxlICguY2htKQorIyBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQ0hNX0ZJTEUgdGFnIGNhbgorIyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIC5jaG0gZmlsZS4gWW91CisjIGNhbiBhZGQgYSBwYXRoIGluIGZyb250IG9mIHRoZSBmaWxlIGlmIHRoZSByZXN1bHQgc2hvdWxkIG5vdCBiZQorIyB3cml0dGVuIHRvIHRoZSBodG1sIG91dHB1dCBkaXJlY3RvcnkuCisKK0NITV9GSUxFICAgICAgICAgICAgICAgPQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEhIQ19MT0NBVElPTiB0YWcgY2FuCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gKGFic29sdXRlIHBhdGggaW5jbHVkaW5nIGZpbGUgbmFtZSkgb2YKKyMgdGhlIEhUTUwgaGVscCBjb21waWxlciAoaGhjLmV4ZSkuIElmIG5vbi1lbXB0eSBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHJ1bgorIyB0aGUgSFRNTCBoZWxwIGNvbXBpbGVyIG9uIHRoZSBnZW5lcmF0ZWQgaW5kZXguaGhwLgorCitISENfTE9DQVRJT04gICAgICAgICAgID0KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBHRU5FUkFURV9DSEkgZmxhZworIyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgdGhhdAorIyBpdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG1hc3RlciAuY2htIGZpbGUgKE5PKS4KKworR0VORVJBVEVfQ0hJICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQ0hNX0lOREVYX0VOQ09ESU5HCisjIGlzIHVzZWQgdG8gZW5jb2RlIEh0bWxIZWxwIGluZGV4IChoaGspLCBjb250ZW50IChoaGMpIGFuZCBwcm9qZWN0IGZpbGUKKyMgY29udGVudC4KKworQ0hNX0lOREVYX0VOQ09ESU5HICAgICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQklOQVJZX1RPQyBmbGFnCisjIGNvbnRyb2xzIHdoZXRoZXIgYSBiaW5hcnkgdGFibGUgb2YgY29udGVudHMgaXMgZ2VuZXJhdGVkIChZRVMpIG9yIGEKKyMgbm9ybWFsIHRhYmxlIG9mIGNvbnRlbnRzIChOTykgaW4gdGhlIC5jaG0gZmlsZS4KKworQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMKKyMgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgdG8gdGhlIHRyZWUgdmlldy4KKworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgYm90aCBRSFBfTkFNRVNQQUNFIGFuZAorIyBRSFBfVklSVFVBTF9GT0xERVIgYXJlIHNldCwgYW4gYWRkaXRpb25hbCBpbmRleCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkCisjIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIFF0J3MgcWhlbHBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYQorIyBRdCBDb21wcmVzc2VkIEhlbHAgKC5xY2gpIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9RSFAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUUhHX0xPQ0FUSU9OIHRhZyBpcyBzcGVjaWZpZWQsIHRoZSBRQ0hfRklMRSB0YWcgY2FuCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLnFjaCBmaWxlLgorIyBUaGUgcGF0aCBzcGVjaWZpZWQgaXMgcmVsYXRpdmUgdG8gdGhlIEhUTUwgb3V0cHV0IGZvbGRlci4KKworUUNIX0ZJTEUgICAgICAgICAgICAgICA9CisKKyMgVGhlIFFIUF9OQU1FU1BBQ0UgdGFnIHNwZWNpZmllcyB0aGUgbmFtZXNwYWNlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcKKyMgUXQgSGVscCBQcm9qZWN0IG91dHB1dC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZQorIyBodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI25hbWVzcGFjZQorCitRSFBfTkFNRVNQQUNFICAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFRoZSBRSFBfVklSVFVBTF9GT0xERVIgdGFnIHNwZWNpZmllcyB0aGUgbmFtZXNwYWNlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcKKyMgUXQgSGVscCBQcm9qZWN0IG91dHB1dC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZQorIyBodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI3ZpcnR1YWwtZm9sZGVycworCitRSFBfVklSVFVBTF9GT0xERVIgICAgID0gZG9jCisKKyMgSWYgUUhQX0NVU1RfRklMVEVSX05BTUUgaXMgc2V0LCBpdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBjdXN0b20gZmlsdGVyIHRvCisjIGFkZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZQorIyBodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS1maWx0ZXJzCisKK1FIUF9DVVNUX0ZJTFRFUl9OQU1FICAgPQorCisjIFRoZSBRSFBfQ1VTVF9GSUxUX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlCisjIGN1c3RvbSBmaWx0ZXIgdG8gYWRkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlCisjIDxhIGhyZWY9Imh0dHA6Ly9kb2MudHJvbGx0ZWNoLmNvbS9xdGhlbHBwcm9qZWN0Lmh0bWwjY3VzdG9tLWZpbHRlcnMiPgorIyBRdCBIZWxwIFByb2plY3QgLyBDdXN0b20gRmlsdGVyczwvYT4uCisKK1FIUF9DVVNUX0ZJTFRFUl9BVFRSUyAgPQorCisjIFRoZSBRSFBfU0VDVF9GSUxURVJfQVRUUlMgdGFnIHNwZWNpZmllcyB0aGUgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyB0aGlzCisjIHByb2plY3QncworIyBmaWx0ZXIgc2VjdGlvbiBtYXRjaGVzLgorIyA8YSBocmVmPSJodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI2ZpbHRlci1hdHRyaWJ1dGVzIj4KKyMgUXQgSGVscCBQcm9qZWN0IC8gRmlsdGVyIEF0dHJpYnV0ZXM8L2E+LgorCitRSFBfU0VDVF9GSUxURVJfQVRUUlMgID0KKworIyBJZiB0aGUgR0VORVJBVEVfUUhQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgUUhHX0xPQ0FUSU9OIHRhZyBjYW4KKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBRdCdzIHFoZWxwZ2VuZXJhdG9yLgorIyBJZiBub24tZW1wdHkgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gcWhlbHBnZW5lcmF0b3Igb24gdGhlIGdlbmVyYXRlZAorIyAucWhwIGZpbGUuCisKK1FIR19MT0NBVElPTiAgICAgICAgICAgPQorCisjIElmIHRoZSBHRU5FUkFURV9FQ0xJUFNFSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgYWRkaXRpb25hbCBpbmRleCBmaWxlcworIyAgd2lsbCBiZSBnZW5lcmF0ZWQsIHdoaWNoIHRvZ2V0aGVyIHdpdGggdGhlIEhUTUwgZmlsZXMsIGZvcm0gYW4gRWNsaXBzZSBoZWxwCisjIHBsdWdpbi4gVG8gaW5zdGFsbCB0aGlzIHBsdWdpbiBhbmQgbWFrZSBpdCBhdmFpbGFibGUgdW5kZXIgdGhlIGhlbHAgY29udGVudHMKKyMgbWVudSBpbiBFY2xpcHNlLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwKKyMgZmlsZXMgbmVlZHMgdG8gYmUgY29waWVkIGludG8gdGhlIHBsdWdpbnMgZGlyZWN0b3J5IG9mIGVjbGlwc2UuIFRoZSBuYW1lIG9mCisjIHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIHNhbWUgYXMKKyMgdGhlIEVDTElQU0VfRE9DX0lEIHZhbHVlLiBBZnRlciBjb3B5aW5nIEVjbGlwc2UgbmVlZHMgdG8gYmUgcmVzdGFydGVkIGJlZm9yZQorIyB0aGUgaGVscCBhcHBlYXJzLgorCitHRU5FUkFURV9FQ0xJUFNFSEVMUCAgID0gTk8KKworIyBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZWNsaXBzZSBoZWxwIHBsdWdpbi4gV2hlbiBpbnN0YWxsaW5nIHRoZSBwbHVnaW4KKyMgdGhlIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5pbmcgdGhlIEhUTUwgYW5kIFhNTCBmaWxlcyBzaG91bGQgYWxzbyBoYXZlCisjIHRoaXMgbmFtZS4KKworRUNMSVBTRV9ET0NfSUQgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QKKworIyBUaGUgRElTQUJMRV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIGNvbmRlbnNlZCBpbmRleCAodGFicykKKyMgYXQgdG9wIG9mIGVhY2ggSFRNTCBwYWdlLiBUaGUgdmFsdWUgTk8gKHRoZSBkZWZhdWx0KSBlbmFibGVzIHRoZSBpbmRleCBhbmQKKyMgdGhlIHZhbHVlIFlFUyBkaXNhYmxlcyBpdC4gU2luY2UgdGhlIHRhYnMgaGF2ZSB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUKKyMgbmF2aWdhdGlvbiB0cmVlIHlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uIHRvIE5PIGlmIHlvdSBhbHJlYWR5IHNldAorIyBHRU5FUkFURV9UUkVFVklFVyB0byBZRVMuCisKK0RJU0FCTEVfSU5ERVggICAgICAgICAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UUkVFVklFVyB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgYSB0cmVlLWxpa2UgaW5kZXgKKyMgc3RydWN0dXJlIHNob3VsZCBiZSBnZW5lcmF0ZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwgaW5mb3JtYXRpb24uCisjIElmIHRoZSB0YWcgdmFsdWUgaXMgc2V0IHRvIFlFUywgYSBzaWRlIHBhbmVsIHdpbGwgYmUgZ2VuZXJhdGVkCisjIGNvbnRhaW5pbmcgYSB0cmVlLWxpa2UgaW5kZXggc3RydWN0dXJlIChqdXN0IGxpa2UgdGhlIG9uZSB0aGF0CisjIGlzIGdlbmVyYXRlZCBmb3IgSFRNTCBIZWxwKS4gRm9yIHRoaXMgdG8gd29yayBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cworIyBKYXZhU2NyaXB0LCBESFRNTCwgQ1NTIGFuZCBmcmFtZXMgaXMgcmVxdWlyZWQgKGkuZS4gYW55IG1vZGVybiBicm93c2VyKS4KKyMgV2luZG93cyB1c2VycyBhcmUgcHJvYmFibHkgYmV0dGVyIG9mZiB1c2luZyB0aGUgSFRNTCBoZWxwIGZlYXR1cmUuCisjIFNpbmNlIHRoZSB0cmVlIGJhc2ljYWxseSBoYXMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIHRhYiBpbmRleCB5b3UKKyMgY291bGQgY29uc2lkZXIgdG8gc2V0IERJU0FCTEVfSU5ERVggdG8gTk8gd2hlbiBlbmFibGluZyB0aGlzIG9wdGlvbi4KKworR0VORVJBVEVfVFJFRVZJRVcgICAgICA9IE5PCisKKyMgVGhlIEVOVU1fVkFMVUVTX1BFUl9MSU5FIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBlbnVtIHZhbHVlcworIyAocmFuZ2UgWzAsMS4uMjBdKSB0aGF0IGRveHlnZW4gd2lsbCBncm91cCBvbiBvbmUgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwKKyMgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IGEgdmFsdWUgb2YgMCB3aWxsIGNvbXBsZXRlbHkgc3VwcHJlc3MgdGhlIGVudW0KKyMgdmFsdWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBvdmVydmlldyBzZWN0aW9uLgorCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gNAorCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlCisjIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFsIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBmcmFtZSBpbiB3aGljaCB0aGUgdHJlZQorIyBpcyBzaG93bi4KKworVFJFRVZJRVdfV0lEVEggICAgICAgICA9IDI1MAorCisjIFdoZW4gdGhlIEVYVF9MSU5LU19JTl9XSU5ET1cgb3B0aW9uIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIG9wZW4KKyMgbGlua3MgdG8gZXh0ZXJuYWwgc3ltYm9scyBpbXBvcnRlZCB2aWEgdGFnIGZpbGVzIGluIGEgc2VwYXJhdGUgd2luZG93LgorCitFWFRfTElOS1NfSU5fV0lORE9XICAgID0gTk8KKworIyBVc2UgdGhpcyB0YWcgdG8gY2hhbmdlIHRoZSBmb250IHNpemUgb2YgTGF0ZXggZm9ybXVsYXMgaW5jbHVkZWQKKyMgYXMgaW1hZ2VzIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24uIFRoZSBkZWZhdWx0IGlzIDEwLiBOb3RlIHRoYXQKKyMgd2hlbiB5b3UgY2hhbmdlIHRoZSBmb250IHNpemUgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRveHlnZW4gcnVuIHlvdSBuZWVkCisjIHRvIG1hbnVhbGx5IHJlbW92ZSBhbnkgZm9ybV8qLnBuZyBpbWFnZXMgZnJvbSB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5CisjIHRvIGZvcmNlIHRoZW0gdG8gYmUgcmVnZW5lcmF0ZWQuCisKK0ZPUk1VTEFfRk9OVFNJWkUgICAgICAgPSAxMAorCisjIFVzZSB0aGUgRk9STVVMQV9UUkFOUEFSRU5UIHRhZyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGltYWdlcworIyBnZW5lcmF0ZWQgZm9yIGZvcm11bGFzIGFyZSB0cmFuc3BhcmVudCBQTkdzLiBUcmFuc3BhcmVudCBQTkdzIGFyZQorIyBub3Qgc3VwcG9ydGVkIHByb3Blcmx5IGZvciBJRSA2LjAsIGJ1dCBhcmUgc3VwcG9ydGVkIG9uIGFsbCBtb2Rlcm4gYnJvd3NlcnMuCisjIE5vdGUgdGhhdCB3aGVuIGNoYW5naW5nIHRoaXMgb3B0aW9uIHlvdSBuZWVkIHRvIGRlbGV0ZSBhbnkgZm9ybV8qLnBuZyBmaWxlcworIyBpbiB0aGUgSFRNTCBvdXRwdXQgYmVmb3JlIHRoZSBjaGFuZ2VzIGhhdmUgZWZmZWN0LgorCitGT1JNVUxBX1RSQU5TUEFSRU5UICAgID0gWUVTCisKKyMgRW5hYmxlIHRoZSBVU0VfTUFUSEpBWCBvcHRpb24gdG8gcmVuZGVyIExhVGVYIGZvcm11bGFzIHVzaW5nIE1hdGhKYXgKKyMgKHNlZSBodHRwOi8vd3d3Lm1hdGhqYXgub3JnKSB3aGljaCB1c2VzIGNsaWVudCBzaWRlIEphdmFzY3JpcHQgZm9yIHRoZQorIyByZW5kZXJpbmcgaW5zdGVhZCBvZiB1c2luZyBwcmVyZW5kZXJlZCBiaXRtYXBzLiBVc2UgdGhpcyBpZiB5b3UgZG8gbm90CisjIGhhdmUgTGFUZVggaW5zdGFsbGVkIG9yIGlmIHlvdSB3YW50IHRvIGZvcm11bGFzIGxvb2sgcHJldHRpZXIgaW4gdGhlIEhUTUwKKyMgb3V0cHV0LiBXaGVuIGVuYWJsZWQgeW91IG1heSBhbHNvIG5lZWQgdG8gaW5zdGFsbCBNYXRoSmF4IHNlcGFyYXRlbHkgYW5kCisjIGNvbmZpZ3VyZSB0aGUgcGF0aCB0byBpdCB1c2luZyB0aGUgTUFUSEpBWF9SRUxQQVRIIG9wdGlvbi4KKworVVNFX01BVEhKQVggICAgICAgICAgICA9IE5PCisKKyMgV2hlbiBNYXRoSmF4IGlzIGVuYWJsZWQgeW91IGNhbiBzZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdCB0byBiZSB1c2VkIGZvcgorIyB0aGUgTWF0aEpheCBvdXRwdXQuIFN1cHBvcnRlZCB0eXBlcyBhcmUgSFRNTC1DU1MsIE5hdGl2ZU1NTCAoaS5lLiBNYXRoTUwpIGFuZAorIyBTVkcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEhUTUwtQ1NTLCB3aGljaCBpcyBzbG93ZXIsIGJ1dCBoYXMgdGhlIGJlc3QKKyMgY29tcGF0aWJpbGl0eS4KKworTUFUSEpBWF9GT1JNQVQgICAgICAgICA9IEhUTUwtQ1NTCisKKyMgV2hlbiBNYXRoSmF4IGlzIGVuYWJsZWQgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlCisjIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSB1c2luZyB0aGUgTUFUSEpBWF9SRUxQQVRIIG9wdGlvbi4gVGhlIGRlc3RpbmF0aW9uCisjIGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiB0aGUgTWF0aEpheC5qcyBzY3JpcHQuIEZvciBpbnN0YW5jZSwgaWYgdGhlIG1hdGhqYXgKKyMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSwgdGhlbgorIyBNQVRISkFYX1JFTFBBVEggc2hvdWxkIGJlIC4uL21hdGhqYXguIFRoZSBkZWZhdWx0IHZhbHVlIHBvaW50cyB0bworIyB0aGUgTWF0aEpheCBDb250ZW50IERlbGl2ZXJ5IE5ldHdvcmsgc28geW91IGNhbiBxdWlja2x5IHNlZSB0aGUgcmVzdWx0IHdpdGhvdXQKKyMgaW5zdGFsbGluZyBNYXRoSmF4LgorIyBIb3dldmVyLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGEgbG9jYWwKKyMgY29weSBvZiBNYXRoSmF4IGZyb20gaHR0cDovL3d3dy5tYXRoamF4Lm9yZyBiZWZvcmUgZGVwbG95bWVudC4KKworTUFUSEpBWF9SRUxQQVRIICAgICAgICA9IGh0dHA6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QKKworIyBUaGUgTUFUSEpBWF9FWFRFTlNJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBNYXRoSmF4IGV4dGVuc2lvbgorIyBuYW1lcyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGR1cmluZyBNYXRoSmF4IHJlbmRlcmluZy4KKworTUFUSEpBWF9FWFRFTlNJT05TICAgICA9CisKKyMgVGhlIE1BVEhKQVhfQ09ERUZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHdpdGggamF2YXNjcmlwdAorIyBwaWVjZXMgb2YgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiBzdGFydHVwIG9mIHRoZSBNYXRoSmF4IGNvZGUuCisKK01BVEhKQVhfQ09ERUZJTEUgICAgICAgPQorCisjIFdoZW4gdGhlIFNFQVJDSEVOR0lORSB0YWcgaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzZWFyY2ggYm94CisjIGZvciB0aGUgSFRNTCBvdXRwdXQuIFRoZSB1bmRlcmx5aW5nIHNlYXJjaCBlbmdpbmUgdXNlcyBqYXZhc2NyaXB0CisjIGFuZCBESFRNTCBhbmQgc2hvdWxkIHdvcmsgb24gYW55IG1vZGVybiBicm93c2VyLiBOb3RlIHRoYXQgd2hlbiB1c2luZworIyBIVE1MIGhlbHAgKEdFTkVSQVRFX0hUTUxIRUxQKSwgUXQgaGVscCAoR0VORVJBVEVfUUhQKSwgb3IgZG9jc2V0cworIyAoR0VORVJBVEVfRE9DU0VUKSB0aGVyZSBpcyBhbHJlYWR5IGEgc2VhcmNoIGZ1bmN0aW9uIHNvIHRoaXMgb25lIHNob3VsZAorIyB0eXBpY2FsbHkgYmUgZGlzYWJsZWQuIEZvciBsYXJnZSBwcm9qZWN0cyB0aGUgamF2YXNjcmlwdCBiYXNlZCBzZWFyY2ggZW5naW5lCisjIGNhbiBiZSBzbG93LCB0aGVuIGVuYWJsaW5nIFNFUlZFUl9CQVNFRF9TRUFSQ0ggbWF5IHByb3ZpZGUgYSBiZXR0ZXIgc29sdXRpb24uCisKK1NFQVJDSEVOR0lORSAgICAgICAgICAgPSBOTworCisjIFdoZW4gdGhlIFNFUlZFUl9CQVNFRF9TRUFSQ0ggdGFnIGlzIGVuYWJsZWQgdGhlIHNlYXJjaCBlbmdpbmUgd2lsbCBiZQorIyBpbXBsZW1lbnRlZCB1c2luZyBhIHdlYiBzZXJ2ZXIgaW5zdGVhZCBvZiBhIHdlYiBjbGllbnQgdXNpbmcgSmF2YXNjcmlwdC4KKyMgVGhlcmUgYXJlIHR3byBmbGF2b3VycyBvZiB3ZWIgc2VydmVyIGJhc2VkIHNlYXJjaCBkZXBlbmRpbmcgb24gdGhlCisjIEVYVEVSTkFMX1NFQVJDSCBzZXR0aW5nLiBXaGVuIGRpc2FibGVkLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBQSFAgc2NyaXB0IGZvcgorIyBzZWFyY2hpbmcgYW5kIGFuIGluZGV4IGZpbGUgdXNlZCBieSB0aGUgc2NyaXB0LiBXaGVuIEVYVEVSTkFMX1NFQVJDSCBpcworIyBlbmFibGVkIHRoZSBpbmRleGluZyBhbmQgc2VhcmNoaW5nIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5IGV4dGVybmFsIHRvb2xzLgorIyBTZWUgdGhlIG1hbnVhbCBmb3IgZGV0YWlscy4KKworU0VSVkVSX0JBU0VEX1NFQVJDSCAgICA9IE5PCisKKyMgV2hlbiBFWFRFUk5BTF9TRUFSQ0ggaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgbm8gbG9uZ2VyIGdlbmVyYXRlIHRoZSBQSFAKKyMgc2NyaXB0IGZvciBzZWFyY2hpbmcuIEluc3RlYWQgdGhlIHNlYXJjaCByZXN1bHRzIGFyZSB3cml0dGVuIHRvIGFuIFhNTCBmaWxlCisjIHdoaWNoIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBhbiBleHRlcm5hbCBpbmRleGVyLiBEb3h5Z2VuIHdpbGwgaW52b2tlIGFuCisjIGV4dGVybmFsIHNlYXJjaCBlbmdpbmUgcG9pbnRlZCB0byBieSB0aGUgU0VBUkNIRU5HSU5FX1VSTCBvcHRpb24gdG8gb2J0YWluCisjIHRoZSBzZWFyY2ggcmVzdWx0cy4gRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgaW5kZXhlciAoZG94eWluZGV4ZXIpIGFuZAorIyBzZWFyY2ggZW5naW5lIChkb3h5c2VhcmNoLmNnaSkgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBvcGVuIHNvdXJjZSBzZWFyY2gKKyMgZW5naW5lIGxpYnJhcnkgWGFwaWFuLiBTZWUgdGhlIG1hbnVhbCBmb3IgY29uZmlndXJhdGlvbiBkZXRhaWxzLgorCitFWFRFUk5BTF9TRUFSQ0ggICAgICAgID0gTk8KKworIyBUaGUgU0VBUkNIRU5HSU5FX1VSTCBzaG91bGQgcG9pbnQgdG8gYSBzZWFyY2ggZW5naW5lIGhvc3RlZCBieSBhIHdlYiBzZXJ2ZXIKKyMgd2hpY2ggd2lsbCByZXR1cm5lZCB0aGUgc2VhcmNoIHJlc3VsdHMgd2hlbiBFWFRFUk5BTF9TRUFSQ0ggaXMgZW5hYmxlZC4KKyMgRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgc2VhcmNoIGVuZ2luZSAoZG94eXNlYXJjaCkgd2hpY2ggaXMgYmFzZWQgb24KKyMgdGhlIG9wZW4gc291cmNlIHNlYXJjaCBlbmdpbmUgbGlicmFyeSBYYXBpYW4uIFNlZSB0aGUgbWFudWFsIGZvciBjb25maWd1cmF0aW9uCisjIGRldGFpbHMuCisKK1NFQVJDSEVOR0lORV9VUkwgICAgICAgPQorCisjIFdoZW4gU0VSVkVSX0JBU0VEX1NFQVJDSCBhbmQgRVhURVJOQUxfU0VBUkNIIGFyZSBib3RoIGVuYWJsZWQgdGhlIHVuaW5kZXhlZAorIyBzZWFyY2ggZGF0YSBpcyB3cml0dGVuIHRvIGEgZmlsZSBmb3IgaW5kZXhpbmcgYnkgYW4gZXh0ZXJuYWwgdG9vbC4gV2l0aCB0aGUKKyMgU0VBUkNIREFUQV9GSUxFIHRhZyB0aGUgbmFtZSBvZiB0aGlzIGZpbGUgY2FuIGJlIHNwZWNpZmllZC4KKworU0VBUkNIREFUQV9GSUxFICAgICAgICA9IHNlYXJjaGRhdGEueG1sCisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIEFORCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUKKyMgRVhURVJOQUxfU0VBUkNIX0lEIHRhZyBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcHJvamVjdC4gVGhpcyBpcworIyB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aCBFWFRSQV9TRUFSQ0hfTUFQUElOR1MgdG8gc2VhcmNoIHRocm91Z2ggbXVsdGlwbGUKKyMgcHJvamVjdHMgYW5kIHJlZGlyZWN0IHRoZSByZXN1bHRzIGJhY2sgdG8gdGhlIHJpZ2h0IHByb2plY3QuCisKK0VYVEVSTkFMX1NFQVJDSF9JRCAgICAgPQorCisjIFRoZSBFWFRSQV9TRUFSQ0hfTUFQUElOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBzZWFyY2hpbmcgdGhyb3VnaCBkb3h5Z2VuCisjIHByb2plY3RzIG90aGVyIHRoYW4gdGhlIG9uZSBkZWZpbmVkIGJ5IHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhhdCBhcmUKKyMgYWxsIGFkZGVkIHRvIHRoZSBzYW1lIGV4dGVybmFsIHNlYXJjaCBpbmRleC4gRWFjaCBwcm9qZWN0IG5lZWRzIHRvIGhhdmUgYQorIyB1bmlxdWUgaWQgc2V0IHZpYSBFWFRFUk5BTF9TRUFSQ0hfSUQuIFRoZSBzZWFyY2ggbWFwcGluZyB0aGVuIG1hcHMgdGhlIGlkCisjIG9mIHRvIGEgcmVsYXRpdmUgbG9jYXRpb24gd2hlcmUgdGhlIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kLgorIyBUaGUgZm9ybWF0IGlzOiBFWFRSQV9TRUFSQ0hfTUFQUElOR1MgPSBpZDE9bG9jMSBpZDI9bG9jMiAuLi4KKworRVhUUkFfU0VBUkNIX01BUFBJTkdTICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIExhVGVYIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBnZW5lcmF0ZSBMYXRleCBvdXRwdXQuCisKK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSBOTworCisjIFRoZSBMQVRFWF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgTGFUZVggZG9jcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGxhdGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGF0aC4KKworTEFURVhfT1VUUFVUICAgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIExBVEVYX0NNRF9OQU1FIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBMYVRlWCBjb21tYW5kIG5hbWUgdG8gYmUKKyMgaW52b2tlZC4gSWYgbGVmdCBibGFuayBgbGF0ZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBjb21tYW5kIG5hbWUuCisjIE5vdGUgdGhhdCB3aGVuIGVuYWJsaW5nIFVTRV9QREZMQVRFWCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgZm9yCisjIGdlbmVyYXRpbmcgYml0bWFwcyBmb3IgZm9ybXVsYXMgaW4gdGhlIEhUTUwgb3V0cHV0LCBidXQgbm90IGluIHRoZQorIyBNYWtlZmlsZSB0aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisKK0xBVEVYX0NNRF9OQU1FICAgICAgICAgPSBsYXRleAorCisjIFRoZSBNQUtFSU5ERVhfQ01EX05BTUUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbW1hbmQgbmFtZSB0bworIyBnZW5lcmF0ZSBpbmRleCBmb3IgTGFUZVguIElmIGxlZnQgYmxhbmsgYG1ha2VpbmRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZQorIyBkZWZhdWx0IGNvbW1hbmQgbmFtZS4KKworTUFLRUlOREVYX0NNRF9OQU1FICAgICA9IG1ha2VpbmRleAorCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdAorIyBMYVRlWCBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gWUVTCisKKyMgVGhlIFBBUEVSX1RZUEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcGFwZXIgdHlwZSB0aGF0IGlzIHVzZWQKKyMgYnkgdGhlIHByaW50ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGE0LCBsZXR0ZXIsIGxlZ2FsIGFuZAorIyBleGVjdXRpdmUuIElmIGxlZnQgYmxhbmsgYTQgd2lsbCBiZSB1c2VkLgorCitQQVBFUl9UWVBFICAgICAgICAgICAgID0gYTR3aWRlCisKKyMgVGhlIEVYVFJBX1BBQ0tBR0VTIHRhZyBjYW4gYmUgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBuYW1lcyBvZiBMYVRlWAorIyBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgTGFUZVggb3V0cHV0LgorCitFWFRSQV9QQUNLQUdFUyAgICAgICAgID0KKworIyBUaGUgTEFURVhfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgTGFUZVggaGVhZGVyIGZvcgorIyB0aGUgZ2VuZXJhdGVkIGxhdGV4IGRvY3VtZW50LiBUaGUgaGVhZGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgdW50aWwKKyMgdGhlIGZpcnN0IGNoYXB0ZXIuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgaGVhZGVyLiBOb3RpY2U6IG9ubHkgdXNlIHRoaXMgdGFnIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyEKKworTEFURVhfSEVBREVSICAgICAgICAgICA9CisKKyMgVGhlIExBVEVYX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIExhVGVYIGZvb3RlciBmb3IKKyMgdGhlIGdlbmVyYXRlZCBsYXRleCBkb2N1bWVudC4gVGhlIGZvb3RlciBzaG91bGQgY29udGFpbiBldmVyeXRoaW5nIGFmdGVyCisjIHRoZSBsYXN0IGNoYXB0ZXIuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgZm9vdGVyLiBOb3RpY2U6IG9ubHkgdXNlIHRoaXMgdGFnIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyEKKworTEFURVhfRk9PVEVSICAgICAgICAgICA9CisKKyMgVGhlIExBVEVYX0VYVFJBX0ZJTEVTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4dHJhIGltYWdlcworIyBvciBvdGhlciBzb3VyY2UgZmlsZXMgd2hpY2ggc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgTGFUZVggb3V0cHV0IGRpcmVjdG9yeS4KKyMgTm90ZSB0aGF0IHRoZSBmaWxlcyB3aWxsIGJlIGNvcGllZCBhcy1pczsgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIG9yIG1hcmtlcnMKKyMgYXZhaWxhYmxlLgorCitMQVRFWF9FWFRSQV9GSUxFUyAgICAgID0KKworIyBJZiB0aGUgUERGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBMYVRlWCB0aGF0IGlzIGdlbmVyYXRlZAorIyBpcyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBwZGYgKHVzaW5nIHBzMnBkZikuIFRoZSBwZGYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzCisjIFRoaXMgbWFrZXMgdGhlIG91dHB1dCBzdWl0YWJsZSBmb3Igb25saW5lIGJyb3dzaW5nIHVzaW5nIGEgcGRmIHZpZXdlci4KKworUERGX0hZUEVSTElOS1MgICAgICAgICA9IFlFUworCisjIElmIHRoZSBVU0VfUERGTEFURVggdGFnIGlzIHNldCB0byBZRVMsIHBkZmxhdGV4IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mCisjIHBsYWluIGxhdGV4IGluIHRoZSBnZW5lcmF0ZWQgTWFrZWZpbGUuIFNldCB0aGlzIG9wdGlvbiB0byBZRVMgdG8gZ2V0IGEKKyMgaGlnaGVyIHF1YWxpdHkgUERGIGRvY3VtZW50YXRpb24uCisKK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgTEFURVhfQkFUQ0hNT0RFIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgYWRkIHRoZSBcXGJhdGNobW9kZS4KKyMgY29tbWFuZCB0byB0aGUgZ2VuZXJhdGVkIExhVGVYIGZpbGVzLiBUaGlzIHdpbGwgaW5zdHJ1Y3QgTGFUZVggdG8ga2VlcAorIyBydW5uaW5nIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuCisjIFRoaXMgb3B0aW9uIGlzIGFsc28gdXNlZCB3aGVuIGdlbmVyYXRpbmcgZm9ybXVsYXMgaW4gSFRNTC4KKworTEFURVhfQkFUQ0hNT0RFICAgICAgICA9IE5PCisKKyMgSWYgTEFURVhfSElERV9JTkRJQ0VTIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90CisjIGluY2x1ZGUgdGhlIGluZGV4IGNoYXB0ZXJzIChzdWNoIGFzIEZpbGUgSW5kZXgsIENvbXBvdW5kIEluZGV4LCBldGMuKQorIyBpbiB0aGUgb3V0cHV0LgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIyBJZiBMQVRFWF9TT1VSQ0VfQ09ERSBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGluY2x1ZGUKKyMgc291cmNlIGNvZGUgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIGluIHRoZSBMYVRlWCBvdXRwdXQuCisjIE5vdGUgdGhhdCB3aGljaCBzb3VyY2VzIGFyZSBzaG93biBhbHNvIGRlcGVuZHMgb24gb3RoZXIgc2V0dGluZ3MKKyMgc3VjaCBhcyBTT1VSQ0VfQlJPV1NFUi4KKworTEFURVhfU09VUkNFX0NPREUgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX0JJQl9TVFlMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgc3R5bGUgdG8gdXNlIGZvciB0aGUKKyMgYmlibGlvZ3JhcGh5LCBlLmcuIHBsYWlubmF0LCBvciBpZWVldHIuIFRoZSBkZWZhdWx0IHN0eWxlIGlzICJwbGFpbiIuIFNlZQorIyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpYlRlWCBmb3IgbW9yZSBpbmZvLgorCitMQVRFWF9CSUJfU1RZTEUgICAgICAgID0gcGxhaW4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQKKyMgVGhlIFJURiBvdXRwdXQgaXMgb3B0aW1pemVkIGZvciBXb3JkIDk3IGFuZCBtYXkgbm90IGxvb2sgdmVyeSBwcmV0dHkgd2l0aAorIyBvdGhlciBSVEYgcmVhZGVycyBvciBlZGl0b3JzLgorCitHRU5FUkFURV9SVEYgICAgICAgICAgID0gTk8KKworIyBUaGUgUlRGX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBSVEYgZG9jcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHJ0Zicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK1JURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKKworIyBJZiB0aGUgQ09NUEFDVF9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0CisjIFJURiBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQKKyMgd2lsbCBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLgorIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBXT1JEIG9yIG90aGVyCisjIHByb2dyYW1zIHdoaWNoIHN1cHBvcnQgdGhvc2UgZmllbGRzLgorIyBOb3RlOiB3b3JkcGFkICh3cml0ZSkgYW5kIG90aGVycyBkbyBub3Qgc3VwcG9ydCBsaW5rcy4KKworUlRGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCisKKyMgTG9hZCBzdHlsZSBzaGVldCBkZWZpbml0aW9ucyBmcm9tIGZpbGUuIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncworIyBjb25maWcgZmlsZSwgaS5lLiBhIHNlcmllcyBvZiBhc3NpZ25tZW50cy4gWW91IG9ubHkgaGF2ZSB0byBwcm92aWRlCisjIHJlcGxhY2VtZW50cywgbWlzc2luZyBkZWZpbml0aW9ucyBhcmUgc2V0IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPQorCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBydGYgZG9jdW1lbnQuCisjIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4KKworUlRGX0VYVEVOU0lPTlNfRklMRSAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG1hbiBwYWdlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9NQU4gdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwKKyMgZ2VuZXJhdGUgbWFuIHBhZ2VzCisKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTworCisjIFRoZSBNQU5fT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIG1hbiBwYWdlcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYG1hbicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK01BTl9PVVRQVVQgICAgICAgICAgICAgPSBtYW4KKworIyBUaGUgTUFOX0VYVEVOU0lPTiB0YWcgZGV0ZXJtaW5lcyB0aGUgZXh0ZW5zaW9uIHRoYXQgaXMgYWRkZWQgdG8KKyMgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZXMgKGRlZmF1bHQgaXMgdGhlIHN1YnJvdXRpbmUncyBzZWN0aW9uIC4zKQorCitNQU5fRVhURU5TSU9OICAgICAgICAgID0gLjMKKworIyBJZiB0aGUgTUFOX0xJTktTIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBEb3h5Z2VuIGdlbmVyYXRlcyBtYW4gb3V0cHV0LAorIyB0aGVuIGl0IHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5CisjIGRvY3VtZW50ZWQgaW4gdGhlIHJlYWwgbWFuIHBhZ2UocykuIFRoZXNlIGFkZGl0aW9uYWwgZmlsZXMKKyMgb25seSBzb3VyY2UgdGhlIHJlYWwgbWFuIHBhZ2UsIGJ1dCB3aXRob3V0IHRoZW0gdGhlIG1hbiBjb21tYW5kCisjIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuIFRoZSBkZWZhdWx0IGlzIE5PLgorCitNQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9YTUwgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIGFuIFhNTCBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZgorIyB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX1hNTCAgICAgICAgICAgPSBOTworCisjIFRoZSBYTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFhNTCBwYWdlcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHhtbCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK1hNTF9PVVRQVVQgICAgICAgICAgICAgPSB4bWwKKworIyBUaGUgWE1MX1NDSEVNQSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgc2NoZW1hLAorIyB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUKKyMgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisKKyNYTUxfU0NIRU1BICAgICAgICAgICAgID0KKworIyBUaGUgWE1MX0RURCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgRFRELAorIyB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUKKyMgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisKKyNYTUxfRFREICAgICAgICAgICAgICAgID0KKworIyBJZiB0aGUgWE1MX1BST0dSQU1MSVNUSU5HIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbAorIyBkdW1wIHRoZSBwcm9ncmFtIGxpc3RpbmdzIChpbmNsdWRpbmcgc3ludGF4IGhpZ2hsaWdodGluZworIyBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgaW5mb3JtYXRpb24pIHRvIHRoZSBYTUwgb3V0cHV0LiBOb3RlIHRoYXQKKyMgZW5hYmxpbmcgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIFhNTCBvdXRwdXQuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgRE9DQk9PSyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfRE9DQk9PSyB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgRE9DQk9PSyBmaWxlcworIyB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIFBERi4KKworR0VORVJBVEVfRE9DQk9PSyAgICAgICA9IE5PCisKKyMgVGhlIERPQ0JPT0tfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIERPQ0JPT0sgcGFnZXMgd2lsbCBiZSBwdXQuCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluCisjIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGRvY2Jvb2sgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK0RPQ0JPT0tfT1VUUFVUICAgICAgICAgPSBkb2Nib29rCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXV0b0dlbiBEZWZpbml0aW9ucyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfQVVUT0dFTl9ERUYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIGFuIEF1dG9HZW4gRGVmaW5pdGlvbnMgKHNlZSBhdXRvZ2VuLnNmLm5ldCkgZmlsZQorIyB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbAorIyBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbAorIyBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgorCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUGVybCBtb2R1bGUgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1BFUkxNT0QgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIGEgUGVybCBtb2R1bGUgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcworIyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUKKyMgbW9tZW50LgorCitHRU5FUkFURV9QRVJMTU9EICAgICAgID0gTk8KKworIyBJZiB0aGUgUEVSTE1PRF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUKKyMgdGhlIG5lY2Vzc2FyeSBNYWtlZmlsZSBydWxlcywgUGVybCBzY3JpcHRzIGFuZCBMYVRlWCBjb2RlIHRvIGJlIGFibGUKKyMgdG8gZ2VuZXJhdGUgUERGIGFuZCBEVkkgb3V0cHV0IGZyb20gdGhlIFBlcmwgbW9kdWxlIG91dHB1dC4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZQorIyBuaWNlbHkgZm9ybWF0dGVkIHNvIGl0IGNhbiBiZSBwYXJzZWQgYnkgYSBodW1hbiByZWFkZXIuCisjIFRoaXMgaXMgdXNlZnVsCisjIGlmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbi4KKyMgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoaXMKKyMgdGFnIGlzIHNldCB0byBOTyB0aGUgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyCisjIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQganVzdCB0aGUgc2FtZS4KKworUEVSTE1PRF9QUkVUVFkgICAgICAgICA9IFlFUworCisjIFRoZSBuYW1lcyBvZiB0aGUgbWFrZSB2YXJpYWJsZXMgaW4gdGhlIGdlbmVyYXRlZCBkb3h5cnVsZXMubWFrZSBmaWxlCisjIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguCisjIFRoaXMgaXMgdXNlZnVsIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZQorIyBNYWtlZmlsZSBkb24ndCBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIHZhcmlhYmxlcy4KKworUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvcgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyBldmFsdWF0ZSBhbGwgQy1wcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBmb3VuZCBpbiB0aGUgc291cmNlcyBhbmQgaW5jbHVkZQorIyBmaWxlcy4KKworRU5BQkxFX1BSRVBST0NFU1NJTkcgICA9IFlFUworCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGV4cGFuZCBhbGwgbWFjcm8KKyMgbmFtZXMgaW4gdGhlIHNvdXJjZSBjb2RlLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSBvbmx5IGNvbmRpdGlvbmFsCisjIGNvbXBpbGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLiBNYWNybyBleHBhbnNpb24gY2FuIGJlIGRvbmUgaW4gYSBjb250cm9sbGVkCisjIHdheSBieSBzZXR0aW5nIEVYUEFORF9PTkxZX1BSRURFRiB0byBZRVMuCisKK01BQ1JPX0VYUEFOU0lPTiAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFBBTkRfT05MWV9QUkVERUYgYW5kIE1BQ1JPX0VYUEFOU0lPTiB0YWdzIGFyZSBib3RoIHNldCB0byBZRVMKKyMgdGhlbiB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUKKyMgUFJFREVGSU5FRCBhbmQgRVhQQU5EX0FTX0RFRklORUQgdGFncy4KKworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IE5PCisKKyMgSWYgdGhlIFNFQVJDSF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZSBpbmNsdWRlcyBmaWxlcworIyBwb2ludGVkIHRvIGJ5IElOQ0xVREVfUEFUSCB3aWxsIGJlIHNlYXJjaGVkIHdoZW4gYSAjaW5jbHVkZSBpcyBmb3VuZC4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5CisjIHRoZSBwcmVwcm9jZXNzb3IuCisKK0lOQ0xVREVfUEFUSCAgICAgICAgICAgPQorCisjIFlvdSBjYW4gdXNlIHRoZSBJTkNMVURFX0ZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQKKyMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZQorIyBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuaywgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIEZJTEVfUEFUVEVSTlMgd2lsbAorIyBiZSB1c2VkLgorCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0KKworIyBUaGUgUFJFREVGSU5FRCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBtYWNybyBuYW1lcyB0aGF0CisjIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGUgcHJlcHJvY2Vzc29yIGlzIHN0YXJ0ZWQgKHNpbWlsYXIgdG8gdGhlIC1EIG9wdGlvbiBvZgorIyBnY2MpLiBUaGUgYXJndW1lbnQgb2YgdGhlIHRhZyBpcyBhIGxpc3Qgb2YgbWFjcm9zIG9mIHRoZSBmb3JtOiBuYW1lCisjIG9yIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSA9IGFyZQorIyBvbWl0dGVkID0xIGlzIGFzc3VtZWQuIFRvIHByZXZlbnQgYSBtYWNybyBkZWZpbml0aW9uIGZyb20gYmVpbmcKKyMgdW5kZWZpbmVkIHZpYSAjdW5kZWYgb3IgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdXNlIHRoZSA6PSBvcGVyYXRvcgorIyBpbnN0ZWFkIG9mIHRoZSA9IG9wZXJhdG9yLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0gV0lOMzIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIE5UTE0gXAorICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9MWk8gXAorICAgICAgICAgICAgICAgICAgICAgICAgIEVOQUJMRV9GUkFHTUVOVCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgUDJNUCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgUDJNUF9TRVJWRVIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9DUllQVE8gXAorICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9TU0wgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEVOQUJMRV9QTFVHSU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIEVOQUJMRV9NQU5BR0VNRU5UIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVfT0NDIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBIQVZFX0dFVFRJTUVPRkRBWQorCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gYW5kIEVYUEFORF9PTkxZX1BSRURFRiB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4KKyMgdGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YgbWFjcm8gbmFtZXMgdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuCisjIFRoZSBtYWNybyBkZWZpbml0aW9uIHRoYXQgaXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgd2lsbCBiZSB1c2VkLgorIyBVc2UgdGhlIFBSRURFRklORUQgdGFnIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBtYWNybyBkZWZpbml0aW9uIHRoYXQKKyMgb3ZlcnJ1bGVzIHRoZSBkZWZpbml0aW9uIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZS4KKworRVhQQU5EX0FTX0RFRklORUQgICAgICA9CisKKyMgSWYgdGhlIFNLSVBfRlVOQ1RJT05fTUFDUk9TIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbgorIyBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwgcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIGZ1bmN0aW9uLWxpa2UgbWFjcm9zCisjIHRoYXQgYXJlIGFsb25lIG9uIGEgbGluZSwgaGF2ZSBhbiBhbGwgdXBwZXJjYXNlIG5hbWUsIGFuZCBkbyBub3QgZW5kIHdpdGggYQorIyBzZW1pY29sb24sIGJlY2F1c2UgdGhlc2Ugd2lsbCBjb25mdXNlIHRoZSBwYXJzZXIgaWYgbm90IHJlbW92ZWQuCisKK1NLSVBfRlVOQ1RJT05fTUFDUk9TICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uOjphZGRpdGlvbnMgcmVsYXRlZCB0byBleHRlcm5hbCByZWZlcmVuY2VzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFRBR0ZJTEVTIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHRhZ2ZpbGVzLiBGb3IgZWFjaAorIyB0YWcgZmlsZSB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUKKyMgZm9ybWF0IG9mIGEgdGFnIGZpbGUgd2l0aG91dCB0aGlzIGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6CisjCisjIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6CisjCisjIFRBR0ZJTEVTID0gZmlsZTE9bG9jMSAiZmlsZTIgPSBsb2MyIiAuLi4KKyMgd2hlcmUgImxvYzEiIGFuZCAibG9jMiIgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzCisjIG9yIFVSTHMuIE5vdGUgdGhhdCBlYWNoIHRhZyBmaWxlIG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lICh3aGVyZSB0aGUgbmFtZSBkb2VzCisjIE5PVCBpbmNsdWRlIHRoZSBwYXRoKS4gSWYgYSB0YWcgZmlsZSBpcyBub3QgbG9jYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoCisjIGRveHlnZW4gaXMgcnVuLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIHRhZ2ZpbGUgaGVyZS4KKworVEFHRklMRVMgICAgICAgICAgICAgICA9CisKKyMgV2hlbiBhIGZpbGUgbmFtZSBpcyBzcGVjaWZpZWQgYWZ0ZXIgR0VORVJBVEVfVEFHRklMRSwgZG94eWdlbiB3aWxsIGNyZWF0ZQorIyBhIHRhZyBmaWxlIHRoYXQgaXMgYmFzZWQgb24gdGhlIGlucHV0IGZpbGVzIGl0IHJlYWRzLgorCitHRU5FUkFURV9UQUdGSUxFICAgICAgID0KKworIyBJZiB0aGUgQUxMRVhURVJOQUxTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUgbGlzdGVkCisjIGluIHRoZSBjbGFzcyBpbmRleC4gSWYgc2V0IHRvIE5PIG9ubHkgdGhlIGluaGVyaXRlZCBleHRlcm5hbCBjbGFzc2VzCisjIHdpbGwgYmUgbGlzdGVkLgorCitBTExFWFRFUk5BTFMgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhURVJOQUxfR1JPVVBTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBncm91cHMgd2lsbCBiZSBsaXN0ZWQKKyMgaW4gdGhlIG1vZHVsZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgZ3JvdXBzIHdpbGwKKyMgYmUgbGlzdGVkLgorCitFWFRFUk5BTF9HUk9VUFMgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVEVSTkFMX1BBR0VTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBwYWdlcyB3aWxsIGJlIGxpc3RlZAorIyBpbiB0aGUgcmVsYXRlZCBwYWdlcyBpbmRleC4gSWYgc2V0IHRvIE5PLCBvbmx5IHRoZSBjdXJyZW50IHByb2plY3QncworIyBwYWdlcyB3aWxsIGJlIGxpc3RlZC4KKworRVhURVJOQUxfUEFHRVMgICAgICAgICA9IFlFUworCisjIFRoZSBQRVJMX1BBVEggc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBwZXJsIHNjcmlwdAorIyBpbnRlcnByZXRlciAoaS5lLiB0aGUgcmVzdWx0IG9mIGB3aGljaCBwZXJsJykuCisKK1BFUkxfUEFUSCAgICAgICAgICAgICAgPSAvdXNyL2Jpbi9wZXJsCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIGEgaW5oZXJpdGFuY2UgZGlhZ3JhbSAoaW4gSFRNTCwgUlRGIGFuZCBMYVRlWCkgZm9yIGNsYXNzZXMgd2l0aCBiYXNlCisjIG9yIHN1cGVyIGNsYXNzZXMuIFNldHRpbmcgdGhlIHRhZyB0byBOTyB0dXJucyB0aGUgZGlhZ3JhbXMgb2ZmLiBOb3RlIHRoYXQKKyMgdGhpcyBvcHRpb24gYWxzbyB3b3JrcyB3aXRoIEhBVkVfRE9UIGRpc2FibGVkLCBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8KKyMgaW5zdGFsbCBhbmQgdXNlIGRvdCwgc2luY2UgaXQgeWllbGRzIG1vcmUgcG93ZXJmdWwgZ3JhcGhzLgorCitDTEFTU19ESUFHUkFNUyAgICAgICAgID0gTk8KKworIyBZb3UgY2FuIGRlZmluZSBtZXNzYWdlIHNlcXVlbmNlIGNoYXJ0cyB3aXRoaW4gZG94eWdlbiBjb21tZW50cyB1c2luZyB0aGUgXG1zYworIyBjb21tYW5kLiBEb3h5Z2VuIHdpbGwgdGhlbiBydW4gdGhlIG1zY2dlbiB0b29sIChzZWUKKyMgaHR0cDovL3d3dy5tY3Rlcm5hbi5tZS51ay9tc2NnZW4vKSB0byBwcm9kdWNlIHRoZSBjaGFydCBhbmQgaW5zZXJ0IGl0IGluIHRoZQorIyBkb2N1bWVudGF0aW9uLiBUaGUgTVNDR0VOX1BBVEggdGFnIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlCisjIHRoZSBtc2NnZW4gdG9vbCByZXNpZGVzLiBJZiBsZWZ0IGVtcHR5IHRoZSB0b29sIGlzIGFzc3VtZWQgdG8gYmUgZm91bmQgaW4gdGhlCisjIGRlZmF1bHQgc2VhcmNoIHBhdGguCisKK01TQ0dFTl9QQVRIICAgICAgICAgICAgPQorCisjIElmIHNldCB0byBZRVMsIHRoZSBpbmhlcml0YW5jZSBhbmQgY29sbGFib3JhdGlvbiBncmFwaHMgd2lsbCBoaWRlCisjIGluaGVyaXRhbmNlIGFuZCB1c2FnZSByZWxhdGlvbnMgaWYgdGhlIHRhcmdldCBpcyB1bmRvY3VtZW50ZWQKKyMgb3IgaXMgbm90IGEgY2xhc3MuCisKK0hJREVfVU5ET0NfUkVMQVRJT05TICAgPSBZRVMKKworIyBJZiB5b3Ugc2V0IHRoZSBIQVZFX0RPVCB0YWcgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGFzc3VtZSB0aGUgZG90IHRvb2wgaXMKKyMgYXZhaWxhYmxlIGZyb20gdGhlIHBhdGguIFRoaXMgdG9vbCBpcyBwYXJ0IG9mIEdyYXBodml6LCBhIGdyYXBoIHZpc3VhbGl6YXRpb24KKyMgdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudCBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbgorIyBoYXZlIG5vIGVmZmVjdCBpZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KQorCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gWUVTCisKKyMgVGhlIERPVF9OVU1fVEhSRUFEUyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkb3QgaW52b2NhdGlvbnMgZG94eWdlbiBpcworIyBhbGxvd2VkIHRvIHJ1biBpbiBwYXJhbGxlbC4gV2hlbiBzZXQgdG8gMCAodGhlIGRlZmF1bHQpIGRveHlnZW4gd2lsbAorIyBiYXNlIHRoaXMgb24gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBZb3UgY2FuIHNldCBpdAorIyBleHBsaWNpdGx5IHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gMCB0byBnZXQgY29udHJvbCBvdmVyIHRoZSBiYWxhbmNlCisjIGJldHdlZW4gQ1BVIGxvYWQgYW5kIHByb2Nlc3Npbmcgc3BlZWQuCisKK0RPVF9OVU1fVEhSRUFEUyAgICAgICAgPSAwCisKKyMgQnkgZGVmYXVsdCBkb3h5Z2VuIHdpbGwgdXNlIHRoZSBIZWx2ZXRpY2EgZm9udCBmb3IgYWxsIGRvdCBmaWxlcyB0aGF0CisjIGRveHlnZW4gZ2VuZXJhdGVzLiBXaGVuIHlvdSB3YW50IGEgZGlmZmVyZW50bHkgbG9va2luZyBmb250IHlvdSBjYW4gc3BlY2lmeQorIyB0aGUgZm9udCBuYW1lIHVzaW5nIERPVF9GT05UTkFNRS4gWW91IG5lZWQgdG8gbWFrZSBzdXJlIGRvdCBpcyBhYmxlIHRvIGZpbmQKKyMgdGhlIGZvbnQsIHdoaWNoIGNhbiBiZSBkb25lIGJ5IHB1dHRpbmcgaXQgaW4gYSBzdGFuZGFyZCBsb2NhdGlvbiBvciBieSBzZXR0aW5nCisjIHRoZSBET1RGT05UUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBieSBzZXR0aW5nIERPVF9GT05UUEFUSCB0byB0aGUKKyMgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZvbnQuCisKK0RPVF9GT05UTkFNRSAgICAgICAgICAgPSBIZWx2ZXRpY2EKKworIyBUaGUgRE9UX0ZPTlRTSVpFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNpemUgb2YgdGhlIGZvbnQgb2YgZG90IGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgc2l6ZSBpcyAxMHB0LgorCitET1RfRk9OVFNJWkUgICAgICAgICAgID0gMTAKKworIyBCeSBkZWZhdWx0IGRveHlnZW4gd2lsbCB0ZWxsIGRvdCB0byB1c2UgdGhlIEhlbHZldGljYSBmb250LgorIyBJZiB5b3Ugc3BlY2lmeSBhIGRpZmZlcmVudCBmb250IHVzaW5nIERPVF9GT05UTkFNRSB5b3UgY2FuIHVzZSBET1RfRk9OVFBBVEggdG8KKyMgc2V0IHRoZSBwYXRoIHdoZXJlIGRvdCBjYW4gZmluZCBpdC4KKworRE9UX0ZPTlRQQVRIICAgICAgICAgICA9CisKKyMgSWYgdGhlIENMQVNTX0dSQVBIIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbgorIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kCisjIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4gU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUKKyMgQ0xBU1NfRElBR1JBTVMgdGFnIHRvIE5PLgorCitDTEFTU19HUkFQSCAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIENPTExBQk9SQVRJT05fR1JBUEggYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQKKyMgaW5kaXJlY3QgaW1wbGVtZW50YXRpb24gZGVwZW5kZW5jaWVzIChpbmhlcml0YW5jZSwgY29udGFpbm1lbnQsIGFuZAorIyBjbGFzcyByZWZlcmVuY2VzIHZhcmlhYmxlcykgb2YgdGhlIGNsYXNzIHdpdGggb3RoZXIgZG9jdW1lbnRlZCBjbGFzc2VzLgorCitDT0xMQUJPUkFUSU9OX0dSQVBIICAgID0gWUVTCisKKyMgSWYgdGhlIEdST1VQX0dSQVBIUyBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBncm91cHMsIHNob3dpbmcgdGhlIGRpcmVjdCBncm91cHMgZGVwZW5kZW5jaWVzCisKK0dST1VQX0dSQVBIUyAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGRpYWdyYW1zIGluIGEgc3R5bGUgc2ltaWxhciB0byB0aGUgT01HJ3MgVW5pZmllZCBNb2RlbGluZworIyBMYW5ndWFnZS4KKworVU1MX0xPT0sgICAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFVNTF9MT09LIHRhZyBpcyBlbmFibGVkLCB0aGUgZmllbGRzIGFuZCBtZXRob2RzIGFyZSBzaG93biBpbnNpZGUKKyMgdGhlIGNsYXNzIG5vZGUuIElmIHRoZXJlIGFyZSBtYW55IGZpZWxkcyBvciBtZXRob2RzIGFuZCBtYW55IG5vZGVzIHRoZQorIyBncmFwaCBtYXkgYmVjb21lIHRvbyBiaWcgdG8gYmUgdXNlZnVsLiBUaGUgVU1MX0xJTUlUX05VTV9GSUVMRFMKKyMgdGhyZXNob2xkIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGZvciBlYWNoIHR5cGUgdG8gbWFrZSB0aGUgc2l6ZSBtb3JlCisjIG1hbmFnZWFibGUuIFNldCB0aGlzIHRvIDAgZm9yIG5vIGxpbWl0LiBOb3RlIHRoYXQgdGhlIHRocmVzaG9sZCBtYXkgYmUKKyMgZXhjZWVkZWQgYnkgNTAlIGJlZm9yZSB0aGUgbGltaXQgaXMgZW5mb3JjZWQuCisKK1VNTF9MSU1JVF9OVU1fRklFTERTICAgPSAxMAorCisjIElmIHNldCB0byBZRVMsIHRoZSBpbmhlcml0YW5jZSBhbmQgY29sbGFib3JhdGlvbiBncmFwaHMgd2lsbCBzaG93IHRoZQorIyByZWxhdGlvbnMgYmV0d2VlbiB0ZW1wbGF0ZXMgYW5kIHRoZWlyIGluc3RhbmNlcy4KKworVEVNUExBVEVfUkVMQVRJT05TICAgICA9IE5PCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVfR1JBUEgsIGFuZCBIQVZFX0RPVAorIyB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZAorIyBmaWxlIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aAorIyBvdGhlciBkb2N1bWVudGVkIGZpbGVzLgorCitJTkNMVURFX0dSQVBIICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVEX0JZX0dSQVBILCBhbmQKKyMgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoCisjIGRvY3VtZW50ZWQgaGVhZGVyIGZpbGUgc2hvd2luZyB0aGUgZG9jdW1lbnRlZCBmaWxlcyB0aGF0IGRpcmVjdGx5IG9yCisjIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuCisKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTF9HUkFQSCBhbmQgSEFWRV9ET1Qgb3B0aW9ucyBhcmUgc2V0IHRvIFlFUyB0aGVuCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNhbGwgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uCisjIG9yIGNsYXNzIG1ldGhvZC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZQorIyB0aGUgdGltZSBvZiBhIHJ1bi4gU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMKKyMgZm9yIHNlbGVjdGVkIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGdyYXBoIGNvbW1hbmQuCisKK0NBTExfR1JBUEggICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQUxMRVJfR1JBUEggYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbgorIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBjYWxsZXIgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uCisjIG9yIGNsYXNzIG1ldGhvZC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZQorIyB0aGUgdGltZSBvZiBhIHJ1bi4gU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbGVyCisjIGdyYXBocyBmb3Igc2VsZWN0ZWQgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZXJncmFwaCBjb21tYW5kLgorCitDQUxMRVJfR1JBUEggICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgR1JBUEhJQ0FMX0hJRVJBUkNIWSBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4KKyMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoaWNhbCBoaWVyYXJjaHkgb2YgYWxsIGNsYXNzZXMgaW5zdGVhZCBvZiBhIHRleHR1YWwgb25lLgorCitHUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCisKKyMgSWYgdGhlIERJUkVDVE9SWV9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUworIyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IHRoZSBkZXBlbmRlbmNpZXMgYSBkaXJlY3RvcnkgaGFzIG9uIG90aGVyIGRpcmVjdG9yaWVzCisjIGluIGEgZ3JhcGhpY2FsIHdheS4gVGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSAjaW5jbHVkZQorIyByZWxhdGlvbnMgYmV0d2VlbiB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLgorCitESVJFQ1RPUllfR1JBUEggICAgICAgID0gWUVTCisKKyMgVGhlIERPVF9JTUFHRV9GT1JNQVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW1hZ2UgZm9ybWF0IG9mIHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gUG9zc2libGUgdmFsdWVzIGFyZSBzdmcsIHBuZywganBnLCBvciBnaWYuCisjIElmIGxlZnQgYmxhbmsgcG5nIHdpbGwgYmUgdXNlZC4gSWYgeW91IGNob29zZSBzdmcgeW91IG5lZWQgdG8gc2V0CisjIEhUTUxfRklMRV9FWFRFTlNJT04gdG8geGh0bWwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgU1ZHIGZpbGVzCisjIHZpc2libGUgaW4gSUUgOSsgKG90aGVyIGJyb3dzZXJzIGRvIG5vdCBoYXZlIHRoaXMgcmVxdWlyZW1lbnQpLgorCitET1RfSU1BR0VfRk9STUFUICAgICAgID0gcG5nCisKKyMgSWYgRE9UX0lNQUdFX0ZPUk1BVCBpcyBzZXQgdG8gc3ZnLCB0aGVuIHRoaXMgb3B0aW9uIGNhbiBiZSBzZXQgdG8gWUVTIHRvCisjIGVuYWJsZSBnZW5lcmF0aW9uIG9mIGludGVyYWN0aXZlIFNWRyBpbWFnZXMgdGhhdCBhbGxvdyB6b29taW5nIGFuZCBwYW5uaW5nLgorIyBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBhIG1vZGVybiBicm93c2VyIG90aGVyIHRoYW4gSW50ZXJuZXQgRXhwbG9yZXIuCisjIFRlc3RlZCBhbmQgd29ya2luZyBhcmUgRmlyZWZveCwgQ2hyb21lLCBTYWZhcmksIGFuZCBPcGVyYS4gRm9yIElFIDkrIHlvdQorIyBuZWVkIHRvIHNldCBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyIHRvIG1ha2UgdGhlIFNWRyBmaWxlcworIyB2aXNpYmxlLiBPbGRlciB2ZXJzaW9ucyBvZiBJRSBkbyBub3QgaGF2ZSBTVkcgc3VwcG9ydC4KKworSU5URVJBQ1RJVkVfU1ZHICAgICAgICA9IE5PCisKKyMgVGhlIHRhZyBET1RfUEFUSCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHdoZXJlIHRoZSBkb3QgdG9vbCBjYW4gYmUKKyMgZm91bmQuIElmIGxlZnQgYmxhbmssIGl0IGlzIGFzc3VtZWQgdGhlIGRvdCB0b29sIGNhbiBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKworRE9UX1BBVEggICAgICAgICAgICAgICA9CisKKyMgVGhlIERPVEZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0CisjIGNvbnRhaW4gZG90IGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlCisjIFxkb3RmaWxlIGNvbW1hbmQpLgorCitET1RGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgTVNDRklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBtc2MgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUKKyMgXG1zY2ZpbGUgY29tbWFuZCkuCisKK01TQ0ZJTEVfRElSUyAgICAgICAgICAgPQorCisjIFRoZSBET1RfR1JBUEhfTUFYX05PREVTIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mCisjIG5vZGVzIHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgZ3JhcGguIElmIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gYSBncmFwaAorIyBiZWNvbWVzIGxhcmdlciB0aGFuIHRoaXMgdmFsdWUsIGRveHlnZW4gd2lsbCB0cnVuY2F0ZSB0aGUgZ3JhcGgsIHdoaWNoIGlzCisjIHZpc3VhbGl6ZWQgYnkgcmVwcmVzZW50aW5nIGEgbm9kZSBhcyBhIHJlZCBib3guIE5vdGUgdGhhdCBkb3h5Z2VuIGlmIHRoZQorIyBudW1iZXIgb2YgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSByb290IG5vZGUgaW4gYSBncmFwaCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuCisjIERPVF9HUkFQSF9NQVhfTk9ERVMgdGhlbiB0aGUgZ3JhcGggd2lsbCBub3QgYmUgc2hvd24gYXQgYWxsLiBBbHNvIG5vdGUKKyMgdGhhdCB0aGUgc2l6ZSBvZiBhIGdyYXBoIGNhbiBiZSBmdXJ0aGVyIHJlc3RyaWN0ZWQgYnkgTUFYX0RPVF9HUkFQSF9ERVBUSC4KKworRE9UX0dSQVBIX01BWF9OT0RFUyAgICA9IDIwMAorCisjIFRoZSBNQVhfRE9UX0dSQVBIX0RFUFRIIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gZGVwdGggb2YgdGhlCisjIGdyYXBocyBnZW5lcmF0ZWQgYnkgZG90LiBBIGRlcHRoIHZhbHVlIG9mIDMgbWVhbnMgdGhhdCBvbmx5IG5vZGVzIHJlYWNoYWJsZQorIyBmcm9tIHRoZSByb290IGJ5IGZvbGxvd2luZyBhIHBhdGggdmlhIGF0IG1vc3QgMyBlZGdlcyB3aWxsIGJlIHNob3duLiBOb2RlcworIyB0aGF0IGxheSBmdXJ0aGVyIGZyb20gdGhlIHJvb3Qgbm9kZSB3aWxsIGJlIG9taXR0ZWQuIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMKKyMgb3B0aW9uIHRvIDEgb3IgMiBtYXkgZ3JlYXRseSByZWR1Y2UgdGhlIGNvbXB1dGF0aW9uIHRpbWUgbmVlZGVkIGZvciBsYXJnZQorIyBjb2RlIGJhc2VzLiBBbHNvIG5vdGUgdGhhdCB0aGUgc2l6ZSBvZiBhIGdyYXBoIGNhbiBiZSBmdXJ0aGVyIHJlc3RyaWN0ZWQgYnkKKyMgRE9UX0dSQVBIX01BWF9OT0RFUy4gVXNpbmcgYSBkZXB0aCBvZiAwIG1lYW5zIG5vIGRlcHRoIHJlc3RyaWN0aW9uLgorCitNQVhfRE9UX0dSQVBIX0RFUFRIICAgID0gMTAwMAorCisjIFNldCB0aGUgRE9UX1RSQU5TUEFSRU5UIHRhZyB0byBZRVMgdG8gZ2VuZXJhdGUgaW1hZ2VzIHdpdGggYSB0cmFuc3BhcmVudAorIyBiYWNrZ3JvdW5kLiBUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJlY2F1c2UgZG90IG9uIFdpbmRvd3MgZG9lcyBub3QKKyMgc2VlbSB0byBzdXBwb3J0IHRoaXMgb3V0IG9mIHRoZSBib3guIFdhcm5pbmc6IERlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gdXNlZCwKKyMgZW5hYmxpbmcgdGhpcyBvcHRpb24gbWF5IGxlYWQgdG8gYmFkbHkgYW50aS1hbGlhc2VkIGxhYmVscyBvbiB0aGUgZWRnZXMgb2YKKyMgYSBncmFwaCAoaS5lLiB0aGV5IGJlY29tZSBoYXJkIHRvIHJlYWQpLgorCitET1RfVFJBTlNQQVJFTlQgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBET1RfTVVMVElfVEFSR0VUUyB0YWcgdG8gWUVTIGFsbG93IGRvdCB0byBnZW5lcmF0ZSBtdWx0aXBsZSBvdXRwdXQKKyMgZmlsZXMgaW4gb25lIHJ1biAoaS5lLiBtdWx0aXBsZSAtbyBhbmQgLVQgb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lKS4gVGhpcworIyBtYWtlcyBkb3QgcnVuIGZhc3RlciwgYnV0IHNpbmNlIG9ubHkgbmV3ZXIgdmVyc2lvbnMgb2YgZG90ICg+MS44LjEwKQorIyBzdXBwb3J0IHRoaXMsIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCitET1RfTVVMVElfVEFSR0VUUyAgICAgID0gTk8KKworIyBJZiB0aGUgR0VORVJBVEVfTEVHRU5EIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsCisjIGdlbmVyYXRlIGEgbGVnZW5kIHBhZ2UgZXhwbGFpbmluZyB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBib3hlcyBhbmQKKyMgYXJyb3dzIGluIHRoZSBkb3QgZ2VuZXJhdGVkIGdyYXBocy4KKworR0VORVJBVEVfTEVHRU5EICAgICAgICA9IFlFUworCisjIElmIHRoZSBET1RfQ0xFQU5VUCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbAorIyByZW1vdmUgdGhlIGludGVybWVkaWF0ZSBkb3QgZmlsZXMgdGhhdCBhcmUgdXNlZCB0byBnZW5lcmF0ZQorIyB0aGUgdmFyaW91cyBncmFwaHMuCisKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1YTM1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTEgQEAKK29wdGlvbihJTlNUQUxMX01CRURUTFNfSEVBREVSUyAiSW5zdGFsbCBtYmVkIFRMUyBoZWFkZXJzLiIgT04pCisKK2lmKElOU1RBTExfTUJFRFRMU19IRUFERVJTKQorCisgICAgZmlsZShHTE9CIGhlYWRlcnMgIm1iZWR0bHMvKi5oIikKKworICAgIGluc3RhbGwoRklMRVMgJHtoZWFkZXJzfQorICAgICAgICBERVNUSU5BVElPTiBpbmNsdWRlL21iZWR0bHMKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBHUk9VUF9SRUFEIFdPUkxEX1JFQUQpCisKK2VuZGlmKElOU1RBTExfTUJFRFRMU19IRUFERVJTKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hZXMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2ZTgyNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYWVzLmgKQEAgLTAsMCArMSwyOTcgQEAKKy8qKgorICogXGZpbGUgYWVzLmgKKyAqCisgKiBcYnJpZWYgQUVTIGJsb2NrIGNpcGhlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0FFU19ICisjZGVmaW5lIE1CRURUTFNfQUVTX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyogcGFkbG9jay5jIGFuZCBhZXNuaS5jIHJlbHkgb24gdGhlc2UgdmFsdWVzISAqLworI2RlZmluZSBNQkVEVExTX0FFU19FTkNSWVBUICAgICAxCisjZGVmaW5lIE1CRURUTFNfQUVTX0RFQ1JZUFQgICAgIDAKKworI2RlZmluZSBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIICAgICAgICAgICAgICAgIC0weDAwMjAgIC8qKjwgSW52YWxpZCBrZXkgbGVuZ3RoLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEggICAgICAgICAgICAgIC0weDAwMjIgIC8qKjwgSW52YWxpZCBkYXRhIGlucHV0IGxlbmd0aC4gKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQUVTX0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQUVTIGNvbnRleHQgc3RydWN0dXJlCisgKgorICogXG5vdGUgICAgICAgICAgIGJ1ZiBpcyBhYmxlIHRvIGhvbGQgMzIgZXh0cmEgYnl0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkOgorICogICAgICAgICAgICAgICAgIC0gZm9yIGFsaWdubWVudCBwdXJwb3NlcyBpZiBWSUEgcGFkbG9jayBpcyB1c2VkLCBhbmQvb3IKKyAqICAgICAgICAgICAgICAgICAtIHRvIHNpbXBsaWZ5IGtleSBleHBhbnNpb24gaW4gdGhlIDI1Ni1iaXQgY2FzZSBieQorICogICAgICAgICAgICAgICAgIGdlbmVyYXRpbmcgYW4gZXh0cmEgcm91bmQga2V5CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IG5yOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIG51bWJlciBvZiByb3VuZHMgICovCisgICAgdWludDMyX3QgKnJrOyAgICAgICAgICAgICAgIC8qITwgIEFFUyByb3VuZCBrZXlzICAgICovCisgICAgdWludDMyX3QgYnVmWzY4XTsgICAgICAgICAgIC8qITwgIHVuYWxpZ25lZCBkYXRhICAgICovCit9CittYmVkdGxzX2Flc19jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIEFFUyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNfaW5pdCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIEFFUyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX2Flc19mcmVlKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQUVTIGtleSBzY2hlZHVsZSAoZW5jcnlwdGlvbikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQUVTIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICBlbmNyeXB0aW9uIGtleQorICogXHBhcmFtIGtleWJpdHMgIG11c3QgYmUgMTI4LCAxOTIgb3IgMjU2CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUyBrZXkgc2NoZWR1bGUgKGRlY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgZGVjcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICBtdXN0IGJlIDEyOCwgMTkyIG9yIDI1NgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgKKyAqLworaW50IG1iZWR0bHNfYWVzX3NldGtleV9kZWMoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGlucHV0ICAgIDE2LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICAxNi1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUy1DQkMgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICogICAgICAgICAgICAgICAgIExlbmd0aCBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sKKyAqICAgICAgICAgICAgICAgICBzaXplICgxNiBieXRlcykKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVXBvbiBleGl0LCB0aGUgY29udGVudCBvZiB0aGUgSVYgaXMgdXBkYXRlZCBzbyB0aGF0IHlvdSBjYW4KKyAqICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiBzYW1lIGZ1bmN0aW9uIGFnYWluIG9uIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgICAgICAgICBibG9jayhzKSBvZiBkYXRhIGFuZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGFzIGlmIGl0IHdhcworICogICAgICAgICAgICAgICAgIGVuY3J5cHRlZCBpbiBvbmUgY2FsbC4gVGhpcyBhbGxvd3MgYSAic3RyZWFtaW5nIiB1c2FnZS4KKyAqICAgICAgICAgICAgICAgICBJZiBvbiB0aGUgb3RoZXIgaGFuZCB5b3UgbmVlZCB0byByZXRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgICAgICAgIElWLCB5b3Ugc2hvdWxkIGVpdGhlciBzYXZlIGl0IG1hbnVhbGx5IG9yIHVzZSB0aGUgY2lwaGVyCisgKiAgICAgICAgICAgICAgICAgbW9kdWxlIGluc3RlYWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19BRVNfRU5DUllQVCBvciBNQkVEVExTX0FFU19ERUNSWVBUCisgKiBccGFyYW0gbGVuZ3RoICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXYgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciBob2xkaW5nIHRoZSBvdXRwdXQgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19hZXNfY3J5cHRfY2JjKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQUVTLUNGQjEyOCBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLgorICoKKyAqIE5vdGU6IER1ZSB0byB0aGUgbmF0dXJlIG9mIENGQiB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBrZXkgc2NoZWR1bGUgZm9yCisgKiBib3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uIFNvIGEgY29udGV4dCBpbml0aWFsaXplZCB3aXRoCisgKiBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCkgZm9yIGJvdGggTUJFRFRMU19BRVNfRU5DUllQVCBhbmQgTUJFRFRMU19BRVNfREVDUllQVC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVXBvbiBleGl0LCB0aGUgY29udGVudCBvZiB0aGUgSVYgaXMgdXBkYXRlZCBzbyB0aGF0IHlvdSBjYW4KKyAqICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiBzYW1lIGZ1bmN0aW9uIGFnYWluIG9uIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgICAgICAgICBibG9jayhzKSBvZiBkYXRhIGFuZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGFzIGlmIGl0IHdhcworICogICAgICAgICAgICAgICAgIGVuY3J5cHRlZCBpbiBvbmUgY2FsbC4gVGhpcyBhbGxvd3MgYSAic3RyZWFtaW5nIiB1c2FnZS4KKyAqICAgICAgICAgICAgICAgICBJZiBvbiB0aGUgb3RoZXIgaGFuZCB5b3UgbmVlZCB0byByZXRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgICAgICAgIElWLCB5b3Ugc2hvdWxkIGVpdGhlciBzYXZlIGl0IG1hbnVhbGx5IG9yIHVzZSB0aGUgY2lwaGVyCisgKiAgICAgICAgICAgICAgICAgbW9kdWxlIGluc3RlYWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19BRVNfRU5DUllQVCBvciBNQkVEVExTX0FFU19ERUNSWVBUCisgKiBccGFyYW0gbGVuZ3RoICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXZfb2ZmICAgb2Zmc2V0IGluIElWICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKml2X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQUVTLUNGQjggYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4KKyAqCisgKiBOb3RlOiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBDRkIgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUga2V5IHNjaGVkdWxlIGZvcgorICogYm90aCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLiBTbyBhIGNvbnRleHQgaW5pdGlhbGl6ZWQgd2l0aAorICogbWJlZHRsc19hZXNfc2V0a2V5X2VuYygpIGZvciBib3RoIE1CRURUTFNfQUVTX0VOQ1JZUFQgYW5kIE1CRURUTFNfQUVTX0RFQ1JZUFQuCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQUVTX0VOQ1JZUFQgb3IgTUJFRFRMU19BRVNfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2Flc19jcnlwdF9jZmI4KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEFFUy1DVFIgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFdhcm5pbmc6IFlvdSBoYXZlIHRvIGtlZXAgdGhlIG1heGltdW0gdXNlIG9mIHlvdXIgY291bnRlciBpbiBtaW5kIQorICoKKyAqIE5vdGU6IER1ZSB0byB0aGUgbmF0dXJlIG9mIENUUiB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBrZXkgc2NoZWR1bGUgZm9yCisgKiBib3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uIFNvIGEgY29udGV4dCBpbml0aWFsaXplZCB3aXRoCisgKiBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCkgZm9yIGJvdGggTUJFRFRMU19BRVNfRU5DUllQVCBhbmQgTUJFRFRMU19BRVNfREVDUllQVC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBBRVMgY29udGV4dAorICogXHBhcmFtIGxlbmd0aCAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorICogXHBhcmFtIG5jX29mZiAgICAgICAgVGhlIG9mZnNldCBpbiB0aGUgY3VycmVudCBzdHJlYW1fYmxvY2sgKGZvciByZXN1bWluZworICogICAgICAgICAgICAgICAgICAgICAgd2l0aGluIGN1cnJlbnQgY2lwaGVyIHN0cmVhbSkuIFRoZSBvZmZzZXQgcG9pbnRlciB0bworICogICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIDAgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyZWFtLgorICogXHBhcmFtIG5vbmNlX2NvdW50ZXIgVGhlIDEyOC1iaXQgbm9uY2UgYW5kIGNvdW50ZXIuCisgKiBccGFyYW0gc3RyZWFtX2Jsb2NrICBUaGUgc2F2ZWQgc3RyZWFtLWJsb2NrIGZvciByZXN1bWluZy4gSXMgb3ZlcndyaXR0ZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBmdW5jdGlvbi4KKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIFRoZSBpbnB1dCBkYXRhIHN0cmVhbQorICogXHBhcmFtIG91dHB1dCAgICAgICAgVGhlIG91dHB1dCBkYXRhIHN0cmVhbQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2N0ciggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBub25jZV9jb3VudGVyWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fYmxvY2tbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEludGVybmFsIEFFUyBibG9jayBlbmNyeXB0aW9uIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgIChPbmx5IGV4cG9zZWQgdG8gYWxsb3cgb3ZlcnJpZGluZyBpdCwKKyAqICAgICAgICAgICAgICAgICAgc2VlIE1CRURUTFNfQUVTX0VOQ1JZUFRfQUxUKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQUVTIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICAgUGxhaW50ZXh0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgIE91dHB1dCAoY2lwaGVydGV4dCkgYmxvY2sKKyAqLwordm9pZCBtYmVkdGxzX2Flc19lbmNyeXB0KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEludGVybmFsIEFFUyBibG9jayBkZWNyeXB0aW9uIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgIChPbmx5IGV4cG9zZWQgdG8gYWxsb3cgb3ZlcnJpZGluZyBpdCwKKyAqICAgICAgICAgICAgICAgICAgc2VlIE1CRURUTFNfQUVTX0RFQ1JZUFRfQUxUKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQUVTIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICAgQ2lwaGVydGV4dCBibG9jaworICogXHBhcmFtIG91dHB1dCAgICBPdXRwdXQgKHBsYWludGV4dCkgYmxvY2sKKyAqLwordm9pZCBtYmVkdGxzX2Flc19kZWNyeXB0KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfQUVTX0FMVCAqLworI2luY2x1ZGUgImFlc19hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19hZXNfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogYWVzLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYWVzbmkuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYWVzbmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI3ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hZXNuaS5oCkBAIC0wLDAgKzEsMTExIEBACisvKioKKyAqIFxmaWxlIGFlc25pLmgKKyAqCisgKiBcYnJpZWYgQUVTLU5JIGZvciBoYXJkd2FyZSBBRVMgYWNjZWxlcmF0aW9uIG9uIHNvbWUgSW50ZWwgcHJvY2Vzc29ycworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0FFU05JX0gKKyNkZWZpbmUgTUJFRFRMU19BRVNOSV9ICisKKyNpbmNsdWRlICJhZXMuaCIKKworI2RlZmluZSBNQkVEVExTX0FFU05JX0FFUyAgICAgIDB4MDIwMDAwMDB1CisjZGVmaW5lIE1CRURUTFNfQUVTTklfQ0xNVUwgICAgMHgwMDAwMDAwMnUKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgIFwKKyAgICAoIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICkgICAmJiAgXAorICAgICEgZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2XzY0KQorI2RlZmluZSBNQkVEVExTX0hBVkVfWDg2XzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBBRVMtTkkgZmVhdHVyZXMgZGV0ZWN0aW9uIHJvdXRpbmUKKyAqCisgKiBccGFyYW0gd2hhdCAgICAgVGhlIGZlYXR1cmUgdG8gZGV0ZWN0CisgKiAgICAgICAgICAgICAgICAgKE1CRURUTFNfQUVTTklfQUVTIG9yIE1CRURUTFNfQUVTTklfQ0xNVUwpCisgKgorICogXHJldHVybiAgICAgICAgIDEgaWYgQ1BVIGhhcyBzdXBwb3J0IGZvciB0aGUgZmVhdHVyZSwgMCBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQoIHVuc2lnbmVkIGludCB3aGF0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFFUy1OSSBBRVMtRUNCIGJsb2NrIGVuKGRlKWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19BRVNfRU5DUllQVCBvciBNQkVEVExTX0FFU19ERUNSWVBUCisgKiBccGFyYW0gaW5wdXQgICAgMTYtYnl0ZSBpbnB1dCBibG9jaworICogXHBhcmFtIG91dHB1dCAgIDE2LWJ5dGUgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgb24gc3VjY2VzcyAoY2Fubm90IGZhaWwpCisgKi8KK2ludCBtYmVkdGxzX2Flc25pX2NyeXB0X2VjYiggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHQ00gbXVsdGlwbGljYXRpb246IGMgPSBhICogYiBpbiBHRigyXjEyOCkKKyAqCisgKiBccGFyYW0gYyAgICAgICAgUmVzdWx0CisgKiBccGFyYW0gYSAgICAgICAgRmlyc3Qgb3BlcmFuZAorICogXHBhcmFtIGIgICAgICAgIFNlY29uZCBvcGVyYW5kCisgKgorICogXG5vdGUgICAgICAgICAgIEJvdGggb3BlcmFuZHMgYW5kIHJlc3VsdCBhcmUgYml0IHN0cmluZ3MgaW50ZXJwcmV0ZWQgYXMKKyAqICAgICAgICAgICAgICAgICBlbGVtZW50cyBvZiBHRigyXjEyOCkgYXMgcGVyIHRoZSBHQ00gc3BlYy4KKyAqLwordm9pZCBtYmVkdGxzX2Flc25pX2djbV9tdWx0KCB1bnNpZ25lZCBjaGFyIGNbMTZdLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBhWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYlsxNl0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvbXB1dGUgZGVjcnlwdGlvbiByb3VuZCBrZXlzIGZyb20gZW5jcnlwdGlvbiByb3VuZCBrZXlzCisgKgorICogXHBhcmFtIGludmtleSAgICBSb3VuZCBrZXlzIGZvciB0aGUgZXF1aXZhbGVudCBpbnZlcnNlIGNpcGhlcgorICogXHBhcmFtIGZ3ZGtleSAgICBPcmlnaW5hbCByb3VuZCBrZXlzIChmb3IgZW5jcnlwdGlvbikKKyAqIFxwYXJhbSBuciAgICAgICAgTnVtYmVyIG9mIHJvdW5kcyAodGhhdCBpcywgbnVtYmVyIG9mIHJvdW5kIGtleXMgbWludXMgb25lKQorICovCit2b2lkIG1iZWR0bHNfYWVzbmlfaW52ZXJzZV9rZXkoIHVuc2lnbmVkIGNoYXIgKmludmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ3ZGtleSwgaW50IG5yICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBQZXJmb3JtIGtleSBleHBhbnNpb24gKGZvciBlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSByayAgICAgICAgRGVzdGluYXRpb24gYnVmZmVyIHdoZXJlIHRoZSByb3VuZCBrZXlzIGFyZSB3cml0dGVuCisgKiBccGFyYW0ga2V5ICAgICAgIEVuY3J5cHRpb24ga2V5CisgKiBccGFyYW0gYml0cyAgICAgIEtleSBzaXplIGluIGJpdHMgKG11c3QgYmUgMTI4LCAxOTIgb3IgMjU2KQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Flc25pX3NldGtleV9lbmMoIHVuc2lnbmVkIGNoYXIgKnJrLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYml0cyApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1g4Nl82NCAqLworCisjZW5kaWYgLyogTUJFRFRMU19BRVNOSV9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FyYzQuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYXJjNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYzUzOTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FyYzQuaApAQCAtMCwwICsxLDExMyBAQAorLyoqCisgKiBcZmlsZSBhcmM0LmgKKyAqCisgKiBcYnJpZWYgVGhlIEFSQ0ZPVVIgc3RyZWFtIGNpcGhlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0FSQzRfSAorI2RlZmluZSBNQkVEVExTX0FSQzRfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19BUkM0X0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQVJDNCBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IHBlcm11dGF0aW9uIGluZGV4ICovCisgICAgaW50IHk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgcGVybXV0YXRpb24gaW5kZXggKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1bMjU2XTsgICAgICAgLyohPCBwZXJtdXRhdGlvbiB0YWJsZSAqLworfQorbWJlZHRsc19hcmM0X2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgQVJDNCBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIEFSQzQgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfYXJjNF9pbml0KCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIEFSQzQgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBBUkM0IGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfYXJjNF9mcmVlKCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEFSQzQga2V5IHNjaGVkdWxlCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFSQzQgY29udGV4dCB0byBiZSBzZXR1cAorICogXHBhcmFtIGtleSAgICAgIHRoZSBzZWNyZXQga2V5CisgKiBccGFyYW0ga2V5bGVuICAgbGVuZ3RoIG9mIHRoZSBrZXksIGluIGJ5dGVzCisgKi8KK3ZvaWQgbWJlZHRsc19hcmM0X3NldHVwKCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQVJDNCBjaXBoZXIgZnVuY3Rpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQVJDNCBjb250ZXh0CisgKiBccGFyYW0gbGVuZ3RoICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgZm9yIHRoZSBvdXRwdXQgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYXJjNF9jcnlwdCggbWJlZHRsc19hcmM0X2NvbnRleHQgKmN0eCwgc2l6ZV90IGxlbmd0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX0FSQzRfQUxUICovCisjaW5jbHVkZSAiYXJjNF9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfYXJjNF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBhcmM0LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYXNuMS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9hc24xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyODMyYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYXNuMS5oCkBAIC0wLDAgKzEsMzQyIEBACisvKioKKyAqIFxmaWxlIGFzbjEuaAorICoKKyAqIFxicmllZiBHZW5lcmljIEFTTi4xIHBhcnNpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19BU04xX0gKKyNkZWZpbmUgTUJFRFRMU19BU04xX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNlbmRpZgorCisvKioKKyAqIFxhZGR0b2dyb3VwIGFzbjFfbW9kdWxlCisgKiBceworICovCisKKy8qKgorICogXG5hbWUgQVNOMSBFcnJvciBjb2RlcworICogVGhlc2UgZXJyb3IgY29kZXMgYXJlIE9SJ2VkIHRvIFg1MDkgZXJyb3IgY29kZXMgZm9yCisgKiBoaWdoZXIgZXJyb3IgZ3JhbnVsYXJpdHkuCisgKiBBU04xIGlzIGEgc3RhbmRhcmQgdG8gc3BlY2lmeSBkYXRhIHN0cnVjdHVyZXMuCisgKiBceworICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgICAgICAgICAgICAgICAgICAgICAgLTB4MDA2MCAgLyoqPCBPdXQgb2YgZGF0YSB3aGVuIHBhcnNpbmcgYW4gQVNOMSBkYXRhIHN0cnVjdHVyZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyAgICAgICAgICAgICAgICAgICAtMHgwMDYyICAvKio8IEFTTjEgdGFnIHdhcyBvZiBhbiB1bmV4cGVjdGVkIHZhbHVlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICAgICAgICAgICAgICAgICAgIC0weDAwNjQgIC8qKjwgRXJyb3Igd2hlbiB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb3IgaW52YWxpZCBsZW5ndGguICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICAgICAgICAgICAgICAgICAgLTB4MDA2NiAgLyoqPCBBY3R1YWwgbGVuZ3RoIGRpZmZlcnMgZnJvbSBleHBlY3RlZCBsZW5ndGguICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBICAgICAgICAgICAgICAgICAgICAgLTB4MDA2OCAgLyoqPCBEYXRhIGlzIGludmFsaWQuIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQVNOMV9BTExPQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAtMHgwMDZBICAvKio8IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworI2RlZmluZSBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgICAgICAgICAgICAgICAgICAgIC0weDAwNkMgIC8qKjwgQnVmZmVyIHRvbyBzbWFsbCB3aGVuIHdyaXRpbmcgQVNOLjEgZGF0YSBzdHJ1Y3R1cmUuICovCisKKy8qIFx9IG5hbWUgKi8KKworLyoqCisgKiBcbmFtZSBERVIgY29uc3RhbnRzCisgKiBUaGVzZSBjb25zdGFudHMgY29tcGx5IHdpdGggREVSIGVuY29kZWQgdGhlIEFOUzEgdHlwZSB0YWdzLgorICogREVSIGVuY29kaW5nIHVzZXMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisgKiBBbiBleGFtcGxlIERFUiBzZXF1ZW5jZSBpczpcbgorICogLSAweDAyIC0tIHRhZyBpbmRpY2F0aW5nIElOVEVHRVIKKyAqIC0gMHgwMSAtLSBsZW5ndGggaW4gb2N0ZXRzCisgKiAtIDB4MDUgLS0gdmFsdWUKKyAqIFN1Y2ggc2VxdWVuY2VzIGFyZSB0eXBpY2FsbHkgcmVhZCBpbnRvIFxjIDo6bWJlZHRsc194NTA5X2J1Zi4KKyAqIFx7CisgKi8KKyNkZWZpbmUgTUJFRFRMU19BU04xX0JPT0xFQU4gICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTUJFRFRMU19BU04xX0lOVEVHRVIgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUJFRFRMU19BU04xX05VTEwgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgTUJFRFRMU19BU04xX09JRCAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgTUJFRFRMU19BU04xX1VURjhfU1RSSU5HICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgTUJFRFRMU19BU04xX1NFUVVFTkNFICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgTUJFRFRMU19BU04xX1NFVCAgICAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BSSU5UQUJMRV9TVFJJTkcgICAgICAgIDB4MTMKKyNkZWZpbmUgTUJFRFRMU19BU04xX1Q2MV9TVFJJTkcgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgTUJFRFRMU19BU04xX0lBNV9TVFJJTkcgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgTUJFRFRMU19BU04xX1VUQ19USU1FICAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgTUJFRFRMU19BU04xX0dFTkVSQUxJWkVEX1RJTUUgICAgICAgIDB4MTgKKyNkZWZpbmUgTUJFRFRMU19BU04xX1VOSVZFUlNBTF9TVFJJTkcgICAgICAgIDB4MUMKKyNkZWZpbmUgTUJFRFRMU19BU04xX0JNUF9TVFJJTkcgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgTUJFRFRMU19BU04xX1BSSU1JVElWRSAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgICAgICAgIDB4ODAKKy8qIFx9IG5hbWUgKi8KKy8qIFx9IGFkZHRvZ3JvdXAgYXNuMV9tb2R1bGUgKi8KKworLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSBzdHJpbmcsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIFxcMCAqLworI2RlZmluZSBNQkVEVExTX09JRF9TSVpFKHgpIChzaXplb2YoeCkgLSAxKQorCisvKioKKyAqIENvbXBhcmVzIGFuIG1iZWR0bHNfYXNuMV9idWYgc3RydWN0dXJlIHRvIGEgcmVmZXJlbmNlIE9JRC4KKyAqCisgKiBPbmx5IHdvcmtzIGZvciAnZGVmaW5lZCcgb2lkX3N0ciB2YWx1ZXMgKE1CRURUTFNfT0lEX0hNQUNfU0hBMSksIHlvdSBjYW5ub3QgdXNlIGEKKyAqICd1bnNpZ25lZCBjaGFyICpvaWQnIGhlcmUhCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQ01QKG9pZF9zdHIsIG9pZF9idWYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICggKCBNQkVEVExTX09JRF9TSVpFKG9pZF9zdHIpICE9IChvaWRfYnVmKS0+bGVuICkgfHwgICAgICAgICAgICAgICAgXAorICAgICAgICAgIG1lbWNtcCggKG9pZF9zdHIpLCAob2lkX2J1ZiktPnAsIChvaWRfYnVmKS0+bGVuKSAhPSAwICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIEZ1bmN0aW9ucyB0byBwYXJzZSBBU04uMSBkYXRhIHN0cnVjdHVyZXMKKyAqIFx7CisgKi8KKworLyoqCisgKiBUeXBlLWxlbmd0aC12YWx1ZSBzdHJ1Y3R1cmUgdGhhdCBhbGxvd3MgZm9yIEFTTjEgdXNpbmcgREVSLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2FzbjFfYnVmCit7CisgICAgaW50IHRhZzsgICAgICAgICAgICAgICAgLyoqPCBBU04xIHR5cGUsIGUuZy4gTUJFRFRMU19BU04xX1VURjhfU1RSSU5HLiAqLworICAgIHNpemVfdCBsZW47ICAgICAgICAgICAgIC8qKjwgQVNOMSBsZW5ndGgsIGluIG9jdGV0cy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyICpwOyAgICAgICAvKio8IEFTTjEgZGF0YSwgZS5nLiBpbiBBU0NJSS4gKi8KK30KK21iZWR0bHNfYXNuMV9idWY7CisKKy8qKgorICogQ29udGFpbmVyIGZvciBBU04xIGJpdCBzdHJpbmdzLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2FzbjFfYml0c3RyaW5nCit7CisgICAgc2l6ZV90IGxlbjsgICAgICAgICAgICAgICAgIC8qKjwgQVNOMSBsZW5ndGgsIGluIG9jdGV0cy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIHVudXNlZF9iaXRzOyAgLyoqPCBOdW1iZXIgb2YgdW51c2VkIGJpdHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCisgICAgdW5zaWduZWQgY2hhciAqcDsgICAgICAgICAgIC8qKjwgUmF3IEFTTjEgZGF0YSBmb3IgdGhlIGJpdCBzdHJpbmcgKi8KK30KK21iZWR0bHNfYXNuMV9iaXRzdHJpbmc7CisKKy8qKgorICogQ29udGFpbmVyIGZvciBhIHNlcXVlbmNlIG9mIEFTTi4xIGl0ZW1zCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfYXNuMV9zZXF1ZW5jZQoreworICAgIG1iZWR0bHNfYXNuMV9idWYgYnVmOyAgICAgICAgICAgICAgICAgICAvKio8IEJ1ZmZlciBjb250YWluaW5nIHRoZSBnaXZlbiBBU04uMSBpdGVtLiAqLworICAgIHN0cnVjdCBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgKm5leHQ7ICAgIC8qKjwgVGhlIG5leHQgZW50cnkgaW4gdGhlIHNlcXVlbmNlLiAqLworfQorbWJlZHRsc19hc24xX3NlcXVlbmNlOworCisvKioKKyAqIENvbnRhaW5lciBmb3IgYSBzZXF1ZW5jZSBvciBsaXN0IG9mICduYW1lZCcgQVNOLjEgZGF0YSBpdGVtcworICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YQoreworICAgIG1iZWR0bHNfYXNuMV9idWYgb2lkOyAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBvYmplY3QgaWRlbnRpZmllci4gKi8KKyAgICBtYmVkdGxzX2FzbjFfYnVmIHZhbDsgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgbmFtZWQgdmFsdWUuICovCisgICAgc3RydWN0IG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpuZXh0OyAgLyoqPCBUaGUgbmV4dCBlbnRyeSBpbiB0aGUgc2VxdWVuY2UuICovCisgICAgdW5zaWduZWQgY2hhciBuZXh0X21lcmdlZDsgICAgICAvKio8IE1lcmdlIG5leHQgaXRlbSBpbnRvIHRoZSBjdXJyZW50IG9uZT8gKi8KK30KK21iZWR0bHNfYXNuMV9uYW1lZF9kYXRhOworCisvKioKKyAqIFxicmllZiAgICAgICBHZXQgdGhlIGxlbmd0aCBvZiBhbiBBU04uMSBlbGVtZW50LgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBsZW5ndGguCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gbGVuICAgVGhlIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwsIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgb24gcmVhY2hpbmcKKyAqICAgICAgICAgICAgICBlbmQgb2YgZGF0YSwgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCBpZiBsZW5ndGggaXMKKyAqICAgICAgICAgICAgICB1bnBhcnNlYWJsZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfbGVuKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIEdldCB0aGUgdGFnIGFuZCBsZW5ndGggb2YgdGhlIHRhZy4gQ2hlY2sgZm9yIHRoZSByZXF1ZXN0ZWQgdGFnLgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSB0YWcgYW5kIGxlbmd0aC4KKyAqCisgKiBccGFyYW0gcCAgICAgVGhlIHBvc2l0aW9uIGluIHRoZSBBU04uMSBkYXRhCisgKiBccGFyYW0gZW5kICAgRW5kIG9mIGRhdGEKKyAqIFxwYXJhbSBsZW4gICBUaGUgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGxlbmd0aAorICogXHBhcmFtIHRhZyAgIFRoZSBleHBlY3RlZCB0YWcKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsLCBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHIGlmIHRhZyBkaWQKKyAqICAgICAgICAgICAgICBub3QgbWF0Y2ggcmVxdWVzdGVkIHRhZywgb3IgYW5vdGhlciBzcGVjaWZpYyBBU04uMSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19hc24xX2dldF90YWcoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgc2l6ZV90ICpsZW4sIGludCB0YWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgUmV0cmlldmUgYSBib29sZWFuIEFTTi4xIHRhZyBhbmQgaXRzIHZhbHVlLgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBmdWxsIHRhZy4KKyAqCisgKiBccGFyYW0gcCAgICAgVGhlIHBvc2l0aW9uIGluIHRoZSBBU04uMSBkYXRhCisgKiBccGFyYW0gZW5kICAgRW5kIG9mIGRhdGEKKyAqIFxwYXJhbSB2YWwgICBUaGUgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHZhbHVlCisgKgorICogXHJldHVybiAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIHNwZWNpZmljIEFTTi4xIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2Jvb2woIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICBpbnQgKnZhbCApOworCisvKioKKyAqIFxicmllZiAgICAgICBSZXRyaWV2ZSBhbiBpbnRlZ2VyIEFTTi4xIHRhZyBhbmQgaXRzIHZhbHVlLgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBmdWxsIHRhZy4KKyAqCisgKiBccGFyYW0gcCAgICAgVGhlIHBvc2l0aW9uIGluIHRoZSBBU04uMSBkYXRhCisgKiBccGFyYW0gZW5kICAgRW5kIG9mIGRhdGEKKyAqIFxwYXJhbSB2YWwgICBUaGUgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHZhbHVlCisgKgorICogXHJldHVybiAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIHNwZWNpZmljIEFTTi4xIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2ludCggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBpbnQgKnZhbCApOworCisvKioKKyAqIFxicmllZiAgICAgICBSZXRyaWV2ZSBhIGJpdHN0cmluZyBBU04uMSB0YWcgYW5kIGl0cyB2YWx1ZS4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbCB0YWcuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gYnMgICAgVGhlIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmcoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfYml0c3RyaW5nICpicyk7CisKKy8qKgorICogXGJyaWVmICAgICAgIFJldHJpZXZlIGEgYml0c3RyaW5nIEFTTi4xIHRhZyB3aXRob3V0IHVudXNlZCBiaXRzIGFuZCBpdHMKKyAqICAgICAgICAgICAgICB2YWx1ZS4KKyAqICAgICAgICAgICAgICBVcGRhdGVzIHRoZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJpdC9vY3RldCBzdHJpbmcuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gbGVuICAgTGVuZ3RoIG9mIHRoZSBhY3R1YWwgYml0L29jdGVjdCBzdHJpbmcgaW4gYnl0ZXMKKyAqCisgKiBccmV0dXJuICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgQVNOLjEgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nX251bGwoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIFBhcnNlcyBhbmQgc3BsaXRzIGFuIEFTTi4xICJTRVFVRU5DRSBPRiA8dGFnPiIKKyAqICAgICAgICAgICAgICBVcGRhdGVkIHRoZSBwb2ludGVyIHRvIGltbWVkaWF0ZWx5IGJlaGluZCB0aGUgZnVsbCBzZXF1ZW5jZSB0YWcuCisgKgorICogXHBhcmFtIHAgICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgIEVuZCBvZiBkYXRhCisgKiBccGFyYW0gY3VyICAgRmlyc3QgdmFyaWFibGUgaW4gdGhlIGNoYWluIHRvIGZpbGwKKyAqIFxwYXJhbSB0YWcgICBUeXBlIG9mIHNlcXVlbmNlCisgKgorICogXHJldHVybiAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIHNwZWNpZmljIEFTTi4xIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X3NlcXVlbmNlX29mKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgKmN1ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZyk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisvKioKKyAqIFxicmllZiAgICAgICBSZXRyaWV2ZSBhIE1QSSB2YWx1ZSBmcm9tIGFuIGludGVnZXIgQVNOLjEgdGFnLgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBmdWxsIHRhZy4KKyAqCisgKiBccGFyYW0gcCAgICAgVGhlIHBvc2l0aW9uIGluIHRoZSBBU04uMSBkYXRhCisgKiBccGFyYW0gZW5kICAgRW5kIG9mIGRhdGEKKyAqIFxwYXJhbSBYICAgICBUaGUgTVBJIHRoYXQgd2lsbCByZWNlaXZlIHRoZSB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBvciBNUEkgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICpYICk7CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICBSZXRyaWV2ZSBhbiBBbGdvcml0aG1JZGVudGlmaWVyIEFTTi4xIHNlcXVlbmNlLgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBmdWxsCisgKiAgICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllci4KKyAqCisgKiBccGFyYW0gcCAgICAgVGhlIHBvc2l0aW9uIGluIHRoZSBBU04uMSBkYXRhCisgKiBccGFyYW0gZW5kICAgRW5kIG9mIGRhdGEKKyAqIFxwYXJhbSBhbGcgICBUaGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIE9JRAorICogXHBhcmFtIHBhcmFtcyBUaGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhcmFtcyAoaWYgYW55KQorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBvciBNUEkgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfYWxnKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9idWYgKmFsZywgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIFJldHJpZXZlIGFuIEFsZ29yaXRobUlkZW50aWZpZXIgQVNOLjEgc2VxdWVuY2Ugd2l0aCBOVUxMIG9yIG5vCisgKiAgICAgICAgICAgICAgcGFyYW1zLgorICogICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIHBvaW50ZXIgdG8gaW1tZWRpYXRlbHkgYmVoaW5kIHRoZSBmdWxsCisgKiAgICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllci4KKyAqCisgKiBccGFyYW0gcCAgICAgVGhlIHBvc2l0aW9uIGluIHRoZSBBU04uMSBkYXRhCisgKiBccGFyYW0gZW5kICAgRW5kIG9mIGRhdGEKKyAqIFxwYXJhbSBhbGcgICBUaGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIE9JRAorICoKKyAqIFxyZXR1cm4gICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBBU04uMSBvciBNUEkgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfYWxnX251bGwoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9idWYgKmFsZyApOworCisvKioKKyAqIFxicmllZiAgICAgICBGaW5kIGEgc3BlY2lmaWMgbmFtZWRfZGF0YSBlbnRyeSBpbiBhIHNlcXVlbmNlIG9yIGxpc3QgYmFzZWQgb24KKyAqICAgICAgICAgICAgICB0aGUgT0lELgorICoKKyAqIFxwYXJhbSBsaXN0ICBUaGUgbGlzdCB0byBzZWVrIHRocm91Z2gKKyAqIFxwYXJhbSBvaWQgICBUaGUgT0lEIHRvIGxvb2sgZm9yCisgKiBccGFyYW0gbGVuICAgU2l6ZSBvZiB0aGUgT0lECisgKgorICogXHJldHVybiAgICAgIE5VTEwgaWYgbm90IGZvdW5kLCBvciBhIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nIGVudHJ5LgorICovCittYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqbWJlZHRsc19hc24xX2ZpbmRfbmFtZWRfZGF0YSggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRnJlZSBhIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhIGVudHJ5CisgKgorICogXHBhcmFtIGVudHJ5IFRoZSBuYW1lZCBkYXRhIGVudHJ5IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhKCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqZW50cnkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgRnJlZSBhbGwgZW50cmllcyBpbiBhIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhIGxpc3QKKyAqICAgICAgICAgICAgICBIZWFkIHdpbGwgYmUgc2V0IHRvIE5VTEwKKyAqCisgKiBccGFyYW0gaGVhZCAgUG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCBvZiBuYW1lZCBkYXRhIGVudHJpZXMgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKipoZWFkICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBhc24xLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYXNuMXdyaXRlLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FzbjF3cml0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmYzMmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2FzbjF3cml0ZS5oCkBAIC0wLDAgKzEsMjM5IEBACisvKioKKyAqIFxmaWxlIGFzbjF3cml0ZS5oCisgKgorICogXGJyaWVmIEFTTi4xIGJ1ZmZlciB3cml0aW5nIGZ1bmN0aW9uYWxpdHkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19BU04xX1dSSVRFX0gKKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0gKKworI2luY2x1ZGUgImFzbjEuaCIKKworI2RlZmluZSBNQkVEVExTX0FTTjFfQ0hLX0FERChnLCBmKSBkbyB7IGlmKCAoIHJldCA9IGYgKSA8IDAgKSByZXR1cm4oIHJldCApOyBlbHNlICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnICs9IHJldDsgfSB3aGlsZSggMCApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgbGVuZ3RoIGZpZWxkIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBsZW4gICAgICAgdGhlIGxlbmd0aCB0byB3cml0ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIEFTTi4xIHRhZyBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gdGFnICAgICAgIHRoZSB0YWcgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0YWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIHJhdyBidWZmZXIgZGF0YQorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBidWYgICAgICAgZGF0YSBidWZmZXIgdG8gd3JpdGUKKyAqIFxwYXJhbSBzaXplICAgICAgbGVuZ3RoIG9mIHRoZSBkYXRhIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIGJpZyBudW1iZXIgKE1CRURUTFNfQVNOMV9JTlRFR0VSKSBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gWCAgICAgICAgIHRoZSBNUEkgdG8gd3JpdGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgY29uc3QgbWJlZHRsc19tcGkgKlggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIE5VTEwgdGFnIChNQkVEVExTX0FTTjFfTlVMTCkgd2l0aCB6ZXJvIGRhdGEgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCB3cml0dGVuIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX251bGwoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYW4gT0lEIHRhZyAoTUJFRFRMU19BU04xX09JRCkgYW5kIGRhdGEgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIG9pZCAgICAgICB0aGUgT0lEIHRvIHdyaXRlCisgKiBccGFyYW0gb2lkX2xlbiAgIGxlbmd0aCBvZiB0aGUgT0lECisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfb2lkKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGFuIEFsZ29yaXRobUlkZW50aWZpZXIgc2VxdWVuY2UgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIG9pZCAgICAgICB0aGUgT0lEIG9mIHRoZSBhbGdvcml0aG0KKyAqIFxwYXJhbSBvaWRfbGVuICAgbGVuZ3RoIG9mIHRoZSBPSUQKKyAqIFxwYXJhbSBwYXJfbGVuICAgbGVuZ3RoIG9mIHBhcmFtZXRlcnMsIHdoaWNoIG11c3QgYmUgYWxyZWFkeSB3cml0dGVuLgorICogICAgICAgICAgICAgICAgICBJZiAwLCBOVUxMIHBhcmFtZXRlcnMgYXJlIGFkZGVkCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIGJvb2xlYW4gdGFnIChNQkVEVExTX0FTTjFfQk9PTEVBTikgYW5kIHZhbHVlIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSBib29sZWFuICAgMCBvciAxCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfYm9vbCggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCBpbnQgYm9vbGVhbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYW4gaW50IHRhZyAoTUJFRFRMU19BU04xX0lOVEVHRVIpIGFuZCB2YWx1ZSBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gdmFsICAgICAgIHRoZSBpbnRlZ2VyIHZhbHVlCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50KCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIGludCB2YWwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgcHJpbnRhYmxlIHN0cmluZyB0YWcgKE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HKSBhbmQKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIHRleHQgICAgICB0aGUgdGV4dCB0byB3cml0ZQorICogXHBhcmFtIHRleHRfbGVuICBsZW5ndGggb2YgdGhlIHRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9wcmludGFibGVfc3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGFuIElBNSBzdHJpbmcgdGFnIChNQkVEVExTX0FTTjFfSUE1X1NUUklORykgYW5kCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlIGluIEFTTi4xIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBOb3RlOiBmdW5jdGlvbiB3b3JrcyBiYWNrd2FyZHMgaW4gZGF0YSBidWZmZXIKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHJlZmVyZW5jZSB0byBjdXJyZW50IHBvc2l0aW9uIHBvaW50ZXIKKyAqIFxwYXJhbSBzdGFydCAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoZm9yIGJvdW5kcy1jaGVja2luZykKKyAqIFxwYXJhbSB0ZXh0ICAgICAgdGhlIHRleHQgdG8gd3JpdGUKKyAqIFxwYXJhbSB0ZXh0X2xlbiAgbGVuZ3RoIG9mIHRoZSB0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIGJpdHN0cmluZyB0YWcgKE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HKSBhbmQKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgaW4gQVNOLjEgZm9ybWF0CisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIGJ1ZiAgICAgICB0aGUgYml0c3RyaW5nCisgKiBccGFyYW0gYml0cyAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBpbiB0aGUgYml0c3RyaW5nCisgKgorICogXHJldHVybiAgICAgICAgICB0aGUgbGVuZ3RoIHdyaXR0ZW4gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfYml0c3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJpdHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGFuIG9jdGV0IHN0cmluZyB0YWcgKE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcpIGFuZAorICogICAgICAgICAgICAgICAgICB2YWx1ZSBpbiBBU04uMSBmb3JtYXQKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZnVuY3Rpb24gd29ya3MgYmFja3dhcmRzIGluIGRhdGEgYnVmZmVyCisgKgorICogXHBhcmFtIHAgICAgICAgICByZWZlcmVuY2UgdG8gY3VycmVudCBwb3NpdGlvbiBwb2ludGVyCisgKiBccGFyYW0gc3RhcnQgICAgIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGZvciBib3VuZHMtY2hlY2tpbmcpCisgKiBccGFyYW0gYnVmICAgICAgIGRhdGEgYnVmZmVyIHRvIHdyaXRlCisgKiBccGFyYW0gc2l6ZSAgICAgIGxlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ3JlYXRlIG9yIGZpbmQgYSBzcGVjaWZpYyBuYW1lZF9kYXRhIGVudHJ5IGZvciB3cml0aW5nIGluIGEKKyAqICAgICAgICAgICAgICAgICAgc2VxdWVuY2Ugb3IgbGlzdCBiYXNlZCBvbiB0aGUgT0lELiBJZiBub3QgYWxyZWFkeSBpbiB0aGVyZSwKKyAqICAgICAgICAgICAgICAgICAgYSBuZXcgZW50cnkgaXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgKiAgICAgICAgICAgICAgICAgIFdhcm5pbmc6IERlc3RydWN0aXZlIGJlaGF2aW91ciBmb3IgdGhlIHZhbCBkYXRhIQorICoKKyAqIFxwYXJhbSBsaXN0ICAgICAgUG9pbnRlciB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGhlYWQgb2YgdGhlIGxpc3QgdG8gc2VlaworICogICAgICAgICAgICAgICAgICB0aHJvdWdoICh3aWxsIGJlIHVwZGF0ZWQgaW4gY2FzZSBvZiBhIG5ldyBlbnRyeSkKKyAqIFxwYXJhbSBvaWQgICAgICAgVGhlIE9JRCB0byBsb29rIGZvcgorICogXHBhcmFtIG9pZF9sZW4gICBTaXplIG9mIHRoZSBPSUQKKyAqIFxwYXJhbSB2YWwgICAgICAgRGF0YSB0byBzdG9yZSAoY2FuIGJlIE5VTEwgaWYgeW91IHdhbnQgdG8gZmlsbCBpdCBieSBoYW5kKQorICogXHBhcmFtIHZhbF9sZW4gICBNaW5pbXVtIGxlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIgbmVlZGVkCisgKgorICogXHJldHVybiAgICAgIE5VTEwgaWYgaWYgdGhlcmUgd2FzIGEgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IsIG9yIGEgcG9pbnRlcgorICogICAgICAgICAgICAgIHRvIHRoZSBuZXcgLyBleGlzdGluZyBlbnRyeS4KKyAqLworbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKm1iZWR0bHNfYXNuMV9zdG9yZV9uYW1lZF9kYXRhKCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbF9sZW4gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9XUklURV9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Jhc2U2NC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9iYXNlNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJjNjUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9iYXNlNjQuaApAQCAtMCwwICsxLDg4IEBACisvKioKKyAqIFxmaWxlIGJhc2U2NC5oCisgKgorICogXGJyaWVmIFJGQyAxNTIxIGJhc2U2NCBlbmNvZGluZy9kZWNvZGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0JBU0U2NF9ICisjZGVmaW5lIE1CRURUTFNfQkFTRTY0X0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMICAgICAgICAgICAgICAgLTB4MDAyQSAgLyoqPCBPdXRwdXQgYnVmZmVyIHRvbyBzbWFsbC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSICAgICAgICAgICAgICAtMHgwMDJDICAvKio8IEludmFsaWQgY2hhcmFjdGVyIGluIGlucHV0LiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVuY29kZSBhIGJ1ZmZlciBpbnRvIGJhc2U2NCBmb3JtYXQKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gZGxlbiAgICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gb2xlbiAgICAgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4KKyAqIFxwYXJhbSBzcmMgICAgICBzb3VyY2UgYnVmZmVyCisgKiBccGFyYW0gc2xlbiAgICAgYW1vdW50IG9mIGRhdGEgdG8gYmUgZW5jb2RlZAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMLgorICogICAgICAgICAgICAgICAgICpvbGVuIGlzIGFsd2F5cyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGFtb3VudAorICogICAgICAgICAgICAgICAgIG9mIGRhdGEgdGhhdCBoYXMgKG9yIHdvdWxkIGhhdmUpIGJlZW4gd3JpdHRlbi4KKyAqICAgICAgICAgICAgICAgICBJZiB0aGF0IGxlbmd0aCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQsIHRoZW4gbm8gZGF0YSBpcworICogICAgICAgICAgICAgICAgIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciBhbmQgKm9sZW4gaXMgc2V0IHRvIHRoZSBtYXhpbXVtCisgKiAgICAgICAgICAgICAgICAgbGVuZ3RoIHJlcHJlc2VudGFibGUgYXMgYSBzaXplX3QuCisgKgorICogXG5vdGUgICAgICAgICAgIENhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRsZW4gPSAwIHRvIG9idGFpbiB0aGUKKyAqICAgICAgICAgICAgICAgICByZXF1aXJlZCBidWZmZXIgc2l6ZSBpbiAqb2xlbgorICovCitpbnQgbWJlZHRsc19iYXNlNjRfZW5jb2RlKCB1bnNpZ25lZCBjaGFyICpkc3QsIHNpemVfdCBkbGVuLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3Qgc2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBEZWNvZGUgYSBiYXNlNjQtZm9ybWF0dGVkIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBkc3QgICAgICBkZXN0aW5hdGlvbiBidWZmZXIgKGNhbiBiZSBOVUxMIGZvciBjaGVja2luZyBzaXplKQorICogXHBhcmFtIGRsZW4gICAgIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIG9sZW4gICAgIG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKiBccGFyYW0gc3JjICAgICAgc291cmNlIGJ1ZmZlcgorICogXHBhcmFtIHNsZW4gICAgIGFtb3VudCBvZiBkYXRhIHRvIGJlIGRlY29kZWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgaWYgdGhlIGlucHV0IGRhdGEgaXMKKyAqICAgICAgICAgICAgICAgICBub3QgY29ycmVjdC4gKm9sZW4gaXMgYWx3YXlzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgYW1vdW50CisgKiAgICAgICAgICAgICAgICAgb2YgZGF0YSB0aGF0IGhhcyAob3Igd291bGQgaGF2ZSkgYmVlbiB3cml0dGVuLgorICoKKyAqIFxub3RlICAgICAgICAgICBDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCAqZHN0ID0gTlVMTCBvciBkbGVuID0gMCB0byBvYnRhaW4KKyAqICAgICAgICAgICAgICAgICB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgaW4gKm9sZW4KKyAqLworaW50IG1iZWR0bHNfYmFzZTY0X2RlY29kZSggdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgZGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgc2l6ZV90IHNsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfYmFzZTY0X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGJhc2U2NC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2JpZ251bS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9iaWdudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTUxNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9iaWdudW0uaApAQCAtMCwwICsxLDcxNyBAQAorLyoqCisgKiBcZmlsZSBiaWdudW0uaAorICoKKyAqIFxicmllZiAgTXVsdGktcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0JJR05VTV9ICisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgICAgICAtMHgwMDAyICAvKio8IEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIGEgZmlsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAgICAtMHgwMDA0ICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9NUElfSU5WQUxJRF9DSEFSQUNURVIgICAgICAgICAgICAgICAgIC0weDAwMDYgIC8qKjwgVGhlcmUgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgaW4gdGhlIGRpZ2l0IHN0cmluZy4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgICAgICAgICAtMHgwMDA4ICAvKio8IFRoZSBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIHdyaXRlIHRvLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUgICAgICAgICAgICAgICAgICAgIC0weDAwMEEgIC8qKjwgVGhlIGlucHV0IGFyZ3VtZW50cyBhcmUgbmVnYXRpdmUgb3IgcmVzdWx0IGluIGlsbGVnYWwgb3V0cHV0LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTyAgICAgICAgICAgICAgICAgIC0weDAwMEMgIC8qKjwgVGhlIGlucHV0IGFyZ3VtZW50IGZvciBkaXZpc2lvbiBpcyB6ZXJvLCB3aGljaCBpcyBub3QgYWxsb3dlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICAgICAgICAgICAgICAgICAgICAtMHgwMDBFICAvKio8IFRoZSBpbnB1dCBhcmd1bWVudHMgYXJlIG5vdCBhY2NlcHRhYmxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgIC0weDAwMTAgIC8qKjwgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiAqLworCisjZGVmaW5lIE1CRURUTFNfTVBJX0NISyhmKSBkbyB7IGlmKCAoIHJldCA9IGYgKSAhPSAwICkgZ290byBjbGVhbnVwOyB9IHdoaWxlKCAwICkKKworLyoKKyAqIE1heGltdW0gc2l6ZSBNUElzIGFyZSBhbGxvd2VkIHRvIGdyb3cgdG8gaW4gbnVtYmVyIG9mIGxpbWJzLgorICovCisjZGVmaW5lIE1CRURUTFNfTVBJX01BWF9MSU1CUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTVBJX1dJTkRPV19TSVpFKQorLyoKKyAqIE1heGltdW0gd2luZG93IHNpemUgdXNlZCBmb3IgbW9kdWxhciBleHBvbmVudGlhdGlvbi4gRGVmYXVsdDogNgorICogTWluaW11bSB2YWx1ZTogMS4gTWF4aW11bSB2YWx1ZTogNi4KKyAqCisgKiBSZXN1bHQgaXMgYW4gYXJyYXkgb2YgKCAyIDw8IE1CRURUTFNfTVBJX1dJTkRPV19TSVpFICkgTVBJcyB1c2VkCisgKiBmb3IgdGhlIHNsaWRpbmcgd2luZG93IGNhbGN1bGF0aW9uLiAoU28gNjQgYnkgZGVmYXVsdCkKKyAqCisgKiBSZWR1Y3Rpb24gaW4gc2l6ZSwgcmVkdWNlcyBzcGVlZC4KKyAqLworI2RlZmluZSBNQkVEVExTX01QSV9XSU5ET1dfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgICAgICAgIC8qKjwgTWF4aW11bSB3aW5kb3dzIHNpemUgdXNlZC4gKi8KKyNlbmRpZiAvKiAhTUJFRFRMU19NUElfV0lORE9XX1NJWkUgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTVBJX01BWF9TSVpFKQorLyoKKyAqIE1heGltdW0gc2l6ZSBvZiBNUElzIGFsbG93ZWQgaW4gYml0cyBhbmQgYnl0ZXMgZm9yIHVzZXItTVBJcy4KKyAqICggRGVmYXVsdDogNTEyIGJ5dGVzID0+IDQwOTYgYml0cywgTWF4aW11bSB0ZXN0ZWQ6IDIwNDggYnl0ZXMgPT4gMTYzODQgYml0cyApCisgKgorICogTm90ZTogQ2FsY3VsYXRpb25zIGNhbiByZXN1bHRzIHRlbXBvcmFyaWx5IGluIGxhcmdlciBNUElzLiBTbyB0aGUgbnVtYmVyCisgKiBvZiBsaW1icyByZXF1aXJlZCAoTUJFRFRMU19NUElfTUFYX0xJTUJTKSBpcyBoaWdoZXIuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0ICAgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGZvciB1c2FibGUgTVBJcy4gKi8KKyNlbmRpZiAvKiAhTUJFRFRMU19NUElfTUFYX1NJWkUgKi8KKworI2RlZmluZSBNQkVEVExTX01QSV9NQVhfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggOCAqIE1CRURUTFNfTVBJX01BWF9TSVpFICkgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBiaXRzIGZvciB1c2FibGUgTVBJcy4gKi8KKworLyoKKyAqIFdoZW4gcmVhZGluZyBmcm9tIGZpbGVzIHdpdGggbWJlZHRsc19tcGlfcmVhZF9maWxlKCkgYW5kIHdyaXRpbmcgdG8gZmlsZXMgd2l0aAorICogbWJlZHRsc19tcGlfd3JpdGVfZmlsZSgpIHRoZSBidWZmZXIgc2hvdWxkIGhhdmUgc3BhY2UKKyAqIGZvciBhIChzaG9ydCkgbGFiZWwsIHRoZSBNUEkgKGluIHRoZSBwcm92aWRlZCByYWRpeCksIHRoZSBuZXdsaW5lCisgKiBjaGFyYWN0ZXJzIGFuZCB0aGUgJ1wwJy4KKyAqCisgKiBCeSBkZWZhdWx0IHdlIGFzc3VtZSBhdCBsZWFzdCBhIDEwIGNoYXIgbGFiZWwsIGEgbWluaW11bSByYWRpeCBvZiAxMAorICogKGRlY2ltYWwpIGFuZCBhIG1heGltdW0gb2YgNDA5NiBiaXQgbnVtYmVycyAoMTIzNCBkZWNpbWFsIGNoYXJzKS4KKyAqIEF1dG9zaXplZCBhdCBjb21waWxlIHRpbWUgZm9yIGF0IGxlYXN0IGEgMTAgY2hhciBsYWJlbCwgYSBtaW5pbXVtIHJhZGl4CisgKiBvZiAxMCAoZGVjaW1hbCkgZm9yIGEgbnVtYmVyIG9mIE1CRURUTFNfTVBJX01BWF9CSVRTIHNpemUuCisgKgorICogVGhpcyB1c2VkIHRvIGJlIHN0YXRpY2FsbHkgc2l6ZWQgdG8gMTI1MCBmb3IgYSBtYXhpbXVtIG9mIDQwOTYgYml0CisgKiBudW1iZXJzICgxMjM0IGRlY2ltYWwgY2hhcnMpLgorICoKKyAqIENhbGN1bGF0ZSB1c2luZyB0aGUgZm9ybXVsYToKKyAqICBNQkVEVExTX01QSV9SV19CVUZGRVJfU0laRSA9IGNlaWwoTUJFRFRMU19NUElfTUFYX0JJVFMgLyBsbigxMCkgKiBsbigyKSkgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsU2l6ZSArIDYKKyAqLworI2RlZmluZSBNQkVEVExTX01QSV9NQVhfQklUU19TQ0FMRTEwMCAgICAgICAgICAoIDEwMCAqIE1CRURUTFNfTVBJX01BWF9CSVRTICkKKyNkZWZpbmUgTUJFRFRMU19MTl8yX0RJVl9MTl8xMF9TQ0FMRTEwMCAgICAgICAgICAgICAgICAgMzMyCisjZGVmaW5lIE1CRURUTFNfTVBJX1JXX0JVRkZFUl9TSVpFICAgICAgICAgICAgICggKChNQkVEVExTX01QSV9NQVhfQklUU19TQ0FMRTEwMCArIE1CRURUTFNfTE5fMl9ESVZfTE5fMTBfU0NBTEUxMDAgLSAxKSAvIE1CRURUTFNfTE5fMl9ESVZfTE5fMTBfU0NBTEUxMDApICsgMTAgKyA2ICkKKworLyoKKyAqIERlZmluZSB0aGUgYmFzZSBpbnRlZ2VyIHR5cGUsIGFyY2hpdGVjdHVyZS13aXNlLgorICoKKyAqIDMyLWJpdCBpbnRlZ2VycyBjYW4gYmUgZm9yY2VkIG9uIDY0LWJpdCBhcmNoZXMgKGVnLiBmb3IgdGVzdGluZyBwdXJwb3NlcykKKyAqIGJ5IGRlZmluaW5nIE1CRURUTFNfSEFWRV9JTlQzMiBhbmQgdW5kZWZpbmluZyBNQkVEVExTX0hBVkVfQVNNCisgKi8KKyNpZiAoICEgZGVmaW5lZChNQkVEVExTX0hBVkVfSU5UMzIpICYmIFwKKyAgICAgICAgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfTV9BTUQ2NCkgKQorICAjZGVmaW5lIE1CRURUTFNfSEFWRV9JTlQ2NAorICB0eXBlZGVmICBpbnQ2NF90IG1iZWR0bHNfbXBpX3NpbnQ7CisgIHR5cGVkZWYgdWludDY0X3QgbWJlZHRsc19tcGlfdWludDsKKyNlbHNlCisgICNpZiAoICEgZGVmaW5lZChNQkVEVExTX0hBVkVfSU5UMzIpICYmICAgICAgICAgICAgICAgXAorICAgICAgICBkZWZpbmVkKF9fR05VQ19fKSAmJiAoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICAgIHx8IFwKKyAgICAgICAgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgXAorICAgICAgICBkZWZpbmVkKF9faWE2NF9fKSAgfHwgZGVmaW5lZChfX2FscGhhX18pICAgICB8fCBcCisgICAgICAgIChkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKSkgIHx8IFwKKyAgICAgICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IGRlZmluZWQoX19taXBzNjQpICkgKQorICAgICAjZGVmaW5lIE1CRURUTFNfSEFWRV9JTlQ2NAorICAgICB0eXBlZGVmICBpbnQ2NF90IG1iZWR0bHNfbXBpX3NpbnQ7CisgICAgIHR5cGVkZWYgdWludDY0X3QgbWJlZHRsc19tcGlfdWludDsKKyAgICAgLyogbWJlZHRsc190X3VkYmwgZGVmaW5lZCBhcyAxMjgtYml0IHVuc2lnbmVkIGludCAqLworICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBtYmVkdGxzX3RfdWRibCBfX2F0dHJpYnV0ZV9fKChtb2RlKFRJKSkpOworICAgICAjZGVmaW5lIE1CRURUTFNfSEFWRV9VREJMCisgICNlbHNlCisgICAgICNkZWZpbmUgTUJFRFRMU19IQVZFX0lOVDMyCisgICAgIHR5cGVkZWYgIGludDMyX3QgbWJlZHRsc19tcGlfc2ludDsKKyAgICAgdHlwZWRlZiB1aW50MzJfdCBtYmVkdGxzX21waV91aW50OworICAgICB0eXBlZGVmIHVpbnQ2NF90IG1iZWR0bHNfdF91ZGJsOworICAgICAjZGVmaW5lIE1CRURUTFNfSEFWRV9VREJMCisgICNlbmRpZiAvKiAhTUJFRFRMU19IQVZFX0lOVDMyICYmIF9fR05VQ19fICYmIDY0LWJpdCBwbGF0Zm9ybSAqLworI2VuZGlmIC8qICFNQkVEVExTX0hBVkVfSU5UMzIgJiYgX01TQ19WRVIgJiYgX01fQU1ENjQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBNUEkgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IHM7ICAgICAgICAgICAgICAvKiE8ICBpbnRlZ2VyIHNpZ24gICAgICAqLworICAgIHNpemVfdCBuOyAgICAgICAgICAgLyohPCAgdG90YWwgIyBvZiBsaW1icyAgKi8KKyAgICBtYmVkdGxzX21waV91aW50ICpwOyAgICAgICAgICAvKiE8ICBwb2ludGVyIHRvIGxpbWJzICAqLworfQorbWJlZHRsc19tcGk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIG9uZSBNUEkgKG1ha2UgaW50ZXJuYWwgcmVmZXJlbmNlcyB2YWxpZCkKKyAqICAgICAgICAgICAgICAgICAgVGhpcyBqdXN0IG1ha2VzIGl0IHJlYWR5IHRvIGJlIHNldCBvciBmcmVlZCwKKyAqICAgICAgICAgICAgICAgICAgYnV0IGRvZXMgbm90IGRlZmluZSBhIHZhbHVlIGZvciB0aGUgTVBJLgorICoKKyAqIFxwYXJhbSBYICAgICAgICAgT25lIE1QSSB0byBpbml0aWFsaXplLgorICovCit2b2lkIG1iZWR0bHNfbXBpX2luaXQoIG1iZWR0bHNfbXBpICpYICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFVuYWxsb2NhdGUgb25lIE1QSQorICoKKyAqIFxwYXJhbSBYICAgICAgICBPbmUgTVBJIHRvIHVuYWxsb2NhdGUuCisgKi8KK3ZvaWQgbWJlZHRsc19tcGlfZnJlZSggbWJlZHRsc19tcGkgKlggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRW5sYXJnZSB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW1icworICoKKyAqIFxwYXJhbSBYICAgICAgICBNUEkgdG8gZ3JvdworICogXHBhcmFtIG5ibGltYnMgIFRoZSB0YXJnZXQgbnVtYmVyIG9mIGxpbWJzCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfZ3JvdyggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBuYmxpbWJzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJlc2l6ZSBkb3duLCBrZWVwaW5nIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbWJzCisgKgorICogXHBhcmFtIFggICAgICAgIE1QSSB0byBzaHJpbmsKKyAqIFxwYXJhbSBuYmxpbWJzICBUaGUgbWluaW11bSBudW1iZXIgb2YgbGltYnMgdG8ga2VlcAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX3NocmluayggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBuYmxpbWJzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENvcHkgdGhlIGNvbnRlbnRzIG9mIFkgaW50byBYCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIFkgICAgICAgIFNvdXJjZSBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9jb3B5KCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKlkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU3dhcCB0aGUgY29udGVudHMgb2YgWCBhbmQgWQorICoKKyAqIFxwYXJhbSBYICAgICAgICBGaXJzdCBNUEkgdmFsdWUKKyAqIFxwYXJhbSBZICAgICAgICBTZWNvbmQgTVBJIHZhbHVlCisgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc3dhcCggbWJlZHRsc19tcGkgKlgsIG1iZWR0bHNfbXBpICpZICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNhZmUgY29uZGl0aW9uYWwgYXNzaWduZW1lbnQgWCA9IFkgaWYgYXNzaWduIGlzIDEKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIGNvbmRpdGlvbmFsbHkgYXNzaWduIHRvCisgKiBccGFyYW0gWSAgICAgICAgVmFsdWUgdG8gYmUgYXNzaWduZWQKKyAqIFxwYXJhbSBhc3NpZ24gICAxOiBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCAwOiBrZWVwIFgncyBvcmlnaW5hbCB2YWx1ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0bworICogICAgICAgICAgICAgICAgICAgICAgaWYoIGFzc2lnbiApIG1iZWR0bHNfbXBpX2NvcHkoIFgsIFkgKTsKKyAqICAgICAgICAgICAgICAgICBleGNlcHQgdGhhdCBpdCBhdm9pZHMgbGVha2luZyBhbnkgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlcgorICogICAgICAgICAgICAgICAgIHRoZSBhc3NpZ25tZW50IHdhcyBkb25lIG9yIG5vdCAodGhlIGFib3ZlIGNvZGUgbWF5IGxlYWsKKyAqICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0aHJvdWdoIGJyYW5jaCBwcmVkaWN0aW9uIGFuZC9vciBtZW1vcnkgYWNjZXNzCisgKiAgICAgICAgICAgICAgICAgcGF0dGVybnMgYW5hbHlzaXMpLgorICovCitpbnQgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZLCB1bnNpZ25lZCBjaGFyIGFzc2lnbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTYWZlIGNvbmRpdGlvbmFsIHN3YXAgWCA8LT4gWSBpZiBzd2FwIGlzIDEKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRmlyc3QgbWJlZHRsc19tcGkgdmFsdWUKKyAqIFxwYXJhbSBZICAgICAgICBTZWNvbmQgbWJlZHRsc19tcGkgdmFsdWUKKyAqIFxwYXJhbSBhc3NpZ24gICAxOiBwZXJmb3JtIHRoZSBzd2FwLCAwOiBrZWVwIFggYW5kIFkncyBvcmlnaW5hbCB2YWx1ZXMKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIGlmKCBhc3NpZ24gKSBtYmVkdGxzX21waV9zd2FwKCBYLCBZICk7CisgKiAgICAgICAgICAgICAgICAgZXhjZXB0IHRoYXQgaXQgYXZvaWRzIGxlYWtpbmcgYW55IGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIKKyAqICAgICAgICAgICAgICAgICB0aGUgYXNzaWdubWVudCB3YXMgZG9uZSBvciBub3QgKHRoZSBhYm92ZSBjb2RlIG1heSBsZWFrCisgKiAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdGhyb3VnaCBicmFuY2ggcHJlZGljdGlvbiBhbmQvb3IgbWVtb3J5IGFjY2VzcworICogICAgICAgICAgICAgICAgIHBhdHRlcm5zIGFuYWx5c2lzKS4KKyAqLworaW50IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCBtYmVkdGxzX21waSAqWCwgbWJlZHRsc19tcGkgKlksIHVuc2lnbmVkIGNoYXIgYXNzaWduICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB2YWx1ZSBmcm9tIGludGVnZXIKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHNldAorICogXHBhcmFtIHogICAgICAgIFZhbHVlIHRvIHVzZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX2xzZXQoIG1iZWR0bHNfbXBpICpYLCBtYmVkdGxzX21waV9zaW50IHogKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2V0IGEgc3BlY2lmaWMgYml0IGZyb20gWAorICoKKyAqIFxwYXJhbSBYICAgICAgICBNUEkgdG8gdXNlCisgKiBccGFyYW0gcG9zICAgICAgWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgYml0IGluIFgKKyAqCisgKiBccmV0dXJuICAgICAgICAgRWl0aGVyIGEgMCBvciBhIDEKKyAqLworaW50IG1iZWR0bHNfbXBpX2dldF9iaXQoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBzaXplX3QgcG9zICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCBhIGJpdCBvZiBYIHRvIGEgc3BlY2lmaWMgdmFsdWUgb2YgMCBvciAxCisgKgorICogXG5vdGUgICAgICAgICAgIFdpbGwgZ3JvdyBYIGlmIG5lY2Vzc2FyeSB0byBzZXQgYSBiaXQgdG8gMSBpbiBhIG5vdCB5ZXQKKyAqICAgICAgICAgICAgICAgICBleGlzdGluZyBsaW1iLiBXaWxsIG5vdCBncm93IGlmIGJpdCBzaG91bGQgYmUgc2V0IHRvIDAKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHVzZQorICogXHBhcmFtIHBvcyAgICAgIFplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGJpdCBpbiBYCisgKiBccGFyYW0gdmFsICAgICAgVGhlIHZhbHVlIHRvIHNldCB0aGUgYml0IHRvICgwIG9yIDEpCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgaWYgdmFsIGlzIG5vdCAwIG9yIDEKKyAqLworaW50IG1iZWR0bHNfbXBpX3NldF9iaXQoIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgcG9zLCB1bnNpZ25lZCBjaGFyIHZhbCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvLWJpdHMgYmVmb3JlIHRoZSBsZWFzdCBzaWduaWZpY2FudAorICogICAgICAgICAgICAgICAgICcxJyBiaXQKKyAqCisgKiBOb3RlOiBUaHVzIGFsc28gdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50ICcxJyBiaXQKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHVzZQorICovCitzaXplX3QgbWJlZHRsc19tcGlfbHNiKCBjb25zdCBtYmVkdGxzX21waSAqWCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG1vc3QKKyAqICAgICAgICAgICAgICAgICBzaWduaWZpY2FudCAnMScgYml0JworICoKKyAqIE5vdGU6IFRodXMgYWxzbyB0aGUgb25lLWJhc2VkIGluZGV4IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50ICcxJyBiaXQKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHVzZQorICovCitzaXplX3QgbWJlZHRsc19tcGlfYml0bGVuKCBjb25zdCBtYmVkdGxzX21waSAqWCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIHRvdGFsIHNpemUgaW4gYnl0ZXMKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHVzZQorICovCitzaXplX3QgbWJlZHRsc19tcGlfc2l6ZSggY29uc3QgbWJlZHRsc19tcGkgKlggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW1wb3J0IGZyb20gYW4gQVNDSUkgc3RyaW5nCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIHJhZGl4ICAgIElucHV0IG51bWVyaWMgYmFzZQorICogXHBhcmFtIHMgICAgICAgIE51bGwtdGVybWluYXRlZCBzdHJpbmcgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBNQkVEVExTX0VSUl9NUElfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCBtYmVkdGxzX21waSAqWCwgaW50IHJhZGl4LCBjb25zdCBjaGFyICpzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEV4cG9ydCBpbnRvIGFuIEFTQ0lJIHN0cmluZworICoKKyAqIFxwYXJhbSBYICAgICAgICBTb3VyY2UgTVBJCisgKiBccGFyYW0gcmFkaXggICAgT3V0cHV0IG51bWVyaWMgYmFzZQorICogXHBhcmFtIGJ1ZiAgICAgIEJ1ZmZlciB0byB3cml0ZSB0aGUgc3RyaW5nIHRvCisgKiBccGFyYW0gYnVmbGVuICAgTGVuZ3RoIG9mIGJ1ZgorICogXHBhcmFtIG9sZW4gICAgIExlbmd0aCBvZiB0aGUgc3RyaW5nIHdyaXR0ZW4sIGluY2x1ZGluZyBmaW5hbCBOVUwgYnl0ZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfTVBJX1hYWCBlcnJvciBjb2RlLgorICogICAgICAgICAgICAgICAgICpvbGVuIGlzIGFsd2F5cyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGFtb3VudAorICogICAgICAgICAgICAgICAgIG9mIGRhdGEgdGhhdCBoYXMgKG9yIHdvdWxkIGhhdmUpIGJlZW4gd3JpdHRlbi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYnVmbGVuID0gMCB0byBvYnRhaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgbWluaW11bSByZXF1aXJlZCBidWZmZXIgc2l6ZSBpbiAqb2xlbi4KKyAqLworaW50IG1iZWR0bHNfbXBpX3dyaXRlX3N0cmluZyggY29uc3QgbWJlZHRsc19tcGkgKlgsIGludCByYWRpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbiwgc2l6ZV90ICpvbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZWFkIFggZnJvbSBhbiBvcGVuZWQgZmlsZQorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSByYWRpeCAgICBJbnB1dCBudW1lcmljIGJhc2UKKyAqIFxwYXJhbSBmaW4gICAgICBJbnB1dCBmaWxlIGhhbmRsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIE1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMIGlmCisgKiAgICAgICAgICAgICAgICAgdGhlIGZpbGUgcmVhZCBidWZmZXIgaXMgdG9vIHNtYWxsIG9yIGEKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggbWJlZHRsc19tcGkgKlgsIGludCByYWRpeCwgRklMRSAqZmluICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFdyaXRlIFggaW50byBhbiBvcGVuZWQgZmlsZSwgb3Igc3Rkb3V0IGlmIGZvdXQgaXMgTlVMTAorICoKKyAqIFxwYXJhbSBwICAgICAgICBQcmVmaXgsIGNhbiBiZSBOVUxMCisgKiBccGFyYW0gWCAgICAgICAgU291cmNlIE1QSQorICogXHBhcmFtIHJhZGl4ICAgIE91dHB1dCBudW1lcmljIGJhc2UKKyAqIFxwYXJhbSBmb3V0ICAgICBPdXRwdXQgZmlsZSBoYW5kbGUgKGNhbiBiZSBOVUxMKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfTVBJX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFNldCBmb3V0ID09IE5VTEwgdG8gcHJpbnQgWCBvbiB0aGUgY29uc29sZS4KKyAqLworaW50IG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoIGNvbnN0IGNoYXIgKnAsIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsIEZJTEUgKmZvdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEltcG9ydCBYIGZyb20gdW5zaWduZWQgYmluYXJ5IGRhdGEsIGJpZyBlbmRpYW4KKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gYnVmICAgICAgSW5wdXQgYnVmZmVyCisgKiBccGFyYW0gYnVmbGVuICAgSW5wdXQgYnVmZmVyIHNpemUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBFeHBvcnQgWCBpbnRvIHVuc2lnbmVkIGJpbmFyeSBkYXRhLCBiaWcgZW5kaWFuLgorICogICAgICAgICAgICAgICAgIEFsd2F5cyBmaWxscyB0aGUgd2hvbGUgYnVmZmVyLCB3aGljaCB3aWxsIHN0YXJ0IHdpdGggemVyb3MKKyAqICAgICAgICAgICAgICAgICBpZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIuCisgKgorICogXHBhcmFtIFggICAgICAgIFNvdXJjZSBNUEkKKyAqIFxwYXJhbSBidWYgICAgICBPdXRwdXQgYnVmZmVyCisgKiBccGFyYW0gYnVmbGVuICAgT3V0cHV0IGJ1ZmZlciBzaXplCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCBpZiBidWYgaXNuJ3QgbGFyZ2UgZW5vdWdoCisgKi8KK2ludCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTGVmdC1zaGlmdDogWCA8PD0gY291bnQKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHNoaWZ0CisgKiBccGFyYW0gY291bnQgICAgQW1vdW50IHRvIHNoaWZ0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfc2hpZnRfbCggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBjb3VudCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSaWdodC1zaGlmdDogWCA+Pj0gY291bnQKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTVBJIHRvIHNoaWZ0CisgKiBccGFyYW0gY291bnQgICAgQW1vdW50IHRvIHNoaWZ0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfc2hpZnRfciggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBjb3VudCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDb21wYXJlIHVuc2lnbmVkIHZhbHVlcworICoKKyAqIFxwYXJhbSBYICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gWSAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMSBpZiB8WHwgaXMgZ3JlYXRlciB0aGFuIHxZfCwKKyAqICAgICAgICAgICAgICAgIC0xIGlmIHxYfCBpcyBsZXNzZXIgIHRoYW4gfFl8IG9yCisgKiAgICAgICAgICAgICAgICAgMCBpZiB8WHwgaXMgZXF1YWwgdG8gfFl8CisgKi8KK2ludCBtYmVkdGxzX21waV9jbXBfYWJzKCBjb25zdCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKlkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ29tcGFyZSBzaWduZWQgdmFsdWVzCisgKgorICogXHBhcmFtIFggICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBZICAgICAgICBSaWdodC1oYW5kIE1QSQorICoKKyAqIFxyZXR1cm4gICAgICAgICAxIGlmIFggaXMgZ3JlYXRlciB0aGFuIFksCisgKiAgICAgICAgICAgICAgICAtMSBpZiBYIGlzIGxlc3NlciAgdGhhbiBZIG9yCisgKiAgICAgICAgICAgICAgICAgMCBpZiBYIGlzIGVxdWFsIHRvIFkKKyAqLworaW50IG1iZWR0bHNfbXBpX2NtcF9tcGkoIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqWSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDb21wYXJlIHNpZ25lZCB2YWx1ZXMKKyAqCisgKiBccGFyYW0gWCAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIHogICAgICAgIFRoZSBpbnRlZ2VyIHZhbHVlIHRvIGNvbXBhcmUgdG8KKyAqCisgKiBccmV0dXJuICAgICAgICAgMSBpZiBYIGlzIGdyZWF0ZXIgdGhhbiB6LAorICogICAgICAgICAgICAgICAgLTEgaWYgWCBpcyBsZXNzZXIgIHRoYW4geiBvcgorICogICAgICAgICAgICAgICAgIDAgaWYgWCBpcyBlcXVhbCB0byB6CisgKi8KK2ludCBtYmVkdGxzX21waV9jbXBfaW50KCBjb25zdCBtYmVkdGxzX21waSAqWCwgbWJlZHRsc19tcGlfc2ludCB6ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFVuc2lnbmVkIGFkZGl0aW9uOiBYID0gfEF8ICsgfEJ8CisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBCICAgICAgICBSaWdodC1oYW5kIE1QSQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX2FkZF9hYnMoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVW5zaWduZWQgc3VidHJhY3Rpb246IFggPSB8QXwgLSB8QnwKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEIgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUgaWYgQiBpcyBncmVhdGVyIHRoYW4gQQorICovCitpbnQgbWJlZHRsc19tcGlfc3ViX2FicyggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTaWduZWQgYWRkaXRpb246IFggPSBBICsgQgorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gQiAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9hZGRfbXBpKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNpZ25lZCBzdWJ0cmFjdGlvbjogWCA9IEEgLSBCCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBCICAgICAgICBSaWdodC1oYW5kIE1QSQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX3N1Yl9tcGkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2lnbmVkIGFkZGl0aW9uOiBYID0gQSArIGIKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIGIgICAgICAgIFRoZSBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX2FkZF9pbnQoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgbWJlZHRsc19tcGlfc2ludCBiICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNpZ25lZCBzdWJ0cmFjdGlvbjogWCA9IEEgLSBiCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBiICAgICAgICBUaGUgaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX3N1Yl9pbnQoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgbWJlZHRsc19tcGlfc2ludCBiICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEJhc2VsaW5lIG11bHRpcGxpY2F0aW9uOiBYID0gQSAqIEIKKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEIgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19tcGlfbXVsX21waSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBCYXNlbGluZSBtdWx0aXBsaWNhdGlvbjogWCA9IEEgKiBiCisgKgorICogXHBhcmFtIFggICAgICAgIERlc3RpbmF0aW9uIE1QSQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBiICAgICAgICBUaGUgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSB0byBtdWx0aXBseSB3aXRoCisgKgorICogXG5vdGUgICAgICAgICAgIGIgaXMgdW5zaWduZWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9tdWxfaW50KCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3VpbnQgYiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBEaXZpc2lvbiBieSBtYmVkdGxzX21waTogQSA9IFEgKiBCICsgUgorICoKKyAqIFxwYXJhbSBRICAgICAgICBEZXN0aW5hdGlvbiBNUEkgZm9yIHRoZSBxdW90aWVudAorICogXHBhcmFtIFIgICAgICAgIERlc3RpbmF0aW9uIE1QSSBmb3IgdGhlIHJlc3QgdmFsdWUKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gQiAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPIGlmIEIgPT0gMAorICoKKyAqIFxub3RlICAgICAgICAgICBFaXRoZXIgUSBvciBSIGNhbiBiZSBOVUxMLgorICovCitpbnQgbWJlZHRsc19tcGlfZGl2X21waSggbWJlZHRsc19tcGkgKlEsIG1iZWR0bHNfbXBpICpSLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRGl2aXNpb24gYnkgaW50OiBBID0gUSAqIGIgKyBSCisgKgorICogXHBhcmFtIFEgICAgICAgIERlc3RpbmF0aW9uIE1QSSBmb3IgdGhlIHF1b3RpZW50CisgKiBccGFyYW0gUiAgICAgICAgRGVzdGluYXRpb24gTVBJIGZvciB0aGUgcmVzdCB2YWx1ZQorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBiICAgICAgICBJbnRlZ2VyIHRvIGRpdmlkZSBieQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gaWYgYiA9PSAwCisgKgorICogXG5vdGUgICAgICAgICAgIEVpdGhlciBRIG9yIFIgY2FuIGJlIE5VTEwuCisgKi8KK2ludCBtYmVkdGxzX21waV9kaXZfaW50KCBtYmVkdGxzX21waSAqUSwgbWJlZHRsc19tcGkgKlIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV9zaW50IGIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTW9kdWxvOiBSID0gQSBtb2QgQgorICoKKyAqIFxwYXJhbSBSICAgICAgICBEZXN0aW5hdGlvbiBNUEkgZm9yIHRoZSByZXN0IHZhbHVlCisgKiBccGFyYW0gQSAgICAgICAgTGVmdC1oYW5kIE1QSQorICogXHBhcmFtIEIgICAgICAgIFJpZ2h0LWhhbmQgTVBJCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTyBpZiBCID09IDAsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFIGlmIEIgPCAwCisgKi8KK2ludCBtYmVkdGxzX21waV9tb2RfbXBpKCBtYmVkdGxzX21waSAqUiwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1vZHVsbzogciA9IEEgbW9kIGIKKyAqCisgKiBccGFyYW0gciAgICAgICAgRGVzdGluYXRpb24gbWJlZHRsc19tcGlfdWludAorICogXHBhcmFtIEEgICAgICAgIExlZnQtaGFuZCBNUEkKKyAqIFxwYXJhbSBiICAgICAgICBJbnRlZ2VyIHRvIGRpdmlkZSBieQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gaWYgYiA9PSAwLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRSBpZiBiIDwgMAorICovCitpbnQgbWJlZHRsc19tcGlfbW9kX2ludCggbWJlZHRsc19tcGlfdWludCAqciwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3NpbnQgYiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTbGlkaW5nLXdpbmRvdyBleHBvbmVudGlhdGlvbjogWCA9IEFeRSBtb2QgTgorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gRSAgICAgICAgRXhwb25lbnQgTVBJCisgKiBccGFyYW0gTiAgICAgICAgTW9kdWxhciBNUEkKKyAqIFxwYXJhbSBfUlIgICAgICBTcGVlZC11cCBNUEkgdXNlZCBmb3IgcmVjYWxjdWxhdGlvbnMKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSBpZiBOIGlzIG5lZ2F0aXZlIG9yIGV2ZW4gb3IKKyAqICAgICAgICAgICAgICAgICBpZiBFIGlzIG5lZ2F0aXZlCisgKgorICogXG5vdGUgICAgICAgICAgIF9SUiBpcyB1c2VkIHRvIGF2b2lkIHJlLWNvbXB1dGluZyBSKlIgbW9kIE4gYWNyb3NzCisgKiAgICAgICAgICAgICAgICAgbXVsdGlwbGUgY2FsbHMsIHdoaWNoIHNwZWVkcyB1cCB0aGluZ3MgYSBiaXQuIEl0IGNhbgorICogICAgICAgICAgICAgICAgIGJlIHNldCB0byBOVUxMIGlmIHRoZSBleHRyYSBwZXJmb3JtYW5jZSBpcyB1bm5lZWRlZC4KKyAqLworaW50IG1iZWR0bHNfbXBpX2V4cF9tb2QoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkUsIGNvbnN0IG1iZWR0bHNfbXBpICpOLCBtYmVkdGxzX21waSAqX1JSICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEZpbGwgYW4gTVBJIFggd2l0aCBzaXplIGJ5dGVzIG9mIHJhbmRvbQorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBzaXplICAgICBTaXplIGluIGJ5dGVzCisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHcmVhdGVzdCBjb21tb24gZGl2aXNvcjogRyA9IGdjZChBLCBCKQorICoKKyAqIFxwYXJhbSBHICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gQiAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21waV9nY2QoIG1iZWR0bHNfbXBpICpHLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTW9kdWxhciBpbnZlcnNlOiBYID0gQV4tMSBtb2QgTgorICoKKyAqIFxwYXJhbSBYICAgICAgICBEZXN0aW5hdGlvbiBNUEkKKyAqIFxwYXJhbSBBICAgICAgICBMZWZ0LWhhbmQgTVBJCisgKiBccGFyYW0gTiAgICAgICAgUmlnaHQtaGFuZCBNUEkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSBpZiBOIGlzIG5lZ2F0aXZlIG9yIG5pbAorICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSBpZiBBIGhhcyBubyBpbnZlcnNlIG1vZCBOCisgKi8KK2ludCBtYmVkdGxzX21waV9pbnZfbW9kKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpOICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1pbGxlci1SYWJpbiBwcmltYWxpdHkgdGVzdAorICoKKyAqIFxwYXJhbSBYICAgICAgICBNUEkgdG8gY2hlY2sKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCAocHJvYmFibHkgcHJpbWUpLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSBpZiBYIGlzIG5vdCBwcmltZQorICovCitpbnQgbWJlZHRsc19tcGlfaXNfcHJpbWUoIGNvbnN0IG1iZWR0bHNfbXBpICpYLAorICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUHJpbWUgbnVtYmVyIGdlbmVyYXRpb24KKyAqCisgKiBccGFyYW0gWCAgICAgICAgRGVzdGluYXRpb24gTVBJCisgKiBccGFyYW0gbmJpdHMgICAgUmVxdWlyZWQgc2l6ZSBvZiBYIGluIGJpdHMKKyAqICAgICAgICAgICAgICAgICAoIDMgPD0gbmJpdHMgPD0gTUJFRFRMU19NUElfTUFYX0JJVFMgKQorICogXHBhcmFtIGRoX2ZsYWcgIElmIDEsIHRoZW4gKFgtMSkvMiB3aWxsIGJlIHByaW1lIHRvbworICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIChwcm9iYWJseSBwcmltZSksCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBIGlmIG5iaXRzIGlzIDwgMworICovCitpbnQgbWJlZHRsc19tcGlfZ2VuX3ByaW1lKCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IG5iaXRzLCBpbnQgZGhfZmxhZywKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbXBpX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGJpZ251bS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Jsb3dmaXNoLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Jsb3dmaXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2MjZlZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvYmxvd2Zpc2guaApAQCAtMCwwICsxLDIwMyBAQAorLyoqCisgKiBcZmlsZSBibG93ZmlzaC5oCisgKgorICogXGJyaWVmIEJsb3dmaXNoIGJsb2NrIGNpcGhlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0JMT1dGSVNIX0gKKyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBUICAgICAxCisjZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVCAgICAgMAorI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX01BWF9LRVlfQklUUyAgICAgNDQ4CisjZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfTUlOX0tFWV9CSVRTICAgICAzMgorI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX1JPVU5EUyAgICAgIDE2ICAgICAgICAgLyoqPCBSb3VuZHMgdG8gdXNlLiBXaGVuIGluY3JlYXNpbmcgdGhpcyB2YWx1ZSwgbWFrZSBzdXJlIHRvIGV4dGVuZCB0aGUgaW5pdGlhbGlzYXRpb24gdmVjdG9ycyAqLworI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRSAgIDggICAgICAgICAgLyogQmxvd2Zpc2ggdXNlcyA2NCBiaXQgYmxvY2tzICovCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RIICAgICAgICAgICAgICAgIC0weDAwMTYgIC8qKjwgSW52YWxpZCBrZXkgbGVuZ3RoLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSCAgICAgICAgICAgICAgLTB4MDAxOCAgLyoqPCBJbnZhbGlkIGRhdGEgaW5wdXQgbGVuZ3RoLiAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEJsb3dmaXNoIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgUFtNQkVEVExTX0JMT1dGSVNIX1JPVU5EUyArIDJdOyAgICAvKiE8ICBCbG93ZmlzaCByb3VuZCBrZXlzICAgICovCisgICAgdWludDMyX3QgU1s0XVsyNTZdOyAgICAgICAgICAgICAgICAgLyohPCAga2V5IGRlcGVuZGVudCBTLWJveGVzICAqLworfQorbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIEJsb3dmaXNoIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQmxvd2Zpc2ggY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgQmxvd2Zpc2ggY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBCbG93ZmlzaCBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEJsb3dmaXNoIGtleSBzY2hlZHVsZQorICoKKyAqIFxwYXJhbSBjdHggICAgICBCbG93ZmlzaCBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgZW5jcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICBtdXN0IGJlIGJldHdlZW4gMzIgYW5kIDQ0OCBiaXRzCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEJsb3dmaXNoLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQmxvd2Zpc2ggY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCBvciBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQKKyAqIFxwYXJhbSBpbnB1dCAgICA4LWJ5dGUgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICA4LWJ5dGUgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0W01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIEJsb3dmaXNoLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKiAgICAgICAgICAgICAgICAgTGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jaworICogICAgICAgICAgICAgICAgIHNpemUgKDggYnl0ZXMpCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBCbG93ZmlzaCBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBUIG9yIE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYyggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2W01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisvKioKKyAqIFxicmllZiAgICAgICAgICBCbG93ZmlzaCBDRkIgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVXBvbiBleGl0LCB0aGUgY29udGVudCBvZiB0aGUgSVYgaXMgdXBkYXRlZCBzbyB0aGF0IHlvdSBjYW4KKyAqICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiBzYW1lIGZ1bmN0aW9uIGFnYWluIG9uIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgICAgICAgICBibG9jayhzKSBvZiBkYXRhIGFuZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGFzIGlmIGl0IHdhcworICogICAgICAgICAgICAgICAgIGVuY3J5cHRlZCBpbiBvbmUgY2FsbC4gVGhpcyBhbGxvd3MgYSAic3RyZWFtaW5nIiB1c2FnZS4KKyAqICAgICAgICAgICAgICAgICBJZiBvbiB0aGUgb3RoZXIgaGFuZCB5b3UgbmVlZCB0byByZXRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgICAgICAgIElWLCB5b3Ugc2hvdWxkIGVpdGhlciBzYXZlIGl0IG1hbnVhbGx5IG9yIHVzZSB0aGUgY2lwaGVyCisgKiAgICAgICAgICAgICAgICAgbW9kdWxlIGluc3RlYWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIEJsb3dmaXNoIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQgb3IgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUCisgKiBccGFyYW0gbGVuZ3RoICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXZfb2ZmICAgb2Zmc2V0IGluIElWICh1cGRhdGVkIGFmdGVyIHVzZSkKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NCggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKml2X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdltNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBCbG93ZmlzaC1DVFIgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFdhcm5pbmc6IFlvdSBoYXZlIHRvIGtlZXAgdGhlIG1heGltdW0gdXNlIG9mIHlvdXIgY291bnRlciBpbiBtaW5kIQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEJsb3dmaXNoIGNvbnRleHQKKyAqIFxwYXJhbSBsZW5ndGggICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKyAqIFxwYXJhbSBuY19vZmYgICAgICAgIFRoZSBvZmZzZXQgaW4gdGhlIGN1cnJlbnQgc3RyZWFtX2Jsb2NrIChmb3IgcmVzdW1pbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBjdXJyZW50IGNpcGhlciBzdHJlYW0pLiBUaGUgb2Zmc2V0IHBvaW50ZXIgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSAwIGF0IHRoZSBzdGFydCBvZiBhIHN0cmVhbS4KKyAqIFxwYXJhbSBub25jZV9jb3VudGVyIFRoZSA2NC1iaXQgbm9uY2UgYW5kIGNvdW50ZXIuCisgKiBccGFyYW0gc3RyZWFtX2Jsb2NrICBUaGUgc2F2ZWQgc3RyZWFtLWJsb2NrIGZvciByZXN1bWluZy4gSXMgb3ZlcndyaXR0ZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBmdW5jdGlvbi4KKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIFRoZSBpbnB1dCBkYXRhIHN0cmVhbQorICogXHBhcmFtIG91dHB1dCAgICAgICAgVGhlIG91dHB1dCBkYXRhIHN0cmVhbQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY3RyKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbm9uY2VfY291bnRlcltNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0cmVhbV9ibG9ja1tNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX0JMT1dGSVNIX0FMVCAqLworI2luY2x1ZGUgImJsb3dmaXNoX2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfQkxPV0ZJU0hfQUxUICovCisKKyNlbmRpZiAvKiBibG93ZmlzaC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2JuX211bC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9ibl9tdWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWMzZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9ibl9tdWwuaApAQCAtMCwwICsxLDg4NSBAQAorLyoqCisgKiBcZmlsZSBibl9tdWwuaAorICoKKyAqIFxicmllZiAgTXVsdGktcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICAgICAgTXVsdGlwbHkgc291cmNlIHZlY3RvciBbc10gd2l0aCBiLCBhZGQgcmVzdWx0CisgKiAgICAgICB0byBkZXN0aW5hdGlvbiB2ZWN0b3IgW2RdIGFuZCBzZXQgY2FycnkgYy4KKyAqCisgKiAgICAgIEN1cnJlbnRseSBzdXBwb3J0czoKKyAqCisgKiAgICAgICAgIC4gSUEtMzIgKDM4NispICAgICAgICAgLiBBTUQ2NCAvIEVNNjRUCisgKiAgICAgICAgIC4gSUEtMzIgKFNTRTIpICAgICAgICAgLiBNb3Rvcm9sYSA2ODAwMAorICogICAgICAgICAuIFBvd2VyUEMsIDMyLWJpdCAgICAgIC4gTWljcm9CbGF6ZQorICogICAgICAgICAuIFBvd2VyUEMsIDY0LWJpdCAgICAgIC4gVHJpQ29yZQorICogICAgICAgICAuIFNQQVJDIHY4ICAgICAgICAgICAgIC4gQVJNIHYzKworICogICAgICAgICAuIEFscGhhICAgICAgICAgICAgICAgIC4gTUlQUzMyCisgKiAgICAgICAgIC4gQywgbG9uZ2xvbmcgICAgICAgICAgLiBDLCBnZW5lcmljCisgKi8KKyNpZm5kZWYgTUJFRFRMU19CTl9NVUxfSAorI2RlZmluZSBNQkVEVExTX0JOX01VTF9ICisKKyNpbmNsdWRlICJiaWdudW0uaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkKKworI2lmbmRlZiBhc20KKyNkZWZpbmUgYXNtIF9fYXNtCisjZW5kaWYKKworLyogYXJtY2M1IC0tZ251IGRlZmluZXMgX19HTlVDX18gYnV0IGRvZXNuJ3Qgc3VwcG9ydCBHTlUncyBleHRlbmRlZCBhc20gKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBcCisgICAgKCAhZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDAwMDAwICkKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibW92bCAgICUlZWJ4LCAlMCAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJTUsICUlZXNpICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlNiwgJSVlZGkgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICU3LCAlJWVjeCAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJTgsICUlZWJ4ICAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxvZHNsICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsbCAgICUlZWJ4ICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVlY3gsICAgJSVlYXggICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkY2wgICAkMCwgICAgICAlJWVkeCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICglJWVkaSksICUlZWF4ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGNsICAgJDAsICAgICAgJSVlZHggICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWVkeCwgICAlJWVjeCAgICAgIFxuXHQiICAgXAorICAgICAgICAic3Rvc2wgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1NTRTIpCisKKyNkZWZpbmUgTVVMQUREQ19IVUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlZWN4LCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlZWJ4LCAgICAgJSVtbTAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICglJWVkaSksICAgJSVtbTMgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW0zLCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICglJWVzaSksICAgJSVtbTIgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTIgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDQoJSVlc2kpLCAgJSVtbTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDgoJSVlc2kpLCAgJSVtbTYgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTYgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDEyKCUlZXNpKSwgJSVtbTcgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTcgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW0yLCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDQoJSVlZGkpLCAgJSVtbTMgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW00LCAgICAgJSVtbTMgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDgoJSVlZGkpLCAgJSVtbTUgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW02LCAgICAgJSVtbTUgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDEyKCUlZWRpKSwgJSVtbTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW00LCAgICAgJSVtbTcgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgKCUlZWRpKSAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDE2KCUlZXNpKSwgJSVtbTIgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTIgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDIwKCUlZXNpKSwgJSVtbTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW0zLCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDI0KCUlZXNpKSwgJSVtbTYgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTYgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgNCglJWVkaSkgICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDI4KCUlZXNpKSwgJSVtbTMgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBtdWx1ZHEgICUlbW0wLCAgICAgJSVtbTMgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW01LCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDE2KCUlZWRpKSwgJSVtbTUgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW01LCAgICAgJSVtbTIgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgOCglJWVkaSkgICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW03LCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDIwKCUlZWRpKSwgJSVtbTUgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW01LCAgICAgJSVtbTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgMTIoJSVlZGkpICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW0yLCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDI0KCUlZWRpKSwgJSVtbTUgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW01LCAgICAgJSVtbTYgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgMTYoJSVlZGkpICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW00LCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgIDI4KCUlZWRpKSwgJSVtbTUgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW01LCAgICAgJSVtbTMgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgMjAoJSVlZGkpICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW02LCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgMjQoJSVlZGkpICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBhZGRxICAgICUlbW0zLCAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgMjgoJSVlZGkpICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAgICQzMiwgICAgICAgJSVlZGkgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAgICQzMiwgICAgICAgJSVlc2kgICAgICBcblx0IiAgIFwKKyAgICAgICAgInBzcmxxICAgICQzMiwgICAgICAgJSVtbTEgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmQgICAgICUlbW0xLCAgICAgJSVlY3ggICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAiZW1tcyAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlNCwgJSVlYnggICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJSVlY3gsICUxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICUlZWRpLCAlMiAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWVzaSwgJTMgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAodCksICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHQpLCAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgXAorICAgICAgICA6ICJlYXgiLCAiZWN4IiwgImVkeCIsICJlc2kiLCAiZWRpIiAgICAgICAgICAgICBcCisgICAgKTsKKworI2Vsc2UKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIm1vdmwgICAlNCwgJSVlYnggICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJSVlY3gsICUxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICUlZWRpLCAlMiAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWVzaSwgJTMgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAodCksICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHQpLCAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgXAorICAgICAgICA6ICJlYXgiLCAiZWN4IiwgImVkeCIsICJlc2kiLCAiZWRpIiAgICAgICAgICAgICBcCisgICAgKTsKKyNlbmRpZiAvKiBTU0UyICovCisjZW5kaWYgLyogaTM4NiAqLworCisjaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQgKF9feDg2XzY0X18pCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJ4b3JxICAgJSVyOCwgJSVyOCAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIm1vdnEgICAoJSVyc2kpLCAlJXJheCAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVscSAgICUlcmJ4ICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDgsICAgICAgJSVyc2kgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHEgICAlJXJjeCwgICAlJXJheCAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92cSAgICUlcjgsICAgICUlcmN4ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGNxICAgJDAsICAgICAgJSVyZHggICAgICBcblx0IiAgIFwKKyAgICAgICAgIm5vcCAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICUlcmF4LCAgICglJXJkaSkgICAgXG5cdCIgICBcCisgICAgICAgICJhZGNxICAgJSVyZHgsICAgJSVyY3ggICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHEgICAkOCwgICAgICAlJXJkaSAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA6ICIrYyIgKGMpLCAiK0QiIChkKSwgIitTIiAocykgICAgICBcCisgICAgICAgIDogImIiIChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAicmF4IiwgInJkeCIsICJyOCIgICAgICAgICAgICAgICAgXAorICAgICk7CisKKyNlbmRpZiAvKiBBTUQ2NCAqLworCisjaWYgZGVmaW5lZChfX21jNjgwMjBfXykgfHwgZGVmaW5lZChfX21jcHUzMl9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIm1vdmwgICAlMywgJSVhMiAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZsICAgJTQsICUlYTMgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICU1LCAlJWQzICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlNiwgJSVkMiAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZlcSAgIzAsICUlZDAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZlbCAgJSVhMkArLCAlJWQxICAgIFxuXHQiICAgXAorICAgICAgICAibXVsdWwgICUlZDIsICUlZDQ6JSVkMSBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQzLCAlJWQxICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgJSVkNCAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZXEgICMwLCAgICUlZDMgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQxLCAlJWEzQCsgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkNCwgJSVkMyAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZsICAgJSVkMywgJTAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibW92bCAgICUlYTMsICUxICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmwgICAlJWEyLCAlMiAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAiZDAiLCAiZDEiLCAiZDIiLCAiZDMiLCAiZDQiLCAiYTIiLCAiYTMiICBcCisgICAgKTsKKworI2RlZmluZSBNVUxBRERDX0hVSVQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJtb3ZlbCAgJSVhMkArLCAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHVsICAlJWQyLCAgICAlJWQ0OiUlZDEgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDMsICAgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgICAgJSVkNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQxLCAgICAlJWEzQCsgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx1bCAgJSVkMiwgICAgJSVkMzolJWQxICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQ0LCAgICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICAgICUlZDMgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgICAgJSVhM0ArICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmVsICAlJWEyQCssICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsdWwgICUlZDIsICAgICUlZDQ6JSVkMSAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMywgICAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQwLCAgICAlJWQ0ICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICUlZDEsICAgICUlYTNAKyAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZlbCAgJSVhMkArLCAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHVsICAlJWQyLCAgICAlJWQzOiUlZDEgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDQsICAgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgICAgJSVkMyAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQxLCAgICAlJWEzQCsgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx1bCAgJSVkMiwgICAgJSVkNDolJWQxICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQzLCAgICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICAgICUlZDQgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgICAgJSVhM0ArICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1vdmVsICAlJWEyQCssICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsdWwgICUlZDIsICAgICUlZDM6JSVkMSAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkNCwgICAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQwLCAgICAlJWQzICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkbCAgICUlZDEsICAgICUlYTNAKyAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3ZlbCAgJSVhMkArLCAgJSVkMSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHVsICAlJWQyLCAgICAlJWQ0OiUlZDEgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDMsICAgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4bCAgJSVkMCwgICAgJSVkNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGwgICAlJWQxLCAgICAlJWEzQCsgICAgIFxuXHQiICAgXAorICAgICAgICAibW92ZWwgICUlYTJAKywgICUlZDEgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWx1bCAgJSVkMiwgICAgJSVkMzolJWQxICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQ0LCAgICAlJWQxICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkeGwgICUlZDAsICAgICUlZDMgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRsICAgJSVkMSwgICAgJSVhM0ArICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHhsICAlJWQwLCAgICAlJWQzICAgICAgIFxuXHQiCisKKyNlbmRpZiAvKiBNQzY4MDAwICovCisKKyNpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQoX19wcGM2NF9fKQorCisjaWYgZGVmaW5lZChfX01BQ0hfXykgJiYgZGVmaW5lZChfX0FQUExFX18pCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZCAgICAgcjMsICUzICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkICAgICByNCwgJTQgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGQgICAgIHI1LCAlNSAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZCAgICAgcjYsICU2ICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByMywgcjMsIC04ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgIHI0LCByNCwgLTggICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpYyAgcjUsIHI1LCAgMCAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxkdSAgICByNywgOChyMykgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVsbGQgIHI4LCByNywgcjYgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxoZHUgcjksIHI3LCByNiAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGUgICByOCwgcjgsIHI1ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGQgICAgIHI3LCA4KHI0KSAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR6ZSAgcjUsIHI5ICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgICByOCwgcjgsIHI3ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3RkdSAgIHI4LCA4KHI0KSAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJhZGR6ZSAgcjUsIHI1ICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByNCwgcjQsIDggICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgIHIzLCByMywgOCAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdGQgICAgcjUsICUwICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0ZCAgICByNCwgJTEgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3RkICAgIHIzLCAlMiAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAicjMiLCAicjQiLCAicjUiLCAicjYiLCAicjciLCAicjgiLCAicjkiICBcCisgICAgKTsKKworCisjZWxzZSAvKiBfX01BQ0hfXyAmJiBfX0FQUExFX18gKi8KKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxkICAgICAlJXIzLCAlMyAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGQgICAgICUlcjQsICU0ICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZCAgICAgJSVyNSwgJTUgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkICAgICAlJXI2LCAlNiAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjMsICUlcjMsIC04ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgJSVyNCwgJSVyNCwgLTggICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGljICAlJXI1LCAlJXI1LCAgMCAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibGR1ICAgICUlcjcsIDgoJSVyMykgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxsZCAgJSVyOCwgJSVyNywgJSVyNiAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bGhkdSAlJXI5LCAlJXI3LCAlJXI2ICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkZSAgICUlcjgsICUlcjgsICUlcjUgICAgXG5cdCIgICBcCisgICAgICAgICJsZCAgICAgJSVyNywgOCglJXI0KSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHplICAlJXI1LCAlJXI5ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgICUlcjgsICUlcjgsICUlcjcgICAgXG5cdCIgICBcCisgICAgICAgICJzdGR1ICAgJSVyOCwgOCglJXI0KSAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImFkZHplICAlJXI1LCAlJXI1ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjQsICUlcjQsIDggICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgJSVyMywgJSVyMywgOCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0ZCAgICAlJXI1LCAlMCAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3RkICAgICUlcjQsICUxICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdGQgICAgJSVyMywgJTIgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgICAgICBcCisgICAgICAgIDogIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgICAgICAgXAorICAgICAgICA6ICJyMyIsICJyNCIsICJyNSIsICJyNiIsICJyNyIsICJyOCIsICJyOSIgIFwKKyAgICApOworCisjZW5kaWYgLyogX19NQUNIX18gJiYgX19BUFBMRV9fICovCisKKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19wcGNfXykgLyogZW5kIFBQQzY0L2JlZ2luIFBQQzMyICAqLworCisjaWYgZGVmaW5lZChfX01BQ0hfXykgJiYgZGVmaW5lZChfX0FQUExFX18pCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibHd6ICAgIHIzLCAlMyAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3eiAgICByNCwgJTQgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd3ogICAgcjUsICU1ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHd6ICAgIHI2LCAlNiAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByMywgcjMsIC00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgcjQsIHI0LCAtNCAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaWMgIHI1LCByNSwgIDAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibHd6dSAgIHI3LCA0KHIzKSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bGx3ICByOCwgcjcsIHI2ICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxod3UgcjksIHI3LCByNiAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkZSAgIHI4LCByOCwgcjUgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3eiAgICByNywgNChyNCkgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR6ZSAgcjUsIHI5ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgIHI4LCByOCwgcjcgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0d3UgICByOCwgNChyNCkgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImFkZHplICByNSwgcjUgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgcjQsIHI0LCA0ICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgIHIzLCByMywgNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0dyAgICByNSwgJTAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHcgICAgcjQsICUxICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3R3ICAgIHIzLCAlMiAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgICAgICBcCisgICAgICAgIDogIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgICAgICAgXAorICAgICAgICA6ICJyMyIsICJyNCIsICJyNSIsICJyNiIsICJyNyIsICJyOCIsICJyOSIgIFwKKyAgICApOworCisjZWxzZSAvKiBfX01BQ0hfXyAmJiBfX0FQUExFX18gKi8KKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImx3eiAgICAlJXIzLCAlMyAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHd6ICAgICUlcjQsICU0ICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd3ogICAgJSVyNSwgJTUgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3eiAgICAlJXI2LCAlNiAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjMsICUlcjMsIC00ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgJSVyNCwgJSVyNCwgLTQgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGljICAlJXI1LCAlJXI1LCAgMCAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19DT1JFICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibHd6dSAgICUlcjcsIDQoJSVyMykgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtdWxsdyAgJSVyOCwgJSVyNywgJSVyNiAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bGh3dSAlJXI5LCAlJXI3LCAlJXI2ICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkZSAgICUlcjgsICUlcjgsICUlcjUgICAgXG5cdCIgICBcCisgICAgICAgICJsd3ogICAgJSVyNywgNCglJXI0KSAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHplICAlJXI1LCAlJXI5ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgICUlcjgsICUlcjgsICUlcjcgICAgXG5cdCIgICBcCisgICAgICAgICJzdHd1ICAgJSVyOCwgNCglJXI0KSAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImFkZHplICAlJXI1LCAlJXI1ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkaSAgICUlcjQsICUlcjQsIDQgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgJSVyMywgJSVyMywgNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0dyAgICAlJXI1LCAlMCAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3R3ICAgICUlcjQsICUxICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdHcgICAgJSVyMywgJTIgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgICAgICBcCisgICAgICAgIDogIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgICAgICAgXAorICAgICAgICA6ICJyMyIsICJyNCIsICJyNSIsICJyNiIsICJyNyIsICJyOCIsICJyOSIgIFwKKyAgICApOworCisjZW5kaWYgLyogX19NQUNIX18gJiYgX19BUFBMRV9fICovCisKKyNlbmRpZiAvKiBQUEMzMiAqLworCisvKgorICogVGhlIFNwYXJjKDY0KSBhc3NlbWJseSBpcyByZXBvcnRlZCB0byBiZSBicm9rZW4uCisgKiBEaXNhYmxlIGl0IGZvciBub3csIHVudGlsIHdlJ3JlIGFibGUgdG8gZml4IGl0LgorICovCisjaWYgMCAmJiBkZWZpbmVkKF9fc3BhcmNfXykKKyNpZiBkZWZpbmVkKF9fc3BhcmM2NF9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZHggICAgICUzLCAlJW8wICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImxkeCAgICAgJTQsICUlbzEgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICAlNSwgJSVvMiAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgICU2LCAlJW8zICAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgImxkICAgICAgWyUlbzBdLCAlJW80ICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiaW5jICAgICA0LCAlJW8wICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgIFslJW8xXSwgJSVvNSAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgInVtdWwgICAgJSVvMywgJSVvNCwgJSVvNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiYWRkY2MgICAlJW80LCAlJW8yLCAlJW80ICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJyZCAgICAgICUleSwgJSVnMSAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZHggICAgJSVnMSwgMCwgJSVnMSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiYWRkY2MgICAlJW80LCAlJW81LCAlJW80ICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJzdCAgICAgICUlbzQsIFslJW8xXSAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZHggICAgJSVnMSwgMCwgJSVvMiAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiaW5jICAgICA0LCAlJW8xICAgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJzdCAgICAgICUlbzIsICUwICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgInN0eCAgICAgJSVvMSwgJTEgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAic3R4ICAgICAlJW8wLCAlMiAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgXAorICAgICAgICA6ICJnMSIsICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICAgXAorICAgICAgICAgICJvNSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICApOworCisjZWxzZSAvKiBfX3NwYXJjNjRfXyAqLworCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgICUzLCAlJW8wICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImxkICAgICAgJTQsICUlbzEgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAibGQgICAgICAlNSwgJSVvMiAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgICU2LCAlJW8zICAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgImxkICAgICAgWyUlbzBdLCAlJW80ICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiaW5jICAgICA0LCAlJW8wICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJsZCAgICAgIFslJW8xXSwgJSVvNSAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgInVtdWwgICAgJSVvMywgJSVvNCwgJSVvNCAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiYWRkY2MgICAlJW80LCAlJW8yLCAlJW80ICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJyZCAgICAgICUleSwgJSVnMSAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZHggICAgJSVnMSwgMCwgJSVnMSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiYWRkY2MgICAlJW80LCAlJW81LCAlJW80ICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgICAgICJzdCAgICAgICUlbzQsIFslJW8xXSAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgImFkZHggICAgJSVnMSwgMCwgJSVvMiAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAiaW5jICAgICA0LCAlJW8xICAgICAgICAgICAgICAgIFxuXHQiCisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJzdCAgICAgICUlbzIsICUwICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAgICAgInN0ICAgICAgJSVvMSwgJTEgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICAgICAic3QgICAgICAlJW8wLCAlMiAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgXAorICAgICAgICA6ICJnMSIsICJvMCIsICJvMSIsICJvMiIsICJvMyIsICJvNCIsICAgXAorICAgICAgICAgICJvNSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICApOworCisjZW5kaWYgLyogX19zcGFyYzY0X18gKi8KKyNlbmRpZiAvKiBfX3NwYXJjX18gKi8KKworI2lmIGRlZmluZWQoX19taWNyb2JsYXplX18pIHx8IGRlZmluZWQobWljcm9ibGF6ZSkKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsd2kgICByMywgICAlMyAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHdpICAgcjQsICAgJTQgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3aSAgIHI1LCAgICU1ICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsd2kgICByNiwgICAlNiAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAiYW5kaSAgcjcsICAgcjYsIDB4ZmZmZiBcblx0IiAgIFwKKyAgICAgICAgImJzcmxpIHI2LCAgIHI2LCAxNiAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxodWkgIHI4LCAgIHIzLCAgIDAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICByMywgICByMywgICAyICAgIFxuXHQiICAgXAorICAgICAgICAibGh1aSAgcjksICAgcjMsICAgMCAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgIHIzLCAgIHIzLCAgIDIgICAgXG5cdCIgICBcCisgICAgICAgICJtdWwgICByMTAsICByOSwgIHI2ICAgIFxuXHQiICAgXAorICAgICAgICAibXVsICAgcjExLCAgcjgsICByNyAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bCAgIHIxMiwgIHI5LCAgcjcgICAgXG5cdCIgICBcCisgICAgICAgICJtdWwgICByMTMsICByOCwgIHI2ICAgIFxuXHQiICAgXAorICAgICAgICAiYnNybGkgIHI4LCByMTAsICAxNiAgICBcblx0IiAgIFwKKyAgICAgICAgImJzcmxpICByOSwgcjExLCAgMTYgICAgXG5cdCIgICBcCisgICAgICAgICJhZGQgICByMTMsIHIxMywgIHI4ICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkICAgcjEzLCByMTMsICByOSAgICBcblx0IiAgIFwKKyAgICAgICAgImJzbGxpIHIxMCwgcjEwLCAgMTYgICAgXG5cdCIgICBcCisgICAgICAgICJic2xsaSByMTEsIHIxMSwgIDE2ICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkICAgcjEyLCByMTIsIHIxMCAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGMgIHIxMywgcjEzLCAgcjAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGQgICByMTIsIHIxMiwgcjExICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgcjEzLCByMTMsICByMCAgICBcblx0IiAgIFwKKyAgICAgICAgImx3aSAgIHIxMCwgIHI0LCAgIDAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGQgICByMTIsIHIxMiwgcjEwICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkYyAgcjEzLCByMTMsICByMCAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZCAgIHIxMiwgcjEyLCAgcjUgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRjICAgcjUsIHIxMywgIHIwICAgIFxuXHQiICAgXAorICAgICAgICAic3dpICAgcjEyLCAgcjQsICAgMCAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICByNCwgIHI0LCAgIDQgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgInN3aSAgIHI1LCAgICUwICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzd2kgICByNCwgICAlMSAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3dpICAgcjMsICAgJTIgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgICAgICBcCisgICAgICAgIDogIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgICAgICAgXAorICAgICAgICA6ICJyMyIsICJyNCIgICJyNSIsICJyNiIsICJyNyIsICJyOCIsICAgICAgIFwKKyAgICAgICAgICAicjkiLCAicjEwIiwgInIxMSIsICJyMTIiLCAicjEzIiAgICAgICAgICBcCisgICAgKTsKKworI2VuZGlmIC8qIE1pY3JvQmxhemUgKi8KKworI2lmIGRlZmluZWQoX190cmljb3JlX18pCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxkLmEgICAlJWEyLCAlMyAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkLmEgICAlJWEzLCAlNCAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkLncgICAlJWQ0LCAlNSAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkLncgICAlJWQxLCAlNiAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInhvciAgICAlJWQ1LCAlJWQ1ICAgICAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJsZC53ICAgJSVkMCwgICBbJSVhMitdICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJtYWRkLnUgJSVlMiwgJSVlNCwgJSVkMCwgJSVkMSAgXG5cdCIgICBcCisgICAgICAgICJsZC53ICAgJSVkMCwgICBbJSVhM10gICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR4ICAgJSVkMiwgICAgJSVkMiwgICUlZDAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRjICAgJSVkMywgICAgJSVkMywgICAgMCAgICAgXG5cdCIgICBcCisgICAgICAgICJtb3YgICAgJSVkNCwgICAgJSVkMyAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdC53ICBbJSVhMytdLCAgJSVkMiAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAic3QudyAgICUwLCAlJWQ0ICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3QuYSAgICUxLCAlJWEzICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3QuYSAgICUyLCAlJWEyICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICA6ICI9bSIgKGMpLCAiPW0iIChkKSwgIj1tIiAocykgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgXAorICAgICAgICA6ICJkMCIsICJkMSIsICJlMiIsICJkNCIsICJhMiIsICJhMyIgICAgXAorICAgICk7CisKKyNlbmRpZiAvKiBUcmlDb3JlICovCisKKy8qCisgKiBnY2MgLU8wIGJ5IGRlZmF1bHQgdXNlcyByNyBmb3IgdGhlIGZyYW1lIHBvaW50ZXIsIHNvIGl0IGNvbXBsYWlucyBhYm91dCBvdXIKKyAqIHVzZSBvZiByNyBiZWxvdywgdW5sZXNzIC1mb21pdC1mcmFtZS1wb2ludGVyIGlzIHBhc3NlZC4gVW5mb3J0dW5hdGVseSwKKyAqIHBhc3NpbmcgdGhhdCBvcHRpb24gaXMgbm90IGVhc3kgd2hlbiBidWlsZGluZyB3aXRoIHlvdHRhLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCAtZm9taXQtZnJhbWUtcG9pbnRlciBpcyBpbXBsaWVkIGJ5IGFueSAtT3ggb3B0aW9ucyB3aXRoCisgKiB4ICE9MCwgd2hpY2ggd2UgY2FuIGRldGVjdCB1c2luZyBfX09QVElNSVpFX18gKHdoaWNoIGlzIGFsc28gZGVmaW5lZCBieQorICogY2xhbmcgYW5kIGFybWNjNSB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zKS4KKyAqCisgKiBTbywgb25seSB1c2UgdGhlIG9wdGltaXplZCBhc3NlbWJseSBiZWxvdyBmb3Igb3B0aW1pemVkIGJ1aWxkLCB3aGljaCBhdm9pZHMKKyAqIHRoZSBidWlsZCBlcnJvciBhbmQgaXMgcHJldHR5IHJlYXNvbmFibGUgYW55d2F5LgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19PUFRJTUlaRV9fKQorI2RlZmluZSBNVUxBRERDX0NBTk5PVF9VU0VfUjcKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2FybV9fKSAmJiAhZGVmaW5lZChNVUxBRERDX0NBTk5PVF9VU0VfUjcpCisKKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgJiYgIWRlZmluZWQoX190aHVtYjJfXykKKworI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjAsICUzICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxkciAgICByMSwgJTQgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibGRyICAgIHIyLCAlNSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjMsICU2ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzciAgICByNywgcjMsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibW92ICAgIHI5LCByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc2wgICAgcjcsIHIzLCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzciAgICByNywgcjcsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibW92ICAgIHI4LCByNyAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJsZG1pYSAgcjAhLCB7cjZ9ICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzciAgICByNywgcjYsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibHNsICAgIHI2LCByNiwgIzE2ICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc3IgICAgcjYsIHI2LCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm1vdiAgICByNCwgcjggICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibXVsICAgIHI0LCByNiAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJtb3YgICAgcjMsIHI5ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm11bCAgICByNiwgcjMgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibW92ICAgIHI1LCByOSAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJtdWwgICAgcjUsIHI3ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgIm1vdiAgICByMywgcjggICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibXVsICAgIHI3LCByMyAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsc3IgICAgcjMsIHI2LCAjMTYgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImFkZCAgICByNSwgcjUsIHIzICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibHNyICAgIHIzLCByNywgIzE2ICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGQgICAgcjUsIHI1LCByMyAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImFkZCAgICByNCwgcjQsIHIyICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibW92ICAgIHIyLCAjMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGMgICAgcjUsIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzbCAgICByMywgcjYsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRkICAgIHI0LCByNCwgcjMgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGMgICAgcjUsIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxzbCAgICByMywgcjcsICMxNiAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRkICAgIHI0LCByNCwgcjMgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGMgICAgcjUsIHIyICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxkciAgICByMywgW3IxXSAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAiYWRkICAgIHI0LCByNCwgcjMgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGMgICAgcjIsIHI1ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgInN0bWlhICByMSEsIHtyNH0gICAgICAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAic3RyICAgIHIyLCAlMCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJzdHIgICAgcjEsICUxICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgInN0ciAgICByMCwgJTIgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICA6ICI9bSIgKGMpLCAgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICBcCisgICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICBcCisgICAgICAgICA6ICJyMCIsICJyMSIsICJyMiIsICJyMyIsICJyNCIsICJyNSIsICBcCisgICAgICAgICAgICJyNiIsICJyNyIsICJyOCIsICJyOSIsICJjYyIgICAgICAgICBcCisgICAgICAgICApOworCisjZWxzZQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhc20oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgImxkciAgICByMCwgJTMgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAibGRyICAgIHIxLCAlNCAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJsZHIgICAgcjIsICU1ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxkciAgICByMywgJTYgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAibGRyICAgIHI0LCBbcjBdLCAjNCAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJtb3YgICAgcjUsICMwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImxkciAgICByNiwgW3IxXSAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAidW1sYWwgIHIyLCByNSwgcjMsIHI0ICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgICAgICJhZGRzICAgcjcsIHI2LCByMiAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgImFkYyAgICByMiwgcjUsICMwICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAic3RyICAgIHI3LCBbcjFdLCAjNCAgICAgICAgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJzdHIgICAgcjIsICUwICAgICAgICAgICAgICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAgICAgInN0ciAgICByMSwgJTEgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICAgICAic3RyICAgIHIwLCAlMiAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIDogIj1tIiAoYyksICAiPW0iIChkKSwgIj1tIiAocykgICAgICAgIFwKKyAgICAgICAgIDogIm0iIChzKSwgIm0iIChkKSwgIm0iIChjKSwgIm0iIChiKSAgIFwKKyAgICAgICAgIDogInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1IiwgIFwKKyAgICAgICAgICAgInI2IiwgInI3IiwgImNjIiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICk7CisKKyNlbmRpZiAvKiBUaHVtYiAqLworCisjZW5kaWYgLyogQVJNdjMgKi8KKworI2lmIGRlZmluZWQoX19hbHBoYV9fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzbSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxkcSAgICAkMSwgJTMgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsZHEgICAgJDIsICU0ICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibGRxICAgICQzLCAlNSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkcSAgICAkNCwgJTYgICAgICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImxkcSAgICAkNiwgIDAoJDEpICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDEsICA4LCAkMSAgICAgIFxuXHQiICAgXAorICAgICAgICAibXVscSAgICQ2LCAkNCwgJDcgICAgICBcblx0IiAgIFwKKyAgICAgICAgInVtdWxoICAkNiwgJDQsICQ2ICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDcsICQzLCAkNyAgICAgIFxuXHQiICAgXAorICAgICAgICAiY21wdWx0ICQ3LCAkMywgJDMgICAgICBcblx0IiAgIFwKKyAgICAgICAgImxkcSAgICAkNSwgIDAoJDIpICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDcsICQ1LCAkNyAgICAgIFxuXHQiICAgXAorICAgICAgICAiY21wdWx0ICQ3LCAkNSwgJDUgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0cSAgICAkNywgIDAoJDIpICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRxICAgJDIsICA4LCAkMiAgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkcSAgICQ2LCAkMywgJDMgICAgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHEgICAkNSwgJDMsICQzICAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICJzdHEgICAgJDMsICUwICAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3RxICAgICQyLCAlMSAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgInN0cSAgICAkMSwgJTIgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgIDogIj1tIiAoYyksICI9bSIgKGQpLCAiPW0iIChzKSAgICAgICAgICAgICAgXAorICAgICAgICA6ICJtIiAocyksICJtIiAoZCksICJtIiAoYyksICJtIiAoYikgICAgICAgIFwKKyAgICAgICAgOiAiJDEiLCAiJDIiLCAiJDMiLCAiJDQiLCAiJDUiLCAiJDYiLCAiJDciICBcCisgICAgKTsKKyNlbmRpZiAvKiBBbHBoYSAqLworCisjaWYgZGVmaW5lZChfX21pcHNfXykgJiYgIWRlZmluZWQoX19taXBzNjQpCisKKyNkZWZpbmUgTVVMQUREQ19JTklUICAgICAgICAgICAgICAgICAgICBcCisgICAgYXNtKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibHcgICAgICQxMCwgJTMgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgImx3ICAgICAkMTEsICU0ICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJsdyAgICAgJDEyLCAlNSAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAibHcgICAgICQxMywgJTYgICAgICAgICBcblx0IgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAibHcgICAgICQxNCwgMCgkMTApICAgICBcblx0IiAgIFwKKyAgICAgICAgIm11bHR1ICAkMTMsICQxNCAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGRpICAgJDEwLCAkMTAsIDQgICAgIFxuXHQiICAgXAorICAgICAgICAibWZsbyAgICQxNCAgICAgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgIm1maGkgICAkOSAgICAgICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJhZGR1ICAgJDE0LCAkMTIsICQxNCAgIFxuXHQiICAgXAorICAgICAgICAibHcgICAgICQxNSwgMCgkMTEpICAgICBcblx0IiAgIFwKKyAgICAgICAgInNsdHUgICAkMTIsICQxNCwgJDEyICAgXG5cdCIgICBcCisgICAgICAgICJhZGR1ICAgJDE1LCAkMTQsICQxNSAgIFxuXHQiICAgXAorICAgICAgICAic2x0dSAgICQxNCwgJDE1LCAkMTQgICBcblx0IiAgIFwKKyAgICAgICAgImFkZHUgICAkMTIsICQxMiwgJDkgICAgXG5cdCIgICBcCisgICAgICAgICJzdyAgICAgJDE1LCAwKCQxMSkgICAgIFxuXHQiICAgXAorICAgICAgICAiYWRkdSAgICQxMiwgJDEyLCAkMTQgICBcblx0IiAgIFwKKyAgICAgICAgImFkZGkgICAkMTEsICQxMSwgNCAgICAgXG5cdCIKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgInN3ICAgICAkMTIsICUwICAgICAgICAgXG5cdCIgICBcCisgICAgICAgICJzdyAgICAgJDExLCAlMSAgICAgICAgIFxuXHQiICAgXAorICAgICAgICAic3cgICAgICQxMCwgJTIgICAgICAgICBcblx0IiAgIFwKKyAgICAgICAgOiAiPW0iIChjKSwgIj1tIiAoZCksICI9bSIgKHMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAibSIgKHMpLCAibSIgKGQpLCAibSIgKGMpLCAibSIgKGIpICAgICAgICAgICAgICAgIFwKKyAgICAgICAgOiAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiICAgIFwKKyAgICApOworCisjZW5kaWYgLyogTUlQUyAqLworI2VuZGlmIC8qIEdOVUMgKi8KKworI2lmIChkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NX0lYODYpKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGVzaSwgcyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGVkaSwgZCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGVjeCwgYyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGVieCwgYgorCisjZGVmaW5lIE1VTEFERENfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBsb2RzZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtdWwgICAgIGVieCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBhZGQgICAgIGVheCwgZWN4ICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBhZGMgICAgIGVkeCwgMCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBhZGQgICAgIGVheCwgW2VkaV0gICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBhZGMgICAgIGVkeCwgMCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBtb3YgICAgIGVjeCwgZWR4ICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gICBzdG9zZAorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfU1NFMikKKworI2RlZmluZSBFTUlUIF9fYXNtIF9lbWl0CisKKyNkZWZpbmUgTVVMQUREQ19IVUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweEM5ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweEMzICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDFGICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENCICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDE2ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEQwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDY2ICBFTUlUIDB4MDQgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEUwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDc2ICBFTUlUIDB4MDggIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEYwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDdFICBFTUlUIDB4MEMgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEY4ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENBICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDVGICBFTUlUIDB4MDQgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweERDICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDZGICBFTUlUIDB4MDggIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweEVFICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDY3ICBFTUlUIDB4MEMgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweEZDICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDBGICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDU2ICBFTUlUIDB4MTAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEQwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDY2ICBFTUlUIDB4MTQgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEUwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENCICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDc2ICBFTUlUIDB4MTggIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEYwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MDQgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDVFICBFTUlUIDB4MUMgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhGNCAgRU1JVCAweEQ4ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENEICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDZGICBFTUlUIDB4MTAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweEQ1ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MDggIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENGICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDZGICBFTUlUIDB4MTQgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweEU1ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MEMgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENBICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDZGICBFTUlUIDB4MTggIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweEY1ICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MTAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENDICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg2RSAgRU1JVCAweDZGICBFTUlUIDB4MUMgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweEREICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MTQgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENFICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MTggIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHhENCAgRU1JVCAweENCICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweDRGICBFTUlUIDB4MUMgIFwKKyAgICBFTUlUIDB4ODMgIEVNSVQgMHhDNyAgRU1JVCAweDIwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4ODMgIEVNSVQgMHhDNiAgRU1JVCAweDIwICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3MyAgRU1JVCAweEQxICBFTUlUIDB4MjAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3RSAgRU1JVCAweEM5CisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFTUlUIDB4MEYgIEVNSVQgMHg3NyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbSAgIG1vdiAgICAgYywgZWN4ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbSAgIG1vdiAgICAgZCwgZWRpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2FzbSAgIG1vdiAgICAgcywgZXNpICAgICAgICAgICAgICAgICAgICAgIFwKKworI2Vsc2UKKworI2RlZmluZSBNVUxBRERDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBjLCBlY3ggICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBkLCBlZGkgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtICAgbW92ICAgICBzLCBlc2kgICAgICAgICAgICAgICAgICAgICAgXAorCisjZW5kaWYgLyogU1NFMiAqLworI2VuZGlmIC8qIE1TVkMgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9BU00gKi8KKworI2lmICFkZWZpbmVkKE1VTEFERENfQ09SRSkKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9VREJMKQorCisjZGVmaW5lIE1VTEFERENfSU5JVCAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3RfdWRibCByOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21waV91aW50IHIwLCByMTsKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgIFwKKyAgICByICAgPSAqKHMrKykgKiAobWJlZHRsc190X3VkYmwpIGI7ICAgICAgICAgIFwKKyAgICByMCAgPSAobWJlZHRsc19tcGlfdWludCkgcjsgICAgICAgICAgICAgICAgICAgXAorICAgIHIxICA9IChtYmVkdGxzX21waV91aW50KSggciA+PiBiaUwgKTsgICAgICAgICBcCisgICAgcjAgKz0gYzsgIHIxICs9IChyMCA8ICBjKTsgICAgICAgICAgXAorICAgIHIwICs9ICpkOyByMSArPSAocjAgPCAqZCk7ICAgICAgICAgIFwKKyAgICBjID0gcjE7ICooZCsrKSA9IHIwOworCisjZGVmaW5lIE1VTEFERENfU1RPUCAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZWxzZQorI2RlZmluZSBNVUxBRERDX0lOSVQgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19tcGlfdWludCBzMCwgczEsIGIwLCBiMTsgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21waV91aW50IHIwLCByMSwgcngsIHJ5OyAgICAgICAgICAgICAgXAorICAgIGIwID0gKCBiIDw8IGJpSCApID4+IGJpSDsgICAgICAgICAgIFwKKyAgICBiMSA9ICggYiA+PiBiaUggKTsKKworI2RlZmluZSBNVUxBRERDX0NPUkUgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzMCA9ICggKnMgPDwgYmlIICkgPj4gYmlIOyAgICAgICAgICBcCisgICAgczEgPSAoICpzID4+IGJpSCApOyBzKys7ICAgICAgICAgICAgXAorICAgIHJ4ID0gczAgKiBiMTsgcjAgPSBzMCAqIGIwOyAgICAgICAgIFwKKyAgICByeSA9IHMxICogYjA7IHIxID0gczEgKiBiMTsgICAgICAgICBcCisgICAgcjEgKz0gKCByeCA+PiBiaUggKTsgICAgICAgICAgICAgICAgXAorICAgIHIxICs9ICggcnkgPj4gYmlIICk7ICAgICAgICAgICAgICAgIFwKKyAgICByeCA8PD0gYmlIOyByeSA8PD0gYmlIOyAgICAgICAgICAgICBcCisgICAgcjAgKz0gcng7IHIxICs9IChyMCA8IHJ4KTsgICAgICAgICAgXAorICAgIHIwICs9IHJ5OyByMSArPSAocjAgPCByeSk7ICAgICAgICAgIFwKKyAgICByMCArPSAgYzsgcjEgKz0gKHIwIDwgIGMpOyAgICAgICAgICBcCisgICAgcjAgKz0gKmQ7IHIxICs9IChyMCA8ICpkKTsgICAgICAgICAgXAorICAgIGMgPSByMTsgKihkKyspID0gcjA7CisKKyNkZWZpbmUgTVVMQUREQ19TVE9QICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNlbmRpZiAvKiBDIChnZW5lcmljKSAgKi8KKyNlbmRpZiAvKiBDIChsb25nbG9uZykgKi8KKworI2VuZGlmIC8qIGJuX211bC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NhbWVsbGlhLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NhbWVsbGlhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyNGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2FtZWxsaWEuaApAQCAtMCwwICsxLDIzNSBAQAorLyoqCisgKiBcZmlsZSBjYW1lbGxpYS5oCisgKgorICogXGJyaWVmIENhbWVsbGlhIGJsb2NrIGNpcGhlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0NBTUVMTElBX0gKKyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBUICAgICAxCisjZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCAgICAgMAorCisjZGVmaW5lIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSCAgICAgICAgICAgLTB4MDAyNCAgLyoqPCBJbnZhbGlkIGtleSBsZW5ndGguICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfSU5QVVRfTEVOR1RIICAgICAgICAgLTB4MDAyNiAgLyoqPCBJbnZhbGlkIGRhdGEgaW5wdXQgbGVuZ3RoLiAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENBTUVMTElBIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IG5yOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIG51bWJlciBvZiByb3VuZHMgICovCisgICAgdWludDMyX3QgcmtbNjhdOyAgICAgICAgICAgIC8qITwgIENBTUVMTElBIHJvdW5kIGtleXMgICAgKi8KK30KK21iZWR0bHNfY2FtZWxsaWFfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBDQU1FTExJQSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIENBTUVMTElBIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2NhbWVsbGlhX2luaXQoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsZWFyIENBTUVMTElBIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ0FNRUxMSUEgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDQU1FTExJQSBrZXkgc2NoZWR1bGUgKGVuY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgIENBTUVMTElBIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICBlbmNyeXB0aW9uIGtleQorICogXHBhcmFtIGtleWJpdHMgIG11c3QgYmUgMTI4LCAxOTIgb3IgMjU2CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ0FNRUxMSUEga2V5IHNjaGVkdWxlIChkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBDQU1FTExJQSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgZGVjcnlwdGlvbiBrZXkKKyAqIFxwYXJhbSBrZXliaXRzICBtdXN0IGJlIDEyOCwgMTkyIG9yIDI1NgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSAorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZGVjKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENBTUVMTElBLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ0FNRUxMSUEgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCBvciBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQKKyAqIFxwYXJhbSBpbnB1dCAgICAxNi1ieXRlIGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgMTYtYnl0ZSBvdXRwdXQgYmxvY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ0FNRUxMSUEtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqICAgICAgICAgICAgICAgICBMZW5ndGggc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrCisgKiAgICAgICAgICAgICAgICAgc2l6ZSAoMTYgYnl0ZXMpCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBDQU1FTExJQSBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBUIG9yIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfSU5QVVRfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NiYyggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ0FNRUxMSUEtQ0ZCMTI4IGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBOb3RlOiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBDRkIgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUga2V5IHNjaGVkdWxlIGZvcgorICogYm90aCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLiBTbyBhIGNvbnRleHQgaW5pdGlhbGl6ZWQgd2l0aAorICogbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCkgZm9yIGJvdGggTUJFRFRMU19DQU1FTExJQV9FTkNSWVBUIGFuZCBDQU1FTExJRV9ERUNSWVBULgorICoKKyAqIFxub3RlICAgICAgICAgICBVcG9uIGV4aXQsIHRoZSBjb250ZW50IG9mIHRoZSBJViBpcyB1cGRhdGVkIHNvIHRoYXQgeW91IGNhbgorICogICAgICAgICAgICAgICAgIGNhbGwgdGhlIGZ1bmN0aW9uIHNhbWUgZnVuY3Rpb24gYWdhaW4gb24gdGhlIGZvbGxvd2luZworICogICAgICAgICAgICAgICAgIGJsb2NrKHMpIG9mIGRhdGEgYW5kIGdldCB0aGUgc2FtZSByZXN1bHQgYXMgaWYgaXQgd2FzCisgKiAgICAgICAgICAgICAgICAgZW5jcnlwdGVkIGluIG9uZSBjYWxsLiBUaGlzIGFsbG93cyBhICJzdHJlYW1pbmciIHVzYWdlLgorICogICAgICAgICAgICAgICAgIElmIG9uIHRoZSBvdGhlciBoYW5kIHlvdSBuZWVkIHRvIHJldGFpbiB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgSVYsIHlvdSBzaG91bGQgZWl0aGVyIHNhdmUgaXQgbWFudWFsbHkgb3IgdXNlIHRoZSBjaXBoZXIKKyAqICAgICAgICAgICAgICAgICBtb2R1bGUgaW5zdGVhZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ0FNRUxMSUEgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCBvciBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdl9vZmYgICBvZmZzZXQgaW4gSVYgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfSU5QVVRfTEVOR1RICisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NmYjEyOCggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKml2X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ0FNRUxMSUEtQ1RSIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBXYXJuaW5nOiBZb3UgaGF2ZSB0byBrZWVwIHRoZSBtYXhpbXVtIHVzZSBvZiB5b3VyIGNvdW50ZXIgaW4gbWluZCEKKyAqCisgKiBOb3RlOiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBDVFIgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUga2V5IHNjaGVkdWxlIGZvcgorICogYm90aCBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLiBTbyBhIGNvbnRleHQgaW5pdGlhbGl6ZWQgd2l0aAorICogbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCkgZm9yIGJvdGggTUJFRFRMU19DQU1FTExJQV9FTkNSWVBUIGFuZCBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ0FNRUxMSUEgY29udGV4dAorICogXHBhcmFtIGxlbmd0aCAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorICogXHBhcmFtIG5jX29mZiAgICAgICAgVGhlIG9mZnNldCBpbiB0aGUgY3VycmVudCBzdHJlYW1fYmxvY2sgKGZvciByZXN1bWluZworICogICAgICAgICAgICAgICAgICAgICAgd2l0aGluIGN1cnJlbnQgY2lwaGVyIHN0cmVhbSkuIFRoZSBvZmZzZXQgcG9pbnRlciB0bworICogICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIDAgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyZWFtLgorICogXHBhcmFtIG5vbmNlX2NvdW50ZXIgVGhlIDEyOC1iaXQgbm9uY2UgYW5kIGNvdW50ZXIuCisgKiBccGFyYW0gc3RyZWFtX2Jsb2NrICBUaGUgc2F2ZWQgc3RyZWFtLWJsb2NrIGZvciByZXN1bWluZy4gSXMgb3ZlcndyaXR0ZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBmdW5jdGlvbi4KKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIFRoZSBpbnB1dCBkYXRhIHN0cmVhbQorICogXHBhcmFtIG91dHB1dCAgICAgICAgVGhlIG91dHB1dCBkYXRhIHN0cmVhbQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY3RyKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuY19vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbm9uY2VfY291bnRlclsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX2Jsb2NrWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX0NBTUVMTElBX0FMVCAqLworI2luY2x1ZGUgImNhbWVsbGlhX2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogY2FtZWxsaWEuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jY20uaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3NTgzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2NtLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKgorICogXGZpbGUgY2NtLmgKKyAqCisgKiBcYnJpZWYgQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkgZm9yIDEyOC1iaXQgYmxvY2sgY2lwaGVycworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0NDTV9ICisjZGVmaW5lIE1CRURUTFNfQ0NNX0gKKworI2luY2x1ZGUgImNpcGhlci5oIgorCisjZGVmaW5lIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgICAgICAtMHgwMDBEIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRCAgICAtMHgwMDBGIC8qKjwgQXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIGZhaWxlZC4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBDQ00gY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjaXBoZXJfY3R4OyAgICAvKiE8IGNpcGhlciBjb250ZXh0IHVzZWQgKi8KK30KK21iZWR0bHNfY2NtX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIENDTSBjb250ZXh0IChqdXN0IG1ha2VzIHJlZmVyZW5jZXMgdmFsaWQpCisgKiAgICAgICAgICAgICAgICAgIE1ha2VzIHRoZSBjb250ZXh0IHJlYWR5IGZvciBtYmVkdGxzX2NjbV9zZXRrZXkoKSBvcgorICogICAgICAgICAgICAgICAgICBtYmVkdGxzX2NjbV9mcmVlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDQ00gY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19jY21faW5pdCggbWJlZHRsc19jY21fY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDQ00gaW5pdGlhbGl6YXRpb24gKGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDQ00gY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGNpcGhlciAgICBjaXBoZXIgdG8gdXNlIChhIDEyOC1iaXQgYmxvY2sgY2lwaGVyKQorICogXHBhcmFtIGtleSAgICAgICBlbmNyeXB0aW9uIGtleQorICogXHBhcmFtIGtleWJpdHMgICBrZXkgc2l6ZSBpbiBiaXRzIChtdXN0IGJlIGFjY2VwdGFibGUgYnkgdGhlIGNpcGhlcikKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBjaXBoZXIgc3BlY2lmaWMgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19jY21fc2V0a2V5KCBtYmVkdGxzX2NjbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9pZF90IGNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIGEgQ0NNIGNvbnRleHQgYW5kIHVuZGVybHlpbmcgY2lwaGVyIHN1Yi1jb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDQ00gY29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc19jY21fZnJlZSggbWJlZHRsc19jY21fY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDQ00gYnVmZmVyIGVuY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENDTSBjb250ZXh0CisgKiBccGFyYW0gbGVuZ3RoICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YSBpbiBieXRlcworICogXHBhcmFtIGl2ICAgICAgICBub25jZSAoaW5pdGlhbGl6YXRpb24gdmVjdG9yKQorICogXHBhcmFtIGl2X2xlbiAgICBsZW5ndGggb2YgSVYgaW4gYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgbXVzdCBiZSAyLCAzLCA0LCA1LCA2LCA3IG9yIDgKKyAqIFxwYXJhbSBhZGQgICAgICAgYWRkaXRpb25hbCBkYXRhCisgKiBccGFyYW0gYWRkX2xlbiAgIGxlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEgaW4gYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgbXVzdCBiZSBsZXNzIHRoYW4gMl4xNiAtIDJeOAorICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKiAgICAgICAgICAgICAgICAgIG11c3QgYmUgYXQgbGVhc3QgJ2xlbmd0aCcgYnl0ZXMgd2lkZQorICogXHBhcmFtIHRhZyAgICAgICBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIHRhZworICogXHBhcmFtIHRhZ19sZW4gICBsZW5ndGggb2YgdGhlIHRhZyB0byBnZW5lcmF0ZSBpbiBieXRlcworICogICAgICAgICAgICAgICAgICBtdXN0IGJlIDQsIDYsIDgsIDEwLCAxNCBvciAxNgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIHRhZyBpcyB3cml0dGVuIHRvIGEgc2VwYXJhdGUgYnVmZmVyLiBUbyBnZXQgdGhlIHRhZworICogICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgb3V0cHV0IGFzIGluIHRoZSBDQ00gc3BlYywgdXNlCisgKiAgICAgICAgICAgICAgICAgIHRhZyA9IG91dHB1dCArIGxlbmd0aCBhbmQgbWFrZSBzdXJlIHRoZSBvdXRwdXQgYnVmZmVyIGlzCisgKiAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IGxlbmd0aCArIHRhZ19sZW4gd2lkZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnKCBtYmVkdGxzX2NjbV9jb250ZXh0ICpjdHgsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLCBzaXplX3QgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENDTSBidWZmZXIgYXV0aGVudGljYXRlZCBkZWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDQ00gY29udGV4dAorICogXHBhcmFtIGxlbmd0aCAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICAgaW5pdGlhbGl6YXRpb24gdmVjdG9yCisgKiBccGFyYW0gaXZfbGVuICAgIGxlbmd0aCBvZiBJVgorICogXHBhcmFtIGFkZCAgICAgICBhZGRpdGlvbmFsIGRhdGEKKyAqIFxwYXJhbSBhZGRfbGVuICAgbGVuZ3RoIG9mIGFkZGl0aW9uYWwgZGF0YQorICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKiBccGFyYW0gdGFnICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgbGVuZ3RoIG9mIHRoZSB0YWcKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIGFuZCBhdXRoZW50aWNhdGVkLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRCBpZiB0YWcgZG9lcyBub3QgbWF0Y2gKKyAqLworaW50IG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdCggbWJlZHRsc19jY21fY29udGV4dCAqY3R4LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwgc2l6ZV90IGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19jY21fc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICYmIE1CRURUTFNfQUVTX0MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2VydHMuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2VydHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTQ5MDg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jZXJ0cy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qKgorICogXGZpbGUgY2VydHMuaAorICoKKyAqIFxicmllZiBTYW1wbGUgY2VydGlmaWNhdGVzIGFuZCBESE0gcGFyYW1ldGVycyBmb3IgdGVzdGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0NFUlRTX0gKKyNkZWZpbmUgTUJFRFRMU19DRVJUU19ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorLyogQ29uY2F0ZW5hdGlvbiBvZiBhbGwgQ0EgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQgaWYgYXZhaWxhYmxlICovCitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9jYXNfcGVtW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYXNfcGVtX2xlbjsKKyNlbmRpZgorCisvKiBMaXN0IG9mIGFsbCBDQSBjZXJ0aWZpY2F0ZXMsIHRlcm1pbmF0ZWQgYnkgTlVMTCAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKiBtYmVkdGxzX3Rlc3RfY2FzW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYXNfbGVuW107CisKKy8qCisgKiBDb252ZW5pZW5jZSBmb3IgdXNlcnMgd2hvIGp1c3Qgd2FudCBhIGNlcnRpZmljYXRlOgorICogUlNBIGJ5IGRlZmF1bHQsIG9yIEVDRFNBIGlmIFJTQSBpcyBub3QgYXZhaWxhYmxlCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X2NhX2NydDsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2NydF9sZW47CitleHRlcm4gY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9jYV9rZXk7CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9rZXlfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBtYmVkdGxzX3Rlc3RfY2FfcHdkOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfcHdkX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X3Nydl9jcnQ7CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfY3J0X2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X3Nydl9rZXk7CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfa2V5X2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X2NsaV9jcnQ7CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfY3J0X2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICogbWJlZHRsc190ZXN0X2NsaV9rZXk7CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfa2V5X2xlbjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9jcnRfZWNfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9rZXlfZWNfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9wd2RfZWNfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lY1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lY19sZW47CitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2VjW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfa2V5X2VjX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NsaV9jcnRfZWNbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9jcnRfZWNfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2xpX2tleV9lY1tdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9lY19sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NhX2NydF9yc2FbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2NydF9yc2FfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2Ffa2V5X3JzYVtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2Ffa2V5X3JzYV9sZW47CitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9jYV9wd2RfcnNhW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9wd2RfcnNhX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfcnNhW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfY3J0X3JzYV9sZW47CitleHRlcm4gY29uc3QgY2hhciAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X3JzYVtdOworZXh0ZXJuIGNvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2FfbGVuOworZXh0ZXJuIGNvbnN0IGNoYXIgICBtYmVkdGxzX3Rlc3RfY2xpX2NydF9yc2FbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhX2xlbjsKK2V4dGVybiBjb25zdCBjaGFyICAgbWJlZHRsc190ZXN0X2NsaV9rZXlfcnNhW107CitleHRlcm4gY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfa2V5X3JzYV9sZW47CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGNlcnRzLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2hlY2tfY29uZmlnLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NoZWNrX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlODZjMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NoZWNrX2NvbmZpZy5oCkBAIC0wLDAgKzEsNjI4IEBACisvKioKKyAqIFxmaWxlIGNoZWNrX2NvbmZpZy5oCisgKgorICogXGJyaWVmIENvbnNpc3RlbmN5IGNoZWNrcyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBmcm9tIHlvdXIgY29uZmlnLmgKKyAqIGluIG9yZGVyIHRvIGNhdGNoIGRlcGVuZGVuY3kgaXNzdWVzIGVhcmx5LgorICovCisKKyNpZm5kZWYgTUJFRFRMU19DSEVDS19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NIRUNLX0NPTkZJR19ICisKKy8qCisgKiBXZSBhc3N1bWUgQ0hBUl9CSVQgaXMgOCBpbiBtYW55IHBsYWNlcy4gSW4gcHJhY3RpY2UsIHRoaXMgaXMgdHJ1ZSBvbiBvdXIKKyAqIHRhcmdldCBwbGF0Zm9ybXMsIHNvIG5vdCBhbiBpc3N1ZSwgYnV0IGxldCdzIGp1c3QgYmUgZXh0cmEgc3VyZS4KKyAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIENIQVJfQklUICE9IDgKKyNlcnJvciAibWJlZCBUTFMgcmVxdWlyZXMgYSBwbGF0Zm9ybSB3aXRoIDgtYml0IGNoYXJzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fQyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzIgorI2VuZGlmCisKKy8qIEZpeCB0aGUgY29uZmlnIGhlcmUuIE5vdCBjb252ZW5pZW50IHRvIHB1dCBhbiAjaWZkZWYgX1dJTjMyIGluIGNvbmZpZy5oIGFzCisgKiBpdCB3b3VsZCBjb25mdXNlIGNvbmZpZy5wbC4gKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCkgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8pCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUCisjZW5kaWYKKyNlbmRpZiAvKiBfV0lOMzIgKi8KKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkgJiYgXAorICAgICggZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpICkKKyNlcnJvciAiVGhlIE5FVCBhbmQgVElNSU5HIG1vZHVsZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIG1iZWQgT1MgLSBwbGVhc2UgdXNlIHRoZSBuZXR3b3JrIGFuZCB0aW1pbmcgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IG1iZWQgT1MiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcpICYmIFwKKyAgICAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQorI2Vycm9yICJNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORyBvbmx5IHdvcmtzIHdpdGggR0NDIGFuZCBDbGFuZyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRV9EQVRFKSAmJiAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyNlcnJvciAiTUJFRFRMU19IQVZFX1RJTUVfREFURSB3aXRob3V0IE1CRURUTFNfSEFWRV9USU1FIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNOSV9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKQorI2Vycm9yICJNQkVEVExTX0FFU05JX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpICYmICFkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjZXJyb3IgIk1CRURUTFNfQ1RSX0RSQkdfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisjZXJyb3IgIk1CRURUTFNfREhNX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NNQUNfQykgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQUVTX0MpICYmICFkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjZXJyb3IgIk1CRURUTFNfQ01BQ19DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpICYmICFkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjZXJyb3IgIk1CRURUTFNfRUNESF9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSAmJiAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfRUNQX0MpIHx8ICAgICAgICAgICBcCisgICAgICAhZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykgfHwgICAgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19BU04xX1dSSVRFX0MpICkKKyNlcnJvciAiTUJFRFRMU19FQ0RTQV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0pQQUtFX0MpICYmICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDUF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX01EX0MpICkKKyNlcnJvciAiTUJFRFRMU19FQ0pQQUtFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpICYmICFkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpCisjZXJyb3IgIk1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgKCAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCkgICAmJiAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQpICAgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEKSAgICYmICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKSAmJiAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpICkgKQorI2Vycm9yICJNQkVEVExTX0VDUF9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmICghZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKSAmJiAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpKQorI2Vycm9yICJNQkVEVExTX0VOVFJPUFlfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKSAmJiAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4pICYmIChNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOID4gNjQpCisjZXJyb3IgIk1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gdmFsdWUgdG9vIGhpZ2giCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykgfHwgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2KSApIFwKKyAgICAmJiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4pICYmIChNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOID4gMzIpCisjZXJyb3IgIk1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gdmFsdWUgdG9vIGhpZ2giCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2KSAmJiAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2Vycm9yICJNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2IGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkgJiYgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMpICkKKyNlcnJvciAiTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKSAmJiBcCisgICAgICggZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkgfHwgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKSApCisjZXJyb3IgIk1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgZGVmaW5lZCwgYnV0IGVudHJvcHkgc291cmNlcyB0b28iCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykgJiYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICFkZWZpbmVkKE1CRURUTFNfQUVTX0MpICYmICFkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgKQorI2Vycm9yICJNQkVEVExTX0dDTV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykgJiYgIWRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKyNlcnJvciAiTUJFRFRMU19IQVZFR0VfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpICYmICFkZWZpbmVkKE1CRURUTFNfTURfQykKKyNlcnJvciAiTUJFRFRMU19ITUFDX0RSQkdfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkgJiYgIWRlZmluZWQoTUJFRFRMU19ESE1fQykKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNESF9DKQorI2Vycm9yICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19ESE1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgICAgICAgICAgIFwKKyAgICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgICAgICAgICAgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkgKQorI2Vycm9yICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgIWRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCAgICAgICAgICBcCisgICAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCBcCisgICAgICAhZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkgKQorI2Vycm9yICJNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkgJiYgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgXAorICAgICAgIWRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpICkKKyNlcnJvciAiTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpICYmICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX0VDSlBBS0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgICAgICBcCisgICAgICAhZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkgKQorI2Vycm9yICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpICkKKyNlcnJvciAiTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykgJiYgIWRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkKKyNlcnJvciAiTUJFRFRMU19QQURMT0NLX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorI2Vycm9yICJNQkVEVExTX1BFTV9QQVJTRV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykgJiYgIWRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyNlcnJvciAiTUJFRFRMU19QRU1fV1JJVEVfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykgJiYgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgIWRlZmluZWQoTUJFRFRMU19FQ1BfQykgKQorI2Vycm9yICJNQkVEVExTX1BLX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpICYmICFkZWZpbmVkKE1CRURUTFNfUEtfQykKKyNlcnJvciAiTUJFRFRMU19QS19QQVJTRV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKSAmJiAhZGVmaW5lZChNQkVEVExTX1BLX0MpCisjZXJyb3IgIk1CRURUTFNfUEtfV1JJVEVfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzExX0MpICYmICFkZWZpbmVkKE1CRURUTFNfUEtfQykKKyNlcnJvciAiTUJFRFRMU19QS0NTMTFfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTykgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8pICYmXAorICAgICggZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUKSB8fFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVC9NQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQpICYmXAorICAgICggIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKSB8fFwKKyAgICAgICAgIWRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9NQUNSTykgJiZcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpIHx8XAorICAgICAgICAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTykgJiZcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpIHx8XAorICAgICAgICAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9NQUNSTykgJiZcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUpIHx8XAorICAgICAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9USU1FX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FL01CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8pICYmXAorICAgICggZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FKSB8fFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FL01CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVCkgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTykgJiZcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYpIHx8XAorICAgICAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGL01CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPKSAmJlwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPKSAmJlwKKyAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyBhbmQgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSBjYW5ub3QgYmUgZGVmaW5lZCBzaW11bHRhbmVvdXNseSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8pICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTyBtdXN0IGJlIGRlZmluZWQgaWYgTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPIGlzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPKSAmJlwKKyAgICAoICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTykgJiZcCisgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPIGFuZCBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8pICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPIG11c3QgYmUgZGVmaW5lZCBpZiBNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTyBpcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX01FTU9SWSkgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX01FTU9SWSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCkgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTykgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPKSAmJlwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGKSB8fFwKKyAgICAgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URi9NQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPKSAmJiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPKSAmJlwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYpIHx8XAorICAgICAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGL01CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUIGNhbm5vdCBiZSBkZWZpbmVkIHNpbXVsdGFuZW91c2x5IgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX01FTV9IRFIpICYmXAorICAgICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUykKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQykgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQykgJiYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9NRU1PUlkpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUpICYmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCkgJiZcCisgICAgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUpICYmXAorICAgICggIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCkgfHxcCisgICAgICAgICFkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKSApCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGKSAmJlwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGKSAmJlwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1NOUFJJTlRGKSAmJlwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkgJiZcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSApCisjZXJyb3IgIk1CRURUTFNfRU5UUk9QWV9OVl9TRUVEIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCkgJiZcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQpICYmXAorICAgICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUpICYmXAorICAgICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQpCisjZXJyb3IgIk1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfUkVBRF9NQUNSTykgJiZcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCkgfHxcCisgICAgICBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQpICkKKyNlcnJvciAiTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1JFQURfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCBjYW5ub3QgYmUgZGVmaW5lZCBzaW11bHRhbmVvdXNseSIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfV1JJVEVfTUFDUk8pICYmXAorICAgICggZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1dSSVRFKSB8fFwKKyAgICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCkgKQorI2Vycm9yICJNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfV1JJVEVfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUgY2Fubm90IGJlIGRlZmluZWQgc2ltdWx0YW5lb3VzbHkiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX09JRF9DKSApCisjZXJyb3IgIk1CRURUTFNfUlNBX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKSAmJiAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkgKQorI2Vycm9yICJNQkVEVExTX1JTQV9DIGRlZmluZWQsIGJ1dCBub25lIG9mIHRoZSBQS0NTMSB2ZXJzaW9ucyBlbmFibGVkIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpICYmICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpICkKKyNlcnJvciAiTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpICYmICggIWRlZmluZWQoTUJFRFRMU19NRDVfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTFfQykgKQorI2Vycm9yICJNQkVEVExTX1NTTF9QUk9UT19TU0wzIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgJiYgKCAhZGVmaW5lZChNQkVEVExTX01ENV9DKSB8fCAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMV9DKSApCisjZXJyb3IgIk1CRURUTFNfU1NMX1BST1RPX1RMUzEgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpICYmICggIWRlZmluZWQoTUJFRFRMU19NRDVfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTFfQykgKQorI2Vycm9yICJNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpICYmICggIWRlZmluZWQoTUJFRFRMU19TSEExX0MpICYmICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgJiYgIWRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykgKQorI2Vycm9yICJNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKSAgICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjZXJyb3IgIk1CRURUTFNfU1NMX1BST1RPX0RUTFMgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykgJiYgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpCisjZXJyb3IgIk1CRURUTFNfU1NMX0NMSV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykgfHwgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX01EX0MpICkKKyNlcnJvciAiTUJFRFRMU19TU0xfVExTX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgJiYgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpCisjZXJyb3IgIk1CRURUTFNfU1NMX1NSVl9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpICYmICghZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgJiYgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSkKKyNlcnJvciAiTUJFRFRMU19TU0xfVExTX0MgZGVmaW5lZCwgYnV0IG5vIHByb3RvY29scyBhcmUgYWN0aXZlIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKSAmJiAoZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpICYmICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpKQorI2Vycm9yICJJbGxlZ2FsIHByb3RvY29sIHNlbGVjdGlvbiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgJiYgKGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSAmJiAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpKQorI2Vycm9yICJJbGxlZ2FsIHByb3RvY29sIHNlbGVjdGlvbiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgJiYgKGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSAmJiAoIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkpKQorI2Vycm9yICJJbGxlZ2FsIHByb3RvY29sIHNlbGVjdGlvbiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyNlcnJvciAiTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSkgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQorI2Vycm9yICJNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFICBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpICkKKyNlcnJvciAiTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSAgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykgKQorI2Vycm9yICJNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCAgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKSAmJiAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSAgICYmICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgJiYgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2Vycm9yICJNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKSAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgICAmJiAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSAmJiAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2Vycm9yICJNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9USUNLRVRfQykgJiYgIWRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykKKyNlcnJvciAiTUJFRFRMU19TU0xfVElDS0VUX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpICYmICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpCisjZXJyb3IgIk1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikgJiYgXAorICAgICAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisjZXJyb3IgIk1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEKQorI2lmICFkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpIHx8IGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfSU1QTCkKKyNlcnJvciAiTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisjZGVmaW5lIE1CRURUTFNfVEhSRUFESU5HX0lNUEwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19BTFQpCisjaWYgIWRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykgfHwgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19JTVBMKQorI2Vycm9yICJNQkVEVExTX1RIUkVBRElOR19BTFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19JTVBMCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykgJiYgIWRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfSU1QTCkKKyNlcnJvciAiTUJFRFRMU19USFJFQURJTkdfQyBkZWZpbmVkLCBzaW5nbGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHJlcXVpcmVkIgorI2VuZGlmCisjdW5kZWYgTUJFRFRMU19USFJFQURJTkdfSU1QTAorCisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpICYmICFkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9DKQorI2Vycm9yICJNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX09JRF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykgfHwgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSApCisjZXJyb3IgIk1CRURUTFNfWDUwOV9VU0VfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfT0lEX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQVNOMV9XUklURV9DKSB8fCAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKSApCisjZXJyb3IgIk1CRURUTFNfWDUwOV9DUkVBVEVfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpICkKKyNlcnJvciAiTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykgKQorI2Vycm9yICJNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpICYmICggIWRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSApCisjZXJyb3IgIk1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQykgJiYgKCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpICkKKyNlcnJvciAiTUJFRFRMU19YNTA5X0NSVF9XUklURV9DIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9XUklURV9DKSAmJiAoICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykgKQorI2Vycm9yICJNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisvKgorICogQXZvaWQgd2FybmluZyBmcm9tIC1wZWRhbnRpYy4gVGhpcyBpcyBhIGNvbnZlbmllbnQgcGxhY2UgZm9yIHRoaXMKKyAqIHdvcmthcm91bmQgc2luY2UgdGhpcyBpcyBpbmNsdWRlZCBieSBldmVyeSBzaW5nbGUgZmlsZSBiZWZvcmUgdGhlCisgKiAjaWYgZGVmaW5lZChNQkVEVExTX3h4eF9DKSB0aGF0IHJlc3VsdHMgaW4gZW10cHkgdHJhbnNsYXRpb24gdW5pdHMuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfaXNvX2NfZm9yYmlkc19lbXB0eV90cmFuc2xhdGlvbl91bml0czsKKworI2VuZGlmIC8qIE1CRURUTFNfQ0hFQ0tfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2lwaGVyLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NpcGhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmUzODgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NpcGhlci5oCkBAIC0wLDAgKzEsNzA5IEBACisvKioKKyAqIFxmaWxlIGNpcGhlci5oCisgKgorICogXGJyaWVmIEdlbmVyaWMgY2lwaGVyIHdyYXBwZXIuCisgKgorICogXGF1dGhvciBBZHJpYWFuIGRlIEpvbmcgPGRlam9uZ0Bmb3gtaXQuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ0lQSEVSX0gKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX01PREVfQUVBRAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTQorI2VuZGlmCisKKyNpZiAoIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSApICYmIFwKKyAgICAhZGVmaW5lZChpbmxpbmUpICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICAgICAgICAgICAgLTB4NjA4MCAgLyoqPCBUaGUgc2VsZWN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgIC0weDYxMDAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgLTB4NjE4MCAgLyoqPCBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HICAgICAgICAgICAgICAgIC0weDYyMDAgIC8qKjwgSW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIHBhZGRpbmcgYW5kIGlzIHJlamVjdGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCAgICAgICAgICAgIC0weDYyODAgIC8qKjwgRGVjcnlwdGlvbiBvZiBibG9jayByZXF1aXJlcyBhIGZ1bGwgYmxvY2suICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgLTB4NjMwMCAgLyoqPCBBdXRoZW50aWNhdGlvbiBmYWlsZWQgKGZvciBBRUFEIG1vZGVzKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfQ09OVEVYVCAgICAgICAgICAgICAgLTB4NjM4MCAgLyoqPCBUaGUgY29udGV4dCBpcyBpbnZhbGlkLCBlZyBiZWNhdXNlIGl0IHdhcyBmcmVlKCllZC4gKi8KKworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4gICAgIDB4MDEgICAgLyoqPCBDaXBoZXIgYWNjZXB0cyBJVnMgb2YgdmFyaWFibGUgbGVuZ3RoICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4gICAgMHgwMiAgICAvKio8IENpcGhlciBhY2NlcHRzIGtleXMgb2YgdmFyaWFibGUgbGVuZ3RoICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9OT05FID0gMCwKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9OVUxMLAorICAgIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9ERVMsCisgICAgTUJFRFRMU19DSVBIRVJfSURfM0RFUywKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQSwKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9CTE9XRklTSCwKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9BUkM0LAorfSBtYmVkdGxzX2NpcGhlcl9pZF90OworCit0eXBlZGVmIGVudW0geworICAgIE1CRURUTFNfQ0lQSEVSX05PTkUgPSAwLAorICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjgsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DRkIxMjgsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DRkIxMjgsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFIsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DVFIsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DVFIsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0VDQiwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9FQ0IsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyOCwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0ZCMTI4LAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjgsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUiwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ1RSLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIsCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sCisgICAgTUJFRFRMU19DSVBIRVJfREVTX0VDQiwKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDLAorICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiwKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsCisgICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCLAorICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQywKKyAgICBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NCwKKyAgICBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFIsCisgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sCisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTSwKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0NNLAorICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQ00sCit9IG1iZWR0bHNfY2lwaGVyX3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX01PREVfTk9ORSA9IDAsCisgICAgTUJFRFRMU19NT0RFX0VDQiwKKyAgICBNQkVEVExTX01PREVfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgTUJFRFRMU19NT0RFX09GQiwgLyogVW51c2VkISAqLworICAgIE1CRURUTFNfTU9ERV9DVFIsCisgICAgTUJFRFRMU19NT0RFX0dDTSwKKyAgICBNQkVEVExTX01PREVfU1RSRUFNLAorICAgIE1CRURUTFNfTU9ERV9DQ00sCit9IG1iZWR0bHNfY2lwaGVyX21vZGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX1BBRERJTkdfUEtDUzcgPSAwLCAgICAgLyoqPCBQS0NTNyBwYWRkaW5nIChkZWZhdWx0KSAgICAgICAgKi8KKyAgICBNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUywgLyoqPCBJU08vSUVDIDc4MTYtNCBwYWRkaW5nICAgICAgICAgKi8KKyAgICBNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTiwgLyoqPCBBTlNJIFguOTIzIHBhZGRpbmcgICAgICAgICAgICAgKi8KKyAgICBNQkVEVExTX1BBRERJTkdfWkVST1MsICAgICAgICAgLyoqPCB6ZXJvIHBhZGRpbmcgKG5vdCByZXZlcnNpYmxlISkgKi8KKyAgICBNQkVEVExTX1BBRERJTkdfTk9ORSwgICAgICAgICAgLyoqPCBuZXZlciBwYWQgKGZ1bGwgYmxvY2tzIG9ubHkpICAgKi8KK30gbWJlZHRsc19jaXBoZXJfcGFkZGluZ190OworCit0eXBlZGVmIGVudW0geworICAgIE1CRURUTFNfT1BFUkFUSU9OX05PTkUgPSAtMSwKKyAgICBNQkVEVExTX0RFQ1JZUFQgPSAwLAorICAgIE1CRURUTFNfRU5DUllQVCwKK30gbWJlZHRsc19vcGVyYXRpb25fdDsKKworZW51bSB7CisgICAgLyoqIFVuZGVmaW5lZCBrZXkgbGVuZ3RoICovCisgICAgTUJFRFRMU19LRVlfTEVOR1RIX05PTkUgPSAwLAorICAgIC8qKiBLZXkgbGVuZ3RoLCBpbiBiaXRzIChpbmNsdWRpbmcgcGFyaXR5KSwgZm9yIERFUyBrZXlzICovCisgICAgTUJFRFRMU19LRVlfTEVOR1RIX0RFUyAgPSA2NCwKKyAgICAvKiogS2V5IGxlbmd0aCwgaW4gYml0cyAoaW5jbHVkaW5nIHBhcml0eSksIGZvciBERVMgaW4gdHdvIGtleSBFREUgKi8KKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERSA9IDEyOCwKKyAgICAvKiogS2V5IGxlbmd0aCwgaW4gYml0cyAoaW5jbHVkaW5nIHBhcml0eSksIGZvciBERVMgaW4gdGhyZWUta2V5IEVERSAqLworICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFMyA9IDE5MiwKK307CisKKy8qKiBNYXhpbXVtIGxlbmd0aCBvZiBhbnkgSVYsIGluIGJ5dGVzICovCisjZGVmaW5lIE1CRURUTFNfTUFYX0lWX0xFTkdUSCAgICAgIDE2CisvKiogTWF4aW11bSBibG9jayBzaXplIG9mIGFueSBjaXBoZXIsIGluIGJ5dGVzICovCisjZGVmaW5lIE1CRURUTFNfTUFYX0JMT0NLX0xFTkdUSCAgIDE2CisKKy8qKgorICogQmFzZSBjaXBoZXIgaW5mb3JtYXRpb24gKG9wYXF1ZSBzdHJ1Y3QpLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgbWJlZHRsc19jaXBoZXJfYmFzZV90OworCisvKioKKyAqIENNQUMgY29udGV4dCAob3BhcXVlIHN0cnVjdCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfY21hY19jb250ZXh0X3QgbWJlZHRsc19jbWFjX2NvbnRleHRfdDsKKworLyoqCisgKiBDaXBoZXIgaW5mb3JtYXRpb24uIEFsbG93cyBjaXBoZXIgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBpbiBhIGdlbmVyaWMgd2F5LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyoqIEZ1bGwgY2lwaGVyIGlkZW50aWZpZXIgKGUuZy4gTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMpICovCisgICAgbWJlZHRsc19jaXBoZXJfdHlwZV90IHR5cGU7CisKKyAgICAvKiogQ2lwaGVyIG1vZGUgKGUuZy4gTUJFRFRMU19NT0RFX0NCQykgKi8KKyAgICBtYmVkdGxzX2NpcGhlcl9tb2RlX3QgbW9kZTsKKworICAgIC8qKiBDaXBoZXIga2V5IGxlbmd0aCwgaW4gYml0cyAoZGVmYXVsdCBsZW5ndGggZm9yIHZhcmlhYmxlIHNpemVkIGNpcGhlcnMpCisgICAgICogIChJbmNsdWRlcyBwYXJpdHkgYml0cyBmb3IgY2lwaGVycyBsaWtlIERFUykgKi8KKyAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbjsKKworICAgIC8qKiBOYW1lIG9mIHRoZSBjaXBoZXIgKi8KKyAgICBjb25zdCBjaGFyICogbmFtZTsKKworICAgIC8qKiBJVi9OT05DRSBzaXplLCBpbiBieXRlcy4KKyAgICAgKiAgRm9yIGNpcGhlciB0aGF0IGFjY2VwdCBtYW55IHNpemVzOiByZWNvbW1lbmRlZCBzaXplICovCisgICAgdW5zaWduZWQgaW50IGl2X3NpemU7CisKKyAgICAvKiogRmxhZ3MgZm9yIHZhcmlhYmxlIElWIHNpemUsIHZhcmlhYmxlIGtleSBzaXplLCBldGMuICovCisgICAgaW50IGZsYWdzOworCisgICAgLyoqIGJsb2NrIHNpemUsIGluIGJ5dGVzICovCisgICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemU7CisKKyAgICAvKiogQmFzZSBjaXBoZXIgaW5mb3JtYXRpb24gYW5kIGZ1bmN0aW9ucyAqLworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCAqYmFzZTsKKworfSBtYmVkdGxzX2NpcGhlcl9pbmZvX3Q7CisKKy8qKgorICogR2VuZXJpYyBjaXBoZXIgY29udGV4dC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYXNzb2NpYXRlZCBjaXBoZXIgKi8KKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworCisgICAgLyoqIEtleSBsZW5ndGggdG8gdXNlICovCisgICAgaW50IGtleV9iaXRsZW47CisKKyAgICAvKiogT3BlcmF0aW9uIHRoYXQgdGhlIGNvbnRleHQncyBrZXkgaGFzIGJlZW4gaW5pdGlhbGlzZWQgZm9yICovCisgICAgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb247CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HKQorICAgIC8qKiBQYWRkaW5nIGZ1bmN0aW9ucyB0byB1c2UsIGlmIHJlbGV2YW50IGZvciBjaXBoZXIgbW9kZSAqLworICAgIHZvaWQgKCphZGRfcGFkZGluZykoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG9sZW4sIHNpemVfdCBkYXRhX2xlbiApOworICAgIGludCAoKmdldF9wYWRkaW5nKSggdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLCBzaXplX3QgKmRhdGFfbGVuICk7CisjZW5kaWYKKworICAgIC8qKiBCdWZmZXIgZm9yIGRhdGEgdGhhdCBoYXNuJ3QgYmVlbiBlbmNyeXB0ZWQgeWV0ICovCisgICAgdW5zaWduZWQgY2hhciB1bnByb2Nlc3NlZF9kYXRhW01CRURUTFNfTUFYX0JMT0NLX0xFTkdUSF07CisKKyAgICAvKiogTnVtYmVyIG9mIGJ5dGVzIHRoYXQgc3RpbGwgbmVlZCBwcm9jZXNzaW5nICovCisgICAgc2l6ZV90IHVucHJvY2Vzc2VkX2xlbjsKKworICAgIC8qKiBDdXJyZW50IElWIG9yIE5PTkNFX0NPVU5URVIgZm9yIENUUi1tb2RlICovCisgICAgdW5zaWduZWQgY2hhciBpdltNQkVEVExTX01BWF9JVl9MRU5HVEhdOworCisgICAgLyoqIElWIHNpemUgaW4gYnl0ZXMgKGZvciBjaXBoZXJzIHdpdGggdmFyaWFibGUtbGVuZ3RoIElWcykgKi8KKyAgICBzaXplX3QgaXZfc2l6ZTsKKworICAgIC8qKiBDaXBoZXItc3BlY2lmaWMgY29udGV4dCAqLworICAgIHZvaWQgKmNpcGhlcl9jdHg7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorICAgIC8qKiBDTUFDIFNwZWNpZmljIGNvbnRleHQgKi8KKyAgICBtYmVkdGxzX2NtYWNfY29udGV4dF90ICpjbWFjX2N0eDsKKyNlbmRpZgorfSBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3Q7CisKKy8qKgorICogXGJyaWVmIFJldHVybnMgdGhlIGxpc3Qgb2YgY2lwaGVycyBzdXBwb3J0ZWQgYnkgdGhlIGdlbmVyaWMgY2lwaGVyIG1vZHVsZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5IG9mIGNpcGhlcnMsIHRoZSBsYXN0IGVudHJ5CisgKiAgICAgICAgICAgICAgICAgICAgICBpcyAwLgorICovCitjb25zdCBpbnQgKm1iZWR0bHNfY2lwaGVyX2xpc3QoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjaXBoZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFzc29jaWF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGNpcGhlciBuYW1lLgorICoKKyAqIFxwYXJhbSBjaXBoZXJfbmFtZSAgIE5hbWUgb2YgdGhlIGNpcGhlciB0byBzZWFyY2ggZm9yLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIHRoZSBjaXBoZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGNpcGhlcl9uYW1lLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICptYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fc3RyaW5nKCBjb25zdCBjaGFyICpjaXBoZXJfbmFtZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNpcGhlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgYXNzb2NpYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gY2lwaGVyIHR5cGUuCisgKgorICogXHBhcmFtIGNpcGhlcl90eXBlICAgVHlwZSBvZiB0aGUgY2lwaGVyIHRvIHNlYXJjaCBmb3IuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgdGhlIGNpcGhlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gY2lwaGVyX3R5cGUsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKm1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjb25zdCBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX3R5cGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjaXBoZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFzc29jaWF0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGNpcGhlciBpZCwga2V5IHNpemUgYW5kIG1vZGUuCisgKgorICogXHBhcmFtIGNpcGhlcl9pZCAgICAgSWQgb2YgdGhlIGNpcGhlciB0byBzZWFyY2ggZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBNQkVEVExTX0NJUEhFUl9JRF9BRVMpCisgKiBccGFyYW0ga2V5X2JpdGxlbiAgICBMZW5ndGggb2YgdGhlIGtleSBpbiBiaXRzCisgKiBccGFyYW0gbW9kZSAgICAgICAgICBDaXBoZXIgbW9kZSAoZS5nLiBNQkVEVExTX01PREVfQ0JDKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIHRoZSBjaXBoZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGNpcGhlcl90eXBlLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICptYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdmFsdWVzKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9pZF90IGNpcGhlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2JpdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9tb2RlX3QgbW9kZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEluaXRpYWxpemUgYSBjaXBoZXJfY29udGV4dCAoYXMgTk9ORSkKKyAqLwordm9pZCBtYmVkdGxzX2NpcGhlcl9pbml0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEZyZWUgYW5kIGNsZWFyIHRoZSBjaXBoZXItc3BlY2lmaWMgY29udGV4dCBvZiBjdHguCisgKiAgICAgICAgICAgICAgICAgICAgICBGcmVlaW5nIGN0eCBpdHNlbGYgcmVtYWlucyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBjYWxsZXIuCisgKi8KK3ZvaWQgbWJlZHRsc19jaXBoZXJfZnJlZSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBJbml0aWFsaXNlcyBhbmQgZmlsbHMgdGhlIGNpcGhlciBjb250ZXh0IHN0cnVjdHVyZSB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgorICoKKyAqIFxub3RlICAgICAgICAgICAgICAgIEN1cnJlbnRseSBhbHNvIGNsZWFycyBzdHJ1Y3R1cmUuIEluIGZ1dHVyZSB2ZXJzaW9ucyB5b3UKKyAqICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVxdWlyZWQgdG8gY2FsbCBtYmVkdGxzX2NpcGhlcl9pbml0KCkgb24gdGhlIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICAgICAgZmlyc3QuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgY29udGV4dCB0byBpbml0aWFsaXNlLiBNYXkgbm90IGJlIE5VTEwuCisgKiBccGFyYW0gY2lwaGVyX2luZm8gICBjaXBoZXIgdG8gdXNlLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBvbiBwYXJhbWV0ZXIgZmFpbHVyZSwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQgaWYgYWxsb2NhdGlvbiBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGNpcGhlci1zcGVjaWZpYyBjb250ZXh0IGZhaWxlZC4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3NldHVwKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGdpdmVuIGNpcGhlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBjaXBoZXIncyBjb250ZXh0LiBNdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBzaXplIG9mIHRoZSBjaXBoZXIncyBibG9ja3MsIG9yIDAgaWYgY3R4IGhhcyBub3QgYmVlbgorICogICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGlzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGN0eC0+Y2lwaGVyX2luZm8tPmJsb2NrX3NpemU7Cit9CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbW9kZSBvZiBvcGVyYXRpb24gZm9yIHRoZSBjaXBoZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBNQkVEVExTX01PREVfQ0JDKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGNpcGhlcidzIGNvbnRleHQuIE11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIG1vZGUgb2Ygb3BlcmF0aW9uLCBvciBNQkVEVExTX01PREVfTk9ORSBpZiBjdHgKKyAqICAgICAgICAgICAgICAgICAgICAgIGhhcyBub3QgYmVlbiBpbml0aWFsaXNlZC4KKyAqLworc3RhdGljIGlubGluZSBtYmVkdGxzX2NpcGhlcl9tb2RlX3QgbWJlZHRsc19jaXBoZXJfZ2V0X2NpcGhlcl9tb2RlKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiBNQkVEVExTX01PREVfTk9ORTsKKworICAgIHJldHVybiBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNpcGhlcidzIElWL05PTkNFIGluIGJ5dGVzLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGNpcGhlcidzIGNvbnRleHQuIE11c3QgaGF2ZSBiZWVuIGluaXRpYWxpc2VkLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIElmIElWIGhhcyBub3QgYmVlbiBzZXQgeWV0OiAocmVjb21tZW5kZWQpIElWIHNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgICgwIGZvciBjaXBoZXJzIG5vdCB1c2luZyBJVi9OT05DRSkuCisgKiAgICAgICAgICAgICAgICAgICAgICBJZiBJViBoYXMgYWxyZWFkeSBiZWVuIHNldDogYWN0dWFsIHNpemUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1iZWR0bHNfY2lwaGVyX2dldF9pdl9zaXplKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYoIGN0eC0+aXZfc2l6ZSAhPSAwICkKKyAgICAgICAgcmV0dXJuIChpbnQpIGN0eC0+aXZfc2l6ZTsKKworICAgIHJldHVybiAoaW50KSBjdHgtPmNpcGhlcl9pbmZvLT5pdl9zaXplOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIGNpcGhlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBjaXBoZXIncyBjb250ZXh0LiBNdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICB0eXBlIG9mIHRoZSBjaXBoZXIsIG9yIE1CRURUTFNfQ0lQSEVSX05PTkUgaWYgY3R4IGhhcworICogICAgICAgICAgICAgICAgICAgICAgbm90IGJlZW4gaW5pdGlhbGlzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgbWJlZHRsc19jaXBoZXJfdHlwZV90IG1iZWR0bHNfY2lwaGVyX2dldF90eXBlKCBjb25zdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApCit7CisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyApCisgICAgICAgIHJldHVybiBNQkVEVExTX0NJUEhFUl9OT05FOworCisgICAgcmV0dXJuIGN0eC0+Y2lwaGVyX2luZm8tPnR5cGU7Cit9CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gY2lwaGVyLCBhcyBhIHN0cmluZy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBjaXBoZXIncyBjb250ZXh0LiBNdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBuYW1lIG9mIHRoZSBjaXBoZXIsIG9yIE5VTEwgaWYgY3R4IHdhcyBub3QgaW5pdGlhbGlzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbWJlZHRsc19jaXBoZXJfZ2V0X25hbWUoIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY3R4LT5jaXBoZXJfaW5mby0+bmFtZTsKK30KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBrZXkgbGVuZ3RoIG9mIHRoZSBjaXBoZXIuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgY2lwaGVyJ3MgY29udGV4dC4gTXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgY2lwaGVyJ3Mga2V5IGxlbmd0aCwgaW4gYml0cywgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfS0VZX0xFTkdUSF9OT05FIGlmIGN0eCBoYXMgbm90IGJlZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBtYmVkdGxzX2NpcGhlcl9nZXRfa2V5X2JpdGxlbiggY29uc3QgbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gKQorICAgICAgICByZXR1cm4gTUJFRFRMU19LRVlfTEVOR1RIX05PTkU7CisKKyAgICByZXR1cm4gKGludCkgY3R4LT5jaXBoZXJfaW5mby0+a2V5X2JpdGxlbjsKK30KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBvcGVyYXRpb24gb2YgdGhlIGdpdmVuIGNpcGhlci4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBjaXBoZXIncyBjb250ZXh0LiBNdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBvcGVyYXRpb24gKE1CRURUTFNfRU5DUllQVCBvciBNQkVEVExTX0RFQ1JZUFQpLAorICogICAgICAgICAgICAgICAgICAgICAgb3IgTUJFRFRMU19PUEVSQVRJT05fTk9ORSBpZiBjdHggaGFzIG5vdCBiZWVuCisgKiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXNlZC4KKyAqLworc3RhdGljIGlubGluZSBtYmVkdGxzX29wZXJhdGlvbl90IG1iZWR0bHNfY2lwaGVyX2dldF9vcGVyYXRpb24oIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvICkKKyAgICAgICAgcmV0dXJuIE1CRURUTFNfT1BFUkFUSU9OX05PTkU7CisKKyAgICByZXR1cm4gY3R4LT5vcGVyYXRpb247Cit9CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSBrZXkgdG8gdXNlIHdpdGggdGhlIGdpdmVuIGNvbnRleHQuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgZ2VuZXJpYyBjaXBoZXIgY29udGV4dC4gTWF5IG5vdCBiZSBOVUxMLiBNdXN0IGhhdmUgYmVlbgorICogICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGlzZWQgdXNpbmcgY2lwaGVyX2NvbnRleHRfZnJvbV90eXBlIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJfY29udGV4dF9mcm9tX3N0cmluZy4KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgIFRoZSBrZXkgdG8gdXNlLgorICogXHBhcmFtIGtleV9iaXRsZW4gICAga2V5IGxlbmd0aCB0byB1c2UsIGluIGJpdHMuCisgKiBccGFyYW0gb3BlcmF0aW9uICAgICBPcGVyYXRpb24gdGhhdCB0aGUga2V5IHdpbGwgYmUgdXNlZCBmb3IsIGVpdGhlcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTkNSWVBUIG9yIE1CRURUTFNfREVDUllQVC4KKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBpZgorICogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBmYWlscyBvciBhIGNpcGhlciBzcGVjaWZpYworICogICAgICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3NldGtleSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICBpbnQga2V5X2JpdGxlbiwgY29uc3QgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCBwYWRkaW5nIG1vZGUsIGZvciBjaXBoZXIgbW9kZXMgdGhhdCB1c2UgcGFkZGluZy4KKyAqICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBQS0NTNyBwYWRkaW5nLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgICAgICBwYWRkaW5nIG1vZGUKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFCisgKiAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxlY3RlZCBwYWRkaW5nIG1vZGUgaXMgbm90IHN1cHBvcnRlZCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBpZiB0aGUgY2lwaGVyIG1vZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IHN1cHBvcnQgcGFkZGluZy4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LCBtYmVkdGxzX2NpcGhlcl9wYWRkaW5nX3QgbW9kZSApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKElWKSBvciBub25jZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqIFxwYXJhbSBpdiAgICAgICAgICAgIElWIHRvIHVzZSAob3IgTk9OQ0VfQ09VTlRFUiBmb3IgQ1RSLW1vZGUgY2lwaGVycykKKyAqIFxwYXJhbSBpdl9sZW4gICAgICAgIElWIGxlbmd0aCBmb3IgY2lwaGVycyB3aXRoIHZhcmlhYmxlLXNpemUgSVY7CisgKiAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgY2lwaGVycyB3aXRoIGZpeGVkLXNpemUgSVYuCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBTb21lIGNpcGhlcnMgZG9uJ3QgdXNlIElWcyBub3IgTk9OQ0UuIEZvciB0aGVzZQorICogICAgICAgICAgICAgICAgICAgICAgY2lwaGVycywgdGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0LgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfc2V0X2l2KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEZpbmlzaCBwcmVwYXJhdGlvbiBvZiB0aGUgZ2l2ZW4gY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorICogICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBBZGQgYWRkaXRpb25hbCBkYXRhIChmb3IgQUVBRCBjaXBoZXJzKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB3aXRoIEdDTS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSwgYWZ0ZXIgbWJlZHRsc19jaXBoZXJfcmVzZXQoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gYWQgICAgICAgICAgICBBZGRpdGlvbmFsIGRhdGEgdG8gdXNlLgorICogXHBhcmFtIGFkX2xlbiAgICAgICAgTGVuZ3RoIG9mIGFkLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZCwgc2l6ZV90IGFkX2xlbiApOworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBHZW5lcmljIGNpcGhlciB1cGRhdGUgZnVuY3Rpb24uIEVuY3J5cHRzL2RlY3J5cHRzCisgKiAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgZ2l2ZW4gY2lwaGVyIGNvbnRleHQuIFdyaXRlcyBhcyBtYW55IGJsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgICBzaXplJ2QgYmxvY2tzIG9mIGRhdGEgYXMgcG9zc2libGUgdG8gb3V0cHV0LiBBbnkgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW5ub3QgYmUgd3JpdHRlbiBpbW1lZGlhdGVseSB3aWxsIGVpdGhlciBiZSBhZGRlZAorICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG5leHQgYmxvY2ssIG9yIGZsdXNoZWQgd2hlbiBjaXBoZXJfZmluYWwgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbjogZm9yIE1CRURUTFNfTU9ERV9FQ0IsIGV4cGVjdHMgc2luZ2xlIGJsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNpemUgKGUuZy4gMTYgYnl0ZXMgZm9yIEFFUykKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGlsZW4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgICAgICBidWZmZXIgZm9yIHRoZSBvdXRwdXQgZGF0YS4gU2hvdWxkIGJlIGFibGUgdG8gaG9sZCBhdAorICogICAgICAgICAgICAgICAgICAgICAgbGVhc3QgaWxlbiArIGJsb2NrX3NpemUuIENhbm5vdCBiZSB0aGUgc2FtZSBidWZmZXIgYXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGlucHV0IQorICogXHBhcmFtIG9sZW4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgZGF0YSwgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBpZgorICogICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHZlcmlmaWNhdGlvbiBmYWlscywKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFIG9uIGFuCisgKiAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBtb2RlIGZvciBhIGNpcGhlciBvciBhIGNpcGhlciBzcGVjaWZpYworICogICAgICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBJZiB0aGUgdW5kZXJseWluZyBjaXBoZXIgaXMgR0NNLCBhbGwgY2FsbHMgdG8gdGhpcworICogICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIGV4Y2VwdCB0aGUgbGFzdCBvbmUgYmVmb3JlIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCgpLAorICogICAgICAgICAgICAgICAgICAgICAgbXVzdCBoYXZlIGlsZW4gYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZS4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEdlbmVyaWMgY2lwaGVyIGZpbmFsaXNhdGlvbiBmdW5jdGlvbi4gSWYgZGF0YSBzdGlsbAorICogICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gYmUgZmx1c2hlZCBmcm9tIGFuIGluY29tcGxldGUgYmxvY2ssIGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCB3aXRoaW4gaXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB0aGUgc2l6ZSBvZgorICogICAgICAgICAgICAgICAgICAgICAgdGhlIGxhc3QgYmxvY2ssIGFuZCB3cml0dGVuIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIGJ1ZmZlciB0byB3cml0ZSBkYXRhIHRvLiBOZWVkcyBibG9ja19zaXplIGF2YWlsYWJsZS4KKyAqIFxwYXJhbSBvbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgZGF0YSB3cml0dGVuIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgorICoKKyAqIFxyZXR1cm5zICAgICAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgdmVyaWZpY2F0aW9uIGZhaWxzLAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgaWYgZGVjcnlwdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgYSBmdWxsIGJsb2NrIGJ1dCB3YXMgbm90IHByb3ZpZGVkIG9uZSwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcgb24gaW52YWxpZCBwYWRkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBkZWNyeXB0aW5nIG9yIGEgY2lwaGVyIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9maW5pc2goIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFdyaXRlIHRhZyBmb3IgQUVBRCBjaXBoZXJzLgorICogICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIHdpdGggR0NNLgorICogICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgbWJlZHRsc19jaXBoZXJfZmluaXNoKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgR2VuZXJpYyBjaXBoZXIgY29udGV4dAorICogXHBhcmFtIHRhZyAgICAgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRoZSB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgICAgIExlbmd0aCBvZiB0aGUgdGFnIHRvIHdyaXRlCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl93cml0ZV90YWcoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDaGVjayB0YWcgZm9yIEFFQUQgY2lwaGVycy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB3aXRoIEdDTS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgY2FsbGVkIGFmdGVyIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCgpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqIFxwYXJhbSB0YWcgICAgICAgICAgIEJ1ZmZlciBob2xkaW5nIHRoZSB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgICAgIExlbmd0aCBvZiB0aGUgdGFnIHRvIGNoZWNrCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9jaGVja190YWcoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgR2VuZXJpYyBhbGwtaW4tb25lIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgKGZvciBhbGwgY2lwaGVycyBleGNlcHQgQUVBRCBjb25zdHJ1Y3RzKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBnZW5lcmljIGNpcGhlciBjb250ZXh0CisgKiBccGFyYW0gaXYgICAgICAgICAgICBJViB0byB1c2UgKG9yIE5PTkNFX0NPVU5URVIgZm9yIENUUi1tb2RlIGNpcGhlcnMpCisgKiBccGFyYW0gaXZfbGVuICAgICAgICBJViBsZW5ndGggZm9yIGNpcGhlcnMgd2l0aCB2YXJpYWJsZS1zaXplIElWOworICogICAgICAgICAgICAgICAgICAgICAgZGlzY2FyZGVkIGJ5IGNpcGhlcnMgd2l0aCBmaXhlZC1zaXplIElWLgorICogXHBhcmFtIGlucHV0ICAgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICAgICAgYnVmZmVyIGZvciB0aGUgb3V0cHV0IGRhdGEuIFNob3VsZCBiZSBhYmxlIHRvIGhvbGQgYXQKKyAqICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IGlsZW4gKyBibG9ja19zaXplLiBDYW5ub3QgYmUgdGhlIHNhbWUgYnVmZmVyIGFzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbnB1dCEKKyAqIFxwYXJhbSBvbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGRhdGEsIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgU29tZSBjaXBoZXJzIGRvbid0IHVzZSBJVnMgbm9yIE5PTkNFLiBGb3IgdGhlc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnMsIHVzZSBpdiA9IE5VTEwgYW5kIGl2X2xlbiA9IDAuCisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgaWYgZGVjcnlwdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgYSBmdWxsIGJsb2NrIGJ1dCB3YXMgbm90IHByb3ZpZGVkIG9uZSwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcgb24gaW52YWxpZCBwYWRkaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBkZWNyeXB0aW5nLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgYSBjaXBoZXIgc3BlY2lmaWMgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2NyeXB0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9BRUFEKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBHZW5lcmljIGF1dGVudGljYXRlZCBlbmNyeXB0aW9uIChBRUFEIGNpcGhlcnMpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIGdlbmVyaWMgY2lwaGVyIGNvbnRleHQKKyAqIFxwYXJhbSBpdiAgICAgICAgICAgIElWIHRvIHVzZSAob3IgTk9OQ0VfQ09VTlRFUiBmb3IgQ1RSLW1vZGUgY2lwaGVycykKKyAqIFxwYXJhbSBpdl9sZW4gICAgICAgIElWIGxlbmd0aCBmb3IgY2lwaGVycyB3aXRoIHZhcmlhYmxlLXNpemUgSVY7CisgKiAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgY2lwaGVycyB3aXRoIGZpeGVkLXNpemUgSVYuCisgKiBccGFyYW0gYWQgICAgICAgICAgICBBZGRpdGlvbmFsIGRhdGEgdG8gYXV0aGVudGljYXRlLgorICogXHBhcmFtIGFkX2xlbiAgICAgICAgTGVuZ3RoIG9mIGFkLgorICogXHBhcmFtIGlucHV0ICAgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICAgICAgYnVmZmVyIGZvciB0aGUgb3V0cHV0IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBTaG91bGQgYmUgYWJsZSB0byBob2xkIGF0IGxlYXN0IGlsZW4uCisgKiBccGFyYW0gb2xlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhLCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICogXHBhcmFtIHRhZyAgICAgICAgICAgYnVmZmVyIGZvciB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgKiBccGFyYW0gdGFnX2xlbiAgICAgICBkZXNpcmVkIHRhZyBsZW5ndGgKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBhIGNpcGhlciBzcGVjaWZpYyBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZCwgc2l6ZV90IGFkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCBzaXplX3QgdGFnX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEdlbmVyaWMgYXV0ZW50aWNhdGVkIGRlY3J5cHRpb24gKEFFQUQgY2lwaGVycykuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgZ2VuZXJpYyBjaXBoZXIgY29udGV4dAorICogXHBhcmFtIGl2ICAgICAgICAgICAgSVYgdG8gdXNlIChvciBOT05DRV9DT1VOVEVSIGZvciBDVFItbW9kZSBjaXBoZXJzKQorICogXHBhcmFtIGl2X2xlbiAgICAgICAgSVYgbGVuZ3RoIGZvciBjaXBoZXJzIHdpdGggdmFyaWFibGUtc2l6ZSBJVjsKKyAqICAgICAgICAgICAgICAgICAgICAgIGRpc2NhcmRlZCBieSBjaXBoZXJzIHdpdGggZml4ZWQtc2l6ZSBJVi4KKyAqIFxwYXJhbSBhZCAgICAgICAgICAgIEFkZGl0aW9uYWwgZGF0YSB0byBiZSBhdXRoZW50aWNhdGVkLgorICogXHBhcmFtIGFkX2xlbiAgICAgICAgTGVuZ3RoIG9mIGFkLgorICogXHBhcmFtIGlucHV0ICAgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICAgICAgYnVmZmVyIGZvciB0aGUgb3V0cHV0IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBTaG91bGQgYmUgYWJsZSB0byBob2xkIGF0IGxlYXN0IGlsZW4uCisgKiBccGFyYW0gb2xlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhLCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICogXHBhcmFtIHRhZyAgICAgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICogXHBhcmFtIHRhZ19sZW4gICAgICAgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQgaWYgZGF0YSBpc24ndCBhdXRoZW50aWMsCisgKiAgICAgICAgICAgICAgICAgICAgICBvciBhIGNpcGhlciBzcGVjaWZpYyBlcnJvciBjb2RlLgorICoKKyAqIFxub3RlICAgICAgICAgICAgICAgIElmIHRoZSBkYXRhIGlzIG5vdCBhdXRoZW50aWMsIHRoZW4gdGhlIG91dHB1dCBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGlzIHplcm9lZCBvdXQgdG8gcHJldmVudCB0aGUgdW5hdXRoZW50aWMgcGxhaW50ZXh0IHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIGJ5IG1pc3Rha2UsIG1ha2luZyB0aGlzIGludGVyZmFjZSBzYWZlci4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWQsIHNpemVfdCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0FFQUQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY2lwaGVyX2ludGVybmFsLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NpcGhlcl9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNThiY2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NpcGhlcl9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKioKKyAqIFxmaWxlIGNpcGhlcl9pbnRlcm5hbC5oCisgKgorICogXGJyaWVmIENpcGhlciB3cmFwcGVycy4KKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfQ0lQSEVSX1dSQVBfSAorI2RlZmluZSBNQkVEVExTX0NJUEhFUl9XUkFQX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEJhc2UgY2lwaGVyIGluZm9ybWF0aW9uLiBUaGUgbm9uLW1vZGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCB2YWx1ZXMuCisgKi8KK3N0cnVjdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QKK3sKKyAgICAvKiogQmFzZSBDaXBoZXIgdHlwZSAoZS5nLiBNQkVEVExTX0NJUEhFUl9JRF9BRVMpICovCisgICAgbWJlZHRsc19jaXBoZXJfaWRfdCBjaXBoZXI7CisKKyAgICAvKiogRW5jcnlwdCB1c2luZyBFQ0IgKi8KKyAgICBpbnQgKCplY2JfZnVuYykoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICAvKiogRW5jcnlwdCB1c2luZyBDQkMgKi8KKyAgICBpbnQgKCpjYmNfZnVuYykoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBtb2RlLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgLyoqIEVuY3J5cHQgdXNpbmcgQ0ZCIChGdWxsIGxlbmd0aCkgKi8KKyAgICBpbnQgKCpjZmJfZnVuYykoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBtb2RlLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgKml2X29mZiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIC8qKiBFbmNyeXB0IHVzaW5nIENUUiAqLworICAgIGludCAoKmN0cl9mdW5jKSggdm9pZCAqY3R4LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm5vbmNlX2NvdW50ZXIsIHVuc2lnbmVkIGNoYXIgKnN0cmVhbV9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTSkKKyAgICAvKiogRW5jcnlwdCB1c2luZyBTVFJFQU0gKi8KKyAgICBpbnQgKCpzdHJlYW1fZnVuYykoIHZvaWQgKmN0eCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZgorCisgICAgLyoqIFNldCBrZXkgZm9yIGVuY3J5cHRpb24gcHVycG9zZXMgKi8KKyAgICBpbnQgKCpzZXRrZXlfZW5jX2Z1bmMpKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApOworCisgICAgLyoqIFNldCBrZXkgZm9yIGRlY3J5cHRpb24gcHVycG9zZXMgKi8KKyAgICBpbnQgKCpzZXRrZXlfZGVjX2Z1bmMpKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbik7CisKKyAgICAvKiogQWxsb2NhdGUgYSBuZXcgY29udGV4dCAqLworICAgIHZvaWQgKiAoKmN0eF9hbGxvY19mdW5jKSggdm9pZCApOworCisgICAgLyoqIEZyZWUgdGhlIGdpdmVuIGNvbnRleHQgKi8KKyAgICB2b2lkICgqY3R4X2ZyZWVfZnVuYykoIHZvaWQgKmN0eCApOworCit9OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCB0eXBlOworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqaW5mbzsKK30gbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbl90OworCitleHRlcm4gY29uc3QgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbl90IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25zW107CisKK2V4dGVybiBpbnQgbWJlZHRsc19jaXBoZXJfc3VwcG9ydGVkW107CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9XUkFQX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY21hYy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlMGI5NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY21hYy5oCkBAIC0wLDAgKzEsMTY2IEBACisvKioKKyAqIFxmaWxlIGNtYWMuaAorICoKKyAqIFxicmllZiBDaXBoZXItYmFzZWQgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChDTUFDKSBNb2RlIGZvcgorICogICAgICAgIEF1dGhlbnRpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfQ01BQ19ICisjZGVmaW5lIE1CRURUTFNfQ01BQ19ICisKKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlci5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSAgICAgICAgICAxNgorI2RlZmluZSBNQkVEVExTX0RFUzNfQkxPQ0tfU0laRSAgICAgICAgIDgKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVggICAgICAxNiAgLyogbG9uZ2VzdCB1c2VkIGJ5IENNQUMgaXMgQUVTICovCisjZWxzZQorI2RlZmluZSBNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWCAgICAgIDggICAvKiBsb25nZXN0IHVzZWQgYnkgQ01BQyBpcyAzREVTICovCisjZW5kaWYKKworLyoqCisgKiBDTUFDIGNvbnRleHQgc3RydWN0dXJlIC0gQ29udGFpbnMgaW50ZXJuYWwgc3RhdGUgaW5mb3JtYXRpb24gb25seQorICovCitzdHJ1Y3QgbWJlZHRsc19jbWFjX2NvbnRleHRfdAoreworICAgIC8qKiBJbnRlcm5hbCBzdGF0ZSBvZiB0aGUgQ01BQyBhbGdvcml0aG0gICovCisgICAgdW5zaWduZWQgY2hhciAgICAgICBzdGF0ZVtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisKKyAgICAvKiogVW5wcm9jZXNzZWQgZGF0YSAtIGVpdGhlciBkYXRhIHRoYXQgd2FzIG5vdCBibG9jayBhbGlnbmVkIGFuZCBpcyBzdGlsbAorICAgICAqICBwZW5kaW5nIHRvIGJlIHByb2Nlc3NlZCwgb3IgdGhlIGZpbmFsIGJsb2NrICovCisgICAgdW5zaWduZWQgY2hhciAgICAgICB1bnByb2Nlc3NlZF9ibG9ja1tNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisKKyAgICAvKiogTGVuZ3RoIG9mIGRhdGEgcGVuZGluZyB0byBiZSBwcm9jZXNzZWQgKi8KKyAgICBzaXplX3QgICAgICAgICAgICAgIHVucHJvY2Vzc2VkX2xlbjsKK307CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSBDTUFDIGtleSBhbmQgcHJlcGFyZSB0byBhdXRoZW50aWNhdGUgdGhlIGlucHV0CisgKiAgICAgICAgICAgICAgICAgICAgICBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGNhbGxlZCB3aXRoIGFuIGluaXRpYWxpc2VkIGNpcGhlciBjb250ZXh0LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENpcGhlciBjb250ZXh0CisgKiBccGFyYW0ga2V5ICAgICAgICAgICBDTUFDIGtleQorICogXHBhcmFtIGtleWJpdHMgICAgICAgbGVuZ3RoIG9mIHRoZSBDTUFDIGtleSBpbiBiaXRzCisgKiAgICAgICAgICAgICAgICAgICAgICAobXVzdCBiZSBhY2NlcHRhYmxlIGJ5IHRoZSBjaXBoZXIpCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIGNpcGhlciBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9jbWFjX3N0YXJ0cyggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWJpdHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBHZW5lcmljIENNQUMgcHJvY2VzcyBidWZmZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgYmV0d2VlbiBtYmVkdGxzX2NpcGhlcl9jbWFjX3N0YXJ0cygpIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9jbWFjX3Jlc2V0KCkgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9jbWFjX2ZpbmlzaCgpLgorICogICAgICAgICAgICAgICAgICAgICAgTWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENNQUMgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBPdXRwdXQgQ01BQy4KKyAqICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSgpLgorICogICAgICAgICAgICAgICAgICAgICAgVXN1YWxseSBmb2xsb3dlZCBieSBtYmVkdGxzX2NpcGhlcl9jbWFjX3Jlc2V0KCksIHRoZW4KKyAqICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2NtYWNfc3RhcnRzKCksIG9yIG1iZWR0bHNfY2lwaGVyX2ZyZWUoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDTUFDIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIEdlbmVyaWMgQ01BQyBjaGVja3N1bSByZXN1bHQKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBQcmVwYXJlIHRvIGF1dGhlbnRpY2F0ZSBhIG5ldyBtZXNzYWdlIHdpdGggdGhlIHNhbWUga2V5LgorICogICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGFmdGVyIG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCkgYW5kIGJlZm9yZQorICogICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDTUFDIGNvbnRleHQgdG8gYmUgcmVzZXQKKyAqCisgKiBccmV0dXJucyAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY19yZXNldCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBPdXRwdXQgPSBHZW5lcmljX0NNQUMoIGhtYWMga2V5LCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBjaXBoZXJfaW5mbyAgIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqIFxwYXJhbSBrZXkgICAgICAgICAgIENNQUMga2V5CisgKiBccGFyYW0ga2V5bGVuICAgICAgICBsZW5ndGggb2YgdGhlIENNQUMga2V5IGluIGJpdHMKKyAqIFxwYXJhbSBpbnB1dCAgICAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgICAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgICAgICBHZW5lcmljIENNQUMtcmVzdWx0CisgKgorICogXHJldHVybnMgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBBRVMtQ01BQy0xMjgtUFJGCisgKiAgICAgICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIChBRVMtQ01BQy1QUkYtMTI4KSwgYXMgZGVmaW5lZCBpbiBSRkMgNDYxNQorICoKKyAqIFxwYXJhbSBrZXkgICAgICAgUFJGIGtleQorICogXHBhcmFtIGtleV9sZW4gICBQUkYga2V5IGxlbmd0aCBpbiBieXRlcworICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGluX2xlbiAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIFxwYXJhbSBvdXRwdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGdlbmVyYXRlZCBwc2V1ZG9yYW5kb20gb3V0cHV0ICgxNiBieXRlcykKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19hZXNfY21hY19wcmZfMTI4KCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0RFU19DKSApCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19jbWFjX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAmJiAoIE1CRURUTFNfQUVTX0MgfHwgTUJFRFRMU19ERVNfQyApICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX0NNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jb21wYXQtMS4zLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2NvbXBhdC0xLjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2FiYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jb21wYXQtMS4zLmgKQEAgLTAsMCArMSwyNjM0IEBACisvKioKKyAqIFxmaWxlIGNvbXBhdC0xLjMuaAorICoKKyAqIFxicmllZiBDb21wYXRpYmlsaXR5IGRlZmluaXRpb25zIGZvciB1c2luZyBtYmVkIFRMUyB3aXRoIGNsaWVudCBjb2RlIHdyaXR0ZW4KKyAqICBmb3IgdGhlIFBvbGFyU1NMIG5hbWluZyBjb252ZW50aW9ucy4KKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgdGhlIG5ldyBuYW1lcyBkaXJlY3RseSBpbnN0ZWFkCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HKQorI3dhcm5pbmcgIkluY2x1ZGluZyBjb21wYXQtMS4zLmggaXMgZGVwcmVjYXRlZCIKKyNlbmRpZgorCisjaWZuZGVmIE1CRURUTFNfQ09NUEFUMTNfSAorI2RlZmluZSBNQkVEVExTX0NPTVBBVDEzX0gKKworLyoKKyAqIGNvbmZpZy5oIG9wdGlvbnMKKyAqLworI2lmIGRlZmluZWQgTUJFRFRMU19BRVNOSV9DCisjZGVmaW5lIFBPTEFSU1NMX0FFU05JX0MgTUJFRFRMU19BRVNOSV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQUVTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9BRVNfQUxUIE1CRURUTFNfQUVTX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0FFU19DCisjZGVmaW5lIFBPTEFSU1NMX0FFU19DIE1CRURUTFNfQUVTX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworI2RlZmluZSBQT0xBUlNTTF9BRVNfUk9NX1RBQkxFUyBNQkVEVExTX0FFU19ST01fVEFCTEVTCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQVJDNF9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfQVJDNF9BTFQgTUJFRFRMU19BUkM0X0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0FSQzRfQworI2RlZmluZSBQT0xBUlNTTF9BUkM0X0MgTUJFRFRMU19BUkM0X0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19BU04xX1BBUlNFX0MKKyNkZWZpbmUgUE9MQVJTU0xfQVNOMV9QQVJTRV9DIE1CRURUTFNfQVNOMV9QQVJTRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQVNOMV9XUklURV9DCisjZGVmaW5lIFBPTEFSU1NMX0FTTjFfV1JJVEVfQyBNQkVEVExTX0FTTjFfV1JJVEVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0JBU0U2NF9DCisjZGVmaW5lIFBPTEFSU1NMX0JBU0U2NF9DIE1CRURUTFNfQkFTRTY0X0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19CSUdOVU1fQworI2RlZmluZSBQT0xBUlNTTF9CSUdOVU1fQyBNQkVEVExTX0JJR05VTV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQkxPV0ZJU0hfQUxUCisjZGVmaW5lIFBPTEFSU1NMX0JMT1dGSVNIX0FMVCBNQkVEVExTX0JMT1dGSVNIX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0JMT1dGSVNIX0MKKyNkZWZpbmUgUE9MQVJTU0xfQkxPV0ZJU0hfQyBNQkVEVExTX0JMT1dGSVNIX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DQU1FTExJQV9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfQ0FNRUxMSUFfQUxUIE1CRURUTFNfQ0FNRUxMSUFfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0FNRUxMSUFfQworI2RlZmluZSBQT0xBUlNTTF9DQU1FTExJQV9DIE1CRURUTFNfQ0FNRUxMSUFfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWQorI2RlZmluZSBQT0xBUlNTTF9DQU1FTExJQV9TTUFMTF9NRU1PUlkgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DQ01fQworI2RlZmluZSBQT0xBUlNTTF9DQ01fQyBNQkVEVExTX0NDTV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0VSVFNfQworI2RlZmluZSBQT0xBUlNTTF9DRVJUU19DIE1CRURUTFNfQ0VSVFNfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NJUEhFUl9DCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DIE1CRURUTFNfQ0lQSEVSX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX01PREVfQ0JDIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9NT0RFX0NGQiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfTU9ERV9DVFIgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX05VTExfQ0lQSEVSIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9QQURESU5HX1BLQ1M3IE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfUEFERElOR19aRVJPUyBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0NUUl9EUkJHX0MKKyNkZWZpbmUgUE9MQVJTU0xfQ1RSX0RSQkdfQyBNQkVEVExTX0NUUl9EUkJHX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ERUJVR19DCisjZGVmaW5lIFBPTEFSU1NMX0RFQlVHX0MgTUJFRFRMU19ERUJVR19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECisjZGVmaW5lIFBPTEFSU1NMX0RFUFJFQ0FURURfUkVNT1ZFRCBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworI2RlZmluZSBQT0xBUlNTTF9ERVBSRUNBVEVEX1dBUk5JTkcgTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ERVNfQUxUCisjZGVmaW5lIFBPTEFSU1NMX0RFU19BTFQgTUJFRFRMU19ERVNfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfREVTX0MKKyNkZWZpbmUgUE9MQVJTU0xfREVTX0MgTUJFRFRMU19ERVNfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0RITV9DCisjZGVmaW5lIFBPTEFSU1NMX0RITV9DIE1CRURUTFNfREhNX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ0RIX0MKKyNkZWZpbmUgUE9MQVJTU0xfRUNESF9DIE1CRURUTFNfRUNESF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNEU0FfQworI2RlZmluZSBQT0xBUlNTTF9FQ0RTQV9DIE1CRURUTFNfRUNEU0FfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyNkZWZpbmUgUE9MQVJTU0xfRUNEU0FfREVURVJNSU5JU1RJQyBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfQworI2RlZmluZSBQT0xBUlNTTF9FQ1BfQyBNQkVEVExTX0VDUF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfTTI1NV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VDUF9NQVhfQklUUworI2RlZmluZSBQT0xBUlNTTF9FQ1BfTUFYX0JJVFMgTUJFRFRMU19FQ1BfTUFYX0JJVFMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FQ1BfTklTVF9PUFRJTQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfTklTVF9PUFRJTSBNQkVEVExTX0VDUF9OSVNUX09QVElNCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRUNQX1dJTkRPV19TSVpFCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9XSU5ET1dfU0laRSBNQkVEVExTX0VDUF9XSU5ET1dfU0laRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUworI2RlZmluZSBQT0xBUlNTTF9FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FTlRST1BZX0MKKyNkZWZpbmUgUE9MQVJTU0xfRU5UUk9QWV9DIE1CRURUTFNfRU5UUk9QWV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKyNkZWZpbmUgUE9MQVJTU0xfRU5UUk9QWV9GT1JDRV9TSEEyNTYgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0VSUk9SX0MKKyNkZWZpbmUgUE9MQVJTU0xfRVJST1JfQyBNQkVEVExTX0VSUk9SX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9CQworI2RlZmluZSBQT0xBUlNTTF9FUlJPUl9TVFJFUlJPUl9CQyBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0JDCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkKKyNkZWZpbmUgUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfRFVNTVkgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0ZTX0lPCisjZGVmaW5lIFBPTEFSU1NMX0ZTX0lPIE1CRURUTFNfRlNfSU8KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19HQ01fQworI2RlZmluZSBQT0xBUlNTTF9HQ01fQyBNQkVEVExTX0dDTV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfR0VOUFJJTUUKKyNkZWZpbmUgUE9MQVJTU0xfR0VOUFJJTUUgTUJFRFRMU19HRU5QUklNRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0hBVkVHRV9DCisjZGVmaW5lIFBPTEFSU1NMX0hBVkVHRV9DIE1CRURUTFNfSEFWRUdFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19IQVZFX0FTTQorI2RlZmluZSBQT0xBUlNTTF9IQVZFX0FTTSBNQkVEVExTX0hBVkVfQVNNCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfSEFWRV9TU0UyCisjZGVmaW5lIFBPTEFSU1NMX0hBVkVfU1NFMiBNQkVEVExTX0hBVkVfU1NFMgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0hBVkVfVElNRQorI2RlZmluZSBQT0xBUlNTTF9IQVZFX1RJTUUgTUJFRFRMU19IQVZFX1RJTUUKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ITUFDX0RSQkdfQworI2RlZmluZSBQT0xBUlNTTF9ITUFDX0RSQkdfQyBNQkVEVExTX0hNQUNfRFJCR19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVAorI2RlZmluZSBQT0xBUlNTTF9ITUFDX0RSQkdfTUFYX0lOUFVUIE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0hNQUNfRFJCR19NQVhfUkVRVUVTVAorI2RlZmluZSBQT0xBUlNTTF9ITUFDX0RSQkdfTUFYX1JFUVVFU1QgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1NFRURfSU5QVVQKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUIE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTAorI2RlZmluZSBQT0xBUlNTTF9ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMIE1CRURUTFNfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRDJfQUxUCisjZGVmaW5lIFBPTEFSU1NMX01EMl9BTFQgTUJFRFRMU19NRDJfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUQyX0MKKyNkZWZpbmUgUE9MQVJTU0xfTUQyX0MgTUJFRFRMU19NRDJfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01EMl9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9NRDJfUFJPQ0VTU19BTFQgTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRDRfQUxUCisjZGVmaW5lIFBPTEFSU1NMX01ENF9BTFQgTUJFRFRMU19NRDRfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUQ0X0MKKyNkZWZpbmUgUE9MQVJTU0xfTUQ0X0MgTUJFRFRMU19NRDRfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01ENF9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9NRDRfUFJPQ0VTU19BTFQgTUJFRFRMU19NRDRfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRDVfQUxUCisjZGVmaW5lIFBPTEFSU1NMX01ENV9BTFQgTUJFRFRMU19NRDVfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUQ1X0MKKyNkZWZpbmUgUE9MQVJTU0xfTUQ1X0MgTUJFRFRMU19NRDVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01ENV9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9NRDVfUFJPQ0VTU19BTFQgTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRF9DCisjZGVmaW5lIFBPTEFSU1NMX01EX0MgTUJFRFRMU19NRF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFCisjZGVmaW5lIFBPTEFSU1NMX01FTU9SWV9BTElHTl9NVUxUSVBMRSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKKyNkZWZpbmUgUE9MQVJTU0xfTUVNT1JZX0JBQ0tUUkFDRSBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyNkZWZpbmUgUE9MQVJTU0xfTUVNT1JZX0JVRkZFUl9BTExPQ19DIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTUVNT1JZX0MKKyNkZWZpbmUgUE9MQVJTU0xfTUVNT1JZX0MgTUJFRFRMU19NRU1PUllfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX01FTU9SWV9ERUJVRworI2RlZmluZSBQT0xBUlNTTF9NRU1PUllfREVCVUcgTUJFRFRMU19NRU1PUllfREVCVUcKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19NUElfTUFYX1NJWkUKKyNkZWZpbmUgUE9MQVJTU0xfTVBJX01BWF9TSVpFIE1CRURUTFNfTVBJX01BWF9TSVpFCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTVBJX1dJTkRPV19TSVpFCisjZGVmaW5lIFBPTEFSU1NMX01QSV9XSU5ET1dfU0laRSBNQkVEVExTX01QSV9XSU5ET1dfU0laRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX05FVF9DCisjZGVmaW5lIFBPTEFSU1NMX05FVF9DIE1CRURUTFNfTkVUX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworI2RlZmluZSBQT0xBUlNTTF9OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUyBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorI2RlZmluZSBQT0xBUlNTTF9OT19QTEFURk9STV9FTlRST1BZIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX09JRF9DCisjZGVmaW5lIFBPTEFSU1NMX09JRF9DIE1CRURUTFNfT0lEX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QQURMT0NLX0MKKyNkZWZpbmUgUE9MQVJTU0xfUEFETE9DS19DIE1CRURUTFNfUEFETE9DS19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEJLREYyX0MKKyNkZWZpbmUgUE9MQVJTU0xfUEJLREYyX0MgTUJFRFRMU19QQktERjJfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BFTV9QQVJTRV9DCisjZGVmaW5lIFBPTEFSU1NMX1BFTV9QQVJTRV9DIE1CRURUTFNfUEVNX1BBUlNFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QRU1fV1JJVEVfQworI2RlZmluZSBQT0xBUlNTTF9QRU1fV1JJVEVfQyBNQkVEVExTX1BFTV9XUklURV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtDUzExX0MKKyNkZWZpbmUgUE9MQVJTU0xfUEtDUzExX0MgTUJFRFRMU19QS0NTMTFfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLQ1MxMl9DCisjZGVmaW5lIFBPTEFSU1NMX1BLQ1MxMl9DIE1CRURUTFNfUEtDUzEyX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QS0NTMV9WMTUKKyNkZWZpbmUgUE9MQVJTU0xfUEtDUzFfVjE1IE1CRURUTFNfUEtDUzFfVjE1CisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtDUzFfVjIxCisjZGVmaW5lIFBPTEFSU1NMX1BLQ1MxX1YyMSBNQkVEVExTX1BLQ1MxX1YyMQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLQ1M1X0MKKyNkZWZpbmUgUE9MQVJTU0xfUEtDUzVfQyBNQkVEVExTX1BLQ1M1X0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QS19DCisjZGVmaW5lIFBPTEFSU1NMX1BLX0MgTUJFRFRMU19QS19DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtfUEFSU0VfQworI2RlZmluZSBQT0xBUlNTTF9QS19QQVJTRV9DIE1CRURUTFNfUEtfUEFSU0VfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECisjZGVmaW5lIFBPTEFSU1NMX1BLX1BBUlNFX0VDX0VYVEVOREVEIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQKKyNkZWZpbmUgUE9MQVJTU0xfUEtfUlNBX0FMVF9TVVBQT1JUIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUEtfV1JJVEVfQworI2RlZmluZSBQT0xBUlNTTF9QS19XUklURV9DIE1CRURUTFNfUEtfV1JJVEVfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX0MKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fQyBNQkVEVExTX1BMQVRGT1JNX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9FWElUX0FMVCBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTworI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9FWElUX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fRVhJVF9NQUNSTworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX0ZQUklOVEZfQUxUIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX0ZQUklOVEZfTUFDUk8gTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTworI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9GUkVFX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9NRU1PUlkgTUJFRFRMU19QTEFURk9STV9NRU1PUlkKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMgTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVAorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9QUklOVEZfQUxUIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTworI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9QUklOVEZfTUFDUk8gTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU05QUklOVEZfQUxUIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfTUFDUk8KKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU05QUklOVEZfTUFDUk8gTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUCisjZGVmaW5lIFBPTEFSU1NMX1BMQVRGT1JNX1NURF9FWElUIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URgorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9TVERfRlBSSU5URiBNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU1REX0ZSRUUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1NURF9NQUxMT0MKKyNkZWZpbmUgUE9MQVJTU0xfUExBVEZPUk1fU1REX01BTExPQyBNQkVEVExTX1BMQVRGT1JNX1NURF9NQUxMT0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUgorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9TVERfTUVNX0hEUiBNQkVEVExTX1BMQVRGT1JNX1NURF9NRU1fSERSCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URgorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9TVERfUFJJTlRGIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URgorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9TVERfU05QUklOVEYgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19QU0tfTUFYX0xFTgorI2RlZmluZSBQT0xBUlNTTF9QU0tfTUFYX0xFTiBNQkVEVExTX1BTS19NQVhfTEVOCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisjZGVmaW5lIFBPTEFSU1NMX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUyBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1JJUEVNRDE2MF9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfUklQRU1EMTYwX0FMVCBNQkVEVExTX1JJUEVNRDE2MF9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19SSVBFTUQxNjBfQworI2RlZmluZSBQT0xBUlNTTF9SSVBFTUQxNjBfQyBNQkVEVExTX1JJUEVNRDE2MF9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfUklQRU1EMTYwX1BST0NFU1NfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1JJUEVNRDE2MF9QUk9DRVNTX0FMVCBNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1JTQV9DCisjZGVmaW5lIFBPTEFSU1NMX1JTQV9DIE1CRURUTFNfUlNBX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19SU0FfTk9fQ1JUCisjZGVmaW5lIFBPTEFSU1NMX1JTQV9OT19DUlQgTUJFRFRMU19SU0FfTk9fQ1JUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0VMRl9URVNUCisjZGVmaW5lIFBPTEFSU1NMX1NFTEZfVEVTVCBNQkVEVExTX1NFTEZfVEVTVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NIQTFfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1NIQTFfQUxUIE1CRURUTFNfU0hBMV9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TSEExX0MKKyNkZWZpbmUgUE9MQVJTU0xfU0hBMV9DIE1CRURUTFNfU0hBMV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVAorI2RlZmluZSBQT0xBUlNTTF9TSEExX1BST0NFU1NfQUxUIE1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NIQTI1Nl9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfU0hBMjU2X0FMVCBNQkVEVExTX1NIQTI1Nl9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TSEEyNTZfQworI2RlZmluZSBQT0xBUlNTTF9TSEEyNTZfQyBNQkVEVExTX1NIQTI1Nl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1NIQTI1Nl9QUk9DRVNTX0FMVCBNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NIQTUxMl9BTFQKKyNkZWZpbmUgUE9MQVJTU0xfU0hBNTEyX0FMVCBNQkVEVExTX1NIQTUxMl9BTFQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TSEE1MTJfQworI2RlZmluZSBQT0xBUlNTTF9TSEE1MTJfQyBNQkVEVExTX1NIQTUxMl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU0hBNTEyX1BST0NFU1NfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1NIQTUxMl9QUk9DRVNTX0FMVCBNQkVEVExTX1NIQTUxMl9QUk9DRVNTX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9BRUFEX1JBTkRPTV9JVgorI2RlZmluZSBQT0xBUlNTTF9TU0xfQUVBRF9SQU5ET01fSVYgTUJFRFRMU19TU0xfQUVBRF9SQU5ET01fSVYKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfQUxFUlRfTUVTU0FHRVMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0FMRVJUX01FU1NBR0VTIE1CRURUTFNfU1NMX0FMRVJUX01FU1NBR0VTCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworI2RlZmluZSBQT0xBUlNTTF9TU0xfQUxMX0FMRVJUX01FU1NBR0VTIE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9BTFBOCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9BTFBOIE1CRURUTFNfU1NMX0FMUE4KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfQ0FDSEVfQworI2RlZmluZSBQT0xBUlNTTF9TU0xfQ0FDSEVfQyBNQkVEVExTX1NTTF9DQUNIRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORyBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9DTElfQworI2RlZmluZSBQT0xBUlNTTF9TU0xfQ0xJX0MgTUJFRFRMU19TU0xfQ0xJX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfQ09PS0lFX0MKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0NPT0tJRV9DIE1CRURUTFNfU1NMX0NPT0tJRV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9DT09LSUVfVElNRU9VVCBNQkVEVExTX1NTTF9DT09LSUVfVElNRU9VVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9ERUJVR19BTEwKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0RFQlVHX0FMTCBNQkVEVExTX1NTTF9ERUJVR19BTEwKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfRElTQUJMRV9SRU5FR09USUFUSU9OCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9ESVNBQkxFX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfRElTQUJMRV9SRU5FR09USUFUSU9OCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0RUTFNfQU5USV9SRVBMQVkgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVAorI2RlZmluZSBQT0xBUlNTTF9TU0xfRFRMU19CQURNQUNfTElNSVQgTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0RUTFNfSEVMTE9fVkVSSUZZIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVgorI2RlZmluZSBQT0xBUlNTTF9TU0xfRkFMTEJBQ0tfU0NTViBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorI2RlZmluZSBQT0xBUlNTTF9TU0xfSFdfUkVDT1JEX0FDQ0VMIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworI2RlZmluZSBQT0xBUlNTTF9TU0xfUFJPVE9fRFRMUyBNQkVEVExTX1NTTF9QUk9UT19EVExTCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1BST1RPX1NTTDMgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9QUk9UT19UTFMxIE1CRURUTFNfU1NMX1BST1RPX1RMUzEKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9QUk9UT19UTFMxXzEgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorI2RlZmluZSBQT0xBUlNTTF9TU0xfUFJPVE9fVExTMV8yIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisjZGVmaW5lIFBPTEFSU1NMX1NTTF9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTgorI2RlZmluZSBQT0xBUlNTTF9TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworI2RlZmluZSBQT0xBUlNTTF9TU0xfU0VTU0lPTl9USUNLRVRTIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9TUlZfQworI2RlZmluZSBQT0xBUlNTTF9TU0xfU1JWX0MgTUJFRFRMU19TU0xfU1JWX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTworI2RlZmluZSBQT0xBUlNTTF9TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPIE1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1NTTF9UTFNfQworI2RlZmluZSBQT0xBUlNTTF9TU0xfVExTX0MgTUJFRFRMU19TU0xfVExTX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX1RSVU5DQVRFRF9ITUFDIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfVEhSRUFESU5HX0FMVAorI2RlZmluZSBQT0xBUlNTTF9USFJFQURJTkdfQUxUIE1CRURUTFNfVEhSRUFESU5HX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1RIUkVBRElOR19DCisjZGVmaW5lIFBPTEFSU1NMX1RIUkVBRElOR19DIE1CRURUTFNfVEhSRUFESU5HX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorI2RlZmluZSBQT0xBUlNTTF9USFJFQURJTkdfUFRIUkVBRCBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFECisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfVElNSU5HX0FMVAorI2RlZmluZSBQT0xBUlNTTF9USU1JTkdfQUxUIE1CRURUTFNfVElNSU5HX0FMVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1RJTUlOR19DCisjZGVmaW5lIFBPTEFSU1NMX1RJTUlOR19DIE1CRURUTFNfVElNSU5HX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19WRVJTSU9OX0MKKyNkZWZpbmUgUE9MQVJTU0xfVkVSU0lPTl9DIE1CRURUTFNfVkVSU0lPTl9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX0ZFQVRVUkVTIE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMyBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorI2RlZmluZSBQT0xBUlNTTF9YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTiBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRQorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFIE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0NSRUFURV9DCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1JFQVRFX0MgTUJFRFRMU19YNTA5X0NSRUFURV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworI2RlZmluZSBQT0xBUlNTTF9YNTA5X0NSTF9QQVJTRV9DIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DUlRfUEFSU0VfQyBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X0NSVF9XUklURV9DCisjZGVmaW5lIFBPTEFSU1NMX1g1MDlfQ1JUX1dSSVRFX0MgTUJFRFRMU19YNTA5X0NSVF9XUklURV9DCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQworI2RlZmluZSBQT0xBUlNTTF9YNTA5X0NTUl9QQVJTRV9DIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DU1JfV1JJVEVfQyBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBIE1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1g1MDlfVVNFX0MKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9VU0VfQyBNQkVEVExTX1g1MDlfVVNFX0MKKyNlbmRpZgorI2lmIGRlZmluZWQgTUJFRFRMU19YVEVBX0FMVAorI2RlZmluZSBQT0xBUlNTTF9YVEVBX0FMVCBNQkVEVExTX1hURUFfQUxUCisjZW5kaWYKKyNpZiBkZWZpbmVkIE1CRURUTFNfWFRFQV9DCisjZGVmaW5lIFBPTEFSU1NMX1hURUFfQyBNQkVEVExTX1hURUFfQworI2VuZGlmCisjaWYgZGVmaW5lZCBNQkVEVExTX1pMSUJfU1VQUE9SVAorI2RlZmluZSBQT0xBUlNTTF9aTElCX1NVUFBPUlQgTUJFRFRMU19aTElCX1NVUFBPUlQKKyNlbmRpZgorCisvKgorICogTWlzYyBuYW1lcyAobWFjcm9zLCB0eXBlcywgZnVuY3Rpb25zLCBlbnVtIGNvbnN0YW50cy4uLikKKyAqLworI2RlZmluZSBBRVNfREVDUllQVCBNQkVEVExTX0FFU19ERUNSWVBUCisjZGVmaW5lIEFFU19FTkNSWVBUIE1CRURUTFNfQUVTX0VOQ1JZUFQKKyNkZWZpbmUgQVNOMV9CSVRfU1RSSU5HIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HCisjZGVmaW5lIEFTTjFfQk1QX1NUUklORyBNQkVEVExTX0FTTjFfQk1QX1NUUklORworI2RlZmluZSBBU04xX0JPT0xFQU4gTUJFRFRMU19BU04xX0JPT0xFQU4KKyNkZWZpbmUgQVNOMV9DSEtfQUREIE1CRURUTFNfQVNOMV9DSEtfQURECisjZGVmaW5lIEFTTjFfQ09OU1RSVUNURUQgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVECisjZGVmaW5lIEFTTjFfQ09OVEVYVF9TUEVDSUZJQyBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQworI2RlZmluZSBBU04xX0dFTkVSQUxJWkVEX1RJTUUgTUJFRFRMU19BU04xX0dFTkVSQUxJWkVEX1RJTUUKKyNkZWZpbmUgQVNOMV9JQTVfU1RSSU5HIE1CRURUTFNfQVNOMV9JQTVfU1RSSU5HCisjZGVmaW5lIEFTTjFfSU5URUdFUiBNQkVEVExTX0FTTjFfSU5URUdFUgorI2RlZmluZSBBU04xX05VTEwgTUJFRFRMU19BU04xX05VTEwKKyNkZWZpbmUgQVNOMV9PQ1RFVF9TVFJJTkcgTUJFRFRMU19BU04xX09DVEVUX1NUUklORworI2RlZmluZSBBU04xX09JRCBNQkVEVExTX0FTTjFfT0lECisjZGVmaW5lIEFTTjFfUFJJTUlUSVZFIE1CRURUTFNfQVNOMV9QUklNSVRJVkUKKyNkZWZpbmUgQVNOMV9QUklOVEFCTEVfU1RSSU5HIE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HCisjZGVmaW5lIEFTTjFfU0VRVUVOQ0UgTUJFRFRMU19BU04xX1NFUVVFTkNFCisjZGVmaW5lIEFTTjFfU0VUIE1CRURUTFNfQVNOMV9TRVQKKyNkZWZpbmUgQVNOMV9UNjFfU1RSSU5HIE1CRURUTFNfQVNOMV9UNjFfU1RSSU5HCisjZGVmaW5lIEFTTjFfVU5JVkVSU0FMX1NUUklORyBNQkVEVExTX0FTTjFfVU5JVkVSU0FMX1NUUklORworI2RlZmluZSBBU04xX1VUQ19USU1FIE1CRURUTFNfQVNOMV9VVENfVElNRQorI2RlZmluZSBBU04xX1VURjhfU1RSSU5HIE1CRURUTFNfQVNOMV9VVEY4X1NUUklORworI2RlZmluZSBCQURDRVJUX0NOX01JU01BVENIIE1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENICisjZGVmaW5lIEJBRENFUlRfRVhQSVJFRCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFBJUkVECisjZGVmaW5lIEJBRENFUlRfRlVUVVJFIE1CRURUTFNfWDUwOV9CQURDRVJUX0ZVVFVSRQorI2RlZmluZSBCQURDRVJUX01JU1NJTkcgTUJFRFRMU19YNTA5X0JBRENFUlRfTUlTU0lORworI2RlZmluZSBCQURDRVJUX05PVF9UUlVTVEVEIE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVECisjZGVmaW5lIEJBRENFUlRfT1RIRVIgTUJFRFRMU19YNTA5X0JBRENFUlRfT1RIRVIKKyNkZWZpbmUgQkFEQ0VSVF9SRVZPS0VEIE1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQKKyNkZWZpbmUgQkFEQ0VSVF9TS0lQX1ZFUklGWSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9TS0lQX1ZFUklGWQorI2RlZmluZSBCQURDUkxfRVhQSVJFRCBNQkVEVExTX1g1MDlfQkFEQ1JMX0VYUElSRUQKKyNkZWZpbmUgQkFEQ1JMX0ZVVFVSRSBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRQorI2RlZmluZSBCQURDUkxfTk9UX1RSVVNURUQgTUJFRFRMU19YNTA5X0JBRENSTF9OT1RfVFJVU1RFRAorI2RlZmluZSBCTE9XRklTSF9CTE9DS1NJWkUgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkUKKyNkZWZpbmUgQkxPV0ZJU0hfREVDUllQVCBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQKKyNkZWZpbmUgQkxPV0ZJU0hfRU5DUllQVCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQKKyNkZWZpbmUgQkxPV0ZJU0hfTUFYX0tFWSBNQkVEVExTX0JMT1dGSVNIX01BWF9LRVlfQklUUworI2RlZmluZSBCTE9XRklTSF9NSU5fS0VZIE1CRURUTFNfQkxPV0ZJU0hfTUlOX0tFWV9CSVRTCisjZGVmaW5lIEJMT1dGSVNIX1JPVU5EUyBNQkVEVExTX0JMT1dGSVNIX1JPVU5EUworI2RlZmluZSBDQU1FTExJQV9ERUNSWVBUIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVAorI2RlZmluZSBDQU1FTExJQV9FTkNSWVBUIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVAorI2RlZmluZSBDT0xMRUNUX1NJWkUgTUJFRFRMU19IQVZFR0VfQ09MTEVDVF9TSVpFCisjZGVmaW5lIENUUl9EUkJHX0JMT0NLU0laRSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRQorI2RlZmluZSBDVFJfRFJCR19FTlRST1BZX0xFTiBNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOCisjZGVmaW5lIENUUl9EUkJHX0tFWUJJVFMgTUJFRFRMU19DVFJfRFJCR19LRVlCSVRTCisjZGVmaW5lIENUUl9EUkJHX0tFWVNJWkUgTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFCisjZGVmaW5lIENUUl9EUkJHX01BWF9JTlBVVCBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVAorI2RlZmluZSBDVFJfRFJCR19NQVhfUkVRVUVTVCBNQkVEVExTX0NUUl9EUkJHX01BWF9SRVFVRVNUCisjZGVmaW5lIENUUl9EUkJHX01BWF9TRUVEX0lOUFVUIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQKKyNkZWZpbmUgQ1RSX0RSQkdfUFJfT0ZGIE1CRURUTFNfQ1RSX0RSQkdfUFJfT0ZGCisjZGVmaW5lIENUUl9EUkJHX1BSX09OIE1CRURUTFNfQ1RSX0RSQkdfUFJfT04KKyNkZWZpbmUgQ1RSX0RSQkdfUkVTRUVEX0lOVEVSVkFMIE1CRURUTFNfQ1RSX0RSQkdfUkVTRUVEX0lOVEVSVkFMCisjZGVmaW5lIENUUl9EUkJHX1NFRURMRU4gTUJFRFRMU19DVFJfRFJCR19TRUVETEVOCisjZGVmaW5lIERFUFJFQ0FURUQgTUJFRFRMU19ERVBSRUNBVEVECisjZGVmaW5lIERFU19ERUNSWVBUIE1CRURUTFNfREVTX0RFQ1JZUFQKKyNkZWZpbmUgREVTX0VOQ1JZUFQgTUJFRFRMU19ERVNfRU5DUllQVAorI2RlZmluZSBERVNfS0VZX1NJWkUgTUJFRFRMU19ERVNfS0VZX1NJWkUKKyNkZWZpbmUgRU5UUk9QWV9CTE9DS19TSVpFIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFCisjZGVmaW5lIEVOVFJPUFlfTUFYX0dBVEhFUiBNQkVEVExTX0VOVFJPUFlfTUFYX0dBVEhFUgorI2RlZmluZSBFTlRST1BZX01BWF9TRUVEX1NJWkUgTUJFRFRMU19FTlRST1BZX01BWF9TRUVEX1NJWkUKKyNkZWZpbmUgRU5UUk9QWV9NQVhfU09VUkNFUyBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMKKyNkZWZpbmUgRU5UUk9QWV9NSU5fSEFSRENMT0NLIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRENMT0NLCisjZGVmaW5lIEVOVFJPUFlfTUlOX0hBVkVHRSBNQkVEVExTX0VOVFJPUFlfTUlOX0hBVkVHRQorI2RlZmluZSBFTlRST1BZX01JTl9QTEFURk9STSBNQkVEVExTX0VOVFJPUFlfTUlOX1BMQVRGT1JNCisjZGVmaW5lIEVOVFJPUFlfU09VUkNFX01BTlVBTCBNQkVEVExTX0VOVFJPUFlfU09VUkNFX01BTlVBTAorI2RlZmluZSBFWFRfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSIE1CRURUTFNfWDUwOV9FWFRfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSCisjZGVmaW5lIEVYVF9CQVNJQ19DT05TVFJBSU5UUyBNQkVEVExTX1g1MDlfRVhUX0JBU0lDX0NPTlNUUkFJTlRTCisjZGVmaW5lIEVYVF9DRVJUSUZJQ0FURV9QT0xJQ0lFUyBNQkVEVExTX1g1MDlfRVhUX0NFUlRJRklDQVRFX1BPTElDSUVTCisjZGVmaW5lIEVYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUyBNQkVEVExTX1g1MDlfRVhUX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTCisjZGVmaW5lIEVYVF9FWFRFTkRFRF9LRVlfVVNBR0UgTUJFRFRMU19YNTA5X0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UKKyNkZWZpbmUgRVhUX0ZSRVNIRVNUX0NSTCBNQkVEVExTX1g1MDlfRVhUX0ZSRVNIRVNUX0NSTAorI2RlZmluZSBFWFRfSU5JSElCSVRfQU5ZUE9MSUNZIE1CRURUTFNfWDUwOV9FWFRfSU5JSElCSVRfQU5ZUE9MSUNZCisjZGVmaW5lIEVYVF9JU1NVRVJfQUxUX05BTUUgTUJFRFRMU19YNTA5X0VYVF9JU1NVRVJfQUxUX05BTUUKKyNkZWZpbmUgRVhUX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfRVhUX0tFWV9VU0FHRQorI2RlZmluZSBFWFRfTkFNRV9DT05TVFJBSU5UUyBNQkVEVExTX1g1MDlfRVhUX05BTUVfQ09OU1RSQUlOVFMKKyNkZWZpbmUgRVhUX05TX0NFUlRfVFlQRSBNQkVEVExTX1g1MDlfRVhUX05TX0NFUlRfVFlQRQorI2RlZmluZSBFWFRfUE9MSUNZX0NPTlNUUkFJTlRTIE1CRURUTFNfWDUwOV9FWFRfUE9MSUNZX0NPTlNUUkFJTlRTCisjZGVmaW5lIEVYVF9QT0xJQ1lfTUFQUElOR1MgTUJFRFRMU19YNTA5X0VYVF9QT0xJQ1lfTUFQUElOR1MKKyNkZWZpbmUgRVhUX1NVQkpFQ1RfQUxUX05BTUUgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0FMVF9OQU1FCisjZGVmaW5lIEVYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUyBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTCisjZGVmaW5lIEVYVF9TVUJKRUNUX0tFWV9JREVOVElGSUVSIE1CRURUTFNfWDUwOV9FWFRfU1VCSkVDVF9LRVlfSURFTlRJRklFUgorI2RlZmluZSBHQ01fREVDUllQVCBNQkVEVExTX0dDTV9ERUNSWVBUCisjZGVmaW5lIEdDTV9FTkNSWVBUIE1CRURUTFNfR0NNX0VOQ1JZUFQKKyNkZWZpbmUgS1VfQ1JMX1NJR04gTUJFRFRMU19YNTA5X0tVX0NSTF9TSUdOCisjZGVmaW5lIEtVX0RBVEFfRU5DSVBIRVJNRU5UIE1CRURUTFNfWDUwOV9LVV9EQVRBX0VOQ0lQSEVSTUVOVAorI2RlZmluZSBLVV9ESUdJVEFMX1NJR05BVFVSRSBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkUKKyNkZWZpbmUgS1VfS0VZX0FHUkVFTUVOVCBNQkVEVExTX1g1MDlfS1VfS0VZX0FHUkVFTUVOVAorI2RlZmluZSBLVV9LRVlfQ0VSVF9TSUdOIE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOCisjZGVmaW5lIEtVX0tFWV9FTkNJUEhFUk1FTlQgTUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlQKKyNkZWZpbmUgS1VfTk9OX1JFUFVESUFUSU9OIE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT04KKyNkZWZpbmUgTE5fMl9ESVZfTE5fMTBfU0NBTEUxMDAgTUJFRFRMU19MTl8yX0RJVl9MTl8xMF9TQ0FMRTEwMAorI2RlZmluZSBNRF9DT05URVhUX1RfSU5JVCBNQkVEVExTX01EX0NPTlRFWFRfVF9JTklUCisjZGVmaW5lIE1FTU9SWV9WRVJJRllfQUxMT0MgTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMTE9DCisjZGVmaW5lIE1FTU9SWV9WRVJJRllfQUxXQVlTIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTFdBWVMKKyNkZWZpbmUgTUVNT1JZX1ZFUklGWV9GUkVFIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9GUkVFCisjZGVmaW5lIE1FTU9SWV9WRVJJRllfTk9ORSBNQkVEVExTX01FTU9SWV9WRVJJRllfTk9ORQorI2RlZmluZSBNUElfQ0hLIE1CRURUTFNfTVBJX0NISworI2RlZmluZSBORVRfUFJPVE9fVENQIE1CRURUTFNfTkVUX1BST1RPX1RDUAorI2RlZmluZSBORVRfUFJPVE9fVURQIE1CRURUTFNfTkVUX1BST1RPX1VEUAorI2RlZmluZSBOU19DRVJUX1RZUEVfRU1BSUwgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTAorI2RlZmluZSBOU19DRVJUX1RZUEVfRU1BSUxfQ0EgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTF9DQQorI2RlZmluZSBOU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkcgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklORworI2RlZmluZSBOU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkdfQ0EgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklOR19DQQorI2RlZmluZSBOU19DRVJUX1RZUEVfUkVTRVJWRUQgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9SRVNFUlZFRAorI2RlZmluZSBOU19DRVJUX1RZUEVfU1NMX0NBIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NBCisjZGVmaW5lIE5TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NMSUVOVAorI2RlZmluZSBOU19DRVJUX1RZUEVfU1NMX1NFUlZFUiBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVIKKyNkZWZpbmUgT0lEX0FOU0lfWDlfNjIgTUJFRFRMU19PSURfQU5TSV9YOV82MgorI2RlZmluZSBPSURfQU5TSV9YOV82Ml9GSUVMRF9UWVBFIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfRklFTERfVFlQRQorI2RlZmluZSBPSURfQU5TSV9YOV82Ml9QUklNRV9GSUVMRCBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1BSSU1FX0ZJRUxECisjZGVmaW5lIE9JRF9BTlNJX1g5XzYyX1NJRyBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJRworI2RlZmluZSBPSURfQU5TSV9YOV82Ml9TSUdfU0hBMiBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJR19TSEEyCisjZGVmaW5lIE9JRF9BTllfRVhURU5ERURfS0VZX1VTQUdFIE1CRURUTFNfT0lEX0FOWV9FWFRFTkRFRF9LRVlfVVNBR0UKKyNkZWZpbmUgT0lEX0FUIE1CRURUTFNfT0lEX0FUCisjZGVmaW5lIE9JRF9BVF9DTiBNQkVEVExTX09JRF9BVF9DTgorI2RlZmluZSBPSURfQVRfQ09VTlRSWSBNQkVEVExTX09JRF9BVF9DT1VOVFJZCisjZGVmaW5lIE9JRF9BVF9ETl9RVUFMSUZJRVIgTUJFRFRMU19PSURfQVRfRE5fUVVBTElGSUVSCisjZGVmaW5lIE9JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUiBNQkVEVExTX09JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUgorI2RlZmluZSBPSURfQVRfR0lWRU5fTkFNRSBNQkVEVExTX09JRF9BVF9HSVZFTl9OQU1FCisjZGVmaW5lIE9JRF9BVF9JTklUSUFMUyBNQkVEVExTX09JRF9BVF9JTklUSUFMUworI2RlZmluZSBPSURfQVRfTE9DQUxJVFkgTUJFRFRMU19PSURfQVRfTE9DQUxJVFkKKyNkZWZpbmUgT0lEX0FUX09SR0FOSVpBVElPTiBNQkVEVExTX09JRF9BVF9PUkdBTklaQVRJT04KKyNkZWZpbmUgT0lEX0FUX09SR19VTklUIE1CRURUTFNfT0lEX0FUX09SR19VTklUCisjZGVmaW5lIE9JRF9BVF9QT1NUQUxfQUREUkVTUyBNQkVEVExTX09JRF9BVF9QT1NUQUxfQUREUkVTUworI2RlZmluZSBPSURfQVRfUE9TVEFMX0NPREUgTUJFRFRMU19PSURfQVRfUE9TVEFMX0NPREUKKyNkZWZpbmUgT0lEX0FUX1BTRVVET05ZTSBNQkVEVExTX09JRF9BVF9QU0VVRE9OWU0KKyNkZWZpbmUgT0lEX0FUX1NFUklBTF9OVU1CRVIgTUJFRFRMU19PSURfQVRfU0VSSUFMX05VTUJFUgorI2RlZmluZSBPSURfQVRfU1RBVEUgTUJFRFRMU19PSURfQVRfU1RBVEUKKyNkZWZpbmUgT0lEX0FUX1NVUl9OQU1FIE1CRURUTFNfT0lEX0FUX1NVUl9OQU1FCisjZGVmaW5lIE9JRF9BVF9USVRMRSBNQkVEVExTX09JRF9BVF9USVRMRQorI2RlZmluZSBPSURfQVRfVU5JUVVFX0lERU5USUZJRVIgTUJFRFRMU19PSURfQVRfVU5JUVVFX0lERU5USUZJRVIKKyNkZWZpbmUgT0lEX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUiBNQkVEVExTX09JRF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIKKyNkZWZpbmUgT0lEX0JBU0lDX0NPTlNUUkFJTlRTIE1CRURUTFNfT0lEX0JBU0lDX0NPTlNUUkFJTlRTCisjZGVmaW5lIE9JRF9DRVJUSUNPTSBNQkVEVExTX09JRF9DRVJUSUNPTQorI2RlZmluZSBPSURfQ0VSVElGSUNBVEVfUE9MSUNJRVMgTUJFRFRMU19PSURfQ0VSVElGSUNBVEVfUE9MSUNJRVMKKyNkZWZpbmUgT0lEX0NMSUVOVF9BVVRIIE1CRURUTFNfT0lEX0NMSUVOVF9BVVRICisjZGVmaW5lIE9JRF9DTVAgTUJFRFRMU19PSURfQ01QCisjZGVmaW5lIE9JRF9DT0RFX1NJR05JTkcgTUJFRFRMU19PSURfQ09ERV9TSUdOSU5HCisjZGVmaW5lIE9JRF9DT1VOVFJZX1VTIE1CRURUTFNfT0lEX0NPVU5UUllfVVMKKyNkZWZpbmUgT0lEX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTIE1CRURUTFNfT0lEX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTCisjZGVmaW5lIE9JRF9DUkxfTlVNQkVSIE1CRURUTFNfT0lEX0NSTF9OVU1CRVIKKyNkZWZpbmUgT0lEX0RFU19DQkMgTUJFRFRMU19PSURfREVTX0NCQworI2RlZmluZSBPSURfREVTX0VERTNfQ0JDIE1CRURUTFNfT0lEX0RFU19FREUzX0NCQworI2RlZmluZSBPSURfRElHRVNUX0FMR19NRDIgTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDIKKyNkZWZpbmUgT0lEX0RJR0VTVF9BTEdfTUQ0IE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQ0CisjZGVmaW5lIE9JRF9ESUdFU1RfQUxHX01ENSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX01ENQorI2RlZmluZSBPSURfRElHRVNUX0FMR19TSEExIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMQorI2RlZmluZSBPSURfRElHRVNUX0FMR19TSEEyMjQgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEyMjQKKyNkZWZpbmUgT0lEX0RJR0VTVF9BTEdfU0hBMjU2IE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMjU2CisjZGVmaW5lIE9JRF9ESUdFU1RfQUxHX1NIQTM4NCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTM4NAorI2RlZmluZSBPSURfRElHRVNUX0FMR19TSEE1MTIgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEE1MTIKKyNkZWZpbmUgT0lEX0RPTUFJTl9DT01QT05FTlQgTUJFRFRMU19PSURfRE9NQUlOX0NPTVBPTkVOVAorI2RlZmluZSBPSURfRUNEU0FfU0hBMSBNQkVEVExTX09JRF9FQ0RTQV9TSEExCisjZGVmaW5lIE9JRF9FQ0RTQV9TSEEyMjQgTUJFRFRMU19PSURfRUNEU0FfU0hBMjI0CisjZGVmaW5lIE9JRF9FQ0RTQV9TSEEyNTYgTUJFRFRMU19PSURfRUNEU0FfU0hBMjU2CisjZGVmaW5lIE9JRF9FQ0RTQV9TSEEzODQgTUJFRFRMU19PSURfRUNEU0FfU0hBMzg0CisjZGVmaW5lIE9JRF9FQ0RTQV9TSEE1MTIgTUJFRFRMU19PSURfRUNEU0FfU0hBNTEyCisjZGVmaW5lIE9JRF9FQ19BTEdfRUNESCBNQkVEVExTX09JRF9FQ19BTEdfRUNESAorI2RlZmluZSBPSURfRUNfQUxHX1VOUkVTVFJJQ1RFRCBNQkVEVExTX09JRF9FQ19BTEdfVU5SRVNUUklDVEVECisjZGVmaW5lIE9JRF9FQ19CUkFJTlBPT0xfVjEgTUJFRFRMU19PSURfRUNfQlJBSU5QT09MX1YxCisjZGVmaW5lIE9JRF9FQ19HUlBfQlAyNTZSMSBNQkVEVExTX09JRF9FQ19HUlBfQlAyNTZSMQorI2RlZmluZSBPSURfRUNfR1JQX0JQMzg0UjEgTUJFRFRMU19PSURfRUNfR1JQX0JQMzg0UjEKKyNkZWZpbmUgT0lEX0VDX0dSUF9CUDUxMlIxIE1CRURUTFNfT0lEX0VDX0dSUF9CUDUxMlIxCisjZGVmaW5lIE9JRF9FQ19HUlBfU0VDUDE5MksxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMTkySzEKKyNkZWZpbmUgT0lEX0VDX0dSUF9TRUNQMTkyUjEgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AxOTJSMQorI2RlZmluZSBPSURfRUNfR1JQX1NFQ1AyMjRLMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNEsxCisjZGVmaW5lIE9JRF9FQ19HUlBfU0VDUDIyNFIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjI0UjEKKyNkZWZpbmUgT0lEX0VDX0dSUF9TRUNQMjU2SzEgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyNTZLMQorI2RlZmluZSBPSURfRUNfR1JQX1NFQ1AyNTZSMSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDI1NlIxCisjZGVmaW5lIE9JRF9FQ19HUlBfU0VDUDM4NFIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMzg0UjEKKyNkZWZpbmUgT0lEX0VDX0dSUF9TRUNQNTIxUjEgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1A1MjFSMQorI2RlZmluZSBPSURfRU1BSUxfUFJPVEVDVElPTiBNQkVEVExTX09JRF9FTUFJTF9QUk9URUNUSU9OCisjZGVmaW5lIE9JRF9FWFRFTkRFRF9LRVlfVVNBR0UgTUJFRFRMU19PSURfRVhURU5ERURfS0VZX1VTQUdFCisjZGVmaW5lIE9JRF9GUkVTSEVTVF9DUkwgTUJFRFRMU19PSURfRlJFU0hFU1RfQ1JMCisjZGVmaW5lIE9JRF9HT1YgTUJFRFRMU19PSURfR09WCisjZGVmaW5lIE9JRF9ITUFDX1NIQTEgTUJFRFRMU19PSURfSE1BQ19TSEExCisjZGVmaW5lIE9JRF9JRF9DRSBNQkVEVExTX09JRF9JRF9DRQorI2RlZmluZSBPSURfSU5JSElCSVRfQU5ZUE9MSUNZIE1CRURUTFNfT0lEX0lOSUhJQklUX0FOWVBPTElDWQorI2RlZmluZSBPSURfSVNPX0NDSVRUX0RTIE1CRURUTFNfT0lEX0lTT19DQ0lUVF9EUworI2RlZmluZSBPSURfSVNPX0lERU5USUZJRURfT1JHIE1CRURUTFNfT0lEX0lTT19JREVOVElGSUVEX09SRworI2RlZmluZSBPSURfSVNPX0lUVV9DT1VOVFJZIE1CRURUTFNfT0lEX0lTT19JVFVfQ09VTlRSWQorI2RlZmluZSBPSURfSVNPX0lUVV9VU19PUkcgTUJFRFRMU19PSURfSVNPX0lUVV9VU19PUkcKKyNkZWZpbmUgT0lEX0lTT19NRU1CRVJfQk9ESUVTIE1CRURUTFNfT0lEX0lTT19NRU1CRVJfQk9ESUVTCisjZGVmaW5lIE9JRF9JU1NVRVJfQUxUX05BTUUgTUJFRFRMU19PSURfSVNTVUVSX0FMVF9OQU1FCisjZGVmaW5lIE9JRF9LRVlfVVNBR0UgTUJFRFRMU19PSURfS0VZX1VTQUdFCisjZGVmaW5lIE9JRF9LUCBNQkVEVExTX09JRF9LUAorI2RlZmluZSBPSURfTUdGMSBNQkVEVExTX09JRF9NR0YxCisjZGVmaW5lIE9JRF9OQU1FX0NPTlNUUkFJTlRTIE1CRURUTFNfT0lEX05BTUVfQ09OU1RSQUlOVFMKKyNkZWZpbmUgT0lEX05FVFNDQVBFIE1CRURUTFNfT0lEX05FVFNDQVBFCisjZGVmaW5lIE9JRF9OU19CQVNFX1VSTCBNQkVEVExTX09JRF9OU19CQVNFX1VSTAorI2RlZmluZSBPSURfTlNfQ0FfUE9MSUNZX1VSTCBNQkVEVExTX09JRF9OU19DQV9QT0xJQ1lfVVJMCisjZGVmaW5lIE9JRF9OU19DQV9SRVZPQ0FUSU9OX1VSTCBNQkVEVExTX09JRF9OU19DQV9SRVZPQ0FUSU9OX1VSTAorI2RlZmluZSBPSURfTlNfQ0VSVCBNQkVEVExTX09JRF9OU19DRVJUCisjZGVmaW5lIE9JRF9OU19DRVJUX1NFUVVFTkNFIE1CRURUTFNfT0lEX05TX0NFUlRfU0VRVUVOQ0UKKyNkZWZpbmUgT0lEX05TX0NFUlRfVFlQRSBNQkVEVExTX09JRF9OU19DRVJUX1RZUEUKKyNkZWZpbmUgT0lEX05TX0NPTU1FTlQgTUJFRFRMU19PSURfTlNfQ09NTUVOVAorI2RlZmluZSBPSURfTlNfREFUQV9UWVBFIE1CRURUTFNfT0lEX05TX0RBVEFfVFlQRQorI2RlZmluZSBPSURfTlNfUkVORVdBTF9VUkwgTUJFRFRMU19PSURfTlNfUkVORVdBTF9VUkwKKyNkZWZpbmUgT0lEX05TX1JFVk9DQVRJT05fVVJMIE1CRURUTFNfT0lEX05TX1JFVk9DQVRJT05fVVJMCisjZGVmaW5lIE9JRF9OU19TU0xfU0VSVkVSX05BTUUgTUJFRFRMU19PSURfTlNfU1NMX1NFUlZFUl9OQU1FCisjZGVmaW5lIE9JRF9PQ1NQX1NJR05JTkcgTUJFRFRMU19PSURfT0NTUF9TSUdOSU5HCisjZGVmaW5lIE9JRF9PSVdfU0VDU0lHIE1CRURUTFNfT0lEX09JV19TRUNTSUcKKyNkZWZpbmUgT0lEX09JV19TRUNTSUdfQUxHIE1CRURUTFNfT0lEX09JV19TRUNTSUdfQUxHCisjZGVmaW5lIE9JRF9PSVdfU0VDU0lHX1NIQTEgTUJFRFRMU19PSURfT0lXX1NFQ1NJR19TSEExCisjZGVmaW5lIE9JRF9PUkdBTklaQVRJT04gTUJFRFRMU19PSURfT1JHQU5JWkFUSU9OCisjZGVmaW5lIE9JRF9PUkdfQU5TSV9YOV82MiBNQkVEVExTX09JRF9PUkdfQU5TSV9YOV82MgorI2RlZmluZSBPSURfT1JHX0NFUlRJQ09NIE1CRURUTFNfT0lEX09SR19DRVJUSUNPTQorI2RlZmluZSBPSURfT1JHX0RPRCBNQkVEVExTX09JRF9PUkdfRE9ECisjZGVmaW5lIE9JRF9PUkdfR09WIE1CRURUTFNfT0lEX09SR19HT1YKKyNkZWZpbmUgT0lEX09SR19ORVRTQ0FQRSBNQkVEVExTX09JRF9PUkdfTkVUU0NBUEUKKyNkZWZpbmUgT0lEX09SR19PSVcgTUJFRFRMU19PSURfT1JHX09JVworI2RlZmluZSBPSURfT1JHX1JTQV9EQVRBX1NFQ1VSSVRZIE1CRURUTFNfT0lEX09SR19SU0FfREFUQV9TRUNVUklUWQorI2RlZmluZSBPSURfT1JHX1RFTEVUUlVTVCBNQkVEVExTX09JRF9PUkdfVEVMRVRSVVNUCisjZGVmaW5lIE9JRF9QS0NTIE1CRURUTFNfT0lEX1BLQ1MKKyNkZWZpbmUgT0lEX1BLQ1MxIE1CRURUTFNfT0lEX1BLQ1MxCisjZGVmaW5lIE9JRF9QS0NTMTIgTUJFRFRMU19PSURfUEtDUzEyCisjZGVmaW5lIE9JRF9QS0NTMTJfUEJFIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUKKyNkZWZpbmUgT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMyX0VERV9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX0RFUzJfRURFX0NCQworI2RlZmluZSBPSURfUEtDUzEyX1BCRV9TSEExX0RFUzNfRURFX0NCQyBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfREVTM19FREVfQ0JDCisjZGVmaW5lIE9JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzEyOF9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDMl8xMjhfQ0JDCisjZGVmaW5lIE9JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzQwX0NCQyBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzQwX0NCQworI2RlZmluZSBPSURfUEtDUzEyX1BCRV9TSEExX1JDNF8xMjggTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDNF8xMjgKKyNkZWZpbmUgT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfNDAgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDNF80MAorI2RlZmluZSBPSURfUEtDUzFfTUQyIE1CRURUTFNfT0lEX1BLQ1MxX01EMgorI2RlZmluZSBPSURfUEtDUzFfTUQ0IE1CRURUTFNfT0lEX1BLQ1MxX01ENAorI2RlZmluZSBPSURfUEtDUzFfTUQ1IE1CRURUTFNfT0lEX1BLQ1MxX01ENQorI2RlZmluZSBPSURfUEtDUzFfUlNBIE1CRURUTFNfT0lEX1BLQ1MxX1JTQQorI2RlZmluZSBPSURfUEtDUzFfU0hBMSBNQkVEVExTX09JRF9QS0NTMV9TSEExCisjZGVmaW5lIE9JRF9QS0NTMV9TSEEyMjQgTUJFRFRMU19PSURfUEtDUzFfU0hBMjI0CisjZGVmaW5lIE9JRF9QS0NTMV9TSEEyNTYgTUJFRFRMU19PSURfUEtDUzFfU0hBMjU2CisjZGVmaW5lIE9JRF9QS0NTMV9TSEEzODQgTUJFRFRMU19PSURfUEtDUzFfU0hBMzg0CisjZGVmaW5lIE9JRF9QS0NTMV9TSEE1MTIgTUJFRFRMU19PSURfUEtDUzFfU0hBNTEyCisjZGVmaW5lIE9JRF9QS0NTNSBNQkVEVExTX09JRF9QS0NTNQorI2RlZmluZSBPSURfUEtDUzVfUEJFUzIgTUJFRFRMU19PSURfUEtDUzVfUEJFUzIKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRV9NRDJfREVTX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQyX0RFU19DQkMKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRV9NRDJfUkMyX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQyX1JDMl9DQkMKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRV9NRDVfREVTX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQ1X0RFU19DQkMKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRV9NRDVfUkMyX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQ1X1JDMl9DQkMKKyNkZWZpbmUgT0lEX1BLQ1M1X1BCRV9TSEExX0RFU19DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX1NIQTFfREVTX0NCQworI2RlZmluZSBPSURfUEtDUzVfUEJFX1NIQTFfUkMyX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfU0hBMV9SQzJfQ0JDCisjZGVmaW5lIE9JRF9QS0NTNV9QQktERjIgTUJFRFRMU19PSURfUEtDUzVfUEJLREYyCisjZGVmaW5lIE9JRF9QS0NTNV9QQk1BQzEgTUJFRFRMU19PSURfUEtDUzVfUEJNQUMxCisjZGVmaW5lIE9JRF9QS0NTOSBNQkVEVExTX09JRF9QS0NTOQorI2RlZmluZSBPSURfUEtDUzlfQ1NSX0VYVF9SRVEgTUJFRFRMU19PSURfUEtDUzlfQ1NSX0VYVF9SRVEKKyNkZWZpbmUgT0lEX1BLQ1M5X0VNQUlMIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMCisjZGVmaW5lIE9JRF9QS0lYIE1CRURUTFNfT0lEX1BLSVgKKyNkZWZpbmUgT0lEX1BPTElDWV9DT05TVFJBSU5UUyBNQkVEVExTX09JRF9QT0xJQ1lfQ09OU1RSQUlOVFMKKyNkZWZpbmUgT0lEX1BPTElDWV9NQVBQSU5HUyBNQkVEVExTX09JRF9QT0xJQ1lfTUFQUElOR1MKKyNkZWZpbmUgT0lEX1BSSVZBVEVfS0VZX1VTQUdFX1BFUklPRCBNQkVEVExTX09JRF9QUklWQVRFX0tFWV9VU0FHRV9QRVJJT0QKKyNkZWZpbmUgT0lEX1JTQVNTQV9QU1MgTUJFRFRMU19PSURfUlNBU1NBX1BTUworI2RlZmluZSBPSURfUlNBX0NPTVBBTlkgTUJFRFRMU19PSURfUlNBX0NPTVBBTlkKKyNkZWZpbmUgT0lEX1JTQV9TSEFfT0JTIE1CRURUTFNfT0lEX1JTQV9TSEFfT0JTCisjZGVmaW5lIE9JRF9TRVJWRVJfQVVUSCBNQkVEVExTX09JRF9TRVJWRVJfQVVUSAorI2RlZmluZSBPSURfU0laRSBNQkVEVExTX09JRF9TSVpFCisjZGVmaW5lIE9JRF9TVUJKRUNUX0FMVF9OQU1FIE1CRURUTFNfT0lEX1NVQkpFQ1RfQUxUX05BTUUKKyNkZWZpbmUgT0lEX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTIE1CRURUTFNfT0lEX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTCisjZGVmaW5lIE9JRF9TVUJKRUNUX0tFWV9JREVOVElGSUVSIE1CRURUTFNfT0lEX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIKKyNkZWZpbmUgT0lEX1RFTEVUUlVTVCBNQkVEVExTX09JRF9URUxFVFJVU1QKKyNkZWZpbmUgT0lEX1RJTUVfU1RBTVBJTkcgTUJFRFRMU19PSURfVElNRV9TVEFNUElORworI2RlZmluZSBQQURMT0NLX0FDRSBNQkVEVExTX1BBRExPQ0tfQUNFCisjZGVmaW5lIFBBRExPQ0tfQUxJR04xNiBNQkVEVExTX1BBRExPQ0tfQUxJR04xNgorI2RlZmluZSBQQURMT0NLX1BIRSBNQkVEVExTX1BBRExPQ0tfUEhFCisjZGVmaW5lIFBBRExPQ0tfUE1NIE1CRURUTFNfUEFETE9DS19QTU0KKyNkZWZpbmUgUEFETE9DS19STkcgTUJFRFRMU19QQURMT0NLX1JORworI2RlZmluZSBQS0NTMTJfREVSSVZFX0lWIE1CRURUTFNfUEtDUzEyX0RFUklWRV9JVgorI2RlZmluZSBQS0NTMTJfREVSSVZFX0tFWSBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfS0VZCisjZGVmaW5lIFBLQ1MxMl9ERVJJVkVfTUFDX0tFWSBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfTUFDX0tFWQorI2RlZmluZSBQS0NTMTJfUEJFX0RFQ1JZUFQgTUJFRFRMU19QS0NTMTJfUEJFX0RFQ1JZUFQKKyNkZWZpbmUgUEtDUzEyX1BCRV9FTkNSWVBUIE1CRURUTFNfUEtDUzEyX1BCRV9FTkNSWVBUCisjZGVmaW5lIFBLQ1M1X0RFQ1JZUFQgTUJFRFRMU19QS0NTNV9ERUNSWVBUCisjZGVmaW5lIFBLQ1M1X0VOQ1JZUFQgTUJFRFRMU19QS0NTNV9FTkNSWVBUCisjZGVmaW5lIFBPTEFSU1NMX0FFU05JX0FFUyBNQkVEVExTX0FFU05JX0FFUworI2RlZmluZSBQT0xBUlNTTF9BRVNOSV9DTE1VTCBNQkVEVExTX0FFU05JX0NMTVVMCisjZGVmaW5lIFBPTEFSU1NMX0FFU05JX0ggTUJFRFRMU19BRVNOSV9ICisjZGVmaW5lIFBPTEFSU1NMX0FFU19IIE1CRURUTFNfQUVTX0gKKyNkZWZpbmUgUE9MQVJTU0xfQVJDNF9IIE1CRURUTFNfQVJDNF9ICisjZGVmaW5lIFBPTEFSU1NMX0FTTjFfSCBNQkVEVExTX0FTTjFfSAorI2RlZmluZSBQT0xBUlNTTF9BU04xX1dSSVRFX0ggTUJFRFRMU19BU04xX1dSSVRFX0gKKyNkZWZpbmUgUE9MQVJTU0xfQkFTRTY0X0ggTUJFRFRMU19CQVNFNjRfSAorI2RlZmluZSBQT0xBUlNTTF9CSUdOVU1fSCBNQkVEVExTX0JJR05VTV9ICisjZGVmaW5lIFBPTEFSU1NMX0JMT1dGSVNIX0ggTUJFRFRMU19CTE9XRklTSF9ICisjZGVmaW5lIFBPTEFSU1NMX0JOX01VTF9IIE1CRURUTFNfQk5fTVVMX0gKKyNkZWZpbmUgUE9MQVJTU0xfQ0FNRUxMSUFfSCBNQkVEVExTX0NBTUVMTElBX0gKKyNkZWZpbmUgUE9MQVJTU0xfQ0NNX0ggTUJFRFRMU19DQ01fSAorI2RlZmluZSBQT0xBUlNTTF9DRVJUU19IIE1CRURUTFNfQ0VSVFNfSAorI2RlZmluZSBQT0xBUlNTTF9DSEVDS19DT05GSUdfSCBNQkVEVExTX0NIRUNLX0NPTkZJR19ICisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUlNVSVRFX05PRFRMUyBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUworI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJTVUlURV9TSE9SVF9UQUcgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSU1VJVEVfV0VBSyBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfQ0JDIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0NDTSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9DRkIxMjggTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjgKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfQ1RSIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0VDQiBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9HQ00gTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfQ0JDIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0NDTSBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9DRkIxMjggTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DRkIxMjgKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfQ1RSIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ1RSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0VDQiBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9HQ00gTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfQ0JDIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0NDTSBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9DRkIxMjggTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DRkIxMjgKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfQ1RSIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ1RSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0VDQiBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9HQ00gTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0FSQzRfMTI4IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4CisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9CTE9XRklTSF9DQkMgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9CTE9XRklTSF9DRkI2NCBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfQ1RSIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfRUNCIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjggTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyOAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUiBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xMjhfRUNCIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DRkIxMjggTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NGQjEyOAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUiBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ1RSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQ00KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjggTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NGQjEyOAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfQ0FNRUxMSUFfMjU2X0NUUiBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ1RSCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9DQU1FTExJQV8yNTZfRUNCIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTQorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfREVTX0NCQyBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9ERVNfRUNCIE1CRURUTFNfQ0lQSEVSX0RFU19FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0RFU19FREUzX0NCQyBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0RFU19FREUzX0VDQiBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0RFU19FREVfQ0JDIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9ERVNfRURFX0VDQiBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0VDQgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfSCBNQkVEVExTX0NJUEhFUl9ICisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF8zREVTIE1CRURUTFNfQ0lQSEVSX0lEXzNERVMKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0lEX0FFUyBNQkVEVExTX0NJUEhFUl9JRF9BRVMKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0lEX0FSQzQgTUJFRFRMU19DSVBIRVJfSURfQVJDNAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfSURfQkxPV0ZJU0ggTUJFRFRMU19DSVBIRVJfSURfQkxPV0ZJU0gKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0lEX0NBTUVMTElBIE1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF9ERVMgTUJFRFRMU19DSVBIRVJfSURfREVTCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9JRF9OT05FIE1CRURUTFNfQ0lQSEVSX0lEX05PTkUKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX0lEX05VTEwgTUJFRFRMU19DSVBIRVJfSURfTlVMTAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfTU9ERV9BRUFEIE1CRURUTFNfQ0lQSEVSX01PREVfQUVBRAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfTU9ERV9TVFJFQU0gTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0KKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9OT05FIE1CRURUTFNfQ0lQSEVSX05PTkUKKyNkZWZpbmUgUE9MQVJTU0xfQ0lQSEVSX05VTEwgTUJFRFRMU19DSVBIRVJfTlVMTAorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfVkFSSUFCTEVfSVZfTEVOIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTgorI2RlZmluZSBQT0xBUlNTTF9DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOCisjZGVmaW5lIFBPTEFSU1NMX0NJUEhFUl9XUkFQX0ggTUJFRFRMU19DSVBIRVJfV1JBUF9ICisjZGVmaW5lIFBPTEFSU1NMX0NPTkZJR19IIE1CRURUTFNfQ09ORklHX0gKKyNkZWZpbmUgUE9MQVJTU0xfQ1RSX0RSQkdfSCBNQkVEVExTX0NUUl9EUkJHX0gKKyNkZWZpbmUgUE9MQVJTU0xfREVCVUdfSCBNQkVEVExTX0RFQlVHX0gKKyNkZWZpbmUgUE9MQVJTU0xfREVCVUdfTE9HX0ZVTEwgTUJFRFRMU19ERUJVR19MT0dfRlVMTAorI2RlZmluZSBQT0xBUlNTTF9ERUJVR19MT0dfUkFXIE1CRURUTFNfREVCVUdfTE9HX1JBVworI2RlZmluZSBQT0xBUlNTTF9ERUNSWVBUIE1CRURUTFNfREVDUllQVAorI2RlZmluZSBQT0xBUlNTTF9ERVNfSCBNQkVEVExTX0RFU19ICisjZGVmaW5lIFBPTEFSU1NMX0RITV9IIE1CRURUTFNfREhNX0gKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzI0MDlfTU9EUF8xMDI0X0cgTUJFRFRMU19ESE1fUkZDMjQwOV9NT0RQXzEwMjRfRworI2RlZmluZSBQT0xBUlNTTF9ESE1fUkZDMjQwOV9NT0RQXzEwMjRfUCBNQkVEVExTX0RITV9SRkMyNDA5X01PRFBfMTAyNF9QCisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMjA0OF9HIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X0cKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X1AgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzIwNDhfUAorI2RlZmluZSBQT0xBUlNTTF9ESE1fUkZDMzUyNl9NT0RQXzMwNzJfRyBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9HCisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9QIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8zMDcyX1AKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzUxMTRfTU9EUF8xMDI0X0cgTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzEwMjRfRworI2RlZmluZSBQT0xBUlNTTF9ESE1fUkZDNTExNF9NT0RQXzEwMjRfUCBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMTAyNF9QCisjZGVmaW5lIFBPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMjA0OF9HIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X0cKKyNkZWZpbmUgUE9MQVJTU0xfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X1AgTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzIwNDhfUAorI2RlZmluZSBQT0xBUlNTTF9FQ0RIX0ggTUJFRFRMU19FQ0RIX0gKKyNkZWZpbmUgUE9MQVJTU0xfRUNESF9PVVJTIE1CRURUTFNfRUNESF9PVVJTCisjZGVmaW5lIFBPTEFSU1NMX0VDREhfVEhFSVJTIE1CRURUTFNfRUNESF9USEVJUlMKKyNkZWZpbmUgUE9MQVJTU0xfRUNEU0FfSCBNQkVEVExTX0VDRFNBX0gKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX0JQMjU2UjEgTUJFRFRMU19FQ1BfRFBfQlAyNTZSMQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfQlAzODRSMSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9CUDUxMlIxIE1CRURUTFNfRUNQX0RQX0JQNTEyUjEKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX0RQX00yNTUgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOQorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfTUFYIE1CRURUTFNfRUNQX0RQX01BWAorI2RlZmluZSBQT0xBUlNTTF9FQ1BfRFBfTk9ORSBNQkVEVExTX0VDUF9EUF9OT05FCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMTkySzEgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMTkyUjEgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjI0SzEgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjI0UjEgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjU2SzEgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMjU2UjEgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQMzg0UjEgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9EUF9TRUNQNTIxUjEgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxCisjZGVmaW5lIFBPTEFSU1NMX0VDUF9IIE1CRURUTFNfRUNQX0gKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX01BWF9CWVRFUyBNQkVEVExTX0VDUF9NQVhfQllURVMKKyNkZWZpbmUgUE9MQVJTU0xfRUNQX01BWF9QVF9MRU4gTUJFRFRMU19FQ1BfTUFYX1BUX0xFTgorI2RlZmluZSBQT0xBUlNTTF9FQ1BfUEZfQ09NUFJFU1NFRCBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9QRl9VTkNPTVBSRVNTRUQgTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VECisjZGVmaW5lIFBPTEFSU1NMX0VDUF9UTFNfTkFNRURfQ1VSVkUgTUJFRFRMU19FQ1BfVExTX05BTUVEX0NVUlZFCisjZGVmaW5lIFBPTEFSU1NMX0VOQ1JZUFQgTUJFRFRMU19FTkNSWVBUCisjZGVmaW5lIFBPTEFSU1NMX0VOVFJPUFlfSCBNQkVEVExTX0VOVFJPUFlfSAorI2RlZmluZSBQT0xBUlNTTF9FTlRST1BZX1BPTExfSCBNQkVEVExTX0VOVFJPUFlfUE9MTF9ICisjZGVmaW5lIFBPTEFSU1NMX0VOVFJPUFlfU0hBMjU2X0FDQ1VNVUxBVE9SIE1CRURUTFNfRU5UUk9QWV9TSEEyNTZfQUNDVU1VTEFUT1IKKyNkZWZpbmUgUE9MQVJTU0xfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IgTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJPUl9IIE1CRURUTFNfRVJST1JfSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQUVTX0lOVkFMSURfSU5QVVRfTEVOR1RIIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSCBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9BU04xX0JVRl9UT09fU01BTEwgTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9BU04xX0lOVkFMSURfREFUQSBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQVNOMV9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0FTTjFfQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9BU04xX09VVF9PRl9EQVRBIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworI2RlZmluZSBQT0xBUlNTTF9FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwgTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUiBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RIIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9CTE9XRklTSF9JTlZBTElEX0tFWV9MRU5HVEggTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RIIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0NNX0FVVEhfRkFJTEVEIE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0NNX0JBRF9JTlBVVCBNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCBNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORyBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcgTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRworI2RlZmluZSBQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfUkVRVUVTVF9UT09fQklHIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRworI2RlZmluZSBQT0xBUlNTTF9FUlJfREVTX0lOVkFMSURfSU5QVVRfTEVOR1RIIE1CRURUTFNfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX0NBTENfU0VDUkVUX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fQ0FMQ19TRUNSRVRfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ESE1fRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9ESE1fRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX0lOVkFMSURfRk9STUFUIE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fTUFLRV9QQVJBTVNfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ESE1fTUFLRV9QVUJMSUNfRkFJTEVEIE1CRURUTFNfRVJSX0RITV9NQUtFX1BVQkxJQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0RITV9BTExPQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0RITV9SRUFEX1BBUkFNU19GQUlMRUQgTUJFRFRMU19FUlJfREhNX1JFQURfUEFSQU1TX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfREhNX1JFQURfUFVCTElDX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fUkVBRF9QVUJMSUNfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTAorI2RlZmluZSBQT0xBUlNTTF9FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VDUF9JTlZBTElEX0tFWSBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VDUF9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0VDUF9BTExPQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VDUF9SQU5ET01fRkFJTEVEIE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSCBNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfRUNQX1ZFUklGWV9GQUlMRUQgTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVMgTUJFRFRMU19FUlJfRU5UUk9QWV9NQVhfU09VUkNFUworI2RlZmluZSBQT0xBUlNTTF9FUlJfRU5UUk9QWV9OT19TT1VSQ0VTX0RFRklORUQgTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TT1VSQ0VTX0RFRklORUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0dDTV9BVVRIX0ZBSUxFRCBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0dDTV9CQURfSU5QVVQgTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX0hNQUNfRFJCR19SRVFVRVNUX1RPT19CSUcgTUJFRFRMU19FUlJfSE1BQ19EUkJHX1JFUVVFU1RfVE9PX0JJRworI2RlZmluZSBQT0xBUlNTTF9FUlJfTUQyX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfTUQyX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01ENF9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01ENF9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NRDVfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NRDVfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfTURfQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTURfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01EX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfTURfRkVBVFVSRV9VTkFWQUlMQUJMRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfTURfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NRF9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCBNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX01QSV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfSU5WQUxJRF9DSEFSQUNURVIgTUJFRFRMU19FUlJfTVBJX0lOVkFMSURfQ0hBUkFDVEVSCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUgTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX0JJTkRfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9CSU5EX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX0NPTk5FQ1RfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9DT05ORUNUX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX0NPTk5fUkVTRVQgTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9MSVNURU5fRkFJTEVEIE1CRURUTFNfRVJSX05FVF9MSVNURU5fRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfUkVDVl9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX1JFQ1ZfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfU0VORF9GQUlMRUQgTUJFRFRMU19FUlJfTkVUX1NFTkRfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfU09DS0VUX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX1RJTUVPVVQgTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9VTktOT1dOX0hPU1QgTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfUkVBRCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9XUklURSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURQorI2RlZmluZSBQT0xBUlNTTF9FUlJfT0lEX0JVRl9UT09fU01BTEwgTUJFRFRMU19FUlJfT0lEX0JVRl9UT09fU01BTEwKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX09JRF9OT1RfRk9VTkQgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEFETE9DS19EQVRBX01JU0FMSUdORUQgTUJFRFRMU19FUlJfUEFETE9DS19EQVRBX01JU0FMSUdORUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BCS0RGMl9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9QQktERjJfQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9QRU1fQkFEX0lOUFVUX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1BFTV9GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QRU1fSU5WQUxJRF9EQVRBIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9JTlZBTElEX0VOQ19JViBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX1BFTV9BTExPQ19GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEVNX1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEVNX1BBU1NXT1JEX1JFUVVJUkVEIE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9SRVFVSVJFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEVNX1VOS05PV05fRU5DX0FMRyBNQkVEVExTX0VSUl9QRU1fVU5LTk9XTl9FTkNfQUxHCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS0NTMTJfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEtDUzEyX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS0NTMTJfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QS0NTMTJfRkVBVFVSRV9VTkFWQUlMQUJMRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzEyX1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BLQ1MxMl9QQVNTV09SRF9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS0NTNV9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9QS0NTNV9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfUEtfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfSU5WQUxJRF9BTEcgTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9BTEcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX0lOVkFMSURfUFVCS0VZIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX1ZFUlNJT04KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfUEtfQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQgTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUEtfVFlQRV9NSVNNQVRDSCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9QS19VTktOT1dOX05BTUVEX0NVUlZFIE1CRURUTFNfRVJSX1BLX1VOS05PV05fTkFNRURfQ1VSVkUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1BLX1VOS05PV05fUEtfQUxHIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9SSVBFTUQxNjBfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9SSVBFTUQxNjBfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX0lOVkFMSURfUEFERElORyBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX0tFWV9HRU5fRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9LRVlfR0VOX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UgTUJFRFRMU19FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfUFJJVkFURV9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1JTQV9QVUJMSUNfRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9QVUJMSUNfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9SU0FfUk5HX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfUlNBX1ZFUklGWV9GQUlMRUQgTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NIQTFfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9TSEExX0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NIQTI1Nl9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1NIQTI1Nl9GSUxFX0lPX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TSEE1MTJfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9TSEE1MTJfRklMRV9JT19FUlJPUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX0NTCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlAgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0ZJTklTSEVEIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfRklOSVNIRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gTUJFRFRMU19FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTworI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE9fRE9ORSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMT19ET05FCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0NBX0NIQUlOX1JFUVVJUkVEIE1CRURUTFNfRVJSX1NTTF9DQV9DSEFJTl9SRVFVSVJFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEIE1CRURUTFNfRVJSX1NTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0NFUlRJRklDQVRFX1RPT19MQVJHRSBNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfVE9PX0xBUkdFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVEIE1CRURUTFNfRVJSX1NTTF9DT01QUkVTU0lPTl9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9DT05OX0VPRiBNQkVEVExTX0VSUl9TU0xfQ09OTl9FT0YKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HIE1CRURUTFNfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRSBNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfSFdfQUNDRUxfRkFMTFRIUk9VR0ggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBTExUSFJPVUdICisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfSU5WQUxJRF9NQUMgTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTiBNQkVEVExTX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTgorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX05PX0NMSUVOVF9DRVJUSUZJQ0FURSBNQkVEVExTX0VSUl9TU0xfTk9fQ0xJRU5UX0NFUlRJRklDQVRFCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfTk9fUk5HIE1CRURUTFNfRVJSX1NTTF9OT19STkcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9OT19VU0FCTEVfQ0lQSEVSU1VJVEUgTUJFRFRMU19FUlJfU1NMX05PX1VTQUJMRV9DSVBIRVJTVUlURQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1BFRVJfVkVSSUZZX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfUEVFUl9WRVJJRllfRkFJTEVECisjZGVmaW5lIFBPTEFSU1NMX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSCBNQkVEVExTX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVEIE1CRURUTFNfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQgTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1VOS05PV05fQ0lQSEVSIE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0NJUEhFUgorI2RlZmluZSBQT0xBUlNTTF9FUlJfU1NMX1VOS05PV05fSURFTlRJVFkgTUJFRFRMU19FUlJfU1NMX1VOS05PV05fSURFTlRJVFkKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08gTUJFRFRMU19FUlJfU1NMX1dBSVRJTkdfU0VSVkVSX0hFTExPX1JFTkVHTworI2RlZmluZSBQT0xBUlNTTF9FUlJfVEhSRUFESU5HX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfVEhSRUFESU5HX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfVEhSRUFESU5HX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQQorI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9DRVJUX1VOS05PV05fRk9STUFUIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9VTktOT1dOX0ZPUk1BVAorI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQgTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9BTEcgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRworI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX0RBVEUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9OQU1FIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRQorI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9TSUdfTUlTTUFUQ0ggTUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0gKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfVU5LTk9XTl9PSUQgTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX09JRAorI2RlZmluZSBQT0xBUlNTTF9FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcgTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcKKyNkZWZpbmUgUE9MQVJTU0xfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9YVEVBX0lOVkFMSURfSU5QVVRfTEVOR1RIIE1CRURUTFNfRVJSX1hURUFfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKyNkZWZpbmUgUE9MQVJTU0xfR0NNX0ggTUJFRFRMU19HQ01fSAorI2RlZmluZSBQT0xBUlNTTF9IQVZFR0VfSCBNQkVEVExTX0hBVkVHRV9ICisjZGVmaW5lIFBPTEFSU1NMX0hBVkVfSU5UMzIgTUJFRFRMU19IQVZFX0lOVDMyCisjZGVmaW5lIFBPTEFSU1NMX0hBVkVfSU5UNjQgTUJFRFRMU19IQVZFX0lOVDY0CisjZGVmaW5lIFBPTEFSU1NMX0hBVkVfVURCTCBNQkVEVExTX0hBVkVfVURCTAorI2RlZmluZSBQT0xBUlNTTF9IQVZFX1g4NiBNQkVEVExTX0hBVkVfWDg2CisjZGVmaW5lIFBPTEFSU1NMX0hBVkVfWDg2XzY0IE1CRURUTFNfSEFWRV9YODZfNjQKKyNkZWZpbmUgUE9MQVJTU0xfSE1BQ19EUkJHX0ggTUJFRFRMU19ITUFDX0RSQkdfSAorI2RlZmluZSBQT0xBUlNTTF9ITUFDX0RSQkdfUFJfT0ZGIE1CRURUTFNfSE1BQ19EUkJHX1BSX09GRgorI2RlZmluZSBQT0xBUlNTTF9ITUFDX0RSQkdfUFJfT04gTUJFRFRMU19ITUFDX0RSQkdfUFJfT04KKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSworI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfREhFX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSworI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfUlNBIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQQorI2RlZmluZSBQT0xBUlNTTF9LRVlfRVhDSEFOR0VfTk9ORSBNQkVEVExTX0tFWV9FWENIQU5HRV9OT05FCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9QU0sgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9SU0EgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBCisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9SU0FfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX19TT01FX19FQ0RIRV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19FQ0RIRV9FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVECisjZGVmaW5lIFBPTEFSU1NMX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0xFTkdUSF9ERVMgTUJFRFRMU19LRVlfTEVOR1RIX0RFUworI2RlZmluZSBQT0xBUlNTTF9LRVlfTEVOR1RIX0RFU19FREUgTUJFRFRMU19LRVlfTEVOR1RIX0RFU19FREUKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0xFTkdUSF9ERVNfRURFMyBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERTMKKyNkZWZpbmUgUE9MQVJTU0xfS0VZX0xFTkdUSF9OT05FIE1CRURUTFNfS0VZX0xFTkdUSF9OT05FCisjZGVmaW5lIFBPTEFSU1NMX01BWF9CTE9DS19MRU5HVEggTUJFRFRMU19NQVhfQkxPQ0tfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX01BWF9JVl9MRU5HVEggTUJFRFRMU19NQVhfSVZfTEVOR1RICisjZGVmaW5lIFBPTEFSU1NMX01EMl9IIE1CRURUTFNfTUQyX0gKKyNkZWZpbmUgUE9MQVJTU0xfTUQ0X0ggTUJFRFRMU19NRDRfSAorI2RlZmluZSBQT0xBUlNTTF9NRDVfSCBNQkVEVExTX01ENV9ICisjZGVmaW5lIFBPTEFSU1NMX01EX0ggTUJFRFRMU19NRF9ICisjZGVmaW5lIFBPTEFSU1NMX01EX01BWF9TSVpFIE1CRURUTFNfTURfTUFYX1NJWkUKKyNkZWZpbmUgUE9MQVJTU0xfTURfTUQyIE1CRURUTFNfTURfTUQyCisjZGVmaW5lIFBPTEFSU1NMX01EX01ENCBNQkVEVExTX01EX01ENAorI2RlZmluZSBQT0xBUlNTTF9NRF9NRDUgTUJFRFRMU19NRF9NRDUKKyNkZWZpbmUgUE9MQVJTU0xfTURfTk9ORSBNQkVEVExTX01EX05PTkUKKyNkZWZpbmUgUE9MQVJTU0xfTURfUklQRU1EMTYwIE1CRURUTFNfTURfUklQRU1EMTYwCisjZGVmaW5lIFBPTEFSU1NMX01EX1NIQTEgTUJFRFRMU19NRF9TSEExCisjZGVmaW5lIFBPTEFSU1NMX01EX1NIQTIyNCBNQkVEVExTX01EX1NIQTIyNAorI2RlZmluZSBQT0xBUlNTTF9NRF9TSEEyNTYgTUJFRFRMU19NRF9TSEEyNTYKKyNkZWZpbmUgUE9MQVJTU0xfTURfU0hBMzg0IE1CRURUTFNfTURfU0hBMzg0CisjZGVmaW5lIFBPTEFSU1NMX01EX1NIQTUxMiBNQkVEVExTX01EX1NIQTUxMgorI2RlZmluZSBQT0xBUlNTTF9NRF9XUkFQX0ggTUJFRFRMU19NRF9XUkFQX0gKKyNkZWZpbmUgUE9MQVJTU0xfTUVNT1JZX0JVRkZFUl9BTExPQ19IIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19ICisjZGVmaW5lIFBPTEFSU1NMX01FTU9SWV9IIE1CRURUTFNfTUVNT1JZX0gKKyNkZWZpbmUgUE9MQVJTU0xfTU9ERV9DQkMgTUJFRFRMU19NT0RFX0NCQworI2RlZmluZSBQT0xBUlNTTF9NT0RFX0NDTSBNQkVEVExTX01PREVfQ0NNCisjZGVmaW5lIFBPTEFSU1NMX01PREVfQ0ZCIE1CRURUTFNfTU9ERV9DRkIKKyNkZWZpbmUgUE9MQVJTU0xfTU9ERV9DVFIgTUJFRFRMU19NT0RFX0NUUgorI2RlZmluZSBQT0xBUlNTTF9NT0RFX0VDQiBNQkVEVExTX01PREVfRUNCCisjZGVmaW5lIFBPTEFSU1NMX01PREVfR0NNIE1CRURUTFNfTU9ERV9HQ00KKyNkZWZpbmUgUE9MQVJTU0xfTU9ERV9OT05FIE1CRURUTFNfTU9ERV9OT05FCisjZGVmaW5lIFBPTEFSU1NMX01PREVfT0ZCIE1CRURUTFNfTU9ERV9PRkIKKyNkZWZpbmUgUE9MQVJTU0xfTU9ERV9TVFJFQU0gTUJFRFRMU19NT0RFX1NUUkVBTQorI2RlZmluZSBQT0xBUlNTTF9NUElfTUFYX0JJVFMgTUJFRFRMU19NUElfTUFYX0JJVFMKKyNkZWZpbmUgUE9MQVJTU0xfTVBJX01BWF9CSVRTX1NDQUxFMTAwIE1CRURUTFNfTVBJX01BWF9CSVRTX1NDQUxFMTAwCisjZGVmaW5lIFBPTEFSU1NMX01QSV9NQVhfTElNQlMgTUJFRFRMU19NUElfTUFYX0xJTUJTCisjZGVmaW5lIFBPTEFSU1NMX01QSV9SV19CVUZGRVJfU0laRSBNQkVEVExTX01QSV9SV19CVUZGRVJfU0laRQorI2RlZmluZSBQT0xBUlNTTF9ORVRfSCBNQkVEVExTX05FVF9ICisjZGVmaW5lIFBPTEFSU1NMX05FVF9MSVNURU5fQkFDS0xPRyBNQkVEVExTX05FVF9MSVNURU5fQkFDS0xPRworI2RlZmluZSBQT0xBUlNTTF9PSURfSCBNQkVEVExTX09JRF9ICisjZGVmaW5lIFBPTEFSU1NMX09QRVJBVElPTl9OT05FIE1CRURUTFNfT1BFUkFUSU9OX05PTkUKKyNkZWZpbmUgUE9MQVJTU0xfUEFERElOR19OT05FIE1CRURUTFNfUEFERElOR19OT05FCisjZGVmaW5lIFBPTEFSU1NMX1BBRERJTkdfT05FX0FORF9aRVJPUyBNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworI2RlZmluZSBQT0xBUlNTTF9QQURESU5HX1BLQ1M3IE1CRURUTFNfUEFERElOR19QS0NTNworI2RlZmluZSBQT0xBUlNTTF9QQURESU5HX1pFUk9TIE1CRURUTFNfUEFERElOR19aRVJPUworI2RlZmluZSBQT0xBUlNTTF9QQURESU5HX1pFUk9TX0FORF9MRU4gTUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKyNkZWZpbmUgUE9MQVJTU0xfUEFETE9DS19IIE1CRURUTFNfUEFETE9DS19ICisjZGVmaW5lIFBPTEFSU1NMX1BCS0RGMl9IIE1CRURUTFNfUEJLREYyX0gKKyNkZWZpbmUgUE9MQVJTU0xfUEVNX0ggTUJFRFRMU19QRU1fSAorI2RlZmluZSBQT0xBUlNTTF9QS0NTMTFfSCBNQkVEVExTX1BLQ1MxMV9ICisjZGVmaW5lIFBPTEFSU1NMX1BLQ1MxMl9IIE1CRURUTFNfUEtDUzEyX0gKKyNkZWZpbmUgUE9MQVJTU0xfUEtDUzVfSCBNQkVEVExTX1BLQ1M1X0gKKyNkZWZpbmUgUE9MQVJTU0xfUEtfREVCVUdfRUNQIE1CRURUTFNfUEtfREVCVUdfRUNQCisjZGVmaW5lIFBPTEFSU1NMX1BLX0RFQlVHX01BWF9JVEVNUyBNQkVEVExTX1BLX0RFQlVHX01BWF9JVEVNUworI2RlZmluZSBQT0xBUlNTTF9QS19ERUJVR19NUEkgTUJFRFRMU19QS19ERUJVR19NUEkKKyNkZWZpbmUgUE9MQVJTU0xfUEtfREVCVUdfTk9ORSBNQkVEVExTX1BLX0RFQlVHX05PTkUKKyNkZWZpbmUgUE9MQVJTU0xfUEtfRUNEU0EgTUJFRFRMU19QS19FQ0RTQQorI2RlZmluZSBQT0xBUlNTTF9QS19FQ0tFWSBNQkVEVExTX1BLX0VDS0VZCisjZGVmaW5lIFBPTEFSU1NMX1BLX0VDS0VZX0RIIE1CRURUTFNfUEtfRUNLRVlfREgKKyNkZWZpbmUgUE9MQVJTU0xfUEtfSCBNQkVEVExTX1BLX0gKKyNkZWZpbmUgUE9MQVJTU0xfUEtfTk9ORSBNQkVEVExTX1BLX05PTkUKKyNkZWZpbmUgUE9MQVJTU0xfUEtfUlNBIE1CRURUTFNfUEtfUlNBCisjZGVmaW5lIFBPTEFSU1NMX1BLX1JTQVNTQV9QU1MgTUJFRFRMU19QS19SU0FTU0FfUFNTCisjZGVmaW5lIFBPTEFSU1NMX1BLX1JTQV9BTFQgTUJFRFRMU19QS19SU0FfQUxUCisjZGVmaW5lIFBPTEFSU1NMX1BLX1dSQVBfSCBNQkVEVExTX1BLX1dSQVBfSAorI2RlZmluZSBQT0xBUlNTTF9QTEFURk9STV9IIE1CRURUTFNfUExBVEZPUk1fSAorI2RlZmluZSBQT0xBUlNTTF9QUkVNQVNURVJfU0laRSBNQkVEVExTX1BSRU1BU1RFUl9TSVpFCisjZGVmaW5lIFBPTEFSU1NMX1JJUEVNRDE2MF9IIE1CRURUTFNfUklQRU1EMTYwX0gKKyNkZWZpbmUgUE9MQVJTU0xfUlNBX0ggTUJFRFRMU19SU0FfSAorI2RlZmluZSBQT0xBUlNTTF9TSEExX0ggTUJFRFRMU19TSEExX0gKKyNkZWZpbmUgUE9MQVJTU0xfU0hBMjU2X0ggTUJFRFRMU19TSEEyNTZfSAorI2RlZmluZSBQT0xBUlNTTF9TSEE1MTJfSCBNQkVEVExTX1NIQTUxMl9ICisjZGVmaW5lIFBPTEFSU1NMX1NTTF9DQUNIRV9IIE1CRURUTFNfU1NMX0NBQ0hFX0gKKyNkZWZpbmUgUE9MQVJTU0xfU1NMX0NJUEhFUlNVSVRFU19IIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFU19ICisjZGVmaW5lIFBPTEFSU1NMX1NTTF9DT09LSUVfSCBNQkVEVExTX1NTTF9DT09LSUVfSAorI2RlZmluZSBQT0xBUlNTTF9TU0xfSCBNQkVEVExTX1NTTF9ICisjZGVmaW5lIFBPTEFSU1NMX1RIUkVBRElOR19IIE1CRURUTFNfVEhSRUFESU5HX0gKKyNkZWZpbmUgUE9MQVJTU0xfVEhSRUFESU5HX0lNUEwgTUJFRFRMU19USFJFQURJTkdfSU1QTAorI2RlZmluZSBQT0xBUlNTTF9USU1JTkdfSCBNQkVEVExTX1RJTUlOR19ICisjZGVmaW5lIFBPTEFSU1NMX1ZFUlNJT05fSCBNQkVEVExTX1ZFUlNJT05fSAorI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX01BSk9SIE1CRURUTFNfVkVSU0lPTl9NQUpPUgorI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX01JTk9SIE1CRURUTFNfVkVSU0lPTl9NSU5PUgorI2RlZmluZSBQT0xBUlNTTF9WRVJTSU9OX05VTUJFUiBNQkVEVExTX1ZFUlNJT05fTlVNQkVSCisjZGVmaW5lIFBPTEFSU1NMX1ZFUlNJT05fUEFUQ0ggTUJFRFRMU19WRVJTSU9OX1BBVENICisjZGVmaW5lIFBPTEFSU1NMX1ZFUlNJT05fU1RSSU5HIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcKKyNkZWZpbmUgUE9MQVJTU0xfVkVSU0lPTl9TVFJJTkdfRlVMTCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HX0ZVTEwKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DUkxfSCBNQkVEVExTX1g1MDlfQ1JMX0gKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DUlRfSCBNQkVEVExTX1g1MDlfQ1JUX0gKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9DU1JfSCBNQkVEVExTX1g1MDlfQ1NSX0gKKyNkZWZpbmUgUE9MQVJTU0xfWDUwOV9IIE1CRURUTFNfWDUwOV9ICisjZGVmaW5lIFBPTEFSU1NMX1hURUFfSCBNQkVEVExTX1hURUFfSAorI2RlZmluZSBSU0FfQ1JZUFQgTUJFRFRMU19SU0FfQ1JZUFQKKyNkZWZpbmUgUlNBX1BLQ1NfVjE1IE1CRURUTFNfUlNBX1BLQ1NfVjE1CisjZGVmaW5lIFJTQV9QS0NTX1YyMSBNQkVEVExTX1JTQV9QS0NTX1YyMQorI2RlZmluZSBSU0FfUFJJVkFURSBNQkVEVExTX1JTQV9QUklWQVRFCisjZGVmaW5lIFJTQV9QVUJMSUMgTUJFRFRMU19SU0FfUFVCTElDCisjZGVmaW5lIFJTQV9TQUxUX0xFTl9BTlkgTUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZCisjZGVmaW5lIFJTQV9TSUdOIE1CRURUTFNfUlNBX1NJR04KKyNkZWZpbmUgU1NMX0FMRVJUX0xFVkVMX0ZBVEFMIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMCisjZGVmaW5lIFNTTF9BTEVSVF9MRVZFTF9XQVJOSU5HIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19BQ0NFU1NfREVOSUVEIE1CRURUTFNfU1NMX0FMRVJUX01TR19BQ0NFU1NfREVOSUVECisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfQkFEX0NFUlQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9DRVJUCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfQkFEX1JFQ09SRF9NQUMgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfQ0VSVF9FWFBJUkVEIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX0VYUElSRUQKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19DRVJUX1JFVk9LRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfUkVWT0tFRAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0NFUlRfVU5LTk9XTiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0VSVF9VTktOT1dOCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfQ0xPU0VfTk9USUZZIE1CRURUTFNfU1NMX0FMRVJUX01TR19DTE9TRV9OT1RJRlkKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19ERUNPREVfRVJST1IgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ09ERV9FUlJPUgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0RFQ09NUFJFU1NJT05fRkFJTFVSRSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDT01QUkVTU0lPTl9GQUlMVVJFCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfREVDUllQVElPTl9GQUlMRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ1JZUFRJT05fRkFJTEVECisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfREVDUllQVF9FUlJPUiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDUllQVF9FUlJPUgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0VYUE9SVF9SRVNUUklDVElPTiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfRVhQT1JUX1JFU1RSSUNUSU9OCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfSUxMRUdBTF9QQVJBTUVURVIgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lMTEVHQUxfUEFSQU1FVEVSCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfSU5BUFJPUFJJQVRFX0ZBTExCQUNLIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTkFQUk9QUklBVEVfRkFMTEJBQ0sKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19JTlNVRkZJQ0lFTlRfU0VDVVJJVFkgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lOU1VGRklDSUVOVF9TRUNVUklUWQorI2RlZmluZSBTU0xfQUxFUlRfTVNHX0lOVEVSTkFMX0VSUk9SIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTlRFUk5BTF9FUlJPUgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX05PX0FQUExJQ0FUSU9OX1BST1RPQ09MIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19BUFBMSUNBVElPTl9QUk9UT0NPTAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX05PX0NFUlQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0NFUlQKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19OT19SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19SRU5FR09USUFUSU9OCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfUFJPVE9DT0xfVkVSU0lPTiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUFJPVE9DT0xfVkVSU0lPTgorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1JFQ09SRF9PVkVSRkxPVyBNQkVEVExTX1NTTF9BTEVSVF9NU0dfUkVDT1JEX09WRVJGTE9XCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfVU5FWFBFQ1RFRF9NRVNTQUdFIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTkVYUEVDVEVEX01FU1NBR0UKKyNkZWZpbmUgU1NMX0FMRVJUX01TR19VTktOT1dOX0NBIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTktOT1dOX0NBCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfVU5LTk9XTl9QU0tfSURFTlRJVFkgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOS05PV05fUFNLX0lERU5USVRZCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfVU5SRUNPR05JWkVEX05BTUUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOUkVDT0dOSVpFRF9OQU1FCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfQ0VSVCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfQ0VSVAorI2RlZmluZSBTU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0VYVCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfRVhUCisjZGVmaW5lIFNTTF9BTEVSVF9NU0dfVVNFUl9DQU5DRUxFRCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVVNFUl9DQU5DRUxFRAorI2RlZmluZSBTU0xfQU5USV9SRVBMQVlfRElTQUJMRUQgTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRElTQUJMRUQKKyNkZWZpbmUgU1NMX0FOVElfUkVQTEFZX0VOQUJMRUQgTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRU5BQkxFRAorI2RlZmluZSBTU0xfQVJDNF9ESVNBQkxFRCBNQkVEVExTX1NTTF9BUkM0X0RJU0FCTEVECisjZGVmaW5lIFNTTF9BUkM0X0VOQUJMRUQgTUJFRFRMU19TU0xfQVJDNF9FTkFCTEVECisjZGVmaW5lIFNTTF9CVUZGRVJfTEVOIE1CRURUTFNfU1NMX0JVRkZFUl9MRU4KKyNkZWZpbmUgU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9NQVhfRU5UUklFUworI2RlZmluZSBTU0xfQ0FDSEVfREVGQVVMVF9USU1FT1VUIE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVAorI2RlZmluZSBTU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRElTQUJMRUQgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRElTQUJMRUQKKyNkZWZpbmUgU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRU5BQkxFRAorI2RlZmluZSBTU0xfQ0VSVElGSUNBVEVfUkVRVUVTVCBNQkVEVExTX1NTTF9DRVJUSUZJQ0FURV9SRVFVRVNUCisjZGVmaW5lIFNTTF9DRVJUSUZJQ0FURV9WRVJJRlkgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfVkVSSUZZCisjZGVmaW5lIFNTTF9DRVJUX1RZUEVfRUNEU0FfU0lHTiBNQkVEVExTX1NTTF9DRVJUX1RZUEVfRUNEU0FfU0lHTgorI2RlZmluZSBTU0xfQ0VSVF9UWVBFX1JTQV9TSUdOIE1CRURUTFNfU1NMX0NFUlRfVFlQRV9SU0FfU0lHTgorI2RlZmluZSBTU0xfQ0hBTk5FTF9JTkJPVU5EIE1CRURUTFNfU1NMX0NIQU5ORUxfSU5CT1VORAorI2RlZmluZSBTU0xfQ0hBTk5FTF9PVVRCT1VORCBNQkVEVExTX1NTTF9DSEFOTkVMX09VVEJPVU5ECisjZGVmaW5lIFNTTF9DSVBIRVJTVUlURVMgTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTCisjZGVmaW5lIFNTTF9DTElFTlRfQ0VSVElGSUNBVEUgTUJFRFRMU19TU0xfQ0xJRU5UX0NFUlRJRklDQVRFCisjZGVmaW5lIFNTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDIE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUMKKyNkZWZpbmUgU1NMX0NMSUVOVF9GSU5JU0hFRCBNQkVEVExTX1NTTF9DTElFTlRfRklOSVNIRUQKKyNkZWZpbmUgU1NMX0NMSUVOVF9IRUxMTyBNQkVEVExTX1NTTF9DTElFTlRfSEVMTE8KKyNkZWZpbmUgU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0UgTUJFRFRMU19TU0xfQ0xJRU5UX0tFWV9FWENIQU5HRQorI2RlZmluZSBTU0xfQ09NUFJFU1NJT05fQUREIE1CRURUTFNfU1NMX0NPTVBSRVNTSU9OX0FERAorI2RlZmluZSBTU0xfQ09NUFJFU1NfREVGTEFURSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFCisjZGVmaW5lIFNTTF9DT01QUkVTU19OVUxMIE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwKKyNkZWZpbmUgU1NMX0RFQlVHX0JVRiBNQkVEVExTX1NTTF9ERUJVR19CVUYKKyNkZWZpbmUgU1NMX0RFQlVHX0NSVCBNQkVEVExTX1NTTF9ERUJVR19DUlQKKyNkZWZpbmUgU1NMX0RFQlVHX0VDUCBNQkVEVExTX1NTTF9ERUJVR19FQ1AKKyNkZWZpbmUgU1NMX0RFQlVHX01QSSBNQkVEVExTX1NTTF9ERUJVR19NUEkKKyNkZWZpbmUgU1NMX0RFQlVHX01TRyBNQkVEVExTX1NTTF9ERUJVR19NU0cKKyNkZWZpbmUgU1NMX0RFQlVHX1JFVCBNQkVEVExTX1NTTF9ERUJVR19SRVQKKyNkZWZpbmUgU1NMX0RFRkFVTFRfVElDS0VUX0xJRkVUSU1FIE1CRURUTFNfU1NMX0RFRkFVTFRfVElDS0VUX0xJRkVUSU1FCisjZGVmaW5lIFNTTF9EVExTX1RJTUVPVVRfREZMX01BWCBNQkVEVExTX1NTTF9EVExTX1RJTUVPVVRfREZMX01BWAorI2RlZmluZSBTU0xfRFRMU19USU1FT1VUX0RGTF9NSU4gTUJFRFRMU19TU0xfRFRMU19USU1FT1VUX0RGTF9NSU4KKyNkZWZpbmUgU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyBNQkVEVExTX1NTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8KKyNkZWZpbmUgU1NMX0VUTV9ESVNBQkxFRCBNQkVEVExTX1NTTF9FVE1fRElTQUJMRUQKKyNkZWZpbmUgU1NMX0VUTV9FTkFCTEVEIE1CRURUTFNfU1NMX0VUTV9FTkFCTEVECisjZGVmaW5lIFNTTF9FWFRFTkRFRF9NU19ESVNBQkxFRCBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19ESVNBQkxFRAorI2RlZmluZSBTU0xfRVhURU5ERURfTVNfRU5BQkxFRCBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVECisjZGVmaW5lIFNTTF9GQUxMQkFDS19TQ1NWIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKyNkZWZpbmUgU1NMX0ZMVVNIX0JVRkZFUlMgTUJFRFRMU19TU0xfRkxVU0hfQlVGRkVSUworI2RlZmluZSBTU0xfSEFORFNIQUtFX09WRVIgTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIKKyNkZWZpbmUgU1NMX0hBTkRTSEFLRV9XUkFQVVAgTUJFRFRMU19TU0xfSEFORFNIQUtFX1dSQVBVUAorI2RlZmluZSBTU0xfSEFTSF9NRDUgTUJFRFRMU19TU0xfSEFTSF9NRDUKKyNkZWZpbmUgU1NMX0hBU0hfTk9ORSBNQkVEVExTX1NTTF9IQVNIX05PTkUKKyNkZWZpbmUgU1NMX0hBU0hfU0hBMSBNQkVEVExTX1NTTF9IQVNIX1NIQTEKKyNkZWZpbmUgU1NMX0hBU0hfU0hBMjI0IE1CRURUTFNfU1NMX0hBU0hfU0hBMjI0CisjZGVmaW5lIFNTTF9IQVNIX1NIQTI1NiBNQkVEVExTX1NTTF9IQVNIX1NIQTI1NgorI2RlZmluZSBTU0xfSEFTSF9TSEEzODQgTUJFRFRMU19TU0xfSEFTSF9TSEEzODQKKyNkZWZpbmUgU1NMX0hBU0hfU0hBNTEyIE1CRURUTFNfU1NMX0hBU0hfU0hBNTEyCisjZGVmaW5lIFNTTF9IRUxMT19SRVFVRVNUIE1CRURUTFNfU1NMX0hFTExPX1JFUVVFU1QKKyNkZWZpbmUgU1NMX0hTX0NFUlRJRklDQVRFIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFCisjZGVmaW5lIFNTTF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QKKyNkZWZpbmUgU1NMX0hTX0NFUlRJRklDQVRFX1ZFUklGWSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9WRVJJRlkKKyNkZWZpbmUgU1NMX0hTX0NMSUVOVF9IRUxMTyBNQkVEVExTX1NTTF9IU19DTElFTlRfSEVMTE8KKyNkZWZpbmUgU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRQorI2RlZmluZSBTU0xfSFNfRklOSVNIRUQgTUJFRFRMU19TU0xfSFNfRklOSVNIRUQKKyNkZWZpbmUgU1NMX0hTX0hFTExPX1JFUVVFU1QgTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVAorI2RlZmluZSBTU0xfSFNfSEVMTE9fVkVSSUZZX1JFUVVFU1QgTUJFRFRMU19TU0xfSFNfSEVMTE9fVkVSSUZZX1JFUVVFU1QKKyNkZWZpbmUgU1NMX0hTX05FV19TRVNTSU9OX1RJQ0tFVCBNQkVEVExTX1NTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQKKyNkZWZpbmUgU1NMX0hTX1NFUlZFUl9IRUxMTyBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE8KKyNkZWZpbmUgU1NMX0hTX1NFUlZFUl9IRUxMT19ET05FIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMT19ET05FCisjZGVmaW5lIFNTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UKKyNkZWZpbmUgU1NMX0lOSVRJQUxfSEFORFNIQUtFIE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFCisjZGVmaW5lIFNTTF9JU19DTElFTlQgTUJFRFRMU19TU0xfSVNfQ0xJRU5UCisjZGVmaW5lIFNTTF9JU19GQUxMQkFDSyBNQkVEVExTX1NTTF9JU19GQUxMQkFDSworI2RlZmluZSBTU0xfSVNfTk9UX0ZBTExCQUNLIE1CRURUTFNfU1NMX0lTX05PVF9GQUxMQkFDSworI2RlZmluZSBTU0xfSVNfU0VSVkVSIE1CRURUTFNfU1NMX0lTX1NFUlZFUgorI2RlZmluZSBTU0xfTEVHQUNZX0FMTE9XX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfTEVHQUNZX0FMTE9XX1JFTkVHT1RJQVRJT04KKyNkZWZpbmUgU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UgTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRQorI2RlZmluZSBTU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT04KKyNkZWZpbmUgU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OCisjZGVmaW5lIFNTTF9NQUNfQUREIE1CRURUTFNfU1NMX01BQ19BREQKKyNkZWZpbmUgU1NMX01BSk9SX1ZFUlNJT05fMyBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMKKyNkZWZpbmUgU1NMX01BWF9DT05URU5UX0xFTiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4KKyNkZWZpbmUgU1NMX01BWF9GUkFHX0xFTl8xMDI0IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8xMDI0CisjZGVmaW5lIFNTTF9NQVhfRlJBR19MRU5fMjA0OCBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMjA0OAorI2RlZmluZSBTU0xfTUFYX0ZSQUdfTEVOXzQwOTYgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzQwOTYKKyNkZWZpbmUgU1NMX01BWF9GUkFHX0xFTl81MTIgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzUxMgorI2RlZmluZSBTU0xfTUFYX0ZSQUdfTEVOX0lOVkFMSUQgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX0lOVkFMSUQKKyNkZWZpbmUgU1NMX01BWF9GUkFHX0xFTl9OT05FIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FCisjZGVmaW5lIFNTTF9NQVhfTUFKT1JfVkVSU0lPTiBNQkVEVExTX1NTTF9NQVhfTUFKT1JfVkVSU0lPTgorI2RlZmluZSBTU0xfTUFYX01JTk9SX1ZFUlNJT04gTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT04KKyNkZWZpbmUgU1NMX01JTk9SX1ZFUlNJT05fMCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAKKyNkZWZpbmUgU1NMX01JTk9SX1ZFUlNJT05fMSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEKKyNkZWZpbmUgU1NMX01JTk9SX1ZFUlNJT05fMiBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIKKyNkZWZpbmUgU1NMX01JTk9SX1ZFUlNJT05fMyBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMKKyNkZWZpbmUgU1NMX01JTl9NQUpPUl9WRVJTSU9OIE1CRURUTFNfU1NMX01JTl9NQUpPUl9WRVJTSU9OCisjZGVmaW5lIFNTTF9NSU5fTUlOT1JfVkVSU0lPTiBNQkVEVExTX1NTTF9NSU5fTUlOT1JfVkVSU0lPTgorI2RlZmluZSBTU0xfTVNHX0FMRVJUIE1CRURUTFNfU1NMX01TR19BTEVSVAorI2RlZmluZSBTU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEEgTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEEKKyNkZWZpbmUgU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMgTUJFRFRMU19TU0xfTVNHX0NIQU5HRV9DSVBIRVJfU1BFQworI2RlZmluZSBTU0xfTVNHX0hBTkRTSEFLRSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFCisjZGVmaW5lIFNTTF9QQURESU5HX0FERCBNQkVEVExTX1NTTF9QQURESU5HX0FERAorI2RlZmluZSBTU0xfUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisjZGVmaW5lIFNTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQKKyNkZWZpbmUgU1NMX1JFTkVHT1RJQVRJT05fRE9ORSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RPTkUKKyNkZWZpbmUgU1NMX1JFTkVHT1RJQVRJT05fRU5BQkxFRCBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQKKyNkZWZpbmUgU1NMX1JFTkVHT1RJQVRJT05fTk9UX0VORk9SQ0VEIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fTk9UX0VORk9SQ0VECisjZGVmaW5lIFNTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HCisjZGVmaW5lIFNTTF9SRU5FR09fTUFYX1JFQ09SRFNfREVGQVVMVCBNQkVEVExTX1NTTF9SRU5FR09fTUFYX1JFQ09SRFNfREVGQVVMVAorI2RlZmluZSBTU0xfUkVUUkFOU19GSU5JU0hFRCBNQkVEVExTX1NTTF9SRVRSQU5TX0ZJTklTSEVECisjZGVmaW5lIFNTTF9SRVRSQU5TX1BSRVBBUklORyBNQkVEVExTX1NTTF9SRVRSQU5TX1BSRVBBUklORworI2RlZmluZSBTU0xfUkVUUkFOU19TRU5ESU5HIE1CRURUTFNfU1NMX1JFVFJBTlNfU0VORElORworI2RlZmluZSBTU0xfUkVUUkFOU19XQUlUSU5HIE1CRURUTFNfU1NMX1JFVFJBTlNfV0FJVElORworI2RlZmluZSBTU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04KKyNkZWZpbmUgU1NMX1NFUlZFUl9DRVJUSUZJQ0FURSBNQkVEVExTX1NTTF9TRVJWRVJfQ0VSVElGSUNBVEUKKyNkZWZpbmUgU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUMgTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQworI2RlZmluZSBTU0xfU0VSVkVSX0ZJTklTSEVEIE1CRURUTFNfU1NMX1NFUlZFUl9GSU5JU0hFRAorI2RlZmluZSBTU0xfU0VSVkVSX0hFTExPIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMTworI2RlZmluZSBTU0xfU0VSVkVSX0hFTExPX0RPTkUgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPX0RPTkUKKyNkZWZpbmUgU1NMX1NFUlZFUl9IRUxMT19WRVJJRllfUkVRVUVTVF9TRU5UIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19WRVJJRllfUkVRVUVTVF9TRU5UCisjZGVmaW5lIFNTTF9TRVJWRVJfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX1NFUlZFUl9LRVlfRVhDSEFOR0UKKyNkZWZpbmUgU1NMX1NFUlZFUl9ORVdfU0VTU0lPTl9USUNLRVQgTUJFRFRMU19TU0xfU0VSVkVSX05FV19TRVNTSU9OX1RJQ0tFVAorI2RlZmluZSBTU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRAorI2RlZmluZSBTU0xfU0VTU0lPTl9USUNLRVRTX0VOQUJMRUQgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0VOQUJMRUQKKyNkZWZpbmUgU1NMX1NJR19BTk9OIE1CRURUTFNfU1NMX1NJR19BTk9OCisjZGVmaW5lIFNTTF9TSUdfRUNEU0EgTUJFRFRMU19TU0xfU0lHX0VDRFNBCisjZGVmaW5lIFNTTF9TSUdfUlNBIE1CRURUTFNfU1NMX1NJR19SU0EKKyNkZWZpbmUgU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0KKyNkZWZpbmUgU1NMX1RSQU5TUE9SVF9TVFJFQU0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTQorI2RlZmluZSBTU0xfVFJVTkNBVEVEX0hNQUNfTEVOIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDX0xFTgorI2RlZmluZSBTU0xfVFJVTkNfSE1BQ19ESVNBQkxFRCBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVECisjZGVmaW5lIFNTTF9UUlVOQ19ITUFDX0VOQUJMRUQgTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19FTkFCTEVECisjZGVmaW5lIFNTTF9WRVJJRllfREFUQV9NQVhfTEVOIE1CRURUTFNfU1NMX1ZFUklGWV9EQVRBX01BWF9MRU4KKyNkZWZpbmUgU1NMX1ZFUklGWV9OT05FIE1CRURUTFNfU1NMX1ZFUklGWV9OT05FCisjZGVmaW5lIFNTTF9WRVJJRllfT1BUSU9OQUwgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMCisjZGVmaW5lIFNTTF9WRVJJRllfUkVRVUlSRUQgTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVECisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQ00KKyNkZWZpbmUgVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ00gTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNCisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOAorI2RlZmluZSBUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBCisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ00KKyNkZWZpbmUgVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTV84CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ00gTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNCisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOAorI2RlZmluZSBUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NDTQorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ01fOAorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNCisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTV84CisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEKKyNkZWZpbmUgVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyNkZWZpbmUgVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyNkZWZpbmUgVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBCisjZGVmaW5lIFRMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisjZGVmaW5lIFRMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX0VDREhfUlNBX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFRMU19FWFRfQUxQTiBNQkVEVExTX1RMU19FWFRfQUxQTgorI2RlZmluZSBUTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMKKyNkZWZpbmUgVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCisjZGVmaW5lIFRMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSCBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSAorI2RlZmluZSBUTFNfRVhUX1JFTkVHT1RJQVRJT05fSU5GTyBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPCisjZGVmaW5lIFRMU19FWFRfU0VSVkVSTkFNRSBNQkVEVExTX1RMU19FWFRfU0VSVkVSTkFNRQorI2RlZmluZSBUTFNfRVhUX1NFUlZFUk5BTUVfSE9TVE5BTUUgTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUVfSE9TVE5BTUUKKyNkZWZpbmUgVExTX0VYVF9TRVNTSU9OX1RJQ0tFVCBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQKKyNkZWZpbmUgVExTX0VYVF9TSUdfQUxHIE1CRURUTFNfVExTX0VYVF9TSUdfQUxHCisjZGVmaW5lIFRMU19FWFRfU1VQUE9SVEVEX0VMTElQVElDX0NVUlZFUyBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX0VMTElQVElDX0NVUlZFUworI2RlZmluZSBUTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUworI2RlZmluZSBUTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQKKyNkZWZpbmUgVExTX0VYVF9UUlVOQ0FURURfSE1BQyBNQkVEVExTX1RMU19FWFRfVFJVTkNBVEVEX0hNQUMKKyNkZWZpbmUgVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ00KKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzggTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOAorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ00gTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ00KKyNkZWZpbmUgVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOAorI2RlZmluZSBUTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyNkZWZpbmUgVExTX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBCisjZGVmaW5lIFRMU19QU0tfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTI1NgorI2RlZmluZSBUTFNfUFNLX1dJVEhfTlVMTF9TSEEzODQgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyNkZWZpbmUgVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFRMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyNkZWZpbmUgVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQQorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorI2RlZmluZSBUTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTV84CisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTV84CisjZGVmaW5lIFRMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisjZGVmaW5lIFRMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyNkZWZpbmUgVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisjZGVmaW5lIFRMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQQorI2RlZmluZSBUTFNfUlNBX1dJVEhfTlVMTF9NRDUgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9NRDUKKyNkZWZpbmUgVExTX1JTQV9XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBCisjZGVmaW5lIFRMU19SU0FfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQTI1NgorI2RlZmluZSBUTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUKKyNkZWZpbmUgVExTX1JTQV9XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfU0hBCisjZGVmaW5lIFVMNjQgTUJFRFRMU19VTDY0CisjZGVmaW5lIFg1MDlfQ1JUX1ZFUlNJT05fMSBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMQorI2RlZmluZSBYNTA5X0NSVF9WRVJTSU9OXzIgTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzIKKyNkZWZpbmUgWDUwOV9DUlRfVkVSU0lPTl8zIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8zCisjZGVmaW5lIFg1MDlfRk9STUFUX0RFUiBNQkVEVExTX1g1MDlfRk9STUFUX0RFUgorI2RlZmluZSBYNTA5X0ZPUk1BVF9QRU0gTUJFRFRMU19YNTA5X0ZPUk1BVF9QRU0KKyNkZWZpbmUgWDUwOV9NQVhfRE5fTkFNRV9TSVpFIE1CRURUTFNfWDUwOV9NQVhfRE5fTkFNRV9TSVpFCisjZGVmaW5lIFg1MDlfUkZDNTI4MF9NQVhfU0VSSUFMX0xFTiBNQkVEVExTX1g1MDlfUkZDNTI4MF9NQVhfU0VSSUFMX0xFTgorI2RlZmluZSBYNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOIE1CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTgorI2RlZmluZSBYVEVBX0RFQ1JZUFQgTUJFRFRMU19YVEVBX0RFQ1JZUFQKKyNkZWZpbmUgWFRFQV9FTkNSWVBUIE1CRURUTFNfWFRFQV9FTkNSWVBUCisjZGVmaW5lIF9hc24xX2JpdHN0cmluZyBtYmVkdGxzX2FzbjFfYml0c3RyaW5nCisjZGVmaW5lIF9hc24xX2J1ZiBtYmVkdGxzX2FzbjFfYnVmCisjZGVmaW5lIF9hc24xX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX25hbWVkX2RhdGEKKyNkZWZpbmUgX2FzbjFfc2VxdWVuY2UgbWJlZHRsc19hc24xX3NlcXVlbmNlCisjZGVmaW5lIF9zc2xfY2FjaGVfY29udGV4dCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0CisjZGVmaW5lIF9zc2xfY2FjaGVfZW50cnkgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkKKyNkZWZpbmUgX3NzbF9jaXBoZXJzdWl0ZV90IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QKKyNkZWZpbmUgX3NzbF9jb250ZXh0IG1iZWR0bHNfc3NsX2NvbnRleHQKKyNkZWZpbmUgX3NzbF9mbGlnaHRfaXRlbSBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbQorI2RlZmluZSBfc3NsX2hhbmRzaGFrZV9wYXJhbXMgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcworI2RlZmluZSBfc3NsX2tleV9jZXJ0IG1iZWR0bHNfc3NsX2tleV9jZXJ0CisjZGVmaW5lIF9zc2xfcHJlbWFzdGVyX3NlY3JldCBtYmVkdGxzX3NzbF9wcmVtYXN0ZXJfc2VjcmV0CisjZGVmaW5lIF9zc2xfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXNzaW9uCisjZGVmaW5lIF9zc2xfdGlja2V0X2tleXMgbWJlZHRsc19zc2xfdGlja2V0X2tleXMKKyNkZWZpbmUgX3NzbF90cmFuc2Zvcm0gbWJlZHRsc19zc2xfdHJhbnNmb3JtCisjZGVmaW5lIF94NTA5X2NybCBtYmVkdGxzX3g1MDlfY3JsCisjZGVmaW5lIF94NTA5X2NybF9lbnRyeSBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5CisjZGVmaW5lIF94NTA5X2NydCBtYmVkdGxzX3g1MDlfY3J0CisjZGVmaW5lIF94NTA5X2NzciBtYmVkdGxzX3g1MDlfY3NyCisjZGVmaW5lIF94NTA5X3RpbWUgbWJlZHRsc194NTA5X3RpbWUKKyNkZWZpbmUgX3g1MDl3cml0ZV9jZXJ0IG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQKKyNkZWZpbmUgX3g1MDl3cml0ZV9jc3IgbWJlZHRsc194NTA5d3JpdGVfY3NyCisjZGVmaW5lIGFlc19jb250ZXh0IG1iZWR0bHNfYWVzX2NvbnRleHQKKyNkZWZpbmUgYWVzX2NyeXB0X2NiYyBtYmVkdGxzX2Flc19jcnlwdF9jYmMKKyNkZWZpbmUgYWVzX2NyeXB0X2NmYjEyOCBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgKKyNkZWZpbmUgYWVzX2NyeXB0X2NmYjggbWJlZHRsc19hZXNfY3J5cHRfY2ZiOAorI2RlZmluZSBhZXNfY3J5cHRfY3RyIG1iZWR0bHNfYWVzX2NyeXB0X2N0cgorI2RlZmluZSBhZXNfY3J5cHRfZWNiIG1iZWR0bHNfYWVzX2NyeXB0X2VjYgorI2RlZmluZSBhZXNfZnJlZSBtYmVkdGxzX2Flc19mcmVlCisjZGVmaW5lIGFlc19pbml0IG1iZWR0bHNfYWVzX2luaXQKKyNkZWZpbmUgYWVzX3NlbGZfdGVzdCBtYmVkdGxzX2Flc19zZWxmX3Rlc3QKKyNkZWZpbmUgYWVzX3NldGtleV9kZWMgbWJlZHRsc19hZXNfc2V0a2V5X2RlYworI2RlZmluZSBhZXNfc2V0a2V5X2VuYyBtYmVkdGxzX2Flc19zZXRrZXlfZW5jCisjZGVmaW5lIGFlc25pX2NyeXB0X2VjYiBtYmVkdGxzX2Flc25pX2NyeXB0X2VjYgorI2RlZmluZSBhZXNuaV9nY21fbXVsdCBtYmVkdGxzX2Flc25pX2djbV9tdWx0CisjZGVmaW5lIGFlc25pX2ludmVyc2Vfa2V5IG1iZWR0bHNfYWVzbmlfaW52ZXJzZV9rZXkKKyNkZWZpbmUgYWVzbmlfc2V0a2V5X2VuYyBtYmVkdGxzX2Flc25pX3NldGtleV9lbmMKKyNkZWZpbmUgYWVzbmlfc3VwcG9ydHMgbWJlZHRsc19hZXNuaV9oYXNfc3VwcG9ydAorI2RlZmluZSBhbGFybWVkIG1iZWR0bHNfdGltaW5nX2FsYXJtZWQKKyNkZWZpbmUgYXJjNF9jb250ZXh0IG1iZWR0bHNfYXJjNF9jb250ZXh0CisjZGVmaW5lIGFyYzRfY3J5cHQgbWJlZHRsc19hcmM0X2NyeXB0CisjZGVmaW5lIGFyYzRfZnJlZSBtYmVkdGxzX2FyYzRfZnJlZQorI2RlZmluZSBhcmM0X2luaXQgbWJlZHRsc19hcmM0X2luaXQKKyNkZWZpbmUgYXJjNF9zZWxmX3Rlc3QgbWJlZHRsc19hcmM0X3NlbGZfdGVzdAorI2RlZmluZSBhcmM0X3NldHVwIG1iZWR0bHNfYXJjNF9zZXR1cAorI2RlZmluZSBhc24xX2JpdHN0cmluZyBtYmVkdGxzX2FzbjFfYml0c3RyaW5nCisjZGVmaW5lIGFzbjFfYnVmIG1iZWR0bHNfYXNuMV9idWYKKyNkZWZpbmUgYXNuMV9maW5kX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX2ZpbmRfbmFtZWRfZGF0YQorI2RlZmluZSBhc24xX2ZyZWVfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhCisjZGVmaW5lIGFzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0CisjZGVmaW5lIGFzbjFfZ2V0X2FsZyBtYmVkdGxzX2FzbjFfZ2V0X2FsZworI2RlZmluZSBhc24xX2dldF9hbGdfbnVsbCBtYmVkdGxzX2FzbjFfZ2V0X2FsZ19udWxsCisjZGVmaW5lIGFzbjFfZ2V0X2JpdHN0cmluZyBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZworI2RlZmluZSBhc24xX2dldF9iaXRzdHJpbmdfbnVsbCBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsCisjZGVmaW5lIGFzbjFfZ2V0X2Jvb2wgbWJlZHRsc19hc24xX2dldF9ib29sCisjZGVmaW5lIGFzbjFfZ2V0X2ludCBtYmVkdGxzX2FzbjFfZ2V0X2ludAorI2RlZmluZSBhc24xX2dldF9sZW4gbWJlZHRsc19hc24xX2dldF9sZW4KKyNkZWZpbmUgYXNuMV9nZXRfbXBpIG1iZWR0bHNfYXNuMV9nZXRfbXBpCisjZGVmaW5lIGFzbjFfZ2V0X3NlcXVlbmNlX29mIG1iZWR0bHNfYXNuMV9nZXRfc2VxdWVuY2Vfb2YKKyNkZWZpbmUgYXNuMV9nZXRfdGFnIG1iZWR0bHNfYXNuMV9nZXRfdGFnCisjZGVmaW5lIGFzbjFfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YQorI2RlZmluZSBhc24xX3NlcXVlbmNlIG1iZWR0bHNfYXNuMV9zZXF1ZW5jZQorI2RlZmluZSBhc24xX3N0b3JlX25hbWVkX2RhdGEgbWJlZHRsc19hc24xX3N0b3JlX25hbWVkX2RhdGEKKyNkZWZpbmUgYXNuMV93cml0ZV9hbGdvcml0aG1faWRlbnRpZmllciBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIKKyNkZWZpbmUgYXNuMV93cml0ZV9iaXRzdHJpbmcgbWJlZHRsc19hc24xX3dyaXRlX2JpdHN0cmluZworI2RlZmluZSBhc24xX3dyaXRlX2Jvb2wgbWJlZHRsc19hc24xX3dyaXRlX2Jvb2wKKyNkZWZpbmUgYXNuMV93cml0ZV9pYTVfc3RyaW5nIG1iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nCisjZGVmaW5lIGFzbjFfd3JpdGVfaW50IG1iZWR0bHNfYXNuMV93cml0ZV9pbnQKKyNkZWZpbmUgYXNuMV93cml0ZV9sZW4gbWJlZHRsc19hc24xX3dyaXRlX2xlbgorI2RlZmluZSBhc24xX3dyaXRlX21waSBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpCisjZGVmaW5lIGFzbjFfd3JpdGVfbnVsbCBtYmVkdGxzX2FzbjFfd3JpdGVfbnVsbAorI2RlZmluZSBhc24xX3dyaXRlX29jdGV0X3N0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nCisjZGVmaW5lIGFzbjFfd3JpdGVfb2lkIG1iZWR0bHNfYXNuMV93cml0ZV9vaWQKKyNkZWZpbmUgYXNuMV93cml0ZV9wcmludGFibGVfc3RyaW5nIG1iZWR0bHNfYXNuMV93cml0ZV9wcmludGFibGVfc3RyaW5nCisjZGVmaW5lIGFzbjFfd3JpdGVfcmF3X2J1ZmZlciBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlcgorI2RlZmluZSBhc24xX3dyaXRlX3RhZyBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnCisjZGVmaW5lIGJhc2U2NF9kZWNvZGUgbWJlZHRsc19iYXNlNjRfZGVjb2RlCisjZGVmaW5lIGJhc2U2NF9lbmNvZGUgbWJlZHRsc19iYXNlNjRfZW5jb2RlCisjZGVmaW5lIGJhc2U2NF9zZWxmX3Rlc3QgbWJlZHRsc19iYXNlNjRfc2VsZl90ZXN0CisjZGVmaW5lIGJsb3dmaXNoX2NvbnRleHQgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0CisjZGVmaW5lIGJsb3dmaXNoX2NyeXB0X2NiYyBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NiYworI2RlZmluZSBibG93ZmlzaF9jcnlwdF9jZmI2NCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0CisjZGVmaW5lIGJsb3dmaXNoX2NyeXB0X2N0ciBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0cgorI2RlZmluZSBibG93ZmlzaF9jcnlwdF9lY2IgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IKKyNkZWZpbmUgYmxvd2Zpc2hfZnJlZSBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUKKyNkZWZpbmUgYmxvd2Zpc2hfaW5pdCBtYmVkdGxzX2Jsb3dmaXNoX2luaXQKKyNkZWZpbmUgYmxvd2Zpc2hfc2V0a2V5IG1iZWR0bHNfYmxvd2Zpc2hfc2V0a2V5CisjZGVmaW5lIGNhbWVsbGlhX2NvbnRleHQgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0CisjZGVmaW5lIGNhbWVsbGlhX2NyeXB0X2NiYyBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NiYworI2RlZmluZSBjYW1lbGxpYV9jcnlwdF9jZmIxMjggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgKKyNkZWZpbmUgY2FtZWxsaWFfY3J5cHRfY3RyIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY3RyCisjZGVmaW5lIGNhbWVsbGlhX2NyeXB0X2VjYiBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYgorI2RlZmluZSBjYW1lbGxpYV9mcmVlIG1iZWR0bHNfY2FtZWxsaWFfZnJlZQorI2RlZmluZSBjYW1lbGxpYV9pbml0IG1iZWR0bHNfY2FtZWxsaWFfaW5pdAorI2RlZmluZSBjYW1lbGxpYV9zZWxmX3Rlc3QgbWJlZHRsc19jYW1lbGxpYV9zZWxmX3Rlc3QKKyNkZWZpbmUgY2FtZWxsaWFfc2V0a2V5X2RlYyBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMKKyNkZWZpbmUgY2FtZWxsaWFfc2V0a2V5X2VuYyBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMKKyNkZWZpbmUgY2NtX2F1dGhfZGVjcnlwdCBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQKKyNkZWZpbmUgY2NtX2NvbnRleHQgbWJlZHRsc19jY21fY29udGV4dAorI2RlZmluZSBjY21fZW5jcnlwdF9hbmRfdGFnIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZworI2RlZmluZSBjY21fZnJlZSBtYmVkdGxzX2NjbV9mcmVlCisjZGVmaW5lIGNjbV9pbml0IG1iZWR0bHNfY2NtX2luaXQKKyNkZWZpbmUgY2NtX3NlbGZfdGVzdCBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QKKyNkZWZpbmUgY2lwaGVyX2F1dGhfZGVjcnlwdCBtYmVkdGxzX2NpcGhlcl9hdXRoX2RlY3J5cHQKKyNkZWZpbmUgY2lwaGVyX2F1dGhfZW5jcnlwdCBtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQKKyNkZWZpbmUgY2lwaGVyX2Jhc2VfdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QKKyNkZWZpbmUgY2lwaGVyX2NoZWNrX3RhZyBtYmVkdGxzX2NpcGhlcl9jaGVja190YWcKKyNkZWZpbmUgY2lwaGVyX2NvbnRleHRfdCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QKKyNkZWZpbmUgY2lwaGVyX2NyeXB0IG1iZWR0bHNfY2lwaGVyX2NyeXB0CisjZGVmaW5lIGNpcGhlcl9kZWZpbml0aW9uX3QgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbl90CisjZGVmaW5lIGNpcGhlcl9kZWZpbml0aW9ucyBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9ucworI2RlZmluZSBjaXBoZXJfZmluaXNoIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaAorI2RlZmluZSBjaXBoZXJfZnJlZSBtYmVkdGxzX2NpcGhlcl9mcmVlCisjZGVmaW5lIGNpcGhlcl9mcmVlX2N0eCBtYmVkdGxzX2NpcGhlcl9mcmVlX2N0eAorI2RlZmluZSBjaXBoZXJfZ2V0X2Jsb2NrX3NpemUgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUKKyNkZWZpbmUgY2lwaGVyX2dldF9jaXBoZXJfbW9kZSBtYmVkdGxzX2NpcGhlcl9nZXRfY2lwaGVyX21vZGUKKyNkZWZpbmUgY2lwaGVyX2dldF9pdl9zaXplIG1iZWR0bHNfY2lwaGVyX2dldF9pdl9zaXplCisjZGVmaW5lIGNpcGhlcl9nZXRfa2V5X3NpemUgbWJlZHRsc19jaXBoZXJfZ2V0X2tleV9iaXRsZW4KKyNkZWZpbmUgY2lwaGVyX2dldF9uYW1lIG1iZWR0bHNfY2lwaGVyX2dldF9uYW1lCisjZGVmaW5lIGNpcGhlcl9nZXRfb3BlcmF0aW9uIG1iZWR0bHNfY2lwaGVyX2dldF9vcGVyYXRpb24KKyNkZWZpbmUgY2lwaGVyX2dldF90eXBlIG1iZWR0bHNfY2lwaGVyX2dldF90eXBlCisjZGVmaW5lIGNpcGhlcl9pZF90IG1iZWR0bHNfY2lwaGVyX2lkX3QKKyNkZWZpbmUgY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3N0cmluZworI2RlZmluZSBjaXBoZXJfaW5mb19mcm9tX3R5cGUgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUKKyNkZWZpbmUgY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3ZhbHVlcworI2RlZmluZSBjaXBoZXJfaW5mb190IG1iZWR0bHNfY2lwaGVyX2luZm9fdAorI2RlZmluZSBjaXBoZXJfaW5pdCBtYmVkdGxzX2NpcGhlcl9pbml0CisjZGVmaW5lIGNpcGhlcl9pbml0X2N0eCBtYmVkdGxzX2NpcGhlcl9zZXR1cAorI2RlZmluZSBjaXBoZXJfbGlzdCBtYmVkdGxzX2NpcGhlcl9saXN0CisjZGVmaW5lIGNpcGhlcl9tb2RlX3QgbWJlZHRsc19jaXBoZXJfbW9kZV90CisjZGVmaW5lIGNpcGhlcl9wYWRkaW5nX3QgbWJlZHRsc19jaXBoZXJfcGFkZGluZ190CisjZGVmaW5lIGNpcGhlcl9yZXNldCBtYmVkdGxzX2NpcGhlcl9yZXNldAorI2RlZmluZSBjaXBoZXJfc2VsZl90ZXN0IG1iZWR0bHNfY2lwaGVyX3NlbGZfdGVzdAorI2RlZmluZSBjaXBoZXJfc2V0X2l2IG1iZWR0bHNfY2lwaGVyX3NldF9pdgorI2RlZmluZSBjaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlCisjZGVmaW5lIGNpcGhlcl9zZXRrZXkgbWJlZHRsc19jaXBoZXJfc2V0a2V5CisjZGVmaW5lIGNpcGhlcl90eXBlX3QgbWJlZHRsc19jaXBoZXJfdHlwZV90CisjZGVmaW5lIGNpcGhlcl91cGRhdGUgbWJlZHRsc19jaXBoZXJfdXBkYXRlCisjZGVmaW5lIGNpcGhlcl91cGRhdGVfYWQgbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkCisjZGVmaW5lIGNpcGhlcl93cml0ZV90YWcgbWJlZHRsc19jaXBoZXJfd3JpdGVfdGFnCisjZGVmaW5lIGN0cl9kcmJnX2NvbnRleHQgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0CisjZGVmaW5lIGN0cl9kcmJnX2ZyZWUgbWJlZHRsc19jdHJfZHJiZ19mcmVlCisjZGVmaW5lIGN0cl9kcmJnX2luaXQgbWJlZHRsc19jdHJfZHJiZ19pbml0CisjZGVmaW5lIGN0cl9kcmJnX2luaXRfZW50cm9weV9sZW4gbWJlZHRsc19jdHJfZHJiZ19pbml0X2VudHJvcHlfbGVuCisjZGVmaW5lIGN0cl9kcmJnX3JhbmRvbSBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbQorI2RlZmluZSBjdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQgbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQKKyNkZWZpbmUgY3RyX2RyYmdfcmVzZWVkIG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkCisjZGVmaW5lIGN0cl9kcmJnX3NlbGZfdGVzdCBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdAorI2RlZmluZSBjdHJfZHJiZ19zZXRfZW50cm9weV9sZW4gbWJlZHRsc19jdHJfZHJiZ19zZXRfZW50cm9weV9sZW4KKyNkZWZpbmUgY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSBtYmVkdGxzX2N0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UKKyNkZWZpbmUgY3RyX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCBtYmVkdGxzX2N0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwKKyNkZWZpbmUgY3RyX2RyYmdfdXBkYXRlIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlCisjZGVmaW5lIGN0cl9kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUgbWJlZHRsc19jdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlCisjZGVmaW5lIGN0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZSBtYmVkdGxzX2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZQorI2RlZmluZSBkZWJ1Z19mbXQgbWJlZHRsc19kZWJ1Z19mbXQKKyNkZWZpbmUgZGVidWdfcHJpbnRfYnVmIG1iZWR0bHNfZGVidWdfcHJpbnRfYnVmCisjZGVmaW5lIGRlYnVnX3ByaW50X2NydCBtYmVkdGxzX2RlYnVnX3ByaW50X2NydAorI2RlZmluZSBkZWJ1Z19wcmludF9lY3AgbWJlZHRsc19kZWJ1Z19wcmludF9lY3AKKyNkZWZpbmUgZGVidWdfcHJpbnRfbXBpIG1iZWR0bHNfZGVidWdfcHJpbnRfbXBpCisjZGVmaW5lIGRlYnVnX3ByaW50X21zZyBtYmVkdGxzX2RlYnVnX3ByaW50X21zZworI2RlZmluZSBkZWJ1Z19wcmludF9yZXQgbWJlZHRsc19kZWJ1Z19wcmludF9yZXQKKyNkZWZpbmUgZGVidWdfc2V0X2xvZ19tb2RlIG1iZWR0bHNfZGVidWdfc2V0X2xvZ19tb2RlCisjZGVmaW5lIGRlYnVnX3NldF90aHJlc2hvbGQgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkCisjZGVmaW5lIGRlczNfY29udGV4dCBtYmVkdGxzX2RlczNfY29udGV4dAorI2RlZmluZSBkZXMzX2NyeXB0X2NiYyBtYmVkdGxzX2RlczNfY3J5cHRfY2JjCisjZGVmaW5lIGRlczNfY3J5cHRfZWNiIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IKKyNkZWZpbmUgZGVzM19mcmVlIG1iZWR0bHNfZGVzM19mcmVlCisjZGVmaW5lIGRlczNfaW5pdCBtYmVkdGxzX2RlczNfaW5pdAorI2RlZmluZSBkZXMzX3NldDJrZXlfZGVjIG1iZWR0bHNfZGVzM19zZXQya2V5X2RlYworI2RlZmluZSBkZXMzX3NldDJrZXlfZW5jIG1iZWR0bHNfZGVzM19zZXQya2V5X2VuYworI2RlZmluZSBkZXMzX3NldDNrZXlfZGVjIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYworI2RlZmluZSBkZXMzX3NldDNrZXlfZW5jIG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYworI2RlZmluZSBkZXNfY29udGV4dCBtYmVkdGxzX2Rlc19jb250ZXh0CisjZGVmaW5lIGRlc19jcnlwdF9jYmMgbWJlZHRsc19kZXNfY3J5cHRfY2JjCisjZGVmaW5lIGRlc19jcnlwdF9lY2IgbWJlZHRsc19kZXNfY3J5cHRfZWNiCisjZGVmaW5lIGRlc19mcmVlIG1iZWR0bHNfZGVzX2ZyZWUKKyNkZWZpbmUgZGVzX2luaXQgbWJlZHRsc19kZXNfaW5pdAorI2RlZmluZSBkZXNfa2V5X2NoZWNrX2tleV9wYXJpdHkgbWJlZHRsc19kZXNfa2V5X2NoZWNrX2tleV9wYXJpdHkKKyNkZWZpbmUgZGVzX2tleV9jaGVja193ZWFrIG1iZWR0bHNfZGVzX2tleV9jaGVja193ZWFrCisjZGVmaW5lIGRlc19rZXlfc2V0X3Bhcml0eSBtYmVkdGxzX2Rlc19rZXlfc2V0X3Bhcml0eQorI2RlZmluZSBkZXNfc2VsZl90ZXN0IG1iZWR0bHNfZGVzX3NlbGZfdGVzdAorI2RlZmluZSBkZXNfc2V0a2V5X2RlYyBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjCisjZGVmaW5lIGRlc19zZXRrZXlfZW5jIG1iZWR0bHNfZGVzX3NldGtleV9lbmMKKyNkZWZpbmUgZGhtX2NhbGNfc2VjcmV0IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0CisjZGVmaW5lIGRobV9jb250ZXh0IG1iZWR0bHNfZGhtX2NvbnRleHQKKyNkZWZpbmUgZGhtX2ZyZWUgbWJlZHRsc19kaG1fZnJlZQorI2RlZmluZSBkaG1faW5pdCBtYmVkdGxzX2RobV9pbml0CisjZGVmaW5lIGRobV9tYWtlX3BhcmFtcyBtYmVkdGxzX2RobV9tYWtlX3BhcmFtcworI2RlZmluZSBkaG1fbWFrZV9wdWJsaWMgbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMKKyNkZWZpbmUgZGhtX3BhcnNlX2RobSBtYmVkdGxzX2RobV9wYXJzZV9kaG0KKyNkZWZpbmUgZGhtX3BhcnNlX2RobWZpbGUgbWJlZHRsc19kaG1fcGFyc2VfZGhtZmlsZQorI2RlZmluZSBkaG1fcmVhZF9wYXJhbXMgbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMKKyNkZWZpbmUgZGhtX3JlYWRfcHVibGljIG1iZWR0bHNfZGhtX3JlYWRfcHVibGljCisjZGVmaW5lIGRobV9zZWxmX3Rlc3QgbWJlZHRsc19kaG1fc2VsZl90ZXN0CisjZGVmaW5lIGVjZGhfY2FsY19zZWNyZXQgbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0CisjZGVmaW5lIGVjZGhfY29tcHV0ZV9zaGFyZWQgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkCisjZGVmaW5lIGVjZGhfY29udGV4dCBtYmVkdGxzX2VjZGhfY29udGV4dAorI2RlZmluZSBlY2RoX2ZyZWUgbWJlZHRsc19lY2RoX2ZyZWUKKyNkZWZpbmUgZWNkaF9nZW5fcHVibGljIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljCisjZGVmaW5lIGVjZGhfZ2V0X3BhcmFtcyBtYmVkdGxzX2VjZGhfZ2V0X3BhcmFtcworI2RlZmluZSBlY2RoX2luaXQgbWJlZHRsc19lY2RoX2luaXQKKyNkZWZpbmUgZWNkaF9tYWtlX3BhcmFtcyBtYmVkdGxzX2VjZGhfbWFrZV9wYXJhbXMKKyNkZWZpbmUgZWNkaF9tYWtlX3B1YmxpYyBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMKKyNkZWZpbmUgZWNkaF9yZWFkX3BhcmFtcyBtYmVkdGxzX2VjZGhfcmVhZF9wYXJhbXMKKyNkZWZpbmUgZWNkaF9yZWFkX3B1YmxpYyBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMKKyNkZWZpbmUgZWNkaF9zZWxmX3Rlc3QgbWJlZHRsc19lY2RoX3NlbGZfdGVzdAorI2RlZmluZSBlY2RoX3NpZGUgbWJlZHRsc19lY2RoX3NpZGUKKyNkZWZpbmUgZWNkc2FfY29udGV4dCBtYmVkdGxzX2VjZHNhX2NvbnRleHQKKyNkZWZpbmUgZWNkc2FfZnJlZSBtYmVkdGxzX2VjZHNhX2ZyZWUKKyNkZWZpbmUgZWNkc2FfZnJvbV9rZXlwYWlyIG1iZWR0bHNfZWNkc2FfZnJvbV9rZXlwYWlyCisjZGVmaW5lIGVjZHNhX2dlbmtleSBtYmVkdGxzX2VjZHNhX2dlbmtleQorI2RlZmluZSBlY2RzYV9pbmZvIG1iZWR0bHNfZWNkc2FfaW5mbworI2RlZmluZSBlY2RzYV9pbml0IG1iZWR0bHNfZWNkc2FfaW5pdAorI2RlZmluZSBlY2RzYV9yZWFkX3NpZ25hdHVyZSBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlCisjZGVmaW5lIGVjZHNhX3NlbGZfdGVzdCBtYmVkdGxzX2VjZHNhX3NlbGZfdGVzdAorI2RlZmluZSBlY2RzYV9zaWduIG1iZWR0bHNfZWNkc2Ffc2lnbgorI2RlZmluZSBlY2RzYV9zaWduX2RldCBtYmVkdGxzX2VjZHNhX3NpZ25fZGV0CisjZGVmaW5lIGVjZHNhX3ZlcmlmeSBtYmVkdGxzX2VjZHNhX3ZlcmlmeQorI2RlZmluZSBlY2RzYV93cml0ZV9zaWduYXR1cmUgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUKKyNkZWZpbmUgZWNkc2Ffd3JpdGVfc2lnbmF0dXJlX2RldCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZV9kZXQKKyNkZWZpbmUgZWNrZXlfaW5mbyBtYmVkdGxzX2Vja2V5X2luZm8KKyNkZWZpbmUgZWNrZXlkaF9pbmZvIG1iZWR0bHNfZWNrZXlkaF9pbmZvCisjZGVmaW5lIGVjcF9hZGQgbWJlZHRsc19lY3BfYWRkCisjZGVmaW5lIGVjcF9jaGVja19wcml2a2V5IG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkKKyNkZWZpbmUgZWNwX2NoZWNrX3B1Yl9wcml2IG1iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2CisjZGVmaW5lIGVjcF9jaGVja19wdWJrZXkgbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5CisjZGVmaW5lIGVjcF9jb3B5IG1iZWR0bHNfZWNwX2NvcHkKKyNkZWZpbmUgZWNwX2N1cnZlX2luZm8gbWJlZHRsc19lY3BfY3VydmVfaW5mbworI2RlZmluZSBlY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkCisjZGVmaW5lIGVjcF9jdXJ2ZV9pbmZvX2Zyb21fbmFtZSBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fbmFtZQorI2RlZmluZSBlY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fdGxzX2lkCisjZGVmaW5lIGVjcF9jdXJ2ZV9saXN0IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QKKyNkZWZpbmUgZWNwX2dlbl9rZXkgbWJlZHRsc19lY3BfZ2VuX2tleQorI2RlZmluZSBlY3BfZ2VuX2tleXBhaXIgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIKKyNkZWZpbmUgZWNwX2dyb3VwIG1iZWR0bHNfZWNwX2dyb3VwCisjZGVmaW5lIGVjcF9ncm91cF9jb3B5IG1iZWR0bHNfZWNwX2dyb3VwX2NvcHkKKyNkZWZpbmUgZWNwX2dyb3VwX2ZyZWUgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZQorI2RlZmluZSBlY3BfZ3JvdXBfaWQgbWJlZHRsc19lY3BfZ3JvdXBfaWQKKyNkZWZpbmUgZWNwX2dyb3VwX2luaXQgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdAorI2RlZmluZSBlY3BfZ3JvdXBfcmVhZF9zdHJpbmcgbWJlZHRsc19lY3BfZ3JvdXBfcmVhZF9zdHJpbmcKKyNkZWZpbmUgZWNwX2dycF9pZF9saXN0IG1iZWR0bHNfZWNwX2dycF9pZF9saXN0CisjZGVmaW5lIGVjcF9pc196ZXJvIG1iZWR0bHNfZWNwX2lzX3plcm8KKyNkZWZpbmUgZWNwX2tleXBhaXIgbWJlZHRsc19lY3Bfa2V5cGFpcgorI2RlZmluZSBlY3Bfa2V5cGFpcl9mcmVlIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZQorI2RlZmluZSBlY3Bfa2V5cGFpcl9pbml0IG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdAorI2RlZmluZSBlY3BfbXVsIG1iZWR0bHNfZWNwX211bAorI2RlZmluZSBlY3BfcG9pbnQgbWJlZHRsc19lY3BfcG9pbnQKKyNkZWZpbmUgZWNwX3BvaW50X2ZyZWUgbWJlZHRsc19lY3BfcG9pbnRfZnJlZQorI2RlZmluZSBlY3BfcG9pbnRfaW5pdCBtYmVkdGxzX2VjcF9wb2ludF9pbml0CisjZGVmaW5lIGVjcF9wb2ludF9yZWFkX2JpbmFyeSBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeQorI2RlZmluZSBlY3BfcG9pbnRfcmVhZF9zdHJpbmcgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9zdHJpbmcKKyNkZWZpbmUgZWNwX3BvaW50X3dyaXRlX2JpbmFyeSBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkKKyNkZWZpbmUgZWNwX3NlbGZfdGVzdCBtYmVkdGxzX2VjcF9zZWxmX3Rlc3QKKyNkZWZpbmUgZWNwX3NldF96ZXJvIG1iZWR0bHNfZWNwX3NldF96ZXJvCisjZGVmaW5lIGVjcF9zdWIgbWJlZHRsc19lY3Bfc3ViCisjZGVmaW5lIGVjcF90bHNfcmVhZF9ncm91cCBtYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cAorI2RlZmluZSBlY3BfdGxzX3JlYWRfcG9pbnQgbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQKKyNkZWZpbmUgZWNwX3Rsc193cml0ZV9ncm91cCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfZ3JvdXAKKyNkZWZpbmUgZWNwX3Rsc193cml0ZV9wb2ludCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQKKyNkZWZpbmUgZWNwX3VzZV9rbm93bl9kcCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkCisjZGVmaW5lIGVudHJvcHlfYWRkX3NvdXJjZSBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZQorI2RlZmluZSBlbnRyb3B5X2NvbnRleHQgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQKKyNkZWZpbmUgZW50cm9weV9mcmVlIG1iZWR0bHNfZW50cm9weV9mcmVlCisjZGVmaW5lIGVudHJvcHlfZnVuYyBtYmVkdGxzX2VudHJvcHlfZnVuYworI2RlZmluZSBlbnRyb3B5X2dhdGhlciBtYmVkdGxzX2VudHJvcHlfZ2F0aGVyCisjZGVmaW5lIGVudHJvcHlfaW5pdCBtYmVkdGxzX2VudHJvcHlfaW5pdAorI2RlZmluZSBlbnRyb3B5X3NlbGZfdGVzdCBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0CisjZGVmaW5lIGVudHJvcHlfdXBkYXRlX21hbnVhbCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX21hbnVhbAorI2RlZmluZSBlbnRyb3B5X3VwZGF0ZV9zZWVkX2ZpbGUgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9zZWVkX2ZpbGUKKyNkZWZpbmUgZW50cm9weV93cml0ZV9zZWVkX2ZpbGUgbWJlZHRsc19lbnRyb3B5X3dyaXRlX3NlZWRfZmlsZQorI2RlZmluZSBlcnJvcl9zdHJlcnJvciBtYmVkdGxzX3N0cmVycm9yCisjZGVmaW5lIGZfc291cmNlX3B0ciBtYmVkdGxzX2VudHJvcHlfZl9zb3VyY2VfcHRyCisjZGVmaW5lIGdjbV9hdXRoX2RlY3J5cHQgbWJlZHRsc19nY21fYXV0aF9kZWNyeXB0CisjZGVmaW5lIGdjbV9jb250ZXh0IG1iZWR0bHNfZ2NtX2NvbnRleHQKKyNkZWZpbmUgZ2NtX2NyeXB0X2FuZF90YWcgbWJlZHRsc19nY21fY3J5cHRfYW5kX3RhZworI2RlZmluZSBnY21fZmluaXNoIG1iZWR0bHNfZ2NtX2ZpbmlzaAorI2RlZmluZSBnY21fZnJlZSBtYmVkdGxzX2djbV9mcmVlCisjZGVmaW5lIGdjbV9pbml0IG1iZWR0bHNfZ2NtX2luaXQKKyNkZWZpbmUgZ2NtX3NlbGZfdGVzdCBtYmVkdGxzX2djbV9zZWxmX3Rlc3QKKyNkZWZpbmUgZ2NtX3N0YXJ0cyBtYmVkdGxzX2djbV9zdGFydHMKKyNkZWZpbmUgZ2NtX3VwZGF0ZSBtYmVkdGxzX2djbV91cGRhdGUKKyNkZWZpbmUgZ2V0X3RpbWVyIG1iZWR0bHNfdGltaW5nX2dldF90aW1lcgorI2RlZmluZSBoYXJkY2xvY2sgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrCisjZGVmaW5lIGhhcmRjbG9ja19wb2xsIG1iZWR0bHNfaGFyZGNsb2NrX3BvbGwKKyNkZWZpbmUgaGF2ZWdlX2ZyZWUgbWJlZHRsc19oYXZlZ2VfZnJlZQorI2RlZmluZSBoYXZlZ2VfaW5pdCBtYmVkdGxzX2hhdmVnZV9pbml0CisjZGVmaW5lIGhhdmVnZV9wb2xsIG1iZWR0bHNfaGF2ZWdlX3BvbGwKKyNkZWZpbmUgaGF2ZWdlX3JhbmRvbSBtYmVkdGxzX2hhdmVnZV9yYW5kb20KKyNkZWZpbmUgaGF2ZWdlX3N0YXRlIG1iZWR0bHNfaGF2ZWdlX3N0YXRlCisjZGVmaW5lIGhtYWNfZHJiZ19jb250ZXh0IG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQKKyNkZWZpbmUgaG1hY19kcmJnX2ZyZWUgbWJlZHRsc19obWFjX2RyYmdfZnJlZQorI2RlZmluZSBobWFjX2RyYmdfaW5pdCBtYmVkdGxzX2htYWNfZHJiZ19pbml0CisjZGVmaW5lIGhtYWNfZHJiZ19pbml0X2J1ZiBtYmVkdGxzX2htYWNfZHJiZ19pbml0X2J1ZgorI2RlZmluZSBobWFjX2RyYmdfcmFuZG9tIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbQorI2RlZmluZSBobWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZAorI2RlZmluZSBobWFjX2RyYmdfcmVzZWVkIG1iZWR0bHNfaG1hY19kcmJnX3Jlc2VlZAorI2RlZmluZSBobWFjX2RyYmdfc2VsZl90ZXN0IG1iZWR0bHNfaG1hY19kcmJnX3NlbGZfdGVzdAorI2RlZmluZSBobWFjX2RyYmdfc2V0X2VudHJvcHlfbGVuIG1iZWR0bHNfaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbgorI2RlZmluZSBobWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlCisjZGVmaW5lIGhtYWNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsIG1iZWR0bHNfaG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwKKyNkZWZpbmUgaG1hY19kcmJnX3VwZGF0ZSBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGUKKyNkZWZpbmUgaG1hY19kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlX3NlZWRfZmlsZQorI2RlZmluZSBobWFjX2RyYmdfd3JpdGVfc2VlZF9maWxlIG1iZWR0bHNfaG1hY19kcmJnX3dyaXRlX3NlZWRfZmlsZQorI2RlZmluZSBocl90aW1lIG1iZWR0bHNfdGltaW5nX2hyX3RpbWUKKyNkZWZpbmUga2V5X2V4Y2hhbmdlX3R5cGVfdCBtYmVkdGxzX2tleV9leGNoYW5nZV90eXBlX3QKKyNkZWZpbmUgbWQgbWJlZHRsc19tZAorI2RlZmluZSBtZDIgbWJlZHRsc19tZDIKKyNkZWZpbmUgbWQyX2NvbnRleHQgbWJlZHRsc19tZDJfY29udGV4dAorI2RlZmluZSBtZDJfZmlsZSBtYmVkdGxzX21kMl9maWxlCisjZGVmaW5lIG1kMl9maW5pc2ggbWJlZHRsc19tZDJfZmluaXNoCisjZGVmaW5lIG1kMl9mcmVlIG1iZWR0bHNfbWQyX2ZyZWUKKyNkZWZpbmUgbWQyX2htYWMgbWJlZHRsc19tZDJfaG1hYworI2RlZmluZSBtZDJfaG1hY19maW5pc2ggbWJlZHRsc19tZDJfaG1hY19maW5pc2gKKyNkZWZpbmUgbWQyX2htYWNfcmVzZXQgbWJlZHRsc19tZDJfaG1hY19yZXNldAorI2RlZmluZSBtZDJfaG1hY19zdGFydHMgbWJlZHRsc19tZDJfaG1hY19zdGFydHMKKyNkZWZpbmUgbWQyX2htYWNfdXBkYXRlIG1iZWR0bHNfbWQyX2htYWNfdXBkYXRlCisjZGVmaW5lIG1kMl9pbmZvIG1iZWR0bHNfbWQyX2luZm8KKyNkZWZpbmUgbWQyX2luaXQgbWJlZHRsc19tZDJfaW5pdAorI2RlZmluZSBtZDJfcHJvY2VzcyBtYmVkdGxzX21kMl9wcm9jZXNzCisjZGVmaW5lIG1kMl9zZWxmX3Rlc3QgbWJlZHRsc19tZDJfc2VsZl90ZXN0CisjZGVmaW5lIG1kMl9zdGFydHMgbWJlZHRsc19tZDJfc3RhcnRzCisjZGVmaW5lIG1kMl91cGRhdGUgbWJlZHRsc19tZDJfdXBkYXRlCisjZGVmaW5lIG1kNCBtYmVkdGxzX21kNAorI2RlZmluZSBtZDRfY29udGV4dCBtYmVkdGxzX21kNF9jb250ZXh0CisjZGVmaW5lIG1kNF9maWxlIG1iZWR0bHNfbWQ0X2ZpbGUKKyNkZWZpbmUgbWQ0X2ZpbmlzaCBtYmVkdGxzX21kNF9maW5pc2gKKyNkZWZpbmUgbWQ0X2ZyZWUgbWJlZHRsc19tZDRfZnJlZQorI2RlZmluZSBtZDRfaG1hYyBtYmVkdGxzX21kNF9obWFjCisjZGVmaW5lIG1kNF9obWFjX2ZpbmlzaCBtYmVkdGxzX21kNF9obWFjX2ZpbmlzaAorI2RlZmluZSBtZDRfaG1hY19yZXNldCBtYmVkdGxzX21kNF9obWFjX3Jlc2V0CisjZGVmaW5lIG1kNF9obWFjX3N0YXJ0cyBtYmVkdGxzX21kNF9obWFjX3N0YXJ0cworI2RlZmluZSBtZDRfaG1hY191cGRhdGUgbWJlZHRsc19tZDRfaG1hY191cGRhdGUKKyNkZWZpbmUgbWQ0X2luZm8gbWJlZHRsc19tZDRfaW5mbworI2RlZmluZSBtZDRfaW5pdCBtYmVkdGxzX21kNF9pbml0CisjZGVmaW5lIG1kNF9wcm9jZXNzIG1iZWR0bHNfbWQ0X3Byb2Nlc3MKKyNkZWZpbmUgbWQ0X3NlbGZfdGVzdCBtYmVkdGxzX21kNF9zZWxmX3Rlc3QKKyNkZWZpbmUgbWQ0X3N0YXJ0cyBtYmVkdGxzX21kNF9zdGFydHMKKyNkZWZpbmUgbWQ0X3VwZGF0ZSBtYmVkdGxzX21kNF91cGRhdGUKKyNkZWZpbmUgbWQ1IG1iZWR0bHNfbWQ1CisjZGVmaW5lIG1kNV9jb250ZXh0IG1iZWR0bHNfbWQ1X2NvbnRleHQKKyNkZWZpbmUgbWQ1X2ZpbGUgbWJlZHRsc19tZDVfZmlsZQorI2RlZmluZSBtZDVfZmluaXNoIG1iZWR0bHNfbWQ1X2ZpbmlzaAorI2RlZmluZSBtZDVfZnJlZSBtYmVkdGxzX21kNV9mcmVlCisjZGVmaW5lIG1kNV9obWFjIG1iZWR0bHNfbWQ1X2htYWMKKyNkZWZpbmUgbWQ1X2htYWNfZmluaXNoIG1iZWR0bHNfbWQ1X2htYWNfZmluaXNoCisjZGVmaW5lIG1kNV9obWFjX3Jlc2V0IG1iZWR0bHNfbWQ1X2htYWNfcmVzZXQKKyNkZWZpbmUgbWQ1X2htYWNfc3RhcnRzIG1iZWR0bHNfbWQ1X2htYWNfc3RhcnRzCisjZGVmaW5lIG1kNV9obWFjX3VwZGF0ZSBtYmVkdGxzX21kNV9obWFjX3VwZGF0ZQorI2RlZmluZSBtZDVfaW5mbyBtYmVkdGxzX21kNV9pbmZvCisjZGVmaW5lIG1kNV9pbml0IG1iZWR0bHNfbWQ1X2luaXQKKyNkZWZpbmUgbWQ1X3Byb2Nlc3MgbWJlZHRsc19tZDVfcHJvY2VzcworI2RlZmluZSBtZDVfc2VsZl90ZXN0IG1iZWR0bHNfbWQ1X3NlbGZfdGVzdAorI2RlZmluZSBtZDVfc3RhcnRzIG1iZWR0bHNfbWQ1X3N0YXJ0cworI2RlZmluZSBtZDVfdXBkYXRlIG1iZWR0bHNfbWQ1X3VwZGF0ZQorI2RlZmluZSBtZF9jb250ZXh0X3QgbWJlZHRsc19tZF9jb250ZXh0X3QKKyNkZWZpbmUgbWRfZmlsZSBtYmVkdGxzX21kX2ZpbGUKKyNkZWZpbmUgbWRfZmluaXNoIG1iZWR0bHNfbWRfZmluaXNoCisjZGVmaW5lIG1kX2ZyZWUgbWJlZHRsc19tZF9mcmVlCisjZGVmaW5lIG1kX2ZyZWVfY3R4IG1iZWR0bHNfbWRfZnJlZV9jdHgKKyNkZWZpbmUgbWRfZ2V0X25hbWUgbWJlZHRsc19tZF9nZXRfbmFtZQorI2RlZmluZSBtZF9nZXRfc2l6ZSBtYmVkdGxzX21kX2dldF9zaXplCisjZGVmaW5lIG1kX2dldF90eXBlIG1iZWR0bHNfbWRfZ2V0X3R5cGUKKyNkZWZpbmUgbWRfaG1hYyBtYmVkdGxzX21kX2htYWMKKyNkZWZpbmUgbWRfaG1hY19maW5pc2ggbWJlZHRsc19tZF9obWFjX2ZpbmlzaAorI2RlZmluZSBtZF9obWFjX3Jlc2V0IG1iZWR0bHNfbWRfaG1hY19yZXNldAorI2RlZmluZSBtZF9obWFjX3N0YXJ0cyBtYmVkdGxzX21kX2htYWNfc3RhcnRzCisjZGVmaW5lIG1kX2htYWNfdXBkYXRlIG1iZWR0bHNfbWRfaG1hY191cGRhdGUKKyNkZWZpbmUgbWRfaW5mb19mcm9tX3N0cmluZyBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcKKyNkZWZpbmUgbWRfaW5mb19mcm9tX3R5cGUgbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZQorI2RlZmluZSBtZF9pbmZvX3QgbWJlZHRsc19tZF9pbmZvX3QKKyNkZWZpbmUgbWRfaW5pdCBtYmVkdGxzX21kX2luaXQKKyNkZWZpbmUgbWRfaW5pdF9jdHggbWJlZHRsc19tZF9pbml0X2N0eAorI2RlZmluZSBtZF9saXN0IG1iZWR0bHNfbWRfbGlzdAorI2RlZmluZSBtZF9wcm9jZXNzIG1iZWR0bHNfbWRfcHJvY2VzcworI2RlZmluZSBtZF9zdGFydHMgbWJlZHRsc19tZF9zdGFydHMKKyNkZWZpbmUgbWRfdHlwZV90IG1iZWR0bHNfbWRfdHlwZV90CisjZGVmaW5lIG1kX3VwZGF0ZSBtYmVkdGxzX21kX3VwZGF0ZQorI2RlZmluZSBtZW1vcnlfYnVmZmVyX2FsbG9jX2N1cl9nZXQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2N1cl9nZXQKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlCisjZGVmaW5lIG1lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdAorI2RlZmluZSBtZW1vcnlfYnVmZmVyX2FsbG9jX21heF9nZXQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9nZXQKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9yZXNldAorI2RlZmluZSBtZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc2VsZl90ZXN0CisjZGVmaW5lIG1lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zdGF0dXMKKyNkZWZpbmUgbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeQorI2RlZmluZSBtZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkgbWJlZHRsc19tZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkKKyNkZWZpbmUgbWVtb3J5X3NldF9vd24gbWJlZHRsc19tZW1vcnlfc2V0X293bgorI2RlZmluZSBtcGkgbWJlZHRsc19tcGkKKyNkZWZpbmUgbXBpX2FkZF9hYnMgbWJlZHRsc19tcGlfYWRkX2FicworI2RlZmluZSBtcGlfYWRkX2ludCBtYmVkdGxzX21waV9hZGRfaW50CisjZGVmaW5lIG1waV9hZGRfbXBpIG1iZWR0bHNfbXBpX2FkZF9tcGkKKyNkZWZpbmUgbXBpX2NtcF9hYnMgbWJlZHRsc19tcGlfY21wX2FicworI2RlZmluZSBtcGlfY21wX2ludCBtYmVkdGxzX21waV9jbXBfaW50CisjZGVmaW5lIG1waV9jbXBfbXBpIG1iZWR0bHNfbXBpX2NtcF9tcGkKKyNkZWZpbmUgbXBpX2NvcHkgbWJlZHRsc19tcGlfY29weQorI2RlZmluZSBtcGlfZGl2X2ludCBtYmVkdGxzX21waV9kaXZfaW50CisjZGVmaW5lIG1waV9kaXZfbXBpIG1iZWR0bHNfbXBpX2Rpdl9tcGkKKyNkZWZpbmUgbXBpX2V4cF9tb2QgbWJlZHRsc19tcGlfZXhwX21vZAorI2RlZmluZSBtcGlfZmlsbF9yYW5kb20gbWJlZHRsc19tcGlfZmlsbF9yYW5kb20KKyNkZWZpbmUgbXBpX2ZyZWUgbWJlZHRsc19tcGlfZnJlZQorI2RlZmluZSBtcGlfZ2NkIG1iZWR0bHNfbXBpX2djZAorI2RlZmluZSBtcGlfZ2VuX3ByaW1lIG1iZWR0bHNfbXBpX2dlbl9wcmltZQorI2RlZmluZSBtcGlfZ2V0X2JpdCBtYmVkdGxzX21waV9nZXRfYml0CisjZGVmaW5lIG1waV9ncm93IG1iZWR0bHNfbXBpX2dyb3cKKyNkZWZpbmUgbXBpX2luaXQgbWJlZHRsc19tcGlfaW5pdAorI2RlZmluZSBtcGlfaW52X21vZCBtYmVkdGxzX21waV9pbnZfbW9kCisjZGVmaW5lIG1waV9pc19wcmltZSBtYmVkdGxzX21waV9pc19wcmltZQorI2RlZmluZSBtcGlfbHNiIG1iZWR0bHNfbXBpX2xzYgorI2RlZmluZSBtcGlfbHNldCBtYmVkdGxzX21waV9sc2V0CisjZGVmaW5lIG1waV9tb2RfaW50IG1iZWR0bHNfbXBpX21vZF9pbnQKKyNkZWZpbmUgbXBpX21vZF9tcGkgbWJlZHRsc19tcGlfbW9kX21waQorI2RlZmluZSBtcGlfbXNiIG1iZWR0bHNfbXBpX2JpdGxlbgorI2RlZmluZSBtcGlfbXVsX2ludCBtYmVkdGxzX21waV9tdWxfaW50CisjZGVmaW5lIG1waV9tdWxfbXBpIG1iZWR0bHNfbXBpX211bF9tcGkKKyNkZWZpbmUgbXBpX3JlYWRfYmluYXJ5IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5CisjZGVmaW5lIG1waV9yZWFkX2ZpbGUgbWJlZHRsc19tcGlfcmVhZF9maWxlCisjZGVmaW5lIG1waV9yZWFkX3N0cmluZyBtYmVkdGxzX21waV9yZWFkX3N0cmluZworI2RlZmluZSBtcGlfc2FmZV9jb25kX2Fzc2lnbiBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduCisjZGVmaW5lIG1waV9zYWZlX2NvbmRfc3dhcCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcAorI2RlZmluZSBtcGlfc2VsZl90ZXN0IG1iZWR0bHNfbXBpX3NlbGZfdGVzdAorI2RlZmluZSBtcGlfc2V0X2JpdCBtYmVkdGxzX21waV9zZXRfYml0CisjZGVmaW5lIG1waV9zaGlmdF9sIG1iZWR0bHNfbXBpX3NoaWZ0X2wKKyNkZWZpbmUgbXBpX3NoaWZ0X3IgbWJlZHRsc19tcGlfc2hpZnRfcgorI2RlZmluZSBtcGlfc2hyaW5rIG1iZWR0bHNfbXBpX3NocmluaworI2RlZmluZSBtcGlfc2l6ZSBtYmVkdGxzX21waV9zaXplCisjZGVmaW5lIG1waV9zdWJfYWJzIG1iZWR0bHNfbXBpX3N1Yl9hYnMKKyNkZWZpbmUgbXBpX3N1Yl9pbnQgbWJlZHRsc19tcGlfc3ViX2ludAorI2RlZmluZSBtcGlfc3ViX21waSBtYmVkdGxzX21waV9zdWJfbXBpCisjZGVmaW5lIG1waV9zd2FwIG1iZWR0bHNfbXBpX3N3YXAKKyNkZWZpbmUgbXBpX3dyaXRlX2JpbmFyeSBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkKKyNkZWZpbmUgbXBpX3dyaXRlX2ZpbGUgbWJlZHRsc19tcGlfd3JpdGVfZmlsZQorI2RlZmluZSBtcGlfd3JpdGVfc3RyaW5nIG1iZWR0bHNfbXBpX3dyaXRlX3N0cmluZworI2RlZmluZSBuZXRfYWNjZXB0IG1iZWR0bHNfbmV0X2FjY2VwdAorI2RlZmluZSBuZXRfYmluZCBtYmVkdGxzX25ldF9iaW5kCisjZGVmaW5lIG5ldF9jbG9zZSBtYmVkdGxzX25ldF9mcmVlCisjZGVmaW5lIG5ldF9jb25uZWN0IG1iZWR0bHNfbmV0X2Nvbm5lY3QKKyNkZWZpbmUgbmV0X3JlY3YgbWJlZHRsc19uZXRfcmVjdgorI2RlZmluZSBuZXRfcmVjdl90aW1lb3V0IG1iZWR0bHNfbmV0X3JlY3ZfdGltZW91dAorI2RlZmluZSBuZXRfc2VuZCBtYmVkdGxzX25ldF9zZW5kCisjZGVmaW5lIG5ldF9zZXRfYmxvY2sgbWJlZHRsc19uZXRfc2V0X2Jsb2NrCisjZGVmaW5lIG5ldF9zZXRfbm9uYmxvY2sgbWJlZHRsc19uZXRfc2V0X25vbmJsb2NrCisjZGVmaW5lIG5ldF91c2xlZXAgbWJlZHRsc19uZXRfdXNsZWVwCisjZGVmaW5lIG9pZF9kZXNjcmlwdG9yX3QgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90CisjZGVmaW5lIG9pZF9nZXRfYXR0cl9zaG9ydF9uYW1lIG1iZWR0bHNfb2lkX2dldF9hdHRyX3Nob3J0X25hbWUKKyNkZWZpbmUgb2lkX2dldF9jaXBoZXJfYWxnIG1iZWR0bHNfb2lkX2dldF9jaXBoZXJfYWxnCisjZGVmaW5lIG9pZF9nZXRfZWNfZ3JwIG1iZWR0bHNfb2lkX2dldF9lY19ncnAKKyNkZWZpbmUgb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UgbWJlZHRsc19vaWRfZ2V0X2V4dGVuZGVkX2tleV91c2FnZQorI2RlZmluZSBvaWRfZ2V0X21kX2FsZyBtYmVkdGxzX29pZF9nZXRfbWRfYWxnCisjZGVmaW5lIG9pZF9nZXRfbnVtZXJpY19zdHJpbmcgbWJlZHRsc19vaWRfZ2V0X251bWVyaWNfc3RyaW5nCisjZGVmaW5lIG9pZF9nZXRfb2lkX2J5X2VjX2dycCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X2VjX2dycAorI2RlZmluZSBvaWRfZ2V0X29pZF9ieV9tZCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X21kCisjZGVmaW5lIG9pZF9nZXRfb2lkX2J5X3BrX2FsZyBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3BrX2FsZworI2RlZmluZSBvaWRfZ2V0X29pZF9ieV9zaWdfYWxnIG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfc2lnX2FsZworI2RlZmluZSBvaWRfZ2V0X3BrX2FsZyBtYmVkdGxzX29pZF9nZXRfcGtfYWxnCisjZGVmaW5lIG9pZF9nZXRfcGtjczEyX3BiZV9hbGcgbWJlZHRsc19vaWRfZ2V0X3BrY3MxMl9wYmVfYWxnCisjZGVmaW5lIG9pZF9nZXRfc2lnX2FsZyBtYmVkdGxzX29pZF9nZXRfc2lnX2FsZworI2RlZmluZSBvaWRfZ2V0X3NpZ19hbGdfZGVzYyBtYmVkdGxzX29pZF9nZXRfc2lnX2FsZ19kZXNjCisjZGVmaW5lIG9pZF9nZXRfeDUwOV9leHRfdHlwZSBtYmVkdGxzX29pZF9nZXRfeDUwOV9leHRfdHlwZQorI2RlZmluZSBvcGVyYXRpb25fdCBtYmVkdGxzX29wZXJhdGlvbl90CisjZGVmaW5lIHBhZGxvY2tfc3VwcG9ydHMgbWJlZHRsc19wYWRsb2NrX2hhc19zdXBwb3J0CisjZGVmaW5lIHBhZGxvY2tfeGNyeXB0Y2JjIG1iZWR0bHNfcGFkbG9ja194Y3J5cHRjYmMKKyNkZWZpbmUgcGFkbG9ja194Y3J5cHRlY2IgbWJlZHRsc19wYWRsb2NrX3hjcnlwdGVjYgorI2RlZmluZSBwYmtkZjJfaG1hYyBtYmVkdGxzX3Bia2RmMl9obWFjCisjZGVmaW5lIHBia2RmMl9zZWxmX3Rlc3QgbWJlZHRsc19wYmtkZjJfc2VsZl90ZXN0CisjZGVmaW5lIHBlbV9jb250ZXh0IG1iZWR0bHNfcGVtX2NvbnRleHQKKyNkZWZpbmUgcGVtX2ZyZWUgbWJlZHRsc19wZW1fZnJlZQorI2RlZmluZSBwZW1faW5pdCBtYmVkdGxzX3BlbV9pbml0CisjZGVmaW5lIHBlbV9yZWFkX2J1ZmZlciBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcgorI2RlZmluZSBwZW1fd3JpdGVfYnVmZmVyIG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlcgorI2RlZmluZSBwa19jYW5fZG8gbWJlZHRsc19wa19jYW5fZG8KKyNkZWZpbmUgcGtfY2hlY2tfcGFpciBtYmVkdGxzX3BrX2NoZWNrX3BhaXIKKyNkZWZpbmUgcGtfY29udGV4dCBtYmVkdGxzX3BrX2NvbnRleHQKKyNkZWZpbmUgcGtfZGVidWcgbWJlZHRsc19wa19kZWJ1ZworI2RlZmluZSBwa19kZWJ1Z19pdGVtIG1iZWR0bHNfcGtfZGVidWdfaXRlbQorI2RlZmluZSBwa19kZWJ1Z190eXBlIG1iZWR0bHNfcGtfZGVidWdfdHlwZQorI2RlZmluZSBwa19kZWNyeXB0IG1iZWR0bHNfcGtfZGVjcnlwdAorI2RlZmluZSBwa19lYyBtYmVkdGxzX3BrX2VjCisjZGVmaW5lIHBrX2VuY3J5cHQgbWJlZHRsc19wa19lbmNyeXB0CisjZGVmaW5lIHBrX2ZyZWUgbWJlZHRsc19wa19mcmVlCisjZGVmaW5lIHBrX2dldF9sZW4gbWJlZHRsc19wa19nZXRfbGVuCisjZGVmaW5lIHBrX2dldF9uYW1lIG1iZWR0bHNfcGtfZ2V0X25hbWUKKyNkZWZpbmUgcGtfZ2V0X3NpemUgbWJlZHRsc19wa19nZXRfYml0bGVuCisjZGVmaW5lIHBrX2dldF90eXBlIG1iZWR0bHNfcGtfZ2V0X3R5cGUKKyNkZWZpbmUgcGtfaW5mb19mcm9tX3R5cGUgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZQorI2RlZmluZSBwa19pbmZvX3QgbWJlZHRsc19wa19pbmZvX3QKKyNkZWZpbmUgcGtfaW5pdCBtYmVkdGxzX3BrX2luaXQKKyNkZWZpbmUgcGtfaW5pdF9jdHggbWJlZHRsc19wa19zZXR1cAorI2RlZmluZSBwa19pbml0X2N0eF9yc2FfYWx0IG1iZWR0bHNfcGtfc2V0dXBfcnNhX2FsdAorI2RlZmluZSBwa19sb2FkX2ZpbGUgbWJlZHRsc19wa19sb2FkX2ZpbGUKKyNkZWZpbmUgcGtfcGFyc2Vfa2V5IG1iZWR0bHNfcGtfcGFyc2Vfa2V5CisjZGVmaW5lIHBrX3BhcnNlX2tleWZpbGUgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlCisjZGVmaW5lIHBrX3BhcnNlX3B1YmxpY19rZXkgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5CisjZGVmaW5lIHBrX3BhcnNlX3B1YmxpY19rZXlmaWxlIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUKKyNkZWZpbmUgcGtfcGFyc2Vfc3VicHVia2V5IG1iZWR0bHNfcGtfcGFyc2Vfc3VicHVia2V5CisjZGVmaW5lIHBrX3JzYSBtYmVkdGxzX3BrX3JzYQorI2RlZmluZSBwa19yc2FfYWx0X2RlY3J5cHRfZnVuYyBtYmVkdGxzX3BrX3JzYV9hbHRfZGVjcnlwdF9mdW5jCisjZGVmaW5lIHBrX3JzYV9hbHRfa2V5X2xlbl9mdW5jIG1iZWR0bHNfcGtfcnNhX2FsdF9rZXlfbGVuX2Z1bmMKKyNkZWZpbmUgcGtfcnNhX2FsdF9zaWduX2Z1bmMgbWJlZHRsc19wa19yc2FfYWx0X3NpZ25fZnVuYworI2RlZmluZSBwa19yc2Fzc2FfcHNzX29wdGlvbnMgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMKKyNkZWZpbmUgcGtfc2lnbiBtYmVkdGxzX3BrX3NpZ24KKyNkZWZpbmUgcGtfdHlwZV90IG1iZWR0bHNfcGtfdHlwZV90CisjZGVmaW5lIHBrX3ZlcmlmeSBtYmVkdGxzX3BrX3ZlcmlmeQorI2RlZmluZSBwa192ZXJpZnlfZXh0IG1iZWR0bHNfcGtfdmVyaWZ5X2V4dAorI2RlZmluZSBwa193cml0ZV9rZXlfZGVyIG1iZWR0bHNfcGtfd3JpdGVfa2V5X2RlcgorI2RlZmluZSBwa193cml0ZV9rZXlfcGVtIG1iZWR0bHNfcGtfd3JpdGVfa2V5X3BlbQorI2RlZmluZSBwa193cml0ZV9wdWJrZXkgbWJlZHRsc19wa193cml0ZV9wdWJrZXkKKyNkZWZpbmUgcGtfd3JpdGVfcHVia2V5X2RlciBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9kZXIKKyNkZWZpbmUgcGtfd3JpdGVfcHVia2V5X3BlbSBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9wZW0KKyNkZWZpbmUgcGtjczExX2NvbnRleHQgbWJlZHRsc19wa2NzMTFfY29udGV4dAorI2RlZmluZSBwa2NzMTFfZGVjcnlwdCBtYmVkdGxzX3BrY3MxMV9kZWNyeXB0CisjZGVmaW5lIHBrY3MxMV9wcml2X2tleV9mcmVlIG1iZWR0bHNfcGtjczExX3ByaXZfa2V5X2ZyZWUKKyNkZWZpbmUgcGtjczExX3ByaXZfa2V5X2luaXQgbWJlZHRsc19wa2NzMTFfcHJpdl9rZXlfYmluZAorI2RlZmluZSBwa2NzMTFfc2lnbiBtYmVkdGxzX3BrY3MxMV9zaWduCisjZGVmaW5lIHBrY3MxMV94NTA5X2NlcnRfaW5pdCBtYmVkdGxzX3BrY3MxMV94NTA5X2NlcnRfYmluZAorI2RlZmluZSBwa2NzMTJfZGVyaXZhdGlvbiBtYmVkdGxzX3BrY3MxMl9kZXJpdmF0aW9uCisjZGVmaW5lIHBrY3MxMl9wYmUgbWJlZHRsc19wa2NzMTJfcGJlCisjZGVmaW5lIHBrY3MxMl9wYmVfc2hhMV9yYzRfMTI4IG1iZWR0bHNfcGtjczEyX3BiZV9zaGExX3JjNF8xMjgKKyNkZWZpbmUgcGtjczVfcGJlczIgbWJlZHRsc19wa2NzNV9wYmVzMgorI2RlZmluZSBwa2NzNV9wYmtkZjJfaG1hYyBtYmVkdGxzX3BrY3M1X3Bia2RmMl9obWFjCisjZGVmaW5lIHBrY3M1X3NlbGZfdGVzdCBtYmVkdGxzX3BrY3M1X3NlbGZfdGVzdAorI2RlZmluZSBwbGF0Zm9ybV9lbnRyb3B5X3BvbGwgbWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwKKyNkZWZpbmUgcGxhdGZvcm1fc2V0X2V4aXQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZXhpdAorI2RlZmluZSBwbGF0Zm9ybV9zZXRfZnByaW50ZiBtYmVkdGxzX3BsYXRmb3JtX3NldF9mcHJpbnRmCisjZGVmaW5lIHBsYXRmb3JtX3NldF9tYWxsb2NfZnJlZSBtYmVkdGxzX3BsYXRmb3JtX3NldF9tYWxsb2NfZnJlZQorI2RlZmluZSBwbGF0Zm9ybV9zZXRfcHJpbnRmIG1iZWR0bHNfcGxhdGZvcm1fc2V0X3ByaW50ZgorI2RlZmluZSBwbGF0Zm9ybV9zZXRfc25wcmludGYgbWJlZHRsc19wbGF0Zm9ybV9zZXRfc25wcmludGYKKyNkZWZpbmUgcG9sYXJzc2xfZXhpdCBtYmVkdGxzX2V4aXQKKyNkZWZpbmUgcG9sYXJzc2xfZnByaW50ZiBtYmVkdGxzX2ZwcmludGYKKyNkZWZpbmUgcG9sYXJzc2xfZnJlZSBtYmVkdGxzX2ZyZWUKKyNkZWZpbmUgcG9sYXJzc2xfbWFsbG9jIG1iZWR0bHNfbWFsbG9jCisjZGVmaW5lIHBvbGFyc3NsX211dGV4X2ZyZWUgbWJlZHRsc19tdXRleF9mcmVlCisjZGVmaW5lIHBvbGFyc3NsX211dGV4X2luaXQgbWJlZHRsc19tdXRleF9pbml0CisjZGVmaW5lIHBvbGFyc3NsX211dGV4X2xvY2sgbWJlZHRsc19tdXRleF9sb2NrCisjZGVmaW5lIHBvbGFyc3NsX211dGV4X3VubG9jayBtYmVkdGxzX211dGV4X3VubG9jaworI2RlZmluZSBwb2xhcnNzbF9wcmludGYgbWJlZHRsc19wcmludGYKKyNkZWZpbmUgcG9sYXJzc2xfc25wcmludGYgbWJlZHRsc19zbnByaW50ZgorI2RlZmluZSBwb2xhcnNzbF9zdHJlcnJvciBtYmVkdGxzX3N0cmVycm9yCisjZGVmaW5lIHJpcGVtZDE2MCBtYmVkdGxzX3JpcGVtZDE2MAorI2RlZmluZSByaXBlbWQxNjBfY29udGV4dCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0CisjZGVmaW5lIHJpcGVtZDE2MF9maWxlIG1iZWR0bHNfcmlwZW1kMTYwX2ZpbGUKKyNkZWZpbmUgcmlwZW1kMTYwX2ZpbmlzaCBtYmVkdGxzX3JpcGVtZDE2MF9maW5pc2gKKyNkZWZpbmUgcmlwZW1kMTYwX2ZyZWUgbWJlZHRsc19yaXBlbWQxNjBfZnJlZQorI2RlZmluZSByaXBlbWQxNjBfaG1hYyBtYmVkdGxzX3JpcGVtZDE2MF9obWFjCisjZGVmaW5lIHJpcGVtZDE2MF9obWFjX2ZpbmlzaCBtYmVkdGxzX3JpcGVtZDE2MF9obWFjX2ZpbmlzaAorI2RlZmluZSByaXBlbWQxNjBfaG1hY19yZXNldCBtYmVkdGxzX3JpcGVtZDE2MF9obWFjX3Jlc2V0CisjZGVmaW5lIHJpcGVtZDE2MF9obWFjX3N0YXJ0cyBtYmVkdGxzX3JpcGVtZDE2MF9obWFjX3N0YXJ0cworI2RlZmluZSByaXBlbWQxNjBfaG1hY191cGRhdGUgbWJlZHRsc19yaXBlbWQxNjBfaG1hY191cGRhdGUKKyNkZWZpbmUgcmlwZW1kMTYwX2luZm8gbWJlZHRsc19yaXBlbWQxNjBfaW5mbworI2RlZmluZSByaXBlbWQxNjBfaW5pdCBtYmVkdGxzX3JpcGVtZDE2MF9pbml0CisjZGVmaW5lIHJpcGVtZDE2MF9wcm9jZXNzIG1iZWR0bHNfcmlwZW1kMTYwX3Byb2Nlc3MKKyNkZWZpbmUgcmlwZW1kMTYwX3NlbGZfdGVzdCBtYmVkdGxzX3JpcGVtZDE2MF9zZWxmX3Rlc3QKKyNkZWZpbmUgcmlwZW1kMTYwX3N0YXJ0cyBtYmVkdGxzX3JpcGVtZDE2MF9zdGFydHMKKyNkZWZpbmUgcmlwZW1kMTYwX3VwZGF0ZSBtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGUKKyNkZWZpbmUgcnNhX2FsdF9jb250ZXh0IG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0CisjZGVmaW5lIHJzYV9hbHRfaW5mbyBtYmVkdGxzX3JzYV9hbHRfaW5mbworI2RlZmluZSByc2FfY2hlY2tfcHJpdmtleSBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5CisjZGVmaW5lIHJzYV9jaGVja19wdWJfcHJpdiBtYmVkdGxzX3JzYV9jaGVja19wdWJfcHJpdgorI2RlZmluZSByc2FfY2hlY2tfcHVia2V5IG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleQorI2RlZmluZSByc2FfY29udGV4dCBtYmVkdGxzX3JzYV9jb250ZXh0CisjZGVmaW5lIHJzYV9jb3B5IG1iZWR0bHNfcnNhX2NvcHkKKyNkZWZpbmUgcnNhX2RlY3J5cHRfZnVuYyBtYmVkdGxzX3JzYV9kZWNyeXB0X2Z1bmMKKyNkZWZpbmUgcnNhX2ZyZWUgbWJlZHRsc19yc2FfZnJlZQorI2RlZmluZSByc2FfZ2VuX2tleSBtYmVkdGxzX3JzYV9nZW5fa2V5CisjZGVmaW5lIHJzYV9pbmZvIG1iZWR0bHNfcnNhX2luZm8KKyNkZWZpbmUgcnNhX2luaXQgbWJlZHRsc19yc2FfaW5pdAorI2RlZmluZSByc2Ffa2V5X2xlbl9mdW5jIG1iZWR0bHNfcnNhX2tleV9sZW5fZnVuYworI2RlZmluZSByc2FfcGtjczFfZGVjcnlwdCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0CisjZGVmaW5lIHJzYV9wa2NzMV9lbmNyeXB0IG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQKKyNkZWZpbmUgcnNhX3BrY3MxX3NpZ24gbWJlZHRsc19yc2FfcGtjczFfc2lnbgorI2RlZmluZSByc2FfcGtjczFfdmVyaWZ5IG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeQorI2RlZmluZSByc2FfcHJpdmF0ZSBtYmVkdGxzX3JzYV9wcml2YXRlCisjZGVmaW5lIHJzYV9wdWJsaWMgbWJlZHRsc19yc2FfcHVibGljCisjZGVmaW5lIHJzYV9yc2Flc19vYWVwX2RlY3J5cHQgbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9kZWNyeXB0CisjZGVmaW5lIHJzYV9yc2Flc19vYWVwX2VuY3J5cHQgbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9lbmNyeXB0CisjZGVmaW5lIHJzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdCBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdAorI2RlZmluZSByc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQKKyNkZWZpbmUgcnNhX3JzYXNzYV9wa2NzMV92MTVfc2lnbiBtYmVkdGxzX3JzYV9yc2Fzc2FfcGtjczFfdjE1X3NpZ24KKyNkZWZpbmUgcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5IG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5CisjZGVmaW5lIHJzYV9yc2Fzc2FfcHNzX3NpZ24gbWJlZHRsc19yc2FfcnNhc3NhX3Bzc19zaWduCisjZGVmaW5lIHJzYV9yc2Fzc2FfcHNzX3ZlcmlmeSBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeQorI2RlZmluZSByc2FfcnNhc3NhX3Bzc192ZXJpZnlfZXh0IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dAorI2RlZmluZSByc2Ffc2VsZl90ZXN0IG1iZWR0bHNfcnNhX3NlbGZfdGVzdAorI2RlZmluZSByc2Ffc2V0X3BhZGRpbmcgbWJlZHRsc19yc2Ffc2V0X3BhZGRpbmcKKyNkZWZpbmUgcnNhX3NpZ25fZnVuYyBtYmVkdGxzX3JzYV9zaWduX2Z1bmMKKyNkZWZpbmUgc2FmZXJfbWVtY21wIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcAorI2RlZmluZSBzZXRfYWxhcm0gbWJlZHRsc19zZXRfYWxhcm0KKyNkZWZpbmUgc2hhMSBtYmVkdGxzX3NoYTEKKyNkZWZpbmUgc2hhMV9jb250ZXh0IG1iZWR0bHNfc2hhMV9jb250ZXh0CisjZGVmaW5lIHNoYTFfZmlsZSBtYmVkdGxzX3NoYTFfZmlsZQorI2RlZmluZSBzaGExX2ZpbmlzaCBtYmVkdGxzX3NoYTFfZmluaXNoCisjZGVmaW5lIHNoYTFfZnJlZSBtYmVkdGxzX3NoYTFfZnJlZQorI2RlZmluZSBzaGExX2htYWMgbWJlZHRsc19zaGExX2htYWMKKyNkZWZpbmUgc2hhMV9obWFjX2ZpbmlzaCBtYmVkdGxzX3NoYTFfaG1hY19maW5pc2gKKyNkZWZpbmUgc2hhMV9obWFjX3Jlc2V0IG1iZWR0bHNfc2hhMV9obWFjX3Jlc2V0CisjZGVmaW5lIHNoYTFfaG1hY19zdGFydHMgbWJlZHRsc19zaGExX2htYWNfc3RhcnRzCisjZGVmaW5lIHNoYTFfaG1hY191cGRhdGUgbWJlZHRsc19zaGExX2htYWNfdXBkYXRlCisjZGVmaW5lIHNoYTFfaW5mbyBtYmVkdGxzX3NoYTFfaW5mbworI2RlZmluZSBzaGExX2luaXQgbWJlZHRsc19zaGExX2luaXQKKyNkZWZpbmUgc2hhMV9wcm9jZXNzIG1iZWR0bHNfc2hhMV9wcm9jZXNzCisjZGVmaW5lIHNoYTFfc2VsZl90ZXN0IG1iZWR0bHNfc2hhMV9zZWxmX3Rlc3QKKyNkZWZpbmUgc2hhMV9zdGFydHMgbWJlZHRsc19zaGExX3N0YXJ0cworI2RlZmluZSBzaGExX3VwZGF0ZSBtYmVkdGxzX3NoYTFfdXBkYXRlCisjZGVmaW5lIHNoYTIyNF9pbmZvIG1iZWR0bHNfc2hhMjI0X2luZm8KKyNkZWZpbmUgc2hhMjU2IG1iZWR0bHNfc2hhMjU2CisjZGVmaW5lIHNoYTI1Nl9jb250ZXh0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQKKyNkZWZpbmUgc2hhMjU2X2ZpbGUgbWJlZHRsc19zaGEyNTZfZmlsZQorI2RlZmluZSBzaGEyNTZfZmluaXNoIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaAorI2RlZmluZSBzaGEyNTZfZnJlZSBtYmVkdGxzX3NoYTI1Nl9mcmVlCisjZGVmaW5lIHNoYTI1Nl9obWFjIG1iZWR0bHNfc2hhMjU2X2htYWMKKyNkZWZpbmUgc2hhMjU2X2htYWNfZmluaXNoIG1iZWR0bHNfc2hhMjU2X2htYWNfZmluaXNoCisjZGVmaW5lIHNoYTI1Nl9obWFjX3Jlc2V0IG1iZWR0bHNfc2hhMjU2X2htYWNfcmVzZXQKKyNkZWZpbmUgc2hhMjU2X2htYWNfc3RhcnRzIG1iZWR0bHNfc2hhMjU2X2htYWNfc3RhcnRzCisjZGVmaW5lIHNoYTI1Nl9obWFjX3VwZGF0ZSBtYmVkdGxzX3NoYTI1Nl9obWFjX3VwZGF0ZQorI2RlZmluZSBzaGEyNTZfaW5mbyBtYmVkdGxzX3NoYTI1Nl9pbmZvCisjZGVmaW5lIHNoYTI1Nl9pbml0IG1iZWR0bHNfc2hhMjU2X2luaXQKKyNkZWZpbmUgc2hhMjU2X3Byb2Nlc3MgbWJlZHRsc19zaGEyNTZfcHJvY2VzcworI2RlZmluZSBzaGEyNTZfc2VsZl90ZXN0IG1iZWR0bHNfc2hhMjU2X3NlbGZfdGVzdAorI2RlZmluZSBzaGEyNTZfc3RhcnRzIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cworI2RlZmluZSBzaGEyNTZfdXBkYXRlIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZQorI2RlZmluZSBzaGEzODRfaW5mbyBtYmVkdGxzX3NoYTM4NF9pbmZvCisjZGVmaW5lIHNoYTUxMiBtYmVkdGxzX3NoYTUxMgorI2RlZmluZSBzaGE1MTJfY29udGV4dCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0CisjZGVmaW5lIHNoYTUxMl9maWxlIG1iZWR0bHNfc2hhNTEyX2ZpbGUKKyNkZWZpbmUgc2hhNTEyX2ZpbmlzaCBtYmVkdGxzX3NoYTUxMl9maW5pc2gKKyNkZWZpbmUgc2hhNTEyX2ZyZWUgbWJlZHRsc19zaGE1MTJfZnJlZQorI2RlZmluZSBzaGE1MTJfaG1hYyBtYmVkdGxzX3NoYTUxMl9obWFjCisjZGVmaW5lIHNoYTUxMl9obWFjX2ZpbmlzaCBtYmVkdGxzX3NoYTUxMl9obWFjX2ZpbmlzaAorI2RlZmluZSBzaGE1MTJfaG1hY19yZXNldCBtYmVkdGxzX3NoYTUxMl9obWFjX3Jlc2V0CisjZGVmaW5lIHNoYTUxMl9obWFjX3N0YXJ0cyBtYmVkdGxzX3NoYTUxMl9obWFjX3N0YXJ0cworI2RlZmluZSBzaGE1MTJfaG1hY191cGRhdGUgbWJlZHRsc19zaGE1MTJfaG1hY191cGRhdGUKKyNkZWZpbmUgc2hhNTEyX2luZm8gbWJlZHRsc19zaGE1MTJfaW5mbworI2RlZmluZSBzaGE1MTJfaW5pdCBtYmVkdGxzX3NoYTUxMl9pbml0CisjZGVmaW5lIHNoYTUxMl9wcm9jZXNzIG1iZWR0bHNfc2hhNTEyX3Byb2Nlc3MKKyNkZWZpbmUgc2hhNTEyX3NlbGZfdGVzdCBtYmVkdGxzX3NoYTUxMl9zZWxmX3Rlc3QKKyNkZWZpbmUgc2hhNTEyX3N0YXJ0cyBtYmVkdGxzX3NoYTUxMl9zdGFydHMKKyNkZWZpbmUgc2hhNTEyX3VwZGF0ZSBtYmVkdGxzX3NoYTUxMl91cGRhdGUKKyNkZWZpbmUgc291cmNlX3N0YXRlIG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc3RhdGUKKyNkZWZpbmUgc3NsX2NhY2hlX2NvbnRleHQgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dAorI2RlZmluZSBzc2xfY2FjaGVfZW50cnkgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkKKyNkZWZpbmUgc3NsX2NhY2hlX2ZyZWUgbWJlZHRsc19zc2xfY2FjaGVfZnJlZQorI2RlZmluZSBzc2xfY2FjaGVfZ2V0IG1iZWR0bHNfc3NsX2NhY2hlX2dldAorI2RlZmluZSBzc2xfY2FjaGVfaW5pdCBtYmVkdGxzX3NzbF9jYWNoZV9pbml0CisjZGVmaW5lIHNzbF9jYWNoZV9zZXQgbWJlZHRsc19zc2xfY2FjaGVfc2V0CisjZGVmaW5lIHNzbF9jYWNoZV9zZXRfbWF4X2VudHJpZXMgbWJlZHRsc19zc2xfY2FjaGVfc2V0X21heF9lbnRyaWVzCisjZGVmaW5lIHNzbF9jYWNoZV9zZXRfdGltZW91dCBtYmVkdGxzX3NzbF9jYWNoZV9zZXRfdGltZW91dAorI2RlZmluZSBzc2xfY2hlY2tfY2VydF91c2FnZSBtYmVkdGxzX3NzbF9jaGVja19jZXJ0X3VzYWdlCisjZGVmaW5lIHNzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQKKyNkZWZpbmUgc3NsX2NpcGhlcnN1aXRlX2Zyb21fc3RyaW5nIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21fc3RyaW5nCisjZGVmaW5lIHNzbF9jaXBoZXJzdWl0ZV90IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QKKyNkZWZpbmUgc3NsX2NpcGhlcnN1aXRlX3VzZXNfZWMgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19lYworI2RlZmluZSBzc2xfY2lwaGVyc3VpdGVfdXNlc19wc2sgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19wc2sKKyNkZWZpbmUgc3NsX2Nsb3NlX25vdGlmeSBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkKKyNkZWZpbmUgc3NsX2NvbnRleHQgbWJlZHRsc19zc2xfY29udGV4dAorI2RlZmluZSBzc2xfY29va2llX2NoZWNrIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVjaworI2RlZmluZSBzc2xfY29va2llX2NoZWNrX3QgbWJlZHRsc19zc2xfY29va2llX2NoZWNrX3QKKyNkZWZpbmUgc3NsX2Nvb2tpZV9jdHggbWJlZHRsc19zc2xfY29va2llX2N0eAorI2RlZmluZSBzc2xfY29va2llX2ZyZWUgbWJlZHRsc19zc2xfY29va2llX2ZyZWUKKyNkZWZpbmUgc3NsX2Nvb2tpZV9pbml0IG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0CisjZGVmaW5lIHNzbF9jb29raWVfc2V0X3RpbWVvdXQgbWJlZHRsc19zc2xfY29va2llX3NldF90aW1lb3V0CisjZGVmaW5lIHNzbF9jb29raWVfc2V0dXAgbWJlZHRsc19zc2xfY29va2llX3NldHVwCisjZGVmaW5lIHNzbF9jb29raWVfd3JpdGUgbWJlZHRsc19zc2xfY29va2llX3dyaXRlCisjZGVmaW5lIHNzbF9jb29raWVfd3JpdGVfdCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdAorI2RlZmluZSBzc2xfY3VydmVfaXNfYWNjZXB0YWJsZSBtYmVkdGxzX3NzbF9jdXJ2ZV9pc19hY2NlcHRhYmxlCisjZGVmaW5lIHNzbF9kZXJpdmVfa2V5cyBtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cworI2RlZmluZSBzc2xfZHRsc19yZXBsYXlfY2hlY2sgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfY2hlY2sKKyNkZWZpbmUgc3NsX2R0bHNfcmVwbGF5X3VwZGF0ZSBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUKKyNkZWZpbmUgc3NsX2ZldGNoX2lucHV0IG1iZWR0bHNfc3NsX2ZldGNoX2lucHV0CisjZGVmaW5lIHNzbF9mbGlnaHRfaXRlbSBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbQorI2RlZmluZSBzc2xfZmx1c2hfb3V0cHV0IG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dAorI2RlZmluZSBzc2xfZnJlZSBtYmVkdGxzX3NzbF9mcmVlCisjZGVmaW5lIHNzbF9nZXRfYWxwbl9wcm90b2NvbCBtYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbAorI2RlZmluZSBzc2xfZ2V0X2J5dGVzX2F2YWlsIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbAorI2RlZmluZSBzc2xfZ2V0X2NpcGhlcnN1aXRlIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZQorI2RlZmluZSBzc2xfZ2V0X2NpcGhlcnN1aXRlX2lkIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9pZAorI2RlZmluZSBzc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUKKyNkZWZpbmUgc3NsX2dldF9jaXBoZXJzdWl0ZV9zaWdfcGtfYWxnIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9zaWdfcGtfYWxnCisjZGVmaW5lIHNzbF9nZXRfcGVlcl9jZXJ0IG1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQKKyNkZWZpbmUgc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uIG1iZWR0bHNfc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uCisjZGVmaW5lIHNzbF9nZXRfc2Vzc2lvbiBtYmVkdGxzX3NzbF9nZXRfc2Vzc2lvbgorI2RlZmluZSBzc2xfZ2V0X3ZlcmlmeV9yZXN1bHQgbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQKKyNkZWZpbmUgc3NsX2dldF92ZXJzaW9uIG1iZWR0bHNfc3NsX2dldF92ZXJzaW9uCisjZGVmaW5lIHNzbF9oYW5kc2hha2UgbWJlZHRsc19zc2xfaGFuZHNoYWtlCisjZGVmaW5lIHNzbF9oYW5kc2hha2VfY2xpZW50X3N0ZXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2NsaWVudF9zdGVwCisjZGVmaW5lIHNzbF9oYW5kc2hha2VfZnJlZSBtYmVkdGxzX3NzbF9oYW5kc2hha2VfZnJlZQorI2RlZmluZSBzc2xfaGFuZHNoYWtlX3BhcmFtcyBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zCisjZGVmaW5lIHNzbF9oYW5kc2hha2Vfc2VydmVyX3N0ZXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3NlcnZlcl9zdGVwCisjZGVmaW5lIHNzbF9oYW5kc2hha2Vfc3RlcCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc3RlcAorI2RlZmluZSBzc2xfaGFuZHNoYWtlX3dyYXB1cCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfd3JhcHVwCisjZGVmaW5lIHNzbF9oZHJfbGVuIG1iZWR0bHNfc3NsX2hkcl9sZW4KKyNkZWZpbmUgc3NsX2hzX2hkcl9sZW4gbWJlZHRsc19zc2xfaHNfaGRyX2xlbgorI2RlZmluZSBzc2xfaHdfcmVjb3JkX2FjdGl2YXRlIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZQorI2RlZmluZSBzc2xfaHdfcmVjb3JkX2ZpbmlzaCBtYmVkdGxzX3NzbF9od19yZWNvcmRfZmluaXNoCisjZGVmaW5lIHNzbF9od19yZWNvcmRfaW5pdCBtYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdAorI2RlZmluZSBzc2xfaHdfcmVjb3JkX3JlYWQgbWJlZHRsc19zc2xfaHdfcmVjb3JkX3JlYWQKKyNkZWZpbmUgc3NsX2h3X3JlY29yZF9yZXNldCBtYmVkdGxzX3NzbF9od19yZWNvcmRfcmVzZXQKKyNkZWZpbmUgc3NsX2h3X3JlY29yZF93cml0ZSBtYmVkdGxzX3NzbF9od19yZWNvcmRfd3JpdGUKKyNkZWZpbmUgc3NsX2luaXQgbWJlZHRsc19zc2xfaW5pdAorI2RlZmluZSBzc2xfa2V5X2NlcnQgbWJlZHRsc19zc2xfa2V5X2NlcnQKKyNkZWZpbmUgc3NsX2xlZ2FjeV9yZW5lZ290aWF0aW9uIG1iZWR0bHNfc3NsX2NvbmZfbGVnYWN5X3JlbmVnb3RpYXRpb24KKyNkZWZpbmUgc3NsX2xpc3RfY2lwaGVyc3VpdGVzIG1iZWR0bHNfc3NsX2xpc3RfY2lwaGVyc3VpdGVzCisjZGVmaW5lIHNzbF9tZF9hbGdfZnJvbV9oYXNoIG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2gKKyNkZWZpbmUgc3NsX29wdGltaXplX2NoZWNrc3VtIG1iZWR0bHNfc3NsX29wdGltaXplX2NoZWNrc3VtCisjZGVmaW5lIHNzbF9vd25fY2VydCBtYmVkdGxzX3NzbF9vd25fY2VydAorI2RlZmluZSBzc2xfb3duX2tleSBtYmVkdGxzX3NzbF9vd25fa2V5CisjZGVmaW5lIHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZSBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZQorI2RlZmluZSBzc2xfcGFyc2VfY2hhbmdlX2NpcGhlcl9zcGVjIG1iZWR0bHNfc3NsX3BhcnNlX2NoYW5nZV9jaXBoZXJfc3BlYworI2RlZmluZSBzc2xfcGFyc2VfZmluaXNoZWQgbWJlZHRsc19zc2xfcGFyc2VfZmluaXNoZWQKKyNkZWZpbmUgc3NsX3BrX2FsZ19mcm9tX3NpZyBtYmVkdGxzX3NzbF9wa19hbGdfZnJvbV9zaWcKKyNkZWZpbmUgc3NsX3BrY3MxMV9kZWNyeXB0IG1iZWR0bHNfc3NsX3BrY3MxMV9kZWNyeXB0CisjZGVmaW5lIHNzbF9wa2NzMTFfa2V5X2xlbiBtYmVkdGxzX3NzbF9wa2NzMTFfa2V5X2xlbgorI2RlZmluZSBzc2xfcGtjczExX3NpZ24gbWJlZHRsc19zc2xfcGtjczExX3NpZ24KKyNkZWZpbmUgc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyIG1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyCisjZGVmaW5lIHNzbF9yZWFkIG1iZWR0bHNfc3NsX3JlYWQKKyNkZWZpbmUgc3NsX3JlYWRfcmVjb3JkIG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkCisjZGVmaW5lIHNzbF9yZWFkX3ZlcnNpb24gbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uCisjZGVmaW5lIHNzbF9yZWN2X2ZsaWdodF9jb21wbGV0ZWQgbWJlZHRsc19zc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkCisjZGVmaW5lIHNzbF9yZW5lZ290aWF0ZSBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZQorI2RlZmluZSBzc2xfcmVzZW5kIG1iZWR0bHNfc3NsX3Jlc2VuZAorI2RlZmluZSBzc2xfcmVzZXRfY2hlY2tzdW0gbWJlZHRsc19zc2xfcmVzZXRfY2hlY2tzdW0KKyNkZWZpbmUgc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UKKyNkZWZpbmUgc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUgbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZQorI2RlZmluZSBzc2xfc2VuZF9mbGlnaHRfY29tcGxldGVkIG1iZWR0bHNfc3NsX3NlbmRfZmxpZ2h0X2NvbXBsZXRlZAorI2RlZmluZSBzc2xfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXNzaW9uCisjZGVmaW5lIHNzbF9zZXNzaW9uX2ZyZWUgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlCisjZGVmaW5lIHNzbF9zZXNzaW9uX2luaXQgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0CisjZGVmaW5lIHNzbF9zZXNzaW9uX3Jlc2V0IG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQKKyNkZWZpbmUgc3NsX3NldF9hbHBuX3Byb3RvY29scyBtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzCisjZGVmaW5lIHNzbF9zZXRfYXJjNF9zdXBwb3J0IG1iZWR0bHNfc3NsX2NvbmZfYXJjNF9zdXBwb3J0CisjZGVmaW5lIHNzbF9zZXRfYXV0aG1vZGUgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZQorI2RlZmluZSBzc2xfc2V0X2JpbyBtYmVkdGxzX3NzbF9zZXRfYmlvCisjZGVmaW5lIHNzbF9zZXRfYmlvIG1iZWR0bHNfc3NsX3NldF9iaW9fdGltZW91dAorI2RlZmluZSBzc2xfc2V0X2NhX2NoYWluIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4KKyNkZWZpbmUgc3NsX3NldF9jYmNfcmVjb3JkX3NwbGl0dGluZyBtYmVkdGxzX3NzbF9jb25mX2NiY19yZWNvcmRfc3BsaXR0aW5nCisjZGVmaW5lIHNzbF9zZXRfY2lwaGVyc3VpdGVzIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzCisjZGVmaW5lIHNzbF9zZXRfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uCisjZGVmaW5lIHNzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCBtYmVkdGxzX3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZAorI2RlZmluZSBzc2xfc2V0X2N1cnZlcyBtYmVkdGxzX3NzbF9jb25mX2N1cnZlcworI2RlZmluZSBzc2xfc2V0X2RiZyBtYmVkdGxzX3NzbF9jb25mX2RiZworI2RlZmluZSBzc2xfc2V0X2RoX3BhcmFtIG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW0KKyNkZWZpbmUgc3NsX3NldF9kaF9wYXJhbV9jdHggbWJlZHRsc19zc2xfY29uZl9kaF9wYXJhbV9jdHgKKyNkZWZpbmUgc3NsX3NldF9kdGxzX2FudGlfcmVwbGF5IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19hbnRpX3JlcGxheQorI2RlZmluZSBzc2xfc2V0X2R0bHNfYmFkbWFjX2xpbWl0IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQKKyNkZWZpbmUgc3NsX3NldF9kdGxzX2Nvb2tpZXMgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMKKyNkZWZpbmUgc3NsX3NldF9lbmNyeXB0X3RoZW5fbWFjIG1iZWR0bHNfc3NsX2NvbmZfZW5jcnlwdF90aGVuX21hYworI2RlZmluZSBzc2xfc2V0X2VuZHBvaW50IG1iZWR0bHNfc3NsX2NvbmZfZW5kcG9pbnQKKyNkZWZpbmUgc3NsX3NldF9leHRlbmRlZF9tYXN0ZXJfc2VjcmV0IG1iZWR0bHNfc3NsX2NvbmZfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldAorI2RlZmluZSBzc2xfc2V0X2ZhbGxiYWNrIG1iZWR0bHNfc3NsX2NvbmZfZmFsbGJhY2sKKyNkZWZpbmUgc3NsX3NldF9oYW5kc2hha2VfdGltZW91dCBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0CisjZGVmaW5lIHNzbF9zZXRfaG9zdG5hbWUgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lCisjZGVmaW5lIHNzbF9zZXRfbWF4X2ZyYWdfbGVuIG1iZWR0bHNfc3NsX2NvbmZfbWF4X2ZyYWdfbGVuCisjZGVmaW5lIHNzbF9zZXRfbWF4X3ZlcnNpb24gbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbgorI2RlZmluZSBzc2xfc2V0X21pbl92ZXJzaW9uIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24KKyNkZWZpbmUgc3NsX3NldF9vd25fY2VydCBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0CisjZGVmaW5lIHNzbF9zZXRfb3duX2NlcnRfYWx0IG1iZWR0bHNfc3NsX3NldF9vd25fY2VydF9hbHQKKyNkZWZpbmUgc3NsX3NldF9vd25fY2VydF9yc2EgbWJlZHRsc19zc2xfc2V0X293bl9jZXJ0X3JzYQorI2RlZmluZSBzc2xfc2V0X3BzayBtYmVkdGxzX3NzbF9jb25mX3BzaworI2RlZmluZSBzc2xfc2V0X3Bza19jYiBtYmVkdGxzX3NzbF9jb25mX3Bza19jYgorI2RlZmluZSBzc2xfc2V0X3JlbmVnb3RpYXRpb24gbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uCisjZGVmaW5lIHNzbF9zZXRfcmVuZWdvdGlhdGlvbl9lbmZvcmNlZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fZW5mb3JjZWQKKyNkZWZpbmUgc3NsX3NldF9yZW5lZ290aWF0aW9uX3BlcmlvZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fcGVyaW9kCisjZGVmaW5lIHNzbF9zZXRfcm5nIG1iZWR0bHNfc3NsX2NvbmZfcm5nCisjZGVmaW5lIHNzbF9zZXRfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbgorI2RlZmluZSBzc2xfc2V0X3Nlc3Npb25fY2FjaGUgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX2NhY2hlCisjZGVmaW5lIHNzbF9zZXRfc2Vzc2lvbl90aWNrZXRfbGlmZXRpbWUgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldF9saWZldGltZQorI2RlZmluZSBzc2xfc2V0X3Nlc3Npb25fdGlja2V0cyBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0cworI2RlZmluZSBzc2xfc2V0X3NuaSBtYmVkdGxzX3NzbF9jb25mX3NuaQorI2RlZmluZSBzc2xfc2V0X3RyYW5zcG9ydCBtYmVkdGxzX3NzbF9jb25mX3RyYW5zcG9ydAorI2RlZmluZSBzc2xfc2V0X3RydW5jYXRlZF9obWFjIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMKKyNkZWZpbmUgc3NsX3NldF92ZXJpZnkgbWJlZHRsc19zc2xfY29uZl92ZXJpZnkKKyNkZWZpbmUgc3NsX3NpZ19mcm9tX3BrIG1iZWR0bHNfc3NsX3NpZ19mcm9tX3BrCisjZGVmaW5lIHNzbF9zdGF0ZXMgbWJlZHRsc19zc2xfc3RhdGVzCisjZGVmaW5lIHNzbF90aWNrZXRfa2V5cyBtYmVkdGxzX3NzbF90aWNrZXRfa2V5cworI2RlZmluZSBzc2xfdHJhbnNmb3JtIG1iZWR0bHNfc3NsX3RyYW5zZm9ybQorI2RlZmluZSBzc2xfdHJhbnNmb3JtX2ZyZWUgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUKKyNkZWZpbmUgc3NsX3dyaXRlIG1iZWR0bHNfc3NsX3dyaXRlCisjZGVmaW5lIHNzbF93cml0ZV9jZXJ0aWZpY2F0ZSBtYmVkdGxzX3NzbF93cml0ZV9jZXJ0aWZpY2F0ZQorI2RlZmluZSBzc2xfd3JpdGVfY2hhbmdlX2NpcGhlcl9zcGVjIG1iZWR0bHNfc3NsX3dyaXRlX2NoYW5nZV9jaXBoZXJfc3BlYworI2RlZmluZSBzc2xfd3JpdGVfZmluaXNoZWQgbWJlZHRsc19zc2xfd3JpdGVfZmluaXNoZWQKKyNkZWZpbmUgc3NsX3dyaXRlX3JlY29yZCBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQKKyNkZWZpbmUgc3NsX3dyaXRlX3ZlcnNpb24gbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbgorI2RlZmluZSBzdXBwb3J0ZWRfY2lwaGVycyBtYmVkdGxzX2NpcGhlcl9zdXBwb3J0ZWQKKyNkZWZpbmUgdF9zaW50IG1iZWR0bHNfbXBpX3NpbnQKKyNkZWZpbmUgdF91ZGJsIG1iZWR0bHNfdF91ZGJsCisjZGVmaW5lIHRfdWludCBtYmVkdGxzX21waV91aW50CisjZGVmaW5lIHRlc3RfY2FfY3J0IG1iZWR0bHNfdGVzdF9jYV9jcnQKKyNkZWZpbmUgdGVzdF9jYV9jcnRfZWMgbWJlZHRsc190ZXN0X2NhX2NydF9lYworI2RlZmluZSB0ZXN0X2NhX2NydF9yc2EgbWJlZHRsc190ZXN0X2NhX2NydF9yc2EKKyNkZWZpbmUgdGVzdF9jYV9rZXkgbWJlZHRsc190ZXN0X2NhX2tleQorI2RlZmluZSB0ZXN0X2NhX2tleV9lYyBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjCisjZGVmaW5lIHRlc3RfY2Ffa2V5X3JzYSBtYmVkdGxzX3Rlc3RfY2Ffa2V5X3JzYQorI2RlZmluZSB0ZXN0X2NhX2xpc3QgbWJlZHRsc190ZXN0X2Nhc19wZW0KKyNkZWZpbmUgdGVzdF9jYV9wd2QgbWJlZHRsc190ZXN0X2NhX3B3ZAorI2RlZmluZSB0ZXN0X2NhX3B3ZF9lYyBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjCisjZGVmaW5lIHRlc3RfY2FfcHdkX3JzYSBtYmVkdGxzX3Rlc3RfY2FfcHdkX3JzYQorI2RlZmluZSB0ZXN0X2NsaV9jcnQgbWJlZHRsc190ZXN0X2NsaV9jcnQKKyNkZWZpbmUgdGVzdF9jbGlfY3J0X2VjIG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjCisjZGVmaW5lIHRlc3RfY2xpX2NydF9yc2EgbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhCisjZGVmaW5lIHRlc3RfY2xpX2tleSBtYmVkdGxzX3Rlc3RfY2xpX2tleQorI2RlZmluZSB0ZXN0X2NsaV9rZXlfZWMgbWJlZHRsc190ZXN0X2NsaV9rZXlfZWMKKyNkZWZpbmUgdGVzdF9jbGlfa2V5X3JzYSBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2EKKyNkZWZpbmUgdGVzdF9kaG1fcGFyYW1zIG1iZWR0bHNfdGVzdF9kaG1fcGFyYW1zCisjZGVmaW5lIHRlc3Rfc3J2X2NydCBtYmVkdGxzX3Rlc3Rfc3J2X2NydAorI2RlZmluZSB0ZXN0X3Nydl9jcnRfZWMgbWJlZHRsc190ZXN0X3Nydl9jcnRfZWMKKyNkZWZpbmUgdGVzdF9zcnZfY3J0X3JzYSBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2EKKyNkZWZpbmUgdGVzdF9zcnZfa2V5IG1iZWR0bHNfdGVzdF9zcnZfa2V5CisjZGVmaW5lIHRlc3Rfc3J2X2tleV9lYyBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lYworI2RlZmluZSB0ZXN0X3Nydl9rZXlfcnNhIG1iZWR0bHNfdGVzdF9zcnZfa2V5X3JzYQorI2RlZmluZSB0aHJlYWRpbmdfbXV0ZXhfdCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90CisjZGVmaW5lIHRocmVhZGluZ19zZXRfYWx0IG1iZWR0bHNfdGhyZWFkaW5nX3NldF9hbHQKKyNkZWZpbmUgdGltaW5nX3NlbGZfdGVzdCBtYmVkdGxzX3RpbWluZ19zZWxmX3Rlc3QKKyNkZWZpbmUgdmVyc2lvbl9jaGVja19mZWF0dXJlIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlCisjZGVmaW5lIHZlcnNpb25fZ2V0X251bWJlciBtYmVkdGxzX3ZlcnNpb25fZ2V0X251bWJlcgorI2RlZmluZSB2ZXJzaW9uX2dldF9zdHJpbmcgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmcKKyNkZWZpbmUgdmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmdfZnVsbAorI2RlZmluZSB4NTA5X2JpdHN0cmluZyBtYmVkdGxzX3g1MDlfYml0c3RyaW5nCisjZGVmaW5lIHg1MDlfYnVmIG1iZWR0bHNfeDUwOV9idWYKKyNkZWZpbmUgeDUwOV9jcmwgbWJlZHRsc194NTA5X2NybAorI2RlZmluZSB4NTA5X2NybF9lbnRyeSBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5CisjZGVmaW5lIHg1MDlfY3JsX2ZyZWUgbWJlZHRsc194NTA5X2NybF9mcmVlCisjZGVmaW5lIHg1MDlfY3JsX2luZm8gbWJlZHRsc194NTA5X2NybF9pbmZvCisjZGVmaW5lIHg1MDlfY3JsX2luaXQgbWJlZHRsc194NTA5X2NybF9pbml0CisjZGVmaW5lIHg1MDlfY3JsX3BhcnNlIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2UKKyNkZWZpbmUgeDUwOV9jcmxfcGFyc2VfZGVyIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyCisjZGVmaW5lIHg1MDlfY3JsX3BhcnNlX2ZpbGUgbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlCisjZGVmaW5lIHg1MDlfY3J0IG1iZWR0bHNfeDUwOV9jcnQKKyNkZWZpbmUgeDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlIG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlCisjZGVmaW5lIHg1MDlfY3J0X2NoZWNrX2tleV91c2FnZSBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2tleV91c2FnZQorI2RlZmluZSB4NTA5X2NydF9mcmVlIG1iZWR0bHNfeDUwOV9jcnRfZnJlZQorI2RlZmluZSB4NTA5X2NydF9pbmZvIG1iZWR0bHNfeDUwOV9jcnRfaW5mbworI2RlZmluZSB4NTA5X2NydF9pbml0IG1iZWR0bHNfeDUwOV9jcnRfaW5pdAorI2RlZmluZSB4NTA5X2NydF9wYXJzZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlCisjZGVmaW5lIHg1MDlfY3J0X3BhcnNlX2RlciBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlcgorI2RlZmluZSB4NTA5X2NydF9wYXJzZV9maWxlIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZQorI2RlZmluZSB4NTA5X2NydF9wYXJzZV9wYXRoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aAorI2RlZmluZSB4NTA5X2NydF9yZXZva2VkIG1iZWR0bHNfeDUwOV9jcnRfaXNfcmV2b2tlZAorI2RlZmluZSB4NTA5X2NydF92ZXJpZnkgbWJlZHRsc194NTA5X2NydF92ZXJpZnkKKyNkZWZpbmUgeDUwOV9jc3IgbWJlZHRsc194NTA5X2NzcgorI2RlZmluZSB4NTA5X2Nzcl9mcmVlIG1iZWR0bHNfeDUwOV9jc3JfZnJlZQorI2RlZmluZSB4NTA5X2Nzcl9pbmZvIG1iZWR0bHNfeDUwOV9jc3JfaW5mbworI2RlZmluZSB4NTA5X2Nzcl9pbml0IG1iZWR0bHNfeDUwOV9jc3JfaW5pdAorI2RlZmluZSB4NTA5X2Nzcl9wYXJzZSBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlCisjZGVmaW5lIHg1MDlfY3NyX3BhcnNlX2RlciBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2RlcgorI2RlZmluZSB4NTA5X2Nzcl9wYXJzZV9maWxlIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZQorI2RlZmluZSB4NTA5X2RuX2dldHMgbWJlZHRsc194NTA5X2RuX2dldHMKKyNkZWZpbmUgeDUwOV9nZXRfYWxnIG1iZWR0bHNfeDUwOV9nZXRfYWxnCisjZGVmaW5lIHg1MDlfZ2V0X2FsZ19udWxsIG1iZWR0bHNfeDUwOV9nZXRfYWxnX251bGwKKyNkZWZpbmUgeDUwOV9nZXRfZXh0IG1iZWR0bHNfeDUwOV9nZXRfZXh0CisjZGVmaW5lIHg1MDlfZ2V0X25hbWUgbWJlZHRsc194NTA5X2dldF9uYW1lCisjZGVmaW5lIHg1MDlfZ2V0X3JzYXNzYV9wc3NfcGFyYW1zIG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMKKyNkZWZpbmUgeDUwOV9nZXRfc2VyaWFsIG1iZWR0bHNfeDUwOV9nZXRfc2VyaWFsCisjZGVmaW5lIHg1MDlfZ2V0X3NpZyBtYmVkdGxzX3g1MDlfZ2V0X3NpZworI2RlZmluZSB4NTA5X2dldF9zaWdfYWxnIG1iZWR0bHNfeDUwOV9nZXRfc2lnX2FsZworI2RlZmluZSB4NTA5X2dldF90aW1lIG1iZWR0bHNfeDUwOV9nZXRfdGltZQorI2RlZmluZSB4NTA5X2tleV9zaXplX2hlbHBlciBtYmVkdGxzX3g1MDlfa2V5X3NpemVfaGVscGVyCisjZGVmaW5lIHg1MDlfbmFtZSBtYmVkdGxzX3g1MDlfbmFtZQorI2RlZmluZSB4NTA5X29pZF9nZXRfZGVzY3JpcHRpb24gbWJlZHRsc194NTA5X29pZF9nZXRfZGVzY3JpcHRpb24KKyNkZWZpbmUgeDUwOV9vaWRfZ2V0X251bWVyaWNfc3RyaW5nIG1iZWR0bHNfeDUwOV9vaWRfZ2V0X251bWVyaWNfc3RyaW5nCisjZGVmaW5lIHg1MDlfc2VsZl90ZXN0IG1iZWR0bHNfeDUwOV9zZWxmX3Rlc3QKKyNkZWZpbmUgeDUwOV9zZXF1ZW5jZSBtYmVkdGxzX3g1MDlfc2VxdWVuY2UKKyNkZWZpbmUgeDUwOV9zZXJpYWxfZ2V0cyBtYmVkdGxzX3g1MDlfc2VyaWFsX2dldHMKKyNkZWZpbmUgeDUwOV9zZXRfZXh0ZW5zaW9uIG1iZWR0bHNfeDUwOV9zZXRfZXh0ZW5zaW9uCisjZGVmaW5lIHg1MDlfc2lnX2FsZ19nZXRzIG1iZWR0bHNfeDUwOV9zaWdfYWxnX2dldHMKKyNkZWZpbmUgeDUwOV9zdHJpbmdfdG9fbmFtZXMgbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcworI2RlZmluZSB4NTA5X3RpbWUgbWJlZHRsc194NTA5X3RpbWUKKyNkZWZpbmUgeDUwOV90aW1lX2V4cGlyZWQgbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdAorI2RlZmluZSB4NTA5X3RpbWVfZnV0dXJlIG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZQorI2RlZmluZSB4NTA5X3dyaXRlX2V4dGVuc2lvbnMgbWJlZHRsc194NTA5X3dyaXRlX2V4dGVuc2lvbnMKKyNkZWZpbmUgeDUwOV93cml0ZV9uYW1lcyBtYmVkdGxzX3g1MDlfd3JpdGVfbmFtZXMKKyNkZWZpbmUgeDUwOV93cml0ZV9zaWcgbWJlZHRsc194NTA5X3dyaXRlX3NpZworI2RlZmluZSB4NTA5d3JpdGVfY2VydCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0CisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfZGVyIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9mcmVlIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9mcmVlCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfaW5pdCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfaW5pdAorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3BlbSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfcGVtCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X2F1dGhvcml0eV9rZXlfaWRlbnRpZmllciBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2F1dGhvcml0eV9rZXlfaWRlbnRpZmllcgorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cyBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2Jhc2ljX2NvbnN0cmFpbnRzCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbgorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfa2V5IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfbmFtZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9tZF9hbGcgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9tZF9hbGcKKyNkZWZpbmUgeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbnNfY2VydF90eXBlCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbAorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5CisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5X2lkZW50aWZpZXIgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyCisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZQorI2RlZmluZSB4NTA5d3JpdGVfY3J0X3NldF92YWxpZGl0eSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZhbGlkaXR5CisjZGVmaW5lIHg1MDl3cml0ZV9jcnRfc2V0X3ZlcnNpb24gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92ZXJzaW9uCisjZGVmaW5lIHg1MDl3cml0ZV9jc3IgbWJlZHRsc194NTA5d3JpdGVfY3NyCisjZGVmaW5lIHg1MDl3cml0ZV9jc3JfZGVyIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIKKyNkZWZpbmUgeDUwOXdyaXRlX2Nzcl9mcmVlIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlCisjZGVmaW5lIHg1MDl3cml0ZV9jc3JfaW5pdCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfaW5pdAorI2RlZmluZSB4NTA5d3JpdGVfY3NyX3BlbSBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfcGVtCisjZGVmaW5lIHg1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbiBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbgorI2RlZmluZSB4NTA5d3JpdGVfY3NyX3NldF9rZXkgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9rZXkKKyNkZWZpbmUgeDUwOXdyaXRlX2Nzcl9zZXRfa2V5X3VzYWdlIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5X3VzYWdlCisjZGVmaW5lIHg1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZworI2RlZmluZSB4NTA5d3JpdGVfY3NyX3NldF9uc19jZXJ0X3R5cGUgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9uc19jZXJ0X3R5cGUKKyNkZWZpbmUgeDUwOXdyaXRlX2Nzcl9zZXRfc3ViamVjdF9uYW1lIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfc3ViamVjdF9uYW1lCisjZGVmaW5lIHh0ZWFfY29udGV4dCBtYmVkdGxzX3h0ZWFfY29udGV4dAorI2RlZmluZSB4dGVhX2NyeXB0X2NiYyBtYmVkdGxzX3h0ZWFfY3J5cHRfY2JjCisjZGVmaW5lIHh0ZWFfY3J5cHRfZWNiIG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IKKyNkZWZpbmUgeHRlYV9mcmVlIG1iZWR0bHNfeHRlYV9mcmVlCisjZGVmaW5lIHh0ZWFfaW5pdCBtYmVkdGxzX3h0ZWFfaW5pdAorI2RlZmluZSB4dGVhX3NlbGZfdGVzdCBtYmVkdGxzX3h0ZWFfc2VsZl90ZXN0CisjZGVmaW5lIHh0ZWFfc2V0dXAgbWJlZHRsc194dGVhX3NldHVwCisKKyNlbmRpZiAvKiBjb21wYXQtMS4zLmggKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjOWM3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKQEAgLTAsMCArMSwyNjAwIEBACisvKioKKyAqIFxmaWxlIGNvbmZpZy5oCisgKgorICogXGJyaWVmIENvbmZpZ3VyYXRpb24gb3B0aW9ucyAoc2V0IG9mIGRlZmluZXMpCisgKgorICogIFRoaXMgc2V0IG9mIGNvbXBpbGUtdGltZSBvcHRpb25zIG1heSBiZSB1c2VkIHRvIGVuYWJsZQorICogIG9yIGRpc2FibGUgZmVhdHVyZXMgc2VsZWN0aXZlbHksIGFuZCByZWR1Y2UgdGhlIGdsb2JhbAorICogIG1lbW9yeSBmb290cHJpbnQuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZm5kZWYgTUJFRFRMU19DT05GSUdfSAorI2RlZmluZSBNQkVEVExTX0NPTkZJR19ICisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUpCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBTeXN0ZW0gc3VwcG9ydAorICoKKyAqIFRoaXMgc2VjdGlvbiBzZXRzIHN5c3RlbSBzcGVjaWZpYyBzZXR0aW5ncy4KKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGUgY29tcGlsZXIgaGFzIHN1cHBvcnQgZm9yIGFzbSgpLgorICoKKyAqIFJlcXVpcmVzIHN1cHBvcnQgZm9yIGFzbSgpIGluIGNvbXBpbGVyLgorICoKKyAqIFVzZWQgaW46CisgKiAgICAgIGxpYnJhcnkvdGltaW5nLmMKKyAqICAgICAgbGlicmFyeS9wYWRsb2NrLmMKKyAqICAgICAgaW5jbHVkZS9tYmVkdGxzL2JuX211bC5oCisgKgorICogQ29tbWVudCB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgYXNzZW1ibHkgY29kZS4KKyAqLworI2RlZmluZSBNQkVEVExTX0hBVkVfQVNNCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfU1NFMgorICoKKyAqIENQVSBzdXBwb3J0cyBTU0UyIGluc3RydWN0aW9uIHNldC4KKyAqCisgKiBVbmNvbW1lbnQgaWYgdGhlIENQVSBzdXBwb3J0cyBTU0UyIChJQS0zMiBzcGVjaWZpYykuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hBVkVfU1NFMgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19IQVZFX1RJTUUKKyAqCisgKiBTeXN0ZW0gaGFzIHRpbWUuaCBhbmQgdGltZSgpLgorICogVGhlIHRpbWUgZG9lcyBub3QgbmVlZCB0byBiZSBjb3JyZWN0LCBvbmx5IHRpbWUgZGlmZmVyZW5jZXMgYXJlIHVzZWQsCisgKiBieSBjb250cmFzdCB3aXRoIE1CRURUTFNfSEFWRV9USU1FX0RBVEUKKyAqCisgKiBEZWZpbmluZyBNQkVEVExTX0hBVkVfVElNRSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgTUJFRFRMU19QTEFURk9STV9USU1FX0FMVCwKKyAqIE1CRURUTFNfUExBVEZPUk1fVElNRV9NQUNSTywgTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8gYW5kCisgKiBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FLgorICoKKyAqIENvbW1lbnQgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCB0aW1lIGZ1bmN0aW9ucworICovCisjZGVmaW5lIE1CRURUTFNfSEFWRV9USU1FCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVfVElNRV9EQVRFCisgKgorICogU3lzdGVtIGhhcyB0aW1lLmggYW5kIHRpbWUoKSwgZ210aW1lKCkgYW5kIHRoZSBjbG9jayBpcyBjb3JyZWN0LgorICogVGhlIHRpbWUgbmVlZHMgdG8gYmUgY29ycmVjdCAobm90IG5lY2VzYXJpbHkgdmVyeSBhY2N1cmF0ZSwgYnV0IGF0IGxlYXN0CisgKiB0aGUgZGF0ZSBzaG91bGQgYmUgY29ycmVjdCkuIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IHBlcmlvZCBvZgorICogWC41MDkgY2VydGlmaWNhdGVzLgorICoKKyAqIENvbW1lbnQgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIGNvcnJlY3QgY2xvY2suCisgKi8KKyNkZWZpbmUgTUJFRFRMU19IQVZFX1RJTUVfREFURQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19QTEFURk9STV9NRU1PUlkKKyAqCisgKiBFbmFibGUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGxheWVyLgorICoKKyAqIEJ5IGRlZmF1bHQgbWJlZCBUTFMgdXNlcyB0aGUgc3lzdGVtLXByb3ZpZGVkIGNhbGxvYygpIGFuZCBmcmVlKCkuCisgKiBUaGlzIGFsbG93cyBkaWZmZXJlbnQgYWxsb2NhdG9ycyAoc2VsZi1pbXBsZW1lbnRlZCBvciBwcm92aWRlZCkgdG8gYmUKKyAqIHByb3ZpZGVkIHRvIHRoZSBwbGF0Zm9ybSBhYnN0cmFjdGlvbiBsYXllci4KKyAqCisgKiBFbmFibGluZyBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSB3aXRob3V0IHRoZQorICogTUJFRFRMU19QTEFURk9STV97RlJFRSxDQUxMT0N9X01BQ1JPcyB3aWxsIHByb3ZpZGUKKyAqICJtYmVkdGxzX3BsYXRmb3JtX3NldF9jYWxsb2NfZnJlZSgpIiBhbGxvd2luZyB5b3UgdG8gc2V0IGFuIGFsdGVybmF0aXZlIGNhbGxvYygpIGFuZAorICogZnJlZSgpIGZ1bmN0aW9uIHBvaW50ZXIgYXQgcnVudGltZS4KKyAqCisgKiBFbmFibGluZyBNQkVEVExTX1BMQVRGT1JNX01FTU9SWSBhbmQgc3BlY2lmeWluZworICogTUJFRFRMU19QTEFURk9STV97Q0FMTE9DLEZSRUV9X01BQ1JPcyB3aWxsIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoZQorICogYWx0ZXJuYXRlIGZ1bmN0aW9uIGF0IGNvbXBpbGUgdGltZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QTEFURk9STV9DCisgKgorICogRW5hYmxlIHRoaXMgbGF5ZXIgdG8gYWxsb3cgdXNlIG9mIGFsdGVybmF0aXZlIG1lbW9yeSBhbGxvY2F0b3JzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9NRU1PUlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUworICoKKyAqIERvIG5vdCBhc3NpZ24gc3RhbmRhcmQgZnVuY3Rpb25zIGluIHRoZSBwbGF0Zm9ybSBsYXllciAoZS5nLiBjYWxsb2MoKSB0bworICogTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DIGFuZCBwcmludGYoKSB0byBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYpCisgKgorICogVGhpcyBtYWtlcyBzdXJlIHRoZXJlIGFyZSBubyBsaW5raW5nIGVycm9ycyBvbiBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydAorICogdGhlc2UgZnVuY3Rpb25zLiBZb3Ugd2lsbCBIQVZFIHRvIHByb3ZpZGUgYWx0ZXJuYXRpdmVzLCBlaXRoZXIgYXQgcnVudGltZQorICogdmlhIHRoZSBwbGF0Zm9ybV9zZXRfeHh4KCkgZnVuY3Rpb25zIG9yIGF0IGNvbXBpbGUgdGltZSBieSBzZXR0aW5nCisgKiB0aGUgTUJFRFRMU19QTEFURk9STV9TVERfWFhYIGRlZmluZXMsIG9yIGVuYWJsaW5nIGEKKyAqIE1CRURUTFNfUExBVEZPUk1fWFhYX01BQ1JPLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BMQVRGT1JNX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gcHJldmVudCBkZWZhdWx0IGFzc2lnbm1lbnQgb2Ygc3RhbmRhcmQgZnVuY3Rpb25zIGluIHRoZQorICogcGxhdGZvcm0gbGF5ZXIuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKKyAqCisgKiBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyBzdXBwb3J0IHRoZQorICogZnVuY3Rpb24gaW4gdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQsIG1iZWQgVExTIHdpbGwKKyAqIHByb3ZpZGUgYSBmdW5jdGlvbiAibWJlZHRsc19wbGF0Zm9ybV9zZXRfcHJpbnRmKCkiIHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgYW4KKyAqIGFsdGVybmF0aXZlIHByaW50ZiBmdW5jdGlvbiBwb2ludGVyLgorICoKKyAqIEFsbCB0aGVzZSBkZWZpbmUgcmVxdWlyZSBNQkVEVExTX1BMQVRGT1JNX0MgdG8gYmUgZGVmaW5lZCEKKyAqCisgKiBcbm90ZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCBpcyByZXF1aXJlZCBvbiBXaW5kb3dzOworICogaXQgd2lsbCBiZSBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYnkgY2hlY2tfY29uZmlnLmgKKyAqCisgKiBcd2FybmluZyBNQkVEVExTX1BMQVRGT1JNX1hYWF9BTFQgY2Fubm90IGJlIGRlZmluZWQgYXQgdGhlIHNhbWUgdGltZSBhcworICogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8hCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgcmVxdWlyZXMgTUJFRFRMU19IQVZFX1RJTUUKKyAqCisgKiBVbmNvbW1lbnQgYSBtYWNybyB0byBlbmFibGUgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHNwZWNpZmljIGJhc2UKKyAqIHBsYXRmb3JtIGZ1bmN0aW9uCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9USU1FX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HCisgKgorICogTWFyayBkZXByZWNhdGVkIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFRoaXMgb25seSB3b3JrcyB3aXRoIEdDQyBhbmQgQ2xhbmcuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB5b3UgbWF5IHdhbnQgdG8KKyAqIHVzZSBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRAorICoKKyAqIFVuY29tbWVudCB0byBnZXQgd2FybmluZ3Mgb24gdXNpbmcgZGVwcmVjYXRlZCBmdW5jdGlvbnMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKyAqCisgKiBSZW1vdmUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgc28gdGhhdCB0aGV5IGdlbmVyYXRlIGFuIGVycm9yIGlmIHVzZWQuCisgKiBGdW5jdGlvbnMgZGVwcmVjYXRlZCBpbiBvbmUgdmVyc2lvbiB3aWxsIHVzdWFsbHkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dAorICogdmVyc2lvbi4gWW91IGNhbiBlbmFibGUgdGhpcyB0byBoZWxwIHlvdSBwcmVwYXJlIHRoZSB0cmFuc2l0aW9uIHRvIGEgbmV3CisgKiBtYWpvciB2ZXJzaW9uIGJ5IG1ha2luZyBzdXJlIHlvdXIgY29kZSBpcyBub3QgdXNpbmcgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIFVuY29tbWVudCB0byBnZXQgZXJyb3JzIG9uIHVzaW5nIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKKworLyogXH0gbmFtZSBTRUNUSU9OOiBTeXN0ZW0gc3VwcG9ydCAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IG1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydAorICoKKyAqIFRoaXMgc2VjdGlvbiBzZXRzIHN1cHBvcnQgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIG9yIGFyZSBub3QgbmVlZGVkCisgKiB3aXRoaW4gdGhlIG1vZHVsZXMgdGhhdCBhcmUgZW5hYmxlZC4KKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfVElNSU5HX0FMVAorICoKKyAqIFVuY29tbWVudCB0byBwcm92aWRlIHlvdXIgb3duIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCksCisgKiBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoKSwgbWJlZHRsc19zZXRfYWxhcm0oKSwgbWJlZHRsc19zZXQvZ2V0X2RlbGF5KCkKKyAqCisgKiBPbmx5IHdvcmtzIGlmIHlvdSBoYXZlIE1CRURUTFNfVElNSU5HX0MgZW5hYmxlZC4KKyAqCisgKiBZb3Ugd2lsbCBuZWVkIHRvIHByb3ZpZGUgYSBoZWFkZXIgInRpbWluZ19hbHQuaCIgYW5kIGFuIGltcGxlbWVudGF0aW9uIGF0CisgKiBjb21waWxlIHRpbWUuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1RJTUlOR19BTFQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0FMVAorICoKKyAqIE1CRURUTFNfX01PRFVMRV9OQU1FX19BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91cgorICogYWx0ZXJuYXRlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgYSBzeW1tZXRyaWMgY3J5cHRvIG9yIGhhc2ggbW9kdWxlIChlLmcuCisgKiBwbGF0Zm9ybSBzcGVjaWZpYyBhc3NlbWJseSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zKS4gS2VlcCBpbiBtaW5kIHRoYXQKKyAqIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgKgorICogVGhpcyByZXBsYWNlcyB0aGUgd2hvbGUgbW9kdWxlLiBJZiB5b3Ugb25seSB3YW50IHRvIHJlcGxhY2Ugb25lIG9mIHRoZQorICogZnVuY3Rpb25zLCB1c2Ugb25lIG9mIHRoZSBNQkVEVExTX19GVU5DVElPTl9OQU1FX19BTFQgZmxhZ3MuCisgKgorICogRXhhbXBsZTogSW4gY2FzZSB5b3UgdW5jb21tZW50IE1CRURUTFNfQUVTX0FMVCwgbWJlZCBUTFMgd2lsbCBubyBsb25nZXIKKyAqIHByb3ZpZGUgdGhlICJzdHJ1Y3QgbWJlZHRsc19hZXNfY29udGV4dCIgZGVmaW5pdGlvbiBhbmQgb21pdCB0aGUgYmFzZSBmdW5jdGlvbgorICogZGVjbGFyYXRpb25zIGFuZCBpbXBsZW1lbnRhdGlvbnMuICJhZXNfYWx0LmgiIHdpbGwgYmUgaW5jbHVkZWQgZnJvbQorICogImFlcy5oIiB0byBpbmNsdWRlIHRoZSBuZXcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgKgorICogVW5jb21tZW50IGEgbWFjcm8gdG8gZW5hYmxlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZworICogbW9kdWxlLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BUkM0X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQkxPV0ZJU0hfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1hURUFfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDJfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDRfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19NRDVfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19SSVBFTUQxNjBfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19TSEExX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBMjU2X0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBNTEyX0FMVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQKKyAqCisgKiBNQkVEVExTX19GVU5DVElPTl9OQU1FX19BTFQ6IFVuY29tbWVudCBhIG1hY3JvIHRvIGxldCBtYmVkIFRMUyB1c2UgeW91CisgKiBhbHRlcm5hdGUgY29yZSBpbXBsZW1lbnRhdGlvbiBvZiBzeW1tZXRyaWMgY3J5cHRvIG9yIGhhc2ggZnVuY3Rpb24uIEtlZXAgaW4KKyAqIG1pbmQgdGhhdCBmdW5jdGlvbiBwcm90b3R5cGVzIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCisgKgorICogVGhpcyByZXBsYWNlcyBvbmx5IG9uZSBmdW5jdGlvbi4gVGhlIGhlYWRlciBmaWxlIGZyb20gbWJlZCBUTFMgaXMgc3RpbGwKKyAqIHVzZWQsIGluIGNvbnRyYXN0IHRvIHRoZSBNQkVEVExTX19NT0RVTEVfTkFNRV9fQUxUIGZsYWdzLgorICoKKyAqIEV4YW1wbGU6IEluIGNhc2UgeW91IHVuY29tbWVudCBNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVCwgbWJlZCBUTFMgd2lsbAorICogbm8gbG9uZ2VyIHByb3ZpZGUgdGhlIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCkgZnVuY3Rpb24sIGJ1dCBpdCB3aWxsIHN0aWxsIHByb3ZpZGUKKyAqIHRoZSBvdGhlciBmdW5jdGlvbiAodXNpbmcgeW91ciBtYmVkdGxzX3NoYTFfcHJvY2VzcygpIGZ1bmN0aW9uKSBhbmQgdGhlIGRlZmluaXRpb24KKyAqIG9mIG1iZWR0bHNfc2hhMV9jb250ZXh0LCBzbyB5b3VyIGltcGxlbWVudGF0aW9uIG9mIG1iZWR0bHNfc2hhMV9wcm9jZXNzIG11c3QgYmUgY29tcGF0aWJsZQorICogd2l0aCB0aGlzIGRlZmluaXRpb24uCisgKgorICogTm90ZTogaWYgeW91IHVzZSB0aGUgQUVTX3h4eF9BTFQgbWFjcm9zLCB0aGVuIGlzIGlzIHJlY29tbWVuZGVkIHRvIGFsc28gc2V0CisgKiBNQkVEVExTX0FFU19ST01fVEFCTEVTIGluIG9yZGVyIHRvIGhlbHAgdGhlIGxpbmtlciBnYXJiYWdlLWNvbGxlY3QgdGhlIEFFUworICogdGFibGVzLgorICoKKyAqIFVuY29tbWVudCBhIG1hY3JvIHRvIGVuYWJsZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGZ1bmN0aW9uLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX01ENF9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfTUQ1X1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQKKy8vI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfU0hBNTEyX1BST0NFU1NfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19ERVNfU0VUS0VZX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQKKy8vI2RlZmluZSBNQkVEVExTX0RFUzNfQ1JZUFRfRUNCX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX1NFVEtFWV9FTkNfQUxUCisvLyNkZWZpbmUgTUJFRFRMU19BRVNfU0VUS0VZX0RFQ19BTFQKKy8vI2RlZmluZSBNQkVEVExTX0FFU19FTkNSWVBUX0FMVAorLy8jZGVmaW5lIE1CRURUTFNfQUVTX0RFQ1JZUFRfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZCisgKgorICogRW5hYmxlcyB0ZXN0aW5nIGFuZCB1c2Ugb2YgbWJlZCBUTFMgd2l0aG91dCBhbnkgY29uZmlndXJlZCBlbnRyb3B5IHNvdXJjZXMuCisgKiBUaGlzIHBlcm1pdHMgdXNlIG9mIHRoZSBsaWJyYXJ5IG9uIHBsYXRmb3JtcyBiZWZvcmUgYW4gZW50cm9weSBzb3VyY2UgaGFzCisgKiBiZWVuIGludGVncmF0ZWQgKHNlZSBmb3IgZXhhbXBsZSB0aGUgTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCBvciB0aGUKKyAqIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEIHN3aXRjaGVzKS4KKyAqCisgKiBXQVJOSU5HISBUaGlzIHN3aXRjaCBNVVNUIGJlIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBhbmQgaXMgc3VpdGFibGUKKyAqIG9ubHkgZm9yIGRldmVsb3BtZW50LgorICogRW5hYmxpbmcgdGhlIHN3aXRjaCBuZWdhdGVzIGFueSBzZWN1cml0eSBwcm92aWRlZCBieSB0aGUgbGlicmFyeS4KKyAqCisgKiBSZXF1aXJlcyBNQkVEVExTX0VOVFJPUFlfQywgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBsZXQgbWJlZCBUTFMgdXNlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGEKKyAqIGhhcmR3YXJlIGVudHJvcHkgY29sbGVjdG9yLgorICoKKyAqIFlvdXIgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgXGMgbWJlZHRsc19oYXJkd2FyZV9wb2xsKCksIGhhdmUgdGhlIHNhbWUKKyAqIHByb3RvdHlwZSBhcyBkZWNsYXJlZCBpbiBlbnRyb3B5X3BvbGwuaCwgYW5kIGFjY2VwdCBOVUxMIGFzIGZpcnN0IGFyZ3VtZW50LgorICoKKyAqIFVuY29tbWVudCB0byB1c2UgeW91ciBvd24gaGFyZHdhcmUgZW50cm9weSBjb2xsZWN0b3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FFU19ST01fVEFCTEVTCisgKgorICogU3RvcmUgdGhlIEFFUyB0YWJsZXMgaW4gUk9NLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIHN0b3JlIHRoZSBBRVMgdGFibGVzIGluIFJPTS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZCisgKgorICogVXNlIGxlc3MgUk9NIGZvciB0aGUgQ2FtZWxsaWEgaW1wbGVtZW50YXRpb24gKHNhdmVzIGFib3V0IDc2OCBieXRlcykuCisgKgorICogVW5jb21tZW50IHRoaXMgbWFjcm8gdG8gdXNlIGxlc3MgbWVtb3J5IGZvciBDYW1lbGxpYS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworICoKKyAqIEVuYWJsZSBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZSAoQ0JDKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCisgKgorICogRW5hYmxlIENpcGhlciBGZWVkYmFjayBtb2RlIChDRkIpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqLworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKyAqCisgKiBFbmFibGUgQ291bnRlciBCbG9jayBDaXBoZXIgbW9kZSAoQ1RSKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCisgKgorICogRW5hYmxlIE5VTEwgY2lwaGVyLgorICogV2FybmluZzogT25seSBkbyBzbyB3aGVuIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gVGhpcyBhbGxvd3MgZm9yCisgKiBlbmNyeXB0aW9uIG9yIGNoYW5uZWxzIHdpdGhvdXQgYW55IHNlY3VyaXR5IQorICoKKyAqIFJlcXVpcmVzIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTIGFzIHdlbGwgdG8gZW5hYmxlCisgKiB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlczoKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfTlVMTF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX01ENQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQQorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSB0aGUgTlVMTCBjaXBoZXIgYW5kIGNpcGhlcnN1aXRlcworICovCisvLyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKKyAqCisgKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1hYWDogVW5jb21tZW50IG9yIGNvbW1lbnQgbWFjcm9zIHRvIGFkZCBzdXBwb3J0IGZvcgorICogc3BlY2lmaWMgcGFkZGluZyBtb2RlcyBpbiB0aGUgY2lwaGVyIGxheWVyIHdpdGggY2lwaGVyIG1vZGVzIHRoYXQgc3VwcG9ydAorICogcGFkZGluZyAoZS5nLiBDQkMpCisgKgorICogSWYgeW91IGRpc2FibGUgYWxsIHBhZGRpbmcgbW9kZXMsIG9ubHkgZnVsbCBibG9ja3MgY2FuIGJlIHVzZWQgd2l0aCBDQkMuCisgKgorICogRW5hYmxlIHBhZGRpbmcgbW9kZXMgaW4gdGhlIGNpcGhlciBsYXllci4KKyAqLworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworI2RlZmluZSBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMKKyAqCisgKiBFbmFibGUgd2VhayBjaXBoZXJzdWl0ZXMgaW4gU1NMIC8gVExTLgorICogV2FybmluZzogT25seSBkbyBzbyB3aGVuIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gVGhpcyBhbGxvd3MgZm9yCisgKiBjaGFubmVscyB3aXRoIHZpcnR1YWxseSBubyBzZWN1cml0eSBhdCBhbGwhCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzOgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBlbmFibGUgd2VhayBjaXBoZXJzdWl0ZXMKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUworICoKKyAqIFJlbW92ZSBSQzQgY2lwaGVyc3VpdGVzIGJ5IGRlZmF1bHQgaW4gU1NMIC8gVExTLgorICogVGhpcyBmbGFnIHJlbW92ZXMgdGhlIGNpcGhlcnN1aXRlcyBiYXNlZCBvbiBSQzQgZnJvbSB0aGUgZGVmYXVsdCBsaXN0IGFzCisgKiByZXR1cm5lZCBieSBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcygpLiBIb3dldmVyLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICogZW5hYmxlIChzb21lIG9mKSB0aGVtIHdpdGggbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoKSBieSBpbmNsdWRpbmcgdGhlbQorICogZXhwbGljaXRseS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZW1vdmUgUkM0IGNpcGhlcnN1aXRlcyBieSBkZWZhdWx0LgorICovCisjZGVmaW5lIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorICoKKyAqIE1CRURUTFNfRUNQX1hYWFhfRU5BQkxFRDogRW5hYmxlcyBzcGVjaWZpYyBjdXJ2ZXMgd2l0aGluIHRoZSBFbGxpcHRpYyBDdXJ2ZQorICogbW9kdWxlLiAgQnkgZGVmYXVsdCBhbGwgc3VwcG9ydGVkIGN1cnZlcyBhcmUgZW5hYmxlZC4KKyAqCisgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSBjdXJ2ZSBhbmQgZnVuY3Rpb25zIGZvciBpdAorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKKyNkZWZpbmUgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ1BfTklTVF9PUFRJTQorICoKKyAqIEVuYWJsZSBzcGVjaWZpYyAnbW9kdWxvIHAnIHJvdXRpbmVzIGZvciBlYWNoIE5JU1QgcHJpbWUuCisgKiBEZXBlbmRpbmcgb24gdGhlIHByaW1lIGFuZCBhcmNoaXRlY3R1cmUsIG1ha2VzIG9wZXJhdGlvbnMgNCB0byA4IHRpbWVzCisgKiBmYXN0ZXIgb24gdGhlIGNvcnJlc3BvbmRpbmcgY3VydmUuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgTklTVCBjdXJ2ZXMgb3B0aW1pc2F0aW9uLgorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX05JU1RfT1BUSU0KKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQworICoKKyAqIEVuYWJsZSBkZXRlcm1pbmlzdGljIEVDRFNBIChSRkMgNjk3OSkuCisgKiBTdGFuZGFyZCBFQ0RTQSBpcyAiZnJhZ2lsZSIgaW4gdGhlIHNlbnNlIHRoYXQgbGFjayBvZiBlbnRyb3B5IHdoZW4gc2lnbmluZworICogbWF5IHJlc3VsdCBpbiBhIGNvbXByb21pc2Ugb2YgdGhlIGxvbmctdGVybSBzaWduaW5nIGtleS4gVGhpcyBpcyBhdm9pZGVkIGJ5CisgKiB0aGUgZGV0ZXJtaW5pc3RpYyB2YXJpYW50LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0hNQUNfRFJCR19DCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQS4KKyAqLworI2RlZmluZSBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBQU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBESEUtUFNLIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ESE1fQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1QU0sgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorICoKKyAqIEVuYWJsZSB0aGUgUlNBLVBTSyBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBSU0Etb25seSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUlNBX0MsIE1CRURUTFNfUEtDUzFfVjE1LAorICogICAgICAgICAgIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBESEUtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19ESE1fQywgTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1SU0EgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDREhfQywgTUJFRFRMU19SU0FfQywgTUJFRFRMU19QS0NTMV9WMTUsCisgKiAgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DCisgKgorICogVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICovCisjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RIRS1FQ0RTQSBiYXNlZCBjaXBoZXJzdWl0ZSBtb2RlcyBpbiBTU0wgLyBUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNESF9DLCBNQkVEVExTX0VDRFNBX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQywKKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVECisgKgorICogRW5hYmxlIHRoZSBFQ0RILUVDRFNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDREgtUlNBIGJhc2VkIGNpcGhlcnN1aXRlIG1vZGVzIGluIFNTTCAvIFRMUy4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ0RIX0MsIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqLworI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECisKKy8qKgorICogXGRlZiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQKKyAqCisgKiBFbmFibGUgdGhlIEVDSlBBS0UgYmFzZWQgY2lwaGVyc3VpdGUgbW9kZXMgaW4gU1NMIC8gVExTLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gRUMgSi1QQUtFIHN1cHBvcnQgaXMgYmFzZWQgb24gdGhlCisgKiBUaHJlYWQgdjEuMC4wIHNwZWNpZmljYXRpb247IGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpY2F0aW9uCisgKiBtaWdodCBzdGlsbCBoYXBwZW4uIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDSlBBS0VfQworICogICAgICAgICAgIE1CRURUTFNfU0hBMjU2X0MKKyAqICAgICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorICoKKyAqIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIGNpcGhlcnN1aXRlcyAoaWYgb3RoZXIgcmVxdWlzaXRlcyBhcmUKKyAqIGVuYWJsZWQgYXMgd2VsbCk6CisgKiAgICAgIE1CRURUTFNfVExTX0VDSlBBS0VfV0lUSF9BRVNfMTI4X0NDTV84CisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKyAqCisgKiBFbmhhbmNlIHN1cHBvcnQgZm9yIHJlYWRpbmcgRUMga2V5cyB1c2luZyB2YXJpYW50cyBvZiBTRUMxIG5vdCBhbGxvd2VkIGJ5CisgKiBSRkMgNTkxNSBhbmQgUkZDIDU0ODAuCisgKgorICogQ3VycmVudGx5IHRoaXMgbWVhbnMgcGFyc2luZyB0aGUgU3BlY2lmaWVkRUNEb21haW4gY2hvaWNlIG9mIEVDCisgKiBwYXJhbWV0ZXJzIChvbmx5IGtub3duIGdyb3VwcyBhcmUgc3VwcG9ydGVkLCBub3QgYXJiaXRyYXJ5IGRvbWFpbnMsIHRvCisgKiBhdm9pZCB2YWxpZGF0aW9uIGlzc3VlcykuCisgKgorICogRGlzYWJsZSBpZiB5b3Ugb25seSBuZWVkIHRvIHN1cHBvcnQgUkZDIDU5MTUgKyA1NDgwIGtleSBmb3JtYXRzLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkKKyAqCisgKiBFbmFibGUgYSBkdW1teSBlcnJvciBmdW5jdGlvbiB0byBtYWtlIHVzZSBvZiBtYmVkdGxzX3N0cmVycm9yKCkgaW4KKyAqIHRoaXJkIHBhcnR5IGxpYnJhcmllcyBlYXNpZXIgd2hlbiBNQkVEVExTX0VSUk9SX0MgaXMgZGlzYWJsZWQKKyAqIChubyBlZmZlY3Qgd2hlbiBNQkVEVExTX0VSUk9SX0MgaXMgZW5hYmxlZCkuCisgKgorICogWW91IGNhbiBzYWZlbHkgZGlzYWJsZSB0aGlzIGlmIE1CRURUTFNfRVJST1JfQyBpcyBlbmFibGVkLCBvciBpZiB5b3UncmUKKyAqIG5vdCB1c2luZyBtYmVkdGxzX3N0cmVycm9yKCkgb3IgZXJyb3Jfc3RyZXJyb3IoKSBpbiB5b3VyIGFwcGxpY2F0aW9uLgorICoKKyAqIERpc2FibGUgaWYgeW91IHJ1biBpbnRvIG5hbWUgY29uZmxpY3RzIGFuZCB3YW50IHRvIHJlYWxseSByZW1vdmUgdGhlCisgKiBtYmVkdGxzX3N0cmVycm9yKCkKKyAqLworI2RlZmluZSBNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZCisKKy8qKgorICogXGRlZiBNQkVEVExTX0dFTlBSSU1FCisgKgorICogRW5hYmxlIHRoZSBwcmltZS1udW1iZXIgZ2VuZXJhdGlvbiBjb2RlLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19HRU5QUklNRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19GU19JTworICoKKyAqIEVuYWJsZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIGZpbGVzeXN0ZW0uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19GU19JTworCisvKioKKyAqIFxkZWYgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworICoKKyAqIERvIG5vdCBhZGQgZGVmYXVsdCBlbnRyb3B5IHNvdXJjZXMuIFRoZXNlIGFyZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMsCisgKiBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2sgYW5kIEhBVkVHRSBiYXNlZCBwb2xsIGZ1bmN0aW9ucy4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCB0byBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBhZGRlZCBlbnRyb3B5IHNvdXJjZXMgaW4gYW4KKyAqIGFwcGxpY2F0aW9uLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIHByZXZlbnQgbG9hZGluZyBvZiBkZWZhdWx0IGVudHJvcHkgZnVuY3Rpb25zLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUworCisvKioKKyAqIFxkZWYgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZCisgKgorICogRG8gbm90IHVzZSBidWlsdC1pbiBwbGF0Zm9ybSBlbnRyb3B5IGZ1bmN0aW9ucy4KKyAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydAorICogc3RhbmRhcmRzIGxpa2UgdGhlIC9kZXYvdXJhbmRvbSBvciBXaW5kb3dzIENyeXB0b0FQSS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHRoZSBidWlsdC1pbiBwbGF0Zm9ybSBlbnRyb3B5IGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19FTlRST1BZX0ZPUkNFX1NIQTI1NgorICoKKyAqIEZvcmNlIHRoZSBlbnRyb3B5IGFjY3VtdWxhdG9yIHRvIHVzZSBhIFNIQS0yNTYgYWNjdW11bGF0b3IgaW5zdGVhZCBvZiB0aGUKKyAqIGRlZmF1bHQgU0hBLTUxMiBiYXNlZCBvbmUgKGlmIGJvdGggYXJlIGF2YWlsYWJsZSkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU0hBMjU2X0MKKyAqCisgKiBPbiAzMi1iaXQgc3lzdGVtcyBTSEEtMjU2IGNhbiBiZSBtdWNoIGZhc3RlciB0aGFuIFNIQS01MTIuIFVzZSB0aGlzIG9wdGlvbgorICogaWYgeW91IGhhdmUgcGVyZm9ybWFuY2UgY29uY2VybnMuCisgKgorICogVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgYm90aCBNQkVEVExTX1NIQTI1Nl9DIGFuZAorICogTUJFRFRMU19TSEE1MTJfQyBhcmUgZGVmaW5lZC4gT3RoZXJ3aXNlIHRoZSBhdmFpbGFibGUgaGFzaCBtb2R1bGUgaXMgdXNlZC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECisgKgorICogRW5hYmxlIHRoZSBub24tdm9sYXRpbGUgKE5WKSBzZWVkIGZpbGUtYmFzZWQgZW50cm9weSBzb3VyY2UuCisgKiAoQWxzbyBlbmFibGVzIHRoZSBOViBzZWVkIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGluIHRoZSBwbGF0Zm9ybSBsYXllcikKKyAqCisgKiBUaGlzIGlzIGNydWNpYWwgKGlmIG5vdCByZXF1aXJlZCkgb24gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEKKyAqIGNyeXB0b2dyYXBoaWMgZW50cm9weSBzb3VyY2UgKGluIGhhcmR3YXJlIG9yIGtlcm5lbCkgYXZhaWxhYmxlLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VOVFJPUFlfQywgTUJFRFRMU19QTEFURk9STV9DCisgKgorICogXG5vdGUgVGhlIHJlYWQvd3JpdGUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGVudHJvcHkgc291cmNlIGFyZQorICogICAgICAgZGV0ZXJtaW5lZCBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIsIGFuZCBjYW4gYmUgbW9kaWZpZWQgYXQgcnVudGltZSBhbmQvb3IKKyAqICAgICAgIGNvbXBpbGUtdGltZSBkZXBlbmRpbmcgb24gdGhlIGZsYWdzIChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfKikgdXNlZC4KKyAqCisgKiBcbm90ZSBJZiB5b3UgdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucyB0aGF0IHJlYWQgYSBzZWVkZmlsZQorICogICAgICAgd2l0aCByZWd1bGFyIGZvcGVuKCksIHBsZWFzZSBtYWtlIHN1cmUgeW91IG1ha2UgYSBzZWVkZmlsZSB3aXRoIHRoZQorICogICAgICAgcHJvcGVyIG5hbWUgKGRlZmluZWQgaW4gTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFKSBhbmQgYXQKKyAqICAgICAgIGxlYXN0IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFIGJ5dGVzIGluIHNpemUgdGhhdCBjYW4gYmUgcmVhZCBmcm9tCisgKiAgICAgICBhbmQgd3JpdHRlbiB0byBvciB5b3Ugd2lsbCBnZXQgYW4gZW50cm9weSBzb3VyY2UgZXJyb3IhIFRoZSBkZWZhdWx0CisgKiAgICAgICBpbXBsZW1lbnRhdGlvbiB3aWxsIG9ubHkgdXNlIHRoZSBmaXJzdCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRQorICogICAgICAgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKyAqCisgKiBcbm90ZSBUaGUgZW50cm9weSBjb2xsZWN0b3Igd2lsbCB3cml0ZSB0byB0aGUgc2VlZCBmaWxlIGJlZm9yZSBlbnRyb3B5IGlzCisgKiAgICAgICBnaXZlbiB0byBhbiBleHRlcm5hbCBzb3VyY2UsIHRvIHVwZGF0ZSBpdC4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECisKKy8qKgorICogXGRlZiBNQkVEVExTX01FTU9SWV9ERUJVRworICoKKyAqIEVuYWJsZSBkZWJ1Z2dpbmcgb2YgYnVmZmVyIGFsbG9jYXRvciBtZW1vcnkgaXNzdWVzLiBBdXRvbWF0aWNhbGx5IHByaW50cworICogKHRvIHN0ZGVycikgYWxsIChmYXRhbCkgbWVzc2FnZXMgb24gbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzLiBFbmFibGVzCisgKiBmdW5jdGlvbiBmb3IgJ2RlYnVnIG91dHB1dCcgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBsZXQgdGhlIGJ1ZmZlciBhbGxvY2F0b3IgcHJpbnQgb3V0IGVycm9yIG1lc3NhZ2VzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfREVCVUcKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRQorICoKKyAqIEluY2x1ZGUgYmFja3RyYWNlIGluZm9ybWF0aW9uIHdpdGggZWFjaCBhbGxvY2F0ZWQgYmxvY2suCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKiAgICAgICAgICAgR0xJQkMtY29tcGF0aWJsZSBiYWNrdHJhY2UoKSBhbiBiYWNrdHJhY2Vfc3ltYm9scygpIHN1cHBvcnQKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byBpbmNsdWRlIGJhY2t0cmFjZSBpbmZvcm1hdGlvbgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVAorICoKKyAqIFN1cHBvcnQgZXh0ZXJuYWwgcHJpdmF0ZSBSU0Ega2V5cyAoZWcgZnJvbSBhIEhTTSkgaW4gdGhlIFBLIGxheWVyLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIGV4dGVybmFsIHByaXZhdGUgUlNBIGtleXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzFfVjE1CisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2MS41IGVuY29kaW5nLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1JTQV9DCisgKgorICogVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFBLQ1MjMSB2MS41IG9wZXJhdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QS0NTMV9WMTUKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzFfVjIxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2Mi4xIGVuY29kaW5nLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01EX0MsIE1CRURUTFNfUlNBX0MKKyAqCisgKiBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUlNBRVMtT0FFUCBhbmQgUlNBU1NBLVBTUyBvcGVyYXRpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjIxCisKKy8qKgorICogXGRlZiBNQkVEVExTX1JTQV9OT19DUlQKKyAqCisgKiBEbyBub3QgdXNlIHRoZSBDaGluZXNlIFJlbWFpbmRlciBUaGVvcmVtIGZvciB0aGUgUlNBIHByaXZhdGUgb3BlcmF0aW9uLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgdGhlIHVzZSBvZiBDUlQgaW4gUlNBLgorICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUlNBX05PX0NSVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TRUxGX1RFU1QKKyAqCisgKiBFbmFibGUgdGhlIGNoZWNrdXAgZnVuY3Rpb25zICgqX3NlbGZfdGVzdCkuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TRUxGX1RFU1QKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU0hBMjU2X1NNQUxMRVIKKyAqCisgKiBFbmFibGUgYW4gaW1wbGVtZW50YXRpb24gb2YgU0hBLTI1NiB0aGF0IGhhcyBsb3dlciBST00gZm9vdHByaW50IGJ1dCBhbHNvCisgKiBsb3dlciBwZXJmb3JtYW5jZS4KKyAqCisgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBtZWFudCB0byBiZSBhIHJlYXNvbm5hYmxlIGNvbXByb21pc2UgYmV0d2VlbgorICogcGVyZm9ybWFuY2UgYW5kIHNpemUuIFRoaXMgdmVyc2lvbiBvcHRpbWl6ZXMgbW9yZSBhZ2dyZXNzaXZlbHkgZm9yIHNpemUgYXQKKyAqIHRoZSBleHBlbnNlIG9mIHBlcmZvcm1hbmNlLiBFZyBvbiBDb3J0ZXgtTTQgaXQgcmVkdWNlcyB0aGUgc2l6ZSBvZgorICogbWJlZHRsc19zaGEyNTZfcHJvY2VzcygpIGZyb20gfjJLQiB0byB+MC41S0IgZm9yIGEgcGVyZm9ybWFuY2UgaGl0IG9mIGFib3V0CisgKiAzMCUuCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB0aGUgc21hbGxlciBpbXBsZW1lbnRhdGlvbiBvZiBTSEEyNTYuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMKKyAqCisgKiBFbmFibGUgc2VuZGluZyBvZiBhbGVydCBtZXNzYWdlcyBpbiBjYXNlIG9mIGVuY291bnRlcmVkIGVycm9ycyBhcyBwZXIgUkZDLgorICogSWYgeW91IGNob29zZSBub3QgdG8gc2VuZCB0aGUgYWxlcnQgbWVzc2FnZXMsIG1iZWQgVExTIGNhbiBzdGlsbCBjb21tdW5pY2F0ZQorICogd2l0aCBvdGhlciBzZXJ2ZXJzLCBvbmx5IGRlYnVnZ2luZyBvZiBmYWlsdXJlcyBpcyBoYXJkZXIuCisgKgorICogVGhlIGFkdmFudGFnZSBvZiBub3Qgc2VuZGluZyBhbGVydCBtZXNzYWdlcywgaXMgdGhhdCBubyBpbmZvcm1hdGlvbiBpcyBnaXZlbgorICogYWJvdXQgcmVhc29ucyBmb3IgZmFpbHVyZXMgdGh1cyBwcmV2ZW50aW5nIGFkdmVyc2FyaWVzIG9mIGdhaW5pbmcgaW50ZWwuCisgKgorICogRW5hYmxlIHNlbmRpbmcgb2YgYWxsIGFsZXJ0IG1lc3NhZ2VzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxMX0FMRVJUX01FU1NBR0VTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9ERUJVR19BTEwKKyAqCisgKiBFbmFibGUgdGhlIGRlYnVnIG1lc3NhZ2VzIGluIFNTTCBtb2R1bGUgZm9yIGFsbCBpc3N1ZXMuCisgKiBEZWJ1ZyBtZXNzYWdlcyBoYXZlIGJlZW4gZGlzYWJsZWQgaW4gc29tZSBwbGFjZXMgdG8gcHJldmVudCB0aW1pbmcKKyAqIGF0dGFja3MgZHVlIHRvICh1bmJhbGFuY2VkKSBkZWJ1Z2dpbmcgZnVuY3Rpb24gY2FsbHMuCisgKgorICogSWYgeW91IG5lZWQgYWxsIGVycm9yIHJlcG9ydGluZyB5b3Ugc2hvdWxkIGVuYWJsZSB0aGlzIGR1cmluZyBkZWJ1Z2dpbmcsCisgKiBidXQgcmVtb3ZlIHRoaXMgZm9yIHByb2R1Y3Rpb24gc2VydmVycyB0aGF0IHNob3VsZCBsb2cgYXMgd2VsbC4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZXBvcnQgYWxsIGRlYnVnIG1lc3NhZ2VzIG9uIGVycm9ycyBpbnRyb2R1Y2luZworICogYSB0aW1pbmcgc2lkZS1jaGFubmVsLgorICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0FMTAorCisvKiogXGRlZiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEVuY3J5cHQtdGhlbi1NQUMsIFJGQyA3MzY2LgorICoKKyAqIFRoaXMgYWxsb3dzIHBlZXJzIHRoYXQgYm90aCBzdXBwb3J0IGl0IHRvIHVzZSBhIG1vcmUgcm9idXN0IHByb3RlY3Rpb24gZm9yCisgKiBjaXBoZXJzdWl0ZXMgdXNpbmcgQ0JDLCBwcm92aWRpbmcgZGVlcCByZXNpc3RhbmNlIGFnYWluc3QgdGltaW5nIGF0dGFja3MKKyAqIG9uIHRoZSBwYWRkaW5nIG9yIHVuZGVybHlpbmcgY2lwaGVyLgorICoKKyAqIFRoaXMgb25seSBhZmZlY3RzIENCQyBjaXBoZXJzdWl0ZXMsIGFuZCBpcyB1c2VsZXNzIGlmIG5vbmUgaXMgZGVmaW5lZC4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fVExTMSAgICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBFbmNyeXB0LXRoZW4tTUFDCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQworCisvKiogXGRlZiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEV4dGVuZGVkIE1hc3RlciBTZWNyZXQsIGFrYSBTZXNzaW9uIEhhc2gKKyAqIChkcmFmdC1pZXRmLXRscy1zZXNzaW9uLWhhc2gtMDIpLgorICoKKyAqIFRoaXMgd2FzIGludHJvZHVjZWQgYXMgInRoZSBwcm9wZXIgZml4IiB0byB0aGUgVHJpcGxlIEhhbmRzaGFrZSBmYW1pbGl5IG9mCisgKiBhdHRhY2tzLCBidXQgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzIHVzZSBpdCAoZXZlbiBpZiB5b3UgZGlzYWJsZQorICogcmVuZWdvdGlhdGlvbiksIHNpbmNlIGl0IGFjdHVhbGx5IGZpeGVzIGEgbW9yZSBmdW5kYW1lbnRhbCBpc3N1ZSBpbiB0aGUKKyAqIG9yaWdpbmFsIFNTTC9UTFMgZGVzaWduLCBhbmQgaGFzIGltcGxpY2F0aW9ucyBiZXlvbmQgVHJpcGxlIEhhbmRzaGFrZS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TU0xfUFJPVE9fVExTMSAgICBvcgorICogICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAgb3IKKyAqICAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgRkFMTEJBQ0tfU0NTViAoZHJhZnQtaWV0Zi10bHMtZG93bmdyYWRlLXNjc3YtMDApLgorICoKKyAqIEZvciBzZXJ2ZXJzLCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgZW5hYmxlIHRoaXMsIHVubGVzcyB5b3Ugc3VwcG9ydAorICogb25seSBvbmUgdmVyc2lvbiBvZiBUTFMsIG9yIGtub3cgZm9yIHN1cmUgdGhhdCBub25lIG9mIHlvdXIgY2xpZW50cworICogaW1wbGVtZW50cyBhIGZhbGxiYWNrIHN0cmF0ZWd5LgorICoKKyAqIEZvciBjbGllbnRzLCB5b3Ugb25seSBuZWVkIHRoaXMgaWYgeW91J3JlIHVzaW5nIGEgZmFsbGJhY2sgc3RyYXRlZ3ksIHdoaWNoCisgKiBpcyBub3QgcmVjb21tZW5kZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCB1bmxlc3MgeW91IGFic29sdXRlbHkgbmVlZCBpdCB0bworICogaW50ZXJvcGVyYXRlIHdpdGggYnVnZ3kgKHZlcnNpb24taW50b2xlcmFudCkgc2VydmVycy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBGQUxMQkFDS19TQ1NWCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCisgKgorICogRW5hYmxlIGhvb2tpbmcgZnVuY3Rpb25zIGluIFNTTCBtb2R1bGUgZm9yIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZgorICogaW5kaXZpZHVhbCByZWNvcmRzLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSBob29raW5nIGZ1bmN0aW9ucy4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKKyAqCisgKiBFbmFibGUgMS9uLTEgcmVjb3JkIHNwbGl0dGluZyBmb3IgQ0JDIG1vZGUgaW4gU1NMdjMgYW5kIFRMUyAxLjAuCisgKgorICogVGhpcyBpcyBhIGNvdW50ZXJtZWFzdXJlIHRvIHRoZSBCRUFTVCBhdHRhY2ssIHdoaWNoIGFsc28gbWluaW1pemVzIHRoZSByaXNrCisgKiBvZiBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcyBjb21wYXJlZCB0byBzZW5kaW5nIDAtbGVuZ3RoIHJlY29yZHMuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgMS9uLTEgcmVjb3JkIHNwbGl0dGluZy4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTgorICoKKyAqIERpc2FibGUgc3VwcG9ydCBmb3IgVExTIHJlbmVnb3RpYXRpb24uCisgKgorICogVGhlIHR3byBtYWluIHVzZXMgb2YgcmVuZWdvdGlhdGlvbiBhcmUgKDEpIHJlZnJlc2gga2V5cyBvbiBsb25nLWxpdmVkCisgKiBjb25uZWN0aW9ucyBhbmQgKDIpIGNsaWVudCBhdXRoZW50aWNhdGlvbiBhZnRlciB0aGUgaW5pdGlhbCBoYW5kc2hha2UuCisgKiBJZiB5b3UgZG9uJ3QgbmVlZCByZW5lZ290aWF0aW9uLCBpdCdzIHByb2JhYmx5IGJldHRlciB0byBkaXNhYmxlIGl0LCBzaW5jZQorICogaXQgaGFzIGJlZW4gYXNzb2NpYXRlZCB3aXRoIHNlY3VyaXR5IGlzc3VlcyBpbiB0aGUgcGFzdCBhbmQgaXMgZWFzeSB0bworICogbWlzdXNlL21pc3VuZGVyc3RhbmQuCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgcmVuZWdvdGlhdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIGFuZCBwYXJzaW5nIFNTTHYyIENsaWVudCBIZWxsbyBtZXNzYWdlcyBmb3IgdGhlCisgKiBTU0wgU2VydmVyIG1vZHVsZSAoTUJFRFRMU19TU0xfU1JWX0MpLgorICoKKyAqIFVuY29tbWVudCB0aGlzIG1hY3JvIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBTU0x2MiBDbGllbnQgSGVsbG8gbWVzc2FnZXMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFCisgKgorICogUGljayB0aGUgY2lwaGVyc3VpdGUgYWNjb3JkaW5nIHRvIHRoZSBjbGllbnQncyBwcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBvdXJzCisgKiBpbiB0aGUgU1NMIFNlcnZlciBtb2R1bGUgKE1CRURUTFNfU1NMX1NSVl9DKS4KKyAqCisgKiBVbmNvbW1lbnQgdGhpcyBtYWNybyB0byByZXNwZWN0IGNsaWVudCdzIGNpcGhlcnN1aXRlIG9yZGVyCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBSRkMgNjA2NiBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiBpbiBTU0wuCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgdGhlIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX01ENV9DCisgKiAgICAgICAgICAgTUJFRFRMU19TSEExX0MKKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBTU0wgMy4wCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19TU0wzCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUQ1X0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTFfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjAKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19UTFMxCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgVExTIDEuMSAoYW5kIERUTFMgMS4wIGlmIERUTFMgaXMgZW5hYmxlZCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTUQ1X0MKKyAqICAgICAgICAgICBNQkVEVExTX1NIQTFfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjEgLyBEVExTIDEuMAorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFRMUyAxLjIgKGFuZCBEVExTIDEuMiBpZiBEVExTIGlzIGVuYWJsZWQpLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NIQTFfQyBvciBNQkVEVExTX1NIQTI1Nl9DIG9yIE1CRURUTFNfU0hBNTEyX0MKKyAqICAgICAgICAgICAoRGVwZW5kcyBvbiBjaXBoZXJzdWl0ZXMpCisgKgorICogQ29tbWVudCB0aGlzIG1hY3JvIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgVExTIDEuMiAvIERUTFMgMS4yCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9QUk9UT19EVExTCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIERUTFMgKGFsbCBhdmFpbGFibGUgdmVyc2lvbnMpLgorICoKKyAqIEVuYWJsZSB0aGlzIGFuZCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgdG8gZW5hYmxlIERUTFMgMS4wLAorICogYW5kL29yIHRoaXMgYW5kIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiB0byBlbmFibGUgRFRMUyAxLjIuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorICogICAgICAgIG9yIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIERUTFMKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9QUk9UT19EVExTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9BTFBOCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFJGQyA3MzAxIEFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIE5lZ290aWF0aW9uLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIEFMUE4uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxQTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYW50aS1yZXBsYXkgbWVjaGFuaXNtIGluIERUTFMuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1RMU19DCisgKiAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fRFRMUworICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGlzIG9mdGVuIGEgc2VjdXJpdHkgcmlzayEKKyAqIFNlZSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkoKSBmb3IgZGV0YWlscy4KKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBhbnRpLXJlcGxheSBpbiBEVExTLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEhlbGxvVmVyaWZ5UmVxdWVzdCBvbiBEVExTIHNlcnZlcnMuCisgKgorICogVGhpcyBmZWF0dXJlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBwcmV2ZW50IERUTFMgc2VydmVycyBiZWluZyB1c2VkIGFzCisgKiBhbXBsaWZpZXJzIGluIERvUyBhdHRhY2tzIGFnYWluc3Qgb3RoZXIgaG9zdHMuIEl0IHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZAorICogdW5sZXNzIHlvdSBrbm93IGZvciBzdXJlIGFtcGxpZmljYXRpb24gY2Fubm90IGJlIGEgcHJvYmxlbSBpbiB0aGUKKyAqIGVudmlyb25tZW50IGluIHdoaWNoIHlvdXIgc2VydmVyIG9wZXJhdGVzLgorICoKKyAqIFx3YXJuaW5nIERpc2FibGluZyB0aGlzIGNhbiBiYSBhIHNlY3VyaXR5IHJpc2shIChzZWUgYWJvdmUpCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBIZWxsb1ZlcmlmeVJlcXVlc3QuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UKKyAqCisgKiBFbmFibGUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgY2xpZW50cyB0aGF0IHJlY29ubmVjdCBmcm9tIHRoZSBzYW1lIHBvcnQuCisgKgorICogU29tZSBjbGllbnRzIHVuZXhwZWN0ZWRseSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgdHJ5IHRvIHJlY29ubmVjdCB1c2luZyB0aGUKKyAqIHNhbWUgc291cmNlIHBvcnQuIFRoaXMgbmVlZHMgc3BlY2lhbCBzdXBwb3J0IGZyb20gdGhlIHNlcnZlciB0byBoYW5kbGUgdGhlCisgKiBuZXcgY29ubmVjdGlvbiBzZWN1cmVseSwgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gNC4yLjggb2YgUkZDIDYzNDcuIFRoaXMKKyAqIGZsYWcgZW5hYmxlcyB0aGF0IHN1cHBvcnQuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCisgKgorICogQ29tbWVudCB0aGlzIHRvIGRpc2FibGUgc3VwcG9ydCBmb3IgY2xpZW50cyByZXVzaW5nIHRoZSBzb3VyY2UgcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVAorICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBhIGxpbWl0IG9mIHJlY29yZHMgd2l0aCBiYWQgTUFDLgorICoKKyAqIFNlZSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0KCkuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX1BST1RPX0RUTFMKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFJGQyA1MDc3IHNlc3Npb24gdGlja2V0cyBpbiBTU0wuCisgKiBDbGllbnQtc2lkZSwgcHJvdmlkZXMgZnVsbCBzdXBwb3J0IGZvciBzZXNzaW9uIHRpY2tldHMgKG1haW50YWluYW5jZSBvZiBhCisgKiBzZXNzaW9uIHN0b3JlIHJlbWFpbnMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBhcHBsaWNhdGlvbiwgdGhvdWdoKS4KKyAqIFNlcnZlci1zaWRlLCB5b3UgYWxzbyBuZWVkIHRvIHByb3ZpZGUgY2FsbGJhY2tzIGZvciB3cml0aW5nIGFuZCBwYXJzaW5nCisgKiB0aWNrZXRzLCBpbmNsdWRpbmcgYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIGFuZCBrZXkgbWFuYWdlbWVudC4gRXhhbXBsZQorICogY2FsbGJhY2tzIGFyZSBwcm92aWRlZCBieSBNQkVEVExTX1NTTF9USUNLRVRfQy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBTU0wgc2Vzc2lvbiB0aWNrZXRzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUworICoKKyAqIEVuYWJsZSBzdXBwb3J0IGZvciBleHBvcnRpbmcga2V5IGJsb2NrIGFuZCBtYXN0ZXIgc2VjcmV0LgorICogVGhpcyBpcyByZXF1aXJlZCBmb3IgY2VydGFpbiB1c2VycyBvZiBUTFMsIGUuZy4gRUFQLVRMUy4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBrZXkgZXhwb3J0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSBpbiBTU0wuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHNlcnZlciBuYW1lIGluZGljYXRpb24gaW4gU1NMCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgdHJ1bmNhdGVkIEhNQUMgaW4gU1NMLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHRydW5jYXRlZCBITUFDIGluIFNTTAorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RIUkVBRElOR19BTFQKKyAqCisgKiBQcm92aWRlIHlvdXIgb3duIGFsdGVybmF0ZSB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb24uCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVEhSRUFESU5HX0MKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyB0byBhbGxvdyB5b3VyIG93biBhbHRlcm5hdGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19USFJFQURJTkdfQUxUCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFECisgKgorICogRW5hYmxlIHRoZSBwdGhyZWFkIHdyYXBwZXIgbGF5ZXIgZm9yIHRoZSB0aHJlYWRpbmcgbGF5ZXIuCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfVEhSRUFESU5HX0MKKyAqCisgKiBVbmNvbW1lbnQgdGhpcyB0byBlbmFibGUgcHRocmVhZCBtdXRleGVzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTCisgKgorICogQWxsb3cgcnVuLXRpbWUgY2hlY2tpbmcgb2YgY29tcGlsZS10aW1lIGVuYWJsZWQgZmVhdHVyZXMuIFRodXMgYWxsb3dpbmcgdXNlcnMKKyAqIHRvIGNoZWNrIGF0IHJ1bi10aW1lIGlmIHRoZSBsaWJyYXJ5IGlzIGZvciBpbnN0YW5jZSBjb21waWxlZCB3aXRoIHRocmVhZGluZworICogc3VwcG9ydCB2aWEgbWJlZHRsc192ZXJzaW9uX2NoZWNrX2ZlYXR1cmUoKS4KKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19WRVJTSU9OX0MKKyAqCisgKiBDb21tZW50IHRoaXMgdG8gZGlzYWJsZSBydW4tdGltZSBjaGVja2luZyBhbmQgc2F2ZSBST00gc3BhY2UKKyAqLworI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiBleHRlbnNpb24gaW4gYSB2MSBvciB2MiBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBVbmNvbW1lbnQgdG8gcHJldmVudCBhbiBlcnJvci4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTgorICoKKyAqIElmIHNldCwgdGhlIFg1MDkgcGFyc2VyIHdpbGwgbm90IGJyZWFrLW9mZiB3aGVuIHBhcnNpbmcgYW4gWDUwOSBjZXJ0aWZpY2F0ZQorICogYW5kIGVuY291bnRlcmluZyBhbiB1bmtub3duIGNyaXRpY2FsIGV4dGVuc2lvbi4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBlbmFibGluZyB0aGlzIGNhbiBiZSBhIHNlY3VyaXR5IHJpc2shCisgKgorICogVW5jb21tZW50IHRvIHByZXZlbnQgYW4gZXJyb3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCisgKgorICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIChDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMpLgorICoKKyAqIERpc2FibGluZyB0aGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIG1pcy1pc3N1ZWQgYW5kL29yIG1pc3VzZWQKKyAqIChpbnRlcm1lZGlhdGUpIENBIGFuZCBsZWFmIGNlcnRpZmljYXRlcy4KKyAqCisgKiBcd2FybmluZyBEZXBlbmRpbmcgb24geW91ciBQS0kgdXNlLCBkaXNhYmxpbmcgdGhpcyBjYW4gYmUgYSBzZWN1cml0eSByaXNrIQorICoKKyAqIENvbW1lbnQgdG8gc2tpcCBrZXlVc2FnZSBjaGVja2luZyBmb3IgYm90aCBDQSBhbmQgbGVhZiBjZXJ0aWZpY2F0ZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRQorCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRQorICoKKyAqIEVuYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIGV4dGVuZGVkS2V5VXNhZ2UgZXh0ZW5zaW9uIChsZWFmIGNlcnRpZmljYXRlcykuCisgKgorICogRGlzYWJsaW5nIHRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggbWlzLWlzc3VlZCBhbmQvb3IgbWlzdXNlZCBjZXJ0aWZpY2F0ZXMuCisgKgorICogXHdhcm5pbmcgRGVwZW5kaW5nIG9uIHlvdXIgUEtJIHVzZSwgZGlzYWJsaW5nIHRoaXMgY2FuIGJlIGEgc2VjdXJpdHkgcmlzayEKKyAqCisgKiBDb21tZW50IHRvIHNraXAgZXh0ZW5kZWRLZXlVc2FnZSBjaGVja2luZyBmb3IgY2VydGlmaWNhdGVzLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQKKyAqCisgKiBFbmFibGUgcGFyc2luZyBhbmQgdmVyaWZpY2F0aW9uIG9mIFguNTA5IGNlcnRpZmljYXRlcywgQ1JMcyBhbmQgQ1NSUworICogc2lnbmVkIHdpdGggUlNBU1NBLVBTUyAoYWthIFBLQ1MjMSB2Mi4xKS4KKyAqCisgKiBDb21tZW50IHRoaXMgbWFjcm8gdG8gZGlzYWxsb3cgdXNpbmcgUlNBU1NBLVBTUyBpbiBjZXJ0aWZpY2F0ZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorCisvKioKKyAqIFxkZWYgTUJFRFRMU19aTElCX1NVUFBPUlQKKyAqCisgKiBJZiBzZXQsIHRoZSBTU0wvVExTIG1vZHVsZSB1c2VzIFpMSUIgdG8gc3VwcG9ydCBjb21wcmVzc2lvbiBhbmQKKyAqIGRlY29tcHJlc3Npb24gb2YgcGFja2V0IGRhdGEuCisgKgorICogXHdhcm5pbmcgVExTLWxldmVsIGNvbXByZXNzaW9uIE1BWSBSRURVQ0UgU0VDVVJJVFkhIFNlZSBmb3IgZXhhbXBsZSB0aGUKKyAqIENSSU1FIGF0dGFjay4gQmVmb3JlIGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB5b3Ugc2hvdWxkIGV4YW1pbmUgd2l0aCBjYXJlIGlmCisgKiBDUklNRSBvciBzaW1pbGFyIGV4cGxvaXRzIG1heSBiZSBhIGFwcGxpY2FibGUgdG8geW91ciB1c2UgY2FzZS4KKyAqCisgKiBcbm90ZSBDdXJyZW50bHkgY29tcHJlc3Npb24gY2FuJ3QgYmUgdXNlZCB3aXRoIERUTFMuCisgKgorICogVXNlZCBpbjogbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFRoaXMgZmVhdHVyZSByZXF1aXJlcyB6bGliIGxpYnJhcnkgYW5kIGhlYWRlcnMgdG8gYmUgcHJlc2VudC4KKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHVzZSBvZiBaTElCCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1pMSUJfU1VQUE9SVAorLyogXH0gbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBmZWF0dXJlIHN1cHBvcnQgKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBtb2R1bGVzCisgKgorICogVGhpcyBzZWN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50aXJlIG1vZHVsZXMgaW4gbWJlZCBUTFMKKyAqIFx7CisgKi8KKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTTklfQworICoKKyAqIEVuYWJsZSBBRVMtTkkgc3VwcG9ydCBvbiB4ODYtNjQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hZXNuaS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2Flcy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUVTLU5JIGluc3RydWN0aW9ucyBvbiB4ODYtNjQKKyAqLworI2RlZmluZSBNQkVEVExTX0FFU05JX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQUVTX0MKKyAqCisgKiBFbmFibGUgdGhlIEFFUyBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9hZXMuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGVtLmMKKyAqICAgICAgICAgIGxpYnJhcnkvY3RyX2RyYmcuYworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBjaXBoZXJzdWl0ZXMgKGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwpOgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEKKyAqCisgKiBQRU1fUEFSU0UgdXNlcyBBRVMgZm9yIGRlY3J5cHRpbmcgZW5jcnlwdGVkIGtleXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BRVNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19BUkM0X0MKKyAqCisgKiBFbmFibGUgdGhlIEFSQ0ZPVVIgc3RyZWFtIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FyYzQuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BUkM0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQVNOMV9QQVJTRV9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIEFTTjEgcGFyc2VyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvYXNuMS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3g1MDkuYworICogICAgICAgICAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9wa2NzMTIuYworICogICAgICAgICAgbGlicmFyeS9wa2NzNS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3BrcGFyc2UuYworICovCisjZGVmaW5lIE1CRURUTFNfQVNOMV9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0FTTjFfV1JJVEVfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBBU04xIHdyaXRlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2FzbjF3cml0ZS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2VjZHNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGt3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDlfY3JlYXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkveDUwOXdyaXRlX2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOXdyaXRlX2Nzci5jCisgKi8KKyNkZWZpbmUgTUJFRFRMU19BU04xX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQkFTRTY0X0MKKyAqCisgKiBFbmFibGUgdGhlIEJhc2U2NCBtb2R1bGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9iYXNlNjQuYworICogQ2FsbGVyOiAgbGlicmFyeS9wZW0uYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBQRU0gc3VwcG9ydCAocmVxdWlyZWQgYnkgWC41MDkpLgorICovCisjZGVmaW5lIE1CRURUTFNfQkFTRTY0X0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQklHTlVNX0MKKyAqCisgKiBFbmFibGUgdGhlIG11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9iaWdudW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9lY3AuYworICogICAgICAgICAgbGlicmFyeS9lY2RzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3JzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBSU0EsIERITSBhbmQgRUNDIChFQ0RILCBFQ0RTQSkgc3VwcG9ydC4KKyAqLworI2RlZmluZSBNQkVEVExTX0JJR05VTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0JMT1dGSVNIX0MKKyAqCisgKiBFbmFibGUgdGhlIEJsb3dmaXNoIGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Jsb3dmaXNoLmMKKyAqLworI2RlZmluZSBNQkVEVExTX0JMT1dGSVNIX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfQ0FNRUxMSUFfQworICoKKyAqIEVuYWJsZSB0aGUgQ2FtZWxsaWEgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY2FtZWxsaWEuYworICogQ2FsbGVyOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorICogICAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CisgKiAgICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CisgKi8KKyNkZWZpbmUgTUJFRFRMU19DQU1FTExJQV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NDTV9DCisgKgorICogRW5hYmxlIHRoZSBDb3VudGVyIHdpdGggQ0JDLU1BQyAoQ0NNKSBtb2RlIGZvciAxMjgtYml0IGJsb2NrIGNpcGhlci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NjbS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgQUVTLUNDTSBjaXBoZXJzdWl0ZXMsIGlmIG90aGVyIHJlcXVpc2l0ZXMgYXJlCisgKiBlbmFibGVkIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DQ01fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DRVJUU19DCisgKgorICogRW5hYmxlIHRoZSB0ZXN0IGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NlcnRzLmMKKyAqIENhbGxlcjoKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGZvciB0ZXN0aW5nIChzc2xfY2xpZW50L3NlcnZlcikuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DRVJUU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NJUEhFUl9DCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIGNpcGhlciBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2NpcGhlci5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF90bHMuYworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBjaXBoZXIgd3JhcHBlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19DTUFDX0MKKyAqCisgKiBFbmFibGUgdGhlIENNQUMgKENpcGhlci1iYXNlZCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUpIG1vZGUgZm9yIGJsb2NrCisgKiBjaXBoZXJzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvY21hYy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19ERVNfQworICoKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ01BQ19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0NUUl9EUkJHX0MKKyAqCisgKiBFbmFibGUgdGhlIENUUl9EUkJHIEFFUy0yNTYtYmFzZWQgcmFuZG9tIGdlbmVyYXRvci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2N0cl9kcmJnLmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BRVNfQworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBDVFJfRFJCRyBBRVMtMjU2IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICovCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ERUJVR19DCisgKgorICogRW5hYmxlIHRoZSBkZWJ1ZyBmdW5jdGlvbnMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9kZWJ1Zy5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGVidWdnaW5nIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX0RFQlVHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfREVTX0MKKyAqCisgKiBFbmFibGUgdGhlIERFUyBibG9jayBjaXBoZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9kZXMuYworICogQ2FsbGVyOiAgbGlicmFyeS9wZW0uYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIHRoZSBmb2xsb3dpbmcgY2lwaGVyc3VpdGVzIChpZiBvdGhlciByZXF1aXNpdGVzIGFyZQorICogZW5hYmxlZCBhcyB3ZWxsKToKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKiAgICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKKyAqICAgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorICogICAgICBNQkVEVExTX1RMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCisgKgorICogUEVNX1BBUlNFIHVzZXMgREVTLzNERVMgZm9yIGRlY3J5cHRpbmcgZW5jcnlwdGVkIGtleXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ERVNfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19ESE1fQworICoKKyAqIEVuYWJsZSB0aGUgRGlmZmllLUhlbGxtYW4tTWVya2xlIG1vZHVsZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2RobS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgREhFLVJTQSwgREhFLVBTSworICovCisjZGVmaW5lIE1CRURUTFNfREhNX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNESF9DCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBEaWZmaWUtSGVsbG1hbiBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNkaC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcga2V5IGV4Y2hhbmdlczoKKyAqICAgICAgRUNESEUtRUNEU0EsIEVDREhFLVJTQSwgREhFLVBTSworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0VDUF9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ0RIX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRUNEU0FfQworICoKKyAqIEVuYWJsZSB0aGUgZWxsaXB0aWMgY3VydmUgRFNBIGxpYnJhcnkuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lY2RzYS5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIEVDREhFLUVDRFNBCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfRUNQX0MsIE1CRURUTFNfQVNOMV9XUklURV9DLCBNQkVEVExTX0FTTjFfUEFSU0VfQworICovCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ0pQQUtFX0MKKyAqCisgKiBFbmFibGUgdGhlIGVsbGlwdGljIGN1cnZlIEotUEFLRSBsaWJyYXJ5LgorICoKKyAqIFx3YXJuaW5nIFRoaXMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gRUMgSi1QQUtFIHN1cHBvcnQgaXMgYmFzZWQgb24gdGhlCisgKiBUaHJlYWQgdjEuMC4wIHNwZWNpZmljYXRpb247IGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpY2F0aW9uCisgKiBtaWdodCBzdGlsbCBoYXBwZW4uIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNqcGFrZS5jCisgKiBDYWxsZXI6CisgKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGtleSBleGNoYW5nZXM6CisgKiAgICAgIEVDSlBBS0UKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19FQ1BfQywgTUJFRFRMU19NRF9DCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0VDSlBBS0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19FQ1BfQworICoKKyAqIEVuYWJsZSB0aGUgZWxsaXB0aWMgY3VydmUgb3ZlciBHRihwKSBsaWJyYXJ5LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvZWNwLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZWNkaC5jCisgKiAgICAgICAgICBsaWJyYXJ5L2VjZHNhLmMKKyAqICAgICAgICAgIGxpYnJhcnkvZWNqcGFrZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQklHTlVNX0MgYW5kIGF0IGxlYXN0IG9uZSBNQkVEVExTX0VDUF9EUF9YWFhfRU5BQkxFRAorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfRU5UUk9QWV9DCisgKgorICogRW5hYmxlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBlbnRyb3B5IGNvZGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9lbnRyb3B5LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19TSEE1MTJfQyBvciBNQkVEVExTX1NIQTI1Nl9DCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBnZW5lcmljIGVudHJvcHkgcG9vbAorICovCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0VSUk9SX0MKKyAqCisgKiBFbmFibGUgZXJyb3IgY29kZSB0byBlcnJvciBzdHJpbmcgY29udmVyc2lvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2Vycm9yLmMKKyAqIENhbGxlcjoKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIG1iZWR0bHNfc3RyZXJyb3IoKS4KKyAqLworI2RlZmluZSBNQkVEVExTX0VSUk9SX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfR0NNX0MKKyAqCisgKiBFbmFibGUgdGhlIEdhbG9pcy9Db3VudGVyIE1vZGUgKEdDTSkgZm9yIEFFUy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2djbS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfQUVTX0Mgb3IgTUJFRFRMU19DQU1FTExJQV9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyB0aGUgQUVTLUdDTSBhbmQgQ0FNRUxMSUEtR0NNIGNpcGhlcnN1aXRlcywgaWYgb3RoZXIKKyAqIHJlcXVpc2l0ZXMgYXJlIGVuYWJsZWQgYXMgd2VsbC4KKyAqLworI2RlZmluZSBNQkVEVExTX0dDTV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hBVkVHRV9DCisgKgorICogRW5hYmxlIHRoZSBIQVZFR0UgcmFuZG9tIGdlbmVyYXRvci4KKyAqCisgKiBXYXJuaW5nOiB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IgaXMgbm90IHN1aXRhYmxlIGZvciB2aXJ0dWFsaXplZAorICogICAgICAgICAgZW52aXJvbm1lbnRzCisgKgorICogV2FybmluZzogdGhlIEhBVkVHRSByYW5kb20gZ2VuZXJhdG9yIGlzIGRlcGVuZGVudCBvbiB0aW1pbmcgYW5kIHNwZWNpZmljCisgKiAgICAgICAgICBwcm9jZXNzb3IgdHJhaXRzLiBJdCBpcyB0aGVyZWZvcmUgbm90IGFkdmlzZWQgdG8gdXNlIEhBVkVHRSBhcworICogICAgICAgICAgeW91ciBhcHBsaWNhdGlvbnMgcHJpbWFyeSByYW5kb20gZ2VuZXJhdG9yIG9yIHByaW1hcnkgZW50cm9weSBwb29sCisgKiAgICAgICAgICBpbnB1dC4gQXMgYSBzZWNvbmRhcnkgaW5wdXQgdG8geW91ciBlbnRyb3B5IHBvb2wsIGl0IElTIGFibGUgYWRkCisgKiAgICAgICAgICB0aGUgKGxpbWl0ZWQpIGV4dHJhIGVudHJvcHkgaXQgcHJvdmlkZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9oYXZlZ2UuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1RJTUlOR19DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSB0aGUgSEFWRUdFIHJhbmRvbSBnZW5lcmF0b3IuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hBVkVHRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX0hNQUNfRFJCR19DCisgKgorICogRW5hYmxlIHRoZSBITUFDX0RSQkcgcmFuZG9tIGdlbmVyYXRvci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L2htYWNfZHJiZy5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTURfQworICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGhlIEhNQUNfRFJCRyByYW5kb20gbnVtYmVyIGdlZXJhdG9yLgorICovCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTURfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCB3cmFwcGVycy4KKyAqLworI2RlZmluZSBNQkVEVExTX01EX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTUQyX0MKKyAqCisgKiBFbmFibGUgdGhlIE1EMiBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfbWQyLmMKKyAqIENhbGxlcjoKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIChyYXJlKSBNRDItc2lnbmVkIFguNTA5IGNlcnRzLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRDJfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRDRfQworICoKKyAqIEVuYWJsZSB0aGUgTUQ0IGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19tZDQuYworICogQ2FsbGVyOgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgKHJhcmUpIE1ENC1zaWduZWQgWC41MDkgY2VydHMuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX01ENF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX01ENV9DCisgKgorICogRW5hYmxlIHRoZSBNRDUgaGFzaCBhbGdvcml0aG0uCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX21kNS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9wZW0uYworICogICAgICAgICAgbGlicmFyeS9zc2xfdGxzLmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBhbmQgWC41MDkuCisgKiBQRU1fUEFSU0UgdXNlcyBNRDUgZm9yIGRlY3J5cHRpbmcgZW5jcnlwdGVkIGtleXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19NRDVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKyAqCisgKiBFbmFibGUgdGhlIGJ1ZmZlciBhbGxvY2F0b3IgaW1wbGVtZW50YXRpb24gdGhhdCBtYWtlcyB1c2Ugb2YgYSAoc3RhY2spCisgKiBiYXNlZCBidWZmZXIgdG8gJ2FsbG9jYXRlJyBkeW5hbWljIG1lbW9yeS4gKHJlcGxhY2VzIGNhbGxvYygpIGFuZCBmcmVlKCkKKyAqIGNhbGxzKQorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWVtb3J5X2J1ZmZlcl9hbGxvYy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUExBVEZPUk1fQworICogICAgICAgICAgIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZICh0byB1c2UgaXQgd2l0aGluIG1iZWQgVExTKQorICoKKyAqIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBlbmFibGUgdGhlIGJ1ZmZlciBtZW1vcnkgYWxsb2NhdG9yLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfTkVUX0MKKyAqCisgKiBFbmFibGUgdGhlIFRDUCBhbmQgVURQIG92ZXIgSVB2Ni9JUHY0IG5ldHdvcmtpbmcgcm91dGluZXMuCisgKgorICogXG5vdGUgVGhpcyBtb2R1bGUgb25seSB3b3JrcyBvbiBQT1NJWC9Vbml4IChpbmNsdWRpbmcgTGludXgsIEJTRCBhbmQgT1MgWCkKKyAqIGFuZCBXaW5kb3dzLiBGb3Igb3RoZXIgcGxhdGZvcm1zLCB5b3UnbGwgd2FudCB0byBkaXNhYmxlIGl0LCBhbmQgd3JpdGUgeW91cgorICogb3duIG5ldHdvcmtpbmcgY2FsbGJhY2tzIHRvIGJlIHBhc3NlZCB0byBcYyBtYmVkdGxzX3NzbF9zZXRfYmlvKCkuCisgKgorICogXG5vdGUgU2VlIGFsc28gb3VyIEtub3dsZWRnZSBCYXNlIGFydGljbGUgYWJvdXQgcG9ydGluZyB0byBhIG5ldworICogZW52aXJvbm1lbnQ6CisgKiBodHRwczovL3Rscy5tYmVkLm9yZy9rYi9ob3ctdG8vaG93LWRvLWktcG9ydC1tYmVkLXRscy10by1hLW5ldy1lbnZpcm9ubWVudC1PUworICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbmV0X3NvY2tldHMuYworICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIG5ldHdvcmtpbmcgcm91dGluZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19ORVRfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19PSURfQworICoKKyAqIEVuYWJsZSB0aGUgT0lEIGRhdGFiYXNlLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvb2lkLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvYXNuMXdyaXRlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGtjczUuYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvcGt3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3JzYS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDkuYworICogICAgICAgICAgbGlicmFyeS94NTA5X2NyZWF0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcmwuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3J0LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2Nzci5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICoKKyAqIFRoaXMgbW9kdWxlcyB0cmFuc2xhdGVzIGJldHdlZW4gT0lEcyBhbmQgaW50ZXJuYWwgdmFsdWVzLgorICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEFETE9DS19DCisgKgorICogRW5hYmxlIFZJQSBQYWRsb2NrIHN1cHBvcnQgb24geDg2LgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGFkbG9jay5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L2Flcy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfSEFWRV9BU00KKyAqCisgKiBUaGlzIG1vZHVsZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgVklBIFBhZExvY2sgb24geDg2LgorICovCisjZGVmaW5lIE1CRURUTFNfUEFETE9DS19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BFTV9QQVJTRV9DCisgKgorICogRW5hYmxlIFBFTSBkZWNvZGluZyAvIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wZW0uYworICogQ2FsbGVyOiAgbGlicmFyeS9kaG0uYworICogICAgICAgICAgbGlicmFyeS9wa3BhcnNlLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19CQVNFNjRfQworICoKKyAqIFRoaXMgbW9kdWxlcyBhZGRzIHN1cHBvcnQgZm9yIGRlY29kaW5nIC8gcGFyc2luZyBQRU0gZmlsZXMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QRU1fUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QRU1fV1JJVEVfQworICoKKyAqIEVuYWJsZSBQRU0gZW5jb2RpbmcgLyB3cml0aW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvcGVtLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvcGt3cml0ZS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDl3cml0ZV9jcnQuYworICogICAgICAgICAgbGlicmFyeS9tYmVkdGxzX3g1MDl3cml0ZV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JBU0U2NF9DCisgKgorICogVGhpcyBtb2R1bGVzIGFkZHMgc3VwcG9ydCBmb3IgZW5jb2RpbmcgLyB3cml0aW5nIFBFTSBmaWxlcy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BFTV9XUklURV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgcHVibGljIChhc3ltZXRyaWMpIGtleSBsYXllci4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BrLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19SU0FfQyBvciBNQkVEVExTX0VDUF9DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIHB1YmxpYyBrZXkgd3JhcHBlcnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QS19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgcHVibGljIChhc3ltZXRyaWMpIGtleSBwYXJzZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa3BhcnNlLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BLX0MKKyAqCisgKiBVbmNvbW1lbnQgdG8gZW5hYmxlIGdlbmVyaWMgcHVibGljIGtleSBwYXJzZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QS19QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLX1dSSVRFX0MKKyAqCisgKiBFbmFibGUgdGhlIGdlbmVyaWMgcHVibGljIChhc3ltZXRyaWMpIGtleSB3cml0ZXIuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa3dyaXRlLmMKKyAqIENhbGxlcjogIGxpYnJhcnkveDUwOXdyaXRlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19QS19DCisgKgorICogVW5jb21tZW50IHRvIGVuYWJsZSBnZW5lcmljIHB1YmxpYyBrZXkgd3JpdGUgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUEtfV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19QS0NTNV9DCisgKgorICogRW5hYmxlIFBLQ1MjNSBmdW5jdGlvbnMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzNS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfTURfQworICoKKyAqIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBLQ1MjNSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19QS0NTNV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BLQ1MxMV9DCisgKgorICogRW5hYmxlIHdyYXBwZXIgZm9yIFBLQ1MjMTEgc21hcnRjYXJkIHN1cHBvcnQuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTEuYworICogQ2FsbGVyOiAgbGlicmFyeS9way5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfUEtfQworICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgU1NML1RMUyBQS0NTICMxMSBzbWFydGNhcmQgc3VwcG9ydC4KKyAqIFJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgUEtDUyMxMSBoZWxwZXIgbGlicmFyeSAobGlicGtjczExLWhlbHBlcikKKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUEtDUzExX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUEtDUzEyX0MKKyAqCisgKiBFbmFibGUgUEtDUyMxMiBQQkUgZnVuY3Rpb25zLgorICogQWRkcyBhbGdvcml0aG1zIGZvciBwYXJzaW5nIFBLQ1MjOCBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlzCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9wa2NzMTIuYworICogQ2FsbGVyOiAgbGlicmFyeS9wa3BhcnNlLmMKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19BU04xX1BBUlNFX0MsIE1CRURUTFNfQ0lQSEVSX0MsIE1CRURUTFNfTURfQworICogQ2FuIHVzZTogIE1CRURUTFNfQVJDNF9DCisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBQS0NTIzEyIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZSBNQkVEVExTX1BLQ1MxMl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1BMQVRGT1JNX0MKKyAqCisgKiBFbmFibGUgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGxheWVyIHRoYXQgYWxsb3dzIHlvdSB0byByZS1hc3NpZ24KKyAqIGZ1bmN0aW9ucyBsaWtlIGNhbGxvYygpLCBmcmVlKCksIHNucHJpbnRmKCksIHByaW50ZigpLCBmcHJpbnRmKCksIGV4aXQoKS4KKyAqCisgKiBFbmFibGluZyBNQkVEVExTX1BMQVRGT1JNX0MgZW5hYmxlcyB0byB1c2Ugb2YgTUJFRFRMU19QTEFURk9STV9YWFhfQUxUCisgKiBvciBNQkVEVExTX1BMQVRGT1JNX1hYWF9NQUNSTyBkaXJlY3RpdmVzLCBhbGxvd2luZyB0aGUgZnVuY3Rpb25zIG1lbnRpb25lZAorICogYWJvdmUgdG8gYmUgc3BlY2lmaWVkIGF0IHJ1bnRpbWUgb3IgY29tcGlsZSB0aW1lIHJlc3BlY3RpdmVseS4KKyAqCisgKiBcbm90ZSBUaGlzIGFic3RyYWN0aW9uIGxheWVyIG11c3QgYmUgZW5hYmxlZCBvbiBXaW5kb3dzIChpbmNsdWRpbmcgTVNZUzIpCisgKiBhcyBvdGhlciBtb2R1bGUgcmVseSBvbiBpdCBmb3IgYSBmaXhlZCBzbnByaW50ZiBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3BsYXRmb3JtLmMKKyAqIENhbGxlcjogIE1vc3Qgb3RoZXIgLmMgZmlsZXMKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIGFic3RyYWN0aW9uIG9mIGNvbW1vbiAobGliYykgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19SSVBFTUQxNjBfQworICoKKyAqIEVuYWJsZSB0aGUgUklQRU1ELTE2MCBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfcmlwZW1kMTYwLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKgorICovCisjZGVmaW5lIE1CRURUTFNfUklQRU1EMTYwX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfUlNBX0MKKyAqCisgKiBFbmFibGUgdGhlIFJTQSBwdWJsaWMta2V5IGNyeXB0b3N5c3RlbS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3JzYS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKiAgICAgICAgICBsaWJyYXJ5L3g1MDkuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBrZXkgZXhjaGFuZ2VzOgorICogICAgICBSU0EsIERIRS1SU0EsIEVDREhFLVJTQSwgUlNBLVBTSworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DLCBNQkVEVExTX09JRF9DCisgKi8KKyNkZWZpbmUgTUJFRFRMU19SU0FfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEExX0MKKyAqCisgKiBFbmFibGUgdGhlIFNIQTEgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhMS5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF90bHMuYworICogICAgICAgICAgbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgU1NML1RMUyBhbmQgU0hBMS1zaWduZWQgY2VydGlmaWNhdGVzLgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBMV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NIQTI1Nl9DCisgKgorICogRW5hYmxlIHRoZSBTSEEtMjI0IGFuZCBTSEEtMjU2IGNyeXB0b2dyYXBoaWMgaGFzaCBhbGdvcml0aG1zLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc19zaGEyNTYuYworICogQ2FsbGVyOiAgbGlicmFyeS9lbnRyb3B5LmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc19tZC5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBTSEEtMjI0IGFuZCBTSEEtMjU2LgorICogVGhpcyBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBTU0wvVExTIDEuMiBQUkYgZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TSEEyNTZfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19TSEE1MTJfQworICoKKyAqIEVuYWJsZSB0aGUgU0hBLTM4NCBhbmQgU0hBLTUxMiBjcnlwdG9ncmFwaGljIGhhc2ggYWxnb3JpdGhtcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L21iZWR0bHNfc2hhNTEyLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvZW50cm9weS5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfbWQuYworICogICAgICAgICAgbGlicmFyeS9zc2xfY2xpLmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Nydi5jCisgKgorICogVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBTSEEtMzg0IGFuZCBTSEEtNTEyLgorICovCisjZGVmaW5lIE1CRURUTFNfU0hBNTEyX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfU1NMX0NBQ0hFX0MKKyAqCisgKiBFbmFibGUgc2ltcGxlIFNTTCBjYWNoZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jYWNoZS5jCisgKiBDYWxsZXI6CisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfU1NMX0NBQ0hFX0MKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DT09LSUVfQworICoKKyAqIEVuYWJsZSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBEVExTIGNvb2tpZXMgZm9yIGhlbGxvIHZlcmlmaWNhdGlvbi4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jb29raWUuYworICogQ2FsbGVyOgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9USUNLRVRfQworICoKKyAqIEVuYWJsZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUTFMgc2VydmVyLXNpZGUgY2FsbGJhY2tzIGZvciBzZXNzaW9uIHRpY2tldHMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfdGlja2V0LmMKKyAqIENhbGxlcjoKKyAqCisgKiBSZXF1aXJlczogTUJFRFRMU19DSVBIRVJfQworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1RJQ0tFVF9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9DTElfQworICoKKyAqIEVuYWJsZSB0aGUgU1NML1RMUyBjbGllbnQgY29kZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9UTFNfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTIGNsaWVudCBzdXBwb3J0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0NMSV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9TUlZfQworICoKKyAqIEVuYWJsZSB0aGUgU1NML1RMUyBzZXJ2ZXIgY29kZS4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3NzbF9zcnYuYworICogQ2FsbGVyOgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9UTFNfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTIHNlcnZlciBzdXBwb3J0LgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1NSVl9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1NTTF9UTFNfQworICoKKyAqIEVuYWJsZSB0aGUgZ2VuZXJpYyBTU0wvVExTIGNvZGUuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9zc2xfdGxzLmMKKyAqIENhbGxlcjogIGxpYnJhcnkvc3NsX2NsaS5jCisgKiAgICAgICAgICBsaWJyYXJ5L3NzbF9zcnYuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0NJUEhFUl9DLCBNQkVEVExTX01EX0MKKyAqICAgICAgICAgICBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZSBNQkVEVExTX1NTTF9QUk9UT19YWFggZGVmaW5lcworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBTU0wvVExTLgorICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1RMU19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1RIUkVBRElOR19DCisgKgorICogRW5hYmxlIHRoZSB0aHJlYWRpbmcgYWJzdHJhY3Rpb24gbGF5ZXIuCisgKiBCeSBkZWZhdWx0IG1iZWQgVExTIGFzc3VtZXMgaXQgaXMgdXNlZCBpbiBhIG5vbi10aHJlYWRlZCBlbnZpcm9ubWVudCBvciB0aGF0CisgKiBjb250ZXh0cyBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMuIElmIHlvdSBkbyBpbnRlbmQgdG8gdXNlIGNvbnRleHRzCisgKiBiZXR3ZWVuIHRocmVhZHMsIHlvdSB3aWxsIG5lZWQgdG8gZW5hYmxlIHRoaXMgbGF5ZXIgdG8gcHJldmVudCByYWNlCisgKiBjb25kaXRpb25zLiBTZWUgYWxzbyBvdXIgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZSBhYm91dCB0aHJlYWRpbmc6CisgKiBodHRwczovL3Rscy5tYmVkLm9yZy9rYi9kZXZlbG9wbWVudC90aHJlYWQtc2FmZXR5LWFuZC1tdWx0aS10aHJlYWRpbmcKKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3RocmVhZGluZy5jCisgKgorICogVGhpcyBhbGxvd3MgZGlmZmVyZW50IHRocmVhZGluZyBpbXBsZW1lbnRhdGlvbnMgKHNlbGYtaW1wbGVtZW50ZWQgb3IKKyAqIHByb3ZpZGVkKS4KKyAqCisgKiBZb3Ugd2lsbCBoYXZlIHRvIGVuYWJsZSBlaXRoZXIgTUJFRFRMU19USFJFQURJTkdfQUxUIG9yCisgKiBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFELgorICoKKyAqIEVuYWJsZSB0aGlzIGxheWVyIHRvIGFsbG93IHVzZSBvZiBtdXRleGVzIHdpdGhpbiBtYmVkIFRMUworICovCisvLyNkZWZpbmUgTUJFRFRMU19USFJFQURJTkdfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19USU1JTkdfQworICoKKyAqIEVuYWJsZSB0aGUgc2VtaS1wb3J0YWJsZSB0aW1pbmcgaW50ZXJmYWNlLgorICoKKyAqIFxub3RlIFRoZSBwcm92aWRlZCBpbXBsZW1lbnRhdGlvbiBvbmx5IHdvcmtzIG9uIFBPU0lYL1VuaXggKGluY2x1ZGluZyBMaW51eCwKKyAqIEJTRCBhbmQgT1MgWCkgYW5kIFdpbmRvd3MuIE9uIG90aGVyIHBsYXRmb3JtcywgeW91IGNhbiBlaXRoZXIgZGlzYWJsZSB0aGF0CisgKiBtb2R1bGUgYW5kIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb25zIG9mIHRoZSBjYWxsYmFja3MgbmVlZGVkIGJ5CisgKiBcYyBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoKSBmb3IgRFRMUywgb3IgbGVhdmUgaXQgZW5hYmxlZCBhbmQgcHJvdmlkZQorICogeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhlIHdob2xlIG1vZHVsZSBieSBzZXR0aW5nCisgKiBcYyBNQkVEVExTX1RJTUlOR19BTFQgaW4gdGhlIGN1cnJlbnQgZmlsZS4KKyAqCisgKiBcbm90ZSBTZWUgYWxzbyBvdXIgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZSBhYm91dCBwb3J0aW5nIHRvIGEgbmV3CisgKiBlbnZpcm9ubWVudDoKKyAqIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2hvdy10by9ob3ctZG8taS1wb3J0LW1iZWQtdGxzLXRvLWEtbmV3LWVudmlyb25tZW50LU9TCisgKgorICogTW9kdWxlOiAgbGlicmFyeS90aW1pbmcuYworICogQ2FsbGVyOiAgbGlicmFyeS9oYXZlZ2UuYworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHVzZWQgYnkgdGhlIEhBVkVHRSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAqLworI2RlZmluZSBNQkVEVExTX1RJTUlOR19DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1ZFUlNJT05fQworICoKKyAqIEVuYWJsZSBydW4tdGltZSB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvdmVyc2lvbi5jCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X1VTRV9DCisgKgorICogRW5hYmxlIFguNTA5IGNvcmUgZm9yIHVzaW5nIGNlcnRpZmljYXRlcy4KKyAqCisgKiBNb2R1bGU6ICBsaWJyYXJ5L3g1MDkuYworICogQ2FsbGVyOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3JsLmMKKyAqICAgICAgICAgIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiAgICAgICAgICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jc3IuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0FTTjFfUEFSU0VfQywgTUJFRFRMU19CSUdOVU1fQywgTUJFRFRMU19PSURfQywKKyAqICAgICAgICAgICBNQkVEVExTX1BLX1BBUlNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgdGhlIFguNTA5IHBhcnNpbmcgbW9kdWxlcy4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfVVNFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICoKKyAqIEVuYWJsZSBYLjUwOSBjZXJ0aWZpY2F0ZSBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc194NTA5X2NydC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L3NzbF9jbGkuYworICogICAgICAgICAgbGlicmFyeS9zc2xfc3J2LmMKKyAqICAgICAgICAgIGxpYnJhcnkvc3NsX3Rscy5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9VU0VfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBYLjUwOSBjZXJ0aWZpY2F0ZSBwYXJzaW5nLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCisgKgorICogRW5hYmxlIFguNTA5IENSTCBwYXJzaW5nLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkvbWJlZHRsc194NTA5X2NybC5jCisgKiBDYWxsZXI6ICBsaWJyYXJ5L21iZWR0bHNfeDUwOV9jcnQuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgQ1JMIHBhcnNpbmcuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpIHBhcnNpbmcuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS9tYmVkdGxzX3g1MDlfY3NyLmMKKyAqIENhbGxlcjogIGxpYnJhcnkveDUwOV9jcnRfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfVVNFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB1c2VkIGZvciByZWFkaW5nIFguNTA5IGNlcnRpZmljYXRlIHJlcXVlc3QuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DCisKKy8qKgorICogXGRlZiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBFbmFibGUgWC41MDkgY29yZSBmb3IgY3JlYXRpbmcgY2VydGlmaWNhdGVzLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jcmVhdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX0JJR05VTV9DLCBNQkVEVExTX09JRF9DLCBNQkVEVExTX1BLX1dSSVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyB0aGUgYmFzaXMgZm9yIGNyZWF0aW5nIFguNTA5IGNlcnRpZmljYXRlcyBhbmQgQ1NScy4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQworICoKKyAqIEVuYWJsZSBjcmVhdGluZyBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisgKgorICogTW9kdWxlOiAgbGlicmFyeS94NTA5X2NydF93cml0ZS5jCisgKgorICogUmVxdWlyZXM6IE1CRURUTFNfWDUwOV9DUkVBVEVfQworICoKKyAqIFRoaXMgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBYLjUwOSBjZXJ0aWZpY2F0ZSBjcmVhdGlvbi4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MKKworLyoqCisgKiBcZGVmIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworICoKKyAqIEVuYWJsZSBjcmVhdGluZyBYLjUwOSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3RzIChDU1IpLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveDUwOV9jc3Jfd3JpdGUuYworICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKKyAqCisgKiBUaGlzIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgWC41MDkgY2VydGlmaWNhdGUgcmVxdWVzdCB3cml0aW5nLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworCisvKioKKyAqIFxkZWYgTUJFRFRMU19YVEVBX0MKKyAqCisgKiBFbmFibGUgdGhlIFhURUEgYmxvY2sgY2lwaGVyLgorICoKKyAqIE1vZHVsZTogIGxpYnJhcnkveHRlYS5jCisgKiBDYWxsZXI6CisgKi8KKyNkZWZpbmUgTUJFRFRMU19YVEVBX0MKKworLyogXH0gbmFtZSBTRUNUSU9OOiBtYmVkIFRMUyBtb2R1bGVzICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICoKKyAqIFRoaXMgc2VjdGlvbiBhbGxvd3MgZm9yIHRoZSBzZXR0aW5nIG9mIG1vZHVsZSBzcGVjaWZpYyBzaXplcyBhbmQKKyAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlCisgKiByZWxldmFudCBoZWFkZXIgZmlsZXMgYW5kIHNob3VsZCBzdWZmaWNlIGZvciB0aGUgcmVndWxhciB1c2UgY2FzZXMuCisgKgorICogT3VyIGFkdmljZSBpcyB0byBlbmFibGUgb3B0aW9ucyBhbmQgY2hhbmdlIHRoZWlyIHZhbHVlcyBoZXJlCisgKiBvbmx5IGlmIHlvdSBoYXZlIGEgZ29vZCByZWFzb24gYW5kIGtub3cgdGhlIGNvbnNlcXVlbmNlcy4KKyAqCisgKiBQbGVhc2UgY2hlY2sgdGhlIHJlc3BlY3RpdmUgaGVhZGVyIGZpbGUgZm9yIGRvY3VtZW50YXRpb24gb24gdGhlc2UKKyAqIHBhcmFtZXRlcnMgKHRvIHByZXZlbnQgZHVwbGljYXRlIGRvY3VtZW50YXRpb24pLgorICogXHsKKyAqLworCisvKiBNUEkgLyBCSUdOVU0gb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfTVBJX1dJTkRPV19TSVpFICAgICAgICAgICAgNiAvKio8IE1heGltdW0gd2luZG93cyBzaXplIHVzZWQuICovCisvLyNkZWZpbmUgTUJFRFRMU19NUElfTUFYX1NJWkUgICAgICAgICAgICAxMDI0IC8qKjwgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgZm9yIHVzYWJsZSBNUElzLiAqLworCisvKiBDVFJfRFJCRyBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTiAgICAgICAgICAgICAgIDQ4IC8qKjwgQW1vdW50IG9mIGVudHJvcHkgdXNlZCBwZXIgc2VlZCBieSBkZWZhdWx0ICg0OCB3aXRoIFNIQS01MTIsIDMyIHdpdGggU0hBLTI1NikgKi8KKy8vI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTCAgICAgICAgMTAwMDAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisvLyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgICAgICAgICAgICAgICAgMjU2IC8qKjwgTWF4aW11bSBudW1iZXIgb2YgYWRkaXRpb25hbCBpbnB1dCBieXRlcyAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QgICAgICAgICAgICAgMTAyNCAvKio8IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBwZXIgY2FsbCAqLworLy8jZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgICAgICAgICAgIDM4NCAvKio8IE1heGltdW0gc2l6ZSBvZiAocmUpc2VlZCBidWZmZXIgKi8KKworLyogSE1BQ19EUkJHIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwgICAxMDAwMCAvKio8IEludGVydmFsIGJlZm9yZSByZXNlZWQgaXMgcGVyZm9ybWVkIGJ5IGRlZmF1bHQgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgICAgICAgICAgIDI1NiAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKy8vI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19NQVhfUkVRVUVTVCAgICAgICAgMTAyNCAvKio8IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBwZXIgY2FsbCAqLworLy8jZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUICAgICAgMzg0IC8qKjwgTWF4aW11bSBzaXplIG9mIChyZSlzZWVkIGJ1ZmZlciAqLworCisvKiBFQ1Agb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfRUNQX01BWF9CSVRTICAgICAgICAgICAgIDUyMSAvKio8IE1heGltdW0gYml0IHNpemUgb2YgZ3JvdXBzICovCisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgICAgICAgICA2IC8qKjwgTWF4aW11bSB3aW5kb3cgc2l6ZSB1c2VkICovCisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gICAgICAxIC8qKjwgRW5hYmxlIGZpeGVkLXBvaW50IHNwZWVkLXVwICovCisKKy8qIEVudHJvcHkgb3B0aW9ucyAqLworLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUyAgICAgICAgICAgICAgICAyMCAvKio8IE1heGltdW0gbnVtYmVyIG9mIHNvdXJjZXMgc3VwcG9ydGVkICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIgICAgICAgICAgICAgICAgMTI4IC8qKjwgTWF4aW11bSBhbW91bnQgcmVxdWVzdGVkIGZyb20gZW50cm9weSBzb3VyY2VzICovCisvLyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01JTl9IQVJEV0FSRSAgICAgICAgICAgICAgIDMyIC8qKjwgRGVmYXVsdCBtaW5pbXVtIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBmb3IgdGhlIGhhcmR3YXJlIGVudHJvcHkgc291cmNlIG1iZWR0bHNfaGFyZHdhcmVfcG9sbCgpIGJlZm9yZSBlbnRyb3B5IGlzIHJlbGVhc2VkICovCisKKy8qIE1lbW9yeSBidWZmZXIgYWxsb2NhdG9yIG9wdGlvbnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSAgICAgIDQgLyoqPCBBbGlnbiBvbiBtdWx0aXBsZXMgb2YgdGhpcyB2YWx1ZSAqLworCisvKiBQbGF0Zm9ybSBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUiAgIDxzdGRsaWIuaD4gLyoqPCBIZWFkZXIgdG8gaW5jbHVkZSBpZiBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMgaXMgZGVmaW5lZC4gRG9uJ3QgZGVmaW5lIGlmIG5vIGhlYWRlciBpcyBuZWVkZWQuICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DICAgICAgICBjYWxsb2MgLyoqPCBEZWZhdWx0IGFsbG9jYXRvciB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFICAgICAgICAgICAgZnJlZSAvKio8IERlZmF1bHQgZnJlZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUICAgICAgICAgICAgZXhpdCAvKio8IERlZmF1bHQgZXhpdCB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FICAgICAgICAgICAgdGltZSAvKio8IERlZmF1bHQgdGltZSB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQuIE1CRURUTFNfSEFWRV9USU1FIG11c3QgYmUgZW5hYmxlZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYgICAgICBmcHJpbnRmIC8qKjwgRGVmYXVsdCBmcHJpbnRmIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URiAgICAgICAgcHJpbnRmIC8qKjwgRGVmYXVsdCBwcmludGYgdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvKiBOb3RlOiB5b3VyIHNucHJpbnRmIG11c3QgY29ycmVjbHR5IHplcm8tdGVybWluYXRlIHRoZSBidWZmZXIhICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgICAgc25wcmludGYgLyoqPCBEZWZhdWx0IHNucHJpbnRmIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfU1VDQ0VTUyAgICAgICAwIC8qKjwgRGVmYXVsdCBleGl0IHZhbHVlIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfRkFJTFVSRSAgICAgICAxIC8qKjwgRGVmYXVsdCBleGl0IHZhbHVlIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCAgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfcmVhZCAvKio8IERlZmF1bHQgbnZfc2VlZF9yZWFkIGZ1bmN0aW9uIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfd3JpdGUgLyoqPCBEZWZhdWx0IG52X3NlZWRfd3JpdGUgZnVuY3Rpb24gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFICAic2VlZGZpbGUiIC8qKjwgU2VlZCBmaWxlIHRvIHJlYWQvd3JpdGUgd2l0aCBkZWZhdWx0IGltcGxlbWVudGF0aW9uICovCisKKy8qIFRvIFVzZSBGdW5jdGlvbiBNYWNyb3MgTUJFRFRMU19QTEFURk9STV9DIG11c3QgYmUgZW5hYmxlZCAqLworLyogTUJFRFRMU19QTEFURk9STV9YWFhfTUFDUk8gYW5kIE1CRURUTFNfUExBVEZPUk1fWFhYX0FMVCBjYW5ub3QgYm90aCBiZSBkZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8gICAgICAgIGNhbGxvYyAvKio8IERlZmF1bHQgYWxsb2NhdG9yIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZCAqLworLy8jZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTyAgICAgICAgICAgIGZyZWUgLyoqPCBEZWZhdWx0IGZyZWUgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPICAgICAgICAgICAgZXhpdCAvKio8IERlZmF1bHQgZXhpdCBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8gICAgICAgICAgICB0aW1lIC8qKjwgRGVmYXVsdCB0aW1lIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZC4gTUJFRFRMU19IQVZFX1RJTUUgbXVzdCBiZSBlbmFibGVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8gICAgICAgdGltZV90IC8qKjwgRGVmYXVsdCB0aW1lIG1hY3JvIHRvIHVzZSwgY2FuIGJlIHVuZGVmaW5lZC4gTUJFRFRMU19IQVZFX1RJTUUgbXVzdCBiZSBlbmFibGVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPICAgICAgZnByaW50ZiAvKio8IERlZmF1bHQgZnByaW50ZiBtYWNybyB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTyAgICAgICAgcHJpbnRmIC8qKjwgRGVmYXVsdCBwcmludGYgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvKiBOb3RlOiB5b3VyIHNucHJpbnRmIG11c3QgY29ycmVjbHR5IHplcm8tdGVybWluYXRlIHRoZSBidWZmZXIhICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTyAgICBzbnByaW50ZiAvKio8IERlZmF1bHQgc25wcmludGYgbWFjcm8gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisvLyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1JFQURfTUFDUk8gICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQgLyoqPCBEZWZhdWx0IG52X3NlZWRfcmVhZCBmdW5jdGlvbiB0byB1c2UsIGNhbiBiZSB1bmRlZmluZWQgKi8KKy8vI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfV1JJVEVfTUFDUk8gIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfd3JpdGUgLyoqPCBEZWZhdWx0IG52X3NlZWRfd3JpdGUgZnVuY3Rpb24gdG8gdXNlLCBjYW4gYmUgdW5kZWZpbmVkICovCisKKy8qIFNTTCBDYWNoZSBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9USU1FT1VUICAgICAgIDg2NDAwIC8qKjwgMSBkYXkgICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9NQVhfRU5UUklFUyAgICAgIDUwIC8qKjwgTWF4aW11bSBlbnRyaWVzIGluIGNhY2hlICovCisKKy8qIFNTTCBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICAgICAgICAgICAgIDE2Mzg0IC8qKjwgTWF4aXVtIGZyYWdtZW50IGxlbmd0aCBpbiBieXRlcywgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBlYWNoIG9mIHRoZSB0d28gaW50ZXJuYWwgSS9PIGJ1ZmZlcnMgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRSAgICAgODY0MDAgLyoqPCBMaWZldGltZSBvZiBzZXNzaW9uIHRpY2tldHMgKGlmIGVuYWJsZWQpICovCisvLyNkZWZpbmUgTUJFRFRMU19QU0tfTUFYX0xFTiAgICAgICAgICAgICAgIDMyIC8qKjwgTWF4IHNpemUgb2YgVExTIHByZS1zaGFyZWQga2V5cywgaW4gYnl0ZXMgKGRlZmF1bHQgMjU2IGJpdHMpICovCisvLyNkZWZpbmUgTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQgICAgICAgIDYwIC8qKjwgRGVmYXVsdCBleHBpcmF0aW9uIGRlbGF5IG9mIERUTFMgY29va2llcywgaW4gc2Vjb25kcyBpZiBIQVZFX1RJTUUsIG9yIGluIG51bWJlciBvZiBjb29raWVzIGlzc3VlZCAqLworCisvKioKKyAqIENvbXBsZXRlIGxpc3Qgb2YgY2lwaGVyc3VpdGVzIHRvIHVzZSwgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KKyAqCisgKiBcd2FybmluZyBObyBkZXBlbmRlbmN5IGNoZWNraW5nIGlzIGRvbmUgb24gdGhhdCBmaWVsZCEgVGhpcyBvcHRpb24gY2FuIG9ubHkKKyAqIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHNldCBvZiBhdmFpbGFibGUgY2lwaGVyc3VpdGVzLiBJdCBpcyB5b3VyCisgKiByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhlIG5lZWRlZCBtb2R1bGVzIGFyZSBhY3RpdmUuCisgKgorICogVXNlIHRoaXMgdG8gc2F2ZSBhIGZldyBodW5kcmVkIGJ5dGVzIG9mIFJPTSAoZGVmYXVsdCBvcmRlcmluZyBvZiBhbGwKKyAqIGF2YWlsYWJsZSBjaXBoZXJzdWl0ZXMpIGFuZCBhIGZldyB0byBhIGZldyBodW5kcmVkIGJ5dGVzIG9mIFJBTS4KKyAqCisgKiBUaGUgdmFsdWUgYmVsb3cgaXMgb25seSBhbiBleGFtcGxlLCBub3QgdGhlIGRlZmF1bHQuCisgKi8KKy8vI2RlZmluZSBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVMgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKKworLyogWDUwOSBvcHRpb25zICovCisvLyNkZWZpbmUgTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EgICA4ICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgQ0FzIGluIGEgdmVyaWZpY2F0aW9uIGNoYWluLiAqLworLy8jZGVmaW5lIE1CRURUTFNfWDUwOV9NQVhfRklMRV9QQVRIX0xFTiAgICAgNTEyIC8qKjwgTWF4aW11bSBsZW5ndGggb2YgYSBwYXRoL2ZpbGVuYW1lIHN0cmluZyBpbiBieXRlcyBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvciBjaGFyYWN0ZXIgKCdcMCcpLiAqLworCisvKiBcfSBuYW1lIFNFQ1RJT046IEN1c3RvbWlzYXRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zICovCisKKy8qIFRhcmdldCBhbmQgYXBwbGljYXRpb24gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgKi8KKy8vI2RlZmluZSBZT1RUQV9DRkdfTUJFRFRMU19UQVJHRVRfQ09ORklHX0ZJTEUgIm1iZWR0bHMvdGFyZ2V0X2NvbmZpZy5oIgorCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9NQkVEKSAmJiBkZWZpbmVkKFlPVFRBX0NGR19NQkVEVExTX1RBUkdFVF9DT05GSUdfRklMRSkKKyNpbmNsdWRlIFlPVFRBX0NGR19NQkVEVExTX1RBUkdFVF9DT05GSUdfRklMRQorI2VuZGlmCisKKy8qCisgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIGFueSBwcmV2aW91cyBkZWZhdWx0LgorICoKKyAqIFVzZSB0d28gbWFjcm8gbmFtZXMgZm9yIHRoYXQsIGFzOgorICogLSB3aXRoIHlvdHRhIHRoZSBwcmVmaXggWU9UVEFfQ0ZHXyBpcyBmb3JjZWQKKyAqIC0gd2l0aG91dCB5b3R0YSBpcyBsb29rcyB3ZWlyZCB0byBoYXZlIGEgWU9UVEEgcHJlZml4LgorICovCisjaWYgZGVmaW5lZChZT1RUQV9DRkdfTUJFRFRMU19VU0VSX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgWU9UVEFfQ0ZHX01CRURUTFNfVVNFUl9DT05GSUdfRklMRQorI2VsaWYgZGVmaW5lZChNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSBNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAiY2hlY2tfY29uZmlnLmgiCisKKyNlbmRpZiAvKiBNQkVEVExTX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2N0cl9kcmJnLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2N0cl9kcmJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ZDNjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvY3RyX2RyYmcuaApAQCAtMCwwICsxLDI5MCBAQAorLyoqCisgKiBcZmlsZSBjdHJfZHJiZy5oCisgKgorICogXGJyaWVmIENUUl9EUkJHIGJhc2VkIG9uIEFFUy0yNTYgKE5JU1QgU1AgODAwLTkwKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0NUUl9EUkJHX0gKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19ICisKKyNpbmNsdWRlICJhZXMuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL3RocmVhZGluZy5oIgorI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICAgICAgICAtMHgwMDM0ICAvKio8IFRoZSBlbnRyb3B5IHNvdXJjZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRyAgICAgICAgICAgICAgLTB4MDAzNiAgLyoqPCBUb28gbWFueSByYW5kb20gcmVxdWVzdGVkIGluIHNpbmdsZSBjYWxsLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHICAgICAgICAgICAgICAgIC0weDAwMzggIC8qKjwgSW5wdXQgdG9vIGxhcmdlIChFbnRyb3B5ICsgYWRkaXRpb25hbCkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgLTB4MDAzQSAgLyoqPCBSZWFkL3dyaXRlIGVycm9yIGluIGZpbGUuICovCisKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgICAgICAgICAgMTYgICAgICAvKio8IEJsb2NrIHNpemUgdXNlZCBieSB0aGUgY2lwaGVyICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFICAgICAgICAgICAgMzIgICAgICAvKio8IEtleSBzaXplIHVzZWQgYnkgdGhlIGNpcGhlciAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19LRVlCSVRTICAgICAgICAgICAgKCBNQkVEVExTX0NUUl9EUkJHX0tFWVNJWkUgKiA4ICkKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19TRUVETEVOICAgICAgICAgICAgKCBNQkVEVExTX0NUUl9EUkJHX0tFWVNJWkUgKyBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIHNlZWQgbGVuZ3RoIChjb3VudGVyICsgQUVTIGtleSkgICAgICAgICAgICAqLworCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4pCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2KQorI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOICAgICAgICA0OCAgICAgIC8qKjwgQW1vdW50IG9mIGVudHJvcHkgdXNlZCBwZXIgc2VlZCBieSBkZWZhdWx0ICg0OCB3aXRoIFNIQS01MTIsIDMyIHdpdGggU0hBLTI1NikgKi8KKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4gICAgICAgIDMyICAgICAgLyoqPCBBbW91bnQgb2YgZW50cm9weSB1c2VkIHBlciBzZWVkIGJ5IGRlZmF1bHQgKDQ4IHdpdGggU0hBLTUxMiwgMzIgd2l0aCBTSEEtMjU2KSAqLworI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfUkVTRUVEX0lOVEVSVkFMKQorI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTCAgICAxMDAwMCAgIC8qKjwgSW50ZXJ2YWwgYmVmb3JlIHJlc2VlZCBpcyBwZXJmb3JtZWQgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVCkKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgICAgICAgICAgMjU2ICAgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19NQVhfUkVRVUVTVCkKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19NQVhfUkVRVUVTVCAgICAgICAgMTAyNCAgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBwZXIgY2FsbCAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUKQorI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICAgICAzODQgICAgIC8qKjwgTWF4aW11bSBzaXplIG9mIChyZSlzZWVkIGJ1ZmZlciAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKyNkZWZpbmUgTUJFRFRMU19DVFJfRFJCR19QUl9PRkYgICAgICAgICAgICAgMCAgICAgICAvKio8IE5vIHByZWRpY3Rpb24gcmVzaXN0YW5jZSAgICAgICAqLworI2RlZmluZSBNQkVEVExTX0NUUl9EUkJHX1BSX09OICAgICAgICAgICAgICAxICAgICAgIC8qKjwgUHJlZGljdGlvbiByZXNpc3RhbmNlIGVuYWJsZWQgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGNvdW50ZXJbMTZdOyAgLyohPCAgY291bnRlciAoVikgICAgICAgKi8KKyAgICBpbnQgcmVzZWVkX2NvdW50ZXI7ICAgICAgICAgLyohPCAgcmVzZWVkIGNvdW50ZXIgICAgKi8KKyAgICBpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlOyAgLyohPCAgZW5hYmxlIHByZWRpY3Rpb24gcmVzaXN0YW5jZSAoQXV0b21hdGljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VlZCBiZWZvcmUgZXZlcnkgcmFuZG9tIGdlbmVyYXRpb24pICAqLworICAgIHNpemVfdCBlbnRyb3B5X2xlbjsgICAgICAgICAvKiE8ICBhbW91bnQgb2YgZW50cm9weSBncmFiYmVkIG9uIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlKXNlZWQgICAgICAgICAgKi8KKyAgICBpbnQgcmVzZWVkX2ludGVydmFsOyAgICAgICAgLyohPCAgcmVzZWVkIGludGVydmFsICAgKi8KKworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzX2N0eDsgICAgICAgIC8qITwgIEFFUyBjb250ZXh0ICAgICAgICovCisKKyAgICAvKgorICAgICAqIENhbGxiYWNrcyAoRW50cm9weSkKKyAgICAgKi8KKyAgICBpbnQgKCpmX2VudHJvcHkpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworCisgICAgdm9pZCAqcF9lbnRyb3B5OyAgICAgICAgICAgIC8qITwgIGNvbnRleHQgZm9yIHRoZSBlbnRyb3B5IGZ1bmN0aW9uICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtdXRleDsKKyNlbmRpZgorfQorbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIE1ha2VzIHRoZSBjb250ZXh0IHJlYWR5IGZvciBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoKSBvcgorICogICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDVFJfRFJCRyBpbml0aWFsIHNlZWRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIFNlZWQgYW5kIHNldHVwIGVudHJvcHkgc291cmNlIGZvciBmdXR1cmUgcmVzZWVkcy4KKyAqCisgKiBOb3RlOiBQZXJzb25hbGl6YXRpb24gZGF0YSBjYW4gYmUgcHJvdmlkZWQgaW4gYWRkaXRpb24gdG8gdGhlIG1vcmUgZ2VuZXJpYworICogICAgICAgZW50cm9weSBzb3VyY2UgdG8gbWFrZSB0aGlzIGluc3RhbnRpYXRpb24gYXMgdW5pcXVlIGFzIHBvc3NpYmxlLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQgdG8gYmUgc2VlZGVkCisgKiBccGFyYW0gZl9lbnRyb3B5ICAgICBFbnRyb3B5IGNhbGxiYWNrIChwX2VudHJvcHksIGJ1ZmZlciB0byBmaWxsLCBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkKKyAqIFxwYXJhbSBwX2VudHJvcHkgICAgIEVudHJvcHkgY29udGV4dAorICogXHBhcmFtIGN1c3RvbSAgICAgICAgUGVyc29uYWxpemF0aW9uIGRhdGEgKERldmljZSBzcGVjaWZpYyBpZGVudGlmaWVycykKKyAqICAgICAgICAgICAgICAgICAgICAgIChDYW4gYmUgTlVMTCkKKyAqIFxwYXJhbSBsZW4gICAgICAgICAgIExlbmd0aCBvZiBwZXJzb25hbGl6YXRpb24gZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19zZWVkKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX2VudHJvcHkpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXN0b20sCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIENsZWFyIENUUl9DUkJHIGNvbnRleHQgZGF0YQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENUUl9EUkJHIGNvbnRleHQgdG8gY2xlYXIKKyAqLwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgRW5hYmxlIC8gZGlzYWJsZSBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgKERlZmF1bHQ6IE9mZikKKyAqCisgKiBOb3RlOiBJZiBlbmFibGVkLCBlbnRyb3B5IGlzIHVzZWQgZm9yIGN0eC0+ZW50cm9weV9sZW4gYmVmb3JlIGVhY2ggY2FsbCEKKyAqICAgICAgIE9ubHkgdXNlIHRoaXMgaWYgeW91IGhhdmUgYW1wbGUgc3VwcGx5IG9mIGdvb2QgZW50cm9weSEKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gcmVzaXN0YW5jZSAgICBNQkVEVExTX0NUUl9EUkJHX1BSX09OIG9yIE1CRURUTFNfQ1RSX0RSQkdfUFJfT0ZGCisgKi8KK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2lzdGFuY2UgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBTZXQgdGhlIGFtb3VudCBvZiBlbnRyb3B5IGdyYWJiZWQgb24gZWFjaCAocmUpc2VlZAorICogICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfQ1RSX0RSQkdfRU5UUk9QWV9MRU4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIGxlbiAgICAgICAgICAgQW1vdW50IG9mIGVudHJvcHkgdG8gZ3JhYgorICovCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgU2V0IHRoZSByZXNlZWQgaW50ZXJ2YWwKKyAqICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX0NUUl9EUkJHX1JFU0VFRF9JTlRFUlZBTCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gaW50ZXJ2YWwgICAgICBSZXNlZWQgaW50ZXJ2YWwKKyAqLwordm9pZCBtYmVkdGxzX2N0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW50ZXJ2YWwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDVFJfRFJCRyByZXNlZWRpbmcgKGV4dHJhY3RzIGRhdGEgZnJvbSBlbnRyb3B5IHNvdXJjZSkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gYWRkaXRpb25hbCAgICBBZGRpdGlvbmFsIGRhdGEgdG8gYWRkIHRvIHN0YXRlIChDYW4gYmUgTlVMTCkKKyAqIFxwYXJhbSBsZW4gICAgICAgICAgIExlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDVFJfRFJCRyB1cGRhdGUgc3RhdGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDVFJfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gYWRkaXRpb25hbCAgICBBZGRpdGlvbmFsIGRhdGEgdG8gdXBkYXRlIHN0YXRlIHdpdGgKKyAqIFxwYXJhbSBhZGRfbGVuICAgICAgIExlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEKKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBJZiBhZGRfbGVuIGlzIGdyZWF0ZXIgdGhhbiBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVULAorICogICAgICAgICAgICAgICAgICAgICAgb25seSB0aGUgZmlyc3QgTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCBieXRlcyBhcmUgdXNlZCwKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSByZW1haW5pbmcgb25lcyBhcmUgc2lsZW50bHkgZGlzY2FyZGVkLgorICovCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIENUUl9EUkJHIGdlbmVyYXRlIHJhbmRvbSB3aXRoIGFkZGl0aW9uYWwgdXBkYXRlIGlucHV0CisgKgorICogTm90ZTogQXV0b21hdGljYWxseSByZXNlZWRzIGlmIHJlc2VlZF9jb3VudGVyIGlzIHJlYWNoZWQuCisgKgorICogXHBhcmFtIHBfcm5nICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgICAgICAgQnVmZmVyIHRvIGZpbGwKKyAqIFxwYXJhbSBvdXRwdXRfbGVuICAgIExlbmd0aCBvZiB0aGUgYnVmZmVyCisgKiBccGFyYW0gYWRkaXRpb25hbCAgICBBZGRpdGlvbmFsIGRhdGEgdG8gdXBkYXRlIHdpdGggKENhbiBiZSBOVUxMKQorICogXHBhcmFtIGFkZF9sZW4gICAgICAgTGVuZ3RoIG9mIGFkZGl0aW9uYWwgZGF0YQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRworICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBhZGRfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgQ1RSX0RSQkcgZ2VuZXJhdGUgcmFuZG9tCisgKgorICogTm90ZTogQXV0b21hdGljYWxseSByZXNlZWRzIGlmIHJlc2VlZF9jb3VudGVyIGlzIHJlYWNoZWQuCisgKgorICogXHBhcmFtIHBfcm5nICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgICAgICAgQnVmZmVyIHRvIGZpbGwKKyAqIFxwYXJhbSBvdXRwdXRfbGVuICAgIExlbmd0aCBvZiB0aGUgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVELCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfUkVRVUVTVF9UT09fQklHCisgKi8KK2ludCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFdyaXRlIGEgc2VlZCBmaWxlCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIHBhdGggICAgICAgICAgTmFtZSBvZiB0aGUgZmlsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1Igb24gZmlsZSBlcnJvciwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmVhZCBhbmQgdXBkYXRlIGEgc2VlZCBmaWxlLiBTZWVkIGlzIGFkZGVkIHRvIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1RSX0RSQkcgY29udGV4dAorICogXHBhcmFtIHBhdGggICAgICAgICAgTmFtZSBvZiB0aGUgZmlsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1Igb24gZmlsZSBlcnJvciwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NUUl9EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRworICovCitpbnQgbWJlZHRsc19jdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworLyogSW50ZXJuYWwgZnVuY3Rpb25zIChkbyBub3QgY2FsbCBkaXJlY3RseSkgKi8KK2ludCBtYmVkdGxzX2N0cl9kcmJnX3NlZWRfZW50cm9weV9sZW4oIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKikodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCwgc2l6ZV90ICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBjdHJfZHJiZy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2RlYnVnLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1Nzk5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZGVidWcuaApAQCAtMCwwICsxLDIyOCBAQAorLyoqCisgKiBcZmlsZSBkZWJ1Zy5oCisgKgorICogXGJyaWVmIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgYW5kIHByb3ZpZGluZyBkZWJ1ZyBvdXRwdXQgZnJvbSB0aGUgbGlicmFyeS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19ERUJVR19ICisjZGVmaW5lIE1CRURUTFNfREVCVUdfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgInNzbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2luY2x1ZGUgImVjcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKworI2RlZmluZSBNQkVEVExTX0RFQlVHX1NUUklQX1BBUkVOUyggLi4uICkgICBfX1ZBX0FSR1NfXworCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX01TRyggbGV2ZWwsIGFyZ3MgKSAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfbXNnKCBzc2wsIGxldmVsLCBfX0ZJTEVfXywgX19MSU5FX18sICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ERUJVR19TVFJJUF9QQVJFTlMgYXJncyApCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfREVCVUdfUkVUKCBsZXZlbCwgdGV4dCwgcmV0ICkgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0KCBzc2wsIGxldmVsLCBfX0ZJTEVfXywgX19MSU5FX18sIHRleHQsIHJldCApCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfREVCVUdfQlVGKCBsZXZlbCwgdGV4dCwgYnVmLCBsZW4gKSAgICAgICAgICAgXAorICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfYnVmKCBzc2wsIGxldmVsLCBfX0ZJTEVfXywgX19MSU5FX18sIHRleHQsIGJ1ZiwgbGVuICkKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKyNkZWZpbmUgTUJFRFRMU19TU0xfREVCVUdfTVBJKCBsZXZlbCwgdGV4dCwgWCApICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfbXBpKCBzc2wsIGxldmVsLCBfX0ZJTEVfXywgX19MSU5FX18sIHRleHQsIFggKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0VDUCggbGV2ZWwsIHRleHQsIFggKSAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X2VjcCggc3NsLCBsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCB0ZXh0LCBYICkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0NSVCggbGV2ZWwsIHRleHQsIGNydCApICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X2NydCggc3NsLCBsZXZlbCwgX19GSUxFX18sIF9fTElORV9fLCB0ZXh0LCBjcnQgKQorI2VuZGlmCisKKyNlbHNlIC8qIE1CRURUTFNfREVCVUdfQyAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX01TRyggbGV2ZWwsIGFyZ3MgKSAgICAgICAgICAgIGRvIHsgfSB3aGlsZSggMCApCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggbGV2ZWwsIHRleHQsIHJldCApICAgICAgIGRvIHsgfSB3aGlsZSggMCApCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggbGV2ZWwsIHRleHQsIGJ1ZiwgbGVuICkgIGRvIHsgfSB3aGlsZSggMCApCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX01QSSggbGV2ZWwsIHRleHQsIFggKSAgICAgICAgIGRvIHsgfSB3aGlsZSggMCApCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0VDUCggbGV2ZWwsIHRleHQsIFggKSAgICAgICAgIGRvIHsgfSB3aGlsZSggMCApCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFQlVHX0NSVCggbGV2ZWwsIHRleHQsIGNydCApICAgICAgIGRvIHsgfSB3aGlsZSggMCApCisKKyNlbmRpZiAvKiBNQkVEVExTX0RFQlVHX0MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgIFNldCB0aGUgdGhyZXNob2xkIGVycm9yIGxldmVsIHRvIGhhbmRsZSBnbG9iYWxseSBhbGwgZGVidWcgb3V0cHV0LgorICogICAgICAgICAgRGVidWcgbWVzc2FnZXMgdGhhdCBoYXZlIGEgbGV2ZWwgb3ZlciB0aGUgdGhyZXNob2xkIHZhbHVlIGFyZQorICogICAgICAgICAgZGlzY2FyZGVkLgorICogICAgICAgICAgKERlZmF1bHQgdmFsdWU6IDAgPSBObyBkZWJ1ZyApCisgKgorICogXHBhcmFtIHRocmVzaG9sZCAgICAgdGhlc2hvbGQgbGV2ZWwgb2YgbWVzc2FnZXMgdG8gZmlsdGVyIG9uLiBNZXNzYWdlcyBhdCBhCisgKiAgICAgICAgICAgICAgICAgICAgICBoaWdoZXIgbGV2ZWwgd2lsbCBiZSBkaXNjYXJkZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEZWJ1ZyBsZXZlbHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIE5vIGRlYnVnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSBFcnJvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgU3RhdGUgY2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMyBJbmZvcm1hdGlvbmFsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gNCBWZXJib3NlCisgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKCBpbnQgdGhyZXNob2xkICk7CisKKy8qKgorICogXGJyaWVmICAgIFByaW50IGEgbWVzc2FnZSB0byB0aGUgZGVidWcgb3V0cHV0LiBUaGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkCisgKiAgICAgICAgICB0aHJvdWdoIHRoZSBNQkVEVExTX1NTTF9ERUJVR19NU0coKSBtYWNybywgd2hpY2ggc3VwcGxpZXMgdGhlIHNzbAorICogICAgICAgICAgY29udGV4dCwgZmlsZSBhbmQgbGluZSBudW1iZXIgcGFyYW1ldGVycy4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gbGV2ZWwgICAgIGVycm9yIGxldmVsIG9mIHRoZSBkZWJ1ZyBtZXNzYWdlCisgKiBccGFyYW0gZmlsZSAgICAgIGZpbGUgdGhlIG1lc3NhZ2UgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gbGluZSAgICAgIGxpbmUgbnVtYmVyIHRoZSBtZXNzYWdlIGhhcyBvY2N1cnJlZCBhdAorICogXHBhcmFtIGZvcm1hdCAgICBmb3JtYXQgc3BlY2lmaWVyLCBpbiBwcmludGYgZm9ybWF0CisgKiBccGFyYW0gLi4uICAgICAgIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmb3JtYXQgc3BlY2lmaWVyCisgKgorICogXGF0dGVudGlvbiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBJTlRFUk5BTCB1c2FnZSB3aXRoaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgIGxpYnJhcnkgb25seS4KKyAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X21zZyggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICk7CisKKy8qKgorICogXGJyaWVmICAgUHJpbnQgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIHRvIHRoZSBkZWJ1ZyBvdXRwdXQuIFRoaXMKKyAqICAgICAgICAgIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkIHRocm91Z2ggdGhlIE1CRURUTFNfU1NMX0RFQlVHX1JFVCgpIG1hY3JvLAorICogICAgICAgICAgd2hpY2ggc3VwcGxpZXMgdGhlIHNzbCBjb250ZXh0LCBmaWxlIGFuZCBsaW5lIG51bWJlciBwYXJhbWV0ZXJzLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBsZXZlbCAgICAgZXJyb3IgbGV2ZWwgb2YgdGhlIGRlYnVnIG1lc3NhZ2UKKyAqIFxwYXJhbSBmaWxlICAgICAgZmlsZSB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gbGluZSAgICAgIGxpbmUgbnVtYmVyIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSB0ZXh0ICAgICAgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJuZWQgdGhlIGVycm9yCisgKiBccGFyYW0gcmV0ICAgICAgIHRoZSByZXR1cm4gY29kZSB2YWx1ZQorICoKKyAqIFxhdHRlbnRpb24gICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgSU5URVJOQUwgdXNhZ2Ugd2l0aGluIHRoZQorICogICAgICAgICAgICAgICAgICBsaWJyYXJ5IG9ubHkuCisgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9yZXQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGludCByZXQgKTsKKworLyoqCisgKiBcYnJpZWYgICBPdXRwdXQgYSBidWZmZXIgb2Ygc2l6ZSBsZW4gYnl0ZXMgdG8gdGhlIGRlYnVnIG91dHB1dC4gVGhpcyBmdW5jdGlvbgorICogICAgICAgICAgaXMgYWx3YXlzIHVzZWQgdGhyb3VnaCB0aGUgTUJFRFRMU19TU0xfREVCVUdfQlVGKCkgbWFjcm8sCisgKiAgICAgICAgICB3aGljaCBzdXBwbGllcyB0aGUgc3NsIGNvbnRleHQsIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHBhcmFtZXRlcnMuCisgKgorICogXHBhcmFtIHNzbCAgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGxldmVsICAgICBlcnJvciBsZXZlbCBvZiB0aGUgZGVidWcgbWVzc2FnZQorICogXHBhcmFtIGZpbGUgICAgICBmaWxlIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSBsaW5lICAgICAgbGluZSBudW1iZXIgdGhlIGVycm9yIGhhcyBvY2N1cnJlZCBpbgorICogXHBhcmFtIHRleHQgICAgICBhIG5hbWUgb3IgbGFiZWwgZm9yIHRoZSBidWZmZXIgYmVpbmcgZHVtcGVkLiBOb3JtYWxseSB0aGUKKyAqICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgYnVmZmVyIG5hbWUKKyAqIFxwYXJhbSBidWYgICAgICAgdGhlIGJ1ZmZlciB0byBiZSBvdXRwdXR0ZWQKKyAqIFxwYXJhbSBsZW4gICAgICAgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiBcYXR0ZW50aW9uICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIElOVEVSTkFMIHVzYWdlIHdpdGhpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgbGlicmFyeSBvbmx5LgorICovCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfYnVmKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKy8qKgorICogXGJyaWVmICAgUHJpbnQgYSBNUEkgdmFyaWFibGUgdG8gdGhlIGRlYnVnIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMKKyAqICAgICAgICAgIHVzZWQgdGhyb3VnaCB0aGUgTUJFRFRMU19TU0xfREVCVUdfTVBJKCkgbWFjcm8sIHdoaWNoIHN1cHBsaWVzIHRoZQorICogICAgICAgICAgc3NsIGNvbnRleHQsIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHBhcmFtZXRlcnMuCisgKgorICogXHBhcmFtIHNzbCAgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGxldmVsICAgICBlcnJvciBsZXZlbCBvZiB0aGUgZGVidWcgbWVzc2FnZQorICogXHBhcmFtIGZpbGUgICAgICBmaWxlIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSBsaW5lICAgICAgbGluZSBudW1iZXIgdGhlIGVycm9yIGhhcyBvY2N1cnJlZCBpbgorICogXHBhcmFtIHRleHQgICAgICBhIG5hbWUgb3IgbGFiZWwgZm9yIHRoZSBNUEkgYmVpbmcgb3V0cHV0LiBOb3JtYWxseSB0aGUKKyAqICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbmFtZQorICogXHBhcmFtIFggICAgICAgICB0aGUgTVBJIHZhcmlhYmxlCisgKgorICogXGF0dGVudGlvbiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBJTlRFUk5BTCB1c2FnZSB3aXRoaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgIGxpYnJhcnkgb25seS4KKyAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X21waSggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgbWJlZHRsc19tcGkgKlggKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorLyoqCisgKiBcYnJpZWYgICBQcmludCBhbiBFQ1AgcG9pbnQgdG8gdGhlIGRlYnVnIG91dHB1dC4gVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMKKyAqICAgICAgICAgIHVzZWQgdGhyb3VnaCB0aGUgTUJFRFRMU19TU0xfREVCVUdfRUNQKCkgbWFjcm8sIHdoaWNoIHN1cHBsaWVzIHRoZQorICogICAgICAgICAgc3NsIGNvbnRleHQsIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHBhcmFtZXRlcnMuCisgKgorICogXHBhcmFtIHNzbCAgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIGxldmVsICAgICBlcnJvciBsZXZlbCBvZiB0aGUgZGVidWcgbWVzc2FnZQorICogXHBhcmFtIGZpbGUgICAgICBmaWxlIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSBsaW5lICAgICAgbGluZSBudW1iZXIgdGhlIGVycm9yIGhhcyBvY2N1cnJlZCBpbgorICogXHBhcmFtIHRleHQgICAgICBhIG5hbWUgb3IgbGFiZWwgZm9yIHRoZSBFQ1AgcG9pbnQgYmVpbmcgb3V0cHV0LiBOb3JtYWxseSB0aGUKKyAqICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbmFtZQorICogXHBhcmFtIFggICAgICAgICB0aGUgRUNQIHBvaW50CisgKgorICogXGF0dGVudGlvbiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBJTlRFUk5BTCB1c2FnZSB3aXRoaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgIGxpYnJhcnkgb25seS4KKyAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X2VjcCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlggKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKioKKyAqIFxicmllZiAgIFByaW50IGEgWC41MDkgY2VydGlmaWNhdGUgc3RydWN0dXJlIHRvIHRoZSBkZWJ1ZyBvdXRwdXQuIFRoaXMKKyAqICAgICAgICAgIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkIHRocm91Z2ggdGhlIE1CRURUTFNfU1NMX0RFQlVHX0NSVCgpIG1hY3JvLAorICogICAgICAgICAgd2hpY2ggc3VwcGxpZXMgdGhlIHNzbCBjb250ZXh0LCBmaWxlIGFuZCBsaW5lIG51bWJlciBwYXJhbWV0ZXJzLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBsZXZlbCAgICAgZXJyb3IgbGV2ZWwgb2YgdGhlIGRlYnVnIG1lc3NhZ2UKKyAqIFxwYXJhbSBmaWxlICAgICAgZmlsZSB0aGUgZXJyb3IgaGFzIG9jY3VycmVkIGluCisgKiBccGFyYW0gbGluZSAgICAgIGxpbmUgbnVtYmVyIHRoZSBlcnJvciBoYXMgb2NjdXJyZWQgaW4KKyAqIFxwYXJhbSB0ZXh0ICAgICAgYSBuYW1lIG9yIGxhYmVsIGZvciB0aGUgY2VydGlmaWNhdGUgYmVpbmcgb3V0cHV0CisgKiBccGFyYW0gY3J0ICAgICAgIFguNTA5IGNlcnRpZmljYXRlIHN0cnVjdHVyZQorICoKKyAqIFxhdHRlbnRpb24gICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgSU5URVJOQUwgdXNhZ2Ugd2l0aGluIHRoZQorICogICAgICAgICAgICAgICAgICBsaWJyYXJ5IG9ubHkuCisgKi8KK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9jcnQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCApOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZWJ1Zy5oICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZGVzLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTJlY2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2Rlcy5oCkBAIC0wLDAgKzEsMzA2IEBACisvKioKKyAqIFxmaWxlIGRlcy5oCisgKgorICogXGJyaWVmIERFUyBibG9jayBjaXBoZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19ERVNfSAorI2RlZmluZSBNQkVEVExTX0RFU19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgTUJFRFRMU19ERVNfRU5DUllQVCAgICAgMQorI2RlZmluZSBNQkVEVExTX0RFU19ERUNSWVBUICAgICAwCisKKyNkZWZpbmUgTUJFRFRMU19FUlJfREVTX0lOVkFMSURfSU5QVVRfTEVOR1RIICAgICAgICAgICAgICAtMHgwMDMyICAvKio8IFRoZSBkYXRhIGlucHV0IGhhcyBhbiBpbnZhbGlkIGxlbmd0aC4gKi8KKworI2RlZmluZSBNQkVEVExTX0RFU19LRVlfU0laRSAgICA4CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0RFU19BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERFUyBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IHNrWzMyXTsgICAgICAgICAgICAvKiE8ICBERVMgc3Via2V5cyAgICAgICAqLworfQorbWJlZHRsc19kZXNfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJpcGxlLURFUyBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IHNrWzk2XTsgICAgICAgICAgICAvKiE8ICAzREVTIHN1YmtleXMgICAgICAqLworfQorbWJlZHRsc19kZXMzX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgREVTIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2Rlc19pbml0KCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgREVTIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTIGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfZGVzX2ZyZWUoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIFRyaXBsZS1ERVMgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBERVMzIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX2RlczNfaW5pdCggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBUcmlwbGUtREVTIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTMyBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX2RlczNfZnJlZSggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQga2V5IHBhcml0eSBvbiB0aGUgZ2l2ZW4ga2V5IHRvIG9kZC4KKyAqCisgKiAgICAgICAgICAgICAgICAgREVTIGtleXMgYXJlIDU2IGJpdHMgbG9uZywgYnV0IGVhY2ggYnl0ZSBpcyBwYWRkZWQgd2l0aAorICogICAgICAgICAgICAgICAgIGEgcGFyaXR5IGJpdCB0byBhbGxvdyB2ZXJpZmljYXRpb24uCisgKgorICogXHBhcmFtIGtleSAgICAgIDgtYnl0ZSBzZWNyZXQga2V5CisgKi8KK3ZvaWQgbWJlZHRsc19kZXNfa2V5X3NldF9wYXJpdHkoIHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVjayB0aGF0IGtleSBwYXJpdHkgb24gdGhlIGdpdmVuIGtleSBpcyBvZGQuCisgKgorICogICAgICAgICAgICAgICAgIERFUyBrZXlzIGFyZSA1NiBiaXRzIGxvbmcsIGJ1dCBlYWNoIGJ5dGUgaXMgcGFkZGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICBhIHBhcml0eSBiaXQgdG8gYWxsb3cgdmVyaWZpY2F0aW9uLgorICoKKyAqIFxwYXJhbSBrZXkgICAgICA4LWJ5dGUgc2VjcmV0IGtleQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlzIHBhcml0eSB3YXMgb2ssIDEgaWYgcGFyaXR5IHdhcyBub3QgY29ycmVjdC4KKyAqLworaW50IG1iZWR0bHNfZGVzX2tleV9jaGVja19rZXlfcGFyaXR5KCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgdGhhdCBrZXkgaXMgbm90IGEgd2VhayBvciBzZW1pLXdlYWsgREVTIGtleQorICoKKyAqIFxwYXJhbSBrZXkgICAgICA4LWJ5dGUgc2VjcmV0IGtleQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIG5vIHdlYWsga2V5IHdhcyBmb3VuZCwgMSBpZiBhIHdlYWsga2V5IHdhcyBpZGVudGlmaWVkLgorICovCitpbnQgbWJlZHRsc19kZXNfa2V5X2NoZWNrX3dlYWsoIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBERVMga2V5IHNjaGVkdWxlICg1Ni1iaXQsIGVuY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgIERFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgOC1ieXRlIHNlY3JldCBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgREVTIGtleSBzY2hlZHVsZSAoNTYtYml0LCBkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBERVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIDgtYnl0ZSBzZWNyZXQga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfZGVzX3NldGtleV9kZWMoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyaXBsZS1ERVMga2V5IHNjaGVkdWxlICgxMTItYml0LCBlbmNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAzREVTIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICAxNi1ieXRlIHNlY3JldCBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFICogMl0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJpcGxlLURFUyBrZXkgc2NoZWR1bGUgKDExMi1iaXQsIGRlY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgIDNERVMgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgIDE2LWJ5dGUgc2VjcmV0IGtleQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkUgKiAyXSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmlwbGUtREVTIGtleSBzY2hlZHVsZSAoMTY4LWJpdCwgZW5jcnlwdGlvbikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgM0RFUyBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0ga2V5ICAgICAgMjQtYnl0ZSBzZWNyZXQga2V5CisgKgorICogXHJldHVybiAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSAqIDNdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyaXBsZS1ERVMga2V5IHNjaGVkdWxlICgxNjgtYml0LCBkZWNyeXB0aW9uKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAzREVTIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICAyNC1ieXRlIHNlY3JldCBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFICogM10gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgREVTLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREVTIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICA2NC1iaXQgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICA2NC1iaXQgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19kZXNfY3J5cHRfZWNiKCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbOF0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzhdICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgREVTLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKgorICogXG5vdGUgICAgICAgICAgIFVwb24gZXhpdCwgdGhlIGNvbnRlbnQgb2YgdGhlIElWIGlzIHVwZGF0ZWQgc28gdGhhdCB5b3UgY2FuCisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gc2FtZSBmdW5jdGlvbiBhZ2FpbiBvbiB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgICAgICAgICAgYmxvY2socykgb2YgZGF0YSBhbmQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBhcyBpZiBpdCB3YXMKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0ZWQgaW4gb25lIGNhbGwuIFRoaXMgYWxsb3dzIGEgInN0cmVhbWluZyIgdXNhZ2UuCisgKiAgICAgICAgICAgICAgICAgSWYgb24gdGhlIG90aGVyIGhhbmQgeW91IG5lZWQgdG8gcmV0YWluIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBJViwgeW91IHNob3VsZCBlaXRoZXIgc2F2ZSBpdCBtYW51YWxseSBvciB1c2UgdGhlIGNpcGhlcgorICogICAgICAgICAgICAgICAgIG1vZHVsZSBpbnN0ZWFkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBERVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfREVTX0VOQ1JZUFQgb3IgTUJFRFRMU19ERVNfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqLworaW50IG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdls4XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIDNERVMtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICAzREVTIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICA2NC1iaXQgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICA2NC1iaXQgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbOF0sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIDNERVMtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVXBvbiBleGl0LCB0aGUgY29udGVudCBvZiB0aGUgSVYgaXMgdXBkYXRlZCBzbyB0aGF0IHlvdSBjYW4KKyAqICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiBzYW1lIGZ1bmN0aW9uIGFnYWluIG9uIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICAgICAgICAgICBibG9jayhzKSBvZiBkYXRhIGFuZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGFzIGlmIGl0IHdhcworICogICAgICAgICAgICAgICAgIGVuY3J5cHRlZCBpbiBvbmUgY2FsbC4gVGhpcyBhbGxvd3MgYSAic3RyZWFtaW5nIiB1c2FnZS4KKyAqICAgICAgICAgICAgICAgICBJZiBvbiB0aGUgb3RoZXIgaGFuZCB5b3UgbmVlZCB0byByZXRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgICAgICAgIElWLCB5b3Ugc2hvdWxkIGVpdGhlciBzYXZlIGl0IG1hbnVhbGx5IG9yIHVzZSB0aGUgY2lwaGVyCisgKiAgICAgICAgICAgICAgICAgbW9kdWxlIGluc3RlYWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIDNERVMgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfREVTX0VOQ1JZUFQgb3IgTUJFRFRMU19ERVNfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvciAodXBkYXRlZCBhZnRlciB1c2UpCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKyAqLworaW50IG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzhdLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbnRlcm5hbCBmdW5jdGlvbiBmb3Iga2V5IGV4cGFuc2lvbi4KKyAqICAgICAgICAgICAgICAgICAoT25seSBleHBvc2VkIHRvIGFsbG93IG92ZXJyaWRpbmcgaXQsCisgKiAgICAgICAgICAgICAgICAgc2VlIE1CRURUTFNfREVTX1NFVEtFWV9BTFQpCisgKgorICogXHBhcmFtIFNLICAgICAgIFJvdW5kIGtleXMKKyAqIFxwYXJhbSBrZXkgICAgICBCYXNlIGtleQorICovCit2b2lkIG1iZWR0bHNfZGVzX3NldGtleSggdWludDMyX3QgU0tbMzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfREVTX0FMVCAqLworI2luY2x1ZGUgImRlc19hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19kZXNfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZGVzLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZGhtLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2RobS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWIxNTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2RobS5oCkBAIC0wLDAgKzEsMzA1IEBACisvKioKKyAqIFxmaWxlIGRobS5oCisgKgorICogXGJyaWVmIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBrZXkgZXhjaGFuZ2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19ESE1fSAorI2RlZmluZSBNQkVEVExTX0RITV9ICisKKyNpbmNsdWRlICJiaWdudW0uaCIKKworLyoKKyAqIERITSBFcnJvciBjb2RlcworICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgICAgLTB4MzA4MCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfREhNX1JFQURfUEFSQU1TX0ZBSUxFRCAgICAgICAgICAgICAgICAtMHgzMTAwICAvKio8IFJlYWRpbmcgb2YgdGhlIERITSBwYXJhbWV0ZXJzIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRCAgICAgICAgICAgICAgICAtMHgzMTgwICAvKio8IE1ha2luZyBvZiB0aGUgREhNIHBhcmFtZXRlcnMgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ESE1fUkVBRF9QVUJMSUNfRkFJTEVEICAgICAgICAgICAgICAgIC0weDMyMDAgIC8qKjwgUmVhZGluZyBvZiB0aGUgcHVibGljIHZhbHVlcyBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9NQUtFX1BVQkxJQ19GQUlMRUQgICAgICAgICAgICAgICAgLTB4MzI4MCAgLyoqPCBNYWtpbmcgb2YgdGhlIHB1YmxpYyB2YWx1ZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9DQUxDX1NFQ1JFVF9GQUlMRUQgICAgICAgICAgICAgICAgLTB4MzMwMCAgLyoqPCBDYWxjdWxhdGlvbiBvZiB0aGUgREhNIHNlY3JldCBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgLTB4MzM4MCAgLyoqPCBUaGUgQVNOLjEgZGF0YSBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfREhNX0FMTE9DX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAtMHgzNDAwICAvKio8IEFsbG9jYXRpb24gb2YgbWVtb3J5IGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfREhNX0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgICAgICAtMHgzNDgwICAvKio8IFJlYWQvd3JpdGUgb2YgZmlsZSBmYWlsZWQuICovCisKKy8qKgorICogUkZDIDM1MjYgZGVmaW5lcyBhIG51bWJlciBvZiBzdGFuZGFyZGl6ZWQgRGlmZmllLUhlbGxtYW4gZ3JvdXBzCisgKiBmb3IgSUtFLgorICogUkZDIDUxMTQgZGVmaW5lcyBhIG51bWJlciBvZiBzdGFuZGFyZGl6ZWQgRGlmZmllLUhlbGxtYW4gZ3JvdXBzCisgKiB0aGF0IGNhbiBiZSB1c2VkLgorICoKKyAqIFNvbWUgYXJlIGluY2x1ZGVkIGhlcmUgZm9yIGNvbnZlbmllbmNlLgorICoKKyAqIEluY2x1ZGVkIGFyZToKKyAqICBSRkMgMzUyNiAzLiAgICAyMDQ4LWJpdCBNT0RQIEdyb3VwCisgKiAgUkZDIDM1MjYgNC4gICAgMzA3Mi1iaXQgTU9EUCBHcm91cAorICogIFJGQyAzNTI2IDUuICAgIDQwOTYtYml0IE1PRFAgR3JvdXAKKyAqICBSRkMgNTExNCAyLjIuICAyMDQ4LWJpdCBNT0RQIEdyb3VwIHdpdGggMjI0LWJpdCBQcmltZSBPcmRlciBTdWJncm91cAorICovCisjZGVmaW5lIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X1AgICAgICAgICAgICAgICBcCisgICAgIkZGRkZGRkZGRkZGRkZGRkZDOTBGREFBMjIxNjhDMjM0QzRDNjYyOEI4MERDMUNEMSIgXAorICAgICIyOTAyNEUwODhBNjdDQzc0MDIwQkJFQTYzQjEzOUIyMjUxNEEwODc5OEUzNDA0REQiIFwKKyAgICAiRUY5NTE5QjNDRDNBNDMxQjMwMkIwQTZERjI1RjE0Mzc0RkUxMzU2RDZENTFDMjQ1IiBcCisgICAgIkU0ODVCNTc2NjI1RTdFQzZGNDRDNDJFOUE2MzdFRDZCMEJGRjVDQjZGNDA2QjdFRCIgXAorICAgICJFRTM4NkJGQjVBODk5RkE1QUU5RjI0MTE3QzRCMUZFNjQ5Mjg2NjUxRUNFNDVCM0QiIFwKKyAgICAiQzIwMDdDQjhBMTYzQkYwNTk4REE0ODM2MUM1NUQzOUE2OTE2M0ZBOEZEMjRDRjVGIiBcCisgICAgIjgzNjU1RDIzRENBM0FEOTYxQzYyRjM1NjIwODU1MkJCOUVENTI5MDc3MDk2OTY2RCIgXAorICAgICI2NzBDMzU0RTRBQkM5ODA0RjE3NDZDMDhDQTE4MjE3QzMyOTA1RTQ2MkUzNkNFM0IiIFwKKyAgICAiRTM5RTc3MkMxODBFODYwMzlCMjc4M0EyRUMwN0EyOEZCNUM1NURGMDZGNEM1MkM5IiBcCisgICAgIkRFMkJDQkY2OTU1ODE3MTgzOTk1NDk3Q0VBOTU2QUU1MTVEMjI2MTg5OEZBMDUxMCIgXAorICAgICIxNTcyOEU1QThBQUNBQTY4RkZGRkZGRkZGRkZGRkZGRiIKKworI2RlZmluZSBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9HICAgICAgICAgICIwMiIKKworI2RlZmluZSBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9QICAgICAgICAgICAgICAgXAorICAgICJGRkZGRkZGRkZGRkZGRkZGQzkwRkRBQTIyMTY4QzIzNEM0QzY2MjhCODBEQzFDRDEiIFwKKyAgICAiMjkwMjRFMDg4QTY3Q0M3NDAyMEJCRUE2M0IxMzlCMjI1MTRBMDg3OThFMzQwNEREIiBcCisgICAgIkVGOTUxOUIzQ0QzQTQzMUIzMDJCMEE2REYyNUYxNDM3NEZFMTM1NkQ2RDUxQzI0NSIgXAorICAgICJFNDg1QjU3NjYyNUU3RUM2RjQ0QzQyRTlBNjM3RUQ2QjBCRkY1Q0I2RjQwNkI3RUQiIFwKKyAgICAiRUUzODZCRkI1QTg5OUZBNUFFOUYyNDExN0M0QjFGRTY0OTI4NjY1MUVDRTQ1QjNEIiBcCisgICAgIkMyMDA3Q0I4QTE2M0JGMDU5OERBNDgzNjFDNTVEMzlBNjkxNjNGQThGRDI0Q0Y1RiIgXAorICAgICI4MzY1NUQyM0RDQTNBRDk2MUM2MkYzNTYyMDg1NTJCQjlFRDUyOTA3NzA5Njk2NkQiIFwKKyAgICAiNjcwQzM1NEU0QUJDOTgwNEYxNzQ2QzA4Q0ExODIxN0MzMjkwNUU0NjJFMzZDRTNCIiBcCisgICAgIkUzOUU3NzJDMTgwRTg2MDM5QjI3ODNBMkVDMDdBMjhGQjVDNTVERjA2RjRDNTJDOSIgXAorICAgICJERTJCQ0JGNjk1NTgxNzE4Mzk5NTQ5N0NFQTk1NkFFNTE1RDIyNjE4OThGQTA1MTAiIFwKKyAgICAiMTU3MjhFNUE4QUFBQzQyREFEMzMxNzBEMDQ1MDdBMzNBODU1MjFBQkRGMUNCQTY0IiBcCisgICAgIkVDRkI4NTA0NThEQkVGMEE4QUVBNzE1NzVEMDYwQzdEQjM5NzBGODVBNkUxRTRDNyIgXAorICAgICJBQkY1QUU4Q0RCMDkzM0Q3MUU4Qzk0RTA0QTI1NjE5RENFRTNEMjI2MUFEMkVFNkIiIFwKKyAgICAiRjEyRkZBMDZEOThBMDg2NEQ4NzYwMjczM0VDODZBNjQ1MjFGMkIxODE3N0IyMDBDIiBcCisgICAgIkJCRTExNzU3N0E2MTVENkM3NzA5ODhDMEJBRDk0NkUyMDhFMjRGQTA3NEU1QUIzMSIgXAorICAgICI0M0RCNUJGQ0UwRkQxMDhFNEI4MkQxMjBBOTNBRDJDQUZGRkZGRkZGRkZGRkZGRkYiCisKKyNkZWZpbmUgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzMwNzJfRyAgICAgICAgICAiMDIiCisKKyNkZWZpbmUgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzQwOTZfUCAgICAgICAgICAgICAgICBcCisgICAgIkZGRkZGRkZGRkZGRkZGRkZDOTBGREFBMjIxNjhDMjM0QzRDNjYyOEI4MERDMUNEMSIgXAorICAgICIyOTAyNEUwODhBNjdDQzc0MDIwQkJFQTYzQjEzOUIyMjUxNEEwODc5OEUzNDA0REQiIFwKKyAgICAiRUY5NTE5QjNDRDNBNDMxQjMwMkIwQTZERjI1RjE0Mzc0RkUxMzU2RDZENTFDMjQ1IiBcCisgICAgIkU0ODVCNTc2NjI1RTdFQzZGNDRDNDJFOUE2MzdFRDZCMEJGRjVDQjZGNDA2QjdFRCIgXAorICAgICJFRTM4NkJGQjVBODk5RkE1QUU5RjI0MTE3QzRCMUZFNjQ5Mjg2NjUxRUNFNDVCM0QiIFwKKyAgICAiQzIwMDdDQjhBMTYzQkYwNTk4REE0ODM2MUM1NUQzOUE2OTE2M0ZBOEZEMjRDRjVGIiBcCisgICAgIjgzNjU1RDIzRENBM0FEOTYxQzYyRjM1NjIwODU1MkJCOUVENTI5MDc3MDk2OTY2RCIgXAorICAgICI2NzBDMzU0RTRBQkM5ODA0RjE3NDZDMDhDQTE4MjE3QzMyOTA1RTQ2MkUzNkNFM0IiIFwKKyAgICAiRTM5RTc3MkMxODBFODYwMzlCMjc4M0EyRUMwN0EyOEZCNUM1NURGMDZGNEM1MkM5IiBcCisgICAgIkRFMkJDQkY2OTU1ODE3MTgzOTk1NDk3Q0VBOTU2QUU1MTVEMjI2MTg5OEZBMDUxMCIgXAorICAgICIxNTcyOEU1QThBQUFDNDJEQUQzMzE3MEQwNDUwN0EzM0E4NTUyMUFCREYxQ0JBNjQiIFwKKyAgICAiRUNGQjg1MDQ1OERCRUYwQThBRUE3MTU3NUQwNjBDN0RCMzk3MEY4NUE2RTFFNEM3IiBcCisgICAgIkFCRjVBRThDREIwOTMzRDcxRThDOTRFMDRBMjU2MTlEQ0VFM0QyMjYxQUQyRUU2QiIgXAorICAgICJGMTJGRkEwNkQ5OEEwODY0RDg3NjAyNzMzRUM4NkE2NDUyMUYyQjE4MTc3QjIwMEMiIFwKKyAgICAiQkJFMTE3NTc3QTYxNUQ2Qzc3MDk4OEMwQkFEOTQ2RTIwOEUyNEZBMDc0RTVBQjMxIiBcCisgICAgIjQzREI1QkZDRTBGRDEwOEU0QjgyRDEyMEE5MjEwODAxMUE3MjNDMTJBNzg3RTZENyIgXAorICAgICI4ODcxOUExMEJEQkE1QjI2OTlDMzI3MTg2QUY0RTIzQzFBOTQ2ODM0QjYxNTBCREEiIFwKKyAgICAiMjU4M0U5Q0EyQUQ0NENFOERCQkJDMkRCMDRERThFRjkyRThFRkMxNDFGQkVDQUE2IiBcCisgICAgIjI4N0M1OTQ3NEU2QkMwNUQ5OUIyOTY0RkEwOTBDM0EyMjMzQkExODY1MTVCRTdFRCIgXAorICAgICIxRjYxMjk3MENFRTJEN0FGQjgxQkRENzYyMTcwNDgxQ0QwMDY5MTI3RDVCMDVBQTkiIFwKKyAgICAiOTNCNEVBOTg4RDhGRERDMTg2RkZCN0RDOTBBNkMwOEY0REY0MzVDOTM0MDYzMTk5IiBcCisgICAgIkZGRkZGRkZGRkZGRkZGRkYiCisKKyNkZWZpbmUgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzQwOTZfRyAgICAgICAgICAiMDIiCisKKyNkZWZpbmUgTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzIwNDhfUCAgICAgICAgICAgICAgIFwKKyAgICAiQUQxMDdFMUU5MTIzQTlEMEQ2NjBGQUE3OTU1OUM1MUZBMjBENjRFNTY4M0I5RkQxIiBcCisgICAgIkI1NEIxNTk3QjYxRDBBNzVFNkZBMTQxREY5NUE1NkRCQUY5QTNDNDA3QkExREYxNSIgXAorICAgICJFQjNENjg4QTMwOUMxODBFMURFNkI4NUExMjc0QTBBNjZEM0Y4MTUyQUQ2QUMyMTIiIFwKKyAgICAiOTAzN0M5RURFRkRBNERGOEQ5MUU4RkVGNTVCNzM5NEI3QUQ1QjdEMEI2QzEyMjA3IiBcCisgICAgIkM5Rjk4RDExRUQzNERCRjZDNkJBMEIyQzhCQkMyN0JFNkEwMEUwQTBCOUM0OTcwOCIgXAorICAgICJCM0JGOEEzMTcwOTE4ODM2ODEyODYxMzBCQzg5ODVEQjE2MDJFNzE0NDE1RDkzMzAiIFwKKyAgICAiMjc4MjczQzdERTMxRUZEQzczMTBGNzEyMUZENUEwNzQxNTk4N0Q5QURDMEE0ODZEIiBcCisgICAgIkNERjkzQUNDNDQzMjgzODczMTVENzVFMTk4QzY0MUE0ODBDRDg2QTFCOUU1ODdFOCIgXAorICAgICJCRTYwRTY5Q0M5MjhCMkI5QzUyMTcyRTQxMzA0MkU5QjIzRjEwQjBFMTZFNzk3NjMiIFwKKyAgICAiQzlCNTNEQ0Y0QkE4MEEyOUUzRkI3M0MxNkI4RTc1Qjk3RUYzNjNFMkZGQTMxRjcxIiBcCisgICAgIkNGOURFNTM4NEU3MUI4MUMwQUM0REZGRTBDMTBFNjRGIgorCisjZGVmaW5lIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X0cgICAgICAgICAgICAgIFwKKyAgICAiQUM0MDMyRUY0RjJEOUFFMzlERjMwQjVDOEZGREFDNTA2Q0RFQkU3Qjg5OTk4Q0FGIlwKKyAgICAiNzQ4NjZBMDhDRkU0RkZFM0E2ODI0QTRFMTBCOUE2RjBERDkyMUYwMUE3MEM0QUZBIlwKKyAgICAiQUI3MzlENzcwMEMyOUY1MkM1N0RCMTdDNjIwQTg2NTJCRTVFOTAwMUE4RDY2QUQ3IlwKKyAgICAiQzE3NjY5MTAxOTk5MDI0QUY0RDAyNzI3NUFDMTM0OEJCOEE3NjJEMDUyMUJDOThBIlwKKyAgICAiRTI0NzE1MDQyMkVBMUVENDA5OTM5RDU0REE3NDYwQ0RCNUY2QzZCMjUwNzE3Q0JFIlwKKyAgICAiRjE4MEVCMzQxMThFOThEMTE5NTI5QTQ1RDZGODM0NTY2RTMwMjVFMzE2QTMzMEVGIlwKKyAgICAiQkI3N0E4NkYwQzFBQjE1QjA1MUFFM0Q0MjhDOEY4QUNCNzBBODEzNzE1MEI4RUVCIlwKKyAgICAiMTBFMTgzRUREMTk5NjNEREQ5RTI2M0U0NzcwNTg5RUY2QUEyMUU3RjVGMkZGMzgxIlwKKyAgICAiQjUzOUNDRTM0MDlEMTNDRDU2NkFGQkI0OEQ2QzAxOTE4MUUxQkNGRTk0QjMwMjY5IlwKKyAgICAiRURGRTcyRkU5QjZBQTRCRDdCNUEwRjFDNzFDRkZGNEMxOUM0MThFMUY2RUMwMTc5IlwKKyAgICAiODFCQzA4N0YyQTcwNjVCMzg0Qjg5MEQzMTkxRjJCRkEiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgREhNIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgc2l6ZV90IGxlbjsgLyohPCAgc2l6ZShQKSBpbiBjaGFycyAgKi8KKyAgICBtYmVkdGxzX21waSBQOyAgICAgIC8qITwgIHByaW1lIG1vZHVsdXMgICAgICovCisgICAgbWJlZHRsc19tcGkgRzsgICAgICAvKiE8ICBnZW5lcmF0b3IgICAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIFg7ICAgICAgLyohPCAgc2VjcmV0IHZhbHVlICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBHWDsgICAgIC8qITwgIHNlbGYgPSBHXlggbW9kIFAgICovCisgICAgbWJlZHRsc19tcGkgR1k7ICAgICAvKiE8ICBwZWVyID0gR15ZIG1vZCBQICAqLworICAgIG1iZWR0bHNfbXBpIEs7ICAgICAgLyohPCAga2V5ID0gR1leWCBtb2QgUCAgKi8KKyAgICBtYmVkdGxzX21waSBSUDsgICAgIC8qITwgIGNhY2hlZCBSXjIgbW9kIFAgICovCisgICAgbWJlZHRsc19tcGkgVmk7ICAgICAvKiE8ICBibGluZGluZyB2YWx1ZSAgICAqLworICAgIG1iZWR0bHNfbXBpIFZmOyAgICAgLyohPCAgdW4tYmxpbmRpbmcgdmFsdWUgKi8KKyAgICBtYmVkdGxzX21waSBwWDsgICAgIC8qITwgIHByZXZpb3VzIFggICAgICAgICovCit9CittYmVkdGxzX2RobV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIERITSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIERITSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19kaG1faW5pdCggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhcnNlIHRoZSBTZXJ2ZXJLZXlFeGNoYW5nZSBwYXJhbWV0ZXJzCisgKgorICogXHBhcmFtIGN0eCAgICAgIERITSBjb250ZXh0CisgKiBccGFyYW0gcCAgICAgICAgJihzdGFydCBvZiBpbnB1dCBidWZmZXIpCisgKiBccGFyYW0gZW5kICAgICAgZW5kIG9mIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0RITV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldHVwIGFuZCB3cml0ZSB0aGUgU2VydmVyS2V5RXhjaGFuZ2UgcGFyYW1ldGVycworICoKKyAqIFxwYXJhbSBjdHggICAgICBESE0gY29udGV4dAorICogXHBhcmFtIHhfc2l6ZSAgIHByaXZhdGUgdmFsdWUgc2l6ZSBpbiBieXRlcworICogXHBhcmFtIG91dHB1dCAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIG9sZW4gICAgIG51bWJlciBvZiBjaGFycyB3cml0dGVuCisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBjdHgtPlAgYW5kIGN0eC0+RworICogICAgICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBiZWVuIHByb3Blcmx5IHNldCAoZm9yIGV4YW1wbGUKKyAqICAgICAgICAgICAgICAgICB1c2luZyBtYmVkdGxzX21waV9yZWFkX3N0cmluZyBvciBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSkuCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfREhNX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2RobV9tYWtlX3BhcmFtcyggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LCBpbnQgeF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbXBvcnQgdGhlIHBlZXIncyBwdWJsaWMgdmFsdWUgR15ZCisgKgorICogXHBhcmFtIGN0eCAgICAgIERITSBjb250ZXh0CisgKiBccGFyYW0gaW5wdXQgICAgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0gaWxlbiAgICAgc2l6ZSBvZiBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9ESE1fWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZGhtX3JlYWRfcHVibGljKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ3JlYXRlIG93biBwcml2YXRlIHZhbHVlIFggYW5kIGV4cG9ydCBHXlgKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgREhNIGNvbnRleHQKKyAqIFxwYXJhbSB4X3NpemUgICBwcml2YXRlIHZhbHVlIHNpemUgaW4gYnl0ZXMKKyAqIFxwYXJhbSBvdXRwdXQgICBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBvbGVuICAgICBtdXN0IGJlIGF0IGxlYXN0IGVxdWFsIHRvIHRoZSBzaXplIG9mIFAsIGN0eC0+bGVuCisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0RITV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwgaW50IHhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG9sZW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBEZXJpdmUgYW5kIGV4cG9ydCB0aGUgc2hhcmVkIHNlY3JldCAoR15ZKV5YIG1vZCBQCisgKgorICogXHBhcmFtIGN0eCAgICAgIERITSBjb250ZXh0CisgKiBccGFyYW0gb3V0cHV0ICAgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gb3V0cHV0X3NpemUgICBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBvbGVuICAgICBvbiBleGl0LCBob2xkcyB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uLCBmb3IgYmxpbmRpbmcgcHVycG9zZXMKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfREhNX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIElmIG5vbi1OVUxMLCBmX3JuZyBpcyB1c2VkIHRvIGJsaW5kIHRoZSBpbnB1dCBhcworICogICAgICAgICAgICAgICAgIGNvdW50ZXJtZWFzdXJlIGFnYWluc3QgdGltaW5nIGF0dGFja3MuIEJsaW5kaW5nIGlzCisgKiAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSB1c2VkIGlmIGFuZCBvbmx5IGlmIG91ciBzZWNyZXQgdmFsdWUgWCBpcworICogICAgICAgICAgICAgICAgIHJlLXVzZWQgYW5kIGNvc3RzIG5vdGhpbmcgb3RoZXJ3aXNlLCBzbyBpdCBpcyByZWNvbW1lbmRlZAorICogICAgICAgICAgICAgICAgIHRvIGFsd2F5cyBwYXNzIGEgbm9uLU5VTEwgZl9ybmcgYXJndW1lbnQuCisgKi8KK2ludCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X3NpemUsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEZyZWUgYW5kIGNsZWFyIHRoZSBjb21wb25lbnRzIG9mIGEgREhNIGtleQorICoKKyAqIFxwYXJhbSBjdHggICAgICBESE0gY29udGV4dCB0byBmcmVlIGFuZCBjbGVhcgorICovCit2b2lkIG1iZWR0bHNfZGhtX2ZyZWUoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfUEFSU0VfQykKKy8qKiBcaW5ncm91cCB4NTA5X21vZHVsZSAqLworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGFyc2UgREhNIHBhcmFtZXRlcnMgaW4gUEVNIG9yIERFUiBmb3JtYXQKKyAqCisgKiBccGFyYW0gZGhtICAgICAgREhNIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBkaG1pbiAgICBpbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBkaG1pbmxlbiBzaXplIG9mIHRoZSBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgZm9yIFBFTSBkYXRhKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgREhNIG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2RobV9wYXJzZV9kaG0oIG1iZWR0bHNfZGhtX2NvbnRleHQgKmRobSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGhtaW4sCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRobWlubGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKiogXGluZ3JvdXAgeDUwOV9tb2R1bGUgKi8KKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgYW5kIHBhcnNlIERITSBwYXJhbWV0ZXJzCisgKgorICogXHBhcmFtIGRobSAgICAgIERITSBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0gcGF0aCAgICAgZmlsZW5hbWUgdG8gcmVhZCB0aGUgREhNIFBhcmFtZXRlcnMgZnJvbQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgREhNIG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2RobV9wYXJzZV9kaG1maWxlKCBtYmVkdGxzX2RobV9jb250ZXh0ICpkaG0sIGNvbnN0IGNoYXIgKnBhdGggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisjZW5kaWYgLyogTUJFRFRMU19BU04xX1BBUlNFX0MgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZGhtX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGRobS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjZGguaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZWNkaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWEyODEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjZGguaApAQCAtMCwwICsxLDIxNCBAQAorLyoqCisgKiBcZmlsZSBlY2RoLmgKKyAqCisgKiBcYnJpZWYgRWxsaXB0aWMgY3VydmUgRGlmZmllLUhlbGxtYW4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19FQ0RIX0gKKyNkZWZpbmUgTUJFRFRMU19FQ0RIX0gKKworI2luY2x1ZGUgImVjcC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogV2hlbiBpbXBvcnRpbmcgZnJvbSBhbiBFQyBrZXksIHNlbGVjdCBpZiBpdCBpcyBvdXIga2V5IG9yIHRoZSBwZWVyJ3Mga2V5CisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE1CRURUTFNfRUNESF9PVVJTLAorICAgIE1CRURUTFNfRUNESF9USEVJUlMsCit9IG1iZWR0bHNfZWNkaF9zaWRlOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRUNESCBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsgICAgICAvKiE8ICBlbGxpcHRpYyBjdXJ2ZSB1c2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBkOyAgICAgICAgICAgICAgLyohPCAgb3VyIHNlY3JldCB2YWx1ZSAocHJpdmF0ZSBrZXkpICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgUTsgICAgICAgIC8qITwgIG91ciBwdWJsaWMgdmFsdWUgKHB1YmxpYyBrZXkpICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFFwOyAgICAgICAvKiE8ICBwZWVyJ3MgcHVibGljIHZhbHVlIChwdWJsaWMga2V5KSAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSB6OyAgICAgICAgICAgICAgLyohPCAgc2hhcmVkIHNlY3JldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHBvaW50X2Zvcm1hdDsgICAvKiE8ICBmb3JtYXQgZm9yIHBvaW50IGV4cG9ydCBpbiBUTFMgbWVzc2FnZXMgICAgICAgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBWaTsgICAgICAgLyohPCAgYmxpbmRpbmcgdmFsdWUgKGZvciBsYXRlcikgICAgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgVmY7ICAgICAgIC8qITwgIHVuLWJsaW5kaW5nIHZhbHVlIChmb3IgbGF0ZXIpICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIF9kOyAgICAgICAgICAgICAvKiE8ICBwcmV2aW91cyBkIChmb3IgbGF0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30KK21iZWR0bHNfZWNkaF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYSBwdWJsaWMga2V5LgorICogICAgICAgICAgICAgICAgICBSYXcgZnVuY3Rpb24gdGhhdCBvbmx5IGRvZXMgdGhlIGNvcmUgY29tcHV0YXRpb24uCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSBkICAgICAgICAgRGVzdGluYXRpb24gTVBJIChzZWNyZXQgZXhwb25lbnQsIGFrYSBwcml2YXRlIGtleSkKKyAqIFxwYXJhbSBRICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQgKHB1YmxpYyBrZXkpCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX01QSV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfbXBpICpkLCBtYmVkdGxzX2VjcF9wb2ludCAqUSwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb21wdXRlIHNoYXJlZCBzZWNyZXQKKyAqICAgICAgICAgICAgICAgICAgUmF3IGZ1bmN0aW9uIHRoYXQgb25seSBkb2VzIHRoZSBjb3JlIGNvbXB1dGF0aW9uLgorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0geiAgICAgICAgIERlc3RpbmF0aW9uIE1QSSAoc2hhcmVkIHNlY3JldCkKKyAqIFxwYXJhbSBRICAgICAgICAgUHVibGljIGtleSBmcm9tIG90aGVyIHBhcnR5CisgKiBccGFyYW0gZCAgICAgICAgIE91ciBzZWNyZXQgZXhwb25lbnQgKHByaXZhdGUga2V5KQorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24gKHNlZSBub3RlcykKKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggb3IgTUJFRFRMU19NUElfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIElmIGZfcm5nIGlzIG5vdCBOVUxMLCBpdCBpcyB1c2VkIHRvIGltcGxlbWVudAorICogICAgICAgICAgICAgICAgICBjb3VudGVybWVhc3VyZXMgYWdhaW5zdCBwb3RlbnRpYWwgZWxhYm9yYXRlIHRpbWluZworICogICAgICAgICAgICAgICAgICBhdHRhY2tzLCBzZWUgXGMgbWJlZHRsc19lY3BfbXVsKCkgZm9yIGRldGFpbHMuCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfbXBpICp6LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpRLCBjb25zdCBtYmVkdGxzX21waSAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19lY2RoX2luaXQoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc19lY2RoX2ZyZWUoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyYXRlIGEgcHVibGljIGtleSBhbmQgYSBUTFMgU2VydmVyS2V5RXhjaGFuZ2UgcGF5bG9hZC4KKyAqICAgICAgICAgICAgICAgICAgKEZpcnN0IGZ1bmN0aW9uIHVzZWQgYnkgYSBUTFMgc2VydmVyIGZvciBFQ0RIRS4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RIIGNvbnRleHQKKyAqIFxwYXJhbSBvbGVuICAgICAgbnVtYmVyIG9mIGNoYXJzIHdyaXR0ZW4KKyAqIFxwYXJhbSBidWYgICAgICAgZGVzdGluYXRpb24gYnVmZmVyCisgKiBccGFyYW0gYmxlbiAgICAgIGxlbmd0aCBvZiBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGN0eC0+Z3JwIGhhcyBhbHJlYWR5IGJlZW4KKyAqICAgICAgICAgICAgICAgICAgcHJvcGVybHkgc2V0IChmb3IgZXhhbXBsZSB1c2luZyBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfRUNQX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfbWFrZV9wYXJhbXMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUGFyc2UgYW5kIHByb2NyZXNzIGEgVExTIFNlcnZlcktleUV4aGFuZ2UgcGF5bG9hZC4KKyAqICAgICAgICAgICAgICAgICAgKEZpcnN0IGZ1bmN0aW9uIHVzZWQgYnkgYSBUTFMgY2xpZW50IGZvciBFQ0RIRS4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RIIGNvbnRleHQKKyAqIFxwYXJhbSBidWYgICAgICAgcG9pbnRlciB0byBzdGFydCBvZiBpbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBlbmQgICAgICAgb25lIHBhc3QgZW5kIG9mIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9FQ1BfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNkaF9yZWFkX3BhcmFtcyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldHVwIGFuIEVDREggY29udGV4dCBmcm9tIGFuIEVDIGtleS4KKyAqICAgICAgICAgICAgICAgICAgKFVzZWQgYnkgY2xpZW50cyBhbmQgc2VydmVycyBpbiBwbGFjZSBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgU2VydmVyS2V5RWNoYW5nZSBmb3Igc3RhdGljIEVDREg6IGltcG9ydCBFQ0RIIHBhcmFtZXRlcnMKKyAqICAgICAgICAgICAgICAgICAgZnJvbSBhIGNlcnRpZmljYXRlJ3MgRUMga2V5IGluZm9ybWF0aW9uLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVDREggY29uc3RleHQgdG8gc2V0CisgKiBccGFyYW0ga2V5ICAgICAgIEVDIGtleSB0byB1c2UKKyAqIFxwYXJhbSBzaWRlICAgICAgSXMgaXQgb3VyIGtleSAoMSkgb3IgdGhlIHBlZXIncyBrZXkgKDApID8KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfRUNQX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfZ2V0X3BhcmFtcyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwgY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX3NpZGUgc2lkZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYSBwdWJsaWMga2V5IGFuZCBhIFRMUyBDbGllbnRLZXlFeGNoYW5nZSBwYXlsb2FkLgorICogICAgICAgICAgICAgICAgICAoU2Vjb25kIGZ1bmN0aW9uIHVzZWQgYnkgYSBUTFMgY2xpZW50IGZvciBFQ0RIKEUpLikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVDREggY29udGV4dAorICogXHBhcmFtIG9sZW4gICAgICBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbgorICogXHBhcmFtIGJ1ZiAgICAgICBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBibGVuICAgICAgc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfRUNQX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuLAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUGFyc2UgYW5kIHByb2Nlc3MgYSBUTFMgQ2xpZW50S2V5RXhjaGFuZ2UgcGF5bG9hZC4KKyAqICAgICAgICAgICAgICAgICAgKFNlY29uZCBmdW5jdGlvbiB1c2VkIGJ5IGEgVExTIHNlcnZlciBmb3IgRUNESChFKS4pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RIIGNvbnRleHQKKyAqIFxwYXJhbSBidWYgICAgICAgc3RhcnQgb2YgaW5wdXQgYnVmZmVyCisgKiBccGFyYW0gYmxlbiAgICAgIGxlbmd0aCBvZiBpbnB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfRUNQX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMoIG1iZWR0bHNfZWNkaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRGVyaXZlIGFuZCBleHBvcnQgdGhlIHNoYXJlZCBzZWNyZXQuCisgKiAgICAgICAgICAgICAgICAgIChMYXN0IGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBUTFMgY2xpZW50IGVuIHNlcnZlcnMuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRUNESCBjb250ZXh0CisgKiBccGFyYW0gb2xlbiAgICAgIG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKiBccGFyYW0gYnVmICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICogXHBhcmFtIGJsZW4gICAgICBidWZmZXIgbGVuZ3RoCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbiwgc2VlIG5vdGVzIGZvciBcYyBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoKQorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX0VDUF9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGVjZGguaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2RzYS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lY2RzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODI3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjZHNhLmgKQEAgLTAsMCArMSwyNDggQEAKKy8qKgorICogXGZpbGUgZWNkc2EuaAorICoKKyAqIFxicmllZiBFbGxpcHRpYyBjdXJ2ZSBEU0EKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19FQ0RTQV9ICisjZGVmaW5lIE1CRURUTFNfRUNEU0FfSAorCisjaW5jbHVkZSAiZWNwLmgiCisjaW5jbHVkZSAibWQuaCIKKworLyoKKyAqIFJGQyA0NDkyIHBhZ2UgMjA6CisgKgorICogICAgIEVjZHNhLVNpZy1WYWx1ZSA6Oj0gU0VRVUVOQ0UgeworICogICAgICAgICByICAgICAgIElOVEVHRVIsCisgKiAgICAgICAgIHMgICAgICAgSU5URUdFUgorICogICAgIH0KKyAqCisgKiBTaXplIGlzIGF0IG1vc3QKKyAqICAgIDEgKHRhZykgKyAxIChsZW4pICsgMSAoaW5pdGlhbCAwKSArIEVDUF9NQVhfQllURVMgZm9yIGVhY2ggb2YgciBhbmQgcywKKyAqICAgIHR3aWNlIHRoYXQgKyAxICh0YWcpICsgMiAobGVuKSBmb3IgdGhlIHNlcXVlbmNlCisgKiAoYXNzdW1pbmcgRUNQX01BWF9CWVRFUyBpcyBsZXNzIHRoYW4gMTI2IGZvciByIGFuZCBzLAorICogYW5kIGxlc3MgdGhhbiAxMjQgKHRvdGFsIGxlbiA8PSAyNTUpIGZvciB0aGUgc2VxdWVuY2UpCisgKi8KKyNpZiBNQkVEVExTX0VDUF9NQVhfQllURVMgPiAxMjQKKyNlcnJvciAiTUJFRFRMU19FQ1BfTUFYX0JZVEVTIGJpZ2dlciB0aGFuIGV4cGVjdGVkLCBwbGVhc2UgZml4IE1CRURUTFNfRUNEU0FfTUFYX0xFTiIKKyNlbmRpZgorLyoqIE1heGltdW0gc2l6ZSBvZiBhbiBFQ0RTQSBzaWduYXR1cmUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgTUJFRFRMU19FQ0RTQV9NQVhfTEVOICAoIDMgKyAyICogKCAzICsgTUJFRFRMU19FQ1BfTUFYX0JZVEVTICkgKQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRUNEU0EgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBtYmVkdGxzX2VjcF9rZXlwYWlyIG1iZWR0bHNfZWNkc2FfY29udGV4dDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29tcHV0ZSBFQ0RTQSBzaWduYXR1cmUgb2YgYSBwcmV2aW91c2x5IGhhc2hlZCBtZXNzYWdlCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUgZGV0ZXJtaW5pc3RpYyB2ZXJzaW9uIGlzIHVzdWFsbHkgcHJlZmVyZWQuCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSByICAgICAgICAgRmlyc3Qgb3V0cHV0IGludGVnZXIKKyAqIFxwYXJhbSBzICAgICAgICAgU2Vjb25kIG91dHB1dCBpbnRlZ2VyCisgKiBccGFyYW0gZCAgICAgICAgIFByaXZhdGUgc2lnbmluZyBrZXkKKyAqIFxwYXJhbSBidWYgICAgICAgTWVzc2FnZSBoYXNoCisgKiBccGFyYW0gYmxlbiAgICAgIExlbmd0aCBvZiBidWYKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYIG9yIE1CRURUTFNfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3NpZ24oIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfbXBpICpyLCBtYmVkdGxzX21waSAqcywKKyAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb21wdXRlIEVDRFNBIHNpZ25hdHVyZSBvZiBhIHByZXZpb3VzbHkgaGFzaGVkIG1lc3NhZ2UsCisgKiAgICAgICAgICAgICAgICAgIGRldGVybWluaXN0aWMgdmVyc2lvbiAoUkZDIDY5NzkpLgorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwCisgKiBccGFyYW0gciAgICAgICAgIEZpcnN0IG91dHB1dCBpbnRlZ2VyCisgKiBccGFyYW0gcyAgICAgICAgIFNlY29uZCBvdXRwdXQgaW50ZWdlcgorICogXHBhcmFtIGQgICAgICAgICBQcml2YXRlIHNpZ25pbmcga2V5CisgKiBccGFyYW0gYnVmICAgICAgIE1lc3NhZ2UgaGFzaAorICogXHBhcmFtIGJsZW4gICAgICBMZW5ndGggb2YgYnVmCisgKiBccGFyYW0gbWRfYWxnICAgIE1EIGFsZ29yaXRobSB1c2VkIHRvIGhhc2ggdGhlIG1lc3NhZ2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYIG9yIE1CRURUTFNfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3NpZ25fZGV0KCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqciwgbWJlZHRsc19tcGkgKnMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICpkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFZlcmlmeSBFQ0RTQSBzaWduYXR1cmUgb2YgYSBwcmV2aW91c2x5IGhhc2hlZCBtZXNzYWdlCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSBidWYgICAgICAgTWVzc2FnZSBoYXNoCisgKiBccGFyYW0gYmxlbiAgICAgIExlbmd0aCBvZiBidWYKKyAqIFxwYXJhbSBRICAgICAgICAgUHVibGljIGtleSB0byB1c2UgZm9yIHZlcmlmaWNhdGlvbgorICogXHBhcmFtIHIgICAgICAgICBGaXJzdCBpbnRlZ2VyIG9mIHRoZSBzaWduYXR1cmUKKyAqIFxwYXJhbSBzICAgICAgICAgU2Vjb25kIGludGVnZXIgb2YgdGhlIHNpZ25hdHVyZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgaWYgc2lnbmF0dXJlIGlzIGludmFsaWQKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYIG9yIE1CRURUTFNfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3ZlcmlmeSggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSwgY29uc3QgbWJlZHRsc19tcGkgKnIsIGNvbnN0IG1iZWR0bHNfbXBpICpzKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvbXB1dGUgRUNEU0Egc2lnbmF0dXJlIGFuZCB3cml0ZSBpdCB0byBidWZmZXIsCisgKiAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgYXMgZGVmaW5lZCBpbiBSRkMgNDQ5MiBwYWdlIDIwLgorICogICAgICAgICAgICAgICAgICAoTm90IHRocmVhZC1zYWZlIHRvIHVzZSBzYW1lIGNvbnRleHQgaW4gbXVsdGlwbGUgdGhyZWFkcykKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSBkZXRlcm1pbmlzdGljZSB2ZXJzaW9uIChSRkMgNjk3OSkgaXMgdXNlZCBpZgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgaXMgZGVmaW5lZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVDRFNBIGNvbnRleHQKKyAqIFxwYXJhbSBtZF9hbGcgICAgQWxnb3JpdGhtIHRoYXQgd2FzIHVzZWQgdG8gaGFzaCB0aGUgbWVzc2FnZQorICogXHBhcmFtIGhhc2ggICAgICBNZXNzYWdlIGhhc2gKKyAqIFxwYXJhbSBobGVuICAgICAgTGVuZ3RoIG9mIGhhc2gKKyAqIFxwYXJhbSBzaWcgICAgICAgQnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBzaWduYXR1cmUKKyAqIFxwYXJhbSBzbGVuICAgICAgTGVuZ3RoIG9mIHRoZSBzaWduYXR1cmUgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHR3aWNlIHRoZQorICogICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBjdXJ2ZSB1c2VkLCBwbHVzIDkgKGVnLiA3MyBieXRlcyBpZiBhIDI1Ni1iaXQKKyAqICAgICAgICAgICAgICAgICAgY3VydmUgaXMgdXNlZCkuIE1CRURUTFNfRUNEU0FfTUFYX0xFTiBpcyBhbHdheXMgc2FmZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYLCBNQkVEVExTX0VSUl9NUElfWFhYIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlKCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQykKKyNpZiAhIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORykKKyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVEICAgIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQorI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19ERVBSRUNBVEVECisjZW5kaWYKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb21wdXRlIEVDRFNBIHNpZ25hdHVyZSBhbmQgd3JpdGUgaXQgdG8gYnVmZmVyLAorICogICAgICAgICAgICAgICAgICBzZXJpYWxpemVkIGFzIGRlZmluZWQgaW4gUkZDIDQ0OTIgcGFnZSAyMC4KKyAqICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5pc3RpYyB2ZXJzaW9uLCBSRkMgNjk3OS4KKyAqICAgICAgICAgICAgICAgICAgKE5vdCB0aHJlYWQtc2FmZSB0byB1c2Ugc2FtZSBjb250ZXh0IGluIG11bHRpcGxlIHRocmVhZHMpCisgKgorICogXGRlcHJlY2F0ZWQgICAgICBTdXBlcnNlZGVkIGJ5IG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlKCkgaW4gMi4wLjAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVDRFNBIGNvbnRleHQKKyAqIFxwYXJhbSBoYXNoICAgICAgTWVzc2FnZSBoYXNoCisgKiBccGFyYW0gaGxlbiAgICAgIExlbmd0aCBvZiBoYXNoCisgKiBccGFyYW0gc2lnICAgICAgIEJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgc2lnbmF0dXJlCisgKiBccGFyYW0gc2xlbiAgICAgIExlbmd0aCBvZiB0aGUgc2lnbmF0dXJlIHdyaXR0ZW4KKyAqIFxwYXJhbSBtZF9hbGcgICAgTUQgYWxnb3JpdGhtIHVzZWQgdG8gaGFzaCB0aGUgbWVzc2FnZQorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHR3aWNlIHRoZQorICogICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBjdXJ2ZSB1c2VkLCBwbHVzIDkgKGVnLiA3MyBieXRlcyBpZiBhIDI1Ni1iaXQKKyAqICAgICAgICAgICAgICAgICAgY3VydmUgaXMgdXNlZCkuIE1CRURUTFNfRUNEU0FfTUFYX0xFTiBpcyBhbHdheXMgc2FmZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYLCBNQkVEVExTX0VSUl9NUElfWFhYIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlX2RldCggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnICkgTUJFRFRMU19ERVBSRUNBVEVEOworI3VuZGVmIE1CRURUTFNfREVQUkVDQVRFRAorI2VuZGlmIC8qIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEICovCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBSZWFkIGFuZCB2ZXJpZnkgYW4gRUNEU0Egc2lnbmF0dXJlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RTQSBjb250ZXh0CisgKiBccGFyYW0gaGFzaCAgICAgIE1lc3NhZ2UgaGFzaAorICogXHBhcmFtIGhsZW4gICAgICBTaXplIG9mIGhhc2gKKyAqIFxwYXJhbSBzaWcgICAgICAgU2lnbmF0dXJlIHRvIHJlYWQgYW5kIHZlcmlmeQorICogXHBhcmFtIHNsZW4gICAgICBTaXplIG9mIHNpZworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgaWYgc2lnbmF0dXJlIGlzIGludmFsaWQsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9TSUdfTEVOX01JU01BVENIIGlmIHRoZSBzaWduYXR1cmUgaXMKKyAqICAgICAgICAgICAgICAgICAgdmFsaWQgYnV0IGl0cyBhY3R1YWwgbGVuZ3RoIGlzIGxlc3MgdGhhbiBzaWdsZW4sCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX0VSUl9NUElfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYW4gRUNEU0Ega2V5cGFpciBvbiB0aGUgZ2l2ZW4gY3VydmUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVDRFNBIGNvbnRleHQgaW4gd2hpY2ggdGhlIGtleXBhaXIgc2hvdWxkIGJlIHN0b3JlZAorICogXHBhcmFtIGdpZCAgICAgICBHcm91cCAoZWxsaXB0aWMgY3VydmUpIHRvIHVzZS4gT25lIG9mIHRoZSB2YXJpb3VzCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1hYWCBtYWNyb3MgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24uCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBjb2RlLgorICovCitpbnQgbWJlZHRsc19lY2RzYV9nZW5rZXkoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LCBtYmVkdGxzX2VjcF9ncm91cF9pZCBnaWQsCisgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgYW4gRUNEU0EgY29udGV4dCBmcm9tIGFuIEVDIGtleSBwYWlyCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFQ0RTQSBjb250ZXh0IHRvIHNldAorICogXHBhcmFtIGtleSAgICAgICBFQyBrZXkgdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBjb2RlLgorICovCitpbnQgbWJlZHRsc19lY2RzYV9mcm9tX2tleXBhaXIoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LCBjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19lY2RzYV9pbml0KCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX2VjZHNhX2ZyZWUoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4ICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBlY2RzYS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjanBha2UuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZWNqcGFrZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjYxNjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjanBha2UuaApAQCAtMCwwICsxLDIzOCBAQAorLyoqCisgKiBcZmlsZSBlY2pwYWtlLmgKKyAqCisgKiBcYnJpZWYgRWxsaXB0aWMgY3VydmUgSi1QQUtFCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfRUNKUEFLRV9ICisjZGVmaW5lIE1CRURUTFNfRUNKUEFLRV9ICisKKy8qCisgKiBKLVBBS0UgaXMgYSBwYXNzd29yZC1hdXRoZW50aWNhdGVkIGtleSBleGNoYW5nZSB0aGF0IGFsbG93cyBkZXJpdmluZyBhCisgKiBzdHJvbmcgc2hhcmVkIHNlY3JldCBmcm9tIGEgKHBvdGVudGlhbGx5IGxvdyBlbnRyb3B5KSBwcmUtc2hhcmVkCisgKiBwYXNzcGhyYXNlLCB3aXRoIGZvcndhcmQgc2VjcmVjeSBhbmQgbXV0dWFsIGF1dGhlbnRpY2F0aW9uLgorICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGFzc3dvcmRfQXV0aGVudGljYXRlZF9LZXlfRXhjaGFuZ2VfYnlfSnVnZ2xpbmcKKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgRWxsaXB0aWMgQ3VydmUgdmFyaWFudCBvZiBKLVBBS0UsCisgKiBhcyBkZWZpbmVkIGluIENoYXB0ZXIgNy40IG9mIHRoZSBUaHJlYWQgdjEuMCBTcGVjaWZpY2F0aW9uLAorICogYXZhaWxhYmxlIHRvIG1lbWJlcnMgb2YgdGhlIFRocmVhZCBHcm91cCBodHRwOi8vdGhyZWFkZ3JvdXAub3JnLworICoKKyAqIEFzIHRoZSBKLVBBS0UgYWxnb3JpdGhtIGlzIGluaGVyZW50bHkgc3ltbWV0cmljLCBzbyBpcyBvdXIgQVBJLgorICogRWFjaCBwYXJ0eSBuZWVkcyB0byBzZW5kIGl0cyBmaXJzdCByb3VuZCBtZXNzYWdlLCBpbiBhbnkgb3JkZXIsIHRvIHRoZQorICogb3RoZXIgcGFydHksIHRoZW4gZWFjaCBzZW5kcyBpdHMgc2Vjb25kIHJvdW5kIG1lc3NhZ2UsIGluIGFueSBvcmRlci4KKyAqIFRoZSBwYXlsb2FkcyBhcmUgc2VyaWFsaXplZCBpbiBhIHdheSBzdWl0YWJsZSBmb3IgdXNlIGluIFRMUywgYnV0IGNvdWxkCisgKiBhbHNvIGJlIHVzZSBvdXRzaWRlIFRMUy4KKyAqLworCisjaW5jbHVkZSAiZWNwLmgiCisjaW5jbHVkZSAibWQuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFJvbGVzIGluIHRoZSBFQyBKLVBBS0UgZXhjaGFuZ2UKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX0VDSlBBS0VfQ0xJRU5UID0gMCwgICAgICAgICAvKio8IENsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIE1CRURUTFNfRUNKUEFLRV9TRVJWRVIsICAgICAgICAgICAgIC8qKjwgU2VydmVyICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IG1iZWR0bHNfZWNqcGFrZV9yb2xlOworCisvKioKKyAqIEVDIEotUEFLRSBjb250ZXh0IHN0cnVjdHVyZS4KKyAqCisgKiBKLVBBS0UgaXMgYSBzeW1tZXRyaWMgcHJvdG9jb2wsIGV4Y2VwdCBmb3IgdGhlIGlkZW50aWZpZXJzIHVzZWQgaW4KKyAqIFplcm8tS25vd2xlZGdlIFByb29mcywgYW5kIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBzZWNvbmQgbWVzc2FnZQorICogKEtleUV4Y2hhbmdlKSBhcyBkZWZpbmVkIGJ5IHRoZSBUaHJlYWQgc3BlYy4KKyAqCisgKiBJbiBvcmRlciB0byBiZW5lZml0IGZyb20gdGhpcyBzeW1tZXRyeSwgd2UgY2hvb3NlIGEgZGlmZmVyZW50IG5hbWluZworICogY29udmV0aW9uIGZyb20gdGhlIFRocmVhZCB2MS4wIHNwZWMuIENvcnJlc3BvbmRhbmNlIGlzIGluZGljYXRlZCBpbiB0aGUKKyAqIGRlc2NyaXB0aW9uIGFzIGEgcGFpciBDOiBjbGllbnQgbmFtZSwgUzogc2VydmVyIG5hbWUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsgICAvKio8IEhhc2ggdG8gdXNlICAgICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsgICAgICAgICAgICAgIC8qKjwgRWxsaXB0aWMgY3VydmUgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19lY2pwYWtlX3JvbGUgcm9sZTsgICAgICAgICAgLyoqPCBBcmUgd2UgY2xpZW50IG9yIHNlcnZlcj8gICAgICAgKi8KKyAgICBpbnQgcG9pbnRfZm9ybWF0OyAgICAgICAgICAgICAgICAgICAvKio8IEZvcm1hdCBmb3IgcG9pbnQgZXhwb3J0ICAgICAgICAqLworCisgICAgbWJlZHRsc19lY3BfcG9pbnQgWG0xOyAgICAgICAgICAgICAgLyoqPCBNeSBwdWJsaWMga2V5IDEgICBDOiBYMSwgUzogWDMgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBYbTI7ICAgICAgICAgICAgICAvKio8IE15IHB1YmxpYyBrZXkgMiAgIEM6IFgyLCBTOiBYNCAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFhwMTsgICAgICAgICAgICAgIC8qKjwgUGVlciBwdWJsaWMga2V5IDEgQzogWDMsIFM6IFgxICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgWHAyOyAgICAgICAgICAgICAgLyoqPCBQZWVyIHB1YmxpYyBrZXkgMiBDOiBYNCwgUzogWDIgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBYcDsgICAgICAgICAgICAgICAvKio8IFBlZXIgcHVibGljIGtleSAgIEM6IFhzLCBTOiBYYyAqLworCisgICAgbWJlZHRsc19tcGkgeG0xOyAgICAgICAgICAgICAgICAgICAgLyoqPCBNeSBwcml2YXRlIGtleSAxICBDOiB4MSwgUzogeDMgKi8KKyAgICBtYmVkdGxzX21waSB4bTI7ICAgICAgICAgICAgICAgICAgICAvKio8IE15IHByaXZhdGUga2V5IDIgIEM6IHgyLCBTOiB4NCAqLworCisgICAgbWJlZHRsc19tcGkgczsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQcmUtc2hhcmVkIHNlY3JldCAocGFzc3BocmFzZSkgKi8KK30gbWJlZHRsc19lY2pwYWtlX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEgY29udGV4dAorICogICAgICAgICAgICAgICAgICAoanVzdCBtYWtlcyBpdCByZWFkeSBmb3Igc2V0dXAoKSBvciBmcmVlKCkpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19lY2pwYWtlX2luaXQoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB1cCBhIGNvbnRleHQgZm9yIHVzZQorICoKKyAqIFxub3RlICAgICAgICAgICAgQ3VycmVudGx5IHRoZSBvbmx5IHZhbHVlcyBmb3IgaGFzaC9jdXJ2ZSBhbGxvd2VkIGJ5IHRoZQorICogICAgICAgICAgICAgICAgICBzdGFuZGFyZCBhcmUgTUJFRFRMU19NRF9TSEEyNTYvTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgY29udGV4dCB0byBzZXQgdXAKKyAqIFxwYXJhbSByb2xlICAgICAgT3VyIHJvbGU6IGNsaWVudCBvciBzZXJ2ZXIKKyAqIFxwYXJhbSBoYXNoICAgICAgaGFzaCBmdW5jdGlvbiB0byB1c2UgKE1CRURUTFNfTURfWFhYKQorICogXHBhcmFtIGN1cnZlICAgICBlbGxpcHRpYyBjdXJ2ZSBpZGVudGlmaWVyIChNQkVEVExTX0VDUF9EUF9YWFgpCisgKiBccGFyYW0gc2VjcmV0ICAgIHByZS1zaGFyZWQgc2VjcmV0IChwYXNzcGhyYXNlKQorICogXHBhcmFtIGxlbiAgICAgICBsZW5ndGggb2YgdGhlIHNoYXJlZCBzZWNyZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bGwsCisgKiAgICAgICAgICAgICAgICAgIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9zZXR1cCggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNqcGFrZV9yb2xlIHJvbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgY3VydmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qCisgKiBcYnJpZWYgICAgICAgICAgIENoZWNrIGlmIGEgY29udGV4dCBpcyByZWFkeSBmb3IgdXNlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIGNoZWNrCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHRoZSBjb250ZXh0IGlzIHJlYWR5IGZvciB1c2UsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9jaGVjayggY29uc3QgbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBmaXJzdCByb3VuZCBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgIChUTFM6IGNvbnRlbnRzIG9mIHRoZSBDbGllbnQvU2VydmVySGVsbG8gZXh0ZW5zaW9uLAorICogICAgICAgICAgICAgICAgICBleGNsdWRpbmcgZXh0ZW5zaW9uIHR5cGUgYW5kIGxlbmd0aCBieXRlcykKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gYnVmICAgICAgIEJ1ZmZlciB0byB3cml0ZSB0aGUgY29udGVudHMgdG8KKyAqIFxwYXJhbSBsZW4gICAgICAgQnVmZmVyIHNpemUKKyAqIFxwYXJhbSBvbGVuICAgICAgV2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWxsLAorICogICAgICAgICAgICAgICAgICBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfb25lKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmVhZCBhbmQgcHJvY2VzcyB0aGUgZmlyc3Qgcm91bmQgbWVzc2FnZQorICogICAgICAgICAgICAgICAgICAoVExTOiBjb250ZW50cyBvZiB0aGUgQ2xpZW50L1NlcnZlckhlbGxvIGV4dGVuc2lvbiwKKyAqICAgICAgICAgICAgICAgICAgZXhjbHVkaW5nIGV4dGVuc2lvbiB0eXBlIGFuZCBsZW5ndGggYnl0ZXMpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGJ1ZiAgICAgICBQb2ludGVyIHRvIGV4dGVuc2lvbiBjb250ZW50cworICogXHBhcmFtIGxlbiAgICAgICBFeHRlbnNpb24gbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWxsLAorICogICAgICAgICAgICAgICAgICBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmF0ZSBhbmQgd3JpdGUgdGhlIHNlY29uZCByb3VuZCBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgIChUTFM6IGNvbnRlbnRzIG9mIHRoZSBDbGllbnQvU2VydmVyS2V5RXhjaGFuZ2UpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGJ1ZiAgICAgICBCdWZmZXIgdG8gd3JpdGUgdGhlIGNvbnRlbnRzIHRvCisgKiBccGFyYW0gbGVuICAgICAgIEJ1ZmZlciBzaXplCisgKiBccGFyYW0gb2xlbiAgICAgIFdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX3R3byggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJlYWQgYW5kIHByb2Nlc3MgdGhlIHNlY29uZCByb3VuZCBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgIChUTFM6IGNvbnRlbnRzIG9mIHRoZSBDbGllbnQvU2VydmVyS2V5RXhjaGFuZ2UpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGJ1ZiAgICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlCisgKiBccGFyYW0gbGVuICAgICAgIE1lc3NhZ2UgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWxsLAorICogICAgICAgICAgICAgICAgICBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBEZXJpdmUgdGhlIHNoYXJlZCBzZWNyZXQKKyAqICAgICAgICAgICAgICAgICAgKFRMUzogUHJlLU1hc3RlciBTZWNyZXQpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGJ1ZiAgICAgICBCdWZmZXIgdG8gd3JpdGUgdGhlIGNvbnRlbnRzIHRvCisgKiBccGFyYW0gbGVuICAgICAgIEJ1ZmZlciBzaXplCisgKiBccGFyYW0gb2xlbiAgICAgIFdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsbCwKKyAqICAgICAgICAgICAgICAgICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIGEgY29udGV4dCdzIGNvbnRlbnQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGNvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfZWNqcGFrZV9mcmVlKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiBhIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2Vfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBlY2pwYWtlLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZWNwLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDZjNzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VjcC5oCkBAIC0wLDAgKzEsNjY5IEBACisvKioKKyAqIFxmaWxlIGVjcC5oCisgKgorICogXGJyaWVmIEVsbGlwdGljIGN1cnZlcyBvdmVyIEdGKHApCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfRUNQX0gKKyNkZWZpbmUgTUJFRFRMU19FQ1BfSAorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisKKy8qCisgKiBFQ1AgZXJyb3IgY29kZXMKKyAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgICAgIC0weDRGODAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAgLTB4NEYwMCAgLyoqPCBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byB3cml0ZSB0by4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAgICAtMHg0RTgwICAvKio8IFJlcXVlc3RlZCBjdXJ2ZSBub3QgYXZhaWxhYmxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDRFMDAgIC8qKjwgVGhlIHNpZ25hdHVyZSBpcyBub3QgdmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VDUF9BTExPQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgLTB4NEQ4MCAgLyoqPCBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVEICAgICAgICAgICAgICAgICAgICAgLTB4NEQwMCAgLyoqPCBHZW5lcmF0aW9uIG9mIHJhbmRvbSB2YWx1ZSwgc3VjaCBhcyAoZXBoZW1lcmFsKSBrZXksIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZICAgICAgICAgICAgICAgICAgICAgICAtMHg0QzgwICAvKio8IEludmFsaWQgcHJpdmF0ZSBvciBwdWJsaWMga2V5LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSCAgICAgICAgICAgICAgICAgIC0weDRDMDAgIC8qKjwgU2lnbmF0dXJlIGlzIHZhbGlkIGJ1dCBzaG9ydGVyIHRoYW4gdGhlIHVzZXItc3VwcGxpZWQgbGVuZ3RoLiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogRG9tYWluIHBhcmFtZXRlcnMgKGN1cnZlLCBzdWJncm91cCBhbmQgZ2VuZXJhdG9yKSBpZGVudGlmaWVycy4KKyAqCisgKiBPbmx5IGN1cnZlcyBvdmVyIHByaW1lIGZpZWxkcyBhcmUgc3VwcG9ydGVkLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgbGlicmFyeSBkb2VzIG5vdCBzdXBwb3J0IHZhbGlkYXRpb24gb2YgYXJiaXRyYXJ5IGRvbWFpbgorICogcGFyYW1ldGVycy4gVGhlcmVmb3JlLCBvbmx5IHdlbGwta25vd24gZG9tYWluIHBhcmFtZXRlcnMgZnJvbSB0cnVzdGVkCisgKiBzb3VyY2VzIHNob3VsZCBiZSB1c2VkLiBTZWUgbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCgpLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQkVEVExTX0VDUF9EUF9OT05FID0gMCwKKyAgICBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEsICAgICAgLyohPCAxOTItYml0cyBOSVNUIGN1cnZlICAqLworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMSwgICAgICAvKiE8IDIyNC1iaXRzIE5JU1QgY3VydmUgICovCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLCAgICAgIC8qITwgMjU2LWJpdHMgTklTVCBjdXJ2ZSAgKi8KKyAgICBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjEsICAgICAgLyohPCAzODQtYml0cyBOSVNUIGN1cnZlICAqLworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMSwgICAgICAvKiE8IDUyMS1iaXRzIE5JU1QgY3VydmUgICovCisgICAgTUJFRFRMU19FQ1BfRFBfQlAyNTZSMSwgICAgICAgIC8qITwgMjU2LWJpdHMgQnJhaW5wb29sIGN1cnZlICovCisgICAgTUJFRFRMU19FQ1BfRFBfQlAzODRSMSwgICAgICAgIC8qITwgMzg0LWJpdHMgQnJhaW5wb29sIGN1cnZlICovCisgICAgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMSwgICAgICAgIC8qITwgNTEyLWJpdHMgQnJhaW5wb29sIGN1cnZlICovCisgICAgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOSwgICAgICAgICAgIC8qITwgQ3VydmUyNTUxOSAgICAgICAgICAgICAgICovCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxLCAgICAgIC8qITwgMTkyLWJpdHMgIktvYmxpdHoiIGN1cnZlICovCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxLCAgICAgIC8qITwgMjI0LWJpdHMgIktvYmxpdHoiIGN1cnZlICovCisgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxLCAgICAgIC8qITwgMjU2LWJpdHMgIktvYmxpdHoiIGN1cnZlICovCit9IG1iZWR0bHNfZWNwX2dyb3VwX2lkOworCisvKioKKyAqIE51bWJlciBvZiBzdXBwb3J0ZWQgY3VydmVzIChwbHVzIG9uZSBmb3IgTk9ORSkuCisgKgorICogKE1vbnRnb21lcnkgY3VydmVzIGV4Y2x1ZGVkIGZvciBub3cuKQorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0RQX01BWCAgICAgMTIKKworLyoqCisgKiBDdXJ2ZSBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQ7ICAgIC8qITwgSW50ZXJuYWwgaWRlbnRpZmllciAgICAgICAgKi8KKyAgICB1aW50MTZfdCB0bHNfaWQ7ICAgICAgICAgICAgICAgIC8qITwgVExTIE5hbWVkQ3VydmUgaWRlbnRpZmllciAgKi8KKyAgICB1aW50MTZfdCBiaXRfc2l6ZTsgICAgICAgICAgICAgIC8qITwgQ3VydmUgc2l6ZSBpbiBiaXRzICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgIC8qITwgSHVtYW4tZnJpZW5kbHkgbmFtZSAgICAgICAgKi8KK30gbWJlZHRsc19lY3BfY3VydmVfaW5mbzsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVDUCBwb2ludCBzdHJ1Y3R1cmUgKGphY29iaWFuIGNvb3JkaW5hdGVzKQorICoKKyAqIFxub3RlICAgICAgICAgICAgQWxsIGZ1bmN0aW9ucyBleHBlY3QgYW5kIHJldHVybiBwb2ludHMgc2F0aXNmeWluZworICogICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjogWiA9PSAwIG9yIFogPT0gMS4gKE90aGVyCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlcyBvZiBaIGFyZSB1c2VkIGJ5IGludGVybmFsIGZ1bmN0aW9ucyBvbmx5LikKKyAqICAgICAgICAgICAgICAgICAgVGhlIHBvaW50IGlzIHplcm8sIG9yICJhdCBpbmZpbml0eSIsIGlmIFogPT0gMC4KKyAqICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBYIGFuZCBZIGFyZSBpdHMgc3RhbmRhcmQgKGFmZmluZSkgY29vcmRpbmF0ZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19tcGkgWDsgICAgICAgICAgLyohPCAgdGhlIHBvaW50J3MgWCBjb29yZGluYXRlICAqLworICAgIG1iZWR0bHNfbXBpIFk7ICAgICAgICAgIC8qITwgIHRoZSBwb2ludCdzIFkgY29vcmRpbmF0ZSAgKi8KKyAgICBtYmVkdGxzX21waSBaOyAgICAgICAgICAvKiE8ICB0aGUgcG9pbnQncyBaIGNvb3JkaW5hdGUgICovCit9CittYmVkdGxzX2VjcF9wb2ludDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVDUCBncm91cCBzdHJ1Y3R1cmUKKyAqCisgKiBXZSBjb25zaWRlciB0d28gdHlwZXMgb2YgY3VydmVzIGVxdWF0aW9uczoKKyAqIDEuIFNob3J0IFdlaWVyc3RyYXNzIHleMiA9IHheMyArIEEgeCArIEIgICAgIG1vZCBQICAgKFNFQzEgKyBSRkMgNDQ5MikKKyAqIDIuIE1vbnRnb21lcnksICAgICAgIHleMiA9IHheMyArIEEgeF4yICsgeCAgIG1vZCBQICAgKEN1cnZlMjU1MTkgKyBkcmFmdCkKKyAqIEluIGJvdGggY2FzZXMsIGEgZ2VuZXJhdG9yIEcgZm9yIGEgcHJpbWUtb3JkZXIgc3ViZ3JvdXAgaXMgZml4ZWQuIEluIHRoZQorICogc2hvcnQgd2VpZXJzdHJhc3MsIHRoaXMgc3ViZ3JvdXAgaXMgYWN0dWFsbHkgdGhlIHdob2xlIGN1cnZlLCBhbmQgaXRzCisgKiBjYXJkaW5hbCBpcyBkZW5vdGVkIGJ5IE4uCisgKgorICogSW4gdGhlIGNhc2Ugb2YgU2hvcnQgV2VpZXJzdHJhc3MgY3VydmVzLCBvdXIgY29kZSByZXF1aXJlcyB0aGF0IE4gaXMgYW4gb2RkCisgKiBwcmltZS4gKFVzZSBvZGQgaW4gbWJlZHRsc19lY3BfbXVsKCkgYW5kIHByaW1lIGluIG1iZWR0bHNfZWNkc2Ffc2lnbigpIGZvciBibGluZGluZy4pCisgKgorICogSW4gdGhlIGNhc2Ugb2YgTW9udGdvbWVyeSBjdXJ2ZXMsIHdlIGRvbid0IHN0b3JlIEEgYnV0IChBICsgMikgLyA0IHdoaWNoIGlzCisgKiB0aGUgcXVhbnRpdHkgYWN0dWFsbHkgdXNlZCBpbiB0aGUgZm9ybXVsYXMuIEFsc28sIG5iaXRzIGlzIG5vdCB0aGUgc2l6ZSBvZiBOCisgKiBidXQgdGhlIHJlcXVpcmVkIHNpemUgZm9yIHByaXZhdGUga2V5cy4KKyAqCisgKiBJZiBtb2RwIGlzIE5VTEwsIHJlZHVjdGlvbiBtb2R1bG8gUCBpcyBkb25lIHVzaW5nIGEgZ2VuZXJpYyBhbGdvcml0aG0uCisgKiBPdGhlcndpc2UsIGl0IG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIG1iZWR0bHNfbXBpIGluIHRoZSByYW5nZQorICogMC4uMl4oMipwYml0cyktMSBhbmQgdHJhbnNmb3JtcyBpdCBpbi1wbGFjZSBpbiBhbiBpbnRlZ2VyIG9mIGxpdHRsZSBtb3JlCisgKiB0aGFuIHBiaXRzLCBzbyB0aGF0IHRoZSBpbnRlZ2VyIG1heSBiZSBlZmZpY2llbnRseSBicm91Z2h0IGluIHRoZSAwLi5QLTEKKyAqIHJhbmdlIGJ5IGEgZmV3IGFkZGl0aW9ucyBvciBzdWJzdHJhY3Rpb25zLiBJdCBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kCisgKiBub24temVybyBvbiBmYWlsdXJlLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGlkOyAgICAvKiE8ICBpbnRlcm5hbCBncm91cCBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBQOyAgICAgICAgICAgICAgLyohPCAgcHJpbWUgbW9kdWx1cyBvZiB0aGUgYmFzZSBmaWVsZCAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19tcGkgQTsgICAgICAgICAgICAgIC8qITwgIDEuIEEgaW4gdGhlIGVxdWF0aW9uLCBvciAyLiAoQSArIDIpIC8gNCAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIEI7ICAgICAgICAgICAgICAvKiE8ICAxLiBCIGluIHRoZSBlcXVhdGlvbiwgb3IgMi4gdW51c2VkICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX2VjcF9wb2ludCBHOyAgICAgICAgLyohPCAgZ2VuZXJhdG9yIG9mIHRoZSAoc3ViKWdyb3VwIHVzZWQgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19tcGkgTjsgICAgICAgICAgICAgIC8qITwgIDEuIHRoZSBvcmRlciBvZiBHLCBvciAyLiB1bnVzZWQgICAgICAgICAgICAgICAqLworICAgIHNpemVfdCBwYml0czsgICAgICAgLyohPCAgbnVtYmVyIG9mIGJpdHMgaW4gUCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2l6ZV90IG5iaXRzOyAgICAgICAvKiE8ICBudW1iZXIgb2YgYml0cyBpbiAxLiBQLCBvciAyLiBwcml2YXRlIGtleXMgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgaDsgICAgIC8qITwgIGludGVybmFsOiAxIGlmIHRoZSBjb25zdGFudHMgYXJlIHN0YXRpYyAgICAgICAqLworICAgIGludCAoKm1vZHApKG1iZWR0bHNfbXBpICopOyAvKiE8ICBmdW5jdGlvbiBmb3IgZmFzdCByZWR1Y3Rpb24gbW9kIFAgICAgICAgICAgICAgKi8KKyAgICBpbnQgKCp0X3ByZSkobWJlZHRsc19lY3BfcG9pbnQgKiwgdm9pZCAqKTsgIC8qITwgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqdF9wb3N0KShtYmVkdGxzX2VjcF9wb2ludCAqLCB2b2lkICopOyAvKiE8IHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHZvaWQgKnRfZGF0YTsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgdW51c2VkICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgKlQ7ICAgICAgIC8qITwgIHByZS1jb21wdXRlZCBwb2ludHMgZm9yIGVjcF9tdWxfY29tYigpICAgICAgICAqLworICAgIHNpemVfdCBUX3NpemU7ICAgICAgLyohPCAgbnVtYmVyIGZvciBwcmUtY29tcHV0ZWQgcG9pbnRzICAgICAgICAgICAgICAgICovCit9CittYmVkdGxzX2VjcF9ncm91cDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVDUCBrZXkgcGFpciBzdHJ1Y3R1cmUKKyAqCisgKiBBIGdlbmVyaWMga2V5IHBhaXIgdGhhdCBjb3VsZCBiZSB1c2VkIGZvciBFQ0RTQSwgZml4ZWQgRUNESCwgZXRjLgorICoKKyAqIFxub3RlIE1lbWJlcnMgcHVycG9zZWZ1bGx5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHN0cnVjIG1iZWR0bHNfZWNkc2FfY29udGV4dC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7ICAgICAgLyohPCAgRWxsaXB0aWMgY3VydmUgYW5kIGJhc2UgcG9pbnQgICAgICovCisgICAgbWJlZHRsc19tcGkgZDsgICAgICAgICAgICAgIC8qITwgIG91ciBzZWNyZXQgdmFsdWUgICAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfZWNwX3BvaW50IFE7ICAgICAgICAvKiE8ICBvdXIgcHVibGljIHZhbHVlICAgICAgICAgICAgICAgICAgKi8KK30KK21iZWR0bHNfZWNwX2tleXBhaXI7CisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19FQ1BfTUFYX0JJVFMpCisvKioKKyAqIE1heGltdW0gc2l6ZSBvZiB0aGUgZ3JvdXBzICh0aGF0IGlzLCBvZiBOIGFuZCBQKQorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX01BWF9CSVRTICAgICA1MjEgICAvKio8IE1heGltdW0gYml0IHNpemUgb2YgZ3JvdXBzICovCisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX0VDUF9NQVhfQllURVMgICAgKCAoIE1CRURUTFNfRUNQX01BWF9CSVRTICsgNyApIC8gOCApCisjZGVmaW5lIE1CRURUTFNfRUNQX01BWF9QVF9MRU4gICAoIDIgKiBNQkVEVExTX0VDUF9NQVhfQllURVMgKyAxICkKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRUNQX1dJTkRPV19TSVpFKQorLyoKKyAqIE1heGltdW0gIndpbmRvdyIgc2l6ZSB1c2VkIGZvciBwb2ludCBtdWx0aXBsaWNhdGlvbi4KKyAqIERlZmF1bHQ6IDYuCisgKiBNaW5pbXVtIHZhbHVlOiAyLiBNYXhpbXVtIHZhbHVlOiA3LgorICoKKyAqIFJlc3VsdCBpcyBhbiBhcnJheSBvZiBhdCBtb3N0ICggMSA8PCAoIE1CRURUTFNfRUNQX1dJTkRPV19TSVpFIC0gMSApICkKKyAqIHBvaW50cyB1c2VkIGZvciBwb2ludCBtdWx0aXBsaWNhdGlvbi4gVGhpcyB2YWx1ZSBpcyBkaXJlY3RseSB0aWVkIHRvIEVDCisgKiBwZWFrIG1lbW9yeSB1c2FnZSwgc28gZGVjcmVhc2luZyBpdCBieSBvbmUgc2hvdWxkIHJvdWdobHkgY3V0IG1lbW9yeSB1c2FnZQorICogYnkgdHdvIChpZiBsYXJnZSBjdXJ2ZXMgYXJlIGluIHVzZSkuCisgKgorICogUmVkdWN0aW9uIGluIHNpemUgbWF5IHJlZHVjZSBzcGVlZCwgYnV0IGxhcmdlciBjdXJ2ZXMgYXJlIGltcGFjdGVkIGZpcnN0LgorICogU2FtcGxlIHBlcmZvcm1hbmNlcyAoaW4gRUNESEUgaGFuZHNoYWtlcy9zLCB3aXRoIEZJWEVEX1BPSU5UX09QVElNID0gMSk6CisgKiAgICAgIHctc2l6ZTogICAgIDYgICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAgMgorICogICAgICA1MjEgICAgICAgMTQ1ICAgICAxNDEgICAgIDEzNSAgICAgMTIwICAgICAgOTcKKyAqICAgICAgMzg0ICAgICAgIDIxNCAgICAgMjA5ICAgICAxOTggICAgIDE3NyAgICAgMTQ2CisgKiAgICAgIDI1NiAgICAgICAzMjAgICAgIDMyMCAgICAgMzAzICAgICAyNjIgICAgIDIyNgorCisgKiAgICAgIDIyNCAgICAgICA0NzUgICAgIDQ3NSAgICAgNDUzICAgICAzOTggICAgIDM0MgorICogICAgICAxOTIgICAgICAgNjQwICAgICA2NDAgICAgIDYzMyAgICAgNTg3ICAgICA0NzYKKyAqLworI2RlZmluZSBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAgICA2ICAgLyoqPCBNYXhpbXVtIHdpbmRvdyBzaXplIHVzZWQgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0pCisvKgorICogVHJhZGUgbWVtb3J5IGZvciBzcGVlZCBvbiBmaXhlZC1wb2ludCBtdWx0aXBsaWNhdGlvbi4KKyAqCisgKiBUaGlzIHNwZWVkcyB1cCByZXBlYXRlZCBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgZ2VuZXJhdG9yICh0aGF0IGlzLCB0aGUKKyAqIG11bHRpcGxpY2F0aW9uIGluIEVDRFNBIHNpZ25hdHVyZXMsIGFuZCBoYWxmIG9mIHRoZSBtdWx0aXBsaWNhdGlvbnMgaW4KKyAqIEVDRFNBIHZlcmlmaWNhdGlvbiBhbmQgRUNESEUpIGJ5IGEgZmFjdG9yIHJvdWdobHkgMyB0byA0LgorICoKKyAqIFRoZSBjb3N0IGlzIGluY3JlYXNpbmcgRUMgcGVhayBtZW1vcnkgdXNhZ2UgYnkgYSBmYWN0b3Igcm91Z2hseSAyLgorICoKKyAqIENoYW5nZSB0aGlzIHZhbHVlIHRvIDAgdG8gcmVkdWNlIHBlYWsgbWVtb3J5IHVzYWdlLgorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNICAxICAgLyoqPCBFbmFibGUgZml4ZWQtcG9pbnQgc3BlZWQtdXAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSAqLworCisvKiBcfSBuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncyAqLworCisvKgorICogUG9pbnQgZm9ybWF0cywgZnJvbSBSRkMgNDQ5MidzIGVudW0gRUNQb2ludEZvcm1hdAorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCAgICAwICAgLyoqPCBVbmNvbXByZXNzZWQgcG9pbnQgZm9ybWF0ICovCisjZGVmaW5lIE1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQgICAgICAxICAgLyoqPCBDb21wcmVzc2VkIHBvaW50IGZvcm1hdCAqLworCisvKgorICogU29tZSBvdGhlciBjb25zdGFudHMgZnJvbSBSRkMgNDQ5MgorICovCisjZGVmaW5lIE1CRURUTFNfRUNQX1RMU19OQU1FRF9DVVJWRSAgICAzICAgLyoqPCBFQ0N1cnZlVHlwZSdzIG5hbWVkX2N1cnZlICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGN1cnZlcyBpbiBvcmRlciBvZiBwcmVmZXJyZW5jZQorICogICAgICAgICAgICAgICAgICAoZnVsbCBpbmZvcm1hdGlvbikKKyAqCisgKiBccmV0dXJuICAgICAgICAgIEEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXksIHRoZSBsYXN0IGVudHJ5IGlzIDAuCisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKm1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY3VydmVzIGluIG9yZGVyIG9mIHByZWZlcnJlbmNlCisgKiAgICAgICAgICAgICAgICAgIChncnBfaWQgb25seSkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIEEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXksCisgKiAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgd2l0aCBNQkVEVExTX0VDUF9EUF9OT05FLgorICovCitjb25zdCBtYmVkdGxzX2VjcF9ncm91cF9pZCAqbWJlZHRsc19lY3BfZ3JwX2lkX2xpc3QoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdldCBjdXJ2ZSBpbmZvcm1hdGlvbiBmcm9tIGFuIGludGVybmFsIGdyb3VwIGlkZW50aWZpZXIKKyAqCisgKiBccGFyYW0gZ3JwX2lkICAgIEEgTUJFRFRMU19FQ1BfRFBfWFhYIHZhbHVlCisgKgorICogXHJldHVybiAgICAgICAgICBUaGUgYXNzb2NpYXRlZCBjdXJ2ZSBpbmZvcm1hdGlvbiBvciBOVUxMCisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKm1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2V0IGN1cnZlIGluZm9ybWF0aW9uIGZyb20gYSBUTFMgTmFtZWRDdXJ2ZSB2YWx1ZQorICoKKyAqIFxwYXJhbSB0bHNfaWQgICAgQSBNQkVEVExTX0VDUF9EUF9YWFggdmFsdWUKKyAqCisgKiBccmV0dXJuICAgICAgICAgIFRoZSBhc3NvY2lhdGVkIGN1cnZlIGluZm9ybWF0aW9uIG9yIE5VTEwKKyAqLworY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZCggdWludDE2X3QgdGxzX2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZXQgY3VydmUgaW5mb3JtYXRpb24gZnJvbSBhIGh1bWFuLXJlYWRhYmxlIG5hbWUKKyAqCisgKiBccGFyYW0gbmFtZSAgICAgIFRoZSBuYW1lCisgKgorICogXHJldHVybiAgICAgICAgICBUaGUgYXNzb2NpYXRlZCBjdXJ2ZSBpbmZvcm1hdGlvbiBvciBOVUxMCisgKi8KK2NvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKm1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9uYW1lKCBjb25zdCBjaGFyICpuYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEgcG9pbnQgKGFzIHplcm8pCisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEgZ3JvdXAgKHRvIHNvbWV0aGluZyBtZWFuaW5nbGVzcykKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEga2V5IHBhaXIgKGFzIGFuIGludmFsaWQgb25lKQorICovCit2b2lkIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIHRoZSBjb21wb25lbnRzIG9mIGEgcG9pbnQKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgdGhlIGNvbXBvbmVudHMgb2YgYW4gRUNQIGdyb3VwCisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSB0aGUgY29tcG9uZW50cyBvZiBhIGtleSBwYWlyCisgKi8KK3ZvaWQgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvcHkgdGhlIGNvbnRlbnRzIG9mIHBvaW50IFEgaW50byBQCisgKgorICogXHBhcmFtIFAgICAgICAgICBEZXN0aW5hdGlvbiBwb2ludAorICogXHBhcmFtIFEgICAgICAgICBTb3VyY2UgcG9pbnQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZWNwX2NvcHkoIG1iZWR0bHNfZWNwX3BvaW50ICpQLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29weSB0aGUgY29udGVudHMgb2YgYSBncm91cCBvYmplY3QKKyAqCisgKiBccGFyYW0gZHN0ICAgICAgIERlc3RpbmF0aW9uIGdyb3VwCisgKiBccGFyYW0gc3JjICAgICAgIFNvdXJjZSBncm91cAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19lY3BfZ3JvdXBfY29weSggbWJlZHRsc19lY3BfZ3JvdXAgKmRzdCwgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKnNyYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IGEgcG9pbnQgdG8gemVybworICoKKyAqIFxwYXJhbSBwdCAgICAgICAgRGVzdGluYXRpb24gcG9pbnQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZWNwX3NldF96ZXJvKCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFRlbGwgaWYgYSBwb2ludCBpcyB6ZXJvCisgKgorICogXHBhcmFtIHB0ICAgICAgICBQb2ludCB0byB0ZXN0CisgKgorICogXHJldHVybiAgICAgICAgICAxIGlmIHBvaW50IGlzIHplcm8sIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX2VjcF9pc196ZXJvKCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENvbXBhcmUgdHdvIHBvaW50cworICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBhc3N1bWVzIHRoZSBwb2ludHMgYXJlIG5vcm1hbGl6ZWQuIE90aGVyd2lzZSwKKyAqICAgICAgICAgICAgICAgICAgdGhleSBtYXkgY29tcGFyZSBhcyAibm90IGVxdWFsIiBldmVuIGlmIHRoZXkgYXJlLgorICoKKyAqIFxwYXJhbSBQICAgICAgICAgRmlyc3QgcG9pbnQgdG8gY29tcGFyZQorICogXHBhcmFtIFEgICAgICAgICBTZWNvbmQgcG9pbnQgdG8gY29tcGFyZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiB0aGUgcG9pbnRzIGFyZSBlcXVhbCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBIG90aGVyd2lzZQorICovCitpbnQgbWJlZHRsc19lY3BfcG9pbnRfY21wKCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpRICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbXBvcnQgYSBub24temVybyBwb2ludCBmcm9tIHR3byBBU0NJSSBzdHJpbmdzCisgKgorICogXHBhcmFtIFAgICAgICAgICBEZXN0aW5hdGlvbiBwb2ludAorICogXHBhcmFtIHJhZGl4ICAgICBJbnB1dCBudW1lcmljIGJhc2UKKyAqIFxwYXJhbSB4ICAgICAgICAgRmlyc3QgYWZmaW5lIGNvb3JkaW5hdGUgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCisgKiBccGFyYW0geSAgICAgICAgIFNlY29uZCBhZmZpbmUgY29vcmRpbmF0ZSBhcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBNQkVEVExTX0VSUl9NUElfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfc3RyaW5nKCBtYmVkdGxzX2VjcF9wb2ludCAqUCwgaW50IHJhZGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqeCwgY29uc3QgY2hhciAqeSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRXhwb3J0IGEgcG9pbnQgaW50byB1bnNpZ25lZCBiaW5hcnkgZGF0YQorICoKKyAqIFxwYXJhbSBncnAgICAgICAgR3JvdXAgdG8gd2hpY2ggdGhlIHBvaW50IHNob3VsZCBiZWxvbmcKKyAqIFxwYXJhbSBQICAgICAgICAgUG9pbnQgdG8gZXhwb3J0CisgKiBccGFyYW0gZm9ybWF0ICAgIFBvaW50IGZvcm1hdCwgc2hvdWxkIGJlIGEgTUJFRFRMU19FQ1BfUEZfWFhYIG1hY3JvCisgKiBccGFyYW0gb2xlbiAgICAgIExlbmd0aCBvZiB0aGUgYWN0dWFsIG91dHB1dAorICogXHBhcmFtIGJ1ZiAgICAgICBPdXRwdXQgYnVmZmVyCisgKiBccGFyYW0gYnVmbGVuICAgIExlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKyAqICAgICAgICAgICAgICAgICAgb3IgTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKyAqLworaW50IG1iZWR0bHNfZWNwX3BvaW50X3dyaXRlX2JpbmFyeSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcm1hdCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW1wb3J0IGEgcG9pbnQgZnJvbSB1bnNpZ25lZCBiaW5hcnkgZGF0YQorICoKKyAqIFxwYXJhbSBncnAgICAgICAgR3JvdXAgdG8gd2hpY2ggdGhlIHBvaW50IHNob3VsZCBiZWxvbmcKKyAqIFxwYXJhbSBQICAgICAgICAgUG9pbnQgdG8gaW1wb3J0CisgKiBccGFyYW0gYnVmICAgICAgIElucHV0IGJ1ZmZlcgorICogXHBhcmFtIGlsZW4gICAgICBBY3R1YWwgbGVuZ3RoIG9mIGlucHV0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSBpZiBpbnB1dCBpcyBpbnZhbGlkLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgaWYgdGhlIHBvaW50IGZvcm1hdAorICogICAgICAgICAgICAgICAgICBpcyBub3QgaW1wbGVtZW50ZWQuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGNoZWNrIHRoYXQgdGhlIHBvaW50IGFjdHVhbGx5CisgKiAgICAgICAgICAgICAgICAgIGJlbG9uZ3MgdG8gdGhlIGdpdmVuIGdyb3VwLCBzZWUgbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCkgZm9yCisgKiAgICAgICAgICAgICAgICAgIHRoYXQuCisgKi8KK2ludCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbXBvcnQgYSBwb2ludCBmcm9tIGEgVExTIEVDUG9pbnQgcmVjb3JkCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAgdXNlZAorICogXHBhcmFtIHB0ICAgICAgICBEZXN0aW5hdGlvbiBwb2ludAorICogXHBhcmFtIGJ1ZiAgICAgICAkKFN0YXJ0IG9mIGlucHV0IGJ1ZmZlcikKKyAqIFxwYXJhbSBsZW4gICAgICAgQnVmZmVyIGxlbmd0aAorICoKKyAqIFxub3RlICAgICAgICAgICAgYnVmIGlzIHVwZGF0ZWQgdG8gcG9pbnQgcmlnaHQgYWZ0ZXIgdGhlIEVDUG9pbnQgb24gZXhpdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfWFhYIGlmIGluaXRpYWxpemF0aW9uIGZhaWxlZAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgaWYgaW5wdXQgaXMgaW52YWxpZAorICovCitpbnQgbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEV4cG9ydCBhIHBvaW50IGFzIGEgVExTIEVDUG9pbnQgcmVjb3JkCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAgdXNlZAorICogXHBhcmFtIHB0ICAgICAgICBQb2ludCB0byBleHBvcnQKKyAqIFxwYXJhbSBmb3JtYXQgICAgRXhwb3J0IGZvcm1hdAorICogXHBhcmFtIG9sZW4gICAgICBsZW5ndGggb2YgZGF0YSB3cml0dGVuCisgKiBccGFyYW0gYnVmICAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIGJsZW4gICAgICBCdWZmZXIgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorICogICAgICAgICAgICAgICAgICBvciBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTAorICovCitpbnQgbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcm1hdCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCBhIGdyb3VwIHVzaW5nIHdlbGwta25vd24gZG9tYWluIHBhcmFtZXRlcnMKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIERlc3RpbmF0aW9uIGdyb3VwCisgKiBccGFyYW0gaW5kZXggICAgIEluZGV4IGluIHRoZSBsaXN0IG9mIHdlbGwta25vd24gZG9tYWluIHBhcmFtZXRlcnMKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX1hYWCBpZiBpbml0aWFsaXphdGlvbiBmYWlsZWQKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgZm9yIHVua293bm4gZ3JvdXBzCisgKgorICogXG5vdGUgICAgICAgICAgICBJbmRleCBzaG91bGQgYmUgYSB2YWx1ZSBvZiBSRkMgNDQ5MidzIGVudW0gTmFtZWRDdXJ2ZSwKKyAqICAgICAgICAgICAgICAgICAgdXN1YWxseSBpbiB0aGUgZm9ybSBvZiBhIE1CRURUTFNfRUNQX0RQX1hYWCBtYWNyby4KKyAqLworaW50IG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGluZGV4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgYSBncm91cCBmcm9tIGEgVExTIEVDUGFyYW1ldGVycyByZWNvcmQKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIERlc3RpbmF0aW9uIGdyb3VwCisgKiBccGFyYW0gYnVmICAgICAgICYoU3RhcnQgb2YgaW5wdXQgYnVmZmVyKQorICogXHBhcmFtIGxlbiAgICAgICBCdWZmZXIgbGVuZ3RoCisgKgorICogXG5vdGUgICAgICAgICAgICBidWYgaXMgdXBkYXRlZCB0byBwb2ludCByaWdodCBhZnRlciBFQ1BhcmFtZXRlcnMgb24gZXhpdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfWFhYIGlmIGluaXRpYWxpemF0aW9uIGZhaWxlZAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgaWYgaW5wdXQgaXMgaW52YWxpZAorICovCitpbnQgbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIHRoZSBUTFMgRUNQYXJhbWV0ZXJzIHJlY29yZCBmb3IgYSBncm91cAorICoKKyAqIFxwYXJhbSBncnAgICAgICAgRUNQIGdyb3VwIHVzZWQKKyAqIFxwYXJhbSBvbGVuICAgICAgTnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4KKyAqIFxwYXJhbSBidWYgICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gYmxlbiAgICAgIEJ1ZmZlciBsZW5ndGgKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc193cml0ZV9ncm91cCggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIE11bHRpcGxpY2F0aW9uIGJ5IGFuIGludGVnZXI6IFIgPSBtICogUAorICogICAgICAgICAgICAgICAgICAoTm90IHRocmVhZC1zYWZlIHRvIHVzZSBzYW1lIGdyb3VwIGluIG11bHRpcGxlIHRocmVhZHMpCisgKgorICogXG5vdGUgICAgICAgICAgICBJbiBvcmRlciB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLCB0aGlzIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgIGV4ZWN1dGVzIHRoZSBleGFjdCBzYW1lIHNlcXVlbmNlIG9mIChiYXNlIGZpZWxkKQorICogICAgICAgICAgICAgICAgICBvcGVyYXRpb25zIGZvciBhbnkgdmFsaWQgbS4gSXQgYXZvaWRzIGFueSBpZi1icmFuY2ggb3IKKyAqICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kZXggZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBtLgorICoKKyAqIFxub3RlICAgICAgICAgICAgSWYgZl9ybmcgaXMgbm90IE5VTEwsIGl0IGlzIHVzZWQgdG8gcmFuZG9taXplIGludGVybWVkaWF0ZQorICogICAgICAgICAgICAgICAgICByZXN1bHRzIGluIG9yZGVyIHRvIHByZXZlbnQgcG90ZW50aWFsIHRpbWluZyBhdHRhY2tzCisgKiAgICAgICAgICAgICAgICAgIHRhcmdldGluZyB0aGVzZSByZXN1bHRzLiBJdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMKKyAqICAgICAgICAgICAgICAgICAgcHJvdmlkZSBhIG5vbi1OVUxMIGZfcm5nICh0aGUgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZSkuCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSBSICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQKKyAqIFxwYXJhbSBtICAgICAgICAgSW50ZWdlciBieSB3aGljaCB0byBtdWx0aXBseQorICogXHBhcmFtIFAgICAgICAgICBQb2ludCB0byBtdWx0aXBseQorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24gKHNlZSBub3RlcykKKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgaWYgbSBpcyBub3QgYSB2YWxpZCBwcml2a2V5CisgKiAgICAgICAgICAgICAgICAgIG9yIFAgaXMgbm90IGEgdmFsaWQgcHVia2V5LAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICovCitpbnQgbWJlZHRsc19lY3BfbXVsKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqbSwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAsCisgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgTXVsdGlwbGljYXRpb24gYW5kIGFkZGl0aW9uIG9mIHR3byBwb2ludHMgYnkgaW50ZWdlcnM6CisgKiAgICAgICAgICAgICAgICAgIFIgPSBtICogUCArIG4gKiBRCisgKiAgICAgICAgICAgICAgICAgIChOb3QgdGhyZWFkLXNhZmUgdG8gdXNlIHNhbWUgZ3JvdXAgaW4gbXVsdGlwbGUgdGhyZWFkcykKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEluIGNvbnRyYXN0IHRvIG1iZWR0bHNfZWNwX211bCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGd1YXJhbnRlZQorICogICAgICAgICAgICAgICAgICBhIGNvbnN0YW50IGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcuCisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSBSICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQKKyAqIFxwYXJhbSBtICAgICAgICAgSW50ZWdlciBieSB3aGljaCB0byBtdWx0aXBseSBQCisgKiBccGFyYW0gUCAgICAgICAgIFBvaW50IHRvIG11bHRpcGx5IGJ5IG0KKyAqIFxwYXJhbSBuICAgICAgICAgSW50ZWdlciBieSB3aGljaCB0byBtdWx0aXBseSBRCisgKiBccGFyYW0gUSAgICAgICAgIFBvaW50IHRvIGJlIG11bHRpcGxpZWQgYnkgbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgaWYgbSBvciBuIGlzIG5vdCBhIHZhbGlkIHByaXZrZXkKKyAqICAgICAgICAgICAgICAgICAgb3IgUCBvciBRIGlzIG5vdCBhIHZhbGlkIHB1YmtleSwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZWNwX211bGFkZCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKm0sIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICpuLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2hlY2sgdGhhdCBhIHBvaW50IGlzIGEgdmFsaWQgcHVibGljIGtleSBvbiB0aGlzIGN1cnZlCisgKgorICogXHBhcmFtIGdycCAgICAgICBDdXJ2ZS9ncm91cCB0aGUgcG9pbnQgc2hvdWxkIGJlbG9uZyB0bworICogXHBhcmFtIHB0ICAgICAgICBQb2ludCB0byBjaGVjaworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBwb2ludCBpcyBhIHZhbGlkIHB1YmxpYyBrZXksCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSBvdGhlcndpc2UuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG9ubHkgY2hlY2tzIHRoZSBwb2ludCBpcyBub24temVybywgaGFzIHZhbGlkCisgKiAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzIGFuZCBsaWVzIG9uIHRoZSBjdXJ2ZSwgYnV0IG5vdCB0aGF0IGl0IGlzCisgKiAgICAgICAgICAgICAgICAgIGluZGVlZCBhIG11bHRpcGxlIG9mIEcuIFRoaXMgaXMgYWRkaXRpb25hbCBjaGVjayBpcyBtb3JlCisgKiAgICAgICAgICAgICAgICAgIGV4cGVuc2l2ZSwgaXNuJ3QgcmVxdWlyZWQgYnkgc3RhbmRhcmRzLCBhbmQgc2hvdWxkbid0IGJlCisgKiAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBpZiB0aGUgZ3JvdXAgdXNlZCBoYXMgYSBzbWFsbCBjb2ZhY3Rvci4gSW4KKyAqICAgICAgICAgICAgICAgICAgcGFydGljdWxhciwgaXQgaXMgdXNlbGVzcyBmb3IgdGhlIE5JU1QgZ3JvdXBzIHdoaWNoIGFsbAorICogICAgICAgICAgICAgICAgICBoYXZlIGEgY29mYWN0b3Igb2YgMS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFVzZXMgYmFyZSBjb21wb25lbnRzIHJhdGhlciB0aGFuIGFuIG1iZWR0bHNfZWNwX2tleXBhaXIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGVhc2UgdXNlIHdpdGggb3RoZXIgc3RydWN0dXJlcyBzdWNoIGFzCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9jb250ZXh0IG9mIG1iZWR0bHNfZWNkc2FfY29udGV4dC4KKyAqLworaW50IG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKnB0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDaGVjayB0aGF0IGFuIG1iZWR0bHNfbXBpIGlzIGEgdmFsaWQgcHJpdmF0ZSBrZXkgZm9yIHRoaXMgY3VydmUKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEdyb3VwIHVzZWQKKyAqIFxwYXJhbSBkICAgICAgICAgSW50ZWdlciB0byBjaGVjaworICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBwb2ludCBpcyBhIHZhbGlkIHByaXZhdGUga2V5LAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgb3RoZXJ3aXNlLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVXNlcyBiYXJlIGNvbXBvbmVudHMgcmF0aGVyIHRoYW4gYW4gbWJlZHRsc19lY3Bfa2V5cGFpciBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gZWFzZSB1c2Ugd2l0aCBvdGhlciBzdHJ1Y3R1cmVzIHN1Y2ggYXMKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX2NvbnRleHQgb2YgbWJlZHRsc19lY2RzYV9jb250ZXh0LgorICovCitpbnQgbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19tcGkgKmQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyYXRlIGEga2V5cGFpciB3aXRoIGNvbmZpZ3VyYWJsZSBiYXNlIHBvaW50CisgKgorICogXHBhcmFtIGdycCAgICAgICBFQ1AgZ3JvdXAKKyAqIFxwYXJhbSBHICAgICAgICAgQ2hvc2VuIGJhc2UgcG9pbnQKKyAqIFxwYXJhbSBkICAgICAgICAgRGVzdGluYXRpb24gTVBJIChzZWNyZXQgcGFydCkKKyAqIFxwYXJhbSBRICAgICAgICAgRGVzdGluYXRpb24gcG9pbnQgKHB1YmxpYyBwYXJ0KQorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICBvciBhIE1CRURUTFNfRVJSX0VDUF9YWFggb3IgTUJFRFRMU19NUElfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFVzZXMgYmFyZSBjb21wb25lbnRzIHJhdGhlciB0aGFuIGFuIG1iZWR0bHNfZWNwX2tleXBhaXIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGVhc2UgdXNlIHdpdGggb3RoZXIgc3RydWN0dXJlcyBzdWNoIGFzCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9jb250ZXh0IG9mIG1iZWR0bHNfZWNkc2FfY29udGV4dC4KKyAqLworaW50IG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyX2Jhc2UoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqRywKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICpkLCBtYmVkdGxzX2VjcF9wb2ludCAqUSwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmF0ZSBhIGtleXBhaXIKKyAqCisgKiBccGFyYW0gZ3JwICAgICAgIEVDUCBncm91cAorICogXHBhcmFtIGQgICAgICAgICBEZXN0aW5hdGlvbiBNUEkgKHNlY3JldCBwYXJ0KQorICogXHBhcmFtIFEgICAgICAgICBEZXN0aW5hdGlvbiBwb2ludCAocHVibGljIHBhcnQpCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX01QSV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICAgVXNlcyBiYXJlIGNvbXBvbmVudHMgcmF0aGVyIHRoYW4gYW4gbWJlZHRsc19lY3Bfa2V5cGFpciBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gZWFzZSB1c2Ugd2l0aCBvdGhlciBzdHJ1Y3R1cmVzIHN1Y2ggYXMKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX2NvbnRleHQgb2YgbWJlZHRsc19lY2RzYV9jb250ZXh0LgorICovCitpbnQgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfbXBpICpkLCBtYmVkdGxzX2VjcF9wb2ludCAqUSwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmF0ZSBhIGtleXBhaXIKKyAqCisgKiBccGFyYW0gZ3JwX2lkICAgIEVDUCBncm91cCBpZGVudGlmaWVyCisgKiBccGFyYW0ga2V5ICAgICAgIERlc3RpbmF0aW9uIGtleXBhaXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBNQkVEVExTX0VSUl9FQ1BfWFhYIG9yIE1CRURUTFNfTVBJX1hYWCBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2VjcF9nZW5fa2V5KCBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQsIG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDaGVjayBhIHB1YmxpYy1wcml2YXRlIGtleSBwYWlyCisgKgorICogXHBhcmFtIHB1YiAgICAgICBLZXlwYWlyIHN0cnVjdHVyZSBob2xkaW5nIGEgcHVibGljIGtleQorICogXHBhcmFtIHBydiAgICAgICBLZXlwYWlyIHN0cnVjdHVyZSBob2xkaW5nIGEgcHJpdmF0ZSAocGx1cyBwdWJsaWMpIGtleQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIChrZXlzIGFyZSB2YWxpZCBhbmQgbWF0Y2gpLCBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEsIG9yCisgKiAgICAgICAgICAgICAgICAgIGEgTUJFRFRMU19FUlJfRUNQX1hYWCBvciBNQkVEVExTX0VSUl9NUElfWFhYIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdiggY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqcHViLCBjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICpwcnYgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIGEgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZWNwX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZWNwLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZW50cm9weS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lbnRyb3B5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3YWNhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZW50cm9weS5oCkBAIC0wLDAgKzEsMjg3IEBACisvKioKKyAqIFxmaWxlIGVudHJvcHkuaAorICoKKyAqIFxicmllZiBFbnRyb3B5IGFjY3VtdWxhdG9yIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfRU5UUk9QWV9ICisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpICYmICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYpCisjaW5jbHVkZSAic2hhNTEyLmgiCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfU0hBMjU2X0FDQ1VNVUxBVE9SCisjaW5jbHVkZSAic2hhMjU2LmgiCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorI2luY2x1ZGUgInRocmVhZGluZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisjaW5jbHVkZSAiaGF2ZWdlLmgiCisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgICAgICAgICAgICAgICAgIC0weDAwM0MgIC8qKjwgQ3JpdGljYWwgZW50cm9weSBzb3VyY2UgZmFpbHVyZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfRU5UUk9QWV9NQVhfU09VUkNFUyAgICAgICAgICAgICAgICAgICAtMHgwMDNFICAvKio8IE5vIG1vcmUgc291cmNlcyBjYW4gYmUgYWRkZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VOVFJPUFlfTk9fU09VUkNFU19ERUZJTkVEICAgICAgICAgICAgLTB4MDA0MCAgLyoqPCBObyBzb3VyY2VzIGhhdmUgYmVlbiBhZGRlZCB0byBwb2xsLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9FTlRST1BZX05PX1NUUk9OR19TT1VSQ0UgICAgICAgICAgICAgIC0weDAwM0QgIC8qKjwgTm8gc3Ryb25nIHNvdXJjZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHBvbGwuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUiAgICAgICAgICAgICAgICAgLTB4MDAzRiAgLyoqPCBSZWFkL3dyaXRlIGVycm9yIGluIGZpbGUuICovCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX01BWF9TT1VSQ0VTKQorI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUFYX1NPVVJDRVMgICAgIDIwICAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHN1cHBvcnRlZCAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTUFYX0dBVEhFUikKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01BWF9HQVRIRVIgICAgICAxMjggICAgIC8qKjwgTWF4aW11bSBhbW91bnQgcmVxdWVzdGVkIGZyb20gZW50cm9weSBzb3VyY2VzICovCisjZW5kaWYKKworLyogXH0gbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUikKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgICAgICA2NCAgICAgIC8qKjwgQmxvY2sgc2l6ZSBvZiBlbnRyb3B5IGFjY3VtdWxhdG9yIChTSEEtNTEyKSAqLworI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgICAgICAzMiAgICAgIC8qKjwgQmxvY2sgc2l6ZSBvZiBlbnRyb3B5IGFjY3VtdWxhdG9yIChTSEEtMjU2KSAqLworI2VuZGlmCisKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01BWF9TRUVEX1NJWkUgICAxMDI0ICAgIC8qKjwgTWF4aW11bSBzaXplIG9mIHNlZWQgd2UgcmVhZCBmcm9tIHNlZWQgZmlsZSAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfU09VUkNFX01BTlVBTCAgIE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUworCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICAgMSAgICAgICAvKio8IEVudHJvcHkgc291cmNlIGlzIHN0cm9uZyAgICovCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyAgICAgMCAgICAgICAvKio8IEVudHJvcHkgc291cmNlIGlzIHdlYWsgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVudHJvcHkgcG9sbCBjYWxsYmFjayBwb2ludGVyCisgKgorICogXHBhcmFtIGRhdGEgICAgICBDYWxsYmFjay1zcGVjaWZpYyBkYXRhIHBvaW50ZXIKKyAqIFxwYXJhbSBvdXRwdXQgICAgRGF0YSB0byBmaWxsCisgKiBccGFyYW0gbGVuICAgICAgIE1heGltdW0gc2l6ZSB0byBwcm92aWRlCisgKiBccGFyYW0gb2xlbiAgICAgIFRoZSBhY3R1YWwgYW1vdW50IG9mIGJ5dGVzIHB1dCBpbnRvIHRoZSBidWZmZXIgKENhbiBiZSAwKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBubyBjcml0aWNhbCBmYWlsdXJlcyBvY2N1cnJlZCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEIG90aGVyd2lzZQorICovCit0eXBlZGVmIGludCAoKm1iZWR0bHNfZW50cm9weV9mX3NvdXJjZV9wdHIpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4pOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRW50cm9weSBzb3VyY2Ugc3RhdGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX2VudHJvcHlfZl9zb3VyY2VfcHRyICAgIGZfc291cmNlOyAgIC8qKjwgVGhlIGVudHJvcHkgc291cmNlIGNhbGxiYWNrICovCisgICAgdm9pZCAqICAgICAgICAgIHBfc291cmNlOyAgIC8qKjwgVGhlIGNhbGxiYWNrIGRhdGEgcG9pbnRlciAqLworICAgIHNpemVfdCAgICAgICAgICBzaXplOyAgICAgICAvKio8IEFtb3VudCByZWNlaXZlZCBpbiBieXRlcyAqLworICAgIHNpemVfdCAgICAgICAgICB0aHJlc2hvbGQ7ICAvKio8IE1pbmltdW0gYnl0ZXMgcmVxdWlyZWQgYmVmb3JlIHJlbGVhc2UgKi8KKyAgICBpbnQgICAgICAgICAgICAgc3Ryb25nOyAgICAgLyoqPCBJcyB0aGUgc291cmNlIHN0cm9uZz8gKi8KK30KK21iZWR0bHNfZW50cm9weV9zb3VyY2Vfc3RhdGU7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFbnRyb3B5IGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SKQorICAgIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgIGFjY3VtdWxhdG9yOworI2Vsc2UKKyAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICBhY2N1bXVsYXRvcjsKKyNlbmRpZgorICAgIGludCAgICAgICAgICAgICBzb3VyY2VfY291bnQ7CisgICAgbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zdGF0ZSAgICBzb3VyY2VbTUJFRFRMU19FTlRST1BZX01BWF9TT1VSQ0VTXTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisgICAgbWJlZHRsc19oYXZlZ2Vfc3RhdGUgICAgaGF2ZWdlX2RhdGE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtdXRleDsgICAgLyohPCBtdXRleCAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorICAgIGludCBpbml0aWFsX2VudHJvcHlfcnVuOworI2VuZGlmCit9CittYmVkdGxzX2VudHJvcHlfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgdGhlIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVudHJvcHkgY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19lbnRyb3B5X2luaXQoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgdGhlIGRhdGEgaW4gdGhlIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVudHJvcHkgY29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc19lbnRyb3B5X2ZyZWUoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEFkZHMgYW4gZW50cm9weSBzb3VyY2UgdG8gcG9sbAorICogICAgICAgICAgICAgICAgICAoVGhyZWFkLXNhZmUgaWYgTUJFRFRMU19USFJFQURJTkdfQyBpcyBlbmFibGVkKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRW50cm9weSBjb250ZXh0CisgKiBccGFyYW0gZl9zb3VyY2UgIEVudHJvcHkgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3NvdXJjZSAgRnVuY3Rpb24gZGF0YQorICogXHBhcmFtIHRocmVzaG9sZCBNaW5pbXVtIHJlcXVpcmVkIGZyb20gc291cmNlIGJlZm9yZSBlbnRyb3B5IGlzIHJlbGVhc2VkCisgKiAgICAgICAgICAgICAgICAgICggd2l0aCBtYmVkdGxzX2VudHJvcHlfZnVuYygpICkgKGluIGJ5dGVzKQorICogXHBhcmFtIHN0cm9uZyAgICBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1NUUk9ORyBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVFNMX0VOVFJPUFlfU09VUkNFX1dFQUsuCisgKiAgICAgICAgICAgICAgICAgIEF0IGxlYXN0IG9uZSBzdHJvbmcgc291cmNlIG5lZWRzIHRvIGJlIGFkZGVkLgorICogICAgICAgICAgICAgICAgICBXZWFrZXIgc291cmNlcyAoc3VjaCBhcyB0aGUgY3ljbGUgY291bnRlcikgY2FuIGJlIHVzZWQgYXMKKyAqICAgICAgICAgICAgICAgICAgYSBjb21wbGVtZW50LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIE1CRURUTFNfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVMKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lbnRyb3B5X2Zfc291cmNlX3B0ciBmX3NvdXJjZSwgdm9pZCAqcF9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGhyZXNob2xkLCBpbnQgc3Ryb25nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUcmlnZ2VyIGFuIGV4dHJhIGdhdGhlciBwb2xsIGZvciB0aGUgYWNjdW11bGF0b3IKKyAqICAgICAgICAgICAgICAgICAgKFRocmVhZC1zYWZlIGlmIE1CRURUTFNfVEhSRUFESU5HX0MgaXMgZW5hYmxlZCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEVudHJvcHkgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV9nYXRoZXIoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJldHJpZXZlIGVudHJvcHkgZnJvbSB0aGUgYWNjdW11bGF0b3IKKyAqICAgICAgICAgICAgICAgICAgKE1heGltdW0gbGVuZ3RoOiBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSkKKyAqICAgICAgICAgICAgICAgICAgKFRocmVhZC1zYWZlIGlmIE1CRURUTFNfVEhSRUFESU5HX0MgaXMgZW5hYmxlZCkKKyAqCisgKiBccGFyYW0gZGF0YSAgICAgIEVudHJvcHkgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgICBCdWZmZXIgdG8gZmlsbAorICogXHBhcmFtIGxlbiAgICAgICBOdW1iZXIgb2YgYnl0ZXMgZGVzaXJlZCwgbXVzdCBiZSBhdCBtb3N0IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X2Z1bmMoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQWRkIGRhdGEgdG8gdGhlIGFjY3VtdWxhdG9yIG1hbnVhbGx5CisgKiAgICAgICAgICAgICAgICAgIChUaHJlYWQtc2FmZSBpZiBNQkVEVExTX1RIUkVBRElOR19DIGlzIGVuYWJsZWQpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBFbnRyb3B5IGNvbnRleHQKKyAqIFxwYXJhbSBkYXRhICAgICAgRGF0YSB0byBhZGQKKyAqIFxwYXJhbSBsZW4gICAgICAgTGVuZ3RoIG9mIGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9tYW51YWwoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBzZWVkIGZpbGUgaW4gTlYgYnkgdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZW50cm9weSBwb29sLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgRW50cm9weSBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV91cGRhdGVfbnZfc2VlZCggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCApOworI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFdyaXRlIGEgc2VlZCBmaWxlCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgRW50cm9weSBjb250ZXh0CisgKiBccGFyYW0gcGF0aCAgICAgICAgICBOYW1lIG9mIHRoZSBmaWxlCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SIG9uIGZpbGUgZXJyb3IsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfZW50cm9weV93cml0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBSZWFkIGFuZCB1cGRhdGUgYSBzZWVkIGZpbGUuIFNlZWQgaXMgYWRkZWQgdG8gdGhpcworICogICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuIE5vIG1vcmUgdGhhbiBNQkVEVExTX0VOVFJPUFlfTUFYX1NFRURfU0laRSBieXRlcyBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlYWQgZnJvbSB0aGUgc2VlZCBmaWxlLiBUaGUgcmVzdCBpcyBpZ25vcmVkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEVudHJvcHkgY29udGV4dAorICogXHBhcmFtIHBhdGggICAgICAgICAgTmFtZSBvZiB0aGUgZmlsZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUiBvbiBmaWxlIGVycm9yLAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX3NlZWRfZmlsZSggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiAgICAgICAgICAgICAgICAgVGhpcyBtb2R1bGUgc2VsZi10ZXN0IGFsc28gY2FsbHMgdGhlIGVudHJvcHkgc2VsZi10ZXN0LAorICogICAgICAgICAgICAgICAgIG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc2VsZl90ZXN0KCk7CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiBhIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogICAgICAgICAgICAgICAgIFZlcmlmaWVzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGhhcmR3YXJlIGVudHJvcHkgc291cmNlCisgKiAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIGZ1bmN0aW9uICdtYmVkdGxzX2hhcmR3YXJlX3BvbGwoKScuCisgKgorICogICAgICAgICAgICAgICAgIE5vdGUgdGhpcyBpcyB0aGUgb25seSBoYXJkd2FyZSBlbnRyb3B5IHNvdXJjZSB0aGF0IGlzIGtub3duCisgKiAgICAgICAgICAgICAgICAgYXQgbGluayB0aW1lLCBhbmQgb3RoZXIgZW50cm9weSBzb3VyY2VzIGNvbmZpZ3VyZWQKKyAqICAgICAgICAgICAgICAgICBkeW5hbWljYWxseSBhdCBydW50aW1lIGJ5IHRoZSBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCkgd2lsbCBub3QgYmUgdGVzdGVkLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgYSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBlbnRyb3B5LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZW50cm9weV9wb2xsLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VudHJvcHlfcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjU4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2VudHJvcHlfcG9sbC5oCkBAIC0wLDAgKzEsMTA5IEBACisvKioKKyAqIFxmaWxlIGVudHJvcHlfcG9sbC5oCisgKgorICogXGJyaWVmIFBsYXRmb3JtLXNwZWNpZmljIGFuZCBjdXN0b20gZW50cm9weSBwb2xsaW5nIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0VOVFJPUFlfUE9MTF9ICisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9QT0xMX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogRGVmYXVsdCB0aHJlc2hvbGRzIGZvciBidWlsdC1pbiBzb3VyY2VzLCBpbiBieXRlcworICovCisjZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9NSU5fUExBVEZPUk0gICAgIDMyICAgICAvKio8IE1pbmltdW0gZm9yIHBsYXRmb3JtIHNvdXJjZSAgICAqLworI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTUlOX0hBVkVHRSAgICAgICAzMiAgICAgLyoqPCBNaW5pbXVtIGZvciBIQVZFR0UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01JTl9IQVJEQ0xPQ0sgICAgIDQgICAgIC8qKjwgTWluaW11bSBmb3IgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCkgICAgICAgICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX01JTl9IQVJEV0FSRSkKKyNkZWZpbmUgTUJFRFRMU19FTlRST1BZX01JTl9IQVJEV0FSRSAgICAgMzIgICAgIC8qKjwgTWluaW11bSBmb3IgdGhlIGhhcmR3YXJlIHNvdXJjZSAqLworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFbnRyb3B5IHBvbGwgY2FsbGJhY2sgdGhhdCBwcm92aWRlcyAwIGVudHJvcHkuCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpCisgICAgaW50IG1iZWR0bHNfbnVsbF9lbnRyb3B5X3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSkKKy8qKgorICogXGJyaWVmICAgICAgICAgICBQbGF0Zm9ybS1zcGVjaWZpYyBlbnRyb3B5IHBvbGwgY2FsbGJhY2sKKyAqLworaW50IG1iZWR0bHNfcGxhdGZvcm1fZW50cm9weV9wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEhBVkVHRSBiYXNlZCBlbnRyb3B5IHBvbGwgY2FsbGJhY2sKKyAqCisgKiBSZXF1aXJlcyBhbiBIQVZFR0Ugc3RhdGUgYXMgaXRzIGRhdGEgcG9pbnRlci4KKyAqLworaW50IG1iZWR0bHNfaGF2ZWdlX3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2stYmFzZWQgZW50cm9weSBwb2xsIGNhbGxiYWNrCisgKi8KK2ludCBtYmVkdGxzX2hhcmRjbG9ja19wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRW50cm9weSBwb2xsIGNhbGxiYWNrIGZvciBhIGhhcmR3YXJlIHNvdXJjZQorICoKKyAqIFx3YXJuaW5nICAgICAgICAgVGhpcyBpcyBub3QgcHJvdmlkZWQgYnkgbWJlZCBUTFMhCisgKiAgICAgICAgICAgICAgICAgIFNlZSBcYyBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUIGluIGNvbmZpZy5oLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBtdXN0IGFjY2VwdCBOVUxMIGFzIGl0cyBmaXJzdCBhcmd1bWVudC4KKyAqLworaW50IG1iZWR0bHNfaGFyZHdhcmVfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRW50cm9weSBwb2xsIGNhbGxiYWNrIGZvciBhIG5vbi12b2xhdGlsZSBzZWVkIGZpbGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgbXVzdCBhY2NlcHQgTlVMTCBhcyBpdHMgZmlyc3QgYXJndW1lbnQuCisgKi8KK2ludCBtYmVkdGxzX252X3NlZWRfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogZW50cm9weV9wb2xsLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZXJyb3IuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU0OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9lcnJvci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKioKKyAqIFxmaWxlIGVycm9yLmgKKyAqCisgKiBcYnJpZWYgRXJyb3IgdG8gc3RyaW5nIHRyYW5zbGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfRVJST1JfSAorI2RlZmluZSBNQkVEVExTX0VSUk9SX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKioKKyAqIEVycm9yIGNvZGUgbGF5b3V0LgorICoKKyAqIEN1cnJlbnRseSB3ZSB0cnkgdG8ga2VlcCBhbGwgZXJyb3IgY29kZXMgd2l0aGluIHRoZSBuZWdhdGl2ZSBzcGFjZSBvZiAxNgorICogYml0cyBzaWduZWQgaW50ZWdlcnMgdG8gc3VwcG9ydCBhbGwgcGxhdGZvcm1zICgtMHgwMDAxIC0gLTB4N0ZGRikuIEluCisgKiBhZGRpdGlvbiB3ZSdkIGxpa2UgdG8gZ2l2ZSB0d28gbGF5ZXJzIG9mIGluZm9ybWF0aW9uIG9uIHRoZSBlcnJvciBpZgorICogcG9zc2libGUuCisgKgorICogRm9yIHRoYXQgcHVycG9zZSB0aGUgZXJyb3IgY29kZXMgYXJlIHNlZ21lbnRlZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjoKKyAqCisgKiAxNiBiaXQgZXJyb3IgY29kZSBiaXQtc2VnbWVudGF0aW9uCisgKgorICogMSBiaXQgIC0gVW51c2VkIChzaWduIGJpdCkKKyAqIDMgYml0cyAtIEhpZ2ggbGV2ZWwgbW9kdWxlIElECisgKiA1IGJpdHMgLSBNb2R1bGUtZGVwZW5kZW50IGVycm9yIGNvZGUKKyAqIDcgYml0cyAtIExvdyBsZXZlbCBtb2R1bGUgZXJyb3JzCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgbG93LWxldmVsIGVycm9yIGNvZGVzIGFyZSBkaXZpZGVkIGluIGV2ZW4gYW5kIG9kZCwKKyAqIGV2ZW4gY29kZXMgd2VyZSBhc3NpZ25lZCBmaXJzdCwgYW5kIC0xIGlzIHJlc2VydmVkIGZvciBvdGhlciBlcnJvcnMuCisgKgorICogTG93LWxldmVsIG1vZHVsZSBlcnJvcnMgKDB4MDAwMi0weDAwN0UsIDB4MDAwMy0weDAwN0YpCisgKgorICogTW9kdWxlICAgTnIgIENvZGVzIGFzc2lnbmVkCisgKiBNUEkgICAgICAgNyAgMHgwMDAyLTB4MDAxMAorICogR0NNICAgICAgIDIgIDB4MDAxMi0weDAwMTQKKyAqIEJMT1dGSVNIICAyICAweDAwMTYtMHgwMDE4CisgKiBUSFJFQURJTkcgMyAgMHgwMDFBLTB4MDAxRQorICogQUVTICAgICAgIDIgIDB4MDAyMC0weDAwMjIKKyAqIENBTUVMTElBICAyICAweDAwMjQtMHgwMDI2CisgKiBYVEVBICAgICAgMSAgMHgwMDI4LTB4MDAyOAorICogQkFTRTY0ICAgIDIgIDB4MDAyQS0weDAwMkMKKyAqIE9JRCAgICAgICAxICAweDAwMkUtMHgwMDJFICAgMHgwMDBCLTB4MDAwQgorICogUEFETE9DSyAgIDEgIDB4MDAzMC0weDAwMzAKKyAqIERFUyAgICAgICAxICAweDAwMzItMHgwMDMyCisgKiBDVFJfREJSRyAgNCAgMHgwMDM0LTB4MDAzQQorICogRU5UUk9QWSAgIDMgIDB4MDAzQy0weDAwNDAgICAweDAwM0QtMHgwMDNGCisgKiBORVQgICAgICAxMSAgMHgwMDQyLTB4MDA1MiAgIDB4MDA0My0weDAwNDUKKyAqIEFTTjEgICAgICA3ICAweDAwNjAtMHgwMDZDCisgKiBQQktERjIgICAgMSAgMHgwMDdDLTB4MDA3QworICogSE1BQ19EUkJHIDQgIDB4MDAwMy0weDAwMDkKKyAqIENDTSAgICAgICAyICAgICAgICAgICAgICAgICAgMHgwMDBELTB4MDAwRgorICoKKyAqIEhpZ2gtbGV2ZWwgbW9kdWxlIG5yICgzIGJpdHMgLSAweDAuLi4tMHg3Li4uKQorICogTmFtZSAgICAgIElEICBOciBvZiBFcnJvcnMKKyAqIFBFTSAgICAgICAxICAgOQorICogUEtDUyMxMiAgIDEgICA0IChTdGFydGVkIGZyb20gdG9wKQorICogWDUwOSAgICAgIDIgICAxOQorICogUEtDUzUgICAgIDIgICA0IChTdGFydGVkIGZyb20gdG9wKQorICogREhNICAgICAgIDMgICA5CisgKiBQSyAgICAgICAgMyAgIDE0IChTdGFydGVkIGZyb20gdG9wKQorICogUlNBICAgICAgIDQgICA5CisgKiBFQ1AgICAgICAgNCAgIDggKFN0YXJ0ZWQgZnJvbSB0b3ApCisgKiBNRCAgICAgICAgNSAgIDQKKyAqIENJUEhFUiAgICA2ICAgNgorICogU1NMICAgICAgIDYgICAxNyAoU3RhcnRlZCBmcm9tIHRvcCkKKyAqIFNTTCAgICAgICA3ICAgMzEKKyAqCisgKiBNb2R1bGUgZGVwZW5kZW50IGVycm9yIGNvZGUgKDUgYml0cyAweC4wMC4tMHguRjguKQorICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgVHJhbnNsYXRlIGEgbWJlZCBUTFMgZXJyb3IgY29kZSBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLAorICogICAgICAgIFJlc3VsdCBpcyB0cnVuY2F0ZWQgaWYgbmVjZXNzYXJ5IGFuZCBhbHdheXMgaW5jbHVkZXMgYSB0ZXJtaW5hdGluZworICogICAgICAgIG51bGwgYnl0ZS4KKyAqCisgKiBccGFyYW0gZXJybnVtICAgIGVycm9yIGNvZGUKKyAqIFxwYXJhbSBidWZmZXIgICAgYnVmZmVyIHRvIHBsYWNlIHJlcHJlc2VudGF0aW9uIGluCisgKiBccGFyYW0gYnVmbGVuICAgIGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19zdHJlcnJvciggaW50IGVycm51bSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBlcnJvci5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2djbS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9nY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjc3YWFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9nY20uaApAQCAtMCwwICsxLDIyMCBAQAorLyoqCisgKiBcZmlsZSBnY20uaAorICoKKyAqIFxicmllZiBHYWxvaXMvQ291bnRlciBtb2RlIGZvciAxMjgtYml0IGJsb2NrIGNpcGhlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19HQ01fSAorI2RlZmluZSBNQkVEVExTX0dDTV9ICisKKyNpbmNsdWRlICJjaXBoZXIuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1CRURUTFNfR0NNX0VOQ1JZUFQgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19HQ01fREVDUllQVCAgICAgMAorCisjZGVmaW5lIE1CRURUTFNfRVJSX0dDTV9BVVRIX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgLTB4MDAxMiAgLyoqPCBBdXRoZW50aWNhdGVkIGRlY3J5cHRpb24gZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgIC0weDAwMTQgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR0NNIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY2lwaGVyX2N0eDsvKiE8IGNpcGhlciBjb250ZXh0IHVzZWQgKi8KKyAgICB1aW50NjRfdCBITFsxNl07ICAgICAgICAgICAgLyohPCBQcmVjYWxjdWxhdGVkIEhUYWJsZSAqLworICAgIHVpbnQ2NF90IEhIWzE2XTsgICAgICAgICAgICAvKiE8IFByZWNhbGN1bGF0ZWQgSFRhYmxlICovCisgICAgdWludDY0X3QgbGVuOyAgICAgICAgICAgICAgIC8qITwgVG90YWwgZGF0YSBsZW5ndGggKi8KKyAgICB1aW50NjRfdCBhZGRfbGVuOyAgICAgICAgICAgLyohPCBUb3RhbCBhZGQgbGVuZ3RoICovCisgICAgdW5zaWduZWQgY2hhciBiYXNlX2VjdHJbMTZdOy8qITwgRmlyc3QgRUNUUiBmb3IgdGFnICovCisgICAgdW5zaWduZWQgY2hhciB5WzE2XTsgICAgICAgIC8qITwgWSB3b3JraW5nIHZhbHVlICovCisgICAgdW5zaWduZWQgY2hhciBidWZbMTZdOyAgICAgIC8qITwgYnVmIHdvcmtpbmcgdmFsdWUgKi8KKyAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAgICAgLyohPCBFbmNyeXB0IG9yIERlY3J5cHQgKi8KK30KK21iZWR0bHNfZ2NtX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIEdDTSBjb250ZXh0IChqdXN0IG1ha2VzIHJlZmVyZW5jZXMgdmFsaWQpCisgKiAgICAgICAgICAgICAgICAgIE1ha2VzIHRoZSBjb250ZXh0IHJlYWR5IGZvciBtYmVkdGxzX2djbV9zZXRrZXkoKSBvcgorICogICAgICAgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBHQ00gY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19nY21faW5pdCggbWJlZHRsc19nY21fY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHQ00gaW5pdGlhbGl6YXRpb24gKGVuY3J5cHRpb24pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBHQ00gY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGNpcGhlciAgICBjaXBoZXIgdG8gdXNlIChhIDEyOC1iaXQgYmxvY2sgY2lwaGVyKQorICogXHBhcmFtIGtleSAgICAgICBlbmNyeXB0aW9uIGtleQorICogXHBhcmFtIGtleWJpdHMgICBtdXN0IGJlIDEyOCwgMTkyIG9yIDI1NgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIGNpcGhlciBzcGVjaWZpYyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX2djbV9zZXRrZXkoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2lkX3QgY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdDTSBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHVzaW5nIGEgYmxvY2sgY2lwaGVyCisgKgorICogXG5vdGUgT24gZW5jcnlwdGlvbiwgdGhlIG91dHB1dCBidWZmZXIgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSBpbnB1dCBidWZmZXIuCisgKiAgICAgICBPbiBkZWNyeXB0aW9uLCB0aGUgb3V0cHV0IGJ1ZmZlciBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgaW5wdXQgYnVmZmVyLgorICogICAgICAgSWYgYnVmZmVycyBvdmVybGFwLCB0aGUgb3V0cHV0IGJ1ZmZlciBtdXN0IHRyYWlsIGF0IGxlYXN0IDggYnl0ZXMKKyAqICAgICAgIGJlaGluZCB0aGUgaW5wdXQgYnVmZmVyLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICAgTUJFRFRMU19HQ01fRU5DUllQVCBvciBNQkVEVExTX0dDTV9ERUNSWVBUCisgKiBccGFyYW0gbGVuZ3RoICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIGl2ICAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IKKyAqIFxwYXJhbSBpdl9sZW4gICAgbGVuZ3RoIG9mIElWCisgKiBccGFyYW0gYWRkICAgICAgIGFkZGl0aW9uYWwgZGF0YQorICogXHBhcmFtIGFkZF9sZW4gICBsZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhCisgKiBccGFyYW0gaW5wdXQgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqIFxwYXJhbSB0YWdfbGVuICAgbGVuZ3RoIG9mIHRoZSB0YWcgdG8gZ2VuZXJhdGUKKyAqIFxwYXJhbSB0YWcgICAgICAgYnVmZmVyIGZvciBob2xkaW5nIHRoZSB0YWcKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR0NNIGJ1ZmZlciBhdXRoZW50aWNhdGVkIGRlY3J5cHRpb24gdXNpbmcgYSBibG9jayBjaXBoZXIKKyAqCisgKiBcbm90ZSBPbiBkZWNyeXB0aW9uLCB0aGUgb3V0cHV0IGJ1ZmZlciBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgaW5wdXQgYnVmZmVyLgorICogICAgICAgSWYgYnVmZmVycyBvdmVybGFwLCB0aGUgb3V0cHV0IGJ1ZmZlciBtdXN0IHRyYWlsIGF0IGxlYXN0IDggYnl0ZXMKKyAqICAgICAgIGJlaGluZCB0aGUgaW5wdXQgYnVmZmVyLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQKKyAqIFxwYXJhbSBsZW5ndGggICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaXYgICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvcgorICogXHBhcmFtIGl2X2xlbiAgICBsZW5ndGggb2YgSVYKKyAqIFxwYXJhbSBhZGQgICAgICAgYWRkaXRpb25hbCBkYXRhCisgKiBccGFyYW0gYWRkX2xlbiAgIGxlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEKKyAqIFxwYXJhbSB0YWcgICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIHRhZworICogXHBhcmFtIHRhZ19sZW4gICBsZW5ndGggb2YgdGhlIHRhZworICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBhbmQgYXV0aGVudGljYXRlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQgaWYgdGFnIGRvZXMgbm90IG1hdGNoCisgKi8KK2ludCBtYmVkdGxzX2djbV9hdXRoX2RlY3J5cHQoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGFnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyaWMgR0NNIHN0cmVhbSBzdGFydCBmdW5jdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICAgTUJFRFRMU19HQ01fRU5DUllQVCBvciBNQkVEVExTX0dDTV9ERUNSWVBUCisgKiBccGFyYW0gaXYgICAgICAgIGluaXRpYWxpemF0aW9uIHZlY3RvcgorICogXHBhcmFtIGl2X2xlbiAgICBsZW5ndGggb2YgSVYKKyAqIFxwYXJhbSBhZGQgICAgICAgYWRkaXRpb25hbCBkYXRhIChvciBOVUxMIGlmIGxlbmd0aCBpcyAwKQorICogXHBhcmFtIGFkZF9sZW4gICBsZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19nY21fc3RhcnRzKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGQsCisgICAgICAgICAgICAgICAgc2l6ZV90IGFkZF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEdlbmVyaWMgR0NNIHVwZGF0ZSBmdW5jdGlvbi4gRW5jcnlwdHMvZGVjcnlwdHMgdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgIGdpdmVuIEdDTSBjb250ZXh0LiBFeHBlY3RzIGlucHV0IHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKKyAqICAgICAgICAgICAgICAgICAgYnl0ZXMhIE9ubHkgdGhlIGxhc3QgY2FsbCBiZWZvcmUgbWJlZHRsc19nY21fZmluaXNoKCkgY2FuIGJlIGxlc3MKKyAqICAgICAgICAgICAgICAgICAgdGhhbiAxNiBieXRlcyEKKyAqCisgKiBcbm90ZSBPbiBkZWNyeXB0aW9uLCB0aGUgb3V0cHV0IGJ1ZmZlciBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgaW5wdXQgYnVmZmVyLgorICogICAgICAgSWYgYnVmZmVycyBvdmVybGFwLCB0aGUgb3V0cHV0IGJ1ZmZlciBtdXN0IHRyYWlsIGF0IGxlYXN0IDggYnl0ZXMKKyAqICAgICAgIGJlaGluZCB0aGUgaW5wdXQgYnVmZmVyLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQKKyAqIFxwYXJhbSBsZW5ndGggICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gaW5wdXQgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgb3V0cHV0IGRhdGEKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIE1CRURUTFNfRVJSX0dDTV9CQURfSU5QVVQKKyAqLworaW50IG1iZWR0bHNfZ2NtX3VwZGF0ZSggbWJlZHRsc19nY21fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmljIEdDTSBmaW5hbGlzYXRpb24gZnVuY3Rpb24uIFdyYXBzIHVwIHRoZSBHQ00gc3RyZWFtCisgKiAgICAgICAgICAgICAgICAgIGFuZCBnZW5lcmF0ZXMgdGhlIHRhZy4gVGhlIHRhZyBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mCisgKiAgICAgICAgICAgICAgICAgIDE2IGJ5dGVzLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgR0NNIGNvbnRleHQKKyAqIFxwYXJhbSB0YWcgICAgICAgYnVmZmVyIGZvciBob2xkaW5nIHRoZSB0YWcKKyAqIFxwYXJhbSB0YWdfbGVuICAgbGVuZ3RoIG9mIHRoZSB0YWcgdG8gZ2VuZXJhdGUgKG11c3QgYmUgYXQgbGVhc3QgNCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUCisgKi8KK2ludCBtYmVkdGxzX2djbV9maW5pc2goIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsCisgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ19sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgYSBHQ00gY29udGV4dCBhbmQgdW5kZXJseWluZyBjaXBoZXIgc3ViLWNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdDTSBjb250ZXh0IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX2djbV9mcmVlKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfZ2NtX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGdjbS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL2hhdmVnZS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9oYXZlZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWM1ZDMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9oYXZlZ2UuaApAQCAtMCwwICsxLDc0IEBACisvKioKKyAqIFxmaWxlIGhhdmVnZS5oCisgKgorICogXGJyaWVmIEhBVkVHRTogSEFyZHdhcmUgVm9sYXRpbGUgRW50cm9weSBHYXRoZXJpbmcgYW5kIEV4cGFuc2lvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX0hBVkVHRV9ICisjZGVmaW5lIE1CRURUTFNfSEFWRUdFX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIE1CRURUTFNfSEFWRUdFX0NPTExFQ1RfU0laRSAxMDI0CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSEFWRUdFIHN0YXRlIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBQVDEsIFBUMiwgb2Zmc2V0WzJdOworICAgIGludCBwb29sW01CRURUTFNfSEFWRUdFX0NPTExFQ1RfU0laRV07CisgICAgaW50IFdBTEtbODE5Ml07Cit9CittYmVkdGxzX2hhdmVnZV9zdGF0ZTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSEFWRUdFIGluaXRpYWxpemF0aW9uCisgKgorICogXHBhcmFtIGhzICAgICAgIEhBVkVHRSBzdGF0ZSB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfaGF2ZWdlX2luaXQoIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICpocyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBIQVZFR0Ugc3RhdGUKKyAqCisgKiBccGFyYW0gaHMgICAgICAgSEFWRUdFIHN0YXRlIHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX2hhdmVnZV9mcmVlKCBtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqaHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSEFWRUdFIHJhbmQgZnVuY3Rpb24KKyAqCisgKiBccGFyYW0gcF9ybmcgICAgQSBIQVZFR0Ugc3RhdGUKKyAqIFxwYXJhbSBvdXRwdXQgICBCdWZmZXIgdG8gZmlsbAorICogXHBhcmFtIGxlbiAgICAgIExlbmd0aCBvZiBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19oYXZlZ2VfcmFuZG9tKCB2b2lkICpwX3JuZywgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBoYXZlZ2UuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9obWFjX2RyYmcuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvaG1hY19kcmJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxMDU1OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvaG1hY19kcmJnLmgKQEAgLTAsMCArMSwyOTkgQEAKKy8qKgorICogXGZpbGUgaG1hY19kcmJnLmgKKyAqCisgKiBcYnJpZWYgSE1BQ19EUkJHIChOSVNUIFNQIDgwMC05MEEpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfSE1BQ19EUkJHX0gKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfSAorCisjaW5jbHVkZSAibWQuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL3RocmVhZGluZy5oIgorI2VuZGlmCisKKy8qCisgKiBFcnJvciBjb2RlcworICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0hNQUNfRFJCR19SRVFVRVNUX1RPT19CSUcgICAgICAgICAgICAgIC0weDAwMDMgIC8qKjwgVG9vIG1hbnkgcmFuZG9tIHJlcXVlc3RlZCBpbiBzaW5nbGUgY2FsbC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcgICAgICAgICAgICAgICAgLTB4MDAwNSAgLyoqPCBJbnB1dCB0b28gbGFyZ2UgKEVudHJvcHkgKyBhZGRpdGlvbmFsKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgLTB4MDAwNyAgLyoqPCBSZWFkL3dyaXRlIGVycm9yIGluIGZpbGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgICAgICAgIC0weDAwMDkgIC8qKjwgVGhlIGVudHJvcHkgc291cmNlIGZhaWxlZC4gKi8KKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MKKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBjYW4gc2V0IGZvciB0aGlzIG1vZHVsZSBhcmUgaW4gdGhpcyBzZWN0aW9uLgorICogRWl0aGVyIGNoYW5nZSB0aGVtIGluIGNvbmZpZy5oIG9yIGRlZmluZSB0aGVtIG9uIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUuCisgKiBceworICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwpCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTCAgIDEwMDAwICAgLyoqPCBJbnRlcnZhbCBiZWZvcmUgcmVzZWVkIGlzIHBlcmZvcm1lZCBieSBkZWZhdWx0ICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVCkKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUICAgICAgICAgMjU2ICAgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5wdXQgYnl0ZXMgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QpCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX01BWF9SRVFVRVNUICAgICAgIDEwMjQgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGNhbGwgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfTUFYX1NFRURfSU5QVVQpCisjZGVmaW5lIE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUICAgIDM4NCAgICAgLyoqPCBNYXhpbXVtIHNpemUgb2YgKHJlKXNlZWQgYnVmZmVyICovCisjZW5kaWYKKworLyogXH0gbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MgKi8KKworI2RlZmluZSBNQkVEVExTX0hNQUNfRFJCR19QUl9PRkYgICAwICAgLyoqPCBObyBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgICAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gICAgMSAgIC8qKjwgUHJlZGljdGlvbiByZXNpc3RhbmNlIGVuYWJsZWQgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBITUFDX0RSQkcgY29udGV4dC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBXb3JraW5nIHN0YXRlOiB0aGUga2V5IEsgaXMgbm90IHN0b3JlZCBleHBsaWNpdGVseSwKKyAgICAgKiBidXQgaXMgaW1wbGllZCBieSB0aGUgSE1BQyBjb250ZXh0ICovCisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OyAgICAgICAgICAgICAgICAgICAgLyohPCBITUFDIGNvbnRleHQgKGluYy4gSykgICovCisgICAgdW5zaWduZWQgY2hhciBWW01CRURUTFNfTURfTUFYX1NJWkVdOyAgLyohPCBWIGluIHRoZSBzcGVjICAgICAgICAgICovCisgICAgaW50IHJlc2VlZF9jb3VudGVyOyAgICAgICAgICAgICAgICAgICAgIC8qITwgcmVzZWVkIGNvdW50ZXIgICAgICAgICAqLworCisgICAgLyogQWRtaW5pc3RyYXRpdmUgc3RhdGUgKi8KKyAgICBzaXplX3QgZW50cm9weV9sZW47ICAgICAgICAgLyohPCBlbnRyb3B5IGJ5dGVzIGdyYWJiZWQgb24gZWFjaCAocmUpc2VlZCAqLworICAgIGludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2U7ICAvKiE8IGVuYWJsZSBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgKEF1dG9tYXRpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VlZCBiZWZvcmUgZXZlcnkgcmFuZG9tIGdlbmVyYXRpb24pICovCisgICAgaW50IHJlc2VlZF9pbnRlcnZhbDsgICAgICAgIC8qITwgcmVzZWVkIGludGVydmFsICAgKi8KKworICAgIC8qIENhbGxiYWNrcyAqLworICAgIGludCAoKmZfZW50cm9weSkodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7IC8qITwgZW50cm9weSBmdW5jdGlvbiAqLworICAgIHZvaWQgKnBfZW50cm9weTsgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIHRoZSBlbnRyb3B5IGZ1bmN0aW9uICAgICAgICAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7CisjZW5kaWYKK30gbWJlZHRsc19obWFjX2RyYmdfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dCBpbml0aWFsaXphdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgTWFrZXMgdGhlIGNvbnRleHQgcmVhZHkgZm9yIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoKSwKKyAqICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX3NlZWRfYnVmKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEhNQUNfRFJCRyBpbml0aWFsIHNlZWRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgIFNlZWQgYW5kIHNldHVwIGVudHJvcHkgc291cmNlIGZvciBmdXR1cmUgcmVzZWVkcy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dCB0byBiZSBzZWVkZWQKKyAqIFxwYXJhbSBtZF9pbmZvICAgICAgIE1EIGFsZ29yaXRobSB0byB1c2UgZm9yIEhNQUNfRFJCRworICogXHBhcmFtIGZfZW50cm9weSAgICAgRW50cm9weSBjYWxsYmFjayAocF9lbnRyb3B5LCBidWZmZXIgdG8gZmlsbCwgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpCisgKiBccGFyYW0gcF9lbnRyb3B5ICAgICBFbnRyb3B5IGNvbnRleHQKKyAqIFxwYXJhbSBjdXN0b20gICAgICAgIFBlcnNvbmFsaXphdGlvbiBkYXRhIChEZXZpY2Ugc3BlY2lmaWMgaWRlbnRpZmllcnMpCisgKiAgICAgICAgICAgICAgICAgICAgICAoQ2FuIGJlIE5VTEwpCisgKiBccGFyYW0gbGVuICAgICAgICAgICBMZW5ndGggb2YgcGVyc29uYWxpemF0aW9uIGRhdGEKKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBUaGUgInNlY3VyaXR5IHN0cmVuZ3RoIiBhcyBkZWZpbmVkIGJ5IE5JU1QgaXMgc2V0IHRvOgorICogICAgICAgICAgICAgICAgICAgICAgMTI4IGJpdHMgaWYgbWRfYWxnIGlzIFNIQS0xLAorICogICAgICAgICAgICAgICAgICAgICAgMTkyIGJpdHMgaWYgbWRfYWxnIGlzIFNIQS0yMjQsCisgKiAgICAgICAgICAgICAgICAgICAgICAyNTYgYml0cyBpZiBtZF9hbGcgaXMgU0hBLTI1NiBvciBoaWdoZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgU0hBLTI1NiBpcyBqdXN0IGFzIGVmZmljaWVudCBhcyBTSEEtMjI0LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTURfQUxMT0NfRkFJTEVELCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRC4KKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKiBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX2VudHJvcHkpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1c3RvbSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEluaXRpbGlzYXRpb24gb2Ygc2ltcGlmaWVkIEhNQUNfRFJCRyAobmV2ZXIgcmVzZWVkcykuCisgKiAgICAgICAgICAgICAgICAgICAgICAoRm9yIHVzZSB3aXRoIGRldGVybWluaXN0aWMgRUNEU0EuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0IHRvIGJlIGluaXRpYWxpc2VkCisgKiBccGFyYW0gbWRfaW5mbyAgICAgICBNRCBhbGdvcml0aG0gdG8gdXNlIGZvciBITUFDX0RSQkcKKyAqIFxwYXJhbSBkYXRhICAgICAgICAgIENvbmNhdGVuYXRpb24gb2YgZW50cm9weSBzdHJpbmcgYW5kIGFkZGl0aW9uYWwgZGF0YQorICogXHBhcmFtIGRhdGFfbGVuICAgICAgTGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRC4KKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3NlZWRfYnVmKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqIG1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YV9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBFbmFibGUgLyBkaXNhYmxlIHByZWRpY3Rpb24gcmVzaXN0YW5jZSAoRGVmYXVsdDogT2ZmKQorICoKKyAqIE5vdGU6IElmIGVuYWJsZWQsIGVudHJvcHkgaXMgdXNlZCBmb3IgY3R4LT5lbnRyb3B5X2xlbiBiZWZvcmUgZWFjaCBjYWxsIQorICogICAgICAgT25seSB1c2UgdGhpcyBpZiB5b3UgaGF2ZSBhbXBsZSBzdXBwbHkgb2YgZ29vZCBlbnRyb3B5IQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gcmVzaXN0YW5jZSAgICBNQkVEVExTX0hNQUNfRFJCR19QUl9PTiBvciBNQkVEVExTX0hNQUNfRFJCR19QUl9PRkYKKyAqLwordm9pZCBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzaXN0YW5jZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCB0aGUgYW1vdW50IG9mIGVudHJvcHkgZ3JhYmJlZCBvbiBlYWNoIHJlc2VlZAorICogICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IGdpdmVuIGJ5IHRoZSBzZWN1cml0eSBzdHJlbmd0aCwgd2hpY2gKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIGhhc2ggdXNlZCwgc2VlIFxjIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoKSApCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBsZW4gICAgICAgICAgIEFtb3VudCBvZiBlbnRyb3B5IHRvIGdyYWIsIGluIGJ5dGVzCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfc2V0X2VudHJvcHlfbGVuKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBTZXQgdGhlIHJlc2VlZCBpbnRlcnZhbAorICogICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIGludGVydmFsICAgICAgUmVzZWVkIGludGVydmFsCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludGVydmFsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgSE1BQ19EUkJHIHVwZGF0ZSBzdGF0ZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gYWRkaXRpb25hbCAgICBBZGRpdGlvbmFsIGRhdGEgdG8gdXBkYXRlIHN0YXRlIHdpdGgsIG9yIE5VTEwKKyAqIFxwYXJhbSBhZGRfbGVuICAgICAgIExlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEsIG9yIDAKKyAqCisgKiBcbm90ZSAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIGRhdGEgaXMgb3B0aW9uYWwsIHBhc3MgTlVMTCBhbmQgMCBhcyBzZWNvbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoaXJkIGFyZ3VtZW50IGlmIG5vIGFkZGl0aW9uYWwgZGF0YSBpcyBiZWluZyB1c2VkLgorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEhNQUNfRFJCRyByZXNlZWRpbmcgKGV4dHJhY3RzIGRhdGEgZnJvbSBlbnRyb3B5IHNvdXJjZSkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dAorICogXHBhcmFtIGFkZGl0aW9uYWwgICAgQWRkaXRpb25hbCBkYXRhIHRvIGFkZCB0byBzdGF0ZSAoQ2FuIGJlIE5VTEwpCisgKiBccGFyYW0gbGVuICAgICAgICAgICBMZW5ndGggb2YgYWRkaXRpb25hbCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfcmVzZWVkKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkaXRpb25hbCwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEhNQUNfRFJCRyBnZW5lcmF0ZSByYW5kb20gd2l0aCBhZGRpdGlvbmFsIHVwZGF0ZSBpbnB1dAorICoKKyAqIE5vdGU6IEF1dG9tYXRpY2FsbHkgcmVzZWVkcyBpZiByZXNlZWRfY291bnRlciBpcyByZWFjaGVkIG9yIFBSIGlzIGVuYWJsZWQuCisgKgorICogXHBhcmFtIHBfcm5nICAgICAgICAgSE1BQ19EUkJHIGNvbnRleHQKKyAqIFxwYXJhbSBvdXRwdXQgICAgICAgIEJ1ZmZlciB0byBmaWxsCisgKiBccGFyYW0gb3V0cHV0X2xlbiAgICBMZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIGFkZGl0aW9uYWwgICAgQWRkaXRpb25hbCBkYXRhIHRvIHVwZGF0ZSB3aXRoIChjYW4gYmUgTlVMTCkKKyAqIFxwYXJhbSBhZGRfbGVuICAgICAgIExlbmd0aCBvZiBhZGRpdGlvbmFsIGRhdGEgKGNhbiBiZSAwKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHLCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcuCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQoIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkaXRpb25hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRkX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEhNQUNfRFJCRyBnZW5lcmF0ZSByYW5kb20KKyAqCisgKiBOb3RlOiBBdXRvbWF0aWNhbGx5IHJlc2VlZHMgaWYgcmVzZWVkX2NvdW50ZXIgaXMgcmVhY2hlZCBvciBQUiBpcyBlbmFibGVkLgorICoKKyAqIFxwYXJhbSBwX3JuZyAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gb3V0cHV0ICAgICAgICBCdWZmZXIgdG8gZmlsbAorICogXHBhcmFtIG91dF9sZW4gICAgICAgTGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVELCBvcgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfSE1BQ19EUkJHX1JFUVVFU1RfVE9PX0JJRworICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCB2b2lkICpwX3JuZywgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0X2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEZyZWUgYW4gSE1BQ19EUkJHIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBITUFDX0RSQkcgY29udGV4dCB0byBmcmVlLgorICovCit2b2lkIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBXcml0ZSBhIHNlZWQgZmlsZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gcGF0aCAgICAgICAgICBOYW1lIG9mIHRoZSBmaWxlCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCAxIG9uIGZpbGUgZXJyb3IsIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ193cml0ZV9zZWVkX2ZpbGUoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJlYWQgYW5kIHVwZGF0ZSBhIHNlZWQgZmlsZS4gU2VlZCBpcyBhZGRlZCB0byB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIEhNQUNfRFJCRyBjb250ZXh0CisgKiBccGFyYW0gcGF0aCAgICAgICAgICBOYW1lIG9mIHRoZSBmaWxlCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCAxIG9uIGZpbGUgZXJyb3IsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ITUFDX0RSQkdfSU5QVVRfVE9PX0JJRworICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICk7CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGhtYWNfZHJiZy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5OTZhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWQuaApAQCAtMCwwICsxLDM1NCBAQAorLyoqCisgKiBcZmlsZSBtZC5oCisgKgorICogXGJyaWVmIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3Qgd3JhcHBlcgorICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19NRF9ICisjZGVmaW5lIE1CRURUTFNfTURfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNkZWZpbmUgTUJFRFRMU19FUlJfTURfRkVBVFVSRV9VTkFWQUlMQUJMRSAgICAgICAgICAgICAgICAtMHg1MDgwICAvKio8IFRoZSBzZWxlY3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAgICAgLTB4NTEwMCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTURfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAtMHg1MTgwICAvKio8IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX01EX0ZJTEVfSU9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgLTB4NTIwMCAgLyoqPCBPcGVuaW5nIG9yIHJlYWRpbmcgb2YgZmlsZSBmYWlsZWQuICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX01EX05PTkU9MCwKKyAgICBNQkVEVExTX01EX01EMiwKKyAgICBNQkVEVExTX01EX01ENCwKKyAgICBNQkVEVExTX01EX01ENSwKKyAgICBNQkVEVExTX01EX1NIQTEsCisgICAgTUJFRFRMU19NRF9TSEEyMjQsCisgICAgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgTUJFRFRMU19NRF9TSEEzODQsCisgICAgTUJFRFRMU19NRF9TSEE1MTIsCisgICAgTUJFRFRMU19NRF9SSVBFTUQxNjAsCit9IG1iZWR0bHNfbWRfdHlwZV90OworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2RlZmluZSBNQkVEVExTX01EX01BWF9TSVpFICAgICAgICAgNjQgIC8qIGxvbmdlc3Qga25vd24gaXMgU0hBNTEyICovCisjZWxzZQorI2RlZmluZSBNQkVEVExTX01EX01BWF9TSVpFICAgICAgICAgMzIgIC8qIGxvbmdlc3Qga25vd24gaXMgU0hBMjU2IG9yIGxlc3MgKi8KKyNlbmRpZgorCisvKioKKyAqIE9wYXF1ZSBzdHJ1Y3QgZGVmaW5lZCBpbiBtZF9pbnRlcm5hbC5oCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfbWRfaW5mb190OworCisvKioKKyAqIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgY29udGV4dC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIGRpZ2VzdCAqLworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworCisgICAgLyoqIERpZ2VzdC1zcGVjaWZpYyBjb250ZXh0ICovCisgICAgdm9pZCAqbWRfY3R4OworCisgICAgLyoqIEhNQUMgcGFydCBvZiB0aGUgY29udGV4dCAqLworICAgIHZvaWQgKmhtYWNfY3R4OworfSBtYmVkdGxzX21kX2NvbnRleHRfdDsKKworLyoqCisgKiBcYnJpZWYgUmV0dXJucyB0aGUgbGlzdCBvZiBkaWdlc3RzIHN1cHBvcnRlZCBieSB0aGUgZ2VuZXJpYyBkaWdlc3QgbW9kdWxlLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhcnJheSBvZiBkaWdlc3RzLCB0aGUgbGFzdCBlbnRyeQorICogICAgICAgICAgICAgICAgICBpcyAwLgorICovCitjb25zdCBpbnQgKm1iZWR0bHNfbWRfbGlzdCggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmV0dXJucyB0aGUgbWVzc2FnZSBkaWdlc3QgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICBnaXZlbiBkaWdlc3QgbmFtZS4KKyAqCisgKiBccGFyYW0gbWRfbmFtZSAgIE5hbWUgb2YgdGhlIGRpZ2VzdCB0byBzZWFyY2ggZm9yLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgVGhlIG1lc3NhZ2UgZGlnZXN0IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBtZF9uYW1lIG9yCisgKiAgICAgICAgICAgICAgICAgIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBjb25zdCBjaGFyICptZF9uYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBSZXR1cm5zIHRoZSBtZXNzYWdlIGRpZ2VzdCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgIGdpdmVuIGRpZ2VzdCB0eXBlLgorICoKKyAqIFxwYXJhbSBtZF90eXBlICAgdHlwZSBvZiBkaWdlc3QgdG8gc2VhcmNoIGZvci4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIFRoZSBtZXNzYWdlIGRpZ2VzdCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggbWRfdHlwZSBvcgorICogICAgICAgICAgICAgICAgICBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1iZWR0bHNfbWRfdHlwZV90IG1kX3R5cGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgYSBtZF9jb250ZXh0IChhcyBOT05FKQorICogICAgICAgICAgICAgICAgICBUaGlzIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGZpcnN0LgorICogICAgICAgICAgICAgICAgICBQcmVwYXJlcyB0aGUgY29udGV4dCBmb3IgbWJlZHRsc19tZF9zZXR1cCgpIG9yIG1iZWR0bHNfbWRfZnJlZSgpLgorICovCit2b2lkIG1iZWR0bHNfbWRfaW5pdCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSBhbmQgY2xlYXIgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgb2YgY3R4LgorICogICAgICAgICAgICAgICAgICBDYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIGFmdGVyIG1iZWR0bHNfbWRfaW5pdCgpLgorICogICAgICAgICAgICAgICAgICBNYW5kYXRvcnkgb25jZSBtYmVkdGxzX21kX3NldHVwKCkgaGFzIGJlZW4gY2FsbGVkLgorICovCit2b2lkIG1iZWR0bHNfbWRfZnJlZSggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCApOworCisjaWYgISBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcpCisjZGVmaW5lIE1CRURUTFNfREVQUkVDQVRFRCAgICBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfREVQUkVDQVRFRAorI2VuZGlmCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2VsZWN0IE1EIHRvIHVzZSBhbmQgYWxsb2NhdGUgaW50ZXJuYWwgc3RydWN0dXJlcy4KKyAqICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBtYmVkdGxzX21kX2luaXQoKSBvciBtYmVkdGxzX21kX2ZyZWUoKS4KKyAqICAgICAgICAgICAgICAgICAgTWFrZXMgaXQgbmVjZXNzYXJ5IHRvIGNhbGwgbWJlZHRsc19tZF9mcmVlKCkgbGF0ZXIuCisgKgorICogXGRlcHJlY2F0ZWQgICAgICBTdXBlcnNlZGVkIGJ5IG1iZWR0bHNfbWRfc2V0dXAoKSBpbiAyLjAuMAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBzZXQgdXAuCisgKiBccGFyYW0gbWRfaW5mbyAgIE1lc3NhZ2UgZGlnZXN0IHRvIHVzZS4KKyAqCisgKiBccmV0dXJucyAgICAgICAgIFxjIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICAgXGMgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgb24gcGFyYW1ldGVyIGZhaWx1cmUsCisgKiAgICAgICAgICAgICAgICAgIFxjIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCitpbnQgbWJlZHRsc19tZF9pbml0X2N0eCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gKSBNQkVEVExTX0RFUFJFQ0FURUQ7CisjdW5kZWYgTUJFRFRMU19ERVBSRUNBVEVECisjZW5kaWYgLyogTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNlbGVjdCBNRCB0byB1c2UgYW5kIGFsbG9jYXRlIGludGVybmFsIHN0cnVjdHVyZXMuCisgKiAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgbWJlZHRsc19tZF9pbml0KCkgb3IgbWJlZHRsc19tZF9mcmVlKCkuCisgKiAgICAgICAgICAgICAgICAgIE1ha2VzIGl0IG5lY2Vzc2FyeSB0byBjYWxsIG1iZWR0bHNfbWRfZnJlZSgpIGxhdGVyLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBzZXQgdXAuCisgKiBccGFyYW0gbWRfaW5mbyAgIE1lc3NhZ2UgZGlnZXN0IHRvIHVzZS4KKyAqIFxwYXJhbSBobWFjICAgICAgMCB0byBzYXZlIHNvbWUgbWVtb3J5IGlmIEhNQUMgd2lsbCBub3QgYmUgdXNlZCwKKyAqICAgICAgICAgICAgICAgICAgbm9uLXplcm8gaXMgSE1BQyBpcyBnb2luZyB0byBiZSB1c2VkIHdpdGggdGhpcyBjb250ZXh0LgorICoKKyAqIFxyZXR1cm5zICAgICAgICAgXGMgMCBvbiBzdWNjZXNzLAorICogICAgICAgICAgICAgICAgICBcYyBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBvbiBwYXJhbWV0ZXIgZmFpbHVyZSwKKyAqICAgICAgICAgICAgICAgICAgXGMgTUJFRFRMU19FUlJfTURfQUxMT0NfRkFJTEVEIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKi8KK2ludCBtYmVkdGxzX21kX3NldHVwKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgaW50IGhtYWMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENsb25lIHRoZSBzdGF0ZSBvZiBhbiBNRCBjb250ZXh0CisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUgdHdvIGNvbnRleHRzIG11c3QgaGF2ZSBiZWVuIHNldHVwIHRvIHRoZSBzYW1lIHR5cGUKKyAqICAgICAgICAgICAgICAgICAgKGNsb25pbmcgZnJvbSBTSEEtMjU2IHRvIFNIQS01MTIgbWFrZSBubyBzZW5zZSkuCisgKgorICogXHdhcm5pbmcgICAgICAgICBPbmx5IGNsb25lcyB0aGUgTUQgc3RhdGUsIG5vdCB0aGUgSE1BQyBzdGF0ZSEgKGZvciBub3cpCisgKgorICogXHBhcmFtIGRzdCAgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgICBUaGUgY29udGV4dCB0byBiZSBjbG9uZWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIFxjIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICAgXGMgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgb24gcGFyYW1ldGVyIGZhaWx1cmUuCisgKi8KK2ludCBtYmVkdGxzX21kX2Nsb25lKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfY29udGV4dF90ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IG91dHB1dC4KKyAqCisgKiBccGFyYW0gbWRfaW5mbyAgIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqCisgKiBccmV0dXJuICAgICAgICAgIHNpemUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IG91dHB1dCBpbiBieXRlcy4KKyAqLwordW5zaWduZWQgY2hhciBtYmVkdGxzX21kX2dldF9zaXplKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgbWVzc2FnZSBkaWdlc3Qgb3V0cHV0LgorICoKKyAqIFxwYXJhbSBtZF9pbmZvICAgbWVzc2FnZSBkaWdlc3QgaW5mbworICoKKyAqIFxyZXR1cm4gICAgICAgICAgdHlwZSBvZiB0aGUgbWVzc2FnZSBkaWdlc3Qgb3V0cHV0LgorICovCittYmVkdGxzX21kX3R5cGVfdCBtYmVkdGxzX21kX2dldF90eXBlKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBkaWdlc3Qgb3V0cHV0LgorICoKKyAqIFxwYXJhbSBtZF9pbmZvICAgbWVzc2FnZSBkaWdlc3QgaW5mbworICoKKyAqIFxyZXR1cm4gICAgICAgICAgbmFtZSBvZiB0aGUgbWVzc2FnZSBkaWdlc3Qgb3V0cHV0LgorICovCitjb25zdCBjaGFyICptYmVkdGxzX21kX2dldF9uYW1lKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUHJlcGFyZSB0aGUgY29udGV4dCB0byBkaWdlc3QgYSBuZXcgbWVzc2FnZS4KKyAqICAgICAgICAgICAgICAgICAgR2VuZXJhbGx5IGNhbGxlZCBhZnRlciBtYmVkdGxzX21kX3NldHVwKCkgb3IgbWJlZHRsc19tZF9maW5pc2goKS4KKyAqICAgICAgICAgICAgICAgICAgRm9sbG93ZWQgYnkgbWJlZHRsc19tZF91cGRhdGUoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgY29udGV4dC4KKyAqCisgKiBccmV0dXJucyAgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfc3RhcnRzKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHByb2Nlc3MgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCBiZXR3ZWVuIG1iZWR0bHNfbWRfc3RhcnRzKCkgYW5kIG1iZWR0bHNfbWRfZmluaXNoKCkuCisgKiAgICAgICAgICAgICAgICAgIE1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGFsCisgKiBccGFyYW0gaWxlbiAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICoKKyAqIFxyZXR1cm5zICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZF91cGRhdGUoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJpYyBtZXNzYWdlIGRpZ2VzdCBmaW5hbCBkaWdlc3QKKyAqICAgICAgICAgICAgICAgICAgQ2FsbGVkIGFmdGVyIG1iZWR0bHNfbWRfdXBkYXRlKCkuCisgKiAgICAgICAgICAgICAgICAgIFVzdWFsbHkgZm9sbG93ZWQgYnkgbWJlZHRsc19tZF9mcmVlKCkgb3IgbWJlZHRsc19tZF9zdGFydHMoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgICBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNoZWNrc3VtIHJlc3VsdAorICoKKyAqIFxyZXR1cm5zICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZF9maW5pc2goIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBtZXNzYWdlX2RpZ2VzdCggaW5wdXQgYnVmZmVyICkKKyAqCisgKiBccGFyYW0gbWRfaW5mbyAgbWVzc2FnZSBkaWdlc3QgaW5mbworICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3QgY2hlY2tzdW0gcmVzdWx0CisgKgorICogXHJldHVybnMgICAgICAgIDAgb24gc3VjY2VzcywgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgaWYgcGFyYW1ldGVyCisgKiAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZCggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBtZXNzYWdlX2RpZ2VzdCggZmlsZSBjb250ZW50cyApCisgKgorICogXHBhcmFtIG1kX2luZm8gIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqIFxwYXJhbSBwYXRoICAgICBpbnB1dCBmaWxlIG5hbWUKKyAqIFxwYXJhbSBvdXRwdXQgICBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGNoZWNrc3VtIHJlc3VsdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTURfRklMRV9JT19FUlJPUiBpZiBmaWxlIGlucHV0IGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBtZF9pbmZvIHdhcyBOVUxMLgorICovCitpbnQgbWJlZHRsc19tZF9maWxlKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCBITUFDIGtleSBhbmQgcHJlcGFyZSB0byBhdXRoZW50aWNhdGUgYSBuZXcgbWVzc2FnZS4KKyAqICAgICAgICAgICAgICAgICAgVXN1YWxseSBjYWxsZWQgYWZ0ZXIgbWJlZHRsc19tZF9zZXR1cCgpIG9yIG1iZWR0bHNfbWRfaG1hY19maW5pc2goKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEhNQUMgY29udGV4dAorICogXHBhcmFtIGtleSAgICAgICBITUFDIHNlY3JldCBrZXkKKyAqIFxwYXJhbSBrZXlsZW4gICAgbGVuZ3RoIG9mIHRoZSBITUFDIGtleSBpbiBieXRlcworICoKKyAqIFxyZXR1cm5zICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmljIEhNQUMgcHJvY2VzcyBidWZmZXIuCisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCBiZXR3ZWVuIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoKSBvciBtYmVkdGxzX21kX2htYWNfcmVzZXQoKQorICogICAgICAgICAgICAgICAgICBhbmQgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCgpLgorICogICAgICAgICAgICAgICAgICBNYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBITUFDIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICoKKyAqIFxyZXR1cm5zICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBPdXRwdXQgSE1BQy4KKyAqICAgICAgICAgICAgICAgICAgQ2FsbGVkIGFmdGVyIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoKS4KKyAqICAgICAgICAgICAgICAgICAgVXN1YWxseSBmb2xsb3dlZCBieSBtYmVkdGxzX21kX2htYWNfcmVzZXQoKSwKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cygpLCBvciBtYmVkdGxzX21kX2ZyZWUoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEhNQUMgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgICBHZW5lcmljIEhNQUMgY2hlY2tzdW0gcmVzdWx0CisgKgorICogXHJldHVybnMgICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24gZmFpbHMuCisgKi8KK2ludCBtYmVkdGxzX21kX2htYWNfZmluaXNoKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUHJlcGFyZSB0byBhdXRoZW50aWNhdGUgYSBuZXcgbWVzc2FnZSB3aXRoIHRoZSBzYW1lIGtleS4KKyAqICAgICAgICAgICAgICAgICAgQ2FsbGVkIGFmdGVyIG1iZWR0bHNfbWRfaG1hY19maW5pc2goKSBhbmQgYmVmb3JlCisgKiAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoKS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIEhNQUMgY29udGV4dCB0byBiZSByZXNldAorICoKKyAqIFxyZXR1cm5zICAgICAgICAgMCBvbiBzdWNjZXNzLCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSBpZiBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE91dHB1dCA9IEdlbmVyaWNfSE1BQyggaG1hYyBrZXksIGlucHV0IGJ1ZmZlciApCisgKgorICogXHBhcmFtIG1kX2luZm8gIG1lc3NhZ2UgZGlnZXN0IGluZm8KKyAqIFxwYXJhbSBrZXkgICAgICBITUFDIHNlY3JldCBrZXkKKyAqIFxwYXJhbSBrZXlsZW4gICBsZW5ndGggb2YgdGhlIEhNQUMga2V5IGluIGJ5dGVzCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgR2VuZXJpYyBITUFDLXJlc3VsdAorICoKKyAqIFxyZXR1cm5zICAgICAgICAwIG9uIHN1Y2Nlc3MsIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBIGlmIHBhcmFtZXRlcgorICogICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWlscy4KKyAqLworaW50IG1iZWR0bHNfbWRfaG1hYyggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qIEludGVybmFsIHVzZSAqLworaW50IG1iZWR0bHNfbWRfcHJvY2VzcyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19NRF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kMi5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjkzZmJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZDIuaApAQCAtMCwwICsxLDEzNiBAQAorLyoqCisgKiBcZmlsZSBtZDIuaAorICoKKyAqIFxicmllZiBNRDIgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIChoYXNoIGZ1bmN0aW9uKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX01EMl9ICisjZGVmaW5lIE1CRURUTFNfTUQyX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQyX0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQyIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWduZWQgY2hhciBja3N1bVsxNl07ICAgIC8qITwgY2hlY2tzdW0gb2YgdGhlIGRhdGEgYmxvY2sgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHN0YXRlWzQ4XTsgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzE2XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCisgICAgc2l6ZV90IGxlZnQ7ICAgICAgICAgICAgICAgIC8qITwgYW1vdW50IG9mIGRhdGEgaW4gYnVmZmVyICAgKi8KK30KK21iZWR0bHNfbWQyX2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgTUQyIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQyIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX21kMl9pbml0KCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgTUQyIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQyIGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfbWQyX2ZyZWUoIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhbiBNRDIgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfbWQyX2Nsb25lKCBtYmVkdGxzX21kMl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kMl9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQyIGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfbWQyX3N0YXJ0cyggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1EMiBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBNRDIgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfbWQyX3VwZGF0ZSggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQyIGZpbmFsIGRpZ2VzdAorICoKKyAqIFxwYXJhbSBjdHggICAgICBNRDIgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIE1EMiBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX21kMl9maW5pc2goIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX01EMl9BTFQgKi8KKyNpbmNsdWRlICJtZDJfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19NRDJfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gTUQyKCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBNRDIgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDIoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21kMl9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKy8qIEludGVybmFsIHVzZSAqLwordm9pZCBtYmVkdGxzX21kMl9wcm9jZXNzKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHggKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG1iZWR0bHNfbWQyLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWQ0LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjE0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kNC5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioKKyAqIFxmaWxlIG1kNC5oCisgKgorICogXGJyaWVmIE1ENCBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gKGhhc2ggZnVuY3Rpb24pCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfTUQ0X0gKKyNkZWZpbmUgTUJFRFRMU19NRDRfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRDRfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBNRDQgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLworICAgIHVpbnQzMl90IHN0YXRlWzRdOyAgICAgICAgICAvKiE8IGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUgICovCisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQgKi8KK30KK21iZWR0bHNfbWQ0X2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgTUQ0IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ0IGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNF9pbml0KCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgTUQ0IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ0IGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfbWQ0X2ZyZWUoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhbiBNRDQgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfbWQ0X2Nsb25lKCBtYmVkdGxzX21kNF9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kNF9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQ0IGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfbWQ0X3N0YXJ0cyggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1ENCBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBNRDQgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfbWQ0X3VwZGF0ZSggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQ0IGZpbmFsIGRpZ2VzdAorICoKKyAqIFxwYXJhbSBjdHggICAgICBNRDQgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIE1ENCBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX21kNF9maW5pc2goIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX01ENF9BTFQgKi8KKyNpbmNsdWRlICJtZDRfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19NRDRfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgT3V0cHV0ID0gTUQ0KCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBNRDQgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDQoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21kNF9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKy8qIEludGVybmFsIHVzZSAqLwordm9pZCBtYmVkdGxzX21kNF9wcm9jZXNzKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG1iZWR0bHNfbWQ0LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWQ1LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjQwNjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21kNS5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioKKyAqIFxmaWxlIG1kNS5oCisgKgorICogXGJyaWVmIE1ENSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gKGhhc2ggZnVuY3Rpb24pCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfTUQ1X0gKKyNkZWZpbmUgTUJFRFRMU19NRDVfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRDVfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBNRDUgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCB0b3RhbFsyXTsgICAgICAgICAgLyohPCBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkICAqLworICAgIHVpbnQzMl90IHN0YXRlWzRdOyAgICAgICAgICAvKiE8IGludGVybWVkaWF0ZSBkaWdlc3Qgc3RhdGUgICovCisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgIC8qITwgZGF0YSBibG9jayBiZWluZyBwcm9jZXNzZWQgKi8KK30KK21iZWR0bHNfbWQ1X2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgTUQ1IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ1IGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX21kNV9pbml0KCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgTUQ1IGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgTUQ1IGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfbWQ1X2ZyZWUoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbG9uZSAodGhlIHN0YXRlIG9mKSBhbiBNRDUgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfbWQ1X2Nsb25lKCBtYmVkdGxzX21kNV9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kNV9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQ1IGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfbWQ1X3N0YXJ0cyggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE1ENSBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBNRDUgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfbWQ1X3VwZGF0ZSggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTUQ1IGZpbmFsIGRpZ2VzdAorICoKKyAqIFxwYXJhbSBjdHggICAgICBNRDUgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIE1ENSBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX21kNV9maW5pc2goIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKy8qIEludGVybmFsIHVzZSAqLwordm9pZCBtYmVkdGxzX21kNV9wcm9jZXNzKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfTUQ1X0FMVCAqLworI2luY2x1ZGUgIm1kNV9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBNRDUoIGlucHV0IGJ1ZmZlciApCisgKgorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIE1ENSBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX21kNSggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLCB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfbWQ1X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG1iZWR0bHNfbWQ1LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWRfaW50ZXJuYWwuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbWRfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjQ0MWJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioKKyAqIFxmaWxlIG1kX2ludGVybmFsLmgKKyAqCisgKiBcYnJpZWYgTWVzc2FnZSBkaWdlc3Qgd3JhcHBlcnMuCisgKgorICogXHdhcm5pbmcgVGhpcyBpbiBhbiBpbnRlcm5hbCBoZWFkZXIuIERvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LgorICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19NRF9XUkFQX0gKKyNkZWZpbmUgTUJFRFRMU19NRF9XUkFQX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJtZC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogTWVzc2FnZSBkaWdlc3QgaW5mb3JtYXRpb24uCisgKiBBbGxvd3MgbWVzc2FnZSBkaWdlc3QgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBpbiBhIGdlbmVyaWMgd2F5LgorICovCitzdHJ1Y3QgbWJlZHRsc19tZF9pbmZvX3QKK3sKKyAgICAvKiogRGlnZXN0IGlkZW50aWZpZXIgKi8KKyAgICBtYmVkdGxzX21kX3R5cGVfdCB0eXBlOworCisgICAgLyoqIE5hbWUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0ICovCisgICAgY29uc3QgY2hhciAqIG5hbWU7CisKKyAgICAvKiogT3V0cHV0IGxlbmd0aCBvZiB0aGUgZGlnZXN0IGZ1bmN0aW9uIGluIGJ5dGVzICovCisgICAgaW50IHNpemU7CisKKyAgICAvKiogQmxvY2sgbGVuZ3RoIG9mIHRoZSBkaWdlc3QgZnVuY3Rpb24gaW4gYnl0ZXMgKi8KKyAgICBpbnQgYmxvY2tfc2l6ZTsKKworICAgIC8qKiBEaWdlc3QgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb24gKi8KKyAgICB2b2lkICgqc3RhcnRzX2Z1bmMpKCB2b2lkICpjdHggKTsKKworICAgIC8qKiBEaWdlc3QgdXBkYXRlIGZ1bmN0aW9uICovCisgICAgdm9pZCAoKnVwZGF0ZV9mdW5jKSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworICAgIC8qKiBEaWdlc3QgZmluYWxpc2F0aW9uIGZ1bmN0aW9uICovCisgICAgdm9pZCAoKmZpbmlzaF9mdW5jKSggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworICAgIC8qKiBHZW5lcmljIGRpZ2VzdCBmdW5jdGlvbiAqLworICAgIHZvaWQgKCpkaWdlc3RfZnVuYykoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworICAgIC8qKiBBbGxvY2F0ZSBhIG5ldyBjb250ZXh0ICovCisgICAgdm9pZCAqICgqY3R4X2FsbG9jX2Z1bmMpKCB2b2lkICk7CisKKyAgICAvKiogRnJlZSB0aGUgZ2l2ZW4gY29udGV4dCAqLworICAgIHZvaWQgKCpjdHhfZnJlZV9mdW5jKSggdm9pZCAqY3R4ICk7CisKKyAgICAvKiogQ2xvbmUgc3RhdGUgZnJvbSBhIGNvbnRleHQgKi8KKyAgICB2b2lkICgqY2xvbmVfZnVuYykoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICk7CisKKyAgICAvKiogSW50ZXJuYWwgdXNlIG9ubHkgKi8KKyAgICB2b2lkICgqcHJvY2Vzc19mdW5jKSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCApOworfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX21kMl9pbmZvOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfbWQ0X2luZm87CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19tZDVfaW5mbzsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19SSVBFTUQxNjBfQykKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3JpcGVtZDE2MF9pbmZvOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3NoYTFfaW5mbzsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3NoYTIyNF9pbmZvOworZXh0ZXJuIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhMjU2X2luZm87CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGEzODRfaW5mbzsKK2V4dGVybiBjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX3NoYTUxMl9pbmZvOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX01EX1dSQVBfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWRmMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qKgorICogXGZpbGUgbWVtb3J5X2J1ZmZlcl9hbGxvYy5oCisgKgorICogXGJyaWVmIEJ1ZmZlci1iYXNlZCBtZW1vcnkgYWxsb2NhdG9yCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19ICisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUpCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFICAgICAgIDQgLyoqPCBBbGlnbiBvbiBtdWx0aXBsZXMgb2YgdGhpcyB2YWx1ZSAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKyNkZWZpbmUgTUJFRFRMU19NRU1PUllfVkVSSUZZX05PTkUgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTExPQyAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgTUJFRFRMU19NRU1PUllfVkVSSUZZX0ZSRUUgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxXQVlTICAgICAgIChNQkVEVExTX01FTU9SWV9WRVJJRllfQUxMT0MgfCBNQkVEVExTX01FTU9SWV9WRVJJRllfRlJFRSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgIEluaXRpYWxpemUgdXNlIG9mIHN0YWNrLWJhc2VkIG1lbW9yeSBhbGxvY2F0b3IuCisgKiAgICAgICAgICBUaGUgc3RhY2stYmFzZWQgYWxsb2NhdG9yIGRvZXMgbWVtb3J5IG1hbmFnZW1lbnQgaW5zaWRlIHRoZQorICogICAgICAgICAgcHJlc2VudGVkIGJ1ZmZlciBhbmQgZG9lcyBub3QgY2FsbCBjYWxsb2MoKSBhbmQgZnJlZSgpLgorICogICAgICAgICAgSXQgc2V0cyB0aGUgZ2xvYmFsIG1iZWR0bHNfY2FsbG9jKCkgYW5kIG1iZWR0bHNfZnJlZSgpIHBvaW50ZXJzCisgKiAgICAgICAgICB0byBpdHMgb3duIGZ1bmN0aW9ucy4KKyAqICAgICAgICAgIChQcm92aWRlZCBtYmVkdGxzX2NhbGxvYygpIGFuZCBtYmVkdGxzX2ZyZWUoKSBhcmUgdGhyZWFkLXNhZmUgaWYKKyAqICAgICAgICAgICBNQkVEVExTX1RIUkVBRElOR19DIGlzIGRlZmluZWQpCisgKgorICogXG5vdGUgICAgVGhpcyBjb2RlIGlzIG5vdCBvcHRpbWl6ZWQgYW5kIHByb3ZpZGVzIGEgc3RyYWlnaHQtZm9yd2FyZAorICogICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgYSBzdGFjay1iYXNlZCBtZW1vcnkgYWxsb2NhdG9yLgorICoKKyAqIFxwYXJhbSBidWYgICBidWZmZXIgdG8gdXNlIGFzIGhlYXAKKyAqIFxwYXJhbSBsZW4gICBzaXplIG9mIHRoZSBidWZmZXIKKyAqLwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgRnJlZSB0aGUgbXV0ZXggZm9yIHRocmVhZC1zYWZldHkgYW5kIGNsZWFyIHJlbWFpbmluZyBtZW1vcnkKKyAqLwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgIERldGVybWluZSB3aGVuIHRoZSBhbGxvY2F0b3Igc2hvdWxkIGF1dG9tYXRpY2FsbHkgdmVyaWZ5IHRoZSBzdGF0ZQorICogICAgICAgICAgb2YgdGhlIGVudGlyZSBjaGFpbiBvZiBoZWFkZXJzIC8gbWV0YS1kYXRhLgorICogICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfTUVNT1JZX1ZFUklGWV9OT05FKQorICoKKyAqIFxwYXJhbSB2ZXJpZnkgICAgT25lIG9mIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9OT05FLCBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxMT0MsCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9GUkVFIG9yIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTFdBWVMKKyAqLwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfc2V0X3ZlcmlmeSggaW50IHZlcmlmeSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKy8qKgorICogXGJyaWVmICAgUHJpbnQgb3V0IHRoZSBzdGF0dXMgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKHByaW1hcmlseSBmb3IgdXNlCisgKiAgICAgICAgICBhZnRlciBhIHByb2dyYW0gc2hvdWxkIGhhdmUgZGUtYWxsb2NhdGVkIGFsbCBtZW1vcnkpCisgKiAgICAgICAgICBQcmludHMgb3V0IGEgbGlzdCBvZiAnc3RpbGwgYWxsb2NhdGVkJyBibG9ja3MgYW5kIHRoZWlyIHN0YWNrCisgKiAgICAgICAgICB0cmFjZSBpZiBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UgaXMgZGVmaW5lZC4KKyAqLwordm9pZCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzKCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgR2V0IHRoZSBwZWFrIGhlYXAgdXNhZ2Ugc28gZmFyCisgKgorICogXHBhcmFtIG1heF91c2VkICAgICAgUGVhayBudW1iZXIgb2YgYnl0ZXMgaW4gdXNlIG9yIGNvbW1pdHRlZC4gVGhpcworICogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYnl0ZXMgaW4gYWxsb2NhdGVkIGJsb2NrcyB0b28gc21hbGwgdG8gc3BsaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIGludG8gc21hbGxlciBibG9ja3MgYnV0IGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KKyAqIFxwYXJhbSBtYXhfYmxvY2tzICAgIFBlYWsgbnVtYmVyIG9mIGJsb2NrcyBpbiB1c2UsIGluY2x1ZGluZyBmcmVlIGFuZCB1c2VkCisgKi8KK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9nZXQoIHNpemVfdCAqbWF4X3VzZWQsIHNpemVfdCAqbWF4X2Jsb2NrcyApOworCisvKioKKyAqIFxicmllZiAgIFJlc2V0IHBlYWsgc3RhdGlzdGljcworICovCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICBHZXQgdGhlIGN1cnJlbnQgaGVhcCB1c2FnZQorICoKKyAqIFxwYXJhbSBjdXJfdXNlZCAgICAgIEN1cnJlbnQgbnVtYmVyIG9mIGJ5dGVzIGluIHVzZSBvciBjb21taXR0ZWQuIFRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGJ5dGVzIGluIGFsbG9jYXRlZCBibG9ja3MgdG9vIHNtYWxsIHRvIHNwbGl0CisgKiAgICAgICAgICAgICAgICAgICAgICBpbnRvIHNtYWxsZXIgYmxvY2tzIGJ1dCBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuCisgKiBccGFyYW0gY3VyX2Jsb2NrcyAgICBDdXJyZW50IG51bWJlciBvZiBibG9ja3MgaW4gdXNlLCBpbmNsdWRpbmcgZnJlZSBhbmQgdXNlZAorICovCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCBzaXplX3QgKmN1cl91c2VkLCBzaXplX3QgKmN1cl9ibG9ja3MgKTsKKyNlbmRpZiAvKiBNQkVEVExTX01FTU9SWV9ERUJVRyAqLworCisvKioKKyAqIFxicmllZiAgIFZlcmlmaWVzIHRoYXQgYWxsIGhlYWRlcnMgaW4gdGhlIG1lbW9yeSBidWZmZXIgYXJlIGNvcnJlY3QKKyAqICAgICAgICAgIGFuZCBjb250YWluIHNhbmUgdmFsdWVzLiBIZWxwcyBkZWJ1ZyBidWZmZXItb3ZlcmZsb3cgZXJyb3JzLgorICoKKyAqICAgICAgICAgIFByaW50cyBvdXQgZmlyc3QgZmFpbHVyZSBpZiBNQkVEVExTX01FTU9SWV9ERUJVRyBpcyBkZWZpbmVkLgorICogICAgICAgICAgUHJpbnRzIG91dCBmdWxsIGhlYWRlciBpbmZvcm1hdGlvbiBpZiBNQkVEVExTX01FTU9SWV9ERUJVRworICogICAgICAgICAgaXMgZGVmaW5lZC4gKEluY2x1ZGVzIHN0YWNrIHRyYWNlIGluZm9ybWF0aW9uIGZvciBlYWNoIGJsb2NrIGlmCisgKiAgICAgICAgICBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UgaXMgZGVmaW5lZCBhcyB3ZWxsKS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgIDAgaWYgdmVyaWZpZWQsIDEgb3RoZXJ3aXNlCisgKi8KK2ludCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCB2b2lkICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiBhIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtZW1vcnlfYnVmZmVyX2FsbG9jLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvbmV0LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDU1OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL25ldC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKgorICogXGZpbGUgbmV0LmgKKyAqCisgKiBcYnJpZWYgRGVwcmVjYXRlZCBoZWFkZXIgZmlsZSB0aGF0IGluY2x1ZGVzIG1iZWR0bHMvbmV0X3NvY2tldHMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqCisgKiBcZGVwcmVjYXRlZCBTdXBlcnNlZGVkIGJ5IG1iZWR0bHMvbmV0X3NvY2tldHMuaAorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCkKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaWYgZGVmaW5lZChNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORykKKyN3YXJuaW5nICJEZXByZWNhdGVkIGhlYWRlciBmaWxlOiBTdXBlcnNlZGVkIGJ5IG1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNlbmRpZiAvKiBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORyAqLworI2VuZGlmIC8qICFNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9uZXRfc29ja2V0cy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9uZXRfc29ja2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzM1NTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL25ldF9zb2NrZXRzLmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qKgorICogXGZpbGUgbmV0X3NvY2tldHMuaAorICoKKyAqIFxicmllZiBOZXR3b3JrIGNvbW11bmljYXRpb24gZnVuY3Rpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfTkVUX1NPQ0tFVFNfSAorI2RlZmluZSBNQkVEVExTX05FVF9TT0NLRVRTX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlICJzc2wuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1CRURUTFNfRVJSX05FVF9TT0NLRVRfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgLTB4MDA0MiAgLyoqPCBGYWlsZWQgdG8gb3BlbiBhIHNvY2tldC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX0NPTk5FQ1RfRkFJTEVEICAgICAgICAgICAgICAgICAgICAtMHgwMDQ0ICAvKio8IFRoZSBjb25uZWN0aW9uIHRvIHRoZSBnaXZlbiBzZXJ2ZXIgLyBwb3J0IGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX0JJTkRfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAtMHgwMDQ2ICAvKio8IEJpbmRpbmcgb2YgdGhlIHNvY2tldCBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX05FVF9MSVNURU5fRkFJTEVEICAgICAgICAgICAgICAgICAgICAgLTB4MDA0OCAgLyoqPCBDb3VsZCBub3QgbGlzdGVuIG9uIHRoZSBzb2NrZXQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX05FVF9BQ0NFUFRfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgLTB4MDA0QSAgLyoqPCBDb3VsZCBub3QgYWNjZXB0IHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfUkVDVl9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgIC0weDAwNEMgIC8qKjwgUmVhZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzb2NrZXQgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfU0VORF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgIC0weDAwNEUgIC8qKjwgU2VuZGluZyBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBzb2NrZXQgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgIC0weDAwNTAgIC8qKjwgQ29ubmVjdGlvbiB3YXMgcmVzZXQgYnkgcGVlci4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfTkVUX1VOS05PV05fSE9TVCAgICAgICAgICAgICAgICAgICAgICAtMHgwMDUyICAvKio8IEZhaWxlZCB0byBnZXQgYW4gSVAgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIGhvc3RuYW1lLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfQlVGRkVSX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgIC0weDAwNDMgIC8qKjwgQnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBkYXRhLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9ORVRfSU5WQUxJRF9DT05URVhUICAgICAgICAgICAgICAgICAgIC0weDAwNDUgIC8qKjwgVGhlIGNvbnRleHQgaXMgaW52YWxpZCwgZWcgYmVjYXVzZSBpdCB3YXMgZnJlZSgpZWQuICovCisKKyNkZWZpbmUgTUJFRFRMU19ORVRfTElTVEVOX0JBQ0tMT0cgICAgICAgICAxMCAvKio8IFRoZSBiYWNrbG9nIHRoYXQgbGlzdGVuKCkgc2hvdWxkIHVzZS4gKi8KKworI2RlZmluZSBNQkVEVExTX05FVF9QUk9UT19UQ1AgMCAvKio8IFRoZSBUQ1AgdHJhbnNwb3J0IHByb3RvY29sICovCisjZGVmaW5lIE1CRURUTFNfTkVUX1BST1RPX1VEUCAxIC8qKjwgVGhlIFVEUCB0cmFuc3BvcnQgcHJvdG9jb2wgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFdyYXBwZXIgdHlwZSBmb3Igc29ja2V0cy4KKyAqCisgKiBDdXJyZW50bHkgYmFja2VkIGJ5IGp1c3QgYSBmaWxlIGRlc2NyaXB0b3IsIGJ1dCBtaWdodCBiZSBtb3JlIGluIHRoZSBmdXR1cmUKKyAqIChlZyB0d28gZmlsZSBkZXNjcmlwdG9ycyBmb3IgY29tYmluZWQgSVB2NCArIElQdjYgc3VwcG9ydCwgb3IgYWRkaXRpb25hbAorICogc3RydWN0dXJlcyBmb3IgaGFuZC1tYWRlIFVEUCBkZW11bHRpcGxleGluZykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IGZkOyAgICAgICAgICAgICAvKio8IFRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAgICAgICAgICAgICAgICAgKi8KK30KK21iZWR0bHNfbmV0X2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYSBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgSnVzdCBtYWtlcyB0aGUgY29udGV4dCByZWFkeSB0byBiZSB1c2VkIG9yIGZyZWVkIHNhZmVseS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc19uZXRfaW5pdCggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYXRlIGEgY29ubmVjdGlvbiB3aXRoIGhvc3Q6cG9ydCBpbiB0aGUgZ2l2ZW4gcHJvdG9jb2wKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU29ja2V0IHRvIHVzZQorICogXHBhcmFtIGhvc3QgICAgIEhvc3QgdG8gY29ubmVjdCB0bworICogXHBhcmFtIHBvcnQgICAgIFBvcnQgdG8gY29ubmVjdCB0bworICogXHBhcmFtIHByb3RvICAgIFByb3RvY29sOiBNQkVEVExTX05FVF9QUk9UT19UQ1Agb3IgTUJFRFRMU19ORVRfUFJPVE9fVURQCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3Igb25lIG9mOgorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NULAorICogICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTkVUX0NPTk5FQ1RfRkFJTEVECisgKgorICogXG5vdGUgICAgICAgICAgIFNldHMgdGhlIHNvY2tldCBpbiBjb25uZWN0ZWQgbW9kZSBldmVuIHdpdGggVURQLgorICovCitpbnQgbWJlZHRsc19uZXRfY29ubmVjdCggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpwb3J0LCBpbnQgcHJvdG8gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ3JlYXRlIGEgcmVjZWl2aW5nIHNvY2tldCBvbiBiaW5kX2lwOnBvcnQgaW4gdGhlIGNob3NlbgorICogICAgICAgICAgICAgICAgIHByb3RvY29sLiBJZiBiaW5kX2lwID09IE5VTEwsIGFsbCBpbnRlcmZhY2VzIGFyZSBib3VuZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU29ja2V0IHRvIHVzZQorICogXHBhcmFtIGJpbmRfaXAgIElQIHRvIGJpbmQgdG8sIGNhbiBiZSBOVUxMCisgKiBccGFyYW0gcG9ydCAgICAgUG9ydCBudW1iZXIgdG8gdXNlCisgKiBccGFyYW0gcHJvdG8gICAgUHJvdG9jb2w6IE1CRURUTFNfTkVUX1BST1RPX1RDUCBvciBNQkVEVExTX05FVF9QUk9UT19VRFAKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBvbmUgb2Y6CisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX05FVF9CSU5EX0ZBSUxFRCwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX05FVF9MSVNURU5fRkFJTEVECisgKgorICogXG5vdGUgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIHByb3RvY29sLCBvcGVucyB0aGUgc29ja2V0cyBhbmQgYmluZHMgaXQuCisgKiAgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24sIG1ha2UgdGhlIHNvY2tldCBsaXN0ZW5pbmcgaWYgcHJvdG9jb2wgaXMgVENQLgorICovCitpbnQgbWJlZHRsc19uZXRfYmluZCggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpiaW5kX2lwLCBjb25zdCBjaGFyICpwb3J0LCBpbnQgcHJvdG8gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbSBhIHJlbW90ZSBjbGllbnQKKyAqCisgKiBccGFyYW0gYmluZF9jdHggIFJlbGV2YW50IHNvY2tldAorICogXHBhcmFtIGNsaWVudF9jdHggV2lsbCBjb250YWluIHRoZSBjb25uZWN0ZWQgY2xpZW50IHNvY2tldAorICogXHBhcmFtIGNsaWVudF9pcCBXaWxsIGNvbnRhaW4gdGhlIGNsaWVudCBJUCBhZGRyZXNzCisgKiBccGFyYW0gYnVmX3NpemUgIFNpemUgb2YgdGhlIGNsaWVudF9pcCBidWZmZXIKKyAqIFxwYXJhbSBpcF9sZW4gICAgV2lsbCByZWNlaXZlIHRoZSBzaXplIG9mIHRoZSBjbGllbnQgSVAgd3JpdHRlbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCwgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTkVUX0JVRkZFUl9UT09fU01BTEwgaWYgYnVmX3NpemUgaXMgdG9vIHNtYWxsLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIGlmIGJpbmRfZmQgd2FzIHNldCB0bworICogICAgICAgICAgICAgICAgICBub24tYmxvY2tpbmcgYW5kIGFjY2VwdCgpIHdvdWxkIGJsb2NrLgorICovCitpbnQgbWJlZHRsc19uZXRfYWNjZXB0KCBtYmVkdGxzX25ldF9jb250ZXh0ICpiaW5kX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgKmNsaWVudF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRfaXAsIHNpemVfdCBidWZfc2l6ZSwgc2l6ZV90ICppcF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBzb2NrZXQgYmxvY2tpbmcKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU29ja2V0IHRvIHNldAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbm9uLXplcm8gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19uZXRfc2V0X2Jsb2NrKCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBzb2NrZXQgbm9uLWJsb2NraW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNvY2tldCB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5vbi16ZXJvIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfbmV0X3NldF9ub25ibG9jayggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBvcnRhYmxlIHVzbGVlcCBoZWxwZXIKKyAqCisgKiBccGFyYW0gdXNlYyAgICAgQW1vdW50IG9mIG1pY3Jvc2Vjb25kcyB0byBzbGVlcAorICoKKyAqIFxub3RlICAgICAgICAgICBSZWFsIGFtb3VudCBvZiB0aW1lIHNsZXB0IHdpbGwgbm90IGJlIGxlc3MgdGhhbgorICogICAgICAgICAgICAgICAgIHNlbGVjdCgpJ3MgdGltZW91dCBncmFudWxhcml0eSAodHlwaWNhbGx5LCAxMG1zKS4KKyAqLwordm9pZCBtYmVkdGxzX25ldF91c2xlZXAoIHVuc2lnbmVkIGxvbmcgdXNlYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZWFkIGF0IG1vc3QgJ2xlbicgY2hhcmFjdGVycy4gSWYgbm8gZXJyb3Igb2NjdXJzLAorICogICAgICAgICAgICAgICAgIHRoZSBhY3R1YWwgYW1vdW50IHJlYWQgaXMgcmV0dXJuZWQuCisgKgorICogXHBhcmFtIGN0eCAgICAgIFNvY2tldAorICogXHBhcmFtIGJ1ZiAgICAgIFRoZSBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBsZW4gICAgICBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsCisgKiAgICAgICAgICAgICAgICAgb3IgYSBub24temVybyBlcnJvciBjb2RlOyB3aXRoIGEgbm9uLWJsb2NraW5nIHNvY2tldCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIGluZGljYXRlcyByZWFkKCkgd291bGQgYmxvY2suCisgKi8KK2ludCBtYmVkdGxzX25ldF9yZWN2KCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBXcml0ZSBhdCBtb3N0ICdsZW4nIGNoYXJhY3RlcnMuIElmIG5vIGVycm9yIG9jY3VycywKKyAqICAgICAgICAgICAgICAgICB0aGUgYWN0dWFsIGFtb3VudCByZWFkIGlzIHJldHVybmVkLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBTb2NrZXQKKyAqIFxwYXJhbSBidWYgICAgICBUaGUgYnVmZmVyIHRvIHJlYWQgZnJvbQorICogXHBhcmFtIGxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQsCisgKiAgICAgICAgICAgICAgICAgb3IgYSBub24temVybyBlcnJvciBjb2RlOyB3aXRoIGEgbm9uLWJsb2NraW5nIHNvY2tldCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSBpbmRpY2F0ZXMgd3JpdGUoKSB3b3VsZCBibG9jay4KKyAqLworaW50IG1iZWR0bHNfbmV0X3NlbmQoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJlYWQgYXQgbW9zdCAnbGVuJyBjaGFyYWN0ZXJzLCBibG9ja2luZyBmb3IgYXQgbW9zdAorICogICAgICAgICAgICAgICAgICd0aW1lb3V0JyBzZWNvbmRzLiBJZiBubyBlcnJvciBvY2N1cnMsIHRoZSBhY3R1YWwgYW1vdW50CisgKiAgICAgICAgICAgICAgICAgcmVhZCBpcyByZXR1cm5lZC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU29ja2V0CisgKiBccGFyYW0gYnVmICAgICAgVGhlIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIGxlbiAgICAgIE1heGltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSB0aW1lb3V0ICBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgZGF0YQorICogICAgICAgICAgICAgICAgIDAgbWVhbnMgbm8gdGltZW91dCAod2FpdCBmb3JldmVyKQorICoKKyAqIFxyZXR1cm4gICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLAorICogICAgICAgICAgICAgICAgIG9yIGEgbm9uLXplcm8gZXJyb3IgY29kZToKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfVElNRU9VVCBpZiB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIGlmIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgKHVudGlsIGRhdGEgYmVjb21lcyBhdmFpbGFibGUgb3IKKyAqICAgICAgICAgICAgICAgICB0aW1lb3V0IGlzIHJlYWNoZWQpIGV2ZW4gaWYgdGhlIHNvY2tldCBpcyBzZXQgdG8KKyAqICAgICAgICAgICAgICAgICBub24tYmxvY2tpbmcuIEhhbmRsaW5nIHRpbWVvdXRzIHdpdGggbm9uLWJsb2NraW5nIHJlYWRzCisgKiAgICAgICAgICAgICAgICAgcmVxdWlyZXMgYSBkaWZmZXJlbnQgc3RyYXRlZ3kuCisgKi8KK2ludCBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRpbWVvdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR3JhY2VmdWxseSBzaHV0ZG93biB0aGUgY29ubmVjdGlvbiBhbmQgZnJlZSBhc3NvY2lhdGVkIGRhdGEKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgVGhlIGNvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfbmV0X2ZyZWUoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbmV0X3NvY2tldHMuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9vaWQuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvb2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlY2RhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvb2lkLmgKQEAgLTAsMCArMSw1NzAgQEAKKy8qKgorICogXGZpbGUgb2lkLmgKKyAqCisgKiBcYnJpZWYgT2JqZWN0IElkZW50aWZpZXIgKE9JRCkgZGF0YWJhc2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19PSURfSAorI2RlZmluZSBNQkVEVExTX09JRF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAiYXNuMS5oIgorI2luY2x1ZGUgInBrLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisjaW5jbHVkZSAibWQuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpIHx8IGRlZmluZWQoTUJFRFRMU19YNTA5X0NSRUFURV9DKQorI2luY2x1ZGUgIng1MDkuaCIKKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgLTB4MDAyRSAgLyoqPCBPSUQgaXMgbm90IGZvdW5kLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgIC0weDAwMEIgIC8qKjwgb3V0cHV0IGJ1ZmZlciBpcyB0b28gc21hbGwgKi8KKworLyoKKyAqIFRvcCBsZXZlbCBPSUQgdHVwbGVzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfSVNPX01FTUJFUl9CT0RJRVMgICAgICAgICAgICJceDJhIiAgICAgICAgICAvKiB7aXNvKDEpIG1lbWJlci1ib2R5KDIpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9JU09fSURFTlRJRklFRF9PUkcgICAgICAgICAgIlx4MmIiICAgICAgICAgIC8qIHtpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMyl9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0lTT19DQ0lUVF9EUyAgICAgICAgICAgICAgICAiXHg1NSIgICAgICAgICAgLyoge2pvaW50LWlzby1jY2l0dCgyKSBkcyg1KX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfSVNPX0lUVV9DT1VOVFJZICAgICAgICAgICAgICJceDYwIiAgICAgICAgICAvKiB7am9pbnQtaXNvLWl0dS10KDIpIGNvdW50cnkoMTYpfSAqLworCisvKgorICogSVNPIE1lbWJlciBib2RpZXMgT0lEIHBhcnRzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQ09VTlRSWV9VUyAgICAgICAgICAgICAgICAgICJceDg2XHg0OCIgICAgICAvKiB7dXMoODQwKX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfT1JHX1JTQV9EQVRBX1NFQ1VSSVRZICAgICAgICJceDg2XHhmN1x4MGQiICAvKiB7cnNhZHNpKDExMzU0OSl9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JU09fTUVNQkVSX0JPRElFUyBNQkVEVExTX09JRF9DT1VOVFJZX1VTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9PUkdfUlNBX0RBVEFfU0VDVVJJVFkgLyoge2lzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9PUkdfQU5TSV9YOV82MiAgICAgICAgICAgICAgIlx4Y2VceDNkIiAvKiBhbnNpLVg5LTYyKDEwMDQ1KSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BTlNJX1g5XzYyICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX01FTUJFUl9CT0RJRVMgTUJFRFRMU19PSURfQ09VTlRSWV9VUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfT1JHX0FOU0lfWDlfNjIKKworLyoKKyAqIElTTyBJZGVudGlmaWVkIG9yZ2FuaXphdGlvbiBPSUQgcGFydHMKKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9PUkdfRE9EICAgICAgICAgICAgICAgICAgICAgIlx4MDYiICAgICAgICAgIC8qIHtkb2QoNil9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR19PSVcgICAgICAgICAgICAgICAgICAgICAiXHgwZSIKKyNkZWZpbmUgTUJFRFRMU19PSURfT0lXX1NFQ1NJRyAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX09SR19PSVcgIlx4MDMiCisjZGVmaW5lIE1CRURUTFNfT0lEX09JV19TRUNTSUdfQUxHICAgICAgICAgICAgICBNQkVEVExTX09JRF9PSVdfU0VDU0lHICJceDAyIgorI2RlZmluZSBNQkVEVExTX09JRF9PSVdfU0VDU0lHX1NIQTEgICAgICAgICAgICAgTUJFRFRMU19PSURfT0lXX1NFQ1NJR19BTEcgIlx4MWEiCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR19DRVJUSUNPTSAgICAgICAgICAgICAgICAiXHg4MVx4MDQiICAvKiBjZXJ0aWNvbSgxMzIpICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0NFUlRJQ09NICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JU09fSURFTlRJRklFRF9PUkcgTUJFRFRMU19PSURfT1JHX0NFUlRJQ09NCisjZGVmaW5lIE1CRURUTFNfT0lEX09SR19URUxFVFJVU1QgICAgICAgICAgICAgICAiXHgyNCIgLyogdGVsZXRydXN0KDM2KSAqLworI2RlZmluZSBNQkVEVExTX09JRF9URUxFVFJVU1QgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHIE1CRURUTFNfT0lEX09SR19URUxFVFJVU1QKKworLyoKKyAqIElTTyBJVFUgT0lEIHBhcnRzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfT1JHQU5JWkFUSU9OICAgICAgICAgICAgICAgICJceDAxIiAgICAgICAgICAvKiB7b3JnYW5pemF0aW9uKDEpfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9JU09fSVRVX1VTX09SRyAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lUVV9DT1VOVFJZIE1CRURUTFNfT0lEX0NPVU5UUllfVVMgTUJFRFRMU19PSURfT1JHQU5JWkFUSU9OIC8qIHtqb2ludC1pc28taXR1LXQoMikgY291bnRyeSgxNikgdXMoODQwKSBvcmdhbml6YXRpb24oMSl9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfT1JHX0dPViAgICAgICAgICAgICAgICAgICAgICJceDY1IiAgICAgICAgICAvKiB7Z292KDEwMSl9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0dPViAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JU09fSVRVX1VTX09SRyBNQkVEVExTX09JRF9PUkdfR09WIC8qIHtqb2ludC1pc28taXR1LXQoMikgY291bnRyeSgxNikgdXMoODQwKSBvcmdhbml6YXRpb24oMSkgZ292KDEwMSl9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfT1JHX05FVFNDQVBFICAgICAgICAgICAgICAgICJceDg2XHhGOFx4NDIiICAvKiB7bmV0c2NhcGUoMTEzNzMwKX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfTkVUU0NBUEUgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19JVFVfVVNfT1JHIE1CRURUTFNfT0lEX09SR19ORVRTQ0FQRSAvKiBOZXRzY2FwZSBPSUQge2pvaW50LWlzby1pdHUtdCgyKSBjb3VudHJ5KDE2KSB1cyg4NDApIG9yZ2FuaXphdGlvbigxKSBuZXRzY2FwZSgxMTM3MzApfSAqLworCisvKiBJU08gYXJjIGZvciBzdGFuZGFyZCBjZXJ0aWZpY2F0ZSBhbmQgQ1JMIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfSURfQ0UgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lTT19DQ0lUVF9EUyAiXHgxRCIgLyoqPCBpZC1jZSBPQkpFQ1QgSURFTlRJRklFUiAgOjo9ICB7am9pbnQtaXNvLWNjaXR0KDIpIGRzKDUpIDI5fSAqLworCisvKioKKyAqIFByaXZhdGUgSW50ZXJuZXQgRXh0ZW5zaW9ucworICogeyBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgZG9kKDYpIGludGVybmV0KDEpCisgKiAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eSg1KSBtZWNoYW5pc21zKDUpIHBraXgoNykgfQorICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLSVggICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JU09fSURFTlRJRklFRF9PUkcgTUJFRFRMU19PSURfT1JHX0RPRCAiXHgwMVx4MDVceDA1XHgwNyIKKworLyoKKyAqIEFyYyBmb3Igc3RhbmRhcmQgbmFtaW5nIGF0dHJpYnV0ZXMKKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0NDSVRUX0RTICJceDA0IiAvKio8IGlkLWF0IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7am9pbnQtaXNvLWNjaXR0KDIpIGRzKDUpIDR9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0NOICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgwMyIgLyoqPCBpZC1hdC1jb21tb25OYW1lIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgM30gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfU1VSX05BTUUgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDA0IiAvKio8IGlkLWF0LXN1ck5hbWUgQXR0cmlidXRlVHlwZTo9IHtpZC1hdCA0fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9BVF9TRVJJQUxfTlVNQkVSICAgICAgICAgICAgTUJFRFRMU19PSURfQVQgIlx4MDUiIC8qKjwgaWQtYXQtc2VyaWFsTnVtYmVyIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfQ09VTlRSWSAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDA2IiAvKio8IGlkLWF0LWNvdW50cnlOYW1lIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNn0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfTE9DQUxJVFkgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDA3IiAvKio8IGlkLWF0LWxvY2FsaXR5IEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgN30gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfU1RBVEUgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDA4IiAvKio8IGlkLWF0LXN0YXRlIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgOH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfT1JHQU5JWkFUSU9OICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDBBIiAvKio8IGlkLWF0LW9yZ2FuaXphdGlvbk5hbWUgQXR0cmlidXRlVHlwZTo9IHtpZC1hdCAxMH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfT1JHX1VOSVQgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDBCIiAvKio8IGlkLWF0LW9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgQXR0cmlidXRlVHlwZTo9IHtpZC1hdCAxMX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfVElUTEUgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDBDIiAvKio8IGlkLWF0LXRpdGxlIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgMTJ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9BRERSRVNTICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgxMCIgLyoqPCBpZC1hdC1wb3N0YWxBZGRyZXNzIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgMTZ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9DT0RFICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgxMSIgLyoqPCBpZC1hdC1wb3N0YWxDb2RlIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgMTd9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0dJVkVOX05BTUUgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgyQSIgLyoqPCBpZC1hdC1naXZlbk5hbWUgQXR0cmlidXRlVHlwZTo9IHtpZC1hdCA0Mn0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfSU5JVElBTFMgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDJCIiAvKio8IGlkLWF0LWluaXRpYWxzIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNDN9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX0dFTkVSQVRJT05fUVVBTElGSUVSICAgICBNQkVEVExTX09JRF9BVCAiXHgyQyIgLyoqPCBpZC1hdC1nZW5lcmF0aW9uUXVhbGlmaWVyIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNDR9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1VOSVFVRV9JREVOVElGSUVSICAgICAgICBNQkVEVExTX09JRF9BVCAiXHgyRCIgLyoqPCBpZC1hdC11bmlxdWVJZGVudGlmaWVyIEF0dHJpYnV0VHlwZTo9IHtpZC1hdCA0NX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVRfRE5fUVVBTElGSUVSICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUICJceDJFIiAvKio8IGlkLWF0LWRuUXVhbGlmaWVyIEF0dHJpYnV0ZVR5cGU6PSB7aWQtYXQgNDZ9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FUX1BTRVVET05ZTSAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVCAiXHg0MSIgLyoqPCBpZC1hdC1wc2V1ZG9ueW0gQXR0cmlidXRlVHlwZTo9IHtpZC1hdCA2NX0gKi8KKworI2RlZmluZSBNQkVEVExTX09JRF9ET01BSU5fQ09NUE9ORU5UICAgICAgICAgICAgIlx4MDlceDkyXHgyNlx4ODlceDkzXHhGMlx4MkNceDY0XHgwMVx4MTkiIC8qKiBpZC1kb21haW5Db21wb25lbnQgQXR0cmlidXRlVHlwZTo9IHtpdHUtdCgwKSBkYXRhKDkpIHBzcygyMzQyKSB1Y2woMTkyMDAzMDApIHBpbG90KDEwMCkgcGlsb3RBdHRyaWJ1dGVUeXBlKDEpIGRvbWFpbkNvbXBvbmVudCgyNSl9ICovCisKKy8qCisgKiBPSURzIGZvciBzdGFuZGFyZCBjZXJ0aWZpY2F0ZSBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDIzIiAvKio8IGlkLWNlLWF1dGhvcml0eUtleUlkZW50aWZpZXIgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDM1IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfU1VCSkVDVF9LRVlfSURFTlRJRklFUiAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDBFIiAvKio8IGlkLWNlLXN1YmplY3RLZXlJZGVudGlmaWVyIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAxNCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0tFWV9VU0FHRSAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgwRiIgLyoqPCBpZC1jZS1rZXlVc2FnZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMTUgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9DRVJUSUZJQ0FURV9QT0xJQ0lFUyAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MjAiIC8qKjwgaWQtY2UtY2VydGlmaWNhdGVQb2xpY2llcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgMzIgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QT0xJQ1lfTUFQUElOR1MgICAgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MjEiIC8qKjwgaWQtY2UtcG9saWN5TWFwcGluZ3MgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDMzIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfU1VCSkVDVF9BTFRfTkFNRSAgICAgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDExIiAvKio8IGlkLWNlLXN1YmplY3RBbHROYW1lIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAxNyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0lTU1VFUl9BTFRfTkFNRSAgICAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgxMiIgLyoqPCBpZC1jZS1pc3N1ZXJBbHROYW1lIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAxOCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgwOSIgLyoqPCBpZC1jZS1zdWJqZWN0RGlyZWN0b3J5QXR0cmlidXRlcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0gIHsgaWQtY2UgOSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0JBU0lDX0NPTlNUUkFJTlRTICAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgxMyIgLyoqPCBpZC1jZS1iYXNpY0NvbnN0cmFpbnRzIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAxOSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX05BTUVfQ09OU1RSQUlOVFMgICAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgxRSIgLyoqPCBpZC1jZS1uYW1lQ29uc3RyYWludHMgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDMwIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUE9MSUNZX0NPTlNUUkFJTlRTICAgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDI0IiAvKio8IGlkLWNlLXBvbGljeUNvbnN0cmFpbnRzIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSAzNiB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VYVEVOREVEX0tFWV9VU0FHRSAgICAgICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgyNSIgLyoqPCBpZC1jZS1leHRLZXlVc2FnZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1jZSAzNyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTICAgICBNQkVEVExTX09JRF9JRF9DRSAiXHgxRiIgLyoqPCBpZC1jZS1jUkxEaXN0cmlidXRpb25Qb2ludHMgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDMxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfSU5JSElCSVRfQU5ZUE9MSUNZICAgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDM2IiAvKio8IGlkLWNlLWluaGliaXRBbnlQb2xpY3kgT0JKRUNUIElERU5USUZJRVIgOjo9ICB7IGlkLWNlIDU0IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRlJFU0hFU1RfQ1JMICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDJFIiAvKio8IGlkLWNlLWZyZXNoZXN0Q1JMIE9CSkVDVCBJREVOVElGSUVSIDo6PSAgeyBpZC1jZSA0NiB9ICovCisKKy8qCisgKiBOZXRzY2FwZSBjZXJ0aWZpY2F0ZSBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfQ0VSVCAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfTkVUU0NBUEUgIlx4MDEiCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX0NFUlRfVFlQRSAgICAgICAgICAgIE1CRURUTFNfT0lEX05TX0NFUlQgICJceDAxIgorI2RlZmluZSBNQkVEVExTX09JRF9OU19CQVNFX1VSTCAgICAgICAgICAgICBNQkVEVExTX09JRF9OU19DRVJUICAiXHgwMiIKKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfUkVWT0NBVElPTl9VUkwgICAgICAgTUJFRFRMU19PSURfTlNfQ0VSVCAgIlx4MDMiCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX0NBX1JFVk9DQVRJT05fVVJMICAgIE1CRURUTFNfT0lEX05TX0NFUlQgICJceDA0IgorI2RlZmluZSBNQkVEVExTX09JRF9OU19SRU5FV0FMX1VSTCAgICAgICAgICBNQkVEVExTX09JRF9OU19DRVJUICAiXHgwNyIKKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfQ0FfUE9MSUNZX1VSTCAgICAgICAgTUJFRFRMU19PSURfTlNfQ0VSVCAgIlx4MDgiCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX1NTTF9TRVJWRVJfTkFNRSAgICAgIE1CRURUTFNfT0lEX05TX0NFUlQgICJceDBDIgorI2RlZmluZSBNQkVEVExTX09JRF9OU19DT01NRU5UICAgICAgICAgICAgICBNQkVEVExTX09JRF9OU19DRVJUICAiXHgwRCIKKyNkZWZpbmUgTUJFRFRMU19PSURfTlNfREFUQV9UWVBFICAgICAgICAgICAgTUJFRFRMU19PSURfTkVUU0NBUEUgIlx4MDIiCisjZGVmaW5lIE1CRURUTFNfT0lEX05TX0NFUlRfU0VRVUVOQ0UgICAgICAgIE1CRURUTFNfT0lEX05TX0RBVEFfVFlQRSAiXHgwNSIKKworLyoKKyAqIE9JRHMgZm9yIENSTCBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9EICAgIE1CRURUTFNfT0lEX0lEX0NFICJceDEwIgorI2RlZmluZSBNQkVEVExTX09JRF9DUkxfTlVNQkVSICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSURfQ0UgIlx4MTQiIC8qKjwgaWQtY2UtY1JMTnVtYmVyIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWNlIDIwIH0gKi8KKworLyoKKyAqIFguNTA5IHYzIEV4dGVuZGVkIGtleSB1c2FnZSBPSURzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQU5ZX0VYVEVOREVEX0tFWV9VU0FHRSAgICAgIE1CRURUTFNfT0lEX0VYVEVOREVEX0tFWV9VU0FHRSAiXHgwMCIgLyoqPCBhbnlFeHRlbmRlZEtleVVzYWdlIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWNlLWV4dEtleVVzYWdlIDAgfSAqLworCisjZGVmaW5lIE1CRURUTFNfT0lEX0tQICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0lYICJceDAzIiAvKio8IGlkLWtwIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLXBraXggMyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1NFUlZFUl9BVVRIICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9LUCAiXHgwMSIgLyoqPCBpZC1rcC1zZXJ2ZXJBdXRoIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWtwIDEgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9DTElFTlRfQVVUSCAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfS1AgIlx4MDIiIC8qKjwgaWQta3AtY2xpZW50QXV0aCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpZC1rcCAyIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQ09ERV9TSUdOSU5HICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0tQICJceDAzIiAvKio8IGlkLWtwLWNvZGVTaWduaW5nIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWtwIDMgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FTUFJTF9QUk9URUNUSU9OICAgICAgICAgICAgTUJFRFRMU19PSURfS1AgIlx4MDQiIC8qKjwgaWQta3AtZW1haWxQcm90ZWN0aW9uIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWtwIDQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9USU1FX1NUQU1QSU5HICAgICAgICAgICAgICAgTUJFRFRMU19PSURfS1AgIlx4MDgiIC8qKjwgaWQta3AtdGltZVN0YW1waW5nIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWtwIDggfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9PQ1NQX1NJR05JTkcgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfS1AgIlx4MDkiIC8qKjwgaWQta3AtT0NTUFNpZ25pbmcgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaWQta3AgOSB9ICovCisKKy8qCisgKiBQS0NTIGRlZmluaXRpb24gT0lEcworICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUyAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9SU0FfQ09NUEFOWSAiXHgwMSIgLyoqPCBwa2NzIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpIDEgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMSAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MgIlx4MDEiIC8qKjwgcGtjcy0xIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpIHBrY3MoMSkgMSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1ICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUyAiXHgwNSIgLyoqPCBwa2NzLTUgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgcGtjcygxKSA1IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzkgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTICJceDA5IiAvKio8IHBrY3MtOSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSBwa2NzKDEpIDkgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMTIgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MgIlx4MGMiIC8qKjwgcGtjcy0xMiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSBwa2NzKDEpIDEyIH0gKi8KKworLyoKKyAqIFBLQ1MjMSBPSURzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfUlNBICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwMSIgLyoqPCByc2FFbmNyeXB0aW9uIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHBrY3MtMSAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfTUQyICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwMiIgLyoqPCBtZDJXaXRoUlNBRW5jcnlwdGlvbiA6Oj0geyBwa2NzLTEgMiB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxX01ENCAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MDMiIC8qKjwgbWQ0V2l0aFJTQUVuY3J5cHRpb24gOjo9IHsgcGtjcy0xIDMgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMV9NRDUgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDA0IiAvKio8IG1kNVdpdGhSU0FFbmNyeXB0aW9uIDo6PSB7IHBrY3MtMSA0IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfU0hBMSAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwNSIgLyoqPCBzaGExV2l0aFJTQUVuY3J5cHRpb24gOjo9IHsgcGtjcy0xIDUgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMV9TSEEyMjQgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDBlIiAvKio8IHNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIDo6PSB7IHBrY3MtMSAxNCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTI1NiAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MGIiIC8qKjwgc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24gOjo9IHsgcGtjcy0xIDExIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzFfU0hBMzg0ICAgICAgICBNQkVEVExTX09JRF9QS0NTMSAiXHgwYyIgLyoqPCBzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiA6Oj0geyBwa2NzLTEgMTIgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMV9TSEE1MTIgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDBkIiAvKio8IHNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIDo6PSB7IHBrY3MtMSAxMyB9ICovCisKKyNkZWZpbmUgTUJFRFRMU19PSURfUlNBX1NIQV9PQlMgICAgICAgICAiXHgyQlx4MEVceDAzXHgwMlx4MUQiCisKKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzlfRU1BSUwgICAgICAgICBNQkVEVExTX09JRF9QS0NTOSAiXHgwMSIgLyoqPCBlbWFpbEFkZHJlc3MgQXR0cmlidXRlVHlwZSA6Oj0geyBwa2NzLTkgMSB9ICovCisKKy8qIFJGQyA0MDU1ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1JTQVNTQV9QU1MgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzEgIlx4MGEiIC8qKjwgaWQtUlNBU1NBLVBTUyA6Oj0geyBwa2NzLTEgMTAgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9NR0YxICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxICJceDA4IiAvKio8IGlkLW1nZjEgOjo9IHsgcGtjcy0xIDggfSAqLworCisvKgorICogRGlnZXN0IGFsZ29yaXRobXMKKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX01EMiAgICAgICAgICAgICAgTUJFRFRMU19PSURfUlNBX0NPTVBBTlkgIlx4MDJceDAyIiAvKio8IGlkLW1iZWR0bHNfbWQyIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIHJzYWRzaSgxMTM1NDkpIGRpZ2VzdEFsZ29yaXRobSgyKSAyIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDQgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZICJceDAyXHgwNCIgLyoqPCBpZC1tYmVkdGxzX21kNCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSBkaWdlc3RBbGdvcml0aG0oMikgNCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQ1ICAgICAgICAgICAgICBNQkVEVExTX09JRF9SU0FfQ09NUEFOWSAiXHgwMlx4MDUiIC8qKjwgaWQtbWJlZHRsc19tZDUgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgZGlnZXN0QWxnb3JpdGhtKDIpIDUgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTEgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHIE1CRURUTFNfT0lEX09JV19TRUNTSUdfU0hBMSAvKio8IGlkLW1iZWR0bHNfc2hhMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgb2l3KDE0KSBzZWNzaWcoMykgYWxnb3JpdGhtcygyKSAyNiB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMjI0ICAgICAgICAgICBNQkVEVExTX09JRF9HT1YgIlx4MDNceDA0XHgwMlx4MDQiIC8qKjwgaWQtc2hhMjI0IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGpvaW50LWlzby1pdHUtdCgyKSBjb3VudHJ5KDE2KSB1cyg4NDApIG9yZ2FuaXphdGlvbigxKSBnb3YoMTAxKSBjc29yKDMpIG5pc3RhbGdvcml0aG0oNCkgaGFzaGFsZ3MoMikgNCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMjU2ICAgICAgICAgICBNQkVEVExTX09JRF9HT1YgIlx4MDNceDA0XHgwMlx4MDEiIC8qKjwgaWQtbWJlZHRsc19zaGEyNTYgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgam9pbnQtaXNvLWl0dS10KDIpIGNvdW50cnkoMTYpIHVzKDg0MCkgb3JnYW5pemF0aW9uKDEpIGdvdigxMDEpIGNzb3IoMykgbmlzdGFsZ29yaXRobSg0KSBoYXNoYWxncygyKSAxIH0gKi8KKworI2RlZmluZSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTM4NCAgICAgICAgICAgTUJFRFRMU19PSURfR09WICJceDAzXHgwNFx4MDJceDAyIiAvKio8IGlkLXNoYTM4NCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBqb2ludC1pc28taXR1LXQoMikgY291bnRyeSgxNikgdXMoODQwKSBvcmdhbml6YXRpb24oMSkgZ292KDEwMSkgY3NvcigzKSBuaXN0YWxnb3JpdGhtKDQpIGhhc2hhbGdzKDIpIDIgfSAqLworCisjZGVmaW5lIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBNTEyICAgICAgICAgICBNQkVEVExTX09JRF9HT1YgIlx4MDNceDA0XHgwMlx4MDMiIC8qKjwgaWQtbWJlZHRsc19zaGE1MTIgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgam9pbnQtaXNvLWl0dS10KDIpIGNvdW50cnkoMTYpIHVzKDg0MCkgb3JnYW5pemF0aW9uKDEpIGdvdigxMDEpIGNzb3IoMykgbmlzdGFsZ29yaXRobSg0KSBoYXNoYWxncygyKSAzIH0gKi8KKworI2RlZmluZSBNQkVEVExTX09JRF9ITUFDX1NIQTEgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUlNBX0NPTVBBTlkgIlx4MDJceDA3IiAvKio8IGlkLWhtYWNXaXRoU0hBMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSByc2Fkc2koMTEzNTQ5KSBkaWdlc3RBbGdvcml0aG0oMikgNyB9ICovCisKKy8qCisgKiBFbmNyeXB0aW9uIGFsZ29yaXRobXMKKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9ERVNfQ0JDICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfSVNPX0lERU5USUZJRURfT1JHIE1CRURUTFNfT0lEX09JV19TRUNTSUdfQUxHICJceDA3IiAvKio8IGRlc0NCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgb2l3KDE0KSBzZWNzaWcoMykgYWxnb3JpdGhtcygyKSA3IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfREVTX0VERTNfQ0JDICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1JTQV9DT01QQU5ZICJceDAzXHgwNyIgLyoqPCBkZXMtZWRlMy1jYmMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaXNvKDEpIG1lbWJlci1ib2R5KDIpIC0tIHVzKDg0MCkgcnNhZHNpKDExMzU0OSkgZW5jcnlwdGlvbkFsZ29yaXRobSgzKSA3IH0gKi8KKworLyoKKyAqIFBLQ1MjNSBPSURzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJLREYyICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDBjIiAvKio8IGlkLVBCS0RGMiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSAxMn0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJFUzIgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDBkIiAvKio8IGlkLVBCRVMyIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy01IDEzfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTNV9QQk1BQzEgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzUgIlx4MGUiIC8qKjwgaWQtUEJNQUMxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy01IDE0fSAqLworCisvKgorICogUEtDUyM1IFBCRVMxIGFsZ29yaXRobXMKKyAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQyX0RFU19DQkMgICAgICAgTUJFRFRMU19PSURfUEtDUzUgIlx4MDEiIC8qKjwgcGJlV2l0aE1EMkFuZERFUy1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTUgMX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJFX01EMl9SQzJfQ0JDICAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDA0IiAvKio8IHBiZVdpdGhNRDJBbmRSQzItQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy01IDR9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9NRDVfREVTX0NCQyAgICAgICBNQkVEVExTX09JRF9QS0NTNSAiXHgwMyIgLyoqPCBwYmVXaXRoTUQ1QW5kREVTLUNCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSAzfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQ1X1JDMl9DQkMgICAgICAgTUJFRFRMU19PSURfUEtDUzUgIlx4MDYiIC8qKjwgcGJlV2l0aE1ENUFuZFJDMi1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTUgNn0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJFX1NIQTFfREVTX0NCQyAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDBhIiAvKio8IHBiZVdpdGhTSEExQW5kREVTLUNCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSAxMH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzVfUEJFX1NIQTFfUkMyX0NCQyAgICAgIE1CRURUTFNfT0lEX1BLQ1M1ICJceDBiIiAvKio8IHBiZVdpdGhTSEExQW5kUkMyLUNCQyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtNSAxMX0gKi8KKworLyoKKyAqIFBLQ1MjOCBPSURzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzlfQ1NSX0VYVF9SRVEgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1M5ICJceDBlIiAvKio8IGV4dGVuc2lvblJlcXVlc3QgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTkgMTR9ICovCisKKy8qCisgKiBQS0NTIzEyIFBCRSBPSURzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEyX1BCRSAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMTIgIlx4MDEiIC8qKjwgcGtjcy0xMlBiZUlkcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtMTIgMX0gKi8KKworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkM0XzEyOCAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUgIlx4MDEiIC8qKjwgcGJlV2l0aFNIQUFuZDEyOEJpdFJDNCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtMTJQYmVJZHMgMX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDNF80MCAgICAgICAgICBNQkVEVExTX09JRF9QS0NTMTJfUEJFICJceDAyIiAvKio8IHBiZVdpdGhTSEFBbmQ0MEJpdFJDNCBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3BrY3MtMTJQYmVJZHMgMn0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX0RFUzNfRURFX0NCQyAgICBNQkVEVExTX09JRF9QS0NTMTJfUEJFICJceDAzIiAvKio8IHBiZVdpdGhTSEFBbmQzLUtleVRyaXBsZURFUy1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTEyUGJlSWRzIDN9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMyX0VERV9DQkMgICAgTUJFRFRMU19PSURfUEtDUzEyX1BCRSAiXHgwNCIgLyoqPCBwYmVXaXRoU0hBQW5kMi1LZXlUcmlwbGVERVMtQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy0xMlBiZUlkcyA0fSAqLworI2RlZmluZSBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzEyOF9DQkMgICAgIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkUgIlx4MDUiIC8qKjwgcGJlV2l0aFNIQUFuZDEyOEJpdFJDMi1DQkMgT0JKRUNUIElERU5USUZJRVIgOjo9IHtwa2NzLTEyUGJlSWRzIDV9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzJfNDBfQ0JDICAgICAgTUJFRFRMU19PSURfUEtDUzEyX1BCRSAiXHgwNiIgLyoqPCBwYmVXaXRoU0hBQW5kNDBCaXRSQzItQ0JDIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7cGtjcy0xMlBiZUlkcyA2fSAqLworCisvKgorICogRUMga2V5IGFsZ29yaXRobXMgZnJvbSBSRkMgNTQ4MAorICovCisKKy8qIGlkLWVjUHVibGljS2V5IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSBhbnNpLVg5LTYyKDEwMDQ1KSBrZXlUeXBlKDIpIDEgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19BTEdfVU5SRVNUUklDVEVEICAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82MiAiXHgwMlwwMSIKKworLyogICBpZC1lY0RIIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgICAgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGNlcnRpY29tKDEzMikKKyAqICAgICBzY2hlbWVzKDEpIGVjZGgoMTIpIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfQUxHX0VDREggICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0NFUlRJQ09NICJceDAxXHgwYyIKKworLyoKKyAqIEVDUGFyYW1ldGVycyBuYW1lZEN1cnZlIGlkZW50aWZpZXJzLCBmcm9tIFJGQyA1NDgwLCBSRkMgNTYzOSwgYW5kIFNFQzIKKyAqLworCisvKiBzZWNwMTkycjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgYW5zaS1YOS02MigxMDA0NSkgY3VydmVzKDMpIHByaW1lKDEpIDEgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDE5MlIxICAgICAgICBNQkVEVExTX09JRF9BTlNJX1g5XzYyICJceDAzXHgwMVx4MDEiCisKKy8qIHNlY3AyMjRyMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgY2VydGljb20oMTMyKSBjdXJ2ZSgwKSAzMyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjI0UjEgICAgICAgIE1CRURUTFNfT0lEX0NFUlRJQ09NICJceDAwXHgyMSIKKworLyogc2VjcDI1NnIxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIGFuc2ktWDktNjIoMTAwNDUpIGN1cnZlcygzKSBwcmltZSgxKSA3IH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyNTZSMSAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82MiAiXHgwM1x4MDFceDA3IgorCisvKiBzZWNwMzg0cjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGNlcnRpY29tKDEzMikgY3VydmUoMCkgMzQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDM4NFIxICAgICAgICBNQkVEVExTX09JRF9DRVJUSUNPTSAiXHgwMFx4MjIiCisKKy8qIHNlY3A1MjFyMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgY2VydGljb20oMTMyKSBjdXJ2ZSgwKSAzNSB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQNTIxUjEgICAgICAgIE1CRURUTFNfT0lEX0NFUlRJQ09NICJceDAwXHgyMyIKKworLyogc2VjcDE5MmsxIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbigzKSBjZXJ0aWNvbSgxMzIpIGN1cnZlKDApIDMxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AxOTJLMSAgICAgICAgTUJFRFRMU19PSURfQ0VSVElDT00gIlx4MDBceDFmIgorCisvKiBzZWNwMjI0azEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIGlkZW50aWZpZWQtb3JnYW5pemF0aW9uKDMpIGNlcnRpY29tKDEzMikgY3VydmUoMCkgMzIgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNEsxICAgICAgICBNQkVEVExTX09JRF9DRVJUSUNPTSAiXHgwMFx4MjAiCisKKy8qIHNlY3AyNTZrMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgY2VydGljb20oMTMyKSBjdXJ2ZSgwKSAxMCB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2SzEgICAgICAgIE1CRURUTFNfT0lEX0NFUlRJQ09NICJceDAwXHgwYSIKKworLyogUkZDIDU2MzkgNC4xCisgKiBlY1N0ZEN1cnZlc0FuZEdlbmVyYXRpb24gT0JKRUNUIElERU5USUZJRVI6Oj0ge2lzbygxKQorICogaWRlbnRpZmllZC1vcmdhbml6YXRpb24oMykgdGVsZXRydXN0KDM2KSBhbGdvcml0aG0oMykgc2lnbmF0dXJlLQorICogYWxnb3JpdGhtKDMpIGVjU2lnbigyKSA4fQorICogZWxsaXB0aWNDdXJ2ZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge2VjU3RkQ3VydmVzQW5kR2VuZXJhdGlvbiAxfQorICogdmVyc2lvbk9uZSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge2VsbGlwdGljQ3VydmUgMX0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfQlJBSU5QT09MX1YxICAgICAgICAgTUJFRFRMU19PSURfVEVMRVRSVVNUICJceDAzXHgwM1x4MDJceDA4XHgwMVx4MDEiCisKKy8qIGJyYWlucG9vbFAyNTZyMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3ZlcnNpb25PbmUgN30gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNfR1JQX0JQMjU2UjEgICAgICAgICAgTUJFRFRMU19PSURfRUNfQlJBSU5QT09MX1YxICJceDA3IgorCisvKiBicmFpbnBvb2xQMzg0cjEgT0JKRUNUIElERU5USUZJRVIgOjo9IHt2ZXJzaW9uT25lIDExfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ19HUlBfQlAzODRSMSAgICAgICAgICBNQkVEVExTX09JRF9FQ19CUkFJTlBPT0xfVjEgIlx4MEIiCisKKy8qIGJyYWlucG9vbFA1MTJyMSBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge3ZlcnNpb25PbmUgMTN9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDX0dSUF9CUDUxMlIxICAgICAgICAgIE1CRURUTFNfT0lEX0VDX0JSQUlOUE9PTF9WMSAiXHgwRCIKKworLyoKKyAqIFNFQzEgQy4xCisgKgorICogcHJpbWUtZmllbGQgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgaWQtZmllbGRUeXBlIDEgfQorICogaWQtZmllbGRUeXBlIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGFuc2ktWDktNjIgZmllbGRUeXBlKDEpfQorICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfRklFTERfVFlQRSAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjIgIlx4MDEiCisjZGVmaW5lIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfUFJJTUVfRklFTEQgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfRklFTERfVFlQRSAiXHgwMSIKKworLyoKKyAqIEVDRFNBIHNpZ25hdHVyZSBpZGVudGlmaWVycywgZnJvbSBSRkMgNTQ4MAorICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHICAgICAgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjIgIlx4MDQiIC8qIHNpZ25hdHVyZXMoNCkgKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUdfU0hBMiAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUcgIlx4MDMiIC8qIGVjZHNhLXdpdGgtU0hBMigzKSAqLworCisvKiBlY2RzYS13aXRoLVNIQTEgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgYW5zaS1YOS02MigxMDA0NSkgc2lnbmF0dXJlcyg0KSAxIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNEU0FfU0hBMSAgICAgICAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUcgIlx4MDEiCisKKy8qIGVjZHNhLXdpdGgtU0hBMjI0IE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIGFuc2ktWDktNjIoMTAwNDUpIHNpZ25hdHVyZXMoNCkKKyAqICAgZWNkc2Etd2l0aC1TSEEyKDMpIDEgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ0RTQV9TSEEyMjQgICAgICAgICAgICBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJR19TSEEyICJceDAxIgorCisvKiBlY2RzYS13aXRoLVNIQTI1NiBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geworICogICBpc28oMSkgbWVtYmVyLWJvZHkoMikgdXMoODQwKSBhbnNpLVg5LTYyKDEwMDQ1KSBzaWduYXR1cmVzKDQpCisgKiAgIGVjZHNhLXdpdGgtU0hBMigzKSAyIH0gKi8KKyNkZWZpbmUgTUJFRFRMU19PSURfRUNEU0FfU0hBMjU2ICAgICAgICAgICAgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUdfU0hBMiAiXHgwMiIKKworLyogZWNkc2Etd2l0aC1TSEEzODQgT0JKRUNUIElERU5USUZJRVIgOjo9IHsKKyAqICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIHVzKDg0MCkgYW5zaS1YOS02MigxMDA0NSkgc2lnbmF0dXJlcyg0KQorICogICBlY2RzYS13aXRoLVNIQTIoMykgMyB9ICovCisjZGVmaW5lIE1CRURUTFNfT0lEX0VDRFNBX1NIQTM4NCAgICAgICAgICAgIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHX1NIQTIgIlx4MDMiCisKKy8qIGVjZHNhLXdpdGgtU0hBNTEyIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7CisgKiAgIGlzbygxKSBtZW1iZXItYm9keSgyKSB1cyg4NDApIGFuc2ktWDktNjIoMTAwNDUpIHNpZ25hdHVyZXMoNCkKKyAqICAgZWNkc2Etd2l0aC1TSEEyKDMpIDQgfSAqLworI2RlZmluZSBNQkVEVExTX09JRF9FQ0RTQV9TSEE1MTIgICAgICAgICAgICBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1NJR19TSEEyICJceDA0IgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmIEJhc2UgT0lEIGRlc2NyaXB0b3Igc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICphc24xOyAgICAgICAgICAgICAgIC8qITwgT0lEIEFTTi4xIHJlcHJlc2VudGF0aW9uICAgICAgICovCisgICAgc2l6ZV90IGFzbjFfbGVuOyAgICAgICAgICAgICAgICAvKiE8IGxlbmd0aCBvZiBhc24xICAgICAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgLyohPCBvZmZpY2lhbCBuYW1lIChlLmcuIGZyb20gUkZDKSAgKi8KKyAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbjsgICAgICAgIC8qITwgaHVtYW4gZnJpZW5kbHkgZGVzY3JpcHRpb24gICAgICovCit9IG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFRyYW5zbGF0ZSBhbiBBU04uMSBPSUQgaW50byBpdHMgbnVtZXJpYyByZXByZXNlbnRhdGlvbgorICogICAgICAgICAgICAgICAgICAoZS5nLiAiXHgyQVx4ODZceDQ4XHg4Nlx4RjdceDBEIiBpbnRvICIxLjIuODQwLjExMzU0OSIpCisgKgorICogXHBhcmFtIGJ1ZiAgICAgICBidWZmZXIgdG8gcHV0IHJlcHJlc2VudGF0aW9uIGluCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIG9pZCAgICAgICBPSUQgdG8gdHJhbnNsYXRlCisgKgorICogXHJldHVybiAgICAgICAgICBMZW5ndGggb2YgdGhlIHN0cmluZyB3cml0dGVuIChleGNsdWRpbmcgZmluYWwgTlVMTCkgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfT0lEX0JVRl9UT09fU01BTEwgaW4gY2FzZSBvZiBlcnJvcgorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X251bWVyaWNfc3RyaW5nKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBhbiBYLjUwOSBleHRlbnNpb24gT0lEIGludG8gbG9jYWwgdmFsdWVzCisgKgorICogXHBhcmFtIG9pZCAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBleHRfdHlwZSBwbGFjZSB0byBzdG9yZSB0aGUgZXh0ZW5zaW9uIHR5cGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfeDUwOV9leHRfdHlwZSggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLCBpbnQgKmV4dF90eXBlICk7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIGFuIFguNTA5IGF0dHJpYnV0ZSB0eXBlIE9JRCBpbnRvIHRoZSBzaG9ydCBuYW1lCisgKiAgICAgICAgICAgICAgICAgKGUuZy4gdGhlIE9JRCBmb3IgYW4gWDUyMCBDb21tb24gTmFtZSBpbnRvICJDTiIpCisgKgorICogXHBhcmFtIG9pZCAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBzaG9ydF9uYW1lICAgIHBsYWNlIHRvIHN0b3JlIHRoZSBzdHJpbmcgcG9pbnRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9hdHRyX3Nob3J0X25hbWUoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgY29uc3QgY2hhciAqKnNob3J0X25hbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIFB1YmxpY0tleUFsZ29yaXRobSBPSUQgaW50byBwa190eXBlCisgKgorICogXHBhcmFtIG9pZCAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBwa19hbGcgICBwbGFjZSB0byBzdG9yZSBwdWJsaWMga2V5IGFsZ29yaXRobQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9wa19hbGcoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgbWJlZHRsc19wa190eXBlX3QgKnBrX2FsZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgcGtfdHlwZSBpbnRvIFB1YmxpY0tleUFsZ29yaXRobSBPSUQKKyAqCisgKiBccGFyYW0gcGtfYWxnICAgUHVibGljIGtleSB0eXBlIHRvIGxvb2sgZm9yCisgKiBccGFyYW0gb2lkICAgICAgcGxhY2UgdG8gc3RvcmUgQVNOLjEgT0lEIHN0cmluZyBwb2ludGVyCisgKiBccGFyYW0gb2xlbiAgICAgbGVuZ3RoIG9mIHRoZSBPSUQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3BrX2FsZyggbWJlZHRsc19wa190eXBlX3QgcGtfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKm9pZCwgc2l6ZV90ICpvbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgTmFtZWRDdXJ2ZSBPSUQgaW50byBhbiBFQyBncm91cCBpZGVudGlmaWVyCisgKgorICogXHBhcmFtIG9pZCAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBncnBfaWQgICBwbGFjZSB0byBzdG9yZSBncm91cCBpZAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9lY19ncnAoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmdycF9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgRUMgZ3JvdXAgaWRlbnRpZmllciBpbnRvIE5hbWVkQ3VydmUgT0lECisgKgorICogXHBhcmFtIGdycF9pZCAgIEVDIGdyb3VwIGlkZW50aWZpZXIKKyAqIFxwYXJhbSBvaWQgICAgICBwbGFjZSB0byBzdG9yZSBBU04uMSBPSUQgc3RyaW5nIHBvaW50ZXIKKyAqIFxwYXJhbSBvbGVuICAgICBsZW5ndGggb2YgdGhlIE9JRAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfZWNfZ3JwKCBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqb2lkLCBzaXplX3QgKm9sZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBTaWduYXR1cmVBbGdvcml0aG0gT0lEIGludG8gbWRfdHlwZSBhbmQgcGtfdHlwZQorICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gbWRfYWxnICAgcGxhY2UgdG8gc3RvcmUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCisgKiBccGFyYW0gcGtfYWxnICAgcGxhY2UgdG8gc3RvcmUgcHVibGljIGtleSBhbGdvcml0aG0KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfc2lnX2FsZyggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgKm1kX2FsZywgbWJlZHRsc19wa190eXBlX3QgKnBrX2FsZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgU2lnbmF0dXJlQWxnb3JpdGhtIE9JRCBpbnRvIGRlc2NyaXB0aW9uCisgKgorICogXHBhcmFtIG9pZCAgICAgIE9JRCB0byB1c2UKKyAqIFxwYXJhbSBkZXNjICAgICBwbGFjZSB0byBzdG9yZSBzdHJpbmcgcG9pbnRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9zaWdfYWxnX2Rlc2MoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgY29uc3QgY2hhciAqKmRlc2MgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIG1kX3R5cGUgYW5kIHBrX3R5cGUgaW50byBTaWduYXR1cmVBbGdvcml0aG0gT0lECisgKgorICogXHBhcmFtIG1kX2FsZyAgIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobQorICogXHBhcmFtIHBrX2FsZyAgIHB1YmxpYyBrZXkgYWxnb3JpdGhtCisgKiBccGFyYW0gb2lkICAgICAgcGxhY2UgdG8gc3RvcmUgQVNOLjEgT0lEIHN0cmluZyBwb2ludGVyCisgKiBccGFyYW0gb2xlbiAgICAgbGVuZ3RoIG9mIHRoZSBPSUQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisgKi8KK2ludCBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3NpZ19hbGcoIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZywgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipvaWQsIHNpemVfdCAqb2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgaGFzaCBhbGdvcml0aG0gT0lEIGludG8gbWRfdHlwZQorICoKKyAqIFxwYXJhbSBvaWQgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gbWRfYWxnICAgcGxhY2UgdG8gc3RvcmUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X21kX2FsZyggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLCBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnICk7CisjZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyYW5zbGF0ZSBFeHRlbmRlZCBLZXkgVXNhZ2UgT0lEIGludG8gZGVzY3JpcHRpb24KKyAqCisgKiBccGFyYW0gb2lkICAgICAgT0lEIHRvIHVzZQorICogXHBhcmFtIGRlc2MgICAgIHBsYWNlIHRvIHN0b3JlIHN0cmluZyBwb2ludGVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X2V4dGVuZGVkX2tleV91c2FnZSggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLCBjb25zdCBjaGFyICoqZGVzYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgbWRfdHlwZSBpbnRvIGhhc2ggYWxnb3JpdGhtIE9JRAorICoKKyAqIFxwYXJhbSBtZF9hbGcgICBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0KKyAqIFxwYXJhbSBvaWQgICAgICBwbGFjZSB0byBzdG9yZSBBU04uMSBPSUQgc3RyaW5nIHBvaW50ZXIKKyAqIFxwYXJhbSBvbGVuICAgICBsZW5ndGggb2YgdGhlIE9JRAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQKKyAqLworaW50IG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfbWQoIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywgY29uc3QgY2hhciAqKm9pZCwgc2l6ZV90ICpvbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBUcmFuc2xhdGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gT0lEIGludG8gY2lwaGVyX3R5cGUKKyAqCisgKiBccGFyYW0gb2lkICAgICAgICAgICBPSUQgdG8gdXNlCisgKiBccGFyYW0gY2lwaGVyX2FsZyAgICBwbGFjZSB0byBzdG9yZSBjaXBoZXIgYWxnb3JpdGhtCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X2NpcGhlcl9hbGcoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgbWJlZHRsc19jaXBoZXJfdHlwZV90ICpjaXBoZXJfYWxnICk7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgVHJhbnNsYXRlIFBLQ1MjMTIgUEJFIGFsZ29yaXRobSBPSUQgaW50byBtZF90eXBlIGFuZAorICogICAgICAgICAgICAgICAgIGNpcGhlcl90eXBlCisgKgorICogXHBhcmFtIG9pZCAgICAgICAgICAgT0lEIHRvIHVzZQorICogXHBhcmFtIG1kX2FsZyAgICAgICAgcGxhY2UgdG8gc3RvcmUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCisgKiBccGFyYW0gY2lwaGVyX2FsZyAgICBwbGFjZSB0byBzdG9yZSBjaXBoZXIgYWxnb3JpdGhtCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X3BrY3MxMl9wYmVfYWxnKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpvaWQsIG1iZWR0bHNfbWRfdHlwZV90ICptZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfdHlwZV90ICpjaXBoZXJfYWxnICk7CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTJfQyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogb2lkLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGFkbG9jay5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wYWRsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0NWE1YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGFkbG9jay5oCkBAIC0wLDAgKzEsMTA3IEBACisvKioKKyAqIFxmaWxlIHBhZGxvY2suaAorICoKKyAqIFxicmllZiBWSUEgUGFkTG9jayBBQ0UgZm9yIEhXIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBzdXBwb3J0ZWQgYnkgc29tZQorICogICAgICAgIHByb2Nlc3NvcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19QQURMT0NLX0gKKyNkZWZpbmUgTUJFRFRMU19QQURMT0NLX0gKKworI2luY2x1ZGUgImFlcy5oIgorCisjZGVmaW5lIE1CRURUTFNfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVEICAgICAgICAgICAgICAgLTB4MDAzMCAgLyoqPCBJbnB1dCBkYXRhIHNob3VsZCBiZSBhbGlnbmVkLiAqLworCisjaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQorI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpCisjZGVmaW5lIE1CRURUTFNfSEFWRV9BU0FOCisjZW5kaWYKKyNlbmRpZgorCisvKiBTb21lIHZlcnNpb25zIG9mIEFTYW4gcmVzdWx0IGluIGVycm9ycyBhYm91dCBub3QgZW5vdWdoIHJlZ2lzdGVycyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfSEFWRV9BU0FOKQorCisjaWZuZGVmIE1CRURUTFNfSEFWRV9YODYKKyNkZWZpbmUgTUJFRFRMU19IQVZFX1g4NgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfUk5HIDB4MDAwQworI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfQUNFIDB4MDBDMAorI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfUEhFIDB4MEMwMAorI2RlZmluZSBNQkVEVExTX1BBRExPQ0tfUE1NIDB4MzAwMAorCisjZGVmaW5lIE1CRURUTFNfUEFETE9DS19BTElHTjE2KHgpICh1aW50MzJfdCAqKSAoMTYgKyAoKGludDMyX3QpIHggJiB+MTUpKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhZExvY2sgZGV0ZWN0aW9uIHJvdXRpbmUKKyAqCisgKiBccGFyYW0gZmVhdHVyZSAgVGhlIGZlYXR1cmUgdG8gZGV0ZWN0CisgKgorICogXHJldHVybiAgICAgICAgIDEgaWYgQ1BVIGhhcyBzdXBwb3J0IGZvciB0aGUgZmVhdHVyZSwgMCBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfcGFkbG9ja19oYXNfc3VwcG9ydCggaW50IGZlYXR1cmUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGFkTG9jayBBRVMtRUNCIGJsb2NrIGVuKGRlKWNyeXB0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIEFFUyBjb250ZXh0CisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19BRVNfRU5DUllQVCBvciBNQkVEVExTX0FFU19ERUNSWVBUCisgKiBccGFyYW0gaW5wdXQgICAgMTYtYnl0ZSBpbnB1dCBibG9jaworICogXHBhcmFtIG91dHB1dCAgIDE2LWJ5dGUgb3V0cHV0IGJsb2NrCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2VzcywgMSBpZiBvcGVyYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0ZWNiKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhZExvY2sgQUVTLUNCQyBidWZmZXIgZW4oZGUpY3J5cHRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQUVTIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX0FFU19FTkNSWVBUIG9yIE1CRURUTFNfQUVTX0RFQ1JZUFQKKyAqIFxwYXJhbSBsZW5ndGggICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKHVwZGF0ZWQgYWZ0ZXIgdXNlKQorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIGhvbGRpbmcgdGhlIG91dHB1dCBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2VzcywgMSBpZiBvcGVyYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0Y2JjKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9YODYgICovCisKKyNlbmRpZiAvKiBwYWRsb2NrLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGVtLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BlbS5oCkBAIC0wLDAgKzEsMTI5IEBACisvKioKKyAqIFxmaWxlIHBlbS5oCisgKgorICogXGJyaWVmIFByaXZhY3kgRW5oYW5jZWQgTWFpbCAoUEVNKSBkZWNvZGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1BFTV9ICisjZGVmaW5lIE1CRURUTFNfUEVNX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKioKKyAqIFxuYW1lIFBFTSBFcnJvciBjb2RlcworICogVGhlc2UgZXJyb3IgY29kZXMgYXJlIHJldHVybmVkIGluIGNhc2Ugb2YgZXJyb3JzIHJlYWRpbmcgdGhlCisgKiBQRU0gZGF0YS4KKyAqIFx7CisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCAgICAgICAgICAtMHgxMDgwICAvKio8IE5vIFBFTSBoZWFkZXIgb3IgZm9vdGVyIGZvdW5kLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9EQVRBICAgICAgICAgICAgICAgICAgICAgIC0weDExMDAgIC8qKjwgUEVNIHN0cmluZyBpcyBub3QgYXMgZXhwZWN0ZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BFTV9BTExPQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgLTB4MTE4MCAgLyoqPCBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYgICAgICAgICAgICAgICAgICAgIC0weDEyMDAgIC8qKjwgUlNBIElWIGlzIG5vdCBpbiBoZXgtZm9ybWF0LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fVU5LTk9XTl9FTkNfQUxHICAgICAgICAgICAgICAgICAgIC0weDEyODAgIC8qKjwgVW5zdXBwb3J0ZWQga2V5IGVuY3J5cHRpb24gYWxnb3JpdGhtLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQgICAgICAgICAgICAgICAgIC0weDEzMDAgIC8qKjwgUHJpdmF0ZSBrZXkgcGFzc3dvcmQgY2FuJ3QgYmUgZW1wdHkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSCAgICAgICAgICAgICAgICAgLTB4MTM4MCAgLyoqPCBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QRU1fRkVBVFVSRV9VTkFWQUlMQUJMRSAgICAgICAgICAgICAgIC0weDE0MDAgIC8qKjwgVW5hdmFpbGFibGUgZmVhdHVyZSwgZS5nLiBoYXNoaW5nL2VuY3J5cHRpb24gY29tYmluYXRpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BFTV9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgICAgLTB4MTQ4MCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKy8qIFx9IG5hbWUgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgUEVNIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdW5zaWduZWQgY2hhciAqYnVmOyAgICAgLyohPCBidWZmZXIgZm9yIGRlY29kZWQgZGF0YSAgICAgICAgICAgICAqLworICAgIHNpemVfdCBidWZsZW47ICAgICAgICAgIC8qITwgbGVuZ3RoIG9mIHRoZSBidWZmZXIgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbmZvOyAgICAvKiE8IGJ1ZmZlciBmb3IgZXh0cmEgaGVhZGVyIGluZm9ybWF0aW9uICovCit9CittYmVkdGxzX3BlbV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICBQRU0gY29udGV4dCBzZXR1cAorICoKKyAqIFxwYXJhbSBjdHggICBjb250ZXh0IHRvIGJlIGluaXRpYWxpemVkCisgKi8KK3ZvaWQgbWJlZHRsc19wZW1faW5pdCggbWJlZHRsc19wZW1fY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIFJlYWQgYSBidWZmZXIgZm9yIFBFTSBpbmZvcm1hdGlvbiBhbmQgc3RvcmUgdGhlIHJlc3VsdGluZworICogICAgICAgICAgICAgIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIGNvbnRleHQgYnVmZmVycy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gaGVhZGVyICAgIGhlYWRlciBzdHJpbmcgdG8gc2VlayBhbmQgZXhwZWN0CisgKiBccGFyYW0gZm9vdGVyICAgIGZvb3RlciBzdHJpbmcgdG8gc2VlayBhbmQgZXhwZWN0CisgKiBccGFyYW0gZGF0YSAgICAgIHNvdXJjZSBkYXRhIHRvIGxvb2sgaW4gKG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQpCisgKiBccGFyYW0gcHdkICAgICAgIHBhc3N3b3JkIGZvciBkZWNyeXB0aW9uIChjYW4gYmUgTlVMTCkKKyAqIFxwYXJhbSBwd2RsZW4gICAgbGVuZ3RoIG9mIHBhc3N3b3JkCisgKiBccGFyYW0gdXNlX2xlbiAgIGRlc3RpbmF0aW9uIGZvciB0b3RhbCBsZW5ndGggdXNlZCAoc2V0IGFmdGVyIGhlYWRlciBpcworICogICAgICAgICAgICAgICAgICBjb3JyZWN0bHkgcmVhZCwgc28gdW5sZXNzIHlvdSBnZXQKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEVNX0JBRF9JTlBVVF9EQVRBIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQsIHVzZV9sZW4gaXMKKyAqICAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCB0byBza2lwKQorICoKKyAqIFxub3RlICAgICAgICAgICAgQXR0ZW1wdHMgdG8gY2hlY2sgcGFzc3dvcmQgY29ycmVjdG5lc3MgYnkgdmVyaWZ5aW5nIGlmCisgKiAgICAgICAgICAgICAgICAgIHRoZSBkZWNyeXB0ZWQgdGV4dCBzdGFydHMgd2l0aCBhbiBBU04uMSBzZXF1ZW5jZSBvZgorICogICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBsZW5ndGgKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBzcGVjaWZpYyBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoIG1iZWR0bHNfcGVtX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqaGVhZGVyLCBjb25zdCBjaGFyICpmb290ZXIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHB3ZGxlbiwgc2l6ZV90ICp1c2VfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgIFBFTSBjb250ZXh0IG1lbW9yeSBmcmVlaW5nCisgKgorICogXHBhcmFtIGN0eCAgIGNvbnRleHQgdG8gYmUgZnJlZWQKKyAqLwordm9pZCBtYmVkdGxzX3BlbV9mcmVlKCBtYmVkdGxzX3BlbV9jb250ZXh0ICpjdHggKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBidWZmZXIgb2YgUEVNIGluZm9ybWF0aW9uIGZyb20gYSBERVIgZW5jb2RlZAorICogICAgICAgICAgICAgICAgICBidWZmZXIuCisgKgorICogXHBhcmFtIGhlYWRlciAgICBoZWFkZXIgc3RyaW5nIHRvIHdyaXRlCisgKiBccGFyYW0gZm9vdGVyICAgIGZvb3RlciBzdHJpbmcgdG8gd3JpdGUKKyAqIFxwYXJhbSBkZXJfZGF0YSAgREVSIGRhdGEgdG8gd3JpdGUKKyAqIFxwYXJhbSBkZXJfbGVuICAgbGVuZ3RoIG9mIHRoZSBERVIgZGF0YQorICogXHBhcmFtIGJ1ZiAgICAgICBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBidWZfbGVuICAgbGVuZ3RoIG9mIG91dHB1dCBidWZmZXIKKyAqIFxwYXJhbSBvbGVuICAgICAgdG90YWwgbGVuZ3RoIHdyaXR0ZW4gLyByZXF1aXJlZCAoaWYgYnVmX2xlbiBpcyBub3QgZW5vdWdoKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIHNwZWNpZmljIFBFTSBvciBCQVNFNjQgZXJyb3IgY29kZS4gT24KKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwgb2xlbiBpcyB0aGUgcmVxdWlyZWQKKyAqICAgICAgICAgICAgICAgICAgc2l6ZS4KKyAqLworaW50IG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlciggY29uc3QgY2hhciAqaGVhZGVyLCBjb25zdCBjaGFyICpmb290ZXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGVyX2RhdGEsIHNpemVfdCBkZXJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHNpemVfdCAqb2xlbiApOworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHBlbS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmOWI5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGsuaApAQCAtMCwwICsxLDYxNiBAQAorLyoqCisgKiBcZmlsZSBway5oCisgKgorICogXGJyaWVmIFB1YmxpYyBLZXkgYWJzdHJhY3Rpb24gbGF5ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmbmRlZiBNQkVEVExTX1BLX0gKKyNkZWZpbmUgTUJFRFRMU19QS19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWQuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpbmNsdWRlICJyc2EuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2luY2x1ZGUgImVjcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpbmNsdWRlICJlY2RzYS5oIgorI2VuZGlmCisKKyNpZiAoIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSApICYmIFwKKyAgICAhZGVmaW5lZChpbmxpbmUpICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZgorCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRCAgICAgICAgLTB4M0Y4MCAgLyoqPCBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggICAgICAgLTB4M0YwMCAgLyoqPCBUeXBlIG1pc21hdGNoLCBlZyBhdHRlbXB0IHRvIGVuY3J5cHQgd2l0aCBhbiBFQ0RTQSBrZXkgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgICAgICAtMHgzRTgwICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19GSUxFX0lPX0VSUk9SICAgICAgIC0weDNFMDAgIC8qKjwgUmVhZC93cml0ZSBvZiBmaWxlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfVkVSU0lPTiAtMHgzRDgwICAvKio8IFVuc3VwcG9ydGVkIGtleSB2ZXJzaW9uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCAgLTB4M0QwMCAgLyoqPCBJbnZhbGlkIGtleSB0YWcgb3IgdmFsdWUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICAgICAgLTB4M0M4MCAgLyoqPCBLZXkgYWxnb3JpdGhtIGlzIHVuc3VwcG9ydGVkIChvbmx5IFJTQSBhbmQgRUMgYXJlIHN1cHBvcnRlZCkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVEICAgLTB4M0MwMCAgLyoqPCBQcml2YXRlIGtleSBwYXNzd29yZCBjYW4ndCBiZSBlbXB0eS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggICAtMHgzQjgwICAvKio8IEdpdmVuIHByaXZhdGUga2V5IHBhc3N3b3JkIGRvZXMgbm90IGFsbG93IGZvciBjb3JyZWN0IGRlY3J5cHRpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICAgICAgLTB4M0IwMCAgLyoqPCBUaGUgcHVia2V5IHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkIChvbmx5IFJTQSBhbmQgRUMgYXJlIHN1cHBvcnRlZCkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfQUxHICAgICAgICAgLTB4M0E4MCAgLyoqPCBUaGUgYWxnb3JpdGhtIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9QS19VTktOT1dOX05BTUVEX0NVUlZFIC0weDNBMDAgIC8qKjwgRWxsaXB0aWMgY3VydmUgaXMgdW5zdXBwb3J0ZWQgKG9ubHkgTklTVCBjdXJ2ZXMgYXJlIHN1cHBvcnRlZCkuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUgLTB4Mzk4MCAgLyoqPCBVbmF2YWlsYWJsZSBmZWF0dXJlLCBlLmcuIFJTQSBkaXNhYmxlZCBmb3IgUlNBIGtleS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSCAgICAtMHgzOTAwICAvKio8IFRoZSBzaWduYXR1cmUgaXMgdmFsaWQgYnV0IGl0cyBsZW5ndGggaXMgbGVzcyB0aGFuIGV4cGVjdGVkLiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFB1YmxpYyBrZXkgdHlwZXMKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBNQkVEVExTX1BLX05PTkU9MCwKKyAgICBNQkVEVExTX1BLX1JTQSwKKyAgICBNQkVEVExTX1BLX0VDS0VZLAorICAgIE1CRURUTFNfUEtfRUNLRVlfREgsCisgICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICBNQkVEVExTX1BLX1JTQV9BTFQsCisgICAgTUJFRFRMU19QS19SU0FTU0FfUFNTLAorfSBtYmVkdGxzX3BrX3R5cGVfdDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIE9wdGlvbnMgZm9yIFJTQVNTQS1QU1Mgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgU2VlIFxjIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dCgpCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbWJlZHRsc19tZF90eXBlX3QgbWdmMV9oYXNoX2lkOworICAgIGludCBleHBlY3RlZF9zYWx0X2xlbjsKKworfSBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9uczsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFR5cGVzIGZvciBpbnRlcmZhY2luZyB3aXRoIHRoZSBkZWJ1ZyBtb2R1bGUKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgTUJFRFRMU19QS19ERUJVR19OT05FID0gMCwKKyAgICBNQkVEVExTX1BLX0RFQlVHX01QSSwKKyAgICBNQkVEVExTX1BLX0RFQlVHX0VDUCwKK30gbWJlZHRsc19wa19kZWJ1Z190eXBlOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSXRlbSB0byBzZW5kIHRvIHRoZSBkZWJ1ZyBtb2R1bGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX3BrX2RlYnVnX3R5cGUgdHlwZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHZvaWQgKnZhbHVlOworfSBtYmVkdGxzX3BrX2RlYnVnX2l0ZW07CisKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBpdGVtIHNlbmQgZm9yIGRlYnVnZ2luZywgcGx1cyAxICovCisjZGVmaW5lIE1CRURUTFNfUEtfREVCVUdfTUFYX0lURU1TIDMKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFB1YmxpYyBrZXkgaW5mb3JtYXRpb24gYW5kIG9wZXJhdGlvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19wa19pbmZvX3Q7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBQdWJsaWMga2V5IGNvbnRhaW5lcgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190ICogICBwa19pbmZvOyAvKio8IFB1YmxpYyBrZXkgaW5mb3JtYXRpb25zICAgICAgICAqLworICAgIHZvaWQgKiAgICAgICAgICAgICAgICAgICAgICBwa19jdHg7ICAvKio8IFVuZGVybHlpbmcgcHVibGljIGtleSBjb250ZXh0ICAqLworfSBtYmVkdGxzX3BrX2NvbnRleHQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisvKioKKyAqIFF1aWNrIGFjY2VzcyB0byBhbiBSU0EgY29udGV4dCBpbnNpZGUgYSBQSyBjb250ZXh0LgorICoKKyAqIFx3YXJuaW5nIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgUEsgY29udGV4dCBhY3R1YWxseSBob2xkcyBhbiBSU0EgY29udGV4dAorICogYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK3N0YXRpYyBpbmxpbmUgbWJlZHRsc19yc2FfY29udGV4dCAqbWJlZHRsc19wa19yc2EoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCBwayApCit7CisgICAgcmV0dXJuKCAobWJlZHRsc19yc2FfY29udGV4dCAqKSAocGspLnBrX2N0eCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qKgorICogUXVpY2sgYWNjZXNzIHRvIGFuIEVDIGNvbnRleHQgaW5zaWRlIGEgUEsgY29udGV4dC4KKyAqCisgKiBcd2FybmluZyBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIFBLIGNvbnRleHQgYWN0dWFsbHkgaG9sZHMgYW4gRUMgY29udGV4dAorICogYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24hCisgKi8KK3N0YXRpYyBpbmxpbmUgbWJlZHRsc19lY3Bfa2V5cGFpciAqbWJlZHRsc19wa19lYyggY29uc3QgbWJlZHRsc19wa19jb250ZXh0IHBrICkKK3sKKyAgICByZXR1cm4oIChtYmVkdGxzX2VjcF9rZXlwYWlyICopIChwaykucGtfY3R4ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUeXBlcyBmb3IgUlNBLWFsdCBhYnN0cmFjdGlvbgorICovCit0eXBlZGVmIGludCAoKm1iZWR0bHNfcGtfcnNhX2FsdF9kZWNyeXB0X2Z1bmMpKCB2b2lkICpjdHgsIGludCBtb2RlLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApOwordHlwZWRlZiBpbnQgKCptYmVkdGxzX3BrX3JzYV9hbHRfc2lnbl9mdW5jKSggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLCB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgY2hhciAqc2lnICk7Cit0eXBlZGVmIHNpemVfdCAoKm1iZWR0bHNfcGtfcnNhX2FsdF9rZXlfbGVuX2Z1bmMpKCB2b2lkICpjdHggKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgUmV0dXJuIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gUEsgdHlwZQorICoKKyAqIFxwYXJhbSBwa190eXBlICAgUEsgdHlwZSB0byBzZWFyY2ggZm9yLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgVGhlIFBLIGluZm8gYXNzb2NpYXRlZCB3aXRoIHRoZSB0eXBlIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggbWJlZHRsc19wa190eXBlX3QgcGtfdHlwZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIG1iZWR0bHNfcGtfY29udGV4dCAoYXMgTk9ORSkKKyAqLwordm9pZCBtYmVkdGxzX3BrX2luaXQoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIGEgbWJlZHRsc19wa19jb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19wa19mcmVlKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIFBLIGNvbnRleHQgd2l0aCB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4KKyAqICAgICAgICAgICAgICAgICAgYW5kIGFsbG9jYXRlcyB0aGUgdHlwZS1zcGVjaWZpYyBQSyBzdWJjb250ZXh0LgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBpbml0aWFsaXplLiBNdXN0IGJlIGVtcHR5ICh0eXBlIE5PTkUpLgorICogXHBhcmFtIGluZm8gICAgICBJbmZvcm1hdGlvbiB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2VzcywKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgb24gaW52YWxpZCBpbnB1dCwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEtfQUxMT0NfRkFJTEVEIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEZvciBjb250ZXh0cyBob2xkaW5nIGFuIFJTQS1hbHQga2V5LCB1c2UKKyAqICAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19wa19zZXR1cF9yc2FfYWx0KCkgaW5zdGVhZC4KKyAqLworaW50IG1iZWR0bHNfcGtfc2V0dXAoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqaW5mbyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGFuIFJTQS1hbHQgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBpbml0aWFsaXplLiBNdXN0IGJlIGVtcHR5ICh0eXBlIE5PTkUpLgorICogXHBhcmFtIGtleSAgICAgICBSU0Ega2V5IHBvaW50ZXIKKyAqIFxwYXJhbSBkZWNyeXB0X2Z1bmMgIERlY3J5cHRpb24gZnVuY3Rpb24KKyAqIFxwYXJhbSBzaWduX2Z1bmMgICAgIFNpZ25pbmcgZnVuY3Rpb24KKyAqIFxwYXJhbSBrZXlfbGVuX2Z1bmMgIEZ1bmN0aW9uIHJldHVybmluZyBrZXkgbGVuZ3RoIGluIGJ5dGVzCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBIGlmIHRoZQorICogICAgICAgICAgICAgICAgICBjb250ZXh0IHdhc24ndCBhbHJlYWR5IGluaXRpYWxpemVkIGFzIFJTQV9BTFQuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHJlcGxhY2VzIFxjIG1iZWR0bHNfcGtfc2V0dXAoKSBmb3IgUlNBLWFsdC4KKyAqLworaW50IG1iZWR0bHNfcGtfc2V0dXBfcnNhX2FsdCggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIHZvaWQgKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19yc2FfYWx0X2RlY3J5cHRfZnVuYyBkZWNyeXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19yc2FfYWx0X3NpZ25fZnVuYyBzaWduX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19yc2FfYWx0X2tleV9sZW5fZnVuYyBrZXlfbGVuX2Z1bmMgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2V0IHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHVuZGVybHlpbmcga2V5CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgS2V5IHNpemUgaW4gYml0cywgb3IgMCBvbiBlcnJvcgorICovCitzaXplX3QgbWJlZHRsc19wa19nZXRfYml0bGVuKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2V0IHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIHVuZGVybHlpbmcga2V5CisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgICBLZXkgbGVuZ3RoIGluIGJ5dGVzLCBvciAwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IG1iZWR0bHNfcGtfZ2V0X2xlbiggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpjdHggKQoreworICAgIHJldHVybiggKCBtYmVkdGxzX3BrX2dldF9iaXRsZW4oIGN0eCApICsgNyApIC8gOCApOworfQorCisvKioKKyAqIFxicmllZiAgICAgICAgICAgVGVsbCBpZiBhIGNvbnRleHQgY2FuIGRvIHRoZSBvcGVyYXRpb24gZ2l2ZW4gYnkgdHlwZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB0ZXN0CisgKiBccGFyYW0gdHlwZSAgICAgIFRhcmdldCB0eXBlCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIGNvbnRleHQgY2FuJ3QgZG8gdGhlIG9wZXJhdGlvbnMsCisgKiAgICAgICAgICAgICAgICAgIDEgb3RoZXJ3aXNlLgorICovCitpbnQgbWJlZHRsc19wa19jYW5fZG8oIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBWZXJpZnkgc2lnbmF0dXJlIChpbmNsdWRpbmcgcGFkZGluZyBpZiByZWxldmFudCkuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBQSyBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIG1kX2FsZyAgICBIYXNoIGFsZ29yaXRobSB1c2VkIChzZWUgbm90ZXMpCisgKiBccGFyYW0gaGFzaCAgICAgIEhhc2ggb2YgdGhlIG1lc3NhZ2UgdG8gc2lnbgorICogXHBhcmFtIGhhc2hfbGVuICBIYXNoIGxlbmd0aCBvciAwIChzZWUgbm90ZXMpCisgKiBccGFyYW0gc2lnICAgICAgIFNpZ25hdHVyZSB0byB2ZXJpZnkKKyAqIFxwYXJhbSBzaWdfbGVuICAgU2lnbmF0dXJlIGxlbmd0aAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzIChzaWduYXR1cmUgaXMgdmFsaWQpLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9QS19TSUdfTEVOX01JU01BVENIIGlmIHRoZSBzaWduYXR1cmUgaXMKKyAqICAgICAgICAgICAgICAgICAgdmFsaWQgYnV0IGl0cyBhY3R1YWwgbGVuZ3RoIGlzIGxlc3MgdGhhbiBzaWdfbGVuLAorICogICAgICAgICAgICAgICAgICBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgUlNBIGtleXMsIHRoZSBkZWZhdWx0IHBhZGRpbmcgdHlwZSBpcyBQS0NTIzEgdjEuNS4KKyAqICAgICAgICAgICAgICAgICAgVXNlIFxjIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCggTUJFRFRMU19QS19SU0FTU0FfUFNTLCAuLi4gKQorICogICAgICAgICAgICAgICAgICB0byB2ZXJpZnkgUlNBU1NBX1BTUyBzaWduYXR1cmVzLgorICoKKyAqIFxub3RlICAgICAgICAgICAgSWYgaGFzaF9sZW4gaXMgMCwgdGhlbiB0aGUgbGVuZ3RoIGFzc29jaWF0ZWQgd2l0aCBtZF9hbGcKKyAqICAgICAgICAgICAgICAgICAgaXMgdXNlZCBpbnN0ZWFkLCBvciBhbiBlcnJvciByZXR1cm5lZCBpZiBpdCBpcyBpbnZhbGlkLgorICoKKyAqIFxub3RlICAgICAgICAgICAgbWRfYWxnIG1heSBiZSBNQkVEVExTX01EX05PTkUsIG9ubHkgaWYgaGFzaF9sZW4gIT0gMAorICovCitpbnQgbWJlZHRsc19wa192ZXJpZnkoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBWZXJpZnkgc2lnbmF0dXJlLCB3aXRoIG9wdGlvbnMuCisgKiAgICAgICAgICAgICAgICAgIChJbmNsdWRlcyB2ZXJpZmljYXRpb24gb2YgdGhlIHBhZGRpbmcgZGVwZW5kaW5nIG9uIHR5cGUuKQorICoKKyAqIFxwYXJhbSB0eXBlICAgICAgU2lnbmF0dXJlIHR5cGUgKGluYy4gcG9zc2libGUgcGFkZGluZyB0eXBlKSB0byB2ZXJpZnkKKyAqIFxwYXJhbSBvcHRpb25zICAgUG9pbnRlciB0byB0eXBlLXNwZWNpZmljIG9wdGlvbnMsIG9yIE5VTEwKKyAqIFxwYXJhbSBjdHggICAgICAgUEsgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBtZF9hbGcgICAgSGFzaCBhbGdvcml0aG0gdXNlZCAoc2VlIG5vdGVzKQorICogXHBhcmFtIGhhc2ggICAgICBIYXNoIG9mIHRoZSBtZXNzYWdlIHRvIHNpZ24KKyAqIFxwYXJhbSBoYXNoX2xlbiAgSGFzaCBsZW5ndGggb3IgMCAoc2VlIG5vdGVzKQorICogXHBhcmFtIHNpZyAgICAgICBTaWduYXR1cmUgdG8gdmVyaWZ5CisgKiBccGFyYW0gc2lnX2xlbiAgIFNpZ25hdHVyZSBsZW5ndGgKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgb24gc3VjY2VzcyAoc2lnbmF0dXJlIGlzIHZhbGlkKSwKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSCBpZiB0aGUgUEsgY29udGV4dCBjYW4ndCBiZQorICogICAgICAgICAgICAgICAgICB1c2VkIGZvciB0aGlzIHR5cGUgb2Ygc2lnbmF0dXJlcywKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSCBpZiB0aGUgc2lnbmF0dXJlIGlzCisgKiAgICAgICAgICAgICAgICAgIHZhbGlkIGJ1dCBpdHMgYWN0dWFsIGxlbmd0aCBpcyBsZXNzIHRoYW4gc2lnX2xlbiwKKyAqICAgICAgICAgICAgICAgICAgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlLgorICoKKyAqIFxub3RlICAgICAgICAgICAgSWYgaGFzaF9sZW4gaXMgMCwgdGhlbiB0aGUgbGVuZ3RoIGFzc29jaWF0ZWQgd2l0aCBtZF9hbGcKKyAqICAgICAgICAgICAgICAgICAgaXMgdXNlZCBpbnN0ZWFkLCBvciBhbiBlcnJvciByZXR1cm5lZCBpZiBpdCBpcyBpbnZhbGlkLgorICoKKyAqIFxub3RlICAgICAgICAgICAgbWRfYWxnIG1heSBiZSBNQkVEVExTX01EX05PTkUsIG9ubHkgaWYgaGFzaF9sZW4gIT0gMAorICoKKyAqIFxub3RlICAgICAgICAgICAgSWYgdHlwZSBpcyBNQkVEVExTX1BLX1JTQVNTQV9QU1MsIHRoZW4gb3B0aW9ucyBtdXN0IHBvaW50CisgKiAgICAgICAgICAgICAgICAgIHRvIGEgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgc3RydWN0dXJlLAorICogICAgICAgICAgICAgICAgICBvdGhlcndpc2UgaXQgbXVzdCBiZSBOVUxMLgorICovCitpbnQgbWJlZHRsc19wa192ZXJpZnlfZXh0KCBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlLCBjb25zdCB2b2lkICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIE1ha2Ugc2lnbmF0dXJlLCBpbmNsdWRpbmcgcGFkZGluZyBpZiByZWxldmFudC4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIFBLIGNvbnRleHQgdG8gdXNlIC0gbXVzdCBob2xkIGEgcHJpdmF0ZSBrZXkKKyAqIFxwYXJhbSBtZF9hbGcgICAgSGFzaCBhbGdvcml0aG0gdXNlZCAoc2VlIG5vdGVzKQorICogXHBhcmFtIGhhc2ggICAgICBIYXNoIG9mIHRoZSBtZXNzYWdlIHRvIHNpZ24KKyAqIFxwYXJhbSBoYXNoX2xlbiAgSGFzaCBsZW5ndGggb3IgMCAoc2VlIG5vdGVzKQorICogXHBhcmFtIHNpZyAgICAgICBQbGFjZSB0byB3cml0ZSB0aGUgc2lnbmF0dXJlCisgKiBccGFyYW0gc2lnX2xlbiAgIE51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbgorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgc3BlY2lmaWMgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEZvciBSU0Ega2V5cywgdGhlIGRlZmF1bHQgcGFkZGluZyB0eXBlIGlzIFBLQ1MjMSB2MS41LgorICogICAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBpbnRlcmZhY2UgaW4gdGhlIFBLIG1vZHVsZSB0byBtYWtlIFJTQVNTQS1QU1MKKyAqICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlcyB5ZXQuCisgKgorICogXG5vdGUgICAgICAgICAgICBJZiBoYXNoX2xlbiBpcyAwLCB0aGVuIHRoZSBsZW5ndGggYXNzb2NpYXRlZCB3aXRoIG1kX2FsZworICogICAgICAgICAgICAgICAgICBpcyB1c2VkIGluc3RlYWQsIG9yIGFuIGVycm9yIHJldHVybmVkIGlmIGl0IGlzIGludmFsaWQuCisgKgorICogXG5vdGUgICAgICAgICAgICBGb3IgUlNBLCBtZF9hbGcgbWF5IGJlIE1CRURUTFNfTURfTk9ORSBpZiBoYXNoX2xlbiAhPSAwLgorICogICAgICAgICAgICAgICAgICBGb3IgRUNEU0EsIG1kX2FsZyBtYXkgbmV2ZXIgYmUgTUJFRFRMU19NRF9OT05FLgorICovCitpbnQgbWJlZHRsc19wa19zaWduKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnX2xlbiwKKyAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBEZWNyeXB0IG1lc3NhZ2UgKGluY2x1ZGluZyBwYWRkaW5nIGlmIHJlbGV2YW50KS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIFBLIGNvbnRleHQgdG8gdXNlIC0gbXVzdCBob2xkIGEgcHJpdmF0ZSBrZXkKKyAqIFxwYXJhbSBpbnB1dCAgICAgSW5wdXQgdG8gZGVjcnlwdAorICogXHBhcmFtIGlsZW4gICAgICBJbnB1dCBzaXplCisgKiBccGFyYW0gb3V0cHV0ICAgIERlY3J5cHRlZCBvdXRwdXQKKyAqIFxwYXJhbSBvbGVuICAgICAgRGVjcnlwdGVkIG1lc3NhZ2UgbGVuZ3RoCisgKiBccGFyYW0gb3NpemUgICAgIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEZvciBSU0Ega2V5cywgdGhlIGRlZmF1bHQgcGFkZGluZyB0eXBlIGlzIFBLQ1MjMSB2MS41LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX3BrX2RlY3J5cHQoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwgc2l6ZV90IG9zaXplLAorICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVuY3J5cHQgbWVzc2FnZSAoaW5jbHVkaW5nIHBhZGRpbmcgaWYgcmVsZXZhbnQpLgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgUEsgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBpbnB1dCAgICAgTWVzc2FnZSB0byBlbmNyeXB0CisgKiBccGFyYW0gaWxlbiAgICAgIE1lc3NhZ2Ugc2l6ZQorICogXHBhcmFtIG91dHB1dCAgICBFbmNyeXB0ZWQgb3V0cHV0CisgKiBccGFyYW0gb2xlbiAgICAgIEVuY3J5cHRlZCBvdXRwdXQgbGVuZ3RoCisgKiBccGFyYW0gb3NpemUgICAgIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEZvciBSU0Ega2V5cywgdGhlIGRlZmF1bHQgcGFkZGluZyB0eXBlIGlzIFBLQ1MjMSB2MS41LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX3BrX2VuY3J5cHQoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwgc2l6ZV90IG9zaXplLAorICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIENoZWNrIGlmIGEgcHVibGljLXByaXZhdGUgcGFpciBvZiBrZXlzIG1hdGNoZXMuCisgKgorICogXHBhcmFtIHB1YiAgICAgICBDb250ZXh0IGhvbGRpbmcgYSBwdWJsaWMga2V5LgorICogXHBhcmFtIHBydiAgICAgICBDb250ZXh0IGhvbGRpbmcgYSBwcml2YXRlIChhbmQgcHVibGljKSBrZXkuCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3Mgb3IgTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEKKyAqLworaW50IG1iZWR0bHNfcGtfY2hlY2tfcGFpciggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpwdWIsIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqcHJ2ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBFeHBvcnQgZGVidWcgaW5mb3JtYXRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gaXRlbXMgICAgIFBsYWNlIHRvIHdyaXRlIGRlYnVnIGl0ZW1zCisgKgorICogXHJldHVybiAgICAgICAgICAwIG9uIHN1Y2Nlc3Mgb3IgTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEKKyAqLworaW50IG1iZWR0bHNfcGtfZGVidWcoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0gKml0ZW1zICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBBY2Nlc3MgdGhlIHR5cGUgbmFtZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgIFR5cGUgbmFtZSBvbiBzdWNjZXNzLCBvciAiaW52YWxpZCBQSyIKKyAqLworY29uc3QgY2hhciAqIG1iZWR0bHNfcGtfZ2V0X25hbWUoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZXQgdGhlIGtleSB0eXBlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIHVzZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgVHlwZSBvbiBzdWNjZXNzLCBvciBNQkVEVExTX1BLX05PTkUKKyAqLworbWJlZHRsc19wa190eXBlX3QgbWJlZHRsc19wa19nZXRfdHlwZSggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpjdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKQorLyoqIFxpbmdyb3VwIHBrX21vZHVsZSAqLworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFBhcnNlIGEgcHJpdmF0ZSBrZXkgaW4gUEVNIG9yIERFUiBmb3JtYXQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGtleSB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgICBpbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBrZXlsZW4gICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBmb3IgUEVNIGRhdGEpCisgKiBccGFyYW0gcHdkICAgICAgIHBhc3N3b3JkIGZvciBkZWNyeXB0aW9uIChvcHRpb25hbCkKKyAqIFxwYXJhbSBwd2RsZW4gICAgc2l6ZSBvZiB0aGUgcGFzc3dvcmQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIE9uIGVudHJ5LCBjdHggbXVzdCBiZSBlbXB0eSwgZWl0aGVyIGZyZXNobHkgaW5pdGlhbGlzZWQKKyAqICAgICAgICAgICAgICAgICAgd2l0aCBtYmVkdGxzX3BrX2luaXQoKSBvciByZXNldCB3aXRoIG1iZWR0bHNfcGtfZnJlZSgpLiBJZiB5b3UgbmVlZCBhCisgKiAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGtleSB0eXBlLCBjaGVjayB0aGUgcmVzdWx0IHdpdGggbWJlZHRsc19wa19jYW5fZG8oKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSBrZXkgaXMgYWxzbyBjaGVja2VkIGZvciBjb3JyZWN0bmVzcy4KKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBQSyBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19wa19wYXJzZV9rZXkoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCBzaXplX3QgcHdkbGVuICk7CisKKy8qKiBcaW5ncm91cCBwa19tb2R1bGUgKi8KKy8qKgorICogXGJyaWVmICAgICAgICAgICBQYXJzZSBhIHB1YmxpYyBrZXkgaW4gUEVNIG9yIERFUiBmb3JtYXQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGtleSB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGtleSAgICAgICBpbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBrZXlsZW4gICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBmb3IgUEVNIGRhdGEpCisgKgorICogXG5vdGUgICAgICAgICAgICBPbiBlbnRyeSwgY3R4IG11c3QgYmUgZW1wdHksIGVpdGhlciBmcmVzaGx5IGluaXRpYWxpc2VkCisgKiAgICAgICAgICAgICAgICAgIHdpdGggbWJlZHRsc19wa19pbml0KCkgb3IgcmVzZXQgd2l0aCBtYmVkdGxzX3BrX2ZyZWUoKS4gSWYgeW91IG5lZWQgYQorICogICAgICAgICAgICAgICAgICBzcGVjaWZpYyBrZXkgdHlwZSwgY2hlY2sgdGhlIHJlc3VsdCB3aXRoIG1iZWR0bHNfcGtfY2FuX2RvKCkuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUga2V5IGlzIGFsc28gY2hlY2tlZCBmb3IgY29ycmVjdG5lc3MuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgUEsgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKiogXGluZ3JvdXAgcGtfbW9kdWxlICovCisvKioKKyAqIFxicmllZiAgICAgICAgICAgTG9hZCBhbmQgcGFyc2UgYSBwcml2YXRlIGtleQorICoKKyAqIFxwYXJhbSBjdHggICAgICAga2V5IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0gcGF0aCAgICAgIGZpbGVuYW1lIHRvIHJlYWQgdGhlIHByaXZhdGUga2V5IGZyb20KKyAqIFxwYXJhbSBwYXNzd29yZCAgcGFzc3dvcmQgdG8gZGVjcnlwdCB0aGUgZmlsZSAoY2FuIGJlIE5VTEwpCisgKgorICogXG5vdGUgICAgICAgICAgICBPbiBlbnRyeSwgY3R4IG11c3QgYmUgZW1wdHksIGVpdGhlciBmcmVzaGx5IGluaXRpYWxpc2VkCisgKiAgICAgICAgICAgICAgICAgIHdpdGggbWJlZHRsc19wa19pbml0KCkgb3IgcmVzZXQgd2l0aCBtYmVkdGxzX3BrX2ZyZWUoKS4gSWYgeW91IG5lZWQgYQorICogICAgICAgICAgICAgICAgICBzcGVjaWZpYyBrZXkgdHlwZSwgY2hlY2sgdGhlIHJlc3VsdCB3aXRoIG1iZWR0bHNfcGtfY2FuX2RvKCkuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUga2V5IGlzIGFsc28gY2hlY2tlZCBmb3IgY29ycmVjdG5lc3MuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgUEsgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFzc3dvcmQgKTsKKworLyoqIFxpbmdyb3VwIHBrX21vZHVsZSAqLworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIExvYWQgYW5kIHBhcnNlIGEgcHVibGljIGtleQorICoKKyAqIFxwYXJhbSBjdHggICAgICAga2V5IHRvIGJlIGluaXRpYWxpemVkCisgKiBccGFyYW0gcGF0aCAgICAgIGZpbGVuYW1lIHRvIHJlYWQgdGhlIHB1YmxpYyBrZXkgZnJvbQorICoKKyAqIFxub3RlICAgICAgICAgICAgT24gZW50cnksIGN0eCBtdXN0IGJlIGVtcHR5LCBlaXRoZXIgZnJlc2hseSBpbml0aWFsaXNlZAorICogICAgICAgICAgICAgICAgICB3aXRoIG1iZWR0bHNfcGtfaW5pdCgpIG9yIHJlc2V0IHdpdGggbWJlZHRsc19wa19mcmVlKCkuIElmCisgKiAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGEgc3BlY2lmaWMga2V5IHR5cGUsIGNoZWNrIHRoZSByZXN1bHQgd2l0aAorICogICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2Nhbl9kbygpLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhlIGtleSBpcyBhbHNvIGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFBLIG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApOworI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BLX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgcHJpdmF0ZSBrZXkgdG8gYSBQS0NTIzEgb3IgU0VDMSBERVIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGRhdGEgaXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIhIFVzZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSB3aGVyZSB5b3Ugc2hvdWxkIHN0YXJ0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIHByaXZhdGUgdG8gd3JpdGUgYXdheQorICogXHBhcmFtIGJ1ZiAgICAgICBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgICBsZW5ndGggb2YgZGF0YSB3cml0dGVuIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19wa193cml0ZV9rZXlfZGVyKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBwdWJsaWMga2V5IHRvIGEgU3ViamVjdFB1YmxpY0tleUluZm8gREVSIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICBOb3RlOiBkYXRhIGlzIHdyaXR0ZW4gYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyISBVc2UgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSB0byBkZXRlcm1pbmUgd2hlcmUgeW91IHNob3VsZCBzdGFydAorICogICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgYnVmZmVyCisgKgorICogXHBhcmFtIGN0eCAgICAgICBwdWJsaWMga2V5IHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgbGVuZ3RoIG9mIGRhdGEgd3JpdHRlbiBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2RlciggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIHB1YmxpYyBrZXkgdG8gYSBQRU0gc3RyaW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgICBwdWJsaWMga2V5IHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X3BlbSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgcHJpdmF0ZSBrZXkgdG8gYSBQS0NTIzEgb3IgU0VDMSBQRU0gc3RyaW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgICBwcml2YXRlIHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfd3JpdGVfa2V5X3BlbSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisjZW5kaWYgLyogTUJFRFRMU19QS19XUklURV9DICovCisKKy8qCisgKiBXQVJOSU5HOiBMb3ctbGV2ZWwgZnVuY3Rpb25zLiBZb3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8gdXNlIHRoZXNlIHVubGVzcworICogICAgICAgICAgeW91IGFyZSBjZXJ0YWluIHlvdSBkbyA7KQorICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBQYXJzZSBhIFN1YmplY3RQdWJsaWNLZXlJbmZvIERFUiBzdHJ1Y3R1cmUKKyAqCisgKiBccGFyYW0gcCAgICAgICAgIHRoZSBwb3NpdGlvbiBpbiB0aGUgQVNOLjEgZGF0YQorICogXHBhcmFtIGVuZCAgICAgICBlbmQgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIHBrICAgICAgICB0aGUga2V5IHRvIGZpbGwKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBQSyBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX3N1YnB1YmtleSggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqcGsgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFdyaXRlIGEgc3ViamVjdFB1YmxpY0tleSB0byBBU04uMSBkYXRhCisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGZ1bmN0aW9uIHdvcmtzIGJhY2t3YXJkcyBpbiBkYXRhIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBwICAgICAgICAgcmVmZXJlbmNlIHRvIGN1cnJlbnQgcG9zaXRpb24gcG9pbnRlcgorICogXHBhcmFtIHN0YXJ0ICAgICBzdGFydCBvZiB0aGUgYnVmZmVyIChmb3IgYm91bmRzLWNoZWNraW5nKQorICogXHBhcmFtIGtleSAgICAgICBwdWJsaWMga2V5IHRvIHdyaXRlIGF3YXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgIHRoZSBsZW5ndGggd3JpdHRlbiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5KCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSApOworI2VuZGlmIC8qIE1CRURUTFNfUEtfV1JJVEVfQyAqLworCisvKgorICogSW50ZXJuYWwgbW9kdWxlIGZ1bmN0aW9ucy4gWW91IHByb2JhYmx5IGRvIG5vdCB3YW50IHRvIHVzZSB0aGVzZSB1bmxlc3MgeW91CisgKiBrbm93IHlvdSBkby4KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYmVkdGxzX3BrX2xvYWRfZmlsZSggY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqKmJ1Ziwgc2l6ZV90ICpuICk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfUEtfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa19pbnRlcm5hbC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDBmMjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrX2ludGVybmFsLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKgorICogXGZpbGUgcGsuaAorICoKKyAqIFxicmllZiBQdWJsaWMgS2V5IGFic3RyYWN0aW9uIGxheWVyOiB3cmFwcGVyIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWZuZGVmIE1CRURUTFNfUEtfV1JBUF9ICisjZGVmaW5lIE1CRURUTFNfUEtfV1JBUF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAicGsuaCIKKworc3RydWN0IG1iZWR0bHNfcGtfaW5mb190Cit7CisgICAgLyoqIFB1YmxpYyBrZXkgdHlwZSAqLworICAgIG1iZWR0bHNfcGtfdHlwZV90IHR5cGU7CisKKyAgICAvKiogVHlwZSBuYW1lICovCisgICAgY29uc3QgY2hhciAqbmFtZTsKKworICAgIC8qKiBHZXQga2V5IHNpemUgaW4gYml0cyAqLworICAgIHNpemVfdCAoKmdldF9iaXRsZW4pKCBjb25zdCB2b2lkICogKTsKKworICAgIC8qKiBUZWxsIGlmIHRoZSBjb250ZXh0IGltcGxlbWVudHMgdGhpcyB0eXBlIChlLmcuIEVDS0VZIGNhbiBkbyBFQ0RTQSkgKi8KKyAgICBpbnQgKCpjYW5fZG8pKCBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlICk7CisKKyAgICAvKiogVmVyaWZ5IHNpZ25hdHVyZSAqLworICAgIGludCAoKnZlcmlmeV9mdW5jKSggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuICk7CisKKyAgICAvKiogTWFrZSBzaWduYXR1cmUgKi8KKyAgICBpbnQgKCpzaWduX2Z1bmMpKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKyAgICAvKiogRGVjcnlwdCBtZXNzYWdlICovCisgICAgaW50ICgqZGVjcnlwdF9mdW5jKSggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworICAgIC8qKiBFbmNyeXB0IG1lc3NhZ2UgKi8KKyAgICBpbnQgKCplbmNyeXB0X2Z1bmMpKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwgc2l6ZV90IG9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisgICAgLyoqIENoZWNrIHB1YmxpYy1wcml2YXRlIGtleSBwYWlyICovCisgICAgaW50ICgqY2hlY2tfcGFpcl9mdW5jKSggY29uc3Qgdm9pZCAqcHViLCBjb25zdCB2b2lkICpwcnYgKTsKKworICAgIC8qKiBBbGxvY2F0ZSBhIG5ldyBjb250ZXh0ICovCisgICAgdm9pZCAqICgqY3R4X2FsbG9jX2Z1bmMpKCB2b2lkICk7CisKKyAgICAvKiogRnJlZSB0aGUgZ2l2ZW4gY29udGV4dCAqLworICAgIHZvaWQgKCpjdHhfZnJlZV9mdW5jKSggdm9pZCAqY3R4ICk7CisKKyAgICAvKiogSW50ZXJmYWNlIHdpdGggdGhlIGRlYnVnIG1vZHVsZSAqLworICAgIHZvaWQgKCpkZWJ1Z19mdW5jKSggY29uc3Qgdm9pZCAqY3R4LCBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0gKml0ZW1zICk7CisKK307CisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKy8qIENvbnRhaW5lciBmb3IgUlNBLWFsdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2b2lkICprZXk7CisgICAgbWJlZHRsc19wa19yc2FfYWx0X2RlY3J5cHRfZnVuYyBkZWNyeXB0X2Z1bmM7CisgICAgbWJlZHRsc19wa19yc2FfYWx0X3NpZ25fZnVuYyBzaWduX2Z1bmM7CisgICAgbWJlZHRsc19wa19yc2FfYWx0X2tleV9sZW5fZnVuYyBrZXlfbGVuX2Z1bmM7Cit9IG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19yc2FfaW5mbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190IG1iZWR0bHNfZWNrZXlfaW5mbzsKK2V4dGVybiBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX2Vja2V5ZGhfaW5mbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCitleHRlcm4gY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19lY2RzYV9pbmZvOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUKQorZXh0ZXJuIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190IG1iZWR0bHNfcnNhX2FsdF9pbmZvOworI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1dSQVBfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa2NzMTEuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4ODkyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczExLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qKgorICogXGZpbGUgcGtjczExLmgKKyAqCisgKiBcYnJpZWYgV3JhcHBlciBmb3IgUEtDUyMxMSBsaWJyYXJ5IGxpYnBrY3MxMS1oZWxwZXIKKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUEtDUzExX0gKKyNkZWZpbmUgTUJFRFRMU19QS0NTMTFfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTFfQykKKworI2luY2x1ZGUgIng1MDlfY3J0LmgiCisKKyNpbmNsdWRlIDxwa2NzMTEtaGVscGVyLTEuMC9wa2NzMTFoLWNlcnRpZmljYXRlLmg+CisKKyNpZiAoIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSApICYmIFwKKyAgICAhZGVmaW5lZChpbmxpbmUpICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogQ29udGV4dCBmb3IgUEtDUyAjMTEgcHJpdmF0ZSBrZXlzLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHBrY3MxMWhfY2VydGlmaWNhdGVfdCBwa2NzMTFoX2NlcnQ7CisgICAgICAgIGludCBsZW47Cit9IG1iZWR0bHNfcGtjczExX2NvbnRleHQ7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIG1iZWR0bHNfcGtjczExX2NvbnRleHQuCisgKiAoSnVzdCBtYWtpbmcgbWVtb3J5IHJlZmVyZW5jZXMgdmFsaWQuKQorICovCit2b2lkIG1iZWR0bHNfcGtjczExX2luaXQoIG1iZWR0bHNfcGtjczExX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIEZpbGwgaW4gYSBtYmVkIFRMUyBjZXJ0aWZpY2F0ZSwgYmFzZWQgb24gdGhlIGdpdmVuIFBLQ1MxMSBoZWxwZXIgY2VydGlmaWNhdGUuCisgKgorICogXHBhcmFtIGNlcnQgICAgICAgICAgWC41MDkgY2VydGlmaWNhdGUgdG8gZmlsbAorICogXHBhcmFtIHBrY3MxMWhfY2VydCAgUEtDUyAjMTEgaGVscGVyIGNlcnRpZmljYXRlCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLgorICovCitpbnQgbWJlZHRsc19wa2NzMTFfeDUwOV9jZXJ0X2JpbmQoIG1iZWR0bHNfeDUwOV9jcnQgKmNlcnQsIHBrY3MxMWhfY2VydGlmaWNhdGVfdCBwa2NzMTFoX2NlcnQgKTsKKworLyoqCisgKiBTZXQgdXAgYSBtYmVkdGxzX3BrY3MxMV9jb250ZXh0IHN0b3JpbmcgdGhlIGdpdmVuIGNlcnRpZmljYXRlLiBOb3RlIHRoYXQgdGhlCisgKiBtYmVkdGxzX3BrY3MxMV9jb250ZXh0IHdpbGwgdGFrZSBvdmVyIGNvbnRyb2wgb2YgdGhlIGNlcnRpZmljYXRlLCBmcmVlaW5nIGl0IHdoZW4KKyAqIGRvbmUuCisgKgorICogXHBhcmFtIHByaXZfa2V5ICAgICAgUHJpdmF0ZSBrZXkgc3RydWN0dXJlIHRvIGZpbGwuCisgKiBccGFyYW0gcGtjczExX2NlcnQgICBQS0NTICMxMSBoZWxwZXIgY2VydGlmaWNhdGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqLworaW50IG1iZWR0bHNfcGtjczExX3ByaXZfa2V5X2JpbmQoIG1iZWR0bHNfcGtjczExX2NvbnRleHQgKnByaXZfa2V5LAorICAgICAgICBwa2NzMTFoX2NlcnRpZmljYXRlX3QgcGtjczExX2NlcnQgKTsKKworLyoqCisgKiBGcmVlIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gcHJpdmF0ZSBrZXkgY29udGV4dC4gTm90ZSB0aGF0IHRoZSBzdHJ1Y3R1cmUKKyAqIGl0c2VsZiBpcyBub3QgZnJlZWQuCisgKgorICogXHBhcmFtIHByaXZfa2V5ICAgICAgUHJpdmF0ZSBrZXkgc3RydWN0dXJlIHRvIGNsZWFudXAKKyAqLwordm9pZCBtYmVkdGxzX3BrY3MxMV9wcml2X2tleV9mcmVlKCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpwcml2X2tleSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBEbyBhbiBSU0EgcHJpdmF0ZSBrZXkgZGVjcnlwdCwgdGhlbiByZW1vdmUgdGhlIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICBwYWRkaW5nCisgKgorICogXHBhcmFtIGN0eCAgICAgIFBLQ1MgIzExIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBtdXN0IGJlIE1CRURUTFNfUlNBX1BSSVZBVEUsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggcnNhLmMncyBzaWduYXR1cmUKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgZW5jcnlwdGVkIGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIHBsYWludGV4dAorICogXHBhcmFtIG9sZW4gICAgIHdpbGwgY29udGFpbiB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIG91dHB1dF9tYXhfbGVuICAgIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBvdXRwdXQgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkgb3RoZXJ3aXNlCisgKiAgICAgICAgICAgICAgICAgYW4gZXJyb3IgaXMgdGhyb3duLgorICovCitpbnQgbWJlZHRsc19wa2NzMTFfZGVjcnlwdCggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRG8gYSBwcml2YXRlIFJTQSB0byBzaWduIGEgbWVzc2FnZSBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUEtDUyAjMTEgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIG11c3QgYmUgTUJFRFRMU19SU0FfUFJJVkFURSwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCByc2EuYydzIHNpZ25hdHVyZQorICogXHBhcmFtIG1kX2FsZyAgIGEgTUJFRFRMU19NRF9YWFggKHVzZSBNQkVEVExTX01EX05PTkUgZm9yIHNpZ25pbmcgcmF3IGRhdGEpCisgKiBccGFyYW0gaGFzaGxlbiAgbWVzc2FnZSBkaWdlc3QgbGVuZ3RoIChmb3IgTUJFRFRMU19NRF9OT05FIG9ubHkpCisgKiBccGFyYW0gaGFzaCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UgZGlnZXN0CisgKiBccGFyYW0gc2lnICAgICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhlIHNpZ25pbmcgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgInNpZyIgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKi8KK2ludCBtYmVkdGxzX3BrY3MxMV9zaWduKCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKTsKKworLyoqCisgKiBTU0wvVExTIHdyYXBwZXJzIGZvciBQS0NTIzExIGZ1bmN0aW9ucworICovCitzdGF0aWMgaW5saW5lIGludCBtYmVkdGxzX3NzbF9wa2NzMTFfZGVjcnlwdCggdm9pZCAqY3R4LCBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfcGtjczExX2RlY3J5cHQoIChtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICopIGN0eCwgbW9kZSwgb2xlbiwgaW5wdXQsIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9tYXhfbGVuICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1iZWR0bHNfc3NsX3BrY3MxMV9zaWduKCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgICgodm9pZCkgZl9ybmcpOworICAgICgodm9pZCkgcF9ybmcpOworICAgIHJldHVybiBtYmVkdGxzX3BrY3MxMV9zaWduKCAobWJlZHRsc19wa2NzMTFfY29udGV4dCAqKSBjdHgsIG1vZGUsIG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hsZW4sIGhhc2gsIHNpZyApOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBtYmVkdGxzX3NzbF9wa2NzMTFfa2V5X2xlbiggdm9pZCAqY3R4ICkKK3sKKyAgICByZXR1cm4gKCAobWJlZHRsc19wa2NzMTFfY29udGV4dCAqKSBjdHggKS0+bGVuOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTFfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTFfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wa2NzMTIuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyZDkwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczEyLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qKgorICogXGZpbGUgcGtjczEyLmgKKyAqCisgKiBcYnJpZWYgUEtDUyMxMiBQZXJzb25hbCBJbmZvcm1hdGlvbiBFeGNoYW5nZSBTeW50YXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19QS0NTMTJfSAorI2RlZmluZSBNQkVEVExTX1BLQ1MxMl9ICisKKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorI2luY2x1ZGUgImFzbjEuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1MxMl9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgLTB4MUY4MCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAtMHgxRjAwICAvKio8IEZlYXR1cmUgbm90IGF2YWlsYWJsZSwgZS5nLiB1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIHNjaGVtZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVCAgICAgICAgICAgICAtMHgxRTgwICAvKio8IFBCRSBBU04uMSBkYXRhIG5vdCBhcyBleHBlY3RlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtDUzEyX1BBU1NXT1JEX01JU01BVENIICAgICAgICAgICAgICAtMHgxRTAwICAvKio8IEdpdmVuIHByaXZhdGUga2V5IHBhc3N3b3JkIGRvZXMgbm90IGFsbG93IGZvciBjb3JyZWN0IGRlY3J5cHRpb24uICovCisKKyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfREVSSVZFX0tFWSAgICAgICAxICAgLyoqPCBlbmNyeXB0aW9uL2RlY3J5cHRpb24ga2V5ICovCisjZGVmaW5lIE1CRURUTFNfUEtDUzEyX0RFUklWRV9JViAgICAgICAgMiAgIC8qKjwgaW5pdGlhbGl6YXRpb24gdmVjdG9yICAgICAqLworI2RlZmluZSBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfTUFDX0tFWSAgIDMgICAvKio8IGludGVncml0eSAvIE1BQyBrZXkgICAgICAgKi8KKworI2RlZmluZSBNQkVEVExTX1BLQ1MxMl9QQkVfREVDUllQVCAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19QS0NTMTJfUEJFX0VOQ1JZUFQgICAgICAxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICBQS0NTMTIgUGFzc3dvcmQgQmFzZWQgZnVuY3Rpb24gKGVuY3J5cHRpb24gLyBkZWNyeXB0aW9uKQorICogICAgICAgICAgICAgICAgICAgZm9yIHBiZVdpdGhTSEFBbmQxMjhCaXRSQzQKKyAqCisgKiBccGFyYW0gcGJlX3BhcmFtcyBhbiBBU04xIGJ1ZmZlciBjb250YWluaW5nIHRoZSBwa2NzLTEyUGJlUGFyYW1zIHN0cnVjdHVyZQorICogXHBhcmFtIG1vZGUgICAgICAgZWl0aGVyIE1CRURUTFNfUEtDUzEyX1BCRV9FTkNSWVBUIG9yIE1CRURUTFNfUEtDUzEyX1BCRV9ERUNSWVBUCisgKiBccGFyYW0gcHdkICAgICAgICB0aGUgcGFzc3dvcmQgdXNlZCAobWF5IGJlIE5VTEwgaWYgbm8gcGFzc3dvcmQgaXMgdXNlZCkKKyAqIFxwYXJhbSBwd2RsZW4gICAgIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQgKG1heSBiZSAwKQorICogXHBhcmFtIGlucHV0ICAgICAgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBsZW4gICAgICAgIGRhdGEgbGVuZ3RoCisgKiBccGFyYW0gb3V0cHV0ICAgICB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBNQkVEVExTX0VSUl9YWFggY29kZQorICovCitpbnQgbWJlZHRsc19wa2NzMTJfcGJlX3NoYTFfcmM0XzEyOCggbWJlZHRsc19hc24xX2J1ZiAqcGJlX3BhcmFtcywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICBQS0NTMTIgUGFzc3dvcmQgQmFzZWQgZnVuY3Rpb24gKGVuY3J5cHRpb24gLyBkZWNyeXB0aW9uKQorICogICAgICAgICAgICAgICAgICAgZm9yIGNpcGhlci1iYXNlZCBhbmQgbWJlZHRsc19tZC1iYXNlZCBQQkUncworICoKKyAqIFxwYXJhbSBwYmVfcGFyYW1zIGFuIEFTTjEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBrY3MtMTJQYmVQYXJhbXMgc3RydWN0dXJlCisgKiBccGFyYW0gbW9kZSAgICAgICBlaXRoZXIgTUJFRFRMU19QS0NTMTJfUEJFX0VOQ1JZUFQgb3IgTUJFRFRMU19QS0NTMTJfUEJFX0RFQ1JZUFQKKyAqIFxwYXJhbSBjaXBoZXJfdHlwZSB0aGUgY2lwaGVyIHVzZWQKKyAqIFxwYXJhbSBtZF90eXBlICAgICB0aGUgbWJlZHRsc19tZCB1c2VkCisgKiBccGFyYW0gcHdkICAgICAgICB0aGUgcGFzc3dvcmQgdXNlZCAobWF5IGJlIE5VTEwgaWYgbm8gcGFzc3dvcmQgaXMgdXNlZCkKKyAqIFxwYXJhbSBwd2RsZW4gICAgIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQgKG1heSBiZSAwKQorICogXHBhcmFtIGlucHV0ICAgICAgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBsZW4gICAgICAgIGRhdGEgbGVuZ3RoCisgKiBccGFyYW0gb3V0cHV0ICAgICB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBNQkVEVExTX0VSUl9YWFggY29kZQorICovCitpbnQgbWJlZHRsc19wa2NzMTJfcGJlKCBtYmVkdGxzX2FzbjFfYnVmICpwYmVfcGFyYW1zLCBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX3R5cGUsIG1iZWR0bHNfbWRfdHlwZV90IG1kX3R5cGUsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCAgc2l6ZV90IHB3ZGxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICBUaGUgUEtDUyMxMiBkZXJpdmF0aW9uIGZ1bmN0aW9uIHVzZXMgYSBwYXNzd29yZCBhbmQgYSBzYWx0CisgKiAgICAgICAgICAgICAgICAgICB0byBwcm9kdWNlIHBzZXVkby1yYW5kb20gYml0cyBmb3IgYSBwYXJ0aWN1bGFyICJwdXJwb3NlIi4KKyAqCisgKiAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGdpdmVuIGlkLCB0aGlzIGZ1bmN0aW9uIGNhbiBwcm9kdWNlIGFuCisgKiAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uL2RlY3J5cHRpb24ga2V5LCBhbiBuaXRpYWxpemF0aW9uIHZlY3RvciBvciBhbgorICogICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5IGtleS4KKyAqCisgKiBccGFyYW0gZGF0YSAgICAgICBidWZmZXIgdG8gc3RvcmUgdGhlIGRlcml2ZWQgZGF0YSBpbgorICogXHBhcmFtIGRhdGFsZW4gICAgbGVuZ3RoIHRvIGZpbGwKKyAqIFxwYXJhbSBwd2QgICAgICAgIHBhc3N3b3JkIHRvIHVzZSAobWF5IGJlIE5VTEwgaWYgbm8gcGFzc3dvcmQgaXMgdXNlZCkKKyAqIFxwYXJhbSBwd2RsZW4gICAgIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQgKG1heSBiZSAwKQorICogXHBhcmFtIHNhbHQgICAgICAgc2FsdCBidWZmZXIgdG8gdXNlCisgKiBccGFyYW0gc2FsdGxlbiAgICBsZW5ndGggb2YgdGhlIHNhbHQKKyAqIFxwYXJhbSBtYmVkdGxzX21kICAgICAgICAgbWJlZHRsc19tZCB0eXBlIHRvIHVzZSBkdXJpbmcgdGhlIGRlcml2YXRpb24KKyAqIFxwYXJhbSBpZCAgICAgICAgIGlkIHRoYXQgZGVzY3JpYmVzIHRoZSBwdXJwb3NlIChjYW4gYmUgTUJFRFRMU19QS0NTMTJfREVSSVZFX0tFWSwKKyAqICAgICAgICAgICAgICAgICAgIE1CRURUTFNfUEtDUzEyX0RFUklWRV9JViBvciBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfTUFDX0tFWSkKKyAqIFxwYXJhbSBpdGVyYXRpb25zIG51bWJlciBvZiBpdGVyYXRpb25zCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUQsIEJJR05VTSB0eXBlIGVycm9yLgorICovCitpbnQgbWJlZHRsc19wa2NzMTJfZGVyaXZhdGlvbiggdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgc2l6ZV90IHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1iZWR0bHNfbWQsIGludCBpZCwgaW50IGl0ZXJhdGlvbnMgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHBrY3MxMi5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3M1LmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3BrY3M1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1Y2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGtjczUuaApAQCAtMCwwICsxLDk0IEBACisvKioKKyAqIFxmaWxlIHBrY3M1LmgKKyAqCisgKiBcYnJpZWYgUEtDUyM1IGZ1bmN0aW9ucworICoKKyAqIFxhdXRob3IgTWF0aGlhcyBPbHNzb24gPG1hdGhpYXNAa29tcGV0ZW5zdW0uY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1BLQ1M1X0gKKyNkZWZpbmUgTUJFRFRMU19QS0NTNV9ICisKKyNpbmNsdWRlICJhc24xLmgiCisjaW5jbHVkZSAibWQuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1CRURUTFNfRVJSX1BLQ1M1X0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAgLTB4MmY4MCAgLyoqPCBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgICAgICAgICAgICAgICAgICAtMHgyZjAwICAvKio8IFVuZXhwZWN0ZWQgQVNOLjEgZGF0YS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSAgICAgICAgICAgICAtMHgyZTgwICAvKio8IFJlcXVlc3RlZCBlbmNyeXB0aW9uIG9yIGRpZ2VzdCBhbGcgbm90IGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0ggICAgICAgICAgICAgICAtMHgyZTAwICAvKio8IEdpdmVuIHByaXZhdGUga2V5IHBhc3N3b3JkIGRvZXMgbm90IGFsbG93IGZvciBjb3JyZWN0IGRlY3J5cHRpb24uICovCisKKyNkZWZpbmUgTUJFRFRMU19QS0NTNV9ERUNSWVBUICAgICAgMAorI2RlZmluZSBNQkVEVExTX1BLQ1M1X0VOQ1JZUFQgICAgICAxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUEtDUyM1IFBCRVMyIGZ1bmN0aW9uCisgKgorICogXHBhcmFtIHBiZV9wYXJhbXMgdGhlIEFTTi4xIGFsZ29yaXRobSBwYXJhbWV0ZXJzCisgKiBccGFyYW0gbW9kZSAgICAgICBlaXRoZXIgTUJFRFRMU19QS0NTNV9ERUNSWVBUIG9yIE1CRURUTFNfUEtDUzVfRU5DUllQVAorICogXHBhcmFtIHB3ZCAgICAgICAgcGFzc3dvcmQgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBrZXkKKyAqIFxwYXJhbSBwd2RsZW4gICAgIGxlbmd0aCBvZiBwYXNzd29yZAorICogXHBhcmFtIGRhdGEgICAgICAgZGF0YSB0byBwcm9jZXNzCisgKiBccGFyYW0gZGF0YWxlbiAgICBsZW5ndGggb2YgZGF0YQorICogXHBhcmFtIG91dHB1dCAgICAgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm5zICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgTUJFRFRMU19FUlJfWFhYIGNvZGUgaWYgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19wa2NzNV9wYmVzMiggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqcGJlX3BhcmFtcywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUEtDUyM1IFBCS0RGMiB1c2luZyBITUFDCisgKgorICogXHBhcmFtIGN0eCAgICAgIEdlbmVyaWMgSE1BQyBjb250ZXh0CisgKiBccGFyYW0gcGFzc3dvcmQgUGFzc3dvcmQgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyBrZXkKKyAqIFxwYXJhbSBwbGVuICAgICBMZW5ndGggb2YgcGFzc3dvcmQKKyAqIFxwYXJhbSBzYWx0ICAgICBTYWx0IHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcga2V5CisgKiBccGFyYW0gc2xlbiAgICAgTGVuZ3RoIG9mIHNhbHQKKyAqIFxwYXJhbSBpdGVyYXRpb25fY291bnQgICAgICAgSXRlcmF0aW9uIGNvdW50CisgKiBccGFyYW0ga2V5X2xlbmd0aCAgICAgICAgICAgIExlbmd0aCBvZiBnZW5lcmF0ZWQga2V5IGluIGJ5dGVzCisgKiBccGFyYW0gb3V0cHV0ICAgR2VuZXJhdGVkIGtleS4gTXVzdCBiZSBhdCBsZWFzdCBhcyBiaWcgYXMga2V5X2xlbmd0aAorICoKKyAqIFxyZXR1cm5zICAgICAgICAwIG9uIHN1Y2Nlc3MsIG9yIGEgTUJFRFRMU19FUlJfWFhYIGNvZGUgaWYgdmVyaWZpY2F0aW9uIGZhaWxzLgorICovCitpbnQgbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYyggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBzaXplX3Qgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGl0ZXJhdGlvbl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5X2xlbmd0aCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3BrY3M1X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHBrY3M1LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGxhdGZvcm0uaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWIwMTllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMjk1IEBACisvKioKKyAqIFxmaWxlIHBsYXRmb3JtLmgKKyAqCisgKiBcYnJpZWYgbWJlZCBUTFMgUGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19QTEFURk9STV9ICisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybV90aW1lLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUykKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URikKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgICBtYmVkdGxzX3BsYXRmb3JtX3dpbjMyX3NucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiB0byB1c2UgICovCisjZWxzZQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URiAgIHNucHJpbnRmIC8qKjwgRGVmYXVsdCBzbnByaW50ZiB0byB1c2UgICovCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URikKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfUFJJTlRGICAgcHJpbnRmIC8qKjwgRGVmYXVsdCBwcmludGYgdG8gdXNlICAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URikKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URiBmcHJpbnRmIC8qKjwgRGVmYXVsdCBmcHJpbnRmIHRvIHVzZSAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgICBjYWxsb2MgLyoqPCBEZWZhdWx0IGFsbG9jYXRvciB0byB1c2UgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUgICAgICAgZnJlZSAvKio8IERlZmF1bHQgZnJlZSB0byB1c2UgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQgICAgICBleGl0IC8qKjwgRGVmYXVsdCBleGl0IHRvIHVzZSAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfVElNRSkKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfVElNRSAgICAgICB0aW1lICAgIC8qKjwgRGVmYXVsdCB0aW1lIHRvIHVzZSAqLworI2VuZGlmCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9TVUNDRVNTKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX1NVQ0NFU1MgIEVYSVRfU1VDQ0VTUyAvKio8IERlZmF1bHQgZXhpdCB2YWx1ZSB0byB1c2UgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfRkFJTFVSRSkKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRVhJVF9GQUlMVVJFICBFWElUX0ZBSUxVUkUgLyoqPCBEZWZhdWx0IGV4aXQgdmFsdWUgdG8gdXNlICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9SRUFEKQorI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQKKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUpCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfd3JpdGUKKyNlbmRpZgorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSkKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFICAgInNlZWRmaWxlIgorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworI2Vsc2UgLyogTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9NRU1fSERSKQorI2luY2x1ZGUgTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUgorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TICovCisKKworLyogXH0gbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MgKi8KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3IgY2FsbG9jIGFuZCBmcmVlCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0NBTExPQ19NQUNSTykKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIE1CRURUTFNfUExBVEZPUk1fRlJFRV9NQUNSTworI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICAgTUJFRFRMU19QTEFURk9STV9DQUxMT0NfTUFDUk8KKyNlbHNlCisvKiBGb3Igc2l6ZV90ICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CitleHRlcm4gdm9pZCAqICgqbWJlZHRsc19jYWxsb2MpKCBzaXplX3Qgbiwgc2l6ZV90IHNpemUgKTsKK2V4dGVybiB2b2lkICgqbWJlZHRsc19mcmVlKSggdm9pZCAqcHRyICk7CisKKy8qKgorICogXGJyaWVmICAgU2V0IHlvdXIgb3duIG1lbW9yeSBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiBwb2ludGVycworICoKKyAqIFxwYXJhbSBjYWxsb2NfZnVuYyAgIHRoZSBjYWxsb2MgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqIFxwYXJhbSBmcmVlX2Z1bmMgICAgIHRoZSBmcmVlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9jYWxsb2NfZnJlZSggdm9pZCAqICgqY2FsbG9jX2Z1bmMpKCBzaXplX3QsIHNpemVfdCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZyZWVfZnVuYykoIHZvaWQgKiApICk7CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9GUkVFX01BQ1JPICYmIE1CRURUTFNfUExBVEZPUk1fQ0FMTE9DX01BQ1JPICovCisjZWxzZSAvKiAhTUJFRFRMU19QTEFURk9STV9NRU1PUlkgKi8KKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgIGNhbGxvYworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZICYmICFNQkVEVExTX1BMQVRGT1JNX3tGUkVFLENBTExPQ31fTUFDUk8gKi8KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3IgZnByaW50ZgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUKQorLyogV2UgbmVlZCBGSUxFICogKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorZXh0ZXJuIGludCAoKm1iZWR0bHNfZnByaW50ZikoIEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKTsKKworLyoqCisgKiBcYnJpZWYgICBTZXQgeW91ciBvd24gZnByaW50ZiBmdW5jdGlvbiBwb2ludGVyCisgKgorICogXHBhcmFtIGZwcmludGZfZnVuYyAgIHRoZSBmcHJpbnRmIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZnByaW50ZiggaW50ICgqZnByaW50Zl9mdW5jKSggRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiApICk7CisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPKQorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX01BQ1JPCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTyAqLworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQgKi8KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3IgcHJpbnRmCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCkKK2V4dGVybiBpbnQgKCptYmVkdGxzX3ByaW50ZikoIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uICk7CisKKy8qKgorICogXGJyaWVmICAgU2V0IHlvdXIgb3duIHByaW50ZiBmdW5jdGlvbiBwb2ludGVyCisgKgorICogXHBhcmFtIHByaW50Zl9mdW5jICAgdGhlIHByaW50ZiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X3ByaW50ZiggaW50ICgqcHJpbnRmX2Z1bmMpKCBjb25zdCBjaGFyICosIC4uLiApICk7CisjZWxzZSAvKiAhTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTykKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX01BQ1JPCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9QUklOVEZfTUFDUk8gKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQgKi8KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3Igc25wcmludGYKKyAqCisgKiBUaGUgc25wcmludGYgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNvbmZvcm0gdG8gQzk5OgorICogLSBpdCAqbXVzdCogYWx3YXlzIGNvcnJlY3RseSB6ZXJvLXRlcm1pbmF0ZSB0aGUgYnVmZmVyCisgKiAgIChleGNlcHQgd2hlbiBuID09IDAsIHRoZW4gaXQgbXVzdCBsZWF2ZSB0aGUgYnVmZmVyIHVudG91Y2hlZCkKKyAqIC0gaG93ZXZlciBpdCBpcyBhY2NlcHRhYmxlIHRvIHJldHVybiAtMSBpbnN0ZWFkIG9mIHRoZSByZXF1aXJlZCBsZW5ndGggd2hlbgorICogICB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIHRvbyBzaG9ydC4KKyAqLworI2lmIGRlZmluZWQoX1dJTjMyKQorLyogRm9yIFdpbmRvd3MgKGluYy4gTVNZUzIpLCB3ZSBwcm92aWRlIG91ciBvd24gZml4ZWQgaW1wbGVtZW50YXRpb24gKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3dpbjMyX3NucHJpbnRmKCBjaGFyICpzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCkKK2V4dGVybiBpbnQgKCptYmVkdGxzX3NucHJpbnRmKSggY2hhciAqIHMsIHNpemVfdCBuLCBjb25zdCBjaGFyICogZm9ybWF0LCAuLi4gKTsKKworLyoqCisgKiBcYnJpZWYgICBTZXQgeW91ciBvd24gc25wcmludGYgZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIFxwYXJhbSBzbnByaW50Zl9mdW5jICAgdGhlIHNucHJpbnRmIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgMAorICovCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfc25wcmludGYoIGludCAoKnNucHJpbnRmX2Z1bmMpKCBjaGFyICogcywgc2l6ZV90IG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uICkgKTsKKyNlbHNlIC8qIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPKQorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTworI2Vsc2UKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9NQUNSTyAqLworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUICovCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGV4aXQKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9FWElUX0FMVCkKK2V4dGVybiB2b2lkICgqbWJlZHRsc19leGl0KSggaW50IHN0YXR1cyApOworCisvKioKKyAqIFxicmllZiAgIFNldCB5b3VyIG93biBleGl0IGZ1bmN0aW9uIHBvaW50ZXIKKyAqCisgKiBccGFyYW0gZXhpdF9mdW5jICAgdGhlIGV4aXQgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9leGl0KCB2b2lkICgqZXhpdF9mdW5jKSggaW50IHN0YXR1cyApICk7CisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPKQorI2RlZmluZSBtYmVkdGxzX2V4aXQgICBNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8KKyNlbHNlCisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgIGV4aXQKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0VYSVRfTUFDUk8gKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUICovCisKKy8qCisgKiBUaGUgZGVmYXVsdCBleGl0IHZhbHVlcworICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX1NVQ0NFU1MpCisjZGVmaW5lIE1CRURUTFNfRVhJVF9TVUNDRVNTIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfU1VDQ0VTUworI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19FWElUX1NVQ0NFU1MgMAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUX0ZBSUxVUkUpCisjZGVmaW5lIE1CRURUTFNfRVhJVF9GQUlMVVJFIE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVRfRkFJTFVSRQorI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19FWElUX0ZBSUxVUkUgMQorI2VuZGlmCisKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyBhIHNlZWQgZmlsZSB0bworICogTm9uLVZvbGF0aWxlIHN0b3JhZ2UgKE5WKSBpbiBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHdheQorICoKKyAqIE9ubHkgZW5hYmxlZCB3aGVuIHRoZSBOViBzZWVkIGVudHJvcHkgc291cmNlIGlzIGVuYWJsZWQKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKiBJbnRlcm5hbCBzdGFuZGFyZCBwbGF0Zm9ybSBkZWZpbml0aW9ucyAqLworaW50IG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfcmVhZCggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApOworaW50IG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfd3JpdGUoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUKQorZXh0ZXJuIGludCAoKm1iZWR0bHNfbnZfc2VlZF9yZWFkKSggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApOworZXh0ZXJuIGludCAoKm1iZWR0bHNfbnZfc2VlZF93cml0ZSkoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICBTZXQgeW91ciBvd24gc2VlZCBmaWxlIHdyaXRpbmcvcmVhZGluZyBmdW5jdGlvbnMKKyAqCisgKiBccGFyYW0gICBudl9zZWVkX3JlYWRfZnVuYyAgIHRoZSBzZWVkIHJlYWRpbmcgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqIFxwYXJhbSAgIG52X3NlZWRfd3JpdGVfZnVuYyAgdGhlIHNlZWQgd3JpdGluZyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIDAKKyAqLworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X252X3NlZWQoCisgICAgICAgICAgICBpbnQgKCpudl9zZWVkX3JlYWRfZnVuYykoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKSwKKyAgICAgICAgICAgIGludCAoKm52X3NlZWRfd3JpdGVfZnVuYykoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQorICAgICAgICAgICAgKTsKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfUkVBRF9NQUNSTykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9OVl9TRUVEX1dSSVRFX01BQ1JPKQorI2RlZmluZSBtYmVkdGxzX252X3NlZWRfcmVhZCAgICBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfUkVBRF9NQUNSTworI2RlZmluZSBtYmVkdGxzX252X3NlZWRfd3JpdGUgICBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfV1JJVEVfTUFDUk8KKyNlbHNlCisjZGVmaW5lIG1iZWR0bHNfbnZfc2VlZF9yZWFkICAgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfcmVhZAorI2RlZmluZSBtYmVkdGxzX252X3NlZWRfd3JpdGUgICBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUICovCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX05WX1NFRUQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHBsYXRmb3JtLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGxhdGZvcm1fdGltZS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9wbGF0Zm9ybV90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiMzQzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcGxhdGZvcm1fdGltZS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKgorICogXGZpbGUgcGxhdGZvcm1fdGltZS5oCisgKgorICogXGJyaWVmIG1iZWQgVExTIFBsYXRmb3JtIHRpbWUgYWJzdHJhY3Rpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19QTEFURk9STV9USU1FX0gKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9USU1FX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcbmFtZSBTRUNUSU9OOiBNb2R1bGUgc2V0dGluZ3MKKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBjYW4gc2V0IGZvciB0aGlzIG1vZHVsZSBhcmUgaW4gdGhpcyBzZWN0aW9uLgorICogRWl0aGVyIGNoYW5nZSB0aGVtIGluIGNvbmZpZy5oIG9yIGRlZmluZSB0aGVtIG9uIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUuCisgKiBceworICovCisKKy8qCisgKiBUaGUgdGltZV90IGRhdGF0eXBlCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9UWVBFX01BQ1JPKQordHlwZWRlZiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfVFlQRV9NQUNSTyBtYmVkdGxzX3RpbWVfdDsKKyNlbHNlCisvKiBGb3IgdGltZV90ICovCisjaW5jbHVkZSA8dGltZS5oPgordHlwZWRlZiB0aW1lX3QgbWJlZHRsc190aW1lX3Q7CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9USU1FX1RZUEVfTUFDUk8gKi8KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3IgdGltZQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUKQorZXh0ZXJuIG1iZWR0bHNfdGltZV90ICgqbWJlZHRsc190aW1lKSggbWJlZHRsc190aW1lX3QqIHRpbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICBTZXQgeW91ciBvd24gdGltZSBmdW5jdGlvbiBwb2ludGVyCisgKgorICogXHBhcmFtICAgdGltZV9mdW5jICAgdGhlIHRpbWUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAwCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF90aW1lKCBtYmVkdGxzX3RpbWVfdCAoKnRpbWVfZnVuYykoIG1iZWR0bHNfdGltZV90KiB0aW1lICkgKTsKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8pCisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICBNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8KKyNlbHNlCisjZGVmaW5lIG1iZWR0bHNfdGltZSAgIHRpbWUKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfTUFDUk8gKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBwbGF0Zm9ybV90aW1lLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcmlwZW1kMTYwLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3JpcGVtZDE2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwODNmYzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3JpcGVtZDE2MC5oCkBAIC0wLDAgKzEsMTM4IEBACisvKioKKyAqIFxmaWxlIHJpcGVtZDE2MC5oCisgKgorICogXGJyaWVmIFJJUEUgTUQtMTYwIG1lc3NhZ2UgZGlnZXN0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfUklQRU1EMTYwX0gKKyNkZWZpbmUgTUJFRFRMU19SSVBFTUQxNjBfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19SSVBFTUQxNjBfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBSSVBFTUQtMTYwIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdG90YWxbMl07ICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCAgKi8KKyAgICB1aW50MzJfdCBzdGF0ZVs1XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCit9CittYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIFJJUEVNRC0xNjAgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBSSVBFTUQtMTYwIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9pbml0KCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgUklQRU1ELTE2MCBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFJJUEVNRC0xNjAgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfZnJlZSggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsb25lICh0aGUgc3RhdGUgb2YpIGFuIFJJUEVNRC0xNjAgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX2Nsb25lKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpzcmMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUklQRU1ELTE2MCBjb250ZXh0IHNldHVwCisgKgorICogXHBhcmFtIGN0eCAgICAgIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9zdGFydHMoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSSVBFTUQtMTYwIHByb2Nlc3MgYnVmZmVyCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJJUEVNRC0xNjAgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX3VwZGF0ZSggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUklQRU1ELTE2MCBmaW5hbCBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUklQRU1ELTE2MCBjb250ZXh0CisgKiBccGFyYW0gb3V0cHV0ICAgUklQRU1ELTE2MCBjaGVja3N1bSByZXN1bHQKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9maW5pc2goIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMjBdICk7CisKKy8qIEludGVybmFsIHVzZSAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9wcm9jZXNzKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfUklQRU1EMTYwX0FMVCAqLworI2luY2x1ZGUgInJpcGVtZDE2MC5oIgorI2VuZGlmIC8qIE1CRURUTFNfUklQRU1EMTYwX0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE91dHB1dCA9IFJJUEVNRC0xNjAoIGlucHV0IGJ1ZmZlciApCisgKgorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIFJJUEVNRC0xNjAgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjAoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfcmlwZW1kMTYwX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG1iZWR0bHNfcmlwZW1kMTYwLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvcnNhLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3JzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTg1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3JzYS5oCkBAIC0wLDAgKzEsNjUyIEBACisvKioKKyAqIFxmaWxlIHJzYS5oCisgKgorICogXGJyaWVmIFRoZSBSU0EgcHVibGljLWtleSBjcnlwdG9zeXN0ZW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19SU0FfSAorI2RlZmluZSBNQkVEVExTX1JTQV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAibWQuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJ0aHJlYWRpbmcuaCIKKyNlbmRpZgorCisvKgorICogUlNBIEVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAgICAgICAtMHg0MDgwICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICAgICAgICAgICAgICAgICAgIC0weDQxMDAgIC8qKjwgSW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIHBhZGRpbmcgYW5kIGlzIHJlamVjdGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9SU0FfS0VZX0dFTl9GQUlMRUQgICAgICAgICAgICAgICAgICAgIC0weDQxODAgIC8qKjwgU29tZXRoaW5nIGZhaWxlZCBkdXJpbmcgZ2VuZXJhdGlvbiBvZiBhIGtleS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgICAgICAgICAgICAgICAgICAtMHg0MjAwICAvKio8IEtleSBmYWlsZWQgdG8gcGFzcyB0aGUgbGlicmFyeSdzIHZhbGlkaXR5IGNoZWNrLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9SU0FfUFVCTElDX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDQyODAgIC8qKjwgVGhlIHB1YmxpYyBrZXkgb3BlcmF0aW9uIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX1BSSVZBVEVfRkFJTEVEICAgICAgICAgICAgICAgICAgICAtMHg0MzAwICAvKio8IFRoZSBwcml2YXRlIGtleSBvcGVyYXRpb24gZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgIC0weDQzODAgIC8qKjwgVGhlIFBLQ1MjMSB2ZXJpZmljYXRpb24gZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9SU0FfT1VUUFVUX1RPT19MQVJHRSAgICAgICAgICAgICAgICAgIC0weDQ0MDAgIC8qKjwgVGhlIG91dHB1dCBidWZmZXIgZm9yIGRlY3J5cHRpb24gaXMgbm90IGxhcmdlIGVub3VnaC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAtMHg0NDgwICAvKio8IFRoZSByYW5kb20gZ2VuZXJhdG9yIGZhaWxlZCB0byBnZW5lcmF0ZSBub24temVyb3MuICovCisKKy8qCisgKiBSU0EgY29uc3RhbnRzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19SU0FfUFVCTElDICAgICAgMAorI2RlZmluZSBNQkVEVExTX1JTQV9QUklWQVRFICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19SU0FfUEtDU19WMTUgICAgMAorI2RlZmluZSBNQkVEVExTX1JTQV9QS0NTX1YyMSAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19SU0FfU0lHTiAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1JTQV9DUllQVCAgICAgICAyCisKKyNkZWZpbmUgTUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZICAgIC0xCisKKy8qCisgKiBUaGUgYWJvdmUgY29uc3RhbnRzIG1heSBiZSB1c2VkIGV2ZW4gaWYgdGhlIFJTQSBtb2R1bGUgaXMgY29tcGlsZSBvdXQsCisgKiBlZyBmb3IgYWx0ZXJuYXRpdmUgKFBLQ1MjMTEpIFJTQSBpbXBsZW1lbmF0aW9ucyBpbiB0aGUgUEsgbGF5ZXJzLgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJTQSBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCB2ZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8ICBhbHdheXMgMCAgICAgICAgICAqLworICAgIHNpemVfdCBsZW47ICAgICAgICAgICAgICAgICAvKiE8ICBzaXplKE4pIGluIGNoYXJzICAqLworCisgICAgbWJlZHRsc19tcGkgTjsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgcHVibGljIG1vZHVsdXMgICAgKi8KKyAgICBtYmVkdGxzX21waSBFOyAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBwdWJsaWMgZXhwb25lbnQgICAqLworCisgICAgbWJlZHRsc19tcGkgRDsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgcHJpdmF0ZSBleHBvbmVudCAgKi8KKyAgICBtYmVkdGxzX21waSBQOyAgICAgICAgICAgICAgICAgICAgICAvKiE8ICAxc3QgcHJpbWUgZmFjdG9yICAqLworICAgIG1iZWR0bHNfbXBpIFE7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgIDJuZCBwcmltZSBmYWN0b3IgICovCisgICAgbWJlZHRsc19tcGkgRFA7ICAgICAgICAgICAgICAgICAgICAgLyohPCAgRCAlIChQIC0gMSkgICAgICAgKi8KKyAgICBtYmVkdGxzX21waSBEUTsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBEICUgKFEgLSAxKSAgICAgICAqLworICAgIG1iZWR0bHNfbXBpIFFQOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIDEgLyAoUSAlIFApICAgICAgICovCisKKyAgICBtYmVkdGxzX21waSBSTjsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBjYWNoZWQgUl4yIG1vZCBOICAqLworICAgIG1iZWR0bHNfbXBpIFJQOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIGNhY2hlZCBSXjIgbW9kIFAgICovCisgICAgbWJlZHRsc19tcGkgUlE7ICAgICAgICAgICAgICAgICAgICAgLyohPCAgY2FjaGVkIFJeMiBtb2QgUSAgKi8KKworICAgIG1iZWR0bHNfbXBpIFZpOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIGNhY2hlZCBibGluZGluZyB2YWx1ZSAgICAgKi8KKyAgICBtYmVkdGxzX21waSBWZjsgICAgICAgICAgICAgICAgICAgICAvKiE8ICBjYWNoZWQgdW4tYmxpbmRpbmcgdmFsdWUgICovCisKKyAgICBpbnQgcGFkZGluZzsgICAgICAgICAgICAgICAgLyohPCAgTUJFRFRMU19SU0FfUEtDU19WMTUgZm9yIDEuNSBwYWRkaW5nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1JTQV9QS0NTX3YyMSBmb3IgT0FFUC9QU1MgICAgICAgICAqLworICAgIGludCBoYXNoX2lkOyAgICAgICAgICAgICAgICAvKiE8ICBIYXNoIGlkZW50aWZpZXIgb2YgbWJlZHRsc19tZF90eXBlX3QgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBtYmVkdGxzX21kLmggaGVhZGVyIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBFTUUtT0FFUCBhbmQgRU1TQS1QU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbXV0ZXg7ICAgIC8qITwgIFRocmVhZC1zYWZldHkgbXV0ZXggICAgICAgKi8KKyNlbmRpZgorfQorbWJlZHRsc19yc2FfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBhbiBSU0EgY29udGV4dAorICoKKyAqICAgICAgICAgICAgICAgICBOb3RlOiBTZXQgcGFkZGluZyB0byBNQkVEVExTX1JTQV9QS0NTX1YyMSBmb3IgdGhlIFJTQUVTLU9BRVAKKyAqICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIHNjaGVtZSBhbmQgdGhlIFJTQVNTQS1QU1Mgc2lnbmF0dXJlIHNjaGVtZS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBwYWRkaW5nICBNQkVEVExTX1JTQV9QS0NTX1YxNSBvciBNQkVEVExTX1JTQV9QS0NTX1YyMQorICogXHBhcmFtIGhhc2hfaWQgIE1CRURUTFNfUlNBX1BLQ1NfVjIxIGhhc2ggaWRlbnRpZmllcgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgaGFzaF9pZCBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgaWdub3JlZAorICogICAgICAgICAgICAgICAgIHdoZW4gdXNpbmcgTUJFRFRMU19SU0FfUEtDU19WMTUgcGFkZGluZy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgQ2hvaWNlIG9mIHBhZGRpbmcgbW9kZSBpcyBzdHJpY3RseSBlbmZvcmNlZCBmb3IgcHJpdmF0ZSBrZXkKKyAqICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLCBzaW5jZSB0aGVyZSBtaWdodCBiZSBzZWN1cml0eSBjb25jZXJucyBpbgorICogICAgICAgICAgICAgICAgIG1peGluZyBwYWRkaW5nIG1vZGVzLiBGb3IgcHVibGljIGtleSBvcGVyYXRpb25zIGl0J3MgbWVyZWx5CisgKiAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IHZhbHVlLCB3aGljaCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IGNhbGxpbmcgc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICByc2FfcnNhZXNfeHh4IG9yIHJzYV9yc2Fzc2FfeHh4IGZ1bmN0aW9ucy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGNob3NlbiBoYXNoIGlzIGFsd2F5cyB1c2VkIGZvciBPRUFQIGVuY3J5cHRpb24uCisgKiAgICAgICAgICAgICAgICAgRm9yIFBTUyBzaWduYXR1cmVzLCBpdCdzIGFsd2F5cyB1c2VkIGZvciBtYWtpbmcgc2lnbmF0dXJlcywKKyAqICAgICAgICAgICAgICAgICBidXQgY2FuIGJlIG92ZXJyaWRlbiAoYW5kIGFsd2F5cyBpcywgaWYgc2V0IHRvCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9OT05FKSBmb3IgdmVyaWZ5aW5nIHRoZW0uCisgKi8KK3ZvaWQgbWJlZHRsc19yc2FfaW5pdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsCisgICAgICAgICAgICAgICBpbnQgaGFzaF9pZCk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCBwYWRkaW5nIGZvciBhbiBhbHJlYWR5IGluaXRpYWxpemVkIFJTQSBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgU2VlIFxjIG1iZWR0bHNfcnNhX2luaXQoKSBmb3IgZGV0YWlscy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQgdG8gYmUgc2V0CisgKiBccGFyYW0gcGFkZGluZyAgTUJFRFRMU19SU0FfUEtDU19WMTUgb3IgTUJFRFRMU19SU0FfUEtDU19WMjEKKyAqIFxwYXJhbSBoYXNoX2lkICBNQkVEVExTX1JTQV9QS0NTX1YyMSBoYXNoIGlkZW50aWZpZXIKKyAqLwordm9pZCBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZyggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LCBpbnQgcGFkZGluZywgaW50IGhhc2hfaWQpOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHZW5lcmF0ZSBhbiBSU0Ega2V5cGFpcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dCB0aGF0IHdpbGwgaG9sZCB0aGUga2V5CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG5iaXRzICAgIHNpemUgb2YgdGhlIHB1YmxpYyBrZXkgaW4gYml0cworICogXHBhcmFtIGV4cG9uZW50IHB1YmxpYyBleHBvbmVudCAoZS5nLiwgNjU1MzcpCisgKgorICogXG5vdGUgICAgICAgICAgIG1iZWR0bHNfcnNhX2luaXQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmVoYW5kIHRvIHNldHVwCisgKiAgICAgICAgICAgICAgICAgdGhlIFJTQSBjb250ZXh0LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc19yc2FfZ2VuX2tleSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMsIGludCBleHBvbmVudCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVjayBhIHB1YmxpYyBSU0Ega2V5CisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrIGEgcHJpdmF0ZSBSU0Ega2V5CisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVjayBhIHB1YmxpYy1wcml2YXRlIFJTQSBrZXkgcGFpci4KKyAqICAgICAgICAgICAgICAgICBDaGVjayBlYWNoIG9mIHRoZSBjb250ZXh0cywgYW5kIG1ha2Ugc3VyZSB0aGV5IG1hdGNoLgorICoKKyAqIFxwYXJhbSBwdWIgICAgICBSU0EgY29udGV4dCBob2xkaW5nIHRoZSBwdWJsaWMga2V5CisgKiBccGFyYW0gcHJ2ICAgICAgUlNBIGNvbnRleHQgaG9sZGluZyB0aGUgcHJpdmF0ZSBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfcnNhX2NoZWNrX3B1Yl9wcml2KCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpwdWIsIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKnBydiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBEbyBhbiBSU0EgcHVibGljIGtleSBvcGVyYXRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBpbnB1dCBidWZmZXIKKyAqIFxwYXJhbSBvdXRwdXQgICBvdXRwdXQgYnVmZmVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgdGFrZSBjYXJlIG9mIG1lc3NhZ2UKKyAqICAgICAgICAgICAgICAgICBwYWRkaW5nLiBBbHNvLCBiZSBzdXJlIHRvIHNldCBpbnB1dFswXSA9IDAgb3IgYXNzdXJlIHRoYXQKKyAqICAgICAgICAgICAgICAgICBpbnB1dCBpcyBzbWFsbGVyIHRoYW4gTi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBtdXN0IGJlIGxhcmdlCisgKiAgICAgICAgICAgICAgICAgZW5vdWdoIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICovCitpbnQgbWJlZHRsc19yc2FfcHVibGljKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIERvIGFuIFJTQSBwcml2YXRlIGtleSBvcGVyYXRpb24KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE5lZWRlZCBmb3IgYmxpbmRpbmcpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIGlucHV0ICAgIGlucHV0IGJ1ZmZlcgorICogXHBhcmFtIG91dHB1dCAgIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBtdXN0IGJlIGxhcmdlCisgKiAgICAgICAgICAgICAgICAgZW5vdWdoIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICovCitpbnQgbWJlZHRsc19yc2FfcHJpdmF0ZSggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdlbmVyaWMgd3JhcHBlciB0byBwZXJmb3JtIGEgUEtDUyMxIGVuY3J5cHRpb24gdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgbW9kZSBmcm9tIHRoZSBjb250ZXh0LiBBZGQgdGhlIG1lc3NhZ2UgcGFkZGluZywgdGhlbiBkbyBhbgorICogICAgICAgICAgICAgICAgIFJTQSBvcGVyYXRpb24uCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChOZWVkZWQgZm9yIHBhZGRpbmcgYW5kIFBLQ1MjMSB2Mi4xIGVuY29kaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBpbGVuICAgICBjb250YWlucyB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIHRvIGJlIGVuY3J5cHRlZAorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICovCitpbnQgbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2MS41IGVuY3J5cHRpb24gKFJTQUVTLVBLQ1MxLXYxXzUtRU5DUllQVCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE5lZWRlZCBmb3IgcGFkZGluZyBhbmQgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBpbGVuICAgICBjb250YWlucyB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIHRvIGJlIGVuY3J5cHRlZAorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2Mi4xIE9BRVAgZW5jcnlwdGlvbiAoUlNBRVMtT0FFUC1FTkNSWVBUKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dAorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoTmVlZGVkIGZvciBwYWRkaW5nIGFuZCBQS0NTIzEgdjIuMSBlbmNvZGluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbGFiZWwgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGN1c3RvbSBsYWJlbCB0byB1c2UKKyAqIFxwYXJhbSBsYWJlbF9sZW4gY29udGFpbnMgdGhlIGxhYmVsIGxlbmd0aAorICogXHBhcmFtIGlsZW4gICAgIGNvbnRhaW5zIHRoZSBwbGFpbnRleHQgbGVuZ3RoCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGRhdGEgdG8gYmUgZW5jcnlwdGVkCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBvdXRwdXQgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2VuY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEdlbmVyaWMgd3JhcHBlciB0byBwZXJmb3JtIGEgUEtDUyMxIGRlY3J5cHRpb24gdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgbW9kZSBmcm9tIHRoZSBjb250ZXh0LiBEbyBhbiBSU0Egb3BlcmF0aW9uLCB0aGVuIHJlbW92ZQorICogICAgICAgICAgICAgICAgIHRoZSBtZXNzYWdlIHBhZGRpbmcKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE9ubHkgbmVlZGVkIGZvciBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIG9sZW4gICAgIHdpbGwgY29udGFpbiB0aGUgcGxhaW50ZXh0IGxlbmd0aAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBlbmNyeXB0ZWQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgcGxhaW50ZXh0CisgKiBccGFyYW0gb3V0cHV0X21heF9sZW4gICAgbWF4aW11bSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIG91dHB1dCBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKSBvdGhlcndpc2UKKyAqICAgICAgICAgICAgICAgICBhbiBlcnJvciBpcyB0aHJvd24uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIGEgUEtDUyMxIHYxLjUgZGVjcnlwdGlvbiAoUlNBRVMtUEtDUzEtdjFfNS1ERUNSWVBUKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dAorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoT25seSBuZWVkZWQgZm9yIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gb2xlbiAgICAgd2lsbCBjb250YWluIHRoZSBwbGFpbnRleHQgbGVuZ3RoCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGVuY3J5cHRlZCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBwbGFpbnRleHQKKyAqIFxwYXJhbSBvdXRwdXRfbWF4X2xlbiAgICBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpIG90aGVyd2lzZQorICogICAgICAgICAgICAgICAgIGFuIGVycm9yIGlzIHRocm93bi4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9kZWNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIGEgUEtDUyMxIHYyLjEgT0FFUCBkZWNyeXB0aW9uIChSU0FFUy1PQUVQLURFQ1JZUFQpCisgKgorICogXHBhcmFtIGN0eCAgICAgIFJTQSBjb250ZXh0CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChPbmx5IG5lZWRlZCBmb3IgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBsYWJlbCAgICBidWZmZXIgaG9sZGluZyB0aGUgY3VzdG9tIGxhYmVsIHRvIHVzZQorICogXHBhcmFtIGxhYmVsX2xlbiBjb250YWlucyB0aGUgbGFiZWwgbGVuZ3RoCisgKiBccGFyYW0gb2xlbiAgICAgd2lsbCBjb250YWluIHRoZSBwbGFpbnRleHQgbGVuZ3RoCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGVuY3J5cHRlZCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBwbGFpbnRleHQKKyAqIFxwYXJhbSBvdXRwdXRfbWF4X2xlbiAgICBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgb3V0cHV0IGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpIG90aGVyd2lzZQorICogICAgICAgICAgICAgICAgIGFuIGVycm9yIGlzIHRocm93bi4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZGVjcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCwgc2l6ZV90IGxhYmVsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHZW5lcmljIHdyYXBwZXIgdG8gcGVyZm9ybSBhIFBLQ1MjMSBzaWduYXR1cmUgdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgbW9kZSBmcm9tIHRoZSBjb250ZXh0LiBEbyBhIHByaXZhdGUgUlNBIG9wZXJhdGlvbiB0byBzaWduCisgKiAgICAgICAgICAgICAgICAgYSBtZXNzYWdlIGRpZ2VzdAorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dAorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoTmVlZGVkIGZvciBQS0NTIzEgdjIuMSBlbmNvZGluZyBhbmQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIG1kX2FsZyAgIGEgTUJFRFRMU19NRF9YWFggKHVzZSBNQkVEVExTX01EX05PTkUgZm9yIHNpZ25pbmcgcmF3IGRhdGEpCisgKiBccGFyYW0gaGFzaGxlbiAgbWVzc2FnZSBkaWdlc3QgbGVuZ3RoIChmb3IgTUJFRFRMU19NRF9OT05FIG9ubHkpCisgKiBccGFyYW0gaGFzaCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UgZGlnZXN0CisgKiBccGFyYW0gc2lnICAgICAgYnVmZmVyIHRoYXQgd2lsbCBob2xkIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhlIHNpZ25pbmcgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgInNpZyIgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKgorICogXG5vdGUgICAgICAgICAgIEluIGNhc2Ugb2YgUEtDUyMxIHYyLjEgZW5jb2RpbmcsIHNlZSBjb21tZW50cyBvbgorICogXG5vdGUgICAgICAgICAgIFxjIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3Nfc2lnbigpIGZvciBkZXRhaWxzIG9uIG1kX2FsZyBhbmQgaGFzaF9pZC4KKyAqLworaW50IG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQZXJmb3JtIGEgUEtDUyMxIHYxLjUgc2lnbmF0dXJlIChSU0FTU0EtUEtDUzEtdjFfNS1TSUdOKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBSU0EgY29udGV4dAorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoT25seSBuZWVkZWQgZm9yIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbWRfYWxnICAgYSBNQkVEVExTX01EX1hYWCAodXNlIE1CRURUTFNfTURfTk9ORSBmb3Igc2lnbmluZyByYXcgZGF0YSkKKyAqIFxwYXJhbSBoYXNobGVuICBtZXNzYWdlIGRpZ2VzdCBsZW5ndGggKGZvciBNQkVEVExTX01EX05PTkUgb25seSkKKyAqIFxwYXJhbSBoYXNoICAgICBidWZmZXIgaG9sZGluZyB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqIFxwYXJhbSBzaWcgICAgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIGNpcGhlcnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiB0aGUgc2lnbmluZyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfc2lnbiggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2Mi4xIFBTUyBzaWduYXR1cmUgKFJTQVNTQS1QU1MtU0lHTikKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIGNvbnRleHQKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE5lZWRlZCBmb3IgUEtDUyMxIHYyLjEgZW5jb2RpbmcgYW5kIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBtZF9hbGcgICBhIE1CRURUTFNfTURfWFhYICh1c2UgTUJFRFRMU19NRF9OT05FIGZvciBzaWduaW5nIHJhdyBkYXRhKQorICogXHBhcmFtIGhhc2hsZW4gIG1lc3NhZ2UgZGlnZXN0IGxlbmd0aCAoZm9yIE1CRURUTFNfTURfTk9ORSBvbmx5KQorICogXHBhcmFtIGhhc2ggICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlIGRpZ2VzdAorICogXHBhcmFtIHNpZyAgICAgIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoZSBzaWduaW5nIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgaGFzaF9pZCBpbiB0aGUgUlNBIGNvbnRleHQgaXMgdGhlIG9uZSB1c2VkIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICBlbmNvZGluZy4gbWRfYWxnIGluIHRoZSBmdW5jdGlvbiBjYWxsIGlzIHRoZSB0eXBlIG9mIGhhc2gKKyAqICAgICAgICAgICAgICAgICB0aGF0IGlzIGVuY29kZWQuIEFjY29yZGluZyB0byBSRkMgMzQ0NyBpdCBpcyBhZHZpc2VkIHRvCisgKiAgICAgICAgICAgICAgICAga2VlcCBib3RoIGhhc2hlcyB0aGUgc2FtZS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3Nfc2lnbiggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2VuZXJpYyB3cmFwcGVyIHRvIHBlcmZvcm0gYSBQS0NTIzEgdmVyaWZpY2F0aW9uIHVzaW5nIHRoZQorICogICAgICAgICAgICAgICAgIG1vZGUgZnJvbSB0aGUgY29udGV4dC4gRG8gYSBwdWJsaWMgUlNBIG9wZXJhdGlvbiBhbmQgY2hlY2sKKyAqICAgICAgICAgICAgICAgICB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgcG9pbnRzIHRvIGFuIFJTQSBwdWJsaWMga2V5CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChPbmx5IG5lZWRlZCBmb3IgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBtZF9hbGcgICBhIE1CRURUTFNfTURfWFhYICh1c2UgTUJFRFRMU19NRF9OT05FIGZvciBzaWduaW5nIHJhdyBkYXRhKQorICogXHBhcmFtIGhhc2hsZW4gIG1lc3NhZ2UgZGlnZXN0IGxlbmd0aCAoZm9yIE1CRURUTFNfTURfTk9ORSBvbmx5KQorICogXHBhcmFtIGhhc2ggICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlIGRpZ2VzdAorICogXHBhcmFtIHNpZyAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhlIHZlcmlmeSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSW4gY2FzZSBvZiBQS0NTIzEgdjIuMSBlbmNvZGluZywgc2VlIGNvbW1lbnRzIG9uCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnkoKSBhYm91dCBtZF9hbGcgYW5kIGhhc2hfaWQuCisgKi8KK2ludCBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBQS0NTIzEgdjEuNSB2ZXJpZmljYXRpb24gKFJTQVNTQS1QS0NTMS12MV81LVZFUklGWSkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgcG9pbnRzIHRvIGFuIFJTQSBwdWJsaWMga2V5CisgKiBccGFyYW0gZl9ybmcgICAgUk5HIGZ1bmN0aW9uIChPbmx5IG5lZWRlZCBmb3IgTUJFRFRMU19SU0FfUFJJVkFURSkKKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKiBccGFyYW0gbW9kZSAgICAgTUJFRFRMU19SU0FfUFVCTElDIG9yIE1CRURUTFNfUlNBX1BSSVZBVEUKKyAqIFxwYXJhbSBtZF9hbGcgICBhIE1CRURUTFNfTURfWFhYICh1c2UgTUJFRFRMU19NRF9OT05FIGZvciBzaWduaW5nIHJhdyBkYXRhKQorICogXHBhcmFtIGhhc2hsZW4gIG1lc3NhZ2UgZGlnZXN0IGxlbmd0aCAoZm9yIE1CRURUTFNfTURfTk9ORSBvbmx5KQorICogXHBhcmFtIGhhc2ggICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlIGRpZ2VzdAorICogXHBhcmFtIHNpZyAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBjaXBoZXJ0ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhlIHZlcmlmeSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgb3IgYW4gTUJFRFRMU19FUlJfUlNBX1hYWCBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSAic2lnIiBidWZmZXIgbXVzdCBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZQorICogICAgICAgICAgICAgICAgIG9mIGN0eC0+TiAoZWcuIDEyOCBieXRlcyBpZiBSU0EtMTAyNCBpcyB1c2VkKS4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBQS0NTIzEgdjIuMSBQU1MgdmVyaWZpY2F0aW9uIChSU0FTU0EtUFNTLVZFUklGWSkKKyAqICAgICAgICAgICAgICAgICAoVGhpcyBpcyB0aGUgInNpbXBsZSIgdmVyc2lvbi4pCisgKgorICogXHBhcmFtIGN0eCAgICAgIHBvaW50cyB0byBhbiBSU0EgcHVibGljIGtleQorICogXHBhcmFtIGZfcm5nICAgIFJORyBmdW5jdGlvbiAoT25seSBuZWVkZWQgZm9yIE1CRURUTFNfUlNBX1BSSVZBVEUpCisgKiBccGFyYW0gcF9ybmcgICAgUk5HIHBhcmFtZXRlcgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfUlNBX1BVQkxJQyBvciBNQkVEVExTX1JTQV9QUklWQVRFCisgKiBccGFyYW0gbWRfYWxnICAgYSBNQkVEVExTX01EX1hYWCAodXNlIE1CRURUTFNfTURfTk9ORSBmb3Igc2lnbmluZyByYXcgZGF0YSkKKyAqIFxwYXJhbSBoYXNobGVuICBtZXNzYWdlIGRpZ2VzdCBsZW5ndGggKGZvciBNQkVEVExTX01EX05PTkUgb25seSkKKyAqIFxwYXJhbSBoYXNoICAgICBidWZmZXIgaG9sZGluZyB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqIFxwYXJhbSBzaWcgICAgICBidWZmZXIgaG9sZGluZyB0aGUgY2lwaGVydGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHRoZSB2ZXJpZnkgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIG9yIGFuIE1CRURUTFNfRVJSX1JTQV9YWFggZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgInNpZyIgYnVmZmVyIG11c3QgYmUgYXMgbGFyZ2UgYXMgdGhlIHNpemUKKyAqICAgICAgICAgICAgICAgICBvZiBjdHgtPk4gKGVnLiAxMjggYnl0ZXMgaWYgUlNBLTEwMjQgaXMgdXNlZCkuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBoYXNoX2lkIGluIHRoZSBSU0EgY29udGV4dCBpcyB0aGUgb25lIHVzZWQgZm9yIHRoZQorICogICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbi4gbWRfYWxnIGluIHRoZSBmdW5jdGlvbiBjYWxsIGlzIHRoZSB0eXBlIG9mCisgKiAgICAgICAgICAgICAgICAgaGFzaCB0aGF0IGlzIHZlcmlmaWVkLiBBY2NvcmRpbmcgdG8gUkZDIDM0NDcgaXQgaXMgYWR2aXNlZCB0bworICogICAgICAgICAgICAgICAgIGtlZXAgYm90aCBoYXNoZXMgdGhlIHNhbWUuIElmIGhhc2hfaWQgaW4gdGhlIFJTQSBjb250ZXh0IGlzCisgKiAgICAgICAgICAgICAgICAgdW5zZXQsIHRoZSBtZF9hbGcgZnJvbSB0aGUgZnVuY3Rpb24gY2FsbCBpcyB1c2VkLgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnkoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGVyZm9ybSBhIFBLQ1MjMSB2Mi4xIFBTUyB2ZXJpZmljYXRpb24gKFJTQVNTQS1QU1MtVkVSSUZZKQorICogICAgICAgICAgICAgICAgIChUaGlzIGlzIHRoZSB2ZXJzaW9uIHdpdGggImZ1bGwiIG9wdGlvbnMuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBwb2ludHMgdG8gYW4gUlNBIHB1YmxpYyBrZXkKKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24gKE9ubHkgbmVlZGVkIGZvciBNQkVEVExTX1JTQV9QUklWQVRFKQorICogXHBhcmFtIHBfcm5nICAgIFJORyBwYXJhbWV0ZXIKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1JTQV9QVUJMSUMgb3IgTUJFRFRMU19SU0FfUFJJVkFURQorICogXHBhcmFtIG1kX2FsZyAgIGEgTUJFRFRMU19NRF9YWFggKHVzZSBNQkVEVExTX01EX05PTkUgZm9yIHNpZ25pbmcgcmF3IGRhdGEpCisgKiBccGFyYW0gaGFzaGxlbiAgbWVzc2FnZSBkaWdlc3QgbGVuZ3RoIChmb3IgTUJFRFRMU19NRF9OT05FIG9ubHkpCisgKiBccGFyYW0gaGFzaCAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UgZGlnZXN0CisgKiBccGFyYW0gbWdmMV9oYXNoX2lkIG1lc3NhZ2UgZGlnZXN0IHVzZWQgZm9yIG1hc2sgZ2VuZXJhdGlvbgorICogXHBhcmFtIGV4cGVjdGVkX3NhbHRfbGVuIExlbmd0aCBvZiB0aGUgc2FsdCB1c2VkIGluIHBhZGRpbmcsIHVzZQorICogICAgICAgICAgICAgICAgIE1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWSB0byBhY2NlcHQgYW55IHNhbHQgbGVuZ3RoCisgKiBccGFyYW0gc2lnICAgICAgYnVmZmVyIGhvbGRpbmcgdGhlIGNpcGhlcnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiB0aGUgdmVyaWZ5IG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBvciBhbiBNQkVEVExTX0VSUl9SU0FfWFhYIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlICJzaWciIGJ1ZmZlciBtdXN0IGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplCisgKiAgICAgICAgICAgICAgICAgb2YgY3R4LT5OIChlZy4gMTI4IGJ5dGVzIGlmIFJTQS0xMDI0IGlzIHVzZWQpLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgaGFzaF9pZCBpbiB0aGUgUlNBIGNvbnRleHQgaXMgaWdub3JlZC4KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZ2YxX2hhc2hfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3NhbHRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDb3B5IHRoZSBjb21wb25lbnRzIG9mIGFuIFJTQSBjb250ZXh0CisgKgorICogXHBhcmFtIGRzdCAgICAgIERlc3RpbmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBzcmMgICAgICBTb3VyY2UgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIG9uIHN1Y2Nlc3MsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCisgKi8KK2ludCBtYmVkdGxzX3JzYV9jb3B5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpkc3QsIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKnNyYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBGcmVlIHRoZSBjb21wb25lbnRzIG9mIGFuIFJTQSBrZXkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgUlNBIENvbnRleHQgdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfcnNhX2ZyZWUoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19yc2Ffc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjZW5kaWYgLyogcnNhLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhMS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2N2M2YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc2hhMS5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioKKyAqIFxmaWxlIHNoYTEuaAorICoKKyAqIFxicmllZiBTSEEtMSBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TSEExX0gKKyNkZWZpbmUgTUJFRFRMU19TSEExX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMV9BTFQpCisvLyBSZWd1bGFyIGltcGxlbWVudGF0aW9uCisvLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS0xIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgdG90YWxbMl07ICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCAgKi8KKyAgICB1aW50MzJfdCBzdGF0ZVs1XTsgICAgICAgICAgLyohPCBpbnRlcm1lZGlhdGUgZGlnZXN0IHN0YXRlICAqLworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsgICAvKiE8IGRhdGEgYmxvY2sgYmVpbmcgcHJvY2Vzc2VkICovCit9CittYmVkdGxzX3NoYTFfY29udGV4dDsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBTSEEtMSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS0xIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfaW5pdCggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBTSEEtMSBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS0xIGNvbnRleHQgdG8gYmUgY2xlYXJlZAorICovCit2b2lkIG1iZWR0bHNfc2hhMV9mcmVlKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsb25lICh0aGUgc3RhdGUgb2YpIGEgU0hBLTEgY29udGV4dAorICoKKyAqIFxwYXJhbSBkc3QgICAgICBUaGUgZGVzdGluYXRpb24gY29udGV4dAorICogXHBhcmFtIHNyYyAgICAgIFRoZSBjb250ZXh0IHRvIGJlIGNsb25lZAorICovCit2b2lkIG1iZWR0bHNfc2hhMV9jbG9uZSggbWJlZHRsc19zaGExX2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTFfY29udGV4dCAqc3JjICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS0xIGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfc2hhMV9zdGFydHMoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTEgcHJvY2VzcyBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU0hBLTEgY29udGV4dAorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICovCit2b2lkIG1iZWR0bHNfc2hhMV91cGRhdGUoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtMSBmaW5hbCBkaWdlc3QKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgU0hBLTEgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIFNIQS0xIGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfc2hhMV9maW5pc2goIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXSApOworCisvKiBJbnRlcm5hbCB1c2UgKi8KK3ZvaWQgbWJlZHRsc19zaGExX3Byb2Nlc3MoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfU0hBMV9BTFQgKi8KKyNpbmNsdWRlICJzaGExX2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBTSEEtMSggaW5wdXQgYnVmZmVyICkKKyAqCisgKiBccGFyYW0gaW5wdXQgICAgYnVmZmVyIGhvbGRpbmcgdGhlICBkYXRhCisgKiBccGFyYW0gaWxlbiAgICAgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgKiBccGFyYW0gb3V0cHV0ICAgU0hBLTEgY2hlY2tzdW0gcmVzdWx0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGExKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc19zaGExX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIG1iZWR0bHNfc2hhMS5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NoYTI1Ni5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGEyNTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA0MWFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGEyNTYuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqCisgKiBcZmlsZSBzaGEyNTYuaAorICoKKyAqIFxicmllZiBTSEEtMjI0IGFuZCBTSEEtMjU2IGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NIQTI1Nl9ICisjZGVmaW5lIE1CRURUTFNfU0hBMjU2X0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTI1NiBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQzMl90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgICovCisgICAgdWludDMyX3Qgc3RhdGVbOF07ICAgICAgICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworICAgIGludCBpczIyNDsgICAgICAgICAgICAgICAgICAvKiE8IDAgPT4gU0hBLTI1NiwgZWxzZSBTSEEtMjI0ICovCit9CittYmVkdGxzX3NoYTI1Nl9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIFNIQS0yNTYgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtMjU2IGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9pbml0KCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgU0hBLTI1NiBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS0yNTYgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZnJlZSggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsb25lICh0aGUgc3RhdGUgb2YpIGEgU0hBLTI1NiBjb250ZXh0CisgKgorICogXHBhcmFtIGRzdCAgICAgIFRoZSBkZXN0aW5hdGlvbiBjb250ZXh0CisgKiBccGFyYW0gc3JjICAgICAgVGhlIGNvbnRleHQgdG8gYmUgY2xvbmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfY2xvbmUoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKnNyYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtMjU2IGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGlzMjI0ICAgIDAgPSB1c2UgU0hBMjU2LCAxID0gdXNlIFNIQTIyNAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBpbnQgaXMyMjQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTI1NiBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtMjU2IGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS0yNTYgZmluYWwgZGlnZXN0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS0yNTYgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIFNIQS0yMjQvMjU2IGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaCggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl0gKTsKKworLyogSW50ZXJuYWwgdXNlICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhWzY0XSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZWxzZSAgLyogTUJFRFRMU19TSEEyNTZfQUxUICovCisjaW5jbHVkZSAic2hhMjU2X2FsdC5oIgorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0FMVCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIE91dHB1dCA9IFNIQS0yNTYoIGlucHV0IGJ1ZmZlciApCisgKgorICogXHBhcmFtIGlucHV0ICAgIGJ1ZmZlciBob2xkaW5nIHRoZSAgZGF0YQorICogXHBhcmFtIGlsZW4gICAgIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQorICogXHBhcmFtIG91dHB1dCAgIFNIQS0yMjQvMjU2IGNoZWNrc3VtIHJlc3VsdAorICogXHBhcmFtIGlzMjI0ICAgIDAgPSB1c2UgU0hBMjU2LCAxID0gdXNlIFNIQTIyNAorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2KCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXSwgaW50IGlzMjI0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3NoYTI1Nl9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX3NoYTI1Ni5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NoYTUxMi5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGE1MTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjc2OTRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zaGE1MTIuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqCisgKiBcZmlsZSBzaGE1MTIuaAorICoKKyAqIFxicmllZiBTSEEtMzg0IGFuZCBTSEEtNTEyIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NIQTUxMl9ICisjZGVmaW5lIE1CRURUTFNfU0hBNTEyX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTUxMiBjb250ZXh0IHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ2NF90IHRvdGFsWzJdOyAgICAgICAgICAvKiE8IG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgICovCisgICAgdWludDY0X3Qgc3RhdGVbOF07ICAgICAgICAgIC8qITwgaW50ZXJtZWRpYXRlIGRpZ2VzdCBzdGF0ZSAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMjhdOyAgLyohPCBkYXRhIGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworICAgIGludCBpczM4NDsgICAgICAgICAgICAgICAgICAvKiE8IDAgPT4gU0hBLTUxMiwgZWxzZSBTSEEtMzg0ICovCit9CittYmVkdGxzX3NoYTUxMl9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIFNIQS01MTIgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtNTEyIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl9pbml0KCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2xlYXIgU0hBLTUxMiBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS01MTIgY29udGV4dCB0byBiZSBjbGVhcmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfZnJlZSggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENsb25lICh0aGUgc3RhdGUgb2YpIGEgU0hBLTUxMiBjb250ZXh0CisgKgorICogXHBhcmFtIGRzdCAgICAgIFRoZSBkZXN0aW5hdGlvbiBjb250ZXh0CisgKiBccGFyYW0gc3JjICAgICAgVGhlIGNvbnRleHQgdG8gYmUgY2xvbmVkCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfY2xvbmUoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKnNyYyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTSEEtNTEyIGNvbnRleHQgc2V0dXAKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgY29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICogXHBhcmFtIGlzMzg0ICAgIDAgPSB1c2UgU0hBNTEyLCAxID0gdXNlIFNIQTM4NAorICovCit2b2lkIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4LCBpbnQgaXMzODQgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU0hBLTUxMiBwcm9jZXNzIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICBTSEEtNTEyIGNvbnRleHQKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl91cGRhdGUoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNIQS01MTIgZmluYWwgZGlnZXN0CisgKgorICogXHBhcmFtIGN0eCAgICAgIFNIQS01MTIgY29udGV4dAorICogXHBhcmFtIG91dHB1dCAgIFNIQS0zODQvNTEyIGNoZWNrc3VtIHJlc3VsdAorICovCit2b2lkIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFs2NF0gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vsc2UgIC8qIE1CRURUTFNfU0hBNTEyX0FMVCAqLworI2luY2x1ZGUgInNoYTUxMl9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9BTFQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBPdXRwdXQgPSBTSEEtNTEyKCBpbnB1dCBidWZmZXIgKQorICoKKyAqIFxwYXJhbSBpbnB1dCAgICBidWZmZXIgaG9sZGluZyB0aGUgIGRhdGEKKyAqIFxwYXJhbSBpbGVuICAgICBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAqIFxwYXJhbSBvdXRwdXQgICBTSEEtMzg0LzUxMiBjaGVja3N1bSByZXN1bHQKKyAqIFxwYXJhbSBpczM4NCAgICAwID0gdXNlIFNIQTUxMiwgMSA9IHVzZSBTSEEzODQKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMiggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzY0XSwgaW50IGlzMzg0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrdXAgcm91dGluZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIDEgaWYgdGhlIHRlc3QgZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3NoYTUxMl9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKy8qIEludGVybmFsIHVzZSAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl9wcm9jZXNzKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVsxMjhdICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX3NoYTUxMi5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQ5OWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2wuaApAQCAtMCwwICsxLDI1NTIgQEAKKy8qKgorICogXGZpbGUgc3NsLmgKKyAqCisgKiBcYnJpZWYgU1NML1RMUyBmdW5jdGlvbnMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfU1NMX0gKKyNkZWZpbmUgTUJFRFRMU19TU0xfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImVjcC5oIgorCisjaW5jbHVkZSAic3NsX2NpcGhlcnN1aXRlcy5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisjaW5jbHVkZSAieDUwOV9jcnQuaCIKKyNpbmNsdWRlICJ4NTA5X2NybC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisjaW5jbHVkZSAiZGhtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisjaW5jbHVkZSAiZWNkaC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorI2luY2x1ZGUgInpsaWIuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtX3RpbWUuaCIKKyNlbmRpZgorCisvKgorICogU1NMIEVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAgICAtMHg3MDgwICAvKio8IFRoZSByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgICAgICAgICAgICAgICAgICAgIC0weDcxMDAgIC8qKjwgQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyAgICAgICAgICAgICAgICAgICAgICAgLTB4NzE4MCAgLyoqPCBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICAgICAgICAgICAgICAgICAgICAtMHg3MjAwICAvKio8IEFuIGludmFsaWQgU1NMIHJlY29yZCB3YXMgcmVjZWl2ZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9DT05OX0VPRiAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NzI4MCAgLyoqPCBUaGUgY29ubmVjdGlvbiBpbmRpY2F0ZWQgYW4gRU9GLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9DSVBIRVIgICAgICAgICAgICAgICAgICAgIC0weDczMDAgIC8qKjwgQW4gdW5rbm93biBjaXBoZXIgd2FzIHJlY2VpdmVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTiAgICAgICAgICAgICAgICAgIC0weDczODAgIC8qKjwgVGhlIHNlcnZlciBoYXMgbm8gY2lwaGVyc3VpdGVzIGluIGNvbW1vbiB3aXRoIHRoZSBjbGllbnQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9OT19STkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NzQwMCAgLyoqPCBObyBSTkcgd2FzIHByb3ZpZGVkIHRvIHRoZSBTU0wgbW9kdWxlLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfTk9fQ0xJRU5UX0NFUlRJRklDQVRFICAgICAgICAgICAgIC0weDc0ODAgIC8qKjwgTm8gY2xpZW50IGNlcnRpZmljYXRpb24gcmVjZWl2ZWQgZnJvbSB0aGUgY2xpZW50LCBidXQgcmVxdWlyZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9DRVJUSUZJQ0FURV9UT09fTEFSR0UgICAgICAgICAgICAgLTB4NzUwMCAgLyoqPCBPdXIgb3duIGNlcnRpZmljYXRlKHMpIGlzL2FyZSB0b28gbGFyZ2UgdG8gc2VuZCBpbiBhbiBTU0wgbWVzc2FnZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEICAgICAgICAgICAgICAtMHg3NTgwICAvKio8IFRoZSBvd24gY2VydGlmaWNhdGUgaXMgbm90IHNldCwgYnV0IG5lZWRlZCBieSB0aGUgc2VydmVyLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQgICAgICAgICAgICAgIC0weDc2MDAgIC8qKjwgVGhlIG93biBwcml2YXRlIGtleSBvciBwcmUtc2hhcmVkIGtleSBpcyBub3Qgc2V0LCBidXQgbmVlZGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQ0FfQ0hBSU5fUkVRVUlSRUQgICAgICAgICAgICAgICAgIC0weDc2ODAgIC8qKjwgTm8gQ0EgQ2hhaW4gaXMgc2V0LCBidXQgcmVxdWlyZWQgdG8gb3BlcmF0ZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSAgICAgICAgICAgICAgICAtMHg3NzAwICAvKio8IEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlci4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0ZBVEFMX0FMRVJUX01FU1NBR0UgICAgICAgICAgICAgICAtMHg3NzgwICAvKio8IEEgZmF0YWwgYWxlcnQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlci4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1BFRVJfVkVSSUZZX0ZBSUxFRCAgICAgICAgICAgICAgICAtMHg3ODAwICAvKio8IFZlcmlmaWNhdGlvbiBvZiBvdXIgcGVlciBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWSAgICAgICAgICAgICAgICAgLTB4Nzg4MCAgLyoqPCBUaGUgcGVlciBub3RpZmllZCB1cyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIGdvaW5nIHRvIGJlIGNsb3NlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gICAgICAgICAgICAgICAtMHg3OTAwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENsaWVudEhlbGxvIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gICAgICAgICAgICAgICAtMHg3OTgwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIFNlcnZlckhlbGxvIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSAgICAgICAgICAgICAgICAtMHg3QTAwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUICAgICAgICAtMHg3QTgwICAvKio8IFByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlUmVxdWVzdCBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSAgICAgICAgLTB4N0IwMCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBTZXJ2ZXJLZXlFeGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPX0RPTkUgICAgICAgICAgLTB4N0I4MCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBTZXJ2ZXJIZWxsb0RvbmUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgICAgICAgIC0weDdDMDAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlAgICAgIC0weDdDODAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIGluIERITSAvIEVDREggUmVhZCBQdWJsaWMuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9DUyAgICAgLTB4N0QwMCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBDbGllbnRLZXlFeGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQgaW4gREhNIC8gRUNESCBDYWxjdWxhdGUgU2VjcmV0LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSAgICAgICAgIC0weDdEODAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGVWZXJpZnkgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NIQU5HRV9DSVBIRVJfU1BFQyAgICAgICAgIC0weDdFMDAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgQ2hhbmdlQ2lwaGVyU3BlYyBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfRklOSVNIRUQgICAgICAgICAgICAgICAgICAgLTB4N0U4MCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBGaW5pc2hlZCBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgLTB4N0YwMCAgLyoqPCBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtMHg3RjgwICAvKio8IEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmdW5jdGlvbiByZXR1cm5lZCB3aXRoIGVycm9yICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUxMVEhST1VHSCAgICAgICAgICAgICAgLTB4NkY4MCAgLyoqPCBIYXJkd2FyZSBhY2NlbGVyYXRpb24gZnVuY3Rpb24gc2tpcHBlZCAvIGxlZnQgYWxvbmUgZGF0YSAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVEICAgICAgICAgICAgICAgIC0weDZGMDAgIC8qKjwgUHJvY2Vzc2luZyBvZiB0aGUgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIGZhaWxlZCAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gICAgICAgICAgIC0weDZFODAgIC8qKjwgSGFuZHNoYWtlIHByb3RvY29sIG5vdCB3aXRoaW4gbWluL21heCBib3VuZGFyaWVzICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUICAgICAgICAgLTB4NkUwMCAgLyoqPCBQcm9jZXNzaW5nIG9mIHRoZSBOZXdTZXNzaW9uVGlja2V0IGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQgICAgICAgICAgICAtMHg2RDgwICAvKio8IFNlc3Npb24gdGlja2V0IGhhcyBleHBpcmVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSCAgICAgICAgICAgICAgICAgIC0weDZEMDAgIC8qKjwgUHVibGljIGtleSB0eXBlIG1pc21hdGNoIChlZywgYXNrZWQgZm9yIFJTQSBrZXkgZXhjaGFuZ2UgYW5kIHByZXNlbnRlZCBFQyBrZXkpICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0lERU5USVRZICAgICAgICAgICAgICAgICAgLTB4NkM4MCAgLyoqPCBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIChlZywgUFNLIGlkZW50aXR5KSAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgICAgICAgICAgICAgICAgICAgIC0weDZDMDAgIC8qKjwgSW50ZXJuYWwgZXJyb3IgKGVnLCB1bmV4cGVjdGVkIGZhaWx1cmUgaW4gbG93ZXItbGV2ZWwgbW9kdWxlKSAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQ09VTlRFUl9XUkFQUElORyAgICAgICAgICAgICAgICAgIC0weDZCODAgIC8qKjwgQSBjb3VudGVyIHdvdWxkIHdyYXAgKGVnLCB0b28gbWFueSBtZXNzYWdlcyBleGNoYW5nZWQpLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfV0FJVElOR19TRVJWRVJfSEVMTE9fUkVORUdPICAgICAgIC0weDZCMDAgIC8qKjwgVW5leHBlY3RlZCBtZXNzYWdlIGF0IFNlcnZlckhlbGxvIGluIHJlbmVnb3RpYXRpb24uICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgICAgICAgICAgICAgLTB4NkE4MCAgLyoqPCBEVExTIGNsaWVudCBtdXN0IHJldHJ5IGZvciBoZWxsbyB2ZXJpZmljYXRpb24gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgICAgICAgICAtMHg2QTAwICAvKio8IEEgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byByZWNlaXZlIG9yIHdyaXRlIGEgbWVzc2FnZSAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfTk9fVVNBQkxFX0NJUEhFUlNVSVRFICAgICAgICAgICAgIC0weDY5ODAgIC8qKjwgTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUgKGVnLCBubyBzdWl0YWJsZSBjZXJ0aWZpY2F0ZSwgc2VlIGRlYnVnIG1lc3NhZ2VzKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAtMHg2OTAwICAvKio8IENvbm5lY3Rpb24gcmVxdWlyZXMgYSByZWFkIGNhbGwuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgLTB4Njg4MCAgLyoqPCBDb25uZWN0aW9uIHJlcXVpcmVzIGEgd3JpdGUgY2FsbC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAtMHg2ODAwICAvKio8IFRoZSBvcGVyYXRpb24gdGltZWQgb3V0LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCAgICAgICAgICAgICAgICAgIC0weDY3ODAgIC8qKjwgVGhlIGNsaWVudCBpbml0aWF0ZWQgYSByZWNvbm5lY3QgZnJvbSB0aGUgc2FtZSBwb3J0LiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgICAgICAgICAgICAgICAgIC0weDY3MDAgIC8qKjwgUmVjb3JkIGhlYWRlciBsb29rcyB2YWxpZCBidXQgaXMgbm90IGV4cGVjdGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfTk9OX0ZBVEFMICAgICAgICAgICAgICAgICAgICAgICAgIC0weDY2ODAgIC8qKjwgVGhlIGFsZXJ0IG1lc3NhZ2UgcmVjZWl2ZWQgaW5kaWNhdGVzIGEgbm9uLWZhdGFsIGVycm9yLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9WRVJJRllfSEFTSCAgICAgICAgICAgICAgIC0weDY2MDAgIC8qKjwgQ291bGRuJ3Qgc2V0IHRoZSBoYXNoIGZvciB2ZXJpZnlpbmcgQ2VydGlmaWNhdGVWZXJpZnkgKi8KKworLyoKKyAqIFZhcmlvdXMgY29uc3RhbnRzCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICAgICAgICAgICAgIDAgICAvKiE8IFNTTCB2My4wICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSAgICAgICAgICAgICAxICAgLyohPCBUTFMgdjEuMCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgICAgICAgICAgICAgMiAgIC8qITwgVExTIHYxLjEgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICAgICAgICAgICAgIDMgICAvKiE8IFRMUyB2MS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSAgICAgICAgICAgIDAgICAvKiE8IFRMUyAgICAgICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAgICAgICAgICAxICAgLyohPCBEVExTICAgICAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9IT1NUX05BTUVfTEVOICAgICAgICAgICAyNTUgLyohPCBNYXhpbXVtIGhvc3QgbmFtZSBkZWZpbmVkIGluIFJGQyAxMDM1ICovCisKKy8qIFJGQyA2MDY2IHNlY3Rpb24gNCwgc2VlIGFsc28gbWZsX2NvZGVfdG9fbGVuZ3RoIGluIHNzbF90bHMuYworICogTk9ORSBtdXN0IGJlIHplcm8gc28gdGhhdCBtZW1zZXQoKWluZyBzdHJ1Y3R1cmUgdG8gemVybyB3b3JrcyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORSAgICAgICAgICAgMCAgIC8qITwgZG9uJ3QgdXNlIHRoaXMgZXh0ZW5zaW9uICAgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzUxMiAgICAgICAgICAgIDEgICAvKiE8IE1heEZyYWdtZW50TGVuZ3RoIDJeOSAgICAgICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8xMDI0ICAgICAgICAgICAyICAgLyohPCBNYXhGcmFnbWVudExlbmd0aCAyXjEwICAgICAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMjA0OCAgICAgICAgICAgMyAgIC8qITwgTWF4RnJhZ21lbnRMZW5ndGggMl4xMSAgICAgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzQwOTYgICAgICAgICAgIDQgICAvKiE8IE1heEZyYWdtZW50TGVuZ3RoIDJeMTIgICAgICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9JTlZBTElEICAgICAgICA1ICAgLyohPCBmaXJzdCBpbnZhbGlkIHZhbHVlICAgICAgICAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX0lTX0NMSUVOVCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0lTX1NFUlZFUiAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfSVNfTk9UX0ZBTExCQUNLICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfSVNfRkFMTEJBQ0sgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19ESVNBQkxFRCAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEICAgICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURSAgICAgICAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUwgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQgICAgICAgICAgICAgMgorI2RlZmluZSBNQkVEVExTX1NTTF9WRVJJRllfVU5TRVQgICAgICAgICAgICAgICAgMyAvKiBVc2VkIG9ubHkgZm9yIHNuaV9hdXRobW9kZSAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRCAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9FTkFCTEVEICAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9ESVNBQkxFRCAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9FTkFCTEVEICAgICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fTk9UX0VORk9SQ0VEICAtMQorI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09fTUFYX1JFQ09SRFNfREVGQVVMVCAgMTYKKworI2RlZmluZSBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTiAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9MRUdBQ1lfQUxMT1dfUkVORUdPVElBVElPTiAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFICAgICAgMgorCisjZGVmaW5lIE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRCAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDX0xFTiAgICAgICAgICAxMCAgLyogODAgYml0cywgcmZjIDYwNjYgc2VjdGlvbiA3ICovCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVEICAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0RJU0FCTEVEICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRU5BQkxFRCAgICAgMQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfUFJFU0VUX1NVSVRFQiAgICAgICAgICAgICAgIDIKKworLyoKKyAqIERlZmF1bHQgcmFuZ2UgZm9yIERUTFMgcmV0cmFuc21pc3Npb24gdGltZXIgdmFsdWUsIGluIG1pbGxpc2Vjb25kcy4KKyAqIFJGQyA2MzQ3IDQuMi40LjEgc2F5cyBmcm9tIDEgc2Vjb25kIHRvIDYwIHNlY29uZHMuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19USU1FT1VUX0RGTF9NSU4gICAgMTAwMAorI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX1RJTUVPVVRfREZMX01BWCAgIDYwMDAwCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19TU0xfREVGQVVMVF9USUNLRVRfTElGRVRJTUUpCisjZGVmaW5lIE1CRURUTFNfU1NMX0RFRkFVTFRfVElDS0VUX0xJRkVUSU1FICAgICA4NjQwMCAvKio8IExpZmV0aW1lIG9mIHNlc3Npb24gdGlja2V0cyAoaWYgZW5hYmxlZCkgKi8KKyNlbmRpZgorCisvKgorICogTWF4aXVtIGZyYWdtZW50IGxlbmd0aCBpbiBieXRlcywKKyAqIGRldGVybWluZXMgdGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGludGVybmFsIEkvTyBidWZmZXJzLgorICoKKyAqIE5vdGU6IHRoZSBSRkMgZGVmaW5lcyB0aGUgZGVmYXVsdCBzaXplIG9mIFNTTCAvIFRMUyBtZXNzYWdlcy4gSWYgeW91CisgKiBjaGFuZ2UgdGhlIHZhbHVlIGhlcmUsIG90aGVyIGNsaWVudHMgLyBzZXJ2ZXJzIG1heSBub3QgYmUgYWJsZSB0bworICogY29tbXVuaWNhdGUgd2l0aCB5b3UgYW55bW9yZS4gT25seSBjaGFuZ2UgdGhpcyB2YWx1ZSBpZiB5b3UgY29udHJvbAorICogYm90aCBzaWRlcyBvZiB0aGUgY29ubmVjdGlvbiBhbmQgaGF2ZSBpdCByZWR1Y2VkIGF0IGJvdGggc2lkZXMsIG9yCisgKiBpZiB5b3UncmUgdXNpbmcgdGhlIE1heCBGcmFnbWVudCBMZW5ndGggZXh0ZW5zaW9uIGFuZCB5b3Uga25vdyBhbGwgeW91cgorICogcGVlcnMgYXJlIHVzaW5nIGl0IHRvbyEKKyAqLworI2lmICFkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTikKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICAgICAgICAgMTYzODQgICAvKio8IFNpemUgb2YgdGhlIGlucHV0IC8gb3V0cHV0IGJ1ZmZlciAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKy8qCisgKiBMZW5ndGggb2YgdGhlIHZlcmlmeSBkYXRhIGZvciBzZWN1cmUgcmVuZWdvdGlhdGlvbgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorI2RlZmluZSBNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOIDM2CisjZWxzZQorI2RlZmluZSBNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOIDEyCisjZW5kaWYKKworLyoKKyAqIFNpZ25hbGluZyBjaXBoZXJzdWl0ZSB2YWx1ZXMgKFNDU1YpCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPICAgIDB4RkYgICAvKio8IHJlbmVnb3RpYXRpb24gaW5mbyBleHQgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVl9WQUxVRSAgICAgICAgIDB4NTYwMCAvKio8IFJGQyA3NTA3IHNlY3Rpb24gMiAqLworCisvKgorICogU3VwcG9ydGVkIFNpZ25hdHVyZSBhbmQgSGFzaCBhbGdvcml0aG1zIChGb3IgVExTIDEuMikKKyAqIFJGQyA1MjQ2IHNlY3Rpb24gNy40LjEuNC4xCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9OT05FICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9NRDUgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9TSEExICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9TSEEyMjQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9TSEEyNTYgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9TSEEzODQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTUJFRFRMU19TU0xfSEFTSF9TSEE1MTIgICAgICAgICAgICAgIDYKKworI2RlZmluZSBNQkVEVExTX1NTTF9TSUdfQU5PTiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9TSUdfUlNBICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9TSUdfRUNEU0EgICAgICAgICAgICAgICAgMworCisvKgorICogQ2xpZW50IENlcnRpZmljYXRlIFR5cGVzCisgKiBSRkMgNTI0NiBzZWN0aW9uIDcuNC40IHBsdXMgUkZDIDQ0OTIgc2VjdGlvbiA1LjUKKyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9DRVJUX1RZUEVfUlNBX1NJR04gICAgICAgMQorI2RlZmluZSBNQkVEVExTX1NTTF9DRVJUX1RZUEVfRUNEU0FfU0lHTiAgICA2NAorCisvKgorICogTWVzc2FnZSwgYWxlcnQgYW5kIGhhbmRzaGFrZSB0eXBlcworICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMgICAgIDIwCisjZGVmaW5lIE1CRURUTFNfU1NMX01TR19BTEVSVCAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgICAgICAgICAgICAgIDIyCisjZGVmaW5lIE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBICAgICAgIDIzCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORyAgICAgICAgIDEKKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwgICAgICAgICAgIDIKKworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0xPU0VfTk9USUZZICAgICAgICAgICAwICAvKiAweDAwICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTkVYUEVDVEVEX01FU1NBR0UgICAgMTAgIC8qIDB4MEEgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDICAgICAgICAyMCAgLyogMHgxNCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDUllQVElPTl9GQUlMRUQgICAgIDIxICAvKiAweDE1ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19SRUNPUkRfT1ZFUkZMT1cgICAgICAgMjIgIC8qIDB4MTYgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ09NUFJFU1NJT05fRkFJTFVSRSAzMCAgLyogMHgxRSAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUgICAgIDQwICAvKiAweDI4ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19DRVJUICAgICAgICAgICAgICAgNDEgIC8qIDB4MjkgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9DRVJUICAgICAgICAgICAgICA0MiAgLyogMHgyQSAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfQ0VSVCAgICAgIDQzICAvKiAweDJCICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19DRVJUX1JFVk9LRUQgICAgICAgICAgNDQgIC8qIDB4MkMgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfRVhQSVJFRCAgICAgICAgICA0NSAgLyogMHgyRCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQ0VSVF9VTktOT1dOICAgICAgICAgIDQ2ICAvKiAweDJFICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTExFR0FMX1BBUkFNRVRFUiAgICAgNDcgIC8qIDB4MkYgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOS05PV05fQ0EgICAgICAgICAgICA0OCAgLyogMHgzMCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfQUNDRVNTX0RFTklFRCAgICAgICAgIDQ5ICAvKiAweDMxICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19ERUNPREVfRVJST1IgICAgICAgICAgNTAgIC8qIDB4MzIgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ1JZUFRfRVJST1IgICAgICAgICA1MSAgLyogMHgzMyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfRVhQT1JUX1JFU1RSSUNUSU9OICAgIDYwICAvKiAweDNDICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OICAgICAgNzAgIC8qIDB4NDYgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lOU1VGRklDSUVOVF9TRUNVUklUWSA3MSAgLyogMHg0NyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5URVJOQUxfRVJST1IgICAgICAgIDgwICAvKiAweDUwICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTkFQUk9QUklBVEVfRkFMTEJBQ0sgODYgIC8qIDB4NTYgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VTRVJfQ0FOQ0VMRUQgICAgICAgICA5MCAgLyogMHg1QSAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fUkVORUdPVElBVElPTiAgICAgMTAwICAvKiAweDY0ICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlNVUFBPUlRFRF9FWFQgICAgICAxMTAgIC8qIDB4NkUgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOUkVDT0dOSVpFRF9OQU1FICAgIDExMiAgLyogMHg3MCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9QU0tfSURFTlRJVFkgMTE1ICAvKiAweDczICovCisjZGVmaW5lIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19BUFBMSUNBVElPTl9QUk9UT0NPTCAxMjAgLyogMHg3OCAqLworCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1QgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0NMSUVOVF9IRUxMTyAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMTyAgICAgICAgICAgICAyCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUICAgICAzCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX05FV19TRVNTSU9OX1RJQ0tFVCAgICAgICA0CisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFICAgICAgICAgICAgIDExCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgICAgIDEyCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgICAgIDEzCisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMT19ET05FICAgICAgIDE0CisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1ZFUklGWSAgICAgIDE1CisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgICAgIDE2CisjZGVmaW5lIE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEICAgICAgICAgICAgICAgIDIwCisKKy8qCisgKiBUTFMgZXh0ZW5zaW9ucworICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUVfSE9TVE5BTUUgICAgICAgICAgMAorCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9NQVhfRlJBR01FTlRfTEVOR1RIICAgICAgICAgIDEKKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfVFJVTkNBVEVEX0hNQUMgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMgICAxMAorI2RlZmluZSBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFMgICAgIDExCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1NJR19BTEcgICAgICAgICAgICAgICAgICAgICAxMworCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9BTFBOICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfRU5DUllQVF9USEVOX01BQyAgICAgICAgICAgIDIyIC8qIDB4MTYgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgIDB4MDAxNyAvKiAyMyAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9TRVNTSU9OX1RJQ0tFVCAgICAgICAgICAgICAgMzUKKworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfRUNKUEFLRV9LS1BQICAgICAgICAgICAgICAgMjU2IC8qIGV4cGVyaW1lbnRhbCAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk8gICAgICAweEZGMDEKKworLyoKKyAqIFNpemUgZGVmaW5lcworICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19QU0tfTUFYX0xFTikKKyNkZWZpbmUgTUJFRFRMU19QU0tfTUFYX0xFTiAgICAgICAgICAgIDMyIC8qIDI1NiBiaXRzICovCisjZW5kaWYKKworLyogRHVtbXkgdHlwZSB1c2VkIG9ubHkgZm9yIGl0cyBzaXplICovCit1bmlvbiBtYmVkdGxzX3NzbF9wcmVtYXN0ZXJfc2VjcmV0Cit7CisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyIF9wbXNfcnNhWzQ4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDUyNDYgOC4xLjEgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgX3Btc19kaG1bTUJFRFRMU19NUElfTUFYX1NJWkVdOyAgICAgIC8qIFJGQyA1MjQ2IDguMS4yICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyIF9wbXNfZWNkaFtNQkVEVExTX0VDUF9NQVhfQllURVNdOyAgICAvKiBSRkMgNDQ5MiA1LjEwICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKQorICAgIHVuc2lnbmVkIGNoYXIgX3Btc19wc2tbNCArIDIgKiBNQkVEVExTX1BTS19NQVhfTEVOXTsgICAgICAgLyogUkZDIDQyNzkgMiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBfcG1zX2RoZV9wc2tbNCArIE1CRURUTFNfTVBJX01BWF9TSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIE1CRURUTFNfUFNLX01BWF9MRU5dOyAgICAgICAvKiBSRkMgNDI3OSAzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyIF9wbXNfcnNhX3Bza1s1MiArIE1CRURUTFNfUFNLX01BWF9MRU5dOyAgICAgIC8qIFJGQyA0Mjc5IDQgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBfcG1zX2VjZGhlX3Bza1s0ICsgTUJFRFRMU19FQ1BfTUFYX0JZVEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTUJFRFRMU19QU0tfTUFYX0xFTl07ICAgICAvKiBSRkMgNTQ4OSAyICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyIF9wbXNfZWNqcGFrZVszMl07ICAgICAvKiBUaHJlYWQgc3BlYzogU0hBLTI1NiBvdXRwdXQgKi8KKyNlbmRpZgorfTsKKworI2RlZmluZSBNQkVEVExTX1BSRU1BU1RFUl9TSVpFICAgICBzaXplb2YoIHVuaW9uIG1iZWR0bHNfc3NsX3ByZW1hc3Rlcl9zZWNyZXQgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBTU0wgc3RhdGUgbWFjaGluZQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQkVEVExTX1NTTF9IRUxMT19SRVFVRVNULAorICAgIE1CRURUTFNfU1NMX0NMSUVOVF9IRUxMTywKKyAgICBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE8sCisgICAgTUJFRFRMU19TU0xfU0VSVkVSX0NFUlRJRklDQVRFLAorICAgIE1CRURUTFNfU1NMX1NFUlZFUl9LRVlfRVhDSEFOR0UsCisgICAgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfUkVRVUVTVCwKKyAgICBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fRE9ORSwKKyAgICBNQkVEVExTX1NTTF9DTElFTlRfQ0VSVElGSUNBVEUsCisgICAgTUJFRFRMU19TU0xfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKyAgICBNQkVEVExTX1NTTF9DRVJUSUZJQ0FURV9WRVJJRlksCisgICAgTUJFRFRMU19TU0xfQ0xJRU5UX0NIQU5HRV9DSVBIRVJfU1BFQywKKyAgICBNQkVEVExTX1NTTF9DTElFTlRfRklOSVNIRUQsCisgICAgTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQywKKyAgICBNQkVEVExTX1NTTF9TRVJWRVJfRklOSVNIRUQsCisgICAgTUJFRFRMU19TU0xfRkxVU0hfQlVGRkVSUywKKyAgICBNQkVEVExTX1NTTF9IQU5EU0hBS0VfV1JBUFVQLAorICAgIE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSLAorICAgIE1CRURUTFNfU1NMX1NFUlZFUl9ORVdfU0VTU0lPTl9USUNLRVQsCisgICAgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPX1ZFUklGWV9SRVFVRVNUX1NFTlQsCit9CittYmVkdGxzX3NzbF9zdGF0ZXM7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhbGxiYWNrIHR5cGU6IHNlbmQgZGF0YSBvbiB0aGUgbmV0d29yay4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhhdCBjYWxsYmFjayBtYXkgYmUgZWl0aGVyIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZy4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ29udGV4dCBmb3IgdGhlIHNlbmQgY2FsbGJhY2sgKHR5cGljYWxseSBhIGZpbGUgZGVzY3JpcHRvcikKKyAqIFxwYXJhbSBidWYgICAgICBCdWZmZXIgaG9sZGluZyB0aGUgZGF0YSB0byBzZW5kCisgKiBccGFyYW0gbGVuICAgICAgTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHNlbmQKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBpZiBhbnksCisgKiAgICAgICAgICAgICAgICAgb3IgYSBub24temVybyBlcnJvciBjb2RlLgorICogICAgICAgICAgICAgICAgIElmIHBlcmZvcm1pbmcgbm9uLWJsb2NraW5nIEkvTywgXGMgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUKKyAqICAgICAgICAgICAgICAgICBtdXN0IGJlIHJldHVybmVkIHdoZW4gdGhlIG9wZXJhdGlvbiB3b3VsZCBibG9jay4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGNhbGxiYWNrIGlzIGFsbG93ZWQgdG8gc2VuZCBmZXdlciBieXRlcyB0aGFuIHJlcXVlc3RlZC4KKyAqICAgICAgICAgICAgICAgICBJdCBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBzZW50LgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX3NzbF9zZW5kX3QoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhbGxiYWNrIHR5cGU6IHJlY2VpdmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGF0IGNhbGxiYWNrIG1heSBiZSBlaXRoZXIgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nLgorICoKKyAqIFxwYXJhbSBjdHggICAgICBDb250ZXh0IGZvciB0aGUgcmVjZWl2ZSBjYWxsYmFjayAodHlwaWNhbGx5IGEgZmlsZQorICogICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IpCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRoZSByZWNlaXZlZCBkYXRhIHRvCisgKiBccGFyYW0gbGVuICAgICAgTGVuZ3RoIG9mIHRoZSByZWNlaXZlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgY2FsbGJhY2sgbXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCwKKyAqICAgICAgICAgICAgICAgICBvciBhIG5vbi16ZXJvIGVycm9yIGNvZGUuCisgKiAgICAgICAgICAgICAgICAgSWYgcGVyZm9ybWluZyBub24tYmxvY2tpbmcgSS9PLCBcYyBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFECisgKiAgICAgICAgICAgICAgICAgbXVzdCBiZSByZXR1cm5lZCB3aGVuIHRoZSBvcGVyYXRpb24gd291bGQgYmxvY2suCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBjYWxsYmFjayBtYXkgcmVjZWl2ZSBmZXdlciBieXRlcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgYnVmZmVyLiBJdCBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseQorICogICAgICAgICAgICAgICAgIHJlY2VpdmVkIGFuZCB3cml0dGVuIHRvIHRoZSBidWZmZXIuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX3JlY3ZfdCggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2FsbGJhY2sgdHlwZTogcmVjZWl2ZSBkYXRhIGZyb20gdGhlIG5ldHdvcmssIHdpdGggdGltZW91dAorICoKKyAqIFxub3RlICAgICAgICAgICBUaGF0IGNhbGxiYWNrIG11c3QgYmxvY2sgdW50aWwgZGF0YSBpcyByZWNlaXZlZCwgb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgdGltZW91dCBkZWxheSBleHBpcmVzLCBvciB0aGUgb3BlcmF0aW9uIGlzIGludGVycnVwdGVkIGJ5IGEKKyAqICAgICAgICAgICAgICAgICBzaWduYWwuCisgKgorICogXHBhcmFtIGN0eCAgICAgIENvbnRleHQgZm9yIHRoZSByZWNlaXZlIGNhbGxiYWNrICh0eXBpY2FsbHkgYSBmaWxlIGRlc2NyaXB0b3IpCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRoZSByZWNlaXZlZCBkYXRhIHRvCisgKiBccGFyYW0gbGVuICAgICAgTGVuZ3RoIG9mIHRoZSByZWNlaXZlIGJ1ZmZlcgorICogXHBhcmFtIHRpbWVvdXQgIE1heGltdW0gbm9tYmVyIG9mIG1pbGxpc2Vjb25kZXMgdG8gd2FpdCBmb3IgZGF0YQorICogICAgICAgICAgICAgICAgIDAgbWVhbnMgbm8gdGltZW91dCAocG90ZW50aWFsbHkgd2FpdGluZyBmb3JldmVyKQorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgY2FsbGJhY2sgbXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCwKKyAqICAgICAgICAgICAgICAgICBvciBhIG5vbi16ZXJvIGVycm9yIGNvZGU6CisgKiAgICAgICAgICAgICAgICAgXGMgTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQgaWYgdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQsCisgKiAgICAgICAgICAgICAgICAgXGMgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIGNhbGxiYWNrIG1heSByZWNlaXZlIGZld2VyIGJ5dGVzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBidWZmZXIuIEl0IG11c3QgYWx3YXlzIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5CisgKiAgICAgICAgICAgICAgICAgcmVjZWl2ZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBpbnQgbWJlZHRsc19zc2xfcmVjdl90aW1lb3V0X3QoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0aW1lb3V0ICk7CisvKioKKyAqIFxicmllZiAgICAgICAgICBDYWxsYmFjayB0eXBlOiBzZXQgYSBwYWlyIG9mIHRpbWVycy9kZWxheXMgdG8gd2F0Y2gKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgQ29udGV4dCBwb2ludGVyCisgKiBccGFyYW0gaW50X21zICAgSW50ZXJtZWRpYXRlIGRlbGF5IGluIG1pbGxpc2Vjb25kcworICogXHBhcmFtIGZpbl9tcyAgIEZpbmFsIGRlbGF5IGluIG1pbGxpc2Vjb25kcworICogICAgICAgICAgICAgICAgIDAgY2FuY2VscyB0aGUgY3VycmVudCB0aW1lci4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBjYWxsYmFjayBtdXN0IGF0IGxlYXN0IHN0b3JlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24KKyAqICAgICAgICAgICAgICAgICBmb3IgdGhlIGFzc29jaWF0ZWQgXGMgbWJlZHRsc19zc2xfZ2V0X3RpbWVyX3QgY2FsbGJhY2sgdG8KKyAqICAgICAgICAgICAgICAgICByZXR1cm4gY29ycmVjdCBpbmZvcm1hdGlvbi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgdXNpbmcgYSBldmVudC1kcml2ZW4gc3R5bGUgb2YgcHJvZ3JhbW1pbmcsIGFuIGV2ZW50IG11c3QKKyAqICAgICAgICAgICAgICAgICBiZSBnZW5lcmF0ZWQgd2hlbiB0aGUgZmluYWwgZGVsYXkgaXMgcGFzc2VkLiBUaGUgZXZlbnQgbXVzdAorICogICAgICAgICAgICAgICAgIGNhdXNlIGEgY2FsbCB0byBcYyBtYmVkdGxzX3NzbF9oYW5kc2hha2UoKSB3aXRoIHRoZSBwcm9wZXIKKyAqICAgICAgICAgICAgICAgICBTU0wgY29udGV4dCB0byBiZSBzY2hlZHVsZWQuIENhcmUgbXVzdCBiZSB0YWtlbiB0byBlbnN1cmUKKyAqICAgICAgICAgICAgICAgICB0aGF0IGF0IG1vc3Qgb25lIHN1Y2ggY2FsbCBoYXBwZW5zIGF0IGEgdGltZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgT25seSBvbmUgdGltZXIgYXQgYSB0aW1lIG11c3QgYmUgcnVubmluZy4gQ2FsbGluZyB0aGlzCisgKiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2hpbGUgYSB0aW1lciBpcyBydW5uaW5nIG11c3QgY2FuY2VsIGl0LiBDYW5jZWxsZWQKKyAqICAgICAgICAgICAgICAgICB0aW1lcnMgbXVzdCBub3QgZ2VuZXJhdGUgYW55IGV2ZW50LgorICovCit0eXBlZGVmIHZvaWQgbWJlZHRsc19zc2xfc2V0X3RpbWVyX3QoIHZvaWQgKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGludF9tcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmluX21zICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhbGxiYWNrIHR5cGU6IGdldCBzdGF0dXMgb2YgdGltZXJzL2RlbGF5cworICoKKyAqIFxwYXJhbSBjdHggICAgICBDb250ZXh0IHBvaW50ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhpcyBjYWxsYmFjayBtdXN0IHJldHVybjoKKyAqICAgICAgICAgICAgICAgICAtMSBpZiBjYW5jZWxsZWQgKGZpbl9tcyA9PSAwKSwKKyAqICAgICAgICAgICAgICAgICAgMCBpZiBub25lIG9mIHRoZSBkZWxheXMgaGF2ZSBwYXNzZWQsCisgKiAgICAgICAgICAgICAgICAgIDEgaWYgb25seSB0aGUgaW50ZXJtZWRpYXRlIGRlbGF5IGhhcyBwYXNzZWQsCisgKiAgICAgICAgICAgICAgICAgIDIgaWYgdGhlIGZpbmFsIGRlbGF5IGhhcyBwYXNzZWQuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX2dldF90aW1lcl90KCB2b2lkICogY3R4ICk7CisKKworLyogRGVmaW5lZCBiZWxvdyAqLwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXNzaW9uOwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfY29udGV4dCBtYmVkdGxzX3NzbF9jb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfY29uZmlnICBtYmVkdGxzX3NzbF9jb25maWc7CisKKy8qIERlZmluZWQgaW4gc3NsX2ludGVybmFsLmggKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX3RyYW5zZm9ybSBtYmVkdGxzX3NzbF90cmFuc2Zvcm07Cit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXM7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3NzbF9rZXlfY2VydCBtYmVkdGxzX3NzbF9rZXlfY2VydDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtOworI2VuZGlmCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBzdG9yaW5nIGN1cnJlbnQgc2Vzc2lvbiBkYXRhLgorICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfc2Vzc2lvbgoreworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgbWJlZHRsc190aW1lX3Qgc3RhcnQ7ICAgICAgIC8qITwgc3RhcnRpbmcgdGltZSAgICAgICovCisjZW5kaWYKKyAgICBpbnQgY2lwaGVyc3VpdGU7ICAgICAgICAgICAgLyohPCBjaG9zZW4gY2lwaGVyc3VpdGUgKi8KKyAgICBpbnQgY29tcHJlc3Npb247ICAgICAgICAgICAgLyohPCBjaG9zZW4gY29tcHJlc3Npb24gKi8KKyAgICBzaXplX3QgaWRfbGVuOyAgICAgICAgICAgICAgLyohPCBzZXNzaW9uIGlkIGxlbmd0aCAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGlkWzMyXTsgICAgICAgLyohPCBzZXNzaW9uIGlkZW50aWZpZXIgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1hc3Rlcls0OF07ICAgLyohPCB0aGUgbWFzdGVyIHNlY3JldCAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9jcnQgKnBlZXJfY2VydDsgICAgICAgIC8qITwgcGVlciBYLjUwOSBjZXJ0IGNoYWluICovCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisgICAgdWludDMyX3QgdmVyaWZ5X3Jlc3VsdDsgICAgICAgICAgLyohPCAgdmVyaWZpY2F0aW9uIHJlc3VsdCAgICAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIHVuc2lnbmVkIGNoYXIgKnRpY2tldDsgICAgICAvKiE8IFJGQyA1MDc3IHNlc3Npb24gdGlja2V0ICovCisgICAgc2l6ZV90IHRpY2tldF9sZW47ICAgICAgICAgIC8qITwgc2Vzc2lvbiB0aWNrZXQgbGVuZ3RoICAgKi8KKyAgICB1aW50MzJfdCB0aWNrZXRfbGlmZXRpbWU7ICAgLyohPCB0aWNrZXQgbGlmZXRpbWUgaGludCAgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAmJiBNQkVEVExTX1NTTF9DTElfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgIHVuc2lnbmVkIGNoYXIgbWZsX2NvZGU7ICAgICAvKiE8IE1heEZyYWdtZW50TGVuZ3RoIG5lZ290aWF0ZWQgYnkgcGVlciAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgaW50IHRydW5jX2htYWM7ICAgICAgICAgICAgIC8qITwgZmxhZyBmb3IgdHJ1bmNhdGVkIGhtYWMgYWN0aXZhdGlvbiAgICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICBpbnQgZW5jcnlwdF90aGVuX21hYzsgICAgICAgLyohPCBmbGFnIGZvciBFdE0gYWN0aXZhdGlvbiAgICAgICAgICAgICAgICAqLworI2VuZGlmCit9OworCisvKioKKyAqIFNTTC9UTFMgY29uZmlndXJhdGlvbiB0byBiZSBzaGFyZWQgYmV0d2VlbiBtYmVkdGxzX3NzbF9jb250ZXh0IHN0cnVjdHVyZXMuCisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF9jb25maWcKK3sKKyAgICAvKiBHcm91cCBpdGVtcyBieSBzaXplIChsYXJnZXN0IGZpcnN0KSB0byBtaW5pbWl6ZSBwYWRkaW5nIG92ZXJoZWFkICovCisKKyAgICAvKgorICAgICAqIFBvaW50ZXJzCisgICAgICovCisKKyAgICBjb25zdCBpbnQgKmNpcGhlcnN1aXRlX2xpc3RbNF07IC8qITwgYWxsb3dlZCBjaXBoZXJzdWl0ZXMgcGVyIHZlcnNpb24gICAqLworCisgICAgLyoqIENhbGxiYWNrIGZvciBwcmludGluZyBkZWJ1ZyBvdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB2b2lkICgqZl9kYmcpKHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKTsKKyAgICB2b2lkICpwX2RiZzsgICAgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgdGhlIGRlYnVnIGZ1bmN0aW9uICAgICAqLworCisgICAgLyoqIENhbGxiYWNrIGZvciBnZXR0aW5nIChwc2V1ZG8tKXJhbmRvbSBudW1iZXJzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworICAgIHZvaWQgKnBfcm5nOyAgICAgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciB0aGUgUk5HIGZ1bmN0aW9uICAgICAgICovCisKKyAgICAvKiogQ2FsbGJhY2sgdG8gcmV0cmlldmUgYSBzZXNzaW9uIGZyb20gdGhlIGNhY2hlICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAoKmZfZ2V0X2NhY2hlKSh2b2lkICosIG1iZWR0bHNfc3NsX3Nlc3Npb24gKik7CisgICAgLyoqIENhbGxiYWNrIHRvIHN0b3JlIGEgc2Vzc2lvbiBpbnRvIHRoZSBjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgKCpmX3NldF9jYWNoZSkodm9pZCAqLCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICopOworICAgIHZvaWQgKnBfY2FjaGU7ICAgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciBjYWNoZSBjYWxsYmFja3MgICAgICAgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgLyoqIENhbGxiYWNrIGZvciBzZXR0aW5nIGNlcnQgYWNjb3JkaW5nIHRvIFNOSSBleHRlbnNpb24gICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgKCpmX3NuaSkodm9pZCAqLCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICB2b2lkICpwX3NuaTsgICAgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgU05JIGNhbGxiYWNrICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAvKiogQ2FsbGJhY2sgdG8gY3VzdG9taXplIFguNTA5IGNlcnRpZmljYXRlIGNoYWluIHZlcmlmaWNhdGlvbiAgICAgICAgICAqLworICAgIGludCAoKmZfdnJmeSkodm9pZCAqLCBtYmVkdGxzX3g1MDlfY3J0ICosIGludCwgdWludDMyX3QgKik7CisgICAgdm9pZCAqcF92cmZ5OyAgICAgICAgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIFguNTA5IHZlcmlmeSBjYWxsbGJhY2sgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgLyoqIENhbGxiYWNrIHRvIHJldHJpZXZlIFBTSyBrZXkgZnJvbSBpZGVudGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgKCpmX3Bzaykodm9pZCAqLCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICB2b2lkICpwX3BzazsgICAgICAgICAgICAgICAgICAgIC8qITwgY29udGV4dCBmb3IgUFNLIGNhbGxiYWNrICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgIC8qKiBDYWxsYmFjayB0byBjcmVhdGUgJiB3cml0ZSBhIGNvb2tpZSBmb3IgQ2xpZW50SGVsbG8gdmVpcmlmY2F0aW9uICAgICovCisgICAgaW50ICgqZl9jb29raWVfd3JpdGUpKCB2b2lkICosIHVuc2lnbmVkIGNoYXIgKiosIHVuc2lnbmVkIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90ICk7CisgICAgLyoqIENhbGxiYWNrIHRvIHZlcmlmeSB2YWxpZGl0eSBvZiBhIENsaWVudEhlbGxvIGNvb2tpZSAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgKCpmX2Nvb2tpZV9jaGVjaykoIHZvaWQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCApOworICAgIHZvaWQgKnBfY29va2llOyAgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciB0aGUgY29va2llIGNhbGxiYWNrcyAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgIC8qKiBDYWxsYmFjayB0byBjcmVhdGUgJiB3cml0ZSBhIHNlc3Npb24gdGlja2V0ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqZl90aWNrZXRfd3JpdGUpKCB2b2lkICosIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QgKiwgdWludDMyX3QgKiApOworICAgIC8qKiBDYWxsYmFjayB0byBwYXJzZSBhIHNlc3Npb24gdGlja2V0IGludG8gYSBzZXNzaW9uIHN0cnVjdHVyZSAgICAgICAgICovCisgICAgaW50ICgqZl90aWNrZXRfcGFyc2UpKCB2b2lkICosIG1iZWR0bHNfc3NsX3Nlc3Npb24gKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworICAgIHZvaWQgKnBfdGlja2V0OyAgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciB0aGUgdGlja2V0IGNhbGxiYWNrcyAgICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTKQorICAgIC8qKiBDYWxsYmFjayB0byBleHBvcnQga2V5IGJsb2NrIGFuZCBtYXN0ZXIgc2VjcmV0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICgqZl9leHBvcnRfa2V5cykoIHZvaWQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90ICk7CisgICAgdm9pZCAqcF9leHBvcnRfa2V5czsgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIGtleSBleHBvcnQgY2FsbGJhY2sgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpjZXJ0X3Byb2ZpbGU7IC8qITwgdmVyaWZpY2F0aW9uIHByb2ZpbGUgKi8KKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqa2V5X2NlcnQ7IC8qITwgb3duIGNlcnRpZmljYXRlL2tleSBwYWlyKHMpICAgICAgICAqLworICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNhX2NoYWluOyAgICAgLyohPCB0cnVzdGVkIENBcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsOyAgICAgICAvKiE8IHRydXN0ZWQgQ0FzIENSTHMgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKyAgICBjb25zdCBpbnQgKnNpZ19oYXNoZXM7ICAgICAgICAgIC8qITwgYWxsb3dlZCBzaWduYXR1cmUgaGFzaGVzICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmN1cnZlX2xpc3Q7IC8qITwgYWxsb3dlZCBjdXJ2ZXMgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIG1iZWR0bHNfbXBpIGRobV9QOyAgICAgICAgICAgICAgLyohPCBwcmltZSBtb2R1bHVzIGZvciBESE0gICAgICAgICAgICAgICovCisgICAgbWJlZHRsc19tcGkgZGhtX0c7ICAgICAgICAgICAgICAvKiE8IGdlbmVyYXRvciBmb3IgREhNICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciAqcHNrOyAgICAgICAgICAgICAvKiE8IHByZS1zaGFyZWQga2V5ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzaXplX3QgICAgICAgICBwc2tfbGVuOyAgICAgICAgIC8qITwgbGVuZ3RoIG9mIHRoZSBwcmUtc2hhcmVkIGtleSAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKnBza19pZGVudGl0eTsgICAgLyohPCBpZGVudGl0eSBmb3IgUFNLIG5lZ290aWF0aW9uICAgICAgICovCisgICAgc2l6ZV90ICAgICAgICAgcHNrX2lkZW50aXR5X2xlbjsvKiE8IGxlbmd0aCBvZiBpZGVudGl0eSAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGNvbnN0IGNoYXIgKiphbHBuX2xpc3Q7ICAgICAgICAgLyohPCBvcmRlcmVkIGxpc3Qgb2YgcHJvdG9jb2xzICAgICAgICAgICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogTnVtZXJpY2FsIHNldHRpbmdzIChpbnQgdGhlbiBjaGFyKQorICAgICAqLworCisgICAgdWludDMyX3QgcmVhZF90aW1lb3V0OyAgICAgICAgICAvKiE8IHRpbWVvdXQgZm9yIG1iZWR0bHNfc3NsX3JlYWQgKG1zKSAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICB1aW50MzJfdCBoc190aW1lb3V0X21pbjsgICAgICAgIC8qITwgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgaGFuZHNoYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgKG1zKSAgICAgICAgKi8KKyAgICB1aW50MzJfdCBoc190aW1lb3V0X21heDsgICAgICAgIC8qITwgbWF4aW11bSB2YWx1ZSBvZiB0aGUgaGFuZHNoYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgKG1zKSAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGludCByZW5lZ29fbWF4X3JlY29yZHM7ICAgICAgICAgLyohPCBncmFjZSBwZXJpb2QgZm9yIHJlbmVnb3RpYXRpb24gICAgICovCisgICAgdW5zaWduZWQgY2hhciByZW5lZ29fcGVyaW9kWzhdOyAvKiE8IHZhbHVlIG9mIHRoZSByZWNvcmQgY291bnRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0cmlnZ2VycyByZW5lZ290aWF0aW9uICAgICAgICAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorICAgIHVuc2lnbmVkIGludCBiYWRtYWNfbGltaXQ7ICAgICAgLyohPCBsaW1pdCBvZiByZWNvcmRzIHdpdGggYSBiYWQgTUFDICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICB1bnNpZ25lZCBpbnQgZGhtX21pbl9iaXRsZW47ICAgIC8qITwgbWluLiBiaXQgbGVuZ3RoIG9mIHRoZSBESE0gcHJpbWUgICAqLworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBjaGFyIG1heF9tYWpvcl92ZXI7ICAgIC8qITwgbWF4LiBtYWpvciB2ZXJzaW9uIHVzZWQgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgbWF4X21pbm9yX3ZlcjsgICAgLyohPCBtYXguIG1pbm9yIHZlcnNpb24gdXNlZCAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBtaW5fbWFqb3JfdmVyOyAgICAvKiE8IG1pbi4gbWFqb3IgdmVyc2lvbiB1c2VkICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1pbl9taW5vcl92ZXI7ICAgIC8qITwgbWluLiBtaW5vciB2ZXJzaW9uIHVzZWQgICAgICAgICAgICAqLworCisgICAgLyoKKyAgICAgKiBGbGFncyAoYml0ZmllbGRzKQorICAgICAqLworCisgICAgdW5zaWduZWQgaW50IGVuZHBvaW50IDogMTsgICAgICAvKiE8IDA6IGNsaWVudCwgMTogc2VydmVyICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgdHJhbnNwb3J0IDogMTsgICAgIC8qITwgc3RyZWFtIChUTFMpIG9yIGRhdGFncmFtIChEVExTKSAgICAqLworICAgIHVuc2lnbmVkIGludCBhdXRobW9kZSA6IDI7ICAgICAgLyohPCBNQkVEVExTX1NTTF9WRVJJRllfWFhYICAgICAgICAgICAgICovCisgICAgLyogbmVlZGVkIGV2ZW4gd2l0aCByZW5lZ28gZGlzYWJsZWQgZm9yIExFR0FDWV9CUkVBS19IQU5EU0hBS0UgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBpbnQgYWxsb3dfbGVnYWN5X3JlbmVnb3RpYXRpb24gOiAyIDsgLyohPCBNQkVEVExTX0xFR0FDWV9YWFggICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgdW5zaWduZWQgaW50IGFyYzRfZGlzYWJsZWQgOiAxOyAvKiE8IGJsYWNrbGlzdCBSQzQgY2lwaGVyc3VpdGVzPyAgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICB1bnNpZ25lZCBpbnQgbWZsX2NvZGUgOiAzOyAgICAgIC8qITwgZGVzaXJlZCBmcmFnbWVudCBsZW5ndGggICAgICAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgIHVuc2lnbmVkIGludCBlbmNyeXB0X3RoZW5fbWFjIDogMSA7IC8qITwgbmVnb3RpYXRlIGVuY3J5cHQtdGhlbi1tYWM/ICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgdW5zaWduZWQgaW50IGV4dGVuZGVkX21zIDogMTsgICAvKiE8IG5lZ290aWF0ZSBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0PyAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKKyAgICB1bnNpZ25lZCBpbnQgYW50aV9yZXBsYXkgOiAxOyAgIC8qITwgZGV0ZWN0IGFuZCBwcmV2ZW50IHJlcGxheT8gICAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKyAgICB1bnNpZ25lZCBpbnQgY2JjX3JlY29yZF9zcGxpdHRpbmcgOiAxOyAgLyohPCBkbyBjYmMgcmVjb3JkIHNwbGl0dGluZyAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIHVuc2lnbmVkIGludCBkaXNhYmxlX3JlbmVnb3RpYXRpb24gOiAxOyAvKiE8IGRpc2FibGUgcmVuZWdvdGlhdGlvbj8gICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgIHVuc2lnbmVkIGludCB0cnVuY19obWFjIDogMTsgICAgLyohPCBuZWdvdGlhdGUgdHJ1bmNhdGVkIGhtYWM/ICAgICAgICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICB1bnNpZ25lZCBpbnQgc2Vzc2lvbl90aWNrZXRzIDogMTsgICAvKiE8IHVzZSBzZXNzaW9uIHRpY2tldHM/ICAgICAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIHVuc2lnbmVkIGludCBmYWxsYmFjayA6IDE7ICAgICAgLyohPCBpcyB0aGlzIGEgZmFsbGJhY2s/ICAgICAgICAgICAgICAgICovCisjZW5kaWYKK307CisKKworc3RydWN0IG1iZWR0bHNfc3NsX2NvbnRleHQKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmY7IC8qITwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAgICAgICAgICAqLworCisgICAgLyoKKyAgICAgKiBNaXNjZWxsYW5lb3VzCisgICAgICovCisgICAgaW50IHN0YXRlOyAgICAgICAgICAgICAgICAgIC8qITwgU1NMIGhhbmRzaGFrZTogY3VycmVudCBzdGF0ZSAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaW50IHJlbmVnb19zdGF0dXM7ICAgICAgICAgIC8qITwgSW5pdGlhbCwgaW4gcHJvZ3Jlc3MsIHBlbmRpbmc/ICAgKi8KKyAgICBpbnQgcmVuZWdvX3JlY29yZHNfc2VlbjsgICAgLyohPCBSZWNvcmRzIHNpbmNlIHJlbmVnbyByZXF1ZXN0LCBvciB3aXRoIERUTFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBvZiByZXF1ZXN0IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZWdvX21heF9yZWNvcmRzIGlzIDwgMCAgICAgICAgICAgKi8KKyNlbmRpZgorCisgICAgaW50IG1ham9yX3ZlcjsgICAgICAgICAgICAgIC8qITwgZXF1YWwgdG8gIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyAgICAqLworICAgIGludCBtaW5vcl92ZXI7ICAgICAgICAgICAgICAvKiE8IGVpdGhlciAwIChTU0wzKSBvciAxIChUTFMxLjApICAgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorICAgIHVuc2lnbmVkIGJhZG1hY19zZWVuOyAgICAgICAvKiE8IHJlY29yZHMgd2l0aCBhIGJhZCBNQUMgcmVjZWl2ZWQgICAgKi8KKyNlbmRpZgorCisgICAgbWJlZHRsc19zc2xfc2VuZF90ICpmX3NlbmQ7IC8qITwgQ2FsbGJhY2sgZm9yIG5ldHdvcmsgc2VuZCAqLworICAgIG1iZWR0bHNfc3NsX3JlY3ZfdCAqZl9yZWN2OyAvKiE8IENhbGxiYWNrIGZvciBuZXR3b3JrIHJlY2VpdmUgKi8KKyAgICBtYmVkdGxzX3NzbF9yZWN2X3RpbWVvdXRfdCAqZl9yZWN2X3RpbWVvdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FsbGJhY2sgZm9yIG5ldHdvcmsgcmVjZWl2ZSB3aXRoIHRpbWVvdXQgKi8KKworICAgIHZvaWQgKnBfYmlvOyAgICAgICAgICAgICAgICAvKiE8IGNvbnRleHQgZm9yIEkvTyBvcGVyYXRpb25zICAgKi8KKworICAgIC8qCisgICAgICogU2Vzc2lvbiBsYXllcgorICAgICAqLworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb25faW47ICAgICAgICAgICAgLyohPCAgY3VycmVudCBzZXNzaW9uIGRhdGEgKGluKSAgICovCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbl9vdXQ7ICAgICAgICAgICAvKiE8ICBjdXJyZW50IHNlc3Npb24gZGF0YSAob3V0KSAgKi8KKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uOyAgICAgICAgICAgICAgIC8qITwgIG5lZ290aWF0ZWQgc2Vzc2lvbiBkYXRhICAgICAqLworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb25fbmVnb3RpYXRlOyAgICAgLyohPCAgc2Vzc2lvbiBkYXRhIGluIG5lZ290aWF0aW9uICovCisKKyAgICBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zICpoYW5kc2hha2U7ICAgIC8qITwgIHBhcmFtcyByZXF1aXJlZCBvbmx5IGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBoYW5kc2hha2UgcHJvY2VzcyAgICAgICAgKi8KKworICAgIC8qCisgICAgICogUmVjb3JkIGxheWVyIHRyYW5zZm9ybWF0aW9ucworICAgICAqLworICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtX2luOyAgICAgICAgLyohPCAgY3VycmVudCB0cmFuc2Zvcm0gcGFyYW1zIChpbikgICAqLworICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtX291dDsgICAgICAgLyohPCAgY3VycmVudCB0cmFuc2Zvcm0gcGFyYW1zIChpbikgICAqLworICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtOyAgICAgICAgICAgLyohPCAgbmVnb3RpYXRlZCB0cmFuc2Zvcm0gcGFyYW1zICAgICAqLworICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtX25lZ290aWF0ZTsgLyohPCAgdHJhbnNmb3JtIHBhcmFtcyBpbiBuZWdvdGlhdGlvbiAqLworCisgICAgLyoKKyAgICAgKiBUaW1lcnMKKyAgICAgKi8KKyAgICB2b2lkICpwX3RpbWVyOyAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciB0aGUgdGltZXIgY2FsbGJhY2tzICovCisKKyAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfdCAqZl9zZXRfdGltZXI7ICAgICAgIC8qITwgc2V0IHRpbWVyIGNhbGxiYWNrICovCisgICAgbWJlZHRsc19zc2xfZ2V0X3RpbWVyX3QgKmZfZ2V0X3RpbWVyOyAgICAgICAvKiE8IGdldCB0aW1lciBjYWxsYmFjayAqLworCisgICAgLyoKKyAgICAgKiBSZWNvcmQgbGF5ZXIgKGluY29taW5nIGRhdGEpCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5fYnVmOyAgICAgIC8qITwgaW5wdXQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbl9jdHI7ICAgICAgLyohPCA2NC1iaXQgaW5jb21pbmcgbWVzc2FnZSBjb3VudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExTOiBtYWludGFpbmVkIGJ5IHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFRMUzogcmVhZCBmcm9tIHBlZXIgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbl9oZHI7ICAgICAgLyohPCBzdGFydCBvZiByZWNvcmQgaGVhZGVyICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKmluX2xlbjsgICAgICAvKiE8IHR3by1ieXRlcyBtZXNzYWdlIGxlbmd0aCBmaWVsZCAgICovCisgICAgdW5zaWduZWQgY2hhciAqaW5faXY7ICAgICAgIC8qITwgaXZsZW4tYnl0ZSBJViAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbl9tc2c7ICAgICAgLyohPCBtZXNzYWdlIGNvbnRlbnRzIChpbl9pditpdmxlbikgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKmluX29mZnQ7ICAgICAvKiE8IHJlYWQgb2Zmc2V0IGluIGFwcGxpY2F0aW9uIGRhdGEgICovCisKKyAgICBpbnQgaW5fbXNndHlwZTsgICAgICAgICAgICAgLyohPCByZWNvcmQgaGVhZGVyOiBtZXNzYWdlIHR5cGUgICAgICAqLworICAgIHNpemVfdCBpbl9tc2dsZW47ICAgICAgICAgICAvKiE8IHJlY29yZCBoZWFkZXI6IG1lc3NhZ2UgbGVuZ3RoICAgICovCisgICAgc2l6ZV90IGluX2xlZnQ7ICAgICAgICAgICAgIC8qITwgYW1vdW50IG9mIGRhdGEgcmVhZCBzbyBmYXIgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgdWludDE2X3QgaW5fZXBvY2g7ICAgICAgICAgIC8qITwgRFRMUyBlcG9jaCBmb3IgaW5jb21pbmcgcmVjb3JkcyAgKi8KKyAgICBzaXplX3QgbmV4dF9yZWNvcmRfb2Zmc2V0OyAgLyohPCBvZmZzZXQgb2YgdGhlIG5leHQgcmVjb3JkIGluIGRhdGFncmFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxdWFsIHRvIGluX2xlZnQgaWYgbm9uZSkgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKKyAgICB1aW50NjRfdCBpbl93aW5kb3dfdG9wOyAgICAgLyohPCBsYXN0IHZhbGlkYXRlZCByZWNvcmQgc2VxX251bSAgICAqLworICAgIHVpbnQ2NF90IGluX3dpbmRvdzsgICAgICAgICAvKiE8IGJpdG1hc2sgZm9yIHJlcGxheSBkZXRlY3Rpb24gICAgICovCisjZW5kaWYKKworICAgIHNpemVfdCBpbl9oc2xlbjsgICAgICAgICAgICAvKiE8IGN1cnJlbnQgaGFuZHNoYWtlIG1lc3NhZ2UgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgaGFuZHNoYWtlIGhlYWRlciAgICovCisgICAgaW50IG5iX3plcm87ICAgICAgICAgICAgICAgIC8qITwgIyBvZiAwLWxlbmd0aCBlbmNyeXB0ZWQgbWVzc2FnZXMgKi8KKyAgICBpbnQgcmVjb3JkX3JlYWQ7ICAgICAgICAgICAgLyohPCByZWNvcmQgaXMgYWxyZWFkeSBwcmVzZW50ICAgICAgICAqLworCisgICAgLyoKKyAgICAgKiBSZWNvcmQgbGF5ZXIgKG91dGdvaW5nIGRhdGEpCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0X2J1ZjsgICAgIC8qITwgb3V0cHV0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpvdXRfY3RyOyAgICAgLyohPCA2NC1iaXQgb3V0Z29pbmcgbWVzc2FnZSBjb3VudGVyICAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dF9oZHI7ICAgICAvKiE8IHN0YXJ0IG9mIHJlY29yZCBoZWFkZXIgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAqb3V0X2xlbjsgICAgIC8qITwgdHdvLWJ5dGVzIG1lc3NhZ2UgbGVuZ3RoIGZpZWxkICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpvdXRfaXY7ICAgICAgLyohPCBpdmxlbi1ieXRlIElWICAgICAgICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dF9tc2c7ICAgICAvKiE8IG1lc3NhZ2UgY29udGVudHMgKG91dF9pditpdmxlbikgICovCisKKyAgICBpbnQgb3V0X21zZ3R5cGU7ICAgICAgICAgICAgLyohPCByZWNvcmQgaGVhZGVyOiBtZXNzYWdlIHR5cGUgICAgICAqLworICAgIHNpemVfdCBvdXRfbXNnbGVuOyAgICAgICAgICAvKiE8IHJlY29yZCBoZWFkZXI6IG1lc3NhZ2UgbGVuZ3RoICAgICovCisgICAgc2l6ZV90IG91dF9sZWZ0OyAgICAgICAgICAgIC8qITwgYW1vdW50IG9mIGRhdGEgbm90IHlldCB3cml0dGVuICAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgdW5zaWduZWQgY2hhciAqY29tcHJlc3NfYnVmOyAgICAgICAgLyohPCAgemxpYiBkYXRhIGJ1ZmZlciAgICAgICAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisgICAgc2lnbmVkIGNoYXIgc3BsaXRfZG9uZTsgICAgIC8qITwgY3VycmVudCByZWNvcmQgYWxyZWFkeSBzcGxpdHRlZD8gKi8KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBQS0kgbGF5ZXIKKyAgICAgKi8KKyAgICBpbnQgY2xpZW50X2F1dGg7ICAgICAgICAgICAgICAgICAgICAvKiE8ICBmbGFnIGZvciBjbGllbnQgYXV0aC4gICAqLworCisgICAgLyoKKyAgICAgKiBVc2VyIHNldHRpbmdzCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgY2hhciAqaG9zdG5hbWU7ICAgICAgICAgICAgIC8qITwgZXhwZWN0ZWQgcGVlciBDTiBmb3IgdmVyaWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBTTkkgaWYgYXZhaWxhYmxlKSAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGNvbnN0IGNoYXIgKmFscG5fY2hvc2VuOyAgICAvKiE8ICBuZWdvdGlhdGVkIHByb3RvY29sICAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogSW5mb3JtYXRpb24gZm9yIERUTFMgaGVsbG8gdmVyaWZ5CisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICB1bnNpZ25lZCBjaGFyICAqY2xpX2lkOyAgICAgICAgIC8qITwgIHRyYW5zcG9ydC1sZXZlbCBJRCBvZiB0aGUgY2xpZW50ICAqLworICAgIHNpemVfdCAgICAgICAgICBjbGlfaWRfbGVuOyAgICAgLyohPCAgbGVuZ3RoIG9mIGNsaV9pZCAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogU2VjdXJlIHJlbmVnb3RpYXRpb24KKyAgICAgKi8KKyAgICAvKiBuZWVkZWQgdG8ga25vdyB3aGVuIHRvIHNlbmQgZXh0ZW5zaW9uIG9uIHNlcnZlciAqLworICAgIGludCBzZWN1cmVfcmVuZWdvdGlhdGlvbjsgICAgICAgICAgIC8qITwgIGRvZXMgcGVlciBzdXBwb3J0IGxlZ2FjeSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSByZW5lZ290aWF0aW9uICAgICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBzaXplX3QgdmVyaWZ5X2RhdGFfbGVuOyAgICAgICAgICAgICAvKiE8ICBsZW5ndGggb2YgdmVyaWZ5IGRhdGEgc3RvcmVkICAgKi8KKyAgICBjaGFyIG93bl92ZXJpZnlfZGF0YVtNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOXTsgLyohPCAgcHJldmlvdXMgaGFuZHNoYWtlIHZlcmlmeSBkYXRhICovCisgICAgY2hhciBwZWVyX3ZlcmlmeV9kYXRhW01CRURUTFNfU1NMX1ZFUklGWV9EQVRBX01BWF9MRU5dOyAvKiE8ICBwcmV2aW91cyBoYW5kc2hha2UgdmVyaWZ5IGRhdGEgKi8KKyNlbmRpZgorfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorCisjZGVmaW5lIE1CRURUTFNfU1NMX0NIQU5ORUxfT1VUQk9VTkQgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9DSEFOTkVMX0lOQk9VTkQgICAgIDEKKworZXh0ZXJuIGludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF9pbml0KShtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X2VuYywgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X2RlYywKKyAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2X2VuYywgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2X2RlYywKKyAgICAgICAgICAgICAgICBzaXplX3QgaXZsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2VuYywgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2RlYywKKyAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuKTsKK2V4dGVybiBpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUpKG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGRpcmVjdGlvbik7CitleHRlcm4gaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0KShtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wpOworZXh0ZXJuIGludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF93cml0ZSkobWJlZHRsc19zc2xfY29udGV4dCAqc3NsKTsKK2V4dGVybiBpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfcmVhZCkobWJlZHRsc19zc2xfY29udGV4dCAqc3NsKTsKK2V4dGVybiBpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfZmluaXNoKShtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wpOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCAqLworCisvKioKKyAqIFxicmllZiBSZXR1cm5zIHRoZSBsaXN0IG9mIGNpcGhlcnN1aXRlcyBzdXBwb3J0ZWQgYnkgdGhlIFNTTC9UTFMgbW9kdWxlLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXkgb2YgY2lwaGVyc3VpdGVzLCB0aGUgbGFzdAorICogICAgICAgICAgICAgICAgICAgICAgZW50cnkgaXMgMC4KKyAqLworY29uc3QgaW50ICptYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcyggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY2lwaGVyc3VpdGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gSUQKKyAqCisgKiBccGFyYW0gY2lwaGVyc3VpdGVfaWQgU1NMIGNpcGhlcnN1aXRlIElECisgKgorICogXHJldHVybiAgICAgICAgICAgICAgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2lwaGVyc3VpdGUgbmFtZQorICovCitjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfbmFtZSggY29uc3QgaW50IGNpcGhlcnN1aXRlX2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBJRCBvZiB0aGUgY2lwaGVyc3VpdGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gbmFtZQorICoKKyAqIFxwYXJhbSBjaXBoZXJzdWl0ZV9uYW1lIFNTTCBjaXBoZXJzdWl0ZSBuYW1lCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgdGhlIElEIHdpdGggdGhlIGNpcGhlcnN1aXRlIG9yIDAgaWYgbm90IGZvdW5kCisgKi8KK2ludCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfaWQoIGNvbnN0IGNoYXIgKmNpcGhlcnN1aXRlX25hbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBhbiBTU0wgY29udGV4dAorICogICAgICAgICAgICAgICAgIEp1c3QgbWFrZXMgdGhlIGNvbnRleHQgcmVhZHkgZm9yIG1iZWR0bHNfc3NsX3NldHVwKCkgb3IKKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9mcmVlKCkKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9pbml0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHVwIGFuIFNTTCBjb250ZXh0IGZvciB1c2UKKyAqCisgKiBcbm90ZSAgICAgICAgICAgTm8gY29weSBvZiB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIG1hZGUsIGl0IGNhbiBiZQorICogICAgICAgICAgICAgICAgIHNoYXJlZCBieSBtYW55IG1iZWR0bHNfc3NsX2NvbnRleHQgc3RydWN0dXJlcy4KKyAqCisgKiBcd2FybmluZyAgICAgICAgTW9kaWZ5aW5nIHRoZSBjb25mIHN0cnVjdHVyZSBhZnRlciBpdCBoYXMgYmVlbiB1c2VkIGluIHRoaXMKKyAqICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpcyB1bnN1cHBvcnRlZCEKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbiB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEIGlmCisgKiAgICAgICAgICAgICAgICAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXR1cCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmVzZXQgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBTU0wgY29udGV4dCBmb3IgcmUtdXNlCisgKiAgICAgICAgICAgICAgICAgd2hpbGUgcmV0YWluaW5nIGFwcGxpY2F0aW9uLXNldCB2YXJpYWJsZXMsIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgcG9pbnRlcnMgYW5kIGRhdGEuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVELAorICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBjdXJyZW50IGVuZHBvaW50IHR5cGUKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBlbmRwb2ludCBtdXN0IGJlIE1CRURUTFNfU1NMX0lTX0NMSUVOVCBvciBNQkVEVExTX1NTTF9JU19TRVJWRVIKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2VuZHBvaW50KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBlbmRwb2ludCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSB0cmFuc3BvcnQgdHlwZSAoVExTIG9yIERUTFMpLgorICogICAgICAgICAgICAgICAgICBEZWZhdWx0OiBUTFMKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIEZvciBEVExTLCB5b3UgbXVzdCBlaXRoZXIgcHJvdmlkZSBhIHJlY3YgY2FsbGJhY2sgdGhhdAorICogICAgICAgICAgICAgICAgICBkb2Vzbid0IGJsb2NrLCBvciBvbmUgdGhhdCBoYW5kbGVzIHRpbWVvdXRzLCBzZWUKKyAqICAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2V0X2JpbygpLiBZb3UgYWxzbyBuZWVkIHRvIHByb3ZpZGUgdGltZXIKKyAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzIHdpdGggXGMgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHRyYW5zcG9ydCB0cmFuc3BvcnQgdHlwZToKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSBmb3IgVExTLAorICogICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gZm9yIERUTFMuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl90cmFuc3BvcnQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHRyYW5zcG9ydCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBtb2RlCisgKiAgICAgICAgICAgICAgICAgRGVmYXVsdDogTk9ORSBvbiBzZXJ2ZXIsIFJFUVVJUkVEIG9uIGNsaWVudAorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGF1dGhtb2RlIGNhbiBiZToKKyAqCisgKiAgTUJFRFRMU19TU0xfVkVSSUZZX05PTkU6ICAgICAgcGVlciBjZXJ0aWZpY2F0ZSBpcyBub3QgY2hlY2tlZAorICogICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCBvbiBzZXJ2ZXIpCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnNlY3VyZSBvbiBjbGllbnQpCisgKgorICogIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTDogIHBlZXIgY2VydGlmaWNhdGUgaXMgY2hlY2tlZCwgaG93ZXZlciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlIGNvbnRpbnVlcyBldmVuIGlmIHZlcmlmaWNhdGlvbiBmYWlsZWQ7CisgKiAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCkgY2FuIGJlIGNhbGxlZCBhZnRlciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlIGlzIGNvbXBsZXRlLgorICoKKyAqICBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQ6ICBwZWVyICptdXN0KiBwcmVzZW50IGEgdmFsaWQgY2VydGlmaWNhdGUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZSBpcyBhYm9ydGVkIGlmIHZlcmlmaWNhdGlvbiBmYWlsZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IG9uIGNsaWVudCkKKyAqCisgKiBcbm90ZSBPbiBjbGllbnQsIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRCBpcyB0aGUgcmVjb21tZW5kZWQgbW9kZS4KKyAqIFdpdGggTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMLCB0aGUgdXNlciBuZWVkcyB0byBjYWxsIG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCkgYXQKKyAqIHRoZSByaWdodCB0aW1lKHMpLCB3aGljaCBtYXkgbm90IGJlIG9idmlvdXMsIHdoaWxlIFJFUVVJUkVEIGFsd2F5cyBwZXJmb3JtCisgKiB0aGUgdmVyaWZpY2F0aW9uIGFzIHNvb24gYXMgcG9zc2libGUuIEZvciBleGFtcGxlLCBSRVFVSVJFRCB3YXMgcHJvdGVjdGluZworICogYWdhaW5zdCB0aGUgInRyaXBsZSBoYW5kc2hha2UiIGF0dGFjayBldmVuIGJlZm9yZSBpdCB3YXMgZm91bmQuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgYXV0aG1vZGUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSB2ZXJpZmljYXRpb24gY2FsbGJhY2sgKE9wdGlvbmFsKS4KKyAqCisgKiAgICAgICAgICAgICAgICAgSWYgc2V0LCB0aGUgdmVyaWZ5IGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgZWFjaAorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIGluIHRoZSBjaGFpbi4gRm9yIGltcGxlbWVudGF0aW9uCisgKiAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgXGMgeDUwOXBhcnNlX3ZlcmlmeSgpCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gZl92cmZ5ICAgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uCisgKiBccGFyYW0gcF92cmZ5ICAgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfdmVyaWZ5KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF92cmZ5ICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgY2FsbGJhY2sKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBmX3JuZyAgICBSTkcgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3JuZyAgICBSTkcgcGFyYW1ldGVyCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9ybmcoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgZGVidWcgY2FsbGJhY2sKKyAqCisgKiAgICAgICAgICAgICAgICAgVGhlIGNhbGxiYWNrIGhhcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50OgorICogICAgICAgICAgICAgICAgIHZvaWQgKiAgICAgICAgICAgb3BhcXVlIGNvbnRleHQgZm9yIHRoZSBjYWxsYmFjaworICogICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgZGVidWcgbGV2ZWwKKyAqICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogICAgIGZpbGUgbmFtZQorICogICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgbGluZSBudW1iZXIKKyAqICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogICAgIG1lc3NhZ2UKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBmX2RiZyAgICBkZWJ1ZyBmdW5jdGlvbgorICogXHBhcmFtIHBfZGJnICAgIGRlYnVnIHBhcmFtZXRlcgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICB2b2lkICgqZl9kYmcpKHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgICpwX2RiZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIHVuZGVybHlpbmcgQklPIGNhbGxiYWNrcyBmb3Igd3JpdGUsIHJlYWQgYW5kCisgKiAgICAgICAgICAgICAgICAgcmVhZC13aXRoLXRpbWVvdXQuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gcF9iaW8gICAgcGFyYW1ldGVyIChjb250ZXh0KSBzaGFyZWQgYnkgQklPIGNhbGxiYWNrcworICogXHBhcmFtIGZfc2VuZCAgIHdyaXRlIGNhbGxiYWNrCisgKiBccGFyYW0gZl9yZWN2ICAgcmVhZCBjYWxsYmFjaworICogXHBhcmFtIGZfcmVjdl90aW1lb3V0IGJsb2NraW5nIHJlYWQgY2FsbGJhY2sgd2l0aCB0aW1lb3V0LgorICoKKyAqIFxub3RlICAgICAgICAgICBPbmUgb2YgZl9yZWN2IG9yIGZfcmVjdl90aW1lb3V0IGNhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlCisgKiAgICAgICAgICAgICAgICAgdGhlIG90aGVyIGlzIHVzZWQuIElmIGJvdGggYXJlIG5vbi1OVUxMLCBmX3JlY3ZfdGltZW91dCBpcworICogICAgICAgICAgICAgICAgIHVzZWQgYW5kIGZfcmVjdiBpcyBpZ25vcmVkIChhcyBpZiBpdCB3ZXJlIE5VTEwpLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgdHdvIG1vc3QgY29tbW9uIHVzZSBjYXNlcyBhcmU6CisgKiAgICAgICAgICAgICAgICAgLSBub24tYmxvY2tpbmcgSS9PLCBmX3JlY3YgIT0gTlVMTCwgZl9yZWN2X3RpbWVvdXQgPT0gTlVMTAorICogICAgICAgICAgICAgICAgIC0gYmxvY2tpbmcgSS9PLCBmX3JlY3YgPT0gTlVMTCwgZl9yZWN2X3RpbW91dCAhPSBOVUxMCisgKgorICogXG5vdGUgICAgICAgICAgIEZvciBEVExTLCB5b3UgbmVlZCB0byBwcm92aWRlIGVpdGhlciBhIG5vbi1OVUxMCisgKiAgICAgICAgICAgICAgICAgZl9yZWN2X3RpbWVvdXQgY2FsbGJhY2ssIG9yIGEgZl9yZWN2IHRoYXQgZG9lc24ndCBibG9jay4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9ucyBvZiBcYyBtYmVkdGxzX3NzbF9zZW50X3QsCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfcmVjdl90IGFuZCBcYyBtYmVkdGxzX3NzbF9yZWN2X3RpbWVvdXRfdCBmb3IKKyAqICAgICAgICAgICAgICAgICB0aGUgY29udmVudGlvbnMgdGhvc2UgY2FsbGJhY2tzIG11c3QgZm9sbG93LgorICoKKyAqIFxub3RlICAgICAgICAgICBPbiBzb21lIHBsYXRmb3JtcywgbmV0X3NvY2tldHMuYyBwcm92aWRlcworICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfbmV0X3NlbmQoKSwgXGMgbWJlZHRsc19uZXRfcmVjdigpIGFuZAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfbmV0X3JlY3ZfdGltZW91dCgpIHRoYXQgYXJlIHN1aXRhYmxlIHRvIGJlIHVzZWQKKyAqICAgICAgICAgICAgICAgICBoZXJlLgorICovCit2b2lkIG1iZWR0bHNfc3NsX3NldF9iaW8oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9iaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfdCAqZl9zZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9yZWN2X3QgKmZfcmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfcmVjdl90aW1lb3V0X3QgKmZfcmVjdl90aW1lb3V0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgdGltZW91dCBwZXJpb2QgZm9yIG1iZWR0bHNfc3NsX3JlYWQoKQorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBubyB0aW1lb3V0LikKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24gY29udGV4dAorICogXHBhcmFtIHRpbWVvdXQgIFRpbWVvdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgorICogICAgICAgICAgICAgICAgIFVzZSAwIGZvciBubyB0aW1lb3V0IChkZWZhdWx0KS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgV2l0aCBibG9ja2luZyBJL08sIHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgYSBub24tTlVMTAorICogICAgICAgICAgICAgICAgIFxjIGZfcmVjdl90aW1lb3V0IHdhcyBzZXQgd2l0aCBcYyBtYmVkdGxzX3NzbF9zZXRfYmlvKCkuCisgKiAgICAgICAgICAgICAgICAgV2l0aCBub24tYmxvY2tpbmcgSS9PLCB0aGlzIHdpbGwgb25seSB3b3JrIGlmIHRpbWVyCisgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2tzIHdlcmUgc2V0IHdpdGggXGMgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkuCisgKgorICogXG5vdGUgICAgICAgICAgIFdpdGggbm9uLWJsb2NraW5nIEkvTywgeW91IG1heSBhbHNvIHNraXAgdGhpcyBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgIGFsdG9nZXRoZXIgYW5kIGhhbmRsZSB0aW1lb3V0cyBhdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9yZWFkX3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgdWludDMyX3QgdGltZW91dCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIHRpbWVyIGNhbGxiYWNrcyAoTWFuZGF0b3J5IGZvciBEVExTLikKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBwX3RpbWVyICBwYXJhbWV0ZXIgKGNvbnRleHQpIHNoYXJlZCBieSB0aW1lciBjYWxsYmFja3MKKyAqIFxwYXJhbSBmX3NldF90aW1lciAgIHNldCB0aW1lciBjYWxsYmFjaworICogXHBhcmFtIGZfZ2V0X3RpbWVyICAgZ2V0IHRpbWVyIGNhbGxiYWNrLiBNdXN0IHJldHVybjoKKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIFxjIG1iZWR0bHNfc3NsX3NldF90aW1lcl90IGFuZAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX2dldF90aW1lcl90IGZvciB0aGUgY29udmVudGlvbnMgdGhpcyBwYWlyIG9mCisgKiAgICAgICAgICAgICAgICAgY2FsbGJhY2tzIG11c3QgZmFsbG93LgorICoKKyAqIFxub3RlICAgICAgICAgICBPbiBzb21lIHBsYXRmb3JtcywgdGltaW5nLmMgcHJvdmlkZXMKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3RpbWluZ19zZXRfZGVsYXkoKSBhbmQKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoKSB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdXNpbmcKKyAqICAgICAgICAgICAgICAgICBoZXJlLCBleGNlcHQgaWYgdXNpbmcgYW4gZXZlbnQtZHJpdmVuIHN0eWxlLgorICoKKyAqIFxub3RlICAgICAgICAgICBTZWUgYWxzbyB0aGUgIkRUTFMgdHV0b3JpYWwiIGFydGljbGUgaW4gb3VyIGtub3dsZWRnZSBiYXNlLgorICogICAgICAgICAgICAgICAgIGh0dHBzOi8vdGxzLm1iZWQub3JnL2tiL2hvdy10by9kdGxzLXR1dG9yaWFsCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF90aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfdCAqZl9zZXRfdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X3RpbWVyX3QgKmZfZ2V0X3RpbWVyICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDYWxsYmFjayB0eXBlOiBnZW5lcmF0ZSBhbmQgd3JpdGUgc2Vzc2lvbiB0aWNrZXQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgZGVzY3JpYmVzIHdoYXQgYSBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBzaG91bGQgZG8uCisgKiAgICAgICAgICAgICAgICAgIFRoaXMgY2FsbGJhY2sgc2hvdWxkIGdlbmVyYXRlIGFuIGVuY3J5cHRlZCBhbmQKKyAqICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZCB0aWNrZXQgZm9yIHRoZSBzZXNzaW9uIGFuZCB3cml0ZSBpdCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlci4gSGVyZSwgdGlja2V0IG1lYW5zIHRoZSBvcGFxdWUgdGlja2V0IHBhcnQKKyAqICAgICAgICAgICAgICAgICAgb2YgdGhlIE5ld1Nlc3Npb25UaWNrZXQgc3RydWN0dXJlIG9mIFJGQyA1MDc3LgorICoKKyAqIFxwYXJhbSBwX3RpY2tldCAgQ29udGV4dCBmb3IgdGhlIGNhbGxiYWNrCisgKiBccGFyYW0gc2Vzc2lvbiAgIFNTTCBzZXNzaW9uIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIHRpY2tldAorICogXHBhcmFtIHN0YXJ0ICAgICBTdGFydCBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogXHBhcmFtIGVuZCAgICAgICBFbmQgb2YgdGhlIG91dHB1dCBidWZmZXIKKyAqIFxwYXJhbSB0bGVuICAgICAgT24gZXhpdCwgaG9sZHMgdGhlIGxlbmd0aCB3cml0dGVuCisgKiBccGFyYW0gbGlmZXRpbWUgIE9uIGV4aXQsIGhvbGRzIHRoZSBsaWZldGltZSBvZiB0aGUgdGlja2V0IGluIHNlY29uZHMKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBNQkVEVExTX0VSUl9YWFggY29kZS4KKyAqLwordHlwZWRlZiBpbnQgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlX3QoIHZvaWQgKnBfdGlja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbGlmZXRpbWUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2FsbGJhY2sgdHlwZTogRXhwb3J0IGtleSBibG9jayBhbmQgbWFzdGVyIHNlY3JldAorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBpcyByZXF1aXJlZCBmb3IgY2VydGFpbiB1c2VzIG9mIFRMUywgZS5nLiBFQVAtVExTCisgKiAgICAgICAgICAgICAgICAgIChSRkMgNTIxNikgYW5kIFRocmVhZC4gVGhlIGtleSBwb2ludGVycyBhcmUgZXBoZW1lcmFsIGFuZAorICogICAgICAgICAgICAgICAgICB0aGVyZWZvcmUgbXVzdCBub3QgYmUgc3RvcmVkLiBUaGUgbWFzdGVyIHNlY3JldCBhbmQga2V5cworICogICAgICAgICAgICAgICAgICBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgZXhjZXB0IGFzIGFuIGlucHV0IHRvIGEga2V5CisgKiAgICAgICAgICAgICAgICAgIGRlcml2YXRpb24gZnVuY3Rpb24uCisgKgorICogXHBhcmFtIHBfZXhwa2V5ICBDb250ZXh0IGZvciB0aGUgY2FsbGJhY2sKKyAqIFxwYXJhbSBtcyAgICAgICAgUG9pbnRlciB0byBtYXN0ZXIgc2VjcmV0IChmaXhlZCBsZW5ndGg6IDQ4IGJ5dGVzKQorICogXHBhcmFtIGtiICAgICAgICBQb2ludGVyIHRvIGtleSBibG9jaywgc2VlIFJGQyA1MjQ2IHNlY3Rpb24gNi4zCisgKiAgICAgICAgICAgICAgICAgICh2YXJpYWJsZSBsZW5ndGg6IDIgKiBtYWNsZW4gKyAyICoga2V5bGVuICsgMiAqIGl2bGVuKS4KKyAqIFxwYXJhbSBtYWNsZW4gICAgTUFDIGxlbmd0aAorICogXHBhcmFtIGtleWxlbiAgICBLZXkgbGVuZ3RoCisgKiBccGFyYW0gaXZsZW4gICAgIElWIGxlbmd0aAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIE1CRURUTFNfRVJSX1hYWCBjb2RlLgorICovCit0eXBlZGVmIGludCBtYmVkdGxzX3NzbF9leHBvcnRfa2V5c190KCB2b2lkICpwX2V4cGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZsZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ2FsbGJhY2sgdHlwZTogcGFyc2UgYW5kIGxvYWQgc2Vzc2lvbiB0aWNrZXQKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoaXMgZGVzY3JpYmVzIHdoYXQgYSBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBzaG91bGQgZG8uCisgKiAgICAgICAgICAgICAgICAgIFRoaXMgY2FsbGJhY2sgc2hvdWxkIHBhcnNlIGEgc2Vzc2lvbiB0aWNrZXQgYXMgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAgICAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1iZWR0bHNfc3NsX3RpY2tldF93cml0ZV90IGZ1bmN0aW9uLAorICogICAgICAgICAgICAgICAgICBhbmQsIGlmIHRoZSB0aWNrZXQgaXMgYXV0aGVudGljIGFuZCB2YWxpZCwgbG9hZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgc2Vzc2lvbi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgZmlyc3QgbGVuCisgKiAgICAgICAgICAgICAgICAgIGJ5dGVzIG9mIHRoZSBpbnB1dCBidWZmZXIsIGVnIHRvIHVzZSBpdCBhcyBhIHRlbXBvcmFyeQorICogICAgICAgICAgICAgICAgICBhcmVhIGZvciB0aGUgZGVjcnlwdGVkIHRpY2tldCBjb250ZW50cy4KKyAqCisgKiBccGFyYW0gcF90aWNrZXQgIENvbnRleHQgZm9yIHRoZSBjYWxsYmFjaworICogXHBhcmFtIHNlc3Npb24gICBTU0wgc2Vzc2lvbiB0byBiZSBsb2FkZWQKKyAqIFxwYXJhbSBidWYgICAgICAgU3RhcnQgb2YgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0aWNrZXQKKyAqIFxwYXJhbSBsZW4gICAgICAgTGVuZ3RoIG9mIHRoZSB0aWNrZXQuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yCisgKiAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyBpZiBub3QgYXV0aGVudGljLCBvcgorICogICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfU0VTU0lPTl9USUNLRVRfRVhQSVJFRCBpZiBleHBpcmVkLCBvcgorICogICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgbm9uLXplcm8gY29kZSBmb3Igb3RoZXIgZmFpbHVyZXMuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX3RpY2tldF9wYXJzZV90KCB2b2lkICpwX3RpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDb25maWd1cmUgU1NMIHNlc3Npb24gdGlja2V0IGNhbGxiYWNrcyAoc2VydmVyIG9ubHkpLgorICogICAgICAgICAgICAgICAgICAoRGVmYXVsdDogbm9uZS4pCisgKgorICogXG5vdGUgICAgICAgICAgICBPbiBzZXJ2ZXIsIHNlc3Npb24gdGlja2V0cyBhcmUgZW5hYmxlZCBieSBwcm92aWRpbmcKKyAqICAgICAgICAgICAgICAgICAgbm9uLU5VTEwgY2FsbGJhY2tzLgorICoKKyAqIFxub3RlICAgICAgICAgICAgT24gY2xpZW50LCB1c2UgXGMgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBmX3RpY2tldF93cml0ZSAgICBDYWxsYmFjayBmb3Igd3JpdGluZyBhIHRpY2tldAorICogXHBhcmFtIGZfdGlja2V0X3BhcnNlICAgIENhbGxiYWNrIGZvciBwYXJzaW5nIGEgdGlja2V0CisgKiBccGFyYW0gcF90aWNrZXQgICAgICAgICAgQ29udGV4dCBzaGFyZWQgYnkgdGhlIHR3byBjYWxsYmFja3MKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0c19jYiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGVfdCAqZl90aWNrZXRfd3JpdGUsCisgICAgICAgIG1iZWR0bHNfc3NsX3RpY2tldF9wYXJzZV90ICpmX3RpY2tldF9wYXJzZSwKKyAgICAgICAgdm9pZCAqcF90aWNrZXQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgJiYgTUJFRFRMU19TU0xfU1JWX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgQ29uZmlndXJlIGtleSBleHBvcnQgY2FsbGJhY2suCisgKiAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBub25lLikKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFNlZSBcYyBtYmVkdGxzX3NzbF9leHBvcnRfa2V5c190LgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgU1NMIGNvbmZpZ3VyYXRpb24gY29udGV4dAorICogXHBhcmFtIGZfZXhwb3J0X2tleXMgICAgIENhbGxiYWNrIGZvciBleHBvcnRpbmcga2V5cworICogXHBhcmFtIHBfZXhwb3J0X2tleXMgICAgIENvbnRleHQgZm9yIHRoZSBjYWxsYmFjaworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZXhwb3J0X2tleXNfY2IoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgbWJlZHRsc19zc2xfZXhwb3J0X2tleXNfdCAqZl9leHBvcnRfa2V5cywKKyAgICAgICAgdm9pZCAqcF9leHBvcnRfa2V5cyApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIENhbGxiYWNrIHR5cGU6IGdlbmVyYXRlIGEgY29va2llCisgKgorICogXHBhcmFtIGN0eCAgICAgIENvbnRleHQgZm9yIHRoZSBjYWxsYmFjaworICogXHBhcmFtIHAgICAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bywKKyAqICAgICAgICAgICAgICAgICBtdXN0IGJlIHVwZGF0ZWQgdG8gcG9pbnQgcmlnaHQgYWZ0ZXIgdGhlIGNvb2tpZQorICogXHBhcmFtIGVuZCAgICAgIFBvaW50ZXIgdG8gb25lIHBhc3QgdGhlIGVuZCBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgorICogXHBhcmFtIGluZm8gICAgIENsaWVudCBJRCBpbmZvIHRoYXQgd2FzIHBhc3NlZCB0bworICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3NldF9jbGllbnRfdHJhbnNwb3J0X2lkKCkKKyAqIFxwYXJhbSBpbGVuICAgICBMZW5ndGggb2YgaW5mbyBpbiBieXRlcworICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgY2FsbGJhY2sgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLAorICogICAgICAgICAgICAgICAgIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLwordHlwZWRlZiBpbnQgbWJlZHRsc19zc2xfY29va2llX3dyaXRlX3QoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5mbywgc2l6ZV90IGlsZW4gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2FsbGJhY2sgdHlwZTogdmVyaWZ5IGEgY29va2llCisgKgorICogXHBhcmFtIGN0eCAgICAgIENvbnRleHQgZm9yIHRoZSBjYWxsYmFjaworICogXHBhcmFtIGNvb2tpZSAgIENvb2tpZSB0byB2ZXJpZnkKKyAqIFxwYXJhbSBjbGVuICAgICBMZW5ndGggb2YgY29va2llCisgKiBccGFyYW0gaW5mbyAgICAgQ2xpZW50IElEIGluZm8gdGhhdCB3YXMgcGFzc2VkIHRvCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoKQorICogXHBhcmFtIGlsZW4gICAgIExlbmd0aCBvZiBpbmZvIGluIGJ5dGVzCisgKgorICogXHJldHVybiAgICAgICAgIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiAwIGlmIGNvb2tpZSBpcyB2YWxpZCwKKyAqICAgICAgICAgICAgICAgICBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK3R5cGVkZWYgaW50IG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVja190KCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwgc2l6ZV90IGNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZm8sIHNpemVfdCBpbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgRFRMUyBjb29raWVzCisgKiAgICAgICAgICAgICAgICAgIChTZXJ2ZXIgb25seS4gRFRMUyBvbmx5LikKKyAqCisgKiAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IGR1bW15IGNhbGxiYWNrcyB0aGF0IGZhaWwsIGluIG9yZGVyIHRvIGZvcmNlIHlvdSB0bworICogICAgICAgICAgICAgICAgICByZWdpc3RlciB3b3JraW5nIGNhbGxiYWNrcyAoYW5kIGluaXRpYWxpemUgdGhlaXIgY29udGV4dCkuCisgKgorICogICAgICAgICAgICAgICAgICBUbyBkaXNhYmxlIEhlbGxvVmVyaWZ5UmVxdWVzdCwgcmVnaXN0ZXIgTlVMTCBjYWxsYmFja3MuCisgKgorICogXHdhcm5pbmcgICAgICAgICBEaXNhYmxpbmcgaGVsbG8gdmVyaWZpY2F0aW9uIGFsbG93cyB5b3VyIHNlcnZlciB0byBiZSB1c2VkCisgKiAgICAgICAgICAgICAgICAgIGZvciBhbXBsaWZpY2F0aW9uIGluIERvUyBhdHRhY2tzIGFnYWluc3Qgb3RoZXIgaG9zdHMuCisgKiAgICAgICAgICAgICAgICAgIE9ubHkgZGlzYWJsZSBpZiB5b3Uga25vd24gdGhpcyBjYW4ndCBoYXBwZW4gaW4geW91cgorICogICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGVudmlyb25tZW50LgorICoKKyAqIFxub3RlICAgICAgICAgICAgU2VlIGNvbW1lbnRzIG9uIFxjIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgpIGFib3V0IGhhbmRsaW5nCisgKiAgICAgICAgICAgICAgICAgIHRoZSBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEIHRoYXQgaXMgZXhwZWN0ZWQKKyAqICAgICAgICAgICAgICAgICAgb24gdGhlIGZpcnN0IGhhbmRzaGFrZSBhdHRlbXB0IHdoZW4gdGhpcyBpcyBlbmFibGVkLgorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBpcyBhbHNvIG5lY2Vzc2FyeSB0byBoYW5kbGUgY2xpZW50IHJlY29ubmVjdGlvbiBmcm9tCisgKiAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIHBvcnQgYXMgZGVzY3JpYmVkIGluIFJGQyA2MzQ3IHNlY3Rpb24gNC4yLjggKG9ubHkKKyAqICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhbnQgd2l0aCBjb29raWVzIGlzIHN1cHBvcnRlZCBjdXJyZW50bHkpLiBTZWUKKyAqICAgICAgICAgICAgICAgICAgY29tbWVudHMgb24gXGMgbWJlZHRsc19zc2xfcmVhZCgpIGZvciBkZXRhaWxzLgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgICAgICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGZfY29va2llX3dyaXRlICAgIENvb2tpZSB3cml0ZSBjYWxsYmFjaworICogXHBhcmFtIGZfY29va2llX2NoZWNrICAgIENvb2tpZSBjaGVjayBjYWxsYmFjaworICogXHBhcmFtIHBfY29va2llICAgICAgICAgIENvbnRleHQgZm9yIGJvdGggY2FsbGJhY2tzCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZV90ICpmX2Nvb2tpZV93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVja190ICpmX2Nvb2tpZV9jaGVjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfY29va2llICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCBjbGllbnQncyB0cmFuc3BvcnQtbGV2ZWwgaWRlbnRpZmljYXRpb24gaW5mby4KKyAqICAgICAgICAgICAgICAgICAoU2VydmVyIG9ubHkuIERUTFMgb25seS4pCisgKgorICogICAgICAgICAgICAgICAgIFRoaXMgaXMgdXN1YWxseSB0aGUgSVAgYWRkcmVzcyAoYW5kIHBvcnQpLCBidXQgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICBhbnl0aGluZyBpZGVudGlmeSB0aGUgY2xpZW50IGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZworICogICAgICAgICAgICAgICAgIG5ldHdvcmsgc3RhY2suIFVzZWQgZm9yIEhlbGxvVmVyaWZ5UmVxdWVzdCB3aXRoIERUTFMuCisgKiAgICAgICAgICAgICAgICAgVGhpcyBpcyAqbm90KiB1c2VkIHRvIHJvdXRlIHRoZSBhY3R1YWwgcGFja2V0cy4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBpbmZvICAgICBUcmFuc3BvcnQtbGV2ZWwgaW5mbyBpZGVudGlmeWluZyB0aGUgY2xpZW50IChlZyBJUCArIHBvcnQpCisgKiBccGFyYW0gaWxlbiAgICAgTGVuZ3RoIG9mIGluZm8gaW4gYnl0ZXMKKyAqCisgKiBcbm90ZSAgICAgICAgICAgQW4gaW50ZXJuYWwgY29weSBpcyBtYWRlLCBzbyB0aGUgaW5mbyBidWZmZXIgY2FuIGJlIHJldXNlZC4KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBvbiBzdWNjZXNzLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSBpZiB1c2VkIG9uIGNsaWVudCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEIGlmIG91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICk7CisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAmJiBNQkVEVExTX1NTTF9TUlZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgRW5hYmxlIG9yIGRpc2FibGUgYW50aS1yZXBsYXkgcHJvdGVjdGlvbiBmb3IgRFRMUy4KKyAqICAgICAgICAgICAgICAgICAoRFRMUyBvbmx5LCBubyBlZmZlY3Qgb24gVExTLikKKyAqICAgICAgICAgICAgICAgICBEZWZhdWx0OiBlbmFibGVkLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0VOQUJMRUQgb3IgTUJFRFRMU19TU0xfQU5USV9SRVBMQVlfRElTQUJMRUQuCisgKgorICogXHdhcm5pbmcgICAgICAgIERpc2FibGluZyB0aGlzIGlzIGEgc2VjdXJpdHkgcmlzayB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uCisgKiAgICAgICAgICAgICAgICAgcHJvdG9jb2wgaGFuZGxlcyBkdXBsaWNhdGVkIHBhY2tldHMgaW4gYSBzYWZlIHdheS4gWW91CisgKiAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBkaXNhYmxlIHRoaXMgd2l0aG91dCBjYXJlZnVsIGNvbnNpZGVyYXRpb24uCisgKiAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91ciBhcHBsaWNhdGlvbiBhbHJlYWR5IGRldGVjdHMgZHVwbGljYXRlZAorICogICAgICAgICAgICAgICAgIHBhY2tldHMgYW5kIG5lZWRzIGluZm9ybWF0aW9uIGFib3V0IHRoZW0gdG8gYWRqdXN0IGl0cworICogICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBzdHJhdGVneSwgdGhlbiB5b3UnbGwgd2FudCB0byBkaXNhYmxlIHRoaXMuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9kdGxzX2FudGlfcmVwbGF5KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgbW9kZSApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHJlY29yZHMgd2l0aCBhIGJhZCBNQUMKKyAqICAgICAgICAgICAgICAgICBiZWZvcmUgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24uCisgKiAgICAgICAgICAgICAgICAgKERUTFMgb25seSwgbm8gZWZmZWN0IG9uIFRMUy4pCisgKiAgICAgICAgICAgICAgICAgRGVmYXVsdDogMCAoZGlzYWJsZWQpLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGxpbWl0ICAgIExpbWl0LCBvciAwIHRvIGRpc2FibGUuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHRoZSBsaW1pdCBpcyBOLCB0aGVuIHRoZSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0ZWQgd2hlbgorICogICAgICAgICAgICAgICAgIHRoZSBOdGggbm9uLWF1dGhlbnRpYyByZWNvcmQgaXMgc2Vlbi4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgUmVjb3JkcyB3aXRoIGFuIGludmFsaWQgaGVhZGVyIGFyZSBub3QgY291bnRlZCwgb25seSB0aGUKKyAqICAgICAgICAgICAgICAgICBvbmVzIGdvaW5nIHRocm91Z2ggdGhlIGF1dGhlbnRpY2F0aW9uLWRlY3J5cHRpb24gcGhhc2UuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgaXMgYSBzZWN1cml0eSB0cmFkZS1vZmYgcmVsYXRlZCB0byB0aGUgZmFjdCB0aGF0IGl0J3MKKyAqICAgICAgICAgICAgICAgICBvZnRlbiByZWxhdGl2ZWx5IGVhc3kgZm9yIGFuIGFjdGl2ZSBhdHRhY2tlciBvdCBpbmplY3QgVURQCisgKiAgICAgICAgICAgICAgICAgZGF0YWdyYW1zLiBPbiBvbmUgaGFuZCwgc2V0dGluZyBhIGxvdyBsaW1pdCBoZXJlIG1ha2VzIGl0CisgKiAgICAgICAgICAgICAgICAgZWFzaWVyIGZvciBzdWNoIGFuIGF0dGFja2VyIHRvIGZvcmNpYmx5IHRlcm1pbmF0ZWQgYQorICogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBhIGhpZ2ggbGltaXQgb3Igbm8gbGltaXQKKyAqICAgICAgICAgICAgICAgICBtaWdodCBtYWtlIHVzIHdhc3RlIHJlc291cmNlcyBjaGVja2luZyBhdXRoZW50aWNhdGlvbiBvbgorICogICAgICAgICAgICAgICAgIG1hbnkgYm9ndXMgcGFja2V0cy4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYmFkbWFjX2xpbWl0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVuc2lnbmVkIGxpbWl0ICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCByZXRyYW5zbWl0IHRpbWVvdXQgdmFsdWVzIGZvciB0aGUgRFRMUyBoYW5kc2hha2UuCisgKiAgICAgICAgICAgICAgICAgKERUTFMgb25seSwgbm8gZWZmZWN0IG9uIFRMUy4pCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gbWluICAgICAgSW5pdGlhbCB0aW1lb3V0IHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KKyAqICAgICAgICAgICAgICAgICBEZWZhdWx0OiAxMDAwICgxIHNlY29uZCkuCisgKiBccGFyYW0gbWF4ICAgICAgTWF4aW11bSB0aW1lb3V0IHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KKyAqICAgICAgICAgICAgICAgICBEZWZhdWx0OiA2MDAwMCAoNjAgc2Vjb25kcykuCisgKgorICogXG5vdGUgICAgICAgICAgIERlZmF1bHQgdmFsdWVzIGFyZSBmcm9tIFJGQyA2MzQ3IHNlY3Rpb24gNC4yLjQuMS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlICdtaW4nIHZhbHVlIHNob3VsZCB0eXBpY2FsbHkgYmUgc2xpZ2h0bHkgYWJvdmUgdGhlCisgKiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgcm91bmQtdHJpcCB0aW1lIHRvIHlvdXIgcGVlciwgcGx1cyB3aGF0ZXZlciB0aW1lCisgKiAgICAgICAgICAgICAgICAgaXQgdGFrZXMgZm9yIHRoZSBwZWVyIHRvIHByb2Nlc3MgdGhlIG1lc3NhZ2UuIEZvciBleGFtcGxlLAorICogICAgICAgICAgICAgICAgIGlmIHlvdXIgUlRUIGlzIGFib3V0IDYwMG1zIGFuZCB5b3UgcGVlciBuZWVkcyB1cCB0byAxcyB0bworICogICAgICAgICAgICAgICAgIGRvIHRoZSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgaW4gdGhlIGhhbmRzaGFrZSwgdGhlbiB5b3UKKyAqICAgICAgICAgICAgICAgICBzaG91bGQgc2V0ICdtaW4nIHNsaWdodGx5IGFib3ZlIDE2MDAuIExvd2VyIHZhbHVlcyBvZiAnbWluJworICogICAgICAgICAgICAgICAgIG1pZ2h0IGNhdXNlIHNwdXJpb3VzIHJlc2VuZHMgd2hpY2ggd2FzdGUgbmV0d29yayByZXNvdXJjZXMsCisgKiAgICAgICAgICAgICAgICAgd2hpbGUgbGFyZ2VyIHZhbHVlIG9mICdtaW4nIHdpbGwgaW5jcmVhc2Ugb3ZlcmFsbCBsYXRlbmN5CisgKiAgICAgICAgICAgICAgICAgb24gdW5yZWxpYWJsZSBuZXR3b3JrIGxpbmtzLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgbW9yZSB1bnJlbGlhYmxlIHlvdXIgbmV0d29yayBjb25uZWN0aW9uIGlzLCB0aGUgbGFyZ2VyCisgKiAgICAgICAgICAgICAgICAgeW91ciBtYXggLyBtaW4gcmF0aW8gbmVlZHMgdG8gYmUgaW4gb3JkZXIgdG8gYWNoaWV2ZQorICogICAgICAgICAgICAgICAgIHJlbGlhYmxlIGhhbmRzaGFrZXMuCisgKgorICogXG5vdGUgICAgICAgICAgIE1lc3NhZ2VzIGFyZSByZXRyYW5zbWl0dGVkIHVwIHRvIGxvZzIoY2VpbChtYXgvbWluKSkgdGltZXMuCisgKiAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIG1pbiA9IDFzIGFuZCBtYXggPSA1cywgdGhlIHJldHJhbnNtaXQgcGxhbgorICogICAgICAgICAgICAgICAgIGdvZXM6IHNlbmQgLi4uIDFzIC0+IHJlc2VuZCAuLi4gMnMgLT4gcmVzZW5kIC4uLiA0cyAtPgorICogICAgICAgICAgICAgICAgIHJlc2VuZCAuLi4gNXMgLT4gZ2l2ZSB1cCBhbmQgcmV0dXJuIGEgdGltZW91dCBlcnJvci4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVpbnQzMl90IG1pbiwgdWludDMyX3QgbWF4ICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgc2Vzc2lvbiBjYWNoZSBjYWxsYmFja3MgKHNlcnZlci1zaWRlIG9ubHkpCisgKiAgICAgICAgICAgICAgICAgSWYgbm90IHNldCwgbm8gc2Vzc2lvbiByZXN1bWluZyBpcyBkb25lIChleGNlcHQgaWYgc2Vzc2lvbgorICogICAgICAgICAgICAgICAgIHRpY2tldHMgYXJlIGVuYWJsZWQgdG9vKS4KKyAqCisgKiAgICAgICAgICAgICAgICAgVGhlIHNlc3Npb24gY2FjaGUgaGFzIHRoZSByZXNwb25zaWJpbGl0eSB0byBjaGVjayBmb3Igc3RhbGUKKyAqICAgICAgICAgICAgICAgICBlbnRyaWVzIGJhc2VkIG9uIHRpbWVvdXQuIFNlZSBSRkMgNTI0NiBmb3IgcmVjb21tZW5kYXRpb25zLgorICoKKyAqICAgICAgICAgICAgICAgICBXYXJuaW5nOiBzZXNzaW9uLnBlZXJfY2VydCBpcyBjbGVhcmVkIGJ5IHRoZSBTU0wvVExTIGxheWVyIG9uCisgKiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBzaHV0ZG93biwgc28gZG8gbm90IGNhY2hlIHRoZSBwb2ludGVyISBFaXRoZXIgc2V0CisgKiAgICAgICAgICAgICAgICAgaXQgdG8gTlVMTCBvciBtYWtlIGEgZnVsbCBjb3B5IG9mIHRoZSBjZXJ0aWZpY2F0ZS4KKyAqCisgKiAgICAgICAgICAgICAgICAgVGhlIGdldCBjYWxsYmFjayBpcyBjYWxsZWQgb25jZSBkdXJpbmcgdGhlIGluaXRpYWwgaGFuZHNoYWtlCisgKiAgICAgICAgICAgICAgICAgdG8gZW5hYmxlIHNlc3Npb24gcmVzdW1pbmcuIFRoZSBnZXQgZnVuY3Rpb24gaGFzIHRoZQorICogICAgICAgICAgICAgICAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiAodm9pZCAqcGFyYW1ldGVyLCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uKQorICogICAgICAgICAgICAgICAgIElmIGEgdmFsaWQgZW50cnkgaXMgZm91bmQsIGl0IHNob3VsZCBmaWxsIHRoZSBtYXN0ZXIgb2YKKyAqICAgICAgICAgICAgICAgICB0aGUgc2Vzc2lvbiBvYmplY3Qgd2l0aCB0aGUgY2FjaGVkIHZhbHVlcyBhbmQgcmV0dXJuIDAsCisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIDEgb3RoZXJ3aXNlLiBPcHRpb25hbGx5IHBlZXJfY2VydCBjYW4gYmUgc2V0IGFzIHdlbGwKKyAqICAgICAgICAgICAgICAgICBpZiBpdCBpcyBwcm9wZXJseSBwcmVzZW50IGluIGNhY2hlIGVudHJ5LgorICoKKyAqICAgICAgICAgICAgICAgICBUaGUgc2V0IGNhbGxiYWNrIGlzIGNhbGxlZCBvbmNlIGR1cmluZyB0aGUgaW5pdGlhbCBoYW5kc2hha2UKKyAqICAgICAgICAgICAgICAgICB0byBlbmFibGUgc2Vzc2lvbiByZXN1bWluZyBhZnRlciB0aGUgZW50aXJlIGhhbmRzaGFrZSBoYXMKKyAqICAgICAgICAgICAgICAgICBiZWVuIGZpbmlzaGVkLiBUaGUgc2V0IGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgKiAgICAgICAgICAgICAgICAgKHZvaWQgKnBhcmFtZXRlciwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbikuIFRoZSBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgIHNob3VsZCBjcmVhdGUgYSBjYWNoZSBlbnRyeSBmb3IgZnV0dXJlIHJldHJpZXZhbCBiYXNlZCBvbgorICogICAgICAgICAgICAgICAgIHRoZSBkYXRhIGluIHRoZSBzZXNzaW9uIHN0cnVjdHVyZSBhbmQgc2hvdWxkIGtlZXAgaW4gbWluZAorICogICAgICAgICAgICAgICAgIHRoYXQgdGhlIG1iZWR0bHNfc3NsX3Nlc3Npb24gb2JqZWN0IHByZXNlbnRlZCAoYW5kIGFsbCBpdHMgcmVmZXJlbmNlZAorICogICAgICAgICAgICAgICAgIGRhdGEpIGlzIGNsZWFyZWQgYnkgdGhlIFNTTC9UTFMgbGF5ZXIgd2hlbiB0aGUgY29ubmVjdGlvbiBpcworICogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBtZXRhZGF0YSB0byBkZXRlcm1pbmUgaWYKKyAqICAgICAgICAgICAgICAgICBhbiBlbnRyeSBpcyBzdGlsbCB2YWxpZCBpbiB0aGUgZnV0dXJlLiBSZXR1cm4gMCBpZgorICogICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBjYWNoZWQsIHJldHVybiAxIG90aGVyd2lzZS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBwX2NhY2hlICAgICAgICBwYXJtYXRlciAoY29udGV4dCkgZm9yIGJvdGggY2FsbGJhY2tzCisgKiBccGFyYW0gZl9nZXRfY2FjaGUgICAgc2Vzc2lvbiBnZXQgY2FsbGJhY2sKKyAqIFxwYXJhbSBmX3NldF9jYWNoZSAgICBzZXNzaW9uIHNldCBjYWxsYmFjaworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICB2b2lkICpwX2NhY2hlLAorICAgICAgICBpbnQgKCpmX2dldF9jYWNoZSkodm9pZCAqLCBtYmVkdGxzX3NzbF9zZXNzaW9uICopLAorICAgICAgICBpbnQgKCpmX3NldF9jYWNoZSkodm9pZCAqLCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICopICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXF1ZXN0IHJlc3VtcHRpb24gb2Ygc2Vzc2lvbiAoY2xpZW50LXNpZGUgb25seSkKKyAqICAgICAgICAgICAgICAgICBTZXNzaW9uIGRhdGEgaXMgY29waWVkIGZyb20gcHJlc2VudGVkIHNlc3Npb24gc3RydWN0dXJlLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIHNlc3Npb24gIHNlc3Npb24gY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBIGlmIHVzZWQgc2VydmVyLXNpZGUgb3IKKyAqICAgICAgICAgICAgICAgICBhcmd1bWVudHMgYXJlIG90aGVyd2lzZSBpbnZhbGlkCisgKgorICogXHNhICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uKCkKKyAqLworaW50IG1iZWR0bHNfc3NsX3NldF9zZXNzaW9uKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGNvbnN0IG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DTElfQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIFNldCB0aGUgbGlzdCBvZiBhbGxvd2VkIGNpcGhlcnN1aXRlcyBhbmQgdGhlIHByZWZlcmVuY2UKKyAqICAgICAgICAgICAgICAgICAgICAgIG9yZGVyLiBGaXJzdCBpbiB0aGUgbGlzdCBoYXMgdGhlIGhpZ2hlc3QgcHJlZmVyZW5jZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIChPdmVycmlkZXMgYWxsIHZlcnNpb24tc3BlY2lmaWMgbGlzdHMpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgVGhlIGNpcGhlcnN1aXRlcyBhcnJheSBpcyBub3QgY29waWVkLCBhbmQgbXVzdCByZW1haW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNzbF9jb25maWcuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgTm90ZTogVGhlIHNlcnZlciB1c2VzIGl0cyBvd24gcHJlZmVyZW5jZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIG92ZXIgdGhlIHByZWZlcmVuY2Ugb2YgdGhlIGNsaWVudCB1bmxlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFIGlzIGRlZmluZWQhCisgKgorICogXHBhcmFtIGNvbmYgICAgICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBjaXBoZXJzdWl0ZXMgIDAtdGVybWluYXRlZCBsaXN0IG9mIGFsbG93ZWQgY2lwaGVyc3VpdGVzCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZXMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICBTZXQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBjaXBoZXJzdWl0ZXMgYW5kIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgcHJlZmVyZW5jZSBvcmRlciBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC4KKyAqICAgICAgICAgICAgICAgICAgICAgIChPbmx5IHVzZWZ1bCBvbiB0aGUgc2VydmVyIHNpZGUpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgVGhlIGNpcGhlcnN1aXRlcyBhcnJheSBpcyBub3QgY29waWVkLCBhbmQgbXVzdCByZW1haW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNzbF9jb25maWcuCisgKgorICogXHBhcmFtIGNvbmYgICAgICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBjaXBoZXJzdWl0ZXMgIDAtdGVybWluYXRlZCBsaXN0IG9mIGFsbG93ZWQgY2lwaGVyc3VpdGVzCisgKiBccGFyYW0gbWFqb3IgICAgICAgICBNYWpvciB2ZXJzaW9uIG51bWJlciAob25seSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMKKyAqICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCkKKyAqIFxwYXJhbSBtaW5vciAgICAgICAgIE1pbm9yIHZlcnNpb24gbnVtYmVyIChNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgKiAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgYW5kIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiwKKyAqICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyBzdXBwb3J0ZWQpCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgV2l0aCBEVExTLCB1c2UgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yIGZvciBEVExTIDEuMAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyBmb3IgRFRMUyAxLjIKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlc19mb3JfdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFqb3IsIGludCBtaW5vciApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIFguNTA5IHNlY3VyaXR5IHByb2ZpbGUgdXNlZCBmb3IgdmVyaWZpY2F0aW9uCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSByZXN0cmljdGlvbnMgYXJlIGVuZm9yY2VkIGZvciBhbGwgY2VydGlmaWNhdGVzIGluIHRoZQorICogICAgICAgICAgICAgICAgIGNoYWluLiBIb3dldmVyLCBzaWduYXR1cmVzIGluIHRoZSBoYW5kc2hha2UgYXJlIG5vdCBjb3ZlcmVkCisgKiAgICAgICAgICAgICAgICAgYnkgdGhpcyBzZXR0aW5nIGJ1dCBieSBcYiBtYmVkdGxzX3NzbF9jb25mX3NpZ19oYXNoZXMoKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBwcm9maWxlICBQcm9maWxlIHRvIHVzZQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2VydF9wcm9maWxlKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBkYXRhIHJlcXVpcmVkIHRvIHZlcmlmeSBwZWVyIGNlcnRpZmljYXRlCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gY2FfY2hhaW4gdHJ1c3RlZCBDQSBjaGFpbiAobWVhbmluZyBhbGwgZnVsbHkgdHJ1c3RlZCB0b3AtbGV2ZWwgQ0FzKQorICogXHBhcmFtIGNhX2NybCAgIHRydXN0ZWQgQ0EgQ1JMcworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjYV9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IG93biBjZXJ0aWZpY2F0ZSBjaGFpbiBhbmQgcHJpdmF0ZSBrZXkKKyAqCisgKiBcbm90ZSAgICAgICAgICAgb3duX2NlcnQgc2hvdWxkIGNvbnRhaW4gaW4gb3JkZXIgZnJvbSB0aGUgYm90dG9tIHVwIHlvdXIKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBjaGFpbi4gVGhlIHRvcCBjZXJ0aWZpY2F0ZSAoc2VsZi1zaWduZWQpCisgKiAgICAgICAgICAgICAgICAgY2FuIGJlIG9taXR0ZWQuCisgKgorICogXG5vdGUgICAgICAgICAgIE9uIHNlcnZlciwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvCisgKiAgICAgICAgICAgICAgICAgcHJvdmlzaW9uIG1vcmUgdGhhbiBvbmUgY2VydC9rZXkgcGFpciAoZWcgb25lIEVDRFNBLCBvbmUKKyAqICAgICAgICAgICAgICAgICBSU0Egd2l0aCBTSEEtMjU2LCBvbmUgUlNBIHdpdGggU0hBLTEpLiBBbiBhZGVxdWF0ZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIHdpbGwgYmUgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjbGllbnQncworICogICAgICAgICAgICAgICAgIGFkdmVydGlzZWQgY2FwYWJpbGl0aWVzLiBJbiBjYXNlIG11dGxpcGxlIGNlcnRpZmljYXRlcyBhcmUKKyAqICAgICAgICAgICAgICAgICBhZGVxdWF0ZSwgcHJlZmVyZW5jZSBpcyBnaXZlbiB0byB0aGUgb25lIHNldCBieSB0aGUgZmlyc3QKKyAqICAgICAgICAgICAgICAgICBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sIHRoZW4gc2Vjb25kLCBldGMuCisgKgorICogXG5vdGUgICAgICAgICAgIE9uIGNsaWVudCwgb25seSB0aGUgZmlyc3QgY2FsbCBoYXMgYW55IGVmZmVjdC4gVGhhdCBpcywKKyAqICAgICAgICAgICAgICAgICBvbmx5IG9uZSBjbGllbnQgY2VydGlmaWNhdGUgY2FuIGJlIHByb3Zpc2lvbmVkLiBUaGUKKyAqICAgICAgICAgICAgICAgICBzZXJ2ZXIncyBwcmVmZXJlbmNlcyBpbiBpdHMgQ2VydGZpY2F0ZVJlcXVlc3QgbWVzc2FnZSB3aWxsCisgKiAgICAgICAgICAgICAgICAgYmUgaWdub3JlZCBhbmQgb3VyIG9ubHkgY2VydCB3aWxsIGJlIHNlbnQgcmVnYXJkbGVzcyBvZgorICogICAgICAgICAgICAgICAgIHdoZXRoZXIgaXQgbWF0Y2hlcyB0aG9zZSBwcmVmZXJlbmNlcyAtIHRoZSBzZXJ2ZXIgY2FuIHRoZW4KKyAqICAgICAgICAgICAgICAgICBkZWNpZGUgd2hhdCBpdCB3YW50cyB0byBkbyB3aXRoIGl0LgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG93bl9jZXJ0IG93biBwdWJsaWMgY2VydGlmaWNhdGUgY2hhaW4KKyAqIFxwYXJhbSBwa19rZXkgICBvd24gcHJpdmF0ZSBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBvbiBzdWNjZXNzIG9yIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKm93bl9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jb250ZXh0ICpwa19rZXkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBQcmUgU2hhcmVkIEtleSAoUFNLKSBhbmQgdGhlIGV4cGVjdGVkIGlkZW50aXR5IG5hbWUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBpcyBtYWlubHkgdXNlZnVsIGZvciBjbGllbnRzLiBTZXJ2ZXJzIHdpbGwgdXN1YWxseQorICogICAgICAgICAgICAgICAgIHdhbnQgdG8gdXNlIFxjIG1iZWR0bHNfc3NsX2NvbmZfcHNrX2NiKCkgaW5zdGVhZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgQ3VycmVudGx5IGNsaWVudHMgY2FuIG9ubHkgcmVnaXN0ZXIgb25lIHByZS1zaGFyZWQga2V5LgorICogICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgc2VydmVycycgaWRlbnRpdHkgaGludCBpcyBpZ25vcmVkLgorICogICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHNldHRpbmcgbXVsdGlwbGUgUFNLcyBvbiBjbGllbnRzIGFuZCBzZWxlY3RpbmcKKyAqICAgICAgICAgICAgICAgICBvbmUgYmFzZWQgb24gdGhlIGlkZW50aXR5IGhpbnQgaXMgbm90IGEgcGxhbm5lZCBmZWF0dXJlIGJ1dAorICogICAgICAgICAgICAgICAgIGZlZWRiYWNrIGlzIHdlbGNvbWVkLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHBzayAgICAgIHBvaW50ZXIgdG8gdGhlIHByZS1zaGFyZWQga2V5CisgKiBccGFyYW0gcHNrX2xlbiAgcHJlLXNoYXJlZCBrZXkgbGVuZ3RoCisgKiBccGFyYW0gcHNrX2lkZW50aXR5ICAgICAgcG9pbnRlciB0byB0aGUgcHJlLXNoYXJlZCBrZXkgaWRlbnRpdHkKKyAqIFxwYXJhbSBwc2tfaWRlbnRpdHlfbGVuICBpZGVudGl0eSBrZXkgbGVuZ3RoCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25mX3BzayggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzaywgc2l6ZV90IHBza19sZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrX2lkZW50aXR5LCBzaXplX3QgcHNrX2lkZW50aXR5X2xlbiApOworCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgUHJlIFNoYXJlZCBLZXkgKFBTSykgZm9yIHRoZSBjdXJyZW50IGhhbmRzaGFrZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgdGhlIFBTSyBjYWxsYmFjaywKKyAqICAgICAgICAgICAgICAgICBpZSB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIFxjIG1iZWR0bHNfc3NsX2NvbmZfcHNrX2NiKCkuCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gcHNrICAgICAgcG9pbnRlciB0byB0aGUgcHJlLXNoYXJlZCBrZXkKKyAqIFxwYXJhbSBwc2tfbGVuICBwcmUtc2hhcmVkIGtleSBsZW5ndGgKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsIG9yIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfc3NsX3NldF9oc19wc2soIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc2ssIHNpemVfdCBwc2tfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgUFNLIGNhbGxiYWNrIChzZXJ2ZXItc2lkZSBvbmx5KS4KKyAqCisgKiAgICAgICAgICAgICAgICAgSWYgc2V0LCB0aGUgUFNLIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgZWFjaAorICogICAgICAgICAgICAgICAgIGhhbmRzaGFrZSB3aGVyZSBhIFBTSyBjaXBoZXJzdWl0ZSB3YXMgbmVnb3RpYXRlZC4KKyAqICAgICAgICAgICAgICAgICBUaGUgY2FsbGVyIHByb3ZpZGVzIHRoZSBpZGVudGl0eSByZWNlaXZlZCBhbmQgd2FudHMgdG8KKyAqICAgICAgICAgICAgICAgICByZWNlaXZlIHRoZSBhY3R1YWwgUFNLIGRhdGEgYW5kIGxlbmd0aC4KKyAqCisgKiAgICAgICAgICAgICAgICAgVGhlIGNhbGxiYWNrIGhhcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6ICh2b2lkICpwYXJhbWV0ZXIsCisgKiAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwc2tfaWRlbnRpdHksCisgKiAgICAgICAgICAgICAgICAgc2l6ZV90IGlkZW50aXR5X2xlbikKKyAqICAgICAgICAgICAgICAgICBJZiBhIHZhbGlkIFBTSyBpZGVudGl0eSBpcyBmb3VuZCwgdGhlIGNhbGxiYWNrIHNob3VsZCB1c2UKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9zZXRfaHNfcHNrKCkgb24gdGhlIHNzbCBjb250ZXh0IHRvIHNldCB0aGUKKyAqICAgICAgICAgICAgICAgICBjb3JyZWN0IFBTSyBhbmQgcmV0dXJuIDAuCisgKiAgICAgICAgICAgICAgICAgQW55IG90aGVyIHJldHVybiB2YWx1ZSB3aWxsIHJlc3VsdCBpbiBhIGRlbmllZCBQU0sgaWRlbnRpdHkuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHlvdSBzZXQgYSBQU0sgY2FsbGJhY2sgdXNpbmcgdGhpcyBmdW5jdGlvbiwgdGhlbiB5b3UKKyAqICAgICAgICAgICAgICAgICBkb24ndCBuZWVkIHRvIHNldCBhIFBTSyBrZXkgYW5kIGlkZW50aXR5IHVzaW5nCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfY29uZl9wc2soKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBmX3BzayAgICBQU0sgaWRlbnRpdHkgZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3BzayAgICBQU0sgaWRlbnRpdHkgcGFyYW1ldGVyCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9wc2tfY2IoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcHNrKSh2b2lkICosIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3BzayApOworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBEaWZmaWUtSGVsbG1hbiBwdWJsaWMgUCBhbmQgRyB2YWx1ZXMsCisgKiAgICAgICAgICAgICAgICAgcmVhZCBhcyBoZXhhZGVjaW1hbCBzdHJpbmdzIChzZXJ2ZXItc2lkZSBvbmx5KQorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX0RITV9SRkM1MTE0X01PRFBfMjA0OF9bUEddKQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGRobV9QICAgIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBtb2R1bHVzCisgKiBccGFyYW0gZGhtX0cgICAgRGlmZmllLUhlbGxtYW4tTWVya2xlIGdlbmVyYXRvcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW0oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY29uc3QgY2hhciAqZGhtX1AsIGNvbnN0IGNoYXIgKmRobV9HICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgRGlmZmllLUhlbGxtYW4gcHVibGljIFAgYW5kIEcgdmFsdWVzLAorICogICAgICAgICAgICAgICAgIHJlYWQgZnJvbSBleGlzdGluZyBjb250ZXh0IChzZXJ2ZXItc2lkZSBvbmx5KQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGRobV9jdHggIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbWJlZHRsc19zc2xfY29uZl9kaF9wYXJhbV9jdHgoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgbWJlZHRsc19kaG1fY29udGV4dCAqZGhtX2N0eCApOworI2VuZGlmIC8qIE1CRURUTFNfREhNX0MgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgbWluaW11bSBsZW5ndGggZm9yIERpZmZpZS1IZWxsbWFuIHBhcmFtZXRlcnMuCisgKiAgICAgICAgICAgICAgICAgKENsaWVudC1zaWRlIG9ubHkuKQorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiAxMDI0IGJpdHMuKQorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGJpdGxlbiAgIE1pbmltdW0gYml0IGxlbmd0aCBvZiB0aGUgREhNIHByaW1lCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9kaG1fbWluX2JpdGxlbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0bGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19ESE1fQyAmJiBNQkVEVExTX1NTTF9DTElfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBhbGxvd2VkIGN1cnZlcyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBhbGwgZGVmaW5lZCBjdXJ2ZXMuKQorICoKKyAqICAgICAgICAgICAgICAgICBPbiBzZXJ2ZXI6IHRoaXMgb25seSBhZmZlY3RzIHNlbGVjdGlvbiBvZiB0aGUgRUNESEUgY3VydmU7CisgKiAgICAgICAgICAgICAgICAgdGhlIGN1cnZlcyB1c2VkIGZvciBFQ0RIIGFuZCBFQ0RTQSBhcmUgZGV0ZXJtaW5lZCBieSB0aGUKKyAqICAgICAgICAgICAgICAgICBsaXN0IG9mIGF2YWlsYWJsZSBjZXJ0aWZpY2F0ZXMgaW5zdGVhZC4KKyAqCisgKiAgICAgICAgICAgICAgICAgT24gY2xpZW50OiB0aGlzIGFmZmVjdHMgdGhlIGxpc3Qgb2YgY3VydmVzIG9mZmVyZWQgZm9yIGFueQorICogICAgICAgICAgICAgICAgIHVzZS4gVGhlIHNlcnZlciBjYW4gb3ZlcnJpZGUgb3VyIHByZWZlcmVuY2Ugb3JkZXIuCisgKgorICogICAgICAgICAgICAgICAgIEJvdGggc2lkZXM6IGxpbWl0cyB0aGUgc2V0IG9mIGN1cnZlcyBhY2NlcHRlZCBmb3IgdXNlIGluCisgKiAgICAgICAgICAgICAgICAgRUNESEUgYW5kIGluIHRoZSBwZWVyJ3MgZW5kLWVudGl0eSBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBoYXMgbm8gaW5mbHVlbmNlIG9uIHdoaWNoIGN1cnZlcyBhcmUgYWxsb3dlZCBpbnNpZGUgdGhlCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgY2hhaW5zLCBzZWUgXGMgbWJlZHRsc19zc2xfY29uZl9jZXJ0X3Byb2ZpbGUoKQorICogICAgICAgICAgICAgICAgIGZvciB0aGF0LiBGb3IgdGhlIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUgaG93ZXZlciwgdGhlIGtleQorICogICAgICAgICAgICAgICAgIHdpbGwgYmUgYWNjZXB0ZWQgb25seSBpZiBpdCBpcyBhbGxvd2VkIGJvdGggYnkgdGhpcyBsaXN0CisgKiAgICAgICAgICAgICAgICAgYW5kIGJ5IHRoZSBjZXJ0IHByb2ZpbGUuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCBieSBkZWNyZWFzaW5nIHByZWZlcmVuY2UKKyAqICAgICAgICAgICAgICAgICAocHJlZmVycmVkIGN1cnZlIGZpcnN0KS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBjdXJ2ZXMgICBPcmRlcmVkIGxpc3Qgb2YgYWxsb3dlZCBjdXJ2ZXMsCisgKiAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBieSBNQkVEVExTX0VDUF9EUF9OT05FLgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY3VydmVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cF9pZCAqY3VydmVzICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBhbGxvd2VkIGhhc2hlcyBmb3Igc2lnbmF0dXJlcyBkdXJpbmcgdGhlIGhhbmRzaGFrZS4KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogYWxsIGF2YWlsYWJsZSBoYXNoZXMgZXhjZXB0IE1ENS4pCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgb25seSBhZmZlY3RzIHdoaWNoIGhhc2hlcyBhcmUgb2ZmZXJlZCBhbmQgY2FuIGJlIHVzZWQKKyAqICAgICAgICAgICAgICAgICBmb3Igc2lnbmF0dXJlcyBkdXJpbmcgdGhlIGhhbmRzaGFrZS4gSGFzaGVzIGZvciBtZXNzYWdlCisgKiAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gYW5kIHRoZSBUTFMgUFJGIGFyZSBjb250cm9sbGVkIGJ5IHRoZQorICogICAgICAgICAgICAgICAgIGNpcGhlcnN1aXRlLCBzZWUgXGMgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoKS4gSGFzaGVzCisgKiAgICAgICAgICAgICAgICAgdXNlZCBmb3IgY2VydGlmaWNhdGUgc2lnbmF0dXJlIGFyZSBjb250cm9sbGVkIGJ5IHRoZQorICogICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBwcm9maWxlLCBzZWUgXGMgbWJlZHRsc19zc2xfY29uZl9jZXJ0X3Byb2ZpbGUoKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhpcyBsaXN0IHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcgcHJlZmVyZW5jZQorICogICAgICAgICAgICAgICAgIChwcmVmZXJyZWQgaGFzaCBmaXJzdCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gaGFzaGVzICAgT3JkZXJlZCBsaXN0IG9mIGFsbG93ZWQgc2lnbmF0dXJlIGhhc2hlcywKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IFxjIE1CRURUTFNfTURfTk9ORS4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3NpZ19oYXNoZXMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmhhc2hlcyApOworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBob3N0bmFtZSB0byBjaGVjayBhZ2FpbnN0IHRoZSByZWNlaXZlZCBzZXJ2ZXIKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZS4gSXQgc2V0cyB0aGUgU2VydmVyTmFtZSBUTFMgZXh0ZW5zaW9uIHRvbywKKyAqICAgICAgICAgICAgICAgICBpZiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQuCisgKiAgICAgICAgICAgICAgICAgKGNsaWVudC1zaWRlIG9ubHkpCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gaG9zdG5hbWUgdGhlIHNlcnZlciBob3N0bmFtZQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwgb3IgTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGNvbnN0IGNoYXIgKmhvc3RuYW1lICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgb3duIGNlcnRpZmljYXRlIGFuZCBrZXkgZm9yIHRoZSBjdXJyZW50IGhhbmRzaGFrZQorICoKKyAqIFxub3RlICAgICAgICAgICBTYW1lIGFzIFxjIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoKSBidXQgZm9yIHVzZSB3aXRoaW4KKyAqICAgICAgICAgICAgICAgICB0aGUgU05JIGNhbGxiYWNrLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIG93bl9jZXJ0IG93biBwdWJsaWMgY2VydGlmaWNhdGUgY2hhaW4KKyAqIFxwYXJhbSBwa19rZXkgICBvd24gcHJpdmF0ZSBrZXkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBvbiBzdWNjZXNzIG9yIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfc3NsX3NldF9oc19vd25fY2VydCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqb3duX2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnBrX2tleSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIGRhdGEgcmVxdWlyZWQgdG8gdmVyaWZ5IHBlZXIgY2VydGlmaWNhdGUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgIGN1cnJlbnQgaGFuZHNoYWtlCisgKgorICogXG5vdGUgICAgICAgICAgIFNhbWUgYXMgXGMgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbigpIGJ1dCBmb3IgdXNlIHdpdGhpbgorICogICAgICAgICAgICAgICAgIHRoZSBTTkkgY2FsbGJhY2suCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gY2FfY2hhaW4gdHJ1c3RlZCBDQSBjaGFpbiAobWVhbmluZyBhbGwgZnVsbHkgdHJ1c3RlZCB0b3AtbGV2ZWwgQ0FzKQorICogXHBhcmFtIGNhX2NybCAgIHRydXN0ZWQgQ0EgQ1JMcworICovCit2b2lkIG1iZWR0bHNfc3NsX3NldF9oc19jYV9jaGFpbiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNhX2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgYXV0aG1vZGUgZm9yIHRoZSBjdXJyZW50IGhhbmRzaGFrZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2FtZSBhcyBcYyBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCkgYnV0IGZvciB1c2Ugd2l0aGluCisgKiAgICAgICAgICAgICAgICAgdGhlIFNOSSBjYWxsYmFjay4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBhdXRobW9kZSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORSwgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVECisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfc2V0X2hzX2F1dGhtb2RlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dGhtb2RlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCBzZXJ2ZXIgc2lkZSBTZXJ2ZXJOYW1lIFRMUyBleHRlbnNpb24gY2FsbGJhY2sKKyAqICAgICAgICAgICAgICAgICAob3B0aW9uYWwsIHNlcnZlci1zaWRlIG9ubHkpLgorICoKKyAqICAgICAgICAgICAgICAgICBJZiBzZXQsIHRoZSBTZXJ2ZXJOYW1lIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAqICAgICAgICAgICAgICAgICBzZXJ2ZXIgcmVjZWl2ZXMgYSBTZXJ2ZXJOYW1lIFRMUyBleHRlbnNpb24gZnJvbSB0aGUgY2xpZW50CisgKiAgICAgICAgICAgICAgICAgZHVyaW5nIGEgaGFuZHNoYWtlLiBUaGUgU2VydmVyTmFtZSBjYWxsYmFjayBoYXMgdGhlCisgKiAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHBhcmFtZXRlcnM6ICh2b2lkICpwYXJhbWV0ZXIsIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAqICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpob3N0bmFtZSwgc2l6ZV90IGxlbikuIElmIGEgc3VpdGFibGUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBpcyBmb3VuZCwgdGhlIGNhbGxiYWNrIG11c3Qgc2V0IHRoZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlKHMpIGFuZCBrZXkocykgdG8gdXNlIHdpdGggXGMKKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXRfaHNfb3duX2NlcnQoKSAoY2FuIGJlIGNhbGxlZCByZXBlYXRlZGx5KSwKKyAqICAgICAgICAgICAgICAgICBhbmQgbWF5IG9wdGlvbmFsbHkgYWRqdXN0IHRoZSBDQSBhbmQgYXNzb2NpYXRlZCBDUkwgd2l0aCBcYworICogICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NldF9oc19jYV9jaGFpbigpIGFzIHdlbGwgYXMgdGhlIGNsaWVudAorICogICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIG1vZGUgd2l0aCBcYyBtYmVkdGxzX3NzbF9zZXRfaHNfYXV0aG1vZGUoKSwKKyAqICAgICAgICAgICAgICAgICB0aGVuIG11c3QgcmV0dXJuIDAuIElmIG5vIG1hdGNoaW5nIG5hbWUgaXMgZm91bmQsIHRoZQorICogICAgICAgICAgICAgICAgIGNhbGxiYWNrIG11c3QgZWl0aGVyIHNldCBhIGRlZmF1bHQgY2VydCwgb3IKKyAqICAgICAgICAgICAgICAgICByZXR1cm4gbm9uLXplcm8gdG8gYWJvcnQgdGhlIGhhbmRzaGFrZSBhdCB0aGlzIHBvaW50LgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIGZfc25pICAgIHZlcmlmaWNhdGlvbiBmdW5jdGlvbgorICogXHBhcmFtIHBfc25pICAgIHZlcmlmaWNhdGlvbiBwYXJhbWV0ZXIKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3NuaSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgaW50ICgqZl9zbmkpKHZvaWQgKiwgbWJlZHRsc19zc2xfY29udGV4dCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnBfc25pICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIEVDIEotUEFLRSBwYXNzd29yZCBmb3IgY3VycmVudCBoYW5kc2hha2UuCisgKgorICogXG5vdGUgICAgICAgICAgIEFuIGludGVybmFsIGNvcHkgaXMgbWFkZSwgYW5kIGRlc3Ryb3llZCBhcyBzb29uIGFzIHRoZQorICogICAgICAgICAgICAgICAgIGhhbmRzaGFrZSBpcyBjb21wbGV0ZWQsIG9yIHdoZW4gdGhlIFNTTCBjb250ZXh0IGlzIHJlc2V0IG9yCisgKiAgICAgICAgICAgICAgICAgZnJlZWQuCisgKgorICogXG5vdGUgICAgICAgICAgIFRoZSBTU0wgY29udGV4dCBuZWVkcyB0byBiZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJpZ2h0IHBsYWNlCisgKiAgICAgICAgICAgICAgICAgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGlzIGJldHdlZW4gXGMgbWJlZHRsc19zc2xfc2V0dXAoKSBvcgorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3Jlc2V0KCkgYW5kIFxjIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgpLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICogXHBhcmFtIHB3ICAgICAgIEVDIEotUEFLRSBwYXNzd29yZCAocHJlLXNoYXJlZCBzZWNyZXQpCisgKiBccGFyYW0gcHdfbGVuICAgbGVuZ3RoIG9mIHB3IGluIGJ5dGVzCisgKgorICogXHJldHVybiAgICAgICAgIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc19zc2xfc2V0X2hzX2VjanBha2VfcGFzc3dvcmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwd19sZW4gKTsKKyNlbmRpZiAvKk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBzdXBwb3J0ZWQgQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2xzLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHByb3RvcyAgIFBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgcHJvdG9jb2xzLAorICogICAgICAgICAgICAgICAgIGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZSBvcmRlci4gVGhlIHBvaW50ZXIgdG8gdGhlIGxpc3QgaXMKKyAqICAgICAgICAgICAgICAgICByZWNvcmRlZCBieSB0aGUgbGlicmFyeSBmb3IgbGF0ZXIgcmVmZXJlbmNlIGFzIHJlcXVpcmVkLCBzbworICogICAgICAgICAgICAgICAgIHRoZSBsaWZldGltZSBvZiB0aGUgdGFibGUgbXVzdCBiZSBhdGxlYXN0IGFzIGxvbmcgYXMgdGhlCisgKiAgICAgICAgICAgICAgICAgbGlmZXRpbWUgb2YgdGhlIFNTTCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNvbnN0IGNoYXIgKipwcm90b3MgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgR2V0IHRoZSBuYW1lIG9mIHRoZSBuZWdvdGlhdGVkIEFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sLgorICogICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgaGFuZHNoYWtlIGlzCisgKiAgICAgICAgICAgICAgICAgY29tcGxldGVkLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICBQcm90Y29sIG5hbWUsIG9yIE5VTEwgaWYgbm8gcHJvdG9jb2wgd2FzIG5lZ290aWF0ZWQuCisgKi8KK2NvbnN0IGNoYXIgKm1iZWR0bHNfc3NsX2dldF9hbHBuX3Byb3RvY29sKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgdmVyc2lvbiBzZW50IGZyb20gdGhlIGNsaWVudCBzaWRlCisgKiAgICAgICAgICAgICAgICAgYW5kL29yIGFjY2VwdGVkIGF0IHRoZSBzZXJ2ZXIgc2lkZQorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9NQVhfTUFKT1JfVkVSU0lPTiwgTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT04pCisgKgorICogXG5vdGUgICAgICAgICAgIFRoaXMgaWdub3JlcyBjaXBoZXJzdWl0ZXMgZnJvbSBoaWdoZXIgdmVyc2lvbnMuCisgKgorICogXG5vdGUgICAgICAgICAgIFdpdGggRFRMUywgdXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiBmb3IgRFRMUyAxLjAgYW5kCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zIGZvciBEVExTIDEuMgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIG1ham9yICAgIE1ham9yIHZlcnNpb24gbnVtYmVyIChvbmx5IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyBzdXBwb3J0ZWQpCisgKiBccGFyYW0gbWlub3IgICAgTWlub3IgdmVyc2lvbiBudW1iZXIgKE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgYW5kIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgc3VwcG9ydGVkKQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IG1ham9yLCBpbnQgbWlub3IgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBtaW5pbXVtIGFjY2VwdGVkIFNTTC9UTFMgcHJvdG9jb2wgdmVyc2lvbgorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBUTFMgMS4wKQorICoKKyAqIFxub3RlICAgICAgICAgICBJbnB1dCBvdXRzaWRlIG9mIHRoZSBTU0xfTUFYX1hYWFhYX1ZFUlNJT04gYW5kCisgKiAgICAgICAgICAgICAgICAgU1NMX01JTl9YWFhYWF9WRVJTSU9OIHJhbmdlIGlzIGlnbm9yZWQuCisgKgorICogXG5vdGUgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCAoU1NMIHYzKSBzaG91bGQgYmUgYXZvaWRlZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgV2l0aCBEVExTLCB1c2UgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yIGZvciBEVExTIDEuMCBhbmQKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgZm9yIERUTFMgMS4yCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gbWFqb3IgICAgTWFqb3IgdmVyc2lvbiBudW1iZXIgKG9ubHkgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zIHN1cHBvcnRlZCkKKyAqIFxwYXJhbSBtaW5vciAgICBNaW5vciB2ZXJzaW9uIG51bWJlciAoTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSBhbmQgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyBzdXBwb3J0ZWQpCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWFqb3IsIGludCBtaW5vciApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBmYWxsYmFjayBmbGFnIChjbGllbnQtc2lkZSBvbmx5KS4KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfSVNfTk9UX0ZBTExCQUNLKS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2V0IHRvIE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLIHdoZW4gcHJlcGFyaW5nIGEgZmFsbGJhY2sKKyAqICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLCB0aGF0IGlzIGEgY29ubmVjdGlvbiB3aXRoIG1heF92ZXJzaW9uIHNldCB0byBhCisgKiAgICAgICAgICAgICAgICAgbG93ZXIgdmFsdWUgdGhhbiB0aGUgdmFsdWUgeW91J3JlIHdpbGxpbmcgdG8gdXNlLiBTdWNoCisgKiAgICAgICAgICAgICAgICAgZmFsbGJhY2sgY29ubmVjdGlvbnMgYXJlIG5vdCByZWNvbW1lbmRlZCBidXQgYXJlIHNvbWV0aW1lcworICogICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSB0byBpbnRlcm9wZXJhdGUgd2l0aCBidWdneSAodmVyc2lvbi1pbnRvbGVyYW50KQorICogICAgICAgICAgICAgICAgIHNlcnZlcnMuCisgKgorICogXHdhcm5pbmcgICAgICAgIFlvdSBzaG91bGQgTk9UIHNldCB0aGlzIHRvIE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLIGZvcgorICogICAgICAgICAgICAgICAgIG5vbi1mYWxsYmFjayBjb25uZWN0aW9ucyEgVGhpcyB3b3VsZCBhcHBlYXIgdG8gd29yayBmb3IgYQorICogICAgICAgICAgICAgICAgIHdoaWxlLCB0aGVuIGNhdXNlIGZhaWx1cmVzIHdoZW4gdGhlIHNlcnZlciBpcyB1cGdyYWRlZCB0bworICogICAgICAgICAgICAgICAgIHN1cHBvcnQgYSBuZXdlciBUTFMgdmVyc2lvbi4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBmYWxsYmFjayBNQkVEVExTX1NTTF9JU19OT1RfRkFMTEJBQ0sgb3IgTUJFRFRMU19TU0xfSVNfRkFMTEJBQ0sKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2ZhbGxiYWNrKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgZmFsbGJhY2sgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWICYmIE1CRURUTFNfU1NMX0NMSV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRW5hYmxlIG9yIGRpc2FibGUgRW5jcnlwdC10aGVuLU1BQworICogICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQpCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGlzIHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZCwgaXQgaXMgYSBzZWN1cml0eQorICogICAgICAgICAgICAgICAgICBpbXByb3ZlbWVudCwgYW5kIHNob3VsZCBub3QgY2F1c2UgYW55IGludGVyb3BlcmFiaWxpdHkKKyAqICAgICAgICAgICAgICAgICAgaXNzdWUgKHVzZWQgb25seSBpZiB0aGUgcGVlciBzdXBwb3J0cyBpdCB0b28pLgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBldG0gICAgICAgTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQgb3IgTUJFRFRMU19TU0xfRVRNX0RJU0FCTEVECisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9lbmNyeXB0X3RoZW5fbWFjKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgZXRtICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEVuYWJsZSBvciBkaXNhYmxlIEV4dGVuZGVkIE1hc3RlciBTZWNyZXQgbmVnb3RpYXRpb24uCisgKiAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEKQorICoKKyAqIFxub3RlICAgICAgICAgICAgVGhpcyBzaG91bGQgYWx3YXlzIGJlIGVuYWJsZWQsIGl0IGlzIGEgc2VjdXJpdHkgZml4IHRvIHRoZQorICogICAgICAgICAgICAgICAgICBwcm90b2NvbCwgYW5kIHNob3VsZCBub3QgY2F1c2UgYW55IGludGVyb3BlcmFiaWxpdHkgaXNzdWUKKyAqICAgICAgICAgICAgICAgICAgKHVzZWQgb25seSBpZiB0aGUgcGVlciBzdXBwb3J0cyBpdCB0b28pLgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBlbXMgICAgICAgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRCBvciBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19ESVNBQkxFRAorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGVtcyApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBEaXNhYmxlIG9yIGVuYWJsZSBzdXBwb3J0IGZvciBSQzQKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRCkKKyAqCisgKiBcd2FybmluZyAgICAgICAgVXNlIG9mIFJDNCBpbiBEVExTL1RMUyBoYXMgYmVlbiBwcm9oaWJpdGVkIGJ5IFJGQyA3NDY1CisgKiAgICAgICAgICAgICAgICAgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFVzZSBhdCB5b3VyIG93biByaXNrLgorICoKKyAqIFxub3RlICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQgaW4KKyAqICAgICAgICAgICAgICAgICBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LgorICogICAgICAgICAgICAgICAgIFJDNCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGF0IGNvbXBpbGUgdGltZSBhbmQgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgICAgICAgICBhY3RpdmVseSBlbmFibGVkIGZvciB1c2Ugd2l0aCBsZWdhY3kgc3lzdGVtcy4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBhcmM0ICAgICBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQgb3IgTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRAorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfYXJjNF9zdXBwb3J0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgYXJjNCApOworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgdGhlIG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIHRvIGVtaXQgYW5kL29yIG5lZ290aWF0ZQorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4sIHVzdWFsbHkgMl4xNCBieXRlcykKKyAqICAgICAgICAgICAgICAgICAoU2VydmVyOiBzZXQgbWF4aW11bSBmcmFnbWVudCBsZW5ndGggdG8gZW1pdCwKKyAqICAgICAgICAgICAgICAgICB1c3VhbGx5IG5lZ290aWF0ZWQgYnkgdGhlIGNsaWVudCBkdXJpbmcgaGFuZHNoYWtlCisgKiAgICAgICAgICAgICAgICAgKENsaWVudDogc2V0IG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIHRvIGVtaXQgKmFuZCoKKyAqICAgICAgICAgICAgICAgICBuZWdvdGlhdGUgd2l0aCB0aGUgc2VydmVyIGR1cmluZyBoYW5kc2hha2UpCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gbWZsX2NvZGUgQ29kZSBmb3IgbWF4aW11bSBmcmFnbWVudCBsZW5ndGggKGFsbG93ZWQgdmFsdWVzOgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl81MTIsICBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMjA0OCwgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzQwOTYpCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEKKyAqLworaW50IG1iZWR0bHNfc3NsX2NvbmZfbWF4X2ZyYWdfbGVuKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIHVuc2lnbmVkIGNoYXIgbWZsX2NvZGUgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQWN0aXZhdGUgbmVnb3RpYXRpb24gb2YgdHJ1bmNhdGVkIEhNQUMKKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19ESVNBQkxFRCkKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSB0cnVuY2F0ZSBFbmFibGUgb3IgZGlzYWJsZSAoTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19FTkFCTEVEIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQpCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgdHJ1bmNhdGUgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVuYWJsZSAvIERpc2FibGUgMS9uLTEgcmVjb3JkIHNwbGl0dGluZworICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19FTkFCTEVEKQorICoKKyAqIFxub3RlICAgICAgICAgICBPbmx5IGFmZmVjdHMgU1NMdjMgYW5kIFRMUyAxLjAsIG5vdCBoaWdoZXIgdmVyc2lvbnMuCisgKiAgICAgICAgICAgICAgICAgRG9lcyBub3QgYWZmZWN0IG5vbi1DQkMgY2lwaGVyc3VpdGVzIGluIGFueSB2ZXJzaW9uLgorICoKKyAqIFxwYXJhbSBjb25mICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHNwbGl0ICAgIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRAorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2JjX3JlY29yZF9zcGxpdHRpbmcoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY2hhciBzcGxpdCApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVuYWJsZSAvIERpc2FibGUgc2Vzc2lvbiB0aWNrZXRzIChjbGllbnQgb25seSkuCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVELikKKyAqCisgKiBcbm90ZSAgICAgICAgICAgT24gc2VydmVyLCB1c2UgXGMgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHNfY2IoKS4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSB1c2VfdGlja2V0cyAgIEVuYWJsZSBvciBkaXNhYmxlIChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRCkKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0cyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgdXNlX3RpY2tldHMgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgJiYgTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVuYWJsZSAvIERpc2FibGUgcmVuZWdvdGlhdGlvbiBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHdoZW4KKyAqICAgICAgICAgICAgICAgICBpbml0aWF0ZWQgYnkgcGVlcgorICogICAgICAgICAgICAgICAgIChEZWZhdWx0OiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEKQorICoKKyAqIFx3YXJuaW5nICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgZGlzYWJsZSByZW5lZ290YXRpb24gdW5sZXNzIHlvdQorICogICAgICAgICAgICAgICAgIGtub3cgeW91IG5lZWQgaXQgYW5kIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLiBJbiB0aGUKKyAqICAgICAgICAgICAgICAgICBwYXN0LCB0aGVyZSBoYXZlIGJlZW4gc2V2ZXJhbCBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgcmVuZWdvdGlhdGlvbiBvciBhIHBvb3IgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHJvcGVydGllcy4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2VydmVyLXNpZGUsIGVuYWJsaW5nIHJlbmVnb3RpYXRpb24gYWxzbyBtYWtlcyB0aGUgc2VydmVyCisgKiAgICAgICAgICAgICAgICAgc3VzY2VwdGlibGUgdG8gYSByZXNvdXJjZSBEb1MgYnkgYSBtYWxpY2lvdXMgY2xpZW50LgorICoKKyAqIFxwYXJhbSBjb25mICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gcmVuZWdvdGlhdGlvbiAgICAgRW5hYmxlIG9yIGRpc2FibGUgKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRU5BQkxFRCBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEKQorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgcmVuZWdvdGlhdGlvbiApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUHJldmVudCBvciBhbGxvdyBsZWdhY3kgcmVuZWdvdGlhdGlvbi4KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTUJFRFRMU19TU0xfTEVHQUNZX05PX1JFTkVHT1RJQVRJT04pCisgKgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OIGFsbG93cyBjb25uZWN0aW9ucyB0bworICogICAgICAgICAgICAgICAgIGJlIGVzdGFibGlzaGVkIGV2ZW4gaWYgdGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydAorICogICAgICAgICAgICAgICAgIHNlY3VyZSByZW5lZ290aWF0aW9uLCBidXQgZG9lcyBub3QgYWxsb3cgcmVuZWdvdGlhdGlvbgorICogICAgICAgICAgICAgICAgIHRvIHRha2UgcGxhY2UgaWYgbm90IHNlY3VyZS4KKyAqICAgICAgICAgICAgICAgICAoSW50ZXJvcGVyYWJsZSBhbmQgc2VjdXJlIG9wdGlvbikKKyAqCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTEVHQUNZX0FMTE9XX1JFTkVHT1RJQVRJT04gYWxsb3dzIHJlbmVnb3RpYXRpb25zCisgKiAgICAgICAgICAgICAgICAgd2l0aCBub24tdXBncmFkZWQgcGVlcnMuIEFsbG93aW5nIGxlZ2FjeSByZW5lZ290aWF0aW9uCisgKiAgICAgICAgICAgICAgICAgbWFrZXMgdGhlIGNvbm5lY3Rpb24gdnVsbmVyYWJsZSB0byBzcGVjaWZpYyBtYW4gaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgbWlkZGxlIGF0dGFja3MuIChTZWUgUkZDIDU3NDYpCisgKiAgICAgICAgICAgICAgICAgKE1vc3QgaW50ZXJvcGVyYWJsZSBhbmQgbGVhc3Qgc2VjdXJlIG9wdGlvbikKKyAqCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRSBicmVha3Mgb2ZmIGNvbm5lY3Rpb25zCisgKiAgICAgICAgICAgICAgICAgaWYgcGVlciBkb2VzIG5vdCBzdXBwb3J0IHNlY3VyZSByZW5lZ290aWF0aW9uLiBSZXN1bHRzCisgKiAgICAgICAgICAgICAgICAgaW4gaW50ZXJvcGVyYWJpbGl0eSBpc3N1ZXMgd2l0aCBub24tdXBncmFkZWQgcGVlcnMKKyAqICAgICAgICAgICAgICAgICB0aGF0IGRvIG5vdCBzdXBwb3J0IHJlbmVnb3RpYXRpb24gYWx0b2dldGhlci4KKyAqICAgICAgICAgICAgICAgICAoTW9zdCBzZWN1cmUgb3B0aW9uLCBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcykKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24KKyAqIFxwYXJhbSBhbGxvd19sZWdhY3kgIFByZXZlbnQgb3IgYWxsb3cgKFNTTF9OT19MRUdBQ1lfUkVORUdPVElBVElPTiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9BTExPV19MRUdBQ1lfUkVORUdPVElBVElPTiBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRSkKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2xlZ2FjeV9yZW5lZ290aWF0aW9uKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBhbGxvd19sZWdhY3kgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKy8qKgorICogXGJyaWVmICAgICAgICAgIEVuZm9yY2UgcmVuZWdvdGlhdGlvbiByZXF1ZXN0cy4KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogZW5mb3JjZWQsIG1heF9yZWNvcmRzID0gMTYpCisgKgorICogICAgICAgICAgICAgICAgIFdoZW4gd2UgcmVxdWVzdCBhIHJlbmVnb3RpYXRpb24sIHRoZSBwZWVyIGNhbiBjb21wbHkgb3IKKyAqICAgICAgICAgICAgICAgICBpZ25vcmUgdGhlIHJlcXVlc3QuIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGRlY2lkZQorICogICAgICAgICAgICAgICAgIHdoZXRoZXIgdG8gZW5mb3JjZSBvdXIgcmVuZWdvdGlhdGlvbiByZXF1ZXN0cyBieSBjbG9zaW5nCisgKiAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaWYgdGhlIHBlZXIgZG9lc24ndCBjb21wbHkuCisgKgorICogICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHJlY29yZHMgY291bGQgYWxyZWFkeSBiZSBpbiB0cmFuc2l0IGZyb20gdGhlIHBlZXIKKyAqICAgICAgICAgICAgICAgICB3aGVuIHRoZSByZXF1ZXN0IGlzIGVtaXR0ZWQuIEluIG9yZGVyIHRvIGluY3JlYXNlCisgKiAgICAgICAgICAgICAgICAgcmVsaWFiaWxpdHksIHdlIGNhbiBhY2NlcHQgYSBudW1iZXIgb2YgcmVjb3JkcyBiZWZvcmUgdGhlCisgKiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgaGFuZHNoYWtlIHJlY29yZHMuCisgKgorICogICAgICAgICAgICAgICAgIFRoZSBvcHRpbWFsIHZhbHVlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIHVzYWdlCisgKiAgICAgICAgICAgICAgICAgc2NlbmFyaW8uCisgKgorICogXG5vdGUgICAgICAgICAgIFdpdGggRFRMUyBhbmQgc2VydmVyLWluaXRpYXRlZCByZW5lZ290aWF0aW9uLCB0aGUKKyAqICAgICAgICAgICAgICAgICBIZWxsb1JlcXVlc3QgaXMgcmV0cmFuc21pdGVkIGV2ZXJ5IHRpbWUgbWJlZHRsc19zc2xfcmVhZCgpIHRpbWVzCisgKiAgICAgICAgICAgICAgICAgb3V0IG9yIHJlY2VpdmVzIEFwcGxpY2F0aW9uIERhdGEsIHVudGlsOgorICogICAgICAgICAgICAgICAgIC0gbWF4X3JlY29yZHMgcmVjb3JkcyBoYXZlIGJlZW5zIHNlZW4sIGlmIGl0IGlzID49IDAsIG9yCisgKiAgICAgICAgICAgICAgICAgLSB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXRzIHRoYXQgd291bGQgaGFwcGVuIGR1cmluZyBhbgorICogICAgICAgICAgICAgICAgIGFjdHVhbCBoYW5kc2hha2UgaGFzIGJlZW4gcmVhY2hlZC4KKyAqICAgICAgICAgICAgICAgICBQbGVhc2UgcmVtZW1iZXIgdGhlIHJlcXVlc3QgbWlnaHQgYmUgbG9zdCBhIGZldyB0aW1lcworICogICAgICAgICAgICAgICAgIGlmIHlvdSBjb25zaWRlciBzZXR0aW5nIG1heF9yZWNvcmRzIHRvIGEgcmVhbGx5IGxvdyB2YWx1ZS4KKyAqCisgKiBcd2FybmluZyAgICAgICAgT24gY2xpZW50LCB0aGUgZ3JhY2UgcGVyaW9kIGNhbiBvbmx5IGhhcHBlbiBkdXJpbmcKKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9yZWFkKCksIGFzIG9wcG9zZWQgdG8gbWJlZHRsc19zc2xfd3JpdGUoKSBhbmQgbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoKQorICogICAgICAgICAgICAgICAgIHdoaWNoIGFsd2F5cyBiZWhhdmUgYXMgaWYgbWF4X3JlY29yZCB3YXMgMC4gVGhlIHJlYXNvbiBpcywKKyAqICAgICAgICAgICAgICAgICBpZiB3ZSByZWNlaXZlIGFwcGxpY2F0aW9uIGRhdGEgZnJvbSB0aGUgc2VydmVyLCB3ZSBuZWVkIGEKKyAqICAgICAgICAgICAgICAgICBwbGFjZSB0byB3cml0ZSBpdCwgd2hpY2ggb25seSBoYXBwZW5zIGR1cmluZyBtYmVkdGxzX3NzbF9yZWFkKCkuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gbWF4X3JlY29yZHMgVXNlIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fTk9UX0VORk9SQ0VEIGlmIHlvdSBkb24ndCB3YW50IHRvCisgKiAgICAgICAgICAgICAgICAgZW5mb3JjZSByZW5lZ290aWF0aW9uLCBvciBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSB0byBlbmZvcmNlCisgKiAgICAgICAgICAgICAgICAgaXQgYnV0IGFsbG93IGZvciBhIGdyYWNlIHBlcmlvZCBvZiBtYXhfcmVjb3JkcyByZWNvcmRzLgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9lbmZvcmNlZCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWF4X3JlY29yZHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHJlY29yZCBjb3VudGVyIHRocmVzaG9sZCBmb3IgcGVyaW9kaWMgcmVuZWdvdGlhdGlvbi4KKyAqICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMl42NCAtIDI1Ni4pCisgKgorICogICAgICAgICAgICAgICAgIFJlbmVnb3RpYXRpb24gaXMgYXV0b21hdGljYWxseSB0cmlnZ2VyZWQgd2hlbiBhIHJlY29yZAorICogICAgICAgICAgICAgICAgIGNvdW50ZXIgKG91dGdvaW5nIG9yIGluZ29pbmcpIGNyb3NzZXMgdGhlIGRlZmluZWQKKyAqICAgICAgICAgICAgICAgICB0aHJlc2hvbGQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG1lYW50IHRvIHByZXZlbnQgdGhlCisgKiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBmcm9tIGJlaW5nIGNsb3NlZCB3aGVuIHRoZSBjb3VudGVyIGlzIGFib3V0IHRvCisgKiAgICAgICAgICAgICAgICAgcmVhY2hlZCBpdHMgbWF4aW1hbCB2YWx1ZSAoaXQgaXMgbm90IGFsbG93ZWQgdG8gd3JhcCkuCisgKgorICogICAgICAgICAgICAgICAgIExvd2VyIHZhbHVlcyBjYW4gYmUgdXNlZCB0byBlbmZvcmNlIHBvbGljaWVzIHN1Y2ggYXMgImtleXMKKyAqICAgICAgICAgICAgICAgICBtdXN0IGJlIHJlZnJlc2hlZCBldmVyeSBOIHBhY2tldHMgd2l0aCBjaXBoZXIgWCIuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uCisgKiBccGFyYW0gcGVyaW9kICAgVGhlIHRocmVzaG9sZCB2YWx1ZTogYSBiaWctZW5kaWFuIDY0LWJpdCBudW1iZXIuCisgKiAgICAgICAgICAgICAgICAgU2V0IHRvIDJeNjQgLSAxIHRvIGRpc2FibGUgcGVyaW9kaWMgcmVuZWdvdGlhdGlvbgorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9wZXJpb2QoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBwZXJpb2RbOF0gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgaG93IG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVhZCBidWZmZXIKKyAqLworc2l6ZV90IG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIC0xIGlmIHJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIChlZyBiZWNhdXNlIHRoZSBoYW5kc2hha2Ugd2FzCisgKiAgICAgICAgICAgICAgICAgYWJvcnRlZCB0b28gZWFybHkpLCBvcgorICogICAgICAgICAgICAgICAgIGEgY29tYmluYXRpb24gb2YgQkFEQ0VSVF94eHggYW5kIEJBRENSTF94eHggZmxhZ3MsIHNlZQorICogICAgICAgICAgICAgICAgIHg1MDkuaAorICovCit1aW50MzJfdCBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBjaXBoZXJzdWl0ZQorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjaXBoZXJzdWl0ZSBuYW1lCisgKi8KK2NvbnN0IGNoYXIgKm1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgY3VycmVudCBTU0wgdmVyc2lvbiAoU1NMdjMvVExTdjEvZXRjKQorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICBhIHN0cmluZyBjb250YWluaW5nIHRoZSBTU0wgdmVyc2lvbgorICovCitjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfdmVyc2lvbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgKG1heGltdW0pIG51bWJlciBvZiBieXRlcyBhZGRlZCBieSB0aGUgcmVjb3JkCisgKiAgICAgICAgICAgICAgICAgbGF5ZXI6IGhlYWRlciArIGVuY3J5cHRpb24vTUFDIG92ZXJoZWFkIChpbmMuIHBhZGRpbmcpCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIEN1cnJlbnQgbWF4aW11bSByZWNvcmQgZXhwYW5zaW9uIGluIGJ5dGVzLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFIGlmIGNvbXByZXNzaW9uIGlzCisgKiAgICAgICAgICAgICAgICAgZW5hYmxlZCwgd2hpY2ggbWFrZXMgZXhwYW5zaW9uIG11Y2ggbGVzcyBwcmVkaWN0YWJsZQorICovCitpbnQgbWJlZHRsc19zc2xfZ2V0X3JlY29yZF9leHBhbnNpb24oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmV0dXJuIHRoZSBtYXhpbXVtIGZyYWdtZW50IGxlbmd0aCAocGF5bG9hZCwgaW4gYnl0ZXMpLgorICogICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIHZhbHVlIG5lZ290aWF0ZWQgd2l0aCBwZWVyIGlmIGFueSwKKyAqICAgICAgICAgICAgICAgICBvciB0aGUgbG9jYWxseSBjb25maWd1cmVkIHZhbHVlLgorICoKKyAqIFxub3RlICAgICAgICAgICBXaXRoIERUTFMsIFxjIG1iZWR0bHNfc3NsX3dyaXRlKCkgd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYKKyAqICAgICAgICAgICAgICAgICBjYWxsZWQgd2l0aCBhIGxhcmdlciBsZW5ndGggdmFsdWUuCisgKiAgICAgICAgICAgICAgICAgV2l0aCBUTFMsIFxjIG1iZWR0bHNfc3NsX3dyaXRlKCkgd2lsbCBmcmFnbWVudCB0aGUgaW5wdXQgaWYKKyAqICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW47IGl0IGlzIHVwCisgKiAgICAgICAgICAgICAgICAgdG8gdGhlIGNhbGxlciB0byBjYWxsIFxjIG1iZWR0bHNfc3NsX3dyaXRlKCkgYWdhaW4gaW4KKyAqICAgICAgICAgICAgICAgICBvcmRlciB0byBzZW5kIHRoZSByZW1haW5pbmcgYnl0ZXMgaWYgYW55LgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICBDdXJyZW50IG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoLgorICovCitzaXplX3QgbWJlZHRsc19zc2xfZ2V0X21heF9mcmFnX2xlbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm4gdGhlIHBlZXIgY2VydGlmaWNhdGUgZnJvbSB0aGUgY3VycmVudCBjb25uZWN0aW9uCisgKgorICogICAgICAgICAgICAgICAgIE5vdGU6IENhbiBiZSBOVUxMIGluIGNhc2Ugbm8gY2VydGlmaWNhdGUgd2FzIHNlbnQgZHVyaW5nCisgKiAgICAgICAgICAgICAgICAgdGhlIGhhbmRzaGFrZS4gRGlmZmVyZW50IGNhbGxzIGZvciB0aGUgc2FtZSBjb25uZWN0aW9uIGNhbgorICogICAgICAgICAgICAgICAgIHJldHVybiB0aGUgc2FtZSBvciBkaWZmZXJlbnQgcG9pbnRlcnMgZm9yIHRoZSBzYW1lCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgYW5kIGV2ZW4gYSBkaWZmZXJlbnQgY2VydGlmaWNhdGUgYWx0b2dldGhlci4KKyAqICAgICAgICAgICAgICAgICBUaGUgcGVlciBjZXJ0IENBTiBjaGFuZ2UgaW4gYSBzaW5nbGUgY29ubmVjdGlvbiBpZgorICogICAgICAgICAgICAgICAgIHJlbmVnb3RpYXRpb24gaXMgcGVyZm9ybWVkLgorICoKKyAqIFxwYXJhbSBzc2wgICAgICBTU0wgY29udGV4dAorICoKKyAqIFxyZXR1cm4gICAgICAgICB0aGUgY3VycmVudCBwZWVyIGNlcnRpZmljYXRlCisgKi8KK2NvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKm1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNhdmUgc2Vzc2lvbiBpbiBvcmRlciB0byByZXN1bWUgaXQgbGF0ZXIgKGNsaWVudC1zaWRlIG9ubHkpCisgKiAgICAgICAgICAgICAgICAgU2Vzc2lvbiBkYXRhIGlzIGNvcGllZCB0byBwcmVzZW50ZWQgc2Vzc2lvbiBzdHJ1Y3R1cmUuCisgKgorICogXHdhcm5pbmcgICAgICAgIEN1cnJlbnRseSwgcGVlciBjZXJ0aWZpY2F0ZSBpcyBsb3N0IGluIHRoZSBvcGVyYXRpb24uCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gc2Vzc2lvbiAgc2Vzc2lvbiBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgaWYgdXNlZCBzZXJ2ZXItc2lkZSBvcgorICogICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgb3RoZXJ3aXNlIGludmFsaWQKKyAqCisgKiBcc2EgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2V0X3Nlc3Npb24oKQorICovCitpbnQgbWJlZHRsc19zc2xfZ2V0X3Nlc3Npb24oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gdGhlIFNTTCBoYW5kc2hha2UKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgb3IgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUsIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCAoc2VlIGJlbG93KSwgb3IKKyAqICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIFNTTCBlcnJvciBjb2RlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gMCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQvV1JJVEUsIHRoZW4gdGhlIHNzbCBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgYmVjb21lcyB1bnVzYWJsZSwgYW5kIHlvdSBzaG91bGQgZWl0aGVyIGZyZWUgaXQgb3IgY2FsbAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoKSBvbiBpdCBiZWZvcmUgcmUtdXNpbmcgaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgYSBuZXcgY29ubmVjdGlvbjsgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBtdXN0IGJlIGNsb3NlZC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgRFRMUyBpcyBpbiB1c2UsIHRoZW4geW91IG1heSBjaG9vc2UgdG8gaGFuZGxlCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCBzcGVjaWFsbHkgZm9yIGxvZ2dpbmcKKyAqICAgICAgICAgICAgICAgICBwdXJwb3NlcywgYXMgaXQgaXMgYW4gZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIHJhdGhlciB0aGFuIGFuCisgKiAgICAgICAgICAgICAgICAgYWN0dWFsIGVycm9yLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gcmVzZXQvZnJlZSB0aGUgY29udGV4dC4KKyAqLworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBlcmZvcm0gYSBzaW5nbGUgc3RlcCBvZiB0aGUgU1NMIGhhbmRzaGFrZQorICoKKyAqIFxub3RlICAgICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIGNvbnRleHQgKHNzbC0+c3RhdGUpIHdpbGwgYmUgYXQKKyAqICAgICAgICAgICAgICAgICB0aGUgbmV4dCBzdGF0ZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gRG8gbm90CisgKiAgICAgICAgICAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHN0YXRlIGlzIE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gMCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQvV1JJVEUsIHRoZW4gdGhlIHNzbCBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgYmVjb21lcyB1bnVzYWJsZSwgYW5kIHlvdSBzaG91bGQgZWl0aGVyIGZyZWUgaXQgb3IgY2FsbAorICogICAgICAgICAgICAgICAgIFxjIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoKSBvbiBpdCBiZWZvcmUgcmUtdXNpbmcgaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgYSBuZXcgY29ubmVjdGlvbjsgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBtdXN0IGJlIGNsb3NlZC4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgb3IgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUsIG9yCisgKiAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBTU0wgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9zdGVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYXRlIGFuIFNTTCByZW5lZ290aWF0aW9uIG9uIHRoZSBydW5uaW5nIGNvbm5lY3Rpb24uCisgKiAgICAgICAgICAgICAgICAgQ2xpZW50OiBwZXJmb3JtIHRoZSByZW5lZ290aWF0aW9uIHJpZ2h0IG5vdy4KKyAqICAgICAgICAgICAgICAgICBTZXJ2ZXI6IHJlcXVlc3QgcmVuZWdvdGlhdGlvbiwgd2hpY2ggd2lsbCBiZSBwZXJmb3JtZWQKKyAqICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIG5leHQgY2FsbCB0byBtYmVkdGxzX3NzbF9yZWFkKCkgaWYgaG9ub3JlZCBieQorICogICAgICAgICAgICAgICAgIGNsaWVudC4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhbnkgbWJlZHRsc19zc2xfaGFuZHNoYWtlKCkgcmV0dXJuCisgKiAgICAgICAgICAgICAgICAgdmFsdWUuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiAwIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRC9XUklURSwgdGhlbiB0aGUgc3NsIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICBiZWNvbWVzIHVudXNhYmxlLCBhbmQgeW91IHNob3VsZCBlaXRoZXIgZnJlZSBpdCBvciBjYWxsCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgpIG9uIGl0IGJlZm9yZSByZS11c2luZyBpdCBmb3IKKyAqICAgICAgICAgICAgICAgICBhIG5ldyBjb25uZWN0aW9uOyB0aGUgY3VycmVudCBjb25uZWN0aW9uIG11c3QgYmUgY2xvc2VkLgorICovCitpbnQgbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUmVhZCBhdCBtb3N0ICdsZW4nIGFwcGxpY2F0aW9uIGRhdGEgYnl0ZXMKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgdGhhdCB3aWxsIGhvbGQgdGhlIGRhdGEKKyAqIFxwYXJhbSBsZW4gICAgICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKgorICogXHJldHVybiAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCwgb3IKKyAqICAgICAgICAgICAgICAgICAwIGZvciBFT0YsIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCBvciBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSwgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCAoc2VlIGJlbG93KSwgb3IKKyAqICAgICAgICAgICAgICAgICBhbm90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHBvc2l0aXZlCisgKiAgICAgICAgICAgICAgICAgdmFsdWUgb3IgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRC9XUklURSBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1NTTF9DTElFTlRfUkVDT05ORUNULCB0aGVuIHRoZSBzc2wgY29udGV4dAorICogICAgICAgICAgICAgICAgIGJlY29tZXMgdW51c2FibGUsIGFuZCB5b3Ugc2hvdWxkIGVpdGhlciBmcmVlIGl0IG9yIGNhbGwKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCkgb24gaXQgYmVmb3JlIHJlLXVzaW5nIGl0IGZvcgorICogICAgICAgICAgICAgICAgIGEgbmV3IGNvbm5lY3Rpb247IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gbXVzdCBiZSBjbG9zZWQuCisgKgorICogXG5vdGUgICAgICAgICAgIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm4gTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QKKyAqICAgICAgICAgICAgICAgICAod2hpY2ggY2FuIG9ubHkgaGFwcGVuIHNlcnZlci1zaWRlKSwgaXQgbWVhbnMgdGhhdCBhIGNsaWVudAorICogICAgICAgICAgICAgICAgIGlzIGluaXRpYXRpbmcgYSBuZXcgY29ubmVjdGlvbiB1c2luZyB0aGUgc2FtZSBzb3VyY2UgcG9ydC4KKyAqICAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciB0cmVhdCB0aGF0IGFzIGEgY29ubmVjdGlvbiBjbG9zZSBhbmQgd2FpdAorICogICAgICAgICAgICAgICAgIGZvciB0aGUgY2xpZW50IHRvIHJlc2VuZCBhIENsaWVudEhlbGxvLCBvciBkaXJlY3RseQorICogICAgICAgICAgICAgICAgIGNvbnRpbnVlIHdpdGggXGMgbWJlZHRsc19zc2xfaGFuZHNoYWtlKCkgd2l0aCB0aGUgc2FtZQorICogICAgICAgICAgICAgICAgIGNvbnRleHQgKGFzIGl0IGhhcyBiZWVlbiByZXNldCBpbnRlcm5hbGx5KS4gRWl0aGVyIHdheSwgeW91CisgKiAgICAgICAgICAgICAgICAgc2hvdWxkIG1ha2Ugc3VyZSB0aGlzIGlzIHNlZW4gYnkgdGhlIGFwcGxpY2F0aW9uIGFzIGEgbmV3CisgKiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbjogYXBwbGljYXRpb24gc3RhdGUsIGlmIGFueSwgc2hvdWxkIGJlIHJlc2V0LCBhbmQKKyAqICAgICAgICAgICAgICAgICBtb3N0IGltcG9ydGFudGx5IHRoZSBpZGVudGl0eSBvZiB0aGUgY2xpZW50IG11c3QgYmUgY2hlY2tlZAorICogICAgICAgICAgICAgICAgIGFnYWluLiBXQVJOSU5HOiBub3QgdmFsaWRhdGluZyB0aGUgaWRlbnRpdHkgb2YgdGhlIGNsaWVudAorICogICAgICAgICAgICAgICAgIGFnYWluLCBvciBub3QgdHJhbnNtaXR0aW5nIHRoZSBuZXcgaWRlbnRpdHkgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gbGF5ZXIsIHdvdWxkIGFsbG93IGF1dGhlbnRpY2F0aW9uIGJ5cGFzcyEKKyAqLworaW50IG1iZWR0bHNfc3NsX3JlYWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFRyeSB0byB3cml0ZSBleGFjdGx5ICdsZW4nIGFwcGxpY2F0aW9uIGRhdGEgYnl0ZXMKKyAqCisgKiBcd2FybmluZyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGRvIHBhcnRpYWwgd3JpdGVzIGluIHNvbWUgY2FzZXMuIElmIHRoZQorICogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpcyBub24tbmVnYXRpdmUgYnV0IGxlc3MgdGhhbiBsZW5ndGgsIHRoZQorICogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluIHdpdGggdXBkYXRlZCBhcmd1bWVudHM6CisgKiAgICAgICAgICAgICAgICAgYnVmICsgcmV0LCBsZW4gLSByZXQgKGlmIHJldCBpcyB0aGUgcmV0dXJuIHZhbHVlKSB1bnRpbAorICogICAgICAgICAgICAgICAgIGl0IHJldHVybnMgYSB2YWx1ZSBlcXVhbCB0byB0aGUgbGFzdCAnbGVuJyBhcmd1bWVudC4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgZGF0YQorICogXHBhcmFtIGxlbiAgICAgIGhvdyBtYW55IGJ5dGVzIG11c3QgYmUgd3JpdHRlbgorICoKKyAqIFxyZXR1cm4gICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKG1heSBiZSBsZXNzIHRoYW4gbGVuKSwKKyAqICAgICAgICAgICAgICAgICBvciBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSBvZiBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFELAorICogICAgICAgICAgICAgICAgIG9yIGFub3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgcG9zaXRpdmUKKyAqICAgICAgICAgICAgICAgICB2YWx1ZSBvciBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEL1dSSVRFLCB0aGUgc3NsIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICBiZWNvbWVzIHVudXNhYmxlLCBhbmQgeW91IHNob3VsZCBlaXRoZXIgZnJlZSBpdCBvciBjYWxsCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgpIG9uIGl0IGJlZm9yZSByZS11c2luZyBpdCBmb3IKKyAqICAgICAgICAgICAgICAgICBhIG5ldyBjb25uZWN0aW9uOyB0aGUgY3VycmVudCBjb25uZWN0aW9uIG11c3QgYmUgY2xvc2VkLgorICoKKyAqIFxub3RlICAgICAgICAgICBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURS9SRUFELAorICogICAgICAgICAgICAgICAgIGl0IG11c3QgYmUgY2FsbGVkIGxhdGVyIHdpdGggdGhlICpzYW1lKiBhcmd1bWVudHMsCisgKiAgICAgICAgICAgICAgICAgdW50aWwgaXQgcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJZiB0aGUgcmVxdWVzdGVkIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0KKyAqICAgICAgICAgICAgICAgICBmcmFnbWVudCBsZW5ndGggKGVpdGhlciB0aGUgYnVpbHQtaW4gbGltaXQgb3IgdGhlIG9uZSBzZXQKKyAqICAgICAgICAgICAgICAgICBvciBuZWdvdGlhdGVkIHdpdGggdGhlIHBlZXIpLCB0aGVuOgorICogICAgICAgICAgICAgICAgIC0gd2l0aCBUTFMsIGxlc3MgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQgYXJlIHdyaXR0ZW4uCisgKiAgICAgICAgICAgICAgICAgLSB3aXRoIERUTFMsIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSBpcyByZXR1cm5lZC4KKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9nZXRfbWF4X2ZyYWdfbGVuKCkgbWF5IGJlIHVzZWQgdG8gcXVlcnkgdGhlCisgKiAgICAgICAgICAgICAgICAgYWN0aXZlIG1heGltdW0gZnJhZ21lbnQgbGVuZ3RoLgorICovCitpbnQgbWJlZHRsc19zc2xfd3JpdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZW5kIGFuIGFsZXJ0IG1lc3NhZ2UKKyAqCisgKiBccGFyYW0gc3NsICAgICAgIFNTTCBjb250ZXh0CisgKiBccGFyYW0gbGV2ZWwgICAgIFRoZSBhbGVydCBsZXZlbCBvZiB0aGUgbWVzc2FnZQorICogICAgICAgICAgICAgICAgICAoTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORyBvciBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCkKKyAqIFxwYXJhbSBtZXNzYWdlICAgVGhlIGFsZXJ0IG1lc3NhZ2UgKFNTTF9BTEVSVF9NU0dfKikKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBTU0wgZXJyb3IgY29kZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIDAgb3IKKyAqICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEL1dSSVRFLCB0aGVuIHRoZSBzc2wgY29udGV4dAorICogICAgICAgICAgICAgICAgIGJlY29tZXMgdW51c2FibGUsIGFuZCB5b3Ugc2hvdWxkIGVpdGhlciBmcmVlIGl0IG9yIGNhbGwKKyAqICAgICAgICAgICAgICAgICBcYyBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCkgb24gaXQgYmVmb3JlIHJlLXVzaW5nIGl0IGZvcgorICogICAgICAgICAgICAgICAgIGEgbmV3IGNvbm5lY3Rpb247IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gbXVzdCBiZSBjbG9zZWQuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZSApOworLyoqCisgKiBcYnJpZWYgICAgICAgICAgTm90aWZ5IHRoZSBwZWVyIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgY2xvc2VkCisgKgorICogXHBhcmFtIHNzbCAgICAgIFNTTCBjb250ZXh0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgU1NMIGVycm9yIGNvZGUuCisgKgorICogXG5vdGUgICAgICAgICAgIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiAwIG9yCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRC9XUklURSwgdGhlbiB0aGUgc3NsIGNvbnRleHQKKyAqICAgICAgICAgICAgICAgICBiZWNvbWVzIHVudXNhYmxlLCBhbmQgeW91IHNob3VsZCBlaXRoZXIgZnJlZSBpdCBvciBjYWxsCisgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCgpIG9uIGl0IGJlZm9yZSByZS11c2luZyBpdCBmb3IKKyAqICAgICAgICAgICAgICAgICBhIG5ldyBjb25uZWN0aW9uOyB0aGUgY3VycmVudCBjb25uZWN0aW9uIG11c3QgYmUgY2xvc2VkLgorICovCitpbnQgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRnJlZSByZWZlcmVuY2VkIGl0ZW1zIGluIGFuIFNTTCBjb250ZXh0IGFuZCBjbGVhciBtZW1vcnkKKyAqCisgKiBccGFyYW0gc3NsICAgICAgU1NMIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9mcmVlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBhbiBTU0wgY29uZmlndXJhdGlvbiBjb250ZXh0CisgKiAgICAgICAgICAgICAgICAgSnVzdCBtYWtlcyB0aGUgY29udGV4dCByZWFkeSBmb3IKKyAqICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoKSBvciBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSgpLgorICoKKyAqIFxub3RlICAgICAgICAgICBZb3UgbmVlZCB0byBjYWxsIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cygpIHVubGVzcyB5b3UKKyAqICAgICAgICAgICAgICAgICBtYW51YWxseSBzZXQgYWxsIG9mIHRoZSByZWxldmVudCBmaWVsZHMgeW91cnNlbGYuCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgcmVhc29ubmFibGUgZGVmYXVsdCBTU0wgY29uZmlndXJhdGlvbiB2YWx1ZXMuCisgKiAgICAgICAgICAgICAgICAgKFlvdSBuZWVkIHRvIGNhbGwgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoKSBmaXJzdC4pCisgKgorICogXHBhcmFtIGNvbmYgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqIFxwYXJhbSBlbmRwb2ludCBNQkVEVExTX1NTTF9JU19DTElFTlQgb3IgTUJFRFRMU19TU0xfSVNfU0VSVkVSCisgKiBccGFyYW0gdHJhbnNwb3J0IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gZm9yIFRMUywgb3IKKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNIGZvciBEVExTCisgKiBccGFyYW0gcHJlc2V0ICAgYSBNQkVEVExTX1NTTF9QUkVTRVRfWFhYIHZhbHVlCisgKiAgICAgICAgICAgICAgICAgKGN1cnJlbnRseSB1bnVzZWQpLgorICoKKyAqIFxub3RlICAgICAgICAgICBTZWUgXGMgbWJlZHRsc19zc2xfY29uZl90cmFuc3BvcnQoKSBmb3Igbm90ZXMgb24gRFRMUy4KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvcgorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1hYWF9BTExPQ19GQUlMRUQgb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmRwb2ludCwgaW50IHRyYW5zcG9ydCwgaW50IHByZXNldCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBGcmVlIGFuIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY29uZiAgICAgU1NMIGNvbmZpZ3VyYXRpb24gY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBTU0wgc2Vzc2lvbiBzdHJ1Y3R1cmUKKyAqCisgKiBccGFyYW0gc2Vzc2lvbiAgU1NMIHNlc3Npb24KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9zZXNzaW9uX2luaXQoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgRnJlZSByZWZlcmVuY2VkIGl0ZW1zIGluIGFuIFNTTCBzZXNzaW9uIGluY2x1ZGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICBwZWVyIGNlcnRpZmljYXRlIGFuZCBjbGVhciBtZW1vcnkKKyAqCisgKiBccGFyYW0gc2Vzc2lvbiAgU1NMIHNlc3Npb24KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHNzbC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9jYWNoZS5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzM0YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfY2FjaGUuaApAQCAtMCwwICsxLDE0MyBAQAorLyoqCisgKiBcZmlsZSBzc2xfY2FjaGUuaAorICoKKyAqIFxicmllZiBTU0wgc2Vzc2lvbiBjYWNoZSBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NTTF9DQUNIRV9ICisjZGVmaW5lIE1CRURUTFNfU1NMX0NBQ0hFX0gKKworI2luY2x1ZGUgInNzbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorI2luY2x1ZGUgInRocmVhZGluZy5oIgorI2VuZGlmCisKKy8qKgorICogXG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3UgY2FuIHNldCBmb3IgdGhpcyBtb2R1bGUgYXJlIGluIHRoaXMgc2VjdGlvbi4KKyAqIEVpdGhlciBjaGFuZ2UgdGhlbSBpbiBjb25maWcuaCBvciBkZWZpbmUgdGhlbSBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9USU1FT1VUKQorI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQgICAgICAgODY0MDAgICAvKiE8IDEgZGF5ICAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTKQorI2RlZmluZSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTICAgICAgNTAgICAvKiE8IE1heGltdW0gZW50cmllcyBpbiBjYWNoZSAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkgbWJlZHRsc19zc2xfY2FjaGVfZW50cnk7CisKKy8qKgorICogXGJyaWVmICAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Igc3RvcmluZyBjYWNoZSBlbnRyaWVzCisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeQoreworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgbWJlZHRsc190aW1lX3QgdGltZXN0YW1wOyAgICAgICAgICAgLyohPCBlbnRyeSB0aW1lc3RhbXAgICAgKi8KKyNlbmRpZgorICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gc2Vzc2lvbjsgICAgICAgIC8qITwgZW50cnkgc2Vzc2lvbiAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2J1ZiBwZWVyX2NlcnQ7ICAgICAgICAgLyohPCBlbnRyeSBwZWVyX2NlcnQgICAgKi8KKyNlbmRpZgorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5ICpuZXh0OyAgICAgIC8qITwgY2hhaW4gcG9pbnRlciAgICAgICovCit9OworCisvKioKKyAqIFxicmllZiBDYWNoZSBjb250ZXh0CisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0Cit7CisgICAgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkgKmNoYWluOyAgICAgLyohPCBzdGFydCBvZiB0aGUgY2hhaW4gICAgICovCisgICAgaW50IHRpbWVvdXQ7ICAgICAgICAgICAgICAgIC8qITwgY2FjaGUgZW50cnkgdGltZW91dCAgICAqLworICAgIGludCBtYXhfZW50cmllczsgICAgICAgICAgICAvKiE8IG1heGltdW0gZW50cmllcyAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtdXRleDsgICAgLyohPCBtdXRleCAgICAgICAgICAgICAgICAgICovCisjZW5kaWYKK307CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIEluaXRpYWxpemUgYW4gU1NMIGNhY2hlIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY2FjaGUgICAgU1NMIGNhY2hlIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jYWNoZV9pbml0KCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0ICpjYWNoZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDYWNoZSBnZXQgY2FsbGJhY2sgaW1wbGVtZW50YXRpb24KKyAqICAgICAgICAgICAgICAgICAoVGhyZWFkLXNhZmUgaWYgTUJFRFRMU19USFJFQURJTkdfQyBpcyBlbmFibGVkKQorICoKKyAqIFxwYXJhbSBkYXRhICAgICBTU0wgY2FjaGUgY29udGV4dAorICogXHBhcmFtIHNlc3Npb24gIHNlc3Npb24gdG8gcmV0cmlldmUgZW50cnkgZm9yCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jYWNoZV9nZXQoIHZvaWQgKmRhdGEsIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2FjaGUgc2V0IGNhbGxiYWNrIGltcGxlbWVudGF0aW9uCisgKiAgICAgICAgICAgICAgICAgKFRocmVhZC1zYWZlIGlmIE1CRURUTFNfVEhSRUFESU5HX0MgaXMgZW5hYmxlZCkKKyAqCisgKiBccGFyYW0gZGF0YSAgICAgU1NMIGNhY2hlIGNvbnRleHQKKyAqIFxwYXJhbSBzZXNzaW9uICBzZXNzaW9uIHRvIHN0b3JlIGVudHJ5IGZvcgorICovCitpbnQgbWJlZHRsc19zc2xfY2FjaGVfc2V0KCB2b2lkICpkYXRhLCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBjYWNoZSB0aW1lb3V0CisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVCAoMSBkYXkpKQorICoKKyAqICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgb2YgMCBpbmRpY2F0ZXMgbm8gdGltZW91dC4KKyAqCisgKiBccGFyYW0gY2FjaGUgICAgU1NMIGNhY2hlIGNvbnRleHQKKyAqIFxwYXJhbSB0aW1lb3V0ICBjYWNoZSBlbnRyeSB0aW1lb3V0IGluIHNlY29uZHMKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jYWNoZV9zZXRfdGltZW91dCggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUsIGludCB0aW1lb3V0ICk7CisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzCisgKiAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMgKDUwKSkKKyAqCisgKiBccGFyYW0gY2FjaGUgICAgU1NMIGNhY2hlIGNvbnRleHQKKyAqIFxwYXJhbSBtYXggICAgICBjYWNoZSBlbnRyeSBtYXhpbXVtCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfc2V0X21heF9lbnRyaWVzKCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0ICpjYWNoZSwgaW50IG1heCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBGcmVlIHJlZmVyZW5jZWQgaXRlbXMgaW4gYSBjYWNoZSBjb250ZXh0IGFuZCBjbGVhciBtZW1vcnkKKyAqCisgKiBccGFyYW0gY2FjaGUgICAgU1NMIGNhY2hlIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jYWNoZV9mcmVlKCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0ICpjYWNoZSApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogc3NsX2NhY2hlLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2NpcGhlcnN1aXRlcy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfY2lwaGVyc3VpdGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhYWEzNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2NpcGhlcnN1aXRlcy5oCkBAIC0wLDAgKzEsMzIxIEBACisvKioKKyAqIFxmaWxlIHNzbF9jaXBoZXJzdWl0ZXMuaAorICoKKyAqIFxicmllZiBTU0wgQ2lwaGVyc3VpdGVzIGZvciBtYmVkIFRMUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVNfSAorI2RlZmluZSBNQkVEVExTX1NTTF9DSVBIRVJTVUlURVNfSAorCisjaW5jbHVkZSAicGsuaCIKKyNpbmNsdWRlICJjaXBoZXIuaCIKKyNpbmNsdWRlICJtZC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBTdXBwb3J0ZWQgY2lwaGVyc3VpdGVzIChPZmZpY2lhbCBJQU5BIG5hbWVzKQorICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1ICAgICAgICAgICAgICAgICAgICAweDAxICAgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAgICAgICAgMHgwMiAgIC8qKjwgV2VhayEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X01ENSAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9ERVNfQ0JDX1NIQSAgICAgICAgICAgICAgICAgMHgwOSAgIC8qKjwgV2VhayEgTm90IGluIFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAgICAgICAgMHgwQQorCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9ERVNfQ0JDX1NIQSAgICAgICAgICAgICAweDE1ICAgLyoqPCBXZWFrISBOb3QgaW4gVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAgICAgMHgxNgorCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBICAgICAgICAgICAgICAgICAgICAweDJDICAgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEgICAgICAgICAgICAgICAgMHgyRCAgIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBICAgICAgICAgICAgICAgIDB4MkUgICAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICAgICAweDJGCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgIDB4MzMKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgIDB4MzkKKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQTI1NiAgICAgICAgICAgICAgICAgMHgzQiAgIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgICAgIDB4M0MgICAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgICAgIDB4M0QgICAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSAgICAgICAgMHg0MQorI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEgICAgMHg0NQorCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgICAgICAweDY3ICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYgICAgICAweDZCICAgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEgICAgICAgIDB4ODQKKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBICAgIDB4ODgKKworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgMHg4QQorI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAgICAgICAgMHg4QgorI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAgMHg4QworI2RlZmluZSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgICAgMHg4RAorCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAweDhFCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAgICAweDhGCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAweDkwCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAweDkxCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBICAgICAgICAgICAgIDB4OTIKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAgIDB4OTMKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgIDB4OTQKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgIDB4OTUKKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgICAgMHg5QyAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAgICAgMHg5RCAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgICAgMHg5RSAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgMHg5RiAgIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgICAgICAweEE4ICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgICAgICAweEE5ICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAweEFBICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAweEFCICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAweEFDICAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAweEFEICAgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgICAgIDB4QUUKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgICAgIDB4QUYKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYgICAgICAgICAgICAgICAgIDB4QjAgICAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0ICAgICAgICAgICAgICAgICAweEIxICAgLyoqPCBXZWFrISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgICAgICAweEIyCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgICAgICAweEIzCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NiAgICAgICAgICAgICAweEI0ICAgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQgICAgICAgICAgICAgMHhCNSAgIC8qKjwgV2VhayEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgMHhCNgorI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgMHhCNworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEyNTYgICAgICAgICAgICAgMHhCOCAgIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0ICAgICAgICAgICAgIDB4QjkgICAvKio8IFdlYWshICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgICAgIDB4QkEgICAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IDB4QkUgICAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NiAgICAgMHhDMCAgIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYgMHhDNCAgIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgICAweEMwMDEgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgMHhDMDAyIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgICAweEMwMDMgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgIDB4QzAwNCAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgMHhDMDA1IC8qKjwgTm90IGluIFNTTDMhICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9OVUxMX1NIQSAgICAgICAgICAgIDB4QzAwNiAvKio8IFdlYWshICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAweEMwMDcgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBICAgIDB4QzAwOCAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgMHhDMDA5IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAweEMwMEEgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBICAgICAgICAgICAgICAgMHhDMDBCIC8qKjwgV2VhayEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgIDB4QzAwQyAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAgMHhDMDBEIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAweEMwMEUgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgIDB4QzAwRiAvKio8IE5vdCBpbiBTU0wzISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX05VTExfU0hBICAgICAgICAgICAgICAweEMwMTAgLyoqPCBXZWFrISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgMHhDMDExIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgICAgICAweEMwMTIgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgIDB4QzAxMyAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgMHhDMDE0IC8qKjwgTm90IGluIFNTTDMhICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgIDB4QzAyMyAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgIDB4QzAyNCAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiAgIDB4QzAyNSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCAgIDB4QzAyNiAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgIDB4QzAyNyAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgIDB4QzAyOCAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgICAgIDB4QzAyOSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgICAgIDB4QzAyQSAvKio8IFRMUyAxLjIgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgMHhDMDJCIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgMHhDMDJDIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgMHhDMDJEIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgMHhDMDJFIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgMHhDMDJGIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgMHhDMDMwIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgMHhDMDMxIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgMHhDMDMyIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBICAgICAgICAgICAweEMwMzMgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSAgICAgIDB4QzAzNCAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgICAgICAgMHhDMDM1IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSAgICAgICAweEMwMzYgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2ICAgIDB4QzAzNyAvKio8IE5vdCBpbiBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgICAgMHhDMDM4IC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBICAgICAgICAgICAgICAweEMwMzkgLyoqPCBXZWFrISBObyBTU0wzISAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NiAgICAgICAgICAgMHhDMDNBIC8qKjwgV2VhayEgTm8gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQgICAgICAgICAgIDB4QzAzQiAvKio8IFdlYWshIE5vIFNTTDMhICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiAweEMwNzIgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCAweEMwNzMgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2ICAweEMwNzQgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0ICAweEMwNzUgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgICAweEMwNzYgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgICAweEMwNzcgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiAgICAweEMwNzggLyoqPCBOb3QgaW4gU1NMMyEgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCAgICAweEMwNzkgLyoqPCBOb3QgaW4gU1NMMyEgKi8KKworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAgICAgICAgIDB4QzA3QSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAgICAgICAweEMwN0IgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAgICAgMHhDMDdDIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAgIDB4QzA3RCAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAweEMwODYgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgMHhDMDg3IC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgIDB4QzA4OCAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0ICAweEMwODkgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2ICAgMHhDMDhBIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCAgIDB4QzA4QiAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiAgICAweEMwOEMgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAgMHhDMDhEIC8qKjwgVExTIDEuMiAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2ICAgICAgIDB4QzA4RSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAgICAgMHhDMDhGIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgICAweEMwOTAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCAgIDB4QzA5MSAvKio8IFRMUyAxLjIgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2ICAgMHhDMDkyIC8qKjwgVExTIDEuMiAqLworI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgICAweEMwOTMgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgICAgICAgMHhDMDk0CisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0ICAgICAgIDB4QzA5NQorI2RlZmluZSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgICAweEMwOTYKKyNkZWZpbmUgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0ICAgMHhDMDk3CisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiAgIDB4QzA5OAorI2RlZmluZSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgICAweEMwOTkKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgMHhDMDlBIC8qKjwgTm90IGluIFNTTDMhICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IDB4QzA5QiAvKio8IE5vdCBpbiBTU0wzISAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNICAgICAgICAgICAgICAgIDB4QzA5QyAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNICAgICAgICAgICAgICAgIDB4QzA5RCAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTSAgICAgICAgICAgIDB4QzA5RSAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTSAgICAgICAgICAgIDB4QzA5RiAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzggICAgICAgICAgICAgIDB4QzBBMCAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzggICAgICAgICAgICAgIDB4QzBBMSAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTV84ICAgICAgICAgIDB4QzBBMiAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTV84ICAgICAgICAgIDB4QzBBMyAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNICAgICAgICAgICAgICAgIDB4QzBBNCAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNICAgICAgICAgICAgICAgIDB4QzBBNSAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTSAgICAgICAgICAgIDB4QzBBNiAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTSAgICAgICAgICAgIDB4QzBBNyAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzggICAgICAgICAgICAgIDB4QzBBOCAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNXzggICAgICAgICAgICAgIDB4QzBBOSAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84ICAgICAgICAgIDB4QzBBQSAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTV84ICAgICAgICAgIDB4QzBBQiAgLyoqPCBUTFMgMS4yICovCisvKiBUaGUgbGFzdCB0d28gYXJlIG5hbWVkIHdpdGggUFNLX0RIRSBpbiB0aGUgUkZDLCB3aGljaCBsb29rcyBsaWtlIGEgdHlwbyAqLworCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ00gICAgICAgIDB4QzBBQyAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ00gICAgICAgIDB4QzBBRCAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ01fOCAgICAgIDB4QzBBRSAgLyoqPCBUTFMgMS4yICovCisjZGVmaW5lIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ01fOCAgICAgIDB4QzBBRiAgLyoqPCBUTFMgMS4yICovCisKKyNkZWZpbmUgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzggICAgICAgICAgMHhDMEZGICAvKio8IGV4cGVyaW1lbnRhbCAqLworCisvKiBSZW1pbmRlcjogdXBkYXRlIG1iZWR0bHNfc3NsX3ByZW1hc3Rlcl9zZWNyZXQgd2hlbiBhZGRpbmcgYSBuZXcga2V5IGV4Y2hhbmdlLgorICogUmVtaW5kZXI6IHVwZGF0ZSBNQkVEVExTX0tFWV9FWENIQU5HRV9feHh4IGJlbG93CisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfTk9ORSA9IDAsCisgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSwKK30gbWJlZHRsc19rZXlfZXhjaGFuZ2VfdHlwZV90OworCisvKiBLZXkgZXhjaGFuZ2VzIHVzaW5nIGEgY2VydGlmaWNhdGUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKSAgICAgICAgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSAgICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKSAgICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSAgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRAorI2VuZGlmCisKKy8qIEtleSBleGNoYW5nZXMgdXNpbmcgYSBQU0sgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKSAgICAgICAgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKSAgICAgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpICAgICAgIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorI2RlZmluZSBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQKKyNlbmRpZgorCisvKiBLZXkgZXhjaGFuZ2VzIHVzaW5nIGEgRUNESEUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSAgICAgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkgICB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCkKKyNkZWZpbmUgTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX0VDREhFX0VOQUJMRUQKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3Q7CisKKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLICAgICAgIDB4MDEgICAgLyoqPCBXZWFrIGNpcGhlcnN1aXRlIGZsYWcgICovCisjZGVmaW5lIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHICAweDAyICAgIC8qKjwgU2hvcnQgYXV0aGVudGljYXRpb24gdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZyBmb3IgQ0NNXzggKi8KKyNkZWZpbmUgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgICAgIDB4MDQgICAgLyoqPCBDYW4ndCBiZSB1c2VkIHdpdGggRFRMUyAqLworCisvKioKKyAqIFxicmllZiAgIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHN0b3JpbmcgY2lwaGVyc3VpdGUgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QKK3sKKyAgICBpbnQgaWQ7CisgICAgY29uc3QgY2hhciAqIG5hbWU7CisKKyAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyOworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1hYzsKKyAgICBtYmVkdGxzX2tleV9leGNoYW5nZV90eXBlX3Qga2V5X2V4Y2hhbmdlOworCisgICAgaW50IG1pbl9tYWpvcl92ZXI7CisgICAgaW50IG1pbl9taW5vcl92ZXI7CisgICAgaW50IG1heF9tYWpvcl92ZXI7CisgICAgaW50IG1heF9taW5vcl92ZXI7CisKKyAgICB1bnNpZ25lZCBjaGFyIGZsYWdzOworfTsKKworY29uc3QgaW50ICptYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcyggdm9pZCApOworCitjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICptYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZyggY29uc3QgY2hhciAqY2lwaGVyc3VpdGVfbmFtZSApOworY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggaW50IGNpcGhlcnN1aXRlX2lkICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykKK21iZWR0bHNfcGtfdHlwZV90IG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9zaWdfcGtfYWxnKCBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICppbmZvICk7CisjZW5kaWYKKworaW50IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfZWMoIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmluZm8gKTsKK2ludCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV91c2VzX3BzayggY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqaW5mbyApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogc3NsX2NpcGhlcnN1aXRlcy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9jb29raWUuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2Nvb2tpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzN2UxYzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9jb29raWUuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqCisgKiBcZmlsZSBzc2xfY29va2llLmgKKyAqCisgKiBcYnJpZWYgRFRMUyBjb29raWUgY2FsbGJhY2tzIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfU1NMX0NPT0tJRV9ICisjZGVmaW5lIE1CRURUTFNfU1NMX0NPT0tJRV9ICisKKyNpbmNsdWRlICJzc2wuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJ0aHJlYWRpbmcuaCIKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFNFQ1RJT046IE1vZHVsZSBzZXR0aW5ncworICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGNhbiBzZXQgZm9yIHRoaXMgbW9kdWxlIGFyZSBpbiB0aGlzIHNlY3Rpb24uCisgKiBFaXRoZXIgY2hhbmdlIHRoZW0gaW4gY29uZmlnLmggb3IgZGVmaW5lIHRoZW0gb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZS4KKyAqIFx7CisgKi8KKyNpZm5kZWYgTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQgICAgIDYwIC8qKjwgRGVmYXVsdCBleHBpcmF0aW9uIGRlbGF5IG9mIERUTFMgY29va2llcywgaW4gc2Vjb25kcyBpZiBIQVZFX1RJTUUsIG9yIGluIG51bWJlciBvZiBjb29raWVzIGlzc3VlZCAqLworI2VuZGlmCisKKy8qIFx9IG5hbWUgU0VDVElPTjogTW9kdWxlIHNldHRpbmdzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ29udGV4dCBmb3IgdGhlIGRlZmF1bHQgY29va2llIGZ1bmN0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCAgICBobWFjX2N0eDsgICAvKiE8IGNvbnRleHQgZm9yIHRoZSBITUFDIHBvcnRpb24gICAqLworI2lmICFkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIHVuc2lnbmVkIGxvbmcgICBzZXJpYWw7ICAgICAvKiE8IHNlcmlhbCBudW1iZXIgZm9yIGV4cGlyYXRpb24gICAqLworI2VuZGlmCisgICAgdW5zaWduZWQgbG9uZyAgIHRpbWVvdXQ7ICAgIC8qITwgdGltZW91dCBkZWxheSwgaW4gc2Vjb25kcyBpZiBIQVZFX1RJTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW4gbnVtYmVyIG9mIHRpY2tldHMgaXNzdWVkICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtdXRleDsKKyNlbmRpZgorfSBtYmVkdGxzX3NzbF9jb29raWVfY3R4OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIGNvb2tpZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29va2llX2luaXQoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXR1cCBjb29raWUgY29udGV4dCAoZ2VuZXJhdGUga2V5cykKKyAqLworaW50IG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXR1cCggbWJlZHRsc19zc2xfY29va2llX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTZXQgZXhwaXJhdGlvbiBkZWxheSBmb3IgY29va2llcworICogICAgICAgICAgICAgICAgIChEZWZhdWx0IE1CRURUTFNfU1NMX0NPT0tJRV9USU1FT1VUKQorICoKKyAqIFxwYXJhbSBjdHggICAgICBDb29raWUgY29udGV4CisgKiBccGFyYW0gZGVsYXkgICAgRGVsYXksIGluIHNlY29uZHMgaWYgSEFWRV9USU1FLCBvciBpbiBudW1iZXIgb2YgY29va2llcworICogICAgICAgICAgICAgICAgIGlzc3VlZCBpbiB0aGUgbWVhbnRpbWUuCisgKiAgICAgICAgICAgICAgICAgMCB0byBkaXNhYmxlIGV4cGlyYXRpb24gKE5PVCByZWNvbW1lbmRlZCkKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb29raWVfc2V0X3RpbWVvdXQoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkZWxheSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBGcmVlIGNvb2tpZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29va2llX2ZyZWUoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHZW5lcmF0ZSBjb29raWUsIHNlZSBcYyBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdAorICovCittYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGU7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFZlcmlmeSBjb29raWUsIHNlZSBcYyBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdAorICovCittYmVkdGxzX3NzbF9jb29raWVfY2hlY2tfdCBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2s7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBzc2xfY29va2llLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX2ludGVybmFsLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OGMwZjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3NzbF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNTAwIEBACisvKioKKyAqIFxmaWxlIHNzbF90aWNrZXQuaAorICoKKyAqIFxicmllZiBJbnRlcm5hbCBmdW5jdGlvbnMgc2hhcmVkIGJ5IHRoZSBTU0wgbW9kdWxlcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1NTTF9JTlRFUk5BTF9ICisjZGVmaW5lIE1CRURUTFNfU1NMX0lOVEVSTkFMX0gKKworI2luY2x1ZGUgInNzbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorI2luY2x1ZGUgIm1kNS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorI2luY2x1ZGUgInNoYTEuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2luY2x1ZGUgInNoYTI1Ni5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjaW5jbHVkZSAic2hhNTEyLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorI2luY2x1ZGUgImVjanBha2UuaCIKKyNlbmRpZgorCisjaWYgKCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfTVNDX1ZFUikgKSAmJiBcCisgICAgIWRlZmluZWQoaW5saW5lKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZW5kaWYKKworLyogRGV0ZXJtaW5lIG1pbmltdW0gc3VwcG9ydGVkIHZlcnNpb24gKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOX01BSk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorI2RlZmluZSBNQkVEVExTX1NTTF9NSU5fTUlOT1JfVkVSU0lPTiAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wCisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMQorI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMgorI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUlOX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgICAqLworCisvKiBEZXRlcm1pbmUgbWF4aW11bSBzdXBwb3J0ZWQgdmVyc2lvbiAqLworI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfTUFKT1JfVkVSU0lPTiAgICAgICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMworI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT04gICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMgorI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEKKyNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAgICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSAgICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgICAgICAgICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyAgIDEgICAvKiBJbiBwcm9ncmVzcyAqLworI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RPTkUgICAgICAgICAgMiAgIC8qIERvbmUgb3IgYWJvcnRlZCAqLworI2RlZmluZSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgICAgICAgMyAgIC8qIFJlcXVlc3RlZCAoc2VydmVyIG9ubHkpICovCisKKy8qCisgKiBEVExTIHJldHJhbnNtaXNzaW9uIHN0YXRlcywgc2VlIFJGQyA2MzQ3IDQuMi40CisgKgorICogVGhlIFNFTkRJTkcgc3RhdGUgaXMgbWVyZ2VkIGluIFBSRVBBUklORyBmb3IgaW5pdGlhbCBzZW5kcywKKyAqIGJ1dCBpcyBkaXN0aW5jdCBmb3IgcmVzZW5kcy4KKyAqCisgKiBOb3RlOiBpbml0aWFsIHN0YXRlIGlzIHdyb25nIGZvciBzZXJ2ZXIsIGJ1dCBpcyBub3QgdXNlZCBhbnl3YXkuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVUUkFOU19QUkVQQVJJTkcgICAgICAgMAorI2RlZmluZSBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfU1NMX1JFVFJBTlNfV0FJVElORyAgICAgICAgIDIKKyNkZWZpbmUgTUJFRFRMU19TU0xfUkVUUkFOU19GSU5JU0hFRCAgICAgICAgMworCisvKgorICogQWxsb3cgZXh0cmEgYnl0ZXMgZm9yIHJlY29yZCwgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24gb3ZlcmhlYWQ6CisgKiBjb3VudGVyICg4KSArIGhlYWRlciAoNSkgKyBJVigxNikgKyBNQUMgKDE2LTQ4KSArIHBhZGRpbmcgKDAtMjU2KQorICogYW5kIGFsbG93IGZvciBhIG1heGltdW0gb2YgMTAyNCBvZiBjb21wcmVzc2lvbiBleHBhbnNpb24gaWYKKyAqIGVuYWJsZWQuCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorI2RlZmluZSBNQkVEVExTX1NTTF9DT01QUkVTU0lPTl9BREQgICAgICAgICAgMTAyNAorI2Vsc2UKKyNkZWZpbmUgTUJFRFRMU19TU0xfQ09NUFJFU1NJT05fQUREICAgICAgICAgICAgIDAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qIENpcGhlcnN1aXRlcyB1c2luZyBITUFDICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorI2RlZmluZSBNQkVEVExTX1NTTF9NQUNfQUREICAgICAgICAgICAgICAgICA0OCAgLyogU0hBLTM4NCB1c2VkIGZvciBITUFDICovCisjZWxpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjZGVmaW5lIE1CRURUTFNfU1NMX01BQ19BREQgICAgICAgICAgICAgICAgIDMyICAvKiBTSEEtMjU2IHVzZWQgZm9yIEhNQUMgKi8KKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfU1NMX01BQ19BREQgICAgICAgICAgICAgICAgIDIwICAvKiBTSEEtMSAgIHVzZWQgZm9yIEhNQUMgKi8KKyNlbmRpZgorI2Vsc2UKKy8qIEFFQUQgY2lwaGVyc3VpdGVzOiBHQ00gYW5kIENDTSB1c2UgYSAxMjggYml0cyB0YWcgKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFDX0FERCAgICAgICAgICAgICAgICAgMTYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNkZWZpbmUgTUJFRFRMU19TU0xfUEFERElOR19BREQgICAgICAgICAgICAyNTYKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfU1NMX1BBRERJTkdfQUREICAgICAgICAgICAgICAwCisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICAoIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICsgTUJFRFRMU19TU0xfQ09NUFJFU1NJT05fQUREICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKyAyOSAvKiBjb3VudGVyICsgaGVhZGVyICsgSVYgKi8gICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKyBNQkVEVExTX1NTTF9NQUNfQUREICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICArIE1CRURUTFNfU1NMX1BBRERJTkdfQUREICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworLyoKKyAqIFRMUyBleHRlbnNpb24gZmxhZ3MgKGZvciBleHRlbnNpb25zIHdpdGggb3V0Z29pbmcgU2VydmVySGVsbG8gY29udGVudAorICogdGhhdCBuZWVkIGl0IChlLmcuIGZvciBSRU5FR09USUFUSU9OX0lORk8gdGhlIHNlcnZlciBhbHJlYWR5IGtub3dzIGJlY2F1c2UKKyAqIG9mIHN0YXRlIG9mIHRoZSByZW5lZ290aWF0aW9uIGZsYWcsIHNvIG5vIGluZGljYXRvciBpcyByZXF1aXJlZCkKKyAqLworI2RlZmluZSBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFNfUFJFU0VOVCAoMSA8PCAwKQorI2RlZmluZSBNQkVEVExTX1RMU19FWFRfRUNKUEFLRV9LS1BQX09LICAgICAgICAgICAgICAgICAoMSA8PCAxKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgcGFyYW1ldGVycyBvbmx5IG5lZWRlZCBkdXJpbmcgaGFuZHNoYWtlLgorICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcworeworICAgIC8qCisgICAgICogSGFuZHNoYWtlIHNwZWNpZmljIGNyeXB0byB2YXJpYWJsZXMKKyAgICAgKi8KKyAgICBpbnQgc2lnX2FsZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBIYXNoIGFsZ29yaXRobSBmb3Igc2lnbmF0dXJlICAgKi8KKyAgICBpbnQgdmVyaWZ5X3NpZ19hbGc7ICAgICAgICAgICAgICAgICAvKiE8ICBTaWduYXR1cmUgYWxnb3JpdGhtIGZvciB2ZXJpZnkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgbWJlZHRsc19kaG1fY29udGV4dCBkaG1fY3R4OyAgICAgICAgICAgICAgICAvKiE8ICBESE0ga2V5IGV4Y2hhbmdlICAgICAgICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKyAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBlY2RoX2N0eDsgICAgICAgICAgICAgIC8qITwgIEVDREgga2V5IGV4Y2hhbmdlICAgICAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBtYmVkdGxzX2VjanBha2VfY29udGV4dCBlY2pwYWtlX2N0eDsgICAgICAgIC8qITwgRUMgSi1QQUtFIGtleSBleGNoYW5nZSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgdW5zaWduZWQgY2hhciAqZWNqcGFrZV9jYWNoZTsgICAgICAgICAgICAgICAvKiE8IENhY2hlIGZvciBDbGllbnRIZWxsbyBleHQgKi8KKyAgICBzaXplX3QgZWNqcGFrZV9jYWNoZV9sZW47ICAgICAgICAgICAgICAgICAgIC8qITwgTGVuZ3RoIG9mIGNhY2hlZCBkYXRhICovCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqKmN1cnZlczsgICAgICAvKiE8ICBTdXBwb3J0ZWQgZWxsaXB0aWMgY3VydmVzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyICpwc2s7ICAgICAgICAgICAgICAgICAvKiE8ICBQU0sgZnJvbSB0aGUgY2FsbGJhY2sgICAgICAgICAqLworICAgIHNpemVfdCBwc2tfbGVuOyAgICAgICAgICAgICAgICAgICAgIC8qITwgIExlbmd0aCBvZiBQU0sgZnJvbSBjYWxsYmFjayAgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqa2V5X2NlcnQ7ICAgICAvKiE8IGNob3NlbiBrZXkvY2VydCBwYWlyIChzZXJ2ZXIpICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKKyAgICBpbnQgc25pX2F1dGhtb2RlOyAgICAgICAgICAgICAgICAgICAvKiE8IGF1dGhtb2RlIGZyb20gU05JIGNhbGxiYWNrICAgICAqLworICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICpzbmlfa2V5X2NlcnQ7IC8qITwga2V5L2NlcnQgbGlzdCBmcm9tIFNOSSAgICAgICAgICovCisgICAgbWJlZHRsc194NTA5X2NydCAqc25pX2NhX2NoYWluOyAgICAgLyohPCB0cnVzdGVkIENBcyBmcm9tIFNOSSBjYWxsYmFjayAgKi8KKyAgICBtYmVkdGxzX3g1MDlfY3JsICpzbmlfY2FfY3JsOyAgICAgICAvKiE8IHRydXN0ZWQgQ0FzIENSTHMgZnJvbSBTTkkgICAgICAqLworI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIHVuc2lnbmVkIGludCBvdXRfbXNnX3NlcTsgICAgICAgICAgIC8qITwgIE91dGdvaW5nIGhhbmRzaGFrZSBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQgaW5fbXNnX3NlcTsgICAgICAgICAgICAvKiE8ICBJbmNvbWluZyBoYW5kc2hha2Ugc2VxdWVuY2UgbnVtYmVyICovCisKKyAgICB1bnNpZ25lZCBjaGFyICp2ZXJpZnlfY29va2llOyAgICAgICAvKiE8ICBDbGk6IEhlbGxvVmVyaWZ5UmVxdWVzdCBjb29raWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcnY6IHVudXNlZCAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHZlcmlmeV9jb29raWVfbGVuOyAgICAvKiE8ICBDbGk6IGNvb2tpZSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcnY6IGZsYWcgZm9yIHNlbmRpbmcgYSBjb29raWUgKi8KKworICAgIHVuc2lnbmVkIGNoYXIgKmhzX21zZzsgICAgICAgICAgICAgIC8qITwgIFJlYXNzZW1ibGVkIGhhbmRzaGFrZSBtZXNzYWdlICAqLworCisgICAgdWludDMyX3QgcmV0cmFuc21pdF90aW1lb3V0OyAgICAgICAgLyohPCAgQ3VycmVudCB2YWx1ZSBvZiB0aW1lb3V0ICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciByZXRyYW5zbWl0X3N0YXRlOyAgICAgLyohPCAgUmV0cmFuc21pc3Npb24gc3RhdGUgICAgICAgICAgICovCisgICAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKmZsaWdodDsgICAgICAgICAgICAvKiE8ICBDdXJyZW50IG91dGdvaW5nIGZsaWdodCAgICAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbSAqY3VyX21zZzsgICAgICAgICAgIC8qITwgIEN1cnJlbnQgbWVzc2FnZSBpbiBmbGlnaHQgICAgICAqLworICAgIHVuc2lnbmVkIGludCBpbl9mbGlnaHRfc3RhcnRfc2VxOyAgIC8qITwgIE1pbmltdW0gbWVzc2FnZSBzZXF1ZW5jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlnaHQgYmVpbmcgcmVjZWl2ZWQgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKmFsdF90cmFuc2Zvcm1fb3V0OyAgIC8qITwgIEFsdGVybmF0aXZlIHRyYW5zZm9ybSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlbmRpbmcgbWVzc2FnZXMgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGFsdF9vdXRfY3RyWzhdOyAgICAgICAvKiE8ICBBbHRlcm5hdGl2ZSByZWNvcmQgZXBvY2gvY291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZXNlbmRpbmcgbWVzc2FnZXMgICAgICAgICAqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENoZWNrc3VtIGNvbnRleHRzCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICAgICBtYmVkdGxzX21kNV9jb250ZXh0IGZpbl9tZDU7CisgICAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBmaW5fc2hhMTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IGZpbl9zaGEyNTY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgbWJlZHRsc19zaGE1MTJfY29udGV4dCBmaW5fc2hhNTEyOworI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyAgICB2b2lkICgqdXBkYXRlX2NoZWNrc3VtKShtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsKKyAgICB2b2lkICgqY2FsY192ZXJpZnkpKG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqKTsKKyAgICB2b2lkICgqY2FsY19maW5pc2hlZCkobWJlZHRsc19zc2xfY29udGV4dCAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CisgICAgaW50ICAoKnRsc19wcmYpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisKKyAgICBzaXplX3QgcG1zbGVuOyAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBwcmVtYXN0ZXIgbGVuZ3RoICAgICAgICAqLworCisgICAgdW5zaWduZWQgY2hhciByYW5kYnl0ZXNbNjRdOyAgICAgICAgLyohPCAgcmFuZG9tIGJ5dGVzICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHByZW1hc3RlcltNQkVEVExTX1BSRU1BU1RFUl9TSVpFXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBwcmVtYXN0ZXIgc2VjcmV0ICAgICAgICAqLworCisgICAgaW50IHJlc3VtZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCAgc2Vzc2lvbiByZXN1bWUgaW5kaWNhdG9yKi8KKyAgICBpbnQgbWF4X21ham9yX3ZlcjsgICAgICAgICAgICAgICAgICAvKiE8IG1heC4gbWFqb3IgdmVyc2lvbiBjbGllbnQqLworICAgIGludCBtYXhfbWlub3JfdmVyOyAgICAgICAgICAgICAgICAgIC8qITwgbWF4LiBtaW5vciB2ZXJzaW9uIGNsaWVudCovCisgICAgaW50IGNsaV9leHRzOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBjbGllbnQgZXh0ZW5zaW9uIHByZXNlbmNlKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgIGludCBuZXdfc2Vzc2lvbl90aWNrZXQ7ICAgICAgICAgICAgIC8qITwgdXNlIE5ld1Nlc3Npb25UaWNrZXQ/ICAgICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgIGludCBleHRlbmRlZF9tczsgICAgICAgICAgICAgICAgICAgIC8qITwgdXNlIEV4dGVuZGVkIE1hc3RlciBTZWNyZXQ/ICovCisjZW5kaWYKK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhIGZ1bGwgc2V0IG9mIHJ1bnRpbWUgdHJhbnNmb3JtIHBhcmFtZXRlcnMKKyAqIGVpdGhlciBpbiBuZWdvdGlhdGlvbiBvciBhY3RpdmUuCisgKi8KK3N0cnVjdCBtYmVkdGxzX3NzbF90cmFuc2Zvcm0KK3sKKyAgICAvKgorICAgICAqIFNlc3Npb24gc3BlY2lmaWMgY3J5cHRvIGxheWVyCisgICAgICovCisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBDaG9zZW4gY2lwZXJzdWl0ZV9pbmZvICAqLworICAgIHVuc2lnbmVkIGludCBrZXlsZW47ICAgICAgICAgICAgICAgIC8qITwgIHN5bW1ldHJpYyBrZXkgbGVuZ3RoIChieXRlcykgICovCisgICAgc2l6ZV90IG1pbmxlbjsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgbWluLiBjaXBoZXJ0ZXh0IGxlbmd0aCAgKi8KKyAgICBzaXplX3QgaXZsZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiE8ICBJViBsZW5ndGggICAgICAgICAgICAgICAqLworICAgIHNpemVfdCBmaXhlZF9pdmxlbjsgICAgICAgICAgICAgICAgIC8qITwgIEZpeGVkIHBhcnQgb2YgSVYgKEFFQUQpICovCisgICAgc2l6ZV90IG1hY2xlbjsgICAgICAgICAgICAgICAgICAgICAgLyohPCAgTUFDIGxlbmd0aCAgICAgICAgICAgICAgKi8KKworICAgIHVuc2lnbmVkIGNoYXIgaXZfZW5jWzE2XTsgICAgICAgICAgIC8qITwgIElWIChlbmNyeXB0aW9uKSAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBpdl9kZWNbMTZdOyAgICAgICAgICAgLyohPCAgSVYgKGRlY3J5cHRpb24pICAgICAgICAgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAvKiBOZWVkZWQgb25seSBmb3IgU1NMIHYzLjAgc2VjcmV0ICovCisgICAgdW5zaWduZWQgY2hhciBtYWNfZW5jWzIwXTsgICAgICAgICAgLyohPCAgU1NMIHYzLjAgc2VjcmV0IChlbmMpICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1hY19kZWNbMjBdOyAgICAgICAgICAvKiE8ICBTU0wgdjMuMCBzZWNyZXQgKGRlYykgICAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eF9lbmM7ICAgICAgICAgICAgLyohPCAgTUFDIChlbmNyeXB0aW9uKSAgICAgICAgKi8KKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHhfZGVjOyAgICAgICAgICAgIC8qITwgIE1BQyAoZGVjcnlwdGlvbikgICAgICAgICovCisKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY2lwaGVyX2N0eF9lbmM7ICAgIC8qITwgIGVuY3J5cHRpb24gY29udGV4dCAgICAgICovCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNpcGhlcl9jdHhfZGVjOyAgICAvKiE8ICBkZWNyeXB0aW9uIGNvbnRleHQgICAgICAqLworCisgICAgLyoKKyAgICAgKiBTZXNzaW9uIHNwZWNpZmljIGNvbXByZXNzaW9uIGxheWVyCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICB6X3N0cmVhbSBjdHhfZGVmbGF0ZTsgICAgICAgICAgICAgICAvKiE8ICBjb21wcmVzc2lvbiBjb250ZXh0ICAgICAqLworICAgIHpfc3RyZWFtIGN0eF9pbmZsYXRlOyAgICAgICAgICAgICAgIC8qITwgIGRlY29tcHJlc3Npb24gY29udGV4dCAgICovCisjZW5kaWYKK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKy8qCisgKiBMaXN0IG9mIGNlcnRpZmljYXRlICsgcHJpdmF0ZSBrZXkgcGFpcnMKKyAqLworc3RydWN0IG1iZWR0bHNfc3NsX2tleV9jZXJ0Cit7CisgICAgbWJlZHRsc194NTA5X2NydCAqY2VydDsgICAgICAgICAgICAgICAgIC8qITwgY2VydCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgKmtleTsgICAgICAgICAgICAgICAgLyohPCBwcml2YXRlIGtleSAgICAgICAgICAgICAgICAqLworICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICpuZXh0OyAgICAgICAgICAgICAvKiE8IG5leHQga2V5L2NlcnQgcGFpciAgICAgICAgICovCit9OworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorLyoKKyAqIExpc3Qgb2YgaGFuZHNoYWtlIG1lc3NhZ2VzIGtlcHQgYXJvdW5kIGZvciByZXNlbmRpbmcKKyAqLworc3RydWN0IG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtCit7CisgICAgdW5zaWduZWQgY2hhciAqcDsgICAgICAgLyohPCBtZXNzYWdlLCBpbmNsdWRpbmcgaGFuZHNoYWtlIGhlYWRlcnMgICAqLworICAgIHNpemVfdCBsZW47ICAgICAgICAgICAgIC8qITwgbGVuZ3RoIG9mIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHR5cGU7ICAgICAvKiE8IHR5cGUgb2YgdGhlIG1lc3NhZ2U6IGhhbmRzaGFrZSBvciBDQ1MgICovCisgICAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKm5leHQ7ICAvKiE8IG5leHQgaGFuZHNoYWtlIG1lc3NhZ2UocykgICAgICAgICAgICAgICovCit9OworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgRnJlZSByZWZlcmVuY2VkIGl0ZW1zIGluIGFuIFNTTCB0cmFuc2Zvcm0gY29udGV4dCBhbmQgY2xlYXIKKyAqICAgICAgICAgICAgICAgICAgbWVtb3J5CisgKgorICogXHBhcmFtIHRyYW5zZm9ybSBTU0wgdHJhbnNmb3JtIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF90cmFuc2Zvcm1fZnJlZSggbWJlZHRsc19zc2xfdHJhbnNmb3JtICp0cmFuc2Zvcm0gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgcmVmZXJlbmNlZCBpdGVtcyBpbiBhbiBTU0wgaGFuZHNoYWtlIGNvbnRleHQgYW5kIGNsZWFyCisgKiAgICAgICAgICAgICAgICAgIG1lbW9yeQorICoKKyAqIFxwYXJhbSBoYW5kc2hha2UgU1NMIGhhbmRzaGFrZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2ZyZWUoIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMgKmhhbmRzaGFrZSApOworCitpbnQgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2NsaWVudF9zdGVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK2ludCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc2VydmVyX3N0ZXAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOwordm9pZCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfd3JhcHVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworaW50IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCit2b2lkIG1iZWR0bHNfc3NsX3Jlc2V0X2NoZWNrc3VtKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK2ludCBtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKK2ludCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZF9sYXllciggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfaGFuZGxlX21lc3NhZ2VfdHlwZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfcHJlcGFyZV9oYW5kc2hha2VfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK3ZvaWQgbWJlZHRsc19zc2xfdXBkYXRlX2hhbmRzaGFrZV9zdGF0dXMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCitpbnQgbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX2ZldGNoX2lucHV0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHNpemVfdCBuYl93YW50ICk7CisKK2ludCBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CisKK2ludCBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfd3JpdGVfY2VydGlmaWNhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCitpbnQgbWJlZHRsc19zc2xfcGFyc2VfY2hhbmdlX2NpcGhlcl9zcGVjKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKK2ludCBtYmVkdGxzX3NzbF93cml0ZV9jaGFuZ2VfY2lwaGVyX3NwZWMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCitpbnQgbWJlZHRsc19zc2xfcGFyc2VfZmluaXNoZWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworaW50IG1iZWR0bHNfc3NsX3dyaXRlX2ZpbmlzaGVkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKwordm9pZCBtYmVkdGxzX3NzbF9vcHRpbWl6ZV9jaGVja3N1bSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQoraW50IG1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIG1iZWR0bHNfa2V5X2V4Y2hhbmdlX3R5cGVfdCBrZXlfZXggKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpCit1bnNpZ25lZCBjaGFyIG1iZWR0bHNfc3NsX3NpZ19mcm9tX3BrKCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrICk7CittYmVkdGxzX3BrX3R5cGVfdCBtYmVkdGxzX3NzbF9wa19hbGdfZnJvbV9zaWcoIHVuc2lnbmVkIGNoYXIgc2lnICk7CisjZW5kaWYKKworbWJlZHRsc19tZF90eXBlX3QgbWJlZHRsc19zc2xfbWRfYWxnX2Zyb21faGFzaCggdW5zaWduZWQgY2hhciBoYXNoICk7Cit1bnNpZ25lZCBjaGFyIG1iZWR0bHNfc3NsX2hhc2hfZnJvbV9tZF9hbGcoIGludCBtZCApOworaW50IG1iZWR0bHNfc3NsX3NldF9jYWxjX3ZlcmlmeV9tZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbWQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKK2ludCBtYmVkdGxzX3NzbF9jaGVja19jdXJ2ZSggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQoraW50IG1iZWR0bHNfc3NsX2NoZWNrX3NpZ19oYXNoKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorc3RhdGljIGlubGluZSBtYmVkdGxzX3BrX2NvbnRleHQgKm1iZWR0bHNfc3NsX293bl9rZXkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmtleV9jZXJ0OworCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlICE9IE5VTEwgJiYgc3NsLT5oYW5kc2hha2UtPmtleV9jZXJ0ICE9IE5VTEwgKQorICAgICAgICBrZXlfY2VydCA9IHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydDsKKyAgICBlbHNlCisgICAgICAgIGtleV9jZXJ0ID0gc3NsLT5jb25mLT5rZXlfY2VydDsKKworICAgIHJldHVybigga2V5X2NlcnQgPT0gTlVMTCA/IE5VTEwgOiBrZXlfY2VydC0+a2V5ICk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbWJlZHRsc194NTA5X2NydCAqbWJlZHRsc19zc2xfb3duX2NlcnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmtleV9jZXJ0OworCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlICE9IE5VTEwgJiYgc3NsLT5oYW5kc2hha2UtPmtleV9jZXJ0ICE9IE5VTEwgKQorICAgICAgICBrZXlfY2VydCA9IHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydDsKKyAgICBlbHNlCisgICAgICAgIGtleV9jZXJ0ID0gc3NsLT5jb25mLT5rZXlfY2VydDsKKworICAgIHJldHVybigga2V5X2NlcnQgPT0gTlVMTCA/IE5VTEwgOiBrZXlfY2VydC0+Y2VydCApOworfQorCisvKgorICogQ2hlY2sgdXNhZ2Ugb2YgYSBjZXJ0aWZpY2F0ZSB3cnQgZXh0ZW5zaW9uczoKKyAqIGtleVVzYWdlLCBleHRlbmRlZEtleVVzYWdlIChsYXRlciksIGFuZCBuU0NlcnRUeXBlIChsYXRlcikuCisgKgorICogV2FybmluZzogY2VydF9lbmRwb2ludCBpcyB0aGUgZW5kcG9pbnQgb2YgdGhlIGNlcnQgKGllLCBvZiBvdXIgcGVlciB3aGVuIHdlCisgKiBjaGVjayBhIGNlcnQgd2UgcmVjZWl2ZWQgZnJvbSB0aGVtKSEKKyAqCisgKiBSZXR1cm4gMCBpZiBldmVyeXRoaW5nIGlzIE9LLCAtMSBpZiBub3QuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jaGVja19jZXJ0X3VzYWdlKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRfZW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmbGFncyApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCit2b2lkIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIGludCBtYWpvciwgaW50IG1pbm9yLCBpbnQgdHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB2ZXJbMl0gKTsKK3ZvaWQgbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uKCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yLCBpbnQgdHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHZlclsyXSApOworCitzdGF0aWMgaW5saW5lIHNpemVfdCBtYmVkdGxzX3NzbF9oZHJfbGVuKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgcmV0dXJuKCAxMyApOworI2Vsc2UKKyAgICAoKHZvaWQpIHNzbCk7CisjZW5kaWYKKyAgICByZXR1cm4oIDUgKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIHJldHVybiggMTIgKTsKKyNlbHNlCisgICAgKCh2b2lkKSBzc2wpOworI2VuZGlmCisgICAgcmV0dXJuKCA0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCit2b2lkIG1iZWR0bHNfc3NsX3NlbmRfZmxpZ2h0X2NvbXBsZXRlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7Cit2b2lkIG1iZWR0bHNfc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICk7CitpbnQgbWJlZHRsc19zc2xfcmVzZW5kKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKyNlbmRpZgorCisvKiBWaXNpYmxlIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCitpbnQgbWJlZHRsc19zc2xfZHRsc19yZXBsYXlfY2hlY2soIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOwordm9pZCBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworI2VuZGlmCisKKy8qIGNvbnN0YW50LXRpbWUgYnVmZmVyIGNvbXBhcmlzb24gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IG4gKQoreworICAgIHNpemVfdCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKkEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBhOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKkIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBiOworICAgIHVuc2lnbmVkIGNoYXIgZGlmZiA9IDA7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbjsgaSsrICkKKyAgICAgICAgZGlmZiB8PSBBW2ldIF4gQltpXTsKKworICAgIHJldHVybiggZGlmZiApOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogc3NsX2ludGVybmFsLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX3RpY2tldC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy9zc2xfdGlja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2YmM2MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvc3NsX3RpY2tldC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKioKKyAqIFxmaWxlIHNzbF90aWNrZXQuaAorICoKKyAqIFxicmllZiBUTFMgc2VydmVyIHRpY2tldCBjYWxsYmFja3MgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19TU0xfVElDS0VUX0gKKyNkZWZpbmUgTUJFRFRMU19TU0xfVElDS0VUX0gKKworLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlc3Npb24gdGlja2V0IGNhbGxiYWNrcyBpbmNsdWRlcyBrZXkKKyAqIG1hbmFnZW1lbnQsIHJvdGF0aW5nIHRoZSBrZXlzIHBlcmlvZGljYWxseSBpbiBvcmRlciB0byBwcmVzZXJ2ZSBmb3J3YXJkCisgKiBzZWNyZWN5LCB3aGVuIE1CRURUTFNfSEFWRV9USU1FIGlzIGRlZmluZWQuCisgKi8KKworI2luY2x1ZGUgInNzbC5oIgorI2luY2x1ZGUgImNpcGhlci5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorI2luY2x1ZGUgInRocmVhZGluZy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICBJbmZvcm1hdGlvbiBmb3Igc2Vzc2lvbiB0aWNrZXQgcHJvdGVjdGlvbgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVuc2lnbmVkIGNoYXIgbmFtZVs0XTsgICAgICAgICAgLyohPCByYW5kb20ga2V5IGlkZW50aWZpZXIgICAgICAgICAgICAgICovCisgICAgdWludDMyX3QgZ2VuZXJhdGlvbl90aW1lOyAgICAgICAvKiE8IGtleSBnZW5lcmF0aW9uIHRpbWVzdGFtcCAoc2Vjb25kcykgKi8KKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OyAgIC8qITwgY29udGV4dCBmb3IgYXV0aCBlbmMvZGVjcnlwdGlvbiAgICAqLworfQorbWJlZHRsc19zc2xfdGlja2V0X2tleTsKKworLyoqCisgKiBcYnJpZWYgICBDb250ZXh0IGZvciBzZXNzaW9uIHRpY2tldCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX3NzbF90aWNrZXRfa2V5IGtleXNbMl07IC8qITwgdGlja2V0IHByb3RlY3Rpb24ga2V5cyAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgYWN0aXZlOyAgICAgICAgICAgLyohPCBpbmRleCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBrZXkgICovCisKKyAgICB1aW50MzJfdCB0aWNrZXRfbGlmZXRpbWU7ICAgICAgIC8qITwgbGlmZXRpbWUgb2YgdGlja2V0cyBpbiBzZWNvbmRzICAgICAqLworCisgICAgLyoqIENhbGxiYWNrIGZvciBnZXR0aW5nIChwc2V1ZG8tKXJhbmRvbSBudW1iZXJzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpOworICAgIHZvaWQgKnBfcm5nOyAgICAgICAgICAgICAgICAgICAgLyohPCBjb250ZXh0IGZvciB0aGUgUk5HIGZ1bmN0aW9uICAgICAgICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtdXRleDsKKyNlbmRpZgorfQorbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBJbml0aWFsaXplIGEgdGlja2V0IGNvbnRleHQuCisgKiAgICAgICAgICAgICAgICAgIChKdXN0IG1ha2UgaXQgcmVhZHkgZm9yIG1iZWR0bHNfc3NsX3RpY2tldF9zZXR1cCgpCisgKiAgICAgICAgICAgICAgICAgIG9yIG1iZWR0bHNfc3NsX3RpY2tldF9mcmVlKCkuKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBiZSBpbml0aWFsaXplZAorICovCit2b2lkIG1iZWR0bHNfc3NsX3RpY2tldF9pbml0KCBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBQcmVwYXJlIGNvbnRleHQgdG8gYmUgYWN0dWFsbHkgdXNlZAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ29udGV4dCB0byBiZSBzZXQgdXAKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBjYWxsYmFjayBjb250ZXh0CisgKiBccGFyYW0gY2lwaGVyICAgIEFFQUQgY2lwaGVyIHRvIHVzZSBmb3IgdGlja2V0IHByb3RlY3Rpb24uCisgKiAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIHZhbHVlOiBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTS4KKyAqIFxwYXJhbSBsaWZldGltZSAgVGlja2V0cyBsaWZldGltZSBpbiBzZWNvbmRzCisgKiAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIHZhbHVlOiA4NjQwMCAob25lIGRheSkuCisgKgorICogXG5vdGUgICAgICAgICAgICBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2VsZWN0IGEgY2lwaGVyIHRoYXQgaXMgYXQKKyAqICAgICAgICAgICAgICAgICAgbGVhc3QgYXMgc3Ryb25nIGFzIHRoZSB0aGUgc3Ryb25nZXN0IGNpcGhlcnN1aXRlCisgKiAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZC4gVXN1YWxseSB0aGF0IG1lYW5zIGEgMjU2LWJpdCBrZXkuCisgKgorICogXG5vdGUgICAgICAgICAgICBUaGUgbGlmZXRpbWUgb2YgdGhlIGtleXMgaXMgdHdpY2UgdGhlIGxpZmV0aW1lIG9mIHRpY2tldHMuCisgKiAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHBpY2sgYSByZWFzb25uYWJsZSBsaWZldGltZSBzbyBhcyBub3QKKyAqICAgICAgICAgICAgICAgICAgdG8gbmVnYXRlIHRoZSBiZW5lZml0cyBvZiBmb3J3YXJkIHNlY3JlY3kuCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsCisgKiAgICAgICAgICAgICAgICAgIG9yIGEgc3BlY2lmaWMgTUJFRFRMU19FUlJfWFhYIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfc3NsX3RpY2tldF9zZXR1cCggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCwKKyAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nLAorICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXIsCisgICAgdWludDMyX3QgbGlmZXRpbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIHRoZSB0aWNrZXQgd3JpdGUgY2FsbGJhY2sKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIFNlZSBcYyBtYmVkbHRzX3NzbF90aWNrZXRfd3JpdGVfdCBmb3IgZGVzY3JpcHRpb24KKyAqLworbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlX3QgbWJlZHRsc19zc2xfdGlja2V0X3dyaXRlOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgdGhlIHRpY2tldCBwYXJzZSBjYWxsYmFjaworICoKKyAqIFxub3RlICAgICAgICAgICAgU2VlIFxjIG1iZWRsdHNfc3NsX3RpY2tldF9wYXJzZV90IGZvciBkZXNjcmlwdGlvbgorICovCittYmVkdGxzX3NzbF90aWNrZXRfcGFyc2VfdCBtYmVkdGxzX3NzbF90aWNrZXRfcGFyc2U7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIGEgY29udGV4dCdzIGNvbnRlbnQgYW5kIHplcm9pemUgaXQuCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDb250ZXh0IHRvIGJlIGNsZWFuZWQgdXAKKyAqLwordm9pZCBtYmVkdGxzX3NzbF90aWNrZXRfZnJlZSggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCApOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogc3NsX3RpY2tldC5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3RocmVhZGluZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy90aHJlYWRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGMzNGVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy90aHJlYWRpbmcuaApAQCAtMCwwICsxLDEwNiBAQAorLyoqCisgKiBcZmlsZSB0aHJlYWRpbmcuaAorICoKKyAqIFxicmllZiBUaHJlYWRpbmcgYWJzdHJhY3Rpb24gbGF5ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19USFJFQURJTkdfSAorI2RlZmluZSBNQkVEVExTX1RIUkVBRElOR19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBNQkVEVExTX0VSUl9USFJFQURJTkdfRkVBVFVSRV9VTkFWQUlMQUJMRSAgICAgICAgIC0weDAwMUEgIC8qKjwgVGhlIHNlbGVjdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfVEhSRUFESU5HX0JBRF9JTlBVVF9EQVRBICAgICAgICAgICAgICAtMHgwMDFDICAvKio8IEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgICAgICAgICAgICAgICAgIC0weDAwMUUgIC8qKjwgTG9ja2luZyAvIHVubG9ja2luZyAvIGZyZWUgZmFpbGVkIHdpdGggZXJyb3IgY29kZS4gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCkKKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cit0eXBlZGVmIHN0cnVjdAoreworICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKKyAgICBjaGFyIGlzX3ZhbGlkOworfSBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0FMVCkKKy8qIFlvdSBzaG91bGQgZGVmaW5lIHRoZSBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90IHR5cGUgaW4geW91ciBoZWFkZXIgKi8KKyNpbmNsdWRlICJ0aHJlYWRpbmdfYWx0LmgiCisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgeW91ciBhbHRlcm5hdGUgdGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgIHBvaW50ZXJzIGFuZCBpbml0aWFsaXplIGdsb2JhbCBtdXRleGVzLiBJZiB1c2VkLCB0aGlzCisgKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9uY2UgaW4gdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBhbnkKKyAqICAgICAgICAgICAgICAgICAgb3RoZXIgbWJlZCBUTFMgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQKKyAqICAgICAgICAgICAgICAgICAgbWJlZHRsc190aHJlYWRpbmdfZnJlZV9hbHQoKSBtdXN0IGJlIGNhbGxlZCBvbmNlIGluIHRoZSBtYWluCisgKiAgICAgICAgICAgICAgICAgIHRocmVhZCBhZnRlciBhbGwgb3RoZXIgbWJlZCBUTFMgZnVuY3Rpb25zLgorICoKKyAqIFxub3RlICAgICAgICAgICAgbXV0ZXhfaW5pdCgpIGFuZCBtdXRleF9mcmVlKCkgZG9uJ3QgcmV0dXJuIGEgc3RhdHVzIGNvZGUuCisgKiAgICAgICAgICAgICAgICAgIElmIG11dGV4X2luaXQoKSBmYWlscywgaXQgc2hvdWxkIGxlYXZlIGl0cyBhcmd1bWVudCAodGhlCisgKiAgICAgICAgICAgICAgICAgIG11dGV4KSBpbiBhIHN0YXRlIHN1Y2ggdGhhdCBtdXRleF9sb2NrKCkgd2lsbCBmYWlsIHdoZW4KKyAqICAgICAgICAgICAgICAgICAgY2FsbGVkIHdpdGggdGhpcyBhcmd1bWVudC4KKyAqCisgKiBccGFyYW0gbXV0ZXhfaW5pdCAgICB0aGUgaW5pdCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbgorICogXHBhcmFtIG11dGV4X2ZyZWUgICAgdGhlIGZyZWUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24KKyAqIFxwYXJhbSBtdXRleF9sb2NrICAgIHRoZSBsb2NrIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKiBccGFyYW0gbXV0ZXhfdW5sb2NrICB0aGUgdW5sb2NrIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uCisgKi8KK3ZvaWQgbWJlZHRsc190aHJlYWRpbmdfc2V0X2FsdCggdm9pZCAoKm11dGV4X2luaXQpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKm11dGV4X2ZyZWUpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqbXV0ZXhfbG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKiApLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCptdXRleF91bmxvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgICAgIEZyZWUgZ2xvYmFsIG11dGV4ZXMuCisgKi8KK3ZvaWQgbWJlZHRsc190aHJlYWRpbmdfZnJlZV9hbHQoIHZvaWQgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKy8qCisgKiBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIG11dGV4X2luaXQsIG11dGV4X2ZyZWUsIG11dGV4XyBhbmQgbXV0ZXhfdW5sb2NrCisgKgorICogQWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gd29yayBvciB0aGUgcmVzdWx0IHdpbGwgYmUgdW5kZWZpbmVkLgorICovCitleHRlcm4gdm9pZCAoKm1iZWR0bHNfbXV0ZXhfaW5pdCkoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICk7CitleHRlcm4gdm9pZCAoKm1iZWR0bHNfbXV0ZXhfZnJlZSkoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICk7CitleHRlcm4gaW50ICgqbWJlZHRsc19tdXRleF9sb2NrKSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqbXV0ZXggKTsKK2V4dGVybiBpbnQgKCptYmVkdGxzX211dGV4X3VubG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICk7CisKKy8qCisgKiBHbG9iYWwgbXV0ZXhlcworICovCitleHRlcm4gbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBtYmVkdGxzX3RocmVhZGluZ19yZWFkZGlyX211dGV4OworZXh0ZXJuIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbWJlZHRsc190aHJlYWRpbmdfZ210aW1lX211dGV4OworI2VuZGlmIC8qIE1CRURUTFNfVEhSRUFESU5HX0MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHRocmVhZGluZy5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3RpbWluZy5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy90aW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTdhNzEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy90aW1pbmcuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqCisgKiBcZmlsZSB0aW1pbmcuaAorICoKKyAqIFxicmllZiBQb3J0YWJsZSBpbnRlcmZhY2UgdG8gdGhlIENQVSBjeWNsZSBjb3VudGVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfVElNSU5HX0gKKyNkZWZpbmUgTUJFRFRMU19USU1JTkdfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0FMVCkKKy8vIFJlZ3VsYXIgaW1wbGVtZW50YXRpb24KKy8vCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICB0aW1lciBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IG1iZWR0bHNfdGltaW5nX2hyX3RpbWUKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG9wYXF1ZVszMl07Cit9OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDb250ZXh0IGZvciBtYmVkdGxzX3RpbWluZ19zZXQvZ2V0X2RlbGF5KCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBzdHJ1Y3QgbWJlZHRsc190aW1pbmdfaHJfdGltZSAgIHRpbWVyOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgaW50X21zOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgZmluX21zOworfSBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0OworCitleHRlcm4gdm9sYXRpbGUgaW50IG1iZWR0bHNfdGltaW5nX2FsYXJtZWQ7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgQ1BVIGN5Y2xlIGNvdW50ZXIgdmFsdWUKKyAqCisgKiBcd2FybmluZyAgICAgICAgVGhpcyBpcyBvbmx5IGEgYmVzdCBlZmZvcnQhIERvIG5vdCByZWx5IG9uIHRoaXMhCisgKiAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgaXQgaXMga25vd24gdG8gYmUgdW5yZWxpYWJsZSBvbiB2aXJ0dWFsCisgKiAgICAgICAgICAgICAgICAgbWFjaGluZXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCB2b2lkICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybiB0aGUgZWxhcHNlZCB0aW1lIGluIG1pbGxpc2Vjb25kcworICoKKyAqIFxwYXJhbSB2YWwgICAgICBwb2ludHMgdG8gYSB0aW1lciBzdHJ1Y3R1cmUKKyAqIFxwYXJhbSByZXNldCAgICBpZiBzZXQgdG8gMSwgdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAorICovCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2dldF90aW1lciggc3RydWN0IG1iZWR0bHNfdGltaW5nX2hyX3RpbWUgKnZhbCwgaW50IHJlc2V0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFNldHVwIGFuIGFsYXJtIGNsb2NrCisgKgorICogXHBhcmFtIHNlY29uZHMgIGRlbGF5IGJlZm9yZSB0aGUgIm1iZWR0bHNfdGltaW5nX2FsYXJtZWQiIGZsYWcgaXMgc2V0CisgKgorICogXHdhcm5pbmcgICAgICAgIE9ubHkgb25lIGFsYXJtIGF0IGEgdGltZSAgaXMgc3VwcG9ydGVkLiBJbiBhIHRocmVhZGVkCisgKiAgICAgICAgICAgICAgICAgY29udGV4dCwgdGhpcyBtZWFucyBvbmUgZm9yIHRoZSB3aG9sZSBwcm9jZXNzLCBub3Qgb25lIHBlcgorICogICAgICAgICAgICAgICAgIHRocmVhZC4KKyAqLwordm9pZCBtYmVkdGxzX3NldF9hbGFybSggaW50IHNlY29uZHMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgU2V0IGEgcGFpciBvZiBkZWxheXMgdG8gd2F0Y2gKKyAqICAgICAgICAgICAgICAgICAoU2VlIFxjIG1iZWR0bHNfdGltaW5nX2dldF9kZWxheSgpLikKKyAqCisgKiBccGFyYW0gZGF0YSAgICAgUG9pbnRlciB0byB0aW1pbmcgZGF0YQorICogICAgICAgICAgICAgICAgIE11c3QgcG9pbnQgdG8gYSB2YWxpZCBcYyBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0IHN0cnVjdC4KKyAqIFxwYXJhbSBpbnRfbXMgICBGaXJzdCAoaW50ZXJtZWRpYXRlKSBkZWxheSBpbiBtaWxsaXNlY29uZHMuCisgKiBccGFyYW0gZmluX21zICAgU2Vjb25kIChmaW5hbCkgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLgorICogICAgICAgICAgICAgICAgIFBhc3MgMCB0byBjYW5jZWwgdGhlIGN1cnJlbnQgZGVsYXkuCisgKi8KK3ZvaWQgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5KCB2b2lkICpkYXRhLCB1aW50MzJfdCBpbnRfbXMsIHVpbnQzMl90IGZpbl9tcyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBHZXQgdGhlIHN0YXR1cyBvZiBkZWxheXMKKyAqICAgICAgICAgICAgICAgICAoTWVtb3J5IGhlbHBlcjogbnVtYmVyIG9mIGRlbGF5cyBwYXNzZWQuKQorICoKKyAqIFxwYXJhbSBkYXRhICAgICBQb2ludGVyIHRvIHRpbWluZyBkYXRhCisgKiAgICAgICAgICAgICAgICAgTXVzdCBwb2ludCB0byBhIHZhbGlkIFxjIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgc3RydWN0LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAtMSBpZiBjYW5jZWxsZWQgKGZpbl9tcyA9IDApCisgKiAgICAgICAgICAgICAgICAgIDAgaWYgbm9uZSBvZiB0aGUgZGVsYXlzIGFyZSBwYXNzZWQsCisgKiAgICAgICAgICAgICAgICAgIDEgaWYgb25seSB0aGUgaW50ZXJtZWRpYXRlIGRlbGF5IGlzIHBhc3NlZCwKKyAqICAgICAgICAgICAgICAgICAgMiBpZiB0aGUgZmluYWwgZGVsYXkgaXMgcGFzc2VkLgorICovCitpbnQgbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5KCB2b2lkICpkYXRhICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX1RJTUlOR19BTFQgKi8KKyNpbmNsdWRlICJ0aW1pbmdfYWx0LmgiCisjZW5kaWYgLyogTUJFRFRMU19USU1JTkdfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIGEgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfdGltaW5nX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogdGltaW5nLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdmVyc2lvbi5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3MDM0NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMvdmVyc2lvbi5oCkBAIC0wLDAgKzEsMTExIEBACisvKioKKyAqIFxmaWxlIHZlcnNpb24uaAorICoKKyAqIFxicmllZiBSdW4tdGltZSB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogVGhpcyBzZXQgb2YgY29tcGlsZS10aW1lIGRlZmluZXMgYW5kIHJ1bi10aW1lIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCB0bworICogZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbWJlZCBUTFMgbGlicmFyeSB1c2VkLgorICovCisjaWZuZGVmIE1CRURUTFNfVkVSU0lPTl9ICisjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisvKioKKyAqIFRoZSB2ZXJzaW9uIG51bWJlciB4LnkueiBpcyBzcGxpdCBpbnRvIHRocmVlIHBhcnRzLgorICogTWFqb3IsIE1pbm9yLCBQYXRjaGxldmVsCisgKi8KKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX01BSk9SICAyCisjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9NSU5PUiAgNAorI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fUEFUQ0ggIDEKKworLyoqCisgKiBUaGUgc2luZ2xlIHZlcnNpb24gbnVtYmVyIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAqICAgIE1NTk5QUDAwCisgKiAgICBNYWpvciB2ZXJzaW9uIHwgTWlub3IgdmVyc2lvbiB8IFBhdGNoIHZlcnNpb24KKyAqLworI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fTlVNQkVSICAgICAgICAgMHgwMjA0MDEwMAorI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fU1RSSU5HICAgICAgICAgIjIuNC4xIgorI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fU1RSSU5HX0ZVTEwgICAgIm1iZWQgVExTIDIuNC4xIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fQykKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEdldCB0aGUgdmVyc2lvbiBudW1iZXIuCisgKgorICogXHJldHVybiAgICAgICAgICBUaGUgY29uc3RydWN0ZWQgdmVyc2lvbiBudW1iZXIgaW4gdGhlIGZvcm1hdAorICogICAgICAgICAgICAgICAgICBNTU5OUFAwMCAoTWFqb3IsIE1pbm9yLCBQYXRjaCkuCisgKi8KK3Vuc2lnbmVkIGludCBtYmVkdGxzX3ZlcnNpb25fZ2V0X251bWJlciggdm9pZCApOworCisvKioKKyAqIEdldCB0aGUgdmVyc2lvbiBzdHJpbmcgKCJ4LnkueiIpLgorICoKKyAqIFxwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUuCisgKiAgICAgICAgICAgICAgICAgIChTaG91bGQgYmUgYXQgbGVhc3QgOSBieXRlcyBpbiBzaXplKQorICovCit2b2lkIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nKCBjaGFyICpzdHJpbmcgKTsKKworLyoqCisgKiBHZXQgdGhlIGZ1bGwgdmVyc2lvbiBzdHJpbmcgKCJtYmVkIFRMUyB4LnkueiIpLgorICoKKyAqIFxwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUuIFRoZSBtYmVkIFRMUyB2ZXJzaW9uCisgKiAgICAgICAgICAgICAgICAgIHN0cmluZyB3aWxsIHVzZSAxOCBieXRlcyBBVCBNT1NUIGluY2x1ZGluZyBhIHRlcm1pbmF0aW5nCisgKiAgICAgICAgICAgICAgICAgIG51bGwgYnl0ZS4KKyAqICAgICAgICAgICAgICAgICAgKFNvIHRoZSBidWZmZXIgc2hvdWxkIGJlIGF0IGxlYXN0IDE4IGJ5dGVzIHRvIHJlY2VpdmUgdGhpcworICogICAgICAgICAgICAgICAgICB2ZXJzaW9uIHN0cmluZykuCisgKi8KK3ZvaWQgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmdfZnVsbCggY2hhciAqc3RyaW5nICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBDaGVjayBpZiBzdXBwb3J0IGZvciBhIGZlYXR1cmUgd2FzIGNvbXBpbGVkIGludG8gdGhpcworICogICAgICAgICAgICAgICAgICBtYmVkIFRMUyBiaW5hcnkuIFRoaXMgYWxsb3dzIHlvdSB0byBzZWUgYXQgcnVudGltZSBpZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgbGlicmFyeSB3YXMgZm9yIGluc3RhbmNlIGNvbXBpbGVkIHdpdGggb3Igd2l0aG91dAorICogICAgICAgICAgICAgICAgICBNdWx0aS10aHJlYWRpbmcgc3VwcG9ydC4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgIG9ubHkgY2hlY2tzIGFnYWluc3QgZGVmaW5lcyBpbiB0aGUgc2VjdGlvbnMgIlN5c3RlbQorICogICAgICAgICAgICAgICAgICBzdXBwb3J0IiwgIm1iZWQgVExTIG1vZHVsZXMiIGFuZCAibWJlZCBUTFMgZmVhdHVyZQorICogICAgICAgICAgICAgICAgICBzdXBwb3J0IiBpbiBjb25maWcuaAorICoKKyAqIFxwYXJhbSBmZWF0dXJlICAgVGhlIHN0cmluZyBmb3IgdGhlIGRlZmluZSB0byBjaGVjayAoZS5nLiAiTUJFRFRMU19BRVNfQyIpCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQsCisgKiAgICAgICAgICAgICAgICAgIC0xIGlmIHRoZSBmZWF0dXJlIGlzIG5vdCBwcmVzZW50IGFuZAorICogICAgICAgICAgICAgICAgICAtMiBpZiBzdXBwb3J0IGZvciBmZWF0dXJlIGNoZWNraW5nIGFzIGEgd2hvbGUgd2FzIG5vdAorICogICAgICAgICAgICAgICAgICBjb21waWxlZCBpbi4KKyAqLworaW50IG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlKCBjb25zdCBjaGFyICpmZWF0dXJlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBNQkVEVExTX1ZFUlNJT05fQyAqLworCisjZW5kaWYgLyogdmVyc2lvbi5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDkuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGFjMTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDkuaApAQCAtMCwwICsxLDMzMSBAQAorLyoqCisgKiBcZmlsZSB4NTA5LmgKKyAqCisgKiBcYnJpZWYgWC41MDkgZ2VuZXJpYyBkZWZpbmVzIGFuZCBzdHJ1Y3R1cmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisjaWZuZGVmIE1CRURUTFNfWDUwOV9ICisjZGVmaW5lIE1CRURUTFNfWDUwOV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAiYXNuMS5oIgorI2luY2x1ZGUgInBrLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaW5jbHVkZSAicnNhLmgiCisjZW5kaWYKKworLyoqCisgKiBcYWRkdG9ncm91cCB4NTA5X21vZHVsZQorICogXHsKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X01BWF9JTlRFUk1FRElBVEVfQ0EpCisvKioKKyAqIE1heGltdW0gbnVtYmVyIG9mIGludGVybWVkaWF0ZSBDQXMgaW4gYSB2ZXJpZmljYXRpb24gY2hhaW4uCisgKiBUaGF0IGlzLCBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY2hhaW4sIGV4Y2x1ZGluZyB0aGUgZW5kLWVudGl0eSBjZXJ0aWZpY2F0ZQorICogYW5kIHRoZSB0cnVzdGVkIHJvb3QgY2VydGlmaWNhdGUuCisgKgorICogU2V0IHRoaXMgdG8gYSBsb3cgdmFsdWUgdG8gcHJldmVudCBhbiBhZHZlcnNhcnkgZnJvbSBtYWtpbmcgeW91IHdhc3RlCisgKiByZXNvdXJjZXMgdmVyaWZ5aW5nIGFuIG92ZXJsb25nIGNlcnRpZmljYXRlIGNoYWluLgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9NQVhfSU5URVJNRURJQVRFX0NBICAgOAorI2VuZGlmCisKKy8qKgorICogXG5hbWUgWDUwOSBFcnJvciBjb2RlcworICogXHsKKyAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUgICAgICAgICAgICAgIC0weDIwODAgIC8qKjwgVW5hdmFpbGFibGUgZmVhdHVyZSwgZS5nLiBSU0EgaGFzaGluZy9lbmNyeXB0aW9uIGNvbWJpbmF0aW9uLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fT0lEICAgICAgICAgICAgICAgICAgICAgIC0weDIxMDAgIC8qKjwgUmVxdWVzdGVkIE9JRCBpcyB1bmtub3duLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICAgICAgICAgICAgICAgICAgIC0weDIxODAgIC8qKjwgVGhlIENSVC9DUkwvQ1NSIGZvcm1hdCBpcyBpbnZhbGlkLCBlLmcuIGRpZmZlcmVudCB0eXBlIGV4cGVjdGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTiAgICAgICAgICAgICAgICAgIC0weDIyMDAgIC8qKjwgVGhlIENSVC9DUkwvQ1NSIHZlcnNpb24gZWxlbWVudCBpcyBpbnZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0VSSUFMICAgICAgICAgICAgICAgICAgIC0weDIyODAgIC8qKjwgVGhlIHNlcmlhbCB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyAgICAgICAgICAgICAgICAgICAgICAtMHgyMzAwICAvKio8IFRoZSBhbGdvcml0aG0gdGFnIG9yIHZhbHVlIGlzIGludmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICAgICAgICAgICAgICAgICAgICAgLTB4MjM4MCAgLyoqPCBUaGUgbmFtZSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgICAgICAgICAgICAgICAgICAgICAtMHgyNDAwICAvKio8IFRoZSBkYXRlIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFICAgICAgICAgICAgICAgIC0weDI0ODAgIC8qKjwgVGhlIHNpZ25hdHVyZSB0YWcgb3IgdmFsdWUgaW52YWxpZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAtMHgyNTAwICAvKio8IFRoZSBleHRlbnNpb24gdGFnIG9yIHZhbHVlIGlzIGludmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OICAgICAgICAgICAgICAgICAgLTB4MjU4MCAgLyoqPCBDUlQvQ1JML0NTUiBoYXMgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHICAgICAgICAgICAgICAgICAgLTB4MjYwMCAgLyoqPCBTaWduYXR1cmUgYWxnb3JpdGhtIChvaWQpIGlzIHVuc3VwcG9ydGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X1NJR19NSVNNQVRDSCAgICAgICAgICAgICAgICAgICAgIC0weDI2ODAgIC8qKjwgU2lnbmF0dXJlIGFsZ29yaXRobXMgZG8gbm90IG1hdGNoLiAoc2VlIFxjIDo6bWJlZHRsc194NTA5X2NydCBzaWdfb2lkKSAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRCAgICAgICAgICAgICAgIC0weDI3MDAgIC8qKjwgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCwgZS5nLiBDUkwsIENBIG9yIHNpZ25hdHVyZSBjaGVjayBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9VTktOT1dOX0ZPUk1BVCAgICAgICAgICAgICAgLTB4Mjc4MCAgLyoqPCBGb3JtYXQgbm90IHJlY29nbml6ZWQgYXMgREVSIG9yIFBFTS4gKi8KKyNkZWZpbmUgTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSAgICAgICAgICAgICAgICAgICAtMHgyODAwICAvKio8IElucHV0IGludmFsaWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgLTB4Mjg4MCAgLyoqPCBBbGxvY2F0aW9uIG9mIG1lbW9yeSBmYWlsZWQuICovCisjZGVmaW5lIE1CRURUTFNfRVJSX1g1MDlfRklMRV9JT19FUlJPUiAgICAgICAgICAgICAgICAgICAgLTB4MjkwMCAgLyoqPCBSZWFkL3dyaXRlIG9mIGZpbGUgZmFpbGVkLiAqLworI2RlZmluZSBNQkVEVExTX0VSUl9YNTA5X0JVRkZFUl9UT09fU01BTEwgICAgICAgICAgICAgICAgIC0weDI5ODAgIC8qKjwgRGVzdGluYXRpb24gYnVmZmVyIGlzIHRvbyBzbWFsbC4gKi8KKy8qIFx9IG5hbWUgKi8KKworLyoqCisgKiBcbmFtZSBYNTA5IFZlcmlmeSBjb2RlcworICogXHsKKyAqLworLyogUmVtaW5kZXI6IHVwZGF0ZSB4NTA5X2NydF92ZXJpZnlfc3RyaW5nc1tdIGluIGxpYnJhcnkveDUwOV9jcnQuYyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFBJUkVEICAgICAgICAgICAgIDB4MDEgIC8qKjwgVGhlIGNlcnRpZmljYXRlIHZhbGlkaXR5IGhhcyBleHBpcmVkLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEICAgICAgICAgICAgIDB4MDIgIC8qKjwgVGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQgKGlzIG9uIGEgQ1JMKS4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0ggICAgICAgICAweDA0ICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSBDb21tb24gTmFtZSAoQ04pIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGV4cGVjdGVkIENOLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRCAgICAgICAgIDB4MDggIC8qKjwgVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVEICAgICAgICAgIDB4MTAgIC8qKjwgVGhlIENSTCBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQS4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEICAgICAgICAgICAgICAweDIwICAvKio8IFRoZSBDUkwgaXMgZXhwaXJlZC4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfTUlTU0lORyAgICAgICAgICAgICAweDQwICAvKio8IENlcnRpZmljYXRlIHdhcyBtaXNzaW5nLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9TS0lQX1ZFUklGWSAgICAgICAgIDB4ODAgIC8qKjwgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHdhcyBza2lwcGVkLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9PVEhFUiAgICAgICAgICAgICAweDAxMDAgIC8qKjwgT3RoZXIgcmVhc29uIChjYW4gYmUgdXNlZCBieSB2ZXJpZnkgY2FsbGJhY2spICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDRVJUX0ZVVFVSRSAgICAgICAgICAgIDB4MDIwMCAgLyoqPCBUaGUgY2VydGlmaWNhdGUgdmFsaWRpdHkgc3RhcnRzIGluIHRoZSBmdXR1cmUuICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDUkxfRlVUVVJFICAgICAgICAgICAgIDB4MDQwMCAgLyoqPCBUaGUgQ1JMIGlzIGZyb20gdGhlIGZ1dHVyZSAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9LRVlfVVNBR0UgICAgICAgICAweDA4MDAgIC8qKjwgVXNhZ2UgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVVzYWdlIGV4dGVuc2lvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhUX0tFWV9VU0FHRSAgICAgMHgxMDAwICAvKio8IFVzYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBleHRlbmRlZEtleVVzYWdlIGV4dGVuc2lvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfTlNfQ0VSVF9UWVBFICAgICAgMHgyMDAwICAvKio8IFVzYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBuc0NlcnRUeXBlIGV4dGVuc2lvbi4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX01EICAgICAgICAgICAgMHg0MDAwICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUgaGFzaC4gKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX1BLICAgICAgICAgICAgMHg4MDAwICAvKio8IFRoZSBjZXJ0aWZpY2F0ZSBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUgUEsgYWxnIChlZyBSU0EgdnMgRUNEU0EpLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfS0VZICAgICAgICAgMHgwMTAwMDAgIC8qKjwgVGhlIGNlcnRpZmljYXRlIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBrZXkgKGVnIGJhZCBjdXJ2ZSwgUlNBIHRvbyBzaG9ydCkuICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9CQURDUkxfQkFEX01EICAgICAgICAgICAweDAyMDAwMCAgLyoqPCBUaGUgQ1JMIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBoYXNoLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ1JMX0JBRF9QSyAgICAgICAgICAgMHgwNDAwMDAgIC8qKjwgVGhlIENSTCBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUgUEsgYWxnIChlZyBSU0EgdnMgRUNEU0EpLiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfQkFEQ1JMX0JBRF9LRVkgICAgICAgICAgMHgwODAwMDAgIC8qKjwgVGhlIENSTCBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUga2V5IChlZyBiYWQgY3VydmUsIFJTQSB0b28gc2hvcnQpLiAqLworCisvKiBcfSBuYW1lICovCisvKiBcfSBhZGR0b2dyb3VwIHg1MDlfbW9kdWxlICovCisKKy8qCisgKiBYLjUwOSB2MyBLZXkgVXNhZ2UgRXh0ZW5zaW9uIGZsYWdzCisgKiBSZW1pbmRlcjogdXBkYXRlIHg1MDlfaW5mb19rZXlfdXNhZ2UoKSB3aGVuIGFkZGluZyBuZXcgZmxhZ3MuCisgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFICAgICAgICAgICAgKDB4ODApICAvKiBiaXQgMCAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfS1VfTk9OX1JFUFVESUFUSU9OICAgICAgICAgICAgICAoMHg0MCkgIC8qIGJpdCAxICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UICAgICAgICAgICAgICgweDIwKSAgLyogYml0IDIgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0tVX0RBVEFfRU5DSVBIRVJNRU5UICAgICAgICAgICAgKDB4MTApICAvKiBiaXQgMyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfS1VfS0VZX0FHUkVFTUVOVCAgICAgICAgICAgICAgICAoMHgwOCkgIC8qIGJpdCA0ICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOICAgICAgICAgICAgICAgICgweDA0KSAgLyogYml0IDUgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0tVX0NSTF9TSUdOICAgICAgICAgICAgICAgICAgICAgKDB4MDIpICAvKiBiaXQgNiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfS1VfRU5DSVBIRVJfT05MWSAgICAgICAgICAgICAgICAoMHgwMSkgIC8qIGJpdCA3ICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9LVV9ERUNJUEhFUl9PTkxZICAgICAgICAgICAgICAoMHg4MDAwKSAgLyogYml0IDggKi8KKworLyoKKyAqIE5ldHNjYXBlIGNlcnRpZmljYXRlIHR5cGVzCisgKiAoaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9zZWN1cml0eS9wa2kvbnNzL3RlY2gtbm90ZXMvdG4zLmh0bWwpCisgKi8KKworI2RlZmluZSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DTElFTlQgICAgICAgICAoMHg4MCkgIC8qIGJpdCAwICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX1NFUlZFUiAgICAgICAgICgweDQwKSAgLyogYml0IDEgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTCAgICAgICAgICAgICAgKDB4MjApICAvKiBiaXQgMiAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HICAgICAoMHgxMCkgIC8qIGJpdCAzICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfUkVTRVJWRUQgICAgICAgICAgICgweDA4KSAgLyogYml0IDQgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0EgICAgICAgICAgICAgKDB4MDQpICAvKiBiaXQgNSAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX0VNQUlMX0NBICAgICAgICAgICAoMHgwMikgIC8qIGJpdCA2ICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkdfQ0EgICgweDAxKSAgLyogYml0IDcgKi8KKworLyoKKyAqIFguNTA5IGV4dGVuc2lvbiB0eXBlcworICoKKyAqIENvbW1lbnRzIHJlZmVyIHRvIHRoZSBzdGF0dXMgZm9yIHVzaW5nIGNlcnRpZmljYXRlcy4gU3RhdHVzIGNhbiBiZQorICogZGlmZmVyZW50IGZvciB3cml0aW5nIGNlcnRpZmljYXRlcyBvciByZWFkaW5nIENSTHMgb3IgQ1NScy4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUiAgICAoMSA8PCAwKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIgICAgICAoMSA8PCAxKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX0tFWV9VU0FHRSAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX0NFUlRJRklDQVRFX1BPTElDSUVTICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX1BPTElDWV9NQVBQSU5HUyAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfQUxUX05BTUUgICAgICAgICAgICAoMSA8PCA1KSAgICAvKiBTdXBwb3J0ZWQgKEROUykgKi8KKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9JU1NVRVJfQUxUX05BTUUgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUyAgICAgKDEgPDwgNykKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9CQVNJQ19DT05TVFJBSU5UUyAgICAgICAgICAgKDEgPDwgOCkgICAgLyogU3VwcG9ydGVkICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfTkFNRV9DT05TVFJBSU5UUyAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfUE9MSUNZX0NPTlNUUkFJTlRTICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX0VYVEVOREVEX0tFWV9VU0FHRSAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0VYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUyAgICAgKDEgPDwgMTIpCisjZGVmaW5lIE1CRURUTFNfWDUwOV9FWFRfSU5JSElCSVRfQU5ZUE9MSUNZICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX0ZSRVNIRVNUX0NSTCAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKworI2RlZmluZSBNQkVEVExTX1g1MDlfRVhUX05TX0NFUlRfVFlQRSAgICAgICAgICAgICAgICAoMSA8PCAxNikgICAvKiBQYXJzZWQgKGFuZCB0aGVuID8pICovCisKKy8qCisgKiBTdG9yYWdlIGZvcm1hdCBpZGVudGlmaWVycworICogUmVjb2duaXplZCBmb3JtYXRzOiBQRU0gYW5kIERFUgorICovCisjZGVmaW5lIE1CRURUTFNfWDUwOV9GT1JNQVRfREVSICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfWDUwOV9GT1JNQVRfUEVNICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgTUJFRFRMU19YNTA5X01BWF9ETl9OQU1FX1NJWkUgICAgICAgICAyNTYgLyoqPCBNYXhpbXVtIHZhbHVlIHNpemUgb2YgYSBETiBlbnRyeSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUKKyAqIFx7ICovCisKKy8qKgorICogXG5hbWUgU3RydWN0dXJlcyBmb3IgcGFyc2luZyBYLjUwOSBjZXJ0aWZpY2F0ZXMsIENSTHMgYW5kIENTUnMKKyAqIFx7CisgKi8KKworLyoqCisgKiBUeXBlLWxlbmd0aC12YWx1ZSBzdHJ1Y3R1cmUgdGhhdCBhbGxvd3MgZm9yIEFTTjEgdXNpbmcgREVSLgorICovCit0eXBlZGVmIG1iZWR0bHNfYXNuMV9idWYgbWJlZHRsc194NTA5X2J1ZjsKKworLyoqCisgKiBDb250YWluZXIgZm9yIEFTTjEgYml0IHN0cmluZ3MuCisgKi8KK3R5cGVkZWYgbWJlZHRsc19hc24xX2JpdHN0cmluZyBtYmVkdGxzX3g1MDlfYml0c3RyaW5nOworCisvKioKKyAqIENvbnRhaW5lciBmb3IgQVNOMSBuYW1lZCBpbmZvcm1hdGlvbiBvYmplY3RzLgorICogSXQgYWxsb3dzIGZvciBSZWxhdGl2ZSBEaXN0aW5ndWlzaGVkIE5hbWVzIChlLmcuIGNuPWxvY2FsaG9zdCxvdT1jb2RlLGV0Yy4pLgorICovCit0eXBlZGVmIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhIG1iZWR0bHNfeDUwOV9uYW1lOworCisvKioKKyAqIENvbnRhaW5lciBmb3IgYSBzZXF1ZW5jZSBvZiBBU04uMSBpdGVtcworICovCit0eXBlZGVmIG1iZWR0bHNfYXNuMV9zZXF1ZW5jZSBtYmVkdGxzX3g1MDlfc2VxdWVuY2U7CisKKy8qKiBDb250YWluZXIgZm9yIGRhdGUgYW5kIHRpbWUgKHByZWNpc2lvbiBpbiBzZWNvbmRzKS4gKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfeDUwOV90aW1lCit7CisgICAgaW50IHllYXIsIG1vbiwgZGF5OyAgICAgICAgIC8qKjwgRGF0ZS4gKi8KKyAgICBpbnQgaG91ciwgbWluLCBzZWM7ICAgICAgICAgLyoqPCBUaW1lLiAqLworfQorbWJlZHRsc194NTA5X3RpbWU7CisKKy8qKiBcfSBuYW1lIFN0cnVjdHVyZXMgZm9yIHBhcnNpbmcgWC41MDkgY2VydGlmaWNhdGVzLCBDUkxzIGFuZCBDU1JzICovCisvKiogXH0gYWRkdG9ncm91cCB4NTA5X21vZHVsZSAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTdG9yZSB0aGUgY2VydGlmaWNhdGUgRE4gaW4gcHJpbnRhYmxlIGZvcm0gaW50byBidWY7CisgKiAgICAgICAgICAgICAgICAgbm8gbW9yZSB0aGFuIHNpemUgY2hhcmFjdGVycyB3aWxsIGJlIHdyaXR0ZW4uCisgKgorICogXHBhcmFtIGJ1ZiAgICAgIEJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgIE1heGltdW0gc2l6ZSBvZiBidWZmZXIKKyAqIFxwYXJhbSBkbiAgICAgICBUaGUgWDUwOSBuYW1lIHRvIHJlcHJlc2VudAorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd3JpdHRlbiAobm90IGluY2x1ZGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIG51bCBieXRlKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc194NTA5X2RuX2dldHMoIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IG1iZWR0bHNfeDUwOV9uYW1lICpkbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBTdG9yZSB0aGUgY2VydGlmaWNhdGUgc2VyaWFsIGluIHByaW50YWJsZSBmb3JtIGludG8gYnVmOworICogICAgICAgICAgICAgICAgIG5vIG1vcmUgdGhhbiBzaXplIGNoYXJhY3RlcnMgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIFxwYXJhbSBidWYgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICBNYXhpbXVtIHNpemUgb2YgYnVmZmVyCisgKiBccGFyYW0gc2VyaWFsICAgVGhlIFg1MDkgc2VyaWFsIHRvIHJlcHJlc2VudAorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd3JpdHRlbiAobm90IGluY2x1ZGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIG51bCBieXRlKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc194NTA5X3NlcmlhbF9nZXRzKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpzZXJpYWwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgYSBnaXZlbiBtYmVkdGxzX3g1MDlfdGltZSBhZ2FpbnN0IHRoZSBzeXN0ZW0gdGltZQorICogICAgICAgICAgICAgICAgIGFuZCB0ZWxsIGlmIGl0J3MgaW4gdGhlIHBhc3QuCisgKgorICogXG5vdGUgICAgICAgICAgIEludGVuZGVkIHVzYWdlIGlzICJpZiggaXNfcGFzdCggdmFsaWRfdG8gKSApIEVSUk9SIi4KKyAqICAgICAgICAgICAgICAgICBIZW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9mIDEgaWYgb24gaW50ZXJuYWwgZXJyb3JzLgorICoKKyAqIFxwYXJhbSB0aW1lICAgICBtYmVkdGxzX3g1MDlfdGltZSB0byBjaGVjaworICoKKyAqIFxyZXR1cm4gICAgICAgICAxIGlmIHRoZSBnaXZlbiB0aW1lIGlzIGluIHRoZSBwYXN0IG9yIGFuIGVycm9yIG9jY3VyZWQsCisgKiAgICAgICAgICAgICAgICAgMCBvdGhlcndpc2UuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCBjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqdGltZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVjayBhIGdpdmVuIG1iZWR0bHNfeDUwOV90aW1lIGFnYWluc3QgdGhlIHN5c3RlbSB0aW1lCisgKiAgICAgICAgICAgICAgICAgYW5kIHRlbGwgaWYgaXQncyBpbiB0aGUgZnV0dXJlLgorICoKKyAqIFxub3RlICAgICAgICAgICBJbnRlbmRlZCB1c2FnZSBpcyAiaWYoIGlzX2Z1dHVyZSggdmFsaWRfZnJvbSApICkgRVJST1IiLgorICogICAgICAgICAgICAgICAgIEhlbmNlIHRoZSByZXR1cm4gdmFsdWUgb2YgMSBpZiBvbiBpbnRlcm5hbCBlcnJvcnMuCisgKgorICogXHBhcmFtIHRpbWUgICAgIG1iZWR0bHNfeDUwOV90aW1lIHRvIGNoZWNrCisgKgorICogXHJldHVybiAgICAgICAgIDEgaWYgdGhlIGdpdmVuIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSBvciBhbiBlcnJvciBvY2N1cmVkLAorICogICAgICAgICAgICAgICAgIDAgb3RoZXJ3aXNlLgorICovCitpbnQgbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCBjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqdGltZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDaGVja3VwIHJvdXRpbmUKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciAxIGlmIHRoZSB0ZXN0IGZhaWxlZAorICovCitpbnQgbWJlZHRsc194NTA5X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKTsKKworLyoKKyAqIEludGVybmFsIG1vZHVsZSBmdW5jdGlvbnMuIFlvdSBwcm9iYWJseSBkbyBub3Qgd2FudCB0byB1c2UgdGhlc2UgdW5sZXNzIHlvdQorICoga25vdyB5b3UgZG8uCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfZ2V0X25hbWUoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X25hbWUgKmN1ciApOworaW50IG1iZWR0bHNfeDUwOV9nZXRfYWxnX251bGwoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKmFsZyApOworaW50IG1iZWR0bHNfeDUwOV9nZXRfYWxnKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqYWxnLCBtYmVkdGxzX3g1MDlfYnVmICpwYXJhbXMgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpCitpbnQgbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyggY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnLCBtYmVkdGxzX21kX3R5cGVfdCAqbWdmX21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNhbHRfbGVuICk7CisjZW5kaWYKK2ludCBtYmVkdGxzX3g1MDlfZ2V0X3NpZyggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwgbWJlZHRsc194NTA5X2J1ZiAqc2lnICk7CitpbnQgbWJlZHRsc194NTA5X2dldF9zaWdfYWxnKCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpzaWdfb2lkLCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpzaWdfcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90ICptZF9hbGcsIG1iZWR0bHNfcGtfdHlwZV90ICpwa19hbGcsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnNpZ19vcHRzICk7CitpbnQgbWJlZHRsc194NTA5X2dldF90aW1lKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV90aW1lICp0aW1lICk7CitpbnQgbWJlZHRsc194NTA5X2dldF9zZXJpYWwoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICpzZXJpYWwgKTsKK2ludCBtYmVkdGxzX3g1MDlfZ2V0X2V4dCggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKmV4dCwgaW50IHRhZyApOworaW50IG1iZWR0bHNfeDUwOV9zaWdfYWxnX2dldHMoIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKnNpZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZywgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzaWdfb3B0cyApOworaW50IG1iZWR0bHNfeDUwOV9rZXlfc2l6ZV9oZWxwZXIoIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBjb25zdCBjaGFyICpuYW1lICk7CitpbnQgbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcyggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKipoZWFkLCBjb25zdCBjaGFyICpuYW1lICk7CitpbnQgbWJlZHRsc194NTA5X3NldF9leHRlbnNpb24oIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCwgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcml0aWNhbCwgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbF9sZW4gKTsKK2ludCBtYmVkdGxzX3g1MDlfd3JpdGVfZXh0ZW5zaW9ucyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmZpcnN0ICk7CitpbnQgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmZpcnN0ICk7CitpbnQgbWJlZHRsc194NTA5X3dyaXRlX3NpZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaXplICk7CisKKyNkZWZpbmUgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEYgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIHJldCA8IDAgfHwgKHNpemVfdCkgcmV0ID49IG4gKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CVUZGRVJfVE9PX1NNQUxMICk7ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbiAtPSAoc2l6ZV90KSByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcCArPSAoc2l6ZV90KSByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKCAwICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIHg1MDkuaCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5X2NybC5oIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5X2NybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ODg0MzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3g1MDlfY3JsLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qKgorICogXGZpbGUgeDUwOV9jcmwuaAorICoKKyAqIFxicmllZiBYLjUwOSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3QgcGFyc2luZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1g1MDlfQ1JMX0gKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSTF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAieDUwOS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogXGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUKKyAqIFx7ICovCisKKy8qKgorICogXG5hbWUgU3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGZvciBwYXJzaW5nIENSTHMKKyAqIFx7CisgKi8KKworLyoqCisgKiBDZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3QgZW50cnkuCisgKiBDb250YWlucyB0aGUgQ0Etc3BlY2lmaWMgc2VyaWFsIG51bWJlcnMgYW5kIHJldm9jYXRpb24gZGF0ZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfeDUwOV9jcmxfZW50cnkKK3sKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHJhdzsKKworICAgIG1iZWR0bHNfeDUwOV9idWYgc2VyaWFsOworCisgICAgbWJlZHRsc194NTA5X3RpbWUgcmV2b2NhdGlvbl9kYXRlOworCisgICAgbWJlZHRsc194NTA5X2J1ZiBlbnRyeV9leHQ7CisKKyAgICBzdHJ1Y3QgbWJlZHRsc194NTA5X2NybF9lbnRyeSAqbmV4dDsKK30KK21iZWR0bHNfeDUwOV9jcmxfZW50cnk7CisKKy8qKgorICogQ2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0IHN0cnVjdHVyZS4KKyAqIEV2ZXJ5IENSTCBtYXkgaGF2ZSBtdWx0aXBsZSBlbnRyaWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDlfY3JsCit7CisgICAgbWJlZHRsc194NTA5X2J1ZiByYXc7ICAgICAgICAgICAvKio8IFRoZSByYXcgY2VydGlmaWNhdGUgZGF0YSAoREVSKS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfYnVmIHRiczsgICAgICAgICAgIC8qKjwgVGhlIHJhdyBjZXJ0aWZpY2F0ZSBib2R5IChERVIpLiBUaGUgcGFydCB0aGF0IGlzIFRvIEJlIFNpZ25lZC4gKi8KKworICAgIGludCB2ZXJzaW9uOyAgICAgICAgICAgIC8qKjwgQ1JMIHZlcnNpb24gKDE9djEsIDI9djIpICovCisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWdfb2lkOyAgICAgICAvKio8IENSTCBzaWduYXR1cmUgdHlwZSBpZGVudGlmaWVyICovCisKKyAgICBtYmVkdGxzX3g1MDlfYnVmIGlzc3Vlcl9yYXc7ICAgIC8qKjwgVGhlIHJhdyBpc3N1ZXIgZGF0YSAoREVSKS4gKi8KKworICAgIG1iZWR0bHNfeDUwOV9uYW1lIGlzc3VlcjsgICAgICAgLyoqPCBUaGUgcGFyc2VkIGlzc3VlciBkYXRhIChuYW1lZCBpbmZvcm1hdGlvbiBvYmplY3QpLiAqLworCisgICAgbWJlZHRsc194NTA5X3RpbWUgdGhpc191cGRhdGU7CisgICAgbWJlZHRsc194NTA5X3RpbWUgbmV4dF91cGRhdGU7CisKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5IGVudHJ5OyAgIC8qKjwgVGhlIENSTCBlbnRyaWVzIGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlIHJldm9jYXRpb24gdGltZXMgZm9yIHRoaXMgQ0EuICovCisKKyAgICBtYmVkdGxzX3g1MDlfYnVmIGNybF9leHQ7CisKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHNpZ19vaWQyOworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnOworICAgIG1iZWR0bHNfbWRfdHlwZV90IHNpZ19tZDsgICAgICAgICAgIC8qKjwgSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIE1EIGFsZ29yaXRobSBvZiB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSwgZS5nLiBNQkVEVExTX01EX1NIQTI1NiAqLworICAgIG1iZWR0bHNfcGtfdHlwZV90IHNpZ19wazsgICAgICAgICAgIC8qKjwgSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFB1YmxpYyBLZXkgYWxnb3JpdGhtIG9mIHRoZSBzaWduYXR1cmUgYWxnb3JpdGhtLCBlLmcuIE1CRURUTFNfUEtfUlNBICovCisgICAgdm9pZCAqc2lnX29wdHM7ICAgICAgICAgICAgIC8qKjwgU2lnbmF0dXJlIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCgpLCBlLmcuIGZvciBSU0FTU0EtUFNTICovCisKKyAgICBzdHJ1Y3QgbWJlZHRsc194NTA5X2NybCAqbmV4dDsKK30KK21iZWR0bHNfeDUwOV9jcmw7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhcnNlIGEgREVSLWVuY29kZWQgQ1JMIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGNoYWluZWQgbGlzdAorICoKKyAqIFxwYXJhbSBjaGFpbiAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbgorICogXHBhcmFtIGJ1ZiAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBDUkwgZGF0YSBpbiBERVIgZm9ybWF0CisgKiBccGFyYW0gYnVmbGVuICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgKGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlIGZvciBQRU0gZGF0YSkKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFg1MDkgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyKCBtYmVkdGxzX3g1MDlfY3JsICpjaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworLyoqCisgKiBcYnJpZWYgICAgICAgICAgUGFyc2Ugb25lIG9yIG1vcmUgQ1JMcyBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIGNoYWluZWQgbGlzdAorICoKKyAqIFxub3RlICAgICAgICAgICBNdXRsaXBsZSBDUkxzIGFyZSBhY2NlcHRlZCBvbmx5IGlmIHVzaW5nIFBFTSBmb3JtYXQKKyAqCisgKiBccGFyYW0gY2hhaW4gICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4KKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgQ1JMIGRhdGEgaW4gUEVNIG9yIERFUiBmb3JtYXQKKyAqIFxwYXJhbSBidWZsZW4gICBzaXplIG9mIHRoZSBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgZm9yIFBFTSBkYXRhKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgWDUwOSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2NybF9wYXJzZSggbWJlZHRsc194NTA5X2NybCAqY2hhaW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgTG9hZCBvbmUgb3IgbW9yZSBDUkxzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgY2hhaW5lZCBsaXN0CisgKgorICogXG5vdGUgICAgICAgICAgIE11dGxpcGxlIENSTHMgYXJlIGFjY2VwdGVkIG9ubHkgaWYgdXNpbmcgUEVNIGZvcm1hdAorICoKKyAqIFxwYXJhbSBjaGFpbiAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbgorICogXHBhcmFtIHBhdGggICAgIGZpbGVuYW1lIHRvIHJlYWQgdGhlIENSTHMgZnJvbSAoaW4gUEVNIG9yIERFUiBlbmNvZGluZykKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFg1MDkgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSggbWJlZHRsc194NTA5X2NybCAqY2hhaW4sIGNvbnN0IGNoYXIgKnBhdGggKTsKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybnMgYW4gaW5mb3JtYXRpb25hbCBzdHJpbmcgYWJvdXQgdGhlIENSTC4KKyAqCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgTWF4aW11bSBzaXplIG9mIGJ1ZmZlcgorICogXHBhcmFtIHByZWZpeCAgIEEgbGluZSBwcmVmaXgKKyAqIFxwYXJhbSBjcmwgICAgICBUaGUgWDUwOSBDUkwgdG8gcmVwcmVzZW50CisgKgorICogXHJldHVybiAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB3cml0dGVuIChub3QgaW5jbHVkaW5nIHRoZQorICogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgbnVsIGJ5dGUpLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3JsX2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBhIENSTCAoY2hhaW4pCisgKgorICogXHBhcmFtIGNybCAgICAgIENSTCBjaGFpbiB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NybF9pbml0KCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVW5hbGxvY2F0ZSBhbGwgQ1JMIGRhdGEKKyAqCisgKiBccGFyYW0gY3JsICAgICAgQ1JMIGNoYWluIHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIG1iZWR0bHNfeDUwOV9jcmwgKmNybCApOworCisvKiBcfSBuYW1lICovCisvKiBcfSBhZGR0b2dyb3VwIHg1MDlfbW9kdWxlICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX3g1MDlfY3JsLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jcnQuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODNlNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5X2NydC5oCkBAIC0wLDAgKzEsNjU0IEBACisvKioKKyAqIFxmaWxlIHg1MDlfY3J0LmgKKyAqCisgKiBcYnJpZWYgWC41MDkgY2VydGlmaWNhdGUgcGFyc2luZyBhbmQgd3JpdGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworI2lmbmRlZiBNQkVEVExTX1g1MDlfQ1JUX0gKKyNkZWZpbmUgTUJFRFRMU19YNTA5X0NSVF9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgImNvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAieDUwOS5oIgorI2luY2x1ZGUgIng1MDlfY3JsLmgiCisKKy8qKgorICogXGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUKKyAqIFx7CisgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxuYW1lIFN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBhbmQgd3JpdGluZyBYLjUwOSBjZXJ0aWZpY2F0ZXMKKyAqIFx7CisgKi8KKworLyoqCisgKiBDb250YWluZXIgZm9yIGFuIFguNTA5IGNlcnRpZmljYXRlLiBUaGUgY2VydGlmaWNhdGUgbWF5IGJlIGNoYWluZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfeDUwOV9jcnQKK3sKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHJhdzsgICAgICAgICAgICAgICAvKio8IFRoZSByYXcgY2VydGlmaWNhdGUgZGF0YSAoREVSKS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfYnVmIHRiczsgICAgICAgICAgICAgICAvKio8IFRoZSByYXcgY2VydGlmaWNhdGUgYm9keSAoREVSKS4gVGhlIHBhcnQgdGhhdCBpcyBUbyBCZSBTaWduZWQuICovCisKKyAgICBpbnQgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyoqPCBUaGUgWC41MDkgdmVyc2lvbi4gKDE9djEsIDI9djIsIDM9djMpICovCisgICAgbWJlZHRsc194NTA5X2J1ZiBzZXJpYWw7ICAgICAgICAgICAgLyoqPCBVbmlxdWUgaWQgZm9yIGNlcnRpZmljYXRlIGlzc3VlZCBieSBhIHNwZWNpZmljIENBLiAqLworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnX29pZDsgICAgICAgICAgIC8qKjwgU2lnbmF0dXJlIGFsZ29yaXRobSwgZS5nLiBzaGExUlNBICovCisKKyAgICBtYmVkdGxzX3g1MDlfYnVmIGlzc3Vlcl9yYXc7ICAgICAgICAvKio8IFRoZSByYXcgaXNzdWVyIGRhdGEgKERFUikuIFVzZWQgZm9yIHF1aWNrIGNvbXBhcmlzb24uICovCisgICAgbWJlZHRsc194NTA5X2J1ZiBzdWJqZWN0X3JhdzsgICAgICAgLyoqPCBUaGUgcmF3IHN1YmplY3QgZGF0YSAoREVSKS4gVXNlZCBmb3IgcXVpY2sgY29tcGFyaXNvbi4gKi8KKworICAgIG1iZWR0bHNfeDUwOV9uYW1lIGlzc3VlcjsgICAgICAgICAgIC8qKjwgVGhlIHBhcnNlZCBpc3N1ZXIgZGF0YSAobmFtZWQgaW5mb3JtYXRpb24gb2JqZWN0KS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfbmFtZSBzdWJqZWN0OyAgICAgICAgICAvKio8IFRoZSBwYXJzZWQgc3ViamVjdCBkYXRhIChuYW1lZCBpbmZvcm1hdGlvbiBvYmplY3QpLiAqLworCisgICAgbWJlZHRsc194NTA5X3RpbWUgdmFsaWRfZnJvbTsgICAgICAgLyoqPCBTdGFydCB0aW1lIG9mIGNlcnRpZmljYXRlIHZhbGlkaXR5LiAqLworICAgIG1iZWR0bHNfeDUwOV90aW1lIHZhbGlkX3RvOyAgICAgICAgIC8qKjwgRW5kIHRpbWUgb2YgY2VydGlmaWNhdGUgdmFsaWRpdHkuICovCisKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7ICAgICAgICAgICAgICAvKio8IENvbnRhaW5lciBmb3IgdGhlIHB1YmxpYyBrZXkgY29udGV4dC4gKi8KKworICAgIG1iZWR0bHNfeDUwOV9idWYgaXNzdWVyX2lkOyAgICAgICAgIC8qKjwgT3B0aW9uYWwgWC41MDkgdjIvdjMgaXNzdWVyIHVuaXF1ZSBpZGVudGlmaWVyLiAqLworICAgIG1iZWR0bHNfeDUwOV9idWYgc3ViamVjdF9pZDsgICAgICAgIC8qKjwgT3B0aW9uYWwgWC41MDkgdjIvdjMgc3ViamVjdCB1bmlxdWUgaWRlbnRpZmllci4gKi8KKyAgICBtYmVkdGxzX3g1MDlfYnVmIHYzX2V4dDsgICAgICAgICAgICAvKio8IE9wdGlvbmFsIFguNTA5IHYzIGV4dGVuc2lvbnMuICAqLworICAgIG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSBzdWJqZWN0X2FsdF9uYW1lczsgICAgLyoqPCBPcHRpb25hbCBsaXN0IG9mIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZXMgKE9ubHkgZE5TTmFtZSBzdXBwb3J0ZWQpLiAqLworCisgICAgaW50IGV4dF90eXBlczsgICAgICAgICAgICAgIC8qKjwgQml0IHN0cmluZyBjb250YWluaW5nIGRldGVjdGVkIGFuZCBwYXJzZWQgZXh0ZW5zaW9ucyAqLworICAgIGludCBjYV9pc3RydWU7ICAgICAgICAgICAgICAvKio8IE9wdGlvbmFsIEJhc2ljIENvbnN0cmFpbnQgZXh0ZW5zaW9uIHZhbHVlOiAxIGlmIHRoaXMgY2VydGlmaWNhdGUgYmVsb25ncyB0byBhIENBLCAwIG90aGVyd2lzZS4gKi8KKyAgICBpbnQgbWF4X3BhdGhsZW47ICAgICAgICAgICAgLyoqPCBPcHRpb25hbCBCYXNpYyBDb25zdHJhaW50IGV4dGVuc2lvbiB2YWx1ZTogVGhlIG1heGltdW0gcGF0aCBsZW5ndGggdG8gdGhlIHJvb3QgY2VydGlmaWNhdGUuIFBhdGggbGVuZ3RoIGlzIDEgaGlnaGVyIHRoYW4gUkZDIDUyODAgJ21lYW5pbmcnLCBzbyAxKyAqLworCisgICAgdW5zaWduZWQgaW50IGtleV91c2FnZTsgICAgIC8qKjwgT3B0aW9uYWwga2V5IHVzYWdlIGV4dGVuc2lvbiB2YWx1ZTogU2VlIHRoZSB2YWx1ZXMgaW4geDUwOS5oICovCisKKyAgICBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgZXh0X2tleV91c2FnZTsgLyoqPCBPcHRpb25hbCBsaXN0IG9mIGV4dGVuZGVkIGtleSB1c2FnZSBPSURzLiAqLworCisgICAgdW5zaWduZWQgY2hhciBuc19jZXJ0X3R5cGU7IC8qKjwgT3B0aW9uYWwgTmV0c2NhcGUgY2VydGlmaWNhdGUgdHlwZSBleHRlbnNpb24gdmFsdWU6IFNlZSB0aGUgdmFsdWVzIGluIHg1MDkuaCAqLworCisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWc7ICAgICAgICAgICAgICAgLyoqPCBTaWduYXR1cmU6IGhhc2ggb2YgdGhlIHRicyBwYXJ0IHNpZ25lZCB3aXRoIHRoZSBwcml2YXRlIGtleS4gKi8KKyAgICBtYmVkdGxzX21kX3R5cGVfdCBzaWdfbWQ7ICAgICAgICAgICAvKio8IEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNRCBhbGdvcml0aG0gb2YgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG0sIGUuZy4gTUJFRFRMU19NRF9TSEEyNTYgKi8KKyAgICBtYmVkdGxzX3BrX3R5cGVfdCBzaWdfcGs7ICAgICAgICAgICAvKio8IEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQdWJsaWMgS2V5IGFsZ29yaXRobSBvZiB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSwgZS5nLiBNQkVEVExTX1BLX1JTQSAqLworICAgIHZvaWQgKnNpZ19vcHRzOyAgICAgICAgICAgICAvKio8IFNpZ25hdHVyZSBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoKSwgZS5nLiBmb3IgUlNBU1NBLVBTUyAqLworCisgICAgc3RydWN0IG1iZWR0bHNfeDUwOV9jcnQgKm5leHQ7ICAgICAvKio8IE5leHQgY2VydGlmaWNhdGUgaW4gdGhlIENBLWNoYWluLiAqLworfQorbWJlZHRsc194NTA5X2NydDsKKworLyoqCisgKiBCdWlsZCBmbGFnIGZyb20gYW4gYWxnb3JpdGhtL2N1cnZlIGlkZW50aWZpZXIgKHBrLCBtZCwgZWNwKQorICogU2luY2UgMCBpcyBhbHdheXMgWFhYX05PTkUsIGlnbm9yZSBpdC4KKyAqLworI2RlZmluZSBNQkVEVExTX1g1MDlfSURfRkxBRyggaWQgKSAgICggMSA8PCAoIGlkIC0gMSApICkKKworLyoqCisgKiBTZWN1cml0eSBwcm9maWxlIGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uCisgKgorICogQWxsIGxpc3RzIGFyZSBiaXRmaWVsZHMsIGJ1aWx0IGJ5IE9SaW5nIGZsYWdzIGZyb20gTUJFRFRMU19YNTA5X0lEX0ZMQUcoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50MzJfdCBhbGxvd2VkX21kczsgICAgICAgLyoqPCBNRHMgZm9yIHNpZ25hdHVyZXMgICAgICAgICAqLworICAgIHVpbnQzMl90IGFsbG93ZWRfcGtzOyAgICAgICAvKio8IFBLIGFsZ3MgZm9yIHNpZ25hdHVyZXMgICAgICovCisgICAgdWludDMyX3QgYWxsb3dlZF9jdXJ2ZXM7ICAgIC8qKjwgRWxsaXB0aWMgY3VydmVzIGZvciBFQ0RTQSAgKi8KKyAgICB1aW50MzJfdCByc2FfbWluX2JpdGxlbjsgICAgLyoqPCBNaW5pbXVtIHNpemUgZm9yIFJTQSBrZXlzICAqLworfQorbWJlZHRsc194NTA5X2NydF9wcm9maWxlOworCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8xICAgICAgICAgICAgICAwCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8yICAgICAgICAgICAgICAxCisjZGVmaW5lIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8zICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgTUJFRFRMU19YNTA5X1JGQzUyODBfTUFYX1NFUklBTF9MRU4gMzIKKyNkZWZpbmUgTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICAgMTUKKworI2lmICFkZWZpbmVkKCBNQkVEVExTX1g1MDlfTUFYX0ZJTEVfUEFUSF9MRU4gKQorI2RlZmluZSBNQkVEVExTX1g1MDlfTUFYX0ZJTEVfUEFUSF9MRU4gNTEyCisjZW5kaWYKKworLyoqCisgKiBDb250YWluZXIgZm9yIHdyaXRpbmcgYSBjZXJ0aWZpY2F0ZSAoQ1JUKQorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0Cit7CisgICAgaW50IHZlcnNpb247CisgICAgbWJlZHRsc19tcGkgc2VyaWFsOworICAgIG1iZWR0bHNfcGtfY29udGV4dCAqc3ViamVjdF9rZXk7CisgICAgbWJlZHRsc19wa19jb250ZXh0ICppc3N1ZXJfa2V5OworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpzdWJqZWN0OworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICppc3N1ZXI7CisgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnOworICAgIGNoYXIgbm90X2JlZm9yZVtNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4gKyAxXTsKKyAgICBjaGFyIG5vdF9hZnRlcltNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4gKyAxXTsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqZXh0ZW5zaW9uczsKK30KK21iZWR0bHNfeDUwOXdyaXRlX2NlcnQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKy8qKgorICogRGVmYXVsdCBzZWN1cml0eSBwcm9maWxlLiBTaG91bGQgcHJvdmlkZSBhIGdvb2QgYmFsYW5jZSBiZXR3ZWVuIHNlY3VyaXR5CisgKiBhbmQgY29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgZGVwbG95bWVudHMuCisgKi8KK2V4dGVybiBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgbWJlZHRsc194NTA5X2NydF9wcm9maWxlX2RlZmF1bHQ7CisKKy8qKgorICogRXhwZWN0ZWQgbmV4dCBkZWZhdWx0IHByb2ZpbGUuIFJlY29tbWVuZGVkIGZvciBuZXcgZGVwbG95bWVudHMuCisgKiBDdXJyZW50bHkgdGFyZ2V0cyBhIDEyOC1iaXQgc2VjdXJpdHkgbGV2ZWwsIGV4Y2VwdCBmb3IgUlNBLTIwNDguCisgKi8KK2V4dGVybiBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgbWJlZHRsc194NTA5X2NydF9wcm9maWxlX25leHQ7CisKKy8qKgorICogTlNBIFN1aXRlIEIgcHJvZmlsZS4KKyAqLworZXh0ZXJuIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGVfc3VpdGViOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBQYXJzZSBhIHNpbmdsZSBERVIgZm9ybWF0dGVkIGNlcnRpZmljYXRlIGFuZCBhZGQgaXQKKyAqICAgICAgICAgICAgICAgICB0byB0aGUgY2hhaW5lZCBsaXN0LgorICoKKyAqIFxwYXJhbSBjaGFpbiAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbgorICogXHBhcmFtIGJ1ZiAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBjZXJ0aWZpY2F0ZSBERVIgZGF0YQorICogXHBhcmFtIGJ1ZmxlbiAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMgWDUwOSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFBhcnNlIG9uZSBvciBtb3JlIGNlcnRpZmljYXRlcyBhbmQgYWRkIHRoZW0KKyAqICAgICAgICAgICAgICAgICB0byB0aGUgY2hhaW5lZCBsaXN0LiBQYXJzZXMgcGVybWlzc2l2ZWx5LiBJZiBzb21lCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzIGNhbiBiZSBwYXJzZWQsIHRoZSByZXN1bHQgaXMgdGhlIG51bWJlcgorICogICAgICAgICAgICAgICAgIG9mIGZhaWxlZCBjZXJ0aWZpY2F0ZXMgaXQgZW5jb3VudGVyZWQuIElmIG5vbmUgY29tcGxldGUKKyAqICAgICAgICAgICAgICAgICBjb3JyZWN0bHksIHRoZSBmaXJzdCBlcnJvciBpcyByZXR1cm5lZC4KKyAqCisgKiBccGFyYW0gY2hhaW4gICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4KKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgY2VydGlmaWNhdGUgZGF0YSBpbiBQRU0gb3IgREVSIGZvcm1hdAorICogXHBhcmFtIGJ1ZmxlbiAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBmb3IgUEVNIGRhdGEpCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgYWxsIGNlcnRpZmljYXRlcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBhIHBvc2l0aXZlIG51bWJlcgorICogICAgICAgICAgICAgICAgIGlmIHBhcnRseSBzdWNjZXNzZnVsIG9yIGEgc3BlY2lmaWMgWDUwOSBvciBQRU0gZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZSggbWJlZHRsc194NTA5X2NydCAqY2hhaW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgTG9hZCBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgYW5kIGFkZCB0aGVtCisgKiAgICAgICAgICAgICAgICAgdG8gdGhlIGNoYWluZWQgbGlzdC4gUGFyc2VzIHBlcm1pc3NpdmVseS4gSWYgc29tZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcyBjYW4gYmUgcGFyc2VkLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1iZXIKKyAqICAgICAgICAgICAgICAgICBvZiBmYWlsZWQgY2VydGlmaWNhdGVzIGl0IGVuY291bnRlcmVkLiBJZiBub25lIGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgICAgY29ycmVjdGx5LCB0aGUgZmlyc3QgZXJyb3IgaXMgcmV0dXJuZWQuCisgKgorICogXHBhcmFtIGNoYWluICAgIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGNoYWluCisgKiBccGFyYW0gcGF0aCAgICAgZmlsZW5hbWUgdG8gcmVhZCB0aGUgY2VydGlmaWNhdGVzIGZyb20KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBhbGwgY2VydGlmaWNhdGVzIHBhcnNlZCBzdWNjZXNzZnVsbHksIGEgcG9zaXRpdmUgbnVtYmVyCisgKiAgICAgICAgICAgICAgICAgaWYgcGFydGx5IHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBYNTA5IG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCBjaGFyICpwYXRoICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgb25lIG9yIG1vcmUgY2VydGlmaWNhdGUgZmlsZXMgZnJvbSBhIHBhdGggYW5kIGFkZCB0aGVtCisgKiAgICAgICAgICAgICAgICAgdG8gdGhlIGNoYWluZWQgbGlzdC4gUGFyc2VzIHBlcm1pc3NpdmVseS4gSWYgc29tZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcyBjYW4gYmUgcGFyc2VkLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1iZXIKKyAqICAgICAgICAgICAgICAgICBvZiBmYWlsZWQgY2VydGlmaWNhdGVzIGl0IGVuY291bnRlcmVkLiBJZiBub25lIGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgICAgY29ycmVjdGx5LCB0aGUgZmlyc3QgZXJyb3IgaXMgcmV0dXJuZWQuCisgKgorICogXHBhcmFtIGNoYWluICAgIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGNoYWluCisgKiBccGFyYW0gcGF0aCAgICAgZGlyZWN0b3J5IC8gZm9sZGVyIHRvIHJlYWQgdGhlIGNlcnRpZmljYXRlIGZpbGVzIGZyb20KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBhbGwgY2VydGlmaWNhdGVzIHBhcnNlZCBzdWNjZXNzZnVsbHksIGEgcG9zaXRpdmUgbnVtYmVyCisgKiAgICAgICAgICAgICAgICAgaWYgcGFydGx5IHN1Y2Nlc3NmdWwgb3IgYSBzcGVjaWZpYyBYNTA5IG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCBjaGFyICpwYXRoICk7CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm5zIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZQorICogICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlLgorICoKKyAqIFxwYXJhbSBidWYgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICBNYXhpbXVtIHNpemUgb2YgYnVmZmVyCisgKiBccGFyYW0gcHJlZml4ICAgQSBsaW5lIHByZWZpeAorICogXHBhcmFtIGNydCAgICAgIFRoZSBYNTA5IGNlcnRpZmljYXRlIHRvIHJlcHJlc2VudAorICoKKyAqIFxyZXR1cm4gICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd3JpdHRlbiAobm90IGluY2x1ZGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIG51bCBieXRlKSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9pbmZvKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFJldHVybnMgYW4gaW5mb3JtYXRpb25hbCBzdHJpbmcgYWJvdXQgdGhlCisgKiAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiBhIGNlcnRpZmljYXRlLgorICoKKyAqIFxwYXJhbSBidWYgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICBNYXhpbXVtIHNpemUgb2YgYnVmZmVyCisgKiBccGFyYW0gcHJlZml4ICAgQSBsaW5lIHByZWZpeAorICogXHBhcmFtIGZsYWdzICAgIFZlcmlmaWNhdGlvbiBmbGFncyBjcmVhdGVkIGJ5IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCkKKyAqCisgKiBccmV0dXJuICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHdyaXR0ZW4gKG5vdCBpbmNsdWRpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBudWwgYnl0ZSksIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBzaWduYXR1cmUKKyAqCisgKiAgICAgICAgICAgICAgICAgVGhlIHZlcmlmeSBjYWxsYmFjayBpcyBhIHVzZXItc3VwcGxpZWQgY2FsbGJhY2sgdGhhdAorICogICAgICAgICAgICAgICAgIGNhbiBjbGVhciAvIG1vZGlmeSAvIGFkZCBmbGFncyBmb3IgYSBjZXJ0aWZpY2F0ZS4gSWYgc2V0LAorICogICAgICAgICAgICAgICAgIHRoZSB2ZXJpZmljYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBlYWNoCisgKiAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgaW4gdGhlIGNoYWluIChmcm9tIHRoZSB0cnVzdC1jYSBkb3duIHRvIHRoZQorICogICAgICAgICAgICAgICAgIHByZXNlbnRlZCBjcnQpLiBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxiYWNrIGFyZToKKyAqICAgICAgICAgICAgICAgICAodm9pZCAqcGFyYW1ldGVyLCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsIGludCBjZXJ0aWZpY2F0ZV9kZXB0aCwKKyAqICAgICAgICAgICAgICAgICBpbnQgKmZsYWdzKS4gV2l0aCB0aGUgZmxhZ3MgcmVwcmVzZW50aW5nIGN1cnJlbnQgZmxhZ3MgZm9yCisgKiAgICAgICAgICAgICAgICAgdGhhdCBzcGVjaWZpYyBjZXJ0aWZpY2F0ZSBhbmQgdGhlIGNlcnRpZmljYXRlIGRlcHRoIGZyb20KKyAqICAgICAgICAgICAgICAgICB0aGUgYm90dG9tIChQZWVyIGNlcnQgZGVwdGggPSAwKS4KKyAqCisgKiAgICAgICAgICAgICAgICAgQWxsIGZsYWdzIGxlZnQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIGNhbGxiYWNrCisgKiAgICAgICAgICAgICAgICAgYXJlIGFsc28gcmV0dXJuZWQgdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGUgZnVuY3Rpb24gc2hvdWxkCisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIDAgZm9yIGFueXRoaW5nIGJ1dCBhIGZhdGFsIGVycm9yLgorICoKKyAqIFxub3RlICAgICAgICAgICBJbiBjYXNlIHZlcmlmaWNhdGlvbiBmYWlsZWQsIHRoZSByZXN1bHRzIGNhbiBiZSBkaXNwbGF5ZWQKKyAqICAgICAgICAgICAgICAgICB1c2luZyBcYyBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCkKKyAqCisgKiBcbm90ZSAgICAgICAgICAgU2FtZSBhcyBcYyBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV93aXRoX3Byb2ZpbGUoKSB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgIGRlZmF1bHQgc2VjdXJpdHkgcHJvZmlsZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBwcm92aWRlIHVwLXRvLWRhdGUgQ1JMcyBmb3IKKyAqICAgICAgICAgICAgICAgICBhbGwgdHJ1c3RlZCBDQXMuIElmIG5vIENSTCBpcyBwcm92aWRlZCBmb3IgdGhlIENBIHRoYXQgd2FzCisgKiAgICAgICAgICAgICAgICAgdXNlZCB0byBzaWduIHRoZSBjZXJ0aWZpY2F0ZSwgQ1JMIHZlcmlmaWNhdGlvbiBpcyBza2lwcGVkCisgKiAgICAgICAgICAgICAgICAgc2lsZW50bHksIHRoYXQgaXMgKndpdGhvdXQqIHNldHRpbmcgYW55IGZsYWcuCisgKgorICogXHBhcmFtIGNydCAgICAgIGEgY2VydGlmaWNhdGUgKGNoYWluKSB0byBiZSB2ZXJpZmllZAorICogXHBhcmFtIHRydXN0X2NhIHRoZSBsaXN0IG9mIHRydXN0ZWQgQ0FzCisgKiBccGFyYW0gY2FfY3JsICAgdGhlIGxpc3Qgb2YgQ1JMcyBmb3IgdHJ1c3RlZCBDQXMgKHNlZSBub3RlIGFib3ZlKQorICogXHBhcmFtIGNuICAgICAgIGV4cGVjdGVkIENvbW1vbiBOYW1lIChjYW4gYmUgc2V0IHRvCisgKiAgICAgICAgICAgICAgICAgTlVMTCBpZiB0aGUgQ04gbXVzdCBub3QgYmUgdmVyaWZpZWQpCisgKiBccGFyYW0gZmxhZ3MgICAgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24KKyAqIFxwYXJhbSBmX3ZyZnkgICB2ZXJpZmljYXRpb24gZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3ZyZnkgICB2ZXJpZmljYXRpb24gcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRAorICogICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgKmZsYWdzIHdpbGwgaGF2ZSBvbmUgb3IgbW9yZQorICogICAgICAgICAgICAgICAgIE1CRURUTFNfWDUwOV9CQURDRVJUX1hYWCBvciBNQkVEVExTX1g1MDlfQkFEQ1JMX1hYWCBmbGFncworICogICAgICAgICAgICAgICAgIHNldCwKKyAqICAgICAgICAgICAgICAgICBvciBhbm90aGVyIGVycm9yIGluIGNhc2Ugb2YgYSBmYXRhbCBlcnJvciBlbmNvdW50ZXJlZAorICogICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSggbWJlZHRsc194NTA5X2NydCAqY3J0LAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqdHJ1c3RfY2EsCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmwsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjbiwgdWludDMyX3QgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl92cmZ5KSh2b2lkICosIG1iZWR0bHNfeDUwOV9jcnQgKiwgaW50LCB1aW50MzJfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfdnJmeSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBWZXJpZnkgdGhlIGNlcnRpZmljYXRlIHNpZ25hdHVyZSBhY2NvcmRpbmcgdG8gcHJvZmlsZQorICoKKyAqIFxub3RlICAgICAgICAgICBTYW1lIGFzIFxjIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCksIGJ1dCB3aXRoIGV4cGxpY2l0CisgKiAgICAgICAgICAgICAgICAgc2VjdXJpdHkgcHJvZmlsZS4KKyAqCisgKiBcbm90ZSAgICAgICAgICAgVGhlIHJlc3RyaWN0aW9ucyBvbiBrZXlzIChSU0EgbWluaW11bSBzaXplLCBhbGxvd2VkIGN1cnZlcworICogICAgICAgICAgICAgICAgIGZvciBFQ0RTQSkgYXBwbHkgdG8gYWxsIGNlcnRpZmljYXRlczogdHJ1c3RlZCByb290LAorICogICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSBDQXMgaWYgYW55LCBhbmQgZW5kIGVudGl0eSBjZXJ0aWZpY2F0ZS4KKyAqCisgKiBccGFyYW0gY3J0ICAgICAgYSBjZXJ0aWZpY2F0ZSAoY2hhaW4pIHRvIGJlIHZlcmlmaWVkCisgKiBccGFyYW0gdHJ1c3RfY2EgdGhlIGxpc3Qgb2YgdHJ1c3RlZCBDQXMKKyAqIFxwYXJhbSBjYV9jcmwgICB0aGUgbGlzdCBvZiBDUkxzIGZvciB0cnVzdGVkIENBcworICogXHBhcmFtIHByb2ZpbGUgIHNlY3VyaXR5IHByb2ZpbGUgZm9yIHZlcmlmaWNhdGlvbgorICogXHBhcmFtIGNuICAgICAgIGV4cGVjdGVkIENvbW1vbiBOYW1lIChjYW4gYmUgc2V0IHRvCisgKiAgICAgICAgICAgICAgICAgTlVMTCBpZiB0aGUgQ04gbXVzdCBub3QgYmUgdmVyaWZpZWQpCisgKiBccGFyYW0gZmxhZ3MgICAgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24KKyAqIFxwYXJhbSBmX3ZyZnkgICB2ZXJpZmljYXRpb24gZnVuY3Rpb24KKyAqIFxwYXJhbSBwX3ZyZnkgICB2ZXJpZmljYXRpb24gcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCBvciBNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRAorICogICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgKmZsYWdzIHdpbGwgaGF2ZSBvbmUgb3IgbW9yZQorICogICAgICAgICAgICAgICAgIE1CRURUTFNfWDUwOV9CQURDRVJUX1hYWCBvciBNQkVEVExTX1g1MDlfQkFEQ1JMX1hYWCBmbGFncworICogICAgICAgICAgICAgICAgIHNldCwKKyAqICAgICAgICAgICAgICAgICBvciBhbm90aGVyIGVycm9yIGluIGNhc2Ugb2YgYSBmYXRhbCBlcnJvciBlbmNvdW50ZXJlZAorICogICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV93aXRoX3Byb2ZpbGUoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKnRydXN0X2NhLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY24sIHVpbnQzMl90ICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfdnJmeSkodm9pZCAqLCBtYmVkdGxzX3g1MDlfY3J0ICosIGludCwgdWludDMyX3QgKiksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRSkKKy8qKgorICogXGJyaWVmICAgICAgICAgIENoZWNrIHVzYWdlIG9mIGNlcnRpZmljYXRlIGFnYWluc3Qga2V5VXNhZ2UgZXh0ZW5zaW9uLgorICoKKyAqIFxwYXJhbSBjcnQgICAgICBMZWFmIGNlcnRpZmljYXRlIHVzZWQuCisgKiBccGFyYW0gdXNhZ2UgICAgSW50ZW5kZWQgdXNhZ2UocykgKGVnIE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UCisgKiAgICAgICAgICAgICAgICAgYmVmb3JlIHVzaW5nIHRoZSBjZXJ0aWZpY2F0ZSB0byBwZXJmb3JtIGFuIFJTQSBrZXkKKyAqICAgICAgICAgICAgICAgICBleGNoYW5nZSkuCisgKgorICogXG5vdGUgICAgICAgICAgIEV4Y2VwdCBmb3IgZGVjaXBoZXJPbmx5IGFuZCBlbmNpcGhlck9ubHksIGEgYml0IHNldCBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICB1c2FnZSBhcmd1bWVudCBtZWFucyB0aGlzIGJpdCBNVVNUIGJlIHNldCBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZS4gRm9yIGRlY2lwaGVyT25seSBhbmQgZW5jaXBoZXJPbmx5LCBpdCBtZWFucworICogICAgICAgICAgICAgICAgIHRoYXQgYml0IE1BWSBiZSBzZXQuCisgKgorICogXHJldHVybiAgICAgICAgIDAgaXMgdGhlc2UgdXNlcyBvZiB0aGUgY2VydGlmaWNhdGUgYXJlIGFsbG93ZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSBpZiB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uCisgKiAgICAgICAgICAgICAgICAgaXMgcHJlc2VudCBidXQgZG9lcyBub3QgbWF0Y2ggdGhlIHVzYWdlIGFyZ3VtZW50LgorICoKKyAqIFxub3RlICAgICAgICAgICBZb3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uIGxlYWYgY2VydGlmaWNhdGVzLCBvbgorICogICAgICAgICAgICAgICAgIChpbnRlcm1lZGlhdGUpIENBcyB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIGlzIGF1dG9tYXRpY2FsbHkKKyAqICAgICAgICAgICAgICAgICBjaGVja2VkIGJ5IFxjIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCkuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2tleV91c2FnZSggY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXNhZ2UgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFKSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2sgdXNhZ2Ugb2YgY2VydGlmaWNhdGUgYWdhaW5zdCBleHRlbnRlZEpleVVzYWdlLgorICoKKyAqIFxwYXJhbSBjcnQgICAgICBMZWFmIGNlcnRpZmljYXRlIHVzZWQuCisgKiBccGFyYW0gdXNhZ2Vfb2lkIEludGVuZGVkIHVzYWdlIChlZyBNQkVEVExTX09JRF9TRVJWRVJfQVVUSCBvciBNQkVEVExTX09JRF9DTElFTlRfQVVUSCkuCisgKiBccGFyYW0gdXNhZ2VfbGVuIExlbmd0aCBvZiB1c2FnZV9vaWQgKGVnIGdpdmVuIGJ5IE1CRURUTFNfT0lEX1NJWkUoKSkuCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgdGhpcyB1c2Ugb2YgdGhlIGNlcnRpZmljYXRlIGlzIGFsbG93ZWQsCisgKiAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSBpZiBub3QuCisgKgorICogXG5vdGUgICAgICAgICAgIFVzdWFsbHkgb25seSBtYWtlcyBzZW5zZSBvbiBsZWFmIGNlcnRpZmljYXRlcy4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNhZ2VfbGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIHN0YXR1cworICoKKyAqIFxwYXJhbSBjcnQgICAgICBhIGNlcnRpZmljYXRlIHRvIGJlIHZlcmlmaWVkCisgKiBccGFyYW0gY3JsICAgICAgdGhlIENSTCB0byB2ZXJpZnkgYWdhaW5zdAorICoKKyAqIFxyZXR1cm4gICAgICAgICAxIGlmIHRoZSBjZXJ0aWZpY2F0ZSBpcyByZXZva2VkLCAwIG90aGVyd2lzZQorICoKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfaXNfcmV2b2tlZCggY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0LCBjb25zdCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBhIGNlcnRpZmljYXRlIChjaGFpbikKKyAqCisgKiBccGFyYW0gY3J0ICAgICAgQ2VydGlmaWNhdGUgY2hhaW4gdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggbWJlZHRsc194NTA5X2NydCAqY3J0ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFVuYWxsb2NhdGUgYWxsIGNlcnRpZmljYXRlIGRhdGEKKyAqCisgKiBccGFyYW0gY3J0ICAgICAgQ2VydGlmaWNhdGUgY2hhaW4gdG8gZnJlZQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggbWJlZHRsc194NTA5X2NydCAqY3J0ICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKy8qIFx9IG5hbWUgKi8KKy8qIFx9IGFkZHRvZ3JvdXAgeDUwOV9tb2R1bGUgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9XUklURV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEluaXRpYWxpemUgYSBDUlQgd3JpdGluZyBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2luaXQoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSB2ZXJpb24gZm9yIGEgQ2VydGlmaWNhdGUKKyAqICAgICAgICAgICAgICAgICAgRGVmYXVsdDogTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzMKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIHZlcnNpb24gICB2ZXJzaW9uIHRvIHNldCAoTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzEsIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8yIG9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMykKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZlcnNpb24oIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgaW50IHZlcnNpb24gKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgc2VyaWFsIG51bWJlciBmb3IgYSBDZXJ0aWZpY2F0ZS4KKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIHNlcmlhbCAgICBzZXJpYWwgbnVtYmVyIHRvIHNldAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbCggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBjb25zdCBtYmVkdGxzX21waSAqc2VyaWFsICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIHZhbGlkaXR5IHBlcmlvZCBmb3IgYSBDZXJ0aWZpY2F0ZQorICogICAgICAgICAgICAgICAgICBUaW1lc3RhbXBzIHNob3VsZCBiZSBpbiBzdHJpbmcgZm9ybWF0IGZvciBVVEMgdGltZXpvbmUKKyAqICAgICAgICAgICAgICAgICAgaS5lLiAiWVlZWU1NRERoaG1tc3MiCisgKiAgICAgICAgICAgICAgICAgIGUuZy4gIjIwMTMxMjMxMjM1OTU5IiBmb3IgRGVjZW1iZXIgMzFzdCAyMDEzCisgKiAgICAgICAgICAgICAgICAgICAgICAgYXQgMjM6NTk6NTkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIG5vdF9iZWZvcmUgICAgbm90X2JlZm9yZSB0aW1lc3RhbXAKKyAqIFxwYXJhbSBub3RfYWZ0ZXIgICAgIG5vdF9hZnRlciB0aW1lc3RhbXAKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgdGltZXN0YW1wIHdhcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBvcgorICogICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgY29uc3QgY2hhciAqbm90X2JlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbm90X2FmdGVyICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIGlzc3VlciBuYW1lIGZvciBhIENlcnRpZmljYXRlCisgKiAgICAgICAgICAgICAgICAgIElzc3VlciBuYW1lcyBzaG91bGQgY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0CisgKiAgICAgICAgICAgICAgICAgIG9mIE9JRCB0eXBlcyBhbmQgdmFsdWVzOgorICogICAgICAgICAgICAgICAgICBlLmcuICJDPVVLLE89QVJNLENOPW1iZWQgVExTIENBIgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGlzc3Vlcl9uYW1lICAgaXNzdWVyIG5hbWUgdG8gc2V0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIGlzc3VlciBuYW1lIHdhcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBvcgorICogICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX25hbWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaXNzdWVyX25hbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgc3ViamVjdCBuYW1lIGZvciBhIENlcnRpZmljYXRlCisgKiAgICAgICAgICAgICAgICAgIFN1YmplY3QgbmFtZXMgc2hvdWxkIGNvbnRhaW4gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdAorICogICAgICAgICAgICAgICAgICBvZiBPSUQgdHlwZXMgYW5kIHZhbHVlczoKKyAqICAgICAgICAgICAgICAgICAgZS5nLiAiQz1VSyxPPUFSTSxDTj1tYmVkIFRMUyBTZXJ2ZXIgMSIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBzdWJqZWN0X25hbWUgIHN1YmplY3QgbmFtZSB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3ViamVjdCBuYW1lIHdhcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5LCBvcgorICogICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9uYW1lKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdWJqZWN0X25hbWUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgc3ViamVjdCBwdWJsaWMga2V5IGZvciB0aGUgY2VydGlmaWNhdGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGtleSAgICAgICBwdWJsaWMga2V5IHRvIGluY2x1ZGUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIGlzc3VlciBrZXkgdXNlZCBmb3Igc2lnbmluZyB0aGUgY2VydGlmaWNhdGUKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGtleSAgICAgICBwcml2YXRlIGtleSB0byBzaWduIHdpdGgKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9rZXkoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgTUQgYWxnb3JpdGhtIHRvIHVzZSBmb3IgdGhlIHNpZ25hdHVyZQorICogICAgICAgICAgICAgICAgICAoZS5nLiBNQkVEVExTX01EX1NIQTEpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBtZF9hbGcgICAgTUQgYWxnb3JpdGhtIHRvIHVzZQorICovCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgR2VuZXJpYyBmdW5jdGlvbiB0byBhZGQgdG8gb3IgcmVwbGFjZSBhbiBleHRlbnNpb24gaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgIENSVAorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gb2lkICAgICAgIE9JRCBvZiB0aGUgZXh0ZW5zaW9uCisgKiBccGFyYW0gb2lkX2xlbiAgIGxlbmd0aCBvZiB0aGUgT0lECisgKiBccGFyYW0gY3JpdGljYWwgIGlmIHRoZSBleHRlbnNpb24gaXMgY3JpdGljYWwgKHBlciB0aGUgUkZDJ3MgZGVmaW5pdGlvbikKKyAqIFxwYXJhbSB2YWwgICAgICAgdmFsdWUgb2YgdGhlIGV4dGVuc2lvbiBPQ1RFVCBTVFJJTkcKKyAqIFxwYXJhbSB2YWxfbGVuICAgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfZXh0ZW5zaW9uKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNyaXRpY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBiYXNpY0NvbnN0cmFpbnRzIGV4dGVuc2lvbiBmb3IgYSBDUlQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIGlzX2NhICAgICBpcyB0aGlzIGEgQ0EgY2VydGlmaWNhdGUKKyAqIFxwYXJhbSBtYXhfcGF0aGxlbiAgIG1heGltdW0gbGVuZ3RoIG9mIGNlcnRpZmljYXRlIGNoYWlucyBiZWxvdyB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSAob25seSBmb3IgQ0EgY2VydGlmaWNhdGVzLCAtMSBpcworICogICAgICAgICAgICAgICAgICAgICAgaW5saW1pdGVkKQorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2Jhc2ljX2NvbnN0cmFpbnRzKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc19jYSwgaW50IG1heF9wYXRobGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgc3ViamVjdEtleUlkZW50aWZpZXIgZXh0ZW5zaW9uIGZvciBhIENSVAorICogICAgICAgICAgICAgICAgICBSZXF1aXJlcyB0aGF0IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkoKSBoYXMgYmVlbgorICogICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDUlQgY29udGV4dCB0byB1c2UKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgYXV0aG9yaXR5S2V5SWRlbnRpZmllciBleHRlbnNpb24gZm9yIGEgQ1JUCisgKiAgICAgICAgICAgICAgICAgIFJlcXVpcmVzIHRoYXQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfa2V5KCkgaGFzIGJlZW4KKyAqICAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHggKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBLZXkgVXNhZ2UgRXh0ZW5zaW9uIGZsYWdzCisgKiAgICAgICAgICAgICAgICAgIChlLmcuIE1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSB8IE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOKQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0ga2V5X3VzYWdlIGtleSB1c2FnZSBmbGFncyB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfa2V5X3VzYWdlKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfdXNhZ2UgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgTmV0c2NhcGUgQ2VydCBUeXBlIGZsYWdzCisgKiAgICAgICAgICAgICAgICAgIChlLmcuIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX0NMSUVOVCB8IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUwpCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgQ1JUIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0gbnNfY2VydF90eXBlICBOZXRzY2FwZSBDZXJ0IFR5cGUgZmxhZ3MgdG8gc2V0CisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X25zX2NlcnRfdHlwZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuc19jZXJ0X3R5cGUgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIEZyZWUgdGhlIGNvbnRlbnRzIG9mIGEgQ1JUIHdyaXRlIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENSVCBjb250ZXh0IHRvIGZyZWUKKyAqLwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZnJlZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIGJ1aWx0IHVwIGNlcnRpZmljYXRlIHRvIGEgWDUwOSBERVIgc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgICAgIE5vdGU6IGRhdGEgaXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIhIFVzZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSB3aGVyZSB5b3Ugc2hvdWxkIHN0YXJ0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBidWZmZXIKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIGNlcnRpZmljYXRlIHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24gKGZvciBzaWduYXR1cmUsIHNlZSBub3RlKQorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICBsZW5ndGggb2YgZGF0YSB3cml0dGVuIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICAgZl9ybmcgbWF5IGJlIE5VTEwgaWYgUlNBIGlzIHVzZWQgZm9yIHNpZ25hdHVyZSBhbmQgdGhlCisgKiAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBpcyBtYWRlIG9mZmxpbmUgKG90aGVyd2lzZSBmX3JuZyBpcyBkZXNpcmFibGUKKyAqICAgICAgICAgICAgICAgICAgZm9yIGNvdW50ZXJtZWFzdXJlcyBhZ2FpbnN0IHRpbWluZyBhdHRhY2tzKS4KKyAqICAgICAgICAgICAgICAgICAgRUNEU0Egc2lnbmF0dXJlcyBhbHdheXMgcmVxdWlyZSBhIG5vbi1OVUxMIGZfcm5nLgorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2RlciggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgV3JpdGUgYSBidWlsdCB1cCBjZXJ0aWZpY2F0ZSB0byBhIFg1MDkgUEVNIHN0cmluZworICoKKyAqIFxwYXJhbSBjdHggICAgICAgY2VydGlmaWNhdGUgdG8gd3JpdGUgYXdheQorICogXHBhcmFtIGJ1ZiAgICAgICBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIFxwYXJhbSBzaXplICAgICAgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBccGFyYW0gZl9ybmcgICAgIFJORyBmdW5jdGlvbiAoZm9yIHNpZ25hdHVyZSwgc2VlIG5vdGUpCisgKiBccGFyYW0gcF9ybmcgICAgIFJORyBwYXJhbWV0ZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBlcnJvciBjb2RlCisgKgorICogXG5vdGUgICAgICAgICAgICBmX3JuZyBtYXkgYmUgTlVMTCBpZiBSU0EgaXMgdXNlZCBmb3Igc2lnbmF0dXJlIGFuZCB0aGUKKyAqICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIGlzIG1hZGUgb2ZmbGluZSAob3RoZXJ3aXNlIGZfcm5nIGlzIGRlc2lyYWJsZQorICogICAgICAgICAgICAgICAgICBmb3IgY291bnRlcm1lYXN1cmVzIGFnYWluc3QgdGltaW5nIGF0dGFja3MpLgorICogICAgICAgICAgICAgICAgICBFQ0RTQSBzaWduYXR1cmVzIGFsd2F5cyByZXF1aXJlIGEgbm9uLU5VTEwgZl9ybmcuCisgKi8KK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfcGVtKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9XUklURV9DICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBtYmVkdGxzX3g1MDlfY3J0LmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jc3IuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveDUwOV9jc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTk4NDNjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2luY2x1ZGUvbWJlZHRscy94NTA5X2Nzci5oCkBAIC0wLDAgKzEsMjk4IEBACisvKioKKyAqIFxmaWxlIHg1MDlfY3NyLmgKKyAqCisgKiBcYnJpZWYgWC41MDkgY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0IHBhcnNpbmcgYW5kIHdyaXRpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19YNTA5X0NTUl9ICisjZGVmaW5lIE1CRURUTFNfWDUwOV9DU1JfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIng1MDkuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxhZGR0b2dyb3VwIHg1MDlfbW9kdWxlCisgKiBceyAqLworCisvKioKKyAqIFxuYW1lIFN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0cyAoQ1NSKQorICogXHsKKyAqLworCisvKioKKyAqIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCAoQ1NSKSBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IG1iZWR0bHNfeDUwOV9jc3IKK3sKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHJhdzsgICAgICAgICAgIC8qKjwgVGhlIHJhdyBDU1IgZGF0YSAoREVSKS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfYnVmIGNyaTsgICAgICAgICAgIC8qKjwgVGhlIHJhdyBDZXJ0aWZpY2F0ZVJlcXVlc3RJbmZvIGJvZHkgKERFUikuICovCisKKyAgICBpbnQgdmVyc2lvbjsgICAgICAgICAgICAvKio8IENTUiB2ZXJzaW9uICgxPXYxKS4gKi8KKworICAgIG1iZWR0bHNfeDUwOV9idWYgIHN1YmplY3RfcmF3OyAgLyoqPCBUaGUgcmF3IHN1YmplY3QgZGF0YSAoREVSKS4gKi8KKyAgICBtYmVkdGxzX3g1MDlfbmFtZSBzdWJqZWN0OyAgICAgIC8qKjwgVGhlIHBhcnNlZCBzdWJqZWN0IGRhdGEgKG5hbWVkIGluZm9ybWF0aW9uIG9iamVjdCkuICovCisKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7ICAgICAgICAgIC8qKjwgQ29udGFpbmVyIGZvciB0aGUgcHVibGljIGtleSBjb250ZXh0LiAqLworCisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWdfb2lkOworICAgIG1iZWR0bHNfeDUwOV9idWYgc2lnOworICAgIG1iZWR0bHNfbWRfdHlwZV90IHNpZ19tZDsgICAgICAgLyoqPCBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgTUQgYWxnb3JpdGhtIG9mIHRoZSBzaWduYXR1cmUgYWxnb3JpdGhtLCBlLmcuIE1CRURUTFNfTURfU0hBMjU2ICovCisgICAgbWJlZHRsc19wa190eXBlX3Qgc2lnX3BrOyAgICAgICAvKio8IEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQdWJsaWMgS2V5IGFsZ29yaXRobSBvZiB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSwgZS5nLiBNQkVEVExTX1BLX1JTQSAqLworICAgIHZvaWQgKnNpZ19vcHRzOyAgICAgICAgIC8qKjwgU2lnbmF0dXJlIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCgpLCBlLmcuIGZvciBSU0FTU0EtUFNTICovCit9CittYmVkdGxzX3g1MDlfY3NyOworCisvKioKKyAqIENvbnRhaW5lciBmb3Igd3JpdGluZyBhIENTUgorICovCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgKmtleTsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqc3ViamVjdDsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGc7CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmV4dGVuc2lvbnM7Cit9CittYmVkdGxzX3g1MDl3cml0ZV9jc3I7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIExvYWQgYSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QgKENTUikgaW4gREVSIGZvcm1hdAorICoKKyAqIFxub3RlICAgICAgICAgICBDU1IgYXR0cmlidXRlcyAoaWYgYW55KSBhcmUgY3VycmVudGx5IHNpbGVudGx5IGlnbm9yZWQuCisgKgorICogXHBhcmFtIGNzciAgICAgIENTUiBjb250ZXh0IHRvIGZpbGwKKyAqIFxwYXJhbSBidWYgICAgICBidWZmZXIgaG9sZGluZyB0aGUgQ1JMIGRhdGEKKyAqIFxwYXJhbSBidWZsZW4gICBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFg1MDkgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9kZXIoIG1iZWR0bHNfeDUwOV9jc3IgKmNzciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBMb2FkIGEgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpLCBERVIgb3IgUEVNIGZvcm1hdAorICoKKyAqIFxub3RlICAgICAgICAgICBTZWUgbm90ZXMgZm9yIFxjIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyKCkKKyAqCisgKiBccGFyYW0gY3NyICAgICAgQ1NSIGNvbnRleHQgdG8gZmlsbAorICogXHBhcmFtIGJ1ZiAgICAgIGJ1ZmZlciBob2xkaW5nIHRoZSBDUkwgZGF0YQorICogXHBhcmFtIGJ1ZmxlbiAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSBmb3IgUEVNIGRhdGEpCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBzcGVjaWZpYyBYNTA5IG9yIFBFTSBlcnJvciBjb2RlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlKCBtYmVkdGxzX3g1MDlfY3NyICpjc3IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoqCisgKiBcYnJpZWYgICAgICAgICAgTG9hZCBhIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCAoQ1NSKQorICoKKyAqIFxub3RlICAgICAgICAgICBTZWUgbm90ZXMgZm9yIFxjIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2UoKQorICoKKyAqIFxwYXJhbSBjc3IgICAgICBDU1IgY29udGV4dCB0byBmaWxsCisgKiBccGFyYW0gcGF0aCAgICAgZmlsZW5hbWUgdG8gcmVhZCB0aGUgQ1NSIGZyb20KKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIFg1MDkgb3IgUEVNIGVycm9yIGNvZGUKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZSggbWJlZHRsc194NTA5X2NzciAqY3NyLCBjb25zdCBjaGFyICpwYXRoICk7CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisvKioKKyAqIFxicmllZiAgICAgICAgICBSZXR1cm5zIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZQorICogICAgICAgICAgICAgICAgIENTUi4KKyAqCisgKiBccGFyYW0gYnVmICAgICAgQnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgTWF4aW11bSBzaXplIG9mIGJ1ZmZlcgorICogXHBhcmFtIHByZWZpeCAgIEEgbGluZSBwcmVmaXgKKyAqIFxwYXJhbSBjc3IgICAgICBUaGUgWDUwOSBDU1IgdG8gcmVwcmVzZW50CisgKgorICogXHJldHVybiAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB3cml0dGVuIChub3QgaW5jbHVkaW5nIHRoZQorICogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgbnVsIGJ5dGUpLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3NyX2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3NyICpjc3IgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgSW5pdGlhbGl6ZSBhIENTUgorICoKKyAqIFxwYXJhbSBjc3IgICAgICBDU1IgdG8gaW5pdGlhbGl6ZQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jc3JfaW5pdCggbWJlZHRsc194NTA5X2NzciAqY3NyICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFVuYWxsb2NhdGUgYWxsIENTUiBkYXRhCisgKgorICogXHBhcmFtIGNzciAgICAgIENTUiB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBtYmVkdGxzX3g1MDlfY3NyICpjc3IgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgKi8KKworLyogXH0gbmFtZSAqLworLyogXH0gYWRkdG9ncm91cCB4NTA5X21vZHVsZSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MpCisvKioKKyAqIFxicmllZiAgICAgICAgICAgSW5pdGlhbGl6ZSBhIENTUiBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDU1IgY29udGV4dCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIHN1YmplY3QgbmFtZSBmb3IgYSBDU1IKKyAqICAgICAgICAgICAgICAgICAgU3ViamVjdCBuYW1lcyBzaG91bGQgY29udGFpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0CisgKiAgICAgICAgICAgICAgICAgIG9mIE9JRCB0eXBlcyBhbmQgdmFsdWVzOgorICogICAgICAgICAgICAgICAgICBlLmcuICJDPVVLLE89QVJNLENOPW1iZWQgVExTIFNlcnZlciAxIgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgICAgIENTUiBjb250ZXh0IHRvIHVzZQorICogXHBhcmFtIHN1YmplY3RfbmFtZSAgc3ViamVjdCBuYW1lIHRvIHNldAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWJqZWN0IG5hbWUgd2FzIHBhcnNlZCBzdWNjZXNzZnVsbHksIG9yCisgKiAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgZXJyb3IgY29kZQorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9zdWJqZWN0X25hbWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3ViamVjdF9uYW1lICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIGtleSBmb3IgYSBDU1IgKHB1YmxpYyBrZXkgd2lsbCBiZSBpbmNsdWRlZCwKKyAqICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBrZXkgdXNlZCB0byBzaWduIHRoZSBDU1Igd2hlbiB3cml0aW5nIGl0KQorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIGNvbnRleHQgdG8gdXNlCisgKiBccGFyYW0ga2V5ICAgICAgIEFzeW1ldHJpYyBrZXkgdG8gaW5jbHVkZQorICovCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5KCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgIFNldCB0aGUgTUQgYWxnb3JpdGhtIHRvIHVzZSBmb3IgdGhlIHNpZ25hdHVyZQorICogICAgICAgICAgICAgICAgICAoZS5nLiBNQkVEVExTX01EX1NIQTEpCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDU1IgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBtZF9hbGcgICAgTUQgYWxnb3JpdGhtIHRvIHVzZQorICovCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbWRfYWxnKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBTZXQgdGhlIEtleSBVc2FnZSBFeHRlbnNpb24gZmxhZ3MKKyAqICAgICAgICAgICAgICAgICAgKGUuZy4gTUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFIHwgTUJFRFRMU19YNTA5X0tVX0tFWV9DRVJUX1NJR04pCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDU1IgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBrZXlfdXNhZ2Uga2V5IHVzYWdlIGZsYWdzIHRvIHNldAorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRAorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9rZXlfdXNhZ2UoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LCB1bnNpZ25lZCBjaGFyIGtleV91c2FnZSApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgU2V0IHRoZSBOZXRzY2FwZSBDZXJ0IFR5cGUgZmxhZ3MKKyAqICAgICAgICAgICAgICAgICAgKGUuZy4gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UIHwgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTCkKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgICAgICBDU1IgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBuc19jZXJ0X3R5cGUgIE5ldHNjYXBlIENlcnQgVHlwZSBmbGFncyB0byBzZXQKKyAqCisgKiBccmV0dXJuICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBHZW5lcmljIGZ1bmN0aW9uIHRvIGFkZCB0byBvciByZXBsYWNlIGFuIGV4dGVuc2lvbiBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgQ1NSCisgKgorICogXHBhcmFtIGN0eCAgICAgICBDU1IgY29udGV4dCB0byB1c2UKKyAqIFxwYXJhbSBvaWQgICAgICAgT0lEIG9mIHRoZSBleHRlbnNpb24KKyAqIFxwYXJhbSBvaWRfbGVuICAgbGVuZ3RoIG9mIHRoZSBPSUQKKyAqIFxwYXJhbSB2YWwgICAgICAgdmFsdWUgb2YgdGhlIGV4dGVuc2lvbiBPQ1RFVCBTVFJJTkcKKyAqIFxwYXJhbSB2YWxfbGVuICAgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBkYXRhCisgKgorICogXHJldHVybiAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQKKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfZXh0ZW5zaW9uKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsIHNpemVfdCB2YWxfbGVuICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBGcmVlIHRoZSBjb250ZW50cyBvZiBhIENTUiBjb250ZXh0CisgKgorICogXHBhcmFtIGN0eCAgICAgICBDU1IgY29udGV4dCB0byBmcmVlCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2ZyZWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4ICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIENTUiAoQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0KSB0byBhCisgKiAgICAgICAgICAgICAgICAgIERFUiBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgTm90ZTogZGF0YSBpcyB3cml0dGVuIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciEgVXNlIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZXJlIHlvdSBzaG91bGQgc3RhcnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGJ1ZmZlcgorICoKKyAqIFxwYXJhbSBjdHggICAgICAgQ1NSIHRvIHdyaXRlIGF3YXkKKyAqIFxwYXJhbSBidWYgICAgICAgYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBccGFyYW0gc2l6ZSAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogXHBhcmFtIGZfcm5nICAgICBSTkcgZnVuY3Rpb24gKGZvciBzaWduYXR1cmUsIHNlZSBub3RlKQorICogXHBhcmFtIHBfcm5nICAgICBSTkcgcGFyYW1ldGVyCisgKgorICogXHJldHVybiAgICAgICAgICBsZW5ndGggb2YgZGF0YSB3cml0dGVuIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgc3BlY2lmaWMKKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZQorICoKKyAqIFxub3RlICAgICAgICAgICAgZl9ybmcgbWF5IGJlIE5VTEwgaWYgUlNBIGlzIHVzZWQgZm9yIHNpZ25hdHVyZSBhbmQgdGhlCisgKiAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBpcyBtYWRlIG9mZmxpbmUgKG90aGVyd2lzZSBmX3JuZyBpcyBkZXNpcmFibGUKKyAqICAgICAgICAgICAgICAgICAgZm9yIGNvdW50ZXJtZWFzdXJlcyBhZ2FpbnN0IHRpbWluZyBhdHRhY2tzKS4KKyAqICAgICAgICAgICAgICAgICAgRUNEU0Egc2lnbmF0dXJlcyBhbHdheXMgcmVxdWlyZSBhIG5vbi1OVUxMIGZfcm5nLgorICovCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlciggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKy8qKgorICogXGJyaWVmICAgICAgICAgICBXcml0ZSBhIENTUiAoQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0KSB0byBhCisgKiAgICAgICAgICAgICAgICAgIFBFTSBzdHJpbmcKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgIENTUiB0byB3cml0ZSBhd2F5CisgKiBccGFyYW0gYnVmICAgICAgIGJ1ZmZlciB0byB3cml0ZSB0bworICogXHBhcmFtIHNpemUgICAgICBzaXplIG9mIHRoZSBidWZmZXIKKyAqIFxwYXJhbSBmX3JuZyAgICAgUk5HIGZ1bmN0aW9uIChmb3Igc2lnbmF0dXJlLCBzZWUgbm90ZSkKKyAqIFxwYXJhbSBwX3JuZyAgICAgUk5HIHBhcmFtZXRlcgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLCBvciBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSAgICAgICAgICAgIGZfcm5nIG1heSBiZSBOVUxMIGlmIFJTQSBpcyB1c2VkIGZvciBzaWduYXR1cmUgYW5kIHRoZQorICogICAgICAgICAgICAgICAgICBzaWduYXR1cmUgaXMgbWFkZSBvZmZsaW5lIChvdGhlcndpc2UgZl9ybmcgaXMgZGVzaXJhYmxlCisgKiAgICAgICAgICAgICAgICAgIGZvciBjb3VudGVybWVhc3VyZXMgYWdhaW5zdCB0aW1pbmcgYXR0YWNrcykuCisgKiAgICAgICAgICAgICAgICAgIEVDRFNBIHNpZ25hdHVyZXMgYWx3YXlzIHJlcXVpcmUgYSBub24tTlVMTCBmX3JuZy4KKyAqLworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9wZW0oIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICk7CisjZW5kaWYgLyogTUJFRFRMU19QRU1fV1JJVEVfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbWJlZHRsc194NTA5X2Nzci5oICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3h0ZWEuaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9pbmNsdWRlL21iZWR0bHMveHRlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzNmODQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vaW5jbHVkZS9tYmVkdGxzL3h0ZWEuaApAQCAtMCwwICsxLDEzOSBAQAorLyoqCisgKiBcZmlsZSB4dGVhLmgKKyAqCisgKiBcYnJpZWYgWFRFQSBibG9jayBjaXBoZXIgKDMyLWJpdCkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKyNpZm5kZWYgTUJFRFRMU19YVEVBX0gKKyNkZWZpbmUgTUJFRFRMU19YVEVBX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBNQkVEVExTX1hURUFfRU5DUllQVCAgICAgMQorI2RlZmluZSBNQkVEVExTX1hURUFfREVDUllQVCAgICAgMAorCisjZGVmaW5lIE1CRURUTFNfRVJSX1hURUFfSU5WQUxJRF9JTlBVVF9MRU5HVEggICAgICAgICAgICAgLTB4MDAyOCAgLyoqPCBUaGUgZGF0YSBpbnB1dCBoYXMgYW4gaW52YWxpZCBsZW5ndGguICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1hURUFfQUxUKQorLy8gUmVndWxhciBpbXBsZW1lbnRhdGlvbgorLy8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIFxicmllZiAgICAgICAgICBYVEVBIGNvbnRleHQgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3Qga1s0XTsgICAgICAgLyohPCBrZXkgKi8KK30KK21iZWR0bHNfeHRlYV9jb250ZXh0OworCisvKioKKyAqIFxicmllZiAgICAgICAgICBJbml0aWFsaXplIFhURUEgY29udGV4dAorICoKKyAqIFxwYXJhbSBjdHggICAgICBYVEVBIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqLwordm9pZCBtYmVkdGxzX3h0ZWFfaW5pdCggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBDbGVhciBYVEVBIGNvbnRleHQKKyAqCisgKiBccGFyYW0gY3R4ICAgICAgWFRFQSBjb250ZXh0IHRvIGJlIGNsZWFyZWQKKyAqLwordm9pZCBtYmVkdGxzX3h0ZWFfZnJlZSggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICBYVEVBIGtleSBzY2hlZHVsZQorICoKKyAqIFxwYXJhbSBjdHggICAgICBYVEVBIGNvbnRleHQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIFxwYXJhbSBrZXkgICAgICB0aGUgc2VjcmV0IGtleQorICovCit2b2lkIG1iZWR0bHNfeHRlYV9zZXR1cCggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgIFhURUEgY2lwaGVyIGZ1bmN0aW9uCisgKgorICogXHBhcmFtIGN0eCAgICAgIFhURUEgY29udGV4dAorICogXHBhcmFtIG1vZGUgICAgIE1CRURUTFNfWFRFQV9FTkNSWVBUIG9yIE1CRURUTFNfWFRFQV9ERUNSWVBUCisgKiBccGFyYW0gaW5wdXQgICAgOC1ieXRlIGlucHV0IGJsb2NrCisgKiBccGFyYW0gb3V0cHV0ICAgOC1ieXRlIG91dHB1dCBibG9jaworICoKKyAqIFxyZXR1cm4gICAgICAgICAwIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzhdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs4XSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qKgorICogXGJyaWVmICAgICAgICAgIFhURUEgQ0JDIGNpcGhlciBmdW5jdGlvbgorICoKKyAqIFxwYXJhbSBjdHggICAgICBYVEVBIGNvbnRleHQKKyAqIFxwYXJhbSBtb2RlICAgICBNQkVEVExTX1hURUFfRU5DUllQVCBvciBNQkVEVExTX1hURUFfREVDUllQVAorICogXHBhcmFtIGxlbmd0aCAgIHRoZSBsZW5ndGggb2YgaW5wdXQsIG11bHRpcGxlIG9mIDgKKyAqIFxwYXJhbSBpdiAgICAgICBpbml0aWFsaXphdGlvbiB2ZWN0b3IgZm9yIENCQyBtb2RlCisgKiBccGFyYW0gaW5wdXQgICAgaW5wdXQgYmxvY2sKKyAqIFxwYXJhbSBvdXRwdXQgICBvdXRwdXQgYmxvY2sKKyAqCisgKiBccmV0dXJuICAgICAgICAgMCBpZiBzdWNjZXNzZnVsLAorICogICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1hURUFfSU5WQUxJRF9JTlBVVF9MRU5HVEggaWYgdGhlIGxlbmd0aCAlIDggIT0gMAorICovCitpbnQgbWJlZHRsc194dGVhX2NyeXB0X2NiYyggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbOF0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbHNlICAvKiBNQkVEVExTX1hURUFfQUxUICovCisjaW5jbHVkZSAieHRlYV9hbHQuaCIKKyNlbmRpZiAvKiBNQkVEVExTX1hURUFfQUxUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgQ2hlY2t1cCByb3V0aW5lCisgKgorICogXHJldHVybiAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgMSBpZiB0aGUgdGVzdCBmYWlsZWQKKyAqLworaW50IG1iZWR0bHNfeHRlYV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiB4dGVhLmggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MmRkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTYyIEBACitvcHRpb24oVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkgIkJ1aWxkIG1iZWQgVExTIHN0YXRpYyBsaWJyYXJ5LiIgT04pCitvcHRpb24oVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkgIkJ1aWxkIG1iZWQgVExTIHNoYXJlZCBsaWJyYXJ5LiIgT0ZGKQorb3B0aW9uKExJTktfV0lUSF9QVEhSRUFEICJFeHBsaWNpdGx5IGxpbmsgbWJlZCBUTFMgbGlicmFyeSB0byBwdGhyZWFkLiIgT0ZGKQorCitzZXQoc3JjX2NyeXB0bworICAgIGFlcy5jCisgICAgYWVzbmkuYworICAgIGFyYzQuYworICAgIGFzbjFwYXJzZS5jCisgICAgYXNuMXdyaXRlLmMKKyAgICBiYXNlNjQuYworICAgIGJpZ251bS5jCisgICAgYmxvd2Zpc2guYworICAgIGNhbWVsbGlhLmMKKyAgICBjY20uYworICAgIGNpcGhlci5jCisgICAgY2lwaGVyX3dyYXAuYworICAgIGNtYWMuYworICAgIGN0cl9kcmJnLmMKKyAgICBkZXMuYworICAgIGRobS5jCisgICAgZWNkaC5jCisgICAgZWNkc2EuYworICAgIGVjanBha2UuYworICAgIGVjcC5jCisgICAgZWNwX2N1cnZlcy5jCisgICAgZW50cm9weS5jCisgICAgZW50cm9weV9wb2xsLmMKKyAgICBlcnJvci5jCisgICAgZ2NtLmMKKyAgICBoYXZlZ2UuYworICAgIGhtYWNfZHJiZy5jCisgICAgbWQuYworICAgIG1kMi5jCisgICAgbWQ0LmMKKyAgICBtZDUuYworICAgIG1kX3dyYXAuYworICAgIG1lbW9yeV9idWZmZXJfYWxsb2MuYworICAgIG9pZC5jCisgICAgcGFkbG9jay5jCisgICAgcGVtLmMKKyAgICBway5jCisgICAgcGtfd3JhcC5jCisgICAgcGtjczEyLmMKKyAgICBwa2NzNS5jCisgICAgcGtwYXJzZS5jCisgICAgcGt3cml0ZS5jCisgICAgcGxhdGZvcm0uYworICAgIHJpcGVtZDE2MC5jCisgICAgcnNhLmMKKyAgICBzaGExLmMKKyAgICBzaGEyNTYuYworICAgIHNoYTUxMi5jCisgICAgdGhyZWFkaW5nLmMKKyAgICB0aW1pbmcuYworICAgIHZlcnNpb24uYworICAgIHZlcnNpb25fZmVhdHVyZXMuYworICAgIHh0ZWEuYworKQorCitzZXQoc3JjX3g1MDkKKyAgICBjZXJ0cy5jCisgICAgcGtjczExLmMKKyAgICB4NTA5LmMKKyAgICB4NTA5X2NyZWF0ZS5jCisgICAgeDUwOV9jcmwuYworICAgIHg1MDlfY3J0LmMKKyAgICB4NTA5X2Nzci5jCisgICAgeDUwOXdyaXRlX2NydC5jCisgICAgeDUwOXdyaXRlX2Nzci5jCispCisKK3NldChzcmNfdGxzCisgICAgZGVidWcuYworICAgIG5ldF9zb2NrZXRzLmMKKyAgICBzc2xfY2FjaGUuYworICAgIHNzbF9jaXBoZXJzdWl0ZXMuYworICAgIHNzbF9jbGkuYworICAgIHNzbF9jb29raWUuYworICAgIHNzbF9zcnYuYworICAgIHNzbF90aWNrZXQuYworICAgIHNzbF90bHMuYworKQorCitpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKKyAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIikKK2VuZGlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDKQorCitpZihDTUFLRV9DT01QSUxFUl9JU19DTEFORykKKyAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XZG9jdW1lbnRhdGlvbiAtV25vLWRvY3VtZW50YXRpb24tZGVwcmVjYXRlZC1zeW5jIC1XdW5yZWFjaGFibGUtY29kZSIpCitlbmRpZihDTUFLRV9DT01QSUxFUl9JU19DTEFORykKKworaWYoV0lOMzIpCisgICAgc2V0KGxpYnMgJHtsaWJzfSB3czJfMzIpCitlbmRpZihXSU4zMikKKworaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKyAgICBzZXQobGlicyAke2xpYnN9IHBrY3MxMS1oZWxwZXIpCitlbmRpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorCitpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorICAgIHNldChsaWJzICR7bGlic30gJHtaTElCX0xJQlJBUklFU30pCitlbmRpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorCitpZihMSU5LX1dJVEhfUFRIUkVBRCkKKyAgICBzZXQobGlicyAke2xpYnN9IHB0aHJlYWQpCitlbmRpZigpCisKK2lmIChOT1QgVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkgQU5EIE5PVCBVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOZWVkIHRvIGNob29zZSBzdGF0aWMgb3Igc2hhcmVkIG1iZWR0bHMgYnVpbGQhIikKK2VuZGlmKE5PVCBVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSBBTkQgTk9UIFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZKQorCitpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSBBTkQgVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCisgICAgc2V0KG1iZWR0bHNfc3RhdGljX3RhcmdldCAibWJlZHRsc19zdGF0aWMiKQorICAgIHNldChtYmVkeDUwOV9zdGF0aWNfdGFyZ2V0ICJtYmVkeDUwOV9zdGF0aWMiKQorICAgIHNldChtYmVkY3J5cHRvX3N0YXRpY190YXJnZXQgIm1iZWRjcnlwdG9fc3RhdGljIikKK2Vsc2VpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSkKKyAgICBzZXQobWJlZHRsc19zdGF0aWNfdGFyZ2V0ICJtYmVkdGxzIikKKyAgICBzZXQobWJlZHg1MDlfc3RhdGljX3RhcmdldCAibWJlZHg1MDkiKQorICAgIHNldChtYmVkY3J5cHRvX3N0YXRpY190YXJnZXQgIm1iZWRjcnlwdG8iKQorZW5kaWYoKQorCitpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSkKKyAgICBhZGRfbGlicmFyeSgke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gU1RBVElDICR7c3JjX2NyeXB0b30pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIG1iZWRjcnlwdG8pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSAke2xpYnN9KQorCisgICAgYWRkX2xpYnJhcnkoJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSBTVEFUSUMgJHtzcmNfeDUwOX0pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0gUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBtYmVkeDUwOSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSAke2xpYnN9ICR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSkKKworICAgIGFkZF9saWJyYXJ5KCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSBTVEFUSUMgJHtzcmNfdGxzfSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHttYmVkdGxzX3N0YXRpY190YXJnZXR9IFBST1BFUlRJRVMgT1VUUFVUX05BTUUgbWJlZHRscykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkdGxzX3N0YXRpY190YXJnZXR9ICR7bGlic30gJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSkKKworICAgIGluc3RhbGwoVEFSR0VUUyAke21iZWR0bHNfc3RhdGljX3RhcmdldH0gJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSAke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0KKyAgICAgICAgICAgIERFU1RJTkFUSU9OICR7TElCX0lOU1RBTExfRElSfQorICAgICAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCitlbmRpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSkKKworaWYoVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCisgICAgYWRkX2xpYnJhcnkobWJlZGNyeXB0byBTSEFSRUQgJHtzcmNfY3J5cHRvfSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWJlZGNyeXB0byBQUk9QRVJUSUVTIFZFUlNJT04gMi40LjEgU09WRVJTSU9OIDApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1iZWRjcnlwdG8gJHtsaWJzfSkKKworICAgIGFkZF9saWJyYXJ5KG1iZWR4NTA5IFNIQVJFRCAke3NyY194NTA5fSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWJlZHg1MDkgUFJPUEVSVElFUyBWRVJTSU9OIDIuNC4xIFNPVkVSU0lPTiAwKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYmVkeDUwOSAke2xpYnN9IG1iZWRjcnlwdG8pCisKKyAgICBhZGRfbGlicmFyeShtYmVkdGxzIFNIQVJFRCAke3NyY190bHN9KQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhtYmVkdGxzIFBST1BFUlRJRVMgVkVSU0lPTiAyLjQuMSBTT1ZFUlNJT04gMTApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1iZWR0bHMgJHtsaWJzfSBtYmVkeDUwOSkKKworICAgIGluc3RhbGwoVEFSR0VUUyBtYmVkdGxzIG1iZWR4NTA5IG1iZWRjcnlwdG8KKyAgICAgICAgICAgIERFU1RJTkFUSU9OICR7TElCX0lOU1RBTExfRElSfQorICAgICAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCitlbmRpZihVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKKworYWRkX2N1c3RvbV90YXJnZXQobGliIERFUEVORFMgbWJlZGNyeXB0byBtYmVkeDUwOSBtYmVkdGxzKQoraWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkgQU5EIFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZKQorICAgIGFkZF9kZXBlbmRlbmNpZXMobGliIG1iZWRjcnlwdG9fc3RhdGljIG1iZWR4NTA5X3N0YXRpYyBtYmVkdGxzX3N0YXRpYykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L01ha2VmaWxlIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmOTIzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L01ha2VmaWxlCkBAIC0wLDAgKzEsMTY5IEBACisKKyMgQWxzbyBzZWUgImluY2x1ZGUvbWJlZHRscy9jb25maWcuaCIKKworQ0ZMQUdTCT89IC1PMgorV0FSTklOR19DRkxBR1MgPz0gIC1XYWxsIC1XIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CitMREZMQUdTID89CisKK0xPQ0FMX0NGTEFHUyA9ICQoV0FSTklOR19DRkxBR1MpIC1JLi4vaW5jbHVkZSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CitMT0NBTF9MREZMQUdTID0KKworaWZkZWYgREVCVUcKK0xPQ0FMX0NGTEFHUyArPSAtZzMKK2VuZGlmCisKKyMgTWljcm9CbGF6ZSBzcGVjaWZpYyBvcHRpb25zOgorIyBDRkxBR1MgKz0gLW1uby14bC1zb2Z0LW11bCAtbXhsLWJhcnJlbC1zaGlmdAorCisjIFRvIGNvbXBpbGUgb24gUGxhbjk6CisjIENGTEFHUyArPSAtRF9CU0RfRVhURU5TSU9OCisKKyMgaWYgd2VyZSBydW5uaW5nIG9uIFdpbmRvd3MgYnVpbGQgZm9yIFdpbmRvd3MKK2lmZGVmIFdJTkRPV1MKK1dJTkRPV1NfQlVJTEQ9MQorZW5kaWYKKworIyBUbyBjb21waWxlIGFzIGEgc2hhcmVkIGxpYnJhcnk6CitpZmRlZiBTSEFSRUQKKyMgYWxsIGNvZGUgaXMgcG9zaXRpb24taW5kZXAgd2l0aCBtaW5ndywgYXZvaWQgd2FybmluZyBhYm91dCB1c2VsZXNzIGZsYWcKK2lmbmRlZiBXSU5ET1dTX0JVSUxECitMT0NBTF9DRkxBR1MgKz0gLWZQSUMgLWZwaWMKK2VuZGlmCitlbmRpZgorCitTT0VYVF9UTFM9c28uMTAKK1NPRVhUX1g1MDk9c28uMAorU09FWFRfQ1JZUFRPPXNvLjAKKworRExFWFQ9c28KKyMgT1NYIHNoYXJlZCBsaWJyYXJ5IGV4dGVuc2lvbjoKKyMgRExFWFQ9ZHlsaWIKKworIyBXaW5kb3dzIHNoYXJlZCBsaWJyYXJ5IGV4dGVuc2lvbjoKK2lmZGVmIFdJTkRPV1NfQlVJTEQKK0RMRVhUPWRsbAorZW5kaWYKKworT0JKU19DUllQVE89CWFlcy5vCQlhZXNuaS5vCQlhcmM0Lm8JCVwKKwkJYXNuMXBhcnNlLm8JYXNuMXdyaXRlLm8JYmFzZTY0Lm8JXAorCQliaWdudW0ubwlibG93ZmlzaC5vCWNhbWVsbGlhLm8JXAorCQljY20ubwkJY2lwaGVyLm8JY2lwaGVyX3dyYXAubwlcCisJCWNtYWMubwkJY3RyX2RyYmcubwlkZXMubwkJXAorCQlkaG0ubwkJZWNkaC5vCQllY2RzYS5vCQlcCisJCWVjanBha2UubwllY3AubwkJCQlcCisJCWVjcF9jdXJ2ZXMubwllbnRyb3B5Lm8JZW50cm9weV9wb2xsLm8JXAorCQllcnJvci5vCQlnY20ubwkJaGF2ZWdlLm8JXAorCQlobWFjX2RyYmcubwltZC5vCQltZDIubwkJXAorCQltZDQubwkJbWQ1Lm8JCW1kX3dyYXAubwlcCisJCW1lbW9yeV9idWZmZXJfYWxsb2MubwkJb2lkLm8JCVwKKwkJcGFkbG9jay5vCXBlbS5vCQlway5vCQlcCisJCXBrX3dyYXAubwlwa2NzMTIubwlwa2NzNS5vCQlcCisJCXBrcGFyc2Uubwlwa3dyaXRlLm8JcGxhdGZvcm0ubwlcCisJCXJpcGVtZDE2MC5vCXJzYS5vCQlzaGExLm8JCVwKKwkJc2hhMjU2Lm8Jc2hhNTEyLm8JdGhyZWFkaW5nLm8JXAorCQl0aW1pbmcubwl2ZXJzaW9uLm8JCQlcCisJCXZlcnNpb25fZmVhdHVyZXMubwkJeHRlYS5vCisKK09CSlNfWDUwOT0JY2VydHMubwkJcGtjczExLm8JeDUwOS5vCQlcCisJCXg1MDlfY3JlYXRlLm8JeDUwOV9jcmwubwl4NTA5X2NydC5vCVwKKwkJeDUwOV9jc3Iubwl4NTA5d3JpdGVfY3J0Lm8JeDUwOXdyaXRlX2Nzci5vCisKK09CSlNfVExTPQlkZWJ1Zy5vCQluZXRfc29ja2V0cy5vCQlcCisJCXNzbF9jYWNoZS5vCXNzbF9jaXBoZXJzdWl0ZXMubwlcCisJCXNzbF9jbGkubwlzc2xfY29va2llLm8JCVwKKwkJc3NsX3Nydi5vCXNzbF90aWNrZXQubwkJXAorCQlzc2xfdGxzLm8KKworLlNJTEVOVDoKKworLlBIT05ZOiBhbGwgc3RhdGljIHNoYXJlZCBjbGVhbgorCitpZm5kZWYgU0hBUkVECithbGw6IHN0YXRpYworZWxzZQorYWxsOiBzaGFyZWQgc3RhdGljCitlbmRpZgorCitzdGF0aWM6IGxpYm1iZWRjcnlwdG8uYSBsaWJtYmVkeDUwOS5hIGxpYm1iZWR0bHMuYQorCitzaGFyZWQ6IGxpYm1iZWRjcnlwdG8uJChETEVYVCkgbGlibWJlZHg1MDkuJChETEVYVCkgbGlibWJlZHRscy4kKERMRVhUKQorCisjIHRscworbGlibWJlZHRscy5hOiAkKE9CSlNfVExTKQorCWVjaG8gIiAgQVIgICAgJEAiCisJJChBUikgLXJjICRAICQoT0JKU19UTFMpCisJZWNobyAiICBSTCAgICAkQCIKKwkkKEFSKSAtcyAkQAorCitsaWJtYmVkdGxzLiQoU09FWFRfVExTKTogJChPQkpTX1RMUykgbGlibWJlZHg1MDkuc28KKwllY2hvICIgIExEICAgICRAIgorCSQoQ0MpIC1zaGFyZWQgLVdsLC1zb25hbWUsJEAgLUwuIC1sbWJlZGNyeXB0byAtbG1iZWR4NTA5ICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKE9CSlNfVExTKQorCitsaWJtYmVkdGxzLnNvOiBsaWJtYmVkdGxzLiQoU09FWFRfVExTKQorCWVjaG8gIiAgTE4gICAgJEAgLT4gJDwiCisJbG4gLXNmICQ8ICRACisKK2xpYm1iZWR0bHMuZHlsaWI6ICQoT0JKU19UTFMpCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtZHluYW1pY2xpYiAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChPQkpTX1RMUykKKworbGlibWJlZHRscy5kbGw6ICQoT0JKU19UTFMpIGxpYm1iZWR4NTA5LmRsbAorCWVjaG8gIiAgTEQgICAgJEAiCisJJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCAtV2wsLS1vdXQtaW1wbGliLCRALmEgLW8gJEAgJChPQkpTX1RMUykgLWx3czJfMzIgLWx3aW5tbSAtbGdkaTMyIC1MLiAtbG1iZWRjcnlwdG8gLWxtYmVkeDUwOSAtc3RhdGljLWxpYmdjYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykKKworIyB4NTA5CitsaWJtYmVkeDUwOS5hOiAkKE9CSlNfWDUwOSkKKwllY2hvICIgIEFSICAgICRAIgorCSQoQVIpIC1yYyAkQCAkKE9CSlNfWDUwOSkKKwllY2hvICIgIFJMICAgICRAIgorCSQoQVIpIC1zICRACisKK2xpYm1iZWR4NTA5LiQoU09FWFRfWDUwOSk6ICQoT0JKU19YNTA5KSBsaWJtYmVkY3J5cHRvLnNvCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lLCRAIC1MLiAtbG1iZWRjcnlwdG8gJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoT0JKU19YNTA5KQorCitsaWJtYmVkeDUwOS5zbzogbGlibWJlZHg1MDkuJChTT0VYVF9YNTA5KQorCWVjaG8gIiAgTE4gICAgJEAgLT4gJDwiCisJbG4gLXNmICQ8ICRACisKK2xpYm1iZWR4NTA5LmR5bGliOiAkKE9CSlNfWDUwOSkKKwllY2hvICIgIExEICAgICRAIgorCSQoQ0MpIC1keW5hbWljbGliICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKE9CSlNfWDUwOSkKKworbGlibWJlZHg1MDkuZGxsOiAkKE9CSlNfWDUwOSkgbGlibWJlZGNyeXB0by5kbGwKKwllY2hvICIgIExEICAgICRAIgorCSQoQ0MpIC1zaGFyZWQgLVdsLC1zb25hbWUsJEAgLVdsLC0tb3V0LWltcGxpYiwkQC5hIC1vICRAICQoT0JKU19YNTA5KSAtbHdzMl8zMiAtbHdpbm1tIC1sZ2RpMzIgLUwuIC1sbWJlZGNyeXB0byAtc3RhdGljLWxpYmdjYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykKKworIyBjcnlwdG8KK2xpYm1iZWRjcnlwdG8uYTogJChPQkpTX0NSWVBUTykKKwllY2hvICIgIEFSICAgICRAIgorCSQoQVIpIC1yYyAkQCAkKE9CSlNfQ1JZUFRPKQorCWVjaG8gIiAgUkwgICAgJEAiCisJJChBUikgLXMgJEAKKworbGlibWJlZGNyeXB0by4kKFNPRVhUX0NSWVBUTyk6ICQoT0JKU19DUllQVE8pCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lLCRAICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKE9CSlNfQ1JZUFRPKQorCitsaWJtYmVkY3J5cHRvLnNvOiBsaWJtYmVkY3J5cHRvLiQoU09FWFRfQ1JZUFRPKQorCWVjaG8gIiAgTE4gICAgJEAgLT4gJDwiCisJbG4gLXNmICQ8ICRACisKK2xpYm1iZWRjcnlwdG8uZHlsaWI6ICQoT0JKU19DUllQVE8pCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtZHluYW1pY2xpYiAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChPQkpTX0NSWVBUTykKKworbGlibWJlZGNyeXB0by5kbGw6ICQoT0JKU19DUllQVE8pCisJZWNobyAiICBMRCAgICAkQCIKKwkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lLCRAIC1XbCwtLW91dC1pbXBsaWIsJEAuYSAtbyAkQCAkKE9CSlNfQ1JZUFRPKSAtbHdzMl8zMiAtbHdpbm1tIC1sZ2RpMzIgLXN0YXRpYy1saWJnY2MgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpCisKKy5jLm86CisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIC1jICQ8CisKK2NsZWFuOgoraWZuZGVmIFdJTkRPV1MKKwlybSAtZiAqLm8gbGlibWJlZCoKK2Vsc2UKKwlkZWwgL1EgL0YgKi5vIGxpYm1iZWQqCitlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYWVzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTg2ZGVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYWVzLmMKQEAgLTAsMCArMSwxNDkyIEBACisvKgorICogIEZJUFMtMTk3IGNvbXBsaWFudCBBRVMgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIEFFUyBibG9jayBjaXBoZXIgd2FzIGRlc2lnbmVkIGJ5IFZpbmNlbnQgUmlqbWVuIGFuZCBKb2FuIERhZW1lbi4KKyAqCisgKiAgaHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9hZXMvcmlqbmRhZWwvUmlqbmRhZWwucGRmCisgKiAgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5Ny9maXBzLTE5Ny5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpCisjaW5jbHVkZSAibWJlZHRscy9wYWRsb2NrLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Flc25pLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGxpdHRsZSBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9MRQorI2RlZmluZSBHRVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdICAgICAgICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdIDw8IDI0ICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9MRQorI2RlZmluZSBQVVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgICAgICAgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+ICA4ICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAxNiApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMjQgKSAmIDB4RkYgKTsgICAgXAorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKSAmJiAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODYpIHx8IGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0FMSUdOMTYpICkKK3N0YXRpYyBpbnQgYWVzX3BhZGxvY2tfYWNlID0gLTE7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfUk9NX1RBQkxFUykKKy8qCisgKiBGb3J3YXJkIFMtYm94CisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEZTYlsyNTZdID0KK3sKKyAgICAweDYzLCAweDdDLCAweDc3LCAweDdCLCAweEYyLCAweDZCLCAweDZGLCAweEM1LAorICAgIDB4MzAsIDB4MDEsIDB4NjcsIDB4MkIsIDB4RkUsIDB4RDcsIDB4QUIsIDB4NzYsCisgICAgMHhDQSwgMHg4MiwgMHhDOSwgMHg3RCwgMHhGQSwgMHg1OSwgMHg0NywgMHhGMCwKKyAgICAweEFELCAweEQ0LCAweEEyLCAweEFGLCAweDlDLCAweEE0LCAweDcyLCAweEMwLAorICAgIDB4QjcsIDB4RkQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M0YsIDB4RjcsIDB4Q0MsCisgICAgMHgzNCwgMHhBNSwgMHhFNSwgMHhGMSwgMHg3MSwgMHhEOCwgMHgzMSwgMHgxNSwKKyAgICAweDA0LCAweEM3LCAweDIzLCAweEMzLCAweDE4LCAweDk2LCAweDA1LCAweDlBLAorICAgIDB4MDcsIDB4MTIsIDB4ODAsIDB4RTIsIDB4RUIsIDB4MjcsIDB4QjIsIDB4NzUsCisgICAgMHgwOSwgMHg4MywgMHgyQywgMHgxQSwgMHgxQiwgMHg2RSwgMHg1QSwgMHhBMCwKKyAgICAweDUyLCAweDNCLCAweEQ2LCAweEIzLCAweDI5LCAweEUzLCAweDJGLCAweDg0LAorICAgIDB4NTMsIDB4RDEsIDB4MDAsIDB4RUQsIDB4MjAsIDB4RkMsIDB4QjEsIDB4NUIsCisgICAgMHg2QSwgMHhDQiwgMHhCRSwgMHgzOSwgMHg0QSwgMHg0QywgMHg1OCwgMHhDRiwKKyAgICAweEQwLCAweEVGLCAweEFBLCAweEZCLCAweDQzLCAweDRELCAweDMzLCAweDg1LAorICAgIDB4NDUsIDB4RjksIDB4MDIsIDB4N0YsIDB4NTAsIDB4M0MsIDB4OUYsIDB4QTgsCisgICAgMHg1MSwgMHhBMywgMHg0MCwgMHg4RiwgMHg5MiwgMHg5RCwgMHgzOCwgMHhGNSwKKyAgICAweEJDLCAweEI2LCAweERBLCAweDIxLCAweDEwLCAweEZGLCAweEYzLCAweEQyLAorICAgIDB4Q0QsIDB4MEMsIDB4MTMsIDB4RUMsIDB4NUYsIDB4OTcsIDB4NDQsIDB4MTcsCisgICAgMHhDNCwgMHhBNywgMHg3RSwgMHgzRCwgMHg2NCwgMHg1RCwgMHgxOSwgMHg3MywKKyAgICAweDYwLCAweDgxLCAweDRGLCAweERDLCAweDIyLCAweDJBLCAweDkwLCAweDg4LAorICAgIDB4NDYsIDB4RUUsIDB4QjgsIDB4MTQsIDB4REUsIDB4NUUsIDB4MEIsIDB4REIsCisgICAgMHhFMCwgMHgzMiwgMHgzQSwgMHgwQSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1QywKKyAgICAweEMyLCAweEQzLCAweEFDLCAweDYyLCAweDkxLCAweDk1LCAweEU0LCAweDc5LAorICAgIDB4RTcsIDB4QzgsIDB4MzcsIDB4NkQsIDB4OEQsIDB4RDUsIDB4NEUsIDB4QTksCisgICAgMHg2QywgMHg1NiwgMHhGNCwgMHhFQSwgMHg2NSwgMHg3QSwgMHhBRSwgMHgwOCwKKyAgICAweEJBLCAweDc4LCAweDI1LCAweDJFLCAweDFDLCAweEE2LCAweEI0LCAweEM2LAorICAgIDB4RTgsIDB4REQsIDB4NzQsIDB4MUYsIDB4NEIsIDB4QkQsIDB4OEIsIDB4OEEsCisgICAgMHg3MCwgMHgzRSwgMHhCNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhGNiwgMHgwRSwKKyAgICAweDYxLCAweDM1LCAweDU3LCAweEI5LCAweDg2LCAweEMxLCAweDFELCAweDlFLAorICAgIDB4RTEsIDB4RjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4RDksIDB4OEUsIDB4OTQsCisgICAgMHg5QiwgMHgxRSwgMHg4NywgMHhFOSwgMHhDRSwgMHg1NSwgMHgyOCwgMHhERiwKKyAgICAweDhDLCAweEExLCAweDg5LCAweDBELCAweEJGLCAweEU2LCAweDQyLCAweDY4LAorICAgIDB4NDEsIDB4OTksIDB4MkQsIDB4MEYsIDB4QjAsIDB4NTQsIDB4QkIsIDB4MTYKK307CisKKy8qCisgKiBGb3J3YXJkIHRhYmxlcworICovCisjZGVmaW5lIEZUIFwKK1wKKyAgICBWKEE1LDYzLDYzLEM2KSwgVig4NCw3Qyw3QyxGOCksIFYoOTksNzcsNzcsRUUpLCBWKDhELDdCLDdCLEY2KSwgXAorICAgIFYoMEQsRjIsRjIsRkYpLCBWKEJELDZCLDZCLEQ2KSwgVihCMSw2Riw2RixERSksIFYoNTQsQzUsQzUsOTEpLCBcCisgICAgVig1MCwzMCwzMCw2MCksIFYoMDMsMDEsMDEsMDIpLCBWKEE5LDY3LDY3LENFKSwgVig3RCwyQiwyQiw1NiksIFwKKyAgICBWKDE5LEZFLEZFLEU3KSwgVig2MixENyxENyxCNSksIFYoRTYsQUIsQUIsNEQpLCBWKDlBLDc2LDc2LEVDKSwgXAorICAgIFYoNDUsQ0EsQ0EsOEYpLCBWKDlELDgyLDgyLDFGKSwgVig0MCxDOSxDOSw4OSksIFYoODcsN0QsN0QsRkEpLCBcCisgICAgVigxNSxGQSxGQSxFRiksIFYoRUIsNTksNTksQjIpLCBWKEM5LDQ3LDQ3LDhFKSwgVigwQixGMCxGMCxGQiksIFwKKyAgICBWKEVDLEFELEFELDQxKSwgVig2NyxENCxENCxCMyksIFYoRkQsQTIsQTIsNUYpLCBWKEVBLEFGLEFGLDQ1KSwgXAorICAgIFYoQkYsOUMsOUMsMjMpLCBWKEY3LEE0LEE0LDUzKSwgVig5Niw3Miw3MixFNCksIFYoNUIsQzAsQzAsOUIpLCBcCisgICAgVihDMixCNyxCNyw3NSksIFYoMUMsRkQsRkQsRTEpLCBWKEFFLDkzLDkzLDNEKSwgVig2QSwyNiwyNiw0QyksIFwKKyAgICBWKDVBLDM2LDM2LDZDKSwgVig0MSwzRiwzRiw3RSksIFYoMDIsRjcsRjcsRjUpLCBWKDRGLENDLENDLDgzKSwgXAorICAgIFYoNUMsMzQsMzQsNjgpLCBWKEY0LEE1LEE1LDUxKSwgVigzNCxFNSxFNSxEMSksIFYoMDgsRjEsRjEsRjkpLCBcCisgICAgVig5Myw3MSw3MSxFMiksIFYoNzMsRDgsRDgsQUIpLCBWKDUzLDMxLDMxLDYyKSwgVigzRiwxNSwxNSwyQSksIFwKKyAgICBWKDBDLDA0LDA0LDA4KSwgVig1MixDNyxDNyw5NSksIFYoNjUsMjMsMjMsNDYpLCBWKDVFLEMzLEMzLDlEKSwgXAorICAgIFYoMjgsMTgsMTgsMzApLCBWKEExLDk2LDk2LDM3KSwgVigwRiwwNSwwNSwwQSksIFYoQjUsOUEsOUEsMkYpLCBcCisgICAgVigwOSwwNywwNywwRSksIFYoMzYsMTIsMTIsMjQpLCBWKDlCLDgwLDgwLDFCKSwgVigzRCxFMixFMixERiksIFwKKyAgICBWKDI2LEVCLEVCLENEKSwgVig2OSwyNywyNyw0RSksIFYoQ0QsQjIsQjIsN0YpLCBWKDlGLDc1LDc1LEVBKSwgXAorICAgIFYoMUIsMDksMDksMTIpLCBWKDlFLDgzLDgzLDFEKSwgVig3NCwyQywyQyw1OCksIFYoMkUsMUEsMUEsMzQpLCBcCisgICAgVigyRCwxQiwxQiwzNiksIFYoQjIsNkUsNkUsREMpLCBWKEVFLDVBLDVBLEI0KSwgVihGQixBMCxBMCw1QiksIFwKKyAgICBWKEY2LDUyLDUyLEE0KSwgVig0RCwzQiwzQiw3NiksIFYoNjEsRDYsRDYsQjcpLCBWKENFLEIzLEIzLDdEKSwgXAorICAgIFYoN0IsMjksMjksNTIpLCBWKDNFLEUzLEUzLEREKSwgVig3MSwyRiwyRiw1RSksIFYoOTcsODQsODQsMTMpLCBcCisgICAgVihGNSw1Myw1MyxBNiksIFYoNjgsRDEsRDEsQjkpLCBWKDAwLDAwLDAwLDAwKSwgVigyQyxFRCxFRCxDMSksIFwKKyAgICBWKDYwLDIwLDIwLDQwKSwgVigxRixGQyxGQyxFMyksIFYoQzgsQjEsQjEsNzkpLCBWKEVELDVCLDVCLEI2KSwgXAorICAgIFYoQkUsNkEsNkEsRDQpLCBWKDQ2LENCLENCLDhEKSwgVihEOSxCRSxCRSw2NyksIFYoNEIsMzksMzksNzIpLCBcCisgICAgVihERSw0QSw0QSw5NCksIFYoRDQsNEMsNEMsOTgpLCBWKEU4LDU4LDU4LEIwKSwgVig0QSxDRixDRiw4NSksIFwKKyAgICBWKDZCLEQwLEQwLEJCKSwgVigyQSxFRixFRixDNSksIFYoRTUsQUEsQUEsNEYpLCBWKDE2LEZCLEZCLEVEKSwgXAorICAgIFYoQzUsNDMsNDMsODYpLCBWKEQ3LDRELDRELDlBKSwgVig1NSwzMywzMyw2NiksIFYoOTQsODUsODUsMTEpLCBcCisgICAgVihDRiw0NSw0NSw4QSksIFYoMTAsRjksRjksRTkpLCBWKDA2LDAyLDAyLDA0KSwgVig4MSw3Riw3RixGRSksIFwKKyAgICBWKEYwLDUwLDUwLEEwKSwgVig0NCwzQywzQyw3OCksIFYoQkEsOUYsOUYsMjUpLCBWKEUzLEE4LEE4LDRCKSwgXAorICAgIFYoRjMsNTEsNTEsQTIpLCBWKEZFLEEzLEEzLDVEKSwgVihDMCw0MCw0MCw4MCksIFYoOEEsOEYsOEYsMDUpLCBcCisgICAgVihBRCw5Miw5MiwzRiksIFYoQkMsOUQsOUQsMjEpLCBWKDQ4LDM4LDM4LDcwKSwgVigwNCxGNSxGNSxGMSksIFwKKyAgICBWKERGLEJDLEJDLDYzKSwgVihDMSxCNixCNiw3NyksIFYoNzUsREEsREEsQUYpLCBWKDYzLDIxLDIxLDQyKSwgXAorICAgIFYoMzAsMTAsMTAsMjApLCBWKDFBLEZGLEZGLEU1KSwgVigwRSxGMyxGMyxGRCksIFYoNkQsRDIsRDIsQkYpLCBcCisgICAgVig0QyxDRCxDRCw4MSksIFYoMTQsMEMsMEMsMTgpLCBWKDM1LDEzLDEzLDI2KSwgVigyRixFQyxFQyxDMyksIFwKKyAgICBWKEUxLDVGLDVGLEJFKSwgVihBMiw5Nyw5NywzNSksIFYoQ0MsNDQsNDQsODgpLCBWKDM5LDE3LDE3LDJFKSwgXAorICAgIFYoNTcsQzQsQzQsOTMpLCBWKEYyLEE3LEE3LDU1KSwgVig4Miw3RSw3RSxGQyksIFYoNDcsM0QsM0QsN0EpLCBcCisgICAgVihBQyw2NCw2NCxDOCksIFYoRTcsNUQsNUQsQkEpLCBWKDJCLDE5LDE5LDMyKSwgVig5NSw3Myw3MyxFNiksIFwKKyAgICBWKEEwLDYwLDYwLEMwKSwgVig5OCw4MSw4MSwxOSksIFYoRDEsNEYsNEYsOUUpLCBWKDdGLERDLERDLEEzKSwgXAorICAgIFYoNjYsMjIsMjIsNDQpLCBWKDdFLDJBLDJBLDU0KSwgVihBQiw5MCw5MCwzQiksIFYoODMsODgsODgsMEIpLCBcCisgICAgVihDQSw0Niw0Niw4QyksIFYoMjksRUUsRUUsQzcpLCBWKEQzLEI4LEI4LDZCKSwgVigzQywxNCwxNCwyOCksIFwKKyAgICBWKDc5LERFLERFLEE3KSwgVihFMiw1RSw1RSxCQyksIFYoMUQsMEIsMEIsMTYpLCBWKDc2LERCLERCLEFEKSwgXAorICAgIFYoM0IsRTAsRTAsREIpLCBWKDU2LDMyLDMyLDY0KSwgVig0RSwzQSwzQSw3NCksIFYoMUUsMEEsMEEsMTQpLCBcCisgICAgVihEQiw0OSw0OSw5MiksIFYoMEEsMDYsMDYsMEMpLCBWKDZDLDI0LDI0LDQ4KSwgVihFNCw1Qyw1QyxCOCksIFwKKyAgICBWKDVELEMyLEMyLDlGKSwgVig2RSxEMyxEMyxCRCksIFYoRUYsQUMsQUMsNDMpLCBWKEE2LDYyLDYyLEM0KSwgXAorICAgIFYoQTgsOTEsOTEsMzkpLCBWKEE0LDk1LDk1LDMxKSwgVigzNyxFNCxFNCxEMyksIFYoOEIsNzksNzksRjIpLCBcCisgICAgVigzMixFNyxFNyxENSksIFYoNDMsQzgsQzgsOEIpLCBWKDU5LDM3LDM3LDZFKSwgVihCNyw2RCw2RCxEQSksIFwKKyAgICBWKDhDLDhELDhELDAxKSwgVig2NCxENSxENSxCMSksIFYoRDIsNEUsNEUsOUMpLCBWKEUwLEE5LEE5LDQ5KSwgXAorICAgIFYoQjQsNkMsNkMsRDgpLCBWKEZBLDU2LDU2LEFDKSwgVigwNyxGNCxGNCxGMyksIFYoMjUsRUEsRUEsQ0YpLCBcCisgICAgVihBRiw2NSw2NSxDQSksIFYoOEUsN0EsN0EsRjQpLCBWKEU5LEFFLEFFLDQ3KSwgVigxOCwwOCwwOCwxMCksIFwKKyAgICBWKEQ1LEJBLEJBLDZGKSwgVig4OCw3OCw3OCxGMCksIFYoNkYsMjUsMjUsNEEpLCBWKDcyLDJFLDJFLDVDKSwgXAorICAgIFYoMjQsMUMsMUMsMzgpLCBWKEYxLEE2LEE2LDU3KSwgVihDNyxCNCxCNCw3MyksIFYoNTEsQzYsQzYsOTcpLCBcCisgICAgVigyMyxFOCxFOCxDQiksIFYoN0MsREQsREQsQTEpLCBWKDlDLDc0LDc0LEU4KSwgVigyMSwxRiwxRiwzRSksIFwKKyAgICBWKERELDRCLDRCLDk2KSwgVihEQyxCRCxCRCw2MSksIFYoODYsOEIsOEIsMEQpLCBWKDg1LDhBLDhBLDBGKSwgXAorICAgIFYoOTAsNzAsNzAsRTApLCBWKDQyLDNFLDNFLDdDKSwgVihDNCxCNSxCNSw3MSksIFYoQUEsNjYsNjYsQ0MpLCBcCisgICAgVihEOCw0OCw0OCw5MCksIFYoMDUsMDMsMDMsMDYpLCBWKDAxLEY2LEY2LEY3KSwgVigxMiwwRSwwRSwxQyksIFwKKyAgICBWKEEzLDYxLDYxLEMyKSwgVig1RiwzNSwzNSw2QSksIFYoRjksNTcsNTcsQUUpLCBWKEQwLEI5LEI5LDY5KSwgXAorICAgIFYoOTEsODYsODYsMTcpLCBWKDU4LEMxLEMxLDk5KSwgVigyNywxRCwxRCwzQSksIFYoQjksOUUsOUUsMjcpLCBcCisgICAgVigzOCxFMSxFMSxEOSksIFYoMTMsRjgsRjgsRUIpLCBWKEIzLDk4LDk4LDJCKSwgVigzMywxMSwxMSwyMiksIFwKKyAgICBWKEJCLDY5LDY5LEQyKSwgVig3MCxEOSxEOSxBOSksIFYoODksOEUsOEUsMDcpLCBWKEE3LDk0LDk0LDMzKSwgXAorICAgIFYoQjYsOUIsOUIsMkQpLCBWKDIyLDFFLDFFLDNDKSwgVig5Miw4Nyw4NywxNSksIFYoMjAsRTksRTksQzkpLCBcCisgICAgVig0OSxDRSxDRSw4NyksIFYoRkYsNTUsNTUsQUEpLCBWKDc4LDI4LDI4LDUwKSwgVig3QSxERixERixBNSksIFwKKyAgICBWKDhGLDhDLDhDLDAzKSwgVihGOCxBMSxBMSw1OSksIFYoODAsODksODksMDkpLCBWKDE3LDBELDBELDFBKSwgXAorICAgIFYoREEsQkYsQkYsNjUpLCBWKDMxLEU2LEU2LEQ3KSwgVihDNiw0Miw0Miw4NCksIFYoQjgsNjgsNjgsRDApLCBcCisgICAgVihDMyw0MSw0MSw4MiksIFYoQjAsOTksOTksMjkpLCBWKDc3LDJELDJELDVBKSwgVigxMSwwRiwwRiwxRSksIFwKKyAgICBWKENCLEIwLEIwLDdCKSwgVihGQyw1NCw1NCxBOCksIFYoRDYsQkIsQkIsNkQpLCBWKDNBLDE2LDE2LDJDKQorCisjZGVmaW5lIFYoYSxiLGMsZCkgMHgjI2EjI2IjI2MjI2QKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBGVDBbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUgVihhLGIsYyxkKSAweCMjYiMjYyMjZCMjYQorc3RhdGljIGNvbnN0IHVpbnQzMl90IEZUMVsyNTZdID0geyBGVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNjIyNkIyNhIyNiCitzdGF0aWMgY29uc3QgdWludDMyX3QgRlQyWzI1Nl0gPSB7IEZUIH07CisjdW5kZWYgVgorCisjZGVmaW5lIFYoYSxiLGMsZCkgMHgjI2QjI2EjI2IjI2MKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBGVDNbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyN1bmRlZiBGVAorCisvKgorICogUmV2ZXJzZSBTLWJveAorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBSU2JbMjU2XSA9Cit7CisgICAgMHg1MiwgMHgwOSwgMHg2QSwgMHhENSwgMHgzMCwgMHgzNiwgMHhBNSwgMHgzOCwKKyAgICAweEJGLCAweDQwLCAweEEzLCAweDlFLCAweDgxLCAweEYzLCAweEQ3LCAweEZCLAorICAgIDB4N0MsIDB4RTMsIDB4MzksIDB4ODIsIDB4OUIsIDB4MkYsIDB4RkYsIDB4ODcsCisgICAgMHgzNCwgMHg4RSwgMHg0MywgMHg0NCwgMHhDNCwgMHhERSwgMHhFOSwgMHhDQiwKKyAgICAweDU0LCAweDdCLCAweDk0LCAweDMyLCAweEE2LCAweEMyLCAweDIzLCAweDNELAorICAgIDB4RUUsIDB4NEMsIDB4OTUsIDB4MEIsIDB4NDIsIDB4RkEsIDB4QzMsIDB4NEUsCisgICAgMHgwOCwgMHgyRSwgMHhBMSwgMHg2NiwgMHgyOCwgMHhEOSwgMHgyNCwgMHhCMiwKKyAgICAweDc2LCAweDVCLCAweEEyLCAweDQ5LCAweDZELCAweDhCLCAweEQxLCAweDI1LAorICAgIDB4NzIsIDB4RjgsIDB4RjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYsCisgICAgMHhENCwgMHhBNCwgMHg1QywgMHhDQywgMHg1RCwgMHg2NSwgMHhCNiwgMHg5MiwKKyAgICAweDZDLCAweDcwLCAweDQ4LCAweDUwLCAweEZELCAweEVELCAweEI5LCAweERBLAorICAgIDB4NUUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4QTcsIDB4OEQsIDB4OUQsIDB4ODQsCisgICAgMHg5MCwgMHhEOCwgMHhBQiwgMHgwMCwgMHg4QywgMHhCQywgMHhEMywgMHgwQSwKKyAgICAweEY3LCAweEU0LCAweDU4LCAweDA1LCAweEI4LCAweEIzLCAweDQ1LCAweDA2LAorICAgIDB4RDAsIDB4MkMsIDB4MUUsIDB4OEYsIDB4Q0EsIDB4M0YsIDB4MEYsIDB4MDIsCisgICAgMHhDMSwgMHhBRiwgMHhCRCwgMHgwMywgMHgwMSwgMHgxMywgMHg4QSwgMHg2QiwKKyAgICAweDNBLCAweDkxLCAweDExLCAweDQxLCAweDRGLCAweDY3LCAweERDLCAweEVBLAorICAgIDB4OTcsIDB4RjIsIDB4Q0YsIDB4Q0UsIDB4RjAsIDB4QjQsIDB4RTYsIDB4NzMsCisgICAgMHg5NiwgMHhBQywgMHg3NCwgMHgyMiwgMHhFNywgMHhBRCwgMHgzNSwgMHg4NSwKKyAgICAweEUyLCAweEY5LCAweDM3LCAweEU4LCAweDFDLCAweDc1LCAweERGLCAweDZFLAorICAgIDB4NDcsIDB4RjEsIDB4MUEsIDB4NzEsIDB4MUQsIDB4MjksIDB4QzUsIDB4ODksCisgICAgMHg2RiwgMHhCNywgMHg2MiwgMHgwRSwgMHhBQSwgMHgxOCwgMHhCRSwgMHgxQiwKKyAgICAweEZDLCAweDU2LCAweDNFLCAweDRCLCAweEM2LCAweEQyLCAweDc5LCAweDIwLAorICAgIDB4OUEsIDB4REIsIDB4QzAsIDB4RkUsIDB4NzgsIDB4Q0QsIDB4NUEsIDB4RjQsCisgICAgMHgxRiwgMHhERCwgMHhBOCwgMHgzMywgMHg4OCwgMHgwNywgMHhDNywgMHgzMSwKKyAgICAweEIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweEVDLCAweDVGLAorICAgIDB4NjAsIDB4NTEsIDB4N0YsIDB4QTksIDB4MTksIDB4QjUsIDB4NEEsIDB4MEQsCisgICAgMHgyRCwgMHhFNSwgMHg3QSwgMHg5RiwgMHg5MywgMHhDOSwgMHg5QywgMHhFRiwKKyAgICAweEEwLCAweEUwLCAweDNCLCAweDRELCAweEFFLCAweDJBLCAweEY1LCAweEIwLAorICAgIDB4QzgsIDB4RUIsIDB4QkIsIDB4M0MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEsCisgICAgMHgxNywgMHgyQiwgMHgwNCwgMHg3RSwgMHhCQSwgMHg3NywgMHhENiwgMHgyNiwKKyAgICAweEUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBDLCAweDdECit9OworCisvKgorICogUmV2ZXJzZSB0YWJsZXMKKyAqLworI2RlZmluZSBSVCBcCitcCisgICAgVig1MCxBNyxGNCw1MSksIFYoNTMsNjUsNDEsN0UpLCBWKEMzLEE0LDE3LDFBKSwgVig5Niw1RSwyNywzQSksIFwKKyAgICBWKENCLDZCLEFCLDNCKSwgVihGMSw0NSw5RCwxRiksIFYoQUIsNTgsRkEsQUMpLCBWKDkzLDAzLEUzLDRCKSwgXAorICAgIFYoNTUsRkEsMzAsMjApLCBWKEY2LDZELDc2LEFEKSwgVig5MSw3NixDQyw4OCksIFYoMjUsNEMsMDIsRjUpLCBcCisgICAgVihGQyxENyxFNSw0RiksIFYoRDcsQ0IsMkEsQzUpLCBWKDgwLDQ0LDM1LDI2KSwgVig4RixBMyw2MixCNSksIFwKKyAgICBWKDQ5LDVBLEIxLERFKSwgVig2NywxQixCQSwyNSksIFYoOTgsMEUsRUEsNDUpLCBWKEUxLEMwLEZFLDVEKSwgXAorICAgIFYoMDIsNzUsMkYsQzMpLCBWKDEyLEYwLDRDLDgxKSwgVihBMyw5Nyw0Niw4RCksIFYoQzYsRjksRDMsNkIpLCBcCisgICAgVihFNyw1Riw4RiwwMyksIFYoOTUsOUMsOTIsMTUpLCBWKEVCLDdBLDZELEJGKSwgVihEQSw1OSw1Miw5NSksIFwKKyAgICBWKDJELDgzLEJFLEQ0KSwgVihEMywyMSw3NCw1OCksIFYoMjksNjksRTAsNDkpLCBWKDQ0LEM4LEM5LDhFKSwgXAorICAgIFYoNkEsODksQzIsNzUpLCBWKDc4LDc5LDhFLEY0KSwgVig2QiwzRSw1OCw5OSksIFYoREQsNzEsQjksMjcpLCBcCisgICAgVihCNiw0RixFMSxCRSksIFYoMTcsQUQsODgsRjApLCBWKDY2LEFDLDIwLEM5KSwgVihCNCwzQSxDRSw3RCksIFwKKyAgICBWKDE4LDRBLERGLDYzKSwgVig4MiwzMSwxQSxFNSksIFYoNjAsMzMsNTEsOTcpLCBWKDQ1LDdGLDUzLDYyKSwgXAorICAgIFYoRTAsNzcsNjQsQjEpLCBWKDg0LEFFLDZCLEJCKSwgVigxQyxBMCw4MSxGRSksIFYoOTQsMkIsMDgsRjkpLCBcCisgICAgVig1OCw2OCw0OCw3MCksIFYoMTksRkQsNDUsOEYpLCBWKDg3LDZDLERFLDk0KSwgVihCNyxGOCw3Qiw1MiksIFwKKyAgICBWKDIzLEQzLDczLEFCKSwgVihFMiwwMiw0Qiw3MiksIFYoNTcsOEYsMUYsRTMpLCBWKDJBLEFCLDU1LDY2KSwgXAorICAgIFYoMDcsMjgsRUIsQjIpLCBWKDAzLEMyLEI1LDJGKSwgVig5QSw3QixDNSw4NiksIFYoQTUsMDgsMzcsRDMpLCBcCisgICAgVihGMiw4NywyOCwzMCksIFYoQjIsQTUsQkYsMjMpLCBWKEJBLDZBLDAzLDAyKSwgVig1Qyw4MiwxNixFRCksIFwKKyAgICBWKDJCLDFDLENGLDhBKSwgVig5MixCNCw3OSxBNyksIFYoRjAsRjIsMDcsRjMpLCBWKEExLEUyLDY5LDRFKSwgXAorICAgIFYoQ0QsRjQsREEsNjUpLCBWKEQ1LEJFLDA1LDA2KSwgVigxRiw2MiwzNCxEMSksIFYoOEEsRkUsQTYsQzQpLCBcCisgICAgVig5RCw1MywyRSwzNCksIFYoQTAsNTUsRjMsQTIpLCBWKDMyLEUxLDhBLDA1KSwgVig3NSxFQixGNixBNCksIFwKKyAgICBWKDM5LEVDLDgzLDBCKSwgVihBQSxFRiw2MCw0MCksIFYoMDYsOUYsNzEsNUUpLCBWKDUxLDEwLDZFLEJEKSwgXAorICAgIFYoRjksOEEsMjEsM0UpLCBWKDNELDA2LERELDk2KSwgVihBRSwwNSwzRSxERCksIFYoNDYsQkQsRTYsNEQpLCBcCisgICAgVihCNSw4RCw1NCw5MSksIFYoMDUsNUQsQzQsNzEpLCBWKDZGLEQ0LDA2LDA0KSwgVihGRiwxNSw1MCw2MCksIFwKKyAgICBWKDI0LEZCLDk4LDE5KSwgVig5NyxFOSxCRCxENiksIFYoQ0MsNDMsNDAsODkpLCBWKDc3LDlFLEQ5LDY3KSwgXAorICAgIFYoQkQsNDIsRTgsQjApLCBWKDg4LDhCLDg5LDA3KSwgVigzOCw1QiwxOSxFNyksIFYoREIsRUUsQzgsNzkpLCBcCisgICAgVig0NywwQSw3QyxBMSksIFYoRTksMEYsNDIsN0MpLCBWKEM5LDFFLDg0LEY4KSwgVigwMCwwMCwwMCwwMCksIFwKKyAgICBWKDgzLDg2LDgwLDA5KSwgVig0OCxFRCwyQiwzMiksIFYoQUMsNzAsMTEsMUUpLCBWKDRFLDcyLDVBLDZDKSwgXAorICAgIFYoRkIsRkYsMEUsRkQpLCBWKDU2LDM4LDg1LDBGKSwgVigxRSxENSxBRSwzRCksIFYoMjcsMzksMkQsMzYpLCBcCisgICAgVig2NCxEOSwwRiwwQSksIFYoMjEsQTYsNUMsNjgpLCBWKEQxLDU0LDVCLDlCKSwgVigzQSwyRSwzNiwyNCksIFwKKyAgICBWKEIxLDY3LDBBLDBDKSwgVigwRixFNyw1Nyw5MyksIFYoRDIsOTYsRUUsQjQpLCBWKDlFLDkxLDlCLDFCKSwgXAorICAgIFYoNEYsQzUsQzAsODApLCBWKEEyLDIwLERDLDYxKSwgVig2OSw0Qiw3Nyw1QSksIFYoMTYsMUEsMTIsMUMpLCBcCisgICAgVigwQSxCQSw5MyxFMiksIFYoRTUsMkEsQTAsQzApLCBWKDQzLEUwLDIyLDNDKSwgVigxRCwxNywxQiwxMiksIFwKKyAgICBWKDBCLDBELDA5LDBFKSwgVihBRCxDNyw4QixGMiksIFYoQjksQTgsQjYsMkQpLCBWKEM4LEE5LDFFLDE0KSwgXAorICAgIFYoODUsMTksRjEsNTcpLCBWKDRDLDA3LDc1LEFGKSwgVihCQixERCw5OSxFRSksIFYoRkQsNjAsN0YsQTMpLCBcCisgICAgVig5RiwyNiwwMSxGNyksIFYoQkMsRjUsNzIsNUMpLCBWKEM1LDNCLDY2LDQ0KSwgVigzNCw3RSxGQiw1QiksIFwKKyAgICBWKDc2LDI5LDQzLDhCKSwgVihEQyxDNiwyMyxDQiksIFYoNjgsRkMsRUQsQjYpLCBWKDYzLEYxLEU0LEI4KSwgXAorICAgIFYoQ0EsREMsMzEsRDcpLCBWKDEwLDg1LDYzLDQyKSwgVig0MCwyMiw5NywxMyksIFYoMjAsMTEsQzYsODQpLCBcCisgICAgVig3RCwyNCw0QSw4NSksIFYoRjgsM0QsQkIsRDIpLCBWKDExLDMyLEY5LEFFKSwgVig2RCxBMSwyOSxDNyksIFwKKyAgICBWKDRCLDJGLDlFLDFEKSwgVihGMywzMCxCMixEQyksIFYoRUMsNTIsODYsMEQpLCBWKEQwLEUzLEMxLDc3KSwgXAorICAgIFYoNkMsMTYsQjMsMkIpLCBWKDk5LEI5LDcwLEE5KSwgVihGQSw0OCw5NCwxMSksIFYoMjIsNjQsRTksNDcpLCBcCisgICAgVihDNCw4QyxGQyxBOCksIFYoMUEsM0YsRjAsQTApLCBWKEQ4LDJDLDdELDU2KSwgVihFRiw5MCwzMywyMiksIFwKKyAgICBWKEM3LDRFLDQ5LDg3KSwgVihDMSxEMSwzOCxEOSksIFYoRkUsQTIsQ0EsOEMpLCBWKDM2LDBCLEQ0LDk4KSwgXAorICAgIFYoQ0YsODEsRjUsQTYpLCBWKDI4LERFLDdBLEE1KSwgVigyNiw4RSxCNyxEQSksIFYoQTQsQkYsQUQsM0YpLCBcCisgICAgVihFNCw5RCwzQSwyQyksIFYoMEQsOTIsNzgsNTApLCBWKDlCLENDLDVGLDZBKSwgVig2Miw0Niw3RSw1NCksIFwKKyAgICBWKEMyLDEzLDhELEY2KSwgVihFOCxCOCxEOCw5MCksIFYoNUUsRjcsMzksMkUpLCBWKEY1LEFGLEMzLDgyKSwgXAorICAgIFYoQkUsODAsNUQsOUYpLCBWKDdDLDkzLEQwLDY5KSwgVihBOSwyRCxENSw2RiksIFYoQjMsMTIsMjUsQ0YpLCBcCisgICAgVigzQiw5OSxBQyxDOCksIFYoQTcsN0QsMTgsMTApLCBWKDZFLDYzLDlDLEU4KSwgVig3QixCQiwzQixEQiksIFwKKyAgICBWKDA5LDc4LDI2LENEKSwgVihGNCwxOCw1OSw2RSksIFYoMDEsQjcsOUEsRUMpLCBWKEE4LDlBLDRGLDgzKSwgXAorICAgIFYoNjUsNkUsOTUsRTYpLCBWKDdFLEU2LEZGLEFBKSwgVigwOCxDRixCQywyMSksIFYoRTYsRTgsMTUsRUYpLCBcCisgICAgVihEOSw5QixFNyxCQSksIFYoQ0UsMzYsNkYsNEEpLCBWKEQ0LDA5LDlGLEVBKSwgVihENiw3QyxCMCwyOSksIFwKKyAgICBWKEFGLEIyLEE0LDMxKSwgVigzMSwyMywzRiwyQSksIFYoMzAsOTQsQTUsQzYpLCBWKEMwLDY2LEEyLDM1KSwgXAorICAgIFYoMzcsQkMsNEUsNzQpLCBWKEE2LENBLDgyLEZDKSwgVihCMCxEMCw5MCxFMCksIFYoMTUsRDgsQTcsMzMpLCBcCisgICAgVig0QSw5OCwwNCxGMSksIFYoRjcsREEsRUMsNDEpLCBWKDBFLDUwLENELDdGKSwgVigyRixGNiw5MSwxNyksIFwKKyAgICBWKDhELEQ2LDRELDc2KSwgVig0RCxCMCxFRiw0MyksIFYoNTQsNEQsQUEsQ0MpLCBWKERGLDA0LDk2LEU0KSwgXAorICAgIFYoRTMsQjUsRDEsOUUpLCBWKDFCLDg4LDZBLDRDKSwgVihCOCwxRiwyQyxDMSksIFYoN0YsNTEsNjUsNDYpLCBcCisgICAgVigwNCxFQSw1RSw5RCksIFYoNUQsMzUsOEMsMDEpLCBWKDczLDc0LDg3LEZBKSwgVigyRSw0MSwwQixGQiksIFwKKyAgICBWKDVBLDFELDY3LEIzKSwgVig1MixEMixEQiw5MiksIFYoMzMsNTYsMTAsRTkpLCBWKDEzLDQ3LEQ2LDZEKSwgXAorICAgIFYoOEMsNjEsRDcsOUEpLCBWKDdBLDBDLEExLDM3KSwgVig4RSwxNCxGOCw1OSksIFYoODksM0MsMTMsRUIpLCBcCisgICAgVihFRSwyNyxBOSxDRSksIFYoMzUsQzksNjEsQjcpLCBWKEVELEU1LDFDLEUxKSwgVigzQyxCMSw0Nyw3QSksIFwKKyAgICBWKDU5LERGLEQyLDlDKSwgVigzRiw3MyxGMiw1NSksIFYoNzksQ0UsMTQsMTgpLCBWKEJGLDM3LEM3LDczKSwgXAorICAgIFYoRUEsQ0QsRjcsNTMpLCBWKDVCLEFBLEZELDVGKSwgVigxNCw2RiwzRCxERiksIFYoODYsREIsNDQsNzgpLCBcCisgICAgVig4MSxGMyxBRixDQSksIFYoM0UsQzQsNjgsQjkpLCBWKDJDLDM0LDI0LDM4KSwgVig1Riw0MCxBMyxDMiksIFwKKyAgICBWKDcyLEMzLDFELDE2KSwgVigwQywyNSxFMixCQyksIFYoOEIsNDksM0MsMjgpLCBWKDQxLDk1LDBELEZGKSwgXAorICAgIFYoNzEsMDEsQTgsMzkpLCBWKERFLEIzLDBDLDA4KSwgVig5QyxFNCxCNCxEOCksIFYoOTAsQzEsNTYsNjQpLCBcCisgICAgVig2MSw4NCxDQiw3QiksIFYoNzAsQjYsMzIsRDUpLCBWKDc0LDVDLDZDLDQ4KSwgVig0Miw1NyxCOCxEMCkKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNhIyNiIyNjIyNkCitzdGF0aWMgY29uc3QgdWludDMyX3QgUlQwWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjZGVmaW5lIFYoYSxiLGMsZCkgMHgjI2IjI2MjI2QjI2EKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSVDFbMjU2XSA9IHsgUlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUgVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYgorc3RhdGljIGNvbnN0IHVpbnQzMl90IFJUMlsyNTZdID0geyBSVCB9OworI3VuZGVmIFYKKworI2RlZmluZSBWKGEsYixjLGQpIDB4IyNkIyNhIyNiIyNjCitzdGF0aWMgY29uc3QgdWludDMyX3QgUlQzWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjdW5kZWYgUlQKKworLyoKKyAqIFJvdW5kIGNvbnN0YW50cworICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgUkNPTlsxMF0gPQoreworICAgIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDgsCisgICAgMHgwMDAwMDAxMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA4MCwKKyAgICAweDAwMDAwMDFCLCAweDAwMDAwMDM2Cit9OworCisjZWxzZSAvKiBNQkVEVExTX0FFU19ST01fVEFCTEVTICovCisKKy8qCisgKiBGb3J3YXJkIFMtYm94ICYgdGFibGVzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZTYlsyNTZdOworc3RhdGljIHVpbnQzMl90IEZUMFsyNTZdOworc3RhdGljIHVpbnQzMl90IEZUMVsyNTZdOworc3RhdGljIHVpbnQzMl90IEZUMlsyNTZdOworc3RhdGljIHVpbnQzMl90IEZUM1syNTZdOworCisvKgorICogUmV2ZXJzZSBTLWJveCAmIHRhYmxlcworICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBSU2JbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBSVDBbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBSVDFbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBSVDJbMjU2XTsKK3N0YXRpYyB1aW50MzJfdCBSVDNbMjU2XTsKKworLyoKKyAqIFJvdW5kIGNvbnN0YW50cworICovCitzdGF0aWMgdWludDMyX3QgUkNPTlsxMF07CisKKy8qCisgKiBUYWJsZXMgZ2VuZXJhdGlvbiBjb2RlCisgKi8KKyNkZWZpbmUgUk9UTDgoeCkgKCAoIHggPDwgOCApICYgMHhGRkZGRkZGRiApIHwgKCB4ID4+IDI0ICkKKyNkZWZpbmUgWFRJTUUoeCkgKCAoIHggPDwgMSApIF4gKCAoIHggJiAweDgwICkgPyAweDFCIDogMHgwMCApICkKKyNkZWZpbmUgTVVMKHgseSkgKCAoIHggJiYgeSApID8gcG93Wyhsb2dbeF0rbG9nW3ldKSAlIDI1NV0gOiAwICkKKworc3RhdGljIGludCBhZXNfaW5pdF9kb25lID0gMDsKKworc3RhdGljIHZvaWQgYWVzX2dlbl90YWJsZXMoIHZvaWQgKQoreworICAgIGludCBpLCB4LCB5LCB6OworICAgIGludCBwb3dbMjU2XTsKKyAgICBpbnQgbG9nWzI1Nl07CisKKyAgICAvKgorICAgICAqIGNvbXB1dGUgcG93IGFuZCBsb2cgdGFibGVzIG92ZXIgR0YoMl44KQorICAgICAqLworICAgIGZvciggaSA9IDAsIHggPSAxOyBpIDwgMjU2OyBpKysgKQorICAgIHsKKyAgICAgICAgcG93W2ldID0geDsKKyAgICAgICAgbG9nW3hdID0gaTsKKyAgICAgICAgeCA9ICggeCBeIFhUSU1FKCB4ICkgKSAmIDB4RkY7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjYWxjdWxhdGUgdGhlIHJvdW5kIGNvbnN0YW50cworICAgICAqLworICAgIGZvciggaSA9IDAsIHggPSAxOyBpIDwgMTA7IGkrKyApCisgICAgeworICAgICAgICBSQ09OW2ldID0gKHVpbnQzMl90KSB4OworICAgICAgICB4ID0gWFRJTUUoIHggKSAmIDB4RkY7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBnZW5lcmF0ZSB0aGUgZm9yd2FyZCBhbmQgcmV2ZXJzZSBTLWJveGVzCisgICAgICovCisgICAgRlNiWzB4MDBdID0gMHg2MzsKKyAgICBSU2JbMHg2M10gPSAweDAwOworCisgICAgZm9yKCBpID0gMTsgaSA8IDI1NjsgaSsrICkKKyAgICB7CisgICAgICAgIHggPSBwb3dbMjU1IC0gbG9nW2ldXTsKKworICAgICAgICB5ICA9IHg7IHkgPSAoICggeSA8PCAxICkgfCAoIHkgPj4gNyApICkgJiAweEZGOworICAgICAgICB4IF49IHk7IHkgPSAoICggeSA8PCAxICkgfCAoIHkgPj4gNyApICkgJiAweEZGOworICAgICAgICB4IF49IHk7IHkgPSAoICggeSA8PCAxICkgfCAoIHkgPj4gNyApICkgJiAweEZGOworICAgICAgICB4IF49IHk7IHkgPSAoICggeSA8PCAxICkgfCAoIHkgPj4gNyApICkgJiAweEZGOworICAgICAgICB4IF49IHkgXiAweDYzOworCisgICAgICAgIEZTYltpXSA9ICh1bnNpZ25lZCBjaGFyKSB4OworICAgICAgICBSU2JbeF0gPSAodW5zaWduZWQgY2hhcikgaTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdlbmVyYXRlIHRoZSBmb3J3YXJkIGFuZCByZXZlcnNlIHRhYmxlcworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCAyNTY7IGkrKyApCisgICAgeworICAgICAgICB4ID0gRlNiW2ldOworICAgICAgICB5ID0gWFRJTUUoIHggKSAmIDB4RkY7CisgICAgICAgIHogPSAgKCB5IF4geCApICYgMHhGRjsKKworICAgICAgICBGVDBbaV0gPSAoICh1aW50MzJfdCkgeSAgICAgICApIF4KKyAgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIHggPDwgIDggKSBeCisgICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSB4IDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgeiA8PCAyNCApOworCisgICAgICAgIEZUMVtpXSA9IFJPVEw4KCBGVDBbaV0gKTsKKyAgICAgICAgRlQyW2ldID0gUk9UTDgoIEZUMVtpXSApOworICAgICAgICBGVDNbaV0gPSBST1RMOCggRlQyW2ldICk7CisKKyAgICAgICAgeCA9IFJTYltpXTsKKworICAgICAgICBSVDBbaV0gPSAoICh1aW50MzJfdCkgTVVMKCAweDBFLCB4ICkgICAgICAgKSBeCisgICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBNVUwoIDB4MDksIHggKSA8PCAgOCApIF4KKyAgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIE1VTCggMHgwRCwgeCApIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgTVVMKCAweDBCLCB4ICkgPDwgMjQgKTsKKworICAgICAgICBSVDFbaV0gPSBST1RMOCggUlQwW2ldICk7CisgICAgICAgIFJUMltpXSA9IFJPVEw4KCBSVDFbaV0gKTsKKyAgICAgICAgUlQzW2ldID0gUk9UTDgoIFJUMltpXSApOworICAgIH0KK30KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMgKi8KKwordm9pZCBtYmVkdGxzX2Flc19pbml0KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfYWVzX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfYWVzX2ZyZWUoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19hZXNfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBBRVMga2V5IHNjaGVkdWxlIChlbmNyeXB0aW9uKQorICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQpCitpbnQgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXliaXRzICkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1aW50MzJfdCAqUks7CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19ST01fVEFCTEVTKQorICAgIGlmKCBhZXNfaW5pdF9kb25lID09IDAgKQorICAgIHsKKyAgICAgICAgYWVzX2dlbl90YWJsZXMoKTsKKyAgICAgICAgYWVzX2luaXRfZG9uZSA9IDE7CisKKyAgICB9CisjZW5kaWYKKworICAgIHN3aXRjaCgga2V5Yml0cyApCisgICAgeworICAgICAgICBjYXNlIDEyODogY3R4LT5uciA9IDEwOyBicmVhazsKKyAgICAgICAgY2FzZSAxOTI6IGN0eC0+bnIgPSAxMjsgYnJlYWs7CisgICAgICAgIGNhc2UgMjU2OiBjdHgtPm5yID0gMTQ7IGJyZWFrOworICAgICAgICBkZWZhdWx0IDogcmV0dXJuKCBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykgJiYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQUxJR04xNikKKyAgICBpZiggYWVzX3BhZGxvY2tfYWNlID09IC0xICkKKyAgICAgICAgYWVzX3BhZGxvY2tfYWNlID0gbWJlZHRsc19wYWRsb2NrX2hhc19zdXBwb3J0KCBNQkVEVExTX1BBRExPQ0tfQUNFICk7CisKKyAgICBpZiggYWVzX3BhZGxvY2tfYWNlICkKKyAgICAgICAgY3R4LT5yayA9IFJLID0gTUJFRFRMU19QQURMT0NLX0FMSUdOMTYoIGN0eC0+YnVmICk7CisgICAgZWxzZQorI2VuZGlmCisgICAgY3R4LT5yayA9IFJLID0gY3R4LT5idWY7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2XzY0KQorICAgIGlmKCBtYmVkdGxzX2Flc25pX2hhc19zdXBwb3J0KCBNQkVEVExTX0FFU05JX0FFUyApICkKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX2Flc25pX3NldGtleV9lbmMoICh1bnNpZ25lZCBjaGFyICopIGN0eC0+cmssIGtleSwga2V5Yml0cyApICk7CisjZW5kaWYKKworICAgIGZvciggaSA9IDA7IGkgPCAoIGtleWJpdHMgPj4gNSApOyBpKysgKQorICAgIHsKKyAgICAgICAgR0VUX1VJTlQzMl9MRSggUktbaV0sIGtleSwgaSA8PCAyICk7CisgICAgfQorCisgICAgc3dpdGNoKCBjdHgtPm5yICkKKyAgICB7CisgICAgICAgIGNhc2UgMTA6CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCAxMDsgaSsrLCBSSyArPSA0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSS1s0XSAgPSBSS1swXSBeIFJDT05baV0gXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbM10gPj4gIDggKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzNdID4+IDE2ICkgJiAweEZGIF0gPDwgIDggKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1szXSA+PiAyNCApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbM10gICAgICAgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgICAgICAgICAgICAgUktbNV0gID0gUktbMV0gXiBSS1s0XTsKKyAgICAgICAgICAgICAgICBSS1s2XSAgPSBSS1syXSBeIFJLWzVdOworICAgICAgICAgICAgICAgIFJLWzddICA9IFJLWzNdIF4gUktbNl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDEyOgorCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrLCBSSyArPSA2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSS1s2XSAgPSBSS1swXSBeIFJDT05baV0gXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbNV0gPj4gIDggKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzVdID4+IDE2ICkgJiAweEZGIF0gPDwgIDggKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1s1XSA+PiAyNCApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbNV0gICAgICAgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgICAgICAgICAgICAgUktbN10gID0gUktbMV0gXiBSS1s2XTsKKyAgICAgICAgICAgICAgICBSS1s4XSAgPSBSS1syXSBeIFJLWzddOworICAgICAgICAgICAgICAgIFJLWzldICA9IFJLWzNdIF4gUktbOF07CisgICAgICAgICAgICAgICAgUktbMTBdID0gUktbNF0gXiBSS1s5XTsKKyAgICAgICAgICAgICAgICBSS1sxMV0gPSBSS1s1XSBeIFJLWzEwXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMTQ6CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA3OyBpKyssIFJLICs9IDggKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJLWzhdICA9IFJLWzBdIF4gUkNPTltpXSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1s3XSA+PiAgOCApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbN10gPj4gMTYgKSAmIDB4RkYgXSA8PCAgOCApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzddID4+IDI0ICkgJiAweEZGIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1s3XSAgICAgICApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICAgICAgICAgICAgICBSS1s5XSAgPSBSS1sxXSBeIFJLWzhdOworICAgICAgICAgICAgICAgIFJLWzEwXSA9IFJLWzJdIF4gUktbOV07CisgICAgICAgICAgICAgICAgUktbMTFdID0gUktbM10gXiBSS1sxMF07CisKKyAgICAgICAgICAgICAgICBSS1sxMl0gPSBSS1s0XSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1sxMV0gICAgICAgKSAmIDB4RkYgXSAgICAgICApIF4KKyAgICAgICAgICAgICAgICAoICh1aW50MzJfdCkgRlNiWyAoIFJLWzExXSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgICAgICggKHVpbnQzMl90KSBGU2JbICggUktbMTFdID4+IDE2ICkgJiAweEZGIF0gPDwgMTYgKSBeCisgICAgICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBSS1sxMV0gPj4gMjQgKSAmIDB4RkYgXSA8PCAyNCApOworCisgICAgICAgICAgICAgICAgUktbMTNdID0gUktbNV0gXiBSS1sxMl07CisgICAgICAgICAgICAgICAgUktbMTRdID0gUktbNl0gXiBSS1sxM107CisgICAgICAgICAgICAgICAgUktbMTVdID0gUktbN10gXiBSS1sxNF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQgKi8KKworLyoKKyAqIEFFUyBrZXkgc2NoZWR1bGUgKGRlY3J5cHRpb24pCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVCkKK2ludCBtYmVkdGxzX2Flc19zZXRrZXlfZGVjKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKQoreworICAgIGludCBpLCBqLCByZXQ7CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHk7CisgICAgdWludDMyX3QgKlJLOworICAgIHVpbnQzMl90ICpTSzsKKworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpICYmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0FMSUdOMTYpCisgICAgaWYoIGFlc19wYWRsb2NrX2FjZSA9PSAtMSApCisgICAgICAgIGFlc19wYWRsb2NrX2FjZSA9IG1iZWR0bHNfcGFkbG9ja19oYXNfc3VwcG9ydCggTUJFRFRMU19QQURMT0NLX0FDRSApOworCisgICAgaWYoIGFlc19wYWRsb2NrX2FjZSApCisgICAgICAgIGN0eC0+cmsgPSBSSyA9IE1CRURUTFNfUEFETE9DS19BTElHTjE2KCBjdHgtPmJ1ZiApOworICAgIGVsc2UKKyNlbmRpZgorICAgIGN0eC0+cmsgPSBSSyA9IGN0eC0+YnVmOworCisgICAgLyogQWxzbyBjaGVja3Mga2V5Yml0cyAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHksIGtleSwga2V5Yml0cyApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGN0eC0+bnIgPSBjdHkubnI7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2XzY0KQorICAgIGlmKCBtYmVkdGxzX2Flc25pX2hhc19zdXBwb3J0KCBNQkVEVExTX0FFU05JX0FFUyApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfYWVzbmlfaW52ZXJzZV9rZXkoICh1bnNpZ25lZCBjaGFyICopIGN0eC0+cmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBjdHkucmssIGN0eC0+bnIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorCisgICAgU0sgPSBjdHkucmsgKyBjdHkubnIgKiA0OworCisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKworICAgIGZvciggaSA9IGN0eC0+bnIgLSAxLCBTSyAtPSA4OyBpID4gMDsgaS0tLCBTSyAtPSA4ICkKKyAgICB7CisgICAgICAgIGZvciggaiA9IDA7IGogPCA0OyBqKyssIFNLKysgKQorICAgICAgICB7CisgICAgICAgICAgICAqUksrKyA9IFJUMFsgRlNiWyAoICpTSyAgICAgICApICYgMHhGRiBdIF0gXgorICAgICAgICAgICAgICAgICAgICBSVDFbIEZTYlsgKCAqU0sgPj4gIDggKSAmIDB4RkYgXSBdIF4KKyAgICAgICAgICAgICAgICAgICAgUlQyWyBGU2JbICggKlNLID4+IDE2ICkgJiAweEZGIF0gXSBeCisgICAgICAgICAgICAgICAgICAgIFJUM1sgRlNiWyAoICpTSyA+PiAyNCApICYgMHhGRiBdIF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfQUVTX1NFVEtFWV9ERUNfQUxUICovCisKKyNkZWZpbmUgQUVTX0ZST1VORChYMCxYMSxYMixYMyxZMCxZMSxZMixZMykgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMCA9ICpSSysrIF4gRlQwWyAoIFkwICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQxWyAoIFkxID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQyWyAoIFkyID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQzWyAoIFkzID4+IDI0ICkgJiAweEZGIF07ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMSA9ICpSSysrIF4gRlQwWyAoIFkxICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQxWyAoIFkyID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQyWyAoIFkzID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQzWyAoIFkwID4+IDI0ICkgJiAweEZGIF07ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMiA9ICpSSysrIF4gRlQwWyAoIFkyICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQxWyAoIFkzID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQyWyAoIFkwID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQzWyAoIFkxID4+IDI0ICkgJiAweEZGIF07ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBYMyA9ICpSSysrIF4gRlQwWyAoIFkzICAgICAgICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQxWyAoIFkwID4+ICA4ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQyWyAoIFkxID4+IDE2ICkgJiAweEZGIF0gXiAgIFwKKyAgICAgICAgICAgICAgICAgRlQzWyAoIFkyID4+IDI0ICkgJiAweEZGIF07ICAgIFwKK30KKworI2RlZmluZSBBRVNfUlJPVU5EKFgwLFgxLFgyLFgzLFkwLFkxLFkyLFkzKSAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFgwID0gKlJLKysgXiBSVDBbICggWTAgICAgICAgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDFbICggWTMgPj4gIDggKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDJbICggWTIgPj4gMTYgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDNbICggWTEgPj4gMjQgKSAmIDB4RkYgXTsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFgxID0gKlJLKysgXiBSVDBbICggWTEgICAgICAgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDFbICggWTAgPj4gIDggKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDJbICggWTMgPj4gMTYgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDNbICggWTIgPj4gMjQgKSAmIDB4RkYgXTsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFgyID0gKlJLKysgXiBSVDBbICggWTIgICAgICAgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDFbICggWTEgPj4gIDggKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDJbICggWTAgPj4gMTYgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDNbICggWTMgPj4gMjQgKSAmIDB4RkYgXTsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFgzID0gKlJLKysgXiBSVDBbICggWTMgICAgICAgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDFbICggWTIgPj4gIDggKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDJbICggWTEgPj4gMTYgKSAmIDB4RkYgXSBeICAgXAorICAgICAgICAgICAgICAgICBSVDNbICggWTAgPj4gMjQgKSAmIDB4RkYgXTsgICAgXAorfQorCisvKgorICogQUVTLUVDQiBibG9jayBlbmNyeXB0aW9uCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19FTkNSWVBUX0FMVCkKK3ZvaWQgbWJlZHRsc19hZXNfZW5jcnlwdCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCAqUkssIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMzsKKworICAgIFJLID0gY3R4LT5yazsKKworICAgIEdFVF9VSU5UMzJfTEUoIFgwLCBpbnB1dCwgIDAgKTsgWDAgXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggWDEsIGlucHV0LCAgNCApOyBYMSBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCBYMiwgaW5wdXQsICA4ICk7IFgyIF49ICpSSysrOworICAgIEdFVF9VSU5UMzJfTEUoIFgzLCBpbnB1dCwgMTIgKTsgWDMgXj0gKlJLKys7CisKKyAgICBmb3IoIGkgPSAoIGN0eC0+bnIgPj4gMSApIC0gMTsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgICBBRVNfRlJPVU5EKCBZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwgWDMgKTsKKyAgICAgICAgQUVTX0ZST1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgfQorCisgICAgQUVTX0ZST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisKKyAgICBYMCA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMCAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMiA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMyA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBYMSA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMiA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMyA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMCA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBYMiA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMiAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMyA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMCA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBYMyA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMyAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMCA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMSA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIEZTYlsgKCBZMiA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBQVVRfVUlOVDMyX0xFKCBYMCwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIFgxLCBvdXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9MRSggWDIsIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBYMywgb3V0cHV0LCAxMiApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0FFU19FTkNSWVBUX0FMVCAqLworCisvKgorICogQUVTLUVDQiBibG9jayBkZWNyeXB0aW9uCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0FFU19ERUNSWVBUX0FMVCkKK3ZvaWQgbWJlZHRsc19hZXNfZGVjcnlwdCggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCAqUkssIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMzsKKworICAgIFJLID0gY3R4LT5yazsKKworICAgIEdFVF9VSU5UMzJfTEUoIFgwLCBpbnB1dCwgIDAgKTsgWDAgXj0gKlJLKys7CisgICAgR0VUX1VJTlQzMl9MRSggWDEsIGlucHV0LCAgNCApOyBYMSBePSAqUksrKzsKKyAgICBHRVRfVUlOVDMyX0xFKCBYMiwgaW5wdXQsICA4ICk7IFgyIF49ICpSSysrOworICAgIEdFVF9VSU5UMzJfTEUoIFgzLCBpbnB1dCwgMTIgKTsgWDMgXj0gKlJLKys7CisKKyAgICBmb3IoIGkgPSAoIGN0eC0+bnIgPj4gMSApIC0gMTsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgICBBRVNfUlJPVU5EKCBZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwgWDMgKTsKKyAgICAgICAgQUVTX1JST1VORCggWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzICk7CisgICAgfQorCisgICAgQUVTX1JST1VORCggWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzICk7CisKKyAgICBYMCA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBYMSA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBYMiA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBYMyA9ICpSSysrIF4gXAorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMyAgICAgICApICYgMHhGRiBdICAgICAgICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMiA+PiAgOCApICYgMHhGRiBdIDw8ICA4ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMSA+PiAxNiApICYgMHhGRiBdIDw8IDE2ICkgXgorICAgICAgICAgICAgKCAodWludDMyX3QpIFJTYlsgKCBZMCA+PiAyNCApICYgMHhGRiBdIDw8IDI0ICk7CisKKyAgICBQVVRfVUlOVDMyX0xFKCBYMCwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIFgxLCBvdXRwdXQsICA0ICk7CisgICAgUFVUX1VJTlQzMl9MRSggWDIsIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBYMywgb3V0cHV0LCAxMiApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0FFU19ERUNSWVBUX0FMVCAqLworCisvKgorICogQUVTLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKyAgICBpZiggbWJlZHRsc19hZXNuaV9oYXNfc3VwcG9ydCggTUJFRFRMU19BRVNOSV9BRVMgKSApCisgICAgICAgIHJldHVybiggbWJlZHRsc19hZXNuaV9jcnlwdF9lY2IoIGN0eCwgbW9kZSwgaW5wdXQsIG91dHB1dCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4NikKKyAgICBpZiggYWVzX3BhZGxvY2tfYWNlICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0ZWNiKCBjdHgsIG1vZGUsIGlucHV0LCBvdXRwdXQgKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIC8vIElmIHBhZGxvY2sgZGF0YSBtaXNhbGlnbmVkLCB3ZSBqdXN0IGZhbGwgYmFjayB0bworICAgICAgICAvLyB1bmFjY2VsZXJhdGVkIG1vZGUKKyAgICAgICAgLy8KKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfQUVTX0VOQ1JZUFQgKQorICAgICAgICBtYmVkdGxzX2Flc19lbmNyeXB0KCBjdHgsIGlucHV0LCBvdXRwdXQgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfYWVzX2RlY3J5cHQoIGN0eCwgaW5wdXQsIG91dHB1dCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorLyoKKyAqIEFFUy1DQkMgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19hZXNfY3J5cHRfY2JjKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wWzE2XTsKKworICAgIGlmKCBsZW5ndGggJSAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfSU5QVVRfTEVOR1RIICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9YODYpCisgICAgaWYoIGFlc19wYWRsb2NrX2FjZSApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19wYWRsb2NrX3hjcnlwdGNiYyggY3R4LCBtb2RlLCBsZW5ndGgsIGl2LCBpbnB1dCwgb3V0cHV0ICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICAvLyBJZiBwYWRsb2NrIGRhdGEgbWlzYWxpZ25lZCwgd2UganVzdCBmYWxsIGJhY2sgdG8KKyAgICAgICAgLy8gdW5hY2NlbGVyYXRlZCBtb2RlCisgICAgICAgIC8vCisgICAgfQorI2VuZGlmCisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCB0ZW1wLCBpbnB1dCwgMTYgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIG91dHB1dFtpXSBeIGl2W2ldICk7CisKKyAgICAgICAgICAgIG1lbWNweSggaXYsIHRlbXAsIDE2ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSAxNjsKKyAgICAgICAgICAgIG91dHB1dCArPSAxNjsKKyAgICAgICAgICAgIGxlbmd0aCAtPSAxNjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikoIGlucHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIG91dHB1dCwgb3V0cHV0ICk7CisgICAgICAgICAgICBtZW1jcHkoIGl2LCBvdXRwdXQsIDE2ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSAxNjsKKyAgICAgICAgICAgIG91dHB1dCArPSAxNjsKKyAgICAgICAgICAgIGxlbmd0aCAtPSAxNjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorLyoKKyAqIEFFUy1DRkIxMjggYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKml2X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCBjOworICAgIHNpemVfdCBuID0gKml2X29mZjsKKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfQUVTX0RFQ1JZUFQgKQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG4gPT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGl2LCBpdiApOworCisgICAgICAgICAgICBjID0gKmlucHV0Kys7CisgICAgICAgICAgICAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGMgXiBpdltuXSApOworICAgICAgICAgICAgaXZbbl0gPSAodW5zaWduZWQgY2hhcikgYzsKKworICAgICAgICAgICAgbiA9ICggbiArIDEgKSAmIDB4MEY7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG4gPT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGl2LCBpdiApOworCisgICAgICAgICAgICBpdltuXSA9ICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggaXZbbl0gXiAqaW5wdXQrKyApOworCisgICAgICAgICAgICBuID0gKCBuICsgMSApICYgMHgwRjsKKyAgICAgICAgfQorICAgIH0KKworICAgICppdl9vZmYgPSBuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBBRVMtQ0ZCOCBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Flc19jcnlwdF9jZmI4KCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgdW5zaWduZWQgY2hhciBjOworICAgIHVuc2lnbmVkIGNoYXIgb3ZbMTddOworCisgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICB7CisgICAgICAgIG1lbWNweSggb3YsIGl2LCAxNiApOworICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoIGN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgaXYsIGl2ICk7CisKKyAgICAgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19BRVNfREVDUllQVCApCisgICAgICAgICAgICBvdlsxNl0gPSAqaW5wdXQ7CisKKyAgICAgICAgYyA9ICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggaXZbMF0gXiAqaW5wdXQrKyApOworCisgICAgICAgIGlmKCBtb2RlID09IE1CRURUTFNfQUVTX0VOQ1JZUFQgKQorICAgICAgICAgICAgb3ZbMTZdID0gYzsKKworICAgICAgICBtZW1jcHkoIGl2LCBvdiArIDEsIDE2ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLypNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qCisgKiBBRVMtQ1RSIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYWVzX2NyeXB0X2N0ciggbWJlZHRsc19hZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBub25jZV9jb3VudGVyWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fYmxvY2tbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgYywgaTsKKyAgICBzaXplX3QgbiA9ICpuY19vZmY7CisKKyAgICB3aGlsZSggbGVuZ3RoLS0gKQorICAgIHsKKyAgICAgICAgaWYoIG4gPT0gMCApIHsKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBub25jZV9jb3VudGVyLCBzdHJlYW1fYmxvY2sgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gMTY7IGkgPiAwOyBpLS0gKQorICAgICAgICAgICAgICAgIGlmKCArK25vbmNlX2NvdW50ZXJbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjID0gKmlucHV0Kys7CisgICAgICAgICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggYyBeIHN0cmVhbV9ibG9ja1tuXSApOworCisgICAgICAgIG4gPSAoIG4gKyAxICkgJiAweDBGOworICAgIH0KKworICAgICpuY19vZmYgPSBuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKworI2VuZGlmIC8qICFNQkVEVExTX0FFU19BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisvKgorICogQUVTIHRlc3QgdmVjdG9ycyBmcm9tOgorICoKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2FyY2hpdmUvYWVzL3Jpam5kYWVsL3Jpam5kYWVsLXZhbHMuemlwCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2VjYl9kZWNbM11bMTZdID0KK3sKKyAgICB7IDB4NDQsIDB4NDEsIDB4NkEsIDB4QzIsIDB4RDEsIDB4RjUsIDB4M0MsIDB4NTgsCisgICAgICAweDMzLCAweDAzLCAweDkxLCAweDdFLCAweDZCLCAweEU5LCAweEVCLCAweEUwIH0sCisgICAgeyAweDQ4LCAweEUzLCAweDFFLCAweDlFLCAweDI1LCAweDY3LCAweDE4LCAweEYyLAorICAgICAgMHg5MiwgMHgyOSwgMHgzMSwgMHg5QywgMHgxOSwgMHhGMSwgMHg1QiwgMHhBNCB9LAorICAgIHsgMHgwNSwgMHg4QywgMHhDRiwgMHhGRCwgMHhCQiwgMHhDQiwgMHgzOCwgMHgyRCwKKyAgICAgIDB4MUYsIDB4NkYsIDB4NTYsIDB4NTgsIDB4NUQsIDB4OEEsIDB4NEEsIDB4REUgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfZWNiX2VuY1szXVsxNl0gPQoreworICAgIHsgMHhDMywgMHg0QywgMHgwNSwgMHgyQywgMHhDMCwgMHhEQSwgMHg4RCwgMHg3MywKKyAgICAgIDB4NDUsIDB4MUEsIDB4RkUsIDB4NUYsIDB4MDMsIDB4QkUsIDB4MjksIDB4N0YgfSwKKyAgICB7IDB4RjMsIDB4RjYsIDB4NzUsIDB4MkEsIDB4RTgsIDB4RDcsIDB4ODMsIDB4MTEsCisgICAgICAweDM4LCAweEYwLCAweDQxLCAweDU2LCAweDA2LCAweDMxLCAweEIxLCAweDE0IH0sCisgICAgeyAweDhCLCAweDc5LCAweEVFLCAweENDLCAweDkzLCAweEEwLCAweEVFLCAweDVELAorICAgICAgMHhGRiwgMHgzMCwgMHhCNCwgMHhFQSwgMHgyMSwgMHg2MywgMHg2RCwgMHhBNCB9Cit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2NiY19kZWNbM11bMTZdID0KK3sKKyAgICB7IDB4RkEsIDB4Q0EsIDB4MzcsIDB4RTAsIDB4QjAsIDB4QzgsIDB4NTMsIDB4NzMsCisgICAgICAweERGLCAweDcwLCAweDZFLCAweDczLCAweEY3LCAweEM5LCAweEFGLCAweDg2IH0sCisgICAgeyAweDVELCAweEY2LCAweDc4LCAweERELCAweDE3LCAweEJBLCAweDRFLCAweDc1LAorICAgICAgMHhCNiwgMHgxNywgMHg2OCwgMHhDNiwgMHhBRCwgMHhFRiwgMHg3QywgMHg3QiB9LAorICAgIHsgMHg0OCwgMHgwNCwgMHhFMSwgMHg4MSwgMHg4RiwgMHhFNiwgMHgyOSwgMHg3NSwKKyAgICAgIDB4MTksIDB4QTMsIDB4RTgsIDB4OEMsIDB4NTcsIDB4MzEsIDB4MDQsIDB4MTMgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfY2JjX2VuY1szXVsxNl0gPQoreworICAgIHsgMHg4QSwgMHgwNSwgMHhGQywgMHg1RSwgMHgwOSwgMHg1QSwgMHhGNCwgMHg4NCwKKyAgICAgIDB4OEEsIDB4MDgsIDB4RDMsIDB4MjgsIDB4RDMsIDB4NjgsIDB4OEUsIDB4M0QgfSwKKyAgICB7IDB4N0IsIDB4RDksIDB4NjYsIDB4RDUsIDB4M0EsIDB4RDgsIDB4QzEsIDB4QkIsCisgICAgICAweDg1LCAweEQyLCAweEFELCAweEZBLCAweEU4LCAweDdCLCAweEIxLCAweDA0IH0sCisgICAgeyAweEZFLCAweDNDLCAweDUzLCAweDY1LCAweDNFLCAweDJGLCAweDQ1LCAweEI1LAorICAgICAgMHg2RiwgMHhDRCwgMHg4OCwgMHhCMiwgMHhDQywgMHg4OSwgMHg4RiwgMHhGMCB9Cit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorLyoKKyAqIEFFUy1DRkIxMjggdGVzdCB2ZWN0b3JzIGZyb206CisgKgorICogaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOGEvc3A4MDAtMzhhLnBkZgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jZmIxMjhfa2V5WzNdWzMyXSA9Cit7CisgICAgeyAweDJCLCAweDdFLCAweDE1LCAweDE2LCAweDI4LCAweEFFLCAweEQyLCAweEE2LAorICAgICAgMHhBQiwgMHhGNywgMHgxNSwgMHg4OCwgMHgwOSwgMHhDRiwgMHg0RiwgMHgzQyB9LAorICAgIHsgMHg4RSwgMHg3MywgMHhCMCwgMHhGNywgMHhEQSwgMHgwRSwgMHg2NCwgMHg1MiwKKyAgICAgIDB4QzgsIDB4MTAsIDB4RjMsIDB4MkIsIDB4ODAsIDB4OTAsIDB4NzksIDB4RTUsCisgICAgICAweDYyLCAweEY4LCAweEVBLCAweEQyLCAweDUyLCAweDJDLCAweDZCLCAweDdCIH0sCisgICAgeyAweDYwLCAweDNELCAweEVCLCAweDEwLCAweDE1LCAweENBLCAweDcxLCAweEJFLAorICAgICAgMHgyQiwgMHg3MywgMHhBRSwgMHhGMCwgMHg4NSwgMHg3RCwgMHg3NywgMHg4MSwKKyAgICAgIDB4MUYsIDB4MzUsIDB4MkMsIDB4MDcsIDB4M0IsIDB4NjEsIDB4MDgsIDB4RDcsCisgICAgICAweDJELCAweDk4LCAweDEwLCAweEEzLCAweDA5LCAweDE0LCAweERGLCAweEY0IH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2NmYjEyOF9pdlsxNl0gPQoreworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzX3Rlc3RfY2ZiMTI4X3B0WzY0XSA9Cit7CisgICAgMHg2QiwgMHhDMSwgMHhCRSwgMHhFMiwgMHgyRSwgMHg0MCwgMHg5RiwgMHg5NiwKKyAgICAweEU5LCAweDNELCAweDdFLCAweDExLCAweDczLCAweDkzLCAweDE3LCAweDJBLAorICAgIDB4QUUsIDB4MkQsIDB4OEEsIDB4NTcsIDB4MUUsIDB4MDMsIDB4QUMsIDB4OUMsCisgICAgMHg5RSwgMHhCNywgMHg2RiwgMHhBQywgMHg0NSwgMHhBRiwgMHg4RSwgMHg1MSwKKyAgICAweDMwLCAweEM4LCAweDFDLCAweDQ2LCAweEEzLCAweDVDLCAweEU0LCAweDExLAorICAgIDB4RTUsIDB4RkIsIDB4QzEsIDB4MTksIDB4MUEsIDB4MEEsIDB4NTIsIDB4RUYsCisgICAgMHhGNiwgMHg5RiwgMHgyNCwgMHg0NSwgMHhERiwgMHg0RiwgMHg5QiwgMHgxNywKKyAgICAweEFELCAweDJCLCAweDQxLCAweDdCLCAweEU2LCAweDZDLCAweDM3LCAweDEwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jZmIxMjhfY3RbM11bNjRdID0KK3sKKyAgICB7IDB4M0IsIDB4M0YsIDB4RDksIDB4MkUsIDB4QjcsIDB4MkQsIDB4QUQsIDB4MjAsCisgICAgICAweDMzLCAweDM0LCAweDQ5LCAweEY4LCAweEU4LCAweDNDLCAweEZCLCAweDRBLAorICAgICAgMHhDOCwgMHhBNiwgMHg0NSwgMHgzNywgMHhBMCwgMHhCMywgMHhBOSwgMHgzRiwKKyAgICAgIDB4Q0QsIDB4RTMsIDB4Q0QsIDB4QUQsIDB4OUYsIDB4MUMsIDB4RTUsIDB4OEIsCisgICAgICAweDI2LCAweDc1LCAweDFGLCAweDY3LCAweEEzLCAweENCLCAweEIxLCAweDQwLAorICAgICAgMHhCMSwgMHg4MCwgMHg4QywgMHhGMSwgMHg4NywgMHhBNCwgMHhGNCwgMHhERiwKKyAgICAgIDB4QzAsIDB4NEIsIDB4MDUsIDB4MzUsIDB4N0MsIDB4NUQsIDB4MUMsIDB4MEUsCisgICAgICAweEVBLCAweEM0LCAweEM2LCAweDZGLCAweDlGLCAweEY3LCAweEYyLCAweEU2IH0sCisgICAgeyAweENELCAweEM4LCAweDBELCAweDZGLCAweERELCAweEYxLCAweDhDLCAweEFCLAorICAgICAgMHgzNCwgMHhDMiwgMHg1OSwgMHgwOSwgMHhDOSwgMHg5QSwgMHg0MSwgMHg3NCwKKyAgICAgIDB4NjcsIDB4Q0UsIDB4N0YsIDB4N0YsIDB4ODEsIDB4MTcsIDB4MzYsIDB4MjEsCisgICAgICAweDk2LCAweDFBLCAweDJCLCAweDcwLCAweDE3LCAweDFELCAweDNELCAweDdBLAorICAgICAgMHgyRSwgMHgxRSwgMHg4QSwgMHgxRCwgMHhENSwgMHg5QiwgMHg4OCwgMHhCMSwKKyAgICAgIDB4QzgsIDB4RTYsIDB4MEYsIDB4RUQsIDB4MUUsIDB4RkEsIDB4QzQsIDB4QzksCisgICAgICAweEMwLCAweDVGLCAweDlGLCAweDlDLCAweEE5LCAweDgzLCAweDRGLCAweEEwLAorICAgICAgMHg0MiwgMHhBRSwgMHg4RiwgMHhCQSwgMHg1OCwgMHg0QiwgMHgwOSwgMHhGRiB9LAorICAgIHsgMHhEQywgMHg3RSwgMHg4NCwgMHhCRiwgMHhEQSwgMHg3OSwgMHgxNiwgMHg0QiwKKyAgICAgIDB4N0UsIDB4Q0QsIDB4ODQsIDB4ODYsIDB4OTgsIDB4NUQsIDB4MzgsIDB4NjAsCisgICAgICAweDM5LCAweEZGLCAweEVELCAweDE0LCAweDNCLCAweDI4LCAweEIxLCAweEM4LAorICAgICAgMHgzMiwgMHgxMSwgMHgzQywgMHg2MywgMHgzMSwgMHhFNSwgMHg0MCwgMHg3QiwKKyAgICAgIDB4REYsIDB4MTAsIDB4MTMsIDB4MjQsIDB4MTUsIDB4RTUsIDB4NEIsIDB4OTIsCisgICAgICAweEExLCAweDNFLCAweEQwLCAweEE4LCAweDI2LCAweDdBLCAweEUyLCAweEY5LAorICAgICAgMHg3NSwgMHhBMywgMHg4NSwgMHg3NCwgMHgxQSwgMHhCOSwgMHhDRSwgMHhGOCwKKyAgICAgIDB4MjAsIDB4MzEsIDB4NjIsIDB4M0QsIDB4NTUsIDB4QjEsIDB4RTQsIDB4NzEgfQorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qCisgKiBBRVMtQ1RSIHRlc3QgdmVjdG9ycyBmcm9tOgorICoKKyAqIGh0dHA6Ly93d3cuZmFxcy5vcmcvcmZjcy9yZmMzNjg2Lmh0bWwKKyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jdHJfa2V5WzNdWzE2XSA9Cit7CisgICAgeyAweEFFLCAweDY4LCAweDUyLCAweEY4LCAweDEyLCAweDEwLCAweDY3LCAweENDLAorICAgICAgMHg0QiwgMHhGNywgMHhBNSwgMHg3NiwgMHg1NSwgMHg3NywgMHhGMywgMHg5RSB9LAorICAgIHsgMHg3RSwgMHgyNCwgMHgwNiwgMHg3OCwgMHgxNywgMHhGQSwgMHhFMCwgMHhENywKKyAgICAgIDB4NDMsIDB4RDYsIDB4Q0UsIDB4MUYsIDB4MzIsIDB4NTMsIDB4OTEsIDB4NjMgfSwKKyAgICB7IDB4NzYsIDB4OTEsIDB4QkUsIDB4MDMsIDB4NUUsIDB4NTAsIDB4MjAsIDB4QTgsCisgICAgICAweEFDLCAweDZFLCAweDYxLCAweDg1LCAweDI5LCAweEY5LCAweEEwLCAweERDIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2N0cl9ub25jZV9jb3VudGVyWzNdWzE2XSA9Cit7CisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAorICAgIHsgMHgwMCwgMHg2QywgMHhCNiwgMHhEQiwgMHhDMCwgMHg1NCwgMHgzQiwgMHg1OSwKKyAgICAgIDB4REEsIDB4NDgsIDB4RDksIDB4MEIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgICB7IDB4MDAsIDB4RTAsIDB4MDEsIDB4N0IsIDB4MjcsIDB4NzcsIDB4N0YsIDB4M0YsCisgICAgICAweDRBLCAweDE3LCAweDg2LCAweEYwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc190ZXN0X2N0cl9wdFszXVs0OF0gPQoreworICAgIHsgMHg1MywgMHg2OSwgMHg2RSwgMHg2NywgMHg2QywgMHg2NSwgMHgyMCwgMHg2MiwKKyAgICAgIDB4NkMsIDB4NkYsIDB4NjMsIDB4NkIsIDB4MjAsIDB4NkQsIDB4NzMsIDB4NjcgfSwKKworICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiB9LAorCisgICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLAorICAgICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMyB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfdGVzdF9jdHJfY3RbM11bNDhdID0KK3sKKyAgICB7IDB4RTQsIDB4MDksIDB4NUQsIDB4NEYsIDB4QjcsIDB4QTcsIDB4QjMsIDB4NzksCisgICAgICAweDJELCAweDYxLCAweDc1LCAweEEzLCAweDI2LCAweDEzLCAweDExLCAweEI4IH0sCisgICAgeyAweDUxLCAweDA0LCAweEExLCAweDA2LCAweDE2LCAweDhBLCAweDcyLCAweEQ5LAorICAgICAgMHg3OSwgMHgwRCwgMHg0MSwgMHhFRSwgMHg4RSwgMHhEQSwgMHhEMywgMHg4OCwKKyAgICAgIDB4RUIsIDB4MkUsIDB4MUUsIDB4RkMsIDB4NDYsIDB4REEsIDB4NTcsIDB4QzgsCisgICAgICAweEZDLCAweEU2LCAweDMwLCAweERGLCAweDkxLCAweDQxLCAweEJFLCAweDI4IH0sCisgICAgeyAweEMxLCAweENGLCAweDQ4LCAweEE4LCAweDlGLCAweDJGLCAweEZELCAweEQ5LAorICAgICAgMHhDRiwgMHg0NiwgMHg1MiwgMHhFOSwgMHhFRiwgMHhEQiwgMHg3MiwgMHhENywKKyAgICAgIDB4NDUsIDB4NDAsIDB4QTQsIDB4MkIsIDB4REUsIDB4NkQsIDB4NzgsIDB4MzYsCisgICAgICAweEQ1LCAweDlBLCAweDVDLCAweEVBLCAweEFFLCAweEYzLCAweDEwLCAweDUzLAorICAgICAgMHgyNSwgMHhCMiwgMHgwNywgMHgyRiB9Cit9OworCitzdGF0aWMgY29uc3QgaW50IGFlc190ZXN0X2N0cl9sZW5bM10gPQorICAgIHsgMTYsIDMyLCAzNiB9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfYWVzX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQgPSAwLCBpLCBqLCB1LCB2OworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgdW5zaWduZWQgY2hhciBwcnZbMTZdOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBzaXplX3Qgb2Zmc2V0OworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBpbnQgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgbm9uY2VfY291bnRlclsxNl07CisgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fYmxvY2tbMTZdOworI2VuZGlmCisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgMzIgKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CisKKyAgICAvKgorICAgICAqIEVDQiBtb2RlCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICB1ID0gaSA+PiAxOworICAgICAgICB2ID0gaSAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUy1FQ0ItJTNkICglcyk6ICIsIDEyOCArIHUgKiA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2ID09IE1CRURUTFNfQUVTX0RFQ1JZUFQgKSA/ICJkZWMiIDogImVuYyIgKTsKKworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgMTYgKTsKKworICAgICAgICBpZiggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2RlYyggJmN0eCwga2V5LCAxMjggKyB1ICogNjQgKTsKKworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IDEwMDAwOyBqKysgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmN0eCwgdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9lY2JfZGVjW3VdLCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXksIDEyOCArIHUgKiA2NCApOworCisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDA7IGorKyApCisgICAgICAgICAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmY3R4LCB2LCBidWYsIGJ1ZiApOworCisgICAgICAgICAgICBpZiggbWVtY21wKCBidWYsIGFlc190ZXN0X2VjYl9lbmNbdV0sIDE2ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgLyoKKyAgICAgKiBDQkMgbW9kZQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgdSA9IGkgPj4gMTsKKyAgICAgICAgdiA9IGkgICYgMTsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtQ0JDLSUzZCAoJXMpOiAiLCAxMjggKyB1ICogNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtc2V0KCBpdiAsIDAsIDE2ICk7CisgICAgICAgIG1lbXNldCggcHJ2LCAwLCAxNiApOworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgMTYgKTsKKworICAgICAgICBpZiggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2RlYyggJmN0eCwga2V5LCAxMjggKyB1ICogNjQgKTsKKworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IDEwMDAwOyBqKysgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggJmN0eCwgdiwgMTYsIGl2LCBidWYsIGJ1ZiApOworCisgICAgICAgICAgICBpZiggbWVtY21wKCBidWYsIGFlc190ZXN0X2NiY19kZWNbdV0sIDE2ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwMDsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcFsxNl07CisKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jYmMoICZjdHgsIHYsIDE2LCBpdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgICAgIG1lbWNweSggdG1wLCBwcnYsIDE2ICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBwcnYsIGJ1ZiwgMTYgKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIGJ1ZiwgdG1wLCAxNiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggbWVtY21wKCBwcnYsIGFlc190ZXN0X2NiY19lbmNbdV0sIDE2ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICAvKgorICAgICAqIENGQjEyOCBtb2RlCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICB1ID0gaSA+PiAxOworICAgICAgICB2ID0gaSAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUy1DRkIxMjgtJTNkICglcyk6ICIsIDEyOCArIHUgKiA2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2ID09IE1CRURUTFNfQUVTX0RFQ1JZUFQgKSA/ICJkZWMiIDogImVuYyIgKTsKKworICAgICAgICBtZW1jcHkoIGl2LCAgYWVzX3Rlc3RfY2ZiMTI4X2l2LCAxNiApOworICAgICAgICBtZW1jcHkoIGtleSwgYWVzX3Rlc3RfY2ZiMTI4X2tleVt1XSwgMTYgKyB1ICogOCApOworCisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19BRVNfREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBhZXNfdGVzdF9jZmIxMjhfY3RbdV0sIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgoICZjdHgsIHYsIDY0LCAmb2Zmc2V0LCBpdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9jZmIxMjhfcHQsIDY0ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBhZXNfdGVzdF9jZmIxMjhfcHQsIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgoICZjdHgsIHYsIDY0LCAmb2Zmc2V0LCBpdiwgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9jZmIxMjhfY3RbdV0sIDY0ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICAvKgorICAgICAqIENUUiBtb2RlCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICB1ID0gaSA+PiAxOworICAgICAgICB2ID0gaSAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUy1DVFItMTI4ICglcyk6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtY3B5KCBub25jZV9jb3VudGVyLCBhZXNfdGVzdF9jdHJfbm9uY2VfY291bnRlclt1XSwgMTYgKTsKKyAgICAgICAgbWVtY3B5KCBrZXksIGFlc190ZXN0X2N0cl9rZXlbdV0sIDE2ICk7CisKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5LCAxMjggKTsKKworICAgICAgICBpZiggdiA9PSBNQkVEVExTX0FFU19ERUNSWVBUICkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gYWVzX3Rlc3RfY3RyX2xlblt1XTsKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBhZXNfdGVzdF9jdHJfY3RbdV0sIGxlbiApOworCisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jdHIoICZjdHgsIGxlbiwgJm9mZnNldCwgbm9uY2VfY291bnRlciwgc3RyZWFtX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBhZXNfdGVzdF9jdHJfcHRbdV0sIGxlbiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBsZW4gPSBhZXNfdGVzdF9jdHJfbGVuW3VdOworICAgICAgICAgICAgbWVtY3B5KCBidWYsIGFlc190ZXN0X2N0cl9wdFt1XSwgbGVuICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2N0ciggJmN0eCwgbGVuLCAmb2Zmc2V0LCBub25jZV9jb3VudGVyLCBzdHJlYW1fYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1ZiApOworCisgICAgICAgICAgICBpZiggbWVtY21wKCBidWYsIGFlc190ZXN0X2N0cl9jdFt1XSwgbGVuICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisgICAgcmV0ID0gMDsKKworZXhpdDoKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Flc25pLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hZXNuaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTNjM2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hZXNuaS5jCkBAIC0wLDAgKzEsNDY0IEBACisvKgorICogIEFFUy1OSSBzdXBwb3J0IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogW0FFUy1XUF0gaHR0cDovL3NvZnR3YXJlLmludGVsLmNvbS9lbi11cy9hcnRpY2xlcy9pbnRlbC1hZHZhbmNlZC1lbmNyeXB0aW9uLXN0YW5kYXJkLWFlcy1pbnN0cnVjdGlvbnMtc2V0CisgKiBbQ0xNVUwtV1BdIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW50ZWwtY2FycnktbGVzcy1tdWx0aXBsaWNhdGlvbi1pbnN0cnVjdGlvbi1hbmQtaXRzLXVzYWdlLWZvci1jb21wdXRpbmctdGhlLWdjbS1tb2RlLworICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvYWVzbmkuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIGFzbQorI2RlZmluZSBhc20gX19hc20KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2XzY0KQorCisvKgorICogQUVTLU5JIHN1cHBvcnQgZGV0ZWN0aW9uIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQoIHVuc2lnbmVkIGludCB3aGF0ICkKK3sKKyAgICBzdGF0aWMgaW50IGRvbmUgPSAwOworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgYyA9IDA7CisKKyAgICBpZiggISBkb25lICkKKyAgICB7CisgICAgICAgIGFzbSggIm1vdmwgICQxLCAlJWVheCAgIFxuXHQiCisgICAgICAgICAgICAgImNwdWlkICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgOiAiPWMiIChjKQorICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICA6ICJlYXgiLCAiZWJ4IiwgImVkeCIgKTsKKyAgICAgICAgZG9uZSA9IDE7CisgICAgfQorCisgICAgcmV0dXJuKCAoIGMgJiB3aGF0ICkgIT0gMCApOworfQorCisvKgorICogQmludXRpbHMgbmVlZHMgdG8gYmUgYXQgbGVhc3QgMi4xOSB0byBzdXBwb3J0IEFFUy1OSSBpbnN0cnVjdGlvbnMuCisgKiBVbmZvcnR1bmF0ZWx5LCBhIGxvdCBvZiB1c2VycyBoYXZlIGEgbG93ZXIgdmVyc2lvbiBub3cgKDIwMTQtMDQpLgorICogRW1pdCBieXRlY29kZSBkaXJlY3RseSBpbiBvcmRlciB0byBzdXBwb3J0ICJvbGQiIHZlcnNpb24gb2YgZ2FzLgorICoKKyAqIE9wY29kZXMgZnJvbSB0aGUgSW50ZWwgYXJjaGl0ZWN0dXJlIHJlZmVyZW5jZSBtYW51YWwsIHZvbC4gMy4KKyAqIFdlIGFsd2F5cyB1c2UgcmVnaXN0ZXJzLCBzbyB3ZSBkb24ndCBuZWVkIHByZWZpeGVzIGZvciBtZW1vcnkgb3BlcmFuZHMuCisgKiBPcGVyYW5kIG1hY3JvcyBhcmUgaW4gZ2FzIG9yZGVyIChzcmMsIGRzdCkgYXMgb3Bwb3NlZCB0byBJbnRlbCBvcmRlcgorICogKGRzdCwgc3JjKSBpbiBvcmRlciB0byBibGVuZCBiZXR0ZXIgaW50byB0aGUgc3Vycm91bmRpbmcgYXNzZW1ibHkgY29kZS4KKyAqLworI2RlZmluZSBBRVNERUMgICAgICAiLmJ5dGUgMHg2NiwweDBGLDB4MzgsMHhERSwiCisjZGVmaW5lIEFFU0RFQ0xBU1QgICIuYnl0ZSAweDY2LDB4MEYsMHgzOCwweERGLCIKKyNkZWZpbmUgQUVTRU5DICAgICAgIi5ieXRlIDB4NjYsMHgwRiwweDM4LDB4REMsIgorI2RlZmluZSBBRVNFTkNMQVNUICAiLmJ5dGUgMHg2NiwweDBGLDB4MzgsMHhERCwiCisjZGVmaW5lIEFFU0lNQyAgICAgICIuYnl0ZSAweDY2LDB4MEYsMHgzOCwweERCLCIKKyNkZWZpbmUgQUVTS0VZR0VOQSAgIi5ieXRlIDB4NjYsMHgwRiwweDNBLDB4REYsIgorI2RlZmluZSBQQ0xNVUxRRFEgICAiLmJ5dGUgMHg2NiwweDBGLDB4M0EsMHg0NCwiCisKKyNkZWZpbmUgeG1tMF94bW0wICAgIjB4QzAiCisjZGVmaW5lIHhtbTBfeG1tMSAgICIweEM4IgorI2RlZmluZSB4bW0wX3htbTIgICAiMHhEMCIKKyNkZWZpbmUgeG1tMF94bW0zICAgIjB4RDgiCisjZGVmaW5lIHhtbTBfeG1tNCAgICIweEUwIgorI2RlZmluZSB4bW0xX3htbTAgICAiMHhDMSIKKyNkZWZpbmUgeG1tMV94bW0yICAgIjB4RDEiCisKKy8qCisgKiBBRVMtTkkgQUVTLUVDQiBibG9jayBlbihkZSljcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19hZXNuaV9jcnlwdF9lY2IoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIGFzbSggIm1vdmRxdSAgICAoJTMpLCAlJXhtbTAgICAgXG5cdCIgLy8gbG9hZCBpbnB1dAorICAgICAgICAgIm1vdmRxdSAgICAoJTEpLCAlJXhtbTEgICAgXG5cdCIgLy8gbG9hZCByb3VuZCBrZXkgMAorICAgICAgICAgInB4b3IgICAgICAlJXhtbTEsICUleG1tMCAgXG5cdCIgLy8gcm91bmQgMAorICAgICAgICAgImFkZCAgICAgICAkMTYsICUxICAgICAgICAgXG5cdCIgLy8gcG9pbnQgdG8gbmV4dCByb3VuZCBrZXkKKyAgICAgICAgICJzdWJsICAgICAgJDEsICUwICAgICAgICAgIFxuXHQiIC8vIG5vcm1hbCByb3VuZHMgPSBuciAtIDEKKyAgICAgICAgICJ0ZXN0ICAgICAgJTIsICUyICAgICAgICAgIFxuXHQiIC8vIG1vZGU/CisgICAgICAgICAianogICAgICAgIDJmICAgICAgICAgICAgICBcblx0IiAvLyAwID0gZGVjcnlwdAorCisgICAgICAgICAiMTogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlbmNyeXB0aW9uIGxvb3AKKyAgICAgICAgICJtb3ZkcXUgICAgKCUxKSwgJSV4bW0xICAgIFxuXHQiIC8vIGxvYWQgcm91bmQga2V5CisgICAgICAgICBBRVNFTkMgICAgIHhtbTFfeG1tMCAgICAgICJcblx0IiAvLyBkbyByb3VuZAorICAgICAgICAgImFkZCAgICAgICAkMTYsICUxICAgICAgICAgXG5cdCIgLy8gcG9pbnQgdG8gbmV4dCByb3VuZCBrZXkKKyAgICAgICAgICJzdWJsICAgICAgJDEsICUwICAgICAgICAgIFxuXHQiIC8vIGxvb3AKKyAgICAgICAgICJqbnogICAgICAgMWIgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1ICAgICglMSksICUleG1tMSAgICBcblx0IiAvLyBsb2FkIHJvdW5kIGtleQorICAgICAgICAgQUVTRU5DTEFTVCB4bW0xX3htbTAgICAgICAiXG5cdCIgLy8gbGFzdCByb3VuZAorICAgICAgICAgImptcCAgICAgICAzZiAgICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgIjI6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZGVjcnlwdGlvbiBsb29wCisgICAgICAgICAibW92ZHF1ICAgICglMSksICUleG1tMSAgICBcblx0IgorICAgICAgICAgQUVTREVDICAgICB4bW0xX3htbTAgICAgICAiXG5cdCIgLy8gZG8gcm91bmQKKyAgICAgICAgICJhZGQgICAgICAgJDE2LCAlMSAgICAgICAgIFxuXHQiCisgICAgICAgICAic3VibCAgICAgICQxLCAlMCAgICAgICAgICBcblx0IgorICAgICAgICAgImpueiAgICAgICAyYiAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZkcXUgICAgKCUxKSwgJSV4bW0xICAgIFxuXHQiIC8vIGxvYWQgcm91bmQga2V5CisgICAgICAgICBBRVNERUNMQVNUIHhtbTFfeG1tMCAgICAgICJcblx0IiAvLyBsYXN0IHJvdW5kCisKKyAgICAgICAgICIzOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1ICAgICUleG1tMCwgKCU0KSAgICBcblx0IiAvLyBleHBvcnQgb3V0cHV0CisgICAgICAgICA6CisgICAgICAgICA6ICJyIiAoY3R4LT5uciksICJyIiAoY3R4LT5yayksICJyIiAobW9kZSksICJyIiAoaW5wdXQpLCAiciIgKG91dHB1dCkKKyAgICAgICAgIDogIm1lbW9yeSIsICJjYyIsICJ4bW0wIiwgInhtbTEiICk7CisKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR0NNIG11bHRpcGxpY2F0aW9uOiBjID0gYSB0aW1lcyBiIGluIEdGKDJeMTI4KQorICogQmFzZWQgb24gW0NMTVVMLVdQXSBhbGdvcml0aG1zIDEgKHdpdGggZXF1YXRpb24gMjcpIGFuZCA1LgorICovCit2b2lkIG1iZWR0bHNfYWVzbmlfZ2NtX211bHQoIHVuc2lnbmVkIGNoYXIgY1sxNl0sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGFbMTZdLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBiWzE2XSApCit7CisgICAgdW5zaWduZWQgY2hhciBhYVsxNl0sIGJiWzE2XSwgY2NbMTZdOworICAgIHNpemVfdCBpOworCisgICAgLyogVGhlIGlucHV0cyBhcmUgaW4gYmlnLWVuZGlhbiBvcmRlciwgc28gYnl0ZS1yZXZlcnNlIHRoZW0gKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgeworICAgICAgICBhYVtpXSA9IGFbMTUgLSBpXTsKKyAgICAgICAgYmJbaV0gPSBiWzE1IC0gaV07CisgICAgfQorCisgICAgYXNtKCAibW92ZHF1ICglMCksICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIGExOmEwCisgICAgICAgICAibW92ZHF1ICglMSksICUleG1tMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGIxOmIwCisKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBDYXJ5bGVzcyBtdWx0aXBsaWNhdGlvbiB4bW0yOnhtbTEgPSB4bW0wICogeG1tMQorICAgICAgICAgICogdXNpbmcgW0NMTVVMLVdQXSBhbGdvcml0aG0gMSAocC4gMTMpLgorICAgICAgICAgICovCisgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW0yICAgICAgICAgICAgIFxuXHQiIC8vIGNvcHkgb2YgYjE6YjAKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTMgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgIm1vdmRxYSAlJXhtbTEsICUleG1tNCAgICAgICAgICAgICBcblx0IiAvLyBzYW1lCisgICAgICAgICBQQ0xNVUxRRFEgeG1tMF94bW0xICIsMHgwMCAgICAgICAgIFxuXHQiIC8vIGEwKmIwID0gYzE6YzAKKyAgICAgICAgIFBDTE1VTFFEUSB4bW0wX3htbTIgIiwweDExICAgICAgICAgXG5cdCIgLy8gYTEqYjEgPSBkMTpkMAorICAgICAgICAgUENMTVVMUURRIHhtbTBfeG1tMyAiLDB4MTAgICAgICAgICBcblx0IiAvLyBhMCpiMSA9IGUxOmUwCisgICAgICAgICBQQ0xNVUxRRFEgeG1tMF94bW00ICIsMHgwMSAgICAgICAgIFxuXHQiIC8vIGExKmIwID0gZjE6ZjAKKyAgICAgICAgICJweG9yICUleG1tMywgJSV4bW00ICAgICAgICAgICAgICAgXG5cdCIgLy8gZTErZjE6ZTArZjAKKyAgICAgICAgICJtb3ZkcWEgJSV4bW00LCAlJXhtbTMgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgInBzcmxkcSAkOCwgJSV4bW00ICAgICAgICAgICAgICAgICBcblx0IiAvLyAwOmUxK2YxCisgICAgICAgICAicHNsbGRxICQ4LCAlJXhtbTMgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGUwK2YwOjAKKyAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW0yICAgICAgICAgICAgICAgXG5cdCIgLy8gZDE6ZDArZTErZjEKKyAgICAgICAgICJweG9yICUleG1tMywgJSV4bW0xICAgICAgICAgICAgICAgXG5cdCIgLy8gYzErZTArZjE6YzAKKworICAgICAgICAgLyoKKyAgICAgICAgICAqIE5vdyBzaGlmdCB0aGUgcmVzdWx0IG9uZSBiaXQgdG8gdGhlIGxlZnQsCisgICAgICAgICAgKiB0YWtpbmcgYWR2YW50YWdlIG9mIFtDTE1VTC1XUF0gZXEgMjcgKHAuIDIwKQorICAgICAgICAgICovCisgICAgICAgICAibW92ZHFhICUleG1tMSwgJSV4bW0zICAgICAgICAgICAgIFxuXHQiIC8vIHIxOnIwCisgICAgICAgICAibW92ZHFhICUleG1tMiwgJSV4bW00ICAgICAgICAgICAgIFxuXHQiIC8vIHIzOnIyCisgICAgICAgICAicHNsbHEgJDEsICUleG1tMSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIxPDwxOnIwPDwxCisgICAgICAgICAicHNsbHEgJDEsICUleG1tMiAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIzPDwxOnIyPDwxCisgICAgICAgICAicHNybHEgJDYzLCAlJXhtbTMgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIxPj42MzpyMD4+NjMKKyAgICAgICAgICJwc3JscSAkNjMsICUleG1tNCAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcjM+PjYzOnIyPj42MworICAgICAgICAgIm1vdmRxYSAlJXhtbTMsICUleG1tNSAgICAgICAgICAgICBcblx0IiAvLyByMT4+NjM6cjA+PjYzCisgICAgICAgICAicHNsbGRxICQ4LCAlJXhtbTMgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIwPj42MzowCisgICAgICAgICAicHNsbGRxICQ4LCAlJXhtbTQgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIyPj42MzowCisgICAgICAgICAicHNybGRxICQ4LCAlJXhtbTUgICAgICAgICAgICAgICAgIFxuXHQiIC8vIDA6cjE+PjYzCisgICAgICAgICAicG9yICUleG1tMywgJSV4bW0xICAgICAgICAgICAgICAgIFxuXHQiIC8vIHIxPDwxfHIwPj42MzpyMDw8MQorICAgICAgICAgInBvciAlJXhtbTQsICUleG1tMiAgICAgICAgICAgICAgICBcblx0IiAvLyByMzw8MXxyMj4+NjI6cjI8PDEKKyAgICAgICAgICJwb3IgJSV4bW01LCAlJXhtbTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gcjM8PDF8cjI+PjYyOnIyPDwxfHIxPj42MworCisgICAgICAgICAvKgorICAgICAgICAgICogTm93IHJlZHVjZSBtb2R1bG8gdGhlIEdDTSBwb2x5bm9taWFsIHheMTI4ICsgeF43ICsgeF4yICsgeCArIDEKKyAgICAgICAgICAqIHVzaW5nIFtDTE1VTC1XUF0gYWxnb3JpdGhtIDUgKHAuIDIwKS4KKyAgICAgICAgICAqIEN1cnJlbnRseSB4bW0yOnhtbTEgaG9sZHMgeDM6eDI6eDE6eDAgKGFscmVhZHkgc2hpZnRlZCkuCisgICAgICAgICAgKi8KKyAgICAgICAgIC8qIFN0ZXAgMiAoMSkgKi8KKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTMgICAgICAgICAgICAgXG5cdCIgLy8geDE6eDAKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCAlJXhtbTQgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgIm1vdmRxYSAlJXhtbTEsICUleG1tNSAgICAgICAgICAgICBcblx0IiAvLyBzYW1lCisgICAgICAgICAicHNsbHEgJDYzLCAlJXhtbTMgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHgxPDw2Mzp4MDw8NjMgPSBzdHVmZjphCisgICAgICAgICAicHNsbHEgJDYyLCAlJXhtbTQgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHgxPDw2Mjp4MDw8NjIgPSBzdHVmZjpiCisgICAgICAgICAicHNsbHEgJDU3LCAlJXhtbTUgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHgxPDw1Nzp4MDw8NTcgPSBzdHVmZjpjCisKKyAgICAgICAgIC8qIFN0ZXAgMiAoMikgKi8KKyAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW0zICAgICAgICAgICAgICAgXG5cdCIgLy8gc3R1ZmY6YStiCisgICAgICAgICAicHhvciAlJXhtbTUsICUleG1tMyAgICAgICAgICAgICAgIFxuXHQiIC8vIHN0dWZmOmErYitjCisgICAgICAgICAicHNsbGRxICQ4LCAlJXhtbTMgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGErYitjOjAKKyAgICAgICAgICJweG9yICUleG1tMywgJSV4bW0xICAgICAgICAgICAgICAgXG5cdCIgLy8geDErYStiK2M6eDAgPSBkOngwCisKKyAgICAgICAgIC8qIFN0ZXBzIDMgYW5kIDQgKi8KKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCUleG1tMCAgICAgICAgICAgICAgXG5cdCIgLy8gZDp4MAorICAgICAgICAgIm1vdmRxYSAlJXhtbTEsJSV4bW00ICAgICAgICAgICAgICBcblx0IiAvLyBzYW1lCisgICAgICAgICAibW92ZHFhICUleG1tMSwlJXhtbTUgICAgICAgICAgICAgIFxuXHQiIC8vIHNhbWUKKyAgICAgICAgICJwc3JscSAkMSwgJSV4bW0wICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZTE6eDA+PjEgPSBlMTplMCcKKyAgICAgICAgICJwc3JscSAkMiwgJSV4bW00ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZjE6eDA+PjIgPSBmMTpmMCcKKyAgICAgICAgICJwc3JscSAkNywgJSV4bW01ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZzE6eDA+PjcgPSBnMTpnMCcKKyAgICAgICAgICJweG9yICUleG1tNCwgJSV4bW0wICAgICAgICAgICAgICAgXG5cdCIgLy8gZTErZjE6ZTAnK2YwJworICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IiAvLyBlMStmMStnMTplMCcrZjAnK2cwJworICAgICAgICAgLy8gZTAnK2YwJytnMCcgaXMgYWxtb3N0IGUwK2YwK2cwLCBleFx0Y2VwdCBmb3Igc29tZSBtaXNzaW5nCisgICAgICAgICAvLyBiaXRzIGNhcnJpZWQgZnJvbSBkLiBOb3cgZ2V0IHRob3NlXHQgYml0cyBiYWNrIGluLgorICAgICAgICAgIm1vdmRxYSAlJXhtbTEsJSV4bW0zICAgICAgICAgICAgICBcblx0IiAvLyBkOngwCisgICAgICAgICAibW92ZHFhICUleG1tMSwlJXhtbTQgICAgICAgICAgICAgIFxuXHQiIC8vIHNhbWUKKyAgICAgICAgICJtb3ZkcWEgJSV4bW0xLCUleG1tNSAgICAgICAgICAgICAgXG5cdCIgLy8gc2FtZQorICAgICAgICAgInBzbGxxICQ2MywgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyBkPDw2MzpzdHVmZgorICAgICAgICAgInBzbGxxICQ2MiwgJSV4bW00ICAgICAgICAgICAgICAgICBcblx0IiAvLyBkPDw2MjpzdHVmZgorICAgICAgICAgInBzbGxxICQ1NywgJSV4bW01ICAgICAgICAgICAgICAgICBcblx0IiAvLyBkPDw1NzpzdHVmZgorICAgICAgICAgInB4b3IgJSV4bW00LCAlJXhtbTMgICAgICAgICAgICAgICBcblx0IiAvLyBkPDw2MytkPDw2MjpzdHVmZgorICAgICAgICAgInB4b3IgJSV4bW01LCAlJXhtbTMgICAgICAgICAgICAgICBcblx0IiAvLyBtaXNzaW5nIGJpdHMgb2YgZDpzdHVmZgorICAgICAgICAgInBzcmxkcSAkOCwgJSV4bW0zICAgICAgICAgICAgICAgICBcblx0IiAvLyAwOm1pc3NpbmcgYml0cyBvZiBkCisgICAgICAgICAicHhvciAlJXhtbTMsICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIGUxK2YxK2cxOmUwK2YwK2cwCisgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIGgxOmgwCisgICAgICAgICAicHhvciAlJXhtbTIsICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIHgzK2gxOngyK2gwCisKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJTIpICAgICAgICAgICAgICAgXG5cdCIgLy8gZG9uZQorICAgICAgICAgOgorICAgICAgICAgOiAiciIgKGFhKSwgInIiIChiYiksICJyIiAoY2MpCisgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAieG1tMCIsICJ4bW0xIiwgInhtbTIiLCAieG1tMyIsICJ4bW00IiwgInhtbTUiICk7CisKKyAgICAvKiBOb3cgYnl0ZS1yZXZlcnNlIHRoZSBvdXRwdXRzICovCisgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICBjW2ldID0gY2NbMTUgLSBpXTsKKworICAgIHJldHVybjsKK30KKworLyoKKyAqIENvbXB1dGUgZGVjcnlwdGlvbiByb3VuZCBrZXlzIGZyb20gZW5jcnlwdGlvbiByb3VuZCBrZXlzCisgKi8KK3ZvaWQgbWJlZHRsc19hZXNuaV9pbnZlcnNlX2tleSggdW5zaWduZWQgY2hhciAqaW52a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZndka2V5LCBpbnQgbnIgKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmlrID0gaW52a2V5OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZrID0gZndka2V5ICsgMTYgKiBucjsKKworICAgIG1lbWNweSggaWssIGZrLCAxNiApOworCisgICAgZm9yKCBmayAtPSAxNiwgaWsgKz0gMTY7IGZrID4gZndka2V5OyBmayAtPSAxNiwgaWsgKz0gMTYgKQorICAgICAgICBhc20oICJtb3ZkcXUgKCUwKSwgJSV4bW0wICAgICAgIFxuXHQiCisgICAgICAgICAgICAgQUVTSU1DICB4bW0wX3htbTAgICAgICAgICAiXG5cdCIKKyAgICAgICAgICAgICAibW92ZHF1ICUleG1tMCwgKCUxKSAgICAgICBcblx0IgorICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICA6ICJyIiAoZmspLCAiciIgKGlrKQorICAgICAgICAgICAgIDogIm1lbW9yeSIsICJ4bW0wIiApOworCisgICAgbWVtY3B5KCBpaywgZmssIDE2ICk7Cit9CisKKy8qCisgKiBLZXkgZXhwYW5zaW9uLCAxMjgtYml0IGNhc2UKKyAqLworc3RhdGljIHZvaWQgYWVzbmlfc2V0a2V5X2VuY18xMjgoIHVuc2lnbmVkIGNoYXIgKnJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSApCit7CisgICAgYXNtKCAibW92ZHF1ICglMSksICUleG1tMCAgICAgICAgICAgICAgIFxuXHQiIC8vIGNvcHkgdGhlIG9yaWdpbmFsIGtleQorICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICglMCkgICAgICAgICAgICAgICBcblx0IiAvLyBhcyByb3VuZCBrZXkgMAorICAgICAgICAgImptcCAyZiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBza2lwIGF1eGlsaWFyeSByb3V0aW5lCisKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBGaW5pc2ggZ2VuZXJhdGluZyB0aGUgbmV4dCByb3VuZCBrZXkuCisgICAgICAgICAgKgorICAgICAgICAgICogT24gZW50cnkgeG1tMCBpcyByMzpyMjpyMTpyMCBhbmQgeG1tMSBpcyBYOnN0dWZmOnN0dWZmOnN0dWZmCisgICAgICAgICAgKiB3aXRoIFggPSByb3QoIHN1YiggcjMgKSApIF4gUkNPTi4KKyAgICAgICAgICAqCisgICAgICAgICAgKiBPbiBleGl0LCB4bW0wIGlzIHI3OnI2OnI1OnI0CisgICAgICAgICAgKiB3aXRoIHI0ID0gWCArIHIwLCByNSA9IHI0ICsgcjEsIHI2ID0gcjUgKyByMiwgcjcgPSByNiArIHIzCisgICAgICAgICAgKiBhbmQgdGhvc2UgYXJlIHdyaXR0ZW4gdG8gdGhlIHJvdW5kIGtleSBidWZmZXIuCisgICAgICAgICAgKi8KKyAgICAgICAgICIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2h1ZmQgJDB4ZmYsICUleG1tMSwgJSV4bW0xICAgICAgXG5cdCIgLy8gWDpYOlg6WAorICAgICAgICAgInB4b3IgJSV4bW0wLCAlJXhtbTEgICAgICAgICAgICAgICBcblx0IiAvLyBYK3IzOlgrcjI6WCtyMTpyNAorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgICAgICBcblx0IiAvLyByMjpyMTpyMDowCisgICAgICAgICAicHhvciAlJXhtbTAsICUleG1tMSAgICAgICAgICAgICAgIFxuXHQiIC8vIFgrcjMrcjI6WCtyMityMTpyNTpyNAorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgICAgICBcblx0IiAvLyBldGMKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0xICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2xsZHEgJDQsICUleG1tMCAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJweG9yICUleG1tMSwgJSV4bW0wICAgICAgICAgICAgICAgXG5cdCIgLy8gdXBkYXRlIHhtbTAgZm9yIG5leHQgdGltZSEKKyAgICAgICAgICJhZGQgJDE2LCAlMCAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcG9pbnQgdG8gbmV4dCByb3VuZCBrZXkKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJTApICAgICAgICAgICAgICAgXG5cdCIgLy8gd3JpdGUgaXQKKyAgICAgICAgICJyZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKworICAgICAgICAgLyogTWFpbiAibG9vcCIgKi8KKyAgICAgICAgICIyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgwMSAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgwMiAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgwNCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgwOCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgxMCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgyMCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHg0MCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHg4MCAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgxQiAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMF94bW0xICIsMHgzNiAgICAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIDoKKyAgICAgICAgIDogInIiIChyayksICJyIiAoa2V5KQorICAgICAgICAgOiAibWVtb3J5IiwgImNjIiwgIjAiICk7Cit9CisKKy8qCisgKiBLZXkgZXhwYW5zaW9uLCAxOTItYml0IGNhc2UKKyAqLworc3RhdGljIHZvaWQgYWVzbmlfc2V0a2V5X2VuY18xOTIoIHVuc2lnbmVkIGNoYXIgKnJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSApCit7CisgICAgYXNtKCAibW92ZHF1ICglMSksICUleG1tMCAgIFxuXHQiIC8vIGNvcHkgb3JpZ2luYWwgcm91bmQga2V5CisgICAgICAgICAibW92ZHF1ICUleG1tMCwgKCUwKSAgIFxuXHQiCisgICAgICAgICAiYWRkICQxNiwgJTAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92cSAxNiglMSksICUleG1tMSAgIFxuXHQiCisgICAgICAgICAibW92cSAlJXhtbTEsICglMCkgICAgIFxuXHQiCisgICAgICAgICAiYWRkICQ4LCAlMCAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAiam1wIDJmICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNraXAgYXV4aWxpYXJ5IHJvdXRpbmUKKworICAgICAgICAgLyoKKyAgICAgICAgICAqIEZpbmlzaCBnZW5lcmF0aW5nIHRoZSBuZXh0IDYgcXVhcnRlci1rZXlzLgorICAgICAgICAgICoKKyAgICAgICAgICAqIE9uIGVudHJ5IHhtbTAgaXMgcjM6cjI6cjE6cjAsIHhtbTEgaXMgc3R1ZmY6c3R1ZmY6cjU6cjQKKyAgICAgICAgICAqIGFuZCB4bW0yIGlzIHN0dWZmOnN0dWZmOlg6c3R1ZmYgd2l0aCBYID0gcm90KCBzdWIoIHIzICkgKSBeIFJDT04uCisgICAgICAgICAgKgorICAgICAgICAgICogT24gZXhpdCwgeG1tMCBpcyByOTpyODpyNzpyNiBhbmQgeG1tMSBpcyBzdHVmZjpzdHVmZjpyMTE6cjEwCisgICAgICAgICAgKiBhbmQgdGhvc2UgYXJlIHdyaXR0ZW4gdG8gdGhlIHJvdW5kIGtleSBidWZmZXIuCisgICAgICAgICAgKi8KKyAgICAgICAgICIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzaHVmZCAkMHg1NSwgJSV4bW0yLCAlJXhtbTIgIFxuXHQiIC8vIFg6WDpYOlgKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yICAgICAgICAgICBcblx0IiAvLyBYK3IzOlgrcjI6WCtyMTpyNAorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgIFxuXHQiIC8vIGV0YworICAgICAgICAgInB4b3IgJSV4bW0wLCAlJXhtbTIgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNsbGRxICQ0LCAlJXhtbTAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJweG9yICUleG1tMCwgJSV4bW0yICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTIsICUleG1tMCAgICAgICAgICAgXG5cdCIgLy8gdXBkYXRlIHhtbTAgPSByOTpyODpyNzpyNgorICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICglMCkgICAgICAgICAgIFxuXHQiCisgICAgICAgICAiYWRkICQxNiwgJTAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJwc2h1ZmQgJDB4ZmYsICUleG1tMCwgJSV4bW0yICBcblx0IiAvLyByOTpyOTpyOTpyOQorICAgICAgICAgInB4b3IgJSV4bW0xLCAlJXhtbTIgICAgICAgICAgIFxuXHQiIC8vIHN0dWZmOnN0dWZmOnI5K3I1OnIxMAorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0xICAgICAgICAgICAgIFxuXHQiIC8vIHIyOnIxOnIwOjAKKyAgICAgICAgICJweG9yICUleG1tMiwgJSV4bW0xICAgICAgICAgICBcblx0IiAvLyB4bW0xID0gc3R1ZmY6c3R1ZmY6cjExOnIxMAorICAgICAgICAgIm1vdnEgJSV4bW0xLCAoJTApICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAiYWRkICQ4LCAlMCAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJyZXQgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwMSAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDAyICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTFfeG1tMiAiLDB4MDQgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHgwOCAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDEwICAgIFxuXHRjYWxsIDFiIFxuXHQiCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTFfeG1tMiAiLDB4MjAgICAgXG5cdGNhbGwgMWIgXG5cdCIKKyAgICAgICAgIEFFU0tFWUdFTkEgeG1tMV94bW0yICIsMHg0MCAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDgwICAgIFxuXHRjYWxsIDFiIFxuXHQiCisKKyAgICAgICAgIDoKKyAgICAgICAgIDogInIiIChyayksICJyIiAoa2V5KQorICAgICAgICAgOiAibWVtb3J5IiwgImNjIiwgIjAiICk7Cit9CisKKy8qCisgKiBLZXkgZXhwYW5zaW9uLCAyNTYtYml0IGNhc2UKKyAqLworc3RhdGljIHZvaWQgYWVzbmlfc2V0a2V5X2VuY18yNTYoIHVuc2lnbmVkIGNoYXIgKnJrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSApCit7CisgICAgYXNtKCAibW92ZHF1ICglMSksICUleG1tMCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0wLCAoJTApICAgICAgICAgICBcblx0IgorICAgICAgICAgImFkZCAkMTYsICUwICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1IDE2KCUxKSwgJSV4bW0xICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZkcXUgJSV4bW0xLCAoJTApICAgICAgICAgICBcblx0IgorICAgICAgICAgImptcCAyZiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNraXAgYXV4aWxpYXJ5IHJvdXRpbmUKKworICAgICAgICAgLyoKKyAgICAgICAgICAqIEZpbmlzaCBnZW5lcmF0aW5nIHRoZSBuZXh0IHR3byByb3VuZCBrZXlzLgorICAgICAgICAgICoKKyAgICAgICAgICAqIE9uIGVudHJ5IHhtbTAgaXMgcjM6cjI6cjE6cjAsIHhtbTEgaXMgcjc6cjY6cjU6cjQgYW5kCisgICAgICAgICAgKiB4bW0yIGlzIFg6c3R1ZmY6c3R1ZmY6c3R1ZmYgd2l0aCBYID0gcm90KCBzdWIoIHI3ICkpIF4gUkNPTgorICAgICAgICAgICoKKyAgICAgICAgICAqIE9uIGV4aXQsIHhtbTAgaXMgcjExOnIxMDpyOTpyOCBhbmQgeG1tMSBpcyByMTU6cjE0OnIxMzpyMTIKKyAgICAgICAgICAqIGFuZCB0aG9zZSBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAgICAqLworICAgICAgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzaHVmZCAkMHhmZiwgJSV4bW0yLCAlJXhtbTIgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0wLCAlJXhtbTIgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0wLCAlJXhtbTIgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0wLCAlJXhtbTIgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBzbGxkcSAkNCwgJSV4bW0wICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInB4b3IgJSV4bW0yLCAlJXhtbTAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgImFkZCAkMTYsICUwICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmRxdSAlJXhtbTAsICglMCkgICAgICAgICAgICAgICBcblx0IgorCisgICAgICAgICAvKiBTZXQgeG1tMiB0byBzdHVmZjpZOnN0dWZmOnN0dWZmIHdpdGggWSA9IHN1YndvcmQoIHIxMSApCisgICAgICAgICAgKiBhbmQgcHJvY2VlZCB0byBnZW5lcmF0ZSBuZXh0IHJvdW5kIGtleSBmcm9tIHRoZXJlICovCisgICAgICAgICBBRVNLRVlHRU5BIHhtbTBfeG1tMiAiLDB4MDAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNodWZkICQweGFhLCAlJXhtbTIsICUleG1tMiAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMiAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNsbGRxICQ0LCAlJXhtbTEgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMiAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNsbGRxICQ0LCAlJXhtbTEgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTEsICUleG1tMiAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHNsbGRxICQ0LCAlJXhtbTEgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicHhvciAlJXhtbTIsICUleG1tMSAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAiYWRkICQxNiwgJTAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92ZHF1ICUleG1tMSwgKCUwKSAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBNYWluICJsb29wIiAtIEdlbmVyYXRpbmcgb25lIG1vcmUga2V5IHRoYW4gbmVjZXNzYXJ5LAorICAgICAgICAgICogc2VlIGRlZmluaXRpb24gb2YgbWJlZHRsc19hZXNfY29udGV4dC5idWYKKyAgICAgICAgICAqLworICAgICAgICAgIjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDAxICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDAyICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDA0ICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDA4ICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDEwICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDIwICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgQUVTS0VZR0VOQSB4bW0xX3htbTIgIiwweDQwICAgICAgICBcblx0Y2FsbCAxYiBcblx0IgorICAgICAgICAgOgorICAgICAgICAgOiAiciIgKHJrKSwgInIiIChrZXkpCisgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiMCIgKTsKK30KKworLyoKKyAqIEtleSBleHBhbnNpb24sIHdyYXBwZXIKKyAqLworaW50IG1iZWR0bHNfYWVzbmlfc2V0a2V5X2VuYyggdW5zaWduZWQgY2hhciAqcmssCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBiaXRzICkKK3sKKyAgICBzd2l0Y2goIGJpdHMgKQorICAgIHsKKyAgICAgICAgY2FzZSAxMjg6IGFlc25pX3NldGtleV9lbmNfMTI4KCByaywga2V5ICk7IGJyZWFrOworICAgICAgICBjYXNlIDE5MjogYWVzbmlfc2V0a2V5X2VuY18xOTIoIHJrLCBrZXkgKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMjU2OiBhZXNuaV9zZXRrZXlfZW5jXzI1NiggcmssIGtleSApOyBicmVhazsKKyAgICAgICAgZGVmYXVsdCA6IHJldHVybiggTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1g4Nl82NCAqLworCisjZW5kaWYgLyogTUJFRFRMU19BRVNOSV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hcmM0LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hcmM0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViMzNkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2FyYzQuYwpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVJDRk9VUiBhbGdvcml0aG0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIEFSQ0ZPVVIgYWxnb3JpdGhtIHdhcyBwdWJsaWNseSBkaXNjbG9zZWQgb24gOTQvMDkuCisgKgorICogIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9zY2kuY3J5cHQvbXNnLzEwYTMwMGM5ZDIxYWZjYTAKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvYXJjNC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQVJDNF9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciopdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCit2b2lkIG1iZWR0bHNfYXJjNF9pbml0KCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2FyYzRfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19hcmM0X2ZyZWUoIG1iZWR0bHNfYXJjNF9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfYXJjNF9jb250ZXh0ICkgKTsKK30KKworLyoKKyAqIEFSQzQga2V5IHNjaGVkdWxlCisgKi8KK3ZvaWQgbWJlZHRsc19hcmM0X3NldHVwKCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4gKQoreworICAgIGludCBpLCBqLCBhOworICAgIHVuc2lnbmVkIGludCBrOworICAgIHVuc2lnbmVkIGNoYXIgKm07CisKKyAgICBjdHgtPnggPSAwOworICAgIGN0eC0+eSA9IDA7CisgICAgbSA9IGN0eC0+bTsKKworICAgIGZvciggaSA9IDA7IGkgPCAyNTY7IGkrKyApCisgICAgICAgIG1baV0gPSAodW5zaWduZWQgY2hhcikgaTsKKworICAgIGogPSBrID0gMDsKKworICAgIGZvciggaSA9IDA7IGkgPCAyNTY7IGkrKywgaysrICkKKyAgICB7CisgICAgICAgIGlmKCBrID49IGtleWxlbiApIGsgPSAwOworCisgICAgICAgIGEgPSBtW2ldOworICAgICAgICBqID0gKCBqICsgYSArIGtleVtrXSApICYgMHhGRjsKKyAgICAgICAgbVtpXSA9IG1bal07CisgICAgICAgIG1bal0gPSAodW5zaWduZWQgY2hhcikgYTsKKyAgICB9Cit9CisKKy8qCisgKiBBUkM0IGNpcGhlciBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19hcmM0X2NyeXB0KCBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4LCBzaXplX3QgbGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCB4LCB5LCBhLCBiOworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIGNoYXIgKm07CisKKyAgICB4ID0gY3R4LT54OworICAgIHkgPSBjdHgtPnk7CisgICAgbSA9IGN0eC0+bTsKKworICAgIGZvciggaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyApCisgICAgeworICAgICAgICB4ID0gKCB4ICsgMSApICYgMHhGRjsgYSA9IG1beF07CisgICAgICAgIHkgPSAoIHkgKyBhICkgJiAweEZGOyBiID0gbVt5XTsKKworICAgICAgICBtW3hdID0gKHVuc2lnbmVkIGNoYXIpIGI7CisgICAgICAgIG1beV0gPSAodW5zaWduZWQgY2hhcikgYTsKKworICAgICAgICBvdXRwdXRbaV0gPSAodW5zaWduZWQgY2hhcikKKyAgICAgICAgICAgICggaW5wdXRbaV0gXiBtWyh1bnNpZ25lZCBjaGFyKSggYSArIGIgKV0gKTsKKyAgICB9CisKKyAgICBjdHgtPnggPSB4OworICAgIGN0eC0+eSA9IHk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX0FSQzRfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoKKyAqIEFSQzQgdGVzdHMgdmVjdG9ycyBhcyBwb3N0ZWQgYnkgRXJpYyBSZXNjb3JsYSBpbiBzZXAuIDE5OTQ6CisgKgorICogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2NvbXAuc2VjdXJpdHkubWlzYy9tc2cvMTBhMzAwYzlkMjFhZmNhMAorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhcmM0X3Rlc3Rfa2V5WzNdWzhdID0KK3sKKyAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYgfSwKKyAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYgfSwKKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXJjNF90ZXN0X3B0WzNdWzhdID0KK3sKKyAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYgfSwKKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXJjNF90ZXN0X2N0WzNdWzhdID0KK3sKKyAgICB7IDB4NzUsIDB4QjcsIDB4ODcsIDB4ODAsIDB4OTksIDB4RTAsIDB4QzUsIDB4OTYgfSwKKyAgICB7IDB4NzQsIDB4OTQsIDB4QzIsIDB4RTcsIDB4MTAsIDB4NEIsIDB4MDgsIDB4NzkgfSwKKyAgICB7IDB4REUsIDB4MTgsIDB4ODksIDB4NDEsIDB4QTMsIDB4MzcsIDB4NUQsIDB4M0EgfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19hcmM0X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpLCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgaWJ1Zls4XTsKKyAgICB1bnNpZ25lZCBjaGFyIG9idWZbOF07CisgICAgbWJlZHRsc19hcmM0X2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19hcmM0X2luaXQoICZjdHggKTsKKworICAgIGZvciggaSA9IDA7IGkgPCAzOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgQVJDNCB0ZXN0ICMlZDogIiwgaSArIDEgKTsKKworICAgICAgICBtZW1jcHkoIGlidWYsIGFyYzRfdGVzdF9wdFtpXSwgOCApOworCisgICAgICAgIG1iZWR0bHNfYXJjNF9zZXR1cCggJmN0eCwgYXJjNF90ZXN0X2tleVtpXSwgOCApOworICAgICAgICBtYmVkdGxzX2FyYzRfY3J5cHQoICZjdHgsIDgsIGlidWYsIG9idWYgKTsKKworICAgICAgICBpZiggbWVtY21wKCBvYnVmLCBhcmM0X3Rlc3RfY3RbaV0sIDggKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2FyYzRfZnJlZSggJmN0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYXNuMXBhcnNlLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9hc24xcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ2NWMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYXNuMXBhcnNlLmMKQEAgLTAsMCArMSwzOTMgQEAKKy8qCisgKiAgR2VuZXJpYyBBU04uMSBwYXJzaW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVNOMV9QQVJTRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9hc24xLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKyNpbmNsdWRlICJtYmVkdGxzL2JpZ251bS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIEFTTi4xIERFUiBkZWNvZGluZyByb3V0aW5lcworICovCitpbnQgbWJlZHRsc19hc24xX2dldF9sZW4oIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgc2l6ZV90ICpsZW4gKQoreworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICBpZiggKCAqKnAgJiAweDgwICkgPT0gMCApCisgICAgICAgICpsZW4gPSAqKCpwKSsrOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN3aXRjaCggKipwICYgMHg3RiApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYoICggZW5kIC0gKnAgKSA8IDIgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgICAgICAgICAqbGVuID0gKCpwKVsxXTsKKyAgICAgICAgICAgICgqcCkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmKCAoIGVuZCAtICpwICkgPCAzICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgICAgICAgICAgKmxlbiA9ICggKHNpemVfdCkoKnApWzFdIDw8IDggKSB8ICgqcClbMl07CisgICAgICAgICAgICAoKnApICs9IDM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiggKCBlbmQgLSAqcCApIDwgNCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICAgICAgICAgICpsZW4gPSAoIChzaXplX3QpKCpwKVsxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAoIChzaXplX3QpKCpwKVsyXSA8PCA4ICApIHwgKCpwKVszXTsKKyAgICAgICAgICAgICgqcCkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGlmKCAoIGVuZCAtICpwICkgPCA1ICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgICAgICAgICAgKmxlbiA9ICggKHNpemVfdCkoKnApWzFdIDw8IDI0ICkgfCAoIChzaXplX3QpKCpwKVsyXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAoIChzaXplX3QpKCpwKVszXSA8PCA4ICApIHwgICAgICAgICAgICgqcClbNF07CisgICAgICAgICAgICAoKnApICs9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggKmxlbiA+IChzaXplX3QpICggZW5kIC0gKnAgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBzaXplX3QgKmxlbiwgaW50IHRhZyApCit7CisgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIGlmKCAqKnAgIT0gdGFnICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisKKyAgICAoKnApKys7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfYXNuMV9nZXRfbGVuKCBwLCBlbmQsIGxlbiApICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2Jvb2woIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICBpbnQgKnZhbCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwgTUJFRFRMU19BU04xX0JPT0xFQU4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIGxlbiAhPSAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICk7CisKKyAgICAqdmFsID0gKCAqKnAgIT0gMCApID8gMSA6IDA7CisgICAgKCpwKSsrOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfZ2V0X2ludCggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBpbnQgKnZhbCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwgTUJFRFRMU19BU04xX0lOVEVHRVIgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIGxlbiA9PSAwIHx8IGxlbiA+IHNpemVvZiggaW50ICkgfHwgKCAqKnAgJiAweDgwICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCApOworCisgICAgKnZhbCA9IDA7CisKKyAgICB3aGlsZSggbGVuLS0gPiAwICkKKyAgICB7CisgICAgICAgICp2YWwgPSAoICp2YWwgPDwgOCApIHwgKipwOworICAgICAgICAoKnApKys7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCitpbnQgbWJlZHRsc19hc24xX2dldF9tcGkoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgbWJlZHRsc19tcGkgKlggKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9JTlRFR0VSICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCBYLCAqcCwgbGVuICk7CisKKyAgICAqcCArPSBsZW47CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgKi8KKworaW50IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX2JpdHN0cmluZyAqYnMpCit7CisgICAgaW50IHJldDsKKworICAgIC8qIENlcnRpZmljYXRlIHR5cGUgaXMgYSBzaW5nbGUgYnl0ZSBiaXRzdHJpbmcgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmYnMtPmxlbiwgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgLyogQ2hlY2sgbGVuZ3RoLCBzdWJ0cmFjdCBvbmUgZm9yIGFjdHVhbCBiaXQgc3RyaW5nIGxlbmd0aCAqLworICAgIGlmKCBicy0+bGVuIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworICAgIGJzLT5sZW4gLT0gMTsKKworICAgIC8qIEdldCBudW1iZXIgb2YgdW51c2VkIGJpdHMsIGVuc3VyZSB1bnVzZWQgYml0cyA8PSA3ICovCisgICAgYnMtPnVudXNlZF9iaXRzID0gKipwOworICAgIGlmKCBicy0+dW51c2VkX2JpdHMgPiA3ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICk7CisgICAgKCpwKSsrOworCisgICAgLyogR2V0IGFjdHVhbCBiaXRzdHJpbmcgKi8KKyAgICBicy0+cCA9ICpwOworICAgICpwICs9IGJzLT5sZW47CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBHZXQgYSBiaXQgc3RyaW5nIHdpdGhvdXQgdW51c2VkIGJpdHMKKyAqLworaW50IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nX251bGwoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgbGVuLCBNQkVEVExTX0FTTjFfQklUX1NUUklORyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCpsZW4pLS0gPCAyIHx8ICooKnApKysgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0RBVEEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisKKworLyoKKyAqICBQYXJzZXMgYW5kIHNwbGl0cyBhbiBBU04uMSAiU0VRVUVOQ0UgT0YgPHRhZz4iCisgKi8KK2ludCBtYmVkdGxzX2FzbjFfZ2V0X3NlcXVlbmNlX29mKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgKmN1ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZykKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc19hc24xX2J1ZiAqYnVmOworCisgICAgLyogR2V0IG1haW4gc2VxdWVuY2UgdGFnICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKnAgKyBsZW4gIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgd2hpbGUoICpwIDwgZW5kICkKKyAgICB7CisgICAgICAgIGJ1ZiA9ICYoY3VyLT5idWYpOworICAgICAgICBidWYtPnRhZyA9ICoqcDsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmYnVmLT5sZW4sIHRhZyApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGJ1Zi0+cCA9ICpwOworICAgICAgICAqcCArPSBidWYtPmxlbjsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgYXNzaWduIG5leHQgcG9pbnRlciAqLworICAgICAgICBpZiggKnAgPCBlbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBjdXItPm5leHQgPSAobWJlZHRsc19hc24xX3NlcXVlbmNlKiltYmVkdGxzX2NhbGxvYyggMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgKSApOworCisgICAgICAgICAgICBpZiggY3VyLT5uZXh0ID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgLyogU2V0IGZpbmFsIHNlcXVlbmNlIGVudHJ5J3MgbmV4dCBwb2ludGVyIHRvIE5VTEwgKi8KKyAgICBjdXItPm5leHQgPSBOVUxMOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19hc24xX2dldF9hbGcoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX2J1ZiAqYWxnLCBtYmVkdGxzX2FzbjFfYnVmICpwYXJhbXMgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIGFsZy0+dGFnID0gKipwOworICAgIGVuZCA9ICpwICsgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmFsZy0+bGVuLCBNQkVEVExTX0FTTjFfT0lEICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGFsZy0+cCA9ICpwOworICAgICpwICs9IGFsZy0+bGVuOworCisgICAgaWYoICpwID09IGVuZCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIHBhcmFtcywgc2l6ZW9mKG1iZWR0bHNfYXNuMV9idWYpICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIHBhcmFtcy0+dGFnID0gKipwOworICAgICgqcCkrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbGVuKCBwLCBlbmQsICZwYXJhbXMtPmxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBwYXJhbXMtPnAgPSAqcDsKKyAgICAqcCArPSBwYXJhbXMtPmxlbjsKKworICAgIGlmKCAqcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV9nZXRfYWxnX251bGwoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9idWYgKmFsZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIHBhcmFtczsKKworICAgIG1lbXNldCggJnBhcmFtcywgMCwgc2l6ZW9mKG1iZWR0bHNfYXNuMV9idWYpICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggcCwgZW5kLCBhbGcsICZwYXJhbXMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcGFyYW1zLnRhZyAhPSBNQkVEVExTX0FTTjFfTlVMTCAmJiBwYXJhbXMudGFnICE9IDAgKSB8fCBwYXJhbXMubGVuICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordm9pZCBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhKCBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqY3VyICkKK3sKKyAgICBpZiggY3VyID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+b2lkLnAgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+dmFsLnAgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3VyLCBzaXplb2YoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QoIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCApCit7CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmN1cjsKKworICAgIHdoaWxlKCAoIGN1ciA9ICpoZWFkICkgIT0gTlVMTCApCisgICAgeworICAgICAgICAqaGVhZCA9IGN1ci0+bmV4dDsKKyAgICAgICAgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YSggY3VyICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyICk7CisgICAgfQorfQorCittYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqbWJlZHRsc19hc24xX2ZpbmRfbmFtZWRfZGF0YSggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBsZW4gKQoreworICAgIHdoaWxlKCBsaXN0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIGxpc3QtPm9pZC5sZW4gPT0gbGVuICYmCisgICAgICAgICAgICBtZW1jbXAoIGxpc3QtPm9pZC5wLCBvaWQsIGxlbiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OworICAgIH0KKworICAgIHJldHVybiggbGlzdCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19BU04xX1BBUlNFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2FzbjF3cml0ZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYXNuMXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliNjFiMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2FzbjF3cml0ZS5jCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICogQVNOLjEgYnVmZmVyIHdyaXRpbmcgZnVuY3Rpb25hbGl0eQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FTTjFfV1JJVEVfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvYXNuMXdyaXRlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBsZW4gPCAweDgwICkKKyAgICB7CisgICAgICAgIGlmKCAqcCAtIHN0YXJ0IDwgMSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgICAgICotLSgqcCkgPSAodW5zaWduZWQgY2hhcikgbGVuOworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggbGVuIDw9IDB4RkYgKQorICAgIHsKKyAgICAgICAgaWYoICpwIC0gc3RhcnQgPCAyICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgKi0tKCpwKSA9ICh1bnNpZ25lZCBjaGFyKSBsZW47CisgICAgICAgICotLSgqcCkgPSAweDgxOworICAgICAgICByZXR1cm4oIDIgKTsKKyAgICB9CisKKyAgICBpZiggbGVuIDw9IDB4RkZGRiApCisgICAgeworICAgICAgICBpZiggKnAgLSBzdGFydCA8IDMgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICAgICAqLS0oKnApID0gKCBsZW4gICAgICAgKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAoIGxlbiA+PiAgOCApICYgMHhGRjsKKyAgICAgICAgKi0tKCpwKSA9IDB4ODI7CisgICAgICAgIHJldHVybiggMyApOworICAgIH0KKworICAgIGlmKCBsZW4gPD0gMHhGRkZGRkYgKQorICAgIHsKKyAgICAgICAgaWYoICpwIC0gc3RhcnQgPCA0ICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgKi0tKCpwKSA9ICggbGVuICAgICAgICkgJiAweEZGOworICAgICAgICAqLS0oKnApID0gKCBsZW4gPj4gIDggKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAoIGxlbiA+PiAxNiApICYgMHhGRjsKKyAgICAgICAgKi0tKCpwKSA9IDB4ODM7CisgICAgICAgIHJldHVybiggNCApOworICAgIH0KKworICAgIGlmKCBsZW4gPD0gMHhGRkZGRkZGRiApCisgICAgeworICAgICAgICBpZiggKnAgLSBzdGFydCA8IDUgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICAgICAqLS0oKnApID0gKCBsZW4gICAgICAgKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAoIGxlbiA+PiAgOCApICYgMHhGRjsKKyAgICAgICAgKi0tKCpwKSA9ICggbGVuID4+IDE2ICkgJiAweEZGOworICAgICAgICAqLS0oKnApID0gKCBsZW4gPj4gMjQgKSAmIDB4RkY7CisgICAgICAgICotLSgqcCkgPSAweDg0OworICAgICAgICByZXR1cm4oIDUgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEggKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgdW5zaWduZWQgY2hhciB0YWcgKQoreworICAgIGlmKCAqcCAtIHN0YXJ0IDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAqLS0oKnApID0gdGFnOworCisgICAgcmV0dXJuKCAxICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlciggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSApCit7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBpZiggKnAgPCBzdGFydCB8fCAoc2l6ZV90KSggKnAgLSBzdGFydCApIDwgc2l6ZSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICBsZW4gPSBzaXplOworICAgICgqcCkgLT0gbGVuOworICAgIG1lbWNweSggKnAsIGJ1ZiwgbGVuICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQoraW50IG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgY29uc3QgbWJlZHRsc19tcGkgKlggKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICAvLyBXcml0ZSB0aGUgTVBJCisgICAgLy8KKyAgICBsZW4gPSBtYmVkdGxzX21waV9zaXplKCBYICk7CisKKyAgICBpZiggKnAgPCBzdGFydCB8fCAoc2l6ZV90KSggKnAgLSBzdGFydCApIDwgbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICgqcCkgLT0gbGVuOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCBYLCAqcCwgbGVuICkgKTsKKworICAgIC8vIERFUiBmb3JtYXQgYXNzdW1lcyAycyBjb21wbGVtZW50IGZvciBudW1iZXJzLCBzbyB0aGUgbGVmdG1vc3QgYml0CisgICAgLy8gc2hvdWxkIGJlIDAgZm9yIHBvc2l0aXZlIG51bWJlcnMgYW5kIDEgZm9yIG5lZ2F0aXZlIG51bWJlcnMuCisgICAgLy8KKyAgICBpZiggWC0+cyA9PTEgJiYgKipwICYgMHg4MCApCisgICAgeworICAgICAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICAgICAqLS0oKnApID0gMHgwMDsKKyAgICAgICAgbGVuICs9IDE7CisgICAgfQorCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9JTlRFR0VSICkgKTsKKworICAgIHJldCA9IChpbnQpIGxlbjsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgKi8KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICAvLyBXcml0ZSBOVUxMCisgICAgLy8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgMCkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX05VTEwgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9vaWQoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCBwLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBvaWQsIG9pZF9sZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4gLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuICwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9PSUQgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9hbGdvcml0aG1faWRlbnRpZmllciggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcl9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBpZiggcGFyX2xlbiA9PSAwICkKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX251bGwoIHAsIHN0YXJ0ICkgKTsKKyAgICBlbHNlCisgICAgICAgIGxlbiArPSBwYXJfbGVuOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX29pZCggcCwgc3RhcnQsIG9pZCwgb2lkX2xlbiApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc19hc24xX3dyaXRlX2Jvb2woIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgaW50IGJvb2xlYW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgKi0tKCpwKSA9IChib29sZWFuKSA/IDI1NSA6IDA7CisgICAgbGVuKys7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX0JPT0xFQU4gKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9pbnQoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwgaW50IHZhbCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIC8vIFRPRE8gbmVnYXRpdmUgdmFsdWVzIGFuZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMTI4CisgICAgLy8gREVSIGZvcm1hdCBhc3N1bWVzIDJzIGNvbXBsZW1lbnQgZm9yIG51bWJlcnMsIHNvIHRoZSBsZWZ0bW9zdCBiaXQKKyAgICAvLyBzaG91bGQgYmUgMCBmb3IgcG9zaXRpdmUgbnVtYmVycyBhbmQgMSBmb3IgbmVnYXRpdmUgbnVtYmVycy4KKyAgICAvLworICAgIGlmKCAqcCAtIHN0YXJ0IDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICBsZW4gKz0gMTsKKyAgICAqLS0oKnApID0gdmFsOworCisgICAgaWYoIHZhbCA+IDAgJiYgKipwICYgMHg4MCApCisgICAgeworICAgICAgICBpZiggKnAgLSBzdGFydCA8IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICAgICAqLS0oKnApID0gMHgwMDsKKyAgICAgICAgbGVuICs9IDE7CisgICAgfQorCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9JTlRFR0VSICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHAsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdGV4dCwgdGV4dF9sZW4gKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZyggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHAsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgdGV4dCwgdGV4dF9sZW4gKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9JQTVfU1RSSU5HICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfYml0c3RyaW5nKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJpdHMgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDAsIHNpemU7CisKKyAgICBzaXplID0gKCBiaXRzIC8gOCApICsgKCAoIGJpdHMgJSA4ICkgPyAxIDogMCApOworCisgICAgLy8gQ2FsY3VsYXRlIGJ5dGUgbGVuZ3RoCisgICAgLy8KKyAgICBpZiggKnAgPCBzdGFydCB8fCAoc2l6ZV90KSggKnAgLSBzdGFydCApIDwgc2l6ZSArIDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgbGVuID0gc2l6ZSArIDE7CisgICAgKCpwKSAtPSBzaXplOworICAgIG1lbWNweSggKnAsIGJ1Ziwgc2l6ZSApOworCisgICAgLy8gV3JpdGUgdW51c2VkIGJpdHMKKyAgICAvLworICAgICotLSgqcCkgPSAodW5zaWduZWQgY2hhcikgKHNpemUgKiA4IC0gYml0cyk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCBwLCBzdGFydCwgYnVmLCBzaXplICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKK21iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICptYmVkdGxzX2FzbjFfc3RvcmVfbmFtZWRfZGF0YSggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWxfbGVuICkKK3sKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqY3VyOworCisgICAgaWYoICggY3VyID0gbWJlZHRsc19hc24xX2ZpbmRfbmFtZWRfZGF0YSggKmhlYWQsIG9pZCwgb2lkX2xlbiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICAvLyBBZGQgbmV3IGVudHJ5IGlmIG5vdCBwcmVzZW50IHlldCBiYXNlZCBvbiBPSUQKKyAgICAgICAgLy8KKyAgICAgICAgY3VyID0gKG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhKiltYmVkdGxzX2NhbGxvYyggMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhKSApOworICAgICAgICBpZiggY3VyID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICAgICAgY3VyLT5vaWQubGVuID0gb2lkX2xlbjsKKyAgICAgICAgY3VyLT5vaWQucCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBvaWRfbGVuICk7CisgICAgICAgIGlmKCBjdXItPm9pZC5wID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ciApOworICAgICAgICAgICAgcmV0dXJuKCBOVUxMICk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIGN1ci0+b2lkLnAsIG9pZCwgb2lkX2xlbiApOworCisgICAgICAgIGN1ci0+dmFsLmxlbiA9IHZhbF9sZW47CisgICAgICAgIGN1ci0+dmFsLnAgPSBtYmVkdGxzX2NhbGxvYyggMSwgdmFsX2xlbiApOworICAgICAgICBpZiggY3VyLT52YWwucCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjdXItPm9pZC5wICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ciApOworICAgICAgICAgICAgcmV0dXJuKCBOVUxMICk7CisgICAgICAgIH0KKworICAgICAgICBjdXItPm5leHQgPSAqaGVhZDsKKyAgICAgICAgKmhlYWQgPSBjdXI7CisgICAgfQorICAgIGVsc2UgaWYoIGN1ci0+dmFsLmxlbiA8IHZhbF9sZW4gKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRW5sYXJnZSBleGlzdGluZyB2YWx1ZSBidWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAqIFByZXNlcnZlIG9sZCBkYXRhIHVudGlsIHRoZSBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgdG8gbGVhdmUgbGlzdCBpbgorICAgICAgICAgKiBhIGNvbnNpc3RlbnQgc3RhdGUgaW4gY2FzZSBhbGxvY2F0aW9uIGZhaWxzLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCAqcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCB2YWxfbGVuICk7CisgICAgICAgIGlmKCBwID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdXItPnZhbC5wICk7CisgICAgICAgIGN1ci0+dmFsLnAgPSBwOworICAgICAgICBjdXItPnZhbC5sZW4gPSB2YWxfbGVuOworICAgIH0KKworICAgIGlmKCB2YWwgIT0gTlVMTCApCisgICAgICAgIG1lbWNweSggY3VyLT52YWwucCwgdmFsLCB2YWxfbGVuICk7CisKKyAgICByZXR1cm4oIGN1ciApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9XUklURV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9iYXNlNjQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Jhc2U2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjEyY2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9iYXNlNjQuYwpAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqICBSRkMgMTUyMSBiYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvYmFzZTY0LmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiYXNlNjRfZW5jX21hcFs2NF0gPQoreworICAgICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywKKyAgICAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsCisgICAgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJywgJ2EnLCAnYicsICdjJywgJ2QnLAorICAgICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywKKyAgICAnbycsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsCisgICAgJ3knLCAneicsICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLAorICAgICc4JywgJzknLCAnKycsICcvJworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmFzZTY0X2RlY19tYXBbMTI4XSA9Cit7CisgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LAorICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywKKyAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsCisgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LAorICAgIDEyNywgMTI3LCAxMjcsICA2MiwgMTI3LCAxMjcsIDEyNywgIDYzLCAgNTIsICA1MywKKyAgICAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgMTI3LCAxMjcsCisgICAgMTI3LCAgNjQsIDEyNywgMTI3LCAxMjcsICAgMCwgICAxLCAgIDIsICAgMywgICA0LAorICAgICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwKKyAgICAgMTUsICAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsCisgICAgIDI1LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAgMjYsICAyNywgIDI4LAorICAgICAyOSwgIDMwLCAgMzEsICAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwKKyAgICAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LCAgNDgsCisgICAgIDQ5LCAgNTAsICA1MSwgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcKK307CisKKyNkZWZpbmUgQkFTRTY0X1NJWkVfVF9NQVggICAoIChzaXplX3QpIC0xICkgLyogU0laRV9UX01BWCBpcyBub3Qgc3RhbmRhcmQgKi8KKworLyoKKyAqIEVuY29kZSBhIGJ1ZmZlciBpbnRvIGJhc2U2NCBmb3JtYXQKKyAqLworaW50IG1iZWR0bHNfYmFzZTY0X2VuY29kZSggdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgZGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgc2l6ZV90IHNsZW4gKQoreworICAgIHNpemVfdCBpLCBuOworICAgIGludCBDMSwgQzIsIEMzOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICBpZiggc2xlbiA9PSAwICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgbiA9IHNsZW4gLyAzICsgKCBzbGVuICUgMyAhPSAwICk7CisKKyAgICBpZiggbiA+ICggQkFTRTY0X1NJWkVfVF9NQVggLSAxICkgLyA0ICkKKyAgICB7CisgICAgICAgICpvbGVuID0gQkFTRTY0X1NJWkVfVF9NQVg7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICB9CisKKyAgICBuICo9IDQ7CisKKyAgICBpZiggKCBkbGVuIDwgbiArIDEgKSB8fCAoIE5VTEwgPT0gZHN0ICkgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSBuICsgMTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCApOworICAgIH0KKworICAgIG4gPSAoIHNsZW4gLyAzICkgKiAzOworCisgICAgZm9yKCBpID0gMCwgcCA9IGRzdDsgaSA8IG47IGkgKz0gMyApCisgICAgeworICAgICAgICBDMSA9ICpzcmMrKzsKKyAgICAgICAgQzIgPSAqc3JjKys7CisgICAgICAgIEMzID0gKnNyYysrOworCisgICAgICAgICpwKysgPSBiYXNlNjRfZW5jX21hcFsoQzEgPj4gMikgJiAweDNGXTsKKyAgICAgICAgKnArKyA9IGJhc2U2NF9lbmNfbWFwWygoKEMxICYgIDMpIDw8IDQpICsgKEMyID4+IDQpKSAmIDB4M0ZdOworICAgICAgICAqcCsrID0gYmFzZTY0X2VuY19tYXBbKCgoQzIgJiAxNSkgPDwgMikgKyAoQzMgPj4gNikpICYgMHgzRl07CisgICAgICAgICpwKysgPSBiYXNlNjRfZW5jX21hcFtDMyAmIDB4M0ZdOworICAgIH0KKworICAgIGlmKCBpIDwgc2xlbiApCisgICAgeworICAgICAgICBDMSA9ICpzcmMrKzsKKyAgICAgICAgQzIgPSAoICggaSArIDEgKSA8IHNsZW4gKSA/ICpzcmMrKyA6IDA7CisKKyAgICAgICAgKnArKyA9IGJhc2U2NF9lbmNfbWFwWyhDMSA+PiAyKSAmIDB4M0ZdOworICAgICAgICAqcCsrID0gYmFzZTY0X2VuY19tYXBbKCgoQzEgJiAzKSA8PCA0KSArIChDMiA+PiA0KSkgJiAweDNGXTsKKworICAgICAgICBpZiggKCBpICsgMSApIDwgc2xlbiApCisgICAgICAgICAgICAgKnArKyA9IGJhc2U2NF9lbmNfbWFwWygoQzIgJiAxNSkgPDwgMikgJiAweDNGXTsKKyAgICAgICAgZWxzZSAqcCsrID0gJz0nOworCisgICAgICAgICpwKysgPSAnPSc7CisgICAgfQorCisgICAgKm9sZW4gPSBwIC0gZHN0OworICAgICpwID0gMDsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRGVjb2RlIGEgYmFzZTY0LWZvcm1hdHRlZCBidWZmZXIKKyAqLworaW50IG1iZWR0bHNfYmFzZTY0X2RlY29kZSggdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgZGxlbiwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgc2l6ZV90IHNsZW4gKQoreworICAgIHNpemVfdCBpLCBuOworICAgIHVpbnQzMl90IGosIHg7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKworICAgIC8qIEZpcnN0IHBhc3M6IGNoZWNrIGZvciB2YWxpZGl0eSBhbmQgZ2V0IG91dHB1dCBsZW5ndGggKi8KKyAgICBmb3IoIGkgPSBuID0gaiA9IDA7IGkgPCBzbGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgLyogU2tpcCBzcGFjZXMgYmVmb3JlIGNoZWNraW5nIGZvciBFT0wgKi8KKyAgICAgICAgeCA9IDA7CisgICAgICAgIHdoaWxlKCBpIDwgc2xlbiAmJiBzcmNbaV0gPT0gJyAnICkKKyAgICAgICAgeworICAgICAgICAgICAgKytpOworICAgICAgICAgICAgKyt4OworICAgICAgICB9CisKKyAgICAgICAgLyogU3BhY2VzIGF0IGVuZCBvZiBidWZmZXIgYXJlIE9LICovCisgICAgICAgIGlmKCBpID09IHNsZW4gKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoICggc2xlbiAtIGkgKSA+PSAyICYmCisgICAgICAgICAgICBzcmNbaV0gPT0gJ1xyJyAmJiBzcmNbaSArIDFdID09ICdcbicgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIHNyY1tpXSA9PSAnXG4nICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIFNwYWNlIGluc2lkZSBhIGxpbmUgaXMgYW4gZXJyb3IgKi8KKyAgICAgICAgaWYoIHggIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUiApOworCisgICAgICAgIGlmKCBzcmNbaV0gPT0gJz0nICYmICsraiA+IDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgKTsKKworICAgICAgICBpZiggc3JjW2ldID4gMTI3IHx8IGJhc2U2NF9kZWNfbWFwW3NyY1tpXV0gPT0gMTI3ICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSICk7CisKKyAgICAgICAgaWYoIGJhc2U2NF9kZWNfbWFwW3NyY1tpXV0gPCA2NCAmJiBqICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgKTsKKworICAgICAgICBuKys7CisgICAgfQorCisgICAgaWYoIG4gPT0gMCApCisgICAgeworICAgICAgICAqb2xlbiA9IDA7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIG4gPSAoICggbiAqIDYgKSArIDcgKSA+PiAzOworICAgIG4gLT0gajsKKworICAgIGlmKCBkc3QgPT0gTlVMTCB8fCBkbGVuIDwgbiApCisgICAgeworICAgICAgICAqb2xlbiA9IG47CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICB9CisKKyAgIGZvciggaiA9IDMsIG4gPSB4ID0gMCwgcCA9IGRzdDsgaSA+IDA7IGktLSwgc3JjKysgKQorICAgeworICAgICAgICBpZiggKnNyYyA9PSAnXHInIHx8ICpzcmMgPT0gJ1xuJyB8fCAqc3JjID09ICcgJyApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBqIC09ICggYmFzZTY0X2RlY19tYXBbKnNyY10gPT0gNjQgKTsKKyAgICAgICAgeCAgPSAoIHggPDwgNiApIHwgKCBiYXNlNjRfZGVjX21hcFsqc3JjXSAmIDB4M0YgKTsKKworICAgICAgICBpZiggKytuID09IDQgKQorICAgICAgICB7CisgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgIGlmKCBqID4gMCApICpwKysgPSAodW5zaWduZWQgY2hhcikoIHggPj4gMTYgKTsKKyAgICAgICAgICAgIGlmKCBqID4gMSApICpwKysgPSAodW5zaWduZWQgY2hhcikoIHggPj4gIDggKTsKKyAgICAgICAgICAgIGlmKCBqID4gMiApICpwKysgPSAodW5zaWduZWQgY2hhcikoIHggICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpvbGVuID0gcCAtIGRzdDsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmFzZTY0X3Rlc3RfZGVjWzY0XSA9Cit7CisgICAgMHgyNCwgMHg0OCwgMHg2RSwgMHg1NiwgMHg4NywgMHg2MiwgMHg1QSwgMHhCRCwKKyAgICAweEJGLCAweDE3LCAweEQ5LCAweEEyLCAweEM0LCAweDE3LCAweDFBLCAweDAxLAorICAgIDB4OTQsIDB4RUQsIDB4OEYsIDB4MUUsIDB4MTEsIDB4QjMsIDB4RDcsIDB4MDksCisgICAgMHgwQywgMHhCNiwgMHhFOSwgMHgxMCwgMHg2RiwgMHgyMiwgMHhFRSwgMHgxMywKKyAgICAweENBLCAweEIzLCAweDA3LCAweDA1LCAweDc2LCAweEM5LCAweEZBLCAweDMxLAorICAgIDB4NkMsIDB4MDgsIDB4MzQsIDB4RkYsIDB4OEQsIDB4QzIsIDB4NkMsIDB4MzgsCisgICAgMHgwMCwgMHg0MywgMHhFOSwgMHg1NCwgMHg5NywgMHhBRiwgMHg1MCwgMHg0QiwKKyAgICAweEQxLCAweDQxLCAweEJBLCAweDk1LCAweDMxLCAweDVBLCAweDBCLCAweDk3Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiYXNlNjRfdGVzdF9lbmNbXSA9CisgICAgIkpFaHVWb2RpV3IyL0Y5bWl4QmNhQVpUdGp4NFJzOWNKRExicEVHOGk3aFBLIgorICAgICJzd2NGZHNuNk1Xd0lOUCtOd213NEFFUHBWSmV2VUV2UlFicVZNVm9MbHc9PSI7CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfYmFzZTY0X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIHNpemVfdCBsZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEyOF07CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEJhc2U2NCBlbmNvZGluZyB0ZXN0OiAiICk7CisKKyAgICBzcmMgPSBiYXNlNjRfdGVzdF9kZWM7CisKKyAgICBpZiggbWJlZHRsc19iYXNlNjRfZW5jb2RlKCBidWZmZXIsIHNpemVvZiggYnVmZmVyICksICZsZW4sIHNyYywgNjQgKSAhPSAwIHx8CisgICAgICAgICBtZW1jbXAoIGJhc2U2NF90ZXN0X2VuYywgYnVmZmVyLCA4OCApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuICBCYXNlNjQgZGVjb2RpbmcgdGVzdDogIiApOworCisgICAgc3JjID0gYmFzZTY0X3Rlc3RfZW5jOworCisgICAgaWYoIG1iZWR0bHNfYmFzZTY0X2RlY29kZSggYnVmZmVyLCBzaXplb2YoIGJ1ZmZlciApLCAmbGVuLCBzcmMsIDg4ICkgIT0gMCB8fAorICAgICAgICAgbWVtY21wKCBiYXNlNjRfdGVzdF9kZWMsIGJ1ZmZlciwgNjQgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcblxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19CQVNFNjRfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmlnbnVtLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9iaWdudW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzk5ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmlnbnVtLmMKQEAgLTAsMCArMSwyNDQyIEBACisvKgorICogIE11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqICBUaGUgZm9sbG93aW5nIHNvdXJjZXMgd2VyZSByZWZlcmVuY2VkIGluIHRoZSBkZXNpZ24gb2YgdGhpcyBNdWx0aS1wcmVjaXNpb24KKyAqICBJbnRlZ2VyIGxpYnJhcnk6CisgKgorICogIFsxXSBIYW5kYm9vayBvZiBBcHBsaWVkIENyeXB0b2dyYXBoeSAtIDE5OTcKKyAqICAgICAgTWVuZXplcywgdmFuIE9vcnNjaG90IGFuZCBWYW5zdG9uZQorICoKKyAqICBbMl0gTXVsdGktUHJlY2lzaW9uIE1hdGgKKyAqICAgICAgVG9tIFN0IERlbmlzCisgKiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ0b20vbGlidG9tbWF0aC9ibG9iL2RldmVsb3AvdG9tbWF0aC5wZGYKKyAqCisgKiAgWzNdIEdOVSBNdWx0aS1QcmVjaXNpb24gQXJpdGhtZXRpYyBMaWJyYXJ5CisgKiAgICAgIGh0dHBzOi8vZ21wbGliLm9yZy9tYW51YWwvaW5kZXguaHRtbAorICoKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2JuX211bC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfbXBpX3plcm9pemUoIG1iZWR0bHNfbXBpX3VpbnQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIG1iZWR0bHNfbXBpX3VpbnQgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKyNkZWZpbmUgY2lMICAgIChzaXplb2YobWJlZHRsc19tcGlfdWludCkpICAgICAgICAgLyogY2hhcnMgaW4gbGltYiAgKi8KKyNkZWZpbmUgYmlMICAgIChjaUwgPDwgMykgICAgICAgICAgICAgICAvKiBiaXRzICBpbiBsaW1iICAqLworI2RlZmluZSBiaUggICAgKGNpTCA8PCAyKSAgICAgICAgICAgICAgIC8qIGhhbGYgbGltYiBzaXplICovCisKKyNkZWZpbmUgTVBJX1NJWkVfVF9NQVggICggKHNpemVfdCkgLTEgKSAvKiBTSVpFX1RfTUFYIGlzIG5vdCBzdGFuZGFyZCAqLworCisvKgorICogQ29udmVydCBiZXR3ZWVuIGJpdHMvY2hhcnMgYW5kIG51bWJlciBvZiBsaW1icworICogRGl2aWRlIGZpcnN0IGluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbCBvdmVyZmxvd3MKKyAqLworI2RlZmluZSBCSVRTX1RPX0xJTUJTKGkpICAoIChpKSAvIGJpTCArICggKGkpICUgYmlMICE9IDAgKSApCisjZGVmaW5lIENIQVJTX1RPX0xJTUJTKGkpICggKGkpIC8gY2lMICsgKCAoaSkgJSBjaUwgIT0gMCApICkKKworLyoKKyAqIEluaXRpYWxpemUgb25lIE1QSQorICovCit2b2lkIG1iZWR0bHNfbXBpX2luaXQoIG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICBpZiggWCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgWC0+cyA9IDE7CisgICAgWC0+biA9IDA7CisgICAgWC0+cCA9IE5VTEw7Cit9CisKKy8qCisgKiBVbmFsbG9jYXRlIG9uZSBNUEkKKyAqLwordm9pZCBtYmVkdGxzX21waV9mcmVlKCBtYmVkdGxzX21waSAqWCApCit7CisgICAgaWYoIFggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCBYLT5wICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfemVyb2l6ZSggWC0+cCwgWC0+biApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIFgtPnAgKTsKKyAgICB9CisKKyAgICBYLT5zID0gMTsKKyAgICBYLT5uID0gMDsKKyAgICBYLT5wID0gTlVMTDsKK30KKworLyoKKyAqIEVubGFyZ2UgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGltYnMKKyAqLworaW50IG1iZWR0bHNfbXBpX2dyb3coIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgbmJsaW1icyApCit7CisgICAgbWJlZHRsc19tcGlfdWludCAqcDsKKworICAgIGlmKCBuYmxpbWJzID4gTUJFRFRMU19NUElfTUFYX0xJTUJTICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEICk7CisKKyAgICBpZiggWC0+biA8IG5ibGltYnMgKQorICAgIHsKKyAgICAgICAgaWYoICggcCA9IChtYmVkdGxzX21waV91aW50KiltYmVkdGxzX2NhbGxvYyggbmJsaW1icywgY2lMICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCApOworCisgICAgICAgIGlmKCBYLT5wICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoIHAsIFgtPnAsIFgtPm4gKiBjaUwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3plcm9pemUoIFgtPnAsIFgtPm4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggWC0+cCApOworICAgICAgICB9CisKKyAgICAgICAgWC0+biA9IG5ibGltYnM7CisgICAgICAgIFgtPnAgPSBwOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUmVzaXplIGRvd24gYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyAqIHdoaWxlIGtlZXBpbmcgYXQgbGVhc3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGltYnMKKyAqLworaW50IG1iZWR0bHNfbXBpX3NocmluayggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBuYmxpbWJzICkKK3sKKyAgICBtYmVkdGxzX21waV91aW50ICpwOworICAgIHNpemVfdCBpOworCisgICAgLyogQWN0dWFsbHkgcmVzaXplIHVwIGluIHRoaXMgY2FzZSAqLworICAgIGlmKCBYLT5uIDw9IG5ibGltYnMgKQorICAgICAgICByZXR1cm4oIG1iZWR0bHNfbXBpX2dyb3coIFgsIG5ibGltYnMgKSApOworCisgICAgZm9yKCBpID0gWC0+biAtIDE7IGkgPiAwOyBpLS0gKQorICAgICAgICBpZiggWC0+cFtpXSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIGkrKzsKKworICAgIGlmKCBpIDwgbmJsaW1icyApCisgICAgICAgIGkgPSBuYmxpbWJzOworCisgICAgaWYoICggcCA9IChtYmVkdGxzX21waV91aW50KiltYmVkdGxzX2NhbGxvYyggaSwgY2lMICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEICk7CisKKyAgICBpZiggWC0+cCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1lbWNweSggcCwgWC0+cCwgaSAqIGNpTCApOworICAgICAgICBtYmVkdGxzX21waV96ZXJvaXplKCBYLT5wLCBYLT5uICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggWC0+cCApOworICAgIH0KKworICAgIFgtPm4gPSBpOworICAgIFgtPnAgPSBwOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBZIGludG8gWAorICovCitpbnQgbWJlZHRsc19tcGlfY29weSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpOworCisgICAgaWYoIFggPT0gWSApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoIFktPnAgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCBYICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGZvciggaSA9IFktPm4gLSAxOyBpID4gMDsgaS0tICkKKyAgICAgICAgaWYoIFktPnBbaV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICBpKys7CisKKyAgICBYLT5zID0gWS0+czsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgaSApICk7CisKKyAgICBtZW1zZXQoIFgtPnAsIDAsIFgtPm4gKiBjaUwgKTsKKyAgICBtZW1jcHkoIFgtPnAsIFktPnAsIGkgKiBjaUwgKTsKKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTd2FwIHRoZSBjb250ZW50cyBvZiBYIGFuZCBZCisgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc3dhcCggbWJlZHRsc19tcGkgKlgsIG1iZWR0bHNfbXBpICpZICkKK3sKKyAgICBtYmVkdGxzX21waSBUOworCisgICAgbWVtY3B5KCAmVCwgIFgsIHNpemVvZiggbWJlZHRsc19tcGkgKSApOworICAgIG1lbWNweSggIFgsICBZLCBzaXplb2YoIG1iZWR0bHNfbXBpICkgKTsKKyAgICBtZW1jcHkoICBZLCAmVCwgc2l6ZW9mKCBtYmVkdGxzX21waSApICk7Cit9CisKKy8qCisgKiBDb25kaXRpb25hbGx5IGFzc2lnbiBYID0gWSwgd2l0aG91dCBsZWFraW5nIGluZm9ybWF0aW9uCisgKiBhYm91dCB3aGV0aGVyIHRoZSBhc3NpZ25tZW50IHdhcyBtYWRlIG9yIG5vdC4KKyAqIChMZWFraW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXNwZWN0aXZlIHNpemVzIG9mIFggYW5kIFkgaXMgb2sgaG93ZXZlci4pCisgKi8KK2ludCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKlksIHVuc2lnbmVkIGNoYXIgYXNzaWduICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBzaXplX3QgaTsKKworICAgIC8qIG1ha2Ugc3VyZSBhc3NpZ24gaXMgMCBvciAxIGluIGEgdGltZS1jb25zdGFudCBtYW5uZXIgKi8KKyAgICBhc3NpZ24gPSAoYXNzaWduIHwgKHVuc2lnbmVkIGNoYXIpLWFzc2lnbikgPj4gNzsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgWS0+biApICk7CisKKyAgICBYLT5zID0gWC0+cyAqICggMSAtIGFzc2lnbiApICsgWS0+cyAqIGFzc2lnbjsKKworICAgIGZvciggaSA9IDA7IGkgPCBZLT5uOyBpKysgKQorICAgICAgICBYLT5wW2ldID0gWC0+cFtpXSAqICggMSAtIGFzc2lnbiApICsgWS0+cFtpXSAqIGFzc2lnbjsKKworICAgIGZvciggOyBpIDwgWC0+bjsgaSsrICkKKyAgICAgICAgWC0+cFtpXSAqPSAoIDEgLSBhc3NpZ24gKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ29uZGl0aW9uYWxseSBzd2FwIFggYW5kIFksIHdpdGhvdXQgbGVha2luZyBpbmZvcm1hdGlvbgorICogYWJvdXQgd2hldGhlciB0aGUgc3dhcCB3YXMgbWFkZSBvciBub3QuCisgKiBIZXJlIGl0IGlzIG5vdCBvayB0byBzaW1wbHkgc3dhcCB0aGUgcG9pbnRlcnMsIHdoaWNoIHdob3VsZCBsZWFkIHRvCisgKiBkaWZmZXJlbnQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyB3aGVuIFggYW5kIFkgYXJlIHVzZWQgYWZ0ZXJ3YXJkcy4KKyAqLworaW50IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCBtYmVkdGxzX21waSAqWCwgbWJlZHRsc19tcGkgKlksIHVuc2lnbmVkIGNoYXIgc3dhcCApCit7CisgICAgaW50IHJldCwgczsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX21waV91aW50IHRtcDsKKworICAgIGlmKCBYID09IFkgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qIG1ha2Ugc3VyZSBzd2FwIGlzIDAgb3IgMSBpbiBhIHRpbWUtY29uc3RhbnQgbWFubmVyICovCisgICAgc3dhcCA9IChzd2FwIHwgKHVuc2lnbmVkIGNoYXIpLXN3YXApID4+IDc7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIFktPm4gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWSwgWC0+biApICk7CisKKyAgICBzID0gWC0+czsKKyAgICBYLT5zID0gWC0+cyAqICggMSAtIHN3YXAgKSArIFktPnMgKiBzd2FwOworICAgIFktPnMgPSBZLT5zICogKCAxIC0gc3dhcCApICsgICAgcyAqIHN3YXA7CisKKworICAgIGZvciggaSA9IDA7IGkgPCBYLT5uOyBpKysgKQorICAgIHsKKyAgICAgICAgdG1wID0gWC0+cFtpXTsKKyAgICAgICAgWC0+cFtpXSA9IFgtPnBbaV0gKiAoIDEgLSBzd2FwICkgKyBZLT5wW2ldICogc3dhcDsKKyAgICAgICAgWS0+cFtpXSA9IFktPnBbaV0gKiAoIDEgLSBzd2FwICkgKyAgICAgdG1wICogc3dhcDsKKyAgICB9CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFNldCB2YWx1ZSBmcm9tIGludGVnZXIKKyAqLworaW50IG1iZWR0bHNfbXBpX2xzZXQoIG1iZWR0bHNfbXBpICpYLCBtYmVkdGxzX21waV9zaW50IHogKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIDEgKSApOworICAgIG1lbXNldCggWC0+cCwgMCwgWC0+biAqIGNpTCApOworCisgICAgWC0+cFswXSA9ICggeiA8IDAgKSA/IC16IDogejsKKyAgICBYLT5zICAgID0gKCB6IDwgMCApID8gLTEgOiAxOworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEdldCBhIHNwZWNpZmljIGJpdAorICovCitpbnQgbWJlZHRsc19tcGlfZ2V0X2JpdCggY29uc3QgbWJlZHRsc19tcGkgKlgsIHNpemVfdCBwb3MgKQoreworICAgIGlmKCBYLT5uICogYmlMIDw9IHBvcyApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCAoIFgtPnBbcG9zIC8gYmlMXSA+PiAoIHBvcyAlIGJpTCApICkgJiAweDAxICk7Cit9CisKKy8qCisgKiBTZXQgYSBiaXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBvZiAwIG9yIDEKKyAqLworaW50IG1iZWR0bHNfbXBpX3NldF9iaXQoIG1iZWR0bHNfbXBpICpYLCBzaXplX3QgcG9zLCB1bnNpZ25lZCBjaGFyIHZhbCApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgc2l6ZV90IG9mZiA9IHBvcyAvIGJpTDsKKyAgICBzaXplX3QgaWR4ID0gcG9zICUgYmlMOworCisgICAgaWYoIHZhbCAhPSAwICYmIHZhbCAhPSAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBYLT5uICogYmlMIDw9IHBvcyApCisgICAgeworICAgICAgICBpZiggdmFsID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCBvZmYgKyAxICkgKTsKKyAgICB9CisKKyAgICBYLT5wW29mZl0gJj0gfiggKG1iZWR0bHNfbXBpX3VpbnQpIDB4MDEgPDwgaWR4ICk7CisgICAgWC0+cFtvZmZdIHw9IChtYmVkdGxzX21waV91aW50KSB2YWwgPDwgaWR4OworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxlc3Mgc2lnbmlmaWNhbnQgemVyby1iaXRzCisgKi8KK3NpemVfdCBtYmVkdGxzX21waV9sc2IoIGNvbnN0IG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICBzaXplX3QgaSwgaiwgY291bnQgPSAwOworCisgICAgZm9yKCBpID0gMDsgaSA8IFgtPm47IGkrKyApCisgICAgICAgIGZvciggaiA9IDA7IGogPCBiaUw7IGorKywgY291bnQrKyApCisgICAgICAgICAgICBpZiggKCAoIFgtPnBbaV0gPj4gaiApICYgMSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggY291bnQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ291bnQgbGVhZGluZyB6ZXJvIGJpdHMgaW4gYSBnaXZlbiBpbnRlZ2VyCisgKi8KK3N0YXRpYyBzaXplX3QgbWJlZHRsc19jbHooIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgeCApCit7CisgICAgc2l6ZV90IGo7CisgICAgbWJlZHRsc19tcGlfdWludCBtYXNrID0gKG1iZWR0bHNfbXBpX3VpbnQpIDEgPDwgKGJpTCAtIDEpOworCisgICAgZm9yKCBqID0gMDsgaiA8IGJpTDsgaisrICkKKyAgICB7CisgICAgICAgIGlmKCB4ICYgbWFzayApIGJyZWFrOworCisgICAgICAgIG1hc2sgPj49IDE7CisgICAgfQorCisgICAgcmV0dXJuIGo7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzCisgKi8KK3NpemVfdCBtYmVkdGxzX21waV9iaXRsZW4oIGNvbnN0IG1iZWR0bHNfbXBpICpYICkKK3sKKyAgICBzaXplX3QgaSwgajsKKworICAgIGlmKCBYLT5uID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGZvciggaSA9IFgtPm4gLSAxOyBpID4gMDsgaS0tICkKKyAgICAgICAgaWYoIFgtPnBbaV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIGogPSBiaUwgLSBtYmVkdGxzX2NseiggWC0+cFtpXSApOworCisgICAgcmV0dXJuKCAoIGkgKiBiaUwgKSArIGogKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgdG90YWwgc2l6ZSBpbiBieXRlcworICovCitzaXplX3QgbWJlZHRsc19tcGlfc2l6ZSggY29uc3QgbWJlZHRsc19tcGkgKlggKQoreworICAgIHJldHVybiggKCBtYmVkdGxzX21waV9iaXRsZW4oIFggKSArIDcgKSA+PiAzICk7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIEFTQ0lJIGNoYXJhY3RlciB0byBkaWdpdCB2YWx1ZQorICovCitzdGF0aWMgaW50IG1waV9nZXRfZGlnaXQoIG1iZWR0bHNfbXBpX3VpbnQgKmQsIGludCByYWRpeCwgY2hhciBjICkKK3sKKyAgICAqZCA9IDI1NTsKKworICAgIGlmKCBjID49IDB4MzAgJiYgYyA8PSAweDM5ICkgKmQgPSBjIC0gMHgzMDsKKyAgICBpZiggYyA+PSAweDQxICYmIGMgPD0gMHg0NiApICpkID0gYyAtIDB4Mzc7CisgICAgaWYoIGMgPj0gMHg2MSAmJiBjIDw9IDB4NjYgKSAqZCA9IGMgLSAweDU3OworCisgICAgaWYoICpkID49IChtYmVkdGxzX21waV91aW50KSByYWRpeCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0lOVkFMSURfQ0hBUkFDVEVSICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEltcG9ydCBmcm9tIGFuIEFTQ0lJIHN0cmluZworICovCitpbnQgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoIG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsIGNvbnN0IGNoYXIgKnMgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIGosIHNsZW4sIG47CisgICAgbWJlZHRsc19tcGlfdWludCBkOworICAgIG1iZWR0bHNfbXBpIFQ7CisKKyAgICBpZiggcmFkaXggPCAyIHx8IHJhZGl4ID4gMTYgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsKKworICAgIHNsZW4gPSBzdHJsZW4oIHMgKTsKKworICAgIGlmKCByYWRpeCA9PSAxNiApCisgICAgeworICAgICAgICBpZiggc2xlbiA+IE1QSV9TSVpFX1RfTUFYID4+IDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBuID0gQklUU19UT19MSU1CUyggc2xlbiA8PCAyICk7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCBuICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCBYLCAwICkgKTsKKworICAgICAgICBmb3IoIGkgPSBzbGVuLCBqID0gMDsgaSA+IDA7IGktLSwgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGkgPT0gMSAmJiBzW2kgLSAxXSA9PSAnLScgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFgtPnMgPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfZ2V0X2RpZ2l0KCAmZCwgcmFkaXgsIHNbaSAtIDFdICkgKTsKKyAgICAgICAgICAgIFgtPnBbaiAvICggMiAqIGNpTCApXSB8PSBkIDw8ICggKCBqICUgKCAyICogY2lMICkgKSA8PCAyICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCBYLCAwICkgKTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgc2xlbjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGkgPT0gMCAmJiBzW2ldID09ICctJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgWC0+cyA9IC0xOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV9nZXRfZGlnaXQoICZkLCByYWRpeCwgc1tpXSApICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9pbnQoICZULCBYLCByYWRpeCApICk7CisKKyAgICAgICAgICAgIGlmKCBYLT5zID09IDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2ludCggWCwgJlQsIGQgKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggWCwgJlQsIGQgKSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlQgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBIZWxwZXIgdG8gd3JpdGUgdGhlIGRpZ2l0cyBoaWdoLW9yZGVyIGZpcnN0CisgKi8KK3N0YXRpYyBpbnQgbXBpX3dyaXRlX2hscCggbWJlZHRsc19tcGkgKlgsIGludCByYWRpeCwgY2hhciAqKnAgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGlfdWludCByOworCisgICAgaWYoIHJhZGl4IDwgMiB8fCByYWRpeCA+IDE2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX2ludCggJnIsIFgsIHJhZGl4ICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2Rpdl9pbnQoIFgsIE5VTEwsIFgsIHJhZGl4ICkgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCBYLCAwICkgIT0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX3dyaXRlX2hscCggWCwgcmFkaXgsIHAgKSApOworCisgICAgaWYoIHIgPCAxMCApCisgICAgICAgICooKnApKysgPSAoY2hhcikoIHIgKyAweDMwICk7CisgICAgZWxzZQorICAgICAgICAqKCpwKSsrID0gKGNoYXIpKCByICsgMHgzNyApOworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEV4cG9ydCBpbnRvIGFuIEFTQ0lJIHN0cmluZworICovCitpbnQgbWJlZHRsc19tcGlfd3JpdGVfc3RyaW5nKCBjb25zdCBtYmVkdGxzX21waSAqWCwgaW50IHJhZGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIGludCByZXQgPSAwOworICAgIHNpemVfdCBuOworICAgIGNoYXIgKnA7CisgICAgbWJlZHRsc19tcGkgVDsKKworICAgIGlmKCByYWRpeCA8IDIgfHwgcmFkaXggPiAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBuID0gbWJlZHRsc19tcGlfYml0bGVuKCBYICk7CisgICAgaWYoIHJhZGl4ID49ICA0ICkgbiA+Pj0gMTsKKyAgICBpZiggcmFkaXggPj0gMTYgKSBuID4+PSAxOworICAgIG4gKz0gMzsKKworICAgIGlmKCBidWZsZW4gPCBuICkKKyAgICB7CisgICAgICAgICpvbGVuID0gbjsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCApOworICAgIH0KKworICAgIHAgPSBidWY7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsKKworICAgIGlmKCBYLT5zID09IC0xICkKKyAgICAgICAgKnArKyA9ICctJzsKKworICAgIGlmKCByYWRpeCA9PSAxNiApCisgICAgeworICAgICAgICBpbnQgYzsKKyAgICAgICAgc2l6ZV90IGksIGosIGs7CisKKyAgICAgICAgZm9yKCBpID0gWC0+biwgayA9IDA7IGkgPiAwOyBpLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGogPSBjaUw7IGogPiAwOyBqLS0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGMgPSAoIFgtPnBbaSAtIDFdID4+ICggKCBqIC0gMSApIDw8IDMpICkgJiAweEZGOworCisgICAgICAgICAgICAgICAgaWYoIGMgPT0gMCAmJiBrID09IDAgJiYgKCBpICsgaiApICE9IDIgKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICoocCsrKSA9ICIwMTIzNDU2Nzg5QUJDREVGIiBbYyAvIDE2XTsKKyAgICAgICAgICAgICAgICAqKHArKykgPSAiMDEyMzQ1Njc4OUFCQ0RFRiIgW2MgJSAxNl07CisgICAgICAgICAgICAgICAgayA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVCwgWCApICk7CisKKyAgICAgICAgaWYoIFQucyA9PSAtMSApCisgICAgICAgICAgICBULnMgPSAxOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX3dyaXRlX2hscCggJlQsIHJhZGl4LCAmcCApICk7CisgICAgfQorCisgICAgKnArKyA9ICdcMCc7CisgICAgKm9sZW4gPSBwIC0gYnVmOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlQgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKgorICogUmVhZCBYIGZyb20gYW4gb3BlbmVkIGZpbGUKKyAqLworaW50IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggbWJlZHRsc19tcGkgKlgsIGludCByYWRpeCwgRklMRSAqZmluICkKK3sKKyAgICBtYmVkdGxzX21waV91aW50IGQ7CisgICAgc2l6ZV90IHNsZW47CisgICAgY2hhciAqcDsKKyAgICAvKgorICAgICAqIEJ1ZmZlciBzaG91bGQgaGF2ZSBzcGFjZSBmb3IgKHNob3J0KSBsYWJlbCBhbmQgZGVjaW1hbCBmb3JtYXR0ZWQgTVBJLAorICAgICAqIG5ld2xpbmUgY2hhcmFjdGVycyBhbmQgJ1wwJworICAgICAqLworICAgIGNoYXIgc1sgTUJFRFRMU19NUElfUldfQlVGRkVSX1NJWkUgXTsKKworICAgIG1lbXNldCggcywgMCwgc2l6ZW9mKCBzICkgKTsKKyAgICBpZiggZmdldHMoIHMsIHNpemVvZiggcyApIC0gMSwgZmluICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIHNsZW4gPSBzdHJsZW4oIHMgKTsKKyAgICBpZiggc2xlbiA9PSBzaXplb2YoIHMgKSAtIDIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICBpZiggc1tzbGVuIC0gMV0gPT0gJ1xuJyApIHsgc2xlbi0tOyBzW3NsZW5dID0gJ1wwJzsgfQorICAgIGlmKCBzW3NsZW4gLSAxXSA9PSAnXHInICkgeyBzbGVuLS07IHNbc2xlbl0gPSAnXDAnOyB9CisKKyAgICBwID0gcyArIHNsZW47CisgICAgd2hpbGUoIC0tcCA+PSBzICkKKyAgICAgICAgaWYoIG1waV9nZXRfZGlnaXQoICZkLCByYWRpeCwgKnAgKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgcmV0dXJuKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggWCwgcmFkaXgsIHAgKyAxICkgKTsKK30KKworLyoKKyAqIFdyaXRlIFggaW50byBhbiBvcGVuZWQgZmlsZSAob3Igc3Rkb3V0IGlmIGZvdXQgPT0gTlVMTCkKKyAqLworaW50IG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoIGNvbnN0IGNoYXIgKnAsIGNvbnN0IG1iZWR0bHNfbXBpICpYLCBpbnQgcmFkaXgsIEZJTEUgKmZvdXQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG4sIHNsZW4sIHBsZW47CisgICAgLyoKKyAgICAgKiBCdWZmZXIgc2hvdWxkIGhhdmUgc3BhY2UgZm9yIChzaG9ydCkgbGFiZWwgYW5kIGRlY2ltYWwgZm9ybWF0dGVkIE1QSSwKKyAgICAgKiBuZXdsaW5lIGNoYXJhY3RlcnMgYW5kICdcMCcKKyAgICAgKi8KKyAgICBjaGFyIHNbIE1CRURUTFNfTVBJX1JXX0JVRkZFUl9TSVpFIF07CisKKyAgICBtZW1zZXQoIHMsIDAsIHNpemVvZiggcyApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX3N0cmluZyggWCwgcmFkaXgsIHMsIHNpemVvZiggcyApIC0gMiwgJm4gKSApOworCisgICAgaWYoIHAgPT0gTlVMTCApIHAgPSAiIjsKKworICAgIHBsZW4gPSBzdHJsZW4oIHAgKTsKKyAgICBzbGVuID0gc3RybGVuKCBzICk7CisgICAgc1tzbGVuKytdID0gJ1xyJzsKKyAgICBzW3NsZW4rK10gPSAnXG4nOworCisgICAgaWYoIGZvdXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggZndyaXRlKCBwLCAxLCBwbGVuLCBmb3V0ICkgIT0gcGxlbiB8fAorICAgICAgICAgICAgZndyaXRlKCBzLCAxLCBzbGVuLCBmb3V0ICkgIT0gc2xlbiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlcyVzIiwgcCwgcyApOworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKKy8qCisgKiBJbXBvcnQgWCBmcm9tIHVuc2lnbmVkIGJpbmFyeSBkYXRhLCBiaWcgZW5kaWFuCisgKi8KK2ludCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgaiwgbjsKKworICAgIGZvciggbiA9IDA7IG4gPCBidWZsZW47IG4rKyApCisgICAgICAgIGlmKCBidWZbbl0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgQ0hBUlNfVE9fTElNQlMoIGJ1ZmxlbiAtIG4gKSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCBYLCAwICkgKTsKKworICAgIGZvciggaSA9IGJ1ZmxlbiwgaiA9IDA7IGkgPiBuOyBpLS0sIGorKyApCisgICAgICAgIFgtPnBbaiAvIGNpTF0gfD0gKChtYmVkdGxzX21waV91aW50KSBidWZbaSAtIDFdKSA8PCAoKGogJSBjaUwpIDw8IDMpOworCitjbGVhbnVwOgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEV4cG9ydCBYIGludG8gdW5zaWduZWQgYmluYXJ5IGRhdGEsIGJpZyBlbmRpYW4KKyAqLworaW50IG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggY29uc3QgbWJlZHRsc19tcGkgKlgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgc2l6ZV90IGksIGosIG47CisKKyAgICBuID0gbWJlZHRsc19tcGlfc2l6ZSggWCApOworCisgICAgaWYoIGJ1ZmxlbiA8IG4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgYnVmbGVuICk7CisKKyAgICBmb3IoIGkgPSBidWZsZW4gLSAxLCBqID0gMDsgbiA+IDA7IGktLSwgaisrLCBuLS0gKQorICAgICAgICBidWZbaV0gPSAodW5zaWduZWQgY2hhcikoIFgtPnBbaiAvIGNpTF0gPj4gKChqICUgY2lMKSA8PCAzKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBMZWZ0LXNoaWZ0OiBYIDw8PSBjb3VudAorICovCitpbnQgbWJlZHRsc19tcGlfc2hpZnRfbCggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBjb3VudCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgdjAsIHQxOworICAgIG1iZWR0bHNfbXBpX3VpbnQgcjAgPSAwLCByMTsKKworICAgIHYwID0gY291bnQgLyAoYmlMICAgICk7CisgICAgdDEgPSBjb3VudCAmIChiaUwgLSAxKTsKKworICAgIGkgPSBtYmVkdGxzX21waV9iaXRsZW4oIFggKSArIGNvdW50OworCisgICAgaWYoIFgtPm4gKiBiaUwgPCBpICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCBYLCBCSVRTX1RPX0xJTUJTKCBpICkgKSApOworCisgICAgcmV0ID0gMDsKKworICAgIC8qCisgICAgICogc2hpZnQgYnkgY291bnQgLyBsaW1iX3NpemUKKyAgICAgKi8KKyAgICBpZiggdjAgPiAwICkKKyAgICB7CisgICAgICAgIGZvciggaSA9IFgtPm47IGkgPiB2MDsgaS0tICkKKyAgICAgICAgICAgIFgtPnBbaSAtIDFdID0gWC0+cFtpIC0gdjAgLSAxXTsKKworICAgICAgICBmb3IoIDsgaSA+IDA7IGktLSApCisgICAgICAgICAgICBYLT5wW2kgLSAxXSA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzaGlmdCBieSBjb3VudCAlIGxpbWJfc2l6ZQorICAgICAqLworICAgIGlmKCB0MSA+IDAgKQorICAgIHsKKyAgICAgICAgZm9yKCBpID0gdjA7IGkgPCBYLT5uOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICByMSA9IFgtPnBbaV0gPj4gKGJpTCAtIHQxKTsKKyAgICAgICAgICAgIFgtPnBbaV0gPDw9IHQxOworICAgICAgICAgICAgWC0+cFtpXSB8PSByMDsKKyAgICAgICAgICAgIHIwID0gcjE7CisgICAgICAgIH0KKyAgICB9CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmlnaHQtc2hpZnQ6IFggPj49IGNvdW50CisgKi8KK2ludCBtYmVkdGxzX21waV9zaGlmdF9yKCBtYmVkdGxzX21waSAqWCwgc2l6ZV90IGNvdW50ICkKK3sKKyAgICBzaXplX3QgaSwgdjAsIHYxOworICAgIG1iZWR0bHNfbXBpX3VpbnQgcjAgPSAwLCByMTsKKworICAgIHYwID0gY291bnQgLyAgYmlMOworICAgIHYxID0gY291bnQgJiAoYmlMIC0gMSk7CisKKyAgICBpZiggdjAgPiBYLT5uIHx8ICggdjAgPT0gWC0+biAmJiB2MSA+IDAgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21waV9sc2V0KCBYLCAwICk7CisKKyAgICAvKgorICAgICAqIHNoaWZ0IGJ5IGNvdW50IC8gbGltYl9zaXplCisgICAgICovCisgICAgaWYoIHYwID4gMCApCisgICAgeworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgWC0+biAtIHYwOyBpKysgKQorICAgICAgICAgICAgWC0+cFtpXSA9IFgtPnBbaSArIHYwXTsKKworICAgICAgICBmb3IoIDsgaSA8IFgtPm47IGkrKyApCisgICAgICAgICAgICBYLT5wW2ldID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHNoaWZ0IGJ5IGNvdW50ICUgbGltYl9zaXplCisgICAgICovCisgICAgaWYoIHYxID4gMCApCisgICAgeworICAgICAgICBmb3IoIGkgPSBYLT5uOyBpID4gMDsgaS0tICkKKyAgICAgICAgeworICAgICAgICAgICAgcjEgPSBYLT5wW2kgLSAxXSA8PCAoYmlMIC0gdjEpOworICAgICAgICAgICAgWC0+cFtpIC0gMV0gPj49IHYxOworICAgICAgICAgICAgWC0+cFtpIC0gMV0gfD0gcjA7CisgICAgICAgICAgICByMCA9IHIxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBDb21wYXJlIHVuc2lnbmVkIHZhbHVlcworICovCitpbnQgbWJlZHRsc19tcGlfY21wX2FicyggY29uc3QgbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpZICkKK3sKKyAgICBzaXplX3QgaSwgajsKKworICAgIGZvciggaSA9IFgtPm47IGkgPiAwOyBpLS0gKQorICAgICAgICBpZiggWC0+cFtpIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIGZvciggaiA9IFktPm47IGogPiAwOyBqLS0gKQorICAgICAgICBpZiggWS0+cFtqIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmKCBpID09IDAgJiYgaiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggaSA+IGogKSByZXR1cm4oICAxICk7CisgICAgaWYoIGogPiBpICkgcmV0dXJuKCAtMSApOworCisgICAgZm9yKCA7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgaWYoIFgtPnBbaSAtIDFdID4gWS0+cFtpIC0gMV0gKSByZXR1cm4oICAxICk7CisgICAgICAgIGlmKCBYLT5wW2kgLSAxXSA8IFktPnBbaSAtIDFdICkgcmV0dXJuKCAtMSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ29tcGFyZSBzaWduZWQgdmFsdWVzCisgKi8KK2ludCBtYmVkdGxzX21waV9jbXBfbXBpKCBjb25zdCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKlkgKQoreworICAgIHNpemVfdCBpLCBqOworCisgICAgZm9yKCBpID0gWC0+bjsgaSA+IDA7IGktLSApCisgICAgICAgIGlmKCBYLT5wW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgZm9yKCBqID0gWS0+bjsgaiA+IDA7IGotLSApCisgICAgICAgIGlmKCBZLT5wW2ogLSAxXSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYoIGkgPT0gMCAmJiBqID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCBpID4gaiApIHJldHVybiggIFgtPnMgKTsKKyAgICBpZiggaiA+IGkgKSByZXR1cm4oIC1ZLT5zICk7CisKKyAgICBpZiggWC0+cyA+IDAgJiYgWS0+cyA8IDAgKSByZXR1cm4oICAxICk7CisgICAgaWYoIFktPnMgPiAwICYmIFgtPnMgPCAwICkgcmV0dXJuKCAtMSApOworCisgICAgZm9yKCA7IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgaWYoIFgtPnBbaSAtIDFdID4gWS0+cFtpIC0gMV0gKSByZXR1cm4oICBYLT5zICk7CisgICAgICAgIGlmKCBYLT5wW2kgLSAxXSA8IFktPnBbaSAtIDFdICkgcmV0dXJuKCAtWC0+cyApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ29tcGFyZSBzaWduZWQgdmFsdWVzCisgKi8KK2ludCBtYmVkdGxzX21waV9jbXBfaW50KCBjb25zdCBtYmVkdGxzX21waSAqWCwgbWJlZHRsc19tcGlfc2ludCB6ICkKK3sKKyAgICBtYmVkdGxzX21waSBZOworICAgIG1iZWR0bHNfbXBpX3VpbnQgcFsxXTsKKworICAgICpwICA9ICggeiA8IDAgKSA/IC16IDogejsKKyAgICBZLnMgPSAoIHogPCAwICkgPyAtMSA6IDE7CisgICAgWS5uID0gMTsKKyAgICBZLnAgPSBwOworCisgICAgcmV0dXJuKCBtYmVkdGxzX21waV9jbXBfbXBpKCBYLCAmWSApICk7Cit9CisKKy8qCisgKiBVbnNpZ25lZCBhZGRpdGlvbjogWCA9IHxBfCArIHxCfCAgKEhBQyAxNC43KQorICovCitpbnQgbWJlZHRsc19tcGlfYWRkX2FicyggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgajsKKyAgICBtYmVkdGxzX21waV91aW50ICpvLCAqcCwgYywgdG1wOworCisgICAgaWYoIFggPT0gQiApCisgICAgeworICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqVCA9IEE7IEEgPSBYOyBCID0gVDsKKyAgICB9CisKKyAgICBpZiggWCAhPSBBICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBYLCBBICkgKTsKKworICAgIC8qCisgICAgICogWCBzaG91bGQgYWx3YXlzIGJlIHBvc2l0aXZlIGFzIGEgcmVzdWx0IG9mIHVuc2lnbmVkIGFkZGl0aW9ucy4KKyAgICAgKi8KKyAgICBYLT5zID0gMTsKKworICAgIGZvciggaiA9IEItPm47IGogPiAwOyBqLS0gKQorICAgICAgICBpZiggQi0+cFtqIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgaiApICk7CisKKyAgICBvID0gQi0+cDsgcCA9IFgtPnA7IGMgPSAwOworCisgICAgLyoKKyAgICAgKiB0bXAgaXMgdXNlZCBiZWNhdXNlIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHAgPT0gbworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCBqOyBpKyssIG8rKywgcCsrICkKKyAgICB7CisgICAgICAgIHRtcD0gKm87CisgICAgICAgICpwICs9ICBjOyBjICA9ICggKnAgPCAgYyApOworICAgICAgICAqcCArPSB0bXA7IGMgKz0gKCAqcCA8IHRtcCApOworICAgIH0KKworICAgIHdoaWxlKCBjICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGkgPj0gWC0+biApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggWCwgaSArIDEgKSApOworICAgICAgICAgICAgcCA9IFgtPnAgKyBpOworICAgICAgICB9CisKKyAgICAgICAgKnAgKz0gYzsgYyA9ICggKnAgPCBjICk7IGkrKzsgcCsrOworICAgIH0KKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG1iZWR0bHNfbXBpIHN1YnRyYWN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIG1waV9zdWJfaGxwKCBzaXplX3QgbiwgbWJlZHRsc19tcGlfdWludCAqcywgbWJlZHRsc19tcGlfdWludCAqZCApCit7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19tcGlfdWludCBjLCB6OworCisgICAgZm9yKCBpID0gYyA9IDA7IGkgPCBuOyBpKyssIHMrKywgZCsrICkKKyAgICB7CisgICAgICAgIHogPSAoICpkIDwgIGMgKTsgICAgICpkIC09ICBjOworICAgICAgICBjID0gKCAqZCA8ICpzICkgKyB6OyAqZCAtPSAqczsKKyAgICB9CisKKyAgICB3aGlsZSggYyAhPSAwICkKKyAgICB7CisgICAgICAgIHogPSAoICpkIDwgYyApOyAqZCAtPSBjOworICAgICAgICBjID0gejsgaSsrOyBkKys7CisgICAgfQorfQorCisvKgorICogVW5zaWduZWQgc3VidHJhY3Rpb246IFggPSB8QXwgLSB8QnwgIChIQUMgMTQuOSkKKyAqLworaW50IG1iZWR0bHNfbXBpX3N1Yl9hYnMoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIG1iZWR0bHNfbXBpIFRCOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG47CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2FicyggQSwgQiApIDwgMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmVEIgKTsKKworICAgIGlmKCBYID09IEIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVEIsIEIgKSApOworICAgICAgICBCID0gJlRCOworICAgIH0KKworICAgIGlmKCBYICE9IEEgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoIFgsIEEgKSApOworCisgICAgLyoKKyAgICAgKiBYIHNob3VsZCBhbHdheXMgYmUgcG9zaXRpdmUgYXMgYSByZXN1bHQgb2YgdW5zaWduZWQgc3VidHJhY3Rpb25zLgorICAgICAqLworICAgIFgtPnMgPSAxOworCisgICAgcmV0ID0gMDsKKworICAgIGZvciggbiA9IEItPm47IG4gPiAwOyBuLS0gKQorICAgICAgICBpZiggQi0+cFtuIC0gMV0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIG1waV9zdWJfaGxwKCBuLCBCLT5wLCBYLT5wICk7CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVEIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTaWduZWQgYWRkaXRpb246IFggPSBBICsgQgorICovCitpbnQgbWJlZHRsc19tcGlfYWRkX21waSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApCit7CisgICAgaW50IHJldCwgcyA9IEEtPnM7CisKKyAgICBpZiggQS0+cyAqIEItPnMgPCAwICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfYWJzKCBBLCBCICkgPj0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2FicyggWCwgQSwgQiApICk7CisgICAgICAgICAgICBYLT5zID0gIHM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoIFgsIEIsIEEgKSApOworICAgICAgICAgICAgWC0+cyA9IC1zOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2FicyggWCwgQSwgQiApICk7CisgICAgICAgIFgtPnMgPSBzOworICAgIH0KKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTaWduZWQgc3VidHJhY3Rpb246IFggPSBBIC0gQgorICovCitpbnQgbWJlZHRsc19tcGlfc3ViX21waSggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApCit7CisgICAgaW50IHJldCwgcyA9IEEtPnM7CisKKyAgICBpZiggQS0+cyAqIEItPnMgPiAwICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfYWJzKCBBLCBCICkgPj0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2FicyggWCwgQSwgQiApICk7CisgICAgICAgICAgICBYLT5zID0gIHM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoIFgsIEIsIEEgKSApOworICAgICAgICAgICAgWC0+cyA9IC1zOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2FicyggWCwgQSwgQiApICk7CisgICAgICAgIFgtPnMgPSBzOworICAgIH0KKworY2xlYW51cDoKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTaWduZWQgYWRkaXRpb246IFggPSBBICsgYgorICovCitpbnQgbWJlZHRsc19tcGlfYWRkX2ludCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBtYmVkdGxzX21waV9zaW50IGIgKQoreworICAgIG1iZWR0bHNfbXBpIF9COworICAgIG1iZWR0bHNfbXBpX3VpbnQgcFsxXTsKKworICAgIHBbMF0gPSAoIGIgPCAwICkgPyAtYiA6IGI7CisgICAgX0IucyA9ICggYiA8IDAgKSA/IC0xIDogMTsKKyAgICBfQi5uID0gMTsKKyAgICBfQi5wID0gcDsKKworICAgIHJldHVybiggbWJlZHRsc19tcGlfYWRkX21waSggWCwgQSwgJl9CICkgKTsKK30KKworLyoKKyAqIFNpZ25lZCBzdWJ0cmFjdGlvbjogWCA9IEEgLSBiCisgKi8KK2ludCBtYmVkdGxzX21waV9zdWJfaW50KCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3NpbnQgYiApCit7CisgICAgbWJlZHRsc19tcGkgX0I7CisgICAgbWJlZHRsc19tcGlfdWludCBwWzFdOworCisgICAgcFswXSA9ICggYiA8IDAgKSA/IC1iIDogYjsKKyAgICBfQi5zID0gKCBiIDwgMCApID8gLTEgOiAxOworICAgIF9CLm4gPSAxOworICAgIF9CLnAgPSBwOworCisgICAgcmV0dXJuKCBtYmVkdGxzX21waV9zdWJfbXBpKCBYLCBBLCAmX0IgKSApOworfQorCisvKgorICogSGVscGVyIGZvciBtYmVkdGxzX21waSBtdWx0aXBsaWNhdGlvbgorICovCitzdGF0aWMKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX2FybV9fKQorLyoKKyAqIEFwcGxlIExMVk0gdmVyc2lvbiA0LjIgKGNsYW5nLTQyNS4wLjI0KSAoYmFzZWQgb24gTExWTSAzLjJzdm4pCisgKiBhcHBlYXJzIHRvIG5lZWQgdGhpcyB0byBwcmV2ZW50IGJhZCBBUk0gY29kZSBnZW5lcmF0aW9uIGF0IC1PMy4KKyAqLworX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyNlbmRpZgordm9pZCBtcGlfbXVsX2hscCggc2l6ZV90IGksIG1iZWR0bHNfbXBpX3VpbnQgKnMsIG1iZWR0bHNfbXBpX3VpbnQgKmQsIG1iZWR0bHNfbXBpX3VpbnQgYiApCit7CisgICAgbWJlZHRsc19tcGlfdWludCBjID0gMCwgdCA9IDA7CisKKyNpZiBkZWZpbmVkKE1VTEFERENfSFVJVCkKKyAgICBmb3IoIDsgaSA+PSA4OyBpIC09IDggKQorICAgIHsKKyAgICAgICAgTVVMQUREQ19JTklUCisgICAgICAgIE1VTEFERENfSFVJVAorICAgICAgICBNVUxBRERDX1NUT1AKKyAgICB9CisKKyAgICBmb3IoIDsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgICBNVUxBRERDX0lOSVQKKyAgICAgICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfU1RPUAorICAgIH0KKyNlbHNlIC8qIE1VTEFERENfSFVJVCAqLworICAgIGZvciggOyBpID49IDE2OyBpIC09IDE2ICkKKyAgICB7CisgICAgICAgIE1VTEFERENfSU5JVAorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKworICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19TVE9QCisgICAgfQorCisgICAgZm9yKCA7IGkgPj0gODsgaSAtPSA4ICkKKyAgICB7CisgICAgICAgIE1VTEFERENfSU5JVAorICAgICAgICBNVUxBRERDX0NPUkUgICBNVUxBRERDX0NPUkUKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisKKyAgICAgICAgTVVMQUREQ19DT1JFICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfQ09SRSAgIE1VTEFERENfQ09SRQorICAgICAgICBNVUxBRERDX1NUT1AKKyAgICB9CisKKyAgICBmb3IoIDsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgICBNVUxBRERDX0lOSVQKKyAgICAgICAgTVVMQUREQ19DT1JFCisgICAgICAgIE1VTEFERENfU1RPUAorICAgIH0KKyNlbmRpZiAvKiBNVUxBRERDX0hVSVQgKi8KKworICAgIHQrKzsKKworICAgIGRvIHsKKyAgICAgICAgKmQgKz0gYzsgYyA9ICggKmQgPCBjICk7IGQrKzsKKyAgICB9CisgICAgd2hpbGUoIGMgIT0gMCApOworfQorCisvKgorICogQmFzZWxpbmUgbXVsdGlwbGljYXRpb246IFggPSBBICogQiAgKEhBQyAxNC4xMikKKyAqLworaW50IG1iZWR0bHNfbXBpX211bF9tcGkoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIGo7CisgICAgbWJlZHRsc19tcGkgVEEsIFRCOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlRBICk7IG1iZWR0bHNfbXBpX2luaXQoICZUQiApOworCisgICAgaWYoIFggPT0gQSApIHsgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVEEsIEEgKSApOyBBID0gJlRBOyB9CisgICAgaWYoIFggPT0gQiApIHsgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVEIsIEIgKSApOyBCID0gJlRCOyB9CisKKyAgICBmb3IoIGkgPSBBLT5uOyBpID4gMDsgaS0tICkKKyAgICAgICAgaWYoIEEtPnBbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBmb3IoIGogPSBCLT5uOyBqID4gMDsgai0tICkKKyAgICAgICAgaWYoIEItPnBbaiAtIDFdICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIGkgKyBqICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoIFgsIDAgKSApOworCisgICAgZm9yKCBpKys7IGogPiAwOyBqLS0gKQorICAgICAgICBtcGlfbXVsX2hscCggaSAtIDEsIEEtPnAsIFgtPnAgKyBqIC0gMSwgQi0+cFtqIC0gMV0gKTsKKworICAgIFgtPnMgPSBBLT5zICogQi0+czsKKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUQiApOyBtYmVkdGxzX21waV9mcmVlKCAmVEEgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBCYXNlbGluZSBtdWx0aXBsaWNhdGlvbjogWCA9IEEgKiBiCisgKi8KK2ludCBtYmVkdGxzX21waV9tdWxfaW50KCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3VpbnQgYiApCit7CisgICAgbWJlZHRsc19tcGkgX0I7CisgICAgbWJlZHRsc19tcGlfdWludCBwWzFdOworCisgICAgX0IucyA9IDE7CisgICAgX0IubiA9IDE7CisgICAgX0IucCA9IHA7CisgICAgcFswXSA9IGI7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfbXBpX211bF9tcGkoIFgsIEEsICZfQiApICk7Cit9CisKKy8qCisgKiBVbnNpZ25lZCBpbnRlZ2VyIGRpdmlkZSAtIGRvdWJsZSBtYmVkdGxzX21waV91aW50IGRpdmlkZW5kLCB1MS91MCwgYW5kCisgKiBtYmVkdGxzX21waV91aW50IGRpdmlzb3IsIGQKKyAqLworc3RhdGljIG1iZWR0bHNfbXBpX3VpbnQgbWJlZHRsc19pbnRfZGl2X2ludCggbWJlZHRsc19tcGlfdWludCB1MSwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3VpbnQgdTAsIG1iZWR0bHNfbXBpX3VpbnQgZCwgbWJlZHRsc19tcGlfdWludCAqciApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVURCTCkKKyAgICBtYmVkdGxzX3RfdWRibCBkaXZpZGVuZCwgcXVvdGllbnQ7CisjZWxzZQorICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgcmFkaXggPSAobWJlZHRsc19tcGlfdWludCkgMSA8PCBiaUg7CisgICAgY29uc3QgbWJlZHRsc19tcGlfdWludCB1aW50X2hhbGZ3b3JkX21hc2sgPSAoIChtYmVkdGxzX21waV91aW50KSAxIDw8IGJpSCApIC0gMTsKKyAgICBtYmVkdGxzX21waV91aW50IGQwLCBkMSwgcTAsIHExLCByQVgsIHIwLCBxdW90aWVudDsKKyAgICBtYmVkdGxzX21waV91aW50IHUwX21zdywgdTBfbHN3OworICAgIHNpemVfdCBzOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBvdmVyZmxvdworICAgICAqLworICAgIGlmKCAwID09IGQgfHwgdTEgPj0gZCApCisgICAgeworICAgICAgICBpZiAociAhPSBOVUxMKSAqciA9IH4wOworCisgICAgICAgIHJldHVybiAoIH4wICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVURCTCkKKyAgICBkaXZpZGVuZCAgPSAobWJlZHRsc190X3VkYmwpIHUxIDw8IGJpTDsKKyAgICBkaXZpZGVuZCB8PSAobWJlZHRsc190X3VkYmwpIHUwOworICAgIHF1b3RpZW50ID0gZGl2aWRlbmQgLyBkOworICAgIGlmKCBxdW90aWVudCA+ICggKG1iZWR0bHNfdF91ZGJsKSAxIDw8IGJpTCApIC0gMSApCisgICAgICAgIHF1b3RpZW50ID0gKCAobWJlZHRsc190X3VkYmwpIDEgPDwgYmlMICkgLSAxOworCisgICAgaWYoIHIgIT0gTlVMTCApCisgICAgICAgICpyID0gKG1iZWR0bHNfbXBpX3VpbnQpKCBkaXZpZGVuZCAtIChxdW90aWVudCAqIGQgKSApOworCisgICAgcmV0dXJuIChtYmVkdGxzX21waV91aW50KSBxdW90aWVudDsKKyNlbHNlCisKKyAgICAvKgorICAgICAqIEFsZ29yaXRobSBELCBTZWN0aW9uIDQuMy4xIC0gVGhlIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZworICAgICAqICAgVm9sLiAyIC0gU2VtaW51bWVyaWNhbCBBbGdvcml0aG1zLCBLbnV0aAorICAgICAqLworCisgICAgLyoKKyAgICAgKiBOb3JtYWxpemUgdGhlIGRpdmlzb3IsIGQsIGFuZCBkaXZpZGVuZCwgdTAsIHUxCisgICAgICovCisgICAgcyA9IG1iZWR0bHNfY2x6KCBkICk7CisgICAgZCA9IGQgPDwgczsKKworICAgIHUxID0gdTEgPDwgczsKKyAgICB1MSB8PSAoIHUwID4+ICggYmlMIC0gcyApICkgJiAoIC0obWJlZHRsc19tcGlfc2ludClzID4+ICggYmlMIC0gMSApICk7CisgICAgdTAgPSAgdTAgPDwgczsKKworICAgIGQxID0gZCA+PiBiaUg7CisgICAgZDAgPSBkICYgdWludF9oYWxmd29yZF9tYXNrOworCisgICAgdTBfbXN3ID0gdTAgPj4gYmlIOworICAgIHUwX2xzdyA9IHUwICYgdWludF9oYWxmd29yZF9tYXNrOworCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBmaXJzdCBxdW90aWVudCBhbmQgcmVtYWluZGVyCisgICAgICovCisgICAgcTEgPSB1MSAvIGQxOworICAgIHIwID0gdTEgLSBkMSAqIHExOworCisgICAgd2hpbGUoIHExID49IHJhZGl4IHx8ICggcTEgKiBkMCA+IHJhZGl4ICogcjAgKyB1MF9tc3cgKSApCisgICAgeworICAgICAgICBxMSAtPSAxOworICAgICAgICByMCArPSBkMTsKKworICAgICAgICBpZiAoIHIwID49IHJhZGl4ICkgYnJlYWs7CisgICAgfQorCisgICAgckFYID0gKCB1MSAqIHJhZGl4ICkgKyAoIHUwX21zdyAtIHExICogZCApOworICAgIHEwID0gckFYIC8gZDE7CisgICAgcjAgPSByQVggLSBxMCAqIGQxOworCisgICAgd2hpbGUoIHEwID49IHJhZGl4IHx8ICggcTAgKiBkMCA+IHJhZGl4ICogcjAgKyB1MF9sc3cgKSApCisgICAgeworICAgICAgICBxMCAtPSAxOworICAgICAgICByMCArPSBkMTsKKworICAgICAgICBpZiAoIHIwID49IHJhZGl4ICkgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHIgIT0gTlVMTCkKKyAgICAgICAgKnIgPSAoIHJBWCAqIHJhZGl4ICsgdTBfbHN3IC0gcTAgKiBkICkgPj4gczsKKworICAgIHF1b3RpZW50ID0gcTEgKiByYWRpeCArIHEwOworCisgICAgcmV0dXJuIHF1b3RpZW50OworI2VuZGlmCit9CisKKy8qCisgKiBEaXZpc2lvbiBieSBtYmVkdGxzX21waTogQSA9IFEgKiBCICsgUiAgKEhBQyAxNC4yMCkKKyAqLworaW50IG1iZWR0bHNfbXBpX2Rpdl9tcGkoIG1iZWR0bHNfbXBpICpRLCBtYmVkdGxzX21waSAqUiwgY29uc3QgbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpLCBuLCB0LCBrOworICAgIG1iZWR0bHNfbXBpIFgsIFksIFosIFQxLCBUMjsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCBCLCAwICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlQxICk7IG1iZWR0bHNfbXBpX2luaXQoICZUMiApOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9hYnMoIEEsIEIgKSA8IDAgKQorICAgIHsKKyAgICAgICAgaWYoIFEgIT0gTlVMTCApIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggUSwgMCApICk7CisgICAgICAgIGlmKCBSICE9IE5VTEwgKSBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoIFIsIEEgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZYLCBBICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZZLCBCICkgKTsKKyAgICBYLnMgPSBZLnMgPSAxOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCAmWiwgQS0+biArIDIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlosICAwICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coICZUMSwgMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCAmVDIsIDMgKSApOworCisgICAgayA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJlkgKSAlIGJpTDsKKyAgICBpZiggayA8IGJpTCAtIDEgKQorICAgIHsKKyAgICAgICAgayA9IGJpTCAtIDEgLSBrOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZYLCBrICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmWSwgayApICk7CisgICAgfQorICAgIGVsc2UgayA9IDA7CisKKyAgICBuID0gWC5uIC0gMTsKKyAgICB0ID0gWS5uIC0gMTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZZLCBiaUwgKiAoIG4gLSB0ICkgKSApOworCisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApID49IDAgKQorICAgIHsKKyAgICAgICAgWi5wW24gLSB0XSsrOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZYLCAmWCwgJlkgKSApOworICAgIH0KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZZLCBiaUwgKiAoIG4gLSB0ICkgKSApOworCisgICAgZm9yKCBpID0gbjsgaSA+IHQgOyBpLS0gKQorICAgIHsKKyAgICAgICAgaWYoIFgucFtpXSA+PSBZLnBbdF0gKQorICAgICAgICAgICAgWi5wW2kgLSB0IC0gMV0gPSB+MDsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBaLnBbaSAtIHQgLSAxXSA9IG1iZWR0bHNfaW50X2Rpdl9pbnQoIFgucFtpXSwgWC5wW2kgLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkucFt0XSwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBaLnBbaSAtIHQgLSAxXSsrOworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBaLnBbaSAtIHQgLSAxXS0tOworCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZUMSwgMCApICk7CisgICAgICAgICAgICBUMS5wWzBdID0gKCB0IDwgMSApID8gMCA6IFkucFt0IC0gMV07CisgICAgICAgICAgICBUMS5wWzFdID0gWS5wW3RdOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfaW50KCAmVDEsICZUMSwgWi5wW2kgLSB0IC0gMV0gKSApOworCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZUMiwgMCApICk7CisgICAgICAgICAgICBUMi5wWzBdID0gKCBpIDwgMiApID8gMCA6IFgucFtpIC0gMl07CisgICAgICAgICAgICBUMi5wWzFdID0gKCBpIDwgMSApID8gMCA6IFgucFtpIC0gMV07CisgICAgICAgICAgICBUMi5wWzJdID0gWC5wW2ldOworICAgICAgICB9CisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmVDEsICZUMiApID4gMCApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX2ludCggJlQxLCAmWSwgWi5wW2kgLSB0IC0gMV0gKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZUMSwgIGJpTCAqICggaSAtIHQgLSAxICkgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZYLCAmWCwgJlQxICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlgsIDAgKSA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZUMSwgJlkgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmVDEsIGJpTCAqICggaSAtIHQgLSAxICkgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmWCwgJlgsICZUMSApICk7CisgICAgICAgICAgICBaLnBbaSAtIHQgLSAxXS0tOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIFEgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoIFEsICZaICkgKTsKKyAgICAgICAgUS0+cyA9IEEtPnMgKiBCLT5zOworICAgIH0KKworICAgIGlmKCBSICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmWCwgayApICk7CisgICAgICAgIFgucyA9IEEtPnM7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggUiwgJlggKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCBSLCAwICkgPT0gMCApCisgICAgICAgICAgICBSLT5zID0gMTsKKyAgICB9CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUMSApOyBtYmVkdGxzX21waV9mcmVlKCAmVDIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBEaXZpc2lvbiBieSBpbnQ6IEEgPSBRICogYiArIFIKKyAqLworaW50IG1iZWR0bHNfbXBpX2Rpdl9pbnQoIG1iZWR0bHNfbXBpICpRLCBtYmVkdGxzX21waSAqUiwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3NpbnQgYiApCit7CisgICAgbWJlZHRsc19tcGkgX0I7CisgICAgbWJlZHRsc19tcGlfdWludCBwWzFdOworCisgICAgcFswXSA9ICggYiA8IDAgKSA/IC1iIDogYjsKKyAgICBfQi5zID0gKCBiIDwgMCApID8gLTEgOiAxOworICAgIF9CLm4gPSAxOworICAgIF9CLnAgPSBwOworCisgICAgcmV0dXJuKCBtYmVkdGxzX21waV9kaXZfbXBpKCBRLCBSLCBBLCAmX0IgKSApOworfQorCisvKgorICogTW9kdWxvOiBSID0gQSBtb2QgQgorICovCitpbnQgbWJlZHRsc19tcGlfbW9kX21waSggbWJlZHRsc19tcGkgKlIsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqQiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCBCLCAwICkgPCAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZGl2X21waSggTlVMTCwgUiwgQSwgQiApICk7CisKKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggUiwgMCApIDwgMCApCisgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoIFIsIFIsIEIgKSApOworCisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9tcGkoIFIsIEIgKSA+PSAwICkKKyAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggUiwgUiwgQiApICk7CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogTW9kdWxvOiByID0gQSBtb2QgYgorICovCitpbnQgbWJlZHRsc19tcGlfbW9kX2ludCggbWJlZHRsc19tcGlfdWludCAqciwgY29uc3QgbWJlZHRsc19tcGkgKkEsIG1iZWR0bHNfbXBpX3NpbnQgYiApCit7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19tcGlfdWludCB4LCB5LCB6OworCisgICAgaWYoIGIgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8gKTsKKworICAgIGlmKCBiIDwgMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFICk7CisKKyAgICAvKgorICAgICAqIGhhbmRsZSB0cml2aWFsIGNhc2VzCisgICAgICovCisgICAgaWYoIGIgPT0gMSApCisgICAgeworICAgICAgICAqciA9IDA7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCBiID09IDIgKQorICAgIHsKKyAgICAgICAgKnIgPSBBLT5wWzBdICYgMTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBnZW5lcmFsIGNhc2UKKyAgICAgKi8KKyAgICBmb3IoIGkgPSBBLT5uLCB5ID0gMDsgaSA+IDA7IGktLSApCisgICAgeworICAgICAgICB4ICA9IEEtPnBbaSAtIDFdOworICAgICAgICB5ICA9ICggeSA8PCBiaUggKSB8ICggeCA+PiBiaUggKTsKKyAgICAgICAgeiAgPSB5IC8gYjsKKyAgICAgICAgeSAtPSB6ICogYjsKKworICAgICAgICB4IDw8PSBiaUg7CisgICAgICAgIHkgID0gKCB5IDw8IGJpSCApIHwgKCB4ID4+IGJpSCApOworICAgICAgICB6ICA9IHkgLyBiOworICAgICAgICB5IC09IHogKiBiOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgQSBpcyBuZWdhdGl2ZSwgdGhlbiB0aGUgY3VycmVudCB5IHJlcHJlc2VudHMgYSBuZWdhdGl2ZSB2YWx1ZS4KKyAgICAgKiBGbGlwcGluZyBpdCB0byB0aGUgcG9zaXRpdmUgc2lkZS4KKyAgICAgKi8KKyAgICBpZiggQS0+cyA8IDAgJiYgeSAhPSAwICkKKyAgICAgICAgeSA9IGIgLSB5OworCisgICAgKnIgPSB5OworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBGYXN0IE1vbnRnb21lcnkgaW5pdGlhbGl6YXRpb24gKHRoYW5rcyB0byBUb20gU3QgRGVuaXMpCisgKi8KK3N0YXRpYyB2b2lkIG1waV9tb250Z19pbml0KCBtYmVkdGxzX21waV91aW50ICptbSwgY29uc3QgbWJlZHRsc19tcGkgKk4gKQoreworICAgIG1iZWR0bHNfbXBpX3VpbnQgeCwgbTAgPSBOLT5wWzBdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgeCAgPSBtMDsKKyAgICB4ICs9ICggKCBtMCArIDIgKSAmIDQgKSA8PCAxOworCisgICAgZm9yKCBpID0gYmlMOyBpID49IDg7IGkgLz0gMiApCisgICAgICAgIHggKj0gKCAyIC0gKCBtMCAqIHggKSApOworCisgICAgKm1tID0gfnggKyAxOworfQorCisvKgorICogTW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbjogQSA9IEEgKiBCICogUl4tMSBtb2QgTiAgKEhBQyAxNC4zNikKKyAqLworc3RhdGljIGludCBtcGlfbW9udG11bCggbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpCLCBjb25zdCBtYmVkdGxzX21waSAqTiwgbWJlZHRsc19tcGlfdWludCBtbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqVCApCit7CisgICAgc2l6ZV90IGksIG4sIG07CisgICAgbWJlZHRsc19tcGlfdWludCB1MCwgdTEsICpkOworCisgICAgaWYoIFQtPm4gPCBOLT5uICsgMSB8fCBULT5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWVtc2V0KCBULT5wLCAwLCBULT5uICogY2lMICk7CisKKyAgICBkID0gVC0+cDsKKyAgICBuID0gTi0+bjsKKyAgICBtID0gKCBCLT5uIDwgbiApID8gQi0+biA6IG47CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbjsgaSsrICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFQgPSAoVCArIHUwKkIgKyB1MSpOKSAvIDJeYmlMCisgICAgICAgICAqLworICAgICAgICB1MCA9IEEtPnBbaV07CisgICAgICAgIHUxID0gKCBkWzBdICsgdTAgKiBCLT5wWzBdICkgKiBtbTsKKworICAgICAgICBtcGlfbXVsX2hscCggbSwgQi0+cCwgZCwgdTAgKTsKKyAgICAgICAgbXBpX211bF9obHAoIG4sIE4tPnAsIGQsIHUxICk7CisKKyAgICAgICAgKmQrKyA9IHUwOyBkW24gKyAxXSA9IDA7CisgICAgfQorCisgICAgbWVtY3B5KCBBLT5wLCBkLCAoIG4gKyAxICkgKiBjaUwgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfYWJzKCBBLCBOICkgPj0gMCApCisgICAgICAgIG1waV9zdWJfaGxwKCBuLCBOLT5wLCBBLT5wICk7CisgICAgZWxzZQorICAgICAgICAvKiBwcmV2ZW50IHRpbWluZyBhdHRhY2tzICovCisgICAgICAgIG1waV9zdWJfaGxwKCBuLCBBLT5wLCBULT5wICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIE1vbnRnb21lcnkgcmVkdWN0aW9uOiBBID0gQSAqIFJeLTEgbW9kIE4KKyAqLworc3RhdGljIGludCBtcGlfbW9udHJlZCggbWJlZHRsc19tcGkgKkEsIGNvbnN0IG1iZWR0bHNfbXBpICpOLCBtYmVkdGxzX21waV91aW50IG1tLCBjb25zdCBtYmVkdGxzX21waSAqVCApCit7CisgICAgbWJlZHRsc19tcGlfdWludCB6ID0gMTsKKyAgICBtYmVkdGxzX21waSBVOworCisgICAgVS5uID0gVS5zID0gKGludCkgejsKKyAgICBVLnAgPSAmejsKKworICAgIHJldHVybiggbXBpX21vbnRtdWwoIEEsICZVLCBOLCBtbSwgVCApICk7Cit9CisKKy8qCisgKiBTbGlkaW5nLXdpbmRvdyBleHBvbmVudGlhdGlvbjogWCA9IEFeRSBtb2QgTiAgKEhBQyAxNC44NSkKKyAqLworaW50IG1iZWR0bHNfbXBpX2V4cF9tb2QoIG1iZWR0bHNfbXBpICpYLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkUsIGNvbnN0IG1iZWR0bHNfbXBpICpOLCBtYmVkdGxzX21waSAqX1JSICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCB3Yml0cywgd3NpemUsIG9uZSA9IDE7CisgICAgc2l6ZV90IGksIGosIG5ibGltYnM7CisgICAgc2l6ZV90IGJ1ZnNpemUsIG5iaXRzOworICAgIG1iZWR0bHNfbXBpX3VpbnQgZWksIG1tLCBzdGF0ZTsKKyAgICBtYmVkdGxzX21waSBSUiwgVCwgV1sgMiA8PCBNQkVEVExTX01QSV9XSU5ET1dfU0laRSBdLCBBcG9zOworICAgIGludCBuZWc7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggTiwgMCApIDwgMCB8fCAoIE4tPnBbMF0gJiAxICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggRSwgMCApIDwgMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIEluaXQgdGVtcHMgYW5kIHdpbmRvdyBzaXplCisgICAgICovCisgICAgbXBpX21vbnRnX2luaXQoICZtbSwgTiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZSUiApOyBtYmVkdGxzX21waV9pbml0KCAmVCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZBcG9zICk7CisgICAgbWVtc2V0KCBXLCAwLCBzaXplb2YoIFcgKSApOworCisgICAgaSA9IG1iZWR0bHNfbXBpX2JpdGxlbiggRSApOworCisgICAgd3NpemUgPSAoIGkgPiA2NzEgKSA/IDYgOiAoIGkgPiAyMzkgKSA/IDUgOgorICAgICAgICAgICAgKCBpID4gIDc5ICkgPyA0IDogKCBpID4gIDIzICkgPyAzIDogMTsKKworICAgIGlmKCB3c2l6ZSA+IE1CRURUTFNfTVBJX1dJTkRPV19TSVpFICkKKyAgICAgICAgd3NpemUgPSBNQkVEVExTX01QSV9XSU5ET1dfU0laRTsKKworICAgIGogPSBOLT5uICsgMTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIFgsIGogKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggJldbMV0sICBqICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coICZULCBqICogMiApICk7CisKKyAgICAvKgorICAgICAqIENvbXBlbnNhdGUgZm9yIG5lZ2F0aXZlIEEgKGFuZCBjb3JyZWN0IGF0IHRoZSBlbmQpCisgICAgICovCisgICAgbmVnID0gKCBBLT5zID09IC0xICk7CisgICAgaWYoIG5lZyApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZBcG9zLCBBICkgKTsKKyAgICAgICAgQXBvcy5zID0gMTsKKyAgICAgICAgQSA9ICZBcG9zOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgMXN0IGNhbGwsIHByZS1jb21wdXRlIFJeMiBtb2QgTgorICAgICAqLworICAgIGlmKCBfUlIgPT0gTlVMTCB8fCBfUlItPnAgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZSUiwgMSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlJSLCBOLT5uICogMiAqIGJpTCApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJlJSLCAmUlIsIE4gKSApOworCisgICAgICAgIGlmKCBfUlIgIT0gTlVMTCApCisgICAgICAgICAgICBtZW1jcHkoIF9SUiwgJlJSLCBzaXplb2YoIG1iZWR0bHNfbXBpICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoICZSUiwgX1JSLCBzaXplb2YoIG1iZWR0bHNfbXBpICkgKTsKKworICAgIC8qCisgICAgICogV1sxXSA9IEEgKiBSXjIgKiBSXi0xIG1vZCBOID0gQSAqIFIgbW9kIE4KKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggQSwgTiApID49IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZXWzFdLCBBLCBOICkgKTsKKyAgICBlbHNlCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJldbMV0sIEEgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfbW9udG11bCggJldbMV0sICZSUiwgTiwgbW0sICZUICkgKTsKKworICAgIC8qCisgICAgICogWCA9IFJeMiAqIFJeLTEgbW9kIE4gPSBSIG1vZCBOCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBYLCAmUlIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRyZWQoIFgsIE4sIG1tLCAmVCApICk7CisKKyAgICBpZiggd3NpemUgPiAxICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdbMSA8PCAod3NpemUgLSAxKV0gPSBXWzFdIF4gKHdzaXplIC0gMSkKKyAgICAgICAgICovCisgICAgICAgIGogPSAgb25lIDw8ICggd3NpemUgLSAxICk7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9ncm93KCAmV1tqXSwgTi0+biArIDEgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZXW2pdLCAmV1sxXSAgICApICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHdzaXplIC0gMTsgaSsrICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoICZXW2pdLCAmV1tqXSwgTiwgbW0sICZUICkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBXW2ldID0gV1tpIC0gMV0gKiBXWzFdCisgICAgICAgICAqLworICAgICAgICBmb3IoIGkgPSBqICsgMTsgaSA8ICggb25lIDw8IHdzaXplICk7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggJldbaV0sIE4tPm4gKyAxICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJldbaV0sICZXW2kgLSAxXSApICk7CisKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoICZXW2ldLCAmV1sxXSwgTiwgbW0sICZUICkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5ibGltYnMgPSBFLT5uOworICAgIGJ1ZnNpemUgPSAwOworICAgIG5iaXRzICAgPSAwOworICAgIHdiaXRzICAgPSAwOworICAgIHN0YXRlICAgPSAwOworCisgICAgd2hpbGUoIDEgKQorICAgIHsKKyAgICAgICAgaWYoIGJ1ZnNpemUgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuYmxpbWJzID09IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBuYmxpbWJzLS07CisKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSA8PCAzOworICAgICAgICB9CisKKyAgICAgICAgYnVmc2l6ZS0tOworCisgICAgICAgIGVpID0gKEUtPnBbbmJsaW1ic10gPj4gYnVmc2l6ZSkgJiAxOworCisgICAgICAgIC8qCisgICAgICAgICAqIHNraXAgbGVhZGluZyAwcworICAgICAgICAgKi8KKyAgICAgICAgaWYoIGVpID09IDAgJiYgc3RhdGUgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggZWkgPT0gMCAmJiBzdGF0ZSA9PSAxICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIG91dCBvZiB3aW5kb3csIHNxdWFyZSBYCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoIFgsIFgsIE4sIG1tLCAmVCApICk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlaSB0byBjdXJyZW50IHdpbmRvdworICAgICAgICAgKi8KKyAgICAgICAgc3RhdGUgPSAyOworCisgICAgICAgIG5iaXRzKys7CisgICAgICAgIHdiaXRzIHw9ICggZWkgPDwgKCB3c2l6ZSAtIG5iaXRzICkgKTsKKworICAgICAgICBpZiggbmJpdHMgPT0gd3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogWCA9IFhed3NpemUgUl4tMSBtb2QgTgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgd3NpemU7IGkrKyApCisgICAgICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfbW9udG11bCggWCwgWCwgTiwgbW0sICZUICkgKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFggPSBYICogV1t3Yml0c10gUl4tMSBtb2QgTgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1waV9tb250bXVsKCBYLCAmV1t3Yml0c10sIE4sIG1tLCAmVCApICk7CisKKyAgICAgICAgICAgIHN0YXRlLS07CisgICAgICAgICAgICBuYml0cyA9IDA7CisgICAgICAgICAgICB3Yml0cyA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBiaXRzCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IG5iaXRzOyBpKysgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfbW9udG11bCggWCwgWCwgTiwgbW0sICZUICkgKTsKKworICAgICAgICB3Yml0cyA8PD0gMTsKKworICAgICAgICBpZiggKCB3Yml0cyAmICggb25lIDw8IHdzaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbXBpX21vbnRtdWwoIFgsICZXWzFdLCBOLCBtbSwgJlQgKSApOworICAgIH0KKworICAgIC8qCisgICAgICogWCA9IEFeRSAqIFIgKiBSXi0xIG1vZCBOID0gQV5FIG1vZCBOCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtcGlfbW9udHJlZCggWCwgTiwgbW0sICZUICkgKTsKKworICAgIGlmKCBuZWcgKQorICAgIHsKKyAgICAgICAgWC0+cyA9IC0xOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoIFgsIE4sIFggKSApOworICAgIH0KKworY2xlYW51cDoKKworICAgIGZvciggaSA9ICggb25lIDw8ICggd3NpemUgLSAxICkgKTsgaSA8ICggb25lIDw8IHdzaXplICk7IGkrKyApCisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZXW2ldICk7CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmV1sxXSApOyBtYmVkdGxzX21waV9mcmVlKCAmVCApOyBtYmVkdGxzX21waV9mcmVlKCAmQXBvcyApOworCisgICAgaWYoIF9SUiA9PSBOVUxMIHx8IF9SUi0+cCA9PSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJlJSICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogR3JlYXRlc3QgY29tbW9uIGRpdmlzb3I6IEcgPSBnY2QoQSwgQikgIChIQUMgMTQuNTQpCisgKi8KK2ludCBtYmVkdGxzX21waV9nY2QoIG1iZWR0bHNfbXBpICpHLCBjb25zdCBtYmVkdGxzX21waSAqQSwgY29uc3QgbWJlZHRsc19tcGkgKkIgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGx6LCBsenQ7CisgICAgbWJlZHRsc19tcGkgVEcsIFRBLCBUQjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZURyApOyBtYmVkdGxzX21waV9pbml0KCAmVEEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlRCICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZUQSwgQSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVEIsIEIgKSApOworCisgICAgbHogPSBtYmVkdGxzX21waV9sc2IoICZUQSApOworICAgIGx6dCA9IG1iZWR0bHNfbXBpX2xzYiggJlRCICk7CisKKyAgICBpZiggbHp0IDwgbHogKQorICAgICAgICBseiA9IGx6dDsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRBLCBseiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmVEIsIGx6ICkgKTsKKworICAgIFRBLnMgPSBUQi5zID0gMTsKKworICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCAmVEEsIDAgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRBLCBtYmVkdGxzX21waV9sc2IoICZUQSApICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmVEIsIG1iZWR0bHNfbXBpX2xzYiggJlRCICkgKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmVEEsICZUQiApID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9hYnMoICZUQSwgJlRBLCAmVEIgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmVEEsIDEgKSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfYWJzKCAmVEIsICZUQiwgJlRBICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRCLCAxICkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJlRCLCBseiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCBHLCAmVEIgKSApOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlRHICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUQSApOyBtYmVkdGxzX21waV9mcmVlKCAmVEIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBGaWxsIFggd2l0aCBzaXplIGJ5dGVzIG9mIHJhbmRvbS4KKyAqCisgKiBVc2UgYSB0ZW1wb3JhcnkgYnl0ZXMgcmVwcmVzZW50YXRpb24gdG8gbWFrZSBzdXJlIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUKKyAqIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRmb3JtIGVuZGlhbm5lc3MgKHVzZWZ1bCB3aGVuIGZfcm5nIGlzIGFjdHVhbGx5CisgKiBkZXRlcm1pbmlzdGljLCBlZyBmb3IgdGVzdHMpLgorICovCitpbnQgbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oIG1iZWR0bHNfbXBpICpYLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKworICAgIGlmKCBzaXplID4gTUJFRFRMU19NUElfTUFYX1NJWkUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBmX3JuZyggcF9ybmcsIGJ1Ziwgc2l6ZSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggWCwgYnVmLCBzaXplICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogTW9kdWxhciBpbnZlcnNlOiBYID0gQV4tMSBtb2QgTiAgKEhBQyAxNC42MSAvIDE0LjY0KQorICovCitpbnQgbWJlZHRsc19tcGlfaW52X21vZCggbWJlZHRsc19tcGkgKlgsIGNvbnN0IG1iZWR0bHNfbXBpICpBLCBjb25zdCBtYmVkdGxzX21waSAqTiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBHLCBUQSwgVFUsIFUxLCBVMiwgVEIsIFRWLCBWMSwgVjI7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggTiwgMCApIDw9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlRBICk7IG1iZWR0bHNfbXBpX2luaXQoICZUVSApOyBtYmVkdGxzX21waV9pbml0KCAmVTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlUyICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsgbWJlZHRsc19tcGlfaW5pdCggJlRCICk7IG1iZWR0bHNfbXBpX2luaXQoICZUViApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZWMSApOyBtYmVkdGxzX21waV9pbml0KCAmVjIgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ2NkKCAmRywgQSwgTiApICk7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJkcsIDEgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJlRBLCBBLCBOICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZUVSwgJlRBICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZUQiwgTiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmVFYsIE4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmVTEsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlUyLCAwICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZWMSwgMCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmVjIsIDEgKSApOworCisgICAgZG8KKyAgICB7CisgICAgICAgIHdoaWxlKCAoIFRVLnBbMF0gJiAxICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRVLCAxICkgKTsKKworICAgICAgICAgICAgaWYoICggVTEucFswXSAmIDEgKSAhPSAwIHx8ICggVTIucFswXSAmIDEgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZVMSwgJlUxLCAmVEIgKSApOworICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlUyLCAmVTIsICZUQSApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlUxLCAxICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlUyLCAxICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCAoIFRWLnBbMF0gJiAxICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlRWLCAxICkgKTsKKworICAgICAgICAgICAgaWYoICggVjEucFswXSAmIDEgKSAhPSAwIHx8ICggVjIucFswXSAmIDEgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZWMSwgJlYxLCAmVEIgKSApOworICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlYyLCAmVjIsICZUQSApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlYxLCAxICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlYyLCAxICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmVFUsICZUViApID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZUVSwgJlRVLCAmVFYgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVTEsICZVMSwgJlYxICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlUyLCAmVTIsICZWMiApICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZUViwgJlRWLCAmVFUgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVjEsICZWMSwgJlUxICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlYyLCAmVjIsICZVMiApICk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZUVSwgMCApICE9IDAgKTsKKworICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCAmVjEsIDAgKSA8IDAgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZWMSwgJlYxLCBOICkgKTsKKworICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmVjEsIE4gKSA+PSAwICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVjEsICZWMSwgTiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoIFgsICZWMSApICk7CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVEEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlRVICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZVMSApOyBtYmVkdGxzX21waV9mcmVlKCAmVTIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmRyApOyBtYmVkdGxzX21waV9mcmVlKCAmVEIgKTsgbWJlZHRsc19tcGlfZnJlZSggJlRWICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlYxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZWMiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkKKworc3RhdGljIGNvbnN0IGludCBzbWFsbF9wcmltZVtdID0KK3sKKyAgICAgICAgMywgICAgNSwgICAgNywgICAxMSwgICAxMywgICAxNywgICAxOSwgICAyMywKKyAgICAgICAyOSwgICAzMSwgICAzNywgICA0MSwgICA0MywgICA0NywgICA1MywgICA1OSwKKyAgICAgICA2MSwgICA2NywgICA3MSwgICA3MywgICA3OSwgICA4MywgICA4OSwgICA5NywKKyAgICAgIDEwMSwgIDEwMywgIDEwNywgIDEwOSwgIDExMywgIDEyNywgIDEzMSwgIDEzNywKKyAgICAgIDEzOSwgIDE0OSwgIDE1MSwgIDE1NywgIDE2MywgIDE2NywgIDE3MywgIDE3OSwKKyAgICAgIDE4MSwgIDE5MSwgIDE5MywgIDE5NywgIDE5OSwgIDIxMSwgIDIyMywgIDIyNywKKyAgICAgIDIyOSwgIDIzMywgIDIzOSwgIDI0MSwgIDI1MSwgIDI1NywgIDI2MywgIDI2OSwKKyAgICAgIDI3MSwgIDI3NywgIDI4MSwgIDI4MywgIDI5MywgIDMwNywgIDMxMSwgIDMxMywKKyAgICAgIDMxNywgIDMzMSwgIDMzNywgIDM0NywgIDM0OSwgIDM1MywgIDM1OSwgIDM2NywKKyAgICAgIDM3MywgIDM3OSwgIDM4MywgIDM4OSwgIDM5NywgIDQwMSwgIDQwOSwgIDQxOSwKKyAgICAgIDQyMSwgIDQzMSwgIDQzMywgIDQzOSwgIDQ0MywgIDQ0OSwgIDQ1NywgIDQ2MSwKKyAgICAgIDQ2MywgIDQ2NywgIDQ3OSwgIDQ4NywgIDQ5MSwgIDQ5OSwgIDUwMywgIDUwOSwKKyAgICAgIDUyMSwgIDUyMywgIDU0MSwgIDU0NywgIDU1NywgIDU2MywgIDU2OSwgIDU3MSwKKyAgICAgIDU3NywgIDU4NywgIDU5MywgIDU5OSwgIDYwMSwgIDYwNywgIDYxMywgIDYxNywKKyAgICAgIDYxOSwgIDYzMSwgIDY0MSwgIDY0MywgIDY0NywgIDY1MywgIDY1OSwgIDY2MSwKKyAgICAgIDY3MywgIDY3NywgIDY4MywgIDY5MSwgIDcwMSwgIDcwOSwgIDcxOSwgIDcyNywKKyAgICAgIDczMywgIDczOSwgIDc0MywgIDc1MSwgIDc1NywgIDc2MSwgIDc2OSwgIDc3MywKKyAgICAgIDc4NywgIDc5NywgIDgwOSwgIDgxMSwgIDgyMSwgIDgyMywgIDgyNywgIDgyOSwKKyAgICAgIDgzOSwgIDg1MywgIDg1NywgIDg1OSwgIDg2MywgIDg3NywgIDg4MSwgIDg4MywKKyAgICAgIDg4NywgIDkwNywgIDkxMSwgIDkxOSwgIDkyOSwgIDkzNywgIDk0MSwgIDk0NywKKyAgICAgIDk1MywgIDk2NywgIDk3MSwgIDk3NywgIDk4MywgIDk5MSwgIDk5NywgLTEwMworfTsKKworLyoKKyAqIFNtYWxsIGRpdmlzb3JzIHRlc3QgKFggbXVzdCBiZSBwb3NpdGl2ZSkKKyAqCisgKiBSZXR1cm4gdmFsdWVzOgorICogMDogbm8gc21hbGwgZmFjdG9yIChwb3NzaWJsZSBwcmltZSwgbW9yZSB0ZXN0cyBuZWVkZWQpCisgKiAxOiBjZXJ0YWluIHByaW1lCisgKiBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEU6IGNlcnRhaW4gbm9uLXByaW1lCisgKiBvdGhlciBuZWdhdGl2ZTogZXJyb3IKKyAqLworc3RhdGljIGludCBtcGlfY2hlY2tfc21hbGxfZmFjdG9ycyggY29uc3QgbWJlZHRsc19tcGkgKlggKQoreworICAgIGludCByZXQgPSAwOworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpX3VpbnQgcjsKKworICAgIGlmKCAoIFgtPnBbMF0gJiAxICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICk7CisKKyAgICBmb3IoIGkgPSAwOyBzbWFsbF9wcmltZVtpXSA+IDA7IGkrKyApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggWCwgc21hbGxfcHJpbWVbaV0gKSA8PSAwICkKKyAgICAgICAgICAgIHJldHVybiggMSApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX2ludCggJnIsIFgsIHNtYWxsX3ByaW1lW2ldICkgKTsKKworICAgICAgICBpZiggciA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICk7CisgICAgfQorCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBNaWxsZXItUmFiaW4gcHNldWRvLXByaW1hbGl0eSB0ZXN0ICAoSEFDIDQuMjQpCisgKi8KK3N0YXRpYyBpbnQgbXBpX21pbGxlcl9yYWJpbiggY29uc3QgbWJlZHRsc19tcGkgKlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQsIGNvdW50OworICAgIHNpemVfdCBpLCBqLCBrLCBuLCBzOworICAgIG1iZWR0bHNfbXBpIFcsIFIsIFQsIEEsIFJSOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlcgKTsgbWJlZHRsc19tcGlfaW5pdCggJlIgKTsgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUlIgKTsKKworICAgIC8qCisgICAgICogVyA9IHxYfCAtIDEKKyAgICAgKiBSID0gVyA+PiBsc2IoIFcgKQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggJlcsIFgsIDEgKSApOworICAgIHMgPSBtYmVkdGxzX21waV9sc2IoICZXICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUiwgJlcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJlIsIHMgKSApOworCisgICAgaSA9IG1iZWR0bHNfbXBpX2JpdGxlbiggWCApOworICAgIC8qCisgICAgICogSEFDLCB0YWJsZSA0LjQKKyAgICAgKi8KKyAgICBuID0gKCAoIGkgPj0gMTMwMCApID8gIDIgOiAoIGkgPj0gIDg1MCApID8gIDMgOgorICAgICAgICAgICggaSA+PSAgNjUwICkgPyAgNCA6ICggaSA+PSAgMzUwICkgPyAgOCA6CisgICAgICAgICAgKCBpID49ICAyNTAgKSA/IDEyIDogKCBpID49ICAxNTAgKSA/IDE4IDogMjcgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBuOyBpKysgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogcGljayBhIHJhbmRvbSBBLCAxIDwgQSA8IHxYfCAtIDEKKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZBLCBYLT5uICogY2lMLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmQSwgJlcgKSA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaiA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJkEgKSAtIG1iZWR0bHNfbXBpX2JpdGxlbiggJlcgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJkEsIGogKyAxICkgKTsKKyAgICAgICAgfQorICAgICAgICBBLnBbMF0gfD0gMzsKKworICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZBLCBYLT5uICogY2lMLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgICAgICAgICBqID0gbWJlZHRsc19tcGlfYml0bGVuKCAmQSApOworICAgICAgICAgICAgayA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJlcgKTsKKyAgICAgICAgICAgIGlmIChqID4gaykgeworICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJkEsIGogLSBrICkgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50KysgPiAzMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZBLCAmVyApID49IDAgfHwKKyAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZBLCAxICkgIDw9IDAgICAgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBBID0gQV5SIG1vZCB8WHwKKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJkEsICZBLCAmUiwgWCwgJlJSICkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJkEsICZXICkgPT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX2ludCggJkEsICAxICkgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBqID0gMTsKKyAgICAgICAgd2hpbGUoIGogPCBzICYmIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZBLCAmVyApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQSA9IEEgKiBBIG1vZCB8WHwKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVCwgJkEsICZBICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJkEsICZULCBYICApICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmQSwgMSApID09IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBqKys7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBub3QgcHJpbWUgaWYgQSAhPSB8WHwgLSAxIG9yIEEgPT0gMQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZBLCAmVyApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZBLCAgMSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVyApOyBtYmVkdGxzX21waV9mcmVlKCAmUiApOyBtYmVkdGxzX21waV9mcmVlKCAmVCApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZSUiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFBzZXVkby1wcmltYWxpdHkgdGVzdDogc21hbGwgZmFjdG9ycywgdGhlbiBNaWxsZXItUmFiaW4KKyAqLworaW50IG1iZWR0bHNfbXBpX2lzX3ByaW1lKCBjb25zdCBtYmVkdGxzX21waSAqWCwKKyAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIFhYOworCisgICAgWFgucyA9IDE7CisgICAgWFgubiA9IFgtPm47CisgICAgWFgucCA9IFgtPnA7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlhYLCAwICkgPT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCAmWFgsIDEgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmWFgsIDIgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggKCByZXQgPSBtcGlfY2hlY2tfc21hbGxfZmFjdG9ycyggJlhYICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gMSApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggbXBpX21pbGxlcl9yYWJpbiggJlhYLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogUHJpbWUgbnVtYmVyIGdlbmVyYXRpb24KKyAqLworaW50IG1iZWR0bHNfbXBpX2dlbl9wcmltZSggbWJlZHRsc19tcGkgKlgsIHNpemVfdCBuYml0cywgaW50IGRoX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBrLCBuOworICAgIG1iZWR0bHNfbXBpX3VpbnQgcjsKKyAgICBtYmVkdGxzX21waSBZOworCisgICAgaWYoIG5iaXRzIDwgMyB8fCBuYml0cyA+IE1CRURUTFNfTVBJX01BWF9CSVRTICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZZICk7CisKKyAgICBuID0gQklUU19UT19MSU1CUyggbmJpdHMgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oIFgsIG4gKiBjaUwsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICBrID0gbWJlZHRsc19tcGlfYml0bGVuKCBYICk7CisgICAgaWYoIGsgPiBuYml0cyApIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggWCwgayAtIG5iaXRzICsgMSApICk7CisKKyAgICBtYmVkdGxzX21waV9zZXRfYml0KCBYLCBuYml0cy0xLCAxICk7CisKKyAgICBYLT5wWzBdIHw9IDE7CisKKyAgICBpZiggZGhfZmxhZyA9PSAwICkKKyAgICB7CisgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfbXBpX2lzX3ByaW1lKCBYLCBmX3JuZywgcF9ybmcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSApCisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9pbnQoIFgsIFgsIDIgKSApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEFuIG5lY2Vzc2FyeSBjb25kaXRpb24gZm9yIFkgYW5kIFggPSAyWSArIDEgdG8gYmUgcHJpbWUKKyAgICAgICAgICogaXMgWCA9IDIgbW9kIDMgKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gWSA9IDIgbW9kIDMpLgorICAgICAgICAgKiBNYWtlIHN1cmUgaXQgaXMgc2F0aXNmaWVkLCB3aGlsZSBrZWVwaW5nIFggPSAzIG1vZCA0CisgICAgICAgICAqLworCisgICAgICAgIFgtPnBbMF0gfD0gMjsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9pbnQoICZyLCBYLCAzICkgKTsKKyAgICAgICAgaWYoIHIgPT0gMCApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9pbnQoIFgsIFgsIDggKSApOworICAgICAgICBlbHNlIGlmKCByID09IDEgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfaW50KCBYLCBYLCA0ICkgKTsKKworICAgICAgICAvKiBTZXQgWSA9IChYLTEpIC8gMiwgd2hpY2ggaXMgWCAvIDIgYmVjYXVzZSBYIGlzIG9kZCAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZZLCBYICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmWSwgMSApICk7CisKKyAgICAgICAgd2hpbGUoIDEgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRmlyc3QsIGNoZWNrIHNtYWxsIGZhY3RvcnMgZm9yIFggYW5kIFkKKyAgICAgICAgICAgICAqIGJlZm9yZSBkb2luZyBNaWxsZXItUmFiaW4gb24gYW55IG9mIHRoZW0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYoICggcmV0ID0gbXBpX2NoZWNrX3NtYWxsX2ZhY3RvcnMoICBYICAgICAgICAgKSApID09IDAgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IG1waV9jaGVja19zbWFsbF9mYWN0b3JzKCAmWSAgICAgICAgICkgKSA9PSAwICYmCisgICAgICAgICAgICAgICAgKCByZXQgPSBtcGlfbWlsbGVyX3JhYmluKCAgWCwgZl9ybmcsIHBfcm5nICApICkgPT0gMCAmJgorICAgICAgICAgICAgICAgICggcmV0ID0gbXBpX21pbGxlcl9yYWJpbiggJlksIGZfcm5nLCBwX3JuZyAgKSApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSApCisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTmV4dCBjYW5kaWRhdGVzLiBXZSB3YW50IHRvIHByZXNlcnZlIFkgPSAoWC0xKSAvIDIgYW5kCisgICAgICAgICAgICAgKiBZID0gMSBtb2QgMiBhbmQgWSA9IDIgbW9kIDMgKGVxIFggPSAzIG1vZCA0IGFuZCBYID0gMiBtb2QgMykKKyAgICAgICAgICAgICAqIHNvIHVwIFkgYnkgNiBhbmQgWCBieSAxMi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfaW50KCAgWCwgIFgsIDEyICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX2ludCggJlksICZZLCA2ICApICk7CisgICAgICAgIH0KKyAgICB9CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfR0VOUFJJTUUgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKyNkZWZpbmUgR0NEX1BBSVJfQ09VTlQgIDMKKworc3RhdGljIGNvbnN0IGludCBnY2RfcGFpcnNbR0NEX1BBSVJfQ09VTlRdWzNdID0KK3sKKyAgICB7IDY5MywgNjA5LCAyMSB9LAorICAgIHsgMTc2NCwgODY4LCAyOCB9LAorICAgIHsgNzY4NDU0OTIzLCA1NDIxNjc4MTQsIDEgfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19tcGlfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IHJldCwgaTsKKyAgICBtYmVkdGxzX21waSBBLCBFLCBOLCBYLCBZLCBVLCBWOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkUgKTsgbWJlZHRsc19tcGlfaW5pdCggJk4gKTsgbWJlZHRsc19tcGlfaW5pdCggJlggKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmVSApOyBtYmVkdGxzX21waV9pbml0KCAmViApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIDE2LAorICAgICAgICAiRUZFMDIxQzI2NDVGRDFEQzU4NkU2OTE4NEFGNEEzMUUiIFwKKyAgICAgICAgIkQ1RjUzRTkzQjVGMTIzRkE0MTY4MDg2N0JBMTEwMTMxIiBcCisgICAgICAgICI5NDRGRTc5NTJFMjUxNzMzNzc4MENCMERCODBFNjFBQSIgXAorICAgICAgICAiRTdDOEREQzZDNUM2QUFERUIzNEVCMzhBMkY0MEQ1RTYiICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZFLCAxNiwKKyAgICAgICAgIkIyRTdFRkQzNzA3NUI5RjAzRkY5ODlDN0M1MDUxQzIwIiBcCisgICAgICAgICIzNEQyQTMyMzgxMDI1MTEyN0U3QkY4NjI1QTRGNDlBNSIgXAorICAgICAgICAiRjNFMjdGNERBOEJENTlDNDdENkRBQUJBNEM4MTI3QkQiIFwKKyAgICAgICAgIjVCNUMyNTc2MzIyMkZFRkNDRkMzOEI4MzIzNjZDMjlFIiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmTiwgMTYsCisgICAgICAgICIwMDY2QTE5ODE4NkMxOEMxMEIyRjVFRDlCNTIyNzUyQSIgXAorICAgICAgICAiOTgzMEI2OTkxNkU1MzVDOEYwNDc1MThBODg5QTQzQTUiIFwKKyAgICAgICAgIjk0QjZCRUQyN0ExNjhEMzFENEE1MkY4ODkyNUFBOEY1IiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZYLCAmQSwgJk4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlUsIDE2LAorICAgICAgICAiNjAyQUI3RUNBNTk3QTNENkI1NkZGOTgyOUE1RThCODUiIFwKKyAgICAgICAgIjlFODU3RUE5NUEwMzUxMkUyQkFFNzM5MTY4OEQyNjRBIiBcCisgICAgICAgICJBNTY2M0IwMzQxREI5Q0NGRDJDNEM1RjQyMUZFQzgxNCIgXAorICAgICAgICAiODAwMUI3MkU4NDhBMzhDQUUxQzY1Rjc4RTU2QUJERUYiIFwKKyAgICAgICAgIkUxMkQzQzAzOUI4QTAyRDZCRTU5M0YwQkJCREE1NkYxIiBcCisgICAgICAgICJFQ0Y2NzcxNTJFRjgwNDM3MEMxQTMwNUNBRjNCNUJGMSIgXAorICAgICAgICAiMzA4NzlCNTZDNjFERTU4NEEwRjUzQTI0NDdBNTFFIiApICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1QSSB0ZXN0ICMxIChtdWxfbXBpKTogIiApOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmVSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZGl2X21waSggJlgsICZZLCAmQSwgJk4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlUsIDE2LAorICAgICAgICAiMjU2NTY3MzM2MDU5RTUyQ0FFMjI5MjU0NzQ3MDVGMzlBOTQiICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZWLCAxNiwKKyAgICAgICAgIjY2MTNGMjYxNjIyMjNERjQ4OEU5Q0Q0OENDMTMyQzdBIiBcCisgICAgICAgICIwQUM5M0M3MDFCMDAxQjA5MkU0RTVCOUY3M0JDRDI3QiIgXAorICAgICAgICAiOUVFNTBEMDY1N0M3N0YzNzRFOTAzQ0RGQTRDNjQyIiApICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1QSSB0ZXN0ICMyIChkaXZfbXBpKTogIiApOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmVSApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJlksICZWICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9leHBfbW9kKCAmWCwgJkEsICZFLCAmTiwgTlVMTCApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmVSwgMTYsCisgICAgICAgICIzNkUxMzlBRUE1NTIxNTYwOUQyODE2OTk4RUQwMjBCQiIgXAorICAgICAgICAiQkQ5NkMzNzg5MEY2NTE3MUQ5NDhFOUJDN0NCQUE0RDkiIFwKKyAgICAgICAgIjMyNUQyNEQ2QTNDMTI3MTBGMTBBMDlGQTA4QUI4NyIgKSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNUEkgdGVzdCAjMyAoZXhwX21vZCk6ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlUgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZYLCAmQSwgJk4gKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlUsIDE2LAorICAgICAgICAiMDAzQTBBQUVERDdFNzg0RkMwN0Q4RjlFQzZFM0JGRDUiIFwKKyAgICAgICAgIkMzREJBNzY0NTYzNjNBMTA4Njk2MjJFQUMyREQ4NEVDIiBcCisgICAgICAgICJDNUI4QTc0REFDNEQwOUUwM0I1RTBCRTc3OUYyREY2MSIgKSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNUEkgdGVzdCAjNCAoaW52X21vZCk6ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlUgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1QSSB0ZXN0ICM1IChzaW1wbGUgZ2NkKTogIiApOworCisgICAgZm9yKCBpID0gMDsgaSA8IEdDRF9QQUlSX0NPVU5UOyBpKysgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmWCwgZ2NkX3BhaXJzW2ldWzBdICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmWSwgZ2NkX3BhaXJzW2ldWzFdICkgKTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2djZCggJkEsICZYLCAmWSApICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZBLCBnY2RfcGFpcnNbaV1bMl0gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgYXQgJWRcbiIsIGkgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCitjbGVhbnVwOgorCisgICAgaWYoIHJldCAhPSAwICYmIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiVW5leHBlY3RlZCBlcnJvciwgcmV0dXJuIGNvZGUgPSAlMDhYXG4iLCByZXQgKTsKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZFICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZOICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlUgKTsgbWJlZHRsc19tcGlfZnJlZSggJlYgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9ibG93ZmlzaC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmxvd2Zpc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAzZjBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvYmxvd2Zpc2guYwpAQCAtMCwwICsxLDY1NiBAQAorLyoKKyAqICBCbG93ZmlzaCBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgQmxvd2Zpc2ggYmxvY2sgY2lwaGVyIHdhcyBkZXNpZ25lZCBieSBCcnVjZSBTY2huZWllciBpbiAxOTkzLgorICogIGh0dHA6Ly93d3cuc2NobmVpZXIuY29tL2Jsb3dmaXNoLmh0bWwKKyAqICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jsb3dmaXNoXyUyOGNpcGhlciUyOQorICoKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JMT1dGSVNIX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2Jsb3dmaXNoLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGJpZyBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9CRQorI2RlZmluZSBHRVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBQW01CRURUTFNfQkxPV0ZJU0hfUk9VTkRTICsgMl0gPSB7CisgICAgICAgIDB4MjQzRjZBODhMLCAweDg1QTMwOEQzTCwgMHgxMzE5OEEyRUwsIDB4MDM3MDczNDRMLAorICAgICAgICAweEE0MDkzODIyTCwgMHgyOTlGMzFEMEwsIDB4MDgyRUZBOThMLCAweEVDNEU2Qzg5TCwKKyAgICAgICAgMHg0NTI4MjFFNkwsIDB4MzhEMDEzNzdMLCAweEJFNTQ2NkNGTCwgMHgzNEU5MEM2Q0wsCisgICAgICAgIDB4QzBBQzI5QjdMLCAweEM5N0M1MERETCwgMHgzRjg0RDVCNUwsIDB4QjU0NzA5MTdMLAorICAgICAgICAweDkyMTZENUQ5TCwgMHg4OTc5RkIxQkwKK307CisKKy8qIGRlY2xhcmF0aW9ucyBvZiBkYXRhIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlICovCitzdGF0aWMgY29uc3QgdWludDMyX3QgU1s0XVsyNTZdOworCitzdGF0aWMgdWludDMyX3QgRiggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsIHVpbnQzMl90IHggKQoreworICAgdW5zaWduZWQgc2hvcnQgYSwgYiwgYywgZDsKKyAgIHVpbnQzMl90ICB5OworCisgICBkID0gKHVuc2lnbmVkIHNob3J0KSh4ICYgMHhGRik7CisgICB4ID4+PSA4OworICAgYyA9ICh1bnNpZ25lZCBzaG9ydCkoeCAmIDB4RkYpOworICAgeCA+Pj0gODsKKyAgIGIgPSAodW5zaWduZWQgc2hvcnQpKHggJiAweEZGKTsKKyAgIHggPj49IDg7CisgICBhID0gKHVuc2lnbmVkIHNob3J0KSh4ICYgMHhGRik7CisgICB5ID0gY3R4LT5TWzBdW2FdICsgY3R4LT5TWzFdW2JdOworICAgeSA9IHkgXiBjdHgtPlNbMl1bY107CisgICB5ID0geSArIGN0eC0+U1szXVtkXTsKKworICAgcmV0dXJuKCB5ICk7Cit9CisKK3N0YXRpYyB2b2lkIGJsb3dmaXNoX2VuYyggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsIHVpbnQzMl90ICp4bCwgdWludDMyX3QgKnhyICkKK3sKKyAgICB1aW50MzJfdCAgWGwsIFhyLCB0ZW1wOworICAgIHNob3J0IGk7CisKKyAgICBYbCA9ICp4bDsKKyAgICBYciA9ICp4cjsKKworICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX0JMT1dGSVNIX1JPVU5EUzsgKytpICkKKyAgICB7CisgICAgICAgIFhsID0gWGwgXiBjdHgtPlBbaV07CisgICAgICAgIFhyID0gRiggY3R4LCBYbCApIF4gWHI7CisKKyAgICAgICAgdGVtcCA9IFhsOworICAgICAgICBYbCA9IFhyOworICAgICAgICBYciA9IHRlbXA7CisgICAgfQorCisgICAgdGVtcCA9IFhsOworICAgIFhsID0gWHI7CisgICAgWHIgPSB0ZW1wOworCisgICAgWHIgPSBYciBeIGN0eC0+UFtNQkVEVExTX0JMT1dGSVNIX1JPVU5EU107CisgICAgWGwgPSBYbCBeIGN0eC0+UFtNQkVEVExTX0JMT1dGSVNIX1JPVU5EUyArIDFdOworCisgICAgKnhsID0gWGw7CisgICAgKnhyID0gWHI7Cit9CisKK3N0YXRpYyB2b2lkIGJsb3dmaXNoX2RlYyggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsIHVpbnQzMl90ICp4bCwgdWludDMyX3QgKnhyICkKK3sKKyAgICB1aW50MzJfdCAgWGwsIFhyLCB0ZW1wOworICAgIHNob3J0IGk7CisKKyAgICBYbCA9ICp4bDsKKyAgICBYciA9ICp4cjsKKworICAgIGZvciggaSA9IE1CRURUTFNfQkxPV0ZJU0hfUk9VTkRTICsgMTsgaSA+IDE7IC0taSApCisgICAgeworICAgICAgICBYbCA9IFhsIF4gY3R4LT5QW2ldOworICAgICAgICBYciA9IEYoIGN0eCwgWGwgKSBeIFhyOworCisgICAgICAgIHRlbXAgPSBYbDsKKyAgICAgICAgWGwgPSBYcjsKKyAgICAgICAgWHIgPSB0ZW1wOworICAgIH0KKworICAgIHRlbXAgPSBYbDsKKyAgICBYbCA9IFhyOworICAgIFhyID0gdGVtcDsKKworICAgIFhyID0gWHIgXiBjdHgtPlBbMV07CisgICAgWGwgPSBYbCBeIGN0eC0+UFswXTsKKworICAgICp4bCA9IFhsOworICAgICp4ciA9IFhyOworfQorCit2b2lkIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICkgKTsKK30KKworLyoKKyAqIEJsb3dmaXNoIGtleSBzY2hlZHVsZQorICovCitpbnQgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApCit7CisgICAgdW5zaWduZWQgaW50IGksIGosIGs7CisgICAgdWludDMyX3QgZGF0YSwgZGF0YWwsIGRhdGFyOworCisgICAgaWYoIGtleWJpdHMgPCBNQkVEVExTX0JMT1dGSVNIX01JTl9LRVlfQklUUyB8fCBrZXliaXRzID4gTUJFRFRMU19CTE9XRklTSF9NQVhfS0VZX0JJVFMgfHwKKyAgICAgICAgKCBrZXliaXRzICUgOCApICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RIICk7CisgICAgfQorCisgICAga2V5Yml0cyA+Pj0gMzsKKworICAgIGZvciggaSA9IDA7IGkgPCA0OyBpKysgKQorICAgIHsKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IDI1NjsgaisrICkKKyAgICAgICAgICAgIGN0eC0+U1tpXVtqXSA9IFNbaV1bal07CisgICAgfQorCisgICAgaiA9IDA7CisgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfQkxPV0ZJU0hfUk9VTkRTICsgMjsgKytpICkKKyAgICB7CisgICAgICAgIGRhdGEgPSAweDAwMDAwMDAwOworICAgICAgICBmb3IoIGsgPSAwOyBrIDwgNDsgKytrICkKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YSA9ICggZGF0YSA8PCA4ICkgfCBrZXlbaisrXTsKKyAgICAgICAgICAgIGlmKCBqID49IGtleWJpdHMgKQorICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICB9CisgICAgICAgIGN0eC0+UFtpXSA9IFBbaV0gXiBkYXRhOworICAgIH0KKworICAgIGRhdGFsID0gMHgwMDAwMDAwMDsKKyAgICBkYXRhciA9IDB4MDAwMDAwMDA7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19CTE9XRklTSF9ST1VORFMgKyAyOyBpICs9IDIgKQorICAgIHsKKyAgICAgICAgYmxvd2Zpc2hfZW5jKCBjdHgsICZkYXRhbCwgJmRhdGFyICk7CisgICAgICAgIGN0eC0+UFtpXSA9IGRhdGFsOworICAgICAgICBjdHgtPlBbaSArIDFdID0gZGF0YXI7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IDQ7IGkrKyApCisgICAgeworICAgICAgIGZvciggaiA9IDA7IGogPCAyNTY7IGogKz0gMiApCisgICAgICAgeworICAgICAgICAgICAgYmxvd2Zpc2hfZW5jKCBjdHgsICZkYXRhbCwgJmRhdGFyICk7CisgICAgICAgICAgICBjdHgtPlNbaV1bal0gPSBkYXRhbDsKKyAgICAgICAgICAgIGN0eC0+U1tpXVtqICsgMV0gPSBkYXRhcjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEJsb3dmaXNoLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0gKQoreworICAgIHVpbnQzMl90IFgwLCBYMTsKKworICAgIEdFVF9VSU5UMzJfQkUoIFgwLCBpbnB1dCwgIDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBYMSwgaW5wdXQsICA0ICk7CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQgKQorICAgIHsKKyAgICAgICAgYmxvd2Zpc2hfZGVjKCBjdHgsICZYMCwgJlgxICk7CisgICAgfQorICAgIGVsc2UgLyogTUJFRFRMU19CTE9XRklTSF9FTkNSWVBUICovCisgICAgeworICAgICAgICBibG93ZmlzaF9lbmMoIGN0eCwgJlgwLCAmWDEgKTsKKyAgICB9CisKKyAgICBQVVRfVUlOVDMyX0JFKCBYMCwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIFgxLCBvdXRwdXQsICA0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKgorICogQmxvd2Zpc2gtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdOworCisgICAgaWYoIGxlbmd0aCAlIE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCB0ZW1wLCBpbnB1dCwgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkUgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIGlucHV0LCBvdXRwdXQgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFO2krKyApCisgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCBvdXRwdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtZW1jcHkoIGl2LCB0ZW1wLCBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRSApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgICAgICBvdXRwdXQgKz0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgICAgICBsZW5ndGggLT0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7IGkrKyApCisgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCBpbnB1dFtpXSBeIGl2W2ldICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIG91dHB1dCwgb3V0cHV0ICk7CisgICAgICAgICAgICBtZW1jcHkoIGl2LCBvdXRwdXQsIE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgICAgICAgIG91dHB1dCArPSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgICAgICAgIGxlbmd0aCAtPSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorLyoKKyAqIEJsb3dmaXNoIENGQiBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0KCBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaXZfb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2W01CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGM7CisgICAgc2l6ZV90IG4gPSAqaXZfb2ZmOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19CTE9XRklTSF9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgaXYsIGl2ICk7CisKKyAgICAgICAgICAgIGMgPSAqaW5wdXQrKzsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggYyBeIGl2W25dICk7CisgICAgICAgICAgICBpdltuXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworCisgICAgICAgICAgICBuID0gKCBuICsgMSApICUgTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG4gPT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoIGN0eCwgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBULCBpdiwgaXYgKTsKKworICAgICAgICAgICAgaXZbbl0gPSAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGl2W25dIF4gKmlucHV0KysgKTsKKworICAgICAgICAgICAgbiA9ICggbiArIDEgKSAlIE1CRURUTFNfQkxPV0ZJU0hfQkxPQ0tTSVpFOworICAgICAgICB9CisgICAgfQorCisgICAgKml2X29mZiA9IG47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorLyoKKyAqIEJsb3dmaXNoIENUUiBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0ciggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbmNfb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5vbmNlX2NvdW50ZXJbTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0cmVhbV9ibG9ja1tNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCBjLCBpOworICAgIHNpemVfdCBuID0gKm5jX29mZjsKKworICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgeworICAgICAgICBpZiggbiA9PSAwICkgeworICAgICAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoIGN0eCwgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBULCBub25jZV9jb3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1fYmxvY2sgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gTUJFRFRMU19CTE9XRklTSF9CTE9DS1NJWkU7IGkgPiAwOyBpLS0gKQorICAgICAgICAgICAgICAgIGlmKCArK25vbmNlX2NvdW50ZXJbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjID0gKmlucHV0Kys7CisgICAgICAgICpvdXRwdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSggYyBeIHN0cmVhbV9ibG9ja1tuXSApOworCisgICAgICAgIG4gPSAoIG4gKyAxICkgJSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRTsKKyAgICB9CisKKyAgICAqbmNfb2ZmID0gbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTWzRdWzI1Nl0gPSB7CisgICAgeyAgIDB4RDEzMTBCQTZMLCAweDk4REZCNUFDTCwgMHgyRkZENzJEQkwsIDB4RDAxQURGQjdMLAorICAgICAgICAweEI4RTFBRkVETCwgMHg2QTI2N0U5NkwsIDB4QkE3QzkwNDVMLCAweEYxMkM3Rjk5TCwKKyAgICAgICAgMHgyNEExOTk0N0wsIDB4QjM5MTZDRjdMLCAweDA4MDFGMkUyTCwgMHg4NThFRkMxNkwsCisgICAgICAgIDB4NjM2OTIwRDhMLCAweDcxNTc0RTY5TCwgMHhBNDU4RkVBM0wsIDB4RjQ5MzNEN0VMLAorICAgICAgICAweDBEOTU3NDhGTCwgMHg3MjhFQjY1OEwsIDB4NzE4QkNENThMLCAweDgyMTU0QUVFTCwKKyAgICAgICAgMHg3QjU0QTQxREwsIDB4QzI1QTU5QjVMLCAweDlDMzBENTM5TCwgMHgyQUYyNjAxM0wsCisgICAgICAgIDB4QzVEMUIwMjNMLCAweDI4NjA4NUYwTCwgMHhDQTQxNzkxOEwsIDB4QjhEQjM4RUZMLAorICAgICAgICAweDhFNzlEQ0IwTCwgMHg2MDNBMTgwRUwsIDB4NkM5RTBFOEJMLCAweEIwMUU4QTNFTCwKKyAgICAgICAgMHhENzE1NzdDMUwsIDB4QkQzMTRCMjdMLCAweDc4QUYyRkRBTCwgMHg1NTYwNUM2MEwsCisgICAgICAgIDB4RTY1NTI1RjNMLCAweEFBNTVBQjk0TCwgMHg1NzQ4OTg2MkwsIDB4NjNFODE0NDBMLAorICAgICAgICAweDU1Q0EzOTZBTCwgMHgyQUFCMTBCNkwsIDB4QjRDQzVDMzRMLCAweDExNDFFOENFTCwKKyAgICAgICAgMHhBMTU0ODZBRkwsIDB4N0M3MkU5OTNMLCAweEIzRUUxNDExTCwgMHg2MzZGQkMyQUwsCisgICAgICAgIDB4MkJBOUM1NURMLCAweDc0MTgzMUY2TCwgMHhDRTVDM0UxNkwsIDB4OUI4NzkzMUVMLAorICAgICAgICAweEFGRDZCQTMzTCwgMHg2QzI0Q0Y1Q0wsIDB4N0EzMjUzODFMLCAweDI4OTU4Njc3TCwKKyAgICAgICAgMHgzQjhGNDg5OEwsIDB4NkI0QkI5QUZMLCAweEM0QkZFODFCTCwgMHg2NjI4MjE5M0wsCisgICAgICAgIDB4NjFEODA5Q0NMLCAweEZCMjFBOTkxTCwgMHg0ODdDQUM2MEwsIDB4NURFQzgwMzJMLAorICAgICAgICAweEVGODQ1RDVETCwgMHhFOTg1NzVCMUwsIDB4REMyNjIzMDJMLCAweEVCNjUxQjg4TCwKKyAgICAgICAgMHgyMzg5M0U4MUwsIDB4RDM5NkFDQzVMLCAweDBGNkQ2RkYzTCwgMHg4M0Y0NDIzOUwsCisgICAgICAgIDB4MkUwQjQ0ODJMLCAweEE0ODQyMDA0TCwgMHg2OUM4RjA0QUwsIDB4OUUxRjlCNUVMLAorICAgICAgICAweDIxQzY2ODQyTCwgMHhGNkU5NkM5QUwsIDB4NjcwQzlDNjFMLCAweEFCRDM4OEYwTCwKKyAgICAgICAgMHg2QTUxQTBEMkwsIDB4RDg1NDJGNjhMLCAweDk2MEZBNzI4TCwgMHhBQjUxMzNBM0wsCisgICAgICAgIDB4NkVFRjBCNkNMLCAweDEzN0EzQkU0TCwgMHhCQTNCRjA1MEwsIDB4N0VGQjJBOThMLAorICAgICAgICAweEExRjE2NTFETCwgMHgzOUFGMDE3NkwsIDB4NjZDQTU5M0VMLCAweDgyNDMwRTg4TCwKKyAgICAgICAgMHg4Q0VFODYxOUwsIDB4NDU2RjlGQjRMLCAweDdEODRBNUMzTCwgMHgzQjhCNUVCRUwsCisgICAgICAgIDB4RTA2Rjc1RDhMLCAweDg1QzEyMDczTCwgMHg0MDFBNDQ5RkwsIDB4NTZDMTZBQTZMLAorICAgICAgICAweDRFRDNBQTYyTCwgMHgzNjNGNzcwNkwsIDB4MUJGRURGNzJMLCAweDQyOUIwMjNETCwKKyAgICAgICAgMHgzN0QwRDcyNEwsIDB4RDAwQTEyNDhMLCAweERCMEZFQUQzTCwgMHg0OUYxQzA5QkwsCisgICAgICAgIDB4MDc1MzcyQzlMLCAweDgwOTkxQjdCTCwgMHgyNUQ0NzlEOEwsIDB4RjZFOERFRjdMLAorICAgICAgICAweEUzRkU1MDFBTCwgMHhCNjc5NEMzQkwsIDB4OTc2Q0UwQkRMLCAweDA0QzAwNkJBTCwKKyAgICAgICAgMHhDMUE5NEZCNkwsIDB4NDA5RjYwQzRMLCAweDVFNUM5RUMyTCwgMHgxOTZBMjQ2M0wsCisgICAgICAgIDB4NjhGQjZGQUZMLCAweDNFNkM1M0I1TCwgMHgxMzM5QjJFQkwsIDB4M0I1MkVDNkZMLAorICAgICAgICAweDZERkM1MTFGTCwgMHg5QjMwOTUyQ0wsIDB4Q0M4MTQ1NDRMLCAweEFGNUVCRDA5TCwKKyAgICAgICAgMHhCRUUzRDAwNEwsIDB4REUzMzRBRkRMLCAweDY2MEYyODA3TCwgMHgxOTJFNEJCM0wsCisgICAgICAgIDB4QzBDQkE4NTdMLCAweDQ1Qzg3NDBGTCwgMHhEMjBCNUYzOUwsIDB4QjlEM0ZCREJMLAorICAgICAgICAweDU1NzlDMEJETCwgMHgxQTYwMzIwQUwsIDB4RDZBMTAwQzZMLCAweDQwMkM3Mjc5TCwKKyAgICAgICAgMHg2NzlGMjVGRUwsIDB4RkIxRkEzQ0NMLCAweDhFQTVFOUY4TCwgMHhEQjMyMjJGOEwsCisgICAgICAgIDB4M0M3NTE2REZMLCAweEZENjE2QjE1TCwgMHgyRjUwMUVDOEwsIDB4QUQwNTUyQUJMLAorICAgICAgICAweDMyM0RCNUZBTCwgMHhGRDIzODc2MEwsIDB4NTMzMTdCNDhMLCAweDNFMDBERjgyTCwKKyAgICAgICAgMHg5RTVDNTdCQkwsIDB4Q0E2RjhDQTBMLCAweDFBODc1NjJFTCwgMHhERjE3NjlEQkwsCisgICAgICAgIDB4RDU0MkE4RjZMLCAweDI4N0VGRkMzTCwgMHhBQzY3MzJDNkwsIDB4OEM0RjU1NzNMLAorICAgICAgICAweDY5NUIyN0IwTCwgMHhCQkNBNThDOEwsIDB4RTFGRkEzNURMLCAweEI4RjAxMUEwTCwKKyAgICAgICAgMHgxMEZBM0Q5OEwsIDB4RkQyMTgzQjhMLCAweDRBRkNCNTZDTCwgMHgyREQxRDM1QkwsCisgICAgICAgIDB4OUE1M0U0NzlMLCAweEI2Rjg0NTY1TCwgMHhEMjhFNDlCQ0wsIDB4NEJGQjk3OTBMLAorICAgICAgICAweEUxRERGMkRBTCwgMHhBNENCN0UzM0wsIDB4NjJGQjEzNDFMLCAweENFRTRDNkU4TCwKKyAgICAgICAgMHhFRjIwQ0FEQUwsIDB4MzY3NzRDMDFMLCAweEQwN0U5RUZFTCwgMHgyQkYxMUZCNEwsCisgICAgICAgIDB4OTVEQkRBNERMLCAweEFFOTA5MTk4TCwgMHhFQUFEOEU3MUwsIDB4NkI5M0Q1QTBMLAorICAgICAgICAweEQwOEVEMUQwTCwgMHhBRkM3MjVFMEwsIDB4OEUzQzVCMkZMLCAweDhFNzU5NEI3TCwKKyAgICAgICAgMHg4RkY2RTJGQkwsIDB4RjIxMjJCNjRMLCAweDg4ODhCODEyTCwgMHg5MDBERjAxQ0wsCisgICAgICAgIDB4NEZBRDVFQTBMLCAweDY4OEZDMzFDTCwgMHhEMUNGRjE5MUwsIDB4QjNBOEMxQURMLAorICAgICAgICAweDJGMkYyMjE4TCwgMHhCRTBFMTc3N0wsIDB4RUE3NTJERkVMLCAweDhCMDIxRkExTCwKKyAgICAgICAgMHhFNUEwQ0MwRkwsIDB4QjU2Rjc0RThMLCAweDE4QUNGM0Q2TCwgMHhDRTg5RTI5OUwsCisgICAgICAgIDB4QjRBODRGRTBMLCAweEZEMTNFMEI3TCwgMHg3Q0M0M0I4MUwsIDB4RDJBREE4RDlMLAorICAgICAgICAweDE2NUZBMjY2TCwgMHg4MDk1NzcwNUwsIDB4OTNDQzczMTRMLCAweDIxMUExNDc3TCwKKyAgICAgICAgMHhFNkFEMjA2NUwsIDB4NzdCNUZBODZMLCAweEM3NTQ0MkY1TCwgMHhGQjlEMzVDRkwsCisgICAgICAgIDB4RUJDREFGMENMLCAweDdCM0U4OUEwTCwgMHhENjQxMUJEM0wsIDB4QUUxRTdFNDlMLAorICAgICAgICAweDAwMjUwRTJETCwgMHgyMDcxQjM1RUwsIDB4MjI2ODAwQkJMLCAweDU3QjhFMEFGTCwKKyAgICAgICAgMHgyNDY0MzY5QkwsIDB4RjAwOUI5MUVMLCAweDU1NjM5MTFETCwgMHg1OURGQTZBQUwsCisgICAgICAgIDB4NzhDMTQzODlMLCAweEQ5NUE1MzdGTCwgMHgyMDdENUJBMkwsIDB4MDJFNUI5QzVMLAorICAgICAgICAweDgzMjYwMzc2TCwgMHg2Mjk1Q0ZBOUwsIDB4MTFDODE5NjhMLCAweDRFNzM0QTQxTCwKKyAgICAgICAgMHhCMzQ3MkRDQUwsIDB4N0IxNEE5NEFMLCAweDFCNTEwMDUyTCwgMHg5QTUzMjkxNUwsCisgICAgICAgIDB4RDYwRjU3M0ZMLCAweEJDOUJDNkU0TCwgMHgyQjYwQTQ3NkwsIDB4ODFFNjc0MDBMLAorICAgICAgICAweDA4QkE2RkI1TCwgMHg1NzFCRTkxRkwsIDB4RjI5NkVDNkJMLCAweDJBMEREOTE1TCwKKyAgICAgICAgMHhCNjYzNjUyMUwsIDB4RTdCOUY5QjZMLCAweEZGMzQwNTJFTCwgMHhDNTg1NTY2NEwsCisgICAgICAgIDB4NTNCMDJENURMLCAweEE5OUY4RkExTCwgMHgwOEJBNDc5OUwsIDB4NkU4NTA3NkFMICAgfSwKKyAgICB7ICAgMHg0QjdBNzBFOUwsIDB4QjVCMzI5NDRMLCAweERCNzUwOTJFTCwgMHhDNDE5MjYyM0wsCisgICAgICAgIDB4QUQ2RUE2QjBMLCAweDQ5QTdERjdETCwgMHg5Q0VFNjBCOEwsIDB4OEZFREIyNjZMLAorICAgICAgICAweEVDQUE4QzcxTCwgMHg2OTlBMTdGRkwsIDB4NTY2NDUyNkNMLCAweEMyQjE5RUUxTCwKKyAgICAgICAgMHgxOTM2MDJBNUwsIDB4NzUwOTRDMjlMLCAweEEwNTkxMzQwTCwgMHhFNDE4M0EzRUwsCisgICAgICAgIDB4M0Y1NDk4OUFMLCAweDVCNDI5RDY1TCwgMHg2QjhGRTRENkwsIDB4OTlGNzNGRDZMLAorICAgICAgICAweEExRDI5QzA3TCwgMHhFRkU4MzBGNUwsIDB4NEQyRDM4RTZMLCAweEYwMjU1REMxTCwKKyAgICAgICAgMHg0Q0REMjA4NkwsIDB4ODQ3MEVCMjZMLCAweDYzODJFOUM2TCwgMHgwMjFFQ0M1RUwsCisgICAgICAgIDB4MDk2ODZCM0ZMLCAweDNFQkFFRkM5TCwgMHgzQzk3MTgxNEwsIDB4NkI2QTcwQTFMLAorICAgICAgICAweDY4N0YzNTg0TCwgMHg1MkEwRTI4NkwsIDB4Qjc5QzUzMDVMLCAweEFBNTAwNzM3TCwKKyAgICAgICAgMHgzRTA3ODQxQ0wsIDB4N0ZERUFFNUNMLCAweDhFN0Q0NEVDTCwgMHg1NzE2RjJCOEwsCisgICAgICAgIDB4QjAzQURBMzdMLCAweEYwNTAwQzBETCwgMHhGMDFDMUYwNEwsIDB4MDIwMEIzRkZMLAorICAgICAgICAweEFFMENGNTFBTCwgMHgzQ0I1NzRCMkwsIDB4MjU4MzdBNThMLCAweERDMDkyMUJETCwKKyAgICAgICAgMHhEMTkxMTNGOUwsIDB4N0NBOTJGRjZMLCAweDk0MzI0NzczTCwgMHgyMkY1NDcwMUwsCisgICAgICAgIDB4M0FFNUU1ODFMLCAweDM3QzJEQURDTCwgMHhDOEI1NzYzNEwsIDB4OUFGM0REQTdMLAorICAgICAgICAweEE5NDQ2MTQ2TCwgMHgwRkQwMDMwRUwsIDB4RUNDOEM3M0VMLCAweEE0NzUxRTQxTCwKKyAgICAgICAgMHhFMjM4Q0Q5OUwsIDB4M0JFQTBFMkZMLCAweDMyODBCQkExTCwgMHgxODNFQjMzMUwsCisgICAgICAgIDB4NEU1NDhCMzhMLCAweDRGNkRCOTA4TCwgMHg2RjQyMEQwM0wsIDB4RjYwQTA0QkZMLAorICAgICAgICAweDJDQjgxMjkwTCwgMHgyNDk3N0M3OUwsIDB4NTY3OUIwNzJMLCAweEJDQUY4OUFGTCwKKyAgICAgICAgMHhERTlBNzcxRkwsIDB4RDk5MzA4MTBMLCAweEIzOEJBRTEyTCwgMHhEQ0NGM0YyRUwsCisgICAgICAgIDB4NTUxMjcyMUZMLCAweDJFNkI3MTI0TCwgMHg1MDFBRERFNkwsIDB4OUY4NENEODdMLAorICAgICAgICAweDdBNTg0NzE4TCwgMHg3NDA4REExN0wsIDB4QkM5RjlBQkNMLCAweEU5NEI3RDhDTCwKKyAgICAgICAgMHhFQzdBRUMzQUwsIDB4REI4NTFERkFMLCAweDYzMDk0MzY2TCwgMHhDNDY0QzNEMkwsCisgICAgICAgIDB4RUYxQzE4NDdMLCAweDMyMTVEOTA4TCwgMHhERDQzM0IzN0wsIDB4MjRDMkJBMTZMLAorICAgICAgICAweDEyQTE0RDQzTCwgMHgyQTY1QzQ1MUwsIDB4NTA5NDAwMDJMLCAweDEzM0FFNERETCwKKyAgICAgICAgMHg3MURGRjg5RUwsIDB4MTAzMTRFNTVMLCAweDgxQUM3N0Q2TCwgMHg1RjExMTk5QkwsCisgICAgICAgIDB4MDQzNTU2RjFMLCAweEQ3QTNDNzZCTCwgMHgzQzExMTgzQkwsIDB4NTkyNEE1MDlMLAorICAgICAgICAweEYyOEZFNkVETCwgMHg5N0YxRkJGQUwsIDB4OUVCQUJGMkNMLCAweDFFMTUzQzZFTCwKKyAgICAgICAgMHg4NkUzNDU3MEwsIDB4RUFFOTZGQjFMLCAweDg2MEU1RTBBTCwgMHg1QTNFMkFCM0wsCisgICAgICAgIDB4NzcxRkU3MUNMLCAweDRFM0QwNkZBTCwgMHgyOTY1RENCOUwsIDB4OTlFNzFEMEZMLAorICAgICAgICAweDgwM0U4OUQ2TCwgMHg1MjY2QzgyNUwsIDB4MkU0Q0M5NzhMLCAweDlDMTBCMzZBTCwKKyAgICAgICAgMHhDNjE1MEVCQUwsIDB4OTRFMkVBNzhMLCAweEE1RkMzQzUzTCwgMHgxRTBBMkRGNEwsCisgICAgICAgIDB4RjJGNzRFQTdMLCAweDM2MUQyQjNETCwgMHgxOTM5MjYwRkwsIDB4MTlDMjc5NjBMLAorICAgICAgICAweDUyMjNBNzA4TCwgMHhGNzEzMTJCNkwsIDB4RUJBREZFNkVMLCAweEVBQzMxRjY2TCwKKyAgICAgICAgMHhFM0JDNDU5NUwsIDB4QTY3QkM4ODNMLCAweEIxN0YzN0QxTCwgMHgwMThDRkYyOEwsCisgICAgICAgIDB4QzMzMkRERUZMLCAweEJFNkM1QUE1TCwgMHg2NTU4MjE4NUwsIDB4NjhBQjk4MDJMLAorICAgICAgICAweEVFQ0VBNTBGTCwgMHhEQjJGOTUzQkwsIDB4MkFFRjdEQURMLCAweDVCNkUyRjg0TCwKKyAgICAgICAgMHgxNTIxQjYyOEwsIDB4MjkwNzYxNzBMLCAweEVDREQ0Nzc1TCwgMHg2MTlGMTUxMEwsCisgICAgICAgIDB4MTNDQ0E4MzBMLCAweEVCNjFCRDk2TCwgMHgwMzM0RkUxRUwsIDB4QUEwMzYzQ0ZMLAorICAgICAgICAweEI1NzM1QzkwTCwgMHg0QzcwQTIzOUwsIDB4RDU5RTlFMEJMLCAweENCQUFERTE0TCwKKyAgICAgICAgMHhFRUNDODZCQ0wsIDB4NjA2MjJDQTdMLCAweDlDQUI1Q0FCTCwgMHhCMkYzODQ2RUwsCisgICAgICAgIDB4NjQ4QjFFQUZMLCAweDE5QkRGMENBTCwgMHhBMDIzNjlCOUwsIDB4NjU1QUJCNTBMLAorICAgICAgICAweDQwNjg1QTMyTCwgMHgzQzJBQjRCM0wsIDB4MzE5RUU5RDVMLCAweEMwMjFCOEY3TCwKKyAgICAgICAgMHg5QjU0MEIxOUwsIDB4ODc1RkEwOTlMLCAweDk1Rjc5OTdFTCwgMHg2MjNEN0RBOEwsCisgICAgICAgIDB4RjgzNzg4OUFMLCAweDk3RTMyRDc3TCwgMHgxMUVEOTM1RkwsIDB4MTY2ODEyODFMLAorICAgICAgICAweDBFMzU4ODI5TCwgMHhDN0U2MUZENkwsIDB4OTZERURGQTFMLCAweDc4NThCQTk5TCwKKyAgICAgICAgMHg1N0Y1ODRBNUwsIDB4MUIyMjcyNjNMLCAweDlCODNDM0ZGTCwgMHgxQUMyNDY5NkwsCisgICAgICAgIDB4Q0RCMzBBRUJMLCAweDUzMkUzMDU0TCwgMHg4RkQ5NDhFNEwsIDB4NkRCQzMxMjhMLAorICAgICAgICAweDU4RUJGMkVGTCwgMHgzNEM2RkZFQUwsIDB4RkUyOEVENjFMLCAweEVFN0MzQzczTCwKKyAgICAgICAgMHg1RDRBMTREOUwsIDB4RTg2NEI3RTNMLCAweDQyMTA1RDE0TCwgMHgyMDNFMTNFMEwsCisgICAgICAgIDB4NDVFRUUyQjZMLCAweEEzQUFBQkVBTCwgMHhEQjZDNEYxNUwsIDB4RkFDQjRGRDBMLAorICAgICAgICAweEM3NDJGNDQyTCwgMHhFRjZBQkJCNUwsIDB4NjU0RjNCMURMLCAweDQxQ0QyMTA1TCwKKyAgICAgICAgMHhEODFFNzk5RUwsIDB4ODY4NTREQzdMLCAweEU0NEI0NzZBTCwgMHgzRDgxNjI1MEwsCisgICAgICAgIDB4Q0Y2MkExRjJMLCAweDVCOEQyNjQ2TCwgMHhGQzg4ODNBMEwsIDB4QzFDN0I2QTNMLAorICAgICAgICAweDdGMTUyNEMzTCwgMHg2OUNCNzQ5MkwsIDB4NDc4NDhBMEJMLCAweDU2OTJCMjg1TCwKKyAgICAgICAgMHgwOTVCQkYwMEwsIDB4QUQxOTQ4OURMLCAweDE0NjJCMTc0TCwgMHgyMzgyMEUwMEwsCisgICAgICAgIDB4NTg0MjhEMkFMLCAweDBDNTVGNUVBTCwgMHgxREFERjQzRUwsIDB4MjMzRjcwNjFMLAorICAgICAgICAweDMzNzJGMDkyTCwgMHg4RDkzN0U0MUwsIDB4RDY1RkVDRjFMLCAweDZDMjIzQkRCTCwKKyAgICAgICAgMHg3Q0RFMzc1OUwsIDB4Q0JFRTc0NjBMLCAweDQwODVGMkE3TCwgMHhDRTc3MzI2RUwsCisgICAgICAgIDB4QTYwNzgwODRMLCAweDE5Rjg1MDlFTCwgMHhFOEVGRDg1NUwsIDB4NjFEOTk3MzVMLAorICAgICAgICAweEE5NjlBN0FBTCwgMHhDNTBDMDZDMkwsIDB4NUEwNEFCRkNMLCAweDgwMEJDQURDTCwKKyAgICAgICAgMHg5RTQ0N0EyRUwsIDB4QzM0NTM0ODRMLCAweEZERDU2NzA1TCwgMHgwRTFFOUVDOUwsCisgICAgICAgIDB4REI3M0RCRDNMLCAweDEwNTU4OENETCwgMHg2NzVGREE3OUwsIDB4RTM2NzQzNDBMLAorICAgICAgICAweEM1QzQzNDY1TCwgMHg3MTNFMzhEOEwsIDB4M0QyOEY4OUVMLCAweEYxNkRGRjIwTCwKKyAgICAgICAgMHgxNTNFMjFFN0wsIDB4OEZCMDNENEFMLCAweEU2RTM5RjJCTCwgMHhEQjgzQURGN0wgICB9LAorICAgIHsgICAweEU5M0Q1QTY4TCwgMHg5NDgxNDBGN0wsIDB4RjY0QzI2MUNMLCAweDk0NjkyOTM0TCwKKyAgICAgICAgMHg0MTE1MjBGN0wsIDB4NzYwMkQ0RjdMLCAweEJDRjQ2QjJFTCwgMHhENEEyMDA2OEwsCisgICAgICAgIDB4RDQwODI0NzFMLCAweDMzMjBGNDZBTCwgMHg0M0I3RDRCN0wsIDB4NTAwMDYxQUZMLAorICAgICAgICAweDFFMzlGNjJFTCwgMHg5NzI0NDU0NkwsIDB4MTQyMTRGNzRMLCAweEJGOEI4ODQwTCwKKyAgICAgICAgMHg0RDk1RkMxREwsIDB4OTZCNTkxQUZMLCAweDcwRjREREQzTCwgMHg2NkEwMkY0NUwsCisgICAgICAgIDB4QkZCQzA5RUNMLCAweDAzQkQ5Nzg1TCwgMHg3RkFDNkREMEwsIDB4MzFDQjg1MDRMLAorICAgICAgICAweDk2RUIyN0IzTCwgMHg1NUZEMzk0MUwsIDB4REEyNTQ3RTZMLCAweEFCQ0EwQTlBTCwKKyAgICAgICAgMHgyODUwNzgyNUwsIDB4NTMwNDI5RjRMLCAweDBBMkM4NkRBTCwgMHhFOUI2NkRGQkwsCisgICAgICAgIDB4NjhEQzE0NjJMLCAweEQ3NDg2OTAwTCwgMHg2ODBFQzBBNEwsIDB4MjdBMThERUVMLAorICAgICAgICAweDRGM0ZGRUEyTCwgMHhFODg3QUQ4Q0wsIDB4QjU4Q0UwMDZMLCAweDdBRjRENkI2TCwKKyAgICAgICAgMHhBQUNFMUU3Q0wsIDB4RDMzNzVGRUNMLCAweENFNzhBMzk5TCwgMHg0MDZCMkE0MkwsCisgICAgICAgIDB4MjBGRTlFMzVMLCAweEQ5RjM4NUI5TCwgMHhFRTM5RDdBQkwsIDB4M0IxMjRFOEJMLAorICAgICAgICAweDFEQzlGQUY3TCwgMHg0QjZEMTg1NkwsIDB4MjZBMzY2MzFMLCAweEVBRTM5N0IyTCwKKyAgICAgICAgMHgzQTZFRkE3NEwsIDB4REQ1QjQzMzJMLCAweDY4NDFFN0Y3TCwgMHhDQTc4MjBGQkwsCisgICAgICAgIDB4RkIwQUY1NEVMLCAweEQ4RkVCMzk3TCwgMHg0NTQwNTZBQ0wsIDB4QkE0ODk1MjdMLAorICAgICAgICAweDU1NTMzQTNBTCwgMHgyMDgzOEQ4N0wsIDB4RkU2QkE5QjdMLCAweEQwOTY5NTRCTCwKKyAgICAgICAgMHg1NUE4NjdCQ0wsIDB4QTExNTlBNThMLCAweENDQTkyOTYzTCwgMHg5OUUxREIzM0wsCisgICAgICAgIDB4QTYyQTRBNTZMLCAweDNGMzEyNUY5TCwgMHg1RUY0N0UxQ0wsIDB4OTAyOTMxN0NMLAorICAgICAgICAweEZERjhFODAyTCwgMHgwNDI3MkY3MEwsIDB4ODBCQjE1NUNMLCAweDA1MjgyQ0UzTCwKKyAgICAgICAgMHg5NUMxMTU0OEwsIDB4RTRDNjZEMjJMLCAweDQ4QzExMzNGTCwgMHhDNzBGODZEQ0wsCisgICAgICAgIDB4MDdGOUM5RUVMLCAweDQxMDQxRjBGTCwgMHg0MDQ3NzlBNEwsIDB4NUQ4ODZFMTdMLAorICAgICAgICAweDMyNUY1MUVCTCwgMHhENTlCQzBEMUwsIDB4RjJCQ0MxOEZMLCAweDQxMTEzNTY0TCwKKyAgICAgICAgMHgyNTdCNzgzNEwsIDB4NjAyQTlDNjBMLCAweERGRjhFOEEzTCwgMHgxRjYzNkMxQkwsCisgICAgICAgIDB4MEUxMkI0QzJMLCAweDAyRTEzMjlFTCwgMHhBRjY2NEZEMUwsIDB4Q0FEMTgxMTVMLAorICAgICAgICAweDZCMjM5NUUwTCwgMHgzMzNFOTJFMUwsIDB4M0IyNDBCNjJMLCAweEVFQkVCOTIyTCwKKyAgICAgICAgMHg4NUIyQTIwRUwsIDB4RTZCQTBEOTlMLCAweERFNzIwQzhDTCwgMHgyREEyRjcyOEwsCisgICAgICAgIDB4RDAxMjc4NDVMLCAweDk1Qjc5NEZETCwgMHg2NDdEMDg2MkwsIDB4RTdDQ0Y1RjBMLAorICAgICAgICAweDU0NDlBMzZGTCwgMHg4NzdENDhGQUwsIDB4QzM5REZEMjdMLCAweEYzM0U4RDFFTCwKKyAgICAgICAgMHgwQTQ3NjM0MUwsIDB4OTkyRUZGNzRMLCAweDNBNkY2RUFCTCwgMHhGNEY4RkQzN0wsCisgICAgICAgIDB4QTgxMkRDNjBMLCAweEExRUJEREY4TCwgMHg5OTFCRTE0Q0wsIDB4REI2RTZCMERMLAorICAgICAgICAweEM2N0I1NTEwTCwgMHg2RDY3MkMzN0wsIDB4Mjc2NUQ0M0JMLCAweERDRDBFODA0TCwKKyAgICAgICAgMHhGMTI5MERDN0wsIDB4Q0MwMEZGQTNMLCAweEI1MzkwRjkyTCwgMHg2OTBGRUQwQkwsCisgICAgICAgIDB4NjY3QjlGRkJMLCAweENFREI3RDlDTCwgMHhBMDkxQ0YwQkwsIDB4RDkxNTVFQTNMLAorICAgICAgICAweEJCMTMyRjg4TCwgMHg1MTVCQUQyNEwsIDB4N0I5NDc5QkZMLCAweDc2M0JENkVCTCwKKyAgICAgICAgMHgzNzM5MkVCM0wsIDB4Q0MxMTU5NzlMLCAweDgwMjZFMjk3TCwgMHhGNDJFMzEyREwsCisgICAgICAgIDB4Njg0MkFEQTdMLCAweEM2NkEyQjNCTCwgMHgxMjc1NENDQ0wsIDB4NzgyRUYxMUNMLAorICAgICAgICAweDZBMTI0MjM3TCwgMHhCNzkyNTFFN0wsIDB4MDZBMUJCRTZMLCAweDRCRkI2MzUwTCwKKyAgICAgICAgMHgxQTZCMTAxOEwsIDB4MTFDQUVERkFMLCAweDNEMjVCREQ4TCwgMHhFMkUxQzNDOUwsCisgICAgICAgIDB4NDQ0MjE2NTlMLCAweDBBMTIxMzg2TCwgMHhEOTBDRUM2RUwsIDB4RDVBQkVBMkFMLAorICAgICAgICAweDY0QUY2NzRFTCwgMHhEQTg2QTg1RkwsIDB4QkVCRkU5ODhMLCAweDY0RTRDM0ZFTCwKKyAgICAgICAgMHg5REJDODA1N0wsIDB4RjBGN0MwODZMLCAweDYwNzg3QkY4TCwgMHg2MDAzNjA0REwsCisgICAgICAgIDB4RDFGRDgzNDZMLCAweEY2MzgxRkIwTCwgMHg3NzQ1QUUwNEwsIDB4RDczNkZDQ0NMLAorICAgICAgICAweDgzNDI2QjMzTCwgMHhGMDFFQUI3MUwsIDB4QjA4MDQxODdMLCAweDNDMDA1RTVGTCwKKyAgICAgICAgMHg3N0EwNTdCRUwsIDB4QkRFOEFFMjRMLCAweDU1NDY0Mjk5TCwgMHhCRjU4MkU2MUwsCisgICAgICAgIDB4NEU1OEY0OEZMLCAweEYyRERGREEyTCwgMHhGNDc0RUYzOEwsIDB4ODc4OUJEQzJMLAorICAgICAgICAweDUzNjZGOUMzTCwgMHhDOEIzOEU3NEwsIDB4QjQ3NUYyNTVMLCAweDQ2RkNEOUI5TCwKKyAgICAgICAgMHg3QUVCMjY2MUwsIDB4OEIxRERGODRMLCAweDg0NkEwRTc5TCwgMHg5MTVGOTVFMkwsCisgICAgICAgIDB4NDY2RTU5OEVMLCAweDIwQjQ1NzcwTCwgMHg4Q0Q1NTU5MUwsIDB4QzkwMkRFNENMLAorICAgICAgICAweEI5MEJBQ0UxTCwgMHhCQjgyMDVEMEwsIDB4MTFBODYyNDhMLCAweDc1NzRBOTlFTCwKKyAgICAgICAgMHhCNzdGMTlCNkwsIDB4RTBBOURDMDlMLCAweDY2MkQwOUExTCwgMHhDNDMyNDYzM0wsCisgICAgICAgIDB4RTg1QTFGMDJMLCAweDA5RjBCRThDTCwgMHg0QTk5QTAyNUwsIDB4MUQ2RUZFMTBMLAorICAgICAgICAweDFBQjkzRDFETCwgMHgwQkE1QTRERkwsIDB4QTE4NkYyMEZMLCAweDI4NjhGMTY5TCwKKyAgICAgICAgMHhEQ0I3REE4M0wsIDB4NTczOTA2RkVMLCAweEExRTJDRTlCTCwgMHg0RkNEN0Y1MkwsCisgICAgICAgIDB4NTAxMTVFMDFMLCAweEE3MDY4M0ZBTCwgMHhBMDAyQjVDNEwsIDB4MERFNkQwMjdMLAorICAgICAgICAweDlBRjg4QzI3TCwgMHg3NzNGODY0MUwsIDB4QzM2MDRDMDZMLCAweDYxQTgwNkI1TCwKKyAgICAgICAgMHhGMDE3N0EyOEwsIDB4QzBGNTg2RTBMLCAweDAwNjA1OEFBTCwgMHgzMERDN0Q2MkwsCisgICAgICAgIDB4MTFFNjlFRDdMLCAweDIzMzhFQTYzTCwgMHg1M0MyREQ5NEwsIDB4QzJDMjE2MzRMLAorICAgICAgICAweEJCQ0JFRTU2TCwgMHg5MEJDQjZERUwsIDB4RUJGQzdEQTFMLCAweENFNTkxRDc2TCwKKyAgICAgICAgMHg2RjA1RTQwOUwsIDB4NEI3QzAxODhMLCAweDM5NzIwQTNETCwgMHg3QzkyN0MyNEwsCisgICAgICAgIDB4ODZFMzcyNUZMLCAweDcyNEQ5REI5TCwgMHgxQUMxNUJCNEwsIDB4RDM5RUI4RkNMLAorICAgICAgICAweEVENTQ1NTc4TCwgMHgwOEZDQTVCNUwsIDB4RDgzRDdDRDNMLCAweDREQUQwRkM0TCwKKyAgICAgICAgMHgxRTUwRUY1RUwsIDB4QjE2MUU2RjhMLCAweEEyODUxNEQ5TCwgMHg2QzUxMTMzQ0wsCisgICAgICAgIDB4NkZENUM3RTdMLCAweDU2RTE0RUM0TCwgMHgzNjJBQkZDRUwsIDB4RERDNkM4MzdMLAorICAgICAgICAweEQ3OUEzMjM0TCwgMHg5MjYzODIxMkwsIDB4NjcwRUZBOEVMLCAweDQwNjAwMEUwTCAgfSwKKyAgICB7ICAgMHgzQTM5Q0UzN0wsIDB4RDNGQUY1Q0ZMLCAweEFCQzI3NzM3TCwgMHg1QUM1MkQxQkwsCisgICAgICAgIDB4NUNCMDY3OUVMLCAweDRGQTMzNzQyTCwgMHhEMzgyMjc0MEwsIDB4OTlCQzlCQkVMLAorICAgICAgICAweEQ1MTE4RTlETCwgMHhCRjBGNzMxNUwsIDB4RDYyRDFDN0VMLCAweEM3MDBDNDdCTCwKKyAgICAgICAgMHhCNzhDMUI2QkwsIDB4MjFBMTkwNDVMLCAweEIyNkVCMUJFTCwgMHg2QTM2NkVCNEwsCisgICAgICAgIDB4NTc0OEFCMkZMLCAweEJDOTQ2RTc5TCwgMHhDNkEzNzZEMkwsIDB4NjU0OUMyQzhMLAorICAgICAgICAweDUzMEZGOEVFTCwgMHg0NjhEREU3REwsIDB4RDU3MzBBMURMLCAweDRDRDA0REM2TCwKKyAgICAgICAgMHgyOTM5QkJEQkwsIDB4QTlCQTQ2NTBMLCAweEFDOTUyNkU4TCwgMHhCRTVFRTMwNEwsCisgICAgICAgIDB4QTFGQUQ1RjBMLCAweDZBMkQ1MTlBTCwgMHg2M0VGOENFMkwsIDB4OUE4NkVFMjJMLAorICAgICAgICAweEMwODlDMkI4TCwgMHg0MzI0MkVGNkwsIDB4QTUxRTAzQUFMLCAweDlDRjJEMEE0TCwKKyAgICAgICAgMHg4M0MwNjFCQUwsIDB4OUJFOTZBNERMLCAweDhGRTUxNTUwTCwgMHhCQTY0NUJENkwsCisgICAgICAgIDB4MjgyNkEyRjlMLCAweEE3M0EzQUUxTCwgMHg0QkE5OTU4NkwsIDB4RUY1NTYyRTlMLAorICAgICAgICAweEM3MkZFRkQzTCwgMHhGNzUyRjdEQUwsIDB4M0YwNDZGNjlMLCAweDc3RkEwQTU5TCwKKyAgICAgICAgMHg4MEU0QTkxNUwsIDB4ODdCMDg2MDFMLCAweDlCMDlFNkFETCwgMHgzQjNFRTU5M0wsCisgICAgICAgIDB4RTk5MEZENUFMLCAweDlFMzRENzk3TCwgMHgyQ0YwQjdEOUwsIDB4MDIyQjhCNTFMLAorICAgICAgICAweDk2RDVBQzNBTCwgMHgwMTdEQTY3REwsIDB4RDFDRjNFRDZMLCAweDdDN0QyRDI4TCwKKyAgICAgICAgMHgxRjlGMjVDRkwsIDB4QURGMkI4OUJMLCAweDVBRDZCNDcyTCwgMHg1QTg4RjU0Q0wsCisgICAgICAgIDB4RTAyOUFDNzFMLCAweEUwMTlBNUU2TCwgMHg0N0IwQUNGREwsIDB4RUQ5M0ZBOUJMLAorICAgICAgICAweEU4RDNDNDhETCwgMHgyODNCNTdDQ0wsIDB4RjhENTY2MjlMLCAweDc5MTMyRTI4TCwKKyAgICAgICAgMHg3ODVGMDE5MUwsIDB4RUQ3NTYwNTVMLCAweEY3OTYwRTQ0TCwgMHhFM0QzNUU4Q0wsCisgICAgICAgIDB4MTUwNTZERDRMLCAweDg4RjQ2REJBTCwgMHgwM0ExNjEyNUwsIDB4MDU2NEYwQkRMLAorICAgICAgICAweEMzRUI5RTE1TCwgMHgzQzkwNTdBMkwsIDB4OTcyNzFBRUNMLCAweEE5M0EwNzJBTCwKKyAgICAgICAgMHgxQjNGNkQ5QkwsIDB4MUU2MzIxRjVMLCAweEY1OUM2NkZCTCwgMHgyNkRDRjMxOUwsCisgICAgICAgIDB4NzUzM0Q5MjhMLCAweEIxNTVGREY1TCwgMHgwMzU2MzQ4MkwsIDB4OEFCQTNDQkJMLAorICAgICAgICAweDI4NTE3NzExTCwgMHhDMjBBRDlGOEwsIDB4QUJDQzUxNjdMLCAweENDQUQ5MjVGTCwKKyAgICAgICAgMHg0REU4MTc1MUwsIDB4MzgzMERDOEVMLCAweDM3OUQ1ODYyTCwgMHg5MzIwRjk5MUwsCisgICAgICAgIDB4RUE3QTkwQzJMLCAweEZCM0U3QkNFTCwgMHg1MTIxQ0U2NEwsIDB4Nzc0RkJFMzJMLAorICAgICAgICAweEE4QjZFMzdFTCwgMHhDMzI5M0Q0NkwsIDB4NDhERTUzNjlMLCAweDY0MTNFNjgwTCwKKyAgICAgICAgMHhBMkFFMDgxMEwsIDB4REQ2REIyMjRMLCAweDY5ODUyREZETCwgMHgwOTA3MjE2NkwsCisgICAgICAgIDB4QjM5QTQ2MEFMLCAweDY0NDVDMERETCwgMHg1ODZDREVDRkwsIDB4MUMyMEM4QUVMLAorICAgICAgICAweDVCQkVGN0RETCwgMHgxQjU4OEQ0MEwsIDB4Q0NEMjAxN0ZMLCAweDZCQjRFM0JCTCwKKyAgICAgICAgMHhEREEyNkE3RUwsIDB4M0E1OUZGNDVMLCAweDNFMzUwQTQ0TCwgMHhCQ0I0Q0RENUwsCisgICAgICAgIDB4NzJFQUNFQThMLCAweEZBNjQ4NEJCTCwgMHg4RDY2MTJBRUwsIDB4QkYzQzZGNDdMLAorICAgICAgICAweEQyOUJFNDYzTCwgMHg1NDJGNUQ5RUwsIDB4QUVDMjc3MUJMLCAweEY2NEU2MzcwTCwKKyAgICAgICAgMHg3NDBFMEQ4REwsIDB4RTc1QjEzNTdMLCAweEY4NzIxNjcxTCwgMHhBRjUzN0Q1REwsCisgICAgICAgIDB4NDA0MENCMDhMLCAweDRFQjRFMkNDTCwgMHgzNEQyNDY2QUwsIDB4MDExNUFGODRMLAorICAgICAgICAweEUxQjAwNDI4TCwgMHg5NTk4M0ExREwsIDB4MDZCODlGQjRMLCAweENFNkVBMDQ4TCwKKyAgICAgICAgMHg2RjNGM0I4MkwsIDB4MzUyMEFCODJMLCAweDAxMUExRDRCTCwgMHgyNzcyMjdGOEwsCisgICAgICAgIDB4NjExNTYwQjFMLCAweEU3OTMzRkRDTCwgMHhCQjNBNzkyQkwsIDB4MzQ0NTI1QkRMLAorICAgICAgICAweEEwODgzOUUxTCwgMHg1MUNFNzk0QkwsIDB4MkYzMkM5QjdMLCAweEEwMUZCQUM5TCwKKyAgICAgICAgMHhFMDFDQzg3RUwsIDB4QkNDN0QxRjZMLCAweENGMDExMUMzTCwgMHhBMUU4QUFDN0wsCisgICAgICAgIDB4MUE5MDg3NDlMLCAweEQ0NEZCRDlBTCwgMHhEMERBREVDQkwsIDB4RDUwQURBMzhMLAorICAgICAgICAweDAzMzlDMzJBTCwgMHhDNjkxMzY2N0wsIDB4OERGOTMxN0NMLCAweEUwQjEyQjRGTCwKKyAgICAgICAgMHhGNzlFNTlCN0wsIDB4NDNGNUJCM0FMLCAweEYyRDUxOUZGTCwgMHgyN0Q5NDU5Q0wsCisgICAgICAgIDB4QkY5NzIyMkNMLCAweDE1RTZGQzJBTCwgMHgwRjkxRkM3MUwsIDB4OUI5NDE1MjVMLAorICAgICAgICAweEZBRTU5MzYxTCwgMHhDRUI2OUNFQkwsIDB4QzJBODY0NTlMLCAweDEyQkFBOEQxTCwKKyAgICAgICAgMHhCNkMxMDc1RUwsIDB4RTMwNTZBMENMLCAweDEwRDI1MDY1TCwgMHhDQjAzQTQ0MkwsCisgICAgICAgIDB4RTBFQzZFMEVMLCAweDE2OThEQjNCTCwgMHg0Qzk4QTBCRUwsIDB4MzI3OEU5NjRMLAorICAgICAgICAweDlGMUY5NTMyTCwgMHhFMEQzOTJERkwsIDB4RDNBMDM0MkJMLCAweDg5NzFGMjFFTCwKKyAgICAgICAgMHgxQjBBNzQ0MUwsIDB4NEJBMzM0OENMLCAweEM1QkU3MTIwTCwgMHhDMzc2MzJEOEwsCisgICAgICAgIDB4REYzNTlGOERMLCAweDlCOTkyRjJFTCwgMHhFNjBCNkY0N0wsIDB4MEZFM0YxMURMLAorICAgICAgICAweEU1NENEQTU0TCwgMHgxRURBRDg5MUwsIDB4Q0U2Mjc5Q0ZMLCAweENEM0U3RTZGTCwKKyAgICAgICAgMHgxNjE4QjE2NkwsIDB4RkQyQzFEMDVMLCAweDg0OEZEMkM1TCwgMHhGNkZCMjI5OUwsCisgICAgICAgIDB4RjUyM0YzNTdMLCAweEE2MzI3NjIzTCwgMHg5M0E4MzUzMUwsIDB4NTZDQ0NEMDJMLAorICAgICAgICAweEFDRjA4MTYyTCwgMHg1QTc1RUJCNUwsIDB4NkUxNjM2OTdMLCAweDg4RDI3M0NDTCwKKyAgICAgICAgMHhERTk2NjI5MkwsIDB4ODFCOTQ5RDBMLCAweDRDNTA5MDFCTCwgMHg3MUM2NTYxNEwsCisgICAgICAgIDB4RTZDNkM3QkRMLCAweDMyN0ExNDBBTCwgMHg0NUUxRDAwNkwsIDB4QzNGMjdCOUFMLAorICAgICAgICAweEM5QUE1M0ZETCwgMHg2MkE4MEYwMEwsIDB4QkIyNUJGRTJMLCAweDM1QkREMkY2TCwKKyAgICAgICAgMHg3MTEyNjkwNUwsIDB4QjIwNDAyMjJMLCAweEI2Q0JDRjdDTCwgMHhDRDc2OUMyQkwsCisgICAgICAgIDB4NTMxMTNFQzBMLCAweDE2NDBFM0QzTCwgMHgzOEFCQkQ2MEwsIDB4MjU0N0FERjBMLAorICAgICAgICAweEJBMzgyMDlDTCwgMHhGNzQ2Q0U3NkwsIDB4NzdBRkExQzVMLCAweDIwNzU2MDYwTCwKKyAgICAgICAgMHg4NUNCRkU0RUwsIDB4OEFFODhERDhMLCAweDdBQUFGOUIwTCwgMHg0Q0Y5QUE3RUwsCisgICAgICAgIDB4MTk0OEMyNUNMLCAweDAyRkI4QThDTCwgMHgwMUMzNkFFNEwsIDB4RDZFQkUxRjlMLAorICAgICAgICAweDkwRDRGODY5TCwgMHhBNjVDREVBMEwsIDB4M0YwOTI1MkRMLCAweEMyMDhFNjlGTCwKKyAgICAgICAgMHhCNzRFNjEzMkwsIDB4Q0U3N0UyNUJMLCAweDU3OEZERkUzTCwgMHgzQUMzNzJFNkwgIH0KK307CisKKyNlbmRpZiAvKiAhTUJFRFRMU19CTE9XRklTSF9BTFQgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0JMT1dGSVNIX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NhbWVsbGlhLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jYW1lbGxpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNmY5NmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jYW1lbGxpYS5jCkBAIC0wLDAgKzEsMTA3MiBAQAorLyoKKyAqICBDYW1lbGxpYSBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgQ2FtZWxsaWEgYmxvY2sgY2lwaGVyIHdhcyBkZXNpZ25lZCBieSBOVFQgYW5kIE1pdHN1YmlzaGkgRWxlY3RyaWMKKyAqICBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgaHR0cDovL2luZm8uaXNsLm50dC5jby5qcC9jcnlwdC9lbmcvY2FtZWxsaWEvZGwvMDFlc3BlYy5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2NhbWVsbGlhLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciopdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdFVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICAgICAgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBQVVRfVUlOVDMyX0JFCisjZGVmaW5lIFBVVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAyNCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDE2ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSAgICAgICApOyAgICAgICBcCit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgU0lHTUFfQ0hBUlNbNl1bOF0gPQoreworICAgIHsgMHhhMCwgMHg5ZSwgMHg2NiwgMHg3ZiwgMHgzYiwgMHhjYywgMHg5MCwgMHg4YiB9LAorICAgIHsgMHhiNiwgMHg3YSwgMHhlOCwgMHg1OCwgMHg0YywgMHhhYSwgMHg3MywgMHhiMiB9LAorICAgIHsgMHhjNiwgMHhlZiwgMHgzNywgMHgyZiwgMHhlOSwgMHg0ZiwgMHg4MiwgMHhiZSB9LAorICAgIHsgMHg1NCwgMHhmZiwgMHg1MywgMHhhNSwgMHhmMSwgMHhkMywgMHg2ZiwgMHgxYyB9LAorICAgIHsgMHgxMCwgMHhlNSwgMHgyNywgMHhmYSwgMHhkZSwgMHg2OCwgMHgyZCwgMHgxZCB9LAorICAgIHsgMHhiMCwgMHg1NiwgMHg4OCwgMHhjMiwgMHhiMywgMHhlNiwgMHhjMSwgMHhmZCB9Cit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWSkKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgRlNiWzI1Nl0gPQoreworICAgIDExMiwxMzAsIDQ0LDIzNiwxNzksIDM5LDE5MiwyMjksMjI4LDEzMywgODcsIDUzLDIzNCwgMTIsMTc0LCA2NSwKKyAgICAgMzUsMjM5LDEwNywxNDcsIDY5LCAyNSwxNjUsIDMzLDIzNywgMTQsIDc5LCA3OCwgMjksMTAxLDE0NiwxODksCisgICAgMTM0LDE4NCwxNzUsMTQzLDEyNCwyMzUsIDMxLDIwNiwgNjIsIDQ4LDIyMCwgOTUsIDk0LDE5NywgMTEsIDI2LAorICAgIDE2NiwyMjUsIDU3LDIwMiwyMTMsIDcxLCA5MywgNjEsMjE3LCAgMSwgOTAsMjE0LCA4MSwgODYsMTA4LCA3NywKKyAgICAxMzksIDEzLDE1NCwxMDIsMjUxLDIwNCwxNzYsIDQ1LDExNiwgMTgsIDQzLCAzMiwyNDAsMTc3LDEzMiwxNTMsCisgICAgMjIzLCA3NiwyMDMsMTk0LCA1MiwxMjYsMTE4LCAgNSwxMDksMTgzLDE2OSwgNDksMjA5LCAyMywgIDQsMjE1LAorICAgICAyMCwgODgsIDU4LCA5NywyMjIsIDI3LCAxNywgMjgsIDUwLCAxNSwxNTYsIDIyLCA4MywgMjQsMjQyLCAzNCwKKyAgICAyNTQsIDY4LDIwNywxNzgsMTk1LDE4MSwxMjIsMTQ1LCAzNiwgIDgsMjMyLDE2OCwgOTYsMjUyLDEwNSwgODAsCisgICAgMTcwLDIwOCwxNjAsMTI1LDE2MSwxMzcsIDk4LDE1MSwgODQsIDkxLCAzMCwxNDksMjI0LDI1NSwxMDAsMjEwLAorICAgICAxNiwxOTYsICAwLCA3MiwxNjMsMjQ3LDExNywyMTksMTM4LCAgMywyMzAsMjE4LCAgOSwgNjMsMjIxLDE0OCwKKyAgICAxMzUsIDkyLDEzMSwgIDIsMjA1LCA3NCwxNDQsIDUxLDExNSwxMDMsMjQ2LDI0MywxNTcsMTI3LDE5MSwyMjYsCisgICAgIDgyLDE1NSwyMTYsIDM4LDIwMCwgNTUsMTk4LCA1OSwxMjksMTUwLDExMSwgNzUsIDE5LDE5MCwgOTksIDQ2LAorICAgIDIzMywxMjEsMTY3LDE0MCwxNTksMTEwLDE4OCwxNDIsIDQxLDI0NSwyNDksMTgyLCA0NywyNTMsMTgwLCA4OSwKKyAgICAxMjAsMTUyLCAgNiwxMDYsMjMxLCA3MCwxMTMsMTg2LDIxMiwgMzcsMTcxLCA2NiwxMzYsMTYyLDE0MSwyNTAsCisgICAgMTE0LCAgNywxODUsIDg1LDI0OCwyMzgsMTcyLCAxMCwgNTQsIDczLCA0MiwxMDQsIDYwLCA1NiwyNDEsMTY0LAorICAgICA2NCwgNDAsMjExLDEyMywxODcsMjAxLCA2NywxOTMsIDIxLDIyNywxNzMsMjQ0LDExOSwxOTksMTI4LDE1OAorfTsKKworI2RlZmluZSBTQk9YMShuKSBGU2JbKG4pXQorI2RlZmluZSBTQk9YMihuKSAodW5zaWduZWQgY2hhcikoKEZTYlsobildID4+IDcgXiBGU2JbKG4pXSA8PCAxKSAmIDB4ZmYpCisjZGVmaW5lIFNCT1gzKG4pICh1bnNpZ25lZCBjaGFyKSgoRlNiWyhuKV0gPj4gMSBeIEZTYlsobildIDw8IDcpICYgMHhmZikKKyNkZWZpbmUgU0JPWDQobikgRlNiWygobikgPDwgMSBeIChuKSA+PiA3KSAmMHhmZl0KKworI2Vsc2UgLyogTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgRlNiWzI1Nl0gPQoreworIDExMiwgMTMwLCAgNDQsIDIzNiwgMTc5LCAgMzksIDE5MiwgMjI5LCAyMjgsIDEzMywgIDg3LCAgNTMsIDIzNCwgIDEyLCAxNzQsICA2NSwKKyAgMzUsIDIzOSwgMTA3LCAxNDcsICA2OSwgIDI1LCAxNjUsICAzMywgMjM3LCAgMTQsICA3OSwgIDc4LCAgMjksIDEwMSwgMTQ2LCAxODksCisgMTM0LCAxODQsIDE3NSwgMTQzLCAxMjQsIDIzNSwgIDMxLCAyMDYsICA2MiwgIDQ4LCAyMjAsICA5NSwgIDk0LCAxOTcsICAxMSwgIDI2LAorIDE2NiwgMjI1LCAgNTcsIDIwMiwgMjEzLCAgNzEsICA5MywgIDYxLCAyMTcsICAgMSwgIDkwLCAyMTQsICA4MSwgIDg2LCAxMDgsICA3NywKKyAxMzksICAxMywgMTU0LCAxMDIsIDI1MSwgMjA0LCAxNzYsICA0NSwgMTE2LCAgMTgsICA0MywgIDMyLCAyNDAsIDE3NywgMTMyLCAxNTMsCisgMjIzLCAgNzYsIDIwMywgMTk0LCAgNTIsIDEyNiwgMTE4LCAgIDUsIDEwOSwgMTgzLCAxNjksICA0OSwgMjA5LCAgMjMsICAgNCwgMjE1LAorICAyMCwgIDg4LCAgNTgsICA5NywgMjIyLCAgMjcsICAxNywgIDI4LCAgNTAsICAxNSwgMTU2LCAgMjIsICA4MywgIDI0LCAyNDIsICAzNCwKKyAyNTQsICA2OCwgMjA3LCAxNzgsIDE5NSwgMTgxLCAxMjIsIDE0NSwgIDM2LCAgIDgsIDIzMiwgMTY4LCAgOTYsIDI1MiwgMTA1LCAgODAsCisgMTcwLCAyMDgsIDE2MCwgMTI1LCAxNjEsIDEzNywgIDk4LCAxNTEsICA4NCwgIDkxLCAgMzAsIDE0OSwgMjI0LCAyNTUsIDEwMCwgMjEwLAorICAxNiwgMTk2LCAgIDAsICA3MiwgMTYzLCAyNDcsIDExNywgMjE5LCAxMzgsICAgMywgMjMwLCAyMTgsICAgOSwgIDYzLCAyMjEsIDE0OCwKKyAxMzUsICA5MiwgMTMxLCAgIDIsIDIwNSwgIDc0LCAxNDQsICA1MSwgMTE1LCAxMDMsIDI0NiwgMjQzLCAxNTcsIDEyNywgMTkxLCAyMjYsCisgIDgyLCAxNTUsIDIxNiwgIDM4LCAyMDAsICA1NSwgMTk4LCAgNTksIDEyOSwgMTUwLCAxMTEsICA3NSwgIDE5LCAxOTAsICA5OSwgIDQ2LAorIDIzMywgMTIxLCAxNjcsIDE0MCwgMTU5LCAxMTAsIDE4OCwgMTQyLCAgNDEsIDI0NSwgMjQ5LCAxODIsICA0NywgMjUzLCAxODAsICA4OSwKKyAxMjAsIDE1MiwgICA2LCAxMDYsIDIzMSwgIDcwLCAxMTMsIDE4NiwgMjEyLCAgMzcsIDE3MSwgIDY2LCAxMzYsIDE2MiwgMTQxLCAyNTAsCisgMTE0LCAgIDcsIDE4NSwgIDg1LCAyNDgsIDIzOCwgMTcyLCAgMTAsICA1NCwgIDczLCAgNDIsIDEwNCwgIDYwLCAgNTYsIDI0MSwgMTY0LAorIDY0LCAgNDAsIDIxMSwgMTIzLCAxODcsIDIwMSwgIDY3LCAxOTMsICAyMSwgMjI3LCAxNzMsIDI0NCwgMTE5LCAxOTksIDEyOCwgMTU4Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBGU2IyWzI1Nl0gPQoreworIDIyNCwgICA1LCAgODgsIDIxNywgMTAzLCAgNzgsIDEyOSwgMjAzLCAyMDEsICAxMSwgMTc0LCAxMDYsIDIxMywgIDI0LCAgOTMsIDEzMCwKKyAgNzAsIDIyMywgMjE0LCAgMzksIDEzOCwgIDUwLCAgNzUsICA2NiwgMjE5LCAgMjgsIDE1OCwgMTU2LCAgNTgsIDIwMiwgIDM3LCAxMjMsCisgIDEzLCAxMTMsICA5NSwgIDMxLCAyNDgsIDIxNSwgIDYyLCAxNTcsIDEyNCwgIDk2LCAxODUsIDE5MCwgMTg4LCAxMzksICAyMiwgIDUyLAorICA3NywgMTk1LCAxMTQsIDE0OSwgMTcxLCAxNDIsIDE4NiwgMTIyLCAxNzksICAgMiwgMTgwLCAxNzMsIDE2MiwgMTcyLCAyMTYsIDE1NCwKKyAgMjMsICAyNiwgIDUzLCAyMDQsIDI0NywgMTUzLCAgOTcsICA5MCwgMjMyLCAgMzYsICA4NiwgIDY0LCAyMjUsICA5OSwgICA5LCAgNTEsCisgMTkxLCAxNTIsIDE1MSwgMTMzLCAxMDQsIDI1MiwgMjM2LCAgMTAsIDIxOCwgMTExLCAgODMsICA5OCwgMTYzLCAgNDYsICAgOCwgMTc1LAorICA0MCwgMTc2LCAxMTYsIDE5NCwgMTg5LCAgNTQsICAzNCwgIDU2LCAxMDAsICAzMCwgIDU3LCAgNDQsIDE2NiwgIDQ4LCAyMjksICA2OCwKKyAyNTMsIDEzNiwgMTU5LCAxMDEsIDEzNSwgMTA3LCAyNDQsICAzNSwgIDcyLCAgMTYsIDIwOSwgIDgxLCAxOTIsIDI0OSwgMjEwLCAxNjAsCisgIDg1LCAxNjEsICA2NSwgMjUwLCAgNjcsICAxOSwgMTk2LCAgNDcsIDE2OCwgMTgyLCAgNjAsICA0MywgMTkzLCAyNTUsIDIwMCwgMTY1LAorICAzMiwgMTM3LCAgIDAsIDE0NCwgIDcxLCAyMzksIDIzNCwgMTgzLCAgMjEsICAgNiwgMjA1LCAxODEsICAxOCwgMTI2LCAxODcsICA0MSwKKyAgMTUsIDE4NCwgICA3LCAgIDQsIDE1NSwgMTQ4LCAgMzMsIDEwMiwgMjMwLCAyMDYsIDIzNywgMjMxLCAgNTksIDI1NCwgMTI3LCAxOTcsCisgMTY0LCAgNTUsIDE3NywgIDc2LCAxNDUsIDExMCwgMTQxLCAxMTgsICAgMywgIDQ1LCAyMjIsIDE1MCwgIDM4LCAxMjUsIDE5OCwgIDkyLAorIDIxMSwgMjQyLCAgNzksICAyNSwgIDYzLCAyMjAsIDEyMSwgIDI5LCAgODIsIDIzNSwgMjQzLCAxMDksICA5NCwgMjUxLCAxMDUsIDE3OCwKKyAyNDAsICA0OSwgIDEyLCAyMTIsIDIwNywgMTQwLCAyMjYsIDExNywgMTY5LCAgNzQsICA4NywgMTMyLCAgMTcsICA2OSwgIDI3LCAyNDUsCisgMjI4LCAgMTQsIDExNSwgMTcwLCAyNDEsIDIyMSwgIDg5LCAgMjAsIDEwOCwgMTQ2LCAgODQsIDIwOCwgMTIwLCAxMTIsIDIyNywgIDczLAorIDEyOCwgIDgwLCAxNjcsIDI0NiwgMTE5LCAxNDcsIDEzNCwgMTMxLCAgNDIsIDE5OSwgIDkxLCAyMzMsIDIzOCwgMTQzLCAgIDEsICA2MQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgRlNiM1syNTZdID0KK3sKKyAgNTYsICA2NSwgIDIyLCAxMTgsIDIxNywgMTQ3LCAgOTYsIDI0MiwgMTE0LCAxOTQsIDE3MSwgMTU0LCAxMTcsICAgNiwgIDg3LCAxNjAsCisgMTQ1LCAyNDcsIDE4MSwgMjAxLCAxNjIsIDE0MCwgMjEwLCAxNDQsIDI0NiwgICA3LCAxNjcsICAzOSwgMTQyLCAxNzgsICA3MywgMjIyLAorICA2NywgIDkyLCAyMTUsIDE5OSwgIDYyLCAyNDUsIDE0MywgMTAzLCAgMzEsICAyNCwgMTEwLCAxNzUsICA0NywgMjI2LCAxMzMsICAxMywKKyAgODMsIDI0MCwgMTU2LCAxMDEsIDIzNCwgMTYzLCAxNzQsIDE1OCwgMjM2LCAxMjgsICA0NSwgMTA3LCAxNjgsICA0MywgIDU0LCAxNjYsCisgMTk3LCAxMzQsICA3NywgIDUxLCAyNTMsIDEwMiwgIDg4LCAxNTAsICA1OCwgICA5LCAxNDksICAxNiwgMTIwLCAyMTYsICA2NiwgMjA0LAorIDIzOSwgIDM4LCAyMjksICA5NywgIDI2LCAgNjMsICA1OSwgMTMwLCAxODIsIDIxOSwgMjEyLCAxNTIsIDIzMiwgMTM5LCAgIDIsIDIzNSwKKyAgMTAsICA0NCwgIDI5LCAxNzYsIDExMSwgMTQxLCAxMzYsICAxNCwgIDI1LCAxMzUsICA3OCwgIDExLCAxNjksICAxMiwgMTIxLCAgMTcsCisgMTI3LCAgMzQsIDIzMSwgIDg5LCAyMjUsIDIxOCwgIDYxLCAyMDAsICAxOCwgICA0LCAxMTYsICA4NCwgIDQ4LCAxMjYsIDE4MCwgIDQwLAorICA4NSwgMTA0LCAgODAsIDE5MCwgMjA4LCAxOTYsICA0OSwgMjAzLCAgNDIsIDE3MywgIDE1LCAyMDIsIDExMiwgMjU1LCAgNTAsIDEwNSwKKyAgIDgsICA5OCwgICAwLCAgMzYsIDIwOSwgMjUxLCAxODYsIDIzNywgIDY5LCAxMjksIDExNSwgMTA5LCAxMzIsIDE1OSwgMjM4LCAgNzQsCisgMTk1LCAgNDYsIDE5MywgICAxLCAyMzAsICAzNywgIDcyLCAxNTMsIDE4NSwgMTc5LCAxMjMsIDI0OSwgMjA2LCAxOTEsIDIyMywgMTEzLAorICA0MSwgMjA1LCAxMDgsICAxOSwgMTAwLCAxNTUsICA5OSwgMTU3LCAxOTIsICA3NSwgMTgzLCAxNjUsIDEzNywgIDk1LCAxNzcsICAyMywKKyAyNDQsIDE4OCwgMjExLCAgNzAsIDIwNywgIDU1LCAgOTQsICA3MSwgMTQ4LCAyNTAsIDI1MiwgIDkxLCAxNTEsIDI1NCwgIDkwLCAxNzIsCisgIDYwLCAgNzYsICAgMywgIDUzLCAyNDMsICAzNSwgMTg0LCAgOTMsIDEwNiwgMTQ2LCAyMTMsICAzMywgIDY4LCAgODEsIDE5OCwgMTI1LAorICA1NywgMTMxLCAyMjAsIDE3MCwgMTI0LCAxMTksICA4NiwgICA1LCAgMjcsIDE2NCwgIDIxLCAgNTIsICAzMCwgIDI4LCAyNDgsICA4MiwKKyAgMzIsICAyMCwgMjMzLCAxODksIDIyMSwgMjI4LCAxNjEsIDIyNCwgMTM4LCAyNDEsIDIxNCwgMTIyLCAxODcsIDIyNywgIDY0LCAgNzkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEZTYjRbMjU2XSA9Cit7CisgMTEyLCAgNDQsIDE3OSwgMTkyLCAyMjgsICA4NywgMjM0LCAxNzQsICAzNSwgMTA3LCAgNjksIDE2NSwgMjM3LCAgNzksICAyOSwgMTQ2LAorIDEzNCwgMTc1LCAxMjQsICAzMSwgIDYyLCAyMjAsICA5NCwgIDExLCAxNjYsICA1NywgMjEzLCAgOTMsIDIxNywgIDkwLCAgODEsIDEwOCwKKyAxMzksIDE1NCwgMjUxLCAxNzYsIDExNiwgIDQzLCAyNDAsIDEzMiwgMjIzLCAyMDMsICA1MiwgMTE4LCAxMDksIDE2OSwgMjA5LCAgIDQsCisgIDIwLCAgNTgsIDIyMiwgIDE3LCAgNTAsIDE1NiwgIDgzLCAyNDIsIDI1NCwgMjA3LCAxOTUsIDEyMiwgIDM2LCAyMzIsICA5NiwgMTA1LAorIDE3MCwgMTYwLCAxNjEsICA5OCwgIDg0LCAgMzAsIDIyNCwgMTAwLCAgMTYsICAgMCwgMTYzLCAxMTcsIDEzOCwgMjMwLCAgIDksIDIyMSwKKyAxMzUsIDEzMSwgMjA1LCAxNDQsIDExNSwgMjQ2LCAxNTcsIDE5MSwgIDgyLCAyMTYsIDIwMCwgMTk4LCAxMjksIDExMSwgIDE5LCAgOTksCisgMjMzLCAxNjcsIDE1OSwgMTg4LCAgNDEsIDI0OSwgIDQ3LCAxODAsIDEyMCwgICA2LCAyMzEsIDExMywgMjEyLCAxNzEsIDEzNiwgMTQxLAorIDExNCwgMTg1LCAyNDgsIDE3MiwgIDU0LCAgNDIsICA2MCwgMjQxLCAgNjQsIDIxMSwgMTg3LCAgNjcsICAyMSwgMTczLCAxMTksIDEyOCwKKyAxMzAsIDIzNiwgIDM5LCAyMjksIDEzMywgIDUzLCAgMTIsICA2NSwgMjM5LCAxNDcsICAyNSwgIDMzLCAgMTQsICA3OCwgMTAxLCAxODksCisgMTg0LCAxNDMsIDIzNSwgMjA2LCAgNDgsICA5NSwgMTk3LCAgMjYsIDIyNSwgMjAyLCAgNzEsICA2MSwgICAxLCAyMTQsICA4NiwgIDc3LAorICAxMywgMTAyLCAyMDQsICA0NSwgIDE4LCAgMzIsIDE3NywgMTUzLCAgNzYsIDE5NCwgMTI2LCAgIDUsIDE4MywgIDQ5LCAgMjMsIDIxNSwKKyAgODgsICA5NywgIDI3LCAgMjgsICAxNSwgIDIyLCAgMjQsICAzNCwgIDY4LCAxNzgsIDE4MSwgMTQ1LCAgIDgsIDE2OCwgMjUyLCAgODAsCisgMjA4LCAxMjUsIDEzNywgMTUxLCAgOTEsIDE0OSwgMjU1LCAyMTAsIDE5NiwgIDcyLCAyNDcsIDIxOSwgICAzLCAyMTgsICA2MywgMTQ4LAorICA5MiwgICAyLCAgNzQsICA1MSwgMTAzLCAyNDMsIDEyNywgMjI2LCAxNTUsICAzOCwgIDU1LCAgNTksIDE1MCwgIDc1LCAxOTAsICA0NiwKKyAxMjEsIDE0MCwgMTEwLCAxNDIsIDI0NSwgMTgyLCAyNTMsICA4OSwgMTUyLCAxMDYsICA3MCwgMTg2LCAgMzcsICA2NiwgMTYyLCAyNTAsCisgIDcsICA4NSwgMjM4LCAgMTAsICA3MywgMTA0LCAgNTYsIDE2NCwgIDQwLCAxMjMsIDIwMSwgMTkzLCAyMjcsIDI0NCwgMTk5LCAxNTgKK307CisKKyNkZWZpbmUgU0JPWDEobikgRlNiWyhuKV0KKyNkZWZpbmUgU0JPWDIobikgRlNiMlsobildCisjZGVmaW5lIFNCT1gzKG4pIEZTYjNbKG4pXQorI2RlZmluZSBTQk9YNChuKSBGU2I0WyhuKV0KKworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoaWZ0c1syXVs0XVs0XSA9Cit7CisgICAgeworICAgICAgICB7IDEsIDEsIDEsIDEgfSwgLyogS0wgKi8KKyAgICAgICAgeyAwLCAwLCAwLCAwIH0sIC8qIEtSICovCisgICAgICAgIHsgMSwgMSwgMSwgMSB9LCAvKiBLQSAqLworICAgICAgICB7IDAsIDAsIDAsIDAgfSAgLyogS0IgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgeyAxLCAwLCAxLCAxIH0sIC8qIEtMICovCisgICAgICAgIHsgMSwgMSwgMCwgMSB9LCAvKiBLUiAqLworICAgICAgICB7IDEsIDEsIDEsIDAgfSwgLyogS0EgKi8KKyAgICAgICAgeyAxLCAxLCAwLCAxIH0gIC8qIEtCICovCisgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFyIGluZGV4ZXNbMl1bNF1bMjBdID0KK3sKKyAgICB7CisgICAgICAgIHsgIDAsICAxLCAgMiwgIDMsICA4LCAgOSwgMTAsIDExLCAzOCwgMzksCisgICAgICAgICAgMzYsIDM3LCAyMywgMjAsIDIxLCAyMiwgMjcsIC0xLCAtMSwgMjYgfSwgLyogS0wgLT4gUksgKi8KKyAgICAgICAgeyAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSB9LCAvKiBLUiAtPiBSSyAqLworICAgICAgICB7ICA0LCAgNSwgIDYsICA3LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LAorICAgICAgICAgIDE4LCAxOSwgLTEsIDI0LCAyNSwgLTEsIDMxLCAyOCwgMjksIDMwIH0sIC8qIEtBIC0+IFJLICovCisgICAgICAgIHsgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEgfSAgLyogS0IgLT4gUksgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgeyAgMCwgIDEsICAyLCAgMywgNjEsIDYyLCA2MywgNjAsIC0xLCAtMSwKKyAgICAgICAgICAtMSwgLTEsIDI3LCAyNCwgMjUsIDI2LCAzNSwgMzIsIDMzLCAzNCB9LCAvKiBLTCAtPiBSSyAqLworICAgICAgICB7IC0xLCAtMSwgLTEsIC0xLCAgOCwgIDksIDEwLCAxMSwgMTYsIDE3LAorICAgICAgICAgIDE4LCAxOSwgLTEsIC0xLCAtMSwgLTEsIDM5LCAzNiwgMzcsIDM4IH0sIC8qIEtSIC0+IFJLICovCisgICAgICAgIHsgLTEsIC0xLCAtMSwgLTEsIDEyLCAxMywgMTQsIDE1LCA1OCwgNTksCisgICAgICAgICAgNTYsIDU3LCAzMSwgMjgsIDI5LCAzMCwgLTEsIC0xLCAtMSwgLTEgfSwgLyogS0EgLT4gUksgKi8KKyAgICAgICAgeyAgNCwgIDUsICA2LCAgNywgNjUsIDY2LCA2NywgNjQsIDIwLCAyMSwKKyAgICAgICAgICAyMiwgMjMsIC0xLCAtMSwgLTEsIC0xLCA0MywgNDAsIDQxLCA0MiB9ICAvKiBLQiAtPiBSSyAqLworICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciB0cmFuc3Bvc2VzWzJdWzIwXSA9Cit7CisgICAgeworICAgICAgICAyMSwgMjIsIDIzLCAyMCwKKyAgICAgICAgLTEsIC0xLCAtMSwgLTEsCisgICAgICAgIDE4LCAxOSwgMTYsIDE3LAorICAgICAgICAxMSwgIDgsICA5LCAxMCwKKyAgICAgICAgMTUsIDEyLCAxMywgMTQKKyAgICB9LAorICAgIHsKKyAgICAgICAgMjUsIDI2LCAyNywgMjQsCisgICAgICAgIDI5LCAzMCwgMzEsIDI4LAorICAgICAgICAxOCwgMTksIDE2LCAxNywKKyAgICAgICAgLTEsIC0xLCAtMSwgLTEsCisgICAgICAgIC0xLCAtMSwgLTEsIC0xCisgICAgfQorfTsKKworLyogU2hpZnQgbWFjcm8gZm9yIDEyOCBiaXQgc3RyaW5ncyB3aXRoIHJvdGF0aW9uIHNtYWxsZXIgdGhhbiAzMiBiaXRzICghKSAqLworI2RlZmluZSBST1RMKERFU1QsIFNSQywgU0hJRlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoREVTVClbMF0gPSAoU1JDKVswXSA8PCAoU0hJRlQpIF4gKFNSQylbMV0gPj4gKDMyIC0gKFNISUZUKSk7ICAgXAorICAgIChERVNUKVsxXSA9IChTUkMpWzFdIDw8IChTSElGVCkgXiAoU1JDKVsyXSA+PiAoMzIgLSAoU0hJRlQpKTsgICBcCisgICAgKERFU1QpWzJdID0gKFNSQylbMl0gPDwgKFNISUZUKSBeIChTUkMpWzNdID4+ICgzMiAtIChTSElGVCkpOyAgIFwKKyAgICAoREVTVClbM10gPSAoU1JDKVszXSA8PCAoU0hJRlQpIF4gKFNSQylbMF0gPj4gKDMyIC0gKFNISUZUKSk7ICAgXAorfQorCisjZGVmaW5lIEZMKFhMLCBYUiwgS0wsIEtSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChYUikgPSAoKCgoWEwpICYgKEtMKSkgPDwgMSkgfCAoKChYTCkgJiAoS0wpKSA+PiAzMSkpIF4gKFhSKTsgICBcCisgICAgKFhMKSA9ICgoWFIpIHwgKEtSKSkgXiAoWEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBGTEludihZTCwgWVIsIEtMLCBLUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoWUwpID0gKChZUikgfCAoS1IpKSBeIChZTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChZUikgPSAoKCgoWUwpICYgKEtMKSkgPDwgMSkgfCAoKChZTCkgJiAoS0wpKSA+PiAzMSkpIF4gKFlSKTsgICBcCit9CisKKyNkZWZpbmUgU0hJRlRfQU5EX1BMQUNFKElOREVYLCBPRkZTRVQpICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUS1swXSA9IEtDWyhPRkZTRVQpICogNCArIDBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUS1sxXSA9IEtDWyhPRkZTRVQpICogNCArIDFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUS1syXSA9IEtDWyhPRkZTRVQpICogNCArIDJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUS1szXSA9IEtDWyhPRkZTRVQpICogNCArIDNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGkgPSAxOyBpIDw9IDQ7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIHNoaWZ0c1soSU5ERVgpXVsoT0ZGU0VUKV1baSAtMV0gKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFJPVEwoVEsgKyBpICogNCwgVEssICggMTUgKiBpICkgJSAzMik7ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGkgPSAwOyBpIDwgMjA7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIGluZGV4ZXNbKElOREVYKV1bKE9GRlNFVCldW2ldICE9IC0xICkgeyAgICAgICAgIFwKKyAgICAgICAgICAgIFJLW2luZGV4ZXNbKElOREVYKV1bKE9GRlNFVCldW2ldXSA9IFRLWyBpIF07ICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworc3RhdGljIHZvaWQgY2FtZWxsaWFfZmVpc3RlbCggY29uc3QgdWludDMyX3QgeFsyXSwgY29uc3QgdWludDMyX3Qga1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHpbMl0pCit7CisgICAgdWludDMyX3QgSTAsIEkxOworICAgIEkwID0geFswXSBeIGtbMF07CisgICAgSTEgPSB4WzFdIF4ga1sxXTsKKworICAgIEkwID0gKCh1aW50MzJfdCkgU0JPWDEoKEkwID4+IDI0KSAmIDB4RkYpIDw8IDI0KSB8CisgICAgICAgICAoKHVpbnQzMl90KSBTQk9YMigoSTAgPj4gMTYpICYgMHhGRikgPDwgMTYpIHwKKyAgICAgICAgICgodWludDMyX3QpIFNCT1gzKChJMCA+PiAgOCkgJiAweEZGKSA8PCAgOCkgfAorICAgICAgICAgKCh1aW50MzJfdCkgU0JPWDQoKEkwICAgICAgKSAmIDB4RkYpICAgICAgKTsKKyAgICBJMSA9ICgodWludDMyX3QpIFNCT1gyKChJMSA+PiAyNCkgJiAweEZGKSA8PCAyNCkgfAorICAgICAgICAgKCh1aW50MzJfdCkgU0JPWDMoKEkxID4+IDE2KSAmIDB4RkYpIDw8IDE2KSB8CisgICAgICAgICAoKHVpbnQzMl90KSBTQk9YNCgoSTEgPj4gIDgpICYgMHhGRikgPDwgIDgpIHwKKyAgICAgICAgICgodWludDMyX3QpIFNCT1gxKChJMSAgICAgICkgJiAweEZGKSAgICAgICk7CisKKyAgICBJMCBePSAoSTEgPDwgOCkgfCAoSTEgPj4gMjQpOworICAgIEkxIF49IChJMCA8PCAxNikgfCAoSTAgPj4gMTYpOworICAgIEkwIF49IChJMSA+PiA4KSB8IChJMSA8PCAyNCk7CisgICAgSTEgXj0gKEkwID4+IDgpIHwgKEkwIDw8IDI0KTsKKworICAgIHpbMF0gXj0gSTE7CisgICAgelsxXSBePSBJMDsKK30KKwordm9pZCBtYmVkdGxzX2NhbWVsbGlhX2luaXQoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBDYW1lbGxpYSBrZXkgc2NoZWR1bGUgKGVuY3J5cHRpb24pCisgKi8KK2ludCBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKQoreworICAgIGludCBpZHg7CisgICAgc2l6ZV90IGk7CisgICAgdWludDMyX3QgKlJLOworICAgIHVuc2lnbmVkIGNoYXIgdFs2NF07CisgICAgdWludDMyX3QgU0lHTUFbNl1bMl07CisgICAgdWludDMyX3QgS0NbMTZdOworICAgIHVpbnQzMl90IFRLWzIwXTsKKworICAgIFJLID0gY3R4LT5yazsKKworICAgIG1lbXNldCggdCwgMCwgNjQgKTsKKyAgICBtZW1zZXQoIFJLLCAwLCBzaXplb2YoY3R4LT5yaykgKTsKKworICAgIHN3aXRjaCgga2V5Yml0cyApCisgICAgeworICAgICAgICBjYXNlIDEyODogY3R4LT5uciA9IDM7IGlkeCA9IDA7IGJyZWFrOworICAgICAgICBjYXNlIDE5MjoKKyAgICAgICAgY2FzZSAyNTY6IGN0eC0+bnIgPSA0OyBpZHggPSAxOyBicmVhazsKKyAgICAgICAgZGVmYXVsdCA6IHJldHVybiggTUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RIICk7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IGtleWJpdHMgLyA4OyArK2kgKQorICAgICAgICB0W2ldID0ga2V5W2ldOworCisgICAgaWYoIGtleWJpdHMgPT0gMTkyICkgeworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgIHRbMjQgKyBpXSA9IH50WzE2ICsgaV07CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIFNJR01BIHZhbHVlcworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKSB7CisgICAgICAgIEdFVF9VSU5UMzJfQkUoIFNJR01BW2ldWzBdLCBTSUdNQV9DSEFSU1tpXSwgMCApOworICAgICAgICBHRVRfVUlOVDMyX0JFKCBTSUdNQVtpXVsxXSwgU0lHTUFfQ0hBUlNbaV0sIDQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEtleSBzdG9yYWdlIGluIEtDCisgICAgICogT3JkZXI6IEtMLCBLUiwgS0EsIEtCCisgICAgICovCisgICAgbWVtc2V0KCBLQywgMCwgc2l6ZW9mKEtDKSApOworCisgICAgLyogU3RvcmUgS0wsIEtSICovCisgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgICAgIEdFVF9VSU5UMzJfQkUoIEtDW2ldLCB0LCBpICogNCApOworCisgICAgLyogR2VuZXJhdGUgS0EgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgNDsgKytpICkKKyAgICAgICAgS0NbOCArIGldID0gS0NbaV0gXiBLQ1s0ICsgaV07CisKKyAgICBjYW1lbGxpYV9mZWlzdGVsKCBLQyArIDgsIFNJR01BWzBdLCBLQyArIDEwICk7CisgICAgY2FtZWxsaWFfZmVpc3RlbCggS0MgKyAxMCwgU0lHTUFbMV0sIEtDICsgOCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDQ7ICsraSApCisgICAgICAgIEtDWzggKyBpXSBePSBLQ1tpXTsKKworICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIEtDICsgOCwgU0lHTUFbMl0sIEtDICsgMTAgKTsKKyAgICBjYW1lbGxpYV9mZWlzdGVsKCBLQyArIDEwLCBTSUdNQVszXSwgS0MgKyA4ICk7CisKKyAgICBpZigga2V5Yml0cyA+IDEyOCApIHsKKyAgICAgICAgLyogR2VuZXJhdGUgS0IgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDQ7ICsraSApCisgICAgICAgICAgICBLQ1sxMiArIGldID0gS0NbNCArIGldIF4gS0NbOCArIGldOworCisgICAgICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIEtDICsgMTIsIFNJR01BWzRdLCBLQyArIDE0ICk7CisgICAgICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIEtDICsgMTQsIFNJR01BWzVdLCBLQyArIDEyICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBHZW5lcmF0aW5nIHN1YmtleXMKKyAgICAgKi8KKworICAgIC8qIE1hbmlwdWxhdGluZyBLTCAqLworICAgIFNISUZUX0FORF9QTEFDRSggaWR4LCAwICk7CisKKyAgICAvKiBNYW5pcHVsYXRpbmcgS1IgKi8KKyAgICBpZigga2V5Yml0cyA+IDEyOCApIHsKKyAgICAgICAgU0hJRlRfQU5EX1BMQUNFKCBpZHgsIDEgKTsKKyAgICB9CisKKyAgICAvKiBNYW5pcHVsYXRpbmcgS0EgKi8KKyAgICBTSElGVF9BTkRfUExBQ0UoIGlkeCwgMiApOworCisgICAgLyogTWFuaXB1bGF0aW5nIEtCICovCisgICAgaWYoIGtleWJpdHMgPiAxMjggKSB7CisgICAgICAgIFNISUZUX0FORF9QTEFDRSggaWR4LCAzICk7CisgICAgfQorCisgICAgLyogRG8gdHJhbnNwb3NpdGlvbnMgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMjA7IGkrKyApIHsKKyAgICAgICAgaWYoIHRyYW5zcG9zZXNbaWR4XVtpXSAhPSAtMSApIHsKKyAgICAgICAgICAgIFJLWzMyICsgMTIgKiBpZHggKyBpXSA9IFJLW3RyYW5zcG9zZXNbaWR4XVtpXV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENhbWVsbGlhIGtleSBzY2hlZHVsZSAoZGVjcnlwdGlvbikKKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2RlYyggbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApCit7CisgICAgaW50IGlkeCwgcmV0OworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHk7CisgICAgdWludDMyX3QgKlJLOworICAgIHVpbnQzMl90ICpTSzsKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggJmN0eSApOworCisgICAgLyogQWxzbyBjaGVja3Mga2V5Yml0cyAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmN0eSwga2V5LCBrZXliaXRzICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgY3R4LT5uciA9IGN0eS5ucjsKKyAgICBpZHggPSAoIGN0eC0+bnIgPT0gNCApOworCisgICAgUksgPSBjdHgtPnJrOworICAgIFNLID0gY3R5LnJrICsgMjQgKiAyICsgOCAqIGlkeCAqIDI7CisKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworCisgICAgZm9yKCBpID0gMjIgKyA4ICogaWR4LCBTSyAtPSA2OyBpID4gMDsgaS0tLCBTSyAtPSA0ICkKKyAgICB7CisgICAgICAgICpSSysrID0gKlNLKys7CisgICAgICAgICpSSysrID0gKlNLKys7CisgICAgfQorCisgICAgU0sgLT0gMjsKKworICAgICpSSysrID0gKlNLKys7CisgICAgKlJLKysgPSAqU0srKzsKKyAgICAqUksrKyA9ICpTSysrOworICAgICpSSysrID0gKlNLKys7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R5ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ2FtZWxsaWEtRUNCIGJsb2NrIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFsxNl0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgaW50IE5SOworICAgIHVpbnQzMl90ICpSSywgWFs0XTsKKworICAgICggKHZvaWQpIG1vZGUgKTsKKworICAgIE5SID0gY3R4LT5ucjsKKyAgICBSSyA9IGN0eC0+cms7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBYWzBdLCBpbnB1dCwgIDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBYWzFdLCBpbnB1dCwgIDQgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBYWzJdLCBpbnB1dCwgIDggKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBYWzNdLCBpbnB1dCwgMTIgKTsKKworICAgIFhbMF0gXj0gKlJLKys7CisgICAgWFsxXSBePSAqUksrKzsKKyAgICBYWzJdIF49ICpSSysrOworICAgIFhbM10gXj0gKlJLKys7CisKKyAgICB3aGlsZSggTlIgKSB7CisgICAgICAgIC0tTlI7CisgICAgICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIFgsIFJLLCBYICsgMiApOworICAgICAgICBSSyArPSAyOworICAgICAgICBjYW1lbGxpYV9mZWlzdGVsKCBYICsgMiwgUkssIFggKTsKKyAgICAgICAgUksgKz0gMjsKKyAgICAgICAgY2FtZWxsaWFfZmVpc3RlbCggWCwgUkssIFggKyAyICk7CisgICAgICAgIFJLICs9IDI7CisgICAgICAgIGNhbWVsbGlhX2ZlaXN0ZWwoIFggKyAyLCBSSywgWCApOworICAgICAgICBSSyArPSAyOworICAgICAgICBjYW1lbGxpYV9mZWlzdGVsKCBYLCBSSywgWCArIDIgKTsKKyAgICAgICAgUksgKz0gMjsKKyAgICAgICAgY2FtZWxsaWFfZmVpc3RlbCggWCArIDIsIFJLLCBYICk7CisgICAgICAgIFJLICs9IDI7CisKKyAgICAgICAgaWYoIE5SICkgeworICAgICAgICAgICAgRkwoWFswXSwgWFsxXSwgUktbMF0sIFJLWzFdKTsKKyAgICAgICAgICAgIFJLICs9IDI7CisgICAgICAgICAgICBGTEludihYWzJdLCBYWzNdLCBSS1swXSwgUktbMV0pOworICAgICAgICAgICAgUksgKz0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFhbMl0gXj0gKlJLKys7CisgICAgWFszXSBePSAqUksrKzsKKyAgICBYWzBdIF49ICpSSysrOworICAgIFhbMV0gXj0gKlJLKys7CisKKyAgICBQVVRfVUlOVDMyX0JFKCBYWzJdLCBvdXRwdXQsICAwICk7CisgICAgUFVUX1VJTlQzMl9CRSggWFszXSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfQkUoIFhbMF0sIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBYWzFdLCBvdXRwdXQsIDEyICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKgorICogQ2FtZWxsaWEtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2JjKCBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOworCisgICAgaWYoIGxlbmd0aCAlIDE2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCB0ZW1wLCBpbnB1dCwgMTYgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIGlucHV0LCBvdXRwdXQgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggb3V0cHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWVtY3B5KCBpdiwgdGVtcCwgMTYgKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IDE2OworICAgICAgICAgICAgb3V0cHV0ICs9IDE2OworICAgICAgICAgICAgbGVuZ3RoIC09IDE2OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggaW5wdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2VjYiggY3R4LCBtb2RlLCBvdXRwdXQsIG91dHB1dCApOworICAgICAgICAgICAgbWVtY3B5KCBpdiwgb3V0cHV0LCAxNiApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gMTY7CisgICAgICAgICAgICBvdXRwdXQgKz0gMTY7CisgICAgICAgICAgICBsZW5ndGggLT0gMTY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKy8qCisgKiBDYW1lbGxpYS1DRkIxMjggYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppdl9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgYzsKKyAgICBzaXplX3QgbiA9ICppdl9vZmY7CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQgKQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aC0tICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG4gPT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoIGN0eCwgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBULCBpdiwgaXYgKTsKKworICAgICAgICAgICAgYyA9ICppbnB1dCsrOworICAgICAgICAgICAgKm91dHB1dCsrID0gKHVuc2lnbmVkIGNoYXIpKCBjIF4gaXZbbl0gKTsKKyAgICAgICAgICAgIGl2W25dID0gKHVuc2lnbmVkIGNoYXIpIGM7CisKKyAgICAgICAgICAgIG4gPSAoIG4gKyAxICkgJiAweDBGOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlKCBsZW5ndGgtLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBuID09IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgaXYsIGl2ICk7CisKKyAgICAgICAgICAgIGl2W25dID0gKm91dHB1dCsrID0gKHVuc2lnbmVkIGNoYXIpKCBpdltuXSBeICppbnB1dCsrICk7CisKKyAgICAgICAgICAgIG4gPSAoIG4gKyAxICkgJiAweDBGOworICAgICAgICB9CisgICAgfQorCisgICAgKml2X29mZiA9IG47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qCisgKiBDYW1lbGxpYS1DVFIgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jdHIoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBub25jZV9jb3VudGVyWzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBzdHJlYW1fYmxvY2tbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgYywgaTsKKyAgICBzaXplX3QgbiA9ICpuY19vZmY7CisKKyAgICB3aGlsZSggbGVuZ3RoLS0gKQorICAgIHsKKyAgICAgICAgaWYoIG4gPT0gMCApIHsKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCBjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgbm9uY2VfY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX2Jsb2NrICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDE2OyBpID4gMDsgaS0tICkKKyAgICAgICAgICAgICAgICBpZiggKytub25jZV9jb3VudGVyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYyA9ICppbnB1dCsrOworICAgICAgICAqb3V0cHV0KysgPSAodW5zaWduZWQgY2hhcikoIGMgXiBzdHJlYW1fYmxvY2tbbl0gKTsKKworICAgICAgICBuID0gKCBuICsgMSApICYgMHgwRjsKKyAgICB9CisKKyAgICAqbmNfb2ZmID0gbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisjZW5kaWYgLyogIU1CRURUTFNfQ0FNRUxMSUFfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisvKgorICogQ2FtZWxsaWEgdGVzdCB2ZWN0b3JzIGZyb206CisgKgorICogaHR0cDovL2luZm8uaXNsLm50dC5jby5qcC9jcnlwdC9lbmcvY2FtZWxsaWEvdGVjaG5vbG9neS5odG1sOgorICogICBodHRwOi8vaW5mby5pc2wubnR0LmNvLmpwL2NyeXB0L2VuZy9jYW1lbGxpYS9kbC9jcnlwdHJlYy9pbnRlcm1lZGlhdGUudHh0CisgKiAgIGh0dHA6Ly9pbmZvLmlzbC5udHQuY28uanAvY3J5cHQvZW5nL2NhbWVsbGlhL2RsL2NyeXB0cmVjL3RfY2FtZWxsaWEudHh0CisgKiAgICAgICAgICAgICAgICAgICAgICAoRm9yIGVhY2ggYml0bGVuZ3RoOiBLZXkgMCwgTnIgMzkpCisgKi8KKyNkZWZpbmUgQ0FNRUxMSUFfVEVTVFNfRUNCICAyCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfZWNiX2tleVszXVtDQU1FTExJQV9URVNUU19FQ0JdWzMyXSA9Cit7CisgICAgeworICAgICAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCisgICAgICAgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorICAgICAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9CisgICAgfSwKKyAgICB7CisgICAgICAgIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKKyAgICAgICAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAorICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcgfSwKKyAgICAgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9CisgICAgfSwKKyAgICB7CisgICAgICAgIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKKyAgICAgICAgICAweGZlLCAweGRjLCAweGJhLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAorICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCisgICAgICAgICAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiB9LAorICAgICAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2VjYl9wbGFpbltDQU1FTExJQV9URVNUU19FQ0JdWzE2XSA9Cit7CisgICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAorICAgICAgMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCB9LAorICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9lY2JfY2lwaGVyWzNdW0NBTUVMTElBX1RFU1RTX0VDQl1bMTZdID0KK3sKKyAgICB7CisgICAgICAgIHsgMHg2NywgMHg2NywgMHgzMSwgMHgzOCwgMHg1NCwgMHg5NiwgMHg2OSwgMHg3MywKKyAgICAgICAgICAweDA4LCAweDU3LCAweDA2LCAweDU2LCAweDQ4LCAweGVhLCAweGJlLCAweDQzIH0sCisgICAgICAgIHsgMHgzOCwgMHgzQywgMHg2QywgMHgyQSwgMHhBQiwgMHhFRiwgMHg3RiwgMHhERSwKKyAgICAgICAgICAweDI1LCAweENELCAweDQ3LCAweDBCLCAweEY3LCAweDc0LCAweEEzLCAweDMxIH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgeyAweGI0LCAweDk5LCAweDM0LCAweDAxLCAweGIzLCAweGU5LCAweDk2LCAweGY4LAorICAgICAgICAgIDB4NGUsIDB4ZTUsIDB4Y2UsIDB4ZTcsIDB4ZDcsIDB4OWIsIDB4MDksIDB4YjkgfSwKKyAgICAgICAgeyAweEQxLCAweDc2LCAweDNGLCAweEMwLCAweDE5LCAweEQ3LCAweDdDLCAweEM5LAorICAgICAgICAgIDB4MzAsIDB4QkYsIDB4RjIsIDB4QTUsIDB4NkYsIDB4N0MsIDB4OTMsIDB4NjQgfQorICAgIH0sCisgICAgeworICAgICAgICB7IDB4OWEsIDB4Y2MsIDB4MjMsIDB4N2QsIDB4ZmYsIDB4MTYsIDB4ZDcsIDB4NmMsCisgICAgICAgICAgMHgyMCwgMHhlZiwgMHg3YywgMHg5MSwgMHg5ZSwgMHgzYSwgMHg3NSwgMHgwOSB9LAorICAgICAgICB7IDB4MDUsIDB4MDMsIDB4RkIsIDB4MTAsIDB4QUIsIDB4MjQsIDB4MUUsIDB4N0MsCisgICAgICAgICAgMHhGNCwgMHg1RCwgMHg4QywgMHhERSwgMHhFRSwgMHg0NywgMHg0MywgMHgzNSB9CisgICAgfQorfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjZGVmaW5lIENBTUVMTElBX1RFU1RTX0NCQyAgMworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2NiY19rZXlbM11bMzJdID0KK3sKKyAgICAgICAgeyAweDJCLCAweDdFLCAweDE1LCAweDE2LCAweDI4LCAweEFFLCAweEQyLCAweEE2LAorICAgICAgICAgIDB4QUIsIDB4RjcsIDB4MTUsIDB4ODgsIDB4MDksIDB4Q0YsIDB4NEYsIDB4M0MgfQorICAgICwKKyAgICAgICAgeyAweDhFLCAweDczLCAweEIwLCAweEY3LCAweERBLCAweDBFLCAweDY0LCAweDUyLAorICAgICAgICAgIDB4QzgsIDB4MTAsIDB4RjMsIDB4MkIsIDB4ODAsIDB4OTAsIDB4NzksIDB4RTUsCisgICAgICAgICAgMHg2MiwgMHhGOCwgMHhFQSwgMHhEMiwgMHg1MiwgMHgyQywgMHg2QiwgMHg3QiB9CisgICAgLAorICAgICAgICB7IDB4NjAsIDB4M0QsIDB4RUIsIDB4MTAsIDB4MTUsIDB4Q0EsIDB4NzEsIDB4QkUsCisgICAgICAgICAgMHgyQiwgMHg3MywgMHhBRSwgMHhGMCwgMHg4NSwgMHg3RCwgMHg3NywgMHg4MSwKKyAgICAgICAgICAweDFGLCAweDM1LCAweDJDLCAweDA3LCAweDNCLCAweDYxLCAweDA4LCAweEQ3LAorICAgICAgICAgIDB4MkQsIDB4OTgsIDB4MTAsIDB4QTMsIDB4MDksIDB4MTQsIDB4REYsIDB4RjQgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9jYmNfaXZbMTZdID0KKworICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYgfQorOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2NiY19wbGFpbltDQU1FTExJQV9URVNUU19DQkNdWzE2XSA9Cit7CisgICAgeyAweDZCLCAweEMxLCAweEJFLCAweEUyLCAweDJFLCAweDQwLCAweDlGLCAweDk2LAorICAgICAgMHhFOSwgMHgzRCwgMHg3RSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyQSB9LAorICAgIHsgMHhBRSwgMHgyRCwgMHg4QSwgMHg1NywgMHgxRSwgMHgwMywgMHhBQywgMHg5QywKKyAgICAgIDB4OUUsIDB4QjcsIDB4NkYsIDB4QUMsIDB4NDUsIDB4QUYsIDB4OEUsIDB4NTEgfSwKKyAgICB7IDB4MzAsIDB4QzgsIDB4MUMsIDB4NDYsIDB4QTMsIDB4NUMsIDB4RTQsIDB4MTEsCisgICAgICAweEU1LCAweEZCLCAweEMxLCAweDE5LCAweDFBLCAweDBBLCAweDUyLCAweEVGIH0KKworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2FtZWxsaWFfdGVzdF9jYmNfY2lwaGVyWzNdW0NBTUVMTElBX1RFU1RTX0NCQ11bMTZdID0KK3sKKyAgICB7CisgICAgICAgIHsgMHgxNiwgMHgwNywgMHhDRiwgMHg0OSwgMHg0QiwgMHgzNiwgMHhCQiwgMHhGMCwKKyAgICAgICAgICAweDBELCAweEFFLCAweEIwLCAweEI1LCAweDAzLCAweEM4LCAweDMxLCAweEFCIH0sCisgICAgICAgIHsgMHhBMiwgMHhGMiwgMHhDRiwgMHg2NywgMHgxNiwgMHgyOSwgMHhFRiwgMHg3OCwKKyAgICAgICAgICAweDQwLCAweEM1LCAweEE1LCAweERGLCAweEI1LCAweDA3LCAweDQ4LCAweDg3IH0sCisgICAgICAgIHsgMHgwRiwgMHgwNiwgMHgxNiwgMHg1MCwgMHgwOCwgMHhDRiwgMHg4QiwgMHg4QiwKKyAgICAgICAgICAweDVBLCAweDYzLCAweDU4LCAweDYzLCAweDYyLCAweDU0LCAweDNFLCAweDU0IH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgeyAweDJBLCAweDQ4LCAweDMwLCAweEFCLCAweDVBLCAweEM0LCAweEExLCAweEEyLAorICAgICAgICAgIDB4NDAsIDB4NTksIDB4NTUsIDB4RkQsIDB4MjEsIDB4OTUsIDB4Q0YsIDB4OTMgfSwKKyAgICAgICAgeyAweDVELCAweDVBLCAweDg2LCAweDlCLCAweEQxLCAweDRDLCAweEU1LCAweDQyLAorICAgICAgICAgIDB4NjQsIDB4RjgsIDB4OTIsIDB4QTYsIDB4REQsIDB4MkUsIDB4QzMsIDB4RDUgfSwKKyAgICAgICAgeyAweDM3LCAweEQzLCAweDU5LCAweEMzLCAweDM0LCAweDk4LCAweDM2LCAweEQ4LAorICAgICAgICAgIDB4ODQsIDB4RTMsIDB4MTAsIDB4QUQsIDB4REYsIDB4NjgsIDB4QzQsIDB4NDkgfQorICAgIH0sCisgICAgeworICAgICAgICB7IDB4RTYsIDB4Q0YsIDB4QTMsIDB4NUYsIDB4QzAsIDB4MkIsIDB4MTMsIDB4NEEsCisgICAgICAgICAgMHg0RCwgMHgyQywgMHgwQiwgMHg2NywgMHgzNywgMHhBQywgMHgzRSwgMHhEQSB9LAorICAgICAgICB7IDB4MzYsIDB4Q0IsIDB4RUIsIDB4NzMsIDB4QkQsIDB4NTAsIDB4NEIsIDB4NDAsCisgICAgICAgICAgMHg3MCwgMHhCMSwgMHhCNywgMHhERSwgMHgyQiwgMHgyMSwgMHhFQiwgMHg1MCB9LAorICAgICAgICB7IDB4RTMsIDB4MUEsIDB4NjAsIDB4NTUsIDB4MjksIDB4N0QsIDB4OTYsIDB4Q0EsCisgICAgICAgICAgMHgzMywgMHgzMCwgMHhDRCwgMHhGMSwgMHhCMSwgMHg4NiwgMHgwQSwgMHg4MyB9CisgICAgfQorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKy8qCisgKiBDYW1lbGxpYS1DVFIgdGVzdCB2ZWN0b3JzIGZyb206CisgKgorICogaHR0cDovL3d3dy5mYXFzLm9yZy9yZmNzL3JmYzU1MjguaHRtbAorICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfY3RyX2tleVszXVsxNl0gPQoreworICAgIHsgMHhBRSwgMHg2OCwgMHg1MiwgMHhGOCwgMHgxMiwgMHgxMCwgMHg2NywgMHhDQywKKyAgICAgIDB4NEIsIDB4RjcsIDB4QTUsIDB4NzYsIDB4NTUsIDB4NzcsIDB4RjMsIDB4OUUgfSwKKyAgICB7IDB4N0UsIDB4MjQsIDB4MDYsIDB4NzgsIDB4MTcsIDB4RkEsIDB4RTAsIDB4RDcsCisgICAgICAweDQzLCAweEQ2LCAweENFLCAweDFGLCAweDMyLCAweDUzLCAweDkxLCAweDYzIH0sCisgICAgeyAweDc2LCAweDkxLCAweEJFLCAweDAzLCAweDVFLCAweDUwLCAweDIwLCAweEE4LAorICAgICAgMHhBQywgMHg2RSwgMHg2MSwgMHg4NSwgMHgyOSwgMHhGOSwgMHhBMCwgMHhEQyB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjYW1lbGxpYV90ZXN0X2N0cl9ub25jZV9jb3VudGVyWzNdWzE2XSA9Cit7CisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAorICAgIHsgMHgwMCwgMHg2QywgMHhCNiwgMHhEQiwgMHhDMCwgMHg1NCwgMHgzQiwgMHg1OSwKKyAgICAgIDB4REEsIDB4NDgsIDB4RDksIDB4MEIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgICB7IDB4MDAsIDB4RTAsIDB4MDEsIDB4N0IsIDB4MjcsIDB4NzcsIDB4N0YsIDB4M0YsCisgICAgICAweDRBLCAweDE3LCAweDg2LCAweEYwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfY3RyX3B0WzNdWzQ4XSA9Cit7CisgICAgeyAweDUzLCAweDY5LCAweDZFLCAweDY3LCAweDZDLCAweDY1LCAweDIwLCAweDYyLAorICAgICAgMHg2QywgMHg2RiwgMHg2MywgMHg2QiwgMHgyMCwgMHg2RCwgMHg3MywgMHg2NyB9LAorCisgICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGIH0sCisKKyAgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAgIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsCisgICAgICAweDIwLCAweDIxLCAweDIyLCAweDIzIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNhbWVsbGlhX3Rlc3RfY3RyX2N0WzNdWzQ4XSA9Cit7CisgICAgeyAweEQwLCAweDlELCAweEMyLCAweDlBLCAweDgyLCAweDE0LCAweDYxLCAweDlBLAorICAgICAgMHgyMCwgMHg4NywgMHg3QywgMHg3NiwgMHhEQiwgMHgxRiwgMHgwQiwgMHgzRiB9LAorICAgIHsgMHhEQiwgMHhGMywgMHhDNywgMHg4RCwgMHhDMCwgMHg4MywgMHg5NiwgMHhENCwKKyAgICAgIDB4REEsIDB4N0MsIDB4OTAsIDB4NzcsIDB4NjUsIDB4QkIsIDB4Q0IsIDB4NDQsCisgICAgICAweDJCLCAweDhFLCAweDhFLCAweDBGLCAweDMxLCAweEYwLCAweERDLCAweEE3LAorICAgICAgMHgyQywgMHg3NCwgMHgxNywgMHhFMywgMHg1MywgMHg2MCwgMHhFMCwgMHg0OCB9LAorICAgIHsgMHhCMSwgMHg5RCwgMHgxRiwgMHhDRCwgMHhDQiwgMHg3NSwgMHhFQiwgMHg4OCwKKyAgICAgIDB4MkYsIDB4ODQsIDB4OUMsIDB4RTIsIDB4NEQsIDB4ODUsIDB4Q0YsIDB4NzMsCisgICAgICAweDlDLCAweEU2LCAweDRCLCAweDJCLCAweDVDLCAweDlELCAweDczLCAweEYxLAorICAgICAgMHg0RiwgMHgyRCwgMHg1RCwgMHg5RCwgMHhDRSwgMHg5OCwgMHg4OSwgMHhDRCwKKyAgICAgIDB4REYsIDB4NTAsIDB4ODYsIDB4OTYgfQorfTsKKworc3RhdGljIGNvbnN0IGludCBjYW1lbGxpYV90ZXN0X2N0cl9sZW5bM10gPQorICAgIHsgMTYsIDMyLCAzNiB9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfY2FtZWxsaWFfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGksIGosIHUsIHY7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY1sxNl07CisgICAgdW5zaWduZWQgY2hhciBkc3RbMTZdOworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgdW5zaWduZWQgY2hhciBpdlsxNl07CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIHNpemVfdCBvZmZzZXQsIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIG5vbmNlX2NvdW50ZXJbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX2Jsb2NrWzE2XTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKKworICAgIG1lbXNldCgga2V5LCAwLCAzMiApOworCisgICAgZm9yKCBqID0gMDsgaiA8IDY7IGorKyApIHsKKyAgICAgICAgdSA9IGogPj4gMTsKKyAgICB2ID0gaiAmIDE7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIENBTUVMTElBLUVDQi0lM2QgKCVzKTogIiwgMTI4ICsgdSAqIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCkgPyAiZGVjIiA6ICJlbmMiKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBDQU1FTExJQV9URVNUU19FQ0I7IGkrKyApIHsKKyAgICAgICAgbWVtY3B5KCBrZXksIGNhbWVsbGlhX3Rlc3RfZWNiX2tleVt1XVtpXSwgMTYgKyA4ICogdSApOworCisgICAgICAgIGlmKCB2ID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCApIHsKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2RlYyggJmN0eCwga2V5LCAxMjggKyB1ICogNjQgKTsKKyAgICAgICAgICAgIG1lbWNweSggc3JjLCBjYW1lbGxpYV90ZXN0X2VjYl9jaXBoZXJbdV1baV0sIDE2ICk7CisgICAgICAgICAgICBtZW1jcHkoIGRzdCwgY2FtZWxsaWFfdGVzdF9lY2JfcGxhaW5baV0sIDE2ICk7CisgICAgICAgIH0gZWxzZSB7IC8qIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCAqLworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXksIDEyOCArIHUgKiA2NCApOworICAgICAgICAgICAgbWVtY3B5KCBzcmMsIGNhbWVsbGlhX3Rlc3RfZWNiX3BsYWluW2ldLCAxNiApOworICAgICAgICAgICAgbWVtY3B5KCBkc3QsIGNhbWVsbGlhX3Rlc3RfZWNiX2NpcGhlclt1XVtpXSwgMTYgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCAmY3R4LCB2LCBzcmMsIGJ1ZiApOworCisgICAgICAgIGlmKCBtZW1jbXAoIGJ1ZiwgZHN0LCAxNiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICAvKgorICAgICAqIENCQyBtb2RlCisgICAgICovCisgICAgZm9yKCBqID0gMDsgaiA8IDY7IGorKyApCisgICAgeworICAgICAgICB1ID0gaiA+PiAxOworICAgICAgICB2ID0gaiAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIENBTUVMTElBLUNCQy0lM2QgKCVzKTogIiwgMTI4ICsgdSAqIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHYgPT0gTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtY3B5KCBzcmMsIGNhbWVsbGlhX3Rlc3RfY2JjX2l2LCAxNiApOworICAgICAgICBtZW1jcHkoIGRzdCwgY2FtZWxsaWFfdGVzdF9jYmNfaXYsIDE2ICk7CisgICAgICAgIG1lbWNweSgga2V5LCBjYW1lbGxpYV90ZXN0X2NiY19rZXlbdV0sIDE2ICsgOCAqIHUgKTsKKworICAgICAgICBpZiggdiA9PSBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQgKSB7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHgsIGtleSwgMTI4ICsgdSAqIDY0ICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgQ0FNRUxMSUFfVEVTVFNfQ0JDOyBpKysgKSB7CisKKyAgICAgICAgICAgIGlmKCB2ID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCApIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIGl2ICwgc3JjLCAxNiApOworICAgICAgICAgICAgICAgIG1lbWNweSggc3JjLCBjYW1lbGxpYV90ZXN0X2NiY19jaXBoZXJbdV1baV0sIDE2ICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBkc3QsIGNhbWVsbGlhX3Rlc3RfY2JjX3BsYWluW2ldLCAxNiApOworICAgICAgICAgICAgfSBlbHNlIHsgLyogTUJFRFRMU19DQU1FTExJQV9FTkNSWVBUICovCisgICAgICAgICAgICAgICAgbWVtY3B5KCBpdiAsIGRzdCwgMTYgKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHNyYywgY2FtZWxsaWFfdGVzdF9jYmNfcGxhaW5baV0sIDE2ICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBkc3QsIGNhbWVsbGlhX3Rlc3RfY2JjX2NpcGhlclt1XVtpXSwgMTYgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoICZjdHgsIHYsIDE2LCBpdiwgc3JjLCBidWYgKTsKKworICAgICAgICAgICAgaWYoIG1lbWNtcCggYnVmLCBkc3QsIDE2ICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICAvKgorICAgICAqIENUUiBtb2RlCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICB1ID0gaSA+PiAxOworICAgICAgICB2ID0gaSAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIENBTUVMTElBLUNUUi0xMjggKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2ID09IE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCApID8gImRlYyIgOiAiZW5jIiApOworCisgICAgICAgIG1lbWNweSggbm9uY2VfY291bnRlciwgY2FtZWxsaWFfdGVzdF9jdHJfbm9uY2VfY291bnRlclt1XSwgMTYgKTsKKyAgICAgICAgbWVtY3B5KCBrZXksIGNhbWVsbGlhX3Rlc3RfY3RyX2tleVt1XSwgMTYgKTsKKworICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHgsIGtleSwgMTI4ICk7CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUICkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gY2FtZWxsaWFfdGVzdF9jdHJfbGVuW3VdOworICAgICAgICAgICAgbWVtY3B5KCBidWYsIGNhbWVsbGlhX3Rlc3RfY3RyX2N0W3VdLCBsZW4gKTsKKworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jdHIoICZjdHgsIGxlbiwgJm9mZnNldCwgbm9uY2VfY291bnRlciwgc3RyZWFtX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1ZiApOworCisgICAgICAgICAgICBpZiggbWVtY21wKCBidWYsIGNhbWVsbGlhX3Rlc3RfY3RyX3B0W3VdLCBsZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gY2FtZWxsaWFfdGVzdF9jdHJfbGVuW3VdOworICAgICAgICAgICAgbWVtY3B5KCBidWYsIGNhbWVsbGlhX3Rlc3RfY3RyX3B0W3VdLCBsZW4gKTsKKworICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jdHIoICZjdHgsIGxlbiwgJm9mZnNldCwgbm9uY2VfY291bnRlciwgc3RyZWFtX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1ZiApOworCisgICAgICAgICAgICBpZiggbWVtY21wKCBidWYsIGNhbWVsbGlhX3Rlc3RfY3RyX2N0W3VdLCBsZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NjbS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhOGZkMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NjbS5jCkBAIC0wLDAgKzEsNDY0IEBACisvKgorICogIE5JU1QgU1A4MDAtMzhDIGNvbXBsaWFudCBDQ00gaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIERlZmluaXRpb24gb2YgQ0NNOgorICogaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEMvU1A4MDAtMzhDX3VwZGF0ZWQtSnVseTIwXzIwMDcucGRmCisgKiBSRkMgMzYxMCAiQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkiCisgKgorICogUmVsYXRlZDoKKyAqIFJGQyA1MTE2ICJBbiBJbnRlcmZhY2UgYW5kIEFsZ29yaXRobXMgZm9yIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiIKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkgJiYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgJiYgTUJFRFRMU19BRVNfQyAqLworCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworI2RlZmluZSBDQ01fRU5DUllQVCAwCisjZGVmaW5lIENDTV9ERUNSWVBUIDEKKworLyoKKyAqIEluaXRpYWxpemUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfY2NtX2luaXQoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19jY21fY29udGV4dCApICk7Cit9CisKK2ludCBtYmVkdGxzX2NjbV9zZXRrZXkoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2lkX3QgY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWJpdHMgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3ZhbHVlcyggY2lwaGVyLCBrZXliaXRzLCBNQkVEVExTX01PREVfRUNCICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKKworICAgIGlmKCBjaXBoZXJfaW5mby0+YmxvY2tfc2l6ZSAhPSAxNiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVCApOworCisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eC0+Y2lwaGVyX2N0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgtPmNpcGhlcl9jdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eC0+Y2lwaGVyX2N0eCwga2V5LCBrZXliaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5DUllQVCApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRnJlZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19jY21fZnJlZSggbWJlZHRsc19jY21fY29udGV4dCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4LT5jaXBoZXJfY3R4ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19jY21fY29udGV4dCApICk7Cit9CisKKy8qCisgKiBNYWNyb3MgZm9yIGNvbW1vbiBvcGVyYXRpb25zLgorICogUmVzdWx0cyBpbiBzbWFsbGVyIGNvbXBpbGVkIGNvZGUgdGhhbiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4KKyAqLworCisvKgorICogVXBkYXRlIHRoZSBDQkMtTUFDIHN0YXRlIGluIHkgdXNpbmcgYSBibG9jayBpbiBiCisgKiAoQWx3YXlzIHVzaW5nIGIgYXMgdGhlIHNvdXJjZSBoZWxwcyB0aGUgY29tcGlsZXIgb3B0aW1pc2UgYSBiaXQgYmV0dGVyLikKKyAqLworI2RlZmluZSBVUERBVEVfQ0JDX01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHlbaV0gXj0gYltpXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgtPmNpcGhlcl9jdHgsIHksIDE2LCB5LCAmb2xlbiApICkgIT0gMCApIFwKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworLyoKKyAqIEVuY3J5cHQgb3IgZGVjcnlwdCBhIHBhcnRpYWwgYmxvY2sgd2l0aCBDVFIKKyAqIFdhcm5pbmc6IHVzaW5nIGIgZm9yIHRlbXBvcmFyeSBzdG9yYWdlISBzcmMgYW5kIGRzdCBtdXN0IG5vdCBiZSBiIQorICogVGhpcyBhdm9pZHMgYWxsb2NhdGluZyBvbmUgbW9yZSAxNiBieXRlcyBidWZmZXIgd2hpbGUgYWxsb3dpbmcgc3JjID09IGRzdC4KKyAqLworI2RlZmluZSBDVFJfQ1JZUFQoIGRzdCwgc3JjLCBsZW4gICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgtPmNpcGhlcl9jdHgsIGN0ciwgMTYsIGIsICZvbGVuICkgKSAhPSAwICkgIFwKKyAgICAgICAgcmV0dXJuKCByZXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZHN0W2ldID0gc3JjW2ldIF4gYltpXTsKKworLyoKKyAqIEF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uCisgKi8KK3N0YXRpYyBpbnQgY2NtX2F1dGhfY3J5cHQoIG1iZWR0bHNfY2NtX2NvbnRleHQgKmN0eCwgaW50IG1vZGUsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwgc2l6ZV90IGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCBzaXplX3QgdGFnX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGk7CisgICAgdW5zaWduZWQgY2hhciBxOworICAgIHNpemVfdCBsZW5fbGVmdCwgb2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgeVsxNl07CisgICAgdW5zaWduZWQgY2hhciBjdHJbMTZdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYzsKKyAgICB1bnNpZ25lZCBjaGFyICpkc3Q7CisKKyAgICAvKgorICAgICAqIENoZWNrIGxlbmd0aCByZXF1aXJlbWVudHM6IFNQODAwLTM4QyBBLjEKKyAgICAgKiBBZGRpdGlvbmFsIHJlcXVpcmVtZW50OiBhIDwgMl4xNiAtIDJeOCB0byBzaW1wbGlmeSB0aGUgY29kZS4KKyAgICAgKiAnbGVuZ3RoJyBjaGVja2VkIGxhdGVyICh3aGVuIHdyaXRpbmcgaXQgdG8gdGhlIGZpcnN0IGJsb2NrKQorICAgICAqLworICAgIGlmKCB0YWdfbGVuIDwgNCB8fCB0YWdfbGVuID4gMTYgfHwgdGFnX2xlbiAlIDIgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVCApOworCisgICAgLyogQWxzbyBpbXBsaWVzIHEgaXMgd2l0aGluIGJvdW5kcyAqLworICAgIGlmKCBpdl9sZW4gPCA3IHx8IGl2X2xlbiA+IDEzICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUICk7CisKKyAgICBpZiggYWRkX2xlbiA+IDB4RkYwMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVCApOworCisgICAgcSA9IDE2IC0gMSAtICh1bnNpZ25lZCBjaGFyKSBpdl9sZW47CisKKyAgICAvKgorICAgICAqIEZpcnN0IGJsb2NrIEJfMDoKKyAgICAgKiAwICAgICAgICAuLiAwICAgICAgICBmbGFncworICAgICAqIDEgICAgICAgIC4uIGl2X2xlbiAgIG5vbmNlIChha2EgaXYpCisgICAgICogaXZfbGVuKzEgLi4gMTUgICAgICAgbGVuZ3RoCisgICAgICoKKyAgICAgKiBXaXRoIGZsYWdzIGFzIChiaXRzKToKKyAgICAgKiA3ICAgICAgICAwCisgICAgICogNiAgICAgICAgYWRkIHByZXNlbnQ/CisgICAgICogNSAuLiAzICAgKHQgLSAyKSAvIDIKKyAgICAgKiAyIC4uIDAgICBxIC0gMQorICAgICAqLworICAgIGJbMF0gPSAwOworICAgIGJbMF0gfD0gKCBhZGRfbGVuID4gMCApIDw8IDY7CisgICAgYlswXSB8PSAoICggdGFnX2xlbiAtIDIgKSAvIDIgKSA8PCAzOworICAgIGJbMF0gfD0gcSAtIDE7CisKKyAgICBtZW1jcHkoIGIgKyAxLCBpdiwgaXZfbGVuICk7CisKKyAgICBmb3IoIGkgPSAwLCBsZW5fbGVmdCA9IGxlbmd0aDsgaSA8IHE7IGkrKywgbGVuX2xlZnQgPj49IDggKQorICAgICAgICBiWzE1LWldID0gKHVuc2lnbmVkIGNoYXIpKCBsZW5fbGVmdCAmIDB4RkYgKTsKKworICAgIGlmKCBsZW5fbGVmdCA+IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQgKTsKKworCisgICAgLyogU3RhcnQgQ0JDLU1BQyB3aXRoIGZpcnN0IGJsb2NrICovCisgICAgbWVtc2V0KCB5LCAwLCAxNiApOworICAgIFVQREFURV9DQkNfTUFDOworCisgICAgLyoKKyAgICAgKiBJZiB0aGVyZSBpcyBhZGRpdGlvbmFsIGRhdGEsIHVwZGF0ZSBDQkMtTUFDIHdpdGgKKyAgICAgKiBhZGRfbGVuLCBhZGQsIDAgKHBhZGRpbmcgdG8gYSBibG9jayBib3VuZGFyeSkKKyAgICAgKi8KKyAgICBpZiggYWRkX2xlbiA+IDAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHVzZV9sZW47CisgICAgICAgIGxlbl9sZWZ0ID0gYWRkX2xlbjsKKyAgICAgICAgc3JjID0gYWRkOworCisgICAgICAgIG1lbXNldCggYiwgMCwgMTYgKTsKKyAgICAgICAgYlswXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBhZGRfbGVuID4+IDggKSAmIDB4RkYgKTsKKyAgICAgICAgYlsxXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBhZGRfbGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgICAgICB1c2VfbGVuID0gbGVuX2xlZnQgPCAxNiAtIDIgPyBsZW5fbGVmdCA6IDE2IC0gMjsKKyAgICAgICAgbWVtY3B5KCBiICsgMiwgc3JjLCB1c2VfbGVuICk7CisgICAgICAgIGxlbl9sZWZ0IC09IHVzZV9sZW47CisgICAgICAgIHNyYyArPSB1c2VfbGVuOworCisgICAgICAgIFVQREFURV9DQkNfTUFDOworCisgICAgICAgIHdoaWxlKCBsZW5fbGVmdCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB1c2VfbGVuID0gbGVuX2xlZnQgPiAxNiA/IDE2IDogbGVuX2xlZnQ7CisKKyAgICAgICAgICAgIG1lbXNldCggYiwgMCwgMTYgKTsKKyAgICAgICAgICAgIG1lbWNweSggYiwgc3JjLCB1c2VfbGVuICk7CisgICAgICAgICAgICBVUERBVEVfQ0JDX01BQzsKKworICAgICAgICAgICAgbGVuX2xlZnQgLT0gdXNlX2xlbjsKKyAgICAgICAgICAgIHNyYyArPSB1c2VfbGVuOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIGNvdW50ZXIgYmxvY2sgZm9yIGVuY3J5cHRpb246CisgICAgICogMCAgICAgICAgLi4gMCAgICAgICAgZmxhZ3MKKyAgICAgKiAxICAgICAgICAuLiBpdl9sZW4gICBub25jZSAoYWthIGl2KQorICAgICAqIGl2X2xlbisxIC4uIDE1ICAgICAgIGNvdW50ZXIgKGluaXRpYWxseSAxKQorICAgICAqCisgICAgICogV2l0aCBmbGFncyBhcyAoYml0cyk6CisgICAgICogNyAuLiAzICAgMAorICAgICAqIDIgLi4gMCAgIHEgLSAxCisgICAgICovCisgICAgY3RyWzBdID0gcSAtIDE7CisgICAgbWVtY3B5KCBjdHIgKyAxLCBpdiwgaXZfbGVuICk7CisgICAgbWVtc2V0KCBjdHIgKyAxICsgaXZfbGVuLCAwLCBxICk7CisgICAgY3RyWzE1XSA9IDE7CisKKyAgICAvKgorICAgICAqIEF1dGhlbnRpY2F0ZSBhbmQge2VuLGRlfWNyeXB0IHRoZSBtZXNzYWdlLgorICAgICAqCisgICAgICogVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gaXMKKyAgICAgKiB0aGUgcmVzcGVjdGl2ZSBvcmRlciBvZiBhdXRoZW50aWNhdGlvbiBhbmQge2VuLGRlfWNyeXB0aW9uLgorICAgICAqLworICAgIGxlbl9sZWZ0ID0gbGVuZ3RoOworICAgIHNyYyA9IGlucHV0OworICAgIGRzdCA9IG91dHB1dDsKKworICAgIHdoaWxlKCBsZW5fbGVmdCA+IDAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHVzZV9sZW4gPSBsZW5fbGVmdCA+IDE2ID8gMTYgOiBsZW5fbGVmdDsKKworICAgICAgICBpZiggbW9kZSA9PSBDQ01fRU5DUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCggYiwgMCwgMTYgKTsKKyAgICAgICAgICAgIG1lbWNweSggYiwgc3JjLCB1c2VfbGVuICk7CisgICAgICAgICAgICBVUERBVEVfQ0JDX01BQzsKKyAgICAgICAgfQorCisgICAgICAgIENUUl9DUllQVCggZHN0LCBzcmMsIHVzZV9sZW4gKTsKKworICAgICAgICBpZiggbW9kZSA9PSBDQ01fREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCggYiwgMCwgMTYgKTsKKyAgICAgICAgICAgIG1lbWNweSggYiwgZHN0LCB1c2VfbGVuICk7CisgICAgICAgICAgICBVUERBVEVfQ0JDX01BQzsKKyAgICAgICAgfQorCisgICAgICAgIGRzdCArPSB1c2VfbGVuOworICAgICAgICBzcmMgKz0gdXNlX2xlbjsKKyAgICAgICAgbGVuX2xlZnQgLT0gdXNlX2xlbjsKKworICAgICAgICAvKgorICAgICAgICAgKiBJbmNyZW1lbnQgY291bnRlci4KKyAgICAgICAgICogTm8gbmVlZCB0byBjaGVjayBmb3Igb3ZlcmZsb3cgdGhhbmtzIHRvIHRoZSBsZW5ndGggY2hlY2sgYWJvdmUuCisgICAgICAgICAqLworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgcTsgaSsrICkKKyAgICAgICAgICAgIGlmKCArK2N0clsxNS1pXSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEF1dGhlbnRpY2F0aW9uOiByZXNldCBjb3VudGVyIGFuZCBjcnlwdC9tYXNrIGludGVybmFsIHRhZworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCBxOyBpKysgKQorICAgICAgICBjdHJbMTUtaV0gPSAwOworCisgICAgQ1RSX0NSWVBUKCB5LCB5LCAxNiApOworICAgIG1lbWNweSggdGFnLCB5LCB0YWdfbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnKCBtYmVkdGxzX2NjbV9jb250ZXh0ICpjdHgsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLCBzaXplX3QgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKQoreworICAgIHJldHVybiggY2NtX2F1dGhfY3J5cHQoIGN0eCwgQ0NNX0VOQ1JZUFQsIGxlbmd0aCwgaXYsIGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQsIGFkZF9sZW4sIGlucHV0LCBvdXRwdXQsIHRhZywgdGFnX2xlbiApICk7Cit9CisKKy8qCisgKiBBdXRoZW50aWNhdGVkIGRlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdCggbWJlZHRsc19jY21fY29udGV4dCAqY3R4LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZCwgc2l6ZV90IGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfdGFnWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGk7CisgICAgaW50IGRpZmY7CisKKyAgICBpZiggKCByZXQgPSBjY21fYXV0aF9jcnlwdCggY3R4LCBDQ01fREVDUllQVCwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBhZGQsIGFkZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIGNoZWNrX3RhZywgdGFnX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qIENoZWNrIHRhZyBpbiAiY29uc3RhbnQtdGltZSIgKi8KKyAgICBmb3IoIGRpZmYgPSAwLCBpID0gMDsgaSA8IHRhZ19sZW47IGkrKyApCisgICAgICAgIGRpZmYgfD0gdGFnW2ldIF4gY2hlY2tfdGFnW2ldOworCisgICAgaWYoIGRpZmYgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIG91dHB1dCwgbGVuZ3RoICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0FVVEhfRkFJTEVEICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKy8qCisgKiBFeGFtcGxlcyAxIHRvIDMgZnJvbSBTUDgwMC0zOEMgQXBwZW5kaXggQworICovCisKKyNkZWZpbmUgTkJfVEVTVFMgMworCisvKgorICogVGhlIGRhdGEgaXMgdGhlIHNhbWUgZm9yIGFsbCB0ZXN0cywgb25seSB0aGUgdXNlZCBsZW5ndGggY2hhbmdlcworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbXSA9IHsKKyAgICAweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAorICAgIDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGl2W10gPSB7CisgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAweDE4LCAweDE5LCAweDFhLCAweDFiCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZFtdID0geworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKyAgICAweDEwLCAweDExLCAweDEyLCAweDEzCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dbXSA9IHsKKyAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorICAgIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKK307CisKK3N0YXRpYyBjb25zdCBzaXplX3QgaXZfbGVuIFtOQl9URVNUU10gPSB7IDcsIDgsICAxMiB9Oworc3RhdGljIGNvbnN0IHNpemVfdCBhZGRfbGVuW05CX1RFU1RTXSA9IHsgOCwgMTYsIDIwIH07CitzdGF0aWMgY29uc3Qgc2l6ZV90IG1zZ19sZW5bTkJfVEVTVFNdID0geyA0LCAxNiwgMjQgfTsKK3N0YXRpYyBjb25zdCBzaXplX3QgdGFnX2xlbltOQl9URVNUU10gPSB7IDQsIDYsICA4ICB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXNbTkJfVEVTVFNdWzMyXSA9IHsKKyAgICB7ICAgMHg3MSwgMHg2MiwgMHgwMSwgMHg1YiwgMHg0ZCwgMHhhYywgMHgyNSwgMHg1ZCB9LAorICAgIHsgICAweGQyLCAweGExLCAweGYwLCAweGUwLCAweDUxLCAweGVhLCAweDVmLCAweDYyLAorICAgICAgICAweDA4LCAweDFhLCAweDc3LCAweDkyLCAweDA3LCAweDNkLCAweDU5LCAweDNkLAorICAgICAgICAweDFmLCAweGM2LCAweDRmLCAweGJmLCAweGFjLCAweGNkIH0sCisgICAgeyAgIDB4ZTMsIDB4YjIsIDB4MDEsIDB4YTksIDB4ZjUsIDB4YjcsIDB4MWEsIDB4N2EsCisgICAgICAgIDB4OWIsIDB4MWMsIDB4ZWEsIDB4ZWMsIDB4Y2QsIDB4OTcsIDB4ZTcsIDB4MGIsCisgICAgICAgIDB4NjEsIDB4NzYsIDB4YWEsIDB4ZDksIDB4YTQsIDB4NDIsIDB4OGEsIDB4YTUsCisgICAgICAgIDB4NDgsIDB4NDMsIDB4OTIsIDB4ZmIsIDB4YzEsIDB4YjAsIDB4OTksIDB4NTEgfQorfTsKKworaW50IG1iZWR0bHNfY2NtX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIG1iZWR0bHNfY2NtX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgb3V0WzMyXTsKKyAgICBzaXplX3QgaTsKKyAgICBpbnQgcmV0OworCisgICAgbWJlZHRsc19jY21faW5pdCggJmN0eCApOworCisgICAgaWYoIG1iZWR0bHNfY2NtX3NldGtleSggJmN0eCwgTUJFRFRMU19DSVBIRVJfSURfQUVTLCBrZXksIDggKiBzaXplb2Yga2V5ICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBDQ006IHNldHVwIGZhaWxlZCIgKTsKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTkJfVEVTVFM7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBDQ00tQUVTICMldTogIiwgKHVuc2lnbmVkIGludCkgaSArIDEgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcoICZjdHgsIG1zZ19sZW5baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW5baV0sIGFkLCBhZGRfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2csIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICsgbXNnX2xlbltpXSwgdGFnX2xlbltpXSApOworCisgICAgICAgIGlmKCByZXQgIT0gMCB8fAorICAgICAgICAgICAgbWVtY21wKCBvdXQsIHJlc1tpXSwgbXNnX2xlbltpXSArIHRhZ19sZW5baV0gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQoICZjdHgsIG1zZ19sZW5baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW5baV0sIGFkLCBhZGRfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNbaV0sIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2ldICsgbXNnX2xlbltpXSwgdGFnX2xlbltpXSApOworCisgICAgICAgIGlmKCByZXQgIT0gMCB8fAorICAgICAgICAgICAgbWVtY21wKCBvdXQsIG1zZywgbXNnX2xlbltpXSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2NjbV9mcmVlKCAmY3R4ICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgJiYgTUJFRFRMU19BRVNfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2VydHMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NlcnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlNmJjOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NlcnRzLmMKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiAgWC41MDkgdGVzdCBjZXJ0aWZpY2F0ZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisjZGVmaW5lIFRFU1RfQ0FfQ1JUX0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXHJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVFxyXG4iICBcCisiQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlxyXG4iICBcCisiUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVFxyXG4iICBcCisiQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlxyXG4iICBcCisiUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdVxyXG4iICBcCisid3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeVxyXG4iICBcCisiYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZ1xyXG4iICBcCisiSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2N1xyXG4iICBcCisiTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRVxyXG4iICBcCisiQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4d1xyXG4iICBcCisiQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NlxyXG4iICBcCisidDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdlxyXG4iICBcCisidUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT1cclxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxyXG4iCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jYV9jcnRfZWNbXSA9IFRFU1RfQ0FfQ1JUX0VDOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jYV9rZXlfZWNbXSA9CisiLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tXHJcbiIKKyJQcm9jLVR5cGU6IDQsRU5DUllQVEVEXHJcbiIKKyJERUstSW5mbzogREVTLUVERTMtQ0JDLDMwN0VBQjQ2OTkzM0Q2NEVcclxuIgorIlxyXG4iCisiSXhiclJtS2NBemN0SnFQZFRRTEE0U1d5QllZR1lKVmtZRW5hK0Y3UGE1dDVZZy9nS0FEckZLY202QjcyZTdER1xyXG4iCisiaWhFeHRaSTY0OHMwemRZdzZxU0o3NHZyUFN1V0RlNXFtOTNCcXNmVkg5c3Z0Q3pXSFcwcG0xcDBLVEJDRmZVcVxyXG4iCisiVXN1V1RJVHdKSW1jbmxBczFnYVJaM3NBV203Y09VaWRMMGZvMkcwZllVRk5jWW9DU0xmZkNGVEVIQnVQbmFnYlxyXG4iCisiYTc3eC9zWTFCdmlpOFM5L1hoRFRiNnBUTXgwNnd6cm1cclxuIgorIi0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS1cclxuIjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjW10gPSAiUG9sYXJTU0xUZXN0IjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lY1tdID0KKyItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cclxuIgorIk1JSUNIekNDQWFXZ0F3SUJBZ0lCQ1RBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIgorIkExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY05cclxuIgorIk1UTXdPVEkwTVRVMU1qQTBXaGNOTWpNd09USXlNVFUxTWpBMFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIgorIkExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUdcclxuIgorIkNDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUFcclxuIgorIjJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWRcclxuIgorIkJnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JcclxuIgorIlB5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhcclxuIgorImNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0dcclxuIgorIkNDcUdTTTQ5QkFNQ0EyZ0FNR1VDTVFDYUxGelhwdHVpNVdRTjhMbE8zZGRoMWhNeHg2dHpnTHZUMDNNVFZLMlNcclxuIgorIkMxMnIwTHozcmkvbW9TRXBOWldxUGprQ01DRTJmNTNHWGNZTHF5ZnlKUjA3OGMveE5TVVU1K1h4bDdWWjQxNFZcclxuIgorImZHYTVrSHZIQVJCUGM4WUFJVklxRHZISDFRPT1cclxuIgorIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cclxuIjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lY1tdID0KKyItLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS1cclxuIgorIk1IY0NBUUVFSVBFcUV5QjJBbkNvUEwvOVUvWURIdmRxWFliSW9nVHl3d3lwNi9VZkR3Nm5vQW9HQ0NxR1NNNDlcclxuIgorIkF3RUhvVVFEUWdBRU44eFcyWFlKSGxweVBzZFpMZjhnYnU1OCtRYVJkTkN0RkxYM2FDSlpZcEpPNVFEWUl4SC9cclxuIgorIjZpL1NORjFkRnIyS2lNSnJkdzFWellvcUR2b0J5TFR0L3c9PVxyXG4iCisiLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLVxyXG4iOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjW10gPQorIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxyXG4iCisiTUlJQ0xEQ0NBYktnQXdJQkFnSUJEVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R1xyXG4iCisiQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTlxyXG4iCisiTVRNd09USTBNVFUxTWpBMFdoY05Nak13T1RJeU1UVTFNakEwV2pCQk1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R1xyXG4iCisiQTFVRUNoTUlVRzlzWVhKVFUwd3hIekFkQmdOVkJBTVRGbEJ2YkdGeVUxTk1JRlJsYzNRZ1EyeHBaVzUwSURJd1xyXG4iCisiV1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVJYNWE2eGM5L1RyTHVUdUlIL0VxN3U1bE9zemxWVFxyXG4iCisiOWpRT3pDN2pZeVVMMzVqaTgxeGdOcGJBMVJnVWNPVi9uOVZMUlJqbHNHelZYUGlXajRkd28rVEhvNEdkTUlHYVxyXG4iCisiTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZIb0FYNFprL09CZDVSRVFPN0xtTzhRbVA4L2lNRzRHQTFVZFxyXG4iCisiSXdSbk1HV0FGSjF0SUNSSkFUOHJ5M2kxR2J4K0pNbmIrelo4b1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUlxyXG4iCisiTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQ1xyXG4iCisiQ1FEQlErSitZa1BNNkRBS0JnZ3Foa2pPUFFRREFnTm9BREJsQWpCS1pRMTdJSU9pbWJtb0QveU43bzg5dTNCTVxyXG4iCisibGdPc2puaHczZklPb0xJV3kyV09Hc2svTEdGKytEenZyUnp1TmlBQ01RQ2Q4aWVtMVhTNEpLN2hhajh4b2NwVVxyXG4iCisiTHdqUWplNVBER0hmZDNoOXRQMzhRa251NWJKcXdzMG1kMktPS0h5ZVYwVT1cclxuIgorIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cclxuIjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3RfY2xpX2tleV9lY1tdID0KKyItLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS1cclxuIgorIk1IY0NBUUVFSVBiM2htVHhaMy9tWkkzdnlrN3AzVTN3QmYrV0lvcDZoRGhrRnpKaG1MY3FvQW9HQ0NxR1NNNDlcclxuIgorIkF3RUhvVVFEUWdBRVYrV3VzWFBmMDZ5N2s3aUIveEt1N3VaVHJNNVZVL1kwRHN3dTQyTWxDOStZNHZOY1lEYVdcclxuIgorIndOVVlGSERsZjUvVlMwVVk1YkJzMVZ6NGxvK0hjS1BreHc9PVxyXG4iCisiLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLVxyXG4iOworCitjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2NydF9lY19sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2tleV9lY19sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2Ffa2V5X2VjICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX3B3ZF9lY19sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjICkgLSAxOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X3Nydl9jcnRfZWMgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lY19sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2VjICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9jcnRfZWNfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2xpX2NydF9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfa2V5X2VjX2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9rZXlfZWMgKTsKKyNlbHNlCisjZGVmaW5lIFRFU1RfQ0FfQ1JUX0VDCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjZGVmaW5lIFRFU1RfQ0FfQ1JUX1JTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXHJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisiTUlJRGh6Q0NBbStnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUlxyXG4iICBcCisiTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTlxyXG4iICBcCisiTVRFd01qRXlNVFEwTkRBd1doY05NakV3TWpFeU1UUTBOREF3V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R1xyXG4iICBcCisiQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdnZ0VpTUEwR1xyXG4iICBcCisiQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURBM3pmOEY3dmdscDAvaHQ2V01uMUVwUmFnelNIeFxyXG4iICBcCisibWRUczZzdDhHRmdJbEtYc204V0wzeG9lbVRpWmh4NTd3STA1M3poZGNIZ0gwNTdaaytpNWNsSEZ6cU13VXFueVxyXG4iICBcCisiNTBCd0ZNdEVvbklMd3VWQStUN2xwZzZ6K2V4S1k4QzRLUUIwbkZjN3FLVUVrSEh4dllQWlA5YWw0andxais4blxyXG4iICBcCisiWU1QR244dTY3R0I5dCthRU1yNVArMWdtSWdOYjFMVFYrL1hqbGk1d3dPUXV2Znd1N3VKQlZjQTBMbjBrY21uTFxyXG4iICBcCisiUjdFVVFJTjlaL1NHOWpHcjhYbWtzclV1RXZtRUYvQmlieWMrRTFpeFZBMGhtbk0zb1REUGI1TGM5dW44ck5zdVxyXG4iICBcCisiS05GK0Frc2pvQlh5T0dWa0Nlb01ibzRiRjZCeHlMT2J5YXZwdy9MUGg1YVBnQUl5bnBsWWI2TFZBZ01CQUFHalxyXG4iICBcCisiZ1pVd2daSXdEQVlEVlIwVEJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SFxyXG4iICBcCisiL2Y4d1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVlxyXG4iICBcCisiQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWelxyXG4iICBcCisiZENCRFFZSUJBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBdVAxVTJBQlVrSXNsc0NmZGxjMmk5NFFISFllSlxyXG4iICBcCisiU3NSNEVkZ0h0ZGNpVUk1STYySjZNb20rWTBkVC83YSs4UzZNVk1DWlA2QzVOeU55WHcxR1dZL1lSODJYVEo4SFxyXG4iICBcCisiREJKaUNUb2s1RGJaNlN6YU9OQnpkV0hYd1d3bWk1dmcxZHhuN1l4ck05ZDBJanhNMjdXTktzNHNEUWhaQlFrRlxyXG4iICBcCisicGptZnMyY2I0b1BsNFk5VDltZVR4L2x2ZGtSWUV1ZzYxSmZuNmNBK3FIcHlQWWRUSCtVc2hJVG5tcDUvWnRrZlxyXG4iICBcCisibS9VVFNMQk5GTkhlc2lUWmVIMzFOY3hZR2RIU21lOU5jL2dmaWRSYTBGTE9DZld4UmxGcUFJNDd6RzlqQVFDWlxyXG4iICBcCisiN1oybUNHRE5NaGpRYytCWWNkbmwwbFBYamRESzZWMHFDZzFkVmV3aFVCY1c1Z1pLelY3ZTkrRHBWQT09XHJcbiIgICAgICBcCisiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxyXG4iCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhW10gPSBURVNUX0NBX0NSVF9SU0E7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X2NhX2tleV9yc2FbXSA9CisiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iCisiUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxyXG4iCisiREVLLUluZm86IERFUy1FREUzLUNCQyxBOEE5NUIwNUQ1QjcyMDZCXHJcbiIKKyJcclxuIgorIjlRZDlHZUFyZWpsMUdEVmgybExWMWJIdDBjUHRmYmg1aC81elZwQVZhRnBxdFNQTXJFbHA1MFJudG45ZXQrSkFcclxuIgorIjdWT3lib1IrSXkydC9IVTRXdkE2ODdrM0JwcGU5R3dLSGpIaHRsLy84eEZLd1pyM1hiNXlPNUpVUDhBVWN0UXFcclxuIgorIk5iOENMbFp5dVVDKzUyUkVBQXRoZFdnc1grN2RKTzR5YWJ6VWNRMjJUcDlKU0QwaGlMNDNCbGtXWVVOSzNkQW9cclxuIgorIlBabG1pcHRqbnpWVGpnMU14c0JTeWRaaW5XT0xCVjgvSlFneFNQbzJ5RDR1RWZpZzI4cWJ2UTJ3TkluMHBuQWJcclxuIgorIkd4blNBT2F6a29uZ0VHZnZjaklJcytMWk45Z1hGaHhjT2g2a2M0US9jOTlCN1FXRVR3TExrWWdaK3oxYTlWWTlcclxuIgorImdFVTdDd0N4WUNEK2g5aFk2RlBtc0swL2xDNE83YWVSS3BZcTAwclBQeHM2aTdwaGlleGc2YXg2eVRNbUFyUXFcclxuIgorIlFtSzNUQXNKbThWL0o1QVdwTEVWNmpBRmdSR3ltR0dIbm9mMERYelZXWmlkcmNaSldUTnVHRVg5MG5CM2VlMndcclxuIgorIlBYSkVGV0tvRDNLM2FGY1NMZEhZcjNtTEd4UDdIOVRoUWFpOVZzeWN4WktTNWt3dkJLUS8vWU1ybUZmd1BrOHhcclxuIgorInZUZVk0S1pNYVVydmVFZWw1dFdaQzk0UlNNS2d4UjZjeUUxbkJYeVRRbkRPR2JmcE5OZ0JLeHlLYklOV29PSlVcclxuIgorIldKWkF3bHNRbitRekNEd3ByaTcrc1YxbVMzZ0JFNlVZN2FRbW5taWlhQzJWM0hicGh4Y3QvZW41UXNmRE90MVhcclxuIgorIkpjelNmcFJXTGxiUHpuWmc4T1FoL1ZnQ01BNThONURqT3pUSUs3c0pKNXIrOTRaQlRDcGdBTWJGNTg4ZjBOVFJcclxuIgorIktDZTR5cnhHSlI3WDAyTTRudkQ0SXdPbHBzUTh4UXhadE9TZ1h2NExreHZkVTlYSkpLV1ovWE5LSmVXenR4U2VcclxuIgorIloxdmRUYzJZZnNEQkEyU0V2MzN2eEh4MmcxdnF0dzhTakRSVDJSYVFTUzBRdVNhTUppbWRPWDZtVE9DQktrMUpcclxuIgorIjlRNW1YVHJFUisvTG5LMGpFbVhzQlhXQTVicXFWWkl5YWhYU3g0VllaN2w3dy9QSGlVRHREZ3lSaE1NS2k0bjJcclxuIgorImlRdlFjV1NRVGpycG5sSmJjYTEvRGtwUnQzWXdydkp3ZHFiOGFzWlUyVnJORVRoNXgwUVZlZkRSTEZpVnBpZi9cclxuIgorInRVYWVBZS9QMUY4T2tTN09JWkRzMVNVYnYvc0Qydk1iaE5rVW9DbXMzL1B2TnRkbnZnTDRGMHpoYURwS0NtbFRcclxuIgorIlA4dng0OUU3djVDeVJObUVEOXpaZzRvM3dtTXFyUU85M1B0VHVnM0V1OW9WeDF6UFFNMU5WTXlCYTIrZjI5RExcclxuIgorIjFudVRDZVhkbzkrbmk0NXh4K2pBSTREQ3dyUmRoSjl1elp5QzY5NjJIMzdINkQrNW5hTnZDbEZSMXM2bGkxR2JcclxuIgorIm5xUG9peS9PQnNFeDlDYURHY3FRQnA1V21lLzNYVys2ejFJU094K2lnd05UVkNUMTRtSGRCTWJ5YTBlSUtmdDVcclxuIgorIlgrR253dGdFTXlDWXl5V3VVY3Q4ZzRSekVyY1k5K3lXOU9tNUh6cHg0ek91VzROUFpnUERUZ0srdDJSU0wvWXFcclxuIgorInJFMW5qcmdlR1ljVmVHM2YrT2Z0SDRzNmZQYnE3dDFBNVpnVXNjYkxNQnFyOXRLK09xeWdSNEVnS0JQc0g2Q3pcclxuIgorIkw2emx2LzJSVjBxQUh2VnVESmNJRElnd1k1ckp0SU5FbTMycmhPZUZOSndaUzVNTklDMWN6WFp4NS8vdWdYN2xcclxuIgorIkk0c3k1bmJWaHdTanRBazhYZzVkWmJkVFo2bUlyYjd4cUgrZmRha1pvcjFraEc3YkMydUl3aWJEM2NTbDJYa1JcclxuIgorIndONDhsc2xiSG5xcWFncjZYbTFuTk9TVmw4Qy82a2JKRXNNcExoQWV6ZlJ0R3d2T3Vjb2FFK1diZVVOb2xHZGVcclxuIgorIlAvZVFpZGRTZjBicm5waUxKUmg3cVpybDlYdXFZZHBVcW5vRWRNQWZvdERPSUQ4T3RWN2d0OGE0OGFkOFZQVzJcclxuIgorIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXHJcbiI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2FbXSA9ICJQb2xhclNTTFRlc3QiOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9zcnZfY3J0X3JzYVtdID0KKyItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cclxuIgorIk1JSUROekNDQWgrZ0F3SUJBZ0lCQWpBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJcclxuIgorIk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY05cclxuIgorIk1URXdNakV5TVRRME5EQTJXaGNOTWpFd01qRXlNVFEwTkRBMldqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdcclxuIgorIkExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQ0FTSXdEUVlKS29aSWh2Y05cclxuIgorIkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRk5vOTNuelIzUkJOZEpjcmlackE1NDVEbzhTczg2RXhiUVd1VE5cclxuIgorIm93Q0lwKzRlYTVhblVyU1E3eTF5ZWo0a212eTJOS3drOVhmZ0ptU01uTEFvZmFIYTZvem15UnlXdlA3QkJGS3pcclxuIgorIk50U2ordUd4ZHRpUXdXRzBabEkyb2laVHFxdDBYZ2Q5R1lMYkt0Z2ZvTmtOSEMxSlp2ZGJKWE5HNkF1S1Qya01cclxuIgorInRRQ1E0ZHFDRUdaOXJsUXJpMlY1a2FIaVljUE5RRWtJN21nTThZdUcwa2EvMExpcUVRTWVmMWFvR2g1RUdBOFBcclxuIgorImhZdmFpMFJlNGhqR1lpL0habzM2WGRoOTh5ZUpLUUhGa0E0L0ovRXd5RW9PNzliZXg4Y25hOGNGUFhyRUFqeWFcclxuIgorIkhUNFA2RFNZVzh0elMxS1cyQkdpTElDSWFUbGEwdyt3M2xrdkVjZjM2aElCTUpjQ0F3RUFBYU5OTUVzd0NRWURcclxuIgorIlZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVXBRWG9aTGpjMzJBUFVCSk5ZS2hrcjAyTFE1TXdId1lEVlIwakJCZ3dcclxuIgorIkZvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUp4blhDbFlcclxuIgorIm9Ia2JwNzBjcUJyc0dYTHliQTc0Y3piTzVSZExFZ0ZzN3JIVlM5citjMjkzbHVTL0tkbGlMU2NacUF6WVZ5bHdcclxuIgorIlVmUld2S01vV2hIWUtwM2RFSVM0eFRYazYvNXpYeGh2OVJ3OFNHYzhxbjZ2SVRIazFTMW1QZXZ0ZWtnYXNZNVlcclxuIgorImlXUXVNM2g0WVZsUkgzSEhFTUFEMVRuQWV4ZlhISERGUUdlK0JkMWlBYnoxL3NIOUg4bDRTdHdYNmVndlRLM01cclxuIgorIndYUndrS2t2akthRURBOUFUYlp4MG1JOExHc3hTdUNxZTlyOWR5am10dGQ0N0oxcDFSdWx6M0NMemFSY1ZJdVNcclxuIgorIlJSUWZhRDhuZU05YzFTL2lKL2FtVFZxSnhBMUtPZE9TNTc4MFdoUGZTQXJBK2c0cUFtU2plbGMzcDR3V3BoYThcclxuIgorInpodVl3alZ1WDZKSEcwYz1cclxuIgorIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS1cclxuIjsKKworY29uc3QgY2hhciBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2FbXSA9CisiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iCisiTUlJRXBBSUJBQUtDQVFFQXdVMmozZWZOSGRFRTEwbHl1Sm1zRG5qa09qeEt6em9URnRCYTVNMmpBSWluN2g1clxyXG4iCisibHFkU3RKRHZMWEo2UGlTYS9MWTByQ1QxZCtBbVpJeWNzQ2g5b2RycWpPYkpISmE4L3NFRVVyTTIxS1A2NGJGMlxyXG4iCisiMkpEQlliUm1VamFpSmxPcXEzUmVCMzBaZ3RzcTJCK2cyUTBjTFVsbTkxc2xjMGJvQzRwUGFReTFBSkRoMm9JUVxyXG4iCisiWm4ydVZDdUxaWG1Sb2VKaHc4MUFTUWp1YUF6eGk0YlNSci9RdUtvUkF4NS9WcWdhSGtRWUR3K0ZpOXFMUkY3aVxyXG4iCisiR01aaUw4ZG1qZnBkMkgzeko0a3BBY1dRRGo4bjhURElTZzd2MXQ3SHh5ZHJ4d1U5ZXNRQ1BKb2RQZy9vTkpoYlxyXG4iCisieTNOTFVwYllFYUlzZ0locE9WclREN0RlV1M4UngvZnFFZ0V3bHdJREFRQUJBb0lCQVFDWFIwUzhFSUhGR09SWlxyXG4iCisiKytBdE9nNmVFTnhEK3hWczBmMUllR3o1N1RqbzNRblhYN1ZCWk5kaitwMUVDdmhDRS9HN1hua2dVNWhMWlgrR1xyXG4iCisiWjBqa3ovdHFKT0kwdlJTZExCYmlwSG5Xb3V5QlE0ZS9BMXlJSmRsQnRxWHhKMUtFL2l0dUhSYk5jNGo0a0w4WlxyXG4iCisiL3I2cHZ3blRJMFBTeDJFcXMwNDhZZFM5MkxUNnFBdjRmbGJORHhNbjJ1WTdzNHljUzRROHcxSlhuQ2VhQW5ZbVxyXG4iCisiV1lJNXd4TytidlJFTFIyTWN6NURtVm5MOGpSeW1sNmw2NTgyYlN2NW91ZlJlRklieVBaYlFXbFhnWW5wdTZIZVxyXG4iCisiR1RjN0UxektZUUdHLzkrRFFVbC8xdlF1Q1BxUXdueTB0UW9YMnc1dGRZcGRNZFZtK3prTHRiYWp6ZFR2aUpKYVxyXG4iCisiVFd6TDZsdDVBb0dCQU44NitTVmVKRGNtUUpjdjRFcTZVaHRScjRRR01pUU16MFNvZDZldHRZeFl6TWd4dHcyOFxyXG4iCisiQ0lyZ3BvekNjK1VhWkpMbzdVeHZDNmFuODVyMWIybktQQ0xRRmFnZ0owSDRRMEovc1pPaEJJWGFvQnpXeHZlS1xyXG4iCisibnVwY2VLZFZ4R3NGaThDRHk4NkRCZml5Rml2ZkJqKzQ3QmJhUXpQQmo3QzRySzdVbExqYWIyckRBb0dCQU4ydVxyXG4iCisiQU0yZ2Nob0ZpdTR2MUhGTDhEN2x3ZUVwaTZabk1Kam5FdS9kRWdHUUpGandkcExuUGJzajRjNzVvZFE0R3o4Z1xyXG4iCisic3c5bGFvOVZWemJ1c29SRS9KR0k0YVRkTzBwQVRYeUc3ZUcxUXUrNVljMVlHWGNDcmxpQTJ4TTl4eCtkN2Yrc1xyXG4iCisibVB6TitXSUVnNUdKRFlaRGpBekhHNUJOdmkvRmZNMUM5ZE90anYyZEFvR0FGMHQ1S213YmpXSEJoY1ZxTzRJY1xyXG4iCisiQlZ2TjNCSWxjMXVlMllSWEVEbHhZNWIwcjhONFhjZU1nS21XMThPSEFwWnhmbDh1UERhdVdaTFhPZ2w0dWVwdlxyXG4iCisid2haQzNFdVdyU3l5SUNOaExZMjFBaDdoYklFQlBGM0wzWnNPd0MrVUVyTCtkWFdMZEI1NkpneTNnWmFCZVc3YlxyXG4iCisidkRyRW5vY0picUNtN0l1a2hYSE9CSzhDZ1lFQXdxZEhCMGhxeU5TeklPR1k3djlhYnpCNnBVZEEzQlppUXZFc1xyXG4iCisiM0xqSFZkNEhQSjJ4ME44Q2dyQklXT0UwcTgrMGhTTW1lRTk2V1cvN2pEM2ZQV3dDUjV6bFhrbnhCUXNmdjBnUFxyXG4iCisiM0JDNVBSMFFkeXB6K2QrOXpmTWY2MjVreWl0NFQvaHp3aER2ZVpVekhuazFDZitJRzdRK1RPRW5MbldBV0JFRFxyXG4iCisiSVNPV21yVUNnWUFGRW1SeGd3QWMvdStENnQwc3lDd0FZaDZQT3RzY3E5WTBpOUd5V2s4OU56Z0M0TmR3d2JCSFxyXG4iCisiNEFnYWhPeEl4WHgyZ3hKbnEzeWZrSmZJandmMHMyRHlQMGtZMnk2VWExT2VvbVBlWTltcklTNHRDdURRNkxyRVxyXG4iCisiVEI2bDlWR294Skw0ZnlIblpiOEw1Z0d2bkIxYmJEOGNMNllQYURpT2hjUnNlQzl2QmlFdVZnPT1cclxuIgorIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXHJcbiI7CisKK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhW10gPQorIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxyXG4iCisiTUlJRFB6Q0NBaWVnQXdJQkFnSUJCREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUlxyXG4iCisiTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTlxyXG4iCisiTVRFd01qRXlNVFEwTkRBM1doY05NakV3TWpFeU1UUTBOREEzV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R1xyXG4iCisiQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRU5zYVdWdWRDQXlNSUlCSWpBTlxyXG4iCisiQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeUhURXpMbjV0WG5wUmRrVVlMQjl1NVB5YXg2ZlxyXG4iCisiTTYwTmo0bzhWbVhsM0VUWnpHYUZCOVg0SjdCS05kQmpuZ3B1RzdmYThINnI3Z3dRazRaSkdEVHpxQ3JTVi9VdVxyXG4iCisiMUM5M0tZUmhUWUpRajZlVlNIRDFiazJ5MVJQRDBocnQ1a1BxUWhUcmRPckE3Ui9VVjA2cDg2anQwdURCTUhFd1xyXG4iCisiTWpEVjAvWUkwRlpQUm83eVgvazlaNUdJTUM1Q3N0OTkrK1VNZC8vc01jQjRqNy9DZjhxdGJDSFdqZG1MYW81dlxyXG4iCisiNEp2NEVGYk1zNDRURmVZMEJHYkg3dmsyRG1xVjlnbWFCbWYwWlhINHlxU3hKZUQrUElzMUJHZTY0RTkyaGZ4L1xyXG4iCisiL0RacnRlbk5MUU5pVHJNOUFNK3ZkcUJwVm9OcTBxalU1MUJ4NXJVMkJYY0ZiWHZJNU1UOVROVWhYd0lEQVFBQlxyXG4iCisibzAwd1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlJ4b1FCemNrQXZWSFplTS94U2o3engzV3RHSVRBZlxyXG4iCisiQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU5CZ2txaGtpRzl3MEJBUVVGQUFPQ1xyXG4iCisiQVFFQUFuODZpc0FNOFgrbVZ3SnFlSXR0NkU5c2xoRVFiQW9meWsrZGlIMUxoOFk5aUxsV1FTS2J3L1VYWWp4NVxyXG4iCisiTExQWmNuaW92eEljQVJDL0JqeVpSOWczVXdUSE5HTm0rcndycWExNXZpdU5PRkJjaHlrWC9PcnNrMDJFSDdOUlxyXG4iCisiQWx3NVdMUG9yWWpFRDZjZFZRZ0JsOW90OTNIZEpvZ1JpWEN4RXJNN05DOC9lUDUxMW1qcSt1TERqTEtIOFpQUVxyXG4iCisiOEk0ZWtISm5yb0xzRGtJd1hLR0lzdklCSFF5MmFjL053SExDUU9LNm1mdW0xcFJ4NTJWNFV0dTVkTExqRDViTVxyXG4iCisieE9CQzdLVTR4Wkt1TVhYWk02LzkzWWI1MUsvSjRhaGYxVHhKbFRXWHRuekRyOXNhRVlkTnkyU0tZLzZaaUROSFxyXG4iCisiRCtzdHBBS2lRTEFXYUF1c0lXS1lFeXc5TVE9PVxyXG4iCisiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxyXG4iOworCitjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9jbGlfa2V5X3JzYVtdID0KKyItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXHJcbiIKKyJNSUlFcEFJQkFBS0NBUUVBeUhURXpMbjV0WG5wUmRrVVlMQjl1NVB5YXg2Zk02ME5qNG84Vm1YbDNFVFp6R2FGXHJcbiIKKyJCOVg0SjdCS05kQmpuZ3B1RzdmYThINnI3Z3dRazRaSkdEVHpxQ3JTVi9VdTFDOTNLWVJoVFlKUWo2ZVZTSEQxXHJcbiIKKyJiazJ5MVJQRDBocnQ1a1BxUWhUcmRPckE3Ui9VVjA2cDg2anQwdURCTUhFd01qRFYwL1lJMEZaUFJvN3lYL2s5XHJcbiIKKyJaNUdJTUM1Q3N0OTkrK1VNZC8vc01jQjRqNy9DZjhxdGJDSFdqZG1MYW81djRKdjRFRmJNczQ0VEZlWTBCR2JIXHJcbiIKKyI3dmsyRG1xVjlnbWFCbWYwWlhINHlxU3hKZUQrUElzMUJHZTY0RTkyaGZ4Ly9EWnJ0ZW5OTFFOaVRyTTlBTSt2XHJcbiIKKyJkcUJwVm9OcTBxalU1MUJ4NXJVMkJYY0ZiWHZJNU1UOVROVWhYd0lEQVFBQkFvSUJBR2ROdGZZRGlhcDZienN0XHJcbiIKKyJ5aENpSThtOVR0cmhadzRNaXNhRWFOL2xsM1hTamFPRzJkdlY2eE1aQ01WKzVUZVhESE9BWm5ZMThZaTE4dnp6XHJcbiIKKyI0VXQyVG5ORnppekNFQ1lOYUEyZlNUM1dnSW5ueFVrVjNZWEF5UDZDTnhKYUNtdjJhQTB5RnIya0ZWU2VhS0d0XHJcbiIKKyJ5bXZsak5wMk5Wa3ZtN1RoOGZCUUJPN0k3QVhoejQzazBtUjdYbVBnZXdlOEFwWk9HM2hzdGtPYU12YldBdldBXHJcbiIKKyJ6Q1p1cGREalpZak9KcWxBNGVFQTRIOC93N0Y4M3I1Q3VnZUJFOExnRVJFakxQaXllanJVNUgxZnViRVkraDBkXHJcbiIKKyJsNUhaQko2OHliVFhmUTVVOW8vUUtBM2RkMHRvQkVoaGRSVURHeld0anZ3a0VRZnFGMXJlR1dqL3RvZC9nQ3BmXHJcbiIKKyJERmk2WDBFQ2dZRUE0d092L3BqU0MzdHk2VHVPdktYMnJPVWlCckxYWHYySlN4Wm5Nb01pV0k1aXBMUXQrUllUXHJcbiIKKyJWUGFmTC9tN0RuNk1id2pheU9rY1poQndrNUNOejVBNlE0bEo2NE1xL2xxSHpuUkNRUTJNYzFHOGV5REYvZllMXHJcbiIKKyJaZTJwTHZ3UDlWRDVqVGMybWlEZncrTW52Smh5d1JSTGNlbURGUDhrNGhRVnRtOFBNcDNabU5FQ2dZRUE0Z3o3XHJcbiIKKyJ3ek9iUjRnbjhpYmU2MTd1UVBaald6VWo5ZFVIWWQraW4xZ3dCQ0lydE5uYVJuOUk5VS9RNnRlZ1JZcGlpNHlzXHJcbiIKKyJjMTc2Tm1VK3VteTZYbXVTS1Y1cUQ5YlNwWldHMm5MRm5zbHJOMTVMbTNmaFp4b2VNTmhCYUVEVG5MVDI2eW9pXHJcbiIKKyIzM2dwMG1TU1d5OTRaRXFpcG1zK1VMRjZzWTFadEZXNnRwR0ZveThDZ1lBUUhobm52SmZsSXMya3k0cTEwQjYwXHJcbiIKKyJaY3hGcDNydERwa3AwSnhoRkxoaWl6RnJ1ak10WlNqWU5tNVU3S2tnUFZIaExFTEVVdkNtT25LVHQ0YXAvdlowXHJcbiIKKyJCeEpOZTFHWkgzcFc2U0F2R0RRcGw5c0c3dXUvdlRGUCtsQ3h1a216eEIwRHJyRGN2b3JFa0tNb203WkNDUnZXXHJcbiIKKyJLWnNaNlllSDJaODFCYXVSajIxOGtRS0JnUUNVVi9EZ0tQMjk4NXhEVFQ3OU4wOGpVbzNoVFA1TVZZQ0N1ai8rXHJcbiIKKyJVZUV3MVR2WmN4M0xKYnk3UDZYYWQ2YTEvQnF2ZWFHeUZLSWZFRklhQlVCSXRrODAxc0REcERhWWM0Z0wwMFhjXHJcbiIKKyI3bEZ1QkhPWmt4Sllsc3M1UXJHcHVPRWw5WndVdDVJckZMQmRZYUtxTkh6TlZDMXBDUGZiL0p5SDZEcjJIVXhxXHJcbiIKKyJneFV3QVFLQmdRQ2NVNkcyTDhBRzlkOWMwVXBPeUwxdE12RmU1VHR3MEtqbFFWZHNoMU1QNnlpZ1lvOURZdXd1XHJcbiIKKyJiSEZWVzJyMGRCVHFlZ1AyL0tUT3hLemFIZkMxcWYwUkdEc1VvSkNOSnJkMWN3b0NMRzhQMkVGNHczT0JyS3F2XHJcbiIKKyI4dTR5dFkwRitWbGFuajVsbTNUYW9IU1ZGMStOV1B5T1Rpd2V2SUVDR0t3U3h2bGtpNGZEQUE9PVxyXG4iCisiLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS1cclxuIjsKKworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhX2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2tleV9yc2FfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX2tleV9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfcHdkX3JzYV9sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2FfcHdkX3JzYSApIC0gMTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2FfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2FfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2NydF9yc2FfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2xpX2NydF9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2FfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2EgKTsKKyNlbHNlCisjZGVmaW5lIFRFU1RfQ0FfQ1JUX1JTQQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKy8qIENvbmNhdGVuYXRpb24gb2YgYWxsIGF2YWlsYWJsZSBDQSBjZXJ0aWZpY2F0ZXMgKi8KK2NvbnN0IGNoYXIgbWJlZHRsc190ZXN0X2Nhc19wZW1bXSA9IFRFU1RfQ0FfQ1JUX1JTQSBURVNUX0NBX0NSVF9FQzsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FzX3BlbV9sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYXNfcGVtICk7CisjZW5kaWYKKworLyogTGlzdCBvZiBhbGwgYXZhaWxhYmxlIENBIGNlcnRpZmljYXRlcyAqLworY29uc3QgY2hhciAqIG1iZWR0bHNfdGVzdF9jYXNbXSA9IHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgbWJlZHRsc190ZXN0X2NhX2NydF9yc2EsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjLAorI2VuZGlmCisgICAgTlVMTAorfTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FzX2xlbltdID0geworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhICksCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9jcnRfZWMgKSwKKyNlbmRpZgorICAgIDAKK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCitjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2FfY3J0ICA9IG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NhX2tleSAgPSBtYmVkdGxzX3Rlc3RfY2Ffa2V5X3JzYTsKK2NvbnN0IGNoYXIgKm1iZWR0bHNfdGVzdF9jYV9wd2QgID0gbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2E7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3Rfc3J2X2NydCA9IG1iZWR0bHNfdGVzdF9zcnZfY3J0X3JzYTsKK2NvbnN0IGNoYXIgKm1iZWR0bHNfdGVzdF9zcnZfa2V5ID0gbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X2NsaV9jcnQgPSBtYmVkdGxzX3Rlc3RfY2xpX2NydF9yc2E7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2xpX2tleSA9IG1iZWR0bHNfdGVzdF9jbGlfa2V5X3JzYTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2FfY3J0X2xlbiAgPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jYV9jcnRfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NhX2tleV9sZW4gID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2Ffa2V5X3JzYSApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9wd2RfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2EgKSAtIDE7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9jcnRfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2EgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9zcnZfa2V5X3JzYSApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfY3J0X2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9jcnRfcnNhICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2NsaV9rZXlfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9yc2EgKTsKKyNlbHNlIC8qICEgTUJFRFRMU19SU0FfQywgc28gTUJFRFRMU19FQ0RTQV9DICovCitjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2FfY3J0ICA9IG1iZWR0bHNfdGVzdF9jYV9jcnRfZWM7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2Ffa2V5ICA9IG1iZWR0bHNfdGVzdF9jYV9rZXlfZWM7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2FfcHdkICA9IG1iZWR0bHNfdGVzdF9jYV9wd2RfZWM7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3Rfc3J2X2NydCA9IG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjOworY29uc3QgY2hhciAqbWJlZHRsc190ZXN0X3Nydl9rZXkgPSBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lYzsKK2NvbnN0IGNoYXIgKm1iZWR0bHNfdGVzdF9jbGlfY3J0ID0gbWJlZHRsc190ZXN0X2NsaV9jcnRfZWM7Citjb25zdCBjaGFyICptYmVkdGxzX3Rlc3RfY2xpX2tleSA9IG1iZWR0bHNfdGVzdF9jbGlfa2V5X2VjOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9jcnRfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX2NydF9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9rZXlfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX2tleV9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jYV9wd2RfbGVuICA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NhX3B3ZF9lYyApIC0gMTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjICk7Citjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X3Nydl9rZXlfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9lYyApOworY29uc3Qgc2l6ZV90IG1iZWR0bHNfdGVzdF9jbGlfY3J0X2xlbiA9IHNpemVvZiggbWJlZHRsc190ZXN0X2NsaV9jcnRfZWMgKTsKK2NvbnN0IHNpemVfdCBtYmVkdGxzX3Rlc3RfY2xpX2tleV9sZW4gPSBzaXplb2YoIG1iZWR0bHNfdGVzdF9jbGlfa2V5X2VjICk7CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19DRVJUU19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jaXBoZXIuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2NpcGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODM0MzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jaXBoZXIuYwpAQCAtMCwwICsxLDkxNyBAQAorLyoqCisgKiBcZmlsZSBjaXBoZXIuYworICoKKyAqIFxicmllZiBHZW5lcmljIGNpcGhlciB3cmFwcGVyIGZvciBtYmVkIFRMUworICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyLmgiCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXJfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyNpbmNsdWRlICJtYmVkdGxzL2NjbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvY21hYy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgZnJlZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorI2RlZmluZSBNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTQorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciopdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCitzdGF0aWMgaW50IHN1cHBvcnRlZF9pbml0ID0gMDsKKworY29uc3QgaW50ICptYmVkdGxzX2NpcGhlcl9saXN0KCB2b2lkICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uX3QgKmRlZjsKKyAgICBpbnQgKnR5cGU7CisKKyAgICBpZiggISBzdXBwb3J0ZWRfaW5pdCApCisgICAgeworICAgICAgICBkZWYgPSBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uczsKKyAgICAgICAgdHlwZSA9IG1iZWR0bHNfY2lwaGVyX3N1cHBvcnRlZDsKKworICAgICAgICB3aGlsZSggZGVmLT50eXBlICE9IDAgKQorICAgICAgICAgICAgKnR5cGUrKyA9ICgqZGVmKyspLnR5cGU7CisKKyAgICAgICAgKnR5cGUgPSAwOworCisgICAgICAgIHN1cHBvcnRlZF9pbml0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4oIG1iZWR0bHNfY2lwaGVyX3N1cHBvcnRlZCApOworfQorCitjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKm1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjb25zdCBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX3R5cGUgKQoreworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdCAqZGVmOworCisgICAgZm9yKCBkZWYgPSBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uczsgZGVmLT5pbmZvICE9IE5VTEw7IGRlZisrICkKKyAgICAgICAgaWYoIGRlZi0+dHlwZSA9PSBjaXBoZXJfdHlwZSApCisgICAgICAgICAgICByZXR1cm4oIGRlZi0+aW5mbyApOworCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3N0cmluZyggY29uc3QgY2hhciAqY2lwaGVyX25hbWUgKQoreworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdCAqZGVmOworCisgICAgaWYoIE5VTEwgPT0gY2lwaGVyX25hbWUgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIGZvciggZGVmID0gbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnM7IGRlZi0+aW5mbyAhPSBOVUxMOyBkZWYrKyApCisgICAgICAgIGlmKCAhICBzdHJjbXAoIGRlZi0+aW5mby0+bmFtZSwgY2lwaGVyX25hbWUgKSApCisgICAgICAgICAgICByZXR1cm4oIGRlZi0+aW5mbyApOworCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3ZhbHVlcyggY29uc3QgbWJlZHRsc19jaXBoZXJfaWRfdCBjaXBoZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfbW9kZV90IG1vZGUgKQoreworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdCAqZGVmOworCisgICAgZm9yKCBkZWYgPSBtYmVkdGxzX2NpcGhlcl9kZWZpbml0aW9uczsgZGVmLT5pbmZvICE9IE5VTEw7IGRlZisrICkKKyAgICAgICAgaWYoIGRlZi0+aW5mby0+YmFzZS0+Y2lwaGVyID09IGNpcGhlcl9pZCAmJgorICAgICAgICAgICAgZGVmLT5pbmZvLT5rZXlfYml0bGVuID09ICh1bnNpZ25lZCkga2V5X2JpdGxlbiAmJgorICAgICAgICAgICAgZGVmLT5pbmZvLT5tb2RlID09IG1vZGUgKQorICAgICAgICAgICAgcmV0dXJuKCBkZWYtPmluZm8gKTsKKworICAgIHJldHVybiggTlVMTCApOworfQorCit2b2lkIG1iZWR0bHNfY2lwaGVyX2luaXQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKSApOworfQorCit2b2lkIG1iZWR0bHNfY2lwaGVyX2ZyZWUoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorICAgIGlmKCBjdHgtPmNtYWNfY3R4ICkKKyAgICB7CisgICAgICAgbWJlZHRsc196ZXJvaXplKCBjdHgtPmNtYWNfY3R4LCBzaXplb2YoIG1iZWR0bHNfY21hY19jb250ZXh0X3QgKSApOworICAgICAgIG1iZWR0bHNfZnJlZSggY3R4LT5jbWFjX2N0eCApOworICAgIH0KKyNlbmRpZgorCisgICAgaWYoIGN0eC0+Y2lwaGVyX2N0eCApCisgICAgICAgIGN0eC0+Y2lwaGVyX2luZm8tPmJhc2UtPmN0eF9mcmVlX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZihtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QpICk7Cit9CisKK2ludCBtYmVkdGxzX2NpcGhlcl9zZXR1cCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm8gKQoreworICAgIGlmKCBOVUxMID09IGNpcGhlcl9pbmZvIHx8IE5VTEwgPT0gY3R4ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCApICk7CisKKyAgICBpZiggTlVMTCA9PSAoIGN0eC0+Y2lwaGVyX2N0eCA9IGNpcGhlcl9pbmZvLT5iYXNlLT5jdHhfYWxsb2NfZnVuYygpICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQgKTsKKworICAgIGN0eC0+Y2lwaGVyX2luZm8gPSBjaXBoZXJfaW5mbzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisgICAgLyoKKyAgICAgKiBJZ25vcmUgcG9zc2libGUgZXJyb3JzIGNhdXNlZCBieSBhIGNpcGhlciBtb2RlIHRoYXQgZG9lc24ndCB1c2UgcGFkZGluZworICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNykKKyAgICAodm9pZCkgbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSggY3R4LCBNQkVEVExTX1BBRERJTkdfUEtDUzcgKTsKKyNlbHNlCisgICAgKHZvaWQpIG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoIGN0eCwgTUJFRFRMU19QQURESU5HX05PTkUgKTsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HICovCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX3NldGtleSggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgaW50IGtleV9iaXRsZW4sIGNvbnN0IG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIGN0eC0+Y2lwaGVyX2luZm8tPmZsYWdzICYgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiApID09IDAgJiYKKyAgICAgICAgKGludCkgY3R4LT5jaXBoZXJfaW5mby0+a2V5X2JpdGxlbiAhPSBrZXlfYml0bGVuICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgY3R4LT5rZXlfYml0bGVuID0ga2V5X2JpdGxlbjsKKyAgICBjdHgtPm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKKworICAgIC8qCisgICAgICogRm9yIENGQiBhbmQgQ1RSIG1vZGUgYWx3YXlzIHVzZSB0aGUgZW5jcnlwdGlvbiBrZXkgc2NoZWR1bGUKKyAgICAgKi8KKyAgICBpZiggTUJFRFRMU19FTkNSWVBUID09IG9wZXJhdGlvbiB8fAorICAgICAgICBNQkVEVExTX01PREVfQ0ZCID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgfHwKKyAgICAgICAgTUJFRFRMU19NT0RFX0NUUiA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgIHJldHVybiBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5zZXRrZXlfZW5jX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwga2V5LAorICAgICAgICAgICAgICAgIGN0eC0+a2V5X2JpdGxlbiApOworICAgIH0KKworICAgIGlmKCBNQkVEVExTX0RFQ1JZUFQgPT0gb3BlcmF0aW9uICkKKyAgICAgICAgcmV0dXJuIGN0eC0+Y2lwaGVyX2luZm8tPmJhc2UtPnNldGtleV9kZWNfZnVuYyggY3R4LT5jaXBoZXJfY3R4LCBrZXksCisgICAgICAgICAgICAgICAgY3R4LT5rZXlfYml0bGVuICk7CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworfQorCitpbnQgbWJlZHRsc19jaXBoZXJfc2V0X2l2KCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiApCit7CisgICAgc2l6ZV90IGFjdHVhbF9pdl9zaXplOworCisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyB8fCBOVUxMID09IGl2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qIGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyBpbiBjdHgtPml2ICovCisgICAgaWYoIGl2X2xlbiA+IE1CRURUTFNfTUFYX0lWX0xFTkdUSCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIGlmKCAoIGN0eC0+Y2lwaGVyX2luZm8tPmZsYWdzICYgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOICkgIT0gMCApCisgICAgICAgIGFjdHVhbF9pdl9zaXplID0gaXZfbGVuOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFjdHVhbF9pdl9zaXplID0gY3R4LT5jaXBoZXJfaW5mby0+aXZfc2l6ZTsKKworICAgICAgICAvKiBhdm9pZCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCBidWZmZXIgKi8KKyAgICAgICAgaWYoIGFjdHVhbF9pdl9zaXplID4gaXZfbGVuICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgbWVtY3B5KCBjdHgtPml2LCBpdiwgYWN0dWFsX2l2X3NpemUgKTsKKyAgICBjdHgtPml2X3NpemUgPSBhY3R1YWxfaXZfc2l6ZTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19jaXBoZXJfcmVzZXQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4ICkKK3sKKyAgICBpZiggTlVMTCA9PSBjdHggfHwgTlVMTCA9PSBjdHgtPmNpcGhlcl9pbmZvICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGN0eC0+dW5wcm9jZXNzZWRfbGVuID0gMDsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQoraW50IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWQsIHNpemVfdCBhZF9sZW4gKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIE1CRURUTFNfTU9ERV9HQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICByZXR1cm4gbWJlZHRsc19nY21fc3RhcnRzKCAobWJlZHRsc19nY21fY29udGV4dCAqKSBjdHgtPmNpcGhlcl9jdHgsIGN0eC0+b3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5pdiwgY3R4LT5pdl9zaXplLCBhZCwgYWRfbGVuICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCitpbnQgbWJlZHRsc19jaXBoZXJfdXBkYXRlKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBibG9ja19zaXplID0gMDsKKworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gfHwgTlVMTCA9PSBvbGVuICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgKm9sZW4gPSAwOworICAgIGJsb2NrX3NpemUgPSBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggY3R4ICk7CisKKyAgICBpZiggY3R4LT5jaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfRUNCICkKKyAgICB7CisgICAgICAgIGlmKCBpbGVuICE9IGJsb2NrX3NpemUgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCApOworCisgICAgICAgICpvbGVuID0gaWxlbjsKKworICAgICAgICBpZiggMCAhPSAoIHJldCA9IGN0eC0+Y2lwaGVyX2luZm8tPmJhc2UtPmVjYl9mdW5jKCBjdHgtPmNpcGhlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgIGN0eC0+b3BlcmF0aW9uLCBpbnB1dCwgb3V0cHV0ICkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgaWYoIGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgPT0gTUJFRFRMU19NT0RFX0dDTSApCisgICAgeworICAgICAgICAqb2xlbiA9IGlsZW47CisgICAgICAgIHJldHVybiBtYmVkdGxzX2djbV91cGRhdGUoIChtYmVkdGxzX2djbV9jb250ZXh0ICopIGN0eC0+Y2lwaGVyX2N0eCwgaWxlbiwgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICggMCA9PSBibG9ja19zaXplICkKKyAgICB7CisgICAgICAgIHJldHVybiBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9DT05URVhUOworICAgIH0KKworICAgIGlmKCBpbnB1dCA9PSBvdXRwdXQgJiYKKyAgICAgICAoIGN0eC0+dW5wcm9jZXNzZWRfbGVuICE9IDAgfHwgaWxlbiAlIGJsb2NrX3NpemUgKSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgaWYoIGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgPT0gTUJFRFRMU19NT0RFX0NCQyApCisgICAgeworICAgICAgICBzaXplX3QgY29weV9sZW4gPSAwOworCisgICAgICAgIC8qCisgICAgICAgICAqIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggZGF0YSBmb3IgYSBmdWxsIGJsb2NrLCBjYWNoZSBpdC4KKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIGN0eC0+b3BlcmF0aW9uID09IE1CRURUTFNfREVDUllQVCAmJgorICAgICAgICAgICAgICAgIGlsZW4gKyBjdHgtPnVucHJvY2Vzc2VkX2xlbiA8PSBibG9ja19zaXplICkgfHwKKyAgICAgICAgICAgICAoIGN0eC0+b3BlcmF0aW9uID09IE1CRURUTFNfRU5DUllQVCAmJgorICAgICAgICAgICAgICAgIGlsZW4gKyBjdHgtPnVucHJvY2Vzc2VkX2xlbiA8IGJsb2NrX3NpemUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggJiggY3R4LT51bnByb2Nlc3NlZF9kYXRhW2N0eC0+dW5wcm9jZXNzZWRfbGVuXSApLCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgaWxlbiApOworCisgICAgICAgICAgICBjdHgtPnVucHJvY2Vzc2VkX2xlbiArPSBpbGVuOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBQcm9jZXNzIGNhY2hlZCBkYXRhIGZpcnN0CisgICAgICAgICAqLworICAgICAgICBpZiggMCAhPSBjdHgtPnVucHJvY2Vzc2VkX2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvcHlfbGVuID0gYmxvY2tfc2l6ZSAtIGN0eC0+dW5wcm9jZXNzZWRfbGVuOworCisgICAgICAgICAgICBtZW1jcHkoICYoIGN0eC0+dW5wcm9jZXNzZWRfZGF0YVtjdHgtPnVucHJvY2Vzc2VkX2xlbl0gKSwgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuICk7CisKKyAgICAgICAgICAgIGlmKCAwICE9ICggcmV0ID0gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+Y2JjX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5vcGVyYXRpb24sIGJsb2NrX3NpemUsIGN0eC0+aXYsCisgICAgICAgICAgICAgICAgICAgIGN0eC0+dW5wcm9jZXNzZWRfZGF0YSwgb3V0cHV0ICkgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKm9sZW4gKz0gYmxvY2tfc2l6ZTsKKyAgICAgICAgICAgIG91dHB1dCArPSBibG9ja19zaXplOworICAgICAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9sZW4gPSAwOworCisgICAgICAgICAgICBpbnB1dCArPSBjb3B5X2xlbjsKKyAgICAgICAgICAgIGlsZW4gLT0gY29weV9sZW47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDYWNoZSBmaW5hbCwgaW5jb21wbGV0ZSBibG9jaworICAgICAgICAgKi8KKyAgICAgICAgaWYoIDAgIT0gaWxlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAwID09IGJsb2NrX3NpemUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9DT05URVhUOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb3B5X2xlbiA9IGlsZW4gJSBibG9ja19zaXplOworICAgICAgICAgICAgaWYoIGNvcHlfbGVuID09IDAgJiYgY3R4LT5vcGVyYXRpb24gPT0gTUJFRFRMU19ERUNSWVBUICkKKyAgICAgICAgICAgICAgICBjb3B5X2xlbiA9IGJsb2NrX3NpemU7CisKKyAgICAgICAgICAgIG1lbWNweSggY3R4LT51bnByb2Nlc3NlZF9kYXRhLCAmKCBpbnB1dFtpbGVuIC0gY29weV9sZW5dICksCisgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuICk7CisKKyAgICAgICAgICAgIGN0eC0+dW5wcm9jZXNzZWRfbGVuICs9IGNvcHlfbGVuOworICAgICAgICAgICAgaWxlbiAtPSBjb3B5X2xlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFByb2Nlc3MgcmVtYWluaW5nIGZ1bGwgYmxvY2tzCisgICAgICAgICAqLworICAgICAgICBpZiggaWxlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAwICE9ICggcmV0ID0gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+Y2JjX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5vcGVyYXRpb24sIGlsZW4sIGN0eC0+aXYsIGlucHV0LCBvdXRwdXQgKSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqb2xlbiArPSBpbGVuOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIGlmKCBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9DRkIgKQorICAgIHsKKyAgICAgICAgaWYoIDAgIT0gKCByZXQgPSBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5jZmJfZnVuYyggY3R4LT5jaXBoZXJfY3R4LAorICAgICAgICAgICAgICAgIGN0eC0+b3BlcmF0aW9uLCBpbGVuLCAmY3R4LT51bnByb2Nlc3NlZF9sZW4sIGN0eC0+aXYsCisgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCApICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgKm9sZW4gPSBpbGVuOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBpZiggY3R4LT5jaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfQ1RSICkKKyAgICB7CisgICAgICAgIGlmKCAwICE9ICggcmV0ID0gY3R4LT5jaXBoZXJfaW5mby0+YmFzZS0+Y3RyX2Z1bmMoIGN0eC0+Y2lwaGVyX2N0eCwKKyAgICAgICAgICAgICAgICBpbGVuLCAmY3R4LT51bnByb2Nlc3NlZF9sZW4sIGN0eC0+aXYsCisgICAgICAgICAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9kYXRhLCBpbnB1dCwgb3V0cHV0ICkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAqb2xlbiA9IGlsZW47CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIGlmKCBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgaWYoIDAgIT0gKCByZXQgPSBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5zdHJlYW1fZnVuYyggY3R4LT5jaXBoZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlsZW4sIGlucHV0LCBvdXRwdXQgKSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgICpvbGVuID0gaWxlbjsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0gKi8KKworICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3KQorLyoKKyAqIFBLQ1M3IChhbmQgUEtDUzUpIHBhZGRpbmc6IGZpbGwgd2l0aCBsbCBieXRlcywgd2l0aCBsbCA9IHBhZGRpbmdfbGVuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9wa2NzX3BhZGRpbmcoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9sZW4sCisgICAgICAgIHNpemVfdCBkYXRhX2xlbiApCit7CisgICAgc2l6ZV90IHBhZGRpbmdfbGVuID0gb3V0cHV0X2xlbiAtIGRhdGFfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgaTsKKworICAgIGZvciggaSA9IDA7IGkgPCBwYWRkaW5nX2xlbjsgaSsrICkKKyAgICAgICAgb3V0cHV0W2RhdGFfbGVuICsgaV0gPSAodW5zaWduZWQgY2hhcikgcGFkZGluZ19sZW47Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BrY3NfcGFkZGluZyggdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgIHNpemVfdCAqZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBpLCBwYWRfaWR4OworICAgIHVuc2lnbmVkIGNoYXIgcGFkZGluZ19sZW4sIGJhZCA9IDA7CisKKyAgICBpZiggTlVMTCA9PSBpbnB1dCB8fCBOVUxMID09IGRhdGFfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHBhZGRpbmdfbGVuID0gaW5wdXRbaW5wdXRfbGVuIC0gMV07CisgICAgKmRhdGFfbGVuID0gaW5wdXRfbGVuIC0gcGFkZGluZ19sZW47CisKKyAgICAvKiBBdm9pZCBsb2dpY2FsIHx8IHNpbmNlIGl0IHJlc3VsdHMgaW4gYSBicmFuY2ggKi8KKyAgICBiYWQgfD0gcGFkZGluZ19sZW4gPiBpbnB1dF9sZW47CisgICAgYmFkIHw9IHBhZGRpbmdfbGVuID09IDA7CisKKyAgICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNoZWNrZWQgbXVzdCBiZSBpbmRlcGVuZGVudCBvZiBwYWRkaW5nX2xlbiwKKyAgICAgKiBzbyBwaWNrIGlucHV0X2xlbiwgd2hpY2ggaXMgdXN1YWxseSA4IG9yIDE2IChvbmUgYmxvY2spICovCisgICAgcGFkX2lkeCA9IGlucHV0X2xlbiAtIHBhZGRpbmdfbGVuOworICAgIGZvciggaSA9IDA7IGkgPCBpbnB1dF9sZW47IGkrKyApCisgICAgICAgIGJhZCB8PSAoIGlucHV0W2ldIF4gcGFkZGluZ19sZW4gKSAqICggaSA+PSBwYWRfaWR4ICk7CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcgKiAoIGJhZCAhPSAwICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3ICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUykKKy8qCisgKiBPbmUgYW5kIHplcm9zIHBhZGRpbmc6IGZpbGwgd2l0aCA4MCAwMCAuLi4gMDAKKyAqLworc3RhdGljIHZvaWQgYWRkX29uZV9hbmRfemVyb3NfcGFkZGluZyggdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dHB1dF9sZW4sIHNpemVfdCBkYXRhX2xlbiApCit7CisgICAgc2l6ZV90IHBhZGRpbmdfbGVuID0gb3V0cHV0X2xlbiAtIGRhdGFfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgaSA9IDA7CisKKyAgICBvdXRwdXRbZGF0YV9sZW5dID0gMHg4MDsKKyAgICBmb3IoIGkgPSAxOyBpIDwgcGFkZGluZ19sZW47IGkrKyApCisgICAgICAgIG91dHB1dFtkYXRhX2xlbiArIGldID0gMHgwMDsKK30KKworc3RhdGljIGludCBnZXRfb25lX2FuZF96ZXJvc19wYWRkaW5nKCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpkYXRhX2xlbiApCit7CisgICAgc2l6ZV90IGk7CisgICAgdW5zaWduZWQgY2hhciBkb25lID0gMCwgcHJldl9kb25lLCBiYWQ7CisKKyAgICBpZiggTlVMTCA9PSBpbnB1dCB8fCBOVUxMID09IGRhdGFfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGJhZCA9IDB4RkY7CisgICAgKmRhdGFfbGVuID0gMDsKKyAgICBmb3IoIGkgPSBpbnB1dF9sZW47IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgcHJldl9kb25lID0gZG9uZTsKKyAgICAgICAgZG9uZSB8PSAoIGlucHV0W2ktMV0gIT0gMCApOworICAgICAgICAqZGF0YV9sZW4gfD0gKCBpIC0gMSApICogKCBkb25lICE9IHByZXZfZG9uZSApOworICAgICAgICBiYWQgJj0gKCBpbnB1dFtpLTFdIF4gMHg4MCApIHwgKCBkb25lID09IHByZXZfZG9uZSApOworICAgIH0KKworICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORyAqICggYmFkICE9IDAgKSApOworCit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTikKKy8qCisgKiBaZXJvcyBhbmQgbGVuIHBhZGRpbmc6IGZpbGwgd2l0aCAwMCAuLi4gMDAgbGwsIHdoZXJlIGxsIGlzIHBhZGRpbmcgbGVuZ3RoCisgKi8KK3N0YXRpYyB2b2lkIGFkZF96ZXJvc19hbmRfbGVuX3BhZGRpbmcoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbGVuLCBzaXplX3QgZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBwYWRkaW5nX2xlbiA9IG91dHB1dF9sZW4gLSBkYXRhX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGkgPSAwOworCisgICAgZm9yKCBpID0gMTsgaSA8IHBhZGRpbmdfbGVuOyBpKysgKQorICAgICAgICBvdXRwdXRbZGF0YV9sZW4gKyBpIC0gMV0gPSAweDAwOworICAgIG91dHB1dFtvdXRwdXRfbGVuIC0gMV0gPSAodW5zaWduZWQgY2hhcikgcGFkZGluZ19sZW47Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3plcm9zX2FuZF9sZW5fcGFkZGluZyggdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBpLCBwYWRfaWR4OworICAgIHVuc2lnbmVkIGNoYXIgcGFkZGluZ19sZW4sIGJhZCA9IDA7CisKKyAgICBpZiggTlVMTCA9PSBpbnB1dCB8fCBOVUxMID09IGRhdGFfbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHBhZGRpbmdfbGVuID0gaW5wdXRbaW5wdXRfbGVuIC0gMV07CisgICAgKmRhdGFfbGVuID0gaW5wdXRfbGVuIC0gcGFkZGluZ19sZW47CisKKyAgICAvKiBBdm9pZCBsb2dpY2FsIHx8IHNpbmNlIGl0IHJlc3VsdHMgaW4gYSBicmFuY2ggKi8KKyAgICBiYWQgfD0gcGFkZGluZ19sZW4gPiBpbnB1dF9sZW47CisgICAgYmFkIHw9IHBhZGRpbmdfbGVuID09IDA7CisKKyAgICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNoZWNrZWQgbXVzdCBiZSBpbmRlcGVuZGVudCBvZiBwYWRkaW5nX2xlbiAqLworICAgIHBhZF9pZHggPSBpbnB1dF9sZW4gLSBwYWRkaW5nX2xlbjsKKyAgICBmb3IoIGkgPSAwOyBpIDwgaW5wdXRfbGVuIC0gMTsgaSsrICkKKyAgICAgICAgYmFkIHw9IGlucHV0W2ldICogKCBpID49IHBhZF9pZHggKTsKKworICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORyAqICggYmFkICE9IDAgKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TKQorLyoKKyAqIFplcm8gcGFkZGluZzogZmlsbCB3aXRoIDAwIC4uLiAwMAorICovCitzdGF0aWMgdm9pZCBhZGRfemVyb3NfcGFkZGluZyggdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbGVuLCBzaXplX3QgZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yKCBpID0gZGF0YV9sZW47IGkgPCBvdXRwdXRfbGVuOyBpKysgKQorICAgICAgICBvdXRwdXRbaV0gPSAweDAwOworfQorCitzdGF0aWMgaW50IGdldF96ZXJvc19wYWRkaW5nKCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YV9sZW4gKQoreworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIGNoYXIgZG9uZSA9IDAsIHByZXZfZG9uZTsKKworICAgIGlmKCBOVUxMID09IGlucHV0IHx8IE5VTEwgPT0gZGF0YV9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgKmRhdGFfbGVuID0gMDsKKyAgICBmb3IoIGkgPSBpbnB1dF9sZW47IGkgPiAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgcHJldl9kb25lID0gZG9uZTsKKyAgICAgICAgZG9uZSB8PSAoIGlucHV0W2ktMV0gIT0gMCApOworICAgICAgICAqZGF0YV9sZW4gfD0gaSAqICggZG9uZSAhPSBwcmV2X2RvbmUgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TICovCisKKy8qCisgKiBObyBwYWRkaW5nOiBkb24ndCBwYWQgOikKKyAqCisgKiBUaGVyZSBpcyBubyBhZGRfcGFkZGluZyBmdW5jdGlvbiAoY2hlY2sgZm9yIE5VTEwgaW4gbWJlZHRsc19jaXBoZXJfZmluaXNoKQorICogYnV0IGEgdHJpdmlhbCBnZXRfcGFkZGluZyBmdW5jdGlvbgorICovCitzdGF0aWMgaW50IGdldF9ub19wYWRkaW5nKCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZGF0YV9sZW4gKQoreworICAgIGlmKCBOVUxMID09IGlucHV0IHx8IE5VTEwgPT0gZGF0YV9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgKmRhdGFfbGVuID0gaW5wdXRfbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcgKi8KKworaW50IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4gKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gfHwgTlVMTCA9PSBvbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBNQkVEVExTX01PREVfQ0ZCID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgfHwKKyAgICAgICAgTUJFRFRMU19NT0RFX0NUUiA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlIHx8CisgICAgICAgIE1CRURUTFNfTU9ERV9HQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSB8fAorICAgICAgICBNQkVEVExTX01PREVfU1RSRUFNID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoIE1CRURUTFNfTU9ERV9FQ0IgPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICBpZiggY3R4LT51bnByb2Nlc3NlZF9sZW4gIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggTUJFRFRMU19NT0RFX0NCQyA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgIGludCByZXQgPSAwOworCisgICAgICAgIGlmKCBNQkVEVExTX0VOQ1JZUFQgPT0gY3R4LT5vcGVyYXRpb24gKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBjaGVjayBmb3IgJ25vIHBhZGRpbmcnIG1vZGUgKi8KKyAgICAgICAgICAgIGlmKCBOVUxMID09IGN0eC0+YWRkX3BhZGRpbmcgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAwICE9IGN0eC0+dW5wcm9jZXNzZWRfbGVuICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN0eC0+YWRkX3BhZGRpbmcoIGN0eC0+dW5wcm9jZXNzZWRfZGF0YSwgbWJlZHRsc19jaXBoZXJfZ2V0X2l2X3NpemUoIGN0eCApLAorICAgICAgICAgICAgICAgICAgICBjdHgtPnVucHJvY2Vzc2VkX2xlbiApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCBjdHggKSAhPSBjdHgtPnVucHJvY2Vzc2VkX2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGb3IgZGVjcnlwdCBvcGVyYXRpb25zLCBleHBlY3QgYSBmdWxsIGJsb2NrLAorICAgICAgICAgICAgICogb3IgYW4gZW1wdHkgYmxvY2sgaWYgbm8gcGFkZGluZworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiggTlVMTCA9PSBjdHgtPmFkZF9wYWRkaW5nICYmIDAgPT0gY3R4LT51bnByb2Nlc3NlZF9sZW4gKQorICAgICAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaXBoZXIgYmxvY2sgKi8KKyAgICAgICAgaWYoIDAgIT0gKCByZXQgPSBjdHgtPmNpcGhlcl9pbmZvLT5iYXNlLT5jYmNfZnVuYyggY3R4LT5jaXBoZXJfY3R4LAorICAgICAgICAgICAgICAgIGN0eC0+b3BlcmF0aW9uLCBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggY3R4ICksIGN0eC0+aXYsCisgICAgICAgICAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9kYXRhLCBvdXRwdXQgKSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBvdXRwdXQgc2l6ZSBmb3IgZGVjcnlwdGlvbiAqLworICAgICAgICBpZiggTUJFRFRMU19ERUNSWVBUID09IGN0eC0+b3BlcmF0aW9uICkKKyAgICAgICAgICAgIHJldHVybiBjdHgtPmdldF9wYWRkaW5nKCBvdXRwdXQsIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCBjdHggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVuICk7CisKKyAgICAgICAgLyogU2V0IG91dHB1dCBzaXplIGZvciBlbmNyeXB0aW9uICovCisgICAgICAgICpvbGVuID0gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoIGN0eCApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZWxzZQorICAgICgodm9pZCkgb3V0cHV0KTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORykKK2ludCBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwgbWJlZHRsc19jaXBoZXJfcGFkZGluZ190IG1vZGUgKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fAorICAgICAgICBNQkVEVExTX01PREVfQ0JDICE9IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBzd2l0Y2goIG1vZGUgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcpCisgICAgY2FzZSBNQkVEVExTX1BBRERJTkdfUEtDUzc6CisgICAgICAgIGN0eC0+YWRkX3BhZGRpbmcgPSBhZGRfcGtjc19wYWRkaW5nOworICAgICAgICBjdHgtPmdldF9wYWRkaW5nID0gZ2V0X3BrY3NfcGFkZGluZzsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUykKKyAgICBjYXNlIE1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TOgorICAgICAgICBjdHgtPmFkZF9wYWRkaW5nID0gYWRkX29uZV9hbmRfemVyb3NfcGFkZGluZzsKKyAgICAgICAgY3R4LT5nZXRfcGFkZGluZyA9IGdldF9vbmVfYW5kX3plcm9zX3BhZGRpbmc7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4pCisgICAgY2FzZSBNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTjoKKyAgICAgICAgY3R4LT5hZGRfcGFkZGluZyA9IGFkZF96ZXJvc19hbmRfbGVuX3BhZGRpbmc7CisgICAgICAgIGN0eC0+Z2V0X3BhZGRpbmcgPSBnZXRfemVyb3NfYW5kX2xlbl9wYWRkaW5nOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUykKKyAgICBjYXNlIE1CRURUTFNfUEFERElOR19aRVJPUzoKKyAgICAgICAgY3R4LT5hZGRfcGFkZGluZyA9IGFkZF96ZXJvc19wYWRkaW5nOworICAgICAgICBjdHgtPmdldF9wYWRkaW5nID0gZ2V0X3plcm9zX3BhZGRpbmc7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBNQkVEVExTX1BBRERJTkdfTk9ORToKKyAgICAgICAgY3R4LT5hZGRfcGFkZGluZyA9IE5VTEw7CisgICAgICAgIGN0eC0+Z2V0X3BhZGRpbmcgPSBnZXRfbm9fcGFkZGluZzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKK2ludCBtYmVkdGxzX2NpcGhlcl93cml0ZV90YWcoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKQoreworICAgIGlmKCBOVUxMID09IGN0eCB8fCBOVUxMID09IGN0eC0+Y2lwaGVyX2luZm8gfHwgTlVMTCA9PSB0YWcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIE1CRURUTFNfRU5DUllQVCAhPSBjdHgtPm9wZXJhdGlvbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggTUJFRFRMU19NT0RFX0dDTSA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfZ2NtX2ZpbmlzaCggKG1iZWR0bHNfZ2NtX2NvbnRleHQgKikgY3R4LT5jaXBoZXJfY3R4LCB0YWcsIHRhZ19sZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19jaXBoZXJfY2hlY2tfdGFnKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIE5VTEwgPT0gY3R4IHx8IE5VTEwgPT0gY3R4LT5jaXBoZXJfaW5mbyB8fAorICAgICAgICBNQkVEVExTX0RFQ1JZUFQgIT0gY3R4LT5vcGVyYXRpb24gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBpZiggTUJFRFRMU19NT0RFX0dDTSA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfdGFnWzE2XTsKKyAgICAgICAgc2l6ZV90IGk7CisgICAgICAgIGludCBkaWZmOworCisgICAgICAgIGlmKCB0YWdfbGVuID4gc2l6ZW9mKCBjaGVja190YWcgKSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgICAgIGlmKCAwICE9ICggcmV0ID0gbWJlZHRsc19nY21fZmluaXNoKCAobWJlZHRsc19nY21fY29udGV4dCAqKSBjdHgtPmNpcGhlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfdGFnLCB0YWdfbGVuICkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayB0aGUgdGFnIGluICJjb25zdGFudC10aW1lIiAqLworICAgICAgICBmb3IoIGRpZmYgPSAwLCBpID0gMDsgaSA8IHRhZ19sZW47IGkrKyApCisgICAgICAgICAgICBkaWZmIHw9IHRhZ1tpXSBeIGNoZWNrX3RhZ1tpXTsKKworICAgICAgICBpZiggZGlmZiAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisvKgorICogUGFja2V0LW9yaWVudGVkIHdyYXBwZXIgZm9yIG5vbi1BRUFEIG1vZGVzCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9jcnlwdCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBmaW5pc2hfb2xlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggY3R4LCBpdiwgaXZfbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCBjdHggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCBjdHgsIGlucHV0LCBpbGVuLCBvdXRwdXQsIG9sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCBjdHgsIG91dHB1dCArICpvbGVuLCAmZmluaXNoX29sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgKm9sZW4gKz0gZmluaXNoX29sZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9BRUFEKQorLyoKKyAqIFBhY2tldC1vcmllbnRlZCBlbmNyeXB0aW9uIGZvciBBRUFEIG1vZGVzCisgKi8KK2ludCBtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQoIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkLCBzaXplX3QgYWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCB0YWdfbGVuICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgaWYoIE1CRURUTFNfTU9ERV9HQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICAqb2xlbiA9IGlsZW47CisgICAgICAgIHJldHVybiggbWJlZHRsc19nY21fY3J5cHRfYW5kX3RhZyggY3R4LT5jaXBoZXJfY3R4LCBNQkVEVExTX0dDTV9FTkNSWVBULCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBhZCwgYWRfbGVuLCBpbnB1dCwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdfbGVuLCB0YWcgKSApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIGlmKCBNQkVEVExTX01PREVfQ0NNID09IGN0eC0+Y2lwaGVyX2luZm8tPm1vZGUgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSBpbGVuOworICAgICAgICByZXR1cm4oIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggY3R4LT5jaXBoZXJfY3R4LCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sIGFkLCBhZF9sZW4sIGlucHV0LCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCB0YWdfbGVuICkgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworCisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworfQorCisvKgorICogUGFja2V0LW9yaWVudGVkIGRlY3J5cHRpb24gZm9yIEFFQUQgbW9kZXMKKyAqLworaW50IG1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWQsIHNpemVfdCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgc2l6ZV90IHRhZ19sZW4gKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBpZiggTUJFRFRMU19NT0RFX0dDTSA9PSBjdHgtPmNpcGhlcl9pbmZvLT5tb2RlICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgKm9sZW4gPSBpbGVuOworICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9hdXRoX2RlY3J5cHQoIGN0eC0+Y2lwaGVyX2N0eCwgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwgYWQsIGFkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCB0YWdfbGVuLCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQgKQorICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgaWYoIE1CRURUTFNfTU9ERV9DQ00gPT0gY3R4LT5jaXBoZXJfaW5mby0+bW9kZSApCisgICAgeworICAgICAgICBpbnQgcmV0OworCisgICAgICAgICpvbGVuID0gaWxlbjsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0KCBjdHgtPmNpcGhlcl9jdHgsIGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sIGFkLCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIHRhZywgdGFnX2xlbiApOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQ0NNX0FVVEhfRkFJTEVEICkKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRDsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9DICovCisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9BRUFEICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jaXBoZXJfd3JhcC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2lwaGVyX3dyYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzc2YWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY2lwaGVyX3dyYXAuYwpAQCAtMCwwICsxLDE0NTEgQEAKKy8qKgorICogXGZpbGUgY2lwaGVyX3dyYXAuYworICoKKyAqIFxicmllZiBHZW5lcmljIGNpcGhlciB3cmFwcGVyIGZvciBtYmVkIFRMUworICoKKyAqIFxhdXRob3IgQWRyaWFhbiBkZSBKb25nIDxkZWpvbmdAZm94LWl0LmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyX2ludGVybmFsLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNpbmNsdWRlICJtYmVkdGxzL2FyYzQuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaW5jbHVkZSAibWJlZHRscy9jYW1lbGxpYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JMT1dGSVNIX0MpCisjaW5jbHVkZSAibWJlZHRscy9ibG93ZmlzaC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvY2NtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisvKiBzaGFyZWQgYnkgYWxsIEdDTSBjaXBoZXJzICovCitzdGF0aWMgdm9pZCAqZ2NtX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19nY21fY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX2djbV9pbml0KCAobWJlZHRsc19nY21fY29udGV4dCAqKSBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGdjbV9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2djbV9mcmVlKCBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKy8qIHNoYXJlZCBieSBhbGwgQ0NNIGNpcGhlcnMgKi8KK3N0YXRpYyB2b2lkICpjY21fY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2NjbV9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfY2NtX2luaXQoIChtYmVkdGxzX2NjbV9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgY2NtX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfY2NtX2ZyZWUoIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorCitzdGF0aWMgaW50IGFlc19jcnlwdF9lY2Jfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggKG1iZWR0bHNfYWVzX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGlucHV0LCBvdXRwdXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgaW50IGFlc19jcnlwdF9jYmNfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2Flc19jcnlwdF9jYmMoIChtYmVkdGxzX2Flc19jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsIGl2LCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCitzdGF0aWMgaW50IGFlc19jcnlwdF9jZmIxMjhfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICppdl9vZmYsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCAobWJlZHRsc19hZXNfY29udGV4dCAqKSBjdHgsIG9wZXJhdGlvbiwgbGVuZ3RoLCBpdl9vZmYsIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCitzdGF0aWMgaW50IGFlc19jcnlwdF9jdHJfd3JhcCggdm9pZCAqY3R4LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgKm5jX29mZiwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbm9uY2VfY291bnRlciwgdW5zaWduZWQgY2hhciAqc3RyZWFtX2Jsb2NrLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19hZXNfY3J5cHRfY3RyKCAobWJlZHRsc19hZXNfY29udGV4dCAqKSBjdHgsIGxlbmd0aCwgbmNfb2ZmLCBub25jZV9jb3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1fYmxvY2ssIGlucHV0LCBvdXRwdXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCitzdGF0aWMgaW50IGFlc19zZXRrZXlfZGVjX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoIChtYmVkdGxzX2Flc19jb250ZXh0ICopIGN0eCwga2V5LCBrZXlfYml0bGVuICk7Cit9CisKK3N0YXRpYyBpbnQgYWVzX3NldGtleV9lbmNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggKG1iZWR0bHNfYWVzX2NvbnRleHQgKikgY3R4LCBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIHZvaWQgKiBhZXNfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0ICphZXMgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2Flc19jb250ZXh0ICkgKTsKKworICAgIGlmKCBhZXMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgbWJlZHRsc19hZXNfaW5pdCggYWVzICk7CisKKyAgICByZXR1cm4oIGFlcyApOworfQorCitzdGF0aWMgdm9pZCBhZXNfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19hZXNfZnJlZSggKG1iZWR0bHNfYWVzX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBhZXNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgYWVzX2NyeXB0X2VjYl93cmFwLAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgYWVzX2NyeXB0X2NiY193cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICBhZXNfY3J5cHRfY2ZiMTI4X3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIGFlc19jcnlwdF9jdHJfd3JhcCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0pCisgICAgTlVMTCwKKyNlbmRpZgorICAgIGFlc19zZXRrZXlfZW5jX3dyYXAsCisgICAgYWVzX3NldGtleV9kZWNfd3JhcCwKKyAgICBhZXNfY3R4X2FsbG9jLAorICAgIGFlc19jdHhfZnJlZQorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTI4X2VjYl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgMTI4LAorICAgICJBRVMtMTI4LUVDQiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzE5Ml9lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIDE5MiwKKyAgICAiQUVTLTE5Mi1FQ0IiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18yNTZfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IsCisgICAgTUJFRFRMU19NT0RFX0VDQiwKKyAgICAyNTYsCisgICAgIkFFUy0yNTYtRUNCIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xMjhfY2JjX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICAxMjgsCisgICAgIkFFUy0xMjgtQ0JDIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTkyX2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgMTkyLAorICAgICJBRVMtMTkyLUNCQyIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzI1Nl9jYmNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywKKyAgICBNQkVEVExTX01PREVfQ0JDLAorICAgIDI1NiwKKyAgICAiQUVTLTI1Ni1DQkMiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTI4X2NmYjEyOF9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4LAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgMTI4LAorICAgICJBRVMtMTI4LUNGQjEyOCIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzE5Ml9jZmIxMjhfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NGQjEyOCwKKyAgICBNQkVEVExTX01PREVfQ0ZCLAorICAgIDE5MiwKKyAgICAiQUVTLTE5Mi1DRkIxMjgiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18yNTZfY2ZiMTI4X2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DRkIxMjgsCisgICAgTUJFRFRMU19NT0RFX0NGQiwKKyAgICAyNTYsCisgICAgIkFFUy0yNTYtQ0ZCMTI4IiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzEyOF9jdHJfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUiwKKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIDEyOCwKKyAgICAiQUVTLTEyOC1DVFIiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmFlc19pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xOTJfY3RyX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DVFIsCisgICAgTUJFRFRMU19NT0RFX0NUUiwKKyAgICAxOTIsCisgICAgIkFFUy0xOTItQ1RSIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZhZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMjU2X2N0cl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ1RSLAorICAgIE1CRURUTFNfTU9ERV9DVFIsCisgICAgMjU2LAorICAgICJBRVMtMjU2LUNUUiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmYWVzX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKK3N0YXRpYyBpbnQgZ2NtX2Flc19zZXRrZXlfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19nY21fc2V0a2V5KCAobWJlZHRsc19nY21fY29udGV4dCAqKSBjdHgsIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywKKyAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5X2JpdGxlbiApOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGdjbV9hZXNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgTlVMTCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBnY21fYWVzX3NldGtleV93cmFwLAorICAgIGdjbV9hZXNfc2V0a2V5X3dyYXAsCisgICAgZ2NtX2N0eF9hbGxvYywKKyAgICBnY21fY3R4X2ZyZWUsCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xMjhfZ2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sCisgICAgTUJFRFRMU19NT0RFX0dDTSwKKyAgICAxMjgsCisgICAgIkFFUy0xMjgtR0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmdjbV9hZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTkyX2djbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNLAorICAgIE1CRURUTFNfTU9ERV9HQ00sCisgICAgMTkyLAorICAgICJBRVMtMTkyLUdDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZnY21fYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzI1Nl9nY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTSwKKyAgICBNQkVEVExTX01PREVfR0NNLAorICAgIDI1NiwKKyAgICAiQUVTLTI1Ni1HQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmZ2NtX2Flc19pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKK3N0YXRpYyBpbnQgY2NtX2Flc19zZXRrZXlfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jY21fc2V0a2V5KCAobWJlZHRsc19jY21fY29udGV4dCAqKSBjdHgsIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywKKyAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5X2JpdGxlbiApOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGNjbV9hZXNfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgTlVMTCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBjY21fYWVzX3NldGtleV93cmFwLAorICAgIGNjbV9hZXNfc2V0a2V5X3dyYXAsCisgICAgY2NtX2N0eF9hbGxvYywKKyAgICBjY21fY3R4X2ZyZWUsCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFlc18xMjhfY2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sCisgICAgTUJFRFRMU19NT0RFX0NDTSwKKyAgICAxMjgsCisgICAgIkFFUy0xMjgtQ0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmNjbV9hZXNfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBhZXNfMTkyX2NjbV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNLAorICAgIE1CRURUTFNfTU9ERV9DQ00sCisgICAgMTkyLAorICAgICJBRVMtMTkyLUNDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZjY21fYWVzX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYWVzXzI1Nl9jY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwKKyAgICBNQkVEVExTX01PREVfQ0NNLAorICAgIDI1NiwKKyAgICAiQUVTLTI1Ni1DQ00iLAorICAgIDEyLAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiwKKyAgICAxNiwKKyAgICAmY2NtX2Flc19pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorCitzdGF0aWMgaW50IGNhbWVsbGlhX2NyeXB0X2VjYl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBpbnQgY2FtZWxsaWFfY3J5cHRfY2JjX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGxlbmd0aCwgaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorc3RhdGljIGludCBjYW1lbGxpYV9jcnlwdF9jZmIxMjhfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgc2l6ZV90IGxlbmd0aCwgc2l6ZV90ICppdl9vZmYsIHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9vZmYsIGl2LCBpbnB1dCwgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCitzdGF0aWMgaW50IGNhbWVsbGlhX2NyeXB0X2N0cl93cmFwKCB2b2lkICpjdHgsIHNpemVfdCBsZW5ndGgsIHNpemVfdCAqbmNfb2ZmLAorICAgICAgICB1bnNpZ25lZCBjaGFyICpub25jZV9jb3VudGVyLCB1bnNpZ25lZCBjaGFyICpzdHJlYW1fYmxvY2ssCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2N0ciggKG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqKSBjdHgsIGxlbmd0aCwgbmNfb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlX2NvdW50ZXIsIHN0cmVhbV9ibG9jaywgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKK3N0YXRpYyBpbnQgY2FtZWxsaWFfc2V0a2V5X2RlY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2RlYyggKG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqKSBjdHgsIGtleSwga2V5X2JpdGxlbiApOworfQorCitzdGF0aWMgaW50IGNhbWVsbGlhX3NldGtleV9lbmNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4LCBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIHZvaWQgKiBjYW1lbGxpYV9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCAqY3R4OworICAgIGN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBjYW1lbGxpYV9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoIChtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBjYW1lbGxpYV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBLAorICAgIGNhbWVsbGlhX2NyeXB0X2VjYl93cmFwLAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgY2FtZWxsaWFfY3J5cHRfY2JjX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIGNhbWVsbGlhX2NyeXB0X2NmYjEyOF93cmFwLAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NUUikKKyAgICBjYW1lbGxpYV9jcnlwdF9jdHJfd3JhcCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0pCisgICAgTlVMTCwKKyNlbmRpZgorICAgIGNhbWVsbGlhX3NldGtleV9lbmNfd3JhcCwKKyAgICBjYW1lbGxpYV9zZXRrZXlfZGVjX3dyYXAsCisgICAgY2FtZWxsaWFfY3R4X2FsbG9jLAorICAgIGNhbWVsbGlhX2N0eF9mcmVlCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzEyOF9lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgMTI4LAorICAgICJDQU1FTExJQS0xMjgtRUNCIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzE5Ml9lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgMTkyLAorICAgICJDQU1FTExJQS0xOTItRUNCIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzI1Nl9lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgMjU2LAorICAgICJDQU1FTExJQS0yNTYtRUNCIiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMTI4X2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICAxMjgsCisgICAgIkNBTUVMTElBLTEyOC1DQkMiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmNhbWVsbGlhX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMTkyX2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICAxOTIsCisgICAgIkNBTUVMTElBLTE5Mi1DQkMiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmNhbWVsbGlhX2luZm8KK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2FtZWxsaWFfMjU2X2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICAyNTYsCisgICAgIkNBTUVMTElBLTI1Ni1DQkMiLAorICAgIDE2LAorICAgIDAsCisgICAgMTYsCisgICAgJmNhbWVsbGlhX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzEyOF9jZmIxMjhfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4LAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgMTI4LAorICAgICJDQU1FTExJQS0xMjgtQ0ZCMTI4IiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzE5Ml9jZmIxMjhfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0ZCMTI4LAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgMTkyLAorICAgICJDQU1FTExJQS0xOTItQ0ZCMTI4IiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzI1Nl9jZmIxMjhfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0ZCMTI4LAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgMjU2LAorICAgICJDQU1FTExJQS0yNTYtQ0ZCMTI4IiwKKyAgICAxNiwKKyAgICAwLAorICAgIDE2LAorICAgICZjYW1lbGxpYV9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xMjhfY3RyX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUiwKKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIDEyOCwKKyAgICAiQ0FNRUxMSUEtMTI4LUNUUiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xOTJfY3RyX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUiwKKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIDE5MiwKKyAgICAiQ0FNRUxMSUEtMTkyLUNUUiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8yNTZfY3RyX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NUUiwKKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIDI1NiwKKyAgICAiQ0FNRUxMSUEtMjU2LUNUUiIsCisgICAgMTYsCisgICAgMCwKKyAgICAxNiwKKyAgICAmY2FtZWxsaWFfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorc3RhdGljIGludCBnY21fY2FtZWxsaWFfc2V0a2V5X3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19nY21fc2V0a2V5KCAobWJlZHRsc19nY21fY29udGV4dCAqKSBjdHgsIE1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBLAorICAgICAgICAgICAgICAgICAgICAga2V5LCBrZXlfYml0bGVuICk7Cit9CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgZ2NtX2NhbWVsbGlhX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUEsCisgICAgTlVMTCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBnY21fY2FtZWxsaWFfc2V0a2V5X3dyYXAsCisgICAgZ2NtX2NhbWVsbGlhX3NldGtleV93cmFwLAorICAgIGdjbV9jdHhfYWxsb2MsCisgICAgZ2NtX2N0eF9mcmVlLAorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xMjhfZ2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwKKyAgICBNQkVEVExTX01PREVfR0NNLAorICAgIDEyOCwKKyAgICAiQ0FNRUxMSUEtMTI4LUdDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZnY21fY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8xOTJfZ2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTSwKKyAgICBNQkVEVExTX01PREVfR0NNLAorICAgIDE5MiwKKyAgICAiQ0FNRUxMSUEtMTkyLUdDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZnY21fY2FtZWxsaWFfaW5mbworfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBjYW1lbGxpYV8yNTZfZ2NtX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwKKyAgICBNQkVEVExTX01PREVfR0NNLAorICAgIDI1NiwKKyAgICAiQ0FNRUxMSUEtMjU2LUdDTSIsCisgICAgMTIsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfSVZfTEVOLAorICAgIDE2LAorICAgICZnY21fY2FtZWxsaWFfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCitzdGF0aWMgaW50IGNjbV9jYW1lbGxpYV9zZXRrZXlfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX2NjbV9zZXRrZXkoIChtYmVkdGxzX2NjbV9jb250ZXh0ICopIGN0eCwgTUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUEsCisgICAgICAgICAgICAgICAgICAgICBrZXksIGtleV9iaXRsZW4gKTsKK30KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBjY21fY2FtZWxsaWFfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQSwKKyAgICBOVUxMLAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgTlVMTCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgTlVMTCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgTlVMTCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0pCisgICAgTlVMTCwKKyNlbmRpZgorICAgIGNjbV9jYW1lbGxpYV9zZXRrZXlfd3JhcCwKKyAgICBjY21fY2FtZWxsaWFfc2V0a2V5X3dyYXAsCisgICAgY2NtX2N0eF9hbGxvYywKKyAgICBjY21fY3R4X2ZyZWUsCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzEyOF9jY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNLAorICAgIE1CRURUTFNfTU9ERV9DQ00sCisgICAgMTI4LAorICAgICJDQU1FTExJQS0xMjgtQ0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmNjbV9jYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzE5Ml9jY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0NNLAorICAgIE1CRURUTFNfTU9ERV9DQ00sCisgICAgMTkyLAorICAgICJDQU1FTExJQS0xOTItQ0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmNjbV9jYW1lbGxpYV9pbmZvCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGNhbWVsbGlhXzI1Nl9jY21faW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0NNLAorICAgIE1CRURUTFNfTU9ERV9DQ00sCisgICAgMjU2LAorICAgICJDQU1FTExJQS0yNTYtQ0NNIiwKKyAgICAxMiwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4sCisgICAgMTYsCisgICAgJmNjbV9jYW1lbGxpYV9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorCitzdGF0aWMgaW50IGRlc19jcnlwdF9lY2Jfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgKCh2b2lkKSBvcGVyYXRpb24pOworICAgIHJldHVybiBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoIChtYmVkdGxzX2Rlc19jb250ZXh0ICopIGN0eCwgaW5wdXQsIG91dHB1dCApOworfQorCitzdGF0aWMgaW50IGRlczNfY3J5cHRfZWNiX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgICgodm9pZCkgb3BlcmF0aW9uKTsKKyAgICByZXR1cm4gbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggKG1iZWR0bHNfZGVzM19jb250ZXh0ICopIGN0eCwgaW5wdXQsIG91dHB1dCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBpbnQgZGVzX2NyeXB0X2NiY193cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICB1bnNpZ25lZCBjaGFyICppdiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggKG1iZWR0bHNfZGVzX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGxlbmd0aCwgaXYsIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBpbnQgZGVzM19jcnlwdF9jYmNfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX29wZXJhdGlvbl90IG9wZXJhdGlvbiwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCAobWJlZHRsc19kZXMzX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGxlbmd0aCwgaXYsIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworc3RhdGljIGludCBkZXNfc2V0a2V5X2RlY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgICgodm9pZCkga2V5X2JpdGxlbik7CisKKyAgICByZXR1cm4gbWJlZHRsc19kZXNfc2V0a2V5X2RlYyggKG1iZWR0bHNfZGVzX2NvbnRleHQgKikgY3R4LCBrZXkgKTsKK30KKworc3RhdGljIGludCBkZXNfc2V0a2V5X2VuY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgICgodm9pZCkga2V5X2JpdGxlbik7CisKKyAgICByZXR1cm4gbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggKG1iZWR0bHNfZGVzX2NvbnRleHQgKikgY3R4LCBrZXkgKTsKK30KKworc3RhdGljIGludCBkZXMzX3NldDJrZXlfZGVjX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAoKHZvaWQpIGtleV9iaXRsZW4pOworCisgICAgcmV0dXJuIG1iZWR0bHNfZGVzM19zZXQya2V5X2RlYyggKG1iZWR0bHNfZGVzM19jb250ZXh0ICopIGN0eCwga2V5ICk7Cit9CisKK3N0YXRpYyBpbnQgZGVzM19zZXQya2V5X2VuY193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X2JpdGxlbiApCit7CisgICAgKCh2b2lkKSBrZXlfYml0bGVuKTsKKworICAgIHJldHVybiBtYmVkdGxzX2RlczNfc2V0MmtleV9lbmMoIChtYmVkdGxzX2RlczNfY29udGV4dCAqKSBjdHgsIGtleSApOworfQorCitzdGF0aWMgaW50IGRlczNfc2V0M2tleV9kZWNfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgICgodm9pZCkga2V5X2JpdGxlbik7CisKKyAgICByZXR1cm4gbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjKCAobWJlZHRsc19kZXMzX2NvbnRleHQgKikgY3R4LCBrZXkgKTsKK30KKworc3RhdGljIGludCBkZXMzX3NldDNrZXlfZW5jX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAoKHZvaWQpIGtleV9iaXRsZW4pOworCisgICAgcmV0dXJuIG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYyggKG1iZWR0bHNfZGVzM19jb250ZXh0ICopIGN0eCwga2V5ICk7Cit9CisKK3N0YXRpYyB2b2lkICogZGVzX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgbWJlZHRsc19kZXNfY29udGV4dCAqZGVzID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19kZXNfY29udGV4dCApICk7CisKKyAgICBpZiggZGVzID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKworICAgIG1iZWR0bHNfZGVzX2luaXQoIGRlcyApOworCisgICAgcmV0dXJuKCBkZXMgKTsKK30KKworc3RhdGljIHZvaWQgZGVzX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfZGVzX2ZyZWUoIChtYmVkdGxzX2Rlc19jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkICogZGVzM19jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIG1iZWR0bHNfZGVzM19jb250ZXh0ICpkZXMzOworICAgIGRlczMgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2RlczNfY29udGV4dCApICk7CisKKyAgICBpZiggZGVzMyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICBtYmVkdGxzX2RlczNfaW5pdCggZGVzMyApOworCisgICAgcmV0dXJuKCBkZXMzICk7Cit9CisKK3N0YXRpYyB2b2lkIGRlczNfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19kZXMzX2ZyZWUoIChtYmVkdGxzX2RlczNfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGRlc19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEX0RFUywKKyAgICBkZXNfY3J5cHRfZWNiX3dyYXAsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBkZXNfY3J5cHRfY2JjX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBkZXNfc2V0a2V5X2VuY193cmFwLAorICAgIGRlc19zZXRrZXlfZGVjX3dyYXAsCisgICAgZGVzX2N0eF9hbGxvYywKKyAgICBkZXNfY3R4X2ZyZWUKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgZGVzX2VjYl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FQ0IsCisgICAgTUJFRFRMU19NT0RFX0VDQiwKKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTLAorICAgICJERVMtRUNCIiwKKyAgICA4LAorICAgIDAsCisgICAgOCwKKyAgICAmZGVzX2luZm8KK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBkZXNfY2JjX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfREVTX0NCQywKKyAgICBNQkVEVExTX01PREVfQ0JDLAorICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVMsCisgICAgIkRFUy1DQkMiLAorICAgIDgsCisgICAgMCwKKyAgICA4LAorICAgICZkZXNfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGRlc19lZGVfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9JRF9ERVMsCisgICAgZGVzM19jcnlwdF9lY2Jfd3JhcCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGRlczNfY3J5cHRfY2JjX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBkZXMzX3NldDJrZXlfZW5jX3dyYXAsCisgICAgZGVzM19zZXQya2V5X2RlY193cmFwLAorICAgIGRlczNfY3R4X2FsbG9jLAorICAgIGRlczNfY3R4X2ZyZWUKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgZGVzX2VkZV9lY2JfaW5mbyA9IHsKKyAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0VDQiwKKyAgICBNQkVEVExTX01PREVfRUNCLAorICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFLAorICAgICJERVMtRURFLUVDQiIsCisgICAgOCwKKyAgICAwLAorICAgIDgsCisgICAgJmRlc19lZGVfaW5mbworfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGRlc19lZGVfY2JjX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkMsCisgICAgTUJFRFRMU19NT0RFX0NCQywKKyAgICBNQkVEVExTX0tFWV9MRU5HVEhfREVTX0VERSwKKyAgICAiREVTLUVERS1DQkMiLAorICAgIDgsCisgICAgMCwKKyAgICA4LAorICAgICZkZXNfZWRlX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2Jhc2VfdCBkZXNfZWRlM19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEXzNERVMsCisgICAgZGVzM19jcnlwdF9lY2Jfd3JhcCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGRlczNfY3J5cHRfY2JjX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBkZXMzX3NldDNrZXlfZW5jX3dyYXAsCisgICAgZGVzM19zZXQza2V5X2RlY193cmFwLAorICAgIGRlczNfY3R4X2FsbG9jLAorICAgIGRlczNfY3R4X2ZyZWUKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgZGVzX2VkZTNfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgTUJFRFRMU19LRVlfTEVOR1RIX0RFU19FREUzLAorICAgICJERVMtRURFMy1FQ0IiLAorICAgIDgsCisgICAgMCwKKyAgICA4LAorICAgICZkZXNfZWRlM19pbmZvCit9OworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGRlc19lZGUzX2NiY19pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywKKyAgICBNQkVEVExTX01PREVfQ0JDLAorICAgIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFMywKKyAgICAiREVTLUVERTMtQ0JDIiwKKyAgICA4LAorICAgIDAsCisgICAgOCwKKyAgICAmZGVzX2VkZTNfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKQorCitzdGF0aWMgaW50IGJsb3dmaXNoX2NyeXB0X2VjYl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoIChtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBpbnQgYmxvd2Zpc2hfY3J5cHRfY2JjX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19vcGVyYXRpb25fdCBvcGVyYXRpb24sCisgICAgICAgIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jYmMoIChtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgKikgY3R4LCBvcGVyYXRpb24sIGxlbmd0aCwgaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorc3RhdGljIGludCBibG93ZmlzaF9jcnlwdF9jZmI2NF93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uLAorICAgICAgICBzaXplX3QgbGVuZ3RoLCBzaXplX3QgKml2X29mZiwgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0KCAobWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICopIGN0eCwgb3BlcmF0aW9uLCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9vZmYsIGl2LCBpbnB1dCwgb3V0cHV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCitzdGF0aWMgaW50IGJsb3dmaXNoX2NyeXB0X2N0cl93cmFwKCB2b2lkICpjdHgsIHNpemVfdCBsZW5ndGgsIHNpemVfdCAqbmNfb2ZmLAorICAgICAgICB1bnNpZ25lZCBjaGFyICpub25jZV9jb3VudGVyLCB1bnNpZ25lZCBjaGFyICpzdHJlYW1fYmxvY2ssCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHJldHVybiBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0ciggKG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqKSBjdHgsIGxlbmd0aCwgbmNfb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlX2NvdW50ZXIsIHN0cmVhbV9ibG9jaywgaW5wdXQsIG91dHB1dCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCisKK3N0YXRpYyBpbnQgYmxvd2Zpc2hfc2V0a2V5X3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgIHJldHVybiBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggKG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqKSBjdHgsIGtleSwga2V5X2JpdGxlbiApOworfQorCitzdGF0aWMgdm9pZCAqIGJsb3dmaXNoX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICpjdHg7CisgICAgY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgbWJlZHRsc19ibG93ZmlzaF9pbml0KCBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGJsb3dmaXNoX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggKG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IGJsb3dmaXNoX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQkxPV0ZJU0gsCisgICAgYmxvd2Zpc2hfY3J5cHRfZWNiX3dyYXAsCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBibG93ZmlzaF9jcnlwdF9jYmNfd3JhcCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgYmxvd2Zpc2hfY3J5cHRfY2ZiNjRfd3JhcCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgYmxvd2Zpc2hfY3J5cHRfY3RyX3dyYXAsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIE5VTEwsCisjZW5kaWYKKyAgICBibG93ZmlzaF9zZXRrZXlfd3JhcCwKKyAgICBibG93ZmlzaF9zZXRrZXlfd3JhcCwKKyAgICBibG93ZmlzaF9jdHhfYWxsb2MsCisgICAgYmxvd2Zpc2hfY3R4X2ZyZWUKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYmxvd2Zpc2hfZWNiX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCLAorICAgIE1CRURUTFNfTU9ERV9FQ0IsCisgICAgMTI4LAorICAgICJCTE9XRklTSC1FQ0IiLAorICAgIDgsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiwKKyAgICA4LAorICAgICZibG93ZmlzaF9pbmZvCit9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgYmxvd2Zpc2hfY2JjX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDLAorICAgIE1CRURUTFNfTU9ERV9DQkMsCisgICAgMTI4LAorICAgICJCTE9XRklTSC1DQkMiLAorICAgIDgsCisgICAgTUJFRFRMU19DSVBIRVJfVkFSSUFCTEVfS0VZX0xFTiwKKyAgICA4LAorICAgICZibG93ZmlzaF9pbmZvCit9OworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBibG93ZmlzaF9jZmI2NF9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0LAorICAgIE1CRURUTFNfTU9ERV9DRkIsCisgICAgMTI4LAorICAgICJCTE9XRklTSC1DRkI2NCIsCisgICAgOCwKKyAgICBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOLAorICAgIDgsCisgICAgJmJsb3dmaXNoX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGJsb3dmaXNoX2N0cl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUiwKKyAgICBNQkVEVExTX01PREVfQ1RSLAorICAgIDEyOCwKKyAgICAiQkxPV0ZJU0gtQ1RSIiwKKyAgICA4LAorICAgIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4sCisgICAgOCwKKyAgICAmYmxvd2Zpc2hfaW5mbworfTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLworI2VuZGlmIC8qIE1CRURUTFNfQkxPV0ZJU0hfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKK3N0YXRpYyBpbnQgYXJjNF9jcnlwdF9zdHJlYW1fd3JhcCggdm9pZCAqY3R4LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICByZXR1cm4oIG1iZWR0bHNfYXJjNF9jcnlwdCggKG1iZWR0bHNfYXJjNF9jb250ZXh0ICopIGN0eCwgbGVuZ3RoLCBpbnB1dCwgb3V0cHV0ICkgKTsKK30KKworc3RhdGljIGludCBhcmM0X3NldGtleV93cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9iaXRsZW4gKQoreworICAgIC8qIHdlIGdldCBrZXlfYml0bGVuIGluIGJpdHMsIGFyYzQgZXhwZWN0cyBpdCBpbiBieXRlcyAqLworICAgIGlmKCBrZXlfYml0bGVuICUgOCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfYXJjNF9zZXR1cCggKG1iZWR0bHNfYXJjNF9jb250ZXh0ICopIGN0eCwga2V5LCBrZXlfYml0bGVuIC8gOCApOworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCAqIGFyYzRfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX2FyYzRfY29udGV4dCAqY3R4OworICAgIGN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfYXJjNF9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgbWJlZHRsc19hcmM0X2luaXQoIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgYXJjNF9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2FyYzRfZnJlZSggKG1iZWR0bHNfYXJjNF9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QgYXJjNF9iYXNlX2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfSURfQVJDNCwKKyAgICBOVUxMLAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgTlVMTCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIpCisgICAgTlVMTCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgTlVMTCwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9TVFJFQU0pCisgICAgYXJjNF9jcnlwdF9zdHJlYW1fd3JhcCwKKyNlbmRpZgorICAgIGFyYzRfc2V0a2V5X3dyYXAsCisgICAgYXJjNF9zZXRrZXlfd3JhcCwKKyAgICBhcmM0X2N0eF9hbGxvYywKKyAgICBhcmM0X2N0eF9mcmVlCit9OworCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190IGFyYzRfMTI4X2luZm8gPSB7CisgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsCisgICAgTUJFRFRMU19NT0RFX1NUUkVBTSwKKyAgICAxMjgsCisgICAgIkFSQzQtMTI4IiwKKyAgICAwLAorICAgIDAsCisgICAgMSwKKyAgICAmYXJjNF9iYXNlX2luZm8KK307CisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCitzdGF0aWMgaW50IG51bGxfY3J5cHRfc3RyZWFtKCB2b2lkICpjdHgsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgKCh2b2lkKSBjdHgpOworICAgIG1lbW1vdmUoIG91dHB1dCwgaW5wdXQsIGxlbmd0aCApOworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IG51bGxfc2V0a2V5KCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfYml0bGVuICkKK3sKKyAgICAoKHZvaWQpIGN0eCk7CisgICAgKCh2b2lkKSBrZXkpOworICAgICgodm9pZCkga2V5X2JpdGxlbik7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgKiBudWxsX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgcmV0dXJuKCAodm9pZCAqKSAxICk7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgKCh2b2lkKSBjdHgpOworfQorCitzdGF0aWMgY29uc3QgbWJlZHRsc19jaXBoZXJfYmFzZV90IG51bGxfYmFzZV9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX0lEX05VTEwsCisgICAgTlVMTCwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIE5VTEwsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfU1RSRUFNKQorICAgIG51bGxfY3J5cHRfc3RyZWFtLAorI2VuZGlmCisgICAgbnVsbF9zZXRrZXksCisgICAgbnVsbF9zZXRrZXksCisgICAgbnVsbF9jdHhfYWxsb2MsCisgICAgbnVsbF9jdHhfZnJlZQorfTsKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCBudWxsX2NpcGhlcl9pbmZvID0geworICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsCisgICAgTUJFRFRMU19NT0RFX1NUUkVBTSwKKyAgICAwLAorICAgICJOVUxMIiwKKyAgICAwLAorICAgIDAsCisgICAgMSwKKyAgICAmbnVsbF9iYXNlX2luZm8KK307CisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikgKi8KKworY29uc3QgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbl90IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25zW10gPQoreworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCLCAgICAgICAgICAmYWVzXzEyOF9lY2JfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0IsICAgICAgICAgICZhZXNfMTkyX2VjYl9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQiwgICAgICAgICAgJmFlc18yNTZfZWNiX2luZm8gfSwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsICAgICAgICAgICZhZXNfMTI4X2NiY19pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQywgICAgICAgICAgJmFlc18xOTJfY2JjX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCAgICAgICAgICAmYWVzXzI1Nl9jYmNfaW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4LCAgICAgICAmYWVzXzEyOF9jZmIxMjhfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DRkIxMjgsICAgICAgICZhZXNfMTkyX2NmYjEyOF9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NGQjEyOCwgICAgICAgJmFlc18yNTZfY2ZiMTI4X2luZm8gfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUiwgICAgICAgICAgJmFlc18xMjhfY3RyX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ1RSLCAgICAgICAgICAmYWVzXzE5Ml9jdHJfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DVFIsICAgICAgICAgICZhZXNfMjU2X2N0cl9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTSwgICAgICAgICAgJmFlc18xMjhfZ2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNLCAgICAgICAgICAmYWVzXzE5Ml9nY21faW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sICAgICAgICAgICZhZXNfMjU2X2djbV9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgICAgICAgICAgJmFlc18xMjhfY2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNLCAgICAgICAgICAmYWVzXzE5Ml9jY21faW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sICAgICAgICAgICZhZXNfMjU2X2NjbV9pbmZvIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsICAgICAgICAgICAgICZhcmM0XzEyOF9pbmZvIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCLCAgICAgICAgICZibG93ZmlzaF9lY2JfaW5mbyB9LAorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkMsICAgICAgICAgJmJsb3dmaXNoX2NiY19pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQsICAgICAgICZibG93ZmlzaF9jZmI2NF9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSLCAgICAgICAgICZibG93ZmlzaF9jdHJfaW5mbyB9LAorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19CTE9XRklTSF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9FQ0IsICAgICAmY2FtZWxsaWFfMTI4X2VjYl9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfRUNCLCAgICAgJmNhbWVsbGlhXzE5Ml9lY2JfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0VDQiwgICAgICZjYW1lbGxpYV8yNTZfZWNiX2luZm8gfSwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgICAgICZjYW1lbGxpYV8xMjhfY2JjX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkMsICAgICAmY2FtZWxsaWFfMTkyX2NiY19pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLCAgICAgJmNhbWVsbGlhXzI1Nl9jYmNfaW5mbyB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NGQikKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjgsICAmY2FtZWxsaWFfMTI4X2NmYjEyOF9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0ZCMTI4LCAgJmNhbWVsbGlhXzE5Ml9jZmIxMjhfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NGQjEyOCwgICZjYW1lbGxpYV8yNTZfY2ZiMTI4X2luZm8gfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIpCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSLCAgICAgJmNhbWVsbGlhXzEyOF9jdHJfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUiwgICAgICZjYW1lbGxpYV8xOTJfY3RyX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIsICAgICAmY2FtZWxsaWFfMjU2X2N0cl9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNLCAgICAgJmNhbWVsbGlhXzEyOF9nY21faW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTSwgICAgICZjYW1lbGxpYV8xOTJfZ2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sICAgICAmY2FtZWxsaWFfMjU2X2djbV9pbmZvIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgeyBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNLCAgICAgJmNhbWVsbGlhXzEyOF9jY21faW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NDTSwgICAgICZjYW1lbGxpYV8xOTJfY2NtX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQ00sICAgICAmY2FtZWxsaWFfMjU2X2NjbV9pbmZvIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0RFU19FQ0IsICAgICAgICAgICAgICAmZGVzX2VjYl9pbmZvIH0sCisgICAgeyBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0VDQiwgICAgICAgICAgJmRlc19lZGVfZWNiX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiwgICAgICAgICAmZGVzX2VkZTNfZWNiX2luZm8gfSwKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19DSVBIRVJfREVTX0NCQywgICAgICAgICAgICAgICZkZXNfY2JjX2luZm8gfSwKKyAgICB7IE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDLCAgICAgICAgICAmZGVzX2VkZV9jYmNfaW5mbyB9LAorICAgIHsgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCAgICAgICAgICZkZXNfZWRlM19jYmNfaW5mbyB9LAorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyAgICB7IE1CRURUTFNfQ0lQSEVSX05VTEwsICAgICAgICAgICAgICAgICAmbnVsbF9jaXBoZXJfaW5mbyB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSICovCisKKyAgICB7IE1CRURUTFNfQ0lQSEVSX05PTkUsIE5VTEwgfQorfTsKKworI2RlZmluZSBOVU1fQ0lQSEVSUyBzaXplb2YgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnMgLyBzaXplb2YgbWJlZHRsc19jaXBoZXJfZGVmaW5pdGlvbnNbMF0KK2ludCBtYmVkdGxzX2NpcGhlcl9zdXBwb3J0ZWRbTlVNX0NJUEhFUlNdOworCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY21hYy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvY21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OWQzYmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jbWFjLmMKQEAgLTAsMCArMSwxMDczIEBACisvKgorICogXGZpbGUgY21hYy5jCisgKgorICogXGJyaWVmIE5JU1QgU1A4MDAtMzhCIGNvbXBsaWFudCBDTUFDIGltcGxlbWVudGF0aW9uIGZvciBBRVMgYW5kIDNERVMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIFJlZmVyZW5jZXM6CisgKgorICogLSBOSVNUIFNQIDgwMC0zOEIgUmVjb21tZW5kYXRpb24gZm9yIEJsb2NrIENpcGhlciBNb2RlcyBvZiBPcGVyYXRpb246IFRoZQorICogICAgICBDTUFDIE1vZGUgZm9yIEF1dGhlbnRpY2F0aW9uCisgKiAgIGh0dHA6Ly9udmxwdWJzLm5pc3QuZ292L25pc3RwdWJzL1NwZWNpYWxQdWJsaWNhdGlvbnMvTklTVC5TUC44MDAtMzhiLnBkZgorICoKKyAqIC0gUkZDIDQ0OTMgLSBUaGUgQUVTLUNNQUMgQWxnb3JpdGhtCisgKiAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NDkzCisgKgorICogLSBSRkMgNDYxNSAtIFRoZSBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkLUNpcGhlci1iYXNlZCBNZXNzYWdlCisgKiAgICAgIEF1dGhlbnRpY2F0aW9uIENvZGUtUHNldWRvLVJhbmRvbSBGdW5jdGlvbi0xMjggKEFFUy1DTUFDLVBSRi0xMjgpCisgKiAgICAgIEFsZ29yaXRobSBmb3IgdGhlIEludGVybmV0IEtleSBFeGNoYW5nZSBQcm90b2NvbCAoSUtFKQorICogICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDYxNQorICoKKyAqICAgQWRkaXRpb25hbCB0ZXN0IHZlY3RvcnM6IElTTy9JRUMgOTc5Ny0xCisgKgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorCisjaW5jbHVkZSAibWJlZHRscy9jbWFjLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICYmIE1CRURUTFNfQUVTX0MgfHwgTUJFRFRMU19ERVNfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKXY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIE11bHRpcGxpY2F0aW9uIGJ5IHUgaW4gdGhlIEdhbG9pcyBmaWVsZCBvZiBHRigyXm4pCisgKgorICogQXMgZXhwbGFpbmVkIGluIE5JU1QgU1AgODAwLTM4QiwgdGhpcyBjYW4gYmUgY29tcHV0ZWQ6CisgKgorICogICBJZiBNU0IocCkgPSAwLCB0aGVuIHAgPSAocCA8PCAxKQorICogICBJZiBNU0IocCkgPSAxLCB0aGVuIHAgPSAocCA8PCAxKSBeIFJfbgorICogICB3aXRoIFJfNjQgPSAweDFCIGFuZCAgUl8xMjggPSAweDg3CisgKgorICogSW5wdXQgYW5kIG91dHB1dCBNVVNUIE5PVCBwb2ludCB0byB0aGUgc2FtZSBidWZmZXIKKyAqIEJsb2NrIHNpemUgbXVzdCBiZSA4IGJ5ZXMgb3IgMTYgYnl0ZXMgLSB0aGUgYmxvY2sgc2l6ZXMgZm9yIERFUyBhbmQgQUVTLgorICovCitzdGF0aWMgaW50IGNtYWNfbXVsdGlwbHlfYnlfdSggdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBibG9ja3NpemUgKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgUl8xMjggPSAweDg3OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgUl82NCA9IDB4MUI7CisgICAgdW5zaWduZWQgY2hhciBSX24sIG1hc2s7CisgICAgdW5zaWduZWQgY2hhciBvdmVyZmxvdyA9IDB4MDA7CisgICAgaW50IGk7CisKKyAgICBpZiggYmxvY2tzaXplID09IE1CRURUTFNfQUVTX0JMT0NLX1NJWkUgKQorICAgIHsKKyAgICAgICAgUl9uID0gUl8xMjg7CisgICAgfQorICAgIGVsc2UgaWYoIGJsb2Nrc2l6ZSA9PSBNQkVEVExTX0RFUzNfQkxPQ0tfU0laRSApCisgICAgeworICAgICAgICBSX24gPSBSXzY0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGZvciggaSA9IGJsb2Nrc2l6ZSAtIDE7IGkgPj0gMDsgaS0tICkKKyAgICB7CisgICAgICAgIG91dHB1dFtpXSA9IGlucHV0W2ldIDw8IDEgfCBvdmVyZmxvdzsKKyAgICAgICAgb3ZlcmZsb3cgPSBpbnB1dFtpXSA+PiA3OworICAgIH0KKworICAgIC8qIG1hc2sgPSAoIGlucHV0WzBdID4+IDcgKSA/IDB4ZmYgOiAweDAwCisgICAgICogdXNpbmcgYml0IG9wZXJhdGlvbnMgdG8gYXZvaWQgYnJhbmNoZXMgKi8KKworICAgIC8qIE1TVkMgaGFzIGEgd2FybmluZyBhYm91dCB1bmFyeSBtaW51cyBvbiB1bnNpZ25lZCwgYnV0IHRoaXMgaXMKKyAgICAgKiB3ZWxsLWRlZmluZWQgYW5kIHByZWNpc2VseSB3aGF0IHdlIHdhbnQgdG8gZG8gaGVyZSAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApCisjZW5kaWYKKyAgICBtYXNrID0gLSAoIGlucHV0WzBdID4+IDcgKTsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQorI2VuZGlmCisKKyAgICBvdXRwdXRbIGJsb2Nrc2l6ZSAtIDEgXSBePSBSX24gJiBtYXNrOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBzdWJrZXlzCisgKgorICogLSBhcyBzcGVjaWZpZWQgYnkgUkZDIDQ0OTMsIHNlY3Rpb24gMi4zIFN1YmtleSBHZW5lcmF0aW9uIEFsZ29yaXRobQorICovCitzdGF0aWMgaW50IGNtYWNfZ2VuZXJhdGVfc3Via2V5cyggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogSzEsIHVuc2lnbmVkIGNoYXIqIEsyICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgTFtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisgICAgc2l6ZV90IG9sZW4sIGJsb2NrX3NpemU7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIEwsIHNpemVvZiggTCApICk7CisKKyAgICBibG9ja19zaXplID0gY3R4LT5jaXBoZXJfaW5mby0+YmxvY2tfc2l6ZTsKKworICAgIC8qIENhbGN1bGF0ZSBFaygwKSAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggY3R4LCBMLCBibG9ja19zaXplLCBMLCAmb2xlbiApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIC8qCisgICAgICogR2VuZXJhdGUgSzEgYW5kIEsyCisgICAgICovCisgICAgaWYoICggcmV0ID0gY21hY19tdWx0aXBseV9ieV91KCBLMSwgTCAsIGJsb2NrX3NpemUgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiggKCByZXQgPSBjbWFjX211bHRpcGx5X2J5X3UoIEsyLCBLMSAsIGJsb2NrX3NpemUgKSApICE9IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKK2V4aXQ6CisgICAgbWJlZHRsc196ZXJvaXplKCBMLCBzaXplb2YoIEwgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworc3RhdGljIHZvaWQgY21hY194b3JfYmxvY2soIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmxvY2tfc2l6ZSApCit7CisgICAgc2l6ZV90IGluZGV4OworCisgICAgZm9yKCBpbmRleCA9IDA7IGluZGV4IDwgYmxvY2tfc2l6ZTsgaW5kZXgrKyApCisgICAgICAgIG91dHB1dFsgaW5kZXggXSA9IGlucHV0MVsgaW5kZXggXSBeIGlucHV0MlsgaW5kZXggXTsKK30KKworLyoKKyAqIENyZWF0ZSBwYWRkZWQgbGFzdCBibG9jayBmcm9tIChwYXJ0aWFsKSBsYXN0IGJsb2NrLgorICoKKyAqIFdlIGNhbid0IHVzZSB0aGUgcGFkZGluZyBvcHRpb24gZnJvbSB0aGUgY2lwaGVyIGxheWVyLCBhcyBpdCBvbmx5IHdvcmtzIGZvcgorICogQ0JDIGFuZCB3ZSB1c2UgRUNCIG1vZGUsIGFuZCBhbnl3YXkgd2UgbmVlZCB0byBYT1IgSzEgb3IgSzIgaW4gYWRkaXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGNtYWNfcGFkKCB1bnNpZ25lZCBjaGFyIHBhZGRlZF9ibG9ja1tNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF0sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhZGRlZF9ibG9ja19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFzdF9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGFzdF9ibG9ja19sZW4gKQoreworICAgIHNpemVfdCBqOworCisgICAgZm9yKCBqID0gMDsgaiA8IHBhZGRlZF9ibG9ja19sZW47IGorKyApCisgICAgeworICAgICAgICBpZiggaiA8IGxhc3RfYmxvY2tfbGVuICkKKyAgICAgICAgICAgIHBhZGRlZF9ibG9ja1tqXSA9IGxhc3RfYmxvY2tbal07CisgICAgICAgIGVsc2UgaWYoIGogPT0gbGFzdF9ibG9ja19sZW4gKQorICAgICAgICAgICAgcGFkZGVkX2Jsb2NrW2pdID0gMHg4MDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFkZGVkX2Jsb2NrW2pdID0gMHgwMDsKKyAgICB9Cit9CisKK2ludCBtYmVkdGxzX2NpcGhlcl9jbWFjX3N0YXJ0cyggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWJpdHMgKQoreworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCB0eXBlOworICAgIG1iZWR0bHNfY21hY19jb250ZXh0X3QgKmNtYWNfY3R4OworICAgIGludCByZXR2YWw7CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5jaXBoZXJfaW5mbyA9PSBOVUxMIHx8IGtleSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldHZhbCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggY3R4LCBrZXksIGtleWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOQ1JZUFQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldHZhbCApOworCisgICAgdHlwZSA9IGN0eC0+Y2lwaGVyX2luZm8tPnR5cGU7CisKKyAgICBzd2l0Y2goIHR5cGUgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjoKKyAgICAgICAgY2FzZSBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjoKKyAgICAgICAgY2FzZSBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjoKKyAgICAgICAgY2FzZSBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0I6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgLyogQWxsb2NhdGVkIGFuZCBpbml0aWFsaXNlIGluIHRoZSBjaXBoZXIgY29udGV4dCBtZW1vcnkgZm9yIHRoZSBDTUFDCisgICAgICogY29udGV4dCAqLworICAgIGNtYWNfY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19jbWFjX2NvbnRleHRfdCApICk7CisgICAgaWYoIGNtYWNfY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQgKTsKKworICAgIGN0eC0+Y21hY19jdHggPSBjbWFjX2N0eDsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY21hY19jdHgtPnN0YXRlLCBzaXplb2YoIGNtYWNfY3R4LT5zdGF0ZSApICk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICkKK3sKKyAgICBtYmVkdGxzX2NtYWNfY29udGV4dF90KiBjbWFjX2N0eDsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGF0ZTsKKyAgICBpbnQgbiwgaiwgcmV0ID0gMDsKKyAgICBzaXplX3Qgb2xlbiwgYmxvY2tfc2l6ZTsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPmNpcGhlcl9pbmZvID09IE5VTEwgfHwgaW5wdXQgPT0gTlVMTCB8fAorICAgICAgICBjdHgtPmNtYWNfY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgY21hY19jdHggPSBjdHgtPmNtYWNfY3R4OworICAgIGJsb2NrX3NpemUgPSBjdHgtPmNpcGhlcl9pbmZvLT5ibG9ja19zaXplOworICAgIHN0YXRlID0gY3R4LT5jbWFjX2N0eC0+c3RhdGU7CisKKyAgICAvKiBJcyB0aGVyZSBkYXRhIHN0aWxsIHRvIHByb2Nlc3MgZnJvbSB0aGUgbGFzdCBjYWxsLCB0aGF0J3MgZ3JlYXRlciBpbgorICAgICAqIHNpemUgdGhhbiBhIGJsb2NrPyAqLworICAgIGlmKCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuID4gMCAmJgorICAgICAgICBpbGVuID4gYmxvY2tfc2l6ZSAtIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW4gKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAmY21hY19jdHgtPnVucHJvY2Vzc2VkX2Jsb2NrW2NtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW5dLAorICAgICAgICAgICAgICAgIGlucHV0LAorICAgICAgICAgICAgICAgIGJsb2NrX3NpemUgLSBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuICk7CisKKyAgICAgICAgY21hY194b3JfYmxvY2soIHN0YXRlLCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfYmxvY2ssIHN0YXRlLCBibG9ja19zaXplICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCBjdHgsIHN0YXRlLCBibG9ja19zaXplLCBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaW5wdXQgKz0gYmxvY2tfc2l6ZSAtIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW47CisgICAgICAgIGlsZW4gLT0gYmxvY2tfc2l6ZSAtIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW47CisgICAgICAgIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW4gPSAwOworICAgIH0KKworICAgIC8qIG4gaXMgdGhlIG51bWJlciBvZiBibG9ja3MgaW5jbHVkaW5nIGFueSBmaW5hbCBwYXJ0aWFsIGJsb2NrICovCisgICAgbiA9ICggaWxlbiArIGJsb2NrX3NpemUgLSAxICkgLyBibG9ja19zaXplOworCisgICAvKiBJdGVyYXRlIGFjcm9zcyB0aGUgaW5wdXQgZGF0YSBpbiBibG9jayBzaXplZCBjaHVua3MgKi8KKyAgICBmb3IoIGogPSAwOyBqIDwgbiAtIDE7IGorKyApCisgICAgeworICAgICAgICBjbWFjX3hvcl9ibG9jayggc3RhdGUsIGlucHV0LCBzdGF0ZSwgYmxvY2tfc2l6ZSApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggY3R4LCBzdGF0ZSwgYmxvY2tfc2l6ZSwgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZW4gKSApICE9IDAgKQorICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWxlbiAtPSBibG9ja19zaXplOworICAgICAgICBpbnB1dCArPSBibG9ja19zaXplOworICAgIH0KKworICAgIC8qIElmIHRoZXJlIGlzIGRhdGEgbGVmdCBvdmVyIHRoYXQgd2Fzbid0IGFsaWduZWQgdG8gYSBibG9jayAqLworICAgIGlmKCBpbGVuID4gMCApCisgICAgeworICAgICAgICBtZW1jcHkoICZjbWFjX2N0eC0+dW5wcm9jZXNzZWRfYmxvY2tbY21hY19jdHgtPnVucHJvY2Vzc2VkX2xlbl0sCisgICAgICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICAgICAgaWxlbiApOworICAgICAgICBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfbGVuICs9IGlsZW47CisgICAgfQorCitleGl0OgorICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX2NpcGhlcl9jbWFjX2ZpbmlzaCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19jbWFjX2NvbnRleHRfdCogY21hY19jdHg7CisgICAgdW5zaWduZWQgY2hhciAqc3RhdGUsICpsYXN0X2Jsb2NrOworICAgIHVuc2lnbmVkIGNoYXIgSzFbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworICAgIHVuc2lnbmVkIGNoYXIgSzJbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworICAgIHVuc2lnbmVkIGNoYXIgTV9sYXN0W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBvbGVuLCBibG9ja19zaXplOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+Y2lwaGVyX2luZm8gPT0gTlVMTCB8fCBjdHgtPmNtYWNfY3R4ID09IE5VTEwgfHwKKyAgICAgICAgb3V0cHV0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgY21hY19jdHggPSBjdHgtPmNtYWNfY3R4OworICAgIGJsb2NrX3NpemUgPSBjdHgtPmNpcGhlcl9pbmZvLT5ibG9ja19zaXplOworICAgIHN0YXRlID0gY21hY19jdHgtPnN0YXRlOworCisgICAgbWJlZHRsc196ZXJvaXplKCBLMSwgc2l6ZW9mKCBLMSApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBLMiwgc2l6ZW9mKCBLMiApICk7CisgICAgY21hY19nZW5lcmF0ZV9zdWJrZXlzKCBjdHgsIEsxLCBLMiApOworCisgICAgbGFzdF9ibG9jayA9IGNtYWNfY3R4LT51bnByb2Nlc3NlZF9ibG9jazsKKworICAgIC8qIENhbGN1bGF0ZSBsYXN0IGJsb2NrICovCisgICAgaWYoIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW4gPCBibG9ja19zaXplICkKKyAgICB7CisgICAgICAgIGNtYWNfcGFkKCBNX2xhc3QsIGJsb2NrX3NpemUsIGxhc3RfYmxvY2ssIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW4gKTsKKyAgICAgICAgY21hY194b3JfYmxvY2soIE1fbGFzdCwgTV9sYXN0LCBLMiwgYmxvY2tfc2l6ZSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBMYXN0IGJsb2NrIGlzIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgIGNtYWNfeG9yX2Jsb2NrKCBNX2xhc3QsIGxhc3RfYmxvY2ssIEsxLCBibG9ja19zaXplICk7CisgICAgfQorCisKKyAgICBjbWFjX3hvcl9ibG9jayggc3RhdGUsIE1fbGFzdCwgc3RhdGUsIGJsb2NrX3NpemUgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoIGN0eCwgc3RhdGUsIGJsb2NrX3NpemUsIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1lbWNweSggb3V0cHV0LCBzdGF0ZSwgYmxvY2tfc2l6ZSApOworCitleGl0OgorICAgIC8qIFdpcGUgdGhlIGdlbmVyYXRlZCBrZXlzIG9uIHRoZSBzdGFjaywgYW5kIGFueSBvdGhlciB0cmFuc2llbnRzIHRvIGF2b2lkCisgICAgICogc2lkZSBjaGFubmVsIGxlYWthZ2UgKi8KKyAgICBtYmVkdGxzX3plcm9pemUoIEsxLCBzaXplb2YoIEsxICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIEsyLCBzaXplb2YoIEsyICkgKTsKKworICAgIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9sZW4gPSAwOworICAgIG1iZWR0bHNfemVyb2l6ZSggY21hY19jdHgtPnVucHJvY2Vzc2VkX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfYmxvY2sgKSApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBzdGF0ZSwgTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVggKTsKKyAgICByZXR1cm4oIHJldCApOworfQorCitpbnQgbWJlZHRsc19jaXBoZXJfY21hY19yZXNldCggbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHggKQoreworICAgIG1iZWR0bHNfY21hY19jb250ZXh0X3QqIGNtYWNfY3R4OworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+Y2lwaGVyX2luZm8gPT0gTlVMTCB8fCBjdHgtPmNtYWNfY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgY21hY19jdHggPSBjdHgtPmNtYWNfY3R4OworCisgICAgLyogUmVzZXQgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgY21hY19jdHgtPnVucHJvY2Vzc2VkX2xlbiA9IDA7CisgICAgbWJlZHRsc196ZXJvaXplKCBjbWFjX2N0eC0+dW5wcm9jZXNzZWRfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGNtYWNfY3R4LT51bnByb2Nlc3NlZF9ibG9jayApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBjbWFjX2N0eC0+c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGNtYWNfY3R4LT5zdGF0ZSApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgaW50IHJldDsKKworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMIHx8IGtleSA9PSBOVUxMIHx8IGlucHV0ID09IE5VTEwgfHwgb3V0cHV0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoICZjdHgsIGtleSwga2V5bGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsIGlucHV0LCBpbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goICZjdHgsIG91dHB1dCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgQUVTLUNNQUMtUFJGLTEyOCBkZWZpbmVkIGluIFJGQyA0NjE1CisgKi8KK2ludCBtYmVkdGxzX2Flc19jbWFjX3ByZl8xMjgoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIHVuc2lnbmVkIGNoYXIgemVyb19rZXlbTUJFRFRMU19BRVNfQkxPQ0tfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBpbnRfa2V5W01CRURUTFNfQUVTX0JMT0NLX1NJWkVdOworCisgICAgaWYoIGtleSA9PSBOVUxMIHx8IGlucHV0ID09IE5VTEwgfHwgb3V0cHV0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IgKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICAvKiBGYWlsaW5nIGF0IHRoaXMgcG9pbnQgbXVzdCBiZSBkdWUgdG8gYSBidWlsZCBpc3N1ZSAqLworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBrZXlfbGVuZ3RoID09IE1CRURUTFNfQUVTX0JMT0NLX1NJWkUgKQorICAgIHsKKyAgICAgICAgLyogVXNlIGtleSBhcyBpcyAqLworICAgICAgICBtZW1jcHkoIGludF9rZXksIGtleSwgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZW1zZXQoIHplcm9fa2V5LCAwLCBNQkVEVExTX0FFU19CTE9DS19TSVpFICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfY21hYyggY2lwaGVyX2luZm8sIHplcm9fa2V5LCAxMjgsIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbmd0aCwgaW50X2tleSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNpcGhlcl9pbmZvLCBpbnRfa2V5LCAxMjgsIGlucHV0LCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc196ZXJvaXplKCBpbnRfa2V5LCBzaXplb2YoIGludF9rZXkgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoKKyAqIENNQUMgdGVzdCBkYXRhIGZvciBTUDgwMC0zOEIKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVC90b29sa2l0L2RvY3VtZW50cy9FeGFtcGxlcy9BRVNfQ01BQy5wZGYKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVC90b29sa2l0L2RvY3VtZW50cy9FeGFtcGxlcy9UREVTX0NNQUMucGRmCisgKgorICogQUVTLUNNQUMtUFJGLTEyOCB0ZXN0IGRhdGEgZnJvbSBSRkMgNDYxNQorICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2MTUjcGFnZS00CisgKi8KKworI2RlZmluZSBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgNAorI2RlZmluZSBOQl9QUkZfVEVTVFMgMworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisvKiBBbGwgQ01BQyB0ZXN0IGlucHV0cyBhcmUgdHJ1bmNhdGVkIGZyb20gdGhlIHNhbWUgNjQgYnl0ZSBidWZmZXIuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB0ZXN0X21lc3NhZ2VbXSA9IHsKKyAgICAvKiBQVCAqLworICAgIDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsICAgICAweDJlLCAweDQwLCAweDlmLCAweDk2LAorICAgIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsICAgICAweDczLCAweDkzLCAweDE3LCAweDJhLAorICAgIDB4YWUsIDB4MmQsIDB4OGEsIDB4NTcsICAgICAweDFlLCAweDAzLCAweGFjLCAweDljLAorICAgIDB4OWUsIDB4YjcsIDB4NmYsIDB4YWMsICAgICAweDQ1LCAweGFmLCAweDhlLCAweDUxLAorICAgIDB4MzAsIDB4YzgsIDB4MWMsIDB4NDYsICAgICAweGEzLCAweDVjLCAweGU0LCAweDExLAorICAgIDB4ZTUsIDB4ZmIsIDB4YzEsIDB4MTksICAgICAweDFhLCAweDBhLCAweDUyLCAweGVmLAorICAgIDB4ZjYsIDB4OWYsIDB4MjQsIDB4NDUsICAgICAweGRmLCAweDRmLCAweDliLCAweDE3LAorICAgIDB4YWQsIDB4MmIsIDB4NDEsIDB4N2IsICAgICAweGU2LCAweDZjLCAweDM3LCAweDEwCit9OworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgfHwgTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorLyogVHJ1bmNhdGlvbiBwb2ludCBvZiBtZXNzYWdlIGZvciBBRVMgQ01BQyB0ZXN0cyAgKi8KK3N0YXRpYyBjb25zdCAgdW5zaWduZWQgaW50ICBhZXNfbWVzc2FnZV9sZW5ndGhzW05CX0NNQUNfVEVTVFNfUEVSX0tFWV0gPSB7CisgICAgLyogTWxlbiAqLworICAgIDAsCisgICAgMTYsCisgICAgMjAsCisgICAgNjQKK307CisKKy8qIENNQUMtQUVTMTI4IFRlc3QgRGF0YSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0geworICAgIDB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsICAgICAweDI4LCAweGFlLCAweGQyLCAweGE2LAorICAgIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsICAgICAweDA5LCAweGNmLCAweDRmLCAweDNjCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9zdWJrZXlzWzJdW01CRURUTFNfQUVTX0JMT0NLX1NJWkVdID0geworICAgIHsKKyAgICAgICAgLyogSzEgKi8KKyAgICAgICAgMHhmYiwgMHhlZSwgMHhkNiwgMHgxOCwgICAgIDB4MzUsIDB4NzEsIDB4MzMsIDB4NjYsCisgICAgICAgIDB4N2MsIDB4ODUsIDB4ZTAsIDB4OGYsICAgICAweDcyLCAweDM2LCAweGE4LCAweGRlCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEsyICovCisgICAgICAgIDB4ZjcsIDB4ZGQsIDB4YWMsIDB4MzAsICAgICAweDZhLCAweGUyLCAweDY2LCAweGNjLAorICAgICAgICAweGY5LCAweDBiLCAweGMxLCAweDFlLCAgICAgMHhlNCwgMHg2ZCwgMHg1MSwgMHgzYgorICAgIH0KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X2V4cGVjdGVkX3Jlc3VsdFtOQl9DTUFDX1RFU1RTX1BFUl9LRVldW01CRURUTFNfQUVTX0JMT0NLX1NJWkVdID0geworICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjMSAqLworICAgICAgICAweGJiLCAweDFkLCAweDY5LCAweDI5LCAgICAgMHhlOSwgMHg1OSwgMHgzNywgMHgyOCwKKyAgICAgICAgMHg3ZiwgMHhhMywgMHg3ZCwgMHgxMiwgICAgIDB4OWIsIDB4NzUsIDB4NjcsIDB4NDYKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjMiAqLworICAgICAgICAweDA3LCAweDBhLCAweDE2LCAweGI0LCAgICAgMHg2YiwgMHg0ZCwgMHg0MSwgMHg0NCwKKyAgICAgICAgMHhmNywgMHg5YiwgMHhkZCwgMHg5ZCwgICAgIDB4ZDAsIDB4NGEsIDB4MjgsIDB4N2MKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjMyAqLworICAgICAgICAweDdkLCAweDg1LCAweDQ0LCAweDllLCAgICAgMHhhNiwgMHhlYSwgMHgxOSwgMHhjOCwKKyAgICAgICAgMHgyMywgMHhhNywgMHhiZiwgMHg3OCwgICAgIDB4ODMsIDB4N2QsIDB4ZmEsIDB4ZGUKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogRXhhbXBsZSAjNCAqLworICAgICAgICAweDUxLCAweGYwLCAweGJlLCAweGJmLCAgICAgMHg3ZSwgMHgzYiwgMHg5ZCwgMHg5MiwKKyAgICAgICAgMHhmYywgMHg0OSwgMHg3NCwgMHgxNywgICAgIDB4NzksIDB4MzYsIDB4M2MsIDB4ZmUKKyAgICB9Cit9OworCisvKiBDTUFDLUFFUzE5MiBUZXN0IERhdGEgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9IHsKKyAgICAweDhlLCAweDczLCAweGIwLCAweGY3LCAgICAgMHhkYSwgMHgwZSwgMHg2NCwgMHg1MiwKKyAgICAweGM4LCAweDEwLCAweGYzLCAweDJiLCAgICAgMHg4MCwgMHg5MCwgMHg3OSwgMHhlNSwKKyAgICAweDYyLCAweGY4LCAweGVhLCAweGQyLCAgICAgMHg1MiwgMHgyYywgMHg2YiwgMHg3YgorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfc3Via2V5c1syXVtNQkVEVExTX0FFU19CTE9DS19TSVpFXSA9IHsKKyAgICB7CisgICAgICAgIC8qIEsxICovCisgICAgICAgIDB4NDQsIDB4OGEsIDB4NWIsIDB4MWMsICAgICAweDkzLCAweDUxLCAweDRiLCAweDI3LAorICAgICAgICAweDNlLCAweGU2LCAweDQzLCAweDlkLCAgICAgMHhkNCwgMHhkYSwgMHhhMiwgMHg5NgorICAgIH0sCisgICAgeworICAgICAgICAvKiBLMiAqLworICAgICAgICAweDg5LCAweDE0LCAweGI2LCAweDM5LCAgICAgMHgyNiwgMHhhMiwgMHg5NiwgMHg0ZSwKKyAgICAgICAgMHg3ZCwgMHhjYywgMHg4NywgMHgzYiwgICAgIDB4YTksIDB4YjUsIDB4NDUsIDB4MmMKKyAgICB9Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9leHBlY3RlZF9yZXN1bHRbTkJfQ01BQ19URVNUU19QRVJfS0VZXVtNQkVEVExTX0FFU19CTE9DS19TSVpFXSA9IHsKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzEgKi8KKyAgICAgICAgMHhkMSwgMHg3ZCwgMHhkZiwgMHg0NiwgICAgIDB4YWQsIDB4YWEsIDB4Y2QsIDB4ZTUsCisgICAgICAgIDB4MzEsIDB4Y2EsIDB4YzQsIDB4ODMsICAgICAweGRlLCAweDdhLCAweDkzLCAweDY3CisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzIgKi8KKyAgICAgICAgMHg5ZSwgMHg5OSwgMHhhNywgMHhiZiwgICAgIDB4MzEsIDB4ZTcsIDB4MTAsIDB4OTAsCisgICAgICAgIDB4MDYsIDB4NjIsIDB4ZjYsIDB4NWUsICAgICAweDYxLCAweDdjLCAweDUxLCAweDg0CisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzMgKi8KKyAgICAgICAgMHgzZCwgMHg3NSwgMHhjMSwgMHg5NCwgICAgIDB4ZWQsIDB4OTYsIDB4MDcsIDB4MDQsCisgICAgICAgIDB4NDQsIDB4YTksIDB4ZmEsIDB4N2UsICAgICAweGM3LCAweDQwLCAweGVjLCAweGY4CisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEV4YW1wbGUgIzQgKi8KKyAgICAgICAgMHhhMSwgMHhkNSwgMHhkZiwgMHgwZSwgICAgIDB4ZWQsIDB4NzksIDB4MGYsIDB4NzksCisgICAgICAgIDB4NGQsIDB4NzcsIDB4NTgsIDB4OTYsICAgICAweDU5LCAweGYzLCAweDlhLCAweDExCisgICAgfQorfTsKKworLyogQ01BQy1BRVMyNTYgVGVzdCBEYXRhICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPSB7CisgICAgMHg2MCwgMHgzZCwgMHhlYiwgMHgxMCwgICAgIDB4MTUsIDB4Y2EsIDB4NzEsIDB4YmUsCisgICAgMHgyYiwgMHg3MywgMHhhZSwgMHhmMCwgICAgIDB4ODUsIDB4N2QsIDB4NzcsIDB4ODEsCisgICAgMHgxZiwgMHgzNSwgMHgyYywgMHgwNywgICAgIDB4M2IsIDB4NjEsIDB4MDgsIDB4ZDcsCisgICAgMHgyZCwgMHg5OCwgMHgxMCwgMHhhMywgICAgIDB4MDksIDB4MTQsIDB4ZGYsIDB4ZjQKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3N1YmtleXNbMl1bTUJFRFRMU19BRVNfQkxPQ0tfU0laRV0gPSB7CisgICAgeworICAgICAgICAvKiBLMSAqLworICAgICAgICAweGNhLCAweGQxLCAweGVkLCAweDAzLCAgICAgMHgyOSwgMHg5ZSwgMHhlZCwgMHhhYywKKyAgICAgICAgMHgyZSwgMHg5YSwgMHg5OSwgMHg4MCwgICAgIDB4ODYsIDB4MjEsIDB4NTAsIDB4MmYKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogSzIgKi8KKyAgICAgICAgMHg5NSwgMHhhMywgMHhkYSwgMHgwNiwgICAgIDB4NTMsIDB4M2QsIDB4ZGIsIDB4NTgsCisgICAgICAgIDB4NWQsIDB4MzUsIDB4MzMsIDB4MDEsICAgICAweDBjLCAweDQyLCAweGEwLCAweGQ5CisgICAgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfZXhwZWN0ZWRfcmVzdWx0W05CX0NNQUNfVEVTVFNfUEVSX0tFWV1bTUJFRFRMU19BRVNfQkxPQ0tfU0laRV0gPSB7CisgICAgeworICAgICAgICAvKiBFeGFtcGxlICMxICovCisgICAgICAgIDB4MDIsIDB4ODksIDB4NjIsIDB4ZjYsICAgICAweDFiLCAweDdiLCAweGY4LCAweDllLAorICAgICAgICAweGZjLCAweDZiLCAweDU1LCAweDFmLCAgICAgMHg0NiwgMHg2NywgMHhkOSwgMHg4MworICAgIH0sCisgICAgeworICAgICAgICAvKiBFeGFtcGxlICMyICovCisgICAgICAgIDB4MjgsIDB4YTcsIDB4MDIsIDB4M2YsICAgICAweDQ1LCAweDJlLCAweDhmLCAweDgyLAorICAgICAgICAweGJkLCAweDRiLCAweGYyLCAweDhkLCAgICAgMHg4YywgMHgzNywgMHhjMywgMHg1YworICAgIH0sCisgICAgeworICAgICAgICAvKiBFeGFtcGxlICMzICovCisgICAgICAgIDB4MTUsIDB4NjcsIDB4MjcsIDB4ZGMsICAgICAweDA4LCAweDc4LCAweDk0LCAweDRhLAorICAgICAgICAweDAyLCAweDNjLCAweDFmLCAweGUwLCAgICAgMHgzYiwgMHhhZCwgMHg2ZCwgMHg5MworICAgIH0sCisgICAgeworICAgICAgICAvKiBFeGFtcGxlICM0ICovCisgICAgICAgIDB4ZTEsIDB4OTksIDB4MjEsIDB4OTAsICAgICAweDU0LCAweDlmLCAweDZlLCAweGQ1LAorICAgICAgICAweDY5LCAweDZhLCAweDJjLCAweDA1LCAgICAgMHg2YywgMHgzMSwgMHg1NCwgMHgxMAorICAgIH0KK307CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorLyogVHJ1bmNhdGlvbiBwb2ludCBvZiBtZXNzYWdlIGZvciAzREVTIENNQUMgdGVzdHMgICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlczNfbWVzc2FnZV9sZW5ndGhzW05CX0NNQUNfVEVTVFNfUEVSX0tFWV0gPSB7CisgICAgMCwKKyAgICAxNiwKKyAgICAyMCwKKyAgICAzMgorfTsKKworLyogQ01BQy1UREVTIChHZW5lcmF0aW9uKSAtIDIgS2V5IFRlc3QgRGF0YSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM18ya2V5X2tleVsyNF0gPSB7CisgICAgLyogS2V5MSAqLworICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsICAgICAweDg5LCAweGFiLCAweGNkLCAweGVmLAorICAgIC8qIEtleTIgKi8KKyAgICAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAgICAgMHhhYiwgMHhjZCwgMHhFRiwgMHgwMSwKKyAgICAvKiBLZXkzICovCisgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgICAgIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZXMzXzJrZXlfc3Via2V5c1syXVs4XSA9IHsKKyAgICB7CisgICAgICAgIC8qIEsxICovCisgICAgICAgIDB4MGQsIDB4ZDIsIDB4Y2IsIDB4N2EsICAgICAweDNkLCAweDg4LCAweDg4LCAweGQ5CisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIEsyICovCisgICAgICAgIDB4MWIsIDB4YTUsIDB4OTYsIDB4ZjQsICAgICAweDdiLCAweDExLCAweDExLCAweGIyCisgICAgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfMmtleV9leHBlY3RlZF9yZXN1bHRbTkJfQ01BQ19URVNUU19QRVJfS0VZXVtNQkVEVExTX0RFUzNfQkxPQ0tfU0laRV0gPSB7CisgICAgeworICAgICAgICAvKiBTYW1wbGUgIzEgKi8KKyAgICAgICAgMHg3OSwgMHhjZSwgMHg1MiwgMHhhNywgICAgIDB4ZjcsIDB4ODYsIDB4YTksIDB4NjAKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogU2FtcGxlICMyICovCisgICAgICAgIDB4Y2MsIDB4MTgsIDB4YTAsIDB4YjcsICAgICAweDlhLCAweGYyLCAweDQxLCAweDNiCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIFNhbXBsZSAjMyAqLworICAgICAgICAweGMwLCAweDZkLCAweDM3LCAweDdlLCAgICAgMHhjZCwgMHgxMCwgMHgxOSwgMHg2OQorICAgIH0sCisgICAgeworICAgICAgICAvKiBTYW1wbGUgIzQgKi8KKyAgICAgICAgMHg5YywgMHhkMywgMHgzNSwgMHg4MCwgICAgIDB4ZjksIDB4YjYsIDB4NGQsIDB4ZmIKKyAgICB9Cit9OworCisvKiBDTUFDLVRERVMgKEdlbmVyYXRpb24pIC0gMyBLZXkgVGVzdCBEYXRhICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZXMzXzNrZXlfa2V5WzI0XSA9IHsKKyAgICAvKiBLZXkxICovCisgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgICAgIDB4ODksIDB4YWEsIDB4Y2QsIDB4ZWYsCisgICAgLyogS2V5MiAqLworICAgIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksICAgICAweGFiLCAweGNkLCAweGVmLCAweDAxLAorICAgIC8qIEtleTMgKi8KKyAgICAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAgICAgMHhjZCwgMHhlZiwgMHgwMSwgMHgyMworfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlczNfM2tleV9zdWJrZXlzWzJdWzhdID0geworICAgIHsKKyAgICAgICAgLyogSzEgKi8KKyAgICAgICAgMHg5ZCwgMHg3NCwgMHhlNywgMHgzOSwgICAgIDB4MzMsIDB4MTcsIDB4OTYsIDB4YzAKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogSzIgKi8KKyAgICAgICAgMHgzYSwgMHhlOSwgMHhjZSwgMHg3MiwgICAgIDB4NjYsIDB4MmYsIDB4MmQsIDB4OWIKKyAgICB9Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM18za2V5X2V4cGVjdGVkX3Jlc3VsdFtOQl9DTUFDX1RFU1RTX1BFUl9LRVldW01CRURUTFNfREVTM19CTE9DS19TSVpFXSA9IHsKKyAgICB7CisgICAgICAgIC8qIFNhbXBsZSAjMSAqLworICAgICAgICAweDdkLCAweGIwLCAweGQzLCAweDdkLCAgICAgMHhmOSwgMHgzNiwgMHhjNSwgMHg1MAorICAgIH0sCisgICAgeworICAgICAgICAvKiBTYW1wbGUgIzIgKi8KKyAgICAgICAgMHgzMCwgMHgyMywgMHg5YywgMHhmMSwgICAgIDB4ZjUsIDB4MmUsIDB4NjYsIDB4MDkKKyAgICB9LAorICAgIHsKKyAgICAgICAgLyogU2FtcGxlICMzICovCisgICAgICAgIDB4NmMsIDB4OWYsIDB4M2UsIDB4ZTQsICAgICAweDkyLCAweDNmLCAweDZiLCAweGUyCisgICAgfSwKKyAgICB7CisgICAgICAgIC8qIFNhbXBsZSAjNCAqLworICAgICAgICAweDk5LCAweDQyLCAweDliLCAweGQwLCAgICAgMHhiRiwgMHg3OSwgMHgwNCwgMHhlNQorICAgIH0KK307CisKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisvKiBBRVMgQUVTLUNNQUMtUFJGLTEyOCBUZXN0IERhdGEgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBSRktbXSA9IHsKKyAgICAvKiBLZXkgKi8KKyAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAgICAgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKyAgICAweGVkLCAweGNiCit9OworCisvKiBTaXplcyBpbiBieXRlcyAqLworc3RhdGljIGNvbnN0IHNpemVfdCBQUkZLbGVuW05CX1BSRl9URVNUU10gPSB7CisgICAgMTgsCisgICAgMTYsCisgICAgMTAKK307CisKKy8qIE1lc3NhZ2UgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBSRk1bXSA9IHsKKyAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAgICAgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKyAgICAweDEwLCAweDExLCAweDEyLCAweDEzCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBQUkZUW05CX1BSRl9URVNUU11bMTZdID0geworICAgIHsKKyAgICAgICAgMHg4NCwgMHhhMywgMHg0OCwgMHhhNCwgICAgIDB4YTQsIDB4NWQsIDB4MjMsIDB4NWIsCisgICAgICAgIDB4YWIsIDB4ZmYsIDB4ZmMsIDB4MGQsICAgICAweDJiLCAweDRkLCAweGEwLCAweDlhCisgICAgfSwKKyAgICB7CisgICAgICAgIDB4OTgsIDB4MGEsIDB4ZTgsIDB4N2IsICAgICAweDVmLCAweDRjLCAweDljLCAweDUyLAorICAgICAgICAweDE0LCAweGY1LCAweGI2LCAweGE4LCAgICAgMHg0NSwgMHg1ZSwgMHg0YywgMHgyZAorICAgIH0sCisgICAgeworICAgICAgICAweDI5LCAweDBkLCAweDllLCAweDExLCAgICAgMHgyZSwgMHhkYiwgMHgwOSwgMHhlZSwKKyAgICAgICAgMHgxNCwgMHgxZiwgMHhjZiwgMHg2NCwgICAgIDB4YzAsIDB4YjcsIDB4MmYsIDB4M2QKKyAgICB9Cit9OworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworc3RhdGljIGludCBjbWFjX3Rlc3Rfc3Via2V5cyggaW50IHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXN0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXliaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3Via2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV90ZXN0cyApCit7CisgICAgaW50IGksIHJldDsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgdW5zaWduZWQgY2hhciBLMVtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisgICAgdW5zaWduZWQgY2hhciBLMltNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfdHlwZSApOworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qIEZhaWxpbmcgYXQgdGhpcyBwb2ludCBtdXN0IGJlIGR1ZSB0byBhIGJ1aWxkIGlzc3VlICovCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbnVtX3Rlc3RzOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgJXMgQ01BQyBzdWJrZXkgIyV1OiAiLCB0ZXN0bmFtZSwgaSArIDEgKTsKKworICAgICAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJ0ZXN0IGV4ZWN1dGlvbiBmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4LCBrZXksIGtleWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOQ1JZUFQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInRlc3QgZXhlY3V0aW9uIGZhaWxlZFxuIiApOworCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBjbWFjX2dlbmVyYXRlX3N1YmtleXMoICZjdHgsIEsxLCBLMiApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1lbWNtcCggSzEsIHN1YmtleXMsIGJsb2NrX3NpemUgKSApICE9IDAgIHx8CisgICAgICAgICAgICAoIHJldCA9IG1lbWNtcCggSzIsICZzdWJrZXlzW2Jsb2NrX3NpemVdLCBibG9ja19zaXplICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKKyAgICB9CisKKyAgICBnb3RvIGV4aXQ7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eCApOworCitleGl0OgorICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyBpbnQgY21hY190ZXN0X3d0aF9jaXBoZXIoIGludCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGVzdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5Yml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1lc3NhZ2VfbGVuZ3Roc1s0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGV4cGVjdGVkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV90ZXN0cyApCit7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBpbnQgaSwgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl90eXBlICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogRmFpbGluZyBhdCB0aGlzIHBvaW50IG11c3QgYmUgZHVlIHRvIGEgYnVpbGQgaXNzdWUgKi8KKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbnVtX3Rlc3RzOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgJXMgQ01BQyAjJXU6ICIsIHRlc3RuYW1lLCBpICsgMSApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNpcGhlcl9pbmZvLCBrZXksIGtleWJpdHMsIG1lc3NhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2xlbmd0aHNbaV0sIG91dHB1dCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtZW1jbXAoIG91dHB1dCwgJmV4cGVjdGVkX3Jlc3VsdFtpICogYmxvY2tfc2l6ZV0sIGJsb2NrX3NpemUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorc3RhdGljIGludCB0ZXN0X2FlczEyOF9jbWFjX3ByZiggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpOworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbTUJFRFRMU19BRVNfQkxPQ0tfU0laRV07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTkJfUFJGX1RFU1RTOyBpKysgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUyBDTUFDIDEyOCBQUkYgIyV1OiAiLCBpICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOCggUFJGSywgUFJGS2xlbltpXSwgUFJGTSwgMjAsIG91dHB1dCApOworICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcCggb3V0cHV0LCBQUkZUW2ldLCBNQkVEVExTX0FFU19CTE9DS19TSVpFICkgIT0gMCApCisgICAgICAgIHsKKworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCitpbnQgbWJlZHRsc19jbWFjX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgLyogQUVTLTEyOCAqLworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF9zdWJrZXlzKCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUVTIDEyOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlc18xMjhfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilhZXNfMTI4X3N1YmtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FFU19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfd3RoX2NpcGhlciggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFFUyAxMjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXNfMTI4X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlc19tZXNzYWdlX2xlbmd0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilhZXNfMTI4X2V4cGVjdGVkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQUVTX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0NNQUNfVEVTVFNfUEVSX0tFWSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qIEFFUy0xOTIgKi8KKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfc3Via2V5cyggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFFUyAxOTIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXNfMTkyX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopYWVzXzE5Ml9zdWJrZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQ01BQ19URVNUU19QRVJfS0VZICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gY21hY190ZXN0X3d0aF9jaXBoZXIoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRVMgMTkyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzXzE5Ml9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXNfbWVzc2FnZV9sZW5ndGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopYWVzXzE5Ml9leHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FFU19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBBRVMtMjU2ICovCisgICAgaWYoICggcmV0ID0gY21hY190ZXN0X3N1YmtleXMoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRVMgMjU2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzXzI1Nl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWFlc18yNTZfc3Via2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQUVTX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0NNQUNfVEVTVFNfUEVSX0tFWSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF93dGhfY2lwaGVyICggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRVMgMjU2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFlc18yNTZfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWVzX21lc3NhZ2VfbGVuZ3RocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilhZXNfMjU2X2V4cGVjdGVkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BRVNfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0NNQUNfVEVTVFNfUEVSX0tFWSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisgICAgLyogM0RFUyAyIGtleSAqLworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF9zdWJrZXlzKCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiM0RFUyAyIGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczNfMmtleV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRlczNfMmtleV9zdWJrZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVTM19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBjbWFjX3Rlc3Rfd3RoX2NpcGhlciggdmVyYm9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjNERVMgMiBrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXMzXzJrZXlfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzM19tZXNzYWdlX2xlbmd0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyKilkZXMzXzJrZXlfZXhwZWN0ZWRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19FQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfREVTM19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9DTUFDX1RFU1RTX1BFUl9LRVkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiAzREVTIDMga2V5ICovCisgICAgaWYoICggcmV0ID0gY21hY190ZXN0X3N1YmtleXMoIHZlcmJvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzREVTIDMga2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzM18za2V5X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopZGVzM18za2V5X3N1YmtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ERVMzX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0NNQUNfVEVTVFNfUEVSX0tFWSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IGNtYWNfdGVzdF93dGhfY2lwaGVyKCB2ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiM0RFUyAzIGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczNfM2tleV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXMzX21lc3NhZ2VfbGVuZ3RocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRlczNfM2tleV9leHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ERVMzX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0NNQUNfVEVTVFNfUEVSX0tFWSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgaWYoICggcmV0ID0gdGVzdF9hZXMxMjhfY21hY19wcmYoIHZlcmJvc2UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2N0cl9kcmJnLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jdHJfZHJiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NmY4YWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9jdHJfZHJiZy5jCkBAIC0wLDAgKzEsNTkzIEBACisvKgorICogIENUUl9EUkJHIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEFFUy0yNTYgKE5JU1QgU1AgODAwLTkwKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgTklTVCBTUCA4MDAtOTAgRFJCR3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHB1Ymx1Y2F0aW9uLgorICoKKyAqICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTkwL1NQODAwLTkwcmV2aXNlZF9NYXJjaDIwMDcucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBDVFJfRFJCRyBjb250ZXh0IGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ19pbml0KCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKK30KKworLyoKKyAqIE5vbi1wdWJsaWMgZnVuY3Rpb24gd3JhcHBlZCBieSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoKS4gTmVjZXNzYXJ5IHRvIGFsbG93CisgKiBOSVNUIHRlc3RzIHRvIHN1Y2NlZWQgKHdoaWNoIHJlcXVpcmUga25vd24gbGVuZ3RoIGZpeGVkIGVudHJvcHkpCisgKi8KK2ludCBtYmVkdGxzX2N0cl9kcmJnX3NlZWRfZW50cm9weV9sZW4oCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9lbnRyb3B5KSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VzdG9tLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVudHJvcHlfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfQ1RSX0RSQkdfS0VZU0laRV07CisKKyAgICBtZW1zZXQoIGtleSwgMCwgTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFICk7CisKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4LT5hZXNfY3R4ICk7CisKKyAgICBjdHgtPmZfZW50cm9weSA9IGZfZW50cm9weTsKKyAgICBjdHgtPnBfZW50cm9weSA9IHBfZW50cm9weTsKKworICAgIGN0eC0+ZW50cm9weV9sZW4gPSBlbnRyb3B5X2xlbjsKKyAgICBjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IE1CRURUTFNfQ1RSX0RSQkdfUkVTRUVEX0lOVEVSVkFMOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXplIHdpdGggYW4gZW1wdHkga2V5CisgICAgICovCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eC0+YWVzX2N0eCwga2V5LCBNQkVEVExTX0NUUl9EUkJHX0tFWUJJVFMgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCBjdHgsIGN1c3RvbSwgbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19jdHJfZHJiZ19zZWVkKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX2VudHJvcHkpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXN0b20sCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWRfZW50cm9weV9sZW4oIGN0eCwgZl9lbnRyb3B5LCBwX2VudHJvcHksIGN1c3RvbSwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19FTlRST1BZX0xFTiApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHgtPmFlc19jdHggKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsIGludCByZXNpc3RhbmNlICkKK3sKKyAgICBjdHgtPnByZWRpY3Rpb25fcmVzaXN0YW5jZSA9IHJlc2lzdGFuY2U7Cit9CisKK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ19zZXRfZW50cm9weV9sZW4oIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LCBzaXplX3QgbGVuICkKK3sKKyAgICBjdHgtPmVudHJvcHlfbGVuID0gbGVuOworfQorCit2b2lkIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCggbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHgsIGludCBpbnRlcnZhbCApCit7CisgICAgY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKK30KKworc3RhdGljIGludCBibG9ja19jaXBoZXJfZGYoIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YV9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgKyBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSArIDE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFtNQkVEVExTX0NUUl9EUkJHX1NFRURMRU5dOworICAgIHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfQ1RSX0RSQkdfS0VZU0laRV07CisgICAgdW5zaWduZWQgY2hhciBjaGFpbltNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRV07CisgICAgdW5zaWduZWQgY2hhciAqcCwgKml2OworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzX2N0eDsKKworICAgIGludCBpLCBqOworICAgIHNpemVfdCBidWZfbGVuLCB1c2VfbGVuOworCisgICAgaWYoIGRhdGFfbGVuID4gTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRyApOworCisgICAgbWVtc2V0KCBidWYsIDAsIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgKyBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSArIDE2ICk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmFlc19jdHggKTsKKworICAgIC8qCisgICAgICogQ29uc3RydWN0IElWICgxNiBieXRlcykgYW5kIFMgaW4gYnVmZmVyCisgICAgICogSVYgPSBDb3VudGVyIChpbiAzMi1iaXRzKSBwYWRkZWQgdG8gMTYgd2l0aCB6ZXJvZXMKKyAgICAgKiBTID0gTGVuZ3RoIGlucHV0IHN0cmluZyAoaW4gMzItYml0cykgfHwgTGVuZ3RoIG9mIG91dHB1dCAoaW4gMzItYml0cykgfHwKKyAgICAgKiAgICAgZGF0YSB8fCAweDgwCisgICAgICogICAgIChUb3RhbCBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiAxNi1ieXRlcyB3aXRoIHplcm9lcykKKyAgICAgKi8KKyAgICBwID0gYnVmICsgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkU7CisgICAgKnArKyA9ICggZGF0YV9sZW4gPj4gMjQgKSAmIDB4ZmY7CisgICAgKnArKyA9ICggZGF0YV9sZW4gPj4gMTYgKSAmIDB4ZmY7CisgICAgKnArKyA9ICggZGF0YV9sZW4gPj4gOCAgKSAmIDB4ZmY7CisgICAgKnArKyA9ICggZGF0YV9sZW4gICAgICAgKSAmIDB4ZmY7CisgICAgcCArPSAzOworICAgICpwKysgPSBNQkVEVExTX0NUUl9EUkJHX1NFRURMRU47CisgICAgbWVtY3B5KCBwLCBkYXRhLCBkYXRhX2xlbiApOworICAgIHBbZGF0YV9sZW5dID0gMHg4MDsKKworICAgIGJ1Zl9sZW4gPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSArIDggKyBkYXRhX2xlbiArIDE7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFOyBpKysgKQorICAgICAgICBrZXlbaV0gPSBpOworCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmFlc19jdHgsIGtleSwgTUJFRFRMU19DVFJfRFJCR19LRVlCSVRTICk7CisKKyAgICAvKgorICAgICAqIFJlZHVjZSBkYXRhIHRvIE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTiBieXRlcyBvZiBkYXRhCisgICAgICovCisgICAgZm9yKCBqID0gMDsgaiA8IE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTjsgaiArPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApCisgICAgeworICAgICAgICBwID0gYnVmOworICAgICAgICBtZW1zZXQoIGNoYWluLCAwLCBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApOworICAgICAgICB1c2VfbGVuID0gYnVmX2xlbjsKKworICAgICAgICB3aGlsZSggdXNlX2xlbiA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkU7IGkrKyApCisgICAgICAgICAgICAgICAgY2hhaW5baV0gXj0gcFtpXTsKKyAgICAgICAgICAgIHAgKz0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkU7CisgICAgICAgICAgICB1c2VfbGVuIC09ICggdXNlX2xlbiA+PSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApID8KKyAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgOiB1c2VfbGVuOworCisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZhZXNfY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBjaGFpbiwgY2hhaW4gKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggdG1wICsgaiwgY2hhaW4sIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVXBkYXRlIElWCisgICAgICAgICAqLworICAgICAgICBidWZbM10rKzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvIGZpbmFsIGVuY3J5cHRpb24gd2l0aCByZWR1Y2VkIGRhdGEKKyAgICAgKi8KKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmYWVzX2N0eCwgdG1wLCBNQkVEVExTX0NUUl9EUkJHX0tFWUJJVFMgKTsKKyAgICBpdiA9IHRtcCArIE1CRURUTFNfQ1RSX0RSQkdfS0VZU0laRTsKKyAgICBwID0gb3V0cHV0OworCisgICAgZm9yKCBqID0gMDsgaiA8IE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTjsgaiArPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApCisgICAgeworICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZhZXNfY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBpdiwgaXYgKTsKKyAgICAgICAgbWVtY3B5KCBwLCBpdiwgTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkUgKTsKKyAgICAgICAgcCArPSBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmYWVzX2N0eCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgY3RyX2RyYmdfdXBkYXRlX2ludGVybmFsKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVtNQkVEVExTX0NUUl9EUkJHX1NFRURMRU5dICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFtNQkVEVExTX0NUUl9EUkJHX1NFRURMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSB0bXA7CisgICAgaW50IGksIGo7CisKKyAgICBtZW1zZXQoIHRtcCwgMCwgTUJFRFRMU19DVFJfRFJCR19TRUVETEVOICk7CisKKyAgICBmb3IoIGogPSAwOyBqIDwgTUJFRFRMU19DVFJfRFJCR19TRUVETEVOOyBqICs9IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluY3JlYXNlIGNvdW50ZXIKKyAgICAgICAgICovCisgICAgICAgIGZvciggaSA9IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFOyBpID4gMDsgaS0tICkKKyAgICAgICAgICAgIGlmKCArK2N0eC0+Y291bnRlcltpIC0gMV0gIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ3J5cHQgY291bnRlciBibG9jaworICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmY3R4LT5hZXNfY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBjdHgtPmNvdW50ZXIsIHAgKTsKKworICAgICAgICBwICs9IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFOworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX0NUUl9EUkJHX1NFRURMRU47IGkrKyApCisgICAgICAgIHRtcFtpXSBePSBkYXRhW2ldOworCisgICAgLyoKKyAgICAgKiBVcGRhdGUga2V5IGFuZCBjb3VudGVyCisgICAgICovCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eC0+YWVzX2N0eCwgdG1wLCBNQkVEVExTX0NUUl9EUkJHX0tFWUJJVFMgKTsKKyAgICBtZW1jcHkoIGN0eC0+Y291bnRlciwgdG1wICsgTUJFRFRMU19DVFJfRFJCR19LRVlTSVpFLCBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19jdHJfZHJiZ191cGRhdGUoIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBhZGRfbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGFkZF9pbnB1dFtNQkVEVExTX0NUUl9EUkJHX1NFRURMRU5dOworCisgICAgaWYoIGFkZF9sZW4gPiAwICkKKyAgICB7CisgICAgICAgIC8qIE1BWF9JTlBVVCB3b3VsZCBiZSBtb3JlIGxvZ2ljYWwgaGVyZSwgYnV0IHdlIGhhdmUgdG8gbWF0Y2gKKyAgICAgICAgICogYmxvY2tfY2lwaGVyX2RmKCkncyBsaW1pdHMgc2luY2Ugd2UgY2FuJ3QgcHJvcGFnYXRlIGVycm9ycyAqLworICAgICAgICBpZiggYWRkX2xlbiA+IE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgKQorICAgICAgICAgICAgYWRkX2xlbiA9IE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQ7CisKKyAgICAgICAgYmxvY2tfY2lwaGVyX2RmKCBhZGRfaW5wdXQsIGFkZGl0aW9uYWwsIGFkZF9sZW4gKTsKKyAgICAgICAgY3RyX2RyYmdfdXBkYXRlX2ludGVybmFsKCBjdHgsIGFkZF9pbnB1dCApOworICAgIH0KK30KKworaW50IG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBsZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgc2VlZFtNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUXTsKKyAgICBzaXplX3Qgc2VlZGxlbiA9IDA7CisKKyAgICBpZiggY3R4LT5lbnRyb3B5X2xlbiArIGxlbiA+IE1CRURUTFNfQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcgKTsKKworICAgIG1lbXNldCggc2VlZCwgMCwgTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVCApOworCisgICAgLyoKKyAgICAgKiBHYXRoZXIgZW50cm9weV9sZW4gYnl0ZXMgb2YgZW50cm9weSB0byBzZWVkIHN0YXRlCisgICAgICovCisgICAgaWYoIDAgIT0gY3R4LT5mX2VudHJvcHkoIGN0eC0+cF9lbnRyb3B5LCBzZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmVudHJvcHlfbGVuICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBzZWVkbGVuICs9IGN0eC0+ZW50cm9weV9sZW47CisKKyAgICAvKgorICAgICAqIEFkZCBhZGRpdGlvbmFsIGRhdGEKKyAgICAgKi8KKyAgICBpZiggYWRkaXRpb25hbCAmJiBsZW4gKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCBzZWVkICsgc2VlZGxlbiwgYWRkaXRpb25hbCwgbGVuICk7CisgICAgICAgIHNlZWRsZW4gKz0gbGVuOworICAgIH0KKworICAgIC8qCisgICAgICogUmVkdWNlIHRvIDM4NCBiaXRzCisgICAgICovCisgICAgYmxvY2tfY2lwaGVyX2RmKCBzZWVkLCBzZWVkLCBzZWVkbGVuICk7CisKKyAgICAvKgorICAgICAqIFVwZGF0ZSBzdGF0ZQorICAgICAqLworICAgIGN0cl9kcmJnX3VwZGF0ZV9pbnRlcm5hbCggY3R4LCBzZWVkICk7CisgICAgY3R4LT5yZXNlZWRfY291bnRlciA9IDE7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRpdGlvbmFsLCBzaXplX3QgYWRkX2xlbiApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICpjdHggPSAobWJlZHRsc19jdHJfZHJiZ19jb250ZXh0ICopIHBfcm5nOworICAgIHVuc2lnbmVkIGNoYXIgYWRkX2lucHV0W01CRURUTFNfQ1RSX0RSQkdfU0VFRExFTl07CisgICAgdW5zaWduZWQgY2hhciAqcCA9IG91dHB1dDsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFtNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRV07CisgICAgaW50IGk7CisgICAgc2l6ZV90IHVzZV9sZW47CisKKyAgICBpZiggb3V0cHV0X2xlbiA+IE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRyApOworCisgICAgaWYoIGFkZF9sZW4gPiBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRyApOworCisgICAgbWVtc2V0KCBhZGRfaW5wdXQsIDAsIE1CRURUTFNfQ1RSX0RSQkdfU0VFRExFTiApOworCisgICAgaWYoIGN0eC0+cmVzZWVkX2NvdW50ZXIgPiBjdHgtPnJlc2VlZF9pbnRlcnZhbCB8fAorICAgICAgICBjdHgtPnByZWRpY3Rpb25fcmVzaXN0YW5jZSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggY3R4LCBhZGRpdGlvbmFsLCBhZGRfbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgYWRkX2xlbiA9IDA7CisgICAgfQorCisgICAgaWYoIGFkZF9sZW4gPiAwICkKKyAgICB7CisgICAgICAgIGJsb2NrX2NpcGhlcl9kZiggYWRkX2lucHV0LCBhZGRpdGlvbmFsLCBhZGRfbGVuICk7CisgICAgICAgIGN0cl9kcmJnX3VwZGF0ZV9pbnRlcm5hbCggY3R4LCBhZGRfaW5wdXQgKTsKKyAgICB9CisKKyAgICB3aGlsZSggb3V0cHV0X2xlbiA+IDAgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5jcmVhc2UgY291bnRlcgorICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBpID0gTUJFRFRMU19DVFJfRFJCR19CTE9DS1NJWkU7IGkgPiAwOyBpLS0gKQorICAgICAgICAgICAgaWYoICsrY3R4LT5jb3VudGVyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBDcnlwdCBjb3VudGVyIGJsb2NrCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZjdHgtPmFlc19jdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGN0eC0+Y291bnRlciwgdG1wICk7CisKKyAgICAgICAgdXNlX2xlbiA9ICggb3V0cHV0X2xlbiA+IE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICkgPyBNQkVEVExTX0NUUl9EUkJHX0JMT0NLU0laRSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbjsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29weSByYW5kb20gYmxvY2sgdG8gZGVzdGluYXRpb24KKyAgICAgICAgICovCisgICAgICAgIG1lbWNweSggcCwgdG1wLCB1c2VfbGVuICk7CisgICAgICAgIHAgKz0gdXNlX2xlbjsKKyAgICAgICAgb3V0cHV0X2xlbiAtPSB1c2VfbGVuOworICAgIH0KKworICAgIGN0cl9kcmJnX3VwZGF0ZV9pbnRlcm5hbCggY3R4LCBhZGRfaW5wdXQgKTsKKworICAgIGN0eC0+cmVzZWVkX2NvdW50ZXIrKzsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oIHZvaWQgKnBfcm5nLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqY3R4ID0gKG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCAqKSBwX3JuZzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoIGN0eCwgb3V0cHV0LCBvdXRwdXRfbGVuLCBOVUxMLCAwICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY3R4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1iZWR0bHNfY3RyX2RyYmdfd3JpdGVfc2VlZF9maWxlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1I7CisgICAgRklMRSAqZjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgXTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgIndiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oIGN0eCwgYnVmLCBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVCApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCBmd3JpdGUoIGJ1ZiwgMSwgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQsIGYgKSAhPSBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworZXhpdDoKKyAgICBmY2xvc2UoIGYgKTsKKyAgICByZXR1cm4oIHJldCApOworfQorCitpbnQgbWJlZHRsc19jdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlKCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgRklMRSAqZjsKKyAgICBzaXplX3QgbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsgTUJFRFRMU19DVFJfRFJCR19NQVhfSU5QVVQgXTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgInJiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUiApOworCisgICAgZnNlZWsoIGYsIDAsIFNFRUtfRU5EICk7CisgICAgbiA9IChzaXplX3QpIGZ0ZWxsKCBmICk7CisgICAgZnNlZWsoIGYsIDAsIFNFRUtfU0VUICk7CisKKyAgICBpZiggbiA+IE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0NUUl9EUkJHX0lOUFVUX1RPT19CSUcgKTsKKyAgICB9CisKKyAgICBpZiggZnJlYWQoIGJ1ZiwgMSwgbiwgZiApICE9IG4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUiApOworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgbWJlZHRsc19jdHJfZHJiZ191cGRhdGUoIGN0eCwgYnVmLCBuICk7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfY3RyX2RyYmdfd3JpdGVfc2VlZF9maWxlKCBjdHgsIHBhdGggKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVudHJvcHlfc291cmNlX3ByWzk2XSA9CisgICAgeyAweGMxLCAweDgwLCAweDgxLCAweGE2LCAweDVkLCAweDQ0LCAweDAyLCAweDE2LAorICAgICAgMHgxOSwgMHhiMywgMHhmMSwgMHg4MCwgMHhiMSwgMHhjOSwgMHgyMCwgMHgwMiwKKyAgICAgIDB4NmEsIDB4NTQsIDB4NmYsIDB4MGMsIDB4NzAsIDB4ODEsIDB4NDksIDB4OGIsCisgICAgICAweDZlLCAweGE2LCAweDYyLCAweDUyLCAweDZkLCAweDUxLCAweGIxLCAweGNiLAorICAgICAgMHg1OCwgMHgzYiwgMHhmYSwgMHhkNSwgMHgzNywgMHg1ZiwgMHhmYiwgMHhjOSwKKyAgICAgIDB4ZmYsIDB4NDYsIDB4ZDIsIDB4MTksIDB4YzcsIDB4MjIsIDB4M2UsIDB4OTUsCisgICAgICAweDQ1LCAweDlkLCAweDgyLCAweGUxLCAweGU3LCAweDIyLCAweDlmLCAweDYzLAorICAgICAgMHgzMSwgMHg2OSwgMHhkMiwgMHg2YiwgMHg1NywgMHg0NywgMHg0ZiwgMHhhMywKKyAgICAgIDB4MzcsIDB4YzksIDB4OTgsIDB4MWMsIDB4MGIsIDB4ZmIsIDB4OTEsIDB4MzEsCisgICAgICAweDRkLCAweDU1LCAweGI5LCAweGU5LCAweDFjLCAweDVhLCAweDVlLCAweGU0LAorICAgICAgMHg5MywgMHg5MiwgMHhjZiwgMHhjNSwgMHgyMywgMHgxMiwgMHhkNSwgMHg1NiwKKyAgICAgIDB4MmMsIDB4NGEsIDB4NmUsIDB4ZmYsIDB4ZGMsIDB4MTAsIDB4ZDAsIDB4NjggfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZW50cm9weV9zb3VyY2Vfbm9wcls2NF0gPQorICAgIHsgMHg1YSwgMHgxOSwgMHg0ZCwgMHg1ZSwgMHgyYiwgMHgzMSwgMHg1OCwgMHgxNCwKKyAgICAgIDB4NTQsIDB4ZGUsIDB4ZjYsIDB4NzUsIDB4ZmIsIDB4NzksIDB4NTgsIDB4ZmUsCisgICAgICAweGM3LCAweGRiLCAweDg3LCAweDNlLCAweDU2LCAweDg5LCAweGZjLCAweDlkLAorICAgICAgMHgwMywgMHgyMSwgMHg3YywgMHg2OCwgMHhkOCwgMHgwMywgMHgzOCwgMHgyMCwKKyAgICAgIDB4ZjksIDB4ZTYsIDB4NWUsIDB4MDQsIDB4ZDgsIDB4NTYsIDB4ZjMsIDB4YTksCisgICAgICAweGM0LCAweDRhLCAweDRjLCAweGJkLCAweGMxLCAweGQwLCAweDA4LCAweDQ2LAorICAgICAgMHhmNSwgMHg5OCwgMHgzZCwgMHg3NywgMHgxYywgMHgxYiwgMHgxMywgMHg3ZSwKKyAgICAgIDB4NGUsIDB4MGYsIDB4OWQsIDB4OGUsIDB4ZjQsIDB4MDksIDB4ZjksIDB4MmUgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbm9uY2VfcGVyc19wclsxNl0gPQorICAgIHsgMHhkMiwgMHg1NCwgMHhmYywgMHhmZiwgMHgwMiwgMHgxZSwgMHg2OSwgMHhkMiwKKyAgICAgIDB4MjksIDB4YzksIDB4Y2YsIDB4YWQsIDB4ODUsIDB4ZmEsIDB4NDgsIDB4NmMgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbm9uY2VfcGVyc19ub3ByWzE2XSA9CisgICAgeyAweDFiLCAweDU0LCAweGI4LCAweGZmLCAweDA2LCAweDQyLCAweGJmLCAweGY1LAorICAgICAgMHgyMSwgMHhmMSwgMHg1YywgMHgxYywgMHgwYiwgMHg2NiwgMHg1ZiwgMHgzZiB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXN1bHRfcHJbMTZdID0KKyAgICB7IDB4MzQsIDB4MDEsIDB4MTYsIDB4NTYsIDB4YjQsIDB4MjksIDB4MDAsIDB4OGYsCisgICAgICAweDM1LCAweDYzLCAweGVjLCAweGI1LCAweGYyLCAweDU5LCAweDA3LCAweDIzIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlc3VsdF9ub3ByWzE2XSA9CisgICAgeyAweGEwLCAweDU0LCAweDMwLCAweDNkLCAweDhhLCAweDdlLCAweGE5LCAweDg4LAorICAgICAgMHg5ZCwgMHg5MCwgMHgzZSwgMHgwNywgMHg3YywgMHg2ZiwgMHgyMSwgMHg4ZiB9OworCitzdGF0aWMgc2l6ZV90IHRlc3Rfb2Zmc2V0Oworc3RhdGljIGludCBjdHJfZHJiZ19zZWxmX3Rlc3RfZW50cm9weSggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGRhdGE7CisgICAgbWVtY3B5KCBidWYsIHAgKyB0ZXN0X29mZnNldCwgbGVuICk7CisgICAgdGVzdF9vZmZzZXQgKz0gbGVuOworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIENISyggYyApICAgIGlmKCAoYykgIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiggMSApOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgfQorCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTZdOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3R4ICk7CisKKyAgICAvKgorICAgICAqIEJhc2VkIG9uIGEgTklTVCBDVFJfRFJCRyB0ZXN0IHZlY3RvciAoUFIgPSBUcnVlKQorICAgICAqLworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgQ1RSX0RSQkcgKFBSID0gVFJVRSkgOiAiICk7CisKKyAgICB0ZXN0X29mZnNldCA9IDA7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWRfZW50cm9weV9sZW4oICZjdHgsIGN0cl9kcmJnX3NlbGZfdGVzdF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBlbnRyb3B5X3NvdXJjZV9wciwgbm9uY2VfcGVyc19wciwgMTYsIDMyICkgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZjdHgsIE1CRURUTFNfQ1RSX0RSQkdfUFJfT04gKTsKKyAgICBDSEsoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICkgKTsKKyAgICBDSEsoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICkgKTsKKyAgICBDSEsoIG1lbWNtcCggYnVmLCByZXN1bHRfcHIsIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFICkgKTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0eCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAvKgorICAgICAqIEJhc2VkIG9uIGEgTklTVCBDVFJfRFJCRyB0ZXN0IHZlY3RvciAoUFIgPSBGQUxTRSkKKyAgICAgKi8KKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIENUUl9EUkJHIChQUiA9IEZBTFNFKTogIiApOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3R4ICk7CisKKyAgICB0ZXN0X29mZnNldCA9IDA7CisgICAgQ0hLKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWRfZW50cm9weV9sZW4oICZjdHgsIGN0cl9kcmJnX3NlbGZfdGVzdF9lbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGVudHJvcHlfc291cmNlX25vcHIsIG5vbmNlX3BlcnNfbm9wciwgMTYsIDMyICkgKTsKKyAgICBDSEsoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIDE2ICkgKTsKKyAgICBDSEsoIG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCAmY3R4LCBOVUxMLCAwICkgKTsKKyAgICBDSEsoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIDE2ICkgKTsKKyAgICBDSEsoIG1lbWNtcCggYnVmLCByZXN1bHRfbm9wciwgMTYgKSApOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3R4ICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2RlYnVnLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2Q4MTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kZWJ1Zy5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogIERlYnVnZ2luZyByb3V0aW5lcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgIGZyZWUKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgICB0aW1lX3QKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgICBzbnByaW50ZgorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgKCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgZGVmaW5lZChfTVNDX1ZFUikgKSAmJiBcCisgICAgIWRlZmluZWQoaW5saW5lKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZW5kaWYKKworI2RlZmluZSBERUJVR19CVUZfU0laRSAgICAgIDUxMgorCitzdGF0aWMgaW50IGRlYnVnX3RocmVzaG9sZCA9IDA7CisKK3ZvaWQgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKCBpbnQgdGhyZXNob2xkICkKK3sKKyAgICBkZWJ1Z190aHJlc2hvbGQgPSB0aHJlc2hvbGQ7Cit9CisKKy8qCisgKiBBbGwgY2FsbHMgdG8gZl9kYmcgbXVzdCBiZSBtYWRlIHZpYSB0aGlzIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19zZW5kX2xpbmUoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgIC8qCisgICAgICogSWYgaW4gYSB0aHJlYWRlZCBlbnZpcm9ubWVudCwgd2UgbmVlZCBhIHRocmVhZCBpZGVudGlmaWVyLgorICAgICAqIFNpbmNlIHRoZXJlIGlzIG5vIHBvcnRhYmxlIHdheSB0byBnZXQgb25lLCB1c2UgdGhlIGFkZHJlc3Mgb2YgdGhlIHNzbAorICAgICAqIGNvbnRleHQgaW5zdGVhZCwgYXMgaXQgc2hvdWxkbid0IGJlIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMuCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGNoYXIgaWRzdHJbMjAgKyBERUJVR19CVUZfU0laRV07IC8qIDB4ICsgMTYgbmliYmxlcyArICc6ICcgKi8KKyAgICBtYmVkdGxzX3NucHJpbnRmKCBpZHN0ciwgc2l6ZW9mKCBpZHN0ciApLCAiJXA6ICVzIiwgc3NsLCBzdHIgKTsKKyAgICBzc2wtPmNvbmYtPmZfZGJnKCBzc2wtPmNvbmYtPnBfZGJnLCBsZXZlbCwgZmlsZSwgbGluZSwgaWRzdHIgKTsKKyNlbHNlCisgICAgc3NsLT5jb25mLT5mX2RiZyggc3NsLT5jb25mLT5wX2RiZywgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworI2VuZGlmCit9CisKK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9tc2coIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApCit7CisgICAgdmFfbGlzdCBhcmdwOworICAgIGNoYXIgc3RyW0RFQlVHX0JVRl9TSVpFXTsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIE5VTEwgPT0gc3NsIHx8IE5VTEwgPT0gc3NsLT5jb25mIHx8IE5VTEwgPT0gc3NsLT5jb25mLT5mX2RiZyB8fCBsZXZlbCA+IGRlYnVnX3RocmVzaG9sZCApCisgICAgICAgIHJldHVybjsKKworICAgIHZhX3N0YXJ0KCBhcmdwLCBmb3JtYXQgKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpZiBkZWZpbmVkKF9UUlVOQ0FURSkKKyAgICByZXQgPSBfdnNucHJpbnRmX3MoIHN0ciwgREVCVUdfQlVGX1NJWkUsIF9UUlVOQ0FURSwgZm9ybWF0LCBhcmdwICk7CisjZWxzZQorICAgIHJldCA9IF92c25wcmludGYoIHN0ciwgREVCVUdfQlVGX1NJWkUsIGZvcm1hdCwgYXJncCApOworICAgIGlmKCByZXQgPCAwIHx8IChzaXplX3QpIHJldCA9PSBERUJVR19CVUZfU0laRSApCisgICAgeworICAgICAgICBzdHJbREVCVUdfQlVGX1NJWkUtMV0gPSAnXDAnOworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisjZW5kaWYKKyNlbHNlCisgICAgcmV0ID0gdnNucHJpbnRmKCBzdHIsIERFQlVHX0JVRl9TSVpFLCBmb3JtYXQsIGFyZ3AgKTsKKyNlbmRpZgorICAgIHZhX2VuZCggYXJncCApOworCisgICAgaWYoIHJldCA+PSAwICYmIHJldCA8IERFQlVHX0JVRl9TSVpFIC0gMSApCisgICAgeworICAgICAgICBzdHJbcmV0XSAgICAgPSAnXG4nOworICAgICAgICBzdHJbcmV0ICsgMV0gPSAnXDAnOworICAgIH0KKworICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7Cit9CisKK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9yZXQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsIGludCByZXQgKQoreworICAgIGNoYXIgc3RyW0RFQlVHX0JVRl9TSVpFXTsKKworICAgIGlmKCBzc2wtPmNvbmYgPT0gTlVMTCB8fCBzc2wtPmNvbmYtPmZfZGJnID09IE5VTEwgfHwgbGV2ZWwgPiBkZWJ1Z190aHJlc2hvbGQgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIFdpdGggbm9uLWJsb2NraW5nIEkvTyBhbmQgZXhhbXBsZXMgdGhhdCBqdXN0IHJldHJ5IGltbWVkaWF0ZWx5LAorICAgICAqIHRoZSBsb2dzIHdvdWxkIGJlIHF1aWNrbHkgZmxvb2RlZCB3aXRoIFdBTlRfUkVBRCwgc28gaWdub3JlIHRoYXQuCisgICAgICogRG9uJ3QgaWdub3JlIFdBTlRfV1JJVEUgaG93ZXZlciwgc2luY2UgaXMgaXMgdXN1YWxseSByYXJlLgorICAgICAqLworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciwgc2l6ZW9mKCBzdHIgKSwgIiVzKCkgcmV0dXJuZWQgJWQgKC0weCUwNHgpXG4iLAorICAgICAgICAgICAgICB0ZXh0LCByZXQsIC1yZXQgKTsKKworICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7Cit9CisKK3ZvaWQgbWJlZHRsc19kZWJ1Z19wcmludF9idWYoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgY2hhciBzdHJbREVCVUdfQlVGX1NJWkVdOworICAgIGNoYXIgdHh0WzE3XTsKKyAgICBzaXplX3QgaSwgaWR4ID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYgPT0gTlVMTCB8fCBzc2wtPmNvbmYtPmZfZGJnID09IE5VTEwgfHwgbGV2ZWwgPiBkZWJ1Z190aHJlc2hvbGQgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBzdHIgKyBpZHgsIHNpemVvZiggc3RyICkgLSBpZHgsICJkdW1waW5nICclcycgKCV1IGJ5dGVzKVxuIiwKKyAgICAgICAgICAgICAgdGV4dCwgKHVuc2lnbmVkIGludCkgbGVuICk7CisKKyAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworCisgICAgaWR4ID0gMDsKKyAgICBtZW1zZXQoIHR4dCwgMCwgc2l6ZW9mKCB0eHQgKSApOworICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgeworICAgICAgICBpZiggaSA+PSA0MDk2ICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmKCBpICUgMTYgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBpID4gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAiICAlc1xuIiwgdHh0ICk7CisgICAgICAgICAgICAgICAgZGVidWdfc2VuZF9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKKworICAgICAgICAgICAgICAgIGlkeCA9IDA7CisgICAgICAgICAgICAgICAgbWVtc2V0KCB0eHQsIDAsIHNpemVvZiggdHh0ICkgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWR4ICs9IG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIiUwNHg6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGkgKTsKKworICAgICAgICB9CisKKyAgICAgICAgaWR4ICs9IG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIiAlMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBidWZbaV0gKTsKKyAgICAgICAgdHh0W2kgJSAxNl0gPSAoIGJ1ZltpXSA+IDMxICYmIGJ1ZltpXSA8IDEyNyApID8gYnVmW2ldIDogJy4nIDsKKyAgICB9CisKKyAgICBpZiggbGVuID4gMCApCisgICAgeworICAgICAgICBmb3IoIC8qIGkgPSBpICovOyBpICUgMTYgIT0gMDsgaSsrICkKKyAgICAgICAgICAgIGlkeCArPSBtYmVkdGxzX3NucHJpbnRmKCBzdHIgKyBpZHgsIHNpemVvZiggc3RyICkgLSBpZHgsICIgICAiICk7CisKKyAgICAgICAgbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAiICAlc1xuIiwgdHh0ICk7CisgICAgICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X2VjcCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlggKQoreworICAgIGNoYXIgc3RyW0RFQlVHX0JVRl9TSVpFXTsKKworICAgIGlmKCBzc2wtPmNvbmYgPT0gTlVMTCB8fCBzc2wtPmNvbmYtPmZfZGJnID09IE5VTEwgfHwgbGV2ZWwgPiBkZWJ1Z190aHJlc2hvbGQgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBzdHIsIHNpemVvZiggc3RyICksICIlcyhYKSIsIHRleHQgKTsKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X21waSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyLCAmWC0+WCApOworCisgICAgbWJlZHRsc19zbnByaW50Ziggc3RyLCBzaXplb2YoIHN0ciApLCAiJXMoWSkiLCB0ZXh0ICk7CisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciwgJlgtPlkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfbXBpKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBtYmVkdGxzX21waSAqWCApCit7CisgICAgY2hhciBzdHJbREVCVUdfQlVGX1NJWkVdOworICAgIGludCBqLCBrLCB6ZXJvcyA9IDE7CisgICAgc2l6ZV90IGksIG4sIGlkeCA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mID09IE5VTEwgfHwgc3NsLT5jb25mLT5mX2RiZyA9PSBOVUxMIHx8IFggPT0gTlVMTCB8fCBsZXZlbCA+IGRlYnVnX3RocmVzaG9sZCApCisgICAgICAgIHJldHVybjsKKworICAgIGZvciggbiA9IFgtPm4gLSAxOyBuID4gMDsgbi0tICkKKyAgICAgICAgaWYoIFgtPnBbbl0gIT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgIGZvciggaiA9ICggc2l6ZW9mKG1iZWR0bHNfbXBpX3VpbnQpIDw8IDMgKSAtIDE7IGogPj0gMDsgai0tICkKKyAgICAgICAgaWYoICggKCBYLT5wW25dID4+IGogKSAmIDEgKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAidmFsdWUgb2YgJyVzJyAoJWQgYml0cykgaXM6XG4iLAorICAgICAgICAgICAgICB0ZXh0LCAoaW50KSAoICggbiAqICggc2l6ZW9mKG1iZWR0bHNfbXBpX3VpbnQpIDw8IDMgKSApICsgaiArIDEgKSApOworCisgICAgZGVidWdfc2VuZF9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKKworICAgIGlkeCA9IDA7CisgICAgZm9yKCBpID0gbiArIDEsIGogPSAwOyBpID4gMDsgaS0tICkKKyAgICB7CisgICAgICAgIGlmKCB6ZXJvcyAmJiBYLT5wW2kgLSAxXSA9PSAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciggayA9IHNpemVvZiggbWJlZHRsc19tcGlfdWludCApIC0gMTsgayA+PSAwOyBrLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggemVyb3MgJiYgKCAoIFgtPnBbaSAtIDFdID4+ICggayA8PCAzICkgKSAmIDB4RkYgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6ZXJvcyA9IDA7CisKKyAgICAgICAgICAgIGlmKCBqICUgMTYgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIGogPiAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIlxuIiApOworICAgICAgICAgICAgICAgICAgICBkZWJ1Z19zZW5kX2xpbmUoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIHN0ciApOworICAgICAgICAgICAgICAgICAgICBpZHggPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWR4ICs9IG1iZWR0bHNfc25wcmludGYoIHN0ciArIGlkeCwgc2l6ZW9mKCBzdHIgKSAtIGlkeCwgIiAlMDJ4IiwgKHVuc2lnbmVkIGludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBYLT5wW2kgLSAxXSA+PiAoIGsgPDwgMyApICkgJiAweEZGICk7CisKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgaWYoIHplcm9zID09IDEgKQorICAgICAgICBpZHggKz0gbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAiIDAwIiApOworCisgICAgbWJlZHRsc19zbnByaW50Ziggc3RyICsgaWR4LCBzaXplb2YoIHN0ciApIC0gaWR4LCAiXG4iICk7CisgICAgZGVidWdfc2VuZF9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK3N0YXRpYyB2b2lkIGRlYnVnX3ByaW50X3BrKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0gaXRlbXNbTUJFRFRMU19QS19ERUJVR19NQVhfSVRFTVNdOworICAgIGNoYXIgbmFtZVsxNl07CisKKyAgICBtZW1zZXQoIGl0ZW1zLCAwLCBzaXplb2YoIGl0ZW1zICkgKTsKKworICAgIGlmKCBtYmVkdGxzX3BrX2RlYnVnKCBwaywgaXRlbXMgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgUEsgY29udGV4dFxuIiApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfUEtfREVCVUdfTUFYX0lURU1TOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIGl0ZW1zW2ldLnR5cGUgPT0gTUJFRFRMU19QS19ERUJVR19OT05FICkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBuYW1lLCBzaXplb2YoIG5hbWUgKSwgIiVzJXMiLCB0ZXh0LCBpdGVtc1tpXS5uYW1lICk7CisgICAgICAgIG5hbWVbc2l6ZW9mKCBuYW1lICkgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYoIGl0ZW1zW2ldLnR5cGUgPT0gTUJFRFRMU19QS19ERUJVR19NUEkgKQorICAgICAgICAgICAgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkoIHNzbCwgbGV2ZWwsIGZpbGUsIGxpbmUsIG5hbWUsIGl0ZW1zW2ldLnZhbHVlICk7CisgICAgICAgIGVsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIGlmKCBpdGVtc1tpXS50eXBlID09IE1CRURUTFNfUEtfREVCVUdfRUNQICkKKyAgICAgICAgICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfZWNwKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBuYW1lLCBpdGVtc1tpXS52YWx1ZSApOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgbm90IGhhcHBlblxuIiApOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVidWdfcHJpbnRfbGluZV9ieV9saW5lKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnRleHQgKQoreworICAgIGNoYXIgc3RyW0RFQlVHX0JVRl9TSVpFXTsKKyAgICBjb25zdCBjaGFyICpzdGFydCwgKmN1cjsKKworICAgIHN0YXJ0ID0gdGV4dDsKKyAgICBmb3IoIGN1ciA9IHRleHQ7ICpjdXIgIT0gJ1wwJzsgY3VyKysgKQorICAgIHsKKyAgICAgICAgaWYoICpjdXIgPT0gJ1xuJyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBjdXIgLSBzdGFydCArIDE7CisgICAgICAgICAgICBpZiggbGVuID4gREVCVUdfQlVGX1NJWkUgLSAxICkKKyAgICAgICAgICAgICAgICBsZW4gPSBERUJVR19CVUZfU0laRSAtIDE7CisKKyAgICAgICAgICAgIG1lbWNweSggc3RyLCBzdGFydCwgbGVuICk7CisgICAgICAgICAgICBzdHJbbGVuXSA9ICdcMCc7CisKKyAgICAgICAgICAgIGRlYnVnX3NlbmRfbGluZSggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgc3RyICk7CisKKyAgICAgICAgICAgIHN0YXJ0ID0gY3VyICsgMTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X2NydCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGV4dCwgY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0ICkKK3sKKyAgICBjaGFyIHN0cltERUJVR19CVUZfU0laRV07CisgICAgaW50IGkgPSAwOworCisgICAgaWYoIHNzbC0+Y29uZiA9PSBOVUxMIHx8IHNzbC0+Y29uZi0+Zl9kYmcgPT0gTlVMTCB8fCBjcnQgPT0gTlVMTCB8fCBsZXZlbCA+IGRlYnVnX3RocmVzaG9sZCApCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlKCBjcnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBjaGFyIGJ1ZlsxMDI0XTsKKworICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBzdHIsIHNpemVvZiggc3RyICksICIlcyAjJWQ6XG4iLCB0ZXh0LCArK2kgKTsKKyAgICAgICAgZGVidWdfc2VuZF9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBzdHIgKTsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIGJ1Ziwgc2l6ZW9mKCBidWYgKSAtIDEsICIiLCBjcnQgKTsKKyAgICAgICAgZGVidWdfcHJpbnRfbGluZV9ieV9saW5lKCBzc2wsIGxldmVsLCBmaWxlLCBsaW5lLCBidWYgKTsKKworICAgICAgICBkZWJ1Z19wcmludF9wayggc3NsLCBsZXZlbCwgZmlsZSwgbGluZSwgImNydC0+IiwgJmNydC0+cGsgKTsKKworICAgICAgICBjcnQgPSBjcnQtPm5leHQ7CisgICAgfQorfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19ERUJVR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kZXMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Zjk1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kZXMuYwpAQCAtMCwwICsxLDEwNjEgQEAKKy8qCisgKiAgRklQUy00Ni0zIGNvbXBsaWFudCBUcmlwbGUtREVTIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIERFUywgb24gd2hpY2ggVERFUyBpcyBiYXNlZCwgd2FzIG9yaWdpbmFsbHkgZGVzaWduZWQgYnkgSG9yc3QgRmVpc3RlbAorICogIGF0IElCTSBpbiAxOTc0LCBhbmQgd2FzIGFkb3B0ZWQgYXMgYSBzdGFuZGFyZCBieSBOSVNUIChmb3JtZXJseSBOQlMpLgorICoKKyAqICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzNDYtMy9maXBzNDYtMy5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0RFU19BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciopdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdFVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICAgICAgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBQVVRfVUlOVDMyX0JFCisjZGVmaW5lIFBVVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAyNCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDE2ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSAgICAgICApOyAgICAgICBcCit9CisjZW5kaWYKKworLyoKKyAqIEV4cGFuZGVkIERFUyBTLWJveGVzCisgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTQjFbNjRdID0KK3sKKyAgICAweDAxMDEwNDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDAwLCAweDAxMDEwNDA0LAorICAgIDB4MDEwMTAwMDQsIDB4MDAwMTA0MDQsIDB4MDAwMDAwMDQsIDB4MDAwMTAwMDAsCisgICAgMHgwMDAwMDQwMCwgMHgwMTAxMDQwMCwgMHgwMTAxMDQwNCwgMHgwMDAwMDQwMCwKKyAgICAweDAxMDAwNDA0LCAweDAxMDEwMDA0LCAweDAxMDAwMDAwLCAweDAwMDAwMDA0LAorICAgIDB4MDAwMDA0MDQsIDB4MDEwMDA0MDAsIDB4MDEwMDA0MDAsIDB4MDAwMTA0MDAsCisgICAgMHgwMDAxMDQwMCwgMHgwMTAxMDAwMCwgMHgwMTAxMDAwMCwgMHgwMTAwMDQwNCwKKyAgICAweDAwMDEwMDA0LCAweDAxMDAwMDA0LCAweDAxMDAwMDA0LCAweDAwMDEwMDA0LAorICAgIDB4MDAwMDAwMDAsIDB4MDAwMDA0MDQsIDB4MDAwMTA0MDQsIDB4MDEwMDAwMDAsCisgICAgMHgwMDAxMDAwMCwgMHgwMTAxMDQwNCwgMHgwMDAwMDAwNCwgMHgwMTAxMDAwMCwKKyAgICAweDAxMDEwNDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAwMDAwNDAwLAorICAgIDB4MDEwMTAwMDQsIDB4MDAwMTAwMDAsIDB4MDAwMTA0MDAsIDB4MDEwMDAwMDQsCisgICAgMHgwMDAwMDQwMCwgMHgwMDAwMDAwNCwgMHgwMTAwMDQwNCwgMHgwMDAxMDQwNCwKKyAgICAweDAxMDEwNDA0LCAweDAwMDEwMDA0LCAweDAxMDEwMDAwLCAweDAxMDAwNDA0LAorICAgIDB4MDEwMDAwMDQsIDB4MDAwMDA0MDQsIDB4MDAwMTA0MDQsIDB4MDEwMTA0MDAsCisgICAgMHgwMDAwMDQwNCwgMHgwMTAwMDQwMCwgMHgwMTAwMDQwMCwgMHgwMDAwMDAwMCwKKyAgICAweDAwMDEwMDA0LCAweDAwMDEwNDAwLCAweDAwMDAwMDAwLCAweDAxMDEwMDA0Cit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgU0IyWzY0XSA9Cit7CisgICAgMHg4MDEwODAyMCwgMHg4MDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDEwODAyMCwKKyAgICAweDAwMTAwMDAwLCAweDAwMDAwMDIwLCAweDgwMTAwMDIwLCAweDgwMDA4MDIwLAorICAgIDB4ODAwMDAwMjAsIDB4ODAxMDgwMjAsIDB4ODAxMDgwMDAsIDB4ODAwMDAwMDAsCisgICAgMHg4MDAwODAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAyMCwgMHg4MDEwMDAyMCwKKyAgICAweDAwMTA4MDAwLCAweDAwMTAwMDIwLCAweDgwMDA4MDIwLCAweDAwMDAwMDAwLAorICAgIDB4ODAwMDAwMDAsIDB4MDAwMDgwMDAsIDB4MDAxMDgwMjAsIDB4ODAxMDAwMDAsCisgICAgMHgwMDEwMDAyMCwgMHg4MDAwMDAyMCwgMHgwMDAwMDAwMCwgMHgwMDEwODAwMCwKKyAgICAweDAwMDA4MDIwLCAweDgwMTA4MDAwLCAweDgwMTAwMDAwLCAweDAwMDA4MDIwLAorICAgIDB4MDAwMDAwMDAsIDB4MDAxMDgwMjAsIDB4ODAxMDAwMjAsIDB4MDAxMDAwMDAsCisgICAgMHg4MDAwODAyMCwgMHg4MDEwMDAwMCwgMHg4MDEwODAwMCwgMHgwMDAwODAwMCwKKyAgICAweDgwMTAwMDAwLCAweDgwMDA4MDAwLCAweDAwMDAwMDIwLCAweDgwMTA4MDIwLAorICAgIDB4MDAxMDgwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDgwMDAsIDB4ODAwMDAwMDAsCisgICAgMHgwMDAwODAyMCwgMHg4MDEwODAwMCwgMHgwMDEwMDAwMCwgMHg4MDAwMDAyMCwKKyAgICAweDAwMTAwMDIwLCAweDgwMDA4MDIwLCAweDgwMDAwMDIwLCAweDAwMTAwMDIwLAorICAgIDB4MDAxMDgwMDAsIDB4MDAwMDAwMDAsIDB4ODAwMDgwMDAsIDB4MDAwMDgwMjAsCisgICAgMHg4MDAwMDAwMCwgMHg4MDEwMDAyMCwgMHg4MDEwODAyMCwgMHgwMDEwODAwMAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IFNCM1s2NF0gPQoreworICAgIDB4MDAwMDAyMDgsIDB4MDgwMjAyMDAsIDB4MDAwMDAwMDAsIDB4MDgwMjAwMDgsCisgICAgMHgwODAwMDIwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDIwOCwgMHgwODAwMDIwMCwKKyAgICAweDAwMDIwMDA4LCAweDA4MDAwMDA4LCAweDA4MDAwMDA4LCAweDAwMDIwMDAwLAorICAgIDB4MDgwMjAyMDgsIDB4MDAwMjAwMDgsIDB4MDgwMjAwMDAsIDB4MDAwMDAyMDgsCisgICAgMHgwODAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwODAyMDIwMCwgMHgwMDAwMDIwMCwKKyAgICAweDAwMDIwMjAwLCAweDA4MDIwMDAwLCAweDA4MDIwMDA4LCAweDAwMDIwMjA4LAorICAgIDB4MDgwMDAyMDgsIDB4MDAwMjAyMDAsIDB4MDAwMjAwMDAsIDB4MDgwMDAyMDgsCisgICAgMHgwMDAwMDAwOCwgMHgwODAyMDIwOCwgMHgwMDAwMDIwMCwgMHgwODAwMDAwMCwKKyAgICAweDA4MDIwMjAwLCAweDA4MDAwMDAwLCAweDAwMDIwMDA4LCAweDAwMDAwMjA4LAorICAgIDB4MDAwMjAwMDAsIDB4MDgwMjAyMDAsIDB4MDgwMDAyMDAsIDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDIwMCwgMHgwMDAyMDAwOCwgMHgwODAyMDIwOCwgMHgwODAwMDIwMCwKKyAgICAweDA4MDAwMDA4LCAweDAwMDAwMjAwLCAweDAwMDAwMDAwLCAweDA4MDIwMDA4LAorICAgIDB4MDgwMDAyMDgsIDB4MDAwMjAwMDAsIDB4MDgwMDAwMDAsIDB4MDgwMjAyMDgsCisgICAgMHgwMDAwMDAwOCwgMHgwMDAyMDIwOCwgMHgwMDAyMDIwMCwgMHgwODAwMDAwOCwKKyAgICAweDA4MDIwMDAwLCAweDA4MDAwMjA4LCAweDAwMDAwMjA4LCAweDA4MDIwMDAwLAorICAgIDB4MDAwMjAyMDgsIDB4MDAwMDAwMDgsIDB4MDgwMjAwMDgsIDB4MDAwMjAyMDAKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTQjRbNjRdID0KK3sKKyAgICAweDAwODAyMDAxLCAweDAwMDAyMDgxLCAweDAwMDAyMDgxLCAweDAwMDAwMDgwLAorICAgIDB4MDA4MDIwODAsIDB4MDA4MDAwODEsIDB4MDA4MDAwMDEsIDB4MDAwMDIwMDEsCisgICAgMHgwMDAwMDAwMCwgMHgwMDgwMjAwMCwgMHgwMDgwMjAwMCwgMHgwMDgwMjA4MSwKKyAgICAweDAwMDAwMDgxLCAweDAwMDAwMDAwLCAweDAwODAwMDgwLCAweDAwODAwMDAxLAorICAgIDB4MDAwMDAwMDEsIDB4MDAwMDIwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDIwMDEsCisgICAgMHgwMDAwMDA4MCwgMHgwMDgwMDAwMCwgMHgwMDAwMjAwMSwgMHgwMDAwMjA4MCwKKyAgICAweDAwODAwMDgxLCAweDAwMDAwMDAxLCAweDAwMDAyMDgwLCAweDAwODAwMDgwLAorICAgIDB4MDAwMDIwMDAsIDB4MDA4MDIwODAsIDB4MDA4MDIwODEsIDB4MDAwMDAwODEsCisgICAgMHgwMDgwMDA4MCwgMHgwMDgwMDAwMSwgMHgwMDgwMjAwMCwgMHgwMDgwMjA4MSwKKyAgICAweDAwMDAwMDgxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwODAyMDAwLAorICAgIDB4MDAwMDIwODAsIDB4MDA4MDAwODAsIDB4MDA4MDAwODEsIDB4MDAwMDAwMDEsCisgICAgMHgwMDgwMjAwMSwgMHgwMDAwMjA4MSwgMHgwMDAwMjA4MSwgMHgwMDAwMDA4MCwKKyAgICAweDAwODAyMDgxLCAweDAwMDAwMDgxLCAweDAwMDAwMDAxLCAweDAwMDAyMDAwLAorICAgIDB4MDA4MDAwMDEsIDB4MDAwMDIwMDEsIDB4MDA4MDIwODAsIDB4MDA4MDAwODEsCisgICAgMHgwMDAwMjAwMSwgMHgwMDAwMjA4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMjAwMSwKKyAgICAweDAwMDAwMDgwLCAweDAwODAwMDAwLCAweDAwMDAyMDAwLCAweDAwODAyMDgwCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgU0I1WzY0XSA9Cit7CisgICAgMHgwMDAwMDEwMCwgMHgwMjA4MDEwMCwgMHgwMjA4MDAwMCwgMHg0MjAwMDEwMCwKKyAgICAweDAwMDgwMDAwLCAweDAwMDAwMTAwLCAweDQwMDAwMDAwLCAweDAyMDgwMDAwLAorICAgIDB4NDAwODAxMDAsIDB4MDAwODAwMDAsIDB4MDIwMDAxMDAsIDB4NDAwODAxMDAsCisgICAgMHg0MjAwMDEwMCwgMHg0MjA4MDAwMCwgMHgwMDA4MDEwMCwgMHg0MDAwMDAwMCwKKyAgICAweDAyMDAwMDAwLCAweDQwMDgwMDAwLCAweDQwMDgwMDAwLCAweDAwMDAwMDAwLAorICAgIDB4NDAwMDAxMDAsIDB4NDIwODAxMDAsIDB4NDIwODAxMDAsIDB4MDIwMDAxMDAsCisgICAgMHg0MjA4MDAwMCwgMHg0MDAwMDEwMCwgMHgwMDAwMDAwMCwgMHg0MjAwMDAwMCwKKyAgICAweDAyMDgwMTAwLCAweDAyMDAwMDAwLCAweDQyMDAwMDAwLCAweDAwMDgwMTAwLAorICAgIDB4MDAwODAwMDAsIDB4NDIwMDAxMDAsIDB4MDAwMDAxMDAsIDB4MDIwMDAwMDAsCisgICAgMHg0MDAwMDAwMCwgMHgwMjA4MDAwMCwgMHg0MjAwMDEwMCwgMHg0MDA4MDEwMCwKKyAgICAweDAyMDAwMTAwLCAweDQwMDAwMDAwLCAweDQyMDgwMDAwLCAweDAyMDgwMTAwLAorICAgIDB4NDAwODAxMDAsIDB4MDAwMDAxMDAsIDB4MDIwMDAwMDAsIDB4NDIwODAwMDAsCisgICAgMHg0MjA4MDEwMCwgMHgwMDA4MDEwMCwgMHg0MjAwMDAwMCwgMHg0MjA4MDEwMCwKKyAgICAweDAyMDgwMDAwLCAweDAwMDAwMDAwLCAweDQwMDgwMDAwLCAweDQyMDAwMDAwLAorICAgIDB4MDAwODAxMDAsIDB4MDIwMDAxMDAsIDB4NDAwMDAxMDAsIDB4MDAwODAwMDAsCisgICAgMHgwMDAwMDAwMCwgMHg0MDA4MDAwMCwgMHgwMjA4MDEwMCwgMHg0MDAwMDEwMAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IFNCNls2NF0gPQoreworICAgIDB4MjAwMDAwMTAsIDB4MjA0MDAwMDAsIDB4MDAwMDQwMDAsIDB4MjA0MDQwMTAsCisgICAgMHgyMDQwMDAwMCwgMHgwMDAwMDAxMCwgMHgyMDQwNDAxMCwgMHgwMDQwMDAwMCwKKyAgICAweDIwMDA0MDAwLCAweDAwNDA0MDEwLCAweDAwNDAwMDAwLCAweDIwMDAwMDEwLAorICAgIDB4MDA0MDAwMTAsIDB4MjAwMDQwMDAsIDB4MjAwMDAwMDAsIDB4MDAwMDQwMTAsCisgICAgMHgwMDAwMDAwMCwgMHgwMDQwMDAxMCwgMHgyMDAwNDAxMCwgMHgwMDAwNDAwMCwKKyAgICAweDAwNDA0MDAwLCAweDIwMDA0MDEwLCAweDAwMDAwMDEwLCAweDIwNDAwMDEwLAorICAgIDB4MjA0MDAwMTAsIDB4MDAwMDAwMDAsIDB4MDA0MDQwMTAsIDB4MjA0MDQwMDAsCisgICAgMHgwMDAwNDAxMCwgMHgwMDQwNDAwMCwgMHgyMDQwNDAwMCwgMHgyMDAwMDAwMCwKKyAgICAweDIwMDA0MDAwLCAweDAwMDAwMDEwLCAweDIwNDAwMDEwLCAweDAwNDA0MDAwLAorICAgIDB4MjA0MDQwMTAsIDB4MDA0MDAwMDAsIDB4MDAwMDQwMTAsIDB4MjAwMDAwMTAsCisgICAgMHgwMDQwMDAwMCwgMHgyMDAwNDAwMCwgMHgyMDAwMDAwMCwgMHgwMDAwNDAxMCwKKyAgICAweDIwMDAwMDEwLCAweDIwNDA0MDEwLCAweDAwNDA0MDAwLCAweDIwNDAwMDAwLAorICAgIDB4MDA0MDQwMTAsIDB4MjA0MDQwMDAsIDB4MDAwMDAwMDAsIDB4MjA0MDAwMTAsCisgICAgMHgwMDAwMDAxMCwgMHgwMDAwNDAwMCwgMHgyMDQwMDAwMCwgMHgwMDQwNDAxMCwKKyAgICAweDAwMDA0MDAwLCAweDAwNDAwMDEwLCAweDIwMDA0MDEwLCAweDAwMDAwMDAwLAorICAgIDB4MjA0MDQwMDAsIDB4MjAwMDAwMDAsIDB4MDA0MDAwMTAsIDB4MjAwMDQwMTAKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTQjdbNjRdID0KK3sKKyAgICAweDAwMjAwMDAwLCAweDA0MjAwMDAyLCAweDA0MDAwODAyLCAweDAwMDAwMDAwLAorICAgIDB4MDAwMDA4MDAsIDB4MDQwMDA4MDIsIDB4MDAyMDA4MDIsIDB4MDQyMDA4MDAsCisgICAgMHgwNDIwMDgwMiwgMHgwMDIwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwMiwKKyAgICAweDAwMDAwMDAyLCAweDA0MDAwMDAwLCAweDA0MjAwMDAyLCAweDAwMDAwODAyLAorICAgIDB4MDQwMDA4MDAsIDB4MDAyMDA4MDIsIDB4MDAyMDAwMDIsIDB4MDQwMDA4MDAsCisgICAgMHgwNDAwMDAwMiwgMHgwNDIwMDAwMCwgMHgwNDIwMDgwMCwgMHgwMDIwMDAwMiwKKyAgICAweDA0MjAwMDAwLCAweDAwMDAwODAwLCAweDAwMDAwODAyLCAweDA0MjAwODAyLAorICAgIDB4MDAyMDA4MDAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMDAsIDB4MDAyMDA4MDAsCisgICAgMHgwNDAwMDAwMCwgMHgwMDIwMDgwMCwgMHgwMDIwMDAwMCwgMHgwNDAwMDgwMiwKKyAgICAweDA0MDAwODAyLCAweDA0MjAwMDAyLCAweDA0MjAwMDAyLCAweDAwMDAwMDAyLAorICAgIDB4MDAyMDAwMDIsIDB4MDQwMDAwMDAsIDB4MDQwMDA4MDAsIDB4MDAyMDAwMDAsCisgICAgMHgwNDIwMDgwMCwgMHgwMDAwMDgwMiwgMHgwMDIwMDgwMiwgMHgwNDIwMDgwMCwKKyAgICAweDAwMDAwODAyLCAweDA0MDAwMDAyLCAweDA0MjAwODAyLCAweDA0MjAwMDAwLAorICAgIDB4MDAyMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDQyMDA4MDIsCisgICAgMHgwMDAwMDAwMCwgMHgwMDIwMDgwMiwgMHgwNDIwMDAwMCwgMHgwMDAwMDgwMCwKKyAgICAweDA0MDAwMDAyLCAweDA0MDAwODAwLCAweDAwMDAwODAwLCAweDAwMjAwMDAyCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgU0I4WzY0XSA9Cit7CisgICAgMHgxMDAwMTA0MCwgMHgwMDAwMTAwMCwgMHgwMDA0MDAwMCwgMHgxMDA0MTA0MCwKKyAgICAweDEwMDAwMDAwLCAweDEwMDAxMDQwLCAweDAwMDAwMDQwLCAweDEwMDAwMDAwLAorICAgIDB4MDAwNDAwNDAsIDB4MTAwNDAwMDAsIDB4MTAwNDEwNDAsIDB4MDAwNDEwMDAsCisgICAgMHgxMDA0MTAwMCwgMHgwMDA0MTA0MCwgMHgwMDAwMTAwMCwgMHgwMDAwMDA0MCwKKyAgICAweDEwMDQwMDAwLCAweDEwMDAwMDQwLCAweDEwMDAxMDAwLCAweDAwMDAxMDQwLAorICAgIDB4MDAwNDEwMDAsIDB4MDAwNDAwNDAsIDB4MTAwNDAwNDAsIDB4MTAwNDEwMDAsCisgICAgMHgwMDAwMTA0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMDA0MDA0MCwKKyAgICAweDEwMDAwMDQwLCAweDEwMDAxMDAwLCAweDAwMDQxMDQwLCAweDAwMDQwMDAwLAorICAgIDB4MDAwNDEwNDAsIDB4MDAwNDAwMDAsIDB4MTAwNDEwMDAsIDB4MDAwMDEwMDAsCisgICAgMHgwMDAwMDA0MCwgMHgxMDA0MDA0MCwgMHgwMDAwMTAwMCwgMHgwMDA0MTA0MCwKKyAgICAweDEwMDAxMDAwLCAweDAwMDAwMDQwLCAweDEwMDAwMDQwLCAweDEwMDQwMDAwLAorICAgIDB4MTAwNDAwNDAsIDB4MTAwMDAwMDAsIDB4MDAwNDAwMDAsIDB4MTAwMDEwNDAsCisgICAgMHgwMDAwMDAwMCwgMHgxMDA0MTA0MCwgMHgwMDA0MDA0MCwgMHgxMDAwMDA0MCwKKyAgICAweDEwMDQwMDAwLCAweDEwMDAxMDAwLCAweDEwMDAxMDQwLCAweDAwMDAwMDAwLAorICAgIDB4MTAwNDEwNDAsIDB4MDAwNDEwMDAsIDB4MDAwNDEwMDAsIDB4MDAwMDEwNDAsCisgICAgMHgwMDAwMTA0MCwgMHgwMDA0MDA0MCwgMHgxMDAwMDAwMCwgMHgxMDA0MTAwMAorfTsKKworLyoKKyAqIFBDMTogbGVmdCBhbmQgcmlnaHQgaGFsdmVzIGJpdC1zd2FwCisgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBMSHNbMTZdID0KK3sKKyAgICAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCAweDAwMDAwMTAwLCAweDAwMDAwMTAxLAorICAgIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMTAxMDAsIDB4MDAwMTAxMDEsCisgICAgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMSwgMHgwMTAwMDEwMCwgMHgwMTAwMDEwMSwKKyAgICAweDAxMDEwMDAwLCAweDAxMDEwMDAxLCAweDAxMDEwMTAwLCAweDAxMDEwMTAxCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgUkhzWzE2XSA9Cit7CisgICAgMHgwMDAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMDAxMDAwMCwgMHgwMTAxMDAwMCwKKyAgICAweDAwMDAwMTAwLCAweDAxMDAwMTAwLCAweDAwMDEwMTAwLCAweDAxMDEwMTAwLAorICAgIDB4MDAwMDAwMDEsIDB4MDEwMDAwMDEsIDB4MDAwMTAwMDEsIDB4MDEwMTAwMDEsCisgICAgMHgwMDAwMDEwMSwgMHgwMTAwMDEwMSwgMHgwMDAxMDEwMSwgMHgwMTAxMDEwMSwKK307CisKKy8qCisgKiBJbml0aWFsIFBlcm11dGF0aW9uIG1hY3JvCisgKi8KKyNkZWZpbmUgREVTX0lQKFgsWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgPSAoKFggPj4gIDQpIF4gWSkgJiAweDBGMEYwRjBGOyBZIF49IFQ7IFggXj0gKFQgPDwgIDQpOyAgIFwKKyAgICBUID0gKChYID4+IDE2KSBeIFkpICYgMHgwMDAwRkZGRjsgWSBePSBUOyBYIF49IChUIDw8IDE2KTsgICBcCisgICAgVCA9ICgoWSA+PiAgMikgXiBYKSAmIDB4MzMzMzMzMzM7IFggXj0gVDsgWSBePSAoVCA8PCAgMik7ICAgXAorICAgIFQgPSAoKFkgPj4gIDgpIF4gWCkgJiAweDAwRkYwMEZGOyBYIF49IFQ7IFkgXj0gKFQgPDwgIDgpOyAgIFwKKyAgICBZID0gKChZIDw8IDEpIHwgKFkgPj4gMzEpKSAmIDB4RkZGRkZGRkY7ICAgICAgICAgICAgICAgICAgICBcCisgICAgVCA9IChYIF4gWSkgJiAweEFBQUFBQUFBOyBZIF49IFQ7IFggXj0gVDsgICAgICAgICAgICAgICAgICAgXAorICAgIFggPSAoKFggPDwgMSkgfCAoWCA+PiAzMSkpICYgMHhGRkZGRkZGRjsgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIEZpbmFsIFBlcm11dGF0aW9uIG1hY3JvCisgKi8KKyNkZWZpbmUgREVTX0ZQKFgsWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFggPSAoKFggPDwgMzEpIHwgKFggPj4gMSkpICYgMHhGRkZGRkZGRjsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUID0gKFggXiBZKSAmIDB4QUFBQUFBQUE7IFggXj0gVDsgWSBePSBUOyAgICAgICAgICAgICAgICAgICBcCisgICAgWSA9ICgoWSA8PCAzMSkgfCAoWSA+PiAxKSkgJiAweEZGRkZGRkZGOyAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgPSAoKFkgPj4gIDgpIF4gWCkgJiAweDAwRkYwMEZGOyBYIF49IFQ7IFkgXj0gKFQgPDwgIDgpOyAgIFwKKyAgICBUID0gKChZID4+ICAyKSBeIFgpICYgMHgzMzMzMzMzMzsgWCBePSBUOyBZIF49IChUIDw8ICAyKTsgICBcCisgICAgVCA9ICgoWCA+PiAxNikgXiBZKSAmIDB4MDAwMEZGRkY7IFkgXj0gVDsgWCBePSAoVCA8PCAxNik7ICAgXAorICAgIFQgPSAoKFggPj4gIDQpIF4gWSkgJiAweDBGMEYwRjBGOyBZIF49IFQ7IFggXj0gKFQgPDwgIDQpOyAgIFwKK30KKworLyoKKyAqIERFUyByb3VuZCBtYWNybworICovCisjZGVmaW5lIERFU19ST1VORChYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVCA9ICpTSysrIF4gWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgWSBePSBTQjhbIChUICAgICAgKSAmIDB4M0YgXSBeICAgICAgICAgICAgICBcCisgICAgICAgICBTQjZbIChUID4+ICA4KSAmIDB4M0YgXSBeICAgICAgICAgICAgICBcCisgICAgICAgICBTQjRbIChUID4+IDE2KSAmIDB4M0YgXSBeICAgICAgICAgICAgICBcCisgICAgICAgICBTQjJbIChUID4+IDI0KSAmIDB4M0YgXTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVCA9ICpTSysrIF4gKChYIDw8IDI4KSB8IChYID4+IDQpKTsgICAgICAgICBcCisgICAgWSBePSBTQjdbIChUICAgICAgKSAmIDB4M0YgXSBeICAgICAgICAgICAgICBcCisgICAgICAgICBTQjVbIChUID4+ICA4KSAmIDB4M0YgXSBeICAgICAgICAgICAgICBcCisgICAgICAgICBTQjNbIChUID4+IDE2KSAmIDB4M0YgXSBeICAgICAgICAgICAgICBcCisgICAgICAgICBTQjFbIChUID4+IDI0KSAmIDB4M0YgXTsgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU1dBUChhLGIpIHsgdWludDMyX3QgdCA9IGE7IGEgPSBiOyBiID0gdDsgdCA9IDA7IH0KKwordm9pZCBtYmVkdGxzX2Rlc19pbml0KCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfZGVzX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfZGVzX2ZyZWUoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19kZXNfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19kZXMzX2luaXQoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfZGVzM19jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX2RlczNfZnJlZSggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19kZXMzX2NvbnRleHQgKSApOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvZGRfcGFyaXR5X3RhYmxlWzEyOF0gPSB7IDEsICAyLCAgNCwgIDcsICA4LAorICAgICAgICAxMSwgMTMsIDE0LCAxNiwgMTksIDIxLCAyMiwgMjUsIDI2LCAyOCwgMzEsIDMyLCAzNSwgMzcsIDM4LCA0MSwgNDIsIDQ0LAorICAgICAgICA0NywgNDksIDUwLCA1MiwgNTUsIDU2LCA1OSwgNjEsIDYyLCA2NCwgNjcsIDY5LCA3MCwgNzMsIDc0LCA3NiwgNzksIDgxLAorICAgICAgICA4MiwgODQsIDg3LCA4OCwgOTEsIDkzLCA5NCwgOTcsIDk4LCAxMDAsIDEwMywgMTA0LCAxMDcsIDEwOSwgMTEwLCAxMTIsCisgICAgICAgIDExNSwgMTE3LCAxMTgsIDEyMSwgMTIyLCAxMjQsIDEyNywgMTI4LCAxMzEsIDEzMywgMTM0LCAxMzcsIDEzOCwgMTQwLAorICAgICAgICAxNDMsIDE0NSwgMTQ2LCAxNDgsIDE1MSwgMTUyLCAxNTUsIDE1NywgMTU4LCAxNjEsIDE2MiwgMTY0LCAxNjcsIDE2OCwKKyAgICAgICAgMTcxLCAxNzMsIDE3NCwgMTc2LCAxNzksIDE4MSwgMTgyLCAxODUsIDE4NiwgMTg4LCAxOTEsIDE5MywgMTk0LCAxOTYsCisgICAgICAgIDE5OSwgMjAwLCAyMDMsIDIwNSwgMjA2LCAyMDgsIDIxMSwgMjEzLCAyMTQsIDIxNywgMjE4LCAyMjAsIDIyMywgMjI0LAorICAgICAgICAyMjcsIDIyOSwgMjMwLCAyMzMsIDIzNCwgMjM2LCAyMzksIDI0MSwgMjQyLCAyNDQsIDI0NywgMjQ4LCAyNTEsIDI1MywKKyAgICAgICAgMjU0IH07CisKK3ZvaWQgbWJlZHRsc19kZXNfa2V5X3NldF9wYXJpdHkoIHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXSApCit7CisgICAgaW50IGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgTUJFRFRMU19ERVNfS0VZX1NJWkU7IGkrKyApCisgICAgICAgIGtleVtpXSA9IG9kZF9wYXJpdHlfdGFibGVba2V5W2ldIC8gMl07Cit9CisKKy8qCisgKiBDaGVjayB0aGUgZ2l2ZW4ga2V5J3MgcGFyaXR5LCByZXR1cm5zIDEgb24gZmFpbHVyZSwgMCBvbiBTVUNDRVNTCisgKi8KK2ludCBtYmVkdGxzX2Rlc19rZXlfY2hlY2tfa2V5X3Bhcml0eSggY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciggaSA9IDA7IGkgPCBNQkVEVExTX0RFU19LRVlfU0laRTsgaSsrICkKKyAgICAgICAgaWYoIGtleVtpXSAhPSBvZGRfcGFyaXR5X3RhYmxlW2tleVtpXSAvIDJdICkKKyAgICAgICAgICAgIHJldHVybiggMSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBUYWJsZSBvZiB3ZWFrIGFuZCBzZW1pLXdlYWsga2V5cworICoKKyAqIFNvdXJjZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWFrX2tleQorICoKKyAqIFdlYWs6CisgKiBBbHRlcm5hdGluZyBvbmVzICsgemVyb3MgKDB4MDEwMTAxMDEwMTAxMDEwMSkKKyAqIEFsdGVybmF0aW5nICdGJyArICdFJyAoMHhGRUZFRkVGRUZFRkVGRUZFKQorICogJzB4RTBFMEUwRTBGMUYxRjFGMScKKyAqICcweDFGMUYxRjFGMEUwRTBFMEUnCisgKgorICogU2VtaS13ZWFrOgorICogMHgwMTFGMDExRjAxMEUwMTBFIGFuZCAweDFGMDExRjAxMEUwMTBFMDEKKyAqIDB4MDFFMDAxRTAwMUYxMDFGMSBhbmQgMHhFMDAxRTAwMUYxMDFGMTAxCisgKiAweDAxRkUwMUZFMDFGRTAxRkUgYW5kIDB4RkUwMUZFMDFGRTAxRkUwMQorICogMHgxRkUwMUZFMDBFRjEwRUYxIGFuZCAweEUwMUZFMDFGRjEwRUYxMEUKKyAqIDB4MUZGRTFGRkUwRUZFMEVGRSBhbmQgMHhGRTFGRkUxRkZFMEVGRTBFCisgKiAweEUwRkVFMEZFRjFGRUYxRkUgYW5kIDB4RkVFMEZFRTBGRUYxRkVGMQorICoKKyAqLworCisjZGVmaW5lIFdFQUtfS0VZX0NPVU5UIDE2CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHdlYWtfa2V5X3RhYmxlW1dFQUtfS0VZX0NPVU5UXVtNQkVEVExTX0RFU19LRVlfU0laRV0gPQoreworICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgIHsgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSwgMHhGRSB9LAorICAgIHsgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgwRSwgMHgwRSwgMHgwRSwgMHgwRSB9LAorICAgIHsgMHhFMCwgMHhFMCwgMHhFMCwgMHhFMCwgMHhGMSwgMHhGMSwgMHhGMSwgMHhGMSB9LAorCisgICAgeyAweDAxLCAweDFGLCAweDAxLCAweDFGLCAweDAxLCAweDBFLCAweDAxLCAweDBFIH0sCisgICAgeyAweDFGLCAweDAxLCAweDFGLCAweDAxLCAweDBFLCAweDAxLCAweDBFLCAweDAxIH0sCisgICAgeyAweDAxLCAweEUwLCAweDAxLCAweEUwLCAweDAxLCAweEYxLCAweDAxLCAweEYxIH0sCisgICAgeyAweEUwLCAweDAxLCAweEUwLCAweDAxLCAweEYxLCAweDAxLCAweEYxLCAweDAxIH0sCisgICAgeyAweDAxLCAweEZFLCAweDAxLCAweEZFLCAweDAxLCAweEZFLCAweDAxLCAweEZFIH0sCisgICAgeyAweEZFLCAweDAxLCAweEZFLCAweDAxLCAweEZFLCAweDAxLCAweEZFLCAweDAxIH0sCisgICAgeyAweDFGLCAweEUwLCAweDFGLCAweEUwLCAweDBFLCAweEYxLCAweDBFLCAweEYxIH0sCisgICAgeyAweEUwLCAweDFGLCAweEUwLCAweDFGLCAweEYxLCAweDBFLCAweEYxLCAweDBFIH0sCisgICAgeyAweDFGLCAweEZFLCAweDFGLCAweEZFLCAweDBFLCAweEZFLCAweDBFLCAweEZFIH0sCisgICAgeyAweEZFLCAweDFGLCAweEZFLCAweDFGLCAweEZFLCAweDBFLCAweEZFLCAweDBFIH0sCisgICAgeyAweEUwLCAweEZFLCAweEUwLCAweEZFLCAweEYxLCAweEZFLCAweEYxLCAweEZFIH0sCisgICAgeyAweEZFLCAweEUwLCAweEZFLCAweEUwLCAweEZFLCAweEYxLCAweEZFLCAweEYxIH0KK307CisKK2ludCBtYmVkdGxzX2Rlc19rZXlfY2hlY2tfd2VhayggY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciggaSA9IDA7IGkgPCBXRUFLX0tFWV9DT1VOVDsgaSsrICkKKyAgICAgICAgaWYoIG1lbWNtcCggd2Vha19rZXlfdGFibGVbaV0sIGtleSwgTUJFRFRMU19ERVNfS0VZX1NJWkUpID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfREVTX1NFVEtFWV9BTFQpCit2b2lkIG1iZWR0bHNfZGVzX3NldGtleSggdWludDMyX3QgU0tbMzJdLCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKQoreworICAgIGludCBpOworICAgIHVpbnQzMl90IFgsIFksIFQ7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBYLCBrZXksIDAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBZLCBrZXksIDQgKTsKKworICAgIC8qCisgICAgICogUGVybXV0ZWQgQ2hvaWNlIDEKKyAgICAgKi8KKyAgICBUID0gICgoWSA+PiAgNCkgXiBYKSAmIDB4MEYwRjBGMEY7ICBYIF49IFQ7IFkgXj0gKFQgPDwgIDQpOworICAgIFQgPSAgKChZICAgICAgKSBeIFgpICYgMHgxMDEwMTAxMDsgIFggXj0gVDsgWSBePSAoVCAgICAgICk7CisKKyAgICBYID0gICAoTEhzWyAoWCAgICAgICkgJiAweEZdIDw8IDMpIHwgKExIc1sgKFggPj4gIDgpICYgMHhGIF0gPDwgMikKKyAgICAgICAgfCAoTEhzWyAoWCA+PiAxNikgJiAweEZdIDw8IDEpIHwgKExIc1sgKFggPj4gMjQpICYgMHhGIF0gICAgICkKKyAgICAgICAgfCAoTEhzWyAoWCA+PiAgNSkgJiAweEZdIDw8IDcpIHwgKExIc1sgKFggPj4gMTMpICYgMHhGIF0gPDwgNikKKyAgICAgICAgfCAoTEhzWyAoWCA+PiAyMSkgJiAweEZdIDw8IDUpIHwgKExIc1sgKFggPj4gMjkpICYgMHhGIF0gPDwgNCk7CisKKyAgICBZID0gICAoUkhzWyAoWSA+PiAgMSkgJiAweEZdIDw8IDMpIHwgKFJIc1sgKFkgPj4gIDkpICYgMHhGIF0gPDwgMikKKyAgICAgICAgfCAoUkhzWyAoWSA+PiAxNykgJiAweEZdIDw8IDEpIHwgKFJIc1sgKFkgPj4gMjUpICYgMHhGIF0gICAgICkKKyAgICAgICAgfCAoUkhzWyAoWSA+PiAgNCkgJiAweEZdIDw8IDcpIHwgKFJIc1sgKFkgPj4gMTIpICYgMHhGIF0gPDwgNikKKyAgICAgICAgfCAoUkhzWyAoWSA+PiAyMCkgJiAweEZdIDw8IDUpIHwgKFJIc1sgKFkgPj4gMjgpICYgMHhGIF0gPDwgNCk7CisKKyAgICBYICY9IDB4MEZGRkZGRkY7CisgICAgWSAmPSAweDBGRkZGRkZGOworCisgICAgLyoKKyAgICAgKiBjYWxjdWxhdGUgc3Via2V5cworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCBpIDwgMiB8fCBpID09IDggfHwgaSA9PSAxNSApCisgICAgICAgIHsKKyAgICAgICAgICAgIFggPSAoKFggPDwgIDEpIHwgKFggPj4gMjcpKSAmIDB4MEZGRkZGRkY7CisgICAgICAgICAgICBZID0gKChZIDw8ICAxKSB8IChZID4+IDI3KSkgJiAweDBGRkZGRkZGOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgWCA9ICgoWCA8PCAgMikgfCAoWCA+PiAyNikpICYgMHgwRkZGRkZGRjsKKyAgICAgICAgICAgIFkgPSAoKFkgPDwgIDIpIHwgKFkgPj4gMjYpKSAmIDB4MEZGRkZGRkY7CisgICAgICAgIH0KKworICAgICAgICAqU0srKyA9ICAgKChYIDw8ICA0KSAmIDB4MjQwMDAwMDApIHwgKChYIDw8IDI4KSAmIDB4MTAwMDAwMDApCisgICAgICAgICAgICAgICAgfCAoKFggPDwgMTQpICYgMHgwODAwMDAwMCkgfCAoKFggPDwgMTgpICYgMHgwMjA4MDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWCA8PCAgNikgJiAweDAxMDAwMDAwKSB8ICgoWCA8PCAgOSkgJiAweDAwMjAwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYID4+ICAxKSAmIDB4MDAxMDAwMDApIHwgKChYIDw8IDEwKSAmIDB4MDAwNDAwMDApCisgICAgICAgICAgICAgICAgfCAoKFggPDwgIDIpICYgMHgwMDAyMDAwMCkgfCAoKFggPj4gMTApICYgMHgwMDAxMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA+PiAxMykgJiAweDAwMDAyMDAwKSB8ICgoWSA+PiAgNCkgJiAweDAwMDAxMDAwKQorICAgICAgICAgICAgICAgIHwgKChZIDw8ICA2KSAmIDB4MDAwMDA4MDApIHwgKChZID4+ICAxKSAmIDB4MDAwMDA0MDApCisgICAgICAgICAgICAgICAgfCAoKFkgPj4gMTQpICYgMHgwMDAwMDIwMCkgfCAoKFkgICAgICApICYgMHgwMDAwMDEwMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA+PiAgNSkgJiAweDAwMDAwMDIwKSB8ICgoWSA+PiAxMCkgJiAweDAwMDAwMDEwKQorICAgICAgICAgICAgICAgIHwgKChZID4+ICAzKSAmIDB4MDAwMDAwMDgpIHwgKChZID4+IDE4KSAmIDB4MDAwMDAwMDQpCisgICAgICAgICAgICAgICAgfCAoKFkgPj4gMjYpICYgMHgwMDAwMDAwMikgfCAoKFkgPj4gMjQpICYgMHgwMDAwMDAwMSk7CisKKyAgICAgICAgKlNLKysgPSAgICgoWCA8PCAxNSkgJiAweDIwMDAwMDAwKSB8ICgoWCA8PCAxNykgJiAweDEwMDAwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYIDw8IDEwKSAmIDB4MDgwMDAwMDApIHwgKChYIDw8IDIyKSAmIDB4MDQwMDAwMDApCisgICAgICAgICAgICAgICAgfCAoKFggPj4gIDIpICYgMHgwMjAwMDAwMCkgfCAoKFggPDwgIDEpICYgMHgwMTAwMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWCA8PCAxNikgJiAweDAwMjAwMDAwKSB8ICgoWCA8PCAxMSkgJiAweDAwMTAwMDAwKQorICAgICAgICAgICAgICAgIHwgKChYIDw8ICAzKSAmIDB4MDAwODAwMDApIHwgKChYID4+ICA2KSAmIDB4MDAwNDAwMDApCisgICAgICAgICAgICAgICAgfCAoKFggPDwgMTUpICYgMHgwMDAyMDAwMCkgfCAoKFggPj4gIDQpICYgMHgwMDAxMDAwMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA+PiAgMikgJiAweDAwMDAyMDAwKSB8ICgoWSA8PCAgOCkgJiAweDAwMDAxMDAwKQorICAgICAgICAgICAgICAgIHwgKChZID4+IDE0KSAmIDB4MDAwMDA4MDgpIHwgKChZID4+ICA5KSAmIDB4MDAwMDA0MDApCisgICAgICAgICAgICAgICAgfCAoKFkgICAgICApICYgMHgwMDAwMDIwMCkgfCAoKFkgPDwgIDcpICYgMHgwMDAwMDEwMCkKKyAgICAgICAgICAgICAgICB8ICgoWSA+PiAgNykgJiAweDAwMDAwMDIwKSB8ICgoWSA+PiAgMykgJiAweDAwMDAwMDExKQorICAgICAgICAgICAgICAgIHwgKChZIDw8ICAyKSAmIDB4MDAwMDAwMDQpIHwgKChZID4+IDIxKSAmIDB4MDAwMDAwMDIpOworICAgIH0KK30KKyNlbmRpZiAvKiAhTUJFRFRMU19ERVNfU0VUS0VZX0FMVCAqLworCisvKgorICogREVTIGtleSBzY2hlZHVsZSAoNTYtYml0LCBlbmNyeXB0aW9uKQorICovCitpbnQgbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV0gKQoreworICAgIG1iZWR0bHNfZGVzX3NldGtleSggY3R4LT5zaywga2V5ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIERFUyBrZXkgc2NoZWR1bGUgKDU2LWJpdCwgZGVjcnlwdGlvbikKKyAqLworaW50IG1iZWR0bHNfZGVzX3NldGtleV9kZWMoIG1iZWR0bHNfZGVzX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkVdICkKK3sKKyAgICBpbnQgaTsKKworICAgIG1iZWR0bHNfZGVzX3NldGtleSggY3R4LT5zaywga2V5ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkgKz0gMiApCisgICAgeworICAgICAgICBTV0FQKCBjdHgtPnNrW2kgICAgXSwgY3R4LT5za1szMCAtIGldICk7CisgICAgICAgIFNXQVAoIGN0eC0+c2tbaSArIDFdLCBjdHgtPnNrWzMxIC0gaV0gKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgZGVzM19zZXQya2V5KCB1aW50MzJfdCBlc2tbOTZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc2tbOTZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSoyXSApCit7CisgICAgaW50IGk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXkoIGVzaywga2V5ICk7CisgICAgbWJlZHRsc19kZXNfc2V0a2V5KCBkc2sgKyAzMiwga2V5ICsgOCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDMyOyBpICs9IDIgKQorICAgIHsKKyAgICAgICAgZHNrW2kgICAgIF0gPSBlc2tbMzAgLSBpXTsKKyAgICAgICAgZHNrW2kgKyAgMV0gPSBlc2tbMzEgLSBpXTsKKworICAgICAgICBlc2tbaSArIDMyXSA9IGRza1s2MiAtIGldOworICAgICAgICBlc2tbaSArIDMzXSA9IGRza1s2MyAtIGldOworCisgICAgICAgIGVza1tpICsgNjRdID0gZXNrW2kgICAgXTsKKyAgICAgICAgZXNrW2kgKyA2NV0gPSBlc2tbaSArIDFdOworCisgICAgICAgIGRza1tpICsgNjRdID0gZHNrW2kgICAgXTsKKyAgICAgICAgZHNrW2kgKyA2NV0gPSBkc2tbaSArIDFdOworICAgIH0KK30KKworLyoKKyAqIFRyaXBsZS1ERVMga2V5IHNjaGVkdWxlICgxMTItYml0LCBlbmNyeXB0aW9uKQorICovCitpbnQgbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFICogMl0gKQoreworICAgIHVpbnQzMl90IHNrWzk2XTsKKworICAgIGRlczNfc2V0MmtleSggY3R4LT5zaywgc2ssIGtleSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggc2ssICBzaXplb2YoIHNrICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVHJpcGxlLURFUyBrZXkgc2NoZWR1bGUgKDExMi1iaXQsIGRlY3J5cHRpb24pCisgKi8KK2ludCBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMoIG1iZWR0bHNfZGVzM19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbTUJFRFRMU19ERVNfS0VZX1NJWkUgKiAyXSApCit7CisgICAgdWludDMyX3Qgc2tbOTZdOworCisgICAgZGVzM19zZXQya2V5KCBzaywgY3R4LT5zaywga2V5ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBzaywgIHNpemVvZiggc2sgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIGRlczNfc2V0M2tleSggdWludDMyX3QgZXNrWzk2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHNrWzk2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRdICkKK3sKKyAgICBpbnQgaTsKKworICAgIG1iZWR0bHNfZGVzX3NldGtleSggZXNrLCBrZXkgKTsKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXkoIGRzayArIDMyLCBrZXkgKyAgOCApOworICAgIG1iZWR0bHNfZGVzX3NldGtleSggZXNrICsgNjQsIGtleSArIDE2ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMzI7IGkgKz0gMiApCisgICAgeworICAgICAgICBkc2tbaSAgICAgXSA9IGVza1s5NCAtIGldOworICAgICAgICBkc2tbaSArICAxXSA9IGVza1s5NSAtIGldOworCisgICAgICAgIGVza1tpICsgMzJdID0gZHNrWzYyIC0gaV07CisgICAgICAgIGVza1tpICsgMzNdID0gZHNrWzYzIC0gaV07CisKKyAgICAgICAgZHNrW2kgKyA2NF0gPSBlc2tbMzAgLSBpXTsKKyAgICAgICAgZHNrW2kgKyA2NV0gPSBlc2tbMzEgLSBpXTsKKyAgICB9Cit9CisKKy8qCisgKiBUcmlwbGUtREVTIGtleSBzY2hlZHVsZSAoMTY4LWJpdCwgZW5jcnlwdGlvbikKKyAqLworaW50IG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRSAqIDNdICkKK3sKKyAgICB1aW50MzJfdCBza1s5Nl07CisKKyAgICBkZXMzX3NldDNrZXkoIGN0eC0+c2ssIHNrLCBrZXkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIHNrLCAgc2l6ZW9mKCBzayApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFRyaXBsZS1ERVMga2V5IHNjaGVkdWxlICgxNjgtYml0LCBkZWNyeXB0aW9uKQorICovCitpbnQgbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFICogM10gKQoreworICAgIHVpbnQzMl90IHNrWzk2XTsKKworICAgIGRlczNfc2V0M2tleSggc2ssIGN0eC0+c2ssIGtleSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggc2ssICBzaXplb2YoIHNrICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogREVTLUVDQiBibG9jayBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworI2lmICFkZWZpbmVkKE1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQpCitpbnQgbWJlZHRsc19kZXNfY3J5cHRfZWNiKCBtYmVkdGxzX2Rlc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbOF0sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzhdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCBYLCBZLCBULCAqU0s7CisKKyAgICBTSyA9IGN0eC0+c2s7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBYLCBpbnB1dCwgMCApOworICAgIEdFVF9VSU5UMzJfQkUoIFksIGlucHV0LCA0ICk7CisKKyAgICBERVNfSVAoIFgsIFkgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgIHsKKyAgICAgICAgREVTX1JPVU5EKCBZLCBYICk7CisgICAgICAgIERFU19ST1VORCggWCwgWSApOworICAgIH0KKworICAgIERFU19GUCggWSwgWCApOworCisgICAgUFVUX1VJTlQzMl9CRSggWSwgb3V0cHV0LCAwICk7CisgICAgUFVUX1VJTlQzMl9CRSggWCwgb3V0cHV0LCA0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19ERVNfQ1JZUFRfRUNCX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qCisgKiBERVMtQ0JDIGJ1ZmZlciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggbWJlZHRsc19kZXNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdls4XSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wWzhdOworCisgICAgaWYoIGxlbmd0aCAlIDggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19ERVNfRU5DUllQVCApCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggaW5wdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtYmVkdGxzX2Rlc19jcnlwdF9lY2IoIGN0eCwgb3V0cHV0LCBvdXRwdXQgKTsKKyAgICAgICAgICAgIG1lbWNweSggaXYsIG91dHB1dCwgOCApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gODsKKyAgICAgICAgICAgIG91dHB1dCArPSA4OworICAgICAgICAgICAgbGVuZ3RoIC09IDg7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvKiBNQkVEVExTX0RFU19ERUNSWVBUICovCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweSggdGVtcCwgaW5wdXQsIDggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggY3R4LCBpbnB1dCwgb3V0cHV0ICk7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggb3V0cHV0W2ldIF4gaXZbaV0gKTsKKworICAgICAgICAgICAgbWVtY3B5KCBpdiwgdGVtcCwgOCApOworCisgICAgICAgICAgICBpbnB1dCAgKz0gODsKKyAgICAgICAgICAgIG91dHB1dCArPSA4OworICAgICAgICAgICAgbGVuZ3RoIC09IDg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisvKgorICogM0RFUy1FQ0IgYmxvY2sgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0RFUzNfQ1JZUFRfRUNCX0FMVCkKK2ludCBtYmVkdGxzX2RlczNfY3J5cHRfZWNiKCBtYmVkdGxzX2RlczNfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBpbnB1dFs4XSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzhdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCBYLCBZLCBULCAqU0s7CisKKyAgICBTSyA9IGN0eC0+c2s7CisKKyAgICBHRVRfVUlOVDMyX0JFKCBYLCBpbnB1dCwgMCApOworICAgIEdFVF9VSU5UMzJfQkUoIFksIGlucHV0LCA0ICk7CisKKyAgICBERVNfSVAoIFgsIFkgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgIHsKKyAgICAgICAgREVTX1JPVU5EKCBZLCBYICk7CisgICAgICAgIERFU19ST1VORCggWCwgWSApOworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgIHsKKyAgICAgICAgREVTX1JPVU5EKCBYLCBZICk7CisgICAgICAgIERFU19ST1VORCggWSwgWCApOworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgIHsKKyAgICAgICAgREVTX1JPVU5EKCBZLCBYICk7CisgICAgICAgIERFU19ST1VORCggWCwgWSApOworICAgIH0KKworICAgIERFU19GUCggWSwgWCApOworCisgICAgUFVUX1VJTlQzMl9CRSggWSwgb3V0cHV0LCAwICk7CisgICAgUFVUX1VJTlQzMl9CRSggWCwgb3V0cHV0LCA0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19ERVMzX0NSWVBUX0VDQl9BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisvKgorICogM0RFUy1DQkMgYnVmZmVyIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorICovCitpbnQgbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggbWJlZHRsc19kZXMzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbOF0sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wWzhdOworCisgICAgaWYoIGxlbmd0aCAlIDggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19ERVNfRU5DUllQVCApCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggaW5wdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtYmVkdGxzX2RlczNfY3J5cHRfZWNiKCBjdHgsIG91dHB1dCwgb3V0cHV0ICk7CisgICAgICAgICAgICBtZW1jcHkoIGl2LCBvdXRwdXQsIDggKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IDg7CisgICAgICAgICAgICBvdXRwdXQgKz0gODsKKyAgICAgICAgICAgIGxlbmd0aCAtPSA4OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogTUJFRFRMU19ERVNfREVDUllQVCAqLworICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoIHRlbXAsIGlucHV0LCA4ICk7CisgICAgICAgICAgICBtYmVkdGxzX2RlczNfY3J5cHRfZWNiKCBjdHgsIGlucHV0LCBvdXRwdXQgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCBvdXRwdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtZW1jcHkoIGl2LCB0ZW1wLCA4ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSA4OworICAgICAgICAgICAgb3V0cHV0ICs9IDg7CisgICAgICAgICAgICBsZW5ndGggLT0gODsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNlbmRpZiAvKiAhTUJFRFRMU19ERVNfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoKKyAqIERFUyBhbmQgM0RFUyB0ZXN0IHZlY3RvcnMgZnJvbToKKyAqCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1RNL2NhdnAvZG9jdW1lbnRzL2Rlcy90cmlwbGVkZXMtdmVjdG9ycy56aXAKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2tleXNbMjRdID0KK3sKKyAgICAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorICAgIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUYsIDB4MDEsCisgICAgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwgMHgwMSwgMHgyMworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2J1Zls4XSA9Cit7CisgICAgMHg0RSwgMHg2RiwgMHg3NywgMHgyMCwgMHg2OSwgMHg3MywgMHgyMCwgMHg3NAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2VjYl9kZWNbM11bOF0gPQoreworICAgIHsgMHhDRCwgMHhENiwgMHg0RiwgMHgyRiwgMHg5NCwgMHgyNywgMHhDMSwgMHg1RCB9LAorICAgIHsgMHg2OSwgMHg5NiwgMHhDOCwgMHhGQSwgMHg0NywgMHhBMiwgMHhBQiwgMHhFQiB9LAorICAgIHsgMHg4MywgMHgyNSwgMHgzOSwgMHg3NiwgMHg0NCwgMHgwOSwgMHgxQSwgMHgwQSB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZXMzX3Rlc3RfZWNiX2VuY1szXVs4XSA9Cit7CisgICAgeyAweDZBLCAweDJBLCAweDE5LCAweEY0LCAweDFFLCAweENBLCAweDg1LCAweDRCIH0sCisgICAgeyAweDAzLCAweEU2LCAweDlGLCAweDVCLCAweEZBLCAweDU4LCAweEVCLCAweDQyIH0sCisgICAgeyAweERELCAweDE3LCAweEU4LCAweEI4LCAweEI0LCAweDM3LCAweEQyLCAweDMyIH0KK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2l2WzhdID0KK3sKKyAgICAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDkwLCAweEFCLCAweENELCAweEVGLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVzM190ZXN0X2NiY19kZWNbM11bOF0gPQoreworICAgIHsgMHgxMiwgMHg5RiwgMHg0MCwgMHhCOSwgMHhEMiwgMHgwMCwgMHg1NiwgMHhCMyB9LAorICAgIHsgMHg0NywgMHgwRSwgMHhGQywgMHg5QSwgMHg2QiwgMHg4RSwgMHhFMywgMHg5MyB9LAorICAgIHsgMHhDNSwgMHhDRSwgMHhDRiwgMHg2MywgMHhFQywgMHhFQywgMHg1MSwgMHg0QyB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZXMzX3Rlc3RfY2JjX2VuY1szXVs4XSA9Cit7CisgICAgeyAweDU0LCAweEYxLCAweDVBLCAweEY2LCAweEVCLCAweEUzLCAweEE0LCAweEI0IH0sCisgICAgeyAweDM1LCAweDc2LCAweDExLCAweDU2LCAweDVGLCAweEExLCAweDhFLCAweDREIH0sCisgICAgeyAweENCLCAweDE5LCAweDFGLCAweDg1LCAweEQxLCAweEVELCAweDg0LCAweDM5IH0KK307CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19kZXNfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGksIGosIHUsIHYsIHJldCA9IDA7CisgICAgbWJlZHRsc19kZXNfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19kZXMzX2NvbnRleHQgY3R4MzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHVuc2lnbmVkIGNoYXIgcHJ2WzhdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbOF07CisjZW5kaWYKKworICAgIG1iZWR0bHNfZGVzX2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX2RlczNfaW5pdCggJmN0eDMgKTsKKyAgICAvKgorICAgICAqIEVDQiBtb2RlCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICB1ID0gaSA+PiAxOworICAgICAgICB2ID0gaSAgJiAxOworCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIERFUyVjLUVDQi0lM2QgKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB1ID09IDAgKSA/ICcgJyA6ICczJywgNTYgKyB1ICogNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdiA9PSBNQkVEVExTX0RFU19ERUNSWVBUICkgPyAiZGVjIiA6ICJlbmMiICk7CisKKyAgICAgICAgbWVtY3B5KCBidWYsIGRlczNfdGVzdF9idWYsIDggKTsKKworICAgICAgICBzd2l0Y2goIGkgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzX3NldGtleV9kZWMoICZjdHgsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jKCAmY3R4LCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbWJlZHRsc19kZXMzX3NldDJrZXlfZGVjKCAmY3R4MywgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzM19zZXQya2V5X2VuYyggJmN0eDMsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9kZWMoICZjdHgzLCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZW5jKCAmY3R4MywgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwMDsgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHUgPT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19kZXNfY3J5cHRfZWNiKCAmY3R4LCBidWYsIGJ1ZiApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoICZjdHgzLCBidWYsIGJ1ZiApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggdiA9PSBNQkVEVExTX0RFU19ERUNSWVBUICYmCisgICAgICAgICAgICAgICAgbWVtY21wKCBidWYsIGRlczNfdGVzdF9lY2JfZGVjW3VdLCA4ICkgIT0gMCApIHx8CisgICAgICAgICAgICAoIHYgIT0gTUJFRFRMU19ERVNfREVDUllQVCAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCggYnVmLCBkZXMzX3Rlc3RfZWNiX2VuY1t1XSwgOCApICE9IDAgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIC8qCisgICAgICogQ0JDIG1vZGUKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgNjsgaSsrICkKKyAgICB7CisgICAgICAgIHUgPSBpID4+IDE7CisgICAgICAgIHYgPSBpICAmIDE7CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgREVTJWMtQ0JDLSUzZCAoJXMpOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHUgPT0gMCApID8gJyAnIDogJzMnLCA1NiArIHUgKiA1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB2ID09IE1CRURUTFNfREVTX0RFQ1JZUFQgKSA/ICJkZWMiIDogImVuYyIgKTsKKworICAgICAgICBtZW1jcHkoIGl2LCAgZGVzM190ZXN0X2l2LCAgOCApOworICAgICAgICBtZW1jcHkoIHBydiwgZGVzM190ZXN0X2l2LCAgOCApOworICAgICAgICBtZW1jcHkoIGJ1ZiwgZGVzM190ZXN0X2J1ZiwgOCApOworCisgICAgICAgIHN3aXRjaCggaSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgbWJlZHRsc19kZXNfc2V0a2V5X2RlYyggJmN0eCwgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzX3NldGtleV9lbmMoICZjdHgsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMoICZjdHgzLCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jKCAmY3R4MywgZGVzM190ZXN0X2tleXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggJmN0eDMsIGRlczNfdGVzdF9rZXlzICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoICZjdHgzLCBkZXMzX3Rlc3Rfa2V5cyApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHYgPT0gTUJFRFRMU19ERVNfREVDUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwMDsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19kZXNfY3J5cHRfY2JjKCAmY3R4LCB2LCA4LCBpdiwgYnVmLCBidWYgKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoICZjdHgzLCB2LCA4LCBpdiwgYnVmLCBidWYgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwMDsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcFs4XTsKKworICAgICAgICAgICAgICAgIGlmKCB1ID09IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2Rlc19jcnlwdF9jYmMoICZjdHgsIHYsIDgsIGl2LCBidWYsIGJ1ZiApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggJmN0eDMsIHYsIDgsIGl2LCBidWYsIGJ1ZiApOworCisgICAgICAgICAgICAgICAgbWVtY3B5KCB0bXAsIHBydiwgOCApOworICAgICAgICAgICAgICAgIG1lbWNweSggcHJ2LCBidWYsIDggKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIGJ1ZiwgdG1wLCA4ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lbWNweSggYnVmLCBwcnYsIDggKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHYgPT0gTUJFRFRMU19ERVNfREVDUllQVCAmJgorICAgICAgICAgICAgICAgIG1lbWNtcCggYnVmLCBkZXMzX3Rlc3RfY2JjX2RlY1t1XSwgOCApICE9IDAgKSB8fAorICAgICAgICAgICAgKCB2ICE9IE1CRURUTFNfREVTX0RFQ1JZUFQgJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoIGJ1ZiwgZGVzM190ZXN0X2NiY19lbmNbdV0sIDggKSAhPSAwICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19kZXNfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmY3R4MyApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kaG0uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2RobS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NzE1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9kaG0uYwpAQCAtMCwwICsxLDYyNyBAQAorLyoKKyAqICBEaWZmaWUtSGVsbG1hbi1NZXJrbGUga2V5IGV4Y2hhbmdlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBmb2xsb3dpbmcgc291cmNlcyB3ZXJlIHJlZmVyZW5jZWQgaW4gdGhlIGRlc2lnbiBvZiB0aGlzIGltcGxlbWVudGF0aW9uCisgKiAgb2YgdGhlIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBhbGdvcml0aG06CisgKgorICogIFsxXSBIYW5kYm9vayBvZiBBcHBsaWVkIENyeXB0b2dyYXBoeSAtIDE5OTcsIENoYXB0ZXIgMTIKKyAqICAgICAgTWVuZXplcywgdmFuIE9vcnNjaG90IGFuZCBWYW5zdG9uZQorICoKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BU04xX1BBUlNFX0MpCisjaW5jbHVkZSAibWJlZHRscy9hc24xLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogaGVscGVyIHRvIHZhbGlkYXRlIHRoZSBtYmVkdGxzX21waSBzaXplIGFuZCBpbXBvcnQgaXQKKyAqLworc3RhdGljIGludCBkaG1fcmVhZF9iaWdudW0oIG1iZWR0bHNfbXBpICpYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCApCit7CisgICAgaW50IHJldCwgbjsKKworICAgIGlmKCBlbmQgLSAqcCA8IDIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQSApOworCisgICAgbiA9ICggKCpwKVswXSA8PCA4ICkgfCAoKnApWzFdOworICAgICgqcCkgKz0gMjsKKworICAgIGlmKCAoaW50KSggZW5kIC0gKnAgKSA8IG4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIFgsICpwLCBuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fUkVBRF9QQVJBTVNfRkFJTEVEICsgcmV0ICk7CisKKyAgICAoKnApICs9IG47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFZlcmlmeSBzYW5pdHkgb2YgcGFyYW1ldGVyIHdpdGggcmVnYXJkcyB0byBQCisgKgorICogUGFyYW1ldGVyIHNob3VsZCBiZTogMiA8PSBwdWJsaWNfcGFyYW0gPD0gUCAtIDIKKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYXR0YWNrLCBzZWU6CisgKiAgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfnJqYTE0L1BhcGVycy9wc2FuZHFzLnBkZgorICogIGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDA1LTI2NDMKKyAqLworc3RhdGljIGludCBkaG1fY2hlY2tfcmFuZ2UoIGNvbnN0IG1iZWR0bHNfbXBpICpwYXJhbSwgY29uc3QgbWJlZHRsc19tcGkgKlAgKQoreworICAgIG1iZWR0bHNfbXBpIEwsIFU7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZMICk7IG1iZWR0bHNfbXBpX2luaXQoICZVICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZMLCAyICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZVLCBQLCAyICkgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCBwYXJhbSwgJkwgKSA+PSAwICYmCisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoIHBhcmFtLCAmVSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMDsKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkwgKTsgbWJlZHRsc19tcGlfZnJlZSggJlUgKTsKKyAgICByZXR1cm4oIHJldCApOworfQorCit2b2lkIG1iZWR0bHNfZGhtX2luaXQoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19kaG1fY29udGV4dCApICk7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgU2VydmVyS2V5RXhjaGFuZ2UgcGFyYW1ldGVycworICovCitpbnQgbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gZGhtX3JlYWRfYmlnbnVtKCAmY3R4LT5QLCAgcCwgZW5kICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gZGhtX3JlYWRfYmlnbnVtKCAmY3R4LT5HLCAgcCwgZW5kICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gZGhtX3JlYWRfYmlnbnVtKCAmY3R4LT5HWSwgcCwgZW5kICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IGRobV9jaGVja19yYW5nZSggJmN0eC0+R1ksICZjdHgtPlAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgY3R4LT5sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmY3R4LT5QICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFNldHVwIGFuZCB3cml0ZSB0aGUgU2VydmVyS2V5RXhjaGFuZ2UgcGFyYW1ldGVycworICovCitpbnQgbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMoIG1iZWR0bHNfZGhtX2NvbnRleHQgKmN0eCwgaW50IHhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQsIGNvdW50ID0gMDsKKyAgICBzaXplX3QgbjEsIG4yLCBuMzsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZjdHgtPlAsIDAgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogR2VuZXJhdGUgWCBhcyBsYXJnZSBhcyBwb3NzaWJsZSAoIDwgUCApCisgICAgICovCisgICAgZG8KKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmY3R4LT5YLCB4X3NpemUsIGZfcm5nLCBwX3JuZyApOworCisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LT5YLCAmY3R4LT5QICkgPj0gMCApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZjdHgtPlgsIDEgKSApOworCisgICAgICAgIGlmKCBjb3VudCsrID4gMTAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fTUFLRV9QQVJBTVNfRkFJTEVEICk7CisgICAgfQorICAgIHdoaWxlKCBkaG1fY2hlY2tfcmFuZ2UoICZjdHgtPlgsICZjdHgtPlAgKSAhPSAwICk7CisKKyAgICAvKgorICAgICAqIENhbGN1bGF0ZSBHWCA9IEdeWCBtb2QgUAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJmN0eC0+R1gsICZjdHgtPkcsICZjdHgtPlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPlAgLCAmY3R4LT5SUCApICk7CisKKyAgICBpZiggKCByZXQgPSBkaG1fY2hlY2tfcmFuZ2UoICZjdHgtPkdYLCAmY3R4LT5QICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qCisgICAgICogZXhwb3J0IFAsIEcsIEdYCisgICAgICovCisjZGVmaW5lIERITV9NUElfRVhQT1JUKFgsbikgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoIFgsIHAgKyAyLCBuICkgKTsgXAorICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIG4gPj4gOCApOyAgICAgICAgICAgXAorICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIG4gICAgICApOyBwICs9IG47CisKKyAgICBuMSA9IG1iZWR0bHNfbXBpX3NpemUoICZjdHgtPlAgICk7CisgICAgbjIgPSBtYmVkdGxzX21waV9zaXplKCAmY3R4LT5HICApOworICAgIG4zID0gbWJlZHRsc19tcGlfc2l6ZSggJmN0eC0+R1ggKTsKKworICAgIHAgPSBvdXRwdXQ7CisgICAgREhNX01QSV9FWFBPUlQoICZjdHgtPlAgLCBuMSApOworICAgIERITV9NUElfRVhQT1JUKCAmY3R4LT5HICwgbjIgKTsKKyAgICBESE1fTVBJX0VYUE9SVCggJmN0eC0+R1gsIG4zICk7CisKKyAgICAqb2xlbiAgPSBwIC0gb3V0cHV0OworCisgICAgY3R4LT5sZW4gPSBuMTsKKworY2xlYW51cDoKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRCArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBJbXBvcnQgdGhlIHBlZXIncyBwdWJsaWMgdmFsdWUgR15ZCisgKi8KK2ludCBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYyggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGlsZW4gPCAxIHx8IGlsZW4gPiBjdHgtPmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmN0eC0+R1ksIGlucHV0LCBpbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fUkVBRF9QVUJMSUNfRkFJTEVEICsgcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENyZWF0ZSBvd24gcHJpdmF0ZSB2YWx1ZSBYIGFuZCBleHBvcnQgR15YCisgKi8KK2ludCBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LCBpbnQgeF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudCA9IDA7CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgb2xlbiA8IDEgfHwgb2xlbiA+IGN0eC0+bGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmY3R4LT5QLCAwICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIGdlbmVyYXRlIFggYW5kIGNhbGN1bGF0ZSBHWCA9IEdeWCBtb2QgUAorICAgICAqLworICAgIGRvCisgICAgeworICAgICAgICBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJmN0eC0+WCwgeF9zaXplLCBmX3JuZywgcF9ybmcgKTsKKworICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC0+WCwgJmN0eC0+UCApID49IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmY3R4LT5YLCAxICkgKTsKKworICAgICAgICBpZiggY291bnQrKyA+IDEwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX01BS0VfUFVCTElDX0ZBSUxFRCApOworICAgIH0KKyAgICB3aGlsZSggZGhtX2NoZWNrX3JhbmdlKCAmY3R4LT5YLCAmY3R4LT5QICkgIT0gMCApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9leHBfbW9kKCAmY3R4LT5HWCwgJmN0eC0+RywgJmN0eC0+WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+UCAsICZjdHgtPlJQICkgKTsKKworICAgIGlmKCAoIHJldCA9IGRobV9jaGVja19yYW5nZSggJmN0eC0+R1gsICZjdHgtPlAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZjdHgtPkdYLCBvdXRwdXQsIG9sZW4gKSApOworCitjbGVhbnVwOgorCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ESE1fTUFLRV9QVUJMSUNfRkFJTEVEICsgcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFVzZSB0aGUgYmxpbmRpbmcgbWV0aG9kIGFuZCBvcHRpbWlzYXRpb24gc3VnZ2VzdGVkIGluIHNlY3Rpb24gMTAgb2Y6CisgKiAgS09DSEVSLCBQYXVsIEMuIFRpbWluZyBhdHRhY2tzIG9uIGltcGxlbWVudGF0aW9ucyBvZiBEaWZmaWUtSGVsbG1hbiwgUlNBLAorICogIERTUywgYW5kIG90aGVyIHN5c3RlbXMuIEluIDogQWR2YW5jZXMgaW4gQ3J5cHRvbG9neS1DUllQVE8nOTYuIFNwcmluZ2VyCisgKiAgQmVybGluIEhlaWRlbGJlcmcsIDE5OTYuIHAuIDEwNC0xMTMuCisgKi8KK3N0YXRpYyBpbnQgZGhtX3VwZGF0ZV9ibGluZGluZyggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudDsKKworICAgIC8qCisgICAgICogRG9uJ3QgdXNlIGFueSBibGluZGluZyB0aGUgZmlyc3QgdGltZSBhIHBhcnRpY3VsYXIgWCBpcyB1c2VkLAorICAgICAqIGJ1dCByZW1lbWJlciBpdCB0byB1c2UgYmxpbmRpbmcgbmV4dCB0aW1lLgorICAgICAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LT5YLCAmY3R4LT5wWCApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmY3R4LT5wWCwgJmN0eC0+WCApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJmN0eC0+VmksIDEgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZjdHgtPlZmLCAxICkgKTsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE9rLCB3ZSBuZWVkIGJsaW5kaW5nLiBDYW4gd2UgcmUtdXNlIGV4aXN0aW5nIHZhbHVlcz8KKyAgICAgKiBJZiB5ZXMsIGp1c3QgdXBkYXRlIHRoZW0gYnkgc3F1YXJpbmcgdGhlbS4KKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJmN0eC0+VmksIDEgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5WaSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5QICkgKTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZjdHgtPlZmLCAmY3R4LT5WZiwgJmN0eC0+VmYgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHgtPlZmLCAmY3R4LT5WZiwgJmN0eC0+UCApICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRvIGdlbmVyYXRlIGJsaW5kaW5nIHZhbHVlcyBmcm9tIHNjcmF0Y2gKKyAgICAgKi8KKworICAgIC8qIFZpID0gcmFuZG9tKCAyLCBQLTEgKSAqLworICAgIGNvdW50ID0gMDsKKyAgICBkbworICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZjdHgtPlZpLCBtYmVkdGxzX21waV9zaXplKCAmY3R4LT5QICksIGZfcm5nLCBwX3JuZyApOworCisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LT5WaSwgJmN0eC0+UCApID49IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmY3R4LT5WaSwgMSApICk7CisKKyAgICAgICAgaWYoIGNvdW50KysgPiAxMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRSApOworICAgIH0KKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJmN0eC0+VmksIDEgKSA8PSAwICk7CisKKyAgICAvKiBWZiA9IFZpXi1YIG1vZCBQICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LT5WZiwgJmN0eC0+VmksICZjdHgtPlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJmN0eC0+VmYsICZjdHgtPlZmLCAmY3R4LT5YLCAmY3R4LT5QLCAmY3R4LT5SUCApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIERlcml2ZSBhbmQgZXhwb3J0IHRoZSBzaGFyZWQgc2VjcmV0IChHXlkpXlggbW9kIFAKKyAqLworaW50IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgR1liOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IG91dHB1dF9zaXplIDwgY3R4LT5sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gZGhtX2NoZWNrX3JhbmdlKCAmY3R4LT5HWSwgJmN0eC0+UCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmR1liICk7CisKKyAgICAvKiBCbGluZCBwZWVyJ3MgdmFsdWUgKi8KKyAgICBpZiggZl9ybmcgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGRobV91cGRhdGVfYmxpbmRpbmcoIGN0eCwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmR1liLCAmY3R4LT5HWSwgJmN0eC0+VmkgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZHWWIsICZHWWIsICZjdHgtPlAgKSApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJkdZYiwgJmN0eC0+R1kgKSApOworCisgICAgLyogRG8gbW9kdWxhciBleHBvbmVudGlhdGlvbiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJmN0eC0+SywgJkdZYiwgJmN0eC0+WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+UCwgJmN0eC0+UlAgKSApOworCisgICAgLyogVW5ibGluZCBzZWNyZXQgdmFsdWUgKi8KKyAgICBpZiggZl9ybmcgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZjdHgtPkssICZjdHgtPkssICZjdHgtPlZmICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5LLCAmY3R4LT5LLCAmY3R4LT5QICkgKTsKKyAgICB9CisKKyAgICAqb2xlbiA9IG1iZWR0bHNfbXBpX3NpemUoICZjdHgtPksgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmY3R4LT5LLCBvdXRwdXQsICpvbGVuICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmR1liICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9DQUxDX1NFQ1JFVF9GQUlMRUQgKyByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRnJlZSB0aGUgY29tcG9uZW50cyBvZiBhIERITSBrZXkKKyAqLwordm9pZCBtYmVkdGxzX2RobV9mcmVlKCBtYmVkdGxzX2RobV9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPnBYKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+VmYgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+VmkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5SUCApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5LICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPkdZICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+R1ggKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+WCApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5HICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+UCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19kaG1fY29udGV4dCApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVNOMV9QQVJTRV9DKQorLyoKKyAqIFBhcnNlIERITSBwYXJhbWV0ZXJzCisgKi8KK2ludCBtYmVkdGxzX2RobV9wYXJzZV9kaG0oIG1iZWR0bHNfZGhtX2NvbnRleHQgKmRobSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGhtaW4sCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRobWlubGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgbWJlZHRsc19wZW1fY29udGV4dCBwZW07CisKKyAgICBtYmVkdGxzX3BlbV9pbml0KCAmcGVtICk7CisKKyAgICAvKiBBdm9pZCBjYWxsaW5nIG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCkgb24gbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmcgKi8KKyAgICBpZiggZGhtaW5sZW4gPT0gMCB8fCBkaG1pbltkaG1pbmxlbiAtIDFdICE9ICdcMCcgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoICZwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaG1pbiwgTlVMTCwgMCwgJmRobWlubGVuICk7CisKKyAgICBpZiggcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2FzIFBFTSBlbmNvZGVkCisgICAgICAgICAqLworICAgICAgICBkaG1pbmxlbiA9IHBlbS5idWZsZW47CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcCA9ICggcmV0ID09IDAgKSA/IHBlbS5idWYgOiAodW5zaWduZWQgY2hhciAqKSBkaG1pbjsKKyNlbHNlCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIGRobWluOworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KKyAgICBlbmQgPSBwICsgZGhtaW5sZW47CisKKyAgICAvKgorICAgICAqICBESFBhcmFtcyA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgICAgcHJpbWUgICAgICAgICAgICAgIElOVEVHRVIsICAtLSBQCisgICAgICogICAgICBnZW5lcmF0b3IgICAgICAgICAgSU5URUdFUiwgIC0tIGcKKyAgICAgKiAgICAgIHByaXZhdGVWYWx1ZUxlbmd0aCBJTlRFR0VSIE9QVElPTkFMCisgICAgICogIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ESE1fSU5WQUxJRF9GT1JNQVQgKyByZXQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBlbmQgPSBwICsgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZkaG0tPlAgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoICZwLCBlbmQsICZkaG0tPkcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfREhNX0lOVkFMSURfRk9STUFUICsgcmV0OworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIC8qIFRoaXMgbWlnaHQgYmUgdGhlIG9wdGlvbmFsIHByaXZhdGVWYWx1ZUxlbmd0aC4KKyAgICAgICAgICogSWYgc28sIHdlIGNhbiBjbGVhbmx5IGRpc2NhcmQgaXQgKi8KKyAgICAgICAgbWJlZHRsc19tcGkgcmVjOworICAgICAgICBtYmVkdGxzX21waV9pbml0KCAmcmVjICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCAmcCwgZW5kLCAmcmVjICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZyZWMgKTsKKyAgICAgICAgaWYgKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVCArIHJldDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHAgIT0gZW5kICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfREhNX0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSDsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IDA7CisKKyAgICBkaG0tPmxlbiA9IG1iZWR0bHNfbXBpX3NpemUoICZkaG0tPlAgKTsKKworZXhpdDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworI2VuZGlmCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgbWJlZHRsc19kaG1fZnJlZSggZGhtICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoKKyAqIExvYWQgYWxsIGRhdGEgZnJvbSBhIGZpbGUgaW50byBhIGdpdmVuIGJ1ZmZlci4KKyAqCisgKiBUaGUgZmlsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGVpdGhlciBQRU0gb3IgREVSIGVuY29kZWQgZGF0YS4KKyAqIEEgdGVybWluYXRpbmcgbnVsbCBieXRlIGlzIGFsd2F5cyBhcHBlbmRlZC4gSXQgaXMgaW5jbHVkZWQgaW4gdGhlIGFubm91bmNlZAorICogbGVuZ3RoIG9ubHkgaWYgdGhlIGRhdGEgbG9va3MgbGlrZSBpdCBpcyBQRU0gZW5jb2RlZC4KKyAqLworc3RhdGljIGludCBsb2FkX2ZpbGUoIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCAqbiApCit7CisgICAgRklMRSAqZjsKKyAgICBsb25nIHNpemU7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9GSUxFX0lPX0VSUk9SICk7CisKKyAgICBmc2VlayggZiwgMCwgU0VFS19FTkQgKTsKKyAgICBpZiggKCBzaXplID0gZnRlbGwoIGYgKSApID09IC0xICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0RITV9GSUxFX0lPX0VSUk9SICk7CisgICAgfQorICAgIGZzZWVrKCBmLCAwLCBTRUVLX1NFVCApOworCisgICAgKm4gPSAoc2l6ZV90KSBzaXplOworCisgICAgaWYoICpuICsgMSA9PSAwIHx8CisgICAgICAgICggKmJ1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCAqbiArIDEgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIGlmKCBmcmVhZCggKmJ1ZiwgMSwgKm4sIGYgKSAhPSAqbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCAqYnVmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfREhNX0ZJTEVfSU9fRVJST1IgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgICgqYnVmKVsqbl0gPSAnXDAnOworCisgICAgaWYoIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgKmJ1ZiwgIi0tLS0tQkVHSU4gIiApICE9IE5VTEwgKQorICAgICAgICArKypuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBMb2FkIGFuZCBwYXJzZSBESE0gcGFyYW1ldGVycworICovCitpbnQgbWJlZHRsc19kaG1fcGFyc2VfZGhtZmlsZSggbWJlZHRsc19kaG1fY29udGV4dCAqZGhtLCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworICAgIGlmKCAoIHJldCA9IGxvYWRfZmlsZSggcGF0aCwgJmJ1ZiwgJm4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19kaG1fcGFyc2VfZGhtKCBkaG0sIGJ1ZiwgbiApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBidWYsIG4gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisjZW5kaWYgLyogTUJFRFRMU19BU04xX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKK3N0YXRpYyBjb25zdCBjaGFyIG1iZWR0bHNfdGVzdF9kaG1fcGFyYW1zW10gPQorIi0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tXHJcbiIKKyJNSUdIQW9HQkFKNDE5REJFT2dtUVR6bzVxWGw1ZlFjTjlUTjQ1NXdrT0w3MDUySHp4eFJWTXloWW13UWNnSnZoXHJcbiIKKyIxc2ExOGZ5ZlI5T2lWRU1ZZ2xPcGtxVm9HTE43cWQ1YVFOTmk1VzcvQytWQmRIVEJKY0daSnl5UDVCM3FjejMyXHJcbiIKKyI5bUxKS3VkbFZ1ZFYwUXhrNXFVSmFQWi94dXB6ME55b1Zwdml1aUJPSTFnTmk4b3ZTWFd6QWdFQ1xyXG4iCisiLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tXHJcbiI7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWJlZHRsc190ZXN0X2RobV9wYXJhbXNfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3Rlc3RfZGhtX3BhcmFtcyApOworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX2RobV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtOworCisgICAgbWJlZHRsc19kaG1faW5pdCggJmRobSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBESE0gcGFyYW1ldGVyIGxvYWQ6ICIgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX3BhcnNlX2RobSggJmRobSwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2RobV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9kaG1fcGFyYW1zX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19kaG1fZnJlZSggJmRobSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0RITV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2RoLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY2RoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhODE0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjZGguYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqICBFbGxpcHRpYyBjdXJ2ZSBEaWZmaWUtSGVsbG1hbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogUmVmZXJlbmNlczoKKyAqCisgKiBTRUMxIGh0dHA6Ly93d3cuc2VjZy5vcmcvaW5kZXgucGhwP2FjdGlvbj1zZWNnLGRvY3Nfc2VjZworICogUkZDIDQ0OTIKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZWNkaC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBHZW5lcmF0ZSBwdWJsaWMga2V5OiBzaW1wbGUgd3JhcHBlciBhcm91bmQgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIKKyAqLworaW50IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqZCwgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCBncnAsIGQsIFEsIGZfcm5nLCBwX3JuZyApOworfQorCisvKgorICogQ29tcHV0ZSBzaGFyZWQgc2VjcmV0IChTRUMxIDMuMy4xKQorICovCitpbnQgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSwgY29uc3QgbWJlZHRsc19tcGkgKmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX3BvaW50IFA7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUCApOworCisgICAgLyoKKyAgICAgKiBNYWtlIHN1cmUgUSBpcyBhIHZhbGlkIHB1YmtleSBiZWZvcmUgdXNpbmcgaXQKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggZ3JwLCBRICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsKCBncnAsICZQLCBkLCBRLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgaWYoIG1iZWR0bHNfZWNwX2lzX3plcm8oICZQICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCB6LCAmUC5YICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfZWNkaF9pbml0KCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2VjZGhfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBGcmVlIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX2VjZGhfZnJlZSggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmN0eC0+Z3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+USAgICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+UXAgICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+VmkgICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmN0eC0+VmYgICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+ZCAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT56ICApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPl9kICk7Cit9CisKKy8qCisgKiBTZXR1cCBhbmQgd3JpdGUgdGhlIFNlcnZlcktleUV4aGFuZ2UgcGFyYW1ldGVycyAoUkZDIDQ0OTIpCisgKiAgICAgIHN0cnVjdCB7CisgKiAgICAgICAgICBFQ1BhcmFtZXRlcnMgICAgY3VydmVfcGFyYW1zOworICogICAgICAgICAgRUNQb2ludCAgICAgICAgIHB1YmxpYzsKKyAqICAgICAgfSBTZXJ2ZXJFQ0RIUGFyYW1zOworICovCitpbnQgbWJlZHRsc19lY2RoX21ha2VfcGFyYW1zKCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGdycF9sZW4sIHB0X2xlbjsKKworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPmdycC5wYml0cyA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmY3R4LT5ncnAsICZjdHgtPmQsICZjdHgtPlEsIGZfcm5nLCBwX3JuZyApICkKKyAgICAgICAgICAgICAgICAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3Rsc193cml0ZV9ncm91cCggJmN0eC0+Z3JwLCAmZ3JwX2xlbiwgYnVmLCBibGVuICkgKQorICAgICAgICAgICAgICAgICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgYnVmICs9IGdycF9sZW47CisgICAgYmxlbiAtPSBncnBfbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50KCAmY3R4LT5ncnAsICZjdHgtPlEsIGN0eC0+cG9pbnRfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdF9sZW4sIGJ1ZiwgYmxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAqb2xlbiA9IGdycF9sZW4gKyBwdF9sZW47CisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBTZXJ2ZXJLZXlFeGhhbmdlIHBhcmFtZXRlcnMgKFJGQyA0NDkyKQorICogICAgICBzdHJ1Y3QgeworICogICAgICAgICAgRUNQYXJhbWV0ZXJzICAgIGN1cnZlX3BhcmFtczsKKyAqICAgICAgICAgIEVDUG9pbnQgICAgICAgICBwdWJsaWM7CisgKiAgICAgIH0gU2VydmVyRUNESFBhcmFtczsKKyAqLworaW50IG1iZWR0bHNfZWNkaF9yZWFkX3BhcmFtcyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cCggJmN0eC0+Z3JwLCBidWYsIGVuZCAtICpidWYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoICZjdHgtPmdycCwgJmN0eC0+UXAsIGJ1ZiwgZW5kIC0gKmJ1ZiApICkKKyAgICAgICAgICAgICAgICAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogR2V0IHBhcmFtZXRlcnMgZnJvbSBhIGtleXBhaXIKKyAqLworaW50IG1iZWR0bHNfZWNkaF9nZXRfcGFyYW1zKCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LCBjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICprZXksCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfc2lkZSBzaWRlICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfZ3JvdXBfY29weSggJmN0eC0+Z3JwLCAma2V5LT5ncnAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgLyogSWYgaXQncyBub3Qgb3VyIGtleSwganVzdCBpbXBvcnQgdGhlIHB1YmxpYyBwYXJ0IGFzIFFwICovCisgICAgaWYoIHNpZGUgPT0gTUJFRFRMU19FQ0RIX1RIRUlSUyApCisgICAgICAgIHJldHVybiggbWJlZHRsc19lY3BfY29weSggJmN0eC0+UXAsICZrZXktPlEgKSApOworCisgICAgLyogT3VyIGtleTogaW1wb3J0IHB1YmxpYyAoYXMgUSkgYW5kIHByaXZhdGUgcGFydHMgKi8KKyAgICBpZiggc2lkZSAhPSBNQkVEVExTX0VDREhfT1VSUyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9jb3B5KCAmY3R4LT5RLCAma2V5LT5RICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfY29weSggJmN0eC0+ZCwgJmtleS0+ZCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFNldHVwIGFuZCBleHBvcnQgdGhlIGNsaWVudCBwdWJsaWMgdmFsdWUKKyAqLworaW50IG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+Z3JwLnBiaXRzID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZjdHgtPmdycCwgJmN0eC0+ZCwgJmN0eC0+USwgZl9ybmcsIHBfcm5nICkgKQorICAgICAgICAgICAgICAgICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggJmN0eC0+Z3JwLCAmY3R4LT5RLCBjdHgtPnBvaW50X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlbiwgYnVmLCBibGVuICk7Cit9CisKKy8qCisgKiBQYXJzZSBhbmQgaW1wb3J0IHRoZSBjbGllbnQncyBwdWJsaWMgdmFsdWUKKyAqLworaW50IG1iZWR0bHNfZWNkaF9yZWFkX3B1YmxpYyggbWJlZHRsc19lY2RoX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoICZjdHgtPmdycCwgJmN0eC0+UXAsICZwLCBibGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoc2l6ZV90KSggcCAtIGJ1ZiApICE9IGJsZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBEZXJpdmUgYW5kIGV4cG9ydCB0aGUgc2hhcmVkIHNlY3JldAorICovCitpbnQgbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCBtYmVkdGxzX2VjZGhfY29udGV4dCAqY3R4LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkKCAmY3R4LT5ncnAsICZjdHgtPnosICZjdHgtPlFwLCAmY3R4LT5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfcm5nLCBwX3JuZyApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBtYmVkdGxzX21waV9zaXplKCAmY3R4LT56ICkgPiBibGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICpvbGVuID0gY3R4LT5ncnAucGJpdHMgLyA4ICsgKCAoIGN0eC0+Z3JwLnBiaXRzICUgOCApICE9IDAgKTsKKyAgICByZXR1cm4gbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmY3R4LT56LCBidWYsICpvbGVuICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0VDREhfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNkc2EuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjZHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1NmYzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjZHNhLmMKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiAgRWxsaXB0aWMgY3VydmUgRFNBCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBSZWZlcmVuY2VzOgorICoKKyAqIFNFQzEgaHR0cDovL3d3dy5zZWNnLm9yZy9pbmRleC5waHA/YWN0aW9uPXNlY2csZG9jc19zZWNnCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9lY2RzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMXdyaXRlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorI2luY2x1ZGUgIm1iZWR0bHMvaG1hY19kcmJnLmgiCisjZW5kaWYKKworLyoKKyAqIERlcml2ZSBhIHN1aXRhYmxlIGludGVnZXIgZm9yIGdyb3VwIGdycCBmcm9tIGEgYnVmZmVyIG9mIGxlbmd0aCBsZW4KKyAqIFNFQzEgNC4xLjMgc3RlcCA1IGFrYSBTRUMxIDQuMS40IHN0ZXAgMworICovCitzdGF0aWMgaW50IGRlcml2ZV9tcGkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfbXBpICp4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuX3NpemUgPSAoIGdycC0+bmJpdHMgKyA3ICkgLyA4OworICAgIHNpemVfdCB1c2Vfc2l6ZSA9IGJsZW4gPiBuX3NpemUgPyBuX3NpemUgOiBibGVuOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggeCwgYnVmLCB1c2Vfc2l6ZSApICk7CisgICAgaWYoIHVzZV9zaXplICogOCA+IGdycC0+bmJpdHMgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoIHgsIHVzZV9zaXplICogOCAtIGdycC0+bmJpdHMgKSApOworCisgICAgLyogV2hpbGUgYXQgaXQsIHJlZHVjZSBtb2R1bG8gTiAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCB4LCAmZ3JwLT5OICkgPj0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggeCwgeCwgJmdycC0+TiApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENvbXB1dGUgRUNEU0Egc2lnbmF0dXJlIG9mIGEgaGFzaGVkIG1lc3NhZ2UgKFNFQzEgNC4xLjMpCisgKiBPYnZpb3VzbHksIGNvbXBhcmVkIHRvIFNFQzEgNC4xLjMsIHdlIHNraXAgc3RlcCA0IChoYXNoIG1lc3NhZ2UpCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3NpZ24oIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfbXBpICpyLCBtYmVkdGxzX21waSAqcywKKyAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBrZXlfdHJpZXMsIHNpZ25fdHJpZXMsIGJsaW5kX3RyaWVzOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFI7CisgICAgbWJlZHRsc19tcGkgaywgZSwgdDsKKworICAgIC8qIEZhaWwgY2xlYW5seSBvbiBjdXJ2ZXMgc3VjaCBhcyBDdXJ2ZTI1NTE5IHRoYXQgY2FuJ3QgYmUgdXNlZCBmb3IgRUNEU0EgKi8KKyAgICBpZiggZ3JwLT5OLnAgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZrICk7IG1iZWR0bHNfbXBpX2luaXQoICZlICk7IG1iZWR0bHNfbXBpX2luaXQoICZ0ICk7CisKKyAgICBzaWduX3RyaWVzID0gMDsKKyAgICBkbworICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RlcHMgMS0zOiBnZW5lcmF0ZSBhIHN1aXRhYmxlIGVwaGVtZXJhbCBrZXlwYWlyCisgICAgICAgICAqIGFuZCBzZXQgciA9IHhSIG1vZCBuCisgICAgICAgICAqLworICAgICAgICBrZXlfdHJpZXMgPSAwOworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCBncnAsICZrLCAmUiwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggciwgJlIuWCwgJmdycC0+TiApICk7CisKKyAgICAgICAgICAgIGlmKCBrZXlfdHJpZXMrKyA+IDEwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRDsKKyAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIHIsIDAgKSA9PSAwICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU3RlcCA1OiBkZXJpdmUgTVBJIGZyb20gaGFzaGVkIG1lc3NhZ2UKKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggZGVyaXZlX21waSggZ3JwLCAmZSwgYnVmLCBibGVuICkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBHZW5lcmF0ZSBhIHJhbmRvbSB2YWx1ZSB0byBibGluZCBpbnZfbW9kIGluIG5leHQgc3RlcCwKKyAgICAgICAgICogYXZvaWRpbmcgYSBwb3RlbnRpYWwgdGltaW5nIGxlYWsuCisgICAgICAgICAqLworICAgICAgICBibGluZF90cmllcyA9IDA7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBuX3NpemUgPSAoIGdycC0+bmJpdHMgKyA3ICkgLyA4OworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJnQsIG5fc2l6ZSwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJnQsIDggKiBuX3NpemUgLSBncnAtPm5iaXRzICkgKTsKKworICAgICAgICAgICAgLyogU2VlIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCkgKi8KKyAgICAgICAgICAgIGlmKCArK2JsaW5kX3RyaWVzID4gMzAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX1JBTkRPTV9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJnQsIDEgKSA8IDAgfHwKKyAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZ0LCAmZ3JwLT5OICkgPj0gMCApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFN0ZXAgNjogY29tcHV0ZSBzID0gKGUgKyByICogZCkgLyBrID0gdCAoZSArIHJkKSAvIChrdCkgbW9kIG4KKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggcywgciwgZCApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfYWRkX21waSggJmUsICZlLCBzICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmZSwgJmUsICZ0ICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmaywgJmssICZ0ICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCBzLCAmaywgJmdycC0+TiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggcywgcywgJmUgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoIHMsIHMsICZncnAtPk4gKSApOworCisgICAgICAgIGlmKCBzaWduX3RyaWVzKysgPiAxMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVEOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCBzLCAwICkgPT0gMCApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZSICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmsgKTsgbWJlZHRsc19tcGlfZnJlZSggJmUgKTsgbWJlZHRsc19tcGlfZnJlZSggJnQgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQykKKy8qCisgKiBEZXRlcm1pbmlzdGljIHNpZ25hdHVyZSB3cmFwcGVyCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3NpZ25fZGV0KCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX21waSAqciwgbWJlZHRsc19tcGkgKnMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICpkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBibGVuLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBybmdfY3R4OworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsyICogTUJFRFRMU19FQ1BfTUFYX0JZVEVTXTsKKyAgICBzaXplX3QgZ3JwX2xlbiA9ICggZ3JwLT5uYml0cyArIDcgKSAvIDg7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19tcGkgaDsKKworICAgIGlmKCAoIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJmggKTsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmcm5nX2N0eCApOworCisgICAgLyogVXNlIHByaXZhdGUga2V5IGFuZCBtZXNzYWdlIGhhc2ggKHJlZHVjZWQpIHRvIGluaXRpYWxpemUgSE1BQ19EUkJHICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoIGQsIGRhdGEsIGdycF9sZW4gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZGVyaXZlX21waSggZ3JwLCAmaCwgYnVmLCBibGVuICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJmgsIGRhdGEgKyBncnBfbGVuLCBncnBfbGVuICkgKTsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19zZWVkX2J1ZiggJnJuZ19jdHgsIG1kX2luZm8sIGRhdGEsIDIgKiBncnBfbGVuICk7CisKKyAgICByZXQgPSBtYmVkdGxzX2VjZHNhX3NpZ24oIGdycCwgciwgcywgZCwgYnVmLCBibGVuLAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSwgJnJuZ19jdHggKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmcm5nX2N0eCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZoICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQyAqLworCisvKgorICogVmVyaWZ5IEVDRFNBIHNpZ25hdHVyZSBvZiBoYXNoZWQgbWVzc2FnZSAoU0VDMSA0LjEuNCkKKyAqIE9idmlvdXNseSwgY29tcGFyZWQgdG8gU0VDMSA0LjEuMywgd2Ugc2tpcCBzdGVwIDIgKGhhc2ggbWVzc2FnZSkKKyAqLworaW50IG1iZWR0bHNfZWNkc2FfdmVyaWZ5KCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpRLCBjb25zdCBtYmVkdGxzX21waSAqciwgY29uc3QgbWJlZHRsc19tcGkgKnMpCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBlLCBzX2ludiwgdTEsIHUyOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFI7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZlICk7IG1iZWR0bHNfbXBpX2luaXQoICZzX2ludiApOyBtYmVkdGxzX21waV9pbml0KCAmdTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJnUyICk7CisKKyAgICAvKiBGYWlsIGNsZWFubHkgb24gY3VydmVzIHN1Y2ggYXMgQ3VydmUyNTUxOSB0aGF0IGNhbid0IGJlIHVzZWQgZm9yIEVDRFNBICovCisgICAgaWYoIGdycC0+Ti5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBTdGVwIDE6IG1ha2Ugc3VyZSByIGFuZCBzIGFyZSBpbiByYW5nZSAxLi5uLTEKKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggciwgMSApIDwgMCB8fCBtYmVkdGxzX21waV9jbXBfbXBpKCByLCAmZ3JwLT5OICkgPj0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCBzLCAxICkgPCAwIHx8IG1iZWR0bHNfbXBpX2NtcF9tcGkoIHMsICZncnAtPk4gKSA+PSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVEOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBZGRpdGlvbmFsIHByZWNhdXRpb246IG1ha2Ugc3VyZSBRIGlzIHZhbGlkCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoIGdycCwgUSApICk7CisKKyAgICAvKgorICAgICAqIFN0ZXAgMzogZGVyaXZlIE1QSSBmcm9tIGhhc2hlZCBtZXNzYWdlCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBkZXJpdmVfbXBpKCBncnAsICZlLCBidWYsIGJsZW4gKSApOworCisgICAgLyoKKyAgICAgKiBTdGVwIDQ6IHUxID0gZSAvIHMgbW9kIG4sIHUyID0gciAvIHMgbW9kIG4KKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZzX2ludiwgcywgJmdycC0+TiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZ1MSwgJmUsICZzX2ludiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmdTEsICZ1MSwgJmdycC0+TiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZ1MiwgciwgJnNfaW52ICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZ1MiwgJnUyLCAmZ3JwLT5OICkgKTsKKworICAgIC8qCisgICAgICogU3RlcCA1OiBSID0gdTEgRyArIHUyIFEKKyAgICAgKgorICAgICAqIFNpbmNlIHdlJ3JlIG5vdCB1c2luZyBhbnkgc2VjcmV0IGRhdGEsIG5vIG5lZWQgdG8gcGFzcyBhIFJORyB0bworICAgICAqIG1iZWR0bHNfZWNwX211bCgpIGZvciBjb3VudGVybWVzdXJlcy4KKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bGFkZCggZ3JwLCAmUiwgJnUxLCAmZ3JwLT5HLCAmdTIsIFEgKSApOworCisgICAgaWYoIG1iZWR0bHNfZWNwX2lzX3plcm8oICZSICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFN0ZXAgNjogY29udmVydCB4UiB0byBhbiBpbnRlZ2VyIChuby1vcCkKKyAgICAgKiBTdGVwIDc6IHJlZHVjZSB4UiBtb2QgbiAoZ2l2ZXMgdikKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZSLlgsICZSLlgsICZncnAtPk4gKSApOworCisgICAgLyoKKyAgICAgKiBTdGVwIDg6IGNoZWNrIGlmIHYgKHRoYXQgaXMsIFIuWCkgaXMgZXF1YWwgdG8gcgorICAgICAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCByICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRDsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZlICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZzX2ludiApOyBtYmVkdGxzX21waV9mcmVlKCAmdTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJnUyICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ29udmVydCBhIHNpZ25hdHVyZSAoZ2l2ZW4gYnkgY29udGV4dCkgdG8gQVNOLjEKKyAqLworc3RhdGljIGludCBlY2RzYV9zaWduYXR1cmVfdG9fYXNuMSggY29uc3QgbWJlZHRsc19tcGkgKnIsIGNvbnN0IG1iZWR0bHNfbXBpICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNsZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FQ0RTQV9NQVhfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmICsgc2l6ZW9mKCBidWYgKTsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZwLCBidWYsIHMgKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZwLCBidWYsIHIgKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJnAsIGJ1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmcCwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIG1lbWNweSggc2lnLCBwLCBsZW4gKTsKKyAgICAqc2xlbiA9IGxlbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ29tcHV0ZSBhbmQgd3JpdGUgc2lnbmF0dXJlCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSByLCBzOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJnIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmcyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisgICAgKHZvaWQpIGZfcm5nOworICAgICh2b2lkKSBwX3JuZzsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY2RzYV9zaWduX2RldCggJmN0eC0+Z3JwLCAmciwgJnMsICZjdHgtPmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIGhsZW4sIG1kX2FsZyApICk7CisjZWxzZQorICAgICh2b2lkKSBtZF9hbGc7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNkc2Ffc2lnbiggJmN0eC0+Z3JwLCAmciwgJnMsICZjdHgtPmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGxlbiwgZl9ybmcsIHBfcm5nICkgKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2RzYV9zaWduYXR1cmVfdG9fYXNuMSggJnIsICZzLCBzaWcsIHNsZW4gKSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZyICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnMgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNpZiAhIGRlZmluZWQoTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQykKK2ludCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZV9kZXQoIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggY3R4LCBtZF9hbGcsIGhhc2gsIGhsZW4sIHNpZywgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCApICk7Cit9CisjZW5kaWYKKworLyoKKyAqIFJlYWQgYW5kIGNoZWNrIHNpZ25hdHVyZQorICovCitpbnQgbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBzaWc7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc2lnICsgc2xlbjsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfbXBpIHIsIHM7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmciApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZzICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCArPSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggcCArIGxlbiAhPSBlbmQgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICsKKyAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0g7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnIgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ICs9IE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkc2FfdmVyaWZ5KCAmY3R4LT5ncnAsIGhhc2gsIGhsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5RLCAmciwgJnMgKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSDsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmciApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogR2VuZXJhdGUga2V5IHBhaXIKKyAqLworaW50IG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCwgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ2lkLAorICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmY3R4LT5ncnAsIGdpZCApIHx8CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpciggJmN0eC0+Z3JwLCAmY3R4LT5kLCAmY3R4LT5RLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogU2V0IGNvbnRleHQgZnJvbSBhbiBtYmVkdGxzX2VjcF9rZXlwYWlyCisgKi8KK2ludCBtYmVkdGxzX2VjZHNhX2Zyb21fa2V5cGFpciggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHgsIGNvbnN0IG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2NvcHkoICZjdHgtPmdycCwgJmtleS0+Z3JwICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfY29weSggJmN0eC0+ZCwgJmtleS0+ZCApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfZWNwX2NvcHkoICZjdHgtPlEsICZrZXktPlEgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY2RzYV9mcmVlKCBjdHggKTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19lY2RzYV9pbml0KCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKmN0eCApCit7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCBjdHggKTsKK30KKworLyoKKyAqIEZyZWUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfZWNkc2FfZnJlZSggbWJlZHRsc19lY2RzYV9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggY3R4ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjanBha2UuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VjanBha2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmExYzJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNqcGFrZS5jCkBAIC0wLDAgKzEsMTEwMyBAQAorLyoKKyAqICBFbGxpcHRpYyBjdXJ2ZSBKLVBBS0UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqIFJlZmVyZW5jZXMgaW4gdGhlIGNvZGUgYXJlIHRvIHRoZSBUaHJlYWQgdjEuMCBTcGVjaWZpY2F0aW9uLAorICogYXZhaWxhYmxlIHRvIG1lbWJlcnMgb2YgdGhlIFRocmVhZCBHcm91cCBodHRwOi8vdGhyZWFkZ3JvdXAub3JnLworICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNKUEFLRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9lY2pwYWtlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIENvbnZlcnQgYSBtYmVkdGxzX2VjanBha2Vfcm9sZSB0byBpZGVudGlmaWVyIHN0cmluZworICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVjanBha2VfaWRbXSA9IHsKKyAgICAiY2xpZW50IiwKKyAgICAic2VydmVyIgorfTsKKworI2RlZmluZSBJRF9NSU5FICAgICAoIGVjanBha2VfaWRbIGN0eC0+cm9sZSBdICkKKyNkZWZpbmUgSURfUEVFUiAgICAgKCBlY2pwYWtlX2lkWyAxIC0gY3R4LT5yb2xlIF0gKQorCisvKgorICogSW5pdGlhbGl6ZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19lY2pwYWtlX2luaXQoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGN0eC0+bWRfaW5mbyA9IE5VTEw7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmN0eC0+Z3JwICk7CisgICAgY3R4LT5wb2ludF9mb3JtYXQgPSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQ7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmY3R4LT5YbTEgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmY3R4LT5YbTIgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmY3R4LT5YcDEgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmY3R4LT5YcDIgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmY3R4LT5YcCAgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZjdHgtPnhtMSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZjdHgtPnhtMiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZjdHgtPnMgICApOworfQorCisvKgorICogRnJlZSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19lY2pwYWtlX2ZyZWUoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGN0eC0+bWRfaW5mbyA9IE5VTEw7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmN0eC0+Z3JwICk7CisKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmY3R4LT5YbTEgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmY3R4LT5YbTIgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmY3R4LT5YcDEgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmY3R4LT5YcDIgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmY3R4LT5YcCAgKTsKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPnhtMSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPnhtMiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPnMgICApOworfQorCisvKgorICogU2V0dXAgY29udGV4dAorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3NldHVwKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY2pwYWtlX3JvbGUgcm9sZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBjdXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyAgICBjdHgtPnJvbGUgPSByb2xlOworCisgICAgaWYoICggY3R4LT5tZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggaGFzaCApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmY3R4LT5ncnAsIGN1cnZlICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZjdHgtPnMsIHNlY3JldCwgbGVuICkgKTsKKworY2xlYW51cDoKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICBtYmVkdGxzX2VjanBha2VfZnJlZSggY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ2hlY2sgaWYgY29udGV4dCBpcyByZWFkeSBmb3IgdXNlCisgKi8KK2ludCBtYmVkdGxzX2VjanBha2VfY2hlY2soIGNvbnN0IG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHgtPm1kX2luZm8gPT0gTlVMTCB8fAorICAgICAgICBjdHgtPmdycC5pZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FIHx8CisgICAgICAgIGN0eC0+cy5wID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFdyaXRlIGEgcG9pbnQgcGx1cyBpdHMgbGVuZ3RoIHRvIGEgYnVmZmVyCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV93cml0ZV9sZW5fcG9pbnQoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICAvKiBOZWVkIGF0IGxlYXN0IDQgZm9yIGxlbmd0aCBwbHVzIDEgZm9yIHBvaW50ICovCisgICAgaWYoIGVuZCA8ICpwIHx8IGVuZCAtICpwIDwgNSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIHJldCA9IG1iZWR0bHNfZWNwX3BvaW50X3dyaXRlX2JpbmFyeSggZ3JwLCBQLCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4sICpwICsgNCwgZW5kIC0gKCAqcCArIDQgKSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAoKnApWzBdID0gKHVuc2lnbmVkIGNoYXIpKCAoIGxlbiA+PiAyNCApICYgMHhGRiApOworICAgICgqcClbMV0gPSAodW5zaWduZWQgY2hhcikoICggbGVuID4+IDE2ICkgJiAweEZGICk7CisgICAgKCpwKVsyXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBsZW4gPj4gIDggKSAmIDB4RkYgKTsKKyAgICAoKnApWzNdID0gKHVuc2lnbmVkIGNoYXIpKCAoIGxlbiAgICAgICApICYgMHhGRiApOworCisgICAgKnAgKz0gNCArIGxlbjsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU2l6ZSBvZiB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgZWNqcGFrZV9oYXNoOgorICogMyBFQyBwb2ludHMgcGx1cyB0aGVpciBsZW5ndGgsIHBsdXMgSUQgYW5kIGl0cyBsZW5ndGggKDQgKyA2IGJ5dGVzKQorICovCisjZGVmaW5lIEVDSlBBS0VfSEFTSF9CVUZfTEVOICAgICggMyAqICggNCArIE1CRURUTFNfRUNQX01BWF9QVF9MRU4gKSArIDQgKyA2ICkKKworLyoKKyAqIENvbXB1dGUgaGFzaCBmb3IgWktQICg3LjQuMi4yLjIuMSkKKyAqLworc3RhdGljIGludCBlY2pwYWtlX2hhc2goIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHBmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpWLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpYLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICpoICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmW0VDSlBBS0VfSEFTSF9CVUZfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ1ZiArIHNpemVvZiggYnVmICk7CisgICAgY29uc3Qgc2l6ZV90IGlkX2xlbiA9IHN0cmxlbiggaWQgKTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbTUJFRFRMU19NRF9NQVhfU0laRV07CisKKyAgICAvKiBXcml0ZSB0aGluZ3MgdG8gdGVtcG9yYXJ5IGJ1ZmZlciAqLworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV93cml0ZV9sZW5fcG9pbnQoICZwLCBlbmQsIGdycCwgcGYsIEcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV93cml0ZV9sZW5fcG9pbnQoICZwLCBlbmQsIGdycCwgcGYsIFYgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV93cml0ZV9sZW5fcG9pbnQoICZwLCBlbmQsIGdycCwgcGYsIFggKSApOworCisgICAgaWYoIGVuZCAtIHAgPCA0ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBpZF9sZW4gPj4gMjQgKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGlkX2xlbiA+PiAxNiApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggaWRfbGVuID4+ICA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBpZF9sZW4gICAgICAgKSAmIDB4RkYgKTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCBpZF9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICBtZW1jcHkoIHAsIGlkLCBpZF9sZW4gKTsKKyAgICBwICs9IGlkX2xlbjsKKworICAgIC8qIENvbXB1dGUgaGFzaCAqLworICAgIG1iZWR0bHNfbWQoIG1kX2luZm8sIGJ1ZiwgcCAtIGJ1ZiwgaGFzaCApOworCisgICAgLyogVHVybiBpdCBpbnRvIGFuIGludGVnZXIgbW9kIG4gKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCBoLCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCBoLCBoLCAmZ3JwLT5OICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUGFyc2UgYSBFQ1Nobm9yclpLUCAoNy40LjIuMi4yKSBhbmQgdmVyaWZ5IGl0ICg3LjQuMi4zLjMpCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV96a3BfcmVhZCggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBWLCBWVjsKKyAgICBtYmVkdGxzX21waSByLCBoOworICAgIHNpemVfdCByX2xlbjsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZWICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlZWICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmaCApOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBFQ1BvaW50IFY7CisgICAgICogICAgIG9wYXF1ZSByPDEuLjJeOC0xPjsKKyAgICAgKiB9IEVDU2Nobm9yclpLUDsKKyAgICAgKi8KKyAgICBpZiggZW5kIDwgKnAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggZ3JwLCAmViwgcCwgZW5kIC0gKnAgKSApOworCisgICAgaWYoIGVuZCA8ICpwIHx8IChzaXplX3QpKCBlbmQgLSAqcCApIDwgMSApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICByX2xlbiA9ICooKnApKys7CisKKyAgICBpZiggZW5kIDwgKnAgfHwgKHNpemVfdCkoIGVuZCAtICpwICkgPCByX2xlbiApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmciwgKnAsIHJfbGVuICkgKTsKKyAgICAqcCArPSByX2xlbjsKKworICAgIC8qCisgICAgICogVmVyaWZpY2F0aW9uCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2hhc2goIG1kX2luZm8sIGdycCwgcGYsIEcsICZWLCBYLCBpZCwgJmggKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsYWRkKCAobWJlZHRsc19lY3BfZ3JvdXAgKikgZ3JwLAorICAgICAgICAgICAgICAgICAgICAgJlZWLCAmaCwgWCwgJnIsIEcgKSApOworCisgICAgaWYoIG1iZWR0bHNfZWNwX3BvaW50X2NtcCggJlZWLCAmViApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlYgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmVlYgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmciApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZoICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogR2VuZXJhdGUgWktQICg3LjQuMi4zLjIpIGFuZCB3cml0ZSBpdCBhcyBFQ1NjaG5vcnJaS1AgKDcuNC4yLjIuMikKKyAqLworc3RhdGljIGludCBlY2pwYWtlX3prcF93cml0ZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHBmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBWOworICAgIG1iZWR0bHNfbXBpIHY7CisgICAgbWJlZHRsc19tcGkgaDsgLyogbGF0ZXIgcmVjeWNsZWQgdG8gaG9sZCByICovCisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCBlbmQgPCAqcCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZWICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnYgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmaCApOworCisgICAgLyogQ29tcHV0ZSBzaWduYXR1cmUgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyX2Jhc2UoIChtYmVkdGxzX2VjcF9ncm91cCAqKSBncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLCAmdiwgJlYsIGZfcm5nLCBwX3JuZyApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2hhc2goIG1kX2luZm8sIGdycCwgcGYsIEcsICZWLCBYLCBpZCwgJmggKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmgsICZoLCB4ICkgKTsgLyogeCpoICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmaCwgJnYsICZoICkgKTsgLyogdiAtIHgqaCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJmgsICZoLCAmZ3JwLT5OICkgKTsgLyogciAqLworCisgICAgLyogV3JpdGUgaXQgb3V0ICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoIGdycCwgJlYsCisgICAgICAgICAgICAgICAgcGYsICZsZW4sICpwLCBlbmQgLSAqcCApICk7CisgICAgKnAgKz0gbGVuOworCisgICAgbGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJmggKTsgLyogYWN0dWFsbHkgciAqLworICAgIGlmKCBlbmQgPCAqcCB8fCAoc2l6ZV90KSggZW5kIC0gKnAgKSA8IDEgKyBsZW4gfHwgbGVuID4gMjU1ICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgKigqcCkrKyA9ICh1bnNpZ25lZCBjaGFyKSggbGVuICYgMHhGRiApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmaCwgKnAsIGxlbiApICk7IC8qIHIgKi8KKyAgICAqcCArPSBsZW47CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlYgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmdiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZoICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUGFyc2UgYSBFQ0pQQUtFS2V5S1AgKDcuNC4yLjIuMSkgYW5kIGNoZWNrIHByb29mCisgKiBPdXRwdXQ6IHZlcmlmaWVkIHB1YmxpYyBrZXkgWAorICovCitzdGF0aWMgaW50IGVjanBha2Vfa2twX3JlYWQoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggZW5kIDwgKnAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBFQ1BvaW50IFg7CisgICAgICogICAgIEVDU2Nobm9yclpLUCB6a3A7CisgICAgICogfSBFQ0pQQUtFS2V5S1A7CisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggZ3JwLCBYLCBwLCBlbmQgLSAqcCApICk7CisgICAgaWYoIG1iZWR0bHNfZWNwX2lzX3plcm8oIFggKSApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVk7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2VfemtwX3JlYWQoIG1kX2luZm8sIGdycCwgcGYsIEcsIFgsIGlkLCBwLCBlbmQgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhbiBFQ0pQQUtFS2V5S1AKKyAqIE91dHB1dDogdGhlIHNlcmlhbGl6ZWQgc3RydWN0dXJlLCBwbHVzIHByaXZhdGUvcHVibGljIGtleSBwYWlyCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV9ra3Bfd3JpdGUoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tcGkgKngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoIGVuZCA8ICpwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgLyogR2VuZXJhdGUga2V5ICg3LjQuMi4zLjEpIGFuZCB3cml0ZSBpdCBvdXQgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyX2Jhc2UoIChtYmVkdGxzX2VjcF9ncm91cCAqKSBncnAsIEcsIHgsIFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfdGxzX3dyaXRlX3BvaW50KCBncnAsIFgsCisgICAgICAgICAgICAgICAgcGYsICZsZW4sICpwLCBlbmQgLSAqcCApICk7CisgICAgKnAgKz0gbGVuOworCisgICAgLyogR2VuZXJhdGUgYW5kIHdyaXRlIHByb29mICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX3prcF93cml0ZSggbWRfaW5mbywgZ3JwLCBwZiwgRywgeCwgWCwgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgZW5kLCBmX3JuZywgcF9ybmcgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBSZWFkIGEgRUNKUEFLRUtleUtQUGFpckxpc3QgKDcuNC4yLjMpIGFuZCBjaGVjayBwcm9vZnMKKyAqIE91cHV0czogdmVyaWZpZWQgcGVlciBwdWJsaWMga2V5cyBYYSwgWGIKKyAqLworc3RhdGljIGludCBlY2pwYWtlX2trcHBfcmVhZCggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqWGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqWGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBidWYgKyBsZW47CisKKyAgICAvKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIEVDSlBBS0VLZXlLUCBlY2pwYWtlX2tleV9rcF9wYWlyX2xpc3RbMl07CisgICAgICogfSBFQ0pQQUtFS2V5S1BQYWlyTGlzdDsKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2Vfa2twX3JlYWQoIG1kX2luZm8sIGdycCwgcGYsIEcsIFhhLCBpZCwgJnAsIGVuZCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2trcF9yZWFkKCBtZF9pbmZvLCBncnAsIHBmLCBHLCBYYiwgaWQsICZwLCBlbmQgKSApOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhIEVDSlBBS0VLZXlLUFBhaXJMaXN0CisgKiBPdXRwdXRzOiB0aGUgc2VyaWFsaXplZCBzdHJ1Y3R1cmUsIHBsdXMgdHdvIHByaXZhdGUvcHVibGljIGtleSBwYWlycworICovCitzdGF0aWMgaW50IGVjanBha2Vfa2twcF93cml0ZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tcGkgKnhtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqWGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tcGkgKnhtMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqWGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ1ZiArIGxlbjsKKworICAgIE1CRURUTFNfTVBJX0NISyggZWNqcGFrZV9ra3Bfd3JpdGUoIG1kX2luZm8sIGdycCwgcGYsIEcsIHhtMSwgWGEsIGlkLAorICAgICAgICAgICAgICAgICZwLCBlbmQsIGZfcm5nLCBwX3JuZyApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2trcF93cml0ZSggbWRfaW5mbywgZ3JwLCBwZiwgRywgeG0yLCBYYiwgaWQsCisgICAgICAgICAgICAgICAgJnAsIGVuZCwgZl9ybmcsIHBfcm5nICkgKTsKKworICAgICpvbGVuID0gcCAtIGJ1ZjsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmVhZCBhbmQgcHJvY2VzcyB0aGUgZmlyc3Qgcm91bmQgbWVzc2FnZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCBtYmVkdGxzX2VjanBha2VfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgcmV0dXJuKCBlY2pwYWtlX2trcHBfcmVhZCggY3R4LT5tZF9pbmZvLCAmY3R4LT5ncnAsIGN0eC0+cG9pbnRfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmdycC5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPlhwMSwgJmN0eC0+WHAyLCBJRF9QRUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVuICkgKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIGFuZCB3cml0ZSB0aGUgZmlyc3Qgcm91bmQgbWVzc2FnZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX29uZSggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIHJldHVybiggZWNqcGFrZV9ra3BwX3dyaXRlKCBjdHgtPm1kX2luZm8sICZjdHgtPmdycCwgY3R4LT5wb2ludF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmdycC5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT54bTEsICZjdHgtPlhtMSwgJmN0eC0+eG0yLCAmY3R4LT5YbTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX01JTkUsIGJ1ZiwgbGVuLCBvbGVuLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogQ29tcHV0ZSB0aGUgc3VtIG9mIHRocmVlIHBvaW50cyBSID0gQSArIEIgKyBDCisgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV9lY3BfYWRkMyggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKkMgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgb25lOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJm9uZSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmb25lLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bGFkZCggZ3JwLCBSLCAmb25lLCBBLCAmb25lLCBCICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bGFkZCggZ3JwLCBSLCAmb25lLCBSLCAmb25lLCBDICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmb25lICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmVhZCBhbmQgcHJvY2VzcyBzZWNvbmQgcm91bmQgbWVzc2FnZSAoQzogNy40LjIuNSwgUzogNy40LjIuNikKKyAqLworaW50IG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmICsgbGVuOworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBHOyAgICAvKiBDOiBHQiwgUzogR0EgKi8KKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmRyApOworCisgICAgLyoKKyAgICAgKiBTZXJ2ZXI6IEdBID0gWDMgICsgWDQgICsgWDEgICAgICAoNy40LjIuNi4xKQorICAgICAqIENsaWVudDogR0IgPSBYMSAgKyBYMiAgKyBYMyAgICAgICg3LjQuMi41LjEpCisgICAgICogVW5pZmllZDogRyA9IFhtMSArIFhtMiArIFhwMQorICAgICAqIFdlIG5lZWQgdGhhdCBiZWZvcmUgcGFyc2luZyBpbiBvcmRlciB0byBjaGVjayBYcCBhcyB3ZSByZWFkIGl0CisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2VjcF9hZGQzKCAmY3R4LT5ncnAsICZHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+WG0xLCAmY3R4LT5YbTIsICZjdHgtPlhwMSApICk7CisKKyAgICAvKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIEVDUGFyYW1ldGVycyBjdXJ2ZV9wYXJhbXM7ICAgLy8gb25seSBjbGllbnQgcmVhZGluZyBzZXJ2ZXIgbXNnCisgICAgICogICAgIEVDSlBBS0VLZXlLUCBlY2pwYWtlX2tleV9rcDsKKyAgICAgKiB9IENsaWVudC9TZXJ2ZXJFQ0pQQUtFUGFyYW1zOworICAgICAqLworICAgIGlmKCBjdHgtPnJvbGUgPT0gTUJFRFRMU19FQ0pQQUtFX0NMSUVOVCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwKCAmZ3JwLCAmcCwgbGVuICkgKTsKKyAgICAgICAgaWYoIGdycC5pZCAhPSBjdHgtPmdycC5pZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2trcF9yZWFkKCBjdHgtPm1kX2luZm8sICZjdHgtPmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBvaW50X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRywgJmN0eC0+WHAsIElEX1BFRVIsICZwLCBlbmQgKSApOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJkcgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDb21wdXRlIFIgPSArLy0gWCAqIFMgbW9kIE4sIHRha2luZyBjYXJlIG5vdCB0byBsZWFrIFMKKyAqLworc3RhdGljIGludCBlY2pwYWtlX211bF9zZWNyZXQoIG1iZWR0bHNfbXBpICpSLCBpbnQgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgYjsgLyogQmxpbmRpbmcgdmFsdWUsIHRoZW4gcyArIE4gKiBibGluZGluZyAqLworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJmIgKTsKKworICAgIC8qIGIgPSBzICsgcm5kLTEyOC1iaXQgKiBOICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJmIsIDE2LCBmX3JuZywgcF9ybmcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmIsICZiLCBOICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZiLCAmYiwgUyApICk7CisKKyAgICAvKiBSID0gc2lnbiAqIFggKiBiIG1vZCBOICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCBSLCBYLCAmYiApICk7CisgICAgUi0+cyAqPSBzaWduOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggUiwgUiwgTiApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhbmQgd3JpdGUgdGhlIHNlY29uZCByb3VuZCBtZXNzYWdlIChTOiA3LjQuMi41LCBDOiA3LjQuMi42KQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX3R3byggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgRzsgICAgLyogQzogR0EsIFM6IEdCICovCisgICAgbWJlZHRsc19lY3BfcG9pbnQgWG07ICAgLyogQzogWGMsIFM6IFhzICovCisgICAgbWJlZHRsc19tcGkgeG07ICAgICAgICAgLyogQzogeGMsIFM6IHhzICovCisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBidWYgKyBsZW47CisgICAgc2l6ZV90IGVjX2xlbjsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZHICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlhtICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnhtICk7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGdlbmVyYXRlIHByaXZhdGUvcHVibGljIGtleSBwYWlyIChTOiA3LjQuMi41LjEsIEM6IDcuNC4yLjYuMSkKKyAgICAgKgorICAgICAqIENsaWVudDogIEdBID0gWDEgICsgWDMgICsgWDQgIHwgeHMgPSB4MiAgKiBzIHwgWGMgPSB4YyAqIEdBCisgICAgICogU2VydmVyOiAgR0IgPSBYMyAgKyBYMSAgKyBYMiAgfCB4cyA9IHg0ICAqIHMgfCBYcyA9IHhzICogR0IKKyAgICAgKiBVbmlmaWVkOiBHICA9IFhtMSArIFhwMSArIFhwMiB8IHhtID0geG0yICogcyB8IFhtID0geG0gKiBHCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX2VjcF9hZGQzKCAmY3R4LT5ncnAsICZHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+WHAxLCAmY3R4LT5YcDIsICZjdHgtPlhtMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX211bF9zZWNyZXQoICZ4bSwgMSwgJmN0eC0+eG0yLCAmY3R4LT5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5ncnAuTiwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggJmN0eC0+Z3JwLCAmWG0sICZ4bSwgJkcsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICAvKgorICAgICAqIE5vdyB3cml0ZSB0aGluZ3Mgb3V0CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBFQ1BhcmFtZXRlcnMgY3VydmVfcGFyYW1zOyAgIC8vIG9ubHkgc2VydmVyIHdyaXRpbmcgaXRzIG1lc3NhZ2UKKyAgICAgKiAgICAgRUNKUEFLRUtleUtQIGVjanBha2Vfa2V5X2twOworICAgICAqIH0gQ2xpZW50L1NlcnZlckVDSlBBS0VQYXJhbXM7CisgICAgICovCisgICAgaWYoIGN0eC0+cm9sZSA9PSBNQkVEVExTX0VDSlBBS0VfU0VSVkVSICkKKyAgICB7CisgICAgICAgIGlmKCBlbmQgPCBwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfZ3JvdXAoICZjdHgtPmdycCwgJmVjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGVuZCAtIHAgKSApOworICAgICAgICBwICs9IGVjX2xlbjsKKyAgICB9CisKKyAgICBpZiggZW5kIDwgcCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTDsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggJmN0eC0+Z3JwLCAmWG0sCisgICAgICAgICAgICAgICAgICAgICBjdHgtPnBvaW50X2Zvcm1hdCwgJmVjX2xlbiwgcCwgZW5kIC0gcCApICk7CisgICAgcCArPSBlY19sZW47CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2VfemtwX3dyaXRlKCBjdHgtPm1kX2luZm8sICZjdHgtPmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBvaW50X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRywgJnhtLCAmWG0sIElEX01JTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAsIGVuZCwgZl9ybmcsIHBfcm5nICkgKTsKKworICAgICpvbGVuID0gcCAtIGJ1ZjsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZYbSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ4bSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIERlcml2ZSBQTVMgKDcuNC4yLjcgLyA3LjQuMi44KQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX3BvaW50IEs7CisgICAgbWJlZHRsc19tcGkgbV94bTJfcywgb25lOworICAgIHVuc2lnbmVkIGNoYXIga3hbTUJFRFRMU19FQ1BfTUFYX0JZVEVTXTsKKyAgICBzaXplX3QgeF9ieXRlczsKKworICAgICpvbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggY3R4LT5tZF9pbmZvICk7CisgICAgaWYoIGxlbiA8ICpvbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJksgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmbV94bTJfcyApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZvbmUgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJm9uZSwgMSApICk7CisKKyAgICAvKgorICAgICAqIENsaWVudDogIEsgPSAoIFhzIC0gWDQgICogeDIgICogcyApICogeDIKKyAgICAgKiBTZXJ2ZXI6ICBLID0gKCBYYyAtIFgyICAqIHg0ICAqIHMgKSAqIHg0CisgICAgICogVW5pZmllZDogSyA9ICggWHAgLSBYcDIgKiB4bTIgKiBzICkgKiB4bTIKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2VfbXVsX3NlY3JldCggJm1feG0yX3MsIC0xLCAmY3R4LT54bTIsICZjdHgtPnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmdycC5OLCBmX3JuZywgcF9ybmcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsYWRkKCAmY3R4LT5ncnAsICZLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb25lLCAmY3R4LT5YcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1feG0yX3MsICZjdHgtPlhwMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZjdHgtPmdycCwgJkssICZjdHgtPnhtMiwgJkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICAvKiBQTVMgPSBTSEEtMjU2KCBLLlggKSAqLworICAgIHhfYnl0ZXMgPSAoIGN0eC0+Z3JwLnBiaXRzICsgNyApIC8gODsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJksuWCwga3gsIHhfYnl0ZXMgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tZCggY3R4LT5tZF9pbmZvLCBreCwgeF9ieXRlcywgYnVmICkgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmSyApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZtX3htMl9zICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJm9uZSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI3VuZGVmIElEX01JTkUKKyN1bmRlZiBJRF9QRUVSCisKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQoraW50IG1iZWR0bHNfZWNqcGFrZV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICAodm9pZCkgdmVyYm9zZTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9wYXNzd29yZFtdID0geworICAgIDB4NzQsIDB4NjgsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NjQsIDB4NmEsIDB4NzAsIDB4NjEsIDB4NmIsIDB4NjUsIDB4NzQsCisgICAgMHg2NSwgMHg3MywgMHg3NAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3gxW10gPSB7CisgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAgICAweDBkLCAweDBlLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LAorICAgIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF94MltdID0geworICAgIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsCisgICAgMHg2ZCwgMHg2ZSwgMHg2ZiwgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKKyAgICAweDc5LCAweDdhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLCAweDgxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfeDNbXSA9IHsKKyAgICAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLAorICAgIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCisgICAgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwgMHg4MQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3g0W10gPSB7CisgICAgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywKKyAgICAweGNkLCAweGNlLCAweGNmLCAweGQwLCAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LAorICAgIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsIDB4ZTEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9jbGlfb25lW10gPSB7CisgICAgMHg0MSwgMHgwNCwgMHhhYywgMHhjZiwgMHgwMSwgMHgwNiwgMHhlZiwgMHg4NSwgMHg4ZiwgMHhhMiwgMHhkOSwgMHgxOSwKKyAgICAweDMzLCAweDEzLCAweDQ2LCAweDgwLCAweDVhLCAweDc4LCAweGI1LCAweDhiLCAweGJhLCAweGQwLCAweGI4LCAweDQ0LAorICAgIDB4ZTUsIDB4YzcsIDB4ODksIDB4MjgsIDB4NzksIDB4MTQsIDB4NjEsIDB4ODcsIDB4ZGQsIDB4MjYsIDB4NjYsIDB4YWQsCisgICAgMHhhNywgMHg4MSwgMHhiYiwgMHg3ZiwgMHgxMSwgMHgxMywgMHg3MiwgMHgyNSwgMHgxYSwgMHg4OSwgMHgxMCwgMHg2MiwKKyAgICAweDFmLCAweDYzLCAweDRkLCAweGYxLCAweDI4LCAweGFjLCAweDQ4LCAweGUzLCAweDgxLCAweGZkLCAweDZlLCAweGY5LAorICAgIDB4MDYsIDB4MDcsIDB4MzEsIDB4ZjYsIDB4OTQsIDB4YTQsIDB4NDEsIDB4MDQsIDB4MWQsIDB4ZDAsIDB4YmQsIDB4NWQsCisgICAgMHg0NSwgMHg2NiwgMHhjOSwgMHhiZSwgMHhkOSwgMHhjZSwgMHg3ZCwgMHhlNywgMHgwMSwgMHhiNSwgMHhlOCwgMHgyZSwKKyAgICAweDA4LCAweGU4LCAweDRiLCAweDczLCAweDA0LCAweDY2LCAweDAxLCAweDhhLCAweGI5LCAweDAzLCAweGM3LCAweDllLAorICAgIDB4YjksIDB4ODIsIDB4MTcsIDB4MjIsIDB4MzYsIDB4YzAsIDB4YzEsIDB4NzIsIDB4OGEsIDB4ZTQsIDB4YmYsIDB4NzMsCisgICAgMHg2MSwgMHgwZCwgMHgzNCwgMHhkZSwgMHg0NCwgMHgyNCwgMHg2ZSwgMHhmMywgMHhkOSwgMHhjMCwgMHg1YSwgMHgyMiwKKyAgICAweDM2LCAweGZiLCAweDY2LCAweGE2LCAweDU4LCAweDNkLCAweDc0LCAweDQ5LCAweDMwLCAweDhiLCAweGFiLCAweGNlLAorICAgIDB4MjAsIDB4NzIsIDB4ZmUsIDB4MTYsIDB4NjYsIDB4MjksIDB4OTIsIDB4ZTksIDB4MjMsIDB4NWMsIDB4MjUsIDB4MDAsCisgICAgMHgyZiwgMHgxMSwgMHhiMSwgMHg1MCwgMHg4NywgMHhiOCwgMHgyNywgMHgzOCwgMHhlMCwgMHgzYywgMHg5NCwgMHg1YiwKKyAgICAweGY3LCAweGEyLCAweDk5LCAweDVkLCAweGRhLCAweDFlLCAweDk4LCAweDM0LCAweDU4LCAweDQxLCAweDA0LCAweDdlLAorICAgIDB4YTYsIDB4ZTMsIDB4YTQsIDB4NDgsIDB4NzAsIDB4MzcsIDB4YTksIDB4ZTAsIDB4ZGIsIDB4ZDcsIDB4OTIsIDB4NjIsCisgICAgMHhiMiwgMHhjYywgMHgyNywgMHgzZSwgMHg3NywgMHg5OSwgMHgzMCwgMHhmYywgMHgxOCwgMHg0MCwgMHg5YSwgMHhjNSwKKyAgICAweDM2LCAweDFjLCAweDVmLCAweGU2LCAweDY5LCAweGQ3LCAweDAyLCAweGUxLCAweDQ3LCAweDc5LCAweDBhLCAweGViLAorICAgIDB4NGMsIDB4ZTcsIDB4ZmQsIDB4NjUsIDB4NzUsIDB4YWIsIDB4MGYsIDB4NmMsIDB4N2YsIDB4ZDEsIDB4YzMsIDB4MzUsCisgICAgMHg5MywgMHg5YSwgMHhhOCwgMHg2MywgMHhiYSwgMHgzNywgMHhlYywgMHg5MSwgMHhiNywgMHhlMywgMHgyYiwgMHhiMCwKKyAgICAweDEzLCAweGJiLCAweDJiLCAweDQxLCAweDA0LCAweGE0LCAweDk1LCAweDU4LCAweGQzLCAweDJlLCAweGQxLCAweGViLAorICAgIDB4ZmMsIDB4MTgsIDB4MTYsIDB4YWYsIDB4NGYsIDB4ZjAsIDB4OWIsIDB4NTUsIDB4ZmMsIDB4YjQsIDB4Y2EsIDB4NDcsCisgICAgMHhiMiwgMHhhMCwgMHgyZCwgMHgxZSwgMHg3YywgMHhhZiwgMHgxMSwgMHg3OSwgMHhlYSwgMHgzZiwgMHhlMSwgMHgzOSwKKyAgICAweDViLCAweDIyLCAweGI4LCAweDYxLCAweDk2LCAweDQwLCAweDE2LCAweGZhLCAweGJhLCAweGY3LCAweDJjLCAweDk3LAorICAgIDB4NTYsIDB4OTUsIDB4ZDksIDB4M2QsIDB4NGQsIDB4ZjAsIDB4ZTUsIDB4MTksIDB4N2YsIDB4ZTksIDB4ZjAsIDB4NDAsCisgICAgMHg2MywgMHg0ZSwgMHhkNSwgMHg5NywgMHg2NCwgMHg5MywgMHg3NywgMHg4NywgMHhiZSwgMHgyMCwgMHhiYywgMHg0ZCwKKyAgICAweGVlLCAweGJiLCAweGY5LCAweGI4LCAweGQ2LCAweDBhLCAweDMzLCAweDVmLCAweDA0LCAweDZjLCAweGEzLCAweGFhLAorICAgIDB4OTQsIDB4MWUsIDB4NDUsIDB4ODYsIDB4NGMsIDB4N2MsIDB4YWQsIDB4ZWYsIDB4OWMsIDB4ZjcsIDB4NWIsIDB4M2QsCisgICAgMHg4YiwgMHgwMSwgMHgwZSwgMHg0NCwgMHgzZSwgMHhmMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3Nydl9vbmVbXSA9IHsKKyAgICAweDQxLCAweDA0LCAweDdlLCAweGE2LCAweGUzLCAweGE0LCAweDQ4LCAweDcwLCAweDM3LCAweGE5LCAweGUwLCAweGRiLAorICAgIDB4ZDcsIDB4OTIsIDB4NjIsIDB4YjIsIDB4Y2MsIDB4MjcsIDB4M2UsIDB4NzcsIDB4OTksIDB4MzAsIDB4ZmMsIDB4MTgsCisgICAgMHg0MCwgMHg5YSwgMHhjNSwgMHgzNiwgMHgxYywgMHg1ZiwgMHhlNiwgMHg2OSwgMHhkNywgMHgwMiwgMHhlMSwgMHg0NywKKyAgICAweDc5LCAweDBhLCAweGViLCAweDRjLCAweGU3LCAweGZkLCAweDY1LCAweDc1LCAweGFiLCAweDBmLCAweDZjLCAweDdmLAorICAgIDB4ZDEsIDB4YzMsIDB4MzUsIDB4OTMsIDB4OWEsIDB4YTgsIDB4NjMsIDB4YmEsIDB4MzcsIDB4ZWMsIDB4OTEsIDB4YjcsCisgICAgMHhlMywgMHgyYiwgMHhiMCwgMHgxMywgMHhiYiwgMHgyYiwgMHg0MSwgMHgwNCwgMHgwOSwgMHhmOCwgMHg1YiwgMHgzZCwKKyAgICAweDIwLCAweGViLCAweGQ3LCAweDg4LCAweDVjLCAweGU0LCAweDY0LCAweGMwLCAweDhkLCAweDA1LCAweDZkLCAweDY0LAorICAgIDB4MjgsIDB4ZmUsIDB4NGQsIDB4ZDksIDB4MjgsIDB4N2EsIDB4YTMsIDB4NjUsIDB4ZjEsIDB4MzEsIDB4ZjQsIDB4MzYsCisgICAgMHgwZiwgMHhmMywgMHg4NiwgMHhkOCwgMHg0NiwgMHg4OSwgMHg4YiwgMHhjNCwgMHhiNCwgMHgxNSwgMHg4MywgMHhjMiwKKyAgICAweGE1LCAweDE5LCAweDdmLCAweDY1LCAweGQ3LCAweDg3LCAweDQyLCAweDc0LCAweDZjLCAweDEyLCAweGE1LCAweGVjLAorICAgIDB4MGEsIDB4NGYsIDB4ZmUsIDB4MmYsIDB4MjcsIDB4MGEsIDB4NzUsIDB4MGEsIDB4MWQsIDB4OGYsIDB4YjUsIDB4MTYsCisgICAgMHgyMCwgMHg5MywgMHg0ZCwgMHg3NCwgMHhlYiwgMHg0MywgMHhlNSwgMHg0ZCwgMHhmNCwgMHgyNCwgMHhmZCwgMHg5NiwKKyAgICAweDMwLCAweDZjLCAweDAxLCAweDE3LCAweGJmLCAweDEzLCAweDFhLCAweGZhLCAweGJmLCAweDkwLCAweGE5LCAweGQzLAorICAgIDB4M2QsIDB4MTEsIDB4OTgsIDB4ZDksIDB4MDUsIDB4MTksIDB4MzcsIDB4MzUsIDB4MTQsIDB4NDEsIDB4MDQsIDB4MTksCisgICAgMHgwYSwgMHgwNywgMHg3MCwgMHgwZiwgMHhmYSwgMHg0YiwgMHhlNiwgMHhhZSwgMHgxZCwgMHg3OSwgMHhlZSwgMHgwZiwKKyAgICAweDA2LCAweGFlLCAweGI1LCAweDQ0LCAweGNkLCAweDVhLCAweGRkLCAweGFhLCAweGJlLCAweGRmLCAweDcwLCAweGY4LAorICAgIDB4NjIsIDB4MzMsIDB4MjEsIDB4MzMsIDB4MmMsIDB4NTQsIDB4ZjMsIDB4NTUsIDB4ZjAsIDB4ZmIsIDB4ZmUsIDB4YzcsCisgICAgMHg4MywgMHhlZCwgMHgzNSwgMHg5ZSwgMHg1ZCwgMHgwYiwgMHhmNywgMHgzNywgMHg3YSwgMHgwZiwgMHhjNCwgMHhlYSwKKyAgICAweDdhLCAweGNlLCAweDQ3LCAweDNjLCAweDljLCAweDExLCAweDJiLCAweDQxLCAweGNjLCAweGQ0LCAweDFhLCAweGM1LAorICAgIDB4NmEsIDB4NTYsIDB4MTIsIDB4NDEsIDB4MDQsIDB4MzYsIDB4MGEsIDB4MWMsIDB4ZWEsIDB4MzMsIDB4ZmMsIDB4ZTYsCisgICAgMHg0MSwgMHgxNSwgMHg2NCwgMHg1OCwgMHhlMCwgMHhhNCwgMHhlYSwgMHhjMiwgMHgxOSwgMHhlOSwgMHg2OCwgMHgzMSwKKyAgICAweGU2LCAweGFlLCAweGJjLCAweDg4LCAweGIzLCAweGYzLCAweDc1LCAweDJmLCAweDkzLCAweGEwLCAweDI4LCAweDFkLAorICAgIDB4MWIsIDB4ZjEsIDB4ZmIsIDB4MTAsIDB4NjAsIDB4NTEsIDB4ZGIsIDB4OTYsIDB4OTQsIDB4YTgsIDB4ZDYsIDB4ZTgsCisgICAgMHg2MiwgMHhhNSwgMHhlZiwgMHgxMywgMHgyNCwgMHhhMywgMHhkOSwgMHhlMiwgMHg3OCwgMHg5NCwgMHhmMSwgMHhlZSwKKyAgICAweDRmLCAweDdjLCAweDU5LCAweDE5LCAweDk5LCAweDY1LCAweGE4LCAweGRkLCAweDRhLCAweDIwLCAweDkxLCAweDg0LAorICAgIDB4N2QsIDB4MmQsIDB4MjIsIDB4ZGYsIDB4M2UsIDB4ZTUsIDB4NWYsIDB4YWEsIDB4MmEsIDB4M2YsIDB4YjMsIDB4M2YsCisgICAgMHhkMiwgMHhkMSwgMHhlMCwgMHg1NSwgMHhhMCwgMHg3YSwgMHg3YywgMHg2MSwgMHhlYywgMHhmYiwgMHg4ZCwgMHg4MCwKKyAgICAweGVjLCAweDAwLCAweGMyLCAweGM5LCAweGViLCAweDEyCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3Rfc3J2X3R3b1tdID0geworICAgIDB4MDMsIDB4MDAsIDB4MTcsIDB4NDEsIDB4MDQsIDB4MGYsIDB4YjIsIDB4MmIsIDB4MWQsIDB4NWQsIDB4MTEsIDB4MjMsCisgICAgMHhlMCwgMHhlZiwgMHg5ZiwgMHhlYiwgMHg5ZCwgMHg4YSwgMHgyZSwgMHg1OSwgMHgwYSwgMHgxZiwgMHg0ZCwgMHg3YywKKyAgICAweGVkLCAweDJjLCAweDJiLCAweDA2LCAweDU4LCAweDZlLCAweDhmLCAweDJhLCAweDE2LCAweGQ0LCAweGViLCAweDJmLAorICAgIDB4ZGEsIDB4NDMsIDB4MjgsIDB4YTIsIDB4MGIsIDB4MDcsIDB4ZDgsIDB4ZmQsIDB4NjYsIDB4NzYsIDB4NTQsIDB4Y2EsCisgICAgMHgxOCwgMHhjNSwgMHg0ZSwgMHgzMiwgMHhhMywgMHgzMywgMHhhMCwgMHg4NCwgMHg1NCwgMHg1MSwgMHhlOSwgMHgyNiwKKyAgICAweGVlLCAweDg4LCAweDA0LCAweGZkLCAweDdhLCAweGYwLCAweGFhLCAweGE3LCAweGE2LCAweDQxLCAweDA0LCAweDU1LAorICAgIDB4MTYsIDB4ZWEsIDB4M2UsIDB4NTQsIDB4YTAsIDB4ZDUsIDB4ZDgsIDB4YjIsIDB4Y2UsIDB4NzgsIDB4NmIsIDB4MzgsCisgICAgMHhkMywgMHg4MywgMHgzNywgMHgwMCwgMHgyOSwgMHhhNSwgMHhkYiwgMHhlNCwgMHg0NSwgMHg5YywgMHg5ZCwgMHhkNiwKKyAgICAweDAxLCAweGI0LCAweDA4LCAweGEyLCAweDRhLCAweGU2LCAweDQ2LCAweDVjLCAweDhhLCAweGM5LCAweDA1LCAweGI5LAorICAgIDB4ZWIsIDB4MDMsIDB4YjUsIDB4ZDMsIDB4NjksIDB4MWMsIDB4MTMsIDB4OWUsIDB4ZjgsIDB4M2YsIDB4MWMsIDB4ZDQsCisgICAgMHgyMCwgMHgwZiwgMHg2YywgMHg5YywgMHhkNCwgMHhlYywgMHgzOSwgMHgyMiwgMHgxOCwgMHhhNSwgMHg5ZSwgMHhkMiwKKyAgICAweDQzLCAweGQzLCAweGM4LCAweDIwLCAweGZmLCAweDcyLCAweDRhLCAweDlhLCAweDcwLCAweGI4LCAweDhjLCAweGI4LAorICAgIDB4NmYsIDB4MjAsIDB4YjQsIDB4MzQsIDB4YzYsIDB4ODYsIDB4NWEsIDB4YTEsIDB4Y2QsIDB4NzksIDB4MDYsIDB4ZGQsCisgICAgMHg3YywgMHg5YiwgMHhjZSwgMHgzNSwgMHgyNSwgMHhmNSwgMHgwOCwgMHgyNywgMHg2ZiwgMHgyNiwgMHg4MywgMHg2YworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X2NsaV90d29bXSA9IHsKKyAgICAweDQxLCAweDA0LCAweDY5LCAweGQ1LCAweDRlLCAweGU4LCAweDVlLCAweDkwLCAweGNlLCAweDNmLCAweDEyLCAweDQ2LAorICAgIDB4NzQsIDB4MmQsIDB4ZTUsIDB4MDcsIDB4ZTksIDB4MzksIDB4ZTgsIDB4MWQsIDB4MWQsIDB4YzEsIDB4YzUsIDB4Y2IsCisgICAgMHg5OCwgMHg4YiwgMHg1OCwgMHhjMywgMHgxMCwgMHhjOSwgMHhmZCwgMHhkOSwgMHg1MiwgMHg0ZCwgMHg5MywgMHg3MiwKKyAgICAweDBiLCAweDQ1LCAweDU0LCAweDFjLCAweDgzLCAweGVlLCAweDg4LCAweDQxLCAweDE5LCAweDFkLCAweGE3LCAweGNlLAorICAgIDB4ZDgsIDB4NmUsIDB4MzMsIDB4MTIsIDB4ZDQsIDB4MzYsIDB4MjMsIDB4YzEsIDB4ZDYsIDB4M2UsIDB4NzQsIDB4OTgsCisgICAgMHg5YSwgMHhiYSwgMHg0YSwgMHhmZiwgMHhkMSwgMHhlZSwgMHg0MSwgMHgwNCwgMHgwNywgMHg3ZSwgMHg4YywgMHgzMSwKKyAgICAweGUyLCAweDBlLCAweDZiLCAweGVkLCAweGI3LCAweDYwLCAweGMxLCAweDM1LCAweDkzLCAweGU2LCAweDlmLCAweDE1LAorICAgIDB4YmUsIDB4ODUsIDB4YzIsIDB4N2QsIDB4NjgsIDB4Y2QsIDB4MDksIDB4Y2MsIDB4YjgsIDB4YzQsIDB4MTgsIDB4MzYsCisgICAgMHgwOCwgMHg5MSwgMHg3YywgMHg1YywgMHgzZCwgMHg0MCwgMHg5ZiwgMHhhYywgMHgzOSwgMHhmZSwgMHhmZSwgMHhlOCwKKyAgICAweDJmLCAweDcyLCAweDkyLCAweGQzLCAweDZmLCAweDBkLCAweDIzLCAweGUwLCAweDU1LCAweDkxLCAweDNmLCAweDQ1LAorICAgIDB4YTUsIDB4MmIsIDB4ODUsIDB4ZGQsIDB4OGEsIDB4MjAsIDB4NTIsIDB4ZTksIDB4ZTEsIDB4MjksIDB4YmIsIDB4NGQsCisgICAgMHgyMCwgMHgwZiwgMHgwMSwgMHgxZiwgMHgxOSwgMHg0OCwgMHgzNSwgMHgzNSwgMHhhNiwgMHhlOCwgMHg5YSwgMHg1OCwKKyAgICAweDBjLCAweDliLCAweDAwLCAweDAzLCAweGJhLCAweGYyLCAweDE0LCAweDYyLCAweGVjLCAweGU5LCAweDFhLCAweDgyLAorICAgIDB4Y2MsIDB4MzgsIDB4ZGIsIDB4ZGMsIDB4YWUsIDB4NjAsIDB4ZDksIDB4YzUsIDB4NGMKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9wbXNbXSA9IHsKKyAgICAweGYzLCAweGQ0LCAweDdmLCAweDU5LCAweDk4LCAweDQ0LCAweGRiLCAweDkyLCAweGE1LCAweDY5LCAweGJiLCAweGU3LAorICAgIDB4OTgsIDB4MWUsIDB4MzksIDB4ZDksIDB4MzEsIDB4ZmQsIDB4NzQsIDB4M2IsIDB4ZjIsIDB4MmUsIDB4OTgsIDB4ZjksCisgICAgMHhiNCwgMHgzOCwgMHhmNywgMHgxOSwgMHhkMywgMHhjNCwgMHhmMywgMHg1MQorfTsKKworLyogTG9hZCBteSBwcml2YXRlIGtleXMgYW5kIGdlbmVyYXRlIHRoZSBjb3JyZXBvbmRpbmcgcHVibGljIGtleXMgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV90ZXN0X2xvYWQoIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp4bTEsIHNpemVfdCBsZW4xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqeG0yLCBzaXplX3QgbGVuMiApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZjdHgtPnhtMSwgeG0xLCBsZW4xICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4LT54bTIsIHhtMiwgbGVuMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZjdHgtPmdycCwgJmN0eC0+WG0xLCAmY3R4LT54bTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmdycC5HLCBOVUxMLCBOVUxMICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggJmN0eC0+Z3JwLCAmY3R4LT5YbTIsICZjdHgtPnhtMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+Z3JwLkcsIE5VTEwsIE5VTEwgKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qIEZvciB0ZXN0cyB3ZSBkb24ndCBuZWVkIGEgc2VjdXJlIFJORzsKKyAqIHVzZSB0aGUgTEdDIGZyb20gTnVtZXJpY2FsIFJlY2lwZXMgZm9yIHNpbXBsaWNpdHkgKi8KK3N0YXRpYyBpbnQgZWNqcGFrZV9sZ2MoIHZvaWQgKnAsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IGxlbiApCit7CisgICAgc3RhdGljIHVpbnQzMl90IHggPSA0MjsKKyAgICAodm9pZCkgcDsKKworICAgIHdoaWxlKCBsZW4gPiAwICkKKyAgICB7CisgICAgICAgIHNpemVfdCB1c2VfbGVuID0gbGVuID4gNCA/IDQgOiBsZW47CisgICAgICAgIHggPSAxNjY0NTI1ICogeCArIDEwMTM5MDQyMjM7CisgICAgICAgIG1lbWNweSggb3V0LCAmeCwgdXNlX2xlbiApOworICAgICAgICBvdXQgKz0gdXNlX2xlbjsKKyAgICAgICAgbGVuIC09IHVzZV9sZW47CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNkZWZpbmUgVEVTVF9BU1NFUlQoIHggKSAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggeCApICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldCA9IDA7ICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldCA9IDE7ICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7ICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKCAwICkKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19lY2pwYWtlX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgY2xpOworICAgIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0IHNydjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdLCBwbXNbMzJdOworICAgIHNpemVfdCBsZW4sIHBtc2xlbjsKKworICAgIG1iZWR0bHNfZWNqcGFrZV9pbml0KCAmY2xpICk7CisgICAgbWJlZHRsc19lY2pwYWtlX2luaXQoICZzcnYgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgRUNKUEFLRSB0ZXN0ICMwIChzZXR1cCk6ICIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfc2V0dXAoICZjbGksIE1CRURUTFNfRUNKUEFLRV9DTElFTlQsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEsCisgICAgICAgICAgICAgICAgICAgIGVjanBha2VfdGVzdF9wYXNzd29yZCwKKyAgICAgICAgICAgIHNpemVvZiggZWNqcGFrZV90ZXN0X3Bhc3N3b3JkICkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3NldHVwKCAmc3J2LCBNQkVEVExTX0VDSlBBS0VfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLAorICAgICAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3RfcGFzc3dvcmQsCisgICAgICAgICAgICBzaXplb2YoIGVjanBha2VfdGVzdF9wYXNzd29yZCApICkgPT0gMCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVDSlBBS0UgdGVzdCAjMSAocmFuZG9tIGhhbmRzaGFrZSk6ICIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfb25lKCAmY2xpLAorICAgICAgICAgICAgICAgICBidWYsIHNpemVvZiggYnVmICksICZsZW4sIGVjanBha2VfbGdjLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX29uZSggJnNydiwgYnVmLCBsZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX29uZSggJnNydiwKKyAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoIGJ1ZiApLCAmbGVuLCBlY2pwYWtlX2xnYywgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUoICZjbGksIGJ1ZiwgbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28oICZzcnYsCisgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJmxlbiwgZWNqcGFrZV9sZ2MsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvKCAmY2xpLCBidWYsIGxlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfZGVyaXZlX3NlY3JldCggJmNsaSwKKyAgICAgICAgICAgICAgICAgcG1zLCBzaXplb2YoIHBtcyApLCAmcG1zbGVuLCBlY2pwYWtlX2xnYywgTlVMTCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfd3JpdGVfcm91bmRfdHdvKCAmY2xpLAorICAgICAgICAgICAgICAgICBidWYsIHNpemVvZiggYnVmICksICZsZW4sIGVjanBha2VfbGdjLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggJnNydiwgYnVmLCBsZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQoICZzcnYsCisgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJmxlbiwgZWNqcGFrZV9sZ2MsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbGVuID09IHBtc2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGJ1ZiwgcG1zLCBsZW4gKSA9PSAwICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgRUNKUEFLRSB0ZXN0ICMyIChyZWZlcmVuY2UgaGFuZHNoYWtlKTogIiApOworCisgICAgLyogU2ltdWxhdGUgZ2VuZXJhdGlvbiBvZiByb3VuZCBvbmUgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIGVjanBha2VfdGVzdF9sb2FkKCAmY2xpLAorICAgICAgICAgICAgICAgIGVjanBha2VfdGVzdF94MSwgc2l6ZW9mKCBlY2pwYWtlX3Rlc3RfeDEgKSwKKyAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3RfeDIsIHNpemVvZiggZWNqcGFrZV90ZXN0X3gyICkgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY2pwYWtlX3Rlc3RfbG9hZCggJnNydiwKKyAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3RfeDMsIHNpemVvZiggZWNqcGFrZV90ZXN0X3gzICksCisgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X3g0LCBzaXplb2YoIGVjanBha2VfdGVzdF94NCApICkgKTsKKworICAgIC8qIFJlYWQgcm91bmQgb25lICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX29uZSggJnNydiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjanBha2VfdGVzdF9jbGlfb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZWNqcGFrZV90ZXN0X2NsaV9vbmUgKSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUoICZjbGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3Rfc3J2X29uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGVjanBha2VfdGVzdF9zcnZfb25lICkgKSA9PSAwICk7CisKKyAgICAvKiBTa2lwIGdlbmVyYXRpb24gb2Ygcm91bmQgdHdvLCByZWFkIHJvdW5kIHR3byAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oICZjbGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2pwYWtlX3Rlc3Rfc3J2X3R3bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGVjanBha2VfdGVzdF9zcnZfdHdvICkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvKCAmc3J2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNqcGFrZV90ZXN0X2NsaV90d28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBlY2pwYWtlX3Rlc3RfY2xpX3R3byApICkgPT0gMCApOworCisgICAgLyogU2VydmVyIGRlcml2ZXMgUE1TICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0KCAmc3J2LAorICAgICAgICAgICAgICAgICBidWYsIHNpemVvZiggYnVmICksICZsZW4sIGVjanBha2VfbGdjLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIGxlbiA9PSBzaXplb2YoIGVjanBha2VfdGVzdF9wbXMgKSApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGJ1ZiwgZWNqcGFrZV90ZXN0X3BtcywgbGVuICkgPT0gMCApOworCisgICAgbWVtc2V0KCBidWYsIDAsIGxlbiApOyAvKiBBdm9pZCBpbnRlcmZlcmVuY2VzIHdpdGggbmV4dCBzdGVwICovCisKKyAgICAvKiBDbGllbnQgZGVyaXZlcyBQTVMgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX2Rlcml2ZV9zZWNyZXQoICZjbGksCisgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJmxlbiwgZWNqcGFrZV9sZ2MsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbGVuID09IHNpemVvZiggZWNqcGFrZV90ZXN0X3BtcyApICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggYnVmLCBlY2pwYWtlX3Rlc3RfcG1zLCBsZW4gKSA9PSAwICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjanBha2VfZnJlZSggJmNsaSApOworICAgIG1iZWR0bHNfZWNqcGFrZV9mcmVlKCAmc3J2ICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldCA9IDE7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjdW5kZWYgVEVTVF9BU1NFUlQKKworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEICYmIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDSlBBS0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNwLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTFmMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNwLmMKQEAgLTAsMCArMSwyMDkyIEBACisvKgorICogIEVsbGlwdGljIGN1cnZlcyBvdmVyIEdGKHApOiBnZW5lcmljIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogUmVmZXJlbmNlczoKKyAqCisgKiBTRUMxIGh0dHA6Ly93d3cuc2VjZy5vcmcvaW5kZXgucGhwP2FjdGlvbj1zZWNnLGRvY3Nfc2VjZworICogR0VDQyA9IEd1aWRlIHRvIEVsbGlwdGljIEN1cnZlIENyeXB0b2dyYXBoeSAtIEhhbmtlcnNvbiwgTWVuZXplcywgVmFuc3RvbmUKKyAqIEZJUFMgMTg2LTMgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE4Ni0zL2ZpcHNfMTg2LTMucGRmCisgKiBSRkMgNDQ5MiBmb3IgdGhlIHJlbGF0ZWQgVExTIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cworICoKKyAqIFtDdXJ2ZTI1NTE5XSBodHRwOi8vY3IueXAudG8vZWNkaC9jdXJ2ZTI1NTE5LTIwMDYwMjA5LnBkZgorICoKKyAqIFsyXSBDT1JPTiwgSmVhbi1TJ2ViYXN0aWVuLiBSZXNpc3RhbmNlIGFnYWluc3QgZGlmZmVyZW50aWFsIHBvd2VyIGFuYWx5c2lzCisgKiAgICAgZm9yIGVsbGlwdGljIGN1cnZlIGNyeXB0b3N5c3RlbXMuIEluIDogQ3J5cHRvZ3JhcGhpYyBIYXJkd2FyZSBhbmQKKyAqICAgICBFbWJlZGRlZCBTeXN0ZW1zLiBTcHJpbmdlciBCZXJsaW4gSGVpZGVsYmVyZywgMTk5OS4gcC4gMjkyLTMwMi4KKyAqICAgICA8aHR0cDovL2xpbmsuc3ByaW5nZXIuY29tL2NoYXB0ZXIvMTAuMTAwNy8zLTU0MC00ODA1OS01XzI1PgorICoKKyAqIFszXSBIRURBQk9VLCBNdXN0YXBoYSwgUElORUwsIFBpZXJyZSwgZXQgQidFTidFVEVBVSwgTHVjaWVuLiBBIGNvbWIgbWV0aG9kIHRvCisgKiAgICAgcmVuZGVyIEVDQyByZXNpc3RhbnQgYWdhaW5zdCBTaWRlIENoYW5uZWwgQXR0YWNrcy4gSUFDUiBDcnlwdG9sb2d5CisgKiAgICAgZVByaW50IEFyY2hpdmUsIDIwMDQsIHZvbC4gMjAwNCwgcC4gMzQyLgorICogICAgIDxodHRwOi8vZXByaW50LmlhY3Iub3JnLzIwMDQvMzQyLnBkZj4KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpZiAoIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSApICYmIFwKKyAgICAhZGVmaW5lZChpbmxpbmUpICYmICFkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBDb3VudHMgb2YgcG9pbnQgYWRkaXRpb24gYW5kIGRvdWJsaW5nLCBhbmQgZmllbGQgbXVsdGlwbGljYXRpb25zLgorICogVXNlZCB0byB0ZXN0IHJlc2lzdGFuY2Ugb2YgcG9pbnQgbXVsdGlwbGljYXRpb24gdG8gc2ltcGxlIHRpbWluZyBhdHRhY2tzLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRfY291bnQsIGRibF9jb3VudCwgbXVsX2NvdW50OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCkgICB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCkgICB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCkgICB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKSB8fCAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorI2RlZmluZSBFQ1BfU0hPUlRXRUlFUlNUUkFTUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKyNkZWZpbmUgRUNQX01PTlRHT01FUlkKKyNlbmRpZgorCisvKgorICogQ3VydmUgdHlwZXM6IGludGVybmFsIGZvciBub3csIG1pZ2h0IGJlIGV4cG9zZWQgbGF0ZXIKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgRUNQX1RZUEVfTk9ORSA9IDAsCisgICAgRUNQX1RZUEVfU0hPUlRfV0VJRVJTVFJBU1MsICAgIC8qIHleMiA9IHheMyArIGEgeCArIGIgICAgICAqLworICAgIEVDUF9UWVBFX01PTlRHT01FUlksICAgICAgICAgICAvKiB5XjIgPSB4XjMgKyBhIHheMiArIHggICAgKi8KK30gZWNwX2N1cnZlX3R5cGU7CisKKy8qCisgKiBMaXN0IG9mIHN1cHBvcnRlZCBjdXJ2ZXM6CisgKiAgLSBpbnRlcm5hbCBJRAorICogIC0gVExTIE5hbWVkQ3VydmUgSUQgKFJGQyA0NDkyIHNlYy4gNS4xLjEsIFJGQyA3MDcxIHNlYy4gMikKKyAqICAtIHNpemUgaW4gYml0cworICogIC0gcmVhZGFibGUgbmFtZQorICoKKyAqIEN1cnZlcyBhcmUgbGlzdGVkIGluIG9yZGVyOiBsYXJnZXN0IGN1cnZlcyBmaXJzdCwgYW5kIGZvciBhIGdpdmVuIHNpemUsCisgKiBmYXN0ZXN0IGN1cnZlcyBmaXJzdC4gVGhpcyBwcm92aWRlcyB0aGUgZGVmYXVsdCBvcmRlciBmb3IgdGhlIFNTTCBtb2R1bGUuCisgKgorICogUmVtaW5kZXI6IHVwZGF0ZSBwcm9maWxlcyBpbiB4NTA5X2NydC5jIHdoZW4gYWRkaW5nIGEgbmV3IGN1cnZlcyEKKyAqLworc3RhdGljIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gZWNwX3N1cHBvcnRlZF9jdXJ2ZXNbXSA9Cit7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMSwgICAgMjUsICAgICA1MjEsICAgICJzZWNwNTIxcjEiICAgICAgICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMSwgICAgICAyOCwgICAgIDUxMiwgICAgImJyYWlucG9vbFA1MTJyMSIgICB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMSwgICAgMjQsICAgICAzODQsICAgICJzZWNwMzg0cjEiICAgICAgICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfQlAzODRSMSwgICAgICAyNywgICAgIDM4NCwgICAgImJyYWlucG9vbFAzODRyMSIgICB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwgICAgMjMsICAgICAyNTYsICAgICJzZWNwMjU2cjEiICAgICAgICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzEsICAgIDIyLCAgICAgMjU2LCAgICAic2VjcDI1NmsxIiAgICAgICAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX0JQMjU2UjEsICAgICAgMjYsICAgICAyNTYsICAgICJicmFpbnBvb2xQMjU2cjEiICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEsICAgIDIxLCAgICAgMjI0LCAgICAic2VjcDIyNHIxIiAgICAgICAgIH0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxLCAgICAyMCwgICAgIDIyNCwgICAgInNlY3AyMjRrMSIgICAgICAgICB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkKKyAgICB7IE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMSwgICAgMTksICAgICAxOTIsICAgICJzZWNwMTkycjEiICAgICAgICAgfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpCisgICAgeyBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzEsICAgIDE4LCAgICAgMTkyLCAgICAic2VjcDE5MmsxIiAgICAgICAgIH0sCisjZW5kaWYKKyAgICB7IE1CRURUTFNfRUNQX0RQX05PTkUsICAgICAgICAgIDAsICAgICAwLCAgICAgIE5VTEwgICAgICAgICAgICAgICAgfSwKK307CisKKyNkZWZpbmUgRUNQX05CX0NVUlZFUyAgIHNpemVvZiggZWNwX3N1cHBvcnRlZF9jdXJ2ZXMgKSAvICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZWNwX3N1cHBvcnRlZF9jdXJ2ZXNbMF0gKQorCitzdGF0aWMgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZWNwX3N1cHBvcnRlZF9ncnBfaWRbRUNQX05CX0NVUlZFU107CisKKy8qCisgKiBMaXN0IG9mIHN1cHBvcnRlZCBjdXJ2ZXMgYW5kIGFzc29jaWF0ZWQgaW5mbworICovCitjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICptYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCB2b2lkICkKK3sKKyAgICByZXR1cm4oIGVjcF9zdXBwb3J0ZWRfY3VydmVzICk7Cit9CisKKy8qCisgKiBMaXN0IG9mIHN1cHBvcnRlZCBjdXJ2ZXMsIGdyb3VwIElEIG9ubHkKKyAqLworY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKm1iZWR0bHNfZWNwX2dycF9pZF9saXN0KCB2b2lkICkKK3sKKyAgICBzdGF0aWMgaW50IGluaXRfZG9uZSA9IDA7CisKKyAgICBpZiggISBpbml0X2RvbmUgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBlY3Bfc3VwcG9ydGVkX2dycF9pZFtpKytdID0gY3VydmVfaW5mby0+Z3JwX2lkOworICAgICAgICB9CisgICAgICAgIGVjcF9zdXBwb3J0ZWRfZ3JwX2lkW2ldID0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKworICAgICAgICBpbml0X2RvbmUgPSAxOworICAgIH0KKworICAgIHJldHVybiggZWNwX3N1cHBvcnRlZF9ncnBfaWQgKTsKK30KKworLyoKKyAqIEdldCB0aGUgY3VydmUgaW5mbyBmb3IgdGhlIGludGVybmFsIGlkZW50aWZpZXIKKyAqLworY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworCisgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgIHsKKyAgICAgICAgaWYoIGN1cnZlX2luZm8tPmdycF9pZCA9PSBncnBfaWQgKQorICAgICAgICAgICAgcmV0dXJuKCBjdXJ2ZV9pbmZvICk7CisgICAgfQorCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGN1cnZlIGluZm8gZnJvbSB0aGUgVExTIGlkZW50aWZpZXIKKyAqLworY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZCggdWludDE2X3QgdGxzX2lkICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworCisgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgIHsKKyAgICAgICAgaWYoIGN1cnZlX2luZm8tPnRsc19pZCA9PSB0bHNfaWQgKQorICAgICAgICAgICAgcmV0dXJuKCBjdXJ2ZV9pbmZvICk7CisgICAgfQorCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGN1cnZlIGluZm8gZnJvbSB0aGUgbmFtZQorICovCitjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICptYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fbmFtZSggY29uc3QgY2hhciAqbmFtZSApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKworICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICB7CisgICAgICAgIGlmKCBzdHJjbXAoIGN1cnZlX2luZm8tPm5hbWUsIG5hbWUgKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggY3VydmVfaW5mbyApOworICAgIH0KKworICAgIHJldHVybiggTlVMTCApOworfQorCisvKgorICogR2V0IHRoZSB0eXBlIG9mIGEgY3VydmUKKyAqLworc3RhdGljIGlubGluZSBlY3BfY3VydmVfdHlwZSBlY3BfZ2V0X3R5cGUoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIGlmKCBncnAtPkcuWC5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIEVDUF9UWVBFX05PTkUgKTsKKworICAgIGlmKCBncnAtPkcuWS5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIEVDUF9UWVBFX01PTlRHT01FUlkgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiggRUNQX1RZUEVfU0hPUlRfV0VJRVJTVFJBU1MgKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgKHRoZSBjb21wb25lbnRzIG9mKSBhIHBvaW50CisgKi8KK3ZvaWQgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggbWJlZHRsc19lY3BfcG9pbnQgKnB0ICkKK3sKKyAgICBpZiggcHQgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZwdC0+WCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZwdC0+WSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZwdC0+WiApOworfQorCisvKgorICogSW5pdGlhbGl6ZSAodGhlIGNvbXBvbmVudHMgb2YpIGEgZ3JvdXAKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBpZiggZ3JwID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtZW1zZXQoIGdycCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2VjcF9ncm91cCApICk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplICh0aGUgY29tcG9uZW50cyBvZikgYSBrZXkgcGFpcgorICovCit2b2lkIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5ICkKK3sKKyAgICBpZigga2V5ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAma2V5LT5ncnAgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAma2V5LT5kICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJmtleS0+USApOworfQorCisvKgorICogVW5hbGxvY2F0ZSAodGhlIGNvbXBvbmVudHMgb2YpIGEgcG9pbnQKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKQoreworICAgIGlmKCBwdCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19tcGlfZnJlZSggJiggcHQtPlggKSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICYoIHB0LT5ZICkgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmKCBwdC0+WiApICk7Cit9CisKKy8qCisgKiBVbmFsbG9jYXRlICh0aGUgY29tcG9uZW50cyBvZikgYSBncm91cAorICovCit2b2lkIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIHNpemVfdCBpOworCisgICAgaWYoIGdycCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYoIGdycC0+aCAhPSAxICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZncnAtPlAgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJmdycC0+QSApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmZ3JwLT5CICk7CisgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZncnAtPkcgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJmdycC0+TiApOworICAgIH0KKworICAgIGlmKCBncnAtPlQgIT0gTlVMTCApCisgICAgeworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgZ3JwLT5UX3NpemU7IGkrKyApCisgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmZ3JwLT5UW2ldICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggZ3JwLT5UICk7CisgICAgfQorCisgICAgbWJlZHRsc196ZXJvaXplKCBncnAsIHNpemVvZiggbWJlZHRsc19lY3BfZ3JvdXAgKSApOworfQorCisvKgorICogVW5hbGxvY2F0ZSAodGhlIGNvbXBvbmVudHMgb2YpIGEga2V5IHBhaXIKKyAqLwordm9pZCBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSApCit7CisgICAgaWYoIGtleSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmtleS0+Z3JwICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmtleS0+ZCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZrZXktPlEgKTsKK30KKworLyoKKyAqIENvcHkgdGhlIGNvbnRlbnRzIG9mIGEgcG9pbnQKKyAqLworaW50IG1iZWR0bHNfZWNwX2NvcHkoIG1iZWR0bHNfZWNwX3BvaW50ICpQLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlAtPlgsICZRLT5YICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZQLT5ZLCAmUS0+WSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUC0+WiwgJlEtPlogKSApOworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhIGdyb3VwIG9iamVjdAorICovCitpbnQgbWJlZHRsc19lY3BfZ3JvdXBfY29weSggbWJlZHRsc19lY3BfZ3JvdXAgKmRzdCwgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKnNyYyApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoIGRzdCwgc3JjLT5pZCApOworfQorCisvKgorICogU2V0IHBvaW50IHRvIHplcm8KKyAqLworaW50IG1iZWR0bHNfZWNwX3NldF96ZXJvKCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZwdC0+WCAsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJnB0LT5ZICwgMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmcHQtPlogLCAwICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogVGVsbCBpZiBhIHBvaW50IGlzIHplcm8KKyAqLworaW50IG1iZWR0bHNfZWNwX2lzX3plcm8oIG1iZWR0bHNfZWNwX3BvaW50ICpwdCApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX21waV9jbXBfaW50KCAmcHQtPlosIDAgKSA9PSAwICk7Cit9CisKKy8qCisgKiBDb21wYXJlIHR3byBwb2ludHMgbGF6eWx5CisgKi8KK2ludCBtYmVkdGxzX2VjcF9wb2ludF9jbXAoIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEgKQoreworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC0+WCwgJlEtPlggKSA9PSAwICYmCisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLT5ZLCAmUS0+WSApID09IDAgJiYKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJlAtPlosICZRLT5aICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworfQorCisvKgorICogSW1wb3J0IGEgbm9uLXplcm8gcG9pbnQgZnJvbSBBU0NJSSBzdHJpbmdzCisgKi8KK2ludCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX3N0cmluZyggbWJlZHRsc19lY3BfcG9pbnQgKlAsIGludCByYWRpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKngsIGNvbnN0IGNoYXIgKnkgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUC0+WCwgcmFkaXgsIHggKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZQLT5ZLCByYWRpeCwgeSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmUC0+WiwgMSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEV4cG9ydCBhIHBvaW50IGludG8gdW5zaWduZWQgYmluYXJ5IGRhdGEgKFNFQzEgMi4zLjMpCisgKi8KK2ludCBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JtYXQsIHNpemVfdCAqb2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIGludCByZXQgPSAwOworICAgIHNpemVfdCBwbGVuOworCisgICAgaWYoIGZvcm1hdCAhPSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQgJiYKKyAgICAgICAgZm9ybWF0ICE9IE1CRURUTFNfRUNQX1BGX0NPTVBSRVNTRUQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBDb21tb24gY2FzZTogUCA9PSAwCisgICAgICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZQLT5aLCAwICkgPT0gMCApCisgICAgeworICAgICAgICBpZiggYnVmbGVuIDwgMSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAgICAgYnVmWzBdID0gMHgwMDsKKyAgICAgICAgKm9sZW4gPSAxOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIHBsZW4gPSBtYmVkdGxzX21waV9zaXplKCAmZ3JwLT5QICk7CisKKyAgICBpZiggZm9ybWF0ID09IE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCApCisgICAgeworICAgICAgICAqb2xlbiA9IDIgKiBwbGVuICsgMTsKKworICAgICAgICBpZiggYnVmbGVuIDwgKm9sZW4gKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgICAgIGJ1ZlswXSA9IDB4MDQ7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmUC0+WCwgYnVmICsgMSwgcGxlbiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmUC0+WSwgYnVmICsgMSArIHBsZW4sIHBsZW4gKSApOworICAgIH0KKyAgICBlbHNlIGlmKCBmb3JtYXQgPT0gTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRCApCisgICAgeworICAgICAgICAqb2xlbiA9IHBsZW4gKyAxOworCisgICAgICAgIGlmKCBidWZsZW4gPCAqb2xlbiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAgICAgYnVmWzBdID0gMHgwMiArIG1iZWR0bHNfbXBpX2dldF9iaXQoICZQLT5ZLCAwICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmUC0+WCwgYnVmICsgMSwgcGxlbiApICk7CisgICAgfQorCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBJbXBvcnQgYSBwb2ludCBmcm9tIHVuc2lnbmVkIGJpbmFyeSBkYXRhIChTRUMxIDIuMy40KQorICovCitpbnQgbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGlsZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IHBsZW47CisKKyAgICBpZiggaWxlbiA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGJ1ZlswXSA9PSAweDAwICkKKyAgICB7CisgICAgICAgIGlmKCBpbGVuID09IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBtYmVkdGxzX2VjcF9zZXRfemVybyggcHQgKSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIHBsZW4gPSBtYmVkdGxzX21waV9zaXplKCAmZ3JwLT5QICk7CisKKyAgICBpZiggYnVmWzBdICE9IDB4MDQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBpZiggaWxlbiAhPSAyICogcGxlbiArIDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJnB0LT5YLCBidWYgKyAxLCBwbGVuICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmcHQtPlksIGJ1ZiArIDEgKyBwbGVuLCBwbGVuICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZwdC0+WiwgMSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEltcG9ydCBhIHBvaW50IGZyb20gYSBUTFMgRUNQb2ludCByZWNvcmQgKFJGQyA0NDkyKQorICogICAgICBzdHJ1Y3QgeworICogICAgICAgICAgb3BhcXVlIHBvaW50IDwxLi4yXjgtMT47CisgKiAgICAgIH0gRUNQb2ludDsKKyAqLworaW50IG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqcHQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmLCBzaXplX3QgYnVmX2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBkYXRhX2xlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZfc3RhcnQ7CisKKyAgICAvKgorICAgICAqIFdlIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gYnl0ZXMgKDEgZm9yIGxlbmd0aCwgYXQgbGVhc3Qgb25lIGZvciBkYXRhKQorICAgICAqLworICAgIGlmKCBidWZfbGVuIDwgMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBkYXRhX2xlbiA9ICooKmJ1ZikrKzsKKyAgICBpZiggZGF0YV9sZW4gPCAxIHx8IGRhdGFfbGVuID4gYnVmX2xlbiAtIDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBTYXZlIGJ1ZmZlciBzdGFydCBmb3IgcmVhZF9iaW5hcnkgYW5kIHVwZGF0ZSBidWYKKyAgICAgKi8KKyAgICBidWZfc3RhcnQgPSAqYnVmOworICAgICpidWYgKz0gZGF0YV9sZW47CisKKyAgICByZXR1cm4gbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoIGdycCwgcHQsIGJ1Zl9zdGFydCwgZGF0YV9sZW4gKTsKK30KKworLyoKKyAqIEV4cG9ydCBhIHBvaW50IGFzIGEgVExTIEVDUG9pbnQgcmVjb3JkIChSRkMgNDQ5MikKKyAqICAgICAgc3RydWN0IHsKKyAqICAgICAgICAgIG9wYXF1ZSBwb2ludCA8MS4uMl44LTE+OworICogICAgICB9IEVDUG9pbnQ7CisgKi8KK2ludCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9ybWF0LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIC8qCisgICAgICogYnVmZmVyIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IG9uZSwgZm9yIG91ciBsZW5ndGggYnl0ZQorICAgICAqLworICAgIGlmKCBibGVuIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkoIGdycCwgcHQsIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgb2xlbiwgYnVmICsgMSwgYmxlbiAtIDEpICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKgorICAgICAqIHdyaXRlIGxlbmd0aCB0byB0aGUgZmlyc3QgYnl0ZSBhbmQgdXBkYXRlIHRvdGFsIGxlbmd0aAorICAgICAqLworICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAqb2xlbjsKKyAgICArKypvbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTZXQgYSBncm91cCBmcm9tIGFuIEVDUGFyYW1ldGVycyByZWNvcmQgKFJGQyA0NDkyKQorICovCitpbnQgbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCBsZW4gKQoreworICAgIHVpbnQxNl90IHRsc19pZDsKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworCisgICAgLyoKKyAgICAgKiBXZSBleHBlY3QgYXQgbGVhc3QgdGhyZWUgYnl0ZXMgKHNlZSBiZWxvdykKKyAgICAgKi8KKyAgICBpZiggbGVuIDwgMyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGJ5dGUgaXMgY3VydmVfdHlwZTsgb25seSBuYW1lZF9jdXJ2ZSBpcyBoYW5kbGVkCisgICAgICovCisgICAgaWYoICooKmJ1ZikrKyAhPSBNQkVEVExTX0VDUF9UTFNfTkFNRURfQ1VSVkUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBOZXh0IHR3byBieXRlcyBhcmUgdGhlIG5hbWVkY3VydmUgdmFsdWUKKyAgICAgKi8KKyAgICB0bHNfaWQgPSAqKCpidWYpKys7CisgICAgdGxzX2lkIDw8PSA4OworICAgIHRsc19pZCB8PSAqKCpidWYpKys7CisKKyAgICBpZiggKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZCggdGxzX2lkICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgcmV0dXJuIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoIGdycCwgY3VydmVfaW5mby0+Z3JwX2lkICk7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgRUNQYXJhbWV0ZXJzIHJlY29yZCBjb3JyZXNwb25kaW5nIHRvIGEgZ3JvdXAgKFJGQyA0NDkyKQorICovCitpbnQgbWJlZHRsc19lY3BfdGxzX3dyaXRlX2dyb3VwKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKworICAgIGlmKCAoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCBncnAtPmlkICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogV2UgYXJlIGdvaW5nIHRvIHdyaXRlIDMgYnl0ZXMgKHNlZSBiZWxvdykKKyAgICAgKi8KKyAgICAqb2xlbiA9IDM7CisgICAgaWYoIGJsZW4gPCAqb2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIC8qCisgICAgICogRmlyc3QgYnl0ZSBpcyBjdXJ2ZV90eXBlLCBhbHdheXMgbmFtZWRfY3VydmUKKyAgICAgKi8KKyAgICAqYnVmKysgPSBNQkVEVExTX0VDUF9UTFNfTkFNRURfQ1VSVkU7CisKKyAgICAvKgorICAgICAqIE5leHQgdHdvIGJ5dGVzIGFyZSB0aGUgbmFtZWRjdXJ2ZSB2YWx1ZQorICAgICAqLworICAgIGJ1ZlswXSA9IGN1cnZlX2luZm8tPnRsc19pZCA+PiA4OworICAgIGJ1ZlsxXSA9IGN1cnZlX2luZm8tPnRsc19pZCAmIDB4RkY7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFdyYXBwZXIgYXJvdW5kIGZhc3QgcXVhc2ktbW9kcCBmdW5jdGlvbnMsIHdpdGggZmFsbC1iYWNrIHRvIG1iZWR0bHNfbXBpX21vZF9tcGkuCisgKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2Ygc3RydWN0IG1iZWR0bHNfZWNwX2dyb3VwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIGNyaXRpYWwgbG9vcCBmb3IgbWJlZHRsc19lY3BfbXVsLCBzbyBwYXkgYXR0ZW50aW9uIHRvIHBlcmYuCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZHAoIG1iZWR0bHNfbXBpICpOLCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGdycC0+bW9kcCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX21waV9tb2RfbXBpKCBOLCBOLCAmZ3JwLT5QICkgKTsKKworICAgIC8qIE4tPnMgPCAwIGlzIGEgbXVjaCBmYXN0ZXIgdGVzdCwgd2hpY2ggZmFpbHMgb25seSBpZiBOIGlzIDAgKi8KKyAgICBpZiggKCBOLT5zIDwgMCAmJiBtYmVkdGxzX21waV9jbXBfaW50KCBOLCAwICkgIT0gMCApIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2JpdGxlbiggTiApID4gMiAqIGdycC0+cGJpdHMgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGdycC0+bW9kcCggTiApICk7CisKKyAgICAvKiBOLT5zIDwgMCBpcyBhIG11Y2ggZmFzdGVyIHRlc3QsIHdoaWNoIGZhaWxzIG9ubHkgaWYgTiBpcyAwICovCisgICAgd2hpbGUoIE4tPnMgPCAwICYmIG1iZWR0bHNfbXBpX2NtcF9pbnQoIE4sIDAgKSAhPSAwICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCBOLCBOLCAmZ3JwLT5QICkgKTsKKworICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCBOLCAmZ3JwLT5QICkgPj0gMCApCisgICAgICAgIC8qIHdlIGtub3duIFAsIE4gYW5kIHRoZSByZXN1bHQgYXJlIHBvc2l0aXZlICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2FicyggTiwgTiwgJmdycC0+UCApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEZhc3QgbW9kLXAgZnVuY3Rpb25zIGV4cGVjdCB0aGVpciBhcmd1bWVudCB0byBiZSBpbiB0aGUgMC4ucF4yIHJhbmdlLgorICoKKyAqIEluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IG9wZXJhbmRzIG9mCisgKiBtYmVkdGxzX21waV9tdWxfbXBpIGFyZSBpbiB0aGUgMC4ucCByYW5nZS4gU28sIGFmdGVyIGVhY2ggb3BlcmF0aW9uIHdlIHdpbGwKKyAqIGJyaW5nIHRoZSByZXN1bHQgYmFjayB0byB0aGlzIHJhbmdlLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBzaG9ydGN1dHMgZm9yIGRvaW5nIHRoYXQuCisgKi8KKworLyoKKyAqIFJlZHVjZSBhIG1iZWR0bHNfbXBpIG1vZCBwIGluLXBsYWNlLCBnZW5lcmFsIGNhc2UsIHRvIHVzZSBhZnRlciBtYmVkdGxzX21waV9tdWxfbXBpCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2RlZmluZSBJTkNfTVVMX0NPVU5UICAgbXVsX2NvdW50Kys7CisjZWxzZQorI2RlZmluZSBJTkNfTVVMX0NPVU5UCisjZW5kaWYKKworI2RlZmluZSBNT0RfTVVMKCBOICkgICAgZG8geyBNQkVEVExTX01QSV9DSEsoIGVjcF9tb2RwKCAmTiwgZ3JwICkgKTsgSU5DX01VTF9DT1VOVCB9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAwICkKKworLyoKKyAqIFJlZHVjZSBhIG1iZWR0bHNfbXBpIG1vZCBwIGluLXBsYWNlLCB0byB1c2UgYWZ0ZXIgbWJlZHRsc19tcGlfc3ViX21waQorICogTi0+cyA8IDAgaXMgYSB2ZXJ5IGZhc3QgdGVzdCwgd2hpY2ggZmFpbHMgb25seSBpZiBOIGlzIDAKKyAqLworI2RlZmluZSBNT0RfU1VCKCBOICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSggTi5zIDwgMCAmJiBtYmVkdGxzX21waV9jbXBfaW50KCAmTiwgMCApICE9IDAgKSAgIFwKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmTiwgJk4sICZncnAtPlAgKSApCisKKy8qCisgKiBSZWR1Y2UgYSBtYmVkdGxzX21waSBtb2QgcCBpbi1wbGFjZSwgdG8gdXNlIGFmdGVyIG1iZWR0bHNfbXBpX2FkZF9tcGkgYW5kIG1iZWR0bHNfbXBpX211bF9pbnQuCisgKiBXZSBrbm93biBQLCBOIGFuZCB0aGUgcmVzdWx0IGFyZSBwb3NpdGl2ZSwgc28gc3ViX2FicyBpcyBjb3JyZWN0LCBhbmQKKyAqIGEgYml0IGZhc3Rlci4KKyAqLworI2RlZmluZSBNT0RfQUREKCBOICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX21waSggJk4sICZncnAtPlAgKSA+PSAwICkgICAgICAgIFwKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfYWJzKCAmTiwgJk4sICZncnAtPlAgKSApCisKKyNpZiBkZWZpbmVkKEVDUF9TSE9SVFdFSUVSU1RSQVNTKQorLyoKKyAqIEZvciBjdXJ2ZXMgaW4gc2hvcnQgV2VpZXJzdHJhc3MgZm9ybSwgd2UgZG8gYWxsIHRoZSBpbnRlcm5hbCBvcGVyYXRpb25zIGluCisgKiBKYWNvYmlhbiBjb29yZGluYXRlcy4KKyAqCisgKiBGb3IgbXVsdGlwbGljYXRpb24sIHdlJ2xsIHVzZSBhIGNvbWIgbWV0aG9kIHdpdGggY291dGVybWVhc3VlcmVzIGFnYWluc3QKKyAqIFNQQSwgaGVuY2UgdGltaW5nIGF0dGFja3MuCisgKi8KKworLyoKKyAqIE5vcm1hbGl6ZSBqYWNvYmlhbiBjb29yZGluYXRlcyBzbyB0aGF0IFogPT0gMCB8fCBaID09IDEgIChHRUNDIDMuMi4xKQorICogQ29zdDogMU4gOj0gMUkgKyAzTSArIDFTCisgKi8KK3N0YXRpYyBpbnQgZWNwX25vcm1hbGl6ZV9qYWMoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpwdCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBaaSwgWlppOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZwdC0+WiwgMCApID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZaaSApOyBtYmVkdGxzX21waV9pbml0KCAmWlppICk7CisKKyAgICAvKgorICAgICAqIFggPSBYIC8gWl4yICBtb2QgcAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJlppLCAgICAgICZwdC0+WiwgICAgICZncnAtPlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlpaaSwgICAgICZaaSwgICAgICAgICZaaSAgICAgKSApOyBNT0RfTVVMKCBaWmkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZwdC0+WCwgICAmcHQtPlgsICAgICAmWlppICAgICkgKTsgTU9EX01VTCggcHQtPlggKTsKKworICAgIC8qCisgICAgICogWSA9IFkgLyBaXjMgIG1vZCBwCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmcHQtPlksICAgJnB0LT5ZLCAgICAgJlpaaSAgICApICk7IE1PRF9NVUwoIHB0LT5ZICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmcHQtPlksICAgJnB0LT5ZLCAgICAgJlppICAgICApICk7IE1PRF9NVUwoIHB0LT5ZICk7CisKKyAgICAvKgorICAgICAqIFogPSAxCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmcHQtPlosIDEgKSApOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlppICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaWmkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBOb3JtYWxpemUgamFjb2JpYW4gY29vcmRpbmF0ZXMgb2YgYW4gYXJyYXkgb2YgKHBvaW50ZXJzIHRvKSBwb2ludHMsCisgKiB1c2luZyBNb250Z29tZXJ5J3MgdHJpY2sgdG8gcGVyZm9ybSBvbmx5IG9uZSBpbnZlcnNpb24gbW9kIFAuCisgKiAoU2VlIGZvciBleGFtcGxlIENvaGVuJ3MgIkEgQ291cnNlIGluIENvbXB1dGF0aW9uYWwgQWxnZWJyYWljIE51bWJlcgorICogVGhlb3J5IiwgQWxnb3JpdGhtIDEwLjMuNC4pCisgKgorICogV2FybmluZzogZmFpbHMgKHJldHVybmluZyBhbiBlcnJvcikgaWYgb25lIG9mIHRoZSBwb2ludHMgaXMgemVybyEKKyAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc2VlIGNob2ljZSBvZiB3IGluIGVjcF9tdWxfY29tYigpLgorICoKKyAqIENvc3Q6IDFOKHQpIDo9IDFJICsgKDZ0IC0gMylNICsgMVMKKyAqLworc3RhdGljIGludCBlY3Bfbm9ybWFsaXplX2phY19tYW55KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCAqVFtdLCBzaXplX3QgdF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19tcGkgKmMsIHUsIFppLCBaWmk7CisKKyAgICBpZiggdF9sZW4gPCAyICkKKyAgICAgICAgcmV0dXJuKCBlY3Bfbm9ybWFsaXplX2phYyggZ3JwLCAqVCApICk7CisKKyAgICBpZiggKCBjID0gbWJlZHRsc19jYWxsb2MoIHRfbGVuLCBzaXplb2YoIG1iZWR0bHNfbXBpICkgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9BTExPQ19GQUlMRUQgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZ1ICk7IG1iZWR0bHNfbXBpX2luaXQoICZaaSApOyBtYmVkdGxzX21waV9pbml0KCAmWlppICk7CisKKyAgICAvKgorICAgICAqIGNbaV0gPSBaXzAgKiAuLi4gKiBaX2kKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZjWzBdLCAmVFswXS0+WiApICk7CisgICAgZm9yKCBpID0gMTsgaSA8IHRfbGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY1tpXSwgJmNbaS0xXSwgJlRbaV0tPlogKSApOworICAgICAgICBNT0RfTVVMKCBjW2ldICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1ID0gMSAvIChaXzAgKiAuLi4gKiBaX24pIG1vZCBQCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmdSwgJmNbdF9sZW4tMV0sICZncnAtPlAgKSApOworCisgICAgZm9yKCBpID0gdF9sZW4gLSAxOyA7IGktLSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBaaSA9IDEgLyBaX2kgbW9kIHAKKyAgICAgICAgICogdSA9IDEgLyAoWl8wICogLi4uICogWl9pKSBtb2QgUAorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGkgPT0gMCApIHsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlppLCAmdSApICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZaaSwgJnUsICZjW2ktMV0gICkgKTsgTU9EX01VTCggWmkgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJnUsICAmdSwgJlRbaV0tPlogKSApOyBNT0RfTVVMKCB1ICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBwcm9jZWVkIGFzIGluIG5vcm1hbGl6ZSgpCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZaWmksICAgICAmWmksICAgICAgJlppICApICk7IE1PRF9NVUwoIFpaaSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUW2ldLT5YLCAmVFtpXS0+WCwgJlpaaSApICk7IE1PRF9NVUwoIFRbaV0tPlggKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVFtpXS0+WSwgJlRbaV0tPlksICZaWmkgKSApOyBNT0RfTVVMKCBUW2ldLT5ZICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlRbaV0tPlksICZUW2ldLT5ZLCAmWmkgICkgKTsgTU9EX01VTCggVFtpXS0+WSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFBvc3QtcHJlY2Vzc2luZzogcmVjbGFpbSBzb21lIG1lbW9yeSBieSBzaHJpbmtpbmcgY29vcmRpbmF0ZXMKKyAgICAgICAgICogLSBub3Qgc3RvcmluZyBaIChhbHdheXMgMSkKKyAgICAgICAgICogLSBzaHJpbmtpbmcgb3RoZXIgY29vcmRpbmF0ZXMsIGJ1dCBzdGlsbCBrZWVwaW5nIHRoZSBzYW1lIG51bWJlciBvZgorICAgICAgICAgKiAgIGxpbWJzIGFzIFAsIGFzIG90aGVyd2lzZSBpdCB3aWxsIHRvbyBsaWtlbHkgYmUgcmVncm93biB0b28gZmFzdC4KKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hyaW5rKCAmVFtpXS0+WCwgZ3JwLT5QLm4gKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NocmluayggJlRbaV0tPlksIGdycC0+UC5uICkgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJlRbaV0tPlogKTsKKworICAgICAgICBpZiggaSA9PSAwICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworY2xlYW51cDoKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ1ICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaaSApOyBtYmVkdGxzX21waV9mcmVlKCAmWlppICk7CisgICAgZm9yKCBpID0gMDsgaSA8IHRfbGVuOyBpKysgKQorICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmY1tpXSApOworICAgIG1iZWR0bHNfZnJlZSggYyApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENvbmRpdGlvbmFsIHBvaW50IGludmVyc2lvbjogUSAtPiAtUSA9IChRLlgsIC1RLlksIFEuWikgd2l0aG91dCBsZWFrLgorICogImludiIgbXVzdCBiZSAwIChkb24ndCBpbnZlcnQpIG9yIDEgKGludmVydCkgb3IgdGhlIHJlc3VsdCB3aWxsIGJlIGludmFsaWQKKyAqLworc3RhdGljIGludCBlY3Bfc2FmZV9pbnZlcnRfamFjKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50ICpRLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW52ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgbm9uemVybzsKKyAgICBtYmVkdGxzX21waSBtUVk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmbVFZICk7CisKKyAgICAvKiBVc2UgdGhlIGZhY3QgdGhhdCAtUS5ZIG1vZCBQID0gUCAtIFEuWSB1bmxlc3MgUS5ZID09IDAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZtUVksICZncnAtPlAsICZRLT5ZICkgKTsKKyAgICBub256ZXJvID0gbWJlZHRsc19tcGlfY21wX2ludCggJlEtPlksIDAgKSAhPSAwOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggJlEtPlksICZtUVksIGludiAmIG5vbnplcm8gKSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZtUVkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBQb2ludCBkb3VibGluZyBSID0gMiBQLCBKYWNvYmlhbiBjb29yZGluYXRlcworICoKKyAqIEJhc2VkIG9uIGh0dHA6Ly93d3cuaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi5odG1sI2RvdWJsaW5nLWRibC0xOTk4LWNtby0yIC4KKyAqCisgKiBXZSBmb2xsb3cgdGhlIHZhcmlhYmxlIG5hbWluZyBmYWlybHkgY2xvc2VseS4gVGhlIGZvcm11bGEgdmFyaWF0aW9ucyB0aGF0IHRyYWRlIGEgTVVMIGZvciBhIFNRUgorICogKHBsdXMgYSBmZXcgQUREcykgYXJlbid0IHVzZWZ1bCBhcyBvdXIgYmlnbnVtIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggc3F1YXJpbmcuCisgKgorICogU3RhbmRhcmQgb3B0aW1pemF0aW9ucyBhcmUgYXBwbGllZCB3aGVuIGN1cnZlIHBhcmFtZXRlciBBIGlzIG9uZSBvZiB7IDAsIC0zIH0uCisgKgorICogQ29zdDogMUQgOj0gM00gKyA0UyAgICAgICAgICAoQSA9PSAgMCkKKyAqICAgICAgICAgICAgIDRNICsgNFMgICAgICAgICAgKEEgPT0gLTMpCisgKiAgICAgICAgICAgICAzTSArIDZTICsgMWEgICAgIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGVjcF9kb3VibGVfamFjKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIE0sIFMsIFQsIFU7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorICAgIGRibF9jb3VudCsrOworI2VuZGlmCisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmTSApOyBtYmVkdGxzX21waV9pbml0KCAmUyApOyBtYmVkdGxzX21waV9pbml0KCAmVCApOyBtYmVkdGxzX21waV9pbml0KCAmVSApOworCisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBBID0gLTMgKi8KKyAgICBpZiggZ3JwLT5BLnAgPT0gTlVMTCApCisgICAgeworICAgICAgICAvKiBNID0gMyhYICsgWl4yKShYIC0gWl4yKSAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLCAgJlAtPlosICAmUC0+WiAgICkgKTsgTU9EX01VTCggUyApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZULCAgJlAtPlgsICAmUyAgICAgICkgKTsgTU9EX0FERCggVCApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZVLCAgJlAtPlgsICAmUyAgICAgICkgKTsgTU9EX1NVQiggVSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLCAgJlQsICAgICAmVSAgICAgICkgKTsgTU9EX01VTCggUyApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9pbnQoICZNLCAgJlMsICAgICAzICAgICAgICkgKTsgTU9EX0FERCggTSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBNID0gMy5YXjIgKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUywgICZQLT5YLCAgJlAtPlggICApICk7IE1PRF9NVUwoIFMgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfaW50KCAmTSwgICZTLCAgICAgMyAgICAgICApICk7IE1PRF9BREQoIE0gKTsKKworICAgICAgICAvKiBPcHRpbWl6ZSBhd2F5IGZvciAia29ibGl0eiIgY3VydmVzIHdpdGggQSA9IDAgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZncnAtPkEsIDAgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTSArPSBBLlpeNCAqLworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUywgICZQLT5aLCAgJlAtPlogICApICk7IE1PRF9NVUwoIFMgKTsKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlQsICAmUywgICAgICZTICAgICAgKSApOyBNT0RfTVVMKCBUICk7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLCAgJlQsICAgICAmZ3JwLT5BICkgKTsgTU9EX01VTCggUyApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmTSwgICZNLCAgICAgJlMgICAgICApICk7IE1PRF9BREQoIE0gKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFMgPSA0LlguWV4yICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVCwgICZQLT5ZLCAgJlAtPlkgICApICk7IE1PRF9NVUwoIFQgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X2woICZULCAgMSAgICAgICAgICAgICAgICkgKTsgTU9EX0FERCggVCApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlMsICAmUC0+WCwgICZUICAgICAgKSApOyBNT0RfTVVMKCBTICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmUywgIDEgICAgICAgICAgICAgICApICk7IE1PRF9BREQoIFMgKTsKKworICAgIC8qIFUgPSA4LlleNCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlUsICAmVCwgICAgICZUICAgICAgKSApOyBNT0RfTVVMKCBVICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmVSwgIDEgICAgICAgICAgICAgICApICk7IE1PRF9BREQoIFUgKTsKKworICAgIC8qIFQgPSBNXjIgLSAyLlMgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZULCAgJk0sICAgICAmTSAgICAgICkgKTsgTU9EX01VTCggVCApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlQsICAmVCwgICAgICZTICAgICAgKSApOyBNT0RfU1VCKCBUICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmVCwgICZULCAgICAgJlMgICAgICApICk7IE1PRF9TVUIoIFQgKTsKKworICAgIC8qIFMgPSBNKFMgLSBUKSAtIFUgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZTLCAgJlMsICAgICAmVCAgICAgICkgKTsgTU9EX1NVQiggUyApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlMsICAmUywgICAgICZNICAgICAgKSApOyBNT0RfTVVMKCBTICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmUywgICZTLCAgICAgJlUgICAgICApICk7IE1PRF9TVUIoIFMgKTsKKworICAgIC8qIFUgPSAyLlkuWiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlUsICAmUC0+WSwgICZQLT5aICAgKSApOyBNT0RfTVVMKCBVICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmVSwgIDEgICAgICAgICAgICAgICApICk7IE1PRF9BREQoIFUgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlItPlgsICZUICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZSLT5ZLCAmUyApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUi0+WiwgJlUgKSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZNICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZTICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZVICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQWRkaXRpb246IFIgPSBQICsgUSwgbWl4ZWQgYWZmaW5lLUphY29iaWFuIGNvb3JkaW5hdGVzIChHRUNDIDMuMjIpCisgKgorICogVGhlIGNvb3JkaW5hdGVzIG9mIFEgbXVzdCBiZSBub3JtYWxpemVkICg9IGFmZmluZSksCisgKiBidXQgdGhvc2Ugb2YgUCBkb24ndCBuZWVkIHRvLiBSIGlzIG5vdCBub3JtYWxpemVkLgorICoKKyAqIFNwZWNpYWwgY2FzZXM6ICgxKSBQIG9yIFEgaXMgemVybywgKDIpIFIgaXMgemVybywgKDMpIFAgPT0gUS4KKyAqIE5vbmUgb2YgdGhlc2UgY2FzZXMgY2FuIGhhcHBlbiBhcyBpbnRlcm1lZGlhdGUgc3RlcCBpbiBlY3BfbXVsX2NvbWIoKToKKyAqIC0gYXQgZWFjaCBzdGVwLCBQLCBRIGFuZCBSIGFyZSBtdWx0aXBsZXMgb2YgdGhlIGJhc2UgcG9pbnQsIHRoZSBmYWN0b3IKKyAqICAgYmVpbmcgbGVzcyB0aGFuIGl0cyBvcmRlciwgc28gbm9uZSBvZiB0aGVtIGlzIHplcm87CisgKiAtIFEgaXMgYW4gb2RkIG11bHRpcGxlIG9mIHRoZSBiYXNlIHBvaW50LCBQIGFuIGV2ZW4gbXVsdGlwbGUsCisgKiAgIGR1ZSB0byB0aGUgY2hvaWNlIG9mIHByZWNvbXB1dGVkIHBvaW50cyBpbiB0aGUgbW9kaWZpZWQgY29tYiBtZXRob2QuCisgKiBTbyBicmFuY2hlcyBmb3IgdGhlc2UgY2FzZXMgZG8gbm90IGxlYWsgc2VjcmV0IGluZm9ybWF0aW9uLgorICoKKyAqIFdlIGFjY2VwdCBRLT5aIGJlaW5nIHVuc2V0IChzYXZpbmcgbWVtb3J5IGluIHRhYmxlcykgYXMgbWVhbmluZyAxLgorICoKKyAqIENvc3Q6IDFBIDo9IDhNICsgM1MKKyAqLworc3RhdGljIGludCBlY3BfYWRkX21peGVkKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpRICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIFQxLCBUMiwgVDMsIFQ0LCBYLCBZLCBaOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyAgICBhZGRfY291bnQrKzsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBUcml2aWFsIGNhc2VzOiBQID09IDAgb3IgUSA9PSAwIChjYXNlIDEpCisgICAgICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZQLT5aLCAwICkgPT0gMCApCisgICAgICAgIHJldHVybiggbWJlZHRsc19lY3BfY29weSggUiwgUSApICk7CisKKyAgICBpZiggUS0+Wi5wICE9IE5VTEwgJiYgbWJlZHRsc19tcGlfY21wX2ludCggJlEtPlosIDAgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX2VjcF9jb3B5KCBSLCBQICkgKTsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIFEgY29vcmRpbmF0ZXMgYXJlIG5vcm1hbGl6ZWQKKyAgICAgKi8KKyAgICBpZiggUS0+Wi5wICE9IE5VTEwgJiYgbWJlZHRsc19tcGlfY21wX2ludCggJlEtPlosIDEgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZUMSApOyBtYmVkdGxzX21waV9pbml0KCAmVDIgKTsgbWJlZHRsc19tcGlfaW5pdCggJlQzICk7IG1iZWR0bHNfbXBpX2luaXQoICZUNCApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMSwgICZQLT5aLCAgJlAtPlogKSApOyAgTU9EX01VTCggVDEgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMiwgICZUMSwgICAgJlAtPlogKSApOyAgTU9EX01VTCggVDIgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMSwgICZUMSwgICAgJlEtPlggKSApOyAgTU9EX01VTCggVDEgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMiwgICZUMiwgICAgJlEtPlkgKSApOyAgTU9EX01VTCggVDIgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZUMSwgICZUMSwgICAgJlAtPlggKSApOyAgTU9EX1NVQiggVDEgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZUMiwgICZUMiwgICAgJlAtPlkgKSApOyAgTU9EX1NVQiggVDIgKTsKKworICAgIC8qIFNwZWNpYWwgY2FzZXMgKDIpIGFuZCAoMykgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlQxLCAwICkgPT0gMCApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJlQyLCAwICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IGVjcF9kb3VibGVfamFjKCBncnAsIFIsIFAgKTsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZWNwX3NldF96ZXJvKCBSICk7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZaLCAgICZQLT5aLCAgJlQxICAgKSApOyAgTU9EX01VTCggWiAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMywgICZUMSwgICAgJlQxICAgKSApOyAgTU9EX01VTCggVDMgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUNCwgICZUMywgICAgJlQxICAgKSApOyAgTU9EX01VTCggVDQgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMywgICZUMywgICAgJlAtPlggKSApOyAgTU9EX01VTCggVDMgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9pbnQoICZUMSwgICZUMywgICAgMiAgICAgKSApOyAgTU9EX0FERCggVDEgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZYLCAgICZUMiwgICAgJlQyICAgKSApOyAgTU9EX01VTCggWCAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZYLCAgICZYLCAgICAgJlQxICAgKSApOyAgTU9EX1NVQiggWCAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZYLCAgICZYLCAgICAgJlQ0ICAgKSApOyAgTU9EX1NVQiggWCAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZUMywgICZUMywgICAgJlggICAgKSApOyAgTU9EX1NVQiggVDMgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMywgICZUMywgICAgJlQyICAgKSApOyAgTU9EX01VTCggVDMgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUNCwgICZUNCwgICAgJlAtPlkgKSApOyAgTU9EX01VTCggVDQgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZZLCAgICZUMywgICAgJlQ0ICAgKSApOyAgTU9EX1NVQiggWSAgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJlItPlgsICZYICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZSLT5ZLCAmWSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUi0+WiwgJlogKSApOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJlQxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZUMiApOyBtYmVkdGxzX21waV9mcmVlKCAmVDMgKTsgbWJlZHRsc19tcGlfZnJlZSggJlQ0ICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlogKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBSYW5kb21pemUgamFjb2JpYW4gY29vcmRpbmF0ZXM6CisgKiAoWCwgWSwgWikgLT4gKGxeMiBYLCBsXjMgWSwgbCBaKSBmb3IgcmFuZG9tIGwKKyAqIFRoaXMgaXMgc29ydCBvZiB0aGUgcmV2ZXJzZSBvcGVyYXRpb24gb2YgZWNwX25vcm1hbGl6ZV9qYWMoKS4KKyAqCisgKiBUaGlzIGNvdW50ZXJtZWFzdXJlIHdhcyBmaXJzdCBzdWdnZXN0ZWQgaW4gWzJdLgorICovCitzdGF0aWMgaW50IGVjcF9yYW5kb21pemVfamFjKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqcHQsCisgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBsLCBsbDsKKyAgICBzaXplX3QgcF9zaXplID0gKCBncnAtPnBiaXRzICsgNyApIC8gODsKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJmwgKTsgbWJlZHRsc19tcGlfaW5pdCggJmxsICk7CisKKyAgICAvKiBHZW5lcmF0ZSBsIHN1Y2ggdGhhdCAxIDwgbCA8IHAgKi8KKyAgICBkbworICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZsLCBwX3NpemUsIGZfcm5nLCBwX3JuZyApOworCisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmbCwgJmdycC0+UCApID49IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmbCwgMSApICk7CisKKyAgICAgICAgaWYoIGNvdW50KysgPiAxMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9SQU5ET01fRkFJTEVEICk7CisgICAgfQorICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCAmbCwgMSApIDw9IDAgKTsKKworICAgIC8qIFogPSBsICogWiAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJnB0LT5aLCAgICZwdC0+WiwgICAgICZsICApICk7IE1PRF9NVUwoIHB0LT5aICk7CisKKyAgICAvKiBYID0gbF4yICogWCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmxsLCAgICAgICZsLCAgICAgICAgICZsICApICk7IE1PRF9NVUwoIGxsICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmcHQtPlgsICAgJnB0LT5YLCAgICAgJmxsICkgKTsgTU9EX01VTCggcHQtPlggKTsKKworICAgIC8qIFkgPSBsXjMgKiBZICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmbGwsICAgICAgJmxsLCAgICAgICAgJmwgICkgKTsgTU9EX01VTCggbGwgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZwdC0+WSwgICAmcHQtPlksICAgICAmbGwgKSApOyBNT0RfTVVMKCBwdC0+WSApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZsICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZsbCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIENoZWNrIGFuZCBkZWZpbmUgcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBjb21iIG1ldGhvZCAoc2VlIGJlbG93IGZvciBkZXRhaWxzKQorICovCisjaWYgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgPCAyIHx8IE1CRURUTFNfRUNQX1dJTkRPV19TSVpFID4gNworI2Vycm9yICJNQkVEVExTX0VDUF9XSU5ET1dfU0laRSBvdXQgb2YgYm91bmRzIgorI2VuZGlmCisKKy8qIGQgPSBjZWlsKCBuIC8gdyApICovCisjZGVmaW5lIENPTUJfTUFYX0QgICAgICAoIE1CRURUTFNfRUNQX01BWF9CSVRTICsgMSApIC8gMgorCisvKiBudW1iZXIgb2YgcHJlY29tcHV0ZWQgcG9pbnRzICovCisjZGVmaW5lIENPTUJfTUFYX1BSRSAgICAoIDEgPDwgKCBNQkVEVExTX0VDUF9XSU5ET1dfU0laRSAtIDEgKSApCisKKy8qCisgKiBDb21wdXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiBtIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGggb3VyIGNvbWIgbWV0aG9kLgorICoKKyAqIFRoZSBiYXNpYyBjb21iIG1ldGhvZCBpcyBkZXNjcmliZWQgaW4gR0VDQyAzLjQ0IGZvciBleGFtcGxlLiBXZSB1c2UgYQorICogbW9kaWZpZWQgdmVyc2lvbiB0aGF0IHByb3ZpZGVzIHJlc2lzdGFuY2UgdG8gU1BBIGJ5IGF2b2lkaW5nIHplcm8KKyAqIGRpZ2l0cyBpbiB0aGUgcmVwcmVzZW50YXRpb24gYXMgaW4gWzNdLiBXZSBtb2RpZnkgdGhlIG1ldGhvZCBmdXJ0aGVyIGJ5CisgKiByZXF1aXJpbmcgdGhhdCBhbGwgS19pIGJlIG9kZCwgd2hpY2ggaGFzIHRoZSBzbWFsbCBjb3N0IHRoYXQgb3VyCisgKiByZXByZXNlbnRhdGlvbiB1c2VzIG9uZSBtb3JlIEtfaSwgZHVlIHRvIGNhcnJpZXMuCisgKgorICogQWxzbywgZm9yIHRoZSBzYWtlIG9mIGNvbXBhY3RuZXNzLCBvbmx5IHRoZSBzZXZlbiBsb3ctb3JkZXIgYml0cyBvZiB4W2ldCisgKiBhcmUgdXNlZCB0byByZXByZXNlbnQgS19pLCBhbmQgdGhlIG1zYiBvZiB4W2ldIGVuY29kZXMgdGhlIHRoZSBzaWduIChzX2kgaW4KKyAqIHRoZSBwYXBlcik6IGl0IGlzIHNldCBpZiBhbmQgb25seSBpZiBpZiBzX2kgPT0gLTE7CisgKgorICogQ2FsbGluZyBjb252ZW50aW9uczoKKyAqIC0geCBpcyBhbiBhcnJheSBvZiBzaXplIGQgKyAxCisgKiAtIHcgaXMgdGhlIHNpemUsIGllIG51bWJlciBvZiB0ZWV0aCwgb2YgdGhlIGNvbWIsIGFuZCBtdXN0IGJlIGJldHdlZW4KKyAqICAgMiBhbmQgNyAoaW4gcHJhY3RpY2UsIGJldHdlZW4gMiBhbmQgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUpCisgKiAtIG0gaXMgdGhlIE1QSSwgZXhwZWN0ZWQgdG8gYmUgb2RkIGFuZCBzdWNoIHRoYXQgYml0bGVuZ3RoKG0pIDw9IHcgKiBkCisgKiAgICh0aGUgcmVzdWx0IHdpbGwgYmUgaW5jb3JyZWN0IGlmIHRoZXNlIGFzc3VtcHRpb25zIGFyZSBub3Qgc2F0aXNmaWVkKQorICovCitzdGF0aWMgdm9pZCBlY3BfY29tYl9maXhlZCggdW5zaWduZWQgY2hhciB4W10sIHNpemVfdCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdywgY29uc3QgbWJlZHRsc19tcGkgKm0gKQoreworICAgIHNpemVfdCBpLCBqOworICAgIHVuc2lnbmVkIGNoYXIgYywgY2MsIGFkanVzdDsKKworICAgIG1lbXNldCggeCwgMCwgZCsxICk7CisKKyAgICAvKiBGaXJzdCBnZXQgdGhlIGNsYXNzaWNhbCBjb21iIHZhbHVlcyAoZXhjZXB0IGZvciB4X2QgPSAwKSAqLworICAgIGZvciggaSA9IDA7IGkgPCBkOyBpKysgKQorICAgICAgICBmb3IoIGogPSAwOyBqIDwgdzsgaisrICkKKyAgICAgICAgICAgIHhbaV0gfD0gbWJlZHRsc19tcGlfZ2V0X2JpdCggbSwgaSArIGQgKiBqICkgPDwgajsKKworICAgIC8qIE5vdyBtYWtlIHN1cmUgeF8xIC4uIHhfZCBhcmUgb2RkICovCisgICAgYyA9IDA7CisgICAgZm9yKCBpID0gMTsgaSA8PSBkOyBpKysgKQorICAgIHsKKyAgICAgICAgLyogQWRkIGNhcnJ5IGFuZCB1cGRhdGUgaXQgKi8KKyAgICAgICAgY2MgICA9IHhbaV0gJiBjOworICAgICAgICB4W2ldID0geFtpXSBeIGM7CisgICAgICAgIGMgPSBjYzsKKworICAgICAgICAvKiBBZGp1c3QgaWYgbmVlZGVkLCBhdm9pZGluZyBicmFuY2hlcyAqLworICAgICAgICBhZGp1c3QgPSAxIC0gKCB4W2ldICYgMHgwMSApOworICAgICAgICBjICAgfD0geFtpXSAmICggeFtpLTFdICogYWRqdXN0ICk7CisgICAgICAgIHhbaV0gPSB4W2ldIF4gKCB4W2ktMV0gKiBhZGp1c3QgKTsKKyAgICAgICAgeFtpLTFdIHw9IGFkanVzdCA8PCA3OworICAgIH0KK30KKworLyoKKyAqIFByZWNvbXB1dGUgcG9pbnRzIGZvciB0aGUgY29tYiBtZXRob2QKKyAqCisgKiBJZiBpID0gaV97dy0xfSAuLi4gaV8xIGlzIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgaSwgdGhlbgorICogVFtpXSA9IGlfe3ctMX0gMl57KHctMSlkfSBQICsgLi4uICsgaV8xIDJeZCBQICsgUAorICoKKyAqIFQgbXVzdCBiZSBhYmxlIHRvIGhvbGQgMl57dyAtIDF9IGVsZW1lbnRzCisgKgorICogQ29zdDogZCh3LTEpIEQgKyAoMl57dy0xfSAtIDEpIEEgKyAxIE4ody0xKSArIDEgTigyXnt3LTF9IC0gMSkKKyAqLworc3RhdGljIGludCBlY3BfcHJlY29tcHV0ZV9jb21iKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludCBUW10sIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHcsIHNpemVfdCBkICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgaSwgazsKKyAgICBzaXplX3QgajsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCAqY3VyLCAqVFRbQ09NQl9NQVhfUFJFIC0gMV07CisKKyAgICAvKgorICAgICAqIFNldCBUWzBdID0gUCBhbmQKKyAgICAgKiBUWzJee2wtMX1dID0gMl57ZGx9IFAgZm9yIGwgPSAxIC4uIHctMSAodGhpcyBpcyBub3QgdGhlIGZpbmFsIHZhbHVlKQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfY29weSggJlRbMF0sIFAgKSApOworCisgICAgayA9IDA7CisgICAgZm9yKCBpID0gMTsgaSA8ICggMVUgPDwgKCB3IC0gMSApICk7IGkgPDw9IDEgKQorICAgIHsKKyAgICAgICAgY3VyID0gVCArIGk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfY29weSggY3VyLCBUICsgKCBpID4+IDEgKSApICk7CisgICAgICAgIGZvciggaiA9IDA7IGogPCBkOyBqKysgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBlY3BfZG91YmxlX2phYyggZ3JwLCBjdXIsIGN1ciApICk7CisKKyAgICAgICAgVFRbaysrXSA9IGN1cjsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9ub3JtYWxpemVfamFjX21hbnkoIGdycCwgVFQsIGsgKSApOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSByZW1haW5pbmcgb25lcyB1c2luZyB0aGUgbWluaW1hbCBudW1iZXIgb2YgYWRkaXRpb25zCisgICAgICogQmUgY2FyZWZ1bCB0byB1cGRhdGUgVFsyXmxdIG9ubHkgYWZ0ZXIgdXNpbmcgaXQhCisgICAgICovCisgICAgayA9IDA7CisgICAgZm9yKCBpID0gMTsgaSA8ICggMVUgPDwgKCB3IC0gMSApICk7IGkgPDw9IDEgKQorICAgIHsKKyAgICAgICAgaiA9IGk7CisgICAgICAgIHdoaWxlKCBqLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9hZGRfbWl4ZWQoIGdycCwgJlRbaSArIGpdLCAmVFtqXSwgJlRbaV0gKSApOworICAgICAgICAgICAgVFRbaysrXSA9ICZUW2kgKyBqXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX25vcm1hbGl6ZV9qYWNfbWFueSggZ3JwLCBUVCwgayApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFNlbGVjdCBwcmVjb21wdXRlZCBwb2ludDogUiA9IHNpZ24oaSkgKiBUWyBhYnMoaSkgLyAyIF0KKyAqLworc3RhdGljIGludCBlY3Bfc2VsZWN0X2NvbWIoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50IFRbXSwgdW5zaWduZWQgY2hhciB0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGkgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBpaSwgajsKKworICAgIC8qIElnbm9yZSB0aGUgInNpZ24iIGJpdCBhbmQgc2NhbGUgZG93biAqLworICAgIGlpID0gICggaSAmIDB4N0Z1ICkgPj4gMTsKKworICAgIC8qIFJlYWQgdGhlIHdob2xlIHRhYmxlIHRvIHRod2FydCBjYWNoZS1iYXNlZCB0aW1pbmcgYXR0YWNrcyAqLworICAgIGZvciggaiA9IDA7IGogPCB0X2xlbjsgaisrICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggJlItPlgsICZUW2pdLlgsIGogPT0gaWkgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oICZSLT5ZLCAmVFtqXS5ZLCBqID09IGlpICkgKTsKKyAgICB9CisKKyAgICAvKiBTYWZlbHkgaW52ZXJ0IHJlc3VsdCBpZiBpIGlzICJuZWdhdGl2ZSIgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9zYWZlX2ludmVydF9qYWMoIGdycCwgUiwgaSA+PiA3ICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ29yZSBtdWx0aXBsaWNhdGlvbiBhbGdvcml0aG0gZm9yIHRoZSAobW9kaWZpZWQpIGNvbWIgbWV0aG9kLgorICogVGhpcyBwYXJ0IGlzIGFjdHVhbGx5IGNvbW1vbiB3aXRoIHRoZSBiYXNpYyBjb21iIG1ldGhvZCAoR0VDQyAzLjQ0KQorICoKKyAqIENvc3Q6IGQgQSArIGQgRCArIDEgUgorICovCitzdGF0aWMgaW50IGVjcF9tdWxfY29tYl9jb3JlKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50IFRbXSwgdW5zaWduZWQgY2hhciB0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgeFtdLCBzaXplX3QgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX3BvaW50IFR4aTsKKyAgICBzaXplX3QgaTsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZUeGkgKTsKKworICAgIC8qIFN0YXJ0IHdpdGggYSBub24temVybyBwb2ludCBhbmQgcmFuZG9taXplIGl0cyBjb29yZGluYXRlcyAqLworICAgIGkgPSBkOworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX3NlbGVjdF9jb21iKCBncnAsIFIsIFQsIHRfbGVuLCB4W2ldICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZSLT5aLCAxICkgKTsKKyAgICBpZiggZl9ybmcgIT0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggZWNwX3JhbmRvbWl6ZV9qYWMoIGdycCwgUiwgZl9ybmcsIHBfcm5nICkgKTsKKworICAgIHdoaWxlKCBpLS0gIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9kb3VibGVfamFjKCBncnAsIFIsIFIgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9zZWxlY3RfY29tYiggZ3JwLCAmVHhpLCBULCB0X2xlbiwgeFtpXSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggZWNwX2FkZF9taXhlZCggZ3JwLCBSLCBSLCAmVHhpICkgKTsKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlR4aSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIE11bHRpcGxpY2F0aW9uIHVzaW5nIHRoZSBjb21iIG1ldGhvZCwKKyAqIGZvciBjdXJ2ZXMgaW4gc2hvcnQgV2VpZXJzdHJhc3MgZm9ybQorICovCitzdGF0aWMgaW50IGVjcF9tdWxfY29tYiggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKm0sIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIHcsIG1faXNfb2RkLCBwX2VxX2csIHByZV9sZW4sIGk7CisgICAgc2l6ZV90IGQ7CisgICAgdW5zaWduZWQgY2hhciBrW0NPTUJfTUFYX0QgKyAxXTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCAqVDsKKyAgICBtYmVkdGxzX21waSBNLCBtbTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZNICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJm1tICk7CisKKyAgICAvKiB3ZSBuZWVkIE4gdG8gYmUgb2RkIHRvIHRybmFmb3JtIG0gaW4gYW4gb2RkIG51bWJlciwgY2hlY2sgbm93ICovCisgICAgaWYoIG1iZWR0bHNfbXBpX2dldF9iaXQoICZncnAtPk4sIDAgKSAhPSAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogTWluaW1pemUgdGhlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMsIHRoYXQgaXMgbWluaW1pemUKKyAgICAgKiAxMCAqIGQgKiB3ICsgMTggKiAyXih3LTEpICsgMTEgKiBkICsgNyAqIHcsIHdpdGggZCA9IGNlaWwoIG5iaXRzIC8gdyApCisgICAgICogKHNlZSBjb3N0cyBvZiB0aGUgdmFyaW91cyBwYXJ0cywgd2l0aCAxUyA9IDFNKQorICAgICAqLworICAgIHcgPSBncnAtPm5iaXRzID49IDM4NCA/IDUgOiA0OworCisgICAgLyoKKyAgICAgKiBJZiBQID09IEcsIHByZS1jb21wdXRlIGEgYml0IG1vcmUsIHNpbmNlIHRoaXMgbWF5IGJlIHJlLXVzZWQgbGF0ZXIuCisgICAgICogSnVzdCBhZGRpbmcgb25lIGF2b2lkcyB1cHBpbmcgdGhlIGNvc3Qgb2YgdGhlIGZpcnN0IG11bCB0b28gbXVjaCwKKyAgICAgKiBhbmQgdGhlIG1lbW9yeSBjb3N0IHRvby4KKyAgICAgKi8KKyNpZiBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSA9PSAxCisgICAgcF9lcV9nID0gKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC0+WSwgJmdycC0+Ry5ZICkgPT0gMCAmJgorICAgICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJlAtPlgsICZncnAtPkcuWCApID09IDAgKTsKKyAgICBpZiggcF9lcV9nICkKKyAgICAgICAgdysrOworI2Vsc2UKKyAgICBwX2VxX2cgPSAwOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE1ha2Ugc3VyZSB3IGlzIHdpdGhpbiBib3VuZHMuCisgICAgICogKFRoZSBsYXN0IHRlc3QgaXMgdXNlZnVsIG9ubHkgZm9yIHZlcnkgc21hbGwgY3VydmVzIGluIHRoZSB0ZXN0IHN1aXRlLikKKyAgICAgKi8KKyAgICBpZiggdyA+IE1CRURUTFNfRUNQX1dJTkRPV19TSVpFICkKKyAgICAgICAgdyA9IE1CRURUTFNfRUNQX1dJTkRPV19TSVpFOworICAgIGlmKCB3ID49IGdycC0+bmJpdHMgKQorICAgICAgICB3ID0gMjsKKworICAgIC8qIE90aGVyIHNpemVzIHRoYXQgZGVwZW5kIG9uIHcgKi8KKyAgICBwcmVfbGVuID0gMVUgPDwgKCB3IC0gMSApOworICAgIGQgPSAoIGdycC0+bmJpdHMgKyB3IC0gMSApIC8gdzsKKworICAgIC8qCisgICAgICogUHJlcGFyZSBwcmVjb21wdXRlZCBwb2ludHM6IGlmIFAgPT0gRyB3ZSB3YW50IHRvCisgICAgICogdXNlIGdycC0+VCBpZiBhbHJlYWR5IGluaXRpYWxpemVkLCBvciBpbml0aWFsaXplIGl0LgorICAgICAqLworICAgIFQgPSBwX2VxX2cgPyBncnAtPlQgOiBOVUxMOworCisgICAgaWYoIFQgPT0gTlVMTCApCisgICAgeworICAgICAgICBUID0gbWJlZHRsc19jYWxsb2MoIHByZV9sZW4sIHNpemVvZiggbWJlZHRsc19lY3BfcG9pbnQgKSApOworICAgICAgICBpZiggVCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0FMTE9DX0ZBSUxFRDsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggZWNwX3ByZWNvbXB1dGVfY29tYiggZ3JwLCBULCBQLCB3LCBkICkgKTsKKworICAgICAgICBpZiggcF9lcV9nICkKKyAgICAgICAgeworICAgICAgICAgICAgZ3JwLT5UID0gVDsKKyAgICAgICAgICAgIGdycC0+VF9zaXplID0gcHJlX2xlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIE0gaXMgb2RkIChNID0gbSBvciBNID0gTiAtIG0sIHNpbmNlIE4gaXMgb2RkKQorICAgICAqIHVzaW5nIHRoZSBmYWN0IHRoYXQgbSAqIFAgPSAtIChOIC0gbSkgKiBQCisgICAgICovCisgICAgbV9pc19vZGQgPSAoIG1iZWR0bHNfbXBpX2dldF9iaXQoIG0sIDAgKSA9PSAxICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmTSwgbSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmbW0sICZncnAtPk4sIG0gKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggJk0sICZtbSwgISBtX2lzX29kZCApICk7CisKKyAgICAvKgorICAgICAqIEdvIGZvciBjb21iIG11bHRpcGxpY2F0aW9uLCBSID0gTSAqIFAKKyAgICAgKi8KKyAgICBlY3BfY29tYl9maXhlZCggaywgZCwgdywgJk0gKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIGVjcF9tdWxfY29tYl9jb3JlKCBncnAsIFIsIFQsIHByZV9sZW4sIGssIGQsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICAvKgorICAgICAqIE5vdyBnZXQgbSAqIFAgZnJvbSBNICogUCBhbmQgbm9ybWFsaXplIGl0CisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBlY3Bfc2FmZV9pbnZlcnRfamFjKCBncnAsIFIsICEgbV9pc19vZGQgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX25vcm1hbGl6ZV9qYWMoIGdycCwgUiApICk7CisKK2NsZWFudXA6CisKKyAgICBpZiggVCAhPSBOVUxMICYmICEgcF9lcV9nICkKKyAgICB7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBwcmVfbGVuOyBpKysgKQorICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlRbaV0gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBUICk7CisgICAgfQorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJk0gKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmbW0gKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoIFIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBFQ1BfU0hPUlRXRUlFUlNUUkFTUyAqLworCisjaWYgZGVmaW5lZChFQ1BfTU9OVEdPTUVSWSkKKy8qCisgKiBGb3IgTW9udGdvbWVyeSBjdXJ2ZXMsIHdlIGRvIGFsbCB0aGUgaW50ZXJuYWwgYXJpdGhtZXRpYyBpbiBwcm9qZWN0aXZlCisgKiBjb29yZGluYXRlcy4gSW1wb3J0L2V4cG9ydCBvZiBwb2ludHMgdXNlcyBvbmx5IHRoZSB4IGNvb3JkaW5hdGVzLCB3aGljaCBpcworICogaW50ZXJuYWx5IHJlcHJlc2VudGVkIGFzIFggLyBaLgorICoKKyAqIEZvciBzY2FsYXIgbXVsdGlwbGljYXRpb24sIHdlJ2xsIHVzZSBhIE1vbnRnb21lcnkgbGFkZGVyLgorICovCisKKy8qCisgKiBOb3JtYWxpemUgTW9udGdvbWVyeSB4L3ogY29vcmRpbmF0ZXM6IFggPSBYL1osIFogPSAxCisgKiBDb3N0OiAxTSArIDFJCisgKi8KK3N0YXRpYyBpbnQgZWNwX25vcm1hbGl6ZV9teHooIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpQICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmUC0+WiwgJlAtPlosICZncnAtPlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlAtPlgsICZQLT5YLCAmUC0+WiApICk7IE1PRF9NVUwoIFAtPlggKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZQLT5aLCAxICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmFuZG9taXplIHByb2plY3RpdmUgeC96IGNvb3JkaW5hdGVzOgorICogKFgsIFopIC0+IChsIFgsIGwgWikgZm9yIHJhbmRvbSBsCisgKiBUaGlzIGlzIHNvcnQgb2YgdGhlIHJldmVyc2Ugb3BlcmF0aW9uIG9mIGVjcF9ub3JtYWxpemVfbXh6KCkuCisgKgorICogVGhpcyBjb3VudGVybWVhc3VyZSB3YXMgZmlyc3Qgc3VnZ2VzdGVkIGluIFsyXS4KKyAqIENvc3Q6IDJNCisgKi8KK3N0YXRpYyBpbnQgZWNwX3JhbmRvbWl6ZV9teHooIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgbDsKKyAgICBzaXplX3QgcF9zaXplID0gKCBncnAtPnBiaXRzICsgNyApIC8gODsKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJmwgKTsKKworICAgIC8qIEdlbmVyYXRlIGwgc3VjaCB0aGF0IDEgPCBsIDwgcCAqLworICAgIGRvCisgICAgeworICAgICAgICBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJmwsIHBfc2l6ZSwgZl9ybmcsIHBfcm5nICk7CisKKyAgICAgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZsLCAmZ3JwLT5QICkgPj0gMCApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZsLCAxICkgKTsKKworICAgICAgICBpZiggY291bnQrKyA+IDEwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX1JBTkRPTV9GQUlMRUQgKTsKKyAgICB9CisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZsLCAxICkgPD0gMCApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUC0+WCwgJlAtPlgsICZsICkgKTsgTU9EX01VTCggUC0+WCApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlAtPlosICZQLT5aLCAmbCApICk7IE1PRF9NVUwoIFAtPlogKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmbCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIERvdWJsZS1hbmQtYWRkOiBSID0gMlAsIFMgPSBQICsgUSwgd2l0aCBkID0gWChQIC0gUSksCisgKiBmb3IgTW9udGdvbWVyeSBjdXJ2ZXMgaW4geC96IGNvb3JkaW5hdGVzLgorICoKKyAqIGh0dHA6Ly93d3cuaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLWNvZGUvbW9udGdvbS94ei9sYWRkZXIvbWxhZGQtMTk4Ny1tLm9wMworICogd2l0aAorICogZCA9ICBYMQorICogUCA9IChYMiwgWjIpCisgKiBRID0gKFgzLCBaMykKKyAqIFIgPSAoWDQsIFo0KQorICogUyA9IChYNSwgWjUpCisgKiBhbmQgZWxpbWluYXRpbmcgdGVtcG9yYXJ5IHZhcmlhYmxlcyB0TywgLi4uLCB0NC4KKyAqCisgKiBDb3N0OiA1TSArIDRTCisgKi8KK3N0YXRpYyBpbnQgZWNwX2RvdWJsZV9hZGRfbXh6KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50ICpSLCBtYmVkdGxzX2VjcF9wb2ludCAqUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKmQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgQSwgQUEsIEIsIEJCLCBFLCBDLCBELCBEQSwgQ0I7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmQSApOyBtYmVkdGxzX21waV9pbml0KCAmQUEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmQkIgKTsgbWJlZHRsc19tcGlfaW5pdCggJkUgKTsgbWJlZHRsc19tcGlfaW5pdCggJkMgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmRCApOyBtYmVkdGxzX21waV9pbml0KCAmREEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkNCICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZBLCAgICAmUC0+WCwgICAmUC0+WiApICk7IE1PRF9BREQoIEEgICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZBQSwgICAmQSwgICAgICAmQSAgICApICk7IE1PRF9NVUwoIEFBICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZCLCAgICAmUC0+WCwgICAmUC0+WiApICk7IE1PRF9TVUIoIEIgICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZCQiwgICAmQiwgICAgICAmQiAgICApICk7IE1PRF9NVUwoIEJCICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZFLCAgICAmQUEsICAgICAmQkIgICApICk7IE1PRF9TVUIoIEUgICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZDLCAgICAmUS0+WCwgICAmUS0+WiApICk7IE1PRF9BREQoIEMgICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZELCAgICAmUS0+WCwgICAmUS0+WiApICk7IE1PRF9TVUIoIEQgICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZEQSwgICAmRCwgICAgICAmQSAgICApICk7IE1PRF9NVUwoIERBICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZDQiwgICAmQywgICAgICAmQiAgICApICk7IE1PRF9NVUwoIENCICAgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZTLT5YLCAmREEsICAgICAmQ0IgICApICk7IE1PRF9NVUwoIFMtPlggKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLT5YLCAmUy0+WCwgICAmUy0+WCApICk7IE1PRF9NVUwoIFMtPlggKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9tcGkoICZTLT5aLCAmREEsICAgICAmQ0IgICApICk7IE1PRF9TVUIoIFMtPlogKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLT5aLCAmUy0+WiwgICAmUy0+WiApICk7IE1PRF9NVUwoIFMtPlogKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZTLT5aLCBkLCAgICAgICAmUy0+WiApICk7IE1PRF9NVUwoIFMtPlogKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZSLT5YLCAmQUEsICAgICAmQkIgICApICk7IE1PRF9NVUwoIFItPlggKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZSLT5aLCAmZ3JwLT5BLCAmRSAgICApICk7IE1PRF9NVUwoIFItPlogKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9tcGkoICZSLT5aLCAmQkIsICAgICAmUi0+WiApICk7IE1PRF9BREQoIFItPlogKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZSLT5aLCAmRSwgICAgICAmUi0+WiApICk7IE1PRF9NVUwoIFItPlogKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQSApOyBtYmVkdGxzX21waV9mcmVlKCAmQUEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQkIgKTsgbWJlZHRsc19tcGlfZnJlZSggJkUgKTsgbWJlZHRsc19tcGlfZnJlZSggJkMgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmRCApOyBtYmVkdGxzX21waV9mcmVlKCAmREEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkNCICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogTXVsdGlwbGljYXRpb24gd2l0aCBNb250Z29tZXJ5IGxhZGRlciBpbiB4L3ogY29vcmRpbmF0ZXMsCisgKiBmb3IgY3VydmVzIGluIE1vbnRnb21lcnkgZm9ybQorICovCitzdGF0aWMgaW50IGVjcF9tdWxfbXh6KCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9wb2ludCAqUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICptLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIGNoYXIgYjsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBSUDsKKyAgICBtYmVkdGxzX21waSBQWDsKKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZSUCApOyBtYmVkdGxzX21waV9pbml0KCAmUFggKTsKKworICAgIC8qIFNhdmUgUFggYW5kIHJlYWQgZnJvbSBQIGJlZm9yZSB3cml0aW5nIHRvIFIsIGluIGNhc2UgUCA9PSBSICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmUFgsICZQLT5YICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2NvcHkoICZSUCwgUCApICk7CisKKyAgICAvKiBTZXQgUiB0byB6ZXJvIGluIG1vZGlmaWVkIHgveiBjb29yZGluYXRlcyAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlItPlgsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJlItPlosIDAgKSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZSLT5ZICk7CisKKyAgICAvKiBSUC5YIG1pZ2h0IGJlIHNsaWd0bHkgbGFyZ2VyIHRoYW4gUCwgc28gcmVkdWNlIGl0ICovCisgICAgTU9EX0FERCggUlAuWCApOworCisgICAgLyogUmFuZG9taXplIGNvb3JkaW5hdGVzIG9mIHRoZSBzdGFydGluZyBwb2ludCAqLworICAgIGlmKCBmX3JuZyAhPSBOVUxMICkKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBlY3BfcmFuZG9taXplX214eiggZ3JwLCAmUlAsIGZfcm5nLCBwX3JuZyApICk7CisKKyAgICAvKiBMb29wIGludmFyaWFudDogUiA9IHJlc3VsdCBzbyBmYXIsIFJQID0gUiArIFAgKi8KKyAgICBpID0gbWJlZHRsc19tcGlfYml0bGVuKCBtICk7IC8qIG9uZSBwYXN0IHRoZSAoemVyby1iYXNlZCkgbW9zdCBzaWduaWZpY2FudCBiaXQgKi8KKyAgICB3aGlsZSggaS0tID4gMCApCisgICAgeworICAgICAgICBiID0gbWJlZHRsc19tcGlfZ2V0X2JpdCggbSwgaSApOworICAgICAgICAvKgorICAgICAgICAgKiAgaWYgKGIpIFIgPSAyUiArIFAgZWxzZSBSID0gMlIsCisgICAgICAgICAqIHdoaWNoIGlzOgorICAgICAgICAgKiAgaWYgKGIpIGRvdWJsZV9hZGQoIFJQLCBSLCBSUCwgUiApCisgICAgICAgICAqICBlbHNlICAgZG91YmxlX2FkZCggUiwgUlAsIFIsIFJQICkKKyAgICAgICAgICogYnV0IHVzaW5nIHNhZmUgY29uZGl0aW9uYWwgc3dhcHMgdG8gYXZvaWQgbGVha3MKKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAoICZSLT5YLCAmUlAuWCwgYiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAoICZSLT5aLCAmUlAuWiwgYiApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggZWNwX2RvdWJsZV9hZGRfbXh6KCBncnAsIFIsICZSUCwgUiwgJlJQLCAmUFggKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCAmUi0+WCwgJlJQLlgsIGIgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwKCAmUi0+WiwgJlJQLlosIGIgKSApOworICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX25vcm1hbGl6ZV9teHooIGdycCwgUiApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlJQICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZQWCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIEVDUF9NT05UR09NRVJZICovCisKKy8qCisgKiBNdWx0aXBsaWNhdGlvbiBSID0gbSAqIFAKKyAqLworaW50IG1iZWR0bHNfZWNwX211bCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKm0sIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisKKyAgICAvKiBDb21tb24gc2FuaXR5IGNoZWNrcyAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmUC0+WiwgMSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggZ3JwLCBtICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCBncnAsIFAgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisjaWYgZGVmaW5lZChFQ1BfTU9OVEdPTUVSWSkKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9NT05UR09NRVJZICkKKyAgICAgICAgcmV0dXJuKCBlY3BfbXVsX214eiggZ3JwLCBSLCBtLCBQLCBmX3JuZywgcF9ybmcgKSApOworI2VuZGlmCisjaWYgZGVmaW5lZChFQ1BfU0hPUlRXRUlFUlNUUkFTUykKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9TSE9SVF9XRUlFUlNUUkFTUyApCisgICAgICAgIHJldHVybiggZWNwX211bF9jb21iKCBncnAsIFIsIG0sIFAsIGZfcm5nLCBwX3JuZyApICk7CisjZW5kaWYKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworfQorCisjaWYgZGVmaW5lZChFQ1BfU0hPUlRXRUlFUlNUUkFTUykKKy8qCisgKiBDaGVjayB0aGF0IGFuIGFmZmluZSBwb2ludCBpcyB2YWxpZCBhcyBhIHB1YmxpYyBrZXksCisgKiBzaG9ydCB3ZWllcnN0cmFzcyBjdXJ2ZXMgKFNFQzEgMy4yLjMuMSkKKyAqLworc3RhdGljIGludCBlY3BfY2hlY2tfcHVia2V5X3N3KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqcHQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19tcGkgWVksIFJIUzsKKworICAgIC8qIHB0IGNvb3JkaW5hdGVzIG11c3QgYmUgbm9ybWFsaXplZCBmb3Igb3VyIGNoZWNrcyAqLworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmcHQtPlgsIDAgKSA8IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX2ludCggJnB0LT5ZLCAwICkgPCAwIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZwdC0+WCwgJmdycC0+UCApID49IDAgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJnB0LT5ZLCAmZ3JwLT5QICkgPj0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZICk7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWVkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlJIUyApOworCisgICAgLyoKKyAgICAgKiBZWSA9IFleMgorICAgICAqIFJIUyA9IFggKFheMiArIEEpICsgQiA9IFheMyArIEEgWCArIEIKKyAgICAgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZZWSwgICZwdC0+WSwgICAmcHQtPlkgICkgKTsgIE1PRF9NVUwoIFlZICApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlJIUywgJnB0LT5YLCAgICZwdC0+WCAgKSApOyAgTU9EX01VTCggUkhTICk7CisKKyAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIEEgPSAtMyAqLworICAgIGlmKCBncnAtPkEucCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggJlJIUywgJlJIUywgMyAgICAgICApICk7ICBNT0RfU1VCKCBSSFMgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmUkhTLCAmUkhTLCAmZ3JwLT5BICkgKTsgIE1PRF9BREQoIFJIUyApOworICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlJIUywgJlJIUywgICAgICZwdC0+WCAgKSApOyAgTU9EX01VTCggUkhTICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmUkhTLCAmUkhTLCAgICAgJmdycC0+QiApICk7ICBNT0RfQUREKCBSSFMgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWVksICZSSFMgKSAhPSAwICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZOworCitjbGVhbnVwOgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJllZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZSSFMgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogRUNQX1NIT1JUV0VJRVJTVFJBU1MgKi8KKworLyoKKyAqIFIgPSBtICogUCB3aXRoIHNob3J0Y3V0cyBmb3IgbSA9PSAxIGFuZCBtID09IC0xCisgKiBOT1QgY29uc3RhbnQtdGltZSAtIE9OTFkgZm9yIHNob3J0IFdlaWVyc3RyYXNzIQorICovCitzdGF0aWMgaW50IG1iZWR0bHNfZWNwX211bF9zaG9ydGN1dHMoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX3BvaW50ICpSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waSAqbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKlAgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggbSwgMSApID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9jb3B5KCBSLCBQICkgKTsKKyAgICB9CisgICAgZWxzZSBpZiggbWJlZHRsc19tcGlfY21wX2ludCggbSwgLTEgKSA9PSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfY29weSggUiwgUCApICk7CisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfaW50KCAmUi0+WSwgMCApICE9IDAgKQorICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfbXBpKCAmUi0+WSwgJmdycC0+UCwgJlItPlkgKSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggZ3JwLCBSLCBtLCBQLCBOVUxMLCBOVUxMICkgKTsKKyAgICB9CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIExpbmVhciBjb21iaW5hdGlvbgorICogTk9UIGNvbnN0YW50LXRpbWUKKyAqLworaW50IG1iZWR0bHNfZWNwX211bGFkZCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfcG9pbnQgKlIsCisgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGkgKm0sIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpQLAorICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpICpuLCBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqUSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjcF9wb2ludCBtUDsKKworICAgIGlmKCBlY3BfZ2V0X3R5cGUoIGdycCApICE9IEVDUF9UWVBFX1NIT1JUX1dFSUVSU1RSQVNTICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJm1QICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bF9zaG9ydGN1dHMoIGdycCwgJm1QLCBtLCBQICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bF9zaG9ydGN1dHMoIGdycCwgUiwgICBuLCBRICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX2FkZF9taXhlZCggZ3JwLCBSLCAmbVAsIFIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZWNwX25vcm1hbGl6ZV9qYWMoIGdycCwgUiApICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJm1QICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisKKyNpZiBkZWZpbmVkKEVDUF9NT05UR09NRVJZKQorLyoKKyAqIENoZWNrIHZhbGlkaXR5IG9mIGEgcHVibGljIGtleSBmb3IgTW9udGdvbWVyeSBjdXJ2ZXMgd2l0aCB4LW9ubHkgc2NoZW1lcworICovCitzdGF0aWMgaW50IGVjcF9jaGVja19wdWJrZXlfbXgoIGNvbnN0IG1iZWR0bHNfZWNwX2dyb3VwICpncnAsIGNvbnN0IG1iZWR0bHNfZWNwX3BvaW50ICpwdCApCit7CisgICAgLyogW0N1cnZlMjU1MTkgcC4gNV0gSnVzdCBjaGVjayBYIGlzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcyAqLworICAgIGlmKCBtYmVkdGxzX21waV9zaXplKCAmcHQtPlggKSA+ICggZ3JwLT5uYml0cyArIDcgKSAvIDggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogRUNQX01PTlRHT01FUlkgKi8KKworLyoKKyAqIENoZWNrIHRoYXQgYSBwb2ludCBpcyB2YWxpZCBhcyBhIHB1YmxpYyBrZXkKKyAqLworaW50IG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggY29uc3QgbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgY29uc3QgbWJlZHRsc19lY3BfcG9pbnQgKnB0ICkKK3sKKyAgICAvKiBNdXN0IHVzZSBhZmZpbmUgY29vcmRpbmF0ZXMgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggJnB0LT5aLCAxICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZICk7CisKKyNpZiBkZWZpbmVkKEVDUF9NT05UR09NRVJZKQorICAgIGlmKCBlY3BfZ2V0X3R5cGUoIGdycCApID09IEVDUF9UWVBFX01PTlRHT01FUlkgKQorICAgICAgICByZXR1cm4oIGVjcF9jaGVja19wdWJrZXlfbXgoIGdycCwgcHQgKSApOworI2VuZGlmCisjaWYgZGVmaW5lZChFQ1BfU0hPUlRXRUlFUlNUUkFTUykKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9TSE9SVF9XRUlFUlNUUkFTUyApCisgICAgICAgIHJldHVybiggZWNwX2NoZWNrX3B1YmtleV9zdyggZ3JwLCBwdCApICk7CisjZW5kaWYKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworfQorCisvKgorICogQ2hlY2sgdGhhdCBhbiBtYmVkdGxzX21waSBpcyB2YWxpZCBhcyBhIHByaXZhdGUga2V5CisgKi8KK2ludCBtYmVkdGxzX2VjcF9jaGVja19wcml2a2V5KCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBjb25zdCBtYmVkdGxzX21waSAqZCApCit7CisjaWYgZGVmaW5lZChFQ1BfTU9OVEdPTUVSWSkKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9NT05UR09NRVJZICkKKyAgICB7CisgICAgICAgIC8qIHNlZSBbQ3VydmUyNTUxOV0gcGFnZSA1ICovCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9nZXRfYml0KCBkLCAwICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfZ2V0X2JpdCggZCwgMSApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2dldF9iaXQoIGQsIDIgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9iaXRsZW4oIGQgKSAtIDEgIT0gZ3JwLT5uYml0cyApIC8qIG1iZWR0bHNfbXBpX2JpdGxlbiBpcyBvbmUtYmFzZWQhICovCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogRUNQX01PTlRHT01FUlkgKi8KKyNpZiBkZWZpbmVkKEVDUF9TSE9SVFdFSUVSU1RSQVNTKQorICAgIGlmKCBlY3BfZ2V0X3R5cGUoIGdycCApID09IEVDUF9UWVBFX1NIT1JUX1dFSUVSU1RSQVNTICkKKyAgICB7CisgICAgICAgIC8qIHNlZSBTRUMxIDMuMiAqLworICAgICAgICBpZiggbWJlZHRsc19tcGlfY21wX2ludCggZCwgMSApIDwgMCB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggZCwgJmdycC0+TiApID49IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIEVDUF9TSE9SVFdFSUVSU1RSQVNTICovCisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworfQorCisvKgorICogR2VuZXJhdGUgYSBrZXlwYWlyIHdpdGggY29uZmlndXJhYmxlIGJhc2UgcG9pbnQKKyAqLworaW50IG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyX2Jhc2UoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9wb2ludCAqRywKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICpkLCBtYmVkdGxzX2VjcF9wb2ludCAqUSwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuX3NpemUgPSAoIGdycC0+bmJpdHMgKyA3ICkgLyA4OworCisjaWYgZGVmaW5lZChFQ1BfTU9OVEdPTUVSWSkKKyAgICBpZiggZWNwX2dldF90eXBlKCBncnAgKSA9PSBFQ1BfVFlQRV9NT05UR09NRVJZICkKKyAgICB7CisgICAgICAgIC8qIFtNMjI1XSBwYWdlIDUgKi8KKyAgICAgICAgc2l6ZV90IGI7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggZCwgbl9zaXplLCBmX3JuZywgcF9ybmcgKSApOworICAgICAgICB9IHdoaWxlKCBtYmVkdGxzX21waV9iaXRsZW4oIGQgKSA9PSAwKTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGlzIG5iaXRzICovCisgICAgICAgIGIgPSBtYmVkdGxzX21waV9iaXRsZW4oIGQgKSAtIDE7IC8qIG1iZWR0bHNfbXBpX2JpdGxlbiBpcyBvbmUtYmFzZWQgKi8KKyAgICAgICAgaWYoIGIgPiBncnAtPm5iaXRzICkKKyAgICAgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggZCwgYiAtIGdycC0+bmJpdHMgKSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NldF9iaXQoIGQsIGdycC0+bmJpdHMsIDEgKSApOworCisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgbGFzdCB0aHJlZSBiaXRzIGFyZSB1bnNldCAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NldF9iaXQoIGQsIDAsIDAgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NldF9iaXQoIGQsIDEsIDAgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NldF9iaXQoIGQsIDIsIDAgKSApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRUNQX01PTlRHT01FUlkgKi8KKyNpZiBkZWZpbmVkKEVDUF9TSE9SVFdFSUVSU1RSQVNTKQorICAgIGlmKCBlY3BfZ2V0X3R5cGUoIGdycCApID09IEVDUF9UWVBFX1NIT1JUX1dFSUVSU1RSQVNTICkKKyAgICB7CisgICAgICAgIC8qIFNFQzEgMy4yLjE6IEdlbmVyYXRlIGQgc3VjaCB0aGF0IDEgPD0gbiA8IE4gKi8KKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBybmRbTUJFRFRMU19FQ1BfTUFYX0JZVEVTXTsKKworICAgICAgICAvKgorICAgICAgICAgKiBNYXRjaCB0aGUgcHJvY2VkdXJlIGdpdmVuIGluIFJGQyA2OTc5IChkZXRlcm1pbmlzdGljIEVDRFNBKToKKyAgICAgICAgICogLSB1c2UgdGhlIHNhbWUgYnl0ZSBvcmRlcmluZzsKKyAgICAgICAgICogLSBrZWVwIHRoZSBsZWZ0bW9zdCBuYml0cyBiaXRzIG9mIHRoZSBnZW5lcmF0ZWQgb2N0ZXQgc3RyaW5nOworICAgICAgICAgKiAtIHRyeSB1bnRpbCByZXN1bHQgaXMgaW4gdGhlIGRlc2lyZWQgcmFuZ2UuCisgICAgICAgICAqIFRoaXMgYWxzbyBhdm9pZHMgYW55IGJpYWlzLCB3aGljaCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgRUNEU0EuCisgICAgICAgICAqLworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIGZfcm5nKCBwX3JuZywgcm5kLCBuX3NpemUgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggZCwgcm5kLCBuX3NpemUgKSApOworICAgICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCBkLCA4ICogbl9zaXplIC0gZ3JwLT5uYml0cyApICk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBFYWNoIHRyeSBoYXMgYXQgd29yc3QgYSBwcm9iYWJpbGl0eSAxLzIgb2YgZmFpbGluZyAodGhlIG1zYiBoYXMKKyAgICAgICAgICAgICAqIGEgcHJvYmFiaWxpdHkgMS8yIG9mIGJlaW5nIDAsIGFuZCB0aGVuIHRoZSByZXN1bHQgd2lsbCBiZSA8IE4pLAorICAgICAgICAgICAgICogc28gYWZ0ZXIgMzAgdHJpZXMgZmFpbHVyZSBwcm9iYWJpbGl0eSBpcyBhIG1vc3QgMioqKC0zMCkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogRm9yIG1vc3QgY3VydmVzLCAxIHRyeSBpcyBlbm91Z2ggd2l0aCBvdmVyd2hlbG1pbmcgcHJvYmFiaWxpdHksCisgICAgICAgICAgICAgKiBzaW5jZSBOIHN0YXJ0cyB3aXRoIGEgbG90IG9mIDFzIGluIGJpbmFyeSwgYnV0IHNvbWUgY3VydmVzCisgICAgICAgICAgICAgKiBzdWNoIGFzIHNlY3AyMjRrMSBhcmUgYWN0dWFsbHkgdmVyeSBjbG9zZSB0byB0aGUgd29yc3QgY2FzZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYoICsrY291bnQgPiAzMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRCApOworICAgICAgICB9CisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfaW50KCBkLCAxICkgPCAwIHx8CisgICAgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCBkLCAmZ3JwLT5OICkgPj0gMCApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRUNQX1NIT1JUV0VJRVJTVFJBU1MgKi8KKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEgKTsKKworY2xlYW51cDoKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX2VjcF9tdWwoIGdycCwgUSwgZCwgRywgZl9ybmcsIHBfcm5nICkgKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIGtleSBwYWlyLCB3cmFwcGVyIGZvciBjb252ZW50aW9uYWwgYmFzZSBwb2ludAorICovCitpbnQgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbXBpICpkLCBtYmVkdGxzX2VjcF9wb2ludCAqUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcl9iYXNlKCBncnAsICZncnAtPkcsIGQsIFEsIGZfcm5nLCBwX3JuZyApICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhIGtleXBhaXIsIHByZXR0aWVyIHdyYXBwZXIKKyAqLworaW50IG1iZWR0bHNfZWNwX2dlbl9rZXkoIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCwgbWJlZHRsc19lY3Bfa2V5cGFpciAqa2V5LAorICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAma2V5LT5ncnAsIGdycF9pZCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfZWNwX2dlbl9rZXlwYWlyKCAma2V5LT5ncnAsICZrZXktPmQsICZrZXktPlEsIGZfcm5nLCBwX3JuZyApICk7Cit9CisKKy8qCisgKiBDaGVjayBhIHB1YmxpYy1wcml2YXRlIGtleSBwYWlyCisgKi8KK2ludCBtYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdiggY29uc3QgbWJlZHRsc19lY3Bfa2V5cGFpciAqcHViLCBjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICpwcnYgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUTsKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisKKyAgICBpZiggcHViLT5ncnAuaWQgPT0gTUJFRFRMU19FQ1BfRFBfTk9ORSB8fAorICAgICAgICBwdWItPmdycC5pZCAhPSBwcnYtPmdycC5pZCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmcHViLT5RLlgsICZwcnYtPlEuWCApIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZwdWItPlEuWSwgJnBydi0+US5ZICkgfHwKKyAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJnB1Yi0+US5aLCAmcHJ2LT5RLlogKSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZRICk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworCisgICAgLyogbWJlZHRsc19lY3BfbXVsKCkgbmVlZHMgYSBub24tY29uc3QgZ3JvdXAuLi4gKi8KKyAgICBtYmVkdGxzX2VjcF9ncm91cF9jb3B5KCAmZ3JwLCAmcHJ2LT5ncnAgKTsKKworICAgIC8qIEFsc28gY2hlY2tzIGQgaXMgdmFsaWQgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlEsICZwcnYtPmQsICZwcnYtPmdycC5HLCBOVUxMLCBOVUxMICkgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUS5YLCAmcHJ2LT5RLlggKSB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmUS5ZLCAmcHJ2LT5RLlkgKSB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmUS5aLCAmcHJ2LT5RLlogKSApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlEgKTsKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19lY3Bfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUiwgUDsKKyAgICBtYmVkdGxzX21waSBtOworICAgIHVuc2lnbmVkIGxvbmcgYWRkX2NfcHJldiwgZGJsX2NfcHJldiwgbXVsX2NfcHJldjsKKyAgICAvKiBleHBvbmVudHMgZXNwZWNpYWxseSBhZGFwdGVkIGZvciBzZWNwMTkycjEgKi8KKyAgICBjb25zdCBjaGFyICpleHBvbmVudHNbXSA9CisgICAgeworICAgICAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwgLyogb25lICovCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzAiLCAvKiBOIC0gMSAqLworICAgICAgICAiNUVBNkYzODlBMzhCOEJDODFFNzY3NzUzQjE1QUE1NTY5RTE3ODJFMzBBQkU3RDI1IiwgLyogcmFuZG9tICovCisgICAgICAgICI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCAvKiBvbmUgYW5kIHplcm9zICovCisgICAgICAgICI3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLCAvKiBhbGwgb25lcyAqLworICAgICAgICAiNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1IiwgLyogMTAxMDEwLi4uICovCisgICAgfTsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUiApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZQICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJm0gKTsKKworICAgIC8qIFVzZSBzZWNwMTkycjEgaWYgYXZhaWxhYmxlLCBvciBhbnkgYXZhaWxhYmxlIGN1cnZlICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMSApICk7CisjZWxzZQorICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpLT5ncnBfaWQgKSApOworI2VuZGlmCisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVDUCB0ZXN0ICMxIChjb25zdGFudCBvcF9jb3VudCwgYmFzZSBwb2ludCBHKTogIiApOworCisgICAgLyogRG8gYSBkdW1teSBtdWx0aXBsaWNhdGlvbiBmaXJzdCB0byB0cmlnZ2VyIHByZWNvbXB1dGF0aW9uICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmbSwgMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZQLCAmbSwgJmdycC5HLCBOVUxMLCBOVUxMICkgKTsKKworICAgIGFkZF9jb3VudCA9IDA7CisgICAgZGJsX2NvdW50ID0gMDsKKyAgICBtdWxfY291bnQgPSAwOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZtLCAxNiwgZXhwb25lbnRzWzBdICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZtLCAmZ3JwLkcsIE5VTEwsIE5VTEwgKSApOworCisgICAgZm9yKCBpID0gMTsgaSA8IHNpemVvZiggZXhwb25lbnRzICkgLyBzaXplb2YoIGV4cG9uZW50c1swXSApOyBpKysgKQorICAgIHsKKyAgICAgICAgYWRkX2NfcHJldiA9IGFkZF9jb3VudDsKKyAgICAgICAgZGJsX2NfcHJldiA9IGRibF9jb3VudDsKKyAgICAgICAgbXVsX2NfcHJldiA9IG11bF9jb3VudDsKKyAgICAgICAgYWRkX2NvdW50ID0gMDsKKyAgICAgICAgZGJsX2NvdW50ID0gMDsKKyAgICAgICAgbXVsX2NvdW50ID0gMDsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmbSwgMTYsIGV4cG9uZW50c1tpXSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJm0sICZncnAuRywgTlVMTCwgTlVMTCApICk7CisKKyAgICAgICAgaWYoIGFkZF9jb3VudCAhPSBhZGRfY19wcmV2IHx8CisgICAgICAgICAgICBkYmxfY291bnQgIT0gZGJsX2NfcHJldiB8fAorICAgICAgICAgICAgbXVsX2NvdW50ICE9IG11bF9jX3ByZXYgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCAoJXUpXG4iLCAodW5zaWduZWQgaW50KSBpICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgRUNQIHRlc3QgIzIgKGNvbnN0YW50IG9wX2NvdW50LCBvdGhlciBwb2ludCk6ICIgKTsKKyAgICAvKiBXZSBjb21wdXRlZCBQID0gMkcgbGFzdCB0aW1lLCB1c2UgaXQgKi8KKworICAgIGFkZF9jb3VudCA9IDA7CisgICAgZGJsX2NvdW50ID0gMDsKKyAgICBtdWxfY291bnQgPSAwOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZtLCAxNiwgZXhwb25lbnRzWzBdICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZtLCAmUCwgTlVMTCwgTlVMTCApICk7CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgc2l6ZW9mKCBleHBvbmVudHMgKSAvIHNpemVvZiggZXhwb25lbnRzWzBdICk7IGkrKyApCisgICAgeworICAgICAgICBhZGRfY19wcmV2ID0gYWRkX2NvdW50OworICAgICAgICBkYmxfY19wcmV2ID0gZGJsX2NvdW50OworICAgICAgICBtdWxfY19wcmV2ID0gbXVsX2NvdW50OworICAgICAgICBhZGRfY291bnQgPSAwOworICAgICAgICBkYmxfY291bnQgPSAwOworICAgICAgICBtdWxfY291bnQgPSAwOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZtLCAxNiwgZXhwb25lbnRzW2ldICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmbSwgJlAsIE5VTEwsIE5VTEwgKSApOworCisgICAgICAgIGlmKCBhZGRfY291bnQgIT0gYWRkX2NfcHJldiB8fAorICAgICAgICAgICAgZGJsX2NvdW50ICE9IGRibF9jX3ByZXYgfHwKKyAgICAgICAgICAgIG11bF9jb3VudCAhPSBtdWxfY19wcmV2ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgKCV1KVxuIiwgKHVuc2lnbmVkIGludCkgaSApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKK2NsZWFudXA6CisKKyAgICBpZiggcmV0IDwgMCAmJiB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlVuZXhwZWN0ZWQgZXJyb3IsIHJldHVybiBjb2RlID0gJTA4WFxuIiwgcmV0ICk7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlIgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZtICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNwX2N1cnZlcy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZWNwX2N1cnZlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNmU4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lY3BfY3VydmVzLmMKQEAgLTAsMCArMSwxMzI1IEBACisvKgorICogIEVsbGlwdGljIGN1cnZlcyBvdmVyIEdGKHApOiBjdXJ2ZS1zcGVjaWZpYyBkYXRhIGFuZCBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICggZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IGRlZmluZWQoX01TQ19WRVIpICkgJiYgXAorICAgICFkZWZpbmVkKGlubGluZSkgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2VuZGlmCisKKy8qCisgKiBDb252ZXJzaW9uIG1hY3JvcyBmb3IgZW1iZWRkZWQgY29uc3RhbnRzOgorICogYnVpbGQgbGlzdHMgb2YgbWJlZHRsc19tcGlfdWludCdzIGZyb20gbGlzdHMgb2YgdW5zaWduZWQgY2hhcidzIGdyb3VwZWQgYnkgOCwgNCBvciAyCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9JTlQzMikKKworI2RlZmluZSBCWVRFU19UT19UX1VJTlRfNCggYSwgYiwgYywgZCApICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBhIDw8ICAwICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGIgPDwgIDggKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgYyA8PCAxNiApIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBkIDw8IDI0ICkKKworI2RlZmluZSBCWVRFU19UT19UX1VJTlRfMiggYSwgYiApICAgICAgICAgICAgICAgICAgIFwKKyAgICBCWVRFU19UT19UX1VJTlRfNCggYSwgYiwgMCwgMCApCisKKyNkZWZpbmUgQllURVNfVE9fVF9VSU5UXzgoIGEsIGIsIGMsIGQsIGUsIGYsIGcsIGggKSBcCisgICAgQllURVNfVE9fVF9VSU5UXzQoIGEsIGIsIGMsIGQgKSwgICAgICAgICAgICAgICAgXAorICAgIEJZVEVTX1RPX1RfVUlOVF80KCBlLCBmLCBnLCBoICkKKworI2Vsc2UgLyogNjQtYml0cyAqLworCisjZGVmaW5lIEJZVEVTX1RPX1RfVUlOVF84KCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoICkgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGEgPDwgIDAgKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgYiA8PCAgOCApIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBjIDw8IDE2ICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGQgPDwgMjQgKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgZSA8PCAzMiApIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIChtYmVkdGxzX21waV91aW50KSBmIDw8IDQwICkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggKG1iZWR0bHNfbXBpX3VpbnQpIGcgPDwgNDggKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAobWJlZHRsc19tcGlfdWludCkgaCA8PCA1NiApCisKKyNkZWZpbmUgQllURVNfVE9fVF9VSU5UXzQoIGEsIGIsIGMsIGQgKSAgICAgICAgICAgICBcCisgICAgQllURVNfVE9fVF9VSU5UXzgoIGEsIGIsIGMsIGQsIDAsIDAsIDAsIDAgKQorCisjZGVmaW5lIEJZVEVTX1RPX1RfVUlOVF8yKCBhLCBiICkgICAgICAgICAgICAgICAgICAgXAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCBhLCBiLCAwLCAwLCAwLCAwLCAwLCAwICkKKworI2VuZGlmIC8qIGJpdHMgaW4gbWJlZHRsc19tcGlfdWludCAqLworCisvKgorICogTm90ZTogdGhlIGNvbnN0YW50cyBhcmUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlcgorICogdG8gYmUgZGlyZWN0bHkgdXNhYmxlIGluIE1QSXMKKyAqLworCisvKgorICogRG9tYWluIHBhcmFtZXRlcnMgZm9yIHNlY3AxOTJyMQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJyMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MnIxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCMSwgMHhCOSwgMHg0NiwgMHhDMSwgMHhFQywgMHhERSwgMHhCOCwgMHhGRSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQ5LCAweDMwLCAweDI0LCAweDcyLCAweEFCLCAweEU5LCAweEE3LCAweDBGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTcsIDB4ODAsIDB4OUMsIDB4RTUsIDB4MTksIDB4MDUsIDB4MjEsIDB4NjQgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkycjFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMiwgMHgxMCwgMHhGRiwgMHg4MiwgMHhGRCwgMHgwQSwgMHhGRiwgMHhGNCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAwLCAweDg4LCAweEExLCAweDQzLCAweEVCLCAweDIwLCAweEJGLCAweDdDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjYsIDB4OTAsIDB4MzAsIDB4QjAsIDB4MEUsIDB4QTgsIDB4OEQsIDB4MTggKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkycjFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMSwgMHg0OCwgMHg3OSwgMHgxRSwgMHhBMSwgMHg3NywgMHhGOSwgMHg3MyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEQ1LCAweENELCAweDI0LCAweDZCLCAweEVELCAweDExLCAweDEwLCAweDYzICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NzgsIDB4REEsIDB4QzgsIDB4RkYsIDB4OTUsIDB4MkIsIDB4MTksIDB4MDcgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkycjFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDMxLCAweDI4LCAweEQyLCAweEI0LCAweEIxLCAweEM5LCAweDZCLCAweDE0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzYsIDB4RjgsIDB4REUsIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCAqLworCisvKgorICogRG9tYWluIHBhcmFtZXRlcnMgZm9yIHNlY3AyMjRyMQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRyMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0cjFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEI0LCAweEZGLCAweDU1LCAweDIzLCAweDQzLCAweDM5LCAweDBCLCAweDI3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QkEsIDB4RDgsIDB4QkYsIDB4RDcsIDB4QjcsIDB4QjAsIDB4NDQsIDB4NTAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1NiwgMHgzMiwgMHg0MSwgMHhGNSwgMHhBQiwgMHhCMywgMHgwNCwgMHgwQyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF80KCAweDg1LCAweDBBLCAweDA1LCAweEI0ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNHIxX2d4W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjEsIDB4MUQsIDB4NUMsIDB4MTEsIDB4RDYsIDB4ODAsIDB4MzIsIDB4MzQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyMiwgMHgxMSwgMHhDMiwgMHg1NiwgMHhEMywgMHhDMSwgMHgwMywgMHg0QSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEI5LCAweDkwLCAweDEzLCAweDMyLCAweDdGLCAweEJGLCAweEI0LCAweDZCICksCisgICAgQllURVNfVE9fVF9VSU5UXzQoIDB4QkQsIDB4MEMsIDB4MEUsIDB4QjcgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0cjFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzNCwgMHg3RSwgMHgwMCwgMHg4NSwgMHg5OSwgMHg4MSwgMHhENSwgMHg0NCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY0LCAweDQ3LCAweDA3LCAweDVBLCAweEEwLCAweDc1LCAweDQzLCAweENEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTYsIDB4REYsIDB4MjIsIDB4NEMsIDB4RkIsIDB4MjMsIDB4RjcsIDB4QjUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfNCggMHg4OCwgMHg2MywgMHgzNywgMHhCRCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRyMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4M0QsIDB4MkEsIDB4NUMsIDB4NUMsIDB4NDUsIDB4MjksIDB4REQsIDB4MTMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzRSwgMHhGMCwgMHhCOCwgMHhFMCwgMHhBMiwgMHgxNiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzQoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQgKi8KKworLyoKKyAqIERvbWFpbiBwYXJhbWV0ZXJzIGZvciBzZWNwMjU2cjEKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpCitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2cjFfcFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NnIxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg0QiwgMHg2MCwgMHhEMiwgMHgyNywgMHgzRSwgMHgzQywgMHhDRSwgMHgzQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEY2LCAweEIwLCAweDUzLCAweENDLCAweEIwLCAweDA2LCAweDFELCAweDY1ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QkMsIDB4ODYsIDB4OTgsIDB4NzYsIDB4NTUsIDB4QkQsIDB4RUIsIDB4QjMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFNywgMHg5MywgMHgzQSwgMHhBQSwgMHhEOCwgMHgzNSwgMHhDNiwgMHg1QSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZyMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDk2LCAweEMyLCAweDk4LCAweEQ4LCAweDQ1LCAweDM5LCAweEExLCAweEY0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTAsIDB4MzMsIDB4RUIsIDB4MkQsIDB4ODEsIDB4N0QsIDB4MDMsIDB4NzcgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGMiwgMHg0MCwgMHhBNCwgMHg2MywgMHhFNSwgMHhFNiwgMHhCQywgMHhGOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQ3LCAweDQyLCAweDJDLCAweEUxLCAweEYyLCAweEQxLCAweDE3LCAweDZCICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NnIxX2d5W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjUsIDB4NTEsIDB4QkYsIDB4MzcsIDB4NjgsIDB4NDAsIDB4QjYsIDB4Q0IgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDRSwgMHg1RSwgMHgzMSwgMHg2QiwgMHg1NywgMHgzMywgMHhDRSwgMHgyQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDE2LCAweDlFLCAweDBGLCAweDdDLCAweDRBLCAweEVCLCAweEU3LCAweDhFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OUIsIDB4N0YsIDB4MUEsIDB4RkUsIDB4RTIsIDB4NDIsIDB4RTMsIDB4NEYgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2cjFfbltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDUxLCAweDI1LCAweDYzLCAweEZDLCAweEMyLCAweENBLCAweEI5LCAweEYzICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4ODQsIDB4OUUsIDB4MTcsIDB4QTcsIDB4QUQsIDB4RkEsIDB4RTYsIDB4QkMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEICovCisKKy8qCisgKiBEb21haW4gcGFyYW1ldGVycyBmb3Igc2VjcDM4NHIxCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDM4NHIxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMzg0cjFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEVGLCAweDJBLCAweEVDLCAweEQzLCAweEVELCAweEM4LCAweDg1LCAweDJBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OUQsIDB4RDEsIDB4MkUsIDB4OEEsIDB4OEQsIDB4MzksIDB4NTYsIDB4QzYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1QSwgMHg4NywgMHgxMywgMHg1MCwgMHg4RiwgMHgwOCwgMHgxNCwgMHgwMyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDEyLCAweDQxLCAweDgxLCAweEZFLCAweDZFLCAweDlDLCAweDFELCAweDE4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTksIDB4MkQsIDB4RjgsIDB4RTMsIDB4NkIsIDB4MDUsIDB4OEUsIDB4OTggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhFNCwgMHhFNywgMHgzRSwgMHhFMiwgMHhBNywgMHgyRiwgMHgzMSwgMHhCMyApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AzODRyMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEI3LCAweDBBLCAweDc2LCAweDcyLCAweDM4LCAweDVFLCAweDU0LCAweDNBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NkMsIDB4MjksIDB4NTUsIDB4QkYsIDB4NUQsIDB4RjIsIDB4MDIsIDB4NTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzOCwgMHgyQSwgMHg1NCwgMHg4MiwgMHhFMCwgMHg0MSwgMHhGNywgMHg1OSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDk4LCAweDlCLCAweEE3LCAweDhCLCAweDYyLCAweDNCLCAweDFELCAweDZFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NzQsIDB4QUQsIDB4MjAsIDB4RjMsIDB4MUUsIDB4QzcsIDB4QjEsIDB4OEUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzNywgMHgwNSwgMHg4QiwgMHhCRSwgMHgyMiwgMHhDQSwgMHg4NywgMHhBQSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AzODRyMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDVGLCAweDBFLCAweEVBLCAweDkwLCAweDdDLCAweDFELCAweDQzLCAweDdBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OUQsIDB4ODEsIDB4N0UsIDB4MUQsIDB4Q0UsIDB4QjEsIDB4NjAsIDB4MEEgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDMCwgMHhCOCwgMHhGMCwgMHhCNSwgMHgxMywgMHgzMSwgMHhEQSwgMHhFOSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDdDLCAweDE0LCAweDlBLCAweDI4LCAweEJELCAweDFELCAweEY0LCAweEY4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjksIDB4REMsIDB4OTIsIDB4OTIsIDB4QkYsIDB4OTgsIDB4OUUsIDB4NUQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2RiwgMHgyQywgMHgyNiwgMHg5NiwgMHg0QSwgMHhERSwgMHgxNywgMHgzNiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AzODRyMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NzMsIDB4MjksIDB4QzUsIDB4Q0MsIDB4NkEsIDB4MTksIDB4RUMsIDB4RUMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3QSwgMHhBNywgMHhCMCwgMHg0OCwgMHhCMiwgMHgwRCwgMHgxQSwgMHg1OCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweERGLCAweDJELCAweDM3LCAweEY0LCAweDgxLCAweDRELCAweDYzLCAweEM3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEICovCisKKy8qCisgKiBEb21haW4gcGFyYW1ldGVycyBmb3Igc2VjcDUyMXIxCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDUyMXIxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4RkYsIDB4MDEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwNTIxcjFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAwLCAweDNGLCAweDUwLCAweDZCLCAweEQ0LCAweDFGLCAweDQ1LCAweEVGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjEsIDB4MzQsIDB4MkMsIDB4M0QsIDB4ODgsIDB4REYsIDB4NzMsIDB4MzUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwNywgMHhCRiwgMHhCMSwgMHgzQiwgMHhCRCwgMHhDMCwgMHg1MiwgMHgxNiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDdCLCAweDkzLCAweDdFLCAweEVDLCAweDUxLCAweDM5LCAweDE5LCAweDU2ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTEsIDB4MDksIDB4RjEsIDB4OEUsIDB4OTEsIDB4ODksIDB4QjQsIDB4QjggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGMywgMHgxNSwgMHhCMywgMHg5OSwgMHg1QiwgMHg3MiwgMHhEQSwgMHhBMiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEVFLCAweDQwLCAweDg1LCAweEI2LCAweEEwLCAweDIxLCAweDlBLCAweDkyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MUYsIDB4OUEsIDB4MUMsIDB4OEUsIDB4NjEsIDB4QjksIDB4M0UsIDB4OTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHg1MSwgMHgwMCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3A1MjFyMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY2LCAweEJELCAweEU1LCAweEMyLCAweDMxLCAweDdFLCAweDdFLCAweEY5ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OUIsIDB4NDIsIDB4NkEsIDB4ODUsIDB4QzEsIDB4QjMsIDB4NDgsIDB4MzMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhERSwgMHhBOCwgMHhGRiwgMHhBMiwgMHgyNywgMHhDMSwgMHgxRCwgMHhGRSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI4LCAweDU5LCAweEU3LCAweEVGLCAweDc3LCAweDVFLCAweDRCLCAweEExICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QkEsIDB4M0QsIDB4NEQsIDB4NkIsIDB4NjAsIDB4QUYsIDB4MjgsIDB4RjggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgyMSwgMHhCNSwgMHgzRiwgMHgwNSwgMHgzOSwgMHg4MSwgMHg2NCwgMHg5QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQyLCAweEI0LCAweDk1LCAweDIzLCAweDY2LCAweENCLCAweDNFLCAweDlFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4Q0QsIDB4RTksIDB4MDQsIDB4MDQsIDB4QjcsIDB4MDYsIDB4OEUsIDB4ODUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHhDNiwgMHgwMCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3A1MjFyMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDUwLCAweDY2LCAweEQxLCAweDlGLCAweDc2LCAweDk0LCAweEJFLCAweDg4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NDAsIDB4QzIsIDB4NzIsIDB4QTIsIDB4ODYsIDB4NzAsIDB4M0MsIDB4MzUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2MSwgMHgwNywgMHhBRCwgMHgzRiwgMHgwMSwgMHhCOSwgMHg1MCwgMHhDNSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDQwLCAweDI2LCAweEY0LCAweDVFLCAweDk5LCAweDcyLCAweEVFLCAweDk3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MkMsIDB4NjYsIDB4M0UsIDB4MjcsIDB4MTcsIDB4QkQsIDB4QUYsIDB4MTcgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2OCwgMHg0NCwgMHg5QiwgMHg1NywgMHg0OSwgMHg0NCwgMHhGNSwgMHg5OCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEQ5LCAweDFCLCAweDdELCAweDJDLCAweEI0LCAweDVGLCAweDhBLCAweDVDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDQsIDB4QzAsIDB4M0IsIDB4OUEsIDB4NzgsIDB4NkEsIDB4MjksIDB4MzkgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHgxOCwgMHgwMSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3A1MjFyMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDksIDB4NjQsIDB4MzgsIDB4OTEsIDB4MUUsIDB4QjcsIDB4NkYsIDB4QkIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBRSwgMHg0NywgMHg5QywgMHg4OSwgMHhCOCwgMHhDOSwgMHhCNSwgMHgzQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEQwLCAweEE1LCAweDA5LCAweEY3LCAweDQ4LCAweDAxLCAweENDLCAweDdGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NkIsIDB4OTYsIDB4MkYsIDB4QkYsIDB4ODMsIDB4ODcsIDB4ODYsIDB4NTEgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF8yKCAweEZGLCAweDAxICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MmsxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgzNywgMHhFRSwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMTkyazFfYVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF8yKCAweDAwLCAweDAwICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDE5MmsxX2JbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHgwMywgMHgwMCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJrMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDdELCAweDZDLCAweEUwLCAweEVBLCAweEIxLCAweEQxLCAweEE1LCAweDFEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzQsIDB4RjQsIDB4QjcsIDB4ODAsIDB4MDIsIDB4N0QsIDB4QjAsIDB4MjYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBRSwgMHhFOSwgMHg1NywgMHhDMCwgMHgwRSwgMHhGMSwgMHg0RiwgMHhEQiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJrMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDlELCAweDJGLCAweDVFLCAweEQ5LCAweDg4LCAweEFBLCAweDgyLCAweDQwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MzQsIDB4ODYsIDB4QkUsIDB4MTUsIDB4RDAsIDB4NjMsIDB4NDEsIDB4ODQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBNywgMHgyOCwgMHg1NiwgMHg5QywgMHg2RCwgMHgyRiwgMHgyRiwgMHg5QiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AxOTJrMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OEQsIDB4RkQsIDB4REUsIDB4NzQsIDB4NkEsIDB4NDYsIDB4NjksIDB4MEYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxNywgMHhGQywgMHhGMiwgMHgyNiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNGsxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2RCwgMHhFNSwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfNCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRrMV9hW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4MDAsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0azFfYltdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF8yKCAweDA1LCAweDAwICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDIyNGsxX2d4W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NUMsIDB4QTQsIDB4QjcsIDB4QjYsIDB4MEUsIDB4NjUsIDB4N0UsIDB4MEYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBOSwgMHg3NSwgMHg3MCwgMHhFNCwgMHhFOSwgMHg2NywgMHhBNCwgMHg2OSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEExLCAweDI4LCAweEZDLCAweDMwLCAweERGLCAweDk5LCAweEYwLCAweDREICksCisgICAgQllURVNfVE9fVF9VSU5UXzQoIDB4MzMsIDB4NUIsIDB4NDUsIDB4QTEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjI0azFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBNSwgMHg2MSwgMHg2RCwgMHg1NSwgMHhEQiwgMHg0QiwgMHhDQSwgMHhFMiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDU5LCAweEJELCAweEIwLCAweEMwLCAweEY3LCAweDE5LCAweEUzLCAweEY3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RDYsIDB4RkIsIDB4Q0EsIDB4ODIsIDB4NDIsIDB4MzQsIDB4QkEsIDB4N0YgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfNCggMHhFRCwgMHg5RiwgMHgwOCwgMHg3RSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyMjRrMV9uW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjcsIDB4QjEsIDB4OUYsIDB4NzYsIDB4NzEsIDB4QTksIDB4RjAsIDB4Q0EgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4NCwgMHg2MSwgMHhFQywgMHhEMiwgMHhFOCwgMHhEQywgMHgwMSwgMHgwMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgKSwKK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpCitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2azFfcFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDJGLCAweEZDLCAweEZGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NmsxX2FbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfMiggMHgwMCwgMHgwMCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZrMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzIoIDB4MDcsIDB4MDAgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBzZWNwMjU2azFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5OCwgMHgxNywgMHhGOCwgMHgxNiwgMHg1QiwgMHg4MSwgMHhGMiwgMHg1OSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEQ5LCAweDI4LCAweENFLCAweDJELCAweERCLCAweEZDLCAweDlCLCAweDAyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDcsIDB4MEIsIDB4ODcsIDB4Q0UsIDB4OTUsIDB4NjIsIDB4QTAsIDB4NTUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBQywgMHhCQiwgMHhEQywgMHhGOSwgMHg3RSwgMHg2NiwgMHhCRSwgMHg3OSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IHNlY3AyNTZrMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEI4LCAweEQ0LCAweDEwLCAweEZCLCAweDhGLCAweEQwLCAweDQ3LCAweDlDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTksIDB4NTQsIDB4ODUsIDB4QTYsIDB4NDgsIDB4QjQsIDB4MTcsIDB4RkQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBOCwgMHgwOCwgMHgxMSwgMHgwRSwgMHhGQywgMHhGQiwgMHhBNCwgMHg1RCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY1LCAweEM0LCAweEEzLCAweDI2LCAweDc3LCAweERBLCAweDNBLCAweDQ4ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgc2VjcDI1NmsxX25bXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg0MSwgMHg0MSwgMHgzNiwgMHhEMCwgMHg4QywgMHg1RSwgMHhEMiwgMHhCRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDNCLCAweEEwLCAweDQ4LCAweEFGLCAweEU2LCAweERDLCAweEFFLCAweEJBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCAqLworCisvKgorICogRG9tYWluIHBhcmFtZXRlcnMgZm9yIGJyYWlucG9vbFAyNTZyMSAoUkZDIDU2MzkgMy40KQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQpCitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQMjU2cjFfcFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDc3LCAweDUzLCAweDZFLCAweDFGLCAweDFELCAweDQ4LCAweDEzLCAweDIwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjgsIDB4MjAsIDB4MjYsIDB4RDUsIDB4MjMsIDB4RjYsIDB4M0IsIDB4NkUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3MiwgMHg4RCwgMHg4MywgMHg5RCwgMHg5MCwgMHgwQSwgMHg2NiwgMHgzRSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEJDLCAweEE5LCAweEVFLCAweEExLCAweERCLCAweDU3LCAweEZCLCAweEE5ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDI1NnIxX2FbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhEOSwgMHhCNSwgMHgzMCwgMHhGMywgMHg0NCwgMHg0QiwgMHg0QSwgMHhFOSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDZDLCAweDVDLCAweERDLCAweDI2LCAweEMxLCAweDU1LCAweDgwLCAweEZCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTcsIDB4RkYsIDB4N0EsIDB4NDEsIDB4MzAsIDB4NzUsIDB4RjYsIDB4RUUgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1NywgMHgzMCwgMHgyQywgMHhGQywgMHg3NSwgMHgwOSwgMHg1QSwgMHg3RCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAyNTZyMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QjYsIDB4MDcsIDB4OEMsIDB4RkYsIDB4MTgsIDB4REMsIDB4Q0MsIDB4NkIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDRSwgMHhFMSwgMHhGNywgMHg1QywgMHgyOSwgMHgxNiwgMHg4NCwgMHg5NSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEJGLCAweDdDLCAweEQ3LCAweEJCLCAweEQ5LCAweEI1LCAweDMwLCAweEYzICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NDQsIDB4NEIsIDB4NEEsIDB4RTksIDB4NkMsIDB4NUMsIDB4REMsIDB4MjYgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQMjU2cjFfZ3hbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2MiwgMHgzMiwgMHhDRSwgMHg5QSwgMHhCRCwgMHg1MywgMHg0NCwgMHgzQSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEMyLCAweDIzLCAweEJELCAweEUzLCAweEUxLCAweDI3LCAweERFLCAweEI5ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QUYsIDB4QjcsIDB4ODEsIDB4RkMsIDB4MkYsIDB4NDgsIDB4NEIsIDB4MkMgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDQiwgMHg1NywgMHg3RSwgMHhDQiwgMHhCOSwgMHhBRSwgMHhEMiwgMHg4QiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAyNTZyMV9neVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDk3LCAweDY5LCAweDA0LCAweDJGLCAweEM3LCAweDU0LCAweDFELCAweDVDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NTQsIDB4OEUsIDB4RUQsIDB4MkQsIDB4MTMsIDB4NDUsIDB4NzcsIDB4QzIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDOSwgMHgxRCwgMHg2MSwgMHgxNCwgMHgxQSwgMHg0NiwgMHhGOCwgMHg5NyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZELCAweEM0LCAweERBLCAweEMzLCAweDM1LCAweEY4LCAweDdFLCAweDU0ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDI1NnIxX25bXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBNywgMHg1NiwgMHg0OCwgMHg5NywgMHg4MiwgMHgwRSwgMHgxRSwgMHg5MCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEY3LCAweEE2LCAweDYxLCAweEI1LCAweEEzLCAweDdBLCAweDM5LCAweDhDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NzEsIDB4OEQsIDB4ODMsIDB4OUQsIDB4OTAsIDB4MEEsIDB4NjYsIDB4M0UgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCQywgMHhBOSwgMHhFRSwgMHhBMSwgMHhEQiwgMHg1NywgMHhGQiwgMHhBOSApLAorfTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQgKi8KKworLyoKKyAqIERvbWFpbiBwYXJhbWV0ZXJzIGZvciBicmFpbnBvb2xQMzg0cjEgKFJGQyA1NjM5IDMuNikKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEKQorc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDM4NHIxX3BbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1MywgMHhFQywgMHgwNywgMHgzMSwgMHgxMywgMHgwMCwgMHg0NywgMHg4NyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDcxLCAweDFBLCAweDFELCAweDkwLCAweDI5LCAweEE3LCAweEQzLCAweEFDICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjMsIDB4MTEsIDB4QjcsIDB4N0YsIDB4MTksIDB4REEsIDB4QjEsIDB4MTIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCNCwgMHg1NiwgMHg1NCwgMHhFRCwgMHgwOSwgMHg3MSwgMHgyRiwgMHgxNSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweERGLCAweDQxLCAweEU2LCAweDUwLCAweDdFLCAweDZGLCAweDVELCAweDBGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjgsIDB4NkQsIDB4MzgsIDB4QTMsIDB4ODIsIDB4MUUsIDB4QjksIDB4OEMgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQMzg0cjFfYVtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI2LCAweDI4LCAweENFLCAweDIyLCAweERELCAweEM3LCAweEE4LCAweDA0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RUIsIDB4RDQsIDB4M0EsIDB4NTAsIDB4NEEsIDB4ODEsIDB4QTUsIDB4OEEgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwRiwgMHhGOSwgMHg5MSwgMHhCQSwgMHhFRiwgMHg2NSwgMHg5MSwgMHgxMyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDg3LCAweDI3LCAweEIyLCAweDRGLCAweDhFLCAweEEyLCAweEJFLCAweEMyICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTAsIDB4QUYsIDB4MDUsIDB4Q0UsIDB4MEEsIDB4MDgsIDB4NzIsIDB4M0MgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwQywgMHgxNSwgMHg4QywgMHgzRCwgMHhDNiwgMHg4MiwgMHhDMywgMHg3QiApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFAzODRyMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTEsIDB4NEMsIDB4NTAsIDB4RkEsIDB4OTYsIDB4ODYsIDB4QjcsIDB4M0EgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5NCwgMHhDOSwgMHhEQiwgMHg5NSwgMHgwMiwgMHgzOSwgMHhCNCwgMHg3QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEQ1LCAweDYyLCAweEVCLCAweDNFLCAweEE1LCAweDBFLCAweDg4LCAweDJFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTYsIDB4RDIsIDB4REMsIDB4MDcsIDB4RTEsIDB4N0QsIDB4QjcsIDB4MkYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3QywgMHg0NCwgMHhGMCwgMHgxNiwgMHg1NCwgMHhCNSwgMHgzOSwgMHg4QiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI2LCAweDI4LCAweENFLCAweDIyLCAweERELCAweEM3LCAweEE4LCAweDA0ICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDM4NHIxX2d4W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MUUsIDB4QUYsIDB4RDQsIDB4NDcsIDB4RTIsIDB4QjIsIDB4ODcsIDB4RUYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBQSwgMHg0NiwgMHhENiwgMHgzNiwgMHgzNCwgMHhFMCwgMHgyNiwgMHhFOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEU4LCAweDEwLCAweEJELCAweDBDLCAweEZFLCAweENBLCAweDdGLCAweERCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RTMsIDB4NEYsIDB4RjEsIDB4N0UsIDB4RTcsIDB4QTMsIDB4NDcsIDB4ODggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2QiwgMHgzRiwgMHhDMSwgMHhCNywgMHg4MSwgMHgzQSwgMHhBNiwgMHhBMiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEZGLCAweDQ1LCAweENGLCAweDY4LCAweEYwLCAweDY0LCAweDFDLCAweDFEICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDM4NHIxX2d5W10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MTUsIDB4NTMsIDB4M0MsIDB4MjYsIDB4NDEsIDB4MDMsIDB4ODIsIDB4NDIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxMSwgMHg4MSwgMHg5MSwgMHg3NywgMHgyMSwgMHg0NiwgMHg0NiwgMHgwRSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDI4LCAweDI5LCAweDkxLCAweEY5LCAweDRGLCAweDA1LCAweDlDLCAweEUxICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjQsIDB4NTgsIDB4RUMsIDB4RkUsIDB4MjksIDB4MEIsIDB4QjcsIDB4NjIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1MiwgMHhENSwgMHhDRiwgMHg5NSwgMHg4RSwgMHhFQiwgMHhCMSwgMHg1QyApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEE0LCAweEMyLCAweEY5LCAweDIwLCAweDc1LCAweDFELCAweEJFLCAweDhBICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDM4NHIxX25bXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2NSwgMHg2NSwgMHgwNCwgMHhFOSwgMHgwMiwgMHgzMiwgMHg4OCwgMHgzQiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDEwLCAweEMzLCAweDdGLCAweDZCLCAweEFGLCAweEI2LCAweDNBLCAweENGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTcsIDB4MjUsIDB4MDQsIDB4QUMsIDB4NkMsIDB4NkUsIDB4MTYsIDB4MUYgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCMywgMHg1NiwgMHg1NCwgMHhFRCwgMHgwOSwgMHg3MSwgMHgyRiwgMHgxNSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweERGLCAweDQxLCAweEU2LCAweDUwLCAweDdFLCAweDZGLCAweDVELCAweDBGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjgsIDB4NkQsIDB4MzgsIDB4QTMsIDB4ODIsIDB4MUUsIDB4QjksIDB4OEMgKSwKK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEICovCisKKy8qCisgKiBEb21haW4gcGFyYW1ldGVycyBmb3IgYnJhaW5wb29sUDUxMnIxIChSRkMgNTYzOSAzLjcpCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCkKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFA1MTJyMV9wW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4RjMsIDB4NDgsIDB4M0EsIDB4NTgsIDB4NTYsIDB4NjAsIDB4QUEsIDB4MjggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4NSwgMHhDNiwgMHg4MiwgMHgyRCwgMHgyRiwgMHhGRiwgMHg4MSwgMHgyOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEU2LCAweDgwLCAweEEzLCAweEU2LCAweDJBLCAweEExLCAweENELCAweEFFICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NDIsIDB4NjgsIDB4QzYsIDB4OUIsIDB4MDAsIDB4OUIsIDB4NEQsIDB4N0QgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg3MSwgMHgwOCwgMHgzMywgMHg3MCwgMHhDQSwgMHg5QywgMHg2MywgMHhENiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDBFLCAweEQyLCAweEM5LCAweEIzLCAweEIzLCAweDhELCAweDMwLCAweENCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MDcsIDB4RkMsIDB4QzksIDB4MzMsIDB4QUUsIDB4RTYsIDB4RDQsIDB4M0YgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4QiwgMHhDNCwgMHhFOSwgMHhEQiwgMHhCOCwgMHg5RCwgMHhERCwgMHhBQSApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFA1MTJyMV9hW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4Q0EsIDB4OTQsIDB4RkMsIDB4NzcsIDB4NEQsIDB4QUMsIDB4QzEsIDB4RTcgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCOSwgMHhDNywgMHhGMiwgMHgyQiwgMHhBNywgMHgxNywgMHgxMSwgMHg3RiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEI1LCAweEM4LCAweDlBLCAweDhCLCAweEM5LCAweEYxLCAweDJFLCAweDBBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QTEsIDB4M0EsIDB4MjUsIDB4QTgsIDB4NUEsIDB4NUQsIDB4RUQsIDB4MkQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhCQywgMHg2MywgMHg5OCwgMHhFQSwgMHhDQSwgMHg0MSwgMHgzNCwgMHhBOCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDEwLCAweDE2LCAweEY5LCAweDNELCAweDhELCAweERELCAweENCLCAweDk0ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QzUsIDB4NEMsIDB4MjMsIDB4QUMsIDB4NDUsIDB4NzEsIDB4MzIsIDB4RTIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg4OSwgMHgzQiwgMHg2MCwgMHg4QiwgMHgzMSwgMHhBMywgMHgzMCwgMHg3OCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFA1MTJyMV9iW10gPSB7CisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MjMsIDB4RjcsIDB4MTYsIDB4ODAsIDB4NjMsIDB4QkQsIDB4MDksIDB4MjggKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhERCwgMHhFNSwgMHhCQSwgMHg1RSwgMHhCNywgMHg1MCwgMHg0MCwgMHg5OCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDY3LCAweDNFLCAweDA4LCAweERDLCAweENBLCAweDk0LCAweEZDLCAweDc3ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NEQsIDB4QUMsIDB4QzEsIDB4RTcsIDB4QjksIDB4QzcsIDB4RjIsIDB4MkIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhBNywgMHgxNywgMHgxMSwgMHg3RiwgMHhCNSwgMHhDOCwgMHg5QSwgMHg4QiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEM5LCAweEYxLCAweDJFLCAweDBBLCAweEExLCAweDNBLCAweDI1LCAweEE4ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NUEsIDB4NUQsIDB4RUQsIDB4MkQsIDB4QkMsIDB4NjMsIDB4OTgsIDB4RUEgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDQSwgMHg0MSwgMHgzNCwgMHhBOCwgMHgxMCwgMHgxNiwgMHhGOSwgMHgzRCApLAorfTsKK3N0YXRpYyBjb25zdCBtYmVkdGxzX21waV91aW50IGJyYWlucG9vbFA1MTJyMV9neFtdID0geworICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDIyLCAweEY4LCAweEI5LCAweEJDLCAweDA5LCAweDIyLCAweDM1LCAweDhCICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjgsIDB4NUUsIDB4NkEsIDB4NDAsIDB4NDcsIDB4NTAsIDB4NkQsIDB4N0MgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1RiwgMHg3RCwgMHhCOSwgMHg5MywgMHg3QiwgMHg2OCwgMHhEMSwgMHg1MCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDhELCAweEQ0LCAweEQwLCAweEUyLCAweDc4LCAweDFGLCAweDNCLCAweEZGICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OEUsIDB4MDksIDB4RDAsIDB4RjQsIDB4RUUsIDB4NjIsIDB4M0IsIDB4QjQgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhDMSwgMHgxNiwgMHhEOSwgMHhCNSwgMHg3MCwgMHg5RiwgMHhFRCwgMHg4NSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDkzLCAweDZBLCAweDRDLCAweDlDLCAweDJFLCAweDMyLCAweDIxLCAweDVBICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NjQsIDB4RDksIDB4MkUsIDB4RDgsIDB4QkQsIDB4RTQsIDB4QUUsIDB4ODEgKSwKK307CitzdGF0aWMgY29uc3QgbWJlZHRsc19tcGlfdWludCBicmFpbnBvb2xQNTEycjFfZ3lbXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg5MiwgMHgwOCwgMHhEOCwgMHgzQSwgMHgwRiwgMHgxRSwgMHhDRCwgMHg3OCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDA2LCAweDU0LCAweEYwLCAweEE4LCAweDJGLCAweDJCLCAweENBLCAweEQxICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QUUsIDB4NjMsIDB4MjcsIDB4OEEsIDB4RDgsIDB4NEIsIDB4Q0EsIDB4NUIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg1RSwgMHg0OCwgMHg1RiwgMHg0QSwgMHg0OSwgMHhERSwgMHhEQywgMHhCMiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDExLCAweDgxLCAweDFGLCAweDg4LCAweDVCLCAweEM1LCAweDAwLCAweEEwICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MUEsIDB4N0IsIDB4QTUsIDB4MjQsIDB4MDAsIDB4RjcsIDB4MDksIDB4RjIgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHhGRCwgMHgyMiwgMHg3OCwgMHhDRiwgMHhBOSwgMHhCRiwgMHhFQSwgMHhDMCApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweEVDLCAweDMyLCAweDYzLCAweDU2LCAweDVELCAweDM4LCAweERFLCAweDdEICksCit9Oworc3RhdGljIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgYnJhaW5wb29sUDUxMnIxX25bXSA9IHsKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHg2OSwgMHgwMCwgMHhBOSwgMHg5QywgMHg4MiwgMHg5NiwgMHg4NywgMHhCNSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweERELCAweERBLCAweDVELCAweDA4LCAweDgxLCAweEQzLCAweEIxLCAweDFEICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4NDcsIDB4MTAsIDB4QUMsIDB4N0YsIDB4MTksIDB4NjEsIDB4ODYsIDB4NDEgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgxOSwgMHgyNiwgMHhBOSwgMHg0QywgMHg0MSwgMHg1QywgMHgzRSwgMHg1NSApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDcwLCAweDA4LCAweDMzLCAweDcwLCAweENBLCAweDlDLCAweDYzLCAweEQ2ICksCisgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4MEUsIDB4RDIsIDB4QzksIDB4QjMsIDB4QjMsIDB4OEQsIDB4MzAsIDB4Q0IgKSwKKyAgICBCWVRFU19UT19UX1VJTlRfOCggMHgwNywgMHhGQywgMHhDOSwgMHgzMywgMHhBRSwgMHhFNiwgMHhENCwgMHgzRiApLAorICAgIEJZVEVTX1RPX1RfVUlOVF84KCAweDhCLCAweEM0LCAweEU5LCAweERCLCAweEI4LCAweDlELCAweERELCAweEFBICksCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCAqLworCisvKgorICogQ3JlYXRlIGFuIE1QSSBmcm9tIGVtYmVkZGVkIGNvbnN0YW50cworICogKGFzc3VtZXMgbGVuIGlzIGFuIGV4YWN0IG11bHRpcGxlIG9mIHNpemVvZiBtYmVkdGxzX21waV91aW50KQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZWNwX21waV9sb2FkKCBtYmVkdGxzX21waSAqWCwgY29uc3QgbWJlZHRsc19tcGlfdWludCAqcCwgc2l6ZV90IGxlbiApCit7CisgICAgWC0+cyA9IDE7CisgICAgWC0+biA9IGxlbiAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApOworICAgIFgtPnAgPSAobWJlZHRsc19tcGlfdWludCAqKSBwOworfQorCisvKgorICogU2V0IGFuIE1QSSB0byBzdGF0aWMgdmFsdWUgMQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZWNwX21waV9zZXQxKCBtYmVkdGxzX21waSAqWCApCit7CisgICAgc3RhdGljIG1iZWR0bHNfbXBpX3VpbnQgb25lW10gPSB7IDEgfTsKKyAgICBYLT5zID0gMTsKKyAgICBYLT5uID0gMTsKKyAgICBYLT5wID0gb25lOworfQorCisvKgorICogTWFrZSBncm91cCBhdmFpbGFibGUgZnJvbSBlbWJlZGRlZCBjb25zdGFudHMKKyAqLworc3RhdGljIGludCBlY3BfZ3JvdXBfbG9hZCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgKnAsICBzaXplX3QgcGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgKmEsICBzaXplX3QgYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgKmIsICBzaXplX3QgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbXBpX3VpbnQgKmd4LCBzaXplX3QgZ3hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21waV91aW50ICpneSwgc2l6ZV90IGd5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tcGlfdWludCAqbiwgIHNpemVfdCBubGVuKQoreworICAgIGVjcF9tcGlfbG9hZCggJmdycC0+UCwgcCwgcGxlbiApOworICAgIGlmKCBhICE9IE5VTEwgKQorICAgICAgICBlY3BfbXBpX2xvYWQoICZncnAtPkEsIGEsIGFsZW4gKTsKKyAgICBlY3BfbXBpX2xvYWQoICZncnAtPkIsIGIsIGJsZW4gKTsKKyAgICBlY3BfbXBpX2xvYWQoICZncnAtPk4sIG4sIG5sZW4gKTsKKworICAgIGVjcF9tcGlfbG9hZCggJmdycC0+Ry5YLCBneCwgZ3hsZW4gKTsKKyAgICBlY3BfbXBpX2xvYWQoICZncnAtPkcuWSwgZ3ksIGd5bGVuICk7CisgICAgZWNwX21waV9zZXQxKCAmZ3JwLT5HLlogKTsKKworICAgIGdycC0+cGJpdHMgPSBtYmVkdGxzX21waV9iaXRsZW4oICZncnAtPlAgKTsKKyAgICBncnAtPm5iaXRzID0gbWJlZHRsc19tcGlfYml0bGVuKCAmZ3JwLT5OICk7CisKKyAgICBncnAtPmggPSAxOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX05JU1RfT1BUSU0pCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQpCitzdGF0aWMgaW50IGVjcF9tb2RfcDE5MiggbWJlZHRsc19tcGkgKiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCkKK3N0YXRpYyBpbnQgZWNwX21vZF9wMjI0KCBtYmVkdGxzX21waSAqICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKQorc3RhdGljIGludCBlY3BfbW9kX3AyNTYoIG1iZWR0bHNfbXBpICogKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQpCitzdGF0aWMgaW50IGVjcF9tb2RfcDM4NCggbWJlZHRsc19tcGkgKiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCkKK3N0YXRpYyBpbnQgZWNwX21vZF9wNTIxKCBtYmVkdGxzX21waSAqICk7CisjZW5kaWYKKworI2RlZmluZSBOSVNUX01PRFAoIFAgKSAgICAgIGdycC0+bW9kcCA9IGVjcF9tb2RfICMjIFA7CisjZWxzZQorI2RlZmluZSBOSVNUX01PRFAoIFAgKQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX05JU1RfT1BUSU0gKi8KKworLyogQWRkaXRpb25hbCBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorc3RhdGljIGludCBlY3BfbW9kX3AyNTUoIG1iZWR0bHNfbXBpICogKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpCitzdGF0aWMgaW50IGVjcF9tb2RfcDE5MmsxKCBtYmVkdGxzX21waSAqICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKQorc3RhdGljIGludCBlY3BfbW9kX3AyMjRrMSggbWJlZHRsc19tcGkgKiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCkKK3N0YXRpYyBpbnQgZWNwX21vZF9wMjU2azEoIG1iZWR0bHNfbXBpICogKTsKKyNlbmRpZgorCisjZGVmaW5lIExPQURfR1JPVVBfQSggRyApICAgZWNwX2dyb3VwX2xvYWQoIGdycCwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfcCwgIHNpemVvZiggRyAjIyBfcCAgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfYSwgIHNpemVvZiggRyAjIyBfYSAgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfYiwgIHNpemVvZiggRyAjIyBfYiAgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfZ3gsIHNpemVvZiggRyAjIyBfZ3ggKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfZ3ksIHNpemVvZiggRyAjIyBfZ3kgKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAjIyBfbiwgIHNpemVvZiggRyAjIyBfbiAgKSApCisKKyNkZWZpbmUgTE9BRF9HUk9VUCggRyApICAgICBlY3BfZ3JvdXBfbG9hZCggZ3JwLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHICMjIF9wLCAgc2l6ZW9mKCBHICMjIF9wICApLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgMCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHICMjIF9iLCAgc2l6ZW9mKCBHICMjIF9iICApLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHICMjIF9neCwgc2l6ZW9mKCBHICMjIF9neCApLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHICMjIF9neSwgc2l6ZW9mKCBHICMjIF9neSApLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHICMjIF9uLCAgc2l6ZW9mKCBHICMjIF9uICApICkKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorLyoKKyAqIFNwZWNpYWxpemVkIGZ1bmN0aW9uIGZvciBjcmVhdGluZyB0aGUgQ3VydmUyNTUxOSBncm91cAorICovCitzdGF0aWMgaW50IGVjcF91c2VfY3VydmUyNTUxOSggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCApCit7CisgICAgaW50IHJldDsKKworICAgIC8qIEFjdHVhbGx5ICggQSArIDIgKSAvIDQgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZ3JwLT5BLCAxNiwgIjAxREI0MiIgKSApOworCisgICAgLyogUCA9IDJeMjU1IC0gMTkgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZncnAtPlAsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfbCggJmdycC0+UCwgMjU1ICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZncnAtPlAsICZncnAtPlAsIDE5ICkgKTsKKyAgICBncnAtPnBiaXRzID0gbWJlZHRsc19tcGlfYml0bGVuKCAmZ3JwLT5QICk7CisKKyAgICAvKiBZIGludGVudGlvbmFseSBub3Qgc2V0LCBzaW5jZSB3ZSB1c2UgeC96IGNvb3JkaW5hdGVzLgorICAgICAqIFRoaXMgaXMgdXNlZCBhcyBhIG1hcmtlciB0byBpZGVudGlmeSBNb250Z29tZXJ5IGN1cnZlcyEgKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2xzZXQoICZncnAtPkcuWCwgOSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9sc2V0KCAmZ3JwLT5HLlosIDEgKSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZncnAtPkcuWSApOworCisgICAgLyogQWN0dWFsbHksIHRoZSByZXF1aXJlZCBtc2IgZm9yIHByaXZhdGUga2V5cyAqLworICAgIGdycC0+bmJpdHMgPSAyNTQ7CisKK2NsZWFudXA6CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggZ3JwICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCAqLworCisvKgorICogU2V0IGEgZ3JvdXAgdXNpbmcgd2VsbC1rbm93biBkb21haW4gcGFyYW1ldGVycworICovCitpbnQgbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCwgbWJlZHRsc19lY3BfZ3JvdXBfaWQgaWQgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoIGdycCApOworCisgICAgZ3JwLT5pZCA9IGlkOworCisgICAgc3dpdGNoKCBpZCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOgorICAgICAgICAgICAgTklTVF9NT0RQKCBwMTkyICk7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVAoIHNlY3AxOTJyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOgorICAgICAgICAgICAgTklTVF9NT0RQKCBwMjI0ICk7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVAoIHNlY3AyMjRyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOgorICAgICAgICAgICAgTklTVF9NT0RQKCBwMjU2ICk7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVAoIHNlY3AyNTZyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOgorICAgICAgICAgICAgTklTVF9NT0RQKCBwMzg0ICk7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVAoIHNlY3AzODRyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOgorICAgICAgICAgICAgTklTVF9NT0RQKCBwNTIxICk7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVAoIHNlY3A1MjFyMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpCisgICAgICAgIGNhc2UgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxOgorICAgICAgICAgICAgZ3JwLT5tb2RwID0gZWNwX21vZF9wMTkyazE7CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVBfQSggc2VjcDE5MmsxICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzE6CisgICAgICAgICAgICBncnAtPm1vZHAgPSBlY3BfbW9kX3AyMjRrMTsKKyAgICAgICAgICAgIHJldHVybiggTE9BRF9HUk9VUF9BKCBzZWNwMjI0azEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMToKKyAgICAgICAgICAgIGdycC0+bW9kcCA9IGVjcF9tb2RfcDI1NmsxOworICAgICAgICAgICAgcmV0dXJuKCBMT0FEX0dST1VQX0EoIHNlY3AyNTZrMSApICk7CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX0JQMjU2UjE6CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVBfQSggYnJhaW5wb29sUDI1NnIxICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX0JQMzg0UjE6CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVBfQSggYnJhaW5wb29sUDM4NHIxICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX0JQNTEyUjE6CisgICAgICAgICAgICByZXR1cm4oIExPQURfR1JPVVBfQSggYnJhaW5wb29sUDUxMnIxICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6CisgICAgICAgICAgICBncnAtPm1vZHAgPSBlY3BfbW9kX3AyNTU7CisgICAgICAgICAgICByZXR1cm4oIGVjcF91c2VfY3VydmUyNTUxOSggZ3JwICkgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggZ3JwICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9OSVNUX09QVElNKQorLyoKKyAqIEZhc3QgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWVzIHVzZWQgYnkgdGhlIE5JU1QgY3VydmVzLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHNwZWVkLCBidXQgbm90IG5lZWRlZCBmb3IgY29ycmVjdAorICogb3BlcmF0aW9ucy4gU28sIHdlIG1ha2UgdGhlIGNob2ljZSB0byBoZWF2aWx5IHJlbHkgb24gdGhlIGludGVybmFscyBvZiBvdXIKKyAqIGJpZ251bSBsaWJyYXJ5LCB3aGljaCBjcmVhdGVzIGEgdGlnaHQgY291cGxpbmcgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgYW5kCisgKiBvdXIgTVBJIGltcGxlbWVudGF0aW9uLiAgSG93ZXZlciwgdGhlIGNvdXBsaW5nIGJldHdlZW4gdGhlIEVDUCBtb2R1bGUgYW5kCisgKiBNUEkgcmVtYWlucyBsb29zZSwgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGNhbiBiZSBkZWFjdGl2YXRlZCBhdCB3aWxsLgorICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEKQorLyoKKyAqIENvbXBhcmVkIHRvIHRoZSB3YXkgdGhpbmdzIGFyZSBwcmVzZW50ZWQgaW4gRklQUyAxODYtMyBELjIsCisgKiB3ZSBwcm9jZWVkIGluIGNvbHVtbnMsIGZyb20gcmlnaHQgKGxlYXN0IHNpZ25pZmljYW50IGNodW5rKSB0byBsZWZ0LAorICogYWRkaW5nIGNodW5rcyB0byBOIGluIHBsYWNlLCBhbmQga2VlcGluZyBhIGNhcnJ5IGZvciB0aGUgbmV4dCBjaHVuay4KKyAqIFRoaXMgYXZvaWRzIG1vdmluZyB0aGluZ3MgYXJvdW5kIGluIG1lbW9yeSwgYW5kIHVzZWxlc3NseSBhZGRpbmcgemVyb3MsCisgKiBjb21wYXJlZCB0byB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQsIGxpbmUtb3JpZW50ZWQgYXBwcm9hY2guCisgKgorICogRm9yIHRoaXMgcHJpbWUgd2UgbmVlZCB0byBoYW5kbGUgZGF0YSBpbiBjaHVua3Mgb2YgNjQgYml0cy4KKyAqIFNpbmNlIHRoaXMgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2Ygb3VyIGJhc2ljIG1iZWR0bHNfbXBpX3VpbnQsIHdlIGNhbgorICogdXNlIGEgbWJlZHRsc19tcGlfdWludCAqIHRvIGRlc2lnbmF0ZSBzdWNoIGEgY2h1bmssIGFuZCBzbWFsbCBsb29wcyB0byBoYW5kbGUgaXQuCisgKi8KKworLyogQWRkIDY0LWJpdCBjaHVua3MgKGRzdCArPSBzcmMpIGFuZCB1cGRhdGUgY2FycnkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGQ2NCggbWJlZHRsc19tcGlfdWludCAqZHN0LCBtYmVkdGxzX21waV91aW50ICpzcmMsIG1iZWR0bHNfbXBpX3VpbnQgKmNhcnJ5ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGk7CisgICAgbWJlZHRsc19tcGlfdWludCBjID0gMDsKKyAgICBmb3IoIGkgPSAwOyBpIDwgOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApOyBpKyssIGRzdCsrLCBzcmMrKyApCisgICAgeworICAgICAgICAqZHN0ICs9IGM7ICAgICAgYyAgPSAoICpkc3QgPCBjICk7CisgICAgICAgICpkc3QgKz0gKnNyYzsgICBjICs9ICggKmRzdCA8ICpzcmMgKTsKKyAgICB9CisgICAgKmNhcnJ5ICs9IGM7Cit9CisKKy8qIEFkZCBjYXJyeSB0byBhIDY0LWJpdCBjaHVuayBhbmQgdXBkYXRlIGNhcnJ5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2Fycnk2NCggbWJlZHRsc19tcGlfdWludCAqZHN0LCBtYmVkdGxzX21waV91aW50ICpjYXJyeSApCit7CisgICAgdW5zaWduZWQgY2hhciBpOworICAgIGZvciggaSA9IDA7IGkgPCA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICk7IGkrKywgZHN0KysgKQorICAgIHsKKyAgICAgICAgKmRzdCArPSAqY2Fycnk7CisgICAgICAgICpjYXJyeSAgPSAoICpkc3QgPCAqY2FycnkgKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgV0lEVEggICAgICAgOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApCisjZGVmaW5lIEEoIGkgKSAgICAgIE4tPnAgKyBpICogV0lEVEgKKyNkZWZpbmUgQUREKCBpICkgICAgYWRkNjQoIHAsIEEoIGkgKSwgJmMgKQorI2RlZmluZSBORVhUICAgICAgICBwICs9IFdJRFRIOyBjYXJyeTY0KCBwLCAmYyApCisjZGVmaW5lIExBU1QgICAgICAgIHAgKz0gV0lEVEg7ICpwID0gYzsgd2hpbGUoICsrcCA8IGVuZCApICpwID0gMAorCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHAxOTIgKEZJUFMgMTg2LTMgRC4yLjEpCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZF9wMTkyKCBtYmVkdGxzX21waSAqTiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waV91aW50IGMgPSAwOworICAgIG1iZWR0bHNfbXBpX3VpbnQgKnAsICplbmQ7CisKKyAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggYmxvY2tzIHNvIHRoYXQgQSg1KSBpcyBsZWdhbCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ3JvdyggTiwgNiAqIFdJRFRIICkgKTsKKworICAgIHAgPSBOLT5wOworICAgIGVuZCA9IHAgKyBOLT5uOworCisgICAgQUREKCAzICk7IEFERCggNSApOyAgICAgICAgICAgICBORVhUOyAvLyBBMCArPSBBMyArIEE1CisgICAgQUREKCAzICk7IEFERCggNCApOyBBREQoIDUgKTsgICBORVhUOyAvLyBBMSArPSBBMyArIEE0ICsgQTUKKyAgICBBREQoIDQgKTsgQUREKCA1ICk7ICAgICAgICAgICAgIExBU1Q7IC8vIEEyICs9IEE0ICsgQTUKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorCisjdW5kZWYgV0lEVEgKKyN1bmRlZiBBCisjdW5kZWYgQURECisjdW5kZWYgTkVYVAorI3VuZGVmIExBU1QKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkKKy8qCisgKiBUaGUgcmVhZGVyIGlzIGFkdmlzZWQgdG8gZmlyc3QgdW5kZXJzdGFuZCBlY3BfbW9kX3AxOTIoKSBzaW5jZSB0aGUgc2FtZQorICogZ2VuZXJhbCBzdHJ1Y3R1cmUgaXMgdXNlZCBoZXJlLCBidXQgd2l0aCBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbnM6CisgKiAoMSkgY2h1bmtzIG9mIDMyIGJpdHMsIGFuZCAoMikgc3VidHJhY3Rpb25zLgorICovCisKKy8qCisgKiBGb3IgdGhlc2UgcHJpbWVzLCB3ZSBuZWVkIHRvIGhhbmRsZSBkYXRhIGluIGNodW5rcyBvZiAzMiBiaXRzLgorICogVGhpcyBtYWtlcyBpdCBtb3JlIGNvbXBsaWNhdGVkIGlmIHdlIHVzZSA2NCBiaXRzIGxpbWJzIGluIE1QSSwKKyAqIHdoaWNoIHByZXZlbnRzIHVzIGZyb20gdXNpbmcgYSB1bmlmb3JtIGFjY2VzcyBtZXRob2QgYXMgZm9yIHAxOTIuCisgKgorICogU28sIHdlIGRlZmluZSBhIG1pbmkgYWJzdHJhY3Rpb24gbGF5ZXIgdG8gYWNjZXNzIDMyIGJpdCBjaHVua3MsCisgKiBsb2FkIHRoZW0gaW4gJ2N1cicgZm9yIHdvcmssIGFuZCBzdG9yZSB0aGVtIGJhY2sgZnJvbSAnY3VyJyB3aGVuIGRvbmUuCisgKgorICogV2hpbGUgYXQgaXQsIGFsc28gZGVmaW5lIHRoZSBzaXplIG9mIE4gaW4gdGVybXMgb2YgMzItYml0IGNodW5rcy4KKyAqLworI2RlZmluZSBMT0FEMzIgICAgICBjdXIgPSBBKCBpICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9JTlQzMikgIC8qIDMyIGJpdCAqLworCisjZGVmaW5lIE1BWDMyICAgICAgIE4tPm4KKyNkZWZpbmUgQSggaiApICAgICAgTi0+cFtqXQorI2RlZmluZSBTVE9SRTMyICAgICBOLT5wW2ldID0gY3VyOworCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NC1iaXQgKi8KKworI2RlZmluZSBNQVgzMiAgICAgICBOLT5uICogMgorI2RlZmluZSBBKCBqICkgaiAlIDIgPyAodWludDMyX3QpKCBOLT5wW2ovMl0gPj4gMzIgKSA6ICh1aW50MzJfdCkoIE4tPnBbai8yXSApCisjZGVmaW5lIFNUT1JFMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggaSAlIDIgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBOLT5wW2kvMl0gJj0gMHgwMDAwMDAwMEZGRkZGRkZGOyAgICAgICAgICBcCisgICAgICAgIE4tPnBbaS8yXSB8PSAoKG1iZWR0bHNfbXBpX3VpbnQpIGN1cikgPDwgMzI7ICAgICAgICBcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTi0+cFtpLzJdICY9IDB4RkZGRkZGRkYwMDAwMDAwMDsgICAgICAgICAgXAorICAgICAgICBOLT5wW2kvMl0gfD0gKG1iZWR0bHNfbXBpX3VpbnQpIGN1cjsgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2VuZGlmIC8qIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICovCisKKy8qCisgKiBIZWxwZXJzIGZvciBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gb2YgY2h1bmtzLCB3aXRoIHNpZ25lZCBjYXJyeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFkZDMyKCB1aW50MzJfdCAqZHN0LCB1aW50MzJfdCBzcmMsIHNpZ25lZCBjaGFyICpjYXJyeSApCit7CisgICAgKmRzdCArPSBzcmM7CisgICAgKmNhcnJ5ICs9ICggKmRzdCA8IHNyYyApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3ViMzIoIHVpbnQzMl90ICpkc3QsIHVpbnQzMl90IHNyYywgc2lnbmVkIGNoYXIgKmNhcnJ5ICkKK3sKKyAgICAqY2FycnkgLT0gKCAqZHN0IDwgc3JjICk7CisgICAgKmRzdCAtPSBzcmM7Cit9CisKKyNkZWZpbmUgQUREKCBqICkgICAgYWRkMzIoICZjdXIsIEEoIGogKSwgJmMgKTsKKyNkZWZpbmUgU1VCKCBqICkgICAgc3ViMzIoICZjdXIsIEEoIGogKSwgJmMgKTsKKworLyoKKyAqIEhlbHBlcnMgZm9yIHRoZSBtYWluICdsb29wJworICogKHNlZSBmaXhfbmVnYXRpdmUgZm9yIHRoZSBtb3RpdmF0aW9uIG9mIEMpCisgKi8KKyNkZWZpbmUgSU5JVCggYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbnQgcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaWduZWQgY2hhciBjID0gMCwgY2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1aW50MzJfdCBjdXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaXplX3QgaSA9IDAsIGJpdHMgPSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21waSBDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfbXBpX3VpbnQgQ3BbIGIgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50KSArIDEgXTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQy5zID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQy5uID0gYiAvIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQpICsgMTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEMucCA9IENwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1lbXNldCggQ3AsIDAsIEMubiAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2dyb3coIE4sIGIgKiAyIC8gOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICkgKTsgXAorICAgIExPQUQzMjsKKworI2RlZmluZSBORVhUICAgICAgICAgICAgICAgICAgICBcCisgICAgU1RPUkUzMjsgaSsrOyBMT0FEMzI7ICAgICAgIFwKKyAgICBjYyA9IGM7IGMgPSAwOyAgICAgICAgICAgICAgXAorICAgIGlmKCBjYyA8IDAgKSAgICAgICAgICAgICAgICBcCisgICAgICAgIHN1YjMyKCAmY3VyLCAtY2MsICZjICk7IFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhZGQzMiggJmN1ciwgY2MsICZjICk7ICBcCisKKyNkZWZpbmUgTEFTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBTVE9SRTMyOyBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjdXIgPSBjID4gMCA/IGMgOiAwOyBTVE9SRTMyOyAgICAgICAgICAgICAgIFwKKyAgICBjdXIgPSAwOyB3aGlsZSggKytpIDwgTUFYMzIgKSB7IFNUT1JFMzI7IH0gIFwKKyAgICBpZiggYyA8IDAgKSBmaXhfbmVnYXRpdmUoIE4sIGMsICZDLCBiaXRzICk7CisKKy8qCisgKiBJZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCB3ZSBnZXQgaXQgaW4gdGhlIGZvcm0KKyAqIGMgKiAyXihiaXRzICsgMzIpICsgTiwgd2l0aCBjIG5lZ2F0aXZlIGFuZCBOIHBvc2l0aXZlIHNob3J0ZXIgdGhhbiAnYml0cycKKyAqLworc3RhdGljIGlubGluZSBpbnQgZml4X25lZ2F0aXZlKCBtYmVkdGxzX21waSAqTiwgc2lnbmVkIGNoYXIgYywgbWJlZHRsc19tcGkgKkMsIHNpemVfdCBiaXRzICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgLyogQyA9IC0gYyAqIDJeKGJpdHMgKyAzMikgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0hBVkVfSU5UNjQpCisgICAgKCh2b2lkKSBiaXRzKTsKKyNlbHNlCisgICAgaWYoIGJpdHMgPT0gMjI0ICkKKyAgICAgICAgQy0+cFsgQy0+biAtIDEgXSA9ICgobWJlZHRsc19tcGlfdWludCkgLWMpIDw8IDMyOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBDLT5wWyBDLT5uIC0gMSBdID0gKG1iZWR0bHNfbXBpX3VpbnQpIC1jOworCisgICAgLyogTiA9IC0gKCBDIC0gTiApICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfYWJzKCBOLCBDLCBOICkgKTsKKyAgICBOLT5zID0gLTE7CisKK2NsZWFudXA6CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCkKKy8qCisgKiBGYXN0IHF1YXNpLXJlZHVjdGlvbiBtb2R1bG8gcDIyNCAoRklQUyAxODYtMyBELjIuMikKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3AyMjQoIG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBJTklUKCAyMjQgKTsKKworICAgIFNVQiggIDcgKTsgU1VCKCAxMSApOyAgICAgICAgICAgICAgIE5FWFQ7IC8vIEEwICs9IC1BNyAtIEExMQorICAgIFNVQiggIDggKTsgU1VCKCAxMiApOyAgICAgICAgICAgICAgIE5FWFQ7IC8vIEExICs9IC1BOCAtIEExMgorICAgIFNVQiggIDkgKTsgU1VCKCAxMyApOyAgICAgICAgICAgICAgIE5FWFQ7IC8vIEEyICs9IC1BOSAtIEExMworICAgIFNVQiggMTAgKTsgQUREKCAgNyApOyBBREQoIDExICk7ICAgIE5FWFQ7IC8vIEEzICs9IC1BMTAgKyBBNyArIEExMQorICAgIFNVQiggMTEgKTsgQUREKCAgOCApOyBBREQoIDEyICk7ICAgIE5FWFQ7IC8vIEE0ICs9IC1BMTEgKyBBOCArIEExMgorICAgIFNVQiggMTIgKTsgQUREKCAgOSApOyBBREQoIDEzICk7ICAgIE5FWFQ7IC8vIEE1ICs9IC1BMTIgKyBBOSArIEExMworICAgIFNVQiggMTMgKTsgQUREKCAxMCApOyAgICAgICAgICAgICAgIExBU1Q7IC8vIEE2ICs9IC1BMTMgKyBBMTAKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKQorLyoKKyAqIEZhc3QgcXVhc2ktcmVkdWN0aW9uIG1vZHVsbyBwMjU2IChGSVBTIDE4Ni0zIEQuMi4zKQorICovCitzdGF0aWMgaW50IGVjcF9tb2RfcDI1NiggbWJlZHRsc19tcGkgKk4gKQoreworICAgIElOSVQoIDI1NiApOworCisgICAgQUREKCAgOCApOyBBREQoICA5ICk7CisgICAgU1VCKCAxMSApOyBTVUIoIDEyICk7IFNVQiggMTMgKTsgU1VCKCAxNCApOyAgICAgICAgICAgICBORVhUOyAvLyBBMAorCisgICAgQUREKCAgOSApOyBBREQoIDEwICk7CisgICAgU1VCKCAxMiApOyBTVUIoIDEzICk7IFNVQiggMTQgKTsgU1VCKCAxNSApOyAgICAgICAgICAgICBORVhUOyAvLyBBMQorCisgICAgQUREKCAxMCApOyBBREQoIDExICk7CisgICAgU1VCKCAxMyApOyBTVUIoIDE0ICk7IFNVQiggMTUgKTsgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMgorCisgICAgQUREKCAxMSApOyBBREQoIDExICk7IEFERCggMTIgKTsgQUREKCAxMiApOyBBREQoIDEzICk7CisgICAgU1VCKCAxNSApOyBTVUIoICA4ICk7IFNVQiggIDkgKTsgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMworCisgICAgQUREKCAxMiApOyBBREQoIDEyICk7IEFERCggMTMgKTsgQUREKCAxMyApOyBBREQoIDE0ICk7CisgICAgU1VCKCAgOSApOyBTVUIoIDEwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBNAorCisgICAgQUREKCAxMyApOyBBREQoIDEzICk7IEFERCggMTQgKTsgQUREKCAxNCApOyBBREQoIDE1ICk7CisgICAgU1VCKCAxMCApOyBTVUIoIDExICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBNQorCisgICAgQUREKCAxNCApOyBBREQoIDE0ICk7IEFERCggMTUgKTsgQUREKCAxNSApOyBBREQoIDE0ICk7IEFERCggMTMgKTsKKyAgICBTVUIoICA4ICk7IFNVQiggIDkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEE2CisKKyAgICBBREQoIDE1ICk7IEFERCggMTUgKTsgQUREKCAxNSApOyBBREQoIDggKTsKKyAgICBTVUIoIDEwICk7IFNVQiggMTEgKTsgU1VCKCAxMiApOyBTVUIoIDEzICk7ICAgICAgICAgICAgIExBU1Q7IC8vIEE3CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCkKKy8qCisgKiBGYXN0IHF1YXNpLXJlZHVjdGlvbiBtb2R1bG8gcDM4NCAoRklQUyAxODYtMyBELjIuNCkKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3AzODQoIG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBJTklUKCAzODQgKTsKKworICAgIEFERCggMTIgKTsgQUREKCAyMSApOyBBREQoIDIwICk7CisgICAgU1VCKCAyMyApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMAorCisgICAgQUREKCAxMyApOyBBREQoIDIyICk7IEFERCggMjMgKTsKKyAgICBTVUIoIDEyICk7IFNVQiggMjAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEEyCisKKyAgICBBREQoIDE0ICk7IEFERCggMjMgKTsKKyAgICBTVUIoIDEzICk7IFNVQiggMjEgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEEyCisKKyAgICBBREQoIDE1ICk7IEFERCggMTIgKTsgQUREKCAyMCApOyBBREQoIDIxICk7CisgICAgU1VCKCAxNCApOyBTVUIoIDIyICk7IFNVQiggMjMgKTsgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBMworCisgICAgQUREKCAyMSApOyBBREQoIDIxICk7IEFERCggMTYgKTsgQUREKCAxMyApOyBBREQoIDEyICk7IEFERCggMjAgKTsgQUREKCAyMiApOworICAgIFNVQiggMTUgKTsgU1VCKCAyMyApOyBTVUIoIDIzICk7ICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTQKKworICAgIEFERCggMjIgKTsgQUREKCAyMiApOyBBREQoIDE3ICk7IEFERCggMTQgKTsgQUREKCAxMyApOyBBREQoIDIxICk7IEFERCggMjMgKTsKKyAgICBTVUIoIDE2ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEE1CisKKyAgICBBREQoIDIzICk7IEFERCggMjMgKTsgQUREKCAxOCApOyBBREQoIDE1ICk7IEFERCggMTQgKTsgQUREKCAyMiApOworICAgIFNVQiggMTcgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTYKKworICAgIEFERCggMTkgKTsgQUREKCAxNiApOyBBREQoIDE1ICk7IEFERCggMjMgKTsKKyAgICBTVUIoIDE4ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEE3CisKKyAgICBBREQoIDIwICk7IEFERCggMTcgKTsgQUREKCAxNiApOworICAgIFNVQiggMTkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVDsgLy8gQTgKKworICAgIEFERCggMjEgKTsgQUREKCAxOCApOyBBREQoIDE3ICk7CisgICAgU1VCKCAyMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUOyAvLyBBOQorCisgICAgQUREKCAyMiApOyBBREQoIDE5ICk7IEFERCggMTggKTsKKyAgICBTVUIoIDIxICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQ7IC8vIEExMAorCisgICAgQUREKCAyMyApOyBBREQoIDIwICk7IEFERCggMTkgKTsKKyAgICBTVUIoIDIyICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBU1Q7IC8vIEExMQorCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgKi8KKworI3VuZGVmIEEKKyN1bmRlZiBMT0FEMzIKKyN1bmRlZiBTVE9SRTMyCisjdW5kZWYgTUFYMzIKKyN1bmRlZiBJTklUCisjdW5kZWYgTkVYVAorI3VuZGVmIExBU1QKKworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCkKKy8qCisgKiBIZXJlIHdlIGhhdmUgYW4gYWN0dWFsIE1lcnNlbm5lIHByaW1lLCBzbyB0aGluZ3MgYXJlIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgorICogSG93ZXZlciwgY2h1bmtzIGFyZSBhbGlnbmVkIG9uIGEgJ3dlaXJkJyBib3VuZGFyeSAoNTIxIGJpdHMpLgorICovCisKKy8qIFNpemUgb2YgcDUyMSBpbiB0ZXJtcyBvZiBtYmVkdGxzX21waV91aW50ICovCisjZGVmaW5lIFA1MjFfV0lEVEggICAgICAoIDUyMSAvIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSArIDEgKQorCisvKiBCaXRzIHRvIGtlZXAgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbWJlZHRsc19tcGlfdWludCAqLworI2RlZmluZSBQNTIxX01BU0sgICAgICAgMHgwMUZGCisKKy8qCisgKiBGYXN0IHF1YXNpLXJlZHVjdGlvbiBtb2R1bG8gcDUyMSAoRklQUyAxODYtMyBELjIuNSkKKyAqIFdyaXRlIE4gYXMgQTEgKyAyXjUyMSBBMCwgcmV0dXJuIEEwICsgQTEKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3A1MjEoIG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpIE07CisgICAgbWJlZHRsc19tcGlfdWludCBNcFtQNTIxX1dJRFRIICsgMV07CisgICAgLyogV29yc3QgY2FzZSBmb3IgdGhlIHNpemUgb2YgTSBpcyB3aGVuIG1iZWR0bHNfbXBpX3VpbnQgaXMgMTYgYml0czoKKyAgICAgKiB3ZSBuZWVkIHRvIGhvbGQgYml0cyA1MTMgdG8gMTA1Niwgd2hpY2ggaXMgMzQgbGltYnMsIHRoYXQgaXMKKyAgICAgKiBQNTIxX1dJRFRIICsgMS4gT3RoZXJ3aXNlIFA1MjFfV0lEVEggaXMgZW5vdWdoLiAqLworCisgICAgaWYoIE4tPm4gPCBQNTIxX1dJRFRIICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKiBNID0gQTEgKi8KKyAgICBNLnMgPSAxOworICAgIE0ubiA9IE4tPm4gLSAoIFA1MjFfV0lEVEggLSAxICk7CisgICAgaWYoIE0ubiA+IFA1MjFfV0lEVEggKyAxICkKKyAgICAgICAgTS5uID0gUDUyMV9XSURUSCArIDE7CisgICAgTS5wID0gTXA7CisgICAgbWVtY3B5KCBNcCwgTi0+cCArIFA1MjFfV0lEVEggLSAxLCBNLm4gKiBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJk0sIDUyMSAlICggOCAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICkgKSApOworCisgICAgLyogTiA9IEEwICovCisgICAgTi0+cFtQNTIxX1dJRFRIIC0gMV0gJj0gUDUyMV9NQVNLOworICAgIGZvciggaSA9IFA1MjFfV0lEVEg7IGkgPCBOLT5uOyBpKysgKQorICAgICAgICBOLT5wW2ldID0gMDsKKworICAgIC8qIE4gPSBBMCArIEExICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfYWJzKCBOLCBOLCAmTSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI3VuZGVmIFA1MjFfV0lEVEgKKyN1bmRlZiBQNTIxX01BU0sKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCAqLworCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfTklTVF9PUFRJTSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisKKy8qIFNpemUgb2YgcDI1NSBpbiB0ZXJtcyBvZiBtYmVkdGxzX21waV91aW50ICovCisjZGVmaW5lIFAyNTVfV0lEVEggICAgICAoIDI1NSAvIDggLyBzaXplb2YoIG1iZWR0bHNfbXBpX3VpbnQgKSArIDEgKQorCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHAyNTUgPSAyXjI1NSAtIDE5CisgKiBXcml0ZSBOIGFzIEEwICsgMl4yNTUgQTEsIHJldHVybiBBMCArIDE5ICogQTEKKyAqLworc3RhdGljIGludCBlY3BfbW9kX3AyNTUoIG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfbXBpIE07CisgICAgbWJlZHRsc19tcGlfdWludCBNcFtQMjU1X1dJRFRIICsgMl07CisKKyAgICBpZiggTi0+biA8IFAyNTVfV0lEVEggKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qIE0gPSBBMSAqLworICAgIE0ucyA9IDE7CisgICAgTS5uID0gTi0+biAtICggUDI1NV9XSURUSCAtIDEgKTsKKyAgICBpZiggTS5uID4gUDI1NV9XSURUSCArIDEgKQorICAgICAgICBNLm4gPSBQMjU1X1dJRFRIICsgMTsKKyAgICBNLnAgPSBNcDsKKyAgICBtZW1zZXQoIE1wLCAwLCBzaXplb2YgTXAgKTsKKyAgICBtZW1jcHkoIE1wLCBOLT5wICsgUDI1NV9XSURUSCAtIDEsIE0ubiAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zaGlmdF9yKCAmTSwgMjU1ICUgKCA4ICogc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKSApICk7CisgICAgTS5uKys7IC8qIE1ha2Ugcm9vbSBmb3IgbXVsdGlwbGljYXRpb24gYnkgMTkgKi8KKworICAgIC8qIE4gPSBBMCAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2V0X2JpdCggTiwgMjU1LCAwICkgKTsKKyAgICBmb3IoIGkgPSBQMjU1X1dJRFRIOyBpIDwgTi0+bjsgaSsrICkKKyAgICAgICAgTi0+cFtpXSA9IDA7CisKKyAgICAvKiBOID0gQTAgKyAxOSAqIEExICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfaW50KCAmTSwgJk0sIDE5ICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2FkZF9hYnMoIE4sIE4sICZNICkgKTsKKworY2xlYW51cDoKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkgfHwgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCkKKy8qCisgKiBGYXN0IHF1YXNpLXJlZHVjdGlvbiBtb2R1bG8gUCA9IDJecyAtIFIsCisgKiB3aXRoIFIgYWJvdXQgMzMgYml0cywgdXNlZCBieSB0aGUgS29ibGl0eiBjdXJ2ZXMuCisgKgorICogV3JpdGUgTiBhcyBBMCArIDJeMjI0IEExLCByZXR1cm4gQTAgKyBSICogQTEuCisgKiBBY3R1YWxseSBkbyB0d28gcGFzc2VzLCBzaW5jZSBSIGlzIGJpZy4KKyAqLworI2RlZmluZSBQX0tPQkxJVFpfTUFYICAgKCAyNTYgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKSAgLy8gTWF4IGxpbWJzIGluIFAKKyNkZWZpbmUgUF9LT0JMSVRaX1IgICAgICggOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICkgICAgICAgIC8vIExpbWJzIGluIFIKK3N0YXRpYyBpbmxpbmUgaW50IGVjcF9tb2Rfa29ibGl0eiggbWJlZHRsc19tcGkgKk4sIG1iZWR0bHNfbXBpX3VpbnQgKlJwLCBzaXplX3QgcF9saW1icywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkanVzdCwgc2l6ZV90IHNoaWZ0LCBtYmVkdGxzX21waV91aW50IG1hc2sgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19tcGkgTSwgUjsKKyAgICBtYmVkdGxzX21waV91aW50IE1wW1BfS09CTElUWl9NQVggKyBQX0tPQkxJVFpfUl07CisKKyAgICBpZiggTi0+biA8IHBfbGltYnMgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qIEluaXQgUiAqLworICAgIFIucyA9IDE7CisgICAgUi5wID0gUnA7CisgICAgUi5uID0gUF9LT0JMSVRaX1I7CisKKyAgICAvKiBDb21tb24gc2V0dXAgZm9yIE0gKi8KKyAgICBNLnMgPSAxOworICAgIE0ucCA9IE1wOworCisgICAgLyogTSA9IEExICovCisgICAgTS5uID0gTi0+biAtICggcF9saW1icyAtIGFkanVzdCApOworICAgIGlmKCBNLm4gPiBwX2xpbWJzICsgYWRqdXN0ICkKKyAgICAgICAgTS5uID0gcF9saW1icyArIGFkanVzdDsKKyAgICBtZW1zZXQoIE1wLCAwLCBzaXplb2YgTXAgKTsKKyAgICBtZW1jcHkoIE1wLCBOLT5wICsgcF9saW1icyAtIGFkanVzdCwgTS5uICogc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKTsKKyAgICBpZiggc2hpZnQgIT0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJk0sIHNoaWZ0ICkgKTsKKyAgICBNLm4gKz0gUi5uIC0gYWRqdXN0OyAvKiBNYWtlIHJvb20gZm9yIG11bHRpcGxpY2F0aW9uIGJ5IFIgKi8KKworICAgIC8qIE4gPSBBMCAqLworICAgIGlmKCBtYXNrICE9IDAgKQorICAgICAgICBOLT5wW3BfbGltYnMgLSAxXSAmPSBtYXNrOworICAgIGZvciggaSA9IHBfbGltYnM7IGkgPCBOLT5uOyBpKysgKQorICAgICAgICBOLT5wW2ldID0gMDsKKworICAgIC8qIE4gPSBBMCArIFIgKiBBMSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJk0sICZNLCAmUiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfYWJzKCBOLCBOLCAmTSApICk7CisKKyAgICAvKiBTZWNvbmQgcGFzcyAqLworCisgICAgLyogTSA9IEExICovCisgICAgTS5uID0gTi0+biAtICggcF9saW1icyAtIGFkanVzdCApOworICAgIGlmKCBNLm4gPiBwX2xpbWJzICsgYWRqdXN0ICkKKyAgICAgICAgTS5uID0gcF9saW1icyArIGFkanVzdDsKKyAgICBtZW1zZXQoIE1wLCAwLCBzaXplb2YgTXAgKTsKKyAgICBtZW1jcHkoIE1wLCBOLT5wICsgcF9saW1icyAtIGFkanVzdCwgTS5uICogc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICkgKTsKKyAgICBpZiggc2hpZnQgIT0gMCApCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc2hpZnRfciggJk0sIHNoaWZ0ICkgKTsKKyAgICBNLm4gKz0gUi5uIC0gYWRqdXN0OyAvKiBNYWtlIHJvb20gZm9yIG11bHRpcGxpY2F0aW9uIGJ5IFIgKi8KKworICAgIC8qIE4gPSBBMCAqLworICAgIGlmKCBtYXNrICE9IDAgKQorICAgICAgICBOLT5wW3BfbGltYnMgLSAxXSAmPSBtYXNrOworICAgIGZvciggaSA9IHBfbGltYnM7IGkgPCBOLT5uOyBpKysgKQorICAgICAgICBOLT5wW2ldID0gMDsKKworICAgIC8qIE4gPSBBMCArIFIgKiBBMSAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJk0sICZNLCAmUiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfYWJzKCBOLCBOLCAmTSApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkgfHwKKyAgICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCkgfHwKKyAgICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQpCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHAxOTJrMSA9IDJeMTkyIC0gUiwKKyAqIHdpdGggUiA9IDJeMzIgKyAyXjEyICsgMl44ICsgMl43ICsgMl42ICsgMl4zICsgMSA9IDB4MDEwMDAwMTExOQorICovCitzdGF0aWMgaW50IGVjcF9tb2RfcDE5MmsxKCBtYmVkdGxzX21waSAqTiApCit7CisgICAgc3RhdGljIG1iZWR0bHNfbXBpX3VpbnQgUnBbXSA9IHsKKyAgICAgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4QzksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgKSB9OworCisgICAgcmV0dXJuKCBlY3BfbW9kX2tvYmxpdHooIE4sIFJwLCAxOTIgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICksIDAsIDAsIDAgKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKQorLyoKKyAqIEZhc3QgcXVhc2ktcmVkdWN0aW9uIG1vZHVsbyBwMjI0azEgPSAyXjIyNCAtIFIsCisgKiB3aXRoIFIgPSAyXjMyICsgMl4xMiArIDJeMTEgKyAyXjkgKyAyXjcgKyAyXjQgKyAyICsgMSA9IDB4MDEwMDAwMUE5MworICovCitzdGF0aWMgaW50IGVjcF9tb2RfcDIyNGsxKCBtYmVkdGxzX21waSAqTiApCit7CisgICAgc3RhdGljIG1iZWR0bHNfbXBpX3VpbnQgUnBbXSA9IHsKKyAgICAgICAgQllURVNfVE9fVF9VSU5UXzgoIDB4OTMsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgKSB9OworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfSU5UNjQpCisgICAgcmV0dXJuKCBlY3BfbW9kX2tvYmxpdHooIE4sIFJwLCA0LCAxLCAzMiwgMHhGRkZGRkZGRiApICk7CisjZWxzZQorICAgIHJldHVybiggZWNwX21vZF9rb2JsaXR6KCBOLCBScCwgMjI0IC8gOCAvIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApLCAwLCAwLCAwICkgKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpCisvKgorICogRmFzdCBxdWFzaS1yZWR1Y3Rpb24gbW9kdWxvIHAyNTZrMSA9IDJeMjU2IC0gUiwKKyAqIHdpdGggUiA9IDJeMzIgKyAyXjkgKyAyXjggKyAyXjcgKyAyXjYgKyAyXjQgKyAxID0gMHgwMTAwMDAwM0QxCisgKi8KK3N0YXRpYyBpbnQgZWNwX21vZF9wMjU2azEoIG1iZWR0bHNfbXBpICpOICkKK3sKKyAgICBzdGF0aWMgbWJlZHRsc19tcGlfdWludCBScFtdID0geworICAgICAgICBCWVRFU19UT19UX1VJTlRfOCggMHhEMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCApIH07CisgICAgcmV0dXJuKCBlY3BfbW9kX2tvYmxpdHooIE4sIFJwLCAyNTYgLyA4IC8gc2l6ZW9mKCBtYmVkdGxzX21waV91aW50ICksIDAsIDAsIDAgKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lbnRyb3B5LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9lbnRyb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkMWIyNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VudHJvcHkuYwpAQCAtMCwwICsxLDY1NSBAQAorLyoKKyAqICBFbnRyb3B5IGFjY3VtdWxhdG9yIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQorI3dhcm5pbmcgIioqKiogV0FSTklORyEgIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgZGVmaW5lZCEgIgorI3dhcm5pbmcgIioqKiogVEhJUyBCVUlMRCBIQVMgTk8gREVGSU5FRCBFTlRST1BZIFNPVVJDRVMgIgorI3dhcm5pbmcgIioqKiogVEhJUyBCVUlMRCBJUyAqTk9UKiBTVUlUQUJMRSBGT1IgUFJPRFVDVElPTiBVU0UgIgorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHlfcG9sbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL2hhdmVnZS5oIgorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKyNkZWZpbmUgRU5UUk9QWV9NQVhfTE9PUCAgICAyNTYgICAgIC8qKjwgTWF4aW11bSBhbW91bnQgdG8gbG9vcCBiZWZvcmUgZXJyb3IgKi8KKwordm9pZCBtYmVkdGxzX2VudHJvcHlfaW5pdCggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZihtYmVkdGxzX2VudHJvcHlfY29udGV4dCkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUikKKyAgICBtYmVkdGxzX3NoYTUxMl9zdGFydHMoICZjdHgtPmFjY3VtdWxhdG9yLCAwICk7CisjZWxzZQorICAgIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyggJmN0eC0+YWNjdW11bGF0b3IsIDAgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyAgICBtYmVkdGxzX2hhdmVnZV9pbml0KCAmY3R4LT5oYXZlZ2VfZGF0YSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpCisgICAgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoIGN0eCwgbWJlZHRsc19udWxsX2VudHJvcHlfcG9sbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUykKKyNpZiAhZGVmaW5lZChNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkpCisgICAgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoIGN0eCwgbWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9NSU5fUExBVEZPUk0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoIGN0eCwgbWJlZHRsc19oYXJkY2xvY2tfcG9sbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX01JTl9IQVJEQ0xPQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorICAgIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBjdHgsIG1iZWR0bHNfaGF2ZWdlX3BvbGwsICZjdHgtPmhhdmVnZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfTUlOX0hBVkVHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCkKKyAgICBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSggY3R4LCBtYmVkdGxzX2hhcmR3YXJlX3BvbGwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRFdBUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfU1RST05HICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorICAgIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCBjdHgsIG1iZWR0bHNfbnZfc2VlZF9wb2xsLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgKTsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMgKi8KK30KKwordm9pZCBtYmVkdGxzX2VudHJvcHlfZnJlZSggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorICAgIG1iZWR0bHNfaGF2ZWdlX2ZyZWUoICZjdHgtPmhhdmVnZV9kYXRhICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9mcmVlKCAmY3R4LT5tdXRleCApOworI2VuZGlmCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKSApOworfQorCitpbnQgbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VudHJvcHlfZl9zb3VyY2VfcHRyIGZfc291cmNlLCB2b2lkICpwX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0aHJlc2hvbGQsIGludCBzdHJvbmcgKQoreworICAgIGludCBpbmRleCwgcmV0ID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgaW5kZXggPSBjdHgtPnNvdXJjZV9jb3VudDsKKyAgICBpZiggaW5kZXggPj0gTUJFRFRMU19FTlRST1BZX01BWF9TT1VSQ0VTICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVM7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBjdHgtPnNvdXJjZVtpbmRleF0uZl9zb3VyY2UgID0gZl9zb3VyY2U7CisgICAgY3R4LT5zb3VyY2VbaW5kZXhdLnBfc291cmNlICA9IHBfc291cmNlOworICAgIGN0eC0+c291cmNlW2luZGV4XS50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7CisgICAgY3R4LT5zb3VyY2VbaW5kZXhdLnN0cm9uZyAgICA9IHN0cm9uZzsKKworICAgIGN0eC0+c291cmNlX2NvdW50Kys7CisKK2V4aXQ6CisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEVudHJvcHkgYWNjdW11bGF0b3IgdXBkYXRlCisgKi8KK3N0YXRpYyBpbnQgZW50cm9weV91cGRhdGUoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgc291cmNlX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBoZWFkZXJbMl07CisgICAgdW5zaWduZWQgY2hhciB0bXBbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHNpemVfdCB1c2VfbGVuID0gbGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBkYXRhOworCisgICAgaWYoIHVzZV9sZW4gPiBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUikKKyAgICAgICAgbWJlZHRsc19zaGE1MTIoIGRhdGEsIGxlbiwgdG1wLCAwICk7CisjZWxzZQorICAgICAgICBtYmVkdGxzX3NoYTI1NiggZGF0YSwgbGVuLCB0bXAsIDAgKTsKKyNlbmRpZgorICAgICAgICBwID0gdG1wOworICAgICAgICB1c2VfbGVuID0gTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkU7CisgICAgfQorCisgICAgaGVhZGVyWzBdID0gc291cmNlX2lkOworICAgIGhlYWRlclsxXSA9IHVzZV9sZW4gJiAweEZGOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SKQorICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmN0eC0+YWNjdW11bGF0b3IsIGhlYWRlciwgMiApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmN0eC0+YWNjdW11bGF0b3IsIHAsIHVzZV9sZW4gKTsKKyNlbHNlCisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmY3R4LT5hY2N1bXVsYXRvciwgaGVhZGVyLCAyICk7CisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmY3R4LT5hY2N1bXVsYXRvciwgcCwgdXNlX2xlbiApOworI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfZW50cm9weV91cGRhdGVfbWFudWFsKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgcmV0ID0gZW50cm9weV91cGRhdGUoIGN0eCwgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9NQU5VQUwsIGRhdGEsIGxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFJ1biB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgc291cmNlcyB0byBhZGQgZW50cm9weSB0byBvdXIgYWNjdW11bGF0b3IKKyAqLworc3RhdGljIGludCBlbnRyb3B5X2dhdGhlcl9pbnRlcm5hbCggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCApCit7CisgICAgaW50IHJldCwgaSwgaGF2ZV9vbmVfc3Ryb25nID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0VOVFJPUFlfTUFYX0dBVEhFUl07CisgICAgc2l6ZV90IG9sZW47CisKKyAgICBpZiggY3R4LT5zb3VyY2VfY291bnQgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TT1VSQ0VTX0RFRklORUQgKTsKKworICAgIC8qCisgICAgICogUnVuIHRocm91Z2ggb3VyIGVudHJvcHkgc291cmNlcworICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCBjdHgtPnNvdXJjZV9jb3VudDsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCBjdHgtPnNvdXJjZVtpXS5zdHJvbmcgPT0gTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgKQorICAgICAgICAgICAgaGF2ZV9vbmVfc3Ryb25nID0gMTsKKworICAgICAgICBvbGVuID0gMDsKKyAgICAgICAgaWYoICggcmV0ID0gY3R4LT5zb3VyY2VbaV0uZl9zb3VyY2UoIGN0eC0+c291cmNlW2ldLnBfc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBNQkVEVExTX0VOVFJPUFlfTUFYX0dBVEhFUiwgJm9sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQWRkIGlmIHdlIGFjdHVhbGx5IGdhdGhlcmVkIHNvbWV0aGluZworICAgICAgICAgKi8KKyAgICAgICAgaWYoIG9sZW4gPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZW50cm9weV91cGRhdGUoIGN0eCwgKHVuc2lnbmVkIGNoYXIpIGksIGJ1Ziwgb2xlbiApOworICAgICAgICAgICAgY3R4LT5zb3VyY2VbaV0uc2l6ZSArPSBvbGVuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGhhdmVfb25lX3N0cm9uZyA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX05PX1NUUk9OR19TT1VSQ0UgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVGhyZWFkLXNhZmUgd3JhcHBlciBmb3IgZW50cm9weV9nYXRoZXJfaW50ZXJuYWwoKQorICovCitpbnQgbWJlZHRsc19lbnRyb3B5X2dhdGhlciggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCApCit7CisgICAgaW50IHJldDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgcmV0ID0gZW50cm9weV9nYXRoZXJfaW50ZXJuYWwoIGN0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfZW50cm9weV9mdW5jKCB2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQsIGNvdW50ID0gMCwgaSwgZG9uZTsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4ID0gKG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICopIGRhdGE7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworCisgICAgaWYoIGxlbiA+IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisgICAgLyogVXBkYXRlIHRoZSBOViBlbnRyb3B5IHNlZWQgYmVmb3JlIGdlbmVyYXRpbmcgYW55IGVudHJvcHkgZm9yIG91dHNpZGUKKyAgICAgKiB1c2UuCisgICAgICovCisgICAgaWYoIGN0eC0+aW5pdGlhbF9lbnRyb3B5X3J1biA9PSAwICkKKyAgICB7CisgICAgICAgIGN0eC0+aW5pdGlhbF9lbnRyb3B5X3J1biA9IDE7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZW50cm9weV91cGRhdGVfbnZfc2VlZCggY3R4ICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogQWx3YXlzIGdhdGhlciBleHRyYSBlbnRyb3B5IGJlZm9yZSBhIGNhbGwKKyAgICAgKi8KKyAgICBkbworICAgIHsKKyAgICAgICAgaWYoIGNvdW50KysgPiBFTlRST1BZX01BWF9MT09QICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gZW50cm9weV9nYXRoZXJfaW50ZXJuYWwoIGN0eCApICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgZG9uZSA9IDE7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBjdHgtPnNvdXJjZV9jb3VudDsgaSsrICkKKyAgICAgICAgICAgIGlmKCBjdHgtPnNvdXJjZVtpXS5zaXplIDwgY3R4LT5zb3VyY2VbaV0udGhyZXNob2xkICkKKyAgICAgICAgICAgICAgICBkb25lID0gMDsKKyAgICB9CisgICAgd2hpbGUoICEgZG9uZSApOworCisgICAgbWVtc2V0KCBidWYsIDAsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IpCisgICAgbWJlZHRsc19zaGE1MTJfZmluaXNoKCAmY3R4LT5hY2N1bXVsYXRvciwgYnVmICk7CisKKyAgICAvKgorICAgICAqIFJlc2V0IGFjY3VtdWxhdG9yIGFuZCBjb3VudGVycyBhbmQgcmVjeWNsZSBleGlzdGluZyBlbnRyb3B5CisgICAgICovCisgICAgbWVtc2V0KCAmY3R4LT5hY2N1bXVsYXRvciwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICkgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl9zdGFydHMoICZjdHgtPmFjY3VtdWxhdG9yLCAwICk7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmY3R4LT5hY2N1bXVsYXRvciwgYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgLyoKKyAgICAgKiBQZXJmb3JtIHNlY29uZCBTSEEtNTEyIG9uIGVudHJvcHkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3NoYTUxMiggYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwgYnVmLCAwICk7CisjZWxzZSAvKiBNQkVEVExTX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SICovCisgICAgbWJlZHRsc19zaGEyNTZfZmluaXNoKCAmY3R4LT5hY2N1bXVsYXRvciwgYnVmICk7CisKKyAgICAvKgorICAgICAqIFJlc2V0IGFjY3VtdWxhdG9yIGFuZCBjb3VudGVycyBhbmQgcmVjeWNsZSBleGlzdGluZyBlbnRyb3B5CisgICAgICovCisgICAgbWVtc2V0KCAmY3R4LT5hY2N1bXVsYXRvciwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICkgKTsKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoICZjdHgtPmFjY3VtdWxhdG9yLCAwICk7CisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmY3R4LT5hY2N1bXVsYXRvciwgYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgLyoKKyAgICAgKiBQZXJmb3JtIHNlY29uZCBTSEEtMjU2IG9uIGVudHJvcHkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3NoYTI1NiggYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwgYnVmLCAwICk7CisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUiAqLworCisgICAgZm9yKCBpID0gMDsgaSA8IGN0eC0+c291cmNlX2NvdW50OyBpKysgKQorICAgICAgICBjdHgtPnNvdXJjZVtpXS5zaXplID0gMDsKKworICAgIG1lbWNweSggb3V0cHV0LCBidWYsIGxlbiApOworCisgICAgcmV0ID0gMDsKKworZXhpdDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY3R4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKK2ludCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX252X3NlZWQoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1I7CisgICAgdW5zaWduZWQgY2hhciBidWZbIE1CRURUTFNfRU5UUk9QWV9NQVhfU0VFRF9TSVpFIF07CisKKyAgICAvKiBSZWFkIG5ldyBzZWVkICBhbmQgd3JpdGUgaXQgdG8gTlYgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfZnVuYyggY3R4LCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCBtYmVkdGxzX252X3NlZWRfd3JpdGUoIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKSA8IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUiApOworCisgICAgLyogTWFudWFsbHkgdXBkYXRlIHRoZSByZW1haW5pbmcgc3RyZWFtIHdpdGggYSBzZXBhcmF0b3IgdmFsdWUgdG8gZGl2ZXJnZSAqLworICAgIG1lbXNldCggYnVmLCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1iZWR0bHNfZW50cm9weV91cGRhdGVfbWFudWFsKCBjdHgsIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWJlZHRsc19lbnRyb3B5X3dyaXRlX3NlZWRfZmlsZSggbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUjsKKyAgICBGSUxFICpmOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgIndiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfZnVuYyggY3R4LCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYoIGZ3cml0ZSggYnVmLCAxLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSwgZiApICE9IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX0VOVFJPUFlfRklMRV9JT19FUlJPUjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgZmNsb3NlKCBmICk7CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfZW50cm9weV91cGRhdGVfc2VlZF9maWxlKCBtYmVkdGxzX2VudHJvcHlfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBGSUxFICpmOworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWyBNQkVEVExTX0VOVFJPUFlfTUFYX1NFRURfU0laRSBdOworCisgICAgaWYoICggZiA9IGZvcGVuKCBwYXRoLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIGZzZWVrKCBmLCAwLCBTRUVLX0VORCApOworICAgIG4gPSAoc2l6ZV90KSBmdGVsbCggZiApOworICAgIGZzZWVrKCBmLCAwLCBTRUVLX1NFVCApOworCisgICAgaWYoIG4gPiBNQkVEVExTX0VOVFJPUFlfTUFYX1NFRURfU0laRSApCisgICAgICAgIG4gPSBNQkVEVExTX0VOVFJPUFlfTUFYX1NFRURfU0laRTsKKworICAgIGlmKCBmcmVhZCggYnVmLCAxLCBuLCBmICkgIT0gbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV91cGRhdGVfbWFudWFsKCBjdHgsIGJ1ZiwgbiApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX2VudHJvcHlfd3JpdGVfc2VlZF9maWxlKCBjdHgsIHBhdGggKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgIWRlZmluZWQoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkKKy8qCisgKiBEdW1teSBzb3VyY2UgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBlbnRyb3B5X2R1bW15X3NvdXJjZSggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICAoKHZvaWQpIGRhdGEpOworCisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MmEsIGxlbiApOworICAgICpvbGVuID0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0hBUkRXQVJFX0FMVCkKKworc3RhdGljIGludCBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdF9nYXRoZXIoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgIGludCByZXQgPSAwOworICAgIHNpemVfdCBlbnRyb3B5X2xlbiA9IDA7CisgICAgc2l6ZV90IG9sZW4gPSAwOworICAgIHNpemVfdCBhdHRlbXB0cyA9IGJ1Zl9sZW47CisKKyAgICB3aGlsZSggYXR0ZW1wdHMgPiAwICYmIGVudHJvcHlfbGVuIDwgYnVmX2xlbiApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2hhcmR3YXJlX3BvbGwoIE5VTEwsIGJ1ZiArIGVudHJvcHlfbGVuLAorICAgICAgICAgICAgYnVmX2xlbiAtIGVudHJvcHlfbGVuLCAmb2xlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGVudHJvcHlfbGVuICs9IG9sZW47CisgICAgICAgIGF0dGVtcHRzLS07CisgICAgfQorCisgICAgaWYoIGVudHJvcHlfbGVuIDwgYnVmX2xlbiApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKworc3RhdGljIGludCBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdF9jaGVja19iaXRzKCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNldD0gMHhGRjsKKyAgICB1bnNpZ25lZCBjaGFyIHVuc2V0ID0gMHgwMDsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciggaSA9IDA7IGkgPCBidWZfbGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgc2V0ICY9IGJ1ZltpXTsKKyAgICAgICAgdW5zZXQgfD0gYnVmW2ldOworICAgIH0KKworICAgIHJldHVybiggc2V0ID09IDB4RkYgfHwgdW5zZXQgPT0gMHgwMCApOworfQorCisvKgorICogQSB0ZXN0IHRvIGVuc3VyZSBoYXQgdGhlIGVudHJvcHkgc291cmNlcyBhcmUgZnVuY3Rpb25pbmcgY29ycmVjdGx5CisgKiBhbmQgdGhlcmUgaXMgbm8gb2J2aW91cyBmYWlsdXJlLiBUaGUgdGVzdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGNoZWNrczoKKyAqICAtIFRoZSBlbnRyb3B5IHNvdXJjZSBpcyBub3QgcHJvdmlkaW5nIG9ubHkgMHMgKGFsbCBiaXRzIHVuc2V0KSBvciAxcyAoYWxsCisgKiAgICBiaXRzIHNldCkuCisgKiAgLSBUaGUgZW50cm9weSBzb3VyY2UgaXMgbm90IHByb3ZpZGluZyB2YWx1ZXMgaW4gYSBwYXR0ZXJuLiBCZWNhdXNlIHRoZQorICogICAgaGFyZHdhcmUgY291bGQgYmUgcHJvdmlkaW5nIGRhdGEgaW4gYW4gYXJiaXRyYXJ5IGxlbmd0aCwgdGhpcyBjaGVjayBwb2xscworICogICAgdGhlIGhhcmR3YXJlIGVudHJvcHkgc291cmNlIHR3aWNlIGFuZCBjb21wYXJlcyB0aGUgcmVzdWx0IHRvIGVuc3VyZSB0aGV5CisgKiAgICBhcmUgbm90IGVxdWFsLgorICogIC0gVGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGVudHJvcHkgc291cmNlIGlzIG5vdCBhbiBlcnJvci4KKyAqLworaW50IG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBidWYwWzIgKiBzaXplb2YoIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgKV07CisgICAgdW5zaWduZWQgY2hhciBidWYxWzIgKiBzaXplb2YoIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgKV07CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEVOVFJPUFlfQklBUyB0ZXN0OiAiICk7CisKKyAgICBtZW1zZXQoIGJ1ZjAsIDB4MDAsIHNpemVvZiggYnVmMCApICk7CisgICAgbWVtc2V0KCBidWYxLCAweDAwLCBzaXplb2YoIGJ1ZjEgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X3NvdXJjZV9zZWxmX3Rlc3RfZ2F0aGVyKCBidWYwLCBzaXplb2YoIGJ1ZjAgKSApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdF9nYXRoZXIoIGJ1ZjEsIHNpemVvZiggYnVmMSApICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJldHVybmVkIHZhbHVlcyBhcmUgbm90IGFsbCAwIG9yIDEgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdF9jaGVja19iaXRzKCBidWYwLCBzaXplb2YoIGJ1ZjAgKSApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfc291cmNlX3NlbGZfdGVzdF9jaGVja19iaXRzKCBidWYxLCBzaXplb2YoIGJ1ZjEgKSApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRyb3B5IHNvdXJjZSBpcyBub3QgcmV0dXJuaW5nIHZhbHVlcyBpbiBhCisgICAgICogcGF0dGVybiAqLworICAgIHJldCA9IG1lbWNtcCggYnVmMCwgYnVmMSwgc2l6ZW9mKCBidWYwICkgKSA9PSAwOworCitjbGVhbnVwOgorICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCAhPSAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUICovCisKKy8qCisgKiBUaGUgYWN0dWFsIGVudHJvcHkgcXVhbGl0eSBpcyBoYXJkIHRvIHRlc3QsIGJ1dCB3ZSBjYW4gYXQgbGVhc3QKKyAqIHRlc3QgdGhhdCB0aGUgZnVuY3Rpb25zIGRvbid0IGNhdXNlIGVycm9ycyBhbmQgd3JpdGUgdGhlIGNvcnJlY3QKKyAqIGFtb3VudCBvZiBkYXRhIHRvIGJ1ZmZlcnMuCisgKi8KK2ludCBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IHJldCA9IDE7CisjaWYgIWRlZmluZWQoTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSkKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdID0geyAwIH07CisgICAgdW5zaWduZWQgY2hhciBhY2NbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdID0geyAwIH07CisgICAgc2l6ZV90IGksIGo7CisjZW5kaWYgLyogIU1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgKi8KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgRU5UUk9QWSB0ZXN0OiAiICk7CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQorICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisKKyAgICAvKiBGaXJzdCBkbyBhIGdhdGhlciB0byBtYWtlIHN1cmUgd2UgaGF2ZSBkZWZhdWx0IHNvdXJjZXMgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfZ2F0aGVyKCAmY3R4ICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgcmV0ID0gbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoICZjdHgsIGVudHJvcHlfZHVtbXlfc291cmNlLCBOVUxMLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9XRUFLICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lbnRyb3B5X3VwZGF0ZV9tYW51YWwoICZjdHgsIGJ1Ziwgc2l6ZW9mIGJ1ZiApICkgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIC8qCisgICAgICogVG8gdGVzdCB0aGF0IG1iZWR0bHNfZW50cm9weV9mdW5jIHdyaXRlcyBjb3JyZWN0IG51bWJlciBvZiBieXRlczoKKyAgICAgKiAtIHVzZSB0aGUgd2hvbGUgYnVmZmVyIGFuZCByZWx5IG9uIEFTYW4gdG8gZGV0ZWN0IG92ZXJydW5zCisgICAgICogLSBjb2xsZWN0IGVudHJvcHkgOCB0aW1lcyBhbmQgT1IgdGhlIHJlc3VsdCBpbiBhbiBhY2N1bXVsYXRvcjoKKyAgICAgKiAgIGFueSBieXRlIHNob3VsZCB0aGVuIGJlIDAgd2l0aCBwcm9iYWJseSAyXigtNjQpLCBzbyByZXF1aXJpbmcKKyAgICAgKiAgIGVhY2ggb2YgdGhlIDMyIG9yIDY0IGJ5dGVzIHRvIGJlIG5vbi16ZXJvIGhhcyBhIGZhbHNlIGZhaWx1cmUgcmF0ZQorICAgICAqICAgb2YgYXQgbW9zdCAyXigtNTgpIHdoaWNoIGlzIGFjY2VwdGFibGUuCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfZnVuYyggJmN0eCwgYnVmLCBzaXplb2YoIGJ1ZiApICkgKSAhPSAwICkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgICAgICBmb3IoIGogPSAwOyBqIDwgc2l6ZW9mKCBidWYgKTsgaisrICkKKyAgICAgICAgICAgIGFjY1tqXSB8PSBidWZbal07CisgICAgfQorCisgICAgZm9yKCBqID0gMDsgaiA8IHNpemVvZiggYnVmICk7IGorKyApCisgICAgeworICAgICAgICBpZiggYWNjW2pdID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZW50cm9weV9zb3VyY2Vfc2VsZl90ZXN0KCAwICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworI2VuZGlmCisKK2NsZWFudXA6CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZjdHggKTsKKyNlbmRpZiAvKiAhTUJFRFRMU19URVNUX05VTExfRU5UUk9QWSAqLworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworICAgIH0KKworICAgIHJldHVybiggcmV0ICE9IDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VudHJvcHlfcG9sbC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZW50cm9weV9wb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExNmU2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2VudHJvcHlfcG9sbC5jCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogIFBsYXRmb3JtLXNwZWNpZmljIGFuZCBjdXN0b20gZW50cm9weSBwb2xsaW5nIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weV9wb2xsLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL2hhdmVnZS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSkKKworI2lmICFkZWZpbmVkKHVuaXgpICYmICFkZWZpbmVkKF9fdW5peF9fKSAmJiAhZGVmaW5lZChfX3VuaXgpICYmIFwKKyAgICAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9XSU4zMikKKyNlcnJvciAiUGxhdGZvcm0gZW50cm9weSBzb3VyY2VzIG9ubHkgd29yayBvbiBVbml4IGFuZCBXaW5kb3dzLCBzZWUgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZIGluIGNvbmZpZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiAhZGVmaW5lZChFRkkzMikKKworI2lmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDQwMAorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX2VudHJvcHlfcG9sbCggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBIQ1JZUFRQUk9WIHByb3ZpZGVyOworICAgICgodm9pZCkgZGF0YSk7CisgICAgKm9sZW4gPSAwOworCisgICAgaWYoIENyeXB0QWNxdWlyZUNvbnRleHQoICZwcm92aWRlciwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQgKSA9PSBGQUxTRSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworICAgIH0KKworICAgIGlmKCBDcnlwdEdlblJhbmRvbSggcHJvdmlkZXIsIChEV09SRCkgbGVuLCBvdXRwdXQgKSA9PSBGQUxTRSApCisgICAgeworICAgICAgICBDcnlwdFJlbGVhc2VDb250ZXh0KCBwcm92aWRlciwgMCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworICAgIH0KKworICAgIENyeXB0UmVsZWFzZUNvbnRleHQoIHByb3ZpZGVyLCAwICk7CisgICAgKm9sZW4gPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlIC8qIF9XSU4zMiAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisvKgorICogVGVzdCBmb3IgTGludXggZ2V0cmFuZG9tKCkgc3VwcG9ydC4KKyAqIFNpbmNlIHRoZXJlIGlzIG5vIHdyYXBwZXIgaW4gdGhlIGxpYmMgeWV0LCB1c2UgdGhlIGdlbmVyaWMgc3lzY2FsbCB3cmFwcGVyCisgKiBhdmFpbGFibGUgaW4gR05VIGxpYmMgYW5kIGNvbXBhdGlibGUgbGliYydzIChlZyB1Q2xpYmMpLgorICovCisjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19HTElCQ19fKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaWYgZGVmaW5lZChTWVNfZ2V0cmFuZG9tKQorI2RlZmluZSBIQVZFX0dFVFJBTkRPTQorCitzdGF0aWMgaW50IGdldHJhbmRvbV93cmFwcGVyKCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sIHVuc2lnbmVkIGludCBmbGFncyApCit7CisgICAgLyogTWVtU2FuIGNhbm5vdCB1bmRlcnN0YW5kIHRoYXQgdGhlIHN5c2NhbGwgd3JpdGVzIHRvIHRoZSBidWZmZXIgKi8KKyNpZiBkZWZpbmVkKF9faGFzX2ZlYXR1cmUpCisjaWYgX19oYXNfZmVhdHVyZShtZW1vcnlfc2FuaXRpemVyKQorICAgIG1lbXNldCggYnVmLCAwLCBidWZsZW4gKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICByZXR1cm4oIHN5c2NhbGwoIFNZU19nZXRyYW5kb20sIGJ1ZiwgYnVmbGVuLCBmbGFncyApICk7Cit9CisKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorLyogQ2hlY2sgaWYgdmVyc2lvbiBpcyBhdCBsZWFzdCAzLjE3LjAgKi8KK3N0YXRpYyBpbnQgY2hlY2tfdmVyc2lvbl8zXzE3X3BsdXMoIHZvaWQgKQoreworICAgIGludCBtaW5vcjsKKyAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKyAgICBjb25zdCBjaGFyICp2ZXI7CisKKyAgICAvKiBHZXQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIHVuYW1lKCZ1bik7CisgICAgdmVyID0gdW4ucmVsZWFzZTsKKworICAgIC8qIENoZWNrIG1ham9yIHZlcnNpb247IGFzc3VtZSBhIHNpbmdsZSBkaWdpdCAqLworICAgIGlmKCB2ZXJbMF0gPCAnMycgfHwgdmVyWzBdID4gJzknIHx8IHZlciBbMV0gIT0gJy4nICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIHZlclswXSAtICcwJyA+IDMgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qIE9rLCBzbyBub3cgd2Uga25vdyBtYWpvciA9PSAzLCBjaGVjayBtaW5vci4KKyAgICAgKiBBc3N1bWUgMSBvciAyIGRpZ2l0cy4gKi8KKyAgICBpZiggdmVyWzJdIDwgJzAnIHx8IHZlclsyXSA+ICc5JyApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIG1pbm9yID0gdmVyWzJdIC0gJzAnOworCisgICAgaWYoIHZlclszXSA+PSAnMCcgJiYgdmVyWzNdIDw9ICc5JyApCisgICAgICAgIG1pbm9yID0gMTAgKiBtaW5vciArIHZlclszXSAtICcwJzsKKyAgICBlbHNlIGlmKCB2ZXIgWzNdICE9ICcuJyApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCBtaW5vciA8IDE3ICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CitzdGF0aWMgaW50IGhhc19nZXRyYW5kb20gPSAtMTsKKyNlbmRpZiAvKiBTWVNfZ2V0cmFuZG9tICovCisjZW5kaWYgLyogX19saW51eF9fICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApCit7CisgICAgRklMRSAqZmlsZTsKKyAgICBzaXplX3QgcmVhZF9sZW47CisgICAgKCh2b2lkKSBkYXRhKTsKKworI2lmIGRlZmluZWQoSEFWRV9HRVRSQU5ET00pCisgICAgaWYoIGhhc19nZXRyYW5kb20gPT0gLTEgKQorICAgICAgICBoYXNfZ2V0cmFuZG9tID0gKCBjaGVja192ZXJzaW9uXzNfMTdfcGx1cygpID09IDAgKTsKKworICAgIGlmKCBoYXNfZ2V0cmFuZG9tICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgaWYoICggcmV0ID0gZ2V0cmFuZG9tX3dyYXBwZXIoIG91dHB1dCwgbGVuLCAwICkgKSA8IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKworICAgICAgICAqb2xlbiA9IHJldDsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfR0VUUkFORE9NICovCisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBmaWxlID0gZm9wZW4oICIvZGV2L3VyYW5kb20iLCAicmIiICk7CisgICAgaWYoIGZpbGUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisKKyAgICByZWFkX2xlbiA9IGZyZWFkKCBvdXRwdXQsIDEsIGxlbiwgZmlsZSApOworICAgIGlmKCByZWFkX2xlbiAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmaWxlICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmaWxlICk7CisgICAgKm9sZW4gPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBfV0lOMzIgJiYgIUVGSVg2NCAmJiAhRUZJMzIgKi8KKyNlbmRpZiAvKiAhTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpCitpbnQgbWJlZHRsc19udWxsX2VudHJvcHlfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgICgodm9pZCkgZGF0YSk7CisgICAgKCh2b2lkKSBvdXRwdXQpOworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBsZW4gPCBzaXplb2YodW5zaWduZWQgY2hhcikgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICpvbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKK2ludCBtYmVkdGxzX2hhcmRjbG9ja19wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgbG9uZyB0aW1lciA9IG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpOworICAgICgodm9pZCkgZGF0YSk7CisgICAgKm9sZW4gPSAwOworCisgICAgaWYoIGxlbiA8IHNpemVvZih1bnNpZ25lZCBsb25nKSApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgbWVtY3B5KCBvdXRwdXQsICZ0aW1lciwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICk7CisgICAgKm9sZW4gPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1RJTUlOR19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCitpbnQgbWJlZHRsc19oYXZlZ2VfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICpocyA9IChtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqKSBkYXRhOworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBtYmVkdGxzX2hhdmVnZV9yYW5kb20oIGhzLCBvdXRwdXQsIGxlbiApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworCisgICAgKm9sZW4gPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVHRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQoraW50IG1iZWR0bHNfbnZfc2VlZF9wb2xsKCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4sIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHNpemVfdCB1c2VfbGVuID0gTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkU7CisgICAgKCh2b2lkKSBkYXRhKTsKKworICAgIG1lbXNldCggYnVmLCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgaWYoIG1iZWR0bHNfbnZfc2VlZF9yZWFkKCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPCAwICkKKyAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisKKyAgICBpZiggbGVuIDwgdXNlX2xlbiApCisgICAgICB1c2VfbGVuID0gbGVuOworCisgICAgbWVtY3B5KCBvdXRwdXQsIGJ1ZiwgdXNlX2xlbiApOworICAgICpvbGVuID0gdXNlX2xlbjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZXJyb3IuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyZGIwYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2Vycm9yLmMKQEAgLTAsMCArMSw3MDcgQEAKKy8qCisgKiAgRXJyb3IgbWVzc2FnZSBpbmZvcm1hdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWSkKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICB0aW1lX3QKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JMT1dGSVNIX0MpCisjaW5jbHVkZSAibWJlZHRscy9ibG93ZmlzaC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpbmNsdWRlICJtYmVkdGxzL2NhbWVsbGlhLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyNpbmNsdWRlICJtYmVkdGxzL2NjbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZGhtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvaG1hY19kcmJnLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX05FVF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX09JRF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QQURMT0NLX0MpCisjaW5jbHVkZSAibWJlZHRscy9wYWRsb2NrLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykgfHwgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGtjczEyLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGtjczUuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvdGhyZWFkaW5nLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQykKKyNpbmNsdWRlICJtYmVkdGxzL3h0ZWEuaCIKKyNlbmRpZgorCisKK3ZvaWQgbWJlZHRsc19zdHJlcnJvciggaW50IHJldCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICkKK3sKKyAgICBzaXplX3QgbGVuOworICAgIGludCB1c2VfcmV0OworCisgICAgaWYoIGJ1ZmxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtc2V0KCBidWYsIDB4MDAsIGJ1ZmxlbiApOworCisgICAgaWYoIHJldCA8IDAgKQorICAgICAgICByZXQgPSAtcmV0OworCisgICAgaWYoIHJldCAmIDB4RkY4MCApCisgICAgeworICAgICAgICB1c2VfcmV0ID0gcmV0ICYgMHhGRjgwOworCisgICAgICAgIC8vIEhpZ2ggbGV2ZWwgZXJyb3IgY29kZXMKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQkVHSU4gZ2VuZXJhdGVkIGNvZGUKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0lQSEVSIC0gVGhlIHNlbGVjdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0lQSEVSIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ0lQSEVSX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDSVBIRVIgLSBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0lQSEVSIC0gSW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIHBhZGRpbmcgYW5kIGlzIHJlamVjdGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNJUEhFUiAtIERlY3J5cHRpb24gb2YgYmxvY2sgcmVxdWlyZXMgYSBmdWxsIGJsb2NrIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDSVBIRVIgLSBBdXRoZW50aWNhdGlvbiBmYWlsZWQgKGZvciBBRUFEIG1vZGVzKSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9DT05URVhUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNJUEhFUiAtIFRoZSBjb250ZXh0IGlzIGludmFsaWQsIGVnIGJlY2F1c2UgaXQgd2FzIGZyZWUoKWVkIiApOworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfREhNX1JFQURfUEFSQU1TX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJESE0gLSBSZWFkaW5nIG9mIHRoZSBESE0gcGFyYW1ldGVycyBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJESE0gLSBNYWtpbmcgb2YgdGhlIERITSBwYXJhbWV0ZXJzIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fUkVBRF9QVUJMSUNfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkRITSAtIFJlYWRpbmcgb2YgdGhlIHB1YmxpYyB2YWx1ZXMgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0RITV9NQUtFX1BVQkxJQ19GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gTWFraW5nIG9mIHRoZSBwdWJsaWMgdmFsdWUgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0RITV9DQUxDX1NFQ1JFVF9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiREhNIC0gQ2FsY3VsYXRpb24gb2YgdGhlIERITSBzZWNyZXQgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0RITV9JTlZBTElEX0ZPUk1BVCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJESE0gLSBUaGUgQVNOLjEgZGF0YSBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fQUxMT0NfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkRITSAtIEFsbG9jYXRpb24gb2YgbWVtb3J5IGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ESE1fRklMRV9JT19FUlJPUikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJESE0gLSBSZWFkL3dyaXRlIG9mIGZpbGUgZmFpbGVkIiApOworI2VuZGlmIC8qIE1CRURUTFNfREhNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRUNQIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRUNQIC0gVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gd3JpdGUgdG8iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRUNQIC0gUmVxdWVzdGVkIGN1cnZlIG5vdCBhdmFpbGFibGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRUNQIC0gVGhlIHNpZ25hdHVyZSBpcyBub3QgdmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJFQ1AgLSBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX1JBTkRPTV9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRUNQIC0gR2VuZXJhdGlvbiBvZiByYW5kb20gdmFsdWUsIHN1Y2ggYXMgKGVwaGVtZXJhbCkga2V5LCBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIEludmFsaWQgcHJpdmF0ZSBvciBwdWJsaWMga2V5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0VDUF9TSUdfTEVOX01JU01BVENIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVDUCAtIFNpZ25hdHVyZSBpcyB2YWxpZCBidXQgc2hvcnRlciB0aGFuIHRoZSB1c2VyLXN1cHBsaWVkIGxlbmd0aCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NRF9GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk1EIC0gVGhlIHNlbGVjdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJNRCAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJNRCAtIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTURfRklMRV9JT19FUlJPUikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJNRCAtIE9wZW5pbmcgb3IgcmVhZGluZyBvZiBmaWxlIGZhaWxlZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykgfHwgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEVNIC0gTm8gUEVNIGhlYWRlciBvciBmb290ZXIgZm91bmQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfREFUQSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQRU0gLSBQRU0gc3RyaW5nIGlzIG5vdCBhcyBleHBlY3RlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QRU1fQUxMT0NfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIFJTQSBJViBpcyBub3QgaW4gaGV4LWZvcm1hdCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QRU1fVU5LTk9XTl9FTkNfQUxHKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIFVuc3VwcG9ydGVkIGtleSBlbmNyeXB0aW9uIGFsZ29yaXRobSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEVNIC0gUHJpdmF0ZSBrZXkgcGFzc3dvcmQgY2FuJ3QgYmUgZW1wdHkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX01JU01BVENIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIEdpdmVuIHByaXZhdGUga2V5IHBhc3N3b3JkIGRvZXMgbm90IGFsbG93IGZvciBjb3JyZWN0IGRlY3J5cHRpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEVNIC0gVW5hdmFpbGFibGUgZmVhdHVyZSwgZS5nLiBoYXNoaW5nL2VuY3J5cHRpb24gY29tYmluYXRpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEVNX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBFTSAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgfHwgTUJFRFRMU19QRU1fV1JJVEVfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfQUxMT0NfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEsgLSBUeXBlIG1pc21hdGNoLCBlZyBhdHRlbXB0IHRvIGVuY3J5cHQgd2l0aCBhbiBFQ0RTQSBrZXkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEsgLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19GSUxFX0lPX0VSUk9SKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gUmVhZC93cml0ZSBvZiBmaWxlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gVW5zdXBwb3J0ZWQga2V5IHZlcnNpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gSW52YWxpZCBrZXkgdGFnIG9yIHZhbHVlIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gS2V5IGFsZ29yaXRobSBpcyB1bnN1cHBvcnRlZCAob25seSBSU0EgYW5kIEVDIGFyZSBzdXBwb3J0ZWQpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gUHJpdmF0ZSBrZXkgcGFzc3dvcmQgY2FuJ3QgYmUgZW1wdHkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEsgLSBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gVGhlIHB1YmtleSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZCAob25seSBSU0EgYW5kIEVDIGFyZSBzdXBwb3J0ZWQpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX0lOVkFMSURfQUxHKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gVGhlIGFsZ29yaXRobSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS19VTktOT1dOX05BTUVEX0NVUlZFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLIC0gRWxsaXB0aWMgY3VydmUgaXMgdW5zdXBwb3J0ZWQgKG9ubHkgTklTVCBjdXJ2ZXMgYXJlIHN1cHBvcnRlZCkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQSyAtIFVuYXZhaWxhYmxlIGZlYXR1cmUsIGUuZy4gUlNBIGRpc2FibGVkIGZvciBSU0Ega2V5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEsgLSBUaGUgc2lnbmF0dXJlIGlzIHZhbGlkIGJ1dCBpdHMgbGVuZ3RoIGlzIGxlc3MgdGhhbiBleHBlY3RlZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS0NTMTJfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzEyIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzEyIC0gRmVhdHVyZSBub3QgYXZhaWxhYmxlLCBlLmcuIHVuc3VwcG9ydGVkIGVuY3J5cHRpb24gc2NoZW1lIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLQ1MxMl9QQkVfSU5WQUxJRF9GT1JNQVQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzEyIC0gUEJFIEFTTi4xIGRhdGEgbm90IGFzIGV4cGVjdGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLQ1MxMl9QQVNTV09SRF9NSVNNQVRDSCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQS0NTMTIgLSBHaXZlbiBwcml2YXRlIGtleSBwYXNzd29yZCBkb2VzIG5vdCBhbGxvdyBmb3IgY29ycmVjdCBkZWNyeXB0aW9uIiApOworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BLQ1M1X0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlBLQ1M1IC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEtDUzUgLSBVbmV4cGVjdGVkIEFTTi4xIGRhdGEiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQS0NTNSAtIFJlcXVlc3RlZCBlbmNyeXB0aW9uIG9yIGRpZ2VzdCBhbGcgbm90IGF2YWlsYWJsZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9QS0NTNV9QQVNTV09SRF9NSVNNQVRDSCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJQS0NTNSAtIEdpdmVuIHByaXZhdGUga2V5IHBhc3N3b3JkIGRvZXMgbm90IGFsbG93IGZvciBjb3JyZWN0IGRlY3J5cHRpb24iICk7CisjZW5kaWYgLyogTUJFRFRMU19QS0NTNV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUlNBIC0gSW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIHBhZGRpbmcgYW5kIGlzIHJlamVjdGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9LRVlfR0VOX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBTb21ldGhpbmcgZmFpbGVkIGR1cmluZyBnZW5lcmF0aW9uIG9mIGEga2V5IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIEtleSBmYWlsZWQgdG8gcGFzcyB0aGUgbGlicmFyeSdzIHZhbGlkaXR5IGNoZWNrIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9QVUJMSUNfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIFRoZSBwdWJsaWMga2V5IG9wZXJhdGlvbiBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfUlNBX1BSSVZBVEVfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIFRoZSBwcml2YXRlIGtleSBvcGVyYXRpb24gZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIFRoZSBQS0NTIzEgdmVyaWZpY2F0aW9uIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9SU0FfT1VUUFVUX1RPT19MQVJHRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJSU0EgLSBUaGUgb3V0cHV0IGJ1ZmZlciBmb3IgZGVjcnlwdGlvbiBpcyBub3QgbGFyZ2UgZW5vdWdoIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlJTQSAtIFRoZSByYW5kb20gZ2VuZXJhdG9yIGZhaWxlZCB0byBnZW5lcmF0ZSBub24temVyb3MiICk7CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBUaGUgcmVxdWVzdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gQmFkIGlucHV0IHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBBbiBpbnZhbGlkIFNTTCByZWNvcmQgd2FzIHJlY2VpdmVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9DT05OX0VPRikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBUaGUgY29ubmVjdGlvbiBpbmRpY2F0ZWQgYW4gRU9GIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0NJUEhFUikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBBbiB1bmtub3duIGNpcGhlciB3YXMgcmVjZWl2ZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4pICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVGhlIHNlcnZlciBoYXMgbm8gY2lwaGVyc3VpdGVzIGluIGNvbW1vbiB3aXRoIHRoZSBjbGllbnQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX05PX1JORykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBObyBSTkcgd2FzIHByb3ZpZGVkIHRvIHRoZSBTU0wgbW9kdWxlIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9OT19DTElFTlRfQ0VSVElGSUNBVEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gTm8gY2xpZW50IGNlcnRpZmljYXRpb24gcmVjZWl2ZWQgZnJvbSB0aGUgY2xpZW50LCBidXQgcmVxdWlyZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1RPT19MQVJHRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBPdXIgb3duIGNlcnRpZmljYXRlKHMpIGlzL2FyZSB0b28gbGFyZ2UgdG8gc2VuZCBpbiBhbiBTU0wgbWVzc2FnZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVGhlIG93biBjZXJ0aWZpY2F0ZSBpcyBub3Qgc2V0LCBidXQgbmVlZGVkIGJ5IHRoZSBzZXJ2ZXIiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVEKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBvd24gcHJpdmF0ZSBrZXkgb3IgcHJlLXNoYXJlZCBrZXkgaXMgbm90IHNldCwgYnV0IG5lZWRlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQ0FfQ0hBSU5fUkVRVUlSRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gTm8gQ0EgQ2hhaW4gaXMgc2V0LCBidXQgcmVxdWlyZWQgdG8gb3BlcmF0ZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRSkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIEEgZmF0YWwgYWxlcnQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9QRUVSX1ZFUklGWV9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIG91ciBwZWVyIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVGhlIHBlZXIgbm90aWZpZWQgdXMgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyBnb2luZyB0byBiZSBjbG9zZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8pICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50SGVsbG8gaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIFNlcnZlckhlbGxvIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGVSZXF1ZXN0IGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgU2VydmVyS2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPX0RPTkUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgU2VydmVySGVsbG9Eb25lIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9SUCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBQcm9jZXNzaW5nIG9mIHRoZSBDbGllbnRLZXlFeGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQgaW4gREhNIC8gRUNESCBSZWFkIFB1YmxpYyIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIGluIERITSAvIEVDREggQ2FsY3VsYXRlIFNlY3JldCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZVZlcmlmeSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgQ2hhbmdlQ2lwaGVyU3BlYyBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19GSU5JU0hFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBQcm9jZXNzaW5nIG9mIHRoZSBGaW5pc2hlZCBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBIYXJkd2FyZSBhY2NlbGVyYXRpb24gZnVuY3Rpb24gcmV0dXJuZWQgd2l0aCBlcnJvciIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFMTFRIUk9VR0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZ1bmN0aW9uIHNraXBwZWQgLyBsZWZ0IGFsb25lIGRhdGEiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBQcm9jZXNzaW5nIG9mIHRoZSBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CQURfSFNfUFJPVE9DT0xfVkVSU0lPTikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBIYW5kc2hha2UgcHJvdG9jb2wgbm90IHdpdGhpbiBtaW4vbWF4IGJvdW5kYXJpZXMiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX0JBRF9IU19ORVdfU0VTU0lPTl9USUNLRVQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHJvY2Vzc2luZyBvZiB0aGUgTmV3U2Vzc2lvblRpY2tldCBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1NFU1NJT05fVElDS0VUX0VYUElSRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gU2Vzc2lvbiB0aWNrZXQgaGFzIGV4cGlyZWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0gpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUHVibGljIGtleSB0eXBlIG1pc21hdGNoIChlZywgYXNrZWQgZm9yIFJTQSBrZXkgZXhjaGFuZ2UgYW5kIHByZXNlbnRlZCBFQyBrZXkpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0lERU5USVRZKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFVua25vd24gaWRlbnRpdHkgcmVjZWl2ZWQgKGVnLCBQU0sgaWRlbnRpdHkpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBJbnRlcm5hbCBlcnJvciAoZWcsIHVuZXhwZWN0ZWQgZmFpbHVyZSBpbiBsb3dlci1sZXZlbCBtb2R1bGUpIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIEEgY291bnRlciB3b3VsZCB3cmFwIChlZywgdG9vIG1hbnkgbWVzc2FnZXMgZXhjaGFuZ2VkKSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfV0FJVElOR19TRVJWRVJfSEVMTE9fUkVORUdPKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFVuZXhwZWN0ZWQgbWVzc2FnZSBhdCBTZXJ2ZXJIZWxsbyBpbiByZW5lZ290aWF0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gRFRMUyBjbGllbnQgbXVzdCByZXRyeSBmb3IgaGVsbG8gdmVyaWZpY2F0aW9uIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIEEgYnVmZmVyIGlzIHRvbyBzbWFsbCB0byByZWNlaXZlIG9yIHdyaXRlIGEgbWVzc2FnZSIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfTk9fVVNBQkxFX0NJUEhFUlNVSVRFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIChlZywgbm8gc3VpdGFibGUgY2VydGlmaWNhdGUsIHNlZSBkZWJ1ZyBtZXNzYWdlcykiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJTU0wgLSBDb25uZWN0aW9uIHJlcXVpcmVzIGEgcmVhZCBjYWxsIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIENvbm5lY3Rpb24gcmVxdWlyZXMgYSB3cml0ZSBjYWxsIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9USU1FT1VUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBvcGVyYXRpb24gdGltZWQgb3V0IiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9DTElFTlRfUkVDT05ORUNUKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIFRoZSBjbGllbnQgaW5pdGlhdGVkIGEgcmVjb25uZWN0IGZyb20gdGhlIHNhbWUgcG9ydCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gUmVjb3JkIGhlYWRlciBsb29rcyB2YWxpZCBidXQgaXMgbm90IGV4cGVjdGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9OT05fRkFUQUwpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiU1NMIC0gVGhlIGFsZXJ0IG1lc3NhZ2UgcmVjZWl2ZWQgaW5kaWNhdGVzIGEgbm9uLWZhdGFsIGVycm9yIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1ZFUklGWV9IQVNIKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlNTTCAtIENvdWxkbid0IHNldCB0aGUgaGFzaCBmb3IgdmVyaWZ5aW5nIENlcnRpZmljYXRlVmVyaWZ5IiApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RMU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykgfHwgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpCisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlg1MDkgLSBVbmF2YWlsYWJsZSBmZWF0dXJlLCBlLmcuIFJTQSBoYXNoaW5nL2VuY3J5cHRpb24gY29tYmluYXRpb24iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX09JRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gUmVxdWVzdGVkIE9JRCBpcyB1bmtub3duIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBDUlQvQ1JML0NTUiBmb3JtYXQgaXMgaW52YWxpZCwgZS5nLiBkaWZmZXJlbnQgdHlwZSBleHBlY3RlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gVGhlIENSVC9DUkwvQ1NSIHZlcnNpb24gZWxlbWVudCBpcyBpbnZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBzZXJpYWwgdGFnIG9yIHZhbHVlIGlzIGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gVGhlIGFsZ29yaXRobSB0YWcgb3IgdmFsdWUgaXMgaW52YWxpZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gVGhlIG5hbWUgdGFnIG9yIHZhbHVlIGlzIGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBkYXRlIHRhZyBvciB2YWx1ZSBpcyBpbnZhbGlkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBzaWduYXR1cmUgdGFnIG9yIHZhbHVlIGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIFRoZSBleHRlbnNpb24gdGFnIG9yIHZhbHVlIGlzIGludmFsaWQiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1ZFUlNJT04pICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIENSVC9DUkwvQ1NSIGhhcyBhbiB1bnN1cHBvcnRlZCB2ZXJzaW9uIG51bWJlciIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRykgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gU2lnbmF0dXJlIGFsZ29yaXRobSAob2lkKSBpcyB1bnN1cHBvcnRlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X1NJR19NSVNNQVRDSCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gU2lnbmF0dXJlIGFsZ29yaXRobXMgZG8gbm90IG1hdGNoLiAoc2VlIFxcYyA6Om1iZWR0bHNfeDUwOV9jcnQgc2lnX29pZCkiICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQsIGUuZy4gQ1JMLCBDQSBvciBzaWduYXR1cmUgY2hlY2sgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9VTktOT1dOX0ZPUk1BVCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gRm9ybWF0IG5vdCByZWNvZ25pemVkIGFzIERFUiBvciBQRU0iICk7CisgICAgICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gSW5wdXQgaW52YWxpZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCkgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gQWxsb2NhdGlvbiBvZiBtZW1vcnkgZmFpbGVkIiApOworICAgICAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1g1MDlfRklMRV9JT19FUlJPUikgKQorICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJYNTA5IC0gUmVhZC93cml0ZSBvZiBmaWxlIGZhaWxlZCIgKTsKKyAgICAgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9YNTA5X0JVRkZFUl9UT09fU01BTEwpICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiWDUwOSAtIERlc3RpbmF0aW9uIGJ1ZmZlciBpcyB0b28gc21hbGwiICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X1VTRV9DIHx8IE1CRURUTFNfWDUwOV9DUkVBVEVfQyAqLworICAgICAgICAvLyBFTkQgZ2VuZXJhdGVkIGNvZGUKKworICAgICAgICBpZiggc3RybGVuKCBidWYgKSA9PSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiVU5LTk9XTiBFUlJPUiBDT0RFICglMDRYKSIsIHVzZV9yZXQgKTsKKyAgICB9CisKKyAgICB1c2VfcmV0ID0gcmV0ICYgfjB4RkY4MDsKKworICAgIGlmKCB1c2VfcmV0ID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBoaWdoIGxldmVsIGNvZGUgaXMgcHJlc2VudCwgbWFrZSBhIGNvbmNhdGVuYXRpb24gYmV0d2VlbiBib3RoCisgICAgLy8gZXJyb3Igc3RyaW5ncy4KKyAgICAvLworICAgIGxlbiA9IHN0cmxlbiggYnVmICk7CisKKyAgICBpZiggbGVuID4gMCApCisgICAgeworICAgICAgICBpZiggYnVmbGVuIC0gbGVuIDwgNSApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmICsgbGVuLCBidWZsZW4gLSBsZW4sICIgOiAiICk7CisKKyAgICAgICAgYnVmICs9IGxlbiArIDM7CisgICAgICAgIGJ1ZmxlbiAtPSBsZW4gKyAzOworICAgIH0KKworICAgIC8vIExvdyBsZXZlbCBlcnJvciBjb2RlcworICAgIC8vCisgICAgLy8gQkVHSU4gZ2VuZXJhdGVkIGNvZGUKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQUVTIC0gSW52YWxpZCBrZXkgbGVuZ3RoIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQUVTX0lOVkFMSURfSU5QVVRfTEVOR1RIKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQUVTIC0gSW52YWxpZCBkYXRhIGlucHV0IGxlbmd0aCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVNOMV9QQVJTRV9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkFTTjEgLSBPdXQgb2YgZGF0YSB3aGVuIHBhcnNpbmcgYW4gQVNOMSBkYXRhIHN0cnVjdHVyZSIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJBU04xIC0gQVNOMSB0YWcgd2FzIG9mIGFuIHVuZXhwZWN0ZWQgdmFsdWUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQVNOMSAtIEVycm9yIHdoZW4gdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9yIGludmFsaWQgbGVuZ3RoIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJBU04xIC0gQWN0dWFsIGxlbmd0aCBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgbGVuZ3RoIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0RBVEEpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJBU04xIC0gRGF0YSBpcyBpbnZhbGlkLiAobm90IHVzZWQpIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQVNOMV9BTExPQ19GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJBU04xIC0gTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQVNOMSAtIEJ1ZmZlciB0b28gc21hbGwgd2hlbiB3cml0aW5nIEFTTi4xIGRhdGEgc3RydWN0dXJlIiApOworI2VuZGlmIC8qIE1CRURUTFNfQVNOMV9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJBU0U2NCAtIE91dHB1dCBidWZmZXIgdG9vIHNtYWxsIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQkFTRTY0IC0gSW52YWxpZCBjaGFyYWN0ZXIgaW4gaW5wdXQiICk7CisjZW5kaWYgLyogTUJFRFRMU19CQVNFNjRfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX0ZJTEVfSU9fRVJST1IpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCSUdOVU0gLSBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhIGZpbGUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCSUdOVU0gLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX01QSV9JTlZBTElEX0NIQVJBQ1RFUikgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJJR05VTSAtIFRoZXJlIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIHRoZSBkaWdpdCBzdHJpbmciICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NUElfQlVGRkVSX1RPT19TTUFMTCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJJR05VTSAtIFRoZSBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIHdyaXRlIHRvIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQklHTlVNIC0gVGhlIGlucHV0IGFyZ3VtZW50cyBhcmUgbmVnYXRpdmUgb3IgcmVzdWx0IGluIGlsbGVnYWwgb3V0cHV0IiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX0RJVklTSU9OX0JZX1pFUk8pICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJCSUdOVU0gLSBUaGUgaW5wdXQgYXJndW1lbnQgZm9yIGRpdmlzaW9uIGlzIHplcm8sIHdoaWNoIGlzIG5vdCBhbGxvd2VkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQklHTlVNIC0gVGhlIGlucHV0IGFyZ3VtZW50cyBhcmUgbm90IGFjY2VwdGFibGUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQklHTlVNIC0gTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiApOworI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RIKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQkxPV0ZJU0ggLSBJbnZhbGlkIGtleSBsZW5ndGgiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0lOUFVUX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkJMT1dGSVNIIC0gSW52YWxpZCBkYXRhIGlucHV0IGxlbmd0aCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0JMT1dGSVNIX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RIKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ0FNRUxMSUEgLSBJbnZhbGlkIGtleSBsZW5ndGgiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNBTUVMTElBIC0gSW52YWxpZCBkYXRhIGlucHV0IGxlbmd0aCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDQ00gLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkNDTSAtIEF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBmYWlsZWQiICk7CisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDVFJfRFJCRyAtIFRoZSBlbnRyb3B5IHNvdXJjZSBmYWlsZWQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DVFJfRFJCR19SRVFVRVNUX1RPT19CSUcpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDVFJfRFJCRyAtIFRvbyBtYW55IHJhbmRvbSByZXF1ZXN0ZWQgaW4gc2luZ2xlIGNhbGwiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiQ1RSX0RSQkcgLSBJbnB1dCB0b28gbGFyZ2UgKEVudHJvcHkgKyBhZGRpdGlvbmFsKSIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0NUUl9EUkJHX0ZJTEVfSU9fRVJST1IpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJDVFJfRFJCRyAtIFJlYWQvd3JpdGUgZXJyb3IgaW4gZmlsZSIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkRFUyAtIFRoZSBkYXRhIGlucHV0IGhhcyBhbiBpbnZhbGlkIGxlbmd0aCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRU5UUk9QWSAtIENyaXRpY2FsIGVudHJvcHkgc291cmNlIGZhaWx1cmUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9FTlRST1BZX01BWF9TT1VSQ0VTKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRU5UUk9QWSAtIE5vIG1vcmUgc291cmNlcyBjYW4gYmUgYWRkZWQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9FTlRST1BZX05PX1NPVVJDRVNfREVGSU5FRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkVOVFJPUFkgLSBObyBzb3VyY2VzIGhhdmUgYmVlbiBhZGRlZCB0byBwb2xsIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TVFJPTkdfU09VUkNFKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRU5UUk9QWSAtIE5vIHN0cm9uZyBzb3VyY2VzIGhhdmUgYmVlbiBhZGRlZCB0byBwb2xsIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiRU5UUk9QWSAtIFJlYWQvd3JpdGUgZXJyb3IgaW4gZmlsZSIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfR0NNX0FVVEhfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiR0NNIC0gQXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIGZhaWxlZCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0dDTV9CQURfSU5QVVQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJHQ00gLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiSE1BQ19EUkJHIC0gVG9vIG1hbnkgcmFuZG9tIHJlcXVlc3RlZCBpbiBzaW5nbGUgY2FsbCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiSE1BQ19EUkJHIC0gSW5wdXQgdG9vIGxhcmdlIChFbnRyb3B5ICsgYWRkaXRpb25hbCkiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUikgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIkhNQUNfRFJCRyAtIFJlYWQvd3JpdGUgZXJyb3IgaW4gZmlsZSIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJITUFDX0RSQkcgLSBUaGUgZW50cm9weSBzb3VyY2UgZmFpbGVkIiApOworI2VuZGlmIC8qIE1CRURUTFNfSE1BQ19EUkJHX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ORVRfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX05FVF9TT0NLRVRfRkFJTEVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gRmFpbGVkIHRvIG9wZW4gYSBzb2NrZXQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfQ09OTkVDVF9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBUaGUgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4gc2VydmVyIC8gcG9ydCBmYWlsZWQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfQklORF9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBCaW5kaW5nIG9mIHRoZSBzb2NrZXQgZmFpbGVkIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfTkVUX0xJU1RFTl9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBDb3VsZCBub3QgbGlzdGVuIG9uIHRoZSBzb2NrZXQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfQUNDRVBUX0ZBSUxFRCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk5FVCAtIENvdWxkIG5vdCBhY2NlcHQgdGhlIGluY29taW5nIGNvbm5lY3Rpb24iICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfUkVDVl9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBSZWFkaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvY2tldCBmYWlsZWQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfU0VORF9GQUlMRUQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBTZW5kaW5nIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIHNvY2tldCBmYWlsZWQiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk5FVCAtIENvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXIiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NUKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiTkVUIC0gRmFpbGVkIHRvIGdldCBhbiBJUCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gaG9zdG5hbWUiICk7CisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9ORVRfQlVGRkVSX1RPT19TTUFMTCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIk5FVCAtIEJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgZGF0YSIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX05FVF9JTlZBTElEX0NPTlRFWFQpICkKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sICJORVQgLSBUaGUgY29udGV4dCBpcyBpbnZhbGlkLCBlZyBiZWNhdXNlIGl0IHdhcyBmcmVlKCllZCIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX05FVF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfT0lEX0MpCisgICAgaWYoIHVzZV9yZXQgPT0gLShNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5EKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiT0lEIC0gT0lEIGlzIG5vdCBmb3VuZCIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX09JRF9CVUZfVE9PX1NNQUxMKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiT0lEIC0gb3V0cHV0IGJ1ZmZlciBpcyB0b28gc21hbGwiICk7CisjZW5kaWYgLyogTUJFRFRMU19PSURfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BBRExPQ0tfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVEKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiUEFETE9DSyAtIElucHV0IGRhdGEgc2hvdWxkIGJlIGFsaWduZWQiICk7CisjZW5kaWYgLyogTUJFRFRMU19QQURMT0NLX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1RIUkVBRElOR19GRUFUVVJFX1VOQVZBSUxBQkxFKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiVEhSRUFESU5HIC0gVGhlIHNlbGVjdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIgKTsKKyAgICBpZiggdXNlX3JldCA9PSAtKE1CRURUTFNfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQSkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlRIUkVBRElORyAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIiApOworICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SKSApCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiwgYnVmbGVuLCAiVEhSRUFESU5HIC0gTG9ja2luZyAvIHVubG9ja2luZyAvIGZyZWUgZmFpbGVkIHdpdGggZXJyb3IgY29kZSIgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWFRFQV9DKQorICAgIGlmKCB1c2VfcmV0ID09IC0oTUJFRFRMU19FUlJfWFRFQV9JTlZBTElEX0lOUFVUX0xFTkdUSCkgKQorICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlhURUEgLSBUaGUgZGF0YSBpbnB1dCBoYXMgYW4gaW52YWxpZCBsZW5ndGgiICk7CisjZW5kaWYgLyogTUJFRFRMU19YVEVBX0MgKi8KKyAgICAvLyBFTkQgZ2VuZXJhdGVkIGNvZGUKKworICAgIGlmKCBzdHJsZW4oIGJ1ZiApICE9IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlVOS05PV04gRVJST1IgQ09ERSAoJTA0WCkiLCB1c2VfcmV0ICk7Cit9CisKKyNlbHNlIC8qIE1CRURUTFNfRVJST1JfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQorCisvKgorICogUHJvdmlkZSBhbiBub24tZnVuY3Rpb24gaW4gY2FzZSBNQkVEVExTX0VSUk9SX0MgaXMgbm90IGRlZmluZWQKKyAqLwordm9pZCBtYmVkdGxzX3N0cmVycm9yKCBpbnQgcmV0LCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgICgodm9pZCkgcmV0KTsKKworICAgIGlmKCBidWZsZW4gPiAwICkKKyAgICAgICAgYnVmWzBdID0gJ1wwJzsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZ2NtLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9nY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTIxMGM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvZ2NtLmMKQEAgLTAsMCArMSw5NTIgQEAKKy8qCisgKiAgTklTVCBTUDgwMC0zOEQgY29tcGxpYW50IEdDTSBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEQvU1AtODAwLTM4RC5wZGYKKyAqCisgKiBTZWUgYWxzbzoKKyAqIFtNR1ZdIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVC90b29sa2l0L0JDTS9kb2N1bWVudHMvcHJvcG9zZWRtb2Rlcy9nY20vZ2NtLXJldmlzZWQtc3BlYy5wZGYKKyAqCisgKiBXZSB1c2UgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgYXMgU2hvdXAncyBtZXRob2Qgd2l0aCA0LWJpdCB0YWJsZXMgaW4KKyAqIFtNR1ZdIDQuMSwgcHAuIDEyLTEzLCB0byBlbmhhbmNlIHNwZWVkIHdpdGhvdXQgdXNpbmcgdG9vIG11Y2ggbWVtb3J5LgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL2djbS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Flc25pLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICYmIE1CRURUTFNfQUVTX0MgKi8KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGJpZyBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9CRQorI2RlZmluZSBHRVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgMTYgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfQorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfZ2NtX2luaXQoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19nY21fY29udGV4dCApICk7Cit9CisKKy8qCisgKiBQcmVjb21wdXRlIHNtYWxsIG11bHRpcGxlcyBvZiBILCB0aGF0IGlzIHNldAorICogICAgICBISFtpXSB8fCBITFtpXSA9IEggdGltZXMgaSwKKyAqIHdoZXJlIGkgaXMgc2VlbiBhcyBhIGZpZWxkIGVsZW1lbnQgYXMgaW4gW01HVl0sIGllIGhpZ2gtb3JkZXIgYml0cworICogY29ycmVzcG9uZCB0byBsb3cgcG93ZXJzIG9mIFAuIFRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBzYW1lIHdheSwgdGhhdAorICogaXMgdGhlIGhpZ2gtb3JkZXIgYml0IG9mIEhIIGNvcnJlc3BvbmRzIHRvIFBeMCBhbmQgdGhlIGxvdy1vcmRlciBiaXQgb2YgSEwKKyAqIGNvcnJlc3BvbmRzIHRvIFBeMTI3LgorICovCitzdGF0aWMgaW50IGdjbV9nZW5fdGFibGUoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCApCit7CisgICAgaW50IHJldCwgaSwgajsKKyAgICB1aW50NjRfdCBoaSwgbG87CisgICAgdWludDY0X3QgdmwsIHZoOworICAgIHVuc2lnbmVkIGNoYXIgaFsxNl07CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgbWVtc2V0KCBoLCAwLCAxNiApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eC0+Y2lwaGVyX2N0eCwgaCwgMTYsIGgsICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qIHBhY2sgaCBhcyB0d28gNjQtYml0cyBpbnRzLCBiaWctZW5kaWFuICovCisgICAgR0VUX1VJTlQzMl9CRSggaGksIGgsICAwICApOworICAgIEdFVF9VSU5UMzJfQkUoIGxvLCBoLCAgNCAgKTsKKyAgICB2aCA9ICh1aW50NjRfdCkgaGkgPDwgMzIgfCBsbzsKKworICAgIEdFVF9VSU5UMzJfQkUoIGhpLCBoLCAgOCAgKTsKKyAgICBHRVRfVUlOVDMyX0JFKCBsbywgaCwgIDEyICk7CisgICAgdmwgPSAodWludDY0X3QpIGhpIDw8IDMyIHwgbG87CisKKyAgICAvKiA4ID0gMTAwMCBjb3JyZXNwb25kcyB0byAxIGluIEdGKDJeMTI4KSAqLworICAgIGN0eC0+SExbOF0gPSB2bDsKKyAgICBjdHgtPkhIWzhdID0gdmg7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfWDg2XzY0KQorICAgIC8qIFdpdGggQ0xNVUwgc3VwcG9ydCwgd2UgbmVlZCBvbmx5IGgsIG5vdCB0aGUgcmVzdCBvZiB0aGUgdGFibGUgKi8KKyAgICBpZiggbWJlZHRsc19hZXNuaV9oYXNfc3VwcG9ydCggTUJFRFRMU19BRVNOSV9DTE1VTCApICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisjZW5kaWYKKworICAgIC8qIDAgY29ycmVzcG9uZHMgdG8gMCBpbiBHRigyXjEyOCkgKi8KKyAgICBjdHgtPkhIWzBdID0gMDsKKyAgICBjdHgtPkhMWzBdID0gMDsKKworICAgIGZvciggaSA9IDQ7IGkgPiAwOyBpID4+PSAxICkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IFQgPSAoIHZsICYgMSApICogMHhlMTAwMDAwMFU7CisgICAgICAgIHZsICA9ICggdmggPDwgNjMgKSB8ICggdmwgPj4gMSApOworICAgICAgICB2aCAgPSAoIHZoID4+IDEgKSBeICggKHVpbnQ2NF90KSBUIDw8IDMyKTsKKworICAgICAgICBjdHgtPkhMW2ldID0gdmw7CisgICAgICAgIGN0eC0+SEhbaV0gPSB2aDsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAyOyBpIDw9IDg7IGkgKj0gMiApCisgICAgeworICAgICAgICB1aW50NjRfdCAqSGlMID0gY3R4LT5ITCArIGksICpIaUggPSBjdHgtPkhIICsgaTsKKyAgICAgICAgdmggPSAqSGlIOworICAgICAgICB2bCA9ICpIaUw7CisgICAgICAgIGZvciggaiA9IDE7IGogPCBpOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgICBIaUhbal0gPSB2aCBeIGN0eC0+SEhbal07CisgICAgICAgICAgICBIaUxbal0gPSB2bCBeIGN0eC0+SExbal07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfZ2NtX3NldGtleSggbWJlZHRsc19nY21fY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfaWRfdCBjaXBoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdmFsdWVzKCBjaXBoZXIsIGtleWJpdHMsIE1CRURUTFNfTU9ERV9FQ0IgKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCApOworCisgICAgaWYoIGNpcGhlcl9pbmZvLT5ibG9ja19zaXplICE9IDE2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4LT5jaXBoZXJfY3R4ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eC0+Y2lwaGVyX2N0eCwgY2lwaGVyX2luZm8gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4LT5jaXBoZXJfY3R4LCBrZXksIGtleWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTkNSWVBUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gZ2NtX2dlbl90YWJsZSggY3R4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU2hvdXAncyBtZXRob2QgZm9yIG11bHRpcGxpY2F0aW9uIHVzZSB0aGlzIHRhYmxlIHdpdGgKKyAqICAgICAgbGFzdDRbeF0gPSB4IHRpbWVzIFBeMTI4CisgKiB3aGVyZSB4IGFuZCBsYXN0NFt4XSBhcmUgc2VlbiBhcyBlbGVtZW50cyBvZiBHRigyXjEyOCkgYXMgaW4gW01HVl0KKyAqLworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGxhc3Q0WzE2XSA9Cit7CisgICAgMHgwMDAwLCAweDFjMjAsIDB4Mzg0MCwgMHgyNDYwLAorICAgIDB4NzA4MCwgMHg2Y2EwLCAweDQ4YzAsIDB4NTRlMCwKKyAgICAweGUxMDAsIDB4ZmQyMCwgMHhkOTQwLCAweGM1NjAsCisgICAgMHg5MTgwLCAweDhkYTAsIDB4YTljMCwgMHhiNWUwCit9OworCisvKgorICogU2V0cyBvdXRwdXQgdG8geCB0aW1lcyBIIHVzaW5nIHRoZSBwcmVjb21wdXRlZCB0YWJsZXMuCisgKiB4IGFuZCBvdXRwdXQgYXJlIHNlZW4gYXMgZWxlbWVudHMgb2YgR0YoMl4xMjgpIGFzIGluIFtNR1ZdLgorICovCitzdGF0aWMgdm9pZCBnY21fbXVsdCggbWJlZHRsc19nY21fY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIHhbMTZdLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgaW50IGkgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgbG8sIGhpLCByZW07CisgICAgdWludDY0X3QgemgsIHpsOworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU05JX0MpICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4Nl82NCkKKyAgICBpZiggbWJlZHRsc19hZXNuaV9oYXNfc3VwcG9ydCggTUJFRFRMU19BRVNOSV9DTE1VTCApICkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGhbMTZdOworCisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+SEhbOF0gPj4gMzIsIGgsICAwICk7CisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+SEhbOF0sICAgICAgIGgsICA0ICk7CisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+SExbOF0gPj4gMzIsIGgsICA4ICk7CisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+SExbOF0sICAgICAgIGgsIDEyICk7CisKKyAgICAgICAgbWJlZHRsc19hZXNuaV9nY21fbXVsdCggb3V0cHV0LCB4LCBoICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19BRVNOSV9DICYmIE1CRURUTFNfSEFWRV9YODZfNjQgKi8KKworICAgIGxvID0geFsxNV0gJiAweGY7CisKKyAgICB6aCA9IGN0eC0+SEhbbG9dOworICAgIHpsID0gY3R4LT5ITFtsb107CisKKyAgICBmb3IoIGkgPSAxNTsgaSA+PSAwOyBpLS0gKQorICAgIHsKKyAgICAgICAgbG8gPSB4W2ldICYgMHhmOworICAgICAgICBoaSA9IHhbaV0gPj4gNDsKKworICAgICAgICBpZiggaSAhPSAxNSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlbSA9ICh1bnNpZ25lZCBjaGFyKSB6bCAmIDB4ZjsKKyAgICAgICAgICAgIHpsID0gKCB6aCA8PCA2MCApIHwgKCB6bCA+PiA0ICk7CisgICAgICAgICAgICB6aCA9ICggemggPj4gNCApOworICAgICAgICAgICAgemggXj0gKHVpbnQ2NF90KSBsYXN0NFtyZW1dIDw8IDQ4OworICAgICAgICAgICAgemggXj0gY3R4LT5ISFtsb107CisgICAgICAgICAgICB6bCBePSBjdHgtPkhMW2xvXTsKKworICAgICAgICB9CisKKyAgICAgICAgcmVtID0gKHVuc2lnbmVkIGNoYXIpIHpsICYgMHhmOworICAgICAgICB6bCA9ICggemggPDwgNjAgKSB8ICggemwgPj4gNCApOworICAgICAgICB6aCA9ICggemggPj4gNCApOworICAgICAgICB6aCBePSAodWludDY0X3QpIGxhc3Q0W3JlbV0gPDwgNDg7CisgICAgICAgIHpoIF49IGN0eC0+SEhbaGldOworICAgICAgICB6bCBePSBjdHgtPkhMW2hpXTsKKyAgICB9CisKKyAgICBQVVRfVUlOVDMyX0JFKCB6aCA+PiAzMiwgb3V0cHV0LCAwICk7CisgICAgUFVUX1VJTlQzMl9CRSggemgsIG91dHB1dCwgNCApOworICAgIFBVVF9VSU5UMzJfQkUoIHpsID4+IDMyLCBvdXRwdXQsIDggKTsKKyAgICBQVVRfVUlOVDMyX0JFKCB6bCwgb3V0cHV0LCAxMiApOworfQorCitpbnQgbWJlZHRsc19nY21fc3RhcnRzKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisgICAgICAgICAgICAgICAgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGQsCisgICAgICAgICAgICAgICAgc2l6ZV90IGFkZF9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciB3b3JrX2J1ZlsxNl07CisgICAgc2l6ZV90IGk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKyAgICBzaXplX3QgdXNlX2xlbiwgb2xlbiA9IDA7CisKKyAgICAvKiBJViBhbmQgQUQgYXJlIGxpbWl0ZWQgdG8gMl42NCBiaXRzLCBzbyAyXjYxIGJ5dGVzICovCisgICAgaWYoICggKHVpbnQ2NF90KSBpdl9sZW4gICkgPj4gNjEgIT0gMCB8fAorICAgICAgICAoICh1aW50NjRfdCkgYWRkX2xlbiApID4+IDYxICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUICk7CisgICAgfQorCisgICAgbWVtc2V0KCBjdHgtPnksIDB4MDAsIHNpemVvZihjdHgtPnkpICk7CisgICAgbWVtc2V0KCBjdHgtPmJ1ZiwgMHgwMCwgc2l6ZW9mKGN0eC0+YnVmKSApOworCisgICAgY3R4LT5tb2RlID0gbW9kZTsKKyAgICBjdHgtPmxlbiA9IDA7CisgICAgY3R4LT5hZGRfbGVuID0gMDsKKworICAgIGlmKCBpdl9sZW4gPT0gMTIgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCBjdHgtPnksIGl2LCBpdl9sZW4gKTsKKyAgICAgICAgY3R4LT55WzE1XSA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbXNldCggd29ya19idWYsIDB4MDAsIDE2ICk7CisgICAgICAgIFBVVF9VSU5UMzJfQkUoIGl2X2xlbiAqIDgsIHdvcmtfYnVmLCAxMiApOworCisgICAgICAgIHAgPSBpdjsKKyAgICAgICAgd2hpbGUoIGl2X2xlbiA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB1c2VfbGVuID0gKCBpdl9sZW4gPCAxNiApID8gaXZfbGVuIDogMTY7CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCB1c2VfbGVuOyBpKysgKQorICAgICAgICAgICAgICAgIGN0eC0+eVtpXSBePSBwW2ldOworCisgICAgICAgICAgICBnY21fbXVsdCggY3R4LCBjdHgtPnksIGN0eC0+eSApOworCisgICAgICAgICAgICBpdl9sZW4gLT0gdXNlX2xlbjsKKyAgICAgICAgICAgIHAgKz0gdXNlX2xlbjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgIGN0eC0+eVtpXSBePSB3b3JrX2J1ZltpXTsKKworICAgICAgICBnY21fbXVsdCggY3R4LCBjdHgtPnksIGN0eC0+eSApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eC0+Y2lwaGVyX2N0eCwgY3R4LT55LCAxNiwgY3R4LT5iYXNlX2VjdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3R4LT5hZGRfbGVuID0gYWRkX2xlbjsKKyAgICBwID0gYWRkOworICAgIHdoaWxlKCBhZGRfbGVuID4gMCApCisgICAgeworICAgICAgICB1c2VfbGVuID0gKCBhZGRfbGVuIDwgMTYgKSA/IGFkZF9sZW4gOiAxNjsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgdXNlX2xlbjsgaSsrICkKKyAgICAgICAgICAgIGN0eC0+YnVmW2ldIF49IHBbaV07CisKKyAgICAgICAgZ2NtX211bHQoIGN0eCwgY3R4LT5idWYsIGN0eC0+YnVmICk7CisKKyAgICAgICAgYWRkX2xlbiAtPSB1c2VfbGVuOworICAgICAgICBwICs9IHVzZV9sZW47CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2djbV91cGRhdGUoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGVjdHJbMTZdOworICAgIHNpemVfdCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisgICAgdW5zaWduZWQgY2hhciAqb3V0X3AgPSBvdXRwdXQ7CisgICAgc2l6ZV90IHVzZV9sZW4sIG9sZW4gPSAwOworCisgICAgaWYoIG91dHB1dCA+IGlucHV0ICYmIChzaXplX3QpICggb3V0cHV0IC0gaW5wdXQgKSA8IGxlbmd0aCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVCApOworCisgICAgLyogVG90YWwgbGVuZ3RoIGlzIHJlc3RyaWN0ZWQgdG8gMl4zOSAtIDI1NiBiaXRzLCBpZSAyXjM2IC0gMl41IGJ5dGVzCisgICAgICogQWxzbyBjaGVjayBmb3IgcG9zc2libGUgb3ZlcmZsb3cgKi8KKyAgICBpZiggY3R4LT5sZW4gKyBsZW5ndGggPCBjdHgtPmxlbiB8fAorICAgICAgICAodWludDY0X3QpIGN0eC0+bGVuICsgbGVuZ3RoID4gMHhGRkZGRkZGRTB1bGwgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUICk7CisgICAgfQorCisgICAgY3R4LT5sZW4gKz0gbGVuZ3RoOworCisgICAgcCA9IGlucHV0OworICAgIHdoaWxlKCBsZW5ndGggPiAwICkKKyAgICB7CisgICAgICAgIHVzZV9sZW4gPSAoIGxlbmd0aCA8IDE2ICkgPyBsZW5ndGggOiAxNjsKKworICAgICAgICBmb3IoIGkgPSAxNjsgaSA+IDEyOyBpLS0gKQorICAgICAgICAgICAgaWYoICsrY3R4LT55W2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgtPmNpcGhlcl9jdHgsIGN0eC0+eSwgMTYsIGVjdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciggaSA9IDA7IGkgPCB1c2VfbGVuOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggY3R4LT5tb2RlID09IE1CRURUTFNfR0NNX0RFQ1JZUFQgKQorICAgICAgICAgICAgICAgIGN0eC0+YnVmW2ldIF49IHBbaV07CisgICAgICAgICAgICBvdXRfcFtpXSA9IGVjdHJbaV0gXiBwW2ldOworICAgICAgICAgICAgaWYoIGN0eC0+bW9kZSA9PSBNQkVEVExTX0dDTV9FTkNSWVBUICkKKyAgICAgICAgICAgICAgICBjdHgtPmJ1ZltpXSBePSBvdXRfcFtpXTsKKyAgICAgICAgfQorCisgICAgICAgIGdjbV9tdWx0KCBjdHgsIGN0eC0+YnVmLCBjdHgtPmJ1ZiApOworCisgICAgICAgIGxlbmd0aCAtPSB1c2VfbGVuOworICAgICAgICBwICs9IHVzZV9sZW47CisgICAgICAgIG91dF9wICs9IHVzZV9sZW47CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2djbV9maW5pc2goIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsCisgICAgICAgICAgICAgICAgc2l6ZV90IHRhZ19sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgd29ya19idWZbMTZdOworICAgIHNpemVfdCBpOworICAgIHVpbnQ2NF90IG9yaWdfbGVuID0gY3R4LT5sZW4gKiA4OworICAgIHVpbnQ2NF90IG9yaWdfYWRkX2xlbiA9IGN0eC0+YWRkX2xlbiAqIDg7CisKKyAgICBpZiggdGFnX2xlbiA+IDE2IHx8IHRhZ19sZW4gPCA0ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9HQ01fQkFEX0lOUFVUICk7CisKKyAgICBtZW1jcHkoIHRhZywgY3R4LT5iYXNlX2VjdHIsIHRhZ19sZW4gKTsKKworICAgIGlmKCBvcmlnX2xlbiB8fCBvcmlnX2FkZF9sZW4gKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCB3b3JrX2J1ZiwgMHgwMCwgMTYgKTsKKworICAgICAgICBQVVRfVUlOVDMyX0JFKCAoIG9yaWdfYWRkX2xlbiA+PiAzMiApLCB3b3JrX2J1ZiwgMCAgKTsKKyAgICAgICAgUFVUX1VJTlQzMl9CRSggKCBvcmlnX2FkZF9sZW4gICAgICAgKSwgd29ya19idWYsIDQgICk7CisgICAgICAgIFBVVF9VSU5UMzJfQkUoICggb3JpZ19sZW4gICAgID4+IDMyICksIHdvcmtfYnVmLCA4ICApOworICAgICAgICBQVVRfVUlOVDMyX0JFKCAoIG9yaWdfbGVuICAgICAgICAgICApLCB3b3JrX2J1ZiwgMTIgKTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICBjdHgtPmJ1ZltpXSBePSB3b3JrX2J1ZltpXTsKKworICAgICAgICBnY21fbXVsdCggY3R4LCBjdHgtPmJ1ZiwgY3R4LT5idWYgKTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgdGFnX2xlbjsgaSsrICkKKyAgICAgICAgICAgIHRhZ1tpXSBePSBjdHgtPmJ1ZltpXTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGFnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19nY21fc3RhcnRzKCBjdHgsIG1vZGUsIGl2LCBpdl9sZW4sIGFkZCwgYWRkX2xlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2djbV91cGRhdGUoIGN0eCwgbGVuZ3RoLCBpbnB1dCwgb3V0cHV0ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZ2NtX2ZpbmlzaCggY3R4LCB0YWcsIHRhZ19sZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX2djbV9hdXRoX2RlY3J5cHQoIG1iZWR0bHNfZ2NtX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGFnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBjaGVja190YWdbMTZdOworICAgIHNpemVfdCBpOworICAgIGludCBkaWZmOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19nY21fY3J5cHRfYW5kX3RhZyggY3R4LCBNQkVEVExTX0dDTV9ERUNSWVBULCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sIGFkZCwgYWRkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCwgdGFnX2xlbiwgY2hlY2tfdGFnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGFnIGluICJjb25zdGFudC10aW1lIiAqLworICAgIGZvciggZGlmZiA9IDAsIGkgPSAwOyBpIDwgdGFnX2xlbjsgaSsrICkKKyAgICAgICAgZGlmZiB8PSB0YWdbaV0gXiBjaGVja190YWdbaV07CisKKyAgICBpZiggZGlmZiAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggb3V0cHV0LCBsZW5ndGggKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordm9pZCBtYmVkdGxzX2djbV9mcmVlKCBtYmVkdGxzX2djbV9jb250ZXh0ICpjdHggKQoreworICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHgtPmNpcGhlcl9jdHggKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX2djbV9jb250ZXh0ICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKy8qCisgKiBBRVMtR0NNIHRlc3QgdmVjdG9ycyBmcm9tOgorICoKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVE0vY2F2cC9kb2N1bWVudHMvbWFjL2djbXRlc3R2ZWN0b3JzLnppcAorICovCisjZGVmaW5lIE1BWF9URVNUUyAgIDYKKworc3RhdGljIGNvbnN0IGludCBrZXlfaW5kZXhbTUFYX1RFU1RTXSA9CisgICAgeyAwLCAwLCAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtNQVhfVEVTVFNdWzMyXSA9Cit7CisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgeyAweGZlLCAweGZmLCAweGU5LCAweDkyLCAweDg2LCAweDY1LCAweDczLCAweDFjLAorICAgICAgMHg2ZCwgMHg2YSwgMHg4ZiwgMHg5NCwgMHg2NywgMHgzMCwgMHg4MywgMHgwOCwKKyAgICAgIDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMsCisgICAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4IH0sCit9OworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGl2X2xlbltNQVhfVEVTVFNdID0KKyAgICB7IDEyLCAxMiwgMTIsIDEyLCA4LCA2MCB9OworCitzdGF0aWMgY29uc3QgaW50IGl2X2luZGV4W01BWF9URVNUU10gPQorICAgIHsgMCwgMCwgMSwgMSwgMSwgMiB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpdltNQVhfVEVTVFNdWzY0XSA9Cit7CisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgIHsgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmYSwgMHhjZSwgMHhkYiwgMHhhZCwKKyAgICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODggfSwKKyAgICB7IDB4OTMsIDB4MTMsIDB4MjIsIDB4NWQsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCisgICAgICAweDU1LCAweDkwLCAweDljLCAweDVhLCAweGZmLCAweDUyLCAweDY5LCAweGFhLAorICAgICAgMHg2YSwgMHg3YSwgMHg5NSwgMHgzOCwgMHg1MywgMHg0ZiwgMHg3ZCwgMHhhMSwKKyAgICAgIDB4ZTQsIDB4YzMsIDB4MDMsIDB4ZDIsIDB4YTMsIDB4MTgsIDB4YTcsIDB4MjgsCisgICAgICAweGMzLCAweGMwLCAweGM5LCAweDUxLCAweDU2LCAweDgwLCAweDk1LCAweDM5LAorICAgICAgMHhmYywgMHhmMCwgMHhlMiwgMHg0MiwgMHg5YSwgMHg2YiwgMHg1MiwgMHg1NCwKKyAgICAgIDB4MTYsIDB4YWUsIDB4ZGIsIDB4ZjUsIDB4YTAsIDB4ZGUsIDB4NmEsIDB4NTcsCisgICAgICAweGE2LCAweDM3LCAweGIzLCAweDliIH0sCit9OworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGFkZF9sZW5bTUFYX1RFU1RTXSA9CisgICAgeyAwLCAwLCAwLCAyMCwgMjAsIDIwIH07CisKK3N0YXRpYyBjb25zdCBpbnQgYWRkX2luZGV4W01BWF9URVNUU10gPQorICAgIHsgMCwgMCwgMCwgMSwgMSwgMSB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZGRpdGlvbmFsW01BWF9URVNUU11bNjRdID0KK3sKKyAgICB7IDB4MDAgfSwKKyAgICB7IDB4ZmUsIDB4ZWQsIDB4ZmEsIDB4Y2UsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsCisgICAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAorICAgICAgMHhhYiwgMHhhZCwgMHhkYSwgMHhkMiB9LAorfTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBwdF9sZW5bTUFYX1RFU1RTXSA9CisgICAgeyAwLCAxNiwgNjQsIDYwLCA2MCwgNjAgfTsKKworc3RhdGljIGNvbnN0IGludCBwdF9pbmRleFtNQVhfVEVTVFNdID0KKyAgICB7IDAsIDAsIDEsIDEsIDEsIDEgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHRbTUFYX1RFU1RTXVs2NF0gPQoreworICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsCisgICAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweGFmLCAweGY1LCAweDI2LCAweDlhLAorICAgICAgMHg4NiwgMHhhNywgMHhhOSwgMHg1MywgMHgxNSwgMHgzNCwgMHhmNywgMHhkYSwKKyAgICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsCisgICAgICAweDFjLCAweDNjLCAweDBjLCAweDk1LCAweDk1LCAweDY4LCAweDA5LCAweDUzLAorICAgICAgMHgyZiwgMHhjZiwgMHgwZSwgMHgyNCwgMHg0OSwgMHhhNiwgMHhiNSwgMHgyNSwKKyAgICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsCisgICAgICAweGJhLCAweDYzLCAweDdiLCAweDM5LCAweDFhLCAweGFmLCAweGQyLCAweDU1IH0sCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjdFtNQVhfVEVTVFMgKiAzXVs2NF0gPQoreworICAgIHsgMHgwMCB9LAorICAgIHsgMHgwMywgMHg4OCwgMHhkYSwgMHhjZSwgMHg2MCwgMHhiNiwgMHhhMywgMHg5MiwKKyAgICAgIDB4ZjMsIDB4MjgsIDB4YzIsIDB4YjksIDB4NzEsIDB4YjIsIDB4ZmUsIDB4NzggfSwKKyAgICB7IDB4NDIsIDB4ODMsIDB4MWUsIDB4YzIsIDB4MjEsIDB4NzcsIDB4NzQsIDB4MjQsCisgICAgICAweDRiLCAweDcyLCAweDIxLCAweGI3LCAweDg0LCAweGQwLCAweGQ0LCAweDljLAorICAgICAgMHhlMywgMHhhYSwgMHgyMSwgMHgyZiwgMHgyYywgMHgwMiwgMHhhNCwgMHhlMCwKKyAgICAgIDB4MzUsIDB4YzEsIDB4N2UsIDB4MjMsIDB4MjksIDB4YWMsIDB4YTEsIDB4MmUsCisgICAgICAweDIxLCAweGQ1LCAweDE0LCAweGIyLCAweDU0LCAweDY2LCAweDkzLCAweDFjLAorICAgICAgMHg3ZCwgMHg4ZiwgMHg2YSwgMHg1YSwgMHhhYywgMHg4NCwgMHhhYSwgMHgwNSwKKyAgICAgIDB4MWIsIDB4YTMsIDB4MGIsIDB4MzksIDB4NmEsIDB4MGEsIDB4YWMsIDB4OTcsCisgICAgICAweDNkLCAweDU4LCAweGUwLCAweDkxLCAweDQ3LCAweDNmLCAweDU5LCAweDg1IH0sCisgICAgeyAweDQyLCAweDgzLCAweDFlLCAweGMyLCAweDIxLCAweDc3LCAweDc0LCAweDI0LAorICAgICAgMHg0YiwgMHg3MiwgMHgyMSwgMHhiNywgMHg4NCwgMHhkMCwgMHhkNCwgMHg5YywKKyAgICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsCisgICAgICAweDM1LCAweGMxLCAweDdlLCAweDIzLCAweDI5LCAweGFjLCAweGExLCAweDJlLAorICAgICAgMHgyMSwgMHhkNSwgMHgxNCwgMHhiMiwgMHg1NCwgMHg2NiwgMHg5MywgMHgxYywKKyAgICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsCisgICAgICAweDFiLCAweGEzLCAweDBiLCAweDM5LCAweDZhLCAweDBhLCAweGFjLCAweDk3LAorICAgICAgMHgzZCwgMHg1OCwgMHhlMCwgMHg5MSB9LAorICAgIHsgMHg2MSwgMHgzNSwgMHgzYiwgMHg0YywgMHgyOCwgMHgwNiwgMHg5MywgMHg0YSwKKyAgICAgIDB4NzcsIDB4N2YsIDB4ZjUsIDB4MWYsIDB4YTIsIDB4MmEsIDB4NDcsIDB4NTUsCisgICAgICAweDY5LCAweDliLCAweDJhLCAweDcxLCAweDRmLCAweGNkLCAweGM2LCAweGY4LAorICAgICAgMHgzNywgMHg2NiwgMHhlNSwgMHhmOSwgMHg3YiwgMHg2YywgMHg3NCwgMHgyMywKKyAgICAgIDB4NzMsIDB4ODAsIDB4NjksIDB4MDAsIDB4ZTQsIDB4OWYsIDB4MjQsIDB4YjIsCisgICAgICAweDJiLCAweDA5LCAweDc1LCAweDQ0LCAweGQ0LCAweDg5LCAweDZiLCAweDQyLAorICAgICAgMHg0OSwgMHg4OSwgMHhiNSwgMHhlMSwgMHhlYiwgMHhhYywgMHgwZiwgMHgwNywKKyAgICAgIDB4YzIsIDB4M2YsIDB4NDUsIDB4OTggfSwKKyAgICB7IDB4OGMsIDB4ZTIsIDB4NDksIDB4OTgsIDB4NjIsIDB4NTYsIDB4MTUsIDB4YjYsCisgICAgICAweDAzLCAweGEwLCAweDMzLCAweGFjLCAweGExLCAweDNmLCAweGI4LCAweDk0LAorICAgICAgMHhiZSwgMHg5MSwgMHgxMiwgMHhhNSwgMHhjMywgMHhhMiwgMHgxMSwgMHhhOCwKKyAgICAgIDB4YmEsIDB4MjYsIDB4MmEsIDB4M2MsIDB4Y2EsIDB4N2UsIDB4MmMsIDB4YTcsCisgICAgICAweDAxLCAweGU0LCAweGE5LCAweGE0LCAweGZiLCAweGE0LCAweDNjLCAweDkwLAorICAgICAgMHhjYywgMHhkYywgMHhiMiwgMHg4MSwgMHhkNCwgMHg4YywgMHg3YywgMHg2ZiwKKyAgICAgIDB4ZDYsIDB4MjgsIDB4NzUsIDB4ZDIsIDB4YWMsIDB4YTQsIDB4MTcsIDB4MDMsCisgICAgICAweDRjLCAweDM0LCAweGFlLCAweGU1IH0sCisgICAgeyAweDAwIH0sCisgICAgeyAweDk4LCAweGU3LCAweDI0LCAweDdjLCAweDA3LCAweGYwLCAweGZlLCAweDQxLAorICAgICAgMHgxYywgMHgyNiwgMHg3ZSwgMHg0MywgMHg4NCwgMHhiMCwgMHhmNiwgMHgwMCB9LAorICAgIHsgMHgzOSwgMHg4MCwgMHhjYSwgMHgwYiwgMHgzYywgMHgwMCwgMHhlOCwgMHg0MSwKKyAgICAgIDB4ZWIsIDB4MDYsIDB4ZmEsIDB4YzQsIDB4ODcsIDB4MmEsIDB4MjcsIDB4NTcsCisgICAgICAweDg1LCAweDllLCAweDFjLCAweGVhLCAweGE2LCAweGVmLCAweGQ5LCAweDg0LAorICAgICAgMHg2MiwgMHg4NSwgMHg5MywgMHhiNCwgMHgwYywgMHhhMSwgMHhlMSwgMHg5YywKKyAgICAgIDB4N2QsIDB4NzcsIDB4M2QsIDB4MDAsIDB4YzEsIDB4NDQsIDB4YzUsIDB4MjUsCisgICAgICAweGFjLCAweDYxLCAweDlkLCAweDE4LCAweGM4LCAweDRhLCAweDNmLCAweDQ3LAorICAgICAgMHgxOCwgMHhlMiwgMHg0NCwgMHg4YiwgMHgyZiwgMHhlMywgMHgyNCwgMHhkOSwKKyAgICAgIDB4Y2MsIDB4ZGEsIDB4MjcsIDB4MTAsIDB4YWMsIDB4YWQsIDB4ZTIsIDB4NTYgfSwKKyAgICB7IDB4MzksIDB4ODAsIDB4Y2EsIDB4MGIsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4NDEsCisgICAgICAweGViLCAweDA2LCAweGZhLCAweGM0LCAweDg3LCAweDJhLCAweDI3LCAweDU3LAorICAgICAgMHg4NSwgMHg5ZSwgMHgxYywgMHhlYSwgMHhhNiwgMHhlZiwgMHhkOSwgMHg4NCwKKyAgICAgIDB4NjIsIDB4ODUsIDB4OTMsIDB4YjQsIDB4MGMsIDB4YTEsIDB4ZTEsIDB4OWMsCisgICAgICAweDdkLCAweDc3LCAweDNkLCAweDAwLCAweGMxLCAweDQ0LCAweGM1LCAweDI1LAorICAgICAgMHhhYywgMHg2MSwgMHg5ZCwgMHgxOCwgMHhjOCwgMHg0YSwgMHgzZiwgMHg0NywKKyAgICAgIDB4MTgsIDB4ZTIsIDB4NDQsIDB4OGIsIDB4MmYsIDB4ZTMsIDB4MjQsIDB4ZDksCisgICAgICAweGNjLCAweGRhLCAweDI3LCAweDEwIH0sCisgICAgeyAweDBmLCAweDEwLCAweGY1LCAweDk5LCAweGFlLCAweDE0LCAweGExLCAweDU0LAorICAgICAgMHhlZCwgMHgyNCwgMHhiMywgMHg2ZSwgMHgyNSwgMHgzMiwgMHg0ZCwgMHhiOCwKKyAgICAgIDB4YzUsIDB4NjYsIDB4NjMsIDB4MmUsIDB4ZjIsIDB4YmIsIDB4YjMsIDB4NGYsCisgICAgICAweDgzLCAweDQ3LCAweDI4LCAweDBmLCAweGM0LCAweDUwLCAweDcwLCAweDU3LAorICAgICAgMHhmZCwgMHhkYywgMHgyOSwgMHhkZiwgMHg5YSwgMHg0NywgMHgxZiwgMHg3NSwKKyAgICAgIDB4YzYsIDB4NjUsIDB4NDEsIDB4ZDQsIDB4ZDQsIDB4ZGEsIDB4ZDEsIDB4YzksCisgICAgICAweGU5LCAweDNhLCAweDE5LCAweGE1LCAweDhlLCAweDhiLCAweDQ3LCAweDNmLAorICAgICAgMHhhMCwgMHhmMCwgMHg2MiwgMHhmNyB9LAorICAgIHsgMHhkMiwgMHg3ZSwgMHg4OCwgMHg2OCwgMHgxYywgMHhlMywgMHgyNCwgMHgzYywKKyAgICAgIDB4NDgsIDB4MzAsIDB4MTYsIDB4NWEsIDB4OGYsIDB4ZGMsIDB4ZjksIDB4ZmYsCisgICAgICAweDFkLCAweGU5LCAweGExLCAweGQ4LCAweGU2LCAweGI0LCAweDQ3LCAweGVmLAorICAgICAgMHg2ZSwgMHhmNywgMHhiNywgMHg5OCwgMHgyOCwgMHg2NiwgMHg2ZSwgMHg0NSwKKyAgICAgIDB4ODEsIDB4ZTcsIDB4OTAsIDB4MTIsIDB4YWYsIDB4MzQsIDB4ZGQsIDB4ZDksCisgICAgICAweGUyLCAweGYwLCAweDM3LCAweDU4LCAweDliLCAweDI5LCAweDJkLCAweGIzLAorICAgICAgMHhlNiwgMHg3YywgMHgwMywgMHg2NywgMHg0NSwgMHhmYSwgMHgyMiwgMHhlNywKKyAgICAgIDB4ZTksIDB4YjcsIDB4MzcsIDB4M2IgfSwKKyAgICB7IDB4MDAgfSwKKyAgICB7IDB4Y2UsIDB4YTcsIDB4NDAsIDB4M2QsIDB4NGQsIDB4NjAsIDB4NmIsIDB4NmUsCisgICAgICAweDA3LCAweDRlLCAweGM1LCAweGQzLCAweGJhLCAweGYzLCAweDlkLCAweDE4IH0sCisgICAgeyAweDUyLCAweDJkLCAweGMxLCAweGYwLCAweDk5LCAweDU2LCAweDdkLCAweDA3LAorICAgICAgMHhmNCwgMHg3ZiwgMHgzNywgMHhhMywgMHgyYSwgMHg4NCwgMHg0MiwgMHg3ZCwKKyAgICAgIDB4NjQsIDB4M2EsIDB4OGMsIDB4ZGMsIDB4YmYsIDB4ZTUsIDB4YzAsIDB4YzksCisgICAgICAweDc1LCAweDk4LCAweGEyLCAweGJkLCAweDI1LCAweDU1LCAweGQxLCAweGFhLAorICAgICAgMHg4YywgMHhiMCwgMHg4ZSwgMHg0OCwgMHg1OSwgMHgwZCwgMHhiYiwgMHgzZCwKKyAgICAgIDB4YTcsIDB4YjAsIDB4OGIsIDB4MTAsIDB4NTYsIDB4ODIsIDB4ODgsIDB4MzgsCisgICAgICAweGM1LCAweGY2LCAweDFlLCAweDYzLCAweDkzLCAweGJhLCAweDdhLCAweDBhLAorICAgICAgMHhiYywgMHhjOSwgMHhmNiwgMHg2MiwgMHg4OSwgMHg4MCwgMHgxNSwgMHhhZCB9LAorICAgIHsgMHg1MiwgMHgyZCwgMHhjMSwgMHhmMCwgMHg5OSwgMHg1NiwgMHg3ZCwgMHgwNywKKyAgICAgIDB4ZjQsIDB4N2YsIDB4MzcsIDB4YTMsIDB4MmEsIDB4ODQsIDB4NDIsIDB4N2QsCisgICAgICAweDY0LCAweDNhLCAweDhjLCAweGRjLCAweGJmLCAweGU1LCAweGMwLCAweGM5LAorICAgICAgMHg3NSwgMHg5OCwgMHhhMiwgMHhiZCwgMHgyNSwgMHg1NSwgMHhkMSwgMHhhYSwKKyAgICAgIDB4OGMsIDB4YjAsIDB4OGUsIDB4NDgsIDB4NTksIDB4MGQsIDB4YmIsIDB4M2QsCisgICAgICAweGE3LCAweGIwLCAweDhiLCAweDEwLCAweDU2LCAweDgyLCAweDg4LCAweDM4LAorICAgICAgMHhjNSwgMHhmNiwgMHgxZSwgMHg2MywgMHg5MywgMHhiYSwgMHg3YSwgMHgwYSwKKyAgICAgIDB4YmMsIDB4YzksIDB4ZjYsIDB4NjIgfSwKKyAgICB7IDB4YzMsIDB4NzYsIDB4MmQsIDB4ZjEsIDB4Y2EsIDB4NzgsIDB4N2QsIDB4MzIsCisgICAgICAweGFlLCAweDQ3LCAweGMxLCAweDNiLCAweGYxLCAweDk4LCAweDQ0LCAweGNiLAorICAgICAgMHhhZiwgMHgxYSwgMHhlMSwgMHg0ZCwgMHgwYiwgMHg5NywgMHg2YSwgMHhmYSwKKyAgICAgIDB4YzUsIDB4MmYsIDB4ZjcsIDB4ZDcsIDB4OWIsIDB4YmEsIDB4OWQsIDB4ZTAsCisgICAgICAweGZlLCAweGI1LCAweDgyLCAweGQzLCAweDM5LCAweDM0LCAweGE0LCAweGYwLAorICAgICAgMHg5NSwgMHg0YywgMHhjMiwgMHgzNiwgMHgzYiwgMHhjNywgMHgzZiwgMHg3OCwKKyAgICAgIDB4NjIsIDB4YWMsIDB4NDMsIDB4MGUsIDB4NjQsIDB4YWIsIDB4ZTQsIDB4OTksCisgICAgICAweGY0LCAweDdjLCAweDliLCAweDFmIH0sCisgICAgeyAweDVhLCAweDhkLCAweGVmLCAweDJmLCAweDBjLCAweDllLCAweDUzLCAweGYxLAorICAgICAgMHhmNywgMHg1ZCwgMHg3OCwgMHg1MywgMHg2NSwgMHg5ZSwgMHgyYSwgMHgyMCwKKyAgICAgIDB4ZWUsIDB4YjIsIDB4YjIsIDB4MmEsIDB4YWYsIDB4ZGUsIDB4NjQsIDB4MTksCisgICAgICAweGEwLCAweDU4LCAweGFiLCAweDRmLCAweDZmLCAweDc0LCAweDZiLCAweGY0LAorICAgICAgMHgwZiwgMHhjMCwgMHhjMywgMHhiNywgMHg4MCwgMHhmMiwgMHg0NCwgMHg0NSwKKyAgICAgIDB4MmQsIDB4YTMsIDB4ZWIsIDB4ZjEsIDB4YzUsIDB4ZDgsIDB4MmMsIDB4ZGUsCisgICAgICAweGEyLCAweDQxLCAweDg5LCAweDk3LCAweDIwLCAweDBlLCAweGY4LCAweDJlLAorICAgICAgMHg0NCwgMHhhZSwgMHg3ZSwgMHgzZiB9LAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGFnW01BWF9URVNUUyAqIDNdWzE2XSA9Cit7CisgICAgeyAweDU4LCAweGUyLCAweGZjLCAweGNlLCAweGZhLCAweDdlLCAweDMwLCAweDYxLAorICAgICAgMHgzNiwgMHg3ZiwgMHgxZCwgMHg1NywgMHhhNCwgMHhlNywgMHg0NSwgMHg1YSB9LAorICAgIHsgMHhhYiwgMHg2ZSwgMHg0NywgMHhkNCwgMHgyYywgMHhlYywgMHgxMywgMHhiZCwKKyAgICAgIDB4ZjUsIDB4M2EsIDB4NjcsIDB4YjIsIDB4MTIsIDB4NTcsIDB4YmQsIDB4ZGYgfSwKKyAgICB7IDB4NGQsIDB4NWMsIDB4MmEsIDB4ZjMsIDB4MjcsIDB4Y2QsIDB4NjQsIDB4YTYsCisgICAgICAweDJjLCAweGYzLCAweDVhLCAweGJkLCAweDJiLCAweGE2LCAweGZhLCAweGI0IH0sCisgICAgeyAweDViLCAweGM5LCAweDRmLCAweGJjLCAweDMyLCAweDIxLCAweGE1LCAweGRiLAorICAgICAgMHg5NCwgMHhmYSwgMHhlOSwgMHg1YSwgMHhlNywgMHgxMiwgMHgxYSwgMHg0NyB9LAorICAgIHsgMHgzNiwgMHgxMiwgMHhkMiwgMHhlNywgMHg5ZSwgMHgzYiwgMHgwNywgMHg4NSwKKyAgICAgIDB4NTYsIDB4MWIsIDB4ZTEsIDB4NGEsIDB4YWMsIDB4YTIsIDB4ZmMsIDB4Y2IgfSwKKyAgICB7IDB4NjEsIDB4OWMsIDB4YzUsIDB4YWUsIDB4ZmYsIDB4ZmUsIDB4MGIsIDB4ZmEsCisgICAgICAweDQ2LCAweDJhLCAweGY0LCAweDNjLCAweDE2LCAweDk5LCAweGQwLCAweDUwIH0sCisgICAgeyAweGNkLCAweDMzLCAweGIyLCAweDhhLCAweGM3LCAweDczLCAweGY3LCAweDRiLAorICAgICAgMHhhMCwgMHgwZSwgMHhkMSwgMHhmMywgMHgxMiwgMHg1NywgMHgyNCwgMHgzNSB9LAorICAgIHsgMHgyZiwgMHhmNSwgMHg4ZCwgMHg4MCwgMHgwMywgMHgzOSwgMHgyNywgMHhhYiwKKyAgICAgIDB4OGUsIDB4ZjQsIDB4ZDQsIDB4NTgsIDB4NzUsIDB4MTQsIDB4ZjAsIDB4ZmIgfSwKKyAgICB7IDB4OTksIDB4MjQsIDB4YTcsIDB4YzgsIDB4NTgsIDB4NzMsIDB4MzYsIDB4YmYsCisgICAgICAweGIxLCAweDE4LCAweDAyLCAweDRkLCAweGI4LCAweDY3LCAweDRhLCAweDE0IH0sCisgICAgeyAweDI1LCAweDE5LCAweDQ5LCAweDhlLCAweDgwLCAweGYxLCAweDQ3LCAweDhmLAorICAgICAgMHgzNywgMHhiYSwgMHg1NSwgMHhiZCwgMHg2ZCwgMHgyNywgMHg2MSwgMHg4YyB9LAorICAgIHsgMHg2NSwgMHhkYywgMHhjNSwgMHg3ZiwgMHhjZiwgMHg2MiwgMHgzYSwgMHgyNCwKKyAgICAgIDB4MDksIDB4NGYsIDB4Y2MsIDB4YTQsIDB4MGQsIDB4MzUsIDB4MzMsIDB4ZjggfSwKKyAgICB7IDB4ZGMsIDB4ZjUsIDB4NjYsIDB4ZmYsIDB4MjksIDB4MWMsIDB4MjUsIDB4YmIsCisgICAgICAweGI4LCAweDU2LCAweDhmLCAweGMzLCAweGQzLCAweDc2LCAweGE2LCAweGQ5IH0sCisgICAgeyAweDUzLCAweDBmLCAweDhhLCAweGZiLCAweGM3LCAweDQ1LCAweDM2LCAweGI5LAorICAgICAgMHhhOSwgMHg2MywgMHhiNCwgMHhmMSwgMHhjNCwgMHhjYiwgMHg3MywgMHg4YiB9LAorICAgIHsgMHhkMCwgMHhkMSwgMHhjOCwgMHhhNywgMHg5OSwgMHg5OSwgMHg2YiwgMHhmMCwKKyAgICAgIDB4MjYsIDB4NWIsIDB4OTgsIDB4YjUsIDB4ZDQsIDB4OGEsIDB4YjksIDB4MTkgfSwKKyAgICB7IDB4YjAsIDB4OTQsIDB4ZGEsIDB4YzUsIDB4ZDksIDB4MzQsIDB4NzEsIDB4YmQsCisgICAgICAweGVjLCAweDFhLCAweDUwLCAweDIyLCAweDcwLCAweGUzLCAweGNjLCAweDZjIH0sCisgICAgeyAweDc2LCAweGZjLCAweDZlLCAweGNlLCAweDBmLCAweDRlLCAweDE3LCAweDY4LAorICAgICAgMHhjZCwgMHhkZiwgMHg4OCwgMHg1MywgMHhiYiwgMHgyZCwgMHg1NSwgMHgxYiB9LAorICAgIHsgMHgzYSwgMHgzMywgMHg3ZCwgMHhiZiwgMHg0NiwgMHhhNywgMHg5MiwgMHhjNCwKKyAgICAgIDB4NWUsIDB4NDUsIDB4NDksIDB4MTMsIDB4ZmUsIDB4MmUsIDB4YTgsIDB4ZjIgfSwKKyAgICB7IDB4YTQsIDB4NGEsIDB4ODIsIDB4NjYsIDB4ZWUsIDB4MWMsIDB4OGUsIDB4YjAsCisgICAgICAweGM4LCAweGI1LCAweGQ0LCAweGNmLCAweDVhLCAweGU5LCAweGYxLCAweDlhIH0sCit9OworCitpbnQgbWJlZHRsc19nY21fc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgbWJlZHRsc19nY21fY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnX2J1ZlsxNl07CisgICAgaW50IGksIGosIHJldDsKKyAgICBtYmVkdGxzX2NpcGhlcl9pZF90IGNpcGhlciA9IE1CRURUTFNfQ0lQSEVSX0lEX0FFUzsKKworICAgIG1iZWR0bHNfZ2NtX2luaXQoICZjdHggKTsKKworICAgIGZvciggaiA9IDA7IGogPCAzOyBqKysgKQorICAgIHsKKyAgICAgICAgaW50IGtleV9sZW4gPSAxMjggKyA2NCAqIGo7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IE1BWF9URVNUUzsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUy1HQ00tJTNkICMlZCAoJXMpOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbiwgaSwgImVuYyIgKTsKKworICAgICAgICAgICAgbWJlZHRsc19nY21fc2V0a2V5KCAmY3R4LCBjaXBoZXIsIGtleVtrZXlfaW5kZXhbaV1dLCBrZXlfbGVuICk7CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoICZjdHgsIE1CRURUTFNfR0NNX0VOQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2W2l2X2luZGV4W2ldXSwgaXZfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxbYWRkX2luZGV4W2ldXSwgYWRkX2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdFtwdF9pbmRleFtpXV0sIGJ1ZiwgMTYsIHRhZ19idWYgKTsKKworICAgICAgICAgICAgaWYoIHJldCAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWVtY21wKCBidWYsIGN0W2ogKiA2ICsgaV0sIHB0X2xlbltpXSApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtZW1jbXAoIHRhZ19idWYsIHRhZ1tqICogNiArIGldLCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX2ZyZWUoICZjdHggKTsKKworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUy1HQ00tJTNkICMlZCAoJXMpOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbiwgaSwgImRlYyIgKTsKKworICAgICAgICAgICAgbWJlZHRsc19nY21fc2V0a2V5KCAmY3R4LCBjaXBoZXIsIGtleVtrZXlfaW5kZXhbaV1dLCBrZXlfbGVuICk7CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoICZjdHgsIE1CRURUTFNfR0NNX0RFQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2W2l2X2luZGV4W2ldXSwgaXZfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxbYWRkX2luZGV4W2ldXSwgYWRkX2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdFtqICogNiArIGldLCBidWYsIDE2LCB0YWdfYnVmICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1lbWNtcCggYnVmLCBwdFtwdF9pbmRleFtpXV0sIHB0X2xlbltpXSApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtZW1jbXAoIHRhZ19idWYsIHRhZ1tqICogNiArIGldLCAxNiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX2ZyZWUoICZjdHggKTsKKworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEFFUy1HQ00tJTNkICMlZCBzcGxpdCAoJXMpOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbiwgaSwgImVuYyIgKTsKKworICAgICAgICAgICAgbWJlZHRsc19nY21fc2V0a2V5KCAmY3R4LCBjaXBoZXIsIGtleVtrZXlfaW5kZXhbaV1dLCBrZXlfbGVuICk7CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3N0YXJ0cyggJmN0eCwgTUJFRFRMU19HQ01fRU5DUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2W2l2X2luZGV4W2ldXSwgaXZfbGVuW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFthZGRfaW5kZXhbaV1dLCBhZGRfbGVuW2ldICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBwdF9sZW5baV0gPiAzMiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHJlc3RfbGVuID0gcHRfbGVuW2ldIC0gMzI7CisgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fdXBkYXRlKCAmY3R4LCAzMiwgcHRbcHRfaW5kZXhbaV1dLCBidWYgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3VwZGF0ZSggJmN0eCwgcmVzdF9sZW4sIHB0W3B0X2luZGV4W2ldXSArIDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIDMyICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fdXBkYXRlKCAmY3R4LCBwdF9sZW5baV0sIHB0W3B0X2luZGV4W2ldXSwgYnVmICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX2ZpbmlzaCggJmN0eCwgdGFnX2J1ZiwgMTYgKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1lbWNtcCggYnVmLCBjdFtqICogNiArIGldLCBwdF9sZW5baV0gKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWVtY21wKCB0YWdfYnVmLCB0YWdbaiAqIDYgKyBpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCAmY3R4ICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBBRVMtR0NNLSUzZCAjJWQgc3BsaXQgKCVzKTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW4sIGksICJkZWMiICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX3NldGtleSggJmN0eCwgY2lwaGVyLCBrZXlba2V5X2luZGV4W2ldXSwga2V5X2xlbiApOworCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9zdGFydHMoICZjdHgsIE1CRURUTFNfR0NNX0RFQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdltpdl9pbmRleFtpXV0sIGl2X2xlbltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxbYWRkX2luZGV4W2ldXSwgYWRkX2xlbltpXSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggcHRfbGVuW2ldID4gMzIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN0X2xlbiA9IHB0X2xlbltpXSAtIDMyOworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX3VwZGF0ZSggJmN0eCwgMzIsIGN0W2ogKiA2ICsgaV0sIGJ1ZiApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fdXBkYXRlKCAmY3R4LCByZXN0X2xlbiwgY3RbaiAqIDYgKyBpXSArIDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIDMyICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19nY21fdXBkYXRlKCAmY3R4LCBwdF9sZW5baV0sIGN0W2ogKiA2ICsgaV0sIGJ1ZiApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2djbV9maW5pc2goICZjdHgsIHRhZ19idWYsIDE2ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtZW1jbXAoIGJ1ZiwgcHRbcHRfaW5kZXhbaV1dLCBwdF9sZW5baV0gKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWVtY21wKCB0YWdfYnVmLCB0YWdbaiAqIDYgKyBpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCAmY3R4ICk7CisKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAmJiBNQkVEVExTX0FFU19DICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9oYXZlZ2UuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2hhdmVnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzVlZjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9oYXZlZ2UuYwpAQCAtMCwwICsxLDI0NSBAQAorLyoqCisgKiAgXGJyaWVmIEhBVkVHRTogSEFyZHdhcmUgVm9sYXRpbGUgRW50cm9weSBHYXRoZXJpbmcgYW5kIEV4cGFuc2lvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgSEFWRUdFIFJORyB3YXMgZGVzaWduZWQgYnkgQW5kcmUgU2V6bmVjIGluIDIwMDIuCisgKgorICogIGh0dHA6Ly93d3cuaXJpc2EuZnIvY2Fwcy9wcm9qZWN0cy9oaXBzb3IvcHVibGkucGhwCisgKgorICogIENvbnRhY3Q6IHNlem5lYyhhdClpcmlzYV9kb3RfZnIgLSBvcm9jaGVjbyhhdClpcmlzYV9kb3RfZnIKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9oYXZlZ2UuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3RpbWluZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT24gYXZlcmFnZSwgb25lIGl0ZXJhdGlvbiBhY2Nlc3NlcyB0d28gOC13b3JkIGJsb2NrcyBpbiB0aGUgaGF2ZWdlIFdBTEsKKyAqIHRhYmxlLCBhbmQgZ2VuZXJhdGVzIDE2IHdvcmRzIGluIHRoZSBSRVMgYXJyYXkuCisgKgorICogVGhlIGRhdGEgcmVhZCBpbiB0aGUgV0FMSyB0YWJsZSBpcyB1cGRhdGVkIGFuZCBwZXJtdXRlZCBhZnRlciBlYWNoIHVzZS4KKyAqIFRoZSByZXN1bHQgb2YgdGhlIGhhcmR3YXJlIGNsb2NrIGNvdW50ZXIgcmVhZCBpcyB1c2VkICBmb3IgdGhpcyB1cGRhdGUuCisgKgorICogMjUgY29uZGl0aW9uYWwgdGVzdHMgYXJlIHByZXNlbnQuICBUaGUgY29uZGl0aW9uYWwgdGVzdHMgYXJlIGdyb3VwZWQgaW4KKyAqIHR3byBuZXN0ZWQgIGdyb3VwcyBvZiAxMiBjb25kaXRpb25hbCB0ZXN0cyBhbmQgMSB0ZXN0IHRoYXQgY29udHJvbHMgdGhlCisgKiBwZXJtdXRhdGlvbjsgb24gYXZlcmFnZSwgdGhlcmUgc2hvdWxkIGJlIDYgdGVzdHMgZXhlY3V0ZWQgYW5kIDMgb2YgdGhlbQorICogc2hvdWxkIGJlIG1pc3ByZWRpY3RlZC4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNkZWZpbmUgU1dBUChYLFkpIHsgaW50ICpUID0gWDsgWCA9IFk7IFkgPSBUOyB9CisKKyNkZWZpbmUgVFNUMV9FTlRFUiBpZiggUFRFU1QgJiAxICkgeyBQVEVTVCBePSAzOyBQVEVTVCA+Pj0gMTsKKyNkZWZpbmUgVFNUMl9FTlRFUiBpZiggUFRFU1QgJiAxICkgeyBQVEVTVCBePSAzOyBQVEVTVCA+Pj0gMTsKKworI2RlZmluZSBUU1QxX0xFQVZFIFUxKys7IH0KKyNkZWZpbmUgVFNUMl9MRUFWRSBVMisrOyB9CisKKyNkZWZpbmUgT05FX0lURVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFRFU1QgPSBQVDEgPj4gMjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRTVDFfRU5URVIgIFRTVDFfRU5URVIgIFRTVDFfRU5URVIgIFRTVDFfRU5URVIgICAgICBcCisgICAgVFNUMV9FTlRFUiAgVFNUMV9FTlRFUiAgVFNUMV9FTlRFUiAgVFNUMV9FTlRFUiAgICAgIFwKKyAgICBUU1QxX0VOVEVSICBUU1QxX0VOVEVSICBUU1QxX0VOVEVSICBUU1QxX0VOVEVSICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVFNUMV9MRUFWRSAgVFNUMV9MRUFWRSAgVFNUMV9MRUFWRSAgVFNUMV9MRUFWRSAgICAgIFwKKyAgICBUU1QxX0xFQVZFICBUU1QxX0xFQVZFICBUU1QxX0xFQVZFICBUU1QxX0xFQVZFICAgICAgXAorICAgIFRTVDFfTEVBVkUgIFRTVDFfTEVBVkUgIFRTVDFfTEVBVkUgIFRTVDFfTEVBVkUgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQVFggPSAoUFQxID4+IDE4KSAmIDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFBUMSAmPSAweDFGRkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFQyICY9IDB4MUZGRjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDTEsgPSAoaW50KSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBID0gJldBTEtbUFQxICAgIF07IFJFU1tpKytdIF49ICpBOyAgICAgICAgICAgICAgICAgXAorICAgIEIgPSAmV0FMS1tQVDIgICAgXTsgUkVTW2krK10gXj0gKkI7ICAgICAgICAgICAgICAgICBcCisgICAgQyA9ICZXQUxLW1BUMSBeIDFdOyBSRVNbaSsrXSBePSAqQzsgICAgICAgICAgICAgICAgIFwKKyAgICBEID0gJldBTEtbUFQyIF4gNF07IFJFU1tpKytdIF49ICpEOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU4gPSAoKkEgPj4gKDEpKSBeICgqQSA8PCAoMzEpKSBeIENMSzsgICAgICAgICAgICAgIFwKKyAgICAqQSA9ICgqQiA+PiAoMikpIF4gKCpCIDw8ICgzMCkpIF4gQ0xLOyAgICAgICAgICAgICAgXAorICAgICpCID0gSU4gXiBVMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKkMgPSAoKkMgPj4gKDMpKSBeICgqQyA8PCAoMjkpKSBeIENMSzsgICAgICAgICAgICAgIFwKKyAgICAqRCA9ICgqRCA+PiAoNCkpIF4gKCpEIDw8ICgyOCkpIF4gQ0xLOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQSA9ICZXQUxLW1BUMSBeIDJdOyBSRVNbaSsrXSBePSAqQTsgICAgICAgICAgICAgICAgIFwKKyAgICBCID0gJldBTEtbUFQyIF4gMl07IFJFU1tpKytdIF49ICpCOyAgICAgICAgICAgICAgICAgXAorICAgIEMgPSAmV0FMS1tQVDEgXiAzXTsgUkVTW2krK10gXj0gKkM7ICAgICAgICAgICAgICAgICBcCisgICAgRCA9ICZXQUxLW1BUMiBeIDZdOyBSRVNbaSsrXSBePSAqRDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKCBQVEVTVCAmIDEgKSBTV0FQKCBBLCBDICk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJTiA9ICgqQSA+PiAoNSkpIF4gKCpBIDw8ICgyNykpIF4gQ0xLOyAgICAgICAgICAgICAgXAorICAgICpBID0gKCpCID4+ICg2KSkgXiAoKkIgPDwgKDI2KSkgXiBDTEs7ICAgICAgICAgICAgICBcCisgICAgKkIgPSBJTjsgQ0xLID0gKGludCkgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAqQyA9ICgqQyA+PiAoNykpIF4gKCpDIDw8ICgyNSkpIF4gQ0xLOyAgICAgICAgICAgICAgXAorICAgICpEID0gKCpEID4+ICg4KSkgXiAoKkQgPDwgKDI0KSkgXiBDTEs7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBID0gJldBTEtbUFQxIF4gNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEIgPSAmV0FMS1tQVDIgXiAxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQVEVTVCA9IFBUMiA+PiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFQyID0gKFJFU1soaSAtIDgpIF4gUFRZXSBeIFdBTEtbUFQyIF4gUFRZIF4gN10pOyAgIFwKKyAgICBQVDIgPSAoKFBUMiAmIDB4MUZGRikgJiAofjgpKSBeICgoUFQxIF4gOCkgJiAweDgpOyAgXAorICAgIFBUWSA9IChQVDIgPj4gMTApICYgNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUU1QyX0VOVEVSICBUU1QyX0VOVEVSICBUU1QyX0VOVEVSICBUU1QyX0VOVEVSICAgICAgXAorICAgIFRTVDJfRU5URVIgIFRTVDJfRU5URVIgIFRTVDJfRU5URVIgIFRTVDJfRU5URVIgICAgICBcCisgICAgVFNUMl9FTlRFUiAgVFNUMl9FTlRFUiAgVFNUMl9FTlRFUiAgVFNUMl9FTlRFUiAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRTVDJfTEVBVkUgIFRTVDJfTEVBVkUgIFRTVDJfTEVBVkUgIFRTVDJfTEVBVkUgICAgICBcCisgICAgVFNUMl9MRUFWRSAgVFNUMl9MRUFWRSAgVFNUMl9MRUFWRSAgVFNUMl9MRUFWRSAgICAgIFwKKyAgICBUU1QyX0xFQVZFICBUU1QyX0xFQVZFICBUU1QyX0xFQVZFICBUU1QyX0xFQVZFICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQyA9ICZXQUxLW1BUMSBeIDVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBEID0gJldBTEtbUFQyIF4gNV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVTW2krK10gXj0gKkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSRVNbaSsrXSBePSAqQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFU1tpKytdIF49ICpDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVTW2krK10gXj0gKkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIElOID0gKCpBID4+ICggOSkpIF4gKCpBIDw8ICgyMykpIF4gQ0xLOyAgICAgICAgICAgICBcCisgICAgKkEgPSAoKkIgPj4gKDEwKSkgXiAoKkIgPDwgKDIyKSkgXiBDTEs7ICAgICAgICAgICAgIFwKKyAgICAqQiA9IElOIF4gVTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpDID0gKCpDID4+ICgxMSkpIF4gKCpDIDw8ICgyMSkpIF4gQ0xLOyAgICAgICAgICAgICBcCisgICAgKkQgPSAoKkQgPj4gKDEyKSkgXiAoKkQgPDwgKDIwKSkgXiBDTEs7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEEgPSAmV0FMS1tQVDEgXiA2XTsgUkVTW2krK10gXj0gKkE7ICAgICAgICAgICAgICAgICBcCisgICAgQiA9ICZXQUxLW1BUMiBeIDNdOyBSRVNbaSsrXSBePSAqQjsgICAgICAgICAgICAgICAgIFwKKyAgICBDID0gJldBTEtbUFQxIF4gN107IFJFU1tpKytdIF49ICpDOyAgICAgICAgICAgICAgICAgXAorICAgIEQgPSAmV0FMS1tQVDIgXiA3XTsgUkVTW2krK10gXj0gKkQ7ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJTiA9ICgqQSA+PiAoMTMpKSBeICgqQSA8PCAoMTkpKSBeIENMSzsgICAgICAgICAgICAgXAorICAgICpBID0gKCpCID4+ICgxNCkpIF4gKCpCIDw8ICgxOCkpIF4gQ0xLOyAgICAgICAgICAgICBcCisgICAgKkIgPSBJTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqQyA9ICgqQyA+PiAoMTUpKSBeICgqQyA8PCAoMTcpKSBeIENMSzsgICAgICAgICAgICAgXAorICAgICpEID0gKCpEID4+ICgxNikpIF4gKCpEIDw8ICgxNikpIF4gQ0xLOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQVDEgPSAoIFJFU1soIGkgLSA4ICkgXiBQVFhdIF4gICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0FMS1tQVDEgXiBQVFggXiA3XSApICYgKH4xKTsgICAgICAgICAgICAgICBcCisgICAgUFQxIF49IChQVDIgXiAweDEwKSAmIDB4MTA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZvciggbisrLCBpID0gMDsgaSA8IDE2OyBpKysgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhzLT5wb29sW24gJSBNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkVdIF49IFJFU1tpXTsKKworLyoKKyAqIEVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGhhdmVnZV9maWxsKCBtYmVkdGxzX2hhdmVnZV9zdGF0ZSAqaHMgKQoreworICAgIGludCBpLCBuID0gMDsKKyAgICBpbnQgIFUxLCAgVTIsICpBLCAqQiwgKkMsICpEOworICAgIGludCBQVDEsIFBUMiwgKldBTEssIFJFU1sxNl07CisgICAgaW50IFBUWCwgUFRZLCBDTEssIFBURVNULCBJTjsKKworICAgIFdBTEsgPSBocy0+V0FMSzsKKyAgICBQVDEgID0gaHMtPlBUMTsKKyAgICBQVDIgID0gaHMtPlBUMjsKKworICAgIFBUWCAgPSBVMSA9IDA7CisgICAgUFRZICA9IFUyID0gMDsKKworICAgICh2b2lkKVBUWDsKKworICAgIG1lbXNldCggUkVTLCAwLCBzaXplb2YoIFJFUyApICk7CisKKyAgICB3aGlsZSggbiA8IE1CRURUTFNfSEFWRUdFX0NPTExFQ1RfU0laRSAqIDQgKQorICAgIHsKKyAgICAgICAgT05FX0lURVJBVElPTgorICAgICAgICBPTkVfSVRFUkFUSU9OCisgICAgICAgIE9ORV9JVEVSQVRJT04KKyAgICAgICAgT05FX0lURVJBVElPTgorICAgIH0KKworICAgIGhzLT5QVDEgPSBQVDE7CisgICAgaHMtPlBUMiA9IFBUMjsKKworICAgIGhzLT5vZmZzZXRbMF0gPSAwOworICAgIGhzLT5vZmZzZXRbMV0gPSBNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkUgLyAyOworfQorCisvKgorICogSEFWRUdFIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQgbWJlZHRsc19oYXZlZ2VfaW5pdCggbWJlZHRsc19oYXZlZ2Vfc3RhdGUgKmhzICkKK3sKKyAgICBtZW1zZXQoIGhzLCAwLCBzaXplb2YoIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICkgKTsKKworICAgIGhhdmVnZV9maWxsKCBocyApOworfQorCit2b2lkIG1iZWR0bHNfaGF2ZWdlX2ZyZWUoIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICpocyApCit7CisgICAgaWYoIGhzID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGhzLCBzaXplb2YoIG1iZWR0bHNfaGF2ZWdlX3N0YXRlICkgKTsKK30KKworLyoKKyAqIEhBVkVHRSByYW5kIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX2hhdmVnZV9yYW5kb20oIHZvaWQgKnBfcm5nLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGludCB2YWw7CisgICAgc2l6ZV90IHVzZV9sZW47CisgICAgbWJlZHRsc19oYXZlZ2Vfc3RhdGUgKmhzID0gKG1iZWR0bHNfaGF2ZWdlX3N0YXRlICopIHBfcm5nOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisKKyAgICB3aGlsZSggbGVuID4gMCApCisgICAgeworICAgICAgICB1c2VfbGVuID0gbGVuOworICAgICAgICBpZiggdXNlX2xlbiA+IHNpemVvZihpbnQpICkKKyAgICAgICAgICAgIHVzZV9sZW4gPSBzaXplb2YoaW50KTsKKworICAgICAgICBpZiggaHMtPm9mZnNldFsxXSA+PSBNQkVEVExTX0hBVkVHRV9DT0xMRUNUX1NJWkUgKQorICAgICAgICAgICAgaGF2ZWdlX2ZpbGwoIGhzICk7CisKKyAgICAgICAgdmFsICA9IGhzLT5wb29sW2hzLT5vZmZzZXRbMF0rK107CisgICAgICAgIHZhbCBePSBocy0+cG9vbFtocy0+b2Zmc2V0WzFdKytdOworCisgICAgICAgIG1lbWNweSggcCwgJnZhbCwgdXNlX2xlbiApOworCisgICAgICAgIGxlbiAtPSB1c2VfbGVuOworICAgICAgICBwICs9IHVzZV9sZW47CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVHRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9obWFjX2RyYmcuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L2htYWNfZHJiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNWY5YjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9obWFjX2RyYmcuYwpAQCAtMCwwICsxLDUyOSBAQAorLyoKKyAqICBITUFDX0RSQkcgaW1wbGVtZW50YXRpb24gKE5JU1QgU1AgODAwLTkwKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisvKgorICogIFRoZSBOSVNUIFNQIDgwMC05MEEgRFJCR3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHB1YmxpY2F0aW9uLgorICogIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtOTBBL1NQODAwLTkwQS5wZGYKKyAqICBSZWZlcmVuY2VzIGJlbG93IGFyZSBiYXNlZCBvbiByZXYuIDEgKEphbnVhcnkgMjAxMikuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ITUFDX0RSQkdfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvaG1hY19kcmJnLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIEhNQUNfRFJCRyBjb250ZXh0IGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKK30KKworLyoKKyAqIEhNQUNfRFJCRyB1cGRhdGUsIHVzaW5nIG9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSAoMTAuMS4yLjIpCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBhZGRfbGVuICkKK3sKKyAgICBzaXplX3QgbWRfbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggY3R4LT5tZF9jdHgubWRfaW5mbyApOworICAgIHVuc2lnbmVkIGNoYXIgcm91bmRzID0gKCBhZGRpdGlvbmFsICE9IE5VTEwgJiYgYWRkX2xlbiAhPSAwICkgPyAyIDogMTsKKyAgICB1bnNpZ25lZCBjaGFyIHNlcFsxXTsKKyAgICB1bnNpZ25lZCBjaGFyIEtbTUJFRFRMU19NRF9NQVhfU0laRV07CisKKyAgICBmb3IoIHNlcFswXSA9IDA7IHNlcFswXSA8IHJvdW5kczsgc2VwWzBdKysgKQorICAgIHsKKyAgICAgICAgLyogU3RlcCAxIG9yIDQgKi8KKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCAmY3R4LT5tZF9jdHggKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eC0+bWRfY3R4LCBjdHgtPlYsIG1kX2xlbiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LT5tZF9jdHgsIHNlcCwgMSApOworICAgICAgICBpZiggcm91bmRzID09IDIgKQorICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eC0+bWRfY3R4LCBhZGRpdGlvbmFsLCBhZGRfbGVuICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZjdHgtPm1kX2N0eCwgSyApOworCisgICAgICAgIC8qIFN0ZXAgMiBvciA1ICovCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZjdHgtPm1kX2N0eCwgSywgbWRfbGVuICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgtPm1kX2N0eCwgY3R4LT5WLCBtZF9sZW4gKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eC0+bWRfY3R4LCBjdHgtPlYgKTsKKyAgICB9Cit9CisKKy8qCisgKiBTaW1wbGlmaWVkIEhNQUNfRFJCRyBpbml0aWFsaXNhdGlvbiAoZm9yIHVzZSB3aXRoIGRldGVybWluaXN0aWMgRUNEU0EpCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkX2J1ZiggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKiBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJmN0eC0+bWRfY3R4LCBtZF9pbmZvLCAxICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qCisgICAgICogU2V0IGluaXRpYWwgd29ya2luZyBzdGF0ZS4KKyAgICAgKiBVc2UgdGhlIFYgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBpcyBjdXJyZW50bHkgYWxsIDAsIHRvIGluaXRpYWxpemUgdGhlCisgICAgICogTUQgY29udGV4dCB3aXRoIGFuIGFsbC16ZXJvIGtleS4gVGhlbiBzZXQgViB0byBpdHMgaW5pdGlhbCB2YWx1ZS4KKyAgICAgKi8KKyAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmY3R4LT5tZF9jdHgsIGN0eC0+ViwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgbWVtc2V0KCBjdHgtPlYsIDB4MDEsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlKCBjdHgsIGRhdGEsIGRhdGFfbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEhNQUNfRFJCRyByZXNlZWRpbmc6IDEwLjEuMi40IChhcmFiaWMpICsgOS4yIChSb21hbikKKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3Jlc2VlZCggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBsZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgc2VlZFtNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVF07CisgICAgc2l6ZV90IHNlZWRsZW47CisKKyAgICAvKiBJSUkuIENoZWNrIGlucHV0IGxlbmd0aCAqLworICAgIGlmKCBsZW4gPiBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgfHwKKyAgICAgICAgY3R4LT5lbnRyb3B5X2xlbiArIGxlbiA+IE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcgKTsKKyAgICB9CisKKyAgICBtZW1zZXQoIHNlZWQsIDAsIE1CRURUTFNfSE1BQ19EUkJHX01BWF9TRUVEX0lOUFVUICk7CisKKyAgICAvKiBJVi4gR2F0aGVyIGVudHJvcHlfbGVuIGJ5dGVzIG9mIGVudHJvcHkgZm9yIHRoZSBzZWVkICovCisgICAgaWYoIGN0eC0+Zl9lbnRyb3B5KCBjdHgtPnBfZW50cm9weSwgc2VlZCwgY3R4LT5lbnRyb3B5X2xlbiApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKworICAgIHNlZWRsZW4gPSBjdHgtPmVudHJvcHlfbGVuOworCisgICAgLyogMS4gQ29uY2F0ZW5hdGUgZW50cm9weSBhbmQgYWRkaXRpb25hbCBkYXRhIGlmIGFueSAqLworICAgIGlmKCBhZGRpdGlvbmFsICE9IE5VTEwgJiYgbGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCBzZWVkICsgc2VlZGxlbiwgYWRkaXRpb25hbCwgbGVuICk7CisgICAgICAgIHNlZWRsZW4gKz0gbGVuOworICAgIH0KKworICAgIC8qIDIuIFVwZGF0ZSBzdGF0ZSAqLworICAgIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZSggY3R4LCBzZWVkLCBzZWVkbGVuICk7CisKKyAgICAvKiAzLiBSZXNldCByZXNlZWRfY291bnRlciAqLworICAgIGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOworCisgICAgLyogNC4gRG9uZSAqLworICAgIHJldHVybiggMCApOworfQorCisvKgorICogSE1BQ19EUkJHIGluaXRpYWxpc2F0aW9uICgxMC4xLjIuMyArIDkuMSkKKyAqLworaW50IG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKiBtZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX2VudHJvcHkpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1c3RvbSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgZW50cm9weV9sZW4sIG1kX3NpemU7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LT5tZF9jdHgsIG1kX2luZm8sIDEgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWRfc2l6ZSA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKworICAgIC8qCisgICAgICogU2V0IGluaXRpYWwgd29ya2luZyBzdGF0ZS4KKyAgICAgKiBVc2UgdGhlIFYgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBpcyBjdXJyZW50bHkgYWxsIDAsIHRvIGluaXRpYWxpemUgdGhlCisgICAgICogTUQgY29udGV4dCB3aXRoIGFuIGFsbC16ZXJvIGtleS4gVGhlbiBzZXQgViB0byBpdHMgaW5pdGlhbCB2YWx1ZS4KKyAgICAgKi8KKyAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmY3R4LT5tZF9jdHgsIGN0eC0+ViwgbWRfc2l6ZSApOworICAgIG1lbXNldCggY3R4LT5WLCAweDAxLCBtZF9zaXplICk7CisKKyAgICBjdHgtPmZfZW50cm9weSA9IGZfZW50cm9weTsKKyAgICBjdHgtPnBfZW50cm9weSA9IHBfZW50cm9weTsKKworICAgIGN0eC0+cmVzZWVkX2ludGVydmFsID0gTUJFRFRMU19ITUFDX0RSQkdfUkVTRUVEX0lOVEVSVkFMOworCisgICAgLyoKKyAgICAgKiBTZWUgU1A4MDAtNTcgNS42LjEgKHAuIDY1LTY2KSBmb3IgdGhlIHNlY3VyaXR5IHN0cmVuZ3RoIHByb3ZpZGVkIGJ5CisgICAgICogZWFjaCBoYXNoIGZ1bmN0aW9uLCB0aGVuIGFjY29yZGluZyB0byBTUDgwMC05MEEgcmV2MSAxMC4xIHRhYmxlIDIsCisgICAgICogbWluX2VudHJvcHlfbGVuIChpbiBiaXRzKSBpcyBzZWN1cml0eV9zdHJlbmd0aC4KKyAgICAgKgorICAgICAqIChUaGlzIGFsc28gbWF0Y2hlcyB0aGUgc2l6ZXMgdXNlZCBpbiB0aGUgTklTVCB0ZXN0IHZlY3RvcnMuKQorICAgICAqLworICAgIGVudHJvcHlfbGVuID0gbWRfc2l6ZSA8PSAyMCA/IDE2IDogLyogMTYwLWJpdHMgaGFzaCAtPiAxMjggYml0cyAqLworICAgICAgICAgICAgICAgICAgbWRfc2l6ZSA8PSAyOCA/IDI0IDogLyogMjI0LWJpdHMgaGFzaCAtPiAxOTIgYml0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOyAgLyogYmV0dGVyICgyNTYrKSAtPiAyNTYgYml0cyAqLworCisgICAgLyoKKyAgICAgKiBGb3IgaW5pdGlhbGlzYXRpb24sIHVzZSBtb3JlIGVudHJvcHkgdG8gZW11bGF0ZSBhIG5vbmNlCisgICAgICogKEFnYWluLCBtYXRjaGVzIHRlc3QgdmVjdG9ycy4pCisgICAgICovCisgICAgY3R4LT5lbnRyb3B5X2xlbiA9IGVudHJvcHlfbGVuICogMyAvIDI7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2htYWNfZHJiZ19yZXNlZWQoIGN0eCwgY3VzdG9tLCBsZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgY3R4LT5lbnRyb3B5X2xlbiA9IGVudHJvcHlfbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTZXQgcHJlZGljdGlvbiByZXNpc3RhbmNlCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2lzdGFuY2UgKQoreworICAgIGN0eC0+cHJlZGljdGlvbl9yZXNpc3RhbmNlID0gcmVzaXN0YW5jZTsKK30KKworLyoKKyAqIFNldCBlbnRyb3B5IGxlbmd0aCBncmFiYmVkIGZvciByZXNlZWRzCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfc2V0X2VudHJvcHlfbGVuKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsIHNpemVfdCBsZW4gKQoreworICAgIGN0eC0+ZW50cm9weV9sZW4gPSBsZW47Cit9CisKKy8qCisgKiBTZXQgcmVzZWVkIGludGVydmFsCisgKi8KK3ZvaWQgbWJlZHRsc19obWFjX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LCBpbnQgaW50ZXJ2YWwgKQoreworICAgIGN0eC0+cmVzZWVkX2ludGVydmFsID0gaW50ZXJ2YWw7Cit9CisKKy8qCisgKiBITUFDX0RSQkcgcmFuZG9tIGZ1bmN0aW9uIHdpdGggb3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhOgorICogMTAuMS4yLjUgKGFyYWJpYykgKyA5LjMgKFJvbWFuKQorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZGl0aW9uYWwsIHNpemVfdCBhZGRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKmN0eCA9IChtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICopIHBfcm5nOworICAgIHNpemVfdCBtZF9sZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBjdHgtPm1kX2N0eC5tZF9pbmZvICk7CisgICAgc2l6ZV90IGxlZnQgPSBvdXRfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKm91dCA9IG91dHB1dDsKKworICAgIC8qIElJLiBDaGVjayByZXF1ZXN0IGxlbmd0aCAqLworICAgIGlmKCBvdXRfbGVuID4gTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0hNQUNfRFJCR19SRVFVRVNUX1RPT19CSUcgKTsKKworICAgIC8qIElJSS4gQ2hlY2sgaW5wdXQgbGVuZ3RoICovCisgICAgaWYoIGFkZF9sZW4gPiBNQkVEVExTX0hNQUNfRFJCR19NQVhfSU5QVVQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0hNQUNfRFJCR19JTlBVVF9UT09fQklHICk7CisKKyAgICAvKiAxLiAoYWthIFZJSSBhbmQgSVgpIENoZWNrIHJlc2VlZCBjb3VudGVyIGFuZCBQUiAqLworICAgIGlmKCBjdHgtPmZfZW50cm9weSAhPSBOVUxMICYmIC8qIEZvciBuby1yZXNlZWRpbmcgaW5zdGFuY2VzICovCisgICAgICAgICggY3R4LT5wcmVkaWN0aW9uX3Jlc2lzdGFuY2UgPT0gTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gfHwKKyAgICAgICAgICBjdHgtPnJlc2VlZF9jb3VudGVyID4gY3R4LT5yZXNlZWRfaW50ZXJ2YWwgKSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2htYWNfZHJiZ19yZXNlZWQoIGN0eCwgYWRkaXRpb25hbCwgYWRkX2xlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGFkZF9sZW4gPSAwOyAvKiBWSUkuNCAqLworICAgIH0KKworICAgIC8qIDIuIFVzZSBhZGRpdGlvbmFsIGRhdGEgaWYgYW55ICovCisgICAgaWYoIGFkZGl0aW9uYWwgIT0gTlVMTCAmJiBhZGRfbGVuICE9IDAgKQorICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGUoIGN0eCwgYWRkaXRpb25hbCwgYWRkX2xlbiApOworCisgICAgLyogMywgNCwgNS4gR2VuZXJhdGUgYnl0ZXMgKi8KKyAgICB3aGlsZSggbGVmdCAhPSAwICkKKyAgICB7CisgICAgICAgIHNpemVfdCB1c2VfbGVuID0gbGVmdCA+IG1kX2xlbiA/IG1kX2xlbiA6IGxlZnQ7CisKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCAmY3R4LT5tZF9jdHggKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eC0+bWRfY3R4LCBjdHgtPlYsIG1kX2xlbiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmY3R4LT5tZF9jdHgsIGN0eC0+ViApOworCisgICAgICAgIG1lbWNweSggb3V0LCBjdHgtPlYsIHVzZV9sZW4gKTsKKyAgICAgICAgb3V0ICs9IHVzZV9sZW47CisgICAgICAgIGxlZnQgLT0gdXNlX2xlbjsKKyAgICB9CisKKyAgICAvKiA2LiBVcGRhdGUgKi8KKyAgICBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGUoIGN0eCwgYWRkaXRpb25hbCwgYWRkX2xlbiApOworCisgICAgLyogNy4gVXBkYXRlIHJlc2VlZCBjb3VudGVyICovCisgICAgY3R4LT5yZXNlZWRfY291bnRlcisrOworCisgICAgLyogOC4gRG9uZSAqLworICAgIHJldHVybiggMCApOworfQorCisvKgorICogSE1BQ19EUkJHIHJhbmRvbSBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCB2b2lkICpwX3JuZywgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3Qgb3V0X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHggPSAobWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqKSBwX3JuZzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjdHgtPm11dGV4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisgICAgcmV0ID0gbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCBjdHgsIG91dHB1dCwgb3V0X2xlbiwgTlVMTCwgMCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEZyZWUgYW4gSE1BQ19EUkJHIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHgtPm1kX2N0eCApOworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1iZWR0bHNfaG1hY19kcmJnX3dyaXRlX3NlZWRfZmlsZSggbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgY2hhciBidWZbIE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVCBdOworCisgICAgaWYoICggZiA9IGZvcGVuKCBwYXRoLCAid2IiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCBjdHgsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCBmd3JpdGUoIGJ1ZiwgMSwgc2l6ZW9mKCBidWYgKSwgZiApICE9IHNpemVvZiggYnVmICkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1I7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIGZjbG9zZSggZiApOworICAgIHJldHVybiggcmV0ICk7Cit9CisKK2ludCBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGVfc2VlZF9maWxlKCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGggKQoreworICAgIEZJTEUgKmY7CisgICAgc2l6ZV90IG47CisgICAgdW5zaWduZWQgY2hhciBidWZbIE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVCBdOworCisgICAgaWYoICggZiA9IGZvcGVuKCBwYXRoLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUiApOworCisgICAgZnNlZWsoIGYsIDAsIFNFRUtfRU5EICk7CisgICAgbiA9IChzaXplX3QpIGZ0ZWxsKCBmICk7CisgICAgZnNlZWsoIGYsIDAsIFNFRUtfU0VUICk7CisKKyAgICBpZiggbiA+IE1CRURUTFNfSE1BQ19EUkJHX01BWF9JTlBVVCApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfSU5QVVRfVE9PX0JJRyApOworICAgIH0KKworICAgIGlmKCBmcmVhZCggYnVmLCAxLCBuLCBmICkgIT0gbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ITUFDX0RSQkdfRklMRV9JT19FUlJPUiApOworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfdXBkYXRlKCBjdHgsIGJ1ZiwgbiApOworCisgICAgcmV0dXJuKCBtYmVkdGxzX2htYWNfZHJiZ193cml0ZV9zZWVkX2ZpbGUoIGN0eCwgcGF0aCApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEExX0MpCisvKiBEdW1teSBjaGVja3VwIHJvdXRpbmUgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICAodm9pZCkgdmVyYm9zZTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNkZWZpbmUgT1VUUFVUX0xFTiAgODAKKworLyogRnJvbSBhIE5JU1QgUFI9dHJ1ZSB0ZXN0IHZlY3RvciAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZW50cm9weV9wcltdID0geworICAgIDB4YTAsIDB4YzksIDB4YWIsIDB4NTgsIDB4ZjEsIDB4ZTIsIDB4ZTUsIDB4YTQsIDB4ZGUsIDB4M2UsIDB4YmQsIDB4NGYsCisgICAgMHhmNywgMHgzZSwgMHg5YywgMHg1YiwgMHg2NCwgMHhlZiwgMHhkOCwgMHhjYSwgMHgwMiwgMHg4YywgMHhmOCwgMHgxMSwKKyAgICAweDQ4LCAweGE1LCAweDg0LCAweGZlLCAweDY5LCAweGFiLCAweDVhLCAweGVlLCAweDQyLCAweGFhLCAweDRkLCAweDQyLAorICAgIDB4MTcsIDB4NjAsIDB4OTksIDB4ZDQsIDB4NWUsIDB4MTMsIDB4OTcsIDB4ZGMsIDB4NDAsIDB4NGQsIDB4ODYsIDB4YTMsCisgICAgMHg3YiwgMHhmNSwgMHg1OSwgMHg1NCwgMHg3NSwgMHg2OSwgMHg1MSwgMHhlNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVzdWx0X3ByW09VVFBVVF9MRU5dID0geworICAgIDB4OWEsIDB4MDAsIDB4YTIsIDB4ZDAsIDB4MGUsIDB4ZDUsIDB4OWIsIDB4ZmUsIDB4MzEsIDB4ZWMsIDB4YjEsIDB4MzksCisgICAgMHg5YiwgMHg2MCwgMHg4MSwgMHg0OCwgMHhkMSwgMHg5NiwgMHg5ZCwgMHgyNSwgMHgwZCwgMHgzYywgMHgxZSwgMHg5NCwKKyAgICAweDEwLCAweDEwLCAweDk4LCAweDEyLCAweDkzLCAweDI1LCAweGNhLCAweGI4LCAweGZjLCAweGNjLCAweDJkLCAweDU0LAorICAgIDB4NzMsIDB4MTksIDB4NzAsIDB4YzAsIDB4MTAsIDB4N2EsIDB4YTQsIDB4ODksIDB4MjUsIDB4MTksIDB4OTUsIDB4NWUsCisgICAgMHg0YiwgMHhjNiwgMHgwMCwgMHgxZCwgMHg3ZiwgMHg0ZSwgMHg2YSwgMHgyYiwgMHhmOCwgMHhhMywgMHgwMSwgMHhhYiwKKyAgICAweDQ2LCAweDA1LCAweDVjLCAweDA5LCAweGE2LCAweDcxLCAweDg4LCAweGYxLCAweGE3LCAweDQwLCAweGVlLCAweGYzLAorICAgIDB4ZTEsIDB4NWMsIDB4MDIsIDB4OWIsIDB4NDQsIDB4YWYsIDB4MDMsIDB4NDQgfTsKKworLyogRnJvbSBhIE5JU1QgUFI9ZmFsc2UgdGVzdCB2ZWN0b3IgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVudHJvcHlfbm9wcltdID0geworICAgIDB4NzksIDB4MzQsIDB4OWIsIDB4YmYsIDB4N2MsIDB4ZGQsIDB4YTUsIDB4NzksIDB4OTUsIDB4NTcsIDB4ODYsIDB4NjYsCisgICAgMHgyMSwgMHhjOSwgMHgxMywgMHg4MywgMHgxMSwgMHg0NiwgMHg3MywgMHgzYSwgMHhiZiwgMHg4YywgMHgzNSwgMHhjOCwKKyAgICAweGM3LCAweDIxLCAweDViLCAweDViLCAweDk2LCAweGM0LCAweDhlLCAweDliLCAweDMzLCAweDhjLCAweDc0LCAweGUzLAorICAgIDB4ZTksIDB4OWQsIDB4ZmUsIDB4ZGYgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlc3VsdF9ub3ByW09VVFBVVF9MRU5dID0geworICAgIDB4YzYsIDB4YTEsIDB4NmEsIDB4YjgsIDB4ZDQsIDB4MjAsIDB4NzAsIDB4NmYsIDB4MGYsIDB4MzQsIDB4YWIsIDB4N2YsCisgICAgMHhlYywgMHg1YSwgMHhkYywgMHhhOSwgMHhkOCwgMHhjYSwgMHgzYSwgMHgxMywgMHgzZSwgMHgxNSwgMHg5YywgMHhhNiwKKyAgICAweGFjLCAweDQzLCAweGM2LCAweGY4LCAweGEyLCAweGJlLCAweDIyLCAweDgzLCAweDRhLCAweDRjLCAweDBhLCAweDBhLAorICAgIDB4ZmYsIDB4YjEsIDB4MGQsIDB4NzEsIDB4OTQsIDB4ZjEsIDB4YzEsIDB4YTUsIDB4Y2YsIDB4NzMsIDB4MjIsIDB4ZWMsCisgICAgMHgxYSwgMHhlMCwgMHg5NiwgMHg0ZSwgMHhkNCwgMHhiZiwgMHgxMiwgMHgyNywgMHg0NiwgMHhlMCwgMHg4NywgMHhmZCwKKyAgICAweGI1LCAweGIzLCAweGU5LCAweDFiLCAweDM0LCAweDkzLCAweGQ1LCAweGJiLCAweDk4LCAweGZhLCAweGVkLCAweDQ5LAorICAgIDB4ZTgsIDB4NWYsIDB4MTMsIDB4MGYsIDB4YzgsIDB4YTQsIDB4NTksIDB4YjcgfTsKKworLyogIkVudHJvcHkiIGZyb20gYnVmZmVyICovCitzdGF0aWMgc2l6ZV90IHRlc3Rfb2Zmc2V0Oworc3RhdGljIGludCBobWFjX2RyYmdfc2VsZl90ZXN0X2VudHJvcHkoIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gZGF0YTsKKyAgICBtZW1jcHkoIGJ1ZiwgcCArIHRlc3Rfb2Zmc2V0LCBsZW4gKTsKKyAgICB0ZXN0X29mZnNldCArPSBsZW47CisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNkZWZpbmUgQ0hLKCBjICkgICAgaWYoIChjKSAhPSAwICkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAxICk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB9CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUgZm9yIEhNQUNfRFJCRyB3aXRoIFNIQS0xCisgKi8KK2ludCBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltPVVRQVVRfTEVOXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMSApOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmN0eCApOworCisgICAgLyoKKyAgICAgKiBQUiA9IFRydWUKKyAgICAgKi8KKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIEhNQUNfRFJCRyAoUFIgPSBUcnVlKSA6ICIgKTsKKworICAgIHRlc3Rfb2Zmc2V0ID0gMDsKKyAgICBDSEsoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZjdHgsIG1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgaG1hY19kcmJnX3NlbGZfdGVzdF9lbnRyb3B5LCAodm9pZCAqKSBlbnRyb3B5X3ByLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAgKSApOworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZjdHgsIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OICk7CisgICAgQ0hLKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIGJ1ZiwgT1VUUFVUX0xFTiApICk7CisgICAgQ0hLKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIGJ1ZiwgT1VUUFVUX0xFTiApICk7CisgICAgQ0hLKCBtZW1jbXAoIGJ1ZiwgcmVzdWx0X3ByLCBPVVRQVVRfTEVOICkgKTsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIC8qCisgICAgICogUFIgPSBGYWxzZQorICAgICAqLworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgSE1BQ19EUkJHIChQUiA9IEZhbHNlKSA6ICIgKTsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoICZjdHggKTsKKworICAgIHRlc3Rfb2Zmc2V0ID0gMDsKKyAgICBDSEsoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZjdHgsIG1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgaG1hY19kcmJnX3NlbGZfdGVzdF9lbnRyb3B5LCAodm9pZCAqKSBlbnRyb3B5X25vcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCApICk7CisgICAgQ0hLKCBtYmVkdGxzX2htYWNfZHJiZ19yZXNlZWQoICZjdHgsIE5VTEwsIDAgKSApOworICAgIENISyggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIE9VVFBVVF9MRU4gKSApOworICAgIENISyggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmY3R4LCBidWYsIE9VVFBVVF9MRU4gKSApOworICAgIENISyggbWVtY21wKCBidWYsIHJlc3VsdF9ub3ByLCBPVVRQVVRfTEVOICkgKTsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19ITUFDX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhOThmNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qKgorICogXGZpbGUgbWJlZHRsc19tZC5jCisgKgorICogXGJyaWVmIEdlbmVyaWMgbWVzc2FnZSBkaWdlc3Qgd3JhcHBlciBmb3IgbWJlZCBUTFMKKyAqCisgKiBcYXV0aG9yIEFkcmlhYW4gZGUgSm9uZyA8ZGVqb25nQGZveC1pdC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kX2ludGVybmFsLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogUmVtaW5kZXI6IHVwZGF0ZSBwcm9maWxlcyBpbiB4NTA5X2NydC5jIHdoZW4gYWRkaW5nIGEgbmV3IGhhc2ghCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgc3VwcG9ydGVkX2RpZ2VzdHNbXSA9IHsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICAgICAgTUJFRFRMU19NRF9TSEE1MTIsCisgICAgICAgIE1CRURUTFNfTURfU0hBMzg0LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LAorICAgICAgICBNQkVEVExTX01EX1NIQTIyNCwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgTUJFRFRMU19NRF9TSEExLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgICAgIE1CRURUTFNfTURfUklQRU1EMTYwLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgICAgIE1CRURUTFNfTURfTUQ1LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgICAgIE1CRURUTFNfTURfTUQ0LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgICAgIE1CRURUTFNfTURfTUQyLAorI2VuZGlmCisKKyAgICAgICAgTUJFRFRMU19NRF9OT05FCit9OworCitjb25zdCBpbnQgKm1iZWR0bHNfbWRfbGlzdCggdm9pZCApCit7CisgICAgcmV0dXJuKCBzdXBwb3J0ZWRfZGlnZXN0cyApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBjb25zdCBjaGFyICptZF9uYW1lICkKK3sKKyAgICBpZiggTlVMTCA9PSBtZF9uYW1lICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICAvKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGRpZ2VzdCBpbmZvcm1hdGlvbiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKKyAgICBpZiggIXN0cmNtcCggIk1EMiIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX01EMiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgIGlmKCAhc3RyY21wKCAiTUQ0IiwgbWRfbmFtZSApICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfTUQ0ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgaWYoICFzdHJjbXAoICJNRDUiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9NRDUgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19SSVBFTUQxNjBfQykKKyAgICBpZiggIXN0cmNtcCggIlJJUEVNRDE2MCIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1JJUEVNRDE2MCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBpZiggIXN0cmNtcCggIlNIQTEiLCBtZF9uYW1lICkgfHwgIXN0cmNtcCggIlNIQSIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTEgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBpZiggIXN0cmNtcCggIlNIQTIyNCIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTIyNCApOworICAgIGlmKCAhc3RyY21wKCAiU0hBMjU2IiwgbWRfbmFtZSApICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgaWYoICFzdHJjbXAoICJTSEEzODQiLCBtZF9uYW1lICkgKQorICAgICAgICByZXR1cm4gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEEzODQgKTsKKyAgICBpZiggIXN0cmNtcCggIlNIQTUxMiIsIG1kX25hbWUgKSApCisgICAgICAgIHJldHVybiBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTUxMiApOworI2VuZGlmCisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlICkKK3sKKyAgICBzd2l0Y2goIG1kX3R5cGUgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9NRDI6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX21kMl9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9NRDQ6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX21kNF9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9NRDU6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX21kNV9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9SSVBFTUQxNjA6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX3JpcGVtZDE2MF9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMToKKyAgICAgICAgICAgIHJldHVybiggJm1iZWR0bHNfc2hhMV9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9TSEEyMjQ6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX3NoYTIyNF9pbmZvICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9TSEEyNTY6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX3NoYTI1Nl9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9TSEEzODQ6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX3NoYTM4NF9pbmZvICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19NRF9TSEE1MTI6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX3NoYTUxMl9pbmZvICk7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggTlVMTCApOworICAgIH0KK30KKwordm9pZCBtYmVkdGxzX21kX2luaXQoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfbWRfY29udGV4dF90ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX21kX2ZyZWUoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPm1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCBjdHgtPm1kX2N0eCAhPSBOVUxMICkKKyAgICAgICAgY3R4LT5tZF9pbmZvLT5jdHhfZnJlZV9mdW5jKCBjdHgtPm1kX2N0eCApOworCisgICAgaWYoIGN0eC0+aG1hY19jdHggIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGN0eC0+aG1hY19jdHgsIDIgKiBjdHgtPm1kX2luZm8tPmJsb2NrX3NpemUgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdHgtPmhtYWNfY3R4ICk7CisgICAgfQorCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19tZF9jb250ZXh0X3QgKSApOworfQorCitpbnQgbWJlZHRsc19tZF9jbG9uZSggbWJlZHRsc19tZF9jb250ZXh0X3QgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kX2NvbnRleHRfdCAqc3JjICkKK3sKKyAgICBpZiggZHN0ID09IE5VTEwgfHwgZHN0LT5tZF9pbmZvID09IE5VTEwgfHwKKyAgICAgICAgc3JjID09IE5VTEwgfHwgc3JjLT5tZF9pbmZvID09IE5VTEwgfHwKKyAgICAgICAgZHN0LT5tZF9pbmZvICE9IHNyYy0+bWRfaW5mbyApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgZHN0LT5tZF9pbmZvLT5jbG9uZV9mdW5jKCBkc3QtPm1kX2N0eCwgc3JjLT5tZF9jdHggKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgISBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEKQoraW50IG1iZWR0bHNfbWRfaW5pdF9jdHgoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc19tZF9zZXR1cCggY3R4LCBtZF9pbmZvLCAxICk7Cit9CisjZW5kaWYKKworaW50IG1iZWR0bHNfbWRfc2V0dXAoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBpbnQgaG1hYyApCit7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCB8fCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIGN0eC0+bWRfY3R4ID0gbWRfaW5mby0+Y3R4X2FsbG9jX2Z1bmMoKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCApOworCisgICAgaWYoIGhtYWMgIT0gMCApCisgICAgeworICAgICAgICBjdHgtPmhtYWNfY3R4ID0gbWJlZHRsc19jYWxsb2MoIDIsIG1kX2luZm8tPmJsb2NrX3NpemUgKTsKKyAgICAgICAgaWYoIGN0eC0+aG1hY19jdHggPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1kX2luZm8tPmN0eF9mcmVlX2Z1bmMoIGN0eC0+bWRfY3R4ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0FMTE9DX0ZBSUxFRCApOworICAgICAgICB9CisgICAgfQorCisgICAgY3R4LT5tZF9pbmZvID0gbWRfaW5mbzsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19tZF9zdGFydHMoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPm1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGN0eC0+bWRfaW5mby0+c3RhcnRzX2Z1bmMoIGN0eC0+bWRfY3R4ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfbWRfdXBkYXRlKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4gKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPm1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGN0eC0+bWRfaW5mby0+dXBkYXRlX2Z1bmMoIGN0eC0+bWRfY3R4LCBpbnB1dCwgaWxlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX21kX2ZpbmlzaCggbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjdHgtPm1kX2luZm8tPmZpbmlzaF9mdW5jKCBjdHgtPm1kX2N0eCwgb3V0cHV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfbWQoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZF9pbmZvLT5kaWdlc3RfZnVuYyggaW5wdXQsIGlsZW4sIG91dHB1dCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWJlZHRsc19tZF9maWxlKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgc2l6ZV90IG47CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworCisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgInJiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfRklMRV9JT19FUlJPUiApOworCisgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LCBtZF9pbmZvLCAwICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgbWRfaW5mby0+c3RhcnRzX2Z1bmMoIGN0eC5tZF9jdHggKTsKKworICAgIHdoaWxlKCAoIG4gPSBmcmVhZCggYnVmLCAxLCBzaXplb2YoIGJ1ZiApLCBmICkgKSA+IDAgKQorICAgICAgICBtZF9pbmZvLT51cGRhdGVfZnVuYyggY3R4Lm1kX2N0eCwgYnVmLCBuICk7CisKKyAgICBpZiggZmVycm9yKCBmICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9NRF9GSUxFX0lPX0VSUk9SOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgbWRfaW5mby0+ZmluaXNoX2Z1bmMoIGN0eC5tZF9jdHgsIG91dHB1dCApOworCitjbGVhbnVwOgorICAgIGZjbG9zZSggZiApOworICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisKK2ludCBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3VtW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgKmlwYWQsICpvcGFkOworICAgIHNpemVfdCBpOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+bWRfaW5mbyA9PSBOVUxMIHx8IGN0eC0+aG1hY19jdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBrZXlsZW4gPiAoc2l6ZV90KSBjdHgtPm1kX2luZm8tPmJsb2NrX3NpemUgKQorICAgIHsKKyAgICAgICAgY3R4LT5tZF9pbmZvLT5zdGFydHNfZnVuYyggY3R4LT5tZF9jdHggKTsKKyAgICAgICAgY3R4LT5tZF9pbmZvLT51cGRhdGVfZnVuYyggY3R4LT5tZF9jdHgsIGtleSwga2V5bGVuICk7CisgICAgICAgIGN0eC0+bWRfaW5mby0+ZmluaXNoX2Z1bmMoIGN0eC0+bWRfY3R4LCBzdW0gKTsKKworICAgICAgICBrZXlsZW4gPSBjdHgtPm1kX2luZm8tPnNpemU7CisgICAgICAgIGtleSA9IHN1bTsKKyAgICB9CisKKyAgICBpcGFkID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5obWFjX2N0eDsKKyAgICBvcGFkID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5obWFjX2N0eCArIGN0eC0+bWRfaW5mby0+YmxvY2tfc2l6ZTsKKworICAgIG1lbXNldCggaXBhZCwgMHgzNiwgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICk7CisgICAgbWVtc2V0KCBvcGFkLCAweDVDLCBjdHgtPm1kX2luZm8tPmJsb2NrX3NpemUgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBrZXlsZW47IGkrKyApCisgICAgeworICAgICAgICBpcGFkW2ldID0gKHVuc2lnbmVkIGNoYXIpKCBpcGFkW2ldIF4ga2V5W2ldICk7CisgICAgICAgIG9wYWRbaV0gPSAodW5zaWduZWQgY2hhcikoIG9wYWRbaV0gXiBrZXlbaV0gKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3plcm9pemUoIHN1bSwgc2l6ZW9mKCBzdW0gKSApOworCisgICAgY3R4LT5tZF9pbmZvLT5zdGFydHNfZnVuYyggY3R4LT5tZF9jdHggKTsKKyAgICBjdHgtPm1kX2luZm8tPnVwZGF0ZV9mdW5jKCBjdHgtPm1kX2N0eCwgaXBhZCwgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+bWRfaW5mbyA9PSBOVUxMIHx8IGN0eC0+aG1hY19jdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGN0eC0+bWRfaW5mby0+dXBkYXRlX2Z1bmMoIGN0eC0+bWRfY3R4LCBpbnB1dCwgaWxlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX21kX2htYWNfZmluaXNoKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgdG1wW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgKm9wYWQ7CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgfHwgY3R4LT5obWFjX2N0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgb3BhZCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aG1hY19jdHggKyBjdHgtPm1kX2luZm8tPmJsb2NrX3NpemU7CisKKyAgICBjdHgtPm1kX2luZm8tPmZpbmlzaF9mdW5jKCBjdHgtPm1kX2N0eCwgdG1wICk7CisgICAgY3R4LT5tZF9pbmZvLT5zdGFydHNfZnVuYyggY3R4LT5tZF9jdHggKTsKKyAgICBjdHgtPm1kX2luZm8tPnVwZGF0ZV9mdW5jKCBjdHgtPm1kX2N0eCwgb3BhZCwgY3R4LT5tZF9pbmZvLT5ibG9ja19zaXplICk7CisgICAgY3R4LT5tZF9pbmZvLT51cGRhdGVfZnVuYyggY3R4LT5tZF9jdHgsIHRtcCwgY3R4LT5tZF9pbmZvLT5zaXplICk7CisgICAgY3R4LT5tZF9pbmZvLT5maW5pc2hfZnVuYyggY3R4LT5tZF9jdHgsIG91dHB1dCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX21kX2htYWNfcmVzZXQoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHggKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmlwYWQ7CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgfHwgY3R4LT5obWFjX2N0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgaXBhZCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aG1hY19jdHg7CisKKyAgICBjdHgtPm1kX2luZm8tPnN0YXJ0c19mdW5jKCBjdHgtPm1kX2N0eCApOworICAgIGN0eC0+bWRfaW5mby0+dXBkYXRlX2Z1bmMoIGN0eC0+bWRfY3R4LCBpcGFkLCBjdHgtPm1kX2luZm8tPmJsb2NrX3NpemUgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19tZF9obWFjKCBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbywgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJmN0eCwgbWRfaW5mbywgMSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmY3R4LCBrZXksIGtleWxlbiApOworICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgsIGlucHV0LCBpbGVuICk7CisgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19tZF9wcm9jZXNzKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5tZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBjdHgtPm1kX2luZm8tPnByb2Nlc3NfZnVuYyggY3R4LT5tZF9jdHgsIGRhdGEgKTsKKworICAgIHJldHVybiggMCApOworfQorCit1bnNpZ25lZCBjaGFyIG1iZWR0bHNfbWRfZ2V0X3NpemUoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvICkKK3sKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICByZXR1cm4gbWRfaW5mby0+c2l6ZTsKK30KKworbWJlZHRsc19tZF90eXBlX3QgbWJlZHRsc19tZF9nZXRfdHlwZSggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gKQoreworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfTk9ORSApOworCisgICAgcmV0dXJuIG1kX2luZm8tPnR5cGU7Cit9CisKK2NvbnN0IGNoYXIgKm1iZWR0bHNfbWRfZ2V0X25hbWUoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvICkKK3sKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICByZXR1cm4gbWRfaW5mby0+bmFtZTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfTURfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc2NzAxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWQyLmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiAgUkZDIDExMTUvMTMxOSBjb21wbGlhbnQgTUQyIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBNRDIgYWxnb3JpdGhtIHdhcyBkZXNpZ25lZCBieSBSb24gUml2ZXN0IGluIDE5ODkuCisgKgorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzExMTUudHh0CisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTMxOS50eHQKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorCisjaW5jbHVkZSAibWJlZHRscy9tZDIuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01EMl9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBJX1NVQlNUWzI1Nl0gPQoreworICAgIDB4MjksIDB4MkUsIDB4NDMsIDB4QzksIDB4QTIsIDB4RDgsIDB4N0MsIDB4MDEsIDB4M0QsIDB4MzYsCisgICAgMHg1NCwgMHhBMSwgMHhFQywgMHhGMCwgMHgwNiwgMHgxMywgMHg2MiwgMHhBNywgMHgwNSwgMHhGMywKKyAgICAweEMwLCAweEM3LCAweDczLCAweDhDLCAweDk4LCAweDkzLCAweDJCLCAweEQ5LCAweEJDLCAweDRDLAorICAgIDB4ODIsIDB4Q0EsIDB4MUUsIDB4OUIsIDB4NTcsIDB4M0MsIDB4RkQsIDB4RDQsIDB4RTAsIDB4MTYsCisgICAgMHg2NywgMHg0MiwgMHg2RiwgMHgxOCwgMHg4QSwgMHgxNywgMHhFNSwgMHgxMiwgMHhCRSwgMHg0RSwKKyAgICAweEM0LCAweEQ2LCAweERBLCAweDlFLCAweERFLCAweDQ5LCAweEEwLCAweEZCLCAweEY1LCAweDhFLAorICAgIDB4QkIsIDB4MkYsIDB4RUUsIDB4N0EsIDB4QTksIDB4NjgsIDB4NzksIDB4OTEsIDB4MTUsIDB4QjIsCisgICAgMHgwNywgMHgzRiwgMHg5NCwgMHhDMiwgMHgxMCwgMHg4OSwgMHgwQiwgMHgyMiwgMHg1RiwgMHgyMSwKKyAgICAweDgwLCAweDdGLCAweDVELCAweDlBLCAweDVBLCAweDkwLCAweDMyLCAweDI3LCAweDM1LCAweDNFLAorICAgIDB4Q0MsIDB4RTcsIDB4QkYsIDB4RjcsIDB4OTcsIDB4MDMsIDB4RkYsIDB4MTksIDB4MzAsIDB4QjMsCisgICAgMHg0OCwgMHhBNSwgMHhCNSwgMHhEMSwgMHhENywgMHg1RSwgMHg5MiwgMHgyQSwgMHhBQywgMHg1NiwKKyAgICAweEFBLCAweEM2LCAweDRGLCAweEI4LCAweDM4LCAweEQyLCAweDk2LCAweEE0LCAweDdELCAweEI2LAorICAgIDB4NzYsIDB4RkMsIDB4NkIsIDB4RTIsIDB4OUMsIDB4NzQsIDB4MDQsIDB4RjEsIDB4NDUsIDB4OUQsCisgICAgMHg3MCwgMHg1OSwgMHg2NCwgMHg3MSwgMHg4NywgMHgyMCwgMHg4NiwgMHg1QiwgMHhDRiwgMHg2NSwKKyAgICAweEU2LCAweDJELCAweEE4LCAweDAyLCAweDFCLCAweDYwLCAweDI1LCAweEFELCAweEFFLCAweEIwLAorICAgIDB4QjksIDB4RjYsIDB4MUMsIDB4NDYsIDB4NjEsIDB4NjksIDB4MzQsIDB4NDAsIDB4N0UsIDB4MEYsCisgICAgMHg1NSwgMHg0NywgMHhBMywgMHgyMywgMHhERCwgMHg1MSwgMHhBRiwgMHgzQSwgMHhDMywgMHg1QywKKyAgICAweEY5LCAweENFLCAweEJBLCAweEM1LCAweEVBLCAweDI2LCAweDJDLCAweDUzLCAweDBELCAweDZFLAorICAgIDB4ODUsIDB4MjgsIDB4ODQsIDB4MDksIDB4RDMsIDB4REYsIDB4Q0QsIDB4RjQsIDB4NDEsIDB4ODEsCisgICAgMHg0RCwgMHg1MiwgMHg2QSwgMHhEQywgMHgzNywgMHhDOCwgMHg2QywgMHhDMSwgMHhBQiwgMHhGQSwKKyAgICAweDI0LCAweEUxLCAweDdCLCAweDA4LCAweDBDLCAweEJELCAweEIxLCAweDRBLCAweDc4LCAweDg4LAorICAgIDB4OTUsIDB4OEIsIDB4RTMsIDB4NjMsIDB4RTgsIDB4NkQsIDB4RTksIDB4Q0IsIDB4RDUsIDB4RkUsCisgICAgMHgzQiwgMHgwMCwgMHgxRCwgMHgzOSwgMHhGMiwgMHhFRiwgMHhCNywgMHgwRSwgMHg2NiwgMHg1OCwKKyAgICAweEQwLCAweEU0LCAweEE2LCAweDc3LCAweDcyLCAweEY4LCAweEVCLCAweDc1LCAweDRCLCAweDBBLAorICAgIDB4MzEsIDB4NDQsIDB4NTAsIDB4QjQsIDB4OEYsIDB4RUQsIDB4MUYsIDB4MUEsIDB4REIsIDB4OTksCisgICAgMHg4RCwgMHgzMywgMHg5RiwgMHgxMSwgMHg4MywgMHgxNAorfTsKKwordm9pZCBtYmVkdGxzX21kMl9pbml0KCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfbWQyX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfbWQyX2ZyZWUoIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19tZDJfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19tZDJfY2xvbmUoIG1iZWR0bHNfbWQyX2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWQyX2NvbnRleHQgKnNyYyApCit7CisgICAgKmRzdCA9ICpzcmM7Cit9CisKKy8qCisgKiBNRDIgY29udGV4dCBzZXR1cAorICovCit2b2lkIG1iZWR0bHNfbWQyX3N0YXJ0cyggbWJlZHRsc19tZDJfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eC0+Y2tzdW0sIDAsIDE2ICk7CisgICAgbWVtc2V0KCBjdHgtPnN0YXRlLCAwLCA0NiApOworICAgIG1lbXNldCggY3R4LT5idWZmZXIsIDAsIDE2ICk7CisgICAgY3R4LT5sZWZ0ID0gMDsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQyX1BST0NFU1NfQUxUKQordm9pZCBtYmVkdGxzX21kMl9wcm9jZXNzKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHggKQoreworICAgIGludCBpLCBqOworICAgIHVuc2lnbmVkIGNoYXIgdCA9IDA7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgeworICAgICAgICBjdHgtPnN0YXRlW2kgKyAxNl0gPSBjdHgtPmJ1ZmZlcltpXTsKKyAgICAgICAgY3R4LT5zdGF0ZVtpICsgMzJdID0KKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSggY3R4LT5idWZmZXJbaV0gXiBjdHgtPnN0YXRlW2ldKTsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTg7IGkrKyApCisgICAgeworICAgICAgICBmb3IoIGogPSAwOyBqIDwgNDg7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC0+c3RhdGVbal0gPSAodW5zaWduZWQgY2hhcikKKyAgICAgICAgICAgICAgICggY3R4LT5zdGF0ZVtqXSBeIFBJX1NVQlNUW3RdICk7CisgICAgICAgICAgICB0ICA9IGN0eC0+c3RhdGVbal07CisgICAgICAgIH0KKworICAgICAgICB0ID0gKHVuc2lnbmVkIGNoYXIpKCB0ICsgaSApOworICAgIH0KKworICAgIHQgPSBjdHgtPmNrc3VtWzE1XTsKKworICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICB7CisgICAgICAgIGN0eC0+Y2tzdW1baV0gPSAodW5zaWduZWQgY2hhcikKKyAgICAgICAgICAgKCBjdHgtPmNrc3VtW2ldIF4gUElfU1VCU1RbY3R4LT5idWZmZXJbaV0gXiB0XSApOworICAgICAgICB0ICA9IGN0eC0+Y2tzdW1baV07CisgICAgfQorfQorI2VuZGlmIC8qICFNQkVEVExTX01EMl9QUk9DRVNTX0FMVCAqLworCisvKgorICogTUQyIHByb2Nlc3MgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19tZDJfdXBkYXRlKCBtYmVkdGxzX21kMl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgc2l6ZV90IGZpbGw7CisKKyAgICB3aGlsZSggaWxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGN0eC0+bGVmdCArIGlsZW4gPiAxNiApCisgICAgICAgICAgICBmaWxsID0gMTYgLSBjdHgtPmxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpbGwgPSBpbGVuOworCisgICAgICAgIG1lbWNweSggY3R4LT5idWZmZXIgKyBjdHgtPmxlZnQsIGlucHV0LCBmaWxsICk7CisKKyAgICAgICAgY3R4LT5sZWZ0ICs9IGZpbGw7CisgICAgICAgIGlucHV0ICs9IGZpbGw7CisgICAgICAgIGlsZW4gIC09IGZpbGw7CisKKyAgICAgICAgaWYoIGN0eC0+bGVmdCA9PSAxNiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0eC0+bGVmdCA9IDA7CisgICAgICAgICAgICBtYmVkdGxzX21kMl9wcm9jZXNzKCBjdHggKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoKKyAqIE1EMiBmaW5hbCBkaWdlc3QKKyAqLwordm9pZCBtYmVkdGxzX21kMl9maW5pc2goIG1iZWR0bHNfbWQyX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICB1bnNpZ25lZCBjaGFyIHg7CisKKyAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKCAxNiAtIGN0eC0+bGVmdCApOworCisgICAgZm9yKCBpID0gY3R4LT5sZWZ0OyBpIDwgMTY7IGkrKyApCisgICAgICAgIGN0eC0+YnVmZmVyW2ldID0geDsKKworICAgIG1iZWR0bHNfbWQyX3Byb2Nlc3MoIGN0eCApOworCisgICAgbWVtY3B5KCBjdHgtPmJ1ZmZlciwgY3R4LT5ja3N1bSwgMTYgKTsKKyAgICBtYmVkdGxzX21kMl9wcm9jZXNzKCBjdHggKTsKKworICAgIG1lbWNweSggb3V0cHV0LCBjdHgtPnN0YXRlLCAxNiApOworfQorCisjZW5kaWYgLyogIU1CRURUTFNfTUQyX0FMVCAqLworCisvKgorICogb3V0cHV0ID0gTUQyKCBpbnB1dCBidWZmZXIgKQorICovCit2b2lkIG1iZWR0bHNfbWQyKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgbWJlZHRsc19tZDJfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX21kMl9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19tZDJfc3RhcnRzKCAmY3R4ICk7CisgICAgbWJlZHRsc19tZDJfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfbWQyX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisgICAgbWJlZHRsc19tZDJfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIFJGQyAxMzE5IHRlc3QgdmVjdG9ycworICovCitzdGF0aWMgY29uc3QgY2hhciBtZDJfdGVzdF9zdHJbN11bODFdID0KK3sKKyAgICB7ICIiIH0sCisgICAgeyAiYSIgfSwKKyAgICB7ICJhYmMiIH0sCisgICAgeyAibWVzc2FnZSBkaWdlc3QiIH0sCisgICAgeyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIH0sCisgICAgeyAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiIH0sCisgICAgeyAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIiIFwKKyAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1kMl90ZXN0X3N1bVs3XVsxNl0gPQoreworICAgIHsgMHg4MywgMHg1MCwgMHhFNSwgMHhBMywgMHhFMiwgMHg0QywgMHgxNSwgMHgzRCwKKyAgICAgIDB4RjIsIDB4MjcsIDB4NUMsIDB4OUYsIDB4ODAsIDB4NjksIDB4MjcsIDB4NzMgfSwKKyAgICB7IDB4MzIsIDB4RUMsIDB4MDEsIDB4RUMsIDB4NEEsIDB4NkQsIDB4QUMsIDB4NzIsCisgICAgICAweEMwLCAweEFCLCAweDk2LCAweEZCLCAweDM0LCAweEMwLCAweEI1LCAweEQxIH0sCisgICAgeyAweERBLCAweDg1LCAweDNCLCAweDBELCAweDNGLCAweDg4LCAweEQ5LCAweDlCLAorICAgICAgMHgzMCwgMHgyOCwgMHgzQSwgMHg2OSwgMHhFNiwgMHhERSwgMHhENiwgMHhCQiB9LAorICAgIHsgMHhBQiwgMHg0RiwgMHg0OSwgMHg2QiwgMHhGQiwgMHgyQSwgMHg1MywgMHgwQiwKKyAgICAgIDB4MjEsIDB4OUYsIDB4RjMsIDB4MzAsIDB4MzEsIDB4RkUsIDB4MDYsIDB4QjAgfSwKKyAgICB7IDB4NEUsIDB4OEQsIDB4REYsIDB4RjMsIDB4NjUsIDB4MDIsIDB4OTIsIDB4QUIsCisgICAgICAweDVBLCAweDQxLCAweDA4LCAweEMzLCAweEFBLCAweDQ3LCAweDk0LCAweDBCIH0sCisgICAgeyAweERBLCAweDMzLCAweERFLCAweEYyLCAweEE0LCAweDJELCAweEYxLCAweDM5LAorICAgICAgMHg3NSwgMHgzNSwgMHgyOCwgMHg0NiwgMHhDMywgMHgwMywgMHgzOCwgMHhDRCB9LAorICAgIHsgMHhENSwgMHg5NywgMHg2RiwgMHg3OSwgMHhEOCwgMHgzRCwgMHgzQSwgMHgwRCwKKyAgICAgIDB4QzksIDB4ODAsIDB4NkMsIDB4M0MsIDB4NjYsIDB4RjMsIDB4RUYsIDB4RDggfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19tZDJfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciBtZDJzdW1bMTZdOworCisgICAgZm9yKCBpID0gMDsgaSA8IDc7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNRDIgdGVzdCAjJWQ6ICIsIGkgKyAxICk7CisKKyAgICAgICAgbWJlZHRsc19tZDIoICh1bnNpZ25lZCBjaGFyICopIG1kMl90ZXN0X3N0cltpXSwKKyAgICAgICAgICAgICBzdHJsZW4oIG1kMl90ZXN0X3N0cltpXSApLCBtZDJzdW0gKTsKKworICAgICAgICBpZiggbWVtY21wKCBtZDJzdW0sIG1kMl90ZXN0X3N1bVtpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX01EMl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTc3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDQuYwpAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqICBSRkMgMTE4Ni8xMzIwIGNvbXBsaWFudCBNRDQgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIE1ENCBhbGdvcml0aG0gd2FzIGRlc2lnbmVkIGJ5IFJvbiBSaXZlc3QgaW4gMTk5MC4KKyAqCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTE4Ni50eHQKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxMzIwLnR4dAorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL21kNC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ0X0FMVCkKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGxpdHRsZSBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9MRQorI2RlZmluZSBHRVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdICAgICAgICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdIDw8IDI0ICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9MRQorI2RlZmluZSBQVVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgICAgICAgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+ICA4ICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAxNiApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMjQgKSAmIDB4RkYgKTsgICAgXAorfQorI2VuZGlmCisKK3ZvaWQgbWJlZHRsc19tZDRfaW5pdCggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX21kNF9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX21kNF9mcmVlKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfbWQ0X2Nsb25lKCBtYmVkdGxzX21kNF9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kNF9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogTUQ0IGNvbnRleHQgc2V0dXAKKyAqLwordm9pZCBtYmVkdGxzX21kNF9zdGFydHMoIG1iZWR0bHNfbWQ0X2NvbnRleHQgKmN0eCApCit7CisgICAgY3R4LT50b3RhbFswXSA9IDA7CisgICAgY3R4LT50b3RhbFsxXSA9IDA7CisKKyAgICBjdHgtPnN0YXRlWzBdID0gMHg2NzQ1MjMwMTsKKyAgICBjdHgtPnN0YXRlWzFdID0gMHhFRkNEQUI4OTsKKyAgICBjdHgtPnN0YXRlWzJdID0gMHg5OEJBRENGRTsKKyAgICBjdHgtPnN0YXRlWzNdID0gMHgxMDMyNTQ3NjsKK30KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUKQordm9pZCBtYmVkdGxzX21kNF9wcm9jZXNzKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKQoreworICAgIHVpbnQzMl90IFhbMTZdLCBBLCBCLCBDLCBEOworCisgICAgR0VUX1VJTlQzMl9MRSggWFsgMF0sIGRhdGEsICAwICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgMV0sIGRhdGEsICA0ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgMl0sIGRhdGEsICA4ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgM10sIGRhdGEsIDEyICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgNF0sIGRhdGEsIDE2ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgNV0sIGRhdGEsIDIwICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgNl0sIGRhdGEsIDI0ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgN10sIGRhdGEsIDI4ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgOF0sIGRhdGEsIDMyICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsgOV0sIGRhdGEsIDM2ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxMF0sIGRhdGEsIDQwICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxMV0sIGRhdGEsIDQ0ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxMl0sIGRhdGEsIDQ4ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxM10sIGRhdGEsIDUyICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxNF0sIGRhdGEsIDU2ICk7CisgICAgR0VUX1VJTlQzMl9MRSggWFsxNV0sIGRhdGEsIDYwICk7CisKKyNkZWZpbmUgUyh4LG4pICgoeCA8PCBuKSB8ICgoeCAmIDB4RkZGRkZGRkYpID4+ICgzMiAtIG4pKSkKKworICAgIEEgPSBjdHgtPnN0YXRlWzBdOworICAgIEIgPSBjdHgtPnN0YXRlWzFdOworICAgIEMgPSBjdHgtPnN0YXRlWzJdOworICAgIEQgPSBjdHgtPnN0YXRlWzNdOworCisjZGVmaW5lIEYoeCwgeSwgeikgKCh4ICYgeSkgfCAoKH54KSAmIHopKQorI2RlZmluZSBQKGEsYixjLGQseCxzKSB7IGEgKz0gRihiLGMsZCkgKyB4OyBhID0gUyhhLHMpOyB9CisKKyAgICBQKCBBLCBCLCBDLCBELCBYWyAwXSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyAxXSwgIDcgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWyAyXSwgMTEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWyAzXSwgMTkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBYWyA0XSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyA1XSwgIDcgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWyA2XSwgMTEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWyA3XSwgMTkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBYWyA4XSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWyA5XSwgIDcgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWzEwXSwgMTEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWzExXSwgMTkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBYWzEyXSwgIDMgKTsKKyAgICBQKCBELCBBLCBCLCBDLCBYWzEzXSwgIDcgKTsKKyAgICBQKCBDLCBELCBBLCBCLCBYWzE0XSwgMTEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCBYWzE1XSwgMTkgKTsKKworI3VuZGVmIFAKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKCh4ICYgeSkgfCAoeCAmIHopIHwgKHkgJiB6KSkKKyNkZWZpbmUgUChhLGIsYyxkLHgscykgeyBhICs9IEYoYixjLGQpICsgeCArIDB4NUE4Mjc5OTk7IGEgPSBTKGEscyk7IH0KKworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDBdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbIDRdLCAgNSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbIDhdLCAgOSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTJdLCAxMyApOworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDFdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbIDVdLCAgNSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbIDldLCAgOSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTNdLCAxMyApOworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDJdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbIDZdLCAgNSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbMTBdLCAgOSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTRdLCAxMyApOworICAgIFAoIEEsIEIsIEMsIEQsIFhbIDNdLCAgMyApOworICAgIFAoIEQsIEEsIEIsIEMsIFhbIDddLCAgNSApOworICAgIFAoIEMsIEQsIEEsIEIsIFhbMTFdLCAgOSApOworICAgIFAoIEIsIEMsIEQsIEEsIFhbMTVdLCAxMyApOworCisjdW5kZWYgUAorI3VuZGVmIEYKKworI2RlZmluZSBGKHgseSx6KSAoeCBeIHkgXiB6KQorI2RlZmluZSBQKGEsYixjLGQseCxzKSB7IGEgKz0gRihiLGMsZCkgKyB4ICsgMHg2RUQ5RUJBMTsgYSA9IFMoYSxzKTsgfQorCisgICAgUCggQSwgQiwgQywgRCwgWFsgMF0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsgOF0sICA5ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsgNF0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsxMl0sIDE1ICk7CisgICAgUCggQSwgQiwgQywgRCwgWFsgMl0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsxMF0sICA5ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsgNl0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsxNF0sIDE1ICk7CisgICAgUCggQSwgQiwgQywgRCwgWFsgMV0sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsgOV0sICA5ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsgNV0sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsxM10sIDE1ICk7CisgICAgUCggQSwgQiwgQywgRCwgWFsgM10sICAzICk7CisgICAgUCggRCwgQSwgQiwgQywgWFsxMV0sICA5ICk7CisgICAgUCggQywgRCwgQSwgQiwgWFsgN10sIDExICk7CisgICAgUCggQiwgQywgRCwgQSwgWFsxNV0sIDE1ICk7CisKKyN1bmRlZiBGCisjdW5kZWYgUAorCisgICAgY3R4LT5zdGF0ZVswXSArPSBBOworICAgIGN0eC0+c3RhdGVbMV0gKz0gQjsKKyAgICBjdHgtPnN0YXRlWzJdICs9IEM7CisgICAgY3R4LT5zdGF0ZVszXSArPSBEOworfQorI2VuZGlmIC8qICFNQkVEVExTX01ENF9QUk9DRVNTX0FMVCAqLworCisvKgorICogTUQ0IHByb2Nlc3MgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19tZDRfdXBkYXRlKCBtYmVkdGxzX21kNF9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgc2l6ZV90IGZpbGw7CisgICAgdWludDMyX3QgbGVmdDsKKworICAgIGlmKCBpbGVuID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBsZWZ0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgZmlsbCA9IDY0IC0gbGVmdDsKKworICAgIGN0eC0+dG90YWxbMF0gKz0gKHVpbnQzMl90KSBpbGVuOworICAgIGN0eC0+dG90YWxbMF0gJj0gMHhGRkZGRkZGRjsKKworICAgIGlmKCBjdHgtPnRvdGFsWzBdIDwgKHVpbnQzMl90KSBpbGVuICkKKyAgICAgICAgY3R4LT50b3RhbFsxXSsrOworCisgICAgaWYoIGxlZnQgJiYgaWxlbiA+PSBmaWxsICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksCisgICAgICAgICAgICAgICAgKHZvaWQgKikgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgbWJlZHRsc19tZDRfcHJvY2VzcyggY3R4LCBjdHgtPmJ1ZmZlciApOworICAgICAgICBpbnB1dCArPSBmaWxsOworICAgICAgICBpbGVuICAtPSBmaWxsOworICAgICAgICBsZWZ0ID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSggaWxlbiA+PSA2NCApCisgICAgeworICAgICAgICBtYmVkdGxzX21kNF9wcm9jZXNzKCBjdHgsIGlucHV0ICk7CisgICAgICAgIGlucHV0ICs9IDY0OworICAgICAgICBpbGVuICAtPSA2NDsKKyAgICB9CisKKyAgICBpZiggaWxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwKKyAgICAgICAgICAgICAgICAodm9pZCAqKSBpbnB1dCwgaWxlbiApOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWQ0X3BhZGRpbmdbNjRdID0KK3sKKyAweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCisvKgorICogTUQ0IGZpbmFsIGRpZ2VzdAorICovCit2b2lkIG1iZWR0bHNfbWQ0X2ZpbmlzaCggbWJlZHRsc19tZDRfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFsxNl0gKQoreworICAgIHVpbnQzMl90IGxhc3QsIHBhZG47CisgICAgdWludDMyX3QgaGlnaCwgbG93OworICAgIHVuc2lnbmVkIGNoYXIgbXNnbGVuWzhdOworCisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKworICAgIFBVVF9VSU5UMzJfTEUoIGxvdywgIG1zZ2xlbiwgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIGhpZ2gsIG1zZ2xlbiwgNCApOworCisgICAgbGFzdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIHBhZG4gPSAoIGxhc3QgPCA1NiApID8gKCA1NiAtIGxhc3QgKSA6ICggMTIwIC0gbGFzdCApOworCisgICAgbWJlZHRsc19tZDRfdXBkYXRlKCBjdHgsICh1bnNpZ25lZCBjaGFyICopIG1kNF9wYWRkaW5nLCBwYWRuICk7CisgICAgbWJlZHRsc19tZDRfdXBkYXRlKCBjdHgsIG1zZ2xlbiwgOCApOworCisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbMV0sIG91dHB1dCwgIDQgKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzJdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVszXSwgb3V0cHV0LCAxMiApOworfQorCisjZW5kaWYgLyogIU1CRURUTFNfTUQ0X0FMVCAqLworCisvKgorICogb3V0cHV0ID0gTUQ0KCBpbnB1dCBidWZmZXIgKQorICovCit2b2lkIG1iZWR0bHNfbWQ0KCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgbWJlZHRsc19tZDRfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX21kNF9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19tZDRfc3RhcnRzKCAmY3R4ICk7CisgICAgbWJlZHRsc19tZDRfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfbWQ0X2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisgICAgbWJlZHRsc19tZDRfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIFJGQyAxMzIwIHRlc3QgdmVjdG9ycworICovCitzdGF0aWMgY29uc3QgY2hhciBtZDRfdGVzdF9zdHJbN11bODFdID0KK3sKKyAgICB7ICIiIH0sCisgICAgeyAiYSIgfSwKKyAgICB7ICJhYmMiIH0sCisgICAgeyAibWVzc2FnZSBkaWdlc3QiIH0sCisgICAgeyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIH0sCisgICAgeyAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiIH0sCisgICAgeyAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIiIFwKKyAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1kNF90ZXN0X3N1bVs3XVsxNl0gPQoreworICAgIHsgMHgzMSwgMHhENiwgMHhDRiwgMHhFMCwgMHhEMSwgMHg2QSwgMHhFOSwgMHgzMSwKKyAgICAgIDB4QjcsIDB4M0MsIDB4NTksIDB4RDcsIDB4RTAsIDB4QzAsIDB4ODksIDB4QzAgfSwKKyAgICB7IDB4QkQsIDB4RTUsIDB4MkMsIDB4QjMsIDB4MUQsIDB4RTMsIDB4M0UsIDB4NDYsCisgICAgICAweDI0LCAweDVFLCAweDA1LCAweEZCLCAweERCLCAweEQ2LCAweEZCLCAweDI0IH0sCisgICAgeyAweEE0LCAweDQ4LCAweDAxLCAweDdBLCAweEFGLCAweDIxLCAweEQ4LCAweDUyLAorICAgICAgMHg1RiwgMHhDMSwgMHgwQSwgMHhFOCwgMHg3QSwgMHhBNiwgMHg3MiwgMHg5RCB9LAorICAgIHsgMHhEOSwgMHgxMywgMHgwQSwgMHg4MSwgMHg2NCwgMHg1NCwgMHg5RiwgMHhFOCwKKyAgICAgIDB4MTgsIDB4ODcsIDB4NDgsIDB4MDYsIDB4RTEsIDB4QzcsIDB4MDEsIDB4NEIgfSwKKyAgICB7IDB4RDcsIDB4OUUsIDB4MUMsIDB4MzAsIDB4OEEsIDB4QTUsIDB4QkIsIDB4Q0QsCisgICAgICAweEVFLCAweEE4LCAweEVELCAweDYzLCAweERGLCAweDQxLCAweDJELCAweEE5IH0sCisgICAgeyAweDA0LCAweDNGLCAweDg1LCAweDgyLCAweEYyLCAweDQxLCAweERCLCAweDM1LAorICAgICAgMHgxQywgMHhFNiwgMHgyNywgMHhFMSwgMHg1MywgMHhFNywgMHhGMCwgMHhFNCB9LAorICAgIHsgMHhFMywgMHgzQiwgMHg0RCwgMHhEQywgMHg5QywgMHgzOCwgMHhGMiwgMHgxOSwKKyAgICAgIDB4OUMsIDB4M0UsIDB4N0IsIDB4MTYsIDB4NEYsIDB4Q0MsIDB4MDUsIDB4MzYgfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19tZDRfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciBtZDRzdW1bMTZdOworCisgICAgZm9yKCBpID0gMDsgaSA8IDc7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBNRDQgdGVzdCAjJWQ6ICIsIGkgKyAxICk7CisKKyAgICAgICAgbWJlZHRsc19tZDQoICh1bnNpZ25lZCBjaGFyICopIG1kNF90ZXN0X3N0cltpXSwKKyAgICAgICAgICAgICBzdHJsZW4oIG1kNF90ZXN0X3N0cltpXSApLCBtZDRzdW0gKTsKKworICAgICAgICBpZiggbWVtY21wKCBtZDRzdW0sIG1kNF90ZXN0X3N1bVtpXSwgMTYgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX01ENF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTcyZGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZDUuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqICBSRkMgMTMyMSBjb21wbGlhbnQgTUQ1IGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBNRDUgYWxnb3JpdGhtIHdhcyBkZXNpZ25lZCBieSBSb24gUml2ZXN0IGluIDE5OTEuCisgKgorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzEzMjEudHh0CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvbWQ1LmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRDVfQUxUKQorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAobGl0dGxlIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0xFCisjZGVmaW5lIEdFVF9VSU5UMzJfTEUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gICAgICAgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAgOCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8IDE2ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gPDwgMjQgKTsgICAgICAgICAgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBQVVRfVUlOVDMyX0xFCisjZGVmaW5lIFBVVF9VSU5UMzJfTEUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSAgICAgICApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gIDggKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+IDE2ICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAyNCApICYgMHhGRiApOyAgICBcCit9CisjZW5kaWYKKwordm9pZCBtYmVkdGxzX21kNV9pbml0KCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfbWQ1X2ZyZWUoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19tZDVfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19tZDVfY2xvbmUoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWQ1X2NvbnRleHQgKnNyYyApCit7CisgICAgKmRzdCA9ICpzcmM7Cit9CisKKy8qCisgKiBNRDUgY29udGV4dCBzZXR1cAorICovCit2b2lkIG1iZWR0bHNfbWQ1X3N0YXJ0cyggbWJlZHRsc19tZDVfY29udGV4dCAqY3R4ICkKK3sKKyAgICBjdHgtPnRvdGFsWzBdID0gMDsKKyAgICBjdHgtPnRvdGFsWzFdID0gMDsKKworICAgIGN0eC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICAgIGN0eC0+c3RhdGVbMV0gPSAweEVGQ0RBQjg5OworICAgIGN0eC0+c3RhdGVbMl0gPSAweDk4QkFEQ0ZFOworICAgIGN0eC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQpCit2b2lkIG1iZWR0bHNfbWQ1X3Byb2Nlc3MoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhWzY0XSApCit7CisgICAgdWludDMyX3QgWFsxNl0sIEEsIEIsIEMsIEQ7CisKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAwXSwgZGF0YSwgIDAgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAxXSwgZGF0YSwgIDQgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAyXSwgZGF0YSwgIDggKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyAzXSwgZGF0YSwgMTIgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA0XSwgZGF0YSwgMTYgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA1XSwgZGF0YSwgMjAgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA2XSwgZGF0YSwgMjQgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA3XSwgZGF0YSwgMjggKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA4XSwgZGF0YSwgMzIgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWyA5XSwgZGF0YSwgMzYgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzEwXSwgZGF0YSwgNDAgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzExXSwgZGF0YSwgNDQgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzEyXSwgZGF0YSwgNDggKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzEzXSwgZGF0YSwgNTIgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzE0XSwgZGF0YSwgNTYgKTsKKyAgICBHRVRfVUlOVDMyX0xFKCBYWzE1XSwgZGF0YSwgNjAgKTsKKworI2RlZmluZSBTKHgsbikgKCh4IDw8IG4pIHwgKCh4ICYgMHhGRkZGRkZGRikgPj4gKDMyIC0gbikpKQorCisjZGVmaW5lIFAoYSxiLGMsZCxrLHMsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGEgKz0gRihiLGMsZCkgKyBYW2tdICsgdDsgYSA9IFMoYSxzKSArIGI7ICAgICAgICAgICBcCit9CisKKyAgICBBID0gY3R4LT5zdGF0ZVswXTsKKyAgICBCID0gY3R4LT5zdGF0ZVsxXTsKKyAgICBDID0gY3R4LT5zdGF0ZVsyXTsKKyAgICBEID0gY3R4LT5zdGF0ZVszXTsKKworI2RlZmluZSBGKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpCisKKyAgICBQKCBBLCBCLCBDLCBELCAgMCwgIDcsIDB4RDc2QUE0NzggKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgMSwgMTIsIDB4RThDN0I3NTYgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgMiwgMTcsIDB4MjQyMDcwREIgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgMywgMjIsIDB4QzFCRENFRUUgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgNCwgIDcsIDB4RjU3QzBGQUYgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgNSwgMTIsIDB4NDc4N0M2MkEgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgNiwgMTcsIDB4QTgzMDQ2MTMgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgNywgMjIsIDB4RkQ0Njk1MDEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgOCwgIDcsIDB4Njk4MDk4RDggKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgOSwgMTIsIDB4OEI0NEY3QUYgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxMCwgMTcsIDB4RkZGRjVCQjEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxMSwgMjIsIDB4ODk1Q0Q3QkUgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAxMiwgIDcsIDB4NkI5MDExMjIgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxMywgMTIsIDB4RkQ5ODcxOTMgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxNCwgMTcsIDB4QTY3OTQzOEUgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxNSwgMjIsIDB4NDlCNDA4MjEgKTsKKworI3VuZGVmIEYKKworI2RlZmluZSBGKHgseSx6KSAoeSBeICh6ICYgKHggXiB5KSkpCisKKyAgICBQKCBBLCBCLCBDLCBELCAgMSwgIDUsIDB4RjYxRTI1NjIgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgNiwgIDksIDB4QzA0MEIzNDAgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxMSwgMTQsIDB4MjY1RTVBNTEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgMCwgMjAsIDB4RTlCNkM3QUEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgNSwgIDUsIDB4RDYyRjEwNUQgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxMCwgIDksIDB4MDI0NDE0NTMgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxNSwgMTQsIDB4RDhBMUU2ODEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgNCwgMjAsIDB4RTdEM0ZCQzggKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgOSwgIDUsIDB4MjFFMUNERTYgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxNCwgIDksIDB4QzMzNzA3RDYgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgMywgMTQsIDB4RjRENTBEODcgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgOCwgMjAsIDB4NDU1QTE0RUQgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAxMywgIDUsIDB4QTlFM0U5MDUgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgMiwgIDksIDB4RkNFRkEzRjggKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgNywgMTQsIDB4Njc2RjAyRDkgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxMiwgMjAsIDB4OEQyQTRDOEEgKTsKKworI3VuZGVmIEYKKworI2RlZmluZSBGKHgseSx6KSAoeCBeIHkgXiB6KQorCisgICAgUCggQSwgQiwgQywgRCwgIDUsICA0LCAweEZGRkEzOTQyICk7CisgICAgUCggRCwgQSwgQiwgQywgIDgsIDExLCAweDg3NzFGNjgxICk7CisgICAgUCggQywgRCwgQSwgQiwgMTEsIDE2LCAweDZEOUQ2MTIyICk7CisgICAgUCggQiwgQywgRCwgQSwgMTQsIDIzLCAweEZERTUzODBDICk7CisgICAgUCggQSwgQiwgQywgRCwgIDEsICA0LCAweEE0QkVFQTQ0ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDQsIDExLCAweDRCREVDRkE5ICk7CisgICAgUCggQywgRCwgQSwgQiwgIDcsIDE2LCAweEY2QkI0QjYwICk7CisgICAgUCggQiwgQywgRCwgQSwgMTAsIDIzLCAweEJFQkZCQzcwICk7CisgICAgUCggQSwgQiwgQywgRCwgMTMsICA0LCAweDI4OUI3RUM2ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDAsIDExLCAweEVBQTEyN0ZBICk7CisgICAgUCggQywgRCwgQSwgQiwgIDMsIDE2LCAweEQ0RUYzMDg1ICk7CisgICAgUCggQiwgQywgRCwgQSwgIDYsIDIzLCAweDA0ODgxRDA1ICk7CisgICAgUCggQSwgQiwgQywgRCwgIDksICA0LCAweEQ5RDREMDM5ICk7CisgICAgUCggRCwgQSwgQiwgQywgMTIsIDExLCAweEU2REI5OUU1ICk7CisgICAgUCggQywgRCwgQSwgQiwgMTUsIDE2LCAweDFGQTI3Q0Y4ICk7CisgICAgUCggQiwgQywgRCwgQSwgIDIsIDIzLCAweEM0QUM1NjY1ICk7CisKKyN1bmRlZiBGCisKKyNkZWZpbmUgRih4LHkseikgKHkgXiAoeCB8IH56KSkKKworICAgIFAoIEEsIEIsIEMsIEQsICAwLCAgNiwgMHhGNDI5MjI0NCApOworICAgIFAoIEQsIEEsIEIsIEMsICA3LCAxMCwgMHg0MzJBRkY5NyApOworICAgIFAoIEMsIEQsIEEsIEIsIDE0LCAxNSwgMHhBQjk0MjNBNyApOworICAgIFAoIEIsIEMsIEQsIEEsICA1LCAyMSwgMHhGQzkzQTAzOSApOworICAgIFAoIEEsIEIsIEMsIEQsIDEyLCAgNiwgMHg2NTVCNTlDMyApOworICAgIFAoIEQsIEEsIEIsIEMsICAzLCAxMCwgMHg4RjBDQ0M5MiApOworICAgIFAoIEMsIEQsIEEsIEIsIDEwLCAxNSwgMHhGRkVGRjQ3RCApOworICAgIFAoIEIsIEMsIEQsIEEsICAxLCAyMSwgMHg4NTg0NUREMSApOworICAgIFAoIEEsIEIsIEMsIEQsICA4LCAgNiwgMHg2RkE4N0U0RiApOworICAgIFAoIEQsIEEsIEIsIEMsIDE1LCAxMCwgMHhGRTJDRTZFMCApOworICAgIFAoIEMsIEQsIEEsIEIsICA2LCAxNSwgMHhBMzAxNDMxNCApOworICAgIFAoIEIsIEMsIEQsIEEsIDEzLCAyMSwgMHg0RTA4MTFBMSApOworICAgIFAoIEEsIEIsIEMsIEQsICA0LCAgNiwgMHhGNzUzN0U4MiApOworICAgIFAoIEQsIEEsIEIsIEMsIDExLCAxMCwgMHhCRDNBRjIzNSApOworICAgIFAoIEMsIEQsIEEsIEIsICAyLCAxNSwgMHgyQUQ3RDJCQiApOworICAgIFAoIEIsIEMsIEQsIEEsICA5LCAyMSwgMHhFQjg2RDM5MSApOworCisjdW5kZWYgRgorCisgICAgY3R4LT5zdGF0ZVswXSArPSBBOworICAgIGN0eC0+c3RhdGVbMV0gKz0gQjsKKyAgICBjdHgtPnN0YXRlWzJdICs9IEM7CisgICAgY3R4LT5zdGF0ZVszXSArPSBEOworfQorI2VuZGlmIC8qICFNQkVEVExTX01ENV9QUk9DRVNTX0FMVCAqLworCisvKgorICogTUQ1IHByb2Nlc3MgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19tZDVfdXBkYXRlKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiApCit7CisgICAgc2l6ZV90IGZpbGw7CisgICAgdWludDMyX3QgbGVmdDsKKworICAgIGlmKCBpbGVuID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBsZWZ0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgZmlsbCA9IDY0IC0gbGVmdDsKKworICAgIGN0eC0+dG90YWxbMF0gKz0gKHVpbnQzMl90KSBpbGVuOworICAgIGN0eC0+dG90YWxbMF0gJj0gMHhGRkZGRkZGRjsKKworICAgIGlmKCBjdHgtPnRvdGFsWzBdIDwgKHVpbnQzMl90KSBpbGVuICkKKyAgICAgICAgY3R4LT50b3RhbFsxXSsrOworCisgICAgaWYoIGxlZnQgJiYgaWxlbiA+PSBmaWxsICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBmaWxsICk7CisgICAgICAgIG1iZWR0bHNfbWQ1X3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgaW5wdXQgKz0gZmlsbDsKKyAgICAgICAgaWxlbiAgLT0gZmlsbDsKKyAgICAgICAgbGVmdCA9IDA7CisgICAgfQorCisgICAgd2hpbGUoIGlsZW4gPj0gNjQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZDVfcHJvY2VzcyggY3R4LCBpbnB1dCApOworICAgICAgICBpbnB1dCArPSA2NDsKKyAgICAgICAgaWxlbiAgLT0gNjQ7CisgICAgfQorCisgICAgaWYoIGlsZW4gPiAwICkKKyAgICB7CisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBpbGVuICk7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtZDVfcGFkZGluZ1s2NF0gPQoreworIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qCisgKiBNRDUgZmluYWwgZGlnZXN0CisgKi8KK3ZvaWQgbWJlZHRsc19tZDVfZmluaXNoKCBtYmVkdGxzX21kNV9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzE2XSApCit7CisgICAgdWludDMyX3QgbGFzdCwgcGFkbjsKKyAgICB1aW50MzJfdCBoaWdoLCBsb3c7CisgICAgdW5zaWduZWQgY2hhciBtc2dsZW5bOF07CisKKyAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDI5ICkKKyAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7CisgICAgbG93ICA9ICggY3R4LT50b3RhbFswXSA8PCAgMyApOworCisgICAgUFVUX1VJTlQzMl9MRSggbG93LCAgbXNnbGVuLCAwICk7CisgICAgUFVUX1VJTlQzMl9MRSggaGlnaCwgbXNnbGVuLCA0ICk7CisKKyAgICBsYXN0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgcGFkbiA9ICggbGFzdCA8IDU2ICkgPyAoIDU2IC0gbGFzdCApIDogKCAxMjAgLSBsYXN0ICk7CisKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoIGN0eCwgbWQ1X3BhZGRpbmcsIHBhZG4gKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoIGN0eCwgbXNnbGVuLCA4ICk7CisKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzBdLCBvdXRwdXQsICAwICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVsxXSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbMl0sIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzNdLCBvdXRwdXQsIDEyICk7Cit9CisKKyNlbmRpZiAvKiAhTUJFRFRMU19NRDVfQUxUICovCisKKy8qCisgKiBvdXRwdXQgPSBNRDUoIGlucHV0IGJ1ZmZlciApCisgKi8KK3ZvaWQgbWJlZHRsc19tZDUoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICBtYmVkdGxzX21kNV9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfbWQ1X2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX21kNV9zdGFydHMoICZjdHggKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZjdHgsIGlucHV0LCBpbGVuICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmY3R4LCBvdXRwdXQgKTsKKyAgICBtYmVkdGxzX21kNV9mcmVlKCAmY3R4ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoKKyAqIFJGQyAxMzIxIHRlc3QgdmVjdG9ycworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtZDVfdGVzdF9idWZbN11bODFdID0KK3sKKyAgICB7ICIiIH0sCisgICAgeyAiYSIgfSwKKyAgICB7ICJhYmMiIH0sCisgICAgeyAibWVzc2FnZSBkaWdlc3QiIH0sCisgICAgeyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIH0sCisgICAgeyAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiIH0sCisgICAgeyAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIiIFwKKyAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0KK307CisKK3N0YXRpYyBjb25zdCBpbnQgbWQ1X3Rlc3RfYnVmbGVuWzddID0KK3sKKyAgICAwLCAxLCAzLCAxNCwgMjYsIDYyLCA4MAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWQ1X3Rlc3Rfc3VtWzddWzE2XSA9Cit7CisgICAgeyAweEQ0LCAweDFELCAweDhDLCAweEQ5LCAweDhGLCAweDAwLCAweEIyLCAweDA0LAorICAgICAgMHhFOSwgMHg4MCwgMHgwOSwgMHg5OCwgMHhFQywgMHhGOCwgMHg0MiwgMHg3RSB9LAorICAgIHsgMHgwQywgMHhDMSwgMHg3NSwgMHhCOSwgMHhDMCwgMHhGMSwgMHhCNiwgMHhBOCwKKyAgICAgIDB4MzEsIDB4QzMsIDB4OTksIDB4RTIsIDB4NjksIDB4NzcsIDB4MjYsIDB4NjEgfSwKKyAgICB7IDB4OTAsIDB4MDEsIDB4NTAsIDB4OTgsIDB4M0MsIDB4RDIsIDB4NEYsIDB4QjAsCisgICAgICAweEQ2LCAweDk2LCAweDNGLCAweDdELCAweDI4LCAweEUxLCAweDdGLCAweDcyIH0sCisgICAgeyAweEY5LCAweDZCLCAweDY5LCAweDdELCAweDdDLCAweEI3LCAweDkzLCAweDhELAorICAgICAgMHg1MiwgMHg1QSwgMHgyRiwgMHgzMSwgMHhBQSwgMHhGMSwgMHg2MSwgMHhEMCB9LAorICAgIHsgMHhDMywgMHhGQywgMHhEMywgMHhENywgMHg2MSwgMHg5MiwgMHhFNCwgMHgwMCwKKyAgICAgIDB4N0QsIDB4RkIsIDB4NDksIDB4NkMsIDB4Q0EsIDB4NjcsIDB4RTEsIDB4M0IgfSwKKyAgICB7IDB4RDEsIDB4NzQsIDB4QUIsIDB4OTgsIDB4RDIsIDB4NzcsIDB4RDksIDB4RjUsCisgICAgICAweEE1LCAweDYxLCAweDFDLCAweDJDLCAweDlGLCAweDQxLCAweDlELCAweDlGIH0sCisgICAgeyAweDU3LCAweEVELCAweEY0LCAweEEyLCAweDJCLCAweEUzLCAweEM5LCAweDU1LAorICAgICAgMHhBQywgMHg0OSwgMHhEQSwgMHgyRSwgMHgyMSwgMHgwNywgMHhCNiwgMHg3QSB9Cit9OworCisvKgorICogQ2hlY2t1cCByb3V0aW5lCisgKi8KK2ludCBtYmVkdGxzX21kNV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIG1kNXN1bVsxNl07CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgNzsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1ENSB0ZXN0ICMlZDogIiwgaSArIDEgKTsKKworICAgICAgICBtYmVkdGxzX21kNSggbWQ1X3Rlc3RfYnVmW2ldLCBtZDVfdGVzdF9idWZsZW5baV0sIG1kNXN1bSApOworCisgICAgICAgIGlmKCBtZW1jbXAoIG1kNXN1bSwgbWQ1X3Rlc3Rfc3VtW2ldLCAxNiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kX3dyYXAuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21kX3dyYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ZjYWUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvbWRfd3JhcC5jCkBAIC0wLDAgKzEsNTc1IEBACisvKioKKyAqIFxmaWxlIG1kX3dyYXAuYworICoKKyAqIFxicmllZiBHZW5lcmljIG1lc3NhZ2UgZGlnZXN0IHdyYXBwZXIgZm9yIG1iZWQgVExTCisgKgorICogXGF1dGhvciBBZHJpYWFuIGRlIEpvbmcgPGRlam9uZ0Bmb3gtaXQuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL21kX2ludGVybmFsLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisjaW5jbHVkZSAibWJlZHRscy9tZDIuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWQ0LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisjaW5jbHVkZSAibWJlZHRscy9yaXBlbWQxNjAuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMjU2LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTUxMi5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorCitzdGF0aWMgdm9pZCBtZDJfc3RhcnRzX3dyYXAoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19tZDJfc3RhcnRzKCAobWJlZHRsc19tZDJfY29udGV4dCAqKSBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQyX3VwZGF0ZV93cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApCit7CisgICAgbWJlZHRsc19tZDJfdXBkYXRlKCAobWJlZHRsc19tZDJfY29udGV4dCAqKSBjdHgsIGlucHV0LCBpbGVuICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kMl9maW5pc2hfd3JhcCggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfbWQyX2ZpbmlzaCggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgY3R4LCBvdXRwdXQgKTsKK30KKworc3RhdGljIHZvaWQgKm1kMl9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfbWQyX2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19tZDJfaW5pdCggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBtZDJfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19tZDJfZnJlZSggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQyX2Nsb25lX3dyYXAoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgICBtYmVkdGxzX21kMl9jbG9uZSggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgZHN0LAorICAgICAgICAgICAgICAgICAoY29uc3QgbWJlZHRsc19tZDJfY29udGV4dCAqKSBzcmMgKTsKK30KKworc3RhdGljIHZvaWQgbWQyX3Byb2Nlc3Nfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICAoKHZvaWQpIGRhdGEpOworCisgICAgbWJlZHRsc19tZDJfcHJvY2VzcyggKG1iZWR0bHNfbWQyX2NvbnRleHQgKikgY3R4ICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfbWQyX2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9NRDIsCisgICAgIk1EMiIsCisgICAgMTYsCisgICAgMTYsCisgICAgbWQyX3N0YXJ0c193cmFwLAorICAgIG1kMl91cGRhdGVfd3JhcCwKKyAgICBtZDJfZmluaXNoX3dyYXAsCisgICAgbWJlZHRsc19tZDIsCisgICAgbWQyX2N0eF9hbGxvYywKKyAgICBtZDJfY3R4X2ZyZWUsCisgICAgbWQyX2Nsb25lX3dyYXAsCisgICAgbWQyX3Byb2Nlc3Nfd3JhcCwKK307CisKKyNlbmRpZiAvKiBNQkVEVExTX01EMl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisKK3N0YXRpYyB2b2lkIG1kNF9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX21kNF9zdGFydHMoIChtYmVkdGxzX21kNF9jb250ZXh0ICopIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBtZDRfdXBkYXRlX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBtYmVkdGxzX21kNF91cGRhdGUoIChtYmVkdGxzX21kNF9jb250ZXh0ICopIGN0eCwgaW5wdXQsIGlsZW4gKTsKK30KKworc3RhdGljIHZvaWQgbWQ0X2ZpbmlzaF93cmFwKCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19tZDRfZmluaXNoKCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBjdHgsIG91dHB1dCApOworfQorCitzdGF0aWMgdm9pZCAqbWQ0X2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19tZDRfY29udGV4dCApICk7CisKKyAgICBpZiggY3R4ICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX21kNF9pbml0KCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kNF9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX21kNF9mcmVlKCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBtZDRfY2xvbmVfd3JhcCggdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMgKQoreworICAgIG1iZWR0bHNfbWQ0X2Nsb25lKCAobWJlZHRsc19tZDRfY29udGV4dCAqKSBkc3QsCisgICAgICAgICAgICAgICAgIChjb25zdCBtYmVkdGxzX21kNF9jb250ZXh0ICopIHNyYyApOworfQorCitzdGF0aWMgdm9pZCBtZDRfcHJvY2Vzc193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgKQoreworICAgIG1iZWR0bHNfbWQ0X3Byb2Nlc3MoIChtYmVkdGxzX21kNF9jb250ZXh0ICopIGN0eCwgZGF0YSApOworfQorCitjb25zdCBtYmVkdGxzX21kX2luZm9fdCBtYmVkdGxzX21kNF9pbmZvID0geworICAgIE1CRURUTFNfTURfTUQ0LAorICAgICJNRDQiLAorICAgIDE2LAorICAgIDY0LAorICAgIG1kNF9zdGFydHNfd3JhcCwKKyAgICBtZDRfdXBkYXRlX3dyYXAsCisgICAgbWQ0X2ZpbmlzaF93cmFwLAorICAgIG1iZWR0bHNfbWQ0LAorICAgIG1kNF9jdHhfYWxsb2MsCisgICAgbWQ0X2N0eF9mcmVlLAorICAgIG1kNF9jbG9uZV93cmFwLAorICAgIG1kNF9wcm9jZXNzX3dyYXAsCit9OworCisjZW5kaWYgLyogTUJFRFRMU19NRDRfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorCitzdGF0aWMgdm9pZCBtZDVfc3RhcnRzX3dyYXAoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAobWJlZHRsc19tZDVfY29udGV4dCAqKSBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQ1X3VwZGF0ZV93cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApCit7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAobWJlZHRsc19tZDVfY29udGV4dCAqKSBjdHgsIGlucHV0LCBpbGVuICk7Cit9CisKK3N0YXRpYyB2b2lkIG1kNV9maW5pc2hfd3JhcCggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgY3R4LCBvdXRwdXQgKTsKK30KKworc3RhdGljIHZvaWQgKm1kNV9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfbWQ1X2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19tZDVfaW5pdCggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBtZDVfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19tZDVfZnJlZSggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgbWQ1X2Nsb25lX3dyYXAoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgICBtYmVkdGxzX21kNV9jbG9uZSggKG1iZWR0bHNfbWQ1X2NvbnRleHQgKikgZHN0LAorICAgICAgICAgICAgICAgICAoY29uc3QgbWJlZHRsc19tZDVfY29udGV4dCAqKSBzcmMgKTsKK30KKworc3RhdGljIHZvaWQgbWQ1X3Byb2Nlc3Nfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICBtYmVkdGxzX21kNV9wcm9jZXNzKCAobWJlZHRsc19tZDVfY29udGV4dCAqKSBjdHgsIGRhdGEgKTsKK30KKworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19tZDVfaW5mbyA9IHsKKyAgICBNQkVEVExTX01EX01ENSwKKyAgICAiTUQ1IiwKKyAgICAxNiwKKyAgICA2NCwKKyAgICBtZDVfc3RhcnRzX3dyYXAsCisgICAgbWQ1X3VwZGF0ZV93cmFwLAorICAgIG1kNV9maW5pc2hfd3JhcCwKKyAgICBtYmVkdGxzX21kNSwKKyAgICBtZDVfY3R4X2FsbG9jLAorICAgIG1kNV9jdHhfZnJlZSwKKyAgICBtZDVfY2xvbmVfd3JhcCwKKyAgICBtZDVfcHJvY2Vzc193cmFwLAorfTsKKworI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19SSVBFTUQxNjBfQykKKworc3RhdGljIHZvaWQgcmlwZW1kMTYwX3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfcmlwZW1kMTYwX3N0YXJ0cyggKG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKikgY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHJpcGVtZDE2MF91cGRhdGVfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIG1iZWR0bHNfcmlwZW1kMTYwX3VwZGF0ZSggKG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKikgY3R4LCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgdm9pZCByaXBlbWQxNjBfZmluaXNoX3dyYXAoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9maW5pc2goIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGN0eCwgb3V0cHV0ICk7Cit9CisKK3N0YXRpYyB2b2lkICpyaXBlbWQxNjBfY3R4X2FsbG9jKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfcmlwZW1kMTYwX2luaXQoIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgcmlwZW1kMTYwX2N0eF9mcmVlKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2ZyZWUoIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHJpcGVtZDE2MF9jbG9uZV93cmFwKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyApCit7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfY2xvbmUoIChtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICopIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKikgc3JjICk7Cit9CisKK3N0YXRpYyB2b2lkIHJpcGVtZDE2MF9wcm9jZXNzX3dyYXAoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSApCit7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfcHJvY2VzcyggKG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKikgY3R4LCBkYXRhICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfcmlwZW1kMTYwX2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9SSVBFTUQxNjAsCisgICAgIlJJUEVNRDE2MCIsCisgICAgMjAsCisgICAgNjQsCisgICAgcmlwZW1kMTYwX3N0YXJ0c193cmFwLAorICAgIHJpcGVtZDE2MF91cGRhdGVfd3JhcCwKKyAgICByaXBlbWQxNjBfZmluaXNoX3dyYXAsCisgICAgbWJlZHRsc19yaXBlbWQxNjAsCisgICAgcmlwZW1kMTYwX2N0eF9hbGxvYywKKyAgICByaXBlbWQxNjBfY3R4X2ZyZWUsCisgICAgcmlwZW1kMTYwX2Nsb25lX3dyYXAsCisgICAgcmlwZW1kMTYwX3Byb2Nlc3Nfd3JhcCwKK307CisKKyNlbmRpZiAvKiBNQkVEVExTX1JJUEVNRDE2MF9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorCitzdGF0aWMgdm9pZCBzaGExX3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoIChtYmVkdGxzX3NoYTFfY29udGV4dCAqKSBjdHggKTsKK30KKworc3RhdGljIHZvaWQgc2hhMV91cGRhdGVfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAobWJlZHRsc19zaGExX2NvbnRleHQgKikgY3R4LCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgdm9pZCBzaGExX2ZpbmlzaF93cmFwKCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggKG1iZWR0bHNfc2hhMV9jb250ZXh0ICopIGN0eCwgb3V0cHV0ICk7Cit9CisKK3N0YXRpYyB2b2lkICpzaGExX2N0eF9hbGxvYyggdm9pZCApCit7CisgICAgdm9pZCAqY3R4ID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc19zaGExX2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19zaGExX2luaXQoIChtYmVkdGxzX3NoYTFfY29udGV4dCAqKSBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfY2xvbmVfd3JhcCggdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMgKQoreworICAgIG1iZWR0bHNfc2hhMV9jbG9uZSggKG1iZWR0bHNfc2hhMV9jb250ZXh0ICopIGRzdCwKKyAgICAgICAgICAgICAgICAgIChjb25zdCBtYmVkdGxzX3NoYTFfY29udGV4dCAqKSBzcmMgKTsKK30KKworc3RhdGljIHZvaWQgc2hhMV9jdHhfZnJlZSggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggKG1iZWR0bHNfc2hhMV9jb250ZXh0ICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfcHJvY2Vzc193cmFwKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgKQoreworICAgIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCAobWJlZHRsc19zaGExX2NvbnRleHQgKikgY3R4LCBkYXRhICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhMV9pbmZvID0geworICAgIE1CRURUTFNfTURfU0hBMSwKKyAgICAiU0hBMSIsCisgICAgMjAsCisgICAgNjQsCisgICAgc2hhMV9zdGFydHNfd3JhcCwKKyAgICBzaGExX3VwZGF0ZV93cmFwLAorICAgIHNoYTFfZmluaXNoX3dyYXAsCisgICAgbWJlZHRsc19zaGExLAorICAgIHNoYTFfY3R4X2FsbG9jLAorICAgIHNoYTFfY3R4X2ZyZWUsCisgICAgc2hhMV9jbG9uZV93cmFwLAorICAgIHNoYTFfcHJvY2Vzc193cmFwLAorfTsKKworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKKy8qCisgKiBXcmFwcGVycyBmb3IgZ2VuZXJpYyBtZXNzYWdlIGRpZ2VzdHMKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKworc3RhdGljIHZvaWQgc2hhMjI0X3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgY3R4LCAxICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTIyNF91cGRhdGVfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgY3R4LCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgdm9pZCBzaGEyMjRfZmluaXNoX3dyYXAoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goIChtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICopIGN0eCwgb3V0cHV0ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTIyNF93cmFwKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19zaGEyNTYoIGlucHV0LCBpbGVuLCBvdXRwdXQsIDEgKTsKK30KKworc3RhdGljIHZvaWQgKnNoYTIyNF9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19zaGEyNTZfaW5pdCggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBzaGEyMjRfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19zaGEyNTZfZnJlZSggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgc2hhMjI0X2Nsb25lX3dyYXAoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9jbG9uZSggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgZHN0LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgbWJlZHRsc19zaGEyNTZfY29udGV4dCAqKSBzcmMgKTsKK30KKworc3RhdGljIHZvaWQgc2hhMjI0X3Byb2Nlc3Nfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzKCAobWJlZHRsc19zaGEyNTZfY29udGV4dCAqKSBjdHgsIGRhdGEgKTsKK30KKworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGEyMjRfaW5mbyA9IHsKKyAgICBNQkVEVExTX01EX1NIQTIyNCwKKyAgICAiU0hBMjI0IiwKKyAgICAyOCwKKyAgICA2NCwKKyAgICBzaGEyMjRfc3RhcnRzX3dyYXAsCisgICAgc2hhMjI0X3VwZGF0ZV93cmFwLAorICAgIHNoYTIyNF9maW5pc2hfd3JhcCwKKyAgICBzaGEyMjRfd3JhcCwKKyAgICBzaGEyMjRfY3R4X2FsbG9jLAorICAgIHNoYTIyNF9jdHhfZnJlZSwKKyAgICBzaGEyMjRfY2xvbmVfd3JhcCwKKyAgICBzaGEyMjRfcHJvY2Vzc193cmFwLAorfTsKKworc3RhdGljIHZvaWQgc2hhMjU2X3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyggKG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKikgY3R4LCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTI1Nl93cmFwKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19zaGEyNTYoIGlucHV0LCBpbGVuLCBvdXRwdXQsIDAgKTsKK30KKworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGEyNTZfaW5mbyA9IHsKKyAgICBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAiU0hBMjU2IiwKKyAgICAzMiwKKyAgICA2NCwKKyAgICBzaGEyNTZfc3RhcnRzX3dyYXAsCisgICAgc2hhMjI0X3VwZGF0ZV93cmFwLAorICAgIHNoYTIyNF9maW5pc2hfd3JhcCwKKyAgICBzaGEyNTZfd3JhcCwKKyAgICBzaGEyMjRfY3R4X2FsbG9jLAorICAgIHNoYTIyNF9jdHhfZnJlZSwKKyAgICBzaGEyMjRfY2xvbmVfd3JhcCwKKyAgICBzaGEyMjRfcHJvY2Vzc193cmFwLAorfTsKKworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKworc3RhdGljIHZvaWQgc2hhMzg0X3N0YXJ0c193cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggKG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgY3R4LCAxICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTM4NF91cGRhdGVfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggKG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgY3R4LCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgdm9pZCBzaGEzODRfZmluaXNoX3dyYXAoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9maW5pc2goIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGN0eCwgb3V0cHV0ICk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTM4NF93cmFwKCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgbWJlZHRsc19zaGE1MTIoIGlucHV0LCBpbGVuLCBvdXRwdXQsIDEgKTsKK30KKworc3RhdGljIHZvaWQgKnNoYTM4NF9jdHhfYWxsb2MoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19zaGE1MTJfaW5pdCggKG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgY3R4ICk7CisKKyAgICByZXR1cm4oIGN0eCApOworfQorCitzdGF0aWMgdm9pZCBzaGEzODRfY3R4X2ZyZWUoIHZvaWQgKmN0eCApCit7CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZSggKG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgc2hhMzg0X2Nsb25lX3dyYXAoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9jbG9uZSggKG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKikgZHN0LAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgbWJlZHRsc19zaGE1MTJfY29udGV4dCAqKSBzcmMgKTsKK30KKworc3RhdGljIHZvaWQgc2hhMzg0X3Byb2Nlc3Nfd3JhcCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9wcm9jZXNzKCAobWJlZHRsc19zaGE1MTJfY29udGV4dCAqKSBjdHgsIGRhdGEgKTsKK30KKworY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgbWJlZHRsc19zaGEzODRfaW5mbyA9IHsKKyAgICBNQkVEVExTX01EX1NIQTM4NCwKKyAgICAiU0hBMzg0IiwKKyAgICA0OCwKKyAgICAxMjgsCisgICAgc2hhMzg0X3N0YXJ0c193cmFwLAorICAgIHNoYTM4NF91cGRhdGVfd3JhcCwKKyAgICBzaGEzODRfZmluaXNoX3dyYXAsCisgICAgc2hhMzg0X3dyYXAsCisgICAgc2hhMzg0X2N0eF9hbGxvYywKKyAgICBzaGEzODRfY3R4X2ZyZWUsCisgICAgc2hhMzg0X2Nsb25lX3dyYXAsCisgICAgc2hhMzg0X3Byb2Nlc3Nfd3JhcCwKK307CisKK3N0YXRpYyB2b2lkIHNoYTUxMl9zdGFydHNfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9zdGFydHMoIChtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICopIGN0eCwgMCApOworfQorCitzdGF0aWMgdm9pZCBzaGE1MTJfd3JhcCggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIG1iZWR0bHNfc2hhNTEyKCBpbnB1dCwgaWxlbiwgb3V0cHV0LCAwICk7Cit9CisKK2NvbnN0IG1iZWR0bHNfbWRfaW5mb190IG1iZWR0bHNfc2hhNTEyX2luZm8gPSB7CisgICAgTUJFRFRMU19NRF9TSEE1MTIsCisgICAgIlNIQTUxMiIsCisgICAgNjQsCisgICAgMTI4LAorICAgIHNoYTUxMl9zdGFydHNfd3JhcCwKKyAgICBzaGEzODRfdXBkYXRlX3dyYXAsCisgICAgc2hhMzg0X2ZpbmlzaF93cmFwLAorICAgIHNoYTUxMl93cmFwLAorICAgIHNoYTM4NF9jdHhfYWxsb2MsCisgICAgc2hhMzg0X2N0eF9mcmVlLAorICAgIHNoYTM4NF9jbG9uZV93cmFwLAorICAgIHNoYTM4NF9wcm9jZXNzX3dyYXAsCit9OworCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19NRF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZW1vcnlfYnVmZmVyX2FsbG9jLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9tZW1vcnlfYnVmZmVyX2FsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ZDVhMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L21lbW9yeV9idWZmZXJfYWxsb2MuYwpAQCAtMCwwICsxLDc0NSBAQAorLyoKKyAqICBCdWZmZXItYmFzZWQgbWVtb3J5IGFsbG9jYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKworLyogTm8gbmVlZCBmb3IgdGhlIGhlYWRlciBndWFyZCBhcyBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQworICAgaXMgZGVwZW5kZW50IHVwb24gTUJFRFRMU19QTEFURk9STV9DICovCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisjaW5jbHVkZSAibWJlZHRscy90aHJlYWRpbmcuaCIKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisjZGVmaW5lIE1BR0lDMSAgICAgICAweEZGMDBBQTU1CisjZGVmaW5lIE1BR0lDMiAgICAgICAweEVFMTE5OTY2CisjZGVmaW5lIE1BWF9CVCAyMAorCit0eXBlZGVmIHN0cnVjdCBfbWVtb3J5X2hlYWRlciBtZW1vcnlfaGVhZGVyOworc3RydWN0IF9tZW1vcnlfaGVhZGVyCit7CisgICAgc2l6ZV90ICAgICAgICAgIG1hZ2ljMTsKKyAgICBzaXplX3QgICAgICAgICAgc2l6ZTsKKyAgICBzaXplX3QgICAgICAgICAgYWxsb2M7CisgICAgbWVtb3J5X2hlYWRlciAgICpwcmV2OworICAgIG1lbW9yeV9oZWFkZXIgICAqbmV4dDsKKyAgICBtZW1vcnlfaGVhZGVyICAgKnByZXZfZnJlZTsKKyAgICBtZW1vcnlfaGVhZGVyICAgKm5leHRfZnJlZTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICBjaGFyICAgICAgICAgICAgKip0cmFjZTsKKyAgICBzaXplX3QgICAgICAgICAgdHJhY2VfY291bnQ7CisjZW5kaWYKKyAgICBzaXplX3QgICAgICAgICAgbWFnaWMyOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgKmJ1ZjsKKyAgICBzaXplX3QgICAgICAgICAgbGVuOworICAgIG1lbW9yeV9oZWFkZXIgICAqZmlyc3Q7CisgICAgbWVtb3J5X2hlYWRlciAgICpmaXJzdF9mcmVlOworICAgIGludCAgICAgICAgICAgICB2ZXJpZnk7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICBzaXplX3QgICAgICAgICAgYWxsb2NfY291bnQ7CisgICAgc2l6ZV90ICAgICAgICAgIGZyZWVfY291bnQ7CisgICAgc2l6ZV90ICAgICAgICAgIHRvdGFsX3VzZWQ7CisgICAgc2l6ZV90ICAgICAgICAgIG1heGltdW1fdXNlZDsKKyAgICBzaXplX3QgICAgICAgICAgaGVhZGVyX2NvdW50OworICAgIHNpemVfdCAgICAgICAgICBtYXhpbXVtX2hlYWRlcl9jb3VudDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICAgbXV0ZXg7CisjZW5kaWYKK30KK2J1ZmZlcl9hbGxvY19jdHg7CisKK3N0YXRpYyBidWZmZXJfYWxsb2NfY3R4IGhlYXA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorc3RhdGljIHZvaWQgZGVidWdfaGVhZGVyKCBtZW1vcnlfaGVhZGVyICpoZHIgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFKQorICAgIHNpemVfdCBpOworI2VuZGlmCisKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkhEUjogIFBUUiglMTB6dSksIFBSRVYoJTEwenUpLCBORVhUKCUxMHp1KSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFMTE9DKCV6dSksIFNJWkUoJTEwenUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpIGhkciwgKHNpemVfdCkgaGRyLT5wcmV2LCAoc2l6ZV90KSBoZHItPm5leHQsCisgICAgICAgICAgICAgICAgICAgICAgaGRyLT5hbGxvYywgaGRyLT5zaXplICk7CisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICIgICAgICBGUFJFViglMTB6dSksIEZORVhUKCUxMHp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBoZHItPnByZXZfZnJlZSwgKHNpemVfdCkgaGRyLT5uZXh0X2ZyZWUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFKQorICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiVFJBQ0U6IFxuIiApOworICAgIGZvciggaSA9IDA7IGkgPCBoZHItPnRyYWNlX2NvdW50OyBpKysgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBoZHItPnRyYWNlW2ldICk7CisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJcbiIgKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19jaGFpbigpCit7CisgICAgbWVtb3J5X2hlYWRlciAqY3VyID0gaGVhcC5maXJzdDsKKworICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiXG5CbG9jayBsaXN0XG4iICk7CisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGRlYnVnX2hlYWRlciggY3VyICk7CisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZyZWUgbGlzdFxuIiApOworICAgIGN1ciA9IGhlYXAuZmlyc3RfZnJlZTsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBkZWJ1Z19oZWFkZXIoIGN1ciApOworICAgICAgICBjdXIgPSBjdXItPm5leHRfZnJlZTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfREVCVUcgKi8KKworc3RhdGljIGludCB2ZXJpZnlfaGVhZGVyKCBtZW1vcnlfaGVhZGVyICpoZHIgKQoreworICAgIGlmKCBoZHItPm1hZ2ljMSAhPSBNQUdJQzEgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiBNQUdJQzEgbWlzbWF0Y2hcbiIgKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggaGRyLT5tYWdpYzIgIT0gTUFHSUMyICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogTUFHSUMyIG1pc21hdGNoXG4iICk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIGhkci0+YWxsb2MgPiAxICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogYWxsb2MgaGFzIGlsbGVnYWwgdmFsdWVcbiIgKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICBpZiggaGRyLT5wcmV2ICE9IE5VTEwgJiYgaGRyLT5wcmV2ID09IGhkci0+bmV4dCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IHByZXYgPT0gbmV4dFxuIiApOworI2VuZGlmCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCBoZHItPnByZXZfZnJlZSAhPSBOVUxMICYmIGhkci0+cHJldl9mcmVlID09IGhkci0+bmV4dF9mcmVlICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogcHJldl9mcmVlID09IG5leHRfZnJlZVxuIiApOworI2VuZGlmCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9jaGFpbigpCit7CisgICAgbWVtb3J5X2hlYWRlciAqcHJ2ID0gaGVhcC5maXJzdCwgKmN1ciA9IGhlYXAuZmlyc3QtPm5leHQ7CisKKyAgICBpZiggdmVyaWZ5X2hlYWRlciggaGVhcC5maXJzdCApICE9IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiB2ZXJpZmljYXRpb24gb2YgZmlyc3QgaGVhZGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkXG4iICk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIGhlYXAuZmlyc3QtPnByZXYgIT0gTlVMTCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QtPnByZXYgIT0gTlVMTFxuIiApOworI2VuZGlmCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggdmVyaWZ5X2hlYWRlciggY3VyICkgIT0gMCApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogdmVyaWZpY2F0aW9uIG9mIGhlYWRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWRcbiIgKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggY3VyLT5wcmV2ICE9IHBydiApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogdmVyaWZpY2F0aW9uIGZhaWxlZDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VyLT5wcmV2ICE9IHBydlxuIiApOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIHBydiA9IGN1cjsKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCAqYnVmZmVyX2FsbG9jX2NhbGxvYyggc2l6ZV90IG4sIHNpemVfdCBzaXplICkKK3sKKyAgICBtZW1vcnlfaGVhZGVyICpuZXcsICpjdXIgPSBoZWFwLmZpcnN0X2ZyZWU7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICB2b2lkICpyZXQ7CisgICAgc2l6ZV90IG9yaWdpbmFsX2xlbiwgbGVuOworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFKQorICAgIHZvaWQgKnRyYWNlX2J1ZmZlcltNQVhfQlRdOworICAgIHNpemVfdCB0cmFjZV9jbnQ7CisjZW5kaWYKKworICAgIGlmKCBoZWFwLmJ1ZiA9PSBOVUxMIHx8IGhlYXAuZmlyc3QgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgb3JpZ2luYWxfbGVuID0gbGVuID0gbiAqIHNpemU7CisKKyAgICBpZiggbiAhPSAwICYmIGxlbiAvIG4gIT0gc2l6ZSApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgaWYoIGxlbiAlIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFICkKKyAgICB7CisgICAgICAgIGxlbiAtPSBsZW4gJSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRTsKKyAgICAgICAgbGVuICs9IE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFOworICAgIH0KKworICAgIC8vIEZpbmQgYmxvY2sgdGhhdCBmaXRzCisgICAgLy8KKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIGN1ci0+c2l6ZSA+PSBsZW4gKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0X2ZyZWU7CisgICAgfQorCisgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICBpZiggY3VyLT5hbGxvYyAhPSAwICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGQVRBTDogYmxvY2sgaW4gZnJlZV9saXN0IGJ1dCBhbGxvY2F0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhXG4iICk7CisjZW5kaWYKKyAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICBoZWFwLmFsbG9jX2NvdW50Kys7CisjZW5kaWYKKworICAgIC8vIEZvdW5kIGxvY2F0aW9uLCBzcGxpdCBibG9jayBpZiA+IG1lbW9yeV9oZWFkZXIgKyA0IHJvb20gbGVmdAorICAgIC8vCisgICAgaWYoIGN1ci0+c2l6ZSAtIGxlbiA8IHNpemVvZihtZW1vcnlfaGVhZGVyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFICkKKyAgICB7CisgICAgICAgIGN1ci0+YWxsb2MgPSAxOworCisgICAgICAgIC8vIFJlbW92ZSBmcm9tIGZyZWVfbGlzdAorICAgICAgICAvLworICAgICAgICBpZiggY3VyLT5wcmV2X2ZyZWUgIT0gTlVMTCApCisgICAgICAgICAgICBjdXItPnByZXZfZnJlZS0+bmV4dF9mcmVlID0gY3VyLT5uZXh0X2ZyZWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhlYXAuZmlyc3RfZnJlZSA9IGN1ci0+bmV4dF9mcmVlOworCisgICAgICAgIGlmKCBjdXItPm5leHRfZnJlZSAhPSBOVUxMICkKKyAgICAgICAgICAgIGN1ci0+bmV4dF9mcmVlLT5wcmV2X2ZyZWUgPSBjdXItPnByZXZfZnJlZTsKKworICAgICAgICBjdXItPnByZXZfZnJlZSA9IE5VTEw7CisgICAgICAgIGN1ci0+bmV4dF9mcmVlID0gTlVMTDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIGhlYXAudG90YWxfdXNlZCArPSBjdXItPnNpemU7CisgICAgICAgIGlmKCBoZWFwLnRvdGFsX3VzZWQgPiBoZWFwLm1heGltdW1fdXNlZCApCisgICAgICAgICAgICBoZWFwLm1heGltdW1fdXNlZCA9IGhlYXAudG90YWxfdXNlZDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFKQorICAgICAgICB0cmFjZV9jbnQgPSBiYWNrdHJhY2UoIHRyYWNlX2J1ZmZlciwgTUFYX0JUICk7CisgICAgICAgIGN1ci0+dHJhY2UgPSBiYWNrdHJhY2Vfc3ltYm9scyggdHJhY2VfYnVmZmVyLCB0cmFjZV9jbnQgKTsKKyAgICAgICAgY3VyLT50cmFjZV9jb3VudCA9IHRyYWNlX2NudDsKKyNlbmRpZgorCisgICAgICAgIGlmKCAoIGhlYXAudmVyaWZ5ICYgTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMTE9DICkgJiYgdmVyaWZ5X2NoYWluKCkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKworICAgICAgICByZXQgPSAodW5zaWduZWQgY2hhciAqKSBjdXIgKyBzaXplb2YoIG1lbW9yeV9oZWFkZXIgKTsKKyAgICAgICAgbWVtc2V0KCByZXQsIDAsIG9yaWdpbmFsX2xlbiApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcCA9ICggKHVuc2lnbmVkIGNoYXIgKikgY3VyICkgKyBzaXplb2YobWVtb3J5X2hlYWRlcikgKyBsZW47CisgICAgbmV3ID0gKG1lbW9yeV9oZWFkZXIgKikgcDsKKworICAgIG5ldy0+c2l6ZSA9IGN1ci0+c2l6ZSAtIGxlbiAtIHNpemVvZihtZW1vcnlfaGVhZGVyKTsKKyAgICBuZXctPmFsbG9jID0gMDsKKyAgICBuZXctPnByZXYgPSBjdXI7CisgICAgbmV3LT5uZXh0ID0gY3VyLT5uZXh0OworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFKQorICAgIG5ldy0+dHJhY2UgPSBOVUxMOworICAgIG5ldy0+dHJhY2VfY291bnQgPSAwOworI2VuZGlmCisgICAgbmV3LT5tYWdpYzEgPSBNQUdJQzE7CisgICAgbmV3LT5tYWdpYzIgPSBNQUdJQzI7CisKKyAgICBpZiggbmV3LT5uZXh0ICE9IE5VTEwgKQorICAgICAgICBuZXctPm5leHQtPnByZXYgPSBuZXc7CisKKyAgICAvLyBSZXBsYWNlIGN1ciB3aXRoIG5ldyBpbiBmcmVlX2xpc3QKKyAgICAvLworICAgIG5ldy0+cHJldl9mcmVlID0gY3VyLT5wcmV2X2ZyZWU7CisgICAgbmV3LT5uZXh0X2ZyZWUgPSBjdXItPm5leHRfZnJlZTsKKyAgICBpZiggbmV3LT5wcmV2X2ZyZWUgIT0gTlVMTCApCisgICAgICAgIG5ldy0+cHJldl9mcmVlLT5uZXh0X2ZyZWUgPSBuZXc7CisgICAgZWxzZQorICAgICAgICBoZWFwLmZpcnN0X2ZyZWUgPSBuZXc7CisKKyAgICBpZiggbmV3LT5uZXh0X2ZyZWUgIT0gTlVMTCApCisgICAgICAgIG5ldy0+bmV4dF9mcmVlLT5wcmV2X2ZyZWUgPSBuZXc7CisKKyAgICBjdXItPmFsbG9jID0gMTsKKyAgICBjdXItPnNpemUgPSBsZW47CisgICAgY3VyLT5uZXh0ID0gbmV3OworICAgIGN1ci0+cHJldl9mcmVlID0gTlVMTDsKKyAgICBjdXItPm5leHRfZnJlZSA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgIGhlYXAuaGVhZGVyX2NvdW50Kys7CisgICAgaWYoIGhlYXAuaGVhZGVyX2NvdW50ID4gaGVhcC5tYXhpbXVtX2hlYWRlcl9jb3VudCApCisgICAgICAgIGhlYXAubWF4aW11bV9oZWFkZXJfY291bnQgPSBoZWFwLmhlYWRlcl9jb3VudDsKKyAgICBoZWFwLnRvdGFsX3VzZWQgKz0gY3VyLT5zaXplOworICAgIGlmKCBoZWFwLnRvdGFsX3VzZWQgPiBoZWFwLm1heGltdW1fdXNlZCApCisgICAgICAgIGhlYXAubWF4aW11bV91c2VkID0gaGVhcC50b3RhbF91c2VkOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UpCisgICAgdHJhY2VfY250ID0gYmFja3RyYWNlKCB0cmFjZV9idWZmZXIsIE1BWF9CVCApOworICAgIGN1ci0+dHJhY2UgPSBiYWNrdHJhY2Vfc3ltYm9scyggdHJhY2VfYnVmZmVyLCB0cmFjZV9jbnQgKTsKKyAgICBjdXItPnRyYWNlX2NvdW50ID0gdHJhY2VfY250OworI2VuZGlmCisKKyAgICBpZiggKCBoZWFwLnZlcmlmeSAmIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTExPQyApICYmIHZlcmlmeV9jaGFpbigpICE9IDAgKQorICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKworICAgIHJldCA9ICh1bnNpZ25lZCBjaGFyICopIGN1ciArIHNpemVvZiggbWVtb3J5X2hlYWRlciApOworICAgIG1lbXNldCggcmV0LCAwLCBvcmlnaW5hbF9sZW4gKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9hbGxvY19mcmVlKCB2b2lkICpwdHIgKQoreworICAgIG1lbW9yeV9oZWFkZXIgKmhkciwgKm9sZCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKKworICAgIGlmKCBwdHIgPT0gTlVMTCB8fCBoZWFwLmJ1ZiA9PSBOVUxMIHx8IGhlYXAuZmlyc3QgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCBwIDwgaGVhcC5idWYgfHwgcCA+IGhlYXAuYnVmICsgaGVhcC5sZW4gKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiBtYmVkdGxzX2ZyZWUoKSBvdXRzaWRlIG9mIG1hbmFnZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFjZVxuIiApOworI2VuZGlmCisgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgIH0KKworICAgIHAgLT0gc2l6ZW9mKG1lbW9yeV9oZWFkZXIpOworICAgIGhkciA9IChtZW1vcnlfaGVhZGVyICopIHA7CisKKyAgICBpZiggdmVyaWZ5X2hlYWRlciggaGRyICkgIT0gMCApCisgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworCisgICAgaWYoIGhkci0+YWxsb2MgIT0gMSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFUQUw6IG1iZWR0bHNfZnJlZSgpIG9uIHVuYWxsb2NhdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YVxuIiApOworI2VuZGlmCisgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgIH0KKworICAgIGhkci0+YWxsb2MgPSAwOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICBoZWFwLmZyZWVfY291bnQrKzsKKyAgICBoZWFwLnRvdGFsX3VzZWQgLT0gaGRyLT5zaXplOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICBmcmVlKCBoZHItPnRyYWNlICk7CisgICAgaGRyLT50cmFjZSA9IE5VTEw7CisgICAgaGRyLT50cmFjZV9jb3VudCA9IDA7CisjZW5kaWYKKworICAgIC8vIFJlZ3JvdXAgd2l0aCBibG9jayBiZWZvcmUKKyAgICAvLworICAgIGlmKCBoZHItPnByZXYgIT0gTlVMTCAmJiBoZHItPnByZXYtPmFsbG9jID09IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBoZWFwLmhlYWRlcl9jb3VudC0tOworI2VuZGlmCisgICAgICAgIGhkci0+cHJldi0+c2l6ZSArPSBzaXplb2YobWVtb3J5X2hlYWRlcikgKyBoZHItPnNpemU7CisgICAgICAgIGhkci0+cHJldi0+bmV4dCA9IGhkci0+bmV4dDsKKyAgICAgICAgb2xkID0gaGRyOworICAgICAgICBoZHIgPSBoZHItPnByZXY7CisKKyAgICAgICAgaWYoIGhkci0+bmV4dCAhPSBOVUxMICkKKyAgICAgICAgICAgIGhkci0+bmV4dC0+cHJldiA9IGhkcjsKKworICAgICAgICBtZW1zZXQoIG9sZCwgMCwgc2l6ZW9mKG1lbW9yeV9oZWFkZXIpICk7CisgICAgfQorCisgICAgLy8gUmVncm91cCB3aXRoIGJsb2NrIGFmdGVyCisgICAgLy8KKyAgICBpZiggaGRyLT5uZXh0ICE9IE5VTEwgJiYgaGRyLT5uZXh0LT5hbGxvYyA9PSAwICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICAgICAgaGVhcC5oZWFkZXJfY291bnQtLTsKKyNlbmRpZgorICAgICAgICBoZHItPnNpemUgKz0gc2l6ZW9mKG1lbW9yeV9oZWFkZXIpICsgaGRyLT5uZXh0LT5zaXplOworICAgICAgICBvbGQgPSBoZHItPm5leHQ7CisgICAgICAgIGhkci0+bmV4dCA9IGhkci0+bmV4dC0+bmV4dDsKKworICAgICAgICBpZiggaGRyLT5wcmV2X2ZyZWUgIT0gTlVMTCB8fCBoZHItPm5leHRfZnJlZSAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGhkci0+cHJldl9mcmVlICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIGhkci0+cHJldl9mcmVlLT5uZXh0X2ZyZWUgPSBoZHItPm5leHRfZnJlZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoZWFwLmZpcnN0X2ZyZWUgPSBoZHItPm5leHRfZnJlZTsKKworICAgICAgICAgICAgaWYoIGhkci0+bmV4dF9mcmVlICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIGhkci0+bmV4dF9mcmVlLT5wcmV2X2ZyZWUgPSBoZHItPnByZXZfZnJlZTsKKyAgICAgICAgfQorCisgICAgICAgIGhkci0+cHJldl9mcmVlID0gb2xkLT5wcmV2X2ZyZWU7CisgICAgICAgIGhkci0+bmV4dF9mcmVlID0gb2xkLT5uZXh0X2ZyZWU7CisKKyAgICAgICAgaWYoIGhkci0+cHJldl9mcmVlICE9IE5VTEwgKQorICAgICAgICAgICAgaGRyLT5wcmV2X2ZyZWUtPm5leHRfZnJlZSA9IGhkcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGVhcC5maXJzdF9mcmVlID0gaGRyOworCisgICAgICAgIGlmKCBoZHItPm5leHRfZnJlZSAhPSBOVUxMICkKKyAgICAgICAgICAgIGhkci0+bmV4dF9mcmVlLT5wcmV2X2ZyZWUgPSBoZHI7CisKKyAgICAgICAgaWYoIGhkci0+bmV4dCAhPSBOVUxMICkKKyAgICAgICAgICAgIGhkci0+bmV4dC0+cHJldiA9IGhkcjsKKworICAgICAgICBtZW1zZXQoIG9sZCwgMCwgc2l6ZW9mKG1lbW9yeV9oZWFkZXIpICk7CisgICAgfQorCisgICAgLy8gUHJlcGVuZCB0byBmcmVlX2xpc3QgaWYgd2UgaGF2ZSBub3QgbWVyZ2VkCisgICAgLy8gKERvZXMgbm90IGhhdmUgdG8gc3RheSBpbiBzYW1lIG9yZGVyIGFzIHByZXYgLyBuZXh0IGxpc3QpCisgICAgLy8KKyAgICBpZiggb2xkID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgaGRyLT5uZXh0X2ZyZWUgPSBoZWFwLmZpcnN0X2ZyZWU7CisgICAgICAgIGlmKCBoZWFwLmZpcnN0X2ZyZWUgIT0gTlVMTCApCisgICAgICAgICAgICBoZWFwLmZpcnN0X2ZyZWUtPnByZXZfZnJlZSA9IGhkcjsKKyAgICAgICAgaGVhcC5maXJzdF9mcmVlID0gaGRyOworICAgIH0KKworICAgIGlmKCAoIGhlYXAudmVyaWZ5ICYgTUJFRFRMU19NRU1PUllfVkVSSUZZX0ZSRUUgKSAmJiB2ZXJpZnlfY2hhaW4oKSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19leGl0KCAxICk7Cit9CisKK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkoIGludCB2ZXJpZnkgKQoreworICAgIGhlYXAudmVyaWZ5ID0gdmVyaWZ5OworfQorCitpbnQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSgpCit7CisgICAgcmV0dXJuIHZlcmlmeV9jaGFpbigpOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3N0YXR1cygpCit7CisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgIkN1cnJlbnQgdXNlOiAlenUgYmxvY2tzIC8gJXp1IGJ5dGVzLCBtYXg6ICV6dSBibG9ja3MgLyAiCisgICAgICAgICAgICAgICAgICAgICAgIiV6dSBieXRlcyAodG90YWwgJXp1IGJ5dGVzKSwgYWxsb2MgLyBmcmVlOiAlenUgLyAlenVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhcC5oZWFkZXJfY291bnQsIGhlYXAudG90YWxfdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFwLm1heGltdW1faGVhZGVyX2NvdW50LCBoZWFwLm1heGltdW1fdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFwLm1heGltdW1faGVhZGVyX2NvdW50ICogc2l6ZW9mKCBtZW1vcnlfaGVhZGVyICkKKyAgICAgICAgICAgICAgICAgICAgICArIGhlYXAubWF4aW11bV91c2VkLAorICAgICAgICAgICAgICAgICAgICAgIGhlYXAuYWxsb2NfY291bnQsIGhlYXAuZnJlZV9jb3VudCApOworCisgICAgaWYoIGhlYXAuZmlyc3QtPm5leHQgPT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiQWxsIG1lbW9yeSBkZS1hbGxvY2F0ZWQgaW4gc3RhY2sgYnVmZmVyXG4iICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJNZW1vcnkgY3VycmVudGx5IGFsbG9jYXRlZDpcbiIgKTsKKyAgICAgICAgZGVidWdfY2hhaW4oKTsKKyAgICB9Cit9CisKK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9nZXQoIHNpemVfdCAqbWF4X3VzZWQsIHNpemVfdCAqbWF4X2Jsb2NrcyApCit7CisgICAgKm1heF91c2VkICAgPSBoZWFwLm1heGltdW1fdXNlZDsKKyAgICAqbWF4X2Jsb2NrcyA9IGhlYXAubWF4aW11bV9oZWFkZXJfY291bnQ7Cit9CisKK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9yZXNldCggdm9pZCApCit7CisgICAgaGVhcC5tYXhpbXVtX3VzZWQgPSAwOworICAgIGhlYXAubWF4aW11bV9oZWFkZXJfY291bnQgPSAwOworfQorCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCBzaXplX3QgKmN1cl91c2VkLCBzaXplX3QgKmN1cl9ibG9ja3MgKQoreworICAgICpjdXJfdXNlZCAgID0gaGVhcC50b3RhbF91c2VkOworICAgICpjdXJfYmxvY2tzID0gaGVhcC5oZWFkZXJfY291bnQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfREVCVUcgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKK3N0YXRpYyB2b2lkICpidWZmZXJfYWxsb2NfY2FsbG9jX211dGV4ZWQoIHNpemVfdCBuLCBzaXplX3Qgc2l6ZSApCit7CisgICAgdm9pZCAqYnVmOworICAgIGlmKCBtYmVkdGxzX211dGV4X2xvY2soICZoZWFwLm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTlVMTCApOworICAgIGJ1ZiA9IGJ1ZmZlcl9hbGxvY19jYWxsb2MoIG4sIHNpemUgKTsKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZoZWFwLm11dGV4ICkgKQorICAgICAgICByZXR1cm4oIE5VTEwgKTsKKyAgICByZXR1cm4oIGJ1ZiApOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfYWxsb2NfZnJlZV9tdXRleGVkKCB2b2lkICpwdHIgKQoreworICAgIC8qIFdlIGhhdmUgdG8gZ29vZCBvcHRpb24gaGVyZSwgYnV0IGNvcnJ1cHRpbmcgdGhlIGhlYXAgc2VlbXMKKyAgICAgKiB3b3JzZSB0aGFuIGxvb3NpbmcgbWVtb3J5LiAqLworICAgIGlmKCBtYmVkdGxzX211dGV4X2xvY2soICZoZWFwLm11dGV4ICkgKQorICAgICAgICByZXR1cm47CisgICAgYnVmZmVyX2FsbG9jX2ZyZWUoIHB0ciApOworICAgICh2b2lkKSBtYmVkdGxzX211dGV4X3VubG9jayggJmhlYXAubXV0ZXggKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19DICovCisKK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgbWVtc2V0KCAmaGVhcCwgMCwgc2l6ZW9mKGJ1ZmZlcl9hbGxvY19jdHgpICk7CisgICAgbWVtc2V0KCBidWYsIDAsIGxlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJmhlYXAubXV0ZXggKTsKKyAgICBtYmVkdGxzX3BsYXRmb3JtX3NldF9jYWxsb2NfZnJlZSggYnVmZmVyX2FsbG9jX2NhbGxvY19tdXRleGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2FsbG9jX2ZyZWVfbXV0ZXhlZCApOworI2Vsc2UKKyAgICBtYmVkdGxzX3BsYXRmb3JtX3NldF9jYWxsb2NfZnJlZSggYnVmZmVyX2FsbG9jX2NhbGxvYywgYnVmZmVyX2FsbG9jX2ZyZWUgKTsKKyNlbmRpZgorCisgICAgaWYoIChzaXplX3QpIGJ1ZiAlIE1CRURUTFNfTUVNT1JZX0FMSUdOX01VTFRJUExFICkKKyAgICB7CisgICAgICAgIC8qIEFkanVzdCBsZW4gZmlyc3Qgc2luY2UgYnVmIGlzIHVzZWQgaW4gdGhlIGNvbXB1dGF0aW9uICovCisgICAgICAgIGxlbiAtPSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRQorICAgICAgICAgICAgIC0gKHNpemVfdCkgYnVmICUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEU7CisgICAgICAgIGJ1ZiArPSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRQorICAgICAgICAgICAgIC0gKHNpemVfdCkgYnVmICUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEU7CisgICAgfQorCisgICAgaGVhcC5idWYgPSBidWY7CisgICAgaGVhcC5sZW4gPSBsZW47CisKKyAgICBoZWFwLmZpcnN0ID0gKG1lbW9yeV9oZWFkZXIgKikgYnVmOworICAgIGhlYXAuZmlyc3QtPnNpemUgPSBsZW4gLSBzaXplb2YobWVtb3J5X2hlYWRlcik7CisgICAgaGVhcC5maXJzdC0+bWFnaWMxID0gTUFHSUMxOworICAgIGhlYXAuZmlyc3QtPm1hZ2ljMiA9IE1BR0lDMjsKKyAgICBoZWFwLmZpcnN0X2ZyZWUgPSBoZWFwLmZpcnN0OworfQorCit2b2lkIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9mcmVlKCAmaGVhcC5tdXRleCApOworI2VuZGlmCisgICAgbWJlZHRsc196ZXJvaXplKCAmaGVhcCwgc2l6ZW9mKGJ1ZmZlcl9hbGxvY19jdHgpICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorc3RhdGljIGludCBjaGVja19wb2ludGVyKCB2b2lkICpwICkKK3sKKyAgICBpZiggcCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIChzaXplX3QpIHAgJSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYWxsX2ZyZWUoICkKK3sKKyAgICBpZigKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICAgICBoZWFwLnRvdGFsX3VzZWQgIT0gMCB8fAorI2VuZGlmCisgICAgICAgIGhlYXAuZmlyc3QgIT0gaGVhcC5maXJzdF9mcmVlIHx8CisgICAgICAgICh2b2lkICopIGhlYXAuZmlyc3QgIT0gKHZvaWQgKikgaGVhcC5idWYgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIFRFU1RfQVNTRVJUKCBjb25kaXRpb24gKSAgICAgICAgICAgIFwKKyAgICBpZiggISAoY29uZGl0aW9uKSApICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIGNsZWFudXA7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCitpbnQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICpxLCAqciwgKmVuZDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgTUJBIHRlc3QgIzEgKGJhc2ljIGFsbG9jLWZyZWUgY3ljbGUpOiAiICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYnVmLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBwID0gbWJlZHRsc19jYWxsb2MoIDEsIDEgKTsKKyAgICBxID0gbWJlZHRsc19jYWxsb2MoIDEsIDEyOCApOworICAgIHIgPSBtYmVkdGxzX2NhbGxvYyggMSwgMTYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwICkgPT0gMCAmJgorICAgICAgICAgICAgICAgICBjaGVja19wb2ludGVyKCBxICkgPT0gMCAmJgorICAgICAgICAgICAgICAgICBjaGVja19wb2ludGVyKCByICkgPT0gMCApOworCisgICAgbWJlZHRsc19mcmVlKCByICk7CisgICAgbWJlZHRsc19mcmVlKCBxICk7CisgICAgbWJlZHRsc19mcmVlKCBwICk7CisKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfYWxsX2ZyZWUoICkgPT0gMCApOworCisgICAgLyogTWVtb3JpemUgZW5kIHRvIGNvbXBhcmUgd2l0aCB0aGUgbmV4dCB0ZXN0ICovCisgICAgZW5kID0gaGVhcC5idWYgKyBoZWFwLmxlbjsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1CQSB0ZXN0ICMyIChidWYgbm90IGFsaWduZWQpOiAiICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYnVmICsgMSwgc2l6ZW9mKCBidWYgKSAtIDEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBoZWFwLmJ1ZiArIGhlYXAubGVuID09IGVuZCApOworCisgICAgcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCAxICk7CisgICAgcSA9IG1iZWR0bHNfY2FsbG9jKCAxLCAxMjggKTsKKyAgICByID0gbWJlZHRsc19jYWxsb2MoIDEsIDE2ICk7CisKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcCApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgY2hlY2tfcG9pbnRlciggcSApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgY2hlY2tfcG9pbnRlciggciApID09IDAgKTsKKworICAgIG1iZWR0bHNfZnJlZSggciApOworICAgIG1iZWR0bHNfZnJlZSggcSApOworICAgIG1iZWR0bHNfZnJlZSggcCApOworCisgICAgVEVTVF9BU1NFUlQoIGNoZWNrX2FsbF9mcmVlKCApID09IDAgKTsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIE1CQSB0ZXN0ICMzIChmdWxsKTogIiApOworCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworCisgICAgcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIGJ1ZiApIC0gc2l6ZW9mKCBtZW1vcnlfaGVhZGVyICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbGxvYyggMSwgMSApID09IE5VTEwgKTsKKworICAgIG1iZWR0bHNfZnJlZSggcCApOworCisgICAgcCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIGJ1ZiApIC0gMiAqIHNpemVvZiggbWVtb3J5X2hlYWRlciApIC0gMTYgKTsKKyAgICBxID0gbWJlZHRsc19jYWxsb2MoIDEsIDE2ICk7CisKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcCApID09IDAgJiYgY2hlY2tfcG9pbnRlciggcSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYWxsb2MoIDEsIDEgKSA9PSBOVUxMICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbGxvYyggMSwgMTcgKSA9PSBOVUxMICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBjaGVja19hbGxfZnJlZSggKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSggKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L25ldF9zb2NrZXRzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9uZXRfc29ja2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDZjYmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9uZXRfc29ja2V0cy5jCkBAIC0wLDAgKzEsNTg1IEBACisvKgorICogIFRDUC9JUCBvciBVRFAvSVAgbmV0d29ya2luZyBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ORVRfQykKKworI2lmICFkZWZpbmVkKHVuaXgpICYmICFkZWZpbmVkKF9fdW5peF9fKSAmJiAhZGVmaW5lZChfX3VuaXgpICYmIFwKKyAgICAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9XSU4zMikKKyNlcnJvciAiVGhpcyBtb2R1bGUgb25seSB3b3JrcyBvbiBVbml4IGFuZCBXaW5kb3dzLCBzZWUgTUJFRFRMU19ORVRfQyBpbiBjb25maWcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorCisjaWZkZWYgX1dJTjMyX1dJTk5UCisjdW5kZWYgX1dJTjMyX1dJTk5UCisjZW5kaWYKKy8qIEVuYWJsZXMgZ2V0YWRkcmluZm8oKSAmIENvICovCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDEKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKKyNwcmFnbWEgY29tbWVudCggbGliLCAid3MyLmxpYiIgKQorI2Vsc2UKKyNwcmFnbWEgY29tbWVudCggbGliLCAid3MyXzMyLmxpYiIgKQorI2VuZGlmCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworI2RlZmluZSByZWFkKGZkLGJ1ZixsZW4pICAgICAgICByZWN2KGZkLChjaGFyKilidWYsKGludCkgbGVuLDApCisjZGVmaW5lIHdyaXRlKGZkLGJ1ZixsZW4pICAgICAgIHNlbmQoZmQsKGNoYXIqKWJ1ZiwoaW50KSBsZW4sMCkKKyNkZWZpbmUgY2xvc2UoZmQpICAgICAgICAgICAgICAgY2xvc2Vzb2NrZXQoZmQpCisKK3N0YXRpYyBpbnQgd3NhX2luaXRfZG9uZSA9IDA7CisKKyNlbHNlIC8qICggX1dJTjMyIHx8IF9XSU4zMl9XQ0UgKSAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZW5kaWYgLyogKCBfV0lOMzIgfHwgX1dJTjMyX1dDRSApICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKy8qIFNvbWUgTVMgZnVuY3Rpb25zIHdhbnQgaW50IGFuZCBNU1ZDIHdhcm5zIGlmIHdlIHBhc3Mgc2l6ZV90LAorICogYnV0IHRoZSBzdGFuZGFyZCBmdWNudGlvbnMgdXNlIHNvY2tsZW5fdCwgc28gY2FzdCBvbmx5IGZvciBNU1ZDICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVNWQ19JTlRfQ0FTVCAgIChpbnQpCisjZWxzZQorI2RlZmluZSBNU1ZDX0lOVF9DQVNUCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyoKKyAqIFByZXBhcmUgZm9yIHVzaW5nIHRoZSBzb2NrZXRzIGludGVyZmFjZQorICovCitzdGF0aWMgaW50IG5ldF9wcmVwYXJlKCB2b2lkICkKK3sKKyNpZiAoIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpICkgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiBcCisgICAgIWRlZmluZWQoRUZJMzIpCisgICAgV1NBREFUQSB3c2FEYXRhOworCisgICAgaWYoIHdzYV9pbml0X2RvbmUgPT0gMCApCisgICAgeworICAgICAgICBpZiggV1NBU3RhcnR1cCggTUFLRVdPUkQoMiwwKSwgJndzYURhdGEgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQgKTsKKworICAgICAgICB3c2FfaW5pdF9kb25lID0gMTsKKyAgICB9CisjZWxzZQorI2lmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisgICAgc2lnbmFsKCBTSUdQSVBFLCBTSUdfSUdOICk7CisjZW5kaWYKKyNlbmRpZgorICAgIHJldHVybiggMCApOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX25ldF9pbml0KCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKQoreworICAgIGN0eC0+ZmQgPSAtMTsKK30KKworLyoKKyAqIEluaXRpYXRlIGEgVENQIGNvbm5lY3Rpb24gd2l0aCBob3N0OnBvcnQgYW5kIHRoZSBnaXZlbiBwcm90b2NvbAorICovCitpbnQgbWJlZHRsc19uZXRfY29ubmVjdCggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpwb3J0LCBpbnQgcHJvdG8gKQoreworICAgIGludCByZXQ7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWRkcl9saXN0LCAqY3VyOworCisgICAgaWYoICggcmV0ID0gbmV0X3ByZXBhcmUoKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgLyogRG8gbmFtZSByZXNvbHV0aW9uIHdpdGggYm90aCBJUHY2IGFuZCBJUHY0ICovCisgICAgbWVtc2V0KCAmaGludHMsIDAsIHNpemVvZiggaGludHMgKSApOworICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IHByb3RvID09IE1CRURUTFNfTkVUX1BST1RPX1VEUCA/IFNPQ0tfREdSQU0gOiBTT0NLX1NUUkVBTTsKKyAgICBoaW50cy5haV9wcm90b2NvbCA9IHByb3RvID09IE1CRURUTFNfTkVUX1BST1RPX1VEUCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7CisKKyAgICBpZiggZ2V0YWRkcmluZm8oIGhvc3QsIHBvcnQsICZoaW50cywgJmFkZHJfbGlzdCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9VTktOT1dOX0hPU1QgKTsKKworICAgIC8qIFRyeSB0aGUgc29ja2FkZHJzIHVudGlsIGEgY29ubmVjdGlvbiBzdWNjZWVkcyAqLworICAgIHJldCA9IE1CRURUTFNfRVJSX05FVF9VTktOT1dOX0hPU1Q7CisgICAgZm9yKCBjdXIgPSBhZGRyX2xpc3Q7IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPmFpX25leHQgKQorICAgIHsKKyAgICAgICAgY3R4LT5mZCA9IChpbnQpIHNvY2tldCggY3VyLT5haV9mYW1pbHksIGN1ci0+YWlfc29ja3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLT5haV9wcm90b2NvbCApOworICAgICAgICBpZiggY3R4LT5mZCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGNvbm5lY3QoIGN0eC0+ZmQsIGN1ci0+YWlfYWRkciwgTVNWQ19JTlRfQ0FTVCBjdXItPmFpX2FkZHJsZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2UoIGN0eC0+ZmQgKTsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTkVUX0NPTk5FQ1RfRkFJTEVEOworICAgIH0KKworICAgIGZyZWVhZGRyaW5mbyggYWRkcl9saXN0ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ3JlYXRlIGEgbGlzdGVuaW5nIHNvY2tldCBvbiBiaW5kX2lwOnBvcnQKKyAqLworaW50IG1iZWR0bHNfbmV0X2JpbmQoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqYmluZF9pcCwgY29uc3QgY2hhciAqcG9ydCwgaW50IHByb3RvICkKK3sKKyAgICBpbnQgbiwgcmV0OworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFkZHJfbGlzdCwgKmN1cjsKKworICAgIGlmKCAoIHJldCA9IG5ldF9wcmVwYXJlKCkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qIEJpbmQgdG8gSVB2NiBhbmQvb3IgSVB2NCwgYnV0IG9ubHkgaW4gdGhlIGRlc2lyZWQgcHJvdG9jb2wgKi8KKyAgICBtZW1zZXQoICZoaW50cywgMCwgc2l6ZW9mKCBoaW50cyApICk7CisgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gcHJvdG8gPT0gTUJFRFRMU19ORVRfUFJPVE9fVURQID8gU09DS19ER1JBTSA6IFNPQ0tfU1RSRUFNOworICAgIGhpbnRzLmFpX3Byb3RvY29sID0gcHJvdG8gPT0gTUJFRFRMU19ORVRfUFJPVE9fVURQID8gSVBQUk9UT19VRFAgOiBJUFBST1RPX1RDUDsKKyAgICBpZiggYmluZF9pcCA9PSBOVUxMICkKKyAgICAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFOworCisgICAgaWYoIGdldGFkZHJpbmZvKCBiaW5kX2lwLCBwb3J0LCAmaGludHMsICZhZGRyX2xpc3QgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NUICk7CisKKyAgICAvKiBUcnkgdGhlIHNvY2thZGRycyB1bnRpbCBhIGJpbmRpbmcgc3VjY2VlZHMgKi8KKyAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NUOworICAgIGZvciggY3VyID0gYWRkcl9saXN0OyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5haV9uZXh0ICkKKyAgICB7CisgICAgICAgIGN0eC0+ZmQgPSAoaW50KSBzb2NrZXQoIGN1ci0+YWlfZmFtaWx5LCBjdXItPmFpX3NvY2t0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+YWlfcHJvdG9jb2wgKTsKKyAgICAgICAgaWYoIGN0eC0+ZmQgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG4gPSAxOworICAgICAgICBpZiggc2V0c29ja29wdCggY3R4LT5mZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgJm4sIHNpemVvZiggbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsb3NlKCBjdHgtPmZkICk7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGJpbmQoIGN0eC0+ZmQsIGN1ci0+YWlfYWRkciwgTVNWQ19JTlRfQ0FTVCBjdXItPmFpX2FkZHJsZW4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgY2xvc2UoIGN0eC0+ZmQgKTsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX05FVF9CSU5EX0ZBSUxFRDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogTGlzdGVuIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIFRDUCAqLworICAgICAgICBpZiggcHJvdG8gPT0gTUJFRFRMU19ORVRfUFJPVE9fVENQICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGxpc3RlbiggY3R4LT5mZCwgTUJFRFRMU19ORVRfTElTVEVOX0JBQ0tMT0cgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbG9zZSggY3R4LT5mZCApOworICAgICAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX05FVF9MSVNURU5fRkFJTEVEOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSSB3ZSBldmVyIGdldCB0aGVyZSwgaXQncyBhIHN1Y2Nlc3MgKi8KKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZnJlZWFkZHJpbmZvKCBhZGRyX2xpc3QgKTsKKworICAgIHJldHVybiggcmV0ICk7CisKK30KKworI2lmICggZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKy8qCisgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiB3b3VsZCBiZSBibG9ja2luZyBvbiBhIG5vbi1ibG9ja2luZyBzb2NrZXQKKyAqIGFuZCB0aHVzICdmYWlsZWQnIHdpdGggYSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgbmV0X3dvdWxkX2Jsb2NrKCBjb25zdCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKQoreworICAgICgodm9pZCkgY3R4KTsKKyAgICByZXR1cm4oIFdTQUdldExhc3RFcnJvcigpID09IFdTQUVXT1VMREJMT0NLICk7Cit9CisjZWxzZQorLyoKKyAqIENoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIHdvdWxkIGJlIGJsb2NraW5nIG9uIGEgbm9uLWJsb2NraW5nIHNvY2tldAorICogYW5kIHRodXMgJ2ZhaWxlZCcgd2l0aCBhIG5lZ2F0aXZlIHJldHVybiB2YWx1ZS4KKyAqCisgKiBOb3RlOiBvbiBhIGJsb2NraW5nIHNvY2tldCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAhCisgKi8KK3N0YXRpYyBpbnQgbmV0X3dvdWxkX2Jsb2NrKCBjb25zdCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKQoreworICAgIC8qCisgICAgICogTmV2ZXIgcmV0dXJuICdXT1VMRCBCTE9DSycgb24gYSBub24tYmxvY2tpbmcgc29ja2V0CisgICAgICovCisgICAgaWYoICggZmNudGwoIGN0eC0+ZmQsIEZfR0VURkwgKSAmIE9fTk9OQkxPQ0sgKSAhPSBPX05PTkJMT0NLICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBzd2l0Y2goIGVycm5vICkKKyAgICB7CisjaWYgZGVmaW5lZCBFQUdBSU4KKyAgICAgICAgY2FzZSBFQUdBSU46CisjZW5kaWYKKyNpZiBkZWZpbmVkIEVXT1VMREJMT0NLICYmIEVXT1VMREJMT0NLICE9IEVBR0FJTgorICAgICAgICBjYXNlIEVXT1VMREJMT0NLOgorI2VuZGlmCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogKCBfV0lOMzIgfHwgX1dJTjMyX1dDRSApICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKy8qCisgKiBBY2NlcHQgYSBjb25uZWN0aW9uIGZyb20gYSByZW1vdGUgY2xpZW50CisgKi8KK2ludCBtYmVkdGxzX25ldF9hY2NlcHQoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmJpbmRfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19uZXRfY29udGV4dCAqY2xpZW50X2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudF9pcCwgc2l6ZV90IGJ1Zl9zaXplLCBzaXplX3QgKmlwX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBpbnQgdHlwZTsKKworICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudF9hZGRyOworCisjaWYgZGVmaW5lZChfX3NvY2tsZW5fdF9kZWZpbmVkKSB8fCBkZWZpbmVkKF9TT0NLTEVOX1QpIHx8ICBcCisgICAgZGVmaW5lZChfU09DS0xFTl9UX0RFQ0xBUkVEKSB8fCBkZWZpbmVkKF9fREVGSU5FRF9zb2NrbGVuX3QpCisgICAgc29ja2xlbl90IG4gPSAoc29ja2xlbl90KSBzaXplb2YoIGNsaWVudF9hZGRyICk7CisgICAgc29ja2xlbl90IHR5cGVfbGVuID0gKHNvY2tsZW5fdCkgc2l6ZW9mKCB0eXBlICk7CisjZWxzZQorICAgIGludCBuID0gKGludCkgc2l6ZW9mKCBjbGllbnRfYWRkciApOworICAgIGludCB0eXBlX2xlbiA9IChpbnQpIHNpemVvZiggdHlwZSApOworI2VuZGlmCisKKyAgICAvKiBJcyB0aGlzIGEgVENQIG9yIFVEUCBzb2NrZXQ/ICovCisgICAgaWYoIGdldHNvY2tvcHQoIGJpbmRfY3R4LT5mZCwgU09MX1NPQ0tFVCwgU09fVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJnR5cGUsICZ0eXBlX2xlbiApICE9IDAgfHwKKyAgICAgICAgKCB0eXBlICE9IFNPQ0tfU1RSRUFNICYmIHR5cGUgIT0gU09DS19ER1JBTSApICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX0FDQ0VQVF9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBpZiggdHlwZSA9PSBTT0NLX1NUUkVBTSApCisgICAgeworICAgICAgICAvKiBUQ1A6IGFjdHVhbCBhY2NlcHQoKSAqLworICAgICAgICByZXQgPSBjbGllbnRfY3R4LT5mZCA9IChpbnQpIGFjY2VwdCggYmluZF9jdHgtPmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZjbGllbnRfYWRkciwgJm4gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVURQOiB3YWl0IGZvciBhIG1lc3NhZ2UsIGJ1dCBrZWVwIGl0IGluIHRoZSBxdWV1ZSAqLworICAgICAgICBjaGFyIGJ1ZlsxXSA9IHsgMCB9OworCisgICAgICAgIHJldCA9IChpbnQpIHJlY3Zmcm9tKCBiaW5kX2N0eC0+ZmQsIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgTVNHX1BFRUssCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZjbGllbnRfYWRkciwgJm4gKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBpZiggcmV0ID09IFNPQ0tFVF9FUlJPUiAmJgorICAgICAgICAgICAgV1NBR2V0TGFzdEVycm9yKCkgPT0gV1NBRU1TR1NJWkUgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXZSBrbm93IGJ1ZiBpcyB0b28gc21hbGwsIHRoYW5rcywganVzdCBwZWVraW5nIGhlcmUgKi8KKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisgICAgICAgIGlmKCBuZXRfd291bGRfYmxvY2soIGJpbmRfY3R4ICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9BQ0NFUFRfRkFJTEVEICk7CisgICAgfQorCisgICAgLyogVURQOiBoaWphY2sgdGhlIGxpc3RlbmluZyBzb2NrZXQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xpZW50LAorICAgICAqIHRoZW4gYmluZCBhIG5ldyBzb2NrZXQgdG8gYWNjZXB0IG5ldyBjb25uZWN0aW9ucyAqLworICAgIGlmKCB0eXBlICE9IFNPQ0tfU1RSRUFNICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsX2FkZHI7CisgICAgICAgIGludCBvbmUgPSAxOworCisgICAgICAgIGlmKCBjb25uZWN0KCBiaW5kX2N0eC0+ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNsaWVudF9hZGRyLCBuICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9BQ0NFUFRfRkFJTEVEICk7CisKKyAgICAgICAgY2xpZW50X2N0eC0+ZmQgPSBiaW5kX2N0eC0+ZmQ7CisgICAgICAgIGJpbmRfY3R4LT5mZCAgID0gLTE7IC8qIEluIGNhc2Ugd2UgZXhpdCBlYXJseSAqLworCisgICAgICAgIG4gPSBzaXplb2YoIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICk7CisgICAgICAgIGlmKCBnZXRzb2NrbmFtZSggY2xpZW50X2N0eC0+ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmbG9jYWxfYWRkciwgJm4gKSAhPSAwIHx8CisgICAgICAgICAgICAoIGJpbmRfY3R4LT5mZCA9IChpbnQpIHNvY2tldCggbG9jYWxfYWRkci5zc19mYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09DS19ER1JBTSwgSVBQUk9UT19VRFAgKSApIDwgMCB8fAorICAgICAgICAgICAgc2V0c29ja29wdCggYmluZF9jdHgtPmZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSAmb25lLCBzaXplb2YoIG9uZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX1NPQ0tFVF9GQUlMRUQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBiaW5kKCBiaW5kX2N0eC0+ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmxvY2FsX2FkZHIsIG4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfQklORF9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBjbGllbnRfaXAgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggY2xpZW50X2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQgKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmY2xpZW50X2FkZHI7CisgICAgICAgICAgICAqaXBfbGVuID0gc2l6ZW9mKCBhZGRyNC0+c2luX2FkZHIuc19hZGRyICk7CisKKyAgICAgICAgICAgIGlmKCBidWZfc2l6ZSA8ICppcF9sZW4gKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgICAgICAgICAgbWVtY3B5KCBjbGllbnRfaXAsICZhZGRyNC0+c2luX2FkZHIuc19hZGRyLCAqaXBfbGVuICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZjbGllbnRfYWRkcjsKKyAgICAgICAgICAgICppcF9sZW4gPSBzaXplb2YoIGFkZHI2LT5zaW42X2FkZHIuczZfYWRkciApOworCisgICAgICAgICAgICBpZiggYnVmX3NpemUgPCAqaXBfbGVuICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAgICAgICAgIG1lbWNweSggY2xpZW50X2lwLCAmYWRkcjYtPnNpbjZfYWRkci5zNl9hZGRyLCAqaXBfbGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU2V0IHRoZSBzb2NrZXQgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nCisgKi8KK2ludCBtYmVkdGxzX25ldF9zZXRfYmxvY2soIG1iZWR0bHNfbmV0X2NvbnRleHQgKmN0eCApCit7CisjaWYgKCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSApICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorICAgIHVfbG9uZyBuID0gMDsKKyAgICByZXR1cm4oIGlvY3Rsc29ja2V0KCBjdHgtPmZkLCBGSU9OQklPLCAmbiApICk7CisjZWxzZQorICAgIHJldHVybiggZmNudGwoIGN0eC0+ZmQsIEZfU0VURkwsIGZjbnRsKCBjdHgtPmZkLCBGX0dFVEZMICkgJiB+T19OT05CTE9DSyApICk7CisjZW5kaWYKK30KKworaW50IG1iZWR0bHNfbmV0X3NldF9ub25ibG9jayggbWJlZHRsc19uZXRfY29udGV4dCAqY3R4ICkKK3sKKyNpZiAoIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpICkgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiBcCisgICAgIWRlZmluZWQoRUZJMzIpCisgICAgdV9sb25nIG4gPSAxOworICAgIHJldHVybiggaW9jdGxzb2NrZXQoIGN0eC0+ZmQsIEZJT05CSU8sICZuICkgKTsKKyNlbHNlCisgICAgcmV0dXJuKCBmY250bCggY3R4LT5mZCwgRl9TRVRGTCwgZmNudGwoIGN0eC0+ZmQsIEZfR0VURkwgKSB8IE9fTk9OQkxPQ0sgKSApOworI2VuZGlmCit9CisKKy8qCisgKiBQb3J0YWJsZSB1c2xlZXAgaGVscGVyCisgKi8KK3ZvaWQgbWJlZHRsc19uZXRfdXNsZWVwKCB1bnNpZ25lZCBsb25nIHVzZWMgKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIFNsZWVwKCAoIHVzZWMgKyA5OTkgKSAvIDEwMDAgKTsKKyNlbHNlCisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgdHYudHZfc2VjICA9IHVzZWMgLyAxMDAwMDAwOworI2lmIGRlZmluZWQoX191bml4X18pIHx8IGRlZmluZWQoX191bml4KSB8fCBcCisgICAgKCBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykgKQorICAgIHR2LnR2X3VzZWMgPSAoc3VzZWNvbmRzX3QpIHVzZWMgJSAxMDAwMDAwOworI2Vsc2UKKyAgICB0di50dl91c2VjID0gdXNlYyAlIDEwMDAwMDA7CisjZW5kaWYKKyAgICBzZWxlY3QoIDAsIE5VTEwsIE5VTEwsIE5VTEwsICZ0diApOworI2VuZGlmCit9CisKKy8qCisgKiBSZWFkIGF0IG1vc3QgJ2xlbicgY2hhcmFjdGVycworICovCitpbnQgbWJlZHRsc19uZXRfcmVjdiggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisgICAgaW50IGZkID0gKChtYmVkdGxzX25ldF9jb250ZXh0ICopIGN0eCktPmZkOworCisgICAgaWYoIGZkIDwgMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX0lOVkFMSURfQ09OVEVYVCApOworCisgICAgcmV0ID0gKGludCkgcmVhZCggZmQsIGJ1ZiwgbGVuICk7CisKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBpZiggbmV0X3dvdWxkX2Jsb2NrKCBjdHggKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworCisjaWYgKCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSApICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorICAgICAgICBpZiggV1NBR2V0TGFzdEVycm9yKCkgPT0gV1NBRUNPTk5SRVNFVCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUICk7CisjZWxzZQorICAgICAgICBpZiggZXJybm8gPT0gRVBJUEUgfHwgZXJybm8gPT0gRUNPTk5SRVNFVCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUICk7CisKKyAgICAgICAgaWYoIGVycm5vID09IEVJTlRSICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfUkVDVl9GQUlMRUQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUmVhZCBhdCBtb3N0ICdsZW4nIGNoYXJhY3RlcnMsIGJsb2NraW5nIGZvciBhdCBtb3N0ICd0aW1lb3V0JyBtcworICovCitpbnQgbWJlZHRsc19uZXRfcmVjdl90aW1lb3V0KCB2b2lkICpjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0aW1lb3V0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIGZkX3NldCByZWFkX2ZkczsKKyAgICBpbnQgZmQgPSAoKG1iZWR0bHNfbmV0X2NvbnRleHQgKikgY3R4KS0+ZmQ7CisKKyAgICBpZiggZmQgPCAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9ORVRfSU5WQUxJRF9DT05URVhUICk7CisKKyAgICBGRF9aRVJPKCAmcmVhZF9mZHMgKTsKKyAgICBGRF9TRVQoIGZkLCAmcmVhZF9mZHMgKTsKKworICAgIHR2LnR2X3NlYyAgPSB0aW1lb3V0IC8gMTAwMDsKKyAgICB0di50dl91c2VjID0gKCB0aW1lb3V0ICUgMTAwMCApICogMTAwMDsKKworICAgIHJldCA9IHNlbGVjdCggZmQgKyAxLCAmcmVhZF9mZHMsIE5VTEwsIE5VTEwsIHRpbWVvdXQgPT0gMCA/IE5VTEwgOiAmdHYgKTsKKworICAgIC8qIFplcm8gZmRzIHJlYWR5IG1lYW5zIHdlIHRpbWVkIG91dCAqLworICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQgKTsKKworICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisjaWYgKCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSApICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorICAgICAgICBpZiggV1NBR2V0TGFzdEVycm9yKCkgPT0gV1NBRUlOVFIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisjZWxzZQorICAgICAgICBpZiggZXJybm8gPT0gRUlOVFIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9SRUNWX0ZBSUxFRCApOworICAgIH0KKworICAgIC8qIFRoaXMgY2FsbCB3aWxsIG5vdCBibG9jayAqLworICAgIHJldHVybiggbWJlZHRsc19uZXRfcmVjdiggY3R4LCBidWYsIGxlbiApICk7Cit9CisKKy8qCisgKiBXcml0ZSBhdCBtb3N0ICdsZW4nIGNoYXJhY3RlcnMKKyAqLworaW50IG1iZWR0bHNfbmV0X3NlbmQoIHZvaWQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGludCBmZCA9ICgobWJlZHRsc19uZXRfY29udGV4dCAqKSBjdHgpLT5mZDsKKworICAgIGlmKCBmZCA8IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9JTlZBTElEX0NPTlRFWFQgKTsKKworICAgIHJldCA9IChpbnQpIHdyaXRlKCBmZCwgYnVmLCBsZW4gKTsKKworICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisgICAgICAgIGlmKCBuZXRfd291bGRfYmxvY2soIGN0eCApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisjaWYgKCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSApICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgXAorICAgICFkZWZpbmVkKEVGSTMyKQorICAgICAgICBpZiggV1NBR2V0TGFzdEVycm9yKCkgPT0gV1NBRUNPTk5SRVNFVCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUICk7CisjZWxzZQorICAgICAgICBpZiggZXJybm8gPT0gRVBJUEUgfHwgZXJybm8gPT0gRUNPTk5SRVNFVCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUICk7CisKKyAgICAgICAgaWYoIGVycm5vID09IEVJTlRSICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTkVUX1NFTkRfRkFJTEVEICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEdyYWNlZnVsbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKyAqLwordm9pZCBtYmVkdGxzX25ldF9mcmVlKCBtYmVkdGxzX25ldF9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHgtPmZkID09IC0xICkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2h1dGRvd24oIGN0eC0+ZmQsIDIgKTsKKyAgICBjbG9zZSggY3R4LT5mZCApOworCisgICAgY3R4LT5mZCA9IC0xOworfQorCisjZW5kaWYgLyogTUJFRFRMU19ORVRfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvb2lkLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9vaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTM4MjZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvb2lkLmMKQEAgLTAsMCArMSw3MTAgQEAKKy8qKgorICogXGZpbGUgb2lkLmMKKyAqCisgKiBcYnJpZWYgT2JqZWN0IElkZW50aWZpZXIgKE9JRCkgZGF0YWJhc2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19PSURfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmIHNucHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNlbmRpZgorCisvKgorICogTWFjcm8gdG8gYXV0b21hdGljYWxseSBhZGQgdGhlIHNpemUgb2YgI2RlZmluZSdkIE9JRHMKKyAqLworI2RlZmluZSBBRERfTEVOKHMpICAgICAgcywgTUJFRFRMU19PSURfU0laRShzKQorCisvKgorICogTWFjcm8gdG8gZ2VuZXJhdGUgYW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIG9pZF9YWFhfZnJvbV9hc24xKCkgKHVzZWQgYnkKKyAqIHRoZSBvdGhlciBmdW5jdGlvbnMpCisgKi8KKyNkZWZpbmUgRk5fT0lEX1RZUEVEX0ZST01fQVNOMSggVFlQRV9ULCBOQU1FLCBMSVNUICkgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgY29uc3QgVFlQRV9UICogb2lkXyAjIyBOQU1FICMjIF9mcm9tX2FzbjEoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCApICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbnN0IFRZUEVfVCAqcCA9IExJU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zdCBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgKmN1ciA9IChjb25zdCBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgKikgcDsgICAgICAgICAgICAgXAorICAgIGlmKCBwID09IE5VTEwgfHwgb2lkID09IE5VTEwgKSByZXR1cm4oIE5VTEwgKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSggY3VyLT5hc24xICE9IE5VTEwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCBjdXItPmFzbjFfbGVuID09IG9pZC0+bGVuICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbWVtY21wKCBjdXItPmFzbjEsIG9pZC0+cCwgb2lkLT5sZW4gKSA9PSAwICkgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiggcCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3VyID0gKGNvbnN0IG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAqKSBwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuKCBOVUxMICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKgorICogTWFjcm8gdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyBhIHNpbmdsZSBhdHRyaWJ1dGUgZnJvbSB0aGUKKyAqIGRlc2NyaXB0b3Igb2YgYW4gbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90IHdyYXBwZXIuCisgKi8KKyNkZWZpbmUgRk5fT0lEX0dFVF9ERVNDUklQVE9SX0FUVFIxKEZOX05BTUUsIFRZUEVfVCwgVFlQRV9OQU1FLCBBVFRSMV9UWVBFLCBBVFRSMSkgXAoraW50IEZOX05BTUUoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCwgQVRUUjFfVFlQRSAqIEFUVFIxICkgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29uc3QgVFlQRV9UICpkYXRhID0gb2lkXyAjIyBUWVBFX05BTUUgIyMgX2Zyb21fYXNuMSggb2lkICk7ICAgICAgICBcCisgICAgaWYoIGRhdGEgPT0gTlVMTCApIHJldHVybiggTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORCApOyAgICAgICAgICAgIFwKKyAgICAqQVRUUjEgPSBkYXRhLT5kZXNjcmlwdG9yLkFUVFIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4oIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIE1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgYSBzaW5nbGUgYXR0cmlidXRlIGZyb20gYW4KKyAqIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCB3cmFwcGVyLgorICovCisjZGVmaW5lIEZOX09JRF9HRVRfQVRUUjEoRk5fTkFNRSwgVFlQRV9ULCBUWVBFX05BTUUsIEFUVFIxX1RZUEUsIEFUVFIxKSBcCitpbnQgRk5fTkFNRSggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLCBBVFRSMV9UWVBFICogQVRUUjEgKSAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zdCBUWVBFX1QgKmRhdGEgPSBvaWRfICMjIFRZUEVfTkFNRSAjIyBfZnJvbV9hc24xKCBvaWQgKTsgICAgICAgIFwKKyAgICBpZiggZGF0YSA9PSBOVUxMICkgcmV0dXJuKCBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5EICk7ICAgICAgICAgICAgXAorICAgICpBVFRSMSA9IGRhdGEtPkFUVFIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiggMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKgorICogTWFjcm8gdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0d28gYXR0cmlidXRlcyBmcm9tIGFuCisgKiBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3Qgd3JhcHBlci4KKyAqLworI2RlZmluZSBGTl9PSURfR0VUX0FUVFIyKEZOX05BTUUsIFRZUEVfVCwgVFlQRV9OQU1FLCBBVFRSMV9UWVBFLCBBVFRSMSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBVFRSMl9UWVBFLCBBVFRSMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbnQgRk5fTkFNRSggY29uc3QgbWJlZHRsc19hc24xX2J1ZiAqb2lkLCBBVFRSMV9UWVBFICogQVRUUjEsIEFUVFIyX1RZUEUgKiBBVFRSMiApICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbnN0IFRZUEVfVCAqZGF0YSA9IG9pZF8gIyMgVFlQRV9OQU1FICMjIF9mcm9tX2FzbjEoIG9pZCApOyAgICAgICAgICAgIFwKKyAgICBpZiggZGF0YSA9PSBOVUxMICkgcmV0dXJuKCBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5EICk7ICAgICAgICAgICAgICAgIFwKKyAgICAqQVRUUjEgPSBkYXRhLT5BVFRSMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKkFUVFIyID0gZGF0YS0+QVRUUjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiggMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoKKyAqIE1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIE9JRCBiYXNlZCBvbiBhIHNpbmdsZQorICogYXR0cmlidXRlIGZyb20gYSBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3Qgd3JhcHBlci4KKyAqLworI2RlZmluZSBGTl9PSURfR0VUX09JRF9CWV9BVFRSMShGTl9OQU1FLCBUWVBFX1QsIExJU1QsIEFUVFIxX1RZUEUsIEFUVFIxKSAgIFwKK2ludCBGTl9OQU1FKCBBVFRSMV9UWVBFIEFUVFIxLCBjb25zdCBjaGFyICoqb2lkLCBzaXplX3QgKm9sZW4gKSAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbnN0IFRZUEVfVCAqY3VyID0gTElTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSggY3VyLT5kZXNjcmlwdG9yLmFzbjEgIT0gTlVMTCApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCBjdXItPkFUVFIxID09IEFUVFIxICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKm9pZCA9IGN1ci0+ZGVzY3JpcHRvci5hc24xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICpvbGVuID0gY3VyLT5kZXNjcmlwdG9yLmFzbjFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4oIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3VyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiggTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKgorICogTWFjcm8gdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgT0lEIGJhc2VkIG9uIHR3bworICogYXR0cmlidXRlcyBmcm9tIGEgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90IHdyYXBwZXIuCisgKi8KKyNkZWZpbmUgRk5fT0lEX0dFVF9PSURfQllfQVRUUjIoRk5fTkFNRSwgVFlQRV9ULCBMSVNULCBBVFRSMV9UWVBFLCBBVFRSMSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUVFIyX1RZUEUsIEFUVFIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAoraW50IEZOX05BTUUoIEFUVFIxX1RZUEUgQVRUUjEsIEFUVFIyX1RZUEUgQVRUUjIsIGNvbnN0IGNoYXIgKipvaWQgLCAgICAgICAgIFwKKyAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbnN0IFRZUEVfVCAqY3VyID0gTElTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSggY3VyLT5kZXNjcmlwdG9yLmFzbjEgIT0gTlVMTCApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKCBjdXItPkFUVFIxID09IEFUVFIxICYmIGN1ci0+QVRUUjIgPT0gQVRUUjIgKSB7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKm9pZCA9IGN1ci0+ZGVzY3JpcHRvci5hc24xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICpvbGVuID0gY3VyLT5kZXNjcmlwdG9yLmFzbjFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4oIDAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3VyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiggTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpIHx8IGRlZmluZWQoTUJFRFRMU19YNTA5X0NSRUFURV9DKQorLyoKKyAqIEZvciBYNTIwIGF0dHJpYnV0ZSB0eXBlcworICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICAgIGRlc2NyaXB0b3I7CisgICAgY29uc3QgY2hhciAgICAgICAgICAqc2hvcnRfbmFtZTsKK30gb2lkX3g1MjBfYXR0cl90OworCitzdGF0aWMgY29uc3Qgb2lkX3g1MjBfYXR0cl90IG9pZF94NTIwX2F0dHJfdHlwZVtdID0KK3sKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfQ04gKSwgICAgICAgICAgImlkLWF0LWNvbW1vbk5hbWUiLCAgICAgICAgICAgICAgICJDb21tb24gTmFtZSIgfSwKKyAgICAgICAgIkNOIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9DT1VOVFJZICksICAgICAiaWQtYXQtY291bnRyeU5hbWUiLCAgICAgICAgICAgICAgIkNvdW50cnkiIH0sCisgICAgICAgICJDIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9MT0NBTElUWSApLCAgICAiaWQtYXQtbG9jYWxpdHkiLCAgICAgICAgICAgICAgICAgIkxvY2FsaXR5IiB9LAorICAgICAgICAiTCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfU1RBVEUgKSwgICAgICAgImlkLWF0LXN0YXRlIiwgICAgICAgICAgICAgICAgICAgICJTdGF0ZSIgfSwKKyAgICAgICAgIlNUIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9PUkdBTklaQVRJT04gKSwiaWQtYXQtb3JnYW5pemF0aW9uTmFtZSIsICAgICAgICAgIk9yZ2FuaXphdGlvbiIgfSwKKyAgICAgICAgIk8iLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX09SR19VTklUICksICAgICJpZC1hdC1vcmdhbml6YXRpb25hbFVuaXROYW1lIiwgICAiT3JnIFVuaXQiIH0sCisgICAgICAgICJPVSIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzlfRU1BSUwgKSwgICAgImVtYWlsQWRkcmVzcyIsICAgICAgICAgICAgICAgICAgICJFLW1haWwgYWRkcmVzcyIgfSwKKyAgICAgICAgImVtYWlsQWRkcmVzcyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfU0VSSUFMX05VTUJFUiApLCJpZC1hdC1zZXJpYWxOdW1iZXIiLCAgICAgICAgICAgICJTZXJpYWwgbnVtYmVyIiB9LAorICAgICAgICAic2VyaWFsTnVtYmVyIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9QT1NUQUxfQUREUkVTUyApLCJpZC1hdC1wb3N0YWxBZGRyZXNzIiwgICAgICAgICAgIlBvc3RhbCBhZGRyZXNzIiB9LAorICAgICAgICAicG9zdGFsQWRkcmVzcyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfUE9TVEFMX0NPREUgKSwgImlkLWF0LXBvc3RhbENvZGUiLCAgICAgICAgICAgICAgICJQb3N0YWwgY29kZSIgfSwKKyAgICAgICAgInBvc3RhbENvZGUiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1NVUl9OQU1FICksICAgICJpZC1hdC1zdXJOYW1lIiwgICAgICAgICAgICAgICAgICAiU3VybmFtZSIgfSwKKyAgICAgICAgIlNOIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9HSVZFTl9OQU1FICksICAiaWQtYXQtZ2l2ZW5OYW1lIiwgICAgICAgICAgICAgICAgIkdpdmVuIG5hbWUiIH0sCisgICAgICAgICJHTiIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfSU5JVElBTFMgKSwgICAgImlkLWF0LWluaXRpYWxzIiwgICAgICAgICAgICAgICAgICJJbml0aWFscyIgfSwKKyAgICAgICAgImluaXRpYWxzIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUiApLCAiaWQtYXQtZ2VuZXJhdGlvblF1YWxpZmllciIsICJHZW5lcmF0aW9uIHF1YWxpZmllciIgfSwKKyAgICAgICAgImdlbmVyYXRpb25RdWFsaWZpZXIiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1RJVExFICksICAgICAgICJpZC1hdC10aXRsZSIsICAgICAgICAgICAgICAgICAgICAiVGl0bGUiIH0sCisgICAgICAgICJ0aXRsZSIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfRE5fUVVBTElGSUVSICksImlkLWF0LWRuUXVhbGlmaWVyIiwgICAgICAgICAgICAgICJEaXN0aW5ndWlzaGVkIE5hbWUgcXVhbGlmaWVyIiB9LAorICAgICAgICAiZG5RdWFsaWZpZXIiLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0FUX1BTRVVET05ZTSApLCAgICJpZC1hdC1wc2V1ZG9ueW0iLCAgICAgICAgICAgICAgICAiUHNldWRvbnltIiB9LAorICAgICAgICAicHNldWRvbnltIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ET01BSU5fQ09NUE9ORU5UICksICJpZC1kb21haW5Db21wb25lbnQiLCAgICAgICAgICAgIkRvbWFpbiBjb21wb25lbnQiIH0sCisgICAgICAgICJEQyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfQVRfVU5JUVVFX0lERU5USUZJRVIgKSwgImlkLWF0LXVuaXF1ZUlkZW50aWZpZXIiLCAgICAiVW5pcXVlIElkZW50aWZpZXIiIH0sCisgICAgICAgICJ1bmlxdWVJZGVudGlmaWVyIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0sCisgICAgICAgIE5VTEwsCisgICAgfQorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfeDUyMF9hdHRyX3QsIHg1MjBfYXR0ciwgb2lkX3g1MjBfYXR0cl90eXBlKQorRk5fT0lEX0dFVF9BVFRSMShtYmVkdGxzX29pZF9nZXRfYXR0cl9zaG9ydF9uYW1lLCBvaWRfeDUyMF9hdHRyX3QsIHg1MjBfYXR0ciwgY29uc3QgY2hhciAqLCBzaG9ydF9uYW1lKQorCisvKgorICogRm9yIFg1MDkgZXh0ZW5zaW9ucworICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICAgIGRlc2NyaXB0b3I7CisgICAgaW50ICAgICAgICAgICAgICAgICBleHRfdHlwZTsKK30gb2lkX3g1MDlfZXh0X3Q7CisKK3N0YXRpYyBjb25zdCBvaWRfeDUwOV9leHRfdCBvaWRfeDUwOV9leHRbXSA9Cit7CisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0JBU0lDX0NPTlNUUkFJTlRTICksICAgICJpZC1jZS1iYXNpY0NvbnN0cmFpbnRzIiwgICAiQmFzaWMgQ29uc3RyYWludHMiIH0sCisgICAgICAgIE1CRURUTFNfWDUwOV9FWFRfQkFTSUNfQ09OU1RSQUlOVFMsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfS0VZX1VTQUdFICksICAgICAgICAgICAgImlkLWNlLWtleVVzYWdlIiwgICAgICAgICAgICJLZXkgVXNhZ2UiIH0sCisgICAgICAgIE1CRURUTFNfWDUwOV9FWFRfS0VZX1VTQUdFLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VYVEVOREVEX0tFWV9VU0FHRSApLCAgICJpZC1jZS1leHRLZXlVc2FnZSIsICAgICAgICAiRXh0ZW5kZWQgS2V5IFVzYWdlIiB9LAorICAgICAgICBNQkVEVExTX1g1MDlfRVhUX0VYVEVOREVEX0tFWV9VU0FHRSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9TVUJKRUNUX0FMVF9OQU1FICksICAgICAiaWQtY2Utc3ViamVjdEFsdE5hbWUiLCAgICAgIlN1YmplY3QgQWx0IE5hbWUiIH0sCisgICAgICAgIE1CRURUTFNfWDUwOV9FWFRfU1VCSkVDVF9BTFRfTkFNRSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9OU19DRVJUX1RZUEUgKSwgICAgICAgICAiaWQtbmV0c2NhcGUtY2VydHR5cGUiLCAgICAgIk5ldHNjYXBlIENlcnRpZmljYXRlIFR5cGUiIH0sCisgICAgICAgIE1CRURUTFNfWDUwOV9FWFRfTlNfQ0VSVF9UWVBFLAorICAgIH0sCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgMCwKKyAgICB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfeDUwOV9leHRfdCwgeDUwOV9leHQsIG9pZF94NTA5X2V4dCkKK0ZOX09JRF9HRVRfQVRUUjEobWJlZHRsc19vaWRfZ2V0X3g1MDlfZXh0X3R5cGUsIG9pZF94NTA5X2V4dF90LCB4NTA5X2V4dCwgaW50LCBleHRfdHlwZSkKKworc3RhdGljIGNvbnN0IG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCBvaWRfZXh0X2tleV91c2FnZVtdID0KK3sKKyAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1NFUlZFUl9BVVRIICksICAgICAgImlkLWtwLXNlcnZlckF1dGgiLCAgICAgICJUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbiIgfSwKKyAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0NMSUVOVF9BVVRIICksICAgICAgImlkLWtwLWNsaWVudEF1dGgiLCAgICAgICJUTFMgV2ViIENsaWVudCBBdXRoZW50aWNhdGlvbiIgfSwKKyAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0NPREVfU0lHTklORyApLCAgICAgImlkLWtwLWNvZGVTaWduaW5nIiwgICAgICJDb2RlIFNpZ25pbmciIH0sCisgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FTUFJTF9QUk9URUNUSU9OICksICJpZC1rcC1lbWFpbFByb3RlY3Rpb24iLCAiRS1tYWlsIFByb3RlY3Rpb24iIH0sCisgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9USU1FX1NUQU1QSU5HICksICAgICJpZC1rcC10aW1lU3RhbXBpbmciLCAgICAiVGltZSBTdGFtcGluZyIgfSwKKyAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX09DU1BfU0lHTklORyApLCAgICAgImlkLWtwLU9DU1BTaWduaW5nIiwgICAgICJPQ1NQIFNpZ25pbmciIH0sCisgICAgeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0sCit9OworCitGTl9PSURfVFlQRURfRlJPTV9BU04xKG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCwgZXh0X2tleV91c2FnZSwgb2lkX2V4dF9rZXlfdXNhZ2UpCitGTl9PSURfR0VUX0FUVFIxKG1iZWR0bHNfb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UsIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCwgZXh0X2tleV91c2FnZSwgY29uc3QgY2hhciAqLCBkZXNjcmlwdGlvbikKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfVVNFX0MgfHwgTUJFRFRMU19YNTA5X0NSRUFURV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKy8qCisgKiBGb3IgU2lnbmF0dXJlQWxnb3JpdGhtSWRlbnRpZmllcgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICAgIGRlc2NyaXB0b3I7CisgICAgbWJlZHRsc19tZF90eXBlX3QgICAgICAgICAgIG1kX2FsZzsKKyAgICBtYmVkdGxzX3BrX3R5cGVfdCAgICAgICAgICAgcGtfYWxnOworfSBvaWRfc2lnX2FsZ190OworCitzdGF0aWMgY29uc3Qgb2lkX3NpZ19hbGdfdCBvaWRfc2lnX2FsZ1tdID0KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMV9NRDIgKSwgICAgICAgICJtZDJXaXRoUlNBRW5jcnlwdGlvbiIsICAgICAiUlNBIHdpdGggTUQyIiB9LAorICAgICAgICBNQkVEVExTX01EX01EMiwgICAgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfTUQyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxX01ENCApLCAgICAgICAgIm1kNFdpdGhSU0FFbmNyeXB0aW9uIiwgICAgICJSU0Egd2l0aCBNRDQiIH0sCisgICAgICAgIE1CRURUTFNfTURfTUQ0LCAgICAgIE1CRURUTFNfUEtfUlNBLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19NRDRfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzFfTUQ1ICksICAgICAgICAibWQ1V2l0aFJTQUVuY3J5cHRpb24iLCAgICAgIlJTQSB3aXRoIE1ENSIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9NRDUsICAgICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzFfU0hBMSApLCAgICAgICAic2hhLTFXaXRoUlNBRW5jcnlwdGlvbiIsICAgIlJTQSB3aXRoIFNIQTEiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMSwgICAgIE1CRURUTFNfUEtfUlNBLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxX1NIQTIyNCApLCAgICAgInNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIiwgICJSU0Egd2l0aCBTSEEtMjI0IiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTIyNCwgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMV9TSEEyNTYgKSwgICAgICJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiIsICAiUlNBIHdpdGggU0hBLTI1NiIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9QS0NTMV9TSEEzODQgKSwgICAgICJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiIsICAiUlNBIHdpdGggU0hBLTM4NCIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEzODQsICAgTUJFRFRMU19QS19SU0EsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzFfU0hBNTEyICksICAgICAic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iLCAgIlJTQSB3aXRoIFNIQS01MTIiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBNTEyLCAgIE1CRURUTFNfUEtfUlNBLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1JTQV9TSEFfT0JTICksICAgICAgInNoYS0xV2l0aFJTQUVuY3J5cHRpb24iLCAgICJSU0Egd2l0aCBTSEExIiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTEsICAgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDRFNBX1NIQTEgKSwgICAgICAgImVjZHNhLXdpdGgtU0hBMSIsICAgICAgIkVDRFNBIHdpdGggU0hBMSIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEExLCAgICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ0RTQV9TSEEyMjQgKSwgICAgICJlY2RzYS13aXRoLVNIQTIyNCIsICAgICJFQ0RTQSB3aXRoIFNIQTIyNCIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEyMjQsICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ0RTQV9TSEEyNTYgKSwgICAgICJlY2RzYS13aXRoLVNIQTI1NiIsICAgICJFQ0RTQSB3aXRoIFNIQTI1NiIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDRFNBX1NIQTM4NCApLCAgICAgImVjZHNhLXdpdGgtU0hBMzg0IiwgICAgIkVDRFNBIHdpdGggU0hBMzg0IiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTM4NCwgICBNQkVEVExTX1BLX0VDRFNBLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDRFNBX1NIQTUxMiApLCAgICAgImVjZHNhLXdpdGgtU0hBNTEyIiwgICAgIkVDRFNBIHdpdGggU0hBNTEyIiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTUxMiwgICBNQkVEVExTX1BLX0VDRFNBLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfRUNEU0FfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUlNBU1NBX1BTUyApLCAgICAgICAgIlJTQVNTQS1QU1MiLCAgICAgICAgICAgIlJTQVNTQS1QU1MiIH0sCisgICAgICAgIE1CRURUTFNfTURfTk9ORSwgICAgIE1CRURUTFNfUEtfUlNBU1NBX1BTUywKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyAgICB7CisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9LAorICAgICAgICBNQkVEVExTX01EX05PTkUsIE1CRURUTFNfUEtfTk9ORSwKKyAgICB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfc2lnX2FsZ190LCBzaWdfYWxnLCBvaWRfc2lnX2FsZykKK0ZOX09JRF9HRVRfREVTQ1JJUFRPUl9BVFRSMShtYmVkdGxzX29pZF9nZXRfc2lnX2FsZ19kZXNjLCBvaWRfc2lnX2FsZ190LCBzaWdfYWxnLCBjb25zdCBjaGFyICosIGRlc2NyaXB0aW9uKQorRk5fT0lEX0dFVF9BVFRSMihtYmVkdGxzX29pZF9nZXRfc2lnX2FsZywgb2lkX3NpZ19hbGdfdCwgc2lnX2FsZywgbWJlZHRsc19tZF90eXBlX3QsIG1kX2FsZywgbWJlZHRsc19wa190eXBlX3QsIHBrX2FsZykKK0ZOX09JRF9HRVRfT0lEX0JZX0FUVFIyKG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfc2lnX2FsZywgb2lkX3NpZ19hbGdfdCwgb2lkX3NpZ19hbGcsIG1iZWR0bHNfcGtfdHlwZV90LCBwa19hbGcsIG1iZWR0bHNfbWRfdHlwZV90LCBtZF9hbGcpCisjZW5kaWYgLyogTUJFRFRMU19NRF9DICovCisKKy8qCisgKiBGb3IgUHVibGljS2V5SW5mbyAoUEtDUzEsIFJGQyA1NDgwKQorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90ICAgIGRlc2NyaXB0b3I7CisgICAgbWJlZHRsc19wa190eXBlX3QgICAgICAgICAgIHBrX2FsZzsKK30gb2lkX3BrX2FsZ190OworCitzdGF0aWMgY29uc3Qgb2lkX3BrX2FsZ190IG9pZF9wa19hbGdbXSA9Cit7CisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxX1JTQSApLCAgICAgICJyc2FFbmNyeXB0aW9uIiwgICAiUlNBIiB9LAorICAgICAgICBNQkVEVExTX1BLX1JTQSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19BTEdfVU5SRVNUUklDVEVEICksICAiaWQtZWNQdWJsaWNLZXkiLCAgICJHZW5lcmljIEVDIGtleSIgfSwKKyAgICAgICAgTUJFRFRMU19QS19FQ0tFWSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19BTEdfRUNESCApLCAgICAgICAgICAiaWQtZWNESCIsICAgICAgICAgICJFQyBrZXkgZm9yIEVDREgiIH0sCisgICAgICAgIE1CRURUTFNfUEtfRUNLRVlfREgsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9LAorICAgICAgICBNQkVEVExTX1BLX05PTkUsCisgICAgfSwKK307CisKK0ZOX09JRF9UWVBFRF9GUk9NX0FTTjEob2lkX3BrX2FsZ190LCBwa19hbGcsIG9pZF9wa19hbGcpCitGTl9PSURfR0VUX0FUVFIxKG1iZWR0bHNfb2lkX2dldF9wa19hbGcsIG9pZF9wa19hbGdfdCwgcGtfYWxnLCBtYmVkdGxzX3BrX3R5cGVfdCwgcGtfYWxnKQorRk5fT0lEX0dFVF9PSURfQllfQVRUUjEobWJlZHRsc19vaWRfZ2V0X29pZF9ieV9wa19hbGcsIG9pZF9wa19hbGdfdCwgb2lkX3BrX2FsZywgbWJlZHRsc19wa190eXBlX3QsIHBrX2FsZykKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qCisgKiBGb3IgbmFtZWRDdXJ2ZSAoUkZDIDU0ODApCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgICAgZGVzY3JpcHRvcjsKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCAgICAgICAgZ3JwX2lkOworfSBvaWRfZWNwX2dycF90OworCitzdGF0aWMgY29uc3Qgb2lkX2VjcF9ncnBfdCBvaWRfZWNwX2dycFtdID0KK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDE5MlIxICksICJzZWNwMTkycjEiLCAgICAic2VjcDE5MnIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjI0UjEgKSwgInNlY3AyMjRyMSIsICAgICJzZWNwMjI0cjEiIH0sCisgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AyNTZSMSApLCAic2VjcDI1NnIxIiwgICAgInNlY3AyNTZyMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDM4NFIxICksICJzZWNwMzg0cjEiLCAgICAic2VjcDM4NHIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQNTIxUjEgKSwgInNlY3A1MjFyMSIsICAgICJzZWNwNTIxcjEiIH0sCisgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCkKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRUNfR1JQX1NFQ1AxOTJLMSApLCAic2VjcDE5MmsxIiwgICAgInNlY3AxOTJrMSIgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9FQ19HUlBfU0VDUDIyNEsxICksICJzZWNwMjI0azEiLCAgICAic2VjcDIyNGsxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzEsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2SzEgKSwgInNlY3AyNTZrMSIsICAgICJzZWNwMjU2azEiIH0sCisgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9CUDI1NlIxICksICAgImJyYWlucG9vbFAyNTZyMSIsImJyYWlucG9vbDI1NnIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9CUDI1NlIxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9CUDM4NFIxICksICAgImJyYWlucG9vbFAzODRyMSIsImJyYWlucG9vbDM4NHIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9CUDM4NFIxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0VDX0dSUF9CUDUxMlIxICksICAgImJyYWlucG9vbFA1MTJyMSIsImJyYWlucG9vbDUxMnIxIiB9LAorICAgICAgICBNQkVEVExTX0VDUF9EUF9CUDUxMlIxLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEICovCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgTUJFRFRMU19FQ1BfRFBfTk9ORSwKKyAgICB9LAorfTsKKworRk5fT0lEX1RZUEVEX0ZST01fQVNOMShvaWRfZWNwX2dycF90LCBncnBfaWQsIG9pZF9lY3BfZ3JwKQorRk5fT0lEX0dFVF9BVFRSMShtYmVkdGxzX29pZF9nZXRfZWNfZ3JwLCBvaWRfZWNwX2dycF90LCBncnBfaWQsIG1iZWR0bHNfZWNwX2dyb3VwX2lkLCBncnBfaWQpCitGTl9PSURfR0VUX09JRF9CWV9BVFRSMShtYmVkdGxzX29pZF9nZXRfb2lkX2J5X2VjX2dycCwgb2lkX2VjcF9ncnBfdCwgb2lkX2VjcF9ncnAsIG1iZWR0bHNfZWNwX2dyb3VwX2lkLCBncnBfaWQpCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9DKQorLyoKKyAqIEZvciBQS0NTIzUgUEJFUzIgZW5jcnlwdGlvbiBhbGdvcml0aG0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAgICBkZXNjcmlwdG9yOworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCAgICAgICBjaXBoZXJfYWxnOworfSBvaWRfY2lwaGVyX2FsZ190OworCitzdGF0aWMgY29uc3Qgb2lkX2NpcGhlcl9hbGdfdCBvaWRfY2lwaGVyX2FsZ1tdID0KK3sKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfREVTX0NCQyApLCAgICAgICAgICAgICAgImRlc0NCQyIsICAgICAgICJERVMtQ0JDIiB9LAorICAgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RFU19FREUzX0NCQyApLCAgICAgICAgICJkZXMtZWRlMy1jYmMiLCAiREVTLUVERTMtQ0JDIiB9LAorICAgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsCisgICAgfSwKKyAgICB7CisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9LAorICAgICAgICBNQkVEVExTX0NJUEhFUl9OT05FLAorICAgIH0sCit9OworCitGTl9PSURfVFlQRURfRlJPTV9BU04xKG9pZF9jaXBoZXJfYWxnX3QsIGNpcGhlcl9hbGcsIG9pZF9jaXBoZXJfYWxnKQorRk5fT0lEX0dFVF9BVFRSMShtYmVkdGxzX29pZF9nZXRfY2lwaGVyX2FsZywgb2lkX2NpcGhlcl9hbGdfdCwgY2lwaGVyX2FsZywgbWJlZHRsc19jaXBoZXJfdHlwZV90LCBjaXBoZXJfYWxnKQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKQorLyoKKyAqIEZvciBkaWdlc3RBbGdvcml0aG0KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG1iZWR0bHNfb2lkX2Rlc2NyaXB0b3JfdCAgICBkZXNjcmlwdG9yOworICAgIG1iZWR0bHNfbWRfdHlwZV90ICAgICAgICAgICBtZF9hbGc7Cit9IG9pZF9tZF9hbGdfdDsKKworc3RhdGljIGNvbnN0IG9pZF9tZF9hbGdfdCBvaWRfbWRfYWxnW10gPQoreworI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDIgKSwgICAgICAgImlkLW1kMiIsICAgICAgICJNRDIiIH0sCisgICAgICAgIE1CRURUTFNfTURfTUQyLAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19NRDJfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDQgKSwgICAgICAgImlkLW1kNCIsICAgICAgICJNRDQiIH0sCisgICAgICAgIE1CRURUTFNfTURfTUQ0LAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19NRDRfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDUgKSwgICAgICAgImlkLW1kNSIsICAgICAgICJNRDUiIH0sCisgICAgICAgIE1CRURUTFNfTURfTUQ1LAorICAgIH0sCisjZW5kaWYgLyogTUJFRFRMU19NRDVfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMSApLCAgICAgICJpZC1zaGExIiwgICAgICAiU0hBLTEiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMSwKKyAgICB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTIyNCApLCAgICAiaWQtc2hhMjI0IiwgICAgIlNIQS0yMjQiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMjI0LAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMjU2ICksICAgICJpZC1zaGEyNTYiLCAgICAiU0hBLTI1NiIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsKKyAgICAgICAgeyBBRERfTEVOKCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTM4NCApLCAgICAiaWQtc2hhMzg0IiwgICAgIlNIQS0zODQiIH0sCisgICAgICAgIE1CRURUTFNfTURfU0hBMzg0LAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBNTEyICksICAgICJpZC1zaGE1MTIiLCAgICAiU0hBLTUxMiIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEE1MTIsCisgICAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgTUJFRFRMU19NRF9OT05FLAorICAgIH0sCit9OworCitGTl9PSURfVFlQRURfRlJPTV9BU04xKG9pZF9tZF9hbGdfdCwgbWRfYWxnLCBvaWRfbWRfYWxnKQorRk5fT0lEX0dFVF9BVFRSMShtYmVkdGxzX29pZF9nZXRfbWRfYWxnLCBvaWRfbWRfYWxnX3QsIG1kX2FsZywgbWJlZHRsc19tZF90eXBlX3QsIG1kX2FsZykKK0ZOX09JRF9HRVRfT0lEX0JZX0FUVFIxKG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfbWQsIG9pZF9tZF9hbGdfdCwgb2lkX21kX2FsZywgbWJlZHRsc19tZF90eXBlX3QsIG1kX2FsZykKKyNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKy8qCisgKiBGb3IgUEtDUyMxMiBQQkVzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX29pZF9kZXNjcmlwdG9yX3QgICAgZGVzY3JpcHRvcjsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCAgICAgICAgICAgbWRfYWxnOworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCAgICAgICBjaXBoZXJfYWxnOworfSBvaWRfcGtjczEyX3BiZV9hbGdfdDsKKworc3RhdGljIGNvbnN0IG9pZF9wa2NzMTJfcGJlX2FsZ190IG9pZF9wa2NzMTJfcGJlX2FsZ1tdID0KK3sKKyAgICB7CisgICAgICAgIHsgQUREX0xFTiggTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX0RFUzNfRURFX0NCQyApLCAicGJlV2l0aFNIQUFuZDMtS2V5VHJpcGxlREVTLUNCQyIsICJQQkUgd2l0aCBTSEExIGFuZCAzLUtleSAzREVTIiB9LAorICAgICAgICBNQkVEVExTX01EX1NIQTEsICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLAorICAgIH0sCisgICAgeworICAgICAgICB7IEFERF9MRU4oIE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMyX0VERV9DQkMgKSwgInBiZVdpdGhTSEFBbmQyLUtleVRyaXBsZURFUy1DQkMiLCAiUEJFIHdpdGggU0hBMSBhbmQgMi1LZXkgM0RFUyIgfSwKKyAgICAgICAgTUJFRFRMU19NRF9TSEExLCAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDLAorICAgIH0sCisgICAgeworICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfSwKKyAgICAgICAgTUJFRFRMU19NRF9OT05FLCBNQkVEVExTX0NJUEhFUl9OT05FLAorICAgIH0sCit9OworCitGTl9PSURfVFlQRURfRlJPTV9BU04xKG9pZF9wa2NzMTJfcGJlX2FsZ190LCBwa2NzMTJfcGJlX2FsZywgb2lkX3BrY3MxMl9wYmVfYWxnKQorRk5fT0lEX0dFVF9BVFRSMihtYmVkdGxzX29pZF9nZXRfcGtjczEyX3BiZV9hbGcsIG9pZF9wa2NzMTJfcGJlX2FsZ190LCBwa2NzMTJfcGJlX2FsZywgbWJlZHRsc19tZF90eXBlX3QsIG1kX2FsZywgbWJlZHRsc19jaXBoZXJfdHlwZV90LCBjaXBoZXJfYWxnKQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgKi8KKworI2RlZmluZSBPSURfU0FGRV9TTlBSSU5URiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIHJldCA8IDAgfHwgKHNpemVfdCkgcmV0ID49IG4gKSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTCApOyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbiAtPSAoc2l6ZV90KSByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwICs9IChzaXplX3QpIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSggMCApCisKKy8qIFJldHVybiB0aGUgeC55LnouLi4uIHN0eWxlIG51bWVyaWMgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gT0lEICovCitpbnQgbWJlZHRsc19vaWRfZ2V0X251bWVyaWNfc3RyaW5nKCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKm9pZCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgbjsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWU7CisgICAgY2hhciAqcDsKKworICAgIHAgPSBidWY7CisgICAgbiA9IHNpemU7CisKKyAgICAvKiBGaXJzdCBieXRlIGNvbnRhaW5zIGZpcnN0IHR3byBkb3RzICovCisgICAgaWYoIG9pZC0+bGVuID4gMCApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJWQuJWQiLCBvaWQtPnBbMF0gLyA0MCwgb2lkLT5wWzBdICUgNDAgKTsKKyAgICAgICAgT0lEX1NBRkVfU05QUklOVEY7CisgICAgfQorCisgICAgdmFsdWUgPSAwOworICAgIGZvciggaSA9IDE7IGkgPCBvaWQtPmxlbjsgaSsrICkKKyAgICB7CisgICAgICAgIC8qIFByZXZlbnQgb3ZlcmZsb3cgaW4gdmFsdWUuICovCisgICAgICAgIGlmKCAoICggdmFsdWUgPDwgNyApID4+IDcgKSAhPSB2YWx1ZSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX09JRF9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAgICAgdmFsdWUgPDw9IDc7CisgICAgICAgIHZhbHVlICs9IG9pZC0+cFtpXSAmIDB4N0Y7CisKKyAgICAgICAgaWYoICEoIG9pZC0+cFtpXSAmIDB4ODAgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIExhc3QgYnl0ZSAqLworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIi4lZCIsIHZhbHVlICk7CisgICAgICAgICAgICBPSURfU0FGRV9TTlBSSU5URjsKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggKGludCkgKCBzaXplIC0gbiApICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX09JRF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wYWRsb2NrLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wYWRsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1ZmY5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BhZGxvY2suYwpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqICBWSUEgUGFkTG9jayBzdXBwb3J0IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBWSUEgUGFkTG9jayBQcm9ncmFtbWluZyBHdWlkZToKKyAqCisgKiAgaHR0cDovL3d3dy52aWEuY29tLnR3L2VuL2Rvd25sb2Fkcy93aGl0ZXBhcGVycy9pbml0aWF0aXZlcy9wYWRsb2NrLworICogIHByb2dyYW1taW5nX2d1aWRlLnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKQorCisjaW5jbHVkZSAibWJlZHRscy9wYWRsb2NrLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBhc20KKyNkZWZpbmUgYXNtIF9fYXNtCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1g4NikKKworLyoKKyAqIFBhZExvY2sgZGV0ZWN0aW9uIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfcGFkbG9ja19oYXNfc3VwcG9ydCggaW50IGZlYXR1cmUgKQoreworICAgIHN0YXRpYyBpbnQgZmxhZ3MgPSAtMTsKKyAgICBpbnQgZWJ4ID0gMCwgZWR4ID0gMDsKKworICAgIGlmKCBmbGFncyA9PSAtMSApCisgICAgeworICAgICAgICBhc20oICJtb3ZsICAlJWVieCwgJTAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgIm1vdmwgICQweEMwMDAwMDAwLCAlJWVheCAgXG5cdCIKKyAgICAgICAgICAgICAiY3B1aWQgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICJjbXBsICAkMHhDMDAwMDAwMSwgJSVlYXggIFxuXHQiCisgICAgICAgICAgICAgIm1vdmwgICQwLCAlJWVkeCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAiamIgICAgdW5zdXBwb3J0ZWQgICAgICAgICBcblx0IgorICAgICAgICAgICAgICJtb3ZsICAkMHhDMDAwMDAwMSwgJSVlYXggIFxuXHQiCisgICAgICAgICAgICAgImNwdWlkICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICAidW5zdXBwb3J0ZWQ6ICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgICAgICJtb3ZsICAlJWVkeCwgJTEgICAgICAgICAgIFxuXHQiCisgICAgICAgICAgICAgIm1vdmwgICUyLCAlJWVieCAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICAgICA6ICI9bSIgKGVieCksICI9bSIgKGVkeCkKKyAgICAgICAgICAgICA6ICAibSIgKGVieCkKKyAgICAgICAgICAgICA6ICJlYXgiLCAiZWN4IiwgImVkeCIgKTsKKworICAgICAgICBmbGFncyA9IGVkeDsKKyAgICB9CisKKyAgICByZXR1cm4oIGZsYWdzICYgZmVhdHVyZSApOworfQorCisvKgorICogUGFkTG9jayBBRVMtRUNCIGJsb2NrIGVuKGRlKWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX3BhZGxvY2tfeGNyeXB0ZWNiKCBtYmVkdGxzX2Flc19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdICkKK3sKKyAgICBpbnQgZWJ4ID0gMDsKKyAgICB1aW50MzJfdCAqcms7CisgICAgdWludDMyX3QgKmJsazsKKyAgICB1aW50MzJfdCAqY3RybDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworCisgICAgcmsgID0gY3R4LT5yazsKKyAgICBibGsgPSBNQkVEVExTX1BBRExPQ0tfQUxJR04xNiggYnVmICk7CisgICAgbWVtY3B5KCBibGssIGlucHV0LCAxNiApOworCisgICAgIGN0cmwgPSBibGsgKyA0OworICAgICpjdHJsID0gMHg4MCB8IGN0eC0+bnIgfCAoICggY3R4LT5uciArICggbW9kZV4xICkgLSAxMCApIDw8IDkgKTsKKworICAgIGFzbSggInB1c2hmbCAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICUlZWJ4LCAlMCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJDEsICUlZWN4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlMiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICUzLCAlJWVieCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTQsICUlZXNpICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlNCwgJSVlZGkgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICIuYnl0ZSAgMHhmMywweDBmLDB4YTcsMHhjOCAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTEsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICA6ICI9bSIgKGVieCkKKyAgICAgICAgIDogICJtIiAoZWJ4KSwgIm0iIChjdHJsKSwgIm0iIChyayksICJtIiAoYmxrKQorICAgICAgICAgOiAibWVtb3J5IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIgKTsKKworICAgIG1lbWNweSggb3V0cHV0LCBibGssIDE2ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhZExvY2sgQUVTLUNCQyBidWZmZXIgZW4oZGUpY3J5cHRpb24KKyAqLworaW50IG1iZWR0bHNfcGFkbG9ja194Y3J5cHRjYmMoIG1iZWR0bHNfYWVzX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgZWJ4ID0gMDsKKyAgICBzaXplX3QgY291bnQ7CisgICAgdWludDMyX3QgKnJrOworICAgIHVpbnQzMl90ICppdzsKKyAgICB1aW50MzJfdCAqY3RybDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworCisgICAgaWYoICggKGxvbmcpIGlucHV0ICAmIDE1ICkgIT0gMCB8fAorICAgICAgICAoIChsb25nKSBvdXRwdXQgJiAxNSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVEICk7CisKKyAgICByayA9IGN0eC0+cms7CisgICAgaXcgPSBNQkVEVExTX1BBRExPQ0tfQUxJR04xNiggYnVmICk7CisgICAgbWVtY3B5KCBpdywgaXYsIDE2ICk7CisKKyAgICAgY3RybCA9IGl3ICsgNDsKKyAgICAqY3RybCA9IDB4ODAgfCBjdHgtPm5yIHwgKCAoIGN0eC0+bnIgKyAoIG1vZGUgXiAxICkgLSAxMCApIDw8IDkgKTsKKworICAgIGNvdW50ID0gKCBsZW5ndGggKyAxNSApID4+IDQ7CisKKyAgICBhc20oICJwdXNoZmwgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorICAgICAgICAgInBvcGZsICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlJWVieCwgJTAgICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICUyLCAlJWVjeCAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTMsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlNCwgJSVlYnggICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICJtb3ZsICAgICU1LCAlJWVzaSAgICAgICAgICAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTYsICUlZWRpICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICAibW92bCAgICAlNywgJSVlYXggICAgICAgICAgICAgXG5cdCIKKyAgICAgICAgICIuYnl0ZSAgMHhmMywweDBmLDB4YTcsMHhkMCAgICBcblx0IgorICAgICAgICAgIm1vdmwgICAgJTEsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiCisgICAgICAgICA6ICI9bSIgKGVieCkKKyAgICAgICAgIDogICJtIiAoZWJ4KSwgIm0iIChjb3VudCksICJtIiAoY3RybCksCisgICAgICAgICAgICAibSIgIChyayksICJtIiAoaW5wdXQpLCAibSIgKG91dHB1dCksICJtIiAoaXcpCisgICAgICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIgKTsKKworICAgIG1lbWNweSggaXYsIGl3LCAxNiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfWDg2ICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1BBRExPQ0tfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGVtLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWUzOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGVtLmMKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiAgUHJpdmFjeSBFbmhhbmNlZCBNYWlsIChQRU0pIGRlY29kaW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpIHx8IGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9iYXNlNjQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Rlcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlci5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQordm9pZCBtYmVkdGxzX3BlbV9pbml0KCBtYmVkdGxzX3BlbV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfcGVtX2NvbnRleHQgKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgIFwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19ERVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0FFU19DKSApCisvKgorICogUmVhZCBhIDE2LWJ5dGUgaGV4IHN0cmluZyBhbmQgY29udmVydCBpdCB0byBiaW5hcnkKKyAqLworc3RhdGljIGludCBwZW1fZ2V0X2l2KCBjb25zdCB1bnNpZ25lZCBjaGFyICpzLCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2X2xlbiApCit7CisgICAgc2l6ZV90IGksIGosIGs7CisKKyAgICBtZW1zZXQoIGl2LCAwLCBpdl9sZW4gKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBpdl9sZW4gKiAyOyBpKyssIHMrKyApCisgICAgeworICAgICAgICBpZiggKnMgPj0gJzAnICYmICpzIDw9ICc5JyApIGogPSAqcyAtICcwJzsgZWxzZQorICAgICAgICBpZiggKnMgPj0gJ0EnICYmICpzIDw9ICdGJyApIGogPSAqcyAtICc3JzsgZWxzZQorICAgICAgICBpZiggKnMgPj0gJ2EnICYmICpzIDw9ICdmJyApIGogPSAqcyAtICdXJzsgZWxzZQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYgKTsKKworICAgICAgICBrID0gKCAoIGkgJiAxICkgIT0gMCApID8gaiA6IGogPDwgNDsKKworICAgICAgICBpdltpID4+IDFdID0gKHVuc2lnbmVkIGNoYXIpKCBpdltpID4+IDFdIHwgayApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgdm9pZCBwZW1fcGJrZGYxKCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiApCit7CisgICAgbWJlZHRsc19tZDVfY29udGV4dCBtZDVfY3R4OworICAgIHVuc2lnbmVkIGNoYXIgbWQ1c3VtWzE2XTsKKyAgICBzaXplX3QgdXNlX2xlbjsKKworICAgIG1iZWR0bHNfbWQ1X2luaXQoICZtZDVfY3R4ICk7CisKKyAgICAvKgorICAgICAqIGtleVsgMC4uMTVdID0gTUQ1KHB3ZCB8fCBJVikKKyAgICAgKi8KKyAgICBtYmVkdGxzX21kNV9zdGFydHMoICZtZDVfY3R4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1X2N0eCwgcHdkLCBwd2RsZW4gKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDVfY3R4LCBpdiwgIDggKTsKKyAgICBtYmVkdGxzX21kNV9maW5pc2goICZtZDVfY3R4LCBtZDVzdW0gKTsKKworICAgIGlmKCBrZXlsZW4gPD0gMTYgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCBrZXksIG1kNXN1bSwga2V5bGVuICk7CisKKyAgICAgICAgbWJlZHRsc19tZDVfZnJlZSggJm1kNV9jdHggKTsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBtZDVzdW0sIDE2ICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtZW1jcHkoIGtleSwgbWQ1c3VtLCAxNiApOworCisgICAgLyoKKyAgICAgKiBrZXlbMTYuLjIzXSA9IE1ENShrZXlbIDAuLjE1XSB8fCBwd2QgfHwgSVZdKQorICAgICAqLworICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggJm1kNV9jdHggKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDVfY3R4LCBtZDVzdW0sICAxNiApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNV9jdHgsIHB3ZCwgcHdkbGVuICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1X2N0eCwgaXYsICA4ICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1X2N0eCwgbWQ1c3VtICk7CisKKyAgICB1c2VfbGVuID0gMTY7CisgICAgaWYoIGtleWxlbiA8IDMyICkKKyAgICAgICAgdXNlX2xlbiA9IGtleWxlbiAtIDE2OworCisgICAgbWVtY3B5KCBrZXkgKyAxNiwgbWQ1c3VtLCB1c2VfbGVuICk7CisKKyAgICBtYmVkdGxzX21kNV9mcmVlKCAmbWQ1X2N0eCApOworICAgIG1iZWR0bHNfemVyb2l6ZSggbWQ1c3VtLCAxNiApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorLyoKKyAqIERlY3J5cHQgd2l0aCBERVMtQ0JDLCB1c2luZyBQQktERjEgZm9yIGtleSBkZXJpdmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHBlbV9kZXNfZGVjcnlwdCggdW5zaWduZWQgY2hhciBkZXNfaXZbOF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiApCit7CisgICAgbWJlZHRsc19kZXNfY29udGV4dCBkZXNfY3R4OworICAgIHVuc2lnbmVkIGNoYXIgZGVzX2tleVs4XTsKKworICAgIG1iZWR0bHNfZGVzX2luaXQoICZkZXNfY3R4ICk7CisKKyAgICBwZW1fcGJrZGYxKCBkZXNfa2V5LCA4LCBkZXNfaXYsIHB3ZCwgcHdkbGVuICk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjKCAmZGVzX2N0eCwgZGVzX2tleSApOworICAgIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggJmRlc19jdHgsIE1CRURUTFNfREVTX0RFQ1JZUFQsIGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGRlc19pdiwgYnVmLCBidWYgKTsKKworICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZkZXNfY3R4ICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBkZXNfa2V5LCA4ICk7Cit9CisKKy8qCisgKiBEZWNyeXB0IHdpdGggM0RFUy1DQkMsIHVzaW5nIFBCS0RGMSBmb3Iga2V5IGRlcml2YXRpb24KKyAqLworc3RhdGljIHZvaWQgcGVtX2RlczNfZGVjcnlwdCggdW5zaWduZWQgY2hhciBkZXMzX2l2WzhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsIHNpemVfdCBwd2RsZW4gKQoreworICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGRlczNfY3R4OworICAgIHVuc2lnbmVkIGNoYXIgZGVzM19rZXlbMjRdOworCisgICAgbWJlZHRsc19kZXMzX2luaXQoICZkZXMzX2N0eCApOworCisgICAgcGVtX3Bia2RmMSggZGVzM19rZXksIDI0LCBkZXMzX2l2LCBwd2QsIHB3ZGxlbiApOworCisgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjKCAmZGVzM19jdHgsIGRlczNfa2V5ICk7CisgICAgbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggJmRlczNfY3R4LCBNQkVEVExTX0RFU19ERUNSWVBULCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICBkZXMzX2l2LCBidWYsIGJ1ZiApOworCisgICAgbWJlZHRsc19kZXMzX2ZyZWUoICZkZXMzX2N0eCApOworICAgIG1iZWR0bHNfemVyb2l6ZSggZGVzM19rZXksIDI0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorLyoKKyAqIERlY3J5cHQgd2l0aCBBRVMtWFhYLUNCQywgdXNpbmcgUEJLREYxIGZvciBrZXkgZGVyaXZhdGlvbgorICovCitzdGF0aWMgdm9pZCBwZW1fYWVzX2RlY3J5cHQoIHVuc2lnbmVkIGNoYXIgYWVzX2l2WzE2XSwgdW5zaWduZWQgaW50IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCBzaXplX3QgcHdkbGVuICkKK3sKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGFlc19jdHg7CisgICAgdW5zaWduZWQgY2hhciBhZXNfa2V5WzMyXTsKKworICAgIG1iZWR0bHNfYWVzX2luaXQoICZhZXNfY3R4ICk7CisKKyAgICBwZW1fcGJrZGYxKCBhZXNfa2V5LCBrZXlsZW4sIGFlc19pdiwgcHdkLCBwd2RsZW4gKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZhZXNfY3R4LCBhZXNfa2V5LCBrZXlsZW4gKiA4ICk7CisgICAgbWJlZHRsc19hZXNfY3J5cHRfY2JjKCAmYWVzX2N0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgYWVzX2l2LCBidWYsIGJ1ZiApOworCisgICAgbWJlZHRsc19hZXNfZnJlZSggJmFlc19jdHggKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGFlc19rZXksIGtleWxlbiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgJiYgTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgJiYKKyAgICAgICAgICAoIE1CRURUTFNfQUVTX0MgfHwgTUJFRFRMU19ERVNfQyApICovCisKK2ludCBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggbWJlZHRsc19wZW1fY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpoZWFkZXIsIGNvbnN0IGNoYXIgKmZvb3RlciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwd2RsZW4sIHNpemVfdCAqdXNlX2xlbiApCit7CisgICAgaW50IHJldCwgZW5jOworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMxLCAqczIsICplbmQ7CisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgIFwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19ERVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0FFU19DKSApCisgICAgdW5zaWduZWQgY2hhciBwZW1faXZbMTZdOworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBlbmNfYWxnID0gTUJFRFRMU19DSVBIRVJfTk9ORTsKKyNlbHNlCisgICAgKCh2b2lkKSBwd2QpOworICAgICgodm9pZCkgcHdkbGVuKTsKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICYmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICYmCisgICAgICAgICAgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfREVTX0MgKSAqLworCisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHMxID0gKHVuc2lnbmVkIGNoYXIgKikgc3Ryc3RyKCAoY29uc3QgY2hhciAqKSBkYXRhLCBoZWFkZXIgKTsKKworICAgIGlmKCBzMSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICk7CisKKyAgICBzMiA9ICh1bnNpZ25lZCBjaGFyICopIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgZGF0YSwgZm9vdGVyICk7CisKKyAgICBpZiggczIgPT0gTlVMTCB8fCBzMiA8PSBzMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApOworCisgICAgczEgKz0gc3RybGVuKCBoZWFkZXIgKTsKKyAgICBpZiggKnMxID09ICcgJyAgKSBzMSsrOworICAgIGlmKCAqczEgPT0gJ1xyJyApIHMxKys7CisgICAgaWYoICpzMSA9PSAnXG4nICkgczErKzsKKyAgICBlbHNlIHJldHVybiggTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApOworCisgICAgZW5kID0gczI7CisgICAgZW5kICs9IHN0cmxlbiggZm9vdGVyICk7CisgICAgaWYoICplbmQgPT0gJyAnICApIGVuZCsrOworICAgIGlmKCAqZW5kID09ICdccicgKSBlbmQrKzsKKyAgICBpZiggKmVuZCA9PSAnXG4nICkgZW5kKys7CisgICAgKnVzZV9sZW4gPSBlbmQgLSBkYXRhOworCisgICAgZW5jID0gMDsKKworICAgIGlmKCBtZW1jbXAoIHMxLCAiUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRCIsIDIyICkgPT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykgJiYgICAgICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfREVTX0MpIHx8IGRlZmluZWQoTUJFRFRMU19BRVNfQykgKQorICAgICAgICBlbmMrKzsKKworICAgICAgICBzMSArPSAyMjsKKyAgICAgICAgaWYoICpzMSA9PSAnXHInICkgczErKzsKKyAgICAgICAgaWYoICpzMSA9PSAnXG4nICkgczErKzsKKyAgICAgICAgZWxzZSByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEgKTsKKworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorICAgICAgICBpZiggbWVtY21wKCBzMSwgIkRFSy1JbmZvOiBERVMtRURFMy1DQkMsIiwgMjMgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZW5jX2FsZyA9IE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzsKKworICAgICAgICAgICAgczEgKz0gMjM7CisgICAgICAgICAgICBpZiggcGVtX2dldF9pdiggczEsIHBlbV9pdiwgOCApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWICk7CisKKyAgICAgICAgICAgIHMxICs9IDE2OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIG1lbWNtcCggczEsICJERUstSW5mbzogREVTLUNCQywiLCAxOCApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBlbmNfYWxnID0gTUJFRFRMU19DSVBIRVJfREVTX0NCQzsKKworICAgICAgICAgICAgczEgKz0gMTg7CisgICAgICAgICAgICBpZiggcGVtX2dldF9pdiggczEsIHBlbV9pdiwgOCkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYgKTsKKworICAgICAgICAgICAgczEgKz0gMTY7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgICAgIGlmKCBtZW1jbXAoIHMxLCAiREVLLUluZm86IEFFUy0iLCAxNCApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggbWVtY21wKCBzMSwgIkRFSy1JbmZvOiBBRVMtMTI4LUNCQywiLCAyMiApID09IDAgKQorICAgICAgICAgICAgICAgIGVuY19hbGcgPSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzsKKyAgICAgICAgICAgIGVsc2UgaWYoIG1lbWNtcCggczEsICJERUstSW5mbzogQUVTLTE5Mi1DQkMsIiwgMjIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBlbmNfYWxnID0gTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM7CisgICAgICAgICAgICBlbHNlIGlmKCBtZW1jbXAoIHMxLCAiREVLLUluZm86IEFFUy0yNTYtQ0JDLCIsIDIyICkgPT0gMCApCisgICAgICAgICAgICAgICAgZW5jX2FsZyA9IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX1VOS05PV05fRU5DX0FMRyApOworCisgICAgICAgICAgICBzMSArPSAyMjsKKyAgICAgICAgICAgIGlmKCBwZW1fZ2V0X2l2KCBzMSwgcGVtX2l2LCAxNiApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfRU5DX0lWICk7CisKKyAgICAgICAgICAgIHMxICs9IDMyOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisgICAgICAgIGlmKCBlbmNfYWxnID09IE1CRURUTFNfQ0lQSEVSX05PTkUgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fVU5LTk9XTl9FTkNfQUxHICk7CisKKyAgICAgICAgaWYoICpzMSA9PSAnXHInICkgczErKzsKKyAgICAgICAgaWYoICpzMSA9PSAnXG4nICkgczErKzsKKyAgICAgICAgZWxzZSByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEgKTsKKyNlbHNlCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICYmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICYmCisgICAgICAgICAgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfREVTX0MgKSAqLworICAgIH0KKworICAgIGlmKCBzMSA9PSBzMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfREFUQSApOworCisgICAgcmV0ID0gbWJlZHRsc19iYXNlNjRfZGVjb2RlKCBOVUxMLCAwLCAmbGVuLCBzMSwgczIgLSBzMSApOworCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9JTlZBTElEX0RBVEEgKyByZXQgKTsKKworICAgIGlmKCAoIGJ1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCBsZW4gKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9BTExPQ19GQUlMRUQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYmFzZTY0X2RlY29kZSggYnVmLCBsZW4sICZsZW4sIHMxLCBzMiAtIHMxICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfREFUQSArIHJldCApOworICAgIH0KKworICAgIGlmKCBlbmMgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykgJiYgICAgICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfREVTX0MpIHx8IGRlZmluZWQoTUJFRFRMU19BRVNfQykgKQorICAgICAgICBpZiggcHdkID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQgKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorICAgICAgICBpZiggZW5jX2FsZyA9PSBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMgKQorICAgICAgICAgICAgcGVtX2RlczNfZGVjcnlwdCggcGVtX2l2LCBidWYsIGxlbiwgcHdkLCBwd2RsZW4gKTsKKyAgICAgICAgZWxzZSBpZiggZW5jX2FsZyA9PSBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDICkKKyAgICAgICAgICAgIHBlbV9kZXNfZGVjcnlwdCggcGVtX2l2LCBidWYsIGxlbiwgcHdkLCBwd2RsZW4gKTsKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgICAgIGlmKCBlbmNfYWxnID09IE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDICkKKyAgICAgICAgICAgIHBlbV9hZXNfZGVjcnlwdCggcGVtX2l2LCAxNiwgYnVmLCBsZW4sIHB3ZCwgcHdkbGVuICk7CisgICAgICAgIGVsc2UgaWYoIGVuY19hbGcgPT0gTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkMgKQorICAgICAgICAgICAgcGVtX2Flc19kZWNyeXB0KCBwZW1faXYsIDI0LCBidWYsIGxlbiwgcHdkLCBwd2RsZW4gKTsKKyAgICAgICAgZWxzZSBpZiggZW5jX2FsZyA9PSBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQyApCisgICAgICAgICAgICBwZW1fYWVzX2RlY3J5cHQoIHBlbV9pdiwgMzIsIGJ1ZiwgbGVuLCBwd2QsIHB3ZGxlbiApOworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgcmVzdWx0IHdpbGwgYmUgQVNOLjEgc3RhcnRpbmcgd2l0aCBhIFNFUVVFTkNFIHRhZywgd2l0aCAxIHRvIDMKKyAgICAgICAgICogbGVuZ3RoIGJ5dGVzIChhbGxvdyA0IHRvIGJlIHN1cmUpIGluIGFsbCBrbm93biB1c2UgY2FzZXMuCisgICAgICAgICAqCisgICAgICAgICAqIFVzZSB0aGF0IGFzIGhldXJpc2l0aWMgdG8gdHJ5IGRldGVjdGluZyBwYXNzd29yZCBtaXNtYXRjaHMuCisgICAgICAgICAqLworICAgICAgICBpZiggbGVuIDw9IDIgfHwgYnVmWzBdICE9IDB4MzAgfHwgYnVmWzFdID4gMHg4MyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSCApOworICAgICAgICB9CisjZWxzZQorICAgICAgICBtYmVkdGxzX2ZyZWUoIGJ1ZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BFTV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisjZW5kaWYgLyogTUJFRFRMU19NRDVfQyAmJiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAmJgorICAgICAgICAgICggTUJFRFRMU19BRVNfQyB8fCBNQkVEVExTX0RFU19DICkgKi8KKyAgICB9CisKKyAgICBjdHgtPmJ1ZiA9IGJ1ZjsKKyAgICBjdHgtPmJ1ZmxlbiA9IGxlbjsKKworICAgIHJldHVybiggMCApOworfQorCit2b2lkIG1iZWR0bHNfcGVtX2ZyZWUoIG1iZWR0bHNfcGVtX2NvbnRleHQgKmN0eCApCit7CisgICAgbWJlZHRsc19mcmVlKCBjdHgtPmJ1ZiApOworICAgIG1iZWR0bHNfZnJlZSggY3R4LT5pbmZvICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX3BlbV9jb250ZXh0ICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCitpbnQgbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBjb25zdCBjaGFyICpoZWFkZXIsIGNvbnN0IGNoYXIgKmZvb3RlciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkZXJfZGF0YSwgc2l6ZV90IGRlcl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKmVuY29kZV9idWYsICpjLCAqcCA9IGJ1ZjsKKyAgICBzaXplX3QgbGVuID0gMCwgdXNlX2xlbiwgYWRkX2xlbiA9IDA7CisKKyAgICBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUoIE5VTEwsIDAsICZ1c2VfbGVuLCBkZXJfZGF0YSwgZGVyX2xlbiApOworICAgIGFkZF9sZW4gPSBzdHJsZW4oIGhlYWRlciApICsgc3RybGVuKCBmb290ZXIgKSArICggdXNlX2xlbiAvIDY0ICkgKyAxOworCisgICAgaWYoIHVzZV9sZW4gKyBhZGRfbGVuID4gYnVmX2xlbiApCisgICAgeworICAgICAgICAqb2xlbiA9IHVzZV9sZW4gKyBhZGRfbGVuOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgfQorCisgICAgaWYoICggZW5jb2RlX2J1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCB1c2VfbGVuICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QRU1fQUxMT0NfRkFJTEVEICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUoIGVuY29kZV9idWYsIHVzZV9sZW4sICZ1c2VfbGVuLCBkZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggZW5jb2RlX2J1ZiApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1lbWNweSggcCwgaGVhZGVyLCBzdHJsZW4oIGhlYWRlciApICk7CisgICAgcCArPSBzdHJsZW4oIGhlYWRlciApOworICAgIGMgPSBlbmNvZGVfYnVmOworCisgICAgd2hpbGUoIHVzZV9sZW4gKQorICAgIHsKKyAgICAgICAgbGVuID0gKCB1c2VfbGVuID4gNjQgKSA/IDY0IDogdXNlX2xlbjsKKyAgICAgICAgbWVtY3B5KCBwLCBjLCBsZW4gKTsKKyAgICAgICAgdXNlX2xlbiAtPSBsZW47CisgICAgICAgIHAgKz0gbGVuOworICAgICAgICBjICs9IGxlbjsKKyAgICAgICAgKnArKyA9ICdcbic7CisgICAgfQorCisgICAgbWVtY3B5KCBwLCBmb290ZXIsIHN0cmxlbiggZm9vdGVyICkgKTsKKyAgICBwICs9IHN0cmxlbiggZm9vdGVyICk7CisKKyAgICAqcCsrID0gJ1wwJzsKKyAgICAqb2xlbiA9IHAgLSBidWY7CisKKyAgICBtYmVkdGxzX2ZyZWUoIGVuY29kZV9idWYgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisjZW5kaWYgLyogTUJFRFRMU19QRU1fUEFSU0VfQyB8fCBNQkVEVExTX1BFTV9XUklURV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9way5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGJkMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGsuYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqICBQdWJsaWMgS2V5IGFic3RyYWN0aW9uIGxheWVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9wa19pbnRlcm5hbC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKyNlbmRpZgorCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogSW5pdGlhbGlzZSBhIG1iZWR0bHNfcGtfY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfcGtfaW5pdCggbWJlZHRsc19wa19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGN0eC0+cGtfaW5mbyA9IE5VTEw7CisgICAgY3R4LT5wa19jdHggPSBOVUxMOworfQorCisvKgorICogRnJlZSAodGhlIGNvbXBvbmVudHMgb2YpIGEgbWJlZHRsc19wa19jb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19wa19mcmVlKCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3R4LT5wa19pbmZvLT5jdHhfZnJlZV9mdW5jKCBjdHgtPnBrX2N0eCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19wa19jb250ZXh0ICkgKTsKK30KKworLyoKKyAqIEdldCBwa19pbmZvIHN0cnVjdHVyZSBmcm9tIHR5cGUKKyAqLworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgKiBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBtYmVkdGxzX3BrX3R5cGVfdCBwa190eXBlICkKK3sKKyAgICBzd2l0Y2goIHBrX3R5cGUgKSB7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfUEtfUlNBOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19yc2FfaW5mbyApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICBjYXNlIE1CRURUTFNfUEtfRUNLRVk6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX2Vja2V5X2luZm8gKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1BLX0VDS0VZX0RIOgorICAgICAgICAgICAgcmV0dXJuKCAmbWJlZHRsc19lY2tleWRoX2luZm8gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfUEtfRUNEU0E6CisgICAgICAgICAgICByZXR1cm4oICZtYmVkdGxzX2VjZHNhX2luZm8gKTsKKyNlbmRpZgorICAgICAgICAvKiBNQkVEVExTX1BLX1JTQV9BTFQgb21pdHRlZCBvbiBwdXJwb3NlICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE5VTEwgKTsKKyAgICB9Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIGNvbnRleHQKKyAqLworaW50IG1iZWR0bHNfcGtfc2V0dXAoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqaW5mbyApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGluZm8gPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gIT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCAoIGN0eC0+cGtfY3R4ID0gaW5mby0+Y3R4X2FsbG9jX2Z1bmMoKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRCApOworCisgICAgY3R4LT5wa19pbmZvID0gaW5mbzsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKy8qCisgKiBJbml0aWFsaXplIGFuIFJTQS1hbHQgY29udGV4dAorICovCitpbnQgbWJlZHRsc19wa19zZXR1cF9yc2FfYWx0KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgdm9pZCAqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX3JzYV9hbHRfZGVjcnlwdF9mdW5jIGRlY3J5cHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX3JzYV9hbHRfc2lnbl9mdW5jIHNpZ25fZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX3JzYV9hbHRfa2V5X2xlbl9mdW5jIGtleV9sZW5fZnVuYyApCit7CisgICAgbWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKnJzYV9hbHQ7CisgICAgY29uc3QgbWJlZHRsc19wa19pbmZvX3QgKmluZm8gPSAmbWJlZHRsc19yc2FfYWx0X2luZm87CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvICE9IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggKCBjdHgtPnBrX2N0eCA9IGluZm8tPmN0eF9hbGxvY19mdW5jKCkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19BTExPQ19GQUlMRUQgKTsKKworICAgIGN0eC0+cGtfaW5mbyA9IGluZm87CisKKyAgICByc2FfYWx0ID0gKG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICopIGN0eC0+cGtfY3R4OworCisgICAgcnNhX2FsdC0+a2V5ID0ga2V5OworICAgIHJzYV9hbHQtPmRlY3J5cHRfZnVuYyA9IGRlY3J5cHRfZnVuYzsKKyAgICByc2FfYWx0LT5zaWduX2Z1bmMgPSBzaWduX2Z1bmM7CisgICAgcnNhX2FsdC0+a2V5X2xlbl9mdW5jID0ga2V5X2xlbl9mdW5jOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQgKi8KKworLyoKKyAqIFRlbGwgaWYgYSBQSyBjYW4gZG8gdGhlIG9wZXJhdGlvbnMgb2YgdGhlIGdpdmVuIHR5cGUKKyAqLworaW50IG1iZWR0bHNfcGtfY2FuX2RvKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwgbWJlZHRsc19wa190eXBlX3QgdHlwZSApCit7CisgICAgLyogbnVsbCBvciBOT05FIGNvbnRleHQgY2FuJ3QgZG8gYW55dGhpbmcgKi8KKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT5jYW5fZG8oIHR5cGUgKSApOworfQorCisvKgorICogSGVscGVyIGZvciBtYmVkdGxzX3BrX3NpZ24gYW5kIG1iZWR0bHNfcGtfdmVyaWZ5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBrX2hhc2hsZW5faGVscGVyKCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsIHNpemVfdCAqaGFzaF9sZW4gKQoreworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworCisgICAgaWYoICpoYXNoX2xlbiAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggKCBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICkgKSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgKmhhc2hfbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVmVyaWZ5IGEgc2lnbmF0dXJlCisgKi8KK2ludCBtYmVkdGxzX3BrX3ZlcmlmeSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCB8fAorICAgICAgICBwa19oYXNobGVuX2hlbHBlciggbWRfYWxnLCAmaGFzaF9sZW4gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGN0eC0+cGtfaW5mby0+dmVyaWZ5X2Z1bmMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCBjdHgtPnBrX2luZm8tPnZlcmlmeV9mdW5jKCBjdHgtPnBrX2N0eCwgbWRfYWxnLCBoYXNoLCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgc2lnX2xlbiApICk7Cit9CisKKy8qCisgKiBWZXJpZnkgYSBzaWduYXR1cmUgd2l0aCBvcHRpb25zCisgKi8KK2ludCBtYmVkdGxzX3BrX3ZlcmlmeV9leHQoIG1iZWR0bHNfcGtfdHlwZV90IHR5cGUsIGNvbnN0IHZvaWQgKm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jb250ZXh0ICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICEgbWJlZHRsc19wa19jYW5fZG8oIGN0eCwgdHlwZSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CisKKyAgICBpZiggdHlwZSA9PSBNQkVEVExTX1BLX1JTQVNTQV9QU1MgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisgICAgICAgIGludCByZXQ7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfcGtfcnNhc3NhX3Bzc19vcHRpb25zICpwc3Nfb3B0czsKKworICAgICAgICBpZiggb3B0aW9ucyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBwc3Nfb3B0cyA9IChjb25zdCBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9ucyAqKSBvcHRpb25zOworCisgICAgICAgIGlmKCBzaWdfbGVuIDwgbWJlZHRsc19wa19nZXRfbGVuKCBjdHggKSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnlfZXh0KCBtYmVkdGxzX3BrX3JzYSggKmN0eCApLAorICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICBtZF9hbGcsICh1bnNpZ25lZCBpbnQpIGhhc2hfbGVuLCBoYXNoLAorICAgICAgICAgICAgICAgIHBzc19vcHRzLT5tZ2YxX2hhc2hfaWQsCisgICAgICAgICAgICAgICAgcHNzX29wdHMtPmV4cGVjdGVkX3NhbHRfbGVuLAorICAgICAgICAgICAgICAgIHNpZyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBpZiggc2lnX2xlbiA+IG1iZWR0bHNfcGtfZ2V0X2xlbiggY3R4ICkgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19TSUdfTEVOX01JU01BVENIICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisjZWxzZQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIEdlbmVyYWwgY2FzZTogbm8gb3B0aW9ucyAqLworICAgIGlmKCBvcHRpb25zICE9IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfcGtfdmVyaWZ5KCBjdHgsIG1kX2FsZywgaGFzaCwgaGFzaF9sZW4sIHNpZywgc2lnX2xlbiApICk7Cit9CisKKy8qCisgKiBNYWtlIGEgc2lnbmF0dXJlCisgKi8KK2ludCBtYmVkdGxzX3BrX3NpZ24oIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdfbGVuLAorICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCB8fAorICAgICAgICBwa19oYXNobGVuX2hlbHBlciggbWRfYWxnLCAmaGFzaF9sZW4gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGN0eC0+cGtfaW5mby0+c2lnbl9mdW5jID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT5zaWduX2Z1bmMoIGN0eC0+cGtfY3R4LCBtZF9hbGcsIGhhc2gsIGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgc2lnX2xlbiwgZl9ybmcsIHBfcm5nICkgKTsKK30KKworLyoKKyAqIERlY3J5cHQgbWVzc2FnZQorICovCitpbnQgbWJlZHRsc19wa19kZWNyeXB0KCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggY3R4LT5wa19pbmZvLT5kZWNyeXB0X2Z1bmMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCBjdHgtPnBrX2luZm8tPmRlY3J5cHRfZnVuYyggY3R4LT5wa19jdHgsIGlucHV0LCBpbGVuLAorICAgICAgICAgICAgICAgIG91dHB1dCwgb2xlbiwgb3NpemUsIGZfcm5nLCBwX3JuZyApICk7Cit9CisKKy8qCisgKiBFbmNyeXB0IG1lc3NhZ2UKKyAqLworaW50IG1iZWR0bHNfcGtfZW5jcnlwdCggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuLCBzaXplX3Qgb3NpemUsCisgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGN0eC0+cGtfaW5mby0+ZW5jcnlwdF9mdW5jID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT5lbmNyeXB0X2Z1bmMoIGN0eC0+cGtfY3R4LCBpbnB1dCwgaWxlbiwKKyAgICAgICAgICAgICAgICBvdXRwdXQsIG9sZW4sIG9zaXplLCBmX3JuZywgcF9ybmcgKSApOworfQorCisvKgorICogQ2hlY2sgcHVibGljLXByaXZhdGUga2V5IHBhaXIKKyAqLworaW50IG1iZWR0bHNfcGtfY2hlY2tfcGFpciggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpwdWIsIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqcHJ2ICkKK3sKKyAgICBpZiggcHViID09IE5VTEwgfHwgcHViLT5wa19pbmZvID09IE5VTEwgfHwKKyAgICAgICAgcHJ2ID09IE5VTEwgfHwgcHJ2LT5wa19pbmZvID09IE5VTEwgfHwKKyAgICAgICAgcHJ2LT5wa19pbmZvLT5jaGVja19wYWlyX2Z1bmMgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgaWYoIHBydi0+cGtfaW5mby0+dHlwZSA9PSBNQkVEVExTX1BLX1JTQV9BTFQgKQorICAgIHsKKyAgICAgICAgaWYoIHB1Yi0+cGtfaW5mby0+dHlwZSAhPSBNQkVEVExTX1BLX1JTQSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIHB1Yi0+cGtfaW5mbyAhPSBwcnYtPnBrX2luZm8gKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CisgICAgfQorCisgICAgcmV0dXJuKCBwcnYtPnBrX2luZm8tPmNoZWNrX3BhaXJfZnVuYyggcHViLT5wa19jdHgsIHBydi0+cGtfY3R4ICkgKTsKK30KKworLyoKKyAqIEdldCBrZXkgc2l6ZSBpbiBiaXRzCisgKi8KK3NpemVfdCBtYmVkdGxzX3BrX2dldF9iaXRsZW4oIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT5nZXRfYml0bGVuKCBjdHgtPnBrX2N0eCApICk7Cit9CisKKy8qCisgKiBFeHBvcnQgZGVidWcgaW5mb3JtYXRpb24KKyAqLworaW50IG1iZWR0bHNfcGtfZGVidWcoIGNvbnN0IG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBtYmVkdGxzX3BrX2RlYnVnX2l0ZW0gKml0ZW1zICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5wa19pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggY3R4LT5wa19pbmZvLT5kZWJ1Z19mdW5jID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKworICAgIGN0eC0+cGtfaW5mby0+ZGVidWdfZnVuYyggY3R4LT5wa19jdHgsIGl0ZW1zICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBBY2Nlc3MgdGhlIFBLIHR5cGUgbmFtZQorICovCitjb25zdCBjaGFyICptYmVkdGxzX3BrX2dldF9uYW1lKCBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+cGtfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAiaW52YWxpZCBQSyIgKTsKKworICAgIHJldHVybiggY3R4LT5wa19pbmZvLT5uYW1lICk7Cit9CisKKy8qCisgKiBBY2Nlc3MgdGhlIFBLIHR5cGUKKyAqLworbWJlZHRsc19wa190eXBlX3QgbWJlZHRsc19wa19nZXRfdHlwZSggY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCB8fCBjdHgtPnBrX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19QS19OT05FICk7CisKKyAgICByZXR1cm4oIGN0eC0+cGtfaW5mby0+dHlwZSApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19QS19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa193cmFwLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa193cmFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyYWQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrX3dyYXAuYwpAQCAtMCwwICsxLDQ5NSBAQAorLyoKKyAqICBQdWJsaWMgS2V5IGFic3RyYWN0aW9uIGxheWVyOiB3cmFwcGVyIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX0MpCisjaW5jbHVkZSAibWJlZHRscy9wa19pbnRlcm5hbC5oIgorCisvKiBFdmVuIGlmIFJTQSBub3QgYWN0aXZhdGVkLCBmb3IgdGhlIHNha2Ugb2YgUlNBLWFsdCAqLworI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUKQorLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorc3RhdGljIGludCByc2FfY2FuX2RvKCBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlICkKK3sKKyAgICByZXR1cm4oIHR5cGUgPT0gTUJFRFRMU19QS19SU0EgfHwKKyAgICAgICAgICAgIHR5cGUgPT0gTUJFRFRMU19QS19SU0FTU0FfUFNTICk7Cit9CisKK3N0YXRpYyBzaXplX3QgcnNhX2dldF9iaXRsZW4oIGNvbnN0IHZvaWQgKmN0eCApCit7CisgICAgcmV0dXJuKCA4ICogKChjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPmxlbiApOworfQorCitzdGF0aWMgaW50IHJzYV92ZXJpZnlfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggc2lnX2xlbiA8ICgobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgpLT5sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoIChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1JTQV9QVUJMSUMsIG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBoYXNoX2xlbiwgaGFzaCwgc2lnICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCBzaWdfbGVuID4gKChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgcnNhX3NpZ25fd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdfbGVuLAorICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgICpzaWdfbGVuID0gKChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPmxlbjsKKworICAgIHJldHVybiggbWJlZHRsc19yc2FfcGtjczFfc2lnbiggKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4LCBmX3JuZywgcF9ybmcsIE1CRURUTFNfUlNBX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgbWRfYWxnLCAodW5zaWduZWQgaW50KSBoYXNoX2xlbiwgaGFzaCwgc2lnICkgKTsKK30KKworc3RhdGljIGludCByc2FfZGVjcnlwdF93cmFwKCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaWYoIGlsZW4gIT0gKChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoIChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCwgZl9ybmcsIHBfcm5nLAorICAgICAgICAgICAgICAgIE1CRURUTFNfUlNBX1BSSVZBVEUsIG9sZW4sIGlucHV0LCBvdXRwdXQsIG9zaXplICkgKTsKK30KKworc3RhdGljIGludCByc2FfZW5jcnlwdF93cmFwKCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9sZW4sIHNpemVfdCBvc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgKm9sZW4gPSAoKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4KS0+bGVuOworCisgICAgaWYoICpvbGVuID4gb3NpemUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFICk7CisKKyAgICByZXR1cm4oIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoIChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCwKKyAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcsIE1CRURUTFNfUlNBX1BVQkxJQywgaWxlbiwgaW5wdXQsIG91dHB1dCApICk7Cit9CisKK3N0YXRpYyBpbnQgcnNhX2NoZWNrX3BhaXJfd3JhcCggY29uc3Qgdm9pZCAqcHViLCBjb25zdCB2b2lkICpwcnYgKQoreworICAgIHJldHVybiggbWJlZHRsc19yc2FfY2hlY2tfcHViX3ByaXYoIChjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICopIHB1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKikgcHJ2ICkgKTsKK30KKworc3RhdGljIHZvaWQgKnJzYV9hbGxvY193cmFwKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3JzYV9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1iZWR0bHNfcnNhX2luaXQoIChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCwgMCwgMCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgcnNhX2ZyZWVfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitzdGF0aWMgdm9pZCByc2FfZGVidWcoIGNvbnN0IHZvaWQgKmN0eCwgbWJlZHRsc19wa19kZWJ1Z19pdGVtICppdGVtcyApCit7CisgICAgaXRlbXMtPnR5cGUgPSBNQkVEVExTX1BLX0RFQlVHX01QSTsKKyAgICBpdGVtcy0+bmFtZSA9ICJyc2EuTiI7CisgICAgaXRlbXMtPnZhbHVlID0gJiggKChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCktPk4gKTsKKworICAgIGl0ZW1zKys7CisKKyAgICBpdGVtcy0+dHlwZSA9IE1CRURUTFNfUEtfREVCVUdfTVBJOworICAgIGl0ZW1zLT5uYW1lID0gInJzYS5FIjsKKyAgICBpdGVtcy0+dmFsdWUgPSAmKCAoKG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4KS0+RSApOworfQorCitjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX3JzYV9pbmZvID0geworICAgIE1CRURUTFNfUEtfUlNBLAorICAgICJSU0EiLAorICAgIHJzYV9nZXRfYml0bGVuLAorICAgIHJzYV9jYW5fZG8sCisgICAgcnNhX3ZlcmlmeV93cmFwLAorICAgIHJzYV9zaWduX3dyYXAsCisgICAgcnNhX2RlY3J5cHRfd3JhcCwKKyAgICByc2FfZW5jcnlwdF93cmFwLAorICAgIHJzYV9jaGVja19wYWlyX3dyYXAsCisgICAgcnNhX2FsbG9jX3dyYXAsCisgICAgcnNhX2ZyZWVfd3JhcCwKKyAgICByc2FfZGVidWcsCit9OworI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qCisgKiBHZW5lcmljIEVDIGtleQorICovCitzdGF0aWMgaW50IGVja2V5X2Nhbl9kbyggbWJlZHRsc19wa190eXBlX3QgdHlwZSApCit7CisgICAgcmV0dXJuKCB0eXBlID09IE1CRURUTFNfUEtfRUNLRVkgfHwKKyAgICAgICAgICAgIHR5cGUgPT0gTUJFRFRMU19QS19FQ0tFWV9ESCB8fAorICAgICAgICAgICAgdHlwZSA9PSBNQkVEVExTX1BLX0VDRFNBICk7Cit9CisKK3N0YXRpYyBzaXplX3QgZWNrZXlfZ2V0X2JpdGxlbiggY29uc3Qgdm9pZCAqY3R4ICkKK3sKKyAgICByZXR1cm4oICgobWJlZHRsc19lY3Bfa2V5cGFpciAqKSBjdHgpLT5ncnAucGJpdHMgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgZWNkc2FfdmVyaWZ5X3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKTsKKworc3RhdGljIGludCBlY2RzYV9zaWduX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnX2xlbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICk7CisKK3N0YXRpYyBpbnQgZWNrZXlfdmVyaWZ5X3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4gKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY2RzYV9jb250ZXh0IGVjZHNhOworCisgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmZWNkc2EgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkc2FfZnJvbV9rZXlwYWlyKCAmZWNkc2EsIGN0eCApICkgPT0gMCApCisgICAgICAgIHJldCA9IGVjZHNhX3ZlcmlmeV93cmFwKCAmZWNkc2EsIG1kX2FsZywgaGFzaCwgaGFzaF9sZW4sIHNpZywgc2lnX2xlbiApOworCisgICAgbWJlZHRsc19lY2RzYV9mcmVlKCAmZWNkc2EgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyBpbnQgZWNrZXlfc2lnbl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjZHNhX2NvbnRleHQgZWNkc2E7CisKKyAgICBtYmVkdGxzX2VjZHNhX2luaXQoICZlY2RzYSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RzYV9mcm9tX2tleXBhaXIoICZlY2RzYSwgY3R4ICkgKSA9PSAwICkKKyAgICAgICAgcmV0ID0gZWNkc2Ffc2lnbl93cmFwKCAmZWNkc2EsIG1kX2FsZywgaGFzaCwgaGFzaF9sZW4sIHNpZywgc2lnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKTsKKworICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmVjZHNhICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisKK3N0YXRpYyBpbnQgZWNrZXlfY2hlY2tfcGFpciggY29uc3Qgdm9pZCAqcHViLCBjb25zdCB2b2lkICpwcnYgKQoreworICAgIHJldHVybiggbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXYoIChjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICopIHB1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IG1iZWR0bHNfZWNwX2tleXBhaXIgKikgcHJ2ICkgKTsKK30KKworc3RhdGljIHZvaWQgKmVja2V5X2FsbG9jX3dyYXAoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfZWNwX2tleXBhaXIgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCBjdHggKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGVja2V5X2ZyZWVfd3JhcCggdm9pZCAqY3R4ICkKK3sKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoIChtYmVkdGxzX2VjcF9rZXlwYWlyICopIGN0eCApOworICAgIG1iZWR0bHNfZnJlZSggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIGVja2V5X2RlYnVnKCBjb25zdCB2b2lkICpjdHgsIG1iZWR0bHNfcGtfZGVidWdfaXRlbSAqaXRlbXMgKQoreworICAgIGl0ZW1zLT50eXBlID0gTUJFRFRMU19QS19ERUJVR19FQ1A7CisgICAgaXRlbXMtPm5hbWUgPSAiZWNrZXkuUSI7CisgICAgaXRlbXMtPnZhbHVlID0gJiggKChtYmVkdGxzX2VjcF9rZXlwYWlyICopIGN0eCktPlEgKTsKK30KKworY29uc3QgbWJlZHRsc19wa19pbmZvX3QgbWJlZHRsc19lY2tleV9pbmZvID0geworICAgIE1CRURUTFNfUEtfRUNLRVksCisgICAgIkVDIiwKKyAgICBlY2tleV9nZXRfYml0bGVuLAorICAgIGVja2V5X2Nhbl9kbywKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICBlY2tleV92ZXJpZnlfd3JhcCwKKyAgICBlY2tleV9zaWduX3dyYXAsCisjZWxzZQorICAgIE5VTEwsCisgICAgTlVMTCwKKyNlbmRpZgorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBlY2tleV9jaGVja19wYWlyLAorICAgIGVja2V5X2FsbG9jX3dyYXAsCisgICAgZWNrZXlfZnJlZV93cmFwLAorICAgIGVja2V5X2RlYnVnLAorfTsKKworLyoKKyAqIEVDIGtleSByZXN0cmljdGVkIHRvIEVDREgKKyAqLworc3RhdGljIGludCBlY2tleWRoX2Nhbl9kbyggbWJlZHRsc19wa190eXBlX3QgdHlwZSApCit7CisgICAgcmV0dXJuKCB0eXBlID09IE1CRURUTFNfUEtfRUNLRVkgfHwKKyAgICAgICAgICAgIHR5cGUgPT0gTUJFRFRMU19QS19FQ0tFWV9ESCApOworfQorCitjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX2Vja2V5ZGhfaW5mbyA9IHsKKyAgICBNQkVEVExTX1BLX0VDS0VZX0RILAorICAgICJFQ19ESCIsCisgICAgZWNrZXlfZ2V0X2JpdGxlbiwgICAgICAgICAvKiBTYW1lIHVuZGVybHlpbmcga2V5IHN0cnVjdHVyZSAqLworICAgIGVja2V5ZGhfY2FuX2RvLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgZWNrZXlfY2hlY2tfcGFpciwKKyAgICBlY2tleV9hbGxvY193cmFwLCAgICAgICAvKiBTYW1lIHVuZGVybHlpbmcga2V5IHN0cnVjdHVyZSAqLworICAgIGVja2V5X2ZyZWVfd3JhcCwgICAgICAgIC8qIFNhbWUgdW5kZXJseWluZyBrZXkgc3RydWN0dXJlICovCisgICAgZWNrZXlfZGVidWcsICAgICAgICAgICAgLyogU2FtZSB1bmRlcmx5aW5nIGtleSBzdHJ1Y3R1cmUgKi8KK307CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCitzdGF0aWMgaW50IGVjZHNhX2Nhbl9kbyggbWJlZHRsc19wa190eXBlX3QgdHlwZSApCit7CisgICAgcmV0dXJuKCB0eXBlID09IE1CRURUTFNfUEtfRUNEU0EgKTsKK30KKworc3RhdGljIGludCBlY2RzYV92ZXJpZnlfd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICAoKHZvaWQpIG1kX2FsZyk7CisKKyAgICByZXQgPSBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlKCAobWJlZHRsc19lY2RzYV9jb250ZXh0ICopIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW4sIHNpZywgc2lnX2xlbiApOworCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9FQ1BfU0lHX0xFTl9NSVNNQVRDSCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworc3RhdGljIGludCBlY2RzYV9zaWduX3dyYXAoIHZvaWQgKmN0eCwgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHNpemVfdCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnX2xlbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICByZXR1cm4oIG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlKCAobWJlZHRsc19lY2RzYV9jb250ZXh0ICopIGN0eCwKKyAgICAgICAgICAgICAgICBtZF9hbGcsIGhhc2gsIGhhc2hfbGVuLCBzaWcsIHNpZ19sZW4sIGZfcm5nLCBwX3JuZyApICk7Cit9CisKK3N0YXRpYyB2b2lkICplY2RzYV9hbGxvY193cmFwKCB2b2lkICkKK3sKKyAgICB2b2lkICpjdHggPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2VjZHNhX2NvbnRleHQgKSApOworCisgICAgaWYoIGN0eCAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19lY2RzYV9pbml0KCAobWJlZHRsc19lY2RzYV9jb250ZXh0ICopIGN0eCApOworCisgICAgcmV0dXJuKCBjdHggKTsKK30KKworc3RhdGljIHZvaWQgZWNkc2FfZnJlZV93cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggKG1iZWR0bHNfZWNkc2FfY29udGV4dCAqKSBjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX2VjZHNhX2luZm8gPSB7CisgICAgTUJFRFRMU19QS19FQ0RTQSwKKyAgICAiRUNEU0EiLAorICAgIGVja2V5X2dldF9iaXRsZW4sICAgICAvKiBDb21wYXRpYmxlIGtleSBzdHJ1Y3R1cmVzICovCisgICAgZWNkc2FfY2FuX2RvLAorICAgIGVjZHNhX3ZlcmlmeV93cmFwLAorICAgIGVjZHNhX3NpZ25fd3JhcCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgZWNrZXlfY2hlY2tfcGFpciwgICAvKiBDb21wYXRpYmxlIGtleSBzdHJ1Y3R1cmVzICovCisgICAgZWNkc2FfYWxsb2Nfd3JhcCwKKyAgICBlY2RzYV9mcmVlX3dyYXAsCisgICAgZWNrZXlfZGVidWcsICAgICAgICAvKiBDb21wYXRpYmxlIGtleSBzdHJ1Y3R1cmVzICovCit9OworI2VuZGlmIC8qIE1CRURUTFNfRUNEU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCkKKy8qCisgKiBTdXBwb3J0IGZvciBhbHRlcm5hdGl2ZSBSU0EtcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbnMKKyAqLworCitzdGF0aWMgaW50IHJzYV9hbHRfY2FuX2RvKCBtYmVkdGxzX3BrX3R5cGVfdCB0eXBlICkKK3sKKyAgICByZXR1cm4oIHR5cGUgPT0gTUJFRFRMU19QS19SU0EgKTsKK30KKworc3RhdGljIHNpemVfdCByc2FfYWx0X2dldF9iaXRsZW4oIGNvbnN0IHZvaWQgKmN0eCApCit7CisgICAgY29uc3QgbWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKnJzYV9hbHQgPSAoY29uc3QgbWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKikgY3R4OworCisgICAgcmV0dXJuKCA4ICogcnNhX2FsdC0+a2V5X2xlbl9mdW5jKCByc2FfYWx0LT5rZXkgKSApOworfQorCitzdGF0aWMgaW50IHJzYV9hbHRfc2lnbl93cmFwKCB2b2lkICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBzaXplX3QgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCit7CisgICAgbWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKnJzYV9hbHQgPSAobWJlZHRsc19yc2FfYWx0X2NvbnRleHQgKikgY3R4OworCisgICAgKnNpZ19sZW4gPSByc2FfYWx0LT5rZXlfbGVuX2Z1bmMoIHJzYV9hbHQtPmtleSApOworCisgICAgcmV0dXJuKCByc2FfYWx0LT5zaWduX2Z1bmMoIHJzYV9hbHQtPmtleSwgZl9ybmcsIHBfcm5nLCBNQkVEVExTX1JTQV9QUklWQVRFLAorICAgICAgICAgICAgICAgIG1kX2FsZywgKHVuc2lnbmVkIGludCkgaGFzaF9sZW4sIGhhc2gsIHNpZyApICk7Cit9CisKK3N0YXRpYyBpbnQgcnNhX2FsdF9kZWNyeXB0X3dyYXAoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCAqb2xlbiwgc2l6ZV90IG9zaXplLAorICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBtYmVkdGxzX3JzYV9hbHRfY29udGV4dCAqcnNhX2FsdCA9IChtYmVkdGxzX3JzYV9hbHRfY29udGV4dCAqKSBjdHg7CisKKyAgICAoKHZvaWQpIGZfcm5nKTsKKyAgICAoKHZvaWQpIHBfcm5nKTsKKworICAgIGlmKCBpbGVuICE9IHJzYV9hbHQtPmtleV9sZW5fZnVuYyggcnNhX2FsdC0+a2V5ICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgcmV0dXJuKCByc2FfYWx0LT5kZWNyeXB0X2Z1bmMoIHJzYV9hbHQtPmtleSwKKyAgICAgICAgICAgICAgICBNQkVEVExTX1JTQV9QUklWQVRFLCBvbGVuLCBpbnB1dCwgb3V0cHV0LCBvc2l6ZSApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCitzdGF0aWMgaW50IHJzYV9hbHRfY2hlY2tfcGFpciggY29uc3Qgdm9pZCAqcHViLCBjb25zdCB2b2lkICpwcnYgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc2lnW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIHNpemVfdCBzaWdfbGVuID0gMDsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIHJzYV9hbHRfZ2V0X2JpdGxlbiggcHJ2ICkgIT0gcnNhX2dldF9iaXRsZW4oIHB1YiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCApOworCisgICAgbWVtc2V0KCBoYXNoLCAweDJhLCBzaXplb2YoIGhhc2ggKSApOworCisgICAgaWYoICggcmV0ID0gcnNhX2FsdF9zaWduX3dyYXAoICh2b2lkICopIHBydiwgTUJFRFRMU19NRF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLCAmc2lnX2xlbiwgTlVMTCwgTlVMTCApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCByc2FfdmVyaWZ5X3dyYXAoICh2b2lkICopIHB1YiwgTUJFRFRMU19NRF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIHNpemVvZiggaGFzaCApLCBzaWcsIHNpZ19sZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKK3N0YXRpYyB2b2lkICpyc2FfYWx0X2FsbG9jX3dyYXAoIHZvaWQgKQoreworICAgIHZvaWQgKmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICkgKTsKKworICAgIGlmKCBjdHggIT0gTlVMTCApCisgICAgICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICkgKTsKKworICAgIHJldHVybiggY3R4ICk7Cit9CisKK3N0YXRpYyB2b2lkIHJzYV9hbHRfZnJlZV93cmFwKCB2b2lkICpjdHggKQoreworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfcnNhX2FsdF9jb250ZXh0ICkgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIGN0eCApOworfQorCitjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX3JzYV9hbHRfaW5mbyA9IHsKKyAgICBNQkVEVExTX1BLX1JTQV9BTFQsCisgICAgIlJTQS1hbHQiLAorICAgIHJzYV9hbHRfZ2V0X2JpdGxlbiwKKyAgICByc2FfYWx0X2Nhbl9kbywKKyAgICBOVUxMLAorICAgIHJzYV9hbHRfc2lnbl93cmFwLAorICAgIHJzYV9hbHRfZGVjcnlwdF93cmFwLAorICAgIE5VTEwsCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIHJzYV9hbHRfY2hlY2tfcGFpciwKKyNlbHNlCisgICAgTlVMTCwKKyNlbmRpZgorICAgIHJzYV9hbHRfYWxsb2Nfd3JhcCwKKyAgICByc2FfYWx0X2ZyZWVfd3JhcCwKKyAgICBOVUxMLAorfTsKKworI2VuZGlmIC8qIE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1BLX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3MxMS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtjczExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhNjQyNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3MxMS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKioKKyAqIFxmaWxlIHBrY3MxMS5jCisgKgorICogXGJyaWVmIFdyYXBwZXIgZm9yIFBLQ1MjMTEgbGlicmFyeSBsaWJwa2NzMTEtaGVscGVyCisgKgorICogXGF1dGhvciBBZHJpYWFuIGRlIEpvbmcgPGRlam9uZ0Bmb3gtaXQuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaW5jbHVkZSAibWJlZHRscy9wa2NzMTEuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTFfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcnQuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCBtYmVkdGxzX3BrY3MxMV9pbml0KCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfcGtjczExX2NvbnRleHQgKSApOworfQorCitpbnQgbWJlZHRsc19wa2NzMTFfeDUwOV9jZXJ0X2JpbmQoIG1iZWR0bHNfeDUwOV9jcnQgKmNlcnQsIHBrY3MxMWhfY2VydGlmaWNhdGVfdCBwa2NzMTFfY2VydCApCit7CisgICAgaW50IHJldCA9IDE7CisgICAgdW5zaWduZWQgY2hhciAqY2VydF9ibG9iID0gTlVMTDsKKyAgICBzaXplX3QgY2VydF9ibG9iX3NpemUgPSAwOworCisgICAgaWYoIGNlcnQgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAyOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIHBrY3MxMWhfY2VydGlmaWNhdGVfZ2V0Q2VydGlmaWNhdGVCbG9iKCBwa2NzMTFfY2VydCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZXJ0X2Jsb2Jfc2l6ZSApICE9IENLUl9PSyApCisgICAgeworICAgICAgICByZXQgPSAzOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgY2VydF9ibG9iID0gbWJlZHRsc19jYWxsb2MoIDEsIGNlcnRfYmxvYl9zaXplICk7CisgICAgaWYoIE5VTEwgPT0gY2VydF9ibG9iICkKKyAgICB7CisgICAgICAgIHJldCA9IDQ7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiggcGtjczExaF9jZXJ0aWZpY2F0ZV9nZXRDZXJ0aWZpY2F0ZUJsb2IoIHBrY3MxMV9jZXJ0LCBjZXJ0X2Jsb2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2VydF9ibG9iX3NpemUgKSAhPSBDS1JfT0sgKQorICAgIHsKKyAgICAgICAgcmV0ID0gNTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCAwICE9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoIGNlcnQsIGNlcnRfYmxvYiwgY2VydF9ibG9iX3NpemUgKSApCisgICAgeworICAgICAgICByZXQgPSA2OworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworY2xlYW51cDoKKyAgICBpZiggTlVMTCAhPSBjZXJ0X2Jsb2IgKQorICAgICAgICBtYmVkdGxzX2ZyZWUoIGNlcnRfYmxvYiApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworCitpbnQgbWJlZHRsc19wa2NzMTFfcHJpdl9rZXlfYmluZCggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqcHJpdl9rZXksCisgICAgICAgIHBrY3MxMWhfY2VydGlmaWNhdGVfdCBwa2NzMTFfY2VydCApCit7CisgICAgaW50IHJldCA9IDE7CisgICAgbWJlZHRsc194NTA5X2NydCBjZXJ0OworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2VydCApOworCisgICAgaWYoIHByaXZfa2V5ID09IE5VTEwgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpZiggMCAhPSBtYmVkdGxzX3BrY3MxMV94NTA5X2NlcnRfYmluZCggJmNlcnQsIHBrY3MxMV9jZXJ0ICkgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBwcml2X2tleS0+bGVuID0gbWJlZHRsc19wa19nZXRfbGVuKCAmY2VydC5wayApOworICAgIHByaXZfa2V5LT5wa2NzMTFoX2NlcnQgPSBwa2NzMTFfY2VydDsKKworICAgIHJldCA9IDA7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2VydCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKwordm9pZCBtYmVkdGxzX3BrY3MxMV9wcml2X2tleV9mcmVlKCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpwcml2X2tleSApCit7CisgICAgaWYoIE5VTEwgIT0gcHJpdl9rZXkgKQorICAgICAgICBwa2NzMTFoX2NlcnRpZmljYXRlX2ZyZWVDZXJ0aWZpY2F0ZSggcHJpdl9rZXktPnBrY3MxMWhfY2VydCApOworfQorCitpbnQgbWJlZHRsc19wa2NzMTFfZGVjcnlwdCggbWJlZHRsc19wa2NzMTFfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4gKQoreworICAgIHNpemVfdCBpbnB1dF9sZW4sIG91dHB1dF9sZW47CisKKyAgICBpZiggTlVMTCA9PSBjdHggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIE1CRURUTFNfUlNBX1BSSVZBVEUgIT0gbW9kZSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBvdXRwdXRfbGVuID0gaW5wdXRfbGVuID0gY3R4LT5sZW47CisKKyAgICBpZiggaW5wdXRfbGVuIDwgMTYgfHwgaW5wdXRfbGVuID4gb3V0cHV0X21heF9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgLyogRGV0ZXJtaW5lIHNpemUgb2Ygb3V0cHV0IGJ1ZmZlciAqLworICAgIGlmKCBwa2NzMTFoX2NlcnRpZmljYXRlX2RlY3J5cHRBbnkoIGN0eC0+cGtjczExaF9jZXJ0LCBDS01fUlNBX1BLQ1MsIGlucHV0LAorICAgICAgICAgICAgaW5wdXRfbGVuLCBOVUxMLCAmb3V0cHV0X2xlbiApICE9IENLUl9PSyApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBvdXRwdXRfbGVuID4gb3V0cHV0X21heF9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFICk7CisKKyAgICBpZiggcGtjczExaF9jZXJ0aWZpY2F0ZV9kZWNyeXB0QW55KCBjdHgtPnBrY3MxMWhfY2VydCwgQ0tNX1JTQV9QS0NTLCBpbnB1dCwKKyAgICAgICAgICAgIGlucHV0X2xlbiwgb3V0cHV0LCAmb3V0cHV0X2xlbiApICE9IENLUl9PSyApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworICAgIH0KKyAgICAqb2xlbiA9IG91dHB1dF9sZW47CisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3BrY3MxMV9zaWduKCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIHNpemVfdCBzaWdfbGVuID0gMCwgYXNuX2xlbiA9IDAsIG9pZF9zaXplID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc2lnOworICAgIGNvbnN0IGNoYXIgKm9pZDsKKworICAgIGlmKCBOVUxMID09IGN0eCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggTUJFRFRMU19SU0FfUFJJVkFURSAhPSBtb2RlICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBtZF9hbGcgIT0gTUJFRFRMU19NRF9OT05FICkKKyAgICB7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBpZiggbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9tZCggbWRfYWxnLCAmb2lkLCAmb2lkX3NpemUgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgaGFzaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICAgICAgYXNuX2xlbiA9IDEwICsgb2lkX3NpemU7CisgICAgfQorCisgICAgc2lnX2xlbiA9IGN0eC0+bGVuOworICAgIGlmKCBoYXNobGVuID4gc2lnX2xlbiB8fCBhc25fbGVuID4gc2lnX2xlbiB8fAorICAgICAgICBoYXNobGVuICsgYXNuX2xlbiA+IHNpZ19sZW4gKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBEaWdlc3RJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgICAgICAqICAgZGlnZXN0QWxnb3JpdGhtIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgICAgICAqICAgZGlnZXN0IERpZ2VzdCB9CisgICAgICAgICAqCisgICAgICAgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgICAgICoKKyAgICAgICAgICogRGlnZXN0IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICAgICAgICovCisgICAgICAgICpwKysgPSBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQ7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgKCAweDA4ICsgb2lkX3NpemUgKyBoYXNobGVuICk7CisgICAgICAgICpwKysgPSBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQ7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgKCAweDA0ICsgb2lkX3NpemUgKTsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfQVNOMV9PSUQ7CisgICAgICAgICpwKysgPSBvaWRfc2l6ZSAmIDB4RkY7CisgICAgICAgIG1lbWNweSggcCwgb2lkLCBvaWRfc2l6ZSApOworICAgICAgICBwICs9IG9pZF9zaXplOworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX05VTEw7CisgICAgICAgICpwKysgPSAweDAwOworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX09DVEVUX1NUUklORzsKKyAgICAgICAgKnArKyA9IGhhc2hsZW47CisgICAgfQorCisgICAgbWVtY3B5KCBwLCBoYXNoLCBoYXNobGVuICk7CisKKyAgICBpZiggcGtjczExaF9jZXJ0aWZpY2F0ZV9zaWduQW55KCBjdHgtPnBrY3MxMWhfY2VydCwgQ0tNX1JTQV9QS0NTLCBzaWcsCisgICAgICAgICAgICBhc25fbGVuICsgaGFzaGxlbiwgc2lnLCAmc2lnX2xlbiApICE9IENLUl9PSyApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BLQ1MxMV9DKSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtjczEyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9wa2NzMTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAzYTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtjczEyLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiAgUEtDUyMxMiBQZXJzb25hbCBJbmZvcm1hdGlvbiBFeGNoYW5nZSBTeW50YXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIFBLQ1MgIzEyIFBlcnNvbmFsIEluZm9ybWF0aW9uIEV4Y2hhbmdlIFN5bnRheCBTdGFuZGFyZCB2MS4xCisgKgorICogIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL3BrY3MvZmlsZXMvaDExMzAxLXdwLXBrY3MtMTJ2MS0xLXBlcnNvbmFsLWluZm9ybWF0aW9uLWV4Y2hhbmdlLXN5bnRheC5wZGYKKyAqICBmdHA6Ly9mdHAucnNhc2VjdXJpdHkuY29tL3B1Yi9wa2NzL3BrY3MtMTIvcGtjcy0xMnYxLTEuYXNuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMTJfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcGtjczEyLmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xLmgiCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNpbmNsdWRlICJtYmVkdGxzL2FyYzQuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworc3RhdGljIGludCBwa2NzMTJfcGFyc2VfcGJlX3BhcmFtcyggbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX2J1ZiAqc2FsdCwgaW50ICppdGVyYXRpb25zICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKipwID0gJnBhcmFtcy0+cDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBwYXJhbXMtPnAgKyBwYXJhbXMtPmxlbjsKKworICAgIC8qCisgICAgICogIHBrY3MtMTJQYmVQYXJhbXMgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICBzYWx0ICAgICAgICAgIE9DVEVUIFNUUklORywKKyAgICAgKiAgICBpdGVyYXRpb25zICAgIElOVEVHRVIKKyAgICAgKiAgfQorICAgICAqCisgICAgICovCisgICAgaWYoIHBhcmFtcy0+dGFnICE9ICggTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1MxMl9QQkVfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZzYWx0LT5sZW4sIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1MxMl9QQkVfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIHNhbHQtPnAgPSAqcDsKKyAgICAqcCArPSBzYWx0LT5sZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggcCwgZW5kLCBpdGVyYXRpb25zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNkZWZpbmUgUEtDUzEyX01BWF9QV0RMRU4gMTI4CisKK3N0YXRpYyBpbnQgcGtjczEyX3BiZV9kZXJpdmVfa2V5X2l2KCBtYmVkdGxzX2FzbjFfYnVmICpwYmVfcGFyYW1zLCBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2LCAgc2l6ZV90IGl2bGVuICkKK3sKKyAgICBpbnQgcmV0LCBpdGVyYXRpb25zID0gMDsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIHNhbHQ7CisgICAgc2l6ZV90IGk7CisgICAgdW5zaWduZWQgY2hhciB1bmlwd2RbUEtDUzEyX01BWF9QV0RMRU4gKiAyICsgMl07CisKKyAgICBpZiggcHdkbGVuID4gUEtDUzEyX01BWF9QV0RMRU4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1MxMl9CQURfSU5QVVRfREFUQSApOworCisgICAgbWVtc2V0KCAmc2FsdCwgMCwgc2l6ZW9mKG1iZWR0bHNfYXNuMV9idWYpICk7CisgICAgbWVtc2V0KCAmdW5pcHdkLCAwLCBzaXplb2YodW5pcHdkKSApOworCisgICAgaWYoICggcmV0ID0gcGtjczEyX3BhcnNlX3BiZV9wYXJhbXMoIHBiZV9wYXJhbXMsICZzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlcmF0aW9ucyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgcHdkbGVuOyBpKysgKQorICAgICAgICB1bmlwd2RbaSAqIDIgKyAxXSA9IHB3ZFtpXTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtjczEyX2Rlcml2YXRpb24oIGtleSwga2V5bGVuLCB1bmlwd2QsIHB3ZGxlbiAqIDIgKyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0LnAsIHNhbHQubGVuLCBtZF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfS0VZLCBpdGVyYXRpb25zICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGl2ID09IE5VTEwgfHwgaXZsZW4gPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa2NzMTJfZGVyaXZhdGlvbiggaXYsIGl2bGVuLCB1bmlwd2QsIHB3ZGxlbiAqIDIgKyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0LnAsIHNhbHQubGVuLCBtZF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfSVYsIGl0ZXJhdGlvbnMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgcmV0dXJuKCAwICk7Cit9CisKKyN1bmRlZiBQS0NTMTJfTUFYX1BXRExFTgorCitpbnQgbWJlZHRsc19wa2NzMTJfcGJlX3NoYTFfcmM0XzEyOCggbWJlZHRsc19hc24xX2J1ZiAqcGJlX3BhcmFtcywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisjaWYgIWRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgKCh2b2lkKSBwYmVfcGFyYW1zKTsKKyAgICAoKHZvaWQpIG1vZGUpOworICAgICgodm9pZCkgcHdkKTsKKyAgICAoKHZvaWQpIHB3ZGxlbik7CisgICAgKCh2b2lkKSBkYXRhKTsKKyAgICAoKHZvaWQpIGxlbik7CisgICAgKCh2b2lkKSBvdXRwdXQpOworICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyNlbHNlCisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisgICAgbWJlZHRsc19hcmM0X2NvbnRleHQgY3R4OworICAgICgodm9pZCkgbW9kZSk7CisKKyAgICBtYmVkdGxzX2FyYzRfaW5pdCggJmN0eCApOworCisgICAgaWYoICggcmV0ID0gcGtjczEyX3BiZV9kZXJpdmVfa2V5X2l2KCBwYmVfcGFyYW1zLCBNQkVEVExTX01EX1NIQTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd2QsIHB3ZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgMTYsIE5VTEwsIDAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2FyYzRfc2V0dXAoICZjdHgsIGtleSwgMTYgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FyYzRfY3J5cHQoICZjdHgsIGxlbiwgZGF0YSwgb3V0cHV0ICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCitleGl0OgorICAgIG1iZWR0bHNfemVyb2l6ZSgga2V5LCBzaXplb2YoIGtleSApICk7CisgICAgbWJlZHRsc19hcmM0X2ZyZWUoICZjdHggKTsKKworICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KK30KKworaW50IG1iZWR0bHNfcGtjczEyX3BiZSggbWJlZHRsc19hc24xX2J1ZiAqcGJlX3BhcmFtcywgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfdHlwZV90IGNpcGhlcl90eXBlLCBtYmVkdGxzX21kX3R5cGVfdCBtZF90eXBlLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgIHNpemVfdCBwd2RsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCByZXQsIGtleWxlbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdOworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNpcGhlcl9jdHg7CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX3R5cGUgKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIGtleWxlbiA9IGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuIC8gODsKKworICAgIGlmKCAoIHJldCA9IHBrY3MxMl9wYmVfZGVyaXZlX2tleV9pdiggcGJlX3BhcmFtcywgbWRfdHlwZSwgcHdkLCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBjaXBoZXJfaW5mby0+aXZfc2l6ZSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjaXBoZXJfY3R4ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmNpcGhlcl9jdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY2lwaGVyX2N0eCwga2V5LCA4ICoga2V5bGVuLCAobWJlZHRsc19vcGVyYXRpb25fdCkgbW9kZSApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggJmNpcGhlcl9jdHgsIGl2LCBjaXBoZXJfaW5mby0+aXZfc2l6ZSApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY2lwaGVyX2N0eCApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmNpcGhlcl9jdHgsIGRhdGEsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY2lwaGVyX2N0eCwgb3V0cHV0ICsgb2xlbiwgJm9sZW4gKSApICE9IDAgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QS0NTMTJfUEFTU1dPUkRfTUlTTUFUQ0g7CisKK2V4aXQ6CisgICAgbWJlZHRsc196ZXJvaXplKCBrZXksIHNpemVvZigga2V5ICkgKTsKKyAgICBtYmVkdGxzX3plcm9pemUoIGl2LCAgc2l6ZW9mKCBpdiAgKSApOworICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjaXBoZXJfY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCitzdGF0aWMgdm9pZCBwa2NzMTJfZmlsbF9idWZmZXIoIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsbGVyLCBzaXplX3QgZmlsbF9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBkYXRhOworICAgIHNpemVfdCB1c2VfbGVuOworCisgICAgd2hpbGUoIGRhdGFfbGVuID4gMCApCisgICAgeworICAgICAgICB1c2VfbGVuID0gKCBkYXRhX2xlbiA+IGZpbGxfbGVuICkgPyBmaWxsX2xlbiA6IGRhdGFfbGVuOworICAgICAgICBtZW1jcHkoIHAsIGZpbGxlciwgdXNlX2xlbiApOworICAgICAgICBwICs9IHVzZV9sZW47CisgICAgICAgIGRhdGFfbGVuIC09IHVzZV9sZW47CisgICAgfQorfQorCitpbnQgbWJlZHRsc19wa2NzMTJfZGVyaXZhdGlvbiggdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3ZCwgc2l6ZV90IHB3ZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgc2l6ZV90IHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX3R5cGUsIGludCBpZCwgaW50IGl0ZXJhdGlvbnMgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgaW50IGo7CisKKyAgICB1bnNpZ25lZCBjaGFyIGRpdmVyc2lmaWVyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBzYWx0X2Jsb2NrWzEyOF0sIHB3ZF9ibG9ja1sxMjhdLCBoYXNoX2Jsb2NrWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX291dHB1dFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIHVuc2lnbmVkIGNoYXIgYzsKKworICAgIHNpemVfdCBobGVuLCB1c2VfbGVuLCB2LCBpOworCisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OworCisgICAgLy8gVGhpcyB2ZXJzaW9uIG9ubHkgYWxsb3dzIG1heCBvZiA2NCBieXRlcyBvZiBwYXNzd29yZCBvciBzYWx0CisgICAgaWYoIGRhdGFsZW4gPiAxMjggfHwgcHdkbGVuID4gNjQgfHwgc2FsdGxlbiA+IDY0ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTMTJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF90eXBlICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKworICAgIGlmKCBobGVuIDw9IDMyICkKKyAgICAgICAgdiA9IDY0OworICAgIGVsc2UKKyAgICAgICAgdiA9IDEyODsKKworICAgIG1lbXNldCggZGl2ZXJzaWZpZXIsICh1bnNpZ25lZCBjaGFyKSBpZCwgdiApOworCisgICAgcGtjczEyX2ZpbGxfYnVmZmVyKCBzYWx0X2Jsb2NrLCB2LCBzYWx0LCBzYWx0bGVuICk7CisgICAgcGtjczEyX2ZpbGxfYnVmZmVyKCBwd2RfYmxvY2ssICB2LCBwd2QsICBwd2RsZW4gICk7CisKKyAgICBwID0gZGF0YTsKKyAgICB3aGlsZSggZGF0YWxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIGhhc2goIGRpdmVyc2lmaWVyIHx8IHNhbHRfYmxvY2sgfHwgcHdkX2Jsb2NrICkKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zdGFydHMoICZtZF9jdHggKSApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBkaXZlcnNpZmllciwgdiApICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIHNhbHRfYmxvY2ssIHYgKSApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBwd2RfYmxvY2ssIHYgKSApICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfZmluaXNoKCAmbWRfY3R4LCBoYXNoX291dHB1dCApICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgLy8gUGVyZm9ybSByZW1haW5pbmcgKCBpdGVyYXRpb25zIC0gMSApIHJlY3Vyc2l2ZSBoYXNoIGNhbGN1bGF0aW9ucworICAgICAgICBmb3IoIGkgPSAxOyBpIDwgKHNpemVfdCkgaXRlcmF0aW9uczsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZCggbWRfaW5mbywgaGFzaF9vdXRwdXQsIGhsZW4sIGhhc2hfb3V0cHV0ICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICB1c2VfbGVuID0gKCBkYXRhbGVuID4gaGxlbiApID8gaGxlbiA6IGRhdGFsZW47CisgICAgICAgIG1lbWNweSggcCwgaGFzaF9vdXRwdXQsIHVzZV9sZW4gKTsKKyAgICAgICAgZGF0YWxlbiAtPSB1c2VfbGVuOworICAgICAgICBwICs9IHVzZV9sZW47CisKKyAgICAgICAgaWYoIGRhdGFsZW4gPT0gMCApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBDb25jYXRlbmF0aW5nIGNvcGllcyBvZiBoYXNoX291dHB1dCBpbnRvIGhhc2hfYmxvY2sgKEIpCisgICAgICAgIHBrY3MxMl9maWxsX2J1ZmZlciggaGFzaF9ibG9jaywgdiwgaGFzaF9vdXRwdXQsIGhsZW4gKTsKKworICAgICAgICAvLyBCICs9IDEKKyAgICAgICAgZm9yKCBpID0gdjsgaSA+IDA7IGktLSApCisgICAgICAgICAgICBpZiggKytoYXNoX2Jsb2NrW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBzYWx0X2Jsb2NrICs9IEIKKyAgICAgICAgYyA9IDA7CisgICAgICAgIGZvciggaSA9IHY7IGkgPiAwOyBpLS0gKQorICAgICAgICB7CisgICAgICAgICAgICBqID0gc2FsdF9ibG9ja1tpIC0gMV0gKyBoYXNoX2Jsb2NrW2kgLSAxXSArIGM7CisgICAgICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpIChqID4+IDgpOworICAgICAgICAgICAgc2FsdF9ibG9ja1tpIC0gMV0gPSBqICYgMHhGRjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHB3ZF9ibG9jayAgKz0gQgorICAgICAgICBjID0gMDsKKyAgICAgICAgZm9yKCBpID0gdjsgaSA+IDA7IGktLSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGogPSBwd2RfYmxvY2tbaSAtIDFdICsgaGFzaF9ibG9ja1tpIC0gMV0gKyBjOworICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAoaiA+PiA4KTsKKyAgICAgICAgICAgIHB3ZF9ibG9ja1tpIC0gMV0gPSBqICYgMHhGRjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgbWJlZHRsc196ZXJvaXplKCBzYWx0X2Jsb2NrLCBzaXplb2YoIHNhbHRfYmxvY2sgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggcHdkX2Jsb2NrLCBzaXplb2YoIHB3ZF9ibG9jayApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBoYXNoX2Jsb2NrLCBzaXplb2YoIGhhc2hfYmxvY2sgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggaGFzaF9vdXRwdXQsIHNpemVvZiggaGFzaF9vdXRwdXQgKSApOworCisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTJfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtjczUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3M1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4ZDVhOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrY3M1LmMKQEAgLTAsMCArMSw0MDYgQEAKKy8qKgorICogXGZpbGUgcGtjczUuYworICoKKyAqIFxicmllZiBQS0NTIzUgZnVuY3Rpb25zCisgKgorICogXGF1dGhvciBNYXRoaWFzIE9sc3NvbiA8bWF0aGlhc0Brb21wZXRlbnN1bS5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogUEtDUyM1IGluY2x1ZGVzIFBCS0RGMiBhbmQgbW9yZQorICoKKyAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4OTggKFNwZWNpZmljYXRpb24pCisgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MDcwIChUZXN0IHZlY3RvcnMpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9wa2NzNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXNuMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2lwaGVyLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBwcmludGYKKyNlbmRpZgorCitzdGF0aWMgaW50IHBrY3M1X3BhcnNlX3Bia2RmMl9wYXJhbXMoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX2J1ZiAqc2FsdCwgaW50ICppdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmtleWxlbiwgbWJlZHRsc19tZF90eXBlX3QgKm1kX3R5cGUgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19hc24xX2J1ZiBwcmZfYWxnX29pZDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gcGFyYW1zLT5wOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHBhcmFtcy0+cCArIHBhcmFtcy0+bGVuOworCisgICAgaWYoIHBhcmFtcy0+dGFnICE9ICggTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisgICAgLyoKKyAgICAgKiAgUEJLREYyLXBhcmFtcyA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgIHNhbHQgICAgICAgICAgICAgIE9DVEVUIFNUUklORywKKyAgICAgKiAgICBpdGVyYXRpb25Db3VudCAgICBJTlRFR0VSLAorICAgICAqICAgIGtleUxlbmd0aCAgICAgICAgIElOVEVHRVIgT1BUSU9OQUwKKyAgICAgKiAgICBwcmYgICAgICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyIERFRkFVTFQgYWxnaWQtaG1hY1dpdGhTSEExCisgICAgICogIH0KKyAgICAgKgorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmc2FsdC0+bGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgc2FsdC0+cCA9IHA7CisgICAgcCArPSBzYWx0LT5sZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggJnAsIGVuZCwgaXRlcmF0aW9ucyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoICZwLCBlbmQsIGtleWxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9hbGdfbnVsbCggJnAsIGVuZCwgJnByZl9hbGdfb2lkICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoIE1CRURUTFNfT0lEX0NNUCggTUJFRFRMU19PSURfSE1BQ19TSEExLCAmcHJmX2FsZ19vaWQgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICAqbWRfdHlwZSA9IE1CRURUTFNfTURfU0hBMTsKKworICAgIGlmKCBwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfcGtjczVfcGJlczIoIGNvbnN0IG1iZWR0bHNfYXNuMV9idWYgKnBiZV9wYXJhbXMsIGludCBtb2RlLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsICBzaXplX3QgcHdkbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgcmV0LCBpdGVyYXRpb25zID0gMCwga2V5bGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworICAgIG1iZWR0bHNfYXNuMV9idWYga2RmX2FsZ19vaWQsIGVuY19zY2hlbWVfb2lkLCBrZGZfYWxnX3BhcmFtcywgZW5jX3NjaGVtZV9wYXJhbXM7CisgICAgbWJlZHRsc19hc24xX2J1ZiBzYWx0OworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX3R5cGUgPSBNQkVEVExTX01EX1NIQTE7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdLCBpdlszMl07CisgICAgc2l6ZV90IG9sZW4gPSAwOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OworICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXJfYWxnOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjaXBoZXJfY3R4OworCisgICAgcCA9IHBiZV9wYXJhbXMtPnA7CisgICAgZW5kID0gcCArIHBiZV9wYXJhbXMtPmxlbjsKKworICAgIC8qCisgICAgICogIFBCRVMyLXBhcmFtcyA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgIGtleURlcml2YXRpb25GdW5jIEFsZ29yaXRobUlkZW50aWZpZXIge3tQQkVTMi1LREZzfX0sCisgICAgICogICAgZW5jcnlwdGlvblNjaGVtZSBBbGdvcml0aG1JZGVudGlmaWVyIHt7UEJFUzItRW5jc319CisgICAgICogIH0KKyAgICAgKi8KKyAgICBpZiggcGJlX3BhcmFtcy0+dGFnICE9ICggTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggJnAsIGVuZCwgJmtkZl9hbGdfb2lkLCAma2RmX2FsZ19wYXJhbXMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICAvLyBPbmx5IFBCS0RGMiBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIC8vCisgICAgaWYoIE1CRURUTFNfT0lEX0NNUCggTUJFRFRMU19PSURfUEtDUzVfUEJLREYyLCAma2RmX2FsZ19vaWQgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBpZiggKCByZXQgPSBwa2NzNV9wYXJzZV9wYmtkZjJfcGFyYW1zKCAma2RmX2FsZ19wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNhbHQsICZpdGVyYXRpb25zLCAma2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZF90eXBlICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX3R5cGUgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZyggJnAsIGVuZCwgJmVuY19zY2hlbWVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY19zY2hlbWVfcGFyYW1zICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc19vaWRfZ2V0X2NpcGhlcl9hbGcoICZlbmNfc2NoZW1lX29pZCwgJmNpcGhlcl9hbGcgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfYWxnICk7CisgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIC8qCisgICAgICogVGhlIHZhbHVlIG9mIGtleWxlbiBmcm9tIHBrY3M1X3BhcnNlX3Bia2RmMl9wYXJhbXMoKSBpcyBpZ25vcmVkCisgICAgICogc2luY2UgaXQgaXMgb3B0aW9uYWwgYW5kIHdlIGRvbid0IGtub3cgaWYgaXQgd2FzIHNldCBvciBub3QKKyAgICAgKi8KKyAgICBrZXlsZW4gPSBjaXBoZXJfaW5mby0+a2V5X2JpdGxlbiAvIDg7CisKKyAgICBpZiggZW5jX3NjaGVtZV9wYXJhbXMudGFnICE9IE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgfHwKKyAgICAgICAgZW5jX3NjaGVtZV9wYXJhbXMubGVuICE9IGNpcGhlcl9pbmZvLT5pdl9zaXplICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY2lwaGVyX2N0eCApOworCisgICAgbWVtY3B5KCBpdiwgZW5jX3NjaGVtZV9wYXJhbXMucCwgZW5jX3NjaGVtZV9wYXJhbXMubGVuICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAxICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYyggJm1kX2N0eCwgcHdkLCBwd2RsZW4sIHNhbHQucCwgc2FsdC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMsIGtleWxlbiwga2V5ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmNpcGhlcl9jdHgsIGNpcGhlcl9pbmZvICkgKSAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY2lwaGVyX2N0eCwga2V5LCA4ICoga2V5bGVuLCAobWJlZHRsc19vcGVyYXRpb25fdCkgbW9kZSApICkgIT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2NyeXB0KCAmY2lwaGVyX2N0eCwgaXYsIGVuY19zY2hlbWVfcGFyYW1zLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGRhdGFsZW4sIG91dHB1dCwgJm9sZW4gKSApICE9IDAgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QS0NTNV9QQVNTV09SRF9NSVNNQVRDSDsKKworZXhpdDoKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY2lwaGVyX2N0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfcGtjczVfcGJrZGYyX2htYWMoIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgc2l6ZV90IHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpdGVyYXRpb25fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleV9sZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgaW50IHJldCwgajsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIG1kMVtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIHdvcmtbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBtZF9zaXplID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggY3R4LT5tZF9pbmZvICk7CisgICAgc2l6ZV90IHVzZV9sZW47CisgICAgdW5zaWduZWQgY2hhciAqb3V0X3AgPSBvdXRwdXQ7CisgICAgdW5zaWduZWQgY2hhciBjb3VudGVyWzRdOworCisgICAgbWVtc2V0KCBjb3VudGVyLCAwLCA0ICk7CisgICAgY291bnRlclszXSA9IDE7CisKKyAgICBpZiggaXRlcmF0aW9uX2NvdW50ID4gMHhGRkZGRkZGRiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtDUzVfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHdoaWxlKCBrZXlfbGVuZ3RoICkKKyAgICB7CisgICAgICAgIC8vIFUxIGVuZHMgdXAgaW4gd29yaworICAgICAgICAvLworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCBjdHgsIHBhc3N3b3JkLCBwbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggY3R4LCBzYWx0LCBzbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggY3R4LCBjb3VudGVyLCA0ICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggY3R4LCB3b3JrICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgbWVtY3B5KCBtZDEsIHdvcmssIG1kX3NpemUgKTsKKworICAgICAgICBmb3IoIGkgPSAxOyBpIDwgaXRlcmF0aW9uX2NvdW50OyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBVMiBlbmRzIHVwIGluIG1kMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfaG1hY19zdGFydHMoIGN0eCwgcGFzc3dvcmQsIHBsZW4gKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIGN0eCwgbWQxLCBtZF9zaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2htYWNfZmluaXNoKCBjdHgsIG1kMSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgLy8gVTEgeG9yIFUyCisgICAgICAgICAgICAvLworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IG1kX3NpemU7IGorKyApCisgICAgICAgICAgICAgICAgd29ya1tqXSBePSBtZDFbal07CisgICAgICAgIH0KKworICAgICAgICB1c2VfbGVuID0gKCBrZXlfbGVuZ3RoIDwgbWRfc2l6ZSApID8ga2V5X2xlbmd0aCA6IG1kX3NpemU7CisgICAgICAgIG1lbWNweSggb3V0X3AsIHdvcmssIHVzZV9sZW4gKTsKKworICAgICAgICBrZXlfbGVuZ3RoIC09ICh1aW50MzJfdCkgdXNlX2xlbjsKKyAgICAgICAgb3V0X3AgKz0gdXNlX2xlbjsKKworICAgICAgICBmb3IoIGkgPSA0OyBpID4gMDsgaS0tICkKKyAgICAgICAgICAgIGlmKCArK2NvdW50ZXJbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQoraW50IG1iZWR0bHNfcGtjczVfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQQktERjIgKFNIQTEpOiBza2lwcGVkXG5cbiIgKTsKKworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2RlZmluZSBNQVhfVEVTVFMgICA2CisKK3N0YXRpYyBjb25zdCBzaXplX3QgcGxlbltNQVhfVEVTVFNdID0KKyAgICB7IDgsIDgsIDgsIDI0LCA5IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhc3N3b3JkW01BWF9URVNUU11bMzJdID0KK3sKKyAgICAicGFzc3dvcmQiLAorICAgICJwYXNzd29yZCIsCisgICAgInBhc3N3b3JkIiwKKyAgICAicGFzc3dvcmRQQVNTV09SRHBhc3N3b3JkIiwKKyAgICAicGFzc1wwd29yZCIsCit9OworCitzdGF0aWMgY29uc3Qgc2l6ZV90IHNsZW5bTUFYX1RFU1RTXSA9CisgICAgeyA0LCA0LCA0LCAzNiwgNSB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWx0W01BWF9URVNUU11bNDBdID0KK3sKKyAgICAic2FsdCIsCisgICAgInNhbHQiLAorICAgICJzYWx0IiwKKyAgICAic2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0IiwKKyAgICAic2FcMGx0IiwKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBpdF9jbnRbTUFYX1RFU1RTXSA9CisgICAgeyAxLCAyLCA0MDk2LCA0MDk2LCA0MDk2IH07CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBrZXlfbGVuW01BWF9URVNUU10gPQorICAgIHsgMjAsIDIwLCAyMCwgMjUsIDE2IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlc3VsdF9rZXlbTUFYX1RFU1RTXVszMl0gPQoreworICAgIHsgMHgwYywgMHg2MCwgMHhjOCwgMHgwZiwgMHg5NiwgMHgxZiwgMHgwZSwgMHg3MSwKKyAgICAgIDB4ZjMsIDB4YTksIDB4YjUsIDB4MjQsIDB4YWYsIDB4NjAsIDB4MTIsIDB4MDYsCisgICAgICAweDJmLCAweGUwLCAweDM3LCAweGE2IH0sCisgICAgeyAweGVhLCAweDZjLCAweDAxLCAweDRkLCAweGM3LCAweDJkLCAweDZmLCAweDhjLAorICAgICAgMHhjZCwgMHgxZSwgMHhkOSwgMHgyYSwgMHhjZSwgMHgxZCwgMHg0MSwgMHhmMCwKKyAgICAgIDB4ZDgsIDB4ZGUsIDB4ODksIDB4NTcgfSwKKyAgICB7IDB4NGIsIDB4MDAsIDB4NzksIDB4MDEsIDB4YjcsIDB4NjUsIDB4NDgsIDB4OWEsCisgICAgICAweGJlLCAweGFkLCAweDQ5LCAweGQ5LCAweDI2LCAweGY3LCAweDIxLCAweGQwLAorICAgICAgMHg2NSwgMHhhNCwgMHgyOSwgMHhjMSB9LAorICAgIHsgMHgzZCwgMHgyZSwgMHhlYywgMHg0ZiwgMHhlNCwgMHgxYywgMHg4NCwgMHg5YiwKKyAgICAgIDB4ODAsIDB4YzgsIDB4ZDgsIDB4MzYsIDB4NjIsIDB4YzAsIDB4ZTQsIDB4NGEsCisgICAgICAweDhiLCAweDI5LCAweDFhLCAweDk2LCAweDRjLCAweGYyLCAweGYwLCAweDcwLAorICAgICAgMHgzOCB9LAorICAgIHsgMHg1NiwgMHhmYSwgMHg2YSwgMHhhNywgMHg1NSwgMHg0OCwgMHgwOSwgMHg5ZCwKKyAgICAgIDB4Y2MsIDB4MzcsIDB4ZDcsIDB4ZjAsIDB4MzQsIDB4MjUsIDB4ZTAsIDB4YzMgfSwKK307CisKK2ludCBtYmVkdGxzX3BrY3M1X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IHNoYTFfY3R4OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICppbmZvX3NoYTE7CisgICAgaW50IHJldCwgaTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVs2NF07CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZzaGExX2N0eCApOworCisgICAgaW5mb19zaGExID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEExICk7CisgICAgaWYoIGluZm9fc2hhMSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmc2hhMV9jdHgsIGluZm9fc2hhMSwgMSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IE1BWF9URVNUUzsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFBCS0RGMiAoU0hBMSkgIyVkOiAiLCBpICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYyggJnNoYTFfY3R4LCBwYXNzd29yZFtpXSwgcGxlbltpXSwgc2FsdFtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVuW2ldLCBpdF9jbnRbaV0sIGtleV9sZW5baV0sIGtleSApOworICAgICAgICBpZiggcmV0ICE9IDAgfHwKKyAgICAgICAgICAgIG1lbWNtcCggcmVzdWx0X2tleVtpXSwga2V5LCBrZXlfbGVuW2ldICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmc2hhMV9jdHggKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1M1X0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrcGFyc2UuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BrcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU0MjllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGtwYXJzZS5jCkBAIC0wLDAgKzEsMTI5MyBAQAorLyoKKyAqICBQdWJsaWMgS2V5IGxheWVyIGZvciBwYXJzaW5nIGtleSBmaWxlcyBhbmQgc3RydWN0dXJlcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1M1X0MpCisjaW5jbHVkZSAibWJlZHRscy9wa2NzNS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGtjczEyLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKiBJbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBuZXZlciBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlciAqLworc3RhdGljIHZvaWQgbWJlZHRsc196ZXJvaXplKCB2b2lkICp2LCBzaXplX3QgbiApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwID0gdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogTG9hZCBhbGwgZGF0YSBmcm9tIGEgZmlsZSBpbnRvIGEgZ2l2ZW4gYnVmZmVyLgorICoKKyAqIFRoZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gZWl0aGVyIFBFTSBvciBERVIgZW5jb2RlZCBkYXRhLgorICogQSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgaXMgYWx3YXlzIGFwcGVuZGVkLiBJdCBpcyBpbmNsdWRlZCBpbiB0aGUgYW5ub3VuY2VkCisgKiBsZW5ndGggb25seSBpZiB0aGUgZGF0YSBsb29rcyBsaWtlIGl0IGlzIFBFTSBlbmNvZGVkLgorICovCitpbnQgbWJlZHRsc19wa19sb2FkX2ZpbGUoIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCAqbiApCit7CisgICAgRklMRSAqZjsKKyAgICBsb25nIHNpemU7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZJTEVfSU9fRVJST1IgKTsKKworICAgIGZzZWVrKCBmLCAwLCBTRUVLX0VORCApOworICAgIGlmKCAoIHNpemUgPSBmdGVsbCggZiApICkgPT0gLTEgKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRklMRV9JT19FUlJPUiApOworICAgIH0KKyAgICBmc2VlayggZiwgMCwgU0VFS19TRVQgKTsKKworICAgICpuID0gKHNpemVfdCkgc2l6ZTsKKworICAgIGlmKCAqbiArIDEgPT0gMCB8fAorICAgICAgICAoICpidWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgKm4gKyAxICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIGlmKCBmcmVhZCggKmJ1ZiwgMSwgKm4sIGYgKSAhPSAqbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCAqYnVmICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRklMRV9JT19FUlJPUiApOworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgKCpidWYpWypuXSA9ICdcMCc7CisKKyAgICBpZiggc3Ryc3RyKCAoY29uc3QgY2hhciAqKSAqYnVmLCAiLS0tLS1CRUdJTiAiICkgIT0gTlVMTCApCisgICAgICAgICsrKm47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIExvYWQgYW5kIHBhcnNlIGEgcHJpdmF0ZSBrZXkKKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggbWJlZHRsc19wa19jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHdkICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfbG9hZF9maWxlKCBwYXRoLCAmYnVmLCAmbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggcHdkID09IE5VTEwgKQorICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleSggY3R4LCBidWYsIG4sIE5VTEwsIDAgKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCBjdHgsIGJ1ZiwgbiwKKyAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwd2QsIHN0cmxlbiggcHdkICkgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggYnVmLCBuICk7CisgICAgbWJlZHRsc19mcmVlKCBidWYgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBMb2FkIGFuZCBwYXJzZSBhIHB1YmxpYyBrZXkKKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfbG9hZF9maWxlKCBwYXRoLCAmYnVmLCAmbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXkoIGN0eCwgYnVmLCBuICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGJ1ZiwgbiApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qIE1pbmltYWxseSBwYXJzZSBhbiBFQ1BhcmFtZXRlcnMgYnVmZmVyIHRvIGFuZCBtYmVkdGxzX2FzbjFfYnVmCisgKgorICogRUNQYXJhbWV0ZXJzIDo6PSBDSE9JQ0UgeworICogICBuYW1lZEN1cnZlICAgICAgICAgT0JKRUNUIElERU5USUZJRVIKKyAqICAgc3BlY2lmaWVkQ3VydmUgICAgIFNwZWNpZmllZEVDRG9tYWluIC0tID0gU0VRVUVOQ0UgeyAuLi4gfQorICogICAtLSBpbXBsaWNpdEN1cnZlICAgTlVMTAorICogfQorICovCitzdGF0aWMgaW50IHBrX2dldF9lY3BhcmFtcyggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfYnVmICpwYXJhbXMgKQoreworICAgIGludCByZXQ7CisKKyAgICAvKiBUYWcgbWF5IGJlIGVpdGhlciBPSUQgb3IgU0VRVUVOQ0UgKi8KKyAgICBwYXJhbXMtPnRhZyA9ICoqcDsKKyAgICBpZiggcGFyYW1zLT50YWcgIT0gTUJFRFRMU19BU04xX09JRAorI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRCkKKyAgICAgICAgICAgICYmIHBhcmFtcy0+dGFnICE9ICggTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkKKyNlbmRpZgorICAgICAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmcGFyYW1zLT5sZW4sIHBhcmFtcy0+dGFnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgcGFyYW1zLT5wID0gKnA7CisgICAgKnAgKz0gcGFyYW1zLT5sZW47CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRCkKKy8qCisgKiBQYXJzZSBhIFNwZWNpZmllZEVDRG9tYWluIChTRUMgMSBDLjIpIGFuZCAobW9zdGx5KSBmaWxsIHRoZSBncm91cCB3aXRoIGl0LgorICogV0FSTklORzogdGhlIHJlc3VsdGluZyBncm91cCBzaG91bGQgb25seSBiZSB1c2VkIHdpdGgKKyAqIHBrX2dyb3VwX2lkX2Zyb21fc3BlY2lmaWVkKCksIHNpbmNlIGl0cyBiYXNlIHBvaW50IG1heSBub3QgYmUgc2V0IGNvcnJlY3RseQorICogaWYgaXQgd2FzIGVuY29kZWQgY29tcHJlc3NlZC4KKyAqCisgKiAgU3BlY2lmaWVkRUNEb21haW4gOjo9IFNFUVVFTkNFIHsKKyAqICAgICAgdmVyc2lvbiBTcGVjaWZpZWRFQ0RvbWFpblZlcnNpb24oZWNkcFZlcjEgfCBlY2RwVmVyMiB8IGVjZHBWZXIzLCAuLi4pLAorICogICAgICBmaWVsZElEIEZpZWxkSUQge3tGaWVsZFR5cGVzfX0sCisgKiAgICAgIGN1cnZlIEN1cnZlLAorICogICAgICBiYXNlIEVDUG9pbnQsCisgKiAgICAgIG9yZGVyIElOVEVHRVIsCisgKiAgICAgIGNvZmFjdG9yIElOVEVHRVIgT1BUSU9OQUwsCisgKiAgICAgIGhhc2ggSGFzaEFsZ29yaXRobSBPUFRJT05BTCwKKyAqICAgICAgLi4uCisgKiAgfQorICoKKyAqIFdlIG9ubHkgc3VwcG9ydCBwcmltZS1maWVsZCBhcyBmaWVsZCB0eXBlLCBhbmQgaWdub3JlIGhhc2ggYW5kIGNvZmFjdG9yLgorICovCitzdGF0aWMgaW50IHBrX2dyb3VwX2Zyb21fc3BlY2lmaWVkKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpwYXJhbXMsIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHBhcmFtcy0+cDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3QgZW5kID0gcGFyYW1zLT5wICsgcGFyYW1zLT5sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kX2ZpZWxkLCAqZW5kX2N1cnZlOworICAgIHNpemVfdCBsZW47CisgICAgaW50IHZlcjsKKworICAgIC8qIFNwZWNpZmllZEVDRG9tYWluVmVyc2lvbiA6Oj0gSU5URUdFUiB7IDEsIDIsIDMgfSAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCAmcCwgZW5kLCAmdmVyICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCB2ZXIgPCAxIHx8IHZlciA+IDMgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCApOworCisgICAgLyoKKyAgICAgKiBGaWVsZElEIHsgRklFTEQtSUQ6SU9TZXQgfSA6Oj0gU0VRVUVOQ0UgeyAtLSBGaW5pdGUgZmllbGQKKyAgICAgKiAgICAgICBmaWVsZFR5cGUgRklFTEQtSUQuJmlkKHtJT1NldH0pLAorICAgICAqICAgICAgIHBhcmFtZXRlcnMgRklFTEQtSUQuJlR5cGUoe0lPU2V0fXtAZmllbGRUeXBlfSkKKyAgICAgKiB9CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgZW5kX2ZpZWxkID0gcCArIGxlbjsKKworICAgIC8qCisgICAgICogRklFTEQtSUQgOjo9IFRZUEUtSURFTlRJRklFUgorICAgICAqIEZpZWxkVHlwZXMgRklFTEQtSUQgOjo9IHsKKyAgICAgKiAgICAgICB7IFByaW1lLXAgSURFTlRJRklFRCBCWSBwcmltZS1maWVsZCB9IHwKKyAgICAgKiAgICAgICB7IENoYXJhY3RlcmlzdGljLXR3byBJREVOVElGSUVEIEJZIGNoYXJhY3RlcmlzdGljLXR3by1maWVsZCB9CisgICAgICogfQorICAgICAqIHByaW1lLWZpZWxkIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGlkLWZpZWxkVHlwZSAxIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZF9maWVsZCwgJmxlbiwgTUJFRFRMU19BU04xX09JRCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggbGVuICE9IE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfUFJJTUVfRklFTEQgKSB8fAorICAgICAgICBtZW1jbXAoIHAsIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfUFJJTUVfRklFTEQsIGxlbiApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgfQorCisgICAgcCArPSBsZW47CisKKyAgICAvKiBQcmltZS1wIDo6PSBJTlRFR0VSIC0tIEZpZWxkIG9mIHNpemUgcC4gKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZF9maWVsZCwgJmdycC0+UCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBncnAtPnBiaXRzID0gbWJlZHRsc19tcGlfYml0bGVuKCAmZ3JwLT5QICk7CisKKyAgICBpZiggcCAhPSBlbmRfZmllbGQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIC8qCisgICAgICogQ3VydmUgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgICBhIEZpZWxkRWxlbWVudCwKKyAgICAgKiAgICAgICBiIEZpZWxkRWxlbWVudCwKKyAgICAgKiAgICAgICBzZWVkIEJJVCBTVFJJTkcgT1BUSU9OQUwKKyAgICAgKiAgICAgICAtLSBTaGFsbCBiZSBwcmVzZW50IGlmIHVzZWQgaW4gU3BlY2lmaWVkRUNEb21haW4KKyAgICAgKiAgICAgICAtLSB3aXRoIHZlcnNpb24gZXF1YWwgdG8gZWNkcFZlcjIgb3IgZWNkcFZlcjMKKyAgICAgKiB9CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgZW5kX2N1cnZlID0gcCArIGxlbjsKKworICAgIC8qCisgICAgICogRmllbGRFbGVtZW50IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICAgKiBjb250YWluaW5nIGFuIGludGVnZXIgaW4gdGhlIGNhc2Ugb2YgYSBwcmltZSBmaWVsZAorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kX2N1cnZlLCAmbGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZncnAtPkEsIHAsIGxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIHAgKz0gbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmRfY3VydmUsICZsZW4sIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmdycC0+QiwgcCwgbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgcCArPSBsZW47CisKKyAgICAvKiBJZ25vcmUgc2VlZCBCSVQgU1RSSU5HIE9QVElPTkFMICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmRfY3VydmUsICZsZW4sIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HICkgKSA9PSAwICkKKyAgICAgICAgcCArPSBsZW47CisKKyAgICBpZiggcCAhPSBlbmRfY3VydmUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIC8qCisgICAgICogRUNQb2ludCA6Oj0gT0NURVQgU1RSSU5HCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoIGdycCwgJmdycC0+RywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjb25zdCB1bnNpZ25lZCBjaGFyICopIHAsIGxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3ZSBjYW4ndCByZWFkIHRoZSBwb2ludCBiZWNhdXNlIGl0J3MgY29tcHJlc3NlZCwgY2hlYXQgYnkKKyAgICAgICAgICogcmVhZGluZyBvbmx5IHRoZSBYIGNvb3JkaW5hdGUgYW5kIHRoZSBwYXJpdHkgYml0IG9mIFkuCisgICAgICAgICAqLworICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFIHx8CisgICAgICAgICAgICAoIHBbMF0gIT0gMHgwMiAmJiBwWzBdICE9IDB4MDMgKSB8fAorICAgICAgICAgICAgbGVuICE9IG1iZWR0bHNfbXBpX3NpemUoICZncnAtPlAgKSArIDEgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmZ3JwLT5HLlgsIHAgKyAxLCBsZW4gLSAxICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19tcGlfbHNldCggJmdycC0+Ry5ZLCBwWzBdIC0gMiApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX2xzZXQoICZncnAtPkcuWiwgMSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCApOworICAgICAgICB9CisgICAgfQorCisgICAgcCArPSBsZW47CisKKyAgICAvKgorICAgICAqIG9yZGVyIElOVEVHRVIKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJmdycC0+TiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBncnAtPm5iaXRzID0gbWJlZHRsc19tcGlfYml0bGVuKCAmZ3JwLT5OICk7CisKKyAgICAvKgorICAgICAqIEFsbG93IG9wdGlvbmFsIGVsZW1lbnRzIGJ5IHB1cnBvc2VmdWxseSBub3QgZW5mb3JjaW5nIHAgPT0gZW5kIGhlcmUuCisgICAgICovCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGdyb3VwIGlkIGFzc29jaWF0ZWQgd2l0aCBhbiAoYWxtb3N0IGZpbGxlZCkgZ3JvdXAgYXMgZ2VuZXJhdGVkIGJ5CisgKiBwa19ncm91cF9mcm9tX3NwZWNpZmllZCgpLCBvciByZXR1cm4gYW4gZXJyb3IgaWYgdW5rbm93bi4KKyAqLworc3RhdGljIGludCBwa19ncm91cF9pZF9mcm9tX2dyb3VwKCBjb25zdCBtYmVkdGxzX2VjcF9ncm91cCAqZ3JwLCBtYmVkdGxzX2VjcF9ncm91cF9pZCAqZ3JwX2lkICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBtYmVkdGxzX2VjcF9ncm91cCByZWY7CisgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmlkOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJnJlZiApOworCisgICAgZm9yKCBpZCA9IG1iZWR0bHNfZWNwX2dycF9pZF9saXN0KCk7ICppZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOyBpZCsrICkKKyAgICB7CisgICAgICAgIC8qIExvYWQgdGhlIGdyb3VwIGFzc29jaWF0ZWQgdG8gdGhhdCBpZCAqLworICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmcmVmICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJnJlZiwgKmlkICkgKTsKKworICAgICAgICAvKiBDb21wYXJlIHRvIHRoZSBncm91cCB3ZSB3ZXJlIGdpdmVuLCBzdGFydGluZyB3aXRoIGVhc3kgdGVzdHMgKi8KKyAgICAgICAgaWYoIGdycC0+cGJpdHMgPT0gcmVmLnBiaXRzICYmIGdycC0+bmJpdHMgPT0gcmVmLm5iaXRzICYmCisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLT5QLCAmcmVmLlAgKSA9PSAwICYmCisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLT5BLCAmcmVmLkEgKSA9PSAwICYmCisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLT5CLCAmcmVmLkIgKSA9PSAwICYmCisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLT5OLCAmcmVmLk4gKSA9PSAwICYmCisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLT5HLlgsICZyZWYuRy5YICkgPT0gMCAmJgorICAgICAgICAgICAgbWJlZHRsc19tcGlfY21wX21waSggJmdycC0+Ry5aLCAmcmVmLkcuWiApID09IDAgJiYKKyAgICAgICAgICAgIC8qIEZvciBZIHdlIG1heSBvbmx5IGtub3cgdGhlIHBhcml0eSBiaXQsIHNvIGNvbXBhcmUgb25seSB0aGF0ICovCisgICAgICAgICAgICBtYmVkdGxzX21waV9nZXRfYml0KCAmZ3JwLT5HLlksIDAgKSA9PSBtYmVkdGxzX21waV9nZXRfYml0KCAmcmVmLkcuWSwgMCApICkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0KKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmcmVmICk7CisKKyAgICAqZ3JwX2lkID0gKmlkOworCisgICAgaWYoIHJldCA9PSAwICYmICppZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogUGFyc2UgYSBTcGVjaWZpZWRFQ0RvbWFpbiAoU0VDIDEgQy4yKSBhbmQgZmluZCB0aGUgYXNzb2NpYXRlZCBncm91cCBJRAorICovCitzdGF0aWMgaW50IHBrX2dyb3VwX2lkX2Zyb21fc3BlY2lmaWVkKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCAqZ3JwX2lkICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKworICAgIGlmKCAoIHJldCA9IHBrX2dyb3VwX2Zyb21fc3BlY2lmaWVkKCBwYXJhbXMsICZncnAgKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICByZXQgPSBwa19ncm91cF9pZF9mcm9tX2dyb3VwKCAmZ3JwLCBncnBfaWQgKTsKKworY2xlYW51cDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQgKi8KKworLyoKKyAqIFVzZSBFQyBwYXJhbWV0ZXJzIHRvIGluaXRpYWxpc2UgYW4gRUMgZ3JvdXAKKyAqCisgKiBFQ1BhcmFtZXRlcnMgOjo9IENIT0lDRSB7CisgKiAgIG5hbWVkQ3VydmUgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUgorICogICBzcGVjaWZpZWRDdXJ2ZSAgICAgU3BlY2lmaWVkRUNEb21haW4gLS0gPSBTRVFVRU5DRSB7IC4uLiB9CisgKiAgIC0tIGltcGxpY2l0Q3VydmUgICBOVUxMCisgKi8KK3N0YXRpYyBpbnQgcGtfdXNlX2VjcGFyYW1zKCBjb25zdCBtYmVkdGxzX2FzbjFfYnVmICpwYXJhbXMsIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ3JwX2lkOworCisgICAgaWYoIHBhcmFtcy0+dGFnID09IE1CRURUTFNfQVNOMV9PSUQgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9lY19ncnAoIHBhcmFtcywgJmdycF9pZCApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19VTktOT1dOX05BTUVEX0NVUlZFICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVEKQorICAgICAgICBpZiggKCByZXQgPSBwa19ncm91cF9pZF9mcm9tX3NwZWNpZmllZCggcGFyYW1zLCAmZ3JwX2lkICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisjZWxzZQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCApOworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBncnAgbWF5IGFscmVhZHkgYmUgaW5pdGlsaWFsaXplZDsgaWYgc28sIG1ha2Ugc3VyZSBJRHMgbWF0Y2gKKyAgICAgKi8KKyAgICBpZiggZ3JwLT5pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FICYmIGdycC0+aWQgIT0gZ3JwX2lkICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoIGdycCwgZ3JwX2lkICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRUMgcHVibGljIGtleSBpcyBhbiBFQyBwb2ludAorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoZSBzdHJ1Y3R1cmUgdXBvbiBmYWlsdXJlIGlmCisgKiBkZXNpcmVkLiBUYWtlIGNhcmUgdG8gcGFzcyBhbG9uZyB0aGUgcG9zc2libGUgRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyAqIHJldHVybiBjb2RlIG9mIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCkgYW5kIGxlYXZlIHAgaW4gYSB1c2FibGUgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgcGtfZ2V0X2VjcHVia2V5KCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmtleSApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAma2V5LT5ncnAsICZrZXktPlEsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopICpwLCBlbmQgLSAqcCApICkgPT0gMCApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZrZXktPmdycCwgJmtleS0+USApOworICAgIH0KKworICAgIC8qCisgICAgICogV2Uga25vdyBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSBjb25zdW1lZCBhbGwgYnl0ZXMgb3IgZmFpbGVkCisgICAgICovCisgICAgKnAgPSAodW5zaWduZWQgY2hhciAqKSBlbmQ7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKy8qCisgKiAgUlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgKiAgICAgIG1vZHVsdXMgICAgICAgICAgIElOVEVHRVIsICAtLSBuCisgKiAgICAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIgICAtLSBlCisgKiAgfQorICovCitzdGF0aWMgaW50IHBrX2dldF9yc2FwdWJrZXkoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKyByZXQgKTsKKworICAgIGlmKCAqcCArIGxlbiAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9tcGkoIHAsIGVuZCwgJnJzYS0+TiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbXBpKCBwLCBlbmQsICZyc2EtPkUgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsgcmV0ICk7CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggcnNhICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSApOworCisgICAgcnNhLT5sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmcnNhLT5OICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKKy8qIEdldCBhIFBLIGFsZ29yaXRobSBpZGVudGlmaWVyCisgKgorICogIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAorICogICAgICAgcGFyYW1ldGVycyAgICAgICAgICAgICAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMICB9CisgKi8KK3N0YXRpYyBpbnQgcGtfZ2V0X3BrX2FsZyggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa190eXBlX3QgKnBrX2FsZywgbWJlZHRsc19hc24xX2J1ZiAqcGFyYW1zICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfYXNuMV9idWYgYWxnX29pZDsKKworICAgIG1lbXNldCggcGFyYW1zLCAwLCBzaXplb2YobWJlZHRsc19hc24xX2J1ZikgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYWxnKCBwLCBlbmQsICZhbGdfb2lkLCBwYXJhbXMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfQUxHICsgcmV0ICk7CisKKyAgICBpZiggbWJlZHRsc19vaWRfZ2V0X3BrX2FsZyggJmFsZ19vaWQsIHBrX2FsZyApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICAvKgorICAgICAqIE5vIHBhcmFtZXRlcnMgd2l0aCBSU0EgKG9ubHkgZm9yIEVDKQorICAgICAqLworICAgIGlmKCAqcGtfYWxnID09IE1CRURUTFNfUEtfUlNBICYmCisgICAgICAgICAgICAoICggcGFyYW1zLT50YWcgIT0gTUJFRFRMU19BU04xX05VTEwgJiYgcGFyYW1zLT50YWcgIT0gMCApIHx8CisgICAgICAgICAgICAgICAgcGFyYW1zLT5sZW4gIT0gMCApICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfSU5WQUxJRF9BTEcgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqICBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeworICogICAgICAgYWxnb3JpdGhtICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAqICAgICAgIHN1YmplY3RQdWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgfQorICovCitpbnQgbWJlZHRsc19wa19wYXJzZV9zdWJwdWJrZXkoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgKnBrICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc19hc24xX2J1ZiBhbGdfcGFyYW1zOworICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZyA9IE1CRURUTFNfUEtfTk9ORTsKKyAgICBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCAqcGtfaW5mbzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGVuZCA9ICpwICsgbGVuOworCisgICAgaWYoICggcmV0ID0gcGtfZ2V0X3BrX2FsZyggcCwgZW5kLCAmcGtfYWxnLCAmYWxnX3BhcmFtcyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsKCBwLCBlbmQsICZsZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsgcmV0ICk7CisKKyAgICBpZiggKnAgKyBsZW4gIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIGlmKCAoIHBrX2luZm8gPSBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBwa19hbGcgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NldHVwKCBwaywgcGtfaW5mbyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgeworICAgICAgICByZXQgPSBwa19nZXRfcnNhcHVia2V5KCBwLCBlbmQsIG1iZWR0bHNfcGtfcnNhKCAqcGsgKSApOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZX0RIIHx8IHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICB7CisgICAgICAgIHJldCA9IHBrX3VzZV9lY3BhcmFtcyggJmFsZ19wYXJhbXMsICZtYmVkdGxzX3BrX2VjKCAqcGsgKS0+Z3JwICk7CisgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICByZXQgPSBwa19nZXRfZWNwdWJrZXkoIHAsIGVuZCwgbWJlZHRsc19wa19lYyggKnBrICkgKTsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHOworCisgICAgaWYoIHJldCA9PSAwICYmICpwICE9IGVuZCApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZCisgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wa19mcmVlKCBwayApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKy8qCisgKiBQYXJzZSBhIFBLQ1MjMSBlbmNvZGVkIHByaXZhdGUgUlNBIGtleQorICovCitzdGF0aWMgaW50IHBrX3BhcnNlX2tleV9wa2NzMV9kZXIoIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5bGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKworICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSBrZXk7CisgICAgZW5kID0gcCArIGtleWxlbjsKKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIFJTQVByaXZhdGVLZXkgKFBLQ1MjMSkKKyAgICAgKgorICAgICAqICBSU0FQcml2YXRlS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgICB2ZXJzaW9uICAgICAgICAgICBWZXJzaW9uLAorICAgICAqICAgICAgbW9kdWx1cyAgICAgICAgICAgSU5URUdFUiwgIC0tIG4KKyAgICAgKiAgICAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIsICAtLSBlCisgICAgICogICAgICBwcml2YXRlRXhwb25lbnQgICBJTlRFR0VSLCAgLS0gZAorICAgICAqICAgICAgcHJpbWUxICAgICAgICAgICAgSU5URUdFUiwgIC0tIHAKKyAgICAgKiAgICAgIHByaW1lMiAgICAgICAgICAgIElOVEVHRVIsICAtLSBxCisgICAgICogICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgLS0gZCBtb2QgKHAtMSkKKyAgICAgKiAgICAgIGV4cG9uZW50MiAgICAgICAgIElOVEVHRVIsICAtLSBkIG1vZCAocS0xKQorICAgICAqICAgICAgY29lZmZpY2llbnQgICAgICAgSU5URUdFUiwgIC0tIChpbnZlcnNlIG9mIHEpIG1vZCBwCisgICAgICogICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1lSW5mb3MgT1BUSU9OQUwKKyAgICAgKiAgfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgZW5kID0gcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCAmcCwgZW5kLCAmcnNhLT52ZXIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBpZiggcnNhLT52ZXIgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX1ZFUlNJT04gKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+TiAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+RSAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+RCAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+UCAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+USAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+RFAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+RFEgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X21waSggJnAsIGVuZCwgJnJzYS0+UVAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggcnNhICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgcnNhLT5sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmcnNhLT5OICk7CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggcnNhICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIHJzYSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3JzYV9mcmVlKCByc2EgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisvKgorICogUGFyc2UgYSBTRUMxIGVuY29kZWQgcHJpdmF0ZSBFQyBrZXkKKyAqLworc3RhdGljIGludCBwa19wYXJzZV9rZXlfc2VjMV9kZXIoIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBpbnQgdmVyc2lvbiwgcHVia2V5X2RvbmU7CisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIHBhcmFtczsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikga2V5OworICAgIHVuc2lnbmVkIGNoYXIgKmVuZCA9IHAgKyBrZXlsZW47CisgICAgdW5zaWduZWQgY2hhciAqZW5kMjsKKworICAgIC8qCisgICAgICogUkZDIDU5MTUsIG9yIFNFQzEgQXBwZW5kaXggQy40CisgICAgICoKKyAgICAgKiBFQ1ByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgIHZlcnNpb24gICAgICAgIElOVEVHRVIgeyBlY1ByaXZrZXlWZXIxKDEpIH0gKGVjUHJpdmtleVZlcjEpLAorICAgICAqICAgICAgcHJpdmF0ZUtleSAgICAgT0NURVQgU1RSSU5HLAorICAgICAqICAgICAgcGFyYW1ldGVycyBbMF0gRUNQYXJhbWV0ZXJzIHt7IE5hbWVkQ3VydmUgfX0gT1BUSU9OQUwsCisgICAgICogICAgICBwdWJsaWNLZXkgIFsxXSBCSVQgU1RSSU5HIE9QVElPTkFMCisgICAgICogICAgfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgZW5kID0gcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCAmcCwgZW5kLCAmdmVyc2lvbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggdmVyc2lvbiAhPSAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9WRVJTSU9OICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmVjay0+ZCwgcCwgbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNrICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgcCArPSBsZW47CisKKyAgICBwdWJrZXlfZG9uZSA9IDA7CisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIElzICdwYXJhbWV0ZXJzJyBwcmVzZW50PworICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IDAgKSApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBwa19nZXRfZWNwYXJhbXMoICZwLCBwICsgbGVuLCAmcGFyYW1zKSApICE9IDAgfHwKKyAgICAgICAgICAgICAgICAoIHJldCA9IHBrX3VzZV9lY3BhcmFtcyggJnBhcmFtcywgJmVjay0+Z3JwICkgICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCBlY2sgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCBlY2sgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBJcyAncHVibGlja2V5JyBwcmVzZW50PyBJZiBub3QsIG9yIGlmIHdlIGNhbid0IHJlYWQgaXQgKGVnIGJlY2F1c2UgaXQKKyAgICAgICAgICogaXMgY29tcHJlc3NlZCksIGNyZWF0ZSBpdCBmcm9tIHRoZSBwcml2YXRlIGtleS4KKyAgICAgICAgICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAxICkgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgZW5kMiA9IHAgKyBsZW47CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nX251bGwoICZwLCBlbmQyLCAmbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgICAgICAgICBpZiggcCArIGxlbiAhPSBlbmQyICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBwa19nZXRfZWNwdWJrZXkoICZwLCBlbmQyLCBlY2sgKSApID09IDAgKQorICAgICAgICAgICAgICAgIHB1YmtleV9kb25lID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFRoZSBvbmx5IGFjY2VwdGFibGUgZmFpbHVyZSBtb2RlIG9mIHBrX2dldF9lY3B1YmtleSgpIGFib3ZlCisgICAgICAgICAgICAgICAgICogaXMgaWYgdGhlIHBvaW50IGZvcm1hdCBpcyBub3QgcmVjb2duaXplZC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNrICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoICEgcHVia2V5X2RvbmUgJiYKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX2VjcF9tdWwoICZlY2stPmdycCwgJmVjay0+USwgJmVjay0+ZCwgJmVjay0+Z3JwLkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNrICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggJmVjay0+Z3JwLCAmZWNrLT5kICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZSggZWNrICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisvKgorICogUGFyc2UgYW4gdW5lbmNyeXB0ZWQgUEtDUyM4IGVuY29kZWQgcHJpdmF0ZSBrZXkKKyAqLworc3RhdGljIGludCBwa19wYXJzZV9rZXlfcGtjczhfdW5lbmNyeXB0ZWRfZGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jb250ZXh0ICpwaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4gKQoreworICAgIGludCByZXQsIHZlcnNpb247CisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX2FzbjFfYnVmIHBhcmFtczsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikga2V5OworICAgIHVuc2lnbmVkIGNoYXIgKmVuZCA9IHAgKyBrZXlsZW47CisgICAgbWJlZHRsc19wa190eXBlX3QgcGtfYWxnID0gTUJFRFRMU19QS19OT05FOworICAgIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190ICpwa19pbmZvOworCisgICAgLyoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgUHJpdmF0S2V5SW5mbyBvYmplY3QgKFBLQ1MjOCB2MS4yID0gUkZDIDUyMDgpCisgICAgICoKKyAgICAgKiAgICBQcml2YXRlS2V5SW5mbyA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICBWZXJzaW9uLAorICAgICAqICAgICAgcHJpdmF0ZUtleUFsZ29yaXRobSAgICAgICBQcml2YXRlS2V5QWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgICAgIHByaXZhdGVLZXkgICAgICAgICAgICAgICAgUHJpdmF0ZUtleSwKKyAgICAgKiAgICAgIGF0dHJpYnV0ZXMgICAgICAgICAgIFswXSAgSU1QTElDSVQgQXR0cmlidXRlcyBPUFRJT05BTCB9CisgICAgICoKKyAgICAgKiAgICBWZXJzaW9uIDo6PSBJTlRFR0VSCisgICAgICogICAgUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgKiAgICBQcml2YXRlS2V5IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICAgKgorICAgICAqICBUaGUgUHJpdmF0ZUtleSBPQ1RFVCBTVFJJTkcgaXMgYSBTRUMxIEVDUHJpdmF0ZUtleQorICAgICAqLworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSBwICsgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoICZwLCBlbmQsICZ2ZXJzaW9uICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCB2ZXJzaW9uICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX1ZFUlNJT04gKyByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IHBrX2dldF9wa19hbGcoICZwLCBlbmQsICZwa19hbGcsICZwYXJhbXMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworCisgICAgaWYoIGxlbiA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgaWYoICggcGtfaW5mbyA9IG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIHBrX2FsZyApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9QS19BTEcgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2V0dXAoIHBrLCBwa19pbmZvICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfUlNBICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHBrX3BhcnNlX2tleV9wa2NzMV9kZXIoIG1iZWR0bHNfcGtfcnNhKCAqcGsgKSwgcCwgbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wa19mcmVlKCBwayApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZIHx8IHBrX2FsZyA9PSBNQkVEVExTX1BLX0VDS0VZX0RIICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHBrX3VzZV9lY3BhcmFtcyggJnBhcmFtcywgJm1iZWR0bHNfcGtfZWMoICpwayApLT5ncnAgKSApICE9IDAgfHwKKyAgICAgICAgICAgICggcmV0ID0gcGtfcGFyc2Vfa2V5X3NlYzFfZGVyKCBtYmVkdGxzX3BrX2VjKCAqcGsgKSwgcCwgbGVuICkgICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9QS19BTEcgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUGFyc2UgYW4gZW5jcnlwdGVkIFBLQ1MjOCBlbmNvZGVkIHByaXZhdGUga2V5CisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpIHx8IGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorc3RhdGljIGludCBwa19wYXJzZV9rZXlfcGtjczhfZW5jcnlwdGVkX2RlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwd2QsIHNpemVfdCBwd2RsZW4gKQoreworICAgIGludCByZXQsIGRlY3J5cHRlZCA9IDA7CisgICAgc2l6ZV90IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMDQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworICAgIG1iZWR0bHNfYXNuMV9idWYgcGJlX2FsZ19vaWQsIHBiZV9wYXJhbXM7CisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKQorICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXJfYWxnOworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZzsKKyNlbmRpZgorCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSBrZXk7CisgICAgZW5kID0gcCArIGtleWxlbjsKKworICAgIGlmKCBwd2RsZW4gPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQgKTsKKworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIEVuY3J5cHRlZFByaXZhdEtleUluZm8gb2JqZWN0IChQS0NTIzgpCisgICAgICoKKyAgICAgKiAgRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8gOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICBlbmNyeXB0aW9uQWxnb3JpdGhtICBFbmNyeXB0aW9uQWxnb3JpdGhtSWRlbnRpZmllciwKKyAgICAgKiAgICBlbmNyeXB0ZWREYXRhICAgICAgICBFbmNyeXB0ZWREYXRhCisgICAgICogIH0KKyAgICAgKgorICAgICAqICBFbmNyeXB0aW9uQWxnb3JpdGhtSWRlbnRpZmllciA6Oj0gQWxnb3JpdGhtSWRlbnRpZmllcgorICAgICAqCisgICAgICogIEVuY3J5cHRlZERhdGEgOjo9IE9DVEVUIFNUUklORworICAgICAqCisgICAgICogIFRoZSBFbmNyeXB0ZWREYXRhIE9DVEVUIFNUUklORyBpcyBhIFBLQ1MjOCBQcml2YXRlS2V5SW5mbworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgZW5kID0gcCArIGxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYWxnKCAmcCwgZW5kLCAmcGJlX2FsZ19vaWQsICZwYmVfcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLCBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKworICAgIGlmKCBsZW4gPiBzaXplb2YoIGJ1ZiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOworCisgICAgLyoKKyAgICAgKiBEZWNyeXB0IEVuY3J5cHRlZERhdGEgd2l0aCBhcHByb3ByaWF0ZSBQREUKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpCisgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9wa2NzMTJfcGJlX2FsZyggJnBiZV9hbGdfb2lkLCAmbWRfYWxnLCAmY2lwaGVyX2FsZyApID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa2NzMTJfcGJlKCAmcGJlX3BhcmFtcywgTUJFRFRMU19QS0NTMTJfUEJFX0RFQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9hbGcsIG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHdkLCBwd2RsZW4sIHAsIGxlbiwgYnVmICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9QS0NTMTJfUEFTU1dPUkRfTUlTTUFUQ0ggKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggKTsKKworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlY3J5cHRlZCA9IDE7CisgICAgfQorICAgIGVsc2UgaWYoIE1CRURUTFNfT0lEX0NNUCggTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX1JDNF8xMjgsICZwYmVfYWxnX29pZCApID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa2NzMTJfcGJlX3NoYTFfcmM0XzEyOCggJnBiZV9wYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BLQ1MxMl9QQkVfREVDUllQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3ZCwgcHdkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgbGVuLCBidWYgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQmVzdCBndWVzcyBmb3IgcGFzc3dvcmQgbWlzbWF0Y2ggd2hlbiB1c2luZyBSQzQuIElmIGZpcnN0IHRhZyBpcworICAgICAgICAvLyBub3QgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFCisgICAgICAgIC8vCisgICAgICAgIGlmKCAqYnVmICE9ICggTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSCApOworCisgICAgICAgIGRlY3J5cHRlZCA9IDE7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxMl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1M1X0MpCisgICAgaWYoIE1CRURUTFNfT0lEX0NNUCggTUJFRFRMU19PSURfUEtDUzVfUEJFUzIsICZwYmVfYWxnX29pZCApID09IDAgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa2NzNV9wYmVzMiggJnBiZV9wYXJhbXMsIE1CRURUTFNfUEtDUzVfREVDUllQVCwgcHdkLCBwd2RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgbGVuLCBidWYgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENIICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIICk7CisKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBkZWNyeXB0ZWQgPSAxOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19QS0NTNV9DICovCisgICAgeworICAgICAgICAoKHZvaWQpIHB3ZCk7CisgICAgfQorCisgICAgaWYoIGRlY3J5cHRlZCA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICByZXR1cm4oIHBrX3BhcnNlX2tleV9wa2NzOF91bmVuY3J5cHRlZF9kZXIoIHBrLCBidWYsIGxlbiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTJfQyB8fCBNQkVEVExTX1BLQ1M1X0MgKi8KKworLyoKKyAqIFBhcnNlIGEgcHJpdmF0ZSBrZXkKKyAqLworaW50IG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHdkLCBzaXplX3QgcHdkbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IG1iZWR0bHNfcGtfaW5mb190ICpwa19pbmZvOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc19wZW1fY29udGV4dCBwZW07CisKKyAgICBtYmVkdGxzX3BlbV9pbml0KCAmcGVtICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgLyogQXZvaWQgY2FsbGluZyBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpIG9uIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCisgICAgaWYoIGtleWxlbiA9PSAwIHx8IGtleVtrZXlsZW4gLSAxXSAhPSAnXDAnICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVDsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCAmcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgcHdkLCBwd2RsZW4sICZsZW4gKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCBwa19pbmZvID0gbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19QS19SU0EgKSApID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19VTktOT1dOX1BLX0FMRyApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2V0dXAoIHBrLCBwa19pbmZvICAgICAgICAgICAgICAgICAgICApICkgIT0gMCB8fAorICAgICAgICAgICAgKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczFfZGVyKCBtYmVkdGxzX3BrX3JzYSggKnBrICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbS5idWYsIHBlbS5idWZsZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3BrX2ZyZWUoIHBrICk7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfTUlTTUFUQ0ggKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENIICk7CisgICAgZWxzZSBpZiggcmV0ID09IE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9SRVFVSVJFRCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQgKTsKKyAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIC8qIEF2b2lkIGNhbGxpbmcgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoKSBvbiBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworICAgIGlmKCBrZXlsZW4gPT0gMCB8fCBrZXlba2V5bGVuIC0gMV0gIT0gJ1wwJyApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQ7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBwd2QsIHB3ZGxlbiwgJmxlbiApOworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCBwa19pbmZvID0gbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19QS19FQ0tFWSApICkgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zZXR1cCggcGssIHBrX2luZm8gICAgICAgICAgICAgICAgICAgKSApICE9IDAgfHwKKyAgICAgICAgICAgICggcmV0ID0gcGtfcGFyc2Vfa2V5X3NlYzFfZGVyKCBtYmVkdGxzX3BrX2VjKCAqcGsgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW0uYnVmLCBwZW0uYnVmbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wa19mcmVlKCBwayApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wZW1fZnJlZSggJnBlbSApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUEVNX1BBU1NXT1JEX01JU01BVENIICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSCApOworICAgIGVsc2UgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVEICk7CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworICAgIC8qIEF2b2lkIGNhbGxpbmcgbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoKSBvbiBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworICAgIGlmKCBrZXlsZW4gPT0gMCB8fCBrZXlba2V5bGVuIC0gMV0gIT0gJ1wwJyApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQ7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBOVUxMLCAwLCAmbGVuICk7CisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHBrX3BhcnNlX2tleV9wa2NzOF91bmVuY3J5cHRlZF9kZXIoIHBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtLmJ1ZiwgcGVtLmJ1ZmxlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxMl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKKyAgICAvKiBBdm9pZCBjYWxsaW5nIG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCkgb24gbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmcgKi8KKyAgICBpZigga2V5bGVuID09IDAgfHwga2V5W2tleWxlbiAtIDFdICE9ICdcMCcgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wZW1fcmVhZF9idWZmZXIoICZwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBOVUxMLCAwLCAmbGVuICk7CisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHBrX3BhcnNlX2tleV9wa2NzOF9lbmNyeXB0ZWRfZGVyKCBwaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbS5idWYsIHBlbS5idWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwd2QsIHB3ZGxlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgfHwgTUJFRFRMU19QS0NTNV9DICovCisjZWxzZQorICAgICgodm9pZCkgcmV0KTsKKyAgICAoKHZvaWQpIHB3ZCk7CisgICAgKCh2b2lkKSBwd2RsZW4pOworI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KKworICAgIC8qCisgICAgKiBBdCB0aGlzIHBvaW50IHdlIG9ubHkga25vdyBpdCdzIG5vdCBhIFBFTSBmb3JtYXR0ZWQga2V5LiBDb3VsZCBiZSBhbnkKKyAgICAqIG9mIHRoZSBrbm93biBERVIgZW5jb2RlZCBwcml2YXRlIGtleSBmb3JtYXRzCisgICAgKgorICAgICogV2UgdHJ5IHRoZSBkaWZmZXJlbnQgREVSIGZvcm1hdCBwYXJzZXJzIHRvIHNlZSBpZiBvbmUgcGFzc2VzIHdpdGhvdXQKKyAgICAqIGVycm9yCisgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpIHx8IGRlZmluZWQoTUJFRFRMU19QS0NTNV9DKQorICAgIGlmKCAoIHJldCA9IHBrX3BhcnNlX2tleV9wa2NzOF9lbmNyeXB0ZWRfZGVyKCBwaywga2V5LCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3ZCwgcHdkbGVuICkgKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMTJfQyB8fCBNQkVEVExTX1BLQ1M1X0MgKi8KKworICAgIGlmKCAoIHJldCA9IHBrX3BhcnNlX2tleV9wa2NzOF91bmVuY3J5cHRlZF9kZXIoIHBrLCBrZXksIGtleWxlbiApICkgPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgbWJlZHRsc19wa19mcmVlKCBwayApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCAoIHBrX2luZm8gPSBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX1BLX1JTQSApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9QS19BTEcgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2V0dXAoIHBrLCBwa19pbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBwa19wYXJzZV9rZXlfcGtjczFfZGVyKCBtYmVkdGxzX3BrX3JzYSggKnBrICksIGtleSwga2V5bGVuICkgKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoICggcGtfaW5mbyA9IG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfRUNLRVkgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NldHVwKCBwaywgcGtfaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IHBrX3BhcnNlX2tleV9zZWMxX2RlciggbWJlZHRsc19wa19lYyggKnBrICksIGtleSwga2V5bGVuICkgKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIG1iZWR0bHNfcGtfZnJlZSggcGsgKTsKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCApOworfQorCisvKgorICogUGFyc2UgYSBwdWJsaWMga2V5CisgKi8KK2ludCBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXkoIG1iZWR0bHNfcGtfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfcGVtX2NvbnRleHQgcGVtOworCisgICAgbWJlZHRsc19wZW1faW5pdCggJnBlbSApOworCisgICAgLyogQXZvaWQgY2FsbGluZyBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpIG9uIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCisgICAgaWYoIGtleWxlbiA9PSAwIHx8IGtleVtrZXlsZW4gLSAxXSAhPSAnXDAnICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVDsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCAmcGVtLAorICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAgIi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLSIsCisgICAgICAgICAgICAgICAga2V5LCBOVUxMLCAwLCAmbGVuICk7CisKKyAgICBpZiggcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2FzIFBFTSBlbmNvZGVkCisgICAgICAgICAqLworICAgICAgICBrZXkgPSBwZW0uYnVmOworICAgICAgICBrZXlsZW4gPSBwZW0uYnVmbGVuOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCApCisgICAgeworICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikga2V5OworCisgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9zdWJwdWJrZXkoICZwLCBwICsga2V5bGVuLCBjdHggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1BBUlNFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3Brd3JpdGUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3Brd3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I3OThjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGt3cml0ZS5jCkBAIC0wLDAgKzEsNDM5IEBACisvKgorICogIFB1YmxpYyBLZXkgbGF5ZXIgZm9yIHdyaXRpbmcga2V5IGZpbGVzIGFuZCBzdHJ1Y3R1cmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FzbjF3cml0ZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKy8qCisgKiAgUlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgKiAgICAgIG1vZHVsdXMgICAgICAgICAgIElOVEVHRVIsICAtLSBuCisgKiAgICAgIHB1YmxpY0V4cG9uZW50ICAgIElOVEVHRVIgICAtLSBlCisgKiAgfQorICovCitzdGF0aWMgaW50IHBrX3dyaXRlX3JzYV9wdWJrZXkoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCBwLCBzdGFydCwgJnJzYS0+RSApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggcCwgc3RhcnQsICZyc2EtPk4gKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorLyoKKyAqIEVDIHB1YmxpYyBrZXkgaXMgYW4gRUMgcG9pbnQKKyAqLworc3RhdGljIGludCBwa193cml0ZV9lY19wdWJrZXkoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfRUNQX01BWF9QVF9MRU5dOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5KCAmZWMtPmdycCwgJmVjLT5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuLCBidWYsIHNpemVvZiggYnVmICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKnAgPCBzdGFydCB8fCAoc2l6ZV90KSggKnAgLSBzdGFydCApIDwgbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgICpwIC09IGxlbjsKKyAgICBtZW1jcHkoICpwLCBidWYsIGxlbiApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworLyoKKyAqIEVDUGFyYW1ldGVycyA6Oj0gQ0hPSUNFIHsKKyAqICAgbmFtZWRDdXJ2ZSAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSCisgKiB9CisgKi8KK3N0YXRpYyBpbnQgcGtfd3JpdGVfZWNfcGFyYW0oIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWMgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgY29uc3QgY2hhciAqb2lkOworICAgIHNpemVfdCBvaWRfbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9lY19ncnAoIGVjLT5ncnAuaWQsICZvaWQsICZvaWRfbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9vaWQoIHAsIHN0YXJ0LCBvaWQsIG9pZF9sZW4gKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisKK2ludCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleSggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGtleSApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgcGtfd3JpdGVfcnNhX3B1YmtleSggcCwgc3RhcnQsIG1iZWR0bHNfcGtfcnNhKCAqa2V5ICkgKSApOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSgga2V5ICkgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIHBrX3dyaXRlX2VjX3B1YmtleSggcCwgc3RhcnQsIG1iZWR0bHNfcGtfZWMoICprZXkgKSApICk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2RlciggbWJlZHRsc19wa19jb250ZXh0ICprZXksIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICBzaXplX3QgbGVuID0gMCwgcGFyX2xlbiA9IDAsIG9pZF9sZW47CisgICAgY29uc3QgY2hhciAqb2lkOworCisgICAgYyA9IGJ1ZiArIHNpemU7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleSggJmMsIGJ1Ziwga2V5ICkgKTsKKworICAgIGlmKCBjIC0gYnVmIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAvKgorICAgICAqICBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeworICAgICAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgICogICAgICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyB9CisgICAgICovCisgICAgKi0tYyA9IDA7CisgICAgbGVuICs9IDE7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsIE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfcGtfYWxnKCBtYmVkdGxzX3BrX2dldF90eXBlKCBrZXkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvaWQsICZvaWRfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCBrZXkgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwYXJfbGVuLCBwa193cml0ZV9lY19wYXJhbSggJmMsIGJ1ZiwgbWJlZHRsc19wa19lYyggKmtleSApICkgKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9hbGdvcml0aG1faWRlbnRpZmllciggJmMsIGJ1Ziwgb2lkLCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJfbGVuICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc19wa193cml0ZV9rZXlfZGVyKCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpjID0gYnVmICsgc2l6ZTsKKyAgICBzaXplX3QgbGVuID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSgga2V5ICkgPT0gTUJFRFRMU19QS19SU0EgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhID0gbWJlZHRsc19wa19yc2EoICprZXkgKTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgYnVmLCAmcnNhLT5RUCApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZjLCBidWYsICZyc2EtPkRRICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJnJzYS0+RFAgKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgYnVmLCAmcnNhLT5RICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJnJzYS0+UCApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9tcGkoICZjLCBidWYsICZyc2EtPkQgKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgYnVmLCAmcnNhLT5FICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX21waSggJmMsIGJ1ZiwgJnJzYS0+TiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9pbnQoICZjLCBidWYsIDAgKSApOworCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIGxlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGtleSApID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWMgPSBtYmVkdGxzX3BrX2VjKCAqa2V5ICk7CisgICAgICAgIHNpemVfdCBwdWJfbGVuID0gMCwgcGFyX2xlbiA9IDA7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUkZDIDU5MTUsIG9yIFNFQzEgQXBwZW5kaXggQy40CisgICAgICAgICAqCisgICAgICAgICAqIEVDUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgICAgICAgKiAgICAgIHZlcnNpb24gICAgICAgIElOVEVHRVIgeyBlY1ByaXZrZXlWZXIxKDEpIH0gKGVjUHJpdmtleVZlcjEpLAorICAgICAgICAgKiAgICAgIHByaXZhdGVLZXkgICAgIE9DVEVUIFNUUklORywKKyAgICAgICAgICogICAgICBwYXJhbWV0ZXJzIFswXSBFQ1BhcmFtZXRlcnMge3sgTmFtZWRDdXJ2ZSB9fSBPUFRJT05BTCwKKyAgICAgICAgICogICAgICBwdWJsaWNLZXkgIFsxXSBCSVQgU1RSSU5HIE9QVElPTkFMCisgICAgICAgICAqICAgIH0KKyAgICAgICAgICovCisKKyAgICAgICAgLyogcHVibGljS2V5ICovCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwdWJfbGVuLCBwa193cml0ZV9lY19wdWJrZXkoICZjLCBidWYsIGVjICkgKTsKKworICAgICAgICBpZiggYyAtIGJ1ZiA8IDEgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKyAgICAgICAgKi0tYyA9IDA7CisgICAgICAgIHB1Yl9sZW4gKz0gMTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcHViX2xlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgcHViX2xlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwdWJfbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQklUX1NUUklORyApICk7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHB1Yl9sZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIHB1Yl9sZW4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggcHViX2xlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IDEgKSApOworICAgICAgICBsZW4gKz0gcHViX2xlbjsKKworICAgICAgICAvKiBwYXJhbWV0ZXJzICovCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwYXJfbGVuLCBwa193cml0ZV9lY19wYXJhbSggJmMsIGJ1ZiwgZWMgKSApOworCisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBwYXJfbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBwYXJfbGVuICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHBhcl9sZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAwICkgKTsKKyAgICAgICAgbGVuICs9IHBhcl9sZW47CisKKyAgICAgICAgLyogcHJpdmF0ZUtleTogd3JpdGUgYXMgTVBJIHRoZW4gZml4IHRhZyAqLworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgYnVmLCAmZWMtPmQgKSApOworICAgICAgICAqYyA9IE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkc7CisKKyAgICAgICAgLyogdmVyc2lvbiAqLworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50KCAmYywgYnVmLCAxICkgKTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBsZW4gKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9DICovCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKworI2RlZmluZSBQRU1fQkVHSU5fUFVCTElDX0tFWSAgICAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbiIKKyNkZWZpbmUgUEVNX0VORF9QVUJMSUNfS0VZICAgICAgIi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLVxuIgorCisjZGVmaW5lIFBFTV9CRUdJTl9QUklWQVRFX0tFWV9SU0EgICAiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxuIgorI2RlZmluZSBQRU1fRU5EX1BSSVZBVEVfS0VZX1JTQSAgICAgIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXG4iCisjZGVmaW5lIFBFTV9CRUdJTl9QUklWQVRFX0tFWV9FQyAgICAiLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tXG4iCisjZGVmaW5lIFBFTV9FTkRfUFJJVkFURV9LRVlfRUMgICAgICAiLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLVxuIgorCisvKgorICogTWF4IHNpemVzIG9mIGtleSBwZXIgdHlwZXMuIFNob3duIGFzIHRhZyArIGxlbiAoKyBjb250ZW50KS4KKyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorLyoKKyAqIFJTQSBwdWJsaWMga2V5czoKKyAqICBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeyAgICAgICAgICAxICsgMworICogICAgICAgYWxnb3JpdGhtICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwgIDEgKyAxIChzZXF1ZW5jZSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxICsgMSArIDkgKHJzYSBvaWQpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSArIDEgKHBhcmFtcyBudWxsKQorICogICAgICAgc3ViamVjdFB1YmxpY0tleSAgICAgQklUIFNUUklORyB9ICAgICAgICAgIDEgKyAzICsgKDEgKyBiZWxvdykKKyAqICBSU0FQdWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsgICAgICAgICAgICAgICAgICAgICAxICsgMworICogICAgICBtb2R1bHVzICAgICAgICAgICBJTlRFR0VSLCAgLS0gbiAgICAgICAgICAgIDEgKyAzICsgTVBJX01BWCArIDEKKyAqICAgICAgcHVibGljRXhwb25lbnQgICAgSU5URUdFUiAgIC0tIGUgICAgICAgICAgICAxICsgMyArIE1QSV9NQVggKyAxCisgKiAgfQorICovCisjZGVmaW5lIFJTQV9QVUJfREVSX01BWF9CWVRFUyAgIDM4ICsgMiAqIE1CRURUTFNfTVBJX01BWF9TSVpFCisKKy8qCisgKiBSU0EgcHJpdmF0ZSBrZXlzOgorICogIFJTQVByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsgICAgICAgICAgICAgICAgICAgIDEgKyAzCisgKiAgICAgIHZlcnNpb24gICAgICAgICAgIFZlcnNpb24sICAgICAgICAgICAgICAgICAgMSArIDEgKyAxCisgKiAgICAgIG1vZHVsdXMgICAgICAgICAgIElOVEVHRVIsICAgICAgICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYICsgMQorICogICAgICBwdWJsaWNFeHBvbmVudCAgICBJTlRFR0VSLCAgICAgICAgICAgICAgICAgIDEgKyAzICsgTVBJX01BWCArIDEKKyAqICAgICAgcHJpdmF0ZUV4cG9uZW50ICAgSU5URUdFUiwgICAgICAgICAgICAgICAgICAxICsgMyArIE1QSV9NQVggKyAxCisgKiAgICAgIHByaW1lMSAgICAgICAgICAgIElOVEVHRVIsICAgICAgICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYIC8gMiArIDEKKyAqICAgICAgcHJpbWUyICAgICAgICAgICAgSU5URUdFUiwgICAgICAgICAgICAgICAgICAxICsgMyArIE1QSV9NQVggLyAyICsgMQorICogICAgICBleHBvbmVudDEgICAgICAgICBJTlRFR0VSLCAgICAgICAgICAgICAgICAgIDEgKyAzICsgTVBJX01BWCAvIDIgKyAxCisgKiAgICAgIGV4cG9uZW50MiAgICAgICAgIElOVEVHRVIsICAgICAgICAgICAgICAgICAgMSArIDMgKyBNUElfTUFYIC8gMiArIDEKKyAqICAgICAgY29lZmZpY2llbnQgICAgICAgSU5URUdFUiwgICAgICAgICAgICAgICAgICAxICsgMyArIE1QSV9NQVggLyAyICsgMQorICogICAgICBvdGhlclByaW1lSW5mb3MgICBPdGhlclByaW1lSW5mb3MgT1BUSU9OQUwgIDAgKG5vdCBzdXBwb3J0ZWQpCisgKiAgfQorICovCisjZGVmaW5lIE1QSV9NQVhfU0laRV8yICAgICAgICAgIE1CRURUTFNfTVBJX01BWF9TSVpFIC8gMiArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NUElfTUFYX1NJWkUgJSAyCisjZGVmaW5lIFJTQV9QUlZfREVSX01BWF9CWVRFUyAgIDQ3ICsgMyAqIE1CRURUTFNfTVBJX01BWF9TSVpFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyA1ICogTVBJX01BWF9TSVpFXzIKKworI2Vsc2UgLyogTUJFRFRMU19SU0FfQyAqLworCisjZGVmaW5lIFJTQV9QVUJfREVSX01BWF9CWVRFUyAgIDAKKyNkZWZpbmUgUlNBX1BSVl9ERVJfTUFYX0JZVEVTICAgMAorCisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorLyoKKyAqIEVDIHB1YmxpYyBrZXlzOgorICogIFN1YmplY3RQdWJsaWNLZXlJbmZvICA6Oj0gIFNFUVVFTkNFICB7ICAgICAgMSArIDIKKyAqICAgIGFsZ29yaXRobSAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsICAgIDEgKyAxIChzZXF1ZW5jZSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDEgKyAxICsgNyAoZWMgb2lkKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSArIDEgKyA5IChuYW1lZEN1cnZlIG9pZCkKKyAqICAgIHN1YmplY3RQdWJsaWNLZXkgIEJJVCBTVFJJTkcgICAgICAgICAgICAgIDEgKyAyICsgMSAgICAgICAgICAgICAgIFsxXQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSAocG9pbnQgZm9ybWF0KSAgICAgICAgWzFdCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAyICogRUNQX01BWCAoY29vcmRzKSAgICBbMV0KKyAqICB9CisgKi8KKyNkZWZpbmUgRUNQX1BVQl9ERVJfTUFYX0JZVEVTICAgMzAgKyAyICogTUJFRFRMU19FQ1BfTUFYX0JZVEVTCisKKy8qCisgKiBFQyBwcml2YXRlIGtleXM6CisgKiBFQ1ByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsgICAgICAgICAgICAgICAgICAxICsgMgorICogICAgICB2ZXJzaW9uICAgICAgICBJTlRFR0VSICwgICAgICAgICAgICAgICAgMSArIDEgKyAxCisgKiAgICAgIHByaXZhdGVLZXkgICAgIE9DVEVUIFNUUklORywgICAgICAgICAgICAxICsgMSArIEVDUF9NQVgKKyAqICAgICAgcGFyYW1ldGVycyBbMF0gRUNQYXJhbWV0ZXJzIE9QVElPTkFMLCAgIDEgKyAxICsgKDEgKyAxICsgOSkKKyAqICAgICAgcHVibGljS2V5ICBbMV0gQklUIFNUUklORyBPUFRJT05BTCAgICAgIDEgKyAyICsgWzFdIGFib3ZlCisgKiAgICB9CisgKi8KKyNkZWZpbmUgRUNQX1BSVl9ERVJfTUFYX0JZVEVTICAgMjkgKyAzICogTUJFRFRMU19FQ1BfTUFYX0JZVEVTCisKKyNlbHNlIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2RlZmluZSBFQ1BfUFVCX0RFUl9NQVhfQllURVMgICAwCisjZGVmaW5lIEVDUF9QUlZfREVSX01BWF9CWVRFUyAgIDAKKworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2RlZmluZSBQVUJfREVSX01BWF9CWVRFUyAgIFJTQV9QVUJfREVSX01BWF9CWVRFUyA+IEVDUF9QVUJfREVSX01BWF9CWVRFUyA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUFVCX0RFUl9NQVhfQllURVMgOiBFQ1BfUFVCX0RFUl9NQVhfQllURVMKKyNkZWZpbmUgUFJWX0RFUl9NQVhfQllURVMgICBSU0FfUFJWX0RFUl9NQVhfQllURVMgPiBFQ1BfUFJWX0RFUl9NQVhfQllURVMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BSVl9ERVJfTUFYX0JZVEVTIDogRUNQX1BSVl9ERVJfTUFYX0JZVEVTCisKK2ludCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9wZW0oIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X2J1ZltQVUJfREVSX01BWF9CWVRFU107CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9wdWJrZXlfZGVyKCBrZXksIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG91dHB1dF9idWYpICkgKSA8IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIoIFBFTV9CRUdJTl9QVUJMSUNfS0VZLCBQRU1fRU5EX1BVQkxJQ19LRVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZiArIHNpemVvZihvdXRwdXRfYnVmKSAtIHJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQsIGJ1Ziwgc2l6ZSwgJm9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfcGtfd3JpdGVfa2V5X3BlbSggbWJlZHRsc19wa19jb250ZXh0ICprZXksIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfYnVmW1BSVl9ERVJfTUFYX0JZVEVTXTsKKyAgICBjb25zdCBjaGFyICpiZWdpbiwgKmVuZDsKKyAgICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3dyaXRlX2tleV9kZXIoIGtleSwgb3V0cHV0X2J1Ziwgc2l6ZW9mKG91dHB1dF9idWYpICkgKSA8IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCBrZXkgKSA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgeworICAgICAgICBiZWdpbiA9IFBFTV9CRUdJTl9QUklWQVRFX0tFWV9SU0E7CisgICAgICAgIGVuZCA9IFBFTV9FTkRfUFJJVkFURV9LRVlfUlNBOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIGtleSApID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgIHsKKyAgICAgICAgYmVnaW4gPSBQRU1fQkVHSU5fUFJJVkFURV9LRVlfRUM7CisgICAgICAgIGVuZCA9IFBFTV9FTkRfUFJJVkFURV9LRVlfRUM7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlciggYmVnaW4sIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmICsgc2l6ZW9mKG91dHB1dF9idWYpIC0gcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCwgYnVmLCBzaXplLCAmb2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfUEtfV1JJVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcGxhdGZvcm0uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5MWM0NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3BsYXRmb3JtLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiAgUGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX01FTU9SWSkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MpCitzdGF0aWMgdm9pZCAqcGxhdGZvcm1fY2FsbG9jX3VuaW5pdCggc2l6ZV90IG4sIHNpemVfdCBzaXplICkKK3sKKyAgICAoKHZvaWQpIG4pOworICAgICgodm9pZCkgc2l6ZSk7CisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfQ0FMTE9DICAgcGxhdGZvcm1fY2FsbG9jX3VuaW5pdAorI2VuZGlmIC8qICFNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0MgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0ZSRUUpCitzdGF0aWMgdm9pZCBwbGF0Zm9ybV9mcmVlX3VuaW5pdCggdm9pZCAqcHRyICkKK3sKKyAgICAoKHZvaWQpIHB0cik7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSAgICAgcGxhdGZvcm1fZnJlZV91bmluaXQKKyNlbmRpZiAvKiAhTUJFRFRMU19QTEFURk9STV9TVERfRlJFRSAqLworCit2b2lkICogKCptYmVkdGxzX2NhbGxvYykoIHNpemVfdCwgc2l6ZV90ICkgPSBNQkVEVExTX1BMQVRGT1JNX1NURF9DQUxMT0M7Cit2b2lkICgqbWJlZHRsc19mcmVlKSggdm9pZCAqICkgICAgID0gTUJFRFRMU19QTEFURk9STV9TVERfRlJFRTsKKworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X2NhbGxvY19mcmVlKCB2b2lkICogKCpjYWxsb2NfZnVuYykoIHNpemVfdCwgc2l6ZV90ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnJlZV9mdW5jKSggdm9pZCAqICkgKQoreworICAgIG1iZWR0bHNfY2FsbG9jID0gY2FsbG9jX2Z1bmM7CisgICAgbWJlZHRsc19mcmVlID0gZnJlZV9mdW5jOworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxzdGRhcmcuaD4KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3dpbjMyX3NucHJpbnRmKCBjaGFyICpzLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4gKQoreworICAgIGludCByZXQ7CisgICAgdmFfbGlzdCBhcmdwOworCisgICAgLyogQXZvaWQgY2FsbGluZyB0aGUgaW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlciBieSBjaGVja2luZyBvdXJzZWx2ZXMgKi8KKyAgICBpZiggcyA9PSBOVUxMIHx8IG4gPT0gMCB8fCBmbXQgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHZhX3N0YXJ0KCBhcmdwLCBmbXQgKTsKKyNpZiBkZWZpbmVkKF9UUlVOQ0FURSkKKyAgICByZXQgPSBfdnNucHJpbnRmX3MoIHMsIG4sIF9UUlVOQ0FURSwgZm10LCBhcmdwICk7CisjZWxzZQorICAgIHJldCA9IF92c25wcmludGYoIHMsIG4sIGZtdCwgYXJncCApOworICAgIGlmKCByZXQgPCAwIHx8IChzaXplX3QpIHJldCA9PSBuICkKKyAgICB7CisgICAgICAgIHNbbi0xXSA9ICdcMCc7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKyNlbmRpZgorICAgIHZhX2VuZCggYXJncCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URikKKy8qCisgKiBNYWtlIGR1bW15IGZ1bmN0aW9uIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcworICovCitzdGF0aWMgaW50IHBsYXRmb3JtX3NucHJpbnRmX3VuaW5pdCggY2hhciAqIHMsIHNpemVfdCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBmb3JtYXQsIC4uLiApCit7CisgICAgKCh2b2lkKSBzKTsKKyAgICAoKHZvaWQpIG4pOworICAgICgodm9pZCkgZm9ybWF0KTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URiAgICBwbGF0Zm9ybV9zbnByaW50Zl91bmluaXQKKyNlbmRpZiAvKiAhTUJFRFRMU19QTEFURk9STV9TVERfU05QUklOVEYgKi8KKworaW50ICgqbWJlZHRsc19zbnByaW50ZikoIGNoYXIgKiBzLCBzaXplX3QgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICkgPSBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URjsKKworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X3NucHJpbnRmKCBpbnQgKCpzbnByaW50Zl9mdW5jKSggY2hhciAqIHMsIHNpemVfdCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICkgKQoreworICAgIG1iZWR0bHNfc25wcmludGYgPSBzbnByaW50Zl9mdW5jOworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYpCisvKgorICogTWFrZSBkdW1teSBmdW5jdGlvbiB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAqLworc3RhdGljIGludCBwbGF0Zm9ybV9wcmludGZfdW5pbml0KCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApCit7CisgICAgKCh2b2lkKSBmb3JtYXQpOworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URiAgICBwbGF0Zm9ybV9wcmludGZfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX1BSSU5URiAqLworCitpbnQgKCptYmVkdGxzX3ByaW50ZikoIGNvbnN0IGNoYXIgKiwgLi4uICkgPSBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEY7CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9wcmludGYoIGludCAoKnByaW50Zl9mdW5jKSggY29uc3QgY2hhciAqLCAuLi4gKSApCit7CisgICAgbWJlZHRsc19wcmludGYgPSBwcmludGZfZnVuYzsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVCkKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGKQorLyoKKyAqIE1ha2UgZHVtbXkgZnVuY3Rpb24gdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzCisgKi8KK3N0YXRpYyBpbnQgcGxhdGZvcm1fZnByaW50Zl91bmluaXQoIEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4gKQoreworICAgICgodm9pZCkgc3RyZWFtKTsKKyAgICAoKHZvaWQpIGZvcm1hdCk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfRlBSSU5URiAgIHBsYXRmb3JtX2ZwcmludGZfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX0ZQUklOVEYgKi8KKworaW50ICgqbWJlZHRsc19mcHJpbnRmKSggRklMRSAqLCBjb25zdCBjaGFyICosIC4uLiApID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGOworCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZnByaW50ZiggaW50ICgqZnByaW50Zl9mdW5jKSggRklMRSAqLCBjb25zdCBjaGFyICosIC4uLiApICkKK3sKKyAgICBtYmVkdGxzX2ZwcmludGYgPSBmcHJpbnRmX2Z1bmM7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9GUFJJTlRGX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX0VYSVQpCisvKgorICogTWFrZSBkdW1teSBmdW5jdGlvbiB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAqLworc3RhdGljIHZvaWQgcGxhdGZvcm1fZXhpdF91bmluaXQoIGludCBzdGF0dXMgKQoreworICAgICgodm9pZCkgc3RhdHVzKTsKK30KKworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUICAgcGxhdGZvcm1fZXhpdF91bmluaXQKKyNlbmRpZiAvKiAhTUJFRFRMU19QTEFURk9STV9TVERfRVhJVCAqLworCit2b2lkICgqbWJlZHRsc19leGl0KSggaW50IHN0YXR1cyApID0gTUJFRFRMU19QTEFURk9STV9TVERfRVhJVDsKKworaW50IG1iZWR0bHNfcGxhdGZvcm1fc2V0X2V4aXQoIHZvaWQgKCpleGl0X2Z1bmMpKCBpbnQgc3RhdHVzICkgKQoreworICAgIG1iZWR0bHNfZXhpdCA9IGV4aXRfZnVuYzsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0VYSVRfQUxUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX1RJTUVfQUxUKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUpCisvKgorICogTWFrZSBkdW1teSBmdW5jdGlvbiB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKKyAqLworc3RhdGljIG1iZWR0bHNfdGltZV90IHBsYXRmb3JtX3RpbWVfdW5pbml0KCBtYmVkdGxzX3RpbWVfdCogdGltZXIgKQoreworICAgICgodm9pZCkgdGltZXIpOworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fU1REX1RJTUUgICBwbGF0Zm9ybV90aW1lX3VuaW5pdAorI2VuZGlmIC8qICFNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FICovCisKK21iZWR0bHNfdGltZV90ICgqbWJlZHRsc190aW1lKSggbWJlZHRsc190aW1lX3QqIHRpbWVyICkgPSBNQkVEVExTX1BMQVRGT1JNX1NURF9USU1FOworCitpbnQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfdGltZSggbWJlZHRsc190aW1lX3QgKCp0aW1lX2Z1bmMpKCBtYmVkdGxzX3RpbWVfdCogdGltZXIgKSApCit7CisgICAgbWJlZHRsc190aW1lID0gdGltZV9mdW5jOworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBzZWVkIGZ1bmN0aW9ucyB1c2UKKyAqIHN0YW5kYXJkIGxpYmMgZmlsZSBmdW5jdGlvbnMgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byBhIHByZS1kZWZpbmVkIGZpbGVuYW1lCisgKi8KK2ludCBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3JlYWQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgIEZJTEUgKmZpbGU7CisgICAgc2l6ZV90IG47CisKKyAgICBpZiggKCBmaWxlID0gZm9wZW4oIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfRklMRSwgInJiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmKCAoIG4gPSBmcmVhZCggYnVmLCAxLCBidWZfbGVuLCBmaWxlICkgKSAhPSBidWZfbGVuICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZmlsZSApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZmNsb3NlKCBmaWxlICk7CisgICAgcmV0dXJuKCBuICk7Cit9CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3N0ZF9udl9zZWVkX3dyaXRlKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICBGSUxFICpmaWxlOworICAgIHNpemVfdCBuOworCisgICAgaWYoICggZmlsZSA9IGZvcGVuKCBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX0ZJTEUsICJ3IiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmKCAoIG4gPSBmd3JpdGUoIGJ1ZiwgMSwgYnVmX2xlbiwgZmlsZSApICkgIT0gYnVmX2xlbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGZpbGUgKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZjbG9zZSggZmlsZSApOworICAgIHJldHVybiggbiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCkKKy8qCisgKiBNYWtlIGR1bW15IGZ1bmN0aW9uIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcworICovCitzdGF0aWMgaW50IHBsYXRmb3JtX252X3NlZWRfcmVhZF91bmluaXQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgICgodm9pZCkgYnVmKTsKKyAgICAoKHZvaWQpIGJ1Zl9sZW4pOworICAgIHJldHVybiggLTEgKTsKK30KKworI2RlZmluZSBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX1JFQUQgICBwbGF0Zm9ybV9udl9zZWVkX3JlYWRfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfUkVBRCAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9XUklURSkKKy8qCisgKiBNYWtlIGR1bW15IGZ1bmN0aW9uIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcworICovCitzdGF0aWMgaW50IHBsYXRmb3JtX252X3NlZWRfd3JpdGVfdW5pbml0KCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICAoKHZvaWQpIGJ1Zik7CisgICAgKCh2b2lkKSBidWZfbGVuKTsKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9XUklURSAgIHBsYXRmb3JtX252X3NlZWRfd3JpdGVfdW5pbml0CisjZW5kaWYgLyogIU1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEUgKi8KKworaW50ICgqbWJlZHRsc19udl9zZWVkX3JlYWQpKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkgPQorICAgICAgICAgICAgTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9SRUFEOworaW50ICgqbWJlZHRsc19udl9zZWVkX3dyaXRlKSggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApID0KKyAgICAgICAgICAgIE1CRURUTFNfUExBVEZPUk1fU1REX05WX1NFRURfV1JJVEU7CisKK2ludCBtYmVkdGxzX3BsYXRmb3JtX3NldF9udl9zZWVkKAorICAgICAgICBpbnQgKCpudl9zZWVkX3JlYWRfZnVuYykoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKSwKKyAgICAgICAgaW50ICgqbnZfc2VlZF93cml0ZV9mdW5jKSggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApICkKK3sKKyAgICBtYmVkdGxzX252X3NlZWRfcmVhZCA9IG52X3NlZWRfcmVhZF9mdW5jOworICAgIG1iZWR0bHNfbnZfc2VlZF93cml0ZSA9IG52X3NlZWRfd3JpdGVfZnVuYzsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX05WX1NFRURfQUxUICovCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX05WX1NFRUQgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcmlwZW1kMTYwLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9yaXBlbWQxNjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGIwYTYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvcmlwZW1kMTYwLmMKQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKiAgUklQRSBNRC0xNjAgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworLyoKKyAqICBUaGUgUklQRU1ELTE2MCBhbGdvcml0aG0gd2FzIGRlc2lnbmVkIGJ5IFJJUEUgaW4gMTk5NgorICogIGh0dHA6Ly9ob21lcy5lc2F0Lmt1bGV1dmVuLmJlL35ib3NzZWxhZS9tYmVkdGxzX3JpcGVtZDE2MC5odG1sCisgKiAgaHR0cDovL2VoYXNoLmlhaWsudHVncmF6LmF0L3dpa2kvUklQRU1ELTE2MAorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3JpcGVtZDE2MC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworLyoKKyAqIDMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbiBtYWNyb3MgKGxpdHRsZSBlbmRpYW4pCisgKi8KKyNpZm5kZWYgR0VUX1VJTlQzMl9MRQorI2RlZmluZSBHRVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobikgPSAoICh1aW50MzJfdCkgKGIpWyhpKSAgICBdICAgICAgICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMV0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAyXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDNdIDw8IDI0ICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9MRQorI2RlZmluZSBQVVRfVUlOVDMyX0xFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgICAgICAgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+ICA4ICkgJiAweEZGICk7ICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAoIChuKSA+PiAxNiApICYgMHhGRiApOyAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgPj4gMjQgKSAmIDB4RkYgKTsgICAgXAorfQorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfaW5pdCggbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX2Nsb25lKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogUklQRU1ELTE2MCBjb250ZXh0IHNldHVwCisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfc3RhcnRzKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHggKQoreworICAgIGN0eC0+dG90YWxbMF0gPSAwOworICAgIGN0eC0+dG90YWxbMV0gPSAwOworCisgICAgY3R4LT5zdGF0ZVswXSA9IDB4Njc0NTIzMDE7CisgICAgY3R4LT5zdGF0ZVsxXSA9IDB4RUZDREFCODk7CisgICAgY3R4LT5zdGF0ZVsyXSA9IDB4OThCQURDRkU7CisgICAgY3R4LT5zdGF0ZVszXSA9IDB4MTAzMjU0NzY7CisgICAgY3R4LT5zdGF0ZVs0XSA9IDB4QzNEMkUxRjA7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVCkKKy8qCisgKiBQcm9jZXNzIG9uZSBibG9jaworICovCit2b2lkIG1iZWR0bHNfcmlwZW1kMTYwX3Byb2Nlc3MoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBkYXRhWzY0XSApCit7CisgICAgdWludDMyX3QgQSwgQiwgQywgRCwgRSwgQXAsIEJwLCBDcCwgRHAsIEVwLCBYWzE2XTsKKworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDBdLCBkYXRhLCAgMCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDFdLCBkYXRhLCAgNCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDJdLCBkYXRhLCAgOCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDNdLCBkYXRhLCAxMiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDRdLCBkYXRhLCAxNiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDVdLCBkYXRhLCAyMCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDZdLCBkYXRhLCAyNCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDddLCBkYXRhLCAyOCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDhdLCBkYXRhLCAzMiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbIDldLCBkYXRhLCAzNiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTBdLCBkYXRhLCA0MCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTFdLCBkYXRhLCA0NCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTJdLCBkYXRhLCA0OCApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTNdLCBkYXRhLCA1MiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTRdLCBkYXRhLCA1NiApOworICAgIEdFVF9VSU5UMzJfTEUoIFhbMTVdLCBkYXRhLCA2MCApOworCisgICAgQSA9IEFwID0gY3R4LT5zdGF0ZVswXTsKKyAgICBCID0gQnAgPSBjdHgtPnN0YXRlWzFdOworICAgIEMgPSBDcCA9IGN0eC0+c3RhdGVbMl07CisgICAgRCA9IERwID0gY3R4LT5zdGF0ZVszXTsKKyAgICBFID0gRXAgPSBjdHgtPnN0YXRlWzRdOworCisjZGVmaW5lIEYxKCB4LCB5LCB6ICkgICAoIHggXiB5IF4geiApCisjZGVmaW5lIEYyKCB4LCB5LCB6ICkgICAoICggeCAmIHkgKSB8ICggfnggJiB6ICkgKQorI2RlZmluZSBGMyggeCwgeSwgeiApICAgKCAoIHggfCB+eSApIF4geiApCisjZGVmaW5lIEY0KCB4LCB5LCB6ICkgICAoICggeCAmIHogKSB8ICggeSAmIH56ICkgKQorI2RlZmluZSBGNSggeCwgeSwgeiApICAgKCB4IF4gKCB5IHwgfnogKSApCisKKyNkZWZpbmUgUyggeCwgbiApICggKCB4IDw8IG4gKSB8ICggeCA+PiAoMzIgLSBuKSApICkKKworI2RlZmluZSBQKCBhLCBiLCBjLCBkLCBlLCByLCBzLCBmLCBrICkgICAgICBcCisgICAgYSArPSBmKCBiLCBjLCBkICkgKyBYW3JdICsgazsgICAgICAgICAgIFwKKyAgICBhID0gUyggYSwgcyApICsgZTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGMgPSBTKCBjLCAxMCApOworCisjZGVmaW5lIFAyKCBhLCBiLCBjLCBkLCBlLCByLCBzLCBycCwgc3AgKSAgIFwKKyAgICBQKCBhLCBiLCBjLCBkLCBlLCByLCBzLCBGLCBLICk7ICAgICAgICAgXAorICAgIFAoIGEgIyMgcCwgYiAjIyBwLCBjICMjIHAsIGQgIyMgcCwgZSAjIyBwLCBycCwgc3AsIEZwLCBLcCApOworCisjZGVmaW5lIEYgICBGMQorI2RlZmluZSBLICAgMHgwMDAwMDAwMAorI2RlZmluZSBGcCAgRjUKKyNkZWZpbmUgS3AgIDB4NTBBMjhCRTYKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgIDAsIDExLCAgNSwgIDggKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgIDEsIDE0LCAxNCwgIDkgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDIsIDE1LCAgNywgIDkgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDMsIDEyLCAgMCwgMTEgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgIDQsICA1LCAgOSwgMTMgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgIDUsICA4LCAgMiwgMTUgKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgIDYsICA3LCAxMSwgMTUgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDcsICA5LCAgNCwgIDUgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDgsIDExLCAxMywgIDcgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgIDksIDEzLCAgNiwgIDcgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgMTAsIDE0LCAxNSwgIDggKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgMTEsIDE1LCAgOCwgMTEgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgMTIsICA2LCAgMSwgMTQgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgMTMsICA3LCAxMCwgMTQgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgMTQsICA5LCAgMywgMTIgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgMTUsICA4LCAxMiwgIDYgKTsKKyN1bmRlZiBGCisjdW5kZWYgSworI3VuZGVmIEZwCisjdW5kZWYgS3AKKworI2RlZmluZSBGICAgRjIKKyNkZWZpbmUgSyAgIDB4NUE4Mjc5OTkKKyNkZWZpbmUgRnAgIEY0CisjZGVmaW5lIEtwICAweDVDNEREMTI0CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA3LCAgNywgIDYsICA5ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICA0LCAgNiwgMTEsIDEzICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsIDEzLCAgOCwgIDMsIDE1ICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsICAxLCAxMywgIDcsICA3ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsIDEwLCAxMSwgIDAsIDEyICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA2LCAgOSwgMTMsICA4ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsIDE1LCAgNywgIDUsICA5ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICAzLCAxNSwgMTAsIDExICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDEyLCAgNywgMTQsICA3ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICAwLCAxMiwgMTUsICA3ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA5LCAxNSwgIDgsIDEyICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICA1LCAgOSwgMTIsICA3ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICAyLCAxMSwgIDQsICA2ICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDE0LCAgNywgIDksIDE1ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsIDExLCAxMywgIDEsIDEzICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA4LCAxMiwgIDIsIDExICk7CisjdW5kZWYgRgorI3VuZGVmIEsKKyN1bmRlZiBGcAorI3VuZGVmIEtwCisKKyNkZWZpbmUgRiAgIEYzCisjZGVmaW5lIEsgICAweDZFRDlFQkExCisjZGVmaW5lIEZwICBGMworI2RlZmluZSBLcCAgMHg2RDcwM0VGMworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAgMywgMTEsIDE1LCAgOSApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAxMCwgMTMsICA1LCAgNyApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAxNCwgIDYsICAxLCAxNSApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAgNCwgIDcsICAzLCAxMSApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgOSwgMTQsICA3LCAgOCApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAxNSwgIDksIDE0LCAgNiApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAgOCwgMTMsICA2LCAgNiApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAgMSwgMTUsICA5LCAxNCApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAgMiwgMTQsIDExLCAxMiApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgNywgIDgsICA4LCAxMyApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAgMCwgMTMsIDEyLCAgNSApOworICAgIFAyKCBDLCBELCBFLCBBLCBCLCAgNiwgIDYsICAyLCAxNCApOworICAgIFAyKCBCLCBDLCBELCBFLCBBLCAxMywgIDUsIDEwLCAxMyApOworICAgIFAyKCBBLCBCLCBDLCBELCBFLCAxMSwgMTIsICAwLCAxMyApOworICAgIFAyKCBFLCBBLCBCLCBDLCBELCAgNSwgIDcsICA0LCAgNyApOworICAgIFAyKCBELCBFLCBBLCBCLCBDLCAxMiwgIDUsIDEzLCAgNSApOworI3VuZGVmIEYKKyN1bmRlZiBLCisjdW5kZWYgRnAKKyN1bmRlZiBLcAorCisjZGVmaW5lIEYgICBGNAorI2RlZmluZSBLICAgMHg4RjFCQkNEQworI2RlZmluZSBGcCAgRjIKKyNkZWZpbmUgS3AgIDB4N0E2RDc2RTkKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDEsIDExLCAgOCwgMTUgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgIDksIDEyLCAgNiwgIDUgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgMTEsIDE0LCAgNCwgIDggKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgMTAsIDE1LCAgMSwgMTEgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDAsIDE0LCAgMywgMTQgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDgsIDE1LCAxMSwgMTQgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgMTIsICA5LCAxNSwgIDYgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgIDQsICA4LCAgMCwgMTQgKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgMTMsICA5LCAgNSwgIDYgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDMsIDE0LCAxMiwgIDkgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDcsICA1LCAgMiwgMTIgKTsKKyAgICBQMiggQiwgQywgRCwgRSwgQSwgMTUsICA2LCAxMywgIDkgKTsKKyAgICBQMiggQSwgQiwgQywgRCwgRSwgMTQsICA4LCAgOSwgMTIgKTsKKyAgICBQMiggRSwgQSwgQiwgQywgRCwgIDUsICA2LCAgNywgIDUgKTsKKyAgICBQMiggRCwgRSwgQSwgQiwgQywgIDYsICA1LCAxMCwgMTUgKTsKKyAgICBQMiggQywgRCwgRSwgQSwgQiwgIDIsIDEyLCAxNCwgIDggKTsKKyN1bmRlZiBGCisjdW5kZWYgSworI3VuZGVmIEZwCisjdW5kZWYgS3AKKworI2RlZmluZSBGICAgRjUKKyNkZWZpbmUgSyAgIDB4QTk1M0ZENEUKKyNkZWZpbmUgRnAgIEYxCisjZGVmaW5lIEtwICAweDAwMDAwMDAwCisgICAgUDIoIEIsIEMsIEQsIEUsIEEsICA0LCAgOSwgMTIsICA4ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICAwLCAxNSwgMTUsICA1ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsICA1LCAgNSwgMTAsIDEyICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICA5LCAxMSwgIDQsICA5ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICA3LCAgNiwgIDEsIDEyICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDEyLCAgOCwgIDUsICA1ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICAyLCAxMywgIDgsIDE0ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsIDEwLCAxMiwgIDcsICA2ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsIDE0LCAgNSwgIDYsICA4ICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsICAxLCAxMiwgIDIsIDEzICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsICAzLCAxMywgMTMsICA2ICk7CisgICAgUDIoIEEsIEIsIEMsIEQsIEUsICA4LCAxNCwgMTQsICA1ICk7CisgICAgUDIoIEUsIEEsIEIsIEMsIEQsIDExLCAxMSwgIDAsIDE1ICk7CisgICAgUDIoIEQsIEUsIEEsIEIsIEMsICA2LCAgOCwgIDMsIDEzICk7CisgICAgUDIoIEMsIEQsIEUsIEEsIEIsIDE1LCAgNSwgIDksIDExICk7CisgICAgUDIoIEIsIEMsIEQsIEUsIEEsIDEzLCAgNiwgMTEsIDExICk7CisjdW5kZWYgRgorI3VuZGVmIEsKKyN1bmRlZiBGcAorI3VuZGVmIEtwCisKKyAgICBDICAgICAgICAgICAgID0gY3R4LT5zdGF0ZVsxXSArIEMgKyBEcDsKKyAgICBjdHgtPnN0YXRlWzFdID0gY3R4LT5zdGF0ZVsyXSArIEQgKyBFcDsKKyAgICBjdHgtPnN0YXRlWzJdID0gY3R4LT5zdGF0ZVszXSArIEUgKyBBcDsKKyAgICBjdHgtPnN0YXRlWzNdID0gY3R4LT5zdGF0ZVs0XSArIEEgKyBCcDsKKyAgICBjdHgtPnN0YXRlWzRdID0gY3R4LT5zdGF0ZVswXSArIEIgKyBDcDsKKyAgICBjdHgtPnN0YXRlWzBdID0gQzsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIFJJUEVNRC0xNjAgcHJvY2VzcyBidWZmZXIKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGUoIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICkKK3sKKyAgICBzaXplX3QgZmlsbDsKKyAgICB1aW50MzJfdCBsZWZ0OworCisgICAgaWYoIGlsZW4gPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgIGxlZnQgPSBjdHgtPnRvdGFsWzBdICYgMHgzRjsKKyAgICBmaWxsID0gNjQgLSBsZWZ0OworCisgICAgY3R4LT50b3RhbFswXSArPSAodWludDMyX3QpIGlsZW47CisgICAgY3R4LT50b3RhbFswXSAmPSAweEZGRkZGRkZGOworCisgICAgaWYoIGN0eC0+dG90YWxbMF0gPCAodWludDMyX3QpIGlsZW4gKQorICAgICAgICBjdHgtPnRvdGFsWzFdKys7CisKKyAgICBpZiggbGVmdCAmJiBpbGVuID49IGZpbGwgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgbWJlZHRsc19yaXBlbWQxNjBfcHJvY2VzcyggY3R4LCBjdHgtPmJ1ZmZlciApOworICAgICAgICBpbnB1dCArPSBmaWxsOworICAgICAgICBpbGVuICAtPSBmaWxsOworICAgICAgICBsZWZ0ID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSggaWxlbiA+PSA2NCApCisgICAgeworICAgICAgICBtYmVkdGxzX3JpcGVtZDE2MF9wcm9jZXNzKCBjdHgsIGlucHV0ICk7CisgICAgICAgIGlucHV0ICs9IDY0OworICAgICAgICBpbGVuICAtPSA2NDsKKyAgICB9CisKKyAgICBpZiggaWxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgaW5wdXQsIGlsZW4gKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJpcGVtZDE2MF9wYWRkaW5nWzY0XSA9Cit7CisgMHg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKKworLyoKKyAqIFJJUEVNRC0xNjAgZmluYWwgZGlnZXN0CisgKi8KK3ZvaWQgbWJlZHRsc19yaXBlbWQxNjBfZmluaXNoKCBtYmVkdGxzX3JpcGVtZDE2MF9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXSApCit7CisgICAgdWludDMyX3QgbGFzdCwgcGFkbjsKKyAgICB1aW50MzJfdCBoaWdoLCBsb3c7CisgICAgdW5zaWduZWQgY2hhciBtc2dsZW5bOF07CisKKyAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDI5ICkKKyAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7CisgICAgbG93ICA9ICggY3R4LT50b3RhbFswXSA8PCAgMyApOworCisgICAgUFVUX1VJTlQzMl9MRSggbG93LCAgbXNnbGVuLCAwICk7CisgICAgUFVUX1VJTlQzMl9MRSggaGlnaCwgbXNnbGVuLCA0ICk7CisKKyAgICBsYXN0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgcGFkbiA9ICggbGFzdCA8IDU2ICkgPyAoIDU2IC0gbGFzdCApIDogKCAxMjAgLSBsYXN0ICk7CisKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGUoIGN0eCwgcmlwZW1kMTYwX3BhZGRpbmcsIHBhZG4gKTsKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGUoIGN0eCwgbXNnbGVuLCA4ICk7CisKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzBdLCBvdXRwdXQsICAwICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVsxXSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfTEUoIGN0eC0+c3RhdGVbMl0sIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDMyX0xFKCBjdHgtPnN0YXRlWzNdLCBvdXRwdXQsIDEyICk7CisgICAgUFVUX1VJTlQzMl9MRSggY3R4LT5zdGF0ZVs0XSwgb3V0cHV0LCAxNiApOworfQorCisvKgorICogb3V0cHV0ID0gUklQRU1ELTE2MCggaW5wdXQgYnVmZmVyICkKKyAqLwordm9pZCBtYmVkdGxzX3JpcGVtZDE2MCggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXSApCit7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX3JpcGVtZDE2MF9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfc3RhcnRzKCAmY3R4ICk7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisgICAgbWJlZHRsc19yaXBlbWQxNjBfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBUZXN0IHZlY3RvcnMgZnJvbSB0aGUgUklQRU1ELTE2MCBwYXBlciBhbmQKKyAqIGh0dHA6Ly9ob21lcy5lc2F0Lmt1bGV1dmVuLmJlL35ib3NzZWxhZS9tYmVkdGxzX3JpcGVtZDE2MC5odG1sI0hNQUMKKyAqLworI2RlZmluZSBURVNUUyAgIDgKKyNkZWZpbmUgS0VZUyAgICAyCitzdGF0aWMgY29uc3QgY2hhciAqcmlwZW1kMTYwX3Rlc3RfaW5wdXRbVEVTVFNdID0KK3sKKyAgICAiIiwKKyAgICAiYSIsCisgICAgImFiYyIsCisgICAgIm1lc3NhZ2UgZGlnZXN0IiwKKyAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAorICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwKKyAgICAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIKKyAgICAgICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmlwZW1kMTYwX3Rlc3RfbWRbVEVTVFNdWzIwXSA9Cit7CisgICAgeyAweDljLCAweDExLCAweDg1LCAweGE1LCAweGM1LCAweGU5LCAweGZjLCAweDU0LCAweDYxLCAweDI4LAorICAgICAgMHgwOCwgMHg5NywgMHg3ZSwgMHhlOCwgMHhmNSwgMHg0OCwgMHhiMiwgMHgyNSwgMHg4ZCwgMHgzMSB9LAorICAgIHsgMHgwYiwgMHhkYywgMHg5ZCwgMHgyZCwgMHgyNSwgMHg2YiwgMHgzZSwgMHhlOSwgMHhkYSwgMHhhZSwKKyAgICAgIDB4MzQsIDB4N2IsIDB4ZTYsIDB4ZjQsIDB4ZGMsIDB4ODMsIDB4NWEsIDB4NDYsIDB4N2YsIDB4ZmUgfSwKKyAgICB7IDB4OGUsIDB4YjIsIDB4MDgsIDB4ZjcsIDB4ZTAsIDB4NWQsIDB4OTgsIDB4N2EsIDB4OWIsIDB4MDQsCisgICAgICAweDRhLCAweDhlLCAweDk4LCAweGM2LCAweGIwLCAweDg3LCAweGYxLCAweDVhLCAweDBiLCAweGZjIH0sCisgICAgeyAweDVkLCAweDA2LCAweDg5LCAweGVmLCAweDQ5LCAweGQyLCAweGZhLCAweGU1LCAweDcyLCAweGI4LAorICAgICAgMHg4MSwgMHhiMSwgMHgyMywgMHhhOCwgMHg1ZiwgMHhmYSwgMHgyMSwgMHg1OSwgMHg1ZiwgMHgzNiB9LAorICAgIHsgMHhmNywgMHgxYywgMHgyNywgMHgxMCwgMHg5YywgMHg2OSwgMHgyYywgMHgxYiwgMHg1NiwgMHhiYiwKKyAgICAgIDB4ZGMsIDB4ZWIsIDB4NWIsIDB4OWQsIDB4MjgsIDB4NjUsIDB4YjMsIDB4NzAsIDB4OGQsIDB4YmMgfSwKKyAgICB7IDB4MTIsIDB4YTAsIDB4NTMsIDB4MzgsIDB4NGEsIDB4OWMsIDB4MGMsIDB4ODgsIDB4ZTQsIDB4MDUsCisgICAgICAweGEwLCAweDZjLCAweDI3LCAweGRjLCAweGY0LCAweDlhLCAweGRhLCAweDYyLCAweGViLCAweDJiIH0sCisgICAgeyAweGIwLCAweGUyLCAweDBiLCAweDZlLCAweDMxLCAweDE2LCAweDY0LCAweDAyLCAweDg2LCAweGVkLAorICAgICAgMHgzYSwgMHg4NywgMHhhNSwgMHg3MSwgMHgzMCwgMHg3OSwgMHhiMiwgMHgxZiwgMHg1MSwgMHg4OSB9LAorICAgIHsgMHg5YiwgMHg3NSwgMHgyZSwgMHg0NSwgMHg1NywgMHgzZCwgMHg0YiwgMHgzOSwgMHhmNCwgMHhkYiwKKyAgICAgIDB4ZDMsIDB4MzIsIDB4M2MsIDB4YWIsIDB4ODIsIDB4YmYsIDB4NjMsIDB4MzIsIDB4NmIsIDB4ZmIgfSwKK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfcmlwZW1kMTYwX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzIwXTsKKworICAgIG1lbXNldCggb3V0cHV0LCAwLCBzaXplb2Ygb3V0cHV0ICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgVEVTVFM7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBSSVBFTUQtMTYwIHRlc3QgIyVkOiAiLCBpICsgMSApOworCisgICAgICAgIG1iZWR0bHNfcmlwZW1kMTYwKCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSByaXBlbWQxNjBfdGVzdF9pbnB1dFtpXSwKKyAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHJpcGVtZDE2MF90ZXN0X2lucHV0W2ldICksCisgICAgICAgICAgICAgICAgICAgb3V0cHV0ICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggb3V0cHV0LCByaXBlbWQxNjBfdGVzdF9tZFtpXSwgMjAgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0dXJuKCAxICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1JJUEVNRDE2MF9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9yc2EuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3JzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWYyYTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9yc2EuYwpAQCAtMCwwICsxLDE3MzAgQEAKKy8qCisgKiAgVGhlIFJTQSBwdWJsaWMta2V5IGNyeXB0b3N5c3RlbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgZm9sbG93aW5nIHNvdXJjZXMgd2VyZSByZWZlcmVuY2VkIGluIHRoZSBkZXNpZ24gb2YgdGhpcyBpbXBsZW1lbnRhdGlvbgorICogIG9mIHRoZSBSU0EgYWxnb3JpdGhtOgorICoKKyAqICBbMV0gQSBtZXRob2QgZm9yIG9idGFpbmluZyBkaWdpdGFsIHNpZ25hdHVyZXMgYW5kIHB1YmxpYy1rZXkgY3J5cHRvc3lzdGVtcworICogICAgICBSIFJpdmVzdCwgQSBTaGFtaXIsIGFuZCBMIEFkbGVtYW4KKyAqICAgICAgaHR0cDovL3Blb3BsZS5jc2FpbC5taXQuZWR1L3JpdmVzdC9wdWJzLmh0bWwjUlNBNzgKKyAqCisgKiAgWzJdIEhhbmRib29rIG9mIEFwcGxpZWQgQ3J5cHRvZ3JhcGh5IC0gMTk5NywgQ2hhcHRlciA4CisgKiAgICAgIE1lbmV6ZXMsIHZhbiBPb3JzY2hvdCBhbmQgVmFuc3RvbmUKKyAqCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgZnJlZQorI2VuZGlmCisKKy8qCisgKiBJbml0aWFsaXplIGFuIFJTQSBjb250ZXh0CisgKi8KK3ZvaWQgbWJlZHRsc19yc2FfaW5pdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsCisgICAgICAgICAgICAgICBpbnQgaGFzaF9pZCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19yc2FfY29udGV4dCApICk7CisKKyAgICBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZyggY3R4LCBwYWRkaW5nLCBoYXNoX2lkICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmY3R4LT5tdXRleCApOworI2VuZGlmCit9CisKKy8qCisgKiBTZXQgcGFkZGluZyBmb3IgYW4gZXhpc3RpbmcgUlNBIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3JzYV9zZXRfcGFkZGluZyggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LCBpbnQgcGFkZGluZywgaW50IGhhc2hfaWQgKQoreworICAgIGN0eC0+cGFkZGluZyA9IHBhZGRpbmc7CisgICAgY3R4LT5oYXNoX2lkID0gaGFzaF9pZDsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkKKworLyoKKyAqIEdlbmVyYXRlIGFuIFJTQSBrZXlwYWlyCisgKi8KK2ludCBtYmVkdGxzX3JzYV9nZW5fa2V5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYml0cywgaW50IGV4cG9uZW50ICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKworICAgIGlmKCBmX3JuZyA9PSBOVUxMIHx8IG5iaXRzIDwgMTI4IHx8IGV4cG9uZW50IDwgMyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggbmJpdHMgJSAyICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworCisgICAgLyoKKyAgICAgKiBmaW5kIHByaW1lcyBQIGFuZCBRIHdpdGggUSA8IFAgc28gdGhhdDoKKyAgICAgKiBHQ0QoIEUsIChQLTEpKihRLTEpICkgPT0gMQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbHNldCggJmN0eC0+RSwgZXhwb25lbnQgKSApOworCisgICAgZG8KKyAgICB7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ2VuX3ByaW1lKCAmY3R4LT5QLCBuYml0cyA+PiAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ2VuX3ByaW1lKCAmY3R4LT5RLCBuYml0cyA+PiAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LT5QLCAmY3R4LT5RICkgPT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZjdHgtPk4sICZjdHgtPlAsICZjdHgtPlEgKSApOworICAgICAgICBpZiggbWJlZHRsc19tcGlfYml0bGVuKCAmY3R4LT5OICkgIT0gbmJpdHMgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZjdHgtPlAsICZjdHgtPlEgKSA8IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21waV9zd2FwKCAmY3R4LT5QLCAmY3R4LT5RICk7CisKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHgtPlAsIDEgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC0+USwgMSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LT5FLCAmSCAgKSApOworICAgIH0KKyAgICB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJkcsIDEgKSAhPSAwICk7CisKKyAgICAvKgorICAgICAqIEQgID0gRV4tMSBtb2QgKChQLTEpKihRLTEpKQorICAgICAqIERQID0gRCBtb2QgKFAgLSAxKQorICAgICAqIERRID0gRCBtb2QgKFEgLSAxKQorICAgICAqIFFQID0gUV4tMSBtb2QgUAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+RCAsICZjdHgtPkUsICZIICApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5EUCwgJmN0eC0+RCwgJlAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHgtPkRRLCAmY3R4LT5ELCAmUTEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+UVAsICZjdHgtPlEsICZjdHgtPlAgKSApOworCisgICAgY3R4LT5sZW4gPSAoIG1iZWR0bHNfbXBpX2JpdGxlbiggJmN0eC0+TiApICsgNyApID4+IDM7CisKK2NsZWFudXA6CisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yc2FfZnJlZSggY3R4ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9HRU5fRkFJTEVEICsgcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0dFTlBSSU1FICovCisKKy8qCisgKiBDaGVjayBhIHB1YmxpYyBSU0Ega2V5CisgKi8KK2ludCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoICFjdHgtPk4ucCB8fCAhY3R4LT5FLnAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisKKyAgICBpZiggKCBjdHgtPk4ucFswXSAmIDEgKSA9PSAwIHx8CisgICAgICAgICggY3R4LT5FLnBbMF0gJiAxICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPk4gKSA8IDEyOCB8fAorICAgICAgICBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPk4gKSA+IE1CRURUTFNfTVBJX01BWF9CSVRTICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCApOworCisgICAgaWYoIG1iZWR0bHNfbXBpX2JpdGxlbiggJmN0eC0+RSApIDwgMiB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LT5FLCAmY3R4LT5OICkgPj0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ2hlY2sgYSBwcml2YXRlIFJTQSBrZXkKKyAqLworaW50IG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX21waSBQUSwgREUsIFAxLCBRMSwgSCwgSSwgRywgRzIsIEwxLCBMMiwgRFAsIERRLCBRUDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggY3R4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAhY3R4LT5QLnAgfHwgIWN0eC0+US5wIHx8ICFjdHgtPkQucCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQUSApOyBtYmVkdGxzX21waV9pbml0KCAmREUgKTsgbWJlZHRsc19tcGlfaW5pdCggJlAxICk7IG1iZWR0bHNfbXBpX2luaXQoICZRMSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZIICApOyBtYmVkdGxzX21waV9pbml0KCAmSSAgKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgICk7IG1iZWR0bHNfbXBpX2luaXQoICZHMiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZMMSApOyBtYmVkdGxzX21waV9pbml0KCAmTDIgKTsgbWJlZHRsc19tcGlfaW5pdCggJkRQICk7IG1iZWR0bHNfbXBpX2luaXQoICZEUSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZRUCApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmUFEsICZjdHgtPlAsICZjdHgtPlEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJkRFLCAmY3R4LT5ELCAmY3R4LT5FICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJmN0eC0+UCwgMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHgtPlEsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHgtPkUsICZIICApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2djZCggJkcyLCAmUDEsICZRMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9kaXZfbXBpKCAmTDEsICZMMiwgJkgsICZHMiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmSSwgJkRFLCAmTDEgICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJkRQLCAmY3R4LT5ELCAmUDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJkRRLCAmY3R4LT5ELCAmUTEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJlFQLCAmY3R4LT5RLCAmY3R4LT5QICkgKTsKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBhIHZhbGlkIFBLQ1MxdjIgcHJpdmF0ZSBrZXkKKyAgICAgKi8KKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlBRLCAmY3R4LT5OICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmRFAsICZjdHgtPkRQICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmRFEsICZjdHgtPkRRICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmUVAsICZjdHgtPlFQICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCAmTDIsIDAgKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZJLCAxICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9jbXBfaW50KCAmRywgMSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQ7CisgICAgfQorCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQUSApOyBtYmVkdGxzX21waV9mcmVlKCAmREUgKTsgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZIICApOyBtYmVkdGxzX21waV9mcmVlKCAmSSAgKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHMiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZMMSApOyBtYmVkdGxzX21waV9mcmVlKCAmTDIgKTsgbWJlZHRsc19tcGlfZnJlZSggJkRQICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZEUSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZRUCApOworCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICsgcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENoZWNrIGlmIGNvbnRleHRzIGhvbGRpbmcgYSBwdWJsaWMgYW5kIHByaXZhdGUga2V5IG1hdGNoCisgKi8KK2ludCBtYmVkdGxzX3JzYV9jaGVja19wdWJfcHJpdiggY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqcHViLCBjb25zdCBtYmVkdGxzX3JzYV9jb250ZXh0ICpwcnYgKQoreworICAgIGlmKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoIHB1YiApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggcHJ2ICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVEICk7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZwdWItPk4sICZwcnYtPk4gKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZwdWItPkUsICZwcnYtPkUgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIERvIGFuIFJTQSBwdWJsaWMga2V5IG9wZXJhdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcHVibGljKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBvbGVuOworICAgIG1iZWR0bHNfbXBpIFQ7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmVCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmVCwgaW5wdXQsIGN0eC0+bGVuICkgKTsKKworICAgIGlmKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmVCwgJmN0eC0+TiApID49IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgb2xlbiA9IGN0eC0+bGVuOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlQsICZULCAmY3R4LT5FLCAmY3R4LT5OLCAmY3R4LT5STiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZULCBvdXRwdXQsIG9sZW4gKSApOworCitjbGVhbnVwOgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZUICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9QVUJMSUNfRkFJTEVEICsgcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIG9yIHVwZGF0ZSBibGluZGluZyB2YWx1ZXMsIHNlZSBzZWN0aW9uIDEwIG9mOgorICogIEtPQ0hFUiwgUGF1bCBDLiBUaW1pbmcgYXR0YWNrcyBvbiBpbXBsZW1lbnRhdGlvbnMgb2YgRGlmZmllLUhlbGxtYW4sIFJTQSwKKyAqICBEU1MsIGFuZCBvdGhlciBzeXN0ZW1zLiBJbiA6IEFkdmFuY2VzIGluIENyeXB0b2xvZ3ktQ1JZUFRPJzk2LiBTcHJpbmdlcgorICogIEJlcmxpbiBIZWlkZWxiZXJnLCAxOTk2LiBwLiAxMDQtMTEzLgorICovCitzdGF0aWMgaW50IHJzYV9wcmVwYXJlX2JsaW5kaW5nKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQsIGNvdW50ID0gMDsKKworICAgIGlmKCBjdHgtPlZmLnAgIT0gTlVMTCApCisgICAgeworICAgICAgICAvKiBXZSBhbHJlYWR5IGhhdmUgYmxpbmRpbmcgdmFsdWVzLCBqdXN0IHVwZGF0ZSB0aGVtIGJ5IHNxdWFyaW5nICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5WaSApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5OICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5WZiwgJmN0eC0+VmYsICZjdHgtPlZmICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5WZiwgJmN0eC0+VmYsICZjdHgtPk4gKSApOworCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICAvKiBVbmJsaW5kaW5nIHZhbHVlOiBWZiA9IHJhbmRvbSBudW1iZXIsIGludmVydGlibGUgbW9kIE4gKi8KKyAgICBkbyB7CisgICAgICAgIGlmKCBjb3VudCsrID4gMTAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRCApOworCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZmlsbF9yYW5kb20oICZjdHgtPlZmLCBjdHgtPmxlbiAtIDEsIGZfcm5nLCBwX3JuZyApICk7CisgICAgICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZ2NkKCAmY3R4LT5WaSwgJmN0eC0+VmYsICZjdHgtPk4gKSApOworICAgIH0gd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZjdHgtPlZpLCAxICkgIT0gMCApOworCisgICAgLyogQmxpbmRpbmcgdmFsdWU6IFZpID0gIFZmXigtZSkgbW9kIE4gKi8KKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHgtPlZpLCAmY3R4LT5WZiwgJmN0eC0+TiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9leHBfbW9kKCAmY3R4LT5WaSwgJmN0eC0+VmksICZjdHgtPkUsICZjdHgtPk4sICZjdHgtPlJOICkgKTsKKworCitjbGVhbnVwOgorICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBEbyBhbiBSU0EgcHJpdmF0ZSBrZXkgb3BlcmF0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9wcml2YXRlKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG9sZW47CisgICAgbWJlZHRsc19tcGkgVCwgVDEsIFQyOworCisgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgcHJpdmF0ZSBrZXkgaW5mbywgcHJldmVudCBwb3NzaWJsZSBtaXN1c2UgKi8KKyAgICBpZiggY3R4LT5QLnAgPT0gTlVMTCB8fCBjdHgtPlEucCA9PSBOVUxMIHx8IGN0eC0+RC5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlQgKTsgbWJlZHRsc19tcGlfaW5pdCggJlQxICk7IG1iZWR0bHNfbXBpX2luaXQoICZUMiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmVCwgaW5wdXQsIGN0eC0+bGVuICkgKTsKKyAgICBpZiggbWJlZHRsc19tcGlfY21wX21waSggJlQsICZjdHgtPk4gKSA+PSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKCBmX3JuZyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJsaW5kaW5nCisgICAgICAgICAqIFQgPSBUICogVmkgbW9kIE4KKyAgICAgICAgICovCisgICAgICAgIE1CRURUTFNfTVBJX0NISyggcnNhX3ByZXBhcmVfYmxpbmRpbmcoIGN0eCwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmVCwgJlQsICZjdHgtPlZpICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmVCwgJlQsICZjdHgtPk4gKSApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfTk9fQ1JUKQorICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlQsICZULCAmY3R4LT5ELCAmY3R4LT5OLCAmY3R4LT5STiApICk7CisjZWxzZQorICAgIC8qCisgICAgICogZmFzdGVyIGRlY3J5cHRpb24gdXNpbmcgdGhlIENSVAorICAgICAqCisgICAgICogVDEgPSBpbnB1dCBeIGRQIG1vZCBQCisgICAgICogVDIgPSBpbnB1dCBeIGRRIG1vZCBRCisgICAgICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9leHBfbW9kKCAmVDEsICZULCAmY3R4LT5EUCwgJmN0eC0+UCwgJmN0eC0+UlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlQyLCAmVCwgJmN0eC0+RFEsICZjdHgtPlEsICZjdHgtPlJRICkgKTsKKworICAgIC8qCisgICAgICogVCA9IChUMSAtIFQyKSAqIChRXi0xIG1vZCBQKSBtb2QgUAorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX21waSggJlQsICZUMSwgJlQyICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZUMSwgJlQsICZjdHgtPlFQICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZULCAmVDEsICZjdHgtPlAgKSApOworCisgICAgLyoKKyAgICAgKiBUID0gVDIgKyBUICogUQorICAgICAqLworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJlQxLCAmVCwgJmN0eC0+USApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmVCwgJlQyLCAmVDEgKSApOworI2VuZGlmIC8qIE1CRURUTFNfUlNBX05PX0NSVCAqLworCisgICAgaWYoIGZfcm5nICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVW5ibGluZAorICAgICAgICAgKiBUID0gVCAqIFZmIG1vZCBOCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZULCAmVCwgJmN0eC0+VmYgKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZULCAmVCwgJmN0eC0+TiApICk7CisgICAgfQorCisgICAgb2xlbiA9IGN0eC0+bGVuOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmVCwgb3V0cHV0LCBvbGVuICkgKTsKKworY2xlYW51cDoKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoIG1iZWR0bHNfbXV0ZXhfdW5sb2NrKCAmY3R4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmVCApOyBtYmVkdGxzX21waV9mcmVlKCAmVDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlQyICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRCArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorLyoqCisgKiBHZW5lcmF0ZSBhbmQgYXBwbHkgdGhlIE1HRjEgb3BlcmF0aW9uIChmcm9tIFBLQ1MjMSB2Mi4xKSB0byBhIGJ1ZmZlci4KKyAqCisgKiBccGFyYW0gZHN0ICAgICAgIGJ1ZmZlciB0byBtYXNrCisgKiBccGFyYW0gZGxlbiAgICAgIGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIKKyAqIFxwYXJhbSBzcmMgICAgICAgc291cmNlIG9mIHRoZSBtYXNrIGdlbmVyYXRpb24KKyAqIFxwYXJhbSBzbGVuICAgICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyCisgKiBccGFyYW0gbWRfY3R4ICAgIG1lc3NhZ2UgZGlnZXN0IGNvbnRleHQgdG8gdXNlCisgKi8KK3N0YXRpYyB2b2lkIG1nZl9tYXNrKCB1bnNpZ25lZCBjaGFyICpkc3QsIHNpemVfdCBkbGVuLCB1bnNpZ25lZCBjaGFyICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNsZW4sIG1iZWR0bHNfbWRfY29udGV4dF90ICptZF9jdHggKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWFza1tNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNvdW50ZXJbNF07CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICB1bnNpZ25lZCBpbnQgaGxlbjsKKyAgICBzaXplX3QgaSwgdXNlX2xlbjsKKworICAgIG1lbXNldCggbWFzaywgMCwgTUJFRFRMU19NRF9NQVhfU0laRSApOworICAgIG1lbXNldCggY291bnRlciwgMCwgNCApOworCisgICAgaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2N0eC0+bWRfaW5mbyApOworCisgICAgLyogR2VuZXJhdGUgYW5kIGFwcGx5IGRiTWFzayAqLworICAgIHAgPSBkc3Q7CisKKyAgICB3aGlsZSggZGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgdXNlX2xlbiA9IGhsZW47CisgICAgICAgIGlmKCBkbGVuIDwgaGxlbiApCisgICAgICAgICAgICB1c2VfbGVuID0gZGxlbjsKKworICAgICAgICBtYmVkdGxzX21kX3N0YXJ0cyggbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCBtZF9jdHgsIHNyYywgc2xlbiApOworICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggbWRfY3R4LCBjb3VudGVyLCA0ICk7CisgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCBtZF9jdHgsIG1hc2sgKTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgdXNlX2xlbjsgKytpICkKKyAgICAgICAgICAgICpwKysgXj0gbWFza1tpXTsKKworICAgICAgICBjb3VudGVyWzNdKys7CisKKyAgICAgICAgZGxlbiAtPSB1c2VfbGVuOworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YyMSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEtDUyMxIHYyLjEgUlNBRVMtT0FFUC1FTkNSWVBUIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2VuY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsYWJlbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ICkKK3sKKyAgICBzaXplX3Qgb2xlbjsKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBvdXRwdXQ7CisgICAgdW5zaWduZWQgaW50IGhsZW47CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMjEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGZfcm5nID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIChtYmVkdGxzX21kX3R5cGVfdCkgY3R4LT5oYXNoX2lkICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBvbGVuID0gY3R4LT5sZW47CisgICAgaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKworICAgIC8qIGZpcnN0IGNvbXBhcmlzb24gY2hlY2tzIGZvciBvdmVyZmxvdyAqLworICAgIGlmKCBpbGVuICsgMiAqIGhsZW4gKyAyIDwgaWxlbiB8fCBvbGVuIDwgaWxlbiArIDIgKiBobGVuICsgMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1zZXQoIG91dHB1dCwgMCwgb2xlbiApOworCisgICAgKnArKyA9IDA7CisKKyAgICAvKiBHZW5lcmF0ZSBhIHJhbmRvbSBvY3RldCBzdHJpbmcgc2VlZCAqLworICAgIGlmKCAoIHJldCA9IGZfcm5nKCBwX3JuZywgcCwgaGxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1JOR19GQUlMRUQgKyByZXQgKTsKKworICAgIHAgKz0gaGxlbjsKKworICAgIC8qIENvbnN0cnVjdCBEQiAqLworICAgIG1iZWR0bHNfbWQoIG1kX2luZm8sIGxhYmVsLCBsYWJlbF9sZW4sIHAgKTsKKyAgICBwICs9IGhsZW47CisgICAgcCArPSBvbGVuIC0gMiAqIGhsZW4gLSAyIC0gaWxlbjsKKyAgICAqcCsrID0gMTsKKyAgICBtZW1jcHkoIHAsIGlucHV0LCBpbGVuICk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZtZF9jdHggKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAwICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qIG1hc2tlZERCOiBBcHBseSBkYk1hc2sgdG8gREIgKi8KKyAgICBtZ2ZfbWFzayggb3V0cHV0ICsgaGxlbiArIDEsIG9sZW4gLSBobGVuIC0gMSwgb3V0cHV0ICsgMSwgaGxlbiwKKyAgICAgICAgICAgICAgICZtZF9jdHggKTsKKworICAgIC8qIG1hc2tlZFNlZWQ6IEFwcGx5IHNlZWRNYXNrIHRvIHNlZWQgKi8KKyAgICBtZ2ZfbWFzayggb3V0cHV0ICsgMSwgaGxlbiwgb3V0cHV0ICsgaGxlbiArIDEsIG9sZW4gLSBobGVuIC0gMSwKKyAgICAgICAgICAgICAgICZtZF9jdHggKTsKKworICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgcmV0dXJuKCAoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICAgICAgICAgID8gbWJlZHRsc19yc2FfcHVibGljKCAgY3R4LCBvdXRwdXQsIG91dHB1dCApCisgICAgICAgICAgICA6IG1iZWR0bHNfcnNhX3ByaXZhdGUoIGN0eCwgZl9ybmcsIHBfcm5nLCBvdXRwdXQsIG91dHB1dCApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBLQ1MjMSB2Mi4xIFJTQUVTLVBLQ1MxLVYxXzUtRU5DUllQVCBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIHNpemVfdCBuYl9wYWQsIG9sZW47CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gb3V0cHV0OworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMTUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgLy8gV2UgZG9uJ3QgY2hlY2sgcF9ybmcgYmVjYXVzZSBpdCB3b24ndCBiZSBkZXJlZmVyZW5jZWQgaGVyZQorICAgIGlmKCBmX3JuZyA9PSBOVUxMIHx8IGlucHV0ID09IE5VTEwgfHwgb3V0cHV0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgb2xlbiA9IGN0eC0+bGVuOworCisgICAgLyogZmlyc3QgY29tcGFyaXNvbiBjaGVja3MgZm9yIG92ZXJmbG93ICovCisgICAgaWYoIGlsZW4gKyAxMSA8IGlsZW4gfHwgb2xlbiA8IGlsZW4gKyAxMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBuYl9wYWQgPSBvbGVuIC0gMyAtIGlsZW47CisKKyAgICAqcCsrID0gMDsKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QVUJMSUMgKQorICAgIHsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfUlNBX0NSWVBUOworCisgICAgICAgIHdoaWxlKCBuYl9wYWQtLSA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcm5nX2RsID0gMTAwOworCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmV0ID0gZl9ybmcoIHBfcm5nLCBwLCAxICk7CisgICAgICAgICAgICB9IHdoaWxlKCAqcCA9PSAwICYmIC0tcm5nX2RsICYmIHJldCA9PSAwICk7CisKKyAgICAgICAgICAgIC8qIENoZWNrIGlmIFJORyBmYWlsZWQgdG8gZ2VuZXJhdGUgZGF0YSAqLworICAgICAgICAgICAgaWYoIHJuZ19kbCA9PSAwIHx8IHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVEICsgcmV0ICk7CisKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqcCsrID0gTUJFRFRMU19SU0FfU0lHTjsKKworICAgICAgICB3aGlsZSggbmJfcGFkLS0gPiAwICkKKyAgICAgICAgICAgICpwKysgPSAweEZGOworICAgIH0KKworICAgICpwKysgPSAwOworICAgIG1lbWNweSggcCwgaW5wdXQsIGlsZW4gKTsKKworICAgIHJldHVybiggKCBtb2RlID09IE1CRURUTFNfUlNBX1BVQkxJQyApCisgICAgICAgICAgICA/IG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgb3V0cHV0LCBvdXRwdXQgKQorICAgICAgICAgICAgOiBtYmVkdGxzX3JzYV9wcml2YXRlKCBjdHgsIGZfcm5nLCBwX3JuZywgb3V0cHV0LCBvdXRwdXQgKSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisKKy8qCisgKiBBZGQgdGhlIG1lc3NhZ2UgcGFkZGluZywgdGhlbiBkbyBhbiBSU0Egb3BlcmF0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApCit7CisgICAgc3dpdGNoKCBjdHgtPnBhZGRpbmcgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorICAgICAgICBjYXNlIE1CRURUTFNfUlNBX1BLQ1NfVjE1OgorICAgICAgICAgICAgcmV0dXJuIG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9lbmNyeXB0KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyAgICAgICAgY2FzZSBNQkVEVExTX1JTQV9QS0NTX1YyMToKKyAgICAgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2VuY3J5cHQoIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlsZW4sIGlucHV0LCBvdXRwdXQgKTsKKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQS0NTIzEgdjIuMSBSU0FFUy1PQUVQLURFQ1JZUFQgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZGVjcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCwgc2l6ZV90IGxhYmVsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaWxlbiwgaSwgcGFkX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCBiYWQsIHBhZF9kb25lOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGxoYXNoW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGludCBobGVuOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKworICAgIC8qCisgICAgICogUGFyYW1ldGVycyBzYW5pdHkgY2hlY2tzCisgICAgICovCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMjEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWxlbiA9IGN0eC0+bGVuOworCisgICAgaWYoIGlsZW4gPCAxNiB8fCBpbGVuID4gc2l6ZW9mKCBidWYgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggKG1iZWR0bHNfbWRfdHlwZV90KSBjdHgtPmhhc2hfaWQgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisKKyAgICAvLyBjaGVja2luZyBmb3IgaW50ZWdlciB1bmRlcmZsb3cKKyAgICBpZiggMiAqIGhsZW4gKyAyID4gaWxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIFJTQSBvcGVyYXRpb24KKyAgICAgKi8KKyAgICByZXQgPSAoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICAgICAgICA/IG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgaW5wdXQsIGJ1ZiApCisgICAgICAgICAgOiBtYmVkdGxzX3JzYV9wcml2YXRlKCBjdHgsIGZfcm5nLCBwX3JuZywgaW5wdXQsIGJ1ZiApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qCisgICAgICogVW5tYXNrIGRhdGEgYW5kIGdlbmVyYXRlIGxIYXNoCisgICAgICovCisgICAgbWJlZHRsc19tZF9pbml0KCAmbWRfY3R4ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKworICAgIC8qIEdlbmVyYXRlIGxIYXNoICovCisgICAgbWJlZHRsc19tZCggbWRfaW5mbywgbGFiZWwsIGxhYmVsX2xlbiwgbGhhc2ggKTsKKworICAgIC8qIHNlZWQ6IEFwcGx5IHNlZWRNYXNrIHRvIG1hc2tlZFNlZWQgKi8KKyAgICBtZ2ZfbWFzayggYnVmICsgMSwgaGxlbiwgYnVmICsgaGxlbiArIDEsIGlsZW4gLSBobGVuIC0gMSwKKyAgICAgICAgICAgICAgICZtZF9jdHggKTsKKworICAgIC8qIERCOiBBcHBseSBkYk1hc2sgdG8gbWFza2VkREIgKi8KKyAgICBtZ2ZfbWFzayggYnVmICsgaGxlbiArIDEsIGlsZW4gLSBobGVuIC0gMSwgYnVmICsgMSwgaGxlbiwKKyAgICAgICAgICAgICAgICZtZF9jdHggKTsKKworICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBjb250ZW50cywgaW4gImNvbnN0YW50LXRpbWUiCisgICAgICovCisgICAgcCA9IGJ1ZjsKKyAgICBiYWQgPSAwOworCisgICAgYmFkIHw9ICpwKys7IC8qIEZpcnN0IGJ5dGUgbXVzdCBiZSAwICovCisKKyAgICBwICs9IGhsZW47IC8qIFNraXAgc2VlZCAqLworCisgICAgLyogQ2hlY2sgbEhhc2ggKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgaGxlbjsgaSsrICkKKyAgICAgICAgYmFkIHw9IGxoYXNoW2ldIF4gKnArKzsKKworICAgIC8qIEdldCB6ZXJvLXBhZGRpbmcgbGVuLCBidXQgYWx3YXlzIHJlYWQgdGlsbCBlbmQgb2YgYnVmZmVyCisgICAgICogKG1pbnVzIG9uZSwgZm9yIHRoZSAwMSBieXRlKSAqLworICAgIHBhZF9sZW4gPSAwOworICAgIHBhZF9kb25lID0gMDsKKyAgICBmb3IoIGkgPSAwOyBpIDwgaWxlbiAtIDIgKiBobGVuIC0gMjsgaSsrICkKKyAgICB7CisgICAgICAgIHBhZF9kb25lIHw9IHBbaV07CisgICAgICAgIHBhZF9sZW4gKz0gKChwYWRfZG9uZSB8ICh1bnNpZ25lZCBjaGFyKS1wYWRfZG9uZSkgPj4gNykgXiAxOworICAgIH0KKworICAgIHAgKz0gcGFkX2xlbjsKKyAgICBiYWQgfD0gKnArKyBeIDB4MDE7CisKKyAgICAvKgorICAgICAqIFRoZSBvbmx5IGluZm9ybWF0aW9uICJsZWFrZWQiIGlzIHdoZXRoZXIgdGhlIHBhZGRpbmcgd2FzIGNvcnJlY3Qgb3Igbm90CisgICAgICogKGVnLCBubyBkYXRhIGlzIGNvcGllZCBpZiBpdCB3YXMgbm90IGNvcnJlY3QpLiBUaGlzIG1lZXRzIHRoZQorICAgICAqIHJlY29tbWVuZGF0aW9ucyBpbiBQS0NTIzEgdjIuMjogYW4gb3Bwb25lbnQgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgICAgKiB0aGUgZGlmZmVyZW50IGVycm9yIGNvbmRpdGlvbnMuCisgICAgICovCisgICAgaWYoIGJhZCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisKKyAgICBpZiggaWxlbiAtICggcCAtIGJ1ZiApID4gb3V0cHV0X21heF9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9PVVRQVVRfVE9PX0xBUkdFICk7CisKKyAgICAqb2xlbiA9IGlsZW4gLSAocCAtIGJ1Zik7CisgICAgbWVtY3B5KCBvdXRwdXQsIHAsICpvbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YyMSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEtDUyMxIHYyLjEgUlNBRVMtUEtDUzEtVjFfNS1ERUNSWVBUIGZ1bmN0aW9uCisgKi8KK2ludCBtYmVkdGxzX3JzYV9yc2Flc19wa2NzMV92MTVfZGVjcnlwdCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0cHV0X21heF9sZW4pCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaWxlbiwgcGFkX2NvdW50ID0gMCwgaTsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCBiYWQsIHBhZF9kb25lID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QUklWQVRFICYmIGN0eC0+cGFkZGluZyAhPSBNQkVEVExTX1JTQV9QS0NTX1YxNSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpbGVuID0gY3R4LT5sZW47CisKKyAgICBpZiggaWxlbiA8IDE2IHx8IGlsZW4gPiBzaXplb2YoIGJ1ZiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHJldCA9ICggbW9kZSA9PSBNQkVEVExTX1JTQV9QVUJMSUMgKQorICAgICAgICAgID8gbWJlZHRsc19yc2FfcHVibGljKCAgY3R4LCBpbnB1dCwgYnVmICkKKyAgICAgICAgICA6IG1iZWR0bHNfcnNhX3ByaXZhdGUoIGN0eCwgZl9ybmcsIHBfcm5nLCBpbnB1dCwgYnVmICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcCA9IGJ1ZjsKKyAgICBiYWQgPSAwOworCisgICAgLyoKKyAgICAgKiBDaGVjayBhbmQgZ2V0IHBhZGRpbmcgbGVuIGluICJjb25zdGFudC10aW1lIgorICAgICAqLworICAgIGJhZCB8PSAqcCsrOyAvKiBGaXJzdCBieXRlIG11c3QgYmUgMCAqLworCisgICAgLyogVGhpcyB0ZXN0IGRvZXMgbm90IGRlcGVuZCBvbiBzZWNyZXQgZGF0YSAqLworICAgIGlmKCBtb2RlID09IE1CRURUTFNfUlNBX1BSSVZBVEUgKQorICAgIHsKKyAgICAgICAgYmFkIHw9ICpwKysgXiBNQkVEVExTX1JTQV9DUllQVDsKKworICAgICAgICAvKiBHZXQgcGFkZGluZyBsZW4sIGJ1dCBhbHdheXMgcmVhZCB0aWxsIGVuZCBvZiBidWZmZXIKKyAgICAgICAgICogKG1pbnVzIG9uZSwgZm9yIHRoZSAwMCBieXRlKSAqLworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgaWxlbiAtIDM7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZF9kb25lICB8PSAoKHBbaV0gfCAodW5zaWduZWQgY2hhciktcFtpXSkgPj4gNykgXiAxOworICAgICAgICAgICAgcGFkX2NvdW50ICs9ICgocGFkX2RvbmUgfCAodW5zaWduZWQgY2hhciktcGFkX2RvbmUpID4+IDcpIF4gMTsKKyAgICAgICAgfQorCisgICAgICAgIHAgKz0gcGFkX2NvdW50OworICAgICAgICBiYWQgfD0gKnArKzsgLyogTXVzdCBiZSB6ZXJvICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhZCB8PSAqcCsrIF4gTUJFRFRMU19SU0FfU0lHTjsKKworICAgICAgICAvKiBHZXQgcGFkZGluZyBsZW4sIGJ1dCBhbHdheXMgcmVhZCB0aWxsIGVuZCBvZiBidWZmZXIKKyAgICAgICAgICogKG1pbnVzIG9uZSwgZm9yIHRoZSAwMCBieXRlKSAqLworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgaWxlbiAtIDM7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZF9kb25lIHw9ICggcFtpXSAhPSAweEZGICk7CisgICAgICAgICAgICBwYWRfY291bnQgKz0gKCBwYWRfZG9uZSA9PSAwICk7CisgICAgICAgIH0KKworICAgICAgICBwICs9IHBhZF9jb3VudDsKKyAgICAgICAgYmFkIHw9ICpwKys7IC8qIE11c3QgYmUgemVybyAqLworICAgIH0KKworICAgIGJhZCB8PSAoIHBhZF9jb3VudCA8IDggKTsKKworICAgIGlmKCBiYWQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgKTsKKworICAgIGlmKCBpbGVuIC0gKCBwIC0gYnVmICkgPiBvdXRwdXRfbWF4X2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UgKTsKKworICAgICpvbGVuID0gaWxlbiAtIChwIC0gYnVmKTsKKyAgICBtZW1jcHkoIG91dHB1dCwgcCwgKm9sZW4gKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisKKy8qCisgKiBEbyBhbiBSU0Egb3BlcmF0aW9uLCB0aGVuIHJlbW92ZSB0aGUgbWVzc2FnZSBwYWRkaW5nCisgKi8KK2ludCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbikKK3sKKyAgICBzd2l0Y2goIGN0eC0+cGFkZGluZyApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisgICAgICAgIGNhc2UgTUJFRFRMU19SU0FfUEtDU19WMTU6CisgICAgICAgICAgICByZXR1cm4gbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQoIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLCBvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCwgb3V0cHV0X21heF9sZW4gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyAgICAgICAgY2FzZSBNQkVEVExTX1JTQV9QS0NTX1YyMToKKyAgICAgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9yc2Flc19vYWVwX2RlY3J5cHQoIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZW4sIGlucHV0LCBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X21heF9sZW4gKTsKKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQS0NTIzEgdjIuMSBSU0FTU0EtUFNTLVNJR04gZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3Nfc2lnbiggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIHNpemVfdCBvbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzaWc7CisgICAgdW5zaWduZWQgY2hhciBzYWx0W01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGludCBzbGVuLCBobGVuLCBvZmZzZXQgPSAwOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG1zYjsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHg7CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QUklWQVRFICYmIGN0eC0+cGFkZGluZyAhPSBNQkVEVExTX1JTQV9QS0NTX1YyMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggZl9ybmcgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBvbGVuID0gY3R4LT5sZW47CisKKyAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICAvKiBHYXRoZXIgbGVuZ3RoIG9mIGhhc2ggdG8gc2lnbiAqLworICAgICAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBoYXNobGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworICAgIH0KKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCAobWJlZHRsc19tZF90eXBlX3QpIGN0eC0+aGFzaF9pZCApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICBzbGVuID0gaGxlbjsKKworICAgIGlmKCBvbGVuIDwgaGxlbiArIHNsZW4gKyAyICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbXNldCggc2lnLCAwLCBvbGVuICk7CisKKyAgICAvKiBHZW5lcmF0ZSBzYWx0IG9mIGxlbmd0aCBzbGVuICovCisgICAgaWYoICggcmV0ID0gZl9ybmcoIHBfcm5nLCBzYWx0LCBzbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRCArIHJldCApOworCisgICAgLyogTm90ZTogRU1TQS1QU1MgZW5jb2RpbmcgaXMgb3ZlciB0aGUgbGVuZ3RoIG9mIE4gLSAxIGJpdHMgKi8KKyAgICBtc2IgPSBtYmVkdGxzX21waV9iaXRsZW4oICZjdHgtPk4gKSAtIDE7CisgICAgcCArPSBvbGVuIC0gaGxlbiAqIDIgLSAyOworICAgICpwKysgPSAweDAxOworICAgIG1lbWNweSggcCwgc2FsdCwgc2xlbiApOworICAgIHAgKz0gc2xlbjsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyogR2VuZXJhdGUgSCA9IEhhc2goIE0nICkgKi8KKyAgICBtYmVkdGxzX21kX3N0YXJ0cyggJm1kX2N0eCApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBwLCA4ICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIGhhc2gsIGhhc2hsZW4gKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgc2FsdCwgc2xlbiApOworICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmbWRfY3R4LCBwICk7CisKKyAgICAvKiBDb21wZW5zYXRlIGZvciBib3VuZGFyeSBjb25kaXRpb24gd2hlbiBhcHBseWluZyBtYXNrICovCisgICAgaWYoIG1zYiAlIDggPT0gMCApCisgICAgICAgIG9mZnNldCA9IDE7CisKKyAgICAvKiBtYXNrZWREQjogQXBwbHkgZGJNYXNrIHRvIERCICovCisgICAgbWdmX21hc2soIHNpZyArIG9mZnNldCwgb2xlbiAtIGhsZW4gLSAxIC0gb2Zmc2V0LCBwLCBobGVuLCAmbWRfY3R4ICk7CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIG1zYiA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJmN0eC0+TiApIC0gMTsKKyAgICBzaWdbMF0gJj0gMHhGRiA+PiAoIG9sZW4gKiA4IC0gbXNiICk7CisKKyAgICBwICs9IGhsZW47CisgICAgKnArKyA9IDB4QkM7CisKKyAgICByZXR1cm4oICggbW9kZSA9PSBNQkVEVExTX1JTQV9QVUJMSUMgKQorICAgICAgICAgICAgPyBtYmVkdGxzX3JzYV9wdWJsaWMoICBjdHgsIHNpZywgc2lnICkKKyAgICAgICAgICAgIDogbWJlZHRsc19yc2FfcHJpdmF0ZSggY3R4LCBmX3JuZywgcF9ybmcsIHNpZywgc2lnICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YyMSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YxNSkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEtDUyMxIHYyLjEgUlNBU1NBLVBLQ1MxLVYxXzUtU0lHTiBmdW5jdGlvbgorICovCisvKgorICogRG8gYW4gUlNBIG9wZXJhdGlvbiB0byBzaWduIHRoZSBtZXNzYWdlIGRpZ2VzdAorICovCitpbnQgbWJlZHRsc19yc2FfcnNhc3NhX3BrY3MxX3YxNV9zaWduKCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZyApCit7CisgICAgc2l6ZV90IG5iX3BhZCwgb2xlbiwgb2lkX3NpemUgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzaWc7CisgICAgY29uc3QgY2hhciAqb2lkID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpzaWdfdHJ5ID0gTlVMTCwgKnZlcmlmID0gTlVMTDsKKyAgICBzaXplX3QgaTsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZmY7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkaWZmX25vX29wdGltaXplOworICAgIGludCByZXQ7CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QUklWQVRFICYmIGN0eC0+cGFkZGluZyAhPSBNQkVEVExTX1JTQV9QS0NTX1YxNSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBvbGVuID0gY3R4LT5sZW47CisgICAgbmJfcGFkID0gb2xlbiAtIDM7CisKKyAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfbWQoIG1kX2FsZywgJm9pZCwgJm9pZF9zaXplICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgICAgIG5iX3BhZCAtPSAxMCArIG9pZF9zaXplOworCisgICAgICAgIGhhc2hsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisgICAgfQorCisgICAgbmJfcGFkIC09IGhhc2hsZW47CisKKyAgICBpZiggKCBuYl9wYWQgPCA4ICkgfHwgKCBuYl9wYWQgPiBvbGVuICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgKnArKyA9IDA7CisgICAgKnArKyA9IE1CRURUTFNfUlNBX1NJR047CisgICAgbWVtc2V0KCBwLCAweEZGLCBuYl9wYWQgKTsKKyAgICBwICs9IG5iX3BhZDsKKyAgICAqcCsrID0gMDsKKworICAgIGlmKCBtZF9hbGcgPT0gTUJFRFRMU19NRF9OT05FICkKKyAgICB7CisgICAgICAgIG1lbWNweSggcCwgaGFzaCwgaGFzaGxlbiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBEaWdlc3RJbmZvIDo6PSBTRVFVRU5DRSB7CisgICAgICAgICAqICAgZGlnZXN0QWxnb3JpdGhtIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgICAgICAqICAgZGlnZXN0IERpZ2VzdCB9CisgICAgICAgICAqCisgICAgICAgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgICAgICoKKyAgICAgICAgICogRGlnZXN0IDo6PSBPQ1RFVCBTVFJJTkcKKyAgICAgICAgICovCisgICAgICAgICpwKysgPSBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQ7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgKCAweDA4ICsgb2lkX3NpemUgKyBoYXNobGVuICk7CisgICAgICAgICpwKysgPSBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQ7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgKCAweDA0ICsgb2lkX3NpemUgKTsKKyAgICAgICAgKnArKyA9IE1CRURUTFNfQVNOMV9PSUQ7CisgICAgICAgICpwKysgPSBvaWRfc2l6ZSAmIDB4RkY7CisgICAgICAgIG1lbWNweSggcCwgb2lkLCBvaWRfc2l6ZSApOworICAgICAgICBwICs9IG9pZF9zaXplOworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX05VTEw7CisgICAgICAgICpwKysgPSAweDAwOworICAgICAgICAqcCsrID0gTUJFRFRMU19BU04xX09DVEVUX1NUUklORzsKKyAgICAgICAgKnArKyA9IGhhc2hsZW47CisgICAgICAgIG1lbWNweSggcCwgaGFzaCwgaGFzaGxlbiApOworICAgIH0KKworICAgIGlmKCBtb2RlID09IE1CRURUTFNfUlNBX1BVQkxJQyApCisgICAgICAgIHJldHVybiggbWJlZHRsc19yc2FfcHVibGljKCAgY3R4LCBzaWcsIHNpZyApICk7CisKKyAgICAvKgorICAgICAqIEluIG9yZGVyIHRvIHByZXZlbnQgTGVuc3RyYSdzIGF0dGFjaywgbWFrZSB0aGUgc2lnbmF0dXJlIGluIGEKKyAgICAgKiB0ZW1wb3JhcnkgYnVmZmVyIGFuZCBjaGVjayBpdCBiZWZvcmUgcmV0dXJuaW5nIGl0LgorICAgICAqLworICAgIHNpZ190cnkgPSBtYmVkdGxzX2NhbGxvYyggMSwgY3R4LT5sZW4gKTsKKyAgICBpZiggc2lnX3RyeSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfQUxMT0NfRkFJTEVEICk7CisKKyAgICB2ZXJpZiAgID0gbWJlZHRsc19jYWxsb2MoIDEsIGN0eC0+bGVuICk7CisgICAgaWYoIHZlcmlmID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzaWdfdHJ5ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfTVBJX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19yc2FfcHJpdmF0ZSggY3R4LCBmX3JuZywgcF9ybmcsIHNpZywgc2lnX3RyeSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX3JzYV9wdWJsaWMoIGN0eCwgc2lnX3RyeSwgdmVyaWYgKSApOworCisgICAgLyogQ29tcGFyZSBpbiBjb25zdGFudCB0aW1lIGp1c3QgaW4gY2FzZSAqLworICAgIGZvciggZGlmZiA9IDAsIGkgPSAwOyBpIDwgY3R4LT5sZW47IGkrKyApCisgICAgICAgIGRpZmYgfD0gdmVyaWZbaV0gXiBzaWdbaV07CisgICAgZGlmZl9ub19vcHRpbWl6ZSA9IGRpZmY7CisKKyAgICBpZiggZGlmZl9ub19vcHRpbWl6ZSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1JTQV9QUklWQVRFX0ZBSUxFRDsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIG1lbWNweSggc2lnLCBzaWdfdHJ5LCBjdHgtPmxlbiApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfZnJlZSggc2lnX3RyeSApOworICAgIG1iZWR0bHNfZnJlZSggdmVyaWYgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KKworLyoKKyAqIERvIGFuIFJTQSBvcGVyYXRpb24gdG8gc2lnbiB0aGUgbWVzc2FnZSBkaWdlc3QKKyAqLworaW50IG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZyApCit7CisgICAgc3dpdGNoKCBjdHgtPnBhZGRpbmcgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorICAgICAgICBjYXNlIE1CRURUTFNfUlNBX1BLQ1NfVjE1OgorICAgICAgICAgICAgcmV0dXJuIG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfc2lnbiggY3R4LCBmX3JuZywgcF9ybmcsIG1vZGUsIG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNobGVuLCBoYXNoLCBzaWcgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKyAgICAgICAgY2FzZSBNQkVEVExTX1JTQV9QS0NTX1YyMToKKyAgICAgICAgICAgIHJldHVybiBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3NpZ24oIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGxlbiwgaGFzaCwgc2lnICk7CisjZW5kaWYKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1MxX1YyMSkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEtDUyMxIHYyLjEgUlNBU1NBLVBTUy1WRVJJRlkgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dCggbWJlZHRsc19yc2FfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZ2YxX2hhc2hfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3NhbHRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgc2lnbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciB6ZXJvc1s4XTsKKyAgICB1bnNpZ25lZCBpbnQgaGxlbjsKKyAgICBzaXplX3Qgc2xlbiwgbXNiOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1JTQV9QUklWQVRFICYmIGN0eC0+cGFkZGluZyAhPSBNQkVEVExTX1JTQV9QS0NTX1YyMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBzaWdsZW4gPSBjdHgtPmxlbjsKKworICAgIGlmKCBzaWdsZW4gPCAxNiB8fCBzaWdsZW4gPiBzaXplb2YoIGJ1ZiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHJldCA9ICggbW9kZSA9PSBNQkVEVExTX1JTQV9QVUJMSUMgKQorICAgICAgICAgID8gbWJlZHRsc19yc2FfcHVibGljKCAgY3R4LCBzaWcsIGJ1ZiApCisgICAgICAgICAgOiBtYmVkdGxzX3JzYV9wcml2YXRlKCBjdHgsIGZfcm5nLCBwX3JuZywgc2lnLCBidWYgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBwID0gYnVmOworCisgICAgaWYoIGJ1ZltzaWdsZW4gLSAxXSAhPSAweEJDICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisKKyAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICAvKiBHYXRoZXIgbGVuZ3RoIG9mIGhhc2ggdG8gc2lnbiAqLworICAgICAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBoYXNobGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworICAgIH0KKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZ2YxX2hhc2hfaWQgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7CisgICAgc2xlbiA9IHNpZ2xlbiAtIGhsZW4gLSAxOyAvKiBDdXJyZW50bHkgbGVuZ3RoIG9mIHNhbHQgKyBwYWRkaW5nICovCisKKyAgICBtZW1zZXQoIHplcm9zLCAwLCA4ICk7CisKKyAgICAvKgorICAgICAqIE5vdGU6IEVNU0EtUFNTIHZlcmlmaWNhdGlvbiBpcyBvdmVyIHRoZSBsZW5ndGggb2YgTiAtIDEgYml0cworICAgICAqLworICAgIG1zYiA9IG1iZWR0bHNfbXBpX2JpdGxlbiggJmN0eC0+TiApIC0gMTsKKworICAgIC8qIENvbXBlbnNhdGUgZm9yIGJvdW5kYXJ5IGNvbmRpdGlvbiB3aGVuIGFwcGx5aW5nIG1hc2sgKi8KKyAgICBpZiggbXNiICUgOCA9PSAwICkKKyAgICB7CisgICAgICAgIHArKzsKKyAgICAgICAgc2lnbGVuIC09IDE7CisgICAgfQorICAgIGlmKCBidWZbMF0gPj4gKCA4IC0gc2lnbGVuICogOCArIG1zYiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgbWdmX21hc2soIHAsIHNpZ2xlbiAtIGhsZW4gLSAxLCBwICsgc2lnbGVuIC0gaGxlbiAtIDEsIGhsZW4sICZtZF9jdHggKTsKKworICAgIGJ1ZlswXSAmPSAweEZGID4+ICggc2lnbGVuICogOCAtIG1zYiApOworCisgICAgd2hpbGUoIHAgPCBidWYgKyBzaWdsZW4gJiYgKnAgPT0gMCApCisgICAgICAgIHArKzsKKworICAgIGlmKCBwID09IGJ1ZiArIHNpZ2xlbiB8fAorICAgICAgICAqcCsrICE9IDB4MDEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORyApOworICAgIH0KKworICAgIC8qIEFjdHVhbCBzYWx0IGxlbiAqLworICAgIHNsZW4gLT0gcCAtIGJ1ZjsKKworICAgIGlmKCBleHBlY3RlZF9zYWx0X2xlbiAhPSBNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlkgJiYKKyAgICAgICAgc2xlbiAhPSAoc2l6ZV90KSBleHBlY3RlZF9zYWx0X2xlbiApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBHZW5lcmF0ZSBIID0gSGFzaCggTScgKQorICAgICAqLworICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmbWRfY3R4ICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIHplcm9zLCA4ICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIGhhc2gsIGhhc2hsZW4gKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgcCwgc2xlbiApOworICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmbWRfY3R4LCByZXN1bHQgKTsKKworICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgaWYoIG1lbWNtcCggcCArIHNsZW4sIHJlc3VsdCwgaGxlbiApID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKK30KKworLyoKKyAqIFNpbXBsaWZpZWQgUEtDUyMxIHYyLjEgUlNBU1NBLVBTUy1WRVJJRlkgZnVuY3Rpb24KKyAqLworaW50IG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnICkKK3sKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZ2YxX2hhc2hfaWQgPSAoIGN0eC0+aGFzaF9pZCAhPSBNQkVEVExTX01EX05PTkUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChtYmVkdGxzX21kX3R5cGVfdCkgY3R4LT5oYXNoX2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWRfYWxnOworCisgICAgcmV0dXJuKCBtYmVkdGxzX3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQoIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfYWxnLCBoYXNobGVuLCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdmMV9oYXNoX2lkLCBNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcgKSApOworCit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBLQ1MjMSB2Mi4xIFJTQVNTQS1QS0NTMS12MV81LVZFUklGWSBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc19yc2FfcnNhc3NhX3BrY3MxX3YxNV92ZXJpZnkoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiwgc2lnbGVuLCBhc24xX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1zZ19tZF9hbGc7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19hc24xX2J1ZiBvaWQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19NUElfTUFYX1NJWkVdOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFJJVkFURSAmJiBjdHgtPnBhZGRpbmcgIT0gTUJFRFRMU19SU0FfUEtDU19WMTUgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQSApOworCisgICAgc2lnbGVuID0gY3R4LT5sZW47CisKKyAgICBpZiggc2lnbGVuIDwgMTYgfHwgc2lnbGVuID4gc2l6ZW9mKCBidWYgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXQgPSAoIG1vZGUgPT0gTUJFRFRMU19SU0FfUFVCTElDICkKKyAgICAgICAgICA/IG1iZWR0bHNfcnNhX3B1YmxpYyggIGN0eCwgc2lnLCBidWYgKQorICAgICAgICAgIDogbWJlZHRsc19yc2FfcHJpdmF0ZSggY3R4LCBmX3JuZywgcF9ybmcsIHNpZywgYnVmICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcCA9IGJ1ZjsKKworICAgIGlmKCAqcCsrICE9IDAgfHwgKnArKyAhPSBNQkVEVExTX1JTQV9TSUdOICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisKKyAgICB3aGlsZSggKnAgIT0gMCApCisgICAgeworICAgICAgICBpZiggcCA+PSBidWYgKyBzaWdsZW4gLSAxIHx8ICpwICE9IDB4RkYgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HICk7CisgICAgICAgIHArKzsKKyAgICB9CisgICAgcCsrOworCisgICAgbGVuID0gc2lnbGVuIC0gKCBwIC0gYnVmICk7CisKKyAgICBpZiggbGVuID09IGhhc2hsZW4gJiYgbWRfYWxnID09IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICBpZiggbWVtY21wKCBwLCBoYXNoLCBoYXNobGVuICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworICAgIH0KKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBoYXNobGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworCisgICAgZW5kID0gcCArIGxlbjsKKworICAgIC8qCisgICAgICogUGFyc2UgdGhlIEFTTi4xIHN0cnVjdHVyZSBpbnNpZGUgdGhlIFBLQ1MjMSB2MS41IHN0cnVjdHVyZQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmYXNuMV9sZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggYXNuMV9sZW4gKyAyICE9IGxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmYXNuMV9sZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggYXNuMV9sZW4gKyA2ICsgaGFzaGxlbiAhPSBsZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJm9pZC5sZW4sIE1CRURUTFNfQVNOMV9PSUQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBvaWQucCA9IHA7CisgICAgcCArPSBvaWQubGVuOworCisgICAgaWYoIG1iZWR0bHNfb2lkX2dldF9tZF9hbGcoICZvaWQsICZtc2dfbWRfYWxnICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIGlmKCBtZF9hbGcgIT0gbXNnX21kX2FsZyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIC8qCisgICAgICogYXNzdW1lIHRoZSBhbGdvcml0aG0gcGFyYW1ldGVycyBtdXN0IGJlIE5VTEwKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmFzbjFfbGVuLCBNQkVEVExTX0FTTjFfTlVMTCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmYXNuMV9sZW4sIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVEICk7CisKKyAgICBpZiggYXNuMV9sZW4gIT0gaGFzaGxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQgKTsKKworICAgIGlmKCBtZW1jbXAoIHAsIGhhc2gsIGhhc2hsZW4gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgcCArPSBoYXNobGVuOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KKworLyoKKyAqIERvIGFuIFJTQSBvcGVyYXRpb24gYW5kIGNoZWNrIHRoZSBtZXNzYWdlIGRpZ2VzdAorICovCitpbnQgbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCBtYmVkdGxzX3JzYV9jb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nLAorICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZyApCit7CisgICAgc3dpdGNoKCBjdHgtPnBhZGRpbmcgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorICAgICAgICBjYXNlIE1CRURUTFNfUlNBX1BLQ1NfVjE1OgorICAgICAgICAgICAgcmV0dXJuIG1iZWR0bHNfcnNhX3JzYXNzYV9wa2NzMV92MTVfdmVyaWZ5KCBjdHgsIGZfcm5nLCBwX3JuZywgbW9kZSwgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGxlbiwgaGFzaCwgc2lnICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMjEpCisgICAgICAgIGNhc2UgTUJFRFRMU19SU0FfUEtDU19WMjE6CisgICAgICAgICAgICByZXR1cm4gbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnkoIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNobGVuLCBoYXNoLCBzaWcgKTsKKyNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcgKTsKKyAgICB9Cit9CisKKy8qCisgKiBDb3B5IHRoZSBjb21wb25lbnRzIG9mIGFuIFJTQSBrZXkKKyAqLworaW50IG1iZWR0bHNfcnNhX2NvcHkoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmRzdCwgY29uc3QgbWJlZHRsc19yc2FfY29udGV4dCAqc3JjICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgZHN0LT52ZXIgPSBzcmMtPnZlcjsKKyAgICBkc3QtPmxlbiA9IHNyYy0+bGVuOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5OLCAmc3JjLT5OICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPkUsICZzcmMtPkUgKSApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5ELCAmc3JjLT5EICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlAsICZzcmMtPlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+USwgJnNyYy0+USApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5EUCwgJnNyYy0+RFAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+RFEsICZzcmMtPkRRICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlFQLCAmc3JjLT5RUCApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlJOLCAmc3JjLT5STiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9jb3B5KCAmZHN0LT5SUCwgJnNyYy0+UlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+UlEsICZzcmMtPlJRICkgKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfY29weSggJmRzdC0+VmksICZzcmMtPlZpICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2NvcHkoICZkc3QtPlZmLCAmc3JjLT5WZiApICk7CisKKyAgICBkc3QtPnBhZGRpbmcgPSBzcmMtPnBhZGRpbmc7CisgICAgZHN0LT5oYXNoX2lkID0gc3JjLT5oYXNoX2lkOworCitjbGVhbnVwOgorICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcnNhX2ZyZWUoIGRzdCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIEZyZWUgdGhlIGNvbXBvbmVudHMgb2YgYW4gUlNBIGtleQorICovCit2b2lkIG1iZWR0bHNfcnNhX2ZyZWUoIG1iZWR0bHNfcnNhX2NvbnRleHQgKmN0eCApCit7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+VmkgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+VmYgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5SUSApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5SUCApOyBtYmVkdGxzX21waV9mcmVlKCAmY3R4LT5STiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPlFQICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPkRRICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPkRQICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+USAgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+UCAgKTsgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+RCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPkUgICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZjdHgtPk4gICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9mcmVlKCAmY3R4LT5tdXRleCApOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisKKy8qCisgKiBFeGFtcGxlIFJTQS0xMDI0IGtleXBhaXIsIGZvciB0ZXN0IHB1cnBvc2VzCisgKi8KKyNkZWZpbmUgS0VZX0xFTiAxMjgKKworI2RlZmluZSBSU0FfTiAgICI5MjkyNzU4NDUzMDYzRDgwM0RENjAzRDVFNzc3RDc4OCIgXAorICAgICAgICAgICAgICAgICI4RUQxRDVCRjM1Nzg2MTkwRkEyRjIzRUJDMDg0OEFFQSIgXAorICAgICAgICAgICAgICAgICJEREE5MkNBNkMzRDgwQjMyQzREMTA5QkUwRjM2RDZBRSIgXAorICAgICAgICAgICAgICAgICI3MTMwQjlDRUQ3QUNERjU0Q0ZDNzU1NUFDMTRFRUJBQiIgXAorICAgICAgICAgICAgICAgICI5M0E4OTgxM0ZCRjNDNEY4MDY2RDJEODAwRjdDMzhBOCIgXAorICAgICAgICAgICAgICAgICIxQUUzMTk0MjkxNzQwM0ZGNDk0NkIwQTgzRDNEM0UwNSIgXAorICAgICAgICAgICAgICAgICJFRTU3QzZGNUY1NjA2RkI1RDRCQzZDRDM0RUUwODAxQSIgXAorICAgICAgICAgICAgICAgICI1RTk0QkI3N0IwNzUwNzIzM0EwQkM3QkFDOEY5MEY3OSIKKworI2RlZmluZSBSU0FfRSAgICIxMDAwMSIKKworI2RlZmluZSBSU0FfRCAgICIyNEJGNjE4NTQ2ODc4NkZERDMwMzA4M0QyNUU2NEVGQyIgXAorICAgICAgICAgICAgICAgICI2NkNBNDcyQkM0NEQyNTMxMDJGOEI0QTlEM0JGQTc1MCIgXAorICAgICAgICAgICAgICAgICI5MTM4NkMwMDc3OTM3RkUzM0ZBMzI1MkQyODg1NTgzNyIgXAorICAgICAgICAgICAgICAgICJBRTFCNDg0QThBOUE0NUY3RUU4QzBDNjM0Rjk5RThDRCIgXAorICAgICAgICAgICAgICAgICJERjc5QzVDRTA3RUU3MkM3RjEyMzE0MjE5ODE2NDIzNCIgXAorICAgICAgICAgICAgICAgICJDQUJCNzI0Q0Y3OEI4MTczQjlGODgwRkM4NjMyMjQwNyIgXAorICAgICAgICAgICAgICAgICJBRjFGRURGRERFMkJFQjY3NENBMTVGM0U4MUExNTIxRSIgXAorICAgICAgICAgICAgICAgICIwNzE1MTNBMUU4NUI1REZBMDMxRjIxRUNBRTkxQTM0RCIKKworI2RlZmluZSBSU0FfUCAgICJDMzZEMEVCN0ZDRDI4NTIyM0NGQjVBQUJBNUJEQTNEOCIgXAorICAgICAgICAgICAgICAgICIyQzAxQ0FEMTlFQTQ4NEE4N0VBNDM3NzYzN0U3NTUwMCIgXAorICAgICAgICAgICAgICAgICJGQ0IyMDA1QzVDN0RENkVDNEFDMDIzQ0RBMjg1RDc5NiIgXAorICAgICAgICAgICAgICAgICJDM0Q5RTc1RTFFRkM0MjQ4OEJCNEYxRDEzQUMzMEE1NyIKKworI2RlZmluZSBSU0FfUSAgICJDMDAwREY1MUE3Qzc3QUU4RDdDNzM3MEMxRkY1NUI2OSIgXAorICAgICAgICAgICAgICAgICJFMjExQzJCOUU1REIxRUQwQkY2MUQwRDk4OTk2MjBGNCIgXAorICAgICAgICAgICAgICAgICI5MTBFNDE2ODM4N0UzQzMwQUExRTAwQzMzOUE3OTUwOCIgXAorICAgICAgICAgICAgICAgICI4NDUyREQ5NkE5QTVFQTVEOURDQTY4REE2MzYwMzJBRiIKKworI2RlZmluZSBSU0FfRFAgICJDMUFDRjU2NzU2NDI3NEZCMDdBMEJCQUQ1RDI2RTI5OCIgXAorICAgICAgICAgICAgICAgICIzQzk0RDIyMjg4QUNENzYzRkQ4RTU2MDBFRDRBNzAyRCIgXAorICAgICAgICAgICAgICAgICJGODQxOThBNUYwNkMyRTcyMjM2QUU0OTBDOTNGMDdGOCIgXAorICAgICAgICAgICAgICAgICIzQ0M1NTlDRDI3QkMyRDFDQTQ4ODgxMTczMEJCNTcyNSIKKworI2RlZmluZSBSU0FfRFEgICI0OTU5Q0JGNkY4RkVGNzUwQUVFNjk3N0MxNTU1NzlDNyIgXAorICAgICAgICAgICAgICAgICJEOEFBRUE1Njc0OUVBMjg2MjMyNzJFNEY3RDA1OTJBRiIgXAorICAgICAgICAgICAgICAgICI3QzFGMTMxM0NBQzk0NzFCNUM1MjNCRkU1OTJGNTE3QiIgXAorICAgICAgICAgICAgICAgICI0MDdBMUJENzZDMTY0QjkzREEyRDMyQTM4M0U1ODM1NyIKKworI2RlZmluZSBSU0FfUVAgICI5QUU3RkJDOTk1NDY0MzJERjcxODk2RkMyMzlFQURBRSIgXAorICAgICAgICAgICAgICAgICJGMzhEMThEMkIyRjBFMkREMjc1QUE5NzdFMkJGNDQxMSIgXAorICAgICAgICAgICAgICAgICJGNUEzQjJBNUQzMzYwNUFFQkJDQ0JBN0ZFQjlGMkQyRiIgXAorICAgICAgICAgICAgICAgICJBNzQyMDZDRUMxNjlENzRCRjVBOEM1MEQ2RjQ4RUEwOCIKKworI2RlZmluZSBQVF9MRU4gIDI0CisjZGVmaW5lIFJTQV9QVCAgIlx4QUFceEJCXHhDQ1x4MDNceDAyXHgwMVx4MDBceEZGXHhGRlx4RkZceEZGXHhGRiIgXAorICAgICAgICAgICAgICAgICJceDExXHgyMlx4MzNceDBBXHgwQlx4MENceENDXHhERFx4RERceEREXHhERFx4REQiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorc3RhdGljIGludCBteXJhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyNpZiAhZGVmaW5lZChfX09wZW5CU0RfXykKKyAgICBzaXplX3QgaTsKKworICAgIGlmKCBybmdfc3RhdGUgIT0gTlVMTCApCisgICAgICAgIHJuZ19zdGF0ZSAgPSBOVUxMOworCisgICAgZm9yKCBpID0gMDsgaSA8IGxlbjsgKytpICkKKyAgICAgICAgb3V0cHV0W2ldID0gcmFuZCgpOworI2Vsc2UKKyAgICBpZiggcm5nX3N0YXRlICE9IE5VTEwgKQorICAgICAgICBybmdfc3RhdGUgPSBOVUxMOworCisgICAgYXJjNHJhbmRvbV9idWYoIG91dHB1dCwgbGVuICk7CisjZW5kaWYgLyogIU9wZW5CU0QgKi8KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfcnNhX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCByZXQgPSAwOworI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCisgICAgc2l6ZV90IGxlbjsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHJzYTsKKyAgICB1bnNpZ25lZCBjaGFyIHJzYV9wbGFpbnRleHRbUFRfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJzYV9kZWNyeXB0ZWRbUFRfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJzYV9jaXBoZXJ0ZXh0W0tFWV9MRU5dOworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgdW5zaWduZWQgY2hhciBzaGExc3VtWzIwXTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKworICAgIHJzYS5sZW4gPSBLRVlfTEVOOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuTiAsIDE2LCBSU0FfTiAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuRSAsIDE2LCBSU0FfRSAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuRCAsIDE2LCBSU0FfRCAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuUCAsIDE2LCBSU0FfUCAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuUSAsIDE2LCBSU0FfUSAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuRFAsIDE2LCBSU0FfRFAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuRFEsIDE2LCBSU0FfRFEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EuUVAsIDE2LCBSU0FfUVAgKSApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBSU0Ega2V5IHZhbGlkYXRpb246ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICAmcnNhICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmcnNhICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4gIFBLQ1MjMSBlbmNyeXB0aW9uIDogIiApOworCisgICAgbWVtY3B5KCByc2FfcGxhaW50ZXh0LCBSU0FfUFQsIFBUX0xFTiApOworCisgICAgaWYoIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoICZyc2EsIG15cmFuZCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLCBQVF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICByc2FfcGxhaW50ZXh0LCByc2FfY2lwaGVydGV4dCApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuICBQS0NTIzEgZGVjcnlwdGlvbiA6ICIgKTsKKworICAgIGlmKCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCAmcnNhLCBteXJhbmQsIE5VTEwsIE1CRURUTFNfUlNBX1BSSVZBVEUsICZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICByc2FfY2lwaGVydGV4dCwgcnNhX2RlY3J5cHRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyc2FfZGVjcnlwdGVkKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCBtZW1jbXAoIHJzYV9kZWNyeXB0ZWQsIHJzYV9wbGFpbnRleHQsIGxlbiApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFBLQ1MjMSBkYXRhIHNpZ24gIDogIiApOworCisgICAgbWJlZHRsc19zaGExKCByc2FfcGxhaW50ZXh0LCBQVF9MRU4sIHNoYTFzdW0gKTsKKworICAgIGlmKCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmcnNhLCBteXJhbmQsIE5VTEwsIE1CRURUTFNfUlNBX1BSSVZBVEUsIE1CRURUTFNfTURfU0hBMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFzdW0sIHJzYV9jaXBoZXJ0ZXh0ICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4gIFBLQ1MjMSBzaWcuIHZlcmlmeTogIiApOworCisgICAgaWYoIG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSggJnJzYSwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLCBNQkVEVExTX01EX1NIQTEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFzdW0sIHJzYV9jaXBoZXJ0ZXh0ICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZyc2EgKTsKKyNlbHNlIC8qIE1CRURUTFNfUEtDUzFfVjE1ICovCisgICAgKCh2b2lkKSB2ZXJib3NlKTsKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1MxX1YxNSAqLworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc2hhMS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjY2YyYTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zaGExLmMKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiAgRklQUy0xODAtMSBjb21wbGlhbnQgU0hBLTEgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIFNIQS0xIHN0YW5kYXJkIHdhcyBwdWJsaXNoZWQgYnkgTklTVCBpbiAxOTkzLgorICoKKyAqICBodHRwOi8vd3d3Lml0bC5uaXN0Lmdvdi9maXBzcHVicy9maXAxODAtMS5odG0KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMV9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciopdjsgd2hpbGUoIG4tLSApICpwKysgPSAwOworfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdFVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICAgICAgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBQVVRfVUlOVDMyX0JFCisjZGVmaW5lIFBVVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAyNCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDE2ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSAgICAgICApOyAgICAgICBcCit9CisjZW5kaWYKKwordm9pZCBtYmVkdGxzX3NoYTFfaW5pdCggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggbWJlZHRsc19zaGExX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfc2hhMV9mcmVlKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBpZiggY3R4ID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKCBtYmVkdGxzX3NoYTFfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zaGExX2Nsb25lKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc2hhMV9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogU0hBLTEgY29udGV4dCBzZXR1cAorICovCit2b2lkIG1iZWR0bHNfc2hhMV9zdGFydHMoIG1iZWR0bHNfc2hhMV9jb250ZXh0ICpjdHggKQoreworICAgIGN0eC0+dG90YWxbMF0gPSAwOworICAgIGN0eC0+dG90YWxbMV0gPSAwOworCisgICAgY3R4LT5zdGF0ZVswXSA9IDB4Njc0NTIzMDE7CisgICAgY3R4LT5zdGF0ZVsxXSA9IDB4RUZDREFCODk7CisgICAgY3R4LT5zdGF0ZVsyXSA9IDB4OThCQURDRkU7CisgICAgY3R4LT5zdGF0ZVszXSA9IDB4MTAzMjU0NzY7CisgICAgY3R4LT5zdGF0ZVs0XSA9IDB4QzNEMkUxRjA7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQpCit2b2lkIG1iZWR0bHNfc2hhMV9wcm9jZXNzKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdICkKK3sKKyAgICB1aW50MzJfdCB0ZW1wLCBXWzE2XSwgQSwgQiwgQywgRCwgRTsKKworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDBdLCBkYXRhLCAgMCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDFdLCBkYXRhLCAgNCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDJdLCBkYXRhLCAgOCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDNdLCBkYXRhLCAxMiApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDRdLCBkYXRhLCAxNiApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDVdLCBkYXRhLCAyMCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDZdLCBkYXRhLCAyNCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDddLCBkYXRhLCAyOCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDhdLCBkYXRhLCAzMiApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbIDldLCBkYXRhLCAzNiApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbMTBdLCBkYXRhLCA0MCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbMTFdLCBkYXRhLCA0NCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbMTJdLCBkYXRhLCA0OCApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbMTNdLCBkYXRhLCA1MiApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbMTRdLCBkYXRhLCA1NiApOworICAgIEdFVF9VSU5UMzJfQkUoIFdbMTVdLCBkYXRhLCA2MCApOworCisjZGVmaW5lIFMoeCxuKSAoKHggPDwgbikgfCAoKHggJiAweEZGRkZGRkZGKSA+PiAoMzIgLSBuKSkpCisKKyNkZWZpbmUgUih0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcCA9IFdbKCB0IC0gIDMgKSAmIDB4MEZdIF4gV1soIHQgLSA4ICkgJiAweDBGXSBeIFwKKyAgICAgICAgICAgV1soIHQgLSAxNCApICYgMHgwRl0gXiBXWyAgdCAgICAgICAmIDB4MEZdLCAgXAorICAgICggV1t0ICYgMHgwRl0gPSBTKHRlbXAsMSkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCispCisKKyNkZWZpbmUgUChhLGIsYyxkLGUseCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZSArPSBTKGEsNSkgKyBGKGIsYyxkKSArIEsgKyB4OyBiID0gUyhiLDMwKTsgICAgICAgIFwKK30KKworICAgIEEgPSBjdHgtPnN0YXRlWzBdOworICAgIEIgPSBjdHgtPnN0YXRlWzFdOworICAgIEMgPSBjdHgtPnN0YXRlWzJdOworICAgIEQgPSBjdHgtPnN0YXRlWzNdOworICAgIEUgPSBjdHgtPnN0YXRlWzRdOworCisjZGVmaW5lIEYoeCx5LHopICh6IF4gKHggJiAoeSBeIHopKSkKKyNkZWZpbmUgSyAweDVBODI3OTk5CisKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBXWzBdICApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFdbMV0gICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgV1syXSAgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBXWzNdICApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFdbNF0gICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgV1s1XSAgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBXWzZdICApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFdbN10gICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgV1s4XSAgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBXWzldICApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFdbMTBdICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgV1sxMV0gKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBXWzEyXSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFdbMTNdICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgV1sxNF0gKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBXWzE1XSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoMTYpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUigxNykgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDE4KSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoMTkpICk7CisKKyN1bmRlZiBLCisjdW5kZWYgRgorCisjZGVmaW5lIEYoeCx5LHopICh4IF4geSBeIHopCisjZGVmaW5lIEsgMHg2RUQ5RUJBMQorCisgICAgUCggQSwgQiwgQywgRCwgRSwgUigyMCkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDIxKSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoMjIpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUigyMykgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDI0KSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoMjUpICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUigyNikgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDI3KSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoMjgpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUigyOSkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDMwKSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoMzEpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUigzMikgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDMzKSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoMzQpICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgUigzNSkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDM2KSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoMzcpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUigzOCkgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDM5KSApOworCisjdW5kZWYgSworI3VuZGVmIEYKKworI2RlZmluZSBGKHgseSx6KSAoKHggJiB5KSB8ICh6ICYgKHggfCB5KSkpCisjZGVmaW5lIEsgMHg4RjFCQkNEQworCisgICAgUCggQSwgQiwgQywgRCwgRSwgUig0MCkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDQxKSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoNDIpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUig0MykgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDQ0KSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoNDUpICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUig0NikgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDQ3KSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoNDgpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUig0OSkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDUwKSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoNTEpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUig1MikgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDUzKSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoNTQpICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgUig1NSkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDU2KSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoNTcpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUig1OCkgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDU5KSApOworCisjdW5kZWYgSworI3VuZGVmIEYKKworI2RlZmluZSBGKHgseSx6KSAoeCBeIHkgXiB6KQorI2RlZmluZSBLIDB4Q0E2MkMxRDYKKworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoNjApICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUig2MSkgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDYyKSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoNjMpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUig2NCkgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBSKDY1KSApOworICAgIFAoIEUsIEEsIEIsIEMsIEQsIFIoNjYpICk7CisgICAgUCggRCwgRSwgQSwgQiwgQywgUig2NykgKTsKKyAgICBQKCBDLCBELCBFLCBBLCBCLCBSKDY4KSApOworICAgIFAoIEIsIEMsIEQsIEUsIEEsIFIoNjkpICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgUig3MCkgKTsKKyAgICBQKCBFLCBBLCBCLCBDLCBELCBSKDcxKSApOworICAgIFAoIEQsIEUsIEEsIEIsIEMsIFIoNzIpICk7CisgICAgUCggQywgRCwgRSwgQSwgQiwgUig3MykgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBBLCBSKDc0KSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIFIoNzUpICk7CisgICAgUCggRSwgQSwgQiwgQywgRCwgUig3NikgKTsKKyAgICBQKCBELCBFLCBBLCBCLCBDLCBSKDc3KSApOworICAgIFAoIEMsIEQsIEUsIEEsIEIsIFIoNzgpICk7CisgICAgUCggQiwgQywgRCwgRSwgQSwgUig3OSkgKTsKKworI3VuZGVmIEsKKyN1bmRlZiBGCisKKyAgICBjdHgtPnN0YXRlWzBdICs9IEE7CisgICAgY3R4LT5zdGF0ZVsxXSArPSBCOworICAgIGN0eC0+c3RhdGVbMl0gKz0gQzsKKyAgICBjdHgtPnN0YXRlWzNdICs9IEQ7CisgICAgY3R4LT5zdGF0ZVs0XSArPSBFOworfQorI2VuZGlmIC8qICFNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIFNIQS0xIHByb2Nlc3MgYnVmZmVyCisgKi8KK3ZvaWQgbWJlZHRsc19zaGExX3VwZGF0ZSggbWJlZHRsc19zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuICkKK3sKKyAgICBzaXplX3QgZmlsbDsKKyAgICB1aW50MzJfdCBsZWZ0OworCisgICAgaWYoIGlsZW4gPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgIGxlZnQgPSBjdHgtPnRvdGFsWzBdICYgMHgzRjsKKyAgICBmaWxsID0gNjQgLSBsZWZ0OworCisgICAgY3R4LT50b3RhbFswXSArPSAodWludDMyX3QpIGlsZW47CisgICAgY3R4LT50b3RhbFswXSAmPSAweEZGRkZGRkZGOworCisgICAgaWYoIGN0eC0+dG90YWxbMF0gPCAodWludDMyX3QpIGlsZW4gKQorICAgICAgICBjdHgtPnRvdGFsWzFdKys7CisKKyAgICBpZiggbGVmdCAmJiBpbGVuID49IGZpbGwgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgbWJlZHRsc19zaGExX3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgaW5wdXQgKz0gZmlsbDsKKyAgICAgICAgaWxlbiAgLT0gZmlsbDsKKyAgICAgICAgbGVmdCA9IDA7CisgICAgfQorCisgICAgd2hpbGUoIGlsZW4gPj0gNjQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zaGExX3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsKKyAgICAgICAgaW5wdXQgKz0gNjQ7CisgICAgICAgIGlsZW4gIC09IDY0OworICAgIH0KKworICAgIGlmKCBpbGVuID4gMCApCisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBpbGVuICk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGFkZGluZ1s2NF0gPQoreworIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qCisgKiBTSEEtMSBmaW5hbCBkaWdlc3QKKyAqLwordm9pZCBtYmVkdGxzX3NoYTFfZmluaXNoKCBtYmVkdGxzX3NoYTFfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0gKQoreworICAgIHVpbnQzMl90IGxhc3QsIHBhZG47CisgICAgdWludDMyX3QgaGlnaCwgbG93OworICAgIHVuc2lnbmVkIGNoYXIgbXNnbGVuWzhdOworCisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKworICAgIFBVVF9VSU5UMzJfQkUoIGhpZ2gsIG1zZ2xlbiwgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIGxvdywgIG1zZ2xlbiwgNCApOworCisgICAgbGFzdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIHBhZG4gPSAoIGxhc3QgPCA1NiApID8gKCA1NiAtIGxhc3QgKSA6ICggMTIwIC0gbGFzdCApOworCisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggY3R4LCBzaGExX3BhZGRpbmcsIHBhZG4gKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCBjdHgsIG1zZ2xlbiwgOCApOworCisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVswXSwgb3V0cHV0LCAgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbMV0sIG91dHB1dCwgIDQgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzJdLCBvdXRwdXQsICA4ICk7CisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVszXSwgb3V0cHV0LCAxMiApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbNF0sIG91dHB1dCwgMTYgKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX1NIQTFfQUxUICovCisKKy8qCisgKiBvdXRwdXQgPSBTSEEtMSggaW5wdXQgYnVmZmVyICkKKyAqLwordm9pZCBtYmVkdGxzX3NoYTEoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwgdW5zaWduZWQgY2hhciBvdXRwdXRbMjBdICkKK3sKKyAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX3NoYTFfaW5pdCggJmN0eCApOworICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZjdHggKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZjdHgsIG91dHB1dCApOworICAgIG1iZWR0bHNfc2hhMV9mcmVlKCAmY3R4ICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorLyoKKyAqIEZJUFMtMTgwLTEgdGVzdCB2ZWN0b3JzCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfdGVzdF9idWZbM11bNTddID0KK3sKKyAgICB7ICJhYmMiIH0sCisgICAgeyAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiIH0sCisgICAgeyAiIiB9Cit9OworCitzdGF0aWMgY29uc3QgaW50IHNoYTFfdGVzdF9idWZsZW5bM10gPQoreworICAgIDMsIDU2LCAxMDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3Rlc3Rfc3VtWzNdWzIwXSA9Cit7CisgICAgeyAweEE5LCAweDk5LCAweDNFLCAweDM2LCAweDQ3LCAweDA2LCAweDgxLCAweDZBLCAweEJBLCAweDNFLAorICAgICAgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhDMiwgMHg2QywgMHg5QywgMHhEMCwgMHhEOCwgMHg5RCB9LAorICAgIHsgMHg4NCwgMHg5OCwgMHgzRSwgMHg0NCwgMHgxQywgMHgzQiwgMHhEMiwgMHg2RSwgMHhCQSwgMHhBRSwKKyAgICAgIDB4NEEsIDB4QTEsIDB4RjksIDB4NTEsIDB4MjksIDB4RTUsIDB4RTUsIDB4NDYsIDB4NzAsIDB4RjEgfSwKKyAgICB7IDB4MzQsIDB4QUEsIDB4OTcsIDB4M0MsIDB4RDQsIDB4QzQsIDB4REEsIDB4QTQsIDB4RjYsIDB4MUUsCisgICAgICAweEVCLCAweDJCLCAweERCLCAweEFELCAweDI3LCAweDMxLCAweDY1LCAweDM0LCAweDAxLCAweDZGIH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfc2hhMV9zZWxmX3Rlc3QoIGludCB2ZXJib3NlICkKK3sKKyAgICBpbnQgaSwgaiwgYnVmbGVuLCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgc2hhMXN1bVsyMF07CisgICAgbWJlZHRsc19zaGExX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19zaGExX2luaXQoICZjdHggKTsKKworICAgIC8qCisgICAgICogU0hBLTEKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMzsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFNIQS0xIHRlc3QgIyVkOiAiLCBpICsgMSApOworCisgICAgICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZjdHggKTsKKworICAgICAgICBpZiggaSA9PSAyICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtc2V0KCBidWYsICdhJywgYnVmbGVuID0gMTAwMCApOworCisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDsgaisrICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmY3R4LCBidWYsIGJ1ZmxlbiApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZjdHgsIHNoYTFfdGVzdF9idWZbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhMV90ZXN0X2J1ZmxlbltpXSApOworCisgICAgICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZjdHgsIHNoYTFzdW0gKTsKKworICAgICAgICBpZiggbWVtY21wKCBzaGExc3VtLCBzaGExX3Rlc3Rfc3VtW2ldLCAyMCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCitleGl0OgorICAgIG1iZWR0bHNfc2hhMV9mcmVlKCAmY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zaGEyNTYuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NoYTI1Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjVkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zaGEyNTYuYwpAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqICBGSVBTLTE4MC0yIGNvbXBsaWFudCBTSEEtMjU2IGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBTSEEtMjU2IFNlY3VyZSBIYXNoIFN0YW5kYXJkIHdhcyBwdWJsaXNoZWQgYnkgTklTVCBpbiAyMDAyLgorICoKKyAqICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTgwLTIvZmlwczE4MC0yLnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChiaWcgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfQkUKKyNkZWZpbmUgR0VUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSA8PCAyNCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8IDE2ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSAgICAgICApOyAgICAgICAgICAgIFwKK30gd2hpbGUoIDAgKQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQzMl9CRQorI2RlZmluZSBQVVRfVUlOVDMyX0JFKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYilbKGkpICAgIF0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAxNiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDJdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+ICA4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgM10gPSAodW5zaWduZWQgY2hhcikgKCAobikgICAgICAgKTsgICAgICAgXAorfSB3aGlsZSggMCApCisjZW5kaWYKKwordm9pZCBtYmVkdGxzX3NoYTI1Nl9pbml0KCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfc2hhMjU2X2ZyZWUoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCApCit7CisgICAgaWYoIGN0eCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19zaGEyNTZfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zaGEyNTZfY2xvbmUoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKnNyYyApCit7CisgICAgKmRzdCA9ICpzcmM7Cit9CisKKy8qCisgKiBTSEEtMjU2IGNvbnRleHQgc2V0dXAKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgKmN0eCwgaW50IGlzMjI0ICkKK3sKKyAgICBjdHgtPnRvdGFsWzBdID0gMDsKKyAgICBjdHgtPnRvdGFsWzFdID0gMDsKKworICAgIGlmKCBpczIyNCA9PSAwICkKKyAgICB7CisgICAgICAgIC8qIFNIQS0yNTYgKi8KKyAgICAgICAgY3R4LT5zdGF0ZVswXSA9IDB4NkEwOUU2Njc7CisgICAgICAgIGN0eC0+c3RhdGVbMV0gPSAweEJCNjdBRTg1OworICAgICAgICBjdHgtPnN0YXRlWzJdID0gMHgzQzZFRjM3MjsKKyAgICAgICAgY3R4LT5zdGF0ZVszXSA9IDB4QTU0RkY1M0E7CisgICAgICAgIGN0eC0+c3RhdGVbNF0gPSAweDUxMEU1MjdGOworICAgICAgICBjdHgtPnN0YXRlWzVdID0gMHg5QjA1Njg4QzsKKyAgICAgICAgY3R4LT5zdGF0ZVs2XSA9IDB4MUY4M0Q5QUI7CisgICAgICAgIGN0eC0+c3RhdGVbN10gPSAweDVCRTBDRDE5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTSEEtMjI0ICovCisgICAgICAgIGN0eC0+c3RhdGVbMF0gPSAweEMxMDU5RUQ4OworICAgICAgICBjdHgtPnN0YXRlWzFdID0gMHgzNjdDRDUwNzsKKyAgICAgICAgY3R4LT5zdGF0ZVsyXSA9IDB4MzA3MEREMTc7CisgICAgICAgIGN0eC0+c3RhdGVbM10gPSAweEY3MEU1OTM5OworICAgICAgICBjdHgtPnN0YXRlWzRdID0gMHhGRkMwMEIzMTsKKyAgICAgICAgY3R4LT5zdGF0ZVs1XSA9IDB4Njg1ODE1MTE7CisgICAgICAgIGN0eC0+c3RhdGVbNl0gPSAweDY0Rjk4RkE3OworICAgICAgICBjdHgtPnN0YXRlWzddID0gMHhCRUZBNEZBNDsKKyAgICB9CisKKyAgICBjdHgtPmlzMjI0ID0gaXMyMjQ7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVCkKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBLW10gPQoreworICAgIDB4NDI4QTJGOTgsIDB4NzEzNzQ0OTEsIDB4QjVDMEZCQ0YsIDB4RTlCNURCQTUsCisgICAgMHgzOTU2QzI1QiwgMHg1OUYxMTFGMSwgMHg5MjNGODJBNCwgMHhBQjFDNUVENSwKKyAgICAweEQ4MDdBQTk4LCAweDEyODM1QjAxLCAweDI0MzE4NUJFLCAweDU1MEM3REMzLAorICAgIDB4NzJCRTVENzQsIDB4ODBERUIxRkUsIDB4OUJEQzA2QTcsIDB4QzE5QkYxNzQsCisgICAgMHhFNDlCNjlDMSwgMHhFRkJFNDc4NiwgMHgwRkMxOURDNiwgMHgyNDBDQTFDQywKKyAgICAweDJERTkyQzZGLCAweDRBNzQ4NEFBLCAweDVDQjBBOURDLCAweDc2Rjk4OERBLAorICAgIDB4OTgzRTUxNTIsIDB4QTgzMUM2NkQsIDB4QjAwMzI3QzgsIDB4QkY1OTdGQzcsCisgICAgMHhDNkUwMEJGMywgMHhENUE3OTE0NywgMHgwNkNBNjM1MSwgMHgxNDI5Mjk2NywKKyAgICAweDI3QjcwQTg1LCAweDJFMUIyMTM4LCAweDREMkM2REZDLCAweDUzMzgwRDEzLAorICAgIDB4NjUwQTczNTQsIDB4NzY2QTBBQkIsIDB4ODFDMkM5MkUsIDB4OTI3MjJDODUsCisgICAgMHhBMkJGRThBMSwgMHhBODFBNjY0QiwgMHhDMjRCOEI3MCwgMHhDNzZDNTFBMywKKyAgICAweEQxOTJFODE5LCAweEQ2OTkwNjI0LCAweEY0MEUzNTg1LCAweDEwNkFBMDcwLAorICAgIDB4MTlBNEMxMTYsIDB4MUUzNzZDMDgsIDB4Mjc0ODc3NEMsIDB4MzRCMEJDQjUsCisgICAgMHgzOTFDMENCMywgMHg0RUQ4QUE0QSwgMHg1QjlDQ0E0RiwgMHg2ODJFNkZGMywKKyAgICAweDc0OEY4MkVFLCAweDc4QTU2MzZGLCAweDg0Qzg3ODE0LCAweDhDQzcwMjA4LAorICAgIDB4OTBCRUZGRkEsIDB4QTQ1MDZDRUIsIDB4QkVGOUEzRjcsIDB4QzY3MTc4RjIsCit9OworCisjZGVmaW5lICBTSFIoeCxuKSAoKHggJiAweEZGRkZGRkZGKSA+PiBuKQorI2RlZmluZSBST1RSKHgsbikgKFNIUih4LG4pIHwgKHggPDwgKDMyIC0gbikpKQorCisjZGVmaW5lIFMwKHgpIChST1RSKHgsIDcpIF4gUk9UUih4LDE4KSBeICBTSFIoeCwgMykpCisjZGVmaW5lIFMxKHgpIChST1RSKHgsMTcpIF4gUk9UUih4LDE5KSBeICBTSFIoeCwxMCkpCisKKyNkZWZpbmUgUzIoeCkgKFJPVFIoeCwgMikgXiBST1RSKHgsMTMpIF4gUk9UUih4LDIyKSkKKyNkZWZpbmUgUzMoeCkgKFJPVFIoeCwgNikgXiBST1RSKHgsMTEpIF4gUk9UUih4LDI1KSkKKworI2RlZmluZSBGMCh4LHkseikgKCh4ICYgeSkgfCAoeiAmICh4IHwgeSkpKQorI2RlZmluZSBGMSh4LHkseikgKHogXiAoeCAmICh5IF4geikpKQorCisjZGVmaW5lIFIodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgV1t0XSA9IFMxKFdbdCAtICAyXSkgKyBXW3QgLSAgN10gKyAgICAgICAgICBcCisgICAgICAgICAgIFMwKFdbdCAtIDE1XSkgKyBXW3QgLSAxNl0gICAgICAgICAgICBcCispCisKKyNkZWZpbmUgUChhLGIsYyxkLGUsZixnLGgseCxLKSAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wMSA9IGggKyBTMyhlKSArIEYxKGUsZixnKSArIEsgKyB4OyAgICAgIFwKKyAgICB0ZW1wMiA9IFMyKGEpICsgRjAoYSxiLGMpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBkICs9IHRlbXAxOyBoID0gdGVtcDEgKyB0ZW1wMjsgICAgICAgICAgICAgIFwKK30KKwordm9pZCBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVs2NF0gKQoreworICAgIHVpbnQzMl90IHRlbXAxLCB0ZW1wMiwgV1s2NF07CisgICAgdWludDMyX3QgQVs4XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICBBW2ldID0gY3R4LT5zdGF0ZVtpXTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfU01BTExFUikKKyAgICBmb3IoIGkgPSAwOyBpIDwgNjQ7IGkrKyApCisgICAgeworICAgICAgICBpZiggaSA8IDE2ICkKKyAgICAgICAgICAgIEdFVF9VSU5UMzJfQkUoIFdbaV0sIGRhdGEsIDQgKiBpICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFIoIGkgKTsKKworICAgICAgICBQKCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBXW2ldLCBLW2ldICk7CisKKyAgICAgICAgdGVtcDEgPSBBWzddOyBBWzddID0gQVs2XTsgQVs2XSA9IEFbNV07IEFbNV0gPSBBWzRdOyBBWzRdID0gQVszXTsKKyAgICAgICAgQVszXSA9IEFbMl07IEFbMl0gPSBBWzFdOyBBWzFdID0gQVswXTsgQVswXSA9IHRlbXAxOworICAgIH0KKyNlbHNlIC8qIE1CRURUTFNfU0hBMjU2X1NNQUxMRVIgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgIEdFVF9VSU5UMzJfQkUoIFdbaV0sIGRhdGEsIDQgKiBpICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkgKz0gOCApCisgICAgeworICAgICAgICBQKCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBXW2krMF0sIEtbaSswXSApOworICAgICAgICBQKCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBXW2krMV0sIEtbaSsxXSApOworICAgICAgICBQKCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBXW2krMl0sIEtbaSsyXSApOworICAgICAgICBQKCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBXW2krM10sIEtbaSszXSApOworICAgICAgICBQKCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBXW2krNF0sIEtbaSs0XSApOworICAgICAgICBQKCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBXW2krNV0sIEtbaSs1XSApOworICAgICAgICBQKCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBXW2krNl0sIEtbaSs2XSApOworICAgICAgICBQKCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBXW2krN10sIEtbaSs3XSApOworICAgIH0KKworICAgIGZvciggaSA9IDE2OyBpIDwgNjQ7IGkgKz0gOCApCisgICAgeworICAgICAgICBQKCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBSKGkrMCksIEtbaSswXSApOworICAgICAgICBQKCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBSKGkrMSksIEtbaSsxXSApOworICAgICAgICBQKCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBSKGkrMiksIEtbaSsyXSApOworICAgICAgICBQKCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBSKGkrMyksIEtbaSszXSApOworICAgICAgICBQKCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBBWzNdLCBSKGkrNCksIEtbaSs0XSApOworICAgICAgICBQKCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBBWzJdLCBSKGkrNSksIEtbaSs1XSApOworICAgICAgICBQKCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBBWzFdLCBSKGkrNiksIEtbaSs2XSApOworICAgICAgICBQKCBBWzFdLCBBWzJdLCBBWzNdLCBBWzRdLCBBWzVdLCBBWzZdLCBBWzddLCBBWzBdLCBSKGkrNyksIEtbaSs3XSApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9TTUFMTEVSICovCisKKyAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgY3R4LT5zdGF0ZVtpXSArPSBBW2ldOworfQorI2VuZGlmIC8qICFNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVCAqLworCisvKgorICogU0hBLTI1NiBwcm9jZXNzIGJ1ZmZlcgorICovCit2b2lkIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggbWJlZHRsc19zaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlsZW4gKQoreworICAgIHNpemVfdCBmaWxsOworICAgIHVpbnQzMl90IGxlZnQ7CisKKyAgICBpZiggaWxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGVmdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOworICAgIGZpbGwgPSA2NCAtIGxlZnQ7CisKKyAgICBjdHgtPnRvdGFsWzBdICs9ICh1aW50MzJfdCkgaWxlbjsKKyAgICBjdHgtPnRvdGFsWzBdICY9IDB4RkZGRkZGRkY7CisKKyAgICBpZiggY3R4LT50b3RhbFswXSA8ICh1aW50MzJfdCkgaWxlbiApCisgICAgICAgIGN0eC0+dG90YWxbMV0rKzsKKworICAgIGlmKCBsZWZ0ICYmIGlsZW4gPj0gZmlsbCApCisgICAgeworICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCBpbnB1dCwgZmlsbCApOworICAgICAgICBtYmVkdGxzX3NoYTI1Nl9wcm9jZXNzKCBjdHgsIGN0eC0+YnVmZmVyICk7CisgICAgICAgIGlucHV0ICs9IGZpbGw7CisgICAgICAgIGlsZW4gIC09IGZpbGw7CisgICAgICAgIGxlZnQgPSAwOworICAgIH0KKworICAgIHdoaWxlKCBpbGVuID49IDY0ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsKKyAgICAgICAgaW5wdXQgKz0gNjQ7CisgICAgICAgIGlsZW4gIC09IDY0OworICAgIH0KKworICAgIGlmKCBpbGVuID4gMCApCisgICAgICAgIG1lbWNweSggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksIGlucHV0LCBpbGVuICk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wYWRkaW5nWzY0XSA9Cit7CisgMHg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKKworLyoKKyAqIFNIQS0yNTYgZmluYWwgZGlnZXN0CisgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTZfZmluaXNoKCBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXSApCit7CisgICAgdWludDMyX3QgbGFzdCwgcGFkbjsKKyAgICB1aW50MzJfdCBoaWdoLCBsb3c7CisgICAgdW5zaWduZWQgY2hhciBtc2dsZW5bOF07CisKKyAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDI5ICkKKyAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7CisgICAgbG93ICA9ICggY3R4LT50b3RhbFswXSA8PCAgMyApOworCisgICAgUFVUX1VJTlQzMl9CRSggaGlnaCwgbXNnbGVuLCAwICk7CisgICAgUFVUX1VJTlQzMl9CRSggbG93LCAgbXNnbGVuLCA0ICk7CisKKyAgICBsYXN0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgcGFkbiA9ICggbGFzdCA8IDU2ICkgPyAoIDU2IC0gbGFzdCApIDogKCAxMjAgLSBsYXN0ICk7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoIGN0eCwgc2hhMjU2X3BhZGRpbmcsIHBhZG4gKTsKKyAgICBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoIGN0eCwgbXNnbGVuLCA4ICk7CisKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzBdLCBvdXRwdXQsICAwICk7CisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVsxXSwgb3V0cHV0LCAgNCApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbMl0sIG91dHB1dCwgIDggKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzNdLCBvdXRwdXQsIDEyICk7CisgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVs0XSwgb3V0cHV0LCAxNiApOworICAgIFBVVF9VSU5UMzJfQkUoIGN0eC0+c3RhdGVbNV0sIG91dHB1dCwgMjAgKTsKKyAgICBQVVRfVUlOVDMyX0JFKCBjdHgtPnN0YXRlWzZdLCBvdXRwdXQsIDI0ICk7CisKKyAgICBpZiggY3R4LT5pczIyNCA9PSAwICkKKyAgICAgICAgUFVUX1VJTlQzMl9CRSggY3R4LT5zdGF0ZVs3XSwgb3V0cHV0LCAyOCApOworfQorCisjZW5kaWYgLyogIU1CRURUTFNfU0hBMjU2X0FMVCAqLworCisvKgorICogb3V0cHV0ID0gU0hBLTI1NiggaW5wdXQgYnVmZmVyICkKKyAqLwordm9pZCBtYmVkdGxzX3NoYTI1NiggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXSwgaW50IGlzMjI0ICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoICZjdHgsIGlzMjI0ICk7CisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisgICAgbWJlZHRsc19zaGEyNTZfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKy8qCisgKiBGSVBTLTE4MC0yIHRlc3QgdmVjdG9ycworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfdGVzdF9idWZbM11bNTddID0KK3sKKyAgICB7ICJhYmMiIH0sCisgICAgeyAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiIH0sCisgICAgeyAiIiB9Cit9OworCitzdGF0aWMgY29uc3QgaW50IHNoYTI1Nl90ZXN0X2J1ZmxlblszXSA9Cit7CisgICAgMywgNTYsIDEwMDAKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl90ZXN0X3N1bVs2XVszMl0gPQoreworICAgIC8qCisgICAgICogU0hBLTIyNCB0ZXN0IHZlY3RvcnMKKyAgICAgKi8KKyAgICB7IDB4MjMsIDB4MDksIDB4N0QsIDB4MjIsIDB4MzQsIDB4MDUsIDB4RDgsIDB4MjIsCisgICAgICAweDg2LCAweDQyLCAweEE0LCAweDc3LCAweEJELCAweEEyLCAweDU1LCAweEIzLAorICAgICAgMHgyQSwgMHhBRCwgMHhCQywgMHhFNCwgMHhCRCwgMHhBMCwgMHhCMywgMHhGNywKKyAgICAgIDB4RTMsIDB4NkMsIDB4OUQsIDB4QTcgfSwKKyAgICB7IDB4NzUsIDB4MzgsIDB4OEIsIDB4MTYsIDB4NTEsIDB4MjcsIDB4NzYsIDB4Q0MsCisgICAgICAweDVELCAweEJBLCAweDVELCAweEExLCAweEZELCAweDg5LCAweDAxLCAweDUwLAorICAgICAgMHhCMCwgMHhDNiwgMHg0NSwgMHg1QywgMHhCNCwgMHhGNSwgMHg4QiwgMHgxOSwKKyAgICAgIDB4NTIsIDB4NTIsIDB4MjUsIDB4MjUgfSwKKyAgICB7IDB4MjAsIDB4NzksIDB4NDYsIDB4NTUsIDB4OTgsIDB4MEMsIDB4OTEsIDB4RDgsCisgICAgICAweEJCLCAweEI0LCAweEMxLCAweEVBLCAweDk3LCAweDYxLCAweDhBLCAweDRCLAorICAgICAgMHhGMCwgMHgzRiwgMHg0MiwgMHg1OCwgMHgxOSwgMHg0OCwgMHhCMiwgMHhFRSwKKyAgICAgIDB4NEUsIDB4RTcsIDB4QUQsIDB4NjcgfSwKKworICAgIC8qCisgICAgICogU0hBLTI1NiB0ZXN0IHZlY3RvcnMKKyAgICAgKi8KKyAgICB7IDB4QkEsIDB4NzgsIDB4MTYsIDB4QkYsIDB4OEYsIDB4MDEsIDB4Q0YsIDB4RUEsCisgICAgICAweDQxLCAweDQxLCAweDQwLCAweERFLCAweDVELCAweEFFLCAweDIyLCAweDIzLAorICAgICAgMHhCMCwgMHgwMywgMHg2MSwgMHhBMywgMHg5NiwgMHgxNywgMHg3QSwgMHg5QywKKyAgICAgIDB4QjQsIDB4MTAsIDB4RkYsIDB4NjEsIDB4RjIsIDB4MDAsIDB4MTUsIDB4QUQgfSwKKyAgICB7IDB4MjQsIDB4OEQsIDB4NkEsIDB4NjEsIDB4RDIsIDB4MDYsIDB4MzgsIDB4QjgsCisgICAgICAweEU1LCAweEMwLCAweDI2LCAweDkzLCAweDBDLCAweDNFLCAweDYwLCAweDM5LAorICAgICAgMHhBMywgMHgzQywgMHhFNCwgMHg1OSwgMHg2NCwgMHhGRiwgMHgyMSwgMHg2NywKKyAgICAgIDB4RjYsIDB4RUMsIDB4RUQsIDB4RDQsIDB4MTksIDB4REIsIDB4MDYsIDB4QzEgfSwKKyAgICB7IDB4Q0QsIDB4QzcsIDB4NkUsIDB4NUMsIDB4OTksIDB4MTQsIDB4RkIsIDB4OTIsCisgICAgICAweDgxLCAweEExLCAweEM3LCAweEUyLCAweDg0LCAweEQ3LCAweDNFLCAweDY3LAorICAgICAgMHhGMSwgMHg4MCwgMHg5QSwgMHg0OCwgMHhBNCwgMHg5NywgMHgyMCwgMHgwRSwKKyAgICAgIDB4MDQsIDB4NkQsIDB4MzksIDB4Q0MsIDB4QzcsIDB4MTEsIDB4MkMsIDB4RDAgfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc19zaGEyNTZfc2VsZl90ZXN0KCBpbnQgdmVyYm9zZSApCit7CisgICAgaW50IGksIGosIGssIGJ1ZmxlbiwgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICAgdW5zaWduZWQgY2hhciBzaGEyNTZzdW1bMzJdOworICAgIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgY3R4OworCisgICAgYnVmID0gbWJlZHRsc19jYWxsb2MoIDEwMjQsIHNpemVvZih1bnNpZ25lZCBjaGFyKSApOworICAgIGlmKCBOVUxMID09IGJ1ZiApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiQnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgbWJlZHRsc19zaGEyNTZfaW5pdCggJmN0eCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICBqID0gaSAlIDM7CisgICAgICAgIGsgPSBpIDwgMzsKKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBTSEEtJWQgdGVzdCAjJWQ6ICIsIDI1NiAtIGsgKiAzMiwgaiArIDEgKTsKKworICAgICAgICBtYmVkdGxzX3NoYTI1Nl9zdGFydHMoICZjdHgsIGsgKTsKKworICAgICAgICBpZiggaiA9PSAyICkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtc2V0KCBidWYsICdhJywgYnVmbGVuID0gMTAwMCApOworCisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMTAwMDsgaisrICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NoYTI1Nl91cGRhdGUoICZjdHgsIGJ1ZiwgYnVmbGVuICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmY3R4LCBzaGEyNTZfdGVzdF9idWZbal0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGEyNTZfdGVzdF9idWZsZW5bal0gKTsKKworICAgICAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goICZjdHgsIHNoYTI1NnN1bSApOworCisgICAgICAgIGlmKCBtZW1jbXAoIHNoYTI1NnN1bSwgc2hhMjU2X3Rlc3Rfc3VtW2ldLCAzMiAtIGsgKiA0ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19zaGEyNTZfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NoYTUxMi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc2hhNTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0NTIyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NoYTUxMi5jCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogIEZJUFMtMTgwLTIgY29tcGxpYW50IFNIQS0zODQvNTEyIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBTSEEtNTEyIFNlY3VyZSBIYXNoIFN0YW5kYXJkIHdhcyBwdWJsaXNoZWQgYnkgTklTVCBpbiAyMDAyLgorICoKKyAqICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTgwLTIvZmlwczE4MC0yLnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTUxMi5oIgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKKyAgI2RlZmluZSBVTDY0KHgpIHgjI3VpNjQKKyNlbHNlCisgICNkZWZpbmUgVUw2NCh4KSB4IyNVTEwKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTUxMl9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiA2NC1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChiaWcgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UNjRfQkUKKyNkZWZpbmUgR0VUX1VJTlQ2NF9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDY0X3QpIChiKVsoaSkgICAgXSA8PCA1NiApICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50NjRfdCkgKGIpWyhpKSArIDFdIDw8IDQ4ICkgICAgICAgXAorICAgICAgICB8ICggKHVpbnQ2NF90KSAoYilbKGkpICsgMl0gPDwgNDAgKSAgICAgICBcCisgICAgICAgIHwgKCAodWludDY0X3QpIChiKVsoaSkgKyAzXSA8PCAzMiApICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50NjRfdCkgKGIpWyhpKSArIDRdIDw8IDI0ICkgICAgICAgXAorICAgICAgICB8ICggKHVpbnQ2NF90KSAoYilbKGkpICsgNV0gPDwgMTYgKSAgICAgICBcCisgICAgICAgIHwgKCAodWludDY0X3QpIChiKVsoaSkgKyA2XSA8PCAgOCApICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50NjRfdCkgKGIpWyhpKSArIDddICAgICAgICk7ICAgICAgXAorfQorI2VuZGlmIC8qIEdFVF9VSU5UNjRfQkUgKi8KKworI2lmbmRlZiBQVVRfVUlOVDY0X0JFCisjZGVmaW5lIFBVVF9VSU5UNjRfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiA1NiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDQ4ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gNDAgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAzMiApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDRdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDI0ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgNV0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyA2XSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAgOCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDddID0gKHVuc2lnbmVkIGNoYXIpICggKG4pICAgICAgICk7ICAgICAgIFwKK30KKyNlbmRpZiAvKiBQVVRfVUlOVDY0X0JFICovCisKK3ZvaWQgbWJlZHRsc19zaGE1MTJfaW5pdCggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICkgKTsKK30KKwordm9pZCBtYmVkdGxzX3NoYTUxMl9mcmVlKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKSApOworfQorCit2b2lkIG1iZWR0bHNfc2hhNTEyX2Nsb25lKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpzcmMgKQoreworICAgICpkc3QgPSAqc3JjOworfQorCisvKgorICogU0hBLTUxMiBjb250ZXh0IHNldHVwCisgKi8KK3ZvaWQgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHgsIGludCBpczM4NCApCit7CisgICAgY3R4LT50b3RhbFswXSA9IDA7CisgICAgY3R4LT50b3RhbFsxXSA9IDA7CisKKyAgICBpZiggaXMzODQgPT0gMCApCisgICAgeworICAgICAgICAvKiBTSEEtNTEyICovCisgICAgICAgIGN0eC0+c3RhdGVbMF0gPSBVTDY0KDB4NkEwOUU2NjdGM0JDQzkwOCk7CisgICAgICAgIGN0eC0+c3RhdGVbMV0gPSBVTDY0KDB4QkI2N0FFODU4NENBQTczQik7CisgICAgICAgIGN0eC0+c3RhdGVbMl0gPSBVTDY0KDB4M0M2RUYzNzJGRTk0RjgyQik7CisgICAgICAgIGN0eC0+c3RhdGVbM10gPSBVTDY0KDB4QTU0RkY1M0E1RjFEMzZGMSk7CisgICAgICAgIGN0eC0+c3RhdGVbNF0gPSBVTDY0KDB4NTEwRTUyN0ZBREU2ODJEMSk7CisgICAgICAgIGN0eC0+c3RhdGVbNV0gPSBVTDY0KDB4OUIwNTY4OEMyQjNFNkMxRik7CisgICAgICAgIGN0eC0+c3RhdGVbNl0gPSBVTDY0KDB4MUY4M0Q5QUJGQjQxQkQ2Qik7CisgICAgICAgIGN0eC0+c3RhdGVbN10gPSBVTDY0KDB4NUJFMENEMTkxMzdFMjE3OSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFNIQS0zODQgKi8KKyAgICAgICAgY3R4LT5zdGF0ZVswXSA9IFVMNjQoMHhDQkJCOUQ1REMxMDU5RUQ4KTsKKyAgICAgICAgY3R4LT5zdGF0ZVsxXSA9IFVMNjQoMHg2MjlBMjkyQTM2N0NENTA3KTsKKyAgICAgICAgY3R4LT5zdGF0ZVsyXSA9IFVMNjQoMHg5MTU5MDE1QTMwNzBERDE3KTsKKyAgICAgICAgY3R4LT5zdGF0ZVszXSA9IFVMNjQoMHgxNTJGRUNEOEY3MEU1OTM5KTsKKyAgICAgICAgY3R4LT5zdGF0ZVs0XSA9IFVMNjQoMHg2NzMzMjY2N0ZGQzAwQjMxKTsKKyAgICAgICAgY3R4LT5zdGF0ZVs1XSA9IFVMNjQoMHg4RUI0NEE4NzY4NTgxNTExKTsKKyAgICAgICAgY3R4LT5zdGF0ZVs2XSA9IFVMNjQoMHhEQjBDMkUwRDY0Rjk4RkE3KTsKKyAgICAgICAgY3R4LT5zdGF0ZVs3XSA9IFVMNjQoMHg0N0I1NDgxREJFRkE0RkE0KTsKKyAgICB9CisKKyAgICBjdHgtPmlzMzg0ID0gaXMzODQ7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTUxMl9QUk9DRVNTX0FMVCkKKworLyoKKyAqIFJvdW5kIGNvbnN0YW50cworICovCitzdGF0aWMgY29uc3QgdWludDY0X3QgS1s4MF0gPQoreworICAgIFVMNjQoMHg0MjhBMkY5OEQ3MjhBRTIyKSwgIFVMNjQoMHg3MTM3NDQ5MTIzRUY2NUNEKSwKKyAgICBVTDY0KDB4QjVDMEZCQ0ZFQzREM0IyRiksICBVTDY0KDB4RTlCNURCQTU4MTg5REJCQyksCisgICAgVUw2NCgweDM5NTZDMjVCRjM0OEI1MzgpLCAgVUw2NCgweDU5RjExMUYxQjYwNUQwMTkpLAorICAgIFVMNjQoMHg5MjNGODJBNEFGMTk0RjlCKSwgIFVMNjQoMHhBQjFDNUVENURBNkQ4MTE4KSwKKyAgICBVTDY0KDB4RDgwN0FBOThBMzAzMDI0MiksICBVTDY0KDB4MTI4MzVCMDE0NTcwNkZCRSksCisgICAgVUw2NCgweDI0MzE4NUJFNEVFNEIyOEMpLCAgVUw2NCgweDU1MEM3REMzRDVGRkI0RTIpLAorICAgIFVMNjQoMHg3MkJFNUQ3NEYyN0I4OTZGKSwgIFVMNjQoMHg4MERFQjFGRTNCMTY5NkIxKSwKKyAgICBVTDY0KDB4OUJEQzA2QTcyNUM3MTIzNSksICBVTDY0KDB4QzE5QkYxNzRDRjY5MjY5NCksCisgICAgVUw2NCgweEU0OUI2OUMxOUVGMTRBRDIpLCAgVUw2NCgweEVGQkU0Nzg2Mzg0RjI1RTMpLAorICAgIFVMNjQoMHgwRkMxOURDNjhCOENENUI1KSwgIFVMNjQoMHgyNDBDQTFDQzc3QUM5QzY1KSwKKyAgICBVTDY0KDB4MkRFOTJDNkY1OTJCMDI3NSksICBVTDY0KDB4NEE3NDg0QUE2RUE2RTQ4MyksCisgICAgVUw2NCgweDVDQjBBOURDQkQ0MUZCRDQpLCAgVUw2NCgweDc2Rjk4OERBODMxMTUzQjUpLAorICAgIFVMNjQoMHg5ODNFNTE1MkVFNjZERkFCKSwgIFVMNjQoMHhBODMxQzY2RDJEQjQzMjEwKSwKKyAgICBVTDY0KDB4QjAwMzI3Qzg5OEZCMjEzRiksICBVTDY0KDB4QkY1OTdGQzdCRUVGMEVFNCksCisgICAgVUw2NCgweEM2RTAwQkYzM0RBODhGQzIpLCAgVUw2NCgweEQ1QTc5MTQ3OTMwQUE3MjUpLAorICAgIFVMNjQoMHgwNkNBNjM1MUUwMDM4MjZGKSwgIFVMNjQoMHgxNDI5Mjk2NzBBMEU2RTcwKSwKKyAgICBVTDY0KDB4MjdCNzBBODU0NkQyMkZGQyksICBVTDY0KDB4MkUxQjIxMzg1QzI2QzkyNiksCisgICAgVUw2NCgweDREMkM2REZDNUFDNDJBRUQpLCAgVUw2NCgweDUzMzgwRDEzOUQ5NUIzREYpLAorICAgIFVMNjQoMHg2NTBBNzM1NDhCQUY2M0RFKSwgIFVMNjQoMHg3NjZBMEFCQjNDNzdCMkE4KSwKKyAgICBVTDY0KDB4ODFDMkM5MkU0N0VEQUVFNiksICBVTDY0KDB4OTI3MjJDODUxNDgyMzUzQiksCisgICAgVUw2NCgweEEyQkZFOEExNENGMTAzNjQpLCAgVUw2NCgweEE4MUE2NjRCQkM0MjMwMDEpLAorICAgIFVMNjQoMHhDMjRCOEI3MEQwRjg5NzkxKSwgIFVMNjQoMHhDNzZDNTFBMzA2NTRCRTMwKSwKKyAgICBVTDY0KDB4RDE5MkU4MTlENkVGNTIxOCksICBVTDY0KDB4RDY5OTA2MjQ1NTY1QTkxMCksCisgICAgVUw2NCgweEY0MEUzNTg1NTc3MTIwMkEpLCAgVUw2NCgweDEwNkFBMDcwMzJCQkQxQjgpLAorICAgIFVMNjQoMHgxOUE0QzExNkI4RDJEMEM4KSwgIFVMNjQoMHgxRTM3NkMwODUxNDFBQjUzKSwKKyAgICBVTDY0KDB4Mjc0ODc3NENERjhFRUI5OSksICBVTDY0KDB4MzRCMEJDQjVFMTlCNDhBOCksCisgICAgVUw2NCgweDM5MUMwQ0IzQzVDOTVBNjMpLCAgVUw2NCgweDRFRDhBQTRBRTM0MThBQ0IpLAorICAgIFVMNjQoMHg1QjlDQ0E0Rjc3NjNFMzczKSwgIFVMNjQoMHg2ODJFNkZGM0Q2QjJCOEEzKSwKKyAgICBVTDY0KDB4NzQ4RjgyRUU1REVGQjJGQyksICBVTDY0KDB4NzhBNTYzNkY0MzE3MkY2MCksCisgICAgVUw2NCgweDg0Qzg3ODE0QTFGMEFCNzIpLCAgVUw2NCgweDhDQzcwMjA4MUE2NDM5RUMpLAorICAgIFVMNjQoMHg5MEJFRkZGQTIzNjMxRTI4KSwgIFVMNjQoMHhBNDUwNkNFQkRFODJCREU5KSwKKyAgICBVTDY0KDB4QkVGOUEzRjdCMkM2NzkxNSksICBVTDY0KDB4QzY3MTc4RjJFMzcyNTMyQiksCisgICAgVUw2NCgweENBMjczRUNFRUEyNjYxOUMpLCAgVUw2NCgweEQxODZCOEM3MjFDMEMyMDcpLAorICAgIFVMNjQoMHhFQURBN0RENkNERTBFQjFFKSwgIFVMNjQoMHhGNTdENEY3RkVFNkVEMTc4KSwKKyAgICBVTDY0KDB4MDZGMDY3QUE3MjE3NkZCQSksICBVTDY0KDB4MEE2MzdEQzVBMkM4OThBNiksCisgICAgVUw2NCgweDExM0Y5ODA0QkVGOTBEQUUpLCAgVUw2NCgweDFCNzEwQjM1MTMxQzQ3MUIpLAorICAgIFVMNjQoMHgyOERCNzdGNTIzMDQ3RDg0KSwgIFVMNjQoMHgzMkNBQUI3QjQwQzcyNDkzKSwKKyAgICBVTDY0KDB4M0M5RUJFMEExNUM5QkVCQyksICBVTDY0KDB4NDMxRDY3QzQ5QzEwMEQ0QyksCisgICAgVUw2NCgweDRDQzVENEJFQ0IzRTQyQjYpLCAgVUw2NCgweDU5N0YyOTlDRkM2NTdFMkEpLAorICAgIFVMNjQoMHg1RkNCNkZBQjNBRDZGQUVDKSwgIFVMNjQoMHg2QzQ0MTk4QzRBNDc1ODE3KQorfTsKKwordm9pZCBtYmVkdGxzX3NoYTUxMl9wcm9jZXNzKCBtYmVkdGxzX3NoYTUxMl9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF0YVsxMjhdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50NjRfdCB0ZW1wMSwgdGVtcDIsIFdbODBdOworICAgIHVpbnQ2NF90IEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg7CisKKyNkZWZpbmUgIFNIUih4LG4pICh4ID4+IG4pCisjZGVmaW5lIFJPVFIoeCxuKSAoU0hSKHgsbikgfCAoeCA8PCAoNjQgLSBuKSkpCisKKyNkZWZpbmUgUzAoeCkgKFJPVFIoeCwgMSkgXiBST1RSKHgsIDgpIF4gIFNIUih4LCA3KSkKKyNkZWZpbmUgUzEoeCkgKFJPVFIoeCwxOSkgXiBST1RSKHgsNjEpIF4gIFNIUih4LCA2KSkKKworI2RlZmluZSBTMih4KSAoUk9UUih4LDI4KSBeIFJPVFIoeCwzNCkgXiBST1RSKHgsMzkpKQorI2RlZmluZSBTMyh4KSAoUk9UUih4LDE0KSBeIFJPVFIoeCwxOCkgXiBST1RSKHgsNDEpKQorCisjZGVmaW5lIEYwKHgseSx6KSAoKHggJiB5KSB8ICh6ICYgKHggfCB5KSkpCisjZGVmaW5lIEYxKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpCisKKyNkZWZpbmUgUChhLGIsYyxkLGUsZixnLGgseCxLKSAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wMSA9IGggKyBTMyhlKSArIEYxKGUsZixnKSArIEsgKyB4OyAgICAgIFwKKyAgICB0ZW1wMiA9IFMyKGEpICsgRjAoYSxiLGMpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBkICs9IHRlbXAxOyBoID0gdGVtcDEgKyB0ZW1wMjsgICAgICAgICAgICAgIFwKK30KKworICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICB7CisgICAgICAgIEdFVF9VSU5UNjRfQkUoIFdbaV0sIGRhdGEsIGkgPDwgMyApOworICAgIH0KKworICAgIGZvciggOyBpIDwgODA7IGkrKyApCisgICAgeworICAgICAgICBXW2ldID0gUzEoV1tpIC0gIDJdKSArIFdbaSAtICA3XSArCisgICAgICAgICAgICAgICBTMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOworICAgIH0KKworICAgIEEgPSBjdHgtPnN0YXRlWzBdOworICAgIEIgPSBjdHgtPnN0YXRlWzFdOworICAgIEMgPSBjdHgtPnN0YXRlWzJdOworICAgIEQgPSBjdHgtPnN0YXRlWzNdOworICAgIEUgPSBjdHgtPnN0YXRlWzRdOworICAgIEYgPSBjdHgtPnN0YXRlWzVdOworICAgIEcgPSBjdHgtPnN0YXRlWzZdOworICAgIEggPSBjdHgtPnN0YXRlWzddOworICAgIGkgPSAwOworCisgICAgZG8KKyAgICB7CisgICAgICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFdbaV0sIEtbaV0gKTsgaSsrOworICAgICAgICBQKCBILCBBLCBCLCBDLCBELCBFLCBGLCBHLCBXW2ldLCBLW2ldICk7IGkrKzsKKyAgICAgICAgUCggRywgSCwgQSwgQiwgQywgRCwgRSwgRiwgV1tpXSwgS1tpXSApOyBpKys7CisgICAgICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFdbaV0sIEtbaV0gKTsgaSsrOworICAgICAgICBQKCBFLCBGLCBHLCBILCBBLCBCLCBDLCBELCBXW2ldLCBLW2ldICk7IGkrKzsKKyAgICAgICAgUCggRCwgRSwgRiwgRywgSCwgQSwgQiwgQywgV1tpXSwgS1tpXSApOyBpKys7CisgICAgICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFdbaV0sIEtbaV0gKTsgaSsrOworICAgICAgICBQKCBCLCBDLCBELCBFLCBGLCBHLCBILCBBLCBXW2ldLCBLW2ldICk7IGkrKzsKKyAgICB9CisgICAgd2hpbGUoIGkgPCA4MCApOworCisgICAgY3R4LT5zdGF0ZVswXSArPSBBOworICAgIGN0eC0+c3RhdGVbMV0gKz0gQjsKKyAgICBjdHgtPnN0YXRlWzJdICs9IEM7CisgICAgY3R4LT5zdGF0ZVszXSArPSBEOworICAgIGN0eC0+c3RhdGVbNF0gKz0gRTsKKyAgICBjdHgtPnN0YXRlWzVdICs9IEY7CisgICAgY3R4LT5zdGF0ZVs2XSArPSBHOworICAgIGN0eC0+c3RhdGVbN10gKz0gSDsKK30KKyNlbmRpZiAvKiAhTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQgKi8KKworLyoKKyAqIFNIQS01MTIgcHJvY2VzcyBidWZmZXIKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMl91cGRhdGUoIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbGVuICkKK3sKKyAgICBzaXplX3QgZmlsbDsKKyAgICB1bnNpZ25lZCBpbnQgbGVmdDsKKworICAgIGlmKCBpbGVuID09IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBsZWZ0ID0gKHVuc2lnbmVkIGludCkgKGN0eC0+dG90YWxbMF0gJiAweDdGKTsKKyAgICBmaWxsID0gMTI4IC0gbGVmdDsKKworICAgIGN0eC0+dG90YWxbMF0gKz0gKHVpbnQ2NF90KSBpbGVuOworCisgICAgaWYoIGN0eC0+dG90YWxbMF0gPCAodWludDY0X3QpIGlsZW4gKQorICAgICAgICBjdHgtPnRvdGFsWzFdKys7CisKKyAgICBpZiggbGVmdCAmJiBpbGVuID49IGZpbGwgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgbWJlZHRsc19zaGE1MTJfcHJvY2VzcyggY3R4LCBjdHgtPmJ1ZmZlciApOworICAgICAgICBpbnB1dCArPSBmaWxsOworICAgICAgICBpbGVuICAtPSBmaWxsOworICAgICAgICBsZWZ0ID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSggaWxlbiA+PSAxMjggKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zaGE1MTJfcHJvY2VzcyggY3R4LCBpbnB1dCApOworICAgICAgICBpbnB1dCArPSAxMjg7CisgICAgICAgIGlsZW4gIC09IDEyODsKKyAgICB9CisKKyAgICBpZiggaWxlbiA+IDAgKQorICAgICAgICBtZW1jcHkoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCBpbnB1dCwgaWxlbiApOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcGFkZGluZ1sxMjhdID0KK3sKKyAweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qCisgKiBTSEEtNTEyIGZpbmFsIGRpZ2VzdAorICovCit2b2lkIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggbWJlZHRsc19zaGE1MTJfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjaGFyIG91dHB1dFs2NF0gKQoreworICAgIHNpemVfdCBsYXN0LCBwYWRuOworICAgIHVpbnQ2NF90IGhpZ2gsIGxvdzsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ2xlblsxNl07CisKKyAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDYxICkKKyAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7CisgICAgbG93ICA9ICggY3R4LT50b3RhbFswXSA8PCAgMyApOworCisgICAgUFVUX1VJTlQ2NF9CRSggaGlnaCwgbXNnbGVuLCAwICk7CisgICAgUFVUX1VJTlQ2NF9CRSggbG93LCAgbXNnbGVuLCA4ICk7CisKKyAgICBsYXN0ID0gKHNpemVfdCkoIGN0eC0+dG90YWxbMF0gJiAweDdGICk7CisgICAgcGFkbiA9ICggbGFzdCA8IDExMiApID8gKCAxMTIgLSBsYXN0ICkgOiAoIDI0MCAtIGxhc3QgKTsKKworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggY3R4LCBzaGE1MTJfcGFkZGluZywgcGFkbiApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggY3R4LCBtc2dsZW4sIDE2ICk7CisKKyAgICBQVVRfVUlOVDY0X0JFKCBjdHgtPnN0YXRlWzBdLCBvdXRwdXQsICAwICk7CisgICAgUFVUX1VJTlQ2NF9CRSggY3R4LT5zdGF0ZVsxXSwgb3V0cHV0LCAgOCApOworICAgIFBVVF9VSU5UNjRfQkUoIGN0eC0+c3RhdGVbMl0sIG91dHB1dCwgMTYgKTsKKyAgICBQVVRfVUlOVDY0X0JFKCBjdHgtPnN0YXRlWzNdLCBvdXRwdXQsIDI0ICk7CisgICAgUFVUX1VJTlQ2NF9CRSggY3R4LT5zdGF0ZVs0XSwgb3V0cHV0LCAzMiApOworICAgIFBVVF9VSU5UNjRfQkUoIGN0eC0+c3RhdGVbNV0sIG91dHB1dCwgNDAgKTsKKworICAgIGlmKCBjdHgtPmlzMzg0ID09IDAgKQorICAgIHsKKyAgICAgICAgUFVUX1VJTlQ2NF9CRSggY3R4LT5zdGF0ZVs2XSwgb3V0cHV0LCA0OCApOworICAgICAgICBQVVRfVUlOVDY0X0JFKCBjdHgtPnN0YXRlWzddLCBvdXRwdXQsIDU2ICk7CisgICAgfQorfQorCisjZW5kaWYgLyogIU1CRURUTFNfU0hBNTEyX0FMVCAqLworCisvKgorICogb3V0cHV0ID0gU0hBLTUxMiggaW5wdXQgYnVmZmVyICkKKyAqLwordm9pZCBtYmVkdGxzX3NoYTUxMiggY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzY0XSwgaW50IGlzMzg0ICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfc2hhNTEyX2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX3NoYTUxMl9zdGFydHMoICZjdHgsIGlzMzg0ICk7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmY3R4LCBpbnB1dCwgaWxlbiApOworICAgIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICk7CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZSggJmN0eCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIEZJUFMtMTgwLTIgdGVzdCB2ZWN0b3JzCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl90ZXN0X2J1ZlszXVsxMTNdID0KK3sKKyAgICB7ICJhYmMiIH0sCisgICAgeyAiYWJjZGVmZ2hiY2RlZmdoaWNkZWZnaGlqZGVmZ2hpamtlZmdoaWprbGZnaGlqa2xtZ2hpamtsbW4iCisgICAgICAiaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiIH0sCisgICAgeyAiIiB9Cit9OworCitzdGF0aWMgY29uc3QgaW50IHNoYTUxMl90ZXN0X2J1ZmxlblszXSA9Cit7CisgICAgMywgMTEyLCAxMDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfdGVzdF9zdW1bNl1bNjRdID0KK3sKKyAgICAvKgorICAgICAqIFNIQS0zODQgdGVzdCB2ZWN0b3JzCisgICAgICovCisgICAgeyAweENCLCAweDAwLCAweDc1LCAweDNGLCAweDQ1LCAweEEzLCAweDVFLCAweDhCLAorICAgICAgMHhCNSwgMHhBMCwgMHgzRCwgMHg2OSwgMHg5QSwgMHhDNiwgMHg1MCwgMHgwNywKKyAgICAgIDB4MjcsIDB4MkMsIDB4MzIsIDB4QUIsIDB4MEUsIDB4REUsIDB4RDEsIDB4NjMsCisgICAgICAweDFBLCAweDhCLCAweDYwLCAweDVBLCAweDQzLCAweEZGLCAweDVCLCAweEVELAorICAgICAgMHg4MCwgMHg4NiwgMHgwNywgMHgyQiwgMHhBMSwgMHhFNywgMHhDQywgMHgyMywKKyAgICAgIDB4NTgsIDB4QkEsIDB4RUMsIDB4QTEsIDB4MzQsIDB4QzgsIDB4MjUsIDB4QTcgfSwKKyAgICB7IDB4MDksIDB4MzMsIDB4MEMsIDB4MzMsIDB4RjcsIDB4MTEsIDB4NDcsIDB4RTgsCisgICAgICAweDNELCAweDE5LCAweDJGLCAweEM3LCAweDgyLCAweENELCAweDFCLCAweDQ3LAorICAgICAgMHg1MywgMHgxMSwgMHgxQiwgMHgxNywgMHgzQiwgMHgzQiwgMHgwNSwgMHhEMiwKKyAgICAgIDB4MkYsIDB4QTAsIDB4ODAsIDB4ODYsIDB4RTMsIDB4QjAsIDB4RjcsIDB4MTIsCisgICAgICAweEZDLCAweEM3LCAweEM3LCAweDFBLCAweDU1LCAweDdFLCAweDJELCAweEI5LAorICAgICAgMHg2NiwgMHhDMywgMHhFOSwgMHhGQSwgMHg5MSwgMHg3NCwgMHg2MCwgMHgzOSB9LAorICAgIHsgMHg5RCwgMHgwRSwgMHgxOCwgMHgwOSwgMHg3MSwgMHg2NCwgMHg3NCwgMHhDQiwKKyAgICAgIDB4MDgsIDB4NkUsIDB4ODMsIDB4NEUsIDB4MzEsIDB4MEEsIDB4NEEsIDB4MUMsCisgICAgICAweEVELCAweDE0LCAweDlFLCAweDlDLCAweDAwLCAweEYyLCAweDQ4LCAweDUyLAorICAgICAgMHg3OSwgMHg3MiwgMHhDRSwgMHhDNSwgMHg3MCwgMHg0QywgMHgyQSwgMHg1QiwKKyAgICAgIDB4MDcsIDB4QjgsIDB4QjMsIDB4REMsIDB4MzgsIDB4RUMsIDB4QzQsIDB4RUIsCisgICAgICAweEFFLCAweDk3LCAweERELCAweEQ4LCAweDdGLCAweDNELCAweDg5LCAweDg1IH0sCisKKyAgICAvKgorICAgICAqIFNIQS01MTIgdGVzdCB2ZWN0b3JzCisgICAgICovCisgICAgeyAweERELCAweEFGLCAweDM1LCAweEExLCAweDkzLCAweDYxLCAweDdBLCAweEJBLAorICAgICAgMHhDQywgMHg0MSwgMHg3MywgMHg0OSwgMHhBRSwgMHgyMCwgMHg0MSwgMHgzMSwKKyAgICAgIDB4MTIsIDB4RTYsIDB4RkEsIDB4NEUsIDB4ODksIDB4QTksIDB4N0UsIDB4QTIsCisgICAgICAweDBBLCAweDlFLCAweEVFLCAweEU2LCAweDRCLCAweDU1LCAweEQzLCAweDlBLAorICAgICAgMHgyMSwgMHg5MiwgMHg5OSwgMHgyQSwgMHgyNywgMHg0RiwgMHhDMSwgMHhBOCwKKyAgICAgIDB4MzYsIDB4QkEsIDB4M0MsIDB4MjMsIDB4QTMsIDB4RkUsIDB4RUIsIDB4QkQsCisgICAgICAweDQ1LCAweDRELCAweDQ0LCAweDIzLCAweDY0LCAweDNDLCAweEU4LCAweDBFLAorICAgICAgMHgyQSwgMHg5QSwgMHhDOSwgMHg0RiwgMHhBNSwgMHg0QywgMHhBNCwgMHg5RiB9LAorICAgIHsgMHg4RSwgMHg5NSwgMHg5QiwgMHg3NSwgMHhEQSwgMHhFMywgMHgxMywgMHhEQSwKKyAgICAgIDB4OEMsIDB4RjQsIDB4RjcsIDB4MjgsIDB4MTQsIDB4RkMsIDB4MTQsIDB4M0YsCisgICAgICAweDhGLCAweDc3LCAweDc5LCAweEM2LCAweEVCLCAweDlGLCAweDdGLCAweEExLAorICAgICAgMHg3MiwgMHg5OSwgMHhBRSwgMHhBRCwgMHhCNiwgMHg4OCwgMHg5MCwgMHgxOCwKKyAgICAgIDB4NTAsIDB4MUQsIDB4MjgsIDB4OUUsIDB4NDksIDB4MDAsIDB4RjcsIDB4RTQsCisgICAgICAweDMzLCAweDFCLCAweDk5LCAweERFLCAweEM0LCAweEI1LCAweDQzLCAweDNBLAorICAgICAgMHhDNywgMHhEMywgMHgyOSwgMHhFRSwgMHhCNiwgMHhERCwgMHgyNiwgMHg1NCwKKyAgICAgIDB4NUUsIDB4OTYsIDB4RTUsIDB4NUIsIDB4ODcsIDB4NEIsIDB4RTksIDB4MDkgfSwKKyAgICB7IDB4RTcsIDB4MTgsIDB4NDgsIDB4M0QsIDB4MEMsIDB4RTcsIDB4NjksIDB4NjQsCisgICAgICAweDRFLCAweDJFLCAweDQyLCAweEM3LCAweEJDLCAweDE1LCAweEI0LCAweDYzLAorICAgICAgMHg4RSwgMHgxRiwgMHg5OCwgMHhCMSwgMHgzQiwgMHgyMCwgMHg0NCwgMHgyOCwKKyAgICAgIDB4NTYsIDB4MzIsIDB4QTgsIDB4MDMsIDB4QUYsIDB4QTksIDB4NzMsIDB4RUIsCisgICAgICAweERFLCAweDBGLCAweEYyLCAweDQ0LCAweDg3LCAweDdFLCAweEE2LCAweDBBLAorICAgICAgMHg0QywgMHhCMCwgMHg0MywgMHgyQywgMHhFNSwgMHg3NywgMHhDMywgMHgxQiwKKyAgICAgIDB4RUIsIDB4MDAsIDB4OUMsIDB4NUMsIDB4MkMsIDB4NDksIDB4QUEsIDB4MkUsCisgICAgICAweDRFLCAweEFELCAweEIyLCAweDE3LCAweEFELCAweDhDLCAweEMwLCAweDlCIH0KK307CisKKy8qCisgKiBDaGVja3VwIHJvdXRpbmUKKyAqLworaW50IG1iZWR0bHNfc2hhNTEyX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpLCBqLCBrLCBidWZsZW4sIHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIHVuc2lnbmVkIGNoYXIgc2hhNTEyc3VtWzY0XTsKKyAgICBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IGN0eDsKKworICAgIGJ1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxMDI0LCBzaXplb2YodW5zaWduZWQgY2hhcikgKTsKKyAgICBpZiggTlVMTCA9PSBidWYgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIG1iZWR0bHNfc2hhNTEyX2luaXQoICZjdHggKTsKKworICAgIGZvciggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgIHsKKyAgICAgICAgaiA9IGkgJSAzOworICAgICAgICBrID0gaSA8IDM7CisKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgU0hBLSVkIHRlc3QgIyVkOiAiLCA1MTIgLSBrICogMTI4LCBqICsgMSApOworCisgICAgICAgIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cyggJmN0eCwgayApOworCisgICAgICAgIGlmKCBqID09IDIgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgJ2EnLCBidWZsZW4gPSAxMDAwICk7CisKKyAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCAxMDAwOyBqKysgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmN0eCwgYnVmLCBidWZsZW4gKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZjdHgsIHNoYTUxMl90ZXN0X2J1ZltqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTUxMl90ZXN0X2J1ZmxlbltqXSApOworCisgICAgICAgIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggJmN0eCwgc2hhNTEyc3VtICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggc2hhNTEyc3VtLCBzaGE1MTJfdGVzdF9zdW1baV0sIDY0IC0gayAqIDE2ICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGFzc2VkXG4iICk7CisgICAgfQorCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19zaGE1MTJfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jYWNoZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2MmRlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jYWNoZS5jCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogIFNTTCBzZXNzaW9uIGNhY2hlIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogVGhlc2Ugc2Vzc2lvbiBjYWxsYmFja3MgdXNlIGEgc2ltcGxlIGNoYWluZWQgbGlzdAorICogdG8gc3RvcmUgYW5kIHJldHJpZXZlIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uLgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jYWNoZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfaW5pdCggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUgKQoreworICAgIG1lbXNldCggY2FjaGUsIDAsIHNpemVvZiggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCApICk7CisKKyAgICBjYWNoZS0+dGltZW91dCA9IE1CRURUTFNfU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVDsKKyAgICBjYWNoZS0+bWF4X2VudHJpZXMgPSBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX01BWF9FTlRSSUVTOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJmNhY2hlLT5tdXRleCApOworI2VuZGlmCit9CisKK2ludCBtYmVkdGxzX3NzbF9jYWNoZV9nZXQoIHZvaWQgKmRhdGEsIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKQoreworICAgIGludCByZXQgPSAxOworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgbWJlZHRsc190aW1lX3QgdCA9IG1iZWR0bHNfdGltZSggTlVMTCApOworI2VuZGlmCisgICAgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUgPSAobWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqKSBkYXRhOworICAgIG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5ICpjdXIsICplbnRyeTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF9sb2NrKCAmY2FjaGUtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggMSApOworI2VuZGlmCisKKyAgICBjdXIgPSBjYWNoZS0+Y2hhaW47CisgICAgZW50cnkgPSBOVUxMOworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGVudHJ5ID0gY3VyOworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgICAgICBpZiggY2FjaGUtPnRpbWVvdXQgIT0gMCAmJgorICAgICAgICAgICAgKGludCkgKCB0IC0gZW50cnktPnRpbWVzdGFtcCApID4gY2FjaGUtPnRpbWVvdXQgKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKworICAgICAgICBpZiggc2Vzc2lvbi0+Y2lwaGVyc3VpdGUgIT0gZW50cnktPnNlc3Npb24uY2lwaGVyc3VpdGUgfHwKKyAgICAgICAgICAgIHNlc3Npb24tPmNvbXByZXNzaW9uICE9IGVudHJ5LT5zZXNzaW9uLmNvbXByZXNzaW9uIHx8CisgICAgICAgICAgICBzZXNzaW9uLT5pZF9sZW4gIT0gZW50cnktPnNlc3Npb24uaWRfbGVuICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmKCBtZW1jbXAoIHNlc3Npb24tPmlkLCBlbnRyeS0+c2Vzc2lvbi5pZCwKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnNlc3Npb24uaWRfbGVuICkgIT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtZW1jcHkoIHNlc3Npb24tPm1hc3RlciwgZW50cnktPnNlc3Npb24ubWFzdGVyLCA0OCApOworCisgICAgICAgIHNlc3Npb24tPnZlcmlmeV9yZXN1bHQgPSBlbnRyeS0+c2Vzc2lvbi52ZXJpZnlfcmVzdWx0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgICAgIC8qCisgICAgICAgICAqIFJlc3RvcmUgcGVlciBjZXJ0aWZpY2F0ZSAod2l0aG91dCByZXN0IG9mIHRoZSBvcmlnaW5hbCBjaGFpbikKKyAgICAgICAgICovCisgICAgICAgIGlmKCBlbnRyeS0+cGVlcl9jZXJ0LnAgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHNlc3Npb24tPnBlZXJfY2VydCA9IG1iZWR0bHNfY2FsbG9jKCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1iZWR0bHNfeDUwOV9jcnQpICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCBzZXNzaW9uLT5wZWVyX2NlcnQgKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCBzZXNzaW9uLT5wZWVyX2NlcnQsIGVudHJ5LT5wZWVyX2NlcnQucCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnBlZXJfY2VydC5sZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIHNlc3Npb24tPnBlZXJfY2VydCApOworICAgICAgICAgICAgICAgIHNlc3Npb24tPnBlZXJfY2VydCA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworICAgICAgICByZXQgPSAwOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCitleGl0OgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjYWNoZS0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0ID0gMTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX2NhY2hlX3NldCggdm9pZCAqZGF0YSwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiApCit7CisgICAgaW50IHJldCA9IDE7CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICBtYmVkdGxzX3RpbWVfdCB0ID0gdGltZSggTlVMTCApLCBvbGRlc3QgPSAwOworICAgIG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5ICpvbGQgPSBOVUxMOworI2VuZGlmCisgICAgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUgPSAobWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqKSBkYXRhOworICAgIG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5ICpjdXIsICpwcnY7CisgICAgaW50IGNvdW50ID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX211dGV4X2xvY2soICZjYWNoZS0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICBjdXIgPSBjYWNoZS0+Y2hhaW47CisgICAgcHJ2ID0gTlVMTDsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBjb3VudCsrOworCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAgICAgaWYoIGNhY2hlLT50aW1lb3V0ICE9IDAgJiYKKyAgICAgICAgICAgIChpbnQpICggdCAtIGN1ci0+dGltZXN0YW1wICkgPiBjYWNoZS0+dGltZW91dCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ci0+dGltZXN0YW1wID0gdDsKKyAgICAgICAgICAgIGJyZWFrOyAvKiBleHBpcmVkLCByZXVzZSB0aGlzIHNsb3QsIHVwZGF0ZSB0aW1lc3RhbXAgKi8KKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYoIG1lbWNtcCggc2Vzc2lvbi0+aWQsIGN1ci0+c2Vzc2lvbi5pZCwgY3VyLT5zZXNzaW9uLmlkX2xlbiApID09IDAgKQorICAgICAgICAgICAgYnJlYWs7IC8qIGNsaWVudCByZWNvbm5lY3RlZCwga2VlcCB0aW1lc3RhbXAgZm9yIHNlc3Npb24gaWQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgICAgIGlmKCBvbGRlc3QgPT0gMCB8fCBjdXItPnRpbWVzdGFtcCA8IG9sZGVzdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9sZGVzdCA9IGN1ci0+dGltZXN0YW1wOworICAgICAgICAgICAgb2xkID0gY3VyOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBwcnYgPSBjdXI7CisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICBpZiggY3VyID09IE5VTEwgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgICAgICAvKgorICAgICAgICAgKiBSZXVzZSBvbGRlc3QgZW50cnkgaWYgbWF4X2VudHJpZXMgcmVhY2hlZAorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGNvdW50ID49IGNhY2hlLT5tYXhfZW50cmllcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBvbGQgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1ciA9IG9sZDsKKyAgICAgICAgfQorI2Vsc2UgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogUmV1c2UgZmlyc3QgZW50cnkgaW4gY2hhaW4gaWYgbWF4X2VudHJpZXMgcmVhY2hlZCwKKyAgICAgICAgICogYnV0IG1vdmUgdG8gbGFzdCBwbGFjZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGNvdW50ID49IGNhY2hlLT5tYXhfZW50cmllcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBjYWNoZS0+Y2hhaW4gPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1ciA9IGNhY2hlLT5jaGFpbjsKKyAgICAgICAgICAgIGNhY2hlLT5jaGFpbiA9IGN1ci0+bmV4dDsKKyAgICAgICAgICAgIGN1ci0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICBwcnYtPm5leHQgPSBjdXI7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfVElNRSAqLworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBtYXhfZW50cmllcyBub3QgcmVhY2hlZCwgY3JlYXRlIG5ldyBlbnRyeQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjdXIgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5KSApOworICAgICAgICAgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHBydiA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBjYWNoZS0+Y2hhaW4gPSBjdXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJ2LT5uZXh0ID0gY3VyOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgICAgICBjdXItPnRpbWVzdGFtcCA9IHQ7CisjZW5kaWYKKyAgICB9CisKKyAgICBtZW1jcHkoICZjdXItPnNlc3Npb24sIHNlc3Npb24sIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAvKgorICAgICAqIElmIHdlJ3JlIHJldXNpbmcgYW4gZW50cnksIGZyZWUgaXRzIGNlcnRpZmljYXRlIGZpcnN0CisgICAgICovCisgICAgaWYoIGN1ci0+cGVlcl9jZXJ0LnAgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+cGVlcl9jZXJ0LnAgKTsKKyAgICAgICAgbWVtc2V0KCAmY3VyLT5wZWVyX2NlcnQsIDAsIHNpemVvZihtYmVkdGxzX3g1MDlfYnVmKSApOworICAgIH0KKworICAgIC8qCisgICAgICogU3RvcmUgcGVlciBjZXJ0aWZpY2F0ZQorICAgICAqLworICAgIGlmKCBzZXNzaW9uLT5wZWVyX2NlcnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBjdXItPnBlZXJfY2VydC5wID0gbWJlZHRsc19jYWxsb2MoIDEsIHNlc3Npb24tPnBlZXJfY2VydC0+cmF3LmxlbiApOworICAgICAgICBpZiggY3VyLT5wZWVyX2NlcnQucCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggY3VyLT5wZWVyX2NlcnQucCwgc2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcucCwKKyAgICAgICAgICAgICAgICBzZXNzaW9uLT5wZWVyX2NlcnQtPnJhdy5sZW4gKTsKKyAgICAgICAgY3VyLT5wZWVyX2NlcnQubGVuID0gc2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcubGVuOworCisgICAgICAgIGN1ci0+c2Vzc2lvbi5wZWVyX2NlcnQgPSBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmNhY2hlLT5tdXRleCApICE9IDAgKQorICAgICAgICByZXQgPSAxOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfc2V0X3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlLCBpbnQgdGltZW91dCApCit7CisgICAgaWYoIHRpbWVvdXQgPCAwICkgdGltZW91dCA9IDA7CisKKyAgICBjYWNoZS0+dGltZW91dCA9IHRpbWVvdXQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKwordm9pZCBtYmVkdGxzX3NzbF9jYWNoZV9zZXRfbWF4X2VudHJpZXMoIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgKmNhY2hlLCBpbnQgbWF4ICkKK3sKKyAgICBpZiggbWF4IDwgMCApIG1heCA9IDA7CisKKyAgICBjYWNoZS0+bWF4X2VudHJpZXMgPSBtYXg7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY2FjaGVfZnJlZSggbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCAqY2FjaGUgKQoreworICAgIG1iZWR0bHNfc3NsX2NhY2hlX2VudHJ5ICpjdXIsICpwcnY7CisKKyAgICBjdXIgPSBjYWNoZS0+Y2hhaW47CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgcHJ2ID0gY3VyOworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisKKyAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCAmcHJ2LT5zZXNzaW9uICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwcnYtPnBlZXJfY2VydC5wICk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwcnYgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9mcmVlKCAmY2FjaGUtPm11dGV4ICk7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NBQ0hFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jaXBoZXJzdWl0ZXMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jaXBoZXJzdWl0ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzYyYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX2NpcGhlcnN1aXRlcy5jCkBAIC0wLDAgKzEsMTg1NyBAQAorLyoqCisgKiBcZmlsZSBzc2xfY2lwaGVyc3VpdGVzLmMKKyAqCisgKiBcYnJpZWYgU1NMIGNpcGhlcnN1aXRlcyBmb3IgbWJlZCBUTFMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jaXBoZXJzdWl0ZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBPcmRlcmVkIGZyb20gbW9zdCBwcmVmZXJyZWQgdG8gbGVhc3QgcHJlZmVycmVkIGluIHRlcm1zIG9mIHNlY3VyaXR5LgorICoKKyAqIEN1cnJlbnQgcnVsZSAoZXhjZXB0IHJjNCwgd2VhayBhbmQgbnVsbCB3aGljaCBjb21lIGxhc3QpOgorICogMS4gQnkga2V5IGV4Y2hhbmdlOgorICogICAgRm9yd2FyZC1zZWN1cmUgbm9uLVBTSyA+IGZvcndhcmQtc2VjdXJlIFBTSyA+IEVDSlBBS0UgPiBvdGhlciBub24tUFNLID4gb3RoZXIgUFNLCisgKiAyLiBCeSBrZXkgbGVuZ3RoIGFuZCBjaXBoZXI6CisgKiAgICBBRVMtMjU2ID4gQ2FtZWxsaWEtMjU2ID4gQUVTLTEyOCA+IENhbWVsbGlhLTEyOCA+IDNERVMKKyAqIDMuIEJ5IGNpcGhlciBtb2RlIHdoZW4gcmVsZXZhbnQgR0NNID4gQ0NNID4gQ0JDID4gQ0NNXzgKKyAqIDQuIEJ5IGhhc2ggZnVuY3Rpb24gdXNlZCB3aGVuIHJlbGV2YW50CisgKiA1LiBCeSBrZXkgZXhjaGFuZ2UvYXV0aCBhZ2FpbjogRUMgPiBub24tRUMKKyAqLworc3RhdGljIGNvbnN0IGludCBjaXBoZXJzdWl0ZV9wcmVmZXJlbmNlW10gPQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTKQorICAgIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUywKKyNlbHNlCisgICAgLyogQWxsIEFFUy0yNTYgZXBoZW1lcmFsIHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ00sCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0NNLAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ01fOCwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCwKKworICAgIC8qIEFsbCBDQU1FTExJQS0yNTYgZXBoZW1lcmFsIHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSwKKworICAgIC8qIEFsbCBBRVMtMTI4IGVwaGVtZXJhbCBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNLAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNXzgsCisgICAgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzgsCisKKyAgICAvKiBBbGwgQ0FNRUxMSUEtMTI4IGVwaGVtZXJhbCBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEsCisKKyAgICAvKiBBbGwgcmVtYWluaW5nID49IDEyOC1iaXQgZXBoZW1lcmFsIHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCisgICAgLyogVGhlIFBTSyBlcGhlbWVyYWwgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ00sCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCwKKworICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0NNLAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgsCisKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCisgICAgLyogVGhlIEVDSlBBS0Ugc3VpdGUgKi8KKyAgICBNQkVEVExTX1RMU19FQ0pQQUtFX1dJVEhfQUVTXzEyOF9DQ01fOCwKKworICAgIC8qIEFsbCBBRVMtMjU2IHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTSwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNXzgsCisKKyAgICAvKiBBbGwgQ0FNRUxMSUEtMjU2IHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LAorCisgICAgLyogQWxsIEFFUy0xMjggc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNLAorICAgIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOCwKKworICAgIC8qIEFsbCBDQU1FTExJQS0xMjggc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisKKyAgICAvKiBBbGwgcmVtYWluaW5nID49IDEyOC1iaXQgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsCisKKyAgICAvKiBUaGUgUlNBIFBTSyBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LAorCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwKKworICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCisgICAgLyogVGhlIFBTSyBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ00sCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTV84LAorCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNLAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOCwKKworICAgIE1CRURUTFNfVExTX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEsCisKKyAgICAvKiBSQzQgc3VpdGVzICovCisgICAgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9SQzRfMTI4X1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUsCisgICAgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBLAorICAgIE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBLAorCisgICAgLyogV2VhayBzdWl0ZXMgKi8KKyAgICBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEsCisgICAgTUJFRFRMU19UTFNfUlNBX1dJVEhfREVTX0NCQ19TSEEsCisKKyAgICAvKiBOVUxMIHN1aXRlcyAqLworICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYsCisgICAgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEsCisgICAgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0LAorICAgIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEsCisKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQSwKKyAgICBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX01ENSwKKyAgICBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBLAorICAgIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQSwKKyAgICBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEzODQsCisgICAgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMjU2LAorICAgIE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQSwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTM4NCwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTI1NiwKKyAgICBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQSwKKworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUyAqLworICAgIDAKK307CisKK3N0YXRpYyBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90IGNpcGhlcnN1aXRlX2RlZmluaXRpb25zW10gPQoreworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNLCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNXzgsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgfSwKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ00sICJUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNDTSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ01fOCwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0xMjgtQ0NNLTgiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREhFLUVDRFNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1FQ0RIRS1FQ0RTQS1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtRUNESEUtRUNEU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1SQzQtMTI4LVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEsICJUTFMtRUNESEUtRUNEU0EtV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtRUNESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtRUNESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtRUNESEUtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREhFLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESEUtUlNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREhFLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0FNRUxMSUFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtRUNESEUtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19ERVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtRUNESEUtUlNBLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEEsICJUTFMtRUNESEUtUlNBLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUiAqLworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKSAmJiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICYmIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYsICJUTFMtREhFLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTSwgIlRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTV84LCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNLCAiVExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNDTSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzgsICJUTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0NNLTgiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLURIRS1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTI1NiwgIlRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEsICJUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSwgIlRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtREhFLVJTQS1XSVRILTNERVMtRURFLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpICYmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwgIlRMUy1SU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgJiYgTUJFRFRMU19HQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMUy1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsICJUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2LCAiVExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwgIlRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ00sICJUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCwgIlRMUy1SU0EtV0lUSC1BRVMtMjU2LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTSwgIlRMUy1SU0EtV0lUSC1BRVMtMTI4LUNDTSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTV84LCAiVExTLVJTQS1XSVRILUFFUy0xMjgtQ0NNLTgiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcgfSwKKyNlbmRpZiAvKiBNQkVEVExTX0NDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BRVNfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwgIlRMUy1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYsICJUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBLCAiVExTLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEsICJUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1SU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgIlRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX1JDNF8xMjhfTUQ1LCAiVExTLVJTQS1XSVRILVJDNC0xMjgtTUQ1IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCBNQkVEVExTX01EX01ENSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQSwgIlRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtRUNESC1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtRUNESC1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLUVDREgtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtRUNESC1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREgtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtRUNESC1SU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESC1SU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLUVDREgtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LCAiVExTLUVDREgtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1FQ0RILVJTQS1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtRUNESC1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtRUNESC1SU0EtV0lUSC1SQzQtMTI4LVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfTlVMTF9TSEEsICJUTFMtRUNESC1SU0EtV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsICJUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsICJUTFMtRUNESC1FQ0RTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsICJUTFMtRUNESC1FQ0RTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LCAiVExTLUVDREgtRUNEU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQSwgIlRMUy1FQ0RILUVDRFNBLVdJVEgtTlVMTC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsICJUTFMtUFNLLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsICJUTFMtUFNLLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsICJUTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsICJUTFMtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNLCAiVExTLVBTSy1XSVRILUFFUy0yNTYtQ0NNIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNXzgsICJUTFMtUFNLLVdJVEgtQUVTLTI1Ni1DQ00tOCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ00sICJUTFMtUFNLLVdJVEgtQUVTLTEyOC1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOCwgIlRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsICJUTFMtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYsICJUTFMtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQsICJUTFMtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBLCAiVExTLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1BTS19XSVRIX1JDNF8xMjhfU0hBLCAiVExTLVBTSy1XSVRILVJDNC0xMjgtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LCAiVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LCAiVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ00sIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2LCAiVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMsIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0LCAiVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMzg0LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCAiVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTSwgIlRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQ00iLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTV84LCAiVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUNDTS04IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyB9LAorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0NNLCAiVExTLURIRS1QU0stV0lUSC1BRVMtMTI4LUNDTSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0NNXzgsICJUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2LCAiVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0LCAiVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2LCAiVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0LCAiVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgIlRMUy1ESEUtUFNLLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSwgIlRMUy1ESEUtUFNLLVdJVEgtUkM0LTEyOC1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX05PRFRMUyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESEUtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQsICJUTFMtRUNESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCAiVExTLUVDREhFLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEsICJUTFMtRUNESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYsICJUTFMtRUNESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQsICJUTFMtRUNESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgIlRMUy1FQ0RIRS1QU0stV0lUSC0zREVTLUVERS1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSwgIlRMUy1FQ0RIRS1QU0stV0lUSC1SQzQtMTI4LVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCwgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwgIlRMUy1SU0EtUFNLLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwgIlRMUy1SU0EtUFNLLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiwgIlRMUy1SU0EtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCwgIlRMUy1SU0EtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICAwIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEsICJUTFMtUlNBLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQywgTUJFRFRMU19NRF9TSEExLCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIDAgfSwKKworICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSwgIlRMUy1SU0EtUFNLLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiwgIlRMUy1SU0EtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQywgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCwgIlRMUy1SU0EtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQywgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiwgIlRMUy1SU0EtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTSwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCwgIlRMUy1SU0EtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTSwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0dDTV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEsICJUTFMtUlNBLVBTSy1XSVRILTNERVMtRURFLUNCQy1TSEEiLAorICAgICAgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgMCB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0RFU19DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEsICJUTFMtUlNBLVBTSy1XSVRILVJDNC0xMjgtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4LCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIHsgTUJFRFRMU19UTFNfRUNKUEFLRV9XSVRIX0FFU18xMjhfQ0NNXzgsICJUTFMtRUNKUEFLRS1XSVRILUFFUy0xMjgtQ0NNLTgiLAorICAgICAgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ00sIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfU0hPUlRfVEFHIH0sCisjZW5kaWYgLyogTUJFRFRMU19DQ01fQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfTUQ1LCAiVExTLVJTQS1XSVRILU5VTEwtTUQ1IiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfTUQ1LCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQSwgIlRMUy1SU0EtV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9TSEEyNTYsICJUTFMtUlNBLVdJVEgtTlVMTC1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQSwgIlRMUy1QU0stV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEyNTYsICJUTFMtUFNLLVdJVEgtTlVMTC1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEzODQsICJUTFMtUFNLLVdJVEgtTlVMTC1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBLCAiVExTLURIRS1QU0stV0lUSC1OVUxMLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NiwgIlRMUy1ESEUtUFNLLVdJVEgtTlVMTC1TSEEyNTYiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICB7IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NCwgIlRMUy1ESEUtUFNLLVdJVEgtTlVMTC1TSEEzODQiLAorICAgICAgTUJFRFRMU19DSVBIRVJfTlVMTCwgTUJFRFRMU19NRF9TSEEzODQsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0ssCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBLCAiVExTLUVDREhFLVBTSy1XSVRILU5VTEwtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTI1NiwgIlRMUy1FQ0RIRS1QU0stV0lUSC1OVUxMLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgeyBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NCwgIlRMUy1FQ0RIRS1QU0stV0lUSC1OVUxMLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgeyBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEsICJUTFMtUlNBLVBTSy1XSVRILU5VTEwtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05VTEwsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMjU2LCAiVExTLVJTQS1QU0stV0lUSC1OVUxMLVNIQTI1NiIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTI1NiwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIHsgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMzg0LCAiVExTLVJTQS1QU0stV0lUSC1OVUxMLVNIQTM4NCIsCisgICAgICBNQkVEVExTX0NJUEhFUl9OVUxMLCBNQkVEVExTX01EX1NIQTM4NCwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSywKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMsCisgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1dFQUsgfSwKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCAqLworI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIHsgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0RFU19DQkNfU0hBLCAiVExTLURIRS1SU0EtV0lUSC1ERVMtQ0JDLVNIQSIsCisgICAgICBNQkVEVExTX0NJUEhFUl9ERVNfQ0JDLCBNQkVEVExTX01EX1NIQTEsIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCwKKyAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLIH0sCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICB7IE1CRURUTFNfVExTX1JTQV9XSVRIX0RFU19DQkNfU0hBLCAiVExTLVJTQS1XSVRILURFUy1DQkMtU0hBIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX0RFU19DQkMsIE1CRURUTFNfTURfU0hBMSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBLAorICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAsCisgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMywKKyAgICAgIE1CRURUTFNfQ0lQSEVSU1VJVEVfV0VBSyB9LAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUyAqLworCisgICAgeyAwLCAiIiwKKyAgICAgIE1CRURUTFNfQ0lQSEVSX05PTkUsIE1CRURUTFNfTURfTk9ORSwgTUJFRFRMU19LRVlfRVhDSEFOR0VfTk9ORSwKKyAgICAgIDAsIDAsIDAsIDAsIDAgfQorfTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTKQorY29uc3QgaW50ICptYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcyggdm9pZCApCit7CisgICAgcmV0dXJuKCBjaXBoZXJzdWl0ZV9wcmVmZXJlbmNlICk7Cit9CisjZWxzZQorI2RlZmluZSBNQVhfQ0lQSEVSU1VJVEVTICAgIHNpemVvZiggY2lwaGVyc3VpdGVfZGVmaW5pdGlvbnMgICAgICkgLyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGNpcGhlcnN1aXRlX2RlZmluaXRpb25zWzBdICApCitzdGF0aWMgaW50IHN1cHBvcnRlZF9jaXBoZXJzdWl0ZXNbTUFYX0NJUEhFUlNVSVRFU107CitzdGF0aWMgaW50IHN1cHBvcnRlZF9pbml0ID0gMDsKKworY29uc3QgaW50ICptYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcyggdm9pZCApCit7CisgICAgLyoKKyAgICAgKiBPbiBpbml0aWFsIGNhbGwgZmlsdGVyIG91dCBhbGwgY2lwaGVyc3VpdGVzIG5vdCBzdXBwb3J0ZWQgYnkgY3VycmVudAorICAgICAqIGJ1aWxkIGJhc2VkIG9uIHByZXNlbmNlIGluIHRoZSBjaXBoZXJzdWl0ZV9kZWZpbml0aW9ucy4KKyAgICAgKi8KKyAgICBpZiggc3VwcG9ydGVkX2luaXQgPT0gMCApCisgICAgeworICAgICAgICBjb25zdCBpbnQgKnA7CisgICAgICAgIGludCAqcTsKKworICAgICAgICBmb3IoIHAgPSBjaXBoZXJzdWl0ZV9wcmVmZXJlbmNlLCBxID0gc3VwcG9ydGVkX2NpcGhlcnN1aXRlczsKKyAgICAgICAgICAgICAqcCAhPSAwICYmIHEgPCBzdXBwb3J0ZWRfY2lwaGVyc3VpdGVzICsgTUFYX0NJUEhFUlNVSVRFUyAtIDE7CisgICAgICAgICAgICAgcCsrICkKKyAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMpCisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjc19pbmZvOworICAgICAgICAgICAgaWYoICggY3NfaW5mbyA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoICpwICkgKSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgY3NfaW5mby0+Y2lwaGVyICE9IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4ICkKKyNlbHNlCisgICAgICAgICAgICBpZiggbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggKnAgKSAhPSBOVUxMICkKKyNlbmRpZgorICAgICAgICAgICAgICAgICoocSsrKSA9ICpwOworICAgICAgICB9CisgICAgICAgICpxID0gMDsKKworICAgICAgICBzdXBwb3J0ZWRfaW5pdCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuKCBzdXBwb3J0ZWRfY2lwaGVyc3VpdGVzICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0lQSEVSU1VJVEVTICovCisKK2NvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKm1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY2lwaGVyc3VpdGVfbmFtZSApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY3VyID0gY2lwaGVyc3VpdGVfZGVmaW5pdGlvbnM7CisKKyAgICBpZiggTlVMTCA9PSBjaXBoZXJzdWl0ZV9uYW1lICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICB3aGlsZSggY3VyLT5pZCAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCAwID09IHN0cmNtcCggY3VyLT5uYW1lLCBjaXBoZXJzdWl0ZV9uYW1lICkgKQorICAgICAgICAgICAgcmV0dXJuKCBjdXIgKTsKKworICAgICAgICBjdXIrKzsKKyAgICB9CisKKyAgICByZXR1cm4oIE5VTEwgKTsKK30KKworY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggaW50IGNpcGhlcnN1aXRlICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjdXIgPSBjaXBoZXJzdWl0ZV9kZWZpbml0aW9uczsKKworICAgIHdoaWxlKCBjdXItPmlkICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGN1ci0+aWQgPT0gY2lwaGVyc3VpdGUgKQorICAgICAgICAgICAgcmV0dXJuKCBjdXIgKTsKKworICAgICAgICBjdXIrKzsKKyAgICB9CisKKyAgICByZXR1cm4oIE5VTEwgKTsKK30KKworY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoIGNvbnN0IGludCBjaXBoZXJzdWl0ZV9pZCApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY3VyOworCisgICAgY3VyID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggY2lwaGVyc3VpdGVfaWQgKTsKKworICAgIGlmKCBjdXIgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggInVua25vd24iICk7CisKKyAgICByZXR1cm4oIGN1ci0+bmFtZSApOworfQorCitpbnQgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkKCBjb25zdCBjaGFyICpjaXBoZXJzdWl0ZV9uYW1lICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjdXI7CisKKyAgICBjdXIgPSBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX3N0cmluZyggY2lwaGVyc3VpdGVfbmFtZSApOworCisgICAgaWYoIGN1ciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICByZXR1cm4oIGN1ci0+aWQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19DKQorbWJlZHRsc19wa190eXBlX3QgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX3NpZ19wa19hbGcoIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmluZm8gKQoreworICAgIHN3aXRjaCggaW5mby0+a2V5X2V4Y2hhbmdlICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0E6CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0s6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfUlNBICk7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQToKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19QS19FQ0RTQSApOworCisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0E6CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQToKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19QS19FQ0tFWSApOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfTk9ORSApOworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQoraW50IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfZWMoIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmluZm8gKQoreworICAgIHN3aXRjaCggaW5mby0+a2V5X2V4Y2hhbmdlICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSzoKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQToKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBOgorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDREhfQyB8fCBNQkVEVExTX0VDRFNBX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQoraW50IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3VzZXNfcHNrKCBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICppbmZvICkKK3sKKyAgICBzd2l0Y2goIGluZm8tPmtleV9leGNoYW5nZSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSzoKKyAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLOgorICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0s6CisgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLOgorICAgICAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RMU19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2xpLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfY2xpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzODIzYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jbGkuYwpAQCAtMCwwICsxLDM0MDUgQEAKKy8qCisgKiAgU1NMdjMvVExTdjEgY2xpZW50LXNpZGUgZnVuY3Rpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgIGZyZWUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2xfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm1fdGltZS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9ob3N0bmFtZV9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgc2l6ZV90IGhvc3RuYW1lX2xlbjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPmhvc3RuYW1lID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIHNlcnZlciBuYW1lIGV4dGVuc2lvbjogJXMiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aG9zdG5hbWUgKSApOworCisgICAgaG9zdG5hbWVfbGVuID0gc3RybGVuKCBzc2wtPmhvc3RuYW1lICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgaG9zdG5hbWVfbGVuICsgOSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgTmFtZVR5cGUgbmFtZV90eXBlOworICAgICAqICAgICBzZWxlY3QgKG5hbWVfdHlwZSkgeworICAgICAqICAgICAgICAgY2FzZSBob3N0X25hbWU6IEhvc3ROYW1lOworICAgICAqICAgICB9IG5hbWU7CisgICAgICogfSBTZXJ2ZXJOYW1lOworICAgICAqCisgICAgICogZW51bSB7CisgICAgICogICAgIGhvc3RfbmFtZSgwKSwgKDI1NSkKKyAgICAgKiB9IE5hbWVUeXBlOworICAgICAqCisgICAgICogb3BhcXVlIEhvc3ROYW1lPDEuLjJeMTYtMT47CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBTZXJ2ZXJOYW1lIHNlcnZlcl9uYW1lX2xpc3Q8MS4uMl4xNi0xPgorICAgICAqIH0gU2VydmVyTmFtZUxpc3Q7CisgICAgICovCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0VSVkVSTkFNRSA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0VSVkVSTkFNRSAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIChob3N0bmFtZV9sZW4gKyA1KSA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoaG9zdG5hbWVfbGVuICsgNSkgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoaG9zdG5hbWVfbGVuICsgMykgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKGhvc3RuYW1lX2xlbiArIDMpICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUVfSE9TVE5BTUUgKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGhvc3RuYW1lX2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBob3N0bmFtZV9sZW4gICAgICApICYgMHhGRiApOworCisgICAgbWVtY3B5KCBwLCBzc2wtPmhvc3RuYW1lLCBob3N0bmFtZV9sZW4gKTsKKworICAgICpvbGVuID0gaG9zdG5hbWVfbGVuICsgOTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfcmVuZWdvdGlhdGlvbl9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworCisgICAgKm9sZW4gPSAwOworCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICAgICAgcmV0dXJuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgKSApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDUgKyBzc2wtPnZlcmlmeV9kYXRhX2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogU2VjdXJlIHJlbmVnb3RpYXRpb24KKyAgICAgKi8KKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk8gPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1JFTkVHT1RJQVRJT05fSU5GTyAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gKCBzc2wtPnZlcmlmeV9kYXRhX2xlbiArIDEgKSAmIDB4RkY7CisgICAgKnArKyA9IHNzbC0+dmVyaWZ5X2RhdGFfbGVuICYgMHhGRjsKKworICAgIG1lbWNweSggcCwgc3NsLT5vd25fdmVyaWZ5X2RhdGEsIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICk7CisKKyAgICAqb2xlbiA9IDUgKyBzc2wtPnZlcmlmeV9kYXRhX2xlbjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKy8qCisgKiBPbmx5IGlmIHdlIGhhbmRsZSBhdCBsZWFzdCBvbmUga2V5IGV4Y2hhbmdlIHRoYXQgbmVlZHMgc2lnbmF0dXJlcy4KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX3NpZ25hdHVyZV9hbGdvcml0aG1zX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKyAgICBzaXplX3Qgc2lnX2FsZ19sZW4gPSAwOworICAgIGNvbnN0IGludCAqbWQ7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICB1bnNpZ25lZCBjaGFyICpzaWdfYWxnX2xpc3QgPSBidWYgKyA2OworI2VuZGlmCisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyICE9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgICAgIHJldHVybjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgc2lnbmF0dXJlX2FsZ29yaXRobXMgZXh0ZW5zaW9uIiApICk7CisKKyAgICBmb3IoIG1kID0gc3NsLT5jb25mLT5zaWdfaGFzaGVzOyAqbWQgIT0gTUJFRFRMU19NRF9OT05FOyBtZCsrICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgICAgIHNpZ19hbGdfbGVuICs9IDI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgICAgIHNpZ19hbGdfbGVuICs9IDI7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgc2lnX2FsZ19sZW4gKyA2ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYnVmZmVyIHRvbyBzbWFsbCIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIHNpZ25hdHVyZV9hbGdvcml0aG1zIGV4dGVuc2lvbiAoVExTIDEuMikKKyAgICAgKi8KKyAgICBzaWdfYWxnX2xlbiA9IDA7CisKKyAgICBmb3IoIG1kID0gc3NsLT5jb25mLT5zaWdfaGFzaGVzOyAqbWQgIT0gTUJFRFRMU19NRF9OT05FOyBtZCsrICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgICAgIHNpZ19hbGdfbGlzdFtzaWdfYWxnX2xlbisrXSA9IG1iZWR0bHNfc3NsX2hhc2hfZnJvbV9tZF9hbGcoICptZCApOworICAgICAgICBzaWdfYWxnX2xpc3Rbc2lnX2FsZ19sZW4rK10gPSBNQkVEVExTX1NTTF9TSUdfRUNEU0E7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgICAgIHNpZ19hbGdfbGlzdFtzaWdfYWxnX2xlbisrXSA9IG1iZWR0bHNfc3NsX2hhc2hfZnJvbV9tZF9hbGcoICptZCApOworICAgICAgICBzaWdfYWxnX2xpc3Rbc2lnX2FsZ19sZW4rK10gPSBNQkVEVExTX1NTTF9TSUdfUlNBOworI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBlbnVtIHsKKyAgICAgKiAgICAgbm9uZSgwKSwgbWQ1KDEpLCBzaGExKDIpLCBzaGEyMjQoMyksIHNoYTI1Nig0KSwgc2hhMzg0KDUpLAorICAgICAqICAgICBzaGE1MTIoNiksICgyNTUpCisgICAgICogfSBIYXNoQWxnb3JpdGhtOworICAgICAqCisgICAgICogZW51bSB7IGFub255bW91cygwKSwgcnNhKDEpLCBkc2EoMiksIGVjZHNhKDMpLCAoMjU1KSB9CisgICAgICogICBTaWduYXR1cmVBbGdvcml0aG07CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBIYXNoQWxnb3JpdGhtIGhhc2g7CisgICAgICogICAgIFNpZ25hdHVyZUFsZ29yaXRobSBzaWduYXR1cmU7CisgICAgICogfSBTaWduYXR1cmVBbmRIYXNoQWxnb3JpdGhtOworICAgICAqCisgICAgICogU2lnbmF0dXJlQW5kSGFzaEFsZ29yaXRobQorICAgICAqICAgc3VwcG9ydGVkX3NpZ25hdHVyZV9hbGdvcml0aG1zPDIuLjJeMTYtMj47CisgICAgICovCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0lHX0FMRyA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0lHX0FMRyAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoICggc2lnX2FsZ19sZW4gKyAyICkgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggKCBzaWdfYWxnX2xlbiArIDIgKSAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIHNpZ19hbGdfbGVuID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIHNpZ19hbGdfbGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgICpvbGVuID0gNiArIHNpZ19hbGdfbGVuOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAmJgorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfc3VwcG9ydGVkX2VsbGlwdGljX2N1cnZlc19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworICAgIHVuc2lnbmVkIGNoYXIgKmVsbGlwdGljX2N1cnZlX2xpc3QgPSBwICsgNjsKKyAgICBzaXplX3QgZWxsaXB0aWNfY3VydmVfbGVuID0gMDsKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICppbmZvOworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cF9pZCAqZ3JwX2lkOworI2Vsc2UKKyAgICAoKHZvaWQpIHNzbCk7CisjZW5kaWYKKworICAgICpvbGVuID0gMDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgc3VwcG9ydGVkX2VsbGlwdGljX2N1cnZlcyBleHRlbnNpb24iICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBmb3IoIGdycF9pZCA9IHNzbC0+Y29uZi0+Y3VydmVfbGlzdDsgKmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOyBncnBfaWQrKyApCisgICAgeworICAgICAgICBpbmZvID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggKmdycF9pZCApOworI2Vsc2UKKyAgICBmb3IoIGluZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7IGluZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOyBpbmZvKysgKQorICAgIHsKKyNlbmRpZgorICAgICAgICBpZiggaW5mbyA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbnZhbGlkIGN1cnZlIGluIHNzbCBjb25maWd1cmF0aW9uIiApICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbGxpcHRpY19jdXJ2ZV9sZW4gKz0gMjsKKyAgICB9CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgNiArIGVsbGlwdGljX2N1cnZlX2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVsbGlwdGljX2N1cnZlX2xlbiA9IDA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgZm9yKCBncnBfaWQgPSBzc2wtPmNvbmYtPmN1cnZlX2xpc3Q7ICpncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsgZ3JwX2lkKysgKQorICAgIHsKKyAgICAgICAgaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoICpncnBfaWQgKTsKKyNlbHNlCisgICAgZm9yKCBpbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOyBpbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsgaW5mbysrICkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgZWxsaXB0aWNfY3VydmVfbGlzdFtlbGxpcHRpY19jdXJ2ZV9sZW4rK10gPSBpbmZvLT50bHNfaWQgPj4gODsKKyAgICAgICAgZWxsaXB0aWNfY3VydmVfbGlzdFtlbGxpcHRpY19jdXJ2ZV9sZW4rK10gPSBpbmZvLT50bHNfaWQgJiAweEZGOworICAgIH0KKworICAgIGlmKCBlbGxpcHRpY19jdXJ2ZV9sZW4gPT0gMCApCisgICAgICAgIHJldHVybjsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoIGVsbGlwdGljX2N1cnZlX2xlbiArIDIgKSA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCAoIGVsbGlwdGljX2N1cnZlX2xlbiArIDIgKSAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoICggZWxsaXB0aWNfY3VydmVfbGVuICAgICApID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoICggZWxsaXB0aWNfY3VydmVfbGVuICAgICApICAgICAgKSAmIDB4RkYgKTsKKworICAgICpvbGVuID0gNiArIGVsbGlwdGljX2N1cnZlX2xlbjsKK30KKworc3RhdGljIHZvaWQgc3NsX3dyaXRlX3N1cHBvcnRlZF9wb2ludF9mb3JtYXRzX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICpvbGVuID0gMDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHMgZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgNiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUyAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gMjsKKworICAgICpwKysgPSAxOworICAgICpwKysgPSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQ7CisKKyAgICAqb2xlbiA9IDY7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DIHx8IAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfZWNqcGFrZV9ra3BwX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgc2l6ZV90IGtrcHBfbGVuOworCisgICAgKm9sZW4gPSAwOworCisgICAgLyogU2tpcCBjb3N0bHkgZXh0ZW5zaW9uIGlmIHdlIGNhbid0IHVzZSBFQyBKLVBBS0UgYW55d2F5ICovCisgICAgaWYoIG1iZWR0bHNfZWNqcGFrZV9jaGVjayggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCApICE9IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIGVjanBha2Vfa2twcCBleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgLSBwIDwgNCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfRUNKUEFLRV9LS1BQICAgICAgKSAmIDB4RkYgKTsKKworICAgIC8qCisgICAgICogV2UgbWF5IG5lZWQgdG8gc2VuZCBDbGllbnRIZWxsbyBtdWx0aXBsZSB0aW1lcyBmb3IgSGVsbG8gdmVyaWZpY2F0aW9uLgorICAgICAqIFdlIGRvbid0IHdhbnQgdG8gY29tcHV0ZSBmcmVzaCB2YWx1ZXMgZXZlcnkgdGltZSAoYm90aCBmb3IgcGVyZm9ybWFuY2UKKyAgICAgKiBhbmQgY29uc2lzdGVuY3kgcmVhc29ucyksIHNvIGNhY2hlIHRoZSBleHRlbnNpb24gY29udGVudC4KKyAgICAgKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGUgPT0gTlVMTCB8fAorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZV9sZW4gPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImdlbmVyYXRpbmcgbmV3IGVjanBha2UgcGFyYW1ldGVycyIgKSApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF9vbmUoICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArIDIsIGVuZCAtIHAgLSAyLCAma2twcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEgLCAibWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX29uZSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGUgPSBtYmVkdGxzX2NhbGxvYyggMSwga2twcF9sZW4gKTsKKyAgICAgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jYXRpb24gZmFpbGVkIiApICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlLCBwICsgMiwga2twcF9sZW4gKTsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGVfbGVuID0ga2twcF9sZW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAicmUtdXNpbmcgY2FjaGVkIGVjanBha2UgcGFyYW1ldGVycyIgKSApOworCisgICAgICAgIGtrcHBfbGVuID0gc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY2FjaGVfbGVuOworCisgICAgICAgIGlmKCAoc2l6ZV90KSggZW5kIC0gcCAtIDIgKSA8IGtrcHBfbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoIHAgKyAyLCBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZSwga2twcF9sZW4gKTsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGtrcHBfbGVuID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIGtrcHBfbGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgICpvbGVuID0ga2twcF9sZW4gKyA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX21heF9mcmFnbWVudF9sZW5ndGhfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYtPm1mbF9jb2RlID09IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FICkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgKSApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJidWZmZXIgdG9vIHNtYWxsIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9NQVhfRlJBR01FTlRfTEVOR1RIID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9NQVhfRlJBR01FTlRfTEVOR1RIICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAxOworCisgICAgKnArKyA9IHNzbC0+Y29uZi0+bWZsX2NvZGU7CisKKyAgICAqb2xlbiA9IDU7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV90cnVuY2F0ZWRfaG1hY19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYtPnRydW5jX2htYWMgPT0gTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19ESVNBQkxFRCApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyB0cnVuY2F0ZWRfaG1hYyBleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCA0ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYnVmZmVyIHRvbyBzbWFsbCIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVFJVTkNBVEVEX0hNQUMgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAweDAwOworICAgICpwKysgPSAweDAwOworCisgICAgKm9sZW4gPSA0OworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfZW5jcnlwdF90aGVuX21hY19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYtPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVRNX0RJU0FCTEVEIHx8CisgICAgICAgIHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZW5jcnlwdF90aGVuX21hYyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgNCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDB4MDA7CisKKyAgICAqb2xlbiA9IDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2V4dGVuZGVkX21zX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworCisgICAgKm9sZW4gPSAwOworCisgICAgaWYoIHNzbC0+Y29uZi0+ZXh0ZW5kZWRfbXMgPT0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQgfHwKKyAgICAgICAgc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZGluZyBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCA0ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYnVmZmVyIHRvbyBzbWFsbCIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gMHgwMDsKKworICAgICpvbGVuID0gNDsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9zZXNzaW9uX3RpY2tldF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKyAgICBzaXplX3QgdGxlbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldF9sZW47CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggc3NsLT5jb25mLT5zZXNzaW9uX3RpY2tldHMgPT0gTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgKSApOworCisgICAgaWYoIGVuZCA8IHAgfHwgKHNpemVfdCkoIGVuZCAtIHAgKSA8IDQgKyB0bGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYnVmZmVyIHRvbyBzbWFsbCIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NFU1NJT05fVElDS0VUICAgICAgKSAmIDB4RkYgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggdGxlbiA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCB0bGVuICAgICAgKSAmIDB4RkYgKTsKKworICAgICpvbGVuID0gNDsKKworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXQgPT0gTlVMTCB8fCB0bGVuID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VuZGluZyBzZXNzaW9uIHRpY2tldCBvZiBsZW5ndGggJWQiLCB0bGVuICkgKTsKKworICAgIG1lbWNweSggcCwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0LCB0bGVuICk7CisKKyAgICAqb2xlbiArPSB0bGVuOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2FscG5fZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKyAgICBzaXplX3QgYWxwbmxlbiA9IDA7CisgICAgY29uc3QgY2hhciAqKmN1cjsKKworICAgICpvbGVuID0gMDsKKworICAgIGlmKCBzc2wtPmNvbmYtPmFscG5fbGlzdCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiApICk7CisKKyAgICBmb3IoIGN1ciA9IHNzbC0+Y29uZi0+YWxwbl9saXN0OyAqY3VyICE9IE5VTEw7IGN1cisrICkKKyAgICAgICAgYWxwbmxlbiArPSAodW5zaWduZWQgY2hhcikoIHN0cmxlbiggKmN1ciApICYgMHhGRiApICsgMTsKKworICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCA2ICsgYWxwbmxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0FMUE4gPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0FMUE4gICAgICApICYgMHhGRiApOworCisgICAgLyoKKyAgICAgKiBvcGFxdWUgUHJvdG9jb2xOYW1lPDEuLjJeOC0xPjsKKyAgICAgKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIFByb3RvY29sTmFtZSBwcm90b2NvbF9uYW1lX2xpc3Q8Mi4uMl4xNi0xPgorICAgICAqIH0gUHJvdG9jb2xOYW1lTGlzdDsKKyAgICAgKi8KKworICAgIC8qIFNraXAgd3JpdGluZyBleHRlbnNpb24gYW5kIGxpc3QgbGVuZ3RoIGZvciBub3cgKi8KKyAgICBwICs9IDQ7CisKKyAgICBmb3IoIGN1ciA9IHNzbC0+Y29uZi0+YWxwbl9saXN0OyAqY3VyICE9IE5VTEw7IGN1cisrICkKKyAgICB7CisgICAgICAgICpwID0gKHVuc2lnbmVkIGNoYXIpKCBzdHJsZW4oICpjdXIgKSAmIDB4RkYgKTsKKyAgICAgICAgbWVtY3B5KCBwICsgMSwgKmN1ciwgKnAgKTsKKyAgICAgICAgcCArPSAxICsgKnA7CisgICAgfQorCisgICAgKm9sZW4gPSBwIC0gYnVmOworCisgICAgLyogTGlzdCBsZW5ndGggPSBvbGVuIC0gMiAoZXh0X3R5cGUpIC0gMiAoZXh0X2xlbikgLSAyIChsaXN0X2xlbikgKi8KKyAgICBidWZbNF0gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDYgKSA+PiA4ICkgJiAweEZGICk7CisgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKCAoICggKm9sZW4gLSA2ICkgICAgICApICYgMHhGRiApOworCisgICAgLyogRXh0ZW5zaW9uIGxlbmd0aCA9IG9sZW4gLSAyIChleHRfdHlwZSkgLSAyIChleHRfbGVuKSAqLworICAgIGJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSggKCAoICpvbGVuIC0gNCApID4+IDggKSAmIDB4RkYgKTsKKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDQgKSAgICAgICkgJiAweEZGICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCisvKgorICogR2VuZXJhdGUgcmFuZG9tIGJ5dGVzIGZvciBDbGllbnRIZWxsbworICovCitzdGF0aWMgaW50IHNzbF9nZW5lcmF0ZV9yYW5kb20oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlczsKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIG1iZWR0bHNfdGltZV90IHQ7CisjZW5kaWYKKworICAgIC8qCisgICAgICogV2hlbiByZXNwb25kaW5nIHRvIGEgdmVyaWZ5IHJlcXVlc3QsIE1VU1QgcmV1c2UgcmFuZG9tIChSRkMgNjM0NyA0LjIuMSkKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICB0ID0gbWJlZHRsc190aW1lKCBOVUxMICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggdCA+PiAyNCApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHQgPj4gMTYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB0ID4+ICA4ICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggdCAgICAgICApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGN1cnJlbnQgdGltZTogJWx1IiwgdCApICk7CisjZWxzZQorICAgIGlmKCAoIHJldCA9IHNzbC0+Y29uZi0+Zl9ybmcoIHNzbC0+Y29uZi0+cF9ybmcsIHAsIDQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcCArPSA0OworI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FICovCisKKyAgICBpZiggKCByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBwLCAyOCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBzc2xfd3JpdGVfY2xpZW50X2hlbGxvKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIG4sIG9sZW4sIGV4dF9sZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqcTsKKyAgICB1bnNpZ25lZCBjaGFyIG9mZmVyX2NvbXByZXNzOworICAgIGNvbnN0IGludCAqY2lwaGVyc3VpdGVzOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNsaWVudCBoZWxsbyIgKSApOworCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9ybmcgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vIFJORyBwcm92aWRlZCIpICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX05PX1JORyApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFICkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgc3NsLT5tYWpvcl92ZXIgPSBzc2wtPmNvbmYtPm1pbl9tYWpvcl92ZXI7CisgICAgICAgIHNzbC0+bWlub3JfdmVyID0gc3NsLT5jb25mLT5taW5fbWlub3JfdmVyOworICAgIH0KKworICAgIGlmKCBzc2wtPmNvbmYtPm1heF9tYWpvcl92ZXIgPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImNvbmZpZ3VyZWQgbWF4IG1ham9yIHZlcnNpb24gaXMgaW52YWxpZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25zaWRlciB1c2luZyBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoKSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIC8qCisgICAgICogICAgIDAgIC4gICAwICAgaGFuZHNoYWtlIHR5cGUKKyAgICAgKiAgICAgMSAgLiAgIDMgICBoYW5kc2hha2UgbGVuZ3RoCisgICAgICogICAgIDQgIC4gICA1ICAgaGlnaGVzdCB2ZXJzaW9uIHN1cHBvcnRlZAorICAgICAqICAgICA2ICAuICAgOSAgIGN1cnJlbnQgVU5JWCB0aW1lCisgICAgICogICAgMTAgIC4gIDM3ICAgcmFuZG9tIGJ5dGVzCisgICAgICovCisgICAgYnVmID0gc3NsLT5vdXRfbXNnOworICAgIHAgPSBidWYgKyA0OworCisgICAgbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbiggc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyLCBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBwICk7CisgICAgcCArPSAyOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIG1heCB2ZXJzaW9uOiBbJWQ6JWRdIiwKKyAgICAgICAgICAgICAgICAgICBidWZbNF0sIGJ1Zls1XSApICk7CisKKyAgICBpZiggKCByZXQgPSBzc2xfZ2VuZXJhdGVfcmFuZG9tKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX2dlbmVyYXRlX3JhbmRvbSIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIG1lbWNweSggcCwgc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgMzIgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIHJhbmRvbSBieXRlcyIsIHAsIDMyICk7CisgICAgcCArPSAzMjsKKworICAgIC8qCisgICAgICogICAgMzggIC4gIDM4ICAgc2Vzc2lvbiBpZCBsZW5ndGgKKyAgICAgKiAgICAzOSAgLiAzOStuICBzZXNzaW9uIGlkCisgICAgICogICAzOStuIC4gMzkrbiAgRFRMUyBvbmx5OiBjb29raWUgbGVuZ3RoICgxIGJ5dGUpCisgICAgICogICA0MCtuIC4gIC4uICAgRFRTTCBvbmx5OiBjb29raWUKKyAgICAgKiAgIC4uICAgLiAuLiAgICBjaXBoZXJzdWl0ZWxpc3QgbGVuZ3RoICgyIGJ5dGVzKQorICAgICAqICAgLi4gICAuIC4uICAgIGNpcGhlcnN1aXRlbGlzdAorICAgICAqICAgLi4gICAuIC4uICAgIGNvbXByZXNzaW9uIG1ldGhvZHMgbGVuZ3RoICgxIGJ5dGUpCisgICAgICogICAuLiAgIC4gLi4gICAgY29tcHJlc3Npb24gbWV0aG9kcworICAgICAqICAgLi4gICAuIC4uICAgIGV4dGVuc2lvbnMgbGVuZ3RoICgyIGJ5dGVzKQorICAgICAqICAgLi4gICAuIC4uICAgIGV4dGVuc2lvbnMKKyAgICAgKi8KKyAgICBuID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuOworCisgICAgaWYoIG4gPCAxNiB8fCBuID4gMzIgfHwKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSB8fAorI2VuZGlmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgPT0gMCApCisgICAgeworICAgICAgICBuID0gMDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAvKgorICAgICAqIFJGQyA1MDc3IHNlY3Rpb24gMy40OiAiV2hlbiBwcmVzZW50aW5nIGEgdGlja2V0LCB0aGUgY2xpZW50IE1BWQorICAgICAqIGdlbmVyYXRlIGFuZCBpbmNsdWRlIGEgU2Vzc2lvbiBJRCBpbiB0aGUgVExTIENsaWVudEhlbGxvLiIKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXQgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldF9sZW4gIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IHNzbC0+Y29uZi0+Zl9ybmcoIHNzbC0+Y29uZi0+cF9ybmcsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCAzMiApOworCisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IG4gPSAzMjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgbjsKKworICAgIGZvciggaSA9IDA7IGkgPCBuOyBpKysgKQorICAgICAgICAqcCsrID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRbaV07CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgc2Vzc2lvbiBpZCBsZW4uOiAlZCIsIG4gKSApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgICAiY2xpZW50IGhlbGxvLCBzZXNzaW9uIGlkIiwgYnVmICsgMzksIG4gKTsKKworICAgIC8qCisgICAgICogRFRMUyBjb29raWUKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBpZiggc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWUgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAibm8gdmVyaWZ5IGNvb2tpZSB0byBzZW5kIiApICk7CisgICAgICAgICAgICAqcCsrID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNsaWVudCBoZWxsbywgY29va2llIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuICk7CisKKyAgICAgICAgICAgICpwKysgPSBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW47CisgICAgICAgICAgICBtZW1jcHkoIHAsIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW4gKTsKKyAgICAgICAgICAgIHAgKz0gc3NsLT5oYW5kc2hha2UtPnZlcmlmeV9jb29raWVfbGVuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIENpcGhlcnN1aXRlIGxpc3QKKyAgICAgKi8KKyAgICBjaXBoZXJzdWl0ZXMgPSBzc2wtPmNvbmYtPmNpcGhlcnN1aXRlX2xpc3Rbc3NsLT5taW5vcl92ZXJdOworCisgICAgLyogU2tpcCB3cml0aW5nIGNpcGhlcnN1aXRlIGxlbmd0aCBmb3Igbm93ICovCisgICAgbiA9IDA7CisgICAgcSA9IHA7CisgICAgcCArPSAyOworCisgICAgZm9yKCBpID0gMDsgY2lwaGVyc3VpdGVzW2ldICE9IDA7IGkrKyApCisgICAgeworICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggY2lwaGVyc3VpdGVzW2ldICk7CisKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8gPT0gTlVMTCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+bWluX21pbm9yX3ZlciA+IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciB8fAorICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+bWF4X21pbm9yX3ZlciA8IHNzbC0+Y29uZi0+bWluX21pbm9yX3ZlciApCisgICAgICAgICAgICBjb250aW51ZTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICAgICAgKCBjaXBoZXJzdWl0ZV9pbmZvLT5mbGFncyAmIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTICkgKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmFyYzRfZGlzYWJsZWQgPT0gTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRCAmJgorICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+Y2lwaGVyID09IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4ICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICYmCisgICAgICAgICAgICBtYmVkdGxzX2VjanBha2VfY2hlY2soICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHggKSAhPSAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGFkZCBjaXBoZXJzdWl0ZTogJTA0eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzdWl0ZXNbaV0gKSApOworCisgICAgICAgIG4rKzsKKyAgICAgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggY2lwaGVyc3VpdGVzW2ldID4+IDggKTsKKyAgICAgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggY2lwaGVyc3VpdGVzW2ldICAgICAgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFkZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPX1NDU1YKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisjZW5kaWYKKyAgICB7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIE1CRURUTFNfU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyA+PiA4ICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIE1CRURUTFNfU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyAgICAgICk7CisgICAgICAgIG4rKzsKKyAgICB9CisKKyAgICAvKiBTb21lIHZlcnNpb25zIG9mIE9wZW5TU0wgZG9uJ3QgaGFuZGxlIGl0IGNvcnJlY3RseSBpZiBub3QgYXQgZW5kICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWKQorICAgIGlmKCBzc2wtPmNvbmYtPmZhbGxiYWNrID09IE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiYWRkaW5nIEZBTExCQUNLX1NDU1YiICkgKTsKKyAgICAgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVl9WQUxVRSA+PiA4ICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1ZfVkFMVUUgICAgICApOworICAgICAgICBuKys7CisgICAgfQorI2VuZGlmCisKKyAgICAqcSsrID0gKHVuc2lnbmVkIGNoYXIpKCBuID4+IDcgKTsKKyAgICAqcSsrID0gKHVuc2lnbmVkIGNoYXIpKCBuIDw8IDEgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBnb3QgJWQgY2lwaGVyc3VpdGVzIiwgbiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIG9mZmVyX2NvbXByZXNzID0gMTsKKyNlbHNlCisgICAgb2ZmZXJfY29tcHJlc3MgPSAwOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIFdlIGRvbid0IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCBEVExTIHJpZ2h0IG5vdzogaXMgbWFueSByZWNvcmRzIGNvbWUKKyAgICAgKiBpbiB0aGUgc2FtZSBkYXRhZ3JhbSwgdW5jb21wcmVzc2luZyBvbmUgY291bGQgb3ZlcndyaXRlIHRoZSBuZXh0IG9uZS4KKyAgICAgKiBXZSBkb24ndCB3YW50IHRvIGFkZCBjb21wbGV4aXR5IGZvciBoYW5kbGluZyB0aGF0IGNhc2UgdW5sZXNzIHRoZXJlIGlzCisgICAgICogYW4gYWN0dWFsIG5lZWQgZm9yIGl0LgorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgb2ZmZXJfY29tcHJlc3MgPSAwOworI2VuZGlmCisKKyAgICBpZiggb2ZmZXJfY29tcHJlc3MgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGNvbXByZXNzIGxlbi46ICVkIiwgMiApICk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBjb21wcmVzcyBhbGcuOiAlZCAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQ09NUFJFU1NfREVGTEFURSwgTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTCApICk7CisKKyAgICAgICAgKnArKyA9IDI7CisgICAgICAgICpwKysgPSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFOworICAgICAgICAqcCsrID0gTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8sIGNvbXByZXNzIGxlbi46ICVkIiwgMSApICk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBjb21wcmVzcyBhbGcuOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTCApICk7CisKKyAgICAgICAgKnArKyA9IDE7CisgICAgICAgICpwKysgPSBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMOworICAgIH0KKworICAgIC8vIEZpcnN0IHdyaXRlIGV4dGVuc2lvbnMsIHRoZW4gdGhlIHRvdGFsIGxlbmd0aAorICAgIC8vCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgIHNzbF93cml0ZV9ob3N0bmFtZV9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIHNzbF93cml0ZV9yZW5lZ290aWF0aW9uX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKyAgICBzc2xfd3JpdGVfc2lnbmF0dXJlX2FsZ29yaXRobXNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgc3NsX3dyaXRlX3N1cHBvcnRlZF9lbGxpcHRpY19jdXJ2ZXNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisKKyAgICBzc2xfd3JpdGVfc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIHNzbF93cml0ZV9lY2pwYWtlX2trcHBfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICBzc2xfd3JpdGVfbWF4X2ZyYWdtZW50X2xlbmd0aF9leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKyAgICBzc2xfd3JpdGVfdHJ1bmNhdGVkX2htYWNfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICBzc2xfd3JpdGVfZW5jcnlwdF90aGVuX21hY19leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgIHNzbF93cml0ZV9leHRlbmRlZF9tc19leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIHNzbF93cml0ZV9hbHBuX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBzc2xfd3JpdGVfc2Vzc2lvbl90aWNrZXRfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworICAgIC8qIG9sZW4gdW51c2VkIGlmIGFsbCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCAqLworICAgICgodm9pZCkgb2xlbik7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbywgdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDogJWQiLAorICAgICAgICAgICAgICAgICAgIGV4dF9sZW4gKSApOworCisgICAgaWYoIGV4dF9sZW4gPiAwICkKKyAgICB7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggZXh0X2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggZXh0X2xlbiAgICAgICkgJiAweEZGICk7CisgICAgICAgIHAgKz0gZXh0X2xlbjsKKyAgICB9CisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gcCAtIGJ1ZjsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPOworCisgICAgc3NsLT5zdGF0ZSsrOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQoIHNzbCApOworI2VuZGlmCisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIGNsaWVudCBoZWxsbyIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3JlbmVnb3RpYXRpb25faW5mbyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICAvKiBDaGVjayB2ZXJpZnktZGF0YSBpbiBjb25zdGFudC10aW1lLiBUaGUgbGVuZ3RoIE9UT0ggaXMgbm8gc2VjcmV0ICovCisgICAgICAgIGlmKCBsZW4gICAgIT0gMSArIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICogMiB8fAorICAgICAgICAgICAgYnVmWzBdICE9ICAgICBzc2wtPnZlcmlmeV9kYXRhX2xlbiAqIDIgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggYnVmICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vd25fdmVyaWZ5X2RhdGEsIHNzbC0+dmVyaWZ5X2RhdGFfbGVuICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19zc2xfc2FmZXJfbWVtY21wKCBidWYgKyAxICsgc3NsLT52ZXJpZnlfZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+cGVlcl92ZXJpZnlfZGF0YSwgc3NsLT52ZXJpZnlfZGF0YV9sZW4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJub24tbWF0Y2hpbmcgcmVuZWdvdGlhdGlvbiBpbmZvIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisgICAgeworICAgICAgICBpZiggbGVuICE9IDEgfHwgYnVmWzBdICE9IDB4MDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vbi16ZXJvIGxlbmd0aCByZW5lZ290aWF0aW9uIGluZm8iICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgICAgIH0KKworICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT047CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9tYXhfZnJhZ21lbnRfbGVuZ3RoX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICAvKgorICAgICAqIHNlcnZlciBzaG91bGQgdXNlIHRoZSBleHRlbnNpb24gb25seSBpZiB3ZSBkaWQsCisgICAgICogYW5kIGlmIHNvIHRoZSBzZXJ2ZXIncyB2YWx1ZSBzaG91bGQgbWF0Y2ggb3VycyAoYW5kIGxlbiBpcyBhbHdheXMgMSkKKyAgICAgKi8KKyAgICBpZiggc3NsLT5jb25mLT5tZmxfY29kZSA9PSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fTk9ORSB8fAorICAgICAgICBsZW4gIT0gMSB8fAorICAgICAgICBidWZbMF0gIT0gc3NsLT5jb25mLT5tZmxfY29kZSApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3RydW5jYXRlZF9obWFjX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBzc2wtPmNvbmYtPnRydW5jX2htYWMgPT0gTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19ESVNBQkxFRCB8fAorICAgICAgICBsZW4gIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgKCh2b2lkKSBidWYpOworCisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dHJ1bmNfaG1hYyA9IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRDsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9lbmNyeXB0X3RoZW5fbWFjX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGlmKCBzc2wtPmNvbmYtPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVRNX0RJU0FCTEVEIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCB8fAorICAgICAgICBsZW4gIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgKCh2b2lkKSBidWYpOworCisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+ZW5jcnlwdF90aGVuX21hYyA9IE1CRURUTFNfU1NMX0VUTV9FTkFCTEVEOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorc3RhdGljIGludCBzc2xfcGFyc2VfZXh0ZW5kZWRfbXNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIHNzbC0+Y29uZi0+ZXh0ZW5kZWRfbXMgPT0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQgfHwKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wIHx8CisgICAgICAgIGxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICAoKHZvaWQpIGJ1Zik7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+ZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zZXNzaW9uX3RpY2tldF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggc3NsLT5jb25mLT5zZXNzaW9uX3RpY2tldHMgPT0gTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEIHx8CisgICAgICAgIGxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICAoKHZvaWQpIGJ1Zik7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ID0gMTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3N1cHBvcnRlZF9wb2ludF9mb3JtYXRzX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBsaXN0X3NpemU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKKworICAgIGxpc3Rfc2l6ZSA9IGJ1ZlswXTsKKyAgICBpZiggbGlzdF9zaXplICsgMSAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIHAgPSBidWYgKyAxOworICAgIHdoaWxlKCBsaXN0X3NpemUgPiAwICkKKyAgICB7CisgICAgICAgIGlmKCBwWzBdID09IE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRCB8fAorICAgICAgICAgICAgcFswXSA9PSBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VEICkKKyAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LnBvaW50X2Zvcm1hdCA9IHBbMF07CisjZW5kaWYgICAgICAgICAgICAKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eC5wb2ludF9mb3JtYXQgPSBwWzBdOworI2VuZGlmCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDQsICggInBvaW50IGZvcm1hdCBzZWxlY3RlZDogJWQiLCBwWzBdICkgKTsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgbGlzdF9zaXplLS07CisgICAgICAgIHArKzsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vIHBvaW50IGZvcm1hdCBpbiBjb21tb24iICkgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DIHx8IAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9lY2pwYWtlX2trcHAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlICE9CisgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJza2lwIGVjanBha2Uga2twcCBleHRlbnNpb24iICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyogSWYgd2UgZ290IGhlcmUsIHdlIG5vIGxvbmdlciBuZWVkIG91ciBjYWNoZWQgZXh0ZW5zaW9uICovCisgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZSApOworICAgIHNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlID0gTlVMTDsKKyAgICBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZV9sZW4gPSAwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCitzdGF0aWMgaW50IHNzbF9wYXJzZV9hbHBuX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgc2l6ZV90IGxpc3RfbGVuLCBuYW1lX2xlbjsKKyAgICBjb25zdCBjaGFyICoqcDsKKworICAgIC8qIElmIHdlIGRpZG4ndCBzZW5kIGl0LCB0aGUgc2VydmVyIHNob3VsZG4ndCBzZW5kIGl0ICovCisgICAgaWYoIHNzbC0+Y29uZi0+YWxwbl9saXN0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisKKyAgICAvKgorICAgICAqIG9wYXF1ZSBQcm90b2NvbE5hbWU8MS4uMl44LTE+OworICAgICAqCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgICAgUHJvdG9jb2xOYW1lIHByb3RvY29sX25hbWVfbGlzdDwyLi4yXjE2LTE+CisgICAgICogfSBQcm90b2NvbE5hbWVMaXN0OworICAgICAqCisgICAgICogdGhlICJQcm90b2NvbE5hbWVMaXN0IiBNVVNUIGNvbnRhaW4gZXhhY3RseSBvbmUgIlByb3RvY29sTmFtZSIKKyAgICAgKi8KKworICAgIC8qIE1pbiBsZW5ndGggaXMgMiAobGlzdF9sZW4pICsgMSAobmFtZV9sZW4pICsgMSAobmFtZSkgKi8KKyAgICBpZiggbGVuIDwgNCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKworICAgIGxpc3RfbGVuID0gKCBidWZbMF0gPDwgOCApIHwgYnVmWzFdOworICAgIGlmKCBsaXN0X2xlbiAhPSBsZW4gLSAyICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworCisgICAgbmFtZV9sZW4gPSBidWZbMl07CisgICAgaWYoIG5hbWVfbGVuICE9IGxpc3RfbGVuIC0gMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKworICAgIC8qIENoZWNrIHRoYXQgdGhlIHNlcnZlciBjaG9zZW4gcHJvdG9jb2wgd2FzIGluIG91ciBsaXN0IGFuZCBzYXZlIGl0ICovCisgICAgZm9yKCBwID0gc3NsLT5jb25mLT5hbHBuX2xpc3Q7ICpwICE9IE5VTEw7IHArKyApCisgICAgeworICAgICAgICBpZiggbmFtZV9sZW4gPT0gc3RybGVuKCAqcCApICYmCisgICAgICAgICAgICBtZW1jbXAoIGJ1ZiArIDMsICpwLCBuYW1lX2xlbiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzc2wtPmFscG5fY2hvc2VuID0gKnA7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisKKy8qCisgKiBQYXJzZSBIZWxsb1ZlcmlmeVJlcXVlc3QuICBPbmx5IGNhbGxlZCBhZnRlciB2ZXJpZnlpbmcgdGhlIEhTIHR5cGUuCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9oZWxsb192ZXJpZnlfcmVxdWVzdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc3NsLT5pbl9tc2cgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKyAgICBpbnQgbWFqb3JfdmVyLCBtaW5vcl92ZXI7CisgICAgdW5zaWduZWQgY2hhciBjb29raWVfbGVuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgKSApOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgUHJvdG9jb2xWZXJzaW9uIHNlcnZlcl92ZXJzaW9uOworICAgICAqICAgb3BhcXVlIGNvb2tpZTwwLi4yXjgtMT47CisgICAgICogfSBIZWxsb1ZlcmlmeVJlcXVlc3Q7CisgICAgICovCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAic2VydmVyIHZlcnNpb24iLCBwLCAyICk7CisgICAgbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uKCAmbWFqb3JfdmVyLCAmbWlub3JfdmVyLCBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgcCApOworICAgIHAgKz0gMjsKKworICAgIC8qCisgICAgICogU2luY2UgdGhlIFJGQyBpcyBub3QgY2xlYXIgb24gdGhpcyBwb2ludCwgYWNjZXB0IERUTFMgMS4wIChUTFMgMS4xKQorICAgICAqIGV2ZW4gaXMgbG93ZXIgdGhhbiBvdXIgbWluIHZlcnNpb24uCisgICAgICovCisgICAgaWYoIG1ham9yX3ZlciA8IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyB8fAorICAgICAgICBtaW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgfHwKKyAgICAgICAgbWFqb3JfdmVyID4gc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyICB8fAorICAgICAgICBtaW5vcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciB2ZXJzaW9uIiApICk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gKTsKKyAgICB9CisKKyAgICBjb29raWVfbGVuID0gKnArKzsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjb29raWUiLCBwLCBjb29raWVfbGVuICk7CisKKyAgICBpZiggKCBzc2wtPmluX21zZyArIHNzbC0+aW5fbXNnbGVuICkgLSBwIDwgY29va2llX2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsCisgICAgICAgICAgICAoICJjb29raWUgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGluY29taW5nIG1lc3NhZ2Ugc2l6ZSIgKSApOworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDT0RFX0VSUk9SICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBjb29raWVfbGVuICk7CisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llICA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYWxsb2MgZmFpbGVkICglZCBieXRlcykiLCBjb29raWVfbGVuICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisgICAgfQorCisgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSwgcCwgY29va2llX2xlbiApOworICAgIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llX2xlbiA9IGNvb2tpZV9sZW47CisKKyAgICAvKiBTdGFydCBvdmVyIGF0IENsaWVudEhlbGxvICovCisgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0NMSUVOVF9IRUxMTzsKKyAgICBtYmVkdGxzX3NzbF9yZXNldF9jaGVja3N1bSggc3NsICk7CisKKyAgICBtYmVkdGxzX3NzbF9yZWN2X2ZsaWdodF9jb21wbGV0ZWQoIHNzbCApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zZXJ2ZXJfaGVsbG8oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCwgaTsKKyAgICBzaXplX3QgbjsKKyAgICBzaXplX3QgZXh0X2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpidWYsICpleHQ7CisgICAgdW5zaWduZWQgY2hhciBjb21wOworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgaW50IGFjY2VwdF9jb21wOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGludCByZW5lZ290aWF0aW9uX2luZm9fc2VlbiA9IDA7CisjZW5kaWYKKyAgICBpbnQgaGFuZHNoYWtlX2ZhaWx1cmUgPSAwOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKnN1aXRlX2luZm87CisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisgICAgdWludDMyX3QgdDsKKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBzZXJ2ZXIgaGVsbG8iICkgKTsKKworICAgIGJ1ZiA9IHNzbC0+aW5fbXNnOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsLT5yZW5lZ29fcmVjb3Jkc19zZWVuKys7CisKKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPnJlbmVnb19tYXhfcmVjb3JkcyA+PSAwICYmCisgICAgICAgICAgICAgICAgc3NsLT5yZW5lZ29fcmVjb3Jkc19zZWVuID4gc3NsLT5jb25mLT5yZW5lZ29fbWF4X3JlY29yZHMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVuZWdvdGlhdGlvbiByZXF1ZXN0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm90IGhvbm9yZWQgYnkgc2VydmVyIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibm9uLWhhbmRzaGFrZSBtZXNzYWdlIGR1cmluZyByZW5lZ28iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBSVRJTkdfU0VSVkVSX0hFTExPX1JFTkVHTyApOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIGlmKCBidWZbMF0gPT0gTUJFRFRMU19TU0xfSFNfSEVMTE9fVkVSSUZZX1JFUVVFU1QgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInJlY2VpdmVkIGhlbGxvIHZlcmlmeSByZXF1ZXN0IiApICk7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIHNlcnZlciBoZWxsbyIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBzc2xfcGFyc2VfaGVsbG9fdmVyaWZ5X3JlcXVlc3QoIHNzbCApICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXZSBtYWRlIGl0IHRocm91Z2ggdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzICovCisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llICk7CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSA9IE5VTEw7CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW4gPSAwOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworICAgIGlmKCBzc2wtPmluX2hzbGVuIDwgMzggKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSB8fAorICAgICAgICBidWZbMF0gIT0gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICAwICAgLiAgMSAgICBzZXJ2ZXJfdmVyc2lvbgorICAgICAqICAyICAgLiAzMyAgICByYW5kb20gKG1heWJlIGluY2x1ZGluZyA0IGJ5dGVzIG9mIFVuaXggdGltZSkKKyAgICAgKiAzNCAgIC4gMzQgICAgc2Vzc2lvbl9pZCBsZW5ndGggPSBuCisgICAgICogMzUgICAuIDM0K24gIHNlc3Npb25faWQKKyAgICAgKiAzNStuIC4gMzYrbiAgY2lwaGVyX3N1aXRlCisgICAgICogMzcrbiAuIDM3K24gIGNvbXByZXNzaW9uX21ldGhvZAorICAgICAqCisgICAgICogMzgrbiAuIDM5K24gIGV4dGVuc2lvbnMgbGVuZ3RoIChvcHRpb25hbCkKKyAgICAgKiA0MCtuIC4gIC4uICAgZXh0ZW5zaW9ucworICAgICAqLworICAgIGJ1ZiArPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInNlcnZlciBoZWxsbywgdmVyc2lvbiIsIGJ1ZiArIDAsIDIgKTsKKyAgICBtYmVkdGxzX3NzbF9yZWFkX3ZlcnNpb24oICZzc2wtPm1ham9yX3ZlciwgJnNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBidWYgKyAwICk7CisKKyAgICBpZiggc3NsLT5tYWpvcl92ZXIgPCBzc2wtPmNvbmYtPm1pbl9tYWpvcl92ZXIgfHwKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPCBzc2wtPmNvbmYtPm1pbl9taW5vcl92ZXIgfHwKKyAgICAgICAgc3NsLT5tYWpvcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9tYWpvcl92ZXIgfHwKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzZXJ2ZXIgdmVyc2lvbiBvdXQgb2YgYm91bmRzIC0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbWluOiBbJWQ6JWRdLCBzZXJ2ZXI6IFslZDolZF0sIG1heDogWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5taW5fbWFqb3JfdmVyLCBzc2wtPmNvbmYtPm1pbl9taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5tYWpvcl92ZXIsIHNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+bWF4X21ham9yX3Zlciwgc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyICkgKTsKKworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1BST1RPQ09MX1ZFUlNJT04gKTsKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfUFJPVE9DT0xfVkVSU0lPTiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIHQgPSAoICh1aW50MzJfdCkgYnVmWzJdIDw8IDI0ICkKKyAgICAgIHwgKCAodWludDMyX3QpIGJ1ZlszXSA8PCAxNiApCisgICAgICB8ICggKHVpbnQzMl90KSBidWZbNF0gPDwgIDggKQorICAgICAgfCAoICh1aW50MzJfdCkgYnVmWzVdICAgICAgICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGN1cnJlbnQgdGltZTogJWx1IiwgdCApICk7CisjZW5kaWYKKworICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcyArIDMyLCBidWYgKyAyLCAzMiApOworCisgICAgbiA9IGJ1ZlszNF07CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICAgInNlcnZlciBoZWxsbywgcmFuZG9tIGJ5dGVzIiwgYnVmICsgMiwgMzIgKTsKKworICAgIGlmKCBuID4gMzIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX2hzbGVuID4gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAzOSArIG4gKQorICAgIHsKKyAgICAgICAgZXh0X2xlbiA9ICggKCBidWZbMzggKyBuXSA8PCAgOCApCisgICAgICAgICAgICAgICAgICB8ICggYnVmWzM5ICsgbl0gICAgICAgKSApOworCisgICAgICAgIGlmKCAoIGV4dF9sZW4gPiAwICYmIGV4dF9sZW4gPCA0ICkgfHwKKyAgICAgICAgICAgIHNzbC0+aW5faHNsZW4gIT0gbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyA0MCArIG4gKyBleHRfbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKCBzc2wtPmluX2hzbGVuID09IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgMzggKyBuICkKKyAgICB7CisgICAgICAgIGV4dF9sZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgLyogY2lwaGVyc3VpdGUgKHVzZWQgbGF0ZXIpICovCisgICAgaSA9ICggYnVmWzM1ICsgbl0gPDwgOCApIHwgYnVmWzM2ICsgbl07CisKKyAgICAvKgorICAgICAqIFJlYWQgYW5kIGNoZWNrIGNvbXByZXNzaW9uCisgICAgICovCisgICAgY29tcCA9IGJ1ZlszNyArIG5dOworCisjaWYgZGVmaW5lZChNQkVEVExTX1pMSUJfU1VQUE9SVCkKKyAgICAvKiBTZWUgY29tbWVudHMgaW4gc3NsX3dyaXRlX2NsaWVudF9oZWxsbygpICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBhY2NlcHRfY29tcCA9IDA7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGFjY2VwdF9jb21wID0gMTsKKworICAgIGlmKCBjb21wICE9IE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwgJiYKKyAgICAgICAgKCBjb21wICE9IE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUgfHwgYWNjZXB0X2NvbXAgPT0gMCApICkKKyNlbHNlIC8qIE1CRURUTFNfWkxJQl9TVVBQT1JUICovCisgICAgaWYoIGNvbXAgIT0gTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTCApCisjZW5kaWYvKiBNQkVEVExTX1pMSUJfU1VQUE9SVCAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzZXJ2ZXIgaGVsbG8sIGJhZCBjb21wcmVzc2lvbjogJWQiLCBjb21wICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KKworICAgIC8qCisgICAgICogSW5pdGlhbGl6ZSB1cGRhdGUgY2hlY2tzdW0gZnVuY3Rpb25zCisgICAgICovCisgICAgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggaSApOworCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2lwaGVyc3VpdGUgaW5mbyBmb3IgJTA0eCBub3QgZm91bmQiLCBpICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF9vcHRpbWl6ZV9jaGVja3N1bSggc3NsLCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8gKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBzZXNzaW9uIGlkIGxlbi46ICVkIiwgbiApICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAgICJzZXJ2ZXIgaGVsbG8sIHNlc3Npb24gaWQiLCBidWYgKyAzNSwgbiApOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB0aGUgc2Vzc2lvbiBjYW4gYmUgcmVzdW1lZAorICAgICAqLworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID09IDAgfHwgbiA9PSAwIHx8CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgIT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgfHwKKyNlbmRpZgorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZSAhPSBpIHx8CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uICE9IGNvbXAgfHwKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuICE9IG4gfHwKKyAgICAgICAgbWVtY21wKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgYnVmICsgMzUsIG4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA9IDA7CisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+c3RhcnQgPSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyNlbmRpZgorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZSA9IGk7CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uID0gY29tcDsKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuID0gbjsKKyAgICAgICAgbWVtY3B5KCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgYnVmICsgMzUsIG4gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUM7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZGVyaXZlX2tleXMoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICIlcyBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgPyAiYSIgOiAibm8iICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBjaG9zZW4gY2lwaGVyc3VpdGU6ICUwNHgiLCBpICkgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgY29tcHJlc3MgYWxnLjogJWQiLCBidWZbMzcgKyBuXSApICk7CisKKyAgICBzdWl0ZV9pbmZvID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgKTsKKyAgICBpZiggc3VpdGVfaW5mbyA9PSBOVUxMCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICAgICAgICAgIHx8ICggc3NsLT5jb25mLT5hcmM0X2Rpc2FibGVkICYmCisgICAgICAgICAgICAgICAgc3VpdGVfaW5mby0+Y2lwaGVyID09IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4ICkKKyNlbmRpZgorICAgICAgICApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGNob3NlbiBjaXBoZXJzdWl0ZTogJXMiLCBzdWl0ZV9pbmZvLT5uYW1lICkgKTsKKworICAgIGkgPSAwOworICAgIHdoaWxlKCAxICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmNpcGhlcnN1aXRlX2xpc3Rbc3NsLT5taW5vcl92ZXJdW2ldID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtzc2wtPm1pbm9yX3Zlcl1baSsrXSA9PQorICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBjb21wICE9IE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgICAgICAmJiBjb21wICE9IE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUKKyNlbmRpZgorICAgICAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jb21wcmVzc2lvbiA9IGNvbXA7CisKKyAgICBleHQgPSBidWYgKyA0MCArIG47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInNlcnZlciBoZWxsbywgdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDogJWQiLCBleHRfbGVuICkgKTsKKworICAgIHdoaWxlKCBleHRfbGVuICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBleHRfaWQgICA9ICggKCBleHRbMF0gPDwgIDggKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggZXh0WzFdICAgICAgICkgKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGV4dF9zaXplID0gKCAoIGV4dFsyXSA8PCAgOCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBleHRbM10gICAgICAgKSApOworCisgICAgICAgIGlmKCBleHRfc2l6ZSArIDQgPiBleHRfbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCggZXh0X2lkICkKKyAgICAgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk86CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiApICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICAgICAgcmVuZWdvdGlhdGlvbl9pbmZvX3NlZW4gPSAxOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9yZW5lZ290aWF0aW9uX2luZm8oIHNzbCwgZXh0ICsgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9zaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSDoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX21heF9mcmFnbWVudF9sZW5ndGhfZXh0KCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCB0cnVuY2F0ZWRfaG1hYyBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX3RydW5jYXRlZF9obWFjX2V4dCggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCArIDQsIGV4dF9zaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9FTkNSWVBUX1RIRU5fTUFDOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfZW5jcnlwdF90aGVuX21hY19leHQoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgKyA0LCBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfZXh0ZW5kZWRfbXNfZXh0KCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ICsgNCwgZXh0X3NpemUgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9TRVNTSU9OX1RJQ0tFVDoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgc2Vzc2lvbl90aWNrZXQgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9zZXNzaW9uX3RpY2tldF9leHQoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgKyA0LCBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUzoKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgc3VwcG9ydGVkX3BvaW50X2Zvcm1hdHMgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0c19leHQoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgKyA0LCBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfRUNKUEFLRV9LS1BQOgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBlY2pwYWtlX2trcHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9lY2pwYWtlX2trcHAoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgKyA0LCBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX0FMUE46CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIGFscG4gZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9hbHBuX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInVua25vd24gZXh0ZW5zaW9uIGZvdW5kOiAlZCAoaWdub3JpbmcpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9pZCApICk7CisgICAgICAgIH0KKworICAgICAgICBleHRfbGVuIC09IDQgKyBleHRfc2l6ZTsKKyAgICAgICAgZXh0ICs9IDQgKyBleHRfc2l6ZTsKKworICAgICAgICBpZiggZXh0X2xlbiA+IDAgJiYgZXh0X2xlbiA8IDQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZW5lZ290aWF0aW9uIHNlY3VyaXR5IGNoZWNrcworICAgICAqLworICAgIGlmKCBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgIHNzbC0+Y29uZi0+YWxsb3dfbGVnYWN5X3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImxlZ2FjeSByZW5lZ290aWF0aW9uLCBicmVha2luZyBvZmYgaGFuZHNoYWtlIiApICk7CisgICAgICAgIGhhbmRzaGFrZV9mYWlsdXJlID0gMTsKKyAgICB9CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGVsc2UgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0lOX1BST0dSRVNTICYmCisgICAgICAgICAgICAgc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9TRUNVUkVfUkVORUdPVElBVElPTiAmJgorICAgICAgICAgICAgIHJlbmVnb3RpYXRpb25faW5mb19zZWVuID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZW5lZ290aWF0aW9uX2luZm8gZXh0ZW5zaW9uIG1pc3NpbmcgKHNlY3VyZSkiICkgKTsKKyAgICAgICAgaGFuZHNoYWtlX2ZhaWx1cmUgPSAxOworICAgIH0KKyAgICBlbHNlIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyAmJgorICAgICAgICAgICAgIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfTEVHQUNZX1JFTkVHT1RJQVRJT04gJiYKKyAgICAgICAgICAgICBzc2wtPmNvbmYtPmFsbG93X2xlZ2FjeV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibGVnYWN5IHJlbmVnb3RpYXRpb24gbm90IGFsbG93ZWQiICkgKTsKKyAgICAgICAgaGFuZHNoYWtlX2ZhaWx1cmUgPSAxOworICAgIH0KKyAgICBlbHNlIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyAmJgorICAgICAgICAgICAgIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfTEVHQUNZX1JFTkVHT1RJQVRJT04gJiYKKyAgICAgICAgICAgICByZW5lZ290aWF0aW9uX2luZm9fc2VlbiA9PSAxICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVuZWdvdGlhdGlvbl9pbmZvIGV4dGVuc2lvbiBwcmVzZW50IChsZWdhY3kpIiApICk7CisgICAgICAgIGhhbmRzaGFrZV9mYWlsdXJlID0gMTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisgICAgaWYoIGhhbmRzaGFrZV9mYWlsdXJlID09IDEgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2Ugc2VydmVyIGhlbGxvIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVyX2RoX3BhcmFtcyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVuZCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFOworCisgICAgLyoKKyAgICAgKiBFcGhlbWVyYWwgREggcGFyYW1ldGVyczoKKyAgICAgKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIG9wYXF1ZSBkaF9wPDEuLjJeMTYtMT47CisgICAgICogICAgIG9wYXF1ZSBkaF9nPDEuLjJeMTYtMT47CisgICAgICogICAgIG9wYXF1ZSBkaF9ZczwxLi4yXjE2LTE+OworICAgICAqIH0gU2VydmVyREhQYXJhbXM7CisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwgcCwgZW5kICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMiwgKCAibWJlZHRsc19kaG1fcmVhZF9wYXJhbXMiICksIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5sZW4gKiA4IDwgc3NsLT5jb25mLT5kaG1fbWluX2JpdGxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIkRITSBwcmltZSB0b28gc2hvcnQ6ICVkIDwgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmRobV9jdHgubGVuICogOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+ZGhtX21pbl9iaXRsZW4gKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogUCAiLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguUCAgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IEcgIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LkcgICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBHWSIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5HWSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfY2hlY2tfc2VydmVyX2VjZGhfcGFyYW1zKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisKKyAgICBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LmdycC5pZCApOworICAgIGlmKCBjdXJ2ZV9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJFQ0RIIGN1cnZlOiAlcyIsIGN1cnZlX2luZm8tPm5hbWUgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBtYmVkdGxzX3NzbF9jaGVja19jdXJ2ZSggc3NsLCBzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguZ3JwLmlkICkgIT0gMCApCisjZWxzZQorICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguZ3JwLm5iaXRzIDwgMTYzIHx8CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5ncnAubmJpdHMgPiA1MjEgKQorI2VuZGlmCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0VDUCggMywgIkVDREg6IFFwIiwgJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5RcCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVyX2VjZGhfcGFyYW1zKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKworICAgIC8qCisgICAgICogRXBoZW1lcmFsIEVDREggcGFyYW1ldGVyczoKKyAgICAgKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIEVDUGFyYW1ldGVycyBjdXJ2ZV9wYXJhbXM7CisgICAgICogICAgIEVDUG9pbnQgICAgICBwdWJsaWM7CisgICAgICogfSBTZXJ2ZXJFQ0RIUGFyYW1zOworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9yZWFkX3BhcmFtcyggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKikgcCwgZW5kICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAibWJlZHRsc19lY2RoX3JlYWRfcGFyYW1zIiApLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsX2NoZWNrX3NlcnZlcl9lY2RoX3BhcmFtcyggc3NsICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UgKEVDREhFIGN1cnZlKSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVyX3Bza19oaW50KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICBzaXplX3QgIGxlbjsKKyAgICAoKHZvaWQpIHNzbCk7CisKKyAgICAvKgorICAgICAqIFBTSyBwYXJhbWV0ZXJzOgorICAgICAqCisgICAgICogb3BhcXVlIHBza19pZGVudGl0eV9oaW50PDAuLjJeMTYtMT47CisgICAgICovCisgICAgbGVuID0gKCpwKVswXSA8PCA4IHwgKCpwKVsxXTsKKyAgICAqcCArPSAyOworCisgICAgaWYoICgqcCkgKyBsZW4gPiBlbmQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIChwc2tfaWRlbnRpdHlfaGludCBsZW5ndGgpIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3RlOiB3ZSBjdXJyZW50bHkgaWdub3JlIHRoZSBQS1MgaWRlbnRpdHkgaGludCwgYXMgd2Ugb25seSBhbGxvdyBvbmUKKyAgICAgKiBQU0sgdG8gYmUgcHJvdmlzaW9ubmVkIG9uIHRoZSBjbGllbnQuIFRoaXMgY291bGQgYmUgY2hhbmdlZCBsYXRlciBpZgorICAgICAqIHNvbWVvbmUgbmVlZHMgdGhhdCBmZWF0dXJlLgorICAgICAqLworICAgICpwICs9IGxlbjsKKyAgICByZXQgPSAwOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorLyoKKyAqIEdlbmVyYXRlIGEgcHJlLW1hc3RlciBzZWNyZXQgYW5kIGVuY3J5cHQgaXQgd2l0aCB0aGUgc2VydmVyJ3MgUlNBIGtleQorICovCitzdGF0aWMgaW50IHNzbF93cml0ZV9lbmNyeXB0ZWRfcG1zKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcG1zX29mZnNldCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuX2J5dGVzID0gc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wID8gMCA6IDI7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIgKyBwbXNfb2Zmc2V0OworCisgICAgaWYoIG9mZnNldCArIGxlbl9ieXRlcyA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwgZm9yIGVuY3J5cHRlZCBwbXMiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworICAgIH0KKworICAgIC8qCisgICAgICogR2VuZXJhdGUgKHBhcnQgb2YpIHRoZSBwcmUtbWFzdGVyIGFzCisgICAgICogIHN0cnVjdCB7CisgICAgICogICAgICBQcm90b2NvbFZlcnNpb24gY2xpZW50X3ZlcnNpb247CisgICAgICogICAgICBvcGFxdWUgcmFuZG9tWzQ2XTsKKyAgICAgKiAgfSBQcmVNYXN0ZXJTZWNyZXQ7CisgICAgICovCisgICAgbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbiggc3NsLT5jb25mLT5tYXhfbWFqb3JfdmVyLCBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBwICk7CisKKyAgICBpZiggKCByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBwICsgMiwgNDYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAiZl9ybmciLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+cG1zbGVuID0gNDg7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJjZXJ0aWZpY2F0ZSByZXF1aXJlZCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdyB3cml0ZSBpdCBvdXQsIGVuY3J5cHRlZAorICAgICAqLworICAgIGlmKCAhIG1iZWR0bHNfcGtfY2FuX2RvKCAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5waywKKyAgICAgICAgICAgICAgICBNQkVEVExTX1BLX1JTQSApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2VydGlmaWNhdGUga2V5IHR5cGUgbWlzbWF0Y2giICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfZW5jcnlwdCggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc3NsLT5oYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2cgKyBvZmZzZXQgKyBsZW5fYnl0ZXMsIG9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOIC0gb2Zmc2V0IC0gbGVuX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICBpZiggbGVuX2J5dGVzID09IDIgKQorICAgIHsKKyAgICAgICAgc3NsLT5vdXRfbXNnW29mZnNldCswXSA9ICh1bnNpZ25lZCBjaGFyKSggKm9sZW4gPj4gOCApOworICAgICAgICBzc2wtPm91dF9tc2dbb2Zmc2V0KzFdID0gKHVuc2lnbmVkIGNoYXIpKCAqb2xlbiAgICAgICk7CisgICAgICAgICpvbGVuICs9IDI7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2lnbmF0dXJlX2FsZ29yaXRobSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa190eXBlX3QgKnBrX2FsZyApCit7CisgICAgKCh2b2lkKSBzc2wpOworICAgICptZF9hbGcgPSBNQkVEVExTX01EX05PTkU7CisgICAgKnBrX2FsZyA9IE1CRURUTFNfUEtfTk9ORTsKKworICAgIC8qIE9ubHkgaW4gVExTIDEuMiAqLworICAgIGlmKCBzc2wtPm1pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoICgqcCkgKyAyID4gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKworICAgIC8qCisgICAgICogR2V0IGhhc2ggYWxnb3JpdGhtCisgICAgICovCisgICAgaWYoICggKm1kX2FsZyA9IG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2goICgqcClbMF0gKSApID09IE1CRURUTFNfTURfTk9ORSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIlNlcnZlciB1c2VkIHVuc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFzaEFsZ29yaXRobSAlZCIsICoocClbMF0gKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIC8qCisgICAgICogR2V0IHNpZ25hdHVyZSBhbGdvcml0aG0KKyAgICAgKi8KKyAgICBpZiggKCAqcGtfYWxnID0gbWJlZHRsc19zc2xfcGtfYWxnX2Zyb21fc2lnKCAoKnApWzFdICkgKSA9PSBNQkVEVExTX1BLX05PTkUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzZXJ2ZXIgdXNlZCB1bnN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZUFsZ29yaXRobSAlZCIsICgqcClbMV0gKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIGhhc2ggaXMgYWNjZXB0YWJsZQorICAgICAqLworICAgIGlmKCBtYmVkdGxzX3NzbF9jaGVja19zaWdfaGFzaCggc3NsLCAqbWRfYWxnICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNlcnZlciB1c2VkIEhhc2hBbGdvcml0aG0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYXQgd2FzIG5vdCBvZmZlcmVkIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJTZXJ2ZXIgdXNlZCBTaWduYXR1cmVBbGdvcml0aG0gJWQiLCAoKnApWzFdICkgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIlNlcnZlciB1c2VkIEhhc2hBbGdvcml0aG0gJWQiLCAoKnApWzBdICkgKTsKKyAgICAqcCArPSAyOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX2dldF9lY2RoX3BhcmFtc19mcm9tX2NlcnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9rZXlwYWlyICpwZWVyX2tleTsKKworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImNlcnRpZmljYXRlIHJlcXVpcmVkIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgIH0KKworICAgIGlmKCAhIG1iZWR0bHNfcGtfY2FuX2RvKCAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5waywKKyAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfUEtfRUNLRVkgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNlcnZlciBrZXkgbm90IEVDREggY2FwYWJsZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QS19UWVBFX01JU01BVENIICk7CisgICAgfQorCisgICAgcGVlcl9rZXkgPSBtYmVkdGxzX3BrX2VjKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnBrICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfZ2V0X3BhcmFtcyggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwgcGVlcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VDREhfVEhFSVJTICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAibWJlZHRsc19lY2RoX2dldF9wYXJhbXMiICksIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBzc2xfY2hlY2tfc2VydmVyX2VjZGhfcGFyYW1zKCBzc2wgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBjZXJ0aWZpY2F0ZSAoRUNESCBjdXJ2ZSkiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAqLworCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBzZXJ2ZXIga2V5IGV4Y2hhbmdlIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBzZXJ2ZXIga2V5IGV4Y2hhbmdlIiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorICAgICgodm9pZCkgcCk7CisgICAgKCh2b2lkKSBlbmQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9nZXRfZWNkaF9wYXJhbXNfZnJvbV9jZXJ0KCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfZ2V0X2VjZGhfcGFyYW1zX2Zyb21fY2VydCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBzZXJ2ZXIga2V5IGV4Y2hhbmdlIiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorICAgICgodm9pZCkgcCk7CisgICAgKCh2b2lkKSBlbmQpOworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgIH0KKworICAgIC8qCisgICAgICogU2VydmVyS2V5RXhjaGFuZ2UgbWF5IGJlIHNraXBwZWQgd2l0aCBQU0sgYW5kIFJTQS1QU0sgd2hlbiB0aGUgc2VydmVyCisgICAgICogZG9lc24ndCB1c2UgYSBwc2tfaWRlbnRpdHlfaGludAorICAgICAqLworICAgIGlmKCBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICkKKyAgICB7CisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbC0+cmVjb3JkX3JlYWQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgIH0KKworICAgIHAgICA9IHNzbC0+aW5fbXNnICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICk7CisgICAgZW5kID0gc3NsLT5pbl9tc2cgKyBzc2wtPmluX2hzbGVuOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgICAic2VydmVyIGtleSBleGNoYW5nZSIsIHAsIGVuZCAtIHAgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbF9wYXJzZV9zZXJ2ZXJfcHNrX2hpbnQoIHNzbCwgJnAsIGVuZCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKyAgICB9IC8qIEZBTExUUk9VR0ggKi8KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgKQorICAgICAgICA7IC8qIG5vdGhpbmcgbW9yZSB0byBkbyAqLworICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyApCisgICAgeworICAgICAgICBpZiggc3NsX3BhcnNlX3NlcnZlcl9kaF9wYXJhbXMoIHNzbCwgJnAsIGVuZCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSApCisgICAgeworICAgICAgICBpZiggc3NsX3BhcnNlX3NlcnZlcl9lY2RoX3BhcmFtcyggc3NsLCAmcCwgZW5kICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGVuZCAtIHAgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfdHdvIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpZ19sZW4sIGhhc2hsZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs2NF07CisgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyA9IE1CRURUTFNfTURfTk9ORTsKKyAgICAgICAgbWJlZHRsc19wa190eXBlX3QgcGtfYWxnID0gTUJFRFRMU19QS19OT05FOworICAgICAgICB1bnNpZ25lZCBjaGFyICpwYXJhbXMgPSBzc2wtPmluX21zZyArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApOworICAgICAgICBzaXplX3QgcGFyYW1zX2xlbiA9IHAgLSBwYXJhbXM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSGFuZGxlIHRoZSBkaWdpdGFsbHktc2lnbmVkIHN0cnVjdHVyZQorICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzc2xfcGFyc2Vfc2lnbmF0dXJlX2FsZ29yaXRobSggc3NsLCAmcCwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWRfYWxnLCAmcGtfYWxnICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgc2VydmVyIGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHBrX2FsZyAhPSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZyggY2lwaGVyc3VpdGVfaW5mbyApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0tFWV9FWENIQU5HRSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICB7CisgICAgICAgICAgICBwa19hbGcgPSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZyggY2lwaGVyc3VpdGVfaW5mbyApOworCisgICAgICAgICAgICAvKiBEZWZhdWx0IGhhc2ggZm9yIEVDRFNBIGlzIFNIQS0xICovCisgICAgICAgICAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfRUNEU0EgJiYgbWRfYWxnID09IE1CRURUTFNfTURfTk9ORSApCisgICAgICAgICAgICAgICAgbWRfYWxnID0gTUJFRFRMU19NRF9TSEExOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkIHNpZ25hdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgc2lnX2xlbiA9ICggcFswXSA8PCA4ICkgfCBwWzFdOworICAgICAgICBwICs9IDI7CisKKyAgICAgICAgaWYoIGVuZCAhPSBwICsgc2lnX2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHNlcnZlciBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInNpZ25hdHVyZSIsIHAsIHNpZ19sZW4gKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDb21wdXRlIHRoZSBoYXNoIHRoYXQgaGFzIGJlZW4gc2lnbmVkCisgICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgICAgIGlmKCBtZF9hbGcgPT0gTUJFRFRMU19NRF9OT05FICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19tZDVfY29udGV4dCBtYmVkdGxzX21kNTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9jb250ZXh0IG1iZWR0bHNfc2hhMTsKKworICAgICAgICAgICAgbWJlZHRsc19tZDVfaW5pdCggICZtYmVkdGxzX21kNSAgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9pbml0KCAmbWJlZHRsc19zaGExICk7CisKKyAgICAgICAgICAgIGhhc2hsZW4gPSAzNjsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGRpZ2l0YWxseS1zaWduZWQgc3RydWN0IHsKKyAgICAgICAgICAgICAqICAgICBvcGFxdWUgbWQ1X2hhc2hbMTZdOworICAgICAgICAgICAgICogICAgIG9wYXF1ZSBzaGFfaGFzaFsyMF07CisgICAgICAgICAgICAgKiB9OworICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIG1kNV9oYXNoCisgICAgICAgICAgICAgKiAgICAgTUQ1KENsaWVudEhlbGxvLnJhbmRvbSArIFNlcnZlckhlbGxvLnJhbmRvbQorICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTZXJ2ZXJQYXJhbXMpOworICAgICAgICAgICAgICogc2hhX2hhc2gKKyAgICAgICAgICAgICAqICAgICBTSEEoQ2xpZW50SGVsbG8ucmFuZG9tICsgU2VydmVySGVsbG8ucmFuZG9tCisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFNlcnZlclBhcmFtcyk7CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X3N0YXJ0cyggJm1iZWR0bHNfbWQ1ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtYmVkdGxzX21kNSwgc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgNjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1iZWR0bHNfbWQ1LCBwYXJhbXMsIHBhcmFtc19sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2ZpbmlzaCggJm1iZWR0bHNfbWQ1LCBoYXNoICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZtYmVkdGxzX3NoYTEgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZtYmVkdGxzX3NoYTEsIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmbWJlZHRsc19zaGExLCBwYXJhbXMsIHBhcmFtc19sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9maW5pc2goICZtYmVkdGxzX3NoYTEsIGhhc2ggKyAxNiApOworCisgICAgICAgICAgICBtYmVkdGxzX21kNV9mcmVlKCAgJm1iZWR0bHNfbWQ1ICApOworICAgICAgICAgICAgbWJlZHRsc19zaGExX2ZyZWUoICZtYmVkdGxzX3NoYTEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IFwKKyAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgICAgIGlmKCBtZF9hbGcgIT0gTUJFRFRMU19NRF9OT05FICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4OworCisgICAgICAgICAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKworICAgICAgICAgICAgLyogSW5mbyBmcm9tIG1kX2FsZyB3aWxsIGJlIHVzZWQgaW5zdGVhZCAqLworICAgICAgICAgICAgaGFzaGxlbiA9IDA7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBkaWdpdGFsbHktc2lnbmVkIHN0cnVjdCB7CisgICAgICAgICAgICAgKiAgICAgb3BhcXVlIGNsaWVudF9yYW5kb21bMzJdOworICAgICAgICAgICAgICogICAgIG9wYXF1ZSBzZXJ2ZXJfcmFuZG9tWzMyXTsKKyAgICAgICAgICAgICAqICAgICBTZXJ2ZXJESFBhcmFtcyBwYXJhbXM7CisgICAgICAgICAgICAgKiB9OworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApLCAwICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX21kX3NldHVwIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoICZjdHggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBzc2wtPmhhbmRzaGFrZS0+cmFuZGJ5dGVzLCA2NCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIHBhcmFtcywgcGFyYW1zX2xlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9maW5pc2goICZjdHgsIGhhc2ggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB8fCBcCisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInBhcmFtZXRlcnMgaGFzaCIsIGhhc2gsIGhhc2hsZW4gIT0gMCA/IGhhc2hsZW4gOgorICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgKCBtYmVkdGxzX21kX2dldF9zaXplKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKSApICkgKTsKKworICAgICAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0ID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImNlcnRpZmljYXRlIHJlcXVpcmVkIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFZlcmlmeSBzaWduYXR1cmUKKyAgICAgICAgICovCisgICAgICAgIGlmKCAhIG1iZWR0bHNfcGtfY2FuX2RvKCAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5waywgcGtfYWxnICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfdmVyaWZ5KCAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZF9hbGcsIGhhc2gsIGhhc2hsZW4sIHAsIHNpZ19sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3BrX3ZlcmlmeSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgKi8KKworZXhpdDoKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIHNlcnZlciBrZXkgZXhjaGFuZ2UiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpICAgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2NlcnRpZmljYXRlX3JlcXVlc3QoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICAgc2l6ZV90IG4gPSAwOworICAgIHNpemVfdCBjZXJ0X3R5cGVfbGVuID0gMCwgZG5fbGVuID0gMDsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+cmVjb3JkX3JlYWQgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSByZXF1ZXN0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5yZWNvcmRfcmVhZCA9IDE7CisgICAgfQorCisgICAgc3NsLT5jbGllbnRfYXV0aCA9IDA7CisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgaWYoIHNzbC0+aW5fbXNnWzBdID09IE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgKQorICAgICAgICBzc2wtPmNsaWVudF9hdXRoKys7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImdvdCAlcyBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y2xpZW50X2F1dGggPyAiYSIgOiAibm8iICkgKTsKKworICAgIGlmKCBzc2wtPmNsaWVudF9hdXRoID09IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBzc2wtPnJlY29yZF9yZWFkID0gMDsKKworICAgIC8qCisgICAgICogIHN0cnVjdCB7CisgICAgICogICAgICBDbGllbnRDZXJ0aWZpY2F0ZVR5cGUgY2VydGlmaWNhdGVfdHlwZXM8MS4uMl44LTE+OworICAgICAqICAgICAgU2lnbmF0dXJlQW5kSGFzaEFsZ29yaXRobQorICAgICAqICAgICAgICBzdXBwb3J0ZWRfc2lnbmF0dXJlX2FsZ29yaXRobXM8Ml4xNi0xPjsgLS0gVExTIDEuMiBvbmx5CisgICAgICogICAgICBEaXN0aW5ndWlzaGVkTmFtZSBjZXJ0aWZpY2F0ZV9hdXRob3JpdGllczwwLi4yXjE2LTE+OworICAgICAqICB9IENlcnRpZmljYXRlUmVxdWVzdDsKKyAgICAgKgorICAgICAqICBTaW5jZSB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgY2VydGlmaWNhdGUgb24gY2xpZW50cywgbGV0J3MganVzdAorICAgICAqICBpZ25vcmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0J3Mgc3VwcG9zZWQgdG8gaGVscCB1cyBwaWNrIGEKKyAgICAgKiAgY2VydGlmaWNhdGUuCisgICAgICoKKyAgICAgKiAgV2UgY291bGQgY2hlY2sgdGhhdCBvdXIgY2VydGlmaWNhdGUgbWF0Y2hlcyB0aGUgcmVxdWVzdCwgYW5kIGJhaWwgb3V0CisgICAgICogIGlmIGl0IGRvZXNuJ3QsIGJ1dCBpdCdzIHNpbXBsZXIgdG8ganVzdCBzZW5kIHRoZSBjZXJ0aWZpY2F0ZSBhbnl3YXksCisgICAgICogIGFuZCBnaXZlIHRoZSBzZXJ2ZXIgdGhlIG9wcG9ydHVuaXR5IHRvIGRlY2lkZSBpZiBpdCBzaG91bGQgdGVybWluYXRlCisgICAgICogIHRoZSBjb25uZWN0aW9uIHdoZW4gaXQgZG9lc24ndCBsaWtlIG91ciBjZXJ0aWZpY2F0ZS4KKyAgICAgKgorICAgICAqICBTYW1lIGdvZXMgZm9yIHRoZSBoYXNoIGluIFRMUyAxLjIncyBzaWduYXR1cmVfYWxnb3JpdGhtczogYXQgdGhpcworICAgICAqICBwb2ludCB3ZSBvbmx5IGhhdmUgb25lIGhhc2ggYXZhaWxhYmxlIChzZWUgY29tbWVudHMgaW4KKyAgICAgKiAgd3JpdGVfY2VydGlmaWNhdGVfdmVyaWZ5KSwgc28gbGV0J3MganVzdCB1c2Ugd2hhdCB3ZSBoYXZlLgorICAgICAqCisgICAgICogIEhvd2V2ZXIsIHdlIHN0aWxsIG1pbmltYWxseSBwYXJzZSB0aGUgbWVzc2FnZSB0byBjaGVjayBpdCBpcyBhdCBsZWFzdAorICAgICAqICBzdXBlcmZpY2lhbGx5IHNhbmUuCisgICAgICovCisgICAgYnVmID0gc3NsLT5pbl9tc2c7CisKKyAgICAvKiBjZXJ0aWZpY2F0ZV90eXBlcyAqLworICAgIGNlcnRfdHlwZV9sZW4gPSBidWZbbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICldOworICAgIG4gPSBjZXJ0X3R5cGVfbGVuOworCisgICAgaWYoIHNzbC0+aW5faHNsZW4gPCBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIDIgKyBuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIHJlcXVlc3QgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVCApOworICAgIH0KKworICAgIC8qIHN1cHBvcnRlZF9zaWduYXR1cmVfYWxnb3JpdGhtcyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpZ19hbGdfbGVuID0gKCAoIGJ1ZlttYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIDEgKyBuXSA8PCAgOCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBidWZbbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAyICsgbl0gICAgICAgKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgICAgICB1bnNpZ25lZCBjaGFyKiBzaWdfYWxnID0gYnVmICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAzICsgbjsKKyAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHNpZ19hbGdfbGVuOyBpICs9IDIgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIlN1cHBvcnRlZCBTaWduYXR1cmUgQWxnb3JpdGhtIGZvdW5kOiAlZCwlZCIsIHNpZ19hbGdbaV0sIHNpZ19hbGdbaSArIDFdICApICk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIG4gKz0gMiArIHNpZ19hbGdfbGVuOworCisgICAgICAgIGlmKCBzc2wtPmluX2hzbGVuIDwgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAyICsgbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIHJlcXVlc3QgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworICAgIC8qIGNlcnRpZmljYXRlX2F1dGhvcml0aWVzICovCisgICAgZG5fbGVuID0gKCAoIGJ1ZlttYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIDEgKyBuXSA8PCAgOCApCisgICAgICAgICAgICAgfCAoIGJ1ZlttYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIDIgKyBuXSAgICAgICApICk7CisKKyAgICBuICs9IGRuX2xlbjsKKyAgICBpZiggc3NsLT5pbl9oc2xlbiAhPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSArIDMgKyBuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIHJlcXVlc3QgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVCApOworICAgIH0KKworZXhpdDoKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgJiYKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCAqLworCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zZXJ2ZXJfaGVsbG9fZG9uZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBzZXJ2ZXIgaGVsbG8gZG9uZSIgKSApOworCisgICAgaWYoIHNzbC0+cmVjb3JkX3JlYWQgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gZG9uZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzc2wtPnJlY29yZF9yZWFkID0gMDsKKworICAgIGlmKCBzc2wtPmluX2hzbGVuICAhPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSB8fAorICAgICAgICBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE9fRE9ORSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBzZXJ2ZXIgaGVsbG8gZG9uZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE9fRE9ORSApOworICAgIH0KKworICAgIHNzbC0+c3RhdGUrKzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgbWJlZHRsc19zc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkKCBzc2wgKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBzZXJ2ZXIgaGVsbG8gZG9uZSIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2NsaWVudF9rZXlfZXhjaGFuZ2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgbjsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBjbGllbnQga2V5IGV4Y2hhbmdlIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0EgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogREhNIGtleSBleGNoYW5nZSAtLSBzZW5kIEdeWCBtb2QgUAorICAgICAgICAgKi8KKyAgICAgICAgbiA9IHNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LmxlbjsKKworICAgICAgICBzc2wtPm91dF9tc2dbNF0gPSAodW5zaWduZWQgY2hhcikoIG4gPj4gOCApOworICAgICAgICBzc2wtPm91dF9tc2dbNV0gPSAodW5zaWduZWQgY2hhcikoIG4gICAgICApOworICAgICAgICBpID0gNjsKKworICAgICAgICByZXQgPSBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBtYmVkdGxzX21waV9zaXplKCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguUCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2wtPm91dF9tc2dbaV0sIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19kaG1fbWFrZV9wdWJsaWMiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IFggIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LlggICk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogR1giLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguR1ggKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BSRU1BU1RFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2wtPmhhbmRzaGFrZS0+cG1zbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19kaG1fY2FsY19zZWNyZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IEsgIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LksgICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEVDREgga2V5IGV4Y2hhbmdlIC0tIHNlbmQgY2xpZW50IHB1YmxpYyB2YWx1ZQorICAgICAgICAgKi8KKyAgICAgICAgaSA9IDQ7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzbC0+b3V0X21zZ1tpXSwgMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIDMsICJFQ0RIOiBRIiwgJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5RICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5oYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01QSV9NQVhfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJFQ0RIOiB6IiwgJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC56ICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBvcGFxdWUgcHNrX2lkZW50aXR5PDAuLjJeMTYtMT47CisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5jb25mLT5wc2sgPT0gTlVMTCB8fCBzc2wtPmNvbmYtPnBza19pZGVudGl0eSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJnb3Qgbm8gcHJpdmF0ZSBrZXkgZm9yIFBTSyIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGkgPSA0OworICAgICAgICBuID0gc3NsLT5jb25mLT5wc2tfaWRlbnRpdHlfbGVuOworCisgICAgICAgIGlmKCBpICsgMiArIG4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInBzayBpZGVudGl0eSB0b28gbG9uZyBvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBidWZmZXIgdG9vIHNob3J0IiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgICAgIH0KKworICAgICAgICBzc2wtPm91dF9tc2dbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSggbiA+PiA4ICk7CisgICAgICAgIHNzbC0+b3V0X21zZ1tpKytdID0gKHVuc2lnbmVkIGNoYXIpKCBuICAgICAgKTsKKworICAgICAgICBtZW1jcHkoIHNzbC0+b3V0X21zZyArIGksIHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5LCBzc2wtPmNvbmYtPnBza19pZGVudGl0eV9sZW4gKTsKKyAgICAgICAgaSArPSBzc2wtPmNvbmYtPnBza19pZGVudGl0eV9sZW47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKQorICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG4gPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfd3JpdGVfZW5jcnlwdGVkX3Btcyggc3NsLCBpLCAmbiwgMiApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENsaWVudERpZmZpZUhlbGxtYW5QdWJsaWMgcHVibGljIChESE0gc2VuZCBHXlggbW9kIFApCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG4gPSBzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5sZW47CisKKyAgICAgICAgICAgIGlmKCBpICsgMiArIG4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicHNrIGlkZW50aXR5IG9yIERITSBzaXplIHRvbyBsb25nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9yIFNTTCBidWZmZXIgdG9vIHNob3J0IiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzc2wtPm91dF9tc2dbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSggbiA+PiA4ICk7CisgICAgICAgICAgICBzc2wtPm91dF9tc2dbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSggbiAgICAgICk7CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHgsCisgICAgICAgICAgICAgICAgICAgIChpbnQpIG1iZWR0bHNfbXBpX3NpemUoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5QICksCisgICAgICAgICAgICAgICAgICAgICZzc2wtPm91dF9tc2dbaV0sIG4sCisgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19kaG1fbWFrZV9wdWJsaWMiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorICAgICAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDbGllbnRFQ0RpZmZpZUhlbGxtYW5QdWJsaWMgcHVibGljOworICAgICAgICAgICAgICovCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsICZuLAorICAgICAgICAgICAgICAgICAgICAmc3NsLT5vdXRfbXNnW2ldLCBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gLSBpLAorICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0VDUCggMywgIkVDREg6IFEiLCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LlEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBICkKKyAgICB7CisgICAgICAgIGkgPSA0OworICAgICAgICBpZiggKCByZXQgPSBzc2xfd3JpdGVfZW5jcnlwdGVkX3Btcyggc3NsLCBpLCAmbiwgMCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgaSA9IDQ7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX3R3byggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2cgKyBpLCBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gLSBpLCAmbiwKKyAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX2VjanBha2VfZGVyaXZlX3NlY3JldCggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyLCAzMiwgJnNzbC0+aGFuZHNoYWtlLT5wbXNsZW4sCisgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjanBha2VfZGVyaXZlX3NlY3JldCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgKi8KKyAgICB7CisgICAgICAgICgodm9pZCkgY2lwaGVyc3VpdGVfaW5mbyk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSBpICsgbjsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRTsKKworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgY2xpZW50IGtleSBleGNoYW5nZSIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkgICAgICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2NlcnRpZmljYXRlX3ZlcmlmeSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZGVyaXZlX2tleXMoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7Cit9CisjZWxzZQorc3RhdGljIGludCBzc2xfd3JpdGVfY2VydGlmaWNhdGVfdmVyaWZ5KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworICAgIHNpemVfdCBuID0gMCwgb2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNDhdOworICAgIHVuc2lnbmVkIGNoYXIgKmhhc2hfc3RhcnQgPSBoYXNoOworICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyA9IE1CRURUTFNfTURfTk9ORTsKKyAgICB1bnNpZ25lZCBpbnQgaGFzaGxlbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+Y2xpZW50X2F1dGggPT0gMCB8fCBtYmVkdGxzX3NzbF9vd25fY2VydCggc3NsICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJnb3Qgbm8gcHJpdmF0ZSBrZXkgZm9yIGNlcnRpZmljYXRlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BSSVZBVEVfS0VZX1JFUVVJUkVEICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNYWtlIGFuIFJTQSBzaWduYXR1cmUgb2YgdGhlIGhhbmRzaGFrZSBkaWdlc3RzCisgICAgICovCisgICAgc3NsLT5oYW5kc2hha2UtPmNhbGNfdmVyaWZ5KCBzc2wsIGhhc2ggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyICE9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBkaWdpdGFsbHktc2lnbmVkIHN0cnVjdCB7CisgICAgICAgICAqICAgICBvcGFxdWUgbWQ1X2hhc2hbMTZdOworICAgICAgICAgKiAgICAgb3BhcXVlIHNoYV9oYXNoWzIwXTsKKyAgICAgICAgICogfTsKKyAgICAgICAgICoKKyAgICAgICAgICogbWQ1X2hhc2gKKyAgICAgICAgICogICAgIE1ENShoYW5kc2hha2VfbWVzc2FnZXMpOworICAgICAgICAgKgorICAgICAgICAgKiBzaGFfaGFzaAorICAgICAgICAgKiAgICAgU0hBKGhhbmRzaGFrZV9tZXNzYWdlcyk7CisgICAgICAgICAqLworICAgICAgICBoYXNobGVuID0gMzY7CisgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfTk9ORTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGb3IgRUNEU0EsIGRlZmF1bHQgaGFzaCBpcyBTSEEtMSBvbmx5CisgICAgICAgICAqLworICAgICAgICBpZiggbWJlZHRsc19wa19jYW5fZG8oIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApLCBNQkVEVExTX1BLX0VDRFNBICkgKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNoX3N0YXJ0ICs9IDE2OworICAgICAgICAgICAgaGFzaGxlbiAtPSAxNjsKKyAgICAgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfU0hBMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IFwKKyAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIGRpZ2l0YWxseS1zaWduZWQgc3RydWN0IHsKKyAgICAgICAgICogICAgIG9wYXF1ZSBoYW5kc2hha2VfbWVzc2FnZXNbaGFuZHNoYWtlX21lc3NhZ2VzX2xlbmd0aF07CisgICAgICAgICAqIH07CisgICAgICAgICAqCisgICAgICAgICAqIFRha2luZyBzaG9ydGN1dCBoZXJlLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2VydmVyIGFsd2F5cyBhbGxvd3MgdGhlCisgICAgICAgICAqIFBSRiBIYXNoIGZ1bmN0aW9uIGFuZCBoYXMgc2VudCBpdCBpbiB0aGUgYWxsb3dlZCBzaWduYXR1cmUKKyAgICAgICAgICogYWxnb3JpdGhtcyBsaXN0IHJlY2VpdmVkIGluIHRoZSBDZXJ0aWZpY2F0ZSBSZXF1ZXN0IG1lc3NhZ2UuCisgICAgICAgICAqCisgICAgICAgICAqIFVudGlsIHdlIGVuY291bnRlciBhIHNlcnZlciB0aGF0IGRvZXMgbm90LCB3ZSB3aWxsIHRha2UgdGhpcworICAgICAgICAgKiBzaG9ydGN1dC4KKyAgICAgICAgICoKKyAgICAgICAgICogUmVhc29uOiBPdGhlcndpc2Ugd2Ugc2hvdWxkIGhhdmUgcnVubmluZyBoYXNoZXMgZm9yIFNIQTUxMiBhbmQgU0hBMjI0CisgICAgICAgICAqICAgICAgICAgaW4gb3JkZXIgdG8gc2F0aXNmeSAnd2VpcmQnIG5lZWRzIGZyb20gdGhlIHNlcnZlciBzaWRlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mby0+bWFjID09CisgICAgICAgICAgICBNQkVEVExTX01EX1NIQTM4NCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1kX2FsZyA9IE1CRURUTFNfTURfU0hBMzg0OworICAgICAgICAgICAgc3NsLT5vdXRfbXNnWzRdID0gTUJFRFRMU19TU0xfSEFTSF9TSEEzODQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtZF9hbGcgPSBNQkVEVExTX01EX1NIQTI1NjsKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ1s0XSA9IE1CRURUTFNfU1NMX0hBU0hfU0hBMjU2OworICAgICAgICB9CisgICAgICAgIHNzbC0+b3V0X21zZ1s1XSA9IG1iZWR0bHNfc3NsX3NpZ19mcm9tX3BrKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSApOworCisgICAgICAgIC8qIEluZm8gZnJvbSBtZF9hbGcgd2lsbCBiZSB1c2VkIGluc3RlYWQgKi8KKyAgICAgICAgaGFzaGxlbiA9IDA7CisgICAgICAgIG9mZnNldCA9IDI7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2lnbiggbWJlZHRsc19zc2xfb3duX2tleSggc3NsICksIG1kX2FsZywgaGFzaF9zdGFydCwgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2cgKyA2ICsgb2Zmc2V0LCAmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfcGtfc2lnbiIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHNzbC0+b3V0X21zZ1s0ICsgb2Zmc2V0XSA9ICh1bnNpZ25lZCBjaGFyKSggbiA+PiA4ICk7CisgICAgc3NsLT5vdXRfbXNnWzUgKyBvZmZzZXRdID0gKHVuc2lnbmVkIGNoYXIpKCBuICAgICAgKTsKKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSA2ICsgbiArIG9mZnNldDsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEVfVkVSSUZZOworCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX25ld19zZXNzaW9uX3RpY2tldCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQzMl90IGxpZmV0aW1lOworICAgIHNpemVfdCB0aWNrZXRfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnRpY2tldDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2c7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBuZXcgc2Vzc2lvbiB0aWNrZXQgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIHVpbnQzMiB0aWNrZXRfbGlmZXRpbWVfaGludDsKKyAgICAgKiAgICAgb3BhcXVlIHRpY2tldDwwLi4yXjE2LTE+OworICAgICAqIH0gTmV3U2Vzc2lvblRpY2tldDsKKyAgICAgKgorICAgICAqIDAgIC4gIDMgICB0aWNrZXRfbGlmZXRpbWVfaGludAorICAgICAqIDQgIC4gIDUgICB0aWNrZXRfbGVuIChuKQorICAgICAqIDYgIC4gIDUrbiB0aWNrZXQgY29udGVudAorICAgICAqLworICAgIGlmKCBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQgfHwKKyAgICAgICAgc3NsLT5pbl9oc2xlbiA8IDYgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBuZXcgc2Vzc2lvbiB0aWNrZXQgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfTkVXX1NFU1NJT05fVElDS0VUICk7CisgICAgfQorCisgICAgbXNnID0gc3NsLT5pbl9tc2cgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKworICAgIGxpZmV0aW1lID0gKCBtc2dbMF0gPDwgMjQgKSB8ICggbXNnWzFdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgKCBtc2dbMl0gPDwgIDggKSB8ICggbXNnWzNdICAgICAgICk7CisKKyAgICB0aWNrZXRfbGVuID0gKCBtc2dbNF0gPDwgOCApIHwgKCBtc2dbNV0gKTsKKworICAgIGlmKCB0aWNrZXRfbGVuICsgNiArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICE9IHNzbC0+aW5faHNsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgbmV3IHNlc3Npb24gdGlja2V0IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX05FV19TRVNTSU9OX1RJQ0tFVCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidGlja2V0IGxlbmd0aDogJWQiLCB0aWNrZXRfbGVuICkgKTsKKworICAgIC8qIFdlJ3JlIG5vdCB3YWl0aW5nIGZvciBhIE5ld1Nlc3Npb25UaWNrZXQgbWVzc2FnZSBhbnkgbW9yZSAqLworICAgIHNzbC0+aGFuZHNoYWtlLT5uZXdfc2Vzc2lvbl90aWNrZXQgPSAwOworICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDOworCisgICAgLyoKKyAgICAgKiBaZXJvLWxlbmd0aCB0aWNrZXQgbWVhbnMgdGhlIHNlcnZlciBjaGFuZ2VkIGhpcyBtaW5kIGFuZCBkb2Vzbid0IHdhbnQKKyAgICAgKiB0byBzZW5kIGEgdGlja2V0IGFmdGVyIGFsbCwgc28ganVzdCBmb3JnZXQgaXQKKyAgICAgKi8KKyAgICBpZiggdGlja2V0X2xlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXRfbGVuICk7CisgICAgbWJlZHRsc19mcmVlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXQgKTsKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXQgPSBOVUxMOworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRpY2tldF9sZW4gPSAwOworCisgICAgaWYoICggdGlja2V0ID0gbWJlZHRsc19jYWxsb2MoIDEsIHRpY2tldF9sZW4gKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJ0aWNrZXQgYWxsb2MgZmFpbGVkIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIG1lbWNweSggdGlja2V0LCBtc2cgKyA2LCB0aWNrZXRfbGVuICk7CisKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT50aWNrZXQgPSB0aWNrZXQ7CisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0X2xlbiA9IHRpY2tldF9sZW47CisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dGlja2V0X2xpZmV0aW1lID0gbGlmZXRpbWU7CisKKyAgICAvKgorICAgICAqIFJGQyA1MDc3IHNlY3Rpb24gMy40OgorICAgICAqICJJZiB0aGUgY2xpZW50IHJlY2VpdmVzIGEgc2Vzc2lvbiB0aWNrZXQgZnJvbSB0aGUgc2VydmVyLCB0aGVuIGl0CisgICAgICogZGlzY2FyZHMgYW55IFNlc3Npb24gSUQgdGhhdCB3YXMgc2VudCBpbiB0aGUgU2VydmVySGVsbG8uIgorICAgICAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidGlja2V0IGluIHVzZSwgZGlzY2FyZGluZyBzZXNzaW9uIGlkIiApICk7CisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuID0gMDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2UgbmV3IHNlc3Npb24gdGlja2V0IiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKworLyoKKyAqIFNTTCBoYW5kc2hha2UgLS0gY2xpZW50IHNpZGUgLS0gc2luZ2xlIHN0ZXAKKyAqLworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9jbGllbnRfc3RlcCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGlmKCBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSIHx8IHNzbC0+aGFuZHNoYWtlID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJjbGllbnQgc3RhdGU6ICVkIiwgc3NsLT5zdGF0ZSApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9PSBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVzZW5kKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIENoYW5nZSBzdGF0ZSBub3csIHNvIHRoYXQgaXQgaXMgcmlnaHQgaW4gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoKSwgdXNlZAorICAgICAqIGJ5IERUTFMgZm9yIGRyb3BwaW5nIG91dC1vZi1zZXF1ZW5jZSBDaGFuZ2VDaXBoZXJTcGVjIHJlY29yZHMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBpZiggc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDICYmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5uZXdfc2Vzc2lvbl90aWNrZXQgIT0gMCApCisgICAgeworICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfU0VSVkVSX05FV19TRVNTSU9OX1RJQ0tFVDsKKyAgICB9CisjZW5kaWYKKworICAgIHN3aXRjaCggc3NsLT5zdGF0ZSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hFTExPX1JFUVVFU1Q6CisgICAgICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfQ0xJRU5UX0hFTExPOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAvKgorICAgICAgICAqICA9PT4gICBDbGllbnRIZWxsbworICAgICAgICAqLworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0xJRU5UX0hFTExPOgorICAgICAgICAgICByZXQgPSBzc2xfd3JpdGVfY2xpZW50X2hlbGxvKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAvKgorICAgICAgICAqICA8PT0gICBTZXJ2ZXJIZWxsbworICAgICAgICAqICAgICAgICBDZXJ0aWZpY2F0ZQorICAgICAgICAqICAgICAgKCBTZXJ2ZXJLZXlFeGNoYW5nZSAgKQorICAgICAgICAqICAgICAgKCBDZXJ0aWZpY2F0ZVJlcXVlc3QgKQorICAgICAgICAqICAgICAgICBTZXJ2ZXJIZWxsb0RvbmUKKyAgICAgICAgKi8KKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMTzoKKyAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3NlcnZlcl9oZWxsbyggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfQ0VSVElGSUNBVEU6CisgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3BhcnNlX2NlcnRpZmljYXRlKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9LRVlfRVhDSEFOR0U6CisgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NFUlRJRklDQVRFX1JFUVVFU1Q6CisgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19ET05FOgorICAgICAgICAgICByZXQgPSBzc2xfcGFyc2Vfc2VydmVyX2hlbGxvX2RvbmUoIHNzbCApOworICAgICAgICAgICBicmVhazsKKworICAgICAgIC8qCisgICAgICAgICogID09PiAoIENlcnRpZmljYXRlL0FsZXJ0ICApCisgICAgICAgICogICAgICAgIENsaWVudEtleUV4Y2hhbmdlCisgICAgICAgICogICAgICAoIENlcnRpZmljYXRlVmVyaWZ5ICApCisgICAgICAgICogICAgICAgIENoYW5nZUNpcGhlclNwZWMKKyAgICAgICAgKiAgICAgICAgRmluaXNoZWQKKyAgICAgICAgKi8KKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9DRVJUSUZJQ0FURToKKyAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfY2VydGlmaWNhdGUoIHNzbCApOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0xJRU5UX0tFWV9FWENIQU5HRToKKyAgICAgICAgICAgcmV0ID0gc3NsX3dyaXRlX2NsaWVudF9rZXlfZXhjaGFuZ2UoIHNzbCApOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfVkVSSUZZOgorICAgICAgICAgICByZXQgPSBzc2xfd3JpdGVfY2VydGlmaWNhdGVfdmVyaWZ5KCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUM6CisgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX2NoYW5nZV9jaXBoZXJfc3BlYyggc3NsICk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DTElFTlRfRklOSVNIRUQ6CisgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX2ZpbmlzaGVkKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAvKgorICAgICAgICAqICA8PT0gICAoIE5ld1Nlc3Npb25UaWNrZXQgKQorICAgICAgICAqICAgICAgICBDaGFuZ2VDaXBoZXJTcGVjCisgICAgICAgICogICAgICAgIEZpbmlzaGVkCisgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfTkVXX1NFU1NJT05fVElDS0VUOgorICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfbmV3X3Nlc3Npb25fdGlja2V0KCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQzoKKyAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcGFyc2VfY2hhbmdlX2NpcGhlcl9zcGVjKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9GSU5JU0hFRDoKKyAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcGFyc2VfZmluaXNoZWQoIHNzbCApOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgTUJFRFRMU19TU0xfRkxVU0hfQlVGRkVSUzoKKyAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJoYW5kc2hha2U6IGRvbmUiICkgKTsKKyAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVA7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfV1JBUFVQOgorICAgICAgICAgICBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfd3JhcHVwKCBzc2wgKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBkZWZhdWx0OgorICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImludmFsaWQgc3RhdGUgJWQiLCBzc2wtPnN0YXRlICkgKTsKKyAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgIH0KKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0xJX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jb29raWUuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF9jb29raWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmIzMmRlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX2Nvb2tpZS5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogIERUTFMgY29va2llIGNhbGxiYWNrcyBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFRoZXNlIHNlc3Npb24gY2FsbGJhY2tzIHVzZSBhIHNpbXBsZSBjaGFpbmVkIGxpc3QKKyAqIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbi4KKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DT09LSUVfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICBmcmVlCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2Nvb2tpZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIElmIERUTFMgaXMgaW4gdXNlLCB0aGVuIGF0IGxlYXN0IG9uZSBvZiBTSEEtMSwgU0hBLTI1NiwgU0hBLTUxMiBpcworICogYXZhaWxhYmxlLiBUcnkgU0hBLTI1NiBmaXJzdCwgNTEyIHdhc3RlcyByZXNvdXJjZXMgc2luY2Ugd2UgbmVlZCB0byBzdGF5CisgKiB3aXRoIG1heCAzMiBieXRlcyBvZiBjb29raWUgZm9yIERUTFMgMS4wCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisjZGVmaW5lIENPT0tJRV9NRCAgICAgICAgICAgTUJFRFRMU19NRF9TSEEyMjQKKyNkZWZpbmUgQ09PS0lFX01EX09VVExFTiAgICAzMgorI2RlZmluZSBDT09LSUVfSE1BQ19MRU4gICAgIDI4CisjZWxpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisjZGVmaW5lIENPT0tJRV9NRCAgICAgICAgICAgTUJFRFRMU19NRF9TSEEzODQKKyNkZWZpbmUgQ09PS0lFX01EX09VVExFTiAgICA0OAorI2RlZmluZSBDT09LSUVfSE1BQ19MRU4gICAgIDI4CisjZWxpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorI2RlZmluZSBDT09LSUVfTUQgICAgICAgICAgIE1CRURUTFNfTURfU0hBMQorI2RlZmluZSBDT09LSUVfTURfT1VUTEVOICAgIDIwCisjZGVmaW5lIENPT0tJRV9ITUFDX0xFTiAgICAgMjAKKyNlbHNlCisjZXJyb3IgIkRUTFMgaGVsbG8gdmVyaWZ5IG5lZWRzIFNIQS0xIG9yIFNIQS0yIgorI2VuZGlmCisKKy8qCisgKiBDb29raWVzIGFyZSBmb3JtZWQgb2YgYSA0LWJ5dGVzIHRpbWVzdGFtcCAob3Igc2VyaWFsIG51bWJlcikgYW5kCisgKiBhbiBITUFDIG9mIHRpbWVzdGVtcCBhbmQgY2xpZW50IElELgorICovCisjZGVmaW5lIENPT0tJRV9MRU4gICAgICAoIDQgKyBDT09LSUVfSE1BQ19MRU4gKQorCit2b2lkIG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0KCBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHggKQoreworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eC0+aG1hY19jdHggKTsKKyNpZiAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICBjdHgtPnNlcmlhbCA9IDA7CisjZW5kaWYKKyAgICBjdHgtPnRpbWVvdXQgPSBNQkVEVExTX1NTTF9DT09LSUVfVElNRU9VVDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZjdHgtPm11dGV4ICk7CisjZW5kaWYKK30KKwordm9pZCBtYmVkdGxzX3NzbF9jb29raWVfc2V0X3RpbWVvdXQoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkZWxheSApCit7CisgICAgY3R4LT50aW1lb3V0ID0gZGVsYXk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29va2llX2ZyZWUoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCApCit7CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4LT5obWFjX2N0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfaW5pdCggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19zc2xfY29va2llX2N0eCApICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9jb29raWVfc2V0dXAoIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9ybmcgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBrZXlbQ09PS0lFX01EX09VVExFTl07CisKKyAgICBpZiggKCByZXQgPSBmX3JuZyggcF9ybmcsIGtleSwgc2l6ZW9mKCBrZXkgKSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LT5obWFjX2N0eCwgbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggQ09PS0lFX01EICksIDEgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJmN0eC0+aG1hY19jdHgsIGtleSwgc2l6ZW9mKCBrZXkgKSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGtleSwgc2l6ZW9mKCBrZXkgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgSE1BQyBwYXJ0IG9mIGEgY29va2llCisgKi8KK3N0YXRpYyBpbnQgc3NsX2Nvb2tpZV9obWFjKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqaG1hY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciB0aW1lWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpX2lkLCBzaXplX3QgY2xpX2lkX2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciBobWFjX291dFtDT09LSUVfTURfT1VUTEVOXTsKKworICAgIGlmKCAoc2l6ZV90KSggZW5kIC0gKnAgKSA8IENPT0tJRV9ITUFDX0xFTiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIGlmKCBtYmVkdGxzX21kX2htYWNfcmVzZXQoICBobWFjX2N0eCApICE9IDAgfHwKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggaG1hY19jdHgsIHRpbWUsIDQgKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoIGhtYWNfY3R4LCBjbGlfaWQsIGNsaV9pZF9sZW4gKSAhPSAwIHx8CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goIGhtYWNfY3R4LCBobWFjX291dCApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBtZW1jcHkoICpwLCBobWFjX291dCwgQ09PS0lFX0hNQUNfTEVOICk7CisgICAgKnAgKz0gQ09PS0lFX0hNQUNfTEVOOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBjb29raWUgZm9yIERUTFMgQ2xpZW50SGVsbG8gdmVyaWZpY2F0aW9uCisgKi8KK2ludCBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGUoIHZvaWQgKnBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpX2lkLCBzaXplX3QgY2xpX2lkX2xlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX3NzbF9jb29raWVfY3R4ICpjdHggPSAobWJlZHRsc19zc2xfY29va2llX2N0eCAqKSBwX2N0eDsKKyAgICB1bnNpZ25lZCBsb25nIHQ7CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY2xpX2lkID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIChzaXplX3QpKCBlbmQgLSAqcCApIDwgQ09PS0lFX0xFTiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgdCA9ICh1bnNpZ25lZCBsb25nKSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyNlbHNlCisgICAgdCA9IGN0eC0+c2VyaWFsKys7CisjZW5kaWYKKworICAgICgqcClbMF0gPSAodW5zaWduZWQgY2hhcikoIHQgPj4gMjQgKTsKKyAgICAoKnApWzFdID0gKHVuc2lnbmVkIGNoYXIpKCB0ID4+IDE2ICk7CisgICAgKCpwKVsyXSA9ICh1bnNpZ25lZCBjaGFyKSggdCA+PiAgOCApOworICAgICgqcClbM10gPSAodW5zaWduZWQgY2hhcikoIHQgICAgICAgKTsKKyAgICAqcCArPSA0OworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiArIHJldCApOworI2VuZGlmCisKKyAgICByZXQgPSBzc2xfY29va2llX2htYWMoICZjdHgtPmhtYWNfY3R4LCAqcCAtIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBlbmQsIGNsaV9pZCwgY2xpX2lkX2xlbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorCisvKgorICogQ2hlY2sgYSBjb29raWUKKyAqLworaW50IG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVjayggdm9pZCAqcF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29va2llLCBzaXplX3QgY29va2llX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGlfaWQsIHNpemVfdCBjbGlfaWRfbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHJlZl9obWFjW0NPT0tJRV9ITUFDX0xFTl07CisgICAgaW50IHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHJlZl9obWFjOworICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggKmN0eCA9IChtYmVkdGxzX3NzbF9jb29raWVfY3R4ICopIHBfY3R4OworICAgIHVuc2lnbmVkIGxvbmcgY3VyX3RpbWUsIGNvb2tpZV90aW1lOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGNsaV9pZCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBjb29raWVfbGVuICE9IENPT0tJRV9MRU4gKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tdXRleF9sb2NrKCAmY3R4LT5tdXRleCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICsgcmV0ICk7CisjZW5kaWYKKworICAgIGlmKCBzc2xfY29va2llX2htYWMoICZjdHgtPmhtYWNfY3R4LCBjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnAsIHAgKyBzaXplb2YoIHJlZl9obWFjICksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xpX2lkLCBjbGlfaWRfbGVuICkgIT0gMCApCisgICAgICAgIHJldCA9IC0xOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCBtYmVkdGxzX211dGV4X3VubG9jayggJmN0eC0+bXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworI2VuZGlmCisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggY29va2llICsgNCwgcmVmX2htYWMsIHNpemVvZiggcmVmX2htYWMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIGN1cl90aW1lID0gKHVuc2lnbmVkIGxvbmcpIG1iZWR0bHNfdGltZSggTlVMTCApOworI2Vsc2UKKyAgICBjdXJfdGltZSA9IGN0eC0+c2VyaWFsOworI2VuZGlmCisKKyAgICBjb29raWVfdGltZSA9ICggKHVuc2lnbmVkIGxvbmcpIGNvb2tpZVswXSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgICggKHVuc2lnbmVkIGxvbmcpIGNvb2tpZVsxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICggKHVuc2lnbmVkIGxvbmcpIGNvb2tpZVsyXSA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICggKHVuc2lnbmVkIGxvbmcpIGNvb2tpZVszXSAgICAgICApOworCisgICAgaWYoIGN0eC0+dGltZW91dCAhPSAwICYmIGN1cl90aW1lIC0gY29va2llX3RpbWUgPiBjdHgtPnRpbWVvdXQgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DT09LSUVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Nydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMGQyZDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfc3J2LmMKQEAgLTAsMCArMSwzOTI2IEBACisvKgorICogIFNTTHYzL1RMU3YxIHNlcnZlci1zaWRlIGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICBmcmVlCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvZGVidWcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm1fdGltZS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCitpbnQgbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWxlbiApCit7CisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgIT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1iZWR0bHNfZnJlZSggc3NsLT5jbGlfaWQgKTsKKworICAgIGlmKCAoIHNzbC0+Y2xpX2lkID0gbWJlZHRsc19jYWxsb2MoIDEsIGlsZW4gKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKworICAgIG1lbWNweSggc3NsLT5jbGlfaWQsIGluZm8sIGlsZW4gKTsKKyAgICBzc2wtPmNsaV9pZF9sZW4gPSBpbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZV90ICpmX2Nvb2tpZV93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVja190ICpmX2Nvb2tpZV9jaGVjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfY29va2llICkKK3sKKyAgICBjb25mLT5mX2Nvb2tpZV93cml0ZSA9IGZfY29va2llX3dyaXRlOworICAgIGNvbmYtPmZfY29va2llX2NoZWNrID0gZl9jb29raWVfY2hlY2s7CisgICAgY29uZi0+cF9jb29raWUgICAgICAgPSBwX2Nvb2tpZTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2VydmVybmFtZV9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3Qgc2VydmVybmFtZV9saXN0X3NpemUsIGhvc3RuYW1lX2xlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJwYXJzZSBTZXJ2ZXJOYW1lIGV4dGVuc2lvbiIgKSApOworCisgICAgc2VydmVybmFtZV9saXN0X3NpemUgPSAoICggYnVmWzBdIDw8IDggKSB8ICggYnVmWzFdICkgKTsKKyAgICBpZiggc2VydmVybmFtZV9saXN0X3NpemUgKyAyICE9IGxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgcCA9IGJ1ZiArIDI7CisgICAgd2hpbGUoIHNlcnZlcm5hbWVfbGlzdF9zaXplID4gMCApCisgICAgeworICAgICAgICBob3N0bmFtZV9sZW4gPSAoICggcFsxXSA8PCA4ICkgfCBwWzJdICk7CisgICAgICAgIGlmKCBob3N0bmFtZV9sZW4gKyAzID4gc2VydmVybmFtZV9saXN0X3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHBbMF0gPT0gTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUVfSE9TVE5BTUUgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBzc2wtPmNvbmYtPmZfc25pKCBzc2wtPmNvbmYtPnBfc25pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLCBwICsgMywgaG9zdG5hbWVfbGVuICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9zbmlfd3JhcHBlciIsIHJldCApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlJFQ09HTklaRURfTkFNRSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgc2VydmVybmFtZV9saXN0X3NpemUgLT0gaG9zdG5hbWVfbGVuICsgMzsKKyAgICAgICAgcCArPSBob3N0bmFtZV9sZW4gKyAzOworICAgIH0KKworICAgIGlmKCBzZXJ2ZXJuYW1lX2xpc3Rfc2l6ZSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OICovCisKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3JlbmVnb3RpYXRpb25faW5mbyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICAvKiBDaGVjayB2ZXJpZnktZGF0YSBpbiBjb25zdGFudC10aW1lLiBUaGUgbGVuZ3RoIE9UT0ggaXMgbm8gc2VjcmV0ICovCisgICAgICAgIGlmKCBsZW4gICAgIT0gMSArIHNzbC0+dmVyaWZ5X2RhdGFfbGVuIHx8CisgICAgICAgICAgICBidWZbMF0gIT0gICAgIHNzbC0+dmVyaWZ5X2RhdGFfbGVuIHx8CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIGJ1ZiArIDEsIHNzbC0+cGVlcl92ZXJpZnlfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT52ZXJpZnlfZGF0YV9sZW4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJub24tbWF0Y2hpbmcgcmVuZWdvdGlhdGlvbiBpbmZvIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisgICAgeworICAgICAgICBpZiggbGVuICE9IDEgfHwgYnVmWzBdICE9IDB4MCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibm9uLXplcm8gbGVuZ3RoIHJlbmVnb3RpYXRpb24gaW5mbyIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gPSBNQkVEVExTX1NTTF9TRUNVUkVfUkVORUdPVElBVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2Vfc2lnbmF0dXJlX2FsZ29yaXRobXNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgc2l6ZV90IHNpZ19hbGdfbGlzdF9zaXplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmICsgbGVuOworICAgIGNvbnN0IGludCAqbWRfY3VyOworCisKKyAgICBzaWdfYWxnX2xpc3Rfc2l6ZSA9ICggKCBidWZbMF0gPDwgOCApIHwgKCBidWZbMV0gKSApOworICAgIGlmKCBzaWdfYWxnX2xpc3Rfc2l6ZSArIDIgIT0gbGVuIHx8CisgICAgICAgIHNpZ19hbGdfbGlzdF9zaXplICUgMiAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZvciBub3csIGlnbm9yZSB0aGUgU2lnbmF0dXJlQWxnb3JpdGhtIHBhcnQgYW5kIHJlbHkgb24gb2ZmZXJlZAorICAgICAqIGNpcGhlcnN1aXRlcyBvbmx5IGZvciB0aGF0IHBhcnQuIFRvIGJlIGZpeGVkIGxhdGVyLgorICAgICAqCisgICAgICogU28sIGp1c3QgbG9vayBhdCB0aGUgSGFzaEFsZ29yaXRobSBwYXJ0LgorICAgICAqLworICAgIGZvciggbWRfY3VyID0gc3NsLT5jb25mLT5zaWdfaGFzaGVzOyAqbWRfY3VyICE9IE1CRURUTFNfTURfTk9ORTsgbWRfY3VyKysgKSB7CisgICAgICAgIGZvciggcCA9IGJ1ZiArIDI7IHAgPCBlbmQ7IHAgKz0gMiApIHsKKyAgICAgICAgICAgIGlmKCAqbWRfY3VyID09IChpbnQpIG1iZWR0bHNfc3NsX21kX2FsZ19mcm9tX2hhc2goIHBbMF0gKSApIHsKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+c2lnX2FsZyA9IHBbMF07CisgICAgICAgICAgICAgICAgZ290byBoYXZlX3NpZ19hbGc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTb21lIGtleSBlY2hhbmdlcyBkbyBub3QgbmVlZCBzaWduYXR1cmVzIGF0IGFsbCAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAibm8gc2lnbmF0dXJlX2FsZ29yaXRobSBpbiBjb21tb24iICkgKTsKKyAgICByZXR1cm4oIDAgKTsKKworaGF2ZV9zaWdfYWxnOgorICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYzLCBzaWduYXR1cmVfYWxnb3JpdGhtIGV4dDogJWQiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5zaWdfYWxnICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAmJgorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zdXBwb3J0ZWRfZWxsaXB0aWNfY3VydmVzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgbGlzdF9zaXplLCBvdXJfc2l6ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm8sICoqY3VydmVzOworCisgICAgbGlzdF9zaXplID0gKCAoIGJ1ZlswXSA8PCA4ICkgfCAoIGJ1ZlsxXSApICk7CisgICAgaWYoIGxpc3Rfc2l6ZSArIDIgIT0gbGVuIHx8CisgICAgICAgIGxpc3Rfc2l6ZSAlIDIgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgLyogU2hvdWxkIG5ldmVyIGhhcHBlbiB1bmxlc3MgY2xpZW50IGR1cGxpY2F0ZXMgdGhlIGV4dGVuc2lvbiAqLworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+Y3VydmVzICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIC8qIERvbid0IGFsbG93IG91ciBwZWVyIHRvIG1ha2UgdXMgYWxsb2NhdGUgdG9vIG11Y2ggbWVtb3J5LAorICAgICAqIGFuZCBsZWF2ZSByb29tIGZvciBhIGZpbmFsIDAgKi8KKyAgICBvdXJfc2l6ZSA9IGxpc3Rfc2l6ZSAvIDIgKyAxOworICAgIGlmKCBvdXJfc2l6ZSA+IE1CRURUTFNfRUNQX0RQX01BWCApCisgICAgICAgIG91cl9zaXplID0gTUJFRFRMU19FQ1BfRFBfTUFYOworCisgICAgaWYoICggY3VydmVzID0gbWJlZHRsc19jYWxsb2MoIG91cl9zaXplLCBzaXplb2YoICpjdXJ2ZXMgKSApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworCisgICAgc3NsLT5oYW5kc2hha2UtPmN1cnZlcyA9IGN1cnZlczsKKworICAgIHAgPSBidWYgKyAyOworICAgIHdoaWxlKCBsaXN0X3NpemUgPiAwICYmIG91cl9zaXplID4gMSApCisgICAgeworICAgICAgICBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX3Rsc19pZCggKCBwWzBdIDw8IDggKSB8IHBbMV0gKTsKKworICAgICAgICBpZiggY3VydmVfaW5mbyAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgKmN1cnZlcysrID0gY3VydmVfaW5mbzsKKyAgICAgICAgICAgIG91cl9zaXplLS07CisgICAgICAgIH0KKworICAgICAgICBsaXN0X3NpemUgLT0gMjsKKyAgICAgICAgcCArPSAyOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0cyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgbGlzdF9zaXplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICBsaXN0X3NpemUgPSBidWZbMF07CisgICAgaWYoIGxpc3Rfc2l6ZSArIDEgIT0gbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBwID0gYnVmICsgMTsKKyAgICB3aGlsZSggbGlzdF9zaXplID4gMCApCisgICAgeworICAgICAgICBpZiggcFswXSA9PSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQgfHwKKyAgICAgICAgICAgIHBbMF0gPT0gTUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRCApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5wb2ludF9mb3JtYXQgPSBwWzBdOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgucG9pbnRfZm9ybWF0ID0gcFswXTsKKyNlbmRpZgorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCA0LCAoICJwb2ludCBmb3JtYXQgc2VsZWN0ZWQ6ICVkIiwgcFswXSApICk7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGxpc3Rfc2l6ZS0tOworICAgICAgICBwKys7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2VjanBha2Vfa2twcCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggbWJlZHRsc19lY2pwYWtlX2NoZWNrKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4ICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNraXAgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUoICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF9vbmUiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBPbmx5IG1hcmsgdGhlIGV4dGVuc2lvbiBhcyBPSyB3aGVuIHdlJ3JlIHN1cmUgaXQgaXMgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+Y2xpX2V4dHMgfD0gTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUF9PSzsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorc3RhdGljIGludCBzc2xfcGFyc2VfbWF4X2ZyYWdtZW50X2xlbmd0aF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIGxlbiAhPSAxIHx8IGJ1ZlswXSA+PSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fSU5WQUxJRCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+bWZsX2NvZGUgPSBidWZbMF07CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorc3RhdGljIGludCBzc2xfcGFyc2VfdHJ1bmNhdGVkX2htYWNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIGxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAoKHZvaWQpIGJ1Zik7CisKKyAgICBpZiggc3NsLT5jb25mLT50cnVuY19obWFjID09IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRCApCisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnRydW5jX2htYWMgPSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQ7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorc3RhdGljIGludCBzc2xfcGFyc2VfZW5jcnlwdF90aGVuX21hY19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggbGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgICgodm9pZCkgYnVmKTsKKworICAgIGlmKCBzc2wtPmNvbmYtPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQgJiYKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgIT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmVuY3J5cHRfdGhlbl9tYWMgPSBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRDsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9leHRlbmRlZF9tc19leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggbGVuICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgICgodm9pZCkgYnVmKTsKKworICAgIGlmKCBzc2wtPmNvbmYtPmV4dGVuZGVkX21zID09IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQgJiYKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgIT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5leHRlbmRlZF9tcyA9IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQ7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9zZXNzaW9uX3RpY2tldF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gc2Vzc2lvbjsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25faW5pdCggJnNlc3Npb24gKTsKKworICAgIGlmKCBzc2wtPmNvbmYtPmZfdGlja2V0X3BhcnNlID09IE5VTEwgfHwKKyAgICAgICAgc3NsLT5jb25mLT5mX3RpY2tldF93cml0ZSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIC8qIFJlbWVtYmVyIHRoZSBjbGllbnQgYXNrZWQgdXMgdG8gc2VuZCBhIG5ldyB0aWNrZXQgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ID0gMTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidGlja2V0IGxlbmd0aDogJWQiLCBsZW4gKSApOworCisgICAgaWYoIGxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInRpY2tldCByZWplY3RlZDogcmVuZWdvdGlhdGluZyIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisgICAgLyoKKyAgICAgKiBGYWlsdXJlcyBhcmUgb2s6IGp1c3QgaWdub3JlIHRoZSB0aWNrZXQgYW5kIHByb2NlZWQuCisgICAgICovCisgICAgaWYoICggcmV0ID0gc3NsLT5jb25mLT5mX3RpY2tldF9wYXJzZSggc3NsLT5jb25mLT5wX3RpY2tldCwgJnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCAmc2Vzc2lvbiApOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICkKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidGlja2V0IGlzIG5vdCBhdXRoZW50aWMiICkgKTsKKyAgICAgICAgZWxzZSBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9TRVNTSU9OX1RJQ0tFVF9FWFBJUkVEICkKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidGlja2V0IGlzIGV4cGlyZWQiICkgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfdGlja2V0X3BhcnNlIiwgcmV0ICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBLZWVwIHRoZSBzZXNzaW9uIElEIHNlbnQgYnkgdGhlIGNsaWVudCwgc2luY2Ugd2UgTVVTVCBzZW5kIGl0IGJhY2sgdG8KKyAgICAgKiBpbmZvcm0gdGhlbSB3ZSdyZSBhY2NlcHRpbmcgdGhlIHRpY2tldCAgKFJGQyA1MDc3IHNlY3Rpb24gMy40KQorICAgICAqLworICAgIHNlc3Npb24uaWRfbGVuID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWRfbGVuOworICAgIG1lbWNweSggJnNlc3Npb24uaWQsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCBzZXNzaW9uLmlkX2xlbiApOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICk7CisgICAgbWVtY3B5KCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLCAmc2Vzc2lvbiwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICkgKTsKKworICAgIC8qIFplcm9pemUgaW5zdGVhZCBvZiBmcmVlIGFzIHdlIGNvcGllZCB0aGUgY29udGVudCAqLworICAgIG1iZWR0bHNfemVyb2l6ZSggJnNlc3Npb24sIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiApICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID0gMTsKKworICAgIC8qIERvbid0IHNlbmQgYSBuZXcgdGlja2V0IGFmdGVyIGFsbCwgdGhpcyBvbmUgaXMgT0sgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+bmV3X3Nlc3Npb25fdGlja2V0ID0gMDsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorc3RhdGljIGludCBzc2xfcGFyc2VfYWxwbl9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBsaXN0X2xlbiwgY3VyX2xlbiwgb3Vyc19sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGhlaXJzLCAqc3RhcnQsICplbmQ7CisgICAgY29uc3QgY2hhciAqKm91cnM7CisKKyAgICAvKiBJZiBBTFBOIG5vdCBjb25maWd1cmVkLCBqdXN0IGlnbm9yZSB0aGUgZXh0ZW5zaW9uICovCisgICAgaWYoIHNzbC0+Y29uZi0+YWxwbl9saXN0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qCisgICAgICogb3BhcXVlIFByb3RvY29sTmFtZTwxLi4yXjgtMT47CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgICBQcm90b2NvbE5hbWUgcHJvdG9jb2xfbmFtZV9saXN0PDIuLjJeMTYtMT4KKyAgICAgKiB9IFByb3RvY29sTmFtZUxpc3Q7CisgICAgICovCisKKyAgICAvKiBNaW4gbGVuZ3RoIGlzIDIgKGxpc3RfbGVuKSArIDEgKG5hbWVfbGVuKSArIDEgKG5hbWUpICovCisgICAgaWYoIGxlbiA8IDQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisKKyAgICBsaXN0X2xlbiA9ICggYnVmWzBdIDw8IDggKSB8IGJ1ZlsxXTsKKyAgICBpZiggbGlzdF9sZW4gIT0gbGVuIC0gMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKworICAgIC8qCisgICAgICogVXNlIG91ciBvcmRlciBvZiBwcmVmZXJlbmNlCisgICAgICovCisgICAgc3RhcnQgPSBidWYgKyAyOworICAgIGVuZCA9IGJ1ZiArIGxlbjsKKyAgICBmb3IoIG91cnMgPSBzc2wtPmNvbmYtPmFscG5fbGlzdDsgKm91cnMgIT0gTlVMTDsgb3VycysrICkKKyAgICB7CisgICAgICAgIG91cnNfbGVuID0gc3RybGVuKCAqb3VycyApOworICAgICAgICBmb3IoIHRoZWlycyA9IHN0YXJ0OyB0aGVpcnMgIT0gZW5kOyB0aGVpcnMgKz0gY3VyX2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElmIHRoZSBsaXN0IGlzIHdlbGwgZm9ybWVkLCB3ZSBzaG91bGQgZ2V0IGVxdWFsaXR5IGZpcnN0ICovCisgICAgICAgICAgICBpZiggdGhlaXJzID4gZW5kICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisKKyAgICAgICAgICAgIGN1cl9sZW4gPSAqdGhlaXJzKys7CisKKyAgICAgICAgICAgIC8qIEVtcHR5IHN0cmluZ3MgTVVTVCBOT1QgYmUgaW5jbHVkZWQgKi8KKyAgICAgICAgICAgIGlmKCBjdXJfbGVuID09IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKworICAgICAgICAgICAgaWYoIGN1cl9sZW4gPT0gb3Vyc19sZW4gJiYKKyAgICAgICAgICAgICAgICBtZW1jbXAoIHRoZWlycywgKm91cnMsIGN1cl9sZW4gKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzc2wtPmFscG5fY2hvc2VuID0gKm91cnM7CisgICAgICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZiB3ZSBnZXQgdGhlcmUsIG5vIG1hdGNoIHdhcyBmb3VuZCAqLworICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQVBQTElDQVRJT05fUFJPVE9DT0wgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCisvKgorICogQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgU2VydmVySGVsbG8gcGFyc2luZyBhbmQgcmVsYXRlZCBhY3Rpb25zCisgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorLyoKKyAqIFJldHVybiAwIGlmIHRoZSBnaXZlbiBrZXkgdXNlcyBvbmUgb2YgdGhlIGFjY2VwdGFibGUgY3VydmVzLCAtMSBvdGhlcndpc2UKKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorc3RhdGljIGludCBzc2xfY2hlY2tfa2V5X2N1cnZlKCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICoqY3VydmVzICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICoqY3J2ID0gY3VydmVzOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCA9IG1iZWR0bHNfcGtfZWMoICpwayApLT5ncnAuaWQ7CisKKyAgICB3aGlsZSggKmNydiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCAoKmNydiktPmdycF9pZCA9PSBncnBfaWQgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIGNydisrOworICAgIH0KKworICAgIHJldHVybiggLTEgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKworLyoKKyAqIFRyeSBwaWNraW5nIGEgY2VydGlmaWNhdGUgZm9yIHRoaXMgY2lwaGVyc3VpdGUsCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNzbF9waWNrX2NlcnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqIGNpcGhlcnN1aXRlX2luZm8gKQoreworICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICpjdXIsICpsaXN0LCAqZmFsbGJhY2sgPSBOVUxMOworICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZyA9IG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9zaWdfcGtfYWxnKCBjaXBoZXJzdWl0ZV9pbmZvICk7CisgICAgdWludDMyX3QgZmxhZ3M7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5zbmlfa2V5X2NlcnQgIT0gTlVMTCApCisgICAgICAgIGxpc3QgPSBzc2wtPmhhbmRzaGFrZS0+c25pX2tleV9jZXJ0OworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBsaXN0ID0gc3NsLT5jb25mLT5rZXlfY2VydDsKKworICAgIGlmKCBwa19hbGcgPT0gTUJFRFRMU19QS19OT05FICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNpcGhlcnN1aXRlIHJlcXVpcmVzIGNlcnRpZmljYXRlIiApICk7CisKKyAgICBpZiggbGlzdCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhhcyBubyBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorCisgICAgZm9yKCBjdXIgPSBsaXN0OyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5uZXh0ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0NSVCggMywgImNhbmRpZGF0ZSBjZXJ0aWZpY2F0ZSBjaGFpbiwgY2VydGlmaWNhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmNlcnQgKTsKKworICAgICAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggY3VyLT5rZXksIHBrX2FsZyApICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjZXJ0aWZpY2F0ZSBtaXNtYXRjaDoga2V5IHR5cGUiICkgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBhdm9pZHMgc2VuZGluZyB0aGUgY2xpZW50IGEgY2VydCBpdCdsbCByZWplY3QgYmFzZWQgb24KKyAgICAgICAgICoga2V5VXNhZ2Ugb3Igb3RoZXIgZXh0ZW5zaW9ucy4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gcHJvdmlzaW9uIGRpZmZlcmVudCBjZXJ0aWZpY2F0ZXMgZm9yCisgICAgICAgICAqIGRpZmZlcmVudCB1c2VzIGJhc2VkIG9uIGtleVVzYWdlLCBlZyBpZiB0aGV5IHdhbnQgdG8gYXZvaWQgc2lnbmluZworICAgICAgICAgKiBhbmQgZGVjcnlwdGluZyB3aXRoIHRoZSBzYW1lIFJTQSBrZXkuCisgICAgICAgICAqLworICAgICAgICBpZiggbWJlZHRsc19zc2xfY2hlY2tfY2VydF91c2FnZSggY3VyLT5jZXJ0LCBjaXBoZXJzdWl0ZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX1NFUlZFUiwgJmZsYWdzICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2VydGlmaWNhdGUgbWlzbWF0Y2g6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHRlbmRlZCkga2V5IHVzYWdlIGV4dGVuc2lvbiIgKSApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfRUNEU0EgJiYKKyAgICAgICAgICAgIHNzbF9jaGVja19rZXlfY3VydmUoIGN1ci0+a2V5LCBzc2wtPmhhbmRzaGFrZS0+Y3VydmVzICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2VydGlmaWNhdGUgbWlzbWF0Y2g6IGVsbGlwdGljIGN1cnZlIiApICk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLyoKKyAgICAgICAgICogVHJ5IHRvIHNlbGVjdCBhIFNIQS0xIGNlcnRpZmljYXRlIGZvciBwcmUtMS4yIGNsaWVudHMsIGJ1dCBzdGlsbAorICAgICAgICAgKiBwcmVzZW50IHRoZW0gYSBTSEEtaGlnaGVyIGNlcnQgcmF0aGVyIHRoYW4gZmFpbGluZyBpZiBpdCdzIHRoZSBvbmx5CisgICAgICAgICAqIG9uZSB3ZSBnb3QgdGhhdCBzYXRpc2ZpZXMgdGhlIG90aGVyIGNvbmRpdGlvbnMuCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgJiYKKyAgICAgICAgICAgIGN1ci0+Y2VydC0+c2lnX21kICE9IE1CRURUTFNfTURfU0hBMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBmYWxsYmFjayA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBmYWxsYmFjayA9IGN1cjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNlcnRpZmljYXRlIG5vdCBwcmVmZXJyZWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaGEtMiB3aXRoIHByZS1UTFMgMS4yIGNsaWVudCIgKSApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiB3ZSBnZXQgdGhlcmUsIHdlIGdvdCBhIHdpbm5lciAqLworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiggY3VyID09IE5VTEwgKQorICAgICAgICBjdXIgPSBmYWxsYmFjazsKKworICAgIC8qIERvIG5vdCB1cGRhdGUgc3NsLT5oYW5kc2hha2UtPmtleV9jZXJ0IHVubGVzcyB0aGVyZSBpcyBhIG1hdGNoICovCisgICAgaWYoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5rZXlfY2VydCA9IGN1cjsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQ1JUKCAzLCAic2VsZWN0ZWQgY2VydGlmaWNhdGUgY2hhaW4sIGNlcnRpZmljYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmtleV9jZXJ0LT5jZXJ0ICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIHJldHVybiggLTEgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworLyoKKyAqIENoZWNrIGlmIGEgZ2l2ZW4gY2lwaGVyc3VpdGUgaXMgc3VpdGFibGUgZm9yIHVzZSB3aXRoIG91ciBjb25maWcva2V5cy9ldGMKKyAqIFNldHMgY2lwaGVyc3VpdGVfaW5mbyBvbmx5IGlmIHRoZSBzdWl0ZSBtYXRjaGVzLgorICovCitzdGF0aWMgaW50IHNzbF9jaXBoZXJzdWl0ZV9tYXRjaCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgc3VpdGVfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqKmNpcGhlcnN1aXRlX2luZm8gKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKnN1aXRlX2luZm87CisKKyAgICBzdWl0ZV9pbmZvID0gbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZCggc3VpdGVfaWQgKTsKKyAgICBpZiggc3VpdGVfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidHJ5aW5nIGNpcGhlcnN1aXRlOiAlcyIsIHN1aXRlX2luZm8tPm5hbWUgKSApOworCisgICAgaWYoIHN1aXRlX2luZm8tPm1pbl9taW5vcl92ZXIgPiBzc2wtPm1pbm9yX3ZlciB8fAorICAgICAgICBzdWl0ZV9pbmZvLT5tYXhfbWlub3JfdmVyIDwgc3NsLT5taW5vcl92ZXIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogdmVyc2lvbiIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICAoIHN1aXRlX2luZm8tPmZsYWdzICYgTUJFRFRMU19DSVBIRVJTVUlURV9OT0RUTFMgKSApCisgICAgICAgIHJldHVybiggMCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIGlmKCBzc2wtPmNvbmYtPmFyYzRfZGlzYWJsZWQgPT0gTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRCAmJgorICAgICAgICAgICAgc3VpdGVfaW5mby0+Y2lwaGVyID09IE1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6IHJjNCIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIGlmKCBzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSAmJgorICAgICAgICAoIHNzbC0+aGFuZHNoYWtlLT5jbGlfZXh0cyAmIE1CRURUTFNfVExTX0VYVF9FQ0pQQUtFX0tLUFBfT0sgKSA9PSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgbWlzbWF0Y2g6IGVjanBha2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBjb25maWd1cmVkIG9yIGV4dCBtaXNzaW5nIiApICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICBpZiggbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19lYyggc3VpdGVfaW5mbyApICYmCisgICAgICAgICggc3NsLT5oYW5kc2hha2UtPmN1cnZlcyA9PSBOVUxMIHx8CisgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmN1cnZlc1swXSA9PSBOVUxMICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBjb21tb24gZWxsaXB0aWMgY3VydmUiICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICAvKiBJZiB0aGUgY2lwaGVyc3VpdGUgcmVxdWlyZXMgYSBwcmUtc2hhcmVkIGtleSBhbmQgd2UgZG9uJ3QKKyAgICAgKiBoYXZlIG9uZSwgc2tpcCBpdCBub3cgcmF0aGVyIHRoYW4gZmFpbGluZyBsYXRlciAqLworICAgIGlmKCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV91c2VzX3Bzayggc3VpdGVfaW5mbyApICYmCisgICAgICAgIHNzbC0+Y29uZi0+Zl9wc2sgPT0gTlVMTCAmJgorICAgICAgICAoIHNzbC0+Y29uZi0+cHNrID09IE5VTEwgfHwgc3NsLT5jb25mLT5wc2tfaWRlbnRpdHkgPT0gTlVMTCB8fAorICAgICAgICAgIHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5X2xlbiA9PSAwIHx8IHNzbC0+Y29uZi0+cHNrX2xlbiA9PSAwICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogbm8gcHJlLXNoYXJlZCBrZXkiICkgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAvKgorICAgICAqIEZpbmFsIGNoZWNrOiBpZiBjaXBoZXJzdWl0ZSByZXF1aXJlcyB1cyB0byBoYXZlIGEKKyAgICAgKiBjZXJ0aWZpY2F0ZS9rZXkgb2YgYSBwYXJ0aWN1bGFyIHR5cGU6CisgICAgICogLSBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNlcnRpZmljYXRlIGlmIHdlIGhhdmUgb25lLCBvcgorICAgICAqIC0gdHJ5IHRoZSBuZXh0IGNpcGhlcnN1aXRlIGlmIHdlIGRvbid0CisgICAgICogVGhpcyBtdXN0IGJlIGRvbmUgbGFzdCBzaW5jZSB3ZSBtb2RpZnkgdGhlIGtleV9jZXJ0IGxpc3QuCisgICAgICovCisgICAgaWYoIHNzbF9waWNrX2NlcnQoIHNzbCwgc3VpdGVfaW5mbyApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBzdWl0YWJsZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworICAgICpjaXBoZXJzdWl0ZV9pbmZvID0gc3VpdGVfaW5mbzsKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPKQorc3RhdGljIGludCBzc2xfcGFyc2VfY2xpZW50X2hlbGxvX3YyKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQsIGdvdF9jb21tb25fc3VpdGU7CisgICAgdW5zaWduZWQgaW50IGksIGo7CisgICAgc2l6ZV90IG47CisgICAgdW5zaWduZWQgaW50IGNpcGhfbGVuLCBzZXNzX2xlbiwgY2hhbF9sZW47CisgICAgdW5zaWduZWQgY2hhciAqYnVmLCAqcDsKKyAgICBjb25zdCBpbnQgKmNpcGhlcnN1aXRlczsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjbGllbnQgaGVsbG8gdjIiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzICE9IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2xpZW50IGhlbGxvIHYyIGlsbGVnYWwgZm9yIHJlbmVnb3RpYXRpb24iICkgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworICAgIGJ1ZiA9IHNzbC0+aW5faGRyOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmVjb3JkIGhlYWRlciIsIGJ1ZiwgNSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8gdjIsIG1lc3NhZ2UgdHlwZTogJWQiLAorICAgICAgICAgICAgICAgICAgIGJ1ZlsyXSApICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8gdjIsIG1lc3NhZ2UgbGVuLjogJWQiLAorICAgICAgICAgICAgICAgICAgICggKCBidWZbMF0gJiAweDdGICkgPDwgOCApIHwgYnVmWzFdICkgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImNsaWVudCBoZWxsbyB2MiwgbWF4LiB2ZXJzaW9uOiBbJWQ6JWRdIiwKKyAgICAgICAgICAgICAgICAgICBidWZbM10sIGJ1Zls0XSApICk7CisKKyAgICAvKgorICAgICAqIFNTTHYyIENsaWVudCBIZWxsbworICAgICAqCisgICAgICogUmVjb3JkIGxheWVyOgorICAgICAqICAgICAwICAuICAgMSAgIG1lc3NhZ2UgbGVuZ3RoCisgICAgICoKKyAgICAgKiBTU0wgbGF5ZXI6CisgICAgICogICAgIDIgIC4gICAyICAgbWVzc2FnZSB0eXBlCisgICAgICogICAgIDMgIC4gICA0ICAgcHJvdG9jb2wgdmVyc2lvbgorICAgICAqLworICAgIGlmKCBidWZbMl0gIT0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPIHx8CisgICAgICAgIGJ1ZlszXSAhPSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIG4gPSAoICggYnVmWzBdIDw8IDggKSB8IGJ1ZlsxXSApICYgMHg3RkZGOworCisgICAgaWYoIG4gPCAxNyB8fCBuID4gNTEyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBzc2wtPm1ham9yX3ZlciA9IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMzsKKyAgICBzc2wtPm1pbm9yX3ZlciA9ICggYnVmWzRdIDw9IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciApCisgICAgICAgICAgICAgICAgICAgICA/IGJ1Zls0XSAgOiBzc2wtPmNvbmYtPm1heF9taW5vcl92ZXI7CisKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBzc2wtPmNvbmYtPm1pbl9taW5vcl92ZXIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJjbGllbnQgb25seSBzdXBwb3J0cyBzc2wgc21hbGxlciB0aGFuIG1pbmltdW0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBbJWQ6JWRdIDwgWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5tYWpvcl92ZXIsIHNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+bWluX21ham9yX3Zlciwgc3NsLT5jb25mLT5taW5fbWlub3JfdmVyICkgKTsKKworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1BST1RPQ09MX1ZFUlNJT04gKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gKTsKKyAgICB9CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+bWF4X21ham9yX3ZlciA9IGJ1ZlszXTsKKyAgICBzc2wtPmhhbmRzaGFrZS0+bWF4X21pbm9yX3ZlciA9IGJ1Zls0XTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2ZldGNoX2lucHV0KCBzc2wsIDIgKyBuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2ZldGNoX2lucHV0IiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgc3NsLT5oYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSggc3NsLCBidWYgKyAyLCBuICk7CisKKyAgICBidWYgPSBzc2wtPmluX21zZzsKKyAgICBuID0gc3NsLT5pbl9sZWZ0IC0gNTsKKworICAgIC8qCisgICAgICogICAgMCAgLiAgIDEgICBjaXBoZXJzdWl0ZWxpc3QgbGVuZ3RoCisgICAgICogICAgMiAgLiAgIDMgICBzZXNzaW9uIGlkIGxlbmd0aAorICAgICAqICAgIDQgIC4gICA1ICAgY2hhbGxlbmdlIGxlbmd0aAorICAgICAqICAgIDYgIC4gIC4uICAgY2lwaGVyc3VpdGVsaXN0CisgICAgICogICAuLiAgLiAgLi4gICBzZXNzaW9uIGlkCisgICAgICogICAuLiAgLiAgLi4gICBjaGFsbGVuZ2UKKyAgICAgKi8KKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJyZWNvcmQgY29udGVudHMiLCBidWYsIG4gKTsKKworICAgIGNpcGhfbGVuID0gKCBidWZbMF0gPDwgOCApIHwgYnVmWzFdOworICAgIHNlc3NfbGVuID0gKCBidWZbMl0gPDwgOCApIHwgYnVmWzNdOworICAgIGNoYWxfbGVuID0gKCBidWZbNF0gPDwgOCApIHwgYnVmWzVdOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjaXBoX2xlbjogJWQsIHNlc3NfbGVuOiAlZCwgY2hhbF9sZW46ICVkIiwKKyAgICAgICAgICAgICAgICAgICBjaXBoX2xlbiwgc2Vzc19sZW4sIGNoYWxfbGVuICkgKTsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIGVhY2ggcGFyYW1ldGVyIGxlbmd0aCBpcyB2YWxpZAorICAgICAqLworICAgIGlmKCBjaXBoX2xlbiA8IDMgfHwgKCBjaXBoX2xlbiAlIDMgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBpZiggc2Vzc19sZW4gPiAzMiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgaWYoIGNoYWxfbGVuIDwgOCB8fCBjaGFsX2xlbiA+IDMyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBpZiggbiAhPSA2ICsgY2lwaF9sZW4gKyBzZXNzX2xlbiArIGNoYWxfbGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIGNpcGhlcnN1aXRlbGlzdCIsCisgICAgICAgICAgICAgICAgICAgYnVmICsgNiwgY2lwaF9sZW4gKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIHNlc3Npb24gaWQiLAorICAgICAgICAgICAgICAgICAgIGJ1ZiArIDYgKyBjaXBoX2xlbiwgc2Vzc19sZW4gKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIGNoYWxsZW5nZSIsCisgICAgICAgICAgICAgICAgICAgYnVmICsgNiArIGNpcGhfbGVuICsgc2Vzc19sZW4sIGNoYWxfbGVuICk7CisKKyAgICBwID0gYnVmICsgNiArIGNpcGhfbGVuOworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IHNlc3NfbGVuOworICAgIG1lbXNldCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWQsIDAsCisgICAgICAgICAgICBzaXplb2YoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkICkgKTsKKyAgICBtZW1jcHkoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCBwLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gKTsKKworICAgIHAgKz0gc2Vzc19sZW47CisgICAgbWVtc2V0KCBzc2wtPmhhbmRzaGFrZS0+cmFuZGJ5dGVzLCAwLCA2NCApOworICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcyArIDMyIC0gY2hhbF9sZW4sIHAsIGNoYWxfbGVuICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPX1NDU1YKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwLCBwID0gYnVmICsgNjsgaSA8IGNpcGhfbGVuOyBpICs9IDMsIHAgKz0gMyApCisgICAgeworICAgICAgICBpZiggcFswXSA9PSAwICYmIHBbMV0gPT0gMCAmJiBwWzJdID09IE1CRURUTFNfU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyAiICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgICAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVjZWl2ZWQgUkVORUdPVElBVElPTiBTQ1NWICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXJpbmcgcmVuZWdvdGlhdGlvbiIgKSApOworCisgICAgICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT047CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikKKyAgICBmb3IoIGkgPSAwLCBwID0gYnVmICsgNjsgaSA8IGNpcGhfbGVuOyBpICs9IDMsIHAgKz0gMyApCisgICAgeworICAgICAgICBpZiggcFswXSA9PSAwICYmCisgICAgICAgICAgICBwWzFdID09ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWX1ZBTFVFID4+IDggKSAmIDB4ZmYgKSAmJgorICAgICAgICAgICAgcFsyXSA9PSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVl9WQUxVRSAgICAgICkgJiAweGZmICkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInJlY2VpdmVkIEZBTExCQUNLX1NDU1YiICkgKTsKKworICAgICAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyIDwgc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImluYXByb3ByaWF0ZSBmYWxsYmFjayIgKSApOworCisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTkFQUk9QUklBVEVfRkFMTEJBQ0sgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTViAqLworCisgICAgZ290X2NvbW1vbl9zdWl0ZSA9IDA7CisgICAgY2lwaGVyc3VpdGVzID0gc3NsLT5jb25mLT5jaXBoZXJzdWl0ZV9saXN0W3NzbC0+bWlub3JfdmVyXTsKKyAgICBjaXBoZXJzdWl0ZV9pbmZvID0gTlVMTDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFKQorICAgIGZvciggaiA9IDAsIHAgPSBidWYgKyA2OyBqIDwgY2lwaF9sZW47IGogKz0gMywgcCArPSAzICkKKyAgICB7CisgICAgICAgIGZvciggaSA9IDA7IGNpcGhlcnN1aXRlc1tpXSAhPSAwOyBpKysgKQorI2Vsc2UKKyAgICBmb3IoIGkgPSAwOyBjaXBoZXJzdWl0ZXNbaV0gIT0gMDsgaSsrICkKKyAgICB7CisgICAgICAgIGZvciggaiA9IDAsIHAgPSBidWYgKyA2OyBqIDwgY2lwaF9sZW47IGogKz0gMywgcCArPSAzICkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBpZiggcFswXSAhPSAwIHx8CisgICAgICAgICAgICAgICAgcFsxXSAhPSAoICggY2lwaGVyc3VpdGVzW2ldID4+IDggKSAmIDB4RkYgKSB8fAorICAgICAgICAgICAgICAgIHBbMl0gIT0gKCAoIGNpcGhlcnN1aXRlc1tpXSAgICAgICkgJiAweEZGICkgKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBnb3RfY29tbW9uX3N1aXRlID0gMTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX2NpcGhlcnN1aXRlX21hdGNoKCBzc2wsIGNpcGhlcnN1aXRlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNpcGhlcnN1aXRlX2luZm8gKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIGdvdG8gaGF2ZV9jaXBoZXJzdWl0ZV92MjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBnb3RfY29tbW9uX3N1aXRlICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IGNpcGhlcnN1aXRlcyBpbiBjb21tb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vbmUgb2YgdGhlbSB1c2FibGUiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfTk9fVVNBQkxFX0NJUEhFUlNVSVRFICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTiApOworICAgIH0KKworaGF2ZV9jaXBoZXJzdWl0ZV92MjoKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInNlbGVjdGVkIGNpcGhlcnN1aXRlOiAlcyIsIGNpcGhlcnN1aXRlX2luZm8tPm5hbWUgKSApOworCisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgPSBjaXBoZXJzdWl0ZXNbaV07CisgICAgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvID0gY2lwaGVyc3VpdGVfaW5mbzsKKworICAgIC8qCisgICAgICogU1NMdjIgQ2xpZW50IEhlbGxvIHJlbGV2YW50IHJlbmVnb3RpYXRpb24gc2VjdXJpdHkgY2hlY2tzCisgICAgICovCisgICAgaWYoIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfTEVHQUNZX1JFTkVHT1RJQVRJT04gJiYKKyAgICAgICAgc3NsLT5jb25mLT5hbGxvd19sZWdhY3lfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfQlJFQUtfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibGVnYWN5IHJlbmVnb3RpYXRpb24sIGJyZWFraW5nIG9mZiBoYW5kc2hha2UiICkgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgc3NsLT5pbl9sZWZ0ID0gMDsKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIGNsaWVudCBoZWxsbyB2MiIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPICovCisKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2NsaWVudF9oZWxsbyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0LCBnb3RfY29tbW9uX3N1aXRlOworICAgIHNpemVfdCBpLCBqOworICAgIHNpemVfdCBjaXBoX29mZnNldCwgY29tcF9vZmZzZXQsIGV4dF9vZmZzZXQ7CisgICAgc2l6ZV90IG1zZ19sZW4sIGNpcGhfbGVuLCBzZXNzX2xlbiwgY29tcF9sZW4sIGV4dF9sZW47CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIHNpemVfdCBjb29raWVfb2Zmc2V0LCBjb29raWVfbGVuOworI2VuZGlmCisgICAgdW5zaWduZWQgY2hhciAqYnVmLCAqcCwgKmV4dDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaW50IHJlbmVnb3RpYXRpb25faW5mb19zZWVuID0gMDsKKyNlbmRpZgorICAgIGludCBoYW5kc2hha2VfZmFpbHVyZSA9IDA7CisgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZXM7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbzsKKyAgICBpbnQgbWFqb3IsIG1pbm9yOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBwYXJzZSBjbGllbnQgaGVsbG8iICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKK3JlYWRfcmVjb3JkX2hlYWRlcjoKKyNlbmRpZgorICAgIC8qCisgICAgICogSWYgcmVuZWdvdGlhdGluZywgdGhlbiB0aGUgaW5wdXQgd2FzIHJlYWQgd2l0aCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCgpLAorICAgICAqIG90aGVyd2lzZSByZWFkIGl0IG91cnNlbHZlcyBtYW51YWxseSBpbiBvcmRlciB0byBzdXBwb3J0IFNTTHYyCisgICAgICogQ2xpZW50SGVsbG8sIHdoaWNoIGRvZXNuJ3QgdXNlIHRoZSBzYW1lIHJlY29yZCBsYXllciBmb3JtYXQuCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgKQorI2VuZGlmCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCggc3NsLCA1ICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBidWYgPSBzc2wtPmluX2hkcjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPKQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSApCisjZW5kaWYKKyAgICAgICAgaWYoICggYnVmWzBdICYgMHg4MCApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuIHNzbF9wYXJzZV9jbGllbnRfaGVsbG9fdjIoIHNzbCApOworI2VuZGlmCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJyZWNvcmQgaGVhZGVyIiwgYnVmLCBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSApOworCisgICAgLyoKKyAgICAgKiBTU0x2My9UTFMgQ2xpZW50IEhlbGxvCisgICAgICoKKyAgICAgKiBSZWNvcmQgbGF5ZXI6CisgICAgICogICAgIDAgIC4gICAwICAgbWVzc2FnZSB0eXBlCisgICAgICogICAgIDEgIC4gICAyICAgcHJvdG9jb2wgdmVyc2lvbgorICAgICAqICAgICAzICAuICAgMTEgIERUTFM6IGVwb2NoICsgcmVjb3JkIHNlcXVlbmNlIG51bWJlcgorICAgICAqICAgICAzICAuICAgNCAgIG1lc3NhZ2UgbGVuZ3RoCisgICAgICovCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJjbGllbnQgaGVsbG8gdjMsIG1lc3NhZ2UgdHlwZTogJWQiLAorICAgICAgICAgICAgICAgICAgIGJ1ZlswXSApICk7CisKKyAgICBpZiggYnVmWzBdICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYzLCBtZXNzYWdlIGxlbi46ICVkIiwKKyAgICAgICAgICAgICAgICAgICAoIHNzbC0+aW5fbGVuWzBdIDw8IDggKSB8IHNzbC0+aW5fbGVuWzFdICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYzLCBwcm90b2NvbCB2ZXJzaW9uOiBbJWQ6JWRdIiwKKyAgICAgICAgICAgICAgICAgICBidWZbMV0sIGJ1ZlsyXSApICk7CisKKyAgICBtYmVkdGxzX3NzbF9yZWFkX3ZlcnNpb24oICZtYWpvciwgJm1pbm9yLCBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgYnVmICsgMSApOworCisgICAgLyogQWNjb3JkaW5nIHRvIFJGQyA1MjQ2IEFwcGVuZGl4IEUuMSwgdGhlIHZlcnNpb24gaGVyZSBpcyB0eXBpY2FsbHkKKyAgICAgKiAiezAzLDAwfSwgdGhlIGxvd2VzdCB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudCwgW29yXSB0aGUKKyAgICAgKiB2YWx1ZSBvZiBDbGllbnRIZWxsby5jbGllbnRfdmVyc2lvbiIsIHNvIHRoZSBvbmx5IG1lYW5pbmdmdWwgY2hlY2sgaGVyZQorICAgICAqIGlzIHRoZSBtYWpvciB2ZXJzaW9uIHNob3VsZG4ndCBiZSBsZXNzIHRoYW4gMyAqLworICAgIGlmKCBtYWpvciA8IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgLyogRm9yIERUTFMgaWYgdGhpcyBpcyB0aGUgaW5pdGlhbCBoYW5kc2hha2UsIHJlbWVtYmVyIHRoZSBjbGllbnQgc2VxdWVuY2UKKyAgICAgKiBudW1iZXIgdG8gdXNlIGl0IGluIG91ciBuZXh0IG1lc3NhZ2UgKFJGQyA2MzQ3IDQuMi4xKSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICAmJiBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UKKyNlbmRpZgorICAgICAgICApCisgICAgeworICAgICAgICAvKiBFcG9jaCBzaG91bGQgYmUgMCBmb3IgaW5pdGlhbCBoYW5kc2hha2VzICovCisgICAgICAgIGlmKCBzc2wtPmluX2N0clswXSAhPSAwIHx8IHNzbC0+aW5fY3RyWzFdICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCBzc2wtPm91dF9jdHIgKyAyLCBzc2wtPmluX2N0ciArIDIsIDYgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKKyAgICAgICAgaWYoIG1iZWR0bHNfc3NsX2R0bHNfcmVwbGF5X2NoZWNrKCBzc2wgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZXBsYXllZCByZWNvcmQsIGRpc2NhcmRpbmciICkgKTsKKyAgICAgICAgICAgIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHNzbC0+aW5fbGVmdCA9IDA7CisgICAgICAgICAgICBnb3RvIHJlYWRfcmVjb3JkX2hlYWRlcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE5vIE1BQyB0byBjaGVjayB5ZXQsIHNvIHdlIGNhbiB1cGRhdGUgcmlnaHQgbm93ICovCisgICAgICAgIG1iZWR0bHNfc3NsX2R0bHNfcmVwbGF5X3VwZGF0ZSggc3NsICk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisgICAgbXNnX2xlbiA9ICggc3NsLT5pbl9sZW5bMF0gPDwgOCApIHwgc3NsLT5pbl9sZW5bMV07CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyAhPSBNQkVEVExTX1NTTF9JTklUSUFMX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICAvKiBTZXQgYnkgbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoKSAqLworICAgICAgICBtc2dfbGVuID0gc3NsLT5pbl9oc2xlbjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBpZiggbXNnX2xlbiA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCggc3NsLCBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSArIG1zZ19sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgLyogRG9uZSByZWFkaW5nIHRoaXMgcmVjb3JkLCBnZXQgcmVhZHkgZm9yIHRoZSBuZXh0IG9uZSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IG1zZ19sZW4gKyBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBzc2wtPmluX2xlZnQgPSAwOworICAgIH0KKworICAgIGJ1ZiA9IHNzbC0+aW5fbXNnOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmVjb3JkIGNvbnRlbnRzIiwgYnVmLCBtc2dfbGVuICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+dXBkYXRlX2NoZWNrc3VtKCBzc2wsIGJ1ZiwgbXNnX2xlbiApOworCisgICAgLyoKKyAgICAgKiBIYW5kc2hha2UgbGF5ZXI6CisgICAgICogICAgIDAgIC4gICAwICAgaGFuZHNoYWtlIHR5cGUKKyAgICAgKiAgICAgMSAgLiAgIDMgICBoYW5kc2hha2UgbGVuZ3RoCisgICAgICogICAgIDQgIC4gICA1ICAgRFRMUyBvbmx5OiBtZXNzYWdlIHNlcWVuY2UgbnVtYmVyCisgICAgICogICAgIDYgIC4gICA4ICAgRFRMUyBvbmx5OiBmcmFnbWVudCBvZmZzZXQKKyAgICAgKiAgICAgOSAgLiAgMTEgICBEVExTIG9ubHk6IGZyYWdtZW50IGxlbmd0aAorICAgICAqLworICAgIGlmKCBtc2dfbGVuIDwgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYzLCBoYW5kc2hha2UgdHlwZTogJWQiLCBidWZbMF0gKSApOworCisgICAgaWYoIGJ1ZlswXSAhPSBNQkVEVExTX1NTTF9IU19DTElFTlRfSEVMTE8gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvIHYzLCBoYW5kc2hha2UgbGVuLjogJWQiLAorICAgICAgICAgICAgICAgICAgICggYnVmWzFdIDw8IDE2ICkgfCAoIGJ1ZlsyXSA8PCA4ICkgfCBidWZbM10gKSApOworCisgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBmcmFnbWVudGF0aW9uIG9mIENsaWVudEhlbGxvICh5ZXQ/KSAqLworICAgIGlmKCBidWZbMV0gIT0gMCB8fAorICAgICAgICBtc2dfbGVuICE9IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgKCAoIGJ1ZlsyXSA8PCA4ICkgfCBidWZbM10gKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29weSB0aGUgY2xpZW50J3MgaGFuZHNoYWtlIG1lc3NhZ2Vfc2VxIG9uIGluaXRpYWwgaGFuZHNoYWtlcywKKyAgICAgICAgICogY2hlY2sgc2VxdWVuY2UgbnVtYmVyIG9uIHJlbmVnby4KKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGlzIGNvdWxkbid0IGJlIGRvbmUgaW4gc3NsX3ByZXBhcmVfaGFuZHNoYWtlX3JlY29yZCgpICovCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2xpX21zZ19zZXEgPSAoIHNzbC0+aW5fbXNnWzRdIDw8IDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzVdOworCisgICAgICAgICAgICBpZiggY2xpX21zZ19zZXEgIT0gc3NsLT5oYW5kc2hha2UtPmluX21zZ19zZXEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlX3NlcTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIChleHBlY3RlZCAlZCkiLCBjbGlfbXNnX3NlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbGlfbXNnX3NlcSA9ICggc3NsLT5pbl9tc2dbNF0gPDwgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbNV07CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+b3V0X21zZ19zZXEgPSBjbGlfbXNnX3NlcTsKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxICA9IGNsaV9tc2dfc2VxICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEZvciBub3cgd2UgZG9uJ3Qgc3VwcG9ydCBmcmFnbWVudGF0aW9uLCBzbyBtYWtlIHN1cmUKKyAgICAgICAgICogZnJhZ21lbnRfb2Zmc2V0ID09IDAgYW5kIGZyYWdtZW50X2xlbmd0aCA9PSBsZW5ndGgKKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPmluX21zZ1s2XSAhPSAwIHx8IHNzbC0+aW5fbXNnWzddICE9IDAgfHwgc3NsLT5pbl9tc2dbOF0gIT0gMCB8fAorICAgICAgICAgICAgbWVtY21wKCBzc2wtPmluX21zZyArIDEsIHNzbC0+aW5fbXNnICsgOSwgMyApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIkNsaWVudEhlbGxvIGZyYWdtZW50YXRpb24gbm90IHN1cHBvcnRlZCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworICAgIGJ1ZiArPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKyAgICBtc2dfbGVuIC09IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApOworCisgICAgLyoKKyAgICAgKiBDbGllbnRIZWxsbyBsYXllcjoKKyAgICAgKiAgICAgMCAgLiAgIDEgICBwcm90b2NvbCB2ZXJzaW9uCisgICAgICogICAgIDIgIC4gIDMzICAgcmFuZG9tIGJ5dGVzIChzdGFydGluZyB3aXRoIDQgYnl0ZXMgb2YgVW5peCB0aW1lKQorICAgICAqICAgIDM0ICAuICAzNSAgIHNlc3Npb24gaWQgbGVuZ3RoICgxIGJ5dGUpCisgICAgICogICAgMzUgIC4gMzQreCAgc2Vzc2lvbiBpZAorICAgICAqICAgMzUreCAuIDM1K3ggIERUTFMgb25seTogY29va2llIGxlbmd0aCAoMSBieXRlKQorICAgICAqICAgMzYreCAuICAuLiAgIERUTFMgb25seTogY29va2llCisgICAgICogICAgLi4gIC4gIC4uICAgY2lwaGVyc3VpdGUgbGlzdCBsZW5ndGggKDIgYnl0ZXMpCisgICAgICogICAgLi4gIC4gIC4uICAgY2lwaGVyc3VpdGUgbGlzdAorICAgICAqICAgIC4uICAuICAuLiAgIGNvbXByZXNzaW9uIGFsZy4gbGlzdCBsZW5ndGggKDEgYnl0ZSkKKyAgICAgKiAgICAuLiAgLiAgLi4gICBjb21wcmVzc2lvbiBhbGcuIGxpc3QKKyAgICAgKiAgICAuLiAgLiAgLi4gICBleHRlbnNpb25zIGxlbmd0aCAoMiBieXRlcywgb3B0aW9uYWwpCisgICAgICogICAgLi4gIC4gIC4uICAgZXh0ZW5zaW9ucyAob3B0aW9uYWwpCisgICAgICovCisKKyAgICAvKgorICAgICAqIE1pbmltYWwgbGVuZ3RoICh3aXRoIGV2ZXJ5dGhpbmcgZW1wdHkgYW5kIGV4dGVuc2lvbnMgb21taXR0ZWQpIGlzCisgICAgICogMiArIDMyICsgMSArIDIgKyAxID0gMzggYnl0ZXMuIENoZWNrIHRoYXQgZmlyc3QsIHNvIHRoYXQgd2UgY2FuCisgICAgICogcmVhZCBhdCBsZWFzdCB1cCB0byBzZXNzaW9uIGlkIGxlbmd0aCB3aXRob3V0IHdvcnJ5aW5nLgorICAgICAqLworICAgIGlmKCBtc2dfbGVuIDwgMzggKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGhlbGxvIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIC8qCisgICAgICogQ2hlY2sgYW5kIHNhdmUgdGhlIHByb3RvY29sIHZlcnNpb24KKyAgICAgKi8KKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIHZlcnNpb24iLCBidWYsIDIgKTsKKworICAgIG1iZWR0bHNfc3NsX3JlYWRfdmVyc2lvbiggJnNzbC0+bWFqb3JfdmVyLCAmc3NsLT5taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT50cmFuc3BvcnQsIGJ1ZiApOworCisgICAgc3NsLT5oYW5kc2hha2UtPm1heF9tYWpvcl92ZXIgPSBzc2wtPm1ham9yX3ZlcjsKKyAgICBzc2wtPmhhbmRzaGFrZS0+bWF4X21pbm9yX3ZlciA9IHNzbC0+bWlub3JfdmVyOworCisgICAgaWYoIHNzbC0+bWFqb3JfdmVyIDwgc3NsLT5jb25mLT5taW5fbWFqb3JfdmVyIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyIDwgc3NsLT5jb25mLT5taW5fbWlub3JfdmVyICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2xpZW50IG9ubHkgc3VwcG9ydHMgc3NsIHNtYWxsZXIgdGhhbiBtaW5pbXVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgWyVkOiVkXSA8IFslZDolZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+bWFqb3JfdmVyLCBzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPm1pbl9tYWpvcl92ZXIsIHNzbC0+Y29uZi0+bWluX21pbm9yX3ZlciApICk7CisKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19QUk9UT0NPTF9WRVJTSU9OICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5tYWpvcl92ZXIgPiBzc2wtPmNvbmYtPm1heF9tYWpvcl92ZXIgKQorICAgIHsKKyAgICAgICAgc3NsLT5tYWpvcl92ZXIgPSBzc2wtPmNvbmYtPm1heF9tYWpvcl92ZXI7CisgICAgICAgIHNzbC0+bWlub3JfdmVyID0gc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyOworICAgIH0KKyAgICBlbHNlIGlmKCBzc2wtPm1pbm9yX3ZlciA+IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciApCisgICAgICAgIHNzbC0+bWlub3JfdmVyID0gc3NsLT5jb25mLT5tYXhfbWlub3JfdmVyOworCisgICAgLyoKKyAgICAgKiBTYXZlIGNsaWVudCByYW5kb20gKGluYy4gVW5peCB0aW1lKQorICAgICAqLworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNsaWVudCBoZWxsbywgcmFuZG9tIGJ5dGVzIiwgYnVmICsgMiwgMzIgKTsKKworICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgYnVmICsgMiwgMzIgKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgdGhlIHNlc3Npb24gSUQgbGVuZ3RoIGFuZCBzYXZlIHNlc3Npb24gSUQKKyAgICAgKi8KKyAgICBzZXNzX2xlbiA9IGJ1ZlszNF07CisKKyAgICBpZiggc2Vzc19sZW4gPiBzaXplb2YoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkICkgfHwKKyAgICAgICAgc2Vzc19sZW4gKyAzNCArIDIgPiBtc2dfbGVuICkgLyogMiBmb3IgY2lwaGVybGlzdCBsZW5ndGggZmllbGQgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIHNlc3Npb24gaWQiLCBidWYgKyAzNSwgc2Vzc19sZW4gKTsKKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IHNlc3NfbGVuOworICAgIG1lbXNldCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+aWQsIDAsCisgICAgICAgICAgICBzaXplb2YoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkICkgKTsKKyAgICBtZW1jcHkoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCBidWYgKyAzNSwKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiApOworCisgICAgLyoKKyAgICAgKiBDaGVjayB0aGUgY29va2llIGxlbmd0aCBhbmQgY29udGVudAorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIGNvb2tpZV9vZmZzZXQgPSAzNSArIHNlc3NfbGVuOworICAgICAgICBjb29raWVfbGVuID0gYnVmW2Nvb2tpZV9vZmZzZXRdOworCisgICAgICAgIGlmKCBjb29raWVfb2Zmc2V0ICsgMSArIGNvb2tpZV9sZW4gKyAyID4gbXNnX2xlbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8sIGNvb2tpZSIsCisgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGNvb2tpZV9vZmZzZXQgKyAxLCBjb29raWVfbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQorICAgICAgICBpZiggc3NsLT5jb25mLT5mX2Nvb2tpZV9jaGVjayAhPSBOVUxMCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICAgICAgJiYgc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFCisjZW5kaWYKKyAgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHNzbC0+Y29uZi0+Zl9jb29raWVfY2hlY2soIHNzbC0+Y29uZi0+cF9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgY29va2llX29mZnNldCArIDEsIGNvb2tpZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jbGlfaWQsIHNzbC0+Y2xpX2lkX2xlbiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiY29va2llIHZlcmlmaWNhdGlvbiBmYWlsZWQiICkgKTsKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW4gPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiY29va2llIHZlcmlmaWNhdGlvbiBwYXNzZWQiICkgKTsKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZV9sZW4gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAqLworICAgICAgICB7CisgICAgICAgICAgICAvKiBXZSBrbm93IHdlIGRpZG4ndCBzZW5kIGEgY29va2llLCBzbyBpdCBzaG91bGQgYmUgZW1wdHkgKi8KKyAgICAgICAgICAgIGlmKCBjb29raWVfbGVuICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImNvb2tpZSB2ZXJpZmljYXRpb24gc2tpcHBlZCIgKSApOworICAgICAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoZSBjaXBoZXJzdWl0ZWxpc3QgbGVuZ3RoICh3aWxsIGJlIHBhcnNlZCBsYXRlcikKKyAgICAgKi8KKyAgICAgICAgY2lwaF9vZmZzZXQgPSBjb29raWVfb2Zmc2V0ICsgMSArIGNvb2tpZV9sZW47CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisgICAgICAgIGNpcGhfb2Zmc2V0ID0gMzUgKyBzZXNzX2xlbjsKKworICAgIGNpcGhfbGVuID0gKCBidWZbY2lwaF9vZmZzZXQgKyAwXSA8PCA4ICkKKyAgICAgICAgICAgICB8ICggYnVmW2NpcGhfb2Zmc2V0ICsgMV0gICAgICApOworCisgICAgaWYoIGNpcGhfbGVuIDwgMiB8fAorICAgICAgICBjaXBoX2xlbiArIDIgKyBjaXBoX29mZnNldCArIDEgPiBtc2dfbGVuIHx8IC8qIDEgZm9yIGNvbXAuIGFsZy4gbGVuICovCisgICAgICAgICggY2lwaF9sZW4gJSAyICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBjaXBoZXJzdWl0ZWxpc3QiLAorICAgICAgICAgICAgICAgICAgIGJ1ZiArIGNpcGhfb2Zmc2V0ICsgMiwgIGNpcGhfbGVuICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGxlbmd0aCBhbmQgcGljayBvbmUKKyAgICAgKi8KKyAgICBjb21wX29mZnNldCA9IGNpcGhfb2Zmc2V0ICsgMiArIGNpcGhfbGVuOworCisgICAgY29tcF9sZW4gPSBidWZbY29tcF9vZmZzZXRdOworCisgICAgaWYoIGNvbXBfbGVuIDwgMSB8fAorICAgICAgICBjb21wX2xlbiA+IDE2IHx8CisgICAgICAgIGNvbXBfbGVuICsgY29tcF9vZmZzZXQgKyAxID4gbXNnX2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2xpZW50IGhlbGxvLCBjb21wcmVzc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgYnVmICsgY29tcF9vZmZzZXQgKyAxLCBjb21wX2xlbiApOworCisgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y29tcHJlc3Npb24gPSBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMOworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgZm9yKCBpID0gMDsgaSA8IGNvbXBfbGVuOyArK2kgKQorICAgIHsKKyAgICAgICAgaWYoIGJ1Zltjb21wX29mZnNldCArIDEgKyBpXSA9PSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y29tcHJlc3Npb24gPSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIFNlZSBjb21tZW50cyBpbiBzc2xfd3JpdGVfY2xpZW50X2hlbGxvKCkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uID0gTUJFRFRMU19TU0xfQ09NUFJFU1NfTlVMTDsKKyNlbmRpZgorCisgICAgLyogRG8gbm90IHBhcnNlIHRoZSBleHRlbnNpb25zIGlmIHRoZSBwcm90b2NvbCBpcyBTU0x2MyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICBpZiggKCBzc2wtPm1ham9yX3ZlciAhPSAzICkgfHwgKCBzc2wtPm1pbm9yX3ZlciAhPSAwICkgKQorICAgIHsKKyNlbmRpZgorICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayB0aGUgZXh0ZW5zaW9uIGxlbmd0aAorICAgICAgICAgKi8KKyAgICAgICAgZXh0X29mZnNldCA9IGNvbXBfb2Zmc2V0ICsgMSArIGNvbXBfbGVuOworICAgICAgICBpZiggbXNnX2xlbiA+IGV4dF9vZmZzZXQgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggbXNnX2xlbiA8IGV4dF9vZmZzZXQgKyAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0X2xlbiA9ICggYnVmW2V4dF9vZmZzZXQgKyAwXSA8PCA4ICkKKyAgICAgICAgICAgICAgICAgICAgfCAoIGJ1ZltleHRfb2Zmc2V0ICsgMV0gICAgICApOworCisgICAgICAgICAgICBpZiggKCBleHRfbGVuID4gMCAmJiBleHRfbGVuIDwgNCApIHx8CisgICAgICAgICAgICAgICAgbXNnX2xlbiAhPSBleHRfb2Zmc2V0ICsgMiArIGV4dF9sZW4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dF9sZW4gPSAwOworCisgICAgICAgIGV4dCA9IGJ1ZiArIGV4dF9vZmZzZXQgKyAyOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjbGllbnQgaGVsbG8gZXh0ZW5zaW9ucyIsIGV4dCwgZXh0X2xlbiApOworCisgICAgICAgIHdoaWxlKCBleHRfbGVuICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXh0X2lkICAgPSAoICggZXh0WzBdIDw8ICA4ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCBleHRbMV0gICAgICAgKSApOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dF9zaXplID0gKCAoIGV4dFsyXSA8PCAgOCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICggZXh0WzNdICAgICAgICkgKTsKKworICAgICAgICAgICAgaWYoIGV4dF9zaXplICsgNCA+IGV4dF9sZW4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBoZWxsbyBtZXNzYWdlIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoKCBleHRfaWQgKQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX1NFUlZFUk5BTUU6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBTZXJ2ZXJOYW1lIGV4dGVuc2lvbiIgKSApOworICAgICAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmZfc25pID09IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zZXJ2ZXJuYW1lX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiAqLworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk86CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgICAgICAgICByZW5lZ290aWF0aW9uX2luZm9fc2VlbiA9IDE7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9yZW5lZ290aWF0aW9uX2luZm8oIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9TSUdfQUxHOgorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHNpZ25hdHVyZV9hbGdvcml0aG1zIGV4dGVuc2lvbiIgKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3NpZ25hdHVyZV9hbGdvcml0aG1zX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICYmCisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVM6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzdXBwb3J0ZWQgZWxsaXB0aWMgY3VydmVzIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3N1cHBvcnRlZF9lbGxpcHRpY19jdXJ2ZXMoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUzoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHN1cHBvcnRlZCBwb2ludCBmb3JtYXRzIGV4dGVuc2lvbiIgKSApOworICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jbGlfZXh0cyB8PSBNQkVEVExTX1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFNfUFJFU0VOVDsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zdXBwb3J0ZWRfcG9pbnRfZm9ybWF0cyggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUDoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIGVjanBha2Uga2twcCBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9lY2pwYWtlX2trcHAoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSDoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIG1heCBmcmFnbWVudCBsZW5ndGggZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfbWF4X2ZyYWdtZW50X2xlbmd0aF9leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9UUlVOQ0FURURfSE1BQzoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHRydW5jYXRlZCBobWFjIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3RydW5jYXRlZF9obWFjX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUM6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX2VuY3J5cHRfdGhlbl9tYWNfZXh0KCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICk7CisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUOgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiZm91bmQgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9leHRlbmRlZF9tc19leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQ6CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iICkgKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9zZXNzaW9uX3RpY2tldF9leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgICAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfQUxQTjoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIGFscG4gZXh0ZW5zaW9uIiApICk7CisKKyAgICAgICAgICAgICAgICByZXQgPSBzc2xfcGFyc2VfYWxwbl9leHQoIHNzbCwgZXh0ICsgNCwgZXh0X3NpemUgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidW5rbm93biBleHRlbnNpb24gZm91bmQ6ICVkIChpZ25vcmluZykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9pZCApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4dF9sZW4gLT0gNCArIGV4dF9zaXplOworICAgICAgICAgICAgZXh0ICs9IDQgKyBleHRfc2l6ZTsKKworICAgICAgICAgICAgaWYoIGV4dF9sZW4gPiAwICYmIGV4dF9sZW4gPCA0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQgaGVsbG8gbWVzc2FnZSIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikKKyAgICBmb3IoIGkgPSAwLCBwID0gYnVmICsgNDEgKyBzZXNzX2xlbjsgaSA8IGNpcGhfbGVuOyBpICs9IDIsIHAgKz0gMiApCisgICAgeworICAgICAgICBpZiggcFswXSA9PSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVl9WQUxVRSA+PiA4ICkgJiAweGZmICkgJiYKKyAgICAgICAgICAgIHBbMV0gPT0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1ZfVkFMVUUgICAgICApICYgMHhmZiApICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJyZWNlaXZlZCBGQUxMQkFDS19TQ1NWIiApICk7CisKKyAgICAgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA8IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siICkgKTsKKworICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5BUFJPUFJJQVRFX0ZBTExCQUNLICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YgKi8KKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk9fU0NTVgorICAgICAqLworICAgIGZvciggaSA9IDAsIHAgPSBidWYgKyBjaXBoX29mZnNldCArIDI7IGkgPCBjaXBoX2xlbjsgaSArPSAyLCBwICs9IDIgKQorICAgIHsKKyAgICAgICAgaWYoIHBbMF0gPT0gMCAmJiBwWzFdID09IE1CRURUTFNfU1NMX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyAiICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgICAgICAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVjZWl2ZWQgUkVORUdPVElBVElPTiBTQ1NWIGR1cmluZyByZW5lZ290aWF0aW9uIiApICk7CisKKyAgICAgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT047CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogUmVuZWdvdGlhdGlvbiBzZWN1cml0eSBjaGVja3MKKyAgICAgKi8KKyAgICBpZiggc3NsLT5zZWN1cmVfcmVuZWdvdGlhdGlvbiAhPSBNQkVEVExTX1NTTF9TRUNVUkVfUkVORUdPVElBVElPTiAmJgorICAgICAgICBzc2wtPmNvbmYtPmFsbG93X2xlZ2FjeV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJsZWdhY3kgcmVuZWdvdGlhdGlvbiwgYnJlYWtpbmcgb2ZmIGhhbmRzaGFrZSIgKSApOworICAgICAgICBoYW5kc2hha2VfZmFpbHVyZSA9IDE7CisgICAgfQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBlbHNlIGlmKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyAmJgorICAgICAgICAgICAgIHNzbC0+c2VjdXJlX3JlbmVnb3RpYXRpb24gPT0gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04gJiYKKyAgICAgICAgICAgICByZW5lZ290aWF0aW9uX2luZm9fc2VlbiA9PSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVuZWdvdGlhdGlvbl9pbmZvIGV4dGVuc2lvbiBtaXNzaW5nIChzZWN1cmUpIiApICk7CisgICAgICAgIGhhbmRzaGFrZV9mYWlsdXJlID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgJiYKKyAgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgICAgICAgc3NsLT5jb25mLT5hbGxvd19sZWdhY3lfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImxlZ2FjeSByZW5lZ290aWF0aW9uIG5vdCBhbGxvd2VkIiApICk7CisgICAgICAgIGhhbmRzaGFrZV9mYWlsdXJlID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgJiYKKyAgICAgICAgICAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgICAgICAgcmVuZWdvdGlhdGlvbl9pbmZvX3NlZW4gPT0gMSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlbmVnb3RpYXRpb25faW5mbyBleHRlbnNpb24gcHJlc2VudCAobGVnYWN5KSIgKSApOworICAgICAgICBoYW5kc2hha2VfZmFpbHVyZSA9IDE7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworICAgIGlmKCBoYW5kc2hha2VfZmFpbHVyZSA9PSAxICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNlYXJjaCBmb3IgYSBtYXRjaGluZyBjaXBoZXJzdWl0ZQorICAgICAqIChBdCB0aGUgZW5kIGJlY2F1c2Ugd2UgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBFQy1iYXNlZCBleHRlbnNpb25zCisgICAgICogYW5kIGNlcnRpZmljYXRlIGZyb20gdGhlIFNOSSBjYWxsYmFjayB0cmlnZ2VyZWQgYnkgdGhlIFNOSSBleHRlbnNpb24uKQorICAgICAqLworICAgIGdvdF9jb21tb25fc3VpdGUgPSAwOworICAgIGNpcGhlcnN1aXRlcyA9IHNzbC0+Y29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtzc2wtPm1pbm9yX3Zlcl07CisgICAgY2lwaGVyc3VpdGVfaW5mbyA9IE5VTEw7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSkKKyAgICBmb3IoIGogPSAwLCBwID0gYnVmICsgY2lwaF9vZmZzZXQgKyAyOyBqIDwgY2lwaF9sZW47IGogKz0gMiwgcCArPSAyICkKKyAgICB7CisgICAgICAgIGZvciggaSA9IDA7IGNpcGhlcnN1aXRlc1tpXSAhPSAwOyBpKysgKQorI2Vsc2UKKyAgICBmb3IoIGkgPSAwOyBjaXBoZXJzdWl0ZXNbaV0gIT0gMDsgaSsrICkKKyAgICB7CisgICAgICAgIGZvciggaiA9IDAsIHAgPSBidWYgKyBjaXBoX29mZnNldCArIDI7IGogPCBjaXBoX2xlbjsgaiArPSAyLCBwICs9IDIgKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBwWzBdICE9ICggKCBjaXBoZXJzdWl0ZXNbaV0gPj4gOCApICYgMHhGRiApIHx8CisgICAgICAgICAgICAgICAgcFsxXSAhPSAoICggY2lwaGVyc3VpdGVzW2ldICAgICAgKSAmIDB4RkYgKSApCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGdvdF9jb21tb25fc3VpdGUgPSAxOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfY2lwaGVyc3VpdGVfbWF0Y2goIHNzbCwgY2lwaGVyc3VpdGVzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2lwaGVyc3VpdGVfaW5mbyApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8gIT0gTlVMTCApCisgICAgICAgICAgICAgICAgZ290byBoYXZlX2NpcGhlcnN1aXRlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGdvdF9jb21tb25fc3VpdGUgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJnb3QgY2lwaGVyc3VpdGVzIGluIGNvbW1vbiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm9uZSBvZiB0aGVtIHVzYWJsZSIgKSApOworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlKCBzc2wgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfTk9fVVNBQkxFX0NJUEhFUlNVSVRFICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIGNpcGhlcnN1aXRlcyBpbiBjb21tb24iICkgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9mYXRhbF9oYW5kc2hha2VfZmFpbHVyZSggc3NsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX05PX0NJUEhFUl9DSE9TRU4gKTsKKyAgICB9CisKK2hhdmVfY2lwaGVyc3VpdGU6CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJzZWxlY3RlZCBjaXBoZXJzdWl0ZTogJXMiLCBjaXBoZXJzdWl0ZV9pbmZvLT5uYW1lICkgKTsKKworICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlID0gY2lwaGVyc3VpdGVzW2ldOworICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbyA9IGNpcGhlcnN1aXRlX2luZm87CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIG1iZWR0bHNfc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZCggc3NsICk7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gcGFyc2UgY2xpZW50IGhlbGxvIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfdHJ1bmNhdGVkX2htYWNfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dHJ1bmNfaG1hYyA9PSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVEICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgdHJ1bmNhdGVkIGhtYWMgZXh0ZW5zaW9uIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9UUlVOQ0FURURfSE1BQyA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVFJVTkNBVEVEX0hNQUMgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDB4MDA7CisKKyAgICAqb2xlbiA9IDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9lbmNyeXB0X3RoZW5fbWFjX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpzdWl0ZSA9IE5VTEw7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXIgPSBOVUxMOworCisgICAgaWYoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQgfHwKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogUkZDIDczNjY6ICJJZiBhIHNlcnZlciByZWNlaXZlcyBhbiBlbmNyeXB0LXRoZW4tTUFDIHJlcXVlc3QgZXh0ZW5zaW9uCisgICAgICogZnJvbSBhIGNsaWVudCBhbmQgdGhlbiBzZWxlY3RzIGEgc3RyZWFtIG9yIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbgorICAgICAqIHdpdGggQXNzb2NpYXRlZCBEYXRhIChBRUFEKSBjaXBoZXJzdWl0ZSwgaXQgTVVTVCBOT1Qgc2VuZCBhbgorICAgICAqIGVuY3J5cHQtdGhlbi1NQUMgcmVzcG9uc2UgZXh0ZW5zaW9uIGJhY2sgdG8gdGhlIGNsaWVudC4iCisgICAgICovCisgICAgaWYoICggc3VpdGUgPSBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkKAorICAgICAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZSApICkgPT0gTlVMTCB8fAorICAgICAgICAoIGNpcGhlciA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBzdWl0ZS0+Y2lwaGVyICkgKSA9PSBOVUxMIHx8CisgICAgICAgIGNpcGhlci0+bW9kZSAhPSBNQkVEVExTX01PREVfQ0JDICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iICkgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDB4MDA7CisKKyAgICAqb2xlbiA9IDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX2V4dGVuZGVkX21zX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5leHRlbmRlZF9tcyA9PSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19ESVNBQkxFRCB8fAorICAgICAgICBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb24iICkgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgPj4gOCApICYgMHhGRiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDB4MDA7CisKKyAgICAqb2xlbiA9IDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfc2Vzc2lvbl90aWNrZXRfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPm5ld19zZXNzaW9uX3RpY2tldCA9PSAwICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TRVNTSU9OX1RJQ0tFVCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfU0VTU0lPTl9USUNLRVQgICAgICApICYgMHhGRiApOworCisgICAgKnArKyA9IDB4MDA7CisgICAgKnArKyA9IDB4MDA7CisKKyAgICAqb2xlbiA9IDQ7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisKK3N0YXRpYyB2b2lkIHNzbF93cml0ZV9yZW5lZ290aWF0aW9uX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKworICAgIGlmKCBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uICE9IE1CRURUTFNfU1NMX1NFQ1VSRV9SRU5FR09USUFUSU9OICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iICkgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1JFTkVHT1RJQVRJT05fSU5GTyA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPICAgICAgKSAmIDB4RkYgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzICE9IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFICkKKyAgICB7CisgICAgICAgICpwKysgPSAweDAwOworICAgICAgICAqcCsrID0gKCBzc2wtPnZlcmlmeV9kYXRhX2xlbiAqIDIgKyAxICkgJiAweEZGOworICAgICAgICAqcCsrID0gc3NsLT52ZXJpZnlfZGF0YV9sZW4gKiAyICYgMHhGRjsKKworICAgICAgICBtZW1jcHkoIHAsIHNzbC0+cGVlcl92ZXJpZnlfZGF0YSwgc3NsLT52ZXJpZnlfZGF0YV9sZW4gKTsKKyAgICAgICAgcCArPSBzc2wtPnZlcmlmeV9kYXRhX2xlbjsKKyAgICAgICAgbWVtY3B5KCBwLCBzc2wtPm93bl92ZXJpZnlfZGF0YSwgc3NsLT52ZXJpZnlfZGF0YV9sZW4gKTsKKyAgICAgICAgcCArPSBzc2wtPnZlcmlmeV9kYXRhX2xlbjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKyAgICB7CisgICAgICAgICpwKysgPSAweDAwOworICAgICAgICAqcCsrID0gMHgwMTsKKyAgICAgICAgKnArKyA9IDB4MDA7CisgICAgfQorCisgICAgKm9sZW4gPSBwIC0gYnVmOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX21heF9mcmFnbWVudF9sZW5ndGhfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworCisgICAgaWYoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPm1mbF9jb2RlID09IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgKSApOworCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfTUFYX0ZSQUdNRU5UX0xFTkdUSCAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gMTsKKworICAgICpwKysgPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5tZmxfY29kZTsKKworICAgICpvbGVuID0gNTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorc3RhdGljIHZvaWQgc3NsX3dyaXRlX3N1cHBvcnRlZF9wb2ludF9mb3JtYXRzX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgICgodm9pZCkgc3NsKTsKKworICAgIGlmKCAoIHNzbC0+aGFuZHNoYWtlLT5jbGlfZXh0cyAmCisgICAgICAgICAgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQgKSA9PSAwICkKKyAgICB7CisgICAgICAgICpvbGVuID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBzdXBwb3J0ZWRfcG9pbnRfZm9ybWF0cyBleHRlbnNpb24iICkgKTsKKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9TVVBQT1JURURfUE9JTlRfRk9STUFUUyAgICAgICkgJiAweEZGICk7CisKKyAgICAqcCsrID0gMHgwMDsKKyAgICAqcCsrID0gMjsKKworICAgICpwKysgPSAxOworICAgICpwKysgPSBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQ7CisKKyAgICAqb2xlbiA9IDY7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgfHwgTUJFRFRMU19FQ0RTQV9DIHx8IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfZWNqcGFrZV9ra3BwX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgc2l6ZV90IGtrcHBfbGVuOworCisgICAgKm9sZW4gPSAwOworCisgICAgLyogU2tpcCBjb3N0bHkgY29tcHV0YXRpb24gaWYgbm90IG5lZWRlZCAqLworICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSAhPQorICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICAgICAgcmV0dXJuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGVjanBha2Uga2twcCBleHRlbnNpb24iICkgKTsKKworICAgIGlmKCBlbmQgLSBwIDwgNCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggTUJFRFRMU19UTFNfRVhUX0VDSlBBS0VfS0tQUCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfRUNKUEFLRV9LS1BQICAgICAgKSAmIDB4RkYgKTsKKworICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF9vbmUoICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArIDIsIGVuZCAtIHAgLSAyLCAma2twcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEgLCAibWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX29uZSIsIHJldCApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBra3BwX2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBra3BwX2xlbiAgICAgICkgJiAweEZGICk7CisKKyAgICAqb2xlbiA9IGtrcHBfbGVuICsgNDsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTiApCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfYWxwbl9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgKm9sZW4gKQoreworICAgIGlmKCBzc2wtPmFscG5fY2hvc2VuID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgKm9sZW4gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgKSApOworCisgICAgLyoKKyAgICAgKiAwIC4gMSAgICBleHQgaWRlbnRpZmllcgorICAgICAqIDIgLiAzICAgIGV4dCBsZW5ndGgKKyAgICAgKiA0IC4gNSAgICBwcm90b2NvbCBsaXN0IGxlbmd0aAorICAgICAqIDYgLiA2ICAgIHByb3RvY29sIG5hbWUgbGVuZ3RoCisgICAgICogNyAuIDcrbiAgcHJvdG9jb2wgbmFtZQorICAgICAqLworICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfQUxQTiA+PiA4ICkgJiAweEZGICk7CisgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9BTFBOICAgICAgKSAmIDB4RkYgKTsKKworICAgICpvbGVuID0gNyArIHN0cmxlbiggc3NsLT5hbHBuX2Nob3NlbiApOworCisgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpKCAoICggKm9sZW4gLSA0ICkgPj4gOCApICYgMHhGRiApOworICAgIGJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSggKCAoICpvbGVuIC0gNCApICAgICAgKSAmIDB4RkYgKTsKKworICAgIGJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSggKCAoICpvbGVuIC0gNiApID4+IDggKSAmIDB4RkYgKTsKKyAgICBidWZbNV0gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDYgKSAgICAgICkgJiAweEZGICk7CisKKyAgICBidWZbNl0gPSAodW5zaWduZWQgY2hhcikoICggKCAqb2xlbiAtIDcgKSAgICAgICkgJiAweEZGICk7CisKKyAgICBtZW1jcHkoIGJ1ZiArIDcsIHNzbC0+YWxwbl9jaG9zZW4sICpvbGVuIC0gNyApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2hlbGxvX3ZlcmlmeV9yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqcCA9IHNzbC0+b3V0X21zZyArIDQ7CisgICAgdW5zaWduZWQgY2hhciAqY29va2llX2xlbl9ieXRlOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgKSApOworCisgICAgLyoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgUHJvdG9jb2xWZXJzaW9uIHNlcnZlcl92ZXJzaW9uOworICAgICAqICAgb3BhcXVlIGNvb2tpZTwwLi4yXjgtMT47CisgICAgICogfSBIZWxsb1ZlcmlmeVJlcXVlc3Q7CisgICAgICovCisKKyAgICAvKiBUaGUgUkZDIGlzIG5vdCBjbGVhciBvbiB0aGlzIHBvaW50LCBidXQgc2VuZGluZyB0aGUgYWN0dWFsIG5lZ290aWF0ZWQKKyAgICAgKiB2ZXJzaW9uIGxvb2tzIGxpa2UgdGhlIG1vc3QgaW50ZXJvcGVyYWJsZSB0aGluZyB0byBkby4gKi8KKyAgICBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uKCBzc2wtPm1ham9yX3Zlciwgc3NsLT5taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBwICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAic2VydmVyIHZlcnNpb24iLCBwLCAyICk7CisgICAgcCArPSAyOworCisgICAgLyogSWYgd2UgZ2V0IGhlcmUsIGZfY29va2llX2NoZWNrIGlzIG5vdCBudWxsICovCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9jb29raWVfd3JpdGUgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImluY29uc2lzdGVudCBjb29raWUgY2FsbGJhY2tzIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgLyogU2tpcCBsZW5ndGggYnl0ZSB1bnRpbCB3ZSBrbm93IHRoZSBsZW5ndGggKi8KKyAgICBjb29raWVfbGVuX2J5dGUgPSBwKys7CisKKyAgICBpZiggKCByZXQgPSBzc2wtPmNvbmYtPmZfY29va2llX3dyaXRlKCBzc2wtPmNvbmYtPnBfY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLCBzc2wtPm91dF9idWYgKyBNQkVEVExTX1NTTF9CVUZGRVJfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y2xpX2lkLCBzc2wtPmNsaV9pZF9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAiZl9jb29raWVfd3JpdGUiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAqY29va2llX2xlbl9ieXRlID0gKHVuc2lnbmVkIGNoYXIpKCBwIC0gKCBjb29raWVfbGVuX2J5dGUgKyAxICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNvb2tpZSBzZW50IiwgY29va2llX2xlbl9ieXRlICsgMSwgKmNvb2tpZV9sZW5fYnl0ZSApOworCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IHAgLSBzc2wtPm91dF9tc2c7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUOworCisgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19WRVJJRllfUkVRVUVTVF9TRU5UOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KKworc3RhdGljIGludCBzc2xfd3JpdGVfc2VydmVyX2hlbGxvKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFX1RJTUUpCisgICAgbWJlZHRsc190aW1lX3QgdDsKKyNlbmRpZgorICAgIGludCByZXQ7CisgICAgc2l6ZV90IG9sZW4sIGV4dF9sZW4gPSAwLCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgKnA7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIHNlcnZlciBoZWxsbyIgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT52ZXJpZnlfY29va2llX2xlbiAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiY2xpZW50IGhlbGxvIHdhcyBub3QgYXV0aGVudGljYXRlZCIgKSApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIHNlcnZlciBoZWxsbyIgKSApOworCisgICAgICAgIHJldHVybiggc3NsX3dyaXRlX2hlbGxvX3ZlcmlmeV9yZXF1ZXN0KCBzc2wgKSApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAqLworCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9ybmcgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vIFJORyBwcm92aWRlZCIpICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX05PX1JORyApOworICAgIH0KKworICAgIC8qCisgICAgICogICAgIDAgIC4gICAwICAgaGFuZHNoYWtlIHR5cGUKKyAgICAgKiAgICAgMSAgLiAgIDMgICBoYW5kc2hha2UgbGVuZ3RoCisgICAgICogICAgIDQgIC4gICA1ICAgcHJvdG9jb2wgdmVyc2lvbgorICAgICAqICAgICA2ICAuICAgOSAgIFVOSVggdGltZSgpCisgICAgICogICAgMTAgIC4gIDM3ICAgcmFuZG9tIGJ5dGVzCisgICAgICovCisgICAgYnVmID0gc3NsLT5vdXRfbXNnOworICAgIHAgPSBidWYgKyA0OworCisgICAgbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbiggc3NsLT5tYWpvcl92ZXIsIHNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgcCApOworICAgIHAgKz0gMjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBjaG9zZW4gdmVyc2lvbjogWyVkOiVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWZbNF0sIGJ1Zls1XSApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIHQgPSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB0ID4+IDI0ICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggdCA+PiAxNiApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHQgPj4gIDggKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCB0ICAgICAgICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgY3VycmVudCB0aW1lOiAlbHUiLCB0ICkgKTsKKyNlbHNlCisgICAgaWYoICggcmV0ID0gc3NsLT5jb25mLT5mX3JuZyggc3NsLT5jb25mLT5wX3JuZywgcCwgNCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBwICs9IDQ7CisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKworICAgIGlmKCAoIHJldCA9IHNzbC0+Y29uZi0+Zl9ybmcoIHNzbC0+Y29uZi0+cF9ybmcsIHAsIDI4ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHAgKz0gMjg7CisKKyAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMgKyAzMiwgYnVmICsgNiwgMzIgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInNlcnZlciBoZWxsbywgcmFuZG9tIGJ5dGVzIiwgYnVmICsgNiwgMzIgKTsKKworICAgIC8qCisgICAgICogUmVzdW1lIGlzIDAgIGJ5IGRlZmF1bHQsIHNlZSBzc2xfaGFuZHNoYWtlX2luaXQoKS4KKyAgICAgKiBJdCBtYXkgYmUgYWxyZWFkeSBzZXQgdG8gMSBieSBzc2xfcGFyc2Vfc2Vzc2lvbl90aWNrZXRfZXh0KCkuCisgICAgICogSWYgbm90LCB0cnkgbG9va2luZyB1cCBzZXNzaW9uIElEIGluIG91ciBjYWNoZS4KKyAgICAgKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA9PSAwICYmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfSU5JVElBTF9IQU5EU0hBS0UgJiYKKyNlbmRpZgorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gIT0gMCAmJgorICAgICAgICBzc2wtPmNvbmYtPmZfZ2V0X2NhY2hlICE9IE5VTEwgJiYKKyAgICAgICAgc3NsLT5jb25mLT5mX2dldF9jYWNoZSggc3NsLT5jb25mLT5wX2NhY2hlLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICkgPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiICkgKTsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJlc3VtZSA9IDE7CisgICAgfQorCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgPT0gMCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBOZXcgc2Vzc2lvbiwgY3JlYXRlIGEgbmV3IHNlc3Npb24gaWQsCisgICAgICAgICAqIHVubGVzcyB3ZSdyZSBhYm91dCB0byBpc3N1ZSBhIHNlc3Npb24gdGlja2V0CisgICAgICAgICAqLworICAgICAgICBzc2wtPnN0YXRlKys7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5zdGFydCA9IG1iZWR0bHNfdGltZSggTlVMTCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5uZXdfc2Vzc2lvbl90aWNrZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IG4gPSAwOworICAgICAgICAgICAgbWVtc2V0KCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZCwgMCwgMzIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbiA9IG4gPSAzMjsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbC0+Y29uZi0+Zl9ybmcoIHNzbC0+Y29uZi0+cF9ybmcsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBSZXN1bWluZyBhIHNlc3Npb24KKyAgICAgICAgICovCisgICAgICAgIG4gPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW47CisgICAgICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogICAgMzggIC4gIDM4ICAgICBzZXNzaW9uIGlkIGxlbmd0aAorICAgICAqICAgIDM5ICAuIDM4K24gICAgc2Vzc2lvbiBpZAorICAgICAqICAgMzkrbiAuIDQwK24gICAgY2hvc2VuIGNpcGhlcnN1aXRlCisgICAgICogICA0MStuIC4gNDErbiAgICBjaG9zZW4gY29tcHJlc3Npb24gYWxnLgorICAgICAqICAgNDIrbiAuIDQzK24gICAgZXh0ZW5zaW9ucyBsZW5ndGgKKyAgICAgKiAgIDQ0K24gLiA0MytuK20gIGV4dGVuc2lvbnMKKyAgICAgKi8KKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbjsKKyAgICBtZW1jcHkoIHAsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5pZF9sZW4gKTsKKyAgICBwICs9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmlkX2xlbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBzZXNzaW9uIGlkIGxlbi46ICVkIiwgbiApICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAgICJzZXJ2ZXIgaGVsbG8sIHNlc3Npb24gaWQiLCBidWYgKyAzOSwgbiApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiJXMgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiwKKyAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID8gImEiIDogIm5vIiApICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZSA+PiA4ICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGUgICAgICApOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uICAgICAgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBjaG9zZW4gY2lwaGVyc3VpdGU6ICVzIiwKKyAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlICkgKSApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBjb21wcmVzcyBhbGcuOiAweCUwMlgiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmNvbXByZXNzaW9uICkgKTsKKworICAgIC8qIERvIG5vdCB3cml0ZSB0aGUgZXh0ZW5zaW9ucyBpZiB0aGUgcHJvdG9jb2wgaXMgU1NMdjMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgaWYoICggc3NsLT5tYWpvcl92ZXIgIT0gMyApIHx8ICggc3NsLT5taW5vcl92ZXIgIT0gMCApICkKKyAgICB7CisjZW5kaWYKKworICAgIC8qCisgICAgICogIEZpcnN0IHdyaXRlIGV4dGVuc2lvbnMsIHRoZW4gdGhlIHRvdGFsIGxlbmd0aAorICAgICAqLworICAgIHNzbF93cml0ZV9yZW5lZ290aWF0aW9uX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorICAgIHNzbF93cml0ZV9tYXhfZnJhZ21lbnRfbGVuZ3RoX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgIHNzbF93cml0ZV90cnVuY2F0ZWRfaG1hY19leHQoIHNzbCwgcCArIDIgKyBleHRfbGVuLCAmb2xlbiApOworICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDKQorICAgIHNzbF93cml0ZV9lbmNyeXB0X3RoZW5fbWFjX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgc3NsX3dyaXRlX2V4dGVuZGVkX21zX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBzc2xfd3JpdGVfc2Vzc2lvbl90aWNrZXRfZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgc3NsX3dyaXRlX3N1cHBvcnRlZF9wb2ludF9mb3JtYXRzX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICBzc2xfd3JpdGVfZWNqcGFrZV9ra3BwX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgc3NsX3dyaXRlX2FscG5fZXh0KCBzc2wsIHAgKyAyICsgZXh0X2xlbiwgJm9sZW4gKTsKKyAgICBleHRfbGVuICs9IG9sZW47CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCB0b3RhbCBleHRlbnNpb24gbGVuZ3RoOiAlZCIsIGV4dF9sZW4gKSApOworCisgICAgaWYoIGV4dF9sZW4gPiAwICkKKyAgICB7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggZXh0X2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggZXh0X2xlbiAgICAgICkgJiAweEZGICk7CisgICAgICAgIHAgKz0gZXh0X2xlbjsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgfQorI2VuZGlmCisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gcCAtIGJ1ZjsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPOworCisgICAgcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgc2VydmVyIGhlbGxvIiApICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpICAgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2NlcnRpZmljYXRlX3JlcXVlc3QoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisgICAgc2l6ZV90IGRuX3NpemUsIHRvdGFsX2RuX3NpemU7IC8qIGV4Y2x1ZGluZyBsZW5ndGggYnl0ZXMgKi8KKyAgICBzaXplX3QgY3RfbGVuLCBzYV9sZW47IC8qIGluY2x1ZGluZyBsZW5ndGggYnl0ZXMgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpidWYsICpwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBlbmQgPSBzc2wtPm91dF9tc2cgKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU47CisgICAgY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0OworICAgIGludCBhdXRobW9kZTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgKSApOworCisgICAgc3NsLT5zdGF0ZSsrOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OKQorICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+c25pX2F1dGhtb2RlICE9IE1CRURUTFNfU1NMX1ZFUklGWV9VTlNFVCApCisgICAgICAgIGF1dGhtb2RlID0gc3NsLT5oYW5kc2hha2UtPnNuaV9hdXRobW9kZTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgYXV0aG1vZGUgPSBzc2wtPmNvbmYtPmF1dGhtb2RlOworCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSB8fAorICAgICAgICBhdXRobW9kZSA9PSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICAgICAwICAuICAgMCAgIGhhbmRzaGFrZSB0eXBlCisgICAgICogICAgIDEgIC4gICAzICAgaGFuZHNoYWtlIGxlbmd0aAorICAgICAqICAgICA0ICAuICAgNCAgIGNlcnQgdHlwZSBjb3VudAorICAgICAqICAgICA1ICAuLiBtLTEgIGNlcnQgdHlwZXMKKyAgICAgKiAgICAgbSAgLi4gbSsxICBzaWcgYWxnIGxlbmd0aCAoVExTIDEuMiBvbmx5KQorICAgICAqICAgIG0rMSAuLiBuLTEgIFNpZ25hdHVyZUFuZEhhc2hBbGdvcml0aG1zIChUTFMgMS4yIG9ubHkpCisgICAgICogICAgIG4gIC4uIG4rMSAgbGVuZ3RoIG9mIGFsbCBETnMKKyAgICAgKiAgICBuKzIgLi4gbiszICBsZW5ndGggb2YgRE4gMQorICAgICAqICAgIG4rNCAuLiAuLi4gIERpc3Rpbmd1aXNoZWQgTmFtZSAjMQorICAgICAqICAgIC4uLiAuLiAuLi4gIGxlbmd0aCBvZiBETiAyLCBldGMuCisgICAgICovCisgICAgYnVmID0gc3NsLT5vdXRfbXNnOworICAgIHAgPSBidWYgKyA0OworCisgICAgLyoKKyAgICAgKiBTdXBwb3J0ZWQgY2VydGlmaWNhdGUgdHlwZXMKKyAgICAgKgorICAgICAqICAgICBDbGllbnRDZXJ0aWZpY2F0ZVR5cGUgY2VydGlmaWNhdGVfdHlwZXM8MS4uMl44LTE+OworICAgICAqICAgICBlbnVtIHsgKDI1NSkgfSBDbGllbnRDZXJ0aWZpY2F0ZVR5cGU7CisgICAgICovCisgICAgY3RfbGVuID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBwWzEgKyBjdF9sZW4rK10gPSBNQkVEVExTX1NTTF9DRVJUX1RZUEVfUlNBX1NJR047CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICBwWzEgKyBjdF9sZW4rK10gPSBNQkVEVExTX1NTTF9DRVJUX1RZUEVfRUNEU0FfU0lHTjsKKyNlbmRpZgorCisgICAgcFswXSA9ICh1bnNpZ25lZCBjaGFyKSBjdF9sZW4rKzsKKyAgICBwICs9IGN0X2xlbjsKKworICAgIHNhX2xlbiA9IDA7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgLyoKKyAgICAgKiBBZGQgc2lnbmF0dXJlX2FsZ29yaXRobXMgZm9yIHZlcmlmeSAoVExTIDEuMikKKyAgICAgKgorICAgICAqICAgICBTaWduYXR1cmVBbmRIYXNoQWxnb3JpdGhtIHN1cHBvcnRlZF9zaWduYXR1cmVfYWxnb3JpdGhtczwyLi4yXjE2LTI+OworICAgICAqCisgICAgICogICAgIHN0cnVjdCB7CisgICAgICogICAgICAgICAgIEhhc2hBbGdvcml0aG0gaGFzaDsKKyAgICAgKiAgICAgICAgICAgU2lnbmF0dXJlQWxnb3JpdGhtIHNpZ25hdHVyZTsKKyAgICAgKiAgICAgfSBTaWduYXR1cmVBbmRIYXNoQWxnb3JpdGhtOworICAgICAqCisgICAgICogICAgIGVudW0geyAoMjU1KSB9IEhhc2hBbGdvcml0aG07CisgICAgICogICAgIGVudW0geyAoMjU1KSB9IFNpZ25hdHVyZUFsZ29yaXRobTsKKyAgICAgKi8KKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCAqY3VyOworCisgICAgICAgIC8qCisgICAgICAgICAqIFN1cHBvcnRlZCBzaWduYXR1cmUgYWxnb3JpdGhtcworICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBjdXIgPSBzc2wtPmNvbmYtPnNpZ19oYXNoZXM7ICpjdXIgIT0gTUJFRFRMU19NRF9OT05FOyBjdXIrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaGFzaCA9IG1iZWR0bHNfc3NsX2hhc2hfZnJvbV9tZF9hbGcoICpjdXIgKTsKKworICAgICAgICAgICAgaWYoIE1CRURUTFNfU1NMX0hBU0hfTk9ORSA9PSBoYXNoIHx8IG1iZWR0bHNfc3NsX3NldF9jYWxjX3ZlcmlmeV9tZCggc3NsLCBoYXNoICkgKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICAgICAgcFsyICsgc2FfbGVuKytdID0gaGFzaDsKKyAgICAgICAgICAgIHBbMiArIHNhX2xlbisrXSA9IE1CRURUTFNfU1NMX1NJR19SU0E7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAgICAgICAgIHBbMiArIHNhX2xlbisrXSA9IGhhc2g7CisgICAgICAgICAgICBwWzIgKyBzYV9sZW4rK10gPSBNQkVEVExTX1NTTF9TSUdfRUNEU0E7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHBbMF0gPSAodW5zaWduZWQgY2hhcikoIHNhX2xlbiA+PiA4ICk7CisgICAgICAgIHBbMV0gPSAodW5zaWduZWQgY2hhcikoIHNhX2xlbiAgICAgICk7CisgICAgICAgIHNhX2xlbiArPSAyOworICAgICAgICBwICs9IHNhX2xlbjsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyAgICAvKgorICAgICAqIERpc3Rpbmd1aXNoZWROYW1lIGNlcnRpZmljYXRlX2F1dGhvcml0aWVzPDAuLjJeMTYtMT47CisgICAgICogb3BhcXVlIERpc3Rpbmd1aXNoZWROYW1lPDEuLjJeMTYtMT47CisgICAgICovCisgICAgcCArPSAyOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnNuaV9jYV9jaGFpbiAhPSBOVUxMICkKKyAgICAgICAgY3J0ID0gc3NsLT5oYW5kc2hha2UtPnNuaV9jYV9jaGFpbjsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgY3J0ID0gc3NsLT5jb25mLT5jYV9jaGFpbjsKKworICAgIHRvdGFsX2RuX3NpemUgPSAwOworICAgIHdoaWxlKCBjcnQgIT0gTlVMTCAmJiBjcnQtPnZlcnNpb24gIT0gMCApCisgICAgeworICAgICAgICBkbl9zaXplID0gY3J0LT5zdWJqZWN0X3Jhdy5sZW47CisKKyAgICAgICAgaWYoIGVuZCA8IHAgfHwKKyAgICAgICAgICAgIChzaXplX3QpKCBlbmQgLSBwICkgPCBkbl9zaXplIHx8CisgICAgICAgICAgICAoc2l6ZV90KSggZW5kIC0gcCApIDwgMiArIGRuX3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNraXBwaW5nIENBczogYnVmZmVyIHRvbyBzaG9ydCIgKSApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBkbl9zaXplID4+IDggKTsKKyAgICAgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggZG5fc2l6ZSAgICAgICk7CisgICAgICAgIG1lbWNweSggcCwgY3J0LT5zdWJqZWN0X3Jhdy5wLCBkbl9zaXplICk7CisgICAgICAgIHAgKz0gZG5fc2l6ZTsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJyZXF1ZXN0ZWQgRE4iLCBwIC0gZG5fc2l6ZSwgZG5fc2l6ZSApOworCisgICAgICAgIHRvdGFsX2RuX3NpemUgKz0gMiArIGRuX3NpemU7CisgICAgICAgIGNydCA9IGNydC0+bmV4dDsKKyAgICB9CisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gcCAtIGJ1ZjsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVDsKKyAgICBzc2wtPm91dF9tc2dbNCArIGN0X2xlbiArIHNhX2xlbl0gPSAodW5zaWduZWQgY2hhcikoIHRvdGFsX2RuX3NpemUgID4+IDggKTsKKyAgICBzc2wtPm91dF9tc2dbNSArIGN0X2xlbiArIHNhX2xlbl0gPSAodW5zaWduZWQgY2hhcikoIHRvdGFsX2RuX3NpemUgICAgICAgKTsKKworICAgIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX2dldF9lY2RoX3BhcmFtc19mcm9tX2NlcnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAhIG1iZWR0bHNfcGtfY2FuX2RvKCBtYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSwgTUJFRFRMU19QS19FQ0tFWSApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2VydmVyIGtleSBub3QgRUNESCBjYXBhYmxlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BLX1RZUEVfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfZ2V0X3BhcmFtcyggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfZWMoICptYmVkdGxzX3NzbF9vd25fa2V5KCBzc2wgKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ0RIX09VUlMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJtYmVkdGxzX2VjZGhfZ2V0X3BhcmFtcyIgKSwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCkgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKworc3RhdGljIGludCBzc2xfd3JpdGVfc2VydmVyX2tleV9leGNoYW5nZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuID0gMDsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc3NsLT5vdXRfbXNnICsgNDsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdfc2lnbmVkID0gcDsKKyAgICBzaXplX3QgZGlnX3NpZ25lZF9sZW4gPSAwLCBsZW47CisgICAgKCh2b2lkKSBkaWdfc2lnbmVkKTsKKyAgICAoKHZvaWQpIGRpZ19zaWduZWRfbGVuKTsKKyAgICAoKHZvaWQpIGxlbik7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgc2VydmVyIGtleSBleGNoYW5nZSIgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNraXAgd3JpdGUgc2VydmVyIGtleSBleGNoYW5nZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSApCisgICAgeworICAgICAgICBzc2xfZ2V0X2VjZGhfcGFyYW1zX2Zyb21fY2VydCggc3NsICk7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIHNlcnZlciBrZXkgZXhjaGFuZ2UiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRSApCisgICAgeworICAgICAgICBzaXplX3QgamxlbjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV93cml0ZV9yb3VuZF90d28oICZzc2wtPmhhbmRzaGFrZS0+ZWNqcGFrZV9jdHgsCisgICAgICAgICAgICAgICAgcCwgZW5kIC0gcCwgJmpsZW4sIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2pwYWtlX3dyaXRlX3JvdW5kX3R3byIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHAgKz0gamxlbjsKKyAgICAgICAgbiArPSBqbGVuOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgLyogTm90ZTogd2UgZG9uJ3Qgc3VwcG9ydCBpZGVudGl0eSBoaW50cywgdW50aWwgc29tZW9uZSBhc2tzCisgICAgICAgICAqIGZvciB0aGVtLiAqLworICAgICAgICAqKHArKykgPSAweDAwOworICAgICAgICAqKHArKykgPSAweDAwOworCisgICAgICAgIG4gKz0gMjsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyApCisgICAgeworICAgICAgICBpZiggc3NsLT5jb25mLT5kaG1fUC5wID09IE5VTEwgfHwgc3NsLT5jb25mLT5kaG1fRy5wID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5vIERIIHBhcmFtZXRlcnMgc2V0IiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRXBoZW1lcmFsIERIIHBhcmFtZXRlcnM6CisgICAgICAgICAqCisgICAgICAgICAqIHN0cnVjdCB7CisgICAgICAgICAqICAgICBvcGFxdWUgZGhfcDwxLi4yXjE2LTE+OworICAgICAgICAgKiAgICAgb3BhcXVlIGRoX2c8MS4uMl4xNi0xPjsKKyAgICAgICAgICogICAgIG9wYXF1ZSBkaF9ZczwxLi4yXjE2LTE+OworICAgICAgICAgKiB9IFNlcnZlckRIUGFyYW1zOworICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfY29weSggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LlAsICZzc2wtPmNvbmYtPmRobV9QICkgKSAhPSAwIHx8CisgICAgICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX2NvcHkoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5HLCAmc3NsLT5jb25mLT5kaG1fRyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfbXBpX2NvcHkiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9tYWtlX3BhcmFtcyggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgbWJlZHRsc19tcGlfc2l6ZSggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LlAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHAsICZsZW4sIHNzbC0+Y29uZi0+Zl9ybmcsIHNzbC0+Y29uZi0+cF9ybmcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2RobV9tYWtlX3BhcmFtcyIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGRpZ19zaWduZWQgPSBwOworICAgICAgICBkaWdfc2lnbmVkX2xlbiA9IGxlbjsKKworICAgICAgICBwICs9IGxlbjsKKyAgICAgICAgbiArPSBsZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBYICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5YICApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IFAgIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LlAgICk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkRITTogRyAiLCAmc3NsLT5oYW5kc2hha2UtPmRobV9jdHguRyAgKTsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBHWCIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5HWCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX0VDREhFX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRXBoZW1lcmFsIEVDREggcGFyYW1ldGVyczoKKyAgICAgICAgICoKKyAgICAgICAgICogc3RydWN0IHsKKyAgICAgICAgICogICAgIEVDUGFyYW1ldGVycyBjdXJ2ZV9wYXJhbXM7CisgICAgICAgICAqICAgICBFQ1BvaW50ICAgICAgcHVibGljOworICAgICAgICAgKiB9IFNlcnZlckVDREhQYXJhbXM7CisgICAgICAgICAqLworICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICoqY3VydmUgPSBOVUxMOworICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9ncm91cF9pZCAqZ2lkOworCisgICAgICAgIC8qIE1hdGNoIG91ciBwcmVmZXJlbmNlIGxpc3QgYWdhaW5zdCB0aGUgb2ZmZXJlZCBjdXJ2ZXMgKi8KKyAgICAgICAgZm9yKCBnaWQgPSBzc2wtPmNvbmYtPmN1cnZlX2xpc3Q7ICpnaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsgZ2lkKysgKQorICAgICAgICAgICAgZm9yKCBjdXJ2ZSA9IHNzbC0+aGFuZHNoYWtlLT5jdXJ2ZXM7ICpjdXJ2ZSAhPSBOVUxMOyBjdXJ2ZSsrICkKKyAgICAgICAgICAgICAgICBpZiggKCpjdXJ2ZSktPmdycF9pZCA9PSAqZ2lkICkKKyAgICAgICAgICAgICAgICAgICAgZ290byBjdXJ2ZV9tYXRjaGluZ19kb25lOworCitjdXJ2ZV9tYXRjaGluZ19kb25lOgorICAgICAgICBpZiggY3VydmUgPT0gTlVMTCB8fCAqY3VydmUgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibm8gbWF0Y2hpbmcgY3VydmUgZm9yIEVDREhFIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9OT19DSVBIRVJfQ0hPU0VOICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIkVDREhFIGN1cnZlOiAlcyIsICgqY3VydmUpLT5uYW1lICkgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LmdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqY3VydmUpLT5ncnBfaWQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2VjcF9ncm91cF9sb2FkIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RoX21ha2VfcGFyYW1zKCAmc3NsLT5oYW5kc2hha2UtPmVjZGhfY3R4LCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gLSBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2RoX21ha2VfcGFyYW1zIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgZGlnX3NpZ25lZCA9IHA7CisgICAgICAgIGRpZ19zaWduZWRfbGVuID0gbGVuOworCisgICAgICAgIHAgKz0gbGVuOworICAgICAgICBuICs9IGxlbjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19FQ1AoIDMsICJFQ0RIOiBRICIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguUSApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fRUNESEVfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQSApCisgICAgeworICAgICAgICBzaXplX3Qgc2lnbmF0dXJlX2xlbiA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBoYXNobGVuID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBoYXNoWzY0XTsKKyAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWRfYWxnID0gTUJFRFRMU19NRF9OT05FOworCisgICAgICAgIC8qCisgICAgICAgICAqIENob29zZSBoYXNoIGFsZ29yaXRobS4gTk9ORSBtZWFucyBNRDUgKyBTSEExIGhlcmUuCisgICAgICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICAgICAgeworICAgICAgICAgICAgbWRfYWxnID0gbWJlZHRsc19zc2xfbWRfYWxnX2Zyb21faGFzaCggc3NsLT5oYW5kc2hha2UtPnNpZ19hbGcgKTsKKworICAgICAgICAgICAgaWYoIG1kX2FsZyA9PSBNQkVEVExTX01EX05PTkUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0KKyAgICAgICAgICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBICkKKyAgICAgICAgeworICAgICAgICAgICAgbWRfYWxnID0gTUJFRFRMU19NRF9TSEExOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBtZF9hbGcgPSBNQkVEVExTX01EX05PTkU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDb21wdXRlIHRoZSBoYXNoIHRvIGJlIHNpZ25lZAorICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgICAgICBpZiggbWRfYWxnID09IE1CRURUTFNfTURfTk9ORSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgbWJlZHRsc19tZDU7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBtYmVkdGxzX3NoYTE7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X2luaXQoICAmbWJlZHRsc19tZDUgICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfaW5pdCggJm1iZWR0bHNfc2hhMSApOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZGlnaXRhbGx5LXNpZ25lZCBzdHJ1Y3QgeworICAgICAgICAgICAgICogICAgIG9wYXF1ZSBtZDVfaGFzaFsxNl07CisgICAgICAgICAgICAgKiAgICAgb3BhcXVlIHNoYV9oYXNoWzIwXTsKKyAgICAgICAgICAgICAqIH07CisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogbWQ1X2hhc2gKKyAgICAgICAgICAgICAqICAgICBNRDUoQ2xpZW50SGVsbG8ucmFuZG9tICsgU2VydmVySGVsbG8ucmFuZG9tCisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFNlcnZlclBhcmFtcyk7CisgICAgICAgICAgICAgKiBzaGFfaGFzaAorICAgICAgICAgICAgICogICAgIFNIQShDbGllbnRIZWxsby5yYW5kb20gKyBTZXJ2ZXJIZWxsby5yYW5kb20KKyAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU2VydmVyUGFyYW1zKTsKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmbWJlZHRsc19tZDUgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1iZWR0bHNfbWQ1LCBzc2wtPmhhbmRzaGFrZS0+cmFuZGJ5dGVzLCAgNjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1iZWR0bHNfbWQ1LCBkaWdfc2lnbmVkLCBkaWdfc2lnbmVkX2xlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWJlZHRsc19tZDUsIGhhc2ggKTsKKworICAgICAgICAgICAgbWJlZHRsc19zaGExX3N0YXJ0cyggJm1iZWR0bHNfc2hhMSApOworICAgICAgICAgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJm1iZWR0bHNfc2hhMSwgc3NsLT5oYW5kc2hha2UtPnJhbmRieXRlcywgIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmbWJlZHRsc19zaGExLCBkaWdfc2lnbmVkLCBkaWdfc2lnbmVkX2xlbiApOworICAgICAgICAgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJm1iZWR0bHNfc2hhMSwgaGFzaCArIDE2ICk7CisKKyAgICAgICAgICAgIGhhc2hsZW4gPSAzNjsKKworICAgICAgICAgICAgbWJlZHRsc19tZDVfZnJlZSggICZtYmVkdGxzX21kNSAgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfc2hhMV9mcmVlKCAmbWJlZHRsc19zaGExICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBcCisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICBpZiggbWRfYWxnICE9IE1CRURUTFNfTURfTk9ORSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKyAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworCisgICAgICAgICAgICAvKiBJbmZvIGZyb20gbWRfYWxnIHdpbGwgYmUgdXNlZCBpbnN0ZWFkICovCisgICAgICAgICAgICBoYXNobGVuID0gMDsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGRpZ2l0YWxseS1zaWduZWQgc3RydWN0IHsKKyAgICAgICAgICAgICAqICAgICBvcGFxdWUgY2xpZW50X3JhbmRvbVszMl07CisgICAgICAgICAgICAgKiAgICAgb3BhcXVlIHNlcnZlcl9yYW5kb21bMzJdOworICAgICAgICAgICAgICogICAgIFNlcnZlckRIUGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAqIH07CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIG1kX2luZm8sIDAgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfbWRfc2V0dXAiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX21kX3N0YXJ0cyggJmN0eCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIHNzbC0+aGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDY0ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eCwgZGlnX3NpZ25lZCwgZGlnX3NpZ25lZF9sZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmY3R4LCBoYXNoICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgXAorICAgICAgICAgIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJwYXJhbWV0ZXJzIGhhc2giLCBoYXNoLCBoYXNobGVuICE9IDAgPyBoYXNobGVuIDoKKyAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpICggbWJlZHRsc19tZF9nZXRfc2l6ZSggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICkgKSApICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTWFrZSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAqLworICAgICAgICBpZiggbWJlZHRsc19zc2xfb3duX2tleSggc3NsICkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIHByaXZhdGUga2V5IiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRCApOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgICAgIHsKKyAgICAgICAgICAgICoocCsrKSA9IHNzbC0+aGFuZHNoYWtlLT5zaWdfYWxnOworICAgICAgICAgICAgKihwKyspID0gbWJlZHRsc19zc2xfc2lnX2Zyb21fcGsoIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApICk7CisKKyAgICAgICAgICAgIG4gKz0gMjsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfc2lnbiggbWJlZHRsc19zc2xfb3duX2tleSggc3NsICksIG1kX2FsZywgaGFzaCwgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgKyAyICwgJnNpZ25hdHVyZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19wa19zaWduIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBzaWduYXR1cmVfbGVuID4+IDggKTsKKyAgICAgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBzaWduYXR1cmVfbGVuICAgICAgKTsKKyAgICAgICAgbiArPSAyOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgIm15IHNpZ25hdHVyZSIsIHAsIHNpZ25hdHVyZV9sZW4gKTsKKworICAgICAgICBuICs9IHNpZ25hdHVyZV9sZW47CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgKi8KKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSA0ICsgbjsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0tFWV9FWENIQU5HRTsKKworICAgIHNzbC0+c3RhdGUrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgc2VydmVyIGtleSBleGNoYW5nZSIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX3NlcnZlcl9oZWxsb19kb25lKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHdyaXRlIHNlcnZlciBoZWxsbyBkb25lIiApICk7CisKKyAgICBzc2wtPm91dF9tc2dsZW4gID0gNDsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfU0VSVkVSX0hFTExPX0RPTkU7CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfZmxpZ2h0X2NvbXBsZXRlZCggc3NsICk7CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3dyaXRlX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gd3JpdGUgc2VydmVyIGhlbGxvIGRvbmUiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jbGllbnRfZGhfcHVibGljKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgc2l6ZV90IG47CisKKyAgICAvKgorICAgICAqIFJlY2VpdmUgR15ZIG1vZCBQLCBwcmVtYXN0ZXIgPSAoR15ZKV5YIG1vZCBQCisgICAgICovCisgICAgaWYoICpwICsgMiA+IGVuZCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKTsKKyAgICB9CisKKyAgICBuID0gKCAoKnApWzBdIDw8IDggKSB8ICgqcClbMV07CisgICAgKnAgKz0gMjsKKworICAgIGlmKCAqcCArIG4gPiBlbmQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fcmVhZF9wdWJsaWMoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwgKnAsIG4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19kaG1fcmVhZF9wdWJsaWMiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlAgKTsKKyAgICB9CisKKyAgICAqcCArPSBuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBHWSIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5HWSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKQorc3RhdGljIGludCBzc2xfcGFyc2VfZW5jcnlwdGVkX3BtcyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwbXNfb2Zmc2V0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSBtYmVkdGxzX3BrX2dldF9sZW4oIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApICk7CisgICAgdW5zaWduZWQgY2hhciAqcG1zID0gc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciArIHBtc19vZmZzZXQ7CisgICAgdW5zaWduZWQgY2hhciB2ZXJbMl07CisgICAgdW5zaWduZWQgY2hhciBmYWtlX3Btc1s0OF0sIHBlZXJfcG1zWzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIG1hc2s7CisgICAgc2l6ZV90IGksIHBlZXJfcG1zbGVuOworICAgIHVuc2lnbmVkIGludCBkaWZmOworCisgICAgaWYoICEgbWJlZHRsc19wa19jYW5fZG8oIG1iZWR0bHNfc3NsX293bl9rZXkoIHNzbCApLCBNQkVEVExTX1BLX1JTQSApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZ290IG5vIFJTQSBwcml2YXRlIGtleSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRCApOworICAgIH0KKworICAgIC8qCisgICAgICogRGVjcnlwdCB0aGUgcHJlbWFzdGVyIHVzaW5nIG93biBwcml2YXRlIFJTQSBrZXkKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyICE9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgeworICAgICAgICBpZiggKnArKyAhPSAoICggbGVuID4+IDggKSAmIDB4RkYgKSB8fAorICAgICAgICAgICAgKnArKyAhPSAoICggbGVuICAgICAgKSAmIDB4RkYgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYoIHAgKyBsZW4gIT0gZW5kICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIHNzbC0+aGFuZHNoYWtlLT5tYXhfbWFqb3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+bWF4X21pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT50cmFuc3BvcnQsIHZlciApOworCisgICAgLyoKKyAgICAgKiBQcm90ZWN0aW9uIGFnYWluc3QgQmxlaWNoZW5iYWNoZXIncyBhdHRhY2s6IGludmFsaWQgUEtDUyMxIHYxLjUgcGFkZGluZworICAgICAqIG11c3Qgbm90IGNhdXNlIHRoZSBjb25uZWN0aW9uIHRvIGVuZCBpbW1lZGlhdGVseTsgaW5zdGVhZCwgc2VuZCBhCisgICAgICogYmFkX3JlY29yZF9tYWMgbGF0ZXIgaW4gdGhlIGhhbmRzaGFrZS4KKyAgICAgKiBBbHNvLCBhdm9pZCBkYXRhLWRlcGVuZGFudCBicmFuY2hlcyBoZXJlIHRvIHByb3RlY3QgYWdhaW5zdAorICAgICAqIHRpbWluZy1iYXNlZCB2YXJpYW50cy4KKyAgICAgKi8KKyAgICByZXQgPSBzc2wtPmNvbmYtPmZfcm5nKCBzc2wtPmNvbmYtPnBfcm5nLCBmYWtlX3Btcywgc2l6ZW9mKCBmYWtlX3BtcyApICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfcGtfZGVjcnlwdCggbWJlZHRsc19zc2xfb3duX2tleSggc3NsICksIHAsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwZWVyX3BtcywgJnBlZXJfcG1zbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggcGVlcl9wbXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisKKyAgICBkaWZmICA9ICh1bnNpZ25lZCBpbnQpIHJldDsKKyAgICBkaWZmIHw9IHBlZXJfcG1zbGVuIF4gNDg7CisgICAgZGlmZiB8PSBwZWVyX3Btc1swXSBeIHZlclswXTsKKyAgICBkaWZmIHw9IHBlZXJfcG1zWzFdIF4gdmVyWzFdOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCisgICAgaWYoIGRpZmYgIT0gMCApCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworI2VuZGlmCisKKyAgICBpZiggc2l6ZW9mKCBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyICkgPCBwbXNfb2Zmc2V0IHx8CisgICAgICAgIHNpemVvZiggc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciApIC0gcG1zX29mZnNldCA8IDQ4ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKyAgICBzc2wtPmhhbmRzaGFrZS0+cG1zbGVuID0gNDg7CisKKyAgICAvKiBtYXNrID0gZGlmZiA/IDB4ZmYgOiAweDAwIHVzaW5nIGJpdCBvcGVyYXRpb25zIHRvIGF2b2lkIGJyYW5jaGVzICovCisgICAgLyogTVNWQyBoYXMgYSB3YXJuaW5nIGFib3V0IHVuYXJ5IG1pbnVzIG9uIHVuc2lnbmVkLCBidXQgdGhpcyBpcworICAgICAqIHdlbGwtZGVmaW5lZCBhbmQgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBkbyBoZXJlICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyggcHVzaCApCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkKKyNlbmRpZgorICAgIG1hc2sgPSAtICggKCBkaWZmIHwgLSBkaWZmICkgPj4gKCBzaXplb2YoIHVuc2lnbmVkIGludCApICogOCAtIDEgKSApOworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoIHBvcCApCisjZW5kaWYKKworICAgIGZvciggaSA9IDA7IGkgPCBzc2wtPmhhbmRzaGFrZS0+cG1zbGVuOyBpKysgKQorICAgICAgICBwbXNbaV0gPSAoIG1hc2sgJiBmYWtlX3Btc1tpXSApIHwgKCAofm1hc2spICYgcGVlcl9wbXNbaV0gKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2NsaWVudF9wc2tfaWRlbnRpdHkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgKQoreworICAgIGludCByZXQgPSAwOworICAgIHNpemVfdCBuOworCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9wc2sgPT0gTlVMTCAmJgorICAgICAgICAoIHNzbC0+Y29uZi0+cHNrID09IE5VTEwgfHwgc3NsLT5jb25mLT5wc2tfaWRlbnRpdHkgPT0gTlVMTCB8fAorICAgICAgICAgIHNzbC0+Y29uZi0+cHNrX2lkZW50aXR5X2xlbiA9PSAwIHx8IHNzbC0+Y29uZi0+cHNrX2xlbiA9PSAwICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJnb3Qgbm8gcHJlLXNoYXJlZCBrZXkiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlY2VpdmUgY2xpZW50IHByZS1zaGFyZWQga2V5IGlkZW50aXR5IG5hbWUKKyAgICAgKi8KKyAgICBpZiggKnAgKyAyID4gZW5kICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgIH0KKworICAgIG4gPSAoICgqcClbMF0gPDwgOCApIHwgKCpwKVsxXTsKKyAgICAqcCArPSAyOworCisgICAgaWYoIG4gPCAxIHx8IG4gPiA2NTUzNSB8fCAqcCArIG4gPiBlbmQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9wc2sgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggc3NsLT5jb25mLT5mX3Bzayggc3NsLT5jb25mLT5wX3Bzaywgc3NsLCAqcCwgbiApICE9IDAgKQorICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX1VOS05PV05fSURFTlRJVFk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIElkZW50aXR5IGlzIG5vdCBhIGJpZyBzZWNyZXQgc2luY2UgY2xpZW50cyBzZW5kIGl0IGluIHRoZSBjbGVhciwKKyAgICAgICAgICogYnV0IHRyZWF0IGl0IGNhcmVmdWxseSBhbnl3YXksIGp1c3QgaW4gY2FzZSAqLworICAgICAgICBpZiggbiAhPSBzc2wtPmNvbmYtPnBza19pZGVudGl0eV9sZW4gfHwKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggc3NsLT5jb25mLT5wc2tfaWRlbnRpdHksICpwLCBuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1NTTF9VTktOT1dOX0lERU5USVRZOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJVbmtub3duIFBTSyBpZGVudGl0eSIsICpwLCBuICk7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9QU0tfSURFTlRJVFkgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWSApOworICAgIH0KKworICAgICpwICs9IG47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworc3RhdGljIGludCBzc2xfcGFyc2VfY2xpZW50X2tleV9leGNoYW5nZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm87CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZDsKKworICAgIGNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNsaWVudCBrZXkgZXhjaGFuZ2UiICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBwID0gc3NsLT5pbl9tc2cgKyBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKyAgICBlbmQgPSBzc2wtPmluX21zZyArIHNzbC0+aW5faHNsZW47CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aW5fbXNnWzBdICE9IE1CRURUTFNfU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2xpZW50IGtleSBleGNoYW5nZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfZGhfcHVibGljKCBzc2wsICZwLCBlbmQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9jbGllbnRfZGhfcHVibGljIiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggcCAhPSBlbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19QUkVNQVNURVJfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5oYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9DUyApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVBJKCAzLCAiREhNOiBLICIsICZzc2wtPmhhbmRzaGFrZS0+ZGhtX2N0eC5LICApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0EgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQSB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGVuZCAtIHApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNkaF9yZWFkX3B1YmxpYyIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlAgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0VDUCggMywgIkVDREg6IFFwICIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHguUXAgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2wtPmhhbmRzaGFrZS0+cG1zbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTVBJX01BWF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01QSSggMywgIkVDREg6IHogICIsICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgueiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgfHwKKyAgICAgICAgICBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEIHx8CisgICAgICAgICAgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCB8fAorICAgICAgICAgIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0sgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3BhcnNlX2NsaWVudF9wc2tfaWRlbnRpdHkoIHNzbCwgJnAsIGVuZCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAic3NsX3BhcnNlX2NsaWVudF9wc2tfaWRlbnRpdHkiICksIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBwICE9IGVuZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNsaWVudCBrZXkgZXhjaGFuZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3Rlciggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5KCBzc2wsICZwLCBlbmQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5IiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfZW5jcnlwdGVkX3Btcyggc3NsLCBwLCBlbmQsIDIgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9lbmNyeXB0ZWRfcG1zIiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3Rlciggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfY2xpZW50X3Bza19pZGVudGl0eSggc3NsLCAmcCwgZW5kICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJzc2xfcGFyc2VfY2xpZW50X3Bza19pZGVudGl0eSIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfZGhfcHVibGljKCBzc2wsICZwLCBlbmQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9jbGllbnRfZGhfcHVibGljIiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggcCAhPSBlbmQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjbGllbnQga2V5IGV4Y2hhbmdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcHNrX2Rlcml2ZV9wcmVtYXN0ZXIoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5KCBzc2wsICZwLCBlbmQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggInNzbF9wYXJzZV9jbGllbnRfcHNrX2lkZW50aXR5IiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMoICZzc2wtPmhhbmRzaGFrZS0+ZWNkaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBlbmQgLSBwICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19lY2RoX3JlYWRfcHVibGljIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9SUCApOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfRUNQKCAzLCAiRUNESDogUXAgIiwgJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC5RcCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyKCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9wYXJzZV9lbmNyeXB0ZWRfcG1zKCBzc2wsIHAsIGVuZCwgMCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAic3NsX3BhcnNlX3BhcnNlX2VuY3J5cHRlZF9wbXNfc2VjcmV0IiApLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggJnNzbC0+aGFuZHNoYWtlLT5lY2pwYWtlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBlbmQgLSBwICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0KCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIsIDMyLCAmc3NsLT5oYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNqcGFrZV9kZXJpdmVfc2VjcmV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2Rlcml2ZV9rZXlzKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZGVyaXZlX2tleXMiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIGNsaWVudCBrZXkgZXhjaGFuZ2UiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQpICAgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQpICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQpICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wYXJzZV9jZXJ0aWZpY2F0ZV92ZXJpZnkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX2NlcnRpZmljYXRlX3ZlcmlmeSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgc2l6ZV90IGksIHNpZ19sZW47CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyICpoYXNoX3N0YXJ0ID0gaGFzaDsKKyAgICBzaXplX3QgaGFzaGxlbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICBtYmVkdGxzX3BrX3R5cGVfdCBwa19hbGc7CisjZW5kaWYKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGc7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFIHx8CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICkgKTsKKyAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKiBSZWFkIHRoZSBtZXNzYWdlIHdpdGhvdXQgYWRkaW5nIGl0IHRvIHRoZSBjaGVja3N1bSAqLworICAgIGRvIHsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZF9sYXllciggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAoICJtYmVkdGxzX3NzbF9yZWFkX3JlY29yZF9sYXllciIgKSwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZGxlX21lc3NhZ2VfdHlwZSggc3NsICk7CisKKyAgICB9IHdoaWxlKCBNQkVEVExTX0VSUl9TU0xfTk9OX0ZBVEFMID09IHJldCApOworCisgICAgaWYoIDAgIT0gcmV0ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAibWJlZHRsc19zc2xfaGFuZGxlX21lc3NhZ2VfdHlwZSIgKSwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgLyogUHJvY2VzcyB0aGUgbWVzc2FnZSBjb250ZW50cyAqLworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSB8fAorICAgICAgICBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgdmVyaWZ5IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSApOworICAgIH0KKworICAgIGkgPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKworICAgIC8qCisgICAgICogIHN0cnVjdCB7CisgICAgICogICAgIFNpZ25hdHVyZUFuZEhhc2hBbGdvcml0aG0gYWxnb3JpdGhtOyAtLSBUTFMgMS4yIG9ubHkKKyAgICAgKiAgICAgb3BhcXVlIHNpZ25hdHVyZTwwLi4yXjE2LTE+OworICAgICAqICB9IERpZ2l0YWxseVNpZ25lZDsKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgbWRfYWxnID0gTUJFRFRMU19NRF9OT05FOworICAgICAgICBoYXNobGVuID0gMzY7CisKKyAgICAgICAgLyogRm9yIEVDRFNBLCB1c2UgU0hBLTEsIG5vdCBNRC01ICsgU0hBLTEgKi8KKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfY2FuX2RvKCAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LT5waywKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfUEtfRUNEU0EgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc2hfc3RhcnQgKz0gMTY7CisgICAgICAgICAgICBoYXNobGVuIC09IDE2OworICAgICAgICAgICAgbWRfYWxnID0gTUJFRFRMU19NRF9TSEExOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwKKyAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zICkKKyAgICB7CisgICAgICAgIGlmKCBpICsgMiA+IHNzbC0+aW5faHNsZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1ZFUklGWSApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSGFzaAorICAgICAgICAgKi8KKyAgICAgICAgbWRfYWxnID0gbWJlZHRsc19zc2xfbWRfYWxnX2Zyb21faGFzaCggc3NsLT5pbl9tc2dbaV0gKTsKKworICAgICAgICBpZiggbWRfYWxnID09IE1CRURUTFNfTURfTk9ORSB8fCBtYmVkdGxzX3NzbF9zZXRfY2FsY192ZXJpZnlfbWQoIHNzbCwgc3NsLT5pbl9tc2dbaV0gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicGVlciBub3QgYWRoZXJpbmcgdG8gcmVxdWVzdGVkIHNpZ19hbGciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIHZlcmlmeSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZICk7CisgICAgICAgIH0KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTURfU0hBMSkKKyAgICAgICAgaWYoIE1CRURUTFNfTURfU0hBMSA9PSBtZF9hbGcgKQorICAgICAgICAgICAgaGFzaF9zdGFydCArPSAxNjsKKyNlbmRpZgorCisgICAgICAgIC8qIEluZm8gZnJvbSBtZF9hbGcgd2lsbCBiZSB1c2VkIGluc3RlYWQgKi8KKyAgICAgICAgaGFzaGxlbiA9IDA7CisKKyAgICAgICAgaSsrOworCisgICAgICAgIC8qCisgICAgICAgICAqIFNpZ25hdHVyZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcGtfYWxnID0gbWJlZHRsc19zc2xfcGtfYWxnX2Zyb21fc2lnKCBzc2wtPmluX21zZ1tpXSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgID09IE1CRURUTFNfUEtfTk9ORSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicGVlciBub3QgYWRoZXJpbmcgdG8gcmVxdWVzdGVkIHNpZ19hbGciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIHZlcmlmeSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayB0aGUgY2VydGlmaWNhdGUncyBrZXkgdHlwZSBtYXRjaGVzIHRoZSBzaWduYXR1cmUgYWxnCisgICAgICAgICAqLworICAgICAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGssIHBrX2FsZyApICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaWdfYWxnIGRvZXNuJ3QgbWF0Y2ggY2VydCBrZXkiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGkrKzsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgaWYoIGkgKyAyID4gc3NsLT5pbl9oc2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZICk7CisgICAgfQorCisgICAgc2lnX2xlbiA9ICggc3NsLT5pbl9tc2dbaV0gPDwgOCApIHwgc3NsLT5pbl9tc2dbaSsxXTsKKyAgICBpICs9IDI7CisKKyAgICBpZiggaSArIHNpZ19sZW4gIT0gc3NsLT5pbl9oc2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEVfVkVSSUZZICk7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIGhhc2ggYW5kIHZlcmlmeSBzaWduYXR1cmUgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY192ZXJpZnkoIHNzbCwgaGFzaCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa192ZXJpZnkoICZzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQtPnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfYWxnLCBoYXNoX3N0YXJ0LCBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2cgKyBpLCBzaWdfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfcGtfdmVyaWZ5IiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfdXBkYXRlX2hhbmRzaGFrZV9zdGF0dXMoIHNzbCApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogIU1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEICYmCisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCAmJgorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX25ld19zZXNzaW9uX3RpY2tldCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCB0bGVuOworICAgIHVpbnQzMl90IGxpZmV0aW1lOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBuZXcgc2Vzc2lvbiB0aWNrZXQiICkgKTsKKworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFOworICAgIHNzbC0+b3V0X21zZ1swXSAgPSBNQkVEVExTX1NTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQ7CisKKyAgICAvKgorICAgICAqIHN0cnVjdCB7CisgICAgICogICAgIHVpbnQzMiB0aWNrZXRfbGlmZXRpbWVfaGludDsKKyAgICAgKiAgICAgb3BhcXVlIHRpY2tldDwwLi4yXjE2LTE+OworICAgICAqIH0gTmV3U2Vzc2lvblRpY2tldDsKKyAgICAgKgorICAgICAqIDQgIC4gIDcgICB0aWNrZXRfbGlmZXRpbWVfaGludCAoMCA9IHVuc3BlY2lmaWVkKQorICAgICAqIDggIC4gIDkgICB0aWNrZXRfbGVuIChuKQorICAgICAqIDEwIC4gIDkrbiB0aWNrZXQgY29udGVudAorICAgICAqLworCisgICAgaWYoICggcmV0ID0gc3NsLT5jb25mLT5mX3RpY2tldF93cml0ZSggc3NsLT5jb25mLT5wX3RpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZyArIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRsZW4sICZsaWZldGltZSApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGUiLCByZXQgKTsKKyAgICAgICAgdGxlbiA9IDA7CisgICAgfQorCisgICAgc3NsLT5vdXRfbXNnWzRdID0gKCBsaWZldGltZSA+PiAyNCApICYgMHhGRjsKKyAgICBzc2wtPm91dF9tc2dbNV0gPSAoIGxpZmV0aW1lID4+IDE2ICkgJiAweEZGOworICAgIHNzbC0+b3V0X21zZ1s2XSA9ICggbGlmZXRpbWUgPj4gIDggKSAmIDB4RkY7CisgICAgc3NsLT5vdXRfbXNnWzddID0gKCBsaWZldGltZSAgICAgICApICYgMHhGRjsKKworICAgIHNzbC0+b3V0X21zZ1s4XSA9ICh1bnNpZ25lZCBjaGFyKSggKCB0bGVuID4+IDggKSAmIDB4RkYgKTsKKyAgICBzc2wtPm91dF9tc2dbOV0gPSAodW5zaWduZWQgY2hhcikoICggdGxlbiAgICAgICkgJiAweEZGICk7CisKKyAgICBzc2wtPm91dF9tc2dsZW4gPSAxMCArIHRsZW47CisKKyAgICAvKgorICAgICAqIE1vcmFsbHkgZXF1aXZhbGVudCB0byB1cGRhdGluZyBzc2wtPnN0YXRlLCBidXQgTmV3U2Vzc2lvblRpY2tldCBhbmQKKyAgICAgKiBDaGFuZ2VDaXBoZXJTcGVjIHNoYXJlIHRoZSBzYW1lIHN0YXRlLgorICAgICAqLworICAgIHNzbC0+aGFuZHNoYWtlLT5uZXdfc2Vzc2lvbl90aWNrZXQgPSAwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBuZXcgc2Vzc2lvbiB0aWNrZXQiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisvKgorICogU1NMIGhhbmRzaGFrZSAtLSBzZXJ2ZXIgc2lkZSAtLSBzaW5nbGUgc3RlcAorICovCitpbnQgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3NlcnZlcl9zdGVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQgPSAwOworCisgICAgaWYoIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgfHwgc3NsLT5oYW5kc2hha2UgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInNlcnZlciBzdGF0ZTogJWQiLCBzc2wtPnN0YXRlICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID09IE1CRURUTFNfU1NMX1JFVFJBTlNfU0VORElORyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZXNlbmQoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZgorCisgICAgc3dpdGNoKCBzc2wtPnN0YXRlICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEVMTE9fUkVRVUVTVDoKKyAgICAgICAgICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9DTElFTlRfSEVMTE87CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiAgPD09ICAgQ2xpZW50SGVsbG8KKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0xJRU5UX0hFTExPOgorICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX2NsaWVudF9oZWxsbyggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fVkVSSUZZX1JFUVVFU1RfU0VOVDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCApOworI2VuZGlmCisKKyAgICAgICAgLyoKKyAgICAgICAgICogID09PiAgIFNlcnZlckhlbGxvCisgICAgICAgICAqICAgICAgICBDZXJ0aWZpY2F0ZQorICAgICAgICAgKiAgICAgICggU2VydmVyS2V5RXhjaGFuZ2UgICkKKyAgICAgICAgICogICAgICAoIENlcnRpZmljYXRlUmVxdWVzdCApCisgICAgICAgICAqICAgICAgICBTZXJ2ZXJIZWxsb0RvbmUKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPOgorICAgICAgICAgICAgcmV0ID0gc3NsX3dyaXRlX3NlcnZlcl9oZWxsbyggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NFUlZFUl9DRVJUSUZJQ0FURToKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlX2NlcnRpZmljYXRlKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0tFWV9FWENIQU5HRToKKyAgICAgICAgICAgIHJldCA9IHNzbF93cml0ZV9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfUkVRVUVTVDoKKyAgICAgICAgICAgIHJldCA9IHNzbF93cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPX0RPTkU6CisgICAgICAgICAgICByZXQgPSBzc2xfd3JpdGVfc2VydmVyX2hlbGxvX2RvbmUoIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIDw9PSAoIENlcnRpZmljYXRlL0FsZXJ0ICApCisgICAgICAgICAqICAgICAgICBDbGllbnRLZXlFeGNoYW5nZQorICAgICAgICAgKiAgICAgICggQ2VydGlmaWNhdGVWZXJpZnkgICkKKyAgICAgICAgICogICAgICAgIENoYW5nZUNpcGhlclNwZWMKKyAgICAgICAgICogICAgICAgIEZpbmlzaGVkCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9DRVJUSUZJQ0FURToKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3BhcnNlX2NlcnRpZmljYXRlKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0xJRU5UX0tFWV9FWENIQU5HRToKKyAgICAgICAgICAgIHJldCA9IHNzbF9wYXJzZV9jbGllbnRfa2V5X2V4Y2hhbmdlKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfVkVSSUZZOgorICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX2NlcnRpZmljYXRlX3ZlcmlmeSggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUM6CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9wYXJzZV9jaGFuZ2VfY2lwaGVyX3NwZWMoIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9DTElFTlRfRklOSVNIRUQ6CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9wYXJzZV9maW5pc2hlZCggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiAgPT0+ICggTmV3U2Vzc2lvblRpY2tldCApCisgICAgICAgICAqICAgICAgICBDaGFuZ2VDaXBoZXJTcGVjCisgICAgICAgICAqICAgICAgICBGaW5pc2hlZAorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDOgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgICAgICAgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5uZXdfc2Vzc2lvbl90aWNrZXQgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3dyaXRlX25ld19zZXNzaW9uX3RpY2tldCggc3NsICk7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9jaGFuZ2VfY2lwaGVyX3NwZWMoIHNzbCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9TRVJWRVJfRklOSVNIRUQ6CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9maW5pc2hlZCggc3NsICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0ZMVVNIX0JVRkZFUlM6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImhhbmRzaGFrZTogZG9uZSIgKSApOworICAgICAgICAgICAgc3NsLT5zdGF0ZSA9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBTkRTSEFLRV9XUkFQVVA6CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfd3JhcHVwKCBzc2wgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImludmFsaWQgc3RhdGUgJWQiLCBzc2wtPnN0YXRlICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3RpY2tldC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3RpY2tldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTExNmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS9zc2xfdGlja2V0LmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgKiAgVExTIHNlcnZlciB0aWNrZXRzIGNhbGxiYWNrcyBpbXBsZW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9USUNLRVRfQykKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICBmcmVlCisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvc3NsX3RpY2tldC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiBJbml0aWFsemUgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfc3NsX3RpY2tldF9pbml0KCBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmY3R4LT5tdXRleCApOworI2VuZGlmCit9CisKKyNkZWZpbmUgTUFYX0tFWV9CWVRFUyAzMiAgICAvKiAyNTYgYml0cyAqLworCisvKgorICogR2VuZXJhdGUvdXBkYXRlIGEga2V5CisgKi8KK3N0YXRpYyBpbnQgc3NsX3RpY2tldF9nZW5fa2V5KCBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUFYX0tFWV9CWVRFU107CisgICAgbWJlZHRsc19zc2xfdGlja2V0X2tleSAqa2V5ID0gY3R4LT5rZXlzICsgaW5kZXg7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIGtleS0+Z2VuZXJhdGlvbl90aW1lID0gKHVpbnQzMl90KSBtYmVkdGxzX3RpbWUoIE5VTEwgKTsKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gY3R4LT5mX3JuZyggY3R4LT5wX3JuZywga2V5LT5uYW1lLCBzaXplb2YoIGtleS0+bmFtZSApICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIGlmKCAoIHJldCA9IGN0eC0+Zl9ybmcoIGN0eC0+cF9ybmcsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAvKiBXaXRoIEdDTSBhbmQgQ0NNLCBzYW1lIGNvbnRleHQgY2FuIGVuY3J5cHQgJiBkZWNyeXB0ICovCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAma2V5LT5jdHgsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2dldF9rZXlfYml0bGVuKCAma2V5LT5jdHggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5DUllQVCApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBidWYsIHNpemVvZiggYnVmICkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBSb3RhdGUvZ2VuZXJhdGUga2V5cyBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIGludCBzc2xfdGlja2V0X3VwZGF0ZV9rZXlzKCBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCAqY3R4ICkKK3sKKyNpZiAhZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRSkKKyAgICAoKHZvaWQpIGN0eCk7CisjZWxzZQorICAgIGlmKCBjdHgtPnRpY2tldF9saWZldGltZSAhPSAwICkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGN1cnJlbnRfdGltZSA9ICh1aW50MzJfdCkgbWJlZHRsc190aW1lKCBOVUxMICk7CisgICAgICAgIHVpbnQzMl90IGtleV90aW1lID0gY3R4LT5rZXlzW2N0eC0+YWN0aXZlXS5nZW5lcmF0aW9uX3RpbWU7CisKKyAgICAgICAgaWYoIGN1cnJlbnRfdGltZSA+IGtleV90aW1lICYmCisgICAgICAgICAgICBjdXJyZW50X3RpbWUgLSBrZXlfdGltZSA8IGN0eC0+dGlja2V0X2xpZmV0aW1lICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICBjdHgtPmFjdGl2ZSA9IDEgLSBjdHgtPmFjdGl2ZTsKKworICAgICAgICByZXR1cm4oIHNzbF90aWNrZXRfZ2VuX2tleSggY3R4LCBjdHgtPmFjdGl2ZSApICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfVElNRSAqLworICAgICAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFNldHVwIGNvbnRleHQgZm9yIGFjdHVhbCB1c2UKKyAqLworaW50IG1iZWR0bHNfc3NsX3RpY2tldF9zZXR1cCggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCwKKyAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nLAorICAgIG1iZWR0bHNfY2lwaGVyX3R5cGVfdCBjaXBoZXIsCisgICAgdWludDMyX3QgbGlmZXRpbWUgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgIGN0eC0+Zl9ybmcgPSBmX3JuZzsKKyAgICBjdHgtPnBfcm5nID0gcF9ybmc7CisKKyAgICBjdHgtPnRpY2tldF9saWZldGltZSA9IGxpZmV0aW1lOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBpZiggY2lwaGVyX2luZm8tPm1vZGUgIT0gTUJFRFRMU19NT0RFX0dDTSAmJgorICAgICAgICBjaXBoZXJfaW5mby0+bW9kZSAhPSBNQkVEVExTX01PREVfQ0NNICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgaWYoIGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuID4gOCAqIE1BWF9LRVlfQllURVMgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgtPmtleXNbMF0uY3R4LCBjaXBoZXJfaW5mbyApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LT5rZXlzWzFdLmN0eCwgY2lwaGVyX2luZm8gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBzc2xfdGlja2V0X2dlbl9rZXkoIGN0eCwgMCApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IHNzbF90aWNrZXRfZ2VuX2tleSggY3R4LCAxICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBTZXJpYWxpemUgYSBzZXNzaW9uIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICogIDAgICAuICAgbi0xICAgICBzZXNzaW9uIHN0cnVjdHVyZSwgbiA9IHNpemVvZihtYmVkdGxzX3NzbF9zZXNzaW9uKQorICogIG4gICAuICAgbisyICAgICBwZWVyX2NlcnQgbGVuZ3RoID0gbSAoMCBpZiBubyBjZXJ0aWZpY2F0ZSkKKyAqICBuKzMgLiAgIG4rMittICAgcGVlciBjZXJ0IEFTTi4xCisgKi8KK3N0YXRpYyBpbnQgc3NsX3NhdmVfc2Vzc2lvbiggY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gYnVmOworICAgIHNpemVfdCBsZWZ0ID0gYnVmX2xlbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBzaXplX3QgY2VydF9sZW47CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICBpZiggbGVmdCA8IHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgbWVtY3B5KCBwLCBzZXNzaW9uLCBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSApOworICAgIHAgKz0gc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICk7CisgICAgbGVmdCAtPSBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBzZXNzaW9uLT5wZWVyX2NlcnQgPT0gTlVMTCApCisgICAgICAgIGNlcnRfbGVuID0gMDsKKyAgICBlbHNlCisgICAgICAgIGNlcnRfbGVuID0gc2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcubGVuOworCisgICAgaWYoIGxlZnQgPCAzICsgY2VydF9sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBjZXJ0X2xlbiA+PiAxNiAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBjZXJ0X2xlbiA+PiAgOCAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBjZXJ0X2xlbiAgICAgICAmIDB4RkYgKTsKKworICAgIGlmKCBzZXNzaW9uLT5wZWVyX2NlcnQgIT0gTlVMTCApCisgICAgICAgIG1lbWNweSggcCwgc2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcucCwgY2VydF9sZW4gKTsKKworICAgIHAgKz0gY2VydF9sZW47CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICAqb2xlbiA9IHAgLSBidWY7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFVuc2VyaWFsaXNlIHNlc3Npb24sIHNlZSBzc2xfc2F2ZV9zZXNzaW9uKCkKKyAqLworc3RhdGljIGludCBzc2xfbG9hZF9zZXNzaW9uKCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0IGVuZCA9IGJ1ZiArIGxlbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBzaXplX3QgY2VydF9sZW47CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICBpZiggcCArIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApID4gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbWNweSggc2Vzc2lvbiwgcCwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICkgKTsKKyAgICBwICs9IHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgaWYoIHAgKyAzID4gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGNlcnRfbGVuID0gKCBwWzBdIDw8IDE2ICkgfCAoIHBbMV0gPDwgOCApIHwgcFsyXTsKKyAgICBwICs9IDM7CisKKyAgICBpZiggY2VydF9sZW4gPT0gMCApCisgICAgeworICAgICAgICBzZXNzaW9uLT5wZWVyX2NlcnQgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgcmV0OworCisgICAgICAgIGlmKCBwICsgY2VydF9sZW4gPiBlbmQgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBzZXNzaW9uLT5wZWVyX2NlcnQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3J0ICkgKTsKKworICAgICAgICBpZiggc2Vzc2lvbi0+cGVlcl9jZXJ0ID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCBzZXNzaW9uLT5wZWVyX2NlcnQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2Rlciggc2Vzc2lvbi0+cGVlcl9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIGNlcnRfbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBzZXNzaW9uLT5wZWVyX2NlcnQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggc2Vzc2lvbi0+cGVlcl9jZXJ0ICk7CisgICAgICAgICAgICBzZXNzaW9uLT5wZWVyX2NlcnQgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHAgKz0gY2VydF9sZW47CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ3JlYXRlIHNlc3Npb24gdGlja2V0LCB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorICoKKyAqICAgIHN0cnVjdCB7CisgKiAgICAgICAgb3BhcXVlIGtleV9uYW1lWzRdOworICogICAgICAgIG9wYXF1ZSBpdlsxMl07CisgKiAgICAgICAgb3BhcXVlIGVuY3J5cHRlZF9zdGF0ZTwwLi4yXjE2LTE+OworICogICAgICAgIG9wYXF1ZSB0YWdbMTZdOworICogICAgfSB0aWNrZXQ7CisgKgorICogVGhlIGtleV9uYW1lLCBpdiwgYW5kIGxlbmd0aCBvZiBlbmNyeXB0ZWRfc3RhdGUgYXJlIHRoZSBhZGRpdGlvbmFsCisgKiBhdXRoZW50aWNhdGVkIGRhdGEuCisgKi8KK2ludCBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGUoIHZvaWQgKnBfdGlja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICp0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnRpY2tldF9saWZldGltZSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCAqY3R4ID0gcF90aWNrZXQ7CisgICAgbWJlZHRsc19zc2xfdGlja2V0X2tleSAqa2V5OworICAgIHVuc2lnbmVkIGNoYXIgKmtleV9uYW1lID0gc3RhcnQ7CisgICAgdW5zaWduZWQgY2hhciAqaXYgPSBzdGFydCArIDQ7CisgICAgdW5zaWduZWQgY2hhciAqc3RhdGVfbGVuX2J5dGVzID0gaXYgKyAxMjsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGF0ZSA9IHN0YXRlX2xlbl9ieXRlcyArIDI7CisgICAgdW5zaWduZWQgY2hhciAqdGFnOworICAgIHNpemVfdCBjbGVhcl9sZW4sIGNpcGhfbGVuOworCisgICAgKnRsZW4gPSAwOworCisgICAgaWYoIGN0eCA9PSBOVUxMIHx8IGN0eC0+Zl9ybmcgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKiBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgZm9yIGtleV9uYW1lLCAxMiBmb3IgSVYsIDIgZm9yIGxlbiAxNiBmb3IgdGFnLAorICAgICAqIGluIGFkZGl0aW9uIHRvIHNlc3Npb24gaXRzZWxmLCB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIHdyaXRpbmcgaXQuICovCisgICAgaWYoIGVuZCAtIHN0YXJ0IDwgNCArIDEyICsgMiArIDE2ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICBpZiggKCByZXQgPSBzc2xfdGlja2V0X3VwZGF0ZV9rZXlzKCBjdHggKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBrZXkgPSAmY3R4LT5rZXlzW2N0eC0+YWN0aXZlXTsKKworICAgICp0aWNrZXRfbGlmZXRpbWUgPSBjdHgtPnRpY2tldF9saWZldGltZTsKKworICAgIG1lbWNweSgga2V5X25hbWUsIGtleS0+bmFtZSwgNCApOworCisgICAgaWYoICggcmV0ID0gY3R4LT5mX3JuZyggY3R4LT5wX3JuZywgaXYsIDEyICkgKSAhPSAwICkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgLyogRHVtcCBzZXNzaW9uIHN0YXRlICovCisgICAgaWYoICggcmV0ID0gc3NsX3NhdmVfc2Vzc2lvbiggc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgZW5kIC0gc3RhdGUsICZjbGVhcl9sZW4gKSApICE9IDAgfHwKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGNsZWFyX2xlbiA+IDY1NTM1ICkKKyAgICB7CisgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICAgIHN0YXRlX2xlbl9ieXRlc1swXSA9ICggY2xlYXJfbGVuID4+IDggKSAmIDB4ZmY7CisgICAgc3RhdGVfbGVuX2J5dGVzWzFdID0gKCBjbGVhcl9sZW4gICAgICApICYgMHhmZjsKKworICAgIC8qIEVuY3J5cHQgYW5kIGF1dGhlbnRpY2F0ZSAqLworICAgIHRhZyA9IHN0YXRlICsgY2xlYXJfbGVuOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2F1dGhfZW5jcnlwdCggJmtleS0+Y3R4LAorICAgICAgICAgICAgICAgICAgICBpdiwgMTIsIGtleV9uYW1lLCA0ICsgMTIgKyAyLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgY2xlYXJfbGVuLCBzdGF0ZSwgJmNpcGhfbGVuLCB0YWcsIDE2ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgaWYoIGNpcGhfbGVuICE9IGNsZWFyX2xlbiApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1I7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICAqdGxlbiA9IDQgKyAxMiArIDIgKyAxNiArIGNpcGhfbGVuOworCitjbGVhbnVwOgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBTZWxlY3Qga2V5IGJhc2VkIG9uIG5hbWUKKyAqLworc3RhdGljIG1iZWR0bHNfc3NsX3RpY2tldF9rZXkgKnNzbF90aWNrZXRfc2VsZWN0X2tleSgKKyAgICAgICAgbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBuYW1lWzRdICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgc2l6ZW9mKCBjdHgtPmtleXMgKSAvIHNpemVvZiggKmN0eC0+a2V5cyApOyBpKysgKQorICAgICAgICBpZiggbWVtY21wKCBuYW1lLCBjdHgtPmtleXNbaV0ubmFtZSwgNCApID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAmY3R4LT5rZXlzW2ldICk7CisKKyAgICByZXR1cm4oIE5VTEwgKTsKK30KKworLyoKKyAqIExvYWQgc2Vzc2lvbiB0aWNrZXQgKHNlZSBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGUgZm9yIHN0cnVjdHVyZSkKKyAqLworaW50IG1iZWR0bHNfc3NsX3RpY2tldF9wYXJzZSggdm9pZCAqcF90aWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX3NzbF90aWNrZXRfY29udGV4dCAqY3R4ID0gcF90aWNrZXQ7CisgICAgbWJlZHRsc19zc2xfdGlja2V0X2tleSAqa2V5OworICAgIHVuc2lnbmVkIGNoYXIgKmtleV9uYW1lID0gYnVmOworICAgIHVuc2lnbmVkIGNoYXIgKml2ID0gYnVmICsgNDsKKyAgICB1bnNpZ25lZCBjaGFyICplbmNfbGVuX3AgPSBpdiArIDEyOworICAgIHVuc2lnbmVkIGNoYXIgKnRpY2tldCA9IGVuY19sZW5fcCArIDI7CisgICAgdW5zaWduZWQgY2hhciAqdGFnOworICAgIHNpemVfdCBlbmNfbGVuLCBjbGVhcl9sZW47CisKKyAgICBpZiggY3R4ID09IE5VTEwgfHwgY3R4LT5mX3JuZyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qIFNlZSBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGUoKSAqLworICAgIGlmKCBsZW4gPCA0ICsgMTIgKyAyICsgMTYgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJmN0eC0+bXV0ZXggKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICBpZiggKCByZXQgPSBzc2xfdGlja2V0X3VwZGF0ZV9rZXlzKCBjdHggKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBlbmNfbGVuID0gKCBlbmNfbGVuX3BbMF0gPDwgOCApIHwgZW5jX2xlbl9wWzFdOworICAgIHRhZyA9IHRpY2tldCArIGVuY19sZW47CisKKyAgICBpZiggbGVuICE9IDQgKyAxMiArIDIgKyBlbmNfbGVuICsgMTYgKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLyogU2VsZWN0IGtleSAqLworICAgIGlmKCAoIGtleSA9IHNzbF90aWNrZXRfc2VsZWN0X2tleSggY3R4LCBrZXlfbmFtZSApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICAvKiBXZSBjYW4ndCBrbm93IGZvciBzdXJlIGJ1dCB0aGlzIGlzIGEgbGlrZWx5IG9wdGlvbiB1bmxlc3Mgd2UncmUKKyAgICAgICAgICogdW5kZXIgYXR0YWNrIC0gdGhpcyBpcyBvbmx5IGluZm9ybWF0aXZlIGFueXdheSAqLworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfU0VTU0lPTl9USUNLRVRfRVhQSVJFRDsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIC8qIERlY3J5cHQgYW5kIGF1dGhlbnRpY2F0ZSAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdCggJmtleS0+Y3R4LCBpdiwgMTIsCisgICAgICAgICAgICAgICAgICAgIGtleV9uYW1lLCA0ICsgMTIgKyAyLCB0aWNrZXQsIGVuY19sZW4sCisgICAgICAgICAgICAgICAgICAgIHRpY2tldCwgJmNsZWFyX2xlbiwgdGFnLCAxNiApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRCApCisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUM7CisKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgICBpZiggY2xlYXJfbGVuICE9IGVuY19sZW4gKQorICAgIHsKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLyogQWN0dWFsbHkgbG9hZCBzZXNzaW9uICovCisgICAgaWYoICggcmV0ID0gc3NsX2xvYWRfc2Vzc2lvbiggc2Vzc2lvbiwgdGlja2V0LCBjbGVhcl9sZW4gKSApICE9IDAgKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgIHsKKyAgICAgICAgLyogQ2hlY2sgZm9yIGV4cGlyYXRpb24gKi8KKyAgICAgICAgbWJlZHRsc190aW1lX3QgY3VycmVudF90aW1lID0gbWJlZHRsc190aW1lKCBOVUxMICk7CisKKyAgICAgICAgaWYoIGN1cnJlbnRfdGltZSA8IHNlc3Npb24tPnN0YXJ0IHx8CisgICAgICAgICAgICAodWludDMyX3QpKCBjdXJyZW50X3RpbWUgLSBzZXNzaW9uLT5zdGFydCApID4gY3R4LT50aWNrZXRfbGlmZXRpbWUgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfU0VTU0lPTl9USUNLRVRfRVhQSVJFRDsKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCitjbGVhbnVwOgorI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZjdHgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBGcmVlIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF90aWNrZXRfZnJlZSggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKmN0eCApCit7CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eC0+a2V5c1swXS5jdHggKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4LT5rZXlzWzFdLmN0eCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19DKQorICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmN0eC0+bXV0ZXggKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZiggbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgKSApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19TU0xfVElDS0VUX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90bHMuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3NzbF90bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGEwNGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvc3NsX3Rscy5jCkBAIC0wLDAgKzEsNzY3OSBAQAorLyoKKyAqICBTU0x2My9UTFN2MSBzaGFyZWQgZnVuY3Rpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBTU0wgMy4wIHNwZWNpZmljYXRpb24gd2FzIGRyYWZ0ZWQgYnkgTmV0c2NhcGUgaW4gMTk5NiwKKyAqICBhbmQgYmVjYW1lIGFuIElFVEYgc3RhbmRhcmQgaW4gMTk5OS4KKyAqCisgKiAgaHR0cDovL3dwLm5ldHNjYXBlLmNvbS9lbmcvc3NsMy8KKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjQ2LnR4dAorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQzNDYudHh0CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgZnJlZQorI2VuZGlmCisKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qIExlbmd0aCBvZiB0aGUgImVwb2NoIiBmaWVsZCBpbiB0aGUgcmVjb3JkIGhlYWRlciAqLworc3RhdGljIGlubGluZSBzaXplX3Qgc3NsX2VwX2xlbiggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgIHJldHVybiggMiApOworI2Vsc2UKKyAgICAoKHZvaWQpIHNzbCk7CisjZW5kaWYKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFN0YXJ0IGEgdGltZXIuCisgKiBQYXNzaW5nIG1pbGxpc2VjcyA9IDAgY2FuY2VscyBhIHJ1bm5pbmcgdGltZXIuCisgKi8KK3N0YXRpYyB2b2lkIHNzbF9zZXRfdGltZXIoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdWludDMyX3QgbWlsbGlzZWNzICkKK3sKKyAgICBpZiggc3NsLT5mX3NldF90aW1lciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZXRfdGltZXIgdG8gJWQgbXMiLCAoaW50KSBtaWxsaXNlY3MgKSApOworICAgIHNzbC0+Zl9zZXRfdGltZXIoIHNzbC0+cF90aW1lciwgbWlsbGlzZWNzIC8gNCwgbWlsbGlzZWNzICk7Cit9CisKKy8qCisgKiBSZXR1cm4gLTEgaXMgdGltZXIgaXMgZXhwaXJlZCwgMCBpZiBpdCBpc24ndC4KKyAqLworc3RhdGljIGludCBzc2xfY2hlY2tfdGltZXIoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbC0+Zl9nZXRfdGltZXIgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoIHNzbC0+Zl9nZXRfdGltZXIoIHNzbC0+cF90aW1lciApID09IDIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ0aW1lciBleHBpcmVkIiApICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKy8qCisgKiBEb3VibGUgdGhlIHJldHJhbnNtaXQgdGltZW91dCB2YWx1ZSwgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlLAorICogcmV0dXJuaW5nIC0xIGlmIHRoZSBtYXhpbXVtIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZC4KKyAqLworc3RhdGljIGludCBzc2xfZG91YmxlX3JldHJhbnNtaXRfdGltZW91dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICB1aW50MzJfdCBuZXdfdGltZW91dDsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0ID49IHNzbC0+Y29uZi0+aHNfdGltZW91dF9tYXggKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBuZXdfdGltZW91dCA9IDIgKiBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0OworCisgICAgLyogQXZvaWQgYXJpdGhtZXRpYyBvdmVyZmxvdyBhbmQgcmFuZ2Ugb3ZlcmZsb3cgKi8KKyAgICBpZiggbmV3X3RpbWVvdXQgPCBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0IHx8CisgICAgICAgIG5ld190aW1lb3V0ID4gc3NsLT5jb25mLT5oc190aW1lb3V0X21heCApCisgICAgeworICAgICAgICBuZXdfdGltZW91dCA9IHNzbC0+Y29uZi0+aHNfdGltZW91dF9tYXg7CisgICAgfQorCisgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dCA9IG5ld190aW1lb3V0OworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidXBkYXRlIHRpbWVvdXQgdmFsdWUgdG8gJWQgbWlsbGlzZWNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3RpbWVvdXQgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIHNzbF9yZXNldF9yZXRyYW5zbWl0X3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dCA9IHNzbC0+Y29uZi0+aHNfdGltZW91dF9taW47CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ1cGRhdGUgdGltZW91dCB2YWx1ZSB0byAlZCBtaWxsaXNlY3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfdGltZW91dCApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIKQorLyoKKyAqIENvbnZlcnQgbWF4X2ZyYWdtZW50X2xlbmd0aCBjb2RlcyB0byBsZW5ndGguCisgKiBSRkMgNjA2NiBzYXlzOgorICogICAgZW51bXsKKyAqICAgICAgICAyXjkoMSksIDJeMTAoMiksIDJeMTEoMyksIDJeMTIoNCksICgyNTUpCisgKiAgICB9IE1heEZyYWdtZW50TGVuZ3RoOworICogYW5kIHdlIGFkZCAwIC0+IGV4dGVuc2lvbiB1bnVzZWQKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtZmxfY29kZV90b19sZW5ndGhbTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX0lOVkFMSURdID0KK3sKKyAgICBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4sICAgIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FICovCisgICAgNTEyLCAgICAgICAgICAgICAgICAgICAgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzUxMiAgKi8KKyAgICAxMDI0LCAgICAgICAgICAgICAgICAgICAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNCAqLworICAgIDIwNDgsICAgICAgICAgICAgICAgICAgIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8yMDQ4ICovCisgICAgNDA5NiwgICAgICAgICAgICAgICAgICAgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzQwOTYgKi8KK307CisjZW5kaWYgLyogTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKK3N0YXRpYyBpbnQgc3NsX3Nlc3Npb25fY29weSggbWJlZHRsc19zc2xfc2Vzc2lvbiAqZHN0LCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICpzcmMgKQoreworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggZHN0ICk7CisgICAgbWVtY3B5KCBkc3QsIHNyYywgc2l6ZW9mKCBtYmVkdGxzX3NzbF9zZXNzaW9uICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBzcmMtPnBlZXJfY2VydCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgZHN0LT5wZWVyX2NlcnQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKG1iZWR0bHNfeDUwOV9jcnQpICk7CisgICAgICAgIGlmKCBkc3QtPnBlZXJfY2VydCA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggZHN0LT5wZWVyX2NlcnQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlciggZHN0LT5wZWVyX2NlcnQsIHNyYy0+cGVlcl9jZXJ0LT5yYXcucCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPnBlZXJfY2VydC0+cmF3LmxlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggZHN0LT5wZWVyX2NlcnQgKTsKKyAgICAgICAgICAgIGRzdC0+cGVlcl9jZXJ0ID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICBpZiggc3JjLT50aWNrZXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBkc3QtPnRpY2tldCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzcmMtPnRpY2tldF9sZW4gKTsKKyAgICAgICAgaWYoIGRzdC0+dGlja2V0ID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisKKyAgICAgICAgbWVtY3B5KCBkc3QtPnRpY2tldCwgc3JjLT50aWNrZXQsIHNyYy0+dGlja2V0X2xlbiApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgJiYgTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKK2ludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF9pbml0KSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X2VuYywgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X2RlYywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdl9lbmMsICBjb25zdCB1bnNpZ25lZCBjaGFyICppdl9kZWMsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfZW5jLCBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfZGVjLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1hY2xlbiApID0gTlVMTDsKK2ludCAoKm1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IGRpcmVjdGlvbikgPSBOVUxMOworaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0KSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkgPSBOVUxMOworaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX3dyaXRlKSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkgPSBOVUxMOworaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX3JlYWQpKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKSA9IE5VTEw7CitpbnQgKCptYmVkdGxzX3NzbF9od19yZWNvcmRfZmluaXNoKSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkgPSBOVUxMOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCAqLworCisvKgorICogS2V5IG1hdGVyaWFsIGdlbmVyYXRpb24KKyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKK3N0YXRpYyBpbnQgc3NsM19wcmYoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldCwgc2l6ZV90IHNsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhbmRvbSwgc2l6ZV90IHJsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3RidWYsIHNpemVfdCBkbGVuICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX21kNV9jb250ZXh0IG1kNTsKKyAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBzaGExOworICAgIHVuc2lnbmVkIGNoYXIgcGFkZGluZ1sxNl07CisgICAgdW5zaWduZWQgY2hhciBzaGExc3VtWzIwXTsKKyAgICAoKHZvaWQpbGFiZWwpOworCisgICAgbWJlZHRsc19tZDVfaW5pdCggICZtZDUgICk7CisgICAgbWJlZHRsc19zaGExX2luaXQoICZzaGExICk7CisKKyAgICAvKgorICAgICAqICBTU0x2MzoKKyAgICAgKiAgICBibG9jayA9CisgICAgICogICAgICBNRDUoIHNlY3JldCArIFNIQTEoICdBJyAgICArIHNlY3JldCArIHJhbmRvbSApICkgKworICAgICAqICAgICAgTUQ1KCBzZWNyZXQgKyBTSEExKCAnQkInICAgKyBzZWNyZXQgKyByYW5kb20gKSApICsKKyAgICAgKiAgICAgIE1ENSggc2VjcmV0ICsgU0hBMSggJ0NDQycgICsgc2VjcmV0ICsgcmFuZG9tICkgKSArCisgICAgICogICAgICAuLi4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgZGxlbiAvIDE2OyBpKysgKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCBwYWRkaW5nLCAodW5zaWduZWQgY2hhcikgKCdBJyArIGkpLCAxICsgaSApOworCisgICAgICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZzaGExICk7CisgICAgICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBwYWRkaW5nLCAxICsgaSApOworICAgICAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgc2VjcmV0LCBzbGVuICk7CisgICAgICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCByYW5kb20sIHJsZW4gKTsKKyAgICAgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIHNoYTFzdW0gKTsKKworICAgICAgICBtYmVkdGxzX21kNV9zdGFydHMoICZtZDUgKTsKKyAgICAgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBzZWNyZXQsIHNsZW4gKTsKKyAgICAgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBzaGExc3VtLCAyMCApOworICAgICAgICBtYmVkdGxzX21kNV9maW5pc2goICZtZDUsIGRzdGJ1ZiArIGkgKiAxNiApOworICAgIH0KKworICAgIG1iZWR0bHNfbWQ1X2ZyZWUoICAmbWQ1ICApOworICAgIG1iZWR0bHNfc2hhMV9mcmVlKCAmc2hhMSApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBwYWRkaW5nLCBzaXplb2YoIHBhZGRpbmcgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggc2hhMXN1bSwgc2l6ZW9mKCBzaGExc3VtICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCitzdGF0aWMgaW50IHRsczFfcHJmKCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYW5kb20sIHNpemVfdCBybGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBzaXplX3QgZGxlbiApCit7CisgICAgc2l6ZV90IG5iLCBoczsKKyAgICBzaXplX3QgaSwgaiwgazsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpTMSwgKlMyOworICAgIHVuc2lnbmVkIGNoYXIgdG1wWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBoX2lbMjBdOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKyAgICBpbnQgcmV0OworCisgICAgbWJlZHRsc19tZF9pbml0KCAmbWRfY3R4ICk7CisKKyAgICBpZiggc2l6ZW9mKCB0bXAgKSA8IDIwICsgc3RybGVuKCBsYWJlbCApICsgcmxlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBocyA9ICggc2xlbiArIDEgKSAvIDI7CisgICAgUzEgPSBzZWNyZXQ7CisgICAgUzIgPSBzZWNyZXQgKyBzbGVuIC0gaHM7CisKKyAgICBuYiA9IHN0cmxlbiggbGFiZWwgKTsKKyAgICBtZW1jcHkoIHRtcCArIDIwLCBsYWJlbCwgbmIgKTsKKyAgICBtZW1jcHkoIHRtcCArIDIwICsgbmIsIHJhbmRvbSwgcmxlbiApOworICAgIG5iICs9IHJsZW47CisKKyAgICAvKgorICAgICAqIEZpcnN0IGNvbXB1dGUgUF9tZDUoc2VjcmV0LGxhYmVsK3JhbmRvbSlbMC4uZGxlbl0KKyAgICAgKi8KKyAgICBpZiggKCBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9NRDUgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmbWRfY3R4LCBTMSwgaHMgKTsKKyAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCB0bXAgKyAyMCwgbmIgKTsKKyAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCA0ICsgdG1wICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgZGxlbjsgaSArPSAxNiApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQgKCAmbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIDQgKyB0bXAsIDE2ICsgbmIgKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJm1kX2N0eCwgaF9pICk7CisKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3Jlc2V0ICggJm1kX2N0eCApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCA0ICsgdG1wLCAxNiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCA0ICsgdG1wICk7CisKKyAgICAgICAgayA9ICggaSArIDE2ID4gZGxlbiApID8gZGxlbiAlIDE2IDogMTY7CisKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IGs7IGorKyApCisgICAgICAgICAgICBkc3RidWZbaSArIGpdICA9IGhfaVtqXTsKKyAgICB9CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIC8qCisgICAgICogWE9SIG91dCB3aXRoIFBfc2hhMShzZWNyZXQsbGFiZWwrcmFuZG9tKVswLi5kbGVuXQorICAgICAqLworICAgIGlmKCAoIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTEgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJm1kX2N0eCwgbWRfaW5mbywgMSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmbWRfY3R4LCBTMiwgaHMgKTsKKyAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCB0bXAgKyAyMCwgbmIgKTsKKyAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCB0bXAgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBkbGVuOyBpICs9IDIwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCAoICZtZF9jdHggKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgdG1wLCAyMCArIG5iICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZtZF9jdHgsIGhfaSApOworCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCAoICZtZF9jdHggKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgdG1wLCAyMCApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCB0bXAgKTsKKworICAgICAgICBrID0gKCBpICsgMjAgPiBkbGVuICkgPyBkbGVuICUgMjAgOiAyMDsKKworICAgICAgICBmb3IoIGogPSAwOyBqIDwgazsgaisrICkKKyAgICAgICAgICAgIGRzdGJ1ZltpICsgal0gPSAodW5zaWduZWQgY2hhcikoIGRzdGJ1ZltpICsgal0gXiBoX2lbal0gKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZtZF9jdHggKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggdG1wLCBzaXplb2YoIHRtcCApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCBoX2ksIHNpemVvZiggaF9pICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCitzdGF0aWMgaW50IHRsc19wcmZfZ2VuZXJpYyggbWJlZHRsc19tZF90eXBlX3QgbWRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhbmRvbSwgc2l6ZV90IHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBzaXplX3QgZGxlbiApCit7CisgICAgc2l6ZV90IG5iOworICAgIHNpemVfdCBpLCBqLCBrLCBtZF9sZW47CisgICAgdW5zaWduZWQgY2hhciB0bXBbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGhfaVtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBtZF9jdHg7CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworCisgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX3R5cGUgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworCisgICAgbWRfbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworCisgICAgaWYoIHNpemVvZiggdG1wICkgPCBtZF9sZW4gKyBzdHJsZW4oIGxhYmVsICkgKyBybGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG5iID0gc3RybGVuKCBsYWJlbCApOworICAgIG1lbWNweSggdG1wICsgbWRfbGVuLCBsYWJlbCwgbmIgKTsKKyAgICBtZW1jcHkoIHRtcCArIG1kX2xlbiArIG5iLCByYW5kb20sIHJsZW4gKTsKKyAgICBuYiArPSBybGVuOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIFBfPGhhc2g+KHNlY3JldCwgbGFiZWwgKyByYW5kb20pWzAuLmRsZW5dCisgICAgICovCisgICAgaWYgKCAoIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDEgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJm1kX2N0eCwgc2VjcmV0LCBzbGVuICk7CisgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgdG1wICsgbWRfbGVuLCBuYiApOworICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZtZF9jdHgsIHRtcCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IGRsZW47IGkgKz0gbWRfbGVuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCAoICZtZF9jdHggKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJm1kX2N0eCwgdG1wLCBtZF9sZW4gKyBuYiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCBoX2kgKTsKKworICAgICAgICBtYmVkdGxzX21kX2htYWNfcmVzZXQgKCAmbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIHRtcCwgbWRfbGVuICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZtZF9jdHgsIHRtcCApOworCisgICAgICAgIGsgPSAoIGkgKyBtZF9sZW4gPiBkbGVuICkgPyBkbGVuICUgbWRfbGVuIDogbWRfbGVuOworCisgICAgICAgIGZvciggaiA9IDA7IGogPCBrOyBqKysgKQorICAgICAgICAgICAgZHN0YnVmW2kgKyBqXSAgPSBoX2lbal07CisgICAgfQorCisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIHRtcCwgc2l6ZW9mKCB0bXAgKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggaF9pLCBzaXplb2YoIGhfaSApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK3N0YXRpYyBpbnQgdGxzX3ByZl9zaGEyNTYoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldCwgc2l6ZV90IHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhbmRvbSwgc2l6ZV90IHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3RidWYsIHNpemVfdCBkbGVuICkKK3sKKyAgICByZXR1cm4oIHRsc19wcmZfZ2VuZXJpYyggTUJFRFRMU19NRF9TSEEyNTYsIHNlY3JldCwgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIHJhbmRvbSwgcmxlbiwgZHN0YnVmLCBkbGVuICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCitzdGF0aWMgaW50IHRsc19wcmZfc2hhMzg0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYW5kb20sIHNpemVfdCBybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBzaXplX3QgZGxlbiApCit7CisgICAgcmV0dXJuKCB0bHNfcHJmX2dlbmVyaWMoIE1CRURUTFNfTURfU0hBMzg0LCBzZWNyZXQsIHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLCByYW5kb20sIHJsZW4sIGRzdGJ1ZiwgZGxlbiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCitzdGF0aWMgdm9pZCBzc2xfdXBkYXRlX2NoZWNrc3VtX3N0YXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9tZDVzaGExKCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX3ZlcmlmeV9zc2woIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqICk7CitzdGF0aWMgdm9pZCBzc2xfY2FsY19maW5pc2hlZF9zc2woIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX3ZlcmlmeV90bHMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqICk7CitzdGF0aWMgdm9pZCBzc2xfY2FsY19maW5pc2hlZF90bHMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9zaGEyNTYoIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QgKTsKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX3ZlcmlmeV90bHNfc2hhMjU2KCBtYmVkdGxzX3NzbF9jb250ZXh0ICosdW5zaWduZWQgY2hhciAqICk7CitzdGF0aWMgdm9pZCBzc2xfY2FsY19maW5pc2hlZF90bHNfc2hhMjU2KCBtYmVkdGxzX3NzbF9jb250ZXh0ICosdW5zaWduZWQgY2hhciAqLCBpbnQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9zaGEzODQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QgKTsKK3N0YXRpYyB2b2lkIHNzbF9jYWxjX3ZlcmlmeV90bHNfc2hhMzg0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICosIHVuc2lnbmVkIGNoYXIgKiApOworc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfdGxzX3NoYTM4NCggbWJlZHRsc19zc2xfY29udGV4dCAqLCB1bnNpZ25lZCBjaGFyICosIGludCApOworI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKK2ludCBtYmVkdGxzX3NzbF9kZXJpdmVfa2V5cyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFs2NF07CisgICAgdW5zaWduZWQgY2hhciBrZXlibGtbMjU2XTsKKyAgICB1bnNpZ25lZCBjaGFyICprZXkxOworICAgIHVuc2lnbmVkIGNoYXIgKmtleTI7CisgICAgdW5zaWduZWQgY2hhciAqbWFjX2VuYzsKKyAgICB1bnNpZ25lZCBjaGFyICptYWNfZGVjOworICAgIHNpemVfdCBpdl9jb3B5X2xlbjsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGU7CisgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtICp0cmFuc2Zvcm0gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGU7CisgICAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcyAqaGFuZHNoYWtlID0gc3NsLT5oYW5kc2hha2U7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGRlcml2ZSBrZXlzIiApICk7CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCB0cmFuc2Zvcm0tPmNpcGhlcnN1aXRlX2luZm8tPmNpcGhlciApOworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2lwaGVyIGluZm8gZm9yICVkIG5vdCBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5jaXBoZXJzdWl0ZV9pbmZvLT5jaXBoZXIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCB0cmFuc2Zvcm0tPmNpcGhlcnN1aXRlX2luZm8tPm1hYyApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtYmVkdGxzX21kIGluZm8gZm9yICVkIG5vdCBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5jaXBoZXJzdWl0ZV9pbmZvLT5tYWMgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIC8qCisgICAgICogU2V0IGFwcHJvcHJpYXRlIFBSRiBmdW5jdGlvbiBhbmQgb3RoZXIgU1NMIC8gVExTIC8gVExTMS4yIGZ1bmN0aW9ucworICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICB7CisgICAgICAgIGhhbmRzaGFrZS0+dGxzX3ByZiA9IHNzbDNfcHJmOworICAgICAgICBoYW5kc2hha2UtPmNhbGNfdmVyaWZ5ID0gc3NsX2NhbGNfdmVyaWZ5X3NzbDsKKyAgICAgICAgaGFuZHNoYWtlLT5jYWxjX2ZpbmlzaGVkID0gc3NsX2NhbGNfZmluaXNoZWRfc3NsOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA8IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICBoYW5kc2hha2UtPnRsc19wcmYgPSB0bHMxX3ByZjsKKyAgICAgICAgaGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSA9IHNzbF9jYWxjX3ZlcmlmeV90bHM7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY19maW5pc2hlZCA9IHNzbF9jYWxjX2ZpbmlzaGVkX3RsczsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgJiYKKyAgICAgICAgdHJhbnNmb3JtLT5jaXBoZXJzdWl0ZV9pbmZvLT5tYWMgPT0gTUJFRFRMU19NRF9TSEEzODQgKQorICAgIHsKKyAgICAgICAgaGFuZHNoYWtlLT50bHNfcHJmID0gdGxzX3ByZl9zaGEzODQ7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY192ZXJpZnkgPSBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTM4NDsKKyAgICAgICAgaGFuZHNoYWtlLT5jYWxjX2ZpbmlzaGVkID0gc3NsX2NhbGNfZmluaXNoZWRfdGxzX3NoYTM4NDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgIHsKKyAgICAgICAgaGFuZHNoYWtlLT50bHNfcHJmID0gdGxzX3ByZl9zaGEyNTY7CisgICAgICAgIGhhbmRzaGFrZS0+Y2FsY192ZXJpZnkgPSBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTI1NjsKKyAgICAgICAgaGFuZHNoYWtlLT5jYWxjX2ZpbmlzaGVkID0gc3NsX2NhbGNfZmluaXNoZWRfdGxzX3NoYTI1NjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNTTHYzOgorICAgICAqICAgbWFzdGVyID0KKyAgICAgKiAgICAgTUQ1KCBwcmVtYXN0ZXIgKyBTSEExKCAnQScgICArIHByZW1hc3RlciArIHJhbmRieXRlcyApICkgKworICAgICAqICAgICBNRDUoIHByZW1hc3RlciArIFNIQTEoICdCQicgICsgcHJlbWFzdGVyICsgcmFuZGJ5dGVzICkgKSArCisgICAgICogICAgIE1ENSggcHJlbWFzdGVyICsgU0hBMSggJ0NDQycgKyBwcmVtYXN0ZXIgKyByYW5kYnl0ZXMgKSApCisgICAgICoKKyAgICAgKiBUTFN2MSs6CisgICAgICogICBtYXN0ZXIgPSBQUkYoIHByZW1hc3RlciwgIm1hc3RlciBzZWNyZXQiLCByYW5kYnl0ZXMgKVswLi40N10KKyAgICAgKi8KKyAgICBpZiggaGFuZHNoYWtlLT5yZXN1bWUgPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJwcmVtYXN0ZXIgc2VjcmV0IiwgaGFuZHNoYWtlLT5wcmVtYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS0+cG1zbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+ZXh0ZW5kZWRfbXMgPT0gTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRU5BQkxFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc2Vzc2lvbl9oYXNoWzQ4XTsKKyAgICAgICAgICAgIHNpemVfdCBoYXNoX2xlbjsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IiApICk7CisKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSggc3NsLCBzZXNzaW9uX2hhc2ggKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgICAgICAgICAgICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm8tPm1hYyA9PQorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTM4NCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYXNoX2xlbiA9IDQ4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgaGFzaF9sZW4gPSAzMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICAgICAgICAgICAgICBoYXNoX2xlbiA9IDM2OworCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJzZXNzaW9uIGhhc2giLCBzZXNzaW9uX2hhc2gsIGhhc2hfbGVuICk7CisKKyAgICAgICAgICAgIHJldCA9IGhhbmRzaGFrZS0+dGxzX3ByZiggaGFuZHNoYWtlLT5wcmVtYXN0ZXIsIGhhbmRzaGFrZS0+cG1zbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25faGFzaCwgaGFzaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPm1hc3RlciwgNDggKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAicHJmIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICByZXQgPSBoYW5kc2hha2UtPnRsc19wcmYoIGhhbmRzaGFrZS0+cHJlbWFzdGVyLCBoYW5kc2hha2UtPnBtc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFzdGVyIHNlY3JldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPm1hc3RlciwgNDggKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAicHJmIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBoYW5kc2hha2UtPnByZW1hc3Rlciwgc2l6ZW9mKGhhbmRzaGFrZS0+cHJlbWFzdGVyKSApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAibm8gcHJlbWFzdGVyIChzZXNzaW9uIHJlc3VtZWQpIiApICk7CisKKyAgICAvKgorICAgICAqIFN3YXAgdGhlIGNsaWVudCBhbmQgc2VydmVyIHJhbmRvbSB2YWx1ZXMuCisgICAgICovCisgICAgbWVtY3B5KCB0bXAsIGhhbmRzaGFrZS0+cmFuZGJ5dGVzLCA2NCApOworICAgIG1lbWNweSggaGFuZHNoYWtlLT5yYW5kYnl0ZXMsIHRtcCArIDMyLCAzMiApOworICAgIG1lbWNweSggaGFuZHNoYWtlLT5yYW5kYnl0ZXMgKyAzMiwgdG1wLCAzMiApOworICAgIG1iZWR0bHNfemVyb2l6ZSggdG1wLCBzaXplb2YoIHRtcCApICk7CisKKyAgICAvKgorICAgICAqICBTU0x2MzoKKyAgICAgKiAgICBrZXkgYmxvY2sgPQorICAgICAqICAgICAgTUQ1KCBtYXN0ZXIgKyBTSEExKCAnQScgICAgKyBtYXN0ZXIgKyByYW5kYnl0ZXMgKSApICsKKyAgICAgKiAgICAgIE1ENSggbWFzdGVyICsgU0hBMSggJ0JCJyAgICsgbWFzdGVyICsgcmFuZGJ5dGVzICkgKSArCisgICAgICogICAgICBNRDUoIG1hc3RlciArIFNIQTEoICdDQ0MnICArIG1hc3RlciArIHJhbmRieXRlcyApICkgKworICAgICAqICAgICAgTUQ1KCBtYXN0ZXIgKyBTSEExKCAnRERERCcgKyBtYXN0ZXIgKyByYW5kYnl0ZXMgKSApICsKKyAgICAgKiAgICAgIC4uLgorICAgICAqCisgICAgICogIFRMU3YxOgorICAgICAqICAgIGtleSBibG9jayA9IFBSRiggbWFzdGVyLCAia2V5IGV4cGFuc2lvbiIsIHJhbmRieXRlcyApCisgICAgICovCisgICAgcmV0ID0gaGFuZHNoYWtlLT50bHNfcHJmKCBzZXNzaW9uLT5tYXN0ZXIsIDQ4LCAia2V5IGV4cGFuc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UtPnJhbmRieXRlcywgNjQsIGtleWJsaywgMjU2ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInByZiIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2lwaGVyc3VpdGUgPSAlcyIsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoIHNlc3Npb24tPmNpcGhlcnN1aXRlICkgKSApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgIm1hc3RlciBzZWNyZXQiLCBzZXNzaW9uLT5tYXN0ZXIsIDQ4ICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmFuZG9tIGJ5dGVzIiwgaGFuZHNoYWtlLT5yYW5kYnl0ZXMsIDY0ICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAia2V5IGJsb2NrIiwga2V5YmxrLCAyNTYgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggaGFuZHNoYWtlLT5yYW5kYnl0ZXMsIHNpemVvZiggaGFuZHNoYWtlLT5yYW5kYnl0ZXMgKSApOworCisgICAgLyoKKyAgICAgKiBEZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGtleSwgSVYgYW5kIE1BQyBsZW5ndGguCisgICAgICovCisKKyAgICB0cmFuc2Zvcm0tPmtleWxlbiA9IGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuIC8gODsKKworICAgIGlmKCBjaXBoZXJfaW5mby0+bW9kZSA9PSBNQkVEVExTX01PREVfR0NNIHx8CisgICAgICAgIGNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9DQ00gKQorICAgIHsKKyAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gPSAwOworCisgICAgICAgIHRyYW5zZm9ybS0+aXZsZW4gPSAxMjsKKyAgICAgICAgdHJhbnNmb3JtLT5maXhlZF9pdmxlbiA9IDQ7CisKKyAgICAgICAgLyogTWluaW11bSBsZW5ndGggaXMgZXhwaWNpdCBJViArIHRhZyAqLworICAgICAgICB0cmFuc2Zvcm0tPm1pbmxlbiA9IHRyYW5zZm9ybS0+aXZsZW4gLSB0cmFuc2Zvcm0tPmZpeGVkX2l2bGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoIHRyYW5zZm9ybS0+Y2lwaGVyc3VpdGVfaW5mby0+ZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyA/IDggOiAxNiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBJbml0aWFsaXplIEhNQUMgY29udGV4dHMgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9zZXR1cCggJnRyYW5zZm9ybS0+bWRfY3R4X2VuYywgbWRfaW5mbywgMSApICkgIT0gMCB8fAorICAgICAgICAgICAgKCByZXQgPSBtYmVkdGxzX21kX3NldHVwKCAmdHJhbnNmb3JtLT5tZF9jdHhfZGVjLCBtZF9pbmZvLCAxICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19tZF9zZXR1cCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCBNQUMgbGVuZ3RoICovCisgICAgICAgIHRyYW5zZm9ybS0+bWFjbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgSE1BQyBpcyB0byBiZSB0cnVuY2F0ZWQsIHdlIHNoYWxsIGtlZXAgdGhlIGxlZnRtb3N0IGJ5dGVzLAorICAgICAgICAgKiAocmZjIDYwNjYgcGFnZSAxMyBvciByZmMgMjEwNCBzZWN0aW9uIDQpLAorICAgICAgICAgKiBzbyB3ZSBvbmx5IG5lZWQgdG8gYWRqdXN0IHRoZSBsZW5ndGggaGVyZS4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBzZXNzaW9uLT50cnVuY19obWFjID09IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRU5BQkxFRCApCisgICAgICAgICAgICB0cmFuc2Zvcm0tPm1hY2xlbiA9IE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDX0xFTjsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyAqLworCisgICAgICAgIC8qIElWIGxlbmd0aCAqLworICAgICAgICB0cmFuc2Zvcm0tPml2bGVuID0gY2lwaGVyX2luZm8tPml2X3NpemU7CisKKyAgICAgICAgLyogTWluaW11bSBsZW5ndGggKi8KKyAgICAgICAgaWYoIGNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9TVFJFQU0gKQorICAgICAgICAgICAgdHJhbnNmb3JtLT5taW5sZW4gPSB0cmFuc2Zvcm0tPm1hY2xlbjsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogR2VuZXJpY0Jsb2NrQ2lwaGVyOgorICAgICAgICAgICAgICogMS4gaWYgRXRNIGlzIGluIHVzZTogb25lIGJsb2NrIHBsdXMgTUFDCisgICAgICAgICAgICAgKiAgICBvdGhlcndpc2U6ICogZmlyc3QgbXVsdGlwbGUgb2YgYmxvY2tsZW4gZ3JlYXRlciB0aGFuIG1hY2xlbgorICAgICAgICAgICAgICogMi4gSVYgZXhjZXB0IGZvciBTU0wzIGFuZCBUTFMgMS4wCisgICAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgICAgICAgICBpZiggc2Vzc2lvbi0+ZW5jcnlwdF90aGVuX21hYyA9PSBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5taW5sZW4gPSB0cmFuc2Zvcm0tPm1hY2xlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY2lwaGVyX2luZm8tPmJsb2NrX3NpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPm1pbmxlbiA9IHRyYW5zZm9ybS0+bWFjbGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaXBoZXJfaW5mby0+YmxvY2tfc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdHJhbnNmb3JtLT5tYWNsZW4gJSBjaXBoZXJfaW5mby0+YmxvY2tfc2l6ZTsKKyAgICAgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKQorICAgICAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCB8fAorICAgICAgICAgICAgICAgIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSApCisgICAgICAgICAgICAgICAgOyAvKiBObyBuZWVkIHRvIGFkanVzdCBtaW5sZW4gKi8KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgfHwKKyAgICAgICAgICAgICAgICBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+bWlubGVuICs9IHRyYW5zZm9ybS0+aXZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJrZXlsZW46ICVkLCBtaW5sZW46ICVkLCBpdmxlbjogJWQsIG1hY2xlbjogJWQiLAorICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+a2V5bGVuLCB0cmFuc2Zvcm0tPm1pbmxlbiwgdHJhbnNmb3JtLT5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPm1hY2xlbiApICk7CisKKyAgICAvKgorICAgICAqIEZpbmFsbHkgc2V0dXAgdGhlIGNpcGhlciBjb250ZXh0cywgSVZzIGFuZCBNQUMgc2VjcmV0cy4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgeworICAgICAgICBrZXkxID0ga2V5YmxrICsgdHJhbnNmb3JtLT5tYWNsZW4gKiAyOworICAgICAgICBrZXkyID0ga2V5YmxrICsgdHJhbnNmb3JtLT5tYWNsZW4gKiAyICsgdHJhbnNmb3JtLT5rZXlsZW47CisKKyAgICAgICAgbWFjX2VuYyA9IGtleWJsazsKKyAgICAgICAgbWFjX2RlYyA9IGtleWJsayArIHRyYW5zZm9ybS0+bWFjbGVuOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgbm90IHVzZWQgaW4gVExTIHYxLjEuCisgICAgICAgICAqLworICAgICAgICBpdl9jb3B5X2xlbiA9ICggdHJhbnNmb3JtLT5maXhlZF9pdmxlbiApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPmZpeGVkX2l2bGVuIDogdHJhbnNmb3JtLT5pdmxlbjsKKyAgICAgICAgbWVtY3B5KCB0cmFuc2Zvcm0tPml2X2VuYywga2V5MiArIHRyYW5zZm9ybS0+a2V5bGVuLCAgaXZfY29weV9sZW4gKTsKKyAgICAgICAgbWVtY3B5KCB0cmFuc2Zvcm0tPml2X2RlYywga2V5MiArIHRyYW5zZm9ybS0+a2V5bGVuICsgaXZfY29weV9sZW4sCisgICAgICAgICAgICAgICAgaXZfY29weV9sZW4gKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgIHsKKyAgICAgICAga2V5MSA9IGtleWJsayArIHRyYW5zZm9ybS0+bWFjbGVuICogMiArIHRyYW5zZm9ybS0+a2V5bGVuOworICAgICAgICBrZXkyID0ga2V5YmxrICsgdHJhbnNmb3JtLT5tYWNsZW4gKiAyOworCisgICAgICAgIG1hY19lbmMgPSBrZXlibGsgKyB0cmFuc2Zvcm0tPm1hY2xlbjsKKyAgICAgICAgbWFjX2RlYyA9IGtleWJsazsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIG5vdCB1c2VkIGluIFRMUyB2MS4xLgorICAgICAgICAgKi8KKyAgICAgICAgaXZfY29weV9sZW4gPSAoIHRyYW5zZm9ybS0+Zml4ZWRfaXZsZW4gKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5maXhlZF9pdmxlbiA6IHRyYW5zZm9ybS0+aXZsZW47CisgICAgICAgIG1lbWNweSggdHJhbnNmb3JtLT5pdl9kZWMsIGtleTEgKyB0cmFuc2Zvcm0tPmtleWxlbiwgIGl2X2NvcHlfbGVuICk7CisgICAgICAgIG1lbWNweSggdHJhbnNmb3JtLT5pdl9lbmMsIGtleTEgKyB0cmFuc2Zvcm0tPmtleWxlbiArIGl2X2NvcHlfbGVuLAorICAgICAgICAgICAgICAgIGl2X2NvcHlfbGVuICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgaWYoIHRyYW5zZm9ybS0+bWFjbGVuID4gc2l6ZW9mIHRyYW5zZm9ybS0+bWFjX2VuYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggdHJhbnNmb3JtLT5tYWNfZW5jLCBtYWNfZW5jLCB0cmFuc2Zvcm0tPm1hY2xlbiApOworICAgICAgICBtZW1jcHkoIHRyYW5zZm9ybS0+bWFjX2RlYywgbWFjX2RlYywgdHJhbnNmb3JtLT5tYWNsZW4gKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSApCisgICAgeworICAgICAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmdHJhbnNmb3JtLT5tZF9jdHhfZW5jLCBtYWNfZW5jLCB0cmFuc2Zvcm0tPm1hY2xlbiApOworICAgICAgICBtYmVkdGxzX21kX2htYWNfc3RhcnRzKCAmdHJhbnNmb3JtLT5tZF9jdHhfZGVjLCBtYWNfZGVjLCB0cmFuc2Zvcm0tPm1hY2xlbiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorICAgIGlmKCBtYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGludCByZXQgPSAwOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZ29pbmcgZm9yIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9pbml0KCkiICkgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdCggc3NsLCBrZXkxLCBrZXkyLCB0cmFuc2Zvcm0tPmtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPml2X2VuYywgdHJhbnNmb3JtLT5pdl9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfY29weV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjX2VuYywgbWFjX2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPm1hY2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2h3X3JlY29yZF9pbml0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMpCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9leHBvcnRfa2V5cyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHNzbC0+Y29uZi0+Zl9leHBvcnRfa2V5cyggc3NsLT5jb25mLT5wX2V4cG9ydF9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPm1hc3Rlciwga2V5YmxrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+bWFjbGVuLCB0cmFuc2Zvcm0tPmtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9jb3B5X2xlbiApOworICAgIH0KKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyX2luZm8gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfc2V0dXAiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJfaW5mbyApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9zZXR1cCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9lbmMsIGtleTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyX2luZm8tPmtleV9iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTkNSWVBUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX3NldGtleSIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9kZWMsIGtleTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyX2luZm8tPmtleV9iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ERUNSWVBUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX3NldGtleSIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgaWYoIGNpcGhlcl9pbmZvLT5tb2RlID09IE1CRURUTFNfTU9ERV9DQkMgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1BBRERJTkdfTk9ORSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCAmdHJhbnNmb3JtLT5jaXBoZXJfY3R4X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfUEFERElOR19OT05FICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworCisgICAgbWJlZHRsc196ZXJvaXplKCBrZXlibGssIHNpemVvZigga2V5YmxrICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgLy8gSW5pdGlhbGl6ZSBjb21wcmVzc2lvbgorICAgIC8vCisgICAgaWYoIHNlc3Npb24tPmNvbXByZXNzaW9uID09IE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+Y29tcHJlc3NfYnVmID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIkFsbG9jYXRpbmcgY29tcHJlc3Npb24gYnVmZmVyIiApICk7CisgICAgICAgICAgICBzc2wtPmNvbXByZXNzX2J1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICk7CisgICAgICAgICAgICBpZiggc3NsLT5jb21wcmVzc19idWYgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYyglZCBieXRlcykgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gKSApOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJJbml0aWFsaXppbmcgemxpYiBzdGF0ZXMiICkgKTsKKworICAgICAgICBtZW1zZXQoICZ0cmFuc2Zvcm0tPmN0eF9kZWZsYXRlLCAwLCBzaXplb2YoIHRyYW5zZm9ybS0+Y3R4X2RlZmxhdGUgKSApOworICAgICAgICBtZW1zZXQoICZ0cmFuc2Zvcm0tPmN0eF9pbmZsYXRlLCAwLCBzaXplb2YoIHRyYW5zZm9ybS0+Y3R4X2luZmxhdGUgKSApOworCisgICAgICAgIGlmKCBkZWZsYXRlSW5pdCggJnRyYW5zZm9ybS0+Y3R4X2RlZmxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICkgICAhPSBaX09LIHx8CisgICAgICAgICAgICBpbmZsYXRlSW5pdCggJnRyYW5zZm9ybS0+Y3R4X2luZmxhdGUgKSAhPSBaX09LICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVEICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19aTElCX1NVUFBPUlQgKi8KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZGVyaXZlIGtleXMiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQordm9pZCBzc2xfY2FsY192ZXJpZnlfc3NsKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgaGFzaFszNl0gKQoreworICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgbWQ1OworICAgIG1iZWR0bHNfc2hhMV9jb250ZXh0IHNoYTE7CisgICAgdW5zaWduZWQgY2hhciBwYWRfMVs0OF07CisgICAgdW5zaWduZWQgY2hhciBwYWRfMls0OF07CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGNhbGMgdmVyaWZ5IHNzbCIgKSApOworCisgICAgbWJlZHRsc19tZDVfaW5pdCggJm1kNSApOworICAgIG1iZWR0bHNfc2hhMV9pbml0KCAmc2hhMSApOworCisgICAgbWJlZHRsc19tZDVfY2xvbmUoICZtZDUsICZzc2wtPmhhbmRzaGFrZS0+ZmluX21kNSApOworICAgIG1iZWR0bHNfc2hhMV9jbG9uZSggJnNoYTEsICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTEgKTsKKworICAgIG1lbXNldCggcGFkXzEsIDB4MzYsIDQ4ICk7CisgICAgbWVtc2V0KCBwYWRfMiwgMHg1QywgNDggKTsKKworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+bWFzdGVyLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgcGFkXzEsIDQ4ICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1LCBoYXNoICk7CisKKyAgICBtYmVkdGxzX21kNV9zdGFydHMoICZtZDUgKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDUsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPm1hc3RlciwgNDggKTsKKyAgICBtYmVkdGxzX21kNV91cGRhdGUoICZtZDUsIHBhZF8yLCA0OCApOworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgaGFzaCwgIDE2ICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1LCBoYXNoICk7CisKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+bWFzdGVyLCA0OCApOworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBwYWRfMSwgNDAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZmluaXNoKCAmc2hhMSwgaGFzaCArIDE2ICk7CisKKyAgICBtYmVkdGxzX3NoYTFfc3RhcnRzKCAmc2hhMSApOworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5tYXN0ZXIsIDQ4ICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHBhZF8yLCA0MCApOworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBoYXNoICsgMTYsIDIwICk7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIGhhc2ggKyAxNiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2FsY3VsYXRlZCB2ZXJpZnkgcmVzdWx0IiwgaGFzaCwgMzYgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgdmVyaWZ5IiApICk7CisKKyAgICBtYmVkdGxzX21kNV9mcmVlKCAgJm1kNSAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggJnNoYTEgKTsKKworICAgIHJldHVybjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQordm9pZCBzc2xfY2FsY192ZXJpZnlfdGxzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgaGFzaFszNl0gKQoreworICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgbWQ1OworICAgIG1iZWR0bHNfc2hhMV9jb250ZXh0IHNoYTE7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGNhbGMgdmVyaWZ5IHRscyIgKSApOworCisgICAgbWJlZHRsc19tZDVfaW5pdCggJm1kNSApOworICAgIG1iZWR0bHNfc2hhMV9pbml0KCAmc2hhMSApOworCisgICAgbWJlZHRsc19tZDVfY2xvbmUoICZtZDUsICZzc2wtPmhhbmRzaGFrZS0+ZmluX21kNSApOworICAgIG1iZWR0bHNfc2hhMV9jbG9uZSggJnNoYTEsICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTEgKTsKKworICAgICBtYmVkdGxzX21kNV9maW5pc2goICZtZDUsICBoYXNoICk7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIGhhc2ggKyAxNiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAiY2FsY3VsYXRlZCB2ZXJpZnkgcmVzdWx0IiwgaGFzaCwgMzYgKTsKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGNhbGMgdmVyaWZ5IiApICk7CisKKyAgICBtYmVkdGxzX21kNV9mcmVlKCAgJm1kNSAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggJnNoYTEgKTsKKworICAgIHJldHVybjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQordm9pZCBzc2xfY2FsY192ZXJpZnlfdGxzX3NoYTI1NiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdICkKK3sKKyAgICBtYmVkdGxzX3NoYTI1Nl9jb250ZXh0IHNoYTI1NjsKKworICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoICZzaGEyNTYgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY2FsYyB2ZXJpZnkgc2hhMjU2IiApICk7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9jbG9uZSggJnNoYTI1NiwgJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMjU2ICk7CisgICAgbWJlZHRsc19zaGEyNTZfZmluaXNoKCAmc2hhMjU2LCBoYXNoICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjYWxjdWxhdGVkIHZlcmlmeSByZXN1bHQiLCBoYXNoLCAzMiApOworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY2FsYyB2ZXJpZnkiICkgKTsKKworICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoICZzaGEyNTYgKTsKKworICAgIHJldHVybjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCit2b2lkIHNzbF9jYWxjX3ZlcmlmeV90bHNfc2hhMzg0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgaGFzaFs0OF0gKQoreworICAgIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgc2hhNTEyOworCisgICAgbWJlZHRsc19zaGE1MTJfaW5pdCggJnNoYTUxMiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBjYWxjIHZlcmlmeSBzaGEzODQiICkgKTsKKworICAgIG1iZWR0bHNfc2hhNTEyX2Nsb25lKCAmc2hhNTEyLCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGE1MTIgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl9maW5pc2goICZzaGE1MTIsIGhhc2ggKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNhbGN1bGF0ZWQgdmVyaWZ5IHJlc3VsdCIsIGhhc2gsIDQ4ICk7CisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBjYWxjIHZlcmlmeSIgKSApOworCisgICAgbWJlZHRsc19zaGE1MTJfZnJlZSggJnNoYTUxMiApOworCisgICAgcmV0dXJuOworfQorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQoraW50IG1iZWR0bHNfc3NsX3Bza19kZXJpdmVfcHJlbWFzdGVyKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIG1iZWR0bHNfa2V5X2V4Y2hhbmdlX3R5cGVfdCBrZXlfZXggKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzc2wtPmhhbmRzaGFrZS0+cHJlbWFzdGVyOworICAgIHVuc2lnbmVkIGNoYXIgKmVuZCA9IHAgKyBzaXplb2YoIHNzbC0+aGFuZHNoYWtlLT5wcmVtYXN0ZXIgKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc2sgPSBzc2wtPmNvbmYtPnBzazsKKyAgICBzaXplX3QgcHNrX2xlbiA9IHNzbC0+Y29uZi0+cHNrX2xlbjsKKworICAgIC8qIElmIHRoZSBwc2sgY2FsbGJhY2sgd2FzIGNhbGxlZCwgdXNlIGl0cyByZXN1bHQgKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnBzayAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHBzayA9IHNzbC0+aGFuZHNoYWtlLT5wc2s7CisgICAgICAgIHBza19sZW4gPSBzc2wtPmhhbmRzaGFrZS0+cHNrX2xlbjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFBNUyA9IHN0cnVjdCB7CisgICAgICogICAgIG9wYXF1ZSBvdGhlcl9zZWNyZXQ8MC4uMl4xNi0xPjsKKyAgICAgKiAgICAgb3BhcXVlIHBzazwwLi4yXjE2LTE+OworICAgICAqIH07CisgICAgICogd2l0aCAib3RoZXJfc2VjcmV0IiBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIga2V5IGV4Y2hhbmdlCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCkKKyAgICBpZigga2V5X2V4ID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyApCisgICAgeworICAgICAgICBpZiggZW5kIC0gcCA8IDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIHBza19sZW4gPj4gOCApOworICAgICAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIHBza19sZW4gICAgICApOworCisgICAgICAgIGlmKCBlbmQgPCBwIHx8IChzaXplX3QpKCBlbmQgLSBwICkgPCBwc2tfbGVuICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAgICAgbWVtc2V0KCBwLCAwLCBwc2tfbGVuICk7CisgICAgICAgIHAgKz0gcHNrX2xlbjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEICovCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQpCisgICAgaWYoIGtleV9leCA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIG90aGVyX3NlY3JldCBhbHJlYWR5IHNldCBieSB0aGUgQ2xpZW50S2V5RXhjaGFuZ2UgbWVzc2FnZSwKKyAgICAgICAgICogYW5kIGlzIDQ4IGJ5dGVzIGxvbmcKKyAgICAgICAgICovCisgICAgICAgICpwKysgPSAwOworICAgICAgICAqcCsrID0gNDg7CisgICAgICAgIHAgKz0gNDg7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyAgICBpZigga2V5X2V4ID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sgKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgc2l6ZV90IGxlbjsKKworICAgICAgICAvKiBXcml0ZSBsZW5ndGggb25seSB3aGVuIHdlIGtub3cgdGhlIGFjdHVhbCB2YWx1ZSAqLworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICsgMiwgZW5kIC0gKCBwICsgMiApLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfcm5nLCBzc2wtPmNvbmYtPnBfcm5nICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19kaG1fY2FsY19zZWNyZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICAgICAgKihwKyspID0gKHVuc2lnbmVkIGNoYXIpKCBsZW4gPj4gOCApOworICAgICAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIGxlbiApOworICAgICAgICBwICs9IGxlbjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJESE06IEsgIiwgJnNzbC0+aGFuZHNoYWtlLT5kaG1fY3R4LksgICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorICAgIGlmKCBrZXlfZXggPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHNpemVfdCB6bGVuOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eCwgJnpsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICsgMiwgZW5kIC0gKCBwICsgMiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5mX3JuZywgc3NsLT5jb25mLT5wX3JuZyApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgICoocCsrKSA9ICh1bnNpZ25lZCBjaGFyKSggemxlbiA+PiA4ICk7CisgICAgICAgICoocCsrKSA9ICh1bnNpZ25lZCBjaGFyKSggemxlbiAgICAgICk7CisgICAgICAgIHAgKz0gemxlbjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NUEkoIDMsICJFQ0RIOiB6IiwgJnNzbC0+aGFuZHNoYWtlLT5lY2RoX2N0eC56ICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgLyogb3BhcXVlIHBzazwwLi4yXjE2LTE+OyAqLworICAgIGlmKCBlbmQgLSBwIDwgMiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAqKHArKykgPSAodW5zaWduZWQgY2hhcikoIHBza19sZW4gPj4gOCApOworICAgICoocCsrKSA9ICh1bnNpZ25lZCBjaGFyKSggcHNrX2xlbiAgICAgICk7CisKKyAgICBpZiggZW5kIDwgcCB8fCAoc2l6ZV90KSggZW5kIC0gcCApIDwgcHNrX2xlbiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtZW1jcHkoIHAsIHBzaywgcHNrX2xlbiApOworICAgIHAgKz0gcHNrX2xlbjsKKworICAgIHNzbC0+aGFuZHNoYWtlLT5wbXNsZW4gPSBwIC0gc3NsLT5oYW5kc2hha2UtPnByZW1hc3RlcjsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorLyoKKyAqIFNTTHYzLjAgTUFDIGZ1bmN0aW9ucworICovCitzdGF0aWMgdm9pZCBzc2xfbWFjKCBtYmVkdGxzX21kX2NvbnRleHRfdCAqbWRfY3R4LCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdHIsIGludCB0eXBlICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGhlYWRlclsxMV07CisgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzQ4XTsKKyAgICBpbnQgcGFkbGVuOworICAgIGludCBtZF9zaXplID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfY3R4LT5tZF9pbmZvICk7CisgICAgaW50IG1kX3R5cGUgPSBtYmVkdGxzX21kX2dldF90eXBlKCBtZF9jdHgtPm1kX2luZm8gKTsKKworICAgIC8qIE9ubHkgTUQ1IGFuZCBTSEEtMSBzdXBwb3J0ZWQgKi8KKyAgICBpZiggbWRfdHlwZSA9PSBNQkVEVExTX01EX01ENSApCisgICAgICAgIHBhZGxlbiA9IDQ4OworICAgIGVsc2UKKyAgICAgICAgcGFkbGVuID0gNDA7CisKKyAgICBtZW1jcHkoIGhlYWRlciwgY3RyLCA4ICk7CisgICAgaGVhZGVyWyA4XSA9ICh1bnNpZ25lZCBjaGFyKSAgdHlwZTsKKyAgICBoZWFkZXJbIDldID0gKHVuc2lnbmVkIGNoYXIpKCBsZW4gPj4gOCApOworICAgIGhlYWRlclsxMF0gPSAodW5zaWduZWQgY2hhcikoIGxlbiAgICAgICk7CisKKyAgICBtZW1zZXQoIHBhZGRpbmcsIDB4MzYsIHBhZGxlbiApOworICAgIG1iZWR0bHNfbWRfc3RhcnRzKCBtZF9jdHggKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSggbWRfY3R4LCBzZWNyZXQsICBtZF9zaXplICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgcGFkZGluZywgcGFkbGVuICApOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCBtZF9jdHgsIGhlYWRlciwgIDExICAgICAgKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSggbWRfY3R4LCBidWYsICAgICBsZW4gICAgICk7CisgICAgbWJlZHRsc19tZF9maW5pc2goIG1kX2N0eCwgYnVmICsgICAgbGVuICAgICApOworCisgICAgbWVtc2V0KCBwYWRkaW5nLCAweDVDLCBwYWRsZW4gKTsKKyAgICBtYmVkdGxzX21kX3N0YXJ0cyggbWRfY3R4ICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgc2VjcmV0LCAgICBtZF9zaXplICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgcGFkZGluZywgICBwYWRsZW4gICk7CisgICAgbWJlZHRsc19tZF91cGRhdGUoIG1kX2N0eCwgYnVmICsgbGVuLCBtZF9zaXplICk7CisgICAgbWJlZHRsc19tZF9maW5pc2goIG1kX2N0eCwgYnVmICsgbGVuICAgICAgICAgICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikgfHwgICAgIFwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICggZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgKSApCisjZGVmaW5lIFNTTF9TT01FX01PREVTX1VTRV9NQUMKKyNlbmRpZgorCisvKgorICogRW5jcnlwdGlvbi9kZWNyeXB0aW9uIGZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IHNzbF9lbmNyeXB0X2J1ZiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl9tb2RlX3QgbW9kZTsKKyAgICBpbnQgYXV0aF9kb25lID0gMDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gZW5jcnlwdCBidWYiICkgKTsKKworICAgIGlmKCBzc2wtPnNlc3Npb25fb3V0ID09IE5VTEwgfHwgc3NsLT50cmFuc2Zvcm1fb3V0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgbW9kZSA9IG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggJnNzbC0+dHJhbnNmb3JtX291dC0+Y2lwaGVyX2N0eF9lbmMgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImJlZm9yZSBlbmNyeXB0OiBvdXRwdXQgcGF5bG9hZCIsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnLCBzc2wtPm91dF9tc2dsZW4gKTsKKworICAgIC8qCisgICAgICogQWRkIE1BQyBiZWZvcmUgaWYgbmVlZGVkCisgICAgICovCisjaWYgZGVmaW5lZChTU0xfU09NRV9NT0RFU19VU0VfTUFDKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9TVFJFQU0gfHwKKyAgICAgICAgKCBtb2RlID09IE1CRURUTFNfTU9ERV9DQkMKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgICAgICAgJiYgc3NsLT5zZXNzaW9uX291dC0+ZW5jcnlwdF90aGVuX21hYyA9PSBNQkVEVExTX1NTTF9FVE1fRElTQUJMRUQKKyNlbmRpZgorICAgICAgICApICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsX21hYyggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPm1hY19lbmMsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnLCBzc2wtPm91dF9tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfY3RyLCBzc2wtPm91dF9tc2d0eXBlICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgICAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID49IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMsIHNzbC0+b3V0X2N0ciwgOCApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywgc3NsLT5vdXRfaGRyLCAzICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5tZF9jdHhfZW5jLCBzc2wtPm91dF9sZW4sIDIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzc2wtPnRyYW5zZm9ybV9vdXQtPm1kX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZywgc3NsLT5vdXRfbXNnbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5tZF9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2cgKyBzc2wtPm91dF9tc2dsZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYyApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJjb21wdXRlZCBtYWMiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2cgKyBzc2wtPm91dF9tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+bWFjbGVuICk7CisKKyAgICAgICAgc3NsLT5vdXRfbXNnbGVuICs9IHNzbC0+dHJhbnNmb3JtX291dC0+bWFjbGVuOworICAgICAgICBhdXRoX2RvbmUrKzsKKyAgICB9CisjZW5kaWYgLyogQUVBRCBub3QgdGhlIG9ubHkgb3B0aW9uICovCisKKyAgICAvKgorICAgICAqIEVuY3J5cHQKKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiYmVmb3JlIGVuY3J5cHQ6IG1zZ2xlbiA9ICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGluZyAlZCBieXRlcyBvZiBwYWRkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuLCAwICkgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9jcnlwdCggJnNzbC0+dHJhbnNmb3JtX291dC0+Y2lwaGVyX2N0eF9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2csIHNzbC0+b3V0X21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnLCAmb2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfY2lwaGVyX2NyeXB0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+b3V0X21zZ2xlbiAhPSBvbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyB8fCBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykgfHwgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9HQ00gfHwKKyAgICAgICAgbW9kZSA9PSBNQkVEVExTX01PREVfQ0NNICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHNpemVfdCBlbmNfbXNnbGVuLCBvbGVuOworICAgICAgICB1bnNpZ25lZCBjaGFyICplbmNfbXNnOworICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZF9kYXRhWzEzXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0YWdsZW4gPSBzc2wtPnRyYW5zZm9ybV9vdXQtPmNpcGhlcnN1aXRlX2luZm8tPmZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyA/IDggOiAxNjsKKworICAgICAgICBtZW1jcHkoIGFkZF9kYXRhLCBzc2wtPm91dF9jdHIsIDggKTsKKyAgICAgICAgYWRkX2RhdGFbOF0gID0gc3NsLT5vdXRfbXNndHlwZTsKKyAgICAgICAgbWJlZHRsc19zc2xfd3JpdGVfdmVyc2lvbiggc3NsLT5tYWpvcl92ZXIsIHNzbC0+bWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT50cmFuc3BvcnQsIGFkZF9kYXRhICsgOSApOworICAgICAgICBhZGRfZGF0YVsxMV0gPSAoIHNzbC0+b3V0X21zZ2xlbiA+PiA4ICkgJiAweEZGOworICAgICAgICBhZGRfZGF0YVsxMl0gPSBzc2wtPm91dF9tc2dsZW4gJiAweEZGOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImFkZGl0aW9uYWwgZGF0YSB1c2VkIGZvciBBRUFEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWRkX2RhdGEsIDEzICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogR2VuZXJhdGUgSVYKKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuIC0gc3NsLT50cmFuc2Zvcm1fb3V0LT5maXhlZF9pdmxlbiAhPSA4ICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmVtaW5kZXIgaWYgd2UgZXZlciBhZGQgYW4gQUVBRCBtb2RlIHdpdGggYSBkaWZmZXJlbnQgc2l6ZSAqLworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCBzc2wtPnRyYW5zZm9ybV9vdXQtPml2X2VuYyArIHNzbC0+dHJhbnNmb3JtX291dC0+Zml4ZWRfaXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X2N0ciwgOCApOworICAgICAgICBtZW1jcHkoIHNzbC0+b3V0X2l2LCBzc2wtPm91dF9jdHIsIDggKTsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJJViB1c2VkIiwgc3NsLT5vdXRfaXYsCisgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiAtIHNzbC0+dHJhbnNmb3JtX291dC0+Zml4ZWRfaXZsZW4gKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGaXggcG9pbnRlciBwb3NpdGlvbnMgYW5kIG1lc3NhZ2UgbGVuZ3RoIHdpdGggYWRkZWQgSVYKKyAgICAgICAgICovCisgICAgICAgIGVuY19tc2cgPSBzc2wtPm91dF9tc2c7CisgICAgICAgIGVuY19tc2dsZW4gPSBzc2wtPm91dF9tc2dsZW47CisgICAgICAgIHNzbC0+b3V0X21zZ2xlbiArPSBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+Zml4ZWRfaXZsZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJiZWZvcmUgZW5jcnlwdDogbXNnbGVuID0gJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkaW5nICVkIGJ5dGVzIG9mIHBhZGRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2dsZW4sIDAgKSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIEVuY3J5cHQgYW5kIGF1dGhlbnRpY2F0ZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfYXV0aF9lbmNyeXB0KCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5jaXBoZXJfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdl9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kYXRhLCAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX21zZywgZW5jX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX21zZywgJm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY19tc2cgKyBlbmNfbXNnbGVuLCB0YWdsZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggb2xlbiAhPSBlbmNfbXNnbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5vdXRfbXNnbGVuICs9IHRhZ2xlbjsKKyAgICAgICAgYXV0aF9kb25lKys7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiYWZ0ZXIgZW5jcnlwdDogdGFnIiwgZW5jX21zZyArIGVuY19tc2dsZW4sIHRhZ2xlbiApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19HQ01fQyB8fCBNQkVEVExTX0NDTV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfQUVTX0MpIHx8IGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKSApCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19NT0RFX0NCQyApCisgICAgeworICAgICAgICBpbnQgcmV0OworICAgICAgICB1bnNpZ25lZCBjaGFyICplbmNfbXNnOworICAgICAgICBzaXplX3QgZW5jX21zZ2xlbiwgcGFkbGVuLCBvbGVuID0gMCwgaTsKKworICAgICAgICBwYWRsZW4gPSBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuIC0gKCBzc2wtPm91dF9tc2dsZW4gKyAxICkgJQorICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPml2bGVuOworICAgICAgICBpZiggcGFkbGVuID09IHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4gKQorICAgICAgICAgICAgcGFkbGVuID0gMDsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDw9IHBhZGxlbjsgaSsrICkKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ1tzc2wtPm91dF9tc2dsZW4gKyBpXSA9ICh1bnNpZ25lZCBjaGFyKSBwYWRsZW47CisKKyAgICAgICAgc3NsLT5vdXRfbXNnbGVuICs9IHBhZGxlbiArIDE7CisKKyAgICAgICAgZW5jX21zZ2xlbiA9IHNzbC0+b3V0X21zZ2xlbjsKKyAgICAgICAgZW5jX21zZyA9IHNzbC0+b3V0X21zZzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgLyoKKyAgICAgICAgICogUHJlcGVuZCBwZXItcmVjb3JkIElWIGZvciBibG9jayBjaXBoZXIgaW4gVExTIHYxLjEgYW5kIHVwIGFzIHBlcgorICAgICAgICAgKiBNZXRob2QgMSAoNi4yLjMuMi4gaW4gUkZDNDM0NiBhbmQgUkZDNTI0NikKKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA+PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogR2VuZXJhdGUgSVYKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0ID0gc3NsLT5jb25mLT5mX3JuZyggc3NsLT5jb25mLT5wX3JuZywgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdl9lbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBtZW1jcHkoIHNzbC0+b3V0X2l2LCBzc2wtPnRyYW5zZm9ybV9vdXQtPml2X2VuYywKKyAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiApOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRml4IHBvaW50ZXIgcG9zaXRpb25zIGFuZCBtZXNzYWdlIGxlbmd0aCB3aXRoIGFkZGVkIElWCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGVuY19tc2cgPSBzc2wtPm91dF9tc2c7CisgICAgICAgICAgICBlbmNfbXNnbGVuID0gc3NsLT5vdXRfbXNnbGVuOworICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuICs9IHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW47CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJiZWZvcmUgZW5jcnlwdDogbXNnbGVuID0gJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkaW5nICVkIGJ5dGVzIG9mIElWIGFuZCAlZCBieXRlcyBvZiBwYWRkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2dsZW4sIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkbGVuICsgMSApICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfY3J5cHQoICZzc2wtPnRyYW5zZm9ybV9vdXQtPmNpcGhlcl9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPml2X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX21zZywgZW5jX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX21zZywgJm9sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9jcnlwdCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBlbmNfbXNnbGVuICE9IG9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU2F2ZSBJViBpbiBTU0wzIGFuZCBUTFMxCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbWNweSggc3NsLT50cmFuc2Zvcm1fb3V0LT5pdl9lbmMsCisgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+Y2lwaGVyX2N0eF9lbmMuaXYsCisgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+aXZsZW4gKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgICAgIGlmKCBhdXRoX2RvbmUgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBNQUMoTUFDX3dyaXRlX2tleSwgc2VxX251bSArCisgICAgICAgICAgICAgKiAgICAgVExTQ2lwaGVyVGV4dC50eXBlICsKKyAgICAgICAgICAgICAqICAgICBUTFNDaXBoZXJUZXh0LnZlcnNpb24gKworICAgICAgICAgICAgICogICAgIGxlbmd0aF9vZiggKElWICspIEVOQyguLi4pICkgKworICAgICAgICAgICAgICogICAgIElWICsgLy8gZXhjZXB0IGZvciBUTFMgMS4wCisgICAgICAgICAgICAgKiAgICAgRU5DKGNvbnRlbnQgKyBwYWRkaW5nICsgcGFkZGluZ19sZW5ndGgpKTsKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwc2V1ZG9faGRyWzEzXTsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIiApICk7CisKKyAgICAgICAgICAgIG1lbWNweSggcHNldWRvX2hkciArICAwLCBzc2wtPm91dF9jdHIsIDggKTsKKyAgICAgICAgICAgIG1lbWNweSggcHNldWRvX2hkciArICA4LCBzc2wtPm91dF9oZHIsIDMgKTsKKyAgICAgICAgICAgIHBzZXVkb19oZHJbMTFdID0gKHVuc2lnbmVkIGNoYXIpKCAoIHNzbC0+b3V0X21zZ2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgICAgICAgICBwc2V1ZG9faGRyWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBzc2wtPm91dF9tc2dsZW4gICAgICApICYgMHhGRiApOworCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJNQUMnZCBtZXRhLWRhdGEiLCBwc2V1ZG9faGRyLCAxMyApOworCisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5tZF9jdHhfZW5jLCBwc2V1ZG9faGRyLCAxMyApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfaXYsIHNzbC0+b3V0X21zZ2xlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfaXYgKyBzc2wtPm91dF9tc2dsZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJnNzbC0+dHJhbnNmb3JtX291dC0+bWRfY3R4X2VuYyApOworCisgICAgICAgICAgICBzc2wtPm91dF9tc2dsZW4gKz0gc3NsLT50cmFuc2Zvcm1fb3V0LT5tYWNsZW47CisgICAgICAgICAgICBhdXRoX2RvbmUrKzsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICYmCisgICAgICAgICAgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfQ0FNRUxMSUFfQyApICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICAvKiBNYWtlIGV4dHJhIHN1cmUgYXV0aGVudGljYXRpb24gd2FzIHBlcmZvcm1lZCwgZXhhY3RseSBvbmNlICovCisgICAgaWYoIGF1dGhfZG9uZSAhPSAxICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZW5jcnlwdCBidWYiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIFNTTF9NQVhfTUFDX1NJWkUgICA0OAorCitzdGF0aWMgaW50IHNzbF9kZWNyeXB0X2J1ZiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX2NpcGhlcl9tb2RlX3QgbW9kZTsKKyAgICBpbnQgYXV0aF9kb25lID0gMDsKKyNpZiBkZWZpbmVkKFNTTF9TT01FX01PREVTX1VTRV9NQUMpCisgICAgc2l6ZV90IHBhZGxlbiA9IDAsIGNvcnJlY3QgPSAxOworI2VuZGlmCisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGRlY3J5cHQgYnVmIiApICk7CisKKyAgICBpZiggc3NsLT5zZXNzaW9uX2luID09IE5VTEwgfHwgc3NsLT50cmFuc2Zvcm1faW4gPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBtb2RlID0gbWJlZHRsc19jaXBoZXJfZ2V0X2NpcGhlcl9tb2RlKCAmc3NsLT50cmFuc2Zvcm1faW4tPmNpcGhlcl9jdHhfZGVjICk7CisKKyAgICBpZiggc3NsLT5pbl9tc2dsZW4gPCBzc2wtPnRyYW5zZm9ybV9pbi0+bWlubGVuICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaW5fbXNnbGVuICglZCkgPCBtaW5sZW4gKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuLCBzc2wtPnRyYW5zZm9ybV9pbi0+bWlubGVuICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgICAgIHBhZGxlbiA9IDA7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfY3J5cHQoICZzc2wtPnRyYW5zZm9ybV9pbi0+Y2lwaGVyX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdl9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2csIHNzbC0+aW5fbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgJm9sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9jcnlwdCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBzc2wtPmluX21zZ2xlbiAhPSBvbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX0FSQzRfQyB8fCBNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykgfHwgZGVmaW5lZChNQkVEVExTX0NDTV9DKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9HQ00gfHwKKyAgICAgICAgbW9kZSA9PSBNQkVEVExTX01PREVfQ0NNICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIHNpemVfdCBkZWNfbXNnbGVuLCBvbGVuOworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZWNfbXNnOworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZWNfbXNnX3Jlc3VsdDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhZGRfZGF0YVsxM107CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdGFnbGVuID0gc3NsLT50cmFuc2Zvcm1faW4tPmNpcGhlcnN1aXRlX2luZm8tPmZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NJUEhFUlNVSVRFX1NIT1JUX1RBRyA/IDggOiAxNjsKKyAgICAgICAgc2l6ZV90IGV4cGxpY2l0X2l2X2xlbiA9IHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+Zml4ZWRfaXZsZW47CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgZXhwbGljaXRfaXZfbGVuICsgdGFnbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtc2dsZW4gKCVkKSA8IGV4cGxpY2l0X2l2X2xlbiAoJWQpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIisgdGFnbGVuICglZCkiLCBzc2wtPmluX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRfaXZfbGVuLCB0YWdsZW4gKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKTsKKyAgICAgICAgfQorICAgICAgICBkZWNfbXNnbGVuID0gc3NsLT5pbl9tc2dsZW4gLSBleHBsaWNpdF9pdl9sZW4gLSB0YWdsZW47CisKKyAgICAgICAgZGVjX21zZyA9IHNzbC0+aW5fbXNnOworICAgICAgICBkZWNfbXNnX3Jlc3VsdCA9IHNzbC0+aW5fbXNnOworICAgICAgICBzc2wtPmluX21zZ2xlbiA9IGRlY19tc2dsZW47CisKKyAgICAgICAgbWVtY3B5KCBhZGRfZGF0YSwgc3NsLT5pbl9jdHIsIDggKTsKKyAgICAgICAgYWRkX2RhdGFbOF0gID0gc3NsLT5pbl9tc2d0eXBlOworICAgICAgICBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uKCBzc2wtPm1ham9yX3Zlciwgc3NsLT5taW5vcl92ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPnRyYW5zcG9ydCwgYWRkX2RhdGEgKyA5ICk7CisgICAgICAgIGFkZF9kYXRhWzExXSA9ICggc3NsLT5pbl9tc2dsZW4gPj4gOCApICYgMHhGRjsKKyAgICAgICAgYWRkX2RhdGFbMTJdID0gc3NsLT5pbl9tc2dsZW4gJiAweEZGOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImFkZGl0aW9uYWwgZGF0YSB1c2VkIGZvciBBRUFEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWRkX2RhdGEsIDEzICk7CisKKyAgICAgICAgbWVtY3B5KCBzc2wtPnRyYW5zZm9ybV9pbi0+aXZfZGVjICsgc3NsLT50cmFuc2Zvcm1faW4tPmZpeGVkX2l2bGVuLAorICAgICAgICAgICAgICAgIHNzbC0+aW5faXYsCisgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuIC0gc3NsLT50cmFuc2Zvcm1faW4tPmZpeGVkX2l2bGVuICk7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiSVYgdXNlZCIsIHNzbC0+dHJhbnNmb3JtX2luLT5pdl9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuICk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgIlRBRyB1c2VkIiwgZGVjX21zZyArIGRlY19tc2dsZW4sIHRhZ2xlbiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIERlY3J5cHQgYW5kIGF1dGhlbnRpY2F0ZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jaXBoZXJfYXV0aF9kZWNyeXB0KCAmc3NsLT50cmFuc2Zvcm1faW4tPmNpcGhlcl9jdHhfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+aXZfZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kYXRhLCAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjX21zZywgZGVjX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjX21zZ19yZXN1bHQsICZvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNfbXNnICsgZGVjX21zZ2xlbiwgdGFnbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19jaXBoZXJfYXV0aF9kZWNyeXB0IiwgcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApOworCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgICAgIGF1dGhfZG9uZSsrOworCisgICAgICAgIGlmKCBvbGVuICE9IGRlY19tc2dsZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgfHwgTUJFRFRMU19DQ01fQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgKQorICAgIGlmKCBtb2RlID09IE1CRURUTFNfTU9ERV9DQkMgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRGVjcnlwdCBhbmQgY2hlY2sgdGhlIHBhZGRpbmcKKyAgICAgICAgICovCisgICAgICAgIGludCByZXQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlY19tc2c7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlY19tc2dfcmVzdWx0OworICAgICAgICBzaXplX3QgZGVjX21zZ2xlbjsKKyAgICAgICAgc2l6ZV90IG1pbmxlbiA9IDA7CisgICAgICAgIHNpemVfdCBvbGVuID0gMDsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpbW1lZGlhdGUgY2lwaGVydGV4dCBzYW5pdHkKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgICAgIG1pbmxlbiArPSBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW47CisjZW5kaWYKKworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gPCBtaW5sZW4gKyBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4gfHwKKyAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuIDwgbWlubGVuICsgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiArIDEgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm1zZ2xlbiAoJWQpIDwgbWF4KCBpdmxlbiglZCksIG1hY2xlbiAoJWQpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIisgMSApICggKyBleHBsIElWICkiLCBzc2wtPmluX21zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgICAgIH0KKworICAgICAgICBkZWNfbXNnbGVuID0gc3NsLT5pbl9tc2dsZW47CisgICAgICAgIGRlY19tc2cgPSBzc2wtPmluX21zZzsKKyAgICAgICAgZGVjX21zZ19yZXN1bHQgPSBzc2wtPmluX21zZzsKKworICAgICAgICAvKgorICAgICAgICAgKiBBdXRoZW50aWNhdGUgYmVmb3JlIGRlY3J5cHQgaWYgZW5hYmxlZAorICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgICAgIGlmKCBzc2wtPnNlc3Npb25faW4tPmVuY3J5cHRfdGhlbl9tYWMgPT0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQgKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbXB1dGVkX21hY1tTU0xfTUFYX01BQ19TSVpFXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcHNldWRvX2hkclsxM107CisKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIgKSApOworCisgICAgICAgICAgICBkZWNfbXNnbGVuIC09IHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW47CisgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiAtPSBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuOworCisgICAgICAgICAgICBtZW1jcHkoIHBzZXVkb19oZHIgKyAgMCwgc3NsLT5pbl9jdHIsIDggKTsKKyAgICAgICAgICAgIG1lbWNweSggcHNldWRvX2hkciArICA4LCBzc2wtPmluX2hkciwgMyApOworICAgICAgICAgICAgcHNldWRvX2hkclsxMV0gPSAodW5zaWduZWQgY2hhcikoICggc3NsLT5pbl9tc2dsZW4gPj4gOCApICYgMHhGRiApOworICAgICAgICAgICAgcHNldWRvX2hkclsxMl0gPSAodW5zaWduZWQgY2hhcikoICggc3NsLT5pbl9tc2dsZW4gICAgICApICYgMHhGRiApOworCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJNQUMnZCBtZXRhLWRhdGEiLCBwc2V1ZG9faGRyLCAxMyApOworCisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMsIHBzZXVkb19oZHIsIDEzICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5faXYsIHNzbC0+aW5fbXNnbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMsIGNvbXB1dGVkX21hYyApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3Jlc2V0KCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMgKTsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAibWVzc2FnZSAgbWFjIiwgc3NsLT5pbl9pdiArIHNzbC0+aW5fbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKTsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImNvbXB1dGVkIG1hYyIsIGNvbXB1dGVkX21hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIHNzbC0+aW5faXYgKyBzc2wtPmluX21zZ2xlbiwgY29tcHV0ZWRfbWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibWVzc2FnZSBtYWMgZG9lcyBub3QgbWF0Y2giICkgKTsKKworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRoX2RvbmUrKzsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBsZW5ndGggc2FuaXR5CisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gJSBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4gIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibXNnbGVuICglZCkgJSUgaXZsZW4gKCVkKSAhPSAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuLCBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4gKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICAvKgorICAgICAgICAgKiBJbml0aWFsaXplIGZvciBwcmVwZW5kZWQgSVYgZm9yIGJsb2NrIGNpcGhlciBpbiBUTFMgdjEuMSBhbmQgdXAKKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA+PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgKQorICAgICAgICB7CisgICAgICAgICAgICBkZWNfbXNnbGVuIC09IHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbjsKKyAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuIC09IHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbjsKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbjsgaSsrICkKKyAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+aXZfZGVjW2ldID0gc3NsLT5pbl9pdltpXTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NpcGhlcl9jcnlwdCggJnNzbC0+dHJhbnNmb3JtX2luLT5jaXBoZXJfY3R4X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNfbXNnLCBkZWNfbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNfbXNnX3Jlc3VsdCwgJm9sZW4gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX2NpcGhlcl9jcnlwdCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBkZWNfbXNnbGVuICE9IG9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU2F2ZSBJViBpbiBTU0wzIGFuZCBUTFMxCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbWNweSggc3NsLT50cmFuc2Zvcm1faW4tPml2X2RlYywKKyAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1faW4tPmNpcGhlcl9jdHhfZGVjLml2LAorICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+aXZsZW4gKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgcGFkbGVuID0gMSArIHNzbC0+aW5fbXNnW3NzbC0+aW5fbXNnbGVuIC0gMV07CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiArIHBhZGxlbiAmJgorICAgICAgICAgICAgYXV0aF9kb25lID09IDAgKQorICAgICAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm1zZ2xlbiAoJWQpIDwgbWFjbGVuICglZCkgKyBwYWRsZW4gKCVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiwgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiwgcGFkbGVuICkgKTsKKyNlbmRpZgorICAgICAgICAgICAgcGFkbGVuID0gMDsKKyAgICAgICAgICAgIGNvcnJlY3QgPSAwOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcGFkbGVuID4gc3NsLT50cmFuc2Zvcm1faW4tPml2bGVuICkKKyAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RFQlVHX0FMTCkKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBwYWRkaW5nIGxlbmd0aDogaXMgJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgbm8gbW9yZSB0aGFuICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW4sIHNzbC0+dHJhbnNmb3JtX2luLT5pdmxlbiApICk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBjb3JyZWN0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID4gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRMU3YxKzogYWx3YXlzIGNoZWNrIHRoZSBwYWRkaW5nIHVwIHRvIHRoZSBmaXJzdCBmYWlsdXJlCisgICAgICAgICAgICAgKiBhbmQgZmFrZSBjaGVjayB1cCB0byAyNTYgYnl0ZXMgb2YgcGFkZGluZworICAgICAgICAgICAgICovCisgICAgICAgICAgICBzaXplX3QgcGFkX2NvdW50ID0gMCwgcmVhbF9jb3VudCA9IDE7CisgICAgICAgICAgICBzaXplX3QgcGFkZGluZ19pZHggPSBzc2wtPmluX21zZ2xlbiAtIHBhZGxlbiAtIDE7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBQYWRkaW5nIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5jb3JyZWN0IGlmOgorICAgICAgICAgICAgICogICAxLiBwYWRsZW4gPj0gc3NsLT5pbl9tc2dsZW4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiAgIDIuIHBhZGRpbmdfaWR4ID49IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiArCisgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBJbiBib3RoIGNhc2VzIHdlIHJlc2V0IHBhZGRpbmdfaWR4IHRvIGEgc2FmZSB2YWx1ZSAoMCkgdG8KKyAgICAgICAgICAgICAqIHByZXZlbnQgb3V0LW9mLWJ1ZmZlciByZWFkcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY29ycmVjdCAmPSAoIHNzbC0+aW5fbXNnbGVuID49IHBhZGxlbiArIDEgKTsKKyAgICAgICAgICAgIGNvcnJlY3QgJj0gKCBwYWRkaW5nX2lkeCA8IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICk7CisKKyAgICAgICAgICAgIHBhZGRpbmdfaWR4ICo9IGNvcnJlY3Q7CisKKyAgICAgICAgICAgIGZvciggaSA9IDE7IGkgPD0gMjU2OyBpKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlYWxfY291bnQgJj0gKCBpIDw9IHBhZGxlbiApOworICAgICAgICAgICAgICAgIHBhZF9jb3VudCArPSByZWFsX2NvdW50ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzc2wtPmluX21zZ1twYWRkaW5nX2lkeCArIGldID09IHBhZGxlbiAtIDEgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29ycmVjdCAmPSAoIHBhZF9jb3VudCA9PSBwYWRsZW4gKTsgLyogT25seSAxIG9uIGNvcnJlY3QgcGFkZGluZyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCisgICAgICAgICAgICBpZiggcGFkbGVuID4gMCAmJiBjb3JyZWN0ID09IDAgKQorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIHBhZGRpbmcgYnl0ZSBkZXRlY3RlZCIgKSApOworI2VuZGlmCisgICAgICAgICAgICBwYWRsZW4gJj0gY29ycmVjdCAqIDB4MUZGOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB8fCBcCisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+aW5fbXNnbGVuIC09IHBhZGxlbjsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICYmCisgICAgICAgICAgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfQ0FNRUxMSUFfQyApICovCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJyYXcgYnVmZmVyIGFmdGVyIGRlY3J5cHRpb24iLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnLCBzc2wtPmluX21zZ2xlbiApOworCisgICAgLyoKKyAgICAgKiBBdXRoZW50aWNhdGUgaWYgbm90IGRvbmUgeWV0LgorICAgICAqIENvbXB1dGUgdGhlIE1BQyByZWdhcmRsZXNzIG9mIHRoZSBwYWRkaW5nIHJlc3VsdCAoUkZDNDM0NiwgQ0JDVElNRSkuCisgICAgICovCisjaWYgZGVmaW5lZChTU0xfU09NRV9NT0RFU19VU0VfTUFDKQorICAgIGlmKCBhdXRoX2RvbmUgPT0gMCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcFtTU0xfTUFYX01BQ19TSVpFXTsKKworICAgICAgICBzc2wtPmluX21zZ2xlbiAtPSBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuOworCisgICAgICAgIHNzbC0+aW5fbGVuWzBdID0gKHVuc2lnbmVkIGNoYXIpKCBzc2wtPmluX21zZ2xlbiA+PiA4ICk7CisgICAgICAgIHNzbC0+aW5fbGVuWzFdID0gKHVuc2lnbmVkIGNoYXIpKCBzc2wtPmluX21zZ2xlbiAgICAgICk7CisKKyAgICAgICAgbWVtY3B5KCB0bXAsIHNzbC0+aW5fbXNnICsgc3NsLT5pbl9tc2dsZW4sIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbF9tYWMoICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjX2RlYywKKyAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9tc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9jdHIsIHNzbC0+aW5fbXNndHlwZSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgICAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgaWYoIHNzbC0+bWlub3JfdmVyID4gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFByb2Nlc3MgTUFDIGFuZCBhbHdheXMgdXBkYXRlIGZvciBwYWRsZW4gYWZ0ZXJ3YXJkcyB0byBtYWtlCisgICAgICAgICAgICAgKiB0b3RhbCB0aW1lIGluZGVwZW5kZW50IG9mIHBhZGxlbgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIGV4dHJhX3J1biBjb21wZW5zYXRlcyBNQUMgY2hlY2sgZm9yIHBhZGxlbgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEtub3duIHRpbWluZyBhdHRhY2tzOgorICAgICAgICAgICAgICogIC0gTHVja3kgVGhpcnRlZW4gKGh0dHA6Ly93d3cuaXNnLnJodWwuYWMudWsvdGxzL1RMU3RpbWluZy5wZGYpCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogV2UgdXNlICggKCBMeCArIDggKSAvIDY0ICkgdG8gaGFuZGxlICduZWdhdGl2ZSBMeCcgdmFsdWVzCisgICAgICAgICAgICAgKiBjb3JyZWN0bHkuIChXZSByb3VuZCBkb3duIGluc3RlYWQgb2YgdXAsIHNvIC01NiBpcyB0aGUgY29ycmVjdAorICAgICAgICAgICAgICogdmFsdWUgZm9yIG91ciBjYWxjdWxhdGlvbnMgaW5zdGVhZCBvZiAtNTUpCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNpemVfdCBqLCBleHRyYV9ydW4gPSAwOworICAgICAgICAgICAgZXh0cmFfcnVuID0gKCAxMyArIHNzbC0+aW5fbXNnbGVuICsgcGFkbGVuICsgOCApIC8gNjQgLQorICAgICAgICAgICAgICAgICAgICAgICAgKCAxMyArIHNzbC0+aW5fbXNnbGVuICAgICAgICAgICsgOCApIC8gNjQ7CisKKyAgICAgICAgICAgIGV4dHJhX3J1biAmPSBjb3JyZWN0ICogMHhGRjsKKworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBzc2wtPmluX2N0ciwgOCApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBzc2wtPmluX2hkciwgMyApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBzc2wtPmluX2xlbiwgMiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjLCBzc2wtPmluX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZzc2wtPnRyYW5zZm9ybV9pbi0+bWRfY3R4X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2cgKyBzc2wtPmluX21zZ2xlbiApOworICAgICAgICAgICAgLyogQ2FsbCBtYmVkdGxzX21kX3Byb2Nlc3MgYXQgbGVhc3Qgb25jZSBkdWUgdG8gY2FjaGUgYXR0YWNrcyAqLworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IGV4dHJhX3J1biArIDE7IGorKyApCisgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9wcm9jZXNzKCAmc3NsLT50cmFuc2Zvcm1faW4tPm1kX2N0eF9kZWMsIHNzbC0+aW5fbXNnICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJnNzbC0+dHJhbnNmb3JtX2luLT5tZF9jdHhfZGVjICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIHx8IFwKKyAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgIm1lc3NhZ2UgIG1hYyIsIHRtcCwgc3NsLT50cmFuc2Zvcm1faW4tPm1hY2xlbiApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJjb21wdXRlZCBtYWMiLCBzc2wtPmluX21zZyArIHNzbC0+aW5fbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnRyYW5zZm9ybV9pbi0+bWFjbGVuICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcCggdG1wLCBzc2wtPmluX21zZyArIHNzbC0+aW5fbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5tYWNsZW4gKSAhPSAwICkKKyAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtZXNzYWdlIG1hYyBkb2VzIG5vdCBtYXRjaCIgKSApOworI2VuZGlmCisgICAgICAgICAgICBjb3JyZWN0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBhdXRoX2RvbmUrKzsKKworICAgICAgICAvKgorICAgICAgICAgKiBGaW5hbGx5IGNoZWNrIHRoZSBjb3JyZWN0IGZsYWcKKyAgICAgICAgICovCisgICAgICAgIGlmKCBjb3JyZWN0ID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKTsKKyAgICB9CisjZW5kaWYgLyogU1NMX1NPTUVfTU9ERVNfVVNFX01BQyAqLworCisgICAgLyogTWFrZSBleHRyYSBzdXJlIGF1dGhlbnRpY2F0aW9uIHdhcyBwZXJmb3JtZWQsIGV4YWN0bHkgb25jZSAqLworICAgIGlmKCBhdXRoX2RvbmUgIT0gMSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2dsZW4gPT0gMCApCisgICAgeworICAgICAgICBzc2wtPm5iX3plcm8rKzsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaHJlZSBvciBtb3JlIGVtcHR5IG1lc3NhZ2VzIG1heSBiZSBhIERvUyBhdHRhY2sKKyAgICAgICAgICogKGV4Y2Vzc2l2ZSBDUFUgY29uc3VtcHRpb24pLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+bmJfemVybyA+IDMgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlY2VpdmVkIGZvdXIgY29uc2VjdXRpdmUgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZXMsIHBvc3NpYmxlIERvUyBhdHRhY2siICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICBzc2wtPm5iX3plcm8gPSAwOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgOyAvKiBpbl9jdHIgcmVhZCBmcm9tIHBlZXIsIG5vdCBtYWludGFpbmVkIGludGVybmFsbHkgKi8KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBmb3IoIGkgPSA4OyBpID4gc3NsX2VwX2xlbiggc3NsICk7IGktLSApCisgICAgICAgICAgICBpZiggKytzc2wtPmluX2N0cltpIC0gMV0gIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogVGhlIGxvb3AgZ29lcyB0byBpdHMgZW5kIGlmZiB0aGUgY291bnRlciBpcyB3cmFwcGluZyAqLworICAgICAgICBpZiggaSA9PSBzc2xfZXBfbGVuKCBzc2wgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaW5jb21pbmcgbWVzc2FnZSBjb3VudGVyIHdvdWxkIHdyYXAiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPVU5URVJfV1JBUFBJTkcgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZGVjcnlwdCBidWYiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjdW5kZWYgTUFDX05PTkUKKyN1bmRlZiBNQUNfUExBSU5URVhUCisjdW5kZWYgTUFDX0NJUEhFUlRFWFQKKworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisvKgorICogQ29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBzc2xfY29tcHJlc3NfYnVmKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgY2hhciAqbXNnX3Bvc3QgPSBzc2wtPm91dF9tc2c7CisgICAgc2l6ZV90IGxlbl9wcmUgPSBzc2wtPm91dF9tc2dsZW47CisgICAgdW5zaWduZWQgY2hhciAqbXNnX3ByZSA9IHNzbC0+Y29tcHJlc3NfYnVmOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBjb21wcmVzcyBidWYiICkgKTsKKworICAgIGlmKCBsZW5fcHJlID09IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIG1lbWNweSggbXNnX3ByZSwgc3NsLT5vdXRfbXNnLCBsZW5fcHJlICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImJlZm9yZSBjb21wcmVzc2lvbjogbXNnbGVuID0gJWQsICIsCisgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImJlZm9yZSBjb21wcmVzc2lvbjogb3V0cHV0IHBheWxvYWQiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZywgc3NsLT5vdXRfbXNnbGVuICk7CisKKyAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmN0eF9kZWZsYXRlLm5leHRfaW4gPSBtc2dfcHJlOworICAgIHNzbC0+dHJhbnNmb3JtX291dC0+Y3R4X2RlZmxhdGUuYXZhaWxfaW4gPSBsZW5fcHJlOworICAgIHNzbC0+dHJhbnNmb3JtX291dC0+Y3R4X2RlZmxhdGUubmV4dF9vdXQgPSBtc2dfcG9zdDsKKyAgICBzc2wtPnRyYW5zZm9ybV9vdXQtPmN0eF9kZWZsYXRlLmF2YWlsX291dCA9IE1CRURUTFNfU1NMX0JVRkZFUl9MRU47CisKKyAgICByZXQgPSBkZWZsYXRlKCAmc3NsLT50cmFuc2Zvcm1fb3V0LT5jdHhfZGVmbGF0ZSwgWl9TWU5DX0ZMVVNIICk7CisgICAgaWYoIHJldCAhPSBaX09LICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZmFpbGVkIHRvIHBlcmZvcm0gY29tcHJlc3Npb24gKCVkKSIsIHJldCApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCApOworICAgIH0KKworICAgIHNzbC0+b3V0X21zZ2xlbiA9IE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gLQorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX291dC0+Y3R4X2RlZmxhdGUuYXZhaWxfb3V0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJhZnRlciBjb21wcmVzc2lvbjogbXNnbGVuID0gJWQsICIsCisgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImFmdGVyIGNvbXByZXNzaW9uOiBvdXRwdXQgcGF5bG9hZCIsCisgICAgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnLCBzc2wtPm91dF9tc2dsZW4gKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY29tcHJlc3MgYnVmIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBzc2xfZGVjb21wcmVzc19idWYoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICptc2dfcG9zdCA9IHNzbC0+aW5fbXNnOworICAgIHNpemVfdCBsZW5fcHJlID0gc3NsLT5pbl9tc2dsZW47CisgICAgdW5zaWduZWQgY2hhciAqbXNnX3ByZSA9IHNzbC0+Y29tcHJlc3NfYnVmOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBkZWNvbXByZXNzIGJ1ZiIgKSApOworCisgICAgaWYoIGxlbl9wcmUgPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgbWVtY3B5KCBtc2dfcHJlLCBzc2wtPmluX21zZywgbGVuX3ByZSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJiZWZvcmUgZGVjb21wcmVzc2lvbjogbXNnbGVuID0gJWQsICIsCisgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dsZW4gKSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiYmVmb3JlIGRlY29tcHJlc3Npb246IGlucHV0IHBheWxvYWQiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnLCBzc2wtPmluX21zZ2xlbiApOworCisgICAgc3NsLT50cmFuc2Zvcm1faW4tPmN0eF9pbmZsYXRlLm5leHRfaW4gPSBtc2dfcHJlOworICAgIHNzbC0+dHJhbnNmb3JtX2luLT5jdHhfaW5mbGF0ZS5hdmFpbF9pbiA9IGxlbl9wcmU7CisgICAgc3NsLT50cmFuc2Zvcm1faW4tPmN0eF9pbmZsYXRlLm5leHRfb3V0ID0gbXNnX3Bvc3Q7CisgICAgc3NsLT50cmFuc2Zvcm1faW4tPmN0eF9pbmZsYXRlLmF2YWlsX291dCA9IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTjsKKworICAgIHJldCA9IGluZmxhdGUoICZzc2wtPnRyYW5zZm9ybV9pbi0+Y3R4X2luZmxhdGUsIFpfU1lOQ19GTFVTSCApOworICAgIGlmKCByZXQgIT0gWl9PSyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImZhaWxlZCB0byBwZXJmb3JtIGRlY29tcHJlc3Npb24gKCVkKSIsIHJldCApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPTVBSRVNTSU9OX0ZBSUxFRCApOworICAgIH0KKworICAgIHNzbC0+aW5fbXNnbGVuID0gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOIC0KKyAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX2luLT5jdHhfaW5mbGF0ZS5hdmFpbF9vdXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImFmdGVyIGRlY29tcHJlc3Npb246IG1zZ2xlbiA9ICVkLCAiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImFmdGVyIGRlY29tcHJlc3Npb246IGlucHV0IHBheWxvYWQiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnLCBzc2wtPmluX21zZ2xlbiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBkZWNvbXByZXNzIGJ1ZiIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19aTElCX1NVUFBPUlQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2hlbGxvX3JlcXVlc3QoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorc3RhdGljIGludCBzc2xfcmVzZW5kX2hlbGxvX3JlcXVlc3QoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgLyogSWYgcmVuZWdvdGlhdGlvbiBpcyBub3QgZW5mb3JjZWQsIHJldHJhbnNtaXQgdW50aWwgd2Ugd291bGQgcmVhY2ggbWF4CisgICAgICogdGltZW91dCBpZiB3ZSB3ZXJlIHVzaW5nIHRoZSB1c3VhbCBoYW5kc2hha2UgZG91Ymxpbmcgc2NoZW1lICovCisgICAgaWYoIHNzbC0+Y29uZi0+cmVuZWdvX21heF9yZWNvcmRzIDwgMCApCisgICAgeworICAgICAgICB1aW50MzJfdCByYXRpbyA9IHNzbC0+Y29uZi0+aHNfdGltZW91dF9tYXggLyBzc2wtPmNvbmYtPmhzX3RpbWVvdXRfbWluICsgMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkb3VibGluZ3MgPSAxOworCisgICAgICAgIHdoaWxlKCByYXRpbyAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgKytkb3VibGluZ3M7CisgICAgICAgICAgICByYXRpbyA+Pj0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCArK3NzbC0+cmVuZWdvX3JlY29yZHNfc2VlbiA+IGRvdWJsaW5ncyApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAibm8gbG9uZ2VyIHJldHJhbnNtaXR0aW5nIGhlbGxvIHJlcXVlc3QiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCBzc2xfd3JpdGVfaGVsbG9fcmVxdWVzdCggc3NsICkgKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKworLyoKKyAqIEZpbGwgdGhlIGlucHV0IG1lc3NhZ2UgYnVmZmVyIGJ5IGFwcGVuZGluZyBkYXRhIHRvIGl0LgorICogVGhlIGFtb3VudCBvZiBkYXRhIGFscmVhZHkgZmV0Y2hlZCBpcyBpbiBzc2wtPmluX2xlZnQuCisgKgorICogSWYgd2UgcmV0dXJuIDAsIGlzIGl0IGd1YXJhbnRlZWQgdGhhdCAoYXQgbGVhc3QpIG5iX3dhbnQgYnl0ZXMgYXJlCisgKiBhdmFpbGFibGUgKGZyb20gdGhpcyByZWFkIGFuZC9vciBhIHByZXZpb3VzIG9uZSkuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZQorICogaXMgcmV0dXJuZWQgKHBvc3NpYmx5IEVPRiBvciBXQU5UX1JFQUQpLgorICoKKyAqIFdpdGggc3RyZWFtIHRyYW5zcG9ydCAoVExTKSBvbiBzdWNjZXNzIHNzbC0+aW5fbGVmdCA9PSBuYl93YW50LCBidXQKKyAqIHdpdGggZGF0YWdyYW0gdHJhbnNwb3J0IChEVExTKSBvbiBzdWNjZXNzIHNzbC0+aW5fbGVmdCA+PSBuYl93YW50LAorICogc2luY2Ugd2UgYWx3YXlzIHJlYWQgYSB3aG9sZSBkYXRhZ3JhbSBhdCBvbmNlLgorICoKKyAqIEZvciBEVExTLCBpdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIHNldCBzc2wtPm5leHRfcmVjb3JkX29mZnNldCB3aGVuCisgKiB0aGV5J3JlIGRvbmUgcmVhZGluZyBhIHJlY29yZC4KKyAqLworaW50IG1iZWR0bHNfc3NsX2ZldGNoX2lucHV0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHNpemVfdCBuYl93YW50ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGZldGNoIGlucHV0IiApICk7CisKKyAgICBpZiggc3NsLT5mX3JlY3YgPT0gTlVMTCAmJiBzc2wtPmZfcmVjdl90aW1lb3V0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJCYWQgdXNhZ2Ugb2YgbWJlZHRsc19zc2xfc2V0X2JpbygpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3IgbWJlZHRsc19zc2xfc2V0X2JpbygpIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgaWYoIG5iX3dhbnQgPiBNQkVEVExTX1NTTF9CVUZGRVJfTEVOIC0gKHNpemVfdCkoIHNzbC0+aW5faGRyIC0gc3NsLT5pbl9idWYgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlcXVlc3RpbmcgbW9yZSBkYXRhIHRoYW4gZml0cyIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHRpbWVvdXQ7CisKKyAgICAgICAgLyogSnVzdCB0byBiZSBzdXJlICovCisgICAgICAgIGlmKCBzc2wtPmZfc2V0X3RpbWVyID09IE5VTEwgfHwgc3NsLT5mX2dldF90aW1lciA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJZb3UgbXVzdCB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgIm1iZWR0bHNfc3NsX3NldF90aW1lcl9jYigpIGZvciBEVExTIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHBvaW50IGlzLCB3ZSBuZWVkIHRvIGFsd2F5cyByZWFkIGEgZnVsbCBkYXRhZ3JhbSBhdCBvbmNlLCBzbyB3ZQorICAgICAgICAgKiBzb21ldGltZXMgcmVhZCBtb3JlIHRoZW4gcmVxdWVzdGVkLCBhbmQgaGFuZGxlIHRoZSBhZGRpdGlvbmFsIGRhdGEuCisgICAgICAgICAqIEl0IGNvdWxkIGJlIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IHJlY29yZCAod2hpbGUgZmV0Y2hpbmcgdGhlCisgICAgICAgICAqIGhlYWRlcikgYW5kL29yIHNvbWUgb3RoZXIgcmVjb3JkcyBpbiB0aGUgc2FtZSBkYXRhZ3JhbS4KKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogTW92ZSB0byB0aGUgbmV4dCByZWNvcmQgaW4gdGhlIGFscmVhZHkgcmVhZCBkYXRhZ3JhbSBpZiBhcHBsaWNhYmxlCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzc2wtPmluX2xlZnQgPCBzc2wtPm5leHRfcmVjb3JkX29mZnNldCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3NsLT5pbl9sZWZ0IC09IHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0OworCisgICAgICAgICAgICBpZiggc3NsLT5pbl9sZWZ0ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAibmV4dCByZWNvcmQgaW4gc2FtZSBkYXRhZ3JhbSwgb2Zmc2V0OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCApICk7CisgICAgICAgICAgICAgICAgbWVtbW92ZSggc3NsLT5pbl9oZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9oZHIgKyBzc2wtPm5leHRfcmVjb3JkX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3NsLT5uZXh0X3JlY29yZF9vZmZzZXQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpbl9sZWZ0OiAlZCwgbmJfd2FudDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQsIG5iX3dhbnQgKSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIERvbmUgaWYgd2UgYWxyZWFkeSBoYXZlIGVub3VnaCBkYXRhLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIG5iX3dhbnQgPD0gc3NsLT5pbl9sZWZ0KQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGZldGNoIGlucHV0IiApICk7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEEgcmVjb3JkIGNhbid0IGJlIHNwbGl0IGFjY3Jvc3MgZGF0YWdyYW1zLiBJZiB3ZSBuZWVkIHRvIHJlYWQgYnV0CisgICAgICAgICAqIGFyZSBub3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyByZWNvcmQsIHRoZSBjYWxsZXIgZGlkIHNvbWV0aGluZworICAgICAgICAgKiB3cm9uZy4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2wtPmluX2xlZnQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIERvbid0IGV2ZW4gdHJ5IHRvIHJlYWQgaWYgdGltZSdzIG91dCBhbHJlYWR5LgorICAgICAgICAgKiBUaGlzIGF2b2lkcyBieS1wYXNzaW5nIHRoZSB0aW1lciB3aGVuIHJlcGVhdGVkbHkgcmVjZWl2aW5nIG1lc3NhZ2VzCisgICAgICAgICAqIHRoYXQgd2lsbCBlbmQgdXAgYmVpbmcgZHJvcHBlZC4KKyAgICAgICAgICovCisgICAgICAgIGlmKCBzc2xfY2hlY2tfdGltZXIoIHNzbCApICE9IDAgKQorICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gTUJFRFRMU19TU0xfQlVGRkVSX0xFTiAtICggc3NsLT5pbl9oZHIgLSBzc2wtPmluX2J1ZiApOworCisgICAgICAgICAgICBpZiggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgICAgICAgICAgICAgdGltZW91dCA9IHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3RpbWVvdXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGltZW91dCA9IHNzbC0+Y29uZi0+cmVhZF90aW1lb3V0OworCisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZfcmVjdl90aW1lb3V0OiAldSBtcyIsIHRpbWVvdXQgKSApOworCisgICAgICAgICAgICBpZiggc3NsLT5mX3JlY3ZfdGltZW91dCAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICByZXQgPSBzc2wtPmZfcmVjdl90aW1lb3V0KCBzc2wtPnBfYmlvLCBzc2wtPmluX2hkciwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsLT5mX3JlY3YoIHNzbC0+cF9iaW8sIHNzbC0+aW5faGRyLCBsZW4gKTsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAyLCAic3NsLT5mX3JlY3YoX3RpbWVvdXQpIiwgcmV0ICk7CisKKyAgICAgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ09OTl9FT0YgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInRpbWVvdXQiICkgKTsKKyAgICAgICAgICAgIHNzbF9zZXRfdGltZXIoIHNzbCwgMCApOworCisgICAgICAgICAgICBpZiggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHNzbF9kb3VibGVfcmV0cmFuc21pdF90aW1lb3V0KCBzc2wgKSAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaGFuZHNoYWtlIHRpbWVvdXQiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVElNRU9VVCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Jlc2VuZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Jlc2VuZCIsIHJldCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworICAgICAgICAgICAgfQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgICAgIGVsc2UgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisgICAgICAgICAgICAgICAgICAgICBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcmVzZW5kX2hlbGxvX3JlcXVlc3QoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfcmVzZW5kX2hlbGxvX3JlcXVlc3QiLCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAmJiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisgICAgICAgIH0KKworICAgICAgICBpZiggcmV0IDwgMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIHNzbC0+aW5fbGVmdCA9IHJldDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImluX2xlZnQ6ICVkLCBuYl93YW50OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbGVmdCwgbmJfd2FudCApICk7CisKKyAgICAgICAgd2hpbGUoIHNzbC0+aW5fbGVmdCA8IG5iX3dhbnQgKQorICAgICAgICB7CisgICAgICAgICAgICBsZW4gPSBuYl93YW50IC0gc3NsLT5pbl9sZWZ0OworCisgICAgICAgICAgICBpZiggc3NsX2NoZWNrX3RpbWVyKCBzc2wgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfVElNRU9VVDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5mX3JlY3ZfdGltZW91dCAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHNzbC0+Zl9yZWN2X3RpbWVvdXQoIHNzbC0+cF9iaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5faGRyICsgc3NsLT5pbl9sZWZ0LCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+cmVhZF90aW1lb3V0ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHNzbC0+Zl9yZWN2KCBzc2wtPnBfYmlvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9oZHIgKyBzc2wtPmluX2xlZnQsIGxlbiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpbl9sZWZ0OiAlZCwgbmJfd2FudDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbGVmdCwgbmJfd2FudCApICk7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDIsICJzc2wtPmZfcmVjdihfdGltZW91dCkiLCByZXQgKTsKKworICAgICAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DT05OX0VPRiApOworCisgICAgICAgICAgICBpZiggcmV0IDwgMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgc3NsLT5pbl9sZWZ0ICs9IHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZmV0Y2ggaW5wdXQiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogRmx1c2ggYW55IGRhdGEgbm90IHlldCB3cml0dGVuCisgKi8KK2ludCBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyICpidWYsIGk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGZsdXNoIG91dHB1dCIgKSApOworCisgICAgaWYoIHNzbC0+Zl9zZW5kID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJCYWQgdXNhZ2Ugb2YgbWJlZHRsc19zc2xfc2V0X2JpbygpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3IgbWJlZHRsc19zc2xfc2V0X2JpbygpIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgLyogQXZvaWQgaW5jcmVtZW50aW5nIGNvdW50ZXIgaWYgZGF0YSBpcyBmbHVzaGVkICovCisgICAgaWYoIHNzbC0+b3V0X2xlZnQgPT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGZsdXNoIG91dHB1dCIgKSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICB3aGlsZSggc3NsLT5vdXRfbGVmdCA+IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJtZXNzYWdlIGxlbmd0aDogJWQsIG91dF9sZWZ0OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApICsgc3NsLT5vdXRfbXNnbGVuLCBzc2wtPm91dF9sZWZ0ICkgKTsKKworICAgICAgICBidWYgPSBzc2wtPm91dF9oZHIgKyBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSArCisgICAgICAgICAgICAgIHNzbC0+b3V0X21zZ2xlbiAtIHNzbC0+b3V0X2xlZnQ7CisgICAgICAgIHJldCA9IHNzbC0+Zl9zZW5kKCBzc2wtPnBfYmlvLCBidWYsIHNzbC0+b3V0X2xlZnQgKTsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDIsICJzc2wtPmZfc2VuZCIsIHJldCApOworCisgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIHNzbC0+b3V0X2xlZnQgLT0gcmV0OworICAgIH0KKworICAgIGZvciggaSA9IDg7IGkgPiBzc2xfZXBfbGVuKCBzc2wgKTsgaS0tICkKKyAgICAgICAgaWYoICsrc3NsLT5vdXRfY3RyW2kgLSAxXSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgLyogVGhlIGxvb3AgZ29lcyB0byBpdHMgZW5kIGlmZiB0aGUgY291bnRlciBpcyB3cmFwcGluZyAqLworICAgIGlmKCBpID09IHNzbF9lcF9sZW4oIHNzbCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAib3V0Z29pbmcgbWVzc2FnZSBjb3VudGVyIHdvdWxkIHdyYXAiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ09VTlRFUl9XUkFQUElORyApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZmx1c2ggb3V0cHV0IiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIERUTFMgcmV0cmFuc21pc3Npb24gc3RhdGUgbWFjaGluZQorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorLyoKKyAqIEFwcGVuZCBjdXJyZW50IGhhbmRzaGFrZSBtZXNzYWdlIHRvIGN1cnJlbnQgb3V0Z29pbmcgZmxpZ2h0CisgKi8KK3N0YXRpYyBpbnQgc3NsX2ZsaWdodF9hcHBlbmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKm1zZzsKKworICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBjdXJyZW50IG1lc3NhZ2UgKi8KKyAgICBpZiggKCBtc2cgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKSApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jICVkIGJ5dGVzIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBtYmVkdGxzX3NzbF9mbGlnaHRfaXRlbSApICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisgICAgfQorCisgICAgaWYoICggbXNnLT5wID0gbWJlZHRsc19jYWxsb2MoIDEsIHNzbC0+b3V0X21zZ2xlbiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jICVkIGJ5dGVzIGZhaWxlZCIsIHNzbC0+b3V0X21zZ2xlbiApICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggbXNnICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIC8qIENvcHkgY3VycmVudCBoYW5kc2hha2UgbWVzc2FnZSB3aXRoIGhlYWRlcnMgKi8KKyAgICBtZW1jcHkoIG1zZy0+cCwgc3NsLT5vdXRfbXNnLCBzc2wtPm91dF9tc2dsZW4gKTsKKyAgICBtc2ctPmxlbiA9IHNzbC0+b3V0X21zZ2xlbjsKKyAgICBtc2ctPnR5cGUgPSBzc2wtPm91dF9tc2d0eXBlOworICAgIG1zZy0+bmV4dCA9IE5VTEw7CisKKyAgICAvKiBBcHBlbmQgdG8gdGhlIGN1cnJlbnQgZmxpZ2h0ICovCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5mbGlnaHQgPT0gTlVMTCApCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5mbGlnaHQgPSBtc2c7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKmN1ciA9IHNzbC0+aGFuZHNoYWtlLT5mbGlnaHQ7CisgICAgICAgIHdoaWxlKCBjdXItPm5leHQgIT0gTlVMTCApCisgICAgICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgICAgIGN1ci0+bmV4dCA9IG1zZzsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEZyZWUgdGhlIGN1cnJlbnQgZmxpZ2h0IG9mIGhhbmRzaGFrZSBtZXNzYWdlcworICovCitzdGF0aWMgdm9pZCBzc2xfZmxpZ2h0X2ZyZWUoIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpmbGlnaHQgKQoreworICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpjdXIgPSBmbGlnaHQ7CisgICAgbWJlZHRsc19zc2xfZmxpZ2h0X2l0ZW0gKm5leHQ7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbmV4dCA9IGN1ci0+bmV4dDsKKworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+cCApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ciApOworCisgICAgICAgIGN1ciA9IG5leHQ7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQorc3RhdGljIHZvaWQgc3NsX2R0bHNfcmVwbGF5X3Jlc2V0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKyNlbmRpZgorCisvKgorICogU3dhcCB0cmFuc2Zvcm1fb3V0IGFuZCBvdXRfY3RyIHdpdGggdGhlIGFsdGVybmF0aXZlIG9uZXMKKyAqLworc3RhdGljIHZvaWQgc3NsX3N3YXBfZXBvY2hzKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdG1wX3RyYW5zZm9ybTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcF9vdXRfY3RyWzhdOworCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX291dCA9PSBzc2wtPmhhbmRzaGFrZS0+YWx0X3RyYW5zZm9ybV9vdXQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJza2lwIHN3YXAgZXBvY2hzIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInN3YXAgZXBvY2hzIiApICk7CisKKyAgICAvKiBTd2FwIHRyYW5zZm9ybXMgKi8KKyAgICB0bXBfdHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgPSBzc2wtPnRyYW5zZm9ybV9vdXQ7CisgICAgc3NsLT50cmFuc2Zvcm1fb3V0ICAgICAgICAgICAgICAgID0gc3NsLT5oYW5kc2hha2UtPmFsdF90cmFuc2Zvcm1fb3V0OworICAgIHNzbC0+aGFuZHNoYWtlLT5hbHRfdHJhbnNmb3JtX291dCA9IHRtcF90cmFuc2Zvcm07CisKKyAgICAvKiBTd2FwIGVwb2NoICsgc2VxdWVuY2VfbnVtYmVyICovCisgICAgbWVtY3B5KCB0bXBfb3V0X2N0ciwgICAgICAgICAgICAgICAgIHNzbC0+b3V0X2N0ciwgICAgICAgICAgICAgICAgOCApOworICAgIG1lbWNweSggc3NsLT5vdXRfY3RyLCAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+YWx0X291dF9jdHIsIDggKTsKKyAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5hbHRfb3V0X2N0ciwgdG1wX291dF9jdHIsICAgICAgICAgICAgICAgICA4ICk7CisKKyAgICAvKiBBZGp1c3QgdG8gdGhlIG5ld2x5IGFjdGl2YXRlZCB0cmFuc2Zvcm0gKi8KKyAgICBpZiggc3NsLT50cmFuc2Zvcm1fb3V0ICE9IE5VTEwgJiYKKyAgICAgICAgc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICB7CisgICAgICAgIHNzbC0+b3V0X21zZyA9IHNzbC0+b3V0X2l2ICsgc3NsLT50cmFuc2Zvcm1fb3V0LT5pdmxlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT50cmFuc2Zvcm1fb3V0LT5maXhlZF9pdmxlbjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzc2wtPm91dF9tc2cgPSBzc2wtPm91dF9pdjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorICAgIGlmKCBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUoIHNzbCwgTUJFRFRMU19TU0xfQ0hBTk5FTF9PVVRCT1VORCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVEICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqIFJldHJhbnNtaXQgdGhlIGN1cnJlbnQgZmxpZ2h0IG9mIG1lc3NhZ2VzLgorICoKKyAqIE5lZWQgdG8gcmVtZW1iZXIgdGhlIGN1cnJlbnQgbWVzc2FnZSBpbiBjYXNlIGZsdXNoX291dHB1dCByZXR1cm5zCisgKiBXQU5UX1dSSVRFLCBjYXVzaW5nIHVzIHRvIGV4aXQgdGhpcyBmdW5jdGlvbiBhbmQgY29tZSBiYWNrIGxhdGVyLgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bnRpbCBzdGF0ZSBpcyBubyBsb25nZXIgU0VORElORy4KKyAqLworaW50IG1iZWR0bHNfc3NsX3Jlc2VuZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IG1iZWR0bHNfc3NsX3Jlc2VuZCIgKSApOworCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlICE9IE1CRURUTFNfU1NMX1JFVFJBTlNfU0VORElORyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImluaXRpYWxpc2UgcmVzZW5kaW5nIiApICk7CisKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPmN1cl9tc2cgPSBzc2wtPmhhbmRzaGFrZS0+ZmxpZ2h0OworICAgICAgICBzc2xfc3dhcF9lcG9jaHMoIHNzbCApOworCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID0gTUJFRFRMU19TU0xfUkVUUkFOU19TRU5ESU5HOworICAgIH0KKworICAgIHdoaWxlKCBzc2wtPmhhbmRzaGFrZS0+Y3VyX21zZyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtICpjdXIgPSBzc2wtPmhhbmRzaGFrZS0+Y3VyX21zZzsKKworICAgICAgICAvKiBTd2FwIGVwb2NocyBiZWZvcmUgc2VuZGluZyBGaW5pc2hlZDogd2UgY2FuJ3QgZG8gaXQgYWZ0ZXIKKyAgICAgICAgICogc2VuZGluZyBDaGFuZ2VDaXBoZXJTcGVjLCBpbiBjYXNlIHdyaXRlIHJldHVybnMgV0FOVF9SRUFELgorICAgICAgICAgKiBNdXN0IGJlIGRvbmUgYmVmb3JlIGNvcHlpbmcsIG1heSBjaGFuZ2Ugb3V0X21zZyBwb2ludGVyICovCisgICAgICAgIGlmKCBjdXItPnR5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSAmJgorICAgICAgICAgICAgY3VyLT5wWzBdID09IE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsX3N3YXBfZXBvY2hzKCBzc2wgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggc3NsLT5vdXRfbXNnLCBjdXItPnAsIGN1ci0+bGVuICk7CisgICAgICAgIHNzbC0+b3V0X21zZ2xlbiA9IGN1ci0+bGVuOworICAgICAgICBzc2wtPm91dF9tc2d0eXBlID0gY3VyLT50eXBlOworCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jdXJfbXNnID0gY3VyLT5uZXh0OworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInJlc2VudCBoYW5kc2hha2UgbWVzc2FnZSBoZWFkZXIiLCBzc2wtPm91dF9tc2csIDEyICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID0gTUJFRFRMU19TU0xfUkVUUkFOU19GSU5JU0hFRDsKKyAgICBlbHNlCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfV0FJVElORzsKKyAgICAgICAgc3NsX3NldF90aW1lciggc3NsLCBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF90aW1lb3V0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBtYmVkdGxzX3NzbF9yZXNlbmQiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVG8gYmUgY2FsbGVkIHdoZW4gdGhlIGxhc3QgbWVzc2FnZSBvZiBhbiBpbmNvbWluZyBmbGlnaHQgaXMgcmVjZWl2ZWQuCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIC8qIFdlIHdvbid0IG5lZWQgdG8gcmVzZW5kIHRoYXQgb25lIGFueSBtb3JlICovCisgICAgc3NsX2ZsaWdodF9mcmVlKCBzc2wtPmhhbmRzaGFrZS0+ZmxpZ2h0ICk7CisgICAgc3NsLT5oYW5kc2hha2UtPmZsaWdodCA9IE5VTEw7CisgICAgc3NsLT5oYW5kc2hha2UtPmN1cl9tc2cgPSBOVUxMOworCisgICAgLyogVGhlIG5leHQgaW5jb21pbmcgZmxpZ2h0IHdpbGwgc3RhcnQgd2l0aCB0aGlzIG1zZ19zZXEgKi8KKyAgICBzc2wtPmhhbmRzaGFrZS0+aW5fZmxpZ2h0X3N0YXJ0X3NlcSA9IHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxOworCisgICAgLyogQ2FuY2VsIHRpbWVyICovCisgICAgc3NsX3NldF90aW1lciggc3NsLCAwICk7CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgJiYKKyAgICAgICAgc3NsLT5pbl9tc2dbMF0gPT0gTUJFRFRMU19TU0xfSFNfRklOSVNIRUQgKQorICAgIHsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPSBNQkVEVExTX1NTTF9SRVRSQU5TX0ZJTklTSEVEOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID0gTUJFRFRMU19TU0xfUkVUUkFOU19QUkVQQVJJTkc7Cit9CisKKy8qCisgKiBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgbGFzdCBtZXNzYWdlIG9mIGFuIG91dGdvaW5nIGZsaWdodCBpcyBzZW5kLgorICovCit2b2lkIG1iZWR0bHNfc3NsX3NlbmRfZmxpZ2h0X2NvbXBsZXRlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBzc2xfcmVzZXRfcmV0cmFuc21pdF90aW1lb3V0KCBzc2wgKTsKKyAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3RpbWVvdXQgKTsKKworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSAmJgorICAgICAgICBzc2wtPmluX21zZ1swXSA9PSBNQkVEVExTX1NTTF9IU19GSU5JU0hFRCApCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfRklOSVNIRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPSBNQkVEVExTX1NTTF9SRVRSQU5TX1dBSVRJTkc7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisvKgorICogUmVjb3JkIGxheWVyIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBXcml0ZSBjdXJyZW50IHJlY29yZC4KKyAqIFVzZXMgc3NsLT5vdXRfbXNndHlwZSwgc3NsLT5vdXRfbXNnbGVuIGFuZCBieXRlcyBhdCBzc2wtPm91dF9tc2cuCisgKi8KK2ludCBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCwgZG9uZSA9IDAsIG91dF9tc2dfdHlwZTsKKyAgICBzaXplX3QgbGVuID0gc3NsLT5vdXRfbXNnbGVuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSByZWNvcmQiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgIHNzbC0+aGFuZHNoYWtlICE9IE5VTEwgJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnJldHJhbnNtaXRfc3RhdGUgPT0gTUJFRFRMU19TU0xfUkVUUkFOU19TRU5ESU5HICkKKyAgICB7CisgICAgICAgIDsgLyogU2tpcCBzcGVjaWFsIGhhbmRzaGFrZSB0cmVhdG1lbnQgd2hlbiByZXNlbmRpbmcgKi8KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgaWYoIHNzbC0+b3V0X21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBvdXRfbXNnX3R5cGUgPSBzc2wtPm91dF9tc2dbMF07CisKKyAgICAgICAgaWYoIG91dF9tc2dfdHlwZSAhPSBNQkVEVExTX1NTTF9IU19IRUxMT19SRVFVRVNUICYmCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5vdXRfbXNnWzFdID0gKHVuc2lnbmVkIGNoYXIpKCAoIGxlbiAtIDQgKSA+PiAxNiApOworICAgICAgICBzc2wtPm91dF9tc2dbMl0gPSAodW5zaWduZWQgY2hhcikoICggbGVuIC0gNCApID4+ICA4ICk7CisgICAgICAgIHNzbC0+b3V0X21zZ1szXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBsZW4gLSA0ICkgICAgICAgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBEVExTIGhhcyBhZGRpdGlvbmFsIGZpZWxkcyBpbiB0aGUgSGFuZHNoYWtlIGxheWVyLAorICAgICAgICAgKiBiZXR3ZWVuIHRoZSBsZW5ndGggZmllbGQgYW5kIHRoZSBhY3R1YWwgcGF5bG9hZDoKKyAgICAgICAgICogICAgICB1aW50MTYgbWVzc2FnZV9zZXE7CisgICAgICAgICAqICAgICAgdWludDI0IGZyYWdtZW50X29mZnNldDsKKyAgICAgICAgICogICAgICB1aW50MjQgZnJhZ21lbnRfbGVuZ3RoOworICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBNYWtlIHJvb20gZm9yIHRoZSBhZGRpdGlvbmFsIERUTFMgZmllbGRzICovCisgICAgICAgICAgICBtZW1tb3ZlKCBzc2wtPm91dF9tc2cgKyAxMiwgc3NsLT5vdXRfbXNnICsgNCwgbGVuIC0gNCApOworICAgICAgICAgICAgc3NsLT5vdXRfbXNnbGVuICs9IDg7CisgICAgICAgICAgICBsZW4gKz0gODsKKworICAgICAgICAgICAgLyogV3JpdGUgbWVzc2FnZV9zZXEgYW5kIHVwZGF0ZSBpdCwgZXhjZXB0IGZvciBIZWxsb1JlcXVlc3QgKi8KKyAgICAgICAgICAgIGlmKCBvdXRfbXNnX3R5cGUgIT0gTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3NsLT5vdXRfbXNnWzRdID0gKCBzc2wtPmhhbmRzaGFrZS0+b3V0X21zZ19zZXEgPj4gOCApICYgMHhGRjsKKyAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2dbNV0gPSAoIHNzbC0+aGFuZHNoYWtlLT5vdXRfbXNnX3NlcSAgICAgICkgJiAweEZGOworICAgICAgICAgICAgICAgICsrKCBzc2wtPmhhbmRzaGFrZS0+b3V0X21zZ19zZXEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzc2wtPm91dF9tc2dbNF0gPSAwOworICAgICAgICAgICAgICAgIHNzbC0+b3V0X21zZ1s1XSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFdlIGRvbid0IGZyYWdtZW50LCBzbyBmcmFnX29mZnNldCA9IDAgYW5kIGZyYWdfbGVuID0gbGVuICovCisgICAgICAgICAgICBtZW1zZXQoIHNzbC0+b3V0X21zZyArIDYsIDB4MDAsIDMgKTsKKyAgICAgICAgICAgIG1lbWNweSggc3NsLT5vdXRfbXNnICsgOSwgc3NsLT5vdXRfbXNnICsgMSwgMyApOworICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisgICAgICAgIGlmKCBvdXRfbXNnX3R5cGUgIT0gTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVCApCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dXBkYXRlX2NoZWNrc3VtKCBzc2wsIHNzbC0+b3V0X21zZywgbGVuICk7CisgICAgfQorCisgICAgLyogU2F2ZSBoYW5kc2hha2UgYW5kIENDUyBtZXNzYWdlcyBmb3IgcmVzZW5kaW5nICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgc3NsLT5oYW5kc2hha2UgIT0gTlVMTCAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSAhPSBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcgJiYKKyAgICAgICAgKCBzc2wtPm91dF9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMgfHwKKyAgICAgICAgICBzc2wtPm91dF9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfZmxpZ2h0X2FwcGVuZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX2ZsaWdodF9hcHBlbmQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX291dCAhPSBOVUxMICYmCisgICAgICAgIHNzbC0+c2Vzc2lvbl9vdXQtPmNvbXByZXNzaW9uID09IE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX2NvbXByZXNzX2J1Ziggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX2NvbXByZXNzX2J1ZiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHNzbC0+b3V0X21zZ2xlbjsKKyAgICB9CisjZW5kaWYgLypNQkVEVExTX1pMSUJfU1VQUE9SVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCisgICAgaWYoIG1iZWR0bHNfc3NsX2h3X3JlY29yZF93cml0ZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZ29pbmcgZm9yIG1iZWR0bHNfc3NsX2h3X3JlY29yZF93cml0ZSgpIiApICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaHdfcmVjb3JkX3dyaXRlKCBzc2wgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFMTFRIUk9VR0ggKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9od19yZWNvcmRfd3JpdGUiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgIGRvbmUgPSAxOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwgKi8KKyAgICBpZiggIWRvbmUgKQorICAgIHsKKyAgICAgICAgc3NsLT5vdXRfaGRyWzBdID0gKHVuc2lnbmVkIGNoYXIpIHNzbC0+b3V0X21zZ3R5cGU7CisgICAgICAgIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIHNzbC0+bWFqb3JfdmVyLCBzc2wtPm1pbm9yX3ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBzc2wtPm91dF9oZHIgKyAxICk7CisKKyAgICAgICAgc3NsLT5vdXRfbGVuWzBdID0gKHVuc2lnbmVkIGNoYXIpKCBsZW4gPj4gOCApOworICAgICAgICBzc2wtPm91dF9sZW5bMV0gPSAodW5zaWduZWQgY2hhcikoIGxlbiAgICAgICk7CisKKyAgICAgICAgaWYoIHNzbC0+dHJhbnNmb3JtX291dCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gc3NsX2VuY3J5cHRfYnVmKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9lbmNyeXB0X2J1ZiIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxlbiA9IHNzbC0+b3V0X21zZ2xlbjsKKyAgICAgICAgICAgIHNzbC0+b3V0X2xlblswXSA9ICh1bnNpZ25lZCBjaGFyKSggbGVuID4+IDggKTsKKyAgICAgICAgICAgIHNzbC0+b3V0X2xlblsxXSA9ICh1bnNpZ25lZCBjaGFyKSggbGVuICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+b3V0X2xlZnQgPSBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSArIHNzbC0+b3V0X21zZ2xlbjsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIm91dHB1dCByZWNvcmQ6IG1zZ3R5cGUgPSAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uID0gWyVkOiVkXSwgbXNnbGVuID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPm91dF9oZHJbMF0sIHNzbC0+b3V0X2hkclsxXSwgc3NsLT5vdXRfaGRyWzJdLAorICAgICAgICAgICAgICAgICAgICAgKCBzc2wtPm91dF9sZW5bMF0gPDwgOCApIHwgc3NsLT5vdXRfbGVuWzFdICkgKTsKKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJvdXRwdXQgcmVjb3JkIHNlbnQgdG8gbmV0d29yayIsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+b3V0X2hkciwgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKyBzc2wtPm91dF9tc2dsZW4gKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIHJlY29yZCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisvKgorICogTWFyayBiaXRzIGluIGJpdG1hc2sgKHVzZWQgZm9yIERUTFMgSFMgcmVhc3NlbWJseSkKKyAqLworc3RhdGljIHZvaWQgc3NsX2JpdG1hc2tfc2V0KCB1bnNpZ25lZCBjaGFyICptYXNrLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuICkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnRfYml0cywgZW5kX2JpdHM7CisKKyAgICBzdGFydF9iaXRzID0gOCAtICggb2Zmc2V0ICUgOCApOworICAgIGlmKCBzdGFydF9iaXRzICE9IDggKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGZpcnN0X2J5dGVfaWR4ID0gb2Zmc2V0IC8gODsKKworICAgICAgICAvKiBTcGVjaWFsIGNhc2UgKi8KKyAgICAgICAgaWYoIGxlbiA8PSBzdGFydF9iaXRzICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKCA7IGxlbiAhPSAwOyBsZW4tLSApCisgICAgICAgICAgICAgICAgbWFza1tmaXJzdF9ieXRlX2lkeF0gfD0gMSA8PCAoIHN0YXJ0X2JpdHMgLSBsZW4gKTsKKworICAgICAgICAgICAgLyogQXZvaWQgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG9mZnNldCBvciBsZW4gYmVjb21pbmcgaW52YWxpZCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXJ0X2JpdHM7IC8qIE5vdyBvZmZzZXQgJSA4ID09IDAgKi8KKyAgICAgICAgbGVuIC09IHN0YXJ0X2JpdHM7CisKKyAgICAgICAgZm9yKCA7IHN0YXJ0X2JpdHMgIT0gMDsgc3RhcnRfYml0cy0tICkKKyAgICAgICAgICAgIG1hc2tbZmlyc3RfYnl0ZV9pZHhdIHw9IDEgPDwgKCBzdGFydF9iaXRzIC0gMSApOworICAgIH0KKworICAgIGVuZF9iaXRzID0gbGVuICUgODsKKyAgICBpZiggZW5kX2JpdHMgIT0gMCApCisgICAgeworICAgICAgICBzaXplX3QgbGFzdF9ieXRlX2lkeCA9ICggb2Zmc2V0ICsgbGVuICkgLyA4OworCisgICAgICAgIGxlbiAtPSBlbmRfYml0czsgLyogTm93IGxlbiAlIDggPT0gMCAqLworCisgICAgICAgIGZvciggOyBlbmRfYml0cyAhPSAwOyBlbmRfYml0cy0tICkKKyAgICAgICAgICAgIG1hc2tbbGFzdF9ieXRlX2lkeF0gfD0gMSA8PCAoIDggLSBlbmRfYml0cyApOworICAgIH0KKworICAgIG1lbXNldCggbWFzayArIG9mZnNldCAvIDgsIDB4RkYsIGxlbiAvIDggKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgYml0bWFzayBpcyBmdWxsCisgKi8KK3N0YXRpYyBpbnQgc3NsX2JpdG1hc2tfY2hlY2soIHVuc2lnbmVkIGNoYXIgKm1hc2ssIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yKCBpID0gMDsgaSA8IGxlbiAvIDg7IGkrKyApCisgICAgICAgIGlmKCBtYXNrW2ldICE9IDB4RkYgKQorICAgICAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgZm9yKCBpID0gMDsgaSA8IGxlbiAlIDg7IGkrKyApCisgICAgICAgIGlmKCAoIG1hc2tbbGVuIC8gOF0gJiAoIDEgPDwgKCA3IC0gaSApICkgKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUmVhc3NlbWJsZSBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2VzLgorICoKKyAqIFVzZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIHJlYXNzZW1ibHksIGRpdmlkZWQgaW4gdHdvIHBhcnRzOgorICogLSB0aGUgZmlyc3QgaG9sZHMgdGhlIHJlYXNzZW1ibGVkIG1lc3NhZ2UgKGluY2x1ZGluZyBoYW5kc2hha2UgaGVhZGVyKSwKKyAqIC0gdGhlIHNlY29uZCBob2xkcyBhIGJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBwYXJ0cyBvZiB0aGUgbWVzc2FnZQorICogICAoZXhjbHVkaW5nIGhlYWRlcnMpIGhhdmUgYmVlbiByZWNlaXZlZCBzbyBmYXIuCisgKi8KK3N0YXRpYyBpbnQgc3NsX3JlYXNzZW1ibGVfZHRsc19oYW5kc2hha2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgdW5zaWduZWQgY2hhciAqbXNnLCAqYml0bWFzazsKKyAgICBzaXplX3QgZnJhZ19sZW4sIGZyYWdfb2ZmOworICAgIHNpemVfdCBtc2dfbGVuID0gc3NsLT5pbl9oc2xlbiAtIDEyOyAvKiBXaXRob3V0IGhlYWRlcnMgKi8KKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAibm90IHN1cHBvcnRlZCBvdXRzaWRlIGhhbmRzaGFrZSAoZm9yIG5vdykiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGZpcnN0IGZyYWdtZW50LCBjaGVjayBzaXplIGFuZCBhbGxvY2F0ZSBidWZmZXIKKyAgICAgKi8KKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPmhzX21zZyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY19sZW47CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJpbml0aWFsaXplIHJlYXNzZW1ibHksIHRvdGFsIGxlbmd0aCA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfbGVuICkgKTsKKworICAgICAgICBpZiggc3NsLT5pbl9oc2xlbiA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiaGFuZHNoYWtlIG1lc3NhZ2UgdG9vIGxhcmdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBUaGUgYml0bWFzayBuZWVkcyBvbmUgYml0IHBlciBieXRlIG9mIG1lc3NhZ2UgZXhjbHVkaW5nIGhlYWRlciAqLworICAgICAgICBhbGxvY19sZW4gPSAxMiArIG1zZ19sZW4gKyBtc2dfbGVuIC8gOCArICggbXNnX2xlbiAlIDggIT0gMCApOworCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5oc19tc2cgPSBtYmVkdGxzX2NhbGxvYyggMSwgYWxsb2NfbGVuICk7CisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jIGZhaWxlZCAoJWQgYnl0ZXMpIiwgYWxsb2NfbGVuICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJlcGFyZSBmaW5hbCBoZWFkZXI6IGNvcHkgbXNnX3R5cGUsIGxlbmd0aCBhbmQgbWVzc2FnZV9zZXEsCisgICAgICAgICAqIHRoZW4gYWRkIHN0YW5kYXJkaXNlZCBmcmFnbWVudF9vZmZzZXQgYW5kIGZyYWdtZW50X2xlbmd0aCAqLworICAgICAgICBtZW1jcHkoIHNzbC0+aGFuZHNoYWtlLT5oc19tc2csIHNzbC0+aW5fbXNnLCA2ICk7CisgICAgICAgIG1lbXNldCggc3NsLT5oYW5kc2hha2UtPmhzX21zZyArIDYsIDAsIDMgKTsKKyAgICAgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnICsgOSwKKyAgICAgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnICsgMSwgMyApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgbXNnX3R5cGUgYW5kIGxlbmd0aCBhcmUgY29uc2lzdGVudCAqLworICAgICAgICBpZiggbWVtY21wKCBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnLCBzc2wtPmluX21zZywgNCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImZyYWdtZW50IGhlYWRlciBtaXNtYXRjaCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1zZyA9IHNzbC0+aGFuZHNoYWtlLT5oc19tc2cgKyAxMjsKKyAgICBiaXRtYXNrID0gbXNnICsgbXNnX2xlbjsKKworICAgIC8qCisgICAgICogQ2hlY2sgYW5kIGNvcHkgY3VycmVudCBmcmFnbWVudAorICAgICAqLworICAgIGZyYWdfb2ZmID0gKCBzc2wtPmluX21zZ1s2XSAgPDwgMTYgKSB8CisgICAgICAgICAgICAgICAoIHNzbC0+aW5fbXNnWzddICA8PCA4ICApIHwKKyAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbOF07CisgICAgZnJhZ19sZW4gPSAoIHNzbC0+aW5fbXNnWzldICA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICggc3NsLT5pbl9tc2dbMTBdIDw8IDggICkgfAorICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ1sxMV07CisKKyAgICBpZiggZnJhZ19vZmYgKyBmcmFnX2xlbiA+IG1zZ19sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpbnZhbGlkIGZyYWdtZW50IG9mZnNldC9sZW46ICVkICsgJWQgPiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdfb2ZmLCBmcmFnX2xlbiwgbXNnX2xlbiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgfQorCisgICAgaWYoIGZyYWdfbGVuICsgMTIgPiBzc2wtPmluX21zZ2xlbiApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImludmFsaWQgZnJhZ21lbnQgbGVuZ3RoOiAlZCArIDEyID4gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnX2xlbiwgc3NsLT5pbl9tc2dsZW4gKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiYWRkaW5nIGZyYWdtZW50LCBvZmZzZXQgPSAlZCwgbGVuZ3RoID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ19vZmYsIGZyYWdfbGVuICkgKTsKKworICAgIG1lbWNweSggbXNnICsgZnJhZ19vZmYsIHNzbC0+aW5fbXNnICsgMTIsIGZyYWdfbGVuICk7CisgICAgc3NsX2JpdG1hc2tfc2V0KCBiaXRtYXNrLCBmcmFnX29mZiwgZnJhZ19sZW4gKTsKKworICAgIC8qCisgICAgICogRG8gd2UgaGF2ZSB0aGUgY29tcGxldGUgbWVzc2FnZSBieSBub3c/CisgICAgICogSWYgeWVzLCBmaW5hbGl6ZSBpdCwgZWxzZSBhc2sgdG8gcmVhZCB0aGUgbmV4dCByZWNvcmQuCisgICAgICovCisgICAgaWYoIHNzbF9iaXRtYXNrX2NoZWNrKCBiaXRtYXNrLCBtc2dfbGVuICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIm1lc3NhZ2UgaXMgbm90IGNvbXBsZXRlIHlldCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImhhbmRzaGFrZSBtZXNzYWdlIGNvbXBsZXRlZCIgKSApOworCisgICAgaWYoIGZyYWdfbGVuICsgMTIgPCBzc2wtPmluX21zZ2xlbiApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBXZSdnb3QgbW9yZSBoYW5kc2hha2UgbWVzc2FnZXMgaW4gdGhlIHNhbWUgcmVjb3JkLgorICAgICAgICAgKiBUaGlzIGNhc2UgaXMgbm90IGhhbmRsZWQgbm93IGJlY2F1c2Ugbm8ga25vdyBpbXBsZW1lbnRhdGlvbiBkb2VzCisgICAgICAgICAqIHRoYXQgYW5kIGl0J3MgaGFyZCB0byB0ZXN0LCBzbyB3ZSBwcmVmZXIgdG8gZmFpbCBjbGVhbmx5IGZvciBub3cuCisgICAgICAgICAqLworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImxhc3QgZnJhZ21lbnQgbm90IGFsb25lIGluIGl0cyByZWNvcmQiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX2xlZnQgPiBzc2wtPm5leHRfcmVjb3JkX29mZnNldCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBXZSd2ZSBnb3QgbW9yZSBkYXRhIGluIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVjb3JkLAorICAgICAgICAgKiB0aGF0IHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlLiBNb3ZlIGl0IGJlZm9yZSB3cml0aW5nIHRoZQorICAgICAgICAgKiByZWFzc2VtYmxlZCBtZXNzYWdlLCBhbmQgYWRqdXN0IGluX2xlZnQgYW5kIG5leHRfcmVjb3JkX29mZnNldC4KKyAgICAgICAgICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN1cl9yZW1haW4gPSBzc2wtPmluX2hkciArIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBjaGFyICpuZXdfcmVtYWluID0gc3NsLT5pbl9tc2cgKyBzc2wtPmluX2hzbGVuOworICAgICAgICBzaXplX3QgcmVtYWluX2xlbiA9IHNzbC0+aW5fbGVmdCAtIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0OworCisgICAgICAgIC8qIEZpcnN0IGNvbXB1dGUgYW5kIGNoZWNrIG5ldyBsZW5ndGhzICovCisgICAgICAgIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0ID0gbmV3X3JlbWFpbiAtIHNzbC0+aW5faGRyOworICAgICAgICBzc2wtPmluX2xlZnQgPSBzc2wtPm5leHRfcmVjb3JkX29mZnNldCArIHJlbWFpbl9sZW47CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbGVmdCA+IE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkoIHNzbC0+aW5faGRyIC0gc3NsLT5pbl9idWYgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVhc3NlbWJsZWQgbWVzc2FnZSB0b28gbGFyZ2UgZm9yIGJ1ZmZlciIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQlVGRkVSX1RPT19TTUFMTCApOworICAgICAgICB9CisKKyAgICAgICAgbWVtbW92ZSggbmV3X3JlbWFpbiwgY3VyX3JlbWFpbiwgcmVtYWluX2xlbiApOworICAgIH0KKworICAgIG1lbWNweSggc3NsLT5pbl9tc2csIHNzbC0+aGFuZHNoYWtlLT5oc19tc2csIHNzbC0+aW5faHNsZW4gKTsKKworICAgIG1iZWR0bHNfZnJlZSggc3NsLT5oYW5kc2hha2UtPmhzX21zZyApOworICAgIHNzbC0+aGFuZHNoYWtlLT5oc19tc2cgPSBOVUxMOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCAzLCAicmVhc3NlbWJsZWQgaGFuZHNoYWtlIG1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnLCBzc2wtPmluX2hzbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisKK2ludCBtYmVkdGxzX3NzbF9wcmVwYXJlX2hhbmRzaGFrZV9yZWNvcmQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbC0+aW5fbXNnbGVuIDwgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJoYW5kc2hha2UgbWVzc2FnZSB0b28gc2hvcnQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgfQorCisgICAgc3NsLT5pbl9oc2xlbiA9IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgKAorICAgICAgICAgICAgICAgICAgICAoIHNzbC0+aW5fbXNnWzFdIDw8IDE2ICkgfAorICAgICAgICAgICAgICAgICAgICAoIHNzbC0+aW5fbXNnWzJdIDw8IDggICkgfAorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnWzNdICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImhhbmRzaGFrZSBtZXNzYWdlOiBtc2dsZW4gPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgJWQsIHR5cGUgPSAlZCwgaHNsZW4gPSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiwgc3NsLT5pbl9tc2dbMF0sIHNzbC0+aW5faHNsZW4gKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgdW5zaWduZWQgaW50IHJlY3ZfbXNnX3NlcSA9ICggc3NsLT5pbl9tc2dbNF0gPDwgOCApIHwgc3NsLT5pbl9tc2dbNV07CisKKyAgICAgICAgLyogc3NsLT5oYW5kc2hha2UgaXMgTlVMTCB3aGVuIHJlY2VpdmluZyBDbGllbnRIZWxsbyBmb3IgcmVuZWdvICovCisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICYmCisgICAgICAgICAgICByZWN2X21zZ19zZXEgIT0gc3NsLT5oYW5kc2hha2UtPmluX21zZ19zZXEgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBSZXRyYW5zbWl0IG9ubHkgb24gbGFzdCBtZXNzYWdlIGZyb20gcHJldmlvdXMgZmxpZ2h0LCB0byBhdm9pZAorICAgICAgICAgICAgICogdG9vIG1hbnkgcmV0cmFuc21pc3Npb25zLgorICAgICAgICAgICAgICogQmVzaWRlcywgTm8gc2FuZSBzZXJ2ZXIgZXZlciByZXRyYW5zbWl0cyBIZWxsb1ZlcmlmeVJlcXVlc3QgKi8KKyAgICAgICAgICAgIGlmKCByZWN2X21zZ19zZXEgPT0gc3NsLT5oYW5kc2hha2UtPmluX2ZsaWdodF9zdGFydF9zZXEgLSAxICYmCisgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfSEVMTE9fVkVSSUZZX1JFUVVFU1QgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAicmVjZWl2ZWQgbWVzc2FnZSBmcm9tIGxhc3QgZmxpZ2h0LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZV9zZXEgPSAlZCwgc3RhcnRfb2ZfZmxpZ2h0ID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdl9tc2dfc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmluX2ZsaWdodF9zdGFydF9zZXEgKSApOworCisgICAgICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVzZW5kKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVzZW5kIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZHJvcHBpbmcgb3V0LW9mLXNlcXVlbmNlIG1lc3NhZ2U6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlX3NlcSA9ICVkLCBleHBlY3RlZCA9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZfbXNnX3NlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxICkgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisgICAgICAgIH0KKyAgICAgICAgLyogV2FpdCB1bnRpbCBtZXNzYWdlIGNvbXBsZXRpb24gdG8gaW5jcmVtZW50IGluX21zZ19zZXEgKi8KKworICAgICAgICAvKiBSZWFzc2VtYmxlIGlmIGN1cnJlbnQgbWVzc2FnZSBpcyBmcmFnbWVudGVkIG9yIHJlYXNzZW1ibHkgaXMKKyAgICAgICAgICogYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gPCBzc2wtPmluX2hzbGVuIHx8CisgICAgICAgICAgICBtZW1jbXAoIHNzbC0+aW5fbXNnICsgNiwgIlwwXDBcMCIsICAgICAgICAzICkgIT0gMCB8fAorICAgICAgICAgICAgbWVtY21wKCBzc2wtPmluX21zZyArIDksIHNzbC0+aW5fbXNnICsgMSwgMyApICE9IDAgfHwKKyAgICAgICAgICAgICggc3NsLT5oYW5kc2hha2UgIT0gTlVMTCAmJiBzc2wtPmhhbmRzaGFrZS0+aHNfbXNnICE9IE5VTEwgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiApICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHNzbF9yZWFzc2VtYmxlX2R0bHNfaGFuZHNoYWtlKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9yZWFzc2VtYmxlX2R0bHNfaGFuZHNoYWtlIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworICAgIC8qIFdpdGggVExTIHdlIGRvbid0IGhhbmRsZSBmcmFnbWVudGF0aW9uIChmb3Igbm93KSAqLworICAgIGlmKCBzc2wtPmluX21zZ2xlbiA8IHNzbC0+aW5faHNsZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJUTFMgaGFuZHNoYWtlIGZyYWdtZW50YXRpb24gbm90IHN1cHBvcnRlZCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfdXBkYXRlX2hhbmRzaGFrZV9zdGF0dXMoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisKKyAgICBpZiggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT51cGRhdGVfY2hlY2tzdW0oIHNzbCwgc3NsLT5pbl9tc2csIHNzbC0+aW5faHNsZW4gKTsKKyAgICB9CisKKyAgICAvKiBIYW5kc2hha2UgbWVzc2FnZSBpcyBjb21wbGV0ZSwgaW5jcmVtZW50IGNvdW50ZXIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxKys7CisgICAgfQorI2VuZGlmCit9CisKKy8qCisgKiBEVExTIGFudGktcmVwbGF5OiBSRkMgNjM0NyA0LjEuMi42CisgKgorICogaW5fd2luZG93IGlzIGEgZmllbGQgb2YgYml0cyBudW1iZXJlZCBmcm9tIDAgKGxzYikgdG8gNjMgKG1zYikuCisgKiBCaXQgbiBpcyBzZXQgaWZmIHJlY29yZCBudW1iZXIgaW5fd2luZG93X3RvcCAtIG4gaGFzIGJlZW4gc2Vlbi4KKyAqCisgKiBVc3VhbGx5LCBpbl93aW5kb3dfdG9wIGlzIHRoZSBsYXN0IHJlY29yZCBudW1iZXIgc2VlbiBhbmQgdGhlIGxzYiBvZgorICogaW5fd2luZG93IGlzIHNldC4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoZSBpbml0aWFsIHN0YXRlIChyZWNvcmQgbnVtYmVyIDAKKyAqIG5vdCBzZWVuIHlldCkuCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCitzdGF0aWMgdm9pZCBzc2xfZHRsc19yZXBsYXlfcmVzZXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgc3NsLT5pbl93aW5kb3dfdG9wID0gMDsKKyAgICBzc2wtPmluX3dpbmRvdyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3Qgc3NsX2xvYWRfc2l4X2J5dGVzKCB1bnNpZ25lZCBjaGFyICpidWYgKQoreworICAgIHJldHVybiggKCAodWludDY0X3QpIGJ1ZlswXSA8PCA0MCApIHwKKyAgICAgICAgICAgICggKHVpbnQ2NF90KSBidWZbMV0gPDwgMzIgKSB8CisgICAgICAgICAgICAoICh1aW50NjRfdCkgYnVmWzJdIDw8IDI0ICkgfAorICAgICAgICAgICAgKCAodWludDY0X3QpIGJ1ZlszXSA8PCAxNiApIHwKKyAgICAgICAgICAgICggKHVpbnQ2NF90KSBidWZbNF0gPDwgIDggKSB8CisgICAgICAgICAgICAoICh1aW50NjRfdCkgYnVmWzVdICAgICAgICkgKTsKK30KKworLyoKKyAqIFJldHVybiAwIGlmIHNlcXVlbmNlIG51bWJlciBpcyBhY2NlcHRhYmxlLCAtMSBvdGhlcndpc2UKKyAqLworaW50IG1iZWR0bHNfc3NsX2R0bHNfcmVwbGF5X2NoZWNrKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHVpbnQ2NF90IHJlY19zZXFudW0gPSBzc2xfbG9hZF9zaXhfYnl0ZXMoIHNzbC0+aW5fY3RyICsgMiApOworICAgIHVpbnQ2NF90IGJpdDsKKworICAgIGlmKCBzc2wtPmNvbmYtPmFudGlfcmVwbGF5ID09IE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0RJU0FCTEVEICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggcmVjX3NlcW51bSA+IHNzbC0+aW5fd2luZG93X3RvcCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgYml0ID0gc3NsLT5pbl93aW5kb3dfdG9wIC0gcmVjX3NlcW51bTsKKworICAgIGlmKCBiaXQgPj0gNjQgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggKCBzc2wtPmluX3dpbmRvdyAmICggKHVpbnQ2NF90KSAxIDw8IGJpdCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVXBkYXRlIHJlcGxheSB3aW5kb3cgb24gbmV3IHZhbGlkYXRlZCByZWNvcmQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgdWludDY0X3QgcmVjX3NlcW51bSA9IHNzbF9sb2FkX3NpeF9ieXRlcyggc3NsLT5pbl9jdHIgKyAyICk7CisKKyAgICBpZiggc3NsLT5jb25mLT5hbnRpX3JlcGxheSA9PSBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9ESVNBQkxFRCApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCByZWNfc2VxbnVtID4gc3NsLT5pbl93aW5kb3dfdG9wICkKKyAgICB7CisgICAgICAgIC8qIFVwZGF0ZSB3aW5kb3dfdG9wIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIHdpbmRvdyAqLworICAgICAgICB1aW50NjRfdCBzaGlmdCA9IHJlY19zZXFudW0gLSBzc2wtPmluX3dpbmRvd190b3A7CisKKyAgICAgICAgaWYoIHNoaWZ0ID49IDY0ICkKKyAgICAgICAgICAgIHNzbC0+aW5fd2luZG93ID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzc2wtPmluX3dpbmRvdyA8PD0gc2hpZnQ7CisgICAgICAgICAgICBzc2wtPmluX3dpbmRvdyB8PSAxOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5pbl93aW5kb3dfdG9wID0gcmVjX3NlcW51bTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTWFyayB0aGF0IG51bWJlciBhcyBzZWVuIGluIHRoZSBjdXJyZW50IHdpbmRvdyAqLworICAgICAgICB1aW50NjRfdCBiaXQgPSBzc2wtPmluX3dpbmRvd190b3AgLSByZWNfc2VxbnVtOworCisgICAgICAgIGlmKCBiaXQgPCA2NCApIC8qIEFsd2F5cyB0cnVlLCBidXQgYmUgZXh0cmEgc3VyZSAqLworICAgICAgICAgICAgc3NsLT5pbl93aW5kb3cgfD0gKHVpbnQ2NF90KSAxIDw8IGJpdDsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIGludCBzc2xfc2Vzc2lvbl9yZXNldF9pbnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IHBhcnRpYWwgKTsKKworLyoKKyAqIFdpdGhvdXQgYW55IFNTTCBjb250ZXh0LCBjaGVjayBpZiBhIGRhdGFncmFtIGxvb2tzIGxpa2UgYSBDbGllbnRIZWxsbyB3aXRoCisgKiBhIHZhbGlkIGNvb2tpZSwgYW5kIGlmIGl0IGRvZXNuJ3QsIGdlbmVyYXRlIGEgSGVsbG9WZXJpZnlSZXF1ZXN0IG1lc3NhZ2UuCisgKiBCb3RoIGlucHV0IGFuZCBvdXRwdXQgaW5jbHVkZSBmdWxsIERUTFMgaGVhZGVycy4KKyAqCisgKiAtIGlmIGNvb2tpZSBpcyB2YWxpZCwgcmV0dXJuIDAKKyAqIC0gaWYgQ2xpZW50SGVsbG8gbG9va3Mgc3VwZXJmaWNpYWxseSB2YWxpZCBidXQgY29va2llIGlzIG5vdCwKKyAqICAgZmlsbCBvYnVmIGFuZCBzZXQgb2xlbiwgdGhlbgorICogICByZXR1cm4gTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRAorICogLSBvdGhlcndpc2UgcmV0dXJuIGEgc3BlY2lmaWMgZXJyb3IgY29kZQorICovCitzdGF0aWMgaW50IHNzbF9jaGVja19kdGxzX2NsaWhsb19jb29raWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb29raWVfd3JpdGVfdCAqZl9jb29raWVfd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2tfdCAqZl9jb29raWVfY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2Nvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaV9pZCwgc2l6ZV90IGNsaV9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm9idWYsIHNpemVfdCBidWZfbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIHNpemVfdCBzaWRfbGVuLCBjb29raWVfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICBpZiggZl9jb29raWVfd3JpdGUgPT0gTlVMTCB8fCBmX2Nvb2tpZV9jaGVjayA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qCisgICAgICogU3RydWN0dXJlIG9mIENsaWVudEhlbGxvIHdpdGggcmVjb3JkIGFuZCBoYW5kc2hha2UgaGVhZGVycywKKyAgICAgKiBhbmQgZXhwZWN0ZWQgdmFsdWVzLiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGEgbG90LCBtb3JlIGNoZWNrcyB3aWxsIGJlCisgICAgICogZG9uZSB3aGVuIGFjdHVhbGx5IHBhcnNpbmcgdGhlIENsaWVudEhlbGxvIC0gc2tpcHBpbmcgdGhvc2UgY2hlY2tzCisgICAgICogYXZvaWRzIGNvZGUgZHVwbGljYXRpb24gYW5kIGRvZXMgbm90IG1ha2UgY29va2llIGZvcmdpbmcgYW55IGVhc2llci4KKyAgICAgKgorICAgICAqICAwLTAgIENvbnRlbnRUeXBlIHR5cGU7ICAgICAgICAgICAgICAgICAgY29waWVkLCBtdXN0IGJlIGhhbmRzaGFrZQorICAgICAqICAxLTIgIFByb3RvY29sVmVyc2lvbiB2ZXJzaW9uOyAgICAgICAgICAgY29waWVkCisgICAgICogIDMtNCAgdWludDE2IGVwb2NoOyAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQsIG11c3QgYmUgMAorICAgICAqICA1LTEwIHVpbnQ0OCBzZXF1ZW5jZV9udW1iZXI7ICAgICAgICAgICAgY29waWVkCisgICAgICogMTEtMTIgdWludDE2IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZCkKKyAgICAgKgorICAgICAqIDEzLTEzIEhhbmRzaGFrZVR5cGUgbXNnX3R5cGU7ICAgICAgICAgICAgKGlnbm9yZWQpCisgICAgICogMTQtMTYgdWludDI0IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZCkKKyAgICAgKiAxNy0xOCB1aW50MTYgbWVzc2FnZV9zZXE7ICAgICAgICAgICAgICAgIGNvcGllZAorICAgICAqIDE5LTIxIHVpbnQyNCBmcmFnbWVudF9vZmZzZXQ7ICAgICAgICAgICAgY29waWVkLCBtdXN0IGJlIDAKKyAgICAgKiAyMi0yNCB1aW50MjQgZnJhZ21lbnRfbGVuZ3RoOyAgICAgICAgICAgIChpZ25vcmVkKQorICAgICAqCisgICAgICogMjUtMjYgUHJvdG9jb2xWZXJzaW9uIGNsaWVudF92ZXJzaW9uOyAgICAoaWdub3JlZCkKKyAgICAgKiAyNy01OCBSYW5kb20gcmFuZG9tOyAgICAgICAgICAgICAgICAgICAgIChpZ25vcmVkKQorICAgICAqIDU5LXh4IFNlc3Npb25JRCBzZXNzaW9uX2lkOyAgICAgICAgICAgICAgMSBieXRlIGxlbiArIHNpZF9sZW4gY29udGVudAorICAgICAqIDYwKyAgIG9wYXF1ZSBjb29raWU8MC4uMl44LTE+OyAgICAgICAgICAgMSBieXRlIGxlbiArIGNvbnRlbnQKKyAgICAgKiAgICAgICAuLi4KKyAgICAgKgorICAgICAqIE1pbmltdW0gbGVuZ3RoIGlzIDYxIGJ5dGVzLgorICAgICAqLworICAgIGlmKCBpbl9sZW4gPCA2MSB8fAorICAgICAgICBpblswXSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFIHx8CisgICAgICAgIGluWzNdICE9IDAgfHwgaW5bNF0gIT0gMCB8fAorICAgICAgICBpblsxOV0gIT0gMCB8fCBpblsyMF0gIT0gMCB8fCBpblsyMV0gIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorCisgICAgc2lkX2xlbiA9IGluWzU5XTsKKyAgICBpZiggc2lkX2xlbiA+IGluX2xlbiAtIDYxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworCisgICAgY29va2llX2xlbiA9IGluWzYwICsgc2lkX2xlbl07CisgICAgaWYoIGNvb2tpZV9sZW4gPiBpbl9sZW4gLSA2MCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKworICAgIGlmKCBmX2Nvb2tpZV9jaGVjayggcF9jb29raWUsIGluICsgc2lkX2xlbiArIDYxLCBjb29raWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xpX2lkLCBjbGlfaWRfbGVuICkgPT0gMCApCisgICAgeworICAgICAgICAvKiBWYWxpZCBjb29raWUgKi8KKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB3ZSBnZXQgaGVyZSwgd2UndmUgZ290IGFuIGludmFsaWQgY29va2llLCBsZXQncyBwcmVwYXJlIEhWUi4KKyAgICAgKgorICAgICAqICAwLTAgIENvbnRlbnRUeXBlIHR5cGU7ICAgICAgICAgICAgICAgICAgY29waWVkCisgICAgICogIDEtMiAgUHJvdG9jb2xWZXJzaW9uIHZlcnNpb247ICAgICAgICAgICBjb3BpZWQKKyAgICAgKiAgMy00ICB1aW50MTYgZXBvY2g7ICAgICAgICAgICAgICAgICAgICAgIGNvcGllZAorICAgICAqICA1LTEwIHVpbnQ0OCBzZXF1ZW5jZV9udW1iZXI7ICAgICAgICAgICAgY29waWVkCisgICAgICogMTEtMTIgdWludDE2IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICBvbGVuIC0gMTMKKyAgICAgKgorICAgICAqIDEzLTEzIEhhbmRzaGFrZVR5cGUgbXNnX3R5cGU7ICAgICAgICAgICAgaGVsbG9fdmVyaWZ5X3JlcXVlc3QKKyAgICAgKiAxNC0xNiB1aW50MjQgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgIG9sZW4gLSAyNQorICAgICAqIDE3LTE4IHVpbnQxNiBtZXNzYWdlX3NlcTsgICAgICAgICAgICAgICAgY29waWVkCisgICAgICogMTktMjEgdWludDI0IGZyYWdtZW50X29mZnNldDsgICAgICAgICAgICBjb3BpZWQKKyAgICAgKiAyMi0yNCB1aW50MjQgZnJhZ21lbnRfbGVuZ3RoOyAgICAgICAgICAgIG9sZW4gLSAyNQorICAgICAqCisgICAgICogMjUtMjYgUHJvdG9jb2xWZXJzaW9uIHNlcnZlcl92ZXJzaW9uOyAgICAweGZlIDB4ZmYKKyAgICAgKiAyNy0yNyBvcGFxdWUgY29va2llPDAuLjJeOC0xPjsgICAgICAgICAgIGNvb2tpZV9sZW4gPSBvbGVuIC0gMjcsIGNvb2tpZQorICAgICAqCisgICAgICogTWluaW11bSBsZW5ndGggaXMgMjguCisgICAgICovCisgICAgaWYoIGJ1Zl9sZW4gPCAyOCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIC8qIENvcHkgbW9zdCBmaWVsZHMgYW5kIGFkYXB0IG90aGVycyAqLworICAgIG1lbWNweSggb2J1ZiwgaW4sIDI1ICk7CisgICAgb2J1ZlsxM10gPSBNQkVEVExTX1NTTF9IU19IRUxMT19WRVJJRllfUkVRVUVTVDsKKyAgICBvYnVmWzI1XSA9IDB4ZmU7CisgICAgb2J1ZlsyNl0gPSAweGZmOworCisgICAgLyogR2VuZXJhdGUgYW5kIHdyaXRlIGFjdHVhbCBjb29raWUgKi8KKyAgICBwID0gb2J1ZiArIDI4OworICAgIGlmKCBmX2Nvb2tpZV93cml0ZSggcF9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAmcCwgb2J1ZiArIGJ1Zl9sZW4sIGNsaV9pZCwgY2xpX2lkX2xlbiApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICAqb2xlbiA9IHAgLSBvYnVmOworCisgICAgLyogR28gYmFjayBhbmQgZmlsbCBsZW5ndGggZmllbGRzICovCisgICAgb2J1ZlsyN10gPSAodW5zaWduZWQgY2hhcikoICpvbGVuIC0gMjggKTsKKworICAgIG9idWZbMTRdID0gb2J1ZlsyMl0gPSAodW5zaWduZWQgY2hhcikoICggKm9sZW4gLSAyNSApID4+IDE2ICk7CisgICAgb2J1ZlsxNV0gPSBvYnVmWzIzXSA9ICh1bnNpZ25lZCBjaGFyKSggKCAqb2xlbiAtIDI1ICkgPj4gIDggKTsKKyAgICBvYnVmWzE2XSA9IG9idWZbMjRdID0gKHVuc2lnbmVkIGNoYXIpKCAoICpvbGVuIC0gMjUgKSAgICAgICApOworCisgICAgb2J1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikoICggKm9sZW4gLSAxMyApID4+ICA4ICk7CisgICAgb2J1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikoICggKm9sZW4gLSAxMyApICAgICAgICk7CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgKTsKK30KKworLyoKKyAqIEhhbmRsZSBwb3NzaWJsZSBjbGllbnQgcmVjb25uZWN0IHdpdGggdGhlIHNhbWUgVURQIHF1YWRydXBsZXQKKyAqIChSRkMgNjM0NyBTZWN0aW9uIDQuMi44KS4KKyAqCisgKiBDYWxsZWQgYnkgc3NsX3BhcnNlX3JlY29yZF9oZWFkZXIoKSBpbiBjYXNlIHdlIHJlY2VpdmUgYW4gZXBvY2ggMCByZWNvcmQKKyAqIHRoYXQgbG9va3MgbGlrZSBhIENsaWVudEhlbGxvLgorICoKKyAqIC0gaWYgdGhlIGlucHV0IGxvb2tzIGxpa2UgYSBDbGllbnRIZWxsbyB3aXRob3V0IGNvb2tpZXMsCisgKiAgIHNlbmQgYmFjayBIZWxsb1ZlcmlmeVJlcXVlc3QsIHRoZW4KKyAqICAgcmV0dXJuIE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQKKyAqIC0gaWYgdGhlIGlucHV0IGxvb2tzIGxpa2UgYSBDbGllbnRIZWxsbyB3aXRoIGEgdmFsaWQgY29va2llLAorICogICByZXNldCB0aGUgc2Vzc2lvbiBvZiB0aGUgY3VycmVudCBjb250ZXh0LCBhbmQKKyAqICAgcmV0dXJuIE1CRURUTFNfRVJSX1NTTF9DTElFTlRfUkVDT05ORUNUCisgKiAtIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHJldHVybiBhIHNwZWNpZmljIGVycm9yIGNvZGUKKyAqCisgKiBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCgpIHdpbGwgaWdub3JlIHRoZSByZWNvcmQgaWYgYW55dGhpbmcgZWxzZSB0aGFuCisgKiBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCBvciAwIGlzIHJldHVybmVkLCBhbHRob3VnaCB0aGlzIGZ1bmN0aW9uCisgKiBjYW5ub3Qgbm90IHJldHVybiAwLgorICovCitzdGF0aWMgaW50IHNzbF9oYW5kbGVfcG9zc2libGVfcmVjb25uZWN0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIHJldCA9IHNzbF9jaGVja19kdGxzX2NsaWhsb19jb29raWUoCisgICAgICAgICAgICBzc2wtPmNvbmYtPmZfY29va2llX3dyaXRlLAorICAgICAgICAgICAgc3NsLT5jb25mLT5mX2Nvb2tpZV9jaGVjaywKKyAgICAgICAgICAgIHNzbC0+Y29uZi0+cF9jb29raWUsCisgICAgICAgICAgICBzc2wtPmNsaV9pZCwgc3NsLT5jbGlfaWRfbGVuLAorICAgICAgICAgICAgc3NsLT5pbl9idWYsIHNzbC0+aW5fbGVmdCwKKyAgICAgICAgICAgIHNzbC0+b3V0X2J1ZiwgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOLCAmbGVuICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDIsICJzc2xfY2hlY2tfZHRsc19jbGlobG9fY29va2llIiwgcmV0ICk7CisKKyAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9IRUxMT19WRVJJRllfUkVRVUlSRUQgKQorICAgIHsKKyAgICAgICAgLyogRG9udCBjaGVjayB3cml0ZSBlcnJvcnMgYXMgd2UgY2FuJ3QgZG8gYW55dGhpbmcgaGVyZS4KKyAgICAgICAgICogSWYgdGhlIGVycm9yIGlzIHBlcm1hbmVudCB3ZSdsbCBjYXRjaCBpdCBsYXRlciwKKyAgICAgICAgICogaWYgaXQncyBub3QsIHRoZW4gaG9wZWZ1bGx5IGl0J2xsIHdvcmsgbmV4dCB0aW1lLiAqLworICAgICAgICAodm9pZCkgc3NsLT5mX3NlbmQoIHNzbC0+cF9iaW8sIHNzbC0+b3V0X2J1ZiwgbGVuICk7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEICk7CisgICAgfQorCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIC8qIEdvdCBhIHZhbGlkIGNvb2tpZSwgcGFydGlhbGx5IHJlc2V0IGNvbnRleHQgKi8KKyAgICAgICAgaWYoICggcmV0ID0gc3NsX3Nlc3Npb25fcmVzZXRfaW50KCBzc2wsIDEgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJyZXNldCIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UgJiYgTUJFRFRMU19TU0xfU1JWX0MgKi8KKworLyoKKyAqIENvbnRlbnRUeXBlIHR5cGU7CisgKiBQcm90b2NvbFZlcnNpb24gdmVyc2lvbjsKKyAqIHVpbnQxNiBlcG9jaDsgICAgICAgICAgICAvLyBEVExTIG9ubHkKKyAqIHVpbnQ0OCBzZXF1ZW5jZV9udW1iZXI7ICAvLyBEVExTIG9ubHkKKyAqIHVpbnQxNiBsZW5ndGg7CisgKgorICogUmV0dXJuIDAgaWYgaGVhZGVyIGxvb2tzIHNhbmUgKGFuZCwgZm9yIERUTFMsIHRoZSByZWNvcmQgaXMgZXhwZWN0ZWQpCisgKiBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgaWYgdGhlIGhlYWRlciBsb29rcyBiYWQsCisgKiBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgKERUTFMgb25seSkgaWYgc2FuZSBidXQgdW5leHBlY3RlZC4KKyAqCisgKiBXaXRoIERUTFMsIG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCkgd2lsbDoKKyAqIDEuIHByb2NlZWQgd2l0aCB0aGUgcmVjb3JkIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwCisgKiAyLiBkcm9wIG9ubHkgdGhlIGN1cnJlbnQgcmVjb3JkIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBVTkVYUEVDVEVEX1JFQ09SRAorICogMy4gcmV0dXJuIENMSUVOVF9SRUNPTk5FQ1QgaWYgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhhdCB2YWx1ZQorICogNC4gZHJvcCB0aGUgd2hvbGUgZGF0YWdyYW0gaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFueXRoaW5nIGVsc2UuCisgKiBQb2ludCAyIGlzIG5lZWRlZCB3aGVuIHRoZSBwZWVyIGlzIHJlc2VuZGluZywgYW5kIHdlIGhhdmUgYWxyZWFkeSByZWNlaXZlZAorICogdGhlIGZpcnN0IHJlY29yZCBmcm9tIGEgZGF0YWdyYW0gYnV0IGFyZSBzdGlsbCB3YWl0aW5nIGZvciB0aGUgb3RoZXJzLgorICovCitzdGF0aWMgaW50IHNzbF9wYXJzZV9yZWNvcmRfaGVhZGVyKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisgICAgaW50IG1ham9yX3ZlciwgbWlub3JfdmVyOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiaW5wdXQgcmVjb3JkIGhlYWRlciIsIHNzbC0+aW5faGRyLCBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSApOworCisgICAgc3NsLT5pbl9tc2d0eXBlID0gIHNzbC0+aW5faGRyWzBdOworICAgIHNzbC0+aW5fbXNnbGVuID0gKCBzc2wtPmluX2xlblswXSA8PCA4ICkgfCBzc2wtPmluX2xlblsxXTsKKyAgICBtYmVkdGxzX3NzbF9yZWFkX3ZlcnNpb24oICZtYWpvcl92ZXIsICZtaW5vcl92ZXIsIHNzbC0+Y29uZi0+dHJhbnNwb3J0LCBzc2wtPmluX2hkciArIDEgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiaW5wdXQgcmVjb3JkOiBtc2d0eXBlID0gJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uID0gWyVkOiVkXSwgbXNnbGVuID0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2d0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3JfdmVyLCBtaW5vcl92ZXIsIHNzbC0+aW5fbXNnbGVuICkgKTsKKworICAgIC8qIENoZWNrIHJlY29yZCB0eXBlICovCisgICAgaWYoIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICYmCisgICAgICAgIHNzbC0+aW5fbXNndHlwZSAhPSBNQkVEVExTX1NTTF9NU0dfQUxFUlQgJiYKKyAgICAgICAgc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMgJiYKKyAgICAgICAgc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAidW5rbm93biByZWNvcmQgdHlwZSIgKSApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5FWFBFQ1RFRF9NRVNTQUdFICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgfQorCisgICAgLyogQ2hlY2sgdmVyc2lvbiAqLworICAgIGlmKCBtYWpvcl92ZXIgIT0gc3NsLT5tYWpvcl92ZXIgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJtYWpvciB2ZXJzaW9uIG1pc21hdGNoIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEICk7CisgICAgfQorCisgICAgaWYoIG1pbm9yX3ZlciA+IHNzbC0+Y29uZi0+bWF4X21pbm9yX3ZlciApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm1pbm9yIHZlcnNpb24gbWlzbWF0Y2giICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBsZW5ndGggYWdhaW5zdCB0aGUgc2l6ZSBvZiBvdXIgYnVmZmVyICovCisgICAgaWYoIHNzbC0+aW5fbXNnbGVuID4gTUJFRFRMU19TU0xfQlVGRkVSX0xFTgorICAgICAgICAgICAgICAgICAgICAgICAgIC0gKHNpemVfdCkoIHNzbC0+aW5fbXNnIC0gc3NsLT5pbl9idWYgKSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBtZXNzYWdlIGxlbmd0aCIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgIH0KKworICAgIC8qIENoZWNrIGxlbmd0aCBhZ2FpbnN0IGJvdW5kcyBvZiB0aGUgY3VycmVudCB0cmFuc2Zvcm0gYW5kIHZlcnNpb24gKi8KKyAgICBpZiggc3NsLT50cmFuc2Zvcm1faW4gPT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gPCAxIHx8CisgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIG1lc3NhZ2UgbGVuZ3RoIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmluX21zZ2xlbiA8IHNzbC0+dHJhbnNmb3JtX2luLT5taW5sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBtZXNzYWdlIGxlbmd0aCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiA+IHNzbC0+dHJhbnNmb3JtX2luLT5taW5sZW4gKyBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBtZXNzYWdlIGxlbmd0aCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgICAgICAvKgorICAgICAgICAgKiBUTFMgZW5jcnlwdGVkIG1lc3NhZ2VzIGNhbiBoYXZlIHVwIHRvIDI1NiBieXRlcyBvZiBwYWRkaW5nCisgICAgICAgICAqLworICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ2xlbiA+IHNzbC0+dHJhbnNmb3JtX2luLT5taW5sZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKyAyNTYgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBtZXNzYWdlIGxlbmd0aCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgLyoKKyAgICAgKiBEVExTLXJlbGF0ZWQgdGVzdHMgZG9uZSBsYXN0LCBiZWNhdXNlIG1vc3Qgb2YgdGhlbSBtYXkgcmVzdWx0IGluCisgICAgICogc2lsZW50bHkgZHJvcHBpbmcgdGhlIHJlY29yZCAoYnV0IG5vdCB0aGUgd2hvbGUgZGF0YWdyYW0pLCBhbmQgd2Ugb25seQorICAgICAqIHdhbnQgdG8gY29uc2lkZXIgdGhhdCBhZnRlciBlbnN1cmluZyB0aGF0IHRoZSAiYmFzaWMiIGZpZWxkcyAodHlwZSwKKyAgICAgKiB2ZXJzaW9uLCBsZW5ndGgpIGFyZSBzYW5lLgorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCByZWNfZXBvY2ggPSAoIHNzbC0+aW5fY3RyWzBdIDw8IDggKSB8IHNzbC0+aW5fY3RyWzFdOworCisgICAgICAgIC8qIERyb3AgdW5leHBlY3RlZCBDaGFuZ2VDaXBoZXJTcGVjIG1lc3NhZ2VzICovCisgICAgICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0NIQU5HRV9DSVBIRVJfU1BFQyAmJgorICAgICAgICAgICAgc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDICYmCisgICAgICAgICAgICBzc2wtPnN0YXRlICE9IE1CRURUTFNfU1NMX1NFUlZFUl9DSEFOR0VfQ0lQSEVSX1NQRUMgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImRyb3BwaW5nIHVuZXhwZWN0ZWQgQ2hhbmdlQ2lwaGVyU3BlYyIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9SRUNPUkQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIERyb3AgdW5leHBlY3RlZCBBcHBsaWNhdGlvbkRhdGEgcmVjb3JkcywKKyAgICAgICAgICogZXhjZXB0IGF0IHRoZSBiZWdpbm5pbmcgb2YgcmVuZWdvdGlhdGlvbnMgKi8KKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfQVBQTElDQVRJT05fREFUQSAmJgorICAgICAgICAgICAgc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgICAgICYmICEgKCBzc2wtPnJlbmVnb19zdGF0dXMgPT0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9JTl9QUk9HUkVTUyAmJgorICAgICAgICAgICAgICAgICAgIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfU0VSVkVSX0hFTExPICkKKyNlbmRpZgorICAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImRyb3BwaW5nIHVuZXhwZWN0ZWQgQXBwbGljYXRpb25EYXRhIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX1JFQ09SRCApOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgZXBvY2ggKGFuZCBzZXF1ZW5jZSBudW1iZXIpIHdpdGggRFRMUyAqLworICAgICAgICBpZiggcmVjX2Vwb2NoICE9IHNzbC0+aW5fZXBvY2ggKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlY29yZCBmcm9tIGFub3RoZXIgZXBvY2g6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJWQsIHJlY2VpdmVkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX2Vwb2NoLCByZWNfZXBvY2ggKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NMSUVOVF9QT1JUX1JFVVNFKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENoZWNrIGZvciBhbiBlcG9jaCAwIENsaWVudEhlbGxvLiBXZSBjYW4ndCB1c2UgaW5fbXNnIGhlcmUgdG8KKyAgICAgICAgICAgICAqIGFjY2VzcyB0aGUgZmlyc3QgYnl0ZSBvZiByZWNvcmQgY29udGVudCAoaGFuZHNoYWtlIHR5cGUpLCBhcyB3ZQorICAgICAgICAgICAgICogaGF2ZSBhbiBhY3RpdmUgdHJhbnNmb3JtIChwb3NzaWJseSBpdl9sZW4gIT0gMCksIHNvIHVzZSB0aGUKKyAgICAgICAgICAgICAqIGZhY3QgdGhhdCB0aGUgcmVjb3JkIGhlYWRlciBsZW4gaXMgMTMgaW5zdGVhZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisgICAgICAgICAgICAgICAgc3NsLT5zdGF0ZSA9PSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiAmJgorICAgICAgICAgICAgICAgIHJlY19lcG9jaCA9PSAwICYmCisgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgJiYKKyAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQgPiAxMyAmJgorICAgICAgICAgICAgICAgIHNzbC0+aW5fYnVmWzEzXSA9PSBNQkVEVExTX1NTTF9IU19DTElFTlRfSEVMTE8gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicG9zc2libGUgY2xpZW50IHJlY29ubmVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHRoZSBzYW1lIHBvcnQiICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHNzbF9oYW5kbGVfcG9zc2libGVfcmVjb25uZWN0KCBzc2wgKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UgJiYgTUJFRFRMU19TU0xfU1JWX0MgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX1JFQ09SRCApOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgICAgIC8qIFJlcGxheSBkZXRlY3Rpb24gb25seSB3b3JrcyBmb3IgdGhlIGN1cnJlbnQgZXBvY2ggKi8KKyAgICAgICAgaWYoIHJlY19lcG9jaCA9PSBzc2wtPmluX2Vwb2NoICYmCisgICAgICAgICAgICBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV9jaGVjayggc3NsICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAicmVwbGF5ZWQgcmVjb3JkIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX1JFQ09SRCApOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBJZiBhcHBsaWNhYmxlLCBkZWNyeXB0IChhbmQgZGVjb21wcmVzcykgcmVjb3JkIGNvbnRlbnQKKyAqLworc3RhdGljIGludCBzc2xfcHJlcGFyZV9yZWNvcmRfY29udGVudCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0LCBkb25lID0gMDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImlucHV0IHJlY29yZCBmcm9tIG5ldHdvcmsiLAorICAgICAgICAgICAgICAgICAgIHNzbC0+aW5faGRyLCBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKSArIHNzbC0+aW5fbXNnbGVuICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKyAgICBpZiggbWJlZHRsc19zc2xfaHdfcmVjb3JkX3JlYWQgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImdvaW5nIGZvciBtYmVkdGxzX3NzbF9od19yZWNvcmRfcmVhZCgpIiApICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaHdfcmVjb3JkX3JlYWQoIHNzbCApOworICAgICAgICBpZiggcmV0ICE9IDAgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUxMVEhST1VHSCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZWFkIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICBkb25lID0gMTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMICovCisgICAgaWYoICFkb25lICYmIHNzbC0+dHJhbnNmb3JtX2luICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gc3NsX2RlY3J5cHRfYnVmKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfZGVjcnlwdF9idWYiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJpbnB1dCBwYXlsb2FkIGFmdGVyIGRlY3J5cHQiLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmluX21zZywgc3NsLT5pbl9tc2dsZW4gKTsKKworICAgICAgICBpZiggc3NsLT5pbl9tc2dsZW4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBtZXNzYWdlIGxlbmd0aCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9SRUNPUkQgKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19aTElCX1NVUFBPUlQpCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX2luICE9IE5VTEwgJiYKKyAgICAgICAgc3NsLT5zZXNzaW9uX2luLT5jb21wcmVzc2lvbiA9PSBNQkVEVExTX1NTTF9DT01QUkVTU19ERUZMQVRFICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IHNzbF9kZWNvbXByZXNzX2J1Ziggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX2RlY29tcHJlc3NfYnVmIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWkxJQl9TVVBQT1JUICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUoIHNzbCApOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIHNzbF9oYW5kc2hha2Vfd3JhcHVwX2ZyZWVfaHNfdHJhbnNmb3JtKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKKworLyoKKyAqIFJlYWQgYSByZWNvcmQuCisgKgorICogU2lsZW50bHkgaWdub3JlIG5vbi1mYXRhbCBhbGVydCAoYW5kIGZvciBEVExTLCBpbnZhbGlkIHJlY29yZHMgYXMgd2VsbCwKKyAqIFJGQyA2MzQ3IDQuMS4yLjcpIGFuZCBjb250aW51ZSByZWFkaW5nIHVudGlsIGEgdmFsaWQgcmVjb3JkIGlzIGZvdW5kLgorICoKKyAqLworaW50IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHJlYWQgcmVjb3JkIiApICk7CisKKyAgICBkbyB7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmRfbGF5ZXIoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgKCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmRfbGF5ZXIiICksIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUoIHNzbCApOworCisgICAgfSB3aGlsZSggTUJFRFRMU19FUlJfU1NMX05PTl9GQVRBTCA9PSByZXQgKTsKKworICAgIGlmKCAwICE9IHJldCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICggIm1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUiICksIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF91cGRhdGVfaGFuZHNoYWtlX3N0YXR1cyggc3NsICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSByZWFkIHJlY29yZCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZF9sYXllciggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIHNzbC0+aW5faHNsZW4gIT0gMCAmJiBzc2wtPmluX2hzbGVuIDwgc3NsLT5pbl9tc2dsZW4gKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogR2V0IG5leHQgSGFuZHNoYWtlIG1lc3NhZ2UgaW4gdGhlIGN1cnJlbnQgcmVjb3JkCisgICAgICAgICAqLworICAgICAgICBzc2wtPmluX21zZ2xlbiAtPSBzc2wtPmluX2hzbGVuOworCisgICAgICAgIG1lbW1vdmUoIHNzbC0+aW5fbXNnLCBzc2wtPmluX21zZyArIHNzbC0+aW5faHNsZW4sCisgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnbGVuICk7CisKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAicmVtYWluaW5nIGNvbnRlbnQgaW4gcmVjb3JkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnLCBzc2wtPmluX21zZ2xlbiApOworCisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIHNzbC0+aW5faHNsZW4gPSAwOworCisgICAgLyoKKyAgICAgKiBSZWFkIHRoZSByZWNvcmQgaGVhZGVyIGFuZCBwYXJzZSBpdAorICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKK3JlYWRfcmVjb3JkX2hlYWRlcjoKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQoIHNzbCwgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfcmVjb3JkX2hlYWRlciggc3NsICkgKSAhPSAwICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX0NMSUVOVF9SRUNPTk5FQ1QgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX1JFQ09SRCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2tpcCB1bmV4cGVjdGVkIHJlY29yZCAoYnV0IG5vdCB3aG9sZSBkYXRhZ3JhbSkgKi8KKyAgICAgICAgICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IHNzbC0+aW5fbXNnbGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtYmVkdGxzX3NzbF9oZHJfbGVuKCBzc2wgKTsKKworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZGlzY2FyZGluZyB1bmV4cGVjdGVkIHJlY29yZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaGVhZGVyKSIgKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNraXAgaW52YWxpZCByZWNvcmQgYW5kIHRoZSByZXN0IG9mIHRoZSBkYXRhZ3JhbSAqLworICAgICAgICAgICAgICAgIHNzbC0+bmV4dF9yZWNvcmRfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBzc2wtPmluX2xlZnQgPSAwOworCisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihoZWFkZXIpIiApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEdldCBuZXh0IHJlY29yZCAqLworICAgICAgICAgICAgZ290byByZWFkX3JlY29yZF9oZWFkZXI7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCBhbmQgb3B0aW9uYWxseSBkZWNyeXB0IHRoZSBtZXNzYWdlIGNvbnRlbnRzCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApICsgc3NsLT5pbl9tc2dsZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZmV0Y2hfaW5wdXQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKiBEb25lIHJlYWRpbmcgdGhpcyByZWNvcmQsIGdldCByZWFkeSBmb3IgdGhlIG5leHQgb25lICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IHNzbC0+aW5fbXNnbGVuICsgbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHNzbC0+aW5fbGVmdCA9IDA7CisKKyAgICBpZiggKCByZXQgPSBzc2xfcHJlcGFyZV9yZWNvcmRfY29udGVudCggc3NsICkgKSAhPSAwICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2lsZW50bHkgZGlzY2FyZCBpbnZhbGlkIHJlY29yZHMgKi8KKyAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfUkVDT1JEIHx8CisgICAgICAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRXhjZXB0IHdoZW4gd2FpdGluZyBmb3IgRmluaXNoZWQgYXMgYSBiYWQgbWFjIGhlcmUKKyAgICAgICAgICAgICAgICAgKiBwcm9iYWJseSBtZWFucyBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgaGFuZHNoYWtlCisgICAgICAgICAgICAgICAgICogKGVnIHdyb25nIHBzayB1c2VkLCBtaXRtIGRvd25ncmFkZSBhdHRlbXB0LCBldGMuKSAqLworICAgICAgICAgICAgICAgIGlmKCBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0NMSUVOVF9GSU5JU0hFRCB8fAorICAgICAgICAgICAgICAgICAgICBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX1NFUlZFUl9GSU5JU0hFRCApCisgICAgICAgICAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxMX0FMRVJUX01FU1NBR0VTKQorICAgICAgICAgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQyApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQpCisgICAgICAgICAgICAgICAgaWYoIHNzbC0+Y29uZi0+YmFkbWFjX2xpbWl0ICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgKytzc2wtPmJhZG1hY19zZWVuID49IHNzbC0+Y29uZi0+YmFkbWFjX2xpbWl0ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAidG9vIG1hbnkgcmVjb3JkcyB3aXRoIGJhZCBNQUMiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9NQUMgKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgKSApOworICAgICAgICAgICAgICAgIGdvdG8gcmVhZF9yZWNvcmRfaGVhZGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICAvKiBFcnJvciBvdXQgKGFuZCBzZW5kIGFsZXJ0KSBvbiBpbnZhbGlkIHJlY29yZHMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUykKKyAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDICk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFdoZW4gd2Ugc2VudCB0aGUgbGFzdCBmbGlnaHQgb2YgdGhlIGhhbmRzaGFrZSwgd2UgTVVTVCByZXNwb25kIHRvIGEKKyAgICAgKiByZXRyYW5zbWl0IG9mIHRoZSBwZWVyJ3MgcHJldmlvdXMgZmxpZ2h0IHdpdGggYSByZXRyYW5zbWl0LiAoSW4KKyAgICAgKiBwcmFjdGljZSwgb25seSB0aGUgRmluaXNoZWQgbWVzc2FnZSB3aWxsIG1ha2UgaXQsIG90aGVyIG1lc3NhZ2VzCisgICAgICogaW5jbHVkaW5nIENDUyB1c2UgdGhlIG9sZCB0cmFuc2Zvcm0gc28gdGhleSdyZSBkcm9wcGVkIGFzIGludmFsaWQuKQorICAgICAqCisgICAgICogSWYgdGhlIHJlY29yZCB3ZSByZWNlaXZlZCBpcyBub3QgYSBoYW5kc2hha2UgbWVzc2FnZSwgaG93ZXZlciwgaXQKKyAgICAgKiBtZWFucyB0aGUgcGVlciByZWNlaXZlZCBvdXIgbGFzdCBmbGlnaHQgc28gd2UgY2FuIGNsZWFuIHVwCisgICAgICogaGFuZHNoYWtlIGluZm8uCisgICAgICoKKyAgICAgKiBUaGlzIGNoZWNrIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIHByZXBhcmVfaGFuZHNoYWtlKCkgZHVlIHRvIGFuIGVkZ2UKKyAgICAgKiBjYXNlOiBpZiB0aGUgY2xpZW50IGltbWVkaWF0ZWx5IHJlcXVlc3RzIHJlbmVnb3RpYXRpb24sIHRoaXMKKyAgICAgKiBmaW5pc2hlcyB0aGUgY3VycmVudCBoYW5kc2hha2UgZmlyc3QsIGF2b2lkaW5nIHRoZSBuZXcgQ2xpZW50SGVsbG8KKyAgICAgKiBiZWluZyBtaXN0YWtlbiBmb3IgYW4gYW5jaWVudCBtZXNzYWdlIGluIHRoZSBjdXJyZW50IGhhbmRzaGFrZS4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZSAhPSBOVUxMICYmCisgICAgICAgIHNzbC0+c3RhdGUgPT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICYmCisgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0gPT0gTUJFRFRMU19TU0xfSFNfRklOSVNIRUQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggInJlY2VpdmVkIHJldHJhbnNtaXQgb2YgbGFzdCBmbGlnaHQiICkgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVzZW5kKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX3Jlc2VuZCIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3NsX2hhbmRzaGFrZV93cmFwdXBfZnJlZV9oc190cmFuc2Zvcm0oIHNzbCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX2hhbmRsZV9tZXNzYWdlX3R5cGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIC8qCisgICAgICogSGFuZGxlIHBhcnRpY3VsYXIgdHlwZXMgb2YgcmVjb3JkcworICAgICAqLworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9wcmVwYXJlX2hhbmRzaGFrZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlID09IE1CRURUTFNfU1NMX01TR19BTEVSVCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImdvdCBhbiBhbGVydCBtZXNzYWdlLCB0eXBlOiBbJWQ6JWRdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0sIHNzbC0+aW5fbXNnWzFdICkgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZ25vcmUgbm9uLWZhdGFsIGFsZXJ0cywgZXhjZXB0IGNsb3NlX25vdGlmeSBhbmQgbm9fcmVuZWdvdGlhdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnWzBdID09IE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJpcyBhIGZhdGFsIGFsZXJ0IG1lc3NhZ2UgKG1zZyAlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbMV0gKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRSApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnWzBdID09IE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcgJiYKKyAgICAgICAgICAgIHNzbC0+aW5fbXNnWzFdID09IE1CRURUTFNfU1NMX0FMRVJUX01TR19DTE9TRV9OT1RJRlkgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImlzIGEgY2xvc2Ugbm90aWZ5IG1lc3NhZ2UiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9FTkFCTEVEKQorICAgICAgICBpZiggc3NsLT5pbl9tc2dbMF0gPT0gTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORyAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dbMV0gPT0gTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX1JFTkVHT1RJQVRJT04gKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImlzIGEgU1NMdjMgbm9fY2VydCIgKSApOworICAgICAgICAgICAgLyogV2lsbCBiZSBoYW5kbGVkIHdoZW4gdHJ5aW5nIHRvIHBhcnNlIFNlcnZlckhlbGxvICovCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgJiYKKyAgICAgICAgICAgIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ1swXSA9PSBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9XQVJOSU5HICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ1sxXSA9PSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQ0VSVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiaXMgYSBTU0x2MyBub19jZXJ0IiApICk7CisgICAgICAgICAgICAvKiBXaWxsIGJlIGhhbmRsZWQgaW4gbWJlZHRsc19zc2xfcGFyc2VfY2VydGlmaWNhdGUoKSAqLworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyAgICAgICAgLyogU2lsZW50bHkgaWdub3JlOiBmZXRjaCBuZXcgbWVzc2FnZSAqLworICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfU1NMX05PTl9GQVRBTDsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZSApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPmNvbmYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHNlbmQgYWxlcnQgbWVzc2FnZSIgKSApOworCisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19BTEVSVDsKKyAgICBzc2wtPm91dF9tc2dsZW4gPSAyOworICAgIHNzbC0+b3V0X21zZ1swXSA9IGxldmVsOworICAgIHNzbC0+b3V0X21zZ1sxXSA9IG1lc3NhZ2U7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHNlbmQgYWxlcnQgbWVzc2FnZSIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBIYW5kc2hha2UgZnVuY3Rpb25zCisgKi8KKyNpZiAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCkgICAgICAgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEKSAgICAgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkgICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCkgICAmJiBcCisgICAgIWRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCkgJiYgXAorICAgICFkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpICAgICYmIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQpCitpbnQgbWJlZHRsc19zc2xfd3JpdGVfY2VydGlmaWNhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2VydGlmaWNhdGUiICkgKTsKKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX3BhcnNlX2NlcnRpZmljYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm8gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUtPmNpcGhlcnN1aXRlX2luZm87CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNlcnRpZmljYXRlIiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7Cit9CisjZWxzZQoraW50IG1iZWR0bHNfc3NsX3dyaXRlX2NlcnRpZmljYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICBzaXplX3QgaSwgbjsKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQ7CisgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbyA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Y2lwaGVyc3VpdGVfaW5mbzsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgY2VydGlmaWNhdGUiICkgKTsKKworICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0sgfHwKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBza2lwIHdyaXRlIGNlcnRpZmljYXRlIiApICk7CisgICAgICAgIHNzbC0+c3RhdGUrKzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+Y2xpZW50X2F1dGggPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICAgICAgc3NsLT5zdGF0ZSsrOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdXNpbmcgU1NMdjMgYW5kIGdvdCBubyBjZXJ0LCBzZW5kIGFuIEFsZXJ0IG1lc3NhZ2UKKyAgICAgICAgICogKG90aGVyd2lzZSBhbiBlbXB0eSBDZXJ0aWZpY2F0ZSBtZXNzYWdlIHdpbGwgYmUgc2VudCkuCisgICAgICAgICAqLworICAgICAgICBpZiggbWJlZHRsc19zc2xfb3duX2NlcnQoIHNzbCApICA9PSBOVUxMICYmCisgICAgICAgICAgICBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgICAgICB7CisgICAgICAgICAgICBzc2wtPm91dF9tc2dsZW4gID0gMjsKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfQUxFUlQ7CisgICAgICAgICAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORzsKKyAgICAgICAgICAgIHNzbC0+b3V0X21zZ1sxXSAgPSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQ0VSVDsKKworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJnb3Qgbm8gY2VydGlmaWNhdGUgdG8gc2VuZCIgKSApOworICAgICAgICAgICAgZ290byB3cml0ZV9tc2c7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfc3NsX293bl9jZXJ0KCBzc2wgKSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJnb3Qgbm8gY2VydGlmaWNhdGUgdG8gc2VuZCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQ1JUKCAzLCAib3duIGNlcnRpZmljYXRlIiwgbWJlZHRsc19zc2xfb3duX2NlcnQoIHNzbCApICk7CisKKyAgICAvKgorICAgICAqICAgICAwICAuICAwICAgIGhhbmRzaGFrZSB0eXBlCisgICAgICogICAgIDEgIC4gIDMgICAgaGFuZHNoYWtlIGxlbmd0aAorICAgICAqICAgICA0ICAuICA2ICAgIGxlbmd0aCBvZiBhbGwgY2VydHMKKyAgICAgKiAgICAgNyAgLiAgOSAgICBsZW5ndGggb2YgY2VydC4gMQorICAgICAqICAgIDEwICAuIG4tMSAgIHBlZXIgY2VydGlmaWNhdGUKKyAgICAgKiAgICAgbiAgLiBuKzIgICBsZW5ndGggb2YgY2VydC4gMgorICAgICAqICAgIG4rMyAuIC4uLiAgIHVwcGVyIGxldmVsIGNlcnQsIGV0Yy4KKyAgICAgKi8KKyAgICBpID0gNzsKKyAgICBjcnQgPSBtYmVkdGxzX3NzbF9vd25fY2VydCggc3NsICk7CisKKyAgICB3aGlsZSggY3J0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbiA9IGNydC0+cmF3LmxlbjsKKyAgICAgICAgaWYoIG4gPiBNQkVEVExTX1NTTF9NQVhfQ09OVEVOVF9MRU4gLSAzIC0gaSApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiY2VydGlmaWNhdGUgdG9vIGxhcmdlLCAlZCA+ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAzICsgbiwgTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NFUlRJRklDQVRFX1RPT19MQVJHRSApOworICAgICAgICB9CisKKyAgICAgICAgc3NsLT5vdXRfbXNnW2kgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSggbiA+PiAxNiApOworICAgICAgICBzc2wtPm91dF9tc2dbaSArIDFdID0gKHVuc2lnbmVkIGNoYXIpKCBuID4+ICA4ICk7CisgICAgICAgIHNzbC0+b3V0X21zZ1tpICsgMl0gPSAodW5zaWduZWQgY2hhcikoIG4gICAgICAgKTsKKworICAgICAgICBpICs9IDM7IG1lbWNweSggc3NsLT5vdXRfbXNnICsgaSwgY3J0LT5yYXcucCwgbiApOworICAgICAgICBpICs9IG47IGNydCA9IGNydC0+bmV4dDsKKyAgICB9CisKKyAgICBzc2wtPm91dF9tc2dbNF0gID0gKHVuc2lnbmVkIGNoYXIpKCAoIGkgLSA3ICkgPj4gMTYgKTsKKyAgICBzc2wtPm91dF9tc2dbNV0gID0gKHVuc2lnbmVkIGNoYXIpKCAoIGkgLSA3ICkgPj4gIDggKTsKKyAgICBzc2wtPm91dF9tc2dbNl0gID0gKHVuc2lnbmVkIGNoYXIpKCAoIGkgLSA3ICkgICAgICAgKTsKKworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSBpOworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFOworICAgIHNzbC0+b3V0X21zZ1swXSAgPSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKK3dyaXRlX21zZzoKKyNlbmRpZgorCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBjZXJ0aWZpY2F0ZSIgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX3BhcnNlX2NlcnRpZmljYXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRTsKKyAgICBzaXplX3QgaSwgbjsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5jaXBoZXJzdWl0ZV9pbmZvOworICAgIGludCBhdXRobW9kZSA9IHNzbC0+Y29uZi0+YXV0aG1vZGU7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNlcnRpZmljYXRlIiApICk7CisKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+a2V5X2V4Y2hhbmdlID09IE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTSyB8fAorICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5rZXlfZXhjaGFuZ2UgPT0gTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLIHx8CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPmtleV9leGNoYW5nZSA9PSBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTikKKyAgICBpZiggc3NsLT5oYW5kc2hha2UtPnNuaV9hdXRobW9kZSAhPSBNQkVEVExTX1NTTF9WRVJJRllfVU5TRVQgKQorICAgICAgICBhdXRobW9kZSA9IHNzbC0+aGFuZHNoYWtlLT5zbmlfYXV0aG1vZGU7CisjZW5kaWYKKworICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICBhdXRobW9kZSA9PSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORSApCisgICAgeworICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT52ZXJpZnlfcmVzdWx0ID0gTUJFRFRMU19YNTA5X0JBRENFUlRfU0tJUF9WRVJJRlk7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gc2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSIgKSApOworICAgICAgICBzc2wtPnN0YXRlKys7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHNzbC0+c3RhdGUrKzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlIGNsaWVudCBzZW50IGFuIGVtcHR5IGNlcnRpZmljYXRlCisgICAgICovCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuICA9PSAyICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfQUxFUlQgICAgICAgICAgICAmJgorICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0gID09IE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX1dBUk5JTkcgICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ1sxXSAgPT0gTUJFRFRMU19TU0xfQUxFUlRfTVNHX05PX0NFUlQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIlNTTHYzIGNsaWVudCBoYXMgbm8gY2VydGlmaWNhdGUiICkgKTsKKworICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dmVyaWZ5X3Jlc3VsdCA9IE1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkc7CisgICAgICAgICAgICBpZiggYXV0aG1vZGUgPT0gTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9OT19DTElFTlRfQ0VSVElGSUNBVEUgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiAmJgorICAgICAgICBzc2wtPm1pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+aW5faHNsZW4gICA9PSAzICsgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgJiYKKyAgICAgICAgICAgIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICAgICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ1swXSAgPT0gTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEUgICAmJgorICAgICAgICAgICAgbWVtY21wKCBzc2wtPmluX21zZyArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApLCAiXDBcMFwwIiwgMyApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIlRMU3YxIGNsaWVudCBoYXMgbm8gY2VydGlmaWNhdGUiICkgKTsKKworICAgICAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dmVyaWZ5X3Jlc3VsdCA9IE1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkc7CisgICAgICAgICAgICBpZiggYXV0aG1vZGUgPT0gTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9OT19DTElFTlRfQ0VSVElGSUNBVEUgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB8fCBcCisgICAgICAgICAgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KKworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX21zZ1swXSAhPSBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURSB8fAorICAgICAgICBzc2wtPmluX2hzbGVuIDwgbWJlZHRsc19zc2xfaHNfaGRyX2xlbiggc3NsICkgKyAzICsgMyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURSApOworICAgIH0KKworICAgIGkgPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKTsKKworICAgIC8qCisgICAgICogU2FtZSBtZXNzYWdlIHN0cnVjdHVyZSBhcyBpbiBtYmVkdGxzX3NzbF93cml0ZV9jZXJ0aWZpY2F0ZSgpCisgICAgICovCisgICAgbiA9ICggc3NsLT5pbl9tc2dbaSsxXSA8PCA4ICkgfCBzc2wtPmluX21zZ1tpKzJdOworCisgICAgaWYoIHNzbC0+aW5fbXNnW2ldICE9IDAgfHwKKyAgICAgICAgc3NsLT5pbl9oc2xlbiAhPSBuICsgMyArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNlcnRpZmljYXRlIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFICk7CisgICAgfQorCisgICAgLyogSW4gY2FzZSB3ZSB0cmllZCB0byByZXVzZSBhIHNlc3Npb24gYnV0IGl0IGZhaWxlZCAqLworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCApOworICAgIH0KKworICAgIGlmKCAoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCA9IG1iZWR0bHNfY2FsbG9jKCAxLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcnQgKSApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jKCVkIGJ5dGVzKSBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcnQgKSApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0ICk7CisKKyAgICBpICs9IDM7CisKKyAgICB3aGlsZSggaSA8IHNzbC0+aW5faHNsZW4gKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnW2ldICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEUgKTsKKyAgICAgICAgfQorCisgICAgICAgIG4gPSAoICh1bnNpZ25lZCBpbnQpIHNzbC0+aW5fbXNnW2kgKyAxXSA8PCA4ICkKKyAgICAgICAgICAgIHwgKHVuc2lnbmVkIGludCkgc3NsLT5pbl9tc2dbaSArIDJdOworICAgICAgICBpICs9IDM7CisKKyAgICAgICAgaWYoIG4gPCAxMjggfHwgaSArIG4gPiBzc2wtPmluX2hzbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgbWVzc2FnZSIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFICk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2Rlciggc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+cGVlcl9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+aW5fbXNnICsgaSwgbiApOworICAgICAgICBpZiggMCAhPSByZXQgJiYgKCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyArIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQgKSAhPSByZXQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICIgbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICBpICs9IG47CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfQ1JUKCAzLCAicGVlciBjZXJ0aWZpY2F0ZSIsIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydCApOworCisgICAgLyoKKyAgICAgKiBPbiBjbGllbnQsIG1ha2Ugc3VyZSB0aGUgc2VydmVyIGNlcnQgZG9lc24ndCBjaGFuZ2UgZHVyaW5nIHJlbmVnbyB0bworICAgICAqIGF2b2lkICJ0cmlwbGUgaGFuZHNoYWtlIiBhdHRhY2s6IGh0dHBzOi8vc2VjdXJlLXJlc3VtcHRpb24uY29tLworICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgJiYKKyAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+c2Vzc2lvbi0+cGVlcl9jZXJ0ID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggIm5ldyBzZXJ2ZXIgY2VydCBkdXJpbmcgcmVuZWdvdGlhdGlvbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3NsLT5zZXNzaW9uLT5wZWVyX2NlcnQtPnJhdy5sZW4gIT0KKyAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cmF3LmxlbiB8fAorICAgICAgICAgICAgbWVtY21wKCBzc2wtPnNlc3Npb24tPnBlZXJfY2VydC0+cmF3LnAsCisgICAgICAgICAgICAgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cmF3LnAsCisgICAgICAgICAgICAgICAgICAgIHNzbC0+c2Vzc2lvbi0+cGVlcl9jZXJ0LT5yYXcubGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2VydmVyIGNlcnQgY2hhbmdlZCBkdXJpbmcgcmVuZWdvdGlhdGlvbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAmJiBNQkVEVExTX1NTTF9DTElfQyAqLworCisgICAgaWYoIGF1dGhtb2RlICE9IE1CRURUTFNfU1NMX1ZFUklGWV9OT05FICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNhX2NoYWluOworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsICpjYV9jcmw7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+c25pX2NhX2NoYWluICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBjYV9jaGFpbiA9IHNzbC0+aGFuZHNoYWtlLT5zbmlfY2FfY2hhaW47CisgICAgICAgICAgICBjYV9jcmwgICA9IHNzbC0+aGFuZHNoYWtlLT5zbmlfY2FfY3JsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBjYV9jaGFpbiA9IHNzbC0+Y29uZi0+Y2FfY2hhaW47CisgICAgICAgICAgICBjYV9jcmwgICA9IHNzbC0+Y29uZi0+Y2FfY3JsOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGNhX2NoYWluID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImdvdCBubyBDQSBjaGFpbiIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQ0FfQ0hBSU5fUkVRVUlSRUQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIE1haW4gY2hlY2s6IHZlcmlmeSBjZXJ0aWZpY2F0ZQorICAgICAgICAgKi8KKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF92ZXJpZnlfd2l0aF9wcm9maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NoYWluLCBjYV9jcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+Y29uZi0+Y2VydF9wcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT52ZXJpZnlfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmZfdnJmeSwgc3NsLT5jb25mLT5wX3ZyZnkgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJ4NTA5X3ZlcmlmeV9jZXJ0IiwgcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTZWNvbmRhcnkgY2hlY2tzOiBhbHdheXMgZG9uZSwgYnV0IGNoYW5nZSAncmV0JyBvbmx5IGlmIGl0IHdhcyAwCisgICAgICAgICAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrID0gJnNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnBlZXJfY2VydC0+cGs7CisKKyAgICAgICAgICAgIC8qIElmIGNlcnRpZmljYXRlIHVzZXMgYW4gRUMga2V5LCBtYWtlIHN1cmUgdGhlIGN1cnZlIGlzIE9LICovCisgICAgICAgICAgICBpZiggbWJlZHRsc19wa19jYW5fZG8oIHBrLCBNQkVEVExTX1BLX0VDS0VZICkgJiYKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jaGVja19jdXJ2ZSggc3NsLCBtYmVkdGxzX3BrX2VjKCAqcGsgKS0+Z3JwLmlkICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgY2VydGlmaWNhdGUgKEVDIGtleSBjdXJ2ZSkiICkgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworCisgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9jaGVja19jZXJ0X3VzYWdlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlLT5wZWVyX2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyc3VpdGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIHNzbC0+Y29uZi0+ZW5kcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NsLT5zZXNzaW9uX25lZ290aWF0ZS0+dmVyaWZ5X3Jlc3VsdCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiICkgKTsKKyAgICAgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBhdXRobW9kZSA9PSBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUwgKQorICAgICAgICAgICAgcmV0ID0gMDsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIGNlcnRpZmljYXRlIiApICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qICFNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRAorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECisgICAgICAgICAgIU1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyAgICAgICAgICAhTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRAorICAgICAgICAgICFNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKworaW50IG1iZWR0bHNfc3NsX3dyaXRlX2NoYW5nZV9jaXBoZXJfc3BlYyggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBjaGFuZ2UgY2lwaGVyIHNwZWMiICkgKTsKKworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDOworICAgIHNzbC0+b3V0X21zZ2xlbiAgPSAxOworICAgIHNzbC0+b3V0X21zZ1swXSAgPSAxOworCisgICAgc3NsLT5zdGF0ZSsrOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkIiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSBjaGFuZ2UgY2lwaGVyIHNwZWMiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfcGFyc2VfY2hhbmdlX2NpcGhlcl9zcGVjKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHBhcnNlIGNoYW5nZSBjaXBoZXIgc3BlYyIgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfcmVhZF9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBzc2wtPmluX21zZ3R5cGUgIT0gTUJFRFRMU19TU0xfTVNHX0NIQU5HRV9DSVBIRVJfU1BFQyApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJhZCBjaGFuZ2UgY2lwaGVyIHNwZWMgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2dsZW4gIT0gMSB8fCBzc2wtPmluX21zZ1swXSAhPSAxICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGNoYW5nZSBjaXBoZXIgc3BlYyBtZXNzYWdlIiApICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DSEFOR0VfQ0lQSEVSX1NQRUMgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFN3aXRjaCB0byBvdXIgbmVnb3RpYXRlZCB0cmFuc2Zvcm0gYW5kIHNlc3Npb24gcGFyYW1ldGVycyBmb3IgaW5ib3VuZAorICAgICAqIGRhdGEuCisgICAgICovCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzd2l0Y2hpbmcgdG8gbmV3IHRyYW5zZm9ybSBzcGVjIGZvciBpbmJvdW5kIGRhdGEiICkgKTsKKyAgICBzc2wtPnRyYW5zZm9ybV9pbiA9IHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZTsKKyAgICBzc2wtPnNlc3Npb25faW4gPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgICAgIHNzbF9kdGxzX3JlcGxheV9yZXNldCggc3NsICk7CisjZW5kaWYKKworICAgICAgICAvKiBJbmNyZW1lbnQgZXBvY2ggKi8KKyAgICAgICAgaWYoICsrc3NsLT5pbl9lcG9jaCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJEVExTIGVwb2NoIHdvdWxkIHdyYXAiICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0NPVU5URVJfV1JBUFBJTkcgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworICAgIG1lbXNldCggc3NsLT5pbl9jdHIsIDAsIDggKTsKKworICAgIC8qCisgICAgICogU2V0IHRoZSBpbl9tc2cgcG9pbnRlciB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiBiYXNlZCBvbiBJViBsZW5ndGgKKyAgICAgKi8KKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICB7CisgICAgICAgIHNzbC0+aW5fbXNnID0gc3NsLT5pbl9pdiArIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+aXZsZW4gLQorICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Zml4ZWRfaXZsZW47CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3NsLT5pbl9tc2cgPSBzc2wtPmluX2l2OworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCisgICAgaWYoIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSggc3NsLCBNQkVEVExTX1NTTF9DSEFOTkVMX0lOQk9VTkQgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHBhcnNlIGNoYW5nZSBjaXBoZXIgc3BlYyIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfb3B0aW1pemVfY2hlY2tzdW0oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90ICpjaXBoZXJzdWl0ZV9pbmZvICkKK3sKKyAgICAoKHZvaWQpIGNpcGhlcnN1aXRlX2luZm8pOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPCBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+dXBkYXRlX2NoZWNrc3VtID0gc3NsX3VwZGF0ZV9jaGVja3N1bV9tZDVzaGExOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+bWFjID09IE1CRURUTFNfTURfU0hBMzg0ICkKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSA9IHNzbF91cGRhdGVfY2hlY2tzdW1fc2hhMzg0OworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBpZiggY2lwaGVyc3VpdGVfaW5mby0+bWFjICE9IE1CRURUTFNfTURfU0hBMzg0ICkKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPnVwZGF0ZV9jaGVja3N1bSA9IHNzbF91cGRhdGVfY2hlY2tzdW1fc2hhMjU2OworICAgIGVsc2UKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfcmVzZXRfY2hlY2tzdW0oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmc3NsLT5oYW5kc2hha2UtPmZpbl9tZDUgICk7CisgICAgbWJlZHRsc19zaGExX3N0YXJ0cyggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cyggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMjU2LCAwICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGE1MTIsIDEgKTsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworfQorCitzdGF0aWMgdm9pZCBzc2xfdXBkYXRlX2NoZWNrc3VtX3N0YXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fbWQ1ICwgYnVmLCBsZW4gKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGExLCBidWYsIGxlbiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMjU2LCBidWYsIGxlbiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhNTEyLCBidWYsIGxlbiApOworI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorc3RhdGljIHZvaWQgc3NsX3VwZGF0ZV9jaGVja3N1bV9tZDVzaGExKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJnNzbC0+aGFuZHNoYWtlLT5maW5fbWQ1ICwgYnVmLCBsZW4gKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGExLCBidWYsIGxlbiApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCitzdGF0aWMgdm9pZCBzc2xfdXBkYXRlX2NoZWNrc3VtX3NoYTI1NiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGEyNTYsIGJ1ZiwgbGVuICk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKK3N0YXRpYyB2b2lkIHNzbF91cGRhdGVfY2hlY2tzdW1fc2hhMzg0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTUxMiwgYnVmLCBsZW4gKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfc3NsKAorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZnJvbSApCit7CisgICAgY29uc3QgY2hhciAqc2VuZGVyOworICAgIG1iZWR0bHNfbWQ1X2NvbnRleHQgIG1kNTsKKyAgICBtYmVkdGxzX3NoYTFfY29udGV4dCBzaGExOworCisgICAgdW5zaWduZWQgY2hhciBwYWRidWZbNDhdOworICAgIHVuc2lnbmVkIGNoYXIgbWQ1c3VtWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIHNoYTFzdW1bMjBdOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGU7CisgICAgaWYoICFzZXNzaW9uICkKKyAgICAgICAgc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY2FsYyAgZmluaXNoZWQgc3NsIiApICk7CisKKyAgICBtYmVkdGxzX21kNV9pbml0KCAmbWQ1ICk7CisgICAgbWJlZHRsc19zaGExX2luaXQoICZzaGExICk7CisKKyAgICBtYmVkdGxzX21kNV9jbG9uZSggJm1kNSwgJnNzbC0+aGFuZHNoYWtlLT5maW5fbWQ1ICk7CisgICAgbWJlZHRsc19zaGExX2Nsb25lKCAmc2hhMSwgJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhMSApOworCisgICAgLyoKKyAgICAgKiBTU0x2MzoKKyAgICAgKiAgIGhhc2ggPQorICAgICAqICAgICAgTUQ1KCBtYXN0ZXIgKyBwYWQyICsKKyAgICAgKiAgICAgICAgICBNRDUoIGhhbmRzaGFrZSArIHNlbmRlciArIG1hc3RlciArIHBhZDEgKSApCisgICAgICogICArIFNIQTEoIG1hc3RlciArIHBhZDIgKworICAgICAqICAgICAgICAgU0hBMSggaGFuZHNoYWtlICsgc2VuZGVyICsgbWFzdGVyICsgcGFkMSApICkKKyAgICAgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ1X0FMVCkKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJmaW5pc2hlZCAgbWQ1IHN0YXRlIiwgKHVuc2lnbmVkIGNoYXIgKikKKyAgICAgICAgICAgICAgICAgICAgbWQ1LnN0YXRlLCBzaXplb2YoICBtZDUuc3RhdGUgKSApOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NIQTFfQUxUKQorICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImZpbmlzaGVkIHNoYTEgc3RhdGUiLCAodW5zaWduZWQgY2hhciAqKQorICAgICAgICAgICAgICAgICAgIHNoYTEuc3RhdGUsIHNpemVvZiggc2hhMS5zdGF0ZSApICk7CisjZW5kaWYKKworICAgIHNlbmRlciA9ICggZnJvbSA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKSA/ICJDTE5UIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiU1JWUiI7CisKKyAgICBtZW1zZXQoIHBhZGJ1ZiwgMHgzNiwgNDggKTsKKworICAgIG1iZWR0bHNfbWQ1X3VwZGF0ZSggJm1kNSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc2VuZGVyLCA0ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBzZXNzaW9uLT5tYXN0ZXIsIDQ4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBwYWRidWYsIDQ4ICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1LCBtZDVzdW0gKTsKKworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzZW5kZXIsIDQgKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgc2Vzc2lvbi0+bWFzdGVyLCA0OCApOworICAgIG1iZWR0bHNfc2hhMV91cGRhdGUoICZzaGExLCBwYWRidWYsIDQwICk7CisgICAgbWJlZHRsc19zaGExX2ZpbmlzaCggJnNoYTEsIHNoYTFzdW0gKTsKKworICAgIG1lbXNldCggcGFkYnVmLCAweDVDLCA0OCApOworCisgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmbWQ1ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBzZXNzaW9uLT5tYXN0ZXIsIDQ4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBwYWRidWYsIDQ4ICk7CisgICAgbWJlZHRsc19tZDVfdXBkYXRlKCAmbWQ1LCBtZDVzdW0sIDE2ICk7CisgICAgbWJlZHRsc19tZDVfZmluaXNoKCAmbWQ1LCBidWYgKTsKKworICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZzaGExICk7CisgICAgbWJlZHRsc19zaGExX3VwZGF0ZSggJnNoYTEsIHNlc3Npb24tPm1hc3RlciwgNDggKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgcGFkYnVmICwgNDAgKTsKKyAgICBtYmVkdGxzX3NoYTFfdXBkYXRlKCAmc2hhMSwgc2hhMXN1bSwgMjAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZmluaXNoKCAmc2hhMSwgYnVmICsgMTYgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNhbGMgZmluaXNoZWQgcmVzdWx0IiwgYnVmLCAzNiApOworCisgICAgbWJlZHRsc19tZDVfZnJlZSggICZtZDUgICk7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoICZzaGExICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoICBwYWRidWYsIHNpemVvZiggIHBhZGJ1ZiApICk7CisgICAgbWJlZHRsc196ZXJvaXplKCAgbWQ1c3VtLCBzaXplb2YoICBtZDVzdW0gKSApOworICAgIG1iZWR0bHNfemVyb2l6ZSggc2hhMXN1bSwgc2l6ZW9mKCBzaGExc3VtICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY2FsYyAgZmluaXNoZWQiICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19TU0wzICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfdGxzKAorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZnJvbSApCit7CisgICAgaW50IGxlbiA9IDEyOworICAgIGNvbnN0IGNoYXIgKnNlbmRlcjsKKyAgICBtYmVkdGxzX21kNV9jb250ZXh0ICBtZDU7CisgICAgbWJlZHRsc19zaGExX2NvbnRleHQgc2hhMTsKKyAgICB1bnNpZ25lZCBjaGFyIHBhZGJ1ZlszNl07CisKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZTsKKyAgICBpZiggIXNlc3Npb24gKQorICAgICAgICBzZXNzaW9uID0gc3NsLT5zZXNzaW9uOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBjYWxjICBmaW5pc2hlZCB0bHMiICkgKTsKKworICAgIG1iZWR0bHNfbWQ1X2luaXQoICZtZDUgKTsKKyAgICBtYmVkdGxzX3NoYTFfaW5pdCggJnNoYTEgKTsKKworICAgIG1iZWR0bHNfbWQ1X2Nsb25lKCAmbWQ1LCAmc3NsLT5oYW5kc2hha2UtPmZpbl9tZDUgKTsKKyAgICBtYmVkdGxzX3NoYTFfY2xvbmUoICZzaGExLCAmc3NsLT5oYW5kc2hha2UtPmZpbl9zaGExICk7CisKKyAgICAvKgorICAgICAqIFRMU3YxOgorICAgICAqICAgaGFzaCA9IFBSRiggbWFzdGVyLCBmaW5pc2hlZF9sYWJlbCwKKyAgICAgKiAgICAgICAgICAgICAgIE1ENSggaGFuZHNoYWtlICkgKyBTSEExKCBoYW5kc2hha2UgKSApWzAuLjExXQorICAgICAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRDVfQUxUKQorICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImZpbmlzaGVkICBtZDUgc3RhdGUiLCAodW5zaWduZWQgY2hhciAqKQorICAgICAgICAgICAgICAgICAgICBtZDUuc3RhdGUsIHNpemVvZiggIG1kNS5zdGF0ZSApICk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMV9BTFQpCisgICAgTUJFRFRMU19TU0xfREVCVUdfQlVGKCA0LCAiZmluaXNoZWQgc2hhMSBzdGF0ZSIsICh1bnNpZ25lZCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgc2hhMS5zdGF0ZSwgc2l6ZW9mKCBzaGExLnN0YXRlICkgKTsKKyNlbmRpZgorCisgICAgc2VuZGVyID0gKCBmcm9tID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgICAgICAgICAgPyAiY2xpZW50IGZpbmlzaGVkIgorICAgICAgICAgICAgIDogInNlcnZlciBmaW5pc2hlZCI7CisKKyAgICBtYmVkdGxzX21kNV9maW5pc2goICAmbWQ1LCBwYWRidWYgKTsKKyAgICBtYmVkdGxzX3NoYTFfZmluaXNoKCAmc2hhMSwgcGFkYnVmICsgMTYgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT50bHNfcHJmKCBzZXNzaW9uLT5tYXN0ZXIsIDQ4LCBzZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGJ1ZiwgMzYsIGJ1ZiwgbGVuICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjYWxjIGZpbmlzaGVkIHJlc3VsdCIsIGJ1ZiwgbGVuICk7CisKKyAgICBtYmVkdGxzX21kNV9mcmVlKCAgJm1kNSAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggJnNoYTEgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggIHBhZGJ1Ziwgc2l6ZW9mKCAgcGFkYnVmICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY2FsYyAgZmluaXNoZWQiICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorc3RhdGljIHZvaWQgc3NsX2NhbGNfZmluaXNoZWRfdGxzX3NoYTI1NigKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGZyb20gKQoreworICAgIGludCBsZW4gPSAxMjsKKyAgICBjb25zdCBjaGFyICpzZW5kZXI7CisgICAgbWJlZHRsc19zaGEyNTZfY29udGV4dCBzaGEyNTY7CisgICAgdW5zaWduZWQgY2hhciBwYWRidWZbMzJdOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGU7CisgICAgaWYoICFzZXNzaW9uICkKKyAgICAgICAgc2Vzc2lvbiA9IHNzbC0+c2Vzc2lvbjsKKworICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoICZzaGEyNTYgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gY2FsYyAgZmluaXNoZWQgdGxzIHNoYTI1NiIgKSApOworCisgICAgbWJlZHRsc19zaGEyNTZfY2xvbmUoICZzaGEyNTYsICZzc2wtPmhhbmRzaGFrZS0+ZmluX3NoYTI1NiApOworCisgICAgLyoKKyAgICAgKiBUTFN2MS4yOgorICAgICAqICAgaGFzaCA9IFBSRiggbWFzdGVyLCBmaW5pc2hlZF9sYWJlbCwKKyAgICAgKiAgICAgICAgICAgICAgIEhhc2goIGhhbmRzaGFrZSApIClbMC4xMV0KKyAgICAgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0FMVCkKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJmaW5pc2hlZCBzaGEyIHN0YXRlIiwgKHVuc2lnbmVkIGNoYXIgKikKKyAgICAgICAgICAgICAgICAgICBzaGEyNTYuc3RhdGUsIHNpemVvZiggc2hhMjU2LnN0YXRlICkgKTsKKyNlbmRpZgorCisgICAgc2VuZGVyID0gKCBmcm9tID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgICAgICAgICAgPyAiY2xpZW50IGZpbmlzaGVkIgorICAgICAgICAgICAgIDogInNlcnZlciBmaW5pc2hlZCI7CisKKyAgICBtYmVkdGxzX3NoYTI1Nl9maW5pc2goICZzaGEyNTYsIHBhZGJ1ZiApOworCisgICAgc3NsLT5oYW5kc2hha2UtPnRsc19wcmYoIHNlc3Npb24tPm1hc3RlciwgNDgsIHNlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkYnVmLCAzMiwgYnVmLCBsZW4gKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgImNhbGMgZmluaXNoZWQgcmVzdWx0IiwgYnVmLCBsZW4gKTsKKworICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoICZzaGEyNTYgKTsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggIHBhZGJ1Ziwgc2l6ZW9mKCAgcGFkYnVmICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY2FsYyAgZmluaXNoZWQiICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCitzdGF0aWMgdm9pZCBzc2xfY2FsY19maW5pc2hlZF90bHNfc2hhMzg0KAorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgZnJvbSApCit7CisgICAgaW50IGxlbiA9IDEyOworICAgIGNvbnN0IGNoYXIgKnNlbmRlcjsKKyAgICBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IHNoYTUxMjsKKyAgICB1bnNpZ25lZCBjaGFyIHBhZGJ1Zls0OF07CisKKyAgICBtYmVkdGxzX3NzbF9zZXNzaW9uICpzZXNzaW9uID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZTsKKyAgICBpZiggIXNlc3Npb24gKQorICAgICAgICBzZXNzaW9uID0gc3NsLT5zZXNzaW9uOworCisgICAgbWJlZHRsc19zaGE1MTJfaW5pdCggJnNoYTUxMiApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBjYWxjICBmaW5pc2hlZCB0bHMgc2hhMzg0IiApICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMl9jbG9uZSggJnNoYTUxMiwgJnNzbC0+aGFuZHNoYWtlLT5maW5fc2hhNTEyICk7CisKKyAgICAvKgorICAgICAqIFRMU3YxLjI6CisgICAgICogICBoYXNoID0gUFJGKCBtYXN0ZXIsIGZpbmlzaGVkX2xhYmVsLAorICAgICAqICAgICAgICAgICAgICAgSGFzaCggaGFuZHNoYWtlICkgKVswLjExXQorICAgICAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19TSEE1MTJfQUxUKQorICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImZpbmlzaGVkIHNoYTUxMiBzdGF0ZSIsICh1bnNpZ25lZCBjaGFyICopCisgICAgICAgICAgICAgICAgICAgc2hhNTEyLnN0YXRlLCBzaXplb2YoIHNoYTUxMi5zdGF0ZSApICk7CisjZW5kaWYKKworICAgIHNlbmRlciA9ICggZnJvbSA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgID8gImNsaWVudCBmaW5pc2hlZCIKKyAgICAgICAgICAgICA6ICJzZXJ2ZXIgZmluaXNoZWQiOworCisgICAgbWJlZHRsc19zaGE1MTJfZmluaXNoKCAmc2hhNTEyLCBwYWRidWYgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT50bHNfcHJmKCBzZXNzaW9uLT5tYXN0ZXIsIDQ4LCBzZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGJ1ZiwgNDgsIGJ1ZiwgbGVuICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJjYWxjIGZpbmlzaGVkIHJlc3VsdCIsIGJ1ZiwgbGVuICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKCAmc2hhNTEyICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoICBwYWRidWYsIHNpemVvZiggcGFkYnVmICkgKTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gY2FsYyAgZmluaXNoZWQiICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKK3N0YXRpYyB2b2lkIHNzbF9oYW5kc2hha2Vfd3JhcHVwX2ZyZWVfaHNfdHJhbnNmb3JtKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiPT4gaGFuZHNoYWtlIHdyYXB1cDogZmluYWwgZnJlZSIgKSApOworCisgICAgLyoKKyAgICAgKiBGcmVlIG91ciBoYW5kc2hha2UgcGFyYW1zCisgICAgICovCisgICAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX2ZyZWUoIHNzbC0+aGFuZHNoYWtlICk7CisgICAgbWJlZHRsc19mcmVlKCBzc2wtPmhhbmRzaGFrZSApOworICAgIHNzbC0+aGFuZHNoYWtlID0gTlVMTDsKKworICAgIC8qCisgICAgICogRnJlZSB0aGUgcHJldmlvdXMgdHJhbnNmb3JtIGFuZCBzd2l0aCBpbiB0aGUgY3VycmVudCBvbmUKKyAgICAgKi8KKyAgICBpZiggc3NsLT50cmFuc2Zvcm0gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoIHNzbC0+dHJhbnNmb3JtICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT50cmFuc2Zvcm0gKTsKKyAgICB9CisgICAgc3NsLT50cmFuc2Zvcm0gPSBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGU7CisgICAgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlID0gTlVMTDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiPD0gaGFuZHNoYWtlIHdyYXB1cDogZmluYWwgZnJlZSIgKSApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV93cmFwdXAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJlc3VtZSA9IHNzbC0+aGFuZHNoYWtlLT5yZXN1bWU7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIj0+IGhhbmRzaGFrZSB3cmFwdXAiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgIHsKKyAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzID0gIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRE9ORTsKKyAgICAgICAgc3NsLT5yZW5lZ29fcmVjb3Jkc19zZWVuID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogRnJlZSB0aGUgcHJldmlvdXMgc2Vzc2lvbiBhbmQgc3dpdGNoIGluIHRoZSBjdXJyZW50IG9uZQorICAgICAqLworICAgIGlmKCBzc2wtPnNlc3Npb24gKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgICAgIC8qIFJGQyA3MzY2IDMuMToga2VlcCB0aGUgRXRNIHN0YXRlICovCisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPmVuY3J5cHRfdGhlbl9tYWMgPQorICAgICAgICAgICAgICAgICAgc3NsLT5zZXNzaW9uLT5lbmNyeXB0X3RoZW5fbWFjOworI2VuZGlmCisKKyAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCBzc2wtPnNlc3Npb24gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnNlc3Npb24gKTsKKyAgICB9CisgICAgc3NsLT5zZXNzaW9uID0gc3NsLT5zZXNzaW9uX25lZ290aWF0ZTsKKyAgICBzc2wtPnNlc3Npb25fbmVnb3RpYXRlID0gTlVMTDsKKworICAgIC8qCisgICAgICogQWRkIGNhY2hlIGVudHJ5CisgICAgICovCisgICAgaWYoIHNzbC0+Y29uZi0+Zl9zZXRfY2FjaGUgIT0gTlVMTCAmJgorICAgICAgICBzc2wtPnNlc3Npb24tPmlkX2xlbiAhPSAwICYmCisgICAgICAgIHJlc3VtZSA9PSAwICkKKyAgICB7CisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmZfc2V0X2NhY2hlKCBzc2wtPmNvbmYtPnBfY2FjaGUsIHNzbC0+c2Vzc2lvbiApICE9IDAgKQorICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJjYWNoZSBkaWQgbm90IHN0b3JlIHNlc3Npb24iICkgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICBzc2wtPmhhbmRzaGFrZS0+ZmxpZ2h0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogQ2FuY2VsIGhhbmRzaGFrZSB0aW1lciAqLworICAgICAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIDAgKTsKKworICAgICAgICAvKiBLZWVwIGxhc3QgZmxpZ2h0IGFyb3VuZCBpbiBjYXNlIHdlIG5lZWQgdG8gcmVzZW5kIGl0OgorICAgICAgICAgKiB3ZSBuZWVkIHRoZSBoYW5kc2hha2UgYW5kIHRyYW5zZm9ybSBzdHJ1Y3R1cmVzIGZvciB0aGF0ICovCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2tpcCBmcmVlaW5nIGhhbmRzaGFrZSBhbmQgdHJhbnNmb3JtIiApICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBzc2xfaGFuZHNoYWtlX3dyYXB1cF9mcmVlX2hzX3RyYW5zZm9ybSggc3NsICk7CisKKyAgICBzc2wtPnN0YXRlKys7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggIjw9IGhhbmRzaGFrZSB3cmFwdXAiICkgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX3dyaXRlX2ZpbmlzaGVkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQsIGhhc2hfbGVuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBmaW5pc2hlZCIgKSApOworCisgICAgLyoKKyAgICAgKiBTZXQgdGhlIG91dF9tc2cgcG9pbnRlciB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiBiYXNlZCBvbiBJViBsZW5ndGgKKyAgICAgKi8KKyAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICB7CisgICAgICAgIHNzbC0+b3V0X21zZyA9IHNzbC0+b3V0X2l2ICsgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlLT5pdmxlbiAtCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZS0+Zml4ZWRfaXZsZW47CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3NsLT5vdXRfbXNnID0gc3NsLT5vdXRfaXY7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY19maW5pc2hlZCggc3NsLCBzc2wtPm91dF9tc2cgKyA0LCBzc2wtPmNvbmYtPmVuZHBvaW50ICk7CisKKyAgICAvKgorICAgICAqIFJGQyA1MjQ2IDcuNC45IChQYWdlIDYzKSBzYXlzIDEyIGlzIHRoZSBkZWZhdWx0IGxlbmd0aCBhbmQgY2lwaGVyc3VpdGVzCisgICAgICogbWF5IGRlZmluZSBzb21lIG90aGVyIHZhbHVlLiBDdXJyZW50bHkgKGVhcmx5IDIwMTYpLCBubyBkZWZpbmVkCisgICAgICogY2lwaGVyc3VpdGUgZG9lcyB0aGlzIChhbmQgdGhpcyBpcyB1bmxpa2VseSB0byBjaGFuZ2UgYXMgYWN0aXZpdHkgaGFzCisgICAgICogbW92ZWQgdG8gVExTIDEuMyBub3cpIHNvIHdlIGNhbiBrZWVwIHRoZSBoYXJkY29kZWQgMTIgaGVyZS4KKyAgICAgKi8KKyAgICBoYXNoX2xlbiA9ICggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkgPyAzNiA6IDEyOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIHNzbC0+dmVyaWZ5X2RhdGFfbGVuID0gaGFzaF9sZW47CisgICAgbWVtY3B5KCBzc2wtPm93bl92ZXJpZnlfZGF0YSwgc3NsLT5vdXRfbXNnICsgNCwgaGFzaF9sZW4gKTsKKyNlbmRpZgorCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IDQgKyBoYXNoX2xlbjsKKyAgICBzc2wtPm91dF9tc2d0eXBlID0gTUJFRFRMU19TU0xfTVNHX0hBTkRTSEFLRTsKKyAgICBzc2wtPm91dF9tc2dbMF0gID0gTUJFRFRMU19TU0xfSFNfRklOSVNIRUQ7CisKKyAgICAvKgorICAgICAqIEluIGNhc2Ugb2Ygc2Vzc2lvbiByZXN1bWluZywgaW52ZXJ0IHRoZSBjbGllbnQgYW5kIHNlcnZlcgorICAgICAqIENoYW5nZUNpcGhlclNwZWMgbWVzc2FnZXMgb3JkZXIuCisgICAgICovCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfSEFORFNIQUtFX1dSQVBVUDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfQ0xJRU5UX0NIQU5HRV9DSVBIRVJfU1BFQzsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNzbC0+c3RhdGUrKzsKKworICAgIC8qCisgICAgICogU3dpdGNoIHRvIG91ciBuZWdvdGlhdGVkIHRyYW5zZm9ybSBhbmQgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZvciBvdXRib3VuZAorICAgICAqIGRhdGEuCisgICAgICovCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzd2l0Y2hpbmcgdG8gbmV3IHRyYW5zZm9ybSBzcGVjIGZvciBvdXRib3VuZCBkYXRhIiApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIHNzbC0+Y29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGk7CisKKyAgICAgICAgLyogUmVtZW1iZXIgY3VycmVudCBlcG9jaCBzZXR0aW5ncyBmb3IgcmVzZW5kaW5nICovCisgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5hbHRfdHJhbnNmb3JtX291dCA9IHNzbC0+dHJhbnNmb3JtX291dDsKKyAgICAgICAgbWVtY3B5KCBzc2wtPmhhbmRzaGFrZS0+YWx0X291dF9jdHIsIHNzbC0+b3V0X2N0ciwgOCApOworCisgICAgICAgIC8qIFNldCBzZXF1ZW5jZV9udW1iZXIgdG8gemVybyAqLworICAgICAgICBtZW1zZXQoIHNzbC0+b3V0X2N0ciArIDIsIDAsIDYgKTsKKworICAgICAgICAvKiBJbmNyZW1lbnQgZXBvY2ggKi8KKyAgICAgICAgZm9yKCBpID0gMjsgaSA+IDA7IGktLSApCisgICAgICAgICAgICBpZiggKytzc2wtPm91dF9jdHJbaSAtIDFdICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFRoZSBsb29wIGdvZXMgdG8gaXRzIGVuZCBpZmYgdGhlIGNvdW50ZXIgaXMgd3JhcHBpbmcgKi8KKyAgICAgICAgaWYoIGkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiRFRMUyBlcG9jaCB3b3VsZCB3cmFwIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9DT1VOVEVSX1dSQVBQSU5HICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKyAgICBtZW1zZXQoIHNzbC0+b3V0X2N0ciwgMCwgOCApOworCisgICAgc3NsLT50cmFuc2Zvcm1fb3V0ID0gc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlOworICAgIHNzbC0+c2Vzc2lvbl9vdXQgPSBzc2wtPnNlc3Npb25fbmVnb3RpYXRlOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwpCisgICAgaWYoIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSggc3NsLCBNQkVEVExTX1NTTF9DSEFOTkVMX09VVEJPVU5EICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaHdfcmVjb3JkX2FjdGl2YXRlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQoIHNzbCApOworI2VuZGlmCisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIGZpbmlzaGVkIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyNkZWZpbmUgU1NMX01BWF9IQVNIX0xFTiAzNgorI2Vsc2UKKyNkZWZpbmUgU1NMX01BWF9IQVNIX0xFTiAxMgorI2VuZGlmCisKK2ludCBtYmVkdGxzX3NzbF9wYXJzZV9maW5pc2hlZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGludCBoYXNoX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltTU0xfTUFYX0hBU0hfTEVOXTsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcGFyc2UgZmluaXNoZWQiICkgKTsKKworICAgIHNzbC0+aGFuZHNoYWtlLT5jYWxjX2ZpbmlzaGVkKCBzc2wsIGJ1Ziwgc3NsLT5jb25mLT5lbmRwb2ludCBeIDEgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgZmluaXNoZWQgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICB9CisKKyAgICAvKiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gY2lwaGVyc3VpdGUgdXNpbmcgYW5vdGhlciBsZW5ndGggd2l0aCBUTFMgMS4yICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19TU0wzKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQorICAgICAgICBoYXNoX2xlbiA9IDM2OworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBoYXNoX2xlbiA9IDEyOworCisgICAgaWYoIHNzbC0+aW5fbXNnWzBdICE9IE1CRURUTFNfU1NMX0hTX0ZJTklTSEVEIHx8CisgICAgICAgIHNzbC0+aW5faHNsZW4gICE9IG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApICsgaGFzaF9sZW4gKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgZmluaXNoZWQgbWVzc2FnZSIgKSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfRklOSVNIRUQgKTsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc19zc2xfc2FmZXJfbWVtY21wKCBzc2wtPmluX21zZyArIG1iZWR0bHNfc3NsX2hzX2hkcl9sZW4oIHNzbCApLAorICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgaGFzaF9sZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiYmFkIGZpbmlzaGVkIG1lc3NhZ2UiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0ZJTklTSEVEICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIHNzbC0+dmVyaWZ5X2RhdGFfbGVuID0gaGFzaF9sZW47CisgICAgbWVtY3B5KCBzc2wtPnBlZXJfdmVyaWZ5X2RhdGEsIGJ1ZiwgaGFzaF9sZW4gKTsKKyNlbmRpZgorCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlLT5yZXN1bWUgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfQ0xJRU5UX0NIQU5HRV9DSVBIRVJfU1BFQzsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgICAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfSEFORFNIQUtFX1dSQVBVUDsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNzbC0+c3RhdGUrKzsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgbWJlZHRsc19zc2xfcmVjdl9mbGlnaHRfY29tcGxldGVkKCBzc2wgKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSBwYXJzZSBmaW5pc2hlZCIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIHNzbF9oYW5kc2hha2VfcGFyYW1zX2luaXQoIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMgKmhhbmRzaGFrZSApCit7CisgICAgbWVtc2V0KCBoYW5kc2hha2UsIDAsIHNpemVvZiggbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcyApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpIHx8IGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgXAorICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKQorICAgICBtYmVkdGxzX21kNV9pbml0KCAgICZoYW5kc2hha2UtPmZpbl9tZDUgICk7CisgICAgbWJlZHRsc19zaGExX2luaXQoICAgJmhhbmRzaGFrZS0+ZmluX3NoYTEgKTsKKyAgICAgbWJlZHRsc19tZDVfc3RhcnRzKCAmaGFuZHNoYWtlLT5maW5fbWQ1ICApOworICAgIG1iZWR0bHNfc2hhMV9zdGFydHMoICZoYW5kc2hha2UtPmZpbl9zaGExICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgbWJlZHRsc19zaGEyNTZfaW5pdCggICAmaGFuZHNoYWtlLT5maW5fc2hhMjU2ICAgICk7CisgICAgbWJlZHRsc19zaGEyNTZfc3RhcnRzKCAmaGFuZHNoYWtlLT5maW5fc2hhMjU2LCAwICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgbWJlZHRsc19zaGE1MTJfaW5pdCggICAmaGFuZHNoYWtlLT5maW5fc2hhNTEyICAgICk7CisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmaGFuZHNoYWtlLT5maW5fc2hhNTEyLCAxICk7CisjZW5kaWYKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKworICAgIGhhbmRzaGFrZS0+dXBkYXRlX2NoZWNrc3VtID0gc3NsX3VwZGF0ZV9jaGVja3N1bV9zdGFydDsKKyAgICBoYW5kc2hha2UtPnNpZ19hbGcgPSBNQkVEVExTX1NTTF9IQVNIX1NIQTE7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgbWJlZHRsc19kaG1faW5pdCggJmhhbmRzaGFrZS0+ZGhtX2N0eCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKyAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmhhbmRzaGFrZS0+ZWNkaF9jdHggKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIG1iZWR0bHNfZWNqcGFrZV9pbml0KCAmaGFuZHNoYWtlLT5lY2pwYWtlX2N0eCApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgaGFuZHNoYWtlLT5lY2pwYWtlX2NhY2hlID0gTlVMTDsKKyAgICBoYW5kc2hha2UtPmVjanBha2VfY2FjaGVfbGVuID0gMDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgaGFuZHNoYWtlLT5zbmlfYXV0aG1vZGUgPSBNQkVEVExTX1NTTF9WRVJJRllfVU5TRVQ7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc3NsX3RyYW5zZm9ybV9pbml0KCBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKnRyYW5zZm9ybSApCit7CisgICAgbWVtc2V0KCB0cmFuc2Zvcm0sIDAsIHNpemVvZihtYmVkdGxzX3NzbF90cmFuc2Zvcm0pICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmdHJhbnNmb3JtLT5jaXBoZXJfY3R4X2VuYyApOworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZ0cmFuc2Zvcm0tPmNpcGhlcl9jdHhfZGVjICk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZ0cmFuc2Zvcm0tPm1kX2N0eF9lbmMgKTsKKyAgICBtYmVkdGxzX21kX2luaXQoICZ0cmFuc2Zvcm0tPm1kX2N0eF9kZWMgKTsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9zZXNzaW9uX2luaXQoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKnNlc3Npb24gKQoreworICAgIG1lbXNldCggc2Vzc2lvbiwgMCwgc2l6ZW9mKG1iZWR0bHNfc3NsX3Nlc3Npb24pICk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX2hhbmRzaGFrZV9pbml0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIC8qIENsZWFyIG9sZCBoYW5kc2hha2UgaW5mb3JtYXRpb24gaWYgcHJlc2VudCAqLworICAgIGlmKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUgKQorICAgICAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm1fZnJlZSggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlICk7CisgICAgaWYoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgKQorICAgICAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgKTsKKyAgICBpZiggc3NsLT5oYW5kc2hha2UgKQorICAgICAgICBtYmVkdGxzX3NzbF9oYW5kc2hha2VfZnJlZSggc3NsLT5oYW5kc2hha2UgKTsKKworICAgIC8qCisgICAgICogRWl0aGVyIHRoZSBwb2ludGVycyBhcmUgbm93IE5VTEwgb3IgY2xlYXJlZCBwcm9wZXJseSBhbmQgY2FuIGJlIGZyZWVkLgorICAgICAqIE5vdyBhbGxvY2F0ZSBtaXNzaW5nIHN0cnVjdHVyZXMuCisgICAgICovCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YobWJlZHRsc19zc2xfdHJhbnNmb3JtKSApOworICAgIH0KKworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YobWJlZHRsc19zc2xfc2Vzc2lvbikgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5oYW5kc2hha2UgPT0gTlVMTCApCisgICAgeworICAgICAgICBzc2wtPmhhbmRzaGFrZSA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YobWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcykgKTsKKyAgICB9CisKKyAgICAvKiBBbGwgcG9pbnRlcnMgc2hvdWxkIGV4aXN0IGFuZCBjYW4gYmUgZGlyZWN0bHkgZnJlZWQgd2l0aG91dCBpc3N1ZSAqLworICAgIGlmKCBzc2wtPmhhbmRzaGFrZSA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+dHJhbnNmb3JtX25lZ290aWF0ZSA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUgPT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImFsbG9jKCkgb2Ygc3NsIHN1Yi1jb250ZXh0cyBmYWlsZWQiICkgKTsKKworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aGFuZHNoYWtlICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSApOworCisgICAgICAgIHNzbC0+aGFuZHNoYWtlID0gTlVMTDsKKyAgICAgICAgc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlID0gTlVMTDsKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZSA9IE5VTEw7CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0KCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICk7CisgICAgc3NsX3RyYW5zZm9ybV9pbml0KCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUgKTsKKyAgICBzc2xfaGFuZHNoYWtlX3BhcmFtc19pbml0KCBzc2wtPmhhbmRzaGFrZSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgc3NsLT5oYW5kc2hha2UtPmFsdF90cmFuc2Zvcm1fb3V0ID0gc3NsLT50cmFuc2Zvcm1fb3V0OworCisgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfUFJFUEFSSU5HOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+cmV0cmFuc21pdF9zdGF0ZSA9IE1CRURUTFNfU1NMX1JFVFJBTlNfV0FJVElORzsKKworICAgICAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIDAgKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKy8qIER1bW15IGNvb2tpZSBjYWxsYmFja3MgZm9yIGRlZmF1bHRzICovCitzdGF0aWMgaW50IHNzbF9jb29raWVfd3JpdGVfZHVtbXkoIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaV9pZCwgc2l6ZV90IGNsaV9pZF9sZW4gKQoreworICAgICgodm9pZCkgY3R4KTsKKyAgICAoKHZvaWQpIHApOworICAgICgodm9pZCkgZW5kKTsKKyAgICAoKHZvaWQpIGNsaV9pZCk7CisgICAgKCh2b2lkKSBjbGlfaWRfbGVuKTsKKworICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKK30KKworc3RhdGljIGludCBzc2xfY29va2llX2NoZWNrX2R1bW15KCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29va2llLCBzaXplX3QgY29va2llX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGlfaWQsIHNpemVfdCBjbGlfaWRfbGVuICkKK3sKKyAgICAoKHZvaWQpIGN0eCk7CisgICAgKCh2b2lkKSBjb29raWUpOworICAgICgodm9pZCkgY29va2llX2xlbik7CisgICAgKCh2b2lkKSBjbGlfaWQpOworICAgICgodm9pZCkgY2xpX2lkX2xlbik7CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgJiYgTUJFRFRMU19TU0xfU1JWX0MgKi8KKworLyoKKyAqIEluaXRpYWxpemUgYW4gU1NMIGNvbnRleHQKKyAqLwordm9pZCBtYmVkdGxzX3NzbF9pbml0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIG1lbXNldCggc3NsLCAwLCBzaXplb2YoIG1iZWR0bHNfc3NsX2NvbnRleHQgKSApOworfQorCisvKgorICogU2V0dXAgYW4gU1NMIGNvbnRleHQKKyAqLworaW50IG1iZWR0bHNfc3NsX3NldHVwKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBzaXplX3QgbGVuID0gTUJFRFRMU19TU0xfQlVGRkVSX0xFTjsKKworICAgIHNzbC0+Y29uZiA9IGNvbmY7CisKKyAgICAvKgorICAgICAqIFByZXBhcmUgYmFzZSBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgaWYoICggc3NsLT4gaW5fYnVmID0gbWJlZHRsc19jYWxsb2MoIDEsIGxlbiApICkgPT0gTlVMTCB8fAorICAgICAgICAoIHNzbC0+b3V0X2J1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCBsZW4gKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJhbGxvYyglZCBieXRlcykgZmFpbGVkIiwgbGVuICkgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmluX2J1ZiApOworICAgICAgICBzc2wtPmluX2J1ZiA9IE5VTEw7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggY29uZi0+dHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBzc2wtPm91dF9oZHIgPSBzc2wtPm91dF9idWY7CisgICAgICAgIHNzbC0+b3V0X2N0ciA9IHNzbC0+b3V0X2J1ZiArICAzOworICAgICAgICBzc2wtPm91dF9sZW4gPSBzc2wtPm91dF9idWYgKyAxMTsKKyAgICAgICAgc3NsLT5vdXRfaXYgID0gc3NsLT5vdXRfYnVmICsgMTM7CisgICAgICAgIHNzbC0+b3V0X21zZyA9IHNzbC0+b3V0X2J1ZiArIDEzOworCisgICAgICAgIHNzbC0+aW5faGRyID0gc3NsLT5pbl9idWY7CisgICAgICAgIHNzbC0+aW5fY3RyID0gc3NsLT5pbl9idWYgKyAgMzsKKyAgICAgICAgc3NsLT5pbl9sZW4gPSBzc2wtPmluX2J1ZiArIDExOworICAgICAgICBzc2wtPmluX2l2ICA9IHNzbC0+aW5fYnVmICsgMTM7CisgICAgICAgIHNzbC0+aW5fbXNnID0gc3NsLT5pbl9idWYgKyAxMzsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBzc2wtPm91dF9jdHIgPSBzc2wtPm91dF9idWY7CisgICAgICAgIHNzbC0+b3V0X2hkciA9IHNzbC0+b3V0X2J1ZiArICA4OworICAgICAgICBzc2wtPm91dF9sZW4gPSBzc2wtPm91dF9idWYgKyAxMTsKKyAgICAgICAgc3NsLT5vdXRfaXYgID0gc3NsLT5vdXRfYnVmICsgMTM7CisgICAgICAgIHNzbC0+b3V0X21zZyA9IHNzbC0+b3V0X2J1ZiArIDEzOworCisgICAgICAgIHNzbC0+aW5fY3RyID0gc3NsLT5pbl9idWY7CisgICAgICAgIHNzbC0+aW5faGRyID0gc3NsLT5pbl9idWYgKyAgODsKKyAgICAgICAgc3NsLT5pbl9sZW4gPSBzc2wtPmluX2J1ZiArIDExOworICAgICAgICBzc2wtPmluX2l2ICA9IHNzbC0+aW5fYnVmICsgMTM7CisgICAgICAgIHNzbC0+aW5fbXNnID0gc3NsLT5pbl9idWYgKyAxMzsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBzc2xfaGFuZHNoYWtlX2luaXQoIHNzbCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJlc2V0IGFuIGluaXRpYWxpemVkIGFuZCB1c2VkIFNTTCBjb250ZXh0IGZvciByZS11c2Ugd2hpbGUgcmV0YWluaW5nCisgKiBhbGwgYXBwbGljYXRpb24tc2V0IHZhcmlhYmxlcywgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGRhdGEuCisgKgorICogSWYgcGFydGlhbCBpcyBub24temVybywga2VlcCBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgYW5kIGNsaWVudCBJRC4KKyAqIChVc2Ugd2hlbiBhIERUTFMgY2xpZW50IHJlY29ubmVjdHMgZnJvbSB0aGUgc2FtZSBwb3J0LikKKyAqLworc3RhdGljIGludCBzc2xfc2Vzc2lvbl9yZXNldF9pbnQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgaW50IHBhcnRpYWwgKQoreworICAgIGludCByZXQ7CisKKyAgICBzc2wtPnN0YXRlID0gTUJFRFRMU19TU0xfSEVMTE9fUkVRVUVTVDsKKworICAgIC8qIENhbmNlbCBhbnkgcG9zc2libHkgcnVubmluZyB0aW1lciAqLworICAgIHNzbF9zZXRfdGltZXIoIHNzbCwgMCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9IE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFOworICAgIHNzbC0+cmVuZWdvX3JlY29yZHNfc2VlbiA9IDA7CisKKyAgICBzc2wtPnZlcmlmeV9kYXRhX2xlbiA9IDA7CisgICAgbWVtc2V0KCBzc2wtPm93bl92ZXJpZnlfZGF0YSwgMCwgTUJFRFRMU19TU0xfVkVSSUZZX0RBVEFfTUFYX0xFTiApOworICAgIG1lbXNldCggc3NsLT5wZWVyX3ZlcmlmeV9kYXRhLCAwLCBNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOICk7CisjZW5kaWYKKyAgICBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID0gTUJFRFRMU19TU0xfTEVHQUNZX1JFTkVHT1RJQVRJT047CisKKyAgICBzc2wtPmluX29mZnQgPSBOVUxMOworCisgICAgc3NsLT5pbl9tc2cgPSBzc2wtPmluX2J1ZiArIDEzOworICAgIHNzbC0+aW5fbXNndHlwZSA9IDA7CisgICAgc3NsLT5pbl9tc2dsZW4gPSAwOworICAgIGlmKCBwYXJ0aWFsID09IDAgKQorICAgICAgICBzc2wtPmluX2xlZnQgPSAwOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBzc2wtPm5leHRfcmVjb3JkX29mZnNldCA9IDA7CisgICAgc3NsLT5pbl9lcG9jaCA9IDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgc3NsX2R0bHNfcmVwbGF5X3Jlc2V0KCBzc2wgKTsKKyNlbmRpZgorCisgICAgc3NsLT5pbl9oc2xlbiA9IDA7CisgICAgc3NsLT5uYl96ZXJvID0gMDsKKyAgICBzc2wtPnJlY29yZF9yZWFkID0gMDsKKworICAgIHNzbC0+b3V0X21zZyA9IHNzbC0+b3V0X2J1ZiArIDEzOworICAgIHNzbC0+b3V0X21zZ3R5cGUgPSAwOworICAgIHNzbC0+b3V0X21zZ2xlbiA9IDA7CisgICAgc3NsLT5vdXRfbGVmdCA9IDA7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKyAgICBpZiggc3NsLT5zcGxpdF9kb25lICE9IE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0RJU0FCTEVEICkKKyAgICAgICAgc3NsLT5zcGxpdF9kb25lID0gMDsKKyNlbmRpZgorCisgICAgc3NsLT50cmFuc2Zvcm1faW4gPSBOVUxMOworICAgIHNzbC0+dHJhbnNmb3JtX291dCA9IE5VTEw7CisKKyAgICBtZW1zZXQoIHNzbC0+b3V0X2J1ZiwgMCwgTUJFRFRMU19TU0xfQlVGRkVSX0xFTiApOworICAgIGlmKCBwYXJ0aWFsID09IDAgKQorICAgICAgICBtZW1zZXQoIHNzbC0+aW5fYnVmLCAwLCBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKyAgICBpZiggbWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJnb2luZyBmb3IgbWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0KCkiICkgKTsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfaHdfcmVjb3JkX3Jlc2V0KCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9od19yZWNvcmRfcmVzZXQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggc3NsLT50cmFuc2Zvcm0gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoIHNzbC0+dHJhbnNmb3JtICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT50cmFuc2Zvcm0gKTsKKyAgICAgICAgc3NsLT50cmFuc2Zvcm0gPSBOVUxMOworICAgIH0KKworICAgIGlmKCBzc2wtPnNlc3Npb24gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKCBzc2wtPnNlc3Npb24gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnNlc3Npb24gKTsKKyAgICAgICAgc3NsLT5zZXNzaW9uID0gTlVMTDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgc3NsLT5hbHBuX2Nob3NlbiA9IE5VTEw7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgaWYoIHBhcnRpYWwgPT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+Y2xpX2lkICk7CisgICAgICAgIHNzbC0+Y2xpX2lkID0gTlVMTDsKKyAgICAgICAgc3NsLT5jbGlfaWRfbGVuID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCAoIHJldCA9IHNzbF9oYW5kc2hha2VfaW5pdCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUmVzZXQgYW4gaW5pdGlhbGl6ZWQgYW5kIHVzZWQgU1NMIGNvbnRleHQgZm9yIHJlLXVzZSB3aGlsZSByZXRhaW5pbmcKKyAqIGFsbCBhcHBsaWNhdGlvbi1zZXQgdmFyaWFibGVzLCBmdW5jdGlvbiBwb2ludGVycyBhbmQgZGF0YS4KKyAqLworaW50IG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgcmV0dXJuKCBzc2xfc2Vzc2lvbl9yZXNldF9pbnQoIHNzbCwgMCApICk7Cit9CisKKy8qCisgKiBTU0wgc2V0IGFjY2Vzc29ycworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZW5kcG9pbnQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IGVuZHBvaW50ICkKK3sKKyAgICBjb25mLT5lbmRwb2ludCAgID0gZW5kcG9pbnQ7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl90cmFuc3BvcnQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHRyYW5zcG9ydCApCit7CisgICAgY29uZi0+dHJhbnNwb3J0ID0gdHJhbnNwb3J0OworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0FOVElfUkVQTEFZKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2R0bHNfYW50aV9yZXBsYXkoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY2hhciBtb2RlICkKK3sKKyAgICBjb25mLT5hbnRpX3JlcGxheSA9IG1vZGU7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgdW5zaWduZWQgbGltaXQgKQoreworICAgIGNvbmYtPmJhZG1hY19saW1pdCA9IGxpbWl0OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfaGFuZHNoYWtlX3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgdWludDMyX3QgbWluLCB1aW50MzJfdCBtYXggKQoreworICAgIGNvbmYtPmhzX3RpbWVvdXRfbWluID0gbWluOworICAgIGNvbmYtPmhzX3RpbWVvdXRfbWF4ID0gbWF4OworfQorI2VuZGlmCisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgYXV0aG1vZGUgKQoreworICAgIGNvbmYtPmF1dGhtb2RlICAgPSBhdXRobW9kZTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3ZlcmlmeSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl92cmZ5KSh2b2lkICosIG1iZWR0bHNfeDUwOV9jcnQgKiwgaW50LCB1aW50MzJfdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfdnJmeSApCit7CisgICAgY29uZi0+Zl92cmZ5ICAgICAgPSBmX3ZyZnk7CisgICAgY29uZi0+cF92cmZ5ICAgICAgPSBwX3ZyZnk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9ybmcoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBjb25mLT5mX3JuZyAgICAgID0gZl9ybmc7CisgICAgY29uZi0+cF9ybmcgICAgICA9IHBfcm5nOworfQorCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICB2b2lkICgqZl9kYmcpKHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgICpwX2RiZyApCit7CisgICAgY29uZi0+Zl9kYmcgICAgICA9IGZfZGJnOworICAgIGNvbmYtPnBfZGJnICAgICAgPSBwX2RiZzsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9zZXRfYmlvKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgIHZvaWQgKnBfYmlvLAorICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX3QgKmZfc2VuZCwKKyAgICAgICAgbWJlZHRsc19zc2xfcmVjdl90ICpmX3JlY3YsCisgICAgICAgIG1iZWR0bHNfc3NsX3JlY3ZfdGltZW91dF90ICpmX3JlY3ZfdGltZW91dCApCit7CisgICAgc3NsLT5wX2JpbyAgICAgICAgICA9IHBfYmlvOworICAgIHNzbC0+Zl9zZW5kICAgICAgICAgPSBmX3NlbmQ7CisgICAgc3NsLT5mX3JlY3YgICAgICAgICA9IGZfcmVjdjsKKyAgICBzc2wtPmZfcmVjdl90aW1lb3V0ID0gZl9yZWN2X3RpbWVvdXQ7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9yZWFkX3RpbWVvdXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgdWludDMyX3QgdGltZW91dCApCit7CisgICAgY29uZi0+cmVhZF90aW1lb3V0ICAgPSB0aW1lb3V0OworfQorCit2b2lkIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYiggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfdGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2V0X3RpbWVyX3QgKmZfc2V0X3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF90aW1lcl90ICpmX2dldF90aW1lciApCit7CisgICAgc3NsLT5wX3RpbWVyICAgICAgICA9IHBfdGltZXI7CisgICAgc3NsLT5mX3NldF90aW1lciAgICA9IGZfc2V0X3RpbWVyOworICAgIHNzbC0+Zl9nZXRfdGltZXIgICAgPSBmX2dldF90aW1lcjsKKworICAgIC8qIE1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIG5vIHRpbWVyIHJ1bm5pbmcgKi8KKyAgICBzc2xfc2V0X3RpbWVyKCBzc2wsIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICB2b2lkICpwX2NhY2hlLAorICAgICAgICBpbnQgKCpmX2dldF9jYWNoZSkodm9pZCAqLCBtYmVkdGxzX3NzbF9zZXNzaW9uICopLAorICAgICAgICBpbnQgKCpmX3NldF9jYWNoZSkodm9pZCAqLCBjb25zdCBtYmVkdGxzX3NzbF9zZXNzaW9uICopICkKK3sKKyAgICBjb25mLT5wX2NhY2hlID0gcF9jYWNoZTsKKyAgICBjb25mLT5mX2dldF9jYWNoZSA9IGZfZ2V0X2NhY2hlOworICAgIGNvbmYtPmZfc2V0X2NhY2hlID0gZl9zZXRfY2FjaGU7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCitpbnQgbWJlZHRsc19zc2xfc2V0X3Nlc3Npb24oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgY29uc3QgbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCBzc2wgPT0gTlVMTCB8fAorICAgICAgICBzZXNzaW9uID09IE5VTEwgfHwKKyAgICAgICAgc3NsLT5zZXNzaW9uX25lZ290aWF0ZSA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+Y29uZi0+ZW5kcG9pbnQgIT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gc3NsX3Nlc3Npb25fY29weSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSwgc2Vzc2lvbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBzc2wtPmhhbmRzaGFrZS0+cmVzdW1lID0gMTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NMSV9DICovCisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZXMgKQoreworICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wXSA9IGNpcGhlcnN1aXRlczsKKyAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMV0gPSBjaXBoZXJzdWl0ZXM7CisgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzJdID0gY2lwaGVyc3VpdGVzOworICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zXSA9IGNpcGhlcnN1aXRlczsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlc19mb3JfdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpjaXBoZXJzdWl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFqb3IsIGludCBtaW5vciApCit7CisgICAgaWYoIG1ham9yICE9IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMyApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCBtaW5vciA8IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCB8fCBtaW5vciA+IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApCisgICAgICAgIHJldHVybjsKKworICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbbWlub3JdID0gY2lwaGVyc3VpdGVzOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfY2VydF9wcm9maWxlKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUgKQoreworICAgIGNvbmYtPmNlcnRfcHJvZmlsZSA9IHByb2ZpbGU7Cit9CisKKy8qIEFwcGVuZCBhIG5ldyBrZXljZXJ0IGVudHJ5IHRvIGEgKHBvc3NpYmx5IGVtcHR5KSBsaXN0ICovCitzdGF0aWMgaW50IHNzbF9hcHBlbmRfa2V5X2NlcnQoIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKQoreworICAgIG1iZWR0bHNfc3NsX2tleV9jZXJ0ICpuZXc7CisKKyAgICBuZXcgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3NzbF9rZXlfY2VydCApICk7CisgICAgaWYoIG5ldyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisKKyAgICBuZXctPmNlcnQgPSBjZXJ0OworICAgIG5ldy0+a2V5ICA9IGtleTsKKyAgICBuZXctPm5leHQgPSBOVUxMOworCisgICAgLyogVXBkYXRlIGhlYWQgaXMgdGhlIGxpc3Qgd2FzIG51bGwsIGVsc2UgYWRkIHRvIHRoZSBlbmQgKi8KKyAgICBpZiggKmhlYWQgPT0gTlVMTCApCisgICAgeworICAgICAgICAqaGVhZCA9IG5ldzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmN1ciA9ICpoZWFkOworICAgICAgICB3aGlsZSggY3VyLT5uZXh0ICE9IE5VTEwgKQorICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICBjdXItPm5leHQgPSBuZXc7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpvd25fY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqcGtfa2V5ICkKK3sKKyAgICByZXR1cm4oIHNzbF9hcHBlbmRfa2V5X2NlcnQoICZjb25mLT5rZXlfY2VydCwgb3duX2NlcnQsIHBrX2tleSApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNhX2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCApCit7CisgICAgY29uZi0+Y2FfY2hhaW4gICA9IGNhX2NoYWluOworICAgIGNvbmYtPmNhX2NybCAgICAgPSBjYV9jcmw7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCitpbnQgbWJlZHRsc19zc2xfc2V0X2hzX293bl9jZXJ0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpvd25fY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCAqcGtfa2V5ICkKK3sKKyAgICByZXR1cm4oIHNzbF9hcHBlbmRfa2V5X2NlcnQoICZzc2wtPmhhbmRzaGFrZS0+c25pX2tleV9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duX2NlcnQsIHBrX2tleSApICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfc2V0X2hzX2NhX2NoYWluKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqY2FfY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsICkKK3sKKyAgICBzc2wtPmhhbmRzaGFrZS0+c25pX2NhX2NoYWluICAgPSBjYV9jaGFpbjsKKyAgICBzc2wtPmhhbmRzaGFrZS0+c25pX2NhX2NybCAgICAgPSBjYV9jcmw7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfc2V0X2hzX2F1dGhtb2RlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF1dGhtb2RlICkKK3sKKyAgICBzc2wtPmhhbmRzaGFrZS0+c25pX2F1dGhtb2RlID0gYXV0aG1vZGU7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisvKgorICogU2V0IEVDIEotUEFLRSBwYXNzd29yZCBmb3IgY3VycmVudCBoYW5kc2hha2UKKyAqLworaW50IG1iZWR0bHNfc3NsX3NldF9oc19lY2pwYWtlX3Bhc3N3b3JkKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHdfbGVuICkKK3sKKyAgICBtYmVkdGxzX2VjanBha2Vfcm9sZSByb2xlOworCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICAgICAgcm9sZSA9IE1CRURUTFNfRUNKUEFLRV9TRVJWRVI7CisgICAgZWxzZQorICAgICAgICByb2xlID0gTUJFRFRMU19FQ0pQQUtFX0NMSUVOVDsKKworICAgIHJldHVybiggbWJlZHRsc19lY2pwYWtlX3NldHVwKCAmc3NsLT5oYW5kc2hha2UtPmVjanBha2VfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdywgcHdfbGVuICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQoraW50IG1iZWR0bHNfc3NsX2NvbmZfcHNrKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrLCBzaXplX3QgcHNrX2xlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc2tfaWRlbnRpdHksIHNpemVfdCBwc2tfaWRlbnRpdHlfbGVuICkKK3sKKyAgICBpZiggcHNrID09IE5VTEwgfHwgcHNrX2lkZW50aXR5ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIHBza19sZW4gPiBNQkVEVExTX1BTS19NQVhfTEVOICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qIElkZW50aXR5IGxlbiB3aWxsIGJlIGVuY29kZWQgb24gdHdvIGJ5dGVzICovCisgICAgaWYoICggcHNrX2lkZW50aXR5X2xlbiA+PiAxNiApICE9IDAgfHwKKyAgICAgICAgcHNrX2lkZW50aXR5X2xlbiA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBjb25mLT5wc2sgIT0gTlVMTCB8fCBjb25mLT5wc2tfaWRlbnRpdHkgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIGNvbmYtPnBzayApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGNvbmYtPnBza19pZGVudGl0eSApOworICAgICAgICBjb25mLT5wc2sgPSBOVUxMOworICAgICAgICBjb25mLT5wc2tfaWRlbnRpdHkgPSBOVUxMOworICAgIH0KKworICAgIGlmKCAoIGNvbmYtPnBzayA9IG1iZWR0bHNfY2FsbG9jKCAxLCBwc2tfbGVuICkgKSA9PSBOVUxMIHx8CisgICAgICAgICggY29uZi0+cHNrX2lkZW50aXR5ID0gbWJlZHRsc19jYWxsb2MoIDEsIHBza19pZGVudGl0eV9sZW4gKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjb25mLT5wc2sgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjb25mLT5wc2tfaWRlbnRpdHkgKTsKKyAgICAgICAgY29uZi0+cHNrID0gTlVMTDsKKyAgICAgICAgY29uZi0+cHNrX2lkZW50aXR5ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQUxMT0NfRkFJTEVEICk7CisgICAgfQorCisgICAgY29uZi0+cHNrX2xlbiA9IHBza19sZW47CisgICAgY29uZi0+cHNrX2lkZW50aXR5X2xlbiA9IHBza19pZGVudGl0eV9sZW47CisKKyAgICBtZW1jcHkoIGNvbmYtPnBzaywgcHNrLCBjb25mLT5wc2tfbGVuICk7CisgICAgbWVtY3B5KCBjb25mLT5wc2tfaWRlbnRpdHksIHBza19pZGVudGl0eSwgY29uZi0+cHNrX2lkZW50aXR5X2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9zZXRfaHNfcHNrKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNrLCBzaXplX3QgcHNrX2xlbiApCit7CisgICAgaWYoIHBzayA9PSBOVUxMIHx8IHNzbC0+aGFuZHNoYWtlID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIHBza19sZW4gPiBNQkVEVExTX1BTS19NQVhfTEVOICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBzc2wtPmhhbmRzaGFrZS0+cHNrICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aGFuZHNoYWtlLT5wc2sgKTsKKworICAgIGlmKCAoIHNzbC0+aGFuZHNoYWtlLT5wc2sgPSBtYmVkdGxzX2NhbGxvYyggMSwgcHNrX2xlbiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCApOworCisgICAgc3NsLT5oYW5kc2hha2UtPnBza19sZW4gPSBwc2tfbGVuOworICAgIG1lbWNweSggc3NsLT5oYW5kc2hha2UtPnBzaywgcHNrLCBzc2wtPmhhbmRzaGFrZS0+cHNrX2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9wc2tfY2IoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfcHNrKSh2b2lkICosIG1iZWR0bHNfc3NsX2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcHNrICkKK3sKKyAgICBjb25mLT5mX3BzayA9IGZfcHNrOworICAgIGNvbmYtPnBfcHNrID0gcF9wc2s7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCitpbnQgbWJlZHRsc19zc2xfY29uZl9kaF9wYXJhbSggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjb25zdCBjaGFyICpkaG1fUCwgY29uc3QgY2hhciAqZGhtX0cgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmNvbmYtPmRobV9QLCAxNiwgZGhtX1AgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmNvbmYtPmRobV9HLCAxNiwgZGhtX0cgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tcGlfZnJlZSggJmNvbmYtPmRobV9QICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjb25mLT5kaG1fRyApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfY29uZl9kaF9wYXJhbV9jdHgoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgbWJlZHRsc19kaG1fY29udGV4dCAqZGhtX2N0eCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX2NvcHkoICZjb25mLT5kaG1fUCwgJmRobV9jdHgtPlAgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9jb3B5KCAmY29uZi0+ZGhtX0csICZkaG1fY3R4LT5HICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZjb25mLT5kaG1fUCApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmY29uZi0+ZGhtX0cgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0RITV9DICYmIE1CRURUTFNfU1NMX1NSVl9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisvKgorICogU2V0IHRoZSBtaW5pbXVtIGxlbmd0aCBmb3IgRGlmZmllLUhlbGxtYW4gcGFyYW1ldGVycworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZGhtX21pbl9iaXRsZW4oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdGxlbiApCit7CisgICAgY29uZi0+ZGhtX21pbl9iaXRsZW4gPSBiaXRsZW47Cit9CisjZW5kaWYgLyogTUJFRFRMU19ESE1fQyAmJiBNQkVEVExTX1NTTF9DTElfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorLyoKKyAqIFNldCBhbGxvd2VkL3ByZWZlcnJlZCBoYXNoZXMgZm9yIGhhbmRzaGFrZSBzaWduYXR1cmVzCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zaWdfaGFzaGVzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpoYXNoZXMgKQoreworICAgIGNvbmYtPnNpZ19oYXNoZXMgPSBoYXNoZXM7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qCisgKiBTZXQgdGhlIGFsbG93ZWQgZWxsaXB0aWMgY3VydmVzCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9jdXJ2ZXMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmN1cnZlX2xpc3QgKQoreworICAgIGNvbmYtPmN1cnZlX2xpc3QgPSBjdXJ2ZV9saXN0OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK2ludCBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgY29uc3QgY2hhciAqaG9zdG5hbWUgKQoreworICAgIHNpemVfdCBob3N0bmFtZV9sZW47CisKKyAgICBpZiggaG9zdG5hbWUgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBob3N0bmFtZV9sZW4gPSBzdHJsZW4oIGhvc3RuYW1lICk7CisKKyAgICBpZiggaG9zdG5hbWVfbGVuICsgMSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBob3N0bmFtZV9sZW4gPiBNQkVEVExTX1NTTF9NQVhfSE9TVF9OQU1FX0xFTiApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBzc2wtPmhvc3RuYW1lID0gbWJlZHRsc19jYWxsb2MoIDEsIGhvc3RuYW1lX2xlbiArIDEgKTsKKworICAgIGlmKCBzc2wtPmhvc3RuYW1lID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQgKTsKKworICAgIG1lbWNweSggc3NsLT5ob3N0bmFtZSwgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbiApOworCisgICAgc3NsLT5ob3N0bmFtZVtob3N0bmFtZV9sZW5dID0gJ1wwJzsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfc25pKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICBpbnQgKCpmX3NuaSkodm9pZCAqLCBtYmVkdGxzX3NzbF9jb250ZXh0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnBfc25pICkKK3sKKyAgICBjb25mLT5mX3NuaSA9IGZfc25pOworICAgIGNvbmYtPnBfc25pID0gcF9zbmk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VSVkVSX05BTUVfSU5ESUNBVElPTiAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQoraW50IG1iZWR0bHNfc3NsX2NvbmZfYWxwbl9wcm90b2NvbHMoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgY29uc3QgY2hhciAqKnByb3RvcyApCit7CisgICAgc2l6ZV90IGN1cl9sZW4sIHRvdF9sZW47CisgICAgY29uc3QgY2hhciAqKnA7CisKKyAgICAvKgorICAgICAqICJFbXB0eSBzdHJpbmdzIE1VU1QgTk9UIGJlIGluY2x1ZGVkIGFuZCBieXRlIHN0cmluZ3MgTVVTVCBOT1QgYmUKKyAgICAgKiB0cnVuY2F0ZWQiLiBDaGVjayBsZW5ndGhzIG5vdyByYXRoZXIgdGhhbiBsYXRlci4KKyAgICAgKi8KKyAgICB0b3RfbGVuID0gMDsKKyAgICBmb3IoIHAgPSBwcm90b3M7ICpwICE9IE5VTEw7IHArKyApCisgICAgeworICAgICAgICBjdXJfbGVuID0gc3RybGVuKCAqcCApOworICAgICAgICB0b3RfbGVuICs9IGN1cl9sZW47CisKKyAgICAgICAgaWYoIGN1cl9sZW4gPT0gMCB8fCBjdXJfbGVuID4gMjU1IHx8IHRvdF9sZW4gPiA2NTUzNSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGNvbmYtPmFscG5fbGlzdCA9IHByb3RvczsKKworICAgIHJldHVybiggMCApOworfQorCitjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICByZXR1cm4oIHNzbC0+YWxwbl9jaG9zZW4gKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWFqb3IsIGludCBtaW5vciApCit7CisgICAgY29uZi0+bWF4X21ham9yX3ZlciA9IG1ham9yOworICAgIGNvbmYtPm1heF9taW5vcl92ZXIgPSBtaW5vcjsKK30KKwordm9pZCBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBtYWpvciwgaW50IG1pbm9yICkKK3sKKyAgICBjb25mLT5taW5fbWFqb3JfdmVyID0gbWFqb3I7CisgICAgY29uZi0+bWluX21pbm9yX3ZlciA9IG1pbm9yOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9GQUxMQkFDS19TQ1NWKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2ZhbGxiYWNrKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgZmFsbGJhY2sgKQoreworICAgIGNvbmYtPmZhbGxiYWNrID0gZmFsbGJhY2s7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9lbmNyeXB0X3RoZW5fbWFjKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgZXRtICkKK3sKKyAgICBjb25mLT5lbmNyeXB0X3RoZW5fbWFjID0gZXRtOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBjaGFyIGVtcyApCit7CisgICAgY29uZi0+ZXh0ZW5kZWRfbXMgPSBlbXM7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZfYXJjNF9zdXBwb3J0KCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgYXJjNCApCit7CisgICAgY29uZi0+YXJjNF9kaXNhYmxlZCA9IGFyYzQ7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKK2ludCBtYmVkdGxzX3NzbF9jb25mX21heF9mcmFnX2xlbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCB1bnNpZ25lZCBjaGFyIG1mbF9jb2RlICkKK3sKKyAgICBpZiggbWZsX2NvZGUgPj0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX0lOVkFMSUQgfHwKKyAgICAgICAgbWZsX2NvZGVfdG9fbGVuZ3RoW21mbF9jb2RlXSA+IE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTiApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGNvbmYtPm1mbF9jb2RlID0gbWZsX2NvZGU7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3RydW5jYXRlZF9obWFjKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCB0cnVuY2F0ZSApCit7CisgICAgY29uZi0+dHJ1bmNfaG1hYyA9IHRydW5jYXRlOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2NiY19yZWNvcmRfc3BsaXR0aW5nKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGNoYXIgc3BsaXQgKQoreworICAgIGNvbmYtPmNiY19yZWNvcmRfc3BsaXR0aW5nID0gc3BsaXQ7Cit9CisjZW5kaWYKKwordm9pZCBtYmVkdGxzX3NzbF9jb25mX2xlZ2FjeV9yZW5lZ290aWF0aW9uKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBhbGxvd19sZWdhY3kgKQoreworICAgIGNvbmYtPmFsbG93X2xlZ2FjeV9yZW5lZ290aWF0aW9uID0gYWxsb3dfbGVnYWN5OworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24oIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwgaW50IHJlbmVnb3RpYXRpb24gKQoreworICAgIGNvbmYtPmRpc2FibGVfcmVuZWdvdGlhdGlvbiA9IHJlbmVnb3RpYXRpb247Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uX2VuZm9yY2VkKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsIGludCBtYXhfcmVjb3JkcyApCit7CisgICAgY29uZi0+cmVuZWdvX21heF9yZWNvcmRzID0gbWF4X3JlY29yZHM7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uX3BlcmlvZCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBlcmlvZFs4XSApCit7CisgICAgbWVtY3B5KCBjb25mLT5yZW5lZ29fcGVyaW9kLCBwZXJpb2QsIDggKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0cyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgdXNlX3RpY2tldHMgKQoreworICAgIGNvbmYtPnNlc3Npb25fdGlja2V0cyA9IHVzZV90aWNrZXRzOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fdGlja2V0c19jYiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICBtYmVkdGxzX3NzbF90aWNrZXRfd3JpdGVfdCAqZl90aWNrZXRfd3JpdGUsCisgICAgICAgIG1iZWR0bHNfc3NsX3RpY2tldF9wYXJzZV90ICpmX3RpY2tldF9wYXJzZSwKKyAgICAgICAgdm9pZCAqcF90aWNrZXQgKQoreworICAgIGNvbmYtPmZfdGlja2V0X3dyaXRlID0gZl90aWNrZXRfd3JpdGU7CisgICAgY29uZi0+Zl90aWNrZXRfcGFyc2UgPSBmX3RpY2tldF9wYXJzZTsKKyAgICBjb25mLT5wX3RpY2tldCAgICAgICA9IHBfdGlja2V0OworfQorI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTKQordm9pZCBtYmVkdGxzX3NzbF9jb25mX2V4cG9ydF9rZXlzX2NiKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgIG1iZWR0bHNfc3NsX2V4cG9ydF9rZXlzX3QgKmZfZXhwb3J0X2tleXMsCisgICAgICAgIHZvaWQgKnBfZXhwb3J0X2tleXMgKQoreworICAgIGNvbmYtPmZfZXhwb3J0X2tleXMgPSBmX2V4cG9ydF9rZXlzOworICAgIGNvbmYtPnBfZXhwb3J0X2tleXMgPSBwX2V4cG9ydF9rZXlzOworfQorI2VuZGlmCisKKy8qCisgKiBTU0wgZ2V0IGFjY2Vzc29ycworICovCitzaXplX3QgbWJlZHRsc19zc2xfZ2V0X2J5dGVzX2F2YWlsKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHJldHVybiggc3NsLT5pbl9vZmZ0ID09IE5VTEwgPyAwIDogc3NsLT5pbl9tc2dsZW4gKTsKK30KKwordWludDMyX3QgbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbC0+c2Vzc2lvbiAhPSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBzc2wtPnNlc3Npb24tPnZlcmlmeV9yZXN1bHQgKTsKKworICAgIGlmKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICE9IE5VTEwgKQorICAgICAgICByZXR1cm4oIHNzbC0+c2Vzc2lvbl9uZWdvdGlhdGUtPnZlcmlmeV9yZXN1bHQgKTsKKworICAgIHJldHVybiggMHhGRkZGRkZGRiApOworfQorCitjb25zdCBjaGFyICptYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+c2Vzc2lvbiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICByZXR1cm4gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoIHNzbC0+c2Vzc2lvbi0+Y2lwaGVyc3VpdGUgKTsKK30KKworY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X3ZlcnNpb24oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyAgICAgICAgc3dpdGNoKCBzc2wtPm1pbm9yX3ZlciApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOgorICAgICAgICAgICAgICAgIHJldHVybiggIkRUTFN2MS4wIiApOworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzoKKyAgICAgICAgICAgICAgICByZXR1cm4oICJEVExTdjEuMiIgKTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4oICJ1bmtub3duIChEVExTKSIgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgc3dpdGNoKCBzc2wtPm1pbm9yX3ZlciApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMDoKKyAgICAgICAgICAgIHJldHVybiggIlNTTHYzLjAiICk7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE6CisgICAgICAgICAgICByZXR1cm4oICJUTFN2MS4wIiApOworCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOgorICAgICAgICAgICAgcmV0dXJuKCAiVExTdjEuMSIgKTsKKworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzoKKyAgICAgICAgICAgIHJldHVybiggIlRMU3YxLjIiICk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggInVua25vd24iICk7CisgICAgfQorfQorCitpbnQgbWJlZHRsc19zc2xfZ2V0X3JlY29yZF9leHBhbnNpb24oIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgc2l6ZV90IHRyYW5zZm9ybV9leHBhbnNpb247CisgICAgY29uc3QgbWJlZHRsc19zc2xfdHJhbnNmb3JtICp0cmFuc2Zvcm0gPSBzc2wtPnRyYW5zZm9ybV9vdXQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGlmKCBzc2wtPnNlc3Npb25fb3V0LT5jb21wcmVzc2lvbiAhPSBNQkVEVExTX1NTTF9DT01QUkVTU19OVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworI2VuZGlmCisKKyAgICBpZiggdHJhbnNmb3JtID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIChpbnQpIG1iZWR0bHNfc3NsX2hkcl9sZW4oIHNzbCApICk7CisKKyAgICBzd2l0Y2goIG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9lbmMgKSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfTU9ERV9HQ006CisgICAgICAgIGNhc2UgTUJFRFRMU19NT0RFX0NDTToKKyAgICAgICAgY2FzZSBNQkVEVExTX01PREVfU1RSRUFNOgorICAgICAgICAgICAgdHJhbnNmb3JtX2V4cGFuc2lvbiA9IHRyYW5zZm9ybS0+bWlubGVuOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX01PREVfQ0JDOgorICAgICAgICAgICAgdHJhbnNmb3JtX2V4cGFuc2lvbiA9IHRyYW5zZm9ybS0+bWFjbGVuCisgICAgICAgICAgICAgICAgICAgICAgKyBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9lbmMgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSggbWJlZHRsc19zc2xfaGRyX2xlbiggc3NsICkgKyB0cmFuc2Zvcm1fZXhwYW5zaW9uICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKK3NpemVfdCBtYmVkdGxzX3NzbF9nZXRfbWF4X2ZyYWdfbGVuKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIHNpemVfdCBtYXhfbGVuOworCisgICAgLyoKKyAgICAgKiBBc3N1bWUgbWZsX2NvZGUgaXMgY29ycmVjdCBzaW5jZSBpdCB3YXMgY2hlY2tlZCB3aGVuIHNldAorICAgICAqLworICAgIG1heF9sZW4gPSBtZmxfY29kZV90b19sZW5ndGhbc3NsLT5jb25mLT5tZmxfY29kZV07CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIGEgc21hbGxlciBtYXggbGVuZ3RoIHdhcyBuZWdvdGlhdGVkCisgICAgICovCisgICAgaWYoIHNzbC0+c2Vzc2lvbl9vdXQgIT0gTlVMTCAmJgorICAgICAgICBtZmxfY29kZV90b19sZW5ndGhbc3NsLT5zZXNzaW9uX291dC0+bWZsX2NvZGVdIDwgbWF4X2xlbiApCisgICAgeworICAgICAgICBtYXhfbGVuID0gbWZsX2NvZGVfdG9fbGVuZ3RoW3NzbC0+c2Vzc2lvbl9vdXQtPm1mbF9jb2RlXTsKKyAgICB9CisKKyAgICByZXR1cm4gbWF4X2xlbjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK2NvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKm1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+c2Vzc2lvbiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBOVUxMICk7CisKKyAgICByZXR1cm4oIHNzbC0+c2Vzc2lvbi0+cGVlcl9jZXJ0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQoraW50IG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIG1iZWR0bHNfc3NsX3Nlc3Npb24gKmRzdCApCit7CisgICAgaWYoIHNzbCA9PSBOVUxMIHx8CisgICAgICAgIGRzdCA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+c2Vzc2lvbiA9PSBOVUxMIHx8CisgICAgICAgIHNzbC0+Y29uZi0+ZW5kcG9pbnQgIT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgcmV0dXJuKCBzc2xfc2Vzc2lvbl9jb3B5KCBkc3QsIHNzbC0+c2Vzc2lvbiApICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworLyoKKyAqIFBlcmZvcm0gYSBzaW5nbGUgc3RlcCBvZiB0aGUgU1NMIGhhbmRzaGFrZQorICovCitpbnQgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3N0ZXAoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFOworCisgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+Y29uZiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfQ0xJRU5UICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlX2NsaWVudF9zdGVwKCBzc2wgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpCisgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlX3NlcnZlcl9zdGVwKCBzc2wgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIFBlcmZvcm0gdGhlIFNTTCBoYW5kc2hha2UKKyAqLworaW50IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPmNvbmYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IGhhbmRzaGFrZSIgKSApOworCisgICAgd2hpbGUoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlX3N0ZXAoIHNzbCApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IGhhbmRzaGFrZSIgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorLyoKKyAqIFdyaXRlIEhlbGxvUmVxdWVzdCB0byByZXF1ZXN0IHJlbmVnb3RpYXRpb24gb24gc2VydmVyCisgKi8KK3N0YXRpYyBpbnQgc3NsX3dyaXRlX2hlbGxvX3JlcXVlc3QoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUgaGVsbG8gcmVxdWVzdCIgKSApOworCisgICAgc3NsLT5vdXRfbXNnbGVuICA9IDQ7CisgICAgc3NsLT5vdXRfbXNndHlwZSA9IE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U7CisgICAgc3NsLT5vdXRfbXNnWzBdICA9IE1CRURUTFNfU1NMX0hTX0hFTExPX1JFUVVFU1Q7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIGhlbGxvIHJlcXVlc3QiICkgKTsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICovCisKKy8qCisgKiBBY3R1YWxseSByZW5lZ290aWF0ZSBjdXJyZW50IGNvbm5lY3Rpb24sIHRyaWdnZXJlZCBieSBlaXRoZXI6CisgKiAtIGFueSBzaWRlOiBjYWxsaW5nIG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlKCksCisgKiAtIGNsaWVudDogcmVjZWl2aW5nIGEgSGVsbG9SZXF1ZXN0IGR1cmluZyBtYmVkdGxzX3NzbF9yZWFkKCksCisgKiAtIHNlcnZlcjogcmVjZWl2aW5nIGFueSBoYW5kc2hha2UgbWVzc2FnZSBvbiBzZXJ2ZXIgZHVyaW5nIG1iZWR0bHNfc3NsX3JlYWQoKSBhZnRlcgorICogICB0aGUgaW5pdGlhbCBoYW5kc2hha2UgaXMgY29tcGxldGVkLgorICogSWYgdGhlIGhhbmRzaGFrZSBkb2Vzbid0IGNvbXBsZXRlIGR1ZSB0byB3YWl0aW5nIGZvciBJL08sIGl0IHdpbGwgY29udGludWUKKyAqIGR1cmluZyB0aGUgbmV4dCBjYWxscyB0byBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZSgpIG9yIG1iZWR0bHNfc3NsX3JlYWQoKSByZXNwZWN0aXZlbHkuCisgKi8KK3N0YXRpYyBpbnQgc3NsX3N0YXJ0X3JlbmVnb3RpYXRpb24oIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gcmVuZWdvdGlhdGUiICkgKTsKKworICAgIGlmKCAoIHJldCA9IHNzbF9oYW5kc2hha2VfaW5pdCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIC8qIFJGQyA2MzQ3IDQuMi4yOiAiWy4uLl0gdGhlIEhlbGxvUmVxdWVzdCB3aWxsIGhhdmUgbWVzc2FnZV9zZXEgPSAwIGFuZAorICAgICAqIHRoZSBTZXJ2ZXJIZWxsbyB3aWxsIGhhdmUgbWVzc2FnZV9zZXEgPSAxIiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICkKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5vdXRfbXNnX3NlcSA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5pbl9tc2dfc2VxID0gMTsKKyAgICB9CisjZW5kaWYKKworICAgIHNzbC0+c3RhdGUgPSBNQkVEVExTX1NTTF9IRUxMT19SRVFVRVNUOworICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1M7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoIHNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9oYW5kc2hha2UiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHJlbmVnb3RpYXRlIiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJlbmVnb3RpYXRlIGN1cnJlbnQgY29ubmVjdGlvbiBvbiBjbGllbnQsCisgKiBvciByZXF1ZXN0IHJlbmVnb3RpYXRpb24gb24gc2VydmVyCisgKi8KK2ludCBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICAvKiBPbiBzZXJ2ZXIsIGp1c3Qgc2VuZCB0aGUgcmVxdWVzdCAqLworICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgeworICAgICAgICBpZiggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fUEVORElORzsKKworICAgICAgICAvKiBEaWQgd2UgYWxyZWFkeSB0cnkvc3RhcnQgc2VuZGluZyBIZWxsb1JlcXVlc3Q/ICovCisgICAgICAgIGlmKCBzc2wtPm91dF9sZWZ0ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3NzbF9mbHVzaF9vdXRwdXQoIHNzbCApICk7CisKKyAgICAgICAgcmV0dXJuKCBzc2xfd3JpdGVfaGVsbG9fcmVxdWVzdCggc3NsICkgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgLyoKKyAgICAgKiBPbiBjbGllbnQsIGVpdGhlciBzdGFydCB0aGUgcmVuZWdvdGlhdGlvbiBwcm9jZXNzIG9yLAorICAgICAqIGlmIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGNvbnRpbnVlIHRoZSBoYW5kc2hha2UKKyAgICAgKi8KKyAgICBpZiggc3NsLT5yZW5lZ29fc3RhdHVzICE9IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fSU5fUFJPR1JFU1MgKQorICAgIHsKKyAgICAgICAgaWYoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICAgICBpZiggKCByZXQgPSBzc2xfc3RhcnRfcmVuZWdvdGlhdGlvbiggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX3N0YXJ0X3JlbmVnb3RpYXRpb24iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9oYW5kc2hha2UiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0xJX0MgKi8KKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDaGVjayByZWNvcmQgY291bnRlcnMgYW5kIHJlbmVnb3RpYXRlIGlmIHRoZXkncmUgYWJvdmUgdGhlIGxpbWl0LgorICovCitzdGF0aWMgaW50IHNzbF9jaGVja19jdHJfcmVuZWdvdGlhdGUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbC0+c3RhdGUgIT0gTUJFRFRMU19TU0xfSEFORFNIQUtFX09WRVIgfHwKKyAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzID09IE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fUEVORElORyB8fAorICAgICAgICBzc2wtPmNvbmYtPmRpc2FibGVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIGlmKCBtZW1jbXAoIHNzbC0+aW5fY3RyLCAgc3NsLT5jb25mLT5yZW5lZ29fcGVyaW9kLCA4ICkgPD0gMCAmJgorICAgICAgICBtZW1jbXAoIHNzbC0+b3V0X2N0ciwgc3NsLT5jb25mLT5yZW5lZ29fcGVyaW9kLCA4ICkgPD0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlY29yZCBjb3VudGVyIGxpbWl0IHJlYWNoZWQ6IHJlbmVnb3RpYXRlIiApICk7CisgICAgcmV0dXJuKCBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZSggc3NsICkgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKy8qCisgKiBSZWNlaXZlIGFwcGxpY2F0aW9uIGRhdGEgZGVjcnlwdGVkIGZyb20gdGhlIFNTTCBsYXllcgorICovCitpbnQgbWJlZHRsc19zc2xfcmVhZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGludCByZXQsIHJlY29yZF9yZWFkID0gMDsKKyAgICBzaXplX3QgbjsKKworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPmNvbmYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIj0+IHJlYWQiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoIHNzbC0+aGFuZHNoYWtlICE9IE5VTEwgJiYKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5yZXRyYW5zbWl0X3N0YXRlID09IE1CRURUTFNfU1NMX1JFVFJBTlNfU0VORElORyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Jlc2VuZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoICggcmV0ID0gc3NsX2NoZWNrX2N0cl9yZW5lZ290aWF0ZSggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9jaGVja19jdHJfcmVuZWdvdGlhdGUiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBzc2wtPnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggc3NsICk7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBSVRJTkdfU0VSVkVSX0hFTExPX1JFTkVHTyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY29yZF9yZWFkID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBzc2wtPmluX29mZnQgPT0gTlVMTCApCisgICAgeworICAgICAgICAvKiBTdGFydCB0aW1lciBpZiBub3QgYWxyZWFkeSBydW5uaW5nICovCisgICAgICAgIGlmKCBzc2wtPmZfZ2V0X3RpbWVyICE9IE5VTEwgJiYKKyAgICAgICAgICAgIHNzbC0+Zl9nZXRfdGltZXIoIHNzbC0+cF90aW1lciApID09IC0xICkKKyAgICAgICAgeworICAgICAgICAgICAgc3NsX3NldF90aW1lciggc3NsLCBzc2wtPmNvbmYtPnJlYWRfdGltZW91dCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoICEgcmVjb3JkX3JlYWQgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9DT05OX0VPRiApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfcmVhZF9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNnbGVuICA9PSAwICYmCisgICAgICAgICAgICBzc2wtPmluX21zZ3R5cGUgPT0gTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEEgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogT3BlblNTTCBzZW5kcyBlbXB0eSBtZXNzYWdlcyB0byByYW5kb21pemUgdGhlIElWCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0NPTk5fRU9GICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9yZWFkX3JlY29yZCIsIHJldCApOworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfSEFORFNIQUtFICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJyZWNlaXZlZCBoYW5kc2hha2UgbWVzc2FnZSIgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykKKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCAmJgorICAgICAgICAgICAgICAgICggc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVCB8fAorICAgICAgICAgICAgICAgICAgc3NsLT5pbl9oc2xlbiAhPSBtYmVkdGxzX3NzbF9oc19oZHJfbGVuKCBzc2wgKSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImhhbmRzaGFrZSByZWNlaXZlZCAobm90IEhlbGxvUmVxdWVzdCkiICkgKTsKKworICAgICAgICAgICAgICAgIC8qIFdpdGggRFRMUywgZHJvcCB0aGUgcGFja2V0IChwcm9iYWJseSBmcm9tIGxhc3QgaGFuZHNoYWtlKSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHNzbC0+Y29uZi0+ZW5kcG9pbnQgPT0gTUJFRFRMU19TU0xfSVNfU0VSVkVSICYmCisgICAgICAgICAgICAgICAgc3NsLT5pbl9tc2dbMF0gIT0gTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0hFTExPICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImhhbmRzaGFrZSByZWNlaXZlZCAobm90IENsaWVudEhlbGxvKSIgKSApOworCisgICAgICAgICAgICAgICAgLyogV2l0aCBEVExTLCBkcm9wIHRoZSBwYWNrZXQgKHByb2JhYmx5IGZyb20gbGFzdCBoYW5kc2hha2UpICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRSApOworICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPmRpc2FibGVfcmVuZWdvdGlhdGlvbiA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RJU0FCTEVEIHx8CisgICAgICAgICAgICAgICAgKCBzc2wtPnNlY3VyZV9yZW5lZ290aWF0aW9uID09IE1CRURUTFNfU1NMX0xFR0FDWV9SRU5FR09USUFUSU9OICYmCisgICAgICAgICAgICAgICAgICBzc2wtPmNvbmYtPmFsbG93X2xlZ2FjeV9yZW5lZ290aWF0aW9uID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTiApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInJlZnVzaW5nIHJlbmVnb3RpYXRpb24sIHNlbmRpbmcgYWxlcnQiICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFNTTHYzIGRvZXMgbm90IGhhdmUgYSAibm9fcmVuZWdvdGlhdGlvbiIgYWxlcnQKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fU1NMMyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMSkgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8IFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAgICAgICAgICAgICBpZiggc3NsLT5taW5vcl92ZXIgPj0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19SRU5FR09USUFUSU9OICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwKKyAgICAgICAgICBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBEVExTIGNsaWVudHMgbmVlZCB0byBrbm93IHJlbmVnbyBpcyBzZXJ2ZXItaW5pdGlhdGVkICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gJiYKKyAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19DTElFTlQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3NsLT5yZW5lZ29fc3RhdHVzID0gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIHJldCA9IHNzbF9zdGFydF9yZW5lZ290aWF0aW9uKCBzc2wgKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3JlYWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfc3RhcnRfcmVuZWdvdGlhdGlvbiIsIHJldCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYgYSBub24taGFuZHNoYWtlIHJlY29yZCB3YXMgcmVhZCBkdXJpbmcgcmVuZWdvLCBmYWxsdGhyb3VnaCwKKyAgICAgICAgICAgICAqIGVsc2UgdGVsbCB0aGUgdXNlciB0aGV5IHNob3VsZCBjYWxsIG1iZWR0bHNfc3NsX3JlYWQoKSBhZ2FpbiAqLworICAgICAgICAgICAgaWYoICEgcmVjb3JkX3JlYWQgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgKQorICAgICAgICB7CisKKyAgICAgICAgICAgIGlmKCBzc2wtPmNvbmYtPnJlbmVnb19tYXhfcmVjb3JkcyA+PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKytzc2wtPnJlbmVnb19yZWNvcmRzX3NlZW4gPiBzc2wtPmNvbmYtPnJlbmVnb19tYXhfcmVjb3JkcyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInJlbmVnb3RpYXRpb24gcmVxdWVzdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBub3QgaG9ub3JlZCBieSBjbGllbnQiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfVU5FWFBFQ1RFRF9NRVNTQUdFICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUkVORUdPVElBVElPTiAqLworCisgICAgICAgIC8qIEZhdGFsIGFuZCBjbG9zdXJlIGFsZXJ0cyBoYW5kbGVkIGJ5IG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkKCkgKi8KKyAgICAgICAgaWYoIHNzbC0+aW5fbXNndHlwZSA9PSBNQkVEVExTX1NTTF9NU0dfQUxFUlQgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggImlnbm9yaW5nIG5vbi1mYXRhbCBub24tY2xvc3VyZSBhbGVydCIgKSApOworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3NsLT5pbl9tc2d0eXBlICE9IE1CRURUTFNfU1NMX01TR19BUFBMSUNBVElPTl9EQVRBICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgYXBwbGljYXRpb24gZGF0YSBtZXNzYWdlIiApICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNzbC0+aW5fb2ZmdCA9IHNzbC0+aW5fbXNnOworCisgICAgICAgIC8qIFdlJ3JlIGdvaW5nIHRvIHJldHVybiBzb21ldGhpbmcgbm93LCBjYW5jZWwgdGltZXIsCisgICAgICAgICAqIGV4Y2VwdCBpZiBoYW5kc2hha2UgKHJlbmVnb3RpYXRpb24pIGlzIGluIHByb2dyZXNzICovCisgICAgICAgIGlmKCBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICAgICAgICAgIHNzbF9zZXRfdGltZXIoIHNzbCwgMCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICAvKiBJZiB3ZSByZXF1ZXN0ZWQgcmVuZWdvIGJ1dCByZWNlaXZlZCBBcHBEYXRhLCByZXNlbmQgSGVsbG9SZXF1ZXN0LgorICAgICAgICAgKiBEbyBpdCBub3csIGFmdGVyIHNldHRpbmcgaW5fb2ZmdCwgdG8gYXZvaWQgdGFraW5nIHRoaXMgYnJhbmNoCisgICAgICAgICAqIGFnYWluIGlmIHNzbF93cml0ZV9oZWxsb19yZXF1ZXN0KCkgcmV0dXJucyBXQU5UX1dSSVRFICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgICAgICBpZiggc3NsLT5jb25mLT5lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgJiYKKyAgICAgICAgICAgIHNzbC0+cmVuZWdvX3N0YXR1cyA9PSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcmVzZW5kX2hlbGxvX3JlcXVlc3QoIHNzbCApICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAic3NsX3Jlc2VuZF9oZWxsb19yZXF1ZXN0IiwgcmV0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKyNlbmRpZgorICAgIH0KKworICAgIG4gPSAoIGxlbiA8IHNzbC0+aW5fbXNnbGVuICkKKyAgICAgICAgPyBsZW4gOiBzc2wtPmluX21zZ2xlbjsKKworICAgIG1lbWNweSggYnVmLCBzc2wtPmluX29mZnQsIG4gKTsKKyAgICBzc2wtPmluX21zZ2xlbiAtPSBuOworCisgICAgaWYoIHNzbC0+aW5fbXNnbGVuID09IDAgKQorICAgICAgICAvKiBhbGwgYnl0ZXMgY29uc3VtZWQgICovCisgICAgICAgIHNzbC0+aW5fb2ZmdCA9IE5VTEw7CisgICAgZWxzZQorICAgICAgICAvKiBtb3JlIGRhdGEgYXZhaWxhYmxlICovCisgICAgICAgIHNzbC0+aW5fb2ZmdCArPSBuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSByZWFkIiApICk7CisKKyAgICByZXR1cm4oIChpbnQpIG4gKTsKK30KKworLyoKKyAqIFNlbmQgYXBwbGljYXRpb24gZGF0YSB0byBiZSBlbmNyeXB0ZWQgYnkgdGhlIFNTTCBsYXllciwKKyAqIHRha2luZyBjYXJlIG9mIG1heCBmcmFnbWVudCBsZW5ndGggYW5kIGJ1ZmZlciBzaXplCisgKi8KK3N0YXRpYyBpbnQgc3NsX3dyaXRlX3JlYWwoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgc2l6ZV90IG1heF9sZW4gPSBtYmVkdGxzX3NzbF9nZXRfbWF4X2ZyYWdfbGVuKCBzc2wgKTsKKworICAgIGlmKCBsZW4gPiBtYXhfbGVuICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgICAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJmcmFnbWVudCBsYXJnZXIgdGhhbiB0aGUgKG5lZ290aWF0ZWQpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heGltdW0gZnJhZ21lbnQgbGVuZ3RoOiAlZCA+ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCBtYXhfbGVuICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBsZW4gPSBtYXhfbGVuOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyAgICBpZiggc3NsLT5vdXRfbGVmdCAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dCggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfZmx1c2hfb3V0cHV0IiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNzbC0+b3V0X21zZ2xlbiAgPSBsZW47CisgICAgICAgIHNzbC0+b3V0X21zZ3R5cGUgPSBNQkVEVExTX1NTTF9NU0dfQVBQTElDQVRJT05fREFUQTsKKyAgICAgICAgbWVtY3B5KCBzc2wtPm91dF9tc2csIGJ1ZiwgbGVuICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkKCBzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF93cml0ZV9yZWNvcmQiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCisvKgorICogV3JpdGUgYXBwbGljYXRpb24gZGF0YSwgZG9pbmcgMS9uLTEgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4KKyAqCisgKiBXaXRoIG5vbi1ibG9ja2luZyBJL08sIHNzbF93cml0ZV9yZWFsKCkgbWF5IHJldHVybiBXQU5UX1dSSVRFLAorICogdGhlbiB0aGUgY2FsbGVyIHdpbGwgY2FsbCB1cyBhZ2FpbiB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cywgc28KKyAqIHJlbWVtYmVyIHdldGhlciB3ZSBhbHJlYWR5IGRpZCB0aGUgc3BsaXQgb3Igbm90LgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKK3N0YXRpYyBpbnQgc3NsX3dyaXRlX3NwbGl0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoIHNzbC0+Y29uZi0+Y2JjX3JlY29yZF9zcGxpdHRpbmcgPT0KKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0RJU0FCTEVEIHx8CisgICAgICAgIGxlbiA8PSAxIHx8CisgICAgICAgIHNzbC0+bWlub3JfdmVyID4gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xIHx8CisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggJnNzbC0+dHJhbnNmb3JtX291dC0+Y2lwaGVyX2N0eF9lbmMgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBNQkVEVExTX01PREVfQ0JDICkKKyAgICB7CisgICAgICAgIHJldHVybiggc3NsX3dyaXRlX3JlYWwoIHNzbCwgYnVmLCBsZW4gKSApOworICAgIH0KKworICAgIGlmKCBzc2wtPnNwbGl0X2RvbmUgPT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBzc2xfd3JpdGVfcmVhbCggc3NsLCBidWYsIDEgKSApIDw9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgc3NsLT5zcGxpdF9kb25lID0gMTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBzc2xfd3JpdGVfcmVhbCggc3NsLCBidWYgKyAxLCBsZW4gLSAxICkgKSA8PSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICBzc2wtPnNwbGl0X2RvbmUgPSAwOworCisgICAgcmV0dXJuKCByZXQgKyAxICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcgKi8KKworLyoKKyAqIFdyaXRlIGFwcGxpY2F0aW9uIGRhdGEgKHB1YmxpYy1mYWNpbmcgd3JhcHBlcikKKyAqLworaW50IG1iZWR0bHNfc3NsX3dyaXRlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPT4gd3JpdGUiICkgKTsKKworICAgIGlmKCBzc2wgPT0gTlVMTCB8fCBzc2wtPmNvbmYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoICggcmV0ID0gc3NsX2NoZWNrX2N0cl9yZW5lZ290aWF0ZSggc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgInNzbF9jaGVja19jdHJfcmVuZWdvdGlhdGUiLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBzc2wtPnN0YXRlICE9IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfUkVUKCAxLCAibWJlZHRsc19zc2xfaGFuZHNoYWtlIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKyAgICByZXQgPSBzc2xfd3JpdGVfc3BsaXQoIHNzbCwgYnVmLCBsZW4gKTsKKyNlbHNlCisgICAgcmV0ID0gc3NsX3dyaXRlX3JlYWwoIHNzbCwgYnVmLCBsZW4gKTsKKyNlbmRpZgorCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI8PSB3cml0ZSIgKSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyoKKyAqIE5vdGlmeSB0aGUgcGVlciB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIGJlaW5nIGNsb3NlZAorICovCitpbnQgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggc3NsID09IE5VTEwgfHwgc3NsLT5jb25mID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiB3cml0ZSBjbG9zZSBub3RpZnkiICkgKTsKKworICAgIGlmKCBzc2wtPm91dF9sZWZ0ICE9IDAgKQorICAgICAgICByZXR1cm4oIG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dCggc3NsICkgKTsKKworICAgIGlmKCBzc2wtPnN0YXRlID09IE1CRURUTFNfU1NMX0hBTkRTSEFLRV9PVkVSICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19DTE9TRV9OT1RJRlkgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UiLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDIsICggIjw9IHdyaXRlIGNsb3NlIG5vdGlmeSIgKSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtICkKK3sKKyAgICBpZiggdHJhbnNmb3JtID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGRlZmxhdGVFbmQoICZ0cmFuc2Zvcm0tPmN0eF9kZWZsYXRlICk7CisgICAgaW5mbGF0ZUVuZCggJnRyYW5zZm9ybS0+Y3R4X2luZmxhdGUgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJnRyYW5zZm9ybS0+Y2lwaGVyX2N0eF9lbmMgKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmdHJhbnNmb3JtLT5jaXBoZXJfY3R4X2RlYyApOworCisgICAgbWJlZHRsc19tZF9mcmVlKCAmdHJhbnNmb3JtLT5tZF9jdHhfZW5jICk7CisgICAgbWJlZHRsc19tZF9mcmVlKCAmdHJhbnNmb3JtLT5tZF9jdHhfZGVjICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIHRyYW5zZm9ybSwgc2l6ZW9mKCBtYmVkdGxzX3NzbF90cmFuc2Zvcm0gKSApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCitzdGF0aWMgdm9pZCBzc2xfa2V5X2NlcnRfZnJlZSggbWJlZHRsc19zc2xfa2V5X2NlcnQgKmtleV9jZXJ0ICkKK3sKKyAgICBtYmVkdGxzX3NzbF9rZXlfY2VydCAqY3VyID0ga2V5X2NlcnQsICpuZXh0OworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG5leHQgPSBjdXItPm5leHQ7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyICk7CisgICAgICAgIGN1ciA9IG5leHQ7CisgICAgfQorfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCit2b2lkIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9mcmVlKCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfcGFyYW1zICpoYW5kc2hha2UgKQoreworICAgIGlmKCBoYW5kc2hha2UgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykgfHwgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpCisgICAgbWJlZHRsc19tZDVfZnJlZSggICAgJmhhbmRzaGFrZS0+ZmluX21kNSAgKTsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZSggICAmaGFuZHNoYWtlLT5maW5fc2hhMSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoICAgJmhhbmRzaGFrZS0+ZmluX3NoYTI1NiAgICApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoICAgJmhhbmRzaGFrZS0+ZmluX3NoYTUxMiAgICApOworI2VuZGlmCisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgbWJlZHRsc19kaG1fZnJlZSggJmhhbmRzaGFrZS0+ZGhtX2N0eCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKyAgICBtYmVkdGxzX2VjZGhfZnJlZSggJmhhbmRzaGFrZS0+ZWNkaF9jdHggKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIG1iZWR0bHNfZWNqcGFrZV9mcmVlKCAmaGFuZHNoYWtlLT5lY2pwYWtlX2N0eCApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgbWJlZHRsc19mcmVlKCBoYW5kc2hha2UtPmVjanBha2VfY2FjaGUgKTsKKyAgICBoYW5kc2hha2UtPmVjanBha2VfY2FjaGUgPSBOVUxMOworICAgIGhhbmRzaGFrZS0+ZWNqcGFrZV9jYWNoZV9sZW4gPSAwOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCBcCisgICAgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgLyogZXhwbGljaXQgdm9pZCBwb2ludGVyIGNhc3QgZm9yIGJ1Z2d5IE1TIGNvbXBpbGVyICovCisgICAgbWJlZHRsc19mcmVlKCAodm9pZCAqKSBoYW5kc2hha2UtPmN1cnZlcyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICBpZiggaGFuZHNoYWtlLT5wc2sgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGhhbmRzaGFrZS0+cHNrLCBoYW5kc2hha2UtPnBza19sZW4gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBoYW5kc2hha2UtPnBzayApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgLyoKKyAgICAgKiBGcmVlIG9ubHkgdGhlIGxpbmtlZCBsaXN0IHdyYXBwZXIsIG5vdCB0aGUga2V5cyB0aGVtc2VsdmVzCisgICAgICogc2luY2UgdGhlIGJlbG9uZyB0byB0aGUgU05JIGNhbGxiYWNrCisgICAgICovCisgICAgaWYoIGhhbmRzaGFrZS0+c25pX2tleV9jZXJ0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfa2V5X2NlcnQgKmN1ciA9IGhhbmRzaGFrZS0+c25pX2tleV9jZXJ0LCAqbmV4dDsKKworICAgICAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0ID0gY3VyLT5uZXh0OworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjdXIgKTsKKyAgICAgICAgICAgIGN1ciA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICYmIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBtYmVkdGxzX2ZyZWUoIGhhbmRzaGFrZS0+dmVyaWZ5X2Nvb2tpZSApOworICAgIG1iZWR0bHNfZnJlZSggaGFuZHNoYWtlLT5oc19tc2cgKTsKKyAgICBzc2xfZmxpZ2h0X2ZyZWUoIGhhbmRzaGFrZS0+ZmxpZ2h0ICk7CisjZW5kaWYKKworICAgIG1iZWR0bHNfemVyb2l6ZSggaGFuZHNoYWtlLCBzaXplb2YoIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9wYXJhbXMgKSApOworfQorCit2b2lkIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggbWJlZHRsc19zc2xfc2Vzc2lvbiAqc2Vzc2lvbiApCit7CisgICAgaWYoIHNlc3Npb24gPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBzZXNzaW9uLT5wZWVyX2NlcnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIHNlc3Npb24tPnBlZXJfY2VydCApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNlc3Npb24tPnBlZXJfY2VydCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpICYmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgbWJlZHRsc19mcmVlKCBzZXNzaW9uLT50aWNrZXQgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc196ZXJvaXplKCBzZXNzaW9uLCBzaXplb2YoIG1iZWR0bHNfc3NsX3Nlc3Npb24gKSApOworfQorCisvKgorICogRnJlZSBhbiBTU0wgY29udGV4dAorICovCit2b2lkIG1iZWR0bHNfc3NsX2ZyZWUoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCit7CisgICAgaWYoIHNzbCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBmcmVlIiApICk7CisKKyAgICBpZiggc3NsLT5vdXRfYnVmICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBzc2wtPm91dF9idWYsIE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPm91dF9idWYgKTsKKyAgICB9CisKKyAgICBpZiggc3NsLT5pbl9idWYgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIHNzbC0+aW5fYnVmLCBNQkVEVExTX1NTTF9CVUZGRVJfTEVOICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5pbl9idWYgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgIGlmKCBzc2wtPmNvbXByZXNzX2J1ZiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggc3NsLT5jb21wcmVzc19idWYsIE1CRURUTFNfU1NMX0JVRkZFUl9MRU4gKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPmNvbXByZXNzX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgaWYoIHNzbC0+dHJhbnNmb3JtICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybV9mcmVlKCBzc2wtPnRyYW5zZm9ybSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+dHJhbnNmb3JtICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+aGFuZHNoYWtlICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2hhbmRzaGFrZV9mcmVlKCBzc2wtPmhhbmRzaGFrZSApOworICAgICAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm1fZnJlZSggc3NsLT50cmFuc2Zvcm1fbmVnb3RpYXRlICk7CisgICAgICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggc3NsLT5zZXNzaW9uX25lZ290aWF0ZSApOworCisgICAgICAgIG1iZWR0bHNfZnJlZSggc3NsLT5oYW5kc2hha2UgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnRyYW5zZm9ybV9uZWdvdGlhdGUgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBzc2wtPnNlc3Npb25fbmVnb3RpYXRlICk7CisgICAgfQorCisgICAgaWYoIHNzbC0+c2Vzc2lvbiApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9zZXNzaW9uX2ZyZWUoIHNzbC0+c2Vzc2lvbiApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+c2Vzc2lvbiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBzc2wtPmhvc3RuYW1lICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc196ZXJvaXplKCBzc2wtPmhvc3RuYW1lLCBzdHJsZW4oIHNzbC0+aG9zdG5hbWUgKSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+aG9zdG5hbWUgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMKQorICAgIGlmKCBtYmVkdGxzX3NzbF9od19yZWNvcmRfZmluaXNoICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICJnb2luZyBmb3IgbWJlZHRsc19zc2xfaHdfcmVjb3JkX2ZpbmlzaCgpIiApICk7CisgICAgICAgIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9maW5pc2goIHNzbCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSkgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICBtYmVkdGxzX2ZyZWUoIHNzbC0+Y2xpX2lkICk7CisjZW5kaWYKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMiwgKCAiPD0gZnJlZSIgKSApOworCisgICAgLyogQWN0dWFsbHkgY2xlYXIgYWZ0ZXIgbGFzdCBkZWJ1ZyBtZXNzYWdlICovCisgICAgbWJlZHRsc196ZXJvaXplKCBzc2wsIHNpemVvZiggbWJlZHRsc19zc2xfY29udGV4dCApICk7Cit9CisKKy8qCisgKiBJbml0aWFsemUgbWJlZHRsc19zc2xfY29uZmlnCisgKi8KK3ZvaWQgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiApCit7CisgICAgbWVtc2V0KCBjb25mLCAwLCBzaXplb2YoIG1iZWR0bHNfc3NsX2NvbmZpZyApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wcmVzZXRfZGVmYXVsdF9oYXNoZXNbXSA9IHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgTUJFRFRMU19NRF9TSEE1MTIsCisgICAgTUJFRFRMU19NRF9TSEEzODQsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgTUJFRFRMU19NRF9TSEEyMjQsCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIE1CRURUTFNfTURfU0hBMSwKKyNlbmRpZgorICAgIE1CRURUTFNfTURfTk9ORQorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNzbF9wcmVzZXRfc3VpdGViX2NpcGhlcnN1aXRlc1tdID0geworICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorICAgIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorICAgIDAKK307CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQpCitzdGF0aWMgaW50IHNzbF9wcmVzZXRfc3VpdGViX2hhc2hlc1tdID0geworICAgIE1CRURUTFNfTURfU0hBMjU2LAorICAgIE1CRURUTFNfTURfU0hBMzg0LAorICAgIE1CRURUTFNfTURfTk9ORQorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorc3RhdGljIG1iZWR0bHNfZWNwX2dyb3VwX2lkIHNzbF9wcmVzZXRfc3VpdGViX2N1cnZlc1tdID0geworICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwKKyAgICBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjEsCisgICAgTUJFRFRMU19FQ1BfRFBfTk9ORQorfTsKKyNlbmRpZgorCisvKgorICogTG9hZCBkZWZhdWx0IGluIG1iZWR0bHNfc3NsX2NvbmZpZworICovCitpbnQgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kcG9pbnQsIGludCB0cmFuc3BvcnQsIGludCBwcmVzZXQgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykKKyAgICBpbnQgcmV0OworI2VuZGlmCisKKyAgICAvKiBVc2UgdGhlIGZ1bmN0aW9ucyBoZXJlIHNvIHRoYXQgdGhleSBhcmUgY292ZXJlZCBpbiB0ZXN0cywKKyAgICAgKiBidXQgb3RoZXJ3aXNlIGFjY2VzcyBtZW1iZXIgZGlyZWN0bHkgZm9yIGVmZmljaWVuY3kgKi8KKyAgICBtYmVkdGxzX3NzbF9jb25mX2VuZHBvaW50KCBjb25mLCBlbmRwb2ludCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfdHJhbnNwb3J0KCBjb25mLCB0cmFuc3BvcnQgKTsKKworICAgIC8qCisgICAgICogVGhpbmdzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgcHJlc2V0cworICAgICAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpCisgICAgaWYoIGVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX0NMSUVOVCApCisgICAgeworICAgICAgICBjb25mLT5hdXRobW9kZSA9IE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAgICAgY29uZi0+c2Vzc2lvbl90aWNrZXRzID0gTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0VOQUJMRUQ7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgY29uZi0+YXJjNF9kaXNhYmxlZCA9IE1CRURUTFNfU1NMX0FSQzRfRElTQUJMRUQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyAgICBjb25mLT5lbmNyeXB0X3RoZW5fbWFjID0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKyAgICBjb25mLT5leHRlbmRlZF9tcyA9IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCisgICAgY29uZi0+Y2JjX3JlY29yZF9zcGxpdHRpbmcgPSBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19FTkFCTEVEOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgIGNvbmYtPmZfY29va2llX3dyaXRlID0gc3NsX2Nvb2tpZV93cml0ZV9kdW1teTsKKyAgICBjb25mLT5mX2Nvb2tpZV9jaGVjayA9IHNzbF9jb29raWVfY2hlY2tfZHVtbXk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWSkKKyAgICBjb25mLT5hbnRpX3JlcGxheSA9IE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0VOQUJMRUQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBjb25mLT5oc190aW1lb3V0X21pbiA9IE1CRURUTFNfU1NMX0RUTFNfVElNRU9VVF9ERkxfTUlOOworICAgIGNvbmYtPmhzX3RpbWVvdXRfbWF4ID0gTUJFRFRMU19TU0xfRFRMU19USU1FT1VUX0RGTF9NQVg7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBjb25mLT5yZW5lZ29fbWF4X3JlY29yZHMgPSBNQkVEVExTX1NTTF9SRU5FR09fTUFYX1JFQ09SRFNfREVGQVVMVDsKKyAgICBtZW1zZXQoIGNvbmYtPnJlbmVnb19wZXJpb2QsIDB4RkYsIDcgKTsKKyAgICBjb25mLT5yZW5lZ29fcGVyaW9kWzddID0gMHgwMDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICAgICAgICAgaWYoIGVuZHBvaW50ID09IE1CRURUTFNfU1NMX0lTX1NFUlZFUiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9kaF9wYXJhbSggY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzIwNDhfUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDNTExNF9NT0RQXzIwNDhfRyApICkgIT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBQcmVzZXQtc3BlY2lmaWMgZGVmYXVsdHMKKyAgICAgKi8KKyAgICBzd2l0Y2goIHByZXNldCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBOU0EgU3VpdGUgQgorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9QUkVTRVRfU1VJVEVCOgorICAgICAgICAgICAgY29uZi0+bWluX21ham9yX3ZlciA9IE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgIGNvbmYtPm1pbl9taW5vcl92ZXIgPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7IC8qIFRMUyAxLjIgKi8KKyAgICAgICAgICAgIGNvbmYtPm1heF9tYWpvcl92ZXIgPSBNQkVEVExTX1NTTF9NQVhfTUFKT1JfVkVSU0lPTjsKKyAgICAgICAgICAgIGNvbmYtPm1heF9taW5vcl92ZXIgPSBNQkVEVExTX1NTTF9NQVhfTUlOT1JfVkVSU0lPTjsKKworICAgICAgICAgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzBdID0KKyAgICAgICAgICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xXSA9CisgICAgICAgICAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMl0gPQorICAgICAgICAgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzNdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ByZXNldF9zdWl0ZWJfY2lwaGVyc3VpdGVzOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgICAgICAgICBjb25mLT5jZXJ0X3Byb2ZpbGUgPSAmbWJlZHRsc194NTA5X2NydF9wcm9maWxlX3N1aXRlYjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fV0lUSF9DRVJUX19FTkFCTEVEKQorICAgICAgICAgICAgY29uZi0+c2lnX2hhc2hlcyA9IHNzbF9wcmVzZXRfc3VpdGViX2hhc2hlczsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICAgICAgY29uZi0+Y3VydmVfbGlzdCA9IHNzbF9wcmVzZXRfc3VpdGViX2N1cnZlczsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRGVmYXVsdAorICAgICAgICAgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbmYtPm1pbl9tYWpvcl92ZXIgPSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzM7CisgICAgICAgICAgICBjb25mLT5taW5fbWlub3JfdmVyID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOyAvKiBUTFMgMS4wICovCisgICAgICAgICAgICBjb25mLT5tYXhfbWFqb3JfdmVyID0gTUJFRFRMU19TU0xfTUFYX01BSk9SX1ZFUlNJT047CisgICAgICAgICAgICBjb25mLT5tYXhfbWlub3JfdmVyID0gTUJFRFRMU19TU0xfTUFYX01JTk9SX1ZFUlNJT047CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgICAgICAgICBpZiggdHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgICAgICAgICAgICAgY29uZi0+bWluX21pbm9yX3ZlciA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyNlbmRpZgorCisgICAgICAgICAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMF0gPQorICAgICAgICAgICAgY29uZi0+Y2lwaGVyc3VpdGVfbGlzdFtNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzFdID0KKyAgICAgICAgICAgIGNvbmYtPmNpcGhlcnN1aXRlX2xpc3RbTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yXSA9CisgICAgICAgICAgICBjb25mLT5jaXBoZXJzdWl0ZV9saXN0W01CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fM10gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcygpOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgICAgICAgICBjb25mLT5jZXJ0X3Byb2ZpbGUgPSAmbWJlZHRsc194NTA5X2NydF9wcm9maWxlX2RlZmF1bHQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKyAgICAgICAgICAgIGNvbmYtPnNpZ19oYXNoZXMgPSBzc2xfcHJlc2V0X2RlZmF1bHRfaGFzaGVzOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgICAgICBjb25mLT5jdXJ2ZV9saXN0ID0gbWJlZHRsc19lY3BfZ3JwX2lkX2xpc3QoKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgICAgICAgICAgY29uZi0+ZGhtX21pbl9iaXRsZW4gPSAxMDI0OworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBGcmVlIG1iZWR0bHNfc3NsX2NvbmZpZworICovCit2b2lkIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCBtYmVkdGxzX3NzbF9jb25maWcgKmNvbmYgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY29uZi0+ZGhtX1AgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmY29uZi0+ZGhtX0cgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgaWYoIGNvbmYtPnBzayAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggY29uZi0+cHNrLCBjb25mLT5wc2tfbGVuICk7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggY29uZi0+cHNrX2lkZW50aXR5LCBjb25mLT5wc2tfaWRlbnRpdHlfbGVuICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY29uZi0+cHNrICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY29uZi0+cHNrX2lkZW50aXR5ICk7CisgICAgICAgIGNvbmYtPnBza19sZW4gPSAwOworICAgICAgICBjb25mLT5wc2tfaWRlbnRpdHlfbGVuID0gMDsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIHNzbF9rZXlfY2VydF9mcmVlKCBjb25mLT5rZXlfY2VydCApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX3plcm9pemUoIGNvbmYsIHNpemVvZiggbWJlZHRsc19zc2xfY29uZmlnICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19QS19DKSAmJiBcCisgICAgKCBkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8IGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSApCisvKgorICogQ29udmVydCBiZXR3ZWVuIE1CRURUTFNfUEtfWFhYIGFuZCBTU0xfU0lHX1hYWAorICovCit1bnNpZ25lZCBjaGFyIG1iZWR0bHNfc3NsX3NpZ19mcm9tX3BrKCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrICkKK3sKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfY2FuX2RvKCBwaywgTUJFRFRMU19QS19SU0EgKSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfU0lHX1JTQSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfY2FuX2RvKCBwaywgTUJFRFRMU19QS19FQ0RTQSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9TSUdfRUNEU0EgKTsKKyNlbmRpZgorICAgIHJldHVybiggTUJFRFRMU19TU0xfU0lHX0FOT04gKTsKK30KKworbWJlZHRsc19wa190eXBlX3QgbWJlZHRsc19zc2xfcGtfYWxnX2Zyb21fc2lnKCB1bnNpZ25lZCBjaGFyIHNpZyApCit7CisgICAgc3dpdGNoKCBzaWcgKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfU0lHX1JTQToKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19QS19SU0EgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX1NJR19FQ0RTQToKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19QS19FQ0RTQSApOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfUEtfTk9ORSApOworICAgIH0KK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLX0MgJiYgKCBNQkVEVExTX1JTQV9DIHx8IE1CRURUTFNfRUNEU0FfQyApICovCisKKy8qCisgKiBDb252ZXJ0IGZyb20gTUJFRFRMU19TU0xfSEFTSF9YWFggdG8gTUJFRFRMU19NRF9YWFgKKyAqLworbWJlZHRsc19tZF90eXBlX3QgbWJlZHRsc19zc2xfbWRfYWxnX2Zyb21faGFzaCggdW5zaWduZWQgY2hhciBoYXNoICkKK3sKKyAgICBzd2l0Y2goIGhhc2ggKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9NRDU6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfTUQ1ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBMToKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19NRF9TSEExICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9TSEEyMjQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfU0hBMjI0ICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9TSEEyNTY6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfU0hBMjU2ICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9TSEEzODQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfU0hBMzg0ICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9TSEE1MTI6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfTURfU0hBNTEyICk7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19NRF9OT05FICk7CisgICAgfQorfQorCisvKgorICogQ29udmVydCBmcm9tIE1CRURUTFNfTURfWFhYIHRvIE1CRURUTFNfU1NMX0hBU0hfWFhYCisgKi8KK3Vuc2lnbmVkIGNoYXIgbWJlZHRsc19zc2xfaGFzaF9mcm9tX21kX2FsZyggaW50IG1kICkKK3sKKyAgICBzd2l0Y2goIG1kICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfTUQ1OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX01ENSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX01EX1NIQTE6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfU1NMX0hBU0hfU0hBMSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMjI0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX1NIQTIyNCApOworICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMjU2OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX1NIQTI1NiApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMzg0OgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX1NIQTM4NCApOworICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBNTEyOgorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX1NTTF9IQVNIX1NIQTUxMiApOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfU1NMX0hBU0hfTk9ORSApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKy8qCisgKiBDaGVjayBpZiBhIGN1cnZlIHByb3Bvc2VkIGJ5IHRoZSBwZWVyIGlzIGluIG91ciBsaXN0LgorICogUmV0dXJuIDAgaWYgd2UncmUgd2lsbGluZyB0byB1c2UgaXQsIC0xIG90aGVyd2lzZS4KKyAqLworaW50IG1iZWR0bHNfc3NsX2NoZWNrX2N1cnZlKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCApCit7CisgICAgY29uc3QgbWJlZHRsc19lY3BfZ3JvdXBfaWQgKmdpZDsKKworICAgIGlmKCBzc2wtPmNvbmYtPmN1cnZlX2xpc3QgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGZvciggZ2lkID0gc3NsLT5jb25mLT5jdXJ2ZV9saXN0OyAqZ2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7IGdpZCsrICkKKyAgICAgICAgaWYoICpnaWQgPT0gZ3JwX2lkICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCAtMSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRCkKKy8qCisgKiBDaGVjayBpZiBhIGhhc2ggcHJvcG9zZWQgYnkgdGhlIHBlZXIgaXMgaW4gb3VyIGxpc3QuCisgKiBSZXR1cm4gMCBpZiB3ZSdyZSB3aWxsaW5nIHRvIHVzZSBpdCwgLTEgb3RoZXJ3aXNlLgorICovCitpbnQgbWJlZHRsc19zc2xfY2hlY2tfc2lnX2hhc2goIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgbWQgKQoreworICAgIGNvbnN0IGludCAqY3VyOworCisgICAgaWYoIHNzbC0+Y29uZi0+c2lnX2hhc2hlcyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgZm9yKCBjdXIgPSBzc2wtPmNvbmYtPnNpZ19oYXNoZXM7ICpjdXIgIT0gTUJFRFRMU19NRF9OT05FOyBjdXIrKyApCisgICAgICAgIGlmKCAqY3VyID09IChpbnQpIG1kICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgcmV0dXJuKCAtMSApOworfQorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQoraW50IG1iZWR0bHNfc3NsX2NoZWNrX2NlcnRfdXNhZ2UoIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydF9lbmRwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmZsYWdzICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisgICAgaW50IHVzYWdlID0gMDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkKKyAgICBjb25zdCBjaGFyICpleHRfb2lkOworICAgIHNpemVfdCBleHRfbGVuOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFKSAmJiAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkKKyAgICAoKHZvaWQpIGNlcnQpOworICAgICgodm9pZCkgY2VydF9lbmRwb2ludCk7CisgICAgKCh2b2lkKSBmbGFncyk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRSkKKyAgICBpZiggY2VydF9lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgIHsKKyAgICAgICAgLyogU2VydmVyIHBhcnQgb2YgdGhlIGtleSBleGNoYW5nZSAqLworICAgICAgICBzd2l0Y2goIGNpcGhlcnN1aXRlLT5rZXlfZXhjaGFuZ2UgKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQToKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTSzoKKyAgICAgICAgICAgICAgICB1c2FnZSA9IE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0E6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQToKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0E6CisgICAgICAgICAgICAgICAgdXNhZ2UgPSBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9SU0E6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0E6CisgICAgICAgICAgICAgICAgdXNhZ2UgPSBNQkVEVExTX1g1MDlfS1VfS0VZX0FHUkVFTUVOVDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogRG9uJ3QgdXNlIGRlZmF1bHQ6IHdlIHdhbnQgd2FybmluZ3Mgd2hlbiBhZGRpbmcgbmV3IHZhbHVlcyAqLworICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9OT05FOgorICAgICAgICAgICAgY2FzZSBNQkVEVExTX0tFWV9FWENIQU5HRV9QU0s6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0s6CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSzoKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRToKKyAgICAgICAgICAgICAgICB1c2FnZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQ2xpZW50IGF1dGg6IHdlIG9ubHkgaW1wbGVtZW50IHJzYV9zaWduIGFuZCBtYmVkdGxzX2VjZHNhX3NpZ24gZm9yIG5vdyAqLworICAgICAgICB1c2FnZSA9IE1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRTsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoIGNlcnQsIHVzYWdlICkgIT0gMCApCisgICAgeworICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfS0VZX1VTQUdFOworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisjZWxzZQorICAgICgodm9pZCkgY2lwaGVyc3VpdGUpOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSkKKyAgICBpZiggY2VydF9lbmRwb2ludCA9PSBNQkVEVExTX1NTTF9JU19TRVJWRVIgKQorICAgIHsKKyAgICAgICAgZXh0X29pZCA9IE1CRURUTFNfT0lEX1NFUlZFUl9BVVRIOworICAgICAgICBleHRfbGVuID0gTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfU0VSVkVSX0FVVEggKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXh0X29pZCA9IE1CRURUTFNfT0lEX0NMSUVOVF9BVVRIOworICAgICAgICBleHRfbGVuID0gTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfQ0xJRU5UX0FVVEggKTsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc194NTA5X2NydF9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2UoIGNlcnQsIGV4dF9vaWQsIGV4dF9sZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFRfS0VZX1VTQUdFOworICAgICAgICByZXQgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSAqLworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworLyoKKyAqIENvbnZlcnQgdmVyc2lvbiBudW1iZXJzIHRvL2Zyb20gd2lyZSBmb3JtYXQKKyAqIGFuZCwgZm9yIERUTFMsIHRvL2Zyb20gVExTIGVxdWl2YWxlbnQuCisgKgorICogRm9yIFRMUyB0aGlzIGlzIHRoZSBpZGVudGl0eS4KKyAqIEZvciBEVExTLCB1c2Ugb25lIGNvbXBsZW1lbnQgKHYgLT4gMjU1IC0gdiwgYW5kIHRoZW4gbWFwIGFzIGZvbGxvd3M6CisgKiAxLjAgPC0+IDMuMiAgICAgIChEVExTIDEuMCBpcyBiYXNlZCBvbiBUTFMgMS4xKQorICogMS54IDwtPiAzLngrMSAgICBmb3IgeCAhPSAwIChEVExTIDEuMiBiYXNlZCBvbiBUTFMgMS4yKQorICovCit2b2lkIG1iZWR0bHNfc3NsX3dyaXRlX3ZlcnNpb24oIGludCBtYWpvciwgaW50IG1pbm9yLCBpbnQgdHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB2ZXJbMl0gKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggdHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBpZiggbWlub3IgPT0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgICAgIC0tbWlub3I7IC8qIERUTFMgMS4wIHN0b3JlZCBhcyBUTFMgMS4xIGludGVybmFsbHkgKi8KKworICAgICAgICB2ZXJbMF0gPSAodW5zaWduZWQgY2hhcikoIDI1NSAtICggbWFqb3IgLSAyICkgKTsKKyAgICAgICAgdmVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKCAyNTUgLSAoIG1pbm9yIC0gMSApICk7CisgICAgfQorICAgIGVsc2UKKyNlbHNlCisgICAgKCh2b2lkKSB0cmFuc3BvcnQpOworI2VuZGlmCisgICAgeworICAgICAgICB2ZXJbMF0gPSAodW5zaWduZWQgY2hhcikgbWFqb3I7CisgICAgICAgIHZlclsxXSA9ICh1bnNpZ25lZCBjaGFyKSBtaW5vcjsKKyAgICB9Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfcmVhZF92ZXJzaW9uKCBpbnQgKm1ham9yLCBpbnQgKm1pbm9yLCBpbnQgdHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHZlclsyXSApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCB0cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkKKyAgICB7CisgICAgICAgICptYWpvciA9IDI1NSAtIHZlclswXSArIDI7CisgICAgICAgICptaW5vciA9IDI1NSAtIHZlclsxXSArIDE7CisKKyAgICAgICAgaWYoICptaW5vciA9PSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEgKQorICAgICAgICAgICAgKysqbWlub3I7IC8qIERUTFMgMS4wIHN0b3JlZCBhcyBUTFMgMS4xIGludGVybmFsbHkgKi8KKyAgICB9CisgICAgZWxzZQorI2Vsc2UKKyAgICAoKHZvaWQpIHRyYW5zcG9ydCk7CisjZW5kaWYKKyAgICB7CisgICAgICAgICptYWpvciA9IHZlclswXTsKKyAgICAgICAgKm1pbm9yID0gdmVyWzFdOworICAgIH0KK30KKworaW50IG1iZWR0bHNfc3NsX3NldF9jYWxjX3ZlcmlmeV9tZCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLCBpbnQgbWQgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yKQorICAgIGlmKCBzc2wtPm1pbm9yX3ZlciAhPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMgKQorICAgICAgICByZXR1cm4gTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfVkVSSUZZX0hBU0g7CisKKyAgICBzd2l0Y2goIG1kICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSEFTSF9NRDU6CisgICAgICAgICAgICBzc2wtPmhhbmRzaGFrZS0+Y2FsY192ZXJpZnkgPSBzc2xfY2FsY192ZXJpZnlfdGxzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBMToKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSA9IHNzbF9jYWxjX3ZlcmlmeV90bHM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgfHwgTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQorICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hBU0hfU0hBMzg0OgorICAgICAgICAgICAgc3NsLT5oYW5kc2hha2UtPmNhbGNfdmVyaWZ5ID0gc3NsX2NhbGNfdmVyaWZ5X3Rsc19zaGEzODQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IQVNIX1NIQTI1NjoKKyAgICAgICAgICAgIHNzbC0+aGFuZHNoYWtlLT5jYWxjX3ZlcmlmeSA9IHNzbF9jYWxjX3ZlcmlmeV90bHNfc2hhMjU2OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9WRVJJRllfSEFTSDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyNlbHNlIC8qICFNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyAgICAodm9pZCkgc3NsOworICAgICh2b2lkKSBtZDsKKworICAgIHJldHVybiBNQkVEVExTX0VSUl9TU0xfSU5WQUxJRF9WRVJJRllfSEFTSDsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KK30KKworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RMU19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS90aHJlYWRpbmcuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3RocmVhZGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZWMwMWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS90aHJlYWRpbmcuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqICBUaHJlYWRpbmcgYWJzdHJhY3Rpb24gbGF5ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKworI2luY2x1ZGUgIm1iZWR0bHMvdGhyZWFkaW5nLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQpCitzdGF0aWMgdm9pZCB0aHJlYWRpbmdfbXV0ZXhfaW5pdF9wdGhyZWFkKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApCit7CisgICAgaWYoIG11dGV4ID09IE5VTEwgfHwgbXV0ZXgtPmlzX3ZhbGlkICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbXV0ZXgtPmlzX3ZhbGlkID0gcHRocmVhZF9tdXRleF9pbml0KCAmbXV0ZXgtPm11dGV4LCBOVUxMICkgPT0gMDsKK30KKworc3RhdGljIHZvaWQgdGhyZWFkaW5nX211dGV4X2ZyZWVfcHRocmVhZCggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqbXV0ZXggKQoreworICAgIGlmKCBtdXRleCA9PSBOVUxMIHx8ICFtdXRleC0+aXNfdmFsaWQgKQorICAgICAgICByZXR1cm47CisKKyAgICAodm9pZCkgcHRocmVhZF9tdXRleF9kZXN0cm95KCAmbXV0ZXgtPm11dGV4ICk7CisgICAgbXV0ZXgtPmlzX3ZhbGlkID0gMDsKK30KKworc3RhdGljIGludCB0aHJlYWRpbmdfbXV0ZXhfbG9ja19wdGhyZWFkKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApCit7CisgICAgaWYoIG11dGV4ID09IE5VTEwgfHwgISBtdXRleC0+aXNfdmFsaWQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIHB0aHJlYWRfbXV0ZXhfbG9jayggJm11dGV4LT5tdXRleCApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWFkaW5nX211dGV4X3VubG9ja19wdGhyZWFkKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICptdXRleCApCit7CisgICAgaWYoIG11dGV4ID09IE5VTEwgfHwgISBtdXRleC0+aXNfdmFsaWQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmbXV0ZXgtPm11dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordm9pZCAoKm1iZWR0bHNfbXV0ZXhfaW5pdCkoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKiApID0gdGhyZWFkaW5nX211dGV4X2luaXRfcHRocmVhZDsKK3ZvaWQgKCptYmVkdGxzX211dGV4X2ZyZWUpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9mcmVlX3B0aHJlYWQ7CitpbnQgKCptYmVkdGxzX211dGV4X2xvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9sb2NrX3B0aHJlYWQ7CitpbnQgKCptYmVkdGxzX211dGV4X3VubG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKiApID0gdGhyZWFkaW5nX211dGV4X3VubG9ja19wdGhyZWFkOworCisvKgorICogV2l0aCBwaHRyZWFkcyB3ZSBjYW4gc3RhdGljYWxseSBpbml0aWFsaXplIG11dGV4ZXMKKyAqLworI2RlZmluZSBNVVRFWF9JTklUICA9IHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgMSB9CisKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0FMVCkKK3N0YXRpYyBpbnQgdGhyZWFkaW5nX211dGV4X2ZhaWwoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKm11dGV4ICkKK3sKKyAgICAoKHZvaWQpIG11dGV4ICk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEgKTsKK30KK3N0YXRpYyB2b2lkIHRocmVhZGluZ19tdXRleF9kdW1teSggbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCAqbXV0ZXggKQoreworICAgICgodm9pZCkgbXV0ZXggKTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgKCptYmVkdGxzX211dGV4X2luaXQpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9kdW1teTsKK3ZvaWQgKCptYmVkdGxzX211dGV4X2ZyZWUpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSA9IHRocmVhZGluZ19tdXRleF9kdW1teTsKK2ludCAoKm1iZWR0bHNfbXV0ZXhfbG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKiApID0gdGhyZWFkaW5nX211dGV4X2ZhaWw7CitpbnQgKCptYmVkdGxzX211dGV4X3VubG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKiApID0gdGhyZWFkaW5nX211dGV4X2ZhaWw7CisKKy8qCisgKiBTZXQgZnVuY3Rpb25zIHBvaW50ZXJzIGFuZCBpbml0aWFsaXplIGdsb2JhbCBtdXRleGVzCisgKi8KK3ZvaWQgbWJlZHRsc190aHJlYWRpbmdfc2V0X2FsdCggdm9pZCAoKm11dGV4X2luaXQpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKm11dGV4X2ZyZWUpKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqbXV0ZXhfbG9jaykoIG1iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgKiApLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCptdXRleF91bmxvY2spKCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90ICogKSApCit7CisgICAgbWJlZHRsc19tdXRleF9pbml0ID0gbXV0ZXhfaW5pdDsKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUgPSBtdXRleF9mcmVlOworICAgIG1iZWR0bHNfbXV0ZXhfbG9jayA9IG11dGV4X2xvY2s7CisgICAgbWJlZHRsc19tdXRleF91bmxvY2sgPSBtdXRleF91bmxvY2s7CisKKyAgICBtYmVkdGxzX211dGV4X2luaXQoICZtYmVkdGxzX3RocmVhZGluZ19yZWFkZGlyX211dGV4ICk7CisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmbWJlZHRsc190aHJlYWRpbmdfZ210aW1lX211dGV4ICk7Cit9CisKKy8qCisgKiBGcmVlIGdsb2JhbCBtdXRleGVzCisgKi8KK3ZvaWQgbWJlZHRsc190aHJlYWRpbmdfZnJlZV9hbHQoIHZvaWQgKQoreworICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJm1iZWR0bHNfdGhyZWFkaW5nX3JlYWRkaXJfbXV0ZXggKTsKKyAgICBtYmVkdGxzX211dGV4X2ZyZWUoICZtYmVkdGxzX3RocmVhZGluZ19nbXRpbWVfbXV0ZXggKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19BTFQgKi8KKworLyoKKyAqIERlZmluZSBnbG9iYWwgbXV0ZXhlcworICovCisjaWZuZGVmIE1VVEVYX0lOSVQKKyNkZWZpbmUgTVVURVhfSU5JVAorI2VuZGlmCittYmVkdGxzX3RocmVhZGluZ19tdXRleF90IG1iZWR0bHNfdGhyZWFkaW5nX3JlYWRkaXJfbXV0ZXggTVVURVhfSU5JVDsKK21iZWR0bHNfdGhyZWFkaW5nX211dGV4X3QgbWJlZHRsc190aHJlYWRpbmdfZ210aW1lX211dGV4IE1VVEVYX0lOSVQ7CisKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS90aW1pbmcuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3RpbWluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzdmZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS90aW1pbmcuYwpAQCAtMCwwICsxLDUyNSBAQAorLyoKKyAqICBQb3J0YWJsZSBpbnRlcmZhY2UgdG8gdGhlIENQVSBjeWNsZSBjb3VudGVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorCisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0FMVCkKKworI2lmICFkZWZpbmVkKHVuaXgpICYmICFkZWZpbmVkKF9fdW5peF9fKSAmJiAhZGVmaW5lZChfX3VuaXgpICYmIFwKKyAgICAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9XSU4zMikKKyNlcnJvciAiVGhpcyBtb2R1bGUgb25seSB3b3JrcyBvbiBVbml4IGFuZCBXaW5kb3dzLCBzZWUgTUJFRFRMU19USU1JTkdfQyBpbiBjb25maWcuaCIKKyNlbmRpZgorCisjaWZuZGVmIGFzbQorI2RlZmluZSBhc20gX19hc20KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luYmFzZS5oPgorCitzdHJ1Y3QgX2hyX3RpbWUKK3sKKyAgICBMQVJHRV9JTlRFR0VSIHN0YXJ0OworfTsKKworI2Vsc2UKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitzdHJ1Y3QgX2hyX3RpbWUKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCBzdGFydDsKK307CisKKyNlbmRpZiAvKiBfV0lOMzIgJiYgIUVGSVg2NCAmJiAhRUZJMzIgKi8KKworI2lmICFkZWZpbmVkKEhBVkVfSEFSRENMT0NLKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmICBcCisgICAgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NX0lYODYpICkgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKKworI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgdW5zaWduZWQgbG9uZyB0c2M7CisgICAgX19hc20gICByZHRzYworICAgIF9fYXNtICAgbW92ICBbdHNjXSwgZWF4CisgICAgcmV0dXJuKCB0c2MgKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgICggX01TQ19WRVIgJiYgX01fSVg4NiApIHx8IF9fV0FUQ09NQ19fICovCisKKy8qIHNvbWUgdmVyc2lvbnMgb2YgbWluZ3ctNjQgaGF2ZSAzMi1iaXQgbG9uZ3MgZXZlbiBvbiB4ODRfNjQgKi8KKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKSAmJiAgXAorICAgIGRlZmluZWQoX19HTlVDX18pICYmICggZGVmaW5lZChfX2kzODZfXykgfHwgKCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICggZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoIF9feDg2XzY0X18pICkgJiYgX19TSVpFT0ZfTE9OR19fID09IDQgKSApCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG8sIGhpOworICAgIGFzbSB2b2xhdGlsZSggInJkdHNjIiA6ICI9YSIgKGxvKSwgIj1kIiAoaGkpICk7CisgICAgcmV0dXJuKCBsbyApOworfQorI2VuZGlmIC8qICFIQVZFX0hBUkRDTE9DSyAmJiBNQkVEVExTX0hBVkVfQVNNICYmCisgICAgICAgICAgX19HTlVDX18gJiYgX19pMzg2X18gKi8KKworI2lmICFkZWZpbmVkKEhBVkVfSEFSRENMT0NLKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmICBcCisgICAgZGVmaW5lZChfX0dOVUNfXykgJiYgKCBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSApCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG8sIGhpOworICAgIGFzbSB2b2xhdGlsZSggInJkdHNjIiA6ICI9YSIgKGxvKSwgIj1kIiAoaGkpICk7CisgICAgcmV0dXJuKCBsbyB8ICggaGkgPDwgMzIgKSApOworfQorI2VuZGlmIC8qICFIQVZFX0hBUkRDTE9DSyAmJiBNQkVEVExTX0hBVkVfQVNNICYmCisgICAgICAgICAgX19HTlVDX18gJiYgKCBfX2FtZDY0X18gfHwgX194ODZfNjRfXyApICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKSAmJiAgXAorICAgIGRlZmluZWQoX19HTlVDX18pICYmICggZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3BwY19fKSApCisKKyNkZWZpbmUgSEFWRV9IQVJEQ0xPQ0sKKwordW5zaWduZWQgbG9uZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soIHZvaWQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgdGJsLCB0YnUwLCB0YnUxOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGFzbSB2b2xhdGlsZSggIm1mdGJ1ICUwIiA6ICI9ciIgKHRidTApICk7CisgICAgICAgIGFzbSB2b2xhdGlsZSggIm1mdGIgICUwIiA6ICI9ciIgKHRibCApICk7CisgICAgICAgIGFzbSB2b2xhdGlsZSggIm1mdGJ1ICUwIiA6ICI9ciIgKHRidTEpICk7CisgICAgfQorICAgIHdoaWxlKCB0YnUwICE9IHRidTEgKTsKKworICAgIHJldHVybiggdGJsICk7Cit9CisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICYmIE1CRURUTFNfSEFWRV9BU00gJiYKKyAgICAgICAgICBfX0dOVUNfXyAmJiAoIF9fcG93ZXJwY19fIHx8IF9fcHBjX18gKSAqLworCisjaWYgIWRlZmluZWQoSEFWRV9IQVJEQ0xPQ0spICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgIFwKKyAgICBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fc3BhcmM2NF9fKQorCisjaWYgZGVmaW5lZChfX09wZW5CU0RfXykKKyN3YXJuaW5nIE9wZW5CU0QgZG9lcyBub3QgYWxsb3cgYWNjZXNzIHRvIHRpY2sgcmVnaXN0ZXIgdXNpbmcgc29mdHdhcmUgdmVyc2lvbiBpbnN0ZWFkCisjZWxzZQorI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgdW5zaWduZWQgbG9uZyB0aWNrOworICAgIGFzbSB2b2xhdGlsZSggInJkcHIgJSV0aWNrLCAlMDsiIDogIj0mciIgKHRpY2spICk7CisgICAgcmV0dXJuKCB0aWNrICk7Cit9CisjZW5kaWYgLyogX19PcGVuQlNEX18gKi8KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgIF9fR05VQ19fICYmIF9fc3BhcmM2NF9fICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykgJiYgZGVmaW5lZChNQkVEVExTX0hBVkVfQVNNKSAmJiAgXAorICAgIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19zcGFyY19fKSAmJiAhZGVmaW5lZChfX3NwYXJjNjRfXykKKworI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgdW5zaWduZWQgbG9uZyB0aWNrOworICAgIGFzbSB2b2xhdGlsZSggIi5ieXRlIDB4ODMsIDB4NDEsIDB4MDAsIDB4MDAiICk7CisgICAgYXNtIHZvbGF0aWxlKCAibW92ICAgJSVnMSwgJTAiIDogIj1yIiAodGljaykgKTsKKyAgICByZXR1cm4oIHRpY2sgKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgIF9fR05VQ19fICYmIF9fc3BhcmNfXyAmJiAhX19zcGFyYzY0X18gKi8KKworI2lmICFkZWZpbmVkKEhBVkVfSEFSRENMT0NLKSAmJiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pICYmICAgICAgXAorICAgIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19hbHBoYV9fKQorCisjZGVmaW5lIEhBVkVfSEFSRENMT0NLCisKK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCB2b2lkICkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGNjOworICAgIGFzbSB2b2xhdGlsZSggInJwY2MgJTAiIDogIj1yIiAoY2MpICk7CisgICAgcmV0dXJuKCBjYyAmIDB4RkZGRkZGRkYgKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgJiYgTUJFRFRMU19IQVZFX0FTTSAmJgorICAgICAgICAgIF9fR05VQ19fICYmIF9fYWxwaGFfXyAqLworCisjaWYgIWRlZmluZWQoSEFWRV9IQVJEQ0xPQ0spICYmIGRlZmluZWQoTUJFRFRMU19IQVZFX0FTTSkgJiYgICAgICBcCisgICAgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX2lhNjRfXykKKworI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgdW5zaWduZWQgbG9uZyBpdGM7CisgICAgYXNtIHZvbGF0aWxlKCAibW92ICUwID0gYXIuaXRjIiA6ICI9ciIgKGl0YykgKTsKKyAgICByZXR1cm4oIGl0YyApOworfQorI2VuZGlmIC8qICFIQVZFX0hBUkRDTE9DSyAmJiBNQkVEVExTX0hBVkVfQVNNICYmCisgICAgICAgICAgX19HTlVDX18gJiYgX19pYTY0X18gKi8KKworI2lmICFkZWZpbmVkKEhBVkVfSEFSRENMT0NLKSAmJiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBcCisgICAgIWRlZmluZWQoRUZJWDY0KSAmJiAhZGVmaW5lZChFRkkzMikKKworI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgTEFSR0VfSU5URUdFUiBvZmZzZXQ7CisKKyAgICBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciggJm9mZnNldCApOworCisgICAgcmV0dXJuKCAodW5zaWduZWQgbG9uZykoIG9mZnNldC5RdWFkUGFydCApICk7Cit9CisjZW5kaWYgLyogIUhBVkVfSEFSRENMT0NLICYmIF9NU0NfVkVSICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKyNpZiAhZGVmaW5lZChIQVZFX0hBUkRDTE9DSykKKworI2RlZmluZSBIQVZFX0hBUkRDTE9DSworCitzdGF0aWMgaW50IGhhcmRjbG9ja19pbml0ID0gMDsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0dl9pbml0OworCit1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgc3RydWN0IHRpbWV2YWwgdHZfY3VyOworCisgICAgaWYoIGhhcmRjbG9ja19pbml0ID09IDAgKQorICAgIHsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCAmdHZfaW5pdCwgTlVMTCApOworICAgICAgICBoYXJkY2xvY2tfaW5pdCA9IDE7CisgICAgfQorCisgICAgZ2V0dGltZW9mZGF5KCAmdHZfY3VyLCBOVUxMICk7CisgICAgcmV0dXJuKCAoIHR2X2N1ci50dl9zZWMgIC0gdHZfaW5pdC50dl9zZWMgICkgKiAxMDAwMDAwCisgICAgICAgICAgKyAoIHR2X2N1ci50dl91c2VjIC0gdHZfaW5pdC50dl91c2VjICkgKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9IQVJEQ0xPQ0sgKi8KKwordm9sYXRpbGUgaW50IG1iZWR0bHNfdGltaW5nX2FsYXJtZWQgPSAwOworCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisKK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCBzdHJ1Y3QgbWJlZHRsc190aW1pbmdfaHJfdGltZSAqdmFsLCBpbnQgcmVzZXQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgZGVsdGE7CisgICAgTEFSR0VfSU5URUdFUiBvZmZzZXQsIGhmcmVxOworICAgIHN0cnVjdCBfaHJfdGltZSAqdCA9IChzdHJ1Y3QgX2hyX3RpbWUgKikgdmFsOworCisgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoICAmb2Zmc2V0ICk7CisgICAgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSggJmhmcmVxICk7CisKKyAgICBkZWx0YSA9ICh1bnNpZ25lZCBsb25nKSggKCAxMDAwICoKKyAgICAgICAgKCBvZmZzZXQuUXVhZFBhcnQgLSB0LT5zdGFydC5RdWFkUGFydCApICkgLworICAgICAgICAgICBoZnJlcS5RdWFkUGFydCApOworCisgICAgaWYoIHJlc2V0ICkKKyAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoICZ0LT5zdGFydCApOworCisgICAgcmV0dXJuKCBkZWx0YSApOworfQorCisvKiBJdCdzIE9LIHRvIHVzZSBhIGdsb2JhbCBiZWNhdXNlIGFsYXJtKCkgaXMgc3VwcG9zZWQgdG8gYmUgZ2xvYmFsIGFueXdheSAqLworc3RhdGljIERXT1JEIGFsYXJtTXM7CisKK3N0YXRpYyBEV09SRCBXSU5BUEkgVGltZXJQcm9jKCBMUFZPSUQgVGltZXJDb250ZXh0ICkKK3sKKyAgICAoKHZvaWQpIFRpbWVyQ29udGV4dCk7CisgICAgU2xlZXAoIGFsYXJtTXMgKTsKKyAgICBtYmVkdGxzX3RpbWluZ19hbGFybWVkID0gMTsKKyAgICByZXR1cm4oIFRSVUUgKTsKK30KKwordm9pZCBtYmVkdGxzX3NldF9hbGFybSggaW50IHNlY29uZHMgKQoreworICAgIERXT1JEIFRocmVhZElkOworCisgICAgbWJlZHRsc190aW1pbmdfYWxhcm1lZCA9IDA7CisgICAgYWxhcm1NcyA9IHNlY29uZHMgKiAxMDAwOworICAgIENsb3NlSGFuZGxlKCBDcmVhdGVUaHJlYWQoIE5VTEwsIDAsIFRpbWVyUHJvYywgTlVMTCwgMCwgJlRocmVhZElkICkgKTsKK30KKworI2Vsc2UgLyogX1dJTjMyICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKK3Vuc2lnbmVkIGxvbmcgbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCBzdHJ1Y3QgbWJlZHRsc190aW1pbmdfaHJfdGltZSAqdmFsLCBpbnQgcmVzZXQgKQoreworICAgIHVuc2lnbmVkIGxvbmcgZGVsdGE7CisgICAgc3RydWN0IHRpbWV2YWwgb2Zmc2V0OworICAgIHN0cnVjdCBfaHJfdGltZSAqdCA9IChzdHJ1Y3QgX2hyX3RpbWUgKikgdmFsOworCisgICAgZ2V0dGltZW9mZGF5KCAmb2Zmc2V0LCBOVUxMICk7CisKKyAgICBpZiggcmVzZXQgKQorICAgIHsKKyAgICAgICAgdC0+c3RhcnQudHZfc2VjICA9IG9mZnNldC50dl9zZWM7CisgICAgICAgIHQtPnN0YXJ0LnR2X3VzZWMgPSBvZmZzZXQudHZfdXNlYzsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCisgICAgZGVsdGEgPSAoIG9mZnNldC50dl9zZWMgIC0gdC0+c3RhcnQudHZfc2VjICApICogMTAwMAorICAgICAgICAgICsgKCBvZmZzZXQudHZfdXNlYyAtIHQtPnN0YXJ0LnR2X3VzZWMgKSAvIDEwMDA7CisKKyAgICByZXR1cm4oIGRlbHRhICk7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ2hhbmRsZXIoIGludCBzaWdudW0gKQoreworICAgIG1iZWR0bHNfdGltaW5nX2FsYXJtZWQgPSAxOworICAgIHNpZ25hbCggc2lnbnVtLCBzaWdoYW5kbGVyICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zZXRfYWxhcm0oIGludCBzZWNvbmRzICkKK3sKKyAgICBtYmVkdGxzX3RpbWluZ19hbGFybWVkID0gMDsKKyAgICBzaWduYWwoIFNJR0FMUk0sIHNpZ2hhbmRsZXIgKTsKKyAgICBhbGFybSggc2Vjb25kcyApOworfQorCisjZW5kaWYgLyogX1dJTjMyICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKy8qCisgKiBTZXQgZGVsYXlzIHRvIHdhdGNoCisgKi8KK3ZvaWQgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5KCB2b2lkICpkYXRhLCB1aW50MzJfdCBpbnRfbXMsIHVpbnQzMl90IGZpbl9tcyApCit7CisgICAgbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dCAqY3R4ID0gKG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgKikgZGF0YTsKKworICAgIGN0eC0+aW50X21zID0gaW50X21zOworICAgIGN0eC0+ZmluX21zID0gZmluX21zOworCisgICAgaWYoIGZpbl9tcyAhPSAwICkKKyAgICAgICAgKHZvaWQpIG1iZWR0bHNfdGltaW5nX2dldF90aW1lciggJmN0eC0+dGltZXIsIDEgKTsKK30KKworLyoKKyAqIEdldCBudW1iZXIgb2YgZGVsYXlzIGV4cGlyZWQKKyAqLworaW50IG1iZWR0bHNfdGltaW5nX2dldF9kZWxheSggdm9pZCAqZGF0YSApCit7CisgICAgbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dCAqY3R4ID0gKG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgKikgZGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIGVsYXBzZWRfbXM7CisKKyAgICBpZiggY3R4LT5maW5fbXMgPT0gMCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGVsYXBzZWRfbXMgPSBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoICZjdHgtPnRpbWVyLCAwICk7CisKKyAgICBpZiggZWxhcHNlZF9tcyA+PSBjdHgtPmZpbl9tcyApCisgICAgICAgIHJldHVybiggMiApOworCisgICAgaWYoIGVsYXBzZWRfbXMgPj0gY3R4LT5pbnRfbXMgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogIU1CRURUTFNfVElNSU5HX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIEJ1c3ktd2FpdHMgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICogVXNlZCBmb3IgdGVzdGluZyBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGJ1c3lfbXNsZWVwKCB1bnNpZ25lZCBsb25nIG1zZWMgKQoreworICAgIHN0cnVjdCBtYmVkdGxzX3RpbWluZ19ocl90aW1lIGhpcmVzOworICAgIHVuc2lnbmVkIGxvbmcgaSA9IDA7IC8qIGZvciBidXN5LXdhaXRpbmcgKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGo7IC8qIHRvIHByZXZlbnQgb3B0aW1pc2F0aW9uICovCisKKyAgICAodm9pZCkgbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCAmaGlyZXMsIDEgKTsKKworICAgIHdoaWxlKCBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoICZoaXJlcywgMCApIDwgbXNlYyApCisgICAgICAgIGkrKzsKKworICAgIGogPSBpOworICAgICh2b2lkKSBqOworfQorCisjZGVmaW5lIEZBSUwgICAgZG8gICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggdmVyYm9zZSAhPSAwICkgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4oIDEgKTsgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlKCAwICkKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICoKKyAqIFdhcm5pbmc6IHRoaXMgaXMgd29yayBpbiBwcm9ncmVzcywgc29tZSB0ZXN0cyBtYXkgbm90IGJlIHJlbGlhYmxlIGVub3VnaAorICogeWV0ISBGYWxzZSBwb3NpdGl2ZXMgbWF5IGhhcHBlbi4KKyAqLworaW50IG1iZWR0bHNfdGltaW5nX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIHVuc2lnbmVkIGxvbmcgY3ljbGVzLCByYXRpbzsKKyAgICB1bnNpZ25lZCBsb25nIG1pbGxpc2Vjcywgc2VjczsKKyAgICBpbnQgaGFyZGZhaWw7CisgICAgc3RydWN0IG1iZWR0bHNfdGltaW5nX2hyX3RpbWUgaGlyZXM7CisgICAgdWludDMyX3QgYSwgYjsKKyAgICBtYmVkdGxzX3RpbWluZ19kZWxheV9jb250ZXh0IGN0eDsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgVElNSU5HIHRlc3RzIG5vdGU6IHdpbGwgdGFrZSBzb21lIHRpbWUhXG4iICk7CisKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgVElNSU5HIHRlc3QgIzEgKHNldF9hbGFybSAvIGdldF90aW1lcik6ICIgKTsKKworICAgIGZvciggc2VjcyA9IDE7IHNlY3MgPD0gMzsgc2VjcysrICkKKyAgICB7CisgICAgICAgICh2b2lkKSBtYmVkdGxzX3RpbWluZ19nZXRfdGltZXIoICZoaXJlcywgMSApOworCisgICAgICAgIG1iZWR0bHNfc2V0X2FsYXJtKCAoaW50KSBzZWNzICk7CisgICAgICAgIHdoaWxlKCAhbWJlZHRsc190aW1pbmdfYWxhcm1lZCApCisgICAgICAgICAgICA7CisKKyAgICAgICAgbWlsbGlzZWNzID0gbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyKCAmaGlyZXMsIDAgKTsKKworICAgICAgICAvKiBGb3Igc29tZSByZWFzb24gb24gV2luZG93cyBpdCBsb29rcyBsaWtlIGFsYXJtIGhhcyBhbiBleHRyYSBkZWxheQorICAgICAgICAgKiAobWF5YmUgcmVsYXRlZCB0byBjcmVhdGluZyBhIG5ldyB0aHJlYWQpLiBBbGxvdyBzb21lIHJvb20gaGVyZS4gKi8KKyAgICAgICAgaWYoIG1pbGxpc2VjcyA8IDgwMCAqIHNlY3MgfHwgbWlsbGlzZWNzID4gMTIwMCAqIHNlY3MgKyAzMDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBUSU1JTkcgdGVzdCAjMiAoc2V0L2dldF9kZWxheSAgICAgICAgKTogIiApOworCisgICAgZm9yKCBhID0gMjAwOyBhIDw9IDQwMDsgYSArPSAyMDAgKQorICAgIHsKKyAgICAgICAgZm9yKCBiID0gMjAwOyBiIDw9IDQwMDsgYiArPSAyMDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3RpbWluZ19zZXRfZGVsYXkoICZjdHgsIGEsIGEgKyBiICk7CisKKyAgICAgICAgICAgIGJ1c3lfbXNsZWVwKCBhIC0gYSAvIDggKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoICZjdHggKSAhPSAwICkKKyAgICAgICAgICAgICAgICBGQUlMOworCisgICAgICAgICAgICBidXN5X21zbGVlcCggYSAvIDQgKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoICZjdHggKSAhPSAxICkKKyAgICAgICAgICAgICAgICBGQUlMOworCisgICAgICAgICAgICBidXN5X21zbGVlcCggYiAtIGEgLyA4IC0gYiAvIDggKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoICZjdHggKSAhPSAxICkKKyAgICAgICAgICAgICAgICBGQUlMOworCisgICAgICAgICAgICBidXN5X21zbGVlcCggYiAvIDQgKTsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoICZjdHggKSAhPSAyICkKKyAgICAgICAgICAgICAgICBGQUlMOworICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5KCAmY3R4LCAwLCAwICk7CisgICAgYnVzeV9tc2xlZXAoIDIwMCApOworICAgIGlmKCBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkoICZjdHggKSAhPSAtMSApCisgICAgICAgIEZBSUw7CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgVElNSU5HIHRlc3QgIzMgKGhhcmRjbG9jayAvIGdldF90aW1lcik6ICIgKTsKKworICAgIC8qCisgICAgICogQWxsb3cgb25lIGZhaWx1cmUgZm9yIHBvc3NpYmxlIGNvdW50ZXIgd3JhcHBpbmcuCisgICAgICogT24gYSA0R2h6IDMyLWJpdCBtYWNoaW5lIHRoZSBjeWNsZSBjb3VudGVyIHdyYXBzIGFib3V0IG9uY2UgcGVyIHNlY29uZDsKKyAgICAgKiBzaW5jZSB0aGUgd2hvbGUgdGVzdCBpcyBhYm91dCAxMG1zLCBpdCBzaG91bGRuJ3QgaGFwcGVuIHR3aWNlIGluIGEgcm93LgorICAgICAqLworICAgIGhhcmRmYWlsID0gMDsKKworaGFyZF90ZXN0OgorICAgIGlmKCBoYXJkZmFpbCA+IDEgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCAoaWdub3JlZClcbiIgKTsKKworICAgICAgICBnb3RvIGhhcmRfdGVzdF9kb25lOworICAgIH0KKworICAgIC8qIEdldCBhIHJlZmVyZW5jZSByYXRpbyBjeWNsZXMvbXMgKi8KKyAgICBtaWxsaXNlY3MgPSAxOworICAgIGN5Y2xlcyA9IG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpOworICAgIGJ1c3lfbXNsZWVwKCBtaWxsaXNlY3MgKTsKKyAgICBjeWNsZXMgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKSAtIGN5Y2xlczsKKyAgICByYXRpbyA9IGN5Y2xlcyAvIG1pbGxpc2VjczsKKworICAgIC8qIENoZWNrIHRoYXQgdGhlIHJhdGlvIGlzIG1vc3RseSBjb25zdGFudCAqLworICAgIGZvciggbWlsbGlzZWNzID0gMjsgbWlsbGlzZWNzIDw9IDQ7IG1pbGxpc2VjcysrICkKKyAgICB7CisgICAgICAgIGN5Y2xlcyA9IG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpOworICAgICAgICBidXN5X21zbGVlcCggbWlsbGlzZWNzICk7CisgICAgICAgIGN5Y2xlcyA9IG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpIC0gY3ljbGVzOworCisgICAgICAgIC8qIEFsbG93IHZhcmlhdGlvbiB1cCB0byAyMCUgKi8KKyAgICAgICAgaWYoIGN5Y2xlcyAvIG1pbGxpc2VjcyA8IHJhdGlvIC0gcmF0aW8gLyA1IHx8CisgICAgICAgICAgICBjeWNsZXMgLyBtaWxsaXNlY3MgPiByYXRpbyArIHJhdGlvIC8gNSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhcmRmYWlsKys7CisgICAgICAgICAgICBnb3RvIGhhcmRfdGVzdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBhc3NlZFxuIiApOworCitoYXJkX3Rlc3RfZG9uZToKKworICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19USU1JTkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdmVyc2lvbi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkvdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTgwZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS92ZXJzaW9uLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBWZXJzaW9uIGluZm9ybWF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9DKQorCisjaW5jbHVkZSAibWJlZHRscy92ZXJzaW9uLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3Vuc2lnbmVkIGludCBtYmVkdGxzX3ZlcnNpb25fZ2V0X251bWJlcigpCit7CisgICAgcmV0dXJuKCBNQkVEVExTX1ZFUlNJT05fTlVNQkVSICk7Cit9CisKK3ZvaWQgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmcoIGNoYXIgKnN0cmluZyApCit7CisgICAgbWVtY3B5KCBzdHJpbmcsIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcsCisgICAgICAgICAgICBzaXplb2YoIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcgKSApOworfQorCit2b2lkIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwoIGNoYXIgKnN0cmluZyApCit7CisgICAgbWVtY3B5KCBzdHJpbmcsIE1CRURUTFNfVkVSU0lPTl9TVFJJTkdfRlVMTCwKKyAgICAgICAgICAgIHNpemVvZiggTUJFRFRMU19WRVJTSU9OX1NUUklOR19GVUxMICkgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfVkVSU0lPTl9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2NmU2NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYwpAQCAtMCwwICsxLDY0NyBAQAorLyoKKyAqICBWZXJzaW9uIGZlYXR1cmUgaW5mb3JtYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19WRVJTSU9OX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3ZlcnNpb24uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZXNbXSA9IHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUykKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9BU00pCisgICAgIk1CRURUTFNfSEFWRV9BU00iLAorI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9BU00gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9TU0UyKQorICAgICJNQkVEVExTX0hBVkVfU1NFMiIsCisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1NTRTIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorICAgICJNQkVEVExTX0hBVkVfVElNRSIsCisjZW5kaWYgLyogTUJFRFRMU19IQVZFX1RJTUUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FX0RBVEUpCisgICAgIk1CRURUTFNfSEFWRV9USU1FX0RBVEUiLAorI2VuZGlmIC8qIE1CRURUTFNfSEFWRV9USU1FX0RBVEUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTUVNT1JZKQorICAgICJNQkVEVExTX1BMQVRGT1JNX01FTU9SWSIsCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9NRU1PUlkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUykKKyAgICAiTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQpCisgICAgIk1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQpCisgICAgIk1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQpCisgICAgIk1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fUFJJTlRGX0FMVCkKKyAgICAiTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUKQorICAgICJNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9TTlBSSU5URl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQpCisgICAgIk1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9XQVJOSU5HKQorICAgICJNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORyIsCisjZW5kaWYgLyogTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVEKQorICAgICJNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCIsCisjZW5kaWYgLyogTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0FMVCkKKyAgICAiTUJFRFRMU19USU1JTkdfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RJTUlOR19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0FMVCkKKyAgICAiTUJFRFRMU19BRVNfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX0FFU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9BTFQpCisgICAgIk1CRURUTFNfQVJDNF9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfQVJDNF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQUxUKQorICAgICJNQkVEVExTX0JMT1dGSVNIX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19CTE9XRklTSF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQUxUKQorICAgICJNQkVEVExTX0NBTUVMTElBX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0FMVCkKKyAgICAiTUJFRFRMU19ERVNfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX0RFU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWFRFQV9BTFQpCisgICAgIk1CRURUTFNfWFRFQV9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfWFRFQV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0FMVCkKKyAgICAiTUJFRFRMU19NRDJfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX01EMl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0FMVCkKKyAgICAiTUJFRFRMU19NRDRfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX01ENF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0FMVCkKKyAgICAiTUJFRFRMU19NRDVfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX01ENV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0FMVCkKKyAgICAiTUJFRFRMU19SSVBFTUQxNjBfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1JJUEVNRDE2MF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9BTFQpCisgICAgIk1CRURUTFNfU0hBMV9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0FMVCkKKyAgICAiTUJFRFRMU19TSEEyNTZfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTI1Nl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0FMVCkKKyAgICAiTUJFRFRMU19TSEE1MTJfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX1BST0NFU1NfQUxUKQorICAgICJNQkVEVExTX01EMl9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19NRDJfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X1BST0NFU1NfQUxUKQorICAgICJNQkVEVExTX01ENF9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19NRDRfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X1BST0NFU1NfQUxUKQorICAgICJNQkVEVExTX01ENV9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19NRDVfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX1BST0NFU1NfQUxUKQorICAgICJNQkVEVExTX1JJUEVNRDE2MF9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19SSVBFTUQxNjBfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9QUk9DRVNTX0FMVCkKKyAgICAiTUJFRFRMU19TSEExX1BST0NFU1NfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NIQTFfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X1BST0NFU1NfQUxUKQorICAgICJNQkVEVExTX1NIQTI1Nl9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19TSEEyNTZfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX1BST0NFU1NfQUxUKQorICAgICJNQkVEVExTX1NIQTUxMl9QUk9DRVNTX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19TSEE1MTJfUFJPQ0VTU19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX1NFVEtFWV9BTFQpCisgICAgIk1CRURUTFNfREVTX1NFVEtFWV9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfREVTX1NFVEtFWV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQpCisgICAgIk1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfREVTX0NSWVBUX0VDQl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTM19DUllQVF9FQ0JfQUxUKQorICAgICJNQkVEVExTX0RFUzNfQ1JZUFRfRUNCX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19ERVMzX0NSWVBUX0VDQl9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX1NFVEtFWV9FTkNfQUxUKQorICAgICJNQkVEVExTX0FFU19TRVRLRVlfRU5DX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19BRVNfU0VUS0VZX0VOQ19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX1NFVEtFWV9ERUNfQUxUKQorICAgICJNQkVEVExTX0FFU19TRVRLRVlfREVDX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19BRVNfU0VUS0VZX0RFQ19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0VOQ1JZUFRfQUxUKQorICAgICJNQkVEVExTX0FFU19FTkNSWVBUX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19BRVNfRU5DUllQVF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0RFQ1JZUFRfQUxUKQorICAgICJNQkVEVExTX0FFU19ERUNSWVBUX0FMVCIsCisjZW5kaWYgLyogTUJFRFRMU19BRVNfREVDUllQVF9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpCisgICAgIk1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkiLAorI2VuZGlmIC8qIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQpCisgICAgIk1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQiLAorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9IQVJEV0FSRV9BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX1JPTV9UQUJMRVMpCisgICAgIk1CRURUTFNfQUVTX1JPTV9UQUJMRVMiLAorI2VuZGlmIC8qIE1CRURUTFNfQUVTX1JPTV9UQUJMRVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfU01BTExfTUVNT1JZKQorICAgICJNQkVEVExTX0NBTUVMTElBX1NNQUxMX01FTU9SWSIsCisjZW5kaWYgLyogTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgICJNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyIsCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCKQorICAgICJNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiIsCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ1RSKQorICAgICJNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiIsCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSKQorICAgICJNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUiIsCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcpCisgICAgIk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzciLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUykKKyAgICAiTUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTikKKyAgICAiTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MpCisgICAgIk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTKQorICAgICJNQkVEVExTX0VOQUJMRV9XRUFLX0NJUEhFUlNVSVRFUyIsCisjZW5kaWYgLyogTUJFRFRMU19FTkFCTEVfV0VBS19DSVBIRVJTVUlURVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTKQorICAgICJNQkVEVExTX1JFTU9WRV9BUkM0X0NJUEhFUlNVSVRFUyIsCisjZW5kaWYgLyogTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyMjRLMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEKQorICAgICJNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX05JU1RfT1BUSU0pCisgICAgIk1CRURUTFNfRUNQX05JU1RfT1BUSU0iLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX05JU1RfT1BUSU0gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQykKKyAgICAiTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEKQorICAgICJNQkVEVExTX0tFWV9FWENIQU5HRV9QU0tfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEKQorICAgICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9QU0tfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEKQorICAgICJNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEKQorICAgICJNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9SU0FfRU5BQkxFRCIsCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESEVfUlNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQpCisgICAgIk1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQiLAorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyAgICAiTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEIiwKKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQpCisgICAgIk1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQiLAorI2VuZGlmIC8qIE1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCisgICAgIk1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkiLAorI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisgICAgIk1CRURUTFNfR0VOUFJJTUUiLAorI2VuZGlmIC8qIE1CRURUTFNfR0VOUFJJTUUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgIk1CRURUTFNfRlNfSU8iLAorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMpCisgICAgIk1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMiLAorI2VuZGlmIC8qIE1CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWSkKKyAgICAiTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZIiwKKyNlbmRpZiAvKiBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYpCisgICAgIk1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYiLAorI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9GT1JDRV9TSEEyNTYgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorICAgICJNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCIsCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX05WX1NFRUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgICJNQkVEVExTX01FTU9SWV9ERUJVRyIsCisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfREVCVUcgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JBQ0tUUkFDRSkKKyAgICAiTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFIiwKKyNlbmRpZiAvKiBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUKQorICAgICJNQkVEVExTX1BLX1JTQV9BTFRfU1VQUE9SVCIsCisjZW5kaWYgLyogTUJFRFRMU19QS19SU0FfQUxUX1NVUFBPUlQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjE1KQorICAgICJNQkVEVExTX1BLQ1MxX1YxNSIsCisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQorICAgICJNQkVEVExTX1BLQ1MxX1YyMSIsCisjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX05PX0NSVCkKKyAgICAiTUJFRFRMU19SU0FfTk9fQ1JUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9OT19DUlQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorICAgICJNQkVEVExTX1NFTEZfVEVTVCIsCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X1NNQUxMRVIpCisgICAgIk1CRURUTFNfU0hBMjU2X1NNQUxMRVIiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X1NNQUxMRVIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMTF9BTEVSVF9NRVNTQUdFUykKKyAgICAiTUJFRFRMU19TU0xfQUxMX0FMRVJUX01FU1NBR0VTIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTExfQUxFUlRfTUVTU0FHRVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RFQlVHX0FMTCkKKyAgICAiTUJFRFRMU19TU0xfREVCVUdfQUxMIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9ERUJVR19BTEwgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgIk1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisgICAgIk1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YpCisgICAgIk1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCkKKyAgICAiTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HKQorICAgICJNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgIk1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04iLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTykKKyAgICAiTUJFRFRMU19TU0xfU1JWX1NVUFBPUlRfU1NMVjJfQ0xJRU5UX0hFTExPIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9SRVNQRUNUX0NMSUVOVF9QUkVGRVJFTkNFKQorICAgICJNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX1JFU1BFQ1RfQ0xJRU5UX1BSRUZFUkVOQ0UgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgIk1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1NTTDMpCisgICAgIk1CRURUTFNfU1NMX1BST1RPX1NTTDMiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpCisgICAgIk1CRURUTFNfU1NMX1BST1RPX1RMUzEiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1RMUzEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSkKKyAgICAiTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikKKyAgICAiTUJFRFRMU19TU0xfUFJPVE9fVExTMV8yIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgIk1CRURUTFNfU1NMX1BST1RPX0RUTFMiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgIk1CRURUTFNfU1NMX0FMUE4iLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgIk1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQorICAgICJNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UpCisgICAgIk1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorICAgICJNQkVEVExTX1NTTF9EVExTX0JBRE1BQ19MSU1JVCIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICAiTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTIiwKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTKQorICAgICJNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pCisgICAgIk1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04iLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQorICAgICJNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0FMVCkKKyAgICAiTUJFRFRMU19USFJFQURJTkdfQUxUIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RIUkVBRElOR19BTFQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQpCisgICAgIk1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQiLAorI2VuZGlmIC8qIE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUykKKyAgICAiTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTIiwKKyNlbmRpZiAvKiBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9BTExPV19FWFRFTlNJT05TX05PTl9WMykKKyAgICAiTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04pCisgICAgIk1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04iLAorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9BTExPV19VTlNVUFBPUlRFRF9DUklUSUNBTF9FWFRFTlNJT04gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisgICAgIk1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UiLAorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UpCisgICAgIk1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UiLAorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DSEVDS19FWFRFTkRFRF9LRVlfVVNBR0UgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpCisgICAgIk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQiLAorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWkxJQl9TVVBQT1JUKQorICAgICJNQkVEVExTX1pMSUJfU1VQUE9SVCIsCisjZW5kaWYgLyogTUJFRFRMU19aTElCX1NVUFBPUlQgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTTklfQykKKyAgICAiTUJFRFRMU19BRVNOSV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0FFU05JX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgIk1CRURUTFNfQUVTX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgICJNQkVEVExTX0FSQzRfQyIsCisjZW5kaWYgLyogTUJFRFRMU19BUkM0X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQVNOMV9QQVJTRV9DKQorICAgICJNQkVEVExTX0FTTjFfUEFSU0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19BU04xX1BBUlNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQVNOMV9XUklURV9DKQorICAgICJNQkVEVExTX0FTTjFfV1JJVEVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19BU04xX1dSSVRFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisgICAgIk1CRURUTFNfQkFTRTY0X0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQkFTRTY0X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisgICAgIk1CRURUTFNfQklHTlVNX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQkxPV0ZJU0hfQykKKyAgICAiTUJFRFRMU19CTE9XRklTSF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0JMT1dGSVNIX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyAgICAiTUJFRFRMU19DQU1FTExJQV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NBTUVMTElBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgIk1CRURUTFNfQ0NNX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0NNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykKKyAgICAiTUJFRFRMU19DRVJUU19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NFUlRTX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX0MpCisgICAgIk1CRURUTFNfQ0lQSEVSX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ01BQ19DKQorICAgICJNQkVEVExTX0NNQUNfQyIsCisjZW5kaWYgLyogTUJFRFRMU19DTUFDX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyAgICAiTUJFRFRMU19DVFJfRFJCR19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICAiTUJFRFRMU19ERUJVR19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0RFQlVHX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisgICAgIk1CRURUTFNfREVTX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgIk1CRURUTFNfREhNX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfREhNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNESF9DKQorICAgICJNQkVEVExTX0VDREhfQyIsCisjZW5kaWYgLyogTUJFRFRMU19FQ0RIX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAiTUJFRFRMU19FQ0RTQV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNKUEFLRV9DKQorICAgICJNQkVEVExTX0VDSlBBS0VfQyIsCisjZW5kaWYgLyogTUJFRFRMU19FQ0pQQUtFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgIk1CRURUTFNfRUNQX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKQorICAgICJNQkVEVExTX0VOVFJPUFlfQyIsCisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyAgICAiTUJFRFRMU19FUlJPUl9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgIk1CRURUTFNfR0NNX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRUdFX0MpCisgICAgIk1CRURUTFNfSEFWRUdFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfSEFWRUdFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpCisgICAgIk1CRURUTFNfSE1BQ19EUkJHX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfSE1BQ19EUkJHX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTURfQykKKyAgICAiTUJFRFRMU19NRF9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX01EX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgIk1CRURUTFNfTUQyX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfTUQyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgIk1CRURUTFNfTUQ0X0MiLAorI2VuZGlmIC8qIE1CRURUTFNfTUQ0X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCisgICAgIk1CRURUTFNfTUQ1X0MiLAorI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgICJNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQyIsCisjZW5kaWYgLyogTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfTkVUX0MpCisgICAgIk1CRURUTFNfTkVUX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfTkVUX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfT0lEX0MpCisgICAgIk1CRURUTFNfT0lEX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfT0lEX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEFETE9DS19DKQorICAgICJNQkVEVExTX1BBRExPQ0tfQyIsCisjZW5kaWYgLyogTUJFRFRMU19QQURMT0NLX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgIk1CRURUTFNfUEVNX1BBUlNFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisgICAgIk1CRURUTFNfUEVNX1dSSVRFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfQykKKyAgICAiTUJFRFRMU19QS19DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykKKyAgICAiTUJFRFRMU19QS19QQVJTRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1BBUlNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtfV1JJVEVfQykKKyAgICAiTUJFRFRMU19QS19XUklURV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLX1dSSVRFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzVfQykKKyAgICAiTUJFRFRMU19QS0NTNV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BLQ1M1X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzExX0MpCisgICAgIk1CRURUTFNfUEtDUzExX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzEyX0MpCisgICAgIk1CRURUTFNfUEtDUzEyX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUEtDUzEyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyAgICAiTUJFRFRMU19QTEFURk9STV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BMQVRGT1JNX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgIk1CRURUTFNfUklQRU1EMTYwX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUklQRU1EMTYwX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCisgICAgIk1CRURUTFNfUlNBX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgICJNQkVEVExTX1NIQTFfQyIsCisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgIk1CRURUTFNfU0hBMjU2X0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBMjU2X0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgIk1CRURUTFNfU0hBNTEyX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU0hBNTEyX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgIk1CRURUTFNfU1NMX0NBQ0hFX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0NBQ0hFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKQorICAgICJNQkVEVExTX1NTTF9DT09LSUVfQyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ09PS0lFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RJQ0tFVF9DKQorICAgICJNQkVEVExTX1NTTF9USUNLRVRfQyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfVElDS0VUX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKQorICAgICJNQkVEVExTX1NTTF9DTElfQyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0xJX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKQorICAgICJNQkVEVExTX1NTTF9TUlZfQyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU1JWX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RMU19DKQorICAgICJNQkVEVExTX1NTTF9UTFNfQyIsCisjZW5kaWYgLyogTUJFRFRMU19TU0xfVExTX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgIk1CRURUTFNfVEhSRUFESU5HX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfVEhSRUFESU5HX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgIk1CRURUTFNfVElNSU5HX0MiLAorI2VuZGlmIC8qIE1CRURUTFNfVElNSU5HX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9DKQorICAgICJNQkVEVExTX1ZFUlNJT05fQyIsCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9VU0VfQykKKyAgICAiTUJFRFRMU19YNTA5X1VTRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfVVNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAiTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykKKyAgICAiTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQykKKyAgICAiTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkVBVEVfQykKKyAgICAiTUJFRFRMU19YNTA5X0NSRUFURV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JFQVRFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQykKKyAgICAiTUJFRFRMU19YNTA5X0NSVF9XUklURV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQykKKyAgICAiTUJFRFRMU19YNTA5X0NTUl9XUklURV9DIiwKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWFRFQV9DKQorICAgICJNQkVEVExTX1hURUFfQyIsCisjZW5kaWYgLyogTUJFRFRMU19YVEVBX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMgKi8KKyAgICBOVUxMCit9OworCitpbnQgbWJlZHRsc192ZXJzaW9uX2NoZWNrX2ZlYXR1cmUoIGNvbnN0IGNoYXIgKmZlYXR1cmUgKQoreworICAgIGNvbnN0IGNoYXIgKippZHggPSBmZWF0dXJlczsKKworICAgIGlmKCAqaWR4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0yICk7CisKKyAgICBpZiggZmVhdHVyZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgd2hpbGUoICppZHggIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggIXN0cmNtcCggKmlkeCwgZmVhdHVyZSApICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICBpZHgrKzsKKyAgICB9CisgICAgcmV0dXJuKCAtMSApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQzOTBkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOS5jCkBAIC0wLDAgKzEsMTA2MyBAQAorLyoKKyAqICBYLjUwOSBjb21tb24gZnVuY3Rpb25zIGZvciBwYXJzaW5nIGFuZCB2ZXJpZmljYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIElUVS1UIFguNTA5IHN0YW5kYXJkIGRlZmluZXMgYSBjZXJ0aWZpY2F0ZSBmb3JtYXQgZm9yIFBLSS4KKyAqCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNTI4MC50eHQgKENlcnRpZmljYXRlcyBhbmQgQ1JMcykKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMjc5LnR4dCAoQWxnIElEcyBmb3IgQ1JMcykKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTg2LnR4dCAoQ1NScywgYWthIFBLQ1MjMTApCisgKgorICogIGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9zdHVkeWdyb3Vwcy9jb20xNy9sYW5ndWFnZXMvWC42ODAtMDIwNy5wZGYKKyAqICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvc3R1ZHlncm91cHMvY29tMTcvbGFuZ3VhZ2VzL1guNjkwLTAyMDcucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgc25wcmludGYKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSEFWRV9USU1FKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm1fdGltZS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiAhZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIENIRUNLKGNvZGUpIGlmKCAoIHJldCA9IGNvZGUgKSAhPSAwICl7IHJldHVybiggcmV0ICk7IH0KKyNkZWZpbmUgQ0hFQ0tfUkFOR0UobWluLCBtYXgsIHZhbCkgaWYoIHZhbCA8IG1pbiB8fCB2YWwgPiBtYXggKXsgcmV0dXJuKCByZXQgKTsgfQorCisvKgorICogIENlcnRpZmljYXRlU2VyaWFsTnVtYmVyICA6Oj0gIElOVEVHRVIKKyAqLworaW50IG1iZWR0bHNfeDUwOV9nZXRfc2VyaWFsKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqc2VyaWFsICkKK3sKKyAgICBpbnQgcmV0OworCisgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIGlmKCAqKnAgIT0gKCBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IE1CRURUTFNfQVNOMV9QUklNSVRJVkUgfCAyICkgJiYKKyAgICAgICAgKipwICE9ICAgTUJFRFRMU19BU04xX0lOVEVHRVIgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKTsKKworICAgIHNlcmlhbC0+dGFnID0gKigqcCkrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbGVuKCBwLCBlbmQsICZzZXJpYWwtPmxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NFUklBTCArIHJldCApOworCisgICAgc2VyaWFsLT5wID0gKnA7CisgICAgKnAgKz0gc2VyaWFsLT5sZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyogR2V0IGFuIGFsZ29yaXRobSBpZGVudGlmaWVyIHdpdGhvdXQgcGFyYW1ldGVycyAoZWcgZm9yIHNpZ25hdHVyZXMpCisgKgorICogIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAorICogICAgICAgcGFyYW1ldGVycyAgICAgICAgICAgICAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMICB9CisgKi8KK2ludCBtYmVkdGxzX3g1MDlfZ2V0X2FsZ19udWxsKCB1bnNpZ25lZCBjaGFyICoqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICphbGcgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2FsZ19udWxsKCBwLCBlbmQsIGFsZyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYXJzZSBhbiBhbGdvcml0aG0gaWRlbnRpZmllciB3aXRoIChvcHRpb25hbCkgcGFyYW1hdGVycworICovCitpbnQgbWJlZHRsc194NTA5X2dldF9hbGcoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICphbGcsIG1iZWR0bHNfeDUwOV9idWYgKnBhcmFtcyApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYWxnKCBwLCBlbmQsIGFsZywgcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCkKKy8qCisgKiBIYXNoQWxnb3JpdGhtIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyCisgKgorICogQWxnb3JpdGhtSWRlbnRpZmllciAgOjo9ICBTRVFVRU5DRSAgeworICogICAgICBhbGdvcml0aG0gICAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAqICAgICAgcGFyYW1ldGVycyAgICAgICAgICAgICAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMICB9CisgKgorICogRm9yIEhhc2hBbGdvcml0aG0sIHBhcmFtZXRlcnMgTVVTVCBiZSBOVUxMIG9yIGFic2VudC4KKyAqLworc3RhdGljIGludCB4NTA5X2dldF9oYXNoX2FsZyggY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqYWxnLCBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kOworICAgIG1iZWR0bHNfeDUwOV9idWYgbWRfb2lkOworICAgIHNpemVfdCBsZW47CisKKyAgICAvKiBNYWtlIHN1cmUgd2UgZ290IGEgU0VRVUVOQ0UgYW5kIHNldHVwIGJvdW5kcyAqLworICAgIGlmKCBhbGctPnRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgYWxnLT5wOworICAgIGVuZCA9IHAgKyBhbGctPmxlbjsKKworICAgIGlmKCBwID49IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgLyogUGFyc2UgbWRfb2lkICovCisgICAgbWRfb2lkLnRhZyA9ICpwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZtZF9vaWQubGVuLCBNQkVEVExTX0FTTjFfT0lEICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgcmV0ICk7CisKKyAgICBtZF9vaWQucCA9IHA7CisgICAgcCArPSBtZF9vaWQubGVuOworCisgICAgLyogR2V0IG1kX2FsZyBmcm9tIG1kX29pZCAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfb2lkX2dldF9tZF9hbGcoICZtZF9vaWQsIG1kX2FsZyApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgLyogTWFrZSBzdXJlIHBhcmFtcyBpcyBhYnNlbnQgb2YgTlVMTCAqLworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sIE1CRURUTFNfQVNOMV9OVUxMICkgKSAhPSAwIHx8IGxlbiAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgcmV0ICk7CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqICAgIFJTQVNTQS1QU1MtcGFyYW1zICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgICBoYXNoQWxnb3JpdGhtICAgICBbMF0gSGFzaEFsZ29yaXRobSBERUZBVUxUIHNoYTFJZGVudGlmaWVyLAorICogICAgICAgbWFza0dlbkFsZ29yaXRobSAgWzFdIE1hc2tHZW5BbGdvcml0aG0gREVGQVVMVCBtZ2YxU0hBMUlkZW50aWZpZXIsCisgKiAgICAgICBzYWx0TGVuZ3RoICAgICAgICBbMl0gSU5URUdFUiBERUZBVUxUIDIwLAorICogICAgICAgdHJhaWxlckZpZWxkICAgICAgWzNdIElOVEVHRVIgREVGQVVMVCAxICB9CisgKiAgICAtLSBOb3RlIHRoYXQgdGhlIHRhZ3MgaW4gdGhpcyBTZXF1ZW5jZSBhcmUgZXhwbGljaXQuCisgKgorICogUkZDIDQwNTUgKHdoaWNoIGRlZmluZXMgdXNlIG9mIFJTQVNTQS1QU1MgaW4gUEtJWCkgc3RhdGVzIHRoYXQgdGhlIHZhbHVlCisgKiBvZiB0cmFpbGVyRmllbGQgTVVTVCBiZSAxLCBhbmQgUEtDUyMxIHYyLjIgZG9lc24ndCBldmVuIGRlZmluZSBhbnkgb3RoZXIKKyAqIG9wdGlvbi4gRW5mb3JlIHRoaXMgYXQgcGFyc2luZyB0aW1lLgorICovCitpbnQgbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyggY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnLCBtYmVkdGxzX21kX3R5cGVfdCAqbWdmX21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNhbHRfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLCAqZW5kMjsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfeDUwOV9idWYgYWxnX2lkLCBhbGdfcGFyYW1zOworCisgICAgLyogRmlyc3Qgc2V0IGV2ZXJ5dGhpbmcgdG8gZGVmYXVsdHMgKi8KKyAgICAqbWRfYWxnID0gTUJFRFRMU19NRF9TSEExOworICAgICptZ2ZfbWQgPSBNQkVEVExTX01EX1NIQTE7CisgICAgKnNhbHRfbGVuID0gMjA7CisKKyAgICAvKiBNYWtlIHN1cmUgcGFyYW1zIGlzIGEgU0VRVUVOQ0UgYW5kIHNldHVwIGJvdW5kcyAqLworICAgIGlmKCBwYXJhbXMtPnRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CisKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgcGFyYW1zLT5wOworICAgIGVuZCA9IHAgKyBwYXJhbXMtPmxlbjsKKworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyoKKyAgICAgKiBIYXNoQWxnb3JpdGhtCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMCApICkgPT0gMCApCisgICAgeworICAgICAgICBlbmQyID0gcCArIGxlbjsKKworICAgICAgICAvKiBIYXNoQWxnb3JpdGhtIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyICh3aXRob3V0IHBhcmFtZXRlcnMpICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfYWxnX251bGwoICZwLCBlbmQyLCAmYWxnX2lkICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19vaWRfZ2V0X21kX2FsZyggJmFsZ19pZCwgbWRfYWxnICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgICAgIGlmKCBwICE9IGVuZDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyoKKyAgICAgKiBNYXNrR2VuQWxnb3JpdGhtCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMSApICkgPT0gMCApCisgICAgeworICAgICAgICBlbmQyID0gcCArIGxlbjsKKworICAgICAgICAvKiBNYXNrR2VuQWxnb3JpdGhtIDo6PSBBbGdvcml0aG1JZGVudGlmaWVyIChwYXJhbXMgPSBIYXNoQWxnb3JpdGhtKSAqLworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X2FsZyggJnAsIGVuZDIsICZhbGdfaWQsICZhbGdfcGFyYW1zICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgLyogT25seSBNRkcxIGlzIHJlY29nbmlzZWQgZm9yIG5vdyAqLworICAgICAgICBpZiggTUJFRFRMU19PSURfQ01QKCBNQkVEVExTX09JRF9NR0YxLCAmYWxnX2lkICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRSArCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX09JRF9OT1RfRk9VTkQgKTsKKworICAgICAgICAvKiBQYXJzZSBIYXNoQWxnb3JpdGhtICovCisgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfZ2V0X2hhc2hfYWxnKCAmYWxnX3BhcmFtcywgbWdmX21kICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgaWYoIHAgIT0gZW5kMiApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgaWYoIHAgPT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAvKgorICAgICAqIHNhbHRfbGVuCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMiApICkgPT0gMCApCisgICAgeworICAgICAgICBlbmQyID0gcCArIGxlbjsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggJnAsIGVuZDIsIHNhbHRfbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgICAgIGlmKCBwICE9IGVuZDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyByZXQgKTsKKworICAgIGlmKCBwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyoKKyAgICAgKiB0cmFpbGVyX2ZpZWxkIChpZiBwcmVzZW50LCBtdXN0IGJlIDEpCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgMyApICkgPT0gMCApCisgICAgeworICAgICAgICBpbnQgdHJhaWxlcl9maWVsZDsKKworICAgICAgICBlbmQyID0gcCArIGxlbjsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggJnAsIGVuZDIsICZ0cmFpbGVyX2ZpZWxkICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgICAgIGlmKCBwICE9IGVuZDIgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgICAgICBpZiggdHJhaWxlcl9maWVsZCAhPSAxICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyApOworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIHJldCApOworCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCAqLworCisvKgorICogIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZSA6Oj0gU0VRVUVOQ0UgeworICogICAgdHlwZSAgICAgQXR0cmlidXRlVHlwZSwKKyAqICAgIHZhbHVlICAgIEF0dHJpYnV0ZVZhbHVlIH0KKyAqCisgKiAgQXR0cmlidXRlVHlwZSA6Oj0gT0JKRUNUIElERU5USUZJRVIKKyAqCisgKiAgQXR0cmlidXRlVmFsdWUgOjo9IEFOWSBERUZJTkVEIEJZIEF0dHJpYnV0ZVR5cGUKKyAqLworc3RhdGljIGludCB4NTA5X2dldF9hdHRyX3R5cGVfdmFsdWUoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfbmFtZSAqY3VyICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc194NTA5X2J1ZiAqb2lkOworICAgIG1iZWR0bHNfeDUwOV9idWYgKnZhbDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgcmV0ICk7CisKKyAgICBpZiggKCBlbmQgLSAqcCApIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIG9pZCA9ICZjdXItPm9pZDsKKyAgICBvaWQtPnRhZyA9ICoqcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZvaWQtPmxlbiwgTUJFRFRMU19BU04xX09JRCApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyByZXQgKTsKKworICAgIG9pZC0+cCA9ICpwOworICAgICpwICs9IG9pZC0+bGVuOworCisgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICBpZiggKipwICE9IE1CRURUTFNfQVNOMV9CTVBfU1RSSU5HICYmICoqcCAhPSBNQkVEVExTX0FTTjFfVVRGOF9TVFJJTkcgICAgICAmJgorICAgICAgICAqKnAgIT0gTUJFRFRMU19BU04xX1Q2MV9TVFJJTkcgJiYgKipwICE9IE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HICYmCisgICAgICAgICoqcCAhPSBNQkVEVExTX0FTTjFfSUE1X1NUUklORyAmJiAqKnAgIT0gTUJFRFRMU19BU04xX1VOSVZFUlNBTF9TVFJJTkcgJiYKKyAgICAgICAgKipwICE9IE1CRURUTFNfQVNOMV9CSVRfU1RSSU5HICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworCisgICAgdmFsID0gJmN1ci0+dmFsOworICAgIHZhbC0+dGFnID0gKigqcCkrKzsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfbGVuKCBwLCBlbmQsICZ2YWwtPmxlbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyByZXQgKTsKKworICAgIHZhbC0+cCA9ICpwOworICAgICpwICs9IHZhbC0+bGVuOworCisgICAgY3VyLT5uZXh0ID0gTlVMTDsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogIE5hbWUgOjo9IENIT0lDRSB7IC0tIG9ubHkgb25lIHBvc3NpYmlsaXR5IGZvciBub3cgLS0KKyAqICAgICAgIHJkblNlcXVlbmNlICBSRE5TZXF1ZW5jZSB9CisgKgorICogIFJETlNlcXVlbmNlIDo6PSBTRVFVRU5DRSBPRiBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lCisgKgorICogIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgOjo9CisgKiAgICBTRVQgT0YgQXR0cmlidXRlVHlwZUFuZFZhbHVlCisgKgorICogIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZSA6Oj0gU0VRVUVOQ0UgeworICogICAgdHlwZSAgICAgQXR0cmlidXRlVHlwZSwKKyAqICAgIHZhbHVlICAgIEF0dHJpYnV0ZVZhbHVlIH0KKyAqCisgKiAgQXR0cmlidXRlVHlwZSA6Oj0gT0JKRUNUIElERU5USUZJRVIKKyAqCisgKiAgQXR0cmlidXRlVmFsdWUgOjo9IEFOWSBERUZJTkVEIEJZIEF0dHJpYnV0ZVR5cGUKKyAqCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgaXMgb3B0aW1pemVkIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgZWFjaCBSRE4gaGFzIG9ubHkKKyAqIG9uZSBlbGVtZW50LCB3aGljaCBpcyByZXByZXNlbnRlZCBhcyBhIGxpc3Qgb2YgQXR0cmlidXRlVHlwZUFuZFZhbHVlLgorICogRm9yIHRoZSBnZW5lcmFsIGNhc2Ugd2Ugc3RpbGwgdXNlIGEgZmxhdCBsaXN0LCBidXQgd2UgbWFyayBlbGVtZW50cyBvZiB0aGUKKyAqIHNhbWUgc2V0IHNvIHRoYXQgdGhleSBhcmUgIm1lcmdlZCIgdG9nZXRoZXIgaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IGNvbnN1bWUKKyAqIHRoaXMgbGlzdCwgZWcgbWJlZHRsc194NTA5X2RuX2dldHMoKS4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9nZXRfbmFtZSggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfbmFtZSAqY3VyICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBzZXRfbGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZF9zZXQ7CisKKyAgICAvKiBkb24ndCB1c2UgcmVjdXJzaW9uLCB3ZSdkIHJpc2sgc3RhY2sgb3ZlcmZsb3cgaWYgbm90IG9wdGltaXplZCAqLworICAgIHdoaWxlKCAxICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHBhcnNlIFNFVAorICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJnNldF9sZW4sCisgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFVCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgcmV0ICk7CisKKyAgICAgICAgZW5kX3NldCAgPSAqcCArIHNldF9sZW47CisKKyAgICAgICAgd2hpbGUoIDEgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9hdHRyX3R5cGVfdmFsdWUoIHAsIGVuZF9zZXQsIGN1ciApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAgICAgaWYoICpwID09IGVuZF9zZXQgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvKiBNYXJrIHRoaXMgaXRlbSBhcyBiZWluZyBubyB0aGUgb25seSBvbmUgaW4gYSBzZXQgKi8KKyAgICAgICAgICAgIGN1ci0+bmV4dF9tZXJnZWQgPSAxOworCisgICAgICAgICAgICBjdXItPm5leHQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfbmFtZSApICk7CisKKyAgICAgICAgICAgIGlmKCBjdXItPm5leHQgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCApOworCisgICAgICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBjb250aW51ZSB1bnRpbCBlbmQgb2YgU0VRVUVOQ0UgaXMgcmVhY2hlZAorICAgICAgICAgKi8KKyAgICAgICAgaWYoICpwID09IGVuZCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICBjdXItPm5leHQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfbmFtZSApICk7CisKKyAgICAgICAgaWYoIGN1ci0+bmV4dCA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICBjdXIgPSBjdXItPm5leHQ7CisgICAgfQorfQorCitzdGF0aWMgaW50IHg1MDlfcGFyc2VfaW50KHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBuLCBpbnQgKnJlcyl7CisgICAgKnJlcyA9IDA7CisgICAgZm9yKCA7IG4gPiAwOyAtLW4gKXsKKyAgICAgICAgaWYoICggKipwIDwgJzAnKSB8fCAoICoqcCA+ICc5JyApICkgcmV0dXJuIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFOworICAgICAgICAqcmVzICo9IDEwOworICAgICAgICAqcmVzICs9ICgqKCpwKSsrIC0gJzAnKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeDUwOV9kYXRlX2lzX3ZhbGlkKGNvbnN0IG1iZWR0bHNfeDUwOV90aW1lICp0aW1lKQoreworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURTsKKworICAgIENIRUNLX1JBTkdFKCAwLCA5OTk5LCB0aW1lLT55ZWFyICk7CisgICAgQ0hFQ0tfUkFOR0UoIDAsIDIzLCAgIHRpbWUtPmhvdXIgKTsKKyAgICBDSEVDS19SQU5HRSggMCwgNTksICAgdGltZS0+bWluICApOworICAgIENIRUNLX1JBTkdFKCAwLCA1OSwgICB0aW1lLT5zZWMgICk7CisKKyAgICBzd2l0Y2goIHRpbWUtPm1vbiApCisgICAgeworICAgICAgICBjYXNlIDE6IGNhc2UgMzogY2FzZSA1OiBjYXNlIDc6IGNhc2UgODogY2FzZSAxMDogY2FzZSAxMjoKKyAgICAgICAgICAgIENIRUNLX1JBTkdFKCAxLCAzMSwgdGltZS0+ZGF5ICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OiBjYXNlIDY6IGNhc2UgOTogY2FzZSAxMToKKyAgICAgICAgICAgIENIRUNLX1JBTkdFKCAxLCAzMCwgdGltZS0+ZGF5ICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgQ0hFQ0tfUkFOR0UoIDEsIDI4ICsgKHRpbWUtPnllYXIgJSA0ID09IDApLCB0aW1lLT5kYXkgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqICBUaW1lIDo6PSBDSE9JQ0UgeworICogICAgICAgdXRjVGltZSAgICAgICAgVVRDVGltZSwKKyAqICAgICAgIGdlbmVyYWxUaW1lICAgIEdlbmVyYWxpemVkVGltZSB9CisgKi8KK2ludCBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X3RpbWUgKnRpbWUgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZzsKKworICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgdGFnID0gKipwOworCisgICAgaWYoIHRhZyA9PSBNQkVEVExTX0FTTjFfVVRDX1RJTUUgKQorICAgIHsKKyAgICAgICAgKCpwKSsrOworICAgICAgICByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggcCwgZW5kLCAmbGVuICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyByZXQgKTsKKworICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT55ZWFyICkgKTsKKyAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+bW9uICkgKTsKKyAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+ZGF5ICkgKTsKKyAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+aG91ciApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPm1pbiApICk7CisgICAgICAgIGlmKCBsZW4gPiAxMCApCisgICAgICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT5zZWMgKSApOworICAgICAgICBpZiggbGVuID4gMTIgJiYgKigqcCkrKyAhPSAnWicgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSApOworCisgICAgICAgIHRpbWUtPnllYXIgKz0gIDEwMCAqICggdGltZS0+eWVhciA8IDUwICk7CisgICAgICAgIHRpbWUtPnllYXIgKz0gMTkwMDsKKworICAgICAgICBDSEVDSyggeDUwOV9kYXRlX2lzX3ZhbGlkKCB0aW1lICkgKTsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisgICAgZWxzZSBpZiggdGFnID09IE1CRURUTFNfQVNOMV9HRU5FUkFMSVpFRF9USU1FICkKKyAgICB7CisgICAgICAgICgqcCkrKzsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19hc24xX2dldF9sZW4oIHAsIGVuZCwgJmxlbiApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsgcmV0ICk7CisKKyAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCA0LCAmdGltZS0+eWVhciApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPm1vbiApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPmRheSApICk7CisgICAgICAgIENIRUNLKCB4NTA5X3BhcnNlX2ludCggcCwgMiwgJnRpbWUtPmhvdXIgKSApOworICAgICAgICBDSEVDSyggeDUwOV9wYXJzZV9pbnQoIHAsIDIsICZ0aW1lLT5taW4gKSApOworICAgICAgICBpZiggbGVuID4gMTIgKQorICAgICAgICAgICAgQ0hFQ0soIHg1MDlfcGFyc2VfaW50KCBwLCAyLCAmdGltZS0+c2VjICkgKTsKKyAgICAgICAgaWYoIGxlbiA+IDE0ICYmICooKnApKysgIT0gJ1onICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKTsKKworICAgICAgICBDSEVDSyggeDUwOV9kYXRlX2lzX3ZhbGlkKCB0aW1lICkgKTsKKworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDlfZ2V0X3NpZyggdW5zaWduZWQgY2hhciAqKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwgbWJlZHRsc194NTA5X2J1ZiAqc2lnICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgaW50IHRhZ190eXBlOworCisgICAgaWYoICggZW5kIC0gKnAgKSA8IDEgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEgKTsKKworICAgIHRhZ190eXBlID0gKipwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmdfbnVsbCggcCwgZW5kLCAmbGVuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFICsgcmV0ICk7CisKKyAgICBzaWctPnRhZyA9IHRhZ190eXBlOworICAgIHNpZy0+bGVuID0gbGVuOworICAgIHNpZy0+cCA9ICpwOworCisgICAgKnAgKz0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBHZXQgc2lnbmF0dXJlIGFsZ29yaXRobSBmcm9tIGFsZyBPSUQgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMKKyAqLworaW50IG1iZWR0bHNfeDUwOV9nZXRfc2lnX2FsZyggY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2lnX29pZCwgY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2lnX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCAqbWRfYWxnLCBtYmVkdGxzX3BrX3R5cGVfdCAqcGtfYWxnLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipzaWdfb3B0cyApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAqc2lnX29wdHMgIT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19vaWRfZ2V0X3NpZ19hbGcoIHNpZ19vaWQsIG1kX2FsZywgcGtfYWxnICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyArIHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUKQorICAgIGlmKCAqcGtfYWxnID09IE1CRURUTFNfUEtfUlNBU1NBX1BTUyApCisgICAgeworICAgICAgICBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9ucyAqcHNzX29wdHM7CisKKyAgICAgICAgcHNzX29wdHMgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9ucyApICk7CisgICAgICAgIGlmKCBwc3Nfb3B0cyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3JzYXNzYV9wc3NfcGFyYW1zKCBzaWdfcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzc19vcHRzLT5tZ2YxX2hhc2hfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNzX29wdHMtPmV4cGVjdGVkX3NhbHRfbGVuICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggcHNzX29wdHMgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICAqc2lnX29wdHMgPSAodm9pZCAqKSBwc3Nfb3B0czsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgKi8KKyAgICB7CisgICAgICAgIC8qIE1ha2Ugc3VyZSBwYXJhbWV0ZXJzIGFyZSBhYnNlbnQgb3IgTlVMTCAqLworICAgICAgICBpZiggKCBzaWdfcGFyYW1zLT50YWcgIT0gTUJFRFRMU19BU04xX05VTEwgJiYgc2lnX3BhcmFtcy0+dGFnICE9IDAgKSB8fAorICAgICAgICAgICAgICBzaWdfcGFyYW1zLT5sZW4gIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogWC41MDkgRXh0ZW5zaW9ucyAoTm8gcGFyc2luZyBvZiBleHRlbnNpb25zLCBwb2ludGVyIHNob3VsZAorICogYmUgZWl0aGVyIG1hbnVhbGx5IHVwZGF0ZWQgb3IgZXh0ZW5zaW9ucyBzaG91bGQgYmUgcGFyc2VkIQorICovCitpbnQgbWJlZHRsc194NTA5X2dldF9leHQoIHVuc2lnbmVkIGNoYXIgKipwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfYnVmICpleHQsIGludCB0YWcgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmKCAqcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGV4dC0+dGFnID0gKipwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmV4dC0+bGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCB0YWcgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgZXh0LT5wID0gKnA7CisgICAgZW5kID0gKnAgKyBleHQtPmxlbjsKKworICAgIC8qCisgICAgICogRXh0ZW5zaW9ucyAgOjo9ICBTRVFVRU5DRSBTSVpFICgxLi5NQVgpIE9GIEV4dGVuc2lvbgorICAgICAqCisgICAgICogRXh0ZW5zaW9uICA6Oj0gIFNFUVVFTkNFICB7CisgICAgICogICAgICBleHRuSUQgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAgKiAgICAgIGNyaXRpY2FsICAgIEJPT0xFQU4gREVGQVVMVCBGQUxTRSwKKyAgICAgKiAgICAgIGV4dG5WYWx1ZSAgIE9DVEVUIFNUUklORyAgfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICBpZiggZW5kICE9ICpwICsgbGVuICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogU3RvcmUgdGhlIG5hbWUgaW4gcHJpbnRhYmxlIGZvcm0gaW50byBidWY7IG5vIG1vcmUKKyAqIHRoYW4gc2l6ZSBjaGFyYWN0ZXJzIHdpbGwgYmUgd3JpdHRlbgorICovCitpbnQgbWJlZHRsc194NTA5X2RuX2dldHMoIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IG1iZWR0bHNfeDUwOV9uYW1lICpkbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgbjsKKyAgICB1bnNpZ25lZCBjaGFyIGMsIG1lcmdlID0gMDsKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfbmFtZSAqbmFtZTsKKyAgICBjb25zdCBjaGFyICpzaG9ydF9uYW1lID0gTlVMTDsKKyAgICBjaGFyIHNbTUJFRFRMU19YNTA5X01BWF9ETl9OQU1FX1NJWkVdLCAqcDsKKworICAgIG1lbXNldCggcywgMCwgc2l6ZW9mKCBzICkgKTsKKworICAgIG5hbWUgPSBkbjsKKyAgICBwID0gYnVmOworICAgIG4gPSBzaXplOworCisgICAgd2hpbGUoIG5hbWUgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggIW5hbWUtPm9pZC5wICkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZSA9IG5hbWUtPm5leHQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBuYW1lICE9IGRuICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgbWVyZ2UgPyAiICsgIiA6ICIsICIgKTsKKyAgICAgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19vaWRfZ2V0X2F0dHJfc2hvcnRfbmFtZSggJm5hbWUtPm9pZCwgJnNob3J0X25hbWUgKTsKKworICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzPSIsIHNob3J0X25hbWUgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlw/XD89IiApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgbmFtZS0+dmFsLmxlbjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGkgPj0gc2l6ZW9mKCBzICkgLSAxICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgYyA9IG5hbWUtPnZhbC5wW2ldOworICAgICAgICAgICAgaWYoIGMgPCAzMiB8fCBjID09IDEyNyB8fCAoIGMgPiAxMjggJiYgYyA8IDE2MCApICkKKyAgICAgICAgICAgICAgICAgc1tpXSA9ICc/JzsKKyAgICAgICAgICAgIGVsc2Ugc1tpXSA9IGM7CisgICAgICAgIH0KKyAgICAgICAgc1tpXSA9ICdcMCc7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlcyIsIHMgKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAgICAgbWVyZ2UgPSBuYW1lLT5uZXh0X21lcmdlZDsKKyAgICAgICAgbmFtZSA9IG5hbWUtPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSAoIHNpemUgLSBuICkgKTsKK30KKworLyoKKyAqIFN0b3JlIHRoZSBzZXJpYWwgaW4gcHJpbnRhYmxlIGZvcm0gaW50byBidWY7IG5vIG1vcmUKKyAqIHRoYW4gc2l6ZSBjaGFyYWN0ZXJzIHdpbGwgYmUgd3JpdHRlbgorICovCitpbnQgbWJlZHRsc194NTA5X3NlcmlhbF9nZXRzKCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpzZXJpYWwgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGksIG4sIG5yOworICAgIGNoYXIgKnA7CisKKyAgICBwID0gYnVmOworICAgIG4gPSBzaXplOworCisgICAgbnIgPSAoIHNlcmlhbC0+bGVuIDw9IDMyICkKKyAgICAgICAgPyBzZXJpYWwtPmxlbiAgOiAyODsKKworICAgIGZvciggaSA9IDA7IGkgPCBucjsgaSsrICkKKyAgICB7CisgICAgICAgIGlmKCBpID09IDAgJiYgbnIgPiAxICYmIHNlcmlhbC0+cFtpXSA9PSAweDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiUwMlglcyIsCisgICAgICAgICAgICAgICAgc2VyaWFsLT5wW2ldLCAoIGkgPCBuciAtIDEgKSA/ICI6IiA6ICIiICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgIH0KKworICAgIGlmKCBuciAhPSBzZXJpYWwtPmxlbiApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiLi4uLiIgKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSAoIHNpemUgLSBuICkgKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igd3JpdGluZyBzaWduYXR1cmUgYWxnb3JpdGhtcworICovCitpbnQgbWJlZHRsc194NTA5X3NpZ19hbGdfZ2V0cyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgbWJlZHRsc194NTA5X2J1ZiAqc2lnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa190eXBlX3QgcGtfYWxnLCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNpZ19vcHRzICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNoYXIgKnAgPSBidWY7CisgICAgc2l6ZV90IG4gPSBzaXplOworICAgIGNvbnN0IGNoYXIgKmRlc2MgPSBOVUxMOworCisgICAgcmV0ID0gbWJlZHRsc19vaWRfZ2V0X3NpZ19hbGdfZGVzYyggc2lnX29pZCwgJmRlc2MgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiPz8/IiAgKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlcyIsIGRlc2MgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCkKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfUlNBU1NBX1BTUyApCisgICAgeworICAgICAgICBjb25zdCBtYmVkdGxzX3BrX3JzYXNzYV9wc3Nfb3B0aW9ucyAqcHNzX29wdHM7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCAqbWdmX21kX2luZm87CisKKyAgICAgICAgcHNzX29wdHMgPSAoY29uc3QgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgKikgc2lnX29wdHM7CisKKyAgICAgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgICAgICBtZ2ZfbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIHBzc19vcHRzLT5tZ2YxX2hhc2hfaWQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiICglcywgTUdGMS0lcywgMHglMDJYKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZF9pbmZvID8gbWJlZHRsc19tZF9nZXRfbmFtZSggbWRfaW5mbyApIDogIj8/PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZ2ZfbWRfaW5mbyA/IG1iZWR0bHNfbWRfZ2V0X25hbWUoIG1nZl9tZF9pbmZvICkgOiAiPz8/IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzc19vcHRzLT5leHBlY3RlZF9zYWx0X2xlbiApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICB9CisjZWxzZQorICAgICgodm9pZCkgcGtfYWxnKTsKKyAgICAoKHZvaWQpIG1kX2FsZyk7CisgICAgKCh2b2lkKSBzaWdfb3B0cyk7CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCAqLworCisgICAgcmV0dXJuKCAoaW50KSggc2l6ZSAtIG4gKSApOworfQorCisvKgorICogSGVscGVyIGZvciB3cml0aW5nICJSU0Ega2V5IHNpemUiLCAiRUMga2V5IHNpemUiLCBldGMKKyAqLworaW50IG1iZWR0bHNfeDUwOV9rZXlfc2l6ZV9oZWxwZXIoIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBjb25zdCBjaGFyICpuYW1lICkKK3sKKyAgICBjaGFyICpwID0gYnVmOworICAgIHNpemVfdCBuID0gYnVmX3NpemU7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlcyBrZXkgc2l6ZSIsIG5hbWUgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVfVElNRV9EQVRFKQorLyoKKyAqIFNldCB0aGUgdGltZSBzdHJ1Y3R1cmUgdG8gdGhlIGN1cnJlbnQgdGltZS4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiAhZGVmaW5lZChFRkkzMikKK3N0YXRpYyBpbnQgeDUwOV9nZXRfY3VycmVudF90aW1lKCBtYmVkdGxzX3g1MDlfdGltZSAqbm93ICkKK3sKKyAgICBTWVNURU1USU1FIHN0OworCisgICAgR2V0U3lzdGVtVGltZSggJnN0ICk7CisKKyAgICBub3ctPnllYXIgPSBzdC53WWVhcjsKKyAgICBub3ctPm1vbiAgPSBzdC53TW9udGg7CisgICAgbm93LT5kYXkgID0gc3Qud0RheTsKKyAgICBub3ctPmhvdXIgPSBzdC53SG91cjsKKyAgICBub3ctPm1pbiAgPSBzdC53TWludXRlOworICAgIG5vdy0+c2VjICA9IHN0LndTZWNvbmQ7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IHg1MDlfZ2V0X2N1cnJlbnRfdGltZSggbWJlZHRsc194NTA5X3RpbWUgKm5vdyApCit7CisgICAgc3RydWN0IHRtICpsdDsKKyAgICBtYmVkdGxzX3RpbWVfdCB0dDsKKyAgICBpbnQgcmV0ID0gMDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF9sb2NrKCAmbWJlZHRsc190aHJlYWRpbmdfZ210aW1lX211dGV4ICkgIT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfVEhSRUFESU5HX01VVEVYX0VSUk9SICk7CisjZW5kaWYKKworICAgIHR0ID0gbWJlZHRsc190aW1lKCBOVUxMICk7CisgICAgbHQgPSBnbXRpbWUoICZ0dCApOworCisgICAgaWYoIGx0ID09IE5VTEwgKQorICAgICAgICByZXQgPSAtMTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBub3ctPnllYXIgPSBsdC0+dG1feWVhciArIDE5MDA7CisgICAgICAgIG5vdy0+bW9uICA9IGx0LT50bV9tb24gICsgMTsKKyAgICAgICAgbm93LT5kYXkgID0gbHQtPnRtX21kYXk7CisgICAgICAgIG5vdy0+aG91ciA9IGx0LT50bV9ob3VyOworICAgICAgICBub3ctPm1pbiAgPSBsdC0+dG1fbWluOworICAgICAgICBub3ctPnNlYyAgPSBsdC0+dG1fc2VjOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZtYmVkdGxzX3RocmVhZGluZ19nbXRpbWVfbXV0ZXggKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBfV0lOMzIgJiYgIUVGSVg2NCAmJiAhRUZJMzIgKi8KKworLyoKKyAqIFJldHVybiAwIGlmIGJlZm9yZSA8PSBhZnRlciwgMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB4NTA5X2NoZWNrX3RpbWUoIGNvbnN0IG1iZWR0bHNfeDUwOV90aW1lICpiZWZvcmUsIGNvbnN0IG1iZWR0bHNfeDUwOV90aW1lICphZnRlciApCit7CisgICAgaWYoIGJlZm9yZS0+eWVhciAgPiBhZnRlci0+eWVhciApCisgICAgICAgIHJldHVybiggMSApOworCisgICAgaWYoIGJlZm9yZS0+eWVhciA9PSBhZnRlci0+eWVhciAmJgorICAgICAgICBiZWZvcmUtPm1vbiAgID4gYWZ0ZXItPm1vbiApCisgICAgICAgIHJldHVybiggMSApOworCisgICAgaWYoIGJlZm9yZS0+eWVhciA9PSBhZnRlci0+eWVhciAmJgorICAgICAgICBiZWZvcmUtPm1vbiAgPT0gYWZ0ZXItPm1vbiAgJiYKKyAgICAgICAgYmVmb3JlLT5kYXkgICA+IGFmdGVyLT5kYXkgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIGlmKCBiZWZvcmUtPnllYXIgPT0gYWZ0ZXItPnllYXIgJiYKKyAgICAgICAgYmVmb3JlLT5tb24gID09IGFmdGVyLT5tb24gICYmCisgICAgICAgIGJlZm9yZS0+ZGF5ICA9PSBhZnRlci0+ZGF5ICAmJgorICAgICAgICBiZWZvcmUtPmhvdXIgID4gYWZ0ZXItPmhvdXIgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIGlmKCBiZWZvcmUtPnllYXIgPT0gYWZ0ZXItPnllYXIgJiYKKyAgICAgICAgYmVmb3JlLT5tb24gID09IGFmdGVyLT5tb24gICYmCisgICAgICAgIGJlZm9yZS0+ZGF5ICA9PSBhZnRlci0+ZGF5ICAmJgorICAgICAgICBiZWZvcmUtPmhvdXIgPT0gYWZ0ZXItPmhvdXIgJiYKKyAgICAgICAgYmVmb3JlLT5taW4gICA+IGFmdGVyLT5taW4gICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICBpZiggYmVmb3JlLT55ZWFyID09IGFmdGVyLT55ZWFyICYmCisgICAgICAgIGJlZm9yZS0+bW9uICA9PSBhZnRlci0+bW9uICAmJgorICAgICAgICBiZWZvcmUtPmRheSAgPT0gYWZ0ZXItPmRheSAgJiYKKyAgICAgICAgYmVmb3JlLT5ob3VyID09IGFmdGVyLT5ob3VyICYmCisgICAgICAgIGJlZm9yZS0+bWluICA9PSBhZnRlci0+bWluICAmJgorICAgICAgICBiZWZvcmUtPnNlYyAgID4gYWZ0ZXItPnNlYyAgKQorICAgICAgICByZXR1cm4oIDEgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggY29uc3QgbWJlZHRsc194NTA5X3RpbWUgKnRvICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfdGltZSBub3c7CisKKyAgICBpZiggeDUwOV9nZXRfY3VycmVudF90aW1lKCAmbm93ICkgIT0gMCApCisgICAgICAgIHJldHVybiggMSApOworCisgICAgcmV0dXJuKCB4NTA5X2NoZWNrX3RpbWUoICZub3csIHRvICkgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZSggY29uc3QgbWJlZHRsc194NTA5X3RpbWUgKmZyb20gKQoreworICAgIG1iZWR0bHNfeDUwOV90aW1lIG5vdzsKKworICAgIGlmKCB4NTA5X2dldF9jdXJyZW50X3RpbWUoICZub3cgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKKyAgICByZXR1cm4oIHg1MDlfY2hlY2tfdGltZSggZnJvbSwgJm5vdyApICk7Cit9CisKKyNlbHNlICAvKiBNQkVEVExTX0hBVkVfVElNRV9EQVRFICovCisKK2ludCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCBjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqdG8gKQoreworICAgICgodm9pZCkgdG8pOworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCBjb25zdCBtYmVkdGxzX3g1MDlfdGltZSAqZnJvbSApCit7CisgICAgKCh2b2lkKSBmcm9tKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVfVElNRV9EQVRFICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2NydC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc194NTA5X3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKSAmJiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIGludCByZXQ7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNlcnQ7CisgICAgbWJlZHRsc194NTA5X2NydCBjbGljZXJ0OworCisgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBYLjUwOSBjZXJ0aWZpY2F0ZSBsb2FkOiAiICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjbGljZXJ0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2xpY2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2NsaV9jcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2xpX2NydF9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuIiApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY2FjZXJ0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2FjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FfY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2FfY3J0X2xlbiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiAgWC41MDkgc2lnbmF0dXJlIHZlcmlmeTogIik7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSggJmNsaWNlcnQsICZjYWNlcnQsIE5VTEwsIE5VTEwsICZmbGFncywgTlVMTCwgTlVMTCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4iICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcblxuIik7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYWNlcnQgICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2xpY2VydCApOworCisgICAgcmV0dXJuKCAwICk7CisjZWxzZQorICAgICgodm9pZCkgdmVyYm9zZSk7CisgICAgcmV0dXJuKCAwICk7CisjZW5kaWYgLyogTUJFRFRMU19DRVJUU19DICYmIE1CRURUTFNfU0hBMV9DICovCit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NFTEZfVEVTVCAqLworCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X1VTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5X2NyZWF0ZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcmVhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIwZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcmVhdGUuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqICBYLjUwOSBiYXNlIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgY2VydGlmaWNhdGVzIC8gQ1NScworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JFQVRFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FzbjF3cml0ZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc2l6ZV90IG5hbWVfbGVuOworICAgIGNvbnN0IGNoYXIqb2lkOworfSB4NTA5X2F0dHJfZGVzY3JpcHRvcl90OworCisjZGVmaW5lIEFERF9TVFJMRU4oIHMgKSAgICAgcywgc2l6ZW9mKCBzICkgLSAxCisKK3N0YXRpYyBjb25zdCB4NTA5X2F0dHJfZGVzY3JpcHRvcl90IHg1MDlfYXR0cnNbXSA9Cit7CisgICAgeyBBRERfU1RSTEVOKCAiQ04iICksICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9DTiB9LAorICAgIHsgQUREX1NUUkxFTiggImNvbW1vbk5hbWUiICksICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfQ04gfSwKKyAgICB7IEFERF9TVFJMRU4oICJDIiApLCAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX0NPVU5UUlkgfSwKKyAgICB7IEFERF9TVFJMRU4oICJjb3VudHJ5TmFtZSIgKSwgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX0NPVU5UUlkgfSwKKyAgICB7IEFERF9TVFJMRU4oICJPIiApLCAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX09SR0FOSVpBVElPTiB9LAorICAgIHsgQUREX1NUUkxFTiggIm9yZ2FuaXphdGlvbk5hbWUiICksICAgICAgICAgTUJFRFRMU19PSURfQVRfT1JHQU5JWkFUSU9OIH0sCisgICAgeyBBRERfU1RSTEVOKCAiTCIgKSwgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9MT0NBTElUWSB9LAorICAgIHsgQUREX1NUUkxFTiggImxvY2FsaXR5IiApLCAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfTE9DQUxJVFkgfSwKKyAgICB7IEFERF9TVFJMRU4oICJSIiApLCAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMIH0sCisgICAgeyBBRERfU1RSTEVOKCAiT1UiICksICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9PUkdfVU5JVCB9LAorICAgIHsgQUREX1NUUkxFTiggIm9yZ2FuaXphdGlvbmFsVW5pdE5hbWUiICksICAgTUJFRFRMU19PSURfQVRfT1JHX1VOSVQgfSwKKyAgICB7IEFERF9TVFJMRU4oICJTVCIgKSwgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX1NUQVRFIH0sCisgICAgeyBBRERfU1RSTEVOKCAic3RhdGVPclByb3ZpbmNlTmFtZSIgKSwgICAgICBNQkVEVExTX09JRF9BVF9TVEFURSB9LAorICAgIHsgQUREX1NUUkxFTiggImVtYWlsQWRkcmVzcyIgKSwgICAgICAgICAgICAgTUJFRFRMU19PSURfUEtDUzlfRU1BSUwgfSwKKyAgICB7IEFERF9TVFJMRU4oICJzZXJpYWxOdW1iZXIiICksICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX1NFUklBTF9OVU1CRVIgfSwKKyAgICB7IEFERF9TVFJMRU4oICJwb3N0YWxBZGRyZXNzIiApLCAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9BRERSRVNTIH0sCisgICAgeyBBRERfU1RSTEVOKCAicG9zdGFsQ29kZSIgKSwgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9QT1NUQUxfQ09ERSB9LAorICAgIHsgQUREX1NUUkxFTiggImRuUXVhbGlmaWVyIiApLCAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfRE5fUVVBTElGSUVSIH0sCisgICAgeyBBRERfU1RSTEVOKCAidGl0bGUiICksICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9USVRMRSB9LAorICAgIHsgQUREX1NUUkxFTiggInN1ck5hbWUiICksICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfU1VSX05BTUUgfSwKKyAgICB7IEFERF9TVFJMRU4oICJTTiIgKSwgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX0FUX1NVUl9OQU1FIH0sCisgICAgeyBBRERfU1RSTEVOKCAiZ2l2ZW5OYW1lIiApLCAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9HSVZFTl9OQU1FIH0sCisgICAgeyBBRERfU1RSTEVOKCAiR04iICksICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9HSVZFTl9OQU1FIH0sCisgICAgeyBBRERfU1RSTEVOKCAiaW5pdGlhbHMiICksICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9BVF9JTklUSUFMUyB9LAorICAgIHsgQUREX1NUUkxFTiggInBzZXVkb255bSIgKSwgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfQVRfUFNFVURPTllNIH0sCisgICAgeyBBRERfU1RSTEVOKCAiZ2VuZXJhdGlvblF1YWxpZmllciIgKSwgICAgICBNQkVEVExTX09JRF9BVF9HRU5FUkFUSU9OX1FVQUxJRklFUiB9LAorICAgIHsgQUREX1NUUkxFTiggImRvbWFpbkNvbXBvbmVudCIgKSwgICAgICAgICAgTUJFRFRMU19PSURfRE9NQUlOX0NPTVBPTkVOVCB9LAorICAgIHsgQUREX1NUUkxFTiggIkRDIiApLCAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfRE9NQUlOX0NPTVBPTkVOVCB9LAorICAgIHsgTlVMTCwgMCwgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqeDUwOV9hdF9vaWRfZnJvbV9uYW1lKCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4gKQoreworICAgIGNvbnN0IHg1MDlfYXR0cl9kZXNjcmlwdG9yX3QgKmN1cjsKKworICAgIGZvciggY3VyID0geDUwOV9hdHRyczsgY3VyLT5uYW1lICE9IE5VTEw7IGN1cisrICkKKyAgICAgICAgaWYoIGN1ci0+bmFtZV9sZW4gPT0gbmFtZV9sZW4gJiYKKyAgICAgICAgICAgIHN0cm5jbXAoIGN1ci0+bmFtZSwgbmFtZSwgbmFtZV9sZW4gKSA9PSAwICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgcmV0dXJuKCBjdXItPm9pZCApOworfQorCitpbnQgbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcyggbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKipoZWFkLCBjb25zdCBjaGFyICpuYW1lICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBjb25zdCBjaGFyICpzID0gbmFtZSwgKmMgPSBzOworICAgIGNvbnN0IGNoYXIgKmVuZCA9IHMgKyBzdHJsZW4oIHMgKTsKKyAgICBjb25zdCBjaGFyICpvaWQgPSBOVUxMOworICAgIGludCBpbl90YWcgPSAxOworICAgIGNoYXIgZGF0YVtNQkVEVExTX1g1MDlfTUFYX0ROX05BTUVfU0laRV07CisgICAgY2hhciAqZCA9IGRhdGE7CisKKyAgICAvKiBDbGVhciBleGlzdGluZyBjaGFpbiBpZiBwcmVzZW50ICovCisgICAgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0KCBoZWFkICk7CisKKyAgICB3aGlsZSggYyA8PSBlbmQgKQorICAgIHsKKyAgICAgICAgaWYoIGluX3RhZyAmJiAqYyA9PSAnPScgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBvaWQgPSB4NTA5X2F0X29pZF9mcm9tX25hbWUoIHMsIGMgLSBzICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fT0lEOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcyA9IGMgKyAxOworICAgICAgICAgICAgaW5fdGFnID0gMDsKKyAgICAgICAgICAgIGQgPSBkYXRhOworICAgICAgICB9CisKKyAgICAgICAgaWYoICFpbl90YWcgJiYgKmMgPT0gJ1xcJyAmJiBjICE9IGVuZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGMrKzsKKworICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHZhbGlkIGVzY2FwZWQgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgaWYoIGMgPT0gZW5kIHx8ICpjICE9ICcsJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUU7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoICFpbl90YWcgJiYgKCAqYyA9PSAnLCcgfHwgYyA9PSBlbmQgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX2FzbjFfc3RvcmVfbmFtZWRfZGF0YSggaGVhZCwgb2lkLCBzdHJsZW4oIG9pZCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgLSBkYXRhICkgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSggYyA8IGVuZCAmJiAqKGMgKyAxKSA9PSAnICcgKQorICAgICAgICAgICAgICAgIGMrKzsKKworICAgICAgICAgICAgcyA9IGMgKyAxOworICAgICAgICAgICAgaW5fdGFnID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAhaW5fdGFnICYmIHMgIT0gYyArIDEgKQorICAgICAgICB7CisgICAgICAgICAgICAqKGQrKykgPSAqYzsKKworICAgICAgICAgICAgaWYoIGQgLSBkYXRhID09IE1CRURUTFNfWDUwOV9NQVhfRE5fTkFNRV9TSVpFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjKys7CisgICAgfQorCitleGl0OgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworLyogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHZhbHVlIGluIHRoZSBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSBzdHJ1Y3R1cmUgaXMgcmVzZXJ2ZWQKKyAqIHRvIHN0b3JlIHRoZSBjcml0aWNhbCBib29sZWFuIGZvciB1cworICovCitpbnQgbWJlZHRsc194NTA5X3NldF9leHRlbnNpb24oIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICoqaGVhZCwgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcml0aWNhbCwgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbiApCit7CisgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmN1cjsKKworICAgIGlmKCAoIGN1ciA9IG1iZWR0bHNfYXNuMV9zdG9yZV9uYW1lZF9kYXRhKCBoZWFkLCBvaWQsIG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCB2YWxfbGVuICsgMSApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisgICAgfQorCisgICAgY3VyLT52YWwucFswXSA9IGNyaXRpY2FsOworICAgIG1lbWNweSggY3VyLT52YWwucCArIDEsIHZhbCwgdmFsX2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiAgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSA6Oj0KKyAqICAgIFNFVCBPRiBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUKKyAqCisgKiAgQXR0cmlidXRlVHlwZUFuZFZhbHVlIDo6PSBTRVFVRU5DRSB7CisgKiAgICB0eXBlICAgICBBdHRyaWJ1dGVUeXBlLAorICogICAgdmFsdWUgICAgQXR0cmlidXRlVmFsdWUgfQorICoKKyAqICBBdHRyaWJ1dGVUeXBlIDo6PSBPQkpFQ1QgSURFTlRJRklFUgorICoKKyAqICBBdHRyaWJ1dGVWYWx1ZSA6Oj0gQU5ZIERFRklORUQgQlkgQXR0cmlidXRlVHlwZQorICovCitzdGF0aWMgaW50IHg1MDlfd3JpdGVfbmFtZSggdW5zaWduZWQgY2hhciAqKnAsIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgLy8gV3JpdGUgUHJpbnRhYmxlU3RyaW5nIGZvciBhbGwgZXhjZXB0IE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMCisgICAgLy8KKyAgICBpZiggTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfUEtDUzlfRU1BSUwgKSA9PSBvaWRfbGVuICYmCisgICAgICAgIG1lbWNtcCggb2lkLCBNQkVEVExTX09JRF9QS0NTOV9FTUFJTCwgb2lkX2xlbiApID09IDAgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2lhNV9zdHJpbmcoIHAsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbiApICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9wcmludGFibGVfc3RyaW5nKCBwLCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4gKSApOworICAgIH0KKworICAgIC8vIFdyaXRlIE9JRAorICAgIC8vCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX29pZCggcCwgc3RhcnQsIG9pZCwgb2lkX2xlbiApICk7CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFVCApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hc24xX25hbWVkX2RhdGEgKmZpcnN0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpjdXIgPSBmaXJzdDsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCB4NTA5X3dyaXRlX25hbWUoIHAsIHN0YXJ0LCAoY2hhciAqKSBjdXItPm9pZC5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPm9pZC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci0+dmFsLnAsIGN1ci0+dmFsLmxlbiApICk7CisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCBwLCBzdGFydCwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworaW50IG1iZWR0bHNfeDUwOV93cml0ZV9zaWcoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkLCBzaXplX3Qgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2l6ZSApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIGlmKCAqcCA8IHN0YXJ0IHx8IChzaXplX3QpKCAqcCAtIHN0YXJ0ICkgPCBzaXplICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgIGxlbiA9IHNpemU7CisgICAgKCpwKSAtPSBsZW47CisgICAgbWVtY3B5KCAqcCwgc2lnLCBsZW4gKTsKKworICAgIGlmKCAqcCAtIHN0YXJ0IDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMICk7CisKKyAgICAqLS0oKnApID0gMDsKKyAgICBsZW4gKz0gMTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfQklUX1NUUklORyApICk7CisKKyAgICAvLyBXcml0ZSBPSUQKKyAgICAvLworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9hbGdvcml0aG1faWRlbnRpZmllciggcCwgc3RhcnQsIG9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2xlbiwgMCApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitzdGF0aWMgaW50IHg1MDlfd3JpdGVfZXh0ZW5zaW9uKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqZXh0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3Jhd19idWZmZXIoIHAsIHN0YXJ0LCBleHQtPnZhbC5wICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQtPnZhbC5sZW4gLSAxICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgZXh0LT52YWwubGVuIC0gMSApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9PQ1RFVF9TVFJJTkcgKSApOworCisgICAgaWYoIGV4dC0+dmFsLnBbMF0gIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfYm9vbCggcCwgc3RhcnQsIDEgKSApOworICAgIH0KKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyKCBwLCBzdGFydCwgZXh0LT5vaWQucCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQtPm9pZC5sZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBleHQtPm9pZC5sZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfT0lEICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oIHAsIHN0YXJ0LCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCisvKgorICogRXh0ZW5zaW9uICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgZXh0bklEICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgKiAgICAgY3JpdGljYWwgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICogICAgIGV4dG5WYWx1ZSAgIE9DVEVUIFNUUklORworICogICAgICAgICAgICAgICAgIC0tIGNvbnRhaW5zIHRoZSBERVIgZW5jb2Rpbmcgb2YgYW4gQVNOLjEgdmFsdWUKKyAqICAgICAgICAgICAgICAgICAtLSBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24gdHlwZSBpZGVudGlmaWVkCisgKiAgICAgICAgICAgICAgICAgLS0gYnkgZXh0bklECisgKiAgICAgfQorICovCitpbnQgbWJlZHRsc194NTA5X3dyaXRlX2V4dGVuc2lvbnMoIHVuc2lnbmVkIGNoYXIgKipwLCB1bnNpZ25lZCBjaGFyICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpmaXJzdCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKyAgICBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YSAqY3VyX2V4dCA9IGZpcnN0OworCisgICAgd2hpbGUoIGN1cl9leHQgIT0gTlVMTCApCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCB4NTA5X3dyaXRlX2V4dGVuc2lvbiggcCwgc3RhcnQsIGN1cl9leHQgKSApOworICAgICAgICBjdXJfZXh0ID0gY3VyX2V4dC0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSRUFURV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5X2NybC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjJiNDczCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcmwuYwpAQCAtMCwwICsxLDcyMiBAQAorLyoKKyAqICBYLjUwOSBDZXJ0aWRpY2F0ZSBSZXZvY2F0aW9uIExpc3QgKENSTCkgcGFyc2luZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqICBUaGUgSVRVLVQgWC41MDkgc3RhbmRhcmQgZGVmaW5lcyBhIGNlcnRpZmljYXRlIGZvcm1hdCBmb3IgUEtJLgorICoKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MjgwLnR4dCAoQ2VydGlmaWNhdGVzIGFuZCBDUkxzKQorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMyNzkudHh0IChBbGcgSURzIGZvciBDUkxzKQorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5ODYudHh0IChDU1JzLCBha2EgUEtDUyMxMCkKKyAqCisgKiAgaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY4MC0wMjA3LnBkZgorICogIGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9zdHVkeWdyb3Vwcy9jb20xNy9sYW5ndWFnZXMvWC42OTAtMDIwNy5wZGYKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3JsLmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiAhZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCBkZWZpbmVkKEVGSVg2NCkgfHwgZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAgVmVyc2lvbiAgOjo9ICBJTlRFR0VSICB7ICB2MSgwKSwgdjIoMSkgIH0KKyAqLworc3RhdGljIGludCB4NTA5X2NybF9nZXRfdmVyc2lvbiggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp2ZXIgKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggcCwgZW5kLCB2ZXIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgeworICAgICAgICAgICAgKnZlciA9IDA7CisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFguNTA5IENSTCB2MiBleHRlbnNpb25zIChubyBleHRlbnNpb25zIHBhcnNlZCB5ZXQuKQorICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X2NybF9leHQoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKmV4dCApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIC8qIEdldCBleHBsaWNpdCB0YWcgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X2V4dCggcCwgZW5kLCBleHQsIDApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICB3aGlsZSggKnAgPCBlbmQgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgICAgICpwICs9IGxlbjsKKyAgICB9CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogWC41MDkgQ1JMIHYyIGVudHJ5IGV4dGVuc2lvbnMgKG5vIGV4dGVuc2lvbnMgcGFyc2VkIHlldC4pCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfY3JsX2VudHJ5X2V4dCggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2J1ZiAqZXh0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgLyogT1BUSU9OQUwgKi8KKyAgICBpZiggZW5kIDw9ICpwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBleHQtPnRhZyA9ICoqcDsKKyAgICBleHQtPnAgPSAqcDsKKworICAgIC8qCisgICAgICogR2V0IENSTC1lbnRyeSBleHRlbnNpb24gc2VxdWVuY2UgaGVhZGVyCisgICAgICogY3JsRW50cnlFeHRlbnNpb25zICAgICAgRXh0ZW5zaW9ucyBPUFRJT05BTCAgLS0gaWYgcHJlc2VudCwgTVVTVCBiZSB2MgorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZleHQtPmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICB7CisgICAgICAgICAgICBleHQtPnAgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworICAgIH0KKworICAgIGVuZCA9ICpwICsgZXh0LT5sZW47CisKKyAgICBpZiggZW5kICE9ICpwICsgZXh0LT5sZW4gKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgd2hpbGUoICpwIDwgZW5kICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgICAgICAqcCArPSBsZW47CisgICAgfQorCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFguNTA5IENSTCBFbnRyaWVzCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfZW50cmllcyggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybF9lbnRyeSAqZW50cnkgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGVudHJ5X2xlbjsKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICpjdXJfZW50cnkgPSBlbnRyeTsKKworICAgIGlmKCAqcCA9PSBlbmQgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZlbnRyeV9sZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgZW5kID0gKnAgKyBlbnRyeV9sZW47CisKKyAgICB3aGlsZSggKnAgPCBlbmQgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxlbjI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZDI7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbjIsCisgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1cl9lbnRyeS0+cmF3LnRhZyA9ICoqcDsKKyAgICAgICAgY3VyX2VudHJ5LT5yYXcucCA9ICpwOworICAgICAgICBjdXJfZW50cnktPnJhdy5sZW4gPSBsZW4yOworICAgICAgICBlbmQyID0gKnAgKyBsZW4yOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfc2VyaWFsKCBwLCBlbmQyLCAmY3VyX2VudHJ5LT5zZXJpYWwgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoIHAsIGVuZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJfZW50cnktPnJldm9jYXRpb25fZGF0ZSApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfZ2V0X2NybF9lbnRyeV9leHQoIHAsIGVuZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJfZW50cnktPmVudHJ5X2V4dCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGlmKCAqcCA8IGVuZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cl9lbnRyeS0+bmV4dCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcmxfZW50cnkgKSApOworCisgICAgICAgICAgICBpZiggY3VyX2VudHJ5LT5uZXh0ID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICAgICAgY3VyX2VudHJ5ID0gY3VyX2VudHJ5LT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYXJzZSBvbmUgIENSTHMgaW4gREVSIGZvcm1hdCBhbmQgYXBwZW5kIGl0IHRvIHRoZSBjaGFpbmVkIGxpc3QKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyKCBtYmVkdGxzX3g1MDlfY3JsICpjaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICplbmQ7CisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWdfcGFyYW1zMSwgc2lnX3BhcmFtczIsIHNpZ19vaWQyOworICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNybCA9IGNoYWluOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgdmFsaWQgaW5wdXQKKyAgICAgKi8KKyAgICBpZiggY3JsID09IE5VTEwgfHwgYnVmID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbXNldCggJnNpZ19wYXJhbXMxLCAwLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9idWYgKSApOworICAgIG1lbXNldCggJnNpZ19wYXJhbXMyLCAwLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9idWYgKSApOworICAgIG1lbXNldCggJnNpZ19vaWQyLCAwLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9idWYgKSApOworCisgICAgLyoKKyAgICAgKiBBZGQgbmV3IENSTCBvbiB0aGUgZW5kIG9mIHRoZSBjaGFpbiBpZiBuZWVkZWQuCisgICAgICovCisgICAgd2hpbGUoIGNybC0+dmVyc2lvbiAhPSAwICYmIGNybC0+bmV4dCAhPSBOVUxMICkKKyAgICAgICAgY3JsID0gY3JsLT5uZXh0OworCisgICAgaWYoIGNybC0+dmVyc2lvbiAhPSAwICYmIGNybC0+bmV4dCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGNybC0+bmV4dCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcmwgKSApOworCisgICAgICAgIGlmKCBjcmwtPm5leHQgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoIGNybC0+bmV4dCApOworICAgICAgICBjcmwgPSBjcmwtPm5leHQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb3B5IHJhdyBERVItZW5jb2RlZCBDUkwKKyAgICAgKi8KKyAgICBpZiggKCBwID0gbWJlZHRsc19jYWxsb2MoIDEsIGJ1ZmxlbiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgIG1lbWNweSggcCwgYnVmLCBidWZsZW4gKTsKKworICAgIGNybC0+cmF3LnAgPSBwOworICAgIGNybC0+cmF3LmxlbiA9IGJ1ZmxlbjsKKworICAgIGVuZCA9IHAgKyBidWZsZW47CisKKyAgICAvKgorICAgICAqIENlcnRpZmljYXRlTGlzdCAgOjo9ICBTRVFVRU5DRSAgeworICAgICAqICAgICAgdGJzQ2VydExpc3QgICAgICAgICAgVEJTQ2VydExpc3QsCisgICAgICogICAgICBzaWduYXR1cmVBbGdvcml0aG0gICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICAgICAgc2lnbmF0dXJlVmFsdWUgICAgICAgQklUIFNUUklORyAgfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCApOworICAgIH0KKworICAgIGlmKCBsZW4gIT0gKHNpemVfdCkgKCBlbmQgLSBwICkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKworICAgIC8qCisgICAgICogVEJTQ2VydExpc3QgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAgKi8KKyAgICBjcmwtPnRicy5wID0gcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGVuZCA9IHAgKyBsZW47CisgICAgY3JsLT50YnMubGVuID0gZW5kIC0gY3JsLT50YnMucDsKKworICAgIC8qCisgICAgICogVmVyc2lvbiAgOjo9ICBJTlRFR0VSICBPUFRJT05BTCB7ICB2MSgwKSwgdjIoMSkgIH0KKyAgICAgKiAgICAgICAgICAgICAgIC0tIGlmIHByZXNlbnQsIE1VU1QgYmUgdjIKKyAgICAgKgorICAgICAqIHNpZ25hdHVyZSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSB4NTA5X2NybF9nZXRfdmVyc2lvbiggJnAsIGVuZCwgJmNybC0+dmVyc2lvbiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfYWxnKCAmcCwgZW5kLCAmY3JsLT5zaWdfb2lkLCAmc2lnX3BhcmFtczEgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBjcmwtPnZlcnNpb24rKzsKKworICAgIGlmKCBjcmwtPnZlcnNpb24gPiAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1ZFUlNJT04gKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3NpZ19hbGcoICZjcmwtPnNpZ19vaWQsICZzaWdfcGFyYW1zMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3JsLT5zaWdfbWQsICZjcmwtPnNpZ19waywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3JsLT5zaWdfb3B0cyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpc3N1ZXIgICAgICAgICAgICAgICBOYW1lCisgICAgICovCisgICAgY3JsLT5pc3N1ZXJfcmF3LnAgPSBwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9uYW1lKCAmcCwgcCArIGxlbiwgJmNybC0+aXNzdWVyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3JsICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3JsLT5pc3N1ZXJfcmF3LmxlbiA9IHAgLSBjcmwtPmlzc3Vlcl9yYXcucDsKKworICAgIC8qCisgICAgICogdGhpc1VwZGF0ZSAgICAgICAgICBUaW1lCisgICAgICogbmV4dFVwZGF0ZSAgICAgICAgICBUaW1lIE9QVElPTkFMCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF90aW1lKCAmcCwgZW5kLCAmY3JsLT50aGlzX3VwZGF0ZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfdGltZSggJnAsIGVuZCwgJmNybC0+bmV4dF91cGRhdGUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSAoIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFICsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKSAmJgorICAgICAgICAgICAgcmV0ICE9ICggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKworICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIHJldm9rZWRDZXJ0aWZpY2F0ZXMgICAgU0VRVUVOQ0UgT0YgU0VRVUVOQ0UgICB7CisgICAgICogICAgICB1c2VyQ2VydGlmaWNhdGUgICAgICAgIENlcnRpZmljYXRlU2VyaWFsTnVtYmVyLAorICAgICAqICAgICAgcmV2b2NhdGlvbkRhdGUgICAgICAgICBUaW1lLAorICAgICAqICAgICAgY3JsRW50cnlFeHRlbnNpb25zICAgICBFeHRlbnNpb25zIE9QVElPTkFMCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGlmIHByZXNlbnQsIE1VU1QgYmUgdjIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIH0gT1BUSU9OQUwKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSB4NTA5X2dldF9lbnRyaWVzKCAmcCwgZW5kLCAmY3JsLT5lbnRyeSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qCisgICAgICogY3JsRXh0ZW5zaW9ucyAgICAgICAgICBFWFBMSUNJVCBFeHRlbnNpb25zIE9QVElPTkFMCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBpZiBwcmVzZW50LCBNVVNUIGJlIHYyCisgICAgICovCisgICAgaWYoIGNybC0+dmVyc2lvbiA9PSAyICkKKyAgICB7CisgICAgICAgIHJldCA9IHg1MDlfZ2V0X2NybF9leHQoICZwLCBlbmQsICZjcmwtPmNybF9leHQgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoIGNybCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorCisgICAgZW5kID0gY3JsLT5yYXcucCArIGNybC0+cmF3LmxlbjsKKworICAgIC8qCisgICAgICogIHNpZ25hdHVyZUFsZ29yaXRobSAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAgICogIHNpZ25hdHVyZVZhbHVlICAgICAgIEJJVCBTVFJJTkcKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X2FsZyggJnAsIGVuZCwgJnNpZ19vaWQyLCAmc2lnX3BhcmFtczIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggY3JsLT5zaWdfb2lkLmxlbiAhPSBzaWdfb2lkMi5sZW4gfHwKKyAgICAgICAgbWVtY21wKCBjcmwtPnNpZ19vaWQucCwgc2lnX29pZDIucCwgY3JsLT5zaWdfb2lkLmxlbiApICE9IDAgfHwKKyAgICAgICAgc2lnX3BhcmFtczEubGVuICE9IHNpZ19wYXJhbXMyLmxlbiB8fAorICAgICAgICAoIHNpZ19wYXJhbXMxLmxlbiAhPSAwICYmCisgICAgICAgICAgbWVtY21wKCBzaWdfcGFyYW1zMS5wLCBzaWdfcGFyYW1zMi5wLCBzaWdfcGFyYW1zMS5sZW4gKSAhPSAwICkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X1NJR19NSVNNQVRDSCApOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfc2lnKCAmcCwgZW5kLCAmY3JsLT5zaWcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggcCAhPSBlbmQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCBjcmwgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUGFyc2Ugb25lIG9yIG1vcmUgQ1JMcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGNoYWluZWQgbGlzdAorICovCitpbnQgbWJlZHRsc194NTA5X2NybF9wYXJzZSggbWJlZHRsc194NTA5X2NybCAqY2hhaW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIGludCByZXQ7CisgICAgc2l6ZV90IHVzZV9sZW47CisgICAgbWJlZHRsc19wZW1fY29udGV4dCBwZW07CisgICAgaW50IGlzX3BlbSA9IDA7CisKKyAgICBpZiggY2hhaW4gPT0gTlVMTCB8fCBidWYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgZG8KKyAgICB7CisgICAgICAgIG1iZWR0bHNfcGVtX2luaXQoICZwZW0gKTsKKworICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCkgb24gbm9uLW51bGwtdGVybWluYXRlZAorICAgICAgICAvLyBzdHJpbmcKKyAgICAgICAgaWYoIGJ1ZmxlbiA9PSAwIHx8IGJ1ZltidWZsZW4gLSAxXSAhPSAnXDAnICkKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCAmcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUVORCBYNTA5IENSTC0tLS0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBOVUxMLCAwLCAmdXNlX2xlbiApOworCisgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXYXMgUEVNIGVuY29kZWQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaXNfcGVtID0gMTsKKworICAgICAgICAgICAgYnVmbGVuIC09IHVzZV9sZW47CisgICAgICAgICAgICBidWYgKz0gdXNlX2xlbjsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZV9kZXIoIGNoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW0uYnVmLCBwZW0uYnVmbGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3BlbV9mcmVlKCAmcGVtICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorICAgIC8qIEluIHRoZSBQRU0gY2FzZSwgYnVmbGVuIGlzIDEgYXQgdGhlIGVuZCwgZm9yIHRoZSB0ZXJtaW5hdGVkIE5VTEwgYnl0ZS4KKyAgICAgKiBBbmQgYSB2YWxpZCBDUkwgY2Fubm90IGJlIGxlc3MgdGhhbiAxIGJ5dGUgYW55d2F5LiAqLworICAgIHdoaWxlKCBpc19wZW0gJiYgYnVmbGVuID4gMSApOworCisgICAgaWYoIGlzX3BlbSApCisgICAgICAgIHJldHVybiggMCApOworICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9QQVJTRV9DICovCisgICAgICAgIHJldHVybiggbWJlZHRsc194NTA5X2NybF9wYXJzZV9kZXIoIGNoYWluLCBidWYsIGJ1ZmxlbiApICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisvKgorICogTG9hZCBvbmUgb3IgbW9yZSBDUkxzIGFuZCBhZGQgdGhlbSB0byB0aGUgY2hhaW5lZCBsaXN0CisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoIG1iZWR0bHNfeDUwOV9jcmwgKmNoYWluLCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfbG9hZF9maWxlKCBwYXRoLCAmYnVmLCAmbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlKCBjaGFpbiwgYnVmLCBuICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGJ1ZiwgbiApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworLyoKKyAqIFJldHVybiBhbiBpbmZvcm1hdGlvbmFsIHN0cmluZyBhYm91dCB0aGUgY2VydGlmaWNhdGUuCisgKi8KKyNkZWZpbmUgQkVGT1JFX0NPTE9OICAgIDE0CisjZGVmaW5lIEJDICAgICAgICAgICAgICAiMTQiCisvKgorICogUmV0dXJuIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZSBDUkwuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3JsX2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG47CisgICAgY2hhciAqcDsKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICplbnRyeTsKKworICAgIHAgPSBidWY7CisgICAgbiA9IHNpemU7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXNDUkwgdmVyc2lvbiAgIDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgY3JsLT52ZXJzaW9uICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc2lzc3VlciBuYW1lICAgOiAiLCBwcmVmaXggKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfZG5fZ2V0cyggcCwgbiwgJmNybC0+aXNzdWVyICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc3RoaXMgdXBkYXRlICAgOiAiIFwKKyAgICAgICAgICAgICAgICAgICAiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQiLCBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY3JsLT50aGlzX3VwZGF0ZS55ZWFyLCBjcmwtPnRoaXNfdXBkYXRlLm1vbiwKKyAgICAgICAgICAgICAgICAgICBjcmwtPnRoaXNfdXBkYXRlLmRheSwgIGNybC0+dGhpc191cGRhdGUuaG91ciwKKyAgICAgICAgICAgICAgICAgICBjcmwtPnRoaXNfdXBkYXRlLm1pbiwgIGNybC0+dGhpc191cGRhdGUuc2VjICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc25leHQgdXBkYXRlICAgOiAiIFwKKyAgICAgICAgICAgICAgICAgICAiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQiLCBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY3JsLT5uZXh0X3VwZGF0ZS55ZWFyLCBjcmwtPm5leHRfdXBkYXRlLm1vbiwKKyAgICAgICAgICAgICAgICAgICBjcmwtPm5leHRfdXBkYXRlLmRheSwgIGNybC0+bmV4dF91cGRhdGUuaG91ciwKKyAgICAgICAgICAgICAgICAgICBjcmwtPm5leHRfdXBkYXRlLm1pbiwgIGNybC0+bmV4dF91cGRhdGUuc2VjICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICBlbnRyeSA9ICZjcmwtPmVudHJ5OworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNSZXZva2VkIGNlcnRpZmljYXRlczoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgd2hpbGUoIGVudHJ5ICE9IE5VTEwgJiYgZW50cnktPnJhdy5sZW4gIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc3NlcmlhbCBudW1iZXI6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9zZXJpYWxfZ2V0cyggcCwgbiwgJmVudHJ5LT5zZXJpYWwgKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiByZXZvY2F0aW9uIGRhdGU6ICIgXAorICAgICAgICAgICAgICAgICAgICIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCIsCisgICAgICAgICAgICAgICAgICAgZW50cnktPnJldm9jYXRpb25fZGF0ZS55ZWFyLCBlbnRyeS0+cmV2b2NhdGlvbl9kYXRlLm1vbiwKKyAgICAgICAgICAgICAgICAgICBlbnRyeS0+cmV2b2NhdGlvbl9kYXRlLmRheSwgIGVudHJ5LT5yZXZvY2F0aW9uX2RhdGUuaG91ciwKKyAgICAgICAgICAgICAgICAgICBlbnRyeS0+cmV2b2NhdGlvbl9kYXRlLm1pbiwgIGVudHJ5LT5yZXZvY2F0aW9uX2RhdGUuc2VjICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNzaWduZWQgdXNpbmcgIDogIiwgcHJlZml4ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfc2lnX2FsZ19nZXRzKCBwLCBuLCAmY3JsLT5zaWdfb2lkLCBjcmwtPnNpZ19waywgY3JsLT5zaWdfbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNybC0+c2lnX29wdHMgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiIgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldHVybiggKGludCkgKCBzaXplIC0gbiApICk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgQ1JMIGNoYWluCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NybF9pbml0KCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKQoreworICAgIG1lbXNldCggY3JsLCAwLCBzaXplb2YobWJlZHRsc194NTA5X2NybCkgKTsKK30KKworLyoKKyAqIFVuYWxsb2NhdGUgYWxsIENSTCBkYXRhCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NybF9mcmVlKCBtYmVkdGxzX3g1MDlfY3JsICpjcmwgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNybF9jdXIgPSBjcmw7CisgICAgbWJlZHRsc194NTA5X2NybCAqY3JsX3BydjsKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSAqbmFtZV9jdXI7CisgICAgbWJlZHRsc194NTA5X25hbWUgKm5hbWVfcHJ2OworICAgIG1iZWR0bHNfeDUwOV9jcmxfZW50cnkgKmVudHJ5X2N1cjsKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICplbnRyeV9wcnY7CisKKyAgICBpZiggY3JsID09IE5VTEwgKQorICAgICAgICByZXR1cm47CisKKyAgICBkbworICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQpCisgICAgICAgIG1iZWR0bHNfZnJlZSggY3JsX2N1ci0+c2lnX29wdHMgKTsKKyNlbmRpZgorCisgICAgICAgIG5hbWVfY3VyID0gY3JsX2N1ci0+aXNzdWVyLm5leHQ7CisgICAgICAgIHdoaWxlKCBuYW1lX2N1ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZV9wcnYgPSBuYW1lX2N1cjsKKyAgICAgICAgICAgIG5hbWVfY3VyID0gbmFtZV9jdXItPm5leHQ7CisgICAgICAgICAgICBtYmVkdGxzX3plcm9pemUoIG5hbWVfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9uYW1lICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggbmFtZV9wcnYgKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5X2N1ciA9IGNybF9jdXItPmVudHJ5Lm5leHQ7CisgICAgICAgIHdoaWxlKCBlbnRyeV9jdXIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVudHJ5X3BydiA9IGVudHJ5X2N1cjsKKyAgICAgICAgICAgIGVudHJ5X2N1ciA9IGVudHJ5X2N1ci0+bmV4dDsKKyAgICAgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggZW50cnlfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcmxfZW50cnkgKSApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBlbnRyeV9wcnYgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBjcmxfY3VyLT5yYXcucCAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc196ZXJvaXplKCBjcmxfY3VyLT5yYXcucCwgY3JsX2N1ci0+cmF3LmxlbiApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjcmxfY3VyLT5yYXcucCApOworICAgICAgICB9CisKKyAgICAgICAgY3JsX2N1ciA9IGNybF9jdXItPm5leHQ7CisgICAgfQorICAgIHdoaWxlKCBjcmxfY3VyICE9IE5VTEwgKTsKKworICAgIGNybF9jdXIgPSBjcmw7CisgICAgZG8KKyAgICB7CisgICAgICAgIGNybF9wcnYgPSBjcmxfY3VyOworICAgICAgICBjcmxfY3VyID0gY3JsX2N1ci0+bmV4dDsKKworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGNybF9wcnYsIHNpemVvZiggbWJlZHRsc194NTA5X2NybCApICk7CisgICAgICAgIGlmKCBjcmxfcHJ2ICE9IGNybCApCisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIGNybF9wcnYgKTsKKyAgICB9CisgICAgd2hpbGUoIGNybF9jdXIgIT0gTlVMTCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5X2NydC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUxNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jcnQuYwpAQCAtMCwwICsxLDIzOTQgQEAKKy8qCisgKiAgWC41MDkgY2VydGlmaWNhdGUgcGFyc2luZyBhbmQgdmVyaWZpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisvKgorICogIFRoZSBJVFUtVCBYLjUwOSBzdGFuZGFyZCBkZWZpbmVzIGEgY2VydGlmaWNhdGUgZm9ybWF0IGZvciBQS0kuCisgKgorICogIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzUyODAudHh0IChDZXJ0aWZpY2F0ZXMgYW5kIENSTHMpCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzI3OS50eHQgKEFsZyBJRHMgZm9yIENSTHMpCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk4Ni50eHQgKENTUnMsIGFrYSBQS0NTIzEwKQorICoKKyAqICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvc3R1ZHlncm91cHMvY29tMTcvbGFuZ3VhZ2VzL1guNjgwLTAyMDcucGRmCisgKiAgaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL3N0dWR5Z3JvdXBzL2NvbTE3L2xhbmd1YWdlcy9YLjY5MC0wMjA3LnBkZgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcnQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX2ZyZWUgICAgICAgZnJlZQorI2RlZmluZSBtYmVkdGxzX2NhbGxvYyAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL3RocmVhZGluZy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoRUZJWDY0KSAmJiAhZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgIWRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKEVGSVg2NCkgfHwgZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmIC8qICFfV0lOMzIgfHwgRUZJWDY0IHx8IEVGSTMyICovCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKworLyoKKyAqIERlZmF1bHQgcHJvZmlsZQorICovCitjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgbWJlZHRsc194NTA5X2NydF9wcm9maWxlX2RlZmF1bHQgPQoreworICAgIC8qIEhhc2hlcyBmcm9tIFNIQS0xIGFuZCBhYm92ZSAqLworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfUklQRU1EMTYwICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTIyNCApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEyNTYgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMzg0ICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTUxMiApLAorICAgIDB4RkZGRkZGRiwgLyogQW55IFBLIGFsZyAgICAqLworICAgIDB4RkZGRkZGRiwgLyogQW55IGN1cnZlICAgICAqLworICAgIDIwNDgsCit9OworCisvKgorICogTmV4dC1kZWZhdWx0IHByb2ZpbGUKKyAqLworY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlIG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9uZXh0ID0KK3sKKyAgICAvKiBIYXNoZXMgZnJvbSBTSEEtMjU2IGFuZCBhYm92ZSAqLworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTI1NiApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEzODQgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBNTEyICksCisgICAgMHhGRkZGRkZGLCAvKiBBbnkgUEsgYWxnICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIC8qIEN1cnZlcyBhdCBvciBhYm92ZSAxMjgtYml0IHNlY3VyaXR5IGxldmVsICovCisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX0JQMjU2UjEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX0JQMzg0UjEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX0JQNTEyUjEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMSApLAorI2Vsc2UKKyAgICAwLAorI2VuZGlmCisgICAgMjA0OCwKK307CisKKy8qCisgKiBOU0EgU3VpdGUgQiBQcm9maWxlCisgKi8KK2NvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGVfc3VpdGViID0KK3sKKyAgICAvKiBPbmx5IFNIQS0yNTYgYW5kIDM4NCAqLworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTI1NiApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEzODQgKSwKKyAgICAvKiBPbmx5IEVDRFNBICovCisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfUEtfRUNEU0EgKSwKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgLyogT25seSBOSVNUIFAtMjU2IGFuZCBQLTM4NCAqLworICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMSApLAorI2Vsc2UKKyAgICAwLAorI2VuZGlmCisgICAgMCwKK307CisKKy8qCisgKiBDaGVjayBtZF9hbGcgYWdhaW5zdCBwcm9maWxlCisgKiBSZXR1cm4gMCBpZiBtZF9hbGcgYWNjZXB0YWJsZSBmb3IgdGhpcyBwcm9maWxlLCAtMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB4NTA5X3Byb2ZpbGVfY2hlY2tfbWRfYWxnKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyApCit7CisgICAgaWYoICggcHJvZmlsZS0+YWxsb3dlZF9tZHMgJiBNQkVEVExTX1g1MDlfSURfRkxBRyggbWRfYWxnICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKy8qCisgKiBDaGVjayBwa19hbGcgYWdhaW5zdCBwcm9maWxlCisgKiBSZXR1cm4gMCBpZiBwa19hbGcgYWNjZXB0YWJsZSBmb3IgdGhpcyBwcm9maWxlLCAtMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB4NTA5X3Byb2ZpbGVfY2hlY2tfcGtfYWxnKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZyApCit7CisgICAgaWYoICggcHJvZmlsZS0+YWxsb3dlZF9wa3MgJiBNQkVEVExTX1g1MDlfSURfRkxBRyggcGtfYWxnICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKy8qCisgKiBDaGVjayBrZXkgYWdhaW5zdCBwcm9maWxlCisgKiBSZXR1cm4gMCBpZiBwa19hbGcgYWNjZXB0YWJsZSBmb3IgdGhpcyBwcm9maWxlLCAtMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB4NTA5X3Byb2ZpbGVfY2hlY2tfa2V5KCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGtfdHlwZV90IHBrX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc19wa19jb250ZXh0ICpwayApCit7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCBwa19hbGcgPT0gTUJFRFRMU19QS19SU0EgfHwgcGtfYWxnID09IE1CRURUTFNfUEtfUlNBU1NBX1BTUyApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfYml0bGVuKCBwayApID49IHByb2ZpbGUtPnJzYV9taW5fYml0bGVuICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworCisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfRUNEU0EgfHwKKyAgICAgICAgcGtfYWxnID09IE1CRURUTFNfUEtfRUNLRVkgfHwKKyAgICAgICAgcGtfYWxnID09IE1CRURUTFNfUEtfRUNLRVlfREggKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgZ2lkID0gbWJlZHRsc19wa19lYyggKnBrICktPmdycC5pZDsKKworICAgICAgICBpZiggKCBwcm9maWxlLT5hbGxvd2VkX2N1cnZlcyAmIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBnaWQgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuKCAtMSApOworfQorCisvKgorICogIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAgdjEoMCksIHYyKDEpLCB2MygyKSAgfQorICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X3ZlcnNpb24oIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdmVyICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgfCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAwICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgIHsKKyAgICAgICAgICAgICp2ZXIgPSAwOworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGVuZCA9ICpwICsgbGVuOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoIHAsIGVuZCwgdmVyICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTiArIHJldCApOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqICBWYWxpZGl0eSA6Oj0gU0VRVUVOQ0UgeworICogICAgICAgbm90QmVmb3JlICAgICAgVGltZSwKKyAqICAgICAgIG5vdEFmdGVyICAgICAgIFRpbWUgfQorICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X2RhdGVzKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV90aW1lICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X3RpbWUgKnRvICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArIHJldCApOworCisgICAgZW5kID0gKnAgKyBsZW47CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoIHAsIGVuZCwgZnJvbSApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoIHAsIGVuZCwgdG8gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFguNTA5IHYyL3YzIHVuaXF1ZSBpZGVudGlmaWVyIChub3QgcGFyc2VkKQorICovCitzdGF0aWMgaW50IHg1MDlfZ2V0X3VpZCggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9idWYgKnVpZCwgaW50IG4gKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKnAgPT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICB1aWQtPnRhZyA9ICoqcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZ1aWQtPmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgbiApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICB1aWQtPnAgPSAqcDsKKyAgICAqcCArPSB1aWQtPmxlbjsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHg1MDlfZ2V0X2Jhc2ljX2NvbnN0cmFpbnRzKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2FfaXN0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICptYXhfcGF0aGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworCisgICAgLyoKKyAgICAgKiBCYXNpY0NvbnN0cmFpbnRzIDo6PSBTRVFVRU5DRSB7CisgICAgICogICAgICBjQSAgICAgICAgICAgICAgICAgICAgICBCT09MRUFOIERFRkFVTFQgRkFMU0UsCisgICAgICogICAgICBwYXRoTGVuQ29uc3RyYWludCAgICAgICBJTlRFR0VSICgwLi5NQVgpIE9QVElPTkFMIH0KKyAgICAgKi8KKyAgICAqY2FfaXN0cnVlID0gMDsgLyogREVGQVVMVCBGQUxTRSAqLworICAgICptYXhfcGF0aGxlbiA9IDA7IC8qIGVuZGxlc3MgKi8KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICBpZiggKnAgPT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2Jvb2woIHAsIGVuZCwgY2FfaXN0cnVlICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2ludCggcCwgZW5kLCBjYV9pc3RydWUgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgICAgIGlmKCAqY2FfaXN0cnVlICE9IDAgKQorICAgICAgICAgICAgKmNhX2lzdHJ1ZSA9IDE7CisgICAgfQorCisgICAgaWYoICpwID09IGVuZCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9pbnQoIHAsIGVuZCwgbWF4X3BhdGhsZW4gKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgICgqbWF4X3BhdGhsZW4pKys7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCB4NTA5X2dldF9uc19jZXJ0X3R5cGUoIHVuc2lnbmVkIGNoYXIgKipwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbnNfY2VydF90eXBlKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc194NTA5X2JpdHN0cmluZyBicyA9IHsgMCwgMCwgTlVMTCB9OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmcoIHAsIGVuZCwgJmJzICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgaWYoIGJzLmxlbiAhPSAxICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSCApOworCisgICAgLyogR2V0IGFjdHVhbCBiaXRzdHJpbmcgKi8KKyAgICAqbnNfY2VydF90eXBlID0gKmJzLnA7CisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgeDUwOV9nZXRfa2V5X3VzYWdlKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICprZXlfdXNhZ2UpCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX3g1MDlfYml0c3RyaW5nIGJzID0geyAwLCAwLCBOVUxMIH07CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2JpdHN0cmluZyggcCwgZW5kLCAmYnMgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICBpZiggYnMubGVuIDwgMSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEggKTsKKworICAgIC8qIEdldCBhY3R1YWwgYml0c3RyaW5nICovCisgICAgKmtleV91c2FnZSA9IDA7CisgICAgZm9yKCBpID0gMDsgaSA8IGJzLmxlbiAmJiBpIDwgc2l6ZW9mKCB1bnNpZ25lZCBpbnQgKTsgaSsrICkKKyAgICB7CisgICAgICAgICprZXlfdXNhZ2UgfD0gKHVuc2lnbmVkIGludCkgYnMucFtpXSA8PCAoOCppKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEV4dEtleVVzYWdlU3ludGF4IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5NQVgpIE9GIEtleVB1cnBvc2VJZAorICoKKyAqIEtleVB1cnBvc2VJZCA6Oj0gT0JKRUNUIElERU5USUZJRVIKKyAqLworc3RhdGljIGludCB4NTA5X2dldF9leHRfa2V5X3VzYWdlKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X3NlcXVlbmNlICpleHRfa2V5X3VzYWdlKQoreworICAgIGludCByZXQ7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3NlcXVlbmNlX29mKCBwLCBlbmQsIGV4dF9rZXlfdXNhZ2UsIE1CRURUTFNfQVNOMV9PSUQgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICAvKiBTZXF1ZW5jZSBsZW5ndGggbXVzdCBiZSA+PSAxICovCisgICAgaWYoIGV4dF9rZXlfdXNhZ2UtPmJ1Zi5wID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFN1YmplY3RBbHROYW1lIDo6PSBHZW5lcmFsTmFtZXMKKyAqCisgKiBHZW5lcmFsTmFtZXMgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgR2VuZXJhbE5hbWUKKyAqCisgKiBHZW5lcmFsTmFtZSA6Oj0gQ0hPSUNFIHsKKyAqICAgICAgb3RoZXJOYW1lICAgICAgICAgICAgICAgICAgICAgICBbMF0gICAgIE90aGVyTmFtZSwKKyAqICAgICAgcmZjODIyTmFtZSAgICAgICAgICAgICAgICAgICAgICBbMV0gICAgIElBNVN0cmluZywKKyAqICAgICAgZE5TTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gICAgIElBNVN0cmluZywKKyAqICAgICAgeDQwMEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICBbM10gICAgIE9SQWRkcmVzcywKKyAqICAgICAgZGlyZWN0b3J5TmFtZSAgICAgICAgICAgICAgICAgICBbNF0gICAgIE5hbWUsCisgKiAgICAgIGVkaVBhcnR5TmFtZSAgICAgICAgICAgICAgICAgICAgWzVdICAgICBFRElQYXJ0eU5hbWUsCisgKiAgICAgIHVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXIgICAgICAgWzZdICAgICBJQTVTdHJpbmcsCisgKiAgICAgIGlQQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgWzddICAgICBPQ1RFVCBTVFJJTkcsCisgKiAgICAgIHJlZ2lzdGVyZWRJRCAgICAgICAgICAgICAgICAgICAgWzhdICAgICBPQkpFQ1QgSURFTlRJRklFUiB9CisgKgorICogT3RoZXJOYW1lIDo6PSBTRVFVRU5DRSB7CisgKiAgICAgIHR5cGUtaWQgICAgT0JKRUNUIElERU5USUZJRVIsCisgKiAgICAgIHZhbHVlICAgICAgWzBdIEVYUExJQ0lUIEFOWSBERUZJTkVEIEJZIHR5cGUtaWQgfQorICoKKyAqIEVESVBhcnR5TmFtZSA6Oj0gU0VRVUVOQ0UgeworICogICAgICBuYW1lQXNzaWduZXIgICAgICAgICAgICBbMF0gICAgIERpcmVjdG9yeVN0cmluZyBPUFRJT05BTCwKKyAqICAgICAgcGFydHlOYW1lICAgICAgICAgICAgICAgWzFdICAgICBEaXJlY3RvcnlTdHJpbmcgfQorICoKKyAqIE5PVEU6IHdlIG9ubHkgcGFyc2UgYW5kIHVzZSBkTlNOYW1lIGF0IHRoaXMgcG9pbnQuCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9nZXRfc3ViamVjdF9hbHRfbmFtZSggdW5zaWduZWQgY2hhciAqKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X3NlcXVlbmNlICpzdWJqZWN0X2FsdF9uYW1lICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4sIHRhZ19sZW47CisgICAgbWJlZHRsc19hc24xX2J1ZiAqYnVmOworICAgIHVuc2lnbmVkIGNoYXIgdGFnOworICAgIG1iZWR0bHNfYXNuMV9zZXF1ZW5jZSAqY3VyID0gc3ViamVjdF9hbHRfbmFtZTsKKworICAgIC8qIEdldCBtYWluIHNlcXVlbmNlIHRhZyAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICBpZiggKnAgKyBsZW4gIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHdoaWxlKCAqcCA8IGVuZCApCisgICAgeworICAgICAgICBpZiggKCBlbmQgLSAqcCApIDwgMSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSApOworCisgICAgICAgIHRhZyA9ICoqcDsKKyAgICAgICAgKCpwKSsrOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggcCwgZW5kLCAmdGFnX2xlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICAgICAgaWYoICggdGFnICYgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgKSAhPSBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApOworCisgICAgICAgIC8qIFNraXAgZXZlcnl0aGluZyBidXQgRE5TIG5hbWUgKi8KKyAgICAgICAgaWYoIHRhZyAhPSAoIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwgMiApICkKKyAgICAgICAgeworICAgICAgICAgICAgKnAgKz0gdGFnX2xlbjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogQWxsb2NhdGUgYW5kIGFzc2lnbiBuZXh0IHBvaW50ZXIgKi8KKyAgICAgICAgaWYoIGN1ci0+YnVmLnAgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBjdXItPm5leHQgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyApOworCisgICAgICAgICAgICBjdXItPm5leHQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX2FzbjFfc2VxdWVuY2UgKSApOworCisgICAgICAgICAgICBpZiggY3VyLT5uZXh0ID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9BTExPQ19GQUlMRUQgKTsKKworICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgYnVmID0gJihjdXItPmJ1Zik7CisgICAgICAgIGJ1Zi0+dGFnID0gdGFnOworICAgICAgICBidWYtPnAgPSAqcDsKKyAgICAgICAgYnVmLT5sZW4gPSB0YWdfbGVuOworICAgICAgICAqcCArPSBidWYtPmxlbjsKKyAgICB9CisKKyAgICAvKiBTZXQgZmluYWwgc2VxdWVuY2UgZW50cnkncyBuZXh0IHBvaW50ZXIgdG8gTlVMTCAqLworICAgIGN1ci0+bmV4dCA9IE5VTEw7CisKKyAgICBpZiggKnAgIT0gZW5kICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogWC41MDkgdjMgZXh0ZW5zaW9ucworICoKKyAqLworc3RhdGljIGludCB4NTA5X2dldF9jcnRfZXh0KCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjcnQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICplbmRfZXh0X2RhdGEsICplbmRfZXh0X29jdGV0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9leHQoIHAsIGVuZCwgJmNydC0+djNfZXh0LCAzICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRyApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHdoaWxlKCAqcCA8IGVuZCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBFeHRlbnNpb24gIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICAgICAgICogICAgICBleHRuSUQgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAgICAgICogICAgICBjcml0aWNhbCAgICBCT09MRUFOIERFRkFVTFQgRkFMU0UsCisgICAgICAgICAqICAgICAgZXh0blZhbHVlICAgT0NURVQgU1RSSU5HICB9CisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3g1MDlfYnVmIGV4dG5fb2lkID0gezAsIDAsIE5VTEx9OworICAgICAgICBpbnQgaXNfY3JpdGljYWwgPSAwOyAvKiBERUZBVUxUIEZBTFNFICovCisgICAgICAgIGludCBleHRfdHlwZSA9IDA7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgICAgIGVuZF9leHRfZGF0YSA9ICpwICsgbGVuOworCisgICAgICAgIC8qIEdldCBleHRlbnNpb24gSUQgKi8KKyAgICAgICAgZXh0bl9vaWQudGFnID0gKipwOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZleHRuX29pZC5sZW4sIE1CRURUTFNfQVNOMV9PSUQgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUyArIHJldCApOworCisgICAgICAgIGV4dG5fb2lkLnAgPSAqcDsKKyAgICAgICAgKnAgKz0gZXh0bl9vaWQubGVuOworCisgICAgICAgIGlmKCAoIGVuZCAtICpwICkgPCAxICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisKKyAgICAgICAgLyogR2V0IG9wdGlvbmFsIGNyaXRpY2FsICovCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfYm9vbCggcCwgZW5kX2V4dF9kYXRhLCAmaXNfY3JpdGljYWwgKSApICE9IDAgJiYKKyAgICAgICAgICAgICggcmV0ICE9IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKSApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgcmV0ICk7CisKKyAgICAgICAgLyogRGF0YSBzaG91bGQgYmUgb2N0ZXQgc3RyaW5nIHR5cGUgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoIHAsIGVuZF9leHRfZGF0YSwgJmxlbiwKKyAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfT0NURVRfU1RSSU5HICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyByZXQgKTsKKworICAgICAgICBlbmRfZXh0X29jdGV0ID0gKnAgKyBsZW47CisKKyAgICAgICAgaWYoIGVuZF9leHRfb2N0ZXQgIT0gZW5kX2V4dF9kYXRhICkKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCApOworCisgICAgICAgIC8qCisgICAgICAgICAqIERldGVjdCBzdXBwb3J0ZWQgZXh0ZW5zaW9ucworICAgICAgICAgKi8KKyAgICAgICAgcmV0ID0gbWJlZHRsc19vaWRfZ2V0X3g1MDlfZXh0X3R5cGUoICZleHRuX29pZCwgJmV4dF90eXBlICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTm8gcGFyc2VyIGZvdW5kLCBza2lwIGV4dGVuc2lvbiAqLworICAgICAgICAgICAgKnAgPSBlbmRfZXh0X29jdGV0OworCisjaWYgIWRlZmluZWQoTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTikKKyAgICAgICAgICAgIGlmKCBpc19jcml0aWNhbCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRGF0YSBpcyBtYXJrZWQgYXMgY3JpdGljYWw6IGZhaWwgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBGb3JiaWQgcmVwZWF0ZWQgZXh0ZW5zaW9ucyAqLworICAgICAgICBpZiggKCBjcnQtPmV4dF90eXBlcyAmIGV4dF90eXBlICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICk7CisKKyAgICAgICAgY3J0LT5leHRfdHlwZXMgfD0gZXh0X3R5cGU7CisKKyAgICAgICAgc3dpdGNoKCBleHRfdHlwZSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1g1MDlfRVhUX0JBU0lDX0NPTlNUUkFJTlRTOgorICAgICAgICAgICAgLyogUGFyc2UgYmFzaWMgY29uc3RyYWludHMgKi8KKyAgICAgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfZ2V0X2Jhc2ljX2NvbnN0cmFpbnRzKCBwLCBlbmRfZXh0X29jdGV0LAorICAgICAgICAgICAgICAgICAgICAmY3J0LT5jYV9pc3RydWUsICZjcnQtPm1heF9wYXRobGVuICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1g1MDlfRVhUX0tFWV9VU0FHRToKKyAgICAgICAgICAgIC8qIFBhcnNlIGtleSB1c2FnZSAqLworICAgICAgICAgICAgaWYoICggcmV0ID0geDUwOV9nZXRfa2V5X3VzYWdlKCBwLCBlbmRfZXh0X29jdGV0LAorICAgICAgICAgICAgICAgICAgICAmY3J0LT5rZXlfdXNhZ2UgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1CRURUTFNfWDUwOV9FWFRfRVhURU5ERURfS0VZX1VTQUdFOgorICAgICAgICAgICAgLyogUGFyc2UgZXh0ZW5kZWQga2V5IHVzYWdlICovCisgICAgICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9leHRfa2V5X3VzYWdlKCBwLCBlbmRfZXh0X29jdGV0LAorICAgICAgICAgICAgICAgICAgICAmY3J0LT5leHRfa2V5X3VzYWdlICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfQUxUX05BTUU6CisgICAgICAgICAgICAvKiBQYXJzZSBzdWJqZWN0IGFsdCBuYW1lICovCisgICAgICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9zdWJqZWN0X2FsdF9uYW1lKCBwLCBlbmRfZXh0X29jdGV0LAorICAgICAgICAgICAgICAgICAgICAmY3J0LT5zdWJqZWN0X2FsdF9uYW1lcyApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUJFRFRMU19YNTA5X0VYVF9OU19DRVJUX1RZUEU6CisgICAgICAgICAgICAvKiBQYXJzZSBuZXRzY2FwZSBjZXJ0aWZpY2F0ZSB0eXBlICovCisgICAgICAgICAgICBpZiggKCByZXQgPSB4NTA5X2dldF9uc19jZXJ0X3R5cGUoIHAsIGVuZF9leHRfb2N0ZXQsCisgICAgICAgICAgICAgICAgICAgICZjcnQtPm5zX2NlcnRfdHlwZSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoICpwICE9IGVuZCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhcnNlIGFuZCBmaWxsIGEgc2luZ2xlIFguNTA5IGNlcnRpZmljYXRlIGluIERFUiBmb3JtYXQKKyAqLworc3RhdGljIGludCB4NTA5X2NydF9wYXJzZV9kZXJfY29yZSggbWJlZHRsc194NTA5X2NydCAqY3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW47CisgICAgdW5zaWduZWQgY2hhciAqcCwgKmVuZCwgKmNydF9lbmQ7CisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWdfcGFyYW1zMSwgc2lnX3BhcmFtczIsIHNpZ19vaWQyOworCisgICAgbWVtc2V0KCAmc2lnX3BhcmFtczEsIDAsIHNpemVvZiggbWJlZHRsc194NTA5X2J1ZiApICk7CisgICAgbWVtc2V0KCAmc2lnX3BhcmFtczIsIDAsIHNpemVvZiggbWJlZHRsc194NTA5X2J1ZiApICk7CisgICAgbWVtc2V0KCAmc2lnX29pZDIsIDAsIHNpemVvZiggbWJlZHRsc194NTA5X2J1ZiApICk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciB2YWxpZCBpbnB1dAorICAgICAqLworICAgIGlmKCBjcnQgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBidWZmZXIgdW50aWwgd2UgZmlndXJlIG91dCBhY3R1YWwgbGVuZ3RoCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyKikgYnVmOworICAgIGxlbiA9IGJ1ZmxlbjsKKyAgICBlbmQgPSBwICsgbGVuOworCisgICAgLyoKKyAgICAgKiBDZXJ0aWZpY2F0ZSAgOjo9ICBTRVFVRU5DRSAgeworICAgICAqICAgICAgdGJzQ2VydGlmaWNhdGUgICAgICAgVEJTQ2VydGlmaWNhdGUsCisgICAgICogICAgICBzaWduYXR1cmVBbGdvcml0aG0gICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICAgICAgc2lnbmF0dXJlVmFsdWUgICAgICAgQklUIFNUUklORyAgfQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCApOworICAgIH0KKworICAgIGlmKCBsZW4gPiAoc2l6ZV90KSAoIGVuZCAtIHAgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorICAgIGNydF9lbmQgPSBwICsgbGVuOworCisgICAgLy8gQ3JlYXRlIGFuZCBwb3B1bGF0ZSBhIG5ldyBidWZmZXIgZm9yIHRoZSByYXcgZmllbGQKKyAgICBjcnQtPnJhdy5sZW4gPSBjcnRfZW5kIC0gYnVmOworICAgIGNydC0+cmF3LnAgPSBwID0gbWJlZHRsc19jYWxsb2MoIDEsIGNydC0+cmF3LmxlbiApOworICAgIGlmKCBwID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVEICk7CisKKyAgICBtZW1jcHkoIHAsIGJ1ZiwgY3J0LT5yYXcubGVuICk7CisKKyAgICAvLyBEaXJlY3QgcG9pbnRlcnMgdG8gdGhlIG5ldyBidWZmZXIgCisgICAgcCArPSBjcnQtPnJhdy5sZW4gLSBsZW47CisgICAgZW5kID0gY3J0X2VuZCA9IHAgKyBsZW47CisKKyAgICAvKgorICAgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7CisgICAgICovCisgICAgY3J0LT50YnMucCA9IHA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBlbmQgPSBwICsgbGVuOworICAgIGNydC0+dGJzLmxlbiA9IGVuZCAtIGNydC0+dGJzLnA7CisKKyAgICAvKgorICAgICAqIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAgdjEoMCksIHYyKDEpLCB2MygyKSAgfQorICAgICAqCisgICAgICogQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIgIDo6PSAgSU5URUdFUgorICAgICAqCisgICAgICogc2lnbmF0dXJlICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllcgorICAgICAqLworICAgIGlmKCAoIHJldCA9IHg1MDlfZ2V0X3ZlcnNpb24oICAmcCwgZW5kLCAmY3J0LT52ZXJzaW9uICApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfeDUwOV9nZXRfc2VyaWFsKCAgICZwLCBlbmQsICZjcnQtPnNlcmlhbCAgICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9hbGcoICAgICAgJnAsIGVuZCwgJmNydC0+c2lnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ19wYXJhbXMxICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3J0LT52ZXJzaW9uKys7CisKKyAgICBpZiggY3J0LT52ZXJzaW9uID4gMyApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9zaWdfYWxnKCAmY3J0LT5zaWdfb2lkLCAmc2lnX3BhcmFtczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNydC0+c2lnX21kLCAmY3J0LT5zaWdfcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNydC0+c2lnX29wdHMgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGlzc3VlciAgICAgICAgICAgICAgIE5hbWUKKyAgICAgKi8KKyAgICBjcnQtPmlzc3Vlcl9yYXcucCA9IHA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X25hbWUoICZwLCBwICsgbGVuLCAmY3J0LT5pc3N1ZXIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBjcnQtPmlzc3Vlcl9yYXcubGVuID0gcCAtIGNydC0+aXNzdWVyX3Jhdy5wOworCisgICAgLyoKKyAgICAgKiBWYWxpZGl0eSA6Oj0gU0VRVUVOQ0UgeworICAgICAqICAgICAgbm90QmVmb3JlICAgICAgVGltZSwKKyAgICAgKiAgICAgIG5vdEFmdGVyICAgICAgIFRpbWUgfQorICAgICAqCisgICAgICovCisgICAgaWYoICggcmV0ID0geDUwOV9nZXRfZGF0ZXMoICZwLCBlbmQsICZjcnQtPnZhbGlkX2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcnQtPnZhbGlkX3RvICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzdWJqZWN0ICAgICAgICAgICAgICBOYW1lCisgICAgICovCisgICAgY3J0LT5zdWJqZWN0X3Jhdy5wID0gcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGlmKCBsZW4gJiYgKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X25hbWUoICZwLCBwICsgbGVuLCAmY3J0LT5zdWJqZWN0ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgY3J0LT5zdWJqZWN0X3Jhdy5sZW4gPSBwIC0gY3J0LT5zdWJqZWN0X3Jhdy5wOworCisgICAgLyoKKyAgICAgKiBTdWJqZWN0UHVibGljS2V5SW5mbworICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfc3VicHVia2V5KCAmcCwgZW5kLCAmY3J0LT5wayApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoIGNydCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qCisgICAgICogIGlzc3VlclVuaXF1ZUlEICBbMV0gIElNUExJQ0lUIFVuaXF1ZUlkZW50aWZpZXIgT1BUSU9OQUwsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIC0tIElmIHByZXNlbnQsIHZlcnNpb24gc2hhbGwgYmUgdjIgb3IgdjMKKyAgICAgKiAgc3ViamVjdFVuaXF1ZUlEIFsyXSAgSU1QTElDSVQgVW5pcXVlSWRlbnRpZmllciBPUFRJT05BTCwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgLS0gSWYgcHJlc2VudCwgdmVyc2lvbiBzaGFsbCBiZSB2MiBvciB2MworICAgICAqICBleHRlbnNpb25zICAgICAgWzNdICBFWFBMSUNJVCBFeHRlbnNpb25zIE9QVElPTkFMCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIC0tIElmIHByZXNlbnQsIHZlcnNpb24gc2hhbGwgYmUgdjMKKyAgICAgKi8KKyAgICBpZiggY3J0LT52ZXJzaW9uID09IDIgfHwgY3J0LT52ZXJzaW9uID09IDMgKQorICAgIHsKKyAgICAgICAgcmV0ID0geDUwOV9nZXRfdWlkKCAmcCwgZW5kLCAmY3J0LT5pc3N1ZXJfaWQsICAxICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGNydC0+dmVyc2lvbiA9PSAyIHx8IGNydC0+dmVyc2lvbiA9PSAzICkKKyAgICB7CisgICAgICAgIHJldCA9IHg1MDlfZ2V0X3VpZCggJnAsIGVuZCwgJmNydC0+c3ViamVjdF9pZCwgIDIgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjcnQgKTsKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMpCisgICAgaWYoIGNydC0+dmVyc2lvbiA9PSAzICkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmV0ID0geDUwOV9nZXRfY3J0X2V4dCggJnAsIGVuZCwgY3J0ICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICBlbmQgPSBjcnRfZW5kOworCisgICAgLyoKKyAgICAgKiAgfQorICAgICAqICAtLSBlbmQgb2YgVEJTQ2VydGlmaWNhdGUKKyAgICAgKgorICAgICAqICBzaWduYXR1cmVBbGdvcml0aG0gICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICBzaWduYXR1cmVWYWx1ZSAgICAgICBCSVQgU1RSSU5HCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9hbGcoICZwLCBlbmQsICZzaWdfb2lkMiwgJnNpZ19wYXJhbXMyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIGNydC0+c2lnX29pZC5sZW4gIT0gc2lnX29pZDIubGVuIHx8CisgICAgICAgIG1lbWNtcCggY3J0LT5zaWdfb2lkLnAsIHNpZ19vaWQyLnAsIGNydC0+c2lnX29pZC5sZW4gKSAhPSAwIHx8CisgICAgICAgIHNpZ19wYXJhbXMxLmxlbiAhPSBzaWdfcGFyYW1zMi5sZW4gfHwKKyAgICAgICAgKCBzaWdfcGFyYW1zMS5sZW4gIT0gMCAmJgorICAgICAgICAgIG1lbWNtcCggc2lnX3BhcmFtczEucCwgc2lnX3BhcmFtczIucCwgc2lnX3BhcmFtczEubGVuICkgIT0gMCApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfZ2V0X3NpZyggJnAsIGVuZCwgJmNydC0+c2lnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoIHAgIT0gZW5kICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3J0ICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhcnNlIG9uZSBYLjUwOSBjZXJ0aWZpY2F0ZSBpbiBERVIgZm9ybWF0IGZyb20gYSBidWZmZXIgYW5kIGFkZCB0aGVtIHRvIGEKKyAqIGNoYWluZWQgbGlzdAorICovCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNydCA9IGNoYWluLCAqcHJldiA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciB2YWxpZCBpbnB1dAorICAgICAqLworICAgIGlmKCBjcnQgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgd2hpbGUoIGNydC0+dmVyc2lvbiAhPSAwICYmIGNydC0+bmV4dCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHByZXYgPSBjcnQ7CisgICAgICAgIGNydCA9IGNydC0+bmV4dDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFkZCBuZXcgY2VydGlmaWNhdGUgb24gdGhlIGVuZCBvZiB0aGUgY2hhaW4gaWYgbmVlZGVkLgorICAgICAqLworICAgIGlmKCBjcnQtPnZlcnNpb24gIT0gMCAmJiBjcnQtPm5leHQgPT0gTlVMTCApCisgICAgeworICAgICAgICBjcnQtPm5leHQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3J0ICkgKTsKKworICAgICAgICBpZiggY3J0LT5uZXh0ID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0FMTE9DX0ZBSUxFRCApOworCisgICAgICAgIHByZXYgPSBjcnQ7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggY3J0LT5uZXh0ICk7CisgICAgICAgIGNydCA9IGNydC0+bmV4dDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSB4NTA5X2NydF9wYXJzZV9kZXJfY29yZSggY3J0LCBidWYsIGJ1ZmxlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcHJldiApCisgICAgICAgICAgICBwcmV2LT5uZXh0ID0gTlVMTDsKKworICAgICAgICBpZiggY3J0ICE9IGNoYWluICkKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggY3J0ICk7CisKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBhcnNlIG9uZSBvciBtb3JlIFBFTSBjZXJ0aWZpY2F0ZXMgZnJvbSBhIGJ1ZmZlciBhbmQgYWRkIHRoZW0gdG8gdGhlIGNoYWluZWQKKyAqIGxpc3QKKyAqLworaW50IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgIGludCBzdWNjZXNzID0gMCwgZmlyc3RfZXJyb3IgPSAwLCB0b3RhbF9mYWlsZWQgPSAwOworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyAgICBpbnQgYnVmX2Zvcm1hdCA9IE1CRURUTFNfWDUwOV9GT1JNQVRfREVSOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIENoZWNrIGZvciB2YWxpZCBpbnB1dAorICAgICAqLworICAgIGlmKCBjaGFpbiA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICAvKgorICAgICAqIERldGVybWluZSBidWZmZXIgY29udGVudC4gQnVmZmVyIGNvbnRhaW5zIGVpdGhlciBvbmUgREVSIGNlcnRpZmljYXRlIG9yCisgICAgICogb25lIG9yIG1vcmUgUEVNIGNlcnRpZmljYXRlcy4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgaWYoIGJ1ZmxlbiAhPSAwICYmIGJ1ZltidWZsZW4gLSAxXSA9PSAnXDAnICYmCisgICAgICAgIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgYnVmLCAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIiApICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgYnVmX2Zvcm1hdCA9IE1CRURUTFNfWDUwOV9GT1JNQVRfUEVNOworICAgIH0KKworICAgIGlmKCBidWZfZm9ybWF0ID09IE1CRURUTFNfWDUwOV9GT1JNQVRfREVSICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZGVyKCBjaGFpbiwgYnVmLCBidWZsZW4gKTsKKyNlbHNlCisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZGVyKCBjaGFpbiwgYnVmLCBidWZsZW4gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgIGlmKCBidWZfZm9ybWF0ID09IE1CRURUTFNfWDUwOV9GT1JNQVRfUEVNICkKKyAgICB7CisgICAgICAgIGludCByZXQ7CisgICAgICAgIG1iZWR0bHNfcGVtX2NvbnRleHQgcGVtOworCisgICAgICAgIC8qIDEgcmF0aGVyIHRoYW4gMCBzaW5jZSB0aGUgdGVybWluYXRpbmcgTlVMTCBieXRlIGlzIGNvdW50ZWQgaW4gKi8KKyAgICAgICAgd2hpbGUoIGJ1ZmxlbiA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgdXNlX2xlbjsKKyAgICAgICAgICAgIG1iZWR0bHNfcGVtX2luaXQoICZwZW0gKTsKKworICAgICAgICAgICAgLyogSWYgd2UgZ2V0IHRoZXJlLCB3ZSBrbm93IHRoZSBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkICovCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlciggJnBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBOVUxMLCAwLCAmdXNlX2xlbiApOworCisgICAgICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogV2FzIFBFTSBlbmNvZGVkCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYnVmbGVuIC09IHVzZV9sZW47CisgICAgICAgICAgICAgICAgYnVmICs9IHVzZV9sZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfUEVNX0JBRF9JTlBVVF9EQVRBICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1BFTV9OT19IRUFERVJfRk9PVEVSX1BSRVNFTlQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogUEVNIGhlYWRlciBhbmQgZm9vdGVyIHdlcmUgZm91bmQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBidWZsZW4gLT0gdXNlX2xlbjsKKyAgICAgICAgICAgICAgICBidWYgKz0gdXNlX2xlbjsKKworICAgICAgICAgICAgICAgIGlmKCBmaXJzdF9lcnJvciA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RfZXJyb3IgPSByZXQ7CisKKyAgICAgICAgICAgICAgICB0b3RhbF9mYWlsZWQrKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9kZXIoIGNoYWluLCBwZW0uYnVmLCBwZW0uYnVmbGVuICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFF1aXQgcGFyc2luZyBvbiBhIG1lbW9yeSBlcnJvcgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICAgICAgaWYoIGZpcnN0X2Vycm9yID09IDAgKQorICAgICAgICAgICAgICAgICAgICBmaXJzdF9lcnJvciA9IHJldDsKKworICAgICAgICAgICAgICAgIHRvdGFsX2ZhaWxlZCsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdWNjZXNzID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBzdWNjZXNzICkKKyAgICAgICAgcmV0dXJuKCB0b3RhbF9mYWlsZWQgKTsKKyAgICBlbHNlIGlmKCBmaXJzdF9lcnJvciApCisgICAgICAgIHJldHVybiggZmlyc3RfZXJyb3IgKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9DRVJUX1VOS05PV05fRk9STUFUICk7CisjZW5kaWYgLyogTUJFRFRMU19QRU1fUEFSU0VfQyAqLworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorLyoKKyAqIExvYWQgb25lIG9yIG1vcmUgY2VydGlmaWNhdGVzIGFuZCBhZGQgdGhlbSB0byB0aGUgY2hhaW5lZCBsaXN0CisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoIG1iZWR0bHNfeDUwOV9jcnQgKmNoYWluLCBjb25zdCBjaGFyICpwYXRoICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfbG9hZF9maWxlKCBwYXRoLCAmYnVmLCAmbiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCBjaGFpbiwgYnVmLCBuICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGJ1ZiwgbiApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCitpbnQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCBtYmVkdGxzX3g1MDlfY3J0ICpjaGFpbiwgY29uc3QgY2hhciAqcGF0aCApCit7CisgICAgaW50IHJldCA9IDA7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKEVGSVg2NCkgJiYgIWRlZmluZWQoRUZJMzIpCisgICAgaW50IHdfcmV0OworICAgIFdDSEFSIHN6RGlyW01BWF9QQVRIXTsKKyAgICBjaGFyIGZpbGVuYW1lW01BWF9QQVRIXTsKKyAgICBjaGFyICpwOworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oIHBhdGggKTsKKworICAgIFdJTjMyX0ZJTkRfREFUQVcgZmlsZV9kYXRhOworICAgIEhBTkRMRSBoRmluZDsKKworICAgIGlmKCBsZW4gPiBNQVhfUEFUSCAtIDMgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIG1lbXNldCggc3pEaXIsIDAsIHNpemVvZihzekRpcikgKTsKKyAgICBtZW1zZXQoIGZpbGVuYW1lLCAwLCBNQVhfUEFUSCApOworICAgIG1lbWNweSggZmlsZW5hbWUsIHBhdGgsIGxlbiApOworICAgIGZpbGVuYW1lW2xlbisrXSA9ICdcXCc7CisgICAgcCA9IGZpbGVuYW1lICsgbGVuOworICAgIGZpbGVuYW1lW2xlbisrXSA9ICcqJzsKKworICAgIHdfcmV0ID0gTXVsdGlCeXRlVG9XaWRlQ2hhciggQ1BfQUNQLCAwLCBmaWxlbmFtZSwgbGVuLCBzekRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9QQVRIIC0gMyApOworICAgIGlmKCB3X3JldCA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKCBzekRpciwgJmZpbGVfZGF0YSApOworICAgIGlmKCBoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9GSUxFX0lPX0VSUk9SICk7CisKKyAgICBsZW4gPSBNQVhfUEFUSCAtIGxlbjsKKyAgICBkbworICAgIHsKKyAgICAgICAgbWVtc2V0KCBwLCAwLCBsZW4gKTsKKworICAgICAgICBpZiggZmlsZV9kYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgd19yZXQgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKCBDUF9BQ1AsIDAsIGZpbGVfZGF0YS5jRmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0cmxlblcoIGZpbGVfZGF0YS5jRmlsZU5hbWUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KSBsZW4gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwgKTsKKyAgICAgICAgaWYoIHdfcmV0ID09IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1IgKTsKKworICAgICAgICB3X3JldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggY2hhaW4sIGZpbGVuYW1lICk7CisgICAgICAgIGlmKCB3X3JldCA8IDAgKQorICAgICAgICAgICAgcmV0Kys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCArPSB3X3JldDsKKyAgICB9CisgICAgd2hpbGUoIEZpbmROZXh0RmlsZVcoIGhGaW5kLCAmZmlsZV9kYXRhICkgIT0gMCApOworCisgICAgaWYoIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMgKQorICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1I7CisKKyAgICBGaW5kQ2xvc2UoIGhGaW5kICk7CisjZWxzZSAvKiBfV0lOMzIgKi8KKyAgICBpbnQgdF9yZXQ7CisgICAgaW50IHNucF9yZXQ7CisgICAgc3RydWN0IHN0YXQgc2I7CisgICAgc3RydWN0IGRpcmVudCAqZW50cnk7CisgICAgY2hhciBlbnRyeV9uYW1lW01CRURUTFNfWDUwOV9NQVhfRklMRV9QQVRIX0xFTl07CisgICAgRElSICpkaXIgPSBvcGVuZGlyKCBwYXRoICk7CisKKyAgICBpZiggZGlyID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfRklMRV9JT19FUlJPUiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXV0ZXhfbG9jayggJm1iZWR0bHNfdGhyZWFkaW5nX3JlYWRkaXJfbXV0ZXggKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgY2xvc2VkaXIoIGRpciApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyNlbmRpZgorCisgICAgd2hpbGUoICggZW50cnkgPSByZWFkZGlyKCBkaXIgKSApICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgc25wX3JldCA9IG1iZWR0bHNfc25wcmludGYoIGVudHJ5X25hbWUsIHNpemVvZiBlbnRyeV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLyVzIiwgcGF0aCwgZW50cnktPmRfbmFtZSApOworCisgICAgICAgIGlmKCBzbnBfcmV0IDwgMCB8fCAoc2l6ZV90KXNucF9yZXQgPj0gc2l6ZW9mIGVudHJ5X25hbWUgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9YNTA5X0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RhdCggZW50cnlfbmFtZSwgJnNiICkgPT0gLTEgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9YNTA5X0ZJTEVfSU9fRVJST1I7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgICBpZiggIVNfSVNSRUcoIHNiLnN0X21vZGUgKSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJZ25vcmUgcGFyc2UgZXJyb3JzCisgICAgICAgIC8vCisgICAgICAgIHRfcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCBjaGFpbiwgZW50cnlfbmFtZSApOworICAgICAgICBpZiggdF9yZXQgPCAwICkKKyAgICAgICAgICAgIHJldCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgKz0gdF9yZXQ7CisgICAgfQorCitjbGVhbnVwOgorICAgIGNsb3NlZGlyKCBkaXIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCkKKyAgICBpZiggbWJlZHRsc19tdXRleF91bmxvY2soICZtYmVkdGxzX3RocmVhZGluZ19yZWFkZGlyX211dGV4ICkgIT0gMCApCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUjsKKyNlbmRpZgorCisjZW5kaWYgLyogX1dJTjMyICovCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworc3RhdGljIGludCB4NTA5X2luZm9fc3ViamVjdF9hbHRfbmFtZSggY2hhciAqKmJ1Ziwgc2l6ZV90ICpzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X3NlcXVlbmNlICpzdWJqZWN0X2FsdF9uYW1lICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgbiA9ICpzaXplOworICAgIGNoYXIgKnAgPSAqYnVmOworICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqY3VyID0gc3ViamVjdF9hbHRfbmFtZTsKKyAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKKyAgICBzaXplX3Qgc2VwX2xlbiA9IDA7CisKKyAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIGN1ci0+YnVmLmxlbiArIHNlcF9sZW4gPj0gbiApCisgICAgICAgIHsKKyAgICAgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgICAgIH0KKworICAgICAgICBuIC09IGN1ci0+YnVmLmxlbiArIHNlcF9sZW47CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBzZXBfbGVuOyBpKysgKQorICAgICAgICAgICAgKnArKyA9IHNlcFtpXTsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGN1ci0+YnVmLmxlbjsgaSsrICkKKyAgICAgICAgICAgICpwKysgPSBjdXItPmJ1Zi5wW2ldOworCisgICAgICAgIHNlcCA9ICIsICI7CisgICAgICAgIHNlcF9sZW4gPSAyOworCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICAqcCA9ICdcMCc7CisKKyAgICAqc2l6ZSA9IG47CisgICAgKmJ1ZiA9IHA7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworI2RlZmluZSBQUklOVF9JVEVNKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXMiIGksIHNlcCApOyAgICBcCisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2VwID0gIiwgIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgQ0VSVF9UWVBFKHR5cGUsbmFtZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggbnNfY2VydF90eXBlICYgdHlwZSApICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUFJJTlRfSVRFTSggbmFtZSApOworCitzdGF0aWMgaW50IHg1MDlfaW5mb19jZXJ0X3R5cGUoIGNoYXIgKipidWYsIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuc19jZXJ0X3R5cGUgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG4gPSAqc2l6ZTsKKyAgICBjaGFyICpwID0gKmJ1ZjsKKyAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKKworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5ULCAgICAgICAgICJTU0wgQ2xpZW50IiApOworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSLCAgICAgICAgICJTU0wgU2VydmVyIiApOworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTCwgICAgICAgICAgICAgICJFbWFpbCIgKTsKKyAgICBDRVJUX1RZUEUoIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkcsICAgICAiT2JqZWN0IFNpZ25pbmciICk7CisgICAgQ0VSVF9UWVBFKCBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1JFU0VSVkVELCAgICAgICAgICAgIlJlc2VydmVkIiApOworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0EsICAgICAgICAgICAgICJTU0wgQ0EiICk7CisgICAgQ0VSVF9UWVBFKCBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX0VNQUlMX0NBLCAgICAgICAgICAgIkVtYWlsIENBIiApOworICAgIENFUlRfVFlQRSggTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklOR19DQSwgICJPYmplY3QgU2lnbmluZyBDQSIgKTsKKworICAgICpzaXplID0gbjsKKyAgICAqYnVmID0gcDsKKworICAgIHJldHVybiggMCApOworfQorCisjZGVmaW5lIEtFWV9VU0FHRShjb2RlLG5hbWUpICAgIFwKKyAgICBpZigga2V5X3VzYWdlICYgY29kZSApICAgICAgXAorICAgICAgICBQUklOVF9JVEVNKCBuYW1lICk7CisKK3N0YXRpYyBpbnQgeDUwOV9pbmZvX2tleV91c2FnZSggY2hhciAqKmJ1Ziwgc2l6ZV90ICpzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5X3VzYWdlICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuID0gKnNpemU7CisgICAgY2hhciAqcCA9ICpidWY7CisgICAgY29uc3QgY2hhciAqc2VwID0gIiI7CisKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSwgICAgIkRpZ2l0YWwgU2lnbmF0dXJlIiApOworICAgIEtFWV9VU0FHRSggTUJFRFRMU19YNTA5X0tVX05PTl9SRVBVRElBVElPTiwgICAgICAiTm9uIFJlcHVkaWF0aW9uIiApOworICAgIEtFWV9VU0FHRSggTUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlQsICAgICAiS2V5IEVuY2lwaGVybWVudCIgKTsKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9EQVRBX0VOQ0lQSEVSTUVOVCwgICAgIkRhdGEgRW5jaXBoZXJtZW50IiApOworICAgIEtFWV9VU0FHRSggTUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQsICAgICAgICAiS2V5IEFncmVlbWVudCIgKTsKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOLCAgICAgICAgIktleSBDZXJ0IFNpZ24iICk7CisgICAgS0VZX1VTQUdFKCBNQkVEVExTX1g1MDlfS1VfQ1JMX1NJR04sICAgICAgICAgICAgICJDUkwgU2lnbiIgKTsKKyAgICBLRVlfVVNBR0UoIE1CRURUTFNfWDUwOV9LVV9FTkNJUEhFUl9PTkxZLCAgICAgICAgIkVuY2lwaGVyIE9ubHkiICk7CisgICAgS0VZX1VTQUdFKCBNQkVEVExTX1g1MDlfS1VfREVDSVBIRVJfT05MWSwgICAgICAgICJEZWNpcGhlciBPbmx5IiApOworCisgICAgKnNpemUgPSBuOworICAgICpidWYgPSBwOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgeDUwOV9pbmZvX2V4dF9rZXlfdXNhZ2UoIGNoYXIgKipidWYsIHNpemVfdCAqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqZXh0ZW5kZWRfa2V5X3VzYWdlICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IGNoYXIgKmRlc2M7CisgICAgc2l6ZV90IG4gPSAqc2l6ZTsKKyAgICBjaGFyICpwID0gKmJ1ZjsKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKmN1ciA9IGV4dGVuZGVkX2tleV91c2FnZTsKKyAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc19vaWRfZ2V0X2V4dGVuZGVkX2tleV91c2FnZSggJmN1ci0+YnVmLCAmZGVzYyApICE9IDAgKQorICAgICAgICAgICAgZGVzYyA9ICI/Pz8iOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlcyVzIiwgc2VwLCBkZXNjICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIHNlcCA9ICIsICI7CisKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgIH0KKworICAgICpzaXplID0gbjsKKyAgICAqYnVmID0gcDsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUmV0dXJuIGFuIGluZm9ybWF0aW9uYWwgc3RyaW5nIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZS4KKyAqLworI2RlZmluZSBCRUZPUkVfQ09MT04gICAgMTgKKyNkZWZpbmUgQkMgICAgICAgICAgICAgICIxOCIKK2ludCBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG47CisgICAgY2hhciAqcDsKKyAgICBjaGFyIGtleV9zaXplX3N0cltCRUZPUkVfQ09MT05dOworCisgICAgcCA9IGJ1ZjsKKyAgICBuID0gc2l6ZTsKKworICAgIGlmKCBOVUxMID09IGNydCApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG5DZXJ0aWZpY2F0ZSBpcyB1bmluaXRpYWxpc2VkIVxuIiApOworICAgICAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgICAgICByZXR1cm4oIChpbnQpICggc2l6ZSAtIG4gKSApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIlc2NlcnQuIHZlcnNpb24gICAgIDogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBjcnQtPnZlcnNpb24gKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXNzZXJpYWwgbnVtYmVyICAgICA6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfc2VyaWFsX2dldHMoIHAsIG4sICZjcnQtPnNlcmlhbCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNpc3N1ZXIgbmFtZSAgICAgICA6ICIsIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBwLCBuLCAmY3J0LT5pc3N1ZXIgICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc3N1YmplY3QgbmFtZSAgICAgIDogIiwgcHJlZml4ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2RuX2dldHMoIHAsIG4sICZjcnQtPnN1YmplY3QgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzaXNzdWVkICBvbiAgICAgICAgOiAiIFwKKyAgICAgICAgICAgICAgICAgICAiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQiLCBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgY3J0LT52YWxpZF9mcm9tLnllYXIsIGNydC0+dmFsaWRfZnJvbS5tb24sCisgICAgICAgICAgICAgICAgICAgY3J0LT52YWxpZF9mcm9tLmRheSwgIGNydC0+dmFsaWRfZnJvbS5ob3VyLAorICAgICAgICAgICAgICAgICAgIGNydC0+dmFsaWRfZnJvbS5taW4sICBjcnQtPnZhbGlkX2Zyb20uc2VjICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc2V4cGlyZXMgb24gICAgICAgIDogIiBcCisgICAgICAgICAgICAgICAgICAgIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNydC0+dmFsaWRfdG8ueWVhciwgY3J0LT52YWxpZF90by5tb24sCisgICAgICAgICAgICAgICAgICAgY3J0LT52YWxpZF90by5kYXksICBjcnQtPnZhbGlkX3RvLmhvdXIsCisgICAgICAgICAgICAgICAgICAgY3J0LT52YWxpZF90by5taW4sICBjcnQtPnZhbGlkX3RvLnNlYyApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNzaWduZWQgdXNpbmcgICAgICA6ICIsIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X3NpZ19hbGdfZ2V0cyggcCwgbiwgJmNydC0+c2lnX29pZCwgY3J0LT5zaWdfcGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNydC0+c2lnX21kLCBjcnQtPnNpZ19vcHRzICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAvKiBLZXkgc2l6ZSAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9rZXlfc2l6ZV9oZWxwZXIoIGtleV9zaXplX3N0ciwgQkVGT1JFX0NPTE9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2dldF9uYW1lKCAmY3J0LT5wayApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXMlLSIgQkMgInM6ICVkIGJpdHMiLCBwcmVmaXgsIGtleV9zaXplX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgbWJlZHRsc19wa19nZXRfYml0bGVuKCAmY3J0LT5wayApICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAvKgorICAgICAqIE9wdGlvbmFsIGV4dGVuc2lvbnMKKyAgICAgKi8KKworICAgIGlmKCBjcnQtPmV4dF90eXBlcyAmIE1CRURUTFNfWDUwOV9FWFRfQkFTSUNfQ09OU1RSQUlOVFMgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNiYXNpYyBjb25zdHJhaW50cyA6IENBPSVzIiwgcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgY3J0LT5jYV9pc3RydWUgPyAidHJ1ZSIgOiAiZmFsc2UiICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIGlmKCBjcnQtPm1heF9wYXRobGVuID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICIsIG1heF9wYXRobGVuPSVkIiwgY3J0LT5tYXhfcGF0aGxlbiAtIDEgKTsKKyAgICAgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGNydC0+ZXh0X3R5cGVzICYgTUJFRFRMU19YNTA5X0VYVF9TVUJKRUNUX0FMVF9OQU1FICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzc3ViamVjdCBhbHQgbmFtZSAgOiAiLCBwcmVmaXggKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICAgICAgaWYoICggcmV0ID0geDUwOV9pbmZvX3N1YmplY3RfYWx0X25hbWUoICZwLCAmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNydC0+c3ViamVjdF9hbHRfbmFtZXMgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggY3J0LT5leHRfdHlwZXMgJiBNQkVEVExTX1g1MDlfRVhUX05TX0NFUlRfVFlQRSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc2NlcnQuIHR5cGUgICAgICAgIDogIiwgcHJlZml4ICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfaW5mb19jZXJ0X3R5cGUoICZwLCAmbiwgY3J0LT5uc19jZXJ0X3R5cGUgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggY3J0LT5leHRfdHlwZXMgJiBNQkVEVExTX1g1MDlfRVhUX0tFWV9VU0FHRSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc2tleSB1c2FnZSAgICAgICAgIDogIiwgcHJlZml4ICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfaW5mb19rZXlfdXNhZ2UoICZwLCAmbiwgY3J0LT5rZXlfdXNhZ2UgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggY3J0LT5leHRfdHlwZXMgJiBNQkVEVExTX1g1MDlfRVhUX0VYVEVOREVEX0tFWV9VU0FHRSApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiXG4lc2V4dCBrZXkgdXNhZ2UgICAgIDogIiwgcHJlZml4ICk7CisgICAgICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgICAgIGlmKCAoIHJldCA9IHg1MDlfaW5mb19leHRfa2V5X3VzYWdlKCAmcCwgJm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3J0LT5leHRfa2V5X3VzYWdlICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuIiApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0dXJuKCAoaW50KSAoIHNpemUgLSBuICkgKTsKK30KKworc3RydWN0IHg1MDlfY3J0X3ZlcmlmeV9zdHJpbmcgeworICAgIGludCBjb2RlOworICAgIGNvbnN0IGNoYXIgKnN0cmluZzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeDUwOV9jcnRfdmVyaWZ5X3N0cmluZyB4NTA5X2NydF92ZXJpZnlfc3RyaW5nc1tdID0geworICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRCwgICAgICAgIlRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSBoYXMgZXhwaXJlZCIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQsICAgICAgICJUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gcmV2b2tlZCAoaXMgb24gYSBDUkwpIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0gsICAgIlRoZSBjZXJ0aWZpY2F0ZSBDb21tb24gTmFtZSAoQ04pIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGV4cGVjdGVkIENOIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQsICAgIlRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQsICAgICJUaGUgQ1JMIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVELCAgICAgICAgIlRoZSBDUkwgaXMgZXhwaXJlZCIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkcsICAgICAgICJDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZyIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX1NLSVBfVkVSSUZZLCAgICJDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gd2FzIHNraXBwZWQiIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9PVEhFUiwgICAgICAgICAiT3RoZXIgcmVhc29uIChjYW4gYmUgdXNlZCBieSB2ZXJpZnkgY2FsbGJhY2spIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfRlVUVVJFLCAgICAgICAgIlRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSBzdGFydHMgaW4gdGhlIGZ1dHVyZSIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDUkxfRlVUVVJFLCAgICAgICAgICJUaGUgQ1JMIGlzIGZyb20gdGhlIGZ1dHVyZSIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX0tFWV9VU0FHRSwgICAgICJVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhUX0tFWV9VU0FHRSwgIlVzYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBleHRlbmRlZEtleVVzYWdlIGV4dGVuc2lvbiIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX05TX0NFUlRfVFlQRSwgICJVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUgbnNDZXJ0VHlwZSBleHRlbnNpb24iIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfTUQsICAgICAgICAiVGhlIGNlcnRpZmljYXRlIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBoYXNoLiIgfSwKKyAgICB7IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9QSywgICAgICAgICJUaGUgY2VydGlmaWNhdGUgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIFBLIGFsZyAoZWcgUlNBIHZzIEVDRFNBKS4iIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfS0VZLCAgICAgICAiVGhlIGNlcnRpZmljYXRlIGlzIHNpZ25lZCB3aXRoIGFuIHVuYWNjZXB0YWJsZSBrZXkgKGVnIGJhZCBjdXJ2ZSwgUlNBIHRvbyBzaG9ydCkuIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENSTF9CQURfTUQsICAgICAgICAgIlRoZSBDUkwgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIGhhc2guIiB9LAorICAgIHsgTUJFRFRMU19YNTA5X0JBRENSTF9CQURfUEssICAgICAgICAgIlRoZSBDUkwgaXMgc2lnbmVkIHdpdGggYW4gdW5hY2NlcHRhYmxlIFBLIGFsZyAoZWcgUlNBIHZzIEVDRFNBKS4iIH0sCisgICAgeyBNQkVEVExTX1g1MDlfQkFEQ1JMX0JBRF9LRVksICAgICAgICAiVGhlIENSTCBpcyBzaWduZWQgd2l0aCBhbiB1bmFjY2VwdGFibGUga2V5IChlZyBiYWQgY3VydmUsIFJTQSB0b28gc2hvcnQpLiIgfSwKKyAgICB7IDAsIE5VTEwgfQorfTsKKworaW50IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MgKQoreworICAgIGludCByZXQ7CisgICAgY29uc3Qgc3RydWN0IHg1MDlfY3J0X3ZlcmlmeV9zdHJpbmcgKmN1cjsKKyAgICBjaGFyICpwID0gYnVmOworICAgIHNpemVfdCBuID0gc2l6ZTsKKworICAgIGZvciggY3VyID0geDUwOV9jcnRfdmVyaWZ5X3N0cmluZ3M7IGN1ci0+c3RyaW5nICE9IE5VTEwgOyBjdXIrKyApCisgICAgeworICAgICAgICBpZiggKCBmbGFncyAmIGN1ci0+Y29kZSApID09IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzJXNcbiIsIHByZWZpeCwgY3VyLT5zdHJpbmcgKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgICAgIGZsYWdzIF49IGN1ci0+Y29kZTsKKyAgICB9CisKKyAgICBpZiggZmxhZ3MgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiJXNVbmtub3duIHJlYXNvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4pXG4iLCBwcmVmaXggKTsKKyAgICAgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgfQorCisgICAgcmV0dXJuKCAoaW50KSAoIHNpemUgLSBuICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRSkKK2ludCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2tleV91c2FnZSggY29uc3QgbWJlZHRsc194NTA5X2NydCAqY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdXNhZ2UgKQoreworICAgIHVuc2lnbmVkIGludCB1c2FnZV9tdXN0LCB1c2FnZV9tYXk7CisgICAgdW5zaWduZWQgaW50IG1heV9tYXNrID0gTUJFRFRMU19YNTA5X0tVX0VOQ0lQSEVSX09OTFkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNQkVEVExTX1g1MDlfS1VfREVDSVBIRVJfT05MWTsKKworICAgIGlmKCAoIGNydC0+ZXh0X3R5cGVzICYgTUJFRFRMU19YNTA5X0VYVF9LRVlfVVNBR0UgKSA9PSAwICkKKyAgICAgICAgcmV0dXJuKCAwICk7CisKKyAgICB1c2FnZV9tdXN0ID0gdXNhZ2UgJiB+bWF5X21hc2s7CisKKyAgICBpZiggKCAoIGNydC0+a2V5X3VzYWdlICYgfm1heV9tYXNrICkgJiB1c2FnZV9tdXN0ICkgIT0gdXNhZ2VfbXVzdCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgdXNhZ2VfbWF5ID0gdXNhZ2UgJiBtYXlfbWFzazsKKworICAgIGlmKCAoICggY3J0LT5rZXlfdXNhZ2UgJiBtYXlfbWFzayApIHwgdXNhZ2VfbWF5ICkgIT0gdXNhZ2VfbWF5ICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFKQoraW50IG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlKCBjb25zdCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNhZ2VfbGVuICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKmN1cjsKKworICAgIC8qIEV4dGVuc2lvbiBpcyBub3QgbWFuZGF0b3J5LCBhYnNlbnQgbWVhbnMgbm8gcmVzdHJpY3Rpb24gKi8KKyAgICBpZiggKCBjcnQtPmV4dF90eXBlcyAmIE1CRURUTFNfWDUwOV9FWFRfRVhURU5ERURfS0VZX1VTQUdFICkgPT0gMCApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgLyoKKyAgICAgKiBMb29rIGZvciB0aGUgcmVxdWVzdGVkIHVzYWdlIChvciB3aWxkY2FyZCBBTlkpIGluIG91ciBsaXN0CisgICAgICovCisgICAgZm9yKCBjdXIgPSAmY3J0LT5leHRfa2V5X3VzYWdlOyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5uZXh0ICkKKyAgICB7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9idWYgKmN1cl9vaWQgPSAmY3VyLT5idWY7CisKKyAgICAgICAgaWYoIGN1cl9vaWQtPmxlbiA9PSB1c2FnZV9sZW4gJiYKKyAgICAgICAgICAgIG1lbWNtcCggY3VyX29pZC0+cCwgdXNhZ2Vfb2lkLCB1c2FnZV9sZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCAwICk7CisgICAgICAgIH0KKworICAgICAgICBpZiggTUJFRFRMU19PSURfQ01QKCBNQkVEVExTX09JRF9BTllfRVhURU5ERURfS0VZX1VTQUdFLCBjdXJfb2lkICkgPT0gMCApCisgICAgICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykKKy8qCisgKiBSZXR1cm4gMSBpZiB0aGUgY2VydGlmaWNhdGUgaXMgcmV2b2tlZCwgb3IgMCBvdGhlcndpc2UuCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X2lzX3Jldm9rZWQoIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNydCwgY29uc3QgbWJlZHRsc194NTA5X2NybCAqY3JsICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3JsX2VudHJ5ICpjdXIgPSAmY3JsLT5lbnRyeTsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCAmJiBjdXItPnNlcmlhbC5sZW4gIT0gMCApCisgICAgeworICAgICAgICBpZiggY3J0LT5zZXJpYWwubGVuID09IGN1ci0+c2VyaWFsLmxlbiAmJgorICAgICAgICAgICAgbWVtY21wKCBjcnQtPnNlcmlhbC5wLCBjdXItPnNlcmlhbC5wLCBjcnQtPnNlcmlhbC5sZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QoICZjdXItPnJldm9jYXRpb25fZGF0ZSApICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgdGhlIGdpdmVuIGNlcnRpZmljYXRlIGlzIG5vdCByZXZva2VkIGFjY29yZGluZyB0byB0aGUgQ1JMLgorICogU2tpcCB2YWxpZGF0aW9uIGlzIG5vIENSTCBmb3IgdGhlIGdpdmVuIENBIGlzIHByZXNlbnQuCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9jcnRfdmVyaWZ5Y3JsKCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsIG1iZWR0bHNfeDUwOV9jcnQgKmNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNybF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSAqcHJvZmlsZSApCit7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisKKyAgICBpZiggY2EgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggZmxhZ3MgKTsKKworICAgIHdoaWxlKCBjcmxfbGlzdCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCBjcmxfbGlzdC0+dmVyc2lvbiA9PSAwIHx8CisgICAgICAgICAgICBjcmxfbGlzdC0+aXNzdWVyX3Jhdy5sZW4gIT0gY2EtPnN1YmplY3RfcmF3LmxlbiB8fAorICAgICAgICAgICAgbWVtY21wKCBjcmxfbGlzdC0+aXNzdWVyX3Jhdy5wLCBjYS0+c3ViamVjdF9yYXcucCwKKyAgICAgICAgICAgICAgICAgICAgY3JsX2xpc3QtPmlzc3Vlcl9yYXcubGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNybF9saXN0ID0gY3JsX2xpc3QtPm5leHQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIENoZWNrIGlmIHRoZSBDQSBpcyBjb25maWd1cmVkIHRvIHNpZ24gQ1JMcworICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UpCisgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2tleV91c2FnZSggY2EsIE1CRURUTFNfWDUwOV9LVV9DUkxfU0lHTiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ1JMX05PVF9UUlVTVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqIENoZWNrIGlmIENSTCBpcyBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBCisgICAgICAgICAqLworICAgICAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX21kX2FsZyggcHJvZmlsZSwgY3JsX2xpc3QtPnNpZ19tZCApICE9IDAgKQorICAgICAgICAgICAgZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENSTF9CQURfTUQ7CisKKyAgICAgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19wa19hbGcoIHByb2ZpbGUsIGNybF9saXN0LT5zaWdfcGsgKSAhPSAwICkKKyAgICAgICAgICAgIGZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDUkxfQkFEX1BLOworCisgICAgICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBjcmxfbGlzdC0+c2lnX21kICk7CisgICAgICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2Fubm90IGNoZWNrICd1bmtub3duJyBoYXNoCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfbWQoIG1kX2luZm8sIGNybF9saXN0LT50YnMucCwgY3JsX2xpc3QtPnRicy5sZW4sIGhhc2ggKTsKKworICAgICAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX2tleSggcHJvZmlsZSwgY3JsX2xpc3QtPnNpZ19waywgJmNhLT5wayApICE9IDAgKQorICAgICAgICAgICAgZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX0tFWTsKKworICAgICAgICBpZiggbWJlZHRsc19wa192ZXJpZnlfZXh0KCBjcmxfbGlzdC0+c2lnX3BrLCBjcmxfbGlzdC0+c2lnX29wdHMsICZjYS0+cGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmxfbGlzdC0+c2lnX21kLCBoYXNoLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmxfbGlzdC0+c2lnLnAsIGNybF9saXN0LT5zaWcubGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIENoZWNrIGZvciB2YWxpZGl0eSBvZiBDUkwgKERvIG5vdCBkcm9wIG91dCkKKyAgICAgICAgICovCisgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCAmY3JsX2xpc3QtPm5leHRfdXBkYXRlICkgKQorICAgICAgICAgICAgZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEOworCisgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoICZjcmxfbGlzdC0+dGhpc191cGRhdGUgKSApCisgICAgICAgICAgICBmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiBjZXJ0aWZpY2F0ZSBpcyByZXZva2VkCisgICAgICAgICAqLworICAgICAgICBpZiggbWJlZHRsc194NTA5X2NydF9pc19yZXZva2VkKCBjcnQsIGNybF9saXN0ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjcmxfbGlzdCA9IGNybF9saXN0LT5uZXh0OworICAgIH0KKworICAgIHJldHVybiggZmxhZ3MgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KKworLyoKKyAqIExpa2UgbWVtY21wLCBidXQgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYWx3YXlzIHJldHVybnMgLTEgaWYgZGlmZmVyZW50CisgKi8KK3N0YXRpYyBpbnQgeDUwOV9tZW1jYXNlY21wKCBjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIGNoYXIgZGlmZjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuMSA9IHMxLCAqbjIgPSBzMjsKKworICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgeworICAgICAgICBkaWZmID0gbjFbaV0gXiBuMltpXTsKKworICAgICAgICBpZiggZGlmZiA9PSAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmKCBkaWZmID09IDMyICYmCisgICAgICAgICAgICAoICggbjFbaV0gPj0gJ2EnICYmIG4xW2ldIDw9ICd6JyApIHx8CisgICAgICAgICAgICAgICggbjFbaV0gPj0gJ0EnICYmIG4xW2ldIDw9ICdaJyApICkgKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFJldHVybiAwIGlmIG5hbWUgbWF0Y2hlcyB3aWxkY2FyZCwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9jaGVja193aWxkY2FyZCggY29uc3QgY2hhciAqY24sIG1iZWR0bHNfeDUwOV9idWYgKm5hbWUgKQoreworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBjbl9pZHggPSAwLCBjbl9sZW4gPSBzdHJsZW4oIGNuICk7CisKKyAgICBpZiggbmFtZS0+bGVuIDwgMyB8fCBuYW1lLT5wWzBdICE9ICcqJyB8fCBuYW1lLT5wWzFdICE9ICcuJyApCisgICAgICAgIHJldHVybiggMCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IGNuX2xlbjsgKytpICkKKyAgICB7CisgICAgICAgIGlmKCBjbltpXSA9PSAnLicgKQorICAgICAgICB7CisgICAgICAgICAgICBjbl9pZHggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggY25faWR4ID09IDAgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggY25fbGVuIC0gY25faWR4ID09IG5hbWUtPmxlbiAtIDEgJiYKKyAgICAgICAgeDUwOV9tZW1jYXNlY21wKCBuYW1lLT5wICsgMSwgY24gKyBjbl9pZHgsIG5hbWUtPmxlbiAtIDEgKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKworICAgIHJldHVybiggLTEgKTsKK30KKworLyoKKyAqIENvbXBhcmUgdHdvIFguNTA5IHN0cmluZ3MsIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBhbGxvd2luZyBmb3Igc29tZSBlbmNvZGluZworICogdmFyaWF0aW9ucyAoYnV0IG5vdCBhbGwpLgorICoKKyAqIFJldHVybiAwIGlmIGVxdWFsLCAtMSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgeDUwOV9zdHJpbmdfY21wKCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICphLCBjb25zdCBtYmVkdGxzX3g1MDlfYnVmICpiICkKK3sKKyAgICBpZiggYS0+dGFnID09IGItPnRhZyAmJgorICAgICAgICBhLT5sZW4gPT0gYi0+bGVuICYmCisgICAgICAgIG1lbWNtcCggYS0+cCwgYi0+cCwgYi0+bGVuICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBpZiggKCBhLT50YWcgPT0gTUJFRFRMU19BU04xX1VURjhfU1RSSU5HIHx8IGEtPnRhZyA9PSBNQkVEVExTX0FTTjFfUFJJTlRBQkxFX1NUUklORyApICYmCisgICAgICAgICggYi0+dGFnID09IE1CRURUTFNfQVNOMV9VVEY4X1NUUklORyB8fCBiLT50YWcgPT0gTUJFRFRMU19BU04xX1BSSU5UQUJMRV9TVFJJTkcgKSAmJgorICAgICAgICBhLT5sZW4gPT0gYi0+bGVuICYmCisgICAgICAgIHg1MDlfbWVtY2FzZWNtcCggYS0+cCwgYi0+cCwgYi0+bGVuICkgPT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKy8qCisgKiBDb21wYXJlIHR3byBYLjUwOSBOYW1lcyAoYWthIHJkblNlcXVlbmNlKS4KKyAqCisgKiBTZWUgUkZDIDUyODAgc2VjdGlvbiA3LjEsIHRob3VnaCB3ZSBkb24ndCBpbXBsZW1lbnQgdGhlIHdob2xlIGFsZ29yaXRobToKKyAqIHdlIHNvbWV0aW1lcyByZXR1cm4gdW5lcXVhbCB3aGVuIHRoZSBmdWxsIGFsZ29yaXRobSB3b3VsZCByZXR1cm4gZXF1YWwsCisgKiBidXQgbmV2ZXIgdGhlIG90aGVyIHdheS4gKEluIHBhcnRpY3VsYXIsIHdlIGRvbid0IGRvIFVuaWNvZGUgbm9ybWFsaXNhdGlvbgorICogb3Igc3BhY2UgZm9sZGluZy4pCisgKgorICogUmV0dXJuIDAgaWYgZXF1YWwsIC0xIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB4NTA5X25hbWVfY21wKCBjb25zdCBtYmVkdGxzX3g1MDlfbmFtZSAqYSwgY29uc3QgbWJlZHRsc194NTA5X25hbWUgKmIgKQoreworICAgIC8qIEF2b2lkIHJlY3Vyc2lvbiwgaXQgbWlnaHQgbm90IGJlIG9wdGltaXNlZCBieSB0aGUgY29tcGlsZXIgKi8KKyAgICB3aGlsZSggYSAhPSBOVUxMIHx8IGIgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggYSA9PSBOVUxMIHx8IGIgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICAgICAgLyogdHlwZSAqLworICAgICAgICBpZiggYS0+b2lkLnRhZyAhPSBiLT5vaWQudGFnIHx8CisgICAgICAgICAgICBhLT5vaWQubGVuICE9IGItPm9pZC5sZW4gfHwKKyAgICAgICAgICAgIG1lbWNtcCggYS0+b2lkLnAsIGItPm9pZC5wLCBiLT5vaWQubGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHZhbHVlICovCisgICAgICAgIGlmKCB4NTA5X3N0cmluZ19jbXAoICZhLT52YWwsICZiLT52YWwgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKworICAgICAgICAvKiBzdHJ1Y3R1cmUgb2YgdGhlIGxpc3Qgb2Ygc2V0cyAqLworICAgICAgICBpZiggYS0+bmV4dF9tZXJnZWQgIT0gYi0+bmV4dF9tZXJnZWQgKQorICAgICAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgICAgIGEgPSBhLT5uZXh0OworICAgICAgICBiID0gYi0+bmV4dDsKKyAgICB9CisKKyAgICAvKiBhID09IE5VTEwgPT0gYiAqLworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ2hlY2sgaWYgJ3BhcmVudCcgaXMgYSBzdWl0YWJsZSBwYXJlbnQgKHNpZ25pbmcgQ0EpIGZvciAnY2hpbGQnLgorICogUmV0dXJuIDAgaWYgeWVzLCAtMSBpZiBub3QuCisgKgorICogdG9wIG1lYW5zIHBhcmVudCBpcyBhIGxvY2FsbHktdHJ1c3RlZCBjZXJ0aWZpY2F0ZQorICogYm90dG9tIG1lYW5zIGNoaWxkIGlzIHRoZSBlbmQgZW50aXR5IGNlcnQKKyAqLworc3RhdGljIGludCB4NTA5X2NydF9jaGVja19wYXJlbnQoIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKmNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKnBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgYm90dG9tICkKK3sKKyAgICBpbnQgbmVlZF9jYV9iaXQ7CisKKyAgICAvKiBQYXJlbnQgbXVzdCBiZSB0aGUgaXNzdWVyICovCisgICAgaWYoIHg1MDlfbmFtZV9jbXAoICZjaGlsZC0+aXNzdWVyLCAmcGFyZW50LT5zdWJqZWN0ICkgIT0gMCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIC8qIFBhcmVudCBtdXN0IGhhdmUgdGhlIGJhc2ljQ29uc3RyYWludHMgQ0EgYml0IHNldCBhcyBhIGdlbmVyYWwgcnVsZSAqLworICAgIG5lZWRfY2FfYml0ID0gMTsKKworICAgIC8qIEV4Y2VwdGlvbjogdjEvdjIgY2VydGlmaWNhdGVzIHRoYXQgYXJlIGxvY2FsbHkgdHJ1c3RlZC4gKi8KKyAgICBpZiggdG9wICYmIHBhcmVudC0+dmVyc2lvbiA8IDMgKQorICAgICAgICBuZWVkX2NhX2JpdCA9IDA7CisKKyAgICAvKiBFeGNlcHRpb246IHNlbGYtc2lnbmVkIGVuZC1lbnRpdHkgY2VydHMgdGhhdCBhcmUgbG9jYWxseSB0cnVzdGVkLiAqLworICAgIGlmKCB0b3AgJiYgYm90dG9tICYmCisgICAgICAgIGNoaWxkLT5yYXcubGVuID09IHBhcmVudC0+cmF3LmxlbiAmJgorICAgICAgICBtZW1jbXAoIGNoaWxkLT5yYXcucCwgcGFyZW50LT5yYXcucCwgY2hpbGQtPnJhdy5sZW4gKSA9PSAwICkKKyAgICB7CisgICAgICAgIG5lZWRfY2FfYml0ID0gMDsKKyAgICB9CisKKyAgICBpZiggbmVlZF9jYV9iaXQgJiYgISBwYXJlbnQtPmNhX2lzdHJ1ZSApCisgICAgICAgIHJldHVybiggLTEgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRSkKKyAgICBpZiggbmVlZF9jYV9iaXQgJiYKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UoIHBhcmVudCwgTUJFRFRMU19YNTA5X0tVX0tFWV9DRVJUX1NJR04gKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHg1MDlfY3J0X3ZlcmlmeV90b3AoCisgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqY2hpbGQsIG1iZWR0bHNfeDUwOV9jcnQgKnRydXN0X2NhLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCwKKyAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgaW50IHBhdGhfY250LCBpbnQgc2VsZl9jbnQsIHVpbnQzMl90ICpmbGFncywKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopLAorICAgICAgICAgICAgICAgIHZvaWQgKnBfdnJmeSApCit7CisgICAgaW50IHJldDsKKyAgICB1aW50MzJfdCBjYV9mbGFncyA9IDA7CisgICAgaW50IGNoZWNrX3BhdGhfY250OworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCAmY2hpbGQtPnZhbGlkX3RvICkgKQorICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRDsKKworICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoICZjaGlsZC0+dmFsaWRfZnJvbSApICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0ZVVFVSRTsKKworICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfbWRfYWxnKCBwcm9maWxlLCBjaGlsZC0+c2lnX21kICkgIT0gMCApCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfTUQ7CisKKyAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX3BrX2FsZyggcHJvZmlsZSwgY2hpbGQtPnNpZ19wayApICE9IDAgKQorICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX1BLOworCisgICAgLyoKKyAgICAgKiBDaGlsZCBpcyB0aGUgdG9wIG9mIHRoZSBjaGFpbi4gQ2hlY2sgYWdhaW5zdCB0aGUgdHJ1c3RfY2EgbGlzdC4KKyAgICAgKi8KKyAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggY2hpbGQtPnNpZ19tZCApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2Fubm90IGNoZWNrICd1bmtub3duJywgbm8gbmVlZCB0byB0cnkgYW55IENBCisgICAgICAgICAqLworICAgICAgICB0cnVzdF9jYSA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19tZCggbWRfaW5mbywgY2hpbGQtPnRicy5wLCBjaGlsZC0+dGJzLmxlbiwgaGFzaCApOworCisgICAgZm9yKCAvKiB0cnVzdF9jYSAqLyA7IHRydXN0X2NhICE9IE5VTEw7IHRydXN0X2NhID0gdHJ1c3RfY2EtPm5leHQgKQorICAgIHsKKyAgICAgICAgaWYoIHg1MDlfY3J0X2NoZWNrX3BhcmVudCggY2hpbGQsIHRydXN0X2NhLCAxLCBwYXRoX2NudCA9PSAwICkgIT0gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjaGVja19wYXRoX2NudCA9IHBhdGhfY250ICsgMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBSZWR1Y2UgY2hlY2tfcGF0aF9jbnQgdG8gY2hlY2sgYWdhaW5zdCBpZiB0b3Agb2YgdGhlIGNoYWluIGlzCisgICAgICAgICAqIHRoZSBzYW1lIGFzIHRoZSB0cnVzdGVkIENBCisgICAgICAgICAqLworICAgICAgICBpZiggY2hpbGQtPnN1YmplY3RfcmF3LmxlbiA9PSB0cnVzdF9jYS0+c3ViamVjdF9yYXcubGVuICYmCisgICAgICAgICAgICBtZW1jbXAoIGNoaWxkLT5zdWJqZWN0X3Jhdy5wLCB0cnVzdF9jYS0+c3ViamVjdF9yYXcucCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+aXNzdWVyX3Jhdy5sZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tfcGF0aF9jbnQtLTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNlbGYgc2lnbmVkIGNlcnRpZmljYXRlcyBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgbGltaXQgKi8KKyAgICAgICAgaWYoIHRydXN0X2NhLT5tYXhfcGF0aGxlbiA+IDAgJiYKKyAgICAgICAgICAgIHRydXN0X2NhLT5tYXhfcGF0aGxlbiA8IGNoZWNrX3BhdGhfY250IC0gc2VsZl9jbnQgKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0KCAmdHJ1c3RfY2EtPnZhbGlkX3RvICkgKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoICZ0cnVzdF9jYS0+dmFsaWRfZnJvbSApICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiggbWJlZHRsc19wa192ZXJpZnlfZXh0KCBjaGlsZC0+c2lnX3BrLCBjaGlsZC0+c2lnX29wdHMsICZ0cnVzdF9jYS0+cGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2lnX21kLCBoYXNoLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2lnLnAsIGNoaWxkLT5zaWcubGVuICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVG9wIG9mIGNoYWluIGlzIHNpZ25lZCBieSBhIHRydXN0ZWQgQ0EKKyAgICAgICAgICovCisgICAgICAgICpmbGFncyAmPSB+TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ7CisKKyAgICAgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19rZXkoIHByb2ZpbGUsIGNoaWxkLT5zaWdfcGssICZ0cnVzdF9jYS0+cGsgKSAhPSAwICkKKyAgICAgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfS0VZOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdG9wIG9mIGNoYWluIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgdHJ1c3RlZCBDQSBzZW5kIGEgdmVyaWZ5IHJlcXVlc3QKKyAgICAgKiB0byB0aGUgY2FsbGJhY2sgZm9yIGFueSBpc3N1ZXMgd2l0aCB2YWxpZGl0eSBhbmQgQ1JMIHByZXNlbmNlIGZvciB0aGUKKyAgICAgKiB0cnVzdGVkIENBIGNlcnRpZmljYXRlLgorICAgICAqLworICAgIGlmKCB0cnVzdF9jYSAhPSBOVUxMICYmCisgICAgICAgICggY2hpbGQtPnN1YmplY3RfcmF3LmxlbiAhPSB0cnVzdF9jYS0+c3ViamVjdF9yYXcubGVuIHx8CisgICAgICAgICAgbWVtY21wKCBjaGlsZC0+c3ViamVjdF9yYXcucCwgdHJ1c3RfY2EtPnN1YmplY3RfcmF3LnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmlzc3Vlcl9yYXcubGVuICkgIT0gMCApICkKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisgICAgICAgIC8qIENoZWNrIHRydXN0ZWQgQ0EncyBDUkwgZm9yIHRoZSBjaGFpbidzIHRvcCBjcnQgKi8KKyAgICAgICAgKmZsYWdzIHw9IHg1MDlfY3J0X3ZlcmlmeWNybCggY2hpbGQsIHRydXN0X2NhLCBjYV9jcmwsIHByb2ZpbGUgKTsKKyNlbHNlCisgICAgICAgICgodm9pZCkgY2FfY3JsKTsKKyNlbmRpZgorCisgICAgICAgIGlmKCBOVUxMICE9IGZfdnJmeSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IGZfdnJmeSggcF92cmZ5LCB0cnVzdF9jYSwgcGF0aF9jbnQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FfZmxhZ3MgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDYWxsIGNhbGxiYWNrIG9uIHRvcCBjZXJ0ICovCisgICAgaWYoIE5VTEwgIT0gZl92cmZ5ICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IGZfdnJmeSggcF92cmZ5LCBjaGlsZCwgcGF0aF9jbnQsIGZsYWdzICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgKmZsYWdzIHw9IGNhX2ZsYWdzOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgeDUwOV9jcnRfdmVyaWZ5X2NoaWxkKAorICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNoaWxkLCBtYmVkdGxzX3g1MDlfY3J0ICpwYXJlbnQsCisgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydCAqdHJ1c3RfY2EsIG1iZWR0bHNfeDUwOV9jcmwgKmNhX2NybCwKKyAgICAgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3g1MDlfY3J0X3Byb2ZpbGUgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgaW50IHBhdGhfY250LCBpbnQgc2VsZl9jbnQsIHVpbnQzMl90ICpmbGFncywKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopLAorICAgICAgICAgICAgICAgIHZvaWQgKnBfdnJmeSApCit7CisgICAgaW50IHJldDsKKyAgICB1aW50MzJfdCBwYXJlbnRfZmxhZ3MgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpncmFuZHBhcmVudDsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgIC8qIENvdW50aW5nIGludGVybWVkaWF0ZSBzZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZXMgKi8KKyAgICBpZiggKCBwYXRoX2NudCAhPSAwICkgJiYgeDUwOV9uYW1lX2NtcCggJmNoaWxkLT5pc3N1ZXIsICZjaGlsZC0+c3ViamVjdCApID09IDAgKQorICAgICAgICBzZWxmX2NudCsrOworCisgICAgLyogcGF0aF9jbnQgaXMgMCBmb3IgdGhlIGZpcnN0IGludGVybWVkaWF0ZSBDQSAqLworICAgIGlmKCAxICsgcGF0aF9jbnQgPiBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSApCisgICAgeworICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQgKTsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggJmNoaWxkLT52YWxpZF90byApICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0VYUElSRUQ7CisKKyAgICBpZiggbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlKCAmY2hpbGQtPnZhbGlkX2Zyb20gKSApCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkU7CisKKyAgICBpZiggeDUwOV9wcm9maWxlX2NoZWNrX21kX2FsZyggcHJvZmlsZSwgY2hpbGQtPnNpZ19tZCApICE9IDAgKQorICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX01EOworCisgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19wa19hbGcoIHByb2ZpbGUsIGNoaWxkLT5zaWdfcGsgKSAhPSAwICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9QSzsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBjaGlsZC0+c2lnX21kICk7CisgICAgaWYoIG1kX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBDYW5ub3QgY2hlY2sgJ3Vua25vd24nIGhhc2gKKyAgICAgICAgICovCisgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWJlZHRsc19tZCggbWRfaW5mbywgY2hpbGQtPnRicy5wLCBjaGlsZC0+dGJzLmxlbiwgaGFzaCApOworCisgICAgICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfa2V5KCBwcm9maWxlLCBjaGlsZC0+c2lnX3BrLCAmcGFyZW50LT5wayApICE9IDAgKQorICAgICAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9LRVk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCggY2hpbGQtPnNpZ19waywgY2hpbGQtPnNpZ19vcHRzLCAmcGFyZW50LT5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zaWdfbWQsIGhhc2gsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5zaWcucCwgY2hpbGQtPnNpZy5sZW4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOworICAgICAgICB9CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisgICAgLyogQ2hlY2sgdHJ1c3RlZCBDQSdzIENSTCBmb3IgdGhlIGdpdmVuIGNydCAqLworICAgICpmbGFncyB8PSB4NTA5X2NydF92ZXJpZnljcmwoY2hpbGQsIHBhcmVudCwgY2FfY3JsLCBwcm9maWxlICk7CisjZW5kaWYKKworICAgIC8qIExvb2sgZm9yIGEgZ3JhbmRwYXJlbnQgaW4gdHJ1c3RlZCBDQXMgKi8KKyAgICBmb3IoIGdyYW5kcGFyZW50ID0gdHJ1c3RfY2E7CisgICAgICAgICBncmFuZHBhcmVudCAhPSBOVUxMOworICAgICAgICAgZ3JhbmRwYXJlbnQgPSBncmFuZHBhcmVudC0+bmV4dCApCisgICAgeworICAgICAgICBpZiggeDUwOV9jcnRfY2hlY2tfcGFyZW50KCBwYXJlbnQsIGdyYW5kcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXRoX2NudCA9PSAwICkgPT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiggZ3JhbmRwYXJlbnQgIT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSB4NTA5X2NydF92ZXJpZnlfdG9wKCBwYXJlbnQsIGdyYW5kcGFyZW50LCBjYV9jcmwsIHByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY250ICsgMSwgc2VsZl9jbnQsICZwYXJlbnRfZmxhZ3MsIGZfdnJmeSwgcF92cmZ5ICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBMb29rIGZvciBhIGdyYW5kcGFyZW50IHVwd2FyZHMgdGhlIGNoYWluICovCisgICAgICAgIGZvciggZ3JhbmRwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisgICAgICAgICAgICAgZ3JhbmRwYXJlbnQgIT0gTlVMTDsKKyAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGdyYW5kcGFyZW50LT5uZXh0ICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogKzIgYmVjYXVzZSB0aGUgY3VycmVudCBzdGVwIGlzIG5vdCB5ZXQgYWNjb3VudGVkIGZvcgorICAgICAgICAgICAgICogYW5kIGJlY2F1c2UgbWF4X3BhdGhsZW4gaXMgb25lIGhpZ2hlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICAgICAgICAgICAqIEFsc28gc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzIGRvIG5vdCBjb3VudCB0byB0aGUgbGltaXQuICovCisgICAgICAgICAgICBpZiggZ3JhbmRwYXJlbnQtPm1heF9wYXRobGVuID4gMCAmJgorICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LT5tYXhfcGF0aGxlbiA8IDIgKyBwYXRoX2NudCAtIHNlbGZfY250ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHg1MDlfY3J0X2NoZWNrX3BhcmVudCggcGFyZW50LCBncmFuZHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBhdGhfY250ID09IDAgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElzIG91ciBwYXJlbnQgcGFydCBvZiB0aGUgY2hhaW4gb3IgYXQgdGhlIHRvcD8gKi8KKyAgICAgICAgaWYoIGdyYW5kcGFyZW50ICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSB4NTA5X2NydF92ZXJpZnlfY2hpbGQoIHBhcmVudCwgZ3JhbmRwYXJlbnQsIHRydXN0X2NhLCBjYV9jcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUsIHBhdGhfY250ICsgMSwgc2VsZl9jbnQsICZwYXJlbnRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfdnJmeSwgcF92cmZ5ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSB4NTA5X2NydF92ZXJpZnlfdG9wKCBwYXJlbnQsIHRydXN0X2NhLCBjYV9jcmwsIHByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NudCArIDEsIHNlbGZfY250LCAmcGFyZW50X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl92cmZ5LCBwX3ZyZnkgKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNoaWxkIGlzIHZlcmlmaWVkIHRvIGJlIGEgY2hpbGQgb2YgdGhlIHBhcmVudCwgY2FsbCB2ZXJpZnkgY2FsbGJhY2sgKi8KKyAgICBpZiggTlVMTCAhPSBmX3ZyZnkgKQorICAgICAgICBpZiggKCByZXQgPSBmX3ZyZnkoIHBfdnJmeSwgY2hpbGQsIHBhdGhfY250LCBmbGFncyApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgKmZsYWdzIHw9IHBhcmVudF9mbGFnczsKKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eQorICovCitpbnQgbWJlZHRsc194NTA5X2NydF92ZXJpZnkoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKnRydXN0X2NhLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY24sIHVpbnQzMl90ICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfdnJmeSkodm9pZCAqLCBtYmVkdGxzX3g1MDlfY3J0ICosIGludCwgdWludDMyX3QgKiksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKQoreworICAgIHJldHVybiggbWJlZHRsc194NTA5X2NydF92ZXJpZnlfd2l0aF9wcm9maWxlKCBjcnQsIHRydXN0X2NhLCBjYV9jcmwsCisgICAgICAgICAgICAgICAgJm1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9kZWZhdWx0LCBjbiwgZmxhZ3MsIGZfdnJmeSwgcF92cmZ5ICkgKTsKK30KKworCisvKgorICogVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSwgd2l0aCBwcm9maWxlCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV93aXRoX3Byb2ZpbGUoIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgKnRydXN0X2NhLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NybCAqY2FfY3JsLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWJlZHRsc194NTA5X2NydF9wcm9maWxlICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY24sIHVpbnQzMl90ICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZfdnJmeSkodm9pZCAqLCBtYmVkdGxzX3g1MDlfY3J0ICosIGludCwgdWludDMyX3QgKiksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3ZyZnkgKQoreworICAgIHNpemVfdCBjbl9sZW47CisgICAgaW50IHJldDsKKyAgICBpbnQgcGF0aGxlbiA9IDAsIHNlbGZzaWduZWQgPSAwOworICAgIG1iZWR0bHNfeDUwOV9jcnQgKnBhcmVudDsKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSAqbmFtZTsKKyAgICBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKmN1ciA9IE5VTEw7CisgICAgbWJlZHRsc19wa190eXBlX3QgcGtfdHlwZTsKKworICAgIGlmKCBwcm9maWxlID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgICpmbGFncyA9IDA7CisKKyAgICBpZiggY24gIT0gTlVMTCApCisgICAgeworICAgICAgICBuYW1lID0gJmNydC0+c3ViamVjdDsKKyAgICAgICAgY25fbGVuID0gc3RybGVuKCBjbiApOworCisgICAgICAgIGlmKCBjcnQtPmV4dF90eXBlcyAmIE1CRURUTFNfWDUwOV9FWFRfU1VCSkVDVF9BTFRfTkFNRSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1ciA9ICZjcnQtPnN1YmplY3RfYWx0X25hbWVzOworCisgICAgICAgICAgICB3aGlsZSggY3VyICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBjdXItPmJ1Zi5sZW4gPT0gY25fbGVuICYmCisgICAgICAgICAgICAgICAgICAgIHg1MDlfbWVtY2FzZWNtcCggY24sIGN1ci0+YnVmLnAsIGNuX2xlbiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGlmKCBjdXItPmJ1Zi5sZW4gPiAyICYmCisgICAgICAgICAgICAgICAgICAgIG1lbWNtcCggY3VyLT5idWYucCwgIiouIiwgMiApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgeDUwOV9jaGVja193aWxkY2FyZCggY24sICZjdXItPmJ1ZiApID09IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggY3VyID09IE5VTEwgKQorICAgICAgICAgICAgICAgICpmbGFncyB8PSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlKCBuYW1lICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBNQkVEVExTX09JRF9DTVAoIE1CRURUTFNfT0lEX0FUX0NOLCAmbmFtZS0+b2lkICkgPT0gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiggbmFtZS0+dmFsLmxlbiA9PSBjbl9sZW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHg1MDlfbWVtY2FzZWNtcCggbmFtZS0+dmFsLnAsIGNuLCBjbl9sZW4gKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGlmKCBuYW1lLT52YWwubGVuID4gMiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKCBuYW1lLT52YWwucCwgIiouIiwgMiApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHg1MDlfY2hlY2tfd2lsZGNhcmQoIGNuLCAmbmFtZS0+dmFsICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS0+bmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIG5hbWUgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIHR5cGUgYW5kIHNpemUgb2YgdGhlIGtleSAqLworICAgIHBrX3R5cGUgPSBtYmVkdGxzX3BrX2dldF90eXBlKCAmY3J0LT5wayApOworCisgICAgaWYoIHg1MDlfcHJvZmlsZV9jaGVja19wa19hbGcoIHByb2ZpbGUsIHBrX3R5cGUgKSAhPSAwICkKKyAgICAgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9QSzsKKworICAgIGlmKCB4NTA5X3Byb2ZpbGVfY2hlY2tfa2V5KCBwcm9maWxlLCBwa190eXBlLCAmY3J0LT5wayApICE9IDAgKQorICAgICAgICAqZmxhZ3MgfD0gTUJFRFRMU19YNTA5X0JBRENFUlRfQkFEX0tFWTsKKworICAgIC8qIExvb2sgZm9yIGEgcGFyZW50IGluIHRydXN0ZWQgQ0FzICovCisgICAgZm9yKCBwYXJlbnQgPSB0cnVzdF9jYTsgcGFyZW50ICE9IE5VTEw7IHBhcmVudCA9IHBhcmVudC0+bmV4dCApCisgICAgeworICAgICAgICBpZiggeDUwOV9jcnRfY2hlY2tfcGFyZW50KCBjcnQsIHBhcmVudCwgMCwgcGF0aGxlbiA9PSAwICkgPT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiggcGFyZW50ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0geDUwOV9jcnRfdmVyaWZ5X3RvcCggY3J0LCBwYXJlbnQsIGNhX2NybCwgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aGxlbiwgc2VsZnNpZ25lZCwgZmxhZ3MsIGZfdnJmeSwgcF92cmZ5ICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBMb29rIGZvciBhIHBhcmVudCB1cHdhcmRzIHRoZSBjaGFpbiAqLworICAgICAgICBmb3IoIHBhcmVudCA9IGNydC0+bmV4dDsgcGFyZW50ICE9IE5VTEw7IHBhcmVudCA9IHBhcmVudC0+bmV4dCApCisgICAgICAgICAgICBpZiggeDUwOV9jcnRfY2hlY2tfcGFyZW50KCBjcnQsIHBhcmVudCwgMCwgcGF0aGxlbiA9PSAwICkgPT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogQXJlIHdlIHBhcnQgb2YgdGhlIGNoYWluIG9yIGF0IHRoZSB0b3A/ICovCisgICAgICAgIGlmKCBwYXJlbnQgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IHg1MDlfY3J0X3ZlcmlmeV9jaGlsZCggY3J0LCBwYXJlbnQsIHRydXN0X2NhLCBjYV9jcmwsIHByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhsZW4sIHNlbGZzaWduZWQsIGZsYWdzLCBmX3ZyZnksIHBfdnJmeSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0geDUwOV9jcnRfdmVyaWZ5X3RvcCggY3J0LCB0cnVzdF9jYSwgY2FfY3JsLCBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aGxlbiwgc2VsZnNpZ25lZCwgZmxhZ3MsIGZfdnJmeSwgcF92cmZ5ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggKmZsYWdzICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBjZXJ0aWZpY2F0ZSBjaGFpbgorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggbWJlZHRsc194NTA5X2NydCAqY3J0ICkKK3sKKyAgICBtZW1zZXQoIGNydCwgMCwgc2l6ZW9mKG1iZWR0bHNfeDUwOV9jcnQpICk7Cit9CisKKy8qCisgKiBVbmFsbG9jYXRlIGFsbCBjZXJ0aWZpY2F0ZSBkYXRhCisgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NydF9mcmVlKCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNlcnRfY3VyID0gY3J0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgKmNlcnRfcHJ2OworICAgIG1iZWR0bHNfeDUwOV9uYW1lICpuYW1lX2N1cjsKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSAqbmFtZV9wcnY7CisgICAgbWJlZHRsc194NTA5X3NlcXVlbmNlICpzZXFfY3VyOworICAgIG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSAqc2VxX3BydjsKKworICAgIGlmKCBjcnQgPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIGRvCisgICAgeworICAgICAgICBtYmVkdGxzX3BrX2ZyZWUoICZjZXJ0X2N1ci0+cGsgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCkKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjZXJ0X2N1ci0+c2lnX29wdHMgKTsKKyNlbmRpZgorCisgICAgICAgIG5hbWVfY3VyID0gY2VydF9jdXItPmlzc3Vlci5uZXh0OworICAgICAgICB3aGlsZSggbmFtZV9jdXIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5hbWVfcHJ2ID0gbmFtZV9jdXI7CisgICAgICAgICAgICBuYW1lX2N1ciA9IG5hbWVfY3VyLT5uZXh0OworICAgICAgICAgICAgbWJlZHRsc196ZXJvaXplKCBuYW1lX3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfbmFtZSApICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIG5hbWVfcHJ2ICk7CisgICAgICAgIH0KKworICAgICAgICBuYW1lX2N1ciA9IGNlcnRfY3VyLT5zdWJqZWN0Lm5leHQ7CisgICAgICAgIHdoaWxlKCBuYW1lX2N1ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZV9wcnYgPSBuYW1lX2N1cjsKKyAgICAgICAgICAgIG5hbWVfY3VyID0gbmFtZV9jdXItPm5leHQ7CisgICAgICAgICAgICBtYmVkdGxzX3plcm9pemUoIG5hbWVfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9uYW1lICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggbmFtZV9wcnYgKTsKKyAgICAgICAgfQorCisgICAgICAgIHNlcV9jdXIgPSBjZXJ0X2N1ci0+ZXh0X2tleV91c2FnZS5uZXh0OworICAgICAgICB3aGlsZSggc2VxX2N1ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgc2VxX3BydiA9IHNlcV9jdXI7CisgICAgICAgICAgICBzZXFfY3VyID0gc2VxX2N1ci0+bmV4dDsKKyAgICAgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggc2VxX3Bydiwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfc2VxdWVuY2UgKSApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBzZXFfcHJ2ICk7CisgICAgICAgIH0KKworICAgICAgICBzZXFfY3VyID0gY2VydF9jdXItPnN1YmplY3RfYWx0X25hbWVzLm5leHQ7CisgICAgICAgIHdoaWxlKCBzZXFfY3VyICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBzZXFfcHJ2ID0gc2VxX2N1cjsKKyAgICAgICAgICAgIHNlcV9jdXIgPSBzZXFfY3VyLT5uZXh0OworICAgICAgICAgICAgbWJlZHRsc196ZXJvaXplKCBzZXFfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9zZXF1ZW5jZSApICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIHNlcV9wcnYgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBjZXJ0X2N1ci0+cmF3LnAgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggY2VydF9jdXItPnJhdy5wLCBjZXJ0X2N1ci0+cmF3LmxlbiApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBjZXJ0X2N1ci0+cmF3LnAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGNlcnRfY3VyID0gY2VydF9jdXItPm5leHQ7CisgICAgfQorICAgIHdoaWxlKCBjZXJ0X2N1ciAhPSBOVUxMICk7CisKKyAgICBjZXJ0X2N1ciA9IGNydDsKKyAgICBkbworICAgIHsKKyAgICAgICAgY2VydF9wcnYgPSBjZXJ0X2N1cjsKKyAgICAgICAgY2VydF9jdXIgPSBjZXJ0X2N1ci0+bmV4dDsKKworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGNlcnRfcHJ2LCBzaXplb2YoIG1iZWR0bHNfeDUwOV9jcnQgKSApOworICAgICAgICBpZiggY2VydF9wcnYgIT0gY3J0ICkKKyAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggY2VydF9wcnYgKTsKKyAgICB9CisgICAgd2hpbGUoIGNlcnRfY3VyICE9IE5VTEwgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOV9jc3IuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3NyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZDA2YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDlfY3NyLmMKQEAgLTAsMCArMSw0MjMgQEAKKy8qCisgKiAgWC41MDkgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0IChDU1IpIHBhcnNpbmcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKy8qCisgKiAgVGhlIElUVS1UIFguNTA5IHN0YW5kYXJkIGRlZmluZXMgYSBjZXJ0aWZpY2F0ZSBmb3JtYXQgZm9yIFBLSS4KKyAqCisgKiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNTI4MC50eHQgKENlcnRpZmljYXRlcyBhbmQgQ1JMcykKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMjc5LnR4dCAoQWxnIElEcyBmb3IgQ1JMcykKKyAqICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTg2LnR4dCAoQ1NScywgYWthIFBLQ1MjMTApCisgKgorICogIGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9zdHVkeWdyb3Vwcy9jb20xNy9sYW5ndWFnZXMvWC42ODAtMDIwNy5wZGYKKyAqICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvc3R1ZHlncm91cHMvY29tMTcvbGFuZ3VhZ2VzL1guNjkwLTAyMDcucGRmCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2Nzci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgIGNhbGxvYworI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCBkZWZpbmVkKEVGSVg2NCkgfHwgZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAgVmVyc2lvbiAgOjo9ICBJTlRFR0VSICB7ICB2MSgwKSAgfQorICovCitzdGF0aWMgaW50IHg1MDlfY3NyX2dldF92ZXJzaW9uKCB1bnNpZ25lZCBjaGFyICoqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnZlciApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfaW50KCBwLCBlbmQsIHZlciApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgKQorICAgICAgICB7CisgICAgICAgICAgICAqdmVyID0gMDsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfVkVSU0lPTiArIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogUGFyc2UgYSBDU1IgaW4gREVSIGZvcm1hdAorICovCitpbnQgbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9kZXIoIG1iZWR0bHNfeDUwOV9jc3IgKmNzciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnAsICplbmQ7CisgICAgbWJlZHRsc194NTA5X2J1ZiBzaWdfcGFyYW1zOworCisgICAgbWVtc2V0KCAmc2lnX3BhcmFtcywgMCwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfYnVmICkgKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIHZhbGlkIGlucHV0CisgICAgICovCisgICAgaWYoIGNzciA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGJ1ZmxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3NyX2luaXQoIGNzciApOworCisgICAgLyoKKyAgICAgKiBmaXJzdCBjb3B5IHRoZSByYXcgREVSIGRhdGEKKyAgICAgKi8KKyAgICBwID0gbWJlZHRsc19jYWxsb2MoIDEsIGxlbiA9IGJ1ZmxlbiApOworCisgICAgaWYoIHAgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9BTExPQ19GQUlMRUQgKTsKKworICAgIG1lbWNweSggcCwgYnVmLCBidWZsZW4gKTsKKworICAgIGNzci0+cmF3LnAgPSBwOworICAgIGNzci0+cmF3LmxlbiA9IGxlbjsKKyAgICBlbmQgPSBwICsgbGVuOworCisgICAgLyoKKyAgICAgKiAgQ2VydGlmaWNhdGlvblJlcXVlc3QgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgICBjZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm8gQ2VydGlmaWNhdGlvblJlcXVlc3RJbmZvLAorICAgICAqICAgICAgIHNpZ25hdHVyZUFsZ29yaXRobSBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICAgICAgIHNpZ25hdHVyZSAgICAgICAgICBCSVQgU1RSSU5HCisgICAgICogIH0KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X3RhZyggJnAsIGVuZCwgJmxlbiwKKyAgICAgICAgICAgIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKTsKKyAgICB9CisKKyAgICBpZiggbGVuICE9IChzaXplX3QpICggZW5kIC0gcCApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggY3NyICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArCisgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0ggKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBDZXJ0aWZpY2F0aW9uUmVxdWVzdEluZm8gOjo9IFNFUVVFTkNFIHsKKyAgICAgKi8KKyAgICBjc3ItPmNyaS5wID0gcDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCAmcCwgZW5kLCAmbGVuLAorICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggY3NyICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIHJldCApOworICAgIH0KKworICAgIGVuZCA9IHAgKyBsZW47CisgICAgY3NyLT5jcmkubGVuID0gZW5kIC0gY3NyLT5jcmkucDsKKworICAgIC8qCisgICAgICogIFZlcnNpb24gIDo6PSAgSU5URUdFUiB7ICB2MSgwKSB9CisgICAgICovCisgICAgaWYoICggcmV0ID0geDUwOV9jc3JfZ2V0X3ZlcnNpb24oICZwLCBlbmQsICZjc3ItPnZlcnNpb24gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBjc3ItPnZlcnNpb24rKzsKKworICAgIGlmKCBjc3ItPnZlcnNpb24gIT0gMSApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgc3ViamVjdCAgICAgICAgICAgICAgIE5hbWUKKyAgICAgKi8KKyAgICBjc3ItPnN1YmplY3RfcmF3LnAgPSBwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9uYW1lKCAmcCwgcCArIGxlbiwgJmNzci0+c3ViamVjdCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGNzci0+c3ViamVjdF9yYXcubGVuID0gcCAtIGNzci0+c3ViamVjdF9yYXcucDsKKworICAgIC8qCisgICAgICogIHN1YmplY3RQS0luZm8gU3ViamVjdFB1YmxpY0tleUluZm8KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX3N1YnB1YmtleSggJnAsIGVuZCwgJmNzci0+cGsgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCBjc3IgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBhdHRyaWJ1dGVzICAgIFswXSBBdHRyaWJ1dGVzCisgICAgICoKKyAgICAgKiAgVGhlIGxpc3Qgb2YgcG9zc2libGUgYXR0cmlidXRlcyBpcyBvcGVuLWVuZGVkLCB0aG91Z2ggUkZDIDI5ODUKKyAgICAgKiAgKFBLQ1MjOSkgZGVmaW5lcyBhIGZldyBpbiBzZWN0aW9uIDUuNC4gV2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgYW55LAorICAgICAqICBzbyB3ZSBqdXN0IGlnbm9yZSB0aGVtLiBUaGlzIGlzIGEgc2FmZSB0aGluZyB0byBkbyBhcyB0aGUgd29yc3QgdGhpbmcKKyAgICAgKiAgdGhhdCBjb3VsZCBoYXBwZW4gaXMgdGhhdCB3ZSBpc3N1ZSBhIGNlcnRpZmljYXRlIHRoYXQgZG9lcyBub3QgbWF0Y2gKKyAgICAgKiAgdGhlIHJlcXVlc3RlcidzIGV4cGVjdGF0aW9ucyAtIHRoaXMgY2Fubm90IGNhdXNlIGEgdmlvbGF0aW9uIG9mIG91cgorICAgICAqICBzaWduYXR1cmUgcG9saWNpZXMuCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX2dldF90YWcoICZwLCBlbmQsICZsZW4sCisgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyByZXQgKTsKKyAgICB9CisKKyAgICBwICs9IGxlbjsKKworICAgIGVuZCA9IGNzci0+cmF3LnAgKyBjc3ItPnJhdy5sZW47CisKKyAgICAvKgorICAgICAqICBzaWduYXR1cmVBbGdvcml0aG0gICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgICAqICBzaWduYXR1cmUgICAgICAgICAgICBCSVQgU1RSSU5HCisgICAgICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9hbGcoICZwLCBlbmQsICZjc3ItPnNpZ19vaWQsICZzaWdfcGFyYW1zICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggY3NyICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9zaWdfYWxnKCAmY3NyLT5zaWdfb2lkLCAmc2lnX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3NyLT5zaWdfbWQsICZjc3ItPnNpZ19waywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3NyLT5zaWdfb3B0cyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2dldF9zaWcoICZwLCBlbmQsICZjc3ItPnNpZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIGlmKCBwICE9IGVuZCApCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoIGNzciApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKworICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENIICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBQYXJzZSBhIENTUiwgYWxsb3dpbmcgZm9yIFBFTSBvciByYXcgREVSIGVuY29kaW5nCisgKi8KK2ludCBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlKCBtYmVkdGxzX3g1MDlfY3NyICpjc3IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgc2l6ZV90IHVzZV9sZW47CisgICAgbWJlZHRsc19wZW1fY29udGV4dCBwZW07CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIHZhbGlkIGlucHV0CisgICAgICovCisgICAgaWYoIGNzciA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGJ1ZmxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCisgICAgbWJlZHRsc19wZW1faW5pdCggJnBlbSApOworCisgICAgLyogQXZvaWQgY2FsbGluZyBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcigpIG9uIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCisgICAgaWYoIGJ1ZltidWZsZW4gLSAxXSAhPSAnXDAnICkKKyAgICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVDsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGVtX3JlYWRfYnVmZmVyKCAmcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBOVUxMLCAwLCAmdXNlX2xlbiApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFdhcyBQRU0gZW5jb2RlZCwgcGFyc2UgdGhlIHJlc3VsdAorICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9kZXIoIGNzciwgcGVtLmJ1ZiwgcGVtLmJ1ZmxlbiApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcGVtX2ZyZWUoICZwZW0gKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1BBUlNFX0MgKi8KKyAgICByZXR1cm4oIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZGVyKCBjc3IsIGJ1ZiwgYnVmbGVuICkgKTsKK30KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKy8qCisgKiBMb2FkIGEgQ1NSIGludG8gdGhlIHN0cnVjdHVyZQorICovCitpbnQgbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9maWxlKCBtYmVkdGxzX3g1MDlfY3NyICpjc3IsIGNvbnN0IGNoYXIgKnBhdGggKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG47CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19sb2FkX2ZpbGUoIHBhdGgsICZidWYsICZuICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2UoIGNzciwgYnVmLCBuICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGJ1ZiwgbiApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfRlNfSU8gKi8KKworI2RlZmluZSBCRUZPUkVfQ09MT04gICAgMTQKKyNkZWZpbmUgQkMgICAgICAgICAgICAgICIxNCIKKy8qCisgKiBSZXR1cm4gYW4gaW5mb3JtYXRpb25hbCBzdHJpbmcgYWJvdXQgdGhlIENTUi4KKyAqLworaW50IG1iZWR0bHNfeDUwOV9jc3JfaW5mbyggY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jc3IgKmNzciApCit7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgbjsKKyAgICBjaGFyICpwOworICAgIGNoYXIga2V5X3NpemVfc3RyW0JFRk9SRV9DT0xPTl07CisKKyAgICBwID0gYnVmOworICAgIG4gPSBzaXplOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIiVzQ1NSIHZlcnNpb24gICA6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIGNzci0+dmVyc2lvbiApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuJXNzdWJqZWN0IG5hbWUgIDogIiwgcHJlZml4ICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2RuX2dldHMoIHAsIG4sICZjc3ItPnN1YmplY3QgKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzc2lnbmVkIHVzaW5nICA6ICIsIHByZWZpeCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X3NpZ19hbGdfZ2V0cyggcCwgbiwgJmNzci0+c2lnX29pZCwgY3NyLT5zaWdfcGssIGNzci0+c2lnX21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3ItPnNpZ19vcHRzICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfa2V5X3NpemVfaGVscGVyKCBrZXlfc2l6ZV9zdHIsIEJFRk9SRV9DT0xPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19nZXRfbmFtZSggJmNzci0+cGsgKSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfc25wcmludGYoIHAsIG4sICJcbiVzJS0iIEJDICJzOiAlZCBiaXRzXG4iLCBwcmVmaXgsIGtleV9zaXplX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgbWJlZHRsc19wa19nZXRfYml0bGVuKCAmY3NyLT5wayApICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXR1cm4oIChpbnQpICggc2l6ZSAtIG4gKSApOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIENTUgorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jc3JfaW5pdCggbWJlZHRsc194NTA5X2NzciAqY3NyICkKK3sKKyAgICBtZW1zZXQoIGNzciwgMCwgc2l6ZW9mKG1iZWR0bHNfeDUwOV9jc3IpICk7Cit9CisKKy8qCisgKiBVbmFsbG9jYXRlIGFsbCBDU1IgZGF0YQorICovCit2b2lkIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggbWJlZHRsc194NTA5X2NzciAqY3NyICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfbmFtZSAqbmFtZV9jdXI7CisgICAgbWJlZHRsc194NTA5X25hbWUgKm5hbWVfcHJ2OworCisgICAgaWYoIGNzciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19wa19mcmVlKCAmY3NyLT5wayApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUKQorICAgIG1iZWR0bHNfZnJlZSggY3NyLT5zaWdfb3B0cyApOworI2VuZGlmCisKKyAgICBuYW1lX2N1ciA9IGNzci0+c3ViamVjdC5uZXh0OworICAgIHdoaWxlKCBuYW1lX2N1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG5hbWVfcHJ2ID0gbmFtZV9jdXI7CisgICAgICAgIG5hbWVfY3VyID0gbmFtZV9jdXItPm5leHQ7CisgICAgICAgIG1iZWR0bHNfemVyb2l6ZSggbmFtZV9wcnYsIHNpemVvZiggbWJlZHRsc194NTA5X25hbWUgKSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIG5hbWVfcHJ2ICk7CisgICAgfQorCisgICAgaWYoIGNzci0+cmF3LnAgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3plcm9pemUoIGNzci0+cmF3LnAsIGNzci0+cmF3LmxlbiApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGNzci0+cmF3LnAgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGNzciwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3NyICkgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOXdyaXRlX2NydC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveDUwOXdyaXRlX2NydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZDlhMjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5d3JpdGVfY3J0LmMKQEAgLTAsMCArMSw0NTkgQEAKKy8qCisgKiAgWC41MDkgY2VydGlmaWNhdGUgd3JpdGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFJlZmVyZW5jZXM6CisgKiAtIGNlcnRpZmljYXRlczogUkZDIDUyODAsIHVwZGF0ZWQgYnkgUkZDIDY4MTgKKyAqIC0gQ1NSczogUEtDUyMxMCB2MS43IGFrYSBSRkMgMjk4NgorICogLSBhdHRyaWJ1dGVzOiBQS0NTIzkgdjIuMCBha2EgUkZDIDI5ODUKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0MpCisKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3J0LmgiCisjaW5jbHVkZSAibWJlZHRscy9vaWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FzbjF3cml0ZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNlbmRpZiAvKiBNQkVEVExTX1BFTV9XUklURV9DICovCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2luaXQoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZihtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0KSApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJmN0eC0+c2VyaWFsICk7CisgICAgY3R4LT52ZXJzaW9uID0gTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzM7Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2ZyZWUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCApCit7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmN0eC0+c2VyaWFsICk7CisKKyAgICBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QoICZjdHgtPnN1YmplY3QgKTsKKyAgICBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhX2xpc3QoICZjdHgtPmlzc3VlciApOworICAgIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCggJmN0eC0+ZXh0ZW5zaW9ucyApOworCisgICAgbWJlZHRsc196ZXJvaXplKCBjdHgsIHNpemVvZihtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0KSApOworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmVyc2lvbiggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBpbnQgdmVyc2lvbiApCit7CisgICAgY3R4LT52ZXJzaW9uID0gdmVyc2lvbjsKK30KKwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X21kX2FsZyggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgKQoreworICAgIGN0eC0+bWRfYWxnID0gbWRfYWxnOworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgbWJlZHRsc19wa19jb250ZXh0ICprZXkgKQoreworICAgIGN0eC0+c3ViamVjdF9rZXkgPSBrZXk7Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfa2V5KCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5ICkKK3sKKyAgICBjdHgtPmlzc3Vlcl9rZXkgPSBrZXk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3ViamVjdF9uYW1lICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcyggJmN0eC0+c3ViamVjdCwgc3ViamVjdF9uYW1lICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlzc3Vlcl9uYW1lICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lcyggJmN0eC0+aXNzdWVyLCBpc3N1ZXJfbmFtZSApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwgY29uc3QgbWJlZHRsc19tcGkgKnNlcmlhbCApCit7CisgICAgaW50IHJldDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX2NvcHkoICZjdHgtPnNlcmlhbCwgc2VyaWFsICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92YWxpZGl0eSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCBjb25zdCBjaGFyICpub3RfYmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpub3RfYWZ0ZXIgKQoreworICAgIGlmKCBzdHJsZW4oIG5vdF9iZWZvcmUgKSAhPSBNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4gLSAxIHx8CisgICAgICAgIHN0cmxlbiggbm90X2FmdGVyICkgICE9IE1CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTiAtIDEgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorICAgIHN0cm5jcHkoIGN0eC0+bm90X2JlZm9yZSwgbm90X2JlZm9yZSwgTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICk7CisgICAgc3RybmNweSggY3R4LT5ub3RfYWZ0ZXIgLCBub3RfYWZ0ZXIgLCBNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4gKTsKKyAgICBjdHgtPm5vdF9iZWZvcmVbTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOIC0gMV0gPSAnWic7CisgICAgY3R4LT5ub3RfYWZ0ZXJbTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOIC0gMV0gPSAnWic7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfZXh0ZW5zaW9uKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvaWQsIHNpemVfdCBvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNyaXRpY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbiApCit7CisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOV9zZXRfZXh0ZW5zaW9uKCAmY3R4LT5leHRlbnNpb25zLCBvaWQsIG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JpdGljYWwsIHZhbCwgdmFsX2xlbiApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cyggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfY2EsIGludCBtYXhfcGF0aGxlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls5XTsKKyAgICB1bnNpZ25lZCBjaGFyICpjID0gYnVmICsgc2l6ZW9mKGJ1Zik7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikgKTsKKworICAgIGlmKCBpc19jYSAmJiBtYXhfcGF0aGxlbiA+IDEyNyApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQSApOworCisgICAgaWYoIGlzX2NhICkKKyAgICB7CisgICAgICAgIGlmKCBtYXhfcGF0aGxlbiA+PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2ludCggJmMsIGJ1ZiwgbWF4X3BhdGhsZW4gKSApOworICAgICAgICB9CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9ib29sKCAmYywgYnVmLCAxICkgKTsKKyAgICB9CisKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCBidWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgcmV0dXJuIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfZXh0ZW5zaW9uKCBjdHgsIE1CRURUTFNfT0lEX0JBU0lDX0NPTlNUUkFJTlRTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX0JBU0lDX0NPTlNUUkFJTlRTICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYnVmICsgc2l6ZW9mKGJ1ZikgLSBsZW4sIGxlbiApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5X2lkZW50aWZpZXIoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRSAqIDIgKyAyMF07IC8qIHRhZywgbGVuZ3RoICsgMnhNUEkgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpjID0gYnVmICsgc2l6ZW9mKGJ1Zik7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleSggJmMsIGJ1ZiwgY3R4LT5zdWJqZWN0X2tleSApICk7CisKKyAgICBtYmVkdGxzX3NoYTEoIGJ1ZiArIHNpemVvZihidWYpIC0gbGVuLCBsZW4sIGJ1ZiArIHNpemVvZihidWYpIC0gMjAgKTsKKyAgICBjID0gYnVmICsgc2l6ZW9mKGJ1ZikgLSAyMDsKKyAgICBsZW4gPSAyMDsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIGJ1ZiwgTUJFRFRMU19BU04xX09DVEVUX1NUUklORyApICk7CisKKyAgICByZXR1cm4gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24oIGN0eCwgTUJFRFRMU19PSURfU1VCSkVDVF9LRVlfSURFTlRJRklFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9TVUJKRUNUX0tFWV9JREVOVElGSUVSICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYnVmICsgc2l6ZW9mKGJ1ZikgLSBsZW4sIGxlbiApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRSAqIDIgKyAyMF07IC8qIHRhZywgbGVuZ3RoICsgMnhNUEkgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpjID0gYnVmICsgc2l6ZW9mKGJ1Zik7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleSggJmMsIGJ1ZiwgY3R4LT5pc3N1ZXJfa2V5ICkgKTsKKworICAgIG1iZWR0bHNfc2hhMSggYnVmICsgc2l6ZW9mKGJ1ZikgLSBsZW4sIGxlbiwgYnVmICsgc2l6ZW9mKGJ1ZikgLSAyMCApOworICAgIGMgPSBidWYgKyBzaXplb2YoYnVmKSAtIDIwOworICAgIGxlbiA9IDIwOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyB8IDAgKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIGJ1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIHJldHVybiBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiggY3R4LCBNQkVEVExTX09JRF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBidWYgKyBzaXplb2YoYnVmKSAtIGxlbiwgbGVuICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfa2V5X3VzYWdlKCBtYmVkdGxzX3g1MDl3cml0ZV9jZXJ0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfdXNhZ2UgKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzRdLCBrdTsKKyAgICB1bnNpZ25lZCBjaGFyICpjOworICAgIGludCByZXQ7CisKKyAgICAvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDcgYml0cywgZnJvbSAweDgwIHRvIDB4MDIgKi8KKyAgICBpZiggKCBrZXlfdXNhZ2UgJiB+MHhmZSApICE9IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1g1MDlfRkVBVFVSRV9VTkFWQUlMQUJMRSApOworCisgICAgYyA9IGJ1ZiArIDQ7CisgICAga3UgPSAodW5zaWduZWQgY2hhcikga2V5X3VzYWdlOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX3dyaXRlX2JpdHN0cmluZyggJmMsIGJ1ZiwgJmt1LCA3ICkgKSAhPSA0ICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfZXh0ZW5zaW9uKCBjdHgsIE1CRURUTFNfT0lEX0tFWV9VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfT0lEX1NJWkUoIE1CRURUTFNfT0lEX0tFWV9VU0FHRSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYnVmLCA0ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUoIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKyAgICB1bnNpZ25lZCBjaGFyICpjOworICAgIGludCByZXQ7CisKKyAgICBjID0gYnVmICsgNDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV93cml0ZV9iaXRzdHJpbmcoICZjLCBidWYsICZuc19jZXJ0X3R5cGUsIDggKSApICE9IDQgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9leHRlbnNpb24oIGN0eCwgTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBidWYsIDQgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgeDUwOV93cml0ZV90aW1lKCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGltZSwgc2l6ZV90IHNpemUgKQoreworICAgIGludCByZXQ7CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICAvKgorICAgICAqIHdyaXRlIE1CRURUTFNfQVNOMV9VVENfVElNRSBpZiB5ZWFyIDwgMjA1MCAoMiBieXRlcyBzaG9ydGVyKQorICAgICAqLworICAgIGlmKCB0aW1lWzBdID09ICcyJyAmJiB0aW1lWzFdID09ICcwJyAmJiB0aW1lIFsyXSA8ICc1JyApCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlciggcCwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB0aW1lICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgLSAyICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggcCwgc3RhcnQsIGxlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoIHAsIHN0YXJ0LCBNQkVEVExTX0FTTjFfVVRDX1RJTUUgKSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfcmF3X2J1ZmZlciggcCwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKSApOworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCBwLCBzdGFydCwgbGVuICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggcCwgc3RhcnQsIE1CRURUTFNfQVNOMV9HRU5FUkFMSVpFRF9USU1FICkgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIChpbnQpIGxlbiApOworfQorCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X2RlciggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IGNoYXIgKnNpZ19vaWQ7CisgICAgc2l6ZV90IHNpZ19vaWRfbGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpjLCAqYzI7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIHNpZ1tNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciB0bXBfYnVmWzIwNDhdOworICAgIHNpemVfdCBzdWJfbGVuID0gMCwgcHViX2xlbiA9IDAsIHNpZ19hbmRfb2lkX2xlbiA9IDAsIHNpZ19sZW47CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgbWJlZHRsc19wa190eXBlX3QgcGtfYWxnOworCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIGRhdGEgdG8gYmUgc2lnbmVkIGluIHRtcF9idWYKKyAgICAgKi8KKyAgICBjID0gdG1wX2J1ZiArIHNpemVvZiggdG1wX2J1ZiApOworCisgICAgLyogU2lnbmF0dXJlIGFsZ29yaXRobSBuZWVkZWQgaW4gVEJTLCBhbmQgbGF0ZXIgZm9yIGFjdHVhbCBzaWduYXR1cmUgKi8KKyAgICBwa19hbGcgPSBtYmVkdGxzX3BrX2dldF90eXBlKCBjdHgtPmlzc3Vlcl9rZXkgKTsKKyAgICBpZiggcGtfYWxnID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgICAgICBwa19hbGcgPSBNQkVEVExTX1BLX0VDRFNBOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9zaWdfYWxnKCBwa19hbGcsIGN0eC0+bWRfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWdfb2lkLCAmc2lnX29pZF9sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBFeHRlbnNpb25zICA6Oj0gIFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgRXh0ZW5zaW9uCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc194NTA5X3dyaXRlX2V4dGVuc2lvbnMoICZjLCB0bXBfYnVmLCBjdHgtPmV4dGVuc2lvbnMgKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIHRtcF9idWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIHRtcF9idWYsIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAzICkgKTsKKworICAgIC8qCisgICAgICogIFN1YmplY3RQdWJsaWNLZXlJbmZvCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHB1Yl9sZW4sIG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2RlciggY3R4LT5zdWJqZWN0X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9idWYsIGMgLSB0bXBfYnVmICkgKTsKKyAgICBjIC09IHB1Yl9sZW47CisgICAgbGVuICs9IHB1Yl9sZW47CisKKyAgICAvKgorICAgICAqICBTdWJqZWN0ICA6Oj0gIE5hbWUKKyAgICAgKi8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX3g1MDlfd3JpdGVfbmFtZXMoICZjLCB0bXBfYnVmLCBjdHgtPnN1YmplY3QgKSApOworCisgICAgLyoKKyAgICAgKiAgVmFsaWRpdHkgOjo9IFNFUVVFTkNFIHsKKyAgICAgKiAgICAgICBub3RCZWZvcmUgICAgICBUaW1lLAorICAgICAqICAgICAgIG5vdEFmdGVyICAgICAgIFRpbWUgfQorICAgICAqLworICAgIHN1Yl9sZW4gPSAwOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHN1Yl9sZW4sIHg1MDlfd3JpdGVfdGltZSggJmMsIHRtcF9idWYsIGN0eC0+bm90X2FmdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1g1MDlfUkZDNTI4MF9VVENfVElNRV9MRU4gKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHN1Yl9sZW4sIHg1MDlfd3JpdGVfdGltZSggJmMsIHRtcF9idWYsIGN0eC0+bm90X2JlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19YNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOICkgKTsKKworICAgIGxlbiArPSBzdWJfbGVuOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBzdWJfbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYywgdG1wX2J1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgLyoKKyAgICAgKiAgSXNzdWVyICA6Oj0gIE5hbWUKKyAgICAgKi8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX3g1MDlfd3JpdGVfbmFtZXMoICZjLCB0bXBfYnVmLCBjdHgtPmlzc3VlciApICk7CisKKyAgICAvKgorICAgICAqICBTaWduYXR1cmUgICA6Oj0gIEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICAgKi8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIoICZjLCB0bXBfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICBzaWdfb2lkLCBzdHJsZW4oIHNpZ19vaWQgKSwgMCApICk7CisKKyAgICAvKgorICAgICAqICBTZXJpYWwgICA6Oj0gIElOVEVHRVIKKyAgICAgKi8KKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpKCAmYywgdG1wX2J1ZiwgJmN0eC0+c2VyaWFsICkgKTsKKworICAgIC8qCisgICAgICogIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAgdjEoMCksIHYyKDEpLCB2MygyKSAgfQorICAgICAqLworICAgIHN1Yl9sZW4gPSAwOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBzdWJfbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50KCAmYywgdG1wX2J1ZiwgY3R4LT52ZXJzaW9uICkgKTsKKyAgICBsZW4gKz0gc3ViX2xlbjsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1Ziwgc3ViX2xlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIHRtcF9idWYsIE1CRURUTFNfQVNOMV9DT05URVhUX1NQRUNJRklDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCAwICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICAvKgorICAgICAqIE1ha2Ugc2lnbmF0dXJlCisgICAgICovCisgICAgbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggY3R4LT5tZF9hbGcgKSwgYywgbGVuLCBoYXNoICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NpZ24oIGN0eC0+aXNzdWVyX2tleSwgY3R4LT5tZF9hbGcsIGhhc2gsIDAsIHNpZywgJnNpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXcml0ZSBkYXRhIHRvIG91dHB1dCBidWZmZXIKKyAgICAgKi8KKyAgICBjMiA9IGJ1ZiArIHNpemU7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHNpZ19hbmRfb2lkX2xlbiwgbWJlZHRsc194NTA5X3dyaXRlX3NpZyggJmMyLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnX29pZCwgc2lnX29pZF9sZW4sIHNpZywgc2lnX2xlbiApICk7CisKKyAgICBpZiggbGVuID4gKHNpemVfdCkoIGMyIC0gYnVmICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCisgICAgYzIgLT0gbGVuOworICAgIG1lbWNweSggYzIsIGMsIGxlbiApOworCisgICAgbGVuICs9IHNpZ19hbmRfb2lkX2xlbjsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYzIsIGJ1ZiwgbGVuICkgKTsKKyAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnKCAmYzIsIGJ1ZiwgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VRVUVOQ0UgKSApOworCisgICAgcmV0dXJuKCAoaW50KSBsZW4gKTsKK30KKworI2RlZmluZSBQRU1fQkVHSU5fQ1JUICAgICAgICAgICAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tXG4iCisjZGVmaW5lIFBFTV9FTkRfQ1JUICAgICAgICAgICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCitpbnQgbWJlZHRsc194NTA5d3JpdGVfY3J0X3BlbSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3J0LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X2J1Zls0MDk2XTsKKyAgICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZGVyKCBjcnQsIG91dHB1dF9idWYsIHNpemVvZihvdXRwdXRfYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9ybmcsIHBfcm5nICkgKSA8IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIoIFBFTV9CRUdJTl9DUlQsIFBFTV9FTkRfQ1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYgKyBzaXplb2Yob3V0cHV0X2J1ZikgLSByZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LCBidWYsIHNpemUsICZvbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19QRU1fV1JJVEVfQyAqLworCisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9XUklURV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5d3JpdGVfY3NyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94NTA5d3JpdGVfY3NyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkODU2YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9saWJyYXJ5L3g1MDl3cml0ZV9jc3IuYwpAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqICBYLjUwOSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3Qgd3JpdGluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworLyoKKyAqIFJlZmVyZW5jZXM6CisgKiAtIENTUnM6IFBLQ1MjMTAgdjEuNyBha2EgUkZDIDI5ODYKKyAqIC0gYXR0cmlidXRlczogUEtDUyM5IHYyLjAgYWthIFJGQyAyOTg1CisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NTUl9XUklURV9DKQorCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2Nzci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisjaW5jbHVkZSAibWJlZHRscy9hc24xd3JpdGUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjZW5kaWYKKworLyogSW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIgKi8KK3N0YXRpYyB2b2lkIG1iZWR0bHNfemVyb2l6ZSggdm9pZCAqdiwgc2l6ZV90IG4gKSB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcCA9IHY7IHdoaWxlKCBuLS0gKSAqcCsrID0gMDsKK30KKwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfaW5pdCggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHggKQoreworICAgIG1lbXNldCggY3R4LCAwLCBzaXplb2YobWJlZHRsc194NTA5d3JpdGVfY3NyKSApOworfQorCit2b2lkIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCApCit7CisgICAgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0KCAmY3R4LT5zdWJqZWN0ICk7CisgICAgbWJlZHRsc19hc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0KCAmY3R4LT5leHRlbnNpb25zICk7CisKKyAgICBtYmVkdGxzX3plcm9pemUoIGN0eCwgc2l6ZW9mKG1iZWR0bHNfeDUwOXdyaXRlX2NzcikgKTsKK30KKwordm9pZCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZyApCit7CisgICAgY3R4LT5tZF9hbGcgPSBtZF9hbGc7Cit9CisKK3ZvaWQgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9rZXkoIG1iZWR0bHNfeDUwOXdyaXRlX2NzciAqY3R4LCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSApCit7CisgICAgY3R4LT5rZXkgPSBrZXk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZSggbWJlZHRsc194NTA5d3JpdGVfY3NyICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdWJqZWN0X25hbWUgKQoreworICAgIHJldHVybiBtYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzKCAmY3R4LT5zdWJqZWN0LCBzdWJqZWN0X25hbWUgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfZXh0ZW5zaW9uKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCwgc2l6ZV90IG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsIHNpemVfdCB2YWxfbGVuICkKK3sKKyAgICByZXR1cm4gbWJlZHRsc194NTA5X3NldF9leHRlbnNpb24oICZjdHgtPmV4dGVuc2lvbnMsIG9pZCwgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB2YWwsIHZhbF9sZW4gKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5X3VzYWdlKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgdW5zaWduZWQgY2hhciBrZXlfdXNhZ2UgKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzRdOworICAgIHVuc2lnbmVkIGNoYXIgKmM7CisgICAgaW50IHJldDsKKworICAgIGMgPSBidWYgKyA0OworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19hc24xX3dyaXRlX2JpdHN0cmluZyggJmMsIGJ1ZiwgJmtleV91c2FnZSwgNyApICkgIT0gNCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2V4dGVuc2lvbiggY3R4LCBNQkVEVExTX09JRF9LRVlfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9LRVlfVVNBR0UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgNCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbnNfY2VydF90eXBlICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKyAgICB1bnNpZ25lZCBjaGFyICpjOworICAgIGludCByZXQ7CisKKyAgICBjID0gYnVmICsgNDsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV93cml0ZV9iaXRzdHJpbmcoICZjLCBidWYsICZuc19jZXJ0X3R5cGUsIDggKSApICE9IDQgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9leHRlbnNpb24oIGN0eCwgTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19PSURfU0laRSggTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDQgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZGVyKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBjaGFyICpzaWdfb2lkOworICAgIHNpemVfdCBzaWdfb2lkX2xlbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqYywgKmMyOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs2NF07CisgICAgdW5zaWduZWQgY2hhciBzaWdbTUJFRFRMU19NUElfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgdG1wX2J1ZlsyMDQ4XTsKKyAgICBzaXplX3QgcHViX2xlbiA9IDAsIHNpZ19hbmRfb2lkX2xlbiA9IDAsIHNpZ19sZW47CisgICAgc2l6ZV90IGxlbiA9IDA7CisgICAgbWJlZHRsc19wa190eXBlX3QgcGtfYWxnOworCisgICAgLyoKKyAgICAgKiBQcmVwYXJlIGRhdGEgdG8gYmUgc2lnbmVkIGluIHRtcF9idWYKKyAgICAgKi8KKyAgICBjID0gdG1wX2J1ZiArIHNpemVvZiggdG1wX2J1ZiApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc194NTA5X3dyaXRlX2V4dGVuc2lvbnMoICZjLCB0bXBfYnVmLCBjdHgtPmV4dGVuc2lvbnMgKSApOworCisgICAgaWYoIGxlbiApCisgICAgeworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1ZiwgbGVuICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIHRtcF9idWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIHRtcF9idWYsIGxlbiApICk7CisgICAgICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0FTTjFfU0VUICkgKTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfb2lkKCAmYywgdG1wX2J1ZiwgTUJFRFRMU19PSURfUEtDUzlfQ1NSX0VYVF9SRVEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX09JRF9TSVpFKCBNQkVEVExTX09JRF9QS0NTOV9DU1JfRVhUX1JFUSApICkgKTsKKworICAgICAgICBNQkVEVExTX0FTTjFfQ0hLX0FERCggbGVuLCBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuKCAmYywgdG1wX2J1ZiwgbGVuICkgKTsKKyAgICAgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIHRtcF9idWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisgICAgfQorCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMsIHRtcF9idWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMsIHRtcF9idWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMgKSApOworCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIHB1Yl9sZW4sIG1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2RlciggY3R4LT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfYnVmLCBjIC0gdG1wX2J1ZiApICk7CisgICAgYyAtPSBwdWJfbGVuOworICAgIGxlbiArPSBwdWJfbGVuOworCisgICAgLyoKKyAgICAgKiAgU3ViamVjdCAgOjo9ICBOYW1lCisgICAgICovCisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc194NTA5X3dyaXRlX25hbWVzKCAmYywgdG1wX2J1ZiwgY3R4LT5zdWJqZWN0ICkgKTsKKworICAgIC8qCisgICAgICogIFZlcnNpb24gIDo6PSAgSU5URUdFUiAgeyAgdjEoMCksIHYyKDEpLCB2MygyKSAgfQorICAgICAqLworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9pbnQoICZjLCB0bXBfYnVmLCAwICkgKTsKKworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZjLCB0bXBfYnVmLCBsZW4gKSApOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBsZW4sIG1iZWR0bHNfYXNuMV93cml0ZV90YWcoICZjLCB0bXBfYnVmLCBNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSApICk7CisKKyAgICAvKgorICAgICAqIFByZXBhcmUgc2lnbmF0dXJlCisgICAgICovCisgICAgbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggY3R4LT5tZF9hbGcgKSwgYywgbGVuLCBoYXNoICk7CisKKyAgICBwa19hbGcgPSBtYmVkdGxzX3BrX2dldF90eXBlKCBjdHgtPmtleSApOworICAgIGlmKCBwa19hbGcgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgICAgIHBrX2FsZyA9IE1CRURUTFNfUEtfRUNEU0E7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NpZ24oIGN0eC0+a2V5LCBjdHgtPm1kX2FsZywgaGFzaCwgMCwgc2lnLCAmc2lnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmX3JuZywgcF9ybmcgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3NpZ19hbGcoIHBrX2FsZywgY3R4LT5tZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ19vaWQsICZzaWdfb2lkX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qCisgICAgICogV3JpdGUgZGF0YSB0byBvdXRwdXQgYnVmZmVyCisgICAgICovCisgICAgYzIgPSBidWYgKyBzaXplOworICAgIE1CRURUTFNfQVNOMV9DSEtfQUREKCBzaWdfYW5kX29pZF9sZW4sIG1iZWR0bHNfeDUwOV93cml0ZV9zaWcoICZjMiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ19vaWQsIHNpZ19vaWRfbGVuLCBzaWcsIHNpZ19sZW4gKSApOworCisgICAgaWYoIGxlbiA+IChzaXplX3QpKCBjMiAtIGJ1ZiApICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworICAgIGMyIC09IGxlbjsKKyAgICBtZW1jcHkoIGMyLCBjLCBsZW4gKTsKKworICAgIGxlbiArPSBzaWdfYW5kX29pZF9sZW47CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggJmMyLCBidWYsIGxlbiApICk7CisgICAgTUJFRFRMU19BU04xX0NIS19BREQoIGxlbiwgbWJlZHRsc19hc24xX3dyaXRlX3RhZyggJmMyLCBidWYsIE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgKTsKKworICAgIHJldHVybiggKGludCkgbGVuICk7Cit9CisKKyNkZWZpbmUgUEVNX0JFR0lOX0NTUiAgICAgICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXG4iCisjZGVmaW5lIFBFTV9FTkRfQ1NSICAgICAgICAgICAgICItLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS1cbiIKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKK2ludCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfcGVtKCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbNDA5Nl07CisgICAgc2l6ZV90IG9sZW4gPSAwOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlciggY3R4LCBvdXRwdXRfYnVmLCBzaXplb2Yob3V0cHV0X2J1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfcm5nLCBwX3JuZyApICkgPCAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBQRU1fQkVHSU5fQ1NSLCBQRU1fRU5EX0NTUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmICsgc2l6ZW9mKG91dHB1dF9idWYpIC0gcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCwgYnVmLCBzaXplLCAmb2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveHRlYS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL2xpYnJhcnkveHRlYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGEzNTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vbGlicmFyeS94dGVhLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiAgQW4gMzItYml0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBYVEVBIGFsZ29yaXRobQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1hURUFfQykKKworI2luY2x1ZGUgIm1iZWR0bHMveHRlYS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgcHJpbnRmCisjZW5kaWYgLyogTUJFRFRMU19QTEFURk9STV9DICovCisjZW5kaWYgLyogTUJFRFRMU19TRUxGX1RFU1QgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfWFRFQV9BTFQpCisKKy8qIEltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyICovCitzdGF0aWMgdm9pZCBtYmVkdGxzX3plcm9pemUoIHZvaWQgKnYsIHNpemVfdCBuICkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnAgPSB2OyB3aGlsZSggbi0tICkgKnArKyA9IDA7Cit9CisKKy8qCisgKiAzMi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChiaWcgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMzJfQkUKKyNkZWZpbmUgR0VUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDMyX3QpIChiKVsoaSkgICAgXSA8PCAyNCApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDFdIDw8IDE2ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgMl0gPDwgIDggKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAzXSAgICAgICApOyAgICAgICAgICAgIFwKK30KKyNlbmRpZgorCisjaWZuZGVmIFBVVF9VSU5UMzJfQkUKKyNkZWZpbmUgUFVUX1VJTlQzMl9CRShuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDI0ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMV0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAgOCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDNdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pICAgICAgICk7ICAgICAgIFwKK30KKyNlbmRpZgorCit2b2lkIG1iZWR0bHNfeHRlYV9pbml0KCBtYmVkdGxzX3h0ZWFfY29udGV4dCAqY3R4ICkKK3sKKyAgICBtZW1zZXQoIGN0eCwgMCwgc2l6ZW9mKCBtYmVkdGxzX3h0ZWFfY29udGV4dCApICk7Cit9CisKK3ZvaWQgbWJlZHRsc194dGVhX2ZyZWUoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICpjdHggKQoreworICAgIGlmKCBjdHggPT0gTlVMTCApCisgICAgICAgIHJldHVybjsKKworICAgIG1iZWR0bHNfemVyb2l6ZSggY3R4LCBzaXplb2YoIG1iZWR0bHNfeHRlYV9jb250ZXh0ICkgKTsKK30KKworLyoKKyAqIFhURUEga2V5IHNjaGVkdWxlCisgKi8KK3ZvaWQgbWJlZHRsc194dGVhX3NldHVwKCBtYmVkdGxzX3h0ZWFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl0gKQoreworICAgIGludCBpOworCisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZihtYmVkdGxzX3h0ZWFfY29udGV4dCkgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCA0OyBpKysgKQorICAgIHsKKyAgICAgICAgR0VUX1VJTlQzMl9CRSggY3R4LT5rW2ldLCBrZXksIGkgPDwgMiApOworICAgIH0KK30KKworLyoKKyAqIFhURUEgZW5jcnlwdCBmdW5jdGlvbgorICovCitpbnQgbWJlZHRsc194dGVhX2NyeXB0X2VjYiggbWJlZHRsc194dGVhX2NvbnRleHQgKmN0eCwgaW50IG1vZGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5wdXRbOF0sIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzhdKQoreworICAgIHVpbnQzMl90ICprLCB2MCwgdjEsIGk7CisKKyAgICBrID0gY3R4LT5rOworCisgICAgR0VUX1VJTlQzMl9CRSggdjAsIGlucHV0LCAwICk7CisgICAgR0VUX1VJTlQzMl9CRSggdjEsIGlucHV0LCA0ICk7CisKKyAgICBpZiggbW9kZSA9PSBNQkVEVExTX1hURUFfRU5DUllQVCApCisgICAgeworICAgICAgICB1aW50MzJfdCBzdW0gPSAwLCBkZWx0YSA9IDB4OUUzNzc5Qjk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDMyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICB2MCArPSAoKCh2MSA8PCA0KSBeICh2MSA+PiA1KSkgKyB2MSkgXiAoc3VtICsga1tzdW0gJiAzXSk7CisgICAgICAgICAgICBzdW0gKz0gZGVsdGE7CisgICAgICAgICAgICB2MSArPSAoKCh2MCA8PCA0KSBeICh2MCA+PiA1KSkgKyB2MCkgXiAoc3VtICsga1soc3VtPj4xMSkgJiAzXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvKiBNQkVEVExTX1hURUFfREVDUllQVCAqLworICAgIHsKKyAgICAgICAgdWludDMyX3QgZGVsdGEgPSAweDlFMzc3OUI5LCBzdW0gPSBkZWx0YSAqIDMyOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCAzMjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgdjEgLT0gKCgodjAgPDwgNCkgXiAodjAgPj4gNSkpICsgdjApIF4gKHN1bSArIGtbKHN1bT4+MTEpICYgM10pOworICAgICAgICAgICAgc3VtIC09IGRlbHRhOworICAgICAgICAgICAgdjAgLT0gKCgodjEgPDwgNCkgXiAodjEgPj4gNSkpICsgdjEpIF4gKHN1bSArIGtbc3VtICYgM10pOworICAgICAgICB9CisgICAgfQorCisgICAgUFVUX1VJTlQzMl9CRSggdjAsIG91dHB1dCwgMCApOworICAgIFBVVF9VSU5UMzJfQkUoIHYxLCBvdXRwdXQsIDQgKTsKKworICAgIHJldHVybiggMCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKy8qCisgKiBYVEVBLUNCQyBidWZmZXIgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisgKi8KK2ludCBtYmVkdGxzX3h0ZWFfY3J5cHRfY2JjKCBtYmVkdGxzX3h0ZWFfY29udGV4dCAqY3R4LCBpbnQgbW9kZSwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpdls4XSwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBbOF07CisKKyAgICBpZiggbGVuZ3RoICUgOCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfWFRFQV9JTlZBTElEX0lOUFVUX0xFTkdUSCApOworCisgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19YVEVBX0RFQ1JZUFQgKQorICAgIHsKKyAgICAgICAgd2hpbGUoIGxlbmd0aCA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoIHRlbXAsIGlucHV0LCA4ICk7CisgICAgICAgICAgICBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIGlucHV0LCBvdXRwdXQgKTsKKworICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IDg7IGkrKyApCisgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCBvdXRwdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtZW1jcHkoIGl2LCB0ZW1wLCA4ICk7CisKKyAgICAgICAgICAgIGlucHV0ICArPSA4OworICAgICAgICAgICAgb3V0cHV0ICs9IDg7CisgICAgICAgICAgICBsZW5ndGggLT0gODsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3aGlsZSggbGVuZ3RoID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSggaW5wdXRbaV0gXiBpdltpXSApOworCisgICAgICAgICAgICBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiKCBjdHgsIG1vZGUsIG91dHB1dCwgb3V0cHV0ICk7CisgICAgICAgICAgICBtZW1jcHkoIGl2LCBvdXRwdXQsIDggKTsKKworICAgICAgICAgICAgaW5wdXQgICs9IDg7CisgICAgICAgICAgICBvdXRwdXQgKz0gODsKKyAgICAgICAgICAgIGxlbmd0aCAtPSA4OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KKyNlbmRpZiAvKiAhTUJFRFRMU19YVEVBX0FMVCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NFTEZfVEVTVCkKKworLyoKKyAqIFhURUEgdGVzdHMgdmVjdG9ycyAobm9uLW9mZmljaWFsKQorICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHh0ZWFfdGVzdF9rZXlbNl1bMTZdID0KK3sKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwKKyAgICAgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLAorICAgICAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsCisgICAgIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeHRlYV90ZXN0X3B0WzZdWzhdID0KK3sKKyAgICB7IDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDggfSwKKyAgICB7IDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEgfSwKKyAgICB7IDB4NWEsIDB4NWIsIDB4NmUsIDB4MjcsIDB4ODksIDB4NDgsIDB4ZDcsIDB4N2YgfSwKKyAgICB7IDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDggfSwKKyAgICB7IDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEgfSwKKyAgICB7IDB4NzAsIDB4ZTEsIDB4MjIsIDB4NWQsIDB4NmUsIDB4NGUsIDB4NzYsIDB4NTUgfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeHRlYV90ZXN0X2N0WzZdWzhdID0KK3sKKyAgICB7IDB4NDksIDB4N2QsIDB4ZjMsIDB4ZDAsIDB4NzIsIDB4NjEsIDB4MmMsIDB4YjUgfSwKKyAgICB7IDB4ZTcsIDB4OGYsIDB4MmQsIDB4MTMsIDB4NzQsIDB4NDMsIDB4NDEsIDB4ZDggfSwKKyAgICB7IDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEgfSwKKyAgICB7IDB4YTAsIDB4MzksIDB4MDUsIDB4ODksIDB4ZjgsIDB4YjgsIDB4ZWYsIDB4YTUgfSwKKyAgICB7IDB4ZWQsIDB4MjMsIDB4MzcsIDB4NWEsIDB4ODIsIDB4MWEsIDB4OGMsIDB4MmQgfSwKKyAgICB7IDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEsIDB4NDEgfQorfTsKKworLyoKKyAqIENoZWNrdXAgcm91dGluZQorICovCitpbnQgbWJlZHRsc194dGVhX3NlbGZfdGVzdCggaW50IHZlcmJvc2UgKQoreworICAgIGludCBpLCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOworICAgIG1iZWR0bHNfeHRlYV9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfeHRlYV9pbml0KCAmY3R4ICk7CisgICAgZm9yKCBpID0gMDsgaSA8IDY7IGkrKyApCisgICAgeworICAgICAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBYVEVBIHRlc3QgIyVkOiAiLCBpICsgMSApOworCisgICAgICAgIG1lbWNweSggYnVmLCB4dGVhX3Rlc3RfcHRbaV0sIDggKTsKKworICAgICAgICBtYmVkdGxzX3h0ZWFfc2V0dXAoICZjdHgsIHh0ZWFfdGVzdF9rZXlbaV0gKTsKKyAgICAgICAgbWJlZHRsc194dGVhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19YVEVBX0VOQ1JZUFQsIGJ1ZiwgYnVmICk7CisKKyAgICAgICAgaWYoIG1lbWNtcCggYnVmLCB4dGVhX3Rlc3RfY3RbaV0sIDggKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHZlcmJvc2UgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWRcbiIgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJib3NlICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwYXNzZWRcbiIgKTsKKyAgICB9CisKKyAgICBpZiggdmVyYm9zZSAhPSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3h0ZWFfZnJlZSggJmN0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfU0VMRl9URVNUICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1hURUFfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGFlNzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw4IEBACithZGRfc3ViZGlyZWN0b3J5KGFlcykKK2FkZF9zdWJkaXJlY3RvcnkoaGFzaCkKK2FkZF9zdWJkaXJlY3RvcnkocGtleSkKK2FkZF9zdWJkaXJlY3RvcnkocmFuZG9tKQorYWRkX3N1YmRpcmVjdG9yeShzc2wpCithZGRfc3ViZGlyZWN0b3J5KHRlc3QpCithZGRfc3ViZGlyZWN0b3J5KHg1MDkpCithZGRfc3ViZGlyZWN0b3J5KHV0aWwpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvTWFrZWZpbGUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzNjg5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9NYWtlZmlsZQpAQCAtMCwwICsxLDI4OCBAQAorCisjIFRvIGNvbXBpbGUgb24gU3VuT1M6IGFkZCAiLWxzb2NrZXQgLWxuc2wiIHRvIExERkxBR1MKKyMgVG8gY29tcGlsZSB3aXRoIFBLQ1MxMTogYWRkICItbHBrY3MxMS1oZWxwZXIiIHRvIExERkxBR1MKKworQ0ZMQUdTCT89IC1PMgorV0FSTklOR19DRkxBR1MgPz0gLVdhbGwgLVcgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQKK0xERkxBR1MgPz0KKworTE9DQUxfQ0ZMQUdTID0gJChXQVJOSU5HX0NGTEFHUykgLUkuLi9pbmNsdWRlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKK0xPQ0FMX0xERkxBR1MgPSAtTC4uL2xpYnJhcnkgCQkJXAorCQktbG1iZWR0bHMkKFNIQVJFRF9TVUZGSVgpCVwKKwkJLWxtYmVkeDUwOSQoU0hBUkVEX1NVRkZJWCkJXAorCQktbG1iZWRjcnlwdG8kKFNIQVJFRF9TVUZGSVgpCisKK2lmbmRlZiBTSEFSRUQKK0RFUD0uLi9saWJyYXJ5L2xpYm1iZWRjcnlwdG8uYSAuLi9saWJyYXJ5L2xpYm1iZWR4NTA5LmEgLi4vbGlicmFyeS9saWJtYmVkdGxzLmEKK2Vsc2UKK0RFUD0uLi9saWJyYXJ5L2xpYm1iZWRjcnlwdG8uJChETEVYVCkgLi4vbGlicmFyeS9saWJtYmVkeDUwOS4kKERMRVhUKSAuLi9saWJyYXJ5L2xpYm1iZWR0bHMuJChETEVYVCkKK2VuZGlmCisKK2lmZGVmIERFQlVHCitMT0NBTF9DRkxBR1MgKz0gLWczCitlbmRpZgorCisjIGlmIHdlJ3JlIHJ1bm5pbmcgb24gV2luZG93cywgYnVpbGQgZm9yIFdpbmRvd3MKK2lmZGVmIFdJTkRPV1MKK1dJTkRPV1NfQlVJTEQ9MQorZW5kaWYKKworaWZkZWYgV0lORE9XU19CVUlMRAorRExFWFQ9ZGxsCitFWEVYVD0uZXhlCitMT0NBTF9MREZMQUdTICs9IC1sd3MyXzMyCitpZmRlZiBTSEFSRUQKK1NIQVJFRF9TVUZGSVg9LiQoRExFWFQpCitlbmRpZgorZWxzZQorRExFWFQ9c28KK0VYRVhUPQorU0hBUkVEX1NVRkZJWD0KK2VuZGlmCisKKyMgWmxpYiBzaGFyZWQgbGlicmFyeSBleHRlbnNpb25zOgoraWZkZWYgWkxJQgorTE9DQUxfTERGTEFHUyArPSAtbHoKK2VuZGlmCisKK0FQUFMgPQlhZXMvYWVzY3J5cHQyJChFWEVYVCkJCWFlcy9jcnlwdF9hbmRfaGFzaCQoRVhFWFQpCVwKKwloYXNoL2hlbGxvJChFWEVYVCkJCWhhc2gvZ2VuZXJpY19zdW0kKEVYRVhUKQlcCisJCQkJCXBrZXkvZGhfY2xpZW50JChFWEVYVCkJCVwKKwlwa2V5L2RoX2dlbnByaW1lJChFWEVYVCkJcGtleS9kaF9zZXJ2ZXIkKEVYRVhUKQkJXAorCXBrZXkvZWNkaF9jdXJ2ZTI1NTE5JChFWEVYVCkJCQkJCVwKKwlwa2V5L2VjZHNhJChFWEVYVCkJCXBrZXkvZ2VuX2tleSQoRVhFWFQpCQlcCisJcGtleS9rZXlfYXBwJChFWEVYVCkJCXBrZXkva2V5X2FwcF93cml0ZXIkKEVYRVhUKQlcCisJcGtleS9tcGlfZGVtbyQoRVhFWFQpCQlwa2V5L3BrX2RlY3J5cHQkKEVYRVhUKQkJXAorCXBrZXkvcGtfZW5jcnlwdCQoRVhFWFQpCQlwa2V5L3BrX3NpZ24kKEVYRVhUKQkJXAorCXBrZXkvcGtfdmVyaWZ5JChFWEVYVCkJCXBrZXkvcnNhX2dlbmtleSQoRVhFWFQpCQlcCisJcGtleS9yc2FfZGVjcnlwdCQoRVhFWFQpCXBrZXkvcnNhX2VuY3J5cHQkKEVYRVhUKQlcCisJcGtleS9yc2Ffc2lnbiQoRVhFWFQpCQlwa2V5L3JzYV92ZXJpZnkkKEVYRVhUKQkJXAorCXBrZXkvcnNhX3NpZ25fcHNzJChFWEVYVCkJcGtleS9yc2FfdmVyaWZ5X3BzcyQoRVhFWFQpCVwKKwlzc2wvZHRsc19jbGllbnQkKEVYRVhUKQkJc3NsL2R0bHNfc2VydmVyJChFWEVYVCkJCVwKKwlzc2wvc3NsX2NsaWVudDEkKEVYRVhUKQkJc3NsL3NzbF9jbGllbnQyJChFWEVYVCkJCVwKKwlzc2wvc3NsX3NlcnZlciQoRVhFWFQpCQlzc2wvc3NsX3NlcnZlcjIkKEVYRVhUKQkJXAorCXNzbC9zc2xfZm9ya19zZXJ2ZXIkKEVYRVhUKQlzc2wvbWluaV9jbGllbnQkKEVYRVhUKQkJXAorCXNzbC9zc2xfbWFpbF9jbGllbnQkKEVYRVhUKQlyYW5kb20vZ2VuX2VudHJvcHkkKEVYRVhUKQlcCisJcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlJChFWEVYVCkJCQkJXAorCXJhbmRvbS9nZW5fcmFuZG9tX2N0cl9kcmJnJChFWEVYVCkJCQkJXAorCXRlc3Qvc3NsX2NlcnRfdGVzdCQoRVhFWFQpCXRlc3QvYmVuY2htYXJrJChFWEVYVCkJCVwKKwl0ZXN0L3NlbGZ0ZXN0JChFWEVYVCkJCXRlc3QvdWRwX3Byb3h5JChFWEVYVCkJCVwKKwl1dGlsL3BlbTJkZXIkKEVYRVhUKQkJdXRpbC9zdHJlcnJvciQoRVhFWFQpCQlcCisJeDUwOS9jZXJ0X2FwcCQoRVhFWFQpCQl4NTA5L2NybF9hcHAkKEVYRVhUKQkJXAorCXg1MDkvY2VydF9yZXEkKEVYRVhUKQkJeDUwOS9jZXJ0X3dyaXRlJChFWEVYVCkJCVwKKwl4NTA5L3JlcV9hcHAkKEVYRVhUKQorCitpZmRlZiBQVEhSRUFECitBUFBTICs9CXNzbC9zc2xfcHRocmVhZF9zZXJ2ZXIkKEVYRVhUKQorZW5kaWYKKworLlNJTEVOVDoKKworLlBIT05ZOiBhbGwgY2xlYW4gbGlzdAorCithbGw6ICQoQVBQUykKKworJChERVApOgorCSQoTUFLRSkgLUMgLi4vbGlicmFyeQorCithZXMvYWVzY3J5cHQyJChFWEVYVCk6IGFlcy9hZXNjcnlwdDIuYyAkKERFUCkKKwllY2hvICIgIENDICAgIGFlcy9hZXNjcnlwdDIuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIGFlcy9hZXNjcnlwdDIuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworYWVzL2NyeXB0X2FuZF9oYXNoJChFWEVYVCk6IGFlcy9jcnlwdF9hbmRfaGFzaC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgYWVzL2NyeXB0X2FuZF9oYXNoLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBhZXMvY3J5cHRfYW5kX2hhc2guYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworaGFzaC9oZWxsbyQoRVhFWFQpOiBoYXNoL2hlbGxvLmMgJChERVApCisJZWNobyAiICBDQyAgICBoYXNoL2hlbGxvLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBoYXNoL2hlbGxvLmMgICAgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK2hhc2gvZ2VuZXJpY19zdW0kKEVYRVhUKTogaGFzaC9nZW5lcmljX3N1bS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgaGFzaC9nZW5lcmljX3N1bS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgaGFzaC9nZW5lcmljX3N1bS5jICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L2RoX2NsaWVudCQoRVhFWFQpOiBwa2V5L2RoX2NsaWVudC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9kaF9jbGllbnQuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvZGhfY2xpZW50LmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9kaF9nZW5wcmltZSQoRVhFWFQpOiBwa2V5L2RoX2dlbnByaW1lLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L2RoX2dlbnByaW1lLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L2RoX2dlbnByaW1lLmMgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvZGhfc2VydmVyJChFWEVYVCk6IHBrZXkvZGhfc2VydmVyLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L2RoX3NlcnZlci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9kaF9zZXJ2ZXIuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L2VjZGhfY3VydmUyNTUxOSQoRVhFWFQpOiBwa2V5L2VjZGhfY3VydmUyNTUxOS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9lY2RoX2N1cnZlMjU1MTkuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvZWNkaF9jdXJ2ZTI1NTE5LmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9lY2RzYSQoRVhFWFQpOiBwa2V5L2VjZHNhLmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L2VjZHNhLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L2VjZHNhLmMgICAgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvZ2VuX2tleSQoRVhFWFQpOiBwa2V5L2dlbl9rZXkuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvZ2VuX2tleS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9nZW5fa2V5LmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9rZXlfYXBwJChFWEVYVCk6IHBrZXkva2V5X2FwcC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9rZXlfYXBwLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L2tleV9hcHAuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L2tleV9hcHBfd3JpdGVyJChFWEVYVCk6IHBrZXkva2V5X2FwcF93cml0ZXIuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkva2V5X2FwcF93cml0ZXIuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkva2V5X2FwcF93cml0ZXIuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L21waV9kZW1vJChFWEVYVCk6IHBrZXkvbXBpX2RlbW8uYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvbXBpX2RlbW8uYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvbXBpX2RlbW8uYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9wa19kZWNyeXB0JChFWEVYVCk6IHBrZXkvcGtfZGVjcnlwdC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9wa19kZWNyeXB0LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3BrX2RlY3J5cHQuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9wa19lbmNyeXB0JChFWEVYVCk6IHBrZXkvcGtfZW5jcnlwdC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9wa19lbmNyeXB0LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3BrX2VuY3J5cHQuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9wa19zaWduJChFWEVYVCk6IHBrZXkvcGtfc2lnbi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9wa19zaWduLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3BrX3NpZ24uYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9wa192ZXJpZnkkKEVYRVhUKTogcGtleS9wa192ZXJpZnkuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcGtfdmVyaWZ5LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3BrX3ZlcmlmeS5jICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9yc2FfZ2Vua2V5JChFWEVYVCk6IHBrZXkvcnNhX2dlbmtleS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9yc2FfZ2Vua2V5LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3JzYV9nZW5rZXkuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcnNhX3NpZ24kKEVYRVhUKTogcGtleS9yc2Ffc2lnbi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9yc2Ffc2lnbi5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9yc2Ffc2lnbi5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L3JzYV92ZXJpZnkkKEVYRVhUKTogcGtleS9yc2FfdmVyaWZ5LmMgJChERVApCisJZWNobyAiICBDQyAgICBwa2V5L3JzYV92ZXJpZnkuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvcnNhX3ZlcmlmeS5jICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcGtleS9yc2Ffc2lnbl9wc3MkKEVYRVhUKTogcGtleS9yc2Ffc2lnbl9wc3MuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcnNhX3NpZ25fcHNzLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBwa2V5L3JzYV9zaWduX3Bzcy5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L3JzYV92ZXJpZnlfcHNzJChFWEVYVCk6IHBrZXkvcnNhX3ZlcmlmeV9wc3MuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcnNhX3ZlcmlmeV9wc3MuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvcnNhX3ZlcmlmeV9wc3MuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3BrZXkvcnNhX2RlY3J5cHQkKEVYRVhUKTogcGtleS9yc2FfZGVjcnlwdC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcGtleS9yc2FfZGVjcnlwdC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgcGtleS9yc2FfZGVjcnlwdC5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitwa2V5L3JzYV9lbmNyeXB0JChFWEVYVCk6IHBrZXkvcnNhX2VuY3J5cHQuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHBrZXkvcnNhX2VuY3J5cHQuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHBrZXkvcnNhX2VuY3J5cHQuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcmFuZG9tL2dlbl9lbnRyb3B5JChFWEVYVCk6IHJhbmRvbS9nZW5fZW50cm9weS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcmFuZG9tL2dlbl9lbnRyb3B5LmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSByYW5kb20vZ2VuX2VudHJvcHkuYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlJChFWEVYVCk6IHJhbmRvbS9nZW5fcmFuZG9tX2hhdmVnZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSByYW5kb20vZ2VuX3JhbmRvbV9oYXZlZ2UuYyAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworcmFuZG9tL2dlbl9yYW5kb21fY3RyX2RyYmckKEVYRVhUKTogcmFuZG9tL2dlbl9yYW5kb21fY3RyX2RyYmcuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHJhbmRvbS9nZW5fcmFuZG9tX2N0cl9kcmJnLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSByYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZy5jICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitzc2wvZHRsc19jbGllbnQkKEVYRVhUKTogc3NsL2R0bHNfY2xpZW50LmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvZHRsc19jbGllbnQuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHNzbC9kdGxzX2NsaWVudC5jICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL2R0bHNfc2VydmVyJChFWEVYVCk6IHNzbC9kdGxzX3NlcnZlci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgc3NsL2R0bHNfc2VydmVyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvZHRsc19zZXJ2ZXIuYyAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3NzbC9zc2xfY2xpZW50MSQoRVhFWFQpOiBzc2wvc3NsX2NsaWVudDEuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHNzbC9zc2xfY2xpZW50MS5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgc3NsL3NzbF9jbGllbnQxLmMgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitzc2wvc3NsX2NsaWVudDIkKEVYRVhUKTogc3NsL3NzbF9jbGllbnQyLmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX2NsaWVudDIuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHNzbC9zc2xfY2xpZW50Mi5jICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL3NzbF9zZXJ2ZXIkKEVYRVhUKTogc3NsL3NzbF9zZXJ2ZXIuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHNzbC9zc2xfc2VydmVyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvc3NsX3NlcnZlci5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3NzbC9zc2xfc2VydmVyMiQoRVhFWFQpOiBzc2wvc3NsX3NlcnZlcjIuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHNzbC9zc2xfc2VydmVyMi5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgc3NsL3NzbF9zZXJ2ZXIyLmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL3NzbF9mb3JrX3NlcnZlciQoRVhFWFQpOiBzc2wvc3NsX2Zvcmtfc2VydmVyLmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX2Zvcmtfc2VydmVyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvc3NsX2Zvcmtfc2VydmVyLmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworc3NsL3NzbF9wdGhyZWFkX3NlcnZlciQoRVhFWFQpOiBzc2wvc3NsX3B0aHJlYWRfc2VydmVyLmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvc3NsX3B0aHJlYWRfc2VydmVyLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBzc2wvc3NsX3B0aHJlYWRfc2VydmVyLmMgICAkKExPQ0FMX0xERkxBR1MpIC1scHRocmVhZCAgJChMREZMQUdTKSAtbyAkQAorCitzc2wvc3NsX21haWxfY2xpZW50JChFWEVYVCk6IHNzbC9zc2xfbWFpbF9jbGllbnQuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHNzbC9zc2xfbWFpbF9jbGllbnQuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHNzbC9zc2xfbWFpbF9jbGllbnQuYyAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCitzc2wvbWluaV9jbGllbnQkKEVYRVhUKTogc3NsL21pbmlfY2xpZW50LmMgJChERVApCisJZWNobyAiICBDQyAgICBzc2wvbWluaV9jbGllbnQuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHNzbC9taW5pX2NsaWVudC5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Qvc3NsX2NlcnRfdGVzdCQoRVhFWFQpOiB0ZXN0L3NzbF9jZXJ0X3Rlc3QuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHRlc3Qvc3NsX2NlcnRfdGVzdC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgdGVzdC9zc2xfY2VydF90ZXN0LmMgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdC9iZW5jaG1hcmskKEVYRVhUKTogdGVzdC9iZW5jaG1hcmsuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHRlc3QvYmVuY2htYXJrLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSB0ZXN0L2JlbmNobWFyay5jICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Qvc2VsZnRlc3QkKEVYRVhUKTogdGVzdC9zZWxmdGVzdC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgdGVzdC9zZWxmdGVzdC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgdGVzdC9zZWxmdGVzdC5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0L3VkcF9wcm94eSQoRVhFWFQpOiB0ZXN0L3VkcF9wcm94eS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgdGVzdC91ZHBfcHJveHkuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHRlc3QvdWRwX3Byb3h5LmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3V0aWwvcGVtMmRlciQoRVhFWFQpOiB1dGlsL3BlbTJkZXIuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHV0aWwvcGVtMmRlci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgdXRpbC9wZW0yZGVyLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3V0aWwvc3RyZXJyb3IkKEVYRVhUKTogdXRpbC9zdHJlcnJvci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgdXRpbC9zdHJlcnJvci5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgdXRpbC9zdHJlcnJvci5jICAgICQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit4NTA5L2NlcnRfYXBwJChFWEVYVCk6IHg1MDkvY2VydF9hcHAuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHg1MDkvY2VydF9hcHAuYyIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIHg1MDkvY2VydF9hcHAuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworeDUwOS9jZXJ0X3dyaXRlJChFWEVYVCk6IHg1MDkvY2VydF93cml0ZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgeDUwOS9jZXJ0X3dyaXRlLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSB4NTA5L2NlcnRfd3JpdGUuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworeDUwOS9jcmxfYXBwJChFWEVYVCk6IHg1MDkvY3JsX2FwcC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgeDUwOS9jcmxfYXBwLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSB4NTA5L2NybF9hcHAuYyAgICAkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworeDUwOS9jZXJ0X3JlcSQoRVhFWFQpOiB4NTA5L2NlcnRfcmVxLmMgJChERVApCisJZWNobyAiICBDQyAgICB4NTA5L2NlcnRfcmVxLmMiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSB4NTA5L2NlcnRfcmVxLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3g1MDkvcmVxX2FwcCQoRVhFWFQpOiB4NTA5L3JlcV9hcHAuYyAkKERFUCkKKwllY2hvICIgIENDICAgIHg1MDkvcmVxX2FwcC5jIgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgeDUwOS9yZXFfYXBwLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK2NsZWFuOgoraWZuZGVmIFdJTkRPV1MKKwlybSAtZiAkKEFQUFMpCitlbHNlCisJZGVsIC9TIC9RIC9GICoubyAqLmV4ZQorZW5kaWYKKworbGlzdDoKKwllY2hvICQoQVBQUykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9hZXMvQ01ha2VMaXN0cy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvYWVzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTBjYWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvYWVzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOSBAQAorYWRkX2V4ZWN1dGFibGUoYWVzY3J5cHQyIGFlc2NyeXB0Mi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGFlc2NyeXB0MiBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShjcnlwdF9hbmRfaGFzaCBjcnlwdF9hbmRfaGFzaC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNyeXB0X2FuZF9oYXNoIG1iZWR0bHMpCisKK2luc3RhbGwoVEFSR0VUUyBhZXNjcnlwdDIgY3J5cHRfYW5kX2hhc2gKKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvYWVzL2Flc2NyeXB0Mi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9hZXNjcnlwdDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzdkNzdmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9hZXNjcnlwdDIuYwpAQCAtMCwwICsxLDQ1MiBAQAorLyoKKyAqICBBRVMtMjU2IGZpbGUgZW5jcnlwdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIE1PREVfRU5DUllQVCAgICAwCisjZGVmaW5lIE1PREVfREVDUllQVCAgICAxCisKKyNkZWZpbmUgVVNBR0UgICBcCisgICAgIlxuICBhZXNjcnlwdDIgPG1vZGU+IDxpbnB1dCBmaWxlbmFtZT4gPG91dHB1dCBmaWxlbmFtZT4gPGtleT5cbiIgXAorICAgICJcbiAgIDxtb2RlPjogMCA9IGVuY3J5cHQsIDEgPSBkZWNyeXB0XG4iIFwKKyAgICAiXG4gIGV4YW1wbGU6IGFlc2NyeXB0MiAwIGZpbGUgZmlsZS5hZXMgaGV4OkU3NkIyNDEzOTU4QjAwRTE5M1xuIiBcCisgICAgIlxuIgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfTURfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19BRVNfQyBhbmQvb3IgTUJFRFRMU19TSEEyNTZfQyAiCisgICAgICAgICAgICAgICAgICAgICJhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgTUJFRFRMU19NRF9DICIKKyAgICAgICAgICAgICAgICAgICAgIm5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAxOworCisgICAgdW5zaWduZWQgaW50IGksIG47CisgICAgaW50IG1vZGUsIGxhc3RuOworICAgIHNpemVfdCBrZXlsZW47CisgICAgRklMRSAqZmtleSwgKmZpbiA9IE5VTEwsICpmb3V0ID0gTlVMTDsKKworICAgIGNoYXIgKnA7CisgICAgdW5zaWduZWQgY2hhciBJVlsxNl07CisgICAgdW5zaWduZWQgY2hhciBrZXlbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFszMl07CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBkaWZmOworCisgICAgbWJlZHRsc19hZXNfY29udGV4dCBhZXNfY3R4OworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IHNoYV9jdHg7CisKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisgICAgbG9uZyBmaWxlc2l6ZSwgb2Zmc2V0OworI2VsaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgTEFSR0VfSU5URUdFUiBsaV9zaXplOworICAgIF9faW50NjQgZmlsZXNpemUsIG9mZnNldDsKKyNlbHNlCisgICAgICBvZmZfdCBmaWxlc2l6ZSwgb2Zmc2V0OworI2VuZGlmCisKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmYWVzX2N0eCApOworICAgIG1iZWR0bHNfbWRfaW5pdCggJnNoYV9jdHggKTsKKworICAgIHJldCA9IG1iZWR0bHNfbWRfc2V0dXAoICZzaGFfY3R4LCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApLCAxICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfbWRfc2V0dXAoKSByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFBhcnNlIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgorICAgICAqLworICAgIGlmKCBhcmdjICE9IDUgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtb2RlID0gYXRvaSggYXJndlsxXSApOworICAgIG1lbXNldChJViwgMCwgc2l6ZW9mKElWKSk7CisgICAgbWVtc2V0KGtleSwgMCwgc2l6ZW9mKGtleSkpOworICAgIG1lbXNldChkaWdlc3QsIDAsIHNpemVvZihkaWdlc3QpKTsKKyAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICBpZiggbW9kZSAhPSBNT0RFX0VOQ1JZUFQgJiYgbW9kZSAhPSBNT0RFX0RFQ1JZUFQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJpbnZhbGlkZSBvcGVyYXRpb24gbW9kZVxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIHN0cmNtcCggYXJndlsyXSwgYXJndlszXSApID09IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJpbnB1dCBhbmQgb3V0cHV0IGZpbGVuYW1lcyBtdXN0IGRpZmZlclxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggZmluID0gZm9wZW4oIGFyZ3ZbMl0sICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmb3BlbiglcyxyYikgZmFpbGVkXG4iLCBhcmd2WzJdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCBmb3V0ID0gZm9wZW4oIGFyZ3ZbM10sICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZm9wZW4oJXMsd2IrKSBmYWlsZWRcbiIsIGFyZ3ZbM10gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCB0aGUgc2VjcmV0IGtleSBhbmQgY2xlYW4gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgKi8KKyAgICBpZiggKCBma2V5ID0gZm9wZW4oIGFyZ3ZbNF0sICJyYiIgKSApICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAga2V5bGVuID0gZnJlYWQoIGtleSwgMSwgc2l6ZW9mKCBrZXkgKSwgZmtleSApOworICAgICAgICBmY2xvc2UoIGZrZXkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIG1lbWNtcCggYXJndls0XSwgImhleDoiLCA0ICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHAgPSAmYXJndls0XVs0XTsKKyAgICAgICAgICAgIGtleWxlbiA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlKCBzc2NhbmYoIHAsICIlMDJYIiwgJm4gKSA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICBrZXlsZW4gPCAoaW50KSBzaXplb2YoIGtleSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBrZXlba2V5bGVuKytdID0gKHVuc2lnbmVkIGNoYXIpIG47CisgICAgICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAga2V5bGVuID0gc3RybGVuKCBhcmd2WzRdICk7CisKKyAgICAgICAgICAgIGlmKCBrZXlsZW4gPiAoaW50KSBzaXplb2YoIGtleSApICkKKyAgICAgICAgICAgICAgICBrZXlsZW4gPSAoaW50KSBzaXplb2YoIGtleSApOworCisgICAgICAgICAgICBtZW1jcHkoIGtleSwgYXJndls0XSwga2V5bGVuICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtZW1zZXQoIGFyZ3ZbNF0sIDAsIHN0cmxlbiggYXJndls0XSApICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisgICAgZmlsZXNpemUgPSBmc2VlayggZmluLCAwTCwgU0VFS19FTkQgKTsKKyNlbHNlCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgLyoKKyAgICAgKiBTdXBwb3J0IGxhcmdlIGZpbGVzICg+IDJHYikgb24gV2luMzIKKyAgICAgKi8KKyAgICBsaV9zaXplLlF1YWRQYXJ0ID0gMDsKKyAgICBsaV9zaXplLkxvd1BhcnQgID0KKyAgICAgICAgU2V0RmlsZVBvaW50ZXIoIChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKCBfZmlsZW5vKCBmaW4gKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlfc2l6ZS5Mb3dQYXJ0LCAmbGlfc2l6ZS5IaWdoUGFydCwgRklMRV9FTkQgKTsKKworICAgIGlmKCBsaV9zaXplLkxvd1BhcnQgPT0gMHhGRkZGRkZGRiAmJiBHZXRMYXN0RXJyb3IoKSAhPSBOT19FUlJPUiApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIlNldEZpbGVQb2ludGVyKDAsRklMRV9FTkQpIGZhaWxlZFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZmlsZXNpemUgPSBsaV9zaXplLlF1YWRQYXJ0OworI2Vsc2UKKyAgICBpZiggKCBmaWxlc2l6ZSA9IGxzZWVrKCBmaWxlbm8oIGZpbiApLCAwLCBTRUVLX0VORCApICkgPCAwICkKKyAgICB7CisgICAgICAgIHBlcnJvciggImxzZWVrIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisjZW5kaWYKKworICAgIGlmKCBmc2VlayggZmluLCAwLCBTRUVLX1NFVCApIDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZzZWVrKDAsU0VFS19TRVQpIGZhaWxlZFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG1vZGUgPT0gTU9ERV9FTkNSWVBUICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEdlbmVyYXRlIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYXM6CisgICAgICAgICAqIElWID0gU0hBLTI1NiggZmlsZXNpemUgfHwgZmlsZW5hbWUgKVswLi4xNV0KKyAgICAgICAgICovCisgICAgICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgICAgICAgICAgYnVmZmVyW2ldID0gKHVuc2lnbmVkIGNoYXIpKCBmaWxlc2l6ZSA+PiAoIGkgPDwgMyApICk7CisKKyAgICAgICAgcCA9IGFyZ3ZbMl07CisKKyAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoICZzaGFfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmc2hhX2N0eCwgYnVmZmVyLCA4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmc2hhX2N0eCwgKHVuc2lnbmVkIGNoYXIgKikgcCwgc3RybGVuKCBwICkgKTsKKyAgICAgICAgbWJlZHRsc19tZF9maW5pc2goICZzaGFfY3R4LCBkaWdlc3QgKTsKKworICAgICAgICBtZW1jcHkoIElWLCBkaWdlc3QsIDE2ICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIGxhc3QgZm91ciBiaXRzIGluIHRoZSBJViBhcmUgYWN0dWFsbHkgdXNlZAorICAgICAgICAgKiB0byBzdG9yZSB0aGUgZmlsZSBzaXplIG1vZHVsbyB0aGUgQUVTIGJsb2NrIHNpemUuCisgICAgICAgICAqLworICAgICAgICBsYXN0biA9IChpbnQpKCBmaWxlc2l6ZSAmIDB4MEYgKTsKKworICAgICAgICBJVlsxNV0gPSAodW5zaWduZWQgY2hhcikKKyAgICAgICAgICAgICggKCBJVlsxNV0gJiAweEYwICkgfCBsYXN0biApOworCisgICAgICAgIC8qCisgICAgICAgICAqIEFwcGVuZCB0aGUgSVYgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgb3V0cHV0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGZ3cml0ZSggSVYsIDEsIDE2LCBmb3V0ICkgIT0gMTYgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglZCBieXRlcykgZmFpbGVkXG4iLCAxNiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSGFzaCB0aGUgSVYgYW5kIHRoZSBzZWNyZXQga2V5IHRvZ2V0aGVyIDgxOTIgdGltZXMKKyAgICAgICAgICogdXNpbmcgdGhlIHJlc3VsdCB0byBzZXR1cCB0aGUgQUVTIGNvbnRleHQgYW5kIEhNQUMuCisgICAgICAgICAqLworICAgICAgICBtZW1zZXQoIGRpZ2VzdCwgMCwgIDMyICk7CisgICAgICAgIG1lbWNweSggZGlnZXN0LCBJViwgMTYgKTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODE5MjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoICZzaGFfY3R4ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJnNoYV9jdHgsIGRpZ2VzdCwgMzIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmc2hhX2N0eCwga2V5LCBrZXlsZW4gKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmc2hhX2N0eCwgZGlnZXN0ICk7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoIGtleSwgMCwgc2l6ZW9mKCBrZXkgKSApOworICAgICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmYWVzX2N0eCwgZGlnZXN0LCAyNTYgKTsKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJnNoYV9jdHgsIGRpZ2VzdCwgMzIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBFbmNyeXB0IGFuZCB3cml0ZSB0aGUgY2lwaGVydGV4dC4KKyAgICAgICAgICovCisgICAgICAgIGZvciggb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZmlsZXNpemU7IG9mZnNldCArPSAxNiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG4gPSAoIGZpbGVzaXplIC0gb2Zmc2V0ID4gMTYgKSA/IDE2IDogKGludCkKKyAgICAgICAgICAgICAgICAoIGZpbGVzaXplIC0gb2Zmc2V0ICk7CisKKyAgICAgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCBuLCBmaW4gKSAhPSAoc2l6ZV90KSBuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZyZWFkKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIG4gKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAodW5zaWduZWQgY2hhcikoIGJ1ZmZlcltpXSBeIElWW2ldICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmFlc19jdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIGJ1ZmZlciwgYnVmZmVyICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmc2hhX2N0eCwgYnVmZmVyLCAxNiApOworCisgICAgICAgICAgICBpZiggZndyaXRlKCBidWZmZXIsIDEsIDE2LCBmb3V0ICkgIT0gMTYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZndyaXRlKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIDE2ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZW1jcHkoIElWLCBidWZmZXIsIDE2ICk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBGaW5hbGx5IHdyaXRlIHRoZSBITUFDLgorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJnNoYV9jdHgsIGRpZ2VzdCApOworCisgICAgICAgIGlmKCBmd3JpdGUoIGRpZ2VzdCwgMSwgMzIsIGZvdXQgKSAhPSAzMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZndyaXRlKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIDE2ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggbW9kZSA9PSBNT0RFX0RFQ1JZUFQgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbMTZdOworCisgICAgICAgIC8qCisgICAgICAgICAqICBUaGUgZW5jcnlwdGVkIGZpbGUgbXVzdCBiZSBzdHJ1Y3R1cmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAwMCAuLiAxNSAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gVmVjdG9yCisgICAgICAgICAqICAgICAgICAxNiAuLiAzMSAgICAgICAgICAgICAgQUVTIEVuY3J5cHRlZCBCbG9jayAjMQorICAgICAgICAgKiAgICAgICAgICAgLi4KKyAgICAgICAgICogICAgICBOKjE2IC4uIChOKzEpKjE2IC0gMSAgICBBRVMgRW5jcnlwdGVkIEJsb2NrICNOCisgICAgICAgICAqICAoTisxKSoxNiAuLiAoTisxKSoxNiArIDMyICAgSE1BQy1TSEEtMjU2KGNpcGhlcnRleHQpCisgICAgICAgICAqLworICAgICAgICBpZiggZmlsZXNpemUgPCA0OCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRmlsZSB0b28gc2hvcnQgdG8gYmUgZW5jcnlwdGVkLlxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoICggZmlsZXNpemUgJiAweDBGICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRmlsZSBzaXplIG5vdCBhIG11bHRpcGxlIG9mIDE2LlxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU3VidHJhY3QgdGhlIElWICsgSE1BQyBsZW5ndGguCisgICAgICAgICAqLworICAgICAgICBmaWxlc2l6ZSAtPSAoIDE2ICsgMzIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkIHRoZSBJViBhbmQgb3JpZ2luYWwgZmlsZXNpemUgbW9kdWxvIDE2LgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGZyZWFkKCBidWZmZXIsIDEsIDE2LCBmaW4gKSAhPSAxNiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgMTYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggSVYsIGJ1ZmZlciwgMTYgKTsKKyAgICAgICAgbGFzdG4gPSBJVlsxNV0gJiAweDBGOworCisgICAgICAgIC8qCisgICAgICAgICAqIEhhc2ggdGhlIElWIGFuZCB0aGUgc2VjcmV0IGtleSB0b2dldGhlciA4MTkyIHRpbWVzCisgICAgICAgICAqIHVzaW5nIHRoZSByZXN1bHQgdG8gc2V0dXAgdGhlIEFFUyBjb250ZXh0IGFuZCBITUFDLgorICAgICAgICAgKi8KKyAgICAgICAgbWVtc2V0KCBkaWdlc3QsIDAsICAzMiApOworICAgICAgICBtZW1jcHkoIGRpZ2VzdCwgSVYsIDE2ICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDgxOTI7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmc2hhX2N0eCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZzaGFfY3R4LCBkaWdlc3QsIDMyICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJnNoYV9jdHgsIGtleSwga2V5bGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggJnNoYV9jdHgsIGRpZ2VzdCApOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsKKyAgICAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2RlYyggJmFlc19jdHgsIGRpZ2VzdCwgMjU2ICk7CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZzaGFfY3R4LCBkaWdlc3QsIDMyICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRGVjcnlwdCBhbmQgd3JpdGUgdGhlIHBsYWludGV4dC4KKyAgICAgICAgICovCisgICAgICAgIGZvciggb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZmlsZXNpemU7IG9mZnNldCArPSAxNiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCAxNiwgZmluICkgIT0gMTYgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgMTYgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lbWNweSggdG1wLCBidWZmZXIsIDE2ICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZzaGFfY3R4LCBidWZmZXIsIDE2ICk7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZhZXNfY3R4LCBNQkVEVExTX0FFU19ERUNSWVBULCBidWZmZXIsIGJ1ZmZlciApOworCisgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMTY7IGkrKyApCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gKHVuc2lnbmVkIGNoYXIpKCBidWZmZXJbaV0gXiBJVltpXSApOworCisgICAgICAgICAgICBtZW1jcHkoIElWLCB0bXAsIDE2ICk7CisKKyAgICAgICAgICAgIG4gPSAoIGxhc3RuID4gMCAmJiBvZmZzZXQgPT0gZmlsZXNpemUgLSAxNiApCisgICAgICAgICAgICAgICAgPyBsYXN0biA6IDE2OworCisgICAgICAgICAgICBpZiggZndyaXRlKCBidWZmZXIsIDEsIG4sIGZvdXQgKSAhPSAoc2l6ZV90KSBuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglZCBieXRlcykgZmFpbGVkXG4iLCBuICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVmVyaWZ5IHRoZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUuCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmc2hhX2N0eCwgZGlnZXN0ICk7CisKKyAgICAgICAgaWYoIGZyZWFkKCBidWZmZXIsIDEsIDMyLCBmaW4gKSAhPSAzMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgMzIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFVzZSBjb25zdGFudC10aW1lIGJ1ZmZlciBjb21wYXJpc29uICovCisgICAgICAgIGRpZmYgPSAwOworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMzI7IGkrKyApCisgICAgICAgICAgICBkaWZmIHw9IGRpZ2VzdFtpXSBeIGJ1ZmZlcltpXTsKKworICAgICAgICBpZiggZGlmZiAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJITUFDIGNoZWNrIGZhaWxlZDogd3Jvbmcga2V5LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvciBmaWxlIGNvcnJ1cHRlZC5cbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgaWYoIGZpbiApCisgICAgICAgIGZjbG9zZSggZmluICk7CisgICAgaWYoIGZvdXQgKQorICAgICAgICBmY2xvc2UoIGZvdXQgKTsKKworICAgIG1lbXNldCggYnVmZmVyLCAwLCBzaXplb2YoIGJ1ZmZlciApICk7CisgICAgbWVtc2V0KCBkaWdlc3QsIDAsIHNpemVvZiggZGlnZXN0ICkgKTsKKworICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZhZXNfY3R4ICk7CisgICAgbWJlZHRsc19tZF9mcmVlKCAmc2hhX2N0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0FFU19DICYmIE1CRURUTFNfU0hBMjU2X0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9jcnlwdF9hbmRfaGFzaC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2Flcy9jcnlwdF9hbmRfaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjk1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvYWVzL2NyeXB0X2FuZF9oYXNoLmMKQEAgLTAsMCArMSw1NTEgQEAKKy8qCisgKiAgXGJyaWVmICBHZW5lcmljIGZpbGUgZW5jcnlwdGlvbiBwcm9ncmFtIHVzaW5nIGdlbmVyaWMgd3JhcHBlcnMgZm9yIGNvbmZpZ3VyZWQKKyAqICAgICAgICAgIHNlY3VyaXR5LgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykgJiYgZGVmaW5lZChNQkVEVExTX01EX0MpICYmIFwKKyBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWYgIWRlZmluZWQoX1dJTjMyX1dDRSkKKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisjZWxzZQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNkZWZpbmUgTU9ERV9FTkNSWVBUICAgIDAKKyNkZWZpbmUgTU9ERV9ERUNSWVBUICAgIDEKKworI2RlZmluZSBVU0FHRSAgIFwKKyAgICAiXG4gIGNyeXB0X2FuZF9oYXNoIDxtb2RlPiA8aW5wdXQgZmlsZW5hbWU+IDxvdXRwdXQgZmlsZW5hbWU+IDxjaXBoZXI+IDxtYmVkdGxzX21kPiA8a2V5PlxuIiBcCisgICAgIlxuICAgPG1vZGU+OiAwID0gZW5jcnlwdCwgMSA9IGRlY3J5cHRcbiIgXAorICAgICJcbiAgZXhhbXBsZTogY3J5cHRfYW5kX2hhc2ggMCBmaWxlIGZpbGUuYWVzIEFFUy0xMjgtQ0JDIFNIQTEgaGV4OkU3NkIyNDEzOTU4QjAwRTE5M1xuIiBcCisgICAgIlxuIgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DSVBIRVJfQykgfHwgIWRlZmluZWQoTUJFRFRMU19NRF9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DSVBIRVJfQyBhbmQvb3IgTUJFRFRMU19NRF9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAxLCBpLCBuOworICAgIGludCBtb2RlOworICAgIHNpemVfdCBrZXlsZW4sIGlsZW4sIG9sZW47CisgICAgRklMRSAqZmtleSwgKmZpbiA9IE5VTEwsICpmb3V0ID0gTlVMTDsKKworICAgIGNoYXIgKnA7CisgICAgdW5zaWduZWQgY2hhciBJVlsxNl07CisgICAgdW5zaWduZWQgY2hhciBrZXlbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGRpZmY7CisKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjaXBoZXJfY3R4OworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IG1kX2N0eDsKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisgICAgbG9uZyBmaWxlc2l6ZSwgb2Zmc2V0OworI2VsaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgTEFSR0VfSU5URUdFUiBsaV9zaXplOworICAgIF9faW50NjQgZmlsZXNpemUsIG9mZnNldDsKKyNlbHNlCisgICAgICBvZmZfdCBmaWxlc2l6ZSwgb2Zmc2V0OworI2VuZGlmCisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY2lwaGVyX2N0eCApOworICAgIG1iZWR0bHNfbWRfaW5pdCggJm1kX2N0eCApOworCisgICAgLyoKKyAgICAgKiBQYXJzZSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBpZiggYXJnYyAhPSA3ICkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCAqbGlzdDsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkF2YWlsYWJsZSBjaXBoZXJzOlxuIiApOworICAgICAgICBsaXN0ID0gbWJlZHRsc19jaXBoZXJfbGlzdCgpOworICAgICAgICB3aGlsZSggKmxpc3QgKQorICAgICAgICB7CisgICAgICAgICAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCAqbGlzdCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICVzXG4iLCBjaXBoZXJfaW5mby0+bmFtZSApOworICAgICAgICAgICAgbGlzdCsrOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbkF2YWlsYWJsZSBtZXNzYWdlIGRpZ2VzdHM6XG4iICk7CisgICAgICAgIGxpc3QgPSBtYmVkdGxzX21kX2xpc3QoKTsKKyAgICAgICAgd2hpbGUoICpsaXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoICpsaXN0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgJXNcbiIsIG1iZWR0bHNfbWRfZ2V0X25hbWUoIG1kX2luZm8gKSApOworICAgICAgICAgICAgbGlzdCsrOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtb2RlID0gYXRvaSggYXJndlsxXSApOworCisgICAgaWYoIG1vZGUgIT0gTU9ERV9FTkNSWVBUICYmIG1vZGUgIT0gTU9ERV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZVxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIHN0cmNtcCggYXJndlsyXSwgYXJndlszXSApID09IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJpbnB1dCBhbmQgb3V0cHV0IGZpbGVuYW1lcyBtdXN0IGRpZmZlclxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggZmluID0gZm9wZW4oIGFyZ3ZbMl0sICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmb3BlbiglcyxyYikgZmFpbGVkXG4iLCBhcmd2WzJdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCBmb3V0ID0gZm9wZW4oIGFyZ3ZbM10sICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZm9wZW4oJXMsd2IrKSBmYWlsZWRcbiIsIGFyZ3ZbM10gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCB0aGUgQ2lwaGVyIGFuZCBNRCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgKi8KKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcoIGFyZ3ZbNF0gKTsKKyAgICBpZiggY2lwaGVyX2luZm8gPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkNpcGhlciAnJXMnIG5vdCBmb3VuZFxuIiwgYXJndls0XSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY2lwaGVyX2N0eCwgY2lwaGVyX2luZm8pICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfY2lwaGVyX3NldHVwIGZhaWxlZFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggYXJndls1XSApOworICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJNZXNzYWdlIERpZ2VzdCAnJXMnIG5vdCBmb3VuZFxuIiwgYXJndls1XSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfbWRfc2V0dXAoICZtZF9jdHgsIG1kX2luZm8sIDEgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19tZF9zZXR1cCBmYWlsZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogUmVhZCB0aGUgc2VjcmV0IGtleSBhbmQgY2xlYW4gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgKi8KKyAgICBpZiggKCBma2V5ID0gZm9wZW4oIGFyZ3ZbNl0sICJyYiIgKSApICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAga2V5bGVuID0gZnJlYWQoIGtleSwgMSwgc2l6ZW9mKCBrZXkgKSwgZmtleSApOworICAgICAgICBmY2xvc2UoIGZrZXkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIG1lbWNtcCggYXJndls2XSwgImhleDoiLCA0ICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHAgPSAmYXJndls2XVs0XTsKKyAgICAgICAgICAgIGtleWxlbiA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlKCBzc2NhbmYoIHAsICIlMDJYIiwgJm4gKSA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICBrZXlsZW4gPCAoaW50KSBzaXplb2YoIGtleSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBrZXlba2V5bGVuKytdID0gKHVuc2lnbmVkIGNoYXIpIG47CisgICAgICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAga2V5bGVuID0gc3RybGVuKCBhcmd2WzZdICk7CisKKyAgICAgICAgICAgIGlmKCBrZXlsZW4gPiAoaW50KSBzaXplb2YoIGtleSApICkKKyAgICAgICAgICAgICAgICBrZXlsZW4gPSAoaW50KSBzaXplb2YoIGtleSApOworCisgICAgICAgICAgICBtZW1jcHkoIGtleSwgYXJndls2XSwga2V5bGVuICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtZW1zZXQoIGFyZ3ZbNl0sIDAsIHN0cmxlbiggYXJndls2XSApICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisgICAgZmlsZXNpemUgPSBmc2VlayggZmluLCAwTCwgU0VFS19FTkQgKTsKKyNlbHNlCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgLyoKKyAgICAgKiBTdXBwb3J0IGxhcmdlIGZpbGVzICg+IDJHYikgb24gV2luMzIKKyAgICAgKi8KKyAgICBsaV9zaXplLlF1YWRQYXJ0ID0gMDsKKyAgICBsaV9zaXplLkxvd1BhcnQgID0KKyAgICAgICAgU2V0RmlsZVBvaW50ZXIoIChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlKCBfZmlsZW5vKCBmaW4gKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlfc2l6ZS5Mb3dQYXJ0LCAmbGlfc2l6ZS5IaWdoUGFydCwgRklMRV9FTkQgKTsKKworICAgIGlmKCBsaV9zaXplLkxvd1BhcnQgPT0gMHhGRkZGRkZGRiAmJiBHZXRMYXN0RXJyb3IoKSAhPSBOT19FUlJPUiApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIlNldEZpbGVQb2ludGVyKDAsRklMRV9FTkQpIGZhaWxlZFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZmlsZXNpemUgPSBsaV9zaXplLlF1YWRQYXJ0OworI2Vsc2UKKyAgICBpZiggKCBmaWxlc2l6ZSA9IGxzZWVrKCBmaWxlbm8oIGZpbiApLCAwLCBTRUVLX0VORCApICkgPCAwICkKKyAgICB7CisgICAgICAgIHBlcnJvciggImxzZWVrIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisjZW5kaWYKKworICAgIGlmKCBmc2VlayggZmluLCAwLCBTRUVLX1NFVCApIDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZzZWVrKDAsU0VFS19TRVQpIGZhaWxlZFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG1vZGUgPT0gTU9ERV9FTkNSWVBUICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEdlbmVyYXRlIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYXM6CisgICAgICAgICAqIElWID0gTUQoIGZpbGVzaXplIHx8IGZpbGVuYW1lIClbMC4uMTVdCisgICAgICAgICAqLworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICh1bnNpZ25lZCBjaGFyKSggZmlsZXNpemUgPj4gKCBpIDw8IDMgKSApOworCisgICAgICAgIHAgPSBhcmd2WzJdOworCisgICAgICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmbWRfY3R4ICk7CisgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBidWZmZXIsIDggKTsKKyAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsICh1bnNpZ25lZCBjaGFyICopIHAsIHN0cmxlbiggcCApICk7CisgICAgICAgIG1iZWR0bHNfbWRfZmluaXNoKCAmbWRfY3R4LCBkaWdlc3QgKTsKKworICAgICAgICBtZW1jcHkoIElWLCBkaWdlc3QsIDE2ICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQXBwZW5kIHRoZSBJViBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvdXRwdXQuCisgICAgICAgICAqLworICAgICAgICBpZiggZndyaXRlKCBJViwgMSwgMTYsIGZvdXQgKSAhPSAxNiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZndyaXRlKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIDE2ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBIYXNoIHRoZSBJViBhbmQgdGhlIHNlY3JldCBrZXkgdG9nZXRoZXIgODE5MiB0aW1lcworICAgICAgICAgKiB1c2luZyB0aGUgcmVzdWx0IHRvIHNldHVwIHRoZSBBRVMgY29udGV4dCBhbmQgSE1BQy4KKyAgICAgICAgICovCisgICAgICAgIG1lbXNldCggZGlnZXN0LCAwLCAgMzIgKTsKKyAgICAgICAgbWVtY3B5KCBkaWdlc3QsIElWLCAxNiApOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCA4MTkyOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX21kX3N0YXJ0cyggJm1kX2N0eCApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIGRpZ2VzdCwgMzIgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfdXBkYXRlKCAmbWRfY3R4LCBrZXksIGtleWxlbiApOworICAgICAgICAgICAgbWJlZHRsc19tZF9maW5pc2goICZtZF9jdHgsIGRpZ2VzdCApOworCisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoIGtleSwgMCwgc2l6ZW9mKCBrZXkgKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjaXBoZXJfY3R4LCBkaWdlc3QsIGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTkNSWVBUICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19jaXBoZXJfc2V0a2V5KCkgcmV0dXJuZWQgZXJyb3JcbiIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjaXBoZXJfY3R4LCBJViwgMTYgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl9zZXRfaXYoKSByZXR1cm5lZCBlcnJvclxuIik7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoIG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY2lwaGVyX2N0eCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfY2lwaGVyX3Jlc2V0KCkgcmV0dXJuZWQgZXJyb3JcbiIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19tZF9obWFjX3N0YXJ0cyggJm1kX2N0eCwgZGlnZXN0LCAzMiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIEVuY3J5cHQgYW5kIHdyaXRlIHRoZSBjaXBoZXJ0ZXh0LgorICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBmaWxlc2l6ZTsgb2Zmc2V0ICs9IG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY2lwaGVyX2N0eCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWxlbiA9ICggKHVuc2lnbmVkIGludCkgZmlsZXNpemUgLSBvZmZzZXQgPiBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSApID8KKyAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSA6ICh1bnNpZ25lZCBpbnQpICggZmlsZXNpemUgLSBvZmZzZXQgKTsKKworICAgICAgICAgICAgaWYoIGZyZWFkKCBidWZmZXIsIDEsIGlsZW4sIGZpbiApICE9IGlsZW4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWxkIGJ5dGVzKSBmYWlsZWRcbiIsIChsb25nKSBpbGVuICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY2lwaGVyX2N0eCwgYnVmZmVyLCBpbGVuLCBvdXRwdXQsICZvbGVuICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl91cGRhdGUoKSByZXR1cm5lZCBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmbWRfY3R4LCBvdXRwdXQsIG9sZW4gKTsKKworICAgICAgICAgICAgaWYoIGZ3cml0ZSggb3V0cHV0LCAxLCBvbGVuLCBmb3V0ICkgIT0gb2xlbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmd3JpdGUoJWxkIGJ5dGVzKSBmYWlsZWRcbiIsIChsb25nKSBvbGVuICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmNpcGhlcl9jdHgsIG91dHB1dCwgJm9sZW4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl9maW5pc2goKSByZXR1cm5lZCBlcnJvclxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIG91dHB1dCwgb2xlbiApOworCisgICAgICAgIGlmKCBmd3JpdGUoIG91dHB1dCwgMSwgb2xlbiwgZm91dCApICE9IG9sZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglbGQgYnl0ZXMpIGZhaWxlZFxuIiwgKGxvbmcpIG9sZW4gKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEZpbmFsbHkgd3JpdGUgdGhlIEhNQUMuCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmbWRfY3R4LCBkaWdlc3QgKTsKKworICAgICAgICBpZiggZndyaXRlKCBkaWdlc3QsIDEsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwgZm91dCApICE9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZndyaXRlKCVkIGJ5dGVzKSBmYWlsZWRcbiIsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIG1vZGUgPT0gTU9ERV9ERUNSWVBUICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqICBUaGUgZW5jcnlwdGVkIGZpbGUgbXVzdCBiZSBzdHJ1Y3R1cmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAwMCAuLiAxNSAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gVmVjdG9yCisgICAgICAgICAqICAgICAgICAxNiAuLiAzMSAgICAgICAgICAgICAgRW5jcnlwdGVkIEJsb2NrICMxCisgICAgICAgICAqICAgICAgICAgICAuLgorICAgICAgICAgKiAgICAgIE4qMTYgLi4gKE4rMSkqMTYgLSAxICAgIEVuY3J5cHRlZCBCbG9jayAjTgorICAgICAgICAgKiAgKE4rMSkqMTYgLi4gKE4rMSkqMTYgKyBuICAgIEhhc2goY2lwaGVydGV4dCkKKyAgICAgICAgICovCisgICAgICAgIGlmKCBmaWxlc2l6ZSA8IDE2ICsgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGaWxlIHRvbyBzaG9ydCB0byBiZSBlbmNyeXB0ZWQuXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiSW52YWxpZCBjaXBoZXIgYmxvY2sgc2l6ZTogMC4gXG4iICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayB0aGUgZmlsZSBzaXplLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoIGNpcGhlcl9pbmZvLT5tb2RlICE9IE1CRURUTFNfTU9ERV9HQ00gJiYKKyAgICAgICAgICAgICggKCBmaWxlc2l6ZSAtIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApICUKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZpbGUgY29udGVudCBub3QgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZSAoJWQpLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY2lwaGVyX2N0eCApKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFN1YnRyYWN0IHRoZSBJViArIEhNQUMgbGVuZ3RoLgorICAgICAgICAgKi8KKyAgICAgICAgZmlsZXNpemUgLT0gKCAxNiArIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworCisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQgdGhlIElWIGFuZCBvcmlnaW5hbCBmaWxlc2l6ZSBtb2R1bG8gMTYuCisgICAgICAgICAqLworICAgICAgICBpZiggZnJlYWQoIGJ1ZmZlciwgMSwgMTYsIGZpbiApICE9IDE2ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmcmVhZCglZCBieXRlcykgZmFpbGVkXG4iLCAxNiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCBJViwgYnVmZmVyLCAxNiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIEhhc2ggdGhlIElWIGFuZCB0aGUgc2VjcmV0IGtleSB0b2dldGhlciA4MTkyIHRpbWVzCisgICAgICAgICAqIHVzaW5nIHRoZSByZXN1bHQgdG8gc2V0dXAgdGhlIEFFUyBjb250ZXh0IGFuZCBITUFDLgorICAgICAgICAgKi8KKyAgICAgICAgbWVtc2V0KCBkaWdlc3QsIDAsICAzMiApOworICAgICAgICBtZW1jcHkoIGRpZ2VzdCwgSVYsIDE2ICk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDgxOTI7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfc3RhcnRzKCAmbWRfY3R4ICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX3VwZGF0ZSggJm1kX2N0eCwgZGlnZXN0LCAzMiApOworICAgICAgICAgICAgbWJlZHRsc19tZF91cGRhdGUoICZtZF9jdHgsIGtleSwga2V5bGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggJm1kX2N0eCwgZGlnZXN0ICk7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoIGtleSwgMCwgc2l6ZW9mKCBrZXkgKSApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjaXBoZXJfY3R4LCBkaWdlc3QsIGNpcGhlcl9pbmZvLT5rZXlfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ERUNSWVBUICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAibWJlZHRsc19jaXBoZXJfc2V0a2V5KCkgcmV0dXJuZWQgZXJyb3JcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjaXBoZXJfY3R4LCBJViwgMTYgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJtYmVkdGxzX2NpcGhlcl9zZXRfaXYoKSByZXR1cm5lZCBlcnJvclxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY2lwaGVyX2N0eCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfY2lwaGVyX3Jlc2V0KCkgcmV0dXJuZWQgZXJyb3JcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZtZF9jdHgsIGRpZ2VzdCwgMzIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBEZWNyeXB0IGFuZCB3cml0ZSB0aGUgcGxhaW50ZXh0LgorICAgICAgICAgKi8KKyAgICAgICAgZm9yKCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBmaWxlc2l6ZTsgb2Zmc2V0ICs9IG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY2lwaGVyX2N0eCApICkKKyAgICAgICAgeworICAgICAgICAgICAgaWxlbiA9ICggKHVuc2lnbmVkIGludCkgZmlsZXNpemUgLSBvZmZzZXQgPiBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSApID8KKyAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmNpcGhlcl9jdHggKSA6ICh1bnNpZ25lZCBpbnQpICggZmlsZXNpemUgLSBvZmZzZXQgKTsKKworICAgICAgICAgICAgaWYoIGZyZWFkKCBidWZmZXIsIDEsIGlsZW4sIGZpbiApICE9IGlsZW4gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWQgYnl0ZXMpIGZhaWxlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjaXBoZXJfY3R4ICkgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZtZF9jdHgsIGJ1ZmZlciwgaWxlbiApOworICAgICAgICAgICAgaWYoIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmNpcGhlcl9jdHgsIGJ1ZmZlciwgaWxlbiwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZW4gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIm1iZWR0bHNfY2lwaGVyX3VwZGF0ZSgpIHJldHVybmVkIGVycm9yXG4iICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiggZndyaXRlKCBvdXRwdXQsIDEsIG9sZW4sIGZvdXQgKSAhPSBvbGVuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImZ3cml0ZSglbGQgYnl0ZXMpIGZhaWxlZFxuIiwgKGxvbmcpIG9sZW4gKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBWZXJpZnkgdGhlIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZS4KKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZtZF9jdHgsIGRpZ2VzdCApOworCisgICAgICAgIGlmKCBmcmVhZCggYnVmZmVyLCAxLCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksIGZpbiApICE9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZnJlYWQoJWQgYnl0ZXMpIGZhaWxlZFxuIiwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBVc2UgY29uc3RhbnQtdGltZSBidWZmZXIgY29tcGFyaXNvbiAqLworICAgICAgICBkaWZmID0gMDsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsgaSsrICkKKyAgICAgICAgICAgIGRpZmYgfD0gZGlnZXN0W2ldIF4gYnVmZmVyW2ldOworCisgICAgICAgIGlmKCBkaWZmICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkhNQUMgY2hlY2sgZmFpbGVkOiB3cm9uZyBrZXksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIGZpbGUgY29ycnVwdGVkLlxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUgdGhlIGZpbmFsIGJsb2NrIG9mIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmNpcGhlcl9jdHgsIG91dHB1dCwgJm9sZW4gKTsKKworICAgICAgICBpZiggZndyaXRlKCBvdXRwdXQsIDEsIG9sZW4sIGZvdXQgKSAhPSBvbGVuICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmd3JpdGUoJWxkIGJ5dGVzKSBmYWlsZWRcbiIsIChsb25nKSBvbGVuICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIGlmKCBmaW4gKQorICAgICAgICBmY2xvc2UoIGZpbiApOworICAgIGlmKCBmb3V0ICkKKyAgICAgICAgZmNsb3NlKCBmb3V0ICk7CisKKyAgICBtZW1zZXQoIGJ1ZmZlciwgMCwgc2l6ZW9mKCBidWZmZXIgKSApOworICAgIG1lbXNldCggZGlnZXN0LCAwLCBzaXplb2YoIGRpZ2VzdCApICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY2lwaGVyX2N0eCApOworICAgIG1iZWR0bHNfbWRfZnJlZSggJm1kX2N0eCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9DICYmIE1CRURUTFNfTURfQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvaGFzaC9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9oYXNoL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTk3NWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvaGFzaC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDkgQEAKK2FkZF9leGVjdXRhYmxlKGhlbGxvIGhlbGxvLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoaGVsbG8gbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoZ2VuZXJpY19zdW0gZ2VuZXJpY19zdW0uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW5lcmljX3N1bSBtYmVkdGxzKQorCitpbnN0YWxsKFRBUkdFVFMgaGVsbG8gZ2VuZXJpY19zdW0KKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvaGFzaC9nZW5lcmljX3N1bS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvZ2VuZXJpY19zdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU4MWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvZ2VuZXJpY19zdW0uYwpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqICBnZW5lcmljIG1lc3NhZ2UgZGlnZXN0IGxheWVyIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRF9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19NRF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX01EX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IGdlbmVyaWNfd3JhcHBlciggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICpzdW0gKQoreworICAgIGludCByZXQgPSBtYmVkdGxzX21kX2ZpbGUoIG1kX2luZm8sIGZpbGVuYW1lLCBzdW0gKTsKKworICAgIGlmKCByZXQgPT0gMSApCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiZmFpbGVkIHRvIG9wZW46ICVzXG4iLCBmaWxlbmFtZSApOworCisgICAgaWYoIHJldCA9PSAyICkKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJmYWlsZWQgdG8gcmVhZDogJXNcbiIsIGZpbGVuYW1lICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfcHJpbnQoIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvLCBjaGFyICpmaWxlbmFtZSApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciBzdW1bTUJFRFRMU19NRF9NQVhfU0laRV07CisKKyAgICBpZiggZ2VuZXJpY193cmFwcGVyKCBtZF9pbmZvLCBmaWxlbmFtZSwgc3VtICkgIT0gMCApCisgICAgICAgIHJldHVybiggMSApOworCisgICAgZm9yKCBpID0gMDsgaSA8IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsgaSsrICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJ4Iiwgc3VtW2ldICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgJXNcbiIsIGZpbGVuYW1lICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19jaGVjayggY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8sIGNoYXIgKmZpbGVuYW1lICkKK3sKKyAgICBpbnQgaTsKKyAgICBzaXplX3QgbjsKKyAgICBGSUxFICpmOworICAgIGludCBuYl9lcnIxLCBuYl9lcnIyOworICAgIGludCBuYl90b3QxLCBuYl90b3QyOworICAgIHVuc2lnbmVkIGNoYXIgc3VtW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIGNoYXIgbGluZVsxMDI0XTsKKyAgICBjaGFyIGRpZmY7CisjaWYgZGVmaW5lZChfX2NsYW5nX2FuYWx5emVyX18pCisgICAgY2hhciBidWZbTUJFRFRMU19NRF9NQVhfU0laRSAqIDIgKyAxXSA9IHsgfTsKKyNlbHNlCisgICAgY2hhciBidWZbTUJFRFRMU19NRF9NQVhfU0laRSAqIDIgKyAxXTsKKyNlbmRpZgorCisgICAgaWYoICggZiA9IGZvcGVuKCBmaWxlbmFtZSwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCB0byBvcGVuOiAlc1xuIiwgZmlsZW5hbWUgKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgbmJfZXJyMSA9IG5iX2VycjIgPSAwOworICAgIG5iX3RvdDEgPSBuYl90b3QyID0gMDsKKworICAgIG1lbXNldCggbGluZSwgMCwgc2l6ZW9mKCBsaW5lICkgKTsKKworICAgIG4gPSBzaXplb2YoIGxpbmUgKTsKKworICAgIHdoaWxlKCBmZ2V0cyggbGluZSwgKGludCkgbiAtIDEsIGYgKSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG4gPSBzdHJsZW4oIGxpbmUgKTsKKworICAgICAgICBpZiggbiA8IChzaXplX3QpIDIgKiBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKyA0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIk5vICclcycgaGFzaCBmb3VuZCBvbiBsaW5lLlxuIiwgbWJlZHRsc19tZF9nZXRfbmFtZSggbWRfaW5mbyApKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGxpbmVbMiAqIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKV0gIT0gJyAnIHx8IGxpbmVbMiAqIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSArIDFdICE9ICcgJyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJObyAnJXMnIGhhc2ggZm91bmQgb24gbGluZS5cbiIsIG1iZWR0bHNfbWRfZ2V0X25hbWUoIG1kX2luZm8gKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBsaW5lW24gLSAxXSA9PSAnXG4nICkgeyBuLS07IGxpbmVbbl0gPSAnXDAnOyB9CisgICAgICAgIGlmKCBsaW5lW24gLSAxXSA9PSAnXHInICkgeyBuLS07IGxpbmVbbl0gPSAnXDAnOyB9CisKKyAgICAgICAgbmJfdG90MSsrOworCisgICAgICAgIGlmKCBnZW5lcmljX3dyYXBwZXIoIG1kX2luZm8sIGxpbmUgKyAyICsgMiAqIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwgc3VtICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5iX2VycjErKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbmJfdG90MisrOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7IGkrKyApCisgICAgICAgICAgICBzcHJpbnRmKCBidWYgKyBpICogMiwgIiUwMngiLCBzdW1baV0gKTsKKworICAgICAgICAvKiBVc2UgY29uc3RhbnQtdGltZSBidWZmZXIgY29tcGFyaXNvbiAqLworICAgICAgICBkaWZmID0gMDsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IDIgKiBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICk7IGkrKyApCisgICAgICAgICAgICBkaWZmIHw9IGxpbmVbaV0gXiBidWZbaV07CisKKyAgICAgICAgaWYoIGRpZmYgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5iX2VycjIrKzsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAid3JvbmcgY2hlY2tzdW06ICVzXG4iLCBsaW5lICsgNjYgKTsKKyAgICAgICAgfQorCisgICAgICAgIG4gPSBzaXplb2YoIGxpbmUgKTsKKyAgICB9CisKKyAgICBpZiggbmJfZXJyMSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiV0FSTklORzogJWQgKG91dCBvZiAlZCkgaW5wdXQgZmlsZXMgY291bGQgIgorICAgICAgICAgICAgICAgICJub3QgYmUgcmVhZFxuIiwgbmJfZXJyMSwgbmJfdG90MSApOworICAgIH0KKworICAgIGlmKCBuYl9lcnIyICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJXQVJOSU5HOiAlZCAob3V0IG9mICVkKSBjb21wdXRlZCBjaGVja3N1bXMgZGlkICIKKyAgICAgICAgICAgICAgICAibm90IG1hdGNoXG4iLCBuYl9lcnIyLCBuYl90b3QyICk7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICByZXR1cm4oIG5iX2VycjEgIT0gMCB8fCBuYl9lcnIyICE9IDAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQsIGk7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgbWRfY3R4OworCisgICAgbWJlZHRsc19tZF9pbml0KCAmbWRfY3R4ICk7CisKKyAgICBpZiggYXJnYyA9PSAxICkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCAqbGlzdDsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInByaW50IG1vZGU6ICBnZW5lcmljX3N1bSA8bWJlZHRsc19tZD4gPGZpbGU+IDxmaWxlPiAuLi5cbiIgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJjaGVjayBtb2RlOiAgZ2VuZXJpY19zdW0gPG1iZWR0bHNfbWQ+IC1jIDxjaGVja3N1bSBmaWxlPlxuIiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5BdmFpbGFibGUgbWVzc2FnZSBkaWdlc3RzOlxuIiApOworICAgICAgICBsaXN0ID0gbWJlZHRsc19tZF9saXN0KCk7CisgICAgICAgIHdoaWxlKCAqbGlzdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCAqbGlzdCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICVzXG4iLCBtYmVkdGxzX21kX2dldF9uYW1lKCBtZF9pbmZvICkgKTsKKyAgICAgICAgICAgIGxpc3QrKzsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQgdGhlIE1EIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICAgICAqLworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIGFyZ3ZbMV0gKTsKKyAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiTWVzc2FnZSBEaWdlc3QgJyVzJyBub3QgZm91bmRcbiIsIGFyZ3ZbMV0gKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorICAgIGlmKCBtYmVkdGxzX21kX3NldHVwKCAmbWRfY3R4LCBtZF9pbmZvLCAwICkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb250ZXh0LlxuIiApOworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICByZXQgPSAwOworICAgIGlmKCBhcmdjID09IDQgJiYgc3RyY21wKCAiLWMiLCBhcmd2WzJdICkgPT0gMCApCisgICAgeworICAgICAgICByZXQgfD0gZ2VuZXJpY19jaGVjayggbWRfaW5mbywgYXJndlszXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZm9yKCBpID0gMjsgaSA8IGFyZ2M7IGkrKyApCisgICAgICAgIHJldCB8PSBnZW5lcmljX3ByaW50KCBtZF9pbmZvLCBhcmd2W2ldICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmbWRfY3R4ICk7CisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfTURfQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvaGFzaC9oZWxsby5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvaGVsbG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQyMGYyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL2hhc2gvaGVsbG8uYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogIENsYXNzaWMgIkhlbGxvLCB3b3JsZCIgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWQ1LmgiCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTUQ1X0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfTUQ1X0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbMTZdOworICAgIGNoYXIgc3RyW10gPSAiSGVsbG8sIHdvcmxkISI7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICBNRDUoJyVzJykgPSAiLCBzdHIgKTsKKworICAgIG1iZWR0bHNfbWQ1KCAodW5zaWduZWQgY2hhciAqKSBzdHIsIDEzLCBkaWdlc3QgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCAxNjsgaSsrICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJ4IiwgZGlnZXN0W2ldICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuXG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzdhNDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDYzIEBACithZGRfZXhlY3V0YWJsZShkaF9jbGllbnQgZGhfY2xpZW50LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZGhfY2xpZW50IG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGRoX2dlbnByaW1lIGRoX2dlbnByaW1lLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZGhfZ2VucHJpbWUgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoZGhfc2VydmVyIGRoX3NlcnZlci5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRoX3NlcnZlciBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShlY2RoX2N1cnZlMjU1MTkgZWNkaF9jdXJ2ZTI1NTE5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZWNkaF9jdXJ2ZTI1NTE5IG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGVjZHNhIGVjZHNhLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZWNkc2EgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoZ2VuX2tleSBnZW5fa2V5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VuX2tleSBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShrZXlfYXBwIGtleV9hcHAuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhrZXlfYXBwIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGtleV9hcHBfd3JpdGVyIGtleV9hcHBfd3JpdGVyLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoa2V5X2FwcF93cml0ZXIgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUobXBpX2RlbW8gbXBpX2RlbW8uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhtcGlfZGVtbyBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShyc2FfZ2Vua2V5IHJzYV9nZW5rZXkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhyc2FfZ2Vua2V5IG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHJzYV9zaWduIHJzYV9zaWduLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocnNhX3NpZ24gbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocnNhX3ZlcmlmeSByc2FfdmVyaWZ5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocnNhX3ZlcmlmeSBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShyc2Ffc2lnbl9wc3MgcnNhX3NpZ25fcHNzLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocnNhX3NpZ25fcHNzIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHJzYV92ZXJpZnlfcHNzIHJzYV92ZXJpZnlfcHNzLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMocnNhX3ZlcmlmeV9wc3MgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocnNhX2VuY3J5cHQgcnNhX2VuY3J5cHQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhyc2FfZW5jcnlwdCBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShyc2FfZGVjcnlwdCByc2FfZGVjcnlwdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJzYV9kZWNyeXB0IG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHBrX3NpZ24gcGtfc2lnbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHBrX3NpZ24gbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUocGtfdmVyaWZ5IHBrX3ZlcmlmeS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHBrX3ZlcmlmeSBtYmVkdGxzKQorCithZGRfZXhlY3V0YWJsZShwa19lbmNyeXB0IHBrX2VuY3J5cHQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhwa19lbmNyeXB0IG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKHBrX2RlY3J5cHQgcGtfZGVjcnlwdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHBrX2RlY3J5cHQgbWJlZHRscykKKworaW5zdGFsbChUQVJHRVRTIGRoX2NsaWVudCBkaF9nZW5wcmltZSBkaF9zZXJ2ZXIga2V5X2FwcCBtcGlfZGVtbyByc2FfZ2Vua2V5IHJzYV9zaWduIHJzYV92ZXJpZnkgcnNhX2VuY3J5cHQgcnNhX2RlY3J5cHQgcGtfZW5jcnlwdCBwa19kZWNyeXB0IHBrX3NpZ24gcGtfdmVyaWZ5IGdlbl9rZXkKKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9jbGllbnQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2RoX2NsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NWQwYjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9jbGllbnQuYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqICBEaWZmaWUtSGVsbG1hbi1NZXJrbGUga2V5IGV4Y2hhbmdlIChjbGllbnQgc2lkZSkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykgJiYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgZGVmaW5lZChNQkVEVExTX05FVF9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RobS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIFNFUlZFUl9OQU1FICJsb2NhbGhvc3QiCisjZGVmaW5lIFNFUlZFUl9QT1JUICIxMTk5OSIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQUVTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfREhNX0MpIHx8ICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTkVUX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0FFU19DIGFuZC9vciBNQkVEVExTX0RITV9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyAiCisgICAgICAgICAgICJhbmQvb3IgTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIHZvaWQgKQoreworICAgIEZJTEUgKmY7CisKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuLCBidWZsZW47CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBzZXJ2ZXJfZmQ7CisKKyAgICB1bnNpZ25lZCBjaGFyICpwLCAqZW5kOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwNDhdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFszMl07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJkaF9jbGllbnQiOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgbWJlZHRsc19kaG1fY29udGV4dCBkaG07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBhZXM7CisKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmc2VydmVyX2ZkICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIE1CRURUTFNfTURfU0hBMjU2ICk7CisgICAgbWJlZHRsc19kaG1faW5pdCggJmRobSApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZhZXMgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgLyoKKyAgICAgKiAxLiBTZXR1cCB0aGUgUk5HCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDIuIFJlYWQgdGhlIHNlcnZlcidzIHB1YmxpYyBSU0Ega2V5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHB1YmxpYyBrZXkgZnJvbSByc2FfcHViLnR4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZiA9IGZvcGVuKCAicnNhX3B1Yi50eHQiLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIHJzYV9wdWIudHh0XG4iIFwKKyAgICAgICAgICAgICAgICAiICAhIFBsZWFzZSBydW4gcnNhX2dlbmtleSBmaXJzdFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLk4sIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkUsIDE2LCBmICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3JlYWRfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByc2EubGVuID0gKCBtYmVkdGxzX21waV9iaXRsZW4oICZyc2EuTiApICsgNyApID4+IDM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogMy4gSW5pdGlhdGUgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIENvbm5lY3RpbmcgdG8gdGNwLyVzLyVzIiwgU0VSVkVSX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWRVJfUE9SVCApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9jb25uZWN0KCAmc2VydmVyX2ZkLCBTRVJWRVJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSX1BPUlQsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9jb25uZWN0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA0YS4gRmlyc3QgZ2V0IHRoZSBidWZmZXIgbGVuZ3RoCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWNlaXZpbmcgdGhlIHNlcnZlcidzIERIIHBhcmFtZXRlcnMiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9yZWN2KCAmc2VydmVyX2ZkLCBidWYsIDIgKSApICE9IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfcmVjdiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG4gPSBidWZsZW4gPSAoIGJ1ZlswXSA8PCA4ICkgfCBidWZbMV07CisgICAgaWYoIGJ1ZmxlbiA8IDEgfHwgYnVmbGVuID4gc2l6ZW9mKCBidWYgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBHb3QgYW4gaW52YWxpZCBidWZmZXIgbGVuZ3RoXG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNGIuIEdldCB0aGUgREhNIHBhcmFtZXRlcnM6IFAsIEcgYW5kIFlzID0gR15YcyBtb2QgUAorICAgICAqLworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9yZWN2KCAmc2VydmVyX2ZkLCBidWYsIG4gKSApICE9IChpbnQpIG4gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfcmVjdiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHAgPSBidWYsIGVuZCA9IGJ1ZiArIGJ1ZmxlbjsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zKCAmZGhtLCAmcCwgZW5kICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZGhtX3JlYWRfcGFyYW1zIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIGRobS5sZW4gPCA2NCB8fCBkaG0ubGVuID4gNTEyICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIEludmFsaWQgREhNIG1vZHVsdXMgc2l6ZVxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDUuIENoZWNrIHRoYXQgdGhlIHNlcnZlcidzIFJTQSBzaWduYXR1cmUgbWF0Y2hlcworICAgICAqICAgIHRoZSBTSEEtMjU2IGhhc2ggb2YgKFAsRyxZcykKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFZlcmlmeWluZyB0aGUgc2VydmVyJ3MgUlNBIHNpZ25hdHVyZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcCArPSAyOworCisgICAgaWYoICggbiA9IChzaXplX3QpICggZW5kIC0gcCApICkgIT0gcnNhLmxlbiApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBJbnZhbGlkIFJTQSBzaWduYXR1cmUgc2l6ZVxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NoYTEoIGJ1ZiwgKGludCkoIHAgLSAyIC0gYnVmICksIGhhc2ggKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSggJnJzYSwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCAwLCBoYXNoLCBwICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNi4gU2VuZCBvdXIgcHVibGljIHZhbHVlOiBZYyA9IEcgXiBYYyBtb2QgUAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VuZGluZyBvd24gcHVibGljIHZhbHVlIHRvIHNlcnZlciIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbiA9IGRobS5sZW47CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoICZkaG0sIChpbnQpIGRobS5sZW4sIGJ1ZiwgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9zZW5kKCAmc2VydmVyX2ZkLCBidWYsIG4gKSApICE9IChpbnQpIG4gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfc2VuZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNy4gRGVyaXZlIHRoZSBzaGFyZWQgc2VjcmV0OiBLID0gWXMgXiBYYyBtb2QgUAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2hhcmVkIHNlY3JldDogIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmRobSwgYnVmLCBzaXplb2YoIGJ1ZiApLCAmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19kaG1fY2FsY19zZWNyZXQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmb3IoIG4gPSAwOyBuIDwgMTY7IG4rKyApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyeCIsIGJ1ZltuXSApOworCisgICAgLyoKKyAgICAgKiA4LiBTZXR1cCB0aGUgQUVTLTI1NiBkZWNyeXB0aW9uIGtleQorICAgICAqCisgICAgICogVGhpcyBpcyBhbiBvdmVybHkgc2ltcGxpZmllZCBleGFtcGxlOyBiZXN0IHByYWN0aWNlIGlzCisgICAgICogdG8gaGFzaCB0aGUgc2hhcmVkIHNlY3JldCB3aXRoIGEgcmFuZG9tIHZhbHVlIHRvIGRlcml2ZQorICAgICAqIHRoZSBrZXlpbmcgbWF0ZXJpYWwgZm9yIHRoZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24ga2V5cywKKyAgICAgKiBJVnMgYW5kIE1BQ3MuCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIuLi5cbiAgLiBSZWNlaXZpbmcgYW5kIGRlY3J5cHRpbmcgdGhlIGNpcGhlcnRleHQiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZhZXMsIGJ1ZiwgMjU2ICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggJnNlcnZlcl9mZCwgYnVmLCAxNiApICkgIT0gMTYgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfcmVjdiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfYWVzX2NyeXB0X2VjYiggJmFlcywgTUJFRFRMU19BRVNfREVDUllQVCwgYnVmLCBidWYgKTsKKyAgICBidWZbMTZdID0gJ1wwJzsKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFBsYWludGV4dCBpcyBcIiVzXCJcblxuIiwgKGNoYXIgKikgYnVmICk7CisKK2V4aXQ6CisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmc2VydmVyX2ZkICk7CisKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmYWVzICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZkaG0gKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgJiYgTUJFRFRMU19ESE1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX1NIQTI1Nl9DICYmCisgICAgICAgICAgTUJFRFRMU19GU19JTyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2RoX2dlbnByaW1lLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9nZW5wcmltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTk0YTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9nZW5wcmltZS5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIERpZmZpZS1IZWxsbWFuLU1lcmtsZSBrZXkgZXhjaGFuZ2UgKHByaW1lIGdlbmVyYXRpb24pCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfR0VOUFJJTUUgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2JpZ251bS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJcbiB1c2FnZTogZGhfZ2VucHJpbWUgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXByYWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBiaXRzPSUlZCAgICAgICAgICAgZGVmYXVsdDogMjA0OFxuIgorCisjZGVmaW5lIERGTF9CSVRTICAgIDIwNDgKKworLyoKKyAqIE5vdGU6IEcgPSA0IGlzIGFsd2F5cyBhIHF1YWRyYXRpYyByZXNpZHVlIG1vZCBQLAorICogc28gaXQgaXMgYSBnZW5lcmF0b3Igb2Ygb3JkZXIgUSAod2l0aCBQID0gMipRKzEpLgorICovCisjZGVmaW5lIEdFTkVSQVRPUiAiNCIKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICoqYXJndiApCit7CisgICAgaW50IHJldCA9IDE7CisgICAgbWJlZHRsc19tcGkgRywgUCwgUTsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImRoX2dlbnByaW1lIjsKKyAgICBGSUxFICpmb3V0OworICAgIGludCBuYml0cyA9IERGTF9CSVRTOworICAgIGludCBpOworICAgIGNoYXIgKnAsICpxOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsgbWJlZHRsc19tcGlfaW5pdCggJlAgKTsgbWJlZHRsc19tcGlfaW5pdCggJlEgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJiaXRzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBuYml0cyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBuYml0cyA8IDAgfHwgbmJpdHMgPiBNQkVEVExTX01QSV9NQVhfQklUUyApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmRywgMTAsIEdFTkVSQVRPUiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX3N0cmluZyByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgISBHZW5lcmF0aW5nIGxhcmdlIHByaW1lcyBtYXkgdGFrZSBtaW51dGVzIVxuIiApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEdlbmVyYXRpbmcgdGhlIG1vZHVsdXMsIHBsZWFzZSB3YWl0Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUuLi4KKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9nZW5fcHJpbWUoICZQLCBuYml0cywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX2dlbl9wcmltZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gIC4gVmVyaWZ5aW5nIHRoYXQgUSA9IChQLTEpLzIgaXMgcHJpbWUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRLCAmUCwgMSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9zdWJfaW50IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfZGl2X2ludCggJlEsIE5VTEwsICZRLCAyICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX2Rpdl9pbnQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9pc19wcmltZSggJlEsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfaXNfcHJpbWUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEV4cG9ydGluZyB0aGUgdmFsdWUgaW4gZGhfcHJpbWUudHh0Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCBmb3V0ID0gZm9wZW4oICJkaF9wcmltZS50eHQiLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3QgY3JlYXRlIGRoX3ByaW1lLnR4dFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUCA9ICIsICZQLCAxNiwgZm91dCApICE9IDAgKSB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJHID0gIiwgJkcsIDE2LCBmb3V0ICkgIT0gMCApICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGZjbG9zZSggZm91dCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcblxuIiApOworICAgIGZjbG9zZSggZm91dCApOworCitleGl0OgorCisgICAgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsgbWJlZHRsc19tcGlfZnJlZSggJlAgKTsgbWJlZHRsc19tcGlfZnJlZSggJlEgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX0MgJiYgTUJFRFRMU19HRU5QUklNRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfcHJpbWUudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfcHJpbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMGMyODEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9wcmltZS50eHQKQEAgLTAsMCArMSwyIEBACitQID0gRkZGRkZGRkZGRkZGRkZGRkM5MEZEQUEyMjE2OEMyMzRDNEM2NjI4QjgwREMxQ0QxMjkwMjRFMDg4QTY3Q0M3NDAyMEJCRUE2M0IxMzlCMjI1MTRBMDg3OThFMzQwNERERUY5NTE5QjNDRDNBNDMxQjMwMkIwQTZERjI1RjE0Mzc0RkUxMzU2RDZENTFDMjQ1RTQ4NUI1NzY2MjVFN0VDNkY0NEM0MkU5QTYzN0VENkIwQkZGNUNCNkY0MDZCN0VERUUzODZCRkI1QTg5OUZBNUFFOUYyNDExN0M0QjFGRTY0OTI4NjY1MUVDRTQ1QjNEQzIwMDdDQjhBMTYzQkYwNTk4REE0ODM2MUM1NUQzOUE2OTE2M0ZBOEZEMjRDRjVGODM2NTVEMjNEQ0EzQUQ5NjFDNjJGMzU2MjA4NTUyQkI5RUQ1MjkwNzcwOTY5NjZENjcwQzM1NEU0QUJDOTgwNEYxNzQ2QzA4Q0ExODIxN0MzMjkwNUU0NjJFMzZDRTNCRTM5RTc3MkMxODBFODYwMzlCMjc4M0EyRUMwN0EyOEZCNUM1NURGMDZGNEM1MkM5REUyQkNCRjY5NTU4MTcxODM5OTU0OTdDRUE5NTZBRTUxNUQyMjYxODk4RkEwNTEwMTU3MjhFNUE4QUFDQUE2OEZGRkZGRkZGRkZGRkZGRkYKK0cgPSAwMgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfc2VydmVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9kaF9zZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmYyYjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZGhfc2VydmVyLmMKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiAgRGlmZmllLUhlbGxtYW4tTWVya2xlIGtleSBleGNoYW5nZSAoc2VydmVyIHNpZGUpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpICYmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19ORVRfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2RlZmluZSBTRVJWRVJfUE9SVCAiMTE5OTkiCisjZGVmaW5lIFBMQUlOVEVYVCAiPT1IZWxsbyB0aGVyZSE9PSIKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQUVTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfREhNX0MpIHx8ICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTkVUX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0FFU19DIGFuZC9vciBNQkVEVExTX0RITV9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyAiCisgICAgICAgICAgICJhbmQvb3IgTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIHZvaWQgKQoreworICAgIEZJTEUgKmY7CisKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBuLCBidWZsZW47CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBsaXN0ZW5fZmQsIGNsaWVudF9mZDsKKworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwNDhdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFszMl07CisgICAgdW5zaWduZWQgY2hhciBidWYyWzJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAiZGhfc2VydmVyIjsKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcnNhOworICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzOworCisgICAgbWJlZHRsc19uZXRfaW5pdCggJmxpc3Rlbl9mZCApOworICAgIG1iZWR0bHNfbmV0X2luaXQoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgTUJFRFRMU19NRF9TSEEyNTYgKTsKKyAgICBtYmVkdGxzX2RobV9pbml0KCAmZGhtICk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmFlcyApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICAvKgorICAgICAqIDEuIFNldHVwIHRoZSBSTkcKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogMmEuIFJlYWQgdGhlIHNlcnZlcidzIHByaXZhdGUgUlNBIGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwcml2YXRlIGtleSBmcm9tIHJzYV9wcml2LnR4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZiA9IGZvcGVuKCAicnNhX3ByaXYudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiByc2FfcHJpdi50eHRcbiIgXAorICAgICAgICAgICAgICAgICIgICEgUGxlYXNlIHJ1biByc2FfZ2Vua2V5IGZpcnN0XG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZyc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuTiAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkUgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5EICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuUCAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlEgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5EUCwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRFEsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlFQLCAxNiwgZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcnNhLmxlbiA9ICggbWJlZHRsc19tcGlfYml0bGVuKCAmcnNhLk4gKSArIDcgKSA+PiAzOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICAvKgorICAgICAqIDJiLiBHZXQgdGhlIERITSBtb2R1bHVzIGFuZCBnZW5lcmF0b3IKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgREggcGFyYW1ldGVycyBmcm9tIGRoX3ByaW1lLnR4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZiA9IGZvcGVuKCAiZGhfcHJpbWUudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiBkaF9wcmltZS50eHRcbiIgXAorICAgICAgICAgICAgICAgICIgICEgUGxlYXNlIHJ1biBkaF9nZW5wcmltZSBmaXJzdFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmZGhtLlAsIDE2LCBmICkgIT0gMCB8fAorICAgICAgICBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZkaG0uRywgMTYsIGYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIEludmFsaWQgREggcGFyYW1ldGVyIGZpbGVcblxuIiApOworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgLyoKKyAgICAgKiAzLiBXYWl0IGZvciBhIGNsaWVudCB0byBjb25uZWN0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBXYWl0aW5nIGZvciBhIHJlbW90ZSBjb25uZWN0aW9uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9iaW5kKCAmbGlzdGVuX2ZkLCBOVUxMLCBTRVJWRVJfUE9SVCwgTUJFRFRMU19ORVRfUFJPVE9fVENQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2JpbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9hY2NlcHQoICZsaXN0ZW5fZmQsICZjbGllbnRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2FjY2VwdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogNC4gU2V0dXAgdGhlIERIIHBhcmFtZXRlcnMgKFAsRyxZcykKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlbmRpbmcgdGhlIHNlcnZlcidzIERIIHBhcmFtZXRlcnMiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9tYWtlX3BhcmFtcyggJmRobSwgKGludCkgbWJlZHRsc19tcGlfc2l6ZSggJmRobS5QICksIGJ1ZiwgJm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZGhtX21ha2VfcGFyYW1zIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA1LiBTaWduIHRoZSBwYXJhbWV0ZXJzIGFuZCBzZW5kIHRoZW0KKyAgICAgKi8KKyAgICBtYmVkdGxzX3NoYTEoIGJ1ZiwgbiwgaGFzaCApOworCisgICAgYnVmW24gICAgXSA9ICh1bnNpZ25lZCBjaGFyKSggcnNhLmxlbiA+PiA4ICk7CisgICAgYnVmW24gKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSggcnNhLmxlbiAgICAgICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmcnNhLCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QUklWQVRFLCBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgaGFzaCwgYnVmICsgbiArIDIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19yc2FfcGtjczFfc2lnbiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGJ1ZmxlbiA9IG4gKyAyICsgcnNhLmxlbjsKKyAgICBidWYyWzBdID0gKHVuc2lnbmVkIGNoYXIpKCBidWZsZW4gPj4gOCApOworICAgIGJ1ZjJbMV0gPSAodW5zaWduZWQgY2hhcikoIGJ1ZmxlbiAgICAgICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9zZW5kKCAmY2xpZW50X2ZkLCBidWYyLCAyICkgKSAhPSAyIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggJmNsaWVudF9mZCwgYnVmLCBidWZsZW4gKSApICE9IChpbnQpIGJ1ZmxlbiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9zZW5kIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA2LiBHZXQgdGhlIGNsaWVudCdzIHB1YmxpYyB2YWx1ZTogWWMgPSBHIF4gWGMgbW9kIFAKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlY2VpdmluZyB0aGUgY2xpZW50J3MgcHVibGljIHZhbHVlIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggJmNsaWVudF9mZCwgYnVmLCBuICkgKSAhPSAoaW50KSBuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X3JlY3YgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYyggJmRobSwgYnVmLCBkaG0ubGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZGhtX3JlYWRfcHVibGljIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiA3LiBEZXJpdmUgdGhlIHNoYXJlZCBzZWNyZXQ6IEsgPSBZcyBeIFhjIG1vZCBQCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTaGFyZWQgc2VjcmV0OiAiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmZGhtLCBidWYsIHNpemVvZiggYnVmICksICZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZvciggbiA9IDA7IG4gPCAxNjsgbisrICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJ4IiwgYnVmW25dICk7CisKKyAgICAvKgorICAgICAqIDguIFNldHVwIHRoZSBBRVMtMjU2IGVuY3J5cHRpb24ga2V5CisgICAgICoKKyAgICAgKiBUaGlzIGlzIGFuIG92ZXJseSBzaW1wbGlmaWVkIGV4YW1wbGU7IGJlc3QgcHJhY3RpY2UgaXMKKyAgICAgKiB0byBoYXNoIHRoZSBzaGFyZWQgc2VjcmV0IHdpdGggYSByYW5kb20gdmFsdWUgdG8gZGVyaXZlCisgICAgICogdGhlIGtleWluZyBtYXRlcmlhbCBmb3IgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBrZXlzCisgICAgICogYW5kIE1BQ3MuCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIuLi5cbiAgLiBFbmNyeXB0aW5nIGFuZCBzZW5kaW5nIHRoZSBjaXBoZXJ0ZXh0IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmYWVzLCBidWYsIDI1NiApOworICAgIG1lbWNweSggYnVmLCBQTEFJTlRFWFQsIDE2ICk7CisgICAgbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmYWVzLCBNQkVEVExTX0FFU19FTkNSWVBULCBidWYsIGJ1ZiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggJmNsaWVudF9mZCwgYnVmLCAxNiApICkgIT0gMTYgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfc2VuZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5cbiIgKTsKKworZXhpdDoKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmbGlzdGVuX2ZkICk7CisKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmYWVzICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJnJzYSApOworICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZkaG0gKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgJiYgTUJFRFRMU19ESE1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX1NIQTI1Nl9DICYmCisgICAgICAgICAgTUJFRFRMU19GU19JTyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2VjZGhfY3VydmUyNTUxOS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZWNkaF9jdXJ2ZTI1NTE5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExNWM0NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2VjZGhfY3VydmUyNTUxOS5jCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogIEV4YW1wbGUgRUNESEUgd2l0aCBDdXJ2ZTI1NTE5IHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0VDREhfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX0VDREhfQyBhbmQvb3IgIgorICAgICAgICAgICAgICAgICAgICAiTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEIGFuZC9vciAiCisgICAgICAgICAgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DICIKKyAgICAgICAgICAgICAgICAgICAgIm5vdCBkZWZpbmVkXG4iICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNkaC5oIgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBjdHhfY2xpLCBjdHhfc3J2OworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgY2xpX3RvX3NydlszMl0sIHNydl90b19jbGlbMzJdOworICAgIGNvbnN0IGNoYXIgcGVyc1tdID0gImVjZGgiOworICAgICgodm9pZCkgYXJnYyk7CisgICAgKCh2b2lkKSBhcmd2KTsKKworICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmY3R4X2NsaSApOworICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmY3R4X3NydiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgcGVycyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogQ2xpZW50OiBpbmlhbGl6ZSBjb250ZXh0IGFuZCBnZW5lcmF0ZSBrZXlwYWlyCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCBjbGllbnQgY29udGV4dC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmN0eF9jbGkuZ3JwLCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZjdHhfY2xpLmdycCwgJmN0eF9jbGkuZCwgJmN0eF9jbGkuUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZjdHhfY2xpLlEuWCwgY2xpX3RvX3NydiwgMzIgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIFNlcnZlcjogaW5pdGlhbGl6ZSBjb250ZXh0IGFuZCBnZW5lcmF0ZSBrZXlwYWlyCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCBzZXJ2ZXIgY29udGV4dC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmN0eF9zcnYuZ3JwLCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZjdHhfc3J2LmdycCwgJmN0eF9zcnYuZCwgJmN0eF9zcnYuUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZjdHhfc3J2LlEuWCwgc3J2X3RvX2NsaSwgMzIgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIFNlcnZlcjogcmVhZCBwZWVyJ3Mga2V5IGFuZCBnZW5lcmF0ZSBzaGFyZWQgc2VjcmV0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2VydmVyIHJlYWRpbmcgY2xpZW50IGtleSBhbmQgY29tcHV0aW5nIHNlY3JldC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc19tcGlfbHNldCggJmN0eF9zcnYuUXAuWiwgMSApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9sc2V0IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4X3Nydi5RcC5YLCBjbGlfdG9fc3J2LCAzMiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZjdHhfc3J2LmdycCwgJmN0eF9zcnYueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHhfc3J2LlFwLCAmY3R4X3Nydi5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogQ2xpZW50OiByZWFkIHBlZXIncyBrZXkgYW5kIGdlbmVyYXRlIHNoYXJlZCBzZWNyZXQKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDbGllbnQgcmVhZGluZyBzZXJ2ZXIga2V5IGFuZCBjb21wdXRpbmcgc2VjcmV0Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX21waV9sc2V0KCAmY3R4X2NsaS5RcC5aLCAxICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX2xzZXQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZjdHhfY2xpLlFwLlgsIHNydl90b19jbGksIDMyICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCggJmN0eF9jbGkuZ3JwLCAmY3R4X2NsaS56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eF9jbGkuUXAsICZjdHhfY2xpLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiBWZXJpZmljYXRpb246IGFyZSB0aGUgY29tcHV0ZWQgc2VjcmV0IGVxdWFsPworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENoZWNraW5nIGlmIGJvdGggY29tcHV0ZWQgc2VjcmV0cyBhcmUgZXF1YWwuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfbXBpX2NtcF9tcGkoICZjdHhfY2xpLnosICZjdHhfc3J2LnogKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKworZXhpdDoKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZjdHhfc3J2ICk7CisgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZjdHhfY2xpICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworICAgIHJldHVybiggcmV0ICE9IDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDREhfQyAmJiBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQgJiYKKyAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2VjZHNhLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9lY2RzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OWQzMTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9lY2RzYS5jCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogIEV4YW1wbGUgRUNEU0EgcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKy8qCisgKiBVbmNvbW1lbnQgdG8gc2hvdyBrZXkgYW5kIHNpZ25hdHVyZSBkZXRhaWxzCisgKi8KKyNkZWZpbmUgVkVSQk9TRQorCisvKgorICogVW5jb21tZW50IHRvIGZvcmNlIHVzZSBvZiBhIHNwZWNpZmljIGN1cnZlCisgKi8KKyNkZWZpbmUgRUNQQVJBTVMgICAgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKKyNpZiAhZGVmaW5lZChFQ1BBUkFNUykKKyNkZWZpbmUgRUNQQVJBTVMgICAgbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpLT5ncnBfaWQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19FQ0RTQV9DIGFuZC9vciBNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisjaWYgZGVmaW5lZChWRVJCT1NFKQorc3RhdGljIHZvaWQgZHVtcF9idWYoIGNvbnN0IGNoYXIgKnRpdGxlLCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBpOworCisgICAgbWJlZHRsc19wcmludGYoICIlcyIsIHRpdGxlICk7CisgICAgZm9yKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiVjJWMiLCAiMDEyMzQ1Njc4OUFCQ0RFRiIgW2J1ZltpXSAvIDE2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODlBQkNERUYiIFtidWZbaV0gJSAxNl0gKTsKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3B1YmtleSggY29uc3QgY2hhciAqdGl0bGUsIG1iZWR0bHNfZWNkc2FfY29udGV4dCAqa2V5ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlszMDBdOworICAgIHNpemVfdCBsZW47CisKKyAgICBpZiggbWJlZHRsc19lY3BfcG9pbnRfd3JpdGVfYmluYXJ5KCAma2V5LT5ncnAsICZrZXktPlEsCisgICAgICAgICAgICAgICAgTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VELCAmbGVuLCBidWYsIHNpemVvZiBidWYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJpbnRlcm5hbCBlcnJvclxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkdW1wX2J1ZiggdGl0bGUsIGJ1ZiwgbGVuICk7Cit9CisjZWxzZQorI2RlZmluZSBkdW1wX2J1ZiggYSwgYiwgYyApCisjZGVmaW5lIGR1bXBfcHVia2V5KCBhLCBiICkKKyNlbmRpZgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX2VjZHNhX2NvbnRleHQgY3R4X3NpZ24sIGN0eF92ZXJpZnk7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgdW5zaWduZWQgY2hhciBoYXNoW10gPSAiVGhpcyBzaG91bGQgYmUgdGhlIGhhc2ggb2YgYSBtZXNzYWdlLiI7CisgICAgdW5zaWduZWQgY2hhciBzaWdbNTEyXTsKKyAgICBzaXplX3Qgc2lnX2xlbjsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImVjZHNhIjsKKyAgICAoKHZvaWQpIGFyZ3YpOworCisgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmY3R4X3NpZ24gKTsKKyAgICBtYmVkdGxzX2VjZHNhX2luaXQoICZjdHhfdmVyaWZ5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgIG1lbXNldChzaWcsIDAsIHNpemVvZiggc2lnICkgKTsKKyAgICByZXQgPSAxOworCisgICAgaWYoIGFyZ2MgIT0gMSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiBlY2RzYVxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYKKworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBHZW5lcmF0ZSBhIGtleSBwYWlyIGZvciBzaWduaW5nCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEdlbmVyYXRpbmcga2V5IHBhaXIuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCAmY3R4X3NpZ24sIEVDUEFSQU1TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjZHNhX2dlbmtleSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBvayAoa2V5IHNpemU6ICVkIGJpdHMpXG4iLCAoaW50KSBjdHhfc2lnbi5ncnAucGJpdHMgKTsKKworICAgIGR1bXBfcHVia2V5KCAiICArIFB1YmxpYyBrZXk6ICIsICZjdHhfc2lnbiApOworCisgICAgLyoKKyAgICAgKiBTaWduIHNvbWUgbWVzc2FnZSBoYXNoCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2lnbmluZyBtZXNzYWdlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggJmN0eF9zaWduLCBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLCAmc2lnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RzYV9nZW5rZXkgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rIChzaWduYXR1cmUgbGVuZ3RoID0gJXUpXG4iLCAodW5zaWduZWQgaW50KSBzaWdfbGVuICk7CisKKyAgICBkdW1wX2J1ZiggIiAgKyBIYXNoOiAiLCBoYXNoLCBzaXplb2YgaGFzaCApOworICAgIGR1bXBfYnVmKCAiICArIFNpZ25hdHVyZTogIiwgc2lnLCBzaWdfbGVuICk7CisKKyAgICAvKgorICAgICAqIFRyYW5zZmVyIHB1YmxpYyBpbmZvcm1hdGlvbiB0byB2ZXJpZnlpbmcgY29udGV4dAorICAgICAqCisgICAgICogV2UgY291bGQgdXNlIHRoZSBzYW1lIGNvbnRleHQgZm9yIHZlcmlmaWNhdGlvbiBhbmQgc2lnbmF0dXJlcywgYnV0IHdlCisgICAgICogY2hvc2UgdG8gdXNlIGEgbmV3IG9uZSBpbiBvcmRlciB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHZlcmlmeWluZworICAgICAqIGNvbnRleHQgb25seSBuZWVkcyB0aGUgcHVibGljIGtleSAoUSksIGFuZCBub3QgdGhlIHByaXZhdGUga2V5IChkKS4KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQcmVwYXJpbmcgdmVyaWZpY2F0aW9uIGNvbnRleHQuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2dyb3VwX2NvcHkoICZjdHhfdmVyaWZ5LmdycCwgJmN0eF9zaWduLmdycCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VjcF9ncm91cF9jb3B5IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZWNwX2NvcHkoICZjdHhfdmVyaWZ5LlEsICZjdHhfc2lnbi5RICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfZWNwX2NvcHkgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworICAgIC8qCisgICAgICogVmVyaWZ5IHNpZ25hdHVyZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gIC4gVmVyaWZ5aW5nIHNpZ25hdHVyZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggJmN0eF92ZXJpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCitleGl0OgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICBtYmVkdGxzX2VjZHNhX2ZyZWUoICZjdHhfdmVyaWZ5ICk7CisgICAgbWJlZHRsc19lY2RzYV9mcmVlKCAmY3R4X3NpZ24gKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmCisgICAgICAgICAgRUNQQVJBTVMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2dlbl9rZXkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2dlbl9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODEyNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvZ2VuX2tleS5jCkBAIC0wLDAgKzEsNDI1IEBACisvKgorICogIEtleSBnZW5lcmF0aW9uIGFwcGxpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1dSSVRFX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisjaW5jbHVkZSAibWJlZHRscy9lY2RzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgREVWX1JBTkRPTV9USFJFU0hPTEQgICAgICAgIDMyCisKK2ludCBkZXZfcmFuZG9tX2VudHJvcHlfcG9sbCggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIEZJTEUgKmZpbGU7CisgICAgc2l6ZV90IHJldCwgbGVmdCA9IGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gb3V0cHV0OworICAgICgodm9pZCkgZGF0YSk7CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBmaWxlID0gZm9wZW4oICIvZGV2L3JhbmRvbSIsICJyYiIgKTsKKyAgICBpZiggZmlsZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKworICAgIHdoaWxlKCBsZWZ0ID4gMCApCisgICAgeworICAgICAgICAvKiAvZGV2L3JhbmRvbSBjYW4gcmV0dXJuIG11Y2ggbGVzcyB0aGFuIHJlcXVlc3RlZC4gSWYgc28sIHRyeSBhZ2FpbiAqLworICAgICAgICByZXQgPSBmcmVhZCggcCwgMSwgbGVmdCwgZmlsZSApOworICAgICAgICBpZiggcmV0ID09IDAgJiYgZmVycm9yKCBmaWxlICkgKQorICAgICAgICB7CisgICAgICAgICAgICBmY2xvc2UoIGZpbGUgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVEICk7CisgICAgICAgIH0KKworICAgICAgICBwICs9IHJldDsKKyAgICAgICAgbGVmdCAtPSByZXQ7CisgICAgICAgIHNsZWVwKCAxICk7CisgICAgfQorICAgIGZjbG9zZSggZmlsZSApOworICAgICpvbGVuID0gbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogIV9XSU4zMiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisjZGVmaW5lIERGTF9FQ19DVVJWRSAgICAgICAgICAgIG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKS0+Z3JwX2lkCisjZWxzZQorI2RlZmluZSBERkxfRUNfQ1VSVkUgICAgICAgICAgICAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2RlZmluZSBVU0FHRV9ERVZfUkFORE9NIFwKKyAgICAiICAgIHVzZV9kZXZfcmFuZG9tPTB8MSAgICBkZWZhdWx0OiAwXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9ERVZfUkFORE9NICIiCisjZW5kaWYgLyogIV9XSU4zMiAmJiBNQkVEVExTX0ZTX0lPICovCisKKyNkZWZpbmUgRk9STUFUX1BFTSAgICAgICAgICAgICAgMAorI2RlZmluZSBGT1JNQVRfREVSICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgREZMX1RZUEUgICAgICAgICAgICAgICAgTUJFRFRMU19QS19SU0EKKyNkZWZpbmUgREZMX1JTQV9LRVlTSVpFICAgICAgICAgNDA5NgorI2RlZmluZSBERkxfRklMRU5BTUUgICAgICAgICAgICAia2V5ZmlsZS5rZXkiCisjZGVmaW5lIERGTF9GT1JNQVQgICAgICAgICAgICAgIEZPUk1BVF9QRU0KKyNkZWZpbmUgREZMX1VTRV9ERVZfUkFORE9NICAgICAgMAorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IGdlbl9rZXkgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICB0eXBlPXJzYXxlYyAgICAgICAgICAgZGVmYXVsdDogcnNhXG4iICAgICAgICAgIFwKKyAgICAiICAgIHJzYV9rZXlzaXplPSUlZCAgICAgICAgZGVmYXVsdDogNDA5NlxuIiAgICAgICAgXAorICAgICIgICAgZWNfY3VydmU9JSVzICAgICAgICAgICBzZWUgYmVsb3dcbiIgICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICAgIGRlZmF1bHQ6IGtleWZpbGUua2V5XG4iIFwKKyAgICAiICAgIGZvcm1hdD1wZW18ZGVyICAgICAgICBkZWZhdWx0OiBwZW1cbiIgICAgICAgICAgXAorICAgIFVTQUdFX0RFVl9SQU5ET00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19QS19XUklURV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX1BLX1dSSVRFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19QRU1fV1JJVEVfQyIKKyAgICAgICAgICAgICJub3QgZGVmaW5lZC5cbiIgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBpbnQgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdGhlIHR5cGUgb2Yga2V5IHRvIGdlbmVyYXRlICAgICAgICAgICovCisgICAgaW50IHJzYV9rZXlzaXplOyAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBrZXkgaW4gYml0cyAgICAgICAgICAgICAgICAqLworICAgIGludCBlY19jdXJ2ZTsgICAgICAgICAgICAgICAvKiBjdXJ2ZSBpZGVudGlmaWVyIGZvciBFQyBrZXlzICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsgICAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGtleSBmaWxlICAgICAgICAgICAgICovCisgICAgaW50IGZvcm1hdDsgICAgICAgICAgICAgICAgIC8qIHRoZSBvdXRwdXQgZm9ybWF0IHRvIHVzZSAgICAgICAgICAgICAqLworICAgIGludCB1c2VfZGV2X3JhbmRvbTsgICAgICAgICAvKiB1c2UgL2Rldi9yYW5kb20gYXMgZW50cm9weSBzb3VyY2UgICAgKi8KK30gb3B0OworCitzdGF0aWMgaW50IHdyaXRlX3ByaXZhdGVfa2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSwgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgKQoreworICAgIGludCByZXQ7CisgICAgRklMRSAqZjsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbMTYwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgKmMgPSBvdXRwdXRfYnVmOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KG91dHB1dF9idWYsIDAsIDE2MDAwKTsKKyAgICBpZiggb3B0LmZvcm1hdCA9PSBGT1JNQVRfUEVNICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfd3JpdGVfa2V5X3BlbSgga2V5LCBvdXRwdXRfYnVmLCAxNjAwMCApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGxlbiA9IHN0cmxlbiggKGNoYXIgKikgb3V0cHV0X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3dyaXRlX2tleV9kZXIoIGtleSwgb3V0cHV0X2J1ZiwgMTYwMDAgKSApIDwgMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgYyA9IG91dHB1dF9idWYgKyBzaXplb2Yob3V0cHV0X2J1ZikgLSBsZW47CisgICAgfQorCisgICAgaWYoICggZiA9IGZvcGVuKCBvdXRwdXRfZmlsZSwgIndiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCBmd3JpdGUoIGMsIDEsIGxlbiwgZiApICE9IGxlbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQga2V5OworICAgIGNoYXIgYnVmWzEwMjRdOworICAgIGludCBpOworICAgIGNoYXIgKnAsICpxOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAiZ2VuX2tleSI7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisjZW5kaWYKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc19wa19pbml0KCAma2V5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGF2YWlsYWJsZSBlY19jdXJ2ZSB2YWx1ZXM6XG4iICk7CisgICAgICAgIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgICVzIChkZWZhdWx0KVxuIiwgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICB3aGlsZSggKCArK2N1cnZlX2luZm8gKS0+bmFtZSAhPSBOVUxMICkKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgICVzXG4iLCBjdXJ2ZV9pbmZvLT5uYW1lICk7CisjZW5kaWYKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC50eXBlICAgICAgICAgICAgICAgID0gREZMX1RZUEU7CisgICAgb3B0LnJzYV9rZXlzaXplICAgICAgICAgPSBERkxfUlNBX0tFWVNJWkU7CisgICAgb3B0LmVjX2N1cnZlICAgICAgICAgICAgPSBERkxfRUNfQ1VSVkU7CisgICAgb3B0LmZpbGVuYW1lICAgICAgICAgICAgPSBERkxfRklMRU5BTUU7CisgICAgb3B0LmZvcm1hdCAgICAgICAgICAgICAgPSBERkxfRk9STUFUOworICAgIG9wdC51c2VfZGV2X3JhbmRvbSAgICAgID0gREZMX1VTRV9ERVZfUkFORE9NOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJ0eXBlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAicnNhIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC50eXBlID0gTUJFRFRMU19QS19SU0E7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJlYyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQudHlwZSA9IE1CRURUTFNfUEtfRUNLRVk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmb3JtYXQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJwZW0iICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0LmZvcm1hdCA9IEZPUk1BVF9QRU07CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJkZXIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0LmZvcm1hdCA9IEZPUk1BVF9ERVI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyc2Ffa2V5c2l6ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJzYV9rZXlzaXplID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5yc2Ffa2V5c2l6ZSA8IDEwMjQgfHwKKyAgICAgICAgICAgICAgICBvcHQucnNhX2tleXNpemUgPiBNQkVEVExTX01QSV9NQVhfQklUUyApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZWNfY3VydmUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fbmFtZSggcSApICkgPT0gTlVMTCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIG9wdC5lY19jdXJ2ZSA9IGN1cnZlX2luZm8tPmdycF9pZDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImZpbGVuYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmZpbGVuYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidXNlX2Rldl9yYW5kb20iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC51c2VfZGV2X3JhbmRvbSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQudXNlX2Rldl9yYW5kb20gPCAwIHx8IG9wdC51c2VfZGV2X3JhbmRvbSA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggb3B0LnVzZV9kZXZfcmFuZG9tICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmZW50cm9weSwgZGV2X3JhbmRvbV9lbnRyb3B5X3BvbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgREVWX1JBTkRPTV9USFJFU0hPTEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9TVFJPTkcgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2VudHJvcHlfYWRkX3NvdXJjZSByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4gICAgVXNpbmcgL2Rldi9yYW5kb20sIHNvIGNhbiB0YWtlIGEgbG9uZyB0aW1lISAiICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgfQorI2VuZGlmIC8qICFfV0lOMzIgJiYgTUJFRFRMU19GU19JTyAqLworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMS4gR2VuZXJhdGUgdGhlIGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gR2VuZXJhdGluZyB0aGUgcHJpdmF0ZSBrZXkgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3NldHVwKCAma2V5LCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBvcHQudHlwZSApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3NldHVwIHJldHVybmVkIC0weCUwNHgiLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkKKyAgICBpZiggb3B0LnR5cGUgPT0gTUJFRFRMU19QS19SU0EgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19yc2FfZ2VuX2tleSggbWJlZHRsc19wa19yc2EoIGtleSApLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnJzYV9rZXlzaXplLCA2NTUzNyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19yc2FfZ2VuX2tleSByZXR1cm5lZCAtMHglMDR4IiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1JTQV9DICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgIGlmKCBvcHQudHlwZSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNwX2dlbl9rZXkoIG9wdC5lY19jdXJ2ZSwgbWJlZHRsc19wa19lYygga2V5ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcnNhX2dlbl9rZXkgcmV0dXJuZWQgLTB4JTA0eCIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogTUJFRFRMU19FQ1BfQyAqLworICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIGtleSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogMS4yIFByaW50IHRoZSBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEtleSBpbmZvcm1hdGlvbjpcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJmtleSApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSA9IG1iZWR0bHNfcGtfcnNhKCBrZXkgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIk46ICAiLCAgJnJzYS0+TiwgIDE2LCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJFOiAgIiwgICZyc2EtPkUsICAxNiwgTlVMTCApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRDogICIsICAmcnNhLT5ELCAgMTYsIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlA6ICAiLCAgJnJzYS0+UCwgIDE2LCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJROiAgIiwgICZyc2EtPlEsICAxNiwgTlVMTCApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRFA6ICIsICAmcnNhLT5EUCwgMTYsIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkRROiAgIiwgJnJzYS0+RFEsIDE2LCBOVUxMICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRUDogICIsICZyc2EtPlFQLCAxNiwgTlVMTCApOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZrZXkgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjcCA9IG1iZWR0bHNfcGtfZWMoIGtleSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImN1cnZlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkKCBlY3AtPmdycC5pZCApLT5uYW1lICk7CisgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJYX1E6ICAgIiwgJmVjcC0+US5YLCAxNiwgTlVMTCApOworICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiWV9ROiAgICIsICZlY3AtPlEuWSwgMTYsIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkQ6ICAgICAiLCAmZWNwLT5kICAsIDE2LCBOVUxMICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBtYmVkdGxzX3ByaW50ZigiICAhIGtleSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCisgICAgLyoKKyAgICAgKiAxLjMgRXhwb3J0IGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdyaXRpbmcga2V5IHRvIGZpbGUuLi4iICk7CisKKyAgICBpZiggKCByZXQgPSB3cml0ZV9wcml2YXRlX2tleSggJmtleSwgb3B0LmZpbGVuYW1lICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworZXhpdDoKKworICAgIGlmKCByZXQgIT0gMCAmJiByZXQgIT0gMSkKKyAgICB7CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIC0gJXNcbiIsIGJ1ZiApOworI2Vsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuIik7CisjZW5kaWYKKyAgICB9CisKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZrZXkgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfUEtfV1JJVEVfQyAmJiBNQkVEVExTX1BFTV9XUklURV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgKiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkva2V5X2FwcC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkva2V5X2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Yjg0NDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9rZXlfYXBwLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiAgS2V5IHJlYWRpbmcgYXBwbGljYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2RlZmluZSBNT0RFX05PTkUgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1PREVfUFJJVkFURSAgICAgICAgICAgIDEKKyNkZWZpbmUgTU9ERV9QVUJMSUMgICAgICAgICAgICAgMgorCisjZGVmaW5lIERGTF9NT0RFICAgICAgICAgICAgICAgIE1PREVfTk9ORQorI2RlZmluZSBERkxfRklMRU5BTUUgICAgICAgICAgICAia2V5ZmlsZS5rZXkiCisjZGVmaW5lIERGTF9QQVNTV09SRCAgICAgICAgICAgICIiCisjZGVmaW5lIERGTF9QQVNTV09SRF9GSUxFICAgICAgICIiCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBrZXlfYXBwIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbW9kZT1wcml2YXRlfHB1YmxpYyBkZWZhdWx0OiBub25lXG4iICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICBkZWZhdWx0OiBrZXlmaWxlLmtleVxuIiAgIFwKKyAgICAiICAgIHBhc3N3b3JkPSUlcyAgICAgICAgIGRlZmF1bHQ6IFwiXCJcbiIgICAgICAgICAgXAorICAgICIgICAgcGFzc3dvcmRfZmlsZT0lJXMgICAgZGVmYXVsdDogXCJcIlxuIiAgICAgICAgICBcCisgICAgIlxuIgorCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1BLX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RydWN0IG9wdGlvbnMKK3sKKyAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAgICAgLyogdGhlIG1vZGUgdG8gcnVuIHRoZSBhcHBsaWNhdGlvbiBpbiAgICovCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7ICAgICAgIC8qIGZpbGVuYW1lIG9mIHRoZSBrZXkgZmlsZSAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkOyAgICAgICAvKiBwYXNzd29yZCBmb3IgdGhlIHByaXZhdGUga2V5ICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpwYXNzd29yZF9maWxlOyAgLyogcGFzc3dvcmRfZmlsZSBmb3IgdGhlIHByaXZhdGUga2V5ICAgICovCit9IG9wdDsKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQubW9kZSAgICAgICAgICAgICAgICA9IERGTF9NT0RFOworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworICAgIG9wdC5wYXNzd29yZCAgICAgICAgICAgID0gREZMX1BBU1NXT1JEOworICAgIG9wdC5wYXNzd29yZF9maWxlICAgICAgID0gREZMX1BBU1NXT1JEX0ZJTEU7CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgIm1vZGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJwcml2YXRlIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tb2RlID0gTU9ERV9QUklWQVRFOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAicHVibGljIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tb2RlID0gTU9ERV9QVUJMSUM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmaWxlbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5maWxlbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInBhc3N3b3JkIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnBhc3N3b3JkID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicGFzc3dvcmRfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5wYXNzd29yZF9maWxlID0gcTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICBpZiggb3B0Lm1vZGUgPT0gTU9ERV9QUklWQVRFICkKKyAgICB7CisgICAgICAgIGlmKCBzdHJsZW4oIG9wdC5wYXNzd29yZCApICYmIHN0cmxlbiggb3B0LnBhc3N3b3JkX2ZpbGUgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRXJyb3I6IGNhbm5vdCBoYXZlIGJvdGggcGFzc3dvcmQgYW5kIHBhc3N3b3JkX2ZpbGVcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3RybGVuKCBvcHQucGFzc3dvcmRfZmlsZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgRklMRSAqZjsKKworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBwYXNzd29yZCBmaWxlIC4uLiIgKTsKKyAgICAgICAgICAgIGlmKCAoIGYgPSBmb3Blbiggb3B0LnBhc3N3b3JkX2ZpbGUsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBmb3BlbiByZXR1cm5lZCBOVUxMXG4iICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoIGZnZXRzKCBidWYsIHNpemVvZihidWYpLCBmICkgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJFcnJvcjogZmdldHMoKSBmYWlsZWQgdG8gcmV0cmlldmUgcGFzc3dvcmRcbiIgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmY2xvc2UoIGYgKTsKKworICAgICAgICAgICAgaSA9IChpbnQpIHN0cmxlbiggYnVmICk7CisgICAgICAgICAgICBpZiggYnVmW2kgLSAxXSA9PSAnXG4nICkgYnVmW2kgLSAxXSA9ICdcMCc7CisgICAgICAgICAgICBpZiggYnVmW2kgLSAyXSA9PSAnXHInICkgYnVmW2kgLSAyXSA9ICdcMCc7CisgICAgICAgICAgICBvcHQucGFzc3dvcmQgPSBidWY7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAxLjEuIExvYWQgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBwcml2YXRlIGtleSAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGssIG9wdC5maWxlbmFtZSwgb3B0LnBhc3N3b3JkICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDEuMiBQcmludCB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBLZXkgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJnBrICkgPT0gTUJFRFRMU19QS19SU0EgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgPSBtYmVkdGxzX3BrX3JzYSggcGsgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJOOiAgIiwgJnJzYS0+TiwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJFOiAgIiwgJnJzYS0+RSwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEOiAgIiwgJnJzYS0+RCwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJQOiAgIiwgJnJzYS0+UCwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJROiAgIiwgJnJzYS0+USwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEUDogIiwgJnJzYS0+RFAsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRFE6ICAiLCAmcnNhLT5EUSwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRUDogICIsICZyc2EtPlFQLCAxNiwgTlVMTCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZwayApID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICplY3AgPSBtYmVkdGxzX3BrX2VjKCBwayApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWCk6ICIsICZlY3AtPlEuWCwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFkpOiAiLCAmZWNwLT5RLlksIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShaKTogIiwgJmVjcC0+US5aLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkQgICA6ICIsICZlY3AtPmQgICwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIkRvIG5vdCBrbm93IGhvdyB0byBwcmludCBrZXkgaW5mb3JtYXRpb24gZm9yIHRoaXMgdHlwZVxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoIG9wdC5tb2RlID09IE1PREVfUFVCTElDICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIDEuMS4gTG9hZCB0aGUga2V5CisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIHB1YmxpYyBrZXkgLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZwaywgb3B0LmZpbGVuYW1lICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBLZXkgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJnBrICkgPT0gTUJFRFRMU19QS19SU0EgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2EgPSBtYmVkdGxzX3BrX3JzYSggcGsgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJOOiAgIiwgJnJzYS0+TiwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJFOiAgIiwgJnJzYS0+RSwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCAmcGsgKSA9PSBNQkVEVExTX1BLX0VDS0VZICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNwID0gbWJlZHRsc19wa19lYyggcGsgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFgpOiAiLCAmZWNwLT5RLlgsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShZKTogIiwgJmVjcC0+US5ZLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWik6ICIsICZlY3AtPlEuWiwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIkRvIG5vdCBrbm93IGhvdyB0byBwcmludCBrZXkgaW5mb3JtYXRpb24gZm9yIHRoaXMgdHlwZVxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZ290byB1c2FnZTsKKworZXhpdDoKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCBzaXplb2YoYnVmKSApOworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhICBMYXN0IGVycm9yIHdhczogJXNcbiIsIGJ1ZiApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19QS19QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L2tleV9hcHBfd3JpdGVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9rZXlfYXBwX3dyaXRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTIwNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9rZXlfYXBwX3dyaXRlci5jCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogIEtleSB3cml0aW5nIGFwcGxpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLX1dSSVRFX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyNkZWZpbmUgVVNBR0VfT1VUIFwKKyAgICAiICAgIG91dHB1dF9maWxlPSUlcyAgICAgIGRlZmF1bHQ6IGtleWZpbGUucGVtXG4iICAgXAorICAgICIgICAgb3V0cHV0X2Zvcm1hdD1wZW18ZGVyIGRlZmF1bHQ6IHBlbVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfT1VUIFwKKyAgICAiICAgIG91dHB1dF9maWxlPSUlcyAgICAgIGRlZmF1bHQ6IGtleWZpbGUuZGVyXG4iICAgXAorICAgICIgICAgb3V0cHV0X2Zvcm1hdD1kZXIgICAgIGRlZmF1bHQ6IGRlclxuIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCisjZGVmaW5lIERGTF9PVVRQVVRfRklMRU5BTUUgICAgICJrZXlmaWxlLnBlbSIKKyNkZWZpbmUgREZMX09VVFBVVF9GT1JNQVQgICAgICAgT1VUUFVUX0ZPUk1BVF9QRU0KKyNlbHNlCisjZGVmaW5lIERGTF9PVVRQVVRfRklMRU5BTUUgICAgICJrZXlmaWxlLmRlciIKKyNkZWZpbmUgREZMX09VVFBVVF9GT1JNQVQgICAgICAgT1VUUFVUX0ZPUk1BVF9ERVIKKyNlbmRpZgorCisjZGVmaW5lIERGTF9NT0RFICAgICAgICAgICAgICAgIE1PREVfTk9ORQorI2RlZmluZSBERkxfRklMRU5BTUUgICAgICAgICAgICAia2V5ZmlsZS5rZXkiCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKyNkZWZpbmUgREZMX09VVFBVVF9NT0RFICAgICAgICAgT1VUUFVUX01PREVfTk9ORQorCisjZGVmaW5lIE1PREVfTk9ORSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTU9ERV9QUklWQVRFICAgICAgICAgICAgMQorI2RlZmluZSBNT0RFX1BVQkxJQyAgICAgICAgICAgICAyCisKKyNkZWZpbmUgT1VUUFVUX01PREVfTk9ORSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1VUUFVUX01PREVfUFJJVkFURSAgICAgICAgICAgIDEKKyNkZWZpbmUgT1VUUFVUX01PREVfUFVCTElDICAgICAgICAgICAgIDIKKworI2RlZmluZSBPVVRQVVRfRk9STUFUX1BFTSAgICAgICAgICAgICAgMAorI2RlZmluZSBPVVRQVVRfRk9STUFUX0RFUiAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IGtleV9hcHAgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBtb2RlPXByaXZhdGV8cHVibGljIGRlZmF1bHQ6IG5vbmVcbiIgICAgICAgICAgIFwKKyAgICAiICAgIGZpbGVuYW1lPSUlcyAgICAgICAgIGRlZmF1bHQ6IGtleWZpbGUua2V5XG4iICAgXAorICAgICIgICAgb3V0cHV0X21vZGU9cHJpdmF0ZXxwdWJsaWMgZGVmYXVsdDogbm9uZVxuIiAgICBcCisgICAgVVNBR0VfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1BLX1dSSVRFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX1BLX1dSSVRFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iICk7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorLyoKKyAqIGdsb2JhbCBvcHRpb25zCisgKi8KK3N0cnVjdCBvcHRpb25zCit7CisgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgIC8qIHRoZSBtb2RlIHRvIHJ1biB0aGUgYXBwbGljYXRpb24gaW4gICAqLworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOyAgICAgICAvKiBmaWxlbmFtZSBvZiB0aGUga2V5IGZpbGUgICAgICAgICAgICAgKi8KKyAgICBpbnQgb3V0cHV0X21vZGU7ICAgICAgICAgICAgLyogdGhlIG91dHB1dCBtb2RlIHRvIHVzZSAgICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGU7ICAgIC8qIHdoZXJlIHRvIHN0b3JlIHRoZSBjb25zdHJ1Y3RlZCBrZXkgZmlsZSAgKi8KKyAgICBpbnQgb3V0cHV0X2Zvcm1hdDsgICAgICAgICAgLyogdGhlIG91dHB1dCBmb3JtYXQgdG8gdXNlICAgICAgICAgICAgICovCit9IG9wdDsKKworc3RhdGljIGludCB3cml0ZV9wdWJsaWNfa2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSwgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgKQoreworICAgIGludCByZXQ7CisgICAgRklMRSAqZjsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbMTYwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgKmMgPSBvdXRwdXRfYnVmOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KG91dHB1dF9idWYsIDAsIDE2MDAwKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyAgICBpZiggb3B0Lm91dHB1dF9mb3JtYXQgPT0gT1VUUFVUX0ZPUk1BVF9QRU0gKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9wdWJrZXlfcGVtKCBrZXksIG91dHB1dF9idWYsIDE2MDAwICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgbGVuID0gc3RybGVuKCAoY2hhciAqKSBvdXRwdXRfYnVmICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9wdWJrZXlfZGVyKCBrZXksIG91dHB1dF9idWYsIDE2MDAwICkgKSA8IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGMgPSBvdXRwdXRfYnVmICsgc2l6ZW9mKG91dHB1dF9idWYpIC0gbGVuIC0gMTsKKyAgICB9CisKKyAgICBpZiggKCBmID0gZm9wZW4oIG91dHB1dF9maWxlLCAidyIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBjLCAxLCBsZW4sIGYgKSAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHdyaXRlX3ByaXZhdGVfa2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKmtleSwgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUgKQoreworICAgIGludCByZXQ7CisgICAgRklMRSAqZjsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9idWZbMTYwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgKmMgPSBvdXRwdXRfYnVmOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KG91dHB1dF9idWYsIDAsIDE2MDAwKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyAgICBpZiggb3B0Lm91dHB1dF9mb3JtYXQgPT0gT1VUUFVUX0ZPUk1BVF9QRU0gKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9rZXlfcGVtKCBrZXksIG91dHB1dF9idWYsIDE2MDAwICkgKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICAgICAgbGVuID0gc3RybGVuKCAoY2hhciAqKSBvdXRwdXRfYnVmICk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa193cml0ZV9rZXlfZGVyKCBrZXksIG91dHB1dF9idWYsIDE2MDAwICkgKSA8IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGMgPSBvdXRwdXRfYnVmICsgc2l6ZW9mKG91dHB1dF9idWYpIC0gbGVuIC0gMTsKKyAgICB9CisKKyAgICBpZiggKCBmID0gZm9wZW4oIG91dHB1dF9maWxlLCAidyIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBjLCAxLCBsZW4sIGYgKSAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19wa19jb250ZXh0IGtleTsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc19wa19pbml0KCAma2V5ICk7CisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQubW9kZSAgICAgICAgICAgICAgICA9IERGTF9NT0RFOworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworICAgIG9wdC5vdXRwdXRfbW9kZSAgICAgICAgID0gREZMX09VVFBVVF9NT0RFOworICAgIG9wdC5vdXRwdXRfZmlsZSAgICAgICAgID0gREZMX09VVFBVVF9GSUxFTkFNRTsKKyAgICBvcHQub3V0cHV0X2Zvcm1hdCAgICAgICA9IERGTF9PVVRQVVRfRk9STUFUOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJtb2RlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAicHJpdmF0ZSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubW9kZSA9IE1PREVfUFJJVkFURTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInB1YmxpYyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubW9kZSA9IE1PREVfUFVCTElDOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAib3V0cHV0X21vZGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJwcml2YXRlIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5vdXRwdXRfbW9kZSA9IE9VVFBVVF9NT0RFX1BSSVZBVEU7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJwdWJsaWMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm91dHB1dF9tb2RlID0gT1VUUFVUX01PREVfUFVCTElDOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAib3V0cHV0X2Zvcm1hdCIgKSA9PSAwICkKKyAgICAgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19QRU1fV1JJVEVfQykKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJwZW0iICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm91dHB1dF9mb3JtYXQgPSBPVVRQVVRfRk9STUFUX1BFTTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgImRlciIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQub3V0cHV0X2Zvcm1hdCA9IE9VVFBVVF9GT1JNQVRfREVSOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZmlsZW5hbWUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuZmlsZW5hbWUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJvdXRwdXRfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5vdXRwdXRfZmlsZSA9IHE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgaWYoIG9wdC5tb2RlID09IE1PREVfTk9ORSAmJiBvcHQub3V0cHV0X21vZGUgIT0gT1VUUFVUX01PREVfTk9ORSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuQ2Fubm90IG91dHB1dCBhIGtleSB3aXRob3V0IHJlYWRpbmcgb25lLlxuIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggb3B0Lm1vZGUgPT0gTU9ERV9QVUJMSUMgJiYgb3B0Lm91dHB1dF9tb2RlID09IE9VVFBVVF9NT0RFX1BSSVZBVEUgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbkNhbm5vdCBvdXRwdXQgYSBwcml2YXRlIGtleSBmcm9tIGEgcHVibGljIGtleS5cbiIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG9wdC5tb2RlID09IE1PREVfUFJJVkFURSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAxLjEuIExvYWQgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBwcml2YXRlIGtleSAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAma2V5LCBvcHQuZmlsZW5hbWUsIE5VTEwgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIChjaGFyICopIGJ1Ziwgc2l6ZW9mKGJ1ZikgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUgcmV0dXJuZWQgLTB4JTA0eCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAxLjIgUHJpbnQgdGhlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gS2V5IGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJmtleSApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhID0gbWJlZHRsc19wa19yc2EoIGtleSApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIk46ICAiLCAgJnJzYS0+TiwgIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRTogICIsICAmcnNhLT5FLCAgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEOiAgIiwgICZyc2EtPkQsICAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlA6ICAiLCAgJnJzYS0+UCwgIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUTogICIsICAmcnNhLT5RLCAgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJEUDogIiwgICZyc2EtPkRQLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkRROiAgIiwgJnJzYS0+RFEsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUVA6ICAiLCAmcnNhLT5RUCwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCAma2V5ICkgPT0gTUJFRFRMU19QS19FQ0tFWSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjcCA9IG1iZWR0bHNfcGtfZWMoIGtleSApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWCk6ICIsICZlY3AtPlEuWCwgMTYsIE5VTEwgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFkpOiAiLCAmZWNwLT5RLlksIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShaKTogIiwgJmVjcC0+US5aLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkQgICA6ICIsICZlY3AtPmQgICwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJrZXkgdHlwZSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisKKyAgICB9CisgICAgZWxzZSBpZiggb3B0Lm1vZGUgPT0gTU9ERV9QVUJMSUMgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4xLiBMb2FkIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgcHVibGljIGtleSAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJmtleSwgb3B0LmZpbGVuYW1lICk7CisKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoY2hhciAqKSBidWYsIHNpemVvZihidWYpICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5IHJldHVybmVkIC0weCUwNHggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4yIFByaW50IHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEtleSBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgaWYoIG1iZWR0bHNfcGtfZ2V0X3R5cGUoICZrZXkgKSA9PSBNQkVEVExTX1BLX1JTQSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYSA9IG1iZWR0bHNfcGtfcnNhKCBrZXkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJOOiAiLCAmcnNhLT5OLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkU6ICIsICZyc2EtPkUsIDE2LCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQorICAgICAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggJmtleSApID09IE1CRURUTFNfUEtfRUNLRVkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyICplY3AgPSBtYmVkdGxzX3BrX2VjKCBrZXkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICJRKFgpOiAiLCAmZWNwLT5RLlgsIDE2LCBOVUxMICk7CisgICAgICAgICAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUShZKTogIiwgJmVjcC0+US5ZLCAxNiwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIlEoWik6ICIsICZlY3AtPlEuWiwgMTYsIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJrZXkgdHlwZSBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZ290byB1c2FnZTsKKworICAgIGlmKCBvcHQub3V0cHV0X21vZGUgPT0gT1VUUFVUX01PREVfUFVCTElDICkKKyAgICB7CisgICAgICAgIHdyaXRlX3B1YmxpY19rZXkoICZrZXksIG9wdC5vdXRwdXRfZmlsZSApOworICAgIH0KKyAgICBpZiggb3B0Lm91dHB1dF9tb2RlID09IE9VVFBVVF9NT0RFX1BSSVZBVEUgKQorICAgIHsKKyAgICAgICAgd3JpdGVfcHJpdmF0ZV9rZXkoICZrZXksIG9wdC5vdXRwdXRfZmlsZSApOworICAgIH0KKworZXhpdDoKKworICAgIGlmKCByZXQgIT0gMCAmJiByZXQgIT0gMSkKKyAgICB7CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIC0gJXNcbiIsIGJ1ZiApOworI2Vsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuIik7CisjZW5kaWYKKyAgICB9CisKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZrZXkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BLX1dSSVRFX0MgJiYgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvbXBpX2RlbW8uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L21waV9kZW1vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlODk1NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L21waV9kZW1vLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiAgU2ltcGxlIE1QSSBkZW1vbnN0cmF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlICJtYmVkdGxzL2JpZ251bS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIEUsIFAsIFEsIE4sIEgsIEQsIFgsIFksIFo7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmRSApOyBtYmVkdGxzX21waV9pbml0KCAmUCApOyBtYmVkdGxzX21waV9pbml0KCAmUSApOyBtYmVkdGxzX21waV9pbml0KCAmTiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZEICk7IG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlogKTsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZQLCAxMCwgIjI3ODkiICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUSwgMTAsICIzMjAzIiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkUsIDEwLCAgIjI1NyIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJk4sICZQLCAmUSApICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICBQdWJsaWMga2V5OlxuXG4iICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiICBOID0gIiwgJk4sIDEwLCBOVUxMICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICIgIEUgPSAiLCAmRSwgMTAsIE5VTEwgKSApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgUHJpdmF0ZSBrZXk6XG5cbiIgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoICIgIFAgPSAiLCAmUCwgMTAsIE5VTEwgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIiAgUSA9ICIsICZRLCAxMCwgTlVMTCApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0VOUFJJTUUpCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUCwgJlAsIDEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfc3ViX2ludCggJlEsICZRLCAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUCwgJlEgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJkQsICZFLCAmSCApICk7CisKKyAgICBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiICBEID0gRV4tMSBtb2QgKFAtMSkqKFEtMSkgPSAiLAorICAgICAgICAgICAgICAgICAgICAmRCwgMTAsIE5VTEwgKTsKKyNlbHNlCisgICAgbWJlZHRsc19wcmludGYoIlxuVGVzdCBza2lwcGVkIChNQkVEVExTX0dFTlBSSU1FIG5vdCBkZWZpbmVkKS5cblxuIik7CisjZW5kaWYKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgMTAsICI1NTU1NSIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlksICZYLCAmRSwgJk4sIE5VTEwgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfZXhwX21vZCggJlosICZZLCAmRCwgJk4sIE5VTEwgKSApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgUlNBIG9wZXJhdGlvbjpcblxuIiApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIiAgWCAocGxhaW50ZXh0KSAgPSAiLCAmWCwgMTAsIE5VTEwgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIiAgWSAoY2lwaGVydGV4dCkgPSBYXkUgbW9kIE4gPSAiLCAmWSwgMTAsIE5VTEwgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIiAgWiAoZGVjcnlwdGVkKSAgPSBZXkQgbW9kIE4gPSAiLCAmWiwgMTAsIE5VTEwgKSApOworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKK2NsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJkUgKTsgbWJlZHRsc19tcGlfZnJlZSggJlAgKTsgbWJlZHRsc19tcGlfZnJlZSggJlEgKTsgbWJlZHRsc19tcGlfZnJlZSggJk4gKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRCApOyBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbkFuIGVycm9yIG9jY3VycmVkLlxuIiApOworICAgICAgICByZXQgPSAxOworICAgIH0KKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19kZWNyeXB0LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19kZWNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmYmM3NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX2RlY3J5cHQuYwpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqICBQdWJsaWMga2V5LWJhc2VkIHNpbXBsZSBkZWNyeXB0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpICYmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldCwgYzsKKyAgICBzaXplX3QgaSwgb2xlbiA9IDA7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzEwMjRdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJtYmVkdGxzX3BrX2RlY3J5cHQiOworICAgICgodm9pZCkgYXJndik7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZiggcmVzdWx0ICkgKTsKKyAgICByZXQgPSAxOworCisgICAgaWYoIGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiBtYmVkdGxzX3BrX2RlY3J5cHQgPGtleV9maWxlPlxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYKKworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHJpdmF0ZSBrZXkgZnJvbSAnJXMnIiwgYXJndlsxXSApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGssIGFyZ3ZbMV0sICIiICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEV4dHJhY3QgdGhlIFJTQSBlbmNyeXB0ZWQgdmFsdWUgZnJvbSB0aGUgdGV4dCBmaWxlCisgICAgICovCisgICAgcmV0ID0gMTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggInJlc3VsdC1lbmMudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAhIENvdWxkIG5vdCBvcGVuICVzXG5cbiIsICJyZXN1bHQtZW5jLnR4dCIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGkgPSAwOworCisgICAgd2hpbGUoIGZzY2FuZiggZiwgIiUwMlgiLCAmYyApID4gMCAmJgorICAgICAgICAgICBpIDwgKGludCkgc2l6ZW9mKCBidWYgKSApCisgICAgICAgIGJ1ZltpKytdID0gKHVuc2lnbmVkIGNoYXIpIGM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogRGVjcnlwdCB0aGUgZW5jcnlwdGVkIFJTQSBkYXRhIGFuZCBwcmludCB0aGUgcmVzdWx0LgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gRGVjcnlwdGluZyB0aGUgZW5jcnlwdGVkIGRhdGEiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfZGVjcnlwdCggJnBrLCBidWYsIGksIHJlc3VsdCwgJm9sZW4sIHNpemVvZihyZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19wa19kZWNyeXB0IHJldHVybmVkIC0weCUwNHhcbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gT0tcblxuIiApOworCisgICAgbWJlZHRsc19wcmludGYoICJUaGUgZGVjcnlwdGVkIHJlc3VsdCBpczogJyVzJ1xuXG4iLCByZXN1bHQgKTsKKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIChjaGFyICopIGJ1Ziwgc2l6ZW9mKGJ1ZikgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgIExhc3QgZXJyb3Igd2FzOiAlc1xuIiwgYnVmICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1BLX1BBUlNFX0MgJiYgTUJFRFRMU19GU19JTyAmJgorICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfZW5jcnlwdC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfZW5jcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYTlkNWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19lbmNyeXB0LmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiAgUlNBIHNpbXBsZSBkYXRhIGVuY3J5cHRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgJiYgZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaSwgb2xlbiA9IDA7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gIm1iZWR0bHNfcGtfZW5jcnlwdCI7CisKKyAgICByZXQgPSAxOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBpZiggYXJnYyAhPSAzICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidXNhZ2U6IG1iZWR0bHNfcGtfZW5jcnlwdCA8a2V5X2ZpbGU+IDxzdHJpbmcgb2YgbWF4IDEwMCBjaGFyYWN0ZXJzPlxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisjZW5kaWYKKworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHVibGljIGtleSBmcm9tICclcyciLCBhcmd2WzFdICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlKCAmcGssIGFyZ3ZbMV0gKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggc3RybGVuKCBhcmd2WzJdICkgPiAxMDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgSW5wdXQgZGF0YSBsYXJnZXIgdGhhbiAxMDAgY2hhcmFjdGVycy5cblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWVtY3B5KCBpbnB1dCwgYXJndlsyXSwgc3RybGVuKCBhcmd2WzJdICkgKTsKKworICAgIC8qCisgICAgICogQ2FsY3VsYXRlIHRoZSBSU0EgZW5jcnlwdGlvbiBvZiB0aGUgaGFzaC4KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIEdlbmVyYXRpbmcgdGhlIGVuY3J5cHRlZCB2YWx1ZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19lbmNyeXB0KCAmcGssIGlucHV0LCBzdHJsZW4oIGFyZ3ZbMl0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsICZvbGVuLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfZW5jcnlwdCByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdyaXRlIHRoZSBzaWduYXR1cmUgaW50byByZXN1bHQtZW5jLnR4dAorICAgICAqLworICAgIGlmKCAoIGYgPSBmb3BlbiggInJlc3VsdC1lbmMudHh0IiwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IGNyZWF0ZSAlc1xuXG4iLCAicmVzdWx0LWVuYy50eHQiICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgb2xlbjsgaSsrICkKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBmLCAiJTAyWCVzIiwgYnVmW2ldLAorICAgICAgICAgICAgICAgICAoIGkgKyAxICkgJSAxNiA9PSAwID8gIlxyXG4iIDogIiAiICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gRG9uZSAoY3JlYXRlZCBcIiVzXCIpXG5cbiIsICJyZXN1bHQtZW5jLnR4dCIgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgKGNoYXIgKikgYnVmLCBzaXplb2YoYnVmKSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISAgTGFzdCBlcnJvciB3YXM6ICVzXG4iLCBidWYgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUEtfUEFSU0VfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfRlNfSU8gJiYgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19zaWduLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9wa19zaWduLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMDhhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX3NpZ24uYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqICBQdWJsaWMga2V5LWJhc2VkIHNpZ25hdHVyZSBjcmVhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfU0hBMjU2X0MgYW5kL29yIE1CRURUTFNfTURfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19QS19QQVJTRV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0ID0gMTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAibWJlZHRsc19wa19zaWduIjsKKyAgICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisKKyAgICBpZiggYXJnYyAhPSAzICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidXNhZ2U6IG1iZWR0bHNfcGtfc2lnbiA8a2V5X2ZpbGU+IDxmaWxlbmFtZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHByaXZhdGUga2V5IGZyb20gJyVzJyIsIGFyZ3ZbMV0gKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGssIGFyZ3ZbMV0sICIiICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuICclcydcbiIsIGFyZ3ZbMV0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBpbnB1dCBmaWxlLAorICAgICAqIHRoZW4gY2FsY3VsYXRlIHRoZSBzaWduYXR1cmUgb2YgdGhlIGhhc2guCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBHZW5lcmF0aW5nIHRoZSBTSEEtMjU2IHNpZ25hdHVyZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9maWxlKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApLAorICAgICAgICAgICAgICAgICAgICBhcmd2WzJdLCBoYXNoICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJXNcblxuIiwgYXJndlsyXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zaWduKCAmcGssIE1CRURUTFNfTURfU0hBMjU2LCBoYXNoLCAwLCBidWYsICZvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19wa19zaWduIHJldHVybmVkIC0weCUwNHhcbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogV3JpdGUgdGhlIHNpZ25hdHVyZSBpbnRvIDxmaWxlbmFtZT4uc2lnCisgICAgICovCisgICAgbWJlZHRsc19zbnByaW50ZiggZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy5zaWciLCBhcmd2WzJdICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIGZpbGVuYW1lLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3QgY3JlYXRlICVzXG5cbiIsIGZpbGVuYW1lICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggZndyaXRlKCBidWYsIDEsIG9sZW4sIGYgKSAhPSBvbGVuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4gICEgZndyaXRlIGZhaWxlZFxuXG4iICk7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZmNsb3NlKCBmICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIERvbmUgKGNyZWF0ZWQgXCIlc1wiKVxuXG4iLCBmaWxlbmFtZSApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIChjaGFyICopIGJ1Ziwgc2l6ZW9mKGJ1ZikgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgIExhc3QgZXJyb3Igd2FzOiAlc1xuIiwgYnVmICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfU0hBMjU2X0MgJiYgTUJFRFRMU19QS19QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX3ZlcmlmeS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcGtfdmVyaWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1ZDE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3BrX3ZlcmlmeS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIFB1YmxpYyBrZXktYmFzZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEtfUEFSU0VfQykgfHwgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19NRF9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciBNQkVEVExTX1BLX1BBUlNFX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCByZXQgPSAxOworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKyAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgaWYoIGFyZ2MgIT0gMyApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiBtYmVkdGxzX3BrX3ZlcmlmeSA8a2V5X2ZpbGU+IDxmaWxlbmFtZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwdWJsaWMga2V5IGZyb20gJyVzJyIsIGFyZ3ZbMV0gKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJnBrLCBhcmd2WzFdICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUgcmV0dXJuZWQgLTB4JTA0eFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFeHRyYWN0IHRoZSBzaWduYXR1cmUgZnJvbSB0aGUgZmlsZQorICAgICAqLworICAgIHJldCA9IDE7CisgICAgbWJlZHRsc19zbnByaW50ZiggZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy5zaWciLCBhcmd2WzJdICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIGZpbGVuYW1lLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gICEgQ291bGQgbm90IG9wZW4gJXNcblxuIiwgZmlsZW5hbWUgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworCisgICAgaSA9IGZyZWFkKCBidWYsIDEsIHNpemVvZihidWYpLCBmICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBpbnB1dCBmaWxlIGFuZAorICAgICAqIHZlcmlmeSB0aGUgc2lnbmF0dXJlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBWZXJpZnlpbmcgdGhlIFNIQS0yNTYgc2lnbmF0dXJlIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICksCisgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMl0sIGhhc2ggKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gb3IgcmVhZCAlc1xuXG4iLCBhcmd2WzJdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3ZlcmlmeSggJnBrLCBNQkVEVExTX01EX1NIQTI1NiwgaGFzaCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgaSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3BrX3ZlcmlmeSByZXR1cm5lZCAtMHglMDR4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIE9LICh0aGUgc2lnbmF0dXJlIGlzIHZhbGlkKVxuXG4iICk7CisKKyAgICByZXQgPSAwOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCAoY2hhciAqKSBidWYsIHNpemVvZihidWYpICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhICBMYXN0IGVycm9yIHdhczogJXNcbiIsIGJ1ZiApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19TSEEyNTZfQyAmJgorICAgICAgICAgIE1CRURUTFNfUEtfUEFSU0VfQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfZGVjcnlwdC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2MwMTNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2RlY3J5cHQuYwpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqICBSU0Egc2ltcGxlIGRlY3J5cHRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgICAgICBleGl0CisjZGVmaW5lIE1CRURUTFNfRVhJVF9TVUNDRVNTIEVYSVRfU1VDQ0VTUworI2RlZmluZSBNQkVEVExTX0VYSVRfRkFJTFVSRSBFWElUX0ZBSUxVUkUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfRlNfSU8gYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0dXJuX3ZhbCwgZXhpdF92YWwsIGM7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInJzYV9kZWNyeXB0IjsKKyAgICAoKHZvaWQpIGFyZ3YpOworCisgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCByZXN1bHQgKSApOworICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX1NVQ0NFU1M7CisKKyAgICBpZiggYXJnYyAhPSAxICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidXNhZ2U6IHJzYV9kZWNyeXB0XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIG1iZWR0bHNfZXhpdCggTUJFRFRMU19FWElUX0ZBSUxVUkUgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworCisgICAgcmV0dXJuX3ZhbCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cm9weSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApOworICAgIGlmKCByZXR1cm5fdmFsICE9IDAgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHByaXZhdGUga2V5IGZyb20gcnNhX3ByaXYudHh0IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oICJyc2FfcHJpdi50eHQiLCAicmIiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIHJzYV9wcml2LnR4dFxuIiBcCisgICAgICAgICAgICAgICAgIiAgISBQbGVhc2UgcnVuIHJzYV9nZW5rZXkgZmlyc3RcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5OICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkUgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldHVybl92YWwgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRCAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5QICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlEgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldHVybl92YWwgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRFAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0dXJuX3ZhbCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5EUSwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLlFQLCAxNiwgZiApICkgIT0gMCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX21waV9yZWFkX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByc2EubGVuID0gKCBtYmVkdGxzX21waV9iaXRsZW4oICZyc2EuTiApICsgNyApID4+IDM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogRXh0cmFjdCB0aGUgUlNBIGVuY3J5cHRlZCB2YWx1ZSBmcm9tIHRoZSB0ZXh0IGZpbGUKKyAgICAgKi8KKyAgICBpZiggKCBmID0gZm9wZW4oICJyZXN1bHQtZW5jLnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgISBDb3VsZCBub3Qgb3BlbiAlc1xuXG4iLCAicmVzdWx0LWVuYy50eHQiICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpID0gMDsKKworICAgIHdoaWxlKCBmc2NhbmYoIGYsICIlMDJYIiwgJmMgKSA+IDAgJiYKKyAgICAgICAgICAgaSA8IChpbnQpIHNpemVvZiggYnVmICkgKQorICAgICAgICBidWZbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICBpZiggaSAhPSByc2EubGVuICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gICEgSW52YWxpZCBSU0Egc2lnbmF0dXJlIGZvcm1hdFxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERlY3J5cHQgdGhlIGVuY3J5cHRlZCBSU0EgZGF0YSBhbmQgcHJpbnQgdGhlIHJlc3VsdC4KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIERlY3J5cHRpbmcgdGhlIGVuY3J5cHRlZCBkYXRhIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXR1cm5fdmFsID0gbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggJnJzYSwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHJfZHJiZywgTUJFRFRMU19SU0FfUFJJVkFURSwgJmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgcmVzdWx0LCAxMDI0ICk7CisgICAgaWYoIHJldHVybl92YWwgIT0gMCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0IHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIE9LXG5cbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiVGhlIGRlY3J5cHRlZCByZXN1bHQgaXM6ICclcydcblxuIiwgcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggZXhpdF92YWwgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19GU19JTyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfZW5jcnlwdC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNiMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2VuY3J5cHQuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBSU0Egc2ltcGxlIGRhdGEgZW5jcnlwdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19leGl0ICAgICAgIGV4aXQKKyNkZWZpbmUgTUJFRFRMU19FWElUX1NVQ0NFU1MgRVhJVF9TVUNDRVNTCisjZGVmaW5lIE1CRURUTFNfRVhJVF9GQUlMVVJFIEVYSVRfRkFJTFVSRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpICYmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0dXJuX3ZhbCwgZXhpdF92YWw7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgdW5zaWduZWQgY2hhciBpbnB1dFsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAicnNhX2VuY3J5cHQiOworCisgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfU1VDQ0VTUzsKKworICAgIGlmKCBhcmdjICE9IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ1c2FnZTogcnNhX2VuY3J5cHQgPHN0cmluZyBvZiBtYXggMTAwIGNoYXJhY3RlcnM+XG4iICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyNlbmRpZgorCisgICAgICAgIG1iZWR0bHNfZXhpdCggTUJFRFRMU19FWElUX0ZBSUxVUkUgKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisKKyAgICByZXR1cm5fdmFsID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyb3B5LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICk7CisgICAgaWYoIHJldHVybl92YWwgIT0gMCApCisgICAgeworICAgICAgICBleGl0X3ZhbCA9IE1CRURUTFNfRVhJVF9GQUlMVVJFOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFJlYWRpbmcgcHVibGljIGtleSBmcm9tIHJzYV9wdWIudHh0IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oICJyc2FfcHViLnR4dCIsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gcnNhX3B1Yi50eHRcbiIgXAorICAgICAgICAgICAgICAgICIgICEgUGxlYXNlIHJ1biByc2FfZ2Vua2V5IGZpcnN0XG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldHVybl92YWwgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuTiwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXR1cm5fdmFsID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkUsIDE2LCBmICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3JlYWRfZmlsZSByZXR1cm5lZCAlZFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCApOworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJzYS5sZW4gPSAoIG1iZWR0bHNfbXBpX2JpdGxlbiggJnJzYS5OICkgKyA3ICkgPj4gMzsKKworICAgIGZjbG9zZSggZiApOworCisgICAgaWYoIHN0cmxlbiggYXJndlsxXSApID4gMTAwICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIElucHV0IGRhdGEgbGFyZ2VyIHRoYW4gMTAwIGNoYXJhY3RlcnMuXG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1lbWNweSggaW5wdXQsIGFyZ3ZbMV0sIHN0cmxlbiggYXJndlsxXSApICk7CisKKyAgICAvKgorICAgICAqIENhbGN1bGF0ZSB0aGUgUlNBIGVuY3J5cHRpb24gb2YgdGhlIGhhc2guCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBHZW5lcmF0aW5nIHRoZSBSU0EgZW5jcnlwdGVkIHZhbHVlIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXR1cm5fdmFsID0gbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCggJnJzYSwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHJfZHJiZywgTUJFRFRMU19SU0FfUFVCTElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIGFyZ3ZbMV0gKSwgaW5wdXQsIGJ1ZiApOworICAgIGlmKCByZXR1cm5fdmFsICE9IDAgKQorICAgIHsKKyAgICAgICAgZXhpdF92YWwgPSBNQkVEVExTX0VYSVRfRkFJTFVSRTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCByZXR1cm5lZCAlZFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXcml0ZSB0aGUgc2lnbmF0dXJlIGludG8gcmVzdWx0LWVuYy50eHQKKyAgICAgKi8KKyAgICBpZiggKCBmID0gZm9wZW4oICJyZXN1bHQtZW5jLnR4dCIsICJ3YisiICkgKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGV4aXRfdmFsID0gTUJFRFRMU19FWElUX0ZBSUxVUkU7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBjcmVhdGUgJXNcblxuIiwgInJlc3VsdC1lbmMudHh0IiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgZm9yKCBpID0gMDsgaSA8IHJzYS5sZW47IGkrKyApCisgICAgICAgIG1iZWR0bHNfZnByaW50ZiggZiwgIiUwMlglcyIsIGJ1ZltpXSwKKyAgICAgICAgICAgICAgICAgKCBpICsgMSApICUgMTYgPT0gMCA/ICJcclxuIiA6ICIgIiApOworCisgICAgZmNsb3NlKCBmICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIERvbmUgKGNyZWF0ZWQgXCIlc1wiKVxuXG4iLCAicmVzdWx0LWVuYy50eHQiICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggZXhpdF92YWwgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYKKyAgICAgICAgICBNQkVEVExTX0ZTX0lPICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2dlbmtleS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX2dlbmtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTlhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfZ2Vua2V5LmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiAgRXhhbXBsZSBSU0Ega2V5IGdlbmVyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgJiYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgJiYgXAorICAgIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX0dFTlBSSU1FKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0ZTX0lPKSAmJiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIEtFWV9TSVpFIDIwNDgKKyNkZWZpbmUgRVhQT05FTlQgNjU1MzcKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0dFTlBSSU1FKSB8fCAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1JTQV9DIGFuZC9vciBNQkVEVExTX0dFTlBSSU1FIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIGFuZC9vciBNQkVEVExTX0NUUl9EUkJHX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHJzYTsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBGSUxFICpmcHViICA9IE5VTEw7CisgICAgRklMRSAqZnByaXYgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAicnNhX2dlbmtleSI7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEdlbmVyYXRpbmcgdGhlIFJTQSBrZXkgWyAlZC1iaXQgXS4uLiIsIEtFWV9TSVpFICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZyc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9nZW5fa2V5KCAmcnNhLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnLCBLRVlfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQT05FTlQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19yc2FfZ2VuX2tleSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gIC4gRXhwb3J0aW5nIHRoZSBwdWJsaWMgIGtleSBpbiByc2FfcHViLnR4dC4uLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIGZwdWIgPSBmb3BlbiggInJzYV9wdWIudHh0IiwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgY291bGQgbm90IG9wZW4gcnNhX3B1Yi50eHQgZm9yIHdyaXRpbmdcblxuIiApOworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIk4gPSAiLCAmcnNhLk4sIDE2LCBmcHViICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfd3JpdGVfZmlsZSggIkUgPSAiLCAmcnNhLkUsIDE2LCBmcHViICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuICAuIEV4cG9ydGluZyB0aGUgcHJpdmF0ZSBrZXkgaW4gcnNhX3ByaXYudHh0Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCBmcHJpdiA9IGZvcGVuKCAicnNhX3ByaXYudHh0IiwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgY291bGQgbm90IG9wZW4gcnNhX3ByaXYudHh0IGZvciB3cml0aW5nXG4iICk7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiTiA9ICIgLCAmcnNhLk4gLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRSA9ICIgLCAmcnNhLkUgLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRCA9ICIgLCAmcnNhLkQgLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUCA9ICIgLCAmcnNhLlAgLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUSA9ICIgLCAmcnNhLlEgLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRFAgPSAiLCAmcnNhLkRQLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiRFEgPSAiLCAmcnNhLkRRLCAxNiwgZnByaXYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV93cml0ZV9maWxlKCAiUVAgPSAiLCAmcnNhLlFQLCAxNiwgZnByaXYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19tcGlfd3JpdGVfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKy8qCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiAgLiBHZW5lcmF0aW5nIHRoZSBjZXJ0aWZpY2F0ZS4uLiIgKTsKKworICAgIHg1MDl3cml0ZV9pbml0X3JhdyggJmNlcnQgKTsKKyAgICB4NTA5d3JpdGVfYWRkX3B1YmtleSggJmNlcnQsICZyc2EgKTsKKyAgICB4NTA5d3JpdGVfYWRkX3N1YmplY3QoICZjZXJ0LCAiQ049J2xvY2FsaG9zdCciICk7CisgICAgeDUwOXdyaXRlX2FkZF92YWxpZGl0eSggJmNlcnQsICIyMDA3LTA5LTA2IDE3OjAwOjMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMTAtMDktMDYgMTc6MDA6MzIiICk7CisgICAgeDUwOXdyaXRlX2NyZWF0ZV9zZWxmc2lnbiggJmNlcnQsICZyc2EgKTsKKyAgICB4NTA5d3JpdGVfY3J0ZmlsZSggJmNlcnQsICJjZXJ0LmRlciIsIFg1MDlfT1VUUFVUX0RFUiApOworICAgIHg1MDl3cml0ZV9jcnRmaWxlKCAmY2VydCwgImNlcnQucGVtIiwgWDUwOV9PVVRQVVRfUEVNICk7CisgICAgeDUwOXdyaXRlX2ZyZWVfcmF3KCAmY2VydCApOworKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuXG4iICk7CisKK2V4aXQ6CisKKyAgICBpZiggZnB1YiAgIT0gTlVMTCApCisgICAgICAgIGZjbG9zZSggZnB1YiApOworCisgICAgaWYoIGZwcml2ICE9IE5VTEwgKQorICAgICAgICBmY2xvc2UoIGZwcml2ICk7CisKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1JTQV9DICYmCisgICAgICAgICAgTUJFRFRMU19HRU5QUklNRSAmJiBNQkVEVExTX0ZTX0lPICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ByaXYudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ByaXYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYzM3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfcHJpdi50eHQKQEAgLTAsMCArMSw4IEBACitOID0gQTFENDZGQkEyMzE4RjhEQ0VGMTZDMjgwOTQ4QjFDRjI3OTY2QjlCNDcyMjVFRDI5ODlGOEQ3NEI0NUJEMzYwNDlDMEFBQjVBRDBGRjAwMzU1M0JBODQzQzhFMTI3ODJGQzU4NzNCQjg5QTNEQzg0Qjg4M0QyNTY2NkNEMjJCRjNBQ0Q1QjY3NTk2OUY4QkVCRkJDQUM5M0ZERDkyN0M3NDQyQjE3OEIxMEQxREZGOTM5OEU1MjMxNkFBRTBBRjc0RTU5NDY1MEJEQzNDNjcwMjQxRDQxODY4NDU5M0NEQTFBN0I5REM0RjIwRDJGREM2RjY2MzQ0MDc0MDAzRTIxMQ0KK0UgPSAwMTAwMDENCitEID0gNTg5NTUyQkI0RjJGMDIzQUREREQ1NTg2RDBDOEZEODU3NTEyRDgyMDgwNDM2Njc4RDA3Rjk4NEEyOUQ4OTJEMzFGMUY3MDAwRkM1QTM5QTBGNzNFMjdEODg1RTQ3MjQ5QTQxNDhDOEE1NjUzRUY2OUY5MUY4RjczNkJBOUY4NDg0MUMyRDk5Q0Q4QzI0REU4QjcyQjVDOUJFMEVEQkUyM0Y5M0Q3MzE3NDlGRUE5Q0ZCNEE0OEREMkI3RjM1QTI3MDNFNzRBQTJENERCN0RFOUNFRUE3RDc2M0FGMEFEQTdBQzE3NkM0RTlBMjJDNENEQTY1Q0VDMEM2NTk2NDQwMQ0KK1AgPSBDRDA4MzU2OEQyRDQ2QzQ0QzQwQzFGQTAxMDFBRjIxNTVFNTlDNzBCMDg0MjMxMTJBRjBDMTIwMjUxNEJCQTUyMTA3NjVFMjlGRjEzMDM2RjU2Qzc0OTU4OTREODBDRjhDM0JBRUUyODM5QkFDQkIwQjg2RjZBMjk2NUY2MERCMQ0KK1EgPSBDQTBFRUVBNUU3MTBFOEU5ODExQTZCODQ2Mzk5NDIwRTNBRTRBNEMxNjY0N0U0MjZEREY4QkJCQ0IxMUNEM0YzNUNFMkU0QjZCQ0FEMDdBRTJDMEVDMkVDQkZDQzYwMUIyMDdDREQ3N0I1NjczRTE2MzgyQjExMzBCRjQ2NTI2MQ0KK0RQID0gMEQwRTIxQzA3QkY0MzRCNEE4M0IxMTY0NzJDMjE0N0ExMUQ4RUI5OEEzM0NGQkJDRjFEMjc1RUYxOUQ4MTU5NDE2MjI0MzVBQUYzODM5QjZDNDMyQ0E1M0NFOUU3NzJDRkJFMTkyM0E5MzdBNzY2RkQ5M0U5NkU2RURFQzFERjENCitEUSA9IDI2OUNFQkU2MzA1REZFRTQ4MDkzNzdGMDc4QzgxNEUzN0I0NUFFNjY3NzExNERGQzRGNzZGNTA5N0UxRjMwMzFENTkyNTY3QUM1NUI5Qjk4MjEzQjQwRUNENTRBNEQyMzYxRjVGQUFDQTFCMUY1MUY3MUU0NjkwODkzQzRGMDgxDQorUVAgPSA5N0FDNUJCODg1QUJDQTMxNDM3NUU5RTREQjFCQTRCMjIxOEM5MDYxOUY2MUJENDc0RjU3ODUwNzVFQ0E4MTc1MEE3MzUxOTlBOEMxOTFGRTJEMzM1NUU3Q0Y2MDFBNzBFNUNBQkRFMEUwMkMyNTM4QkI5RkI0ODcxNTQwQjNDMQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9wdWIudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3B1Yi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2ZDMxMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9wdWIudHh0CkBAIC0wLDAgKzEsMiBAQAorTiA9IEExRDQ2RkJBMjMxOEY4RENFRjE2QzI4MDk0OEIxQ0YyNzk2NkI5QjQ3MjI1RUQyOTg5RjhENzRCNDVCRDM2MDQ5QzBBQUI1QUQwRkYwMDM1NTNCQTg0M0M4RTEyNzgyRkM1ODczQkI4OUEzREM4NEI4ODNEMjU2NjZDRDIyQkYzQUNENUI2NzU5NjlGOEJFQkZCQ0FDOTNGREQ5MjdDNzQ0MkIxNzhCMTBEMURGRjkzOThFNTIzMTZBQUUwQUY3NEU1OTQ2NTBCREMzQzY3MDI0MUQ0MTg2ODQ1OTNDREExQTdCOURDNEYyMEQyRkRDNkY2NjM0NDA3NDAwM0UyMTENCitFID0gMDEwMDAxDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3NpZ24uYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9zaWduLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmYmY3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9zaWduLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiAgUlNBL1NIQS0yNTYgc2lnbmF0dXJlIGNyZWF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX01EX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19NRF9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19TSEEyNTZfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgaTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHJzYTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKyAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcnNhLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworICAgIHJldCA9IDE7CisKKyAgICBpZiggYXJnYyAhPSAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidXNhZ2U6IHJzYV9zaWduIDxmaWxlbmFtZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwcml2YXRlIGtleSBmcm9tIHJzYV9wcml2LnR4dCIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggZiA9IGZvcGVuKCAicnNhX3ByaXYudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiByc2FfcHJpdi50eHRcbiIgXAorICAgICAgICAgICAgICAgICIgICEgUGxlYXNlIHJ1biByc2FfZ2Vua2V5IGZpcnN0XG5cbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5OICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuRSAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkQgLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5QICwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuUSAsIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkRQLCAxNiwgZiApICkgIT0gMCB8fAorICAgICAgICAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJnJzYS5EUSwgMTYsIGYgKSApICE9IDAgfHwKKyAgICAgICAgKCByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZyc2EuUVAsIDE2LCBmICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3JlYWRfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByc2EubGVuID0gKCBtYmVkdGxzX21waV9iaXRsZW4oICZyc2EuTiApICsgNyApID4+IDM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gQ2hlY2tpbmcgdGhlIHByaXZhdGUga2V5IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJnJzYSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5IGZhaWxlZCB3aXRoIC0weCUweFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGlucHV0IGZpbGUsCisgICAgICogdGhlbiBjYWxjdWxhdGUgdGhlIFJTQSBzaWduYXR1cmUgb2YgdGhlIGhhc2guCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBHZW5lcmF0aW5nIHRoZSBSU0EvU0hBLTI1NiBzaWduYXR1cmUiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWRfZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEEyNTYgKSwKKyAgICAgICAgICAgICAgICAgICAgYXJndlsxXSwgaGFzaCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiBvciByZWFkICVzXG5cbiIsIGFyZ3ZbMV0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oICZyc2EsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BSSVZBVEUsIE1CRURUTFNfTURfU0hBMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgaGFzaCwgYnVmICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24gcmV0dXJuZWQgLTB4JTB4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qCisgICAgICogV3JpdGUgdGhlIHNpZ25hdHVyZSBpbnRvIDxmaWxlbmFtZT4uc2lnCisgICAgICovCisgICAgbWJlZHRsc19zbnByaW50ZiggZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy5zaWciLCBhcmd2WzFdICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIGZpbGVuYW1lLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3QgY3JlYXRlICVzXG5cbiIsIGFyZ3ZbMV0gKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZvciggaSA9IDA7IGkgPCByc2EubGVuOyBpKysgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIGYsICIlMDJYJXMiLCBidWZbaV0sCisgICAgICAgICAgICAgICAgICggaSArIDEgKSAlIDE2ID09IDAgPyAiXHJcbiIgOiAiICIgKTsKKworICAgIGZjbG9zZSggZiApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBEb25lIChjcmVhdGVkIFwiJXNcIilcblxuIiwgZmlsZW5hbWUgKTsKKworZXhpdDoKKworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZyc2EgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19TSEEyNTZfQyAmJgorICAgICAgICAgIE1CRURUTFNfRlNfSU8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9zaWduX3Bzcy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3NpZ25fcHNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2ZjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9wa2V5L3JzYV9zaWduX3Bzcy5jCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogIFJTQVNTQS1QU1MvU0hBLTI1NiBzaWduYXR1cmUgY3JlYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX01EX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8ICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX01EX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1JTQV9DIGFuZC9vciBNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1BLX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgRklMRSAqZjsKKyAgICBpbnQgcmV0ID0gMTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAicnNhX3NpZ25fcHNzIjsKKyAgICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBpZiggYXJnYyAhPSAzICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidXNhZ2U6IHJzYV9zaWduX3BzcyA8a2V5X2ZpbGU+IDxmaWxlbmFtZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gU2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHBlcnMgKSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBSZWFkaW5nIHByaXZhdGUga2V5IGZyb20gJyVzJyIsIGFyZ3ZbMV0gKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGssIGFyZ3ZbMV0sICIiICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCByZWFkIGtleSBmcm9tICclcydcbiIsIGFyZ3ZbMV0gKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAhbWJlZHRsc19wa19jYW5fZG8oICZwaywgTUJFRFRMU19QS19SU0EgKSApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBLZXkgaXMgbm90IGFuIFJTQSBrZXlcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nKCBtYmVkdGxzX3BrX3JzYSggcGsgKSwgTUJFRFRMU19SU0FfUEtDU19WMjEsIE1CRURUTFNfTURfU0hBMjU2ICk7CisKKyAgICAvKgorICAgICAqIENvbXB1dGUgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgaW5wdXQgZmlsZSwKKyAgICAgKiB0aGVuIGNhbGN1bGF0ZSB0aGUgUlNBIHNpZ25hdHVyZSBvZiB0aGUgaGFzaC4KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIEdlbmVyYXRpbmcgdGhlIFJTQS9TSEEtMjU2IHNpZ25hdHVyZSIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZF9maWxlKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX01EX1NIQTI1NiApLAorICAgICAgICAgICAgICAgICAgICBhcmd2WzJdLCBoYXNoICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJXNcblxuIiwgYXJndlsyXSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19zaWduKCAmcGssIE1CRURUTFNfTURfU0hBMjU2LCBoYXNoLCAwLCBidWYsICZvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19wa19zaWduIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXcml0ZSB0aGUgc2lnbmF0dXJlIGludG8gPGZpbGVuYW1lPi5zaWcKKyAgICAgKi8KKyAgICBtYmVkdGxzX3NucHJpbnRmKCBmaWxlbmFtZSwgNTEyLCAiJXMuc2lnIiwgYXJndlsyXSApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBmaWxlbmFtZSwgIndiKyIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IGNyZWF0ZSAlc1xuXG4iLCBmaWxlbmFtZSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIGZ3cml0ZSggYnVmLCAxLCBvbGVuLCBmICkgIT0gb2xlbiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuICAhIGZ3cml0ZSBmYWlsZWRcblxuIiApOworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBEb25lIChjcmVhdGVkIFwiJXNcIilcblxuIiwgZmlsZW5hbWUgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1JTQV9DICYmCisgICAgICAgICAgTUJFRFRMU19TSEEyNTZfQyAmJiBNQkVEVExTX1BLX1BBUlNFX0MgJiYgTUJFRFRMU19GU19JTyAmJgorICAgICAgICAgIE1CRURUTFNfQ1RSX0RSQkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ZlcmlmeS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ZlcmlmeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODI3YWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfdmVyaWZ5LmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiAgUlNBL1NIQS0yNTYgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgIWRlZmluZWQoTUJFRFRMU19NRF9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfTURfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfU0hBMjU2X0MgYW5kL29yIE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCByZXQsIGM7CisgICAgc2l6ZV90IGk7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCByc2E7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX01QSV9NQVhfU0laRV07CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJnJzYSwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICByZXQgPSAxOworCisgICAgaWYoIGFyZ2MgIT0gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiByc2FfdmVyaWZ5IDxmaWxlbmFtZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwdWJsaWMga2V5IGZyb20gcnNhX3B1Yi50eHQiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggInJzYV9wdWIudHh0IiwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBDb3VsZCBub3Qgb3BlbiByc2FfcHViLnR4dFxuIiBcCisgICAgICAgICAgICAgICAgIiAgISBQbGVhc2UgcnVuIHJzYV9nZW5rZXkgZmlyc3RcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLk4sIDE2LCBmICkgKSAhPSAwIHx8CisgICAgICAgICggcmV0ID0gbWJlZHRsc19tcGlfcmVhZF9maWxlKCAmcnNhLkUsIDE2LCBmICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbXBpX3JlYWRfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByc2EubGVuID0gKCBtYmVkdGxzX21waV9iaXRsZW4oICZyc2EuTiApICsgNyApID4+IDM7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIC8qCisgICAgICogRXh0cmFjdCB0aGUgUlNBIHNpZ25hdHVyZSBmcm9tIHRoZSB0ZXh0IGZpbGUKKyAgICAgKi8KKyAgICByZXQgPSAxOworICAgIG1iZWR0bHNfc25wcmludGYoIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuc2lnIiwgYXJndlsxXSApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBmaWxlbmFtZSwgInJiIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAhIENvdWxkIG5vdCBvcGVuICVzXG5cbiIsIGZpbGVuYW1lICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSggZnNjYW5mKCBmLCAiJTAyWCIsICZjICkgPiAwICYmCisgICAgICAgICAgIGkgPCAoaW50KSBzaXplb2YoIGJ1ZiApICkKKyAgICAgICAgYnVmW2krK10gPSAodW5zaWduZWQgY2hhcikgYzsKKworICAgIGZjbG9zZSggZiApOworCisgICAgaWYoIGkgIT0gcnNhLmxlbiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAhIEludmFsaWQgUlNBIHNpZ25hdHVyZSBmb3JtYXRcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGlucHV0IGZpbGUgYW5kCisgICAgICogdmVyaWZ5IHRoZSBzaWduYXR1cmUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFZlcmlmeWluZyB0aGUgUlNBL1NIQS0yNTYgc2lnbmF0dXJlIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICksCisgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMV0sIGhhc2ggKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gb3IgcmVhZCAlc1xuXG4iLCBhcmd2WzFdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoICZyc2EsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX01EX1NIQTI1NiwgMjAsIGhhc2gsIGJ1ZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkgcmV0dXJuZWQgLTB4JTB4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gT0sgKHRoZSBzaWduYXR1cmUgaXMgdmFsaWQpXG5cbiIgKTsKKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfU0hBMjU2X0MgJiYKKyAgICAgICAgICBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcGtleS9yc2FfdmVyaWZ5X3Bzcy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ZlcmlmeV9wc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWI3MjBmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3BrZXkvcnNhX3ZlcmlmeV9wc3MuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICBSU0FTU0EtUFNTL1NIQS0yNTYgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfTURfQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgfHwgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BLX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfTURfQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfUlNBX0MgYW5kL29yIE1CRURUTFNfU0hBMjU2X0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfUEtfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCByZXQgPSAxOworICAgIHNpemVfdCBpOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01CRURUTFNfTVBJX01BWF9TSVpFXTsKKyAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgaWYoIGFyZ2MgIT0gMyApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInVzYWdlOiByc2FfdmVyaWZ5X3BzcyA8a2V5X2ZpbGU+IDxmaWxlbmFtZT5cbiIgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworI2VuZGlmCisKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gUmVhZGluZyBwdWJsaWMga2V5IGZyb20gJyVzJyIsIGFyZ3ZbMV0gKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJnBrLCBhcmd2WzFdICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIENvdWxkIG5vdCByZWFkIGtleSBmcm9tICclcydcbiIsIGFyZ3ZbMV0gKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAhbWJlZHRsc19wa19jYW5fZG8oICZwaywgTUJFRFRMU19QS19SU0EgKSApCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBLZXkgaXMgbm90IGFuIFJTQSBrZXlcbiIgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nKCBtYmVkdGxzX3BrX3JzYSggcGsgKSwgTUJFRFRMU19SU0FfUEtDU19WMjEsIE1CRURUTFNfTURfU0hBMjU2ICk7CisKKyAgICAvKgorICAgICAqIEV4dHJhY3QgdGhlIFJTQSBzaWduYXR1cmUgZnJvbSB0aGUgZmlsZQorICAgICAqLworICAgIHJldCA9IDE7CisgICAgbWJlZHRsc19zbnByaW50ZiggZmlsZW5hbWUsIDUxMiwgIiVzLnNpZyIsIGFyZ3ZbMl0gKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggZmlsZW5hbWUsICJyYiIgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgISBDb3VsZCBub3Qgb3BlbiAlc1xuXG4iLCBmaWxlbmFtZSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisKKyAgICBpID0gZnJlYWQoIGJ1ZiwgMSwgTUJFRFRMU19NUElfTUFYX1NJWkUsIGYgKTsKKworICAgIGZjbG9zZSggZiApOworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGlucHV0IGZpbGUgYW5kCisgICAgICogdmVyaWZ5IHRoZSBzaWduYXR1cmUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFZlcmlmeWluZyB0aGUgUlNBL1NIQS0yNTYgc2lnbmF0dXJlIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICksCisgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMl0sIGhhc2ggKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgQ291bGQgbm90IG9wZW4gb3IgcmVhZCAlc1xuXG4iLCBhcmd2WzJdICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3ZlcmlmeSggJnBrLCBNQkVEVExTX01EX1NIQTI1NiwgaGFzaCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgaSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3BrX3ZlcmlmeSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gT0sgKHRoZSBzaWduYXR1cmUgaXMgdmFsaWQpXG5cbiIgKTsKKworICAgIHJldCA9IDA7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19TSEEyNTZfQyAmJgorICAgICAgICAgIE1CRURUTFNfUEtfUEFSU0VfQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDkzM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyIEBACithZGRfZXhlY3V0YWJsZShnZW5fcmFuZG9tX2hhdmVnZSBnZW5fcmFuZG9tX2hhdmVnZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdlbl9yYW5kb21faGF2ZWdlIG1iZWR0bHMpCisKK2FkZF9leGVjdXRhYmxlKGdlbl9yYW5kb21fY3RyX2RyYmcgZ2VuX3JhbmRvbV9jdHJfZHJiZy5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdlbl9yYW5kb21fY3RyX2RyYmcgbWJlZHRscykKKworYWRkX2V4ZWN1dGFibGUoZ2VuX2VudHJvcHkgZ2VuX2VudHJvcHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW5fZW50cm9weSBtYmVkdGxzKQorCitpbnN0YWxsKFRBUkdFVFMgZ2VuX3JhbmRvbV9oYXZlZ2UgZ2VuX3JhbmRvbV9jdHJfZHJiZyBnZW5fZW50cm9weQorICAgICAgICBERVNUSU5BVElPTiAiYmluIgorICAgICAgICBQRVJNSVNTSU9OUyBPV05FUl9SRUFEIE9XTkVSX1dSSVRFIE9XTkVSX0VYRUNVVEUgR1JPVVBfUkVBRCBHUk9VUF9FWEVDVVRFIFdPUkxEX1JFQUQgV09STERfRVhFQ1VURSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX2VudHJvcHkuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX2VudHJvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTJkMzgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9nZW5fZW50cm9weS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qKgorICogIFxicmllZiBVc2UgYW5kIGdlbmVyYXRlIG11bHRpcGxlIGVudHJvcGllcyBjYWxscyBpbnRvIGEgZmlsZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCBpLCBrLCByZXQ7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisKKyAgICBpZiggYXJnYyA8IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJ1c2FnZTogJXMgPG91dHB1dCBmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0gKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoICggZiA9IGZvcGVuKCBhcmd2WzFdLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCB0byBvcGVuICclcycgZm9yIHdyaXRpbmcuXG4iLCBhcmd2WzFdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworCisgICAgZm9yKCBpID0gMCwgayA9IDc2ODsgaSA8IGs7IGkrKyApCisgICAgeworICAgICAgICByZXQgPSBtYmVkdGxzX2VudHJvcHlfZnVuYyggJmVudHJvcHksIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiZmFpbGVkIVxuIik7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgICBmd3JpdGUoIGJ1ZiwgMSwgc2l6ZW9mKCBidWYgKSwgZiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiR2VuZXJhdGluZyAlbGRrYiBvZiBkYXRhIGluIGZpbGUgJyVzJy4uLiAlMDQuMWYiIFwKKyAgICAgICAgICAgICAgICAiJSUgZG9uZVxyIiwgKGxvbmcpKHNpemVvZihidWYpICogayAvIDEwMjQpLCBhcmd2WzFdLCAoMTAwICogKGZsb2F0KSAoaSArIDEpKSAvIGsgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKyAgICB9CisKKyAgICByZXQgPSAwOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZy5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3JhbmRvbS9nZW5fcmFuZG9tX2N0cl9kcmJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2Zjk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZy5jCkBAIC0wLDAgKzEsMTMwIEBACisvKioKKyAqICBcYnJpZWYgVXNlIGFuZCBnZW5lcmF0ZSByYW5kb20gZGF0YSBpbnRvIGEgZmlsZSB2aWEgdGhlIENUUl9EQlJHIGJhc2VkIG9uIEFFUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSAmJiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBcCisgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciBNQkVEVExTX0ZTX0lPIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgaW50IGksIGssIHJldDsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBpZiggYXJnYyA8IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJ1c2FnZTogJXMgPG91dHB1dCBmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0gKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoICggZiA9IGZvcGVuKCBhcmd2WzFdLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCB0byBvcGVuICclcycgZm9yIHdyaXRpbmcuXG4iLCBhcmd2WzFdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmZW50cm9weSApOworICAgIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksIChjb25zdCB1bnNpZ25lZCBjaGFyICopICJSQU5ET01fR0VOIiwgMTAgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJmYWlsZWQgaW4gbWJlZHRsc19jdHJfZHJiZ19zZWVkOiAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3RyX2RyYmcsIE1CRURUTFNfQ1RSX0RSQkdfUFJfT0ZGICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgcmV0ID0gbWJlZHRsc19jdHJfZHJiZ191cGRhdGVfc2VlZF9maWxlKCAmY3RyX2RyYmcsICJzZWVkZmlsZSIgKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZhaWxlZCB0byBvcGVuIHNlZWRmaWxlLiBHZW5lcmF0aW5nIG9uZS5cbiIgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jdHJfZHJiZ193cml0ZV9zZWVkX2ZpbGUoICZjdHJfZHJiZywgInNlZWRmaWxlIiApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCBpbiBtYmVkdGxzX2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZTogJWRcbiIsIHJldCApOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkIGluIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlX3NlZWRfZmlsZTogJWRcbiIsIHJldCApOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorI2VuZGlmCisKKyAgICBmb3IoIGkgPSAwLCBrID0gNzY4OyBpIDwgazsgaSsrICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3RyX2RyYmcsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiZmFpbGVkIVxuIik7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgICBmd3JpdGUoIGJ1ZiwgMSwgc2l6ZW9mKCBidWYgKSwgZiApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiR2VuZXJhdGluZyAlbGRrYiBvZiBkYXRhIGluIGZpbGUgJyVzJy4uLiAlMDQuMWYiIFwKKyAgICAgICAgICAgICAgICAiJSUgZG9uZVxyIiwgKGxvbmcpKHNpemVvZihidWYpICogayAvIDEwMjQpLCBhcmd2WzFdLCAoMTAwICogKGZsb2F0KSAoaSArIDEpKSAvIGsgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKyAgICB9CisKKyAgICByZXQgPSAwOworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOworCisgICAgZmNsb3NlKCBmICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19DVFJfRFJCR19DICYmIE1CRURUTFNfRU5UUk9QWV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzMTQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9yYW5kb20vZ2VuX3JhbmRvbV9oYXZlZ2UuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoqCisgKiAgXGJyaWVmIEdlbmVyYXRlIHJhbmRvbSBkYXRhIGludG8gYSBmaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9oYXZlZ2UuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0hBVkVHRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0hBVkVHRV9DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQoraW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIEZJTEUgKmY7CisgICAgdGltZV90IHQ7CisgICAgaW50IGksIGssIHJldCA9IDA7CisgICAgbWJlZHRsc19oYXZlZ2Vfc3RhdGUgaHM7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisKKyAgICBpZiggYXJnYyA8IDIgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJ1c2FnZTogJXMgPG91dHB1dCBmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0gKTsKKyAgICAgICAgcmV0dXJuKCAxICk7CisgICAgfQorCisgICAgaWYoICggZiA9IGZvcGVuKCBhcmd2WzFdLCAid2IrIiApICkgPT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZCB0byBvcGVuICclcycgZm9yIHdyaXRpbmcuXG4iLCBhcmd2WzFdICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIG1iZWR0bHNfaGF2ZWdlX2luaXQoICZocyApOworCisgICAgdCA9IHRpbWUoIE5VTEwgKTsKKworICAgIGZvciggaSA9IDAsIGsgPSA3Njg7IGkgPCBrOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfaGF2ZWdlX3JhbmRvbSggJmhzLCBidWYsIHNpemVvZiggYnVmICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJGYWlsZWQgdG8gZ2V0IHJhbmRvbSBmcm9tIHNvdXJjZS5cbiIgKTsKKworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGZ3cml0ZSggYnVmLCBzaXplb2YoIGJ1ZiApLCAxLCBmICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJHZW5lcmF0aW5nICVsZGtiIG9mIGRhdGEgaW4gZmlsZSAnJXMnLi4uICUwNC4xZiIgXAorICAgICAgICAgICAgICAgICIlJSBkb25lXHIiLCAobG9uZykoc2l6ZW9mKGJ1ZikgKiBrIC8gMTAyNCksIGFyZ3ZbMV0sICgxMDAgKiAoZmxvYXQpIChpICsgMSkpIC8gayApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworICAgIH0KKworICAgIGlmKCB0ID09IHRpbWUoIE5VTEwgKSApCisgICAgICAgIHQtLTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCIgXG4gIik7CisKK2V4aXQ6CisgICAgbWJlZHRsc19oYXZlZ2VfZnJlZSggJmhzICk7CisgICAgZmNsb3NlKCBmICk7CisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0hBVkVHRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTY1NjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDYyIEBACitzZXQoVEhSRUFEU19VU0VfUFRIUkVBRFNfV0lOMzIgdHJ1ZSkKK2ZpbmRfcGFja2FnZShUaHJlYWRzKQorCitzZXQobGlicworICAgIG1iZWR0bHMKKykKKworc2V0KHRhcmdldHMKKyAgICBkdGxzX2NsaWVudAorICAgIGR0bHNfc2VydmVyCisgICAgc3NsX2NsaWVudDEKKyAgICBzc2xfY2xpZW50MgorICAgIHNzbF9zZXJ2ZXIKKyAgICBzc2xfZm9ya19zZXJ2ZXIKKyAgICBzc2xfbWFpbF9jbGllbnQKKyAgICBtaW5pX2NsaWVudAorKQorCitpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorICAgIHNldChsaWJzICR7bGlic30gcGtjczExLWhlbHBlcikKK2VuZGlmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCisKK2lmKEVOQUJMRV9aTElCX1NVUFBPUlQpCisgICAgc2V0KGxpYnMgJHtsaWJzfSAke1pMSUJfTElCUkFSSUVTfSkKK2VuZGlmKEVOQUJMRV9aTElCX1NVUFBPUlQpCisKK2FkZF9leGVjdXRhYmxlKGR0bHNfY2xpZW50IGR0bHNfY2xpZW50LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZHRsc19jbGllbnQgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoZHRsc19zZXJ2ZXIgZHRsc19zZXJ2ZXIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhkdGxzX3NlcnZlciAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShzc2xfY2xpZW50MSBzc2xfY2xpZW50MS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNzbF9jbGllbnQxICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKHNzbF9jbGllbnQyIHNzbF9jbGllbnQyLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoc3NsX2NsaWVudDIgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoc3NsX3NlcnZlciBzc2xfc2VydmVyLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoc3NsX3NlcnZlciAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShzc2xfc2VydmVyMiBzc2xfc2VydmVyMi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNzbF9zZXJ2ZXIyICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKHNzbF9mb3JrX3NlcnZlciBzc2xfZm9ya19zZXJ2ZXIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzc2xfZm9ya19zZXJ2ZXIgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoc3NsX21haWxfY2xpZW50IHNzbF9tYWlsX2NsaWVudC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNzbF9tYWlsX2NsaWVudCAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShtaW5pX2NsaWVudCBtaW5pX2NsaWVudC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1pbmlfY2xpZW50ICR7bGlic30pCisKK2lmKFRIUkVBRFNfRk9VTkQpCisgICAgYWRkX2V4ZWN1dGFibGUoc3NsX3B0aHJlYWRfc2VydmVyIHNzbF9wdGhyZWFkX3NlcnZlci5jKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhzc2xfcHRocmVhZF9zZXJ2ZXIgJHtsaWJzfSAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQorICAgIHNldCh0YXJnZXRzICR7dGFyZ2V0c30gc3NsX3B0aHJlYWRfc2VydmVyKQorZW5kaWYoVEhSRUFEU19GT1VORCkKKworaW5zdGFsbChUQVJHRVRTICR7dGFyZ2V0c30KKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL2R0bHNfY2xpZW50LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL2R0bHNfY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyYTNmYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvZHRsc19jbGllbnQuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqICBTaW1wbGUgRFRMUyBjbGllbnQgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpIHx8ICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSAgfHwgIWRlZmluZWQoTUJFRFRMU19USU1JTkdfQykgfHwgICAgICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX1NTTF9DTElfQyBhbmQvb3IgTUJFRFRMU19TU0xfUFJPVE9fRFRMUyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfVElNSU5HX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19DRVJUU19DIGFuZC9vciBNQkVEVExTX1BFTV9QQVJTRV9DIG5vdCBkZWZpbmVkLlxuIiApOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGVidWcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNkZWZpbmUgU0VSVkVSX1BPUlQgIjQ0MzMiCisjZGVmaW5lIFNFUlZFUl9OQU1FICJsb2NhbGhvc3QiCisjZGVmaW5lIFNFUlZFUl9BRERSICIxMjcuMC4wLjEiIC8qIGZvcmNlcyBJUHY0ICovCisjZGVmaW5lIE1FU1NBR0UgICAgICJFY2hvIHRoaXMiCisKKyNkZWZpbmUgUkVBRF9USU1FT1VUX01TIDEwMDAKKyNkZWZpbmUgTUFYX1JFVFJZICAgICAgIDUKKworI2RlZmluZSBERUJVR19MRVZFTCAwCisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgICgodm9pZCkgbGV2ZWwpOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiAlcyIsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQsIGxlbjsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IHNlcnZlcl9mZDsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImR0bHNfY2xpZW50IjsKKyAgICBpbnQgcmV0cnlfbGVmdCA9IE1BWF9SRVRSWTsKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2FjZXJ0OworICAgIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgdGltZXI7CisKKyAgICAoKHZvaWQpIGFyZ2MpOworICAgICgodm9pZCkgYXJndik7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICBtYmVkdGxzX2RlYnVnX3NldF90aHJlc2hvbGQoIERFQlVHX0xFVkVMICk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogMC4gSW5pdGlhbGl6ZSB0aGUgUk5HIGFuZCB0aGUgc2Vzc2lvbiBkYXRhCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAwLiBMb2FkIGNlcnRpZmljYXRlcworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIENBIHJvb3QgY2VydGlmaWNhdGUgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2FjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzX3BlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuICk7CisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2sgKCVkIHNraXBwZWQpXG4iLCByZXQgKTsKKworICAgIC8qCisgICAgICogMS4gU3RhcnQgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDb25uZWN0aW5nIHRvIHVkcC8lcy8lcy4uLiIsIFNFUlZFUl9OQU1FLCBTRVJWRVJfUE9SVCApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9jb25uZWN0KCAmc2VydmVyX2ZkLCBTRVJWRVJfQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSX1BPUlQsIE1CRURUTFNfTkVUX1BST1RPX1VEUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9jb25uZWN0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMi4gU2V0dXAgc3R1ZmYKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZXR0aW5nIHVwIHRoZSBEVExTIHN0cnVjdHVyZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19DTElFTlQsCisgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNLAorICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qIE9QVElPTkFMIGlzIHVzdWFsbHkgYSBiYWQgY2hvaWNlIGZvciBzZWN1cml0eSwgYnV0IG1ha2VzIGludGVyb3AgZWFzaWVyCisgICAgICogaW4gdGhpcyBzaW1wbGlmaWVkIGV4YW1wbGUsIGluIHdoaWNoIHRoZSBjYSBjaGFpbiBpcyBoYXJkY29kZWQuCisgICAgICogUHJvZHVjdGlvbiBjb2RlIHNob3VsZCBzZXQgYSBwcm9wZXIgY2EgY2hhaW4gYW5kIHVzZSBSRVFVSVJFRC4gKi8KKyAgICBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCAmY29uZiwgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsICZjYWNlcnQsIE5VTEwgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JuZyggJmNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2RiZyggJmNvbmYsIG15X2RlYnVnLCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXR1cCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSggJnNzbCwgU0VSVkVSX05BTUUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJnNlcnZlcl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9zZW5kLCBtYmVkdGxzX25ldF9yZWN2LCBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQgKTsKKworICAgIG1iZWR0bHNfc3NsX3NldF90aW1lcl9jYiggJnNzbCwgJnRpbWVyLCBtYmVkdGxzX3RpbWluZ19zZXRfZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGltaW5nX2dldF9kZWxheSApOworCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNC4gSGFuZHNoYWtlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNS4gVmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnlpbmcgcGVlciBYLjUwOSBjZXJ0aWZpY2F0ZS4uLiIgKTsKKworICAgIC8qIEluIHJlYWwgbGlmZSwgd2Ugd291bGQgaGF2ZSB1c2VkIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRCBzbyB0aGF0IHRoZQorICAgICAqIGhhbmRzaGFrZSB3b3VsZCBub3Qgc3VjY2VlZCBpZiB0aGUgcGVlcidzIGNlcnQgaXMgYmFkLiAgRXZlbiBpZiB3ZSB1c2VkCisgICAgICogTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMLCB3ZSB3b3VsZCBiYWlsIG91dCBoZXJlIGlmIHJldCAhPSAwICovCisgICAgaWYoICggZmxhZ3MgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIHZyZnlfYnVmWzUxMl07CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4iICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNi4gV3JpdGUgdGhlIGVjaG8gcmVxdWVzdAorICAgICAqLworc2VuZF9yZXF1ZXN0OgorICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIHRvIHNlcnZlcjoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNpemVvZiggTUVTU0FHRSApIC0gMTsKKworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCAodW5zaWduZWQgY2hhciAqKSBNRVNTQUdFLCBsZW4gKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGxlbiA9IHJldDsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyB3cml0dGVuXG5cbiVzXG5cbiIsIGxlbiwgTUVTU0FHRSApOworCisgICAgLyoKKyAgICAgKiA3LiBSZWFkIHRoZSBlY2hvIHJlc3BvbnNlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIDwgUmVhZCBmcm9tIHNlcnZlcjoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNpemVvZiggYnVmICkgLSAxOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgIGlmKCByZXQgPD0gMCApCisgICAgeworICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgdGltZW91dFxuXG4iICk7CisgICAgICAgICAgICAgICAgaWYoIHJldHJ5X2xlZnQtLSA+IDAgKQorICAgICAgICAgICAgICAgICAgICBnb3RvIHNlbmRfcmVxdWVzdDsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZOgorICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5XG4iICk7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICBnb3RvIGNsb3NlX25vdGlmeTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW4gPSByZXQ7CisgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgcmVhZFxuXG4lc1xuXG4iLCBsZW4sIGJ1ZiApOworCisgICAgLyoKKyAgICAgKiA4LiBEb25lLCBjbGVhbmx5IGNsb3NlIHRoZSBjb25uZWN0aW9uCisgICAgICovCitjbG9zZV9ub3RpZnk6CisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbi4uLiIgKTsKKworICAgIC8qIE5vIGVycm9yIGNoZWNraW5nLCB0aGUgY29ubmVjdGlvbiBtaWdodCBiZSBjbG9zZWQgYWxyZWFkeSAqLworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKyAgICByZXQgPSAwOworCisgICAgbWJlZHRsc19wcmludGYoICIgZG9uZVxuIiApOworCisgICAgLyoKKyAgICAgKiA5LiBGaW5hbCBjbGVhbi11cHMgYW5kIGV4aXQKKyAgICAgKi8KK2V4aXQ6CisKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkxhc3QgZXJyb3Igd2FzOiAlZCAtICVzXG5cbiIsIHJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmc2VydmVyX2ZkICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgLyogU2hlbGwgY2FuIG5vdCBoYW5kbGUgbGFyZ2UgZXhpdCBudW1iZXJzIC0+IDEgZm9yIGVycm9ycyAqLworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gMTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0xJX0MgJiYgTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAmJiBNQkVEVExTX05FVF9DICYmCisgICAgICAgICAgTUJFRFRMRF9USU1JTkdfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgJiYgTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX0NFUlRTX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1BFTV9QQVJTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL2R0bHNfc2VydmVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL2R0bHNfc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwZGRhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvZHRsc19zZXJ2ZXIuYwpAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAqICBTaW1wbGUgRFRMUyBzZXJ2ZXIgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1NTTF9TUlZfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19QRU1fUEFSU0VfQykgfHwgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKworaW50IG1haW4oIHZvaWQgKQoreworICAgIHByaW50ZiggIk1CRURUTFNfU1NMX1NSVl9DIGFuZC9vciBNQkVEVExTX1NTTF9QUk9UT19EVExTIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19TU0xfQ09PS0lFX0MgYW5kL29yIE1CRURUTFNfTkVUX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19DRVJUU19DIGFuZC9vciBNQkVEVExTX1BFTV9QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19USU1JTkdfQyBub3QgZGVmaW5lZC5cbiIgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2xfY29va2llLmgiCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jYWNoZS5oIgorI2VuZGlmCisKKyNkZWZpbmUgUkVBRF9USU1FT1VUX01TIDEwMDAwICAgLyogNSBzZWNvbmRzICovCisjZGVmaW5lIERFQlVHX0xFVkVMIDAKKworc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciApCit7CisgICAgKCh2b2lkKSBsZXZlbCk7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6ICVzIiwgZmlsZSwgbGluZSwgc3RyICk7CisgICAgZmZsdXNoKCAgKEZJTEUgKikgY3R4ICApOworfQorCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldCwgbGVuOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgbGlzdGVuX2ZkLCBjbGllbnRfZmQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJkdGxzX3NlcnZlciI7CisgICAgdW5zaWduZWQgY2hhciBjbGllbnRfaXBbMTZdID0geyAwIH07CisgICAgc2l6ZV90IGNsaWlwX2xlbjsKKyAgICBtYmVkdGxzX3NzbF9jb29raWVfY3R4IGNvb2tpZV9jdHg7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IHNydmNlcnQ7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXk7CisgICAgbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dCB0aW1lcjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dCBjYWNoZTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfaW5pdCggJmxpc3Rlbl9mZCApOworICAgIG1iZWR0bHNfbmV0X2luaXQoICZjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWJlZHRsc19zc2xfY29va2llX2luaXQoICZjb29raWVfY3R4ICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2luaXQoICZjYWNoZSApOworI2VuZGlmCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmc3J2Y2VydCApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrZXkgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisgICAgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKCBERUJVR19MRVZFTCApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIDEuIExvYWQgdGhlIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBSU0Ega2V5CisgICAgICovCisgICAgcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgc2VydmVyIGNlcnQuIGFuZCBrZXkuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIC8qCisgICAgICogVGhpcyBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNlcyBlbWJlZGRlZCB0ZXN0IGNlcnRpZmljYXRlcy4KKyAgICAgKiBJbnN0ZWFkLCB5b3UgbWF5IHdhbnQgdG8gdXNlIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgpIHRvIHJlYWQgdGhlCisgICAgICogc2VydmVyIGFuZCBDQSBjZXJ0aWZpY2F0ZXMsIGFzIHdlbGwgYXMgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCkuCisgICAgICovCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNfcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2FzX3BlbV9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gIG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCAmcGtleSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9rZXlfbGVuLCBOVUxMLCAwICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBwcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMi4gU2V0dXAgdGhlICJsaXN0ZW5pbmciIFVEUCBzb2NrZXQKKyAgICAgKi8KKyAgICBwcmludGYoICIgIC4gQmluZCBvbiB1ZHAvKi80NDMzIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYmluZCggJmxpc3Rlbl9mZCwgTlVMTCwgIjQ0MzMiLCBNQkVEVExTX05FVF9QUk9UT19VRFAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2JpbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBwcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMy4gU2VlZCB0aGUgUk5HCisgICAgICovCisgICAgcHJpbnRmKCAiICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBwcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNC4gU2V0dXAgc3R1ZmYKKyAgICAgKi8KKyAgICBwcmludGYoICIgIC4gU2V0dGluZyB1cCB0aGUgRFRMUyBkYXRhLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19TRVJWRVIsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX2NhY2hlKCAmY29uZiwgJmNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9nZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX3NldCApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgc3J2Y2VydC5uZXh0LCBOVUxMICk7CisgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCAmY29uZiwgJnNydmNlcnQsICZwa2V5ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29va2llX3NldHVwKCAmY29va2llX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb29raWVfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX2R0bHNfY29va2llcyggJmNvbmYsIG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZSwgbWJlZHRsc19zc2xfY29va2llX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb29raWVfY3R4ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCAmc3NsLCAmdGltZXIsIG1iZWR0bHNfdGltaW5nX3NldF9kZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190aW1pbmdfZ2V0X2RlbGF5ICk7CisKKyAgICBwcmludGYoICIgb2tcbiIgKTsKKworcmVzZXQ6CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgcHJpbnRmKCJMYXN0IGVycm9yIHdhczogJWQgLSAlc1xuXG4iLCByZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCggJnNzbCApOworCisgICAgLyoKKyAgICAgKiAzLiBXYWl0IHVudGlsIGEgY2xpZW50IGNvbm5lY3RzCisgICAgICovCisgICAgcHJpbnRmKCAiICAuIFdhaXRpbmcgZm9yIGEgcmVtb3RlIGNvbm5lY3Rpb24gLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9hY2NlcHQoICZsaXN0ZW5fZmQsICZjbGllbnRfZmQsCisgICAgICAgICAgICAgICAgICAgIGNsaWVudF9pcCwgc2l6ZW9mKCBjbGllbnRfaXAgKSwgJmNsaWlwX2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBwcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfYWNjZXB0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogRm9yIEhlbGxvVmVyaWZ5UmVxdWVzdCBjb29raWVzICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoICZzc2wsCisgICAgICAgICAgICAgICAgICAgIGNsaWVudF9pcCwgY2xpaXBfbGVuICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHByaW50ZiggIiBmYWlsZWRcbiAgISAiCisgICAgICAgICAgICAgICAgIm1iZWR0bHNfc3NsX3NldF9jbGllbnRfdHJhbnNwb3J0X2lkKCkgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJmNsaWVudF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9zZW5kLCBtYmVkdGxzX25ldF9yZWN2LCBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQgKTsKKworICAgIHByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiA1LiBIYW5kc2hha2UKKyAgICAgKi8KKyAgICBwcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgRFRMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCApCisgICAgeworICAgICAgICBwcmludGYoICIgaGVsbG8gdmVyaWZpY2F0aW9uIHJlcXVlc3RlZFxuIiApOworICAgICAgICByZXQgPSAwOworICAgICAgICBnb3RvIHJlc2V0OworICAgIH0KKyAgICBlbHNlIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBwcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byByZXNldDsKKyAgICB9CisKKyAgICBwcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNi4gUmVhZCB0aGUgZWNobyBSZXF1ZXN0CisgICAgICovCisgICAgcHJpbnRmKCAiICA8IFJlYWQgZnJvbSBjbGllbnQ6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICBpZiggcmV0IDw9IDAgKQorICAgIHsKKyAgICAgICAgc3dpdGNoKCByZXQgKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUOgorICAgICAgICAgICAgICAgIHByaW50ZiggIiB0aW1lb3V0XG5cbiIgKTsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICBwcmludGYoICIgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGdyYWNlZnVsbHlcbiIgKTsKKyAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgIGdvdG8gY2xvc2Vfbm90aWZ5OworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHByaW50ZiggIiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICB9CisgICAgfQorCisgICAgbGVuID0gcmV0OworICAgIHByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzXG5cbiIsIGxlbiwgYnVmICk7CisKKyAgICAvKgorICAgICAqIDcuIFdyaXRlIHRoZSAyMDAgUmVzcG9uc2UKKyAgICAgKi8KKyAgICBwcmludGYoICIgID4gV3JpdGUgdG8gY2xpZW50OiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbGVuID0gcmV0OworICAgIHByaW50ZiggIiAlZCBieXRlcyB3cml0dGVuXG5cbiVzXG5cbiIsIGxlbiwgYnVmICk7CisKKyAgICAvKgorICAgICAqIDguIERvbmUsIGNsZWFubHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KK2Nsb3NlX25vdGlmeToKKyAgICBwcmludGYoICIgIC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbi4uLiIgKTsKKworICAgIC8qIE5vIGVycm9yIGNoZWNraW5nLCB0aGUgY29ubmVjdGlvbiBtaWdodCBiZSBjbG9zZWQgYWxyZWFkeSAqLworICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApOworICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKyAgICByZXQgPSAwOworCisgICAgcHJpbnRmKCAiIGRvbmVcbiIgKTsKKworICAgIGdvdG8gcmVzZXQ7CisKKyAgICAvKgorICAgICAqIEZpbmFsIGNsZWFuLXVwcyBhbmQgZXhpdAorICAgICAqLworZXhpdDoKKworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIHByaW50ZiggIkxhc3QgZXJyb3Igd2FzOiAlZCAtICVzXG5cbiIsIHJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19uZXRfZnJlZSggJmxpc3Rlbl9mZCApOworCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmc3J2Y2VydCApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrZXkgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisgICAgbWJlZHRsc19zc2xfY29va2llX2ZyZWUoICZjb29raWVfY3R4ICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2ZyZWUoICZjYWNoZSApOworI2VuZGlmCisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICAvKiBTaGVsbCBjYW4gbm90IGhhbmRsZSBsYXJnZSBleGl0IG51bWJlcnMgLT4gMSBmb3IgZXJyb3JzICovCisgICAgaWYoIHJldCA8IDAgKQorICAgICAgICByZXQgPSAxOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9TUlZfQyAmJiBNQkVEVExTX1NTTF9QUk9UT19EVExTICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfQ09PS0lFX0MgJiYgTUJFRFRMU19ORVRfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfQ1RSX0RSQkdfQyAmJiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgJiYgTUJFRFRMU19SU0FfQworICAgICAgICAgICYmIE1CRURUTFNfQ0VSVFNfQyAmJiBNQkVEVExTX1BFTV9QQVJTRV9DICYmIE1CRURUTFNfVElNSU5HX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvbWluaV9jbGllbnQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvbWluaV9jbGllbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTA0NTVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9taW5pX2NsaWVudC5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogIE1pbmltYWwgU1NMIGNsaWVudCwgdXNlZCBmb3IgbWVtb3J5IG1lYXN1cmVtZW50cy4KKyAqICAobWVhbnQgdG8gYmUgdXNlZCB3aXRoIGNvbmZpZy1zdWl0ZS1iLmggb3IgY29uZmlnLWNjbS1wc2stdGxzMV8yLmgpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKy8qCisgKiBXZSdyZSBjcmVhdGluZyBhbmQgY29ubmVjdGluZyB0aGUgc29ja2V0ICJtYW51YWxseSIgcmF0aGVyIHRoYW4gdXNpbmcgdGhlCisgKiBORVQgbW9kdWxlLCBpbiBvcmRlciB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgZ2V0YWRkcmluZm8oKSB3aGljaCB0ZW5kcyB0bworICogZG9taW5hdGUgbWVtb3J5IHVzYWdlIGluIHNtYWxsIGNvbmZpZ3VyYXRpb25zLiBGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwKKyAqIG9ubHkgYSBVbml4IHZlcnNpb24gaXMgaW1wbGVtZW50ZWQuCisgKgorICogV2FybmluZzogd2UgYXJlIGJyZWFraW5nIHNvbWUgb2YgdGhlIGFidHJhY3Rpb25zIGZyb20gdGhlIE5FVCBsYXllciBoZXJlLgorICogVGhpcyBpcyBub3QgYSBnb29kIGV4YW1wbGUgZm9yIGdlbmVyYWwgdXNlLiBUaGlzIHByb2dyYW1zIGhhcyB0aGUgc3BlY2lmaWMKKyAqIGdvYWwgb2YgbWluaW1pemluZyB1c2Ugb2YgdGhlIGxpYmMgZnVuY3Rpb25zIG9uIGZ1bGwtYmxvd24gT1Nlcy4KKyAqLworI2lmIGRlZmluZWQodW5peCkgfHwgZGVmaW5lZChfX3VuaXhfXykgfHwgZGVmaW5lZChfX3VuaXgpIHx8IGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBVTklYCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9DTElfQykgfHwgXAorICAgICFkZWZpbmVkKFVOSVgpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmIHByaW50ZgorI2VuZGlmCisKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZiggIk1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX1NTTF9DTElfQyBhbmQvb3IgVU5JWCAiCisgICAgICAgICAgICAibm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKy8qCisgKiBIYXJkY29kZWQgdmFsdWVzIGZvciBzZXJ2ZXIgaG9zdCBhbmQgcG9ydAorICovCisjZGVmaW5lIFBPUlRfQkUgMHgxMTUxICAgICAgLyogNDQzMyAqLworI2RlZmluZSBQT1JUX0xFIDB4NTExMQorI2RlZmluZSBBRERSX0JFIDB4N2YwMDAwMDEgIC8qIDEyNy4wLjAuMSAqLworI2RlZmluZSBBRERSX0xFIDB4MDEwMDAwN2YKKyNkZWZpbmUgSE9TVE5BTUUgImxvY2FsaG9zdCIgLyogZm9yIGNlcnQgdmVyaWZpY2F0aW9uIGlmIGVuYWJsZWQgKi8KKworI2RlZmluZSBHRVRfUkVRVUVTVCAiR0VUIC8gSFRUUC8xLjBcclxuXHJcbiIKKworY29uc3QgY2hhciAqcGVycyA9ICJtaW5pX2NsaWVudCI7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKK2NvbnN0IHVuc2lnbmVkIGNoYXIgcHNrW10gPSB7CisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmCit9OworY29uc3QgY2hhciBwc2tfaWRbXSA9ICJDbGllbnRfaWRlbnRpdHkiOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKy8qIFRoaXMgaXMgdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQsIGEgQ0EgdXNpbmcgRUMgc2VjcDM4NHIxICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGNhX2NlcnRbXSA9IHsKKyAgICAweDMwLCAweDgyLCAweDAyLCAweDUyLCAweDMwLCAweDgyLCAweDAxLCAweGQ3LCAweGEwLCAweDAzLCAweDAyLCAweDAxLAorICAgIDB4MDIsIDB4MDIsIDB4MDksIDB4MDAsIDB4YzEsIDB4NDMsIDB4ZTIsIDB4N2UsIDB4NjIsIDB4NDMsIDB4Y2MsIDB4ZTgsCisgICAgMHgzMCwgMHgwYSwgMHgwNiwgMHgwOCwgMHgyYSwgMHg4NiwgMHg0OCwgMHhjZSwgMHgzZCwgMHgwNCwgMHgwMywgMHgwMiwKKyAgICAweDMwLCAweDNlLCAweDMxLCAweDBiLCAweDMwLCAweDA5LCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLAorICAgIDB4MDIsIDB4NGUsIDB4NGMsIDB4MzEsIDB4MTEsIDB4MzAsIDB4MGYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MGEsCisgICAgMHgxMywgMHgwOCwgMHg1MCwgMHg2ZiwgMHg2YywgMHg2MSwgMHg3MiwgMHg1MywgMHg1MywgMHg0YywgMHgzMSwgMHgxYywKKyAgICAweDMwLCAweDFhLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDAzLCAweDEzLCAweDEzLCAweDUwLCAweDZmLCAweDZjLAorICAgIDB4NjEsIDB4NzIsIDB4NzMsIDB4NzMsIDB4NmMsIDB4MjAsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NDUsCisgICAgMHg0MywgMHgyMCwgMHg0MywgMHg0MSwgMHgzMCwgMHgxZSwgMHgxNywgMHgwZCwgMHgzMSwgMHgzMywgMHgzMCwgMHgzOSwKKyAgICAweDMyLCAweDM0LCAweDMxLCAweDM1LCAweDM0LCAweDM5LCAweDM0LCAweDM4LCAweDVhLCAweDE3LCAweDBkLCAweDMyLAorICAgIDB4MzMsIDB4MzAsIDB4MzksIDB4MzIsIDB4MzIsIDB4MzEsIDB4MzUsIDB4MzQsIDB4MzksIDB4MzQsIDB4MzgsIDB4NWEsCisgICAgMHgzMCwgMHgzZSwgMHgzMSwgMHgwYiwgMHgzMCwgMHgwOSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwNiwgMHgxMywKKyAgICAweDAyLCAweDRlLCAweDRjLCAweDMxLCAweDExLCAweDMwLCAweDBmLCAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDBhLAorICAgIDB4MTMsIDB4MDgsIDB4NTAsIDB4NmYsIDB4NmMsIDB4NjEsIDB4NzIsIDB4NTMsIDB4NTMsIDB4NGMsIDB4MzEsIDB4MWMsCisgICAgMHgzMCwgMHgxYSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwgMHgwMywgMHgxMywgMHgxMywgMHg1MCwgMHg2ZiwgMHg2YywKKyAgICAweDYxLCAweDcyLCAweDczLCAweDczLCAweDZjLCAweDIwLCAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDQ1LAorICAgIDB4NDMsIDB4MjAsIDB4NDMsIDB4NDEsIDB4MzAsIDB4NzYsIDB4MzAsIDB4MTAsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsCisgICAgMHg0OCwgMHhjZSwgMHgzZCwgMHgwMiwgMHgwMSwgMHgwNiwgMHgwNSwgMHgyYiwgMHg4MSwgMHgwNCwgMHgwMCwgMHgyMiwKKyAgICAweDAzLCAweDYyLCAweDAwLCAweDA0LCAweGMzLCAweGRhLCAweDJiLCAweDM0LCAweDQxLCAweDM3LCAweDU4LCAweDJmLAorICAgIDB4ODcsIDB4NTYsIDB4ZmUsIDB4ZmMsIDB4ODksIDB4YmEsIDB4MjksIDB4NDMsIDB4NGIsIDB4NGUsIDB4ZTAsIDB4NmUsCisgICAgMHhjMywgMHgwZSwgMHg1NywgMHg1MywgMHgzMywgMHgzOSwgMHg1OCwgMHhkNCwgMHg1MiwgMHhiNCwgMHg5MSwgMHg5NSwKKyAgICAweDM5LCAweDBiLCAweDIzLCAweGRmLCAweDVmLCAweDE3LCAweDI0LCAweDYyLCAweDQ4LCAweGZjLCAweDFhLCAweDk1LAorICAgIDB4MjksIDB4Y2UsIDB4MmMsIDB4MmQsIDB4ODcsIDB4YzIsIDB4ODgsIDB4NTIsIDB4ODAsIDB4YWYsIDB4ZDYsIDB4NmEsCisgICAgMHhhYiwgMHgyMSwgMHhkZCwgMHhiOCwgMHhkMywgMHgxYywgMHg2ZSwgMHg1OCwgMHhiOCwgMHhjYSwgMHhlOCwgMHhiMiwKKyAgICAweDY5LCAweDhlLCAweGYzLCAweDQxLCAweGFkLCAweDI5LCAweGMzLCAweGI0LCAweDVmLCAweDc1LCAweGE3LCAweDQ3LAorICAgIDB4NmYsIDB4ZDUsIDB4MTksIDB4MjksIDB4NTUsIDB4NjksIDB4OWEsIDB4NTMsIDB4M2IsIDB4MjAsIDB4YjQsIDB4NjYsCisgICAgMHgxNiwgMHg2MCwgMHgzMywgMHgxZSwgMHhhMywgMHg4MSwgMHhhMCwgMHgzMCwgMHg4MSwgMHg5ZCwgMHgzMCwgMHgxZCwKKyAgICAweDA2LCAweDAzLCAweDU1LCAweDFkLCAweDBlLCAweDA0LCAweDE2LCAweDA0LCAweDE0LCAweDlkLCAweDZkLCAweDIwLAorICAgIDB4MjQsIDB4NDksIDB4MDEsIDB4M2YsIDB4MmIsIDB4Y2IsIDB4NzgsIDB4YjUsIDB4MTksIDB4YmMsIDB4N2UsIDB4MjQsCisgICAgMHhjOSwgMHhkYiwgMHhmYiwgMHgzNiwgMHg3YywgMHgzMCwgMHg2ZSwgMHgwNiwgMHgwMywgMHg1NSwgMHgxZCwgMHgyMywKKyAgICAweDA0LCAweDY3LCAweDMwLCAweDY1LCAweDgwLCAweDE0LCAweDlkLCAweDZkLCAweDIwLCAweDI0LCAweDQ5LCAweDAxLAorICAgIDB4M2YsIDB4MmIsIDB4Y2IsIDB4NzgsIDB4YjUsIDB4MTksIDB4YmMsIDB4N2UsIDB4MjQsIDB4YzksIDB4ZGIsIDB4ZmIsCisgICAgMHgzNiwgMHg3YywgMHhhMSwgMHg0MiwgMHhhNCwgMHg0MCwgMHgzMCwgMHgzZSwgMHgzMSwgMHgwYiwgMHgzMCwgMHgwOSwKKyAgICAweDA2LCAweDAzLCAweDU1LCAweDA0LCAweDA2LCAweDEzLCAweDAyLCAweDRlLCAweDRjLCAweDMxLCAweDExLCAweDMwLAorICAgIDB4MGYsIDB4MDYsIDB4MDMsIDB4NTUsIDB4MDQsIDB4MGEsIDB4MTMsIDB4MDgsIDB4NTAsIDB4NmYsIDB4NmMsIDB4NjEsCisgICAgMHg3MiwgMHg1MywgMHg1MywgMHg0YywgMHgzMSwgMHgxYywgMHgzMCwgMHgxYSwgMHgwNiwgMHgwMywgMHg1NSwgMHgwNCwKKyAgICAweDAzLCAweDEzLCAweDEzLCAweDUwLCAweDZmLCAweDZjLCAweDYxLCAweDcyLCAweDczLCAweDczLCAweDZjLCAweDIwLAorICAgIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NDUsIDB4NDMsIDB4MjAsIDB4NDMsIDB4NDEsIDB4ODIsIDB4MDksCisgICAgMHgwMCwgMHhjMSwgMHg0MywgMHhlMiwgMHg3ZSwgMHg2MiwgMHg0MywgMHhjYywgMHhlOCwgMHgzMCwgMHgwYywgMHgwNiwKKyAgICAweDAzLCAweDU1LCAweDFkLCAweDEzLCAweDA0LCAweDA1LCAweDMwLCAweDAzLCAweDAxLCAweDAxLCAweGZmLCAweDMwLAorICAgIDB4MGEsIDB4MDYsIDB4MDgsIDB4MmEsIDB4ODYsIDB4NDgsIDB4Y2UsIDB4M2QsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDMsCisgICAgMHg2OSwgMHgwMCwgMHgzMCwgMHg2NiwgMHgwMiwgMHgzMSwgMHgwMCwgMHhjMywgMHhiNCwgMHg2MiwgMHg3MywgMHg1NiwKKyAgICAweDI4LCAweDk1LCAweDAwLCAweDdkLCAweDc4LCAweDEyLCAweDI2LCAweGQyLCAweDcxLCAweDdiLCAweDE5LCAweGY4LAorICAgIDB4OGEsIDB4OTgsIDB4M2UsIDB4OTIsIDB4ZmUsIDB4MzMsIDB4OWUsIDB4ZTQsIDB4NzksIDB4ZDIsIDB4ZmUsIDB4N2EsCisgICAgMHhiNywgMHg4NywgMHg3NCwgMHgzYywgMHgyYiwgMHhiOCwgMHhkNywgMHg2OSwgMHg5NCwgMHgwYiwgMHhhMywgMHg2NywKKyAgICAweDc3LCAweGI4LCAweGIzLCAweGJlLCAweGQxLCAweDM2LCAweDMyLCAweDAyLCAweDMxLCAweDAwLCAweGZkLCAweDY3LAorICAgIDB4OWMsIDB4OTQsIDB4MjMsIDB4NjcsIDB4YzAsIDB4NTYsIDB4YmEsIDB4NGIsIDB4MzMsIDB4MTUsIDB4MDAsIDB4YzYsCisgICAgMHhlMywgMHhjYywgMHgzMSwgMHgwOCwgMHgyYywgMHg5YywgMHg4YiwgMHhkYSwgMHhhOSwgMHg3NSwgMHgyMywgMHgyZiwKKyAgICAweGI4LCAweDI4LCAweGU3LCAweGYyLCAweDljLCAweDE0LCAweDNhLCAweDQwLCAweDAxLCAweDVjLCAweGFmLCAweDBjLAorICAgIDB4YjIsIDB4Y2YsIDB4NzQsIDB4N2YsIDB4MzAsIDB4OWYsIDB4MDgsIDB4NDMsIDB4YWQsIDB4MjAsCit9OworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCitlbnVtIGV4aXRfY29kZXMKK3sKKyAgICBleGl0X29rID0gMCwKKyAgICBjdHJfZHJiZ19zZWVkX2ZhaWxlZCwKKyAgICBzc2xfY29uZmlnX2RlZmF1bHRzX2ZhaWxlZCwKKyAgICBzc2xfc2V0dXBfZmFpbGVkLAorICAgIGhvc3RuYW1lX2ZhaWxlZCwKKyAgICBzb2NrZXRfZmFpbGVkLAorICAgIGNvbm5lY3RfZmFpbGVkLAorICAgIHg1MDlfY3J0X3BhcnNlX2ZhaWxlZCwKKyAgICBzc2xfaGFuZHNoYWtlX2ZhaWxlZCwKKyAgICBzc2xfd3JpdGVfZmFpbGVkLAorfTsKKworaW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQgPSBleGl0X29rOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9jcnQgY2E7CisjZW5kaWYKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICAvKgorICAgICAqIDAuIEluaXRpYWxpemUgYW5kIHNldHVwIHN0dWZmCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYSApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywgc3RybGVuKCBwZXJzICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IGN0cl9kcmJnX3NlZWRfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfQ0xJRU5ULAorICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IHNzbF9jb25maWdfZGVmYXVsdHNfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICBtYmVkdGxzX3NzbF9jb25mX3BzayggJmNvbmYsIHBzaywgc2l6ZW9mKCBwc2sgKSwKKyAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwc2tfaWQsIHNpemVvZiggcHNrX2lkICkgLSAxICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlciggJmNhLCBjYV9jZXJ0LCBzaXplb2YoIGNhX2NlcnQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0geDUwOV9jcnRfcGFyc2VfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsICZjYSwgTlVMTCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoICZjb25mLCBNQkVEVExTX1NTTF9WRVJJRllfUkVRVUlSRUQgKTsKKyNlbmRpZgorCisgICAgaWYoIG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gc3NsX3NldHVwX2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoICZzc2wsIEhPU1ROQU1FICkgIT0gMCApCisgICAgeworICAgICAgICByZXQgPSBob3N0bmFtZV9mYWlsZWQ7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogMS4gU3RhcnQgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KKyAgICBtZW1zZXQoICZhZGRyLCAwLCBzaXplb2YoIGFkZHIgKSApOworICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisKKyAgICByZXQgPSAxOyAvKiBmb3IgZW5kaWFubmVzcyBkZXRlY3Rpb24gKi8KKyAgICBhZGRyLnNpbl9wb3J0ID0gKigoY2hhciAqKSAmcmV0KSA9PSByZXQgPyBQT1JUX0xFIDogUE9SVF9CRTsKKyAgICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9ICooKGNoYXIgKikgJnJldCkgPT0gcmV0ID8gQUREUl9MRSA6IEFERFJfQkU7CisgICAgcmV0ID0gMDsKKworICAgIGlmKCAoIHNlcnZlcl9mZC5mZCA9IHNvY2tldCggQUZfSU5FVCwgU09DS19TVFJFQU0sIDAgKSApIDwgMCApCisgICAgeworICAgICAgICByZXQgPSBzb2NrZXRfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIGNvbm5lY3QoIHNlcnZlcl9mZC5mZCwKKyAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoIGFkZHIgKSApIDwgMCApCisgICAgeworICAgICAgICByZXQgPSBjb25uZWN0X2ZhaWxlZDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZzZXJ2ZXJfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsIE5VTEwgKTsKKworICAgIGlmKCBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IHNzbF9oYW5kc2hha2VfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAyLiBXcml0ZSB0aGUgR0VUIHJlcXVlc3QgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uCisgICAgICovCisgICAgaWYoIG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBHRVRfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIEdFVF9SRVFVRVNUICkgLSAxICkgPD0gMCApCisgICAgeworICAgICAgICByZXQgPSBzc2xfd3JpdGVfZmFpbGVkOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19uZXRfZnJlZSggJnNlcnZlcl9mZCApOworCisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2EgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50MS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MWY3MzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQxLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiAgU1NMIGNsaWVudCBkZW1vbnN0cmF0aW9uIHByb2dyYW0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc190aW1lICAgICAgIHRpbWUgCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CSUdOVU1fQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfU1NMX1RMU19DIGFuZC9vciBNQkVEVExTX1NTTF9DTElfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgIgorICAgICAgICAgICAibm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBTRVJWRVJfUE9SVCAiNDQzMyIKKyNkZWZpbmUgU0VSVkVSX05BTUUgImxvY2FsaG9zdCIKKyNkZWZpbmUgR0VUX1JFUVVFU1QgIkdFVCAvIEhUVFAvMS4wXHJcblxyXG4iCisKKyNkZWZpbmUgREVCVUdfTEVWRUwgMQorCitzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICAoKHZvaWQpIGxldmVsKTsKKworICAgIG1iZWR0bHNfZnByaW50ZiggKEZJTEUgKikgY3R4LCAiJXM6JTA0ZDogJXMiLCBmaWxlLCBsaW5lLCBzdHIgKTsKKyAgICBmZmx1c2goICAoRklMRSAqKSBjdHggICk7Cit9CisKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBpbnQgcmV0LCBsZW47CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBzZXJ2ZXJfZmQ7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJzc2xfY2xpZW50MSI7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNhY2VydDsKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggREVCVUdfTEVWRUwgKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAwLiBJbml0aWFsaXplIHRoZSBSTkcgYW5kIHRoZSBzZXNzaW9uIGRhdGEKKyAgICAgKi8KKyAgICBtYmVkdGxzX25ldF9pbml0KCAmc2VydmVyX2ZkICk7CisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNhY2VydCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDAuIEluaXRpYWxpemUgY2VydGlmaWNhdGVzCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgQ0Egcm9vdCBjZXJ0aWZpY2F0ZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZjYWNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNfcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2FzX3BlbV9sZW4gKTsKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBvayAoJWQgc2tpcHBlZClcbiIsIHJldCApOworCisgICAgLyoKKyAgICAgKiAxLiBTdGFydCB0aGUgY29ubmVjdGlvbgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENvbm5lY3RpbmcgdG8gdGNwLyVzLyVzLi4uIiwgU0VSVkVSX05BTUUsIFNFUlZFUl9QT1JUICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2Nvbm5lY3QoICZzZXJ2ZXJfZmQsIFNFUlZFUl9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWRVJfUE9SVCwgTUJFRFRMU19ORVRfUFJPVE9fVENQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2Nvbm5lY3QgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAyLiBTZXR1cCBzdHVmZgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgdGhlIFNTTC9UTFMgc3RydWN0dXJlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19DTElFTlQsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKiBPUFRJT05BTCBpcyBub3Qgb3B0aW1hbCBmb3Igc2VjdXJpdHksCisgICAgICogYnV0IG1ha2VzIGludGVyb3AgZWFzaWVyIGluIHRoaXMgc2ltcGxpZmllZCBleGFtcGxlICovCisgICAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggJmNvbmYsIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCAmY2FjZXJ0LCBOVUxMICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoICZzc2wsICJtYmVkIFRMUyBTZXJ2ZXIgMSIgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJnNlcnZlcl9mZCwgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwgTlVMTCApOworCisgICAgLyoKKyAgICAgKiA0LiBIYW5kc2hha2UKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZXJmb3JtaW5nIHRoZSBTU0wvVExTIGhhbmRzaGFrZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCAmc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNS4gVmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnlpbmcgcGVlciBYLjUwOSBjZXJ0aWZpY2F0ZS4uLiIgKTsKKworICAgIC8qIEluIHJlYWwgbGlmZSwgd2UgcHJvYmFibHkgd2FudCB0byBiYWlsIG91dCB3aGVuIHJldCAhPSAwICovCisgICAgaWYoICggZmxhZ3MgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIHZyZnlfYnVmWzUxMl07CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4iICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMy4gV3JpdGUgdGhlIEdFVCByZXF1ZXN0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgdG8gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCBHRVRfUkVRVUVTVCApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxlbiA9IHJldDsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyB3cml0dGVuXG5cbiVzIiwgbGVuLCAoY2hhciAqKSBidWYgKTsKKworICAgIC8qCisgICAgICogNy4gUmVhZCB0aGUgSFRUUCByZXNwb25zZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA8IFJlYWQgZnJvbSBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGJ1ZiwgbGVuICk7CisKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8IHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWSApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiggcmV0IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcblxuRU9GXG5cbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbGVuID0gcmV0OworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzIiwgbGVuLCAoY2hhciAqKSBidWYgKTsKKyAgICB9CisgICAgd2hpbGUoIDEgKTsKKworICAgIG1iZWR0bHNfc3NsX2Nsb3NlX25vdGlmeSggJnNzbCApOworCitleGl0OgorCisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIkxhc3QgZXJyb3Igd2FzOiAlZCAtICVzXG5cbiIsIHJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmc2VydmVyX2ZkICk7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfU1NMX1RMU19DICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfQ0xJX0MgJiYgTUJFRFRMU19ORVRfQyAmJiBNQkVEVExTX1JTQV9DICYmCisgICAgICAgICAgTUJFRFRMU19DRVJUU19DICYmIE1CRURUTFNfUEVNX1BBUlNFX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmCisgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkNzFlMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDIuYwpAQCAtMCwwICsxLDE2NzMgQEAKKy8qCisgKiAgU1NMIGNsaWVudCB3aXRoIGNlcnRpZmljYXRlIGF1dGhlbnRpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfQ0xJX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3Igbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgREZMX1NFUlZFUl9OQU1FICAgICAgICAgImxvY2FsaG9zdCIKKyNkZWZpbmUgREZMX1NFUlZFUl9BRERSICAgICAgICAgTlVMTAorI2RlZmluZSBERkxfU0VSVkVSX1BPUlQgICAgICAgICAiNDQzMyIKKyNkZWZpbmUgREZMX1JFUVVFU1RfUEFHRSAgICAgICAgIi8iCisjZGVmaW5lIERGTF9SRVFVRVNUX1NJWkUgICAgICAgIC0xCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKyNkZWZpbmUgREZMX05CSU8gICAgICAgICAgICAgICAgMAorI2RlZmluZSBERkxfUkVBRF9USU1FT1VUICAgICAgICAwCisjZGVmaW5lIERGTF9NQVhfUkVTRU5EICAgICAgICAgIDAKKyNkZWZpbmUgREZMX0NBX0ZJTEUgICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NBX1BBVEggICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NSVF9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0tFWV9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX1BTSyAgICAgICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX1BTS19JREVOVElUWSAgICAgICAgIkNsaWVudF9pZGVudGl0eSIKKyNkZWZpbmUgREZMX0VDSlBBS0VfUFcgICAgICAgICAgTlVMTAorI2RlZmluZSBERkxfRk9SQ0VfQ0lQSEVSICAgICAgICAwCisjZGVmaW5lIERGTF9SRU5FR09USUFUSU9OICAgICAgIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQKKyNkZWZpbmUgREZMX0FMTE9XX0xFR0FDWSAgICAgICAgLTIKKyNkZWZpbmUgREZMX1JFTkVHT1RJQVRFICAgICAgICAgMAorI2RlZmluZSBERkxfRVhDSEFOR0VTICAgICAgICAgICAxCisjZGVmaW5lIERGTF9NSU5fVkVSU0lPTiAgICAgICAgIC0xCisjZGVmaW5lIERGTF9NQVhfVkVSU0lPTiAgICAgICAgIC0xCisjZGVmaW5lIERGTF9BUkM0ICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9BVVRIX01PREUgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9NRkxfQ09ERSAgICAgICAgICAgIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FCisjZGVmaW5lIERGTF9UUlVOQ19ITUFDICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9SRUNTUExJVCAgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9ESE1MRU4gICAgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9SRUNPTk5FQ1QgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX1JFQ09fREVMQVkgICAgICAgICAgMAorI2RlZmluZSBERkxfUkVDT05ORUNUX0hBUkQgICAgICAwCisjZGVmaW5lIERGTF9USUNLRVRTICAgICAgICAgICAgIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVECisjZGVmaW5lIERGTF9BTFBOX1NUUklORyAgICAgICAgIE5VTEwKKyNkZWZpbmUgREZMX1RSQU5TUE9SVCAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTQorI2RlZmluZSBERkxfSFNfVE9fTUlOICAgICAgICAgICAwCisjZGVmaW5lIERGTF9IU19UT19NQVggICAgICAgICAgIDAKKyNkZWZpbmUgREZMX0ZBTExCQUNLICAgICAgICAgICAgLTEKKyNkZWZpbmUgREZMX0VYVEVOREVEX01TICAgICAgICAgLTEKKyNkZWZpbmUgREZMX0VUTSAgICAgICAgICAgICAgICAgLTEKKworI2RlZmluZSBHRVRfUkVRVUVTVCAiR0VUICVzIEhUVFAvMS4wXHJcbkV4dHJhLWhlYWRlcjogIgorI2RlZmluZSBHRVRfUkVRVUVTVF9FTkQgIlxyXG5cclxuIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorI2RlZmluZSBVU0FHRV9JTyBcCisgICAgIiAgICBjYV9maWxlPSUlcyAgICAgICAgICBUaGUgc2luZ2xlIGZpbGUgY29udGFpbmluZyB0aGUgdG9wLWxldmVsIENBKHMpIHlvdSBmdWxseSB0cnVzdFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKHByZS1sb2FkZWQpXG4iIFwKKyAgICAiICAgIGNhX3BhdGg9JSVzICAgICAgICAgIFRoZSBwYXRoIGNvbnRhaW5pbmcgdGhlIHRvcC1sZXZlbCBDQShzKSB5b3UgZnVsbHkgdHJ1c3RcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChwcmUtbG9hZGVkKSAob3ZlcnJpZGVzIGNhX2ZpbGUpXG4iIFwKKyAgICAiICAgIGNydF9maWxlPSUlcyAgICAgICAgIFlvdXIgb3duIGNlcnQgYW5kIGNoYWluIChpbiBib3R0b20gdG8gdG9wIG9yZGVyLCB0b3AgbWF5IGJlIG9taXR0ZWQpXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZClcbiIgXAorICAgICIgICAga2V5X2ZpbGU9JSVzICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0lPIFwKKyAgICAiICAgIE5vIGZpbGUgb3BlcmF0aW9ucyBhdmFpbGFibGUgKE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQpXG4iCisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworI2Vsc2UKKyNkZWZpbmUgVVNBR0VfSU8gIiIKKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorI2RlZmluZSBVU0FHRV9QU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBwc2s9JSVzICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChpbiBoZXgsIHdpdGhvdXQgMHgpXG4iIFwKKyAgICAiICAgIHBza19pZGVudGl0eT0lJXMgICAgIGRlZmF1bHQ6IFwiQ2xpZW50X2lkZW50aXR5XCJcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1BTSyAiIgorI2VuZGlmIC8qIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisjZGVmaW5lIFVTQUdFX1RJQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICB0aWNrZXRzPSUlZCAgICAgICAgICBkZWZhdWx0OiAxIChlbmFibGVkKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfVElDS0VUUyAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKKyNkZWZpbmUgVVNBR0VfVFJVTkNfSE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHRydW5jX2htYWM9JSVkICAgICAgIGRlZmF1bHQ6IGxpYnJhcnkgZGVmYXVsdFxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfVFJVTkNfSE1BQyAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisjZGVmaW5lIFVTQUdFX01BWF9GUkFHX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbWF4X2ZyYWdfbGVuPSUlZCAgICAgZGVmYXVsdDogMTYzODQgKHRscyBkZWZhdWx0KVxuIiAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogNTEyLCAxMDI0LCAyMDQ4LCA0MDk2XG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9NQVhfRlJBR19MRU4gIiIKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RIICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HKQorI2RlZmluZSBVU0FHRV9SRUNTUExJVCBcCisgICAgIiAgICByZWNzcGxpdD0wLzEgICAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG9uKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfUkVDU1BMSVQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorI2RlZmluZSBVU0FHRV9ESE1MRU4gXAorICAgICIgICAgZGhtbGVuPSUlZCAgICAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogMTAyNCBiaXRzKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfREhNTEVOCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyNkZWZpbmUgVVNBR0VfQUxQTiBcCisgICAgIiAgICBhbHBuPSUlcyAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChkaXNhYmxlZClcbiIgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGU6IHNwZHkvMSxodHRwLzEuMVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfQUxQTiAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyNkZWZpbmUgVVNBR0VfRFRMUyBcCisgICAgIiAgICBkdGxzPSUlZCAgICAgICAgICAgICBkZWZhdWx0OiAwIChUTFMpXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgaHNfdGltZW91dD0lJWQtJSVkICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IDEwMDAtNjAwMDApXG4iICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Ugb2YgRFRMUyBoYW5kc2hha2UgdGltZW91dHMgaW4gbWlsbGlzZWNzXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9EVExTICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikKKyNkZWZpbmUgVVNBR0VfRkFMTEJBQ0sgXAorICAgICIgICAgZmFsbGJhY2s9MC8xICAgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBvZmYpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9GQUxMQkFDSyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisjZGVmaW5lIFVTQUdFX0VNUyBcCisgICAgIiAgICBleHRlbmRlZF9tcz0wLzEgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG9uKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRU1TICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyNkZWZpbmUgVVNBR0VfRVRNIFwKKyAgICAiICAgIGV0bT0wLzEgICAgICAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogb24pXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9FVE0gIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorI2RlZmluZSBVU0FHRV9SRU5FR08gXAorICAgICIgICAgcmVuZWdvdGlhdGlvbj0lJWQgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iICAgICAgXAorICAgICIgICAgcmVuZWdvdGlhdGU9JSVkICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9SRU5FR08gIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisjZGVmaW5lIFVTQUdFX0VDSlBBS0UgXAorICAgICIgICAgZWNqcGFrZV9wdz0lJXMgICAgICAgZGVmYXVsdDogbm9uZSAoZGlzYWJsZWQpXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9FQ0pQQUtFICIiCisjZW5kaWYKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBzc2xfY2xpZW50MiBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfbmFtZT0lJXMgICAgICBkZWZhdWx0OiBsb2NhbGhvc3RcbiIgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfYWRkcj0lJXMgICAgICBkZWZhdWx0OiBnaXZlbiBieSBuYW1lXG4iICAgICBcCisgICAgIiAgICBzZXJ2ZXJfcG9ydD0lJWQgICAgICBkZWZhdWx0OiA0NDMzXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICByZXF1ZXN0X3BhZ2U9JSVzICAgICBkZWZhdWx0OiBcIi5cIlxuIiAgICAgICAgICAgICBcCisgICAgIiAgICByZXF1ZXN0X3NpemU9JSVkICAgICBkZWZhdWx0OiBhYm91dCAzNCAoYmFzaWMgcmVxdWVzdClcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAobWluaW11bTogMCwgbWF4OiAxNjM4NClcbiIgXAorICAgICIgICAgZGVidWdfbGV2ZWw9JSVkICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iICAgICAgXAorICAgICIgICAgbmJpbz0lJWQgICAgICAgICAgICAgZGVmYXVsdDogMCAoYmxvY2tpbmcgSS9PKVxuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAxIChub24tYmxvY2tpbmcpLCAyIChhZGRlZCBkZWxheXMpXG4iIFwKKyAgICAiICAgIHJlYWRfdGltZW91dD0lJWQgICAgIGRlZmF1bHQ6IDAgbXMgKG5vIHRpbWVvdXQpXG4iICAgIFwKKyAgICAiICAgIG1heF9yZXNlbmQ9JSVkICAgICAgIGRlZmF1bHQ6IDAgKG5vIHJlc2VuZCBvbiB0aW1lb3V0KVxuIiBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRFRMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBhdXRoX21vZGU9JSVzICAgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBub25lKVxuIiAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbm9uZSwgb3B0aW9uYWwsIHJlcXVpcmVkXG4iIFwKKyAgICBVU0FHRV9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9QU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9FQ0pQQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGFsbG93X2xlZ2FjeT0lJWQgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG5vKVxuIiAgICAgIFwKKyAgICBVU0FHRV9SRU5FR08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGV4Y2hhbmdlcz0lJWQgICAgICAgIGRlZmF1bHQ6IDFcbiIgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHJlY29ubmVjdD0lJWQgICAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIHJlY29fZGVsYXk9JSVkICAgICAgIGRlZmF1bHQ6IDAgc2Vjb25kc1xuIiAgICAgICAgIFwKKyAgICAiICAgIHJlY29ubmVjdF9oYXJkPSUlZCAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICBVU0FHRV9USUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9NQVhfRlJBR19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9UUlVOQ19ITUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9BTFBOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9GQUxMQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9FTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9FVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9SRUNTUExJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9ESE1MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGFyYzQ9JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IDApXG4iIFwKKyAgICAiICAgIG1pbl92ZXJzaW9uPSUlcyAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IHRsczEpXG4iICAgICAgIFwKKyAgICAiICAgIG1heF92ZXJzaW9uPSUlcyAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IHRsczFfMilcbiIgICAgIFwKKyAgICAiICAgIGZvcmNlX3ZlcnNpb249JSVzICAgIGRlZmF1bHQ6IFwiXCIgKG5vbmUpXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogc3NsMywgdGxzMSwgdGxzMV8xLCB0bHMxXzIsIGR0bHMxLCBkdGxzMV8yXG4iIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGZvcmNlX2NpcGhlcnN1aXRlPTxuYW1lPiAgICBkZWZhdWx0OiBhbGwgZW5hYmxlZFxuIlwKKyAgICAiIGFjY2VwdGFibGUgY2lwaGVyc3VpdGUgbmFtZXM6XG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9uYW1lOyAgICAvKiBob3N0bmFtZSBvZiB0aGUgc2VydmVyIChjbGllbnQgb25seSkgICAgICovCisgICAgY29uc3QgY2hhciAqc2VydmVyX2FkZHI7ICAgIC8qIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciAoY2xpZW50IG9ubHkpICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJfcG9ydDsgICAgLyogcG9ydCBvbiB3aGljaCB0aGUgc3NsIHNlcnZpY2UgcnVucyAgICAgICAqLworICAgIGludCBkZWJ1Z19sZXZlbDsgICAgICAgICAgICAvKiBsZXZlbCBvZiBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IG5iaW87ICAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBJL08gYmUgYmxvY2tpbmc/ICAgICAgICAgICAgICAgICAgKi8KKyAgICB1aW50MzJfdCByZWFkX3RpbWVvdXQ7ICAgICAgLyogdGltZW91dCBvbiBtYmVkdGxzX3NzbF9yZWFkKCkgaW4gbWlsbGlzZWNvbmRzICAgICovCisgICAgaW50IG1heF9yZXNlbmQ7ICAgICAgICAgICAgIC8qIERUTFMgdGltZXMgdG8gcmVzZW5kIG9uIHJlYWQgdGltZW91dCAgICAgKi8KKyAgICBjb25zdCBjaGFyICpyZXF1ZXN0X3BhZ2U7ICAgLyogcGFnZSBvbiBzZXJ2ZXIgdG8gcmVxdWVzdCAgICAgICAgICAgICAgICAqLworICAgIGludCByZXF1ZXN0X3NpemU7ICAgICAgICAgICAvKiBwYWQgcmVxdWVzdCB3aXRoIGhlYWRlciB0byByZXF1ZXN0ZWQgc2l6ZSAqLworICAgIGNvbnN0IGNoYXIgKmNhX2ZpbGU7ICAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZShzKSAgICAgICovCisgICAgY29uc3QgY2hhciAqY2FfcGF0aDsgICAgICAgIC8qIHRoZSBwYXRoIHdpdGggdGhlIENBIGNlcnRpZmljYXRlKHMpIHJlc2lkZSAqLworICAgIGNvbnN0IGNoYXIgKmNydF9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgICAgICovCisgICAgY29uc3QgY2hhciAqa2V5X2ZpbGU7ICAgICAgIC8qIHRoZSBmaWxlIHdpdGggdGhlIGNsaWVudCBrZXkgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpwc2s7ICAgICAgICAgICAgLyogdGhlIHByZS1zaGFyZWQga2V5ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKnBza19pZGVudGl0eTsgICAvKiB0aGUgcHJlLXNoYXJlZCBrZXkgaWRlbnRpdHkgICAgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqZWNqcGFrZV9wdzsgICAgIC8qIHRoZSBFQyBKLVBBS0UgcGFzc3dvcmQgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZm9yY2VfY2lwaGVyc3VpdGVbMl07ICAgLyogcHJvdG9jb2wvY2lwaGVyc3VpdGUgdG8gdXNlLCBvciBhbGwgICAgICAqLworICAgIGludCByZW5lZ290aWF0aW9uOyAgICAgICAgICAvKiBlbmFibGUgLyBkaXNhYmxlIHJlbmVnb3RpYXRpb24gICAgICAgICAgICovCisgICAgaW50IGFsbG93X2xlZ2FjeTsgICAgICAgICAgIC8qIGFsbG93IGxlZ2FjeSByZW5lZ290aWF0aW9uICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgcmVuZWdvdGlhdGU7ICAgICAgICAgICAgLyogYXR0ZW1wdCByZW5lZ290aWF0aW9uPyAgICAgICAgICAgICAgICAgICAqLworICAgIGludCByZW5lZ29fZGVsYXk7ICAgICAgICAgICAvKiBkZWxheSBiZWZvcmUgZW5mb3JjaW5nIHJlbmVnb3RpYXRpb24gICAgICovCisgICAgaW50IGV4Y2hhbmdlczsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkYXRhIGV4Y2hhbmdlcyAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgbWluX3ZlcnNpb247ICAgICAgICAgICAgLyogbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uIGFjY2VwdGVkICAgICAgICAqLworICAgIGludCBtYXhfdmVyc2lvbjsgICAgICAgICAgICAvKiBtYXhpbXVtIHByb3RvY29sIHZlcnNpb24gYWNjZXB0ZWQgICAgICAgICovCisgICAgaW50IGFyYzQ7ICAgICAgICAgICAgICAgICAgIC8qIGZsYWcgZm9yIGFyYzQgc3VpdGVzIHN1cHBvcnQgICAgICAgICAgICAgKi8KKyAgICBpbnQgYXV0aF9tb2RlOyAgICAgICAgICAgICAgLyogdmVyaWZ5IG1vZGUgZm9yIGNvbm5lY3Rpb24gICAgICAgICAgICAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgbWZsX2NvZGU7ICAgICAvKiBjb2RlIGZvciBtYXhpbXVtIGZyYWdtZW50IGxlbmd0aCAgICAgICAgICovCisgICAgaW50IHRydW5jX2htYWM7ICAgICAgICAgICAgIC8qIG5lZ290aWF0ZSB0cnVuY2F0ZWQgaG1hYyBvciBub3QgICAgICAgICAgKi8KKyAgICBpbnQgcmVjc3BsaXQ7ICAgICAgICAgICAgICAgLyogZW5hYmxlIHJlY29yZCBzcGxpdHRpbmc/ICAgICAgICAgICAgICAgICAqLworICAgIGludCBkaG1sZW47ICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIERITSBwYXJhbXMgbGVuIGluIGJpdHMgICAgICAgICAgICovCisgICAgaW50IHJlY29ubmVjdDsgICAgICAgICAgICAgIC8qIGF0dGVtcHQgdG8gcmVzdW1lIHNlc3Npb24gICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgcmVjb19kZWxheTsgICAgICAgICAgICAgLyogZGVsYXkgaW4gc2Vjb25kcyBiZWZvcmUgcmVzdW1pbmcgc2Vzc2lvbiAqLworICAgIGludCByZWNvbm5lY3RfaGFyZDsgICAgICAgICAvKiB1bmV4cGVjdGVkbHkgcmVjb25uZWN0IGZyb20gdGhlIHNhbWUgcG9ydCAqLworICAgIGludCB0aWNrZXRzOyAgICAgICAgICAgICAgICAvKiBlbmFibGUgLyBkaXNhYmxlIHNlc3Npb24gdGlja2V0cyAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqYWxwbl9zdHJpbmc7ICAgIC8qIEFMUE4gc3VwcG9ydGVkIHByb3RvY29scyAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgdHJhbnNwb3J0OyAgICAgICAgICAgICAgLyogVExTIG9yIERUTFM/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHVpbnQzMl90IGhzX3RvX21pbjsgICAgICAgICAvKiBJbml0aWFsIHZhbHVlIG9mIERUTFMgaGFuZHNoYWtlIHRpbWVyICAgICovCisgICAgdWludDMyX3QgaHNfdG9fbWF4OyAgICAgICAgIC8qIE1heCB2YWx1ZSBvZiBEVExTIGhhbmRzaGFrZSB0aW1lciAgICAgICAgKi8KKyAgICBpbnQgZmFsbGJhY2s7ICAgICAgICAgICAgICAgLyogaXMgdGhpcyBhIGZhbGxiYWNrIGNvbm5lY3Rpb24/ICAgICAgICAgICAqLworICAgIGludCBleHRlbmRlZF9tczsgICAgICAgICAgICAvKiBuZWdvdGlhdGUgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldD8gICAgICAgICovCisgICAgaW50IGV0bTsgICAgICAgICAgICAgICAgICAgIC8qIG5lZ290aWF0ZSBlbmNyeXB0IHRoZW4gbWFjPyAgICAgICAgICAgICAgKi8KK30gb3B0OworCitzdGF0aWMgdm9pZCBteV9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICBjb25zdCBjaGFyICpwLCAqYmFzZW5hbWU7CisKKyAgICAvKiBFeHRyYWN0IGJhc2VuYW1lIGZyb20gZmlsZSAqLworICAgIGZvciggcCA9IGJhc2VuYW1lID0gZmlsZTsgKnAgIT0gJ1wwJzsgcCsrICkKKyAgICAgICAgaWYoICpwID09ICcvJyB8fCAqcCA9PSAnXFwnICkKKyAgICAgICAgICAgIGJhc2VuYW1lID0gcCArIDE7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6IHwlZHwgJXMiLCBiYXNlbmFtZSwgbGluZSwgbGV2ZWwsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworLyoKKyAqIFRlc3QgcmVjdi9zZW5kIGZ1bmN0aW9ucyB0aGF0IG1ha2Ugc3VyZSBlYWNoIHRyeSByZXR1cm5zCisgKiBXQU5UX1JFQUQvV0FOVF9XUklURSBhdCBsZWFzdCBvbmNlIGJlZm9yZSBzdWNlc3NlZGluZworICovCitzdGF0aWMgaW50IG15X3JlY3YoIHZvaWQgKmN0eCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBzdGF0aWMgaW50IGZpcnN0X3RyeSA9IDE7CisgICAgaW50IHJldDsKKworICAgIGlmKCBmaXJzdF90cnkgKQorICAgIHsKKyAgICAgICAgZmlyc3RfdHJ5ID0gMDsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggY3R4LCBidWYsIGxlbiApOworICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCApCisgICAgICAgIGZpcnN0X3RyeSA9IDE7IC8qIE5leHQgY2FsbCB3aWxsIGJlIGEgbmV3IG9wZXJhdGlvbiAqLworICAgIHJldHVybiggcmV0ICk7Cit9CisKK3N0YXRpYyBpbnQgbXlfc2VuZCggdm9pZCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIHN0YXRpYyBpbnQgZmlyc3RfdHJ5ID0gMTsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGZpcnN0X3RyeSApCisgICAgeworICAgICAgICBmaXJzdF90cnkgPSAwOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggY3R4LCBidWYsIGxlbiApOworICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICBmaXJzdF90cnkgPSAxOyAvKiBOZXh0IGNhbGwgd2lsbCBiZSBhIG5ldyBvcGVyYXRpb24gKi8KKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisvKgorICogRW5hYmxlZCBpZiBkZWJ1Z19sZXZlbCA+IDEgaW4gY29kZSBiZWxvdworICovCitzdGF0aWMgaW50IG15X3ZlcmlmeSggdm9pZCAqZGF0YSwgbWJlZHRsc194NTA5X2NydCAqY3J0LCBpbnQgZGVwdGgsIHVpbnQzMl90ICpmbGFncyApCit7CisgICAgY2hhciBidWZbMTAyNF07CisgICAgKCh2b2lkKSBkYXRhKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG5WZXJpZnkgcmVxdWVzdGVkIGZvciAoRGVwdGggJWQpOlxuIiwgZGVwdGggKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIGJ1Ziwgc2l6ZW9mKCBidWYgKSAtIDEsICIiLCBjcnQgKTsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiVzIiwgYnVmICk7CisKKyAgICBpZiAoICggKmZsYWdzICkgPT0gMCApCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBUaGlzIGNlcnRpZmljYXRlIGhhcyBubyBmbGFnc1xuIiApOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgIiAgISAiLCAqZmxhZ3MgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgYnVmICk7CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMCwgbGVuLCB0YWlsX2xlbiwgaSwgd3JpdHRlbiwgZnJhZ3MsIHJldHJ5X2xlZnQ7CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBzZXJ2ZXJfZmQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICsgMV07CisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBwc2tbTUJFRFRMU19QU0tfTUFYX0xFTl07CisgICAgc2l6ZV90IHBza19sZW4gPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGNvbnN0IGNoYXIgKmFscG5fbGlzdFsxMF07CisjZW5kaWYKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInNzbF9jbGllbnQyIjsKKworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gc2F2ZWRfc2Vzc2lvbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgbWJlZHRsc190aW1pbmdfZGVsYXlfY29udGV4dCB0aW1lcjsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIHVpbnQzMl90IGZsYWdzOworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2FjZXJ0OworICAgIG1iZWR0bHNfeDUwOV9jcnQgY2xpY2VydDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGtleTsKKyNlbmRpZgorICAgIGNoYXIgKnAsICpxOworICAgIGNvbnN0IGludCAqbGlzdDsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIG1lbW9yeSByZWZlcmVuY2VzIGFyZSB2YWxpZC4KKyAgICAgKi8KKyAgICBtYmVkdGxzX25ldF9pbml0KCAmc2VydmVyX2ZkICk7CisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1lbXNldCggJnNhdmVkX3Nlc3Npb24sIDAsIHNpemVvZiggbWJlZHRsc19zc2xfc2Vzc2lvbiApICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjbGljZXJ0ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIG1lbXNldCggKHZvaWQgKiApIGFscG5fbGlzdCwgMCwgc2l6ZW9mKCBhbHBuX2xpc3QgKSApOworI2VuZGlmCisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIGlmKCByZXQgPT0gMCApCisgICAgICAgICAgICByZXQgPSAxOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworCisgICAgICAgIGxpc3QgPSBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcygpOworICAgICAgICB3aGlsZSggKmxpc3QgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiICUtNDJzIiwgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoICpsaXN0ICkgKTsKKyAgICAgICAgICAgIGxpc3QrKzsKKyAgICAgICAgICAgIGlmKCAhKmxpc3QgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIiAlc1xuIiwgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUoICpsaXN0ICkgKTsKKyAgICAgICAgICAgIGxpc3QrKzsKKyAgICAgICAgfQorICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4iKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC5zZXJ2ZXJfbmFtZSAgICAgICAgID0gREZMX1NFUlZFUl9OQU1FOworICAgIG9wdC5zZXJ2ZXJfYWRkciAgICAgICAgID0gREZMX1NFUlZFUl9BRERSOworICAgIG9wdC5zZXJ2ZXJfcG9ydCAgICAgICAgID0gREZMX1NFUlZFUl9QT1JUOworICAgIG9wdC5kZWJ1Z19sZXZlbCAgICAgICAgID0gREZMX0RFQlVHX0xFVkVMOworICAgIG9wdC5uYmlvICAgICAgICAgICAgICAgID0gREZMX05CSU87CisgICAgb3B0LnJlYWRfdGltZW91dCAgICAgICAgPSBERkxfUkVBRF9USU1FT1VUOworICAgIG9wdC5tYXhfcmVzZW5kICAgICAgICAgID0gREZMX01BWF9SRVNFTkQ7CisgICAgb3B0LnJlcXVlc3RfcGFnZSAgICAgICAgPSBERkxfUkVRVUVTVF9QQUdFOworICAgIG9wdC5yZXF1ZXN0X3NpemUgICAgICAgID0gREZMX1JFUVVFU1RfU0laRTsKKyAgICBvcHQuY2FfZmlsZSAgICAgICAgICAgICA9IERGTF9DQV9GSUxFOworICAgIG9wdC5jYV9wYXRoICAgICAgICAgICAgID0gREZMX0NBX1BBVEg7CisgICAgb3B0LmNydF9maWxlICAgICAgICAgICAgPSBERkxfQ1JUX0ZJTEU7CisgICAgb3B0LmtleV9maWxlICAgICAgICAgICAgPSBERkxfS0VZX0ZJTEU7CisgICAgb3B0LnBzayAgICAgICAgICAgICAgICAgPSBERkxfUFNLOworICAgIG9wdC5wc2tfaWRlbnRpdHkgICAgICAgID0gREZMX1BTS19JREVOVElUWTsKKyAgICBvcHQuZWNqcGFrZV9wdyAgICAgICAgICA9IERGTF9FQ0pQQUtFX1BXOworICAgIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXT0gREZMX0ZPUkNFX0NJUEhFUjsKKyAgICBvcHQucmVuZWdvdGlhdGlvbiAgICAgICA9IERGTF9SRU5FR09USUFUSU9OOworICAgIG9wdC5hbGxvd19sZWdhY3kgICAgICAgID0gREZMX0FMTE9XX0xFR0FDWTsKKyAgICBvcHQucmVuZWdvdGlhdGUgICAgICAgICA9IERGTF9SRU5FR09USUFURTsKKyAgICBvcHQuZXhjaGFuZ2VzICAgICAgICAgICA9IERGTF9FWENIQU5HRVM7CisgICAgb3B0Lm1pbl92ZXJzaW9uICAgICAgICAgPSBERkxfTUlOX1ZFUlNJT047CisgICAgb3B0Lm1heF92ZXJzaW9uICAgICAgICAgPSBERkxfTUFYX1ZFUlNJT047CisgICAgb3B0LmFyYzQgICAgICAgICAgICAgICAgPSBERkxfQVJDNDsKKyAgICBvcHQuYXV0aF9tb2RlICAgICAgICAgICA9IERGTF9BVVRIX01PREU7CisgICAgb3B0Lm1mbF9jb2RlICAgICAgICAgICAgPSBERkxfTUZMX0NPREU7CisgICAgb3B0LnRydW5jX2htYWMgICAgICAgICAgPSBERkxfVFJVTkNfSE1BQzsKKyAgICBvcHQucmVjc3BsaXQgICAgICAgICAgICA9IERGTF9SRUNTUExJVDsKKyAgICBvcHQuZGhtbGVuICAgICAgICAgICAgICA9IERGTF9ESE1MRU47CisgICAgb3B0LnJlY29ubmVjdCAgICAgICAgICAgPSBERkxfUkVDT05ORUNUOworICAgIG9wdC5yZWNvX2RlbGF5ICAgICAgICAgID0gREZMX1JFQ09fREVMQVk7CisgICAgb3B0LnJlY29ubmVjdF9oYXJkICAgICAgPSBERkxfUkVDT05ORUNUX0hBUkQ7CisgICAgb3B0LnRpY2tldHMgICAgICAgICAgICAgPSBERkxfVElDS0VUUzsKKyAgICBvcHQuYWxwbl9zdHJpbmcgICAgICAgICA9IERGTF9BTFBOX1NUUklORzsKKyAgICBvcHQudHJhbnNwb3J0ICAgICAgICAgICA9IERGTF9UUkFOU1BPUlQ7CisgICAgb3B0LmhzX3RvX21pbiAgICAgICAgICAgPSBERkxfSFNfVE9fTUlOOworICAgIG9wdC5oc190b19tYXggICAgICAgICAgID0gREZMX0hTX1RPX01BWDsKKyAgICBvcHQuZmFsbGJhY2sgICAgICAgICAgICA9IERGTF9GQUxMQkFDSzsKKyAgICBvcHQuZXh0ZW5kZWRfbXMgICAgICAgICA9IERGTF9FWFRFTkRFRF9NUzsKKyAgICBvcHQuZXRtICAgICAgICAgICAgICAgICA9IERGTF9FVE07CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9uYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9uYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VydmVyX2FkZHIiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX2FkZHIgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfcG9ydCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfcG9ydCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImR0bHMiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB0ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIHQgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU07CisgICAgICAgICAgICBlbHNlIGlmKCB0ID09IDEgKQorICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkZWJ1Z19sZXZlbCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRlYnVnX2xldmVsID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kZWJ1Z19sZXZlbCA8IDAgfHwgb3B0LmRlYnVnX2xldmVsID4gNjU1MzUgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibmJpbyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm5iaW8gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0Lm5iaW8gPCAwIHx8IG9wdC5uYmlvID4gMiApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZWFkX3RpbWVvdXQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQucmVhZF90aW1lb3V0ID0gYXRvaSggcSApOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtYXhfcmVzZW5kIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubWF4X3Jlc2VuZCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQubWF4X3Jlc2VuZCA8IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVxdWVzdF9wYWdlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnJlcXVlc3RfcGFnZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlcXVlc3Rfc2l6ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlcXVlc3Rfc2l6ZSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQucmVxdWVzdF9zaXplIDwgMCB8fCBvcHQucmVxdWVzdF9zaXplID4gTUJFRFRMU19TU0xfTUFYX0NPTlRFTlRfTEVOICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNhX2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY2FfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNhX3BhdGgiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY2FfcGF0aCA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNydF9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNydF9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAia2V5X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQua2V5X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJwc2siICkgPT0gMCApCisgICAgICAgICAgICBvcHQucHNrID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicHNrX2lkZW50aXR5IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnBza19pZGVudGl0eSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImVjanBha2VfcHciICkgPT0gMCApCisgICAgICAgICAgICBvcHQuZWNqcGFrZV9wdyA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImZvcmNlX2NpcGhlcnN1aXRlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfaWQoIHEgKTsKKworICAgICAgICAgICAgaWYoIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMV0gPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlbmVnb3RpYXRpb24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZW5lZ290aWF0aW9uID0gKGF0b2koIHEgKSkgPyBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYWxsb3dfbGVnYWN5IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAtMTogb3B0LmFsbG93X2xlZ2FjeSA9IE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0U7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMDogIG9wdC5hbGxvd19sZWdhY3kgPSBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgb3B0LmFsbG93X2xlZ2FjeSA9IE1CRURUTFNfU1NMX0xFR0FDWV9BTExPV19SRU5FR09USUFUSU9OOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlbmVnb3RpYXRlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVuZWdvdGlhdGUgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlbmVnb3RpYXRlIDwgMCB8fCBvcHQucmVuZWdvdGlhdGUgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImV4Y2hhbmdlcyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmV4Y2hhbmdlcyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZXhjaGFuZ2VzIDwgMSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZWNvbm5lY3QiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZWNvbm5lY3QgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlY29ubmVjdCA8IDAgfHwgb3B0LnJlY29ubmVjdCA+IDIgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVjb19kZWxheSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlY29fZGVsYXkgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlY29fZGVsYXkgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlY29ubmVjdF9oYXJkIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVjb25uZWN0X2hhcmQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlY29ubmVjdF9oYXJkIDwgMCB8fCBvcHQucmVjb25uZWN0X2hhcmQgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInRpY2tldHMiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC50aWNrZXRzID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC50aWNrZXRzIDwgMCB8fCBvcHQudGlja2V0cyA+IDIgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYWxwbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmFscG5fc3RyaW5nID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmYWxsYmFjayIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogb3B0LmZhbGxiYWNrID0gTUJFRFRMU19TU0xfSVNfTk9UX0ZBTExCQUNLOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wdC5mYWxsYmFjayA9IE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImV4dGVuZGVkX21zIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBvcHQuZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19ESVNBQkxFRDsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcHQuZXh0ZW5kZWRfbXMgPSBNQkVEVExTX1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImV0bSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogb3B0LmV0bSA9IE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRDsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBvcHQuZXRtID0gTUJFRFRMU19TU0xfRVRNX0VOQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWluX3ZlcnNpb24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJzc2wzIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMDsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8xIiApID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCggcSwgImR0bHMxIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMiIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoIHEsICJkdGxzMV8yIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1heF92ZXJzaW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAic3NsMyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMSIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoIHEsICJkdGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzIiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCBxLCAiZHRsczFfMiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJhcmM0IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiAgICAgb3B0LmFyYzQgPSBNQkVEVExTX1NTTF9BUkM0X0RJU0FCTEVEOyAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogICAgIG9wdC5hcmM0ID0gTUJFRFRMU19TU0xfQVJDNF9FTkFCTEVEOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImZvcmNlX3ZlcnNpb24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJzc2wzIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMDsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzEiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMiIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZHRsczEiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZHRsczFfMiIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJhdXRoX21vZGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJub25lIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5hdXRoX21vZGUgPSBNQkVEVExTX1NTTF9WRVJJRllfTk9ORTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIm9wdGlvbmFsIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5hdXRoX21vZGUgPSBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUw7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJyZXF1aXJlZCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQuYXV0aF9tb2RlID0gTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVEOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWF4X2ZyYWdfbGVuIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiNTEyIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tZmxfY29kZSA9IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl81MTI7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICIxMDI0IiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tZmxfY29kZSA9IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8xMDI0OworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiMjA0OCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWZsX2NvZGUgPSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMjA0ODsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIjQwOTYiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1mbF9jb2RlID0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzQwOTY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ0cnVuY19obWFjIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBvcHQudHJ1bmNfaG1hYyA9IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogb3B0LnRydW5jX2htYWMgPSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiaHNfdGltZW91dCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcCA9IHN0cmNociggcSwgJy0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAgICAgKnArKyA9ICdcMCc7CisgICAgICAgICAgICBvcHQuaHNfdG9fbWluID0gYXRvaSggcSApOworICAgICAgICAgICAgb3B0LmhzX3RvX21heCA9IGF0b2koIHAgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuaHNfdG9fbWluID09IDAgfHwgb3B0LmhzX3RvX21heCA8IG9wdC5oc190b19taW4gKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicmVjc3BsaXQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZWNzcGxpdCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQucmVjc3BsaXQgPCAwIHx8IG9wdC5yZWNzcGxpdCA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGhtbGVuIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZGhtbGVuID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kaG1sZW4gPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFQlVHX0MpCisgICAgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKCBvcHQuZGVidWdfbGV2ZWwgKTsKKyNlbmRpZgorCisgICAgaWYoIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSA+IDAgKQorICAgIHsKKyAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdCAqY2lwaGVyc3VpdGVfaW5mbzsKKyAgICAgICAgY2lwaGVyc3VpdGVfaW5mbyA9IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQoIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSApOworCisgICAgICAgIGlmKCBvcHQubWF4X3ZlcnNpb24gIT0gLTEgJiYKKyAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPm1pbl9taW5vcl92ZXIgPiBvcHQubWF4X3ZlcnNpb24gKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiZm9yY2VkIGNpcGhlcnN1aXRlIG5vdCBhbGxvd2VkIHdpdGggdGhpcyBwcm90b2NvbCB2ZXJzaW9uXG4iKTsKKyAgICAgICAgICAgIHJldCA9IDI7CisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGlmKCBvcHQubWluX3ZlcnNpb24gIT0gLTEgJiYKKyAgICAgICAgICAgIGNpcGhlcnN1aXRlX2luZm8tPm1heF9taW5vcl92ZXIgPCBvcHQubWluX3ZlcnNpb24gKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiZm9yY2VkIGNpcGhlcnN1aXRlIG5vdCBhbGxvd2VkIHdpdGggdGhpcyBwcm90b2NvbCB2ZXJzaW9uXG4iKTsKKyAgICAgICAgICAgIHJldCA9IDI7CisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdGhlIHNlcnZlciBzZWxlY3RzIGEgdmVyc2lvbiB0aGF0J3Mgbm90IHN1cHBvcnRlZCBieQorICAgICAgICAgKiB0aGlzIHN1aXRlLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gY29tbW9uIGNpcGhlcnN1aXRlLi4uICovCisgICAgICAgIGlmKCBvcHQubWF4X3ZlcnNpb24gPT0gLTEgfHwKKyAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA+IGNpcGhlcnN1aXRlX2luZm8tPm1heF9taW5vcl92ZXIgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBjaXBoZXJzdWl0ZV9pbmZvLT5tYXhfbWlub3JfdmVyOworICAgICAgICB9CisgICAgICAgIGlmKCBvcHQubWluX3ZlcnNpb24gPCBjaXBoZXJzdWl0ZV9pbmZvLT5taW5fbWlub3JfdmVyICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gY2lwaGVyc3VpdGVfaW5mby0+bWluX21pbm9yX3ZlcjsKKyAgICAgICAgICAgIC8qIERUTFMgc3RhcnRzIHdpdGggVExTIDEuMSAqLworICAgICAgICAgICAgaWYoIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uIDwgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgIH0KKworICAgICAgICAvKiBFbmFibGUgUkM0IGlmIG5lZWRlZCBhbmQgbm90IGV4cGxpY2l0bHkgZGlzYWJsZWQgKi8KKyAgICAgICAgaWYoIGNpcGhlcnN1aXRlX2luZm8tPmNpcGhlciA9PSBNQkVEVExTX0NJUEhFUl9BUkM0XzEyOCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBvcHQuYXJjNCA9PSBNQkVEVExTX1NTTF9BUkM0X0RJU0FCTEVEICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiZm9yY2VkIFJDNCBjaXBoZXJzdWl0ZSB3aXRoIFJDNCBkaXNhYmxlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0ID0gMjsKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvcHQuYXJjNCA9IE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRDsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIC8qCisgICAgICogVW5oZXhpZnkgdGhlIHByZS1zaGFyZWQga2V5IGlmIGFueSBpcyBnaXZlbgorICAgICAqLworICAgIGlmKCBzdHJsZW4oIG9wdC5wc2sgKSApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgICAgIHNpemVfdCBqOworCisgICAgICAgIGlmKCBzdHJsZW4oIG9wdC5wc2sgKSAlIDIgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJwcmUtc2hhcmVkIGtleSBub3QgdmFsaWQgaGV4XG4iKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHBza19sZW4gPSBzdHJsZW4oIG9wdC5wc2sgKSAvIDI7CisKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IHN0cmxlbiggb3B0LnBzayApOyBqICs9IDIgKQorICAgICAgICB7CisgICAgICAgICAgICBjID0gb3B0LnBza1tqXTsKKyAgICAgICAgICAgIGlmKCBjID49ICcwJyAmJiBjIDw9ICc5JyApCisgICAgICAgICAgICAgICAgYyAtPSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmKCBjID49ICdhJyAmJiBjIDw9ICdmJyApCisgICAgICAgICAgICAgICAgYyAtPSAnYScgLSAxMDsKKyAgICAgICAgICAgIGVsc2UgaWYoIGMgPj0gJ0EnICYmIGMgPD0gJ0YnICkKKyAgICAgICAgICAgICAgICBjIC09ICdBJyAtIDEwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJwcmUtc2hhcmVkIGtleSBub3QgdmFsaWQgaGV4XG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwc2tbIGogLyAyIF0gPSBjIDw8IDQ7CisKKyAgICAgICAgICAgIGMgPSBvcHQucHNrW2ogKyAxXTsKKyAgICAgICAgICAgIGlmKCBjID49ICcwJyAmJiBjIDw9ICc5JyApCisgICAgICAgICAgICAgICAgYyAtPSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmKCBjID49ICdhJyAmJiBjIDw9ICdmJyApCisgICAgICAgICAgICAgICAgYyAtPSAnYScgLSAxMDsKKyAgICAgICAgICAgIGVsc2UgaWYoIGMgPj0gJ0EnICYmIGMgPD0gJ0YnICkKKyAgICAgICAgICAgICAgICBjIC09ICdBJyAtIDEwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJwcmUtc2hhcmVkIGtleSBub3QgdmFsaWQgaGV4XG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwc2tbIGogLyAyIF0gfD0gYzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBpZiggb3B0LmFscG5fc3RyaW5nICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgcCA9IChjaGFyICopIG9wdC5hbHBuX3N0cmluZzsKKyAgICAgICAgaSA9IDA7CisKKyAgICAgICAgLyogTGVhdmUgcm9vbSBmb3IgYSBmaW5hbCBOVUxMIGluIGFscG5fbGlzdCAqLworICAgICAgICB3aGlsZSggaSA8IChpbnQpIHNpemVvZiBhbHBuX2xpc3QgLSAxICYmICpwICE9ICdcMCcgKQorICAgICAgICB7CisgICAgICAgICAgICBhbHBuX2xpc3RbaSsrXSA9IHA7CisKKyAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBzdHJpbmcgYW5kIG1vdmUgb24gdG8gbmV4dCBvbmUgKi8KKyAgICAgICAgICAgIHdoaWxlKCAqcCAhPSAnLCcgJiYgKnAgIT0gJ1wwJyApCisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgaWYoICpwID09ICcsJyApCisgICAgICAgICAgICAgICAgKnArKyA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLworCisgICAgLyoKKyAgICAgKiAwLiBJbml0aWFsaXplIHRoZSBSTkcgYW5kIHRoZSBzZXNzaW9uIGRhdGEKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkIC0weCV4XG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgLyoKKyAgICAgKiAxLjEuIExvYWQgdGhlIHRydXN0ZWQgQ0EKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBDQSByb290IGNlcnRpZmljYXRlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBzdHJsZW4oIG9wdC5jYV9wYXRoICkgKQorICAgICAgICBpZiggc3RyY21wKCBvcHQuY2FfcGF0aCwgIm5vbmUiICkgPT0gMCApCisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgoICZjYWNlcnQsIG9wdC5jYV9wYXRoICk7CisgICAgZWxzZSBpZiggc3RybGVuKCBvcHQuY2FfZmlsZSApICkKKyAgICAgICAgaWYoIHN0cmNtcCggb3B0LmNhX2ZpbGUsICJub25lIiApID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2FjZXJ0LCBvcHQuY2FfZmlsZSApOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorICAgICAgICBmb3IoIGkgPSAwOyBtYmVkdGxzX3Rlc3RfY2FzW2ldICE9IE5VTEw7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZjYWNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2Nhc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2FzX2xlbltpXSApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vsc2UKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0NFUlRTX0Mgbm90IGRlZmluZWQuIik7CisgICAgfQorI2VuZGlmCisgICAgaWYoIHJldCA8IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2sgKCVkIHNraXBwZWQpXG4iLCByZXQgKTsKKworICAgIC8qCisgICAgICogMS4yLiBMb2FkIG93biBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkKKyAgICAgKgorICAgICAqIChjYW4gYmUgc2tpcHBlZCBpZiBjbGllbnQgYXV0aGVudGljYXRpb24gaXMgbm90IHJlcXVpcmVkKQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIGNsaWVudCBjZXJ0LiBhbmQga2V5Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIHN0cmxlbiggb3B0LmNydF9maWxlICkgKQorICAgICAgICBpZiggc3RyY21wKCBvcHQuY3J0X2ZpbGUsICJub25lIiApID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2xpY2VydCwgb3B0LmNydF9maWxlICk7CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZjbGljZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2xpX2NydCwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2xpX2NydF9sZW4gKTsKKyNlbHNlCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DRVJUU19DIG5vdCBkZWZpbmVkLiIpOworICAgIH0KKyNlbmRpZgorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIHN0cmxlbiggb3B0LmtleV9maWxlICkgKQorICAgICAgICBpZiggc3RyY21wKCBvcHQua2V5X2ZpbGUsICJub25lIiApID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGtleSwgb3B0LmtleV9maWxlLCAiIiApOworICAgIGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DRVJUU19DKQorICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXksIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jbGlfa2V5LAorICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jbGlfa2V5X2xlbiwgTlVMTCwgMCApOworI2Vsc2UKKyAgICB7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0NFUlRTX0Mgbm90IGRlZmluZWQuIik7CisgICAgfQorI2VuZGlmCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisgICAgLyoKKyAgICAgKiAyLiBTdGFydCB0aGUgY29ubmVjdGlvbgorICAgICAqLworICAgIGlmKCBvcHQuc2VydmVyX2FkZHIgPT0gTlVMTCkKKyAgICAgICAgb3B0LnNlcnZlcl9hZGRyID0gb3B0LnNlcnZlcl9uYW1lOworCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ29ubmVjdGluZyB0byAlcy8lcy8lcy4uLiIsCisgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gPyAidGNwIiA6ICJ1ZHAiLAorICAgICAgICAgICAgb3B0LnNlcnZlcl9hZGRyLCBvcHQuc2VydmVyX3BvcnQgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfY29ubmVjdCggJnNlcnZlcl9mZCwgb3B0LnNlcnZlcl9hZGRyLCBvcHQuc2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfTkVUX1BST1RPX1RDUCA6IE1CRURUTFNfTkVUX1BST1RPX1VEUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9jb25uZWN0IHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBvcHQubmJpbyA+IDAgKQorICAgICAgICByZXQgPSBtYmVkdGxzX25ldF9zZXRfbm9uYmxvY2soICZzZXJ2ZXJfZmQgKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IG1iZWR0bHNfbmV0X3NldF9ibG9jayggJnNlcnZlcl9mZCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBuZXRfc2V0Xyhub24pYmxvY2soKSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAzLiBTZXR1cCBzdHVmZgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNldHRpbmcgdXAgdGhlIFNTTC9UTFMgc3RydWN0dXJlLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19DTElFTlQsCisgICAgICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggb3B0LmRlYnVnX2xldmVsID4gMCApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfdmVyaWZ5KCAmY29uZiwgbXlfdmVyaWZ5LCBOVUxMICk7CisjZW5kaWYKKworICAgIGlmKCBvcHQuYXV0aF9tb2RlICE9IERGTF9BVVRIX01PREUgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCAmY29uZiwgb3B0LmF1dGhfbW9kZSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19EVExTKQorICAgIGlmKCBvcHQuaHNfdG9fbWluICE9IERGTF9IU19UT19NSU4gfHwgb3B0LmhzX3RvX21heCAhPSBERkxfSFNfVE9fTUFYICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9oYW5kc2hha2VfdGltZW91dCggJmNvbmYsIG9wdC5oc190b19taW4sIG9wdC5oc190b19tYXggKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19EVExTICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9tYXhfZnJhZ19sZW4oICZjb25mLCBvcHQubWZsX2NvZGUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9tYXhfZnJhZ19sZW4gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgaWYoIG9wdC50cnVuY19obWFjICE9IERGTF9UUlVOQ19ITUFDICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYyggJmNvbmYsIG9wdC50cnVuY19obWFjICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKyAgICBpZiggb3B0LmV4dGVuZGVkX21zICE9IERGTF9FWFRFTkRFRF9NUyApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCggJmNvbmYsIG9wdC5leHRlbmRlZF9tcyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgaWYoIG9wdC5ldG0gIT0gREZMX0VUTSApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZW5jcnlwdF90aGVuX21hYyggJmNvbmYsIG9wdC5ldG0gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORykKKyAgICBpZiggb3B0LnJlY3NwbGl0ICE9IERGTF9SRUNTUExJVCApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2JjX3JlY29yZF9zcGxpdHRpbmcoICZjb25mLCBvcHQucmVjc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRU5BQkxFRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgaWYoIG9wdC5kaG1sZW4gIT0gREZMX0RITUxFTiApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZGhtX21pbl9iaXRsZW4oICZjb25mLCBvcHQuZGhtbGVuICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBpZiggb3B0LmFscG5fc3RyaW5nICE9IE5VTEwgKQorICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzKCAmY29uZiwgYWxwbl9saXN0ICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JuZyggJmNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25mX2RiZyggJmNvbmYsIG15X2RlYnVnLCBzdGRvdXQgKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcmVhZF90aW1lb3V0KCAmY29uZiwgb3B0LnJlYWRfdGltZW91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoICZjb25mLCBvcHQudGlja2V0cyApOworI2VuZGlmCisKKyAgICBpZiggb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdICE9IERGTF9GT1JDRV9DSVBIRVIgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlcyggJmNvbmYsIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICBpZiggb3B0LmFyYzQgIT0gREZMX0FSQzQgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2FyYzRfc3VwcG9ydCggJmNvbmYsIG9wdC5hcmM0ICk7CisjZW5kaWYKKworICAgIGlmKCBvcHQuYWxsb3dfbGVnYWN5ICE9IERGTF9BTExPV19MRUdBQ1kgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2xlZ2FjeV9yZW5lZ290aWF0aW9uKCAmY29uZiwgb3B0LmFsbG93X2xlZ2FjeSApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24oICZjb25mLCBvcHQucmVuZWdvdGlhdGlvbiApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggc3RyY21wKCBvcHQuY2FfcGF0aCwgIm5vbmUiICkgIT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5jYV9maWxlLCAibm9uZSIgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCAmY2FjZXJ0LCBOVUxMICk7CisgICAgfQorICAgIGlmKCBzdHJjbXAoIG9wdC5jcnRfZmlsZSwgIm5vbmUiICkgIT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5rZXlfZmlsZSwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCAmY29uZiwgJmNsaWNlcnQsICZwa2V5ICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9wc2soICZjb25mLCBwc2ssIHBza19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG9wdC5wc2tfaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggb3B0LnBza19pZGVudGl0eSApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfcHNrIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggb3B0Lm1pbl92ZXJzaW9uICE9IERGTF9NSU5fVkVSU0lPTiApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oICZjb25mLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIG9wdC5taW5fdmVyc2lvbiApOworCisgICAgaWYoIG9wdC5tYXhfdmVyc2lvbiAhPSBERkxfTUFYX1ZFUlNJT04gKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCAmY29uZiwgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLCBvcHQubWF4X3ZlcnNpb24gKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRkFMTEJBQ0tfU0NTVikKKyAgICBpZiggb3B0LmZhbGxiYWNrICE9IERGTF9GQUxMQkFDSyApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZmFsbGJhY2soICZjb25mLCBvcHQuZmFsbGJhY2sgKTsKKyNlbmRpZgorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSggJnNzbCwgb3B0LnNlcnZlcl9uYW1lICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQpCisgICAgaWYoIG9wdC5lY2pwYWtlX3B3ICE9IERGTF9FQ0pQQUtFX1BXICkKKyAgICB7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldF9oc19lY2pwYWtlX3Bhc3N3b3JkKCAmc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgb3B0LmVjanBha2VfcHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBvcHQuZWNqcGFrZV9wdyApICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0X2hzX2VjanBha2VfcGFzc3dvcmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBvcHQubmJpbyA9PSAyICkKKyAgICAgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJnNlcnZlcl9mZCwgbXlfc2VuZCwgbXlfcmVjdiwgTlVMTCApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJnNlcnZlcl9mZCwgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm5iaW8gPT0gMCA/IG1iZWR0bHNfbmV0X3JlY3ZfdGltZW91dCA6IE5VTEwgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKyAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoICZzc2wsICZ0aW1lciwgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNC4gSGFuZHNoYWtlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCV4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgIiAgICBVbmFibGUgdG8gdmVyaWZ5IHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgIkVpdGhlciBpdCBpcyBpbnZhbGlkLFxuIgorICAgICAgICAgICAgICAgICAgICAiICAgIG9yIHlvdSBkaWRuJ3Qgc2V0IGNhX2ZpbGUgb3IgY2FfcGF0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAidG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUuXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgQWx0ZXJuYXRpdmVseSwgeW91IG1heSB3YW50IHRvIHVzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiYXV0aF9tb2RlPW9wdGlvbmFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuIiApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gICAgWyBQcm90b2NvbCBpcyAlcyBdXG4gICAgWyBDaXBoZXJzdWl0ZSBpcyAlcyBdXG4iLAorICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X3ZlcnNpb24oICZzc2wgKSwgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlKCAmc3NsICkgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uKCAmc3NsICkgKSA+PSAwICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBSZWNvcmQgZXhwYW5zaW9uIGlzICVkIF1cbiIsIHJldCApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBSZWNvcmQgZXhwYW5zaW9uIGlzIHVua25vd24gKGNvbXByZXNzaW9uKSBdXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEgpCisgICAgbWJlZHRsc19wcmludGYoICIgICAgWyBNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAldSBdXG4iLAorICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBtYmVkdGxzX3NzbF9nZXRfbWF4X2ZyYWdfbGVuKCAmc3NsICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGlmKCBvcHQuYWxwbl9zdHJpbmcgIT0gTlVMTCApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICphbHAgPSBtYmVkdGxzX3NzbF9nZXRfYWxwbl9wcm90b2NvbCggJnNzbCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBbIEFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzICVzIF1cbiIsCisgICAgICAgICAgICAgICAgYWxwID8gYWxwIDogIihub25lKSIgKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBvcHQucmVjb25uZWN0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiAgLiBTYXZpbmcgc2Vzc2lvbiBmb3IgcmV1c2UuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZ2V0X3Nlc3Npb24oICZzc2wsICZzYXZlZF9zZXNzaW9uICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfZ2V0X3Nlc3Npb24gcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICAvKgorICAgICAqIDUuIFZlcmlmeSB0aGUgc2VydmVyIGNlcnRpZmljYXRlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gVmVyaWZ5aW5nIHBlZXIgWC41MDkgY2VydGlmaWNhdGUuLi4iICk7CisKKyAgICBpZiggKCBmbGFncyA9IG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCAmc3NsICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgdnJmeV9idWZbNTEyXTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCB2cmZ5X2J1Ziwgc2l6ZW9mKCB2cmZ5X2J1ZiApLCAiICAhICIsIGZsYWdzICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgdnJmeV9idWYgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgaWYoIG1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQoICZzc2wgKSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlZXIgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggKGNoYXIgKikgYnVmLCBzaXplb2YoIGJ1ZiApIC0gMSwgIiAgICAgICIsCisgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9wZWVyX2NlcnQoICZzc2wgKSApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgaWYoIG9wdC5yZW5lZ290aWF0ZSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBQZXJmb3JtIHJlbmVnb3RpYXRpb24gKHRoaXMgbXVzdCBiZSBkb25lIHdoZW4gdGhlIHNlcnZlciBpcyB3YWl0aW5nCisgICAgICAgICAqIGZvciBpbnB1dCBmcm9tIG91ciBzaWRlKS4KKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFBlcmZvcm1pbmcgcmVuZWdvdGlhdGlvbi4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKyAgICAgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoICZzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKyAgICAvKgorICAgICAqIDYuIFdyaXRlIHRoZSBHRVQgcmVxdWVzdAorICAgICAqLworICAgIHJldHJ5X2xlZnQgPSBvcHQubWF4X3Jlc2VuZDsKK3NlbmRfcmVxdWVzdDoKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSB0byBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBtYmVkdGxzX3NucHJpbnRmKCAoY2hhciAqKSBidWYsIHNpemVvZihidWYpIC0gMSwgR0VUX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgICAgIG9wdC5yZXF1ZXN0X3BhZ2UgKTsKKyAgICB0YWlsX2xlbiA9IChpbnQpIHN0cmxlbiggR0VUX1JFUVVFU1RfRU5EICk7CisKKyAgICAvKiBBZGQgcGFkZGluZyB0byBHRVQgcmVxdWVzdCB0byByZWFjaCBvcHQucmVxdWVzdF9zaXplIGluIGxlbmd0aCAqLworICAgIGlmKCBvcHQucmVxdWVzdF9zaXplICE9IERGTF9SRVFVRVNUX1NJWkUgJiYKKyAgICAgICAgbGVuICsgdGFpbF9sZW4gPCBvcHQucmVxdWVzdF9zaXplICkKKyAgICB7CisgICAgICAgIG1lbXNldCggYnVmICsgbGVuLCAnQScsIG9wdC5yZXF1ZXN0X3NpemUgLSBsZW4gLSB0YWlsX2xlbiApOworICAgICAgICBsZW4gKz0gb3B0LnJlcXVlc3Rfc2l6ZSAtIGxlbiAtIHRhaWxfbGVuOworICAgIH0KKworICAgIHN0cm5jcHkoIChjaGFyICopIGJ1ZiArIGxlbiwgR0VUX1JFUVVFU1RfRU5ELCBzaXplb2YoYnVmKSAtIGxlbiAtIDEgKTsKKyAgICBsZW4gKz0gdGFpbF9sZW47CisKKyAgICAvKiBUcnVuY2F0ZSBpZiByZXF1ZXN0IHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSAibmF0dXJhbCIgc2l6ZSAqLworICAgIGlmKCBvcHQucmVxdWVzdF9zaXplICE9IERGTF9SRVFVRVNUX1NJWkUgJiYKKyAgICAgICAgbGVuID4gb3B0LnJlcXVlc3Rfc2l6ZSApCisgICAgeworICAgICAgICBsZW4gPSBvcHQucmVxdWVzdF9zaXplOworCisgICAgICAgIC8qIFN0aWxsIGVuZCB3aXRoIFxyXG4gdW5sZXNzIHRoYXQncyByZWFsbHkgbm90IHBvc3NpYmxlICovCisgICAgICAgIGlmKCBsZW4gPj0gMiApIGJ1ZltsZW4gLSAyXSA9ICdccic7CisgICAgICAgIGlmKCBsZW4gPj0gMSApIGJ1ZltsZW4gLSAxXSA9ICdcbic7CisgICAgfQorCisgICAgaWYoIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSApCisgICAgeworICAgICAgICBmb3IoIHdyaXR0ZW4gPSAwLCBmcmFncyA9IDA7IHdyaXR0ZW4gPCBsZW47IHdyaXR0ZW4gKz0gcmV0LCBmcmFncysrICkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiArIHdyaXR0ZW4sIGxlbiAtIHdyaXR0ZW4gKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgICAgICAgICAgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qIE5vdCBzdHJlYW0sIHNvIGRhdGFncmFtICovCisgICAgeworICAgICAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICAgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKworICAgICAgICBpZiggcmV0IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgZnJhZ3MgPSAxOworICAgICAgICB3cml0dGVuID0gcmV0OworICAgIH0KKworICAgIGJ1Zlt3cml0dGVuXSA9ICdcMCc7CisgICAgbWJlZHRsc19wcmludGYoICIgJWQgYnl0ZXMgd3JpdHRlbiBpbiAlZCBmcmFnbWVudHNcblxuJXNcbiIsIHdyaXR0ZW4sIGZyYWdzLCAoY2hhciAqKSBidWYgKTsKKworICAgIC8qCisgICAgICogNy4gUmVhZCB0aGUgSFRUUCByZXNwb25zZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA8IFJlYWQgZnJvbSBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRMUyBhbmQgRFRMUyBuZWVkIGRpZmZlcmVudCByZWFkaW5nIHN0eWxlcyAoc3RyZWFtIHZzIGRhdGFncmFtKQorICAgICAqLworICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKworICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYoIHJldCA8PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5XG4iICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbG9zZV9ub3RpZnk7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgY29ubmVjdGlvbiB3YXMgcmVzZXQgYnkgcGVlclxuIiApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVjb25uZWN0OworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkIC0weCV4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgICAgICBidWZbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzIiwgbGVuLCAoY2hhciAqKSBidWYgKTsKKworICAgICAgICAgICAgLyogRW5kIG9mIG1lc3NhZ2Ugc2hvdWxkIGJlIGRldGVjdGVkIGFjY29yZGluZyB0byB0aGUgc3ludGF4IG9mIHRoZQorICAgICAgICAgICAgICogYXBwbGljYXRpb24gcHJvdG9jb2wgKGVnIEhUVFApLCBqdXN0IHVzZSBhIGR1bW15IHRlc3QgaGVyZS4gKi8KKyAgICAgICAgICAgIGlmKCByZXQgPiAwICYmIGJ1ZltsZW4tMV0gPT0gJ1xuJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSggMSApOworICAgIH0KKyAgICBlbHNlIC8qIE5vdCBzdHJlYW0sIHNvIGRhdGFncmFtICovCisgICAgeworICAgICAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgICAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworICAgICAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggcmV0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUOgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiB0aW1lb3V0XG4iICk7CisgICAgICAgICAgICAgICAgICAgIGlmKCByZXRyeV9sZWZ0LS0gPiAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2VuZF9yZXF1ZXN0OworICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGdyYWNlZnVsbHlcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBjbG9zZV9ub3RpZnk7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkIC0weCV4XG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzIiwgbGVuLCAoY2hhciAqKSBidWYgKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDdiLiBTaW11bGF0ZSBoYXJkIHJlc2V0IGFuZCByZWNvbm5lY3QgZnJvbSBzYW1lIHBvcnQ/CisgICAgICovCisgICAgaWYoIG9wdC5yZWNvbm5lY3RfaGFyZCAhPSAwICkKKyAgICB7CisgICAgICAgIG9wdC5yZWNvbm5lY3RfaGFyZCA9IDA7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUmVzdGFydGluZyBjb25uZWN0aW9uIGZyb20gc2FtZSBwb3J0Li4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoICZzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0IHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgICAgIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIGdvdG8gc2VuZF9yZXF1ZXN0OworICAgIH0KKworICAgIC8qCisgICAgICogN2MuIENvbnRpbnVlIGRvaW5nIGRhdGEgZXhjaGFuZ2VzPworICAgICAqLworICAgIGlmKCAtLW9wdC5leGNoYW5nZXMgPiAwICkKKyAgICAgICAgZ290byBzZW5kX3JlcXVlc3Q7CisKKyAgICAvKgorICAgICAqIDguIERvbmUsIGNsZWFubHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KK2Nsb3NlX25vdGlmeToKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDbG9zaW5nIHRoZSBjb25uZWN0aW9uLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKiBObyBlcnJvciBjaGVja2luZywgdGhlIGNvbm5lY3Rpb24gbWlnaHQgYmUgY2xvc2VkIGFscmVhZHkgKi8KKyAgICBkbyByZXQgPSBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoICZzc2wgKTsKKyAgICB3aGlsZSggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisgICAgcmV0ID0gMDsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIGRvbmVcbiIgKTsKKworICAgIC8qCisgICAgICogOS4gUmVjb25uZWN0PworICAgICAqLworcmVjb25uZWN0OgorICAgIGlmKCBvcHQucmVjb25uZWN0ICE9IDAgKQorICAgIHsKKyAgICAgICAgLS1vcHQucmVjb25uZWN0OworCisgICAgICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZzZXJ2ZXJfZmQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKyAgICAgICAgaWYoIG9wdC5yZWNvX2RlbGF5ID4gMCApCisgICAgICAgICAgICBtYmVkdGxzX25ldF91c2xlZXAoIDEwMDAwMDAgKiBvcHQucmVjb19kZWxheSApOworI2VuZGlmCisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUmVjb25uZWN0aW5nIHdpdGggc2F2ZWQgc2Vzc2lvbi4uLiIgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXNzaW9uX3Jlc2V0KCAmc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbiggJnNzbCwgJnNhdmVkX3Nlc3Npb24gKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb24gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9jb25uZWN0KCAmc2VydmVyX2ZkLCBvcHQuc2VydmVyX2FkZHIsIG9wdC5zZXJ2ZXJfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX05FVF9QUk9UT19UQ1AgOiBNQkVEVExTX05FVF9QUk9UT19VRFAgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9jb25uZWN0IHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBvcHQubmJpbyA+IDAgKQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19uZXRfc2V0X25vbmJsb2NrKCAmc2VydmVyX2ZkICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfbmV0X3NldF9ibG9jayggJnNlcnZlcl9mZCApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBuZXRfc2V0Xyhub24pYmxvY2soKSByZXR1cm5lZCAtMHgleFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICBnb3RvIHNlbmRfcmVxdWVzdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENsZWFudXAgYW5kIGV4aXQKKyAgICAgKi8KK2V4aXQ6CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIkxhc3QgZXJyb3Igd2FzOiAtMHglWCAtICVzXG5cbiIsIC1yZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJnNlcnZlcl9mZCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2xpY2VydCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNhY2VydCApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrZXkgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZSggJnNhdmVkX3Nlc3Npb24gKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgLy8gU2hlbGwgY2FuIG5vdCBoYW5kbGUgbGFyZ2UgZXhpdCBudW1iZXJzIC0+IDEgZm9yIGVycm9ycworICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgcmV0ID0gMTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1NTTF9UTFNfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX0NMSV9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJgorICAgICAgICAgIE1CRURUTFNfQ1RSX0RSQkdfQyBNQkVEVExTX1RJTUlOR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9mb3JrX3NlcnZlci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfZm9ya19zZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjI0ODk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfZm9ya19zZXJ2ZXIuYwpAQCAtMCwwICsxLDQxNiBAQAorLyoKKyAqICBTU0wgc2VydmVyIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2luZyBmb3JrKCkgZm9yIGhhbmRsaW5nIG11bHRpcGxlIGNsaWVudHMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90CisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19USU1JTkdfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICFkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgKCh2b2lkKSBhcmdjKTsKKyAgICAoKHZvaWQpIGFyZ3YpOworCisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfQ0VSVFNfQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgIgorICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfU1NMX1RMU19DIGFuZC9vciBNQkVEVExTX1NTTF9TUlZfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfVElNSU5HX0MgYW5kL29yIE1CRURUTFNfUEVNX1BBUlNFX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbGlmIGRlZmluZWQoX1dJTjMyKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJfV0lOMzIgZGVmaW5lZC4gVGhpcyBhcHBsaWNhdGlvbiByZXF1aXJlcyBmb3JrKCkgYW5kIHNpZ25hbHMgIgorICAgICAgICAgICAidG8gd29yayBjb3JyZWN0bHkuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisjaW5jbHVkZSAibWJlZHRscy9uZXRfc29ja2V0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKEVGSVg2NCkgfHwgZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIEhUVFBfUkVTUE9OU0UgXAorICAgICJIVFRQLzEuMCAyMDAgT0tcclxuQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcclxuXHJcbiIgXAorICAgICI8aDI+bWJlZCBUTFMgVGVzdCBTZXJ2ZXI8L2gyPlxyXG4iIFwKKyAgICAiPHA+U3VjY2Vzc2Z1bCBjb25uZWN0aW9uIHVzaW5nOiAlczwvcD5cclxuIgorCisjZGVmaW5lIERFQlVHX0xFVkVMIDAKKworc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciApCit7CisgICAgKCh2b2lkKSBsZXZlbCk7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6ICVzIiwgZmlsZSwgbGluZSwgc3RyICk7CisgICAgZmZsdXNoKCAgKEZJTEUgKikgY3R4ICApOworfQorCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldCwgbGVuLCBjbnQgPSAwLCBwaWQ7CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBsaXN0ZW5fZmQsIGNsaWVudF9mZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gInNzbF9mb3JrX3NlcnZlciI7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IHNydmNlcnQ7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXk7CisKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmbGlzdGVuX2ZkICk7CisgICAgbWJlZHRsc19uZXRfaW5pdCggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwa2V5ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmc3J2Y2VydCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBzaWduYWwoIFNJR0NITEQsIFNJR19JR04gKTsKKworICAgIC8qCisgICAgICogMC4gSW5pdGlhbCBzZWVkaW5nIG9mIHRoZSBSTkcKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIEluaXRpYWwgc2VlZGluZyBvZiB0aGUgcmFuZG9tIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuIExvYWQgdGhlIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBSU0Ega2V5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgc2VydmVyIGNlcnQuIGFuZCBrZXkuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIC8qCisgICAgICogVGhpcyBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNlcyBlbWJlZGRlZCB0ZXN0IGNlcnRpZmljYXRlcy4KKyAgICAgKiBJbnN0ZWFkLCB5b3UgbWF5IHdhbnQgdG8gdXNlIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgpIHRvIHJlYWQgdGhlCisgICAgICogc2VydmVyIGFuZCBDQSBjZXJ0aWZpY2F0ZXMsIGFzIHdlbGwgYXMgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCkuCisgICAgICovCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2FzX3BlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSAgbWJlZHRsc19wa19wYXJzZV9rZXkoICZwa2V5LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9rZXlfbGVuLCBOVUxMLCAwICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMWIuIFByZXBhcmUgU1NMIGNvbmZpZ3VyYXRpb24KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDb25maWd1cmluZyBTU0wuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyggJmNvbmYsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX1NFUlZFUiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkISAgbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgc3J2Y2VydC5uZXh0LCBOVUxMICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZzcnZjZXJ0LCAmcGtleSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMi4gU2V0dXAgdGhlIGxpc3RlbmluZyBUQ1Agc29ja2V0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQmluZCBvbiBodHRwczovL2xvY2FsaG9zdDo0NDMzLyAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2JpbmQoICZsaXN0ZW5fZmQsIE5VTEwsICI0NDMzIiwgTUJFRFRMU19ORVRfUFJPVE9fVENQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfbmV0X2JpbmQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgd2hpbGUoIDEgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogMy4gV2FpdCB1bnRpbCBhIGNsaWVudCBjb25uZWN0cworICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19uZXRfaW5pdCggJmNsaWVudF9mZCApOworICAgICAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gV2FpdGluZyBmb3IgYSByZW1vdGUgY29ubmVjdGlvbiAuLi5cbiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9hY2NlcHQoICZsaXN0ZW5fZmQsICZjbGllbnRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZCEgIG1iZWR0bHNfbmV0X2FjY2VwdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIDMuNS4gRm9ya2luZyBzZXJ2ZXIgdGhyZWFkCisgICAgICAgICAqLworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEZvcmtpbmcgdG8gaGFuZGxlIGNvbm5lY3Rpb24gLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHBpZCA9IGZvcmsoKTsKKworICAgICAgICBpZiggcGlkIDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgZmFpbGVkISAgZm9yayByZXR1cm5lZCAlZFxuXG4iLCBwaWQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBwaWQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCAmY3RyX2RyYmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopICJwYXJlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICkgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWQhICBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19uZXRfaW5pdCggJmxpc3Rlbl9mZCApOworCisgICAgICAgIHBpZCA9IGdldHBpZCgpOworCisgICAgICAgIC8qCisgICAgICAgICAqIDQuIFNldHVwIHN0dWZmCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogU2V0dGluZyB1cCB0aGUgU1NMIGRhdGEuXG4iLCBwaWQgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3Jlc2VlZCggJmN0cl9kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopICJjaGlsZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAicGlkICVkOiBTU0wgc2V0dXAgZmFpbGVkISAgbWJlZHRsc19jdHJfZHJiZ19yZXNlZWQgcmV0dXJuZWQgJWRcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgcGlkLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAicGlkICVkOiBTU0wgc2V0dXAgZmFpbGVkISAgbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgcGlkLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfc3NsX3NldF9iaW8oICZzc2wsICZjbGllbnRfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsIE5VTEwgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogU1NMIHNldHVwIG9rXG4iLCBwaWQgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiA1LiBIYW5kc2hha2UKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiBQZXJmb3JtaW5nIHRoZSBTU0wvVExTIGhhbmRzaGFrZS5cbiIsIHBpZCApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCAmJiByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgInBpZCAlZDogU1NMIGhhbmRzaGFrZSBmYWlsZWQhICBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQgJWRcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwaWQgJWQ6IFNTTCBoYW5kc2hha2Ugb2tcbiIsIHBpZCApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDYuIFJlYWQgdGhlIEhUVFAgUmVxdWVzdAorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJwaWQgJWQ6IFN0YXJ0IHJlYWRpbmcgZnJvbSBjbGllbnQuXG4iLCBwaWQgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworCisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYoIHJldCA8PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZ3JhY2VmdWxseVxuIiwgcGlkICk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJwaWQgJWQ6IGNvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXJcbiIsIHBpZCApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiBtYmVkdGxzX3NzbF9yZWFkIHJldHVybmVkICVkXG4iLCBwaWQsIHJldCApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiAlZCBieXRlcyByZWFkXG5cbiVzIiwgcGlkLCBsZW4sIChjaGFyICopIGJ1ZiApOworCisgICAgICAgICAgICBpZiggcmV0ID4gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoIDEgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiA3LiBXcml0ZSB0aGUgMjAwIFJlc3BvbnNlCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBpZCAlZDogU3RhcnQgd3JpdGluZyB0byBjbGllbnQuXG4iLCBwaWQgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsIEhUVFBfUkVTUE9OU0UsCisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlKCAmc3NsICkgKTsKKworICAgICAgICB3aGlsZSggY250KysgPCAxMDAgKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSggJnNzbCwgYnVmLCBsZW4gKSApIDw9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpZCAlZDogV3JpdGUgZmFpbGVkISAgcGVlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb25cblxuIiwgcGlkICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWQgJWQ6IFdyaXRlIGZhaWxlZCEgIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkLCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicGlkICVkOiAlZCBieXRlcyB3cml0dGVuXG5cbiVzXG4iLCBwaWQsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfbmV0X3VzbGVlcCggMTAwMDAwMCApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5ICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19DRVJUU19DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfVExTX0MgJiYgTUJFRFRMU19TU0xfU1JWX0MgJiYgTUJFRFRMU19ORVRfQyAmJgorICAgICAgICAgIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmIE1CRURUTFNfUEVNX1BBUlNFX0MgJiYKKyAgICAgICAgICAhIF9XSU4zMiAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfbWFpbF9jbGllbnQuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX21haWxfY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyMjc3MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX21haWxfY2xpZW50LmMKQEAgLTAsMCArMSw4NDIgQEAKKy8qCisgKiAgU1NMIGNsaWVudCBmb3IgU01UUCBzZXJ2ZXJzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QgCisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU1NMX0NMSV9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19ORVRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TU0xfVExTX0MgYW5kL29yIE1CRURUTFNfU1NMX0NMSV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX0NUUl9EUkJHX0MgYW5kL29yIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAiCisgICAgICAgICAgICJub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMvYmFzZTY0LmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKEVGSVg2NCkgfHwgZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorI3ByYWdtYSBjb21tZW50KCBsaWIsICJ3czIubGliIiApCisjZWxzZQorI3ByYWdtYSBjb21tZW50KCBsaWIsICJ3czJfMzIubGliIiApCisjZW5kaWYKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworI2VuZGlmCisKKyNkZWZpbmUgREZMX1NFUlZFUl9OQU1FICAgICAgICAgImxvY2FsaG9zdCIKKyNkZWZpbmUgREZMX1NFUlZFUl9QT1JUICAgICAgICAgIjQ2NSIKKyNkZWZpbmUgREZMX1VTRVJfTkFNRSAgICAgICAgICAgInVzZXIiCisjZGVmaW5lIERGTF9VU0VSX1BXRCAgICAgICAgICAgICJwYXNzd29yZCIKKyNkZWZpbmUgREZMX01BSUxfRlJPTSAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX01BSUxfVE8gICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0RFQlVHX0xFVkVMICAgICAgICAgMAorI2RlZmluZSBERkxfQ0FfRklMRSAgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfQ1JUX0ZJTEUgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfS0VZX0ZJTEUgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfRk9SQ0VfQ0lQSEVSICAgICAgICAwCisjZGVmaW5lIERGTF9NT0RFICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX0FVVEhFTlRJQ0FUSU9OICAgICAgMAorCisjZGVmaW5lIE1PREVfU1NMX1RMUyAgICAgICAgICAgIDAKKyNkZWZpbmUgTU9ERV9TVEFSVFRMUyAgICAgICAgICAgMAorCisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorI2RlZmluZSBVU0FHRV9BVVRIIFwKKyAgICAiICAgIGF1dGhlbnRpY2F0aW9uPSUlZCAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIHVzZXJfbmFtZT0lJXMgICAgICAgIGRlZmF1bHQ6IFwidXNlclwiXG4iICAgICAgICAgIFwKKyAgICAiICAgIHVzZXJfcHdkPSUlcyAgICAgICAgIGRlZmF1bHQ6IFwicGFzc3dvcmRcIlxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfQVVUSCBcCisgICAgIiAgICBhdXRoZW50aWNhdGlvbiBvcHRpb25zIGRpc2FibGVkLiAoUmVxdWlyZSBNQkVEVExTX0JBU0U2NF9DKVxuIgorI2VuZGlmIC8qIE1CRURUTFNfQkFTRTY0X0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNkZWZpbmUgVVNBR0VfSU8gXAorICAgICIgICAgY2FfZmlsZT0lJXMgICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZClcbiIgXAorICAgICIgICAgY3J0X2ZpbGU9JSVzICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZClcbiIgXAorICAgICIgICAga2V5X2ZpbGU9JSVzICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0lPIFwKKyAgICAiICAgIE5vIGZpbGUgb3BlcmF0aW9ucyBhdmFpbGFibGUgKE1CRURUTFNfRlNfSU8gbm90IGRlZmluZWQpXG4iCisjZW5kaWYgLyogTUJFRFRMU19GU19JTyAqLworCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IHNzbF9tYWlsX2NsaWVudCBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNlcnZlcl9uYW1lPSUlcyAgICAgIGRlZmF1bHQ6IGxvY2FsaG9zdFxuIiAgICAgICAgIFwKKyAgICAiICAgIHNlcnZlcl9wb3J0PSUlZCAgICAgIGRlZmF1bHQ6IDQ0MzNcbiIgICAgICAgICAgICAgIFwKKyAgICAiICAgIGRlYnVnX2xldmVsPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIG1vZGU9JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKFNTTC9UTFMpICgxIGZvciBTVEFSVFRMUylcbiIgIFwKKyAgICBVU0FHRV9BVVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIG1haWxfZnJvbT0lJXMgICAgICAgIGRlZmF1bHQ6IFwiXCJcbiIgICAgICAgICAgICAgIFwKKyAgICAiICAgIG1haWxfdG89JSVzICAgICAgICAgIGRlZmF1bHQ6IFwiXCJcbiIgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGZvcmNlX2NpcGhlcnN1aXRlPTxuYW1lPiAgICBkZWZhdWx0OiBhbGwgZW5hYmxlZFxuIlwKKyAgICAiIGFjY2VwdGFibGUgY2lwaGVyc3VpdGUgbmFtZXM6XG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9uYW1lOyAgICAvKiBob3N0bmFtZSBvZiB0aGUgc2VydmVyIChjbGllbnQgb25seSkgICAgICovCisgICAgY29uc3QgY2hhciAqc2VydmVyX3BvcnQ7ICAgIC8qIHBvcnQgb24gd2hpY2ggdGhlIHNzbCBzZXJ2aWNlIHJ1bnMgICAgICAgKi8KKyAgICBpbnQgZGVidWdfbGV2ZWw7ICAgICAgICAgICAgLyogbGV2ZWwgb2YgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBhdXRoZW50aWNhdGlvbjsgICAgICAgICAvKiBpZiBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCAgICAgICAgICAgICovCisgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgIC8qIFNTTC9UTFMgKDApIG9yIFNUQVJUVExTICgxKSAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICp1c2VyX25hbWU7ICAgICAgLyogdXNlcm5hbWUgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKnVzZXJfcHdkOyAgICAgICAvKiBwYXNzd29yZCB0byB1c2UgZm9yIGF1dGhlbnRpY2F0aW9uICAgICAgICovCisgICAgY29uc3QgY2hhciAqbWFpbF9mcm9tOyAgICAgIC8qIEUtTWFpbCBhZGRyZXNzIHRvIHVzZSBhcyBzZW5kZXIgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICptYWlsX3RvOyAgICAgICAgLyogRS1NYWlsIGFkZHJlc3MgdG8gdXNlIGFzIHJlY2lwaWVudCAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmNhX2ZpbGU7ICAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZShzKSAgICAgICovCisgICAgY29uc3QgY2hhciAqY3J0X2ZpbGU7ICAgICAgIC8qIHRoZSBmaWxlIHdpdGggdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSAgICAgKi8KKyAgICBjb25zdCBjaGFyICprZXlfZmlsZTsgICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgY2xpZW50IGtleSAgICAgICAgICAgICAqLworICAgIGludCBmb3JjZV9jaXBoZXJzdWl0ZVsyXTsgICAvKiBwcm90b2NvbC9jaXBoZXJzdWl0ZSB0byB1c2UsIG9yIGFsbCAgICAgICovCit9IG9wdDsKKworc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciApCit7CisgICAgKCh2b2lkKSBsZXZlbCk7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIChGSUxFICopIGN0eCwgIiVzOiUwNGQ6ICVzIiwgZmlsZSwgbGluZSwgc3RyICk7CisgICAgZmZsdXNoKCAgKEZJTEUgKikgY3R4ICApOworfQorCitzdGF0aWMgaW50IGRvX2hhbmRzaGFrZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQzMl90IGZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIG1lbXNldChidWYsIDAsIDEwMjQpOworCisgICAgLyoKKyAgICAgKiA0LiBIYW5kc2hha2UKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZXJmb3JtaW5nIHRoZSBTU0wvVExTIGhhbmRzaGFrZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfRVJST1JfQykKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgKGNoYXIgKikgYnVmLCAxMDI0ICk7CisjZW5kaWYKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCAlZDogJXNcblxuIiwgcmV0LCBidWYgKTsKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gICAgWyBDaXBoZXJzdWl0ZSBpcyAlcyBdXG4iLAorICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlKCBzc2wgKSApOworCisgICAgLyoKKyAgICAgKiA1LiBWZXJpZnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFZlcmlmeWluZyBwZWVyIFguNTA5IGNlcnRpZmljYXRlLi4uIiApOworCisgICAgLyogSW4gcmVhbCBsaWZlLCB3ZSBwcm9iYWJseSB3YW50IHRvIGJhaWwgb3V0IHdoZW4gcmV0ICE9IDAgKi8KKyAgICBpZiggKCBmbGFncyA9IG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCBzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciB2cmZ5X2J1Zls1MTJdOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2luZm8oIHZyZnlfYnVmLCBzaXplb2YoIHZyZnlfYnVmICksICIgICEgIiwgZmxhZ3MgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCB2cmZ5X2J1ZiApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZWVyIGNlcnRpZmljYXRlIGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggKGNoYXIgKikgYnVmLCBzaXplb2YoIGJ1ZiApIC0gMSwgIiAgICAgICIsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X3BlZXJfY2VydCggc3NsICkgKTsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHdyaXRlX3NzbF9kYXRhKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfcHJpbnRmKCJcbiVzIiwgYnVmKTsKKyAgICB3aGlsZSggbGVuICYmICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoIHNzbCwgYnVmLCBsZW4gKSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxMjhdOworICAgIGNoYXIgY29kZVs0XTsKKyAgICBzaXplX3QgaSwgaWR4ID0gMDsKKworICAgIG1iZWR0bHNfcHJpbnRmKCJcbiVzIiwgYnVmKTsKKyAgICB3aGlsZSggbGVuICYmICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoIHNzbCwgYnVmLCBsZW4gKSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgZG8KKyAgICB7CisgICAgICAgIGxlbiA9IHNpemVvZiggZGF0YSApIC0gMTsKKyAgICAgICAgbWVtc2V0KCBkYXRhLCAwLCBzaXplb2YoIGRhdGEgKSApOworICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCBzc2wsIGRhdGEsIGxlbiApOworCisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkgKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiVzIiwgZGF0YSk7CisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGRhdGFbaV0gIT0gJ1xuJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIGlkeCA8IDQgKQorICAgICAgICAgICAgICAgICAgICBjb2RlWyBpZHgrKyBdID0gZGF0YVtpXTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIGlkeCA9PSA0ICYmIGNvZGVbMF0gPj0gJzAnICYmIGNvZGVbMF0gPD0gJzknICYmIGNvZGVbM10gPT0gJyAnICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb2RlWzNdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXRvaSggY29kZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZHggPSAwOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlKCAxICk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfYW5kX2dldF9yZXNwb25zZSggbWJlZHRsc19uZXRfY29udGV4dCAqc29ja19mZCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxMjhdOworICAgIGNoYXIgY29kZVs0XTsKKyAgICBzaXplX3QgaSwgaWR4ID0gMDsKKworICAgIG1iZWR0bHNfcHJpbnRmKCJcbiVzIiwgYnVmKTsKKyAgICBpZiggbGVuICYmICggcmV0ID0gbWJlZHRsc19uZXRfc2VuZCggc29ja19mZCwgYnVmLCBsZW4gKSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfd3JpdGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZG8KKyAgICB7CisgICAgICAgIGxlbiA9IHNpemVvZiggZGF0YSApIC0gMTsKKyAgICAgICAgbWVtc2V0KCBkYXRhLCAwLCBzaXplb2YoIGRhdGEgKSApOworICAgICAgICByZXQgPSBtYmVkdGxzX25ldF9yZWN2KCBzb2NrX2ZkLCBkYXRhLCBsZW4gKTsKKworICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggImZhaWxlZFxuICAhIHJlYWQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBkYXRhW2xlbl0gPSAnXDAnOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4lcyIsIGRhdGEpOworICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBkYXRhW2ldICE9ICdcbicgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBpZHggPCA0ICkKKyAgICAgICAgICAgICAgICAgICAgY29kZVsgaWR4KysgXSA9IGRhdGFbaV07CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBpZHggPT0gNCAmJiBjb2RlWzBdID49ICcwJyAmJiBjb2RlWzBdIDw9ICc5JyAmJiBjb2RlWzNdID09ICcgJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29kZVszXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0b2koIGNvZGUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSggMSApOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDAsIGxlbjsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IHNlcnZlcl9mZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfQkFTRTY0X0MpCisgICAgdW5zaWduZWQgY2hhciBiYXNlWzEwMjRdOworI2VuZGlmCisgICAgY2hhciBob3N0bmFtZVszMl07CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJzc2xfbWFpbF9jbGllbnQiOworCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNlcnQ7CisgICAgbWJlZHRsc194NTA5X2NydCBjbGljZXJ0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwa2V5OworICAgIGludCBpOworICAgIHNpemVfdCBuOworICAgIGNoYXIgKnAsICpxOworICAgIGNvbnN0IGludCAqbGlzdDsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIG1lbW9yeSByZWZlcmVuY2VzIGFyZSB2YWxpZCBpbiBjYXNlIHdlIGV4aXQgZWFybHkuCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtZW1zZXQoICZidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjbGljZXJ0ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleSApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworCisgICAgICAgIGxpc3QgPSBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcygpOworICAgICAgICB3aGlsZSggKmxpc3QgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZigiICAgICVzXG4iLCBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfbmFtZSggKmxpc3QgKSApOworICAgICAgICAgICAgbGlzdCsrOworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0LnNlcnZlcl9uYW1lICAgICAgICAgPSBERkxfU0VSVkVSX05BTUU7CisgICAgb3B0LnNlcnZlcl9wb3J0ICAgICAgICAgPSBERkxfU0VSVkVSX1BPUlQ7CisgICAgb3B0LmRlYnVnX2xldmVsICAgICAgICAgPSBERkxfREVCVUdfTEVWRUw7CisgICAgb3B0LmF1dGhlbnRpY2F0aW9uICAgICAgPSBERkxfQVVUSEVOVElDQVRJT047CisgICAgb3B0Lm1vZGUgICAgICAgICAgICAgICAgPSBERkxfTU9ERTsKKyAgICBvcHQudXNlcl9uYW1lICAgICAgICAgICA9IERGTF9VU0VSX05BTUU7CisgICAgb3B0LnVzZXJfcHdkICAgICAgICAgICAgPSBERkxfVVNFUl9QV0Q7CisgICAgb3B0Lm1haWxfZnJvbSAgICAgICAgICAgPSBERkxfTUFJTF9GUk9NOworICAgIG9wdC5tYWlsX3RvICAgICAgICAgICAgID0gREZMX01BSUxfVE87CisgICAgb3B0LmNhX2ZpbGUgICAgICAgICAgICAgPSBERkxfQ0FfRklMRTsKKyAgICBvcHQuY3J0X2ZpbGUgICAgICAgICAgICA9IERGTF9DUlRfRklMRTsKKyAgICBvcHQua2V5X2ZpbGUgICAgICAgICAgICA9IERGTF9LRVlfRklMRTsKKyAgICBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF09IERGTF9GT1JDRV9DSVBIRVI7CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9uYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9uYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VydmVyX3BvcnQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkZWJ1Z19sZXZlbCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRlYnVnX2xldmVsID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kZWJ1Z19sZXZlbCA8IDAgfHwgb3B0LmRlYnVnX2xldmVsID4gNjU1MzUgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYXV0aGVudGljYXRpb24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5hdXRoZW50aWNhdGlvbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuYXV0aGVudGljYXRpb24gPCAwIHx8IG9wdC5hdXRoZW50aWNhdGlvbiA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibW9kZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm1vZGUgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0Lm1vZGUgPCAwIHx8IG9wdC5tb2RlID4gMSApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ1c2VyX25hbWUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQudXNlcl9uYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidXNlcl9wd2QiICkgPT0gMCApCisgICAgICAgICAgICBvcHQudXNlcl9wd2QgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtYWlsX2Zyb20iICkgPT0gMCApCisgICAgICAgICAgICBvcHQubWFpbF9mcm9tID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWFpbF90byIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5tYWlsX3RvID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jYV9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY3J0X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY3J0X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJrZXlfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5rZXlfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImZvcmNlX2NpcGhlcnN1aXRlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPSAtMTsKKworICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdID0gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkKCBxICk7CisKKyAgICAgICAgICAgIGlmKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPD0gMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKworICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzFdID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworICAgIC8qCisgICAgICogMC4gSW5pdGlhbGl6ZSB0aGUgUk5HIGFuZCB0aGUgc2Vzc2lvbiBkYXRhCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLjEuIExvYWQgdGhlIHRydXN0ZWQgQ0EKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBDQSByb290IGNlcnRpZmljYXRlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBzdHJsZW4oIG9wdC5jYV9maWxlICkgKQorICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYWNlcnQsIG9wdC5jYV9maWxlICk7CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZjYWNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNfcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19wZW1fbGVuICk7CisjZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQ0VSVFNfQyBub3QgZGVmaW5lZC4iKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rICglZCBza2lwcGVkKVxuIiwgcmV0ICk7CisKKyAgICAvKgorICAgICAqIDEuMi4gTG9hZCBvd24gY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5CisgICAgICoKKyAgICAgKiAoY2FuIGJlIHNraXBwZWQgaWYgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGlzIG5vdCByZXF1aXJlZCkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBjbGllbnQgY2VydC4gYW5kIGtleS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBzdHJsZW4oIG9wdC5jcnRfZmlsZSApICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY2xpY2VydCwgb3B0LmNydF9maWxlICk7CisgICAgZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZjbGljZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3RfY2xpX2NydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jbGlfY3J0X2xlbiApOworI2Vsc2UKKyAgICB7CisgICAgICAgIHJldCA9IC0xOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DRVJUU19DIG5vdCBkZWZpbmVkLiIpOworICAgIH0KKyNlbmRpZgorICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggc3RybGVuKCBvcHQua2V5X2ZpbGUgKSApCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJnBrZXksIG9wdC5rZXlfZmlsZSwgIiIgKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykgJiYgZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQorICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXksIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jbGlfa2V5LAorICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jbGlfa2V5X2xlbiwgTlVMTCwgMCApOworI2Vsc2UKKyAgICB7CisgICAgICAgIHJldCA9IC0xOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DRVJUU19DIG9yIE1CRURUTFNfUEVNX1BBUlNFX0Mgbm90IGRlZmluZWQuIik7CisgICAgfQorI2VuZGlmCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDIuIFN0YXJ0IHRoZSBjb25uZWN0aW9uCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQ29ubmVjdGluZyB0byB0Y3AvJXMvJXMuLi4iLCBvcHQuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfY29ubmVjdCggJnNlcnZlcl9mZCwgb3B0LnNlcnZlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9jb25uZWN0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMy4gU2V0dXAgc3R1ZmYKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZXR0aW5nIHVwIHRoZSBTU0wvVExTIHN0cnVjdHVyZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfQ0xJRU5ULAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBPUFRJT05BTCBpcyBub3Qgb3B0aW1hbCBmb3Igc2VjdXJpdHksCisgICAgICogYnV0IG1ha2VzIGludGVyb3AgZWFzaWVyIGluIHRoaXMgc2ltcGxpZmllZCBleGFtcGxlICovCisgICAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSggJmNvbmYsIE1CRURUTFNfU1NMX1ZFUklGWV9PUFRJT05BTCApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICBpZiggb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdICE9IERGTF9GT1JDRV9DSVBIRVIgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlcyggJmNvbmYsIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZSApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsICZjYWNlcnQsIE5VTEwgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCAmY29uZiwgJmNsaWNlcnQsICZwa2V5ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoICZzc2wsIG9wdC5zZXJ2ZXJfbmFtZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF9zZXRfYmlvKCAmc3NsLCAmc2VydmVyX2ZkLCBtYmVkdGxzX25ldF9zZW5kLCBtYmVkdGxzX25ldF9yZWN2LCBOVUxMICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgaWYoIG9wdC5tb2RlID09IE1PREVfU1NMX1RMUyApCisgICAgeworICAgICAgICBpZiggZG9faGFuZHNoYWtlKCAmc3NsICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gR2V0IGhlYWRlciBmcm9tIHNlcnZlcjoiICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgMCApOworICAgICAgICBpZiggcmV0IDwgMjAwIHx8IHJldCA+IDI5OSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIHNlcnZlciByZXNwb25kZWQgd2l0aCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgb2tcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSBFSExPIHRvIHNlcnZlcjoiICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgZ2V0aG9zdG5hbWUoIGhvc3RuYW1lLCAzMiApOworICAgICAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsICJFSExPICVzXHJcbiIsIGhvc3RuYW1lICk7CisgICAgICAgIHJldCA9IHdyaXRlX3NzbF9hbmRfZ2V0X3Jlc3BvbnNlKCAmc3NsLCBidWYsIGxlbiApOworICAgICAgICBpZiggcmV0IDwgMjAwIHx8IHJldCA+IDI5OSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIHNlcnZlciByZXNwb25kZWQgd2l0aCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBHZXQgaGVhZGVyIGZyb20gc2VydmVyOiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSB3cml0ZV9hbmRfZ2V0X3Jlc3BvbnNlKCAmc2VydmVyX2ZkLCBidWYsIDAgKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgRUhMTyB0byBzZXJ2ZXI6IiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGdldGhvc3RuYW1lKCBob3N0bmFtZSwgMzIgKTsKKyAgICAgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiRUhMTyAlc1xyXG4iLCBob3N0bmFtZSApOworICAgICAgICByZXQgPSB3cml0ZV9hbmRfZ2V0X3Jlc3BvbnNlKCAmc2VydmVyX2ZkLCBidWYsIGxlbiApOworICAgICAgICBpZiggcmV0IDwgMjAwIHx8IHJldCA+IDI5OSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIHNlcnZlciByZXNwb25kZWQgd2l0aCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgb2tcbiIgKTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSBTVEFSVFRMUyB0byBzZXJ2ZXI6IiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGdldGhvc3RuYW1lKCBob3N0bmFtZSwgMzIgKTsKKyAgICAgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiU1RBUlRUTFNcclxuIiApOworICAgICAgICByZXQgPSB3cml0ZV9hbmRfZ2V0X3Jlc3BvbnNlKCAmc2VydmVyX2ZkLCBidWYsIGxlbiApOworICAgICAgICBpZiggcmV0IDwgMjAwIHx8IHJldCA+IDI5OSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIHNlcnZlciByZXNwb25kZWQgd2l0aCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgb2tcbiIgKTsKKworICAgICAgICBpZiggZG9faGFuZHNoYWtlKCAmc3NsICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorICAgIGlmKCBvcHQuYXV0aGVudGljYXRpb24gKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgQVVUSCBMT0dJTiB0byBzZXJ2ZXI6IiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIkFVVEggTE9HSU5cclxuIiApOworICAgICAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAzOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgdXNlcm5hbWUgdG8gc2VydmVyOiAlcyIsIG9wdC51c2VyX25hbWUgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUoIGJhc2UsIHNpemVvZiggYmFzZSApLCAmbiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgb3B0LnVzZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBvcHQudXNlcl9uYW1lICkgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKSB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiJXNcclxuIiwgYmFzZSApOworICAgICAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICAgICAgaWYoIHJldCA8IDMwMCB8fCByZXQgPiAzOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgcGFzc3dvcmQgdG8gc2VydmVyOiAlcyIsIG9wdC51c2VyX3B3ZCApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfYmFzZTY0X2VuY29kZSggYmFzZSwgc2l6ZW9mKCBiYXNlICksICZuLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBvcHQudXNlcl9wd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggb3B0LnVzZXJfcHdkICkgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKSB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiJXNcclxuIiwgYmFzZSApOworICAgICAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICAgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAzOTkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSBNQUlMIEZST00gdG8gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiTUFJTCBGUk9NOjwlcz5cclxuIiwgb3B0Lm1haWxfZnJvbSApOworICAgIHJldCA9IHdyaXRlX3NzbF9hbmRfZ2V0X3Jlc3BvbnNlKCAmc3NsLCBidWYsIGxlbiApOworICAgIGlmKCByZXQgPCAyMDAgfHwgcmV0ID4gMjk5ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIHNlcnZlciByZXNwb25kZWQgd2l0aCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCIgb2tcbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIFJDUFQgVE8gdG8gc2VydmVyOiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCAiUkNQVCBUTzo8JXM+XHJcbiIsIG9wdC5tYWlsX3RvICk7CisgICAgcmV0ID0gd3JpdGVfc3NsX2FuZF9nZXRfcmVzcG9uc2UoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgaWYoIHJldCA8IDIwMCB8fCByZXQgPiAyOTkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgc2VydmVyIHJlc3BvbmRlZCB3aXRoICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoIiBva1xuIiApOworCisgICAgbWJlZHRsc19wcmludGYoICIgID4gV3JpdGUgREFUQSB0byBzZXJ2ZXI6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsICJEQVRBXHJcbiIgKTsKKyAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICBpZiggcmV0IDwgMzAwIHx8IHJldCA+IDM5OSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSBjb250ZW50IHRvIHNlcnZlcjoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgIkZyb206ICVzXHJcblN1YmplY3Q6IG1iZWQgVExTIFRlc3QgbWFpbFxyXG5cclxuIgorICAgICAgICAgICAgIlRoaXMgaXMgYSBzaW1wbGUgdGVzdCBtYWlsIGZyb20gdGhlICIKKyAgICAgICAgICAgICJtYmVkIFRMUyBtYWlsIGNsaWVudCBleGFtcGxlLlxyXG4iCisgICAgICAgICAgICAiXHJcbiIKKyAgICAgICAgICAgICJFbmpveSEiLCBvcHQubWFpbF9mcm9tICk7CisgICAgcmV0ID0gd3JpdGVfc3NsX2RhdGEoICZzc2wsIGJ1ZiwgbGVuICk7CisKKyAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsICJcclxuLlxyXG4iKTsKKyAgICByZXQgPSB3cml0ZV9zc2xfYW5kX2dldF9yZXNwb25zZSggJnNzbCwgYnVmLCBsZW4gKTsKKyAgICBpZiggcmV0IDwgMjAwIHx8IHJldCA+IDI5OSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZigiIG9rXG4iICk7CisKKyAgICBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoICZzc2wgKTsKKworZXhpdDoKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjbGljZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGtleSApOworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmZW50cm9weSApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19TU0xfVExTX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1NTTF9DTElfQyAmJiBNQkVEVExTX05FVF9DICYmIE1CRURUTFNfUlNBX0MgKioKKyAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX3B0aHJlYWRfc2VydmVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9wdGhyZWFkX3NlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDVhZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9wdGhyZWFkX3NlcnZlci5jCkBAIC0wLDAgKzEsNTI5IEBACisvKgorICogIFNTTCBzZXJ2ZXIgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzaW5nIHB0aHJlYWQgZm9yIGhhbmRsaW5nIG11bHRpcGxlCisgKiAgY2xpZW50cy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19DRVJUU19DKSB8fCAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTX0MpIHx8ICAgICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKSB8fCAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX1BUSFJFQUQpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BFTV9QQVJTRV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0NFUlRTX0MgYW5kL29yIE1CRURUTFNfRU5UUk9QWV9DICIKKyAgICAgICAgICAgImFuZC9vciBNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfU1JWX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1RIUkVBRElOR19DIGFuZC9vciBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFEICIKKyAgICAgICAgICAgImFuZC9vciBNQkVEVExTX1BFTV9QQVJTRV9DIG5vdCBkZWZpbmVkLlxuIik7CisgICAgcmV0dXJuKCAwICk7Cit9CisjZWxzZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NlcnRzLmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2NhY2hlLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCisjZW5kaWYKKworI2RlZmluZSBIVFRQX1JFU1BPTlNFIFwKKyAgICAiSFRUUC8xLjAgMjAwIE9LXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJcblxyXG4iIFwKKyAgICAiPGgyPm1iZWQgVExTIFRlc3QgU2VydmVyPC9oMj5cclxuIiBcCisgICAgIjxwPlN1Y2Nlc3NmdWwgY29ubmVjdGlvbiB1c2luZzogJXM8L3A+XHJcbiIKKworI2RlZmluZSBERUJVR19MRVZFTCAwCisKKyNkZWZpbmUgTUFYX05VTV9USFJFQURTIDUKKworbWJlZHRsc190aHJlYWRpbmdfbXV0ZXhfdCBkZWJ1Z19tdXRleDsKKworc3RhdGljIHZvaWQgbXlfbXV0ZXhlZF9kZWJ1Zyggdm9pZCAqY3R4LCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyICkKK3sKKyAgICBsb25nIGludCB0aHJlYWRfaWQgPSAobG9uZyBpbnQpIHB0aHJlYWRfc2VsZigpOworCisgICAgbWJlZHRsc19tdXRleF9sb2NrKCAmZGVidWdfbXV0ZXggKTsKKworICAgICgodm9pZCkgbGV2ZWwpOworICAgIG1iZWR0bHNfZnByaW50ZiggKEZJTEUgKikgY3R4LCAiJXM6JTA0ZDogWyAjJWxkIF0gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwgbGluZSwgdGhyZWFkX2lkLCBzdHIgKTsKKyAgICBmZmx1c2goICAoRklMRSAqKSBjdHggICk7CisKKyAgICBtYmVkdGxzX211dGV4X3VubG9jayggJmRlYnVnX211dGV4ICk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IGNsaWVudF9mZDsKKyAgICBpbnQgdGhyZWFkX2NvbXBsZXRlOworICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZmlnOworfSB0aHJlYWRfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IGFjdGl2ZTsKKyAgICB0aHJlYWRfaW5mb190ICAgZGF0YTsKKyAgICBwdGhyZWFkX3QgICAgICAgdGhyZWFkOworfSBwdGhyZWFkX2luZm9fdDsKKworc3RhdGljIHRocmVhZF9pbmZvX3QgICAgYmFzZV9pbmZvOworc3RhdGljIHB0aHJlYWRfaW5mb190ICAgdGhyZWFkc1tNQVhfTlVNX1RIUkVBRFNdOworCitzdGF0aWMgdm9pZCAqaGFuZGxlX3NzbF9jb25uZWN0aW9uKCB2b2lkICpkYXRhICkKK3sKKyAgICBpbnQgcmV0LCBsZW47CisgICAgdGhyZWFkX2luZm9fdCAqdGhyZWFkX2luZm8gPSAodGhyZWFkX2luZm9fdCAqKSBkYXRhOworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgKmNsaWVudF9mZCA9ICZ0aHJlYWRfaW5mby0+Y2xpZW50X2ZkOworICAgIGxvbmcgaW50IHRocmVhZF9pZCA9IChsb25nIGludCkgcHRocmVhZF9zZWxmKCk7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisKKyAgICAvKiBNYWtlIHN1cmUgbWVtb3J5IHJlZmVyZW5jZXMgYXJlIHZhbGlkICovCisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworCisgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICBTZXR0aW5nIHVwIFNTTC9UTFMgZGF0YVxuIiwgdGhyZWFkX2lkICk7CisKKyAgICAvKgorICAgICAqIDQuIEdldCB0aGUgU1NMIGNvbnRleHQgcmVhZHkKKyAgICAgKi8KKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgdGhyZWFkX2luZm8tPmNvbmZpZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIGZhaWxlZDogbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgLTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICB0aHJlYWRfaWQsIC1yZXQgKTsKKyAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3NzbF9zZXRfYmlvKCAmc3NsLCBjbGllbnRfZmQsIG1iZWR0bHNfbmV0X3NlbmQsIG1iZWR0bHNfbmV0X3JlY3YsIE5VTEwgKTsKKworICAgIC8qCisgICAgICogNS4gSGFuZHNoYWtlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICBQZXJmb3JtaW5nIHRoZSBTU0wvVExTIGhhbmRzaGFrZVxuIiwgdGhyZWFkX2lkICk7CisKKyAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2UoICZzc2wgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgZmFpbGVkOiBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQgLTB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2lkLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIHRocmVhZF9leGl0OworICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICBva1xuIiwgdGhyZWFkX2lkICk7CisKKyAgICAvKgorICAgICAqIDYuIFJlYWQgdGhlIEhUVFAgUmVxdWVzdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgPCBSZWFkIGZyb20gY2xpZW50XG4iLCB0aHJlYWRfaWQgKTsKKworICAgIGRvCisgICAgeworICAgICAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfcmVhZCggJnNzbCwgYnVmLCBsZW4gKTsKKworICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmKCByZXQgPD0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggcmV0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWToKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZ3JhY2VmdWxseVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfaWQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKworICAgICAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgY29ubmVjdGlvbiB3YXMgcmVzZXQgYnkgcGVlclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfaWQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAtMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF9pZCwgLXJldCApOworICAgICAgICAgICAgICAgICAgICBnb3RvIHRocmVhZF9leGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGVuID0gcmV0OworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gICVkIGJ5dGVzIHJlYWRcbj09PT09XG4lc1xuPT09PT1cbiIsCisgICAgICAgICAgICAgICAgdGhyZWFkX2lkLCBsZW4sIChjaGFyICopIGJ1ZiApOworCisgICAgICAgIGlmKCByZXQgPiAwICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB3aGlsZSggMSApOworCisgICAgLyoKKyAgICAgKiA3LiBXcml0ZSB0aGUgMjAwIFJlc3BvbnNlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIFsgIyVsZCBdICA+IFdyaXRlIHRvIGNsaWVudDpcbiIsIHRocmVhZF9pZCApOworCisgICAgbGVuID0gc3ByaW50ZiggKGNoYXIgKikgYnVmLCBIVFRQX1JFU1BPTlNFLAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggJnNzbCApICk7CisKKyAgICB3aGlsZSggKCByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSggJnNzbCwgYnVmLCBsZW4gKSApIDw9IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgZmFpbGVkOiBwZWVyIGNsb3NlZCB0aGUgY29ubmVjdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2lkICk7CisgICAgICAgICAgICBnb3RvIHRocmVhZF9leGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbICMlbGQgXSAgZmFpbGVkOiBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAtMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICB0aHJlYWRfaWQsIHJldCApOworICAgICAgICAgICAgZ290byB0aHJlYWRfZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxlbiA9IHJldDsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gICVkIGJ5dGVzIHdyaXR0ZW5cbj09PT09XG4lc1xuPT09PT1cbiIsCisgICAgICAgICAgICB0aHJlYWRfaWQsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbi4uLiIsIHRocmVhZF9pZCApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICkgKSA8IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyAjJWxkIF0gIGZhaWxlZDogbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5IHJldHVybmVkIC0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgIHRocmVhZF9pZCwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHRocmVhZF9leGl0OworICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIHJldCA9IDA7CisKK3RocmVhZF9leGl0OgorCisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoIiAgWyAjJWxkIF0gIExhc3QgZXJyb3Igd2FzOiAtMHglMDR4IC0gJXNcblxuIiwKKyAgICAgICAgICAgICAgIHRocmVhZF9pZCwgLXJldCwgZXJyb3JfYnVmICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCBjbGllbnRfZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisKKyAgICB0aHJlYWRfaW5mby0+dGhyZWFkX2NvbXBsZXRlID0gMTsKKworICAgIHJldHVybiggTlVMTCApOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jcmVhdGUoIG1iZWR0bHNfbmV0X2NvbnRleHQgKmNsaWVudF9mZCApCit7CisgICAgaW50IHJldCwgaTsKKworICAgIC8qCisgICAgICogRmluZCBpbi1hY3RpdmUgb3IgZmluaXNoZWQgdGhyZWFkIHNsb3QKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgTUFYX05VTV9USFJFQURTOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIHRocmVhZHNbaV0uYWN0aXZlID09IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoIHRocmVhZHNbaV0uZGF0YS50aHJlYWRfY29tcGxldGUgPT0gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIG1haW4gXSAgQ2xlYW5pbmcgdXAgdGhyZWFkICVkXG4iLCBpICk7CisgICAgICAgICAgICBwdGhyZWFkX2pvaW4odGhyZWFkc1tpXS50aHJlYWQsIE5VTEwgKTsKKyAgICAgICAgICAgIG1lbXNldCggJnRocmVhZHNbaV0sIDAsIHNpemVvZihwdGhyZWFkX2luZm9fdCkgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoIGkgPT0gTUFYX05VTV9USFJFQURTICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgLyoKKyAgICAgKiBGaWxsIHRocmVhZC1pbmZvIGZvciB0aHJlYWQKKyAgICAgKi8KKyAgICBtZW1jcHkoICZ0aHJlYWRzW2ldLmRhdGEsICZiYXNlX2luZm8sIHNpemVvZihiYXNlX2luZm8pICk7CisgICAgdGhyZWFkc1tpXS5hY3RpdmUgPSAxOworICAgIG1lbWNweSggJnRocmVhZHNbaV0uZGF0YS5jbGllbnRfZmQsIGNsaWVudF9mZCwgc2l6ZW9mKCBtYmVkdGxzX25ldF9jb250ZXh0ICkgKTsKKworICAgIGlmKCAoIHJldCA9IHB0aHJlYWRfY3JlYXRlKCAmdGhyZWFkc1tpXS50aHJlYWQsIE5VTEwsIGhhbmRsZV9zc2xfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRocmVhZHNbaV0uZGF0YSApICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldDsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IGxpc3Rlbl9mZCwgY2xpZW50X2ZkOworICAgIGNvbnN0IGNoYXIgcGVyc1tdID0gInNzbF9wdGhyZWFkX3NlcnZlciI7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IHNydmNlcnQ7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNoYWluOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwa2V5OworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgdW5zaWduZWQgY2hhciBhbGxvY19idWZbMTAwMDAwXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0IGNhY2hlOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBhbGxvY19idWYsIHNpemVvZihhbGxvY19idWYpICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9pbml0KCAmY2FjaGUgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmc3J2Y2VydCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNhY2hhaW4gKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisgICAgbWVtc2V0KCB0aHJlYWRzLCAwLCBzaXplb2YodGhyZWFkcykgKTsKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmbGlzdGVuX2ZkICk7CisgICAgbWJlZHRsc19uZXRfaW5pdCggJmNsaWVudF9mZCApOworCisgICAgbWJlZHRsc19tdXRleF9pbml0KCAmZGVidWdfbXV0ZXggKTsKKworICAgIGJhc2VfaW5mby5jb25maWcgPSAmY29uZjsKKworICAgIC8qCisgICAgICogV2UgdXNlIG9ubHkgYSBzaW5nbGUgZW50cm9weSBzb3VyY2UgdGhhdCBpcyB1c2VkIGluIGFsbCB0aGUgdGhyZWFkcy4KKyAgICAgKi8KKyAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKworICAgIC8qCisgICAgICogMS4gTG9hZCB0aGUgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIFJTQSBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIHNlcnZlciBjZXJ0LiBhbmQga2V5Li4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAvKgorICAgICAqIFRoaXMgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzZXMgZW1iZWRkZWQgdGVzdCBjZXJ0aWZpY2F0ZXMuCisgICAgICogSW5zdGVhZCwgeW91IG1heSB3YW50IHRvIHVzZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoKSB0byByZWFkIHRoZQorICAgICAqIHNlcnZlciBhbmQgQ0EgY2VydGlmaWNhdGVzLCBhcyB3ZWxsIGFzIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgpLgorICAgICAqLworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UoICZzcnZjZXJ0LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2NydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9jcnRfbGVuICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJmNhY2hhaW4sIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNfcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3RfY2FzX3BlbV9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwa2V5ICk7CisgICAgcmV0ID0gIG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCAmcGtleSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9rZXlfbGVuLCBOVUxMLCAwICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDFiLiBTZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZDogbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkIC0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMWMuIFByZXBhcmUgU1NMIGNvbmZpZ3VyYXRpb24KKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZXR0aW5nIHVwIHRoZSBTU0wgZGF0YS4uLi4iICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19TRVJWRVIsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZDogbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzIHJldHVybmVkIC0weCUwNHhcbiIsCisgICAgICAgICAgICAgICAgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9ybmcoICZjb25mLCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSwgJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9tdXRleGVkX2RlYnVnLCBzdGRvdXQgKTsKKworICAgIC8qIG1iZWR0bHNfc3NsX2NhY2hlX2dldCgpIGFuZCBtYmVkdGxzX3NzbF9jYWNoZV9zZXQoKSBhcmUgdGhyZWFkLXNhZmUgaWYKKyAgICAgKiBNQkVEVExTX1RIUkVBRElOR19DIGlzIHNldC4KKyAgICAgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX2NhY2hlKCAmY29uZiwgJmNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9nZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX3NldCApOworI2VuZGlmCisKKyAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgJmNhY2hhaW4sIE5VTEwgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCAmY29uZiwgJnNydmNlcnQsICZwa2V5ICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisKKyAgICAvKgorICAgICAqIDIuIFNldHVwIHRoZSBsaXN0ZW5pbmcgVENQIHNvY2tldAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEJpbmQgb24gaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMy8gLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9iaW5kKCAmbGlzdGVuX2ZkLCBOVUxMLCAiNDQzMyIsIE1CRURUTFNfTkVUX1BST1RPX1RDUCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9iaW5kIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworcmVzZXQ6CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIGNoYXIgZXJyb3JfYnVmWzEwMF07CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgZXJyb3JfYnVmLCAxMDAgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgbWFpbiBdICBMYXN0IGVycm9yIHdhczogLTB4JTA0eCAtICVzXG4iLCAtcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogMy4gV2FpdCB1bnRpbCBhIGNsaWVudCBjb25uZWN0cworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIG1haW4gXSAgV2FpdGluZyBmb3IgYSByZW1vdGUgY29ubmVjdGlvblxuIiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYWNjZXB0KCAmbGlzdGVuX2ZkLCAmY2xpZW50X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyBtYWluIF0gZmFpbGVkOiBtYmVkdGxzX25ldF9hY2NlcHQgcmV0dXJuZWQgLTB4JTA0eFxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgWyBtYWluIF0gIG9rXG4iICk7CisgICAgbWJlZHRsc19wcmludGYoICIgIFsgbWFpbiBdICBDcmVhdGluZyBhIG5ldyB0aHJlYWRcbiIgKTsKKworICAgIGlmKCAoIHJldCA9IHRocmVhZF9jcmVhdGUoICZjbGllbnRfZmQgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgbWFpbiBdICBmYWlsZWQ6IHRocmVhZF9jcmVhdGUgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgfQorCisgICAgcmV0ID0gMDsKKyAgICBnb3RvIHJlc2V0OworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5ICk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2ZyZWUoICZjYWNoZSApOworI2VuZGlmCisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKKworICAgIG1iZWR0bHNfbXV0ZXhfZnJlZSggJmRlYnVnX211dGV4ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfQ0VSVFNfQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJgorICAgICAgICAgIE1CRURUTFNfU1NMX1RMU19DICYmIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfTkVUX0MgJiYKKyAgICAgICAgICBNQkVEVExTX1JTQV9DICYmIE1CRURUTFNfQ1RSX0RSQkdfQyAmJiBNQkVEVExTX1RIUkVBRElOR19DICYmCisgICAgICAgICAgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRCAmJiBNQkVEVExTX1BFTV9QQVJTRV9DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTRmMTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIuYwpAQCAtMCwwICsxLDQwMSBAQAorLyoKKyAqICBTU0wgc2VydmVyIGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2RlZmluZSBtYmVkdGxzX3RpbWUgICAgICAgdGltZQorI2RlZmluZSBtYmVkdGxzX3RpbWVfdCAgICAgdGltZV90IAorI2RlZmluZSBtYmVkdGxzX2ZwcmludGYgICAgZnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfU1NMX1NSVl9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUlNBX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgICAgXAorICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfQ0VSVFNfQyBhbmQvb3IgTUJFRFRMU19FTlRST1BZX0MgIgorICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfU1NMX1RMU19DIGFuZC9vciBNQkVEVExTX1NTTF9TUlZfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19ORVRfQyBhbmQvb3IgTUJFRFRMU19SU0FfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19DVFJfRFJCR19DIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgIgorICAgICAgICAgICAiYW5kL29yIE1CRURUTFNfUEVNX1BBUlNFX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NzbC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbmV0X3NvY2tldHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisjaW5jbHVkZSAibWJlZHRscy9kZWJ1Zy5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2NhY2hlLmgiCisjZW5kaWYKKworI2RlZmluZSBIVFRQX1JFU1BPTlNFIFwKKyAgICAiSFRUUC8xLjAgMjAwIE9LXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJcblxyXG4iIFwKKyAgICAiPGgyPm1iZWQgVExTIFRlc3QgU2VydmVyPC9oMj5cclxuIiBcCisgICAgIjxwPlN1Y2Nlc3NmdWwgY29ubmVjdGlvbiB1c2luZzogJXM8L3A+XHJcbiIKKworI2RlZmluZSBERUJVR19MRVZFTCAwCisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgICgodm9pZCkgbGV2ZWwpOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiAlcyIsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworaW50IG1haW4oIHZvaWQgKQoreworICAgIGludCByZXQsIGxlbjsKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IGxpc3Rlbl9mZCwgY2xpZW50X2ZkOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAic3NsX3NlcnZlciI7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IHNydmNlcnQ7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXk7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NhY2hlX2NvbnRleHQgY2FjaGU7CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2luaXQoICZsaXN0ZW5fZmQgKTsKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9pbml0KCAmY2FjaGUgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwa2V5ICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggREVCVUdfTEVWRUwgKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAxLiBMb2FkIHRoZSBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUgUlNBIGtleQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4gIC4gTG9hZGluZyB0aGUgc2VydmVyIGNlcnQuIGFuZCBrZXkuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIC8qCisgICAgICogVGhpcyBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNlcyBlbWJlZGRlZCB0ZXN0IGNlcnRpZmljYXRlcy4KKyAgICAgKiBJbnN0ZWFkLCB5b3UgbWF5IHdhbnQgdG8gdXNlIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgpIHRvIHJlYWQgdGhlCisgICAgICogc2VydmVyIGFuZCBDQSBjZXJ0aWZpY2F0ZXMsIGFzIHdlbGwgYXMgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCkuCisgICAgICovCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfY3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmc3J2Y2VydCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X2Nhc19wZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9jYXNfcGVtX2xlbiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIHJldCA9ICBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrZXksIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9zcnZfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfa2V5X2xlbiwgTlVMTCwgMCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAyLiBTZXR1cCB0aGUgbGlzdGVuaW5nIFRDUCBzb2NrZXQKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBCaW5kIG9uIGh0dHBzOi8vbG9jYWxob3N0OjQ0MzMvIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYmluZCggJmxpc3Rlbl9mZCwgTlVMTCwgIjQ0MzMiLCBNQkVEVExTX05FVF9QUk9UT19UQ1AgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfYmluZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDMuIFNlZWQgdGhlIFJORworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFNlZWRpbmcgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoICZjdHJfZHJiZywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19jdHJfZHJiZ19zZWVkIHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDQuIFNldHVwIHN0dWZmCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCB0aGUgU1NMIGRhdGEuLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoICZjb25mLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19TRVJWRVIsCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl9jYWNoZSggJmNvbmYsICZjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2FjaGVfZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9jYWNoZV9zZXQgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbiggJmNvbmYsIHNydmNlcnQubmV4dCwgTlVMTCApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoICZjb25mLCAmc3J2Y2VydCwgJnBrZXkgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXR1cCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKK3Jlc2V0OgorI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJMYXN0IGVycm9yIHdhczogJWQgLSAlc1xuXG4iLCByZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworCisgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9yZXNldCggJnNzbCApOworCisgICAgLyoKKyAgICAgKiAzLiBXYWl0IHVudGlsIGEgY2xpZW50IGNvbm5lY3RzCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gV2FpdGluZyBmb3IgYSByZW1vdGUgY29ubmVjdGlvbiAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2FjY2VwdCggJmxpc3Rlbl9mZCwgJmNsaWVudF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfYWNjZXB0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJmNsaWVudF9mZCwgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwgTlVMTCApOworCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogNS4gSGFuZHNoYWtlCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYgcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDYuIFJlYWQgdGhlIEhUVFAgUmVxdWVzdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA8IFJlYWQgZnJvbSBjbGllbnQ6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgbGVuID0gc2l6ZW9mKCBidWYgKSAtIDE7CisgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGJ1ZiwgbGVuICk7CisKKyAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8IHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIHJldCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlk6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5XG4iICk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVDoKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgY29ubmVjdGlvbiB3YXMgcmVzZXQgYnkgcGVlclxuIiApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG1iZWR0bHNfc3NsX3JlYWQgcmV0dXJuZWQgLTB4JXhcbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbGVuID0gcmV0OworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzIiwgbGVuLCAoY2hhciAqKSBidWYgKTsKKworICAgICAgICBpZiggcmV0ID4gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgd2hpbGUoIDEgKTsKKworICAgIC8qCisgICAgICogNy4gV3JpdGUgdGhlIDIwMCBSZXNwb25zZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICA+IFdyaXRlIHRvIGNsaWVudDoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGxlbiA9IHNwcmludGYoIChjaGFyICopIGJ1ZiwgSFRUUF9SRVNQT05TRSwKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoICZzc2wgKSApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIGlmKCByZXQgPT0gTUJFRFRMU19FUlJfTkVUX0NPTk5fUkVTRVQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBwZWVyIGNsb3NlZCB0aGUgY29ubmVjdGlvblxuXG4iICk7CisgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3dyaXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgbGVuID0gcmV0OworICAgIG1iZWR0bHNfcHJpbnRmKCAiICVkIGJ5dGVzIHdyaXR0ZW5cblxuJXNcbiIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDbG9zaW5nIHRoZSBjb25uZWN0aW9uLi4uIiApOworCisgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICkgKSA8IDAgKQorICAgIHsKKyAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIHJldCA9IDA7CisgICAgZ290byByZXNldDsKKworZXhpdDoKKworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJMYXN0IGVycm9yIHdhczogJWQgLSAlc1xuXG4iLCByZXQsIGVycm9yX2J1ZiApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19uZXRfZnJlZSggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJnNydmNlcnQgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwa2V5ICk7CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9mcmVlKCAmY2FjaGUgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19DRVJUU19DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfVExTX0MgJiYgTUJFRFRMU19TU0xfU1JWX0MgJiYgTUJFRFRMU19ORVRfQyAmJgorICAgICAgICAgIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQworICAgICAgICAgICYmIE1CRURUTFNfRlNfSU8gJiYgTUJFRFRMU19QRU1fUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyMi5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmRhNTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyLmMKQEAgLTAsMCArMSwyMzM4IEBACisvKgorICogIFNTTCBjbGllbnQgd2l0aCBvcHRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfZnByaW50ZiAgICBmcHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfU1JWX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfRU5UUk9QWV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1NTTF9UTFNfQyBhbmQvb3IgTUJFRFRMU19TU0xfU1JWX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfTkVUX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3Igbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9jZXJ0cy5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisjaW5jbHVkZSAibWJlZHRscy90aW1pbmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyNpbmNsdWRlICJtYmVkdGxzL3NzbF9jYWNoZS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RJQ0tFVF9DKQorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX3RpY2tldC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2Nvb2tpZS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04pICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNkZWZpbmUgU05JX09QVElPTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2RlZmluZSBERkxfU0VSVkVSX0FERFIgICAgICAgICBOVUxMCisjZGVmaW5lIERGTF9TRVJWRVJfUE9SVCAgICAgICAgICI0NDMzIgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisjZGVmaW5lIERGTF9OQklPICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX1JFQURfVElNRU9VVCAgICAgICAgMAorI2RlZmluZSBERkxfQ0FfRklMRSAgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfQ0FfUEFUSCAgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfQ1JUX0ZJTEUgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfS0VZX0ZJTEUgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfQ1JUX0ZJTEUyICAgICAgICAgICAiIgorI2RlZmluZSBERkxfS0VZX0ZJTEUyICAgICAgICAgICAiIgorI2RlZmluZSBERkxfUFNLICAgICAgICAgICAgICAgICAiIgorI2RlZmluZSBERkxfUFNLX0lERU5USVRZICAgICAgICAiQ2xpZW50X2lkZW50aXR5IgorI2RlZmluZSBERkxfRUNKUEFLRV9QVyAgICAgICAgICBOVUxMCisjZGVmaW5lIERGTF9QU0tfTElTVCAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgREZMX0ZPUkNFX0NJUEhFUiAgICAgICAgMAorI2RlZmluZSBERkxfVkVSU0lPTl9TVUlURVMgICAgICBOVUxMCisjZGVmaW5lIERGTF9SRU5FR09USUFUSU9OICAgICAgIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQKKyNkZWZpbmUgREZMX0FMTE9XX0xFR0FDWSAgICAgICAgLTIKKyNkZWZpbmUgREZMX1JFTkVHT1RJQVRFICAgICAgICAgMAorI2RlZmluZSBERkxfUkVORUdPX0RFTEFZICAgICAgICAtMgorI2RlZmluZSBERkxfUkVORUdPX1BFUklPRCAgICAgICAtMQorI2RlZmluZSBERkxfRVhDSEFOR0VTICAgICAgICAgICAxCisjZGVmaW5lIERGTF9NSU5fVkVSU0lPTiAgICAgICAgIC0xCisjZGVmaW5lIERGTF9NQVhfVkVSU0lPTiAgICAgICAgIC0xCisjZGVmaW5lIERGTF9BUkM0ICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9BVVRIX01PREUgICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9NRkxfQ09ERSAgICAgICAgICAgIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9OT05FCisjZGVmaW5lIERGTF9UUlVOQ19ITUFDICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9USUNLRVRTICAgICAgICAgICAgIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVECisjZGVmaW5lIERGTF9USUNLRVRfVElNRU9VVCAgICAgIDg2NDAwCisjZGVmaW5lIERGTF9DQUNIRV9NQVggICAgICAgICAgIC0xCisjZGVmaW5lIERGTF9DQUNIRV9USU1FT1VUICAgICAgIC0xCisjZGVmaW5lIERGTF9TTkkgICAgICAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgREZMX0FMUE5fU1RSSU5HICAgICAgICAgTlVMTAorI2RlZmluZSBERkxfREhNX0ZJTEUgICAgICAgICAgICBOVUxMCisjZGVmaW5lIERGTF9UUkFOU1BPUlQgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0KKyNkZWZpbmUgREZMX0NPT0tJRVMgICAgICAgICAgICAgMQorI2RlZmluZSBERkxfQU5USV9SRVBMQVkgICAgICAgICAtMQorI2RlZmluZSBERkxfSFNfVE9fTUlOICAgICAgICAgICAwCisjZGVmaW5lIERGTF9IU19UT19NQVggICAgICAgICAgIDAKKyNkZWZpbmUgREZMX0JBRE1BQ19MSU1JVCAgICAgICAgLTEKKyNkZWZpbmUgREZMX0VYVEVOREVEX01TICAgICAgICAgLTEKKyNkZWZpbmUgREZMX0VUTSAgICAgICAgICAgICAgICAgLTEKKworI2RlZmluZSBMT05HX1JFU1BPTlNFICI8cD4wMS1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaFxyXG4iIFwKKyAgICAiMDItYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaFxyXG4iICBcCisgICAgIjAzLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWhcclxuIiAgXAorICAgICIwNC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoXHJcbiIgIFwKKyAgICAiMDUtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaFxyXG4iICBcCisgICAgIjA2LWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWhcclxuIiAgXAorICAgICIwNy1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaDwvcD5cclxuIgorCisvKiBVbmNvbW1lbnQgTE9OR19SRVNQT05TRSBhdCB0aGUgZW5kIG9mIEhUVFBfUkVTUE9OU0UgdG8gdGVzdCBzZW5kaW5nIGxvbmdlcgorICogcGFja2V0cyAoZm9yIGZyYWdtZW50YXRpb24gcHVycG9zZXMpICovCisjZGVmaW5lIEhUVFBfUkVTUE9OU0UgXAorICAgICJIVFRQLzEuMCAyMDAgT0tcclxuQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcclxuXHJcbiIgXAorICAgICI8aDI+bWJlZCBUTFMgVGVzdCBTZXJ2ZXI8L2gyPlxyXG4iIFwKKyAgICAiPHA+U3VjY2Vzc2Z1bCBjb25uZWN0aW9uIHVzaW5nOiAlczwvcD5cclxuIiAvLyBMT05HX1JFU1BPTlNFCisKKy8qCisgKiBTaXplIG9mIHRoZSBiYXNpYyBJL08gYnVmZmVyLiBBYmxlIHRvIGhvbGQgb3VyIGRlZmF1bHQgcmVzcG9uc2UuCisgKgorICogWW91IHdpbGwgbmVlZCB0byBhZGFwdCB0aGUgbWJlZHRsc19zc2xfZ2V0X2J5dGVzX2F2YWlsKCkgdGVzdCBpbiBzc2wtb3B0LnNoCisgKiBpZiB5b3UgY2hhbmdlIHRoaXMgdmFsdWUgdG8gc29tZXRoaW5nIG91dHNpZGUgdGhlIHJhbmdlIDw9IDEwMCBvciA+IDUwMAorICovCisjZGVmaW5lIElPX0JVRl9MRU4gICAgICAyMDAKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyNkZWZpbmUgVVNBR0VfSU8gXAorICAgICIgICAgY2FfZmlsZT0lJXMgICAgICAgICAgVGhlIHNpbmdsZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRvcC1sZXZlbCBDQShzKSB5b3UgZnVsbHkgdHJ1c3RcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChwcmUtbG9hZGVkKVxuIiBcCisgICAgIiAgICBjYV9wYXRoPSUlcyAgICAgICAgICBUaGUgcGF0aCBjb250YWluaW5nIHRoZSB0b3AtbGV2ZWwgQ0EocykgeW91IGZ1bGx5IHRydXN0XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAocHJlLWxvYWRlZCkgKG92ZXJyaWRlcyBjYV9maWxlKVxuIiBcCisgICAgIiAgICBjcnRfZmlsZT0lJXMgICAgICAgICBZb3VyIG93biBjZXJ0IGFuZCBjaGFpbiAoaW4gYm90dG9tIHRvIHRvcCBvcmRlciwgdG9wIG1heSBiZSBvbWl0dGVkKVxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNlZSBub3RlIGFmdGVyIGtleV9maWxlMlxuIiBcCisgICAgIiAgICBrZXlfZmlsZT0lJXMgICAgICAgICBkZWZhdWx0OiBzZWUgbm90ZSBhZnRlciBrZXlfZmlsZTJcbiIgXAorICAgICIgICAgY3J0X2ZpbGUyPSUlcyAgICAgICAgWW91ciBzZWNvbmQgY2VydCBhbmQgY2hhaW4gKGluIGJvdHRvbSB0byB0b3Agb3JkZXIsIHRvcCBtYXkgYmUgb21pdHRlZClcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBzZWUgbm90ZSBhZnRlciBrZXlfZmlsZTJcbiIgXAorICAgICIgICAga2V5X2ZpbGUyPSUlcyAgICAgICAgZGVmYXVsdDogc2VlIG5vdGUgYmVsb3dcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBpZiBuZWl0aGVyIGNydF9maWxlL2tleV9maWxlIG5vciBjcnRfZmlsZTIva2V5X2ZpbGUyIGFyZSB1c2VkLFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWRlZCBjZXJ0aWZpY2F0ZShzKSBhbmQga2V5KHMpIGFyZSB1c2VkIGlmIGF2YWlsYWJsZVxuIiBcCisgICAgIiAgICBkaG1fZmlsZT0lJXMgICAgICAgIEZpbGUgY29udGFpbmluZyBEaWZmaWUtSGVsbG1hbiBwYXJhbWV0ZXJzXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBwcmVsb2FkZWQgcGFyYW1ldGVyc1xuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfSU8gXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgTm8gZmlsZSBvcGVyYXRpb25zIGF2YWlsYWJsZSAoTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZClcbiIgXAorICAgICJcbiIKKyNlbmRpZiAvKiBNQkVEVExTX0ZTX0lPICovCisjZWxzZQorI2RlZmluZSBVU0FHRV9JTyAiIgorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisjZGVmaW5lIFVTQUdFX1BTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHBzaz0lJXMgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKGluIGhleCwgd2l0aG91dCAweClcbiIgXAorICAgICIgICAgcHNrX2lkZW50aXR5PSUlcyAgICAgZGVmYXVsdDogXCJDbGllbnRfaWRlbnRpdHlcIlxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfUFNLICIiCisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyNkZWZpbmUgVVNBR0VfVElDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHRpY2tldHM9JSVkICAgICAgICAgIGRlZmF1bHQ6IDEgKGVuYWJsZWQpXG4iICAgICAgIFwKKyAgICAiICAgIHRpY2tldF90aW1lb3V0PSUlZCAgIGRlZmF1bHQ6IDg2NDAwIChvbmUgZGF5KVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfVElDS0VUUyAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorI2RlZmluZSBVU0FHRV9DQUNIRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGNhY2hlX21heD0lJWQgICAgICAgIGRlZmF1bHQ6IGNhY2hlIGRlZmF1bHQgKDUwKVxuIiAgICBcCisgICAgIiAgICBjYWNoZV90aW1lb3V0PSUlZCAgICBkZWZhdWx0OiBjYWNoZSBkZWZhdWx0ICgxZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0NBQ0hFICIiCisjZW5kaWYgLyogTUJFRFRMU19TU0xfQ0FDSEVfQyAqLworCisjaWYgZGVmaW5lZChTTklfT1BUSU9OKQorI2RlZmluZSBVU0FHRV9TTkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNuaT0lJXMgICAgICAgICAgICAgIG5hbWUxLGNlcnQxLGtleTEsY2ExLGNybDEsYXV0aDFbLC4uLl1cbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGlzYWJsZWRcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1NOSSAiIgorI2VuZGlmIC8qIFNOSV9PUFRJT04gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyNkZWZpbmUgVVNBR0VfTUFYX0ZSQUdfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBtYXhfZnJhZ19sZW49JSVkICAgICBkZWZhdWx0OiAxNjM4NCAodGxzIGRlZmF1bHQpXG4iICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiA1MTIsIDEwMjQsIDIwNDgsIDQwOTZcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX01BWF9GUkFHX0xFTiAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX01BWF9GUkFHTUVOVF9MRU5HVEggKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisjZGVmaW5lIFVTQUdFX1RSVU5DX0hNQUMgXAorICAgICIgICAgdHJ1bmNfaG1hYz0lJWQgICAgICAgZGVmYXVsdDogbGlicmFyeSBkZWZhdWx0XG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9UUlVOQ19ITUFDICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyNkZWZpbmUgVVNBR0VfQUxQTiBcCisgICAgIiAgICBhbHBuPSUlcyAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChkaXNhYmxlZClcbiIgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGU6IHNwZHkvMSxodHRwLzEuMVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfQUxQTiAiIgorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCisjZGVmaW5lIFVTQUdFX0NPT0tJRVMgXAorICAgICIgICAgY29va2llcz0wLzEvLTEgICAgICBkZWZhdWx0OiAxIChlbmFibGVkKVxuIiAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAwOiBkaXNhYmxlZCwgLTE6IGxpYnJhcnkgZGVmYXVsdCAoYnJva2VuKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfQ09PS0lFUyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisjZGVmaW5lIFVTQUdFX0FOVElfUkVQTEFZIFwKKyAgICAiICAgIGFudGlfcmVwbGF5PTAvMSAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogZW5hYmxlZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0FOVElfUkVQTEFZICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19CQURNQUNfTElNSVQpCisjZGVmaW5lIFVTQUdFX0JBRE1BQ19MSU1JVCBcCisgICAgIiAgICBiYWRtYWNfbGltaXQ9JSVkICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBkaXNhYmxlZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0JBRE1BQ19MSU1JVCAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisjZGVmaW5lIFVTQUdFX0RUTFMgXAorICAgICIgICAgZHRscz0lJWQgICAgICAgICAgICAgZGVmYXVsdDogMCAoVExTKVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGhzX3RpbWVvdXQ9JSVkLSUlZCAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiAxMDAwLTYwMDAwKVxuIiAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIG9mIERUTFMgaGFuZHNoYWtlIHRpbWVvdXRzIGluIG1pbGxpc2Vjc1xuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRFRMUyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQpCisjZGVmaW5lIFVTQUdFX0VNUyBcCisgICAgIiAgICBleHRlbmRlZF9tcz0wLzEgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG9uKVxuIgorI2Vsc2UKKyNkZWZpbmUgVVNBR0VfRU1TICIiCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQykKKyNkZWZpbmUgVVNBR0VfRVRNIFwKKyAgICAiICAgIGV0bT0wLzEgICAgICAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogb24pXG4iCisjZWxzZQorI2RlZmluZSBVU0FHRV9FVE0gIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorI2RlZmluZSBVU0FHRV9SRU5FR08gXAorICAgICIgICAgcmVuZWdvdGlhdGlvbj0lJWQgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iICAgICAgXAorICAgICIgICAgcmVuZWdvdGlhdGU9JSVkICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iICAgICAgXAorICAgICIgICAgcmVuZWdvX2RlbGF5PSUlZCAgICAgZGVmYXVsdDogLTIgKGxpYnJhcnkgZGVmYXVsdClcbiIgXAorICAgICIgICAgcmVuZWdvX3BlcmlvZD0lJWQgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX1JFTkVHTyAiIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRCkKKyNkZWZpbmUgVVNBR0VfRUNKUEFLRSBcCisgICAgIiAgICBlY2pwYWtlX3B3PSUlcyAgICAgICBkZWZhdWx0OiBub25lIChkaXNhYmxlZClcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0VDSlBBS0UgIiIKKyNlbmRpZgorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IHNzbF9zZXJ2ZXIyIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNlcnZlcl9hZGRyPSUlZCAgICAgIGRlZmF1bHQ6IChhbGwgaW50ZXJmYWNlcylcbiIgIFwKKyAgICAiICAgIHNlcnZlcl9wb3J0PSUlZCAgICAgIGRlZmF1bHQ6IDQ0MzNcbiIgICAgICAgICAgICAgIFwKKyAgICAiICAgIGRlYnVnX2xldmVsPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgICAgIFwKKyAgICAiICAgIG5iaW89JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGJsb2NraW5nIEkvTylcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogMSAobm9uLWJsb2NraW5nKSwgMiAoYWRkZWQgZGVsYXlzKVxuIiBcCisgICAgIiAgICByZWFkX3RpbWVvdXQ9JSVkICAgICBkZWZhdWx0OiAwIG1zIChubyB0aW1lb3V0KVxuIiAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfRFRMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQ09PS0lFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQU5USV9SRVBMQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQkFETUFDX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBhdXRoX21vZGU9JSVzICAgICAgICBkZWZhdWx0OiAobGlicmFyeSBkZWZhdWx0OiBub25lKVxuIiAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbm9uZSwgb3B0aW9uYWwsIHJlcXVpcmVkXG4iIFwKKyAgICBVU0FHRV9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9TTkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9QU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9FQ0pQQUtFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGFsbG93X2xlZ2FjeT0lJWQgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IG5vKVxuIiAgICAgIFwKKyAgICBVU0FHRV9SRU5FR08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGV4Y2hhbmdlcz0lJWQgICAgICAgIGRlZmF1bHQ6IDFcbiIgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9USUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9DQUNIRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9NQVhfRlJBR19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9UUlVOQ19ITUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9BTFBOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9FTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVU0FHRV9FVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGFyYzQ9JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IDApXG4iIFwKKyAgICAiICAgIG1pbl92ZXJzaW9uPSUlcyAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IHRsczEpXG4iICAgICAgIFwKKyAgICAiICAgIG1heF92ZXJzaW9uPSUlcyAgICAgIGRlZmF1bHQ6IChsaWJyYXJ5IGRlZmF1bHQ6IHRsczFfMilcbiIgICAgIFwKKyAgICAiICAgIGZvcmNlX3ZlcnNpb249JSVzICAgIGRlZmF1bHQ6IFwiXCIgKG5vbmUpXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogc3NsMywgdGxzMSwgdGxzMV8xLCB0bHMxXzIsIGR0bHMxLCBkdGxzMV8yXG4iIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHZlcnNpb25fc3VpdGVzPWEsYixjLGQgICAgICBwZXItdmVyc2lvbiBjaXBoZXJzdWl0ZXNcbiIgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmcm9tIHNzbDMgdG8gdGxzMV8yXG4iICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBhbGwgZW5hYmxlZFxuIiAgICAgICAgICAgIFwKKyAgICAiICAgIGZvcmNlX2NpcGhlcnN1aXRlPTxuYW1lPiAgICBkZWZhdWx0OiBhbGwgZW5hYmxlZFxuIiAgICAgICAgICAgIFwKKyAgICAiIGFjY2VwdGFibGUgY2lwaGVyc3VpdGUgbmFtZXM6XG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9hZGRyOyAgICAvKiBhZGRyZXNzIG9uIHdoaWNoIHRoZSBzc2wgc2VydmljZSBydW5zICAgICovCisgICAgY29uc3QgY2hhciAqc2VydmVyX3BvcnQ7ICAgIC8qIHBvcnQgb24gd2hpY2ggdGhlIHNzbCBzZXJ2aWNlIHJ1bnMgICAgICAgKi8KKyAgICBpbnQgZGVidWdfbGV2ZWw7ICAgICAgICAgICAgLyogbGV2ZWwgb2YgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBuYmlvOyAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgSS9PIGJlIGJsb2NraW5nPyAgICAgICAgICAgICAgICAgICovCisgICAgdWludDMyX3QgcmVhZF90aW1lb3V0OyAgICAgIC8qIHRpbWVvdXQgb24gbWJlZHRsc19zc2xfcmVhZCgpIGluIG1pbGxpc2Vjb25kcyAgICAqLworICAgIGNvbnN0IGNoYXIgKmNhX2ZpbGU7ICAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZShzKSAgICAgICovCisgICAgY29uc3QgY2hhciAqY2FfcGF0aDsgICAgICAgIC8qIHRoZSBwYXRoIHdpdGggdGhlIENBIGNlcnRpZmljYXRlKHMpIHJlc2lkZSAqLworICAgIGNvbnN0IGNoYXIgKmNydF9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgICAgICovCisgICAgY29uc3QgY2hhciAqa2V5X2ZpbGU7ICAgICAgIC8qIHRoZSBmaWxlIHdpdGggdGhlIHNlcnZlciBrZXkgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpjcnRfZmlsZTI7ICAgICAgLyogdGhlIGZpbGUgd2l0aCB0aGUgMm5kIHNlcnZlciBjZXJ0aWZpY2F0ZSAqLworICAgIGNvbnN0IGNoYXIgKmtleV9maWxlMjsgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSAybmQgc2VydmVyIGtleSAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqcHNrOyAgICAgICAgICAgIC8qIHRoZSBwcmUtc2hhcmVkIGtleSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpwc2tfaWRlbnRpdHk7ICAgLyogdGhlIHByZS1zaGFyZWQga2V5IGlkZW50aXR5ICAgICAgICAgICAgICAqLworICAgIGNoYXIgKnBza19saXN0OyAgICAgICAgICAgICAvKiBsaXN0IG9mIFBTSyBpZC9rZXkgcGFpcnMgZm9yIGNhbGxiYWNrICAgICovCisgICAgY29uc3QgY2hhciAqZWNqcGFrZV9wdzsgICAgIC8qIHRoZSBFQyBKLVBBS0UgcGFzc3dvcmQgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZm9yY2VfY2lwaGVyc3VpdGVbMl07ICAgLyogcHJvdG9jb2wvY2lwaGVyc3VpdGUgdG8gdXNlLCBvciBhbGwgICAgICAqLworICAgIGNvbnN0IGNoYXIgKnZlcnNpb25fc3VpdGVzOyAvKiBwZXItdmVyc2lvbiBjaXBoZXJzdWl0ZXMgICAgICAgICAgICAgICAgICovCisgICAgaW50IHJlbmVnb3RpYXRpb247ICAgICAgICAgIC8qIGVuYWJsZSAvIGRpc2FibGUgcmVuZWdvdGlhdGlvbiAgICAgICAgICAgKi8KKyAgICBpbnQgYWxsb3dfbGVnYWN5OyAgICAgICAgICAgLyogYWxsb3cgbGVnYWN5IHJlbmVnb3RpYXRpb24gICAgICAgICAgICAgICAqLworICAgIGludCByZW5lZ290aWF0ZTsgICAgICAgICAgICAvKiBhdHRlbXB0IHJlbmVnb3RpYXRpb24/ICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHJlbmVnb19kZWxheTsgICAgICAgICAgIC8qIGRlbGF5IGJlZm9yZSBlbmZvcmNpbmcgcmVuZWdvdGlhdGlvbiAgICAgKi8KKyAgICBpbnQgcmVuZWdvX3BlcmlvZDsgICAgICAgICAgLyogcGVyaW9kIGZvciBhdXRvbWF0aWMgcmVuZWdvdGlhdGlvbiAgICAgICAqLworICAgIGludCBleGNoYW5nZXM7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGF0YSBleGNoYW5nZXMgICAgICAgICAgICAgICAgICovCisgICAgaW50IG1pbl92ZXJzaW9uOyAgICAgICAgICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBhY2NlcHRlZCAgICAgICAgKi8KKyAgICBpbnQgbWF4X3ZlcnNpb247ICAgICAgICAgICAgLyogbWF4aW11bSBwcm90b2NvbCB2ZXJzaW9uIGFjY2VwdGVkICAgICAgICAqLworICAgIGludCBhcmM0OyAgICAgICAgICAgICAgICAgICAvKiBmbGFnIGZvciBhcmM0IHN1aXRlcyBzdXBwb3J0ICAgICAgICAgICAgICovCisgICAgaW50IGF1dGhfbW9kZTsgICAgICAgICAgICAgIC8qIHZlcmlmeSBtb2RlIGZvciBjb25uZWN0aW9uICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG1mbF9jb2RlOyAgICAgLyogY29kZSBmb3IgbWF4aW11bSBmcmFnbWVudCBsZW5ndGggICAgICAgICAqLworICAgIGludCB0cnVuY19obWFjOyAgICAgICAgICAgICAvKiBhY2NlcHQgdHJ1bmNhdGVkIGhtYWM/ICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHRpY2tldHM7ICAgICAgICAgICAgICAgIC8qIGVuYWJsZSAvIGRpc2FibGUgc2Vzc2lvbiB0aWNrZXRzICAgICAgICAgKi8KKyAgICBpbnQgdGlja2V0X3RpbWVvdXQ7ICAgICAgICAgLyogc2Vzc2lvbiB0aWNrZXQgbGlmZXRpbWUgICAgICAgICAgICAgICAgICAqLworICAgIGludCBjYWNoZV9tYXg7ICAgICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIHNlc3Npb24gY2FjaGUgZW50cmllcyAgICAgICovCisgICAgaW50IGNhY2hlX3RpbWVvdXQ7ICAgICAgICAgIC8qIGV4cGlyYXRpb24gZGVsYXkgb2Ygc2Vzc2lvbiBjYWNoZSBlbnRyaWVzICovCisgICAgY2hhciAqc25pOyAgICAgICAgICAgICAgICAgIC8qIHN0cmluZyBkZXNjcmliaW5nIHNuaSBpbmZvcm1hdGlvbiAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICphbHBuX3N0cmluZzsgICAgLyogQUxQTiBzdXBwb3J0ZWQgcHJvdG9jb2xzICAgICAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmRobV9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBESCBwYXJhbWV0ZXJzICAgICAgICAgICovCisgICAgaW50IGV4dGVuZGVkX21zOyAgICAgICAgICAgIC8qIGFsbG93IG5lZ290aWF0aW9uIG9mIGV4dGVuZGVkIE1TPyAgICAgICAgKi8KKyAgICBpbnQgZXRtOyAgICAgICAgICAgICAgICAgICAgLyogYWxsb3cgbmVnb3RpYXRpb24gb2YgZW5jcnlwdC10aGVuLU1BQz8gICAqLworICAgIGludCB0cmFuc3BvcnQ7ICAgICAgICAgICAgICAvKiBUTFMgb3IgRFRMUz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IGNvb2tpZXM7ICAgICAgICAgICAgICAgIC8qIFVzZSBjb29raWVzIGZvciBEVExTPyAtMSB0byBicmVhayB0aGVtICAgKi8KKyAgICBpbnQgYW50aV9yZXBsYXk7ICAgICAgICAgICAgLyogVXNlIGFudGktcmVwbGF5IGZvciBEVExTPyAtMSBmb3IgZGVmYXVsdCAqLworICAgIHVpbnQzMl90IGhzX3RvX21pbjsgICAgICAgICAvKiBJbml0aWFsIHZhbHVlIG9mIERUTFMgaGFuZHNoYWtlIHRpbWVyICAgICovCisgICAgdWludDMyX3QgaHNfdG9fbWF4OyAgICAgICAgIC8qIE1heCB2YWx1ZSBvZiBEVExTIGhhbmRzaGFrZSB0aW1lciAgICAgICAgKi8KKyAgICBpbnQgYmFkbWFjX2xpbWl0OyAgICAgICAgICAgLyogTGltaXQgb2YgcmVjb3JkcyB3aXRoIGJhZCBNQUMgICAgICAgICAgICAqLworfSBvcHQ7CisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgIGNvbnN0IGNoYXIgKnAsICpiYXNlbmFtZTsKKworICAgIC8qIEV4dHJhY3QgYmFzZW5hbWUgZnJvbSBmaWxlICovCisgICAgZm9yKCBwID0gYmFzZW5hbWUgPSBmaWxlOyAqcCAhPSAnXDAnOyBwKysgKQorICAgICAgICBpZiggKnAgPT0gJy8nIHx8ICpwID09ICdcXCcgKQorICAgICAgICAgICAgYmFzZW5hbWUgPSBwICsgMTsKKworICAgIG1iZWR0bHNfZnByaW50ZiggKEZJTEUgKikgY3R4LCAiJXM6JTA0ZDogfCVkfCAlcyIsIGJhc2VuYW1lLCBsaW5lLCBsZXZlbCwgc3RyICk7CisgICAgZmZsdXNoKCAgKEZJTEUgKikgY3R4ICApOworfQorCisvKgorICogVGVzdCByZWN2L3NlbmQgZnVuY3Rpb25zIHRoYXQgbWFrZSBzdXJlIGVhY2ggdHJ5IHJldHVybnMKKyAqIFdBTlRfUkVBRC9XQU5UX1dSSVRFIGF0IGxlYXN0IG9uY2UgYmVmb3JlIHN1Y2Vzc2VkaW5nCisgKi8KK3N0YXRpYyBpbnQgbXlfcmVjdiggdm9pZCAqY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIHN0YXRpYyBpbnQgZmlyc3RfdHJ5ID0gMTsKKyAgICBpbnQgcmV0OworCisgICAgaWYoIGZpcnN0X3RyeSApCisgICAgeworICAgICAgICBmaXJzdF90cnkgPSAwOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgKTsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX25ldF9yZWN2KCBjdHgsIGJ1ZiwgbGVuICk7CisgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICkKKyAgICAgICAgZmlyc3RfdHJ5ID0gMTsgLyogTmV4dCBjYWxsIHdpbGwgYmUgYSBuZXcgb3BlcmF0aW9uICovCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworc3RhdGljIGludCBteV9zZW5kKCB2b2lkICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgc3RhdGljIGludCBmaXJzdF90cnkgPSAxOworICAgIGludCByZXQ7CisKKyAgICBpZiggZmlyc3RfdHJ5ICkKKyAgICB7CisgICAgICAgIGZpcnN0X3RyeSA9IDA7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKTsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX25ldF9zZW5kKCBjdHgsIGJ1ZiwgbGVuICk7CisgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgIGZpcnN0X3RyeSA9IDE7IC8qIE5leHQgY2FsbCB3aWxsIGJlIGEgbmV3IG9wZXJhdGlvbiAqLworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBSZXR1cm4gYXV0aG1vZGUgZnJvbSBzdHJpbmcsIG9yIC0xIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2F1dGhfbW9kZSggY29uc3QgY2hhciAqcyApCit7CisgICAgaWYoIHN0cmNtcCggcywgIm5vbmUiICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfVkVSSUZZX05PTkUgKTsKKyAgICBpZiggc3RyY21wKCBzLCAib3B0aW9uYWwiICkgPT0gMCApCisgICAgICAgIHJldHVybiggTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMICk7CisgICAgaWYoIHN0cmNtcCggcywgInJlcXVpcmVkIiApID09IDAgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRCApOworCisgICAgcmV0dXJuKCAtMSApOworfQorCisvKgorICogVXNlZCBieSBzbmlfcGFyc2UgYW5kIHBza19wYXJzZSB0byBoYW5kbGUgY29tYS1zZXBhcmF0ZWQgbGlzdHMKKyAqLworI2RlZmluZSBHRVRfSVRFTSggZHN0ICkgICAgICAgICBcCisgICAgZHN0ID0gcDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSggKnAgIT0gJywnICkgICAgICAgICAgXAorICAgICAgICBpZiggKytwID4gZW5kICkgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGVycm9yOyAgICAgICAgIFwKKyAgICAqcCsrID0gJ1wwJzsKKworI2lmIGRlZmluZWQoU05JX09QVElPTikKK3R5cGVkZWYgc3RydWN0IF9zbmlfZW50cnkgc25pX2VudHJ5OworCitzdHJ1Y3QgX3NuaV9lbnRyeSB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0ICpjZXJ0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCAqa2V5OworICAgIG1iZWR0bHNfeDUwOV9jcnQqIGNhOworICAgIG1iZWR0bHNfeDUwOV9jcmwqIGNybDsKKyAgICBpbnQgYXV0aG1vZGU7CisgICAgc25pX2VudHJ5ICpuZXh0OworfTsKKwordm9pZCBzbmlfZnJlZSggc25pX2VudHJ5ICpoZWFkICkKK3sKKyAgICBzbmlfZW50cnkgKmN1ciA9IGhlYWQsICpuZXh0OworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggY3VyLT5jZXJ0ICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyLT5jZXJ0ICk7CisKKyAgICAgICAgbWJlZHRsc19wa19mcmVlKCBjdXItPmtleSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGN1ci0+a2V5ICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCBjdXItPmNhICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyLT5jYSApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggY3VyLT5jcmwgKTsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBjdXItPmNybCApOworCisgICAgICAgIG5leHQgPSBjdXItPm5leHQ7CisgICAgICAgIG1iZWR0bHNfZnJlZSggY3VyICk7CisgICAgICAgIGN1ciA9IG5leHQ7CisgICAgfQorfQorCisvKgorICogUGFyc2UgYSBzdHJpbmcgb2Ygc2V4dHVwbGVzIG5hbWUxLGNydDEsa2V5MSxjYTEsY3JsMSxhdXRoMVssLi4uXQorICogaW50byBhIHVzYWJsZSBzbmlfZW50cnkgbGlzdC4gRm9yIGNhMSwgY3JsMSwgYXV0aDEsIHRoZSBzcGVjaWFsIHZhbHVlCisgKiAnLScgbWVhbnMgdW5zZXQuIElmIGNhMSBpcyB1bnNldCwgdGhlbiBjcmwxIGlzIGlnbm9yZWQgdG9vLgorICoKKyAqIE1vZGlmaWVzIHRoZSBpbnB1dCBzdHJpbmchIFRoaXMgaXMgbm90IHByb2R1Y3Rpb24gcXVhbGl0eSEKKyAqLworc25pX2VudHJ5ICpzbmlfcGFyc2UoIGNoYXIgKnNuaV9zdHJpbmcgKQoreworICAgIHNuaV9lbnRyeSAqY3VyID0gTlVMTCwgKm5ldyA9IE5VTEw7CisgICAgY2hhciAqcCA9IHNuaV9zdHJpbmc7CisgICAgY2hhciAqZW5kID0gcDsKKyAgICBjaGFyICpjcnRfZmlsZSwgKmtleV9maWxlLCAqY2FfZmlsZSwgKmNybF9maWxlLCAqYXV0aF9zdHI7CisKKyAgICB3aGlsZSggKmVuZCAhPSAnXDAnICkKKyAgICAgICAgKytlbmQ7CisgICAgKmVuZCA9ICcsJzsKKworICAgIHdoaWxlKCBwIDw9IGVuZCApCisgICAgeworICAgICAgICBpZiggKCBuZXcgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBzbmlfZW50cnkgKSApICkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNuaV9mcmVlKCBjdXIgKTsKKyAgICAgICAgICAgIHJldHVybiggTlVMTCApOworICAgICAgICB9CisKKyAgICAgICAgR0VUX0lURU0oIG5ldy0+bmFtZSApOworICAgICAgICBHRVRfSVRFTSggY3J0X2ZpbGUgKTsKKyAgICAgICAgR0VUX0lURU0oIGtleV9maWxlICk7CisgICAgICAgIEdFVF9JVEVNKCBjYV9maWxlICk7CisgICAgICAgIEdFVF9JVEVNKCBjcmxfZmlsZSApOworICAgICAgICBHRVRfSVRFTSggYXV0aF9zdHIgKTsKKworICAgICAgICBpZiggKCBuZXctPmNlcnQgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3g1MDlfY3J0ICkgKSApID09IE5VTEwgfHwKKyAgICAgICAgICAgICggbmV3LT5rZXkgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBtYmVkdGxzX3BrX2NvbnRleHQgKSApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggbmV3LT5jZXJ0ICk7CisgICAgICAgIG1iZWR0bHNfcGtfaW5pdCggbmV3LT5rZXkgKTsKKworICAgICAgICBpZiggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCBuZXctPmNlcnQsIGNydF9maWxlICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCBuZXctPmtleSwga2V5X2ZpbGUsICIiICkgIT0gMCApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmKCBzdHJjbXAoIGNhX2ZpbGUsICItIiApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBuZXctPmNhID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X2NydCApICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoIG5ldy0+Y2EgKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggbmV3LT5jYSwgY2FfZmlsZSApICE9IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3RyY21wKCBjcmxfZmlsZSwgIi0iICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIG5ldy0+Y3JsID0gbWJlZHRsc19jYWxsb2MoIDEsIHNpemVvZiggbWJlZHRsc194NTA5X2NybCApICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoIG5ldy0+Y3JsICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoIG5ldy0+Y3JsLCBjcmxfZmlsZSApICE9IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3RyY21wKCBhdXRoX3N0ciwgIi0iICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIG5ldy0+YXV0aG1vZGUgPSBnZXRfYXV0aF9tb2RlKCBhdXRoX3N0ciApICkgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ldy0+YXV0aG1vZGUgPSBERkxfQVVUSF9NT0RFOworCisgICAgICAgIG5ldy0+bmV4dCA9IGN1cjsKKyAgICAgICAgY3VyID0gbmV3OworICAgIH0KKworICAgIHJldHVybiggY3VyICk7CisKK2Vycm9yOgorICAgIHNuaV9mcmVlKCBuZXcgKTsKKyAgICBzbmlfZnJlZSggY3VyICk7CisgICAgcmV0dXJuKCBOVUxMICk7Cit9CisKKy8qCisgKiBTTkkgY2FsbGJhY2suCisgKi8KK2ludCBzbmlfY2FsbGJhY2soIHZvaWQgKnBfaW5mbywgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuICkKK3sKKyAgICBjb25zdCBzbmlfZW50cnkgKmN1ciA9IChjb25zdCBzbmlfZW50cnkgKikgcF9pbmZvOworCisgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCBuYW1lX2xlbiA9PSBzdHJsZW4oIGN1ci0+bmFtZSApICYmCisgICAgICAgICAgICBtZW1jbXAoIG5hbWUsIGN1ci0+bmFtZSwgbmFtZV9sZW4gKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGN1ci0+Y2EgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfc2V0X2hzX2NhX2NoYWluKCBzc2wsIGN1ci0+Y2EsIGN1ci0+Y3JsICk7CisKKyAgICAgICAgICAgIGlmKCBjdXItPmF1dGhtb2RlICE9IERGTF9BVVRIX01PREUgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3NldF9oc19hdXRobW9kZSggc3NsLCBjdXItPmF1dGhtb2RlICk7CisKKyAgICAgICAgICAgIHJldHVybiggbWJlZHRsc19zc2xfc2V0X2hzX293bl9jZXJ0KCBzc2wsIGN1ci0+Y2VydCwgY3VyLT5rZXkgKSApOworICAgICAgICB9CisKKyAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgIH0KKworICAgIHJldHVybiggLTEgKTsKK30KKworI2VuZGlmIC8qIFNOSV9PUFRJT04gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorCisjZGVmaW5lIEhFWDJOVU0oIGMgKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggYyA+PSAnMCcgJiYgYyA8PSAnOScgKSAgICAgIFwKKyAgICAgICAgICAgIGMgLT0gJzAnOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgaWYoIGMgPj0gJ2EnICYmIGMgPD0gJ2YnICkgXAorICAgICAgICAgICAgYyAtPSAnYScgLSAxMDsgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiggYyA+PSAnQScgJiYgYyA8PSAnRicgKSBcCisgICAgICAgICAgICBjIC09ICdBJyAtIDEwOyAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiggLTEgKTsKKworLyoKKyAqIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGJ5dGVzLgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKi8KK2ludCB1bmhleGlmeSggdW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgc2l6ZV90IGo7CisKKyAgICAqb2xlbiA9IHN0cmxlbiggaW5wdXQgKTsKKyAgICBpZiggKm9sZW4gJSAyICE9IDAgfHwgKm9sZW4gLyAyID4gTUJFRFRMU19QU0tfTUFYX0xFTiApCisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICAqb2xlbiAvPSAyOworCisgICAgZm9yKCBqID0gMDsgaiA8ICpvbGVuICogMjsgaiArPSAyICkKKyAgICB7CisgICAgICAgIGMgPSBpbnB1dFtqXTsKKyAgICAgICAgSEVYMk5VTSggYyApOworICAgICAgICBvdXRwdXRbIGogLyAyIF0gPSBjIDw8IDQ7CisKKyAgICAgICAgYyA9IGlucHV0W2ogKyAxXTsKKyAgICAgICAgSEVYMk5VTSggYyApOworICAgICAgICBvdXRwdXRbIGogLyAyIF0gfD0gYzsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgX3Bza19lbnRyeSBwc2tfZW50cnk7CisKK3N0cnVjdCBfcHNrX2VudHJ5Cit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzaXplX3Qga2V5X2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX1BTS19NQVhfTEVOXTsKKyAgICBwc2tfZW50cnkgKm5leHQ7Cit9OworCisvKgorICogRnJlZSBhIGxpc3Qgb2YgcHNrX2VudHJ5J3MKKyAqLwordm9pZCBwc2tfZnJlZSggcHNrX2VudHJ5ICpoZWFkICkKK3sKKyAgICBwc2tfZW50cnkgKm5leHQ7CisKKyAgICB3aGlsZSggaGVhZCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG5leHQgPSBoZWFkLT5uZXh0OworICAgICAgICBtYmVkdGxzX2ZyZWUoIGhlYWQgKTsKKyAgICAgICAgaGVhZCA9IG5leHQ7CisgICAgfQorfQorCisvKgorICogUGFyc2UgYSBzdHJpbmcgb2YgcGFpcnMgbmFtZTEsa2V5MVssbmFtZTIsa2V5MlssLi4uXV0KKyAqIGludG8gYSB1c2FibGUgcHNrX2VudHJ5IGxpc3QuCisgKgorICogTW9kaWZpZXMgdGhlIGlucHV0IHN0cmluZyEgVGhpcyBpcyBub3QgcHJvZHVjdGlvbiBxdWFsaXR5IQorICovCitwc2tfZW50cnkgKnBza19wYXJzZSggY2hhciAqcHNrX3N0cmluZyApCit7CisgICAgcHNrX2VudHJ5ICpjdXIgPSBOVUxMLCAqbmV3ID0gTlVMTDsKKyAgICBjaGFyICpwID0gcHNrX3N0cmluZzsKKyAgICBjaGFyICplbmQgPSBwOworICAgIGNoYXIgKmtleV9oZXg7CisKKyAgICB3aGlsZSggKmVuZCAhPSAnXDAnICkKKyAgICAgICAgKytlbmQ7CisgICAgKmVuZCA9ICcsJzsKKworICAgIHdoaWxlKCBwIDw9IGVuZCApCisgICAgeworICAgICAgICBpZiggKCBuZXcgPSBtYmVkdGxzX2NhbGxvYyggMSwgc2l6ZW9mKCBwc2tfZW50cnkgKSApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIG1lbXNldCggbmV3LCAwLCBzaXplb2YoIHBza19lbnRyeSApICk7CisKKyAgICAgICAgR0VUX0lURU0oIG5ldy0+bmFtZSApOworICAgICAgICBHRVRfSVRFTSgga2V5X2hleCApOworCisgICAgICAgIGlmKCB1bmhleGlmeSggbmV3LT5rZXksIGtleV9oZXgsICZuZXctPmtleV9sZW4gKSAhPSAwICkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgbmV3LT5uZXh0ID0gY3VyOworICAgICAgICBjdXIgPSBuZXc7CisgICAgfQorCisgICAgcmV0dXJuKCBjdXIgKTsKKworZXJyb3I6CisgICAgcHNrX2ZyZWUoIG5ldyApOworICAgIHBza19mcmVlKCBjdXIgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIFBTSyBjYWxsYmFjaworICovCitpbnQgcHNrX2NhbGxiYWNrKCB2b2lkICpwX2luZm8sIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiApCit7CisgICAgcHNrX2VudHJ5ICpjdXIgPSAocHNrX2VudHJ5ICopIHBfaW5mbzsKKworICAgIHdoaWxlKCBjdXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggbmFtZV9sZW4gPT0gc3RybGVuKCBjdXItPm5hbWUgKSAmJgorICAgICAgICAgICAgbWVtY21wKCBuYW1lLCBjdXItPm5hbWUsIG5hbWVfbGVuICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiggbWJlZHRsc19zc2xfc2V0X2hzX3Bzayggc3NsLCBjdXItPmtleSwgY3VyLT5rZXlfbGVuICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4oIC0xICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKK3N0YXRpYyBtYmVkdGxzX25ldF9jb250ZXh0IGxpc3Rlbl9mZCwgY2xpZW50X2ZkOworCisvKiBJbnRlcnJ1cHRpb24gaGFuZGxlciB0byBlbnN1cmUgY2xlYW4gZXhpdCAoZm9yIHZhbGdyaW5kIHRlc3RpbmcpICovCisjaWYgIWRlZmluZWQoX1dJTjMyKQorc3RhdGljIGludCByZWNlaXZlZF9zaWd0ZXJtID0gMDsKK3ZvaWQgdGVybV9oYW5kbGVyKCBpbnQgc2lnICkKK3sKKyAgICAoKHZvaWQpIHNpZyk7CisgICAgcmVjZWl2ZWRfc2lndGVybSA9IDE7CisgICAgbWJlZHRsc19uZXRfZnJlZSggJmxpc3Rlbl9mZCApOyAvKiBjYXVzZXMgbWJlZHRsc19uZXRfYWNjZXB0KCkgdG8gYWJvcnQgKi8KKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7IC8qIGNhdXNlcyBuZXRfcmVhZCgpIHRvIGFib3J0ICovCit9CisjZW5kaWYKKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwLCBsZW4sIHdyaXR0ZW4sIGZyYWdzLCBleGNoYW5nZXNfbGVmdDsKKyAgICBpbnQgdmVyc2lvbl9zdWl0ZXNbNF1bMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbSU9fQlVGX0xFTl07CisjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9fU09NRV9fUFNLX0VOQUJMRUQpCisgICAgdW5zaWduZWQgY2hhciBwc2tbTUJFRFRMU19QU0tfTUFYX0xFTl07CisgICAgc2l6ZV90IHBza19sZW4gPSAwOworICAgIHBza19lbnRyeSAqcHNrX2luZm8gPSBOVUxMOworI2VuZGlmCisgICAgY29uc3QgY2hhciAqcGVycyA9ICJzc2xfc2VydmVyMiI7CisgICAgdW5zaWduZWQgY2hhciBjbGllbnRfaXBbMTZdID0geyAwIH07CisgICAgc2l6ZV90IGNsaWlwX2xlbjsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKQorICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9jdHggY29va2llX2N0eDsKKyNlbmRpZgorCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisjaWYgZGVmaW5lZChNQkVEVExTX1RJTUlOR19DKQorICAgIG1iZWR0bHNfdGltaW5nX2RlbGF5X2NvbnRleHQgdGltZXI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04pCisgICAgdW5zaWduZWQgY2hhciByZW5lZ29fcGVyaW9kWzhdID0geyAwIH07CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNhY2VydDsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IHNydmNlcnQ7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrZXk7CisgICAgbWJlZHRsc194NTA5X2NydCBzcnZjZXJ0MjsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGtleTI7CisgICAgaW50IGtleV9jZXJ0X2luaXQgPSAwLCBrZXlfY2VydF9pbml0MiA9IDA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBtYmVkdGxzX2RobV9jb250ZXh0IGRobTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0IGNhY2hlOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCisgICAgbWJlZHRsc19zc2xfdGlja2V0X2NvbnRleHQgdGlja2V0X2N0eDsKKyNlbmRpZgorI2lmIGRlZmluZWQoU05JX09QVElPTikKKyAgICBzbmlfZW50cnkgKnNuaV9pbmZvID0gTlVMTDsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQUxQTikKKyAgICBjb25zdCBjaGFyICphbHBuX2xpc3RbMTBdOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICB1bnNpZ25lZCBjaGFyIGFsbG9jX2J1ZlsxMDAwMDBdOworI2VuZGlmCisKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKyAgICBjb25zdCBpbnQgKmxpc3Q7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBhbGxvY19idWYsIHNpemVvZihhbGxvY19idWYpICk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIG1lbW9yeSByZWZlcmVuY2VzIGFyZSB2YWxpZCBpbiBjYXNlIHdlIGV4aXQgZWFybHkuCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJmNsaWVudF9mZCApOworICAgIG1iZWR0bHNfbmV0X2luaXQoICZsaXN0ZW5fZmQgKTsKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZzcnZjZXJ0ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleSApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJnNydmNlcnQyICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmcGtleTIgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIG1iZWR0bHNfZGhtX2luaXQoICZkaG0gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKKyAgICBtYmVkdGxzX3NzbF9jYWNoZV9pbml0KCAmY2FjaGUgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgIG1iZWR0bHNfc3NsX3RpY2tldF9pbml0KCAmdGlja2V0X2N0eCApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIG1lbXNldCggKHZvaWQgKikgYWxwbl9saXN0LCAwLCBzaXplb2YoIGFscG5fbGlzdCApICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKQorICAgIG1iZWR0bHNfc3NsX2Nvb2tpZV9pbml0KCAmY29va2llX2N0eCApOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisgICAgLyogQWJvcnQgY2xlYW5seSBvbiBTSUdURVJNIGFuZCBTSUdJTlQgKi8KKyAgICBzaWduYWwoIFNJR1RFUk0sIHRlcm1faGFuZGxlciApOworICAgIHNpZ25hbCggU0lHSU5ULCB0ZXJtX2hhbmRsZXIgKTsKKyNlbmRpZgorCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBpZiggcmV0ID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKworICAgICAgICBsaXN0ID0gbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKTsKKyAgICAgICAgd2hpbGUoICpsaXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoIiAlLTQycyIsIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCAqbGlzdCApICk7CisgICAgICAgICAgICBsaXN0Kys7CisgICAgICAgICAgICBpZiggISpsaXN0ICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCIgJXNcbiIsIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCAqbGlzdCApICk7CisgICAgICAgICAgICBsaXN0Kys7CisgICAgICAgIH0KKyAgICAgICAgbWJlZHRsc19wcmludGYoIlxuIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQuc2VydmVyX2FkZHIgICAgICAgICA9IERGTF9TRVJWRVJfQUREUjsKKyAgICBvcHQuc2VydmVyX3BvcnQgICAgICAgICA9IERGTF9TRVJWRVJfUE9SVDsKKyAgICBvcHQuZGVidWdfbGV2ZWwgICAgICAgICA9IERGTF9ERUJVR19MRVZFTDsKKyAgICBvcHQubmJpbyAgICAgICAgICAgICAgICA9IERGTF9OQklPOworICAgIG9wdC5yZWFkX3RpbWVvdXQgICAgICAgID0gREZMX1JFQURfVElNRU9VVDsKKyAgICBvcHQuY2FfZmlsZSAgICAgICAgICAgICA9IERGTF9DQV9GSUxFOworICAgIG9wdC5jYV9wYXRoICAgICAgICAgICAgID0gREZMX0NBX1BBVEg7CisgICAgb3B0LmNydF9maWxlICAgICAgICAgICAgPSBERkxfQ1JUX0ZJTEU7CisgICAgb3B0LmtleV9maWxlICAgICAgICAgICAgPSBERkxfS0VZX0ZJTEU7CisgICAgb3B0LmNydF9maWxlMiAgICAgICAgICAgPSBERkxfQ1JUX0ZJTEUyOworICAgIG9wdC5rZXlfZmlsZTIgICAgICAgICAgID0gREZMX0tFWV9GSUxFMjsKKyAgICBvcHQucHNrICAgICAgICAgICAgICAgICA9IERGTF9QU0s7CisgICAgb3B0LnBza19pZGVudGl0eSAgICAgICAgPSBERkxfUFNLX0lERU5USVRZOworICAgIG9wdC5wc2tfbGlzdCAgICAgICAgICAgID0gREZMX1BTS19MSVNUOworICAgIG9wdC5lY2pwYWtlX3B3ICAgICAgICAgID0gREZMX0VDSlBBS0VfUFc7CisgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdPSBERkxfRk9SQ0VfQ0lQSEVSOworICAgIG9wdC52ZXJzaW9uX3N1aXRlcyAgICAgID0gREZMX1ZFUlNJT05fU1VJVEVTOworICAgIG9wdC5yZW5lZ290aWF0aW9uICAgICAgID0gREZMX1JFTkVHT1RJQVRJT047CisgICAgb3B0LmFsbG93X2xlZ2FjeSAgICAgICAgPSBERkxfQUxMT1dfTEVHQUNZOworICAgIG9wdC5yZW5lZ290aWF0ZSAgICAgICAgID0gREZMX1JFTkVHT1RJQVRFOworICAgIG9wdC5yZW5lZ29fZGVsYXkgICAgICAgID0gREZMX1JFTkVHT19ERUxBWTsKKyAgICBvcHQucmVuZWdvX3BlcmlvZCAgICAgICA9IERGTF9SRU5FR09fUEVSSU9EOworICAgIG9wdC5leGNoYW5nZXMgICAgICAgICAgID0gREZMX0VYQ0hBTkdFUzsKKyAgICBvcHQubWluX3ZlcnNpb24gICAgICAgICA9IERGTF9NSU5fVkVSU0lPTjsKKyAgICBvcHQubWF4X3ZlcnNpb24gICAgICAgICA9IERGTF9NQVhfVkVSU0lPTjsKKyAgICBvcHQuYXJjNCAgICAgICAgICAgICAgICA9IERGTF9BUkM0OworICAgIG9wdC5hdXRoX21vZGUgICAgICAgICAgID0gREZMX0FVVEhfTU9ERTsKKyAgICBvcHQubWZsX2NvZGUgICAgICAgICAgICA9IERGTF9NRkxfQ09ERTsKKyAgICBvcHQudHJ1bmNfaG1hYyAgICAgICAgICA9IERGTF9UUlVOQ19ITUFDOworICAgIG9wdC50aWNrZXRzICAgICAgICAgICAgID0gREZMX1RJQ0tFVFM7CisgICAgb3B0LnRpY2tldF90aW1lb3V0ICAgICAgPSBERkxfVElDS0VUX1RJTUVPVVQ7CisgICAgb3B0LmNhY2hlX21heCAgICAgICAgICAgPSBERkxfQ0FDSEVfTUFYOworICAgIG9wdC5jYWNoZV90aW1lb3V0ICAgICAgID0gREZMX0NBQ0hFX1RJTUVPVVQ7CisgICAgb3B0LnNuaSAgICAgICAgICAgICAgICAgPSBERkxfU05JOworICAgIG9wdC5hbHBuX3N0cmluZyAgICAgICAgID0gREZMX0FMUE5fU1RSSU5HOworICAgIG9wdC5kaG1fZmlsZSAgICAgICAgICAgID0gREZMX0RITV9GSUxFOworICAgIG9wdC50cmFuc3BvcnQgICAgICAgICAgID0gREZMX1RSQU5TUE9SVDsKKyAgICBvcHQuY29va2llcyAgICAgICAgICAgICA9IERGTF9DT09LSUVTOworICAgIG9wdC5hbnRpX3JlcGxheSAgICAgICAgID0gREZMX0FOVElfUkVQTEFZOworICAgIG9wdC5oc190b19taW4gICAgICAgICAgID0gREZMX0hTX1RPX01JTjsKKyAgICBvcHQuaHNfdG9fbWF4ICAgICAgICAgICA9IERGTF9IU19UT19NQVg7CisgICAgb3B0LmJhZG1hY19saW1pdCAgICAgICAgPSBERkxfQkFETUFDX0xJTUlUOworICAgIG9wdC5leHRlbmRlZF9tcyAgICAgICAgID0gREZMX0VYVEVOREVEX01TOworICAgIG9wdC5ldG0gICAgICAgICAgICAgICAgID0gREZMX0VUTTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBpZiggc3RyY21wKCBwLCAic2VydmVyX3BvcnQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfYWRkciIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfYWRkciA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImR0bHMiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB0ID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIHQgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU07CisgICAgICAgICAgICBlbHNlIGlmKCB0ID09IDEgKQorICAgICAgICAgICAgICAgIG9wdC50cmFuc3BvcnQgPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkZWJ1Z19sZXZlbCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRlYnVnX2xldmVsID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kZWJ1Z19sZXZlbCA8IDAgfHwgb3B0LmRlYnVnX2xldmVsID4gNjU1MzUgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibmJpbyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm5iaW8gPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0Lm5iaW8gPCAwIHx8IG9wdC5uYmlvID4gMiApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZWFkX3RpbWVvdXQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQucmVhZF90aW1lb3V0ID0gYXRvaSggcSApOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjYV9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNhX2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjYV9wYXRoIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNhX3BhdGggPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjcnRfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jcnRfZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImtleV9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmtleV9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY3J0X2ZpbGUyIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNydF9maWxlMiA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImtleV9maWxlMiIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5rZXlfZmlsZTIgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkaG1fZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5kaG1fZmlsZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInBzayIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5wc2sgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJwc2tfaWRlbnRpdHkiICkgPT0gMCApCisgICAgICAgICAgICBvcHQucHNrX2lkZW50aXR5ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicHNrX2xpc3QiICkgPT0gMCApCisgICAgICAgICAgICBvcHQucHNrX2xpc3QgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJlY2pwYWtlX3B3IiApID09IDAgKQorICAgICAgICAgICAgb3B0LmVjanBha2VfcHcgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmb3JjZV9jaXBoZXJzdWl0ZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzBdID0gbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkKCBxICk7CisKKyAgICAgICAgICAgIGlmKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMjsKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3B0LmZvcmNlX2NpcGhlcnN1aXRlWzFdID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ2ZXJzaW9uX3N1aXRlcyIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC52ZXJzaW9uX3N1aXRlcyA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlbmVnb3RpYXRpb24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5yZW5lZ290aWF0aW9uID0gKGF0b2koIHEgKSkgPyBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYWxsb3dfbGVnYWN5IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAtMTogb3B0LmFsbG93X2xlZ2FjeSA9IE1CRURUTFNfU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0U7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMDogIG9wdC5hbGxvd19sZWdhY3kgPSBNQkVEVExTX1NTTF9MRUdBQ1lfTk9fUkVORUdPVElBVElPTjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgb3B0LmFsbG93X2xlZ2FjeSA9IE1CRURUTFNfU1NMX0xFR0FDWV9BTExPV19SRU5FR09USUFUSU9OOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIHVzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlbmVnb3RpYXRlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVuZWdvdGlhdGUgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnJlbmVnb3RpYXRlIDwgMCB8fCBvcHQucmVuZWdvdGlhdGUgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInJlbmVnb19kZWxheSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnJlbmVnb19kZWxheSA9IGF0b2koIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJyZW5lZ29fcGVyaW9kIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucmVuZWdvX3BlcmlvZCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQucmVuZWdvX3BlcmlvZCA8IDIgfHwgb3B0LnJlbmVnb19wZXJpb2QgPiAyNTUgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZXhjaGFuZ2VzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZXhjaGFuZ2VzID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5leGNoYW5nZXMgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1pbl92ZXJzaW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAic3NsMyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxIiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInRsczFfMSIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoIHEsICJkdGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzIiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCBxLCAiZHRsczFfMiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtYXhfdmVyc2lvbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInNzbDMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzEiICkgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCBxLCAiZHRsczEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8yIiApID09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCggcSwgImR0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYXJjNCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCBhdG9pKCBxICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMDogICAgIG9wdC5hcmM0ID0gTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRDsgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICBvcHQuYXJjNCA9IE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRDsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJmb3JjZV92ZXJzaW9uIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAic3NsMyIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMSIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHQubWluX3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzE7CisgICAgICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAidGxzMV8xIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJ0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImR0bHMxIiApID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMjsKKyAgICAgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzI7CisgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImR0bHMxXzIiICkgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zOworICAgICAgICAgICAgICAgIG9wdC5tYXhfdmVyc2lvbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMzsKKyAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0ID0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYXV0aF9tb2RlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCBvcHQuYXV0aF9tb2RlID0gZ2V0X2F1dGhfbW9kZSggcSApICkgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1heF9mcmFnX2xlbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIjUxMiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWZsX2NvZGUgPSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fNTEyOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiMTAyNCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICBvcHQubWZsX2NvZGUgPSBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fMTAyNDsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIjIwNDgiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1mbF9jb2RlID0gTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzIwNDg7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICI0MDk2IiApID09IDAgKQorICAgICAgICAgICAgICAgIG9wdC5tZmxfY29kZSA9IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl80MDk2OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYWxwbiIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmFscG5fc3RyaW5nID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ0cnVuY19obWFjIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBvcHQudHJ1bmNfaG1hYyA9IE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogb3B0LnRydW5jX2htYWMgPSBNQkVEVExTX1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZXh0ZW5kZWRfbXMiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggYXRvaSggcSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6IG9wdC5leHRlbmRlZF9tcyA9IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0RJU0FCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wdC5leHRlbmRlZF9tcyA9IE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQ7IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdG8gdXNhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZXRtIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goIGF0b2koIHEgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBvcHQuZXRtID0gTUJFRFRMU19TU0xfRVRNX0RJU0FCTEVEOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wdC5ldG0gPSBNQkVEVExTX1NTTF9FVE1fRU5BQkxFRDsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ0aWNrZXRzIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQudGlja2V0cyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQudGlja2V0cyA8IDAgfHwgb3B0LnRpY2tldHMgPiAxICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInRpY2tldF90aW1lb3V0IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQudGlja2V0X3RpbWVvdXQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnRpY2tldF90aW1lb3V0IDwgMCApCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjYWNoZV9tYXgiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5jYWNoZV9tYXggPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmNhY2hlX21heCA8IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FjaGVfdGltZW91dCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmNhY2hlX3RpbWVvdXQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmNhY2hlX3RpbWVvdXQgPCAwICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImNvb2tpZXMiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5jb29raWVzID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5jb29raWVzIDwgLTEgfHwgb3B0LmNvb2tpZXMgPiAxKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiYW50aV9yZXBsYXkiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5hbnRpX3JlcGxheSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuYW50aV9yZXBsYXkgPCAwIHx8IG9wdC5hbnRpX3JlcGxheSA+IDEpCisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJiYWRtYWNfbGltaXQiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5iYWRtYWNfbGltaXQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmJhZG1hY19saW1pdCA8IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiaHNfdGltZW91dCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcCA9IHN0cmNociggcSwgJy0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAgICAgKnArKyA9ICdcMCc7CisgICAgICAgICAgICBvcHQuaHNfdG9fbWluID0gYXRvaSggcSApOworICAgICAgICAgICAgb3B0LmhzX3RvX21heCA9IGF0b2koIHAgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuaHNfdG9fbWluID09IDAgfHwgb3B0LmhzX3RvX21heCA8IG9wdC5oc190b19taW4gKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic25pIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuc25pID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19ERUJVR19DKQorICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggb3B0LmRlYnVnX2xldmVsICk7CisjZW5kaWYKKworICAgIGlmKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gPiAwICkKKyAgICB7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QgKmNpcGhlcnN1aXRlX2luZm87CisgICAgICAgIGNpcGhlcnN1aXRlX2luZm8gPSBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV9mcm9tX2lkKCBvcHQuZm9yY2VfY2lwaGVyc3VpdGVbMF0gKTsKKworICAgICAgICBpZiggb3B0Lm1heF92ZXJzaW9uICE9IC0xICYmCisgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5taW5fbWlub3JfdmVyID4gb3B0Lm1heF92ZXJzaW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZvcmNlZCBjaXBoZXJzdWl0ZSBub3QgYWxsb3dlZCB3aXRoIHRoaXMgcHJvdG9jb2wgdmVyc2lvblxuIik7CisgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorICAgICAgICBpZiggb3B0Lm1pbl92ZXJzaW9uICE9IC0xICYmCisgICAgICAgICAgICBjaXBoZXJzdWl0ZV9pbmZvLT5tYXhfbWlub3JfdmVyIDwgb3B0Lm1pbl92ZXJzaW9uICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZvcmNlZCBjaXBoZXJzdWl0ZSBub3QgYWxsb3dlZCB3aXRoIHRoaXMgcHJvdG9jb2wgdmVyc2lvblxuIik7CisgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElmIHdlIHNlbGVjdCBhIHZlcnNpb24gdGhhdCdzIG5vdCBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICogdGhpcyBzdWl0ZSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIGNvbW1vbiBjaXBoZXJzdWl0ZS4uLiAqLworICAgICAgICBpZiggb3B0Lm1heF92ZXJzaW9uID09IC0xIHx8CisgICAgICAgICAgICBvcHQubWF4X3ZlcnNpb24gPiBjaXBoZXJzdWl0ZV9pbmZvLT5tYXhfbWlub3JfdmVyICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm1heF92ZXJzaW9uID0gY2lwaGVyc3VpdGVfaW5mby0+bWF4X21pbm9yX3ZlcjsKKyAgICAgICAgfQorICAgICAgICBpZiggb3B0Lm1pbl92ZXJzaW9uIDwgY2lwaGVyc3VpdGVfaW5mby0+bWluX21pbm9yX3ZlciApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA9IGNpcGhlcnN1aXRlX2luZm8tPm1pbl9taW5vcl92ZXI7CisgICAgICAgICAgICAvKiBEVExTIHN0YXJ0cyB3aXRoIFRMUyAxLjEgKi8KKyAgICAgICAgICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSAmJgorICAgICAgICAgICAgICAgIG9wdC5taW5fdmVyc2lvbiA8IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMiApCisgICAgICAgICAgICAgICAgb3B0Lm1pbl92ZXJzaW9uID0gTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yOworICAgICAgICB9CisKKyAgICAgICAgLyogRW5hYmxlIFJDNCBpZiBuZWVkZWQgYW5kIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkICovCisgICAgICAgIGlmKCBjaXBoZXJzdWl0ZV9pbmZvLT5jaXBoZXIgPT0gTUJFRFRMU19DSVBIRVJfQVJDNF8xMjggKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggb3B0LmFyYzQgPT0gTUJFRFRMU19TU0xfQVJDNF9ESVNBQkxFRCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoImZvcmNlZCBSQzQgY2lwaGVyc3VpdGUgd2l0aCBSQzQgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgICAgIHJldCA9IDI7CisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3B0LmFyYzQgPSBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggb3B0LnZlcnNpb25fc3VpdGVzICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZVs0XSA9IHsgMCB9OworCisgICAgICAgIC8qIFBhcnNlIDQtZWxlbWVudCBjb21hLXNlcGFyYXRlZCBsaXN0ICovCisgICAgICAgIGZvciggaSA9IDAsIHAgPSAoY2hhciAqKSBvcHQudmVyc2lvbl9zdWl0ZXM7CisgICAgICAgICAgICAgaSA8IDQgJiYgKnAgIT0gJ1wwJzsKKyAgICAgICAgICAgICBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lW2ldID0gcDsKKworICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHN0cmluZyBhbmQgbW92ZSBvbiB0byBuZXh0IG9uZSAqLworICAgICAgICAgICAgd2hpbGUoICpwICE9ICcsJyAmJiAqcCAhPSAnXDAnICkKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICBpZiggKnAgPT0gJywnICkKKyAgICAgICAgICAgICAgICAqcCsrID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBpICE9IDQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInRvbyBmZXcgdmFsdWVzIGZvciB2ZXJzaW9uX3N1aXRlc1xuIiApOworICAgICAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCggdmVyc2lvbl9zdWl0ZXMsIDAsIHNpemVvZiggdmVyc2lvbl9zdWl0ZXMgKSApOworCisgICAgICAgIC8qIEdldCB0aGUgc3VpdGVzIGlkZW50aWZpZXJzIGZyb20gdGhlaXIgbmFtZSAqLworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgdmVyc2lvbl9zdWl0ZXNbaV1bMF0gPSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfaWQoIG5hbWVbaV0gKTsKKworICAgICAgICAgICAgaWYoIHZlcnNpb25fc3VpdGVzW2ldWzBdID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAidW5rbm93biBjaXBoZXJzdWl0ZTogJyVzJ1xuIiwgbmFtZVtpXSApOworICAgICAgICAgICAgICAgIHJldCA9IDI7CisgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIC8qCisgICAgICogVW5oZXhpZnkgdGhlIHByZS1zaGFyZWQga2V5IGFuZCBwYXJzZSB0aGUgbGlzdCBpZiBhbnkgZ2l2ZW4KKyAgICAgKi8KKyAgICBpZiggdW5oZXhpZnkoIHBzaywgb3B0LnBzaywgJnBza19sZW4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAicHJlLXNoYXJlZCBrZXkgbm90IHZhbGlkIGhleFxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG9wdC5wc2tfbGlzdCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmKCAoIHBza19pbmZvID0gcHNrX3BhcnNlKCBvcHQucHNrX2xpc3QgKSApID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggInBza19saXN0IGludmFsaWQiICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEICovCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgaWYoIG9wdC5hbHBuX3N0cmluZyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHAgPSAoY2hhciAqKSBvcHQuYWxwbl9zdHJpbmc7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIC8qIExlYXZlIHJvb20gZm9yIGEgZmluYWwgTlVMTCBpbiBhbHBuX2xpc3QgKi8KKyAgICAgICAgd2hpbGUoIGkgPCAoaW50KSBzaXplb2YgYWxwbl9saXN0IC0gMSAmJiAqcCAhPSAnXDAnICkKKyAgICAgICAgeworICAgICAgICAgICAgYWxwbl9saXN0W2krK10gPSBwOworCisgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgc3RyaW5nIGFuZCBtb3ZlIG9uIHRvIG5leHQgb25lICovCisgICAgICAgICAgICB3aGlsZSggKnAgIT0gJywnICYmICpwICE9ICdcMCcgKQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIGlmKCAqcCA9PSAnLCcgKQorICAgICAgICAgICAgICAgICpwKysgPSAnXDAnOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KKworICAgIC8qCisgICAgICogMC4gSW5pdGlhbGl6ZSB0aGUgUk5HIGFuZCB0aGUgc2Vzc2lvbiBkYXRhCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCByZXR1cm5lZCAtMHgleFxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSB0cnVzdGVkIENBCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgQ0Egcm9vdCBjZXJ0aWZpY2F0ZSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggc3RybGVuKCBvcHQuY2FfcGF0aCApICkKKyAgICAgICAgaWYoIHN0cmNtcCggb3B0LmNhX3BhdGgsICJub25lIiApID09IDAgKQorICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCAmY2FjZXJ0LCBvcHQuY2FfcGF0aCApOworICAgIGVsc2UgaWYoIHN0cmxlbiggb3B0LmNhX2ZpbGUgKSApCisgICAgICAgIGlmKCBzdHJjbXAoIG9wdC5jYV9maWxlLCAibm9uZSIgKSA9PSAwICkKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNhY2VydCwgb3B0LmNhX2ZpbGUgKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0VSVFNfQykKKyAgICAgICAgZm9yKCBpID0gMDsgbWJlZHRsc190ZXN0X2Nhc1tpXSAhPSBOVUxMOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY2FjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1iZWR0bHNfdGVzdF9jYXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X2Nhc19sZW5baV0gKTsKKyAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICByZXQgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19DRVJUU19DIG5vdCBkZWZpbmVkLiIpOworICAgIH0KKyNlbmRpZgorICAgIGlmKCByZXQgPCAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rICglZCBza2lwcGVkKVxuIiwgcmV0ICk7CisKKyAgICAvKgorICAgICAqIDEuMi4gTG9hZCBvd24gY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgc2VydmVyIGNlcnQuIGFuZCBrZXkuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBpZiggc3RybGVuKCBvcHQuY3J0X2ZpbGUgKSAmJiBzdHJjbXAoIG9wdC5jcnRfZmlsZSwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBrZXlfY2VydF9pbml0Kys7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJnNydmNlcnQsIG9wdC5jcnRfZmlsZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUgcmV0dXJuZWQgLTB4JXhcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGlmKCBzdHJsZW4oIG9wdC5rZXlfZmlsZSApICYmIHN0cmNtcCggb3B0LmtleV9maWxlLCAibm9uZSIgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGtleV9jZXJ0X2luaXQrKzsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmcGtleSwgb3B0LmtleV9maWxlLCAiIiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorICAgIGlmKCBrZXlfY2VydF9pbml0ID09IDEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIGNydF9maWxlIHdpdGhvdXQga2V5X2ZpbGUgb3IgdmljZS12ZXJzYVxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggc3RybGVuKCBvcHQuY3J0X2ZpbGUyICkgJiYgc3RyY21wKCBvcHQuY3J0X2ZpbGUyLCAibm9uZSIgKSAhPSAwICkKKyAgICB7CisgICAgICAgIGtleV9jZXJ0X2luaXQyKys7CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJnNydmNlcnQyLCBvcHQuY3J0X2ZpbGUyICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgyKSByZXR1cm5lZCAtMHgleFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoIHN0cmxlbiggb3B0LmtleV9maWxlMiApICYmIHN0cmNtcCggb3B0LmtleV9maWxlMiwgIm5vbmUiICkgIT0gMCApCisgICAgeworICAgICAgICBrZXlfY2VydF9pbml0MisrOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZwa2V5Miwgb3B0LmtleV9maWxlMiwgIiIgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKDIpIHJldHVybmVkIC0weCV4XG5cbiIsCisgICAgICAgICAgICAgICAgICAgIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZigga2V5X2NlcnRfaW5pdDIgPT0gMSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgY3J0X2ZpbGUyIHdpdGhvdXQga2V5X2ZpbGUyIG9yIHZpY2UtdmVyc2FcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisgICAgaWYoIGtleV9jZXJ0X2luaXQgPT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5jcnRfZmlsZSwgIm5vbmUiICkgIT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5rZXlfZmlsZSwgIm5vbmUiICkgIT0gMCAmJgorICAgICAgICBrZXlfY2VydF9pbml0MiA9PSAwICYmCisgICAgICAgIHN0cmNtcCggb3B0LmNydF9maWxlMiwgIm5vbmUiICkgIT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5rZXlfZmlsZTIsICJub25lIiApICE9IDAgKQorICAgIHsKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NFUlRTX0MpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiTm90IGNlcnRpZmljYXRlZCBvciBrZXkgcHJvdmlkZWQsIGFuZCBcbiIKKyAgICAgICAgICAgICAgICAiTUJFRFRMU19DRVJUU19DIG5vdCBkZWZpbmVkIVxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisjZWxzZQorI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZSggJnNydmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9yc2FfbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCAmcGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2tleV9yc2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhX2xlbiwgTlVMTCwgMCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3BrX3BhcnNlX2tleSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAga2V5X2NlcnRfaW5pdCA9IDI7CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmc3J2Y2VydDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtYmVkdGxzX3Rlc3Rfc3J2X2NydF9lYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjX2xlbiApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICB4NTA5X2NydF9wYXJzZTIgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCAmcGtleTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc190ZXN0X3Nydl9rZXlfZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc190ZXN0X3Nydl9rZXlfZWNfbGVuLCBOVUxMLCAwICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIHBrX3BhcnNlX2tleTIgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGtleV9jZXJ0X2luaXQyID0gMjsKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKyNlbmRpZiAvKiBNQkVEVExTX0NFUlRTX0MgKi8KKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgaWYoIG9wdC5kaG1fZmlsZSAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgREhNIHBhcmFtZXRlcnMuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fcGFyc2VfZGhtZmlsZSggJmRobSwgb3B0LmRobV9maWxlICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19kaG1fcGFyc2VfZGhtZmlsZSByZXR1cm5lZCAtMHglMDRYXG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTTklfT1BUSU9OKQorICAgIGlmKCBvcHQuc25pICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCBTTkkgaW5mb3JtYXRpb24uLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggc25pX2luZm8gPSBzbmlfcGFyc2UoIG9wdC5zbmkgKSApID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiIgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisgICAgfQorI2VuZGlmIC8qIFNOSV9PUFRJT04gKi8KKworICAgIC8qCisgICAgICogMi4gU2V0dXAgdGhlIGxpc3RlbmluZyBUQ1Agc29ja2V0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQmluZCBvbiAlczovLyVzOiVzLyAuLi4iLAorICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNID8gInRjcCIgOiAidWRwIiwKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfYWRkciA/IG9wdC5zZXJ2ZXJfYWRkciA6ICIqIiwKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfcG9ydCApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9iaW5kKCAmbGlzdGVuX2ZkLCBvcHQuc2VydmVyX2FkZHIsIG9wdC5zZXJ2ZXJfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ORVRfUFJPVE9fVENQIDogTUJFRFRMU19ORVRfUFJPVE9fVURQICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2JpbmQgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMy4gU2V0dXAgc3R1ZmYKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZXR0aW5nIHVwIHRoZSBTU0wvVExTIHN0cnVjdHVyZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICBvcHQudHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIG9wdC5hdXRoX21vZGUgIT0gREZMX0FVVEhfTU9ERSApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoICZjb25mLCBvcHQuYXV0aF9tb2RlICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCisgICAgaWYoIG9wdC5oc190b19taW4gIT0gREZMX0hTX1RPX01JTiB8fCBvcHQuaHNfdG9fbWF4ICE9IERGTF9IU19UT19NQVggKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0KCAmY29uZiwgb3B0LmhzX3RvX21pbiwgb3B0LmhzX3RvX21heCApOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX0RUTFMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX21heF9mcmFnX2xlbiggJmNvbmYsIG9wdC5tZmxfY29kZSApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX21heF9mcmFnX2xlbiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH07CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMpCisgICAgaWYoIG9wdC50cnVuY19obWFjICE9IERGTF9UUlVOQ19ITUFDICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYyggJmNvbmYsIG9wdC50cnVuY19obWFjICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRVhURU5ERURfTUFTVEVSX1NFQ1JFVCkKKyAgICBpZiggb3B0LmV4dGVuZGVkX21zICE9IERGTF9FWFRFTkRFRF9NUyApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCggJmNvbmYsIG9wdC5leHRlbmRlZF9tcyApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMpCisgICAgaWYoIG9wdC5ldG0gIT0gREZMX0VUTSApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZW5jcnlwdF90aGVuX21hYyggJmNvbmYsIG9wdC5ldG0gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9BTFBOKQorICAgIGlmKCBvcHQuYWxwbl9zdHJpbmcgIT0gTlVMTCApCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfYWxwbl9wcm90b2NvbHMoICZjb25mLCBhbHBuX2xpc3QgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCAmY29uZiwgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApOworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgbXlfZGVidWcsIHN0ZG91dCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9DQUNIRV9DKQorICAgIGlmKCBvcHQuY2FjaGVfbWF4ICE9IC0xICkKKyAgICAgICAgbWJlZHRsc19zc2xfY2FjaGVfc2V0X21heF9lbnRyaWVzKCAmY2FjaGUsIG9wdC5jYWNoZV9tYXggKTsKKworICAgIGlmKCBvcHQuY2FjaGVfdGltZW91dCAhPSAtMSApCisgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX3NldF90aW1lb3V0KCAmY2FjaGUsIG9wdC5jYWNoZV90aW1lb3V0ICk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX3Nlc3Npb25fY2FjaGUoICZjb25mLCAmY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NhY2hlX2dldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY2FjaGVfc2V0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTKQorICAgIGlmKCBvcHQudGlja2V0cyA9PSBNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFNfRU5BQkxFRCApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF90aWNrZXRfc2V0dXAoICZ0aWNrZXRfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZywKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnRpY2tldF90aW1lb3V0ICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfdGlja2V0X3NldHVwIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHNfY2IoICZjb25mLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3RpY2tldF93cml0ZSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF90aWNrZXRfcGFyc2UsCisgICAgICAgICAgICAgICAgJnRpY2tldF9jdHggKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggb3B0LnRyYW5zcG9ydCA9PSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKQorICAgIHsKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NPT0tJRV9DKQorICAgICAgICBpZiggb3B0LmNvb2tpZXMgPiAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29va2llX3NldHVwKCAmY29va2llX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2Nvb2tpZV9zZXR1cCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzKCAmY29uZiwgbWJlZHRsc19zc2xfY29va2llX3dyaXRlLCBtYmVkdGxzX3NzbF9jb29raWVfY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29va2llX2N0eCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9DT09LSUVfQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCisgICAgICAgIGlmKCBvcHQuY29va2llcyA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZl9kdGxzX2Nvb2tpZXMoICZjb25mLCBOVUxMLCBOVUxMLCBOVUxMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZICovCisgICAgICAgIHsKKyAgICAgICAgICAgIDsgLyogTm90aGluZyB0byBkbyAqLworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkpCisgICAgICAgIGlmKCBvcHQuYW50aV9yZXBsYXkgIT0gREZMX0FOVElfUkVQTEFZICkKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19hbnRpX3JlcGxheSggJmNvbmYsIG9wdC5hbnRpX3JlcGxheSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUKQorICAgICAgICBpZiggb3B0LmJhZG1hY19saW1pdCAhPSBERkxfQkFETUFDX0xJTUlUICkKKyAgICAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQoICZjb25mLCBvcHQuYmFkbWFjX2xpbWl0ICk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCisgICAgaWYoIG9wdC5mb3JjZV9jaXBoZXJzdWl0ZVswXSAhPSBERkxfRk9SQ0VfQ0lQSEVSICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXMoICZjb25mLCBvcHQuZm9yY2VfY2lwaGVyc3VpdGUgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgaWYoIG9wdC5hcmM0ICE9IERGTF9BUkM0ICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9hcmM0X3N1cHBvcnQoICZjb25mLCBvcHQuYXJjNCApOworI2VuZGlmCisKKyAgICBpZiggb3B0LnZlcnNpb25fc3VpdGVzICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24oICZjb25mLCB2ZXJzaW9uX3N1aXRlc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApOworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlc19mb3JfdmVyc2lvbiggJmNvbmYsIHZlcnNpb25fc3VpdGVzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8xICk7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzX2Zvcl92ZXJzaW9uKCAmY29uZiwgdmVyc2lvbl9zdWl0ZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzIgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24oICZjb25mLCB2ZXJzaW9uX3N1aXRlc1szXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMyApOworICAgIH0KKworICAgIGlmKCBvcHQuYWxsb3dfbGVnYWN5ICE9IERGTF9BTExPV19MRUdBQ1kgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2xlZ2FjeV9yZW5lZ290aWF0aW9uKCAmY29uZiwgb3B0LmFsbG93X2xlZ2FjeSApOworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUkVORUdPVElBVElPTikKKyAgICBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24oICZjb25mLCBvcHQucmVuZWdvdGlhdGlvbiApOworCisgICAgaWYoIG9wdC5yZW5lZ29fZGVsYXkgIT0gREZMX1JFTkVHT19ERUxBWSApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9lbmZvcmNlZCggJmNvbmYsIG9wdC5yZW5lZ29fZGVsYXkgKTsKKworICAgIGlmKCBvcHQucmVuZWdvX3BlcmlvZCAhPSBERkxfUkVORUdPX1BFUklPRCApCisgICAgeworICAgICAgICByZW5lZ29fcGVyaW9kWzddID0gb3B0LnJlbmVnb19wZXJpb2Q7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9wZXJpb2QoICZjb25mLCByZW5lZ29fcGVyaW9kICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykKKyAgICBpZiggc3RyY21wKCBvcHQuY2FfcGF0aCwgIm5vbmUiICkgIT0gMCAmJgorICAgICAgICBzdHJjbXAoIG9wdC5jYV9maWxlLCAibm9uZSIgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfY2FfY2hhaW4oICZjb25mLCAmY2FjZXJ0LCBOVUxMICk7CisgICAgfQorICAgIGlmKCBrZXlfY2VydF9pbml0ICkKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZl9vd25fY2VydCggJmNvbmYsICZzcnZjZXJ0LCAmcGtleSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICBpZigga2V5X2NlcnRfaW5pdDIgKQorICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0KCAmY29uZiwgJnNydmNlcnQyLCAmcGtleTIgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX293bl9jZXJ0IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoU05JX09QVElPTikKKyAgICBpZiggb3B0LnNuaSAhPSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9zbmkoICZjb25mLCBzbmlfY2FsbGJhY2ssIHNuaV9pbmZvICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEKQorICAgIGlmKCBzdHJsZW4oIG9wdC5wc2sgKSAhPSAwICYmIHN0cmxlbiggb3B0LnBza19pZGVudGl0eSApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfY29uZl9wc2soICZjb25mLCBwc2ssIHBza19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBvcHQucHNrX2lkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBvcHQucHNrX2lkZW50aXR5ICkgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIGZhaWxlZFxuICBtYmVkdGxzX3NzbF9jb25mX3BzayByZXR1cm5lZCAtMHglMDRYXG5cbiIsIC0gcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggb3B0LnBza19saXN0ICE9IE5VTEwgKQorICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3Bza19jYiggJmNvbmYsIHBza19jYWxsYmFjaywgcHNrX2luZm8gKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKQorICAgIC8qCisgICAgICogVXNlIGRpZmZlcmVudCBncm91cCB0aGFuIGRlZmF1bHQgREhNIGdyb3VwCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIGlmKCBvcHQuZGhtX2ZpbGUgIT0gTlVMTCApCisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW1fY3R4KCAmY29uZiwgJmRobSApOworI2VuZGlmCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBmYWlsZWRcbiAgbWJlZHRsc19zc2xfY29uZl9kaF9wYXJhbSByZXR1cm5lZCAtMHglMDRYXG5cbiIsIC0gcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmKCBvcHQubWluX3ZlcnNpb24gIT0gREZMX01JTl9WRVJTSU9OICkKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbiggJmNvbmYsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywgb3B0Lm1pbl92ZXJzaW9uICk7CisKKyAgICBpZiggb3B0Lm1heF92ZXJzaW9uICE9IERGTF9NSU5fVkVSU0lPTiApCisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24oICZjb25mLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsIG9wdC5tYXhfdmVyc2lvbiApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldHVwIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGlmKCBvcHQubmJpbyA9PSAyICkKKyAgICAgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJmNsaWVudF9mZCwgbXlfc2VuZCwgbXlfcmVjdiwgTlVMTCApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJmNsaWVudF9mZCwgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm5iaW8gPT0gMCA/IG1iZWR0bHNfbmV0X3JlY3ZfdGltZW91dCA6IE5VTEwgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKyAgICBtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoICZzc2wsICZ0aW1lciwgbWJlZHRsc190aW1pbmdfc2V0X2RlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3RpbWluZ19nZXRfZGVsYXkgKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworcmVzZXQ6CisjaWYgIWRlZmluZWQoX1dJTjMyKQorICAgIGlmKCByZWNlaXZlZF9zaWd0ZXJtICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGludGVycnVwdGVkIGJ5IFNJR1RFUk1cbiIgKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfQ0xJRU5UX1JFQ09OTkVDVCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISBDbGllbnQgaW5pdGlhdGVkIHJlY29ubmVjdGlvbiBmcm9tIHNhbWUgcG9ydFxuIiApOworICAgICAgICBnb3RvIGhhbmRzaGFrZTsKKyAgICB9CisKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciBlcnJvcl9idWZbMTAwXTsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBlcnJvcl9idWYsIDEwMCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZigiTGFzdCBlcnJvciB3YXM6ICVkIC0gJXNcblxuIiwgcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKKworICAgIG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQoICZzc2wgKTsKKworICAgIC8qCisgICAgICogMy4gV2FpdCB1bnRpbCBhIGNsaWVudCBjb25uZWN0cworICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdhaXRpbmcgZm9yIGEgcmVtb3RlIGNvbm5lY3Rpb24gLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9hY2NlcHQoICZsaXN0ZW5fZmQsICZjbGllbnRfZmQsCisgICAgICAgICAgICAgICAgICAgIGNsaWVudF9pcCwgc2l6ZW9mKCBjbGllbnRfaXAgKSwgJmNsaWlwX2xlbiApICkgIT0gMCApCisgICAgeworI2lmICFkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgaWYoIHJlY2VpdmVkX3NpZ3Rlcm0gKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBpbnRlcnJ1cHRlZCBieSBzaWduYWxcbiIgKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfbmV0X2FjY2VwdCByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggb3B0Lm5iaW8gPiAwICkKKyAgICAgICAgcmV0ID0gbWJlZHRsc19uZXRfc2V0X25vbmJsb2NrKCAmY2xpZW50X2ZkICk7CisgICAgZWxzZQorICAgICAgICByZXQgPSBtYmVkdGxzX25ldF9zZXRfYmxvY2soICZjbGllbnRfZmQgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbmV0X3NldF8obm9uKWJsb2NrKCkgcmV0dXJuZWQgLTB4JXhcblxuIiwgLXJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19zc2xfY29uZl9yZWFkX3RpbWVvdXQoICZjb25mLCBvcHQucmVhZF90aW1lb3V0ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZKQorICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTSApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCggJnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9pcCwgY2xpaXBfbGVuICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIgorICAgICAgICAgICAgICAgICAgICAibWJlZHRsc19zc2xfc2V0X2NsaWVudF90cmFuc3BvcnRfaWQoKSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRV9FTkFCTEVEKQorICAgIGlmKCBvcHQuZWNqcGFrZV9wdyAhPSBERkxfRUNKUEFLRV9QVyApCisgICAgeworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9zZXRfaHNfZWNqcGFrZV9wYXNzd29yZCggJnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG9wdC5lY2pwYWtlX3B3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggb3B0LmVjanBha2VfcHcgKSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldF9oc19lY2pwYWtlX3Bhc3N3b3JkIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiA0LiBIYW5kc2hha2UKKyAgICAgKi8KK2hhbmRzaGFrZToKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZXJmb3JtaW5nIHRoZSBTU0wvVExTIGhhbmRzaGFrZS4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCAmc3NsICk7CisgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEIHx8CisgICAgICAgICAgIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworCisgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVEICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGhlbGxvIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWRcbiIgKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZ290byByZXNldDsKKyAgICB9CisgICAgZWxzZSBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQorICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEICkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciB2cmZ5X2J1Zls1MTJdOworICAgICAgICAgICAgZmxhZ3MgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggJnNzbCApOworCisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCB2cmZ5X2J1Ziwgc2l6ZW9mKCB2cmZ5X2J1ZiApLCAiICAhICIsIGZsYWdzICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgfQorICAgIGVsc2UgLyogcmV0ID09IDAgKi8KKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4gICAgWyBQcm90b2NvbCBpcyAlcyBdXG4gICAgWyBDaXBoZXJzdWl0ZSBpcyAlcyBdXG4iLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF92ZXJzaW9uKCAmc3NsICksIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSggJnNzbCApICk7CisgICAgfQorCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfZ2V0X3JlY29yZF9leHBhbnNpb24oICZzc2wgKSApID49IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBbIFJlY29yZCBleHBhbnNpb24gaXMgJWQgXVxuIiwgcmV0ICk7CisgICAgZWxzZQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBbIFJlY29yZCBleHBhbnNpb24gaXMgdW5rbm93biAoY29tcHJlc3Npb24pIF1cbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCkKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBbIE1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzICV1IF1cbiIsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIG1iZWR0bHNfc3NsX2dldF9tYXhfZnJhZ19sZW4oICZzc2wgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCisgICAgaWYoIG9wdC5hbHBuX3N0cmluZyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmFscCA9IG1iZWR0bHNfc3NsX2dldF9hbHBuX3Byb3RvY29sKCAmc3NsICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIFsgQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgJXMgXVxuIiwKKyAgICAgICAgICAgICAgICBhbHAgPyBhbHAgOiAiKG5vbmUpIiApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgLyoKKyAgICAgKiA1LiBWZXJpZnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFZlcmlmeWluZyBwZWVyIFguNTA5IGNlcnRpZmljYXRlLi4uIiApOworCisgICAgaWYoICggZmxhZ3MgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCggJnNzbCApICkgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIHZyZnlfYnVmWzUxMl07CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4iICk7CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIGlmKCBtYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCAmc3NsICkgIT0gTlVMTCApCisgICAgeworICAgICAgICBjaGFyIGNydF9idWZbNTEyXTsKKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBQZWVyIGNlcnRpZmljYXRlIGluZm9ybWF0aW9uICAgIC4uLlxuIiApOworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIGNydF9idWYsIHNpemVvZiggY3J0X2J1ZiApLCAiICAgICAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X3BlZXJfY2VydCggJnNzbCApICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIGNydF9idWYgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCisKKyAgICBpZiggb3B0LmV4Y2hhbmdlcyA9PSAwICkKKyAgICAgICAgZ290byBjbG9zZV9ub3RpZnk7CisKKyAgICBleGNoYW5nZXNfbGVmdCA9IG9wdC5leGNoYW5nZXM7CitkYXRhX2V4Y2hhbmdlOgorICAgIC8qCisgICAgICogNi4gUmVhZCB0aGUgSFRUUCBSZXF1ZXN0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIDwgUmVhZCBmcm9tIGNsaWVudDoiICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIC8qCisgICAgICogVExTIGFuZCBEVExTIG5lZWQgZGlmZmVyZW50IHJlYWRpbmcgc3R5bGVzIChzdHJlYW0gdnMgZGF0YWdyYW0pCisgICAgICovCisgICAgaWYoIG9wdC50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTSApCisgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBpbnQgdGVybWluYXRlZCA9IDA7CisgICAgICAgICAgICBsZW4gPSBzaXplb2YoIGJ1ZiApIC0gMTsKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCAmc3NsLCBidWYsIGxlbiApOworCisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgfHwKKyAgICAgICAgICAgICAgICByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiggcmV0IDw9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCggcmV0ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZOgorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGdyYWNlZnVsbHlcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xvc2Vfbm90aWZ5OworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGNvbm5lY3Rpb24gd2FzIHJlc2V0IGJ5IHBlZXJcbiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX05FVF9DT05OX1JFU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXNldDsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgbWJlZHRsc19zc2xfcmVhZCByZXR1cm5lZCAtMHgleFxuIiwgLXJldCApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwoICZzc2wgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW4gPSByZXQ7CisgICAgICAgICAgICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICVkIGJ5dGVzIHJlYWRcblxuJXNcbiIsIGxlbiwgKGNoYXIgKikgYnVmICk7CisKKyAgICAgICAgICAgICAgICAvKiBFbmQgb2YgbWVzc2FnZSBzaG91bGQgYmUgZGV0ZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzeW50YXggb2YgdGhlCisgICAgICAgICAgICAgICAgICogYXBwbGljYXRpb24gcHJvdG9jb2wgKGVnIEhUVFApLCBqdXN0IHVzZSBhIGR1bW15IHRlc3QgaGVyZS4gKi8KKyAgICAgICAgICAgICAgICBpZiggYnVmW2xlbiAtIDFdID09ICdcbicgKQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgZXh0cmFfbGVuLCBvcmlfbGVuOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmxhcmdlcl9idWY7CisKKyAgICAgICAgICAgICAgICBvcmlfbGVuID0gcmV0OworICAgICAgICAgICAgICAgIGV4dHJhX2xlbiA9IChpbnQpIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCggJnNzbCApOworCisgICAgICAgICAgICAgICAgbGFyZ2VyX2J1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCBvcmlfbGVuICsgZXh0cmFfbGVuICsgMSApOworICAgICAgICAgICAgICAgIGlmKCBsYXJnZXJfYnVmID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iICk7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWVtc2V0KCBsYXJnZXJfYnVmLCAwLCBvcmlfbGVuICsgZXh0cmFfbGVuICk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCBsYXJnZXJfYnVmLCBidWYsIG9yaV9sZW4gKTsKKworICAgICAgICAgICAgICAgIC8qIFRoaXMgcmVhZCBzaG91bGQgbmV2ZXIgZmFpbCBhbmQgZ2V0IHRoZSB3aG9sZSBjYWNoZWQgZGF0YSAqLworICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGxhcmdlcl9idWYgKyBvcmlfbGVuLCBleHRyYV9sZW4gKTsKKyAgICAgICAgICAgICAgICBpZiggcmV0ICE9IGV4dHJhX2xlbiB8fAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwoICZzc2wgKSAhPSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfc3NsX3JlYWQgZmFpbGVkIG9uIGNhY2hlZCBkYXRhXG4iICk7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGFyZ2VyX2J1ZltvcmlfbGVuICsgZXh0cmFfbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgJXUgYnl0ZXMgcmVhZCAoJXUgKyAldSlcblxuJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmlfbGVuICsgZXh0cmFfbGVuLCBvcmlfbGVuLCBleHRyYV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBsYXJnZXJfYnVmICk7CisKKyAgICAgICAgICAgICAgICAvKiBFbmQgb2YgbWVzc2FnZSBzaG91bGQgYmUgZGV0ZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzeW50YXggb2YgdGhlCisgICAgICAgICAgICAgICAgICogYXBwbGljYXRpb24gcHJvdG9jb2wgKGVnIEhUVFApLCBqdXN0IHVzZSBhIGR1bW15IHRlc3QgaGVyZS4gKi8KKyAgICAgICAgICAgICAgICBpZiggbGFyZ2VyX2J1ZltvcmlfbGVuICsgZXh0cmFfbGVuIC0gMV0gPT0gJ1xuJyApCisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSAxOworCisgICAgICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBsYXJnZXJfYnVmICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCB0ZXJtaW5hdGVkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlKCAxICk7CisgICAgfQorICAgIGVsc2UgLyogTm90IHN0cmVhbSwgc28gZGF0YWdyYW0gKi8KKyAgICB7CisgICAgICAgIGxlbiA9IHNpemVvZiggYnVmICkgLSAxOworICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgICAgIGRvIHJldCA9IG1iZWR0bHNfc3NsX3JlYWQoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICAgICAgaWYoIHJldCA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKCByZXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZOgorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZ3JhY2VmdWxseVxuIiApOworICAgICAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgICAgICBnb3RvIGNsb3NlX25vdGlmeTsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG1iZWR0bHNfc3NsX3JlYWQgcmV0dXJuZWQgLTB4JXhcbiIsIC1yZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHJldDsKKyAgICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyByZWFkXG5cbiVzIiwgbGVuLCAoY2hhciAqKSBidWYgKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDdhLiBSZXF1ZXN0IHJlbmVnb3RpYXRpb24gd2hpbGUgY2xpZW50IGlzIHdhaXRpbmcgZm9yIGlucHV0IGZyb20gdXMuCisgICAgICogKG9ubHkgb24gdGhlIGZpcnN0IGV4Y2hhbmdlLCB0byBiZSBhYmxlIHRvIHRlc3QgcmV0cmFuc21pc3Npb24pCisgICAgICovCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQorICAgIGlmKCBvcHQucmVuZWdvdGlhdGUgJiYgZXhjaGFuZ2VzX2xlZnQgPT0gb3B0LmV4Y2hhbmdlcyApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBSZXF1ZXN0aW9uIHJlbmVnb3RpYXRpb24uLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfcmVuZWdvdGlhdGUoICZzc2wgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ICE9IE1CRURUTFNfRVJSX1NTTF9XQU5UX1JFQUQgJiYKKyAgICAgICAgICAgICAgICByZXQgIT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3JlbmVnb3RpYXRlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OICovCisKKyAgICAvKgorICAgICAqIDcuIFdyaXRlIHRoZSAyMDAgUmVzcG9uc2UKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgPiBXcml0ZSB0byBjbGllbnQ6IiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBsZW4gPSBzcHJpbnRmKCAoY2hhciAqKSBidWYsIEhUVFBfUkVTUE9OU0UsCisgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlKCAmc3NsICkgKTsKKworICAgIGlmKCBvcHQudHJhbnNwb3J0ID09IE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0gKQorICAgIHsKKyAgICAgICAgZm9yKCB3cml0dGVuID0gMCwgZnJhZ3MgPSAwOyB3cml0dGVuIDwgbGVuOyB3cml0dGVuICs9IHJldCwgZnJhZ3MrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlKCAoIHJldCA9IG1iZWR0bHNfc3NsX3dyaXRlKCAmc3NsLCBidWYgKyB3cml0dGVuLCBsZW4gLSB3cml0dGVuICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHJldCA9PSBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBwZWVyIGNsb3NlZCB0aGUgY29ubmVjdGlvblxuXG4iICk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmCisgICAgICAgICAgICAgICAgICAgIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byByZXNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvKiBOb3Qgc3RyZWFtLCBzbyBkYXRhZ3JhbSAqLworICAgIHsKKyAgICAgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfd3JpdGUoICZzc2wsIGJ1ZiwgbGVuICk7CisgICAgICAgIHdoaWxlKCByZXQgPT0gTUJFRFRMU19FUlJfU1NMX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgICAgcmV0ID09IE1CRURUTFNfRVJSX1NTTF9XQU5UX1dSSVRFICk7CisKKyAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF93cml0ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gcmVzZXQ7CisgICAgICAgIH0KKworICAgICAgICBmcmFncyA9IDE7CisgICAgICAgIHdyaXR0ZW4gPSByZXQ7CisgICAgfQorCisgICAgYnVmW3dyaXR0ZW5dID0gJ1wwJzsKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAlZCBieXRlcyB3cml0dGVuIGluICVkIGZyYWdtZW50c1xuXG4lc1xuIiwgd3JpdHRlbiwgZnJhZ3MsIChjaGFyICopIGJ1ZiApOworICAgIHJldCA9IDA7CisKKyAgICAvKgorICAgICAqIDdiLiBDb250aW51ZSBkb2luZyBkYXRhIGV4Y2hhbmdlcz8KKyAgICAgKi8KKyAgICBpZiggLS1leGNoYW5nZXNfbGVmdCA+IDAgKQorICAgICAgICBnb3RvIGRhdGFfZXhjaGFuZ2U7CisKKyAgICAvKgorICAgICAqIDguIERvbmUsIGNsZWFubHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKyAgICAgKi8KK2Nsb3NlX25vdGlmeToKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDbG9zaW5nIHRoZSBjb25uZWN0aW9uLi4uIiApOworCisgICAgLyogTm8gZXJyb3IgY2hlY2tpbmcsIHRoZSBjb25uZWN0aW9uIG1pZ2h0IGJlIGNsb3NlZCBhbHJlYWR5ICovCisgICAgZG8gcmV0ID0gbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5KCAmc3NsICk7CisgICAgd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApOworICAgIHJldCA9IDA7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBkb25lXG4iICk7CisKKyAgICBnb3RvIHJlc2V0OworCisgICAgLyoKKyAgICAgKiBDbGVhbnVwIGFuZCBleGl0CisgICAgICovCitleGl0OgorI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJMYXN0IGVycm9yIHdhczogLTB4JVggLSAlc1xuXG4iLCAtcmV0LCBlcnJvcl9idWYgKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENsZWFuaW5nIHVwLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19uZXRfZnJlZSggJmxpc3Rlbl9mZCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisgICAgbWJlZHRsc19kaG1fZnJlZSggJmRobSApOworI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmc3J2Y2VydCApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrZXkgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZzcnZjZXJ0MiApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrZXkyICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNOSV9PUFRJT04pCisgICAgc25pX2ZyZWUoIHNuaV9pbmZvICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRCkKKyAgICBwc2tfZnJlZSggcHNrX2luZm8gKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX0ZTX0lPKQorICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZkaG0gKTsKKyNlbmRpZgorCisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0NBQ0hFX0MpCisgICAgbWJlZHRsc19zc2xfY2FjaGVfZnJlZSggJmNhY2hlICk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKKyAgICBtYmVkdGxzX3NzbF90aWNrZXRfZnJlZSggJnRpY2tldF9jdHggKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ09PS0lFX0MpCisgICAgbWJlZHRsc19zc2xfY29va2llX2ZyZWUoICZjb29raWVfY3R4ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzKCk7CisjZW5kaWYKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZSgpOworI2VuZGlmCisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBkb25lLlxuIiApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICAvLyBTaGVsbCBjYW4gbm90IGhhbmRsZSBsYXJnZSBleGl0IG51bWJlcnMgLT4gMSBmb3IgZXJyb3JzCisgICAgaWYoIHJldCA8IDAgKQorICAgICAgICByZXQgPSAxOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfU1NMX1RMU19DICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfU1JWX0MgJiYgTUJFRFRMU19ORVRfQyAmJiBNQkVEVExTX1JTQV9DICYmCisgICAgICAgICAgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDcxNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDI3IEBACitzZXQobGlicworICAgIG1iZWR0bHMKKykKKworaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKyAgICBzZXQobGlicyAke2xpYnN9IHBrY3MxMS1oZWxwZXIpCitlbmRpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorCitpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorICAgIHNldChsaWJzICR7bGlic30gJHtaTElCX0xJQlJBUklFU30pCitlbmRpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorCithZGRfZXhlY3V0YWJsZShzZWxmdGVzdCBzZWxmdGVzdC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNlbGZ0ZXN0ICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKGJlbmNobWFyayBiZW5jaG1hcmsuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhiZW5jaG1hcmsgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoc3NsX2NlcnRfdGVzdCBzc2xfY2VydF90ZXN0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoc3NsX2NlcnRfdGVzdCAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZSh1ZHBfcHJveHkgdWRwX3Byb3h5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModWRwX3Byb3h5ICR7bGlic30pCisKK2luc3RhbGwoVEFSR0VUUyBzZWxmdGVzdCBiZW5jaG1hcmsgc3NsX2NlcnRfdGVzdCB1ZHBfcHJveHkKKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9iZW5jaG1hcmsuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L2JlbmNobWFyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTc4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC9iZW5jaG1hcmsuYwpAQCAtMCwwICsxLDg4MiBAQAorLyoKKyAqICBCZW5jaG1hcmsgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgICAgICBleGl0CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfVElNSU5HX0Mgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpbmNsdWRlICJtYmVkdGxzL21kNC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ1LmgiCisjaW5jbHVkZSAibWJlZHRscy9yaXBlbWQxNjAuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhNTEyLmgiCisjaW5jbHVkZSAibWJlZHRscy9hcmM0LmgiCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmxvd2Zpc2guaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NhbWVsbGlhLmgiCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NjbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY21hYy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvaGF2ZWdlLmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvaG1hY19kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RobS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNkc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjZGguaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Vycm9yLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIgorI2VuZGlmCisKKy8qCisgKiBGb3IgaGVhcCB1c2FnZSBlc3RpbWF0ZXMsIHdlIG5lZWQgYW4gZXN0aW1hdGUgb2YgdGhlIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQKKyAqIGJsb2NrLiBwdG1hbGxvYzIvMyAodXNlZCBpbiBnbnUgbGliYyBmb3IgaW5zdGFuY2UpIHVzZXMgMiBzaXplX3QgcGVyIGJsb2NrLAorICogc28gdXNlIHRoYXQgYXMgb3VyIGJhc2VsaW5lLgorICovCisjZGVmaW5lIE1FTV9CTE9DS19PVkVSSEVBRCAgKCAyICogc2l6ZW9mKCBzaXplX3QgKSApCisKKy8qCisgKiBTaXplIHRvIHVzZSBmb3IgdGhlIGFsbG9jIGJ1ZmZlciBpZiBNRU1PUllfQlVGRkVSX0FMTE9DX0MgaXMgZGVmaW5lZC4KKyAqLworI2RlZmluZSBIRUFQX1NJWkUgICAgICAgKDF1IDw8IDE2KSAgLy8gNjRrCisKKyNkZWZpbmUgQlVGU0laRSAgICAgICAgIDEwMjQKKyNkZWZpbmUgSEVBREVSX0ZPUk1BVCAgICIgICUtMjRzIDogICIKKyNkZWZpbmUgVElUTEVfTEVOICAgICAgIDI1CisKKyNkZWZpbmUgT1BUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAibWQ0LCBtZDUsIHJpcGVtZDE2MCwgc2hhMSwgc2hhMjU2LCBzaGE1MTIsXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiYXJjNCwgZGVzMywgZGVzLCBjYW1lbGxpYSwgYmxvd2Zpc2gsXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiYWVzX2NiYywgYWVzX2djbSwgYWVzX2NjbSwgYWVzX2NtYWMsIGRlczNfY21hYyxcbiIgICAgICAgICAgICAgICAgIFwKKyAgICAiaGF2ZWdlLCBjdHJfZHJiZywgaG1hY19kcmJnXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAicnNhLCBkaG0sIGVjZHNhLCBlY2RoLlxuIgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisjZGVmaW5lIFBSSU5UX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgKCBjaGFyICogKXRtcCwgc2l6ZW9mKCB0bXAgKSApOyAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRkFJTEVEOiAlc1xuIiwgdG1wICk7CisjZWxzZQorI2RlZmluZSBQUklOVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZBSUxFRDogLTB4JTA0eFxuIiwgLXJldCApOworI2VuZGlmCisKKyNkZWZpbmUgVElNRV9BTkRfVFNDKCBUSVRMRSwgQ09ERSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGlpLCBqaiwgdHNjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3ByaW50ZiggSEVBREVSX0ZPUk1BVCwgVElUTEUgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmZmx1c2goIHN0ZG91dCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3NldF9hbGFybSggMSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGlpID0gMTsgISBtYmVkdGxzX3RpbWluZ19hbGFybWVkOyBpaSsrICkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ09ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0c2MgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGpqID0gMDsgamogPCAxMDI0OyBqaisrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ09ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3ByaW50ZiggIiU5bHUgS2IvcywgICU5bHUgY3ljbGVzL2J5dGVcbiIsICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIGlpICogQlVGU0laRSAvIDEwMjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICggbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrKCkgLSB0c2MgKSAvICggamogKiBCVUZTSVpFICkgKTsgICAgICAgICBcCit9IHdoaWxlKCAwICkKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorI2RlZmluZSBQUklOVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsICggY2hhciAqICl0bXAsIHNpemVvZiggdG1wICkgKTsgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZBSUxFRDogJXNcbiIsIHRtcCApOworI2Vsc2UKKyNkZWZpbmUgUFJJTlRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJGQUlMRUQ6IC0weCUwNHhcbiIsIC1yZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykgJiYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKworI2RlZmluZSBNRU1PUllfTUVBU1VSRV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCBtYXhfdXNlZCwgbWF4X2Jsb2NrcywgbWF4X2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCBwcnZfdXNlZCwgcHJ2X2Jsb2NrczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCAmcHJ2X3VzZWQsICZwcnZfYmxvY2tzICk7ICAgICAgXAorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfcmVzZXQoICk7CisKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfUFJJTlQoIHRpdGxlX2xlbiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X2dldCggJm1heF91c2VkLCAmbWF4X2Jsb2NrcyApOyAgICAgIFwKKyAgICBmb3IoIGlpID0gMTIgLSB0aXRsZV9sZW47IGlpICE9IDA7IGlpLS0gKSBtYmVkdGxzX3ByaW50ZiggIiAiICk7ICAgIFwKKyAgICBtYXhfdXNlZCAtPSBwcnZfdXNlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYXhfYmxvY2tzIC09IHBydl9ibG9ja3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYXhfYnl0ZXMgPSBtYXhfdXNlZCArIE1FTV9CTE9DS19PVkVSSEVBRCAqIG1heF9ibG9ja3M7ICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3ByaW50ZiggIiU2dSBoZWFwIGJ5dGVzIiwgKHVuc2lnbmVkKSBtYXhfYnl0ZXMgKTsKKworI2Vsc2UKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfSU5JVAorI2RlZmluZSBNRU1PUllfTUVBU1VSRV9QUklOVCggdGl0bGVfbGVuICkKKyNlbmRpZgorCisjZGVmaW5lIFRJTUVfUFVCTElDKCBUSVRMRSwgVFlQRSwgQ09ERSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBpaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50IHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUVNT1JZX01FQVNVUkVfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoIEhFQURFUl9GT1JNQVQsIFRJVExFICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmZsdXNoKCBzdGRvdXQgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19zZXRfYWxhcm0oIDMgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKCBpaSA9IDE7ICEgbWJlZHRsc190aW1pbmdfYWxhcm1lZCAmJiAhIHJldCA7IGlpKysgKSAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENPREU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoIHJldCAhPSAwICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFBSSU5UX0VSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTZsdSAiIFRZUEUgIi9zIiwgaWkgLyAzICk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE1FTU9SWV9NRUFTVVJFX1BSSU5UKCBzaXplb2YoIFRZUEUgKSArIDEgKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlKCAwICkKKworc3RhdGljIGludCBteXJhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyAgICBzaXplX3QgdXNlX2xlbjsKKyAgICBpbnQgcm5kOworCisgICAgaWYoIHJuZ19zdGF0ZSAhPSBOVUxMICkKKyAgICAgICAgcm5nX3N0YXRlICA9IE5VTEw7CisKKyAgICB3aGlsZSggbGVuID4gMCApCisgICAgeworICAgICAgICB1c2VfbGVuID0gbGVuOworICAgICAgICBpZiggdXNlX2xlbiA+IHNpemVvZihpbnQpICkKKyAgICAgICAgICAgIHVzZV9sZW4gPSBzaXplb2YoaW50KTsKKworICAgICAgICBybmQgPSByYW5kKCk7CisgICAgICAgIG1lbWNweSggb3V0cHV0LCAmcm5kLCB1c2VfbGVuICk7CisgICAgICAgIG91dHB1dCArPSB1c2VfbGVuOworICAgICAgICBsZW4gLT0gdXNlX2xlbjsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIENsZWFyIHNvbWUgbWVtb3J5IHRoYXQgd2FzIHVzZWQgdG8gcHJlcGFyZSB0aGUgY29udGV4dAorICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQordm9pZCBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoIG1iZWR0bHNfZWNwX2dyb3VwICpncnAgKQoreworICAgIGlmKCBncnAtPlQgIT0gTlVMTCApCisgICAgeworICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IGdycC0+VF9zaXplOyBpKysgKQorICAgICAgICAgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJmdycC0+VFtpXSApOworICAgICAgICBtYmVkdGxzX2ZyZWUoIGdycC0+VCApOworICAgIH0KKyAgICBncnAtPlQgPSBOVUxMOworICAgIGdycC0+VF9zaXplID0gMDsKK30KKyNlbHNlCisjZGVmaW5lIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggZyApCisjZW5kaWYKKwordW5zaWduZWQgY2hhciBidWZbQlVGU0laRV07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyIG1kNCwgbWQ1LCByaXBlbWQxNjAsIHNoYTEsIHNoYTI1Niwgc2hhNTEyLAorICAgICAgICAgYXJjNCwgZGVzMywgZGVzLAorICAgICAgICAgYWVzX2NiYywgYWVzX2djbSwgYWVzX2NjbSwgYWVzX2NtYWMsIGRlczNfY21hYywKKyAgICAgICAgIGNhbWVsbGlhLCBibG93ZmlzaCwKKyAgICAgICAgIGhhdmVnZSwgY3RyX2RyYmcsIGhtYWNfZHJiZywKKyAgICAgICAgIHJzYSwgZGhtLCBlY2RzYSwgZWNkaDsKK30gdG9kb19saXN0OworCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgY2hhciB0bXBbMjAwXTsKKyAgICBjaGFyIHRpdGxlW1RJVExFX0xFTl07CisgICAgdG9kb19saXN0IHRvZG87CisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICB1bnNpZ25lZCBjaGFyIGFsbG9jX2J1ZltIRUFQX1NJWkVdID0geyAwIH07CisjZW5kaWYKKworICAgIGlmKCBhcmdjIDw9IDEgKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCAmdG9kbywgMSwgc2l6ZW9mKCB0b2RvICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtc2V0KCAmdG9kbywgMCwgc2l6ZW9mKCB0b2RvICkgKTsKKworICAgICAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggYXJndltpXSwgIm1kNCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLm1kNCA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJtZDUiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5tZDUgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAicmlwZW1kMTYwIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8ucmlwZW1kMTYwID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInNoYTEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5zaGExID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInNoYTI1NiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLnNoYTI1NiA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJzaGE1MTIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5zaGE1MTIgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiYXJjNCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmFyYzQgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZGVzMyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRlczMgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZGVzIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uZGVzID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19jYmMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hZXNfY2JjID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19nY20iICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hZXNfZ2NtID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19jY20iICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hZXNfY2NtID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19jbWFjIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uYWVzX2NtYWMgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZGVzM19jbWFjIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uZGVzM19jbWFjID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImNhbWVsbGlhIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uY2FtZWxsaWEgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiYmxvd2Zpc2giICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5ibG93ZmlzaCA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJoYXZlZ2UiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5oYXZlZ2UgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiY3RyX2RyYmciICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5jdHJfZHJiZyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJobWFjX2RyYmciICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5obWFjX2RyYmcgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAicnNhIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8ucnNhID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRobSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRobSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJlY2RzYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmVjZHNhID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImVjZGgiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5lY2RoID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlVucmVjb2duaXplZCBvcHRpb246ICVzXG4iLCBhcmd2W2ldICk7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJBdmFpbGFibGUgb3B0aW9uczogIiBPUFRJT05TICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYWxsb2NfYnVmLCBzaXplb2YoIGFsbG9jX2J1ZiApICk7CisjZW5kaWYKKyAgICBtZW1zZXQoIGJ1ZiwgMHhBQSwgc2l6ZW9mKCBidWYgKSApOworICAgIG1lbXNldCggdG1wLCAweEJCLCBzaXplb2YoIHRtcCApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisgICAgaWYoIHRvZG8ubWQ0ICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiTUQ0IiwgbWJlZHRsc19tZDQoIGJ1ZiwgQlVGU0laRSwgdG1wICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgIGlmKCB0b2RvLm1kNSApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIk1ENSIsIG1iZWR0bHNfbWQ1KCBidWYsIEJVRlNJWkUsIHRtcCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SSVBFTUQxNjBfQykKKyAgICBpZiggdG9kby5yaXBlbWQxNjAgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJSSVBFTUQxNjAiLCBtYmVkdGxzX3JpcGVtZDE2MCggYnVmLCBCVUZTSVpFLCB0bXAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgIGlmKCB0b2RvLnNoYTEgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJTSEEtMSIsIG1iZWR0bHNfc2hhMSggYnVmLCBCVUZTSVpFLCB0bXAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoIHRvZG8uc2hhMjU2ICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiU0hBLTI1NiIsIG1iZWR0bHNfc2hhMjU2KCBidWYsIEJVRlNJWkUsIHRtcCwgMCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBpZiggdG9kby5zaGE1MTIgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJTSEEtNTEyIiwgbWJlZHRsc19zaGE1MTIoIGJ1ZiwgQlVGU0laRSwgdG1wLCAwICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICBpZiggdG9kby5hcmM0ICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfYXJjNF9jb250ZXh0IGFyYzQ7CisgICAgICAgIG1iZWR0bHNfYXJjNF9pbml0KCAmYXJjNCApOworICAgICAgICBtYmVkdGxzX2FyYzRfc2V0dXAoICZhcmM0LCB0bXAsIDMyICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkFSQzQiLCBtYmVkdGxzX2FyYzRfY3J5cHQoICZhcmM0LCBCVUZTSVpFLCBidWYsIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfYXJjNF9mcmVlKCAmYXJjNCApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0RFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgaWYoIHRvZG8uZGVzMyApCisgICAgeworICAgICAgICBtYmVkdGxzX2RlczNfY29udGV4dCBkZXMzOworICAgICAgICBtYmVkdGxzX2RlczNfaW5pdCggJmRlczMgKTsKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZW5jKCAmZGVzMywgdG1wICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIjNERVMiLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMoICZkZXMzLCBNQkVEVExTX0RFU19FTkNSWVBULCBCVUZTSVpFLCB0bXAsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgbWJlZHRsc19kZXMzX2ZyZWUoICZkZXMzICk7CisgICAgfQorCisgICAgaWYoIHRvZG8uZGVzICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgZGVzOworICAgICAgICBtYmVkdGxzX2Rlc19pbml0KCAmZGVzICk7CisgICAgICAgIG1iZWR0bHNfZGVzX3NldGtleV9lbmMoICZkZXMsIHRtcCApOworICAgICAgICBUSU1FX0FORF9UU0MoICJERVMiLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggJmRlcywgTUJFRFRMU19ERVNfRU5DUllQVCwgQlVGU0laRSwgdG1wLCBidWYsIGJ1ZiApICk7CisgICAgICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZkZXMgKTsKKyAgICB9CisKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DTUFDX0MpCisgICAgaWYoIHRvZG8uZGVzM19jbWFjICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzhdOworICAgICAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworCisgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisKKyAgICAgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCICk7CisKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiM0RFUy1DTUFDIiwKKyAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywgdG1wLCAxOTIsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICBCVUZTSVpFLCBvdXRwdXQgKSApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NNQUNfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfREVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmFlc19jYmMgKQorICAgIHsKKyAgICAgICAgaW50IGtleXNpemU7CisgICAgICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgYWVzOworICAgICAgICBtYmVkdGxzX2Flc19pbml0KCAmYWVzICk7CisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQUVTLUNCQy0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmYWVzLCB0bXAsIGtleXNpemUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2Flc19jcnlwdF9jYmMoICZhZXMsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIEJVRlNJWkUsIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICB9CisgICAgICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZhZXMgKTsKKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgaWYoIHRvZG8uYWVzX2djbSApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19nY21fY29udGV4dCBnY207CisKKyAgICAgICAgbWJlZHRsc19nY21faW5pdCggJmdjbSApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkFFUy1HQ00tJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19nY21fc2V0a2V5KCAmZ2NtLCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCAmZ2NtLCBNQkVEVExTX0dDTV9FTkNSWVBULCBCVUZTSVpFLCB0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAxMiwgTlVMTCwgMCwgYnVmLCBidWYsIDE2LCB0bXAgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2djbV9mcmVlKCAmZ2NtICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0NNX0MpCisgICAgaWYoIHRvZG8uYWVzX2NjbSApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19jY21fY29udGV4dCBjY207CisKKyAgICAgICAgbWJlZHRsc19jY21faW5pdCggJmNjbSApOworICAgICAgICBmb3IoIGtleXNpemUgPSAxMjg7IGtleXNpemUgPD0gMjU2OyBrZXlzaXplICs9IDY0ICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkFFUy1DQ00tJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19jY21fc2V0a2V5KCAmY2NtLCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWcoICZjY20sIEJVRlNJWkUsIHRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEyLCBOVUxMLCAwLCBidWYsIGJ1ZiwgdG1wLCAxNiApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfY2NtX2ZyZWUoICZjY20gKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DTUFDX0MpCisgICAgaWYoIHRvZG8uYWVzX2NtYWMgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdOworICAgICAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgICAgICBtYmVkdGxzX2NpcGhlcl90eXBlX3QgY2lwaGVyX3R5cGU7CisgICAgICAgIGludCBrZXlzaXplOworCisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyOCwgY2lwaGVyX3R5cGUgPSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjsKKyAgICAgICAgICAgICBrZXlzaXplIDw9IDI1NjsKKyAgICAgICAgICAgICBrZXlzaXplICs9IDY0LCBjaXBoZXJfdHlwZSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkFFUy1DTUFDLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKworICAgICAgICAgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX3R5cGUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfY21hYyggY2lwaGVyX2luZm8sIHRtcCwga2V5c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBCVUZTSVpFLCBvdXRwdXQgKSApOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiQUVTLUNNQUMtUFJGLTEyOCIsCisgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19hZXNfY21hY19wcmZfMTI4KCB0bXAsIDE2LCBidWYsIEJVRlNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKSApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX0NNQUNfQyAqLworI2VuZGlmIC8qIE1CRURUTFNfQUVTX0MgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmNhbWVsbGlhICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY2FtZWxsaWE7CisgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggJmNhbWVsbGlhICk7CisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQ0FNRUxMSUEtQ0JDLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmNhbWVsbGlhLCB0bXAsIGtleXNpemUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoICZjYW1lbGxpYSwgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgQlVGU0laRSwgdG1wLCBidWYsIGJ1ZiApICk7CisgICAgICAgIH0KKyAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY2FtZWxsaWEgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmJsb3dmaXNoICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgYmxvd2Zpc2g7CisgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggJmJsb3dmaXNoICk7CisKKyAgICAgICAgZm9yKCBrZXlzaXplID0gMTI4OyBrZXlzaXplIDw9IDI1Njsga2V5c2l6ZSArPSA2NCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJCTE9XRklTSC1DQkMtJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZibG93ZmlzaCwgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCAmYmxvd2Zpc2gsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgQlVGU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmYmxvd2Zpc2ggKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyAgICBpZiggdG9kby5oYXZlZ2UgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19oYXZlZ2Vfc3RhdGUgaHM7CisgICAgICAgIG1iZWR0bHNfaGF2ZWdlX2luaXQoICZocyApOworICAgICAgICBUSU1FX0FORF9UU0MoICJIQVZFR0UiLCBtYmVkdGxzX2hhdmVnZV9yYW5kb20oICZocywgYnVmLCBCVUZTSVpFICkgKTsKKyAgICAgICAgbWJlZHRsc19oYXZlZ2VfZnJlZSggJmhzICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyAgICBpZiggdG9kby5jdHJfZHJiZyApCisgICAgeworICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisKKyAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBUSU1FX0FORF9UU0MoICJDVFJfRFJCRyAoTk9QUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0cl9kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZjdHJfZHJiZywgTUJFRFRMU19DVFJfRFJCR19QUl9PTiApOworICAgICAgICBUSU1FX0FORF9UU0MoICJDVFJfRFJCRyAoUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oICZjdHJfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpCisgICAgaWYoIHRvZG8uaG1hY19kcmJnICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgaG1hY19kcmJnOworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmaG1hY19kcmJnICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgICAgICBpZiggKCBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEExICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKworICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmhtYWNfZHJiZywgbWRfaW5mbywgbXlyYW5kLCBOVUxMLCBOVUxMLCAwICkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkhNQUNfRFJCRyBTSEEtMSAoTk9QUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZobWFjX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmaG1hY19kcmJnICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmaG1hY19kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiSE1BQ19EUkJHIFNIQS0xIChQUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZobWFjX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmaG1hY19kcmJnICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICAgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKworICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmhtYWNfZHJiZywgbWRfaW5mbywgbXlyYW5kLCBOVUxMLCBOVUxMLCAwICkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkhNQUNfRFJCRyBTSEEtMjU2IChOT1BSKSIsCisgICAgICAgICAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmhtYWNfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoICZobWFjX2RyYmcgKTsKKworICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmhtYWNfZHJiZywgbWRfaW5mbywgbXlyYW5kLCBOVUxMLCBOVUxMLCAwICkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZobWFjX2RyYmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0hNQUNfRFJCR19QUl9PTiApOworICAgICAgICBUSU1FX0FORF9UU0MoICJITUFDX0RSQkcgU0hBLTI1NiAoUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmaG1hY19kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmhtYWNfZHJiZyApOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19HRU5QUklNRSkKKyAgICBpZiggdG9kby5yc2EgKQorICAgIHsKKyAgICAgICAgaW50IGtleXNpemU7CisgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgcnNhOworICAgICAgICBmb3IoIGtleXNpemUgPSAyMDQ4OyBrZXlzaXplIDw9IDQwOTY7IGtleXNpemUgKj0gMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJSU0EtJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfcnNhX2luaXQoICZyc2EsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCAwICk7CisgICAgICAgICAgICBtYmVkdGxzX3JzYV9nZW5fa2V5KCAmcnNhLCBteXJhbmQsIE5VTEwsIGtleXNpemUsIDY1NTM3ICk7CisKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgIiBwdWJsaWMiLAorICAgICAgICAgICAgICAgICAgICBidWZbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3JzYV9wdWJsaWMoICZyc2EsIGJ1ZiwgYnVmICkgKTsKKworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAicHJpdmF0ZSIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZlswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfcnNhX3ByaXZhdGUoICZyc2EsIG15cmFuZCwgTlVMTCwgYnVmLCBidWYgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcnNhICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ESE1fQykgJiYgZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKQorICAgIGlmKCB0b2RvLmRobSApCisgICAgeworICAgICAgICBpbnQgZGhtX3NpemVzW10gPSB7IDIwNDgsIDMwNzIgfTsKKyAgICAgICAgY29uc3QgY2hhciAqZGhtX1BbXSA9IHsKKyAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X1AsCisgICAgICAgICAgICBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9QLAorICAgICAgICB9OworICAgICAgICBjb25zdCBjaGFyICpkaG1fR1tdID0geworICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzIwNDhfRywKKyAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8zMDcyX0csCisgICAgICAgIH07CisKKyAgICAgICAgbWJlZHRsc19kaG1fY29udGV4dCBkaG07CisgICAgICAgIHNpemVfdCBvbGVuOworICAgICAgICBmb3IoIGkgPSAwOyAoc2l6ZV90KSBpIDwgc2l6ZW9mKCBkaG1fc2l6ZXMgKSAvIHNpemVvZiggZGhtX3NpemVzWzBdICk7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZGhtX2luaXQoICZkaG0gKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmZGhtLlAsIDE2LCBkaG1fUFtpXSApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmRobS5HLCAxNiwgZGhtX0dbaV0gKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGhtLmxlbiA9IG1iZWR0bHNfbXBpX3NpemUoICZkaG0uUCApOworICAgICAgICAgICAgbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoICZkaG0sIChpbnQpIGRobS5sZW4sIGJ1ZiwgZGhtLmxlbiwgbXlyYW5kLCBOVUxMICk7CisgICAgICAgICAgICBpZiggbWJlZHRsc19tcGlfY29weSggJmRobS5HWSwgJmRobS5HWCApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiREhFLSVkIiwgZGhtX3NpemVzW2ldICk7CisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19kaG1fbWFrZV9wdWJsaWMoICZkaG0sIChpbnQpIGRobS5sZW4sIGJ1ZiwgZGhtLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICk7CisgICAgICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmRobSwgYnVmLCBzaXplb2YoIGJ1ZiApLCAmb2xlbiwgbXlyYW5kLCBOVUxMICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkRILSVkIiwgZGhtX3NpemVzW2ldICk7CisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZkaG0sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJm9sZW4sIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZkaG0gKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICBpZiggdG9kby5lY2RzYSApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjZHNhX2NvbnRleHQgZWNkc2E7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisgICAgICAgIHNpemVfdCBzaWdfbGVuOworCisgICAgICAgIG1lbXNldCggYnVmLCAweDJBLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICAgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgICAgIGN1cnZlX2luZm8rKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkc2FfaW5pdCggJmVjZHNhICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX2VjZHNhX2dlbmtleSggJmVjZHNhLCBjdXJ2ZV9pbmZvLT5ncnBfaWQsIG15cmFuZCwgTlVMTCApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICAgICAgZWNwX2NsZWFyX3ByZWNvbXB1dGVkKCAmZWNkc2EuZ3JwICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJFQ0RTQS0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAic2lnbiIsCisgICAgICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlKCAmZWNkc2EsIE1CRURUTFNfTURfU0hBMjU2LCBidWYsIGN1cnZlX2luZm8tPmJpdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCAmc2lnX2xlbiwgbXlyYW5kLCBOVUxMICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19lY2RzYV9mcmVlKCAmZWNkc2EgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjZHNhX2luaXQoICZlY2RzYSApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19lY2RzYV9nZW5rZXkoICZlY2RzYSwgY3VydmVfaW5mby0+Z3JwX2lkLCBteXJhbmQsIE5VTEwgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RzYV93cml0ZV9zaWduYXR1cmUoICZlY2RzYSwgTUJFRFRMU19NRF9TSEEyNTYsIGJ1ZiwgY3VydmVfaW5mby0+Yml0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgJnNpZ19sZW4sIG15cmFuZCwgTlVMTCApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWNwX2NsZWFyX3ByZWNvbXB1dGVkKCAmZWNkc2EuZ3JwICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJFQ0RTQS0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAidmVyaWZ5IiwKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggJmVjZHNhLCBidWYsIGN1cnZlX2luZm8tPmJpdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCBzaWdfbGVuICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19lY2RzYV9mcmVlKCAmZWNkc2EgKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VDREhfQykKKyAgICBpZiggdG9kby5lY2RoICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZWNkaF9jb250ZXh0IGVjZGg7CisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisgICAgICAgIG1iZWR0bHNfbXBpIHo7CisjZW5kaWYKKyAgICAgICAgY29uc3QgbWJlZHRsc19lY3BfY3VydmVfaW5mbyAqY3VydmVfaW5mbzsKKyAgICAgICAgc2l6ZV90IG9sZW47CisKKyAgICAgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgICAgIGN1cnZlX2luZm8rKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmZWNkaCApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjZGguZ3JwLCBjdXJ2ZV9pbmZvLT5ncnBfaWQgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9jb3B5KCAmZWNkaC5RcCwgJmVjZGguUSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWNwX2NsZWFyX3ByZWNvbXB1dGVkKCAmZWNkaC5ncnAgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkVDREhFLSVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5uYW1lICk7CisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICk7CisgICAgICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmZWNkaCApOworICAgICAgICB9CisKKyAgICAgICAgLyogQ3VydmUyNTUxOSBuZWVkcyB0byBiZSBoYW5kbGVkIHNlcGFyYXRlbHkgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRCkKKyAgICAgICAgbWJlZHRsc19lY2RoX2luaXQoICZlY2RoICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2luaXQoICZ6ICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZlY2RoLmdycCwgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOSApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZWNkaC5ncnAsICZlY2RoLmQsICZlY2RoLlFwLCBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgIH0KKworICAgICAgICBUSU1FX1BVQkxJQyggICJFQ0RIRS1DdXJ2ZTI1NTE5IiwgImhhbmRzaGFrZSIsCisgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZWNkaC5ncnAsICZlY2RoLmQsICZlY2RoLlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICk7CisgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCggJmVjZGguZ3JwLCAmeiwgJmVjZGguUXAsICZlY2RoLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZlY2RoICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ6ICk7CisjZW5kaWYKKworICAgICAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY2RoX2luaXQoICZlY2RoICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNkaC5ncnAsIGN1cnZlX2luZm8tPmdycF9pZCApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2NvcHkoICZlY2RoLlFwLCAmZWNkaC5RICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZGguZ3JwICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJFQ0RILSVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5uYW1lICk7CisgICAgICAgICAgICBUSU1FX1BVQkxJQyggdGl0bGUsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZnJlZSggJmVjZGggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEN1cnZlMjU1MTkgbmVlZHMgdG8gYmUgaGFuZGxlZCBzZXBhcmF0ZWx5ICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisgICAgICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9pbml0KCAmeiApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNkaC5ncnAsIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTkgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmVjZGguZ3JwLCAmZWNkaC5kLCAmZWNkaC5RcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZlY2RoLmdycCwgJmVjZGguZCwgJmVjZGguUSwgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICB9CisKKyAgICAgICAgVElNRV9QVUJMSUMoICAiRUNESC1DdXJ2ZTI1NTE5IiwgImhhbmRzaGFrZSIsCisgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCggJmVjZGguZ3JwLCAmeiwgJmVjZGguUXAsICZlY2RoLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZlY2RoICk7CisgICAgICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ6ICk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggMCApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19USU1JTkdfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3Qvc2VsZnRlc3QuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0MWFkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0LmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiAgU2VsZi10ZXN0IGRlbW9uc3RyYXRpb24gcHJvZ3JhbQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5X3BvbGwuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2htYWNfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RobS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2NtYWMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ0LmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JpcGVtZDE2MC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMjU2LmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGE1MTIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2FyYzQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Rlcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9jYW1lbGxpYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmFzZTY0LmgiCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOS5oIgorI2luY2x1ZGUgIm1iZWR0bHMveHRlYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGtjczUuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjcC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNqcGFrZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvdGltaW5nLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmICAgc25wcmludGYKKyNkZWZpbmUgbWJlZHRsc19leGl0ICAgICAgIGV4aXQKKyNkZWZpbmUgTUJFRFRMU19FWElUX1NVQ0NFU1MgRVhJVF9TVUNDRVNTCisjZGVmaW5lIE1CRURUTFNfRVhJVF9GQUlMVVJFIEVYSVRfRkFJTFVSRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIgorI2VuZGlmCisKK3N0YXRpYyBpbnQgdGVzdF9zbnByaW50Ziggc2l6ZV90IG4sIGNvbnN0IGNoYXIgcmVmX2J1ZlsxMF0sIGludCByZWZfcmV0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNoYXIgYnVmWzEwXSA9ICJ4eHh4eHh4eHgiOworICAgIGNvbnN0IGNoYXIgcmVmWzEwXSA9ICJ4eHh4eHh4eHgiOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggYnVmLCBuLCAiJXMiLCAiMTIzIiApOworICAgIGlmKCByZXQgPCAwIHx8IChzaXplX3QpIHJldCA+PSBuICkKKyAgICAgICAgcmV0ID0gLTE7CisKKyAgICBpZiggc3RybmNtcCggcmVmX2J1ZiwgYnVmLCBzaXplb2YoIGJ1ZiApICkgIT0gMCB8fAorICAgICAgICByZWZfcmV0ICE9IHJldCB8fAorICAgICAgICBtZW1jbXAoIGJ1ZiArIG4sIHJlZiArIG4sIHNpemVvZiggYnVmICkgLSBuICkgIT0gMCApCisgICAgeworICAgICAgICByZXR1cm4oIDEgKTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBydW5fdGVzdF9zbnByaW50Ziggdm9pZCApCit7CisgICAgcmV0dXJuKCB0ZXN0X3NucHJpbnRmKCAwLCAieHh4eHh4eHh4IiwgIC0xICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggMSwgIiIsICAgICAgICAgICAtMSApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDIsICIxIiwgICAgICAgICAgLTEgKSAhPSAwIHx8CisgICAgICAgICAgICB0ZXN0X3NucHJpbnRmKCAzLCAiMTIiLCAgICAgICAgIC0xICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggNCwgIjEyMyIsICAgICAgICAgMyApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDUsICIxMjMiLCAgICAgICAgIDMgKSAhPSAwICk7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHNlZWQgZmlsZSBpcyBwcmVzZW50LCBhbmQgaWYgbm90IGNyZWF0ZSBvbmUgZm9yIHRoZSBlbnRyb3B5CisgKiBzZWxmLXRlc3QuIElmIHRoaXMgZmFpbHMsIHdlIGF0dGVtcHQgdGhlIHRlc3QgYW55d2F5LCBzbyBubyBlcnJvciBpcyBwYXNzZWQKKyAqIGJhY2suCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKSAmJiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkgJiYgIWRlZmluZWQoTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZKQorc3RhdGljIHZvaWQgY3JlYXRlX2VudHJvcHlfc2VlZF9maWxlKCB2b2lkICkKK3sKKyAgICBpbnQgcmVzdWx0OworICAgIHNpemVfdCBvdXRwdXRfbGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRfdmFsdWVbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworCisgICAgLyogQXR0ZW1wdCB0byByZWFkIHRoZSBlbnRyb3B5IHNlZWQgZmlsZS4gSWYgdGhpcyBmYWlscyAtIGF0dGVtcHQgdG8gd3JpdGUKKyAgICAgKiB0byB0aGUgZmlsZSB0byBlbnN1cmUgb25lIGlzIHByZXNlbnQuICovCisgICAgcmVzdWx0ID0gbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkKCBzZWVkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgaWYoIDAgPT0gcmVzdWx0ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVzdWx0ID0gbWJlZHRsc19wbGF0Zm9ybV9lbnRyb3B5X3BvbGwoIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X2xlbiApOworICAgIGlmKCAwICE9IHJlc3VsdCApCisgICAgICAgIHJldHVybjsKKworICAgIGlmKCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSAhPSBvdXRwdXRfbGVuICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF93cml0ZSggc2VlZF92YWx1ZSwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKK30KKyNlbmRpZgorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHYsIHN1aXRlc190ZXN0ZWQgPSAwLCBzdWl0ZXNfZmFpbGVkID0gMDsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKSAmJiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDAwMDBdOworI2VuZGlmCisgICAgdm9pZCAqcG9pbnRlcjsKKworICAgIC8qCisgICAgICogVGhlIEMgc3RhbmRhcmQgZG9lc24ndCBndWFyYW50ZWUgdGhhdCBhbGwtYml0cy0wIGlzIHRoZSByZXByZXNlbnRhdGlvbgorICAgICAqIG9mIGEgTlVMTCBwb2ludGVyLiBXZSBkbyBob3dldmVyIHVzZSB0aGF0IGluIG91ciBjb2RlIGZvciBpbml0aWFsaXppbmcKKyAgICAgKiBzdHJ1Y3R1cmVzLCB3aGljaCBzaG91bGQgd29yayBvbiBldmVyeSBtb2Rlcm4gcGxhdGZvcm0uIExldCdzIGJlIHN1cmUuCisgICAgICovCisgICAgbWVtc2V0KCAmcG9pbnRlciwgMCwgc2l6ZW9mKCB2b2lkICogKSApOworICAgIGlmKCBwb2ludGVyICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJhbGwtYml0cy16ZXJvIGlzIG5vdCBhIE5VTEwgcG9pbnRlclxuIiApOworICAgICAgICBtYmVkdGxzX2V4aXQoIE1CRURUTFNfRVhJVF9GQUlMVVJFICk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHNucHJpbnRmIHRoYXQgY29ycmVjdGx5IHplcm8tdGVybWluYXRlcworICAgICAqLworICAgIGlmKCBydW5fdGVzdF9zbnByaW50ZigpICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJ0aGUgc25wcmludGYgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuXG4iICk7CisgICAgICAgIG1iZWR0bHNfZXhpdCggTUJFRFRMU19FWElUX0ZBSUxVUkUgKTsKKyAgICB9CisKKyAgICBpZiggYXJnYyA9PSAyICYmICggc3RyY21wKCBhcmd2WzFdLCAiLS1xdWlldCIgKSA9PSAwICB8fAorICAgICAgICBzdHJjbXAoIGFyZ3ZbMV0sICItcSIgKSA9PSAwICkgKQorICAgIHsKKyAgICAgICAgdiA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHYgPSAxOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19TRUxGX1RFU1QpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBidWYsIHNpemVvZihidWYpICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDJfQykKKyAgICBpZiggbWJlZHRsc19tZDJfc2VsZl90ZXN0KCB2ICkgICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDRfQykKKyAgICBpZiggbWJlZHRsc19tZDRfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENV9DKQorICAgIGlmKCBtYmVkdGxzX21kNV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgaWYoIG1iZWR0bHNfcmlwZW1kMTYwX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgaWYoIG1iZWR0bHNfc2hhMV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoIG1iZWR0bHNfc2hhMjU2X3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBpZiggbWJlZHRsc19zaGE1MTJfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykKKyAgICBpZiggbWJlZHRsc19hcmM0X3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykKKyAgICBpZiggbWJlZHRsc19kZXNfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCBtYmVkdGxzX2Flc19zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpICYmIGRlZmluZWQoTUJFRFRMU19BRVNfQykKKyAgICBpZiggbWJlZHRsc19nY21fc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NDTV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQUVTX0MpCisgICAgaWYoIG1iZWR0bHNfY2NtX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DTUFDX0MpCisgICAgaWYoICggbWJlZHRsc19jbWFjX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKQorICAgIGlmKCBtYmVkdGxzX2Jhc2U2NF9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisgICAgaWYoIG1iZWR0bHNfbXBpX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKKyAgICBpZiggbWJlZHRsc19yc2Ffc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfVVNFX0MpCisgICAgaWYoIG1iZWR0bHNfeDUwOV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWFRFQV9DKQorICAgIGlmKCBtYmVkdGxzX3h0ZWFfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpCisgICAgaWYoIG1iZWR0bHNfY2FtZWxsaWFfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpCisgICAgaWYoIG1iZWR0bHNfY3RyX2RyYmdfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYoIG1iZWR0bHNfZWNwX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0pQQUtFX0MpCisgICAgaWYoIG1iZWR0bHNfZWNqcGFrZV9zZWxmX3Rlc3QoIHYgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHN1aXRlc19mYWlsZWQrKzsKKyAgICB9CisgICAgc3VpdGVzX3Rlc3RlZCsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgaWYoIG1iZWR0bHNfZGhtX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKSAmJiAhZGVmaW5lZChNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkpCisgICAgY3JlYXRlX2VudHJvcHlfc2VlZF9maWxlKCk7CisjZW5kaWYKKworICAgIGlmKCBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1M1X0MpCisgICAgaWYoIG1iZWR0bHNfcGtjczVfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisvKiBTbG93IHRlc3RzIGxhc3QgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19USU1JTkdfQykKKyAgICBpZiggbWJlZHRsc190aW1pbmdfc2VsZl90ZXN0KCB2ICkgIT0gMCApCisgICAgeworICAgICAgICBzdWl0ZXNfZmFpbGVkKys7CisgICAgfQorICAgIHN1aXRlc190ZXN0ZWQrKzsKKyNlbmRpZgorCisgICAgaWYoIHYgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zdGF0dXMoKTsKKyNlbmRpZgorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoKTsKKyAgICBpZiggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCggdiApICE9IDAgKQorICAgIHsKKyAgICAgICAgc3VpdGVzX2ZhaWxlZCsrOworICAgIH0KKyAgICBzdWl0ZXNfdGVzdGVkKys7CisjZW5kaWYKKworI2Vsc2UKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBNQkVEVExTX1NFTEZfVEVTVCBub3QgZGVmaW5lZC5cbiIgKTsKKyNlbmRpZgorCisgICAgaWYoIHYgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgRXhlY3V0ZWQgJWQgdGVzdCBzdWl0ZXNcblxuIiwgc3VpdGVzX3Rlc3RlZCApOworCisgICAgICAgIGlmKCBzdWl0ZXNfZmFpbGVkID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIFsgJWQgdGVzdHMgRkFJTCBdXG5cbiIsIHN1aXRlc19mYWlsZWQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIEFsbCB0ZXN0cyBQQVNTIF1cblxuIiApOworICAgICAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisgICAgfQorCisgICAgaWYoIHN1aXRlc19mYWlsZWQgPiAwKQorICAgICAgICBtYmVkdGxzX2V4aXQoIE1CRURUTFNfRVhJVF9GQUlMVVJFICk7CisKKyAgICAvKiByZXR1cm4oKSBpcyBoZXJlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgKi8KKyAgICByZXR1cm4oIE1CRURUTFNfRVhJVF9TVUNDRVNTICk7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3NzbF9jZXJ0X3Rlc3QuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy90ZXN0L3NzbF9jZXJ0X3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZjZDJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3Qvc3NsX2NlcnRfdGVzdC5jCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogIFNTTCBjZXJ0aWZpY2F0ZSBmdW5jdGlvbmFsaXR5IHRlc3RzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfc25wcmludGYgICBzbnByaW50ZgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfRlNfSU8pICYmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvY2VydHMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3J0LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0NMSUVOVF9DRVJUUyAgICA4CisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0ZTX0lPKSB8fCAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfUlNBX0MgYW5kL29yIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAiCisgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgIgorICAgICAgICAgICAibm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitjb25zdCBjaGFyICpjbGllbnRfY2VydGlmaWNhdGVzW01BWF9DTElFTlRfQ0VSVFNdID0KK3sKKyAgICAiY2xpZW50MS5jcnQiLAorICAgICJjbGllbnQyLmNydCIsCisgICAgInNlcnZlcjEuY3J0IiwKKyAgICAic2VydmVyMi5jcnQiLAorICAgICJjZXJ0X3NoYTIyNC5jcnQiLAorICAgICJjZXJ0X3NoYTI1Ni5jcnQiLAorICAgICJjZXJ0X3NoYTM4NC5jcnQiLAorICAgICJjZXJ0X3NoYTUxMi5jcnQiCit9OworCitjb25zdCBjaGFyICpjbGllbnRfcHJpdmF0ZV9rZXlzW01BWF9DTElFTlRfQ0VSVFNdID0KK3sKKyAgICAiY2xpZW50MS5rZXkiLAorICAgICJjbGllbnQyLmtleSIsCisgICAgInNlcnZlcjEua2V5IiwKKyAgICAic2VydmVyMi5rZXkiLAorICAgICJjZXJ0X2RpZ2VzdC5rZXkiLAorICAgICJjZXJ0X2RpZ2VzdC5rZXkiLAorICAgICJjZXJ0X2RpZ2VzdC5rZXkiLAorICAgICJjZXJ0X2RpZ2VzdC5rZXkiCit9OworCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgaW50IHJldCwgaTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNhY2VydDsKKyAgICBtYmVkdGxzX3g1MDlfY3JsIGNybDsKKyAgICBjaGFyIGJ1ZlsxMDI0MF07CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYWNlcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoICZjcmwgKTsKKworICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSB0cnVzdGVkIENBCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBDQSByb290IGNlcnRpZmljYXRlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgLyoKKyAgICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGxvYWQgdGhlIENBIGNlcnRpZmljYXRlcyBmcm9tIGEgLnBlbSBvcgorICAgICAqIC5jcnQgZmlsZSBieSBjYWxsaW5nIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNhY2VydCwgIm15Y2EuY3J0IiApLgorICAgICAqLworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNhY2VydCwgInNzbC90ZXN0LWNhL3Rlc3QtY2EuY3J0IiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggYnVmLCAxMDI0LCAiQ1JUOiAiLCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc19wcmludGYoIiVzXG4iLCBidWYgKTsKKworICAgIC8qCisgICAgICogMS4yLiBMb2FkIHRoZSBDUkwKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBDUkwgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoICZjcmwsICJzc2wvdGVzdC1jYS9jcmwucGVtIiApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIG1iZWR0bHNfeDUwOV9jcmxfaW5mbyggYnVmLCAxMDI0LCAiQ1JMOiAiLCAmY3JsICk7CisgICAgbWJlZHRsc19wcmludGYoIiVzXG4iLCBidWYgKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBNQVhfQ0xJRU5UX0NFUlRTOyBpKysgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4zLiBMb2FkIG93biBjZXJ0aWZpY2F0ZQorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAgICBuYW1lWzUxMl07CisgICAgICAgIHVpbnQzMl90IGZsYWdzOworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0IGNsaWNlcnQ7CisgICAgICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjbGljZXJ0ICk7CisgICAgICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisKKyAgICAgICAgbWJlZHRsc19zbnByaW50ZihuYW1lLCA1MTIsICJzc2wvdGVzdC1jYS8lcyIsIGNsaWVudF9jZXJ0aWZpY2F0ZXNbaV0pOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSAlcy4uLiIsIG5hbWUgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjbGljZXJ0LCBuYW1lICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDEuNC4gVmVyaWZ5IGNlcnRpZmljYXRlIHZhbGlkaXR5IHdpdGggQ0EgY2VydGlmaWNhdGUKKyAgICAgICAgICovCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFZlcmlmeSB0aGUgY2xpZW50IGNlcnRpZmljYXRlIHdpdGggQ0EgY2VydGlmaWNhdGUuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF92ZXJpZnkoICZjbGljZXJ0LCAmY2FjZXJ0LCAmY3JsLCBOVUxMLCAmZmxhZ3MsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgY2hhciB2cmZ5X2J1Zls1MTJdOworCisgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworICAgICAgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCB2cmZ5X2J1Ziwgc2l6ZW9mKCB2cmZ5X2J1ZiApLCAiICAhICIsIGZsYWdzICk7CisgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIHZyZnlfYnVmICk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5IHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS41LiBMb2FkIG93biBwcml2YXRlIGtleQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19zbnByaW50ZihuYW1lLCA1MTIsICJzc2wvdGVzdC1jYS8lcyIsIGNsaWVudF9wcml2YXRlX2tleXNbaV0pOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIGNsaWVudCBwcml2YXRlIGtleSAlcy4uLiIsIG5hbWUgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZwaywgbmFtZSwgTlVMTCApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAxLjYuIFZlcmlmeSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSB3aXRoIHByaXZhdGUga2V5CisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBWZXJpZnkgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB3aXRoIHByaXZhdGUga2V5Li4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisKKyAgICAgICAgLyogRUMgTk9UIElNUExFTUVOVEVEIFlFVCAqLworICAgICAgICBpZiggISBtYmVkdGxzX3BrX2Nhbl9kbyggJmNsaWNlcnQucGssIE1CRURUTFNfUEtfUlNBICkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgY2VydGlmaWNhdGUncyBrZXkgaXMgbm90IFJTQVxuXG4iICk7CisgICAgICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEU7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX21waV9jbXBfbXBpKCZtYmVkdGxzX3BrX3JzYSggcGsgKS0+TiwgJm1iZWR0bHNfcGtfcnNhKCBjbGljZXJ0LnBrICktPk4pOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19tcGlfY21wX21waSBmb3IgTiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfbXBpX2NtcF9tcGkoJm1iZWR0bHNfcGtfcnNhKCBwayApLT5FLCAmbWJlZHRsc19wa19yc2EoIGNsaWNlcnQucGsgKS0+RSk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX21waV9jbXBfbXBpIGZvciBFIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggbWJlZHRsc19wa19yc2EoIHBrICkgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNsaWNlcnQgKTsKKyAgICAgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2FjZXJ0ICk7CisgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCAmY3JsICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgJiYgTUJFRFRMU19GU19JTyAmJgorICAgICAgICAgIE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvdWRwX3Byb3h5LmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdGVzdC91ZHBfcHJveHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDYyNGQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3Rlc3QvdWRwX3Byb3h5LmMKQEAgLTAsMCArMSw2MTggQEAKKy8qCisgKiAgVURQIHByb3h5OiBlbXVsYXRlIGFuIHVucmVsaWFibGUgVURQIGNvbm5leGlvbiBmb3IgRFRMUyB0ZXN0aW5nCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBXYXJuaW5nOiB0aGlzIGlzIGFuIGludGVybmFsIHV0aWxpdHkgcHJvZ3JhbSB3ZSB1c2UgZm9yIHRlc3RzLgorICogSXQgZG9lcyBicmVhayBzb21lIGFic3RyYWN0aW9ucyBmcm9tIHRoZSBORVQgbGF5ZXIsIGFuZCBpcyB0aHVzIE5PVCBhbgorICogZXhhbXBsZSBvZiBnb29kIGdlbmVyYWwgdXNhZ2UuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX05FVF9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19ORVRfQyBub3QgZGVmaW5lZC5cbiIgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCisKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRm9yIHNlbGVjdCgpICovCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpKSAmJiAhZGVmaW5lZChFRklYNjQpICYmIFwKKyAgICAhZGVmaW5lZChFRkkzMikKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2lmIGRlZmluZWQoX1dJTjMyX1dDRSkKKyNwcmFnbWEgY29tbWVudCggbGliLCAid3MyLmxpYiIgKQorI2Vsc2UKKyNwcmFnbWEgY29tbWVudCggbGliLCAid3MyXzMyLmxpYiIgKQorI2VuZGlmCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKyNlbHNlIC8qICggX1dJTjMyIHx8IF9XSU4zMl9XQ0UgKSAmJiAhRUZJWDY0ICYmICFFRkkzMiAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYgLyogKCBfV0lOMzIgfHwgX1dJTjMyX1dDRSApICYmICFFRklYNjQgJiYgIUVGSTMyICovCisKKy8qIEZvciBnZXR0aW1lb2ZkYXkoKSAqLworI2lmICFkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX01TR19TSVpFICAgICAgICAgICAgMTYzODQgKyAyMDQ4IC8qIG1heCByZWNvcmQvZGF0YWdyYW0gc2l6ZSAqLworCisjZGVmaW5lIERGTF9TRVJWRVJfQUREUiAgICAgICAgICJsb2NhbGhvc3QiCisjZGVmaW5lIERGTF9TRVJWRVJfUE9SVCAgICAgICAgICI0NDMzIgorI2RlZmluZSBERkxfTElTVEVOX0FERFIgICAgICAgICAibG9jYWxob3N0IgorI2RlZmluZSBERkxfTElTVEVOX1BPUlQgICAgICAgICAiNTU1NiIKKworI2RlZmluZSBVU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gdXNhZ2U6IHVkcF9wcm94eSBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgc2VydmVyX2FkZHI9JSVzICAgICAgZGVmYXVsdDogbG9jYWxob3N0XG4iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNlcnZlcl9wb3J0PSUlZCAgICAgIGRlZmF1bHQ6IDQ0MzNcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBsaXN0ZW5fYWRkcj0lJXMgICAgICBkZWZhdWx0OiBsb2NhbGhvc3RcbiIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgbGlzdGVuX3BvcnQ9JSVkICAgICAgZGVmYXVsdDogNDQzM1xuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBkdXBsaWNhdGU9JSVkICAgICAgICBkZWZhdWx0OiAwIChubyBkdXBsaWNhdGlvbilcbiIgICAgICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGUgYWJvdXQgMTpOIHBhY2tldHMgcmFuZG9tbHlcbiIgICAgICAgIFwKKyAgICAiICAgIGRlbGF5PSUlZCAgICAgICAgICAgIGRlZmF1bHQ6IDAgKG5vIGRlbGF5ZWQgcGFja2V0cylcbiIgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGFib3V0IDE6TiBwYWNrZXRzIHJhbmRvbWx5XG4iICAgICAgICAgICAgXAorICAgICIgICAgZGVsYXlfY2NzPTAvMSAgICAgICBkZWZhdWx0OiAwIChkb24ndCBkZWxheSBDaGFuZ2VDaXBoZXJTcGVjKVxuIiAgIFwKKyAgICAiICAgIGRyb3A9JSVkICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKG5vIGRyb3BwZWQgcGFja2V0cylcbiIgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3AgYWJvdXQgMTpOIHBhY2tldHMgcmFuZG9tbHlcbiIgICAgICAgICAgICAgXAorICAgICIgICAgbXR1PSUlZCAgICAgICAgICAgICAgZGVmYXVsdDogMCAodW5saW1pdGVkKVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZHJvcCBwYWNrZXRzIGxhcmdlciB0aGFuIE4gYnl0ZXNcbiIgICAgICAgICAgICBcCisgICAgIiAgICBiYWRfYWQ9MC8xICAgICAgICAgIGRlZmF1bHQ6IDAgKGRvbid0IGFkZCBiYWQgQXBwbGljYXRpb25EYXRhKVxuIiAgXAorICAgICIgICAgcHJvdGVjdF9odnI9MC8xICAgICBkZWZhdWx0OiAwIChkb24ndCBwcm90ZWN0IEhlbGxvVmVyaWZ5UmVxdWVzdClcbiIgXAorICAgICIgICAgcHJvdGVjdF9sZW49JSVkICAgICBkZWZhdWx0OiAoZG9uJ3QgcHJvdGVjdCBwYWNrZXRzIG9mIHRoaXMgc2l6ZSlcbiIgXAorICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHNlZWQ9JSVkICAgICAgICAgICAgIGRlZmF1bHQ6ICh1c2UgY3VycmVudCB0aW1lKVxuIiAgICAgICAgICAgICAgICBcCisgICAgIlxuIgorCisvKgorICogZ2xvYmFsIG9wdGlvbnMKKyAqLworc3RhdGljIHN0cnVjdCBvcHRpb25zCit7CisgICAgY29uc3QgY2hhciAqc2VydmVyX2FkZHI7ICAgIC8qIGFkZHJlc3MgdG8gZm9yd2FyZCBwYWNrZXRzIHRvICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJfcG9ydDsgICAgLyogcG9ydCB0byBmb3J3YXJkIHBhY2tldHMgdG8gICAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmxpc3Rlbl9hZGRyOyAgICAvKiBhZGRyZXNzIGZvciBhY2NlcHRpbmcgY2xpZW50IGNvbm5lY3Rpb25zICovCisgICAgY29uc3QgY2hhciAqbGlzdGVuX3BvcnQ7ICAgIC8qIHBvcnQgZm9yIGFjY2VwdGluZyBjbGllbnQgY29ubmVjdGlvbnMgICAgKi8KKworICAgIGludCBkdXBsaWNhdGU7ICAgICAgICAgICAgICAvKiBkdXBsaWNhdGUgMSBpbiBOIHBhY2tldHMgKG5vbmUgaWYgMCkgICAgICovCisgICAgaW50IGRlbGF5OyAgICAgICAgICAgICAgICAgIC8qIGRlbGF5IDEgcGFja2V0IGluIE4gKG5vbmUgaWYgMCkgICAgICAgICAgKi8KKyAgICBpbnQgZGVsYXlfY2NzOyAgICAgICAgICAgICAgLyogZGVsYXkgQ2hhbmdlQ2lwaGVyU3BlYyAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBkcm9wOyAgICAgICAgICAgICAgICAgICAvKiBkcm9wIDEgcGFja2V0IGluIE4gKG5vbmUgaWYgMCkgICAgICAgICAgICovCisgICAgaW50IG10dTsgICAgICAgICAgICAgICAgICAgIC8qIGRyb3AgcGFja2V0cyBsYXJnZXIgdGhhbiB0aGlzICAgICAgICAgICAgKi8KKyAgICBpbnQgYmFkX2FkOyAgICAgICAgICAgICAgICAgLyogaW5qZWN0IGNvcnJ1cHRlZCBBcHBsaWNhdGlvbkRhdGEgcmVjb3JkICAqLworICAgIGludCBwcm90ZWN0X2h2cjsgICAgICAgICAgICAvKiBuZXZlciBkcm9wIG9yIGRlbGF5IEhlbGxvVmVyaWZ5UmVxdWVzdCAgICovCisgICAgaW50IHByb3RlY3RfbGVuOyAgICAgICAgICAgIC8qIG5ldmVyIGRyb3AvZGVsYXkgcGFja2V0IG9mIHRoZSBnaXZlbiBzaXplKi8KKworICAgIHVuc2lnbmVkIGludCBzZWVkOyAgICAgICAgICAvKiBzZWVkIGZvciAicmFuZG9tIiBldmVudHMgICAgICAgICAgICAgICAgICovCit9IG9wdDsKKworc3RhdGljIHZvaWQgZXhpdF91c2FnZSggY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUgKQoreworICAgIGlmKCB2YWx1ZSA9PSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgdW5rbm93biBvcHRpb24gb3IgbWlzc2luZyB2YWx1ZTogJXNcbiIsIG5hbWUgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9wdGlvbiAlczogaWxsZWdhbCB2YWx1ZTogJXNcbiIsIG5hbWUsIHZhbHVlICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICBleGl0KCAxICk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9vcHRpb25zKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIG9wdC5zZXJ2ZXJfYWRkciAgICA9IERGTF9TRVJWRVJfQUREUjsKKyAgICBvcHQuc2VydmVyX3BvcnQgICAgPSBERkxfU0VSVkVSX1BPUlQ7CisgICAgb3B0Lmxpc3Rlbl9hZGRyICAgID0gREZMX0xJU1RFTl9BRERSOworICAgIG9wdC5saXN0ZW5fcG9ydCAgICA9IERGTF9MSVNURU5fUE9SVDsKKyAgICAvKiBPdGhlciBtZW1iZXJzIGRlZmF1bHQgdG8gMCAqLworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIE5VTEwgKTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9hZGRyIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9hZGRyID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VydmVyX3BvcnQiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuc2VydmVyX3BvcnQgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJsaXN0ZW5fYWRkciIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5saXN0ZW5fYWRkciA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImxpc3Rlbl9wb3J0IiApID09IDAgKQorICAgICAgICAgICAgb3B0Lmxpc3Rlbl9wb3J0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZHVwbGljYXRlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZHVwbGljYXRlID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kdXBsaWNhdGUgPCAwIHx8IG9wdC5kdXBsaWNhdGUgPiAyMCApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImRlbGF5IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZGVsYXkgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LmRlbGF5IDwgMCB8fCBvcHQuZGVsYXkgPiAyMCB8fCBvcHQuZGVsYXkgPT0gMSApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImRlbGF5X2NjcyIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRlbGF5X2NjcyA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGVsYXlfY2NzIDwgMCB8fCBvcHQuZGVsYXlfY2NzID4gMSApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImRyb3AiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kcm9wID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kcm9wIDwgMCB8fCBvcHQuZHJvcCA+IDIwIHx8IG9wdC5kcm9wID09IDEgKQorICAgICAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJtdHUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5tdHUgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0Lm10dSA8IDAgfHwgb3B0Lm10dSA+IE1BWF9NU0dfU0laRSApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImJhZF9hZCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmJhZF9hZCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuYmFkX2FkIDwgMCB8fCBvcHQuYmFkX2FkID4gMSApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInByb3RlY3RfaHZyIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQucHJvdGVjdF9odnIgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnByb3RlY3RfaHZyIDwgMCB8fCBvcHQucHJvdGVjdF9odnIgPiAxICkKKyAgICAgICAgICAgICAgICBleGl0X3VzYWdlKCBwLCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicHJvdGVjdF9sZW4iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5wcm90ZWN0X2xlbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQucHJvdGVjdF9sZW4gPCAwICkKKyAgICAgICAgICAgICAgICBleGl0X3VzYWdlKCBwLCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VlZCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnNlZWQgPSBhdG9pKCBxICk7CisgICAgICAgICAgICBpZiggb3B0LnNlZWQgPT0gMCApCisgICAgICAgICAgICAgICAgZXhpdF91c2FnZSggcCwgcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRfdXNhZ2UoIHAsIE5VTEwgKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfdHlwZSggdW5zaWduZWQgY2hhciAqbXNnLCBzaXplX3QgbGVuICkKK3sKKyAgICBpZiggbGVuIDwgMSApICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAiSW52YWxpZCIgKTsKKyAgICBzd2l0Y2goIG1zZ1swXSApCisgICAgeworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUM6ICAgIHJldHVybiggIkNoYW5nZUNpcGhlclNwZWMiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfTVNHX0FMRVJUOiAgICAgICAgICAgICAgICAgcmV0dXJuKCAiQWxlcnQiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEE6ICAgICAgcmV0dXJuKCAiQXBwbGljYXRpb25EYXRhIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0U6ICAgICAgICAgICAgIGJyZWFrOyAvKiBTZWUgYmVsb3cgKi8KKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAiVW5rbm93biIgKTsKKyAgICB9CisKKyAgICBpZiggbGVuIDwgMTMgKyAxMiApICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCAiSW52YWxpZCBoYW5kc2hha2UiICk7CisKKyAgICAvKgorICAgICAqIE91ciBoYW5kc2hha2UgbWVzc2FnZSBhcmUgbGVzcyB0aGFuIDJeMTYgYnl0ZXMgbG9uZywgc28gdGhleSBzaG91bGQKKyAgICAgKiBoYXZlIDAgYXMgdGhlIGZpcnN0IGJ5dGUgb2YgbGVuZ3RoLCBmcmFnX29mZnNldCBhbmQgZnJhZ19sZW5ndGguCisgICAgICogT3RoZXJ3aXNlLCBhc3N1bWUgdGhleSBhcmUgZW5jcnlwdGVkLgorICAgICAqLworICAgIGlmKCBtc2dbMTRdIHx8IG1zZ1sxOV0gfHwgbXNnWzIyXSApICAgICByZXR1cm4oICJFbmNyeXB0ZWQgaGFuZHNoYWtlIiApOworCisgICAgc3dpdGNoKCBtc2dbMTNdICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVDogICAgICAgICAgcmV0dXJuKCAiSGVsbG9SZXF1ZXN0IiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0NMSUVOVF9IRUxMTzogICAgICAgICAgIHJldHVybiggIkNsaWVudEhlbGxvIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9IRUxMTzogICAgICAgICAgIHJldHVybiggIlNlcnZlckhlbGxvIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUOiAgIHJldHVybiggIkhlbGxvVmVyaWZ5UmVxdWVzdCIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19ORVdfU0VTU0lPTl9USUNLRVQ6ICAgICByZXR1cm4oICJOZXdTZXNzaW9uVGlja2V0IiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFOiAgICAgICAgICAgIHJldHVybiggIkNlcnRpZmljYXRlIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0U6ICAgIHJldHVybiggIlNlcnZlcktleUV4Y2hhbmdlIiApOworICAgICAgICBjYXNlIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1JFUVVFU1Q6ICAgIHJldHVybiggIkNlcnRpZmljYXRlUmVxdWVzdCIgKTsKKyAgICAgICAgY2FzZSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE9fRE9ORTogICAgICByZXR1cm4oICJTZXJ2ZXJIZWxsb0RvbmUiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSFNfQ0VSVElGSUNBVEVfVkVSSUZZOiAgICAgcmV0dXJuKCAiQ2VydGlmaWNhdGVWZXJpZnkiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRTogICAgcmV0dXJuKCAiQ2xpZW50S2V5RXhjaGFuZ2UiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19TU0xfSFNfRklOSVNIRUQ6ICAgICAgICAgICAgICAgcmV0dXJuKCAiRmluaXNoZWQiICk7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiggIlVua25vd24gaGFuZHNoYWtlIiApOworICAgIH0KK30KKworLyogUmV0dXJuIGVsYXBzZWQgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGZpcnN0IGNhbGwgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVsbGFwc2VkX3RpbWUoIHZvaWQgKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHJldHVybiggMCApOworI2Vsc2UKKyAgICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgcmVmID0geyAwLCAwIH07CisgICAgc3RydWN0IHRpbWV2YWwgbm93OworCisgICAgaWYoIHJlZi50dl9zZWMgPT0gMCAmJiByZWYudHZfdXNlYyA9PSAwICkKKyAgICB7CisgICAgICAgIGdldHRpbWVvZmRheSggJnJlZiwgTlVMTCApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICBnZXR0aW1lb2ZkYXkoICZub3csIE5VTEwgKTsKKyAgICByZXR1cm4oIDEwMDAgKiAoIG5vdy50dl9zZWMgIC0gcmVmLnR2X3NlYyApCisgICAgICAgICAgICAgICAgICsgKCBub3cudHZfdXNlYyAtIHJlZi50dl91c2VjICkgLyAxMDAwICk7CisjZW5kaWYKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0ICpkc3Q7CisgICAgY29uc3QgY2hhciAqd2F5OworICAgIGNvbnN0IGNoYXIgKnR5cGU7CisgICAgdW5zaWduZWQgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnVmW01BWF9NU0dfU0laRV07Cit9IHBhY2tldDsKKworLyogUHJpbnQgcGFja2V0LiBPdXRnb2luZyBwYWNrZXRzIGNvbWUgd2l0aCBhIHJlYXNvbiAoZm9yd2FyZCwgZHVwbCwgZXRjLikgKi8KK3ZvaWQgcHJpbnRfcGFja2V0KCBjb25zdCBwYWNrZXQgKnAsIGNvbnN0IGNoYXIgKndoeSApCit7CisgICAgaWYoIHdoeSA9PSBOVUxMICkKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICUwNWx1ICVzICVzICgldSBieXRlcylcbiIsCisgICAgICAgICAgICAgICAgZWxsYXBzZWRfdGltZSgpLCBwLT53YXksIHAtPnR5cGUsIHAtPmxlbiApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgICAgICVzICVzICgldSBieXRlcyk6ICVzXG4iLAorICAgICAgICAgICAgICAgIHAtPndheSwgcC0+dHlwZSwgcC0+bGVuLCB3aHkgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworfQorCitpbnQgc2VuZF9wYWNrZXQoIGNvbnN0IHBhY2tldCAqcCwgY29uc3QgY2hhciAqd2h5ICkKK3sKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgKmRzdCA9IHAtPmRzdDsKKworICAgIC8qIGluc2VydCBjb3JydXB0ZWQgQXBwbGljYXRpb25EYXRhIHJlY29yZD8gKi8KKyAgICBpZiggb3B0LmJhZF9hZCAmJgorICAgICAgICBzdHJjbXAoIHAtPnR5cGUsICJBcHBsaWNhdGlvbkRhdGEiICkgPT0gMCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfTVNHX1NJWkVdOworICAgICAgICBtZW1jcHkoIGJ1ZiwgcC0+YnVmLCBwLT5sZW4gKTsKKyAgICAgICAgKytidWZbcC0+bGVuIC0gMV07CisKKyAgICAgICAgcHJpbnRfcGFja2V0KCBwLCAiY29ycnVwdGVkIiApOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9zZW5kKCBkc3QsIGJ1ZiwgcC0+bGVuICkgKSA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgbWJlZHRsc19uZXRfc2VuZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpbnRfcGFja2V0KCBwLCB3aHkgKTsKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9zZW5kKCBkc3QsIHAtPmJ1ZiwgcC0+bGVuICkgKSA8PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAhIG1iZWR0bHNfbmV0X3NlbmQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICByZXR1cm4oIHJldCApOworICAgIH0KKworICAgIC8qIERvbid0IGR1cGxpY2F0ZSBBcHBsaWNhdGlvbiBEYXRhLCBvbmx5IGhhbmRzaGFrZSBjb3ZlcmVkICovCisgICAgaWYoIG9wdC5kdXBsaWNhdGUgIT0gMCAmJgorICAgICAgICBzdHJjbXAoIHAtPnR5cGUsICJBcHBsaWNhdGlvbkRhdGEiICkgIT0gMCAmJgorICAgICAgICByYW5kKCkgJSBvcHQuZHVwbGljYXRlID09IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnRfcGFja2V0KCBwLCAiZHVwbGljYXRlZCIgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX25ldF9zZW5kKCBkc3QsIHAtPmJ1ZiwgcC0+bGVuICkgKSA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICEgbWJlZHRsc19uZXRfc2VuZCByZXR1cm5lZCAlZFxuIiwgcmV0ICk7CisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyBwYWNrZXQgcHJldjsKKwordm9pZCBjbGVhcl9wZW5kaW5nKCB2b2lkICkKK3sKKyAgICBtZW1zZXQoICZwcmV2LCAwLCBzaXplb2YoIHBhY2tldCApICk7Cit9CisKKy8qCisgKiBBdm9pZCBkcm9wcGluZyBvciBkZWxheWluZyBhIHBhY2tldCB0aGF0IHdhcyBhbHJlYWR5IGRyb3BwZWQgdHdpY2U6IHRoaXMKKyAqIG9ubHkgcmVzdWx0cyBpbiB1bmludGVyZXN0aW5nIHRpbWVvdXRzLiBXZSBjYW4ndCByZWx5IG9uIHR5cGUgdG8gaWRlbnRpZnkKKyAqIHBhY2tldHMsIHNpbmNlIGR1cmluZyByZW5lZ290aWF0aW9uIHRoZXkncmUgYWxsIGVuY3J5cHRlZC4gIFNvLCByZWx5IG9uCisgKiBzaXplIG1vZCAyMDQ4ICh3aGljaCBpcyB1c3VhbGx5IGp1c3Qgc2l6ZSkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRyb3BwZWRbMjA0OF0gPSB7IDAgfTsKKyNkZWZpbmUgRFJPUF9NQVggMgorCisvKgorICogT3BlblNTTCBncm91cHMgcGFja2V0cyBpbiBhIGRhdGFncmFtIHRoZSBmaXJzdCB0aW1lIGl0IHNlbmRzIHRoZW0sIGJ1dCBub3QKKyAqIHdoZW4gaXQgcmVzZW5kcyB0aGVtLiBDb3VudCBldmVyeSByZWNvcmQgYXMgc2VlbiB0aGUgZmlyc3QgdGltZS4KKyAqLwordm9pZCB1cGRhdGVfZHJvcHBlZCggY29uc3QgcGFja2V0ICpwICkKK3sKKyAgICBzaXplX3QgaWQgPSBwLT5sZW4gJSBzaXplb2YoIGRyb3BwZWQgKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBwLT5idWYgKyBwLT5sZW47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VyID0gcC0+YnVmOworICAgIHNpemVfdCBsZW4gPSAoICggY3VyWzExXSA8PCA4ICkgfCBjdXJbMTJdICkgKyAxMzsKKworICAgICsrZHJvcHBlZFtpZF07CisKKyAgICAvKiBBdm9pZCBjb3VudGluZyBzaW5nbGUgcmVjb3JkIHR3aWNlICovCisgICAgaWYoIGxlbiA9PSBwLT5sZW4gKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSggY3VyIDwgZW5kICkKKyAgICB7CisgICAgICAgIGxlbiA9ICggKCBjdXJbMTFdIDw8IDggKSB8IGN1clsxMl0gKSArIDEzOworCisgICAgICAgIGlkID0gbGVuICUgc2l6ZW9mKCBkcm9wcGVkICk7CisgICAgICAgICsrZHJvcHBlZFtpZF07CisKKyAgICAgICAgY3VyICs9IGxlbjsKKyAgICB9Cit9CisKK2ludCBoYW5kbGVfbWVzc2FnZSggY29uc3QgY2hhciAqd2F5LAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9jb250ZXh0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgKnNyYyApCit7CisgICAgaW50IHJldDsKKyAgICBwYWNrZXQgY3VyOworICAgIHNpemVfdCBpZDsKKworICAgIC8qIHJlY2VpdmUgcGFja2V0ICovCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfcmVjdiggc3JjLCBjdXIuYnVmLCBzaXplb2YoIGN1ci5idWYgKSApICkgPD0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgISBtYmVkdGxzX25ldF9yZWN2IHJldHVybmVkICVkXG4iLCByZXQgKTsKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyAgICB9CisKKyAgICBjdXIubGVuICA9IHJldDsKKyAgICBjdXIudHlwZSA9IG1zZ190eXBlKCBjdXIuYnVmLCBjdXIubGVuICk7CisgICAgY3VyLndheSAgPSB3YXk7CisgICAgY3VyLmRzdCAgPSBkc3Q7CisgICAgcHJpbnRfcGFja2V0KCAmY3VyLCBOVUxMICk7CisKKyAgICBpZCA9IGN1ci5sZW4gJSBzaXplb2YoIGRyb3BwZWQgKTsKKworICAgIC8qIGRvIHdlIHdhbnQgdG8gZHJvcCwgZGVsYXksIG9yIGZvcndhcmQgaXQ/ICovCisgICAgaWYoICggb3B0Lm10dSAhPSAwICYmCisgICAgICAgICAgY3VyLmxlbiA+ICh1bnNpZ25lZCkgb3B0Lm10dSApIHx8CisgICAgICAgICggb3B0LmRyb3AgIT0gMCAmJgorICAgICAgICAgIHN0cmNtcCggY3VyLnR5cGUsICJBcHBsaWNhdGlvbkRhdGEiICkgIT0gMCAmJgorICAgICAgICAgICEgKCBvcHQucHJvdGVjdF9odnIgJiYKKyAgICAgICAgICAgICAgc3RyY21wKCBjdXIudHlwZSwgIkhlbGxvVmVyaWZ5UmVxdWVzdCIgKSA9PSAwICkgJiYKKyAgICAgICAgICBjdXIubGVuICE9IChzaXplX3QpIG9wdC5wcm90ZWN0X2xlbiAmJgorICAgICAgICAgIGRyb3BwZWRbaWRdIDwgRFJPUF9NQVggJiYKKyAgICAgICAgICByYW5kKCkgJSBvcHQuZHJvcCA9PSAwICkgKQorICAgIHsKKyAgICAgICAgdXBkYXRlX2Ryb3BwZWQoICZjdXIgKTsKKyAgICB9CisgICAgZWxzZSBpZiggKCBvcHQuZGVsYXlfY2NzID09IDEgJiYKKyAgICAgICAgICAgICAgIHN0cmNtcCggY3VyLnR5cGUsICJDaGFuZ2VDaXBoZXJTcGVjIiApID09IDAgKSB8fAorICAgICAgICAgICAgICggb3B0LmRlbGF5ICE9IDAgJiYKKyAgICAgICAgICAgICAgIHN0cmNtcCggY3VyLnR5cGUsICJBcHBsaWNhdGlvbkRhdGEiICkgIT0gMCAmJgorICAgICAgICAgICAgICAgISAoIG9wdC5wcm90ZWN0X2h2ciAmJgorICAgICAgICAgICAgICAgICAgIHN0cmNtcCggY3VyLnR5cGUsICJIZWxsb1ZlcmlmeVJlcXVlc3QiICkgPT0gMCApICYmCisgICAgICAgICAgICAgICBwcmV2LmRzdCA9PSBOVUxMICYmCisgICAgICAgICAgICAgICBjdXIubGVuICE9IChzaXplX3QpIG9wdC5wcm90ZWN0X2xlbiAmJgorICAgICAgICAgICAgICAgZHJvcHBlZFtpZF0gPCBEUk9QX01BWCAmJgorICAgICAgICAgICAgICAgcmFuZCgpICUgb3B0LmRlbGF5ID09IDAgKSApCisgICAgeworICAgICAgICBtZW1jcHkoICZwcmV2LCAmY3VyLCBzaXplb2YoIHBhY2tldCApICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIGZvcndhcmQgYW5kIHBvc3NpYmx5IGR1cGxpY2F0ZSAqLworICAgICAgICBpZiggKCByZXQgPSBzZW5kX3BhY2tldCggJmN1ciwgImZvcndhcmRlZCIgKSApICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCByZXQgKTsKKworICAgICAgICAvKiBzZW5kIHByZXZpb3VzbHkgZGVsYXllZCBtZXNzYWdlIGlmIGFueSAqLworICAgICAgICBpZiggcHJldi5kc3QgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IHNlbmRfcGFja2V0KCAmcHJldiwgImRlbGF5ZWQiICk7CisgICAgICAgICAgICBtZW1zZXQoICZwcmV2LCAwLCBzaXplb2YoIHBhY2tldCApICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX25ldF9jb250ZXh0IGxpc3Rlbl9mZCwgY2xpZW50X2ZkLCBzZXJ2ZXJfZmQ7CisKKyAgICBpbnQgbmJfZmRzOworICAgIGZkX3NldCByZWFkX2ZkczsKKworICAgIG1iZWR0bHNfbmV0X2luaXQoICZsaXN0ZW5fZmQgKTsKKyAgICBtYmVkdGxzX25ldF9pbml0KCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworCisgICAgZ2V0X29wdGlvbnMoIGFyZ2MsIGFyZ3YgKTsKKworICAgIC8qCisgICAgICogRGVjaXNpb25zIHRvIGRyb3AvZGVsYXkvZHVwbGljYXRlIHBhY2tldHMgYXJlIHBzZXVkby1yYW5kb206IGRyb3BwaW5nCisgICAgICogZXhhY3RseSAxIGluIE4gcGFja2V0cyB3b3VsZCBsZWFkIHRvIHByb2JsZW1zIHdoZW4gYSBmbGlnaHQgaGFzIGV4YWN0bHkKKyAgICAgKiBOIHBhY2tldHM6IHRoZSBzYW1lIHBhY2tldCB3b3VsZCBiZSBkcm9wcGVkIG9uIGV2ZXJ5IHJlc2VuZC4KKyAgICAgKgorICAgICAqIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVwcm9kdWNlIHByb2JsZW1zIHJlbGlhYmx5LCB0aGUgc2VlZCBtYXkgYmUKKyAgICAgKiBzcGVjaWZpZWQgZXhwbGljaXRseS4KKyAgICAgKi8KKyAgICBpZiggb3B0LnNlZWQgPT0gMCApCisgICAgeworICAgICAgICBvcHQuc2VlZCA9ICh1bnNpZ25lZCBpbnQpIHRpbWUoIE5VTEwgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUHNldWRvLXJhbmRvbSBzZWVkOiAldVxuIiwgb3B0LnNlZWQgKTsKKyAgICB9CisKKyAgICBzcmFuZCggb3B0LnNlZWQgKTsKKworICAgIC8qCisgICAgICogMC4gIkNvbm5lY3QiIHRvIHRoZSBzZXJ2ZXIKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDb25uZWN0IHRvIHNlcnZlciBvbiBVRFAvJXMvJXMgLi4uIiwKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfYWRkciwgb3B0LnNlcnZlcl9wb3J0ICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2Nvbm5lY3QoICZzZXJ2ZXJfZmQsIG9wdC5zZXJ2ZXJfYWRkciwgb3B0LnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX05FVF9QUk9UT19VRFAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuIFNldHVwIHRoZSAibGlzdGVuaW5nIiBVRFAgc29ja2V0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQmluZCBvbiBVRFAvJXMvJXMgLi4uIiwKKyAgICAgICAgICAgIG9wdC5saXN0ZW5fYWRkciwgb3B0Lmxpc3Rlbl9wb3J0ICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2JpbmQoICZsaXN0ZW5fZmQsIG9wdC5saXN0ZW5fYWRkciwgb3B0Lmxpc3Rlbl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX05FVF9QUk9UT19VRFAgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfYmluZCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDIuIFdhaXQgdW50aWwgYSBjbGllbnQgY29ubmVjdHMKKyAgICAgKi8KK2FjY2VwdDoKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBXYWl0aW5nIGZvciBhIHJlbW90ZSBjb25uZWN0aW9uIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19uZXRfYWNjZXB0KCAmbGlzdGVuX2ZkLCAmY2xpZW50X2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX25ldF9hY2NlcHQgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAzLiBGb3J3YXJkIHBhY2tldHMgZm9yZXZlciAoa2lsbCB0aGUgcHJvY2VzcyB0byB0ZXJtaW5hdGUgaXQpCisgICAgICovCisgICAgY2xlYXJfcGVuZGluZygpOworICAgIG1lbXNldCggZHJvcHBlZCwgMCwgc2l6ZW9mKCBkcm9wcGVkICkgKTsKKworICAgIG5iX2ZkcyA9IGNsaWVudF9mZC5mZDsKKyAgICBpZiggbmJfZmRzIDwgc2VydmVyX2ZkLmZkICkKKyAgICAgICAgbmJfZmRzID0gc2VydmVyX2ZkLmZkOworICAgIGlmKCBuYl9mZHMgPCBsaXN0ZW5fZmQuZmQgKQorICAgICAgICBuYl9mZHMgPSBsaXN0ZW5fZmQuZmQ7CisgICAgKytuYl9mZHM7CisKKyAgICB3aGlsZSggMSApCisgICAgeworICAgICAgICBGRF9aRVJPKCAmcmVhZF9mZHMgKTsKKyAgICAgICAgRkRfU0VUKCBzZXJ2ZXJfZmQuZmQsICZyZWFkX2ZkcyApOworICAgICAgICBGRF9TRVQoIGNsaWVudF9mZC5mZCwgJnJlYWRfZmRzICk7CisgICAgICAgIEZEX1NFVCggbGlzdGVuX2ZkLmZkLCAmcmVhZF9mZHMgKTsKKworICAgICAgICBpZiggKCByZXQgPSBzZWxlY3QoIG5iX2ZkcywgJnJlYWRfZmRzLCBOVUxMLCBOVUxMLCBOVUxMICkgKSA8PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCAic2VsZWN0IiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIEZEX0lTU0VUKCBsaXN0ZW5fZmQuZmQsICZyZWFkX2ZkcyApICkKKyAgICAgICAgICAgIGdvdG8gYWNjZXB0OworCisgICAgICAgIGlmKCBGRF9JU1NFVCggY2xpZW50X2ZkLmZkLCAmcmVhZF9mZHMgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IGhhbmRsZV9tZXNzYWdlKCAiUyA8LSBDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VydmVyX2ZkLCAmY2xpZW50X2ZkICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGFjY2VwdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBGRF9JU1NFVCggc2VydmVyX2ZkLmZkLCAmcmVhZF9mZHMgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IGhhbmRsZV9tZXNzYWdlKCAiUyAtPiBDIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xpZW50X2ZkLCAmc2VydmVyX2ZkICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGFjY2VwdDsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsxMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGVycm9yX2J1ZiwgMTAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiTGFzdCBlcnJvciB3YXM6IC0weCUwNFggLSAlc1xuXG4iLCAtIHJldCwgZXJyb3JfYnVmICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX25ldF9mcmVlKCAmY2xpZW50X2ZkICk7CisgICAgbWJlZHRsc19uZXRfZnJlZSggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZsaXN0ZW5fZmQgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICE9IDAgKTsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfTkVUX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy91dGlsL0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3V0aWwvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliNjYwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy91dGlsL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK3NldChsaWJzCisgICAgbWJlZHRscworKQorCithZGRfZXhlY3V0YWJsZShzdHJlcnJvciBzdHJlcnJvci5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHN0cmVycm9yICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKHBlbTJkZXIgcGVtMmRlci5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHBlbTJkZXIgJHtsaWJzfSkKKworaW5zdGFsbChUQVJHRVRTIHN0cmVycm9yIHBlbTJkZXIKKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdXRpbC9wZW0yZGVyLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdXRpbC9wZW0yZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyYzZhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy91dGlsL3BlbTJkZXIuYwpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqICBDb252ZXJ0IFBFTSB0byBERVIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNkZWZpbmUgbWJlZHRsc19jYWxsb2MgICAgY2FsbG9jCisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0JBU0U2NF9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmFzZTY0LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImZpbGUucGVtIgorI2RlZmluZSBERkxfT1VUUFVUX0ZJTEVOQU1FICAgICAiZmlsZS5kZXIiCisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJcbiB1c2FnZTogcGVtMmRlciBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGZpbGVuYW1lPSUlcyAgICAgICAgIGRlZmF1bHQ6IGZpbGUucGVtXG4iICAgICAgXAorICAgICIgICAgb3V0cHV0X2ZpbGU9JSVzICAgICAgZGVmYXVsdDogZmlsZS5kZXJcbiIgICAgICBcCisgICAgIlxuIgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykKK2ludCBtYWluKCB2b2lkICkKK3sKKyAgICBtYmVkdGxzX3ByaW50ZigiTUJFRFRMU19CQVNFNjRfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOyAgICAgICAvKiBmaWxlbmFtZSBvZiB0aGUgaW5wdXQgZmlsZSAgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlOyAgICAvKiB3aGVyZSB0byBzdG9yZSB0aGUgb3V0cHV0ICAgICAgICAgICAgICAqLworfSBvcHQ7CisKK2ludCBjb252ZXJ0X3BlbV90b19kZXIoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvbGVuICkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMxLCAqczIsICplbmQgPSBpbnB1dCArIGlsZW47CisgICAgc2l6ZV90IGxlbiA9IDA7CisKKyAgICBzMSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cnN0ciggKGNvbnN0IGNoYXIgKikgaW5wdXQsICItLS0tLUJFR0lOIiApOworICAgIGlmKCBzMSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgczIgPSAodW5zaWduZWQgY2hhciAqKSBzdHJzdHIoIChjb25zdCBjaGFyICopIGlucHV0LCAiLS0tLS1FTkQiICk7CisgICAgaWYoIHMyID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBzMSArPSAxMDsKKyAgICB3aGlsZSggczEgPCBlbmQgJiYgKnMxICE9ICctJyApCisgICAgICAgIHMxKys7CisgICAgd2hpbGUoIHMxIDwgZW5kICYmICpzMSA9PSAnLScgKQorICAgICAgICBzMSsrOworICAgIGlmKCAqczEgPT0gJ1xyJyApIHMxKys7CisgICAgaWYoICpzMSA9PSAnXG4nICkgczErKzsKKworICAgIGlmKCBzMiA8PSBzMSB8fCBzMiA+IGVuZCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIHJldCA9IG1iZWR0bHNfYmFzZTY0X2RlY29kZSggTlVMTCwgMCwgJmxlbiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczEsIHMyIC0gczEgKTsKKyAgICBpZiggcmV0ID09IE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUiApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBpZiggbGVuID4gKm9sZW4gKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUoIG91dHB1dCwgbGVuLCAmbGVuLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMiAtIHMxICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorCisgICAgKm9sZW4gPSBsZW47CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIExvYWQgYWxsIGRhdGEgZnJvbSBhIGZpbGUgaW50byBhIGdpdmVuIGJ1ZmZlci4KKyAqLworc3RhdGljIGludCBsb2FkX2ZpbGUoIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKipidWYsIHNpemVfdCAqbiApCit7CisgICAgRklMRSAqZjsKKyAgICBsb25nIHNpemU7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIHBhdGgsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBmc2VlayggZiwgMCwgU0VFS19FTkQgKTsKKyAgICBpZiggKCBzaXplID0gZnRlbGwoIGYgKSApID09IC0xICkKKyAgICB7CisgICAgICAgIGZjbG9zZSggZiApOworICAgICAgICByZXR1cm4oIC0xICk7CisgICAgfQorICAgIGZzZWVrKCBmLCAwLCBTRUVLX1NFVCApOworCisgICAgKm4gPSAoc2l6ZV90KSBzaXplOworCisgICAgaWYoICpuICsgMSA9PSAwIHx8CisgICAgICAgICggKmJ1ZiA9IG1iZWR0bHNfY2FsbG9jKCAxLCAqbiArIDEgKSApID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBpZiggZnJlYWQoICpidWYsIDEsICpuLCBmICkgIT0gKm4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIGZyZWUoICpidWYgKTsKKyAgICAgICAgKmJ1ZiA9IE5VTEw7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgICgqYnVmKVsqbl0gPSAnXDAnOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qCisgKiBXcml0ZSBidWZmZXIgdG8gYSBmaWxlCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZmlsZSggY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbiApCit7CisgICAgRklMRSAqZjsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggcGF0aCwgIndiIiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCBmd3JpdGUoIGJ1ZiwgMSwgbiwgZiApICE9IG4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworaW50IG1haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKnBlbV9idWZmZXIgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgZGVyX2J1ZmZlcls0MDk2XTsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBzaXplX3QgcGVtX3NpemUsIGRlcl9zaXplID0gc2l6ZW9mKGRlcl9idWZmZXIpOworICAgIGludCBpOworICAgIGNoYXIgKnAsICpxOworCisgICAgLyoKKyAgICAgKiBTZXQgdG8gc2FuZSB2YWx1ZXMKKyAgICAgKi8KKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikgKTsKKyAgICBtZW1zZXQoIGRlcl9idWZmZXIsIDAsIHNpemVvZihkZXJfYnVmZmVyKSApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworICAgIG9wdC5vdXRwdXRfZmlsZSAgICAgICAgID0gREZMX09VVFBVVF9GSUxFTkFNRTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGlmKCBzdHJjbXAoIHAsICJmaWxlbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5maWxlbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm91dHB1dF9maWxlIiApID09IDAgKQorICAgICAgICAgICAgb3B0Lm91dHB1dF9maWxlID0gcTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUgUEVNIGZpbGUKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIFBFTSBmaWxlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbG9hZF9maWxlKCBvcHQuZmlsZW5hbWUsICZwZW1fYnVmZmVyLCAmcGVtX3NpemUgKTsKKworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworI2lmZGVmIE1CRURUTFNfRVJST1JfQworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworI2VuZGlmCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBsb2FkX2ZpbGUgcmV0dXJuZWQgJWQgLSAlc1xuXG4iLCByZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMS4yLiBDb252ZXJ0IGZyb20gUEVNIHRvIERFUgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENvbnZlcnRpbmcgZnJvbSBQRU0gdG8gREVSIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgaWYoICggcmV0ID0gY29udmVydF9wZW1fdG9fZGVyKCBwZW1fYnVmZmVyLCBwZW1fc2l6ZSwgZGVyX2J1ZmZlciwgJmRlcl9zaXplICkgKSAhPSAwICkKKyAgICB7CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisjZW5kaWYKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIGNvbnZlcnRfcGVtX3RvX2RlciAlZCAtICVzXG5cbiIsIHJldCwgYnVmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLjMuIFdyaXRlIHRoZSBERVIgZmlsZQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdyaXRpbmcgdGhlIERFUiBmaWxlIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gd3JpdGVfZmlsZSggb3B0Lm91dHB1dF9maWxlLCBkZXJfYnVmZmVyLCBkZXJfc2l6ZSApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisjaWZkZWYgTUJFRFRMU19FUlJPUl9DCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisjZW5kaWYKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIHdyaXRlX2ZpbGUgcmV0dXJuZWQgJWQgLSAlc1xuXG4iLCByZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworZXhpdDoKKyAgICBmcmVlKCBwZW1fYnVmZmVyICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19CQVNFNjRfQyAmJiBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvdXRpbC9zdHJlcnJvci5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3V0aWwvc3RyZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTgyODBjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3V0aWwvc3RyZXJyb3IuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogIFRyYW5zbGF0ZSBlcnJvciBjb2RlIHRvIGVycm9yIHN0cmluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IHN0cmVycm9yIDxlcnJvcmNvZGU+XG4iIFwKKyAgICAiXG4gd2hlcmUgPGVycm9yY29kZT4gY2FuIGJlIGEgZGVjaW1hbCBvciBoZXhhZGVjaW1hbCAoc3RhcnRzIHdpdGggMHggb3IgLTB4KVxuIgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19FUlJPUl9DKSAmJiAhZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0VSUk9SX0MgYW5kL29yIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgbm90IGRlZmluZWQuXG4iKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbHNlCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgbG9uZyBpbnQgdmFsOworICAgIGNoYXIgKmVuZCA9IGFyZ3ZbMV07CisKKyAgICBpZiggYXJnYyAhPSAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICB2YWwgPSBzdHJ0b2woIGFyZ3ZbMV0sICZlbmQsIDEwICk7CisgICAgaWYoICplbmQgIT0gJ1wwJyApCisgICAgeworICAgICAgICB2YWwgPSBzdHJ0b2woIGFyZ3ZbMV0sICZlbmQsIDE2ICk7CisgICAgICAgIGlmKCAqZW5kICE9ICdcMCcgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICB9CisgICAgfQorICAgIGlmKCB2YWwgPiAwICkKKyAgICAgICAgdmFsID0gLXZhbDsKKworICAgIGlmKCB2YWwgIT0gMCApCisgICAgeworICAgICAgICBjaGFyIGVycm9yX2J1ZlsyMDBdOworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCB2YWwsIGVycm9yX2J1ZiwgMjAwICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJMYXN0IGVycm9yIHdhczogLTB4JTA0eCAtICVzXG5cbiIsIChpbnQpIC12YWwsIGVycm9yX2J1ZiApOworICAgIH0KKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCB2YWwgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy93aW5jZV9tYWluLmMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvd2luY2VfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2EyYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMvd2luY2VfbWFpbi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgV2luZG93cyBDRSBjb25zb2xlIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2V4dGVybiBpbnQgbWFpbiggaW50LCBjb25zdCBjaGFyICoqICk7CisKK2ludCBfdG1haW4oIGludCBhcmdjLCBfVENIQVIqIHRhcmd2W10gKQoreworICAgIGNoYXIgKiphcmd2OworICAgIGludCBpOworCisgICAgYXJndiA9ICggY2hhciAqKiApIGNhbGxvYyggYXJnYywgc2l6ZW9mKCBjaGFyICogKSApOworCisgICAgZm9yICggaSA9IDA7IGkgPCBhcmdjOyBpKysgKSB7CisgICAgICAgIHNpemVfdCBsZW47CisgICAgICAgIGxlbiA9IF90Y3NsZW4oIHRhcmd2W2ldICkgKyAxOworICAgICAgICBhcmd2W2ldID0gKCBjaGFyICogKSBjYWxsb2MoIGxlbiwgc2l6ZW9mKCBjaGFyICkgKTsKKyAgICAgICAgd2NzdG9tYnMoIGFyZ3ZbaV0sIHRhcmd2W2ldLCBsZW4gKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWFpbiggYXJnYywgYXJndiApOworfQorCisjZW5kaWYgIC8qIGRlZmluZWQoX1dJTjMyX1dDRSkgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L0NNYWtlTGlzdHMudHh0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliOGI1YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzAgQEAKK3NldChsaWJzCisgICAgbWJlZHRscworKQorCitpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorICAgIHNldChsaWJzICR7bGlic30gcGtjczExLWhlbHBlcikKK2VuZGlmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCisKK2lmKEVOQUJMRV9aTElCX1NVUFBPUlQpCisgICAgc2V0KGxpYnMgJHtsaWJzfSAke1pMSUJfTElCUkFSSUVTfSkKK2VuZGlmKEVOQUJMRV9aTElCX1NVUFBPUlQpCisKK2FkZF9leGVjdXRhYmxlKGNlcnRfYXBwIGNlcnRfYXBwLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoY2VydF9hcHAgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoY3JsX2FwcCBjcmxfYXBwLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoY3JsX2FwcCAke2xpYnN9KQorCithZGRfZXhlY3V0YWJsZShyZXFfYXBwIHJlcV9hcHAuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhyZXFfYXBwICR7bGlic30pCisKK2FkZF9leGVjdXRhYmxlKGNlcnRfcmVxIGNlcnRfcmVxLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoY2VydF9yZXEgJHtsaWJzfSkKKworYWRkX2V4ZWN1dGFibGUoY2VydF93cml0ZSBjZXJ0X3dyaXRlLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoY2VydF93cml0ZSAke2xpYnN9KQorCitpbnN0YWxsKFRBUkdFVFMgY2VydF9hcHAgY3JsX2FwcCByZXFfYXBwIGNlcnRfcmVxIGNlcnRfd3JpdGUKKyAgICAgICAgREVTVElOQVRJT04gImJpbiIKKyAgICAgICAgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9XUklURSBPV05FUl9FWEVDVVRFIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURSBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9jZXJ0X2FwcC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF9hcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODkzY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF9hcHAuYwpAQCAtMCwwICsxLDQ5NSBAQAorLyoKKyAqICBDZXJ0aWZpY2F0ZSByZWFkaW5nIGFwcGxpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIG1iZWR0bHNfdGltZSAgICAgICB0aW1lCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgICB0aW1lX3QKKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0JJR05VTV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1NTTF9UTFNfQykgfHwgIWRlZmluZWQoTUJFRFRMU19TU0xfQ0xJX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX05FVF9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCAgICAgICAgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCJNQkVEVExTX0JJR05VTV9DIGFuZC9vciBNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgIgorICAgICAgICAgICAiTUJFRFRMU19TU0xfVExTX0MgYW5kL29yIE1CRURUTFNfU1NMX0NMSV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX05FVF9DIGFuZC9vciBNQkVEVExTX1JTQV9DIGFuZC9vciAiCisgICAgICAgICAgICJNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfQ1RSX0RSQkdfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL25ldF9zb2NrZXRzLmgiCisjaW5jbHVkZSAibWJlZHRscy9zc2wuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIE1PREVfTk9ORSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTU9ERV9GSUxFICAgICAgICAgICAgICAgMQorI2RlZmluZSBNT0RFX1NTTCAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgREZMX01PREUgICAgICAgICAgICAgICAgTU9ERV9OT05FCisjZGVmaW5lIERGTF9GSUxFTkFNRSAgICAgICAgICAgICJjZXJ0LmNydCIKKyNkZWZpbmUgREZMX0NBX0ZJTEUgICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NSTF9GSUxFICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0NBX1BBVEggICAgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX1NFUlZFUl9OQU1FICAgICAgICAgImxvY2FsaG9zdCIKKyNkZWZpbmUgREZMX1NFUlZFUl9QT1JUICAgICAgICAgIjQ0MzMiCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKyNkZWZpbmUgREZMX1BFUk1JU1NJVkUgICAgICAgICAgMAorCisjZGVmaW5lIFVTQUdFX0lPIFwKKyAgICAiICAgIGNhX2ZpbGU9JSVzICAgICAgICAgIFRoZSBzaW5nbGUgZmlsZSBjb250YWluaW5nIHRoZSB0b3AtbGV2ZWwgQ0EocykgeW91IGZ1bGx5IHRydXN0XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAobm9uZSlcbiIgXAorICAgICIgICAgY3JsX2ZpbGU9JSVzICAgICAgICAgVGhlIHNpbmdsZSBDUkwgZmlsZSB5b3Ugd2FudCB0byB1c2VcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIlwiIChub25lKVxuIiBcCisgICAgIiAgICBjYV9wYXRoPSUlcyAgICAgICAgICBUaGUgcGF0aCBjb250YWluaW5nIHRoZSB0b3AtbGV2ZWwgQ0EocykgeW91IGZ1bGx5IHRydXN0XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJcIiAobm9uZSkgKG92ZXJyaWRlcyBjYV9maWxlKVxuIgorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IGNlcnRfYXBwIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBtb2RlPWZpbGV8c3NsICAgICAgIGRlZmF1bHQ6IG5vbmVcbiIgICAgICAgICAgIFwKKyAgICAiICAgIGZpbGVuYW1lPSUlcyAgICAgICAgIGRlZmF1bHQ6IGNlcnQuY3J0XG4iICAgICAgXAorICAgIFVTQUdFX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBzZXJ2ZXJfbmFtZT0lJXMgICAgICBkZWZhdWx0OiBsb2NhbGhvc3RcbiIgICAgIFwKKyAgICAiICAgIHNlcnZlcl9wb3J0PSUlZCAgICAgIGRlZmF1bHQ6IDQ0MzNcbiIgICAgICAgICAgXAorICAgICIgICAgZGVidWdfbGV2ZWw9JSVkICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iICBcCisgICAgIiAgICBwZXJtaXNzaXZlPSUlZCAgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgIFwKKyAgICAiXG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGludCBtb2RlOyAgICAgICAgICAgICAgICAgICAvKiB0aGUgbW9kZSB0byBydW4gdGhlIGFwcGxpY2F0aW9uIGluICAgKi8KKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsgICAgICAgLyogZmlsZW5hbWUgb2YgdGhlIGNlcnRpZmljYXRlIGZpbGUgICAgICovCisgICAgY29uc3QgY2hhciAqY2FfZmlsZTsgICAgICAgIC8qIHRoZSBmaWxlIHdpdGggdGhlIENBIGNlcnRpZmljYXRlKHMpICAqLworICAgIGNvbnN0IGNoYXIgKmNybF9maWxlOyAgICAgICAvKiB0aGUgZmlsZSB3aXRoIHRoZSBDUkwgdG8gdXNlICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpjYV9wYXRoOyAgICAgICAgLyogdGhlIHBhdGggd2l0aCB0aGUgQ0EgY2VydGlmaWNhdGUocykgcmVzaWRlICovCisgICAgY29uc3QgY2hhciAqc2VydmVyX25hbWU7ICAgIC8qIGhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXIgKGNsaWVudCBvbmx5KSAqLworICAgIGNvbnN0IGNoYXIgKnNlcnZlcl9wb3J0OyAgICAvKiBwb3J0IG9uIHdoaWNoIHRoZSBzc2wgc2VydmljZSBydW5zICAgKi8KKyAgICBpbnQgZGVidWdfbGV2ZWw7ICAgICAgICAgICAgLyogbGV2ZWwgb2YgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHBlcm1pc3NpdmU7ICAgICAgICAgICAgIC8qIHBlcm1pc3NpdmUgcGFyc2luZyAgICAgICAgICAgICAgICAgICAqLworfSBvcHQ7CisKK3N0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgKQoreworICAgICgodm9pZCkgbGV2ZWwpOworCisgICAgbWJlZHRsc19mcHJpbnRmKCAoRklMRSAqKSBjdHgsICIlczolMDRkOiAlcyIsIGZpbGUsIGxpbmUsIHN0ciApOworICAgIGZmbHVzaCggIChGSUxFICopIGN0eCAgKTsKK30KKworc3RhdGljIGludCBteV92ZXJpZnkoIHZvaWQgKmRhdGEsIG1iZWR0bHNfeDUwOV9jcnQgKmNydCwgaW50IGRlcHRoLCB1aW50MzJfdCAqZmxhZ3MgKQoreworICAgIGNoYXIgYnVmWzEwMjRdOworICAgICgodm9pZCkgZGF0YSk7CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuVmVyaWZ5IHJlcXVlc3RlZCBmb3IgKERlcHRoICVkKTpcbiIsIGRlcHRoICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbmZvKCBidWYsIHNpemVvZiggYnVmICkgLSAxLCAiIiwgY3J0ICk7CisgICAgbWJlZHRsc19wcmludGYoICIlcyIsIGJ1ZiApOworCisgICAgaWYgKCAoICpmbGFncyApID09IDAgKQorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgVGhpcyBjZXJ0aWZpY2F0ZSBoYXMgbm8gZmxhZ3NcbiIgKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCBidWYsIHNpemVvZiggYnVmICksICIgICEgIiwgKmZsYWdzICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIGJ1ZiApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19uZXRfY29udGV4dCBzZXJ2ZXJfZmQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgbWJlZHRsc194NTA5X2NydCBjYWNlcnQ7CisgICAgbWJlZHRsc194NTA5X2NybCBjYWNybDsKKyAgICBpbnQgaSwgajsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICBpbnQgdmVyaWZ5ID0gMDsKKyAgICBjaGFyICpwLCAqcTsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImNlcnRfYXBwIjsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc19uZXRfaW5pdCggJnNlcnZlcl9mZCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNhY2VydCApOworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DKQorICAgIG1iZWR0bHNfeDUwOV9jcmxfaW5pdCggJmNhY3JsICk7CisjZWxzZQorICAgIC8qIFplcm9pemUgc3RydWN0dXJlIGFzIENSTCBwYXJzaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdlIGhhdmUgdG8gcGFzcworICAgICAgIGl0IHRvIHRoZSB2ZXJpZnkgZnVuY3Rpb24gKi8KKyAgICBtZW1zZXQoICZjYWNybCwgMCwgc2l6ZW9mKG1iZWR0bHNfeDUwOV9jcmwpICk7CisjZW5kaWYKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIHJldCA9IDI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQubW9kZSAgICAgICAgICAgICAgICA9IERGTF9NT0RFOworICAgIG9wdC5maWxlbmFtZSAgICAgICAgICAgID0gREZMX0ZJTEVOQU1FOworICAgIG9wdC5jYV9maWxlICAgICAgICAgICAgID0gREZMX0NBX0ZJTEU7CisgICAgb3B0LmNybF9maWxlICAgICAgICAgICAgPSBERkxfQ1JMX0ZJTEU7CisgICAgb3B0LmNhX3BhdGggICAgICAgICAgICAgPSBERkxfQ0FfUEFUSDsKKyAgICBvcHQuc2VydmVyX25hbWUgICAgICAgICA9IERGTF9TRVJWRVJfTkFNRTsKKyAgICBvcHQuc2VydmVyX3BvcnQgICAgICAgICA9IERGTF9TRVJWRVJfUE9SVDsKKyAgICBvcHQuZGVidWdfbGV2ZWwgICAgICAgICA9IERGTF9ERUJVR19MRVZFTDsKKyAgICBvcHQucGVybWlzc2l2ZSAgICAgICAgICA9IERGTF9QRVJNSVNTSVZFOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworICAgICAgICBwID0gYXJndltpXTsKKyAgICAgICAgaWYoICggcSA9IHN0cmNociggcCwgJz0nICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgICpxKysgPSAnXDAnOworCisgICAgICAgIGZvciggaiA9IDA7IHAgKyBqIDwgcTsgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGFyZ3ZbaV1bal0gPj0gJ0EnICYmIGFyZ3ZbaV1bal0gPD0gJ1onICkKKyAgICAgICAgICAgICAgICBhcmd2W2ldW2pdIHw9IDB4MjA7CisgICAgICAgIH0KKworICAgICAgICBpZiggc3RyY21wKCBwLCAibW9kZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgImZpbGUiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1vZGUgPSBNT0RFX0ZJTEU7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJzc2wiICkgPT0gMCApCisgICAgICAgICAgICAgICAgb3B0Lm1vZGUgPSBNT0RFX1NTTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImZpbGVuYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmZpbGVuYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY2FfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5jYV9maWxlID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiY3JsX2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuY3JsX2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJjYV9wYXRoIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmNhX3BhdGggPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzZXJ2ZXJfbmFtZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zZXJ2ZXJfbmFtZSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlcnZlcl9wb3J0IiApID09IDAgKQorICAgICAgICAgICAgb3B0LnNlcnZlcl9wb3J0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiZGVidWdfbGV2ZWwiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5kZWJ1Z19sZXZlbCA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuZGVidWdfbGV2ZWwgPCAwIHx8IG9wdC5kZWJ1Z19sZXZlbCA+IDY1NTM1ICkKKyAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInBlcm1pc3NpdmUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5wZXJtaXNzaXZlID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5wZXJtaXNzaXZlIDwgMCB8fCBvcHQucGVybWlzc2l2ZSA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUgdHJ1c3RlZCBDQQorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIExvYWRpbmcgdGhlIENBIHJvb3QgY2VydGlmaWNhdGUgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggc3RybGVuKCBvcHQuY2FfcGF0aCApICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCggJmNhY2VydCwgb3B0LmNhX3BhdGggKTsKKyAgICAgICAgdmVyaWZ5ID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiggc3RybGVuKCBvcHQuY2FfZmlsZSApICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNhY2VydCwgb3B0LmNhX2ZpbGUgKTsKKyAgICAgICAgdmVyaWZ5ID0gMTsKKyAgICB9CisKKyAgICBpZiggcmV0IDwgMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZSByZXR1cm5lZCAtMHgleFxuXG4iLCAtcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBvayAoJWQgc2tpcHBlZClcbiIsIHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpCisgICAgaWYoIHN0cmxlbiggb3B0LmNybF9maWxlICkgKQorICAgIHsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCAmY2FjcmwsIG9wdC5jcmxfZmlsZSApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlIHJldHVybmVkIC0weCV4XG5cbiIsIC1yZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHZlcmlmeSA9IDE7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggb3B0Lm1vZGUgPT0gTU9ERV9GSUxFICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcnQgY3J0OworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0ICpjdXIgPSAmY3J0OworICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKworICAgICAgICAvKgorICAgICAgICAgKiAxLjEuIExvYWQgdGhlIGNlcnRpZmljYXRlKHMpCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIGNlcnRpZmljYXRlKHMpIC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIG9wdC5maWxlbmFtZSApOworCisgICAgICAgIGlmKCByZXQgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoIG9wdC5wZXJtaXNzaXZlID09IDAgJiYgcmV0ID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlIGZhaWxlZCB0byBwYXJzZSAlZCBjZXJ0aWZpY2F0ZXNcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4yIFByaW50IHRoZSBjZXJ0aWZpY2F0ZShzKQorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUoIGN1ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVlciBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfaW5mbyggKGNoYXIgKikgYnVmLCBzaXplb2YoIGJ1ZiApIC0gMSwgIiAgICAgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgKTsKKyAgICAgICAgICAgIGlmKCByZXQgPT0gLTEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3J0X2luZm8gcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKworICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gMDsKKworICAgICAgICAvKgorICAgICAgICAgKiAxLjMgVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgKi8KKyAgICAgICAgaWYoIHZlcmlmeSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFZlcmlmeWluZyBYLjUwOSBjZXJ0aWZpY2F0ZS4uLiIgKTsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5X2NydF92ZXJpZnkoICZjcnQsICZjYWNlcnQsICZjYWNybCwgTlVMTCwgJmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV92ZXJpZnksIE5VTEwgKSApICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYXIgdnJmeV9idWZbNTEyXTsKKworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuIiApOworCisgICAgICAgICAgICAgICAgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfaW5mbyggdnJmeV9idWYsIHNpemVvZiggdnJmeV9idWYgKSwgIiAgISAiLCBmbGFncyApOworCisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIlc1xuIiwgdnJmeV9idWYgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7CisgICAgfQorICAgIGVsc2UgaWYoIG9wdC5tb2RlID09IE1PREVfU1NMICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIDEuIEluaXRpYWxpemUgdGhlIFJORyBhbmQgdGhlIHNlc3Npb24gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBtYmVkdGxzX2VudHJvcHlfaW5pdCggJmVudHJvcHkgKTsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCBwZXJzICkgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWRcbiIsIHJldCApOworICAgICAgICAgICAgZ290byBzc2xfZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKKyAgICAgICAgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKCBvcHQuZGVidWdfbGV2ZWwgKTsKKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqIDIuIFN0YXJ0IHRoZSBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTU0wgY29ubmVjdGlvbiB0byB0Y3AvJXMvJXMuLi4iLCBvcHQuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5zZXJ2ZXJfcG9ydCApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbmV0X2Nvbm5lY3QoICZzZXJ2ZXJfZmQsIG9wdC5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5zZXJ2ZXJfcG9ydCwgTUJFRFRMU19ORVRfUFJPVE9fVENQICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19uZXRfY29ubmVjdCByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gc3NsX2V4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiAzLiBTZXR1cCBzdHVmZgorICAgICAgICAgKi8KKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0lTX0NMSUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9QUkVTRVRfREVGQVVMVCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZpZ19kZWZhdWx0cyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCB2ZXJpZnkgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCAmY29uZiwgTUJFRFRMU19TU0xfVkVSSUZZX1JFUVVJUkVEICk7CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCAmY29uZiwgJmNhY2VydCwgTlVMTCApOworICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZl92ZXJpZnkoICZjb25mLCBteV92ZXJpZnksIE5VTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2F1dGhtb2RlKCAmY29uZiwgTUJFRFRMU19TU0xfVkVSSUZZX05PTkUgKTsKKworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3JuZyggJmNvbmYsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBteV9kZWJ1Zywgc3Rkb3V0ICk7CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfc2V0dXAgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHNzbF9leGl0OworICAgICAgICB9CisKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCAmc3NsLCBvcHQuc2VydmVyX25hbWUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIHNzbF9leGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19zc2xfc2V0X2JpbyggJnNzbCwgJnNlcnZlcl9mZCwgbWJlZHRsc19uZXRfc2VuZCwgbWJlZHRsc19uZXRfcmVjdiwgTlVMTCApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDQuIEhhbmRzaGFrZQorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUoICggcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCAmc3NsICkgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEICYmIHJldCAhPSBNQkVEVExTX0VSUl9TU0xfV0FOVF9XUklURSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICAgICAgICAgIGdvdG8gc3NsX2V4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgICAgIC8qCisgICAgICAgICAqIDUuIFByaW50IHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gUGVlciBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9pbmZvKCAoY2hhciAqKSBidWYsIHNpemVvZiggYnVmICkgLSAxLCAiICAgICAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLnNlc3Npb24tPnBlZXJfY2VydCApOworICAgICAgICBpZiggcmV0ID09IC0xICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcnRfaW5mbyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gc3NsX2V4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKworICAgICAgICBtYmVkdGxzX3NzbF9jbG9zZV9ub3RpZnkoICZzc2wgKTsKKworc3NsX2V4aXQ6CisgICAgICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZ290byB1c2FnZTsKKworZXhpdDoKKworICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZzZXJ2ZXJfZmQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYWNlcnQgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoICZjYWNybCApOworI2VuZGlmCisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgaWYoIHJldCA8IDAgKQorICAgICAgICByZXQgPSAxOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfRU5UUk9QWV9DICYmIE1CRURUTFNfU1NMX1RMU19DICYmCisgICAgICAgICAgTUJFRFRMU19TU0xfQ0xJX0MgJiYgTUJFRFRMU19ORVRfQyAmJiBNQkVEVExTX1JTQV9DICYmCisgICAgICAgICAgTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gJiYgTUJFRFRMU19DVFJfRFJCR19DICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9jZXJ0X3JlcS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF9yZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRmMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF9yZXEuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqICBDZXJ0aWZpY2F0ZSByZXF1ZXN0IGdlbmVyYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19wcmludGYgICAgIHByaW50ZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pIHx8ICBcCisgICAgIWRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSB8fCBcCisgICAgIWRlZmluZWQoTUJFRFRMU19FTlRST1BZX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoICJNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgYW5kL29yIE1CRURUTFNfRlNfSU8gYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX1BLX1BBUlNFX0MgYW5kL29yIE1CRURUTFNfU0hBMjU2X0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX0VOVFJPUFlfQyBhbmQvb3IgTUJFRFRMU19DVFJfRFJCR19DICIKKyAgICAgICAgICAgICJub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jc3IuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBERkxfRklMRU5BTUUgICAgICAgICAgICAia2V5ZmlsZS5rZXkiCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKyNkZWZpbmUgREZMX09VVFBVVF9GSUxFTkFNRSAgICAgImNlcnQucmVxIgorI2RlZmluZSBERkxfU1VCSkVDVF9OQU1FICAgICAgICAiQ049Q2VydCxPPW1iZWQgVExTLEM9VUsiCisjZGVmaW5lIERGTF9LRVlfVVNBR0UgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX05TX0NFUlRfVFlQRSAgICAgICAgMAorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IGNlcnRfcmVxIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICBmaWxlbmFtZT0lJXMgICAgICAgICBkZWZhdWx0OiBrZXlmaWxlLmtleVxuIiAgIFwKKyAgICAiICAgIGRlYnVnX2xldmVsPSUlZCAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgXAorICAgICIgICAgb3V0cHV0X2ZpbGU9JSVzICAgICAgZGVmYXVsdDogY2VydC5yZXFcbiIgICAgICBcCisgICAgIiAgICBzdWJqZWN0X25hbWU9JSVzICAgICBkZWZhdWx0OiBDTj1DZXJ0LE89bWJlZCBUTFMsQz1VS1xuIiAgIFwKKyAgICAiICAgIGtleV91c2FnZT0lJXMgICAgICAgIGRlZmF1bHQ6IChlbXB0eSlcbiIgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQtbGlzdCBvZiB2YWx1ZXM6XG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRhbF9zaWduYXR1cmVcbiIgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBub25fcmVwdWRpYXRpb25cbiIgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9lbmNpcGhlcm1lbnRcbiIgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9lbmNpcGhlcm1lbnRcbiIgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfYWdyZWVtZW50XG4iICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jZXJ0X3NpZ25cbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBjcmxfc2lnblxuIiAgICAgICAgICAgICAgXAorICAgICIgICAgbnNfY2VydF90eXBlPSUlcyAgICAgZGVmYXVsdDogKGVtcHR5KVxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hLXNlcGFyYXRlZC1saXN0IG9mIHZhbHVlczpcbiIgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2xpZW50XG4iICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXJ2ZXJcbiIgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxcbiIgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rfc2lnbmluZ1xuIiAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jYVxuIiAgICAgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxfY2FcbiIgICAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rfc2lnbmluZ19jYVxuIiAgICAgXAorICAgICJcbiIKKworLyoKKyAqIGdsb2JhbCBvcHRpb25zCisgKi8KK3N0cnVjdCBvcHRpb25zCit7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7ICAgICAgIC8qIGZpbGVuYW1lIG9mIHRoZSBrZXkgZmlsZSAgICAgICAgICAgICAqLworICAgIGludCBkZWJ1Z19sZXZlbDsgICAgICAgICAgICAvKiBsZXZlbCBvZiBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpvdXRwdXRfZmlsZTsgICAgLyogd2hlcmUgdG8gc3RvcmUgdGhlIGNvbnN0cnVjdGVkIGtleSBmaWxlICAqLworICAgIGNvbnN0IGNoYXIgKnN1YmplY3RfbmFtZTsgICAvKiBzdWJqZWN0IG5hbWUgZm9yIGNlcnRpZmljYXRlIHJlcXVlc3QgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGtleV91c2FnZTsgICAgLyoga2V5IHVzYWdlIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBuc19jZXJ0X3R5cGU7IC8qIE5TIGNlcnQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBvcHQ7CisKK2ludCB3cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgKnJlcSwgY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfYnVmWzQwOTZdOworICAgIHNpemVfdCBsZW4gPSAwOworCisgICAgbWVtc2V0KCBvdXRwdXRfYnVmLCAwLCA0MDk2ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3NyX3BlbSggcmVxLCBvdXRwdXRfYnVmLCA0MDk2LCBmX3JuZywgcF9ybmcgKSApIDwgMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisKKyAgICBsZW4gPSBzdHJsZW4oIChjaGFyICopIG91dHB1dF9idWYgKTsKKworICAgIGlmKCAoIGYgPSBmb3Blbiggb3V0cHV0X2ZpbGUsICJ3IiApICkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCBmd3JpdGUoIG91dHB1dF9idWYsIDEsIGxlbiwgZiApICE9IGxlbiApCisgICAgeworICAgICAgICBmY2xvc2UoIGYgKTsKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKworICAgIGZjbG9zZSggZiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQga2V5OworICAgIGNoYXIgYnVmWzEwMjRdOworICAgIGludCBpOworICAgIGNoYXIgKnAsICpxLCAqcjsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgcmVxOworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGVudHJvcHk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0cl9kcmJnOworICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAiY3NyIGV4YW1wbGUgYXBwIjsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQoICZyZXEgKTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyggJnJlcSwgTUJFRFRMU19NRF9TSEEyNTYgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZrZXkgKTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICByZXQgPSAxOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0LmZpbGVuYW1lICAgICAgICAgICAgPSBERkxfRklMRU5BTUU7CisgICAgb3B0LmRlYnVnX2xldmVsICAgICAgICAgPSBERkxfREVCVUdfTEVWRUw7CisgICAgb3B0Lm91dHB1dF9maWxlICAgICAgICAgPSBERkxfT1VUUFVUX0ZJTEVOQU1FOworICAgIG9wdC5zdWJqZWN0X25hbWUgICAgICAgID0gREZMX1NVQkpFQ1RfTkFNRTsKKyAgICBvcHQua2V5X3VzYWdlICAgICAgICAgICA9IERGTF9LRVlfVVNBR0U7CisgICAgb3B0Lm5zX2NlcnRfdHlwZSAgICAgICAgPSBERkxfTlNfQ0VSVF9UWVBFOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworCisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgImZpbGVuYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmZpbGVuYW1lID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAib3V0cHV0X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQub3V0cHV0X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJkZWJ1Z19sZXZlbCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LmRlYnVnX2xldmVsID0gYXRvaSggcSApOworICAgICAgICAgICAgaWYoIG9wdC5kZWJ1Z19sZXZlbCA8IDAgfHwgb3B0LmRlYnVnX2xldmVsID4gNjU1MzUgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic3ViamVjdF9uYW1lIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuc3ViamVjdF9uYW1lID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJrZXlfdXNhZ2UiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlKCBxICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAoIHIgPSBzdHJjaHIoIHEsICcsJyApICkgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgICAgICpyKysgPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgImRpZ2l0YWxfc2lnbmF0dXJlIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJub25fcmVwdWRpYXRpb24iICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX05PTl9SRVBVRElBVElPTjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJrZXlfZW5jaXBoZXJtZW50IiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImRhdGFfZW5jaXBoZXJtZW50IiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9EQVRBX0VOQ0lQSEVSTUVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJrZXlfYWdyZWVtZW50IiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9LRVlfQUdSRUVNRU5UOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImtleV9jZXJ0X3NpZ24iICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX0tFWV9DRVJUX1NJR047CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiY3JsX3NpZ24iICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5rZXlfdXNhZ2UgfD0gTUJFRFRMU19YNTA5X0tVX0NSTF9TSUdOOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKworICAgICAgICAgICAgICAgIHEgPSByOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm5zX2NlcnRfdHlwZSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUoIHEgIT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICggciA9IHN0cmNociggcSwgJywnICkgKSAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICAgICAgKnIrKyA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBpZiggc3RyY21wKCBxLCAic3NsX2NsaWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DTElFTlQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAic3NsX3NlcnZlciIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZW1haWwiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJvYmplY3Rfc2lnbmluZyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInNzbF9jYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DQTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJlbWFpbF9jYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX0VNQUlMX0NBOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIm9iamVjdF9zaWduaW5nX2NhIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkdfQ0E7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOworCisgICAgICAgICAgICAgICAgcSA9IHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICBpZiggb3B0LmtleV91c2FnZSApCisgICAgICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5X3VzYWdlKCAmcmVxLCBvcHQua2V5X3VzYWdlICk7CisKKyAgICBpZiggb3B0Lm5zX2NlcnRfdHlwZSApCisgICAgICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlKCAmcmVxLCBvcHQubnNfY2VydF90eXBlICk7CisKKyAgICAvKgorICAgICAqIDAuIFNlZWQgdGhlIFBSTkcKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWQiLCByZXQgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuMC4gQ2hlY2sgdGhlIHN1YmplY3QgbmFtZSBmb3IgdmFsaWRpdHkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDaGVja2luZyBzdWJqZWN0IG5hbWUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfc3ViamVjdF9uYW1lKCAmcmVxLCBvcHQuc3ViamVjdF9uYW1lICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZSByZXR1cm5lZCAlZCIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSBrZXkKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBwcml2YXRlIGtleSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmtleSwgb3B0LmZpbGVuYW1lLCBOVUxMICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSByZXR1cm5lZCAlZCIsIHJldCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9rZXkoICZyZXEsICZrZXkgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvKgorICAgICAqIDEuMi4gV3JpdGluZyB0aGUgcmVxdWVzdAorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIFdyaXRpbmcgdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICBpZiggKCByZXQgPSB3cml0ZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0KCAmcmVxLCBvcHQub3V0cHV0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sICZjdHJfZHJiZyApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgd3JpdGVfY2VydGlmY2F0ZV9yZXF1ZXN0ICVkIiwgcmV0ICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCitleGl0OgorCisgICAgaWYoIHJldCAhPSAwICYmIHJldCAhPSAxKQorICAgIHsKKyNpZmRlZiBNQkVEVExTX0VSUk9SX0MKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgLSAlc1xuIiwgYnVmICk7CisjZWxzZQorICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgIH0KKworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlKCAmcmVxICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1g1MDlfQ1NSX1dSSVRFX0MgJiYgTUJFRFRMU19QS19QQVJTRV9DICYmIE1CRURUTFNfRlNfSU8gJiYKKyAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX0NUUl9EUkJHX0MgJiYgTUJFRFRMU19QRU1fV1JJVEVfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTVmMWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlLmMKQEAgLTAsMCArMSw2NjggQEAKKy8qCisgKiAgQ2VydGlmaWNhdGUgZ2VuZXJhdGlvbiBhbmQgc2lnbmluZworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BMQVRGT1JNX0MpCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2RlZmluZSBtYmVkdGxzX3ByaW50ZiAgICAgcHJpbnRmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfV1JJVEVfQykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQykgfHwgIWRlZmluZWQoTUJFRFRMU19GU19JTykgfHwgXAorICAgICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX0NUUl9EUkJHX0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpIHx8IFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1BFTV9XUklURV9DKQoraW50IG1haW4oIHZvaWQgKQoreworICAgIG1iZWR0bHNfcHJpbnRmKCAiTUJFRFRMU19YNTA5X0NSVF9XUklURV9DIGFuZC9vciBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgYW5kL29yICIKKyAgICAgICAgICAgICJNQkVEVExTX0ZTX0lPIGFuZC9vciBNQkVEVExTX1NIQTI1Nl9DIGFuZC9vciAiCisgICAgICAgICAgICAiTUJFRFRMU19FTlRST1BZX0MgYW5kL29yIE1CRURUTFNfQ1RSX0RSQkdfQyBhbmQvb3IgIgorICAgICAgICAgICAgIk1CRURUTFNfRVJST1JfQyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcnQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3NyLmgiCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9jdHJfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQykKKyNkZWZpbmUgVVNBR0VfQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgICByZXF1ZXN0X2ZpbGU9JSVzICAgICBkZWZhdWx0OiAoZW1wdHkpXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBJZiByZXF1ZXN0X2ZpbGUgaXMgc3BlY2lmaWVkLCBzdWJqZWN0X2tleSxcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdF9wd2QgYW5kIHN1YmplY3RfbmFtZSBhcmUgaWdub3JlZCFcbiIKKyNlbHNlCisjZGVmaW5lIFVTQUdFX0NTUiAiIgorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyAqLworCisjZGVmaW5lIERGTF9JU1NVRVJfQ1JUICAgICAgICAgICIiCisjZGVmaW5lIERGTF9SRVFVRVNUX0ZJTEUgICAgICAgICIiCisjZGVmaW5lIERGTF9TVUJKRUNUX0tFWSAgICAgICAgICJzdWJqZWN0LmtleSIKKyNkZWZpbmUgREZMX0lTU1VFUl9LRVkgICAgICAgICAgImNhLmtleSIKKyNkZWZpbmUgREZMX1NVQkpFQ1RfUFdEICAgICAgICAgIiIKKyNkZWZpbmUgREZMX0lTU1VFUl9QV0QgICAgICAgICAgIiIKKyNkZWZpbmUgREZMX09VVFBVVF9GSUxFTkFNRSAgICAgImNlcnQuY3J0IgorI2RlZmluZSBERkxfU1VCSkVDVF9OQU1FICAgICAgICAiQ049Q2VydCxPPW1iZWQgVExTLEM9VUsiCisjZGVmaW5lIERGTF9JU1NVRVJfTkFNRSAgICAgICAgICJDTj1DQSxPPW1iZWQgVExTLEM9VUsiCisjZGVmaW5lIERGTF9OT1RfQkVGT1JFICAgICAgICAgICIyMDAxMDEwMTAwMDAwMCIKKyNkZWZpbmUgREZMX05PVF9BRlRFUiAgICAgICAgICAgIjIwMzAxMjMxMjM1OTU5IgorI2RlZmluZSBERkxfU0VSSUFMICAgICAgICAgICAgICAiMSIKKyNkZWZpbmUgREZMX1NFTEZTSUdOICAgICAgICAgICAgMAorI2RlZmluZSBERkxfSVNfQ0EgICAgICAgICAgICAgICAwCisjZGVmaW5lIERGTF9NQVhfUEFUSExFTiAgICAgICAgIC0xCisjZGVmaW5lIERGTF9LRVlfVVNBR0UgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX05TX0NFUlRfVFlQRSAgICAgICAgMAorCisjZGVmaW5lIFVTQUdFIFwKKyAgICAiXG4gdXNhZ2U6IGNlcnRfd3JpdGUgcGFyYW09PD4uLi5cbiIgICAgICAgICAgICAgICAgXAorICAgICJcbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnM6XG4iICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIHN1YmplY3Rfa2V5PSUlcyAgICAgIGRlZmF1bHQ6IHN1YmplY3Qua2V5XG4iICAgXAorICAgICIgICAgc3ViamVjdF9wd2Q9JSVzICAgICAgZGVmYXVsdDogKGVtcHR5KVxuIiAgICAgICBcCisgICAgIiAgICBzdWJqZWN0X25hbWU9JSVzICAgICBkZWZhdWx0OiBDTj1DZXJ0LE89bWJlZCBUTFMsQz1VS1xuIiAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgaXNzdWVyX2NydD0lJXMgICAgICAgZGVmYXVsdDogKGVtcHR5KVxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIElmIGlzc3Vlcl9jcnQgaXMgc3BlY2lmaWVkLCBpc3N1ZXJfbmFtZSBpc1xuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVkIVxuIiAgICAgICAgICAgICAgICBcCisgICAgIiAgICBpc3N1ZXJfbmFtZT0lJXMgICAgICBkZWZhdWx0OiBDTj1DQSxPPW1iZWQgVExTLEM9VUtcbiIgICAgIFwKKyAgICAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgc2VsZnNpZ249JSVkICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpXG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIElmIHNlbGZzaWduIGlzIGVuYWJsZWQsIGlzc3Vlcl9uYW1lIGFuZFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlcl9rZXkgYXJlIHJlcXVpcmVkIChpc3N1ZXJfY3J0IGFuZFxuIiBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3RfKiBhcmUgaWdub3JlZFxuIiAgIFwKKyAgICAiICAgIGlzc3Vlcl9rZXk9JSVzICAgICAgIGRlZmF1bHQ6IGNhLmtleVxuIiAgICAgICAgXAorICAgICIgICAgaXNzdWVyX3B3ZD0lJXMgICAgICAgZGVmYXVsdDogKGVtcHR5KVxuIiAgICAgICBcCisgICAgIiAgICBvdXRwdXRfZmlsZT0lJXMgICAgICBkZWZhdWx0OiBjZXJ0LmNydFxuIiAgICAgIFwKKyAgICAiICAgIHNlcmlhbD0lJXMgICAgICAgICAgIGRlZmF1bHQ6IDFcbiIgICAgICAgICAgICAgXAorICAgICIgICAgbm90X2JlZm9yZT0lJXMgICAgICAgZGVmYXVsdDogMjAwMTAxMDEwMDAwMDBcbiJcCisgICAgIiAgICBub3RfYWZ0ZXI9JSVzICAgICAgICBkZWZhdWx0OiAyMDMwMTIzMTIzNTk1OVxuIlwKKyAgICAiICAgIGlzX2NhPSUlZCAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgXAorICAgICIgICAgbWF4X3BhdGhsZW49JSVkICAgICAgZGVmYXVsdDogLTEgKG5vbmUpXG4iICAgICBcCisgICAgIiAgICBrZXlfdXNhZ2U9JSVzICAgICAgICBkZWZhdWx0OiAoZW1wdHkpXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWEtc2VwYXJhdGVkLWxpc3Qgb2YgdmFsdWVzOlxuIiAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0YWxfc2lnbmF0dXJlXG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uX3JlcHVkaWF0aW9uXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZW5jaXBoZXJtZW50XG4iICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZW5jaXBoZXJtZW50XG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2FncmVlbWVudFxuIiAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfY2VydF9zaWduXG4iICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgY3JsX3NpZ25cbiIgICAgICAgICAgICAgIFwKKyAgICAiICAgIG5zX2NlcnRfdHlwZT0lJXMgICAgIGRlZmF1bHQ6IChlbXB0eSlcbiIgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBDb21tYS1zZXBhcmF0ZWQtbGlzdCBvZiB2YWx1ZXM6XG4iICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudFxuIiAgICAgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc2VydmVyXG4iICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsXG4iICAgICAgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NpZ25pbmdcbiIgICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2FcbiIgICAgICAgICAgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsX2NhXG4iICAgICAgICAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3NpZ25pbmdfY2FcbiIgICAgIFwKKyAgICAiXG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKmlzc3Vlcl9jcnQ7ICAgICAvKiBmaWxlbmFtZSBvZiB0aGUgaXNzdWVyIGNlcnRpZmljYXRlICAgKi8KKyAgICBjb25zdCBjaGFyICpyZXF1ZXN0X2ZpbGU7ICAgLyogZmlsZW5hbWUgb2YgdGhlIGNlcnRpZmljYXRlIHJlcXVlc3QgICovCisgICAgY29uc3QgY2hhciAqc3ViamVjdF9rZXk7ICAgIC8qIGZpbGVuYW1lIG9mIHRoZSBzdWJqZWN0IGtleSBmaWxlICAgICAqLworICAgIGNvbnN0IGNoYXIgKmlzc3Vlcl9rZXk7ICAgICAvKiBmaWxlbmFtZSBvZiB0aGUgaXNzdWVyIGtleSBmaWxlICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpzdWJqZWN0X3B3ZDsgICAgLyogcGFzc3dvcmQgZm9yIHRoZSBzdWJqZWN0IGtleSBmaWxlICAgICovCisgICAgY29uc3QgY2hhciAqaXNzdWVyX3B3ZDsgICAgIC8qIHBhc3N3b3JkIGZvciB0aGUgaXNzdWVyIGtleSBmaWxlICAgICAqLworICAgIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlOyAgICAvKiB3aGVyZSB0byBzdG9yZSB0aGUgY29uc3RydWN0ZWQga2V5IGZpbGUgICovCisgICAgY29uc3QgY2hhciAqc3ViamVjdF9uYW1lOyAgIC8qIHN1YmplY3QgbmFtZSBmb3IgY2VydGlmaWNhdGUgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKmlzc3Vlcl9uYW1lOyAgICAvKiBpc3N1ZXIgbmFtZSBmb3IgY2VydGlmaWNhdGUgICAgICAgICAgKi8KKyAgICBjb25zdCBjaGFyICpub3RfYmVmb3JlOyAgICAgLyogdmFsaWRpdHkgcGVyaW9kIG5vdCBiZWZvcmUgICAgICAgICAgICovCisgICAgY29uc3QgY2hhciAqbm90X2FmdGVyOyAgICAgIC8qIHZhbGlkaXR5IHBlcmlvZCBub3QgYWZ0ZXIgICAgICAgICAgICAqLworICAgIGNvbnN0IGNoYXIgKnNlcmlhbDsgICAgICAgICAvKiBzZXJpYWwgbnVtYmVyIHN0cmluZyAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgc2VsZnNpZ247ICAgICAgICAgICAgICAgLyogc2VsZnNpZ24gdGhlIGNlcnRpZmljYXRlICAgICAgICAgICAgICovCisgICAgaW50IGlzX2NhOyAgICAgICAgICAgICAgICAgIC8qIGlzIGEgQ0EgY2VydGlmaWNhdGUgICAgICAgICAgICAgICAgICAqLworICAgIGludCBtYXhfcGF0aGxlbjsgICAgICAgICAgICAvKiBtYXhpbXVtIENBIHBhdGggbGVuZ3RoICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGtleV91c2FnZTsgICAgLyoga2V5IHVzYWdlIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBuc19jZXJ0X3R5cGU7IC8qIE5TIGNlcnQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBvcHQ7CisKK2ludCB3cml0ZV9jZXJ0aWZpY2F0ZSggbWJlZHRsc194NTA5d3JpdGVfY2VydCAqY3J0LCBjb25zdCBjaGFyICpvdXRwdXRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX3JuZyApCit7CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X2J1Zls0MDk2XTsKKyAgICBzaXplX3QgbGVuID0gMDsKKworICAgIG1lbXNldCggb3V0cHV0X2J1ZiwgMCwgNDA5NiApOworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9wZW0oIGNydCwgb3V0cHV0X2J1ZiwgNDA5NiwgZl9ybmcsIHBfcm5nICkgKSA8IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgbGVuID0gc3RybGVuKCAoY2hhciAqKSBvdXRwdXRfYnVmICk7CisKKyAgICBpZiggKCBmID0gZm9wZW4oIG91dHB1dF9maWxlLCAidyIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBvdXRwdXRfYnVmLCAxLCBsZW4sIGYgKSAhPSBsZW4gKQorICAgIHsKKyAgICAgICAgZmNsb3NlKCBmICk7CisgICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc194NTA5X2NydCBpc3N1ZXJfY3J0OworICAgIG1iZWR0bHNfcGtfY29udGV4dCBsb2FkZWRfaXNzdWVyX2tleSwgbG9hZGVkX3N1YmplY3Rfa2V5OworICAgIG1iZWR0bHNfcGtfY29udGV4dCAqaXNzdWVyX2tleSA9ICZsb2FkZWRfaXNzdWVyX2tleSwKKyAgICAgICAgICAgICAgICAqc3ViamVjdF9rZXkgPSAmbG9hZGVkX3N1YmplY3Rfa2V5OworICAgIGNoYXIgYnVmWzEwMjRdOworICAgIGNoYXIgaXNzdWVyX25hbWVbMjU2XTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcSwgKnI7CisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpCisgICAgY2hhciBzdWJqZWN0X25hbWVbMjU2XTsKKyAgICBtYmVkdGxzX3g1MDlfY3NyIGNzcjsKKyNlbmRpZgorICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQgY3J0OworICAgIG1iZWR0bHNfbXBpIHNlcmlhbDsKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBlbnRyb3B5OworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKKyAgICBjb25zdCBjaGFyICpwZXJzID0gImNydCBleGFtcGxlIGFwcCI7CisKKyAgICAvKgorICAgICAqIFNldCB0byBzYW5lIHZhbHVlcworICAgICAqLworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9pbml0KCAmY3J0ICk7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9tZF9hbGcoICZjcnQsIE1CRURUTFNfTURfU0hBMjU2ICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmbG9hZGVkX2lzc3Vlcl9rZXkgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZsb2FkZWRfc3ViamVjdF9rZXkgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmc2VyaWFsICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQykKKyAgICBtYmVkdGxzX3g1MDlfY3NyX2luaXQoICZjc3IgKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmlzc3Vlcl9jcnQgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgMTAyNCApOworCisgICAgaWYoIGFyZ2MgPT0gMCApCisgICAgeworICAgIHVzYWdlOgorICAgICAgICBtYmVkdGxzX3ByaW50ZiggVVNBR0UgKTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG9wdC5pc3N1ZXJfY3J0ICAgICAgICAgID0gREZMX0lTU1VFUl9DUlQ7CisgICAgb3B0LnJlcXVlc3RfZmlsZSAgICAgICAgPSBERkxfUkVRVUVTVF9GSUxFOworICAgIG9wdC5zdWJqZWN0X2tleSAgICAgICAgID0gREZMX1NVQkpFQ1RfS0VZOworICAgIG9wdC5pc3N1ZXJfa2V5ICAgICAgICAgID0gREZMX0lTU1VFUl9LRVk7CisgICAgb3B0LnN1YmplY3RfcHdkICAgICAgICAgPSBERkxfU1VCSkVDVF9QV0Q7CisgICAgb3B0Lmlzc3Vlcl9wd2QgICAgICAgICAgPSBERkxfSVNTVUVSX1BXRDsKKyAgICBvcHQub3V0cHV0X2ZpbGUgICAgICAgICA9IERGTF9PVVRQVVRfRklMRU5BTUU7CisgICAgb3B0LnN1YmplY3RfbmFtZSAgICAgICAgPSBERkxfU1VCSkVDVF9OQU1FOworICAgIG9wdC5pc3N1ZXJfbmFtZSAgICAgICAgID0gREZMX0lTU1VFUl9OQU1FOworICAgIG9wdC5ub3RfYmVmb3JlICAgICAgICAgID0gREZMX05PVF9CRUZPUkU7CisgICAgb3B0Lm5vdF9hZnRlciAgICAgICAgICAgPSBERkxfTk9UX0FGVEVSOworICAgIG9wdC5zZXJpYWwgICAgICAgICAgICAgID0gREZMX1NFUklBTDsKKyAgICBvcHQuc2VsZnNpZ24gICAgICAgICAgICA9IERGTF9TRUxGU0lHTjsKKyAgICBvcHQuaXNfY2EgICAgICAgICAgICAgICA9IERGTF9JU19DQTsKKyAgICBvcHQubWF4X3BhdGhsZW4gICAgICAgICA9IERGTF9NQVhfUEFUSExFTjsKKyAgICBvcHQua2V5X3VzYWdlICAgICAgICAgICA9IERGTF9LRVlfVVNBR0U7CisgICAgb3B0Lm5zX2NlcnRfdHlwZSAgICAgICAgPSBERkxfTlNfQ0VSVF9UWVBFOworCisgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCisgICAgeworCisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgInJlcXVlc3RfZmlsZSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5yZXF1ZXN0X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzdWJqZWN0X2tleSIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5zdWJqZWN0X2tleSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImlzc3Vlcl9rZXkiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuaXNzdWVyX2tleSA9IHE7CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInN1YmplY3RfcHdkIiApID09IDAgKQorICAgICAgICAgICAgb3B0LnN1YmplY3RfcHdkID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiaXNzdWVyX3B3ZCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5pc3N1ZXJfcHdkID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiaXNzdWVyX2NydCIgKSA9PSAwICkKKyAgICAgICAgICAgIG9wdC5pc3N1ZXJfY3J0ID0gcTsKKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAib3V0cHV0X2ZpbGUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQub3V0cHV0X2ZpbGUgPSBxOworICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzdWJqZWN0X25hbWUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5zdWJqZWN0X25hbWUgPSBxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgImlzc3Vlcl9uYW1lIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuaXNzdWVyX25hbWUgPSBxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm5vdF9iZWZvcmUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5ub3RfYmVmb3JlID0gcTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJub3RfYWZ0ZXIiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5ub3RfYWZ0ZXIgPSBxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlcmlhbCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnNlcmlhbCA9IHE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VsZnNpZ24iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5zZWxmc2lnbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuc2VsZnNpZ24gPCAwIHx8IG9wdC5zZWxmc2lnbiA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAiaXNfY2EiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5pc19jYSA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQuaXNfY2EgPCAwIHx8IG9wdC5pc19jYSA+IDEgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWF4X3BhdGhsZW4iICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5tYXhfcGF0aGxlbiA9IGF0b2koIHEgKTsKKyAgICAgICAgICAgIGlmKCBvcHQubWF4X3BhdGhsZW4gPCAtMSB8fCBvcHQubWF4X3BhdGhsZW4gPiAxMjcgKQorICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAia2V5X3VzYWdlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSggcSAhPSBOVUxMICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKCByID0gc3RyY2hyKCBxLCAnLCcgKSApICE9IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICAqcisrID0gJ1wwJzsKKworICAgICAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJkaWdpdGFsX3NpZ25hdHVyZSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAibm9uX3JlcHVkaWF0aW9uIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT047CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAia2V5X2VuY2lwaGVybWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJkYXRhX2VuY2lwaGVybWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfREFUQV9FTkNJUEhFUk1FTlQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAia2V5X2FncmVlbWVudCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0LmtleV91c2FnZSB8PSBNQkVEVExTX1g1MDlfS1VfS0VZX0FHUkVFTUVOVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJrZXlfY2VydF9zaWduIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImNybF9zaWduIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQua2V5X3VzYWdlIHw9IE1CRURUTFNfWDUwOV9LVV9DUkxfU0lHTjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisKKyAgICAgICAgICAgICAgICBxID0gcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJuc19jZXJ0X3R5cGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlKCBxICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAoIHIgPSBzdHJjaHIoIHEsICcsJyApICkgIT0gTlVMTCApCisgICAgICAgICAgICAgICAgICAgICpyKysgPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgInNzbF9jbGllbnQiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgInNzbF9zZXJ2ZXIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgImVtYWlsIiApID09IDAgKQorICAgICAgICAgICAgICAgICAgICBvcHQubnNfY2VydF90eXBlIHw9IE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfRU1BSUw7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAib2JqZWN0X3NpZ25pbmciICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklORzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJzc2xfY2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0E7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBxLCAiZW1haWxfY2EiICkgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIG9wdC5uc19jZXJ0X3R5cGUgfD0gTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTF9DQTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJvYmplY3Rfc2lnbmluZ19jYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgb3B0Lm5zX2NlcnRfdHlwZSB8PSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HX0NBOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKKworICAgICAgICAgICAgICAgIHEgPSByOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gdXNhZ2U7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoIlxuIik7CisKKyAgICAvKgorICAgICAqIDAuIFNlZWQgdGhlIFBSTkcKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBTZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgaWYoICggcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLCAmZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiggcGVycyApICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX2N0cl9kcmJnX3NlZWQgcmV0dXJuZWQgJWQgLSAlc1xuIiwgcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisKKyAgICAvLyBQYXJzZSBzZXJpYWwgdG8gTVBJCisgICAgLy8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBSZWFkaW5nIHNlcmlhbCBudW1iZXIuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmc2VyaWFsLCAxMCwgb3B0LnNlcmlhbCApICkgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8vIFBhcnNlIGlzc3VlciBjZXJ0aWZpY2F0ZSBpZiBwcmVzZW50CisgICAgLy8KKyAgICBpZiggIW9wdC5zZWxmc2lnbiAmJiBzdHJsZW4oIG9wdC5pc3N1ZXJfY3J0ICkgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogMS4wLmEuIExvYWQgdGhlIGNlcnRpZmljYXRlcworICAgICAgICAgKi8KKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgaXNzdWVyIGNlcnRpZmljYXRlIC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZpc3N1ZXJfY3J0LCBvcHQuaXNzdWVyX2NydCApICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBpc3N1ZXJfbmFtZSwgc2l6ZW9mKGlzc3Vlcl9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc3N1ZXJfY3J0LnN1YmplY3QgKTsKKyAgICAgICAgaWYoIHJldCA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9kbl9nZXRzIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG9wdC5pc3N1ZXJfbmFtZSA9IGlzc3Vlcl9uYW1lOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisgICAgfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpCisgICAgLy8gUGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCBpZiBwcmVzZW50CisgICAgLy8KKyAgICBpZiggIW9wdC5zZWxmc2lnbiAmJiBzdHJsZW4oIG9wdC5yZXF1ZXN0X2ZpbGUgKSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAxLjAuYi4gTG9hZCB0aGUgQ1NSCisgICAgICAgICAqLworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBMb2FkaW5nIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IC4uLiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlX2ZpbGUoICZjc3IsIG9wdC5yZXF1ZXN0X2ZpbGUgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZSByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBtYmVkdGxzX3g1MDlfZG5fZ2V0cyggc3ViamVjdF9uYW1lLCBzaXplb2Yoc3ViamVjdF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjc3Iuc3ViamVjdCApOworICAgICAgICBpZiggcmV0IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2RuX2dldHMgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgb3B0LnN1YmplY3RfbmFtZSA9IHN1YmplY3RfbmFtZTsKKyAgICAgICAgc3ViamVjdF9rZXkgPSAmY3NyLnBrOworCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyAqLworCisgICAgLyoKKyAgICAgKiAxLjEuIExvYWQgdGhlIGtleXMKKyAgICAgKi8KKyAgICBpZiggIW9wdC5zZWxmc2lnbiAmJiAhc3RybGVuKCBvcHQucmVxdWVzdF9maWxlICkgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgc3ViamVjdCBrZXkgLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmxvYWRlZF9zdWJqZWN0X2tleSwgb3B0LnN1YmplY3Rfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnN1YmplY3RfcHdkICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gTG9hZGluZyB0aGUgaXNzdWVyIGtleSAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmxvYWRlZF9pc3N1ZXJfa2V5LCBvcHQuaXNzdWVyX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lmlzc3Vlcl9wd2QgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSByZXR1cm5lZCAteCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGtleSBhbmQgaXNzdWVyIGNlcnRpZmljYXRlIG1hdGNoCisgICAgLy8KKyAgICBpZiggc3RybGVuKCBvcHQuaXNzdWVyX2NydCApICkKKyAgICB7CisgICAgICAgIGlmKCAhbWJlZHRsc19wa19jYW5fZG8oICZpc3N1ZXJfY3J0LnBrLCBNQkVEVExTX1BLX1JTQSApIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmbWJlZHRsc19wa19yc2EoIGlzc3Vlcl9jcnQucGsgKS0+TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc19wa19yc2EoICppc3N1ZXJfa2V5ICktPk4gKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX21waV9jbXBfbXBpKCAmbWJlZHRsc19wa19yc2EoIGlzc3Vlcl9jcnQucGsgKS0+RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc19wa19yc2EoICppc3N1ZXJfa2V5ICktPkUgKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIGlzc3Vlcl9rZXkgZG9lcyBub3QgbWF0Y2ggaXNzdWVyIGNlcnRpZmljYXRlXG5cbiIgKTsKKyAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIGlmKCBvcHQuc2VsZnNpZ24gKQorICAgIHsKKyAgICAgICAgb3B0LnN1YmplY3RfbmFtZSA9IG9wdC5pc3N1ZXJfbmFtZTsKKyAgICAgICAgc3ViamVjdF9rZXkgPSBpc3N1ZXJfa2V5OworICAgIH0KKworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkoICZjcnQsIHN1YmplY3Rfa2V5ICk7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9pc3N1ZXJfa2V5KCAmY3J0LCBpc3N1ZXJfa2V5ICk7CisKKyAgICAvKgorICAgICAqIDEuMC4gQ2hlY2sgdGhlIG5hbWVzIGZvciB2YWxpZGl0eQorICAgICAqLworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9uYW1lKCAmY3J0LCBvcHQuc3ViamVjdF9uYW1lICkgKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lKCAmY3J0LCBvcHQuaXNzdWVyX25hbWUgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX25hbWUgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyBjZXJ0aWZpY2F0ZSB2YWx1ZXMgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbCggJmNydCwgJnNlcmlhbCApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsIGJ1ZiwgMTAyNCApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zZXJpYWwgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92YWxpZGl0eSggJmNydCwgb3B0Lm5vdF9iZWZvcmUsIG9wdC5ub3RfYWZ0ZXIgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEFkZGluZyB0aGUgQmFzaWMgQ29uc3RyYWludHMgZXh0ZW5zaW9uIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cyggJmNydCwgb3B0LmlzX2NhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQubWF4X3BhdGhsZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIHg1MDl3cml0ZV9jcnRfc2V0X2Jhc2ljX2NvbnRyYWludHMgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gQWRkaW5nIHRoZSBTdWJqZWN0IEtleSBJZGVudGlmaWVyIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleV9pZGVudGlmaWVyKCAmY3J0ICk7CisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgYnVmLCAxMDI0ICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5X2lkZW50aWZpZXIgcmV0dXJuZWQgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEFkZGluZyB0aGUgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyIC4uLiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIoICZjcnQgKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyIHJldHVybmVkIC0weCUwMnggLSAlc1xuXG4iLCAtcmV0LCBidWYgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CisjZW5kaWYgLyogTUJFRFRMU19TSEExX0MgKi8KKworICAgIGlmKCBvcHQua2V5X3VzYWdlICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEFkZGluZyB0aGUgS2V5IFVzYWdlIGV4dGVuc2lvbiAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9rZXlfdXNhZ2UoICZjcnQsIG9wdC5rZXlfdXNhZ2UgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKworICAgIGlmKCBvcHQubnNfY2VydF90eXBlICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIEFkZGluZyB0aGUgTlMgQ2VydCBUeXBlIGV4dGVuc2lvbiAuLi4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUoICZjcnQsIG9wdC5uc19jZXJ0X3R5cGUgKTsKKyAgICAgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X25zX2NlcnRfdHlwZSByZXR1cm5lZCAtMHglMDJ4IC0gJXNcblxuIiwgLXJldCwgYnVmICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworICAgIH0KKworICAgIC8qCisgICAgICogMS4yLiBXcml0aW5nIHRoZSByZXF1ZXN0CisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICIgIC4gV3JpdGluZyB0aGUgY2VydGlmaWNhdGUuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIGlmKCAoIHJldCA9IHdyaXRlX2NlcnRpZmljYXRlKCAmY3J0LCBvcHQub3V0cHV0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcgKSApICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19zdHJlcnJvciggcmV0LCBidWYsIDEwMjQgKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIHdyaXRlX2NlcnRpZmNhdGUgLTB4JTAyeCAtICVzXG5cbiIsIC1yZXQsIGJ1ZiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZnJlZSggJmNydCApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJmxvYWRlZF9zdWJqZWN0X2tleSApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJmxvYWRlZF9pc3N1ZXJfa2V5ICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnNlcmlhbCApOworICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZlbnRyb3B5ICk7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisjZW5kaWYKKworICAgIHJldHVybiggcmV0ICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19YNTA5X0NSVF9XUklURV9DICYmIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAmJgorICAgICAgICAgIE1CRURUTFNfRlNfSU8gJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19DVFJfRFJCR19DICYmCisgICAgICAgICAgTUJFRFRMU19FUlJPUl9DICYmIE1CRURUTFNfUEVNX1dSSVRFX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NybF9hcHAuYyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9wcm9ncmFtcy94NTA5L2NybF9hcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBkMTllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvY3JsX2FwcC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogIENSTCByZWFkaW5nIGFwcGxpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcmwuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImNybC5wZW0iCisjZGVmaW5lIERGTF9ERUJVR19MRVZFTCAgICAgICAgIDAKKworI2RlZmluZSBVU0FHRSBcCisgICAgIlxuIHVzYWdlOiBjcmxfYXBwIHBhcmFtPTw+Li4uXG4iICAgICAgICAgICAgICAgICAgIFwKKyAgICAiXG4gYWNjZXB0YWJsZSBwYXJhbWV0ZXJzOlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICIgICAgZmlsZW5hbWU9JSVzICAgICAgICAgZGVmYXVsdDogY3JsLnBlbVxuIiAgICAgIFwKKyAgICAiXG4iCisKKy8qCisgKiBnbG9iYWwgb3B0aW9ucworICovCitzdHJ1Y3Qgb3B0aW9ucworeworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOyAgICAgICAvKiBmaWxlbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUgZmlsZSAgICAgKi8KK30gb3B0OworCitpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCit7CisgICAgaW50IHJldCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAwMDAwXTsKKyAgICBtYmVkdGxzX3g1MDlfY3JsIGNybDsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpwLCAqcTsKKworICAgIC8qCisgICAgICogU2V0IHRvIHNhbmUgdmFsdWVzCisgICAgICovCisgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCAmY3JsICk7CisKKyAgICBpZiggYXJnYyA9PSAwICkKKyAgICB7CisgICAgdXNhZ2U6CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCBVU0FHRSApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgb3B0LmZpbGVuYW1lICAgICAgICAgICAgPSBERkxfRklMRU5BTUU7CisKKyAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICB7CisgICAgICAgIHAgPSBhcmd2W2ldOworICAgICAgICBpZiggKCBxID0gc3RyY2hyKCBwLCAnPScgKSApID09IE5VTEwgKQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICAgICAgKnErKyA9ICdcMCc7CisKKyAgICAgICAgaWYoIHN0cmNtcCggcCwgImZpbGVuYW1lIiApID09IDAgKQorICAgICAgICAgICAgb3B0LmZpbGVuYW1lID0gcTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byB1c2FnZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIDEuMS4gTG9hZCB0aGUgQ1JMCisgICAgICovCisgICAgbWJlZHRsc19wcmludGYoICJcbiAgLiBMb2FkaW5nIHRoZSBDUkwgLi4uIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoICZjcmwsIG9wdC5maWxlbmFtZSApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggJmNybCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKKworICAgIC8qCisgICAgICogMS4yIFByaW50IHRoZSBDUkwKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDUkwgaW5mb3JtYXRpb24gICAgLi4uXG4iICk7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NybF9pbmZvKCAoY2hhciAqKSBidWYsIHNpemVvZiggYnVmICkgLSAxLCAiICAgICAgIiwgJmNybCApOworICAgIGlmKCByZXQgPT0gLTEgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jcmxfaW5mbyByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCAmY3JsICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiVzXG4iLCBidWYgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoICZjcmwgKTsKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICArIFByZXNzIEVudGVyIHRvIGV4aXQgdGhpcyBwcm9ncmFtLlxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX0JJR05VTV9DICYmIE1CRURUTFNfUlNBX0MgJiYgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DICYmCisgICAgICAgICAgTUJFRFRMU19GU19JTyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvcmVxX2FwcC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Byb2dyYW1zL3g1MDkvcmVxX2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTBhNTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vcHJvZ3JhbXMveDUwOS9yZXFfYXBwLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiAgQ2VydGlmaWNhdGUgcmVxdWVzdCByZWFkaW5nIGFwcGxpY2F0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykgfHwgIWRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgIFwKKyAgICAhZGVmaW5lZChNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MpIHx8ICFkZWZpbmVkKE1CRURUTFNfRlNfSU8pCitpbnQgbWFpbiggdm9pZCApCit7CisgICAgbWJlZHRsc19wcmludGYoIk1CRURUTFNfQklHTlVNX0MgYW5kL29yIE1CRURUTFNfUlNBX0MgYW5kL29yICIKKyAgICAgICAgICAgIk1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyBhbmQvb3IgTUJFRFRMU19GU19JTyBub3QgZGVmaW5lZC5cbiIpOworICAgIHJldHVybiggMCApOworfQorI2Vsc2UKKworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jc3IuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgREZMX0ZJTEVOQU1FICAgICAgICAgICAgImNlcnQucmVxIgorI2RlZmluZSBERkxfREVCVUdfTEVWRUwgICAgICAgICAwCisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJcbiB1c2FnZTogcmVxX2FwcCBwYXJhbT08Pi4uLlxuIiAgICAgICAgICAgICAgICAgICBcCisgICAgIlxuIGFjY2VwdGFibGUgcGFyYW1ldGVyczpcbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiICAgIGZpbGVuYW1lPSUlcyAgICAgICAgIGRlZmF1bHQ6IGNlcnQucmVxXG4iICAgICAgXAorICAgICJcbiIKKworLyoKKyAqIGdsb2JhbCBvcHRpb25zCisgKi8KK3N0cnVjdCBvcHRpb25zCit7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7ICAgICAgIC8qIGZpbGVuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0ICAqLworfSBvcHQ7CisKK2ludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDAwMDBdOworICAgIG1iZWR0bHNfeDUwOV9jc3IgY3NyOworICAgIGludCBpOworICAgIGNoYXIgKnAsICpxOworCisgICAgLyoKKyAgICAgKiBTZXQgdG8gc2FuZSB2YWx1ZXMKKyAgICAgKi8KKyAgICBtYmVkdGxzX3g1MDlfY3NyX2luaXQoICZjc3IgKTsKKworICAgIGlmKCBhcmdjID09IDAgKQorICAgIHsKKyAgICB1c2FnZToKKyAgICAgICAgbWJlZHRsc19wcmludGYoIFVTQUdFICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBvcHQuZmlsZW5hbWUgICAgICAgICAgICA9IERGTF9GSUxFTkFNRTsKKworICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IGFyZ3ZbaV07CisgICAgICAgIGlmKCAoIHEgPSBzdHJjaHIoIHAsICc9JyApICkgPT0gTlVMTCApCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgICAgICAqcSsrID0gJ1wwJzsKKworICAgICAgICBpZiggc3RyY21wKCBwLCAiZmlsZW5hbWUiICkgPT0gMCApCisgICAgICAgICAgICBvcHQuZmlsZW5hbWUgPSBxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIHVzYWdlOworICAgIH0KKworICAgIC8qCisgICAgICogMS4xLiBMb2FkIHRoZSBDU1IKKyAgICAgKi8KKyAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAuIExvYWRpbmcgdGhlIENTUiAuLi4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZSggJmNzciwgb3B0LmZpbGVuYW1lICk7CisKKyAgICBpZiggcmV0ICE9IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgZmFpbGVkXG4gICEgIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCAmY3NyICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBtYmVkdGxzX3ByaW50ZiggIiBva1xuIiApOworCisgICAgLyoKKyAgICAgKiAxLjIgUHJpbnQgdGhlIENTUgorICAgICAqLworICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENTUiBpbmZvcm1hdGlvbiAgICAuLi5cbiIgKTsKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3NyX2luZm8oIChjaGFyICopIGJ1Ziwgc2l6ZW9mKCBidWYgKSAtIDEsICIgICAgICAiLCAmY3NyICk7CisgICAgaWYoIHJldCA9PSAtMSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISAgbWJlZHRsc194NTA5X2Nzcl9pbmZvIHJldHVybmVkICVkXG5cbiIsIHJldCApOworICAgICAgICBtYmVkdGxzX3g1MDlfY3NyX2ZyZWUoICZjc3IgKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiJXNcbiIsIGJ1ZiApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggJmNzciApOworCisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisKKyAgICByZXR1cm4oIHJldCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19SU0FfQyAmJiBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MgJiYKKyAgICAgICAgICBNQkVEVExTX0ZTX0lPICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9hcGlkb2NfZnVsbC5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2FwaWRvY19mdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJlYmFiMTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9hcGlkb2NfZnVsbC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworIyBHZW5lcmF0ZSBkb3h5Z2VuIGRvY3VtZW50YXRpb24gd2l0aCBhIGZ1bGwgY29uZmlnLmggKHRoaXMgZW5zdXJlcyB0aGF0IGV2ZXJ5CisjIGF2YWlsYWJsZSBmbGFnIGlzIGRvY3VtZW50ZWQsIGFuZCBhdm9pZHMgd2FybmluZ3MgYWJvdXQgZG9jdW1lbnRhdGlvbgorIyB3aXRob3V0IGEgY29ycmVzcG9uZGluZyAjZGVmaW5lKS4KKyMKKyMgLyFcIFRoaXMgbXVzdCBub3QgYmUgYSBNYWtlZmlsZSB0YXJnZXQsIGFzIGl0IHdvdWxkIGNyZWF0ZSBhIHJhY2UgY29uZGl0aW9uCisjIHdoZW4gbXVsdGlwbGUgdGFyZ2V0cyBhcmUgaW52b2tlZCBpbiB0aGUgc2FtZSBwYXJhbGxlbCBidWlsZC4KKworc2V0IC1ldQorCitDT05GSUdfSD0naW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oJworCitpZiBbIC1yICRDT05GSUdfSCBdOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICIkQ09ORklHX0ggbm90IGZvdW5kIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0NPTkZJR19CQUs9JHtDT05GSUdfSH0uYmFrCitjcCAtcCAkQ09ORklHX0ggJENPTkZJR19CQUsKKworc2NyaXB0cy9jb25maWcucGwgcmVhbGZ1bGwKK21ha2UgYXBpZG9jCisKK212ICRDT05GSUdfQkFLICRDT05GSUdfSApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvYnVtcF92ZXJzaW9uLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvYnVtcF92ZXJzaW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjOGI4MDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9idW1wX3ZlcnNpb24uc2gKQEAgLTAsMCArMSwxNDAgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgU2V0cyB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aG9zZSBnaXZlbi4KKyMKKyMgVXNhZ2U6IGJ1bXBfdmVyc2lvbi5zaCBbIC0tdmVyc2lvbiA8dmVyc2lvbj4gXSBbIC0tc28tY3J5cHRvIDx2ZXJzaW9uPl0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbIC0tc28teDUwOSA8dmVyc2lvbj4gXSBbIC0tc28tdGxzIDx2ZXJzaW9uPiBdCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtdiB8IC0tdmVyYm9zZSBdIFsgLWggfCAtLWhlbHAgXQorIworCitWRVJTSU9OPSIiCitTT1ZFUlNJT049IiIKKworIyBQYXJzZSBhcmd1bWVudHMKKyMKK3VudGlsIFsgLXogIiQxIiBdCitkbworICBjYXNlICIkMSIgaW4KKyAgICAtLXZlcnNpb24pCisgICAgICAjIFZlcnNpb24gdG8gdXNlCisgICAgICBzaGlmdAorICAgICAgVkVSU0lPTj0kMQorICAgICAgOzsKKyAgICAtLXNvLWNyeXB0bykKKyAgICAgIHNoaWZ0CisgICAgICBTT19DUllQVE89JDEKKyAgICAgIDs7CisgICAgLS1zby14NTA5KQorICAgICAgc2hpZnQKKyAgICAgIFNPX1g1MDk9JDEKKyAgICAgIDs7CisgICAgLS1zby10bHMpCisgICAgICBzaGlmdAorICAgICAgU09fVExTPSQxCisgICAgICA7OworICAgIC12fC0tdmVyYm9zZSkKKyAgICAgICMgQmUgdmVyYm9zZQorICAgICAgVkVSQk9TRT0iMSIKKyAgICAgIDs7CisgICAgLWh8LS1oZWxwKQorICAgICAgIyBwcmludCBoZWxwCisgICAgICBlY2hvICJVc2FnZTogJDAiCisgICAgICBlY2hvIC1lICIgIC1ofC0taGVscFx0XHRQcmludCB0aGlzIGhlbHAuIgorICAgICAgZWNobyAtZSAiICAtLXZlcnNpb24gPHZlcnNpb24+XHRWZXJzaW9uIHRvIGJ1bXAgdG8uIgorICAgICAgZWNobyAtZSAiICAtLXNvLWNyeXB0byA8dmVyc2lvbj5cdFNPIHZlcnNpb24gdG8gYnVtcCBsaWJtYmVkY3J5cHRvIHRvLiIKKyAgICAgIGVjaG8gLWUgIiAgLS1zby14NTA5IDx2ZXJzaW9uPlx0U08gdmVyc2lvbiB0byBidW1wIGxpYm1iZWR4NTA5IHRvLiIKKyAgICAgIGVjaG8gLWUgIiAgLS1zby10bHMgPHZlcnNpb24+XHRTTyB2ZXJzaW9uIHRvIGJ1bXAgbGlibWJlZHRscyB0by4iCisgICAgICBlY2hvIC1lICIgIC12fC0tdmVyYm9zZVx0XHRWZXJib3NlLiIKKyAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBwcmludCBlcnJvcgorICAgICAgZWNobyAiVW5rbm93biBhcmd1bWVudDogJyQxJyIKKyAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiBbICJYIiA9ICJYJFZFUlNJT04iIF07Cit0aGVuCisgIGVjaG8gIk5vIHZlcnNpb24gc3BlY2lmaWVkLiBVbmFibGUgdG8gY29udGludWUuIgorICBleGl0IDEKK2ZpCisKK1sgJFZFUkJPU0UgXSAmJiBlY2hvICJCdW1waW5nIFZFUlNJT04gaW4gbGlicmFyeS9DTWFrZUxpc3RzLnR4dCIKK3NlZCAtZSAicy8gVkVSU0lPTiBbMC05Ll1cezEsXH0vIFZFUlNJT04gJFZFUlNJT04vZyIgPCBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0ID4gdG1wCittdiB0bXAgbGlicmFyeS9DTWFrZUxpc3RzLnR4dAorCitpZiBbICJYIiAhPSAiWCRTT19DUllQVE8iIF07Cit0aGVuCisgIFsgJFZFUkJPU0UgXSAmJiBlY2hvICJCdW1waW5nIFNPVkVSU0lPTiBmb3IgbGlibWJlZGNyeXB0byBpbiBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0IgorICBzZWQgLWUgIi9tYmVkY3J5cHRvLyBzLyBTT1ZFUlNJT04gWzAtOV1cezEsXH0vIFNPVkVSU0lPTiAkU09fQ1JZUFRPL2ciIDwgbGlicmFyeS9DTWFrZUxpc3RzLnR4dCA+IHRtcAorICBtdiB0bXAgbGlicmFyeS9DTWFrZUxpc3RzLnR4dAorCisgIFsgJFZFUkJPU0UgXSAmJiBlY2hvICJCdW1waW5nIFNPVkVSU0lPTiBmb3IgbGlibWJlZGNyeXB0byBpbiBsaWJyYXJ5L01ha2VmaWxlIgorICBzZWQgLWUgInMvU09FWFRfQ1JZUFRPPXNvLlswLTldXHsxLFx9L1NPRVhUX0NSWVBUTz1zby4kU09fQ1JZUFRPL2ciIDwgbGlicmFyeS9NYWtlZmlsZSA+IHRtcAorICBtdiB0bXAgbGlicmFyeS9NYWtlZmlsZQorZmkKKworaWYgWyAiWCIgIT0gIlgkU09fWDUwOSIgXTsKK3RoZW4KKyAgWyAkVkVSQk9TRSBdICYmIGVjaG8gIkJ1bXBpbmcgU09WRVJTSU9OIGZvciBsaWJtYmVkeDUwOSBpbiBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0IgorICBzZWQgLWUgIi9tYmVkeDUwOS8gcy8gU09WRVJTSU9OIFswLTldXHsxLFx9LyBTT1ZFUlNJT04gJFNPX1g1MDkvZyIgPCBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0ID4gdG1wCisgIG12IHRtcCBsaWJyYXJ5L0NNYWtlTGlzdHMudHh0CisKKyAgWyAkVkVSQk9TRSBdICYmIGVjaG8gIkJ1bXBpbmcgU09WRVJTSU9OIGZvciBsaWJtYmVkeDUwOSBpbiBsaWJyYXJ5L01ha2VmaWxlIgorICBzZWQgLWUgInMvU09FWFRfWDUwOT1zby5bMC05XVx7MSxcfS9TT0VYVF9YNTA5PXNvLiRTT19YNTA5L2ciIDwgbGlicmFyeS9NYWtlZmlsZSA+IHRtcAorICBtdiB0bXAgbGlicmFyeS9NYWtlZmlsZQorZmkKKworaWYgWyAiWCIgIT0gIlgkU09fVExTIiBdOwordGhlbgorICBbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBTT1ZFUlNJT04gZm9yIGxpYm1iZWR0bHMgaW4gbGlicmFyeS9DTWFrZUxpc3RzLnR4dCIKKyAgc2VkIC1lICIvbWJlZHRscy8gcy8gU09WRVJTSU9OIFswLTldXHsxLFx9LyBTT1ZFUlNJT04gJFNPX1RMUy9nIiA8IGxpYnJhcnkvQ01ha2VMaXN0cy50eHQgPiB0bXAKKyAgbXYgdG1wIGxpYnJhcnkvQ01ha2VMaXN0cy50eHQKKworICBbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBTT1ZFUlNJT04gZm9yIGxpYm1iZWR0bHMgaW4gbGlicmFyeS9NYWtlZmlsZSIKKyAgc2VkIC1lICJzL1NPRVhUX1RMUz1zby5bMC05XVx7MSxcfS9TT0VYVF9UTFM9c28uJFNPX1RMUy9nIiA8IGxpYnJhcnkvTWFrZWZpbGUgPiB0bXAKKyAgbXYgdG1wIGxpYnJhcnkvTWFrZWZpbGUKK2ZpCisKK1sgJFZFUkJPU0UgXSAmJiBlY2hvICJCdW1waW5nIFZFUlNJT04gaW4gaW5jbHVkZS9tYmVkdGxzL3ZlcnNpb24uaCIKK3JlYWQgTUFKT1IgTUlOT1IgUEFUQ0ggPDw8JChJRlM9Ii4iOyBlY2hvICRWRVJTSU9OKQorVkVSU0lPTl9OUj0iJCggcHJpbnRmICIweCUwMlglMDJYJTAyWDAwIiAkTUFKT1IgJE1JTk9SICRQQVRDSCApIgorY2F0IGluY2x1ZGUvbWJlZHRscy92ZXJzaW9uLmggfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZWQgLWUgInMvX1ZFUlNJT05fTUFKT1IgLlx7MSxcfS9fVkVSU0lPTl9NQUpPUiAgJE1BSk9SLyIgfCAgICBcCisgICAgc2VkIC1lICJzL19WRVJTSU9OX01JTk9SIC5cezEsXH0vX1ZFUlNJT05fTUlOT1IgICRNSU5PUi8iIHwgICAgXAorICAgIHNlZCAtZSAicy9fVkVSU0lPTl9QQVRDSCAuXHsxLFx9L19WRVJTSU9OX1BBVENIICAkUEFUQ0gvIiB8ICAgIFwKKyAgICBzZWQgLWUgInMvX1ZFUlNJT05fTlVNQkVSIC5cezEsXH0vX1ZFUlNJT05fTlVNQkVSICAgICAgICAgJFZFUlNJT05fTlIvIiB8ICAgIFwKKyAgICBzZWQgLWUgInMvX1ZFUlNJT05fU1RSSU5HIC5cezEsXH0vX1ZFUlNJT05fU1RSSU5HICAgICAgICAgXCIkVkVSU0lPTlwiLyIgfCAgICBcCisgICAgc2VkIC1lICJzL19WRVJTSU9OX1NUUklOR19GVUxMIC5cezEsXH0vX1ZFUlNJT05fU1RSSU5HX0ZVTEwgICAgXCJtYmVkIFRMUyAkVkVSU0lPTlwiLyIgXAorICAgID4gdG1wCittdiB0bXAgaW5jbHVkZS9tYmVkdGxzL3ZlcnNpb24uaAorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyB2ZXJzaW9uIGluIHRlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3ZlcnNpb24uZGF0YSIKK3NlZCAtZSAicy92ZXJzaW9uOlwiLlx7MSxcfS92ZXJzaW9uOlwiJFZFUlNJT05cIi9nIiA8IHRlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3ZlcnNpb24uZGF0YSA+IHRtcAorbXYgdG1wIHRlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3ZlcnNpb24uZGF0YQorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiQnVtcGluZyBQUk9KRUNUX05BTUUgaW4gZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlIGFuZCBkb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oIgorZm9yIGkgaW4gZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlIGRveHlnZW4vaW5wdXQvZG9jX21haW5wYWdlLmg7CitkbworICBzZWQgLWUgInMvbWJlZCBUTFMgdlswLTlcLl1cezEsXH0vbWJlZCBUTFMgdiRWRVJTSU9OL2ciIDwgJGkgPiB0bXAKKyAgbXYgdG1wICRpCitkb25lCisKK1sgJFZFUkJPU0UgXSAmJiBlY2hvICJSZS1nZW5lcmF0aW5nIGxpYnJhcnkvZXJyb3IuYyIKK3NjcmlwdHMvZ2VuZXJhdGVfZXJyb3JzLnBsCisKK1sgJFZFUkJPU0UgXSAmJiBlY2hvICJSZS1nZW5lcmF0aW5nIGxpYnJhcnkvdmVyc2lvbl9mZWF0dXJlcy5jIgorc2NyaXB0cy9nZW5lcmF0ZV9mZWF0dXJlcy5wbAorCitbICRWRVJCT1NFIF0gJiYgZWNobyAiUmUtZ2VuZXJhdGluZyB2aXN1YWxjIGZpbGVzIgorc2NyaXB0cy9nZW5lcmF0ZV92aXN1YWxjX2ZpbGVzLnBsCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2NvbmZpZy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2NvbmZpZy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTIxYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvY29uZmlnLnBsCkBAIC0wLDAgKzEsMjUyIEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBDb21tZW50cyBhbmQgdW5jb21tZW50cyAjZGVmaW5lIGxpbmVzIGluIHRoZSBnaXZlbiBoZWFkZXIgZmlsZSBhbmQgb3B0aW9uYWxseQorIyBzZXRzIHRoZWlyIHZhbHVlIG9yIGNhbiBnZXQgdGhlIHZhbHVlLiBUaGlzIGlzIHRvIHByb3ZpZGUgc2NyaXB0aW5nIGNvbnRyb2wgb2YKKyMgd2hhdCBwcmVwcm9jZXNzb3Igc3ltYm9scywgYW5kIHRoZXJlZm9yZSB3aGF0IGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbiBmbGFncworIyBhcmUgc2V0IGluIHRoZSAnY29uZmlnLmgnIGZpbGUuCisjCisjIFVzYWdlOiBjb25maWcucGwgWy1mIDxmaWxlPiB8IC0tZmlsZSA8ZmlsZT5dIFstbyB8IC0tZm9yY2VdCisjICAgICAgICAgICAgICAgICAgIFtzZXQgPHN5bWJvbD4gPHZhbHVlPiB8IHVuc2V0IDxzeW1ib2w+IHwgZ2V0IDxzeW1ib2w+IHwKKyMgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgfCByZWFsZnVsbF0KKyMKKyMgRnVsbCB1c2FnZSBkZXNjcmlwdGlvbiBwcm92aWRlZCBiZWxvdy4KKyMKKyMgVGhpbmdzIHRoYXQgc2hvdWxkbid0IGJlIGVuYWJsZWQgd2l0aCAiZnVsbCIuCisjCisjICAgTUJFRFRMU19URVNUX05VTExfRU5UUk9QWQorIyAgIE1CRURUTFNfREVQUkVDQVRFRF9SRU1PVkVECisjICAgTUJFRFRMU19IQVZFX1NTRTIKKyMgICBNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKKyMgICBNQkVEVExTX0VDUF9EUF9NMjIxX0VOQUJMRUQKKyMgICBNQkVEVExTX0VDUF9EUF9NMzgzX0VOQUJMRUQKKyMgICBNQkVEVExTX0VDUF9EUF9NNTExX0VOQUJMRUQKKyMgICBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCisjICAgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZCisjICAgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKKyMgICBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwKKyMgICBNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMKKyMgICBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCisjICAgICAgIC0gdGhpcyBjb3VsZCBiZSBlbmFibGVkIGlmIHRoZSByZXNwZWN0aXZlIHRlc3RzIHdlcmUgYWRhcHRlZAorIyAgIE1CRURUTFNfWkxJQl9TVVBQT1JUCisjICAgTUJFRFRMU19QS0NTMTFfQworIyAgIGFuZCBhbnkgc3ltYm9sIGJlZ2lubmluZyBfQUxUCisjCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK215ICRjb25maWdfZmlsZSA9ICJpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgiOworbXkgJHVzYWdlID0gPDxFT1U7CiskMCBbLWYgPGZpbGU+IHwgLS1maWxlIDxmaWxlPl0gWy1vIHwgLS1mb3JjZV0KKyAgICAgICAgICAgICAgICAgICBbc2V0IDxzeW1ib2w+IDx2YWx1ZT4gfCB1bnNldCA8c3ltYm9sPiB8IGdldCA8c3ltYm9sPiB8CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIHwgcmVhbGZ1bGxdCisKK0NvbW1hbmRzCisgICAgc2V0IDxzeW1ib2w+IFs8dmFsdWU+XSAgLSBVbmNvbW1lbnRzIG9yIGFkZHMgYSAjZGVmaW5lIGZvciB0aGUgPHN5bWJvbD4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCBvcHRpb25hbGx5IG1ha2luZyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgPHZhbHVlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzeW1ib2wgaXNuJ3QgcHJlc2VudCBpbiB0aGUgZmlsZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmV0dXJuZWQuCisgICAgdW5zZXQgPHN5bWJvbD4gICAgICAgICAgLSBDb21tZW50cyBvdXQgdGhlICNkZWZpbmUgZm9yIHRoZSBnaXZlbiBzeW1ib2wgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICBnZXQgPHN5bWJvbD4gICAgICAgICAgICAtIEZpbmRzIHRoZSAjZGVmaW5lIGZvciB0aGUgZ2l2ZW4gc3ltYm9sLCByZXR1cm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXRjb2RlIG9mIDAgaWYgdGhlIHN5bWJvbCBpcyBmb3VuZCwgYW5kIC0xIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QuIFRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIGlzIG91dHB1dCBpZiBvbmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICAgIGZ1bGwgICAgICAgICAgICAgICAgICAgIC0gVW5jb21tZW50cyBhbGwgI2RlZmluZSdzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGluZyBzb21lIHJlc2VydmVkIHN5bWJvbHMsIHVudGlsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMnIHNlY3Rpb24KKyAgICByZWFsZnVsbCAgICAgICAgICAgICAgICAtIFVuY29tbWVudHMgYWxsICNkZWZpbmUncyB3aXRoIG5vIGV4Y2x1c2lvbnMKKworT3B0aW9ucworICAgIC1mIHwgLS1maWxlIDxmaWxlbmFtZT4gIC0gVGhlIGZpbGUgb3IgZmlsZSBwYXRoIGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBlZGl0LiBXaGVuIG9taXR0ZWQsIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZpZ19maWxlCisgICAgLW8gfCAtLWZvcmNlICAgICAgICAgICAgLSBJZiB0aGUgc3ltYm9sIGlzbid0IHByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgd2hlbiBzZXR0aW5nIGl0J3MgdmFsdWUsIGEgI2RlZmluZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworRU9VCisKK215IEBleGNsdWRlZCA9IHF3KAorTUJFRFRMU19URVNUX05VTExfRU5UUk9QWQorTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKK01CRURUTFNfSEFWRV9TU0UyCitNQkVEVExTX1BMQVRGT1JNX05PX1NURF9GVU5DVElPTlMKK01CRURUTFNfRUNQX0RQX00yMjFfRU5BQkxFRAorTUJFRFRMU19FQ1BfRFBfTTM4M19FTkFCTEVECitNQkVEVExTX0VDUF9EUF9NNTExX0VOQUJMRUQKK01CRURUTFNfTk9fREVGQVVMVF9FTlRST1BZX1NPVVJDRVMKK01CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKK01CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTAorTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzCitNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCitNQkVEVExTX1pMSUJfU1VQUE9SVAorTUJFRFRMU19QS0NTMTFfQworX0FMVFxzKiQKKyk7CisKKyMgVGhpbmdzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgaW4gImZ1bGwiIGV2ZW4gaWYgdGhleSBtYXRjaCBAZXhjbHVkZWQKK215IEBub25fZXhjbHVkZWQgPSBxdygKK1BMQVRGT1JNX1tBLVowLTldK19BTFQKKyk7CisKKyMgUHJvY2VzcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworCitteSAkZm9yY2Vfb3B0aW9uID0gMDsKKworbXkgKCRhcmcsICRuYW1lLCAkdmFsdWUsICRhY3Rpb24pOworCit3aGlsZSAoJGFyZyA9IHNoaWZ0KSB7CisKKyAgICAjIENoZWNrIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBvcHRpb24KKyAgICBpZiAoJGFyZyBlcSAiLWYiIHx8ICRhcmcgZXEgIi0tZmlsZSIpIHsKKyAgICAgICAgJGNvbmZpZ19maWxlID0gc2hpZnQ7CisKKyAgICAgICAgLWYgJGNvbmZpZ19maWxlIG9yIGRpZSAiTm8gc3VjaCBmaWxlOiAkY29uZmlnX2ZpbGVcbiI7CisKKyAgICB9CisgICAgZWxzaWYgKCRhcmcgZXEgIi1vIiB8fCAkYXJnIGVxICItLWZvcmNlIikgeworICAgICAgICAkZm9yY2Vfb3B0aW9uID0gMTsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAjIC4uLmVsc2UgYXNzdW1lIGl0J3MgYSBjb21tYW5kCisgICAgICAgICRhY3Rpb24gPSAkYXJnOworCisgICAgICAgIGlmICgkYWN0aW9uIGVxICJmdWxsIiB8fCAkYWN0aW9uIGVxICJyZWFsZnVsbCIpIHsKKyAgICAgICAgICAgICMgTm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBkaWUgJHVzYWdlIGlmIEBBUkdWOworCisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCRhY3Rpb24gZXEgInVuc2V0IiB8fCAkYWN0aW9uIGVxICJnZXQiKSB7CisgICAgICAgICAgICBkaWUgJHVzYWdlIHVubGVzcyBAQVJHVjsKKyAgICAgICAgICAgICRuYW1lID0gc2hpZnQ7CisKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoJGFjdGlvbiBlcSAic2V0IikgeworICAgICAgICAgICAgZGllICR1c2FnZSB1bmxlc3MgQEFSR1Y7CisgICAgICAgICAgICAkbmFtZSA9IHNoaWZ0OworICAgICAgICAgICAgJHZhbHVlID0gc2hpZnQgaWYgQEFSR1Y7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiQ29tbWFuZCAnJGFjdGlvbicgbm90IHJlY29nbmlzZWQuXG5cbiIuJHVzYWdlOworICAgICAgICB9CisgICAgfQorfQorCisjIElmIG5vIGNvbW1hbmQgd2FzIHNwZWNpZmllZCwgZXhpdC4uLgoraWYgKCBub3QgZGVmaW5lZCgkYWN0aW9uKSApeyBkaWUgJHVzYWdlOyB9CisKKyMgQ2hlY2sgdGhlIGNvbmZpZyBmaWxlIGlzIHByZXNlbnQKK2lmICghIC1mICRjb25maWdfZmlsZSkgIHsKKworICAgIGNoZGlyICcuLicgb3IgZGllOworCisgICAgIyBDb25maXJtIHRoaXMgaXMgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgYW5kIHRyeSBhZ2FpbgorICAgIGlmICggISgtZCAnc2NyaXB0cycgJiYgLWQgJ2luY2x1ZGUnICYmIC1kICdsaWJyYXJ5JyAmJiAtZiAkY29uZmlnX2ZpbGUpICkgeworICAgICAgICBkaWUgIklmIG5vIGZpbGUgc3BlY2lmaWVkLCBtdXN0IGJlIHJ1biBmcm9tIHRoZSBwcm9qZWN0IHJvb3Qgb3Igc2NyaXB0cyBkaXJlY3RvcnkuXG4iOworICAgIH0KK30KKworCisjIE5vdyByZWFkIHRoZSBmaWxlIGFuZCBwcm9jZXNzIHRoZSBjb250ZW50cworCitvcGVuIG15ICRjb25maWdfcmVhZCwgJzwnLCAkY29uZmlnX2ZpbGUgb3IgZGllICJyZWFkICRjb25maWdfZmlsZTogJCFcbiI7CitteSBAY29uZmlnX2xpbmVzID0gPCRjb25maWdfcmVhZD47CitjbG9zZSAkY29uZmlnX3JlYWQ7CisKK215ICgkZXhjbHVkZV9yZSwgJG5vX2V4Y2x1ZGVfcmUpOworaWYgKCRhY3Rpb24gZXEgInJlYWxmdWxsIikgeworICAgICRleGNsdWRlX3JlID0gcXIvXiQvOworICAgICRub19leGNsdWRlX3JlID0gcXIvLi87Cit9IGVsc2UgeworICAgICRleGNsdWRlX3JlID0gam9pbiAnfCcsIEBleGNsdWRlZDsKKyAgICAkbm9fZXhjbHVkZV9yZSA9IGpvaW4gJ3wnLCBAbm9uX2V4Y2x1ZGVkOworfQorCitvcGVuIG15ICRjb25maWdfd3JpdGUsICc+JywgJGNvbmZpZ19maWxlIG9yIGRpZSAid3JpdGUgJGNvbmZpZ19maWxlOiAkIVxuIjsKKworbXkgJGRvbmU7Citmb3IgbXkgJGxpbmUgKEBjb25maWdfbGluZXMpIHsKKyAgICBpZiAoJGFjdGlvbiBlcSAiZnVsbCIgfHwgJGFjdGlvbiBlcSAicmVhbGZ1bGwiKSB7CisgICAgICAgIGlmICgkbGluZSA9fiAvbmFtZSBTRUNUSU9OOiBNb2R1bGUgY29uZmlndXJhdGlvbiBvcHRpb25zLykgeworICAgICAgICAgICAgJGRvbmUgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEkZG9uZSAmJiAkbGluZSA9fiBtIV4vL1xzPyNkZWZpbmUhICYmCisgICAgICAgICAgICAgICAgKCAkbGluZSAhfiAvJGV4Y2x1ZGVfcmUvIHx8ICRsaW5lID1+IC8kbm9fZXhjbHVkZV9yZS8gKSApIHsKKyAgICAgICAgICAgICRsaW5lID1+IHMhXi8vXHM/ISE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEkZG9uZSAmJiAkbGluZSA9fiBtIV5ccz8jZGVmaW5lISAmJgorICAgICAgICAgICAgICAgICEgKCAkbGluZSAhfiAvJGV4Y2x1ZGVfcmUvIHx8ICRsaW5lID1+IC8kbm9fZXhjbHVkZV9yZS8gKSApIHsKKyAgICAgICAgICAgICRsaW5lID1+IHMhXiEvLyE7CisgICAgICAgIH0KKyAgICB9IGVsc2lmICgkYWN0aW9uIGVxICJ1bnNldCIpIHsKKyAgICAgICAgaWYgKCEkZG9uZSAmJiAkbGluZSA9fiAvXlxzKiNkZWZpbmVccyokbmFtZVxiLykgeworICAgICAgICAgICAgJGxpbmUgPSAnLy8nIC4gJGxpbmU7CisgICAgICAgICAgICAkZG9uZSA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2lmICghJGRvbmUgJiYgJGFjdGlvbiBlcSAic2V0IikgeworICAgICAgICBpZiAoJGxpbmUgPX4gbSFeKD86Ly8pP1xzKiNkZWZpbmVccyokbmFtZVxiISkgeworICAgICAgICAgICAgJGxpbmUgPSAiI2RlZmluZSAkbmFtZSI7CisgICAgICAgICAgICAkbGluZSAuPSAiICR2YWx1ZSIgaWYgZGVmaW5lZCAkdmFsdWUgJiYgJHZhbHVlIG5lICIiOworICAgICAgICAgICAgJGxpbmUgLj0gIlxuIjsKKyAgICAgICAgICAgICRkb25lID0gMTsKKyAgICAgICAgfQorICAgIH0gZWxzaWYgKCEkZG9uZSAmJiAkYWN0aW9uIGVxICJnZXQiKSB7CisgICAgICAgIGlmICgkbGluZSA9fiAvXlxzKiNkZWZpbmVccyokbmFtZVxzKiguKilccypcYi8pIHsKKyAgICAgICAgICAgICR2YWx1ZSA9ICQxOworICAgICAgICAgICAgJGRvbmUgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpbnQgJGNvbmZpZ193cml0ZSAkbGluZTsKK30KKworIyBEaWQgdGhlIHNldCBjb21tYW5kIHdvcms/CitpZiAoJGFjdGlvbiBlcSAic2V0IiYmICRmb3JjZV9vcHRpb24gJiYgISRkb25lKSB7CisKKyAgICAjIElmIHRoZSBmb3JjZSBvcHRpb24gd2FzIHNldCwgYXBwZW5kIHRoZSBzeW1ib2wgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgIG15ICRsaW5lID0gIiNkZWZpbmUgJG5hbWUiOworICAgICRsaW5lIC49ICIgJHZhbHVlIiBpZiBkZWZpbmVkICR2YWx1ZSAmJiAkdmFsdWUgbmUgIiI7CisgICAgJGxpbmUgLj0gIlxuIjsKKyAgICAkZG9uZSA9IDE7CisKKyAgICBwcmludCAkY29uZmlnX3dyaXRlICRsaW5lOworfQorCitjbG9zZSAkY29uZmlnX3dyaXRlOworCitpZiAoJGFjdGlvbiBlcSAiZ2V0IikgeworICAgIGlmKCRkb25lKSB7CisgICAgICAgIGlmICgkdmFsdWUgbmUgJycpIHsKKyAgICAgICAgICAgIHByaW50ICR2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBleGl0IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBJZiB0aGUgc3ltYm9sIHdhcyBub3QgZm91bmQsIHJldHVybiBhbiBlcnJvcgorICAgICAgICBleGl0IC0xOworICAgIH0KK30KKworaWYgKCRhY3Rpb24gZXEgImZ1bGwiICYmICEkZG9uZSkgeworICAgIGRpZSAiQ29uZmlndXJhdGlvbiBzZWN0aW9uIHdhcyBub3QgZm91bmQgaW4gJGNvbmZpZ19maWxlXG4iOworCit9CisKK2lmICgkYWN0aW9uIG5lICJmdWxsIiAmJiAkYWN0aW9uIG5lICJ1bnNldCIgJiYgISRkb25lKSB7CisgICAgZGllICJBICNkZWZpbmUgZm9yIHRoZSBzeW1ib2wgJG5hbWUgd2FzIG5vdCBmb3VuZCBpbiAkY29uZmlnX2ZpbGVcbiI7Cit9CisKK19fRU5EX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvZXJyb3IuZm10IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy9lcnJvci5mbXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4NzQyYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvZXJyb3IuZm10CkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogIEVycm9yIG1lc3NhZ2UgaW5mb3JtYXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKSB8fCBkZWZpbmVkKE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkpCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2RlZmluZSBtYmVkdGxzX3NucHJpbnRmIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfdGltZV90ICAgdGltZV90CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworSEVBREVSX0lOQ0xVREVECisKK3ZvaWQgbWJlZHRsc19zdHJlcnJvciggaW50IHJldCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuICkKK3sKKyAgICBzaXplX3QgbGVuOworICAgIGludCB1c2VfcmV0OworCisgICAgaWYoIGJ1ZmxlbiA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtc2V0KCBidWYsIDB4MDAsIGJ1ZmxlbiApOworCisgICAgaWYoIHJldCA8IDAgKQorICAgICAgICByZXQgPSAtcmV0OworCisgICAgaWYoIHJldCAmIDB4RkY4MCApCisgICAgeworICAgICAgICB1c2VfcmV0ID0gcmV0ICYgMHhGRjgwOworCisgICAgICAgIC8vIEhpZ2ggbGV2ZWwgZXJyb3IgY29kZXMKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQkVHSU4gZ2VuZXJhdGVkIGNvZGUKK0hJR0hfTEVWRUxfQ09ERV9DSEVDS1MKKyAgICAgICAgLy8gRU5EIGdlbmVyYXRlZCBjb2RlCisKKyAgICAgICAgaWYoIHN0cmxlbiggYnVmICkgPT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlVOS05PV04gRVJST1IgQ09ERSAoJTA0WCkiLCB1c2VfcmV0ICk7CisgICAgfQorCisgICAgdXNlX3JldCA9IHJldCAmIH4weEZGODA7CisKKyAgICBpZiggdXNlX3JldCA9PSAwICkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgaGlnaCBsZXZlbCBjb2RlIGlzIHByZXNlbnQsIG1ha2UgYSBjb25jYXRlbmF0aW9uIGJldHdlZW4gYm90aAorICAgIC8vIGVycm9yIHN0cmluZ3MuCisgICAgLy8KKyAgICBsZW4gPSBzdHJsZW4oIGJ1ZiApOworCisgICAgaWYoIGxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgaWYoIGJ1ZmxlbiAtIGxlbiA8IDUgKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1iZWR0bHNfc25wcmludGYoIGJ1ZiArIGxlbiwgYnVmbGVuIC0gbGVuLCAiIDogIiApOworCisgICAgICAgIGJ1ZiArPSBsZW4gKyAzOworICAgICAgICBidWZsZW4gLT0gbGVuICsgMzsKKyAgICB9CisKKyAgICAvLyBMb3cgbGV2ZWwgZXJyb3IgY29kZXMKKyAgICAvLworICAgIC8vIEJFR0lOIGdlbmVyYXRlZCBjb2RlCitMT1dfTEVWRUxfQ09ERV9DSEVDS1MKKyAgICAvLyBFTkQgZ2VuZXJhdGVkIGNvZGUKKworICAgIGlmKCBzdHJsZW4oIGJ1ZiApICE9IDAgKQorICAgICAgICByZXR1cm47CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgIlVOS05PV04gRVJST1IgQ09ERSAoJTA0WCkiLCB1c2VfcmV0ICk7Cit9CisKKyNlbHNlIC8qIE1CRURUTFNfRVJST1JfQyAqLworCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX1NUUkVSUk9SX0RVTU1ZKQorCisvKgorICogUHJvdmlkZSBhbiBub24tZnVuY3Rpb24gaW4gY2FzZSBNQkVEVExTX0VSUk9SX0MgaXMgbm90IGRlZmluZWQKKyAqLwordm9pZCBtYmVkdGxzX3N0cmVycm9yKCBpbnQgcmV0LCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4gKQoreworICAgICgodm9pZCkgcmV0KTsKKworICAgIGlmKCBidWZsZW4gPiAwICkKKyAgICAgICAgYnVmWzBdID0gJ1wwJzsKK30KKworI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfU1RSRVJST1JfRFVNTVkgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy9yZW5hbWUtMS4zLTIuMC50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3JlbmFtZS0xLjMtMi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTdmNmJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy9yZW5hbWUtMS4zLTIuMC50eHQKQEAgLTAsMCArMSwyMTc1IEBACitBRVNfREVDUllQVCBNQkVEVExTX0FFU19ERUNSWVBUCitBRVNfRU5DUllQVCBNQkVEVExTX0FFU19FTkNSWVBUCitBU04xX0JJVF9TVFJJTkcgTUJFRFRMU19BU04xX0JJVF9TVFJJTkcKK0FTTjFfQk1QX1NUUklORyBNQkVEVExTX0FTTjFfQk1QX1NUUklORworQVNOMV9CT09MRUFOIE1CRURUTFNfQVNOMV9CT09MRUFOCitBU04xX0NIS19BREQgTUJFRFRMU19BU04xX0NIS19BREQKK0FTTjFfQ09OU1RSVUNURUQgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVECitBU04xX0NPTlRFWFRfU1BFQ0lGSUMgTUJFRFRMU19BU04xX0NPTlRFWFRfU1BFQ0lGSUMKK0FTTjFfR0VORVJBTElaRURfVElNRSBNQkVEVExTX0FTTjFfR0VORVJBTElaRURfVElNRQorQVNOMV9JQTVfU1RSSU5HIE1CRURUTFNfQVNOMV9JQTVfU1RSSU5HCitBU04xX0lOVEVHRVIgTUJFRFRMU19BU04xX0lOVEVHRVIKK0FTTjFfTlVMTCBNQkVEVExTX0FTTjFfTlVMTAorQVNOMV9PQ1RFVF9TVFJJTkcgTUJFRFRMU19BU04xX09DVEVUX1NUUklORworQVNOMV9PSUQgTUJFRFRMU19BU04xX09JRAorQVNOMV9QUklNSVRJVkUgTUJFRFRMU19BU04xX1BSSU1JVElWRQorQVNOMV9QUklOVEFCTEVfU1RSSU5HIE1CRURUTFNfQVNOMV9QUklOVEFCTEVfU1RSSU5HCitBU04xX1NFUVVFTkNFIE1CRURUTFNfQVNOMV9TRVFVRU5DRQorQVNOMV9TRVQgTUJFRFRMU19BU04xX1NFVAorQVNOMV9UNjFfU1RSSU5HIE1CRURUTFNfQVNOMV9UNjFfU1RSSU5HCitBU04xX1VOSVZFUlNBTF9TVFJJTkcgTUJFRFRMU19BU04xX1VOSVZFUlNBTF9TVFJJTkcKK0FTTjFfVVRDX1RJTUUgTUJFRFRMU19BU04xX1VUQ19USU1FCitBU04xX1VURjhfU1RSSU5HIE1CRURUTFNfQVNOMV9VVEY4X1NUUklORworQkFEQ0VSVF9DTl9NSVNNQVRDSCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSAorQkFEQ0VSVF9FWFBJUkVEIE1CRURUTFNfWDUwOV9CQURDRVJUX0VYUElSRUQKK0JBRENFUlRfRVhUX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFRfS0VZX1VTQUdFCitCQURDRVJUX0ZVVFVSRSBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkUKK0JBRENFUlRfS0VZX1VTQUdFIE1CRURUTFNfWDUwOV9CQURDRVJUX0tFWV9VU0FHRQorQkFEQ0VSVF9NSVNTSU5HIE1CRURUTFNfWDUwOV9CQURDRVJUX01JU1NJTkcKK0JBRENFUlRfTk9UX1RSVVNURUQgTUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQKK0JBRENFUlRfTlNfQ0VSVF9UWVBFIE1CRURUTFNfWDUwOV9CQURDRVJUX05TX0NFUlRfVFlQRQorQkFEQ0VSVF9PVEhFUiBNQkVEVExTX1g1MDlfQkFEQ0VSVF9PVEhFUgorQkFEQ0VSVF9SRVZPS0VEIE1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQKK0JBRENFUlRfU0tJUF9WRVJJRlkgTUJFRFRMU19YNTA5X0JBRENFUlRfU0tJUF9WRVJJRlkKK0JBRENSTF9FWFBJUkVEIE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRAorQkFEQ1JMX0ZVVFVSRSBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRQorQkFEQ1JMX05PVF9UUlVTVEVEIE1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQKK0JMT1dGSVNIX0JMT0NLU0laRSBNQkVEVExTX0JMT1dGSVNIX0JMT0NLU0laRQorQkxPV0ZJU0hfREVDUllQVCBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQKK0JMT1dGSVNIX0VOQ1JZUFQgTUJFRFRMU19CTE9XRklTSF9FTkNSWVBUCitCTE9XRklTSF9NQVhfS0VZIE1CRURUTFNfQkxPV0ZJU0hfTUFYX0tFWV9CSVRTCitCTE9XRklTSF9NSU5fS0VZIE1CRURUTFNfQkxPV0ZJU0hfTUlOX0tFWV9CSVRTCitCTE9XRklTSF9ST1VORFMgTUJFRFRMU19CTE9XRklTSF9ST1VORFMKK0NBTUVMTElBX0RFQ1JZUFQgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBUCitDQU1FTExJQV9FTkNSWVBUIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVAorQ09MTEVDVF9TSVpFIE1CRURUTFNfSEFWRUdFX0NPTExFQ1RfU0laRQorQ1RSX0RSQkdfQkxPQ0tTSVpFIE1CRURUTFNfQ1RSX0RSQkdfQkxPQ0tTSVpFCitDVFJfRFJCR19FTlRST1BZX0xFTiBNQkVEVExTX0NUUl9EUkJHX0VOVFJPUFlfTEVOCitDVFJfRFJCR19LRVlCSVRTIE1CRURUTFNfQ1RSX0RSQkdfS0VZQklUUworQ1RSX0RSQkdfS0VZU0laRSBNQkVEVExTX0NUUl9EUkJHX0tFWVNJWkUKK0NUUl9EUkJHX01BWF9JTlBVVCBNQkVEVExTX0NUUl9EUkJHX01BWF9JTlBVVAorQ1RSX0RSQkdfTUFYX1JFUVVFU1QgTUJFRFRMU19DVFJfRFJCR19NQVhfUkVRVUVTVAorQ1RSX0RSQkdfTUFYX1NFRURfSU5QVVQgTUJFRFRMU19DVFJfRFJCR19NQVhfU0VFRF9JTlBVVAorQ1RSX0RSQkdfUFJfT0ZGIE1CRURUTFNfQ1RSX0RSQkdfUFJfT0ZGCitDVFJfRFJCR19QUl9PTiBNQkVEVExTX0NUUl9EUkJHX1BSX09OCitDVFJfRFJCR19SRVNFRURfSU5URVJWQUwgTUJFRFRMU19DVFJfRFJCR19SRVNFRURfSU5URVJWQUwKK0NUUl9EUkJHX1NFRURMRU4gTUJFRFRMU19DVFJfRFJCR19TRUVETEVOCitERVBSRUNBVEVEIE1CRURUTFNfREVQUkVDQVRFRAorREVTX0RFQ1JZUFQgTUJFRFRMU19ERVNfREVDUllQVAorREVTX0VOQ1JZUFQgTUJFRFRMU19ERVNfRU5DUllQVAorREVTX0tFWV9TSVpFIE1CRURUTFNfREVTX0tFWV9TSVpFCitFTlRST1BZX0JMT0NLX1NJWkUgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUKK0VOVFJPUFlfTUFYX0dBVEhFUiBNQkVEVExTX0VOVFJPUFlfTUFYX0dBVEhFUgorRU5UUk9QWV9NQVhfU0VFRF9TSVpFIE1CRURUTFNfRU5UUk9QWV9NQVhfU0VFRF9TSVpFCitFTlRST1BZX01BWF9TT1VSQ0VTIE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUworRU5UUk9QWV9NSU5fSEFSRENMT0NLIE1CRURUTFNfRU5UUk9QWV9NSU5fSEFSRENMT0NLCitFTlRST1BZX01JTl9IQVZFR0UgTUJFRFRMU19FTlRST1BZX01JTl9IQVZFR0UKK0VOVFJPUFlfTUlOX1BMQVRGT1JNIE1CRURUTFNfRU5UUk9QWV9NSU5fUExBVEZPUk0KK0VOVFJPUFlfU09VUkNFX01BTlVBTCBNQkVEVExTX0VOVFJPUFlfU09VUkNFX01BTlVBTAorRVhUX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUiBNQkVEVExTX1g1MDlfRVhUX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUgorRVhUX0JBU0lDX0NPTlNUUkFJTlRTIE1CRURUTFNfWDUwOV9FWFRfQkFTSUNfQ09OU1RSQUlOVFMKK0VYVF9DRVJUSUZJQ0FURV9QT0xJQ0lFUyBNQkVEVExTX1g1MDlfRVhUX0NFUlRJRklDQVRFX1BPTElDSUVTCitFWFRfQ1JMX0RJU1RSSUJVVElPTl9QT0lOVFMgTUJFRFRMU19YNTA5X0VYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUworRVhUX0VYVEVOREVEX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfRVhUX0VYVEVOREVEX0tFWV9VU0FHRQorRVhUX0ZSRVNIRVNUX0NSTCBNQkVEVExTX1g1MDlfRVhUX0ZSRVNIRVNUX0NSTAorRVhUX0lOSUhJQklUX0FOWVBPTElDWSBNQkVEVExTX1g1MDlfRVhUX0lOSUhJQklUX0FOWVBPTElDWQorRVhUX0lTU1VFUl9BTFRfTkFNRSBNQkVEVExTX1g1MDlfRVhUX0lTU1VFUl9BTFRfTkFNRQorRVhUX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfRVhUX0tFWV9VU0FHRQorRVhUX05BTUVfQ09OU1RSQUlOVFMgTUJFRFRMU19YNTA5X0VYVF9OQU1FX0NPTlNUUkFJTlRTCitFWFRfTlNfQ0VSVF9UWVBFIE1CRURUTFNfWDUwOV9FWFRfTlNfQ0VSVF9UWVBFCitFWFRfUE9MSUNZX0NPTlNUUkFJTlRTIE1CRURUTFNfWDUwOV9FWFRfUE9MSUNZX0NPTlNUUkFJTlRTCitFWFRfUE9MSUNZX01BUFBJTkdTIE1CRURUTFNfWDUwOV9FWFRfUE9MSUNZX01BUFBJTkdTCitFWFRfU1VCSkVDVF9BTFRfTkFNRSBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfQUxUX05BTUUKK0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSUyBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfRElSRUNUT1JZX0FUVFJTCitFWFRfU1VCSkVDVF9LRVlfSURFTlRJRklFUiBNQkVEVExTX1g1MDlfRVhUX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIKK0dDTV9ERUNSWVBUIE1CRURUTFNfR0NNX0RFQ1JZUFQKK0dDTV9FTkNSWVBUIE1CRURUTFNfR0NNX0VOQ1JZUFQKK0tVX0NSTF9TSUdOIE1CRURUTFNfWDUwOV9LVV9DUkxfU0lHTgorS1VfREFUQV9FTkNJUEhFUk1FTlQgTUJFRFRMU19YNTA5X0tVX0RBVEFfRU5DSVBIRVJNRU5UCitLVV9ESUdJVEFMX1NJR05BVFVSRSBNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkUKK0tVX0tFWV9BR1JFRU1FTlQgTUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQKK0tVX0tFWV9DRVJUX1NJR04gTUJFRFRMU19YNTA5X0tVX0tFWV9DRVJUX1NJR04KK0tVX0tFWV9FTkNJUEhFUk1FTlQgTUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlQKK0tVX05PTl9SRVBVRElBVElPTiBNQkVEVExTX1g1MDlfS1VfTk9OX1JFUFVESUFUSU9OCitMTl8yX0RJVl9MTl8xMF9TQ0FMRTEwMCBNQkVEVExTX0xOXzJfRElWX0xOXzEwX1NDQUxFMTAwCitNRF9DT05URVhUX1RfSU5JVCBNQkVEVExTX01EX0NPTlRFWFRfVF9JTklUCitNRU1PUllfVkVSSUZZX0FMTE9DIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9BTExPQworTUVNT1JZX1ZFUklGWV9BTFdBWVMgTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMV0FZUworTUVNT1JZX1ZFUklGWV9GUkVFIE1CRURUTFNfTUVNT1JZX1ZFUklGWV9GUkVFCitNRU1PUllfVkVSSUZZX05PTkUgTUJFRFRMU19NRU1PUllfVkVSSUZZX05PTkUKK01QSV9DSEsgTUJFRFRMU19NUElfQ0hLCitORVRfUFJPVE9fVENQIE1CRURUTFNfTkVUX1BST1RPX1RDUAorTkVUX1BST1RPX1VEUCBNQkVEVExTX05FVF9QUk9UT19VRFAKK05TX0NFUlRfVFlQRV9FTUFJTCBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX0VNQUlMCitOU19DRVJUX1RZUEVfRU1BSUxfQ0EgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9FTUFJTF9DQQorTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HIE1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfT0JKRUNUX1NJR05JTkcKK05TX0NFUlRfVFlQRV9PQkpFQ1RfU0lHTklOR19DQSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX09CSkVDVF9TSUdOSU5HX0NBCitOU19DRVJUX1RZUEVfUkVTRVJWRUQgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9SRVNFUlZFRAorTlNfQ0VSVF9UWVBFX1NTTF9DQSBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9DQQorTlNfQ0VSVF9UWVBFX1NTTF9DTElFTlQgTUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfQ0xJRU5UCitOU19DRVJUX1RZUEVfU1NMX1NFUlZFUiBNQkVEVExTX1g1MDlfTlNfQ0VSVF9UWVBFX1NTTF9TRVJWRVIKK09JRF9BTlNJX1g5XzYyIE1CRURUTFNfT0lEX0FOU0lfWDlfNjIKK09JRF9BTlNJX1g5XzYyX0ZJRUxEX1RZUEUgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9GSUVMRF9UWVBFCitPSURfQU5TSV9YOV82Ml9QUklNRV9GSUVMRCBNQkVEVExTX09JRF9BTlNJX1g5XzYyX1BSSU1FX0ZJRUxECitPSURfQU5TSV9YOV82Ml9TSUcgTUJFRFRMU19PSURfQU5TSV9YOV82Ml9TSUcKK09JRF9BTlNJX1g5XzYyX1NJR19TSEEyIE1CRURUTFNfT0lEX0FOU0lfWDlfNjJfU0lHX1NIQTIKK09JRF9BTllfRVhURU5ERURfS0VZX1VTQUdFIE1CRURUTFNfT0lEX0FOWV9FWFRFTkRFRF9LRVlfVVNBR0UKK09JRF9BVCBNQkVEVExTX09JRF9BVAorT0lEX0FUX0NOIE1CRURUTFNfT0lEX0FUX0NOCitPSURfQVRfQ09VTlRSWSBNQkVEVExTX09JRF9BVF9DT1VOVFJZCitPSURfQVRfRE5fUVVBTElGSUVSIE1CRURUTFNfT0lEX0FUX0ROX1FVQUxJRklFUgorT0lEX0FUX0dFTkVSQVRJT05fUVVBTElGSUVSIE1CRURUTFNfT0lEX0FUX0dFTkVSQVRJT05fUVVBTElGSUVSCitPSURfQVRfR0lWRU5fTkFNRSBNQkVEVExTX09JRF9BVF9HSVZFTl9OQU1FCitPSURfQVRfSU5JVElBTFMgTUJFRFRMU19PSURfQVRfSU5JVElBTFMKK09JRF9BVF9MT0NBTElUWSBNQkVEVExTX09JRF9BVF9MT0NBTElUWQorT0lEX0FUX09SR0FOSVpBVElPTiBNQkVEVExTX09JRF9BVF9PUkdBTklaQVRJT04KK09JRF9BVF9PUkdfVU5JVCBNQkVEVExTX09JRF9BVF9PUkdfVU5JVAorT0lEX0FUX1BPU1RBTF9BRERSRVNTIE1CRURUTFNfT0lEX0FUX1BPU1RBTF9BRERSRVNTCitPSURfQVRfUE9TVEFMX0NPREUgTUJFRFRMU19PSURfQVRfUE9TVEFMX0NPREUKK09JRF9BVF9QU0VVRE9OWU0gTUJFRFRMU19PSURfQVRfUFNFVURPTllNCitPSURfQVRfU0VSSUFMX05VTUJFUiBNQkVEVExTX09JRF9BVF9TRVJJQUxfTlVNQkVSCitPSURfQVRfU1RBVEUgTUJFRFRMU19PSURfQVRfU1RBVEUKK09JRF9BVF9TVVJfTkFNRSBNQkVEVExTX09JRF9BVF9TVVJfTkFNRQorT0lEX0FUX1RJVExFIE1CRURUTFNfT0lEX0FUX1RJVExFCitPSURfQVRfVU5JUVVFX0lERU5USUZJRVIgTUJFRFRMU19PSURfQVRfVU5JUVVFX0lERU5USUZJRVIKK09JRF9BVVRIT1JJVFlfS0VZX0lERU5USUZJRVIgTUJFRFRMU19PSURfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSCitPSURfQkFTSUNfQ09OU1RSQUlOVFMgTUJFRFRMU19PSURfQkFTSUNfQ09OU1RSQUlOVFMKK09JRF9DRVJUSUNPTSBNQkVEVExTX09JRF9DRVJUSUNPTQorT0lEX0NFUlRJRklDQVRFX1BPTElDSUVTIE1CRURUTFNfT0lEX0NFUlRJRklDQVRFX1BPTElDSUVTCitPSURfQ0xJRU5UX0FVVEggTUJFRFRMU19PSURfQ0xJRU5UX0FVVEgKK09JRF9DTVAgTUJFRFRMU19PSURfQ01QCitPSURfQ09ERV9TSUdOSU5HIE1CRURUTFNfT0lEX0NPREVfU0lHTklORworT0lEX0NPVU5UUllfVVMgTUJFRFRMU19PSURfQ09VTlRSWV9VUworT0lEX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTIE1CRURUTFNfT0lEX0NSTF9ESVNUUklCVVRJT05fUE9JTlRTCitPSURfQ1JMX05VTUJFUiBNQkVEVExTX09JRF9DUkxfTlVNQkVSCitPSURfREVTX0NCQyBNQkVEVExTX09JRF9ERVNfQ0JDCitPSURfREVTX0VERTNfQ0JDIE1CRURUTFNfT0lEX0RFU19FREUzX0NCQworT0lEX0RJR0VTVF9BTEdfTUQyIE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfTUQyCitPSURfRElHRVNUX0FMR19NRDQgTUJFRFRMU19PSURfRElHRVNUX0FMR19NRDQKK09JRF9ESUdFU1RfQUxHX01ENSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX01ENQorT0lEX0RJR0VTVF9BTEdfU0hBMSBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTEKK09JRF9ESUdFU1RfQUxHX1NIQTIyNCBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTIyNAorT0lEX0RJR0VTVF9BTEdfU0hBMjU2IE1CRURUTFNfT0lEX0RJR0VTVF9BTEdfU0hBMjU2CitPSURfRElHRVNUX0FMR19TSEEzODQgTUJFRFRMU19PSURfRElHRVNUX0FMR19TSEEzODQKK09JRF9ESUdFU1RfQUxHX1NIQTUxMiBNQkVEVExTX09JRF9ESUdFU1RfQUxHX1NIQTUxMgorT0lEX0RPTUFJTl9DT01QT05FTlQgTUJFRFRMU19PSURfRE9NQUlOX0NPTVBPTkVOVAorT0lEX0VDRFNBX1NIQTEgTUJFRFRMU19PSURfRUNEU0FfU0hBMQorT0lEX0VDRFNBX1NIQTIyNCBNQkVEVExTX09JRF9FQ0RTQV9TSEEyMjQKK09JRF9FQ0RTQV9TSEEyNTYgTUJFRFRMU19PSURfRUNEU0FfU0hBMjU2CitPSURfRUNEU0FfU0hBMzg0IE1CRURUTFNfT0lEX0VDRFNBX1NIQTM4NAorT0lEX0VDRFNBX1NIQTUxMiBNQkVEVExTX09JRF9FQ0RTQV9TSEE1MTIKK09JRF9FQ19BTEdfRUNESCBNQkVEVExTX09JRF9FQ19BTEdfRUNESAorT0lEX0VDX0FMR19VTlJFU1RSSUNURUQgTUJFRFRMU19PSURfRUNfQUxHX1VOUkVTVFJJQ1RFRAorT0lEX0VDX0JSQUlOUE9PTF9WMSBNQkVEVExTX09JRF9FQ19CUkFJTlBPT0xfVjEKK09JRF9FQ19HUlBfQlAyNTZSMSBNQkVEVExTX09JRF9FQ19HUlBfQlAyNTZSMQorT0lEX0VDX0dSUF9CUDM4NFIxIE1CRURUTFNfT0lEX0VDX0dSUF9CUDM4NFIxCitPSURfRUNfR1JQX0JQNTEyUjEgTUJFRFRMU19PSURfRUNfR1JQX0JQNTEyUjEKK09JRF9FQ19HUlBfU0VDUDE5MksxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMTkySzEKK09JRF9FQ19HUlBfU0VDUDE5MlIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMTkyUjEKK09JRF9FQ19HUlBfU0VDUDIyNEsxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjI0SzEKK09JRF9FQ19HUlBfU0VDUDIyNFIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjI0UjEKK09JRF9FQ19HUlBfU0VDUDI1NksxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2SzEKK09JRF9FQ19HUlBfU0VDUDI1NlIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMjU2UjEKK09JRF9FQ19HUlBfU0VDUDM4NFIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQMzg0UjEKK09JRF9FQ19HUlBfU0VDUDUyMVIxIE1CRURUTFNfT0lEX0VDX0dSUF9TRUNQNTIxUjEKK09JRF9FTUFJTF9QUk9URUNUSU9OIE1CRURUTFNfT0lEX0VNQUlMX1BST1RFQ1RJT04KK09JRF9FWFRFTkRFRF9LRVlfVVNBR0UgTUJFRFRMU19PSURfRVhURU5ERURfS0VZX1VTQUdFCitPSURfRlJFU0hFU1RfQ1JMIE1CRURUTFNfT0lEX0ZSRVNIRVNUX0NSTAorT0lEX0dPViBNQkVEVExTX09JRF9HT1YKK09JRF9ITUFDX1NIQTEgTUJFRFRMU19PSURfSE1BQ19TSEExCitPSURfSURfQ0UgTUJFRFRMU19PSURfSURfQ0UKK09JRF9JTklISUJJVF9BTllQT0xJQ1kgTUJFRFRMU19PSURfSU5JSElCSVRfQU5ZUE9MSUNZCitPSURfSVNPX0NDSVRUX0RTIE1CRURUTFNfT0lEX0lTT19DQ0lUVF9EUworT0lEX0lTT19JREVOVElGSUVEX09SRyBNQkVEVExTX09JRF9JU09fSURFTlRJRklFRF9PUkcKK09JRF9JU09fSVRVX0NPVU5UUlkgTUJFRFRMU19PSURfSVNPX0lUVV9DT1VOVFJZCitPSURfSVNPX0lUVV9VU19PUkcgTUJFRFRMU19PSURfSVNPX0lUVV9VU19PUkcKK09JRF9JU09fTUVNQkVSX0JPRElFUyBNQkVEVExTX09JRF9JU09fTUVNQkVSX0JPRElFUworT0lEX0lTU1VFUl9BTFRfTkFNRSBNQkVEVExTX09JRF9JU1NVRVJfQUxUX05BTUUKK09JRF9LRVlfVVNBR0UgTUJFRFRMU19PSURfS0VZX1VTQUdFCitPSURfS1AgTUJFRFRMU19PSURfS1AKK09JRF9NR0YxIE1CRURUTFNfT0lEX01HRjEKK09JRF9OQU1FX0NPTlNUUkFJTlRTIE1CRURUTFNfT0lEX05BTUVfQ09OU1RSQUlOVFMKK09JRF9ORVRTQ0FQRSBNQkVEVExTX09JRF9ORVRTQ0FQRQorT0lEX05TX0JBU0VfVVJMIE1CRURUTFNfT0lEX05TX0JBU0VfVVJMCitPSURfTlNfQ0FfUE9MSUNZX1VSTCBNQkVEVExTX09JRF9OU19DQV9QT0xJQ1lfVVJMCitPSURfTlNfQ0FfUkVWT0NBVElPTl9VUkwgTUJFRFRMU19PSURfTlNfQ0FfUkVWT0NBVElPTl9VUkwKK09JRF9OU19DRVJUIE1CRURUTFNfT0lEX05TX0NFUlQKK09JRF9OU19DRVJUX1NFUVVFTkNFIE1CRURUTFNfT0lEX05TX0NFUlRfU0VRVUVOQ0UKK09JRF9OU19DRVJUX1RZUEUgTUJFRFRMU19PSURfTlNfQ0VSVF9UWVBFCitPSURfTlNfQ09NTUVOVCBNQkVEVExTX09JRF9OU19DT01NRU5UCitPSURfTlNfREFUQV9UWVBFIE1CRURUTFNfT0lEX05TX0RBVEFfVFlQRQorT0lEX05TX1JFTkVXQUxfVVJMIE1CRURUTFNfT0lEX05TX1JFTkVXQUxfVVJMCitPSURfTlNfUkVWT0NBVElPTl9VUkwgTUJFRFRMU19PSURfTlNfUkVWT0NBVElPTl9VUkwKK09JRF9OU19TU0xfU0VSVkVSX05BTUUgTUJFRFRMU19PSURfTlNfU1NMX1NFUlZFUl9OQU1FCitPSURfT0NTUF9TSUdOSU5HIE1CRURUTFNfT0lEX09DU1BfU0lHTklORworT0lEX09JV19TRUNTSUcgTUJFRFRMU19PSURfT0lXX1NFQ1NJRworT0lEX09JV19TRUNTSUdfQUxHIE1CRURUTFNfT0lEX09JV19TRUNTSUdfQUxHCitPSURfT0lXX1NFQ1NJR19TSEExIE1CRURUTFNfT0lEX09JV19TRUNTSUdfU0hBMQorT0lEX09SR0FOSVpBVElPTiBNQkVEVExTX09JRF9PUkdBTklaQVRJT04KK09JRF9PUkdfQU5TSV9YOV82MiBNQkVEVExTX09JRF9PUkdfQU5TSV9YOV82MgorT0lEX09SR19DRVJUSUNPTSBNQkVEVExTX09JRF9PUkdfQ0VSVElDT00KK09JRF9PUkdfRE9EIE1CRURUTFNfT0lEX09SR19ET0QKK09JRF9PUkdfR09WIE1CRURUTFNfT0lEX09SR19HT1YKK09JRF9PUkdfTkVUU0NBUEUgTUJFRFRMU19PSURfT1JHX05FVFNDQVBFCitPSURfT1JHX09JVyBNQkVEVExTX09JRF9PUkdfT0lXCitPSURfT1JHX1JTQV9EQVRBX1NFQ1VSSVRZIE1CRURUTFNfT0lEX09SR19SU0FfREFUQV9TRUNVUklUWQorT0lEX09SR19URUxFVFJVU1QgTUJFRFRMU19PSURfT1JHX1RFTEVUUlVTVAorT0lEX1BLQ1MgTUJFRFRMU19PSURfUEtDUworT0lEX1BLQ1MxIE1CRURUTFNfT0lEX1BLQ1MxCitPSURfUEtDUzEyIE1CRURUTFNfT0lEX1BLQ1MxMgorT0lEX1BLQ1MxMl9QQkUgTUJFRFRMU19PSURfUEtDUzEyX1BCRQorT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMyX0VERV9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX0RFUzJfRURFX0NCQworT0lEX1BLQ1MxMl9QQkVfU0hBMV9ERVMzX0VERV9DQkMgTUJFRFRMU19PSURfUEtDUzEyX1BCRV9TSEExX0RFUzNfRURFX0NCQworT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzJfMTI4X0NCQyBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzEyOF9DQkMKK09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzQwX0NCQyBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkMyXzQwX0NCQworT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfMTI4IE1CRURUTFNfT0lEX1BLQ1MxMl9QQkVfU0hBMV9SQzRfMTI4CitPSURfUEtDUzEyX1BCRV9TSEExX1JDNF80MCBNQkVEVExTX09JRF9QS0NTMTJfUEJFX1NIQTFfUkM0XzQwCitPSURfUEtDUzFfTUQyIE1CRURUTFNfT0lEX1BLQ1MxX01EMgorT0lEX1BLQ1MxX01ENCBNQkVEVExTX09JRF9QS0NTMV9NRDQKK09JRF9QS0NTMV9NRDUgTUJFRFRMU19PSURfUEtDUzFfTUQ1CitPSURfUEtDUzFfUlNBIE1CRURUTFNfT0lEX1BLQ1MxX1JTQQorT0lEX1BLQ1MxX1NIQTEgTUJFRFRMU19PSURfUEtDUzFfU0hBMQorT0lEX1BLQ1MxX1NIQTIyNCBNQkVEVExTX09JRF9QS0NTMV9TSEEyMjQKK09JRF9QS0NTMV9TSEEyNTYgTUJFRFRMU19PSURfUEtDUzFfU0hBMjU2CitPSURfUEtDUzFfU0hBMzg0IE1CRURUTFNfT0lEX1BLQ1MxX1NIQTM4NAorT0lEX1BLQ1MxX1NIQTUxMiBNQkVEVExTX09JRF9QS0NTMV9TSEE1MTIKK09JRF9QS0NTNSBNQkVEVExTX09JRF9QS0NTNQorT0lEX1BLQ1M1X1BCRVMyIE1CRURUTFNfT0lEX1BLQ1M1X1BCRVMyCitPSURfUEtDUzVfUEJFX01EMl9ERVNfQ0JDIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9NRDJfREVTX0NCQworT0lEX1BLQ1M1X1BCRV9NRDJfUkMyX0NCQyBNQkVEVExTX09JRF9QS0NTNV9QQkVfTUQyX1JDMl9DQkMKK09JRF9QS0NTNV9QQkVfTUQ1X0RFU19DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX01ENV9ERVNfQ0JDCitPSURfUEtDUzVfUEJFX01ENV9SQzJfQ0JDIE1CRURUTFNfT0lEX1BLQ1M1X1BCRV9NRDVfUkMyX0NCQworT0lEX1BLQ1M1X1BCRV9TSEExX0RFU19DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX1NIQTFfREVTX0NCQworT0lEX1BLQ1M1X1BCRV9TSEExX1JDMl9DQkMgTUJFRFRMU19PSURfUEtDUzVfUEJFX1NIQTFfUkMyX0NCQworT0lEX1BLQ1M1X1BCS0RGMiBNQkVEVExTX09JRF9QS0NTNV9QQktERjIKK09JRF9QS0NTNV9QQk1BQzEgTUJFRFRMU19PSURfUEtDUzVfUEJNQUMxCitPSURfUEtDUzkgTUJFRFRMU19PSURfUEtDUzkKK09JRF9QS0NTOV9DU1JfRVhUX1JFUSBNQkVEVExTX09JRF9QS0NTOV9DU1JfRVhUX1JFUQorT0lEX1BLQ1M5X0VNQUlMIE1CRURUTFNfT0lEX1BLQ1M5X0VNQUlMCitPSURfUEtJWCBNQkVEVExTX09JRF9QS0lYCitPSURfUE9MSUNZX0NPTlNUUkFJTlRTIE1CRURUTFNfT0lEX1BPTElDWV9DT05TVFJBSU5UUworT0lEX1BPTElDWV9NQVBQSU5HUyBNQkVEVExTX09JRF9QT0xJQ1lfTUFQUElOR1MKK09JRF9QUklWQVRFX0tFWV9VU0FHRV9QRVJJT0QgTUJFRFRMU19PSURfUFJJVkFURV9LRVlfVVNBR0VfUEVSSU9ECitPSURfUlNBU1NBX1BTUyBNQkVEVExTX09JRF9SU0FTU0FfUFNTCitPSURfUlNBX0NPTVBBTlkgTUJFRFRMU19PSURfUlNBX0NPTVBBTlkKK09JRF9SU0FfU0hBX09CUyBNQkVEVExTX09JRF9SU0FfU0hBX09CUworT0lEX1NFUlZFUl9BVVRIIE1CRURUTFNfT0lEX1NFUlZFUl9BVVRICitPSURfU0laRSBNQkVEVExTX09JRF9TSVpFCitPSURfU1VCSkVDVF9BTFRfTkFNRSBNQkVEVExTX09JRF9TVUJKRUNUX0FMVF9OQU1FCitPSURfU1VCSkVDVF9ESVJFQ1RPUllfQVRUUlMgTUJFRFRMU19PSURfU1VCSkVDVF9ESVJFQ1RPUllfQVRUUlMKK09JRF9TVUJKRUNUX0tFWV9JREVOVElGSUVSIE1CRURUTFNfT0lEX1NVQkpFQ1RfS0VZX0lERU5USUZJRVIKK09JRF9URUxFVFJVU1QgTUJFRFRMU19PSURfVEVMRVRSVVNUCitPSURfVElNRV9TVEFNUElORyBNQkVEVExTX09JRF9USU1FX1NUQU1QSU5HCitQQURMT0NLX0FDRSBNQkVEVExTX1BBRExPQ0tfQUNFCitQQURMT0NLX0FMSUdOMTYgTUJFRFRMU19QQURMT0NLX0FMSUdOMTYKK1BBRExPQ0tfUEhFIE1CRURUTFNfUEFETE9DS19QSEUKK1BBRExPQ0tfUE1NIE1CRURUTFNfUEFETE9DS19QTU0KK1BBRExPQ0tfUk5HIE1CRURUTFNfUEFETE9DS19STkcKK1BLQ1MxMl9ERVJJVkVfSVYgTUJFRFRMU19QS0NTMTJfREVSSVZFX0lWCitQS0NTMTJfREVSSVZFX0tFWSBNQkVEVExTX1BLQ1MxMl9ERVJJVkVfS0VZCitQS0NTMTJfREVSSVZFX01BQ19LRVkgTUJFRFRMU19QS0NTMTJfREVSSVZFX01BQ19LRVkKK1BLQ1MxMl9QQkVfREVDUllQVCBNQkVEVExTX1BLQ1MxMl9QQkVfREVDUllQVAorUEtDUzEyX1BCRV9FTkNSWVBUIE1CRURUTFNfUEtDUzEyX1BCRV9FTkNSWVBUCitQS0NTNV9ERUNSWVBUIE1CRURUTFNfUEtDUzVfREVDUllQVAorUEtDUzVfRU5DUllQVCBNQkVEVExTX1BLQ1M1X0VOQ1JZUFQKK1BPTEFSU1NMX0FFU05JX0FFUyBNQkVEVExTX0FFU05JX0FFUworUE9MQVJTU0xfQUVTTklfQyBNQkVEVExTX0FFU05JX0MKK1BPTEFSU1NMX0FFU05JX0NMTVVMIE1CRURUTFNfQUVTTklfQ0xNVUwKK1BPTEFSU1NMX0FFU05JX0ggTUJFRFRMU19BRVNOSV9ICitQT0xBUlNTTF9BRVNfQUxUIE1CRURUTFNfQUVTX0FMVAorUE9MQVJTU0xfQUVTX0MgTUJFRFRMU19BRVNfQworUE9MQVJTU0xfQUVTX0ggTUJFRFRMU19BRVNfSAorUE9MQVJTU0xfQUVTX1JPTV9UQUJMRVMgTUJFRFRMU19BRVNfUk9NX1RBQkxFUworUE9MQVJTU0xfQVJDNF9BTFQgTUJFRFRMU19BUkM0X0FMVAorUE9MQVJTU0xfQVJDNF9DIE1CRURUTFNfQVJDNF9DCitQT0xBUlNTTF9BUkM0X0ggTUJFRFRMU19BUkM0X0gKK1BPTEFSU1NMX0FTTjFfSCBNQkVEVExTX0FTTjFfSAorUE9MQVJTU0xfQVNOMV9QQVJTRV9DIE1CRURUTFNfQVNOMV9QQVJTRV9DCitQT0xBUlNTTF9BU04xX1dSSVRFX0MgTUJFRFRMU19BU04xX1dSSVRFX0MKK1BPTEFSU1NMX0FTTjFfV1JJVEVfSCBNQkVEVExTX0FTTjFfV1JJVEVfSAorUE9MQVJTU0xfQkFTRTY0X0MgTUJFRFRMU19CQVNFNjRfQworUE9MQVJTU0xfQkFTRTY0X0ggTUJFRFRMU19CQVNFNjRfSAorUE9MQVJTU0xfQklHTlVNX0MgTUJFRFRMU19CSUdOVU1fQworUE9MQVJTU0xfQklHTlVNX0ggTUJFRFRMU19CSUdOVU1fSAorUE9MQVJTU0xfQkxPV0ZJU0hfQUxUIE1CRURUTFNfQkxPV0ZJU0hfQUxUCitQT0xBUlNTTF9CTE9XRklTSF9DIE1CRURUTFNfQkxPV0ZJU0hfQworUE9MQVJTU0xfQkxPV0ZJU0hfSCBNQkVEVExTX0JMT1dGSVNIX0gKK1BPTEFSU1NMX0JOX01VTF9IIE1CRURUTFNfQk5fTVVMX0gKK1BPTEFSU1NMX0NBTUVMTElBX0FMVCBNQkVEVExTX0NBTUVMTElBX0FMVAorUE9MQVJTU0xfQ0FNRUxMSUFfQyBNQkVEVExTX0NBTUVMTElBX0MKK1BPTEFSU1NMX0NBTUVMTElBX0ggTUJFRFRMU19DQU1FTExJQV9ICitQT0xBUlNTTF9DQU1FTExJQV9TTUFMTF9NRU1PUlkgTUJFRFRMU19DQU1FTExJQV9TTUFMTF9NRU1PUlkKK1BPTEFSU1NMX0NDTV9DIE1CRURUTFNfQ0NNX0MKK1BPTEFSU1NMX0NDTV9IIE1CRURUTFNfQ0NNX0gKK1BPTEFSU1NMX0NFUlRTX0MgTUJFRFRMU19DRVJUU19DCitQT0xBUlNTTF9DRVJUU19IIE1CRURUTFNfQ0VSVFNfSAorUE9MQVJTU0xfQ0hFQ0tfQ09ORklHX0ggTUJFRFRMU19DSEVDS19DT05GSUdfSAorUE9MQVJTU0xfQ0lQSEVSU1VJVEVfTk9EVExTIE1CRURUTFNfQ0lQSEVSU1VJVEVfTk9EVExTCitQT0xBUlNTTF9DSVBIRVJTVUlURV9TSE9SVF9UQUcgTUJFRFRMU19DSVBIRVJTVUlURV9TSE9SVF9UQUcKK1BPTEFSU1NMX0NJUEhFUlNVSVRFX1dFQUsgTUJFRFRMU19DSVBIRVJTVUlURV9XRUFLCitQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9DQkMgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0NDTSBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTQorUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4CitQT0xBUlNTTF9DSVBIRVJfQUVTXzEyOF9DVFIgTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFIKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTI4X0VDQiBNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQgorUE9MQVJTU0xfQ0lQSEVSX0FFU18xMjhfR0NNIE1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNCitQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9DQkMgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkMKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0NDTSBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTQorUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4CitQT0xBUlNTTF9DSVBIRVJfQUVTXzE5Ml9DVFIgTUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DVFIKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMTkyX0VDQiBNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQgorUE9MQVJTU0xfQ0lQSEVSX0FFU18xOTJfR0NNIE1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNCitQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9DQkMgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkMKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0NDTSBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTQorUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4IE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4CitQT0xBUlNTTF9DSVBIRVJfQUVTXzI1Nl9DVFIgTUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DVFIKK1BPTEFSU1NMX0NJUEhFUl9BRVNfMjU2X0VDQiBNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQgorUE9MQVJTU0xfQ0lQSEVSX0FFU18yNTZfR0NNIE1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNCitQT0xBUlNTTF9DSVBIRVJfQVJDNF8xMjggTUJFRFRMU19DSVBIRVJfQVJDNF8xMjgKK1BPTEFSU1NMX0NJUEhFUl9CTE9XRklTSF9DQkMgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDCitQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQKK1BPTEFSU1NMX0NJUEhFUl9CTE9XRklTSF9DVFIgTUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSCitQT0xBUlNTTF9DSVBIRVJfQkxPV0ZJU0hfRUNCIE1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQgorUE9MQVJTU0xfQ0lQSEVSX0MgTUJFRFRMU19DSVBIRVJfQworUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQworUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTQorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjggTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyOAorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFIgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUgorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9FQ0IgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0VDQgorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTQorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkMgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQworUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NDTQorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DRkIxMjggTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NGQjEyOAorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DVFIgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NUUgorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9FQ0IgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0VDQgorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTQorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkMgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQworUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NDTQorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DRkIxMjggTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NGQjEyOAorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DVFIgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NUUgorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9FQ0IgTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0VDQgorUE9MQVJTU0xfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ00gTUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTQorUE9MQVJTU0xfQ0lQSEVSX0RFU19DQkMgTUJFRFRMU19DSVBIRVJfREVTX0NCQworUE9MQVJTU0xfQ0lQSEVSX0RFU19FQ0IgTUJFRFRMU19DSVBIRVJfREVTX0VDQgorUE9MQVJTU0xfQ0lQSEVSX0RFU19FREUzX0NCQyBNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkMKK1BPTEFSU1NMX0NJUEhFUl9ERVNfRURFM19FQ0IgTUJFRFRMU19DSVBIRVJfREVTX0VERTNfRUNCCitQT0xBUlNTTF9DSVBIRVJfREVTX0VERV9DQkMgTUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkMKK1BPTEFSU1NMX0NJUEhFUl9ERVNfRURFX0VDQiBNQkVEVExTX0NJUEhFUl9ERVNfRURFX0VDQgorUE9MQVJTU0xfQ0lQSEVSX0ggTUJFRFRMU19DSVBIRVJfSAorUE9MQVJTU0xfQ0lQSEVSX0lEXzNERVMgTUJFRFRMU19DSVBIRVJfSURfM0RFUworUE9MQVJTU0xfQ0lQSEVSX0lEX0FFUyBNQkVEVExTX0NJUEhFUl9JRF9BRVMKK1BPTEFSU1NMX0NJUEhFUl9JRF9BUkM0IE1CRURUTFNfQ0lQSEVSX0lEX0FSQzQKK1BPTEFSU1NMX0NJUEhFUl9JRF9CTE9XRklTSCBNQkVEVExTX0NJUEhFUl9JRF9CTE9XRklTSAorUE9MQVJTU0xfQ0lQSEVSX0lEX0NBTUVMTElBIE1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBCitQT0xBUlNTTF9DSVBIRVJfSURfREVTIE1CRURUTFNfQ0lQSEVSX0lEX0RFUworUE9MQVJTU0xfQ0lQSEVSX0lEX05PTkUgTUJFRFRMU19DSVBIRVJfSURfTk9ORQorUE9MQVJTU0xfQ0lQSEVSX0lEX05VTEwgTUJFRFRMU19DSVBIRVJfSURfTlVMTAorUE9MQVJTU0xfQ0lQSEVSX01PREVfQUVBRCBNQkVEVExTX0NJUEhFUl9NT0RFX0FFQUQKK1BPTEFSU1NMX0NJUEhFUl9NT0RFX0NCQyBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworUE9MQVJTU0xfQ0lQSEVSX01PREVfQ0ZCIE1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitQT0xBUlNTTF9DSVBIRVJfTU9ERV9DVFIgTUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK1BPTEFSU1NMX0NJUEhFUl9NT0RFX1NUUkVBTSBNQkVEVExTX0NJUEhFUl9NT0RFX1NUUkVBTQorUE9MQVJTU0xfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HIE1CRURUTFNfQ0lQSEVSX01PREVfV0lUSF9QQURESU5HCitQT0xBUlNTTF9DSVBIRVJfTk9ORSBNQkVEVExTX0NJUEhFUl9OT05FCitQT0xBUlNTTF9DSVBIRVJfTlVMTCBNQkVEVExTX0NJUEhFUl9OVUxMCitQT0xBUlNTTF9DSVBIRVJfTlVMTF9DSVBIRVIgTUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK1BPTEFSU1NMX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MgTUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitQT0xBUlNTTF9DSVBIRVJfUEFERElOR19QS0NTNyBNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitQT0xBUlNTTF9DSVBIRVJfUEFERElOR19aRVJPUyBNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitQT0xBUlNTTF9DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOIE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorUE9MQVJTU0xfQ0lQSEVSX1ZBUklBQkxFX0lWX0xFTiBNQkVEVExTX0NJUEhFUl9WQVJJQUJMRV9JVl9MRU4KK1BPTEFSU1NMX0NJUEhFUl9WQVJJQUJMRV9LRVlfTEVOIE1CRURUTFNfQ0lQSEVSX1ZBUklBQkxFX0tFWV9MRU4KK1BPTEFSU1NMX0NJUEhFUl9XUkFQX0ggTUJFRFRMU19DSVBIRVJfV1JBUF9ICitQT0xBUlNTTF9DT05GSUdfRklMRSBNQkVEVExTX0NPTkZJR19GSUxFCitQT0xBUlNTTF9DT05GSUdfSCBNQkVEVExTX0NPTkZJR19ICitQT0xBUlNTTF9DVFJfRFJCR19DIE1CRURUTFNfQ1RSX0RSQkdfQworUE9MQVJTU0xfQ1RSX0RSQkdfSCBNQkVEVExTX0NUUl9EUkJHX0gKK1BPTEFSU1NMX0RFQlVHX0MgTUJFRFRMU19ERUJVR19DCitQT0xBUlNTTF9ERUJVR19ERkxfTU9ERSBNQkVEVExTX0RFQlVHX0RGTF9NT0RFCitQT0xBUlNTTF9ERUJVR19IIE1CRURUTFNfREVCVUdfSAorUE9MQVJTU0xfREVCVUdfTE9HX0ZVTEwgTUJFRFRMU19ERUJVR19MT0dfRlVMTAorUE9MQVJTU0xfREVCVUdfTE9HX1JBVyBNQkVEVExTX0RFQlVHX0xPR19SQVcKK1BPTEFSU1NMX0RFQ1JZUFQgTUJFRFRMU19ERUNSWVBUCitQT0xBUlNTTF9ERVBSRUNBVEVEX1JFTU9WRUQgTUJFRFRMU19ERVBSRUNBVEVEX1JFTU9WRUQKK1BPTEFSU1NMX0RFUFJFQ0FURURfV0FSTklORyBNQkVEVExTX0RFUFJFQ0FURURfV0FSTklORworUE9MQVJTU0xfREVTX0FMVCBNQkVEVExTX0RFU19BTFQKK1BPTEFSU1NMX0RFU19DIE1CRURUTFNfREVTX0MKK1BPTEFSU1NMX0RFU19IIE1CRURUTFNfREVTX0gKK1BPTEFSU1NMX0RITV9DIE1CRURUTFNfREhNX0MKK1BPTEFSU1NMX0RITV9IIE1CRURUTFNfREhNX0gKK1BPTEFSU1NMX0RITV9SRkMyNDA5X01PRFBfMTAyNF9HIE1CRURUTFNfREhNX1JGQzI0MDlfTU9EUF8xMDI0X0cKK1BPTEFSU1NMX0RITV9SRkMyNDA5X01PRFBfMTAyNF9QIE1CRURUTFNfREhNX1JGQzI0MDlfTU9EUF8xMDI0X1AKK1BPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMjA0OF9HIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X0cKK1BPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMjA0OF9QIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X1AKK1BPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9HIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8zMDcyX0cKK1BPTEFSU1NMX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9QIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8zMDcyX1AKK1BPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMTAyNF9HIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8xMDI0X0cKK1BPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMTAyNF9QIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8xMDI0X1AKK1BPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMjA0OF9HIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X0cKK1BPTEFSU1NMX0RITV9SRkM1MTE0X01PRFBfMjA0OF9QIE1CRURUTFNfREhNX1JGQzUxMTRfTU9EUF8yMDQ4X1AKK1BPTEFSU1NMX0VDREhfQyBNQkVEVExTX0VDREhfQworUE9MQVJTU0xfRUNESF9IIE1CRURUTFNfRUNESF9ICitQT0xBUlNTTF9FQ0RIX09VUlMgTUJFRFRMU19FQ0RIX09VUlMKK1BPTEFSU1NMX0VDREhfVEhFSVJTIE1CRURUTFNfRUNESF9USEVJUlMKK1BPTEFSU1NMX0VDRFNBX0MgTUJFRFRMU19FQ0RTQV9DCitQT0xBUlNTTF9FQ0RTQV9ERVRFUk1JTklTVElDIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQworUE9MQVJTU0xfRUNEU0FfSCBNQkVEVExTX0VDRFNBX0gKK1BPTEFSU1NMX0VDUF9DIE1CRURUTFNfRUNQX0MKK1BPTEFSU1NMX0VDUF9EUF9CUDI1NlIxIE1CRURUTFNfRUNQX0RQX0JQMjU2UjEKK1BPTEFSU1NMX0VDUF9EUF9CUDI1NlIxX0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVECitQT0xBUlNTTF9FQ1BfRFBfQlAzODRSMSBNQkVEVExTX0VDUF9EUF9CUDM4NFIxCitQT0xBUlNTTF9FQ1BfRFBfQlAzODRSMV9FTkFCTEVEIE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX0JQNTEyUjEgTUJFRFRMU19FQ1BfRFBfQlA1MTJSMQorUE9MQVJTU0xfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKK1BPTEFSU1NMX0VDUF9EUF9NMjU1IE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTkKK1BPTEFSU1NMX0VDUF9EUF9NMjU1X0VOQUJMRUQgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECitQT0xBUlNTTF9FQ1BfRFBfTUFYIE1CRURUTFNfRUNQX0RQX01BWAorUE9MQVJTU0xfRUNQX0RQX05PTkUgTUJFRFRMU19FQ1BfRFBfTk9ORQorUE9MQVJTU0xfRUNQX0RQX1NFQ1AxOTJLMSBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1AxOTJSMSBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1AyMjRLMSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjI0SzFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1AyMjRSMSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1AyNTZLMSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2SzFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1AyNTZSMSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1AzODRSMSBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0RQX1NFQ1A1MjFSMSBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEKK1BPTEFSU1NMX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRCBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorUE9MQVJTU0xfRUNQX0ZJWEVEX1BPSU5UX09QVElNIE1CRURUTFNfRUNQX0ZJWEVEX1BPSU5UX09QVElNCitQT0xBUlNTTF9FQ1BfSCBNQkVEVExTX0VDUF9ICitQT0xBUlNTTF9FQ1BfTUFYX0JJVFMgTUJFRFRMU19FQ1BfTUFYX0JJVFMKK1BPTEFSU1NMX0VDUF9NQVhfQllURVMgTUJFRFRMU19FQ1BfTUFYX0JZVEVTCitQT0xBUlNTTF9FQ1BfTUFYX1BUX0xFTiBNQkVEVExTX0VDUF9NQVhfUFRfTEVOCitQT0xBUlNTTF9FQ1BfTklTVF9PUFRJTSBNQkVEVExTX0VDUF9OSVNUX09QVElNCitQT0xBUlNTTF9FQ1BfUEZfQ09NUFJFU1NFRCBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VECitQT0xBUlNTTF9FQ1BfUEZfVU5DT01QUkVTU0VEIE1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRAorUE9MQVJTU0xfRUNQX1RMU19OQU1FRF9DVVJWRSBNQkVEVExTX0VDUF9UTFNfTkFNRURfQ1VSVkUKK1BPTEFSU1NMX0VDUF9XSU5ET1dfU0laRSBNQkVEVExTX0VDUF9XSU5ET1dfU0laRQorUE9MQVJTU0xfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTIE1CRURUTFNfRU5BQkxFX1dFQUtfQ0lQSEVSU1VJVEVTCitQT0xBUlNTTF9FTkNSWVBUIE1CRURUTFNfRU5DUllQVAorUE9MQVJTU0xfRU5UUk9QWV9DIE1CRURUTFNfRU5UUk9QWV9DCitQT0xBUlNTTF9FTlRST1BZX0ZPUkNFX1NIQTI1NiBNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2CitQT0xBUlNTTF9FTlRST1BZX0ggTUJFRFRMU19FTlRST1BZX0gKK1BPTEFSU1NMX0VOVFJPUFlfUE9MTF9IIE1CRURUTFNfRU5UUk9QWV9QT0xMX0gKK1BPTEFSU1NMX0VOVFJPUFlfU0hBMjU2X0FDQ1VNVUxBVE9SIE1CRURUTFNfRU5UUk9QWV9TSEEyNTZfQUNDVU1VTEFUT1IKK1BPTEFSU1NMX0VOVFJPUFlfU0hBNTEyX0FDQ1VNVUxBVE9SIE1CRURUTFNfRU5UUk9QWV9TSEE1MTJfQUNDVU1VTEFUT1IKK1BPTEFSU1NMX0VSUk9SX0MgTUJFRFRMU19FUlJPUl9DCitQT0xBUlNTTF9FUlJPUl9IIE1CRURUTFNfRVJST1JfSAorUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfQkMgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9CQworUE9MQVJTU0xfRVJST1JfU1RSRVJST1JfRFVNTVkgTUJFRFRMU19FUlJPUl9TVFJFUlJPUl9EVU1NWQorUE9MQVJTU0xfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKK1BPTEFSU1NMX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RIIE1CRURUTFNfRVJSX0FFU19JTlZBTElEX0tFWV9MRU5HVEgKK1BPTEFSU1NMX0VSUl9BU04xX0JVRl9UT09fU01BTEwgTUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCitQT0xBUlNTTF9FUlJfQVNOMV9JTlZBTElEX0RBVEEgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0RBVEEKK1BPTEFSU1NMX0VSUl9BU04xX0lOVkFMSURfTEVOR1RIIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9MRU5HVEgKK1BPTEFSU1NMX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSCBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX0FTTjFfTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9BU04xX0FMTE9DX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0FTTjFfT1VUX09GX0RBVEEgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorUE9MQVJTU0xfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworUE9MQVJTU0xfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMIE1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCitQT0xBUlNTTF9FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSIE1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorUE9MQVJTU0xfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RIIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RICitQT0xBUlNTTF9FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RIIE1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSAorUE9MQVJTU0xfRVJSX0NBTUVMTElBX0lOVkFMSURfSU5QVVRfTEVOR1RIIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfSU5QVVRfTEVOR1RICitQT0xBUlNTTF9FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RIIE1CRURUTFNfRVJSX0NBTUVMTElBX0lOVkFMSURfS0VZX0xFTkdUSAorUE9MQVJTU0xfRVJSX0NDTV9BVVRIX0ZBSUxFRCBNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQKK1BPTEFSU1NMX0VSUl9DQ01fQkFEX0lOUFVUIE1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKK1BPTEFSU1NMX0VSUl9DSVBIRVJfQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0NJUEhFUl9BTExPQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQgTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECitQT0xBUlNTTF9FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQgTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKK1BPTEFSU1NMX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkcKK1BPTEFSU1NMX0VSUl9DVFJfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgTUJFRFRMU19FUlJfQ1RSX0RSQkdfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECitQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9DVFJfRFJCR19GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfSU5QVVRfVE9PX0JJRyBNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHCitQT0xBUlNTTF9FUlJfQ1RSX0RSQkdfUkVRVUVTVF9UT09fQklHIE1CRURUTFNfRVJSX0NUUl9EUkJHX1JFUVVFU1RfVE9PX0JJRworUE9MQVJTU0xfRVJSX0RFU19JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKK1BPTEFSU1NMX0VSUl9ESE1fQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfREhNX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfREhNX0NBTENfU0VDUkVUX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fQ0FMQ19TRUNSRVRfRkFJTEVECitQT0xBUlNTTF9FUlJfREhNX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfREhNX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9ESE1fSU5WQUxJRF9GT1JNQVQgTUJFRFRMU19FUlJfREhNX0lOVkFMSURfRk9STUFUCitQT0xBUlNTTF9FUlJfREhNX01BS0VfUEFSQU1TX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fTUFLRV9QQVJBTVNfRkFJTEVECitQT0xBUlNTTF9FUlJfREhNX01BS0VfUFVCTElDX0ZBSUxFRCBNQkVEVExTX0VSUl9ESE1fTUFLRV9QVUJMSUNfRkFJTEVECitQT0xBUlNTTF9FUlJfREhNX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfREhNX0FMTE9DX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0RITV9SRUFEX1BBUkFNU19GQUlMRUQgTUJFRFRMU19FUlJfREhNX1JFQURfUEFSQU1TX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0RITV9SRUFEX1BVQkxJQ19GQUlMRUQgTUJFRFRMU19FUlJfREhNX1JFQURfUFVCTElDX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0VDUF9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTCBNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTAorUE9MQVJTU0xfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfRUNQX0lOVkFMSURfS0VZIE1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorUE9MQVJTU0xfRVJSX0VDUF9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX0VDUF9BTExPQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRCBNQkVEVExTX0VSUl9FQ1BfUkFORE9NX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0VDUF9TSUdfTEVOX01JU01BVENIIE1CRURUTFNfRVJSX0VDUF9TSUdfTEVOX01JU01BVENICitQT0xBUlNTTF9FUlJfRUNQX1ZFUklGWV9GQUlMRUQgTUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKK1BPTEFSU1NMX0VSUl9FTlRST1BZX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfRU5UUk9QWV9NQVhfU09VUkNFUyBNQkVEVExTX0VSUl9FTlRST1BZX01BWF9TT1VSQ0VTCitQT0xBUlNTTF9FUlJfRU5UUk9QWV9OT19TT1VSQ0VTX0RFRklORUQgTUJFRFRMU19FUlJfRU5UUk9QWV9OT19TT1VSQ0VTX0RFRklORUQKK1BPTEFSU1NMX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgTUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECitQT0xBUlNTTF9FUlJfR0NNX0FVVEhfRkFJTEVEIE1CRURUTFNfRVJSX0dDTV9BVVRIX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0dDTV9CQURfSU5QVVQgTUJFRFRMU19FUlJfR0NNX0JBRF9JTlBVVAorUE9MQVJTU0xfRVJSX0hNQUNfRFJCR19FTlRST1BZX1NPVVJDRV9GQUlMRUQgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorUE9MQVJTU0xfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX0hNQUNfRFJCR19GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcgTUJFRFRMU19FUlJfSE1BQ19EUkJHX0lOUFVUX1RPT19CSUcKK1BPTEFSU1NMX0VSUl9ITUFDX0RSQkdfUkVRVUVTVF9UT09fQklHIE1CRURUTFNfRVJSX0hNQUNfRFJCR19SRVFVRVNUX1RPT19CSUcKK1BPTEFSU1NMX0VSUl9NRDJfRklMRV9JT19FUlJPUiBNQkVEVExTX0VSUl9NRDJfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX01ENF9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01ENF9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfTUQ1X0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfTUQ1X0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9NRF9BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfTURfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfTURfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9NRF9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX01EX0ZFQVRVUkVfVU5BVkFJTEFCTEUKK1BPTEFSU1NMX0VSUl9NRF9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01EX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwgTUJFRFRMU19FUlJfTVBJX0JVRkZFUl9UT09fU01BTEwKK1BPTEFSU1NMX0VSUl9NUElfRElWSVNJT05fQllfWkVSTyBNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTworUE9MQVJTU0xfRVJSX01QSV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX01QSV9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfTVBJX0lOVkFMSURfQ0hBUkFDVEVSIE1CRURUTFNfRVJSX01QSV9JTlZBTElEX0NIQVJBQ1RFUgorUE9MQVJTU0xfRVJSX01QSV9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX01QSV9BTExPQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUgTUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCitQT0xBUlNTTF9FUlJfTVBJX05PVF9BQ0NFUFRBQkxFIE1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRQorUE9MQVJTU0xfRVJSX05FVF9BQ0NFUFRfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9BQ0NFUFRfRkFJTEVECitQT0xBUlNTTF9FUlJfTkVUX0JJTkRfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9CSU5EX0ZBSUxFRAorUE9MQVJTU0xfRVJSX05FVF9DT05ORUNUX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfQ09OTkVDVF9GQUlMRUQKK1BPTEFSU1NMX0VSUl9ORVRfQ09OTl9SRVNFVCBNQkVEVExTX0VSUl9ORVRfQ09OTl9SRVNFVAorUE9MQVJTU0xfRVJSX05FVF9MSVNURU5fRkFJTEVEIE1CRURUTFNfRVJSX05FVF9MSVNURU5fRkFJTEVECitQT0xBUlNTTF9FUlJfTkVUX1JFQ1ZfRkFJTEVEIE1CRURUTFNfRVJSX05FVF9SRUNWX0ZBSUxFRAorUE9MQVJTU0xfRVJSX05FVF9TRU5EX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfU0VORF9GQUlMRUQKK1BPTEFSU1NMX0VSUl9ORVRfU09DS0VUX0ZBSUxFRCBNQkVEVExTX0VSUl9ORVRfU09DS0VUX0ZBSUxFRAorUE9MQVJTU0xfRVJSX05FVF9USU1FT1VUIE1CRURUTFNfRVJSX1NTTF9USU1FT1VUCitQT0xBUlNTTF9FUlJfTkVUX1VOS05PV05fSE9TVCBNQkVEVExTX0VSUl9ORVRfVU5LTk9XTl9IT1NUCitQT0xBUlNTTF9FUlJfTkVUX1dBTlRfUkVBRCBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFECitQT0xBUlNTTF9FUlJfTkVUX1dBTlRfV1JJVEUgTUJFRFRMU19FUlJfU1NMX1dBTlRfV1JJVEUKK1BPTEFSU1NMX0VSUl9PSURfQlVGX1RPT19TTUFMTCBNQkVEVExTX0VSUl9PSURfQlVGX1RPT19TTUFMTAorUE9MQVJTU0xfRVJSX09JRF9OT1RfRk9VTkQgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorUE9MQVJTU0xfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVEIE1CRURUTFNfRVJSX1BBRExPQ0tfREFUQV9NSVNBTElHTkVECitQT0xBUlNTTF9FUlJfUEJLREYyX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1BCS0RGMl9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX1BFTV9CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9QRU1fQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9QRU1fRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9QRU1fRkVBVFVSRV9VTkFWQUlMQUJMRQorUE9MQVJTU0xfRVJSX1BFTV9JTlZBTElEX0RBVEEgTUJFRFRMU19FUlJfUEVNX0lOVkFMSURfREFUQQorUE9MQVJTU0xfRVJSX1BFTV9JTlZBTElEX0VOQ19JViBNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9FTkNfSVYKK1BPTEFSU1NMX0VSUl9QRU1fTUFMTE9DX0ZBSUxFRCBNQkVEVExTX0VSUl9QRU1fQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfUEVNX05PX0hFQURFUl9GT09URVJfUFJFU0VOVCBNQkVEVExTX0VSUl9QRU1fTk9fSEVBREVSX0ZPT1RFUl9QUkVTRU5UCitQT0xBUlNTTF9FUlJfUEVNX1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BFTV9QQVNTV09SRF9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX1BFTV9QQVNTV09SRF9SRVFVSVJFRCBNQkVEVExTX0VSUl9QRU1fUEFTU1dPUkRfUkVRVUlSRUQKK1BPTEFSU1NMX0VSUl9QRU1fVU5LTk9XTl9FTkNfQUxHIE1CRURUTFNfRVJSX1BFTV9VTktOT1dOX0VOQ19BTEcKK1BPTEFSU1NMX0VSUl9QS0NTMTJfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEtDUzEyX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfUEtDUzEyX0ZFQVRVUkVfVU5BVkFJTEFCTEUKK1BPTEFSU1NMX0VSUl9QS0NTMTJfUEFTU1dPUkRfTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtDUzEyX1BBU1NXT1JEX01JU01BVENICitQT0xBUlNTTF9FUlJfUEtDUzEyX1BCRV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9QS0NTMTJfUEJFX0lOVkFMSURfRk9STUFUCitQT0xBUlNTTF9FUlJfUEtDUzVfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEtDUzVfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9QS0NTNV9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEUKK1BPTEFSU1NMX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCBNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVAorUE9MQVJTU0xfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENIIE1CRURUTFNfRVJSX1BLQ1M1X1BBU1NXT1JEX01JU01BVENICitQT0xBUlNTTF9FUlJfUEtfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1BLX0ZFQVRVUkVfVU5BVkFJTEFCTEUKK1BPTEFSU1NMX0VSUl9QS19GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1BLX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9QS19JTlZBTElEX0FMRyBNQkVEVExTX0VSUl9QS19JTlZBTElEX0FMRworUE9MQVJTU0xfRVJSX1BLX0lOVkFMSURfUFVCS0VZIE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZCitQT0xBUlNTTF9FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUIE1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorUE9MQVJTU0xfRVJSX1BLX0tFWV9JTlZBTElEX1ZFUlNJT04gTUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfVkVSU0lPTgorUE9MQVJTU0xfRVJSX1BLX01BTExPQ19GQUlMRUQgTUJFRFRMU19FUlJfUEtfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRCBNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRAorUE9MQVJTU0xfRVJSX1BLX1NJR19MRU5fTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtfU0lHX0xFTl9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX1BLX1RZUEVfTUlTTUFUQ0ggTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX1BLX1VOS05PV05fTkFNRURfQ1VSVkUgTUJFRFRMU19FUlJfUEtfVU5LTk9XTl9OQU1FRF9DVVJWRQorUE9MQVJTU0xfRVJSX1BLX1VOS05PV05fUEtfQUxHIE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHCitQT0xBUlNTTF9FUlJfUklQRU1EMTYwX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfUklQRU1EMTYwX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEgTUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCitQT0xBUlNTTF9FUlJfUlNBX0lOVkFMSURfUEFERElORyBNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCitQT0xBUlNTTF9FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQgTUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKK1BPTEFSU1NMX0VSUl9SU0FfS0VZX0dFTl9GQUlMRUQgTUJFRFRMU19FUlJfUlNBX0tFWV9HRU5fRkFJTEVECitQT0xBUlNTTF9FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UgTUJFRFRMU19FUlJfUlNBX09VVFBVVF9UT09fTEFSR0UKK1BPTEFSU1NMX0VSUl9SU0FfUFJJVkFURV9GQUlMRUQgTUJFRFRMU19FUlJfUlNBX1BSSVZBVEVfRkFJTEVECitQT0xBUlNTTF9FUlJfUlNBX1BVQkxJQ19GQUlMRUQgTUJFRFRMU19FUlJfUlNBX1BVQkxJQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9SU0FfUk5HX0ZBSUxFRCBNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRAorUE9MQVJTU0xfRVJSX1JTQV9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVECitQT0xBUlNTTF9FUlJfU0hBMV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1NIQTFfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX1NIQTI1Nl9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1NIQTI1Nl9GSUxFX0lPX0VSUk9SCitQT0xBUlNTTF9FUlJfU0hBNTEyX0ZJTEVfSU9fRVJST1IgTUJFRFRMU19FUlJfU0hBNTEyX0ZJTEVfSU9fRVJST1IKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0VSVElGSUNBVEUKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NFUlRJRklDQVRFX1JFUVVFU1QgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DRVJUSUZJQ0FURV9WRVJJRlkKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NIQU5HRV9DSVBIRVJfU1BFQyBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NIQU5HRV9DSVBIRVJfU1BFQworUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRQorUE9MQVJTU0xfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0tFWV9FWENIQU5HRV9DUyBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfQ1MKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0VfUlAgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFX1JQCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19GSU5JU0hFRCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0ZJTklTSEVECitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19ORVdfU0VTU0lPTl9USUNLRVQgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19ORVdfU0VTU0lPTl9USUNLRVQKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX1BST1RPQ09MX1ZFUlNJT04gTUJFRFRMU19FUlJfU1NMX0JBRF9IU19QUk9UT0NPTF9WRVJTSU9OCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8KK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMT19ET05FIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPX0RPTkUKK1BPTEFSU1NMX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfS0VZX0VYQ0hBTkdFCitQT0xBUlNTTF9FUlJfU1NMX0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQQorUE9MQVJTU0xfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMIE1CRURUTFNfRVJSX1NTTF9CVUZGRVJfVE9PX1NNQUxMCitQT0xBUlNTTF9FUlJfU1NMX0NBX0NIQUlOX1JFUVVJUkVEIE1CRURUTFNfRVJSX1NTTF9DQV9DSEFJTl9SRVFVSVJFRAorUE9MQVJTU0xfRVJSX1NTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQKK1BPTEFSU1NMX0VSUl9TU0xfQ0VSVElGSUNBVEVfVE9PX0xBUkdFIE1CRURUTFNfRVJSX1NTTF9DRVJUSUZJQ0FURV9UT09fTEFSR0UKK1BPTEFSU1NMX0VSUl9TU0xfQ09NUFJFU1NJT05fRkFJTEVEIE1CRURUTFNfRVJSX1NTTF9DT01QUkVTU0lPTl9GQUlMRUQKK1BPTEFSU1NMX0VSUl9TU0xfQ09OTl9FT0YgTUJFRFRMU19FUlJfU1NMX0NPTk5fRU9GCitQT0xBUlNTTF9FUlJfU1NMX0NPVU5URVJfV1JBUFBJTkcgTUJFRFRMU19FUlJfU1NMX0NPVU5URVJfV1JBUFBJTkcKK1BPTEFSU1NMX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRSBNQkVEVExTX0VSUl9TU0xfRkFUQUxfQUxFUlRfTUVTU0FHRQorUE9MQVJTU0xfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFIE1CRURUTFNfRVJSX1NTTF9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfU1NMX0hFTExPX1ZFUklGWV9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfSEVMTE9fVkVSSUZZX1JFUVVJUkVECitQT0xBUlNTTF9FUlJfU1NMX0hXX0FDQ0VMX0ZBSUxFRCBNQkVEVExTX0VSUl9TU0xfSFdfQUNDRUxfRkFJTEVECitQT0xBUlNTTF9FUlJfU1NMX0hXX0FDQ0VMX0ZBTExUSFJPVUdIIE1CRURUTFNfRVJSX1NTTF9IV19BQ0NFTF9GQUxMVEhST1VHSAorUE9MQVJTU0xfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IKK1BPTEFSU1NMX0VSUl9TU0xfSU5WQUxJRF9NQUMgTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDCitQT0xBUlNTTF9FUlJfU1NMX0lOVkFMSURfUkVDT1JEIE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX1JFQ09SRAorUE9MQVJTU0xfRVJSX1NTTF9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX1NTTF9BTExPQ19GQUlMRUQKK1BPTEFSU1NMX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTiBNQkVEVExTX0VSUl9TU0xfTk9fQ0lQSEVSX0NIT1NFTgorUE9MQVJTU0xfRVJSX1NTTF9OT19DTElFTlRfQ0VSVElGSUNBVEUgTUJFRFRMU19FUlJfU1NMX05PX0NMSUVOVF9DRVJUSUZJQ0FURQorUE9MQVJTU0xfRVJSX1NTTF9OT19STkcgTUJFRFRMU19FUlJfU1NMX05PX1JORworUE9MQVJTU0xfRVJSX1NTTF9OT19VU0FCTEVfQ0lQSEVSU1VJVEUgTUJFRFRMU19FUlJfU1NMX05PX1VTQUJMRV9DSVBIRVJTVUlURQorUE9MQVJTU0xfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWSBNQkVEVExTX0VSUl9TU0xfUEVFUl9DTE9TRV9OT1RJRlkKK1BPTEFSU1NMX0VSUl9TU0xfUEVFUl9WRVJJRllfRkFJTEVEIE1CRURUTFNfRVJSX1NTTF9QRUVSX1ZFUklGWV9GQUlMRUQKK1BPTEFSU1NMX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSCBNQkVEVExTX0VSUl9TU0xfUEtfVFlQRV9NSVNNQVRDSAorUE9MQVJTU0xfRVJSX1NTTF9QUklWQVRFX0tFWV9SRVFVSVJFRCBNQkVEVExTX0VSUl9TU0xfUFJJVkFURV9LRVlfUkVRVUlSRUQKK1BPTEFSU1NMX0VSUl9TU0xfU0VTU0lPTl9USUNLRVRfRVhQSVJFRCBNQkVEVExTX0VSUl9TU0xfU0VTU0lPTl9USUNLRVRfRVhQSVJFRAorUE9MQVJTU0xfRVJSX1NTTF9VTkVYUEVDVEVEX01FU1NBR0UgTUJFRFRMU19FUlJfU1NMX1VORVhQRUNURURfTUVTU0FHRQorUE9MQVJTU0xfRVJSX1NTTF9VTktOT1dOX0NJUEhFUiBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9DSVBIRVIKK1BPTEFSU1NMX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWSBNQkVEVExTX0VSUl9TU0xfVU5LTk9XTl9JREVOVElUWQorUE9MQVJTU0xfRVJSX1NTTF9XQUlUSU5HX1NFUlZFUl9IRUxMT19SRU5FR08gTUJFRFRMU19FUlJfU1NMX1dBSVRJTkdfU0VSVkVSX0hFTExPX1JFTkVHTworUE9MQVJTU0xfRVJSX1RIUkVBRElOR19CQURfSU5QVVRfREFUQSBNQkVEVExTX0VSUl9USFJFQURJTkdfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9USFJFQURJTkdfRkVBVFVSRV9VTkFWQUlMQUJMRSBNQkVEVExTX0VSUl9USFJFQURJTkdfRkVBVFVSRV9VTkFWQUlMQUJMRQorUE9MQVJTU0xfRVJSX1RIUkVBRElOR19NVVRFWF9FUlJPUiBNQkVEVExTX0VSUl9USFJFQURJTkdfTVVURVhfRVJST1IKK1BPTEFSU1NMX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBIE1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKK1BPTEFSU1NMX0VSUl9YNTA5X0NFUlRfVU5LTk9XTl9GT1JNQVQgTUJFRFRMU19FUlJfWDUwOV9DRVJUX1VOS05PV05fRk9STUFUCitQT0xBUlNTTF9FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQgTUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQKK1BPTEFSU1NMX0VSUl9YNTA5X0ZFQVRVUkVfVU5BVkFJTEFCTEUgTUJFRFRMU19FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFCitQT0xBUlNTTF9FUlJfWDUwOV9GSUxFX0lPX0VSUk9SIE1CRURUTFNfRVJSX1g1MDlfRklMRV9JT19FUlJPUgorUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9BTEcgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRworUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9EQVRFIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFCitQT0xBUlNTTF9FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQKK1BPTEFSU1NMX0VSUl9YNTA5X0lOVkFMSURfTkFNRSBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRQorUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NFUklBTAorUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgTUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRQorUE9MQVJTU0xfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OIE1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OCitQT0xBUlNTTF9FUlJfWDUwOV9NQUxMT0NfRkFJTEVEIE1CRURUTFNfRVJSX1g1MDlfQUxMT0NfRkFJTEVECitQT0xBUlNTTF9FUlJfWDUwOV9TSUdfTUlTTUFUQ0ggTUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0gKK1BPTEFSU1NMX0VSUl9YNTA5X1VOS05PV05fT0lEIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9PSUQKK1BPTEFSU1NMX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRyBNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRworUE9MQVJTU0xfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OIE1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OCitQT0xBUlNTTF9FUlJfWFRFQV9JTlZBTElEX0lOUFVUX0xFTkdUSCBNQkVEVExTX0VSUl9YVEVBX0lOVkFMSURfSU5QVVRfTEVOR1RICitQT0xBUlNTTF9GU19JTyBNQkVEVExTX0ZTX0lPCitQT0xBUlNTTF9HQ01fQyBNQkVEVExTX0dDTV9DCitQT0xBUlNTTF9HQ01fSCBNQkVEVExTX0dDTV9ICitQT0xBUlNTTF9HRU5QUklNRSBNQkVEVExTX0dFTlBSSU1FCitQT0xBUlNTTF9IQVZFR0VfQyBNQkVEVExTX0hBVkVHRV9DCitQT0xBUlNTTF9IQVZFR0VfSCBNQkVEVExTX0hBVkVHRV9ICitQT0xBUlNTTF9IQVZFX0FTTSBNQkVEVExTX0hBVkVfQVNNCitQT0xBUlNTTF9IQVZFX0lOVDE2IE1CRURUTFNfSEFWRV9JTlQxNgorUE9MQVJTU0xfSEFWRV9JTlQzMiBNQkVEVExTX0hBVkVfSU5UMzIKK1BPTEFSU1NMX0hBVkVfSU5UNjQgTUJFRFRMU19IQVZFX0lOVDY0CitQT0xBUlNTTF9IQVZFX0lOVDggTUJFRFRMU19IQVZFX0lOVDgKK1BPTEFSU1NMX0hBVkVfSVBWNiBNQkVEVExTX0hBVkVfSVBWNgorUE9MQVJTU0xfSEFWRV9MT05HTE9ORyBNQkVEVExTX0hBVkVfTE9OR0xPTkcKK1BPTEFSU1NMX0hBVkVfU1NFMiBNQkVEVExTX0hBVkVfU1NFMgorUE9MQVJTU0xfSEFWRV9USU1FIE1CRURUTFNfSEFWRV9USU1FCitQT0xBUlNTTF9IQVZFX1VEQkwgTUJFRFRMU19IQVZFX1VEQkwKK1BPTEFSU1NMX0hBVkVfWDg2IE1CRURUTFNfSEFWRV9YODYKK1BPTEFSU1NMX0hBVkVfWDg2XzY0IE1CRURUTFNfSEFWRV9YODZfNjQKK1BPTEFSU1NMX0hNQUNfRFJCR19DIE1CRURUTFNfSE1BQ19EUkJHX0MKK1BPTEFSU1NMX0hNQUNfRFJCR19IIE1CRURUTFNfSE1BQ19EUkJHX0gKK1BPTEFSU1NMX0hNQUNfRFJCR19NQVhfSU5QVVQgTUJFRFRMU19ITUFDX0RSQkdfTUFYX0lOUFVUCitQT0xBUlNTTF9ITUFDX0RSQkdfTUFYX1JFUVVFU1QgTUJFRFRMU19ITUFDX0RSQkdfTUFYX1JFUVVFU1QKK1BPTEFSU1NMX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVCBNQkVEVExTX0hNQUNfRFJCR19NQVhfU0VFRF9JTlBVVAorUE9MQVJTU0xfSE1BQ19EUkJHX1BSX09GRiBNQkVEVExTX0hNQUNfRFJCR19QUl9PRkYKK1BPTEFSU1NMX0hNQUNfRFJCR19QUl9PTiBNQkVEVExTX0hNQUNfRFJCR19QUl9PTgorUE9MQVJTU0xfSE1BQ19EUkJHX1JFU0VFRF9JTlRFUlZBTCBNQkVEVExTX0hNQUNfRFJCR19SRVNFRURfSU5URVJWQUwKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9ESEVfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0sKK1BPTEFSU1NMX0tFWV9FWENIQU5HRV9ESEVfUFNLX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1BTS19FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfREhFX1JTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9ESEVfUlNBCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9SU0FfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfRUNEU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIRV9FQ0RTQV9FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTSworUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1BTS19FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESEVfUlNBIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX1JTQV9FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQSBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX0VDRFNBCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9FQ0RTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX0VDREhfUlNBIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfUlNBCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfRUNESF9SU0FfRU5BQkxFRCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfTk9ORSBNQkVEVExTX0tFWV9FWENIQU5HRV9OT05FCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUFNLIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTSworUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1BTS19FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUlNBIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQQorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUlNBX1BTSyBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLCitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfUlNBX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX1JTQV9QU0tfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX19TT01FX19FQ0RIRV9FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19FQ0RIRV9FTkFCTEVECitQT0xBUlNTTF9LRVlfRVhDSEFOR0VfX1NPTUVfX1BTS19FTkFCTEVEIE1CRURUTFNfS0VZX0VYQ0hBTkdFX19TT01FX19QU0tfRU5BQkxFRAorUE9MQVJTU0xfS0VZX0VYQ0hBTkdFX19XSVRIX0NFUlRfX0VOQUJMRUQgTUJFRFRMU19LRVlfRVhDSEFOR0VfX1dJVEhfQ0VSVF9fRU5BQkxFRAorUE9MQVJTU0xfS0VZX0xFTkdUSF9ERVMgTUJFRFRMU19LRVlfTEVOR1RIX0RFUworUE9MQVJTU0xfS0VZX0xFTkdUSF9ERVNfRURFIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFCitQT0xBUlNTTF9LRVlfTEVOR1RIX0RFU19FREUzIE1CRURUTFNfS0VZX0xFTkdUSF9ERVNfRURFMworUE9MQVJTU0xfS0VZX0xFTkdUSF9OT05FIE1CRURUTFNfS0VZX0xFTkdUSF9OT05FCitQT0xBUlNTTF9NQVhfQkxPQ0tfTEVOR1RIIE1CRURUTFNfTUFYX0JMT0NLX0xFTkdUSAorUE9MQVJTU0xfTUFYX0lWX0xFTkdUSCBNQkVEVExTX01BWF9JVl9MRU5HVEgKK1BPTEFSU1NMX01EMl9BTFQgTUJFRFRMU19NRDJfQUxUCitQT0xBUlNTTF9NRDJfQyBNQkVEVExTX01EMl9DCitQT0xBUlNTTF9NRDJfSCBNQkVEVExTX01EMl9ICitQT0xBUlNTTF9NRDRfQUxUIE1CRURUTFNfTUQ0X0FMVAorUE9MQVJTU0xfTUQ0X0MgTUJFRFRMU19NRDRfQworUE9MQVJTU0xfTUQ0X0ggTUJFRFRMU19NRDRfSAorUE9MQVJTU0xfTUQ1X0FMVCBNQkVEVExTX01ENV9BTFQKK1BPTEFSU1NMX01ENV9DIE1CRURUTFNfTUQ1X0MKK1BPTEFSU1NMX01ENV9IIE1CRURUTFNfTUQ1X0gKK1BPTEFSU1NMX01EX0MgTUJFRFRMU19NRF9DCitQT0xBUlNTTF9NRF9IIE1CRURUTFNfTURfSAorUE9MQVJTU0xfTURfTUFYX1NJWkUgTUJFRFRMU19NRF9NQVhfU0laRQorUE9MQVJTU0xfTURfTUQyIE1CRURUTFNfTURfTUQyCitQT0xBUlNTTF9NRF9NRDQgTUJFRFRMU19NRF9NRDQKK1BPTEFSU1NMX01EX01ENSBNQkVEVExTX01EX01ENQorUE9MQVJTU0xfTURfTk9ORSBNQkVEVExTX01EX05PTkUKK1BPTEFSU1NMX01EX1JJUEVNRDE2MCBNQkVEVExTX01EX1JJUEVNRDE2MAorUE9MQVJTU0xfTURfU0hBMSBNQkVEVExTX01EX1NIQTEKK1BPTEFSU1NMX01EX1NIQTIyNCBNQkVEVExTX01EX1NIQTIyNAorUE9MQVJTU0xfTURfU0hBMjU2IE1CRURUTFNfTURfU0hBMjU2CitQT0xBUlNTTF9NRF9TSEEzODQgTUJFRFRMU19NRF9TSEEzODQKK1BPTEFSU1NMX01EX1NIQTUxMiBNQkVEVExTX01EX1NIQTUxMgorUE9MQVJTU0xfTURfV1JBUF9IIE1CRURUTFNfTURfV1JBUF9ICitQT0xBUlNTTF9NRU1PUllfQUxJR05fTVVMVElQTEUgTUJFRFRMU19NRU1PUllfQUxJR05fTVVMVElQTEUKK1BPTEFSU1NMX01FTU9SWV9CQUNLVFJBQ0UgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFCitQT0xBUlNTTF9NRU1PUllfQlVGRkVSX0FMTE9DX0MgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MKK1BPTEFSU1NMX01FTU9SWV9CVUZGRVJfQUxMT0NfSCBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfSAorUE9MQVJTU0xfTUVNT1JZX0MgTUJFRFRMU19NRU1PUllfQworUE9MQVJTU0xfTUVNT1JZX0RFQlVHIE1CRURUTFNfTUVNT1JZX0RFQlVHCitQT0xBUlNTTF9NRU1PUllfSCBNQkVEVExTX01FTU9SWV9ICitQT0xBUlNTTF9NT0RFX0NCQyBNQkVEVExTX01PREVfQ0JDCitQT0xBUlNTTF9NT0RFX0NDTSBNQkVEVExTX01PREVfQ0NNCitQT0xBUlNTTF9NT0RFX0NGQiBNQkVEVExTX01PREVfQ0ZCCitQT0xBUlNTTF9NT0RFX0NUUiBNQkVEVExTX01PREVfQ1RSCitQT0xBUlNTTF9NT0RFX0VDQiBNQkVEVExTX01PREVfRUNCCitQT0xBUlNTTF9NT0RFX0dDTSBNQkVEVExTX01PREVfR0NNCitQT0xBUlNTTF9NT0RFX05PTkUgTUJFRFRMU19NT0RFX05PTkUKK1BPTEFSU1NMX01PREVfT0ZCIE1CRURUTFNfTU9ERV9PRkIKK1BPTEFSU1NMX01PREVfU1RSRUFNIE1CRURUTFNfTU9ERV9TVFJFQU0KK1BPTEFSU1NMX01QSV9NQVhfQklUUyBNQkVEVExTX01QSV9NQVhfQklUUworUE9MQVJTU0xfTVBJX01BWF9CSVRTX1NDQUxFMTAwIE1CRURUTFNfTVBJX01BWF9CSVRTX1NDQUxFMTAwCitQT0xBUlNTTF9NUElfTUFYX0xJTUJTIE1CRURUTFNfTVBJX01BWF9MSU1CUworUE9MQVJTU0xfTVBJX01BWF9TSVpFIE1CRURUTFNfTVBJX01BWF9TSVpFCitQT0xBUlNTTF9NUElfUldfQlVGRkVSX1NJWkUgTUJFRFRMU19NUElfUldfQlVGRkVSX1NJWkUKK1BPTEFSU1NMX01QSV9XSU5ET1dfU0laRSBNQkVEVExTX01QSV9XSU5ET1dfU0laRQorUE9MQVJTU0xfTkVUX0MgTUJFRFRMU19ORVRfQworUE9MQVJTU0xfTkVUX0ggTUJFRFRMU19ORVRfSAorUE9MQVJTU0xfTkVUX0xJU1RFTl9CQUNLTE9HIE1CRURUTFNfTkVUX0xJU1RFTl9CQUNLTE9HCitQT0xBUlNTTF9OT19ERUZBVUxUX0VOVFJPUFlfU09VUkNFUyBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCitQT0xBUlNTTF9OT19QTEFURk9STV9FTlRST1BZIE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorUE9MQVJTU0xfT0lEX0MgTUJFRFRMU19PSURfQworUE9MQVJTU0xfT0lEX0ggTUJFRFRMU19PSURfSAorUE9MQVJTU0xfT1BFUkFUSU9OX05PTkUgTUJFRFRMU19PUEVSQVRJT05fTk9ORQorUE9MQVJTU0xfUEFERElOR19OT05FIE1CRURUTFNfUEFERElOR19OT05FCitQT0xBUlNTTF9QQURESU5HX09ORV9BTkRfWkVST1MgTUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKK1BPTEFSU1NMX1BBRERJTkdfUEtDUzcgTUJFRFRMU19QQURESU5HX1BLQ1M3CitQT0xBUlNTTF9QQURESU5HX1pFUk9TIE1CRURUTFNfUEFERElOR19aRVJPUworUE9MQVJTU0xfUEFERElOR19aRVJPU19BTkRfTEVOIE1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCitQT0xBUlNTTF9QQURMT0NLX0MgTUJFRFRMU19QQURMT0NLX0MKK1BPTEFSU1NMX1BBRExPQ0tfSCBNQkVEVExTX1BBRExPQ0tfSAorUE9MQVJTU0xfUEJLREYyX0MgTUJFRFRMU19QQktERjJfQworUE9MQVJTU0xfUEJLREYyX0ggTUJFRFRMU19QQktERjJfSAorUE9MQVJTU0xfUEVNX0ggTUJFRFRMU19QRU1fSAorUE9MQVJTU0xfUEVNX1BBUlNFX0MgTUJFRFRMU19QRU1fUEFSU0VfQworUE9MQVJTU0xfUEVNX1dSSVRFX0MgTUJFRFRMU19QRU1fV1JJVEVfQworUE9MQVJTU0xfUEtDUzExX0MgTUJFRFRMU19QS0NTMTFfQworUE9MQVJTU0xfUEtDUzExX0ggTUJFRFRMU19QS0NTMTFfSAorUE9MQVJTU0xfUEtDUzEyX0MgTUJFRFRMU19QS0NTMTJfQworUE9MQVJTU0xfUEtDUzEyX0ggTUJFRFRMU19QS0NTMTJfSAorUE9MQVJTU0xfUEtDUzFfVjE1IE1CRURUTFNfUEtDUzFfVjE1CitQT0xBUlNTTF9QS0NTMV9WMjEgTUJFRFRMU19QS0NTMV9WMjEKK1BPTEFSU1NMX1BLQ1M1X0MgTUJFRFRMU19QS0NTNV9DCitQT0xBUlNTTF9QS0NTNV9IIE1CRURUTFNfUEtDUzVfSAorUE9MQVJTU0xfUEtfQyBNQkVEVExTX1BLX0MKK1BPTEFSU1NMX1BLX0RFQlVHX0VDUCBNQkVEVExTX1BLX0RFQlVHX0VDUAorUE9MQVJTU0xfUEtfREVCVUdfTUFYX0lURU1TIE1CRURUTFNfUEtfREVCVUdfTUFYX0lURU1TCitQT0xBUlNTTF9QS19ERUJVR19NUEkgTUJFRFRMU19QS19ERUJVR19NUEkKK1BPTEFSU1NMX1BLX0RFQlVHX05PTkUgTUJFRFRMU19QS19ERUJVR19OT05FCitQT0xBUlNTTF9QS19FQ0RTQSBNQkVEVExTX1BLX0VDRFNBCitQT0xBUlNTTF9QS19FQ0tFWSBNQkVEVExTX1BLX0VDS0VZCitQT0xBUlNTTF9QS19FQ0tFWV9ESCBNQkVEVExTX1BLX0VDS0VZX0RICitQT0xBUlNTTF9QS19IIE1CRURUTFNfUEtfSAorUE9MQVJTU0xfUEtfTk9ORSBNQkVEVExTX1BLX05PTkUKK1BPTEFSU1NMX1BLX1BBUlNFX0MgTUJFRFRMU19QS19QQVJTRV9DCitQT0xBUlNTTF9QS19QQVJTRV9FQ19FWFRFTkRFRCBNQkVEVExTX1BLX1BBUlNFX0VDX0VYVEVOREVECitQT0xBUlNTTF9QS19SU0EgTUJFRFRMU19QS19SU0EKK1BPTEFSU1NMX1BLX1JTQVNTQV9QU1MgTUJFRFRMU19QS19SU0FTU0FfUFNTCitQT0xBUlNTTF9QS19SU0FfQUxUIE1CRURUTFNfUEtfUlNBX0FMVAorUE9MQVJTU0xfUEtfV1JBUF9IIE1CRURUTFNfUEtfV1JBUF9ICitQT0xBUlNTTF9QS19XUklURV9DIE1CRURUTFNfUEtfV1JJVEVfQworUE9MQVJTU0xfUExBVEZPUk1fQyBNQkVEVExTX1BMQVRGT1JNX0MKK1BPTEFSU1NMX1BMQVRGT1JNX0VYSVRfQUxUIE1CRURUTFNfUExBVEZPUk1fRVhJVF9BTFQKK1BPTEFSU1NMX1BMQVRGT1JNX0VYSVRfTUFDUk8gTUJFRFRMU19QTEFURk9STV9FWElUX01BQ1JPCitQT0xBUlNTTF9QTEFURk9STV9GUFJJTlRGX0FMVCBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCitQT0xBUlNTTF9QTEFURk9STV9GUFJJTlRGX01BQ1JPIE1CRURUTFNfUExBVEZPUk1fRlBSSU5URl9NQUNSTworUE9MQVJTU0xfUExBVEZPUk1fRlJFRV9NQUNSTyBNQkVEVExTX1BMQVRGT1JNX0ZSRUVfTUFDUk8KK1BPTEFSU1NMX1BMQVRGT1JNX0ggTUJFRFRMU19QTEFURk9STV9ICitQT0xBUlNTTF9QTEFURk9STV9NQUxMT0NfTUFDUk8gTUJFRFRMU19QTEFURk9STV9BTExPQ19NQUNSTworUE9MQVJTU0xfUExBVEZPUk1fTUVNT1JZIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCitQT0xBUlNTTF9QTEFURk9STV9OT19TVERfRlVOQ1RJT05TIE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUworUE9MQVJTU0xfUExBVEZPUk1fUFJJTlRGX0FMVCBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9BTFQKK1BPTEFSU1NMX1BMQVRGT1JNX1BSSU5URl9NQUNSTyBNQkVEVExTX1BMQVRGT1JNX1BSSU5URl9NQUNSTworUE9MQVJTU0xfUExBVEZPUk1fU05QUklOVEZfQUxUIE1CRURUTFNfUExBVEZPUk1fU05QUklOVEZfQUxUCitQT0xBUlNTTF9QTEFURk9STV9TTlBSSU5URl9NQUNSTyBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX01BQ1JPCitQT0xBUlNTTF9QTEFURk9STV9TVERfRVhJVCBNQkVEVExTX1BMQVRGT1JNX1NURF9FWElUCitQT0xBUlNTTF9QTEFURk9STV9TVERfRlBSSU5URiBNQkVEVExTX1BMQVRGT1JNX1NURF9GUFJJTlRGCitQT0xBUlNTTF9QTEFURk9STV9TVERfRlJFRSBNQkVEVExTX1BMQVRGT1JNX1NURF9GUkVFCitQT0xBUlNTTF9QTEFURk9STV9TVERfTUFMTE9DIE1CRURUTFNfUExBVEZPUk1fU1REX0NBTExPQworUE9MQVJTU0xfUExBVEZPUk1fU1REX01FTV9IRFIgTUJFRFRMU19QTEFURk9STV9TVERfTUVNX0hEUgorUE9MQVJTU0xfUExBVEZPUk1fU1REX1BSSU5URiBNQkVEVExTX1BMQVRGT1JNX1NURF9QUklOVEYKK1BPTEFSU1NMX1BMQVRGT1JNX1NURF9TTlBSSU5URiBNQkVEVExTX1BMQVRGT1JNX1NURF9TTlBSSU5URgorUE9MQVJTU0xfUFJFTUFTVEVSX1NJWkUgTUJFRFRMU19QUkVNQVNURVJfU0laRQorUE9MQVJTU0xfUFNLX01BWF9MRU4gTUJFRFRMU19QU0tfTUFYX0xFTgorUE9MQVJTU0xfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCitQT0xBUlNTTF9SSVBFTUQxNjBfQUxUIE1CRURUTFNfUklQRU1EMTYwX0FMVAorUE9MQVJTU0xfUklQRU1EMTYwX0MgTUJFRFRMU19SSVBFTUQxNjBfQworUE9MQVJTU0xfUklQRU1EMTYwX0ggTUJFRFRMU19SSVBFTUQxNjBfSAorUE9MQVJTU0xfUlNBX0MgTUJFRFRMU19SU0FfQworUE9MQVJTU0xfUlNBX0ggTUJFRFRMU19SU0FfSAorUE9MQVJTU0xfUlNBX05PX0NSVCBNQkVEVExTX1JTQV9OT19DUlQKK1BPTEFSU1NMX1NFTEZfVEVTVCBNQkVEVExTX1NFTEZfVEVTVAorUE9MQVJTU0xfU0hBMV9BTFQgTUJFRFRMU19TSEExX0FMVAorUE9MQVJTU0xfU0hBMV9DIE1CRURUTFNfU0hBMV9DCitQT0xBUlNTTF9TSEExX0ggTUJFRFRMU19TSEExX0gKK1BPTEFSU1NMX1NIQTI1Nl9BTFQgTUJFRFRMU19TSEEyNTZfQUxUCitQT0xBUlNTTF9TSEEyNTZfQyBNQkVEVExTX1NIQTI1Nl9DCitQT0xBUlNTTF9TSEEyNTZfSCBNQkVEVExTX1NIQTI1Nl9ICitQT0xBUlNTTF9TSEE1MTJfQUxUIE1CRURUTFNfU0hBNTEyX0FMVAorUE9MQVJTU0xfU0hBNTEyX0MgTUJFRFRMU19TSEE1MTJfQworUE9MQVJTU0xfU0hBNTEyX0ggTUJFRFRMU19TSEE1MTJfSAorUE9MQVJTU0xfU1NMX0FFQURfUkFORE9NX0lWIE1CRURUTFNfU1NMX0FFQURfUkFORE9NX0lWCitQT0xBUlNTTF9TU0xfQUxFUlRfTUVTU0FHRVMgTUJFRFRMU19TU0xfQUxFUlRfTUVTU0FHRVMKK1BPTEFSU1NMX1NTTF9BTFBOIE1CRURUTFNfU1NMX0FMUE4KK1BPTEFSU1NMX1NTTF9DQUNIRV9DIE1CRURUTFNfU1NMX0NBQ0hFX0MKK1BPTEFSU1NMX1NTTF9DQUNIRV9IIE1CRURUTFNfU1NMX0NBQ0hFX0gKK1BPTEFSU1NMX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORyBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElORworUE9MQVJTU0xfU1NMX0NJUEhFUlNVSVRFU19IIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFU19ICitQT0xBUlNTTF9TU0xfQ0xJX0MgTUJFRFRMU19TU0xfQ0xJX0MKK1BPTEFSU1NMX1NTTF9DT09LSUVfQyBNQkVEVExTX1NTTF9DT09LSUVfQworUE9MQVJTU0xfU1NMX0NPT0tJRV9IIE1CRURUTFNfU1NMX0NPT0tJRV9ICitQT0xBUlNTTF9TU0xfQ09PS0lFX1RJTUVPVVQgTUJFRFRMU19TU0xfQ09PS0lFX1RJTUVPVVQKK1BPTEFSU1NMX1NTTF9ERUJVR19BTEwgTUJFRFRMU19TU0xfREVCVUdfQUxMCitQT0xBUlNTTF9TU0xfRElTQUJMRV9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0RJU0FCTEVfUkVORUdPVElBVElPTgorUE9MQVJTU0xfU1NMX0RUTFNfQU5USV9SRVBMQVkgTUJFRFRMU19TU0xfRFRMU19BTlRJX1JFUExBWQorUE9MQVJTU0xfU1NMX0RUTFNfQkFETUFDX0xJTUlUIE1CRURUTFNfU1NMX0RUTFNfQkFETUFDX0xJTUlUCitQT0xBUlNTTF9TU0xfRFRMU19IRUxMT19WRVJJRlkgTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkKK1BPTEFSU1NMX1NTTF9FTkNSWVBUX1RIRU5fTUFDIE1CRURUTFNfU1NMX0VOQ1JZUFRfVEhFTl9NQUMKK1BPTEFSU1NMX1NTTF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUIE1CRURUTFNfU1NMX0VYVEVOREVEX01BU1RFUl9TRUNSRVQKK1BPTEFSU1NMX1NTTF9GQUxMQkFDS19TQ1NWIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKK1BPTEFSU1NMX1NTTF9IIE1CRURUTFNfU1NMX0gKK1BPTEFSU1NMX1NTTF9IV19SRUNPUkRfQUNDRUwgTUJFRFRMU19TU0xfSFdfUkVDT1JEX0FDQ0VMCitQT0xBUlNTTF9TU0xfTUFYX0ZSQUdNRU5UX0xFTkdUSCBNQkVEVExTX1NTTF9NQVhfRlJBR01FTlRfTEVOR1RICitQT0xBUlNTTF9TU0xfUFJPVE9fRFRMUyBNQkVEVExTX1NTTF9QUk9UT19EVExTCitQT0xBUlNTTF9TU0xfUFJPVE9fU1NMMyBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitQT0xBUlNTTF9TU0xfUFJPVE9fVExTMSBNQkVEVExTX1NTTF9QUk9UT19UTFMxCitQT0xBUlNTTF9TU0xfUFJPVE9fVExTMV8xIE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMQorUE9MQVJTU0xfU1NMX1BST1RPX1RMUzFfMiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIKK1BPTEFSU1NMX1NTTF9SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX1JFTkVHT1RJQVRJT04KK1BPTEFSU1NMX1NTTF9TRVJWRVJfTkFNRV9JTkRJQ0FUSU9OIE1CRURUTFNfU1NMX1NFUlZFUl9OQU1FX0lORElDQVRJT04KK1BPTEFSU1NMX1NTTF9TRVNTSU9OX1RJQ0tFVFMgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTCitQT0xBUlNTTF9TU0xfU1JWX0MgTUJFRFRMU19TU0xfU1JWX0MKK1BPTEFSU1NMX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRSBNQkVEVExTX1NTTF9TUlZfUkVTUEVDVF9DTElFTlRfUFJFRkVSRU5DRQorUE9MQVJTU0xfU1NMX1NSVl9TVVBQT1JUX1NTTFYyX0NMSUVOVF9IRUxMTyBNQkVEVExTX1NTTF9TUlZfU1VQUE9SVF9TU0xWMl9DTElFTlRfSEVMTE8KK1BPTEFSU1NMX1NTTF9UTFNfQyBNQkVEVExTX1NTTF9UTFNfQworUE9MQVJTU0xfU1NMX1RSVU5DQVRFRF9ITUFDIE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDCitQT0xBUlNTTF9USFJFQURJTkdfQUxUIE1CRURUTFNfVEhSRUFESU5HX0FMVAorUE9MQVJTU0xfVEhSRUFESU5HX0MgTUJFRFRMU19USFJFQURJTkdfQworUE9MQVJTU0xfVEhSRUFESU5HX0ggTUJFRFRMU19USFJFQURJTkdfSAorUE9MQVJTU0xfVEhSRUFESU5HX0lNUEwgTUJFRFRMU19USFJFQURJTkdfSU1QTAorUE9MQVJTU0xfVEhSRUFESU5HX1BUSFJFQUQgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorUE9MQVJTU0xfVElNSU5HX0FMVCBNQkVEVExTX1RJTUlOR19BTFQKK1BPTEFSU1NMX1RJTUlOR19DIE1CRURUTFNfVElNSU5HX0MKK1BPTEFSU1NMX1RJTUlOR19IIE1CRURUTFNfVElNSU5HX0gKK1BPTEFSU1NMX1ZFUlNJT05fQyBNQkVEVExTX1ZFUlNJT05fQworUE9MQVJTU0xfVkVSU0lPTl9GRUFUVVJFUyBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMKK1BPTEFSU1NMX1ZFUlNJT05fSCBNQkVEVExTX1ZFUlNJT05fSAorUE9MQVJTU0xfVkVSU0lPTl9NQUpPUiBNQkVEVExTX1ZFUlNJT05fTUFKT1IKK1BPTEFSU1NMX1ZFUlNJT05fTUlOT1IgTUJFRFRMU19WRVJTSU9OX01JTk9SCitQT0xBUlNTTF9WRVJTSU9OX05VTUJFUiBNQkVEVExTX1ZFUlNJT05fTlVNQkVSCitQT0xBUlNTTF9WRVJTSU9OX1BBVENIIE1CRURUTFNfVkVSU0lPTl9QQVRDSAorUE9MQVJTU0xfVkVSU0lPTl9TVFJJTkcgTUJFRFRMU19WRVJTSU9OX1NUUklORworUE9MQVJTU0xfVkVSU0lPTl9TVFJJTkdfRlVMTCBNQkVEVExTX1ZFUlNJT05fU1RSSU5HX0ZVTEwKK1BPTEFSU1NMX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjMgTUJFRFRMU19YNTA5X0FMTE9XX0VYVEVOU0lPTlNfTk9OX1YzCitQT0xBUlNTTF9YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTiBNQkVEVExTX1g1MDlfQUxMT1dfVU5TVVBQT1JURURfQ1JJVElDQUxfRVhURU5TSU9OCitQT0xBUlNTTF9YNTA5X0NIRUNLX0VYVEVOREVEX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFCitQT0xBUlNTTF9YNTA5X0NIRUNLX0tFWV9VU0FHRSBNQkVEVExTX1g1MDlfQ0hFQ0tfS0VZX1VTQUdFCitQT0xBUlNTTF9YNTA5X0NSRUFURV9DIE1CRURUTFNfWDUwOV9DUkVBVEVfQworUE9MQVJTU0xfWDUwOV9DUkxfSCBNQkVEVExTX1g1MDlfQ1JMX0gKK1BPTEFSU1NMX1g1MDlfQ1JMX1BBUlNFX0MgTUJFRFRMU19YNTA5X0NSTF9QQVJTRV9DCitQT0xBUlNTTF9YNTA5X0NSVF9IIE1CRURUTFNfWDUwOV9DUlRfSAorUE9MQVJTU0xfWDUwOV9DUlRfUEFSU0VfQyBNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MKK1BPTEFSU1NMX1g1MDlfQ1JUX1dSSVRFX0MgTUJFRFRMU19YNTA5X0NSVF9XUklURV9DCitQT0xBUlNTTF9YNTA5X0NTUl9IIE1CRURUTFNfWDUwOV9DU1JfSAorUE9MQVJTU0xfWDUwOV9DU1JfUEFSU0VfQyBNQkVEVExTX1g1MDlfQ1NSX1BBUlNFX0MKK1BPTEFSU1NMX1g1MDlfQ1NSX1dSSVRFX0MgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DCitQT0xBUlNTTF9YNTA5X0ggTUJFRFRMU19YNTA5X0gKK1BPTEFSU1NMX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQQorUE9MQVJTU0xfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorUE9MQVJTU0xfWDUwOV9VU0VfQyBNQkVEVExTX1g1MDlfVVNFX0MKK1BPTEFSU1NMX1hURUFfQUxUIE1CRURUTFNfWFRFQV9BTFQKK1BPTEFSU1NMX1hURUFfQyBNQkVEVExTX1hURUFfQworUE9MQVJTU0xfWFRFQV9IIE1CRURUTFNfWFRFQV9ICitQT0xBUlNTTF9aTElCX1NVUFBPUlQgTUJFRFRMU19aTElCX1NVUFBPUlQKK1JTQV9DUllQVCBNQkVEVExTX1JTQV9DUllQVAorUlNBX1BLQ1NfVjE1IE1CRURUTFNfUlNBX1BLQ1NfVjE1CitSU0FfUEtDU19WMjEgTUJFRFRMU19SU0FfUEtDU19WMjEKK1JTQV9QUklWQVRFIE1CRURUTFNfUlNBX1BSSVZBVEUKK1JTQV9QVUJMSUMgTUJFRFRMU19SU0FfUFVCTElDCitSU0FfU0FMVF9MRU5fQU5ZIE1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWQorUlNBX1NJR04gTUJFRFRMU19SU0FfU0lHTgorU1NMX0FMRVJUX0xFVkVMX0ZBVEFMIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMCitTU0xfQUxFUlRfTEVWRUxfV0FSTklORyBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9XQVJOSU5HCitTU0xfQUxFUlRfTVNHX0FDQ0VTU19ERU5JRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0FDQ0VTU19ERU5JRUQKK1NTTF9BTEVSVF9NU0dfQkFEX0NFUlQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0JBRF9DRVJUCitTU0xfQUxFUlRfTVNHX0JBRF9SRUNPUkRfTUFDIE1CRURUTFNfU1NMX0FMRVJUX01TR19CQURfUkVDT1JEX01BQworU1NMX0FMRVJUX01TR19DRVJUX0VYUElSRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfRVhQSVJFRAorU1NMX0FMRVJUX01TR19DRVJUX1JFVk9LRUQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfUkVWT0tFRAorU1NMX0FMRVJUX01TR19DRVJUX1VOS05PV04gTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NFUlRfVU5LTk9XTgorU1NMX0FMRVJUX01TR19DTE9TRV9OT1RJRlkgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0NMT1NFX05PVElGWQorU1NMX0FMRVJUX01TR19ERUNPREVfRVJST1IgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ09ERV9FUlJPUgorU1NMX0FMRVJUX01TR19ERUNPTVBSRVNTSU9OX0ZBSUxVUkUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0RFQ09NUFJFU1NJT05fRkFJTFVSRQorU1NMX0FMRVJUX01TR19ERUNSWVBUSU9OX0ZBSUxFRCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDUllQVElPTl9GQUlMRUQKK1NTTF9BTEVSVF9NU0dfREVDUllQVF9FUlJPUiBNQkVEVExTX1NTTF9BTEVSVF9NU0dfREVDUllQVF9FUlJPUgorU1NMX0FMRVJUX01TR19FWFBPUlRfUkVTVFJJQ1RJT04gTUJFRFRMU19TU0xfQUxFUlRfTVNHX0VYUE9SVF9SRVNUUklDVElPTgorU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUKK1NTTF9BTEVSVF9NU0dfSUxMRUdBTF9QQVJBTUVURVIgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lMTEVHQUxfUEFSQU1FVEVSCitTU0xfQUxFUlRfTVNHX0lOQVBST1BSSUFURV9GQUxMQkFDSyBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5BUFJPUFJJQVRFX0ZBTExCQUNLCitTU0xfQUxFUlRfTVNHX0lOU1VGRklDSUVOVF9TRUNVUklUWSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCitTU0xfQUxFUlRfTVNHX0lOVEVSTkFMX0VSUk9SIE1CRURUTFNfU1NMX0FMRVJUX01TR19JTlRFUk5BTF9FUlJPUgorU1NMX0FMRVJUX01TR19OT19BUFBMSUNBVElPTl9QUk9UT0NPTCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQVBQTElDQVRJT05fUFJPVE9DT0wKK1NTTF9BTEVSVF9NU0dfTk9fQ0VSVCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfTk9fQ0VSVAorU1NMX0FMRVJUX01TR19OT19SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0FMRVJUX01TR19OT19SRU5FR09USUFUSU9OCitTU0xfQUxFUlRfTVNHX1BST1RPQ09MX1ZFUlNJT04gTUJFRFRMU19TU0xfQUxFUlRfTVNHX1BST1RPQ09MX1ZFUlNJT04KK1NTTF9BTEVSVF9NU0dfUkVDT1JEX09WRVJGTE9XIE1CRURUTFNfU1NMX0FMRVJUX01TR19SRUNPUkRfT1ZFUkZMT1cKK1NTTF9BTEVSVF9NU0dfVU5FWFBFQ1RFRF9NRVNTQUdFIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTkVYUEVDVEVEX01FU1NBR0UKK1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9DQSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9DQQorU1NMX0FMRVJUX01TR19VTktOT1dOX1BTS19JREVOVElUWSBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVU5LTk9XTl9QU0tfSURFTlRJVFkKK1NTTF9BTEVSVF9NU0dfVU5SRUNPR05JWkVEX05BTUUgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOUkVDT0dOSVpFRF9OQU1FCitTU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0NFUlQgTUJFRFRMU19TU0xfQUxFUlRfTVNHX1VOU1VQUE9SVEVEX0NFUlQKK1NTTF9BTEVSVF9NU0dfVU5TVVBQT1JURURfRVhUIE1CRURUTFNfU1NMX0FMRVJUX01TR19VTlNVUFBPUlRFRF9FWFQKK1NTTF9BTEVSVF9NU0dfVVNFUl9DQU5DRUxFRCBNQkVEVExTX1NTTF9BTEVSVF9NU0dfVVNFUl9DQU5DRUxFRAorU1NMX0FOVElfUkVQTEFZX0RJU0FCTEVEIE1CRURUTFNfU1NMX0FOVElfUkVQTEFZX0RJU0FCTEVECitTU0xfQU5USV9SRVBMQVlfRU5BQkxFRCBNQkVEVExTX1NTTF9BTlRJX1JFUExBWV9FTkFCTEVECitTU0xfQVJDNF9ESVNBQkxFRCBNQkVEVExTX1NTTF9BUkM0X0RJU0FCTEVECitTU0xfQVJDNF9FTkFCTEVEIE1CRURUTFNfU1NMX0FSQzRfRU5BQkxFRAorU1NMX0JVRkZFUl9MRU4gTUJFRFRMU19TU0xfQlVGRkVSX0xFTgorU1NMX0NBQ0hFX0RFRkFVTFRfTUFYX0VOVFJJRVMgTUJFRFRMU19TU0xfQ0FDSEVfREVGQVVMVF9NQVhfRU5UUklFUworU1NMX0NBQ0hFX0RFRkFVTFRfVElNRU9VVCBNQkVEVExTX1NTTF9DQUNIRV9ERUZBVUxUX1RJTUVPVVQKK1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRCBNQkVEVExTX1NTTF9DQkNfUkVDT1JEX1NQTElUVElOR19ESVNBQkxFRAorU1NMX0NCQ19SRUNPUkRfU1BMSVRUSU5HX0VOQUJMRUQgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkdfRU5BQkxFRAorU1NMX0NFUlRJRklDQVRFX1JFUVVFU1QgTUJFRFRMU19TU0xfQ0VSVElGSUNBVEVfUkVRVUVTVAorU1NMX0NFUlRJRklDQVRFX1ZFUklGWSBNQkVEVExTX1NTTF9DRVJUSUZJQ0FURV9WRVJJRlkKK1NTTF9DRVJUX1RZUEVfRUNEU0FfU0lHTiBNQkVEVExTX1NTTF9DRVJUX1RZUEVfRUNEU0FfU0lHTgorU1NMX0NFUlRfVFlQRV9SU0FfU0lHTiBNQkVEVExTX1NTTF9DRVJUX1RZUEVfUlNBX1NJR04KK1NTTF9DSEFOTkVMX0lOQk9VTkQgTUJFRFRMU19TU0xfQ0hBTk5FTF9JTkJPVU5ECitTU0xfQ0hBTk5FTF9PVVRCT1VORCBNQkVEVExTX1NTTF9DSEFOTkVMX09VVEJPVU5ECitTU0xfQ0lQSEVSU1VJVEVTIE1CRURUTFNfU1NMX0NJUEhFUlNVSVRFUworU1NMX0NMSUVOVF9DRVJUSUZJQ0FURSBNQkVEVExTX1NTTF9DTElFTlRfQ0VSVElGSUNBVEUKK1NTTF9DTElFTlRfQ0hBTkdFX0NJUEhFUl9TUEVDIE1CRURUTFNfU1NMX0NMSUVOVF9DSEFOR0VfQ0lQSEVSX1NQRUMKK1NTTF9DTElFTlRfRklOSVNIRUQgTUJFRFRMU19TU0xfQ0xJRU5UX0ZJTklTSEVECitTU0xfQ0xJRU5UX0hFTExPIE1CRURUTFNfU1NMX0NMSUVOVF9IRUxMTworU1NMX0NMSUVOVF9LRVlfRVhDSEFOR0UgTUJFRFRMU19TU0xfQ0xJRU5UX0tFWV9FWENIQU5HRQorU1NMX0NPTVBSRVNTSU9OX0FERCBNQkVEVExTX1NTTF9DT01QUkVTU0lPTl9BREQKK1NTTF9DT01QUkVTU19ERUZMQVRFIE1CRURUTFNfU1NMX0NPTVBSRVNTX0RFRkxBVEUKK1NTTF9DT01QUkVTU19OVUxMIE1CRURUTFNfU1NMX0NPTVBSRVNTX05VTEwKK1NTTF9ERUJVR19CVUYgTUJFRFRMU19TU0xfREVCVUdfQlVGCitTU0xfREVCVUdfQ1JUIE1CRURUTFNfU1NMX0RFQlVHX0NSVAorU1NMX0RFQlVHX0VDUCBNQkVEVExTX1NTTF9ERUJVR19FQ1AKK1NTTF9ERUJVR19NUEkgTUJFRFRMU19TU0xfREVCVUdfTVBJCitTU0xfREVCVUdfTVNHIE1CRURUTFNfU1NMX0RFQlVHX01TRworU1NMX0RFQlVHX1JFVCBNQkVEVExTX1NTTF9ERUJVR19SRVQKK1NTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRSBNQkVEVExTX1NTTF9ERUZBVUxUX1RJQ0tFVF9MSUZFVElNRQorU1NMX0RUTFNfVElNRU9VVF9ERkxfTUFYIE1CRURUTFNfU1NMX0RUTFNfVElNRU9VVF9ERkxfTUFYCitTU0xfRFRMU19USU1FT1VUX0RGTF9NSU4gTUJFRFRMU19TU0xfRFRMU19USU1FT1VUX0RGTF9NSU4KK1NTTF9FTVBUWV9SRU5FR09USUFUSU9OX0lORk8gTUJFRFRMU19TU0xfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPCitTU0xfRVRNX0RJU0FCTEVEIE1CRURUTFNfU1NMX0VUTV9ESVNBQkxFRAorU1NMX0VUTV9FTkFCTEVEIE1CRURUTFNfU1NMX0VUTV9FTkFCTEVECitTU0xfRVhURU5ERURfTVNfRElTQUJMRUQgTUJFRFRMU19TU0xfRVhURU5ERURfTVNfRElTQUJMRUQKK1NTTF9FWFRFTkRFRF9NU19FTkFCTEVEIE1CRURUTFNfU1NMX0VYVEVOREVEX01TX0VOQUJMRUQKK1NTTF9GQUxMQkFDS19TQ1NWIE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKK1NTTF9GTFVTSF9CVUZGRVJTIE1CRURUTFNfU1NMX0ZMVVNIX0JVRkZFUlMKK1NTTF9IQU5EU0hBS0VfT1ZFUiBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUgorU1NMX0hBTkRTSEFLRV9XUkFQVVAgTUJFRFRMU19TU0xfSEFORFNIQUtFX1dSQVBVUAorU1NMX0hBU0hfTUQ1IE1CRURUTFNfU1NMX0hBU0hfTUQ1CitTU0xfSEFTSF9OT05FIE1CRURUTFNfU1NMX0hBU0hfTk9ORQorU1NMX0hBU0hfU0hBMSBNQkVEVExTX1NTTF9IQVNIX1NIQTEKK1NTTF9IQVNIX1NIQTIyNCBNQkVEVExTX1NTTF9IQVNIX1NIQTIyNAorU1NMX0hBU0hfU0hBMjU2IE1CRURUTFNfU1NMX0hBU0hfU0hBMjU2CitTU0xfSEFTSF9TSEEzODQgTUJFRFRMU19TU0xfSEFTSF9TSEEzODQKK1NTTF9IQVNIX1NIQTUxMiBNQkVEVExTX1NTTF9IQVNIX1NIQTUxMgorU1NMX0hFTExPX1JFUVVFU1QgTUJFRFRMU19TU0xfSEVMTE9fUkVRVUVTVAorU1NMX0hTX0NFUlRJRklDQVRFIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFCitTU0xfSFNfQ0VSVElGSUNBVEVfUkVRVUVTVCBNQkVEVExTX1NTTF9IU19DRVJUSUZJQ0FURV9SRVFVRVNUCitTU0xfSFNfQ0VSVElGSUNBVEVfVkVSSUZZIE1CRURUTFNfU1NMX0hTX0NFUlRJRklDQVRFX1ZFUklGWQorU1NMX0hTX0NMSUVOVF9IRUxMTyBNQkVEVExTX1NTTF9IU19DTElFTlRfSEVMTE8KK1NTTF9IU19DTElFTlRfS0VZX0VYQ0hBTkdFIE1CRURUTFNfU1NMX0hTX0NMSUVOVF9LRVlfRVhDSEFOR0UKK1NTTF9IU19GSU5JU0hFRCBNQkVEVExTX1NTTF9IU19GSU5JU0hFRAorU1NMX0hTX0hFTExPX1JFUVVFU1QgTUJFRFRMU19TU0xfSFNfSEVMTE9fUkVRVUVTVAorU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUIE1CRURUTFNfU1NMX0hTX0hFTExPX1ZFUklGWV9SRVFVRVNUCitTU0xfSFNfTkVXX1NFU1NJT05fVElDS0VUIE1CRURUTFNfU1NMX0hTX05FV19TRVNTSU9OX1RJQ0tFVAorU1NMX0hTX1NFUlZFUl9IRUxMTyBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE8KK1NTTF9IU19TRVJWRVJfSEVMTE9fRE9ORSBNQkVEVExTX1NTTF9IU19TRVJWRVJfSEVMTE9fRE9ORQorU1NMX0hTX1NFUlZFUl9LRVlfRVhDSEFOR0UgTUJFRFRMU19TU0xfSFNfU0VSVkVSX0tFWV9FWENIQU5HRQorU1NMX0lOSVRJQUxfSEFORFNIQUtFIE1CRURUTFNfU1NMX0lOSVRJQUxfSEFORFNIQUtFCitTU0xfSVNfQ0xJRU5UIE1CRURUTFNfU1NMX0lTX0NMSUVOVAorU1NMX0lTX0ZBTExCQUNLIE1CRURUTFNfU1NMX0lTX0ZBTExCQUNLCitTU0xfSVNfTk9UX0ZBTExCQUNLIE1CRURUTFNfU1NMX0lTX05PVF9GQUxMQkFDSworU1NMX0lTX1NFUlZFUiBNQkVEVExTX1NTTF9JU19TRVJWRVIKK1NTTF9MRUdBQ1lfQUxMT1dfUkVORUdPVElBVElPTiBNQkVEVExTX1NTTF9MRUdBQ1lfQUxMT1dfUkVORUdPVElBVElPTgorU1NMX0xFR0FDWV9CUkVBS19IQU5EU0hBS0UgTUJFRFRMU19TU0xfTEVHQUNZX0JSRUFLX0hBTkRTSEFLRQorU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OIE1CRURUTFNfU1NMX0xFR0FDWV9OT19SRU5FR09USUFUSU9OCitTU0xfTEVHQUNZX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfTEVHQUNZX1JFTkVHT1RJQVRJT04KK1NTTF9NQUNfQUREIE1CRURUTFNfU1NMX01BQ19BREQKK1NTTF9NQUpPUl9WRVJTSU9OXzMgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zCitTU0xfTUFYX0NPTlRFTlRfTEVOIE1CRURUTFNfU1NMX01BWF9DT05URU5UX0xFTgorU1NMX01BWF9GUkFHX0xFTl8xMDI0IE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl8xMDI0CitTU0xfTUFYX0ZSQUdfTEVOXzIwNDggTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzIwNDgKK1NTTF9NQVhfRlJBR19MRU5fNDA5NiBNQkVEVExTX1NTTF9NQVhfRlJBR19MRU5fNDA5NgorU1NMX01BWF9GUkFHX0xFTl81MTIgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOXzUxMgorU1NMX01BWF9GUkFHX0xFTl9JTlZBTElEIE1CRURUTFNfU1NMX01BWF9GUkFHX0xFTl9JTlZBTElECitTU0xfTUFYX0ZSQUdfTEVOX05PTkUgTUJFRFRMU19TU0xfTUFYX0ZSQUdfTEVOX05PTkUKK1NTTF9NQVhfTUFKT1JfVkVSU0lPTiBNQkVEVExTX1NTTF9NQVhfTUFKT1JfVkVSU0lPTgorU1NMX01BWF9NSU5PUl9WRVJTSU9OIE1CRURUTFNfU1NMX01BWF9NSU5PUl9WRVJTSU9OCitTU0xfTUlOT1JfVkVSU0lPTl8wIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMAorU1NMX01JTk9SX1ZFUlNJT05fMSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzEKK1NTTF9NSU5PUl9WRVJTSU9OXzIgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8yCitTU0xfTUlOT1JfVkVSU0lPTl8zIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMworU1NMX01JTl9NQUpPUl9WRVJTSU9OIE1CRURUTFNfU1NMX01JTl9NQUpPUl9WRVJTSU9OCitTU0xfTUlOX01JTk9SX1ZFUlNJT04gTUJFRFRMU19TU0xfTUlOX01JTk9SX1ZFUlNJT04KK1NTTF9NU0dfQUxFUlQgTUJFRFRMU19TU0xfTVNHX0FMRVJUCitTU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEEgTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEEKK1NTTF9NU0dfQ0hBTkdFX0NJUEhFUl9TUEVDIE1CRURUTFNfU1NMX01TR19DSEFOR0VfQ0lQSEVSX1NQRUMKK1NTTF9NU0dfSEFORFNIQUtFIE1CRURUTFNfU1NMX01TR19IQU5EU0hBS0UKK1NTTF9QQURESU5HX0FERCBNQkVEVExTX1NTTF9QQURESU5HX0FERAorU1NMX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfUkVORUdPVElBVElPTgorU1NMX1JFTkVHT1RJQVRJT05fRElTQUJMRUQgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9ESVNBQkxFRAorU1NMX1JFTkVHT1RJQVRJT05fRE9ORSBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0RPTkUKK1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9FTkFCTEVECitTU0xfUkVORUdPVElBVElPTl9OT1RfRU5GT1JDRUQgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9OT1RfRU5GT1JDRUQKK1NTTF9SRU5FR09USUFUSU9OX1BFTkRJTkcgTUJFRFRMU19TU0xfUkVORUdPVElBVElPTl9QRU5ESU5HCitTU0xfUkVORUdPX01BWF9SRUNPUkRTX0RFRkFVTFQgTUJFRFRMU19TU0xfUkVORUdPX01BWF9SRUNPUkRTX0RFRkFVTFQKK1NTTF9SRVRSQU5TX0ZJTklTSEVEIE1CRURUTFNfU1NMX1JFVFJBTlNfRklOSVNIRUQKK1NTTF9SRVRSQU5TX1BSRVBBUklORyBNQkVEVExTX1NTTF9SRVRSQU5TX1BSRVBBUklORworU1NMX1JFVFJBTlNfU0VORElORyBNQkVEVExTX1NTTF9SRVRSQU5TX1NFTkRJTkcKK1NTTF9SRVRSQU5TX1dBSVRJTkcgTUJFRFRMU19TU0xfUkVUUkFOU19XQUlUSU5HCitTU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04gTUJFRFRMU19TU0xfU0VDVVJFX1JFTkVHT1RJQVRJT04KK1NTTF9TRVJWRVJfQ0VSVElGSUNBVEUgTUJFRFRMU19TU0xfU0VSVkVSX0NFUlRJRklDQVRFCitTU0xfU0VSVkVSX0NIQU5HRV9DSVBIRVJfU1BFQyBNQkVEVExTX1NTTF9TRVJWRVJfQ0hBTkdFX0NJUEhFUl9TUEVDCitTU0xfU0VSVkVSX0ZJTklTSEVEIE1CRURUTFNfU1NMX1NFUlZFUl9GSU5JU0hFRAorU1NMX1NFUlZFUl9IRUxMTyBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE8KK1NTTF9TRVJWRVJfSEVMTE9fRE9ORSBNQkVEVExTX1NTTF9TRVJWRVJfSEVMTE9fRE9ORQorU1NMX1NFUlZFUl9IRUxMT19WRVJJRllfUkVRVUVTVF9TRU5UIE1CRURUTFNfU1NMX1NFUlZFUl9IRUxMT19WRVJJRllfUkVRVUVTVF9TRU5UCitTU0xfU0VSVkVSX0tFWV9FWENIQU5HRSBNQkVEVExTX1NTTF9TRVJWRVJfS0VZX0VYQ0hBTkdFCitTU0xfU0VSVkVSX05FV19TRVNTSU9OX1RJQ0tFVCBNQkVEVExTX1NTTF9TRVJWRVJfTkVXX1NFU1NJT05fVElDS0VUCitTU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19ESVNBQkxFRAorU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVEIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUU19FTkFCTEVECitTU0xfU0lHX0FOT04gTUJFRFRMU19TU0xfU0lHX0FOT04KK1NTTF9TSUdfRUNEU0EgTUJFRFRMU19TU0xfU0lHX0VDRFNBCitTU0xfU0lHX1JTQSBNQkVEVExTX1NTTF9TSUdfUlNBCitTU0xfVFJBTlNQT1JUX0RBVEFHUkFNIE1CRURUTFNfU1NMX1RSQU5TUE9SVF9EQVRBR1JBTQorU1NMX1RSQU5TUE9SVF9TVFJFQU0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX1NUUkVBTQorU1NMX1RSVU5DQVRFRF9ITUFDX0xFTiBNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQ19MRU4KK1NTTF9UUlVOQ19ITUFDX0RJU0FCTEVEIE1CRURUTFNfU1NMX1RSVU5DX0hNQUNfRElTQUJMRUQKK1NTTF9UUlVOQ19ITUFDX0VOQUJMRUQgTUJFRFRMU19TU0xfVFJVTkNfSE1BQ19FTkFCTEVECitTU0xfVkVSSUZZX0RBVEFfTUFYX0xFTiBNQkVEVExTX1NTTF9WRVJJRllfREFUQV9NQVhfTEVOCitTU0xfVkVSSUZZX05PTkUgTUJFRFRMU19TU0xfVkVSSUZZX05PTkUKK1NTTF9WRVJJRllfT1BUSU9OQUwgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMCitTU0xfVkVSSUZZX1JFUVVJUkVEIE1CRURUTFNfU1NMX1ZFUklGWV9SRVFVSVJFRAorVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCitUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CitUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfQ0NNIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTQorVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NDTV84CitUTFNfREhFX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CitUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CitUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTQorVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTV84IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NDTV84CitUTFNfREhFX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CitUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NgorVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19ESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CitUTFNfREhFX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEKK1RMU19ESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1BTS19XSVRIX05VTExfU0hBMjU2CitUTFNfREhFX1BTS19XSVRIX05VTExfU0hBMzg0IE1CRURUTFNfVExTX0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorVExTX0RIRV9QU0tfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEKK1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ00KK1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOAorVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NDTSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ00KK1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOAorVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEKK1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEKK1RMU19ESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMjU2CitUTFNfREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorVExTX0RIRV9SU0FfV0lUSF9ERVNfQ0JDX1NIQSBNQkVEVExTX1RMU19ESEVfUlNBX1dJVEhfREVTX0NCQ19TSEEKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ00gTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0NDTQorVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQ01fOCBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfQ0NNXzgKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQ00KK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfQ0NNXzggTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0NDTV84CitUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfTlVMTF9TSEEKK1RMU19FQ0RIRV9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKK1RMU19FQ0RIRV9QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIXzNERVNfRURFX0NCQ19TSEEKK1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCitUTFNfRUNESEVfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorVExTX0VDREhFX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEKK1RMU19FQ0RIRV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX05VTExfU0hBCitUTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUFNLX1dJVEhfTlVMTF9TSEEyNTYKK1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9QU0tfV0lUSF9OVUxMX1NIQTM4NAorVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhFX1BTS19XSVRIX1JDNF8xMjhfU0hBCitUTFNfRUNESEVfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CitUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESEVfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKK1RMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQQorVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBIE1CRURUTFNfVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBCitUTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorVExTX0VDREhfRUNEU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEzODQKK1RMU19FQ0RIX0VDRFNBX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfRUNESF9FQ0RTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBIE1CRURUTFNfVExTX0VDREhfRUNEU0FfV0lUSF9OVUxMX1NIQQorVExTX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEKK1RMU19FQ0RIX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEKK1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CitUTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEKK1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CitUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0CitUTFNfRUNESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CitUTFNfRUNESF9SU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX05VTExfU0hBCitUTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBCitUTFNfRVhUX0FMUE4gTUJFRFRMU19UTFNfRVhUX0FMUE4KK1RMU19FWFRfRU5DUllQVF9USEVOX01BQyBNQkVEVExTX1RMU19FWFRfRU5DUllQVF9USEVOX01BQworVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUIE1CRURUTFNfVExTX0VYVF9FWFRFTkRFRF9NQVNURVJfU0VDUkVUCitUTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEggTUJFRFRMU19UTFNfRVhUX01BWF9GUkFHTUVOVF9MRU5HVEgKK1RMU19FWFRfUkVORUdPVElBVElPTl9JTkZPIE1CRURUTFNfVExTX0VYVF9SRU5FR09USUFUSU9OX0lORk8KK1RMU19FWFRfU0VSVkVSTkFNRSBNQkVEVExTX1RMU19FWFRfU0VSVkVSTkFNRQorVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FIE1CRURUTFNfVExTX0VYVF9TRVJWRVJOQU1FX0hPU1ROQU1FCitUTFNfRVhUX1NFU1NJT05fVElDS0VUIE1CRURUTFNfVExTX0VYVF9TRVNTSU9OX1RJQ0tFVAorVExTX0VYVF9TSUdfQUxHIE1CRURUTFNfVExTX0VYVF9TSUdfQUxHCitUTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9FTExJUFRJQ19DVVJWRVMKK1RMU19FWFRfU1VQUE9SVEVEX1BPSU5UX0ZPUk1BVFMgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTCitUTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQgTUJFRFRMU19UTFNfRVhUX1NVUFBPUlRFRF9QT0lOVF9GT1JNQVRTX1BSRVNFTlQKK1RMU19FWFRfVFJVTkNBVEVEX0hNQUMgTUJFRFRMU19UTFNfRVhUX1RSVU5DQVRFRF9ITUFDCitUTFNfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19QU0tfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0NDTQorVExTX1BTS19XSVRIX0FFU18xMjhfQ0NNXzggTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzEyOF9DQ01fOAorVExTX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKK1RMU19QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfQ0NNCitUTFNfUFNLX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19QU0tfV0lUSF9BRVNfMjU2X0NDTV84CitUTFNfUFNLX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBMjU2CitUTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYKK1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NCBNQkVEVExTX1RMU19QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9HQ01fU0hBMzg0CitUTFNfUFNLX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfUFNLX1dJVEhfTlVMTF9TSEEKK1RMU19QU0tfV0lUSF9OVUxMX1NIQTI1NiBNQkVEVExTX1RMU19QU0tfV0lUSF9OVUxMX1NIQTI1NgorVExTX1BTS19XSVRIX05VTExfU0hBMzg0IE1CRURUTFNfVExTX1BTS19XSVRIX05VTExfU0hBMzg0CitUTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEKK1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfM0RFU19FREVfQ0JDX1NIQQorVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgorVExTX1JTQV9QU0tfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgorVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQQorVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEzODQgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NAorVExTX1JTQV9QU0tfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKK1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMTI4X0dDTV9TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzEyOF9HQ01fU0hBMjU2CitUTFNfUlNBX1BTS19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBMzg0IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQTM4NAorVExTX1JTQV9QU0tfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfQ0FNRUxMSUFfMjU2X0dDTV9TSEEzODQKK1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX05VTExfU0hBCitUTFNfUlNBX1BTS19XSVRIX05VTExfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTI1NgorVExTX1JTQV9QU0tfV0lUSF9OVUxMX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfUFNLX1dJVEhfTlVMTF9TSEEzODQKK1RMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEgTUJFRFRMU19UTFNfUlNBX1BTS19XSVRIX1JDNF8xMjhfU0hBCitUTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBCitUTFNfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQorVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYKK1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTSBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0NDTQorVExTX1JTQV9XSVRIX0FFU18xMjhfQ0NNXzggTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzEyOF9DQ01fOAorVExTX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKK1RMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEgTUJFRFRMU19UTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCitUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTI1NgorVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNIE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfQ0NNCitUTFNfUlNBX1dJVEhfQUVTXzI1Nl9DQ01fOCBNQkVEVExTX1RMU19SU0FfV0lUSF9BRVNfMjU2X0NDTV84CitUTFNfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IE1CRURUTFNfVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAorVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCitUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEyNTYKK1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NiBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8xMjhfR0NNX1NIQTI1NgorVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCitUTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYgTUJFRFRMU19UTFNfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEyNTYKK1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NCBNQkVEVExTX1RMU19SU0FfV0lUSF9DQU1FTExJQV8yNTZfR0NNX1NIQTM4NAorVExTX1JTQV9XSVRIX0RFU19DQkNfU0hBIE1CRURUTFNfVExTX1JTQV9XSVRIX0RFU19DQkNfU0hBCitUTFNfUlNBX1dJVEhfTlVMTF9NRDUgTUJFRFRMU19UTFNfUlNBX1dJVEhfTlVMTF9NRDUKK1RMU19SU0FfV0lUSF9OVUxMX1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9OVUxMX1NIQQorVExTX1JTQV9XSVRIX05VTExfU0hBMjU2IE1CRURUTFNfVExTX1JTQV9XSVRIX05VTExfU0hBMjU2CitUTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUgTUJFRFRMU19UTFNfUlNBX1dJVEhfUkM0XzEyOF9NRDUKK1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQSBNQkVEVExTX1RMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQorWDUwOV9DUlRfVkVSU0lPTl8xIE1CRURUTFNfWDUwOV9DUlRfVkVSU0lPTl8xCitYNTA5X0NSVF9WRVJTSU9OXzIgTUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzIKK1g1MDlfQ1JUX1ZFUlNJT05fMyBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMworWDUwOV9GT1JNQVRfREVSIE1CRURUTFNfWDUwOV9GT1JNQVRfREVSCitYNTA5X0ZPUk1BVF9QRU0gTUJFRFRMU19YNTA5X0ZPUk1BVF9QRU0KK1g1MDlfTUFYX0ROX05BTUVfU0laRSBNQkVEVExTX1g1MDlfTUFYX0ROX05BTUVfU0laRQorWDUwOV9SRkM1MjgwX01BWF9TRVJJQUxfTEVOIE1CRURUTFNfWDUwOV9SRkM1MjgwX01BWF9TRVJJQUxfTEVOCitYNTA5X1JGQzUyODBfVVRDX1RJTUVfTEVOIE1CRURUTFNfWDUwOV9SRkM1MjgwX1VUQ19USU1FX0xFTgorWFRFQV9ERUNSWVBUIE1CRURUTFNfWFRFQV9ERUNSWVBUCitYVEVBX0VOQ1JZUFQgTUJFRFRMU19YVEVBX0VOQ1JZUFQKK19hc24xX2JpdHN0cmluZyBtYmVkdGxzX2FzbjFfYml0c3RyaW5nCitfYXNuMV9idWYgbWJlZHRsc19hc24xX2J1ZgorX2FzbjFfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YQorX2FzbjFfc2VxdWVuY2UgbWJlZHRsc19hc24xX3NlcXVlbmNlCitfc3NsX2NhY2hlX2NvbnRleHQgbWJlZHRsc19zc2xfY2FjaGVfY29udGV4dAorX3NzbF9jYWNoZV9lbnRyeSBtYmVkdGxzX3NzbF9jYWNoZV9lbnRyeQorX3NzbF9jaXBoZXJzdWl0ZV90IG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX3QKK19zc2xfY29udGV4dCBtYmVkdGxzX3NzbF9jb250ZXh0Citfc3NsX2ZsaWdodF9pdGVtIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtCitfc3NsX2hhbmRzaGFrZV9wYXJhbXMgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcworX3NzbF9rZXlfY2VydCBtYmVkdGxzX3NzbF9rZXlfY2VydAorX3NzbF9wcmVtYXN0ZXJfc2VjcmV0IG1iZWR0bHNfc3NsX3ByZW1hc3Rlcl9zZWNyZXQKK19zc2xfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXNzaW9uCitfc3NsX3RpY2tldF9rZXlzIG1iZWR0bHNfc3NsX3RpY2tldF9rZXlzCitfc3NsX3RyYW5zZm9ybSBtYmVkdGxzX3NzbF90cmFuc2Zvcm0KK194NTA5X2NybCBtYmVkdGxzX3g1MDlfY3JsCitfeDUwOV9jcmxfZW50cnkgbWJlZHRsc194NTA5X2NybF9lbnRyeQorX3g1MDlfY3J0IG1iZWR0bHNfeDUwOV9jcnQKK194NTA5X2NzciBtYmVkdGxzX3g1MDlfY3NyCitfeDUwOV90aW1lIG1iZWR0bHNfeDUwOV90aW1lCitfeDUwOXdyaXRlX2NlcnQgbWJlZHRsc194NTA5d3JpdGVfY2VydAorX3g1MDl3cml0ZV9jc3IgbWJlZHRsc194NTA5d3JpdGVfY3NyCithZXNfY29udGV4dCBtYmVkdGxzX2Flc19jb250ZXh0CithZXNfY3J5cHRfY2JjIG1iZWR0bHNfYWVzX2NyeXB0X2NiYworYWVzX2NyeXB0X2NmYjEyOCBtYmVkdGxzX2Flc19jcnlwdF9jZmIxMjgKK2Flc19jcnlwdF9jZmI4IG1iZWR0bHNfYWVzX2NyeXB0X2NmYjgKK2Flc19jcnlwdF9jdHIgbWJlZHRsc19hZXNfY3J5cHRfY3RyCithZXNfY3J5cHRfZWNiIG1iZWR0bHNfYWVzX2NyeXB0X2VjYgorYWVzX2ZyZWUgbWJlZHRsc19hZXNfZnJlZQorYWVzX2luaXQgbWJlZHRsc19hZXNfaW5pdAorYWVzX3NlbGZfdGVzdCBtYmVkdGxzX2Flc19zZWxmX3Rlc3QKK2Flc19zZXRrZXlfZGVjIG1iZWR0bHNfYWVzX3NldGtleV9kZWMKK2Flc19zZXRrZXlfZW5jIG1iZWR0bHNfYWVzX3NldGtleV9lbmMKK2Flc25pX2NyeXB0X2VjYiBtYmVkdGxzX2Flc25pX2NyeXB0X2VjYgorYWVzbmlfZ2NtX211bHQgbWJlZHRsc19hZXNuaV9nY21fbXVsdAorYWVzbmlfaW52ZXJzZV9rZXkgbWJlZHRsc19hZXNuaV9pbnZlcnNlX2tleQorYWVzbmlfc2V0a2V5X2VuYyBtYmVkdGxzX2Flc25pX3NldGtleV9lbmMKK2Flc25pX3N1cHBvcnRzIG1iZWR0bHNfYWVzbmlfaGFzX3N1cHBvcnQKK2FsYXJtZWQgbWJlZHRsc190aW1pbmdfYWxhcm1lZAorYXJjNF9jb250ZXh0IG1iZWR0bHNfYXJjNF9jb250ZXh0CithcmM0X2NyeXB0IG1iZWR0bHNfYXJjNF9jcnlwdAorYXJjNF9mcmVlIG1iZWR0bHNfYXJjNF9mcmVlCithcmM0X2luaXQgbWJlZHRsc19hcmM0X2luaXQKK2FyYzRfc2VsZl90ZXN0IG1iZWR0bHNfYXJjNF9zZWxmX3Rlc3QKK2FyYzRfc2V0dXAgbWJlZHRsc19hcmM0X3NldHVwCithc24xX2JpdHN0cmluZyBtYmVkdGxzX2FzbjFfYml0c3RyaW5nCithc24xX2J1ZiBtYmVkdGxzX2FzbjFfYnVmCithc24xX2ZpbmRfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfZmluZF9uYW1lZF9kYXRhCithc24xX2ZyZWVfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfZnJlZV9uYW1lZF9kYXRhCithc24xX2ZyZWVfbmFtZWRfZGF0YV9saXN0IG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdAorYXNuMV9nZXRfYWxnIG1iZWR0bHNfYXNuMV9nZXRfYWxnCithc24xX2dldF9hbGdfbnVsbCBtYmVkdGxzX2FzbjFfZ2V0X2FsZ19udWxsCithc24xX2dldF9iaXRzdHJpbmcgbWJlZHRsc19hc24xX2dldF9iaXRzdHJpbmcKK2FzbjFfZ2V0X2JpdHN0cmluZ19udWxsIG1iZWR0bHNfYXNuMV9nZXRfYml0c3RyaW5nX251bGwKK2FzbjFfZ2V0X2Jvb2wgbWJlZHRsc19hc24xX2dldF9ib29sCithc24xX2dldF9pbnQgbWJlZHRsc19hc24xX2dldF9pbnQKK2FzbjFfZ2V0X2xlbiBtYmVkdGxzX2FzbjFfZ2V0X2xlbgorYXNuMV9nZXRfbXBpIG1iZWR0bHNfYXNuMV9nZXRfbXBpCithc24xX2dldF9zZXF1ZW5jZV9vZiBtYmVkdGxzX2FzbjFfZ2V0X3NlcXVlbmNlX29mCithc24xX2dldF90YWcgbWJlZHRsc19hc24xX2dldF90YWcKK2FzbjFfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfbmFtZWRfZGF0YQorYXNuMV9zZXF1ZW5jZSBtYmVkdGxzX2FzbjFfc2VxdWVuY2UKK2FzbjFfc3RvcmVfbmFtZWRfZGF0YSBtYmVkdGxzX2FzbjFfc3RvcmVfbmFtZWRfZGF0YQorYXNuMV93cml0ZV9hbGdvcml0aG1faWRlbnRpZmllciBtYmVkdGxzX2FzbjFfd3JpdGVfYWxnb3JpdGhtX2lkZW50aWZpZXIKK2FzbjFfd3JpdGVfYml0c3RyaW5nIG1iZWR0bHNfYXNuMV93cml0ZV9iaXRzdHJpbmcKK2FzbjFfd3JpdGVfYm9vbCBtYmVkdGxzX2FzbjFfd3JpdGVfYm9vbAorYXNuMV93cml0ZV9pYTVfc3RyaW5nIG1iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nCithc24xX3dyaXRlX2ludCBtYmVkdGxzX2FzbjFfd3JpdGVfaW50Cithc24xX3dyaXRlX2xlbiBtYmVkdGxzX2FzbjFfd3JpdGVfbGVuCithc24xX3dyaXRlX21waSBtYmVkdGxzX2FzbjFfd3JpdGVfbXBpCithc24xX3dyaXRlX251bGwgbWJlZHRsc19hc24xX3dyaXRlX251bGwKK2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nIG1iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmcKK2FzbjFfd3JpdGVfb2lkIG1iZWR0bHNfYXNuMV93cml0ZV9vaWQKK2FzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZyBtYmVkdGxzX2FzbjFfd3JpdGVfcHJpbnRhYmxlX3N0cmluZworYXNuMV93cml0ZV9yYXdfYnVmZmVyIG1iZWR0bHNfYXNuMV93cml0ZV9yYXdfYnVmZmVyCithc24xX3dyaXRlX3RhZyBtYmVkdGxzX2FzbjFfd3JpdGVfdGFnCitiYXNlNjRfZGVjb2RlIG1iZWR0bHNfYmFzZTY0X2RlY29kZQorYmFzZTY0X2VuY29kZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUKK2Jhc2U2NF9zZWxmX3Rlc3QgbWJlZHRsc19iYXNlNjRfc2VsZl90ZXN0CitibG93ZmlzaF9jb250ZXh0IG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dAorYmxvd2Zpc2hfY3J5cHRfY2JjIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjCitibG93ZmlzaF9jcnlwdF9jZmI2NCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0CitibG93ZmlzaF9jcnlwdF9jdHIgbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jdHIKK2Jsb3dmaXNoX2NyeXB0X2VjYiBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYgorYmxvd2Zpc2hfZnJlZSBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUKK2Jsb3dmaXNoX2luaXQgbWJlZHRsc19ibG93ZmlzaF9pbml0CitibG93ZmlzaF9zZXRrZXkgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkKK2NhbWVsbGlhX2NvbnRleHQgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0CitjYW1lbGxpYV9jcnlwdF9jYmMgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMKK2NhbWVsbGlhX2NyeXB0X2NmYjEyOCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NmYjEyOAorY2FtZWxsaWFfY3J5cHRfY3RyIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY3RyCitjYW1lbGxpYV9jcnlwdF9lY2IgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IKK2NhbWVsbGlhX2ZyZWUgbWJlZHRsc19jYW1lbGxpYV9mcmVlCitjYW1lbGxpYV9pbml0IG1iZWR0bHNfY2FtZWxsaWFfaW5pdAorY2FtZWxsaWFfc2VsZl90ZXN0IG1iZWR0bHNfY2FtZWxsaWFfc2VsZl90ZXN0CitjYW1lbGxpYV9zZXRrZXlfZGVjIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2RlYworY2FtZWxsaWFfc2V0a2V5X2VuYyBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMKK2NjbV9hdXRoX2RlY3J5cHQgbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0CitjY21fY29udGV4dCBtYmVkdGxzX2NjbV9jb250ZXh0CitjY21fZW5jcnlwdF9hbmRfdGFnIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZworY2NtX2ZyZWUgbWJlZHRsc19jY21fZnJlZQorY2NtX2luaXQgbWJlZHRsc19jY21faW5pdAorY2NtX3NlbGZfdGVzdCBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QKK2NpcGhlcl9hdXRoX2RlY3J5cHQgbWJlZHRsc19jaXBoZXJfYXV0aF9kZWNyeXB0CitjaXBoZXJfYXV0aF9lbmNyeXB0IG1iZWR0bHNfY2lwaGVyX2F1dGhfZW5jcnlwdAorY2lwaGVyX2Jhc2VfdCBtYmVkdGxzX2NpcGhlcl9iYXNlX3QKK2NpcGhlcl9jaGVja190YWcgbWJlZHRsc19jaXBoZXJfY2hlY2tfdGFnCitjaXBoZXJfY29udGV4dF90IG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdAorY2lwaGVyX2NyeXB0IG1iZWR0bHNfY2lwaGVyX2NyeXB0CitjaXBoZXJfZGVmaW5pdGlvbl90IG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25fdAorY2lwaGVyX2RlZmluaXRpb25zIG1iZWR0bHNfY2lwaGVyX2RlZmluaXRpb25zCitjaXBoZXJfZmluaXNoIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaAorY2lwaGVyX2ZyZWUgbWJlZHRsc19jaXBoZXJfZnJlZQorY2lwaGVyX2ZyZWVfY3R4IG1iZWR0bHNfY2lwaGVyX2ZyZWVfY3R4CitjaXBoZXJfZ2V0X2Jsb2NrX3NpemUgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUKK2NpcGhlcl9nZXRfY2lwaGVyX21vZGUgbWJlZHRsc19jaXBoZXJfZ2V0X2NpcGhlcl9tb2RlCitjaXBoZXJfZ2V0X2l2X3NpemUgbWJlZHRsc19jaXBoZXJfZ2V0X2l2X3NpemUKK2NpcGhlcl9nZXRfa2V5X3NpemUgbWJlZHRsc19jaXBoZXJfZ2V0X2tleV9iaXRsZW4KK2NpcGhlcl9nZXRfbmFtZSBtYmVkdGxzX2NpcGhlcl9nZXRfbmFtZQorY2lwaGVyX2dldF9vcGVyYXRpb24gbWJlZHRsc19jaXBoZXJfZ2V0X29wZXJhdGlvbgorY2lwaGVyX2dldF90eXBlIG1iZWR0bHNfY2lwaGVyX2dldF90eXBlCitjaXBoZXJfaWRfdCBtYmVkdGxzX2NpcGhlcl9pZF90CitjaXBoZXJfaW5mb19mcm9tX3N0cmluZyBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fc3RyaW5nCitjaXBoZXJfaW5mb19mcm9tX3R5cGUgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUKK2NpcGhlcl9pbmZvX2Zyb21fdmFsdWVzIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMKK2NpcGhlcl9pbmZvX3QgbWJlZHRsc19jaXBoZXJfaW5mb190CitjaXBoZXJfaW5pdCBtYmVkdGxzX2NpcGhlcl9pbml0CitjaXBoZXJfaW5pdF9jdHggbWJlZHRsc19jaXBoZXJfc2V0dXAKK2NpcGhlcl9saXN0IG1iZWR0bHNfY2lwaGVyX2xpc3QKK2NpcGhlcl9tb2RlX3QgbWJlZHRsc19jaXBoZXJfbW9kZV90CitjaXBoZXJfcGFkZGluZ190IG1iZWR0bHNfY2lwaGVyX3BhZGRpbmdfdAorY2lwaGVyX3Jlc2V0IG1iZWR0bHNfY2lwaGVyX3Jlc2V0CitjaXBoZXJfc2VsZl90ZXN0IG1iZWR0bHNfY2lwaGVyX3NlbGZfdGVzdAorY2lwaGVyX3NldF9pdiBtYmVkdGxzX2NpcGhlcl9zZXRfaXYKK2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlIG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUKK2NpcGhlcl9zZXRrZXkgbWJlZHRsc19jaXBoZXJfc2V0a2V5CitjaXBoZXJfdHlwZV90IG1iZWR0bHNfY2lwaGVyX3R5cGVfdAorY2lwaGVyX3VwZGF0ZSBtYmVkdGxzX2NpcGhlcl91cGRhdGUKK2NpcGhlcl91cGRhdGVfYWQgbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkCitjaXBoZXJfd3JpdGVfdGFnIG1iZWR0bHNfY2lwaGVyX3dyaXRlX3RhZworY3RyX2RyYmdfY29udGV4dCBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQKK2N0cl9kcmJnX2ZyZWUgbWJlZHRsc19jdHJfZHJiZ19mcmVlCitjdHJfZHJiZ19pbml0IG1iZWR0bHNfY3RyX2RyYmdfaW5pdAorY3RyX2RyYmdfaW5pdF9lbnRyb3B5X2xlbiBtYmVkdGxzX2N0cl9kcmJnX2luaXRfZW50cm9weV9sZW4KK2N0cl9kcmJnX3JhbmRvbSBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbQorY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkCitjdHJfZHJiZ19yZXNlZWQgbWJlZHRsc19jdHJfZHJiZ19yZXNlZWQKK2N0cl9kcmJnX3NlbGZfdGVzdCBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdAorY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuIG1iZWR0bHNfY3RyX2RyYmdfc2V0X2VudHJvcHlfbGVuCitjdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlIG1iZWR0bHNfY3RyX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZQorY3RyX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCBtYmVkdGxzX2N0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwKK2N0cl9kcmJnX3VwZGF0ZSBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZQorY3RyX2RyYmdfdXBkYXRlX3NlZWRfZmlsZSBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUKK2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZSBtYmVkdGxzX2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZQorZGVidWdfZm10IG1iZWR0bHNfZGVidWdfZm10CitkZWJ1Z19wcmludF9idWYgbWJlZHRsc19kZWJ1Z19wcmludF9idWYKK2RlYnVnX3ByaW50X2NydCBtYmVkdGxzX2RlYnVnX3ByaW50X2NydAorZGVidWdfcHJpbnRfZWNwIG1iZWR0bHNfZGVidWdfcHJpbnRfZWNwCitkZWJ1Z19wcmludF9tcGkgbWJlZHRsc19kZWJ1Z19wcmludF9tcGkKK2RlYnVnX3ByaW50X21zZyBtYmVkdGxzX2RlYnVnX3ByaW50X21zZworZGVidWdfcHJpbnRfcmV0IG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0CitkZWJ1Z19zZXRfbG9nX21vZGUgbWJlZHRsc19kZWJ1Z19zZXRfbG9nX21vZGUKK2RlYnVnX3NldF90aHJlc2hvbGQgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkCitkZXMzX2NvbnRleHQgbWJlZHRsc19kZXMzX2NvbnRleHQKK2RlczNfY3J5cHRfY2JjIG1iZWR0bHNfZGVzM19jcnlwdF9jYmMKK2RlczNfY3J5cHRfZWNiIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IKK2RlczNfZnJlZSBtYmVkdGxzX2RlczNfZnJlZQorZGVzM19pbml0IG1iZWR0bHNfZGVzM19pbml0CitkZXMzX3NldDJrZXlfZGVjIG1iZWR0bHNfZGVzM19zZXQya2V5X2RlYworZGVzM19zZXQya2V5X2VuYyBtYmVkdGxzX2RlczNfc2V0MmtleV9lbmMKK2RlczNfc2V0M2tleV9kZWMgbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjCitkZXMzX3NldDNrZXlfZW5jIG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYworZGVzX2NvbnRleHQgbWJlZHRsc19kZXNfY29udGV4dAorZGVzX2NyeXB0X2NiYyBtYmVkdGxzX2Rlc19jcnlwdF9jYmMKK2Rlc19jcnlwdF9lY2IgbWJlZHRsc19kZXNfY3J5cHRfZWNiCitkZXNfZnJlZSBtYmVkdGxzX2Rlc19mcmVlCitkZXNfaW5pdCBtYmVkdGxzX2Rlc19pbml0CitkZXNfa2V5X2NoZWNrX2tleV9wYXJpdHkgbWJlZHRsc19kZXNfa2V5X2NoZWNrX2tleV9wYXJpdHkKK2Rlc19rZXlfY2hlY2tfd2VhayBtYmVkdGxzX2Rlc19rZXlfY2hlY2tfd2VhaworZGVzX2tleV9zZXRfcGFyaXR5IG1iZWR0bHNfZGVzX2tleV9zZXRfcGFyaXR5CitkZXNfc2VsZl90ZXN0IG1iZWR0bHNfZGVzX3NlbGZfdGVzdAorZGVzX3NldGtleV9kZWMgbWJlZHRsc19kZXNfc2V0a2V5X2RlYworZGVzX3NldGtleV9lbmMgbWJlZHRsc19kZXNfc2V0a2V5X2VuYworZGhtX2NhbGNfc2VjcmV0IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0CitkaG1fY29udGV4dCBtYmVkdGxzX2RobV9jb250ZXh0CitkaG1fZnJlZSBtYmVkdGxzX2RobV9mcmVlCitkaG1faW5pdCBtYmVkdGxzX2RobV9pbml0CitkaG1fbWFrZV9wYXJhbXMgbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMKK2RobV9tYWtlX3B1YmxpYyBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYworZGhtX3BhcnNlX2RobSBtYmVkdGxzX2RobV9wYXJzZV9kaG0KK2RobV9wYXJzZV9kaG1maWxlIG1iZWR0bHNfZGhtX3BhcnNlX2RobWZpbGUKK2RobV9yZWFkX3BhcmFtcyBtYmVkdGxzX2RobV9yZWFkX3BhcmFtcworZGhtX3JlYWRfcHVibGljIG1iZWR0bHNfZGhtX3JlYWRfcHVibGljCitkaG1fc2VsZl90ZXN0IG1iZWR0bHNfZGhtX3NlbGZfdGVzdAorZWNkaF9jYWxjX3NlY3JldCBtYmVkdGxzX2VjZGhfY2FsY19zZWNyZXQKK2VjZGhfY29tcHV0ZV9zaGFyZWQgbWJlZHRsc19lY2RoX2NvbXB1dGVfc2hhcmVkCitlY2RoX2NvbnRleHQgbWJlZHRsc19lY2RoX2NvbnRleHQKK2VjZGhfZnJlZSBtYmVkdGxzX2VjZGhfZnJlZQorZWNkaF9nZW5fcHVibGljIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljCitlY2RoX2dldF9wYXJhbXMgbWJlZHRsc19lY2RoX2dldF9wYXJhbXMKK2VjZGhfaW5pdCBtYmVkdGxzX2VjZGhfaW5pdAorZWNkaF9tYWtlX3BhcmFtcyBtYmVkdGxzX2VjZGhfbWFrZV9wYXJhbXMKK2VjZGhfbWFrZV9wdWJsaWMgbWJlZHRsc19lY2RoX21ha2VfcHVibGljCitlY2RoX3JlYWRfcGFyYW1zIG1iZWR0bHNfZWNkaF9yZWFkX3BhcmFtcworZWNkaF9yZWFkX3B1YmxpYyBtYmVkdGxzX2VjZGhfcmVhZF9wdWJsaWMKK2VjZGhfc2VsZl90ZXN0IG1iZWR0bHNfZWNkaF9zZWxmX3Rlc3QKK2VjZGhfc2lkZSBtYmVkdGxzX2VjZGhfc2lkZQorZWNkc2FfY29udGV4dCBtYmVkdGxzX2VjZHNhX2NvbnRleHQKK2VjZHNhX2ZyZWUgbWJlZHRsc19lY2RzYV9mcmVlCitlY2RzYV9mcm9tX2tleXBhaXIgbWJlZHRsc19lY2RzYV9mcm9tX2tleXBhaXIKK2VjZHNhX2dlbmtleSBtYmVkdGxzX2VjZHNhX2dlbmtleQorZWNkc2FfaW5mbyBtYmVkdGxzX2VjZHNhX2luZm8KK2VjZHNhX2luaXQgbWJlZHRsc19lY2RzYV9pbml0CitlY2RzYV9yZWFkX3NpZ25hdHVyZSBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlCitlY2RzYV9zZWxmX3Rlc3QgbWJlZHRsc19lY2RzYV9zZWxmX3Rlc3QKK2VjZHNhX3NpZ24gbWJlZHRsc19lY2RzYV9zaWduCitlY2RzYV9zaWduX2RldCBtYmVkdGxzX2VjZHNhX3NpZ25fZGV0CitlY2RzYV92ZXJpZnkgbWJlZHRsc19lY2RzYV92ZXJpZnkKK2VjZHNhX3dyaXRlX3NpZ25hdHVyZSBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZQorZWNkc2Ffd3JpdGVfc2lnbmF0dXJlX2RldCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZV9kZXQKK2Vja2V5X2luZm8gbWJlZHRsc19lY2tleV9pbmZvCitlY2tleWRoX2luZm8gbWJlZHRsc19lY2tleWRoX2luZm8KK2VjcF9hZGQgbWJlZHRsc19lY3BfYWRkCitlY3BfY2hlY2tfcHJpdmtleSBtYmVkdGxzX2VjcF9jaGVja19wcml2a2V5CitlY3BfY2hlY2tfcHViX3ByaXYgbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXYKK2VjcF9jaGVja19wdWJrZXkgbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5CitlY3BfY29weSBtYmVkdGxzX2VjcF9jb3B5CitlY3BfY3VydmVfaW5mbyBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvCitlY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fZ3JwX2lkCitlY3BfY3VydmVfaW5mb19mcm9tX25hbWUgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX25hbWUKK2VjcF9jdXJ2ZV9pbmZvX2Zyb21fdGxzX2lkIG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQKK2VjcF9jdXJ2ZV9saXN0IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QKK2VjcF9nZW5fa2V5IG1iZWR0bHNfZWNwX2dlbl9rZXkKK2VjcF9nZW5fa2V5cGFpciBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpcgorZWNwX2dyb3VwIG1iZWR0bHNfZWNwX2dyb3VwCitlY3BfZ3JvdXBfY29weSBtYmVkdGxzX2VjcF9ncm91cF9jb3B5CitlY3BfZ3JvdXBfZnJlZSBtYmVkdGxzX2VjcF9ncm91cF9mcmVlCitlY3BfZ3JvdXBfaWQgbWJlZHRsc19lY3BfZ3JvdXBfaWQKK2VjcF9ncm91cF9pbml0IG1iZWR0bHNfZWNwX2dyb3VwX2luaXQKK2VjcF9ncm91cF9yZWFkX3N0cmluZyBtYmVkdGxzX2VjcF9ncm91cF9yZWFkX3N0cmluZworZWNwX2dycF9pZF9saXN0IG1iZWR0bHNfZWNwX2dycF9pZF9saXN0CitlY3BfaXNfemVybyBtYmVkdGxzX2VjcF9pc196ZXJvCitlY3Bfa2V5cGFpciBtYmVkdGxzX2VjcF9rZXlwYWlyCitlY3Bfa2V5cGFpcl9mcmVlIG1iZWR0bHNfZWNwX2tleXBhaXJfZnJlZQorZWNwX2tleXBhaXJfaW5pdCBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQKK2VjcF9tdWwgbWJlZHRsc19lY3BfbXVsCitlY3BfcG9pbnQgbWJlZHRsc19lY3BfcG9pbnQKK2VjcF9wb2ludF9mcmVlIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUKK2VjcF9wb2ludF9pbml0IG1iZWR0bHNfZWNwX3BvaW50X2luaXQKK2VjcF9wb2ludF9yZWFkX2JpbmFyeSBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeQorZWNwX3BvaW50X3JlYWRfc3RyaW5nIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfc3RyaW5nCitlY3BfcG9pbnRfd3JpdGVfYmluYXJ5IG1iZWR0bHNfZWNwX3BvaW50X3dyaXRlX2JpbmFyeQorZWNwX3NlbGZfdGVzdCBtYmVkdGxzX2VjcF9zZWxmX3Rlc3QKK2VjcF9zZXRfemVybyBtYmVkdGxzX2VjcF9zZXRfemVybworZWNwX3N1YiBtYmVkdGxzX2VjcF9zdWIKK2VjcF90bHNfcmVhZF9ncm91cCBtYmVkdGxzX2VjcF90bHNfcmVhZF9ncm91cAorZWNwX3Rsc19yZWFkX3BvaW50IG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50CitlY3BfdGxzX3dyaXRlX2dyb3VwIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9ncm91cAorZWNwX3Rsc193cml0ZV9wb2ludCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQKK2VjcF91c2Vfa25vd25fZHAgbWJlZHRsc19lY3BfZ3JvdXBfbG9hZAorZW50cm9weV9hZGRfc291cmNlIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlCitlbnRyb3B5X2NvbnRleHQgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQKK2VudHJvcHlfZnJlZSBtYmVkdGxzX2VudHJvcHlfZnJlZQorZW50cm9weV9mdW5jIG1iZWR0bHNfZW50cm9weV9mdW5jCitlbnRyb3B5X2dhdGhlciBtYmVkdGxzX2VudHJvcHlfZ2F0aGVyCitlbnRyb3B5X2luaXQgbWJlZHRsc19lbnRyb3B5X2luaXQKK2VudHJvcHlfc2VsZl90ZXN0IG1iZWR0bHNfZW50cm9weV9zZWxmX3Rlc3QKK2VudHJvcHlfdXBkYXRlX21hbnVhbCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX21hbnVhbAorZW50cm9weV91cGRhdGVfc2VlZF9maWxlIG1iZWR0bHNfZW50cm9weV91cGRhdGVfc2VlZF9maWxlCitlbnRyb3B5X3dyaXRlX3NlZWRfZmlsZSBtYmVkdGxzX2VudHJvcHlfd3JpdGVfc2VlZF9maWxlCitlcnJvcl9zdHJlcnJvciBtYmVkdGxzX3N0cmVycm9yCitmX3NvdXJjZV9wdHIgbWJlZHRsc19lbnRyb3B5X2Zfc291cmNlX3B0cgorZ2NtX2F1dGhfZGVjcnlwdCBtYmVkdGxzX2djbV9hdXRoX2RlY3J5cHQKK2djbV9jb250ZXh0IG1iZWR0bHNfZ2NtX2NvbnRleHQKK2djbV9jcnlwdF9hbmRfdGFnIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcKK2djbV9maW5pc2ggbWJlZHRsc19nY21fZmluaXNoCitnY21fZnJlZSBtYmVkdGxzX2djbV9mcmVlCitnY21faW5pdCBtYmVkdGxzX2djbV9pbml0CitnY21fc2VsZl90ZXN0IG1iZWR0bHNfZ2NtX3NlbGZfdGVzdAorZ2NtX3N0YXJ0cyBtYmVkdGxzX2djbV9zdGFydHMKK2djbV91cGRhdGUgbWJlZHRsc19nY21fdXBkYXRlCitnZXRfdGltZXIgbWJlZHRsc190aW1pbmdfZ2V0X3RpbWVyCitoYXJkY2xvY2sgbWJlZHRsc190aW1pbmdfaGFyZGNsb2NrCitoYXJkY2xvY2tfcG9sbCBtYmVkdGxzX2hhcmRjbG9ja19wb2xsCitoYXZlZ2VfZnJlZSBtYmVkdGxzX2hhdmVnZV9mcmVlCitoYXZlZ2VfaW5pdCBtYmVkdGxzX2hhdmVnZV9pbml0CitoYXZlZ2VfcG9sbCBtYmVkdGxzX2hhdmVnZV9wb2xsCitoYXZlZ2VfcmFuZG9tIG1iZWR0bHNfaGF2ZWdlX3JhbmRvbQoraGF2ZWdlX3N0YXRlIG1iZWR0bHNfaGF2ZWdlX3N0YXRlCitobWFjX2RyYmdfY29udGV4dCBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0CitobWFjX2RyYmdfZnJlZSBtYmVkdGxzX2htYWNfZHJiZ19mcmVlCitobWFjX2RyYmdfaW5pdCBtYmVkdGxzX2htYWNfZHJiZ19pbml0CitobWFjX2RyYmdfaW5pdF9idWYgbWJlZHRsc19obWFjX2RyYmdfaW5pdF9idWYKK2htYWNfZHJiZ19yYW5kb20gbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tCitobWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZAoraG1hY19kcmJnX3Jlc2VlZCBtYmVkdGxzX2htYWNfZHJiZ19yZXNlZWQKK2htYWNfZHJiZ19zZWxmX3Rlc3QgbWJlZHRsc19obWFjX2RyYmdfc2VsZl90ZXN0CitobWFjX2RyYmdfc2V0X2VudHJvcHlfbGVuIG1iZWR0bHNfaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbgoraG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZQoraG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwgbWJlZHRsc19obWFjX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbAoraG1hY19kcmJnX3VwZGF0ZSBtYmVkdGxzX2htYWNfZHJiZ191cGRhdGUKK2htYWNfZHJiZ191cGRhdGVfc2VlZF9maWxlIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUKK2htYWNfZHJiZ193cml0ZV9zZWVkX2ZpbGUgbWJlZHRsc19obWFjX2RyYmdfd3JpdGVfc2VlZF9maWxlCitocl90aW1lIG1iZWR0bHNfdGltaW5nX2hyX3RpbWUKK2tleV9leGNoYW5nZV90eXBlX3QgbWJlZHRsc19rZXlfZXhjaGFuZ2VfdHlwZV90CittX3NsZWVwIG1iZWR0bHNfdGltaW5nX21fc2xlZXAKK21kIG1iZWR0bHNfbWQKK21kMiBtYmVkdGxzX21kMgorbWQyX2NvbnRleHQgbWJlZHRsc19tZDJfY29udGV4dAorbWQyX2ZpbGUgbWJlZHRsc19tZDJfZmlsZQorbWQyX2ZpbmlzaCBtYmVkdGxzX21kMl9maW5pc2gKK21kMl9mcmVlIG1iZWR0bHNfbWQyX2ZyZWUKK21kMl9obWFjIG1iZWR0bHNfbWQyX2htYWMKK21kMl9obWFjX2ZpbmlzaCBtYmVkdGxzX21kMl9obWFjX2ZpbmlzaAorbWQyX2htYWNfcmVzZXQgbWJlZHRsc19tZDJfaG1hY19yZXNldAorbWQyX2htYWNfc3RhcnRzIG1iZWR0bHNfbWQyX2htYWNfc3RhcnRzCittZDJfaG1hY191cGRhdGUgbWJlZHRsc19tZDJfaG1hY191cGRhdGUKK21kMl9pbmZvIG1iZWR0bHNfbWQyX2luZm8KK21kMl9pbml0IG1iZWR0bHNfbWQyX2luaXQKK21kMl9wcm9jZXNzIG1iZWR0bHNfbWQyX3Byb2Nlc3MKK21kMl9zZWxmX3Rlc3QgbWJlZHRsc19tZDJfc2VsZl90ZXN0CittZDJfc3RhcnRzIG1iZWR0bHNfbWQyX3N0YXJ0cworbWQyX3VwZGF0ZSBtYmVkdGxzX21kMl91cGRhdGUKK21kNCBtYmVkdGxzX21kNAorbWQ0X2NvbnRleHQgbWJlZHRsc19tZDRfY29udGV4dAorbWQ0X2ZpbGUgbWJlZHRsc19tZDRfZmlsZQorbWQ0X2ZpbmlzaCBtYmVkdGxzX21kNF9maW5pc2gKK21kNF9mcmVlIG1iZWR0bHNfbWQ0X2ZyZWUKK21kNF9obWFjIG1iZWR0bHNfbWQ0X2htYWMKK21kNF9obWFjX2ZpbmlzaCBtYmVkdGxzX21kNF9obWFjX2ZpbmlzaAorbWQ0X2htYWNfcmVzZXQgbWJlZHRsc19tZDRfaG1hY19yZXNldAorbWQ0X2htYWNfc3RhcnRzIG1iZWR0bHNfbWQ0X2htYWNfc3RhcnRzCittZDRfaG1hY191cGRhdGUgbWJlZHRsc19tZDRfaG1hY191cGRhdGUKK21kNF9pbmZvIG1iZWR0bHNfbWQ0X2luZm8KK21kNF9pbml0IG1iZWR0bHNfbWQ0X2luaXQKK21kNF9wcm9jZXNzIG1iZWR0bHNfbWQ0X3Byb2Nlc3MKK21kNF9zZWxmX3Rlc3QgbWJlZHRsc19tZDRfc2VsZl90ZXN0CittZDRfc3RhcnRzIG1iZWR0bHNfbWQ0X3N0YXJ0cworbWQ0X3VwZGF0ZSBtYmVkdGxzX21kNF91cGRhdGUKK21kNSBtYmVkdGxzX21kNQorbWQ1X2NvbnRleHQgbWJlZHRsc19tZDVfY29udGV4dAorbWQ1X2ZpbGUgbWJlZHRsc19tZDVfZmlsZQorbWQ1X2ZpbmlzaCBtYmVkdGxzX21kNV9maW5pc2gKK21kNV9mcmVlIG1iZWR0bHNfbWQ1X2ZyZWUKK21kNV9obWFjIG1iZWR0bHNfbWQ1X2htYWMKK21kNV9obWFjX2ZpbmlzaCBtYmVkdGxzX21kNV9obWFjX2ZpbmlzaAorbWQ1X2htYWNfcmVzZXQgbWJlZHRsc19tZDVfaG1hY19yZXNldAorbWQ1X2htYWNfc3RhcnRzIG1iZWR0bHNfbWQ1X2htYWNfc3RhcnRzCittZDVfaG1hY191cGRhdGUgbWJlZHRsc19tZDVfaG1hY191cGRhdGUKK21kNV9pbmZvIG1iZWR0bHNfbWQ1X2luZm8KK21kNV9pbml0IG1iZWR0bHNfbWQ1X2luaXQKK21kNV9wcm9jZXNzIG1iZWR0bHNfbWQ1X3Byb2Nlc3MKK21kNV9zZWxmX3Rlc3QgbWJlZHRsc19tZDVfc2VsZl90ZXN0CittZDVfc3RhcnRzIG1iZWR0bHNfbWQ1X3N0YXJ0cworbWQ1X3VwZGF0ZSBtYmVkdGxzX21kNV91cGRhdGUKK21kX2NvbnRleHRfdCBtYmVkdGxzX21kX2NvbnRleHRfdAorbWRfZmlsZSBtYmVkdGxzX21kX2ZpbGUKK21kX2ZpbmlzaCBtYmVkdGxzX21kX2ZpbmlzaAorbWRfZnJlZSBtYmVkdGxzX21kX2ZyZWUKK21kX2ZyZWVfY3R4IG1iZWR0bHNfbWRfZnJlZV9jdHgKK21kX2dldF9uYW1lIG1iZWR0bHNfbWRfZ2V0X25hbWUKK21kX2dldF9zaXplIG1iZWR0bHNfbWRfZ2V0X3NpemUKK21kX2dldF90eXBlIG1iZWR0bHNfbWRfZ2V0X3R5cGUKK21kX2htYWMgbWJlZHRsc19tZF9obWFjCittZF9obWFjX2ZpbmlzaCBtYmVkdGxzX21kX2htYWNfZmluaXNoCittZF9obWFjX3Jlc2V0IG1iZWR0bHNfbWRfaG1hY19yZXNldAorbWRfaG1hY19zdGFydHMgbWJlZHRsc19tZF9obWFjX3N0YXJ0cworbWRfaG1hY191cGRhdGUgbWJlZHRsc19tZF9obWFjX3VwZGF0ZQorbWRfaW5mb19mcm9tX3N0cmluZyBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcKK21kX2luZm9fZnJvbV90eXBlIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUKK21kX2luZm9fdCBtYmVkdGxzX21kX2luZm9fdAorbWRfaW5pdCBtYmVkdGxzX21kX2luaXQKK21kX2luaXRfY3R4IG1iZWR0bHNfbWRfaW5pdF9jdHgKK21kX2xpc3QgbWJlZHRsc19tZF9saXN0CittZF9wcm9jZXNzIG1iZWR0bHNfbWRfcHJvY2VzcworbWRfc3RhcnRzIG1iZWR0bHNfbWRfc3RhcnRzCittZF90eXBlX3QgbWJlZHRsc19tZF90eXBlX3QKK21kX3VwZGF0ZSBtYmVkdGxzX21kX3VwZGF0ZQorbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0CittZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUKK21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdAorbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0CittZW1vcnlfYnVmZmVyX2FsbG9jX21heF9yZXNldCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfbWF4X3Jlc2V0CittZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc2VsZl90ZXN0CittZW1vcnlfYnVmZmVyX2FsbG9jX3N0YXR1cyBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc3RhdHVzCittZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5CittZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkgbWJlZHRsc19tZW1vcnlfYnVmZmVyX3NldF92ZXJpZnkKK21lbW9yeV9zZXRfb3duIG1iZWR0bHNfbWVtb3J5X3NldF9vd24KK21waSBtYmVkdGxzX21waQorbXBpX2FkZF9hYnMgbWJlZHRsc19tcGlfYWRkX2FicworbXBpX2FkZF9pbnQgbWJlZHRsc19tcGlfYWRkX2ludAorbXBpX2FkZF9tcGkgbWJlZHRsc19tcGlfYWRkX21waQorbXBpX2NtcF9hYnMgbWJlZHRsc19tcGlfY21wX2FicworbXBpX2NtcF9pbnQgbWJlZHRsc19tcGlfY21wX2ludAorbXBpX2NtcF9tcGkgbWJlZHRsc19tcGlfY21wX21waQorbXBpX2NvcHkgbWJlZHRsc19tcGlfY29weQorbXBpX2Rpdl9pbnQgbWJlZHRsc19tcGlfZGl2X2ludAorbXBpX2Rpdl9tcGkgbWJlZHRsc19tcGlfZGl2X21waQorbXBpX2V4cF9tb2QgbWJlZHRsc19tcGlfZXhwX21vZAorbXBpX2ZpbGxfcmFuZG9tIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tCittcGlfZnJlZSBtYmVkdGxzX21waV9mcmVlCittcGlfZ2NkIG1iZWR0bHNfbXBpX2djZAorbXBpX2dlbl9wcmltZSBtYmVkdGxzX21waV9nZW5fcHJpbWUKK21waV9nZXRfYml0IG1iZWR0bHNfbXBpX2dldF9iaXQKK21waV9ncm93IG1iZWR0bHNfbXBpX2dyb3cKK21waV9pbml0IG1iZWR0bHNfbXBpX2luaXQKK21waV9pbnZfbW9kIG1iZWR0bHNfbXBpX2ludl9tb2QKK21waV9pc19wcmltZSBtYmVkdGxzX21waV9pc19wcmltZQorbXBpX2xzYiBtYmVkdGxzX21waV9sc2IKK21waV9sc2V0IG1iZWR0bHNfbXBpX2xzZXQKK21waV9tb2RfaW50IG1iZWR0bHNfbXBpX21vZF9pbnQKK21waV9tb2RfbXBpIG1iZWR0bHNfbXBpX21vZF9tcGkKK21waV9tc2IgbWJlZHRsc19tcGlfYml0bGVuCittcGlfbXVsX2ludCBtYmVkdGxzX21waV9tdWxfaW50CittcGlfbXVsX21waSBtYmVkdGxzX21waV9tdWxfbXBpCittcGlfcmVhZF9iaW5hcnkgbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkKK21waV9yZWFkX2ZpbGUgbWJlZHRsc19tcGlfcmVhZF9maWxlCittcGlfcmVhZF9zdHJpbmcgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcKK21waV9zYWZlX2NvbmRfYXNzaWduIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24KK21waV9zYWZlX2NvbmRfc3dhcCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcAorbXBpX3NlbGZfdGVzdCBtYmVkdGxzX21waV9zZWxmX3Rlc3QKK21waV9zZXRfYml0IG1iZWR0bHNfbXBpX3NldF9iaXQKK21waV9zaGlmdF9sIG1iZWR0bHNfbXBpX3NoaWZ0X2wKK21waV9zaGlmdF9yIG1iZWR0bHNfbXBpX3NoaWZ0X3IKK21waV9zaHJpbmsgbWJlZHRsc19tcGlfc2hyaW5rCittcGlfc2l6ZSBtYmVkdGxzX21waV9zaXplCittcGlfc3ViX2FicyBtYmVkdGxzX21waV9zdWJfYWJzCittcGlfc3ViX2ludCBtYmVkdGxzX21waV9zdWJfaW50CittcGlfc3ViX21waSBtYmVkdGxzX21waV9zdWJfbXBpCittcGlfc3dhcCBtYmVkdGxzX21waV9zd2FwCittcGlfd3JpdGVfYmluYXJ5IG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeQorbXBpX3dyaXRlX2ZpbGUgbWJlZHRsc19tcGlfd3JpdGVfZmlsZQorbXBpX3dyaXRlX3N0cmluZyBtYmVkdGxzX21waV93cml0ZV9zdHJpbmcKK25ldF9hY2NlcHQgbWJlZHRsc19uZXRfYWNjZXB0CituZXRfYmluZCBtYmVkdGxzX25ldF9iaW5kCituZXRfY2xvc2UgbWJlZHRsc19uZXRfZnJlZQorbmV0X2Nvbm5lY3QgbWJlZHRsc19uZXRfY29ubmVjdAorbmV0X3JlY3YgbWJlZHRsc19uZXRfcmVjdgorbmV0X3JlY3ZfdGltZW91dCBtYmVkdGxzX25ldF9yZWN2X3RpbWVvdXQKK25ldF9zZW5kIG1iZWR0bHNfbmV0X3NlbmQKK25ldF9zZXRfYmxvY2sgbWJlZHRsc19uZXRfc2V0X2Jsb2NrCituZXRfc2V0X25vbmJsb2NrIG1iZWR0bHNfbmV0X3NldF9ub25ibG9jaworbmV0X3VzbGVlcCBtYmVkdGxzX25ldF91c2xlZXAKK29pZF9kZXNjcmlwdG9yX3QgbWJlZHRsc19vaWRfZGVzY3JpcHRvcl90CitvaWRfZ2V0X2F0dHJfc2hvcnRfbmFtZSBtYmVkdGxzX29pZF9nZXRfYXR0cl9zaG9ydF9uYW1lCitvaWRfZ2V0X2NpcGhlcl9hbGcgbWJlZHRsc19vaWRfZ2V0X2NpcGhlcl9hbGcKK29pZF9nZXRfZWNfZ3JwIG1iZWR0bHNfb2lkX2dldF9lY19ncnAKK29pZF9nZXRfZXh0ZW5kZWRfa2V5X3VzYWdlIG1iZWR0bHNfb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UKK29pZF9nZXRfbWRfYWxnIG1iZWR0bHNfb2lkX2dldF9tZF9hbGcKK29pZF9nZXRfbnVtZXJpY19zdHJpbmcgbWJlZHRsc19vaWRfZ2V0X251bWVyaWNfc3RyaW5nCitvaWRfZ2V0X29pZF9ieV9lY19ncnAgbWJlZHRsc19vaWRfZ2V0X29pZF9ieV9lY19ncnAKK29pZF9nZXRfb2lkX2J5X21kIG1iZWR0bHNfb2lkX2dldF9vaWRfYnlfbWQKK29pZF9nZXRfb2lkX2J5X3BrX2FsZyBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3BrX2FsZworb2lkX2dldF9vaWRfYnlfc2lnX2FsZyBtYmVkdGxzX29pZF9nZXRfb2lkX2J5X3NpZ19hbGcKK29pZF9nZXRfcGtfYWxnIG1iZWR0bHNfb2lkX2dldF9wa19hbGcKK29pZF9nZXRfcGtjczEyX3BiZV9hbGcgbWJlZHRsc19vaWRfZ2V0X3BrY3MxMl9wYmVfYWxnCitvaWRfZ2V0X3NpZ19hbGcgbWJlZHRsc19vaWRfZ2V0X3NpZ19hbGcKK29pZF9nZXRfc2lnX2FsZ19kZXNjIG1iZWR0bHNfb2lkX2dldF9zaWdfYWxnX2Rlc2MKK29pZF9nZXRfeDUwOV9leHRfdHlwZSBtYmVkdGxzX29pZF9nZXRfeDUwOV9leHRfdHlwZQorb3BlcmF0aW9uX3QgbWJlZHRsc19vcGVyYXRpb25fdAorcGFkbG9ja19zdXBwb3J0cyBtYmVkdGxzX3BhZGxvY2tfaGFzX3N1cHBvcnQKK3BhZGxvY2tfeGNyeXB0Y2JjIG1iZWR0bHNfcGFkbG9ja194Y3J5cHRjYmMKK3BhZGxvY2tfeGNyeXB0ZWNiIG1iZWR0bHNfcGFkbG9ja194Y3J5cHRlY2IKK3BlbV9jb250ZXh0IG1iZWR0bHNfcGVtX2NvbnRleHQKK3BlbV9mcmVlIG1iZWR0bHNfcGVtX2ZyZWUKK3BlbV9pbml0IG1iZWR0bHNfcGVtX2luaXQKK3BlbV9yZWFkX2J1ZmZlciBtYmVkdGxzX3BlbV9yZWFkX2J1ZmZlcgorcGVtX3dyaXRlX2J1ZmZlciBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIKK3BrX2Nhbl9kbyBtYmVkdGxzX3BrX2Nhbl9kbworcGtfY2hlY2tfcGFpciBtYmVkdGxzX3BrX2NoZWNrX3BhaXIKK3BrX2NvbnRleHQgbWJlZHRsc19wa19jb250ZXh0Citwa19kZWJ1ZyBtYmVkdGxzX3BrX2RlYnVnCitwa19kZWJ1Z19pdGVtIG1iZWR0bHNfcGtfZGVidWdfaXRlbQorcGtfZGVidWdfdHlwZSBtYmVkdGxzX3BrX2RlYnVnX3R5cGUKK3BrX2RlY3J5cHQgbWJlZHRsc19wa19kZWNyeXB0Citwa19lYyBtYmVkdGxzX3BrX2VjCitwa19lbmNyeXB0IG1iZWR0bHNfcGtfZW5jcnlwdAorcGtfZnJlZSBtYmVkdGxzX3BrX2ZyZWUKK3BrX2dldF9sZW4gbWJlZHRsc19wa19nZXRfbGVuCitwa19nZXRfbmFtZSBtYmVkdGxzX3BrX2dldF9uYW1lCitwa19nZXRfc2l6ZSBtYmVkdGxzX3BrX2dldF9iaXRsZW4KK3BrX2dldF90eXBlIG1iZWR0bHNfcGtfZ2V0X3R5cGUKK3BrX2luZm9fZnJvbV90eXBlIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUKK3BrX2luZm9fdCBtYmVkdGxzX3BrX2luZm9fdAorcGtfaW5pdCBtYmVkdGxzX3BrX2luaXQKK3BrX2luaXRfY3R4IG1iZWR0bHNfcGtfc2V0dXAKK3BrX2luaXRfY3R4X3JzYV9hbHQgbWJlZHRsc19wa19zZXR1cF9yc2FfYWx0Citwa19sb2FkX2ZpbGUgbWJlZHRsc19wa19sb2FkX2ZpbGUKK3BrX3BhcnNlX2tleSBtYmVkdGxzX3BrX3BhcnNlX2tleQorcGtfcGFyc2Vfa2V5ZmlsZSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUKK3BrX3BhcnNlX3B1YmxpY19rZXkgbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5Citwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSBtYmVkdGxzX3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlCitwa19wYXJzZV9zdWJwdWJrZXkgbWJlZHRsc19wa19wYXJzZV9zdWJwdWJrZXkKK3BrX3JzYSBtYmVkdGxzX3BrX3JzYQorcGtfcnNhX2FsdF9kZWNyeXB0X2Z1bmMgbWJlZHRsc19wa19yc2FfYWx0X2RlY3J5cHRfZnVuYworcGtfcnNhX2FsdF9rZXlfbGVuX2Z1bmMgbWJlZHRsc19wa19yc2FfYWx0X2tleV9sZW5fZnVuYworcGtfcnNhX2FsdF9zaWduX2Z1bmMgbWJlZHRsc19wa19yc2FfYWx0X3NpZ25fZnVuYworcGtfcnNhc3NhX3Bzc19vcHRpb25zIG1iZWR0bHNfcGtfcnNhc3NhX3Bzc19vcHRpb25zCitwa19zaWduIG1iZWR0bHNfcGtfc2lnbgorcGtfdHlwZV90IG1iZWR0bHNfcGtfdHlwZV90Citwa192ZXJpZnkgbWJlZHRsc19wa192ZXJpZnkKK3BrX3ZlcmlmeV9leHQgbWJlZHRsc19wa192ZXJpZnlfZXh0Citwa193cml0ZV9rZXlfZGVyIG1iZWR0bHNfcGtfd3JpdGVfa2V5X2RlcgorcGtfd3JpdGVfa2V5X3BlbSBtYmVkdGxzX3BrX3dyaXRlX2tleV9wZW0KK3BrX3dyaXRlX3B1YmtleSBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleQorcGtfd3JpdGVfcHVia2V5X2RlciBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9kZXIKK3BrX3dyaXRlX3B1YmtleV9wZW0gbWJlZHRsc19wa193cml0ZV9wdWJrZXlfcGVtCitwa2NzMTFfY29udGV4dCBtYmVkdGxzX3BrY3MxMV9jb250ZXh0Citwa2NzMTFfZGVjcnlwdCBtYmVkdGxzX3BrY3MxMV9kZWNyeXB0Citwa2NzMTFfcHJpdl9rZXlfZnJlZSBtYmVkdGxzX3BrY3MxMV9wcml2X2tleV9mcmVlCitwa2NzMTFfcHJpdl9rZXlfaW5pdCBtYmVkdGxzX3BrY3MxMV9wcml2X2tleV9iaW5kCitwa2NzMTFfc2lnbiBtYmVkdGxzX3BrY3MxMV9zaWduCitwa2NzMTFfeDUwOV9jZXJ0X2luaXQgbWJlZHRsc19wa2NzMTFfeDUwOV9jZXJ0X2JpbmQKK3BrY3MxMl9kZXJpdmF0aW9uIG1iZWR0bHNfcGtjczEyX2Rlcml2YXRpb24KK3BrY3MxMl9wYmUgbWJlZHRsc19wa2NzMTJfcGJlCitwa2NzMTJfcGJlX3NoYTFfcmM0XzEyOCBtYmVkdGxzX3BrY3MxMl9wYmVfc2hhMV9yYzRfMTI4Citwa2NzNV9wYmVzMiBtYmVkdGxzX3BrY3M1X3BiZXMyCitwa2NzNV9wYmtkZjJfaG1hYyBtYmVkdGxzX3BrY3M1X3Bia2RmMl9obWFjCitwa2NzNV9zZWxmX3Rlc3QgbWJlZHRsc19wa2NzNV9zZWxmX3Rlc3QKK3BsYXRmb3JtX2VudHJvcHlfcG9sbCBtYmVkdGxzX3BsYXRmb3JtX2VudHJvcHlfcG9sbAorcGxhdGZvcm1fc2V0X2V4aXQgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZXhpdAorcGxhdGZvcm1fc2V0X2ZwcmludGYgbWJlZHRsc19wbGF0Zm9ybV9zZXRfZnByaW50ZgorcGxhdGZvcm1fc2V0X21hbGxvY19mcmVlIG1iZWR0bHNfcGxhdGZvcm1fc2V0X21hbGxvY19mcmVlCitwbGF0Zm9ybV9zZXRfcHJpbnRmIG1iZWR0bHNfcGxhdGZvcm1fc2V0X3ByaW50ZgorcGxhdGZvcm1fc2V0X3NucHJpbnRmIG1iZWR0bHNfcGxhdGZvcm1fc2V0X3NucHJpbnRmCitwb2xhcnNzbF9leGl0IG1iZWR0bHNfZXhpdAorcG9sYXJzc2xfZnByaW50ZiBtYmVkdGxzX2ZwcmludGYKK3BvbGFyc3NsX2ZyZWUgbWJlZHRsc19mcmVlCitwb2xhcnNzbF9tYWxsb2MgbWJlZHRsc19tYWxsb2MKK3BvbGFyc3NsX211dGV4X2ZyZWUgbWJlZHRsc19tdXRleF9mcmVlCitwb2xhcnNzbF9tdXRleF9pbml0IG1iZWR0bHNfbXV0ZXhfaW5pdAorcG9sYXJzc2xfbXV0ZXhfbG9jayBtYmVkdGxzX211dGV4X2xvY2sKK3BvbGFyc3NsX211dGV4X3VubG9jayBtYmVkdGxzX211dGV4X3VubG9jaworcG9sYXJzc2xfcHJpbnRmIG1iZWR0bHNfcHJpbnRmCitwb2xhcnNzbF9zbnByaW50ZiBtYmVkdGxzX3NucHJpbnRmCitwb2xhcnNzbF9zdHJlcnJvciBtYmVkdGxzX3N0cmVycm9yCityaXBlbWQxNjAgbWJlZHRsc19yaXBlbWQxNjAKK3JpcGVtZDE2MF9jb250ZXh0IG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQKK3JpcGVtZDE2MF9maWxlIG1iZWR0bHNfcmlwZW1kMTYwX2ZpbGUKK3JpcGVtZDE2MF9maW5pc2ggbWJlZHRsc19yaXBlbWQxNjBfZmluaXNoCityaXBlbWQxNjBfZnJlZSBtYmVkdGxzX3JpcGVtZDE2MF9mcmVlCityaXBlbWQxNjBfaG1hYyBtYmVkdGxzX3JpcGVtZDE2MF9obWFjCityaXBlbWQxNjBfaG1hY19maW5pc2ggbWJlZHRsc19yaXBlbWQxNjBfaG1hY19maW5pc2gKK3JpcGVtZDE2MF9obWFjX3Jlc2V0IG1iZWR0bHNfcmlwZW1kMTYwX2htYWNfcmVzZXQKK3JpcGVtZDE2MF9obWFjX3N0YXJ0cyBtYmVkdGxzX3JpcGVtZDE2MF9obWFjX3N0YXJ0cworcmlwZW1kMTYwX2htYWNfdXBkYXRlIG1iZWR0bHNfcmlwZW1kMTYwX2htYWNfdXBkYXRlCityaXBlbWQxNjBfaW5mbyBtYmVkdGxzX3JpcGVtZDE2MF9pbmZvCityaXBlbWQxNjBfaW5pdCBtYmVkdGxzX3JpcGVtZDE2MF9pbml0CityaXBlbWQxNjBfcHJvY2VzcyBtYmVkdGxzX3JpcGVtZDE2MF9wcm9jZXNzCityaXBlbWQxNjBfc2VsZl90ZXN0IG1iZWR0bHNfcmlwZW1kMTYwX3NlbGZfdGVzdAorcmlwZW1kMTYwX3N0YXJ0cyBtYmVkdGxzX3JpcGVtZDE2MF9zdGFydHMKK3JpcGVtZDE2MF91cGRhdGUgbWJlZHRsc19yaXBlbWQxNjBfdXBkYXRlCityc2FfYWx0X2NvbnRleHQgbWJlZHRsc19yc2FfYWx0X2NvbnRleHQKK3JzYV9hbHRfaW5mbyBtYmVkdGxzX3JzYV9hbHRfaW5mbworcnNhX2NoZWNrX3ByaXZrZXkgbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleQorcnNhX2NoZWNrX3B1Yl9wcml2IG1iZWR0bHNfcnNhX2NoZWNrX3B1Yl9wcml2Cityc2FfY2hlY2tfcHVia2V5IG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleQorcnNhX2NvbnRleHQgbWJlZHRsc19yc2FfY29udGV4dAorcnNhX2NvcHkgbWJlZHRsc19yc2FfY29weQorcnNhX2RlY3J5cHRfZnVuYyBtYmVkdGxzX3JzYV9kZWNyeXB0X2Z1bmMKK3JzYV9mcmVlIG1iZWR0bHNfcnNhX2ZyZWUKK3JzYV9nZW5fa2V5IG1iZWR0bHNfcnNhX2dlbl9rZXkKK3JzYV9pbmZvIG1iZWR0bHNfcnNhX2luZm8KK3JzYV9pbml0IG1iZWR0bHNfcnNhX2luaXQKK3JzYV9rZXlfbGVuX2Z1bmMgbWJlZHRsc19yc2Ffa2V5X2xlbl9mdW5jCityc2FfcGtjczFfZGVjcnlwdCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0Cityc2FfcGtjczFfZW5jcnlwdCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0Cityc2FfcGtjczFfc2lnbiBtYmVkdGxzX3JzYV9wa2NzMV9zaWduCityc2FfcGtjczFfdmVyaWZ5IG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeQorcnNhX3ByaXZhdGUgbWJlZHRsc19yc2FfcHJpdmF0ZQorcnNhX3B1YmxpYyBtYmVkdGxzX3JzYV9wdWJsaWMKK3JzYV9yc2Flc19vYWVwX2RlY3J5cHQgbWJlZHRsc19yc2FfcnNhZXNfb2FlcF9kZWNyeXB0Cityc2FfcnNhZXNfb2FlcF9lbmNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX29hZXBfZW5jcnlwdAorcnNhX3JzYWVzX3BrY3MxX3YxNV9kZWNyeXB0IG1iZWR0bHNfcnNhX3JzYWVzX3BrY3MxX3YxNV9kZWNyeXB0Cityc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQgbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQKK3JzYV9yc2Fzc2FfcGtjczFfdjE1X3NpZ24gbWJlZHRsc19yc2FfcnNhc3NhX3BrY3MxX3YxNV9zaWduCityc2FfcnNhc3NhX3BrY3MxX3YxNV92ZXJpZnkgbWJlZHRsc19yc2FfcnNhc3NhX3BrY3MxX3YxNV92ZXJpZnkKK3JzYV9yc2Fzc2FfcHNzX3NpZ24gbWJlZHRsc19yc2FfcnNhc3NhX3Bzc19zaWduCityc2FfcnNhc3NhX3Bzc192ZXJpZnkgbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnkKK3JzYV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQgbWJlZHRsc19yc2FfcnNhc3NhX3Bzc192ZXJpZnlfZXh0Cityc2Ffc2VsZl90ZXN0IG1iZWR0bHNfcnNhX3NlbGZfdGVzdAorcnNhX3NldF9wYWRkaW5nIG1iZWR0bHNfcnNhX3NldF9wYWRkaW5nCityc2Ffc2lnbl9mdW5jIG1iZWR0bHNfcnNhX3NpZ25fZnVuYworc2FmZXJfbWVtY21wIG1iZWR0bHNfc3NsX3NhZmVyX21lbWNtcAorc2V0X2FsYXJtIG1iZWR0bHNfc2V0X2FsYXJtCitzaGExIG1iZWR0bHNfc2hhMQorc2hhMV9jb250ZXh0IG1iZWR0bHNfc2hhMV9jb250ZXh0CitzaGExX2ZpbGUgbWJlZHRsc19zaGExX2ZpbGUKK3NoYTFfZmluaXNoIG1iZWR0bHNfc2hhMV9maW5pc2gKK3NoYTFfZnJlZSBtYmVkdGxzX3NoYTFfZnJlZQorc2hhMV9obWFjIG1iZWR0bHNfc2hhMV9obWFjCitzaGExX2htYWNfZmluaXNoIG1iZWR0bHNfc2hhMV9obWFjX2ZpbmlzaAorc2hhMV9obWFjX3Jlc2V0IG1iZWR0bHNfc2hhMV9obWFjX3Jlc2V0CitzaGExX2htYWNfc3RhcnRzIG1iZWR0bHNfc2hhMV9obWFjX3N0YXJ0cworc2hhMV9obWFjX3VwZGF0ZSBtYmVkdGxzX3NoYTFfaG1hY191cGRhdGUKK3NoYTFfaW5mbyBtYmVkdGxzX3NoYTFfaW5mbworc2hhMV9pbml0IG1iZWR0bHNfc2hhMV9pbml0CitzaGExX3Byb2Nlc3MgbWJlZHRsc19zaGExX3Byb2Nlc3MKK3NoYTFfc2VsZl90ZXN0IG1iZWR0bHNfc2hhMV9zZWxmX3Rlc3QKK3NoYTFfc3RhcnRzIG1iZWR0bHNfc2hhMV9zdGFydHMKK3NoYTFfdXBkYXRlIG1iZWR0bHNfc2hhMV91cGRhdGUKK3NoYTIyNF9pbmZvIG1iZWR0bHNfc2hhMjI0X2luZm8KK3NoYTI1NiBtYmVkdGxzX3NoYTI1Ngorc2hhMjU2X2NvbnRleHQgbWJlZHRsc19zaGEyNTZfY29udGV4dAorc2hhMjU2X2ZpbGUgbWJlZHRsc19zaGEyNTZfZmlsZQorc2hhMjU2X2ZpbmlzaCBtYmVkdGxzX3NoYTI1Nl9maW5pc2gKK3NoYTI1Nl9mcmVlIG1iZWR0bHNfc2hhMjU2X2ZyZWUKK3NoYTI1Nl9obWFjIG1iZWR0bHNfc2hhMjU2X2htYWMKK3NoYTI1Nl9obWFjX2ZpbmlzaCBtYmVkdGxzX3NoYTI1Nl9obWFjX2ZpbmlzaAorc2hhMjU2X2htYWNfcmVzZXQgbWJlZHRsc19zaGEyNTZfaG1hY19yZXNldAorc2hhMjU2X2htYWNfc3RhcnRzIG1iZWR0bHNfc2hhMjU2X2htYWNfc3RhcnRzCitzaGEyNTZfaG1hY191cGRhdGUgbWJlZHRsc19zaGEyNTZfaG1hY191cGRhdGUKK3NoYTI1Nl9pbmZvIG1iZWR0bHNfc2hhMjU2X2luZm8KK3NoYTI1Nl9pbml0IG1iZWR0bHNfc2hhMjU2X2luaXQKK3NoYTI1Nl9wcm9jZXNzIG1iZWR0bHNfc2hhMjU2X3Byb2Nlc3MKK3NoYTI1Nl9zZWxmX3Rlc3QgbWJlZHRsc19zaGEyNTZfc2VsZl90ZXN0CitzaGEyNTZfc3RhcnRzIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cworc2hhMjU2X3VwZGF0ZSBtYmVkdGxzX3NoYTI1Nl91cGRhdGUKK3NoYTM4NF9pbmZvIG1iZWR0bHNfc2hhMzg0X2luZm8KK3NoYTUxMiBtYmVkdGxzX3NoYTUxMgorc2hhNTEyX2NvbnRleHQgbWJlZHRsc19zaGE1MTJfY29udGV4dAorc2hhNTEyX2ZpbGUgbWJlZHRsc19zaGE1MTJfZmlsZQorc2hhNTEyX2ZpbmlzaCBtYmVkdGxzX3NoYTUxMl9maW5pc2gKK3NoYTUxMl9mcmVlIG1iZWR0bHNfc2hhNTEyX2ZyZWUKK3NoYTUxMl9obWFjIG1iZWR0bHNfc2hhNTEyX2htYWMKK3NoYTUxMl9obWFjX2ZpbmlzaCBtYmVkdGxzX3NoYTUxMl9obWFjX2ZpbmlzaAorc2hhNTEyX2htYWNfcmVzZXQgbWJlZHRsc19zaGE1MTJfaG1hY19yZXNldAorc2hhNTEyX2htYWNfc3RhcnRzIG1iZWR0bHNfc2hhNTEyX2htYWNfc3RhcnRzCitzaGE1MTJfaG1hY191cGRhdGUgbWJlZHRsc19zaGE1MTJfaG1hY191cGRhdGUKK3NoYTUxMl9pbmZvIG1iZWR0bHNfc2hhNTEyX2luZm8KK3NoYTUxMl9pbml0IG1iZWR0bHNfc2hhNTEyX2luaXQKK3NoYTUxMl9wcm9jZXNzIG1iZWR0bHNfc2hhNTEyX3Byb2Nlc3MKK3NoYTUxMl9zZWxmX3Rlc3QgbWJlZHRsc19zaGE1MTJfc2VsZl90ZXN0CitzaGE1MTJfc3RhcnRzIG1iZWR0bHNfc2hhNTEyX3N0YXJ0cworc2hhNTEyX3VwZGF0ZSBtYmVkdGxzX3NoYTUxMl91cGRhdGUKK3NvdXJjZV9zdGF0ZSBtYmVkdGxzX2VudHJvcHlfc291cmNlX3N0YXRlCitzc2xfY2FjaGVfY29udGV4dCBtYmVkdGxzX3NzbF9jYWNoZV9jb250ZXh0Citzc2xfY2FjaGVfZW50cnkgbWJlZHRsc19zc2xfY2FjaGVfZW50cnkKK3NzbF9jYWNoZV9mcmVlIG1iZWR0bHNfc3NsX2NhY2hlX2ZyZWUKK3NzbF9jYWNoZV9nZXQgbWJlZHRsc19zc2xfY2FjaGVfZ2V0Citzc2xfY2FjaGVfaW5pdCBtYmVkdGxzX3NzbF9jYWNoZV9pbml0Citzc2xfY2FjaGVfc2V0IG1iZWR0bHNfc3NsX2NhY2hlX3NldAorc3NsX2NhY2hlX3NldF9tYXhfZW50cmllcyBtYmVkdGxzX3NzbF9jYWNoZV9zZXRfbWF4X2VudHJpZXMKK3NzbF9jYWNoZV9zZXRfdGltZW91dCBtYmVkdGxzX3NzbF9jYWNoZV9zZXRfdGltZW91dAorc3NsX2NoZWNrX2NlcnRfdXNhZ2UgbWJlZHRsc19zc2xfY2hlY2tfY2VydF91c2FnZQorc3NsX2NpcGhlcnN1aXRlX2Zyb21faWQgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfZnJvbV9pZAorc3NsX2NpcGhlcnN1aXRlX2Zyb21fc3RyaW5nIG1iZWR0bHNfc3NsX2NpcGhlcnN1aXRlX2Zyb21fc3RyaW5nCitzc2xfY2lwaGVyc3VpdGVfdCBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV90Citzc2xfY2lwaGVyc3VpdGVfdXNlc19lYyBtYmVkdGxzX3NzbF9jaXBoZXJzdWl0ZV91c2VzX2VjCitzc2xfY2lwaGVyc3VpdGVfdXNlc19wc2sgbWJlZHRsc19zc2xfY2lwaGVyc3VpdGVfdXNlc19wc2sKK3NzbF9jbG9zZV9ub3RpZnkgbWJlZHRsc19zc2xfY2xvc2Vfbm90aWZ5Citzc2xfY29udGV4dCBtYmVkdGxzX3NzbF9jb250ZXh0Citzc2xfY29va2llX2NoZWNrIG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVjaworc3NsX2Nvb2tpZV9jaGVja190IG1iZWR0bHNfc3NsX2Nvb2tpZV9jaGVja190Citzc2xfY29va2llX2N0eCBtYmVkdGxzX3NzbF9jb29raWVfY3R4Citzc2xfY29va2llX2ZyZWUgbWJlZHRsc19zc2xfY29va2llX2ZyZWUKK3NzbF9jb29raWVfaW5pdCBtYmVkdGxzX3NzbF9jb29raWVfaW5pdAorc3NsX2Nvb2tpZV9zZXRfdGltZW91dCBtYmVkdGxzX3NzbF9jb29raWVfc2V0X3RpbWVvdXQKK3NzbF9jb29raWVfc2V0dXAgbWJlZHRsc19zc2xfY29va2llX3NldHVwCitzc2xfY29va2llX3dyaXRlIG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZQorc3NsX2Nvb2tpZV93cml0ZV90IG1iZWR0bHNfc3NsX2Nvb2tpZV93cml0ZV90Citzc2xfY3VydmVfaXNfYWNjZXB0YWJsZSBtYmVkdGxzX3NzbF9jdXJ2ZV9pc19hY2NlcHRhYmxlCitzc2xfZGVyaXZlX2tleXMgbWJlZHRsc19zc2xfZGVyaXZlX2tleXMKK3NzbF9kdGxzX3JlcGxheV9jaGVjayBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV9jaGVjaworc3NsX2R0bHNfcmVwbGF5X3VwZGF0ZSBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV91cGRhdGUKK3NzbF9mZXRjaF9pbnB1dCBtYmVkdGxzX3NzbF9mZXRjaF9pbnB1dAorc3NsX2ZsaWdodF9pdGVtIG1iZWR0bHNfc3NsX2ZsaWdodF9pdGVtCitzc2xfZmx1c2hfb3V0cHV0IG1iZWR0bHNfc3NsX2ZsdXNoX291dHB1dAorc3NsX2ZyZWUgbWJlZHRsc19zc2xfZnJlZQorc3NsX2dldF9hbHBuX3Byb3RvY29sIG1iZWR0bHNfc3NsX2dldF9hbHBuX3Byb3RvY29sCitzc2xfZ2V0X2J5dGVzX2F2YWlsIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbAorc3NsX2dldF9jaXBoZXJzdWl0ZSBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUKK3NzbF9nZXRfY2lwaGVyc3VpdGVfaWQgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX2lkCitzc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUgbWJlZHRsc19zc2xfZ2V0X2NpcGhlcnN1aXRlX25hbWUKK3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZyBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGVfc2lnX3BrX2FsZworc3NsX2dldF9wZWVyX2NlcnQgbWJlZHRsc19zc2xfZ2V0X3BlZXJfY2VydAorc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uIG1iZWR0bHNfc3NsX2dldF9yZWNvcmRfZXhwYW5zaW9uCitzc2xfZ2V0X3Nlc3Npb24gbWJlZHRsc19zc2xfZ2V0X3Nlc3Npb24KK3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdAorc3NsX2dldF92ZXJzaW9uIG1iZWR0bHNfc3NsX2dldF92ZXJzaW9uCitzc2xfaGFuZHNoYWtlIG1iZWR0bHNfc3NsX2hhbmRzaGFrZQorc3NsX2hhbmRzaGFrZV9jbGllbnRfc3RlcCBtYmVkdGxzX3NzbF9oYW5kc2hha2VfY2xpZW50X3N0ZXAKK3NzbF9oYW5kc2hha2VfZnJlZSBtYmVkdGxzX3NzbF9oYW5kc2hha2VfZnJlZQorc3NsX2hhbmRzaGFrZV9wYXJhbXMgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3BhcmFtcworc3NsX2hhbmRzaGFrZV9zZXJ2ZXJfc3RlcCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc2VydmVyX3N0ZXAKK3NzbF9oYW5kc2hha2Vfc3RlcCBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc3RlcAorc3NsX2hhbmRzaGFrZV93cmFwdXAgbWJlZHRsc19zc2xfaGFuZHNoYWtlX3dyYXB1cAorc3NsX2hkcl9sZW4gbWJlZHRsc19zc2xfaGRyX2xlbgorc3NsX2hzX2hkcl9sZW4gbWJlZHRsc19zc2xfaHNfaGRyX2xlbgorc3NsX2h3X3JlY29yZF9hY3RpdmF0ZSBtYmVkdGxzX3NzbF9od19yZWNvcmRfYWN0aXZhdGUKK3NzbF9od19yZWNvcmRfZmluaXNoIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9maW5pc2gKK3NzbF9od19yZWNvcmRfaW5pdCBtYmVkdGxzX3NzbF9od19yZWNvcmRfaW5pdAorc3NsX2h3X3JlY29yZF9yZWFkIG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZWFkCitzc2xfaHdfcmVjb3JkX3Jlc2V0IG1iZWR0bHNfc3NsX2h3X3JlY29yZF9yZXNldAorc3NsX2h3X3JlY29yZF93cml0ZSBtYmVkdGxzX3NzbF9od19yZWNvcmRfd3JpdGUKK3NzbF9pbml0IG1iZWR0bHNfc3NsX2luaXQKK3NzbF9rZXlfY2VydCBtYmVkdGxzX3NzbF9rZXlfY2VydAorc3NsX2xlZ2FjeV9yZW5lZ290aWF0aW9uIG1iZWR0bHNfc3NsX2NvbmZfbGVnYWN5X3JlbmVnb3RpYXRpb24KK3NzbF9saXN0X2NpcGhlcnN1aXRlcyBtYmVkdGxzX3NzbF9saXN0X2NpcGhlcnN1aXRlcworc3NsX21kX2FsZ19mcm9tX2hhc2ggbWJlZHRsc19zc2xfbWRfYWxnX2Zyb21faGFzaAorc3NsX29wdGltaXplX2NoZWNrc3VtIG1iZWR0bHNfc3NsX29wdGltaXplX2NoZWNrc3VtCitzc2xfb3duX2NlcnQgbWJlZHRsc19zc2xfb3duX2NlcnQKK3NzbF9vd25fa2V5IG1iZWR0bHNfc3NsX293bl9rZXkKK3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZSBtYmVkdGxzX3NzbF9wYXJzZV9jZXJ0aWZpY2F0ZQorc3NsX3BhcnNlX2NoYW5nZV9jaXBoZXJfc3BlYyBtYmVkdGxzX3NzbF9wYXJzZV9jaGFuZ2VfY2lwaGVyX3NwZWMKK3NzbF9wYXJzZV9maW5pc2hlZCBtYmVkdGxzX3NzbF9wYXJzZV9maW5pc2hlZAorc3NsX3BrX2FsZ19mcm9tX3NpZyBtYmVkdGxzX3NzbF9wa19hbGdfZnJvbV9zaWcKK3NzbF9wa2NzMTFfZGVjcnlwdCBtYmVkdGxzX3NzbF9wa2NzMTFfZGVjcnlwdAorc3NsX3BrY3MxMV9rZXlfbGVuIG1iZWR0bHNfc3NsX3BrY3MxMV9rZXlfbGVuCitzc2xfcGtjczExX3NpZ24gbWJlZHRsc19zc2xfcGtjczExX3NpZ24KK3NzbF9wc2tfZGVyaXZlX3ByZW1hc3RlciBtYmVkdGxzX3NzbF9wc2tfZGVyaXZlX3ByZW1hc3Rlcgorc3NsX3JlYWQgbWJlZHRsc19zc2xfcmVhZAorc3NsX3JlYWRfcmVjb3JkIG1iZWR0bHNfc3NsX3JlYWRfcmVjb3JkCitzc2xfcmVhZF92ZXJzaW9uIG1iZWR0bHNfc3NsX3JlYWRfdmVyc2lvbgorc3NsX3JlY3ZfZmxpZ2h0X2NvbXBsZXRlZCBtYmVkdGxzX3NzbF9yZWN2X2ZsaWdodF9jb21wbGV0ZWQKK3NzbF9yZW5lZ290aWF0ZSBtYmVkdGxzX3NzbF9yZW5lZ290aWF0ZQorc3NsX3Jlc2VuZCBtYmVkdGxzX3NzbF9yZXNlbmQKK3NzbF9yZXNldF9jaGVja3N1bSBtYmVkdGxzX3NzbF9yZXNldF9jaGVja3N1bQorc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UKK3NzbF9zZW5kX2ZhdGFsX2hhbmRzaGFrZV9mYWlsdXJlIG1iZWR0bHNfc3NsX3NlbmRfZmF0YWxfaGFuZHNoYWtlX2ZhaWx1cmUKK3NzbF9zZW5kX2ZsaWdodF9jb21wbGV0ZWQgbWJlZHRsc19zc2xfc2VuZF9mbGlnaHRfY29tcGxldGVkCitzc2xfc2Vzc2lvbiBtYmVkdGxzX3NzbF9zZXNzaW9uCitzc2xfc2Vzc2lvbl9mcmVlIG1iZWR0bHNfc3NsX3Nlc3Npb25fZnJlZQorc3NsX3Nlc3Npb25faW5pdCBtYmVkdGxzX3NzbF9zZXNzaW9uX2luaXQKK3NzbF9zZXNzaW9uX3Jlc2V0IG1iZWR0bHNfc3NsX3Nlc3Npb25fcmVzZXQKK3NzbF9zZXRfYWxwbl9wcm90b2NvbHMgbWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scworc3NsX3NldF9hcmM0X3N1cHBvcnQgbWJlZHRsc19zc2xfY29uZl9hcmM0X3N1cHBvcnQKK3NzbF9zZXRfYXV0aG1vZGUgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZQorc3NsX3NldF9iaW8gbWJlZHRsc19zc2xfc2V0X2Jpbworc3NsX3NldF9iaW9fdGltZW91dCBtYmVkdGxzX3NzbF9zZXRfYmlvX3RpbWVvdXQKK3NzbF9zZXRfY2FfY2hhaW4gbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbgorc3NsX3NldF9jYmNfcmVjb3JkX3NwbGl0dGluZyBtYmVkdGxzX3NzbF9jb25mX2NiY19yZWNvcmRfc3BsaXR0aW5nCitzc2xfc2V0X2NpcGhlcnN1aXRlcyBtYmVkdGxzX3NzbF9jb25mX2NpcGhlcnN1aXRlcworc3NsX3NldF9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24gbWJlZHRsc19zc2xfY29uZl9jaXBoZXJzdWl0ZXNfZm9yX3ZlcnNpb24KK3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZCBtYmVkdGxzX3NzbF9zZXRfY2xpZW50X3RyYW5zcG9ydF9pZAorc3NsX3NldF9jdXJ2ZXMgbWJlZHRsc19zc2xfY29uZl9jdXJ2ZXMKK3NzbF9zZXRfZGJnIG1iZWR0bHNfc3NsX2NvbmZfZGJnCitzc2xfc2V0X2RoX3BhcmFtIG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW0KK3NzbF9zZXRfZGhfcGFyYW1fY3R4IG1iZWR0bHNfc3NsX2NvbmZfZGhfcGFyYW1fY3R4Citzc2xfc2V0X2R0bHNfYW50aV9yZXBsYXkgbWJlZHRsc19zc2xfY29uZl9kdGxzX2FudGlfcmVwbGF5Citzc2xfc2V0X2R0bHNfYmFkbWFjX2xpbWl0IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19iYWRtYWNfbGltaXQKK3NzbF9zZXRfZHRsc19jb29raWVzIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19jb29raWVzCitzc2xfc2V0X2VuY3J5cHRfdGhlbl9tYWMgbWJlZHRsc19zc2xfY29uZl9lbmNyeXB0X3RoZW5fbWFjCitzc2xfc2V0X2VuZHBvaW50IG1iZWR0bHNfc3NsX2NvbmZfZW5kcG9pbnQKK3NzbF9zZXRfZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBtYmVkdGxzX3NzbF9jb25mX2V4dGVuZGVkX21hc3Rlcl9zZWNyZXQKK3NzbF9zZXRfZmFsbGJhY2sgbWJlZHRsc19zc2xfY29uZl9mYWxsYmFjaworc3NsX3NldF9oYW5kc2hha2VfdGltZW91dCBtYmVkdGxzX3NzbF9jb25mX2hhbmRzaGFrZV90aW1lb3V0Citzc2xfc2V0X2hvc3RuYW1lIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZQorc3NsX3NldF9tYXhfZnJhZ19sZW4gbWJlZHRsc19zc2xfY29uZl9tYXhfZnJhZ19sZW4KK3NzbF9zZXRfbWF4X3ZlcnNpb24gbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbgorc3NsX3NldF9taW5fdmVyc2lvbiBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uCitzc2xfc2V0X293bl9jZXJ0IG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQKK3NzbF9zZXRfb3duX2NlcnRfYWx0IG1iZWR0bHNfc3NsX3NldF9vd25fY2VydF9hbHQKK3NzbF9zZXRfb3duX2NlcnRfcnNhIG1iZWR0bHNfc3NsX3NldF9vd25fY2VydF9yc2EKK3NzbF9zZXRfcHNrIG1iZWR0bHNfc3NsX2NvbmZfcHNrCitzc2xfc2V0X3Bza19jYiBtYmVkdGxzX3NzbF9jb25mX3Bza19jYgorc3NsX3NldF9yZW5lZ290aWF0aW9uIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbgorc3NsX3NldF9yZW5lZ290aWF0aW9uX2VuZm9yY2VkIG1iZWR0bHNfc3NsX2NvbmZfcmVuZWdvdGlhdGlvbl9lbmZvcmNlZAorc3NsX3NldF9yZW5lZ290aWF0aW9uX3BlcmlvZCBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb25fcGVyaW9kCitzc2xfc2V0X3JuZyBtYmVkdGxzX3NzbF9jb25mX3JuZworc3NsX3NldF9zZXNzaW9uIG1iZWR0bHNfc3NsX3NldF9zZXNzaW9uCitzc2xfc2V0X3Nlc3Npb25fY2FjaGUgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX2NhY2hlCitzc2xfc2V0X3Nlc3Npb25fdGlja2V0X2xpZmV0aW1lIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRfbGlmZXRpbWUKK3NzbF9zZXRfc2Vzc2lvbl90aWNrZXRzIG1iZWR0bHNfc3NsX2NvbmZfc2Vzc2lvbl90aWNrZXRzCitzc2xfc2V0X3NuaSBtYmVkdGxzX3NzbF9jb25mX3NuaQorc3NsX3NldF90cmFuc3BvcnQgbWJlZHRsc19zc2xfY29uZl90cmFuc3BvcnQKK3NzbF9zZXRfdHJ1bmNhdGVkX2htYWMgbWJlZHRsc19zc2xfY29uZl90cnVuY2F0ZWRfaG1hYworc3NsX3NldF92ZXJpZnkgbWJlZHRsc19zc2xfY29uZl92ZXJpZnkKK3NzbF9zaWdfZnJvbV9wayBtYmVkdGxzX3NzbF9zaWdfZnJvbV9waworc3NsX3N0YXRlcyBtYmVkdGxzX3NzbF9zdGF0ZXMKK3NzbF90aWNrZXRfa2V5cyBtYmVkdGxzX3NzbF90aWNrZXRfa2V5cworc3NsX3RyYW5zZm9ybSBtYmVkdGxzX3NzbF90cmFuc2Zvcm0KK3NzbF90cmFuc2Zvcm1fZnJlZSBtYmVkdGxzX3NzbF90cmFuc2Zvcm1fZnJlZQorc3NsX3dyaXRlIG1iZWR0bHNfc3NsX3dyaXRlCitzc2xfd3JpdGVfY2VydGlmaWNhdGUgbWJlZHRsc19zc2xfd3JpdGVfY2VydGlmaWNhdGUKK3NzbF93cml0ZV9jaGFuZ2VfY2lwaGVyX3NwZWMgbWJlZHRsc19zc2xfd3JpdGVfY2hhbmdlX2NpcGhlcl9zcGVjCitzc2xfd3JpdGVfZmluaXNoZWQgbWJlZHRsc19zc2xfd3JpdGVfZmluaXNoZWQKK3NzbF93cml0ZV9yZWNvcmQgbWJlZHRsc19zc2xfd3JpdGVfcmVjb3JkCitzc2xfd3JpdGVfdmVyc2lvbiBtYmVkdGxzX3NzbF93cml0ZV92ZXJzaW9uCitzdXBwb3J0ZWRfY2lwaGVycyBtYmVkdGxzX2NpcGhlcl9zdXBwb3J0ZWQKK3Rfc2ludCBtYmVkdGxzX21waV9zaW50Cit0X3VkYmwgbWJlZHRsc190X3VkYmwKK3RfdWludCBtYmVkdGxzX21waV91aW50Cit0ZXN0X2NhX2NydCBtYmVkdGxzX3Rlc3RfY2FfY3J0Cit0ZXN0X2NhX2NydF9lYyBtYmVkdGxzX3Rlc3RfY2FfY3J0X2VjCit0ZXN0X2NhX2NydF9yc2EgbWJlZHRsc190ZXN0X2NhX2NydF9yc2EKK3Rlc3RfY2Ffa2V5IG1iZWR0bHNfdGVzdF9jYV9rZXkKK3Rlc3RfY2Ffa2V5X2VjIG1iZWR0bHNfdGVzdF9jYV9rZXlfZWMKK3Rlc3RfY2Ffa2V5X3JzYSBtYmVkdGxzX3Rlc3RfY2Ffa2V5X3JzYQordGVzdF9jYV9saXN0IG1iZWR0bHNfdGVzdF9jYXNfcGVtCit0ZXN0X2NhX3B3ZCBtYmVkdGxzX3Rlc3RfY2FfcHdkCit0ZXN0X2NhX3B3ZF9lYyBtYmVkdGxzX3Rlc3RfY2FfcHdkX2VjCit0ZXN0X2NhX3B3ZF9yc2EgbWJlZHRsc190ZXN0X2NhX3B3ZF9yc2EKK3Rlc3RfY2xpX2NydCBtYmVkdGxzX3Rlc3RfY2xpX2NydAordGVzdF9jbGlfY3J0X2VjIG1iZWR0bHNfdGVzdF9jbGlfY3J0X2VjCit0ZXN0X2NsaV9jcnRfcnNhIG1iZWR0bHNfdGVzdF9jbGlfY3J0X3JzYQordGVzdF9jbGlfa2V5IG1iZWR0bHNfdGVzdF9jbGlfa2V5Cit0ZXN0X2NsaV9rZXlfZWMgbWJlZHRsc190ZXN0X2NsaV9rZXlfZWMKK3Rlc3RfY2xpX2tleV9yc2EgbWJlZHRsc190ZXN0X2NsaV9rZXlfcnNhCit0ZXN0X2RobV9wYXJhbXMgbWJlZHRsc190ZXN0X2RobV9wYXJhbXMKK3Rlc3Rfc3J2X2NydCBtYmVkdGxzX3Rlc3Rfc3J2X2NydAordGVzdF9zcnZfY3J0X2VjIG1iZWR0bHNfdGVzdF9zcnZfY3J0X2VjCit0ZXN0X3Nydl9jcnRfcnNhIG1iZWR0bHNfdGVzdF9zcnZfY3J0X3JzYQordGVzdF9zcnZfa2V5IG1iZWR0bHNfdGVzdF9zcnZfa2V5Cit0ZXN0X3Nydl9rZXlfZWMgbWJlZHRsc190ZXN0X3Nydl9rZXlfZWMKK3Rlc3Rfc3J2X2tleV9yc2EgbWJlZHRsc190ZXN0X3Nydl9rZXlfcnNhCit0aHJlYWRpbmdfbXV0ZXhfdCBtYmVkdGxzX3RocmVhZGluZ19tdXRleF90Cit0aHJlYWRpbmdfc2V0X2FsdCBtYmVkdGxzX3RocmVhZGluZ19zZXRfYWx0Cit0aW1pbmdfc2VsZl90ZXN0IG1iZWR0bHNfdGltaW5nX3NlbGZfdGVzdAordmVyc2lvbl9jaGVja19mZWF0dXJlIG1iZWR0bHNfdmVyc2lvbl9jaGVja19mZWF0dXJlCit2ZXJzaW9uX2dldF9udW1iZXIgbWJlZHRsc192ZXJzaW9uX2dldF9udW1iZXIKK3ZlcnNpb25fZ2V0X3N0cmluZyBtYmVkdGxzX3ZlcnNpb25fZ2V0X3N0cmluZwordmVyc2lvbl9nZXRfc3RyaW5nX2Z1bGwgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmdfZnVsbAoreDUwOV9iaXRzdHJpbmcgbWJlZHRsc194NTA5X2JpdHN0cmluZworeDUwOV9idWYgbWJlZHRsc194NTA5X2J1ZgoreDUwOV9jcmwgbWJlZHRsc194NTA5X2NybAoreDUwOV9jcmxfZW50cnkgbWJlZHRsc194NTA5X2NybF9lbnRyeQoreDUwOV9jcmxfZnJlZSBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUKK3g1MDlfY3JsX2luZm8gbWJlZHRsc194NTA5X2NybF9pbmZvCit4NTA5X2NybF9pbml0IG1iZWR0bHNfeDUwOV9jcmxfaW5pdAoreDUwOV9jcmxfcGFyc2UgbWJlZHRsc194NTA5X2NybF9wYXJzZQoreDUwOV9jcmxfcGFyc2VfZGVyIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZGVyCit4NTA5X2NybF9wYXJzZV9maWxlIG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZQoreDUwOV9jcnQgbWJlZHRsc194NTA5X2NydAoreDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlIG1iZWR0bHNfeDUwOV9jcnRfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlCit4NTA5X2NydF9jaGVja19rZXlfdXNhZ2UgbWJlZHRsc194NTA5X2NydF9jaGVja19rZXlfdXNhZ2UKK3g1MDlfY3J0X2ZyZWUgbWJlZHRsc194NTA5X2NydF9mcmVlCit4NTA5X2NydF9pbmZvIG1iZWR0bHNfeDUwOV9jcnRfaW5mbworeDUwOV9jcnRfaW5pdCBtYmVkdGxzX3g1MDlfY3J0X2luaXQKK3g1MDlfY3J0X3BhcnNlIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2UKK3g1MDlfY3J0X3BhcnNlX2RlciBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2RlcgoreDUwOV9jcnRfcGFyc2VfZmlsZSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUKK3g1MDlfY3J0X3BhcnNlX3BhdGggbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoCit4NTA5X2NydF9yZXZva2VkIG1iZWR0bHNfeDUwOV9jcnRfaXNfcmV2b2tlZAoreDUwOV9jcnRfdmVyaWZ5IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5Cit4NTA5X2NydF92ZXJpZnlfaW5mbyBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvCit4NTA5X2NzciBtYmVkdGxzX3g1MDlfY3NyCit4NTA5X2Nzcl9mcmVlIG1iZWR0bHNfeDUwOV9jc3JfZnJlZQoreDUwOV9jc3JfaW5mbyBtYmVkdGxzX3g1MDlfY3NyX2luZm8KK3g1MDlfY3NyX2luaXQgbWJlZHRsc194NTA5X2Nzcl9pbml0Cit4NTA5X2Nzcl9wYXJzZSBtYmVkdGxzX3g1MDlfY3NyX3BhcnNlCit4NTA5X2Nzcl9wYXJzZV9kZXIgbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9kZXIKK3g1MDlfY3NyX3BhcnNlX2ZpbGUgbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9maWxlCit4NTA5X2RuX2dldHMgbWJlZHRsc194NTA5X2RuX2dldHMKK3g1MDlfZ2V0X2FsZyBtYmVkdGxzX3g1MDlfZ2V0X2FsZworeDUwOV9nZXRfYWxnX251bGwgbWJlZHRsc194NTA5X2dldF9hbGdfbnVsbAoreDUwOV9nZXRfZXh0IG1iZWR0bHNfeDUwOV9nZXRfZXh0Cit4NTA5X2dldF9uYW1lIG1iZWR0bHNfeDUwOV9nZXRfbmFtZQoreDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMgbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcworeDUwOV9nZXRfc2VyaWFsIG1iZWR0bHNfeDUwOV9nZXRfc2VyaWFsCit4NTA5X2dldF9zaWcgbWJlZHRsc194NTA5X2dldF9zaWcKK3g1MDlfZ2V0X3NpZ19hbGcgbWJlZHRsc194NTA5X2dldF9zaWdfYWxnCit4NTA5X2dldF90aW1lIG1iZWR0bHNfeDUwOV9nZXRfdGltZQoreDUwOV9rZXlfc2l6ZV9oZWxwZXIgbWJlZHRsc194NTA5X2tleV9zaXplX2hlbHBlcgoreDUwOV9uYW1lIG1iZWR0bHNfeDUwOV9uYW1lCit4NTA5X29pZF9nZXRfZGVzY3JpcHRpb24gbWJlZHRsc194NTA5X29pZF9nZXRfZGVzY3JpcHRpb24KK3g1MDlfb2lkX2dldF9udW1lcmljX3N0cmluZyBtYmVkdGxzX3g1MDlfb2lkX2dldF9udW1lcmljX3N0cmluZworeDUwOV9zZWxmX3Rlc3QgbWJlZHRsc194NTA5X3NlbGZfdGVzdAoreDUwOV9zZXF1ZW5jZSBtYmVkdGxzX3g1MDlfc2VxdWVuY2UKK3g1MDlfc2VyaWFsX2dldHMgbWJlZHRsc194NTA5X3NlcmlhbF9nZXRzCit4NTA5X3NldF9leHRlbnNpb24gbWJlZHRsc194NTA5X3NldF9leHRlbnNpb24KK3g1MDlfc2lnX2FsZ19nZXRzIG1iZWR0bHNfeDUwOV9zaWdfYWxnX2dldHMKK3g1MDlfc3RyaW5nX3RvX25hbWVzIG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMKK3g1MDlfdGltZSBtYmVkdGxzX3g1MDlfdGltZQoreDUwOV90aW1lX2V4cGlyZWQgbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdAoreDUwOV90aW1lX2Z1dHVyZSBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUKK3g1MDlfd3JpdGVfZXh0ZW5zaW9ucyBtYmVkdGxzX3g1MDlfd3JpdGVfZXh0ZW5zaW9ucworeDUwOV93cml0ZV9uYW1lcyBtYmVkdGxzX3g1MDlfd3JpdGVfbmFtZXMKK3g1MDlfd3JpdGVfc2lnIG1iZWR0bHNfeDUwOV93cml0ZV9zaWcKK3g1MDl3cml0ZV9jZXJ0IG1iZWR0bHNfeDUwOXdyaXRlX2NlcnQKK3g1MDl3cml0ZV9jcnRfZGVyIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIKK3g1MDl3cml0ZV9jcnRfZnJlZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZnJlZQoreDUwOXdyaXRlX2NydF9pbml0IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9pbml0Cit4NTA5d3JpdGVfY3J0X3BlbSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfcGVtCit4NTA5d3JpdGVfY3J0X3NldF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9hdXRob3JpdHlfa2V5X2lkZW50aWZpZXIKK3g1MDl3cml0ZV9jcnRfc2V0X2Jhc2ljX2NvbnN0cmFpbnRzIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYmFzaWNfY29uc3RyYWludHMKK3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbiBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2V4dGVuc2lvbgoreDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9rZXkKK3g1MDl3cml0ZV9jcnRfc2V0X2lzc3Vlcl9uYW1lIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX25hbWUKK3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X2tleV91c2FnZQoreDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnCit4NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUKK3g1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3NlcmlhbAoreDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9zdWJqZWN0X2tleQoreDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXlfaWRlbnRpZmllciBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3Rfa2V5X2lkZW50aWZpZXIKK3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZQoreDUwOXdyaXRlX2NydF9zZXRfdmFsaWRpdHkgbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF92YWxpZGl0eQoreDUwOXdyaXRlX2NydF9zZXRfdmVyc2lvbiBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZlcnNpb24KK3g1MDl3cml0ZV9jc3IgbWJlZHRsc194NTA5d3JpdGVfY3NyCit4NTA5d3JpdGVfY3NyX2RlciBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZGVyCit4NTA5d3JpdGVfY3NyX2ZyZWUgbWJlZHRsc194NTA5d3JpdGVfY3NyX2ZyZWUKK3g1MDl3cml0ZV9jc3JfaW5pdCBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfaW5pdAoreDUwOXdyaXRlX2Nzcl9wZW0gbWJlZHRsc194NTA5d3JpdGVfY3NyX3BlbQoreDUwOXdyaXRlX2Nzcl9zZXRfZXh0ZW5zaW9uIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfZXh0ZW5zaW9uCit4NTA5d3JpdGVfY3NyX3NldF9rZXkgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9rZXkKK3g1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZSBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X2tleV91c2FnZQoreDUwOXdyaXRlX2Nzcl9zZXRfbWRfYWxnIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbWRfYWxnCit4NTA5d3JpdGVfY3NyX3NldF9uc19jZXJ0X3R5cGUgbWJlZHRsc194NTA5d3JpdGVfY3NyX3NldF9uc19jZXJ0X3R5cGUKK3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZSBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X3N1YmplY3RfbmFtZQoreHRlYV9jb250ZXh0IG1iZWR0bHNfeHRlYV9jb250ZXh0Cit4dGVhX2NyeXB0X2NiYyBtYmVkdGxzX3h0ZWFfY3J5cHRfY2JjCit4dGVhX2NyeXB0X2VjYiBtYmVkdGxzX3h0ZWFfY3J5cHRfZWNiCit4dGVhX2ZyZWUgbWJlZHRsc194dGVhX2ZyZWUKK3h0ZWFfaW5pdCBtYmVkdGxzX3h0ZWFfaW5pdAoreHRlYV9zZWxmX3Rlc3QgbWJlZHRsc194dGVhX3NlbGZfdGVzdAoreHRlYV9zZXR1cCBtYmVkdGxzX3h0ZWFfc2V0dXAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdmVyc2lvbl9mZWF0dXJlcy5mbXQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZlcnNpb25fZmVhdHVyZXMuZm10Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2N2VkYTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZlcnNpb25fZmVhdHVyZXMuZm10CkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgVmVyc2lvbiBmZWF0dXJlIGluZm9ybWF0aW9uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9DKQorCisjaW5jbHVkZSAibWJlZHRscy92ZXJzaW9uLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKmZlYXR1cmVzW10gPSB7CisjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpCitGRUFUVVJFX0RFRklORVMKKyNlbmRpZiAvKiBNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMgKi8KKyAgICBOVUxMCit9OworCitpbnQgbWJlZHRsc192ZXJzaW9uX2NoZWNrX2ZlYXR1cmUoIGNvbnN0IGNoYXIgKmZlYXR1cmUgKQoreworICAgIGNvbnN0IGNoYXIgKippZHggPSBmZWF0dXJlczsKKworICAgIGlmKCAqaWR4ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0yICk7CisKKyAgICBpZiggZmVhdHVyZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgd2hpbGUoICppZHggIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggIXN0cmNtcCggKmlkeCwgZmVhdHVyZSApICkKKyAgICAgICAgICAgIHJldHVybiggMCApOworICAgICAgICBpZHgrKzsKKyAgICB9CisgICAgcmV0dXJuKCAtMSApOworfQorCisjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0MgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLWFwcC10ZW1wbGF0ZS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtYXBwLXRlbXBsYXRlLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzODU4NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLWFwcC10ZW1wbGF0ZS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXDxQQVRITkFNRT4uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+PEdVSUQ+PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+PEFQUE5BTUU+PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLW1haW4tdGVtcGxhdGUudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnMyMDEwLW1haW4tdGVtcGxhdGUudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjFmNWNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtbWFpbi10ZW1wbGF0ZS52Y3hwcm9qCkBAIC0wLDAgKzEsMTUzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm1iZWRUTFM8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNQkVEVExTX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxDb21waWxlQXM+Q29tcGlsZUFzQzwvQ29tcGlsZUFzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TUJFRFRMU19FWFBPUlRTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8Q29tcGlsZUFzPkNvbXBpbGVBc0M8L0NvbXBpbGVBcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01CRURUTFNfRVhQT1JUUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfV0lORE9XUztfVVNSRExMO01CRURUTFNfRVhQT1JUUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KK0hFQURFUl9FTlRSSUVTCisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorU09VUkNFX0VOVFJJRVMKKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzMjAxMC1zbG4tdGVtcGxhdGUuc2xuIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtc2xuLXRlbXBsYXRlLnNsbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzdhZDJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtc2xuLXRlbXBsYXRlLnNsbgpAQCAtMCwwICsxLDI4IEBACivvu78KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDExLjAwCisjIFZpc3VhbCBDKysgRXhwcmVzcyAyMDEwCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1iZWRUTFMiLCAibWJlZFRMUy52Y3hwcm9qIiwgIns0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9IgorRW5kUHJvamVjdAorQVBQX0VOVFJJRVMKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzIKKwkJRGVidWd8eDY0ID0gRGVidWd8eDY0CisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CitDT05GX0VOVFJJRVMKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzNi1hcHAtdGVtcGxhdGUuZHNwIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtYXBwLXRlbXBsYXRlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2RiZWEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtYXBwLXRlbXBsYXRlLmRzcApAQCAtMCwwICsxLDEwMSBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSI8QVBQTkFNRT4iIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KKw0KK0NGRz08QVBQTkFNRT4gLSBXaW4zMiBEZWJ1Zw0KKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiPEFQUE5BTUU+Lm1hayIuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICI8QVBQTkFNRT4ubWFrIiBDRkc9IjxBUFBOQU1FPiAtIFdpbjMyIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICI8QVBQTkFNRT4gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFICI8QVBQTkFNRT4gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiPEFQUE5BTUU+IC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICIiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAidGVtcCINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ0ZW1wIg0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiPEFQUE5BTUU+IC0gV2luMzIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIiINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAidGVtcCINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1o3IC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWjcgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daICAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDBjIC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDBjIC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgIjxBUFBOQU1FPiAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICI8QVBQTkFNRT4gLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5ccHJvZ3JhbXNcPFBBVEhOQU1FPi5jDQorIyBBREQgQ1BQIC9JICIuLi8uLi9pbmNsdWRlIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIg0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtbWFpbi10ZW1wbGF0ZS5kc3AgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9kYXRhX2ZpbGVzL3ZzNi1tYWluLXRlbXBsYXRlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzcyOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtbWFpbi10ZW1wbGF0ZS5kc3AKQEAgLTAsMCArMSw5NCBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJtYmVkdGxzIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IiAweDAxMDQNCisNCitDRkc9bWJlZHRscyAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgIm1iZWR0bHMubWFrIi4KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibWJlZHRscy5tYWsiIENGRz0ibWJlZHRscyAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgIm1iZWR0bHMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikKKyFNRVNTQUdFICJtYmVkdGxzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitDUFA9Y2wuZXhlDQorUlNDPXJjLmV4ZQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gIm1iZWR0bHMgLSBXaW4zMiBSZWxlYXNlIgorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIiINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAidGVtcCINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJfTElCIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0kgIi4uLy4uL2luY2x1ZGUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL1lYIC9GRCAvYw0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDBjIC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElCMzI9bGluay5leGUgLWxpYg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KKyMgQUREIExJQjMyIC9ub2xvZ28NCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibWJlZHRscyAtIFdpbjMyIERlYnVnIgorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgInRlbXAiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIiINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAidGVtcCINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvWjcgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dYIC9aNyAvT2QgL0kgIi4uLy4uL2luY2x1ZGUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvRCAiX0xJQiIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCisjIEFERCBMSUIzMiAvbm9sb2dvDQorDQorIUVORElGDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgIm1iZWR0bHMgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJtYmVkdGxzIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KK1NPVVJDRV9FTlRSSUVTDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIg0KK0hFQURFUl9FTlRSSUVTDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZGF0YV9maWxlcy92czYtd29ya3NwYWNlLXRlbXBsYXRlLmRzdyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LXdvcmtzcGFjZS10ZW1wbGF0ZS5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5MDA5OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2RhdGFfZmlsZXMvdnM2LXdvcmtzcGFjZS10ZW1wbGF0ZS5kc3cKQEAgLTAsMCArMSwxOCBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KKw0KK0FQUF9FTlRSSUVTDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2VjYy1oZWFwLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZWNjLWhlYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRhMDRjZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2VjYy1oZWFwLnNoCkBAIC0wLDAgKzEsNzQgQEAKKyMhL2Jpbi9zaAorCisjIE1lYXN1cmUgaGVhcCB1c2FnZSAoYW5kIHBlcmZvcm1hbmNlKSBvZiBFQ0Mgb3BlcmF0aW9ucyB3aXRoIHZhcmlvdXMgdmFsdWVzIG9mCisjIHRoZSByZWxldmFudCB0dW5hYmxlIGNvbXBpbGUtdGltZSBwYXJhbWV0ZXJzLgorIworIyBVc2FnZSAocHJlZmVyYWJseSBvbiBhIDMyLWJpdCBwbGF0Zm9ybSk6CisjIGNtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAuCisjIHNjcmlwdHMvZWNjLWhlYXAuc2ggfCB0ZWUgZWNjLWhlYXAubG9nCisKK3NldCAtZXUKKworQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKKworaWYgWyAtciAkQ09ORklHX0ggXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiJENPTkZJR19IIG5vdCBmb3VuZCIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBncmVwIC1pIGNtYWtlIE1ha2VmaWxlID4vZGV2L251bGw7IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIk5lZWRzIENtYWtlIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIGdpdCBzdGF0dXMgfCBncmVwIC1GICRDT05GSUdfSCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBlY2hvICJjb25maWcuaCBub3QgY2xlYW4iID4mMgorICAgIGV4aXQgMQorZmkKKworQ09ORklHX0JBSz0ke0NPTkZJR19IfS5iYWsKK2NwICRDT05GSUdfSCAkQ09ORklHX0JBSworCitjYXQgPDwgRU9GID4kQ09ORklHX0gKKyNkZWZpbmUgTUJFRFRMU19QTEFURk9STV9DCisjZGVmaW5lIE1CRURUTFNfUExBVEZPUk1fTUVNT1JZCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisjZGVmaW5lIE1CRURUTFNfTUVNT1JZX0RFQlVHCisKKyNkZWZpbmUgTUJFRFRMU19USU1JTkdfQworCisjZGVmaW5lIE1CRURUTFNfQklHTlVNX0MKKyNkZWZpbmUgTUJFRFRMU19FQ1BfQworI2RlZmluZSBNQkVEVExTX0FTTjFfUEFSU0VfQworI2RlZmluZSBNQkVEVExTX0FTTjFfV1JJVEVfQworI2RlZmluZSBNQkVEVExTX0VDRFNBX0MKKyNkZWZpbmUgTUJFRFRMU19FQ0RIX0MKKworI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorI2RlZmluZSBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKKworI2luY2x1ZGUgImNoZWNrX2NvbmZpZy5oIgorCisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfV0lORE9XX1NJWkUgICAgICAgICAgICA2CisvLyNkZWZpbmUgTUJFRFRMU19FQ1BfRklYRURfUE9JTlRfT1BUSU0gICAgICAxCitFT0YKKworZm9yIEYgaW4gMCAxOyBkbworICAgIGZvciBXIGluIDIgMyA0IDUgNjsgZG8KKyAgICAgICAgc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfRUNQX1dJTkRPV19TSVpFICRXCisgICAgICAgIHNjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX0VDUF9GSVhFRF9QT0lOVF9PUFRJTSAkRgorICAgICAgICBtYWtlIGJlbmNobWFyayA+L2Rldi9udWxsIDI+JjEKKyAgICAgICAgZWNobyAiZml4ZWQgcG9pbnQgb3B0aW0gPSAkRiwgbWF4IHdpbmRvdyBzaXplID0gJFciCisgICAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgICBwcm9ncmFtcy90ZXN0L2JlbmNobWFyaworICAgIGRvbmUKK2RvbmUKKworIyBjbGVhbnVwCisKK212ICRDT05GSUdfQkFLICRDT05GSUdfSAorbWFrZSBjbGVhbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZmluZC1tZW0tbGVhay5jb2NjaSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2ZpbmQtbWVtLWxlYWsuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmZTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2ZpbmQtbWVtLWxlYWsuY29jY2kKQEAgLTAsMCArMSwyMCBAQAorQEAKK2V4cHJlc3Npb24geCwgeTsKK3N0YXRlbWVudCBTOworQEAKKyAgeCA9IG1iZWR0bHNfbWFsbG9jKC4uLik7CisgIHkgPSBtYmVkdGxzX21hbGxvYyguLi4pOworICAuLi4KKyogaWYgKHggPT0gTlVMTCB8fCB5ID09IE5VTEwpCisgICAgUworCitAQAorZXhwcmVzc2lvbiB4LCB5Oworc3RhdGVtZW50IFM7CitAQAorICBpZiAoCisqICAgKHggPSBtYmVkdGxzX21hbGxvYyguLi4pKSA9PSBOVUxMCisgICAgfHwKKyogICAoeSA9IG1iZWR0bHNfbWFsbG9jKC4uLikpID09IE5VTEwKKyAgKQorICAgIFMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2Zvb3RwcmludC5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2Zvb3RwcmludC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMzhlNTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZm9vdHByaW50LnNoCkBAIC0wLDAgKzEsMTE0IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUaGlzIHNjcmlwdCBkZXRlcm1pbmVzIFJPTSBzaXplIChvciBjb2RlIHNpemUpIGZvciB0aGUgc3RhbmRhcmQgbWJlZCBUTFMKKyMgY29uZmlndXJhdGlvbnMsIHdoZW4gYnVpbHQgZm9yIGEgQ29ydGV4IE0zL000IHRhcmdldC4KKyMKKyMgQ29uZmlndXJhdGlvbnMgaW5jbHVkZWQ6CisjICAgZGVmYXVsdCAgICBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKKyMgICB5b3R0YSAgICAgIHlvdHRhL21vZHVsZS9tYmVkdGxzL2NvbmZpZy5oCisjICAgdGhyZWFkICAgICBjb25maWdzL2NvbmZpZy10aHJlYWQuaAorIyAgIHN1aXRlLWIgICAgY29uZmlncy9jb25maWctc3VpdGUtYi5oCisjICAgcHNrICAgICAgICBjb25maWdzL2NvbmZpZy1jY20tcHNrLXRsczFfMi5oCisjCisjIFVzYWdlOiBmb290cHJpbnQuc2gKKyMKK3NldCAtZXUKKworQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKKworaWYgWyAtciAkQ09ORklHX0ggXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiJENPTkZJR19IIG5vdCBmb3VuZCIgPiYyCisgICAgZWNobyAiVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcnVuIGZyb20gdGhlIHJvb3Qgb2YiID4mMgorICAgIGVjaG8gImEgZ2l0IGNoZWNrb3V0IG9yIHVuY29tcHJlc3NlZCB0YXJiYWxsIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIGdyZXAgLWkgY21ha2UgTWFrZWZpbGUgPi9kZXYvbnVsbDsgdGhlbgorICAgIGVjaG8gIk5vdCBjb21wYXRpYmxlIHdpdGggQ01ha2UiID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgd2hpY2ggYXJtLW5vbmUtZWFiaS1nY2MgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICJZb3UgbmVlZCB0aGUgQVJNLUdDQyB0b29sY2hhaW4gaW4geW91ciBwYXRoIiA+JjIKKyAgICBlY2hvICJTZWUgaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2djYy1hcm0tZW1iZWRkZWQvIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0FSTUdDQ19GTEFHUz0nLU9zIC1tYXJjaD1hcm12Ny1tIC1tdGh1bWInCitPVVRGSUxFPScwMC1mb290cHJpbnQtc3VtbWFyeS50eHQnCisKK2xvZygpCit7CisgICAgZWNobyAiJEAiCisgICAgZWNobyAiJEAiID4+ICIkT1VURklMRSIKK30KKworZG9pdCgpCit7CisgICAgTkFNRT0iJDEiCisgICAgRklMRT0iJDIiCisKKyAgICBsb2cgIiIKKyAgICBsb2cgIiROQU1FICgkRklMRSk6IgorCisgICAgY3AgJENPTkZJR19IICR7Q09ORklHX0h9LmJhaworICAgIGlmIFsgIiRGSUxFIiAhPSAkQ09ORklHX0ggXTsgdGhlbgorICAgICAgICBjcCAiJEZJTEUiICAkQ09ORklHX0gKKyAgICBmaQorCisgICAgeworICAgICAgICBzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX05FVF9DIHx8IHRydWUKKyAgICAgICAgc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USU1JTkdfQyB8fCB0cnVlCisgICAgICAgIHNjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfRlNfSU8gfHwgdHJ1ZQorICAgICAgICBzY3JpcHRzL2NvbmZpZy5wbCAtLWZvcmNlIHNldCBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkgfHwgdHJ1ZQorICAgIH0gPi9kZXYvbnVsbCAyPiYxCisKKyAgICBtYWtlIGNsZWFuID4vZGV2L251bGwKKyAgICBDQz1hcm0tbm9uZS1lYWJpLWdjYyBBUj1hcm0tbm9uZS1lYWJpLWFyIExEPWFybS1ub25lLWVhYmktbGQgXAorICAgICAgICBDRkxBR1M9IiRBUk1HQ0NfRkxBR1MiIG1ha2UgbGliID4vZGV2L251bGwKKworICAgIE9VVD0ic2l6ZS0ke05BTUV9LnR4dCIKKyAgICBhcm0tbm9uZS1lYWJpLXNpemUgLXQgbGlicmFyeS9saWJtYmVkKi5hID4gIiRPVVQiCisgICAgbG9nICIkKCBoZWFkIC1uMSAiJE9VVCIgKSIKKyAgICBsb2cgIiQoIHRhaWwgLW4xICIkT1VUIiApIgorCisgICAgY3AgJHtDT05GSUdfSH0uYmFrICRDT05GSUdfSAorfQorCisjIHRydW5jYXRlIHRoZSBmaWxlIGp1c3QgdGhpcyB0aW1lCitlY2hvICIoZ2VuZXJhdGVkIGJ5ICQwKSIgPiAiJE9VVEZJTEUiCitlY2hvICIiID4+ICIkT1VURklMRSIKKworbG9nICJGb290cHJpbnQgb2Ygc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgKG1pbnVzIG5ldF9zb2NrZXRzLmMsIHRpbWluZy5jLCBmc19pbykiCitsb2cgImZvciBiYXJlLW1ldGFsIEFSTSBDb3J0ZXgtTTMvTTQgbWljcm9jb250cm9sbGVycy4iCisKK1ZFUlNJT05fSD0iaW5jbHVkZS9tYmVkdGxzL3ZlcnNpb24uaCIKK01CRURUTFNfVkVSU0lPTj0kKCBzZWQgLW4gJ3MvLipWRVJTSU9OX1NUUklORyAqIlwoLipcKSIvXDEvcCcgJFZFUlNJT05fSCApCitpZiBnaXQgcmV2LXBhcnNlIEhFQUQgPi9kZXYvbnVsbDsgdGhlbgorICAgIEdJVF9IRUFEPSQoIGdpdCByZXYtcGFyc2UgSEVBRCB8IGhlYWQgLWMgMTAgKQorICAgIEdJVF9WRVJTSU9OPSIgKGdpdCBoZWFkOiAkR0lUX0hFQUQpIgorZWxzZQorICAgIEdJVF9WRVJTSU9OPSIiCitmaQorCitsb2cgIiIKK2xvZyAibWJlZCBUTFMgJE1CRURUTFNfVkVSU0lPTiRHSVRfVkVSU0lPTiIKK2xvZyAiJCggYXJtLW5vbmUtZWFiaS1nY2MgLS12ZXJzaW9uIHwgaGVhZCAtbjEgKSIKK2xvZyAiQ0ZMQUdTPSRBUk1HQ0NfRkxBR1MiCisKKyMgY3JlYXRlcyB0aGUgeW90dGEgY29uZmlnCit5b3R0YS9jcmVhdGUtbW9kdWxlLnNoID4vZGV2L251bGwKKworZG9pdCBkZWZhdWx0ICAgIGluY2x1ZGUvbWJlZHRscy9jb25maWcuaAorZG9pdCB5b3R0YSAgICAgIHlvdHRhL21vZHVsZS9tYmVkdGxzL2NvbmZpZy5oCitkb2l0IHRocmVhZCAgICAgY29uZmlncy9jb25maWctdGhyZWFkLmgKK2RvaXQgc3VpdGUtYiAgICBjb25maWdzL2NvbmZpZy1zdWl0ZS1iLmgKK2RvaXQgcHNrICAgICAgICBjb25maWdzL2NvbmZpZy1jY20tcHNrLXRsczFfMi5oCisKK3ppcCBtYmVkdGxzLWZvb3RwcmludC56aXAgIiRPVVRGSUxFIiBzaXplLSoudHh0ID4vZGV2L251bGwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX2Vycm9ycy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX2Vycm9ycy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZmNmMDdjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZ2VuZXJhdGVfZXJyb3JzLnBsCkBAIC0wLDAgKzEsMTk4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBHZW5lcmF0ZSBlcnJvci5jCisjCisjIFVzYWdlOiAuL2dlbmVyYXRlX2Vycm9ycy5wbCBvciBzY3JpcHRzL2dlbmVyYXRlX2Vycm9ycy5wbCB3aXRob3V0IGFyZ3VtZW50cywKKyMgb3IgZ2VuZXJhdGVfZXJyb3JzLnBsIGluY2x1ZGVfZGlyIGRhdGFfZGlyIGVycm9yX2ZpbGUKKwordXNlIHN0cmljdDsKKworbXkgKCRpbmNsdWRlX2RpciwgJGRhdGFfZGlyLCAkZXJyb3JfZmlsZSk7CisKK2lmKCBAQVJHViApIHsKKyAgICBkaWUgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIgaWYgc2NhbGFyIEBBUkdWICE9IDM7CisgICAgKCRpbmNsdWRlX2RpciwgJGRhdGFfZGlyLCAkZXJyb3JfZmlsZSkgPSBAQVJHVjsKKworICAgIC1kICRpbmNsdWRlX2RpciBvciBkaWUgIk5vIHN1Y2ggZGlyZWN0b3J5OiAkaW5jbHVkZV9kaXJcbiI7CisgICAgLWQgJGRhdGFfZGlyIG9yIGRpZSAiTm8gc3VjaCBkaXJlY3Rvcnk6ICRkYXRhX2RpclxuIjsKK30gZWxzZSB7CisgICAgJGluY2x1ZGVfZGlyID0gJ2luY2x1ZGUvbWJlZHRscyc7CisgICAgJGRhdGFfZGlyID0gJ3NjcmlwdHMvZGF0YV9maWxlcyc7CisgICAgJGVycm9yX2ZpbGUgPSAnbGlicmFyeS9lcnJvci5jJzsKKworICAgIHVubGVzcyggLWQgJGluY2x1ZGVfZGlyICYmIC1kICRkYXRhX2RpciApIHsKKyAgICAgICAgY2hkaXIgJy4uJyBvciBkaWU7CisgICAgICAgIC1kICRpbmNsdWRlX2RpciAmJiAtZCAkZGF0YV9kaXIKKyAgICAgICAgICAgIG9yIGRpZSAiV2l0aG91dCBhcmd1bWVudHMsIG11c3QgYmUgcnVuIGZyb20gcm9vdCBvciBzY3JpcHRzXG4iCisgICAgfQorfQorCitteSAkZXJyb3JfZm9ybWF0X2ZpbGUgPSAkZGF0YV9kaXIuJy9lcnJvci5mbXQnOworCitteSBAbG93X2xldmVsX21vZHVsZXMgPSAoICJBRVMiLCAiQVNOMSIsICJCTE9XRklTSCIsICJDQU1FTExJQSIsICJCSUdOVU0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQkFTRTY0IiwgIlhURUEiLCAiUEJLREYyIiwgIk9JRCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQQURMT0NLIiwgIkRFUyIsICJORVQiLCAiQ1RSX0RSQkciLCAiRU5UUk9QWSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJITUFDX0RSQkciLCAiTUQyIiwgIk1ENCIsICJNRDUiLCAiUklQRU1EMTYwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlNIQTEiLCAiU0hBMjU2IiwgIlNIQTUxMiIsICJHQ00iLCAiVEhSRUFESU5HIiwgIkNDTSIgKTsKK215IEBoaWdoX2xldmVsX21vZHVsZXMgPSAoICJQRU0iLCAiWDUwOSIsICJESE0iLCAiUlNBIiwgIkVDUCIsICJNRCIsICJDSVBIRVIiLCAiU1NMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJQSyIsICJQS0NTMTIiLCAiUEtDUzUiICk7CisKK215ICRsaW5lX3NlcGFyYXRvciA9ICQvOwordW5kZWYgJC87CisKK29wZW4oRk9STUFUX0ZJTEUsICIkZXJyb3JfZm9ybWF0X2ZpbGUiKSBvciBkaWUgIk9wZW5pbmcgZXJyb3IgZm9ybWF0IGZpbGUgJyRlcnJvcl9mb3JtYXRfZmlsZSc6ICQhIjsKK215ICRlcnJvcl9mb3JtYXQgPSA8Rk9STUFUX0ZJTEU+OworY2xvc2UoRk9STUFUX0ZJTEUpOworCiskLyA9ICRsaW5lX3NlcGFyYXRvcjsKKworb3BlbihHUkVQLCAiZ3JlcCBcImRlZmluZSBNQkVEVExTX0VSUl9cIiAkaW5jbHVkZV9kaXIvKiB8IikgfHwgZGllKCJGYWlsdXJlIHdoZW4gY2FsbGluZyBncmVwOiAkISIpOworCitteSAkbGxfb2xkX2RlZmluZSA9ICIiOworbXkgJGhsX29sZF9kZWZpbmUgPSAiIjsKKworbXkgJGxsX2NvZGVfY2hlY2sgPSAiIjsKK215ICRobF9jb2RlX2NoZWNrID0gIiI7CisKK215ICRoZWFkZXJzID0gIiI7CisKK215ICVlcnJvcl9jb2Rlc19zZWVuOworCit3aGlsZSAobXkgJGxpbmUgPSA8R1JFUD4pCit7CisgICAgbmV4dCBpZiAoJGxpbmUgPX4gL2NvbXBhdC0xLjIuaC8pOworICAgIG15ICgkZXJyb3JfbmFtZSwgJGVycm9yX2NvZGUpID0gJGxpbmUgPX4gLyhNQkVEVExTX0VSUl9cdyspXHMrXC0oMHhcdyspLzsKKyAgICBteSAoJGRlc2NyaXB0aW9uKSA9ICRsaW5lID1+IC9cL1wqXCo8ICguKj8pXC4/IFwqXC8vOworCisgICAgZGllICJEdXBsaWNhdGVkIGVycm9yIGNvZGU6ICRlcnJvcl9jb2RlICgkZXJyb3JfbmFtZSlcbiIKKyAgICAgICAgaWYoICRlcnJvcl9jb2Rlc19zZWVueyRlcnJvcl9jb2RlfSsrICk7CisKKyAgICAkZGVzY3JpcHRpb24gPX4gcy9cXC9cXFxcL2c7CisgICAgaWYgKCRkZXNjcmlwdGlvbiBlcSAiIikgeworICAgICAgICAkZGVzY3JpcHRpb24gPSAiREVTQ1JJUFRJT04gTUlTU0lORyI7CisgICAgICAgIHdhcm4gIk1pc3NpbmcgZGVzY3JpcHRpb24gZm9yICRlcnJvcl9uYW1lXG4iOworICAgIH0KKworICAgIG15ICgkbW9kdWxlX25hbWUpID0gJGVycm9yX25hbWUgPX4gL15NQkVEVExTX0VSUl8oW15fXSspLzsKKworICAgICMgRml4IGZhdWx0eSBvbmVzCisgICAgJG1vZHVsZV9uYW1lID0gIkJJR05VTSIgaWYgKCRtb2R1bGVfbmFtZSBlcSAiTVBJIik7CisgICAgJG1vZHVsZV9uYW1lID0gIkNUUl9EUkJHIiBpZiAoJG1vZHVsZV9uYW1lIGVxICJDVFIiKTsKKyAgICAkbW9kdWxlX25hbWUgPSAiSE1BQ19EUkJHIiBpZiAoJG1vZHVsZV9uYW1lIGVxICJITUFDIik7CisKKyAgICBteSAkZGVmaW5lX25hbWUgPSAkbW9kdWxlX25hbWU7CisgICAgJGRlZmluZV9uYW1lID0gIlg1MDlfVVNFLFg1MDlfQ1JFQVRFIiBpZiAoJGRlZmluZV9uYW1lIGVxICJYNTA5Iik7CisgICAgJGRlZmluZV9uYW1lID0gIkFTTjFfUEFSU0UiIGlmICgkZGVmaW5lX25hbWUgZXEgIkFTTjEiKTsKKyAgICAkZGVmaW5lX25hbWUgPSAiU1NMX1RMUyIgaWYgKCRkZWZpbmVfbmFtZSBlcSAiU1NMIik7CisgICAgJGRlZmluZV9uYW1lID0gIlBFTV9QQVJTRSxQRU1fV1JJVEUiIGlmICgkZGVmaW5lX25hbWUgZXEgIlBFTSIpOworCisgICAgbXkgJGluY2x1ZGVfbmFtZSA9ICRtb2R1bGVfbmFtZTsKKyAgICAkaW5jbHVkZV9uYW1lID1+IHRyL0EtWi9hLXovOworICAgICRpbmNsdWRlX25hbWUgPSAiIiBpZiAoJGluY2x1ZGVfbmFtZSBlcSAiYXNuMSIpOworCisgICAgIyBGaXggZmF1bHR5IG9uZXMKKyAgICAkaW5jbHVkZV9uYW1lID0gIm5ldF9zb2NrZXRzIiBpZiAoJG1vZHVsZV9uYW1lIGVxICJORVQiKTsKKworICAgIG15ICRmb3VuZF9sbCA9IGdyZXAgJF8gZXEgJG1vZHVsZV9uYW1lLCBAbG93X2xldmVsX21vZHVsZXM7CisgICAgbXkgJGZvdW5kX2hsID0gZ3JlcCAkXyBlcSAkbW9kdWxlX25hbWUsIEBoaWdoX2xldmVsX21vZHVsZXM7CisgICAgaWYgKCEkZm91bmRfbGwgJiYgISRmb3VuZF9obCkKKyAgICB7CisgICAgICAgIHByaW50ZigiRXJyb3I6IERvIG5vdCBrbm93IGhvdyB0byBoYW5kbGU6ICRtb2R1bGVfbmFtZVxuIik7CisgICAgICAgIGV4aXQgMTsKKyAgICB9CisKKyAgICBteSAkY29kZV9jaGVjazsKKyAgICBteSAkb2xkX2RlZmluZTsKKyAgICBteSAkd2hpdGVfc3BhY2U7CisgICAgbXkgJGZpcnN0OworCisgICAgaWYgKCRmb3VuZF9sbCkKKyAgICB7CisgICAgICAgICRjb2RlX2NoZWNrID0gXCRsbF9jb2RlX2NoZWNrOworICAgICAgICAkb2xkX2RlZmluZSA9IFwkbGxfb2xkX2RlZmluZTsKKyAgICAgICAgJHdoaXRlX3NwYWNlID0gJyAgICAnOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAkY29kZV9jaGVjayA9IFwkaGxfY29kZV9jaGVjazsKKyAgICAgICAgJG9sZF9kZWZpbmUgPSBcJGhsX29sZF9kZWZpbmU7CisgICAgICAgICR3aGl0ZV9zcGFjZSA9ICcgICAgICAgICc7CisgICAgfQorCisgICAgaWYgKCRkZWZpbmVfbmFtZSBuZSAkeyRvbGRfZGVmaW5lfSkKKyAgICB7CisgICAgICAgIGlmICgkeyRvbGRfZGVmaW5lfSBuZSAiIikKKyAgICAgICAgeworICAgICAgICAgICAgJHskY29kZV9jaGVja30gLj0gIiNlbmRpZiAvKiAiOworICAgICAgICAgICAgJGZpcnN0ID0gMDsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGRlcCAoc3BsaXQoLywvLCAkeyRvbGRfZGVmaW5lfSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJHskY29kZV9jaGVja30gLj0gIiB8fCAiIGlmICgkZmlyc3QrKyk7CisgICAgICAgICAgICAgICAgJHskY29kZV9jaGVja30gLj0gIk1CRURUTFNfJHtkZXB9X0MiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJHskY29kZV9jaGVja30gLj0gIiAqL1xuXG4iOworICAgICAgICB9CisKKyAgICAgICAgJHskY29kZV9jaGVja30gLj0gIiNpZiAiOworICAgICAgICAkaGVhZGVycyAuPSAiI2lmICIgaWYgKCRpbmNsdWRlX25hbWUgbmUgIiIpOworICAgICAgICAkZmlyc3QgPSAwOworICAgICAgICBmb3JlYWNoIG15ICRkZXAgKHNwbGl0KC8sLywgJHtkZWZpbmVfbmFtZX0pKQorICAgICAgICB7CisgICAgICAgICAgICAkeyRjb2RlX2NoZWNrfSAuPSAiIHx8ICIgaWYgKCRmaXJzdCk7CisgICAgICAgICAgICAkaGVhZGVycyAgICAgICAuPSAiIHx8ICIgaWYgKCRmaXJzdCsrKTsKKworICAgICAgICAgICAgJHskY29kZV9jaGVja30gLj0gImRlZmluZWQoTUJFRFRMU18ke2RlcH1fQykiOworICAgICAgICAgICAgJGhlYWRlcnMgICAgICAgLj0gImRlZmluZWQoTUJFRFRMU18ke2RlcH1fQykiIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRpbmNsdWRlX25hbWUgbmUgIiIpOworICAgICAgICB9CisgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICJcbiI7CisgICAgICAgICRoZWFkZXJzIC49ICJcbiNpbmNsdWRlIFwibWJlZHRscy8ke2luY2x1ZGVfbmFtZX0uaFwiXG4iLgorICAgICAgICAgICAgICAgICAgICAiI2VuZGlmXG5cbiIgaWYgKCRpbmNsdWRlX25hbWUgbmUgIiIpOworICAgICAgICAkeyRvbGRfZGVmaW5lfSA9ICRkZWZpbmVfbmFtZTsKKyAgICB9CisKKyAgICBpZiAoJGVycm9yX25hbWUgZXEgIk1CRURUTFNfRVJSX1NTTF9GQVRBTF9BTEVSVF9NRVNTQUdFIikKKyAgICB7CisgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICIke3doaXRlX3NwYWNlfWlmKCB1c2VfcmV0ID09IC0oJGVycm9yX25hbWUpIClcbiIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICIke3doaXRlX3NwYWNlfVx7XG4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAiJHt3aGl0ZV9zcGFjZX0gICAgbWJlZHRsc19zbnByaW50ZiggYnVmLCBidWZsZW4sIFwiJG1vZHVsZV9uYW1lIC0gJGRlc2NyaXB0aW9uXCIgKTtcbiIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICIke3doaXRlX3NwYWNlfSAgICByZXR1cm47XG4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAiJHt3aGl0ZV9zcGFjZX19XG4iCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICR7JGNvZGVfY2hlY2t9IC49ICIke3doaXRlX3NwYWNlfWlmKCB1c2VfcmV0ID09IC0oJGVycm9yX25hbWUpIClcbiIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICIke3doaXRlX3NwYWNlfSAgICBtYmVkdGxzX3NucHJpbnRmKCBidWYsIGJ1ZmxlbiwgXCIkbW9kdWxlX25hbWUgLSAkZGVzY3JpcHRpb25cIiApO1xuIgorICAgIH0KK307CisKK2lmICgkbGxfb2xkX2RlZmluZSBuZSAiIikKK3sKKyAgICAkbGxfY29kZV9jaGVjayAuPSAiI2VuZGlmIC8qICI7CisgICAgbXkgJGZpcnN0ID0gMDsKKyAgICBmb3JlYWNoIG15ICRkZXAgKHNwbGl0KC8sLywgJGxsX29sZF9kZWZpbmUpKQorICAgIHsKKyAgICAgICAgJGxsX2NvZGVfY2hlY2sgLj0gIiB8fCAiIGlmICgkZmlyc3QrKyk7CisgICAgICAgICRsbF9jb2RlX2NoZWNrIC49ICJNQkVEVExTXyR7ZGVwfV9DIjsKKyAgICB9CisgICAgJGxsX2NvZGVfY2hlY2sgLj0gIiAqL1xuIjsKK30KK2lmICgkaGxfb2xkX2RlZmluZSBuZSAiIikKK3sKKyAgICAkaGxfY29kZV9jaGVjayAuPSAiI2VuZGlmIC8qICI7CisgICAgbXkgJGZpcnN0ID0gMDsKKyAgICBmb3JlYWNoIG15ICRkZXAgKHNwbGl0KC8sLywgJGhsX29sZF9kZWZpbmUpKQorICAgIHsKKyAgICAgICAgJGhsX2NvZGVfY2hlY2sgLj0gIiB8fCAiIGlmICgkZmlyc3QrKyk7CisgICAgICAgICRobF9jb2RlX2NoZWNrIC49ICJNQkVEVExTXyR7ZGVwfV9DIjsKKyAgICB9CisgICAgJGhsX2NvZGVfY2hlY2sgLj0gIiAqL1xuIjsKK30KKworJGVycm9yX2Zvcm1hdCA9fiBzL0hFQURFUl9JTkNMVURFRFxuLyRoZWFkZXJzL2c7CiskZXJyb3JfZm9ybWF0ID1+IHMvTE9XX0xFVkVMX0NPREVfQ0hFQ0tTXG4vJGxsX2NvZGVfY2hlY2svZzsKKyRlcnJvcl9mb3JtYXQgPX4gcy9ISUdIX0xFVkVMX0NPREVfQ0hFQ0tTXG4vJGhsX2NvZGVfY2hlY2svZzsKKworb3BlbihFUlJPUl9GSUxFLCAiPiRlcnJvcl9maWxlIikgb3IgZGllICJPcGVuaW5nIGRlc3RpbmF0aW9uIGZpbGUgJyRlcnJvcl9maWxlJzogJCEiOworcHJpbnQgRVJST1JfRklMRSAkZXJyb3JfZm9ybWF0OworY2xvc2UoRVJST1JfRklMRSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV9mZWF0dXJlcy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX2ZlYXR1cmVzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhYTY5NWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9nZW5lcmF0ZV9mZWF0dXJlcy5wbApAQCAtMCwwICsxLDc0IEBACisjIS91c3IvYmluL3BlcmwKKyMKKwordXNlIHN0cmljdDsKKworbXkgKCRpbmNsdWRlX2RpciwgJGRhdGFfZGlyLCAkZmVhdHVyZV9maWxlKTsKKworaWYoIEBBUkdWICkgeworICAgIGRpZSAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIiBpZiBzY2FsYXIgQEFSR1YgIT0gMzsKKyAgICAoJGluY2x1ZGVfZGlyLCAkZGF0YV9kaXIsICRmZWF0dXJlX2ZpbGUpID0gQEFSR1Y7CisKKyAgICAtZCAkaW5jbHVkZV9kaXIgb3IgZGllICJObyBzdWNoIGRpcmVjdG9yeTogJGluY2x1ZGVfZGlyXG4iOworICAgIC1kICRkYXRhX2RpciBvciBkaWUgIk5vIHN1Y2ggZGlyZWN0b3J5OiAkZGF0YV9kaXJcbiI7Cit9IGVsc2UgeworICAgICRpbmNsdWRlX2RpciA9ICdpbmNsdWRlL21iZWR0bHMnOworICAgICRkYXRhX2RpciA9ICdzY3JpcHRzL2RhdGFfZmlsZXMnOworICAgICRmZWF0dXJlX2ZpbGUgPSAnbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMnOworCisgICAgdW5sZXNzKCAtZCAkaW5jbHVkZV9kaXIgJiYgLWQgJGRhdGFfZGlyICkgeworICAgICAgICBjaGRpciAnLi4nIG9yIGRpZTsKKyAgICAgICAgLWQgJGluY2x1ZGVfZGlyICYmIC1kICRkYXRhX2RpcgorICAgICAgICAgICAgb3IgZGllICJXaXRob3V0IGFyZ3VtZW50cywgbXVzdCBiZSBydW4gZnJvbSByb290IG9yIHNjcmlwdHNcbiIKKyAgICB9Cit9CisKK215ICRmZWF0dXJlX2Zvcm1hdF9maWxlID0gJGRhdGFfZGlyLicvdmVyc2lvbl9mZWF0dXJlcy5mbXQnOworCitteSBAc2VjdGlvbnMgPSAoICJTeXN0ZW0gc3VwcG9ydCIsICJtYmVkIFRMUyBtb2R1bGVzIiwKKyAgICAgICAgICAgICAgICAgIm1iZWQgVExTIGZlYXR1cmUgc3VwcG9ydCIgKTsKKworbXkgJGxpbmVfc2VwYXJhdG9yID0gJC87Cit1bmRlZiAkLzsKKworb3BlbihGT1JNQVRfRklMRSwgIiRmZWF0dXJlX2Zvcm1hdF9maWxlIikgb3IgZGllICJPcGVuaW5nIGZlYXR1cmUgZm9ybWF0IGZpbGUgJyRmZWF0dXJlX2Zvcm1hdF9maWxlJzogJCEiOworbXkgJGZlYXR1cmVfZm9ybWF0ID0gPEZPUk1BVF9GSUxFPjsKK2Nsb3NlKEZPUk1BVF9GSUxFKTsKKworJC8gPSAkbGluZV9zZXBhcmF0b3I7CisKK29wZW4oQ09ORklHX0gsICIkaW5jbHVkZV9kaXIvY29uZmlnLmgiKSB8fCBkaWUoIkZhaWx1cmUgd2hlbiBvcGVuaW5nIGNvbmZpZy5oOiAkISIpOworCitteSAkZmVhdHVyZV9kZWZpbmVzID0gIiI7CitteSAkaW5fc2VjdGlvbiA9IDA7CisKK3doaWxlIChteSAkbGluZSA9IDxDT05GSUdfSD4pCit7CisgICAgbmV4dCBpZiAoJGluX3NlY3Rpb24gJiYgJGxpbmUgIX4gLyNkZWZpbmUvICYmICRsaW5lICF+IC9TRUNUSU9OLyk7CisgICAgbmV4dCBpZiAoISRpbl9zZWN0aW9uICYmICRsaW5lICF+IC9TRUNUSU9OLyk7CisKKyAgICBpZiAoJGluX3NlY3Rpb24pIHsKKyAgICAgICAgaWYgKCRsaW5lID1+IC9TRUNUSU9OLykgeworICAgICAgICAgICAgJGluX3NlY3Rpb24gPSAwOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIG15ICgkZGVmaW5lKSA9ICRsaW5lID1+IC8jZGVmaW5lIChcdyspLzsKKyAgICAgICAgJGZlYXR1cmVfZGVmaW5lcyAuPSAiI2lmIGRlZmluZWQoJHtkZWZpbmV9KVxuIjsKKyAgICAgICAgJGZlYXR1cmVfZGVmaW5lcyAuPSAiICAgIFwiJHtkZWZpbmV9XCIsXG4iOworICAgICAgICAkZmVhdHVyZV9kZWZpbmVzIC49ICIjZW5kaWYgLyogJHtkZWZpbmV9ICovXG4iOworICAgIH0KKworICAgIGlmICghJGluX3NlY3Rpb24pIHsKKyAgICAgICAgbXkgKCRzZWN0aW9uX25hbWUpID0gJGxpbmUgPX4gL1NFQ1RJT046IChbXHcgXSspLzsKKyAgICAgICAgbXkgJGZvdW5kX3NlY3Rpb24gPSBncmVwICRfIGVxICRzZWN0aW9uX25hbWUsIEBzZWN0aW9uczsKKworICAgICAgICAkaW5fc2VjdGlvbiA9IDEgaWYgKCRmb3VuZF9zZWN0aW9uKTsKKyAgICB9Cit9OworCiskZmVhdHVyZV9mb3JtYXQgPX4gcy9GRUFUVVJFX0RFRklORVNcbi8kZmVhdHVyZV9kZWZpbmVzL2c7CisKK29wZW4oRVJST1JfRklMRSwgIj4kZmVhdHVyZV9maWxlIikgb3IgZGllICJPcGVuaW5nIGRlc3RpbmF0aW9uIGZpbGUgJyRmZWF0dXJlX2ZpbGUnOiAkISI7CitwcmludCBFUlJPUl9GSUxFICRmZWF0dXJlX2Zvcm1hdDsKK2Nsb3NlKEVSUk9SX0ZJTEUpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvZ2VuZXJhdGVfdmlzdWFsY19maWxlcy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX3Zpc3VhbGNfZmlsZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQzNjY1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL2dlbmVyYXRlX3Zpc3VhbGNfZmlsZXMucGwKQEAgLTAsMCArMSwxOTUgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEdlbmVyYXRlIGZpbGVzIGZvciBNUyBWaXN1YWwgU3R1ZGlvOgorIyAtIGZvciBWUzY6IG1haW4gcHJvamVjdCAobGlicmFyeSkgZmlsZSwgaW5kaXZpZHVhbCBhcHAgZmlsZXMsIHdvcmtzcGFjZQorIyAtIGZvciBWUzIwMTA6IG1haW4gZmlsZSwgaW5kaXZpZHVhbCBhcHBzLCBzb2x1dGlvbiBmaWxlCisjCisjIE11c3QgYmUgcnVuIGZyb20gbWJlZFRMUyByb290IG9yIHNjcmlwdHMgZGlyZWN0b3J5LgorIyBUYWtlcyBubyBhcmd1bWVudC4KKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKK3VzZSBEaWdlc3Q6Ok1ENSAnbWQ1X2hleCc7CisKK215ICR2c3hfZGlyID0gInZpc3VhbGMvVlMyMDEwIjsKK215ICR2c3hfZXh0ID0gInZjeHByb2oiOworbXkgJHZzeF9hcHBfdHBsX2ZpbGUgPSAic2NyaXB0cy9kYXRhX2ZpbGVzL3ZzMjAxMC1hcHAtdGVtcGxhdGUuJHZzeF9leHQiOworbXkgJHZzeF9tYWluX3RwbF9maWxlID0gInNjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtbWFpbi10ZW1wbGF0ZS4kdnN4X2V4dCI7CitteSAkdnN4X21haW5fZmlsZSA9ICIkdnN4X2Rpci9tYmVkVExTLiR2c3hfZXh0IjsKK215ICR2c3hfc2xuX3RwbF9maWxlID0gInNjcmlwdHMvZGF0YV9maWxlcy92czIwMTAtc2xuLXRlbXBsYXRlLnNsbiI7CitteSAkdnN4X3Nsbl9maWxlID0gIiR2c3hfZGlyL21iZWRUTFMuc2xuIjsKKworbXkgJHByb2dyYW1zX2RpciA9ICdwcm9ncmFtcyc7CitteSAkaGVhZGVyX2RpciA9ICdpbmNsdWRlL21iZWR0bHMnOworbXkgJHNvdXJjZV9kaXIgPSAnbGlicmFyeSc7CisKKyMgTmVlZCB3aW5kb3dzIGxpbmUgZW5kaW5ncyEKK215ICR2c3hfaGRyX3RwbCA9IDw8RU9UOworICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cXC4uXFx7TkFNRX0iIC8+XHIKK0VPVAorbXkgJHZzeF9zcmNfdHBsID0gPDxFT1Q7CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxcLi5cXHtOQU1FfSIgLz5ccgorRU9UCisKK215ICR2c3hfc2xuX2FwcF9lbnRyeV90cGwgPSA8PEVPVDsKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAie0FQUE5BTUV9IiwgIntBUFBOQU1FfS52Y3hwcm9qIiwgIntHVUlEfSJccgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3RccgorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9XHIKKwlFbmRQcm9qZWN0U2VjdGlvblxyCitFbmRQcm9qZWN0XHIKK0VPVAorCitteSAkdnN4X3Nsbl9jb25mX2VudHJ5X3RwbCA9IDw8RU9UOworCQl7R1VJRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJccgorCQl7R1VJRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXHIKKwkJe0dVSUR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjRccgorCQl7R1VJRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjRccgorCQl7R1VJRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyXHIKKwkJe0dVSUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJccgorCQl7R1VJRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjRccgorCQl7R1VJRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0XHIKK0VPVAorCitleGl0KCBtYWluKCkgKTsKKworc3ViIGNoZWNrX2RpcnMgeworICAgIHJldHVybiAtZCAkdnN4X2RpcgorICAgICAgICAmJiAtZCAkaGVhZGVyX2RpcgorICAgICAgICAmJiAtZCAkc291cmNlX2RpcgorICAgICAgICAmJiAtZCAkcHJvZ3JhbXNfZGlyOworfQorCitzdWIgc2x1cnBfZmlsZSB7CisgICAgbXkgKCRmaWxlbmFtZSkgPSBAXzsKKworICAgIGxvY2FsICQvID0gdW5kZWY7CisgICAgb3BlbiBteSAkZmgsICc8JywgJGZpbGVuYW1lIG9yIGRpZSAiQ291bGQgbm90IHJlYWQgJGZpbGVuYW1lXG4iOworICAgIG15ICRjb250ZW50ID0gPCRmaD47CisgICAgY2xvc2UgJGZoOworCisgICAgcmV0dXJuICRjb250ZW50OworfQorCitzdWIgY29udGVudF90b19maWxlIHsKKyAgICBteSAoJGNvbnRlbnQsICRmaWxlbmFtZSkgPSBAXzsKKworICAgIG9wZW4gbXkgJGZoLCAnPicsICRmaWxlbmFtZSBvciBkaWUgIkNvdWxkIG5vdCB3cml0ZSB0byAkZmlsZW5hbWVcbiI7CisgICAgcHJpbnQgJGZoICRjb250ZW50OworICAgIGNsb3NlICRmaDsKK30KKworc3ViIGdlbl9hcHBfZ3VpZCB7CisgICAgbXkgKCRwYXRoKSA9IEBfOworCisgICAgbXkgJGd1aWQgPSBtZDVfaGV4KCAibWJlZFRMUzokcGF0aCIgKTsKKyAgICAkZ3VpZCA9fiBzLyguezh9KSguezR9KSguezR9KSguezR9KSguezEyfSkvXFV7JDEtJDItJDMtJDQtJDV9LzsKKworICAgIHJldHVybiAkZ3VpZDsKK30KKworc3ViIGdlbl9hcHAgeworICAgIG15ICgkcGF0aCwgJHRlbXBsYXRlLCAkZGlyLCAkZXh0KSA9IEBfOworCisgICAgbXkgJGd1aWQgPSBnZW5fYXBwX2d1aWQoICRwYXRoICk7CisgICAgJHBhdGggPX4gcyEvIVxcIWc7CisgICAgKG15ICRhcHBuYW1lID0gJHBhdGgpID1+IHMvLipcXC8vOworCisgICAgbXkgJGNvbnRlbnQgPSAkdGVtcGxhdGU7CisgICAgJGNvbnRlbnQgPX4gcy88UEFUSE5BTUU+LyRwYXRoL2c7CisgICAgJGNvbnRlbnQgPX4gcy88QVBQTkFNRT4vJGFwcG5hbWUvZzsKKyAgICAkY29udGVudCA9fiBzLzxHVUlEPi8kZ3VpZC9nOworCisgICAgY29udGVudF90b19maWxlKCAkY29udGVudCwgIiRkaXIvJGFwcG5hbWUuJGV4dCIgKTsKK30KKworc3ViIGdldF9hcHBfbGlzdCB7CisgICAgbXkgJGFwcF9saXN0ID0gYGNkICRwcm9ncmFtc19kaXIgJiYgbWFrZSBsaXN0YDsKKyAgICBkaWUgIm1ha2UgbGlzdCBmYWlsZWQ6ICQhXG4iIGlmICQ/OworCisgICAgcmV0dXJuIHNwbGl0IC9ccysvLCAkYXBwX2xpc3Q7Cit9CisKK3N1YiBnZW5fYXBwX2ZpbGVzIHsKKyAgICBteSBAYXBwX2xpc3QgPSBAXzsKKworICAgIG15ICR2c3hfdHBsID0gc2x1cnBfZmlsZSggJHZzeF9hcHBfdHBsX2ZpbGUgKTsKKworICAgIGZvciBteSAkYXBwICggQGFwcF9saXN0ICkgeworICAgICAgICBnZW5fYXBwKCAkYXBwLCAkdnN4X3RwbCwgJHZzeF9kaXIsICR2c3hfZXh0ICk7CisgICAgfQorfQorCitzdWIgZ2VuX2VudHJ5X2xpc3QgeworICAgIG15ICgkdHBsLCBAbmFtZXMpID0gQF87CisKKyAgICBteSAkZW50cmllczsKKyAgICBmb3IgbXkgJG5hbWUgKEBuYW1lcykgeworICAgICAgICAobXkgJGVudHJ5ID0gJHRwbCkgPX4gcy97TkFNRX0vJG5hbWUvZzsKKyAgICAgICAgJGVudHJpZXMgLj0gJGVudHJ5OworICAgIH0KKworICAgIHJldHVybiAkZW50cmllczsKK30KKworc3ViIGdlbl9tYWluX2ZpbGUgeworICAgIG15ICgkaGVhZGVycywgJHNvdXJjZXMsICRoZHJfdHBsLCAkc3JjX3RwbCwgJG1haW5fdHBsLCAkbWFpbl9vdXQpID0gQF87CisKKyAgICBteSAkaGVhZGVyX2VudHJpZXMgPSBnZW5fZW50cnlfbGlzdCggJGhkcl90cGwsIEAkaGVhZGVycyApOworICAgIG15ICRzb3VyY2VfZW50cmllcyA9IGdlbl9lbnRyeV9saXN0KCAkc3JjX3RwbCwgQCRzb3VyY2VzICk7CisKKyAgICBteSAkb3V0ID0gc2x1cnBfZmlsZSggJG1haW5fdHBsICk7CisgICAgJG91dCA9fiBzL1NPVVJDRV9FTlRSSUVTXHJcbi8kc291cmNlX2VudHJpZXMvbTsKKyAgICAkb3V0ID1+IHMvSEVBREVSX0VOVFJJRVNcclxuLyRoZWFkZXJfZW50cmllcy9tOworCisgICAgY29udGVudF90b19maWxlKCAkb3V0LCAkbWFpbl9vdXQgKTsKK30KKworc3ViIGdlbl92c3hfc29sdXRpb24geworICAgIG15IChAYXBwX25hbWVzKSA9IEBfOworCisgICAgbXkgKCRhcHBfZW50cmllcywgJGNvbmZfZW50cmllcyk7CisgICAgZm9yIG15ICRwYXRoIChAYXBwX25hbWVzKSB7CisgICAgICAgIG15ICRndWlkID0gZ2VuX2FwcF9ndWlkKCAkcGF0aCApOworICAgICAgICAobXkgJGFwcG5hbWUgPSAkcGF0aCkgPX4gcyEuKi8hITsKKworICAgICAgICBteSAkYXBwX2VudHJ5ID0gJHZzeF9zbG5fYXBwX2VudHJ5X3RwbDsKKyAgICAgICAgJGFwcF9lbnRyeSA9fiBzL3tBUFBOQU1FfS8kYXBwbmFtZS9nOworICAgICAgICAkYXBwX2VudHJ5ID1+IHMve0dVSUR9LyRndWlkL2c7CisKKyAgICAgICAgJGFwcF9lbnRyaWVzIC49ICRhcHBfZW50cnk7CisKKyAgICAgICAgbXkgJGNvbmZfZW50cnkgPSAkdnN4X3Nsbl9jb25mX2VudHJ5X3RwbDsKKyAgICAgICAgJGNvbmZfZW50cnkgPX4gcy97R1VJRH0vJGd1aWQvZzsKKworICAgICAgICAkY29uZl9lbnRyaWVzIC49ICRjb25mX2VudHJ5OworICAgIH0KKworICAgIG15ICRvdXQgPSBzbHVycF9maWxlKCAkdnN4X3Nsbl90cGxfZmlsZSApOworICAgICRvdXQgPX4gcy9BUFBfRU5UUklFU1xyXG4vJGFwcF9lbnRyaWVzL207CisgICAgJG91dCA9fiBzL0NPTkZfRU5UUklFU1xyXG4vJGNvbmZfZW50cmllcy9tOworCisgICAgY29udGVudF90b19maWxlKCAkb3V0LCAkdnN4X3Nsbl9maWxlICk7Cit9CisKK3N1YiBtYWluIHsKKyAgICBpZiggISBjaGVja19kaXJzKCkgKSB7CisgICAgICAgIGNoZGlyICcuLicgb3IgZGllOworICAgICAgICBjaGVja19kaXJzIG9yIGRpZSAiTXVzdCBidXQgcnVuIGZyb20gbWJlZFRMUyByb290IG9yIHNjcmlwdHMgZGlyXG4iOworICAgIH0KKworICAgIG15IEBhcHBfbGlzdCA9IGdldF9hcHBfbGlzdCgpOworICAgIG15IEBoZWFkZXJzID0gPCRoZWFkZXJfZGlyLyouaD47CisgICAgbXkgQHNvdXJjZXMgPSA8JHNvdXJjZV9kaXIvKi5jPjsKKyAgICBtYXAgeyBzIS8hXFwhZyB9IEBoZWFkZXJzOworICAgIG1hcCB7IHMhLyFcXCFnIH0gQHNvdXJjZXM7CisKKyAgICBnZW5fYXBwX2ZpbGVzKCBAYXBwX2xpc3QgKTsKKworICAgIGdlbl9tYWluX2ZpbGUoIFxAaGVhZGVycywgXEBzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICR2c3hfaGRyX3RwbCwgJHZzeF9zcmNfdHBsLAorICAgICAgICAgICAgICAgICAgICR2c3hfbWFpbl90cGxfZmlsZSwgJHZzeF9tYWluX2ZpbGUgKTsKKworICAgIGdlbl92c3hfc29sdXRpb24oIEBhcHBfbGlzdCApOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9tYWxsb2MtaW5pdC5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL21hbGxvYy1pbml0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3ZDZmY2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9tYWxsb2MtaW5pdC5wbApAQCAtMCwwICsxLDcwIEBACisjIS91c3IvYmluL3BlcmwKKworIyBDaGVjayBmb3IgbWFsbG9jIGNhbGxzIG5vdCBzaG9ydGx5IGZvbGxvd2VkIGJ5IGluaXRpYWxpc2F0aW9uLgorIworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBmYWxzZSBuZWdhdGl2ZTogY2FuJ3Qgc2VlIGFsbG9jYXRpb25zIHNwYW5uaW5nIG1vcmUgdGhhbiBvbmUgbGluZQorIyAtIHBvc3NpYmxlIGZhbHNlIG5lZ2F0aXZlcywgc2VlIHBhdHRlcm5zCisjIC0gZmFsc2UgcG9zaXRpdmU6IG1hbGxvYy1tYWxsb2MtaW5pdC1pbml0IGlzIG5vdCBhY2NlcHRlZAorIyAtIGZhbHNlIHBvc2l0aXZlczogIm5vbi1zdGFuZGFyZCIgaW5pdCBmdW5jdGlvbnMgKGVnLCB0aGUgdGhpbmdzIGJlaW5nCisjIGluaXRpYWxpc2VkIGlzIG5vdCB0aGUgZmlyc3QgYXJnLCBvciBpbml0aWFsaXNlIHN0cnVjdCBtZW1iZXJzKQorIworIyBTaW5jZSBmYWxzZSBwb3NpdGl2ZXMgYXJlIGV4cGVjdGVkLCB0aGUgcmVzdWx0cyBtdXN0IGJlIG1hbnVhbGx5IHJldmlld2VkLgorIworIyBUeXBpY2FsIHVzYWdlOiBzY3JpcHRzL21hbGxvYy1pbml0LnBsIGxpYnJhcnkvKi5jCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK3VzZSB1dGY4OwordXNlIG9wZW4gcXcoOnN0ZCB1dGY4KTsKKworbXkgJGxpbWl0ID0gNzsKK215ICRpbml0cyA9IHFyL21lbXNldHxtZW1jcHl8X2luaXR8ZnJlYWR8YmFzZTY0Xy4uY29kZS87CisKKyMgY2FzZXMgdG8gYmVhciBpbiBtaW5kOgorIworIyAwLiBmb28gPSBtYWxsb2MoLi4uKTsgbWVtc2V0KCBmb28sIC4uLiApOworIyAxLiAqZm9vID0gbWFsbG9jKC4uLik7IG1lbXNldCggKmZvbywgLi4uICk7CisjIDIuIHR5cGUgKmZvbyA9IG1hbGxvYyguLi4pOyBtZW1zZXQoIGZvbywgLi4uKTsKKyMgMy4gZm9vID0gbWFsbG9jKC4uLik7IGZvb19pbml0KCAodHlwZSAqKSBmb28gKTsKKyMgNC4gZm9vID0gbWFsbG9jKC4uLik7IGZvcihpPTAuLm4pIHsgaW5pdCggJmZvb1tpXSApOyB9CisjCisjIFRoZSBjaG9zZW4gcGF0dGVybnMgYXJlIGEgYml0IHJlbGF4ZWQsIGJ1dCB1bmxpa2VseSB0byBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMKKyMgaW4gcmVhbCBjb2RlIChpbml0aWFsaXNpbmcgKmZvbyBvciAmZm9vIGluc3RlYWQgb2YgZm9vIHdpbGwgbGlrZWx5IGJlIGNhdWdodAorIyBieSBmdW5jdGlvbmFsIHRlc3RzKS4KKyMKK215ICRpZCA9IHFyLyhbYS16QS1aLTAtOV9cLT5cLl0qKS87CitteSAkcHJlZml4ID0gcXIvXHMoPzpcKj98XCY/fFwoW2Etel9dKiBcKlwpKVxzKi87CisKK215ICRuYW1lOworbXkgJGxpbmU7CitteSBAYmFkOworCitkaWUgIlVzYWdlOiAkMCBmaWxlLmMgWy4uLl1cbiIgdW5sZXNzIEBBUkdWOworCit3aGlsZSAobXkgJGZpbGUgPSBzaGlmdCBAQVJHVikKK3sKKyAgICBvcGVuIG15ICRmaCwgIjwiLCAkZmlsZSBvciBkaWUgInJlYWQgJGZpbGUgZmFpbGVkOiAkIVxuIjsKKyAgICB3aGlsZSAoPCRmaD4pCisgICAgeworICAgICAgICBpZiggL21iZWR0bHNfbWFsbG9jXCgvICkgeworICAgICAgICAgICAgaWYoIC8kaWRccyo9LiptYmVkdGxzX21hbGxvY1woLyApIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBiYWQsICIkZmlsZTokbGluZTokbmFtZSIgaWYgJG5hbWU7CisgICAgICAgICAgICAgICAgJG5hbWUgPSAkMTsKKyAgICAgICAgICAgICAgICAkbGluZSA9ICQuOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBiYWQsICIkZmlsZTokLjo/Pz8iIHVubGVzcyAvcmV0dXJuIG1iZWR0bHNfbWFsbG9jLzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiggJG5hbWUgJiYgLyg/OiRpbml0cylcKCRwcmVmaXhcUSRuYW1lXEVcYi8gKSB7CisgICAgICAgICAgICB1bmRlZiAkbmFtZTsKKyAgICAgICAgfSBlbHNpZiggJG5hbWUgJiYgJC4gLSAkbGluZSA+ICRsaW1pdCApIHsKKyAgICAgICAgICAgIHB1c2ggQGJhZCwgIiRmaWxlOiRsaW5lOiRuYW1lIjsKKyAgICAgICAgICAgIHVuZGVmICRuYW1lOworICAgICAgICAgICAgdW5kZWYgJGxpbmU7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2UgJGZoIG9yIGRpZTsKK30KKworcHJpbnQgIiRfXG4iIGZvciBAYmFkOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvbWFzc2lmX21heC5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL21hc3NpZl9tYXgucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFjZTRjYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL21hc3NpZl9tYXgucGwKQEAgLTAsMCArMSwzMyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgUGFyc2UgYSBtYXNzaWYub3V0Lnh4eCBmaWxlIGFuZCBvdXRwdXQgcGVhayB0b3RhbCBtZW1vcnkgdXNhZ2UKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKwordXNlIHV0Zjg7Cit1c2Ugb3BlbiBxdyg6c3RkIHV0ZjgpOworCitkaWUgdW5sZXNzIEBBUkdWID09IDE7CisKK215IEBzbmFwczsKK29wZW4gbXkgJGZoLCAnPCcsICRBUkdWWzBdIG9yIGRpZTsKK3sgbG9jYWwgJC8gPSAnc25hcHNob3Q9JzsgQHNuYXBzID0gPCRmaD47IH0KK2Nsb3NlICRmaCBvciBkaWU7CisKK215ICgkbWF4LCAkbWF4X2hlYXAsICRtYXhfaGUsICRtYXhfc3RhY2spID0gKDAsIDAsIDAsIDApOworZm9yIChAc25hcHMpCit7CisgICAgbXkgKCRoZWFwLCAkaGVhcF9leHRyYSwgJHN0YWNrKSA9IG17CisgICAgICAgIG1lbV9oZWFwX0I9KFxkKylcbgorICAgICAgICBtZW1faGVhcF9leHRyYV9CPShcZCspXG4KKyAgICAgICAgbWVtX3N0YWNrc19CPShcZCspCisgICAgfXhtOworICAgIG5leHQgdW5sZXNzIGRlZmluZWQgJGhlYXA7CisgICAgbXkgJHRvdGFsID0gJGhlYXAgKyAkaGVhcF9leHRyYSArICRzdGFjazsKKyAgICBpZiggJHRvdGFsID4gJG1heCApIHsKKyAgICAgICAgKCRtYXgsICRtYXhfaGVhcCwgJG1heF9oZSwgJG1heF9zdGFjaykgPSAoJHRvdGFsLCAkaGVhcCwgJGhlYXBfZXh0cmEsICRzdGFjayk7CisgICAgfQorfQorCitwcmludGYgIiRtYXggKGhlYXAgJG1heF9oZWFwKyRtYXhfaGUsIHN0YWNrICRtYXhfc3RhY2spXG4iOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvbWVtb3J5LnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvbWVtb3J5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkYWQyODkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9tZW1vcnkuc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorCisjIE1lYXN1cmUgbWVtb3J5IHVzYWdlIG9mIGEgbWluaW1hbCBjbGllbnQgdXNpbmcgYSBzbWFsbCBjb25maWd1cmF0aW9uCisjIEN1cnJlbnRseSBoYXJkd2lyZWQgdG8gY2NtLXBzayBhbmQgc3VpdGUtYiwgbWF5IGJlIGV4cGFuZGVkIGxhdGVyCisjCisjIFVzZSBkaWZmZXJlbnQgYnVpbGQgb3B0aW9ucyBmb3IgbWVhc3VyaW5nIGV4ZWN1dGFibGUgc2l6ZSBhbmQgbWVtb3J5IHVzYWdlLAorIyBzaW5jZSBmb3IgbWVtb3J5IHdlIHdhbnQgZGVidWcgaW5mb3JtYXRpb24uCisKK3NldCAtZXUKKworQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKKworQ0xJRU5UPSdtaW5pX2NsaWVudCcKKworQ0ZMQUdTX0VYRUM9Jy1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgLVdsLC0tZ2Mtc2VjdGlvbiAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucycKK0NGTEFHU19NRU09LWczCisKK2lmIFsgLXIgJENPTkZJR19IIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIiRDT05GSUdfSCBub3QgZm91bmQiID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgZ3JlcCAtaSBjbWFrZSBNYWtlZmlsZSA+L2Rldi9udWxsOyB0aGVuCisgICAgZWNobyAiTm90IGNvbXBhdGlibGUgd2l0aCBDTWFrZSIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBbICQoIHVuYW1lICkgIT0gTGludXggXTsgdGhlbgorICAgIGVjaG8gIk9ubHkgd29yayBvbiBMaW51eCIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBnaXQgc3RhdHVzIHwgZ3JlcCAtRiAkQ09ORklHX0ggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgZWNobyAiY29uZmlnLmggbm90IGNsZWFuIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKKyMgbWFrZSBtZWFzdXJlbWVudHMgd2l0aCBvbmUgY29uZmlndXJhdGlvbgorIyB1c2FnZTogZG9fY29uZmlnIDxuYW1lPiA8dW5zZXQtbGlzdD4gPHNlcnZlci1hcmdzPgorZG9fY29uZmlnKCkKK3sKKyAgICBOQU1FPSQxCisgICAgVU5TRVRfTElTVD0kMgorICAgIFNFUlZFUl9BUkdTPSQzCisKKyAgICBlY2hvICIiCisgICAgZWNobyAiY29uZmlnLSROQU1FOiIKKyAgICBjcCBjb25maWdzL2NvbmZpZy0kTkFNRS5oICRDT05GSUdfSAorICAgIHNjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfU1NMX1NSVl9DCisKKyAgICBmb3IgRkxBRyBpbiAkVU5TRVRfTElTVDsgZG8KKyAgICAgICAgc2NyaXB0cy9jb25maWcucGwgdW5zZXQgJEZMQUcKKyAgICBkb25lCisKKyAgICBncmVwIC1GIFNTTF9NQVhfQ09OVEVOVF9MRU4gJENPTkZJR19IIHx8IGVjaG8gJ1NTTF9NQVhfQ09OVEVOVF9MRU49MTYzODQnCisKKyAgICBwcmludGYgIiAgICBFeGVjdXRhYmxlIHNpemUuLi4gIgorCisgICAgbWFrZSBjbGVhbgorICAgIENGTEFHUz0kQ0ZMQUdTX0VYRUMgbWFrZSBPRkxBR1M9LU9zIGxpYiA+L2Rldi9udWxsIDI+JjEKKyAgICBjZCBwcm9ncmFtcworICAgIENGTEFHUz0kQ0ZMQUdTX0VYRUMgbWFrZSBPRkxBR1M9LU9zIHNzbC8kQ0xJRU5UID4vZGV2L251bGwKKyAgICBzdHJpcCBzc2wvJENMSUVOVAorICAgIHN0YXQgLWMgJyVzJyBzc2wvJENMSUVOVAorICAgIGNkIC4uCisKKyAgICBwcmludGYgIiAgICBQZWFrIHJhbSB1c2FnZS4uLiAiCisKKyAgICBtYWtlIGNsZWFuCisgICAgQ0ZMQUdTPSRDRkxBR1NfTUVNIG1ha2UgT0ZMQUdTPS1PcyBsaWIgPi9kZXYvbnVsbCAyPiYxCisgICAgY2QgcHJvZ3JhbXMKKyAgICBDRkxBR1M9JENGTEFHU19NRU0gbWFrZSBPRkxBR1M9LU9zIHNzbC8kQ0xJRU5UID4vZGV2L251bGwKKyAgICBjZCAuLgorCisgICAgLi9zc2xfc2VydmVyMiAkU0VSVkVSX0FSR1MgPi9kZXYvbnVsbCAmCisgICAgU1JWX1BJRD0kIQorICAgIHNsZWVwIDE7CisKKyAgICBpZiB2YWxncmluZCAtLXRvb2w9bWFzc2lmIC0tc3RhY2tzPXllcyBwcm9ncmFtcy9zc2wvJENMSUVOVCA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICAgIEZBSUxFRD0wCisgICAgZWxzZQorICAgICAgICBlY2hvICJjbGllbnQgZmFpbGVkIiA+JjIKKyAgICAgICAgRkFJTEVEPTEKKyAgICBmaQorCisgICAga2lsbCAkU1JWX1BJRAorICAgIHdhaXQgJFNSVl9QSUQKKworICAgIHNjcmlwdHMvbWFzc2lmX21heC5wbCBtYXNzaWYub3V0LioKKyAgICBtdiBtYXNzaWYub3V0LiogbWFzc2lmLSROQU1FLiQkCit9CisKKyMgcHJlcGFyYXRpb24KKworQ09ORklHX0JBSz0ke0NPTkZJR19IfS5iYWsKK2NwICRDT05GSUdfSCAkQ09ORklHX0JBSworCitybSAtZiBtYXNzaWYub3V0LioKKworcHJpbnRmICJidWlsZGluZyBzZXJ2ZXIuLi4gIgorCittYWtlIGNsZWFuCittYWtlIGxpYiA+L2Rldi9udWxsIDI+JjEKKyhjZCBwcm9ncmFtcyAmJiBtYWtlIHNzbC9zc2xfc2VydmVyMikgPi9kZXYvbnVsbAorY3AgcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyIC4KKworZWNobyAiZG9uZSIKKworIyBhY3R1YWwgbWVhc3VyZW1lbnRzCisKK2RvX2NvbmZpZyAgICJjY20tcHNrLXRsczFfMiIgXAorICAgICAgICAgICAgIiIgXAorICAgICAgICAgICAgInBzaz0wMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiIKKworZG9fY29uZmlnICAgInN1aXRlLWIiIFwKKyAgICAgICAgICAgICJNQkVEVExTX0JBU0U2NF9DIE1CRURUTFNfUEVNX1BBUlNFX0MgTUJFRFRMU19DRVJUU19DIiBcCisgICAgICAgICAgICAiIgorCisjIGNsZWFudXAKKworbXYgJENPTkZJR19CQUsgJENPTkZJR19ICittYWtlIGNsZWFuCitybSBzc2xfc2VydmVyMgorCitleGl0ICRGQUlMRUQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL291dHB1dF9lbnYuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9vdXRwdXRfZW52LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0MWZlMTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9vdXRwdXRfZW52LnNoCkBAIC0wLDAgKzEsMTY4IEBACisjIS9iaW4vc2gKKyMKKyMgb3V0cHV0X2Vudi5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUbyBwcmludCBvdXQgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisjCisjIFRoaXMgaW5jbHVkZXM6CisjICAgLSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbQorIyAgIC0gdHlwZSBhbmQgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbQorIyAgIC0gdmVyc2lvbiBvZiBhcm1jYywgY2xhbmcsIGdjYy1hcm0gYW5kIGdjYyBjb21waWxlcnMKKyMgICAtIHZlcnNpb24gb2YgbGliYywgY2xhbmcsIGFzYW4gYW5kIHZhbGdyaW5kIGlmIGluc3RhbGxlZAorIyAgIC0gdmVyc2lvbiBvZiBnbnVUTFMgYW5kIE9wZW5TU0wKKworZWNobworZWNobyAiKiBPcGVyYXRpbmcgc3lzdGVtIGFuZCBhcmNoaXRlY3R1cmU6IgordW5hbWUgLWEKKworZWNobworaWYgYGhhc2ggYXJtY2MgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICBlY2hvICIqIGFybWNjOiIKKyAgICBhcm1jYyAtLXZzbiB8IGhlYWQgLW4gMgorZWxzZQorICAgIGVjaG8gIiogYXJtY2Mgbm90IGZvdW5kISIKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIGFybS1ub25lLWVhYmktZ2NjID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBnY2MtYXJtOiIKKyAgICBhcm0tbm9uZS1lYWJpLWdjYyAtLXZlcnNpb24gfCBoZWFkIC1uIDEKK2Vsc2UKKyAgICBlY2hvICIqIGdjYy1hcm0gbm90IGZvdW5kISIKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIGdjYyA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgIGVjaG8gIiogZ2NjOiIKKyAgICBnY2MgLS12ZXJzaW9uIHwgaGVhZCAtbiAxCitlbHNlCisgICAgZWNobyAiKiBnY2Mgbm90IGZvdW5kISIKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIGNsYW5nID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBjbGFuZzoiCisgICAgY2xhbmcgLS12ZXJzaW9uIHwgaGVhZCAtbiAyCisgICAgY2xhbmcgLXYgMj4mMSB8IGdyZXAgU2VsZWN0ZWQKK2Vsc2UKKyAgICBlY2hvICIqIGNsYW5nIG5vdCBmb3VuZCEiCitmaQorCitlY2hvCitpZiBgaGFzaCBsZGQgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICBlY2hvICIqIGxpYmM6IgorICAgIGxkZCAtLXZlcnNpb24gfCBoZWFkIC1uIDEKK2Vsc2UKKyAgICBlY2hvICIqIE5vIGxkZCBwcmVzZW50OiBjYW4ndCBkZXRlcm1pbmUgbGliYyB2ZXJzaW9uISIKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIHZhbGdyaW5kID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiB2YWxncmluZDoiCisgICAgdmFsZ3JpbmQgLS12ZXJzaW9uCitlbHNlCisgICAgZWNobyAiKiB2YWxncmluZCBub3QgZm91bmQhIgorZmkKKworZWNobworaWYgYGhhc2ggb3BlbnNzbCA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgIGVjaG8gIiogb3BlbnNzbDoiCisgICAgb3BlbnNzbCB2ZXJzaW9uCitlbHNlCisgICAgZWNobyAiKiBvcGVuc3NsIG5vdCBmb3VuZCEiCitmaQorCitpZiBbIC1uICIke09QRU5TU0wrc2V0fSIgXTsgdGhlbgorICAgIGVjaG8KKyAgICBpZiBgaGFzaCAiJE9QRU5TU0wiID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgICAgIGVjaG8gIiogJE9QRU5TU0wgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ09QRU5TU0wnOiIKKyAgICAgICAgJE9QRU5TU0wgdmVyc2lvbgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiKiAkT1BFTlNTTCBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnT1BFTlNTTCcgbm90IGZvdW5kISIKKyAgICBmaQorZmkKKworaWYgWyAtbiAiJHtPUEVOU1NMX0xFR0FDWStzZXR9IiBdOyB0aGVuCisgICAgZWNobworICAgIGlmIGBoYXNoICIkT1BFTlNTTF9MRUdBQ1kiID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgICAgIGVjaG8gIiogJE9QRU5TU0xfTEVHQUNZIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdPUEVOU1NMX0xFR0FDWSc6IgorICAgICAgICAkT1BFTlNTTF9MRUdBQ1kgdmVyc2lvbgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiKiAkT1BFTlNTTF9MRUdBQ1kgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ09QRU5TU0xfTEVHQUNZJyBub3QgZm91bmQhIgorICAgIGZpCitmaQorCitlY2hvCitpZiBgaGFzaCBnbnV0bHMtY2xpID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgZWNobyAiKiBnbnVUTFMgY2xpZW50OiIKKyAgICBnbnV0bHMtY2xpIC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorZWxzZQorICAgIGVjaG8gIiogZ251VExTIGNsaWVudCBub3QgZm91bmQhIgorZmkKKworZWNobworaWYgYGhhc2ggZ251dGxzLXNlcnYgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICBlY2hvICIqIGdudVRMUyBzZXJ2ZXI6IgorICAgIGdudXRscy1zZXJ2IC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorZWxzZQorICAgIGVjaG8gIiogZ251VExTIHNlcnZlciBub3QgZm91bmQhIgorZmkKKworaWYgWyAtbiAiJHtHTlVUTFNfQ0xJK3NldH0iIF07IHRoZW4KKyAgICBlY2hvCisgICAgaWYgYGhhc2ggIiRHTlVUTFNfQ0xJIiA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICBlY2hvICIqICRHTlVUTFNfQ0xJIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdHTlVUTFNfQ0xJJzoiCisgICAgICAgICRHTlVUTFNfQ0xJIC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiKiAkR05VVExTX0NMSSBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR05VVExTX0NMSScgbm90IGZvdW5kISIKKyAgICBmaQorZmkKKworaWYgWyAtbiAiJHtHTlVUTFNfU0VSVitzZXR9IiBdOyB0aGVuCisgICAgZWNobworICAgIGlmIGBoYXNoICIkR05VVExTX1NFUlYiID4gL2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgICAgIGVjaG8gIiogJEdOVVRMU19TRVJWIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdHTlVUTFNfU0VSVic6IgorICAgICAgICAkR05VVExTX1NFUlYgLS12ZXJzaW9uIHwgaGVhZCAtbiAxCisgICAgZWxzZQorICAgICAgICBlY2hvICIqICRHTlVUTFNfU0VSViBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR05VVExTX1NFUlYnIG5vdCBmb3VuZCEiCisgICAgZmkKK2ZpCisKK2lmIFsgLW4gIiR7R05VVExTX0xFR0FDWV9DTEkrc2V0fSIgXTsgdGhlbgorICAgIGVjaG8KKyAgICBpZiBgaGFzaCAiJEdOVVRMU19MRUdBQ1lfQ0xJIiA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICBlY2hvICIqICRHTlVUTFNfTEVHQUNZX0NMSSBhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR05VVExTX0xFR0FDWV9DTEknOiIKKyAgICAgICAgJEdOVVRMU19MRUdBQ1lfQ0xJIC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiKiAkR05VVExTX0xFR0FDWV9DTEkgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dOVVRMU19MRUdBQ1lfQ0xJJyBub3QgZm91bmQhIgorICAgIGZpCitmaQorCitpZiBbIC1uICIke0dOVVRMU19MRUdBQ1lfU0VSVitzZXR9IiBdOyB0aGVuCisgICAgZWNobworICAgIGlmIGBoYXNoICIkR05VVExTX0xFR0FDWV9TRVJWIiA+IC9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICBlY2hvICIqICRHTlVUTFNfTEVHQUNZX1NFUlYgYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dOVVRMU19MRUdBQ1lfU0VSVic6IgorICAgICAgICAkR05VVExTX0xFR0FDWV9TRVJWIC0tdmVyc2lvbiB8IGhlYWQgLW4gMQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiKiAkR05VVExTX0xFR0FDWV9TRVJWIGF0IGVudmlyb25tZW50IHZhcmlhYmxlICdHTlVUTFNfTEVHQUNZX1NFUlYnIG5vdCBmb3VuZCEiCisgICAgZmkKK2ZpCisKK2VjaG8KK2lmIGBoYXNoIGRwa2cgPiAvZGV2L251bGwgMj4mMWA7IHRoZW4KKyAgICBlY2hvICIqIGFzYW46IgorICAgIGRwa2cgLXMgbGliYXNhbjIgMj4gL2Rldi9udWxsIHwgZ3JlcCAtaSB2ZXJzaW9uCisgICAgZHBrZyAtcyBsaWJhc2FuMSAyPiAvZGV2L251bGwgfCBncmVwIC1pIHZlcnNpb24KKyAgICBkcGtnIC1zIGxpYmFzYW4wIDI+IC9kZXYvbnVsbCB8IGdyZXAgLWkgdmVyc2lvbgorZWxzZQorICAgIGVjaG8gIiogTm8gZHBrZyBwcmVzZW50OiBjYW4ndCBkZXRlcm1pbmUgYXNhbiB2ZXJzaW9uISIKK2ZpCisKK2VjaG8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvcmVuYW1lLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvcmVuYW1lLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyOTUxOWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy9yZW5hbWUucGwKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIFRoaXMgc2NyaXB0IG1pZ3JhdGVzIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGZyb20gdGhlIG1iZWQgVExTIDEuMyBBUEkgdG8gdGhlCisjIG1iZWQgVExTIDIuMCBBUEkuCisjCisjIFRoZSBzY3JpcHQgcHJvY2Vzc2VzIHRoZSBnaXZlbiBzb3VyY2UgY29kZSBhbmQgcmVuYW1lcyBpZGVudGlmaWVycyAtIGZ1bmN0aW9ucworIyB0eXBlcywgZW51bXMgZXRjLCBhcworIworIyBVc2FnZTogIHJlbmFtZS5wbCBbLWYgZGF0YWZpbGVdIFstc10gWy0tXSBbZmlsZW5hbWVzLi4uXQorIworCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCit1c2UgdXRmODsKK3VzZSBQYXRoOjpDbGFzczsKK3VzZSBvcGVuIHF3KDpzdGQgdXRmOCk7CisKK215ICR1c2FnZSA9ICJVc2FnZTogJDAgWy1mIGRhdGFmaWxlXSBbLXNdIFstLV0gW2ZpbGVuYW1lcy4uLl1cbiI7CisKKyhteSAkZGF0YWZpbGUgPSAkMCkgPX4gcy9yZW5hbWUucGwkL2RhdGFfZmlsZXNcL3JlbmFtZS0xLjMtMi4wLnR4dC87CitteSAkZG9fc3RyaW5ncyA9IDA7CisKK3doaWxlKCBAQVJHViAmJiAkQVJHVlswXSA9fiAvXi0vICkgeworICAgIG15ICRvcHQgPSBzaGlmdDsKKyAgICBpZiggJG9wdCBlcSAnLS0nICkgeworICAgICAgICBsYXN0OworICAgIH0gZWxzaWYoICRvcHQgZXEgJy1mJyApIHsKKyAgICAgICAgJGRhdGFmaWxlID0gc2hpZnQ7CisgICAgfSBlbHNpZiggJG9wdCBlcSAnLXMnICkgeworICAgICAgICAkZG9fc3RyaW5ncyA9IDE7IHNoaWZ0OworICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSAkdXNhZ2U7CisgICAgfQorfQorCitteSAlc3Vic3Q7CitvcGVuIG15ICRuZmgsICc8JywgJGRhdGFmaWxlIG9yIGRpZSAiQ291bGQgbm90IHJlYWQgJGRhdGFmaWxlXG4iOworbXkgJGlkZW50ID0gcXIvW19BLVphLXpdW19BLVphLXowLTldKi87Cit3aGlsZSggbXkgJGxpbmUgPSA8JG5maD4gKSB7CisgICAgY2hvbXAgJGxpbmU7CisgICAgbXkgKCAkb2xkLCAkbmV3ICkgPSAoICRsaW5lID1+IC9eKCRpZGVudClccysoJGlkZW50KSQvICk7CisgICAgaWYoICEgJG9sZCB8fCAhICRuZXcgKSB7CisgICAgICAgIGRpZSAiJDA6ICRkYXRhZmlsZTokLjogYmFkIGlucHV0ICckbGluZSdcbiI7CisgICAgfQorICAgICRzdWJzdHskb2xkfSA9ICRuZXc7Cit9CitjbG9zZSAkbmZoIG9yIGRpZTsKKworbXkgJHN0cmluZyA9IHFyLyIoPzpcXC58W15cXCJdKSoiLzsKK215ICRzcGFjZSA9IHFyL1xzKy87CitteSAkaWRudW0gPSBxci9bYS16QS1aMC05X10rLzsKK215ICRzeW1ib2xzID0gcXIvWy0hI1wkJSYnKCkqKywuXC86Ozw9Pj9AW1xcXF1eX2B7fH1+XSt8Ii87CisKK215ICRsaWJfaW5jbHVkZV9kaXIgPSBkaXIoJDApLT5wYXJlbnQtPnBhcmVudC0+c3ViZGlyKCdpbmNsdWRlJywgJ21iZWR0bHMnKTsKK215ICRsaWJfc291cmNlX2RpciA9IGRpcigkMCktPnBhcmVudC0+cGFyZW50LT5zdWJkaXIoJ2xpYnJhcnknKTsKKworIyBpZiB3ZSByZXBsYWNlIGluc2lkZSBzdHJpbmdzLCB3ZSBkb24ndCBjb25zaWRlciB0aGVtIGEgdG9rZW4KK215ICR0b2tlbiA9ICRkb19zdHJpbmdzID8gICAgICAgICBxci8kc3BhY2V8JGlkbnVtfCRzeW1ib2xzLworICAgICAgICAgICAgICAgICAgICAgICAgOiBxci8kc3RyaW5nfCRzcGFjZXwkaWRudW18JHN5bWJvbHMvOworCitteSAld2FybmluZ3M7CisKKyMgSWYgbm8gZmlsZXMgd2VyZSBwYXNzZWQsIGV4aXQuLi4KK2lmICggbm90IGRlZmluZWQoJEFSR1ZbMF0pICl7IGRpZSAkdXNhZ2U7IH0KKword2hpbGUoIG15ICRmaWxlbmFtZSA9IHNoaWZ0ICkKK3sKKyAgICBwcmludCBTVERFUlIgIiRmaWxlbmFtZS4uLiAiOworCisgICAgaWYoIGRpcigkZmlsZW5hbWUpLT5wYXJlbnQgZXEgJGxpYl9pbmNsdWRlX2RpciB8fAorICAgICAgICAgZGlyKCRmaWxlbmFtZSktPnBhcmVudCBlcSAkbGliX3NvdXJjZV9kaXIgKQorICAgIHsKKyAgICAgICAgZGllICJTY3JpcHQgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRoZSBtYmVkIFRMUyBsaWJyYXJ5IGl0c2VsZi4iOworICAgIH0KKworICAgIGlmKCAtZCAkZmlsZW5hbWUgKSB7IHByaW50IFNUREVSUiAic2tpcCAoZGlyZWN0b3J5KVxuIjsgbmV4dCB9CisKKyAgICBvcGVuIG15ICRyZmgsICc8JywgJGZpbGVuYW1lIG9yIGRpZTsKKyAgICBteSBAbGluZXMgPSA8JHJmaD47CisgICAgY2xvc2UgJHJmaCBvciBkaWU7CisKKyAgICBteSBAb3V0OworICAgIGZvciBteSAkbGluZSAoQGxpbmVzKSB7CisgICAgICAgIGlmKCAkbGluZSA9fiAvI2luY2x1ZGUvICkgeworICAgICAgICAgICAgJGxpbmUgPX4gcy9wb2xhcnNzbC9tYmVkdGxzLzsKKyAgICAgICAgICAgICRsaW5lID1+IHMvUE9MQVJTU0wvTUJFRFRMUy87CisgICAgICAgICAgICBwdXNoKCBAb3V0LCAkbGluZSApOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIG15IEB3b3JkcyA9ICgkbGluZSA9fiAvJHRva2VuL2cpOworICAgICAgICBteSAkY2hlY2tsaW5lID0gam9pbiAnJywgQHdvcmRzOworICAgICAgICBpZiggJGNoZWNrbGluZSBlcSAkbGluZSApIHsKKyAgICAgICAgICAgIG15IEBuZXcgPSBtYXAgeyBleGlzdHMgJHN1YnN0eyRffSA/ICRzdWJzdHskX30gOiAkXyB9IEB3b3JkczsKKyAgICAgICAgICAgIHB1c2goIEBvdXQsIGpvaW4gJycsIEBuZXcgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICR3YXJuaW5nc3skZmlsZW5hbWV9ID0gW10gdW5sZXNzICR3YXJuaW5nc3skZmlsZW5hbWV9OworICAgICAgICAgICAgcHVzaCBAeyAkd2FybmluZ3N7JGZpbGVuYW1lfSB9LCAkbGluZTsKKyAgICAgICAgICAgIHB1c2goIEBvdXQsICRsaW5lICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvcGVuIG15ICR3ZmgsICc+JywgJGZpbGVuYW1lIG9yIGRpZTsKKyAgICBwcmludCAkd2ZoICRfIGZvciBAb3V0OworICAgIGNsb3NlICR3Zmggb3IgZGllOworICAgIHByaW50IFNUREVSUiAiZG9uZVxuIjsKK30KKworaWYoICV3YXJuaW5ncyApIHsKKyAgICBwcmludCAiXG5XYXJuaW5nOiBsaW5lcyBza2lwcGVkIGR1ZSB0byB1bmV4cGVjdGVkIGNoYXJhY3RlcnM6XG4iOworICAgIGZvciBteSAkZmlsZW5hbWUgKHNvcnQga2V5cyAld2FybmluZ3MpIHsKKyAgICAgICAgcHJpbnQgImluICRmaWxlbmFtZTpcbiI7CisgICAgICAgIHByaW50IGZvciBAeyAkd2FybmluZ3N7JGZpbGVuYW1lfSB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL3JtLW1hbGxvYy1jYXN0LmNvY2NpIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3NjcmlwdHMvcm0tbWFsbG9jLWNhc3QuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzN2RjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL3JtLW1hbGxvYy1jYXN0LmNvY2NpCkBAIC0wLDAgKzEsNyBAQAorQHJtX21hbGxvY19jYXN0QAorZXhwcmVzc2lvbiB4LCBuOwordHlwZSBUOworQEAKKyAgeCA9CistIChUICopCisgIG1iZWR0bHNfbWFsbG9jKG4pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy90bXBfaWdub3JlX21ha2VmaWxlcy5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby9zY3JpcHRzL3RtcF9pZ25vcmVfbWFrZWZpbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOTQ1MGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vc2NyaXB0cy90bXBfaWdub3JlX21ha2VmaWxlcy5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vYmFzaAorCisjIFRlbXBvcmFyaWx5IChkZSlpZ25vcmUgTWFrZWZpbGVzIGdlbmVyYXRlZCBieSBDTWFrZSB0byBhbGxvdyBlYXNpZXIKKyMgZ2l0IGRldmVsb3BtZW50CisKK0lHTk9SRT0iIgorCisjIFBhcnNlIGFyZ3VtZW50cworIwordW50aWwgWyAteiAiJDEiIF0KK2RvCisgIGNhc2UgIiQxIiBpbgorICAgIC11fC0tdW5kbykKKyAgICAgIElHTk9SRT0iMCIKKyAgICAgIDs7CisgICAgLXZ8LS12ZXJib3NlKQorICAgICAgIyBCZSB2ZXJib3NlCisgICAgICBWRVJCT1NFPSIxIgorICAgICAgOzsKKyAgICAtaHwtLWhlbHApCisgICAgICAjIHByaW50IGhlbHAKKyAgICAgIGVjaG8gIlVzYWdlOiAkMCIKKyAgICAgIGVjaG8gLWUgIiAgLWh8LS1oZWxwXHRcdFByaW50IHRoaXMgaGVscC4iCisgICAgICBlY2hvIC1lICIgIC11fC0tdW5kb1x0XHRSZW1vdmUgaWdub3JlcyBhbmQgY29udGludWUgdHJhY2tpbmcuIgorICAgICAgZWNobyAtZSAiICAtdnwtLXZlcmJvc2VcdFx0VmVyYm9zZS4iCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgcHJpbnQgZXJyb3IKKyAgICAgIGVjaG8gIlVua25vd24gYXJndW1lbnQ6ICckMSciCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgWyAiWCIgPSAiWCRJR05PUkUiIF07Cit0aGVuCisgIFsgJFZFUkJPU0UgXSAmJiBlY2hvICJJZ25vcmluZyBNYWtlZmlsZXMiCisgIGdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIE1ha2VmaWxlIGxpYnJhcnkvTWFrZWZpbGUgcHJvZ3JhbXMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUKK2Vsc2UKKyAgWyAkVkVSQk9TRSBdICYmIGVjaG8gIlRyYWNraW5nIE1ha2VmaWxlcyIKKyAgZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgTWFrZWZpbGUgbGlicmFyeS9NYWtlZmlsZSBwcm9ncmFtcy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZQorZmkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTU4M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTI4IEBACitzZXQobGlicworICAgIG1iZWR0bHMKKykKKworaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKKyAgICBzZXQobGlicyAke2xpYnN9IHBrY3MxMS1oZWxwZXIpCitlbmRpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQorCitpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorICAgIHNldChsaWJzICR7bGlic30gJHtaTElCX0xJQlJBUklFU30pCitlbmRpZihFTkFCTEVfWkxJQl9TVVBQT1JUKQorCitmaW5kX3BhY2thZ2UoUGVybCkKK2lmKE5PVCBQRVJMX0ZPVU5EKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNhbm5vdCBidWlsZCB0ZXN0IHN1aXRlcyB3aXRob3V0IFBlcmwiKQorZW5kaWYoKQorCitmdW5jdGlvbihhZGRfdGVzdF9zdWl0ZSBzdWl0ZV9uYW1lKQorICAgIGlmKEFSR1YxKQorICAgICAgICBzZXQoZGF0YV9uYW1lICR7QVJHVjF9KQorICAgIGVsc2UoKQorICAgICAgICBzZXQoZGF0YV9uYW1lICR7c3VpdGVfbmFtZX0pCisgICAgZW5kaWYoKQorCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICBPVVRQVVQgdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uYworICAgICAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMgdGVzdF9zdWl0ZV8ke3N1aXRlX25hbWV9IHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9CisgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBtYmVkdGxzIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfJHtzdWl0ZV9uYW1lfS5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uZGF0YQorICAgICkKKworICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQorICAgIGFkZF9leGVjdXRhYmxlKHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9IHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9LmMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9ICR7bGlic30pCisgICAgYWRkX3Rlc3QoJHtkYXRhX25hbWV9LXN1aXRlIHRlc3Rfc3VpdGVfJHtkYXRhX25hbWV9KQorZW5kZnVuY3Rpb24oYWRkX3Rlc3Rfc3VpdGUpCisKK2lmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIE9SIENNQUtFX0NPTVBJTEVSX0lTX0NMQU5HKQorICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1Xbm8tdW51c2VkLWZ1bmN0aW9uIikKK2VuZGlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIE9SIENNQUtFX0NPTVBJTEVSX0lTX0NMQU5HKQorCitpZihNU1ZDKQorICAgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC93IikgIyBubyB3YXJuaW5ncyBoZXJlCitlbmRpZihNU1ZDKQorCithZGRfdGVzdF9zdWl0ZShhZXMgYWVzLmVjYikKK2FkZF90ZXN0X3N1aXRlKGFlcyBhZXMuY2JjKQorYWRkX3Rlc3Rfc3VpdGUoYWVzIGFlcy5jZmIpCithZGRfdGVzdF9zdWl0ZShhZXMgYWVzLnJlc3QpCithZGRfdGVzdF9zdWl0ZShhcmM0KQorYWRkX3Rlc3Rfc3VpdGUoYXNuMXdyaXRlKQorYWRkX3Rlc3Rfc3VpdGUoYmFzZTY0KQorYWRkX3Rlc3Rfc3VpdGUoYmxvd2Zpc2gpCithZGRfdGVzdF9zdWl0ZShjYW1lbGxpYSkKK2FkZF90ZXN0X3N1aXRlKGNjbSkKK2FkZF90ZXN0X3N1aXRlKGNpcGhlciBjaXBoZXIuYWVzKQorYWRkX3Rlc3Rfc3VpdGUoY2lwaGVyIGNpcGhlci5hcmM0KQorYWRkX3Rlc3Rfc3VpdGUoY2lwaGVyIGNpcGhlci5ibG93ZmlzaCkKK2FkZF90ZXN0X3N1aXRlKGNpcGhlciBjaXBoZXIuY2FtZWxsaWEpCithZGRfdGVzdF9zdWl0ZShjaXBoZXIgY2lwaGVyLmNjbSkKK2FkZF90ZXN0X3N1aXRlKGNpcGhlciBjaXBoZXIuZGVzKQorYWRkX3Rlc3Rfc3VpdGUoY2lwaGVyIGNpcGhlci5nY20pCithZGRfdGVzdF9zdWl0ZShjaXBoZXIgY2lwaGVyLm51bGwpCithZGRfdGVzdF9zdWl0ZShjaXBoZXIgY2lwaGVyLnBhZGRpbmcpCithZGRfdGVzdF9zdWl0ZShjbWFjKQorYWRkX3Rlc3Rfc3VpdGUoY3RyX2RyYmcpCithZGRfdGVzdF9zdWl0ZShkZWJ1ZykKK2FkZF90ZXN0X3N1aXRlKGRlcykKK2FkZF90ZXN0X3N1aXRlKGRobSkKK2FkZF90ZXN0X3N1aXRlKGVjZGgpCithZGRfdGVzdF9zdWl0ZShlY2RzYSkKK2FkZF90ZXN0X3N1aXRlKGVjanBha2UpCithZGRfdGVzdF9zdWl0ZShlY3ApCithZGRfdGVzdF9zdWl0ZShlbnRyb3B5KQorYWRkX3Rlc3Rfc3VpdGUoZXJyb3IpCithZGRfdGVzdF9zdWl0ZShnY20gZ2NtLmFlczEyOF9lbikKK2FkZF90ZXN0X3N1aXRlKGdjbSBnY20uYWVzMTkyX2VuKQorYWRkX3Rlc3Rfc3VpdGUoZ2NtIGdjbS5hZXMyNTZfZW4pCithZGRfdGVzdF9zdWl0ZShnY20gZ2NtLmFlczEyOF9kZSkKK2FkZF90ZXN0X3N1aXRlKGdjbSBnY20uYWVzMTkyX2RlKQorYWRkX3Rlc3Rfc3VpdGUoZ2NtIGdjbS5hZXMyNTZfZGUpCithZGRfdGVzdF9zdWl0ZShnY20gZ2NtLmNhbWVsbGlhKQorYWRkX3Rlc3Rfc3VpdGUoaG1hY19kcmJnIGhtYWNfZHJiZy5taXNjKQorYWRkX3Rlc3Rfc3VpdGUoaG1hY19kcmJnIGhtYWNfZHJiZy5ub19yZXNlZWQpCithZGRfdGVzdF9zdWl0ZShobWFjX2RyYmcgaG1hY19kcmJnLm5vcHIpCithZGRfdGVzdF9zdWl0ZShobWFjX2RyYmcgaG1hY19kcmJnLnByKQorYWRkX3Rlc3Rfc3VpdGUobWQpCithZGRfdGVzdF9zdWl0ZShtZHgpCithZGRfdGVzdF9zdWl0ZShtZW1vcnlfYnVmZmVyX2FsbG9jKQorYWRkX3Rlc3Rfc3VpdGUobXBpKQorYWRkX3Rlc3Rfc3VpdGUocGVtKQorYWRkX3Rlc3Rfc3VpdGUocGtjczFfdjE1KQorYWRkX3Rlc3Rfc3VpdGUocGtjczFfdjIxKQorYWRkX3Rlc3Rfc3VpdGUocGtjczUpCithZGRfdGVzdF9zdWl0ZShwaykKK2FkZF90ZXN0X3N1aXRlKHBrcGFyc2UpCithZGRfdGVzdF9zdWl0ZShwa3dyaXRlKQorYWRkX3Rlc3Rfc3VpdGUoc2hheCkKK2FkZF90ZXN0X3N1aXRlKHNzbCkKK2FkZF90ZXN0X3N1aXRlKHRpbWluZykKK2FkZF90ZXN0X3N1aXRlKHJzYSkKK2FkZF90ZXN0X3N1aXRlKHZlcnNpb24pCithZGRfdGVzdF9zdWl0ZSh4dGVhKQorYWRkX3Rlc3Rfc3VpdGUoeDUwOXBhcnNlKQorYWRkX3Rlc3Rfc3VpdGUoeDUwOXdyaXRlKQorCisjIE1ha2UgZGF0YV9maWxlcyBhdmFpbGFibGUgaW4gYW4gb3V0LW9mLXNvdXJjZSBidWlsZAoraWYgKE5PVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0gU1RSRVFVQUwgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQorICAgICMgR2V0IE9TIGRlcGVuZGVudCBwYXRoIHRvIHVzZSBpbiBgZXhlY3V0ZV9wcm9jZXNzYAorICAgIGZpbGUoVE9fTkFUSVZFX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9kYXRhX2ZpbGVzIiBsaW5rKQorICAgIGZpbGUoVE9fTkFUSVZFX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kYXRhX2ZpbGVzIiB0YXJnZXQpCisKKyAgICBpZiAoTk9UIEVYSVNUUyAke2xpbmt9KQorICAgICAgICBpZiAoQ01BS0VfSE9TVF9VTklYKQorICAgICAgICAgICAgc2V0KGNvbW1hbmQgbG4gLXMgJHt0YXJnZXR9ICR7bGlua30pCisgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgc2V0KGNvbW1hbmQgY21kLmV4ZSAvYyBta2xpbmsgL2QgJHtsaW5rfSAke3RhcmdldH0pCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke2NvbW1hbmR9CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9WQVJJQUJMRSBvdXRwdXQpCisKKyAgICAgICAgaWYgKE5PVCAke3Jlc3VsdH0gRVFVQUwgMCkKKyAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBjcmVhdGUgc3ltYm9saWMgbGluayBmb3I6ICR7dGFyZ2V0fSAtLT4gJHtvdXRwdXR9IikKKyAgICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKK2VuZGlmKCkKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL0Rlc2NyaXB0aW9ucy50eHQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvRGVzY3JpcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzYmIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL0Rlc2NyaXB0aW9ucy50eHQKQEAgLTAsMCArMSwyMiBAQAordGVzdF9zdWl0ZXMKKyAgICBUaGUgdmFyaW91cyAndGVzdF9zdWl0ZV9YWFgnIHByb2dyYW1zIGZyb20gdGhlICd0ZXN0cycgZGlyZWN0b3J5LCBleGVjdXRlZAorICAgIHVzaW5nICdtYWtlIGNoZWNrJyAoVW5peCBtYWtlKSBvciAnbWFrZSB0ZXN0JyAoQ21ha2UpLCBpbmNsdWRlIHRlc3QgY2FzZXMKKyAgICAocmVmZXJlbmNlIHRlc3QgdmVjdG9ycywgc2FuaXR5IGNoZWNrcywgbWFsZm9ybWVkIGlucHV0IGZvciBwYXJzaW5nCisgICAgZnVuY3Rpb25zLCBldGMuKSBmb3IgYWxsIG1vZHVsZXMgZXhjZXB0IHRoZSBTU0wgbW9kdWxlcy4KKworc2VsZnRlc3RzCisgICAgVGhlICdwcm9ncmFtcy90ZXN0L3NlbGZ0ZXN0JyBwcm9ncmFtIHJ1bnMgdGhlICdYWFhfc2VsZl90ZXN0KCknIGZ1bmN0aW9ucworICAgIG9mIGVhY2ggaW5kaXZpZHVhbCBtb2R1bGUuIE1vc3Qgb2YgdGhlbSBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3BlY3RpdmUKKyAgICB0ZXN0IHN1aXRlLCBidXQgc29tZSBzbG93ZXIgb25lcyBhcmUgb25seSBpbmNsdWRlZCBoZXJlLgorCitjb21wYXQKKyAgICBUaGUgJ3Rlc3RzL2NvbXBhdC5zaCcgc2NyaXB0IGNoZWNrcyBpbnRlcm9wZXJhYmlsaXR5IHdpdGggT3BlblNTTCBhbmQKKyAgICBHbnVUTFMgKGFuZCBvdXJzZWx2ZXMhKSBmb3IgZXZlcnkgY29tbW9uIGNpcGhlcnN1aXRlLCBpbiBldmVyeSBUTFMKKyAgICB2ZXJzaW9uLCBib3RoIHdheXMgKGNsaWVudC9zZXJ2ZXIpLCB1c2luZyBjbGllbnQgYXV0aGVudGljYXRpb24gb3Igbm90LgorICAgIEZvciBlYWNoIGNpcGhlcnN1aXRlL3ZlcnNpb24vc2lkZS9hdXRobW9kZSBpdCBwZXJmb3JtcyBhIGZ1bGwgaGFuZHNoYWtlCisgICAgYW5kIGEgc21hbGwgZGF0YSBleGNoYW5nZS4KKworc3NsX29wdAorICAgIFRoZSAndGVzdHMvc3NsLW9wdC5zaCcgc2NyaXB0IGNoZWNrcyB2YXJpb3VzIG9wdGlvbnMgYW5kL29yIG9wZXJhdGlvbnMgbm90CisgICAgY292ZXJlZCBieSBjb21wYXQuc2g6IHNlc3Npb24gcmVzdW1wdGlvbiAodXNpbmcgc2Vzc2lvbiBjYWNoZSBvciB0aWNrZXRzKSwKKyAgICByZW5lZ290aWF0aW9uLCBTTkksIG90aGVyIGV4dGVuc2lvbnMsIGV0Yy4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9NYWtlZmlsZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg3ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDUwIEBACisKKyMgVG8gY29tcGlsZSBvbiBTdW5PUzogYWRkICItbHNvY2tldCAtbG5zbCIgdG8gTERGTEFHUworIyBUbyBjb21waWxlIHdpdGggUEtDUzExOiBhZGQgIi1scGtjczExLWhlbHBlciIgdG8gTERGTEFHUworCitDRkxBR1MJPz0gLU8yCitXQVJOSU5HX0NGTEFHUyA/PSAtV2FsbCAtVyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV25vLXVudXNlZC1mdW5jdGlvbiAtV25vLXVudXNlZC12YWx1ZQorTERGTEFHUyA/PQorCitMT0NBTF9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKSAtSS4uL2luY2x1ZGUgLURfRklMRV9PRkZTRVRfQklUUz02NAorTE9DQUxfTERGTEFHUyA9IC1MLi4vbGlicmFyeSAJCQlcCisJCS1sbWJlZHRscyQoU0hBUkVEX1NVRkZJWCkJXAorCQktbG1iZWR4NTA5JChTSEFSRURfU1VGRklYKQlcCisJCS1sbWJlZGNyeXB0byQoU0hBUkVEX1NVRkZJWCkKKworaWZuZGVmIFNIQVJFRAorREVQPS4uL2xpYnJhcnkvbGlibWJlZGNyeXB0by5hIC4uL2xpYnJhcnkvbGlibWJlZHg1MDkuYSAuLi9saWJyYXJ5L2xpYm1iZWR0bHMuYQorZWxzZQorREVQPS4uL2xpYnJhcnkvbGlibWJlZGNyeXB0by4kKERMRVhUKSAuLi9saWJyYXJ5L2xpYm1iZWR4NTA5LiQoRExFWFQpIC4uL2xpYnJhcnkvbGlibWJlZHRscy4kKERMRVhUKQorZW5kaWYKKworaWZkZWYgREVCVUcKK0xPQ0FMX0NGTEFHUyArPSAtZzMKK2VuZGlmCisKKyMgaWYgd2UncmUgcnVubmluZyBvbiBXaW5kb3dzLCBidWlsZCBmb3IgV2luZG93cworaWZkZWYgV0lORE9XUworV0lORE9XU19CVUlMRD0xCitlbmRpZgorCitpZmRlZiBXSU5ET1dTX0JVSUxECitETEVYVD1kbGwKK0VYRVhUPS5leGUKK0xPQ0FMX0xERkxBR1MgKz0gLWx3czJfMzIKK2lmZGVmIFNIQVJFRAorU0hBUkVEX1NVRkZJWD0uJChETEVYVCkKK2VuZGlmCitlbHNlCitETEVYVD1zbworRVhFWFQ9CitTSEFSRURfU1VGRklYPQorZW5kaWYKKworIyBabGliIHNoYXJlZCBsaWJyYXJ5IGV4dGVuc2lvbnM6CitpZmRlZiBaTElCCitMT0NBTF9MREZMQUdTICs9IC1segorZW5kaWYKKworQVBQUyA9CXRlc3Rfc3VpdGVfYWVzLmVjYiQoRVhFWFQpCXRlc3Rfc3VpdGVfYWVzLmNiYyQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX2Flcy5jZmIkKEVYRVhUKQl0ZXN0X3N1aXRlX2Flcy5yZXN0JChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfYXJjNCQoRVhFWFQpCQl0ZXN0X3N1aXRlX2FzbjF3cml0ZSQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX2Jhc2U2NCQoRVhFWFQpCXRlc3Rfc3VpdGVfYmxvd2Zpc2gkKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9jYW1lbGxpYSQoRVhFWFQpCXRlc3Rfc3VpdGVfY2NtJChFWEVYVCkJCVwKKwl0ZXN0X3N1aXRlX2NtYWMkKEVYRVhUKQkJCQkJCVwKKwl0ZXN0X3N1aXRlX2NpcGhlci5hZXMkKEVYRVhUKQkJCQkJXAorCXRlc3Rfc3VpdGVfY2lwaGVyLmFyYzQkKEVYRVhUKQl0ZXN0X3N1aXRlX2NpcGhlci5jY20kKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9jaXBoZXIuZ2NtJChFWEVYVCkJCQkJCVwKKwl0ZXN0X3N1aXRlX2NpcGhlci5ibG93ZmlzaCQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2NpcGhlci5jYW1lbGxpYSQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2NpcGhlci5kZXMkKEVYRVhUKQl0ZXN0X3N1aXRlX2NpcGhlci5udWxsJChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmckKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9jdHJfZHJiZyQoRVhFWFQpCXRlc3Rfc3VpdGVfZGVidWckKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9kZXMkKEVYRVhUKQkJdGVzdF9zdWl0ZV9kaG0kKEVYRVhUKQkJXAorCXRlc3Rfc3VpdGVfZWNkaCQoRVhFWFQpCQl0ZXN0X3N1aXRlX2VjZHNhJChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfZWNqcGFrZSQoRVhFWFQpCXRlc3Rfc3VpdGVfZWNwJChFWEVYVCkJCVwKKwl0ZXN0X3N1aXRlX2Vycm9yJChFWEVYVCkJdGVzdF9zdWl0ZV9lbnRyb3B5JChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZSQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUkKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfZ2NtLmFlczEyOF9lbiQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZW4kKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfZ2NtLmNhbWVsbGlhJChFWEVYVCkJCQkJCVwKKwl0ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZCQoRVhFWFQpCQkJCVwKKwl0ZXN0X3N1aXRlX2htYWNfZHJiZy5ub3ByJChFWEVYVCkJCQkJXAorCXRlc3Rfc3VpdGVfaG1hY19kcmJnLnByJChFWEVYVCkJCQkJCVwKKwl0ZXN0X3N1aXRlX21kJChFWEVYVCkJCXRlc3Rfc3VpdGVfbWR4JChFWEVYVCkJCVwKKwl0ZXN0X3N1aXRlX21lbW9yeV9idWZmZXJfYWxsb2MkKEVYRVhUKQkJCQlcCisJdGVzdF9zdWl0ZV9tcGkkKEVYRVhUKQkJCQkJCVwKKwl0ZXN0X3N1aXRlX3BlbSQoRVhFWFQpCQkJdGVzdF9zdWl0ZV9wa2NzMV92MTUkKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV9wa2NzMV92MjEkKEVYRVhUKQl0ZXN0X3N1aXRlX3BrY3M1JChFWEVYVCkJXAorCXRlc3Rfc3VpdGVfcGtwYXJzZSQoRVhFWFQpCXRlc3Rfc3VpdGVfcGt3cml0ZSQoRVhFWFQpCVwKKwl0ZXN0X3N1aXRlX3BrJChFWEVYVCkJCQkJCQlcCisJdGVzdF9zdWl0ZV9yc2EkKEVYRVhUKQkJdGVzdF9zdWl0ZV9zaGF4JChFWEVYVCkJCVwKKwl0ZXN0X3N1aXRlX3NzbCQoRVhFWFQpCQl0ZXN0X3N1aXRlX3RpbWluZyQoRVhFWFQpCQkJXAorCXRlc3Rfc3VpdGVfeDUwOXBhcnNlJChFWEVYVCkJdGVzdF9zdWl0ZV94NTA5d3JpdGUkKEVYRVhUKQlcCisJdGVzdF9zdWl0ZV94dGVhJChFWEVYVCkJCXRlc3Rfc3VpdGVfdmVyc2lvbiQoRVhFWFQpCisKKy5TSUxFTlQ6CisKKy5QSE9OWTogYWxsIGNoZWNrIHRlc3QgY2xlYW4KKworYWxsOiAkKEFQUFMpCisKKyQoREVQKToKKwkkKE1BS0UpIC1DIC4uL2xpYnJhcnkKKworIyBpbnZva2UgcGVybCBleHBsaWNpdGx5IGZvciB0aGUgc2FrZSBvZiBtaW5ndzMyLW1ha2UKKwordGVzdF9zdWl0ZV9hZXMuZWNiLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmVjYi5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9hZXMgdGVzdF9zdWl0ZV9hZXMuZWNiCisKK3Rlc3Rfc3VpdGVfYWVzLmNiYy5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2Flcy5jYmMuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfYWVzIHRlc3Rfc3VpdGVfYWVzLmNiYworCit0ZXN0X3N1aXRlX2Flcy5jZmIuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2Flcy5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuY2ZiLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2FlcyB0ZXN0X3N1aXRlX2Flcy5jZmIKKwordGVzdF9zdWl0ZV9hZXMucmVzdC5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2Flcy5yZXN0LmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2FlcyB0ZXN0X3N1aXRlX2Flcy5yZXN0CisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmFlcy5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hZXMuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmFlcworCit0ZXN0X3N1aXRlX2NpcGhlci5hcmM0LmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmFyYzQuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmFyYzQKKwordGVzdF9zdWl0ZV9jaXBoZXIuY2NtLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNjbS5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9jaXBoZXIgdGVzdF9zdWl0ZV9jaXBoZXIuY2NtCisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmdjbS5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5nY20uZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmdjbQorCit0ZXN0X3N1aXRlX2NpcGhlci5ibG93ZmlzaC5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5ibG93ZmlzaC5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9jaXBoZXIgdGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2gKKwordGVzdF9zdWl0ZV9jaXBoZXIuY2FtZWxsaWEuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuY2FtZWxsaWEuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhCisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmRlcy5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5kZXMuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLmRlcworCit0ZXN0X3N1aXRlX2NpcGhlci5udWxsLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLm51bGwuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfY2lwaGVyIHRlc3Rfc3VpdGVfY2lwaGVyLm51bGwKKwordGVzdF9zdWl0ZV9jaXBoZXIucGFkZGluZy5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5wYWRkaW5nLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2NpcGhlciB0ZXN0X3N1aXRlX2NpcGhlci5wYWRkaW5nCisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZS5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxMjhfZGUuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfZ2NtIHRlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZQorCit0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2djbSB0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUKKwordGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZS5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9nY20gdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlCisKK3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9lbi5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4uZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfZ2NtIHRlc3Rfc3VpdGVfZ2NtLmFlczEyOF9lbgorCit0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZW4uYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2djbSB0ZXN0X3N1aXRlX2djbS5hZXMxOTJfZW4KKwordGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbi5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9nY20gdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuCisKK3Rlc3Rfc3VpdGVfZ2NtLmNhbWVsbGlhLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmNhbWVsbGlhLmRhdGEgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uIHN1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKwllY2hvICIgIEdlbiAgICRAIgorCXBlcmwgc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsIHN1aXRlcyB0ZXN0X3N1aXRlX2djbSB0ZXN0X3N1aXRlX2djbS5jYW1lbGxpYQorCit0ZXN0X3N1aXRlX2htYWNfZHJiZy5taXNjLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzIHRlc3Rfc3VpdGVfaG1hY19kcmJnIHRlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MKKwordGVzdF9zdWl0ZV9obWFjX2RyYmcubm9fcmVzZWVkLmMgOiBzdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcuZnVuY3Rpb24gc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZC5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9obWFjX2RyYmcgdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9fcmVzZWVkCisKK3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vcHIuYyA6IHN1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5mdW5jdGlvbiBzdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wci5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9obWFjX2RyYmcgdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wcgorCit0ZXN0X3N1aXRlX2htYWNfZHJiZy5wci5jIDogc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLmZ1bmN0aW9uIHN1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5wci5kYXRhIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMvaGVscGVycy5mdW5jdGlvbiBzdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCisJZWNobyAiICBHZW4gICAkQCIKKwlwZXJsIHNjcmlwdHMvZ2VuZXJhdGVfY29kZS5wbCBzdWl0ZXMgdGVzdF9zdWl0ZV9obWFjX2RyYmcgdGVzdF9zdWl0ZV9obWFjX2RyYmcucHIKKworJS5jIDogc3VpdGVzLyUuZnVuY3Rpb24gc3VpdGVzLyUuZGF0YSBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgorCWVjaG8gIiAgR2VuICAgJEAiCisJcGVybCBzY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgc3VpdGVzICQqICQqCisKK3Rlc3Rfc3VpdGVfYWVzLmVjYiQoRVhFWFQpOiB0ZXN0X3N1aXRlX2Flcy5lY2IuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfYWVzLmNiYyQoRVhFWFQpOiB0ZXN0X3N1aXRlX2Flcy5jYmMuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfYWVzLmNmYiQoRVhFWFQpOiB0ZXN0X3N1aXRlX2Flcy5jZmIuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfYWVzLnJlc3QkKEVYRVhUKTogdGVzdF9zdWl0ZV9hZXMucmVzdC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9hcmM0JChFWEVYVCk6IHRlc3Rfc3VpdGVfYXJjNC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9hc24xd3JpdGUkKEVYRVhUKTogdGVzdF9zdWl0ZV9hc24xd3JpdGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfYmFzZTY0JChFWEVYVCk6IHRlc3Rfc3VpdGVfYmFzZTY0LmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2Jsb3dmaXNoJChFWEVYVCk6IHRlc3Rfc3VpdGVfYmxvd2Zpc2guYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2FtZWxsaWEkKEVYRVhUKTogdGVzdF9zdWl0ZV9jYW1lbGxpYS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jY20kKEVYRVhUKTogdGVzdF9zdWl0ZV9jY20uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY21hYyQoRVhFWFQpOiB0ZXN0X3N1aXRlX2NtYWMuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmFlcyQoRVhFWFQpOiB0ZXN0X3N1aXRlX2NpcGhlci5hZXMuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmFyYzQkKEVYRVhUKTogdGVzdF9zdWl0ZV9jaXBoZXIuYXJjNC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jaXBoZXIuY2NtJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLmNjbS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jaXBoZXIuZ2NtJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLmdjbS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2gkKEVYRVhUKTogdGVzdF9zdWl0ZV9jaXBoZXIuYmxvd2Zpc2guYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NpcGhlci5kZXMkKEVYRVhUKTogdGVzdF9zdWl0ZV9jaXBoZXIuZGVzLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2NpcGhlci5udWxsJChFWEVYVCk6IHRlc3Rfc3VpdGVfY2lwaGVyLm51bGwuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmckKEVYRVhUKTogdGVzdF9zdWl0ZV9jaXBoZXIucGFkZGluZy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9jdHJfZHJiZyQoRVhFWFQpOiB0ZXN0X3N1aXRlX2N0cl9kcmJnLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2RlcyQoRVhFWFQpOiB0ZXN0X3N1aXRlX2Rlcy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9kaG0kKEVYRVhUKTogdGVzdF9zdWl0ZV9kaG0uYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZWNkaCQoRVhFWFQpOiB0ZXN0X3N1aXRlX2VjZGguYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZWNkc2EkKEVYRVhUKTogdGVzdF9zdWl0ZV9lY2RzYS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9lY2pwYWtlJChFWEVYVCk6IHRlc3Rfc3VpdGVfZWNqcGFrZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9lY3AkKEVYRVhUKTogdGVzdF9zdWl0ZV9lY3AuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZW50cm9weSQoRVhFWFQpOiB0ZXN0X3N1aXRlX2VudHJvcHkuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZXJyb3IkKEVYRVhUKTogdGVzdF9zdWl0ZV9lcnJvci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uYWVzMTI4X2RlJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmFlczEyOF9kZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uYWVzMTkyX2RlJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9kZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9kZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uYWVzMTI4X2VuJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmFlczEyOF9lbi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9lbi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuJChFWEVYVCk6IHRlc3Rfc3VpdGVfZ2NtLmFlczI1Nl9lbi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9nY20uY2FtZWxsaWEkKEVYRVhUKTogdGVzdF9zdWl0ZV9nY20uY2FtZWxsaWEuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MkKEVYRVhUKTogdGVzdF9zdWl0ZV9obWFjX2RyYmcubWlzYy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9obWFjX2RyYmcubm9fcmVzZWVkJChFWEVYVCk6IHRlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wciQoRVhFWFQpOiB0ZXN0X3N1aXRlX2htYWNfZHJiZy5ub3ByLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX2htYWNfZHJiZy5wciQoRVhFWFQpOiB0ZXN0X3N1aXRlX2htYWNfZHJiZy5wci5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9tZCQoRVhFWFQpOiB0ZXN0X3N1aXRlX21kLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX21keCQoRVhFWFQpOiB0ZXN0X3N1aXRlX21keC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9tZW1vcnlfYnVmZmVyX2FsbG9jJChFWEVYVCk6IHRlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9tcGkkKEVYRVhUKTogdGVzdF9zdWl0ZV9tcGkuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfcGVtJChFWEVYVCk6IHRlc3Rfc3VpdGVfcGVtLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3BrY3MxX3YxNSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3BrY3MxX3YxNS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9wa2NzMV92MjEkKEVYRVhUKTogdGVzdF9zdWl0ZV9wa2NzMV92MjEuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfcGtjczUkKEVYRVhUKTogdGVzdF9zdWl0ZV9wa2NzNS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9wa3BhcnNlJChFWEVYVCk6IHRlc3Rfc3VpdGVfcGtwYXJzZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9wa3dyaXRlJChFWEVYVCk6IHRlc3Rfc3VpdGVfcGt3cml0ZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9wayQoRVhFWFQpOiB0ZXN0X3N1aXRlX3BrLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3JzYSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3JzYS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9zaGF4JChFWEVYVCk6IHRlc3Rfc3VpdGVfc2hheC5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV9zc2wkKEVYRVhUKTogdGVzdF9zdWl0ZV9zc2wuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfdGltaW5nJChFWEVYVCk6IHRlc3Rfc3VpdGVfdGltaW5nLmMgJChERVApCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpICQ8CSQoTE9DQUxfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorCit0ZXN0X3N1aXRlX3g1MDlwYXJzZSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3g1MDlwYXJzZS5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV94NTA5d3JpdGUkKEVYRVhUKTogdGVzdF9zdWl0ZV94NTA5d3JpdGUuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfeHRlYSQoRVhFWFQpOiB0ZXN0X3N1aXRlX3h0ZWEuYyAkKERFUCkKKwllY2hvICIgIENDICAgICQ8IgorCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgJDwJJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisKK3Rlc3Rfc3VpdGVfZGVidWckKEVYRVhUKTogdGVzdF9zdWl0ZV9kZWJ1Zy5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKwordGVzdF9zdWl0ZV92ZXJzaW9uJChFWEVYVCk6IHRlc3Rfc3VpdGVfdmVyc2lvbi5jICQoREVQKQorCWVjaG8gIiAgQ0MgICAgJDwiCisJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSAkPAkkKExPQ0FMX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKworY2xlYW46CitpZm5kZWYgV0lORE9XUworCXJtIC1mICQoQVBQUykgKi5jCitlbHNlCisJZGVsIC9RIC9GICouYyAqLmV4ZQorZW5kaWYKKworY2hlY2s6ICQoQVBQUykKKwlwZXJsIHNjcmlwdHMvcnVuLXRlc3Qtc3VpdGVzLnBsCisKK3Rlc3Q6IGNoZWNrCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvY29tcGF0LnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2NvbXBhdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTgxMjQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2NvbXBhdC5zaApAQCAtMCwwICsxLDEyNDcgQEAKKyMhL2Jpbi9zaAorCisjIGNvbXBhdC5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxMi0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIFRlc3QgaW50ZXJvcGVyYmlsaXR5IHdpdGggT3BlblNTTCwgR251VExTIGFzIHdlbGwgYXMgaXRzZWxmLgorIworIyBDaGVjayBlYWNoIGNvbW1vbiBjaXBoZXJzdWl0ZSwgd2l0aCBlYWNoIHZlcnNpb24sIGJvdGggd2F5cyAoY2xpZW50L3NlcnZlciksCisjIHdpdGggYW5kIHdpdGhvdXQgY2xpZW50IGF1dGhlbnRpY2F0aW9uLgorCitzZXQgLXUKKworIyBpbml0aWFsaXNlIGNvdW50ZXJzCitURVNUUz0wCitGQUlMRUQ9MAorU0tJUFBFRD0wCitTUlZNRU09MAorCisjIGRlZmF1bHQgY29tbWFuZHMsIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGVudmlyb25tZW50Cis6ICR7TV9TUlY6PS4uL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyMn0KKzogJHtNX0NMSTo9Li4vcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyfQorOiAke09QRU5TU0xfQ01EOj1vcGVuc3NsfSAjIE9QRU5TU0wgd291bGQgY29uZmxpY3Qgd2l0aCB0aGUgYnVpbGQgc3lzdGVtCis6ICR7R05VVExTX0NMSTo9Z251dGxzLWNsaX0KKzogJHtHTlVUTFNfU0VSVjo9Z251dGxzLXNlcnZ9CisKKyMgZG8gd2UgaGF2ZSBhIHJlY2VudCBlbm91Z2ggR251VExTPworaWYgKCB3aGljaCAkR05VVExTX0NMSSAmJiB3aGljaCAkR05VVExTX1NFUlYgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBHX1ZFUj0iJCggJEdOVVRMU19DTEkgLS12ZXJzaW9uIHwgaGVhZCAtbjEgKSIKKyAgICBpZiBlY2hvICIkR19WRVIiIHwgZ3JlcCAnQFZFUlNJT05AJyA+IC9kZXYvbnVsbDsgdGhlbiAjIGdpdCB2ZXJzaW9uCisgICAgICAgIFBFRVJfR05VVExTPSIgR251VExTIgorICAgIGVsc2UKKyAgICAgICAgZXZhbCAkKCBlY2hvICRHX1ZFUiB8IHNlZCAncy8uKiBcKFswLTldKlwpXC5cKFswLTldXCkqXC5cKFswLTldKlwpJC9NQUpPUj0iXDEiIE1JTk9SPSJcMiIgUEFUQ0g9IlwzIi8nICkKKyAgICAgICAgaWYgWyAkTUFKT1IgLWx0IDMgLW8gXAorICAgICAgICAgICAgXCggJE1BSk9SIC1lcSAzIC1hICRNSU5PUiAtbHQgMiBcKSAtbyBcCisgICAgICAgICAgICBcKCAkTUFKT1IgLWVxIDMgLWEgJE1JTk9SIC1lcSAyIC1hICRQQVRDSCAtbHQgMTUgXCkgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICBQRUVSX0dOVVRMUz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBQRUVSX0dOVVRMUz0iIEdudVRMUyIKKyAgICAgICAgZmkKKyAgICBmaQorZWxzZQorICAgIFBFRVJfR05VVExTPSIiCitmaQorCisjIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zCitNT0RFUz0idGxzMSB0bHMxXzEgdGxzMV8yIGR0bHMxIGR0bHMxXzIiCitWRVJJRklFUz0iTk8gWUVTIgorVFlQRVM9IkVDRFNBIFJTQSBQU0siCitGSUxURVI9IiIKK0VYQ0xVREU9J05VTExcfERFUy1DQkMtXHxSQzRcfEFSQ0ZPVVInICMgYXZvaWQgcGxhaW4gREVTIGJ1dCBrZWVwIDNERVMtRURFLUNCQyAobWJlZFRMUyksIERFUy1DQkMzIChPcGVuU1NMKQorVkVSQk9TRT0iIgorTUVNQ0hFQ0s9MAorUEVFUlM9Ik9wZW5TU0wkUEVFUl9HTlVUTFMgbWJlZFRMUyIKKworIyBoaWRkZW4gb3B0aW9uOiBza2lwIERUTFMgd2l0aCBPcGVuU1NMCisjICh0cmF2aXMgQ0kgaGFzIGEgdmVyc2lvbiB0aGF0IGRvZXNuJ3Qgd29yayBmb3IgdXMpCis6ICR7T1NTTF9OT19EVExTOj0wfQorCitwcmludF91c2FnZSgpIHsKKyAgICBlY2hvICJVc2FnZTogJDAiCisgICAgcHJpbnRmICIgIC1ofC0taGVscFx0UHJpbnQgdGhpcyBoZWxwLlxuIgorICAgIHByaW50ZiAiICAtZnwtLWZpbHRlclx0T25seSBtYXRjaGluZyBjaXBoZXJzdWl0ZXMgYXJlIHRlc3RlZCAoRGVmYXVsdDogJyRGSUxURVInKVxuIgorICAgIHByaW50ZiAiICAtZXwtLWV4Y2x1ZGVcdE1hdGNoaW5nIGNpcGhlcnN1aXRlcyBhcmUgZXhjbHVkZWQgKERlZmF1bHQ6ICckRVhDTFVERScpXG4iCisgICAgcHJpbnRmICIgIC1tfC0tbW9kZXNcdFdoaWNoIG1vZGVzIHRvIHBlcmZvcm0gKERlZmF1bHQ6ICckTU9ERVMnKVxuIgorICAgIHByaW50ZiAiICAtdHwtLXR5cGVzXHRXaGljaCBrZXkgZXhjaGFuZ2UgdHlwZSB0byBwZXJmb3JtIChEZWZhdWx0OiAnJFRZUEVTJylcbiIKKyAgICBwcmludGYgIiAgLVZ8LS12ZXJpZnlcdFdoaWNoIHZlcmlmaWNhdGlvbiBtb2RlcyB0byBwZXJmb3JtIChEZWZhdWx0OiAnJFZFUklGSUVTJylcbiIKKyAgICBwcmludGYgIiAgLXB8LS1wZWVyc1x0V2hpY2ggcGVlcnMgdG8gdXNlIChEZWZhdWx0OiAnJFBFRVJTJylcbiIKKyAgICBwcmludGYgIiAgICAgICAgICAgIFx0QWxzbyBhdmFpbGFibGU6IEdudVRMUyAobmVlZHMgdjMuMi4xNSBvciBoaWdoZXIpXG4iCisgICAgcHJpbnRmICIgIC1NfC0tbWVtY2hlY2tcdENoZWNrIG1lbW9yeSBsZWFrcyBhbmQgZXJyb3JzLlxuIgorICAgIHByaW50ZiAiICAtdnwtLXZlcmJvc2VcdFNldCB2ZXJib3NlIG91dHB1dC5cbiIKK30KKworZ2V0X29wdGlvbnMoKSB7CisgICAgd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICAgIC1mfC0tZmlsdGVyKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBGSUxURVI9JDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLWV8LS1leGNsdWRlKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBFWENMVURFPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1tfC0tbW9kZXMpCisgICAgICAgICAgICAgICAgc2hpZnQ7IE1PREVTPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC10fC0tdHlwZXMpCisgICAgICAgICAgICAgICAgc2hpZnQ7IFRZUEVTPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1WfC0tdmVyaWZ5KQorICAgICAgICAgICAgICAgIHNoaWZ0OyBWRVJJRklFUz0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtcHwtLXBlZXJzKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBQRUVSUz0kMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtdnwtLXZlcmJvc2UpCisgICAgICAgICAgICAgICAgVkVSQk9TRT0xCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1NfC0tbWVtY2hlY2spCisgICAgICAgICAgICAgICAgTUVNQ0hFQ0s9MQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtaHwtLWhlbHApCisgICAgICAgICAgICAgICAgcHJpbnRfdXNhZ2UKKyAgICAgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIGFyZ3VtZW50OiAnJDEnIgorICAgICAgICAgICAgICAgIHByaW50X3VzYWdlCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBzaGlmdAorICAgIGRvbmUKKworICAgICMgc2FuaXRpemUgc29tZSBvcHRpb25zIChtb2RlcyBjaGVja2VkIGxhdGVyKQorICAgIFZFUklGSUVTPSIkKCBlY2hvICRWRVJJRklFUyB8IHRyIFthLXpdIFtBLVpdICkiCisgICAgVFlQRVM9IiQoIGVjaG8gJFRZUEVTIHwgdHIgW2Etel0gW0EtWl0gKSIKK30KKworbG9nKCkgeworICBpZiBbICJYIiAhPSAiWCRWRVJCT1NFIiBdOyB0aGVuCisgICAgZWNobyAiIgorICAgIGVjaG8gIiRAIgorICBmaQorfQorCisjIGlzX2R0bHMgPG1vZGU+Citpc19kdGxzKCkKK3sKKyAgICB0ZXN0ICIkMSIgPSAiZHRsczEiIC1vICIkMSIgPSAiZHRsczFfMiIKK30KKworIyBtaW5vcl92ZXIgPG1vZGU+CittaW5vcl92ZXIoKQoreworICAgIGNhc2UgIiQxIiBpbgorICAgICAgICBzc2wzKQorICAgICAgICAgICAgZWNobyAwCisgICAgICAgICAgICA7OworICAgICAgICB0bHMxKQorICAgICAgICAgICAgZWNobyAxCisgICAgICAgICAgICA7OworICAgICAgICB0bHMxXzF8ZHRsczEpCisgICAgICAgICAgICBlY2hvIDIKKyAgICAgICAgICAgIDs7CisgICAgICAgIHRsczFfMnxkdGxzMV8yKQorICAgICAgICAgICAgZWNobyAzCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZWNobyAiZXJyb3I6IGludmFsaWQgbW9kZTogJE1PREUiID4mMgorICAgICAgICAgICAgIyBleGl0aW5nIGlzIG5vIGdvb2QgaGVyZSwgdHlwaWNhbGx5IGNhbGxlZCBpbiBhIHN1YnNoZWxsCisgICAgICAgICAgICBlY2hvIC0xCisgICAgZXNhYworfQorCitmaWx0ZXIoKQoreworICBMSVNUPSIkMSIKKyAgTkVXX0xJU1Q9IiIKKworICBpZiBpc19kdGxzICIkTU9ERSI7IHRoZW4KKyAgICAgIEVYQ0xNT0RFPSIkRVhDTFVERSInXHxSQzRcfEFSQ0ZPVVInCisgIGVsc2UKKyAgICAgIEVYQ0xNT0RFPSIkRVhDTFVERSIKKyAgZmkKKworICBmb3IgaSBpbiAkTElTVDsKKyAgZG8KKyAgICBORVdfTElTVD0iJE5FV19MSVNUICQoIGVjaG8gIiRpIiB8IGdyZXAgIiRGSUxURVIiIHwgZ3JlcCAtdiAiJEVYQ0xNT0RFIiApIgorICBkb25lCisKKyAgIyBub3JtYWxpemUgd2hpdGVzcGFjZQorICBlY2hvICIkTkVXX0xJU1QiIHwgc2VkIC1lICdzL1tbOnNwYWNlOl1dW1s6c3BhY2U6XV0qLyAvZycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLycKK30KKworIyBPcGVuU1NMIDEuMC4xaCB3aXRoIC1WZXJpZnkgd2FudHMgYSBDbGllbnRDZXJ0aWZpY2F0ZSBtZXNzYWdlIGV2ZW4gZm9yCisjIFBTSyBjaXBoZXJzdWl0ZXMgd2l0aCBEVExTLCB3aGljaCBpcyBpbmNvcnJlY3QsIHNvIGRpc2FibGUgdGhlbSBmb3Igbm93CitjaGVja19vcGVuc3NsX3NlcnZlcl9idWcoKQoreworICAgIGlmIHRlc3QgIlgkVkVSSUZZIiA9ICJYWUVTIiAmJiBpc19kdGxzICIkTU9ERSIgJiYgXAorICAgICAgICBlY2hvICIkMSIgfCBncmVwICJeVExTLVBTSyIgPi9kZXYvbnVsbDsKKyAgICB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCit9CisKK2ZpbHRlcl9jaXBoZXJzdWl0ZXMoKQoreworICAgIGlmIFsgIlgiICE9ICJYJEZJTFRFUiIgLW8gIlgiICE9ICJYJEVYQ0xVREUiIF07CisgICAgdGhlbgorICAgICAgICAjIENpcGhlcnN1aXRlIGZvciBtYmVkIFRMUworICAgICAgICBNX0NJUEhFUlM9JCggZmlsdGVyICIkTV9DSVBIRVJTIiApCisKKyAgICAgICAgIyBDaXBoZXJzdWl0ZSBmb3IgT3BlblNTTAorICAgICAgICBPX0NJUEhFUlM9JCggZmlsdGVyICIkT19DSVBIRVJTIiApCisKKyAgICAgICAgIyBDaXBoZXJzdWl0ZSBmb3IgR251VExTCisgICAgICAgIEdfQ0lQSEVSUz0kKCBmaWx0ZXIgIiRHX0NJUEhFUlMiICkKKyAgICBmaQorCisgICAgIyBPcGVuU1NMIDEuMC4xaCBkb2Vzbid0IHN1cHBvcnQgRFRMUyAxLjIKKyAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWdlIDMgXSAmJiBpc19kdGxzICIkTU9ERSI7IHRoZW4KKyAgICAgICAgT19DSVBIRVJTPSIiCisgICAgICAgIGNhc2UgIiRQRUVSIiBpbgorICAgICAgICAgICAgW09vXXBlbiopCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGZpCisKKyAgICAjIEZvciBHbnVUTFMgY2xpZW50IC0+IG1iZWQgVExTIHNlcnZlciwKKyAgICAjIHdlIG5lZWQgdG8gZm9yY2UgSVB2NCBieSBjb25uZWN0aW5nIHRvIDEyNy4wLjAuMSBidXQgdGhlbiBhdXRoIGZhaWxzCisgICAgaWYgWyAiWCRWRVJJRlkiID0gIlhZRVMiIF0gJiYgaXNfZHRscyAiJE1PREUiOyB0aGVuCisgICAgICAgIEdfQ0lQSEVSUz0iIgorICAgIGZpCit9CisKK3Jlc2V0X2NpcGhlcnN1aXRlcygpCit7CisgICAgTV9DSVBIRVJTPSIiCisgICAgT19DSVBIRVJTPSIiCisgICAgR19DSVBIRVJTPSIiCit9CisKK2FkZF9jb21tb25fY2lwaGVyc3VpdGVzKCkKK3sKKyAgICBjYXNlICRUWVBFIGluCisKKyAgICAgICAgIkVDRFNBIikKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ3QgMCBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILU5VTEwtU0hBICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILVJDNC0xMjgtU0hBICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILTNERVMtRURFLUNCQy1TSEEgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitOVUxMOitTSEExICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitBUkNGT1VSLTEyODorU0hBMSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitBRVMtMTI4LUNCQzorU0hBMSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitBRVMtMjU2LUNCQzorU0hBMSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtRUNEU0EtTlVMTC1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLVJDNC1TSEEgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1FQ0RTQS1ERVMtQ0JDMy1TSEEgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtRUNEU0EtQUVTMTI4LVNIQSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLUFFUzI1Ni1TSEEgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1nZSAzIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtRUNEU0E6K0FFUy0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQUVTLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitBRVMtMTI4LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtRUNEU0E6K0FFUy0yNTYtR0NNOitBRUFEICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBPX0NJUEhFUlM9IiRPX0NJUEhFUlMgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLUFFUzEyOC1TSEEyNTYgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1FQ0RTQS1BRVMyNTYtU0hBMzg0ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTYgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0ICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICAiUlNBIikKKyAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEgICBcCisgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQSAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILVJDNC0xMjgtU0hBICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtUkM0LTEyOC1NRDUgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1OVUxMLU1ENSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILU5VTEwtU0hBICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVJTQTorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtESEUtUlNBOitBRVMtMjU2LUNCQzorU0hBMSAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTEgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVJTQTorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMSAgICAgICAgXAorICAgICAgICAgICAgICAgICtESEUtUlNBOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1JTQTorQUVTLTI1Ni1DQkM6K1NIQTEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUlNBOitDQU1FTExJQS0yNTYtQ0JDOitTSEExICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtSU0E6K0FFUy0xMjgtQ0JDOitTSEExICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1JTQTorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUlNBOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtSU0E6K0FSQ0ZPVVItMTI4OitTSEExICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1JTQTorQVJDRk9VUi0xMjg6K01ENSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUlNBOitOVUxMOitNRDUgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtSU0E6K05VTEw6K1NIQTEgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgT19DSVBIRVJTPSIkT19DSVBIRVJTICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERIRS1SU0EtQUVTMTI4LVNIQSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERIRS1SU0EtQUVTMjU2LVNIQSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERIRS1SU0EtQ0FNRUxMSUExMjgtU0hBICAgICAgICAgXAorICAgICAgICAgICAgICAgIERIRS1SU0EtQ0FNRUxMSUEyNTYtU0hBICAgICAgICAgXAorICAgICAgICAgICAgICAgIEVESC1SU0EtREVTLUNCQzMtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFFUzI1Ni1TSEEgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIENBTUVMTElBMjU2LVNIQSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFFUzEyOC1TSEEgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIENBTUVMTElBMTI4LVNIQSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERFUy1DQkMzLVNIQSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFJDNC1TSEEgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFJDNC1NRDUgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIE5VTEwtTUQ1ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIE5VTEwtU0hBICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ3QgMCBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1SQzQtMTI4LVNIQSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1OVUxMLVNIQSAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQUVTLTI1Ni1DQkM6K1NIQTEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorM0RFUy1DQkM6K1NIQTEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQVJDRk9VUi0xMjg6K1NIQTEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorTlVMTDorU0hBMSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtUlNBLUFFUzI1Ni1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1BRVMxMjgtU0hBICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RIRS1SU0EtREVTLUNCQzMtU0hBICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESEUtUlNBLVJDNC1TSEEgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1OVUxMLVNIQSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1nZSAzIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEyNTYgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVJTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVJTQS1XSVRILUFFUy0yNTYtR0NNLVNIQTM4NCAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIEdfQ0lQSEVSUz0iJEdfQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQUVTLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitBRVMtMjU2LUNCQzorU0hBMjU2ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQUVTLTI1Ni1DQkM6K1NIQTI1NiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUlNBOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUlNBOitBRVMtMjU2LUNCQzorU0hBMzg0ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitBRVMtMTI4LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitBRVMtMjU2LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQUVTLTEyOC1HQ006K0FFQUQgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQUVTLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUlNBOitBRVMtMTI4LUdDTTorQUVBRCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUlNBOitBRVMtMjU2LUdDTTorQUVBRCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgT19DSVBIRVJTPSIkT19DSVBIRVJTICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIE5VTEwtU0hBMjU2ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEFFUzEyOC1TSEEyNTYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIERIRS1SU0EtQUVTMTI4LVNIQTI1NiAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEFFUzI1Ni1TSEEyNTYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIERIRS1SU0EtQUVTMjU2LVNIQTI1NiAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1BRVMxMjgtU0hBMjU2ICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1BRVMyNTYtU0hBMzg0ICAgICBcCisgICAgICAgICAgICAgICAgICAgIEFFUzEyOC1HQ00tU0hBMjU2ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIERIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTYgICBcCisgICAgICAgICAgICAgICAgICAgIEFFUzI1Ni1HQ00tU0hBMzg0ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIERIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NiBcCisgICAgICAgICAgICAgICAgICAgIEVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NCBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworCisgICAgICAgICJQU0siKQorICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILVJDNC0xMjgtU0hBICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUFNLOitBUkNGT1VSLTEyODorU0hBMSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtQU0s6KzNERVMtQ0JDOitTSEExICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK1BTSzorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArUFNLOitBRVMtMjU2LUNCQzorU0hBMSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIE9fQ0lQSEVSUz0iJE9fQ0lQSEVSUyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBQU0stUkM0LVNIQSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBQU0stM0RFUy1FREUtQ0JDLVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBQU0stQUVTMTI4LUNCQy1TSEEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBQU0stQUVTMjU2LUNCQy1TSEEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworYWRkX29wZW5zc2xfY2lwaGVyc3VpdGVzKCkKK3sKKyAgICBjYXNlICRUWVBFIGluCisKKyAgICAgICAgIkVDRFNBIikKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ3QgMCBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtTlVMTC1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtUkM0LTEyOC1TSEEgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICBPX0NJUEhFUlM9IiRPX0NJUEhFUlMgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREgtRUNEU0EtTlVMTC1TSEEgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLVJDNC1TSEEgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESC1FQ0RTQS1ERVMtQ0JDMy1TSEEgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREgtRUNEU0EtQUVTMTI4LVNIQSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLUFFUzI1Ni1TSEEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ2UgMyBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREgtRUNEU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREgtRUNEU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgT19DSVBIRVJTPSIkT19DSVBIRVJTICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLUFFUzEyOC1TSEEyNTYgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgRUNESC1FQ0RTQS1BRVMyNTYtU0hBMzg0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEVDREgtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTYgICAgXAorICAgICAgICAgICAgICAgICAgICBFQ0RILUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlJTQSIpCisgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtREVTLUNCQy1TSEEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtREVTLUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgT19DSVBIRVJTPSIkT19DSVBIRVJTICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERFUy1DQkMtU0hBICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEVESC1SU0EtREVTLUNCQy1TSEEgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlBTSyIpCisgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworYWRkX2dudXRsc19jaXBoZXJzdWl0ZXMoKQoreworICAgIGNhc2UgJFRZUEUgaW4KKworICAgICAgICAiRUNEU0EiKQorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1nZSAzIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgICBcCisgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIEdfQ0lQSEVSUz0iJEdfQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLUVDRFNBOitDQU1FTExJQS0yNTYtQ0JDOitTSEEzODQgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtRUNEU0E6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1FQ0RTQTorQ0FNRUxMSUEtMjU2LUdDTTorQUVBRCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICAiUlNBIikKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ3QgMCBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtTlVMTC1TSEEyNTYgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIEdfQ0lQSEVSUz0iJEdfQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorTlVMTDorU0hBMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWdlIDMgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2ICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1SU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQ0FNRUxMSUEtMjU2LUdDTS1TSEEzODQgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIEdfQ0lQSEVSUz0iJEdfQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitDQU1FTExJQS0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQTorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMjU2ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUlNBOitDQU1FTExJQS0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMjU2ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVJTQTorQ0FNRUxMSUEtMTI4LUdDTTorQUVBRCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1SU0E6K0NBTUVMTElBLTI1Ni1HQ006K0FFQUQgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVJTQTorQ0FNRUxMSUEtMTI4LUdDTTorQUVBRCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1SU0E6K0NBTUVMTElBLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0E6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBOitDQU1FTExJQS0yNTYtR0NNOitBRUFEICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlBTSyIpCisgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtUkM0LTEyOC1TSEEgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBHX0NJUEhFUlM9IiRHX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtESEUtUFNLOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICArREhFLVBTSzorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgK0RIRS1QU0s6K0FFUy0yNTYtQ0JDOitTSEExICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICtESEUtUFNLOitBUkNGT1VSLTEyODorU0hBMSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWd0IDAgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILVJDNC0xMjgtU0hBICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtUkM0LTEyOC1TSEEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgR19DSVBIRVJTPSIkR19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOiszREVTLUNCQzorU0hBMSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1QU0s6K0FFUy0yNTYtQ0JDOitTSEExICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOitBUkNGT1VSLTEyODorU0hBMSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6KzNERVMtQ0JDOitTSEExICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitBRVMtMjU2LUNCQzorU0hBMSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorQUVTLTEyOC1DQkM6K1NIQTEgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0FSQ0ZPVVItMTI4OitTSEExICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbIGBtaW5vcl92ZXIgIiRNT0RFImAgLWdlIDMgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1DQU1FTExJQS0yNTYtQ0JDLVNIQTM4NCAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBMjU2ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLVBTSy1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1OVUxMLVNIQTM4NCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtUFNLLVdJVEgtTlVMTC1TSEEyNTYgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1OVUxMLVNIQTI1NiAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtTlVMTC1TSEEzODQgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1OVUxMLVNIQTI1NiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtTlVMTC1TSEEzODQgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUFFUy0yNTYtQ0JDLVNIQTM4NCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEyNTYgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtTlVMTC1TSEEyNTYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILU5VTEwtU0hBMzg0ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0xMjgtQ0JDLVNIQTI1NiAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUNCQy1TSEEyNTYgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1DQkMtU0hBMzg0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtQ0FNRUxMSUEtMTI4LUdDTS1TSEEyNTYgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUNBTUVMTElBLTEyOC1HQ00tU0hBMjU2ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1DQU1FTExJQS0yNTYtR0NNLVNIQTM4NCAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVBTSy1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIEdfQ0lQSEVSUz0iJEdfQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorQUVTLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1QU0s6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOitBRVMtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0VDREhFLVBTSzorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K0FFUy0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitBRVMtMjU2LUNCQzorU0hBMzg0ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1QU0s6K0FFUy0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitBRVMtMjU2LUNCQzorU0hBMzg0ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorQUVTLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0FFUy0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitDQU1FTExJQS0xMjgtQ0JDOitTSEEyNTYgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVBTSzorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMzg0ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1BTSzorQ0FNRUxMSUEtMTI4LUNCQzorU0hBMjU2ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K0NBTUVMTElBLTI1Ni1DQkM6K1NIQTM4NCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorQ0FNRUxMSUEtMjU2LUNCQzorU0hBMzg0ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0NBTUVMTElBLTEyOC1DQkM6K1NIQTI1NiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K0FFUy0xMjgtR0NNOitBRUFEICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitBRVMtMjU2LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1QU0s6K0FFUy0xMjgtR0NNOitBRUFEICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitBRVMtMjU2LUdDTTorQUVBRCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorQ0FNRUxMSUEtMTI4LUdDTTorQUVBRCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0NBTUVMTElBLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUFNLOitDQU1FTExJQS0yNTYtR0NNOitBRUFEICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1QU0s6K0NBTUVMTElBLTEyOC1HQ006K0FFQUQgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtESEUtUFNLOitDQU1FTExJQS0yNTYtR0NNOitBRUFEICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorQUVTLTI1Ni1HQ006K0FFQUQgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1JTQS1QU0s6K0FFUy0xMjgtR0NNOitBRUFEICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtFQ0RIRS1QU0s6K05VTEw6K1NIQTM4NCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArRUNESEUtUFNLOitOVUxMOitTSEEyNTYgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK1BTSzorTlVMTDorU0hBMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtQU0s6K05VTEw6K1NIQTM4NCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArREhFLVBTSzorTlVMTDorU0hBMjU2ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgK0RIRS1QU0s6K05VTEw6K1NIQTM4NCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICtSU0EtUFNLOitOVUxMOitTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICArUlNBLVBTSzorTlVMTDorU0hBMzg0ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQorCithZGRfbWJlZHRsc19jaXBoZXJzdWl0ZXMoKQoreworICAgIGNhc2UgJFRZUEUgaW4KKworICAgICAgICAiRUNEU0EiKQorICAgICAgICAgICAgaWYgWyBgbWlub3JfdmVyICIkTU9ERSJgIC1ndCAwIF0KKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBNX0NJUEhFUlM9IiRNX0NJUEhFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUNBTUVMTElBLTEyOC1DQkMtU0hBMjU2ICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RILUVDRFNBLVdJVEgtQ0FNRUxMSUEtMjU2LUNCQy1TSEEzODQgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ2UgMyBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREgtRUNEU0EtV0lUSC1DQU1FTExJQS0xMjgtR0NNLVNIQTI1NiAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESC1FQ0RTQS1XSVRILUNBTUVMTElBLTI1Ni1HQ00tU0hBMzg0ICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0xMjgtQ0NNICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1DQ00gICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMTI4LUNDTS04ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1FQ0RTQS1XSVRILUFFUy0yNTYtQ0NNLTggICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlJTQSIpCisgICAgICAgICAgICBpZiBbICIkTU9ERSIgPSAidGxzMV8yIiBdOworICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNDTSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0yNTYtQ0NNICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0NNICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQ00gICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVJTQS1XSVRILUFFUy0xMjgtQ0NNLTggICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQ00tOCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQ00tOCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1SU0EtV0lUSC1BRVMtMjU2LUNDTS04ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICAiUFNLIikKKyAgICAgICAgICAgICMgKlBTSy1OVUxMLVNIQSBzdWl0ZXMgc3VwcG9ydGVkIGJ5IEdudVRMUyAzLjMuNSBidXQgbm90IDMuMi4xNQorICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1OVUxMLVNIQSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtTlVMTC1TSEEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGlmIFsgYG1pbm9yX3ZlciAiJE1PREUiYCAtZ3QgMCBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgTV9DSVBIRVJTPSIkTV9DSVBIRVJTICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1FQ0RIRS1QU0stV0lUSC1OVUxMLVNIQSAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1SU0EtUFNLLVdJVEgtTlVMTC1TSEEgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbICIkTU9ERSIgPSAidGxzMV8yIiBdOworICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0lQSEVSUz0iJE1fQ0lQSEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1QU0stV0lUSC1BRVMtMTI4LUNDTSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUFFUy0yNTYtQ0NNICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtREhFLVBTSy1XSVRILUFFUy0xMjgtQ0NNICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQUVTLTI1Ni1DQ00gICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTggICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBUTFMtUFNLLVdJVEgtQUVTLTI1Ni1DQ00tOCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIFRMUy1ESEUtUFNLLVdJVEgtQUVTLTEyOC1DQ00tOCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgVExTLURIRS1QU0stV0lUSC1BRVMtMjU2LUNDTS04ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCit9CisKK3NldHVwX2FyZ3VtZW50cygpCit7CisgICAgR19NT0RFPSIiCisgICAgY2FzZSAiJE1PREUiIGluCisgICAgICAgICJzc2wzIikKKyAgICAgICAgICAgIEdfUFJJT19NT0RFPSIrVkVSUy1TU0wzLjAiCisgICAgICAgICAgICA7OworICAgICAgICAidGxzMSIpCisgICAgICAgICAgICBHX1BSSU9fTU9ERT0iK1ZFUlMtVExTMS4wIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInRsczFfMSIpCisgICAgICAgICAgICBHX1BSSU9fTU9ERT0iK1ZFUlMtVExTMS4xIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInRsczFfMiIpCisgICAgICAgICAgICBHX1BSSU9fTU9ERT0iK1ZFUlMtVExTMS4yIgorICAgICAgICAgICAgOzsKKyAgICAgICAgImR0bHMxIikKKyAgICAgICAgICAgIEdfUFJJT19NT0RFPSIrVkVSUy1EVExTMS4wIgorICAgICAgICAgICAgR19NT0RFPSItdSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJkdGxzMV8yIikKKyAgICAgICAgICAgIEdfUFJJT19NT0RFPSIrVkVSUy1EVExTMS4yIgorICAgICAgICAgICAgR19NT0RFPSItdSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJlcnJvcjogaW52YWxpZCBtb2RlOiAkTU9ERSIgPiYyCisgICAgICAgICAgICBleGl0IDE7CisgICAgZXNhYworCisgICAgTV9TRVJWRVJfQVJHUz0ic2VydmVyX3BvcnQ9JFBPUlQgc2VydmVyX2FkZHI9MC4wLjAuMCBmb3JjZV92ZXJzaW9uPSRNT0RFIGFyYzQ9MSIKKyAgICBPX1NFUlZFUl9BUkdTPSItYWNjZXB0ICRQT1JUIC1jaXBoZXIgTlVMTCxBTEwgLSRNT0RFIC1kaHBhcmFtIGRhdGFfZmlsZXMvZGhwYXJhbXMucGVtIgorICAgIEdfU0VSVkVSX0FSR1M9Ii1wICRQT1JUIC0taHR0cCAkR19NT0RFIgorICAgIEdfU0VSVkVSX1BSSU89Ik5PUk1BTDorQVJDRk9VUi0xMjg6K05VTEw6K01ENTorUFNLOitESEUtUFNLOitFQ0RIRS1QU0s6K1JTQS1QU0s6LVZFUlMtVExTLUFMTDokR19QUklPX01PREUiCisKKyAgICAjIHdpdGggT3BlblNTTCAxLjAuMWgsIC13d3csIC1XV1cgYW5kIC1IVFRQIGJyZWFrIERUTFMgaGFuZHNoYWtlcworICAgIGlmIGlzX2R0bHMgIiRNT0RFIjsgdGhlbgorICAgICAgICBPX1NFUlZFUl9BUkdTPSIkT19TRVJWRVJfQVJHUyIKKyAgICBlbHNlCisgICAgICAgIE9fU0VSVkVSX0FSR1M9IiRPX1NFUlZFUl9BUkdTIC13d3ciCisgICAgZmkKKworICAgIE1fQ0xJRU5UX0FSR1M9InNlcnZlcl9wb3J0PSRQT1JUIHNlcnZlcl9hZGRyPTEyNy4wLjAuMSBmb3JjZV92ZXJzaW9uPSRNT0RFIgorICAgIE9fQ0xJRU5UX0FSR1M9Ii1jb25uZWN0IGxvY2FsaG9zdDokUE9SVCAtJE1PREUiCisgICAgR19DTElFTlRfQVJHUz0iLXAgJFBPUlQgLS1kZWJ1ZyAzICRHX01PREUiCisgICAgR19DTElFTlRfUFJJTz0iTk9ORTokR19QUklPX01PREU6K0NPTVAtTlVMTDorQ1VSVkUtQUxMOitTSUdOLUFMTCIKKworICAgIGlmIFsgIlgkVkVSSUZZIiA9ICJYWUVTIiBdOworICAgIHRoZW4KKyAgICAgICAgTV9TRVJWRVJfQVJHUz0iJE1fU0VSVkVSX0FSR1MgY2FfZmlsZT1kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IGF1dGhfbW9kZT1yZXF1aXJlZCIKKyAgICAgICAgT19TRVJWRVJfQVJHUz0iJE9fU0VSVkVSX0FSR1MgLUNBZmlsZSBkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IC1WZXJpZnkgMTAiCisgICAgICAgIEdfU0VSVkVSX0FSR1M9IiRHX1NFUlZFUl9BUkdTIC0teDUwOWNhZmlsZSBkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IC0tcmVxdWlyZS1jbGllbnQtY2VydCIKKworICAgICAgICBNX0NMSUVOVF9BUkdTPSIkTV9DTElFTlRfQVJHUyBjYV9maWxlPWRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQgYXV0aF9tb2RlPXJlcXVpcmVkIgorICAgICAgICBPX0NMSUVOVF9BUkdTPSIkT19DTElFTlRfQVJHUyAtQ0FmaWxlIGRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQgLXZlcmlmeSAxMCIKKyAgICAgICAgR19DTElFTlRfQVJHUz0iJEdfQ0xJRU5UX0FSR1MgLS14NTA5Y2FmaWxlIGRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiCisgICAgZWxzZQorICAgICAgICAjIGRvbid0IHJlcXVlc3QgYSBjbGllbnQgY2VydCBhdCBhbGwKKyAgICAgICAgTV9TRVJWRVJfQVJHUz0iJE1fU0VSVkVSX0FSR1MgY2FfZmlsZT1ub25lIGF1dGhfbW9kZT1ub25lIgorICAgICAgICBHX1NFUlZFUl9BUkdTPSIkR19TRVJWRVJfQVJHUyAtLWRpc2FibGUtY2xpZW50LWNlcnQiCisKKyAgICAgICAgTV9DTElFTlRfQVJHUz0iJE1fQ0xJRU5UX0FSR1MgY2FfZmlsZT1ub25lIGF1dGhfbW9kZT1ub25lIgorICAgICAgICBPX0NMSUVOVF9BUkdTPSIkT19DTElFTlRfQVJHUyIKKyAgICAgICAgR19DTElFTlRfQVJHUz0iJEdfQ0xJRU5UX0FSR1MgLS1pbnNlY3VyZSIKKyAgICBmaQorCisgICAgY2FzZSAkVFlQRSBpbgorICAgICAgICAiRUNEU0EiKQorICAgICAgICAgICAgTV9TRVJWRVJfQVJHUz0iJE1fU0VSVkVSX0FSR1MgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IgorICAgICAgICAgICAgT19TRVJWRVJfQVJHUz0iJE9fU0VSVkVSX0FSR1MgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkiCisgICAgICAgICAgICBHX1NFUlZFUl9BUkdTPSIkR19TRVJWRVJfQVJHUyAtLXg1MDljZXJ0ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IC0teDUwOWtleWZpbGUgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIKKworICAgICAgICAgICAgaWYgWyAiWCRWRVJJRlkiID0gIlhZRVMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBNX0NMSUVOVF9BUkdTPSIkTV9DTElFTlRfQVJHUyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5rZXkiCisgICAgICAgICAgICAgICAgT19DTElFTlRfQVJHUz0iJE9fQ0xJRU5UX0FSR1MgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCAta2V5IGRhdGFfZmlsZXMvc2VydmVyNi5rZXkiCisgICAgICAgICAgICAgICAgR19DTElFTlRfQVJHUz0iJEdfQ0xJRU5UX0FSR1MgLS14NTA5Y2VydGZpbGUgZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCAtLXg1MDlrZXlmaWxlIGRhdGFfZmlsZXMvc2VydmVyNi5rZXkiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgTV9DTElFTlRfQVJHUz0iJE1fQ0xJRU5UX0FSR1MgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIlJTQSIpCisgICAgICAgICAgICBNX1NFUlZFUl9BUkdTPSIkTV9TRVJWRVJfQVJHUyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rZXkiCisgICAgICAgICAgICBPX1NFUlZFUl9BUkdTPSIkT19TRVJWRVJfQVJHUyAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSIKKyAgICAgICAgICAgIEdfU0VSVkVSX0FSR1M9IiRHX1NFUlZFUl9BUkdTIC0teDUwOWNlcnRmaWxlIGRhdGFfZmlsZXMvc2VydmVyMi5jcnQgLS14NTA5a2V5ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IgorCisgICAgICAgICAgICBpZiBbICJYJFZFUklGWSIgPSAiWFlFUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIE1fQ0xJRU5UX0FSR1M9IiRNX0NMSUVOVF9BUkdTIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyMS5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSIKKyAgICAgICAgICAgICAgICBPX0NMSUVOVF9BUkdTPSIkT19DTElFTlRfQVJHUyAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSIKKyAgICAgICAgICAgICAgICBHX0NMSUVOVF9BUkdTPSIkR19DTElFTlRfQVJHUyAtLXg1MDljZXJ0ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IC0teDUwOWtleWZpbGUgZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBNX0NMSUVOVF9BUkdTPSIkTV9DTElFTlRfQVJHUyBjcnRfZmlsZT1ub25lIGtleV9maWxlPW5vbmUiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICAiUFNLIikKKyAgICAgICAgICAgICMgZ2l2ZSBSU0EtUFNLLWNhcGFibGUgc2VydmVyIGEgUlNBIGNlcnQKKyAgICAgICAgICAgICMgKHNob3VsZCBiZSBhIHNlcGFyYXRlIHR5cGUsIGJ1dCBoYXJkZXIgdG8gY2xvc2Ugd2l0aCBvcGVuc3NsKQorICAgICAgICAgICAgTV9TRVJWRVJfQVJHUz0iJE1fU0VSVkVSX0FSR1MgcHNrPTYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwIGNhX2ZpbGU9bm9uZSBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rZXkiCisgICAgICAgICAgICBPX1NFUlZFUl9BUkdTPSIkT19TRVJWRVJfQVJHUyAtcHNrIDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwIC1ub2NlcnQiCisgICAgICAgICAgICBHX1NFUlZFUl9BUkdTPSIkR19TRVJWRVJfQVJHUyAtLXg1MDljZXJ0ZmlsZSBkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IC0teDUwOWtleWZpbGUgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSAtLXBza3Bhc3N3ZCBkYXRhX2ZpbGVzL3Bhc3N3ZC5wc2siCisKKyAgICAgICAgICAgIE1fQ0xJRU5UX0FSR1M9IiRNX0NMSUVOVF9BUkdTIHBzaz02MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MCBjcnRfZmlsZT1ub25lIGtleV9maWxlPW5vbmUiCisgICAgICAgICAgICBPX0NMSUVOVF9BUkdTPSIkT19DTElFTlRfQVJHUyAtcHNrIDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwIgorICAgICAgICAgICAgR19DTElFTlRfQVJHUz0iJEdfQ0xJRU5UX0FSR1MgLS1wc2t1c2VybmFtZSBDbGllbnRfaWRlbnRpdHkgLS1wc2trZXk9NjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzAiCisgICAgICAgICAgICA7OworICAgIGVzYWMKK30KKworIyBpc19tYmVkdGxzIDxjbWRfbGluZT4KK2lzX21iZWR0bHMoKSB7CisgICAgZWNobyAiJDEiIHwgZ3JlcCAnc3NsX3NlcnZlcjJcfHNzbF9jbGllbnQyJyA+IC9kZXYvbnVsbAorfQorCisjIGhhc19tZW1fZXJyIDxsb2dfZmlsZV9uYW1lPgoraGFzX21lbV9lcnIoKSB7CisgICAgaWYgKCBncmVwIC1GICdBbGwgaGVhcCBibG9ja3Mgd2VyZSBmcmVlZCAtLSBubyBsZWFrcyBhcmUgcG9zc2libGUnICIkMSIgJiYKKyAgICAgICAgIGdyZXAgLUYgJ0VSUk9SIFNVTU1BUlk6IDAgZXJyb3JzIGZyb20gMCBjb250ZXh0cycgIiQxIiApID4gL2Rldi9udWxsCisgICAgdGhlbgorICAgICAgICByZXR1cm4gMSAjIGZhbHNlOiBkb2VzIG5vdCBoYXZlIGVycm9ycworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDAgIyB0cnVlOiBoYXMgZXJyb3JzCisgICAgZmkKK30KKworIyBzdGFydF9zZXJ2ZXIgPG5hbWU+CisjIGFsc28gc2F2ZXMgbmFtZSBhbmQgY29tbWFuZAorc3RhcnRfc2VydmVyKCkgeworICAgIGNhc2UgJDEgaW4KKyAgICAgICAgW09vXXBlbiopCisgICAgICAgICAgICBTRVJWRVJfQ01EPSIkT1BFTlNTTF9DTUQgc19zZXJ2ZXIgJE9fU0VSVkVSX0FSR1MiCisgICAgICAgICAgICA7OworICAgICAgICBbR2ddbnUqKQorICAgICAgICAgICAgU0VSVkVSX0NNRD0iJEdOVVRMU19TRVJWICRHX1NFUlZFUl9BUkdTIC0tcHJpb3JpdHkgJEdfU0VSVkVSX1BSSU8iCisgICAgICAgICAgICA7OworICAgICAgICBtYmVkKikKKyAgICAgICAgICAgIFNFUlZFUl9DTUQ9IiRNX1NSViAkTV9TRVJWRVJfQVJHUyIKKyAgICAgICAgICAgIGlmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIFNFUlZFUl9DTUQ9InZhbGdyaW5kIC0tbGVhay1jaGVjaz1mdWxsICRTRVJWRVJfQ01EIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJlcnJvcjogaW52YWxpZCBzZXJ2ZXIgbmFtZTogJDEiID4mMgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBTRVJWRVJfTkFNRT0kMQorCisgICAgbG9nICIkU0VSVkVSX0NNRCIKKyAgICBlY2hvICIkU0VSVkVSX0NNRCIgPiAkU1JWX09VVAorICAgICMgZm9yIHNlcnZlcnMgd2l0aG91dCAtd3d3IG9yIGVxdWl2YWxlbnQKKyAgICB3aGlsZSA6OyBkbyBlY2hvIGJsYTsgc2xlZXAgMTsgZG9uZSB8ICRTRVJWRVJfQ01EID4+ICRTUlZfT1VUIDI+JjEgJgorICAgIFBST0NFU1NfSUQ9JCEKKworICAgIHNsZWVwIDEKK30KKworIyB0ZXJtaW5hdGUgdGhlIHJ1bm5pbmcgc2VydmVyCitzdG9wX3NlcnZlcigpIHsKKyAgICBraWxsICRQUk9DRVNTX0lEIDI+L2Rldi9udWxsCisgICAgd2FpdCAkUFJPQ0VTU19JRCAyPi9kZXYvbnVsbAorCisgICAgaWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgICAgIGlmIGlzX21iZWR0bHMgIiRTRVJWRVJfQ01EIiAmJiBoYXNfbWVtX2VyciAkU1JWX09VVDsgdGhlbgorICAgICAgICAgICAgZWNobyAiICAhIFNlcnZlciBoYWQgbWVtb3J5IGVycm9ycyIKKyAgICAgICAgICAgIFNSVk1FTT0kKCggJFNSVk1FTSArIDEgKSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmaQorICAgIGZpCisKKyAgICBybSAtZiAkU1JWX09VVAorfQorCisjIGtpbGwgdGhlIHJ1bm5pbmcgc2VydmVyICh1c2VkIHdoZW4ga2lsbGVkIGJ5IHNpZ25hbCkKK2NsZWFudXAoKSB7CisgICAgcm0gLWYgJFNSVl9PVVQgJENMSV9PVVQKKyAgICBraWxsICRQUk9DRVNTX0lEID4vZGV2L251bGwgMj4mMQorICAgIGtpbGwgJFdBVENIRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKKyAgICBleGl0IDEKK30KKworIyB3YWl0IGZvciBjbGllbnQgdG8gdGVybWluYXRlIGFuZCBzZXQgRVhJVAorIyBtdXN0IGJlIGNhbGxlZCByaWdodCBhZnRlciBzdGFydGluZyB0aGUgY2xpZW50Cit3YWl0X2NsaWVudF9kb25lKCkgeworICAgIENMSV9QSUQ9JCEKKworICAgICggc2xlZXAgIiRET0dfREVMQVkiOyBlY2hvICJUSU1FT1VUIiA+PiAkQ0xJX09VVDsga2lsbCAkQ0xJX1BJRCApICYKKyAgICBXQVRDSERPR19QSUQ9JCEKKworICAgIHdhaXQgJENMSV9QSUQKKyAgICBFWElUPSQ/CisKKyAgICBraWxsICRXQVRDSERPR19QSUQKKyAgICB3YWl0ICRXQVRDSERPR19QSUQKKworICAgIGVjaG8gIkVYSVQ6ICRFWElUIiA+PiAkQ0xJX09VVAorfQorCisjIHJ1bl9jbGllbnQgPG5hbWU+IDxjaXBoZXI+CitydW5fY2xpZW50KCkgeworICAgICMgYW5ub3VuY2Ugd2hhdCB3ZSdyZSBnb2luZyB0byBkbworICAgIFRFU1RTPSQoKCAkVEVTVFMgKyAxICkpCisgICAgVkVSSUY9JChlY2hvICRWRVJJRlkgfCB0ciAnWzp1cHBlcjpdJyAnWzpsb3dlcjpdJykKKyAgICBUSVRMRT0iYGVjaG8gJDEgfCBoZWFkIC1jMWAtPmBlY2hvICRTRVJWRVJfTkFNRSB8IGhlYWQgLWMxYCIKKyAgICBUSVRMRT0iJFRJVExFICRNT0RFLCRWRVJJRiAkMiIKKyAgICBwcmludGYgIiRUSVRMRSAiCisgICAgTEVOPSQoKCA3MiAtIGBlY2hvICIkVElUTEUiIHwgd2MgLWNgICkpCisgICAgZm9yIGkgaW4gYHNlcSAxICRMRU5gOyBkbyBwcmludGYgJy4nOyBkb25lOyBwcmludGYgJyAnCisKKyAgICAjIHNob3VsZCB3ZSBza2lwPworICAgIGlmIFsgIlgkU0tJUF9ORVhUIiA9ICJYWUVTIiBdOyB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iTk8iCisgICAgICAgIGVjaG8gIlNLSVAiCisgICAgICAgIFNLSVBQRUQ9JCgoICRTS0lQUEVEICsgMSApKQorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgIyBydW4gdGhlIGNvbW1hbmQgYW5kIGludGVycHJldCByZXN1bHQKKyAgICBjYXNlICQxIGluCisgICAgICAgIFtPb11wZW4qKQorICAgICAgICAgICAgQ0xJRU5UX0NNRD0iJE9QRU5TU0xfQ01EIHNfY2xpZW50ICRPX0NMSUVOVF9BUkdTIC1jaXBoZXIgJDIiCisgICAgICAgICAgICBsb2cgIiRDTElFTlRfQ01EIgorICAgICAgICAgICAgZWNobyAiJENMSUVOVF9DTUQiID4gJENMSV9PVVQKKyAgICAgICAgICAgIHByaW50ZiAnR0VUIEhUVFAvMS4wXHJcblxyXG4nIHwgJENMSUVOVF9DTUQgPj4gJENMSV9PVVQgMj4mMSAmCisgICAgICAgICAgICB3YWl0X2NsaWVudF9kb25lCisKKyAgICAgICAgICAgIGlmIFsgJEVYSVQgLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIFJFU1VMVD0wCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIyBJZiB0aGUgY2lwaGVyIGlzbid0IHN1cHBvcnRlZC4uLiAKKyAgICAgICAgICAgICAgICBpZiBncmVwICdDaXBoZXIgaXMgKE5PTkUpJyAkQ0xJX09VVCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIFJFU1VMVD0xCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBSRVNVTFQ9MgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKworICAgICAgICBbR2ddbnUqKQorICAgICAgICAgICAgIyBuZWVkIHRvIGZvcmNlIElQdjQgd2l0aCBVRFAsIGJ1dCBrZWVwIGxvY2FsaG9zdCBmb3IgYXV0aAorICAgICAgICAgICAgaWYgaXNfZHRscyAiJE1PREUiOyB0aGVuCisgICAgICAgICAgICAgICAgR19IT1NUPSIxMjcuMC4wLjEiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgR19IT1NUPSJsb2NhbGhvc3QiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgQ0xJRU5UX0NNRD0iJEdOVVRMU19DTEkgJEdfQ0xJRU5UX0FSR1MgLS1wcmlvcml0eSAkR19QUklPX01PREU6JDIgJEdfSE9TVCIKKyAgICAgICAgICAgIGxvZyAiJENMSUVOVF9DTUQiCisgICAgICAgICAgICBlY2hvICIkQ0xJRU5UX0NNRCIgPiAkQ0xJX09VVAorICAgICAgICAgICAgcHJpbnRmICdHRVQgSFRUUC8xLjBcclxuXHJcbicgfCAkQ0xJRU5UX0NNRCA+PiAkQ0xJX09VVCAyPiYxICYKKyAgICAgICAgICAgIHdhaXRfY2xpZW50X2RvbmUKKworICAgICAgICAgICAgaWYgWyAkRVhJVCAtZXEgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgUkVTVUxUPTAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBSRVNVTFQ9MgorICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0IGVhcmx5IGZhaWx1cmUsIHdpdGggYSBoYW5kc2hha2VfZmFpbHVyZSBhbGVydAorICAgICAgICAgICAgICAgICMgYmVmb3JlIHRoZSBzZXJ2ZXIgaGVsbG8sIGFzICJubyBjaXBoZXJzdWl0ZSBpbiBjb21tb24iCisgICAgICAgICAgICAgICAgaWYgZ3JlcCAtRiAnUmVjZWl2ZWQgYWxlcnQgWzQwXTogSGFuZHNoYWtlIGZhaWxlZCcgJENMSV9PVVQ7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JlcCAtaSAnU0VSVkVSIEhFTExPIC4qIHdhcyByZWNlaXZlZCcgJENMSV9PVVQ7IHRoZW4gOgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQ9MQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpID4vZGV2L251bGwKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworCisgICAgICAgIG1iZWQqKQorICAgICAgICAgICAgQ0xJRU5UX0NNRD0iJE1fQ0xJICRNX0NMSUVOVF9BUkdTIGZvcmNlX2NpcGhlcnN1aXRlPSQyIgorICAgICAgICAgICAgaWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgQ0xJRU5UX0NNRD0idmFsZ3JpbmQgLS1sZWFrLWNoZWNrPWZ1bGwgJENMSUVOVF9DTUQiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbG9nICIkQ0xJRU5UX0NNRCIKKyAgICAgICAgICAgIGVjaG8gIiRDTElFTlRfQ01EIiA+ICRDTElfT1VUCisgICAgICAgICAgICAkQ0xJRU5UX0NNRCA+PiAkQ0xJX09VVCAyPiYxICYKKyAgICAgICAgICAgIHdhaXRfY2xpZW50X2RvbmUKKworICAgICAgICAgICAgY2FzZSAkRVhJVCBpbgorICAgICAgICAgICAgICAgICMgU3VjY2VzcworICAgICAgICAgICAgICAgICIwIikgICAgUkVTVUxUPTAgICAgOzsKKworICAgICAgICAgICAgICAgICMgQ2lwaGVyc3VpdGUgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICIyIikgICAgUkVTVUxUPTEgICAgOzsKKworICAgICAgICAgICAgICAgICMgRXJyb3IKKyAgICAgICAgICAgICAgICAqKSAgICAgIFJFU1VMVD0yICAgIDs7CisgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgIGlmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIGlmIGlzX21iZWR0bHMgIiRDTElFTlRfQ01EIiAmJiBoYXNfbWVtX2VyciAkQ0xJX09VVDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBSRVNVTFQ9MgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJlcnJvcjogaW52YWxpZCBjbGllbnQgbmFtZTogJDEiID4mMgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKKworICAgIGVjaG8gIkVYSVQ6ICRFWElUIiA+PiAkQ0xJX09VVAorCisgICAgIyByZXBvcnQgYW5kIGNvdW50IHJlc3VsdAorICAgIGNhc2UgJFJFU1VMVCBpbgorICAgICAgICAiMCIpCisgICAgICAgICAgICBlY2hvIFBBU1MKKyAgICAgICAgICAgIDs7CisgICAgICAgICIxIikKKyAgICAgICAgICAgIGVjaG8gU0tJUAorICAgICAgICAgICAgU0tJUFBFRD0kKCggJFNLSVBQRUQgKyAxICkpCisgICAgICAgICAgICA7OworICAgICAgICAiMiIpCisgICAgICAgICAgICBlY2hvIEZBSUwKKyAgICAgICAgICAgIGNwICRTUlZfT1VUIGMtc3J2LSR7VEVTVFN9LmxvZworICAgICAgICAgICAgY3AgJENMSV9PVVQgYy1jbGktJHtURVNUU30ubG9nCisgICAgICAgICAgICBlY2hvICIgICEgb3V0cHV0cyBzYXZlZCB0byBjLXNydi0ke1RFU1RTfS5sb2csIGMtY2xpLSR7VEVTVFN9LmxvZyIKKworICAgICAgICAgICAgaWYgWyAiWCR7VVNFUjotfSIgPSBYYnVpbGRib3QgLW8gIlgke0xPR05BTUU6LX0iID0gWGJ1aWxkYm90IF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICIgICEgc2VydmVyIG91dHB1dDoiCisgICAgICAgICAgICAgICAgY2F0IGMtc3J2LSR7VEVTVFN9LmxvZworICAgICAgICAgICAgICAgIGVjaG8gIiAgISA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgICAgICAgICAgICAgZWNobyAiICAhIGNsaWVudCBvdXRwdXQ6IgorICAgICAgICAgICAgICAgIGNhdCBjLWNsaS0ke1RFU1RTfS5sb2cKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIEZBSUxFRD0kKCggJEZBSUxFRCArIDEgKSkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgcm0gLWYgJENMSV9PVVQKK30KKworIworIyBNQUlOCisjCisKK2lmIGNkICQoIGRpcm5hbWUgJDAgKTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiY2QgJCggZGlybmFtZSAkMCApIGZhaWxlZCIgPiYyCisgICAgZXhpdCAxCitmaQorCitnZXRfb3B0aW9ucyAiJEAiCisKKyMgc2FuaXR5IGNoZWNrcywgYXZvaWQgYW4gYXZhbGFuY2hlIG9mIGVycm9ycworaWYgWyAhIC14ICIkTV9TUlYiIF07IHRoZW4KKyAgICBlY2hvICJDb21tYW5kICckTV9TUlYnIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGUiID4mMgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAteCAiJE1fQ0xJIiBdOyB0aGVuCisgICAgZWNobyAiQ29tbWFuZCAnJE1fQ0xJJyBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIGVjaG8gIiRQRUVSUyIgfCBncmVwIC1pIG9wZW5zc2wgPiAvZGV2L251bGw7IHRoZW4KKyAgICBpZiB3aGljaCAiJE9QRU5TU0xfQ01EIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBlY2hvICJDb21tYW5kICckT1BFTlNTTF9DTUQnIG5vdCBmb3VuZCIgPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitpZiBlY2hvICIkUEVFUlMiIHwgZ3JlcCAtaSBnbnV0bHMgPiAvZGV2L251bGw7IHRoZW4KKyAgICBmb3IgQ01EIGluICIkR05VVExTX0NMSSIgIiRHTlVUTFNfU0VSViI7IGRvCisgICAgICAgIGlmIHdoaWNoICIkQ01EIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICAgICAgZWNobyAiQ29tbWFuZCAnJENNRCcgbm90IGZvdW5kIiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKK2ZpCisKK2ZvciBQRUVSIGluICRQRUVSUzsgZG8KKyAgICBjYXNlICIkUEVFUiIgaW4KKyAgICAgICAgbWJlZCp8W09vXXBlbip8W0dnXW51KikKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJVbmtub3duIHBlZXJzOiAkUEVFUiIgPiYyCisgICAgICAgICAgICBleGl0IDEKKyAgICBlc2FjCitkb25lCisKKyMgUGljayBhICJ1bmlxdWUiIHBvcnQgaW4gdGhlIHJhbmdlIDEwMDAwLTE5OTk5LgorUE9SVD0iMDAwMCQkIgorUE9SVD0iMSQoZWNobyAkUE9SVCB8IHRhaWwgLWMgNSkiCisKKyMgQWxzbyBwaWNrIGEgdW5pcXVlIG5hbWUgZm9yIGludGVybWVkaWF0ZSBmaWxlcworU1JWX09VVD0ic3J2X291dC4kJCIKK0NMSV9PVVQ9ImNsaV9vdXQuJCQiCisKKyMgY2xpZW50IHRpbWVvdXQgZGVsYXk6IGJlIG1vcmUgcGF0aWVudCB3aXRoIHZhbGdyaW5kCitpZiBbICIkTUVNQ0hFQ0siIC1ndCAwIF07IHRoZW4KKyAgICBET0dfREVMQVk9MzAKK2Vsc2UKKyAgICBET0dfREVMQVk9MTAKK2ZpCisKK1NLSVBfTkVYVD0iTk8iCisKK3RyYXAgY2xlYW51cCBJTlQgVEVSTSBIVVAKKworZm9yIFZFUklGWSBpbiAkVkVSSUZJRVM7IGRvCisgICAgZm9yIE1PREUgaW4gJE1PREVTOyBkbworICAgICAgICBmb3IgVFlQRSBpbiAkVFlQRVM7IGRvCisgICAgICAgICAgICBmb3IgUEVFUiBpbiAkUEVFUlM7IGRvCisKKyAgICAgICAgICAgIHNldHVwX2FyZ3VtZW50cworCisgICAgICAgICAgICBjYXNlICIkUEVFUiIgaW4KKworICAgICAgICAgICAgICAgIFtPb11wZW4qKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRPU1NMX05PX0RUTFMiIC1ndCAwICYmIGlzX2R0bHMgIiRNT0RFIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICAgICAgcmVzZXRfY2lwaGVyc3VpdGVzCisgICAgICAgICAgICAgICAgICAgIGFkZF9jb21tb25fY2lwaGVyc3VpdGVzCisgICAgICAgICAgICAgICAgICAgIGFkZF9vcGVuc3NsX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfY2lwaGVyc3VpdGVzCisKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiWCIgIT0gIlgkTV9DSVBIRVJTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zZXJ2ZXIgIk9wZW5TU0wiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiAkTV9DSVBIRVJTOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX29wZW5zc2xfc2VydmVyX2J1ZyAkaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9jbGllbnQgbWJlZFRMUyAkaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9zZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICAgICBpZiBbICJYIiAhPSAiWCRPX0NJUEhFUlMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3NlcnZlciAibWJlZFRMUyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluICRPX0NJUEhFUlM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2NsaWVudCBPcGVuU1NMICRpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3NlcnZlcgorICAgICAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICBbR2ddbnUqKQorCisgICAgICAgICAgICAgICAgICAgIHJlc2V0X2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfY29tbW9uX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfZ251dGxzX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfY2lwaGVyc3VpdGVzCisKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiWCIgIT0gIlgkTV9DSVBIRVJTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zZXJ2ZXIgIkdudVRMUyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluICRNX0NJUEhFUlM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX2NsaWVudCBtYmVkVExTICRpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wX3NlcnZlcgorICAgICAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIlgiICE9ICJYJEdfQ0lQSEVSUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc2VydmVyICJtYmVkVExTIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gJEdfQ0lQSEVSUzsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fY2xpZW50IEdudVRMUyAkaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9zZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgbWJlZCopCisKKyAgICAgICAgICAgICAgICAgICAgcmVzZXRfY2lwaGVyc3VpdGVzCisgICAgICAgICAgICAgICAgICAgIGFkZF9jb21tb25fY2lwaGVyc3VpdGVzCisgICAgICAgICAgICAgICAgICAgIGFkZF9vcGVuc3NsX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfZ251dGxzX2NpcGhlcnN1aXRlcworICAgICAgICAgICAgICAgICAgICBhZGRfbWJlZHRsc19jaXBoZXJzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2NpcGhlcnN1aXRlcworCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIlgiICE9ICJYJE1fQ0lQSEVSUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc2VydmVyICJtYmVkVExTIgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gJE1fQ0lQSEVSUzsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fY2xpZW50IG1iZWRUTFMgJGkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Bfc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIlVua25vd24gcGVlcjogJFBFRVIiID4mMgorICAgICAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIGVzYWMKKworICAgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgZG9uZQorZG9uZQorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisKK2lmIFsgJEZBSUxFRCAtbmUgMCAtbyAkU1JWTUVNIC1uZSAwIF07Cit0aGVuCisgICAgcHJpbnRmICJGQUlMRUQiCitlbHNlCisgICAgcHJpbnRmICJQQVNTRUQiCitmaQorCitpZiBbICIkTUVNQ0hFQ0siIC1ndCAwIF07IHRoZW4KKyAgICBNRU1SRVBPUlQ9IiwgJFNSVk1FTSBzZXJ2ZXIgbWVtb3J5IGVycm9ycyIKK2Vsc2UKKyAgICBNRU1SRVBPUlQ9IiIKK2ZpCisKK1BBU1NFRD0kKCggJFRFU1RTIC0gJEZBSUxFRCApKQorZWNobyAiICgkUEFTU0VEIC8gJFRFU1RTIHRlc3RzICgkU0tJUFBFRCBza2lwcGVkJE1FTVJFUE9SVCkpIgorCitGQUlMRUQ9JCgoICRGQUlMRUQgKyAkU1JWTUVNICkpCitleGl0ICRGQUlMRUQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL1JlYWRtZS14NTA5LnR4dCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL1JlYWRtZS14NTA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODBkNjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvUmVhZG1lLXg1MDkudHh0CkBAIC0wLDAgKzEsOTMgQEAKK1RoaXMgZG9jdW1lbnRzIHRoZSBYLjUwOSBDQXMsIGNlcnRpZmljYXRlcywgYW5kIENSTFMgdXNlZCBmb3IgdGVzdGluZy4KKworQ2VydGlmaWNhdGlvbiBhdXRob3JpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdHdvIG1haW4gQ0FzIGZvciB1c2UgYXMgdHJ1c3RlZCByb290czoKKy0gdGVzdC1jYS5jcnQgYWthICJDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBIgorICB1c2VzIGEgUlNBLTIwNDgga2V5CistIHRlc3QtY2EyKi5jcnQgYWthICJDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBIgorICB1c2VzIGFuIEVDIGtleSB3aXRoIE5JU1QgUC0zODQgKGFrYSBzZWNwMzg0cjEpCisgIHZhcmlhbnRzIHVzZWQgdG8gdGVzdCB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uCitUaGUgZmlsZXMgdGVzdC1jYV9jYXQxMiBhbmQgdGVzdC1jYV9jYXQyMSBjb250YWluIHRoZW0gY29uY2F0ZW5hdGVkIGJvdGggd2F5cy4KKworVHdvIGludGVybWVkaWF0ZSBDQXMgYXJlIHNpZ25lZCBieSB0aGVtOgorLSB0ZXN0LWludC1jYS5jcnQgIkM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRpYXRlIENBIgorICB1c2VzIFJTQS00MDk2LCBzaWduZWQgYnkgdGVzdC1jYTIKKy0gdGVzdC1pbnQtY2EyLmNydCAiQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBJbnRlcm1lZGlhdGUgRUMgQ0EiCisgIHVzZXMgYW4gRUMga2V5IHdpdGggTklTVCBQLTI1Niwgc2lnbmVkIGJ5IHRlc3QtY2EKKworQSB0aGlyZCBpbnRlcm1lZGlhdGUgQ0EgaXMgc2lnbmVkIGJ5IHRlc3QtaW50LWNhMi5jcnQ6CistIHRlc3QtaW50LWNhMy5jcnQgIkM9VUssIE89bWJlZCBUTFMsIENOPW1iZWQgVExTIFRlc3QgaW50ZXJtZWRpYXRlIENBIDMiCisKK0ZpbmFsbHksIG90aGVyIENBcyBmb3Igc3BlY2lmaWMgcHVycG9zZXM6CistIGVuY28tY2EtcHJzdHIucGVtOiBoYXMgaXRzIENOIGVuY29kZWQgYXMgYSBwcmludGFibGUgc3RyaW5nLCBidXQgY2hpbGQgY2VydAorICBlbmNvLWNlcnQtdXRmOHN0ci5wZW0gaGFzIGl0cyBpc3N1ZXIncyBDTiBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nLgorLSB0ZXN0LWNhLXYxLmNydDogdjEgIkNBIiwgc2lnbnMKKyAgICBzZXJ2ZXIxLXYxLmNydDogdjEgImludGVybWVkaWF0ZSBDQSIsIHNpZ25zCisgICAgICAgIHNlcnZlcjItdjEqLmNydDogRUUgY2VydCAod2l0aG91dCBvZiB3aXRoIGNoYWluIGluIHNhbWUgZmlsZSkKKy0ga2V5VXNhZ2UuZGVjaXBoZXJPbmx5LmNydDogaGFzIHRoZSBkZWNpcGhlck9ubHkga2V5VXNhZ2UgYml0IHNldAorCitFbmQtZW50aXR5IGNlcnRpZmljYXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2hvcnQgaW5mb3JtYXRpb24gZmllbGRzOgorCistIG5hbWUgb3IgcGF0dGVybgorLSBpc3N1aW5nIENBOiAgIDEgICAtPiB0ZXN0LWNhLmNydAorICAgICAgICAgICAgICAgIDIgICAtPiB0ZXN0LWNhMi5jcnQKKyAgICAgICAgICAgICAgICBJMSAgLT4gdGVzdC1pbnQtY2EuY3J0CisgICAgICAgICAgICAgICAgSTIgIC0+IHRlc3QtaW50LWNhMi5jcnQKKyAgICAgICAgICAgICAgICBJMyAgLT4gdGVzdC1pbnQtY2EzLmNydAorICAgICAgICAgICAgICAgIE8gICAtPiBvdGhlcgorLSBrZXkgdHlwZTogUiAtPiBSU0EsIEUgLT4gRUMKKy0gQyAtPiB0aGVyZSBpcyBhIENSTCByZXZva2luZyB0aGlzIGNlcnQgKHNlZSBiZWxvdykKKy0gTCAtPiBDTj1sb2NhbGhvc3QgKHVzZWZ1bCBmb3IgbG9jYWwgdGVzdCBzZXJ2ZXJzKQorLSBQMSwgUDIgaWYgdGhlIGZpbGUgaW5jbHVkZXMgcGFyZW50IChyZXNwLiBwYXJlbnQgKyBncmFuZHBhcmVudCkKKy0gZnJlZS1mb3JtIGNvbW1lbnRzCisKK0xpc3Qgb2YgY2VydGlmaWNhdGVzOgorCistIGNlcnRfZXhhbXBsZV9tdWx0aSouY3J0OiAxL08gUjogc3ViamVjdEFsdE5hbWUKKy0gY2VydF9leGFtcGxlX3dpbGRjYXJkLmNydDogMSBSOiB3aWxkY2FyZCBpbiBzdWJqZWN0J3MgQ04KKy0gY2VydF9tZCouY3J0LCBjZXJ0X3NoYSouY3J0OiAxIFI6IHNpZ25hdHVyZSBoYXNoCistIGNlcnRfdjFfd2l0aF9leHQuY3J0OiAxIFI6IHYxIHdpdGggZXh0ZW5zaW9ucyAoaWxsZWdhbCkKKy0gY2xpMi5jcnQ6IDIgRTogYmFzaWMKKy0gZW5jby1jZXJ0LXV0ZjhzdHIucGVtOiBzZWUgZW5jby1jYS1wcnN0ci5wZW0gYWJvdmUKKy0gc2VydmVyMSouY3J0OiAxKiBSIEMqIFAxKjogbWlzYyAqKHNlcnZlcjEtdjEgc2VlIHRlc3QtY2EtdjEuY3J0IGFib3ZlKQorICAgICpDUkwgZm9yOiAuY2VydF90eXBlLmNydCwgLmNydCwgLmtleV91c2FnZS5jcnQsIC52MS5jcnQKKyAgICBQMSBvbmx5IGZvciBfY2EuY3J0CistIHNlcnZlcjItdjEqLmNydDogTyBSOiBzZWUgdGVzdC1jYS12MS5jcnQgYWJvdmUKKy0gc2VydmVyMiouY3J0OiAxIFIgTDogbWlzYworLSBzZXJ2ZXIzLmNydDogMSBFIEw6IEVDIGNlcnQgc2lnbmVkIGJ5IFJTQSBDQQorLSBzZXJ2ZXI0LmNydDogMiBSIEw6IFJTQSBjZXJ0IHNpZ25lZCBieSBFQyBDQQorLSBzZXJ2ZXI1Ki5jcnQ6IDIqIEUgTDogbWlzYyAqKGV4Y2VwdCBzZXJ2ZXI1LXNlbGZzaWduZWQpCisgICAgLXNoYSo6IGhhc2hlcworICAgIC1la3UqOiBleHRlbmRlS2V5VXNhZ2UgKGNsaS9zcnYgPSB3d3cgY2xpZW50L3NlcnZlciwgY3MgPSBjb2Rlc2lnbiwgZXRjKQorICAgIC1rdSo6IGtleVVzYWdlIChkcyA9IHNpZ25hdHVyZXMsIGtlL2thID0ga2V5IGV4Y2hhbmdlL2FncmVlbWVudCkKKy0gc2VydmVyNi1zcy1jaGlsZC5jcnQ6IE8gRTogImNoaWxkIiBvZiBub24tQ0Egc2VydmVyNS1zZWxmc2lnbmVkCistIHNlcnZlcjYuY3J0LCBzZXJ2ZXI2LnBlbTogMiBFIEwgQzogcmV2b2tlZAorLSBzZXJ2ZXI3Ki5jcnQ6IEkxIEUgTCBQMSo6IEVDIHNpZ25lZCBieSBSU0Egc2lnbmVkIGJ5IEVDCisgICAgKlAxIGV4Y2VwdCA3LmNydCwgUDIgX2ludC1jYV9jYTIuY3J0CisgICAgKl9zcGFjZTogd2l0aCBQRU0gZXJyb3IocykKKy0gc2VydmVyOCouY3J0OiBJMiBSIEw6IFJTQSBzaWduZWQgYnkgRUMgc2lnbmVkIGJ5IFJTQSAoUDEgZm9yIF9pbnQtY2EyKQorLSBzZXJ2ZXI5Ki5jcnQ6IDEgUiBDKiBMIFAxKjogc2lnbmVkIHVzaW5nIFJTQVNTQS1QU1MKKyAgICAqQ1JMIGZvcjogOS5jcnQsIC1iYWRzaWduLCAtd2l0aC1jYSAoUDEpCistIHNlcnZlcjEwKi5jcnQ6IEkzIEUgTCBQMi9QMworCitDZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpZ25pbmcgQ0EgaW4gcGFyZW50aGVzZXMgKHNhbWUgbWVhbmluZyBhcyBjZXJ0aWZpY2F0ZXMpLgorCistIGNybC1lYy1zaGEqLnBlbTogKDIpIHNlcnZlcjYuY3J0CistIGNybC1mdXR1cmUucGVtOiAoMikgc2VydmVyNi5jcnQgKyB1bmtub3duCistIGNybC1yc2EtcHNzLSoucGVtOiAoMSkgc2VydmVyOXssYmFkc2lnbix3aXRoLWNhfS5jcnQgKyBjZXJ0X3NoYTM4NC5jcnQgKyB1bmtub3duCistIGNybC5wZW0sIGNybF9leHBpcmVkLnBlbTogKDEpIHNlcnZlcjF7LC5jZXJ0X3R5cGUsLmtleV91c2FnZSwudjF9LmNydCArIHVua25vd24KKy0gY3JsX21kKi5wZW06IGNybF9zaGEqLnBlbTogKDEpIHNhbWUgYXMgY3JsLnBlbQorLSBjcnRfY2F0XyoucGVtOiAoMSsyKSBjb25jYXRlbmF0aW9ucyBpbiB2YXJpb3VzIG9yZGVyczoKKyAgICBlYyA9IGNybC1lYy1zaGEyNTYucGVtLCBlY2Z1dCA9IGNybC1mdXR1cmUucGVtCisgICAgcnNhID0gY3JsLnBlbSwgcnNhYmFkcGVtID0gc2FtZSB3aXRoIHBlbSBlcnJvciwgcnNhZXhwID0gY3JsX2V4cGlyZWQucGVtCisKK05vdGU6IGNybF9mdXR1cmUgd291bGQgcmV2b2tlIHNlcnZlcjkgYW5kIGNlcnRfc2hhMzg0LmNydCBpZiBzaWduZWQgYnkgQ0EgMQorICAgICAgY3JsLXJzYS1wc3MqIHdvdWxkIHJldm9rZSBzZXJ2ZXI2LmNydCBpZiBzaWduZWQgYnkgQ0EgMgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvYml0c3RyaW5nLWluLWRuLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2JpdHN0cmluZy1pbi1kbi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5OGFhMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2JpdHN0cmluZy1pbi1kbi5wZW0KQEAgLTAsMCArMSw1MSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQorTUlJRUFUQ0NBdW1nQXdJQkFnSUJBakFOQmdrcWhraUc5dzBCQVFVRkFEQnhNUk13RVFZRFZRUUREQXBVWlhOMA0KK0lFTkJJREF4TVJFd0R3WURWUVFJREFoRlkyNXBkbTl5Y0RFTE1Ba0dBMVVFQmhNQ1dGZ3hIakFjQmdrcWhraUcNCis5dzBCQ1FFV0QzUmpZVUJsZUdGdGNHeGxMbU52YlRFYU1CZ0dBMVVFQ2d3UlZHVnpkQ0JEUVNCQmRYUm9iM0pwDQorZEhrd0hoY05NVFV3TXpFeE1USXdOalV4V2hjTk1qVXdNekE0TVRJd05qVXhXakNCbXpFTE1Ba0dBMVVFQmhNQw0KK1dGZ3hEREFLQmdOVkJBb01BM1JqWVRFUk1BOEdBMVVFQ0F3SVJXTnVhWFp2Y25BeEREQUtCZ05WQkFzTUExUkQNCitRVEVQTUEwR0ExVUVBd3dHUTJ4cFpXNTBNU0V3SHdZSktvWklodmNOQVFrQkZoSmpiR2xsYm5SQVpYaGhiWEJzDQorWlM1amIyMHhFekFSQmdOVkJBVVRDamN4TURFd01USXlOVFV4RkRBU0JnTlZCQzBEQ3dBM01UQXhNREV5TWpVMQ0KK01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBblFTMEpMYjhEcXk4VjJtc3prV2sNCitWOGMvTlBRY0czaXZ1ZVhaSHFPVDlKVGlQcXJpZ0djTEh0bG1sYUowYVVVeGl4N3E2MGFPZHMwNDFURnlla25UDQorU1VGWVk0cHBPaGlQK2ZPcFdLUHY0Wk13aFNJMlh6Y2dZaFFTTkhWMGxJRzF3ZTlSQUFmdW1vbURNcTdvTUpoYg0KK0VHZjBpaGliYndaWFBVd0JsbTEwR2FCNEs5M1BOWThCejRla0J4elExV0prUTVMR3NRblZaU3VMbnZwNWRXU2UNCitKMmF4eHlZNGhQWFIzMGp6RXladnk0a3Y0bnpBdTVscVo1WEtMclJPNFRLd1pydHIrQ0NQVmtQSlJFMzZyV1l0DQordFFhSkVFcE5PbzBaUHBUdEc2RjgvdEdoNXI4akZ4L2Y2d0crbnlBTkpKOThrRVA4aTZUUGpScmcrNjk3bUxjZA0KK2lRSURBUUFCbzNrd2R6QUpCZ05WSFJNRUFqQUFNRFlHQTFVZEh3UXZNQzB3SzZBcG9DZUdKV2gwZEhBNkx5OWoNCitjbXd1WlhoaGJYQnNaUzVqYjIwdmRHVnpkRjlqWVY4d01TNWpjbXd3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIDQorQXdJd0hRWURWUjBSQkJZd0ZJRVNZMnhwWlc1MFFHVjRZVzF3YkdVdVkyOXRNQTBHQ1NxR1NJYjNEUUVCQlFVQQ0KK0E0SUJBUUJ5U0VMQ25VOC9QdEdJRzNkd2hKRU5PU1U1Ujd3OGpwUlh4SEN1U0JSK1c2bnVVQ0lTeit6K0VkRi8NCitBN0FPSkRBU3VTKzRna3JTU21RaEdGcGY3RTVWYkY4dHJWWmhMQVpyWHFLTWNVcmVLSDZ2MEk4TUFVWG1JczNHDQordHFpQkdmN3BTWUpOOUR2Vk9PZ0FOamR5NlRIdVV6WXY1cVN2Qlo0cE5ZRWZIU2xNTnJWN25peW5kOGRnUE9NTA0KK3BBN0dVZnY1azJtTWtNYlNEMTVwVE1nY2F2ckJLWWd5cWN2RjFDM3FnaGZvTDUraTM4SDhzS3pGOGh5N3dIdEUNCitFU0h0QnEyMFJZQTNtMFVjQTBlNjRHY2FuTzJQcy9BUVZCYzdxTWVIYnFucWozdVVodFRrUWNNVVduTWd5MU5SDQorNVJiem9MTU94cTdob09DeUlhUWVNL3dneGVHRQ0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0NCistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tDQorTUlJRXBBSUJBQUtDQVFFQW5RUzBKTGI4RHF5OFYybXN6a1drVjhjL05QUWNHM2l2dWVYWkhxT1Q5SlRpUHFyaQ0KK2dHY0xIdGxtbGFKMGFVVXhpeDdxNjBhT2RzMDQxVEZ5ZWtuVFNVRllZNHBwT2hpUCtmT3BXS1B2NFpNd2hTSTINCitYemNnWWhRU05IVjBsSUcxd2U5UkFBZnVtb21ETXE3b01KaGJFR2YwaWhpYmJ3WlhQVXdCbG0xMEdhQjRLOTNQDQorTlk4Qno0ZWtCeHpRMVdKa1E1TEdzUW5WWlN1TG52cDVkV1NlSjJheHh5WTRoUFhSMzBqekV5WnZ5NGt2NG56QQ0KK3U1bHFaNVhLTHJSTzRUS3dacnRyK0NDUFZrUEpSRTM2cldZdHRRYUpFRXBOT28wWlBwVHRHNkY4L3RHaDVyOGoNCitGeC9mNndHK255QU5KSjk4a0VQOGk2VFBqUnJnKzY5N21MY2RpUUlEQVFBQkFvSUJBRjdpM01uakdtYnowODB2DQorT3hKYjIzaUFHNTR3ZGx2VGpyM1VQR1RialNtY1h5eG5zQURRUkZRY0pIWUFla0N6WThFaXFld0w4ME92dU14OA0KKzJTVTFQODFoQTcwRGc1dHNCSFdUM1o2SFV3c0tHNlFZaktyMWNVaFR3THlhemh5QVZnb2dTTjZ2N0d6TzlNM0kNCitET0J3OFhiMG16NW9xR1ZyZTRTN1RhcE44bjhaRzVvV20wWEtHQUNYeTBLYnpZMEt2V2RrVXp1bUZROFgvQVJFDQorRnNXeXUrTzY5RWJNcVpSVUt1NDVTcmN1YnNkVkdqT3dzZVpIa21wNVY2cGM2US9PclRIWnFYSnREdmE1VUlScQ0KKytMb2Y1c2N5OWppd3dSbk0va2x2aDIzbXoweVNVNFlBMzY0NW01S3F5V1I0WUpDUjFNbk1BTm1YVVNlWVdmWXoNCisxOStSMWdFQ2dZRUF6bTgzbEk3ZUloVEgzOEgwL2pGcGYzUjd2TmpQWDNUUjV3YWE0RVhzQ3hoVE9wb0w4OW1SDQoraU5tekgwYU9DNE9SOHJ6LzlQQ253bXRIMWx5UTRyL1Jva0JtQ3AzcEJ4ZVdTbGVuRmZWM3JMQ2VFRG8wUS9PTA0KK1NYNURMNEliWkQwVm1ORHQ2MDZXUzdBRXY5M0docE4wM0FudzZrZ0hRVW0xbDAzMFBSOURZWkVDZ1lFQXdyZ08NCisvUnlCL0VodzdzbWx5c1piMnNuMWx2ZDZ6OGZnK3BjdThaTlJLT0RhWUNDT2I4cDFsbkhybklRZEVtamhsbVZwDQorSEFFdUo1anhDYitseXJ1VitkbHgrMFcvcDZsSHRLcjBpQkhHOEVGa0huak42WSs1OVF1MEhmU20wcFp3N0Z0cg0KK1FjVURQdURKa1RWVUF2clpxY2lXbHd6VFdDQzlLWVh0YXNUK0FIa0NnWUVBblA4MGRBVWJweXZLdnIvUnhTaHINCitKWVcvUFdaZWdDaG1JcCtCVmlPWFd2RExDM3h3cnFtKzV5YzU5UVZCcmp3SDJXWW4rMjZ6QjBkendQRnhOeUhQDQorR3VpRE1udlo1NHptdmU5Zm9YR243R3YrS2pVNTNwdndTSnFBR2plSEFYcjdXOWM1dW9Wd0JHdi9rTFBuOGgxZQ0KKytLR08yWDZpRmVNcStjRk5pTmFuOWlFQ2dZQmorb0duc0tXRlZlUzJsczhMeU1HTkd6bUFaRjJvcGlaOFJIZ1UNCitEZUlVTFMrelA4UWkzajkyR2RReUx4dUdRbGZpRXZ2Zkp6UDluT2ZXYTVMQy80SklJVUFIRm84TGxUMStKSEVlDQorRkpLaTlkQmtYUDdOTjhEeGN5cnVYcG54Y3RGVWFyUXR0dXl0c2xtTXQyY0ZpS3VPSTdJK3FKVXpvTXUvc0VaeA0KK0ZlaWRjUUtCZ1FDdXJhbG10Ymw0bnhqbjNhUi9aZ0ZUQUtDTDlXYUpQaDVoRko5cTRVdVd4SmRCWDV6M0V5My8NCis3MGVoTEtZUHVtam1adFh5bnp6NEJUV2oxVzlYK3Rnai80OTl1elY2TGRRRVJHalQ2V1Z5OHhSOVJFTFdXMGFuDQorTjlOMUlBYzRxVFNqYkk0RUlNd01CU0FvRmZDdXgvamZEa0c0ZytSRG5wVjkyc3F4ejJDdEtnPT0NCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTE5OTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0CkBAIC0wLDAgKzEsODAgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTcgKDB4MTEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogTWF5IDEwIDEzOjIzOjQxIDIwMTIgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBNYXkgMTEgMTM6MjM6NDEgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049d3d3LmV4YW1wbGUuY29tCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWU6IAorICAgICAgICAgICAgICAgIEROUzpleGFtcGxlLmNvbSwgRE5TOmV4YW1wbGUubmV0LCBETlM6Ki5leGFtcGxlLm9yZworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgNGY6MDk6Y2I6N2E6ZDU6ZWU6ZjU6ZWY6NjI6MGQ6ZGM6N2I6YTI6ODU6ZDY6OGM6Y2E6OTU6CisgICAgICAgICBiNDo2YjpkYToxMTo1Yjo5MjowMDo3NToxMzpiOTpjYTowYjpjZTplYTpmYjpjMzoxZjplMjoKKyAgICAgICAgIDNmOjdmOjIxOjc0Ojc5OmUyOmU2OmJjOmRhOjA2OmU1OjJmOjZmOmY2OjU1OmM2OjczOjM5OgorICAgICAgICAgY2Y6NDg6YmM6MGQ6MmY6MGM6ZDI6N2E6MDY6YzM6NGE6NGM6ZDk6NDg6NWQ6YTA6ZDA6NzM6CisgICAgICAgICA4OTplNDpkNDo4NToxZDo5Njo5YTowZTo1Nzo5OTpjNjo2ZjoxZDoyMToyNzoxZjo4ZDowNToKKyAgICAgICAgIDI5OmU4OjQwOmFlOjgyOjM5OjY4OmMzOjk3OjA3OmNmOjNjOjkzOjRjOjFhOmRmOjJmOmE2OgorICAgICAgICAgYTQ6NTU6NDg6N2Y6N2M6OGM6MWE6Yzk6MjI6ZGE6MjQ6Y2Q6OTI6Mzk6YzY6OGE6ZWM6YjA6CisgICAgICAgICA4ZDpmNTo2OTo4Mjo2NzpjYjowNDplZTpkZTo1Mzo0MTo5NjpjMToyNzpkYzoyZjpmZTozMzoKKyAgICAgICAgIGZhOmQzOjBlOmI4OmQ0OjMyOmE5Ojg0OjI4OjUzOmE1OmYwOmQxOjg5OmQ1OmEyOjk4OmU3OgorICAgICAgICAgMTY6OTE6YmI6OWM6YzA6NDE6OGU6OGM6NTg6YWM6ZmY6ZTM6ZGQ6MmU6N2E6YWI6YjA6Yjk6CisgICAgICAgICA3MTo3NjphZDowZjoyNzozMzpmNzphOToyOTpkMzpjMDo3NjpjMDpiZjowNjo0MDo3YzowZToKKyAgICAgICAgIGQ1OmE0OjdjOjhhOmUyOjMyOjZlOjE2OmFlOmRhOjY0OjFmOmIwOjU1OjdjOmRiOmRkOmYxOgorICAgICAgICAgYTQ6YmE6NDQ6N2M6YjM6OTk6NTg6ZDI6MzQ6NmU6MDA6ZWE6OTc6NmM6MTQ6M2E6ZjI6MTA6CisgICAgICAgICAxZTowYTphMjo0OToxMDo3NjowMTpmNDpmMjpjODoxODpmZDpjYzo2Mzo0NjoxMjo4YjowOToKKyAgICAgICAgIDFiOmYxOjk0OmU2CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURjakNDQWxxZ0F3SUJBZ0lCRVRBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01USXdOVEV3TVRNeU16UXhXaGNOTWpJd05URXhNVE15TXpReFdqQTZNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R0RBV0JnTlZCQU1URDNkM2R5NWxlR0Z0Y0d4bExtTnZiVENDQVNJd0RRWUoKK0tvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxrOFNzWElvNDZRRjZTZVVxcHhkU1poZ09mSHRXMk0KKy82cTJRU2EzdmhHdFhITVdER1FSU0FULzF1RTdCZHVKdTdPWENkVWNGTjFvaHptd1BYSEw0bmJRR3RnWUxZQWIKK1ZQYmxSSnJ4eTY5aEx0OUpEWjBKdCsyeC9UejlQUG9rejEyL2ZPUlQ1eVcxNmtRaTZTYlQ2aUNVbnVaaFo3b3UKK0IyY0xBeStpQ2Uzd000OEx6aER2WjZUR0NOckI3Y0kvMTByZEZUMzVYaHlCWUVZK3RiTTlMNmJlUnh5OGtxN3IKKzN5ZHJGbGEzM096UlZWZWxidXgxSmZXM2U5K3IwanBha1poOWx4Y0xFd3FuYTBxTHdVY3crenI0UVFUVndkKzQKK0hiOTdBYVZsb3VBZU5yZW1YTXd3V3ZqTmI4M3hHV0lseWdIak5YLzZJUFhjL1dteWFnQjlGL2NDQXdFQUFhT0IKK2dUQi9NQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRkgza25Hdm0rWEY5UnRJU1BhMXJIZjNDcW5oTU1COEcKK0ExVWRJd1FZTUJhQUZMUmE1S1d6M3RKUzlyblZwcFVQNno2OHgvMy9NRElHQTFVZEVRUXJNQ21DQzJWNFlXMXcKK2JHVXVZMjl0Z2d0bGVHRnRjR3hsTG01bGRJSU5LaTVsZUdGdGNHeGxMbTl5WnpBTkJna3Foa2lHOXcwQkFRVUYKK0FBT0NBUUVBVHduTGV0WHU5ZTlpRGR4N29vWFdqTXFWdEd2YUVWdVNBSFVUdWNvTHp1cjd3eC9pUDM4aGRIbmkKKzVyemFCdVV2Yi9aVnhuTTV6MGk4RFM4TTBub0d3MHBNMlVoZG9OQnppZVRVaFIyV21nNVhtY1p2SFNFbkg0MEYKK0tlaEFyb0k1YU1PWEI4ODhrMHdhM3krbXBGVklmM3lNR3NraTJpVE5ram5HaXV5d2pmVnBnbWZMQk83ZVUwR1cKK3dTZmNMLzR6K3RNT3VOUXlxWVFvVTZYdzBZblZvcGpuRnBHN25NQkJqb3hZclAvajNTNTZxN0M1Y1hhdER5Y3oKKzk2a3AwOEIyd0w4R1FId08xYVI4aXVJeWJoYXUybVFmc0ZWODI5M3hwTHBFZkxPWldOSTBiZ0RxbDJ3VU92SVEKK0hncWlTUkIyQWZUeXlCajl6R05HRW9zSkcvR1U1Zz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGlfbm9jbi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGlfbm9jbi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzNDg0NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aV9ub2NuLmNydApAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUIvVENDQVdhZ0F3SUJBZ0lKQVBmR2YvanBxV1A1TUEwR0NTcUdTSWIzRFFFQkJRVUFNQTB4Q3pBSkJnTlYKK0JBWVRBazVNTUI0WERURTBNREV5TWpFd01EUXpNMW9YRFRJME1ERXlNakV3TURRek0xb3dEVEVMTUFrR0ExVUUKK0JoTUNUa3d3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUmlwK1p1ckJveWlycU8ycHQKK1daZnRUc2xVNUEzdXpxQjlvQjZxNkE3Q3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWHlNckx4ZjZUSGEvYUVpTnoKK1VubEdHcnFnVnl0MkZqR3pxSy9uT0pzSWkyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWW1tTWJOL3ozRkFpZmhXVkoKKzgxa3liZEhnNkczZVV1MW10S2tMMmtDVkFnTUJBQUdqWlRCak1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUEJBUUQKK0FnWGdNRWtHQTFVZEVRUkNNRUNDSEhkM2R5NXphRzkwYjJ0aGJpMWljbUYxYm5OamFIZGxhV2N1WkdXQ0ZIZDMKK2R5NXRZWE56YVcxdkxXRmlZWFJsTG1WMWh3VEFxQUVCaHdUQXFFV1FNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0IKK0FCangxeXRycUN5RkM1LzBjalduYkxLOXZzdkxueTJaaWtEZXdmUnhxSjV6QXhHV0xxSE9yMVNtVW11MkRydkIKK2JrVDlnNXoxOStpTWhQbnpKejF4N1EybTdXVElKVHVVUEsraEtaSkFURExOaFo4Nmg1Tmt3OGs5WXpLY09yUG0KK0VJcXN5NTVDU2dMVTBudGxqcVNCdlNiNGlmckYxTm5JV2VqMmxTZk42ciszCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfd2lsZGNhcmQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX3dpbGRjYXJkLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODk1ZThhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9leGFtcGxlX3dpbGRjYXJkLmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyICgweGMpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAgNyAxNjowNjozNiAyMDEyIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViICA3IDE2OjA2OjM2IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPSouZXhhbXBsZS5jb20KKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA5MTpiMzo4NDo1Yzo1ZDo2MDpmMjphNTowYTo0YTpkYzpkNjpjNjo3NTpkYTozNDo1Mjo3MjoKKyAgICAgICAgNmM6MGU6NjA6NGY6ZWY6MGU6NTU6ZjM6NGI6YmY6ZDA6NDA6ZTc6OTE6MmM6YTc6OTQ6OGY6CisgICAgICAgIDNkOmRiOjBhOmVjOmIyOmY1OjgzOmE3OmExOjMzOjYxOjk2OjM3OjU3OjE0OjgwOjViOmU3OgorICAgICAgICBiYzplMTpkMzoyYzozNjozMjo2ZjplZjo3YTowMDo5OTozMzoxNTpmYzozODoyMDpkZjo3NDoKKyAgICAgICAgN2Q6M2Q6MGY6ODE6ZDA6YjQ6ZmQ6YjY6NDY6ZjE6YzU6Yjg6YmM6ZGU6NzQ6YTI6NDE6YTc6CisgICAgICAgIGM4OjUxOmRhOjIwOjEyOjgyOjNlOjBjOjhjOjQ4OmRhOjE5OmI2OjUyOmU5OjRmOjY3OmMxOgorICAgICAgICAyODo5ZToyMDpiNjpjZTpiZTo4OTpiZDo2NDpkNzowNTozZTo4NzphZjpiYToyYjo1ZDphYToKKyAgICAgICAgZmU6NjI6NjY6ZmI6YTY6NzU6YWQ6ODk6YTE6MTg6ZTg6Nzg6NTQ6ZWE6ZGY6MGE6ODU6ZTk6CisgICAgICAgIDMyOjMyOmE4OjFhOmNkOjM1OjgxOmY4OmE4OmRhOmQxOjE2OjhhOjYzOmU3OjY3OmRhOjZlOgorICAgICAgICBlMTozYjoxYzozMToyMDo5OTplZTplMjpiMjpmYjo4MjpjNToyMTplMjo2Mzo0Yzo2MToxNToKKyAgICAgICAgNGQ6NTM6YWQ6ZGQ6MTU6N2Y6MGI6YjY6MzM6NDM6YWQ6Mjc6OGE6YjE6YWY6OTM6MTc6NzI6CisgICAgICAgIGM0OmJlOjMxOjI2OjkzOjNjOjdkOmZjOmQ1OjNkOmNmOjBiOmJlOmM1OjdiOmU5OmI0OmY4OgorICAgICAgICBmMzozMDpmMjpmNTphMjoyNzplYjo5YTo3MTpmYzo3Zjo3OTo1ZTo4ODpjNTphNjoyZDozMzoKKyAgICAgICAgNTc6YmE6Mzg6MDY6ZTY6YWQ6MGI6OTY6OTc6OWQ6Y2M6OTQ6N2I6ODM6MDk6MTc6YTY6ZWU6CisgICAgICAgIGNlOmJiOjBmOjM2CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURPekNDQWlPZ0F3SUJBZ0lCRERBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01USXdNakEzTVRZd05qTTJXaGNOTWpJd01qQTNNVFl3TmpNMldqQTRNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RmpBVUJnTlZCQU1VRFNvdVpYaGhiWEJzWlM1amIyMHdnZ0VpTUEwR0NTcUcKK1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUM1UEVyRnlLT09rQmVrbmxLcWNYVW1ZWURueDdWdGpQK3EKK3RrRW10NzRSclZ4ekZneGtFVWdFLzliaE93WGJpYnV6bHduVkhCVGRhSWM1c0QxeHkrSjIwQnJZR0MyQUcxVDIKKzVVU2E4Y3V2WVM3ZlNRMmRDYmZ0c2YwOC9UejZKTTlkdjN6a1UrY2x0ZXBFSXVrbTArb2dsSjdtWVdlNkxnZG4KK0N3TXZvZ250OERPUEM4NFE3MmVreGdqYXdlM0NQOWRLM1JVOStWNGNnV0JHUHJXelBTK20za2NjdkpLdTY5OG4KK2F4Wld0OXpzMFZWWHBXN3NkU1gxdDN2ZnE5STZXcEdZZlpjWEN4TUtwMnRLaThGSE1QczYrRUVFMWNIZnVCMi8KK2V3R2xaYUxnSGphM3Bsek1NRnI0elcvTjhSbGlKY29CNHpWLytpRDEzUDFwc21vQWZSZjNBZ01CQUFHalRUQkwKK01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGSDNrbkd2bStYRjlSdElTUGExckhmM0NxbmhNTUI4R0ExVWQKK0l3UVlNQmFBRkxSYTVLV3ozdEpTOXJuVnBwVVA2ejY4eC8zL01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQ1IKK3M0UmNYV0R5cFFwSzNOYkdkZG8wVW5Kc0RtQlA3dzVWODB1LzBFRG5rU3lubEk4OTJ3cnNzdldEcDZFellaWTMKK1Z4U0FXK2U4NGRNc05qSnY3M29BbVRNVi9EZ2czM1I5UFErQjBMVDl0a2J4eGJpODNuU2lRYWZJVWRvZ0VvSSsKK0RJeEkyaG0yVXVsUFo4RW9uaUMyenI2SnZXVFhCVDZIcjdvclhhcitZbWI3cG5XdGlhRVk2SGhVNnQ4S2hla3kKK01xZ2F6VFdCK0tqYTBSYUtZK2RuMm03aE94d3hJSm51NHJMN2dzVWg0bU5NWVJWTlU2M2RGWDhMdGpORHJTZUsKK3NhK1RGM0xFdmpFbWt6eDkvTlU5end1K3hYdnB0UGp6TVBMMW9pZnJtbkg4ZjNsZWlNV21MVE5YdWpnRzVxMEwKK2xwZWR6SlI3Z3drWHB1N091dzgyCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X21kMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X21kMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlYTc3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQyLmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDkgKDB4OSkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQyV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKdWwgMTIgMTA6NTY6NTkgMjAwOSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEp1bCAxMiAxMDo1Njo1OSAyMDExIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IE1EMgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6ZGM6MTM6NzQ6ODE6YzY6MTI6ZjY6Njc6NWQ6YTE6NjY6NzI6ZWQ6ZGM6CisgICAgICAgICAgICAgICAgICAgIDc5OmI2OjU4OjVjOjMyOjU4OmIzOmQ0OjE0OmZkOjZjOjAyOjYxOjllOjBiOgorICAgICAgICAgICAgICAgICAgICA5OTo0Njo2MzphMzowYTo0MTpkNDo0MjozMzoyMTplNjplZDo0MzowNzo1YToKKyAgICAgICAgICAgICAgICAgICAgMWQ6YTI6M2I6NjQ6Mjk6YTg6MmE6YzE6NjY6Mjg6MDA6NTk6ZDg6MGM6NDk6CisgICAgICAgICAgICAgICAgICAgIDJkOjMwOmI3OjNkOjhjOmJiOjYwOjYyOjMxOjgzOjI3OjdmOjRiOjk1OjkyOgorICAgICAgICAgICAgICAgICAgICAyZTphMDpkNjpjNjo4NDo5NDo0YjpiMzplNDphNjpjYzpmZjozMjozYTpjNToKKyAgICAgICAgICAgICAgICAgICAgZWM6NGM6Yzk6MjQ6NTg6YmY6YjM6MzM6Nzc6NmE6YjU6MTc6OGI6MDI6MTA6CisgICAgICAgICAgICAgICAgICAgIDI5OjhlOjk1OmFhOjkxOjYwOjE3OjQzOjQyOjg3OmE4OjdjOmRhOjA5OjgzOgorICAgICAgICAgICAgICAgICAgICA5ODo5ZDo3YTo2NTo1ZToyMDo1MjowNzoyZTo2NTphNTozMTpmZDpkOTo3NDoKKyAgICAgICAgICAgICAgICAgICAgMWU6MDA6Yzk6YWU6OWQ6ODE6NTY6OGI6MDg6MGE6ZjU6MWU6OWM6ZGM6YTI6CisgICAgICAgICAgICAgICAgICAgIDVlOjZjOmRiOmZmOjExOjgzOjE1OmY0OmQxOjI0OjU3OjliOjBmOmViOjM1OgorICAgICAgICAgICAgICAgICAgICBjOTpmMTphYTo0Njo0ZTo3NDo3ZjpmZToxZDpiMDo5MToxZjo4OTo0YTo4NDoKKyAgICAgICAgICAgICAgICAgICAgY2I6ZGY6NzU6ZTM6Y2Q6Nzc6ODI6NjI6MDk6ZTU6OWY6NmQ6Mjk6ZGU6MmU6CisgICAgICAgICAgICAgICAgICAgIDI1OmQ4OjQ4OmI2OjIwOmJlOjUxOjk3OjRjOjJkOjIwOjY1OjJkOjJhOjUwOgorICAgICAgICAgICAgICAgICAgICA5ZToyNDo1ZDo3Mjo5NTplMDphMjowNjo0MTo4Yzo2MTplNDo1MDo1Nzo3NDoKKyAgICAgICAgICAgICAgICAgICAgOTY6YjE6Mjk6YjU6YTE6ODg6Mzc6ZjE6NWM6OWU6YjI6OWU6OGU6ODM6OGQ6CisgICAgICAgICAgICAgICAgICAgIDcyOjNiOmI1OjVjOmZlOmJiOjEyOjg5OjcyOjVjOmExOmY5OmQ4OjE4OjI5OgorICAgICAgICAgICAgICAgICAgICBiMjoyNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQjc6NTE6RDQ6RTU6MjA6RDU6NDU6NTQ6RjQ6QzU6NTE6MUI6RTA6ODI6QjU6NjE6MDU6QUY6OUI6QjYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkNGOjIyOjMxOjI3OjkxOkQ4OkMyOjU0OkZGOjFFOkRBOkQ5OkVFOjhBOkM1Ojg5OjMyOkFEOjBDOjIxCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBtZDJXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAyODo1YTpkZDo0ODpmYjplYzo4MDpmZTpkZTpiNzoyMDpjMDo0YzowNTphOTo0Yjo1MTplOToKKyAgICAgICAgYTc6ZDE6NGI6NWU6NzY6NDI6ZDI6NWQ6OWE6MTQ6MTk6M2I6Y2I6Zjk6OTE6ZDc6MGY6MTE6CisgICAgICAgIGM5OmNkOmRkOjAwOjhiOjJjOjc2OjczOjIyOmEwOjE5OjQ5OjgxOjYzOjQwOjMwOjQ4OjI3OgorICAgICAgICA2Mjo5MDpjYTpiODpkYzozMzozNTpiMzo0Yjo1ODpjYTpkYzowNzo2Njo4NzoyZTplYTo0NDoKKyAgICAgICAgMmE6NmE6MTM6Njc6N2E6MzI6NWU6NDg6MWQ6ODg6ODg6YzU6NzA6ZTY6ZTc6ZWM6MWI6MmY6CisgICAgICAgIGE3OmY0OjYxOjcxOjI5OmY2OjY2OjkzOjMwOjYwOjdlOmIzOjRjOjAxOmM4OjJjOjUzOmNlOgorICAgICAgICAwMDoxMTplYzpiZjpmNjpmMjpjZTo1MTo5NzpkODplZDplZDpkYzpjOTo2YjpiODoxOToxNToKKyAgICAgICAgYzg6OWE6NjE6NmQ6MTI6OWE6OTk6MjU6ZDg6MDM6MWQ6YTY6NGM6MjA6YTU6Zjg6NDY6YTM6CisgICAgICAgIDA1OjMyOmJiOjFhOjhlOjFhOjY1OjBkOmYzOjEzOjM1OjFkOjZmOjczOjI4OjMxOjEyOmQ3OgorICAgICAgICBjNDo5ZTo3MzphMDphNzpjZTo4MjoyNTpkMTo0MDplODoxYjo3Nzo2MDpmMzozZTo4MTo3ZjoKKyAgICAgICAgMTk6ZWU6Y2Y6OTc6NGQ6Yzg6YzM6MzU6OWI6NzI6OTg6M2I6YzM6MzU6NDM6MTQ6MGE6MDQ6CisgICAgICAgIDIxOjdiOmY3OmRiOmU2OjVmOmNlOjIxOmQxOmNlOmJmOmI3OmVmOmMxOjYzOjIxOmMyOjc4OgorICAgICAgICBlMTozNzphYTpiMTplMDozMTpiMzpiNjo2Mzo0YzpmZDo2NjpjODplNjpjZjpmODpkOTo5NzoKKyAgICAgICAgMmY6Y2Y6OTI6ODE6M2Y6ZDQ6YmY6ZWM6ZTI6YWQ6NmU6Mzk6Yzc6YTY6YTg6ZTA6MzI6YjA6CisgICAgICAgIDJlOjBkOmUxOjMwCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURQekNDQWllZ0F3SUJBZ0lCQ1RBTkJna3Foa2lHOXcwQkFRSUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01Ea3dOekV5TVRBMU5qVTVXaGNOTVRFd056RXlNVEExTmpVNVdqQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R2pBWUJnTlZCQU1URVZCdmJHRnlVMU5NSUVObGNuUWdUVVF5TUlJQklqQU4KK0Jna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTNCTjBnY1lTOW1kZG9XWnk3ZHg1dGxoY01saXoKKzFCVDliQUpobmd1WlJtT2pDa0hVUWpNaDV1MURCMW9kb2p0a0thZ3F3V1lvQUZuWURFa3RNTGM5akx0Z1lqR0QKK0ozOUxsWkl1b05iR2hKUkxzK1NtelA4eU9zWHNUTWtrV0wrek0zZHF0UmVMQWhBcGpwV3FrV0FYUTBLSHFIemEKK0NZT1luWHBsWGlCU0J5NWxwVEg5MlhRZUFNbXVuWUZXaXdnSzlSNmMzS0plYk52L0VZTVY5TkVrVjVzUDZ6WEoKKzhhcEdUblIvL2gyd2tSK0pTb1RMMzNYanpYZUNZZ25sbjIwcDNpNGwyRWkySUw1Umwwd3RJR1V0S2xDZUpGMXkKK2xlQ2lCa0dNWWVSUVYzU1dzU20xb1lnMzhWeWVzcDZPZzQxeU83VmMvcnNTaVhKY29mbllHQ215SndJREFRQUIKK28wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTM1VkVGxJTlZGVlBURlVSdmdnclZoQmErYnRqQWYKK0JnTlZIU01FR0RBV2dCVFBJakVua2RqQ1ZQOGUydG51aXNXSk1xME1JVEFOQmdrcWhraUc5dzBCQVFJRkFBT0MKK0FRRUFLRnJkU1B2c2dQN2V0eURBVEFXcFMxSHBwOUZMWG5aQzBsMmFGQms3eS9tUjF3OFJ5YzNkQUlzc2RuTWkKK29CbEpnV05BTUVnbllwREt1Tnd6TmJOTFdNcmNCMmFITHVwRUttb1RaM295WGtnZGlJakZjT2JuN0JzdnAvUmgKK2NTbjJacE13WUg2elRBSElMRlBPQUJIc3YvYnl6bEdYMk8zdDNNbHJ1QmtWeUpwaGJSS2FtU1hZQXgybVRDQ2wKKytFYWpCVEs3R280YVpRM3pFelVkYjNNb01STFh4SjV6b0tmT2dpWFJRT2diZDJEelBvRi9HZTdQbDAzSXd6V2IKK2NwZzd3elZERkFvRUlYdjMyK1pmemlIUnpyKzM3OEZqSWNKNDRUZXFzZUF4czdaalRQMW15T2JQK05tWEw4K1MKK2dUL1V2K3ppclc0NXg2YW80REt3TGczaE1BPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmYxNjZiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDQuY3J0CkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogNSAoMHg1KQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBtZDRXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNyAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA3IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgTUQ0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IG1kNFdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIDk0OmRiOmUxOjg2OjcxOjJkOjQzOmQ2OjUxOjYxOmE3Ojk1OmJjOmU4OjczOmRhOmZmOmU0OgorICAgICAgICBmZDo0MTowZjo1YzpkZToxNDpmNDpjNDpiYTo1ZDoyYzozMDoyYzphNjpkYzoyZDplODo4NzoKKyAgICAgICAgNDU6ZjE6YzU6ZmU6ZDE6NGE6NjQ6OTk6MTk6MDk6MmY6NzI6N2M6M2Y6OGQ6Yzg6MzE6MjI6CisgICAgICAgIGRkOjBhOjY5OjAzOjNkOjEyOjhjOjRkOmMzOmY3OmEzOmM1OmQxOjVkOmM5OmZmOjRiOjgzOgorICAgICAgICA2YjpkNjpiNDplNTpkODpjZTo5NDo1ZTplYzpiZjo2ODpjNTpiMjo2Mzo4ZTo1YzpjYjpmMzoKKyAgICAgICAgOGQ6NjI6NzM6ODI6NjI6N2U6ZGY6ZGI6N2Q6MGI6OGQ6MjE6MTA6ZGI6OWE6YTE6NjI6NGQ6CisgICAgICAgIDQ2OjQyOmQxOmJiOjM4OjMyOmVmOmMxOmZjOmExOmUyOjdmOjYwOjA4OjM3OjMyOjIwOjJjOgorICAgICAgICA3YzphMjpjOToxMjowZDo4OTpmZToyYjoxNTowODo5MTo3OTplMjphOTo3OTphNDpkYTpjZDoKKyAgICAgICAgODE6NDM6MDE6ZTI6MDk6MmQ6MWE6ZjQ6MTY6ZWY6YWY6NGQ6NTA6NDY6NWU6MmQ6ZGQ6NDg6CisgICAgICAgIDI3OjEwOmMwOjQyOmI3OmE1OjllOmMyOjFmOjZlOjUwOjM2OjAzOmVkOjk1Ojc3OjlhOmEzOgorICAgICAgICBkOTo0YzpkNzoyMzo5MzpiMToyNDoyYTo2MzoyNzoyODo3YTpkZTozZDo1OTpkMjo5MjpjODoKKyAgICAgICAgOGY6ZjY6Mzk6MWQ6NjU6YWI6MDk6Nzg6MDU6NDY6OTA6YTk6ZjY6MTA6YjE6ZWY6Yzg6OGM6CisgICAgICAgIDRkOjdkOjhkOmYyOjc4OmI3Ojg4OjE1OjA5OjdlOmRmOmU5Ojg3OmE4OjY0OmMxOjk1OjUzOgorICAgICAgICBmYjpkYTowNTpiNzo2MjpiYzphZDpmYjpkOTphNDphOTowNjo2Yzo2Yjo5ODowMTpiOTozOToKKyAgICAgICAgNzg6ZDM6NGU6ODcKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFB6Q0NBaWVnQXdJQkFnSUJCVEFOQmdrcWhraUc5dzBCQVFNRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBM1doY05NakV3TWpFeU1UUTBOREEzV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRU5sY25RZ1RVUTBNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdVR4S3hjaWpqcEFYcEo1U3FuRjFKbUdBNThlMQorYll6L3FyWkJKcmUrRWExY2N4WU1aQkZJQlAvVzRUc0YyNG03czVjSjFSd1UzV2lIT2JBOWNjdmlkdEFhMkJndAorZ0J0VTl1VkVtdkhMcjJFdTMwa05uUW0zN2JIOVBQMDgraVRQWGI5ODVGUG5KYlhxUkNMcEp0UHFJSlNlNW1GbgordWk0SFp3c0RMNklKN2ZBemp3dk9FTzlucE1ZSTJzSHR3ai9YU3QwVlBmbGVISUZnUmo2MXN6MHZwdDVISEx5UworcnV2Zkoyc1dWcmZjN05GVlY2VnU3SFVsOWJkNzM2dlNPbHFSbUgyWEZ3c1RDcWRyU292QlJ6RDdPdmhCQk5YQgorMzdnZHYzc0JwV1dpNEI0MnQ2WmN6REJhK00xdnpmRVpZaVhLQWVNMWYvb2c5ZHo5YWJKcUFIMFg5d0lEQVFBQgorbzAwd1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlI5NUp4cjV2bHhmVWJTRWoydGF4Mzl3cXA0VERBZgorQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU5CZ2txaGtpRzl3MEJBUU1GQUFPQworQVFFQWxOdmhobkV0UTlaUllhZVZ2T2h6MnYvay9VRVBYTjRVOU1TNlhTd3dMS2JjTGVpSFJmSEYvdEZLWkprWgorQ1M5eWZEK055REVpM1FwcEF6MFNqRTNEOTZQRjBWM0ovMHVEYTlhMDVkak9sRjdzdjJqRnNtT09YTXZ6aldKegorZ21KKzM5dDlDNDBoRU51YW9XSk5Sa0xSdXpneTc4SDhvZUovWUFnM01pQXNmS0xKRWcySi9pc1ZDSkY1NHFsNQorcE5yTmdVTUI0Z2t0R3ZRVzc2OU5VRVplTGQxSUp4REFRcmVsbnNJZmJsQTJBKzJWZDVxajJVelhJNU94SkNwagorSnloNjNqMVowcExJai9ZNUhXV3JDWGdGUnBDcDloQ3g3OGlNVFgyTjhuaTNpQlVKZnQvcGg2aGt3WlZUKzlvRgordDJLOHJmdlpwS2tHYkd1WUFiazVlTk5PaHc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDUuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZDQzZjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X21kNS5jcnQKQEAgLTAsMCArMSw3NyBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiA2ICgweDYpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IG1kNVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjA3IDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDcgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBNRDUKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmI5OjNjOjRhOmM1OmM4OmEzOjhlOjkwOjE3OmE0OjllOjUyOmFhOjcxOgorICAgICAgICAgICAgICAgICAgICA3NToyNjo2MTo4MDplNzpjNzpiNTo2ZDo4YzpmZjphYTpiNjo0MToyNjpiNzoKKyAgICAgICAgICAgICAgICAgICAgYmU6MTE6YWQ6NWM6NzM6MTY6MGM6NjQ6MTE6NDg6MDQ6ZmY6ZDY6ZTE6M2I6CisgICAgICAgICAgICAgICAgICAgIDA1OmRiOjg5OmJiOmIzOjk3OjA5OmQ1OjFjOjE0OmRkOjY4Ojg3OjM5OmIwOgorICAgICAgICAgICAgICAgICAgICAzZDo3MTpjYjplMjo3NjpkMDoxYTpkODoxODoyZDo4MDoxYjo1NDpmNjplNToKKyAgICAgICAgICAgICAgICAgICAgNDQ6OWE6ZjE6Y2I6YWY6NjE6MmU6ZGY6NDk6MGQ6OWQ6MDk6Yjc6ZWQ6YjE6CisgICAgICAgICAgICAgICAgICAgIGZkOjNjOmZkOjNjOmZhOjI0OmNmOjVkOmJmOjdjOmU0OjUzOmU3OjI1OmI1OgorICAgICAgICAgICAgICAgICAgICBlYTo0NDoyMjplOToyNjpkMzplYToyMDo5NDo5ZTplNjo2MTo2NzpiYToyZToKKyAgICAgICAgICAgICAgICAgICAgMDc6Njc6MGI6MDM6MmY6YTI6MDk6ZWQ6ZjA6MzM6OGY6MGI6Y2U6MTA6ZWY6CisgICAgICAgICAgICAgICAgICAgIDY3OmE0OmM2OjA4OmRhOmMxOmVkOmMyOjNmOmQ3OjRhOmRkOjE1OjNkOmY5OgorICAgICAgICAgICAgICAgICAgICA1ZToxYzo4MTo2MDo0NjozZTpiNTpiMzozZDoyZjphNjpkZTo0NzoxYzpiYzoKKyAgICAgICAgICAgICAgICAgICAgOTI6YWU6ZWI6ZGY6Mjc6NmI6MTY6NTY6Yjc6ZGM6ZWM6ZDE6NTU6NTc6YTU6CisgICAgICAgICAgICAgICAgICAgIDZlOmVjOjc1OjI1OmY1OmI3OjdiOmRmOmFiOmQyOjNhOjVhOjkxOjk4OjdkOgorICAgICAgICAgICAgICAgICAgICA5NzoxNzowYjoxMzowYTphNzo2Yjo0YTo4YjpjMTo0NzozMDpmYjozYTpmODoKKyAgICAgICAgICAgICAgICAgICAgNDE6MDQ6ZDU6YzE6ZGY6Yjg6MWQ6YmY6N2I6MDE6YTU6NjU6YTI6ZTA6MWU6CisgICAgICAgICAgICAgICAgICAgIDM2OmI3OmE2OjVjOmNjOjMwOjVhOmY4OmNkOjZmOmNkOmYxOjE5OjYyOjI1OgorICAgICAgICAgICAgICAgICAgICBjYTowMTplMzozNTo3ZjpmYToyMDpmNTpkYzpmZDo2OTpiMjo2YTowMDo3ZDoKKyAgICAgICAgICAgICAgICAgICAgMTc6ZjcKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIDdEOkU0OjlDOjZCOkU2OkY5OjcxOjdEOjQ2OkQyOjEyOjNEOkFEOjZCOjFEOkZEOkMyOkFBOjc4OjRDCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQ1V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgOTI6MTM6ODE6MGM6ZmY6YWM6YWI6OTg6NTI6NmM6Mjg6Yzk6YzY6M2U6ODA6YzY6ZWM6Nzc6CisgICAgICAgIGQwOjEzOmUxOmEyOjI5OjFkOjJmOmI3OmM1Ojk1OjQxOjgzOjYwOmQ5OjUwOjljOmQwOmQ2OgorICAgICAgICAwOTpmNzowZjo5NzpjZDpjMDplNjpiMjo2ODpmYTozMTpjOToyYTphMzpkMzoxZTo1MzphZToKKyAgICAgICAgNzk6ZGM6MzU6YmE6YjA6ZDk6ZTU6N2E6Mzc6MWI6MmE6OTI6ZmE6ZDI6NTk6OTA6NDM6MWI6CisgICAgICAgIDZhOjkxOmMxOmRiOjM2OmRhOmU5OjM5OmQzOmY1OmFjOmUzOjQ2OjAxOmNhOjU1OjA0OjE3OgorICAgICAgICAxYTpiMTo5NzoyODplODpmZjoxYjplNzplMToxMDpjOTpiNTozMTpkODpjZTphNjo4OTo2YToKKyAgICAgICAgNGE6ZGY6Nzg6N2I6MDI6MmY6ODM6YjM6NDE6ZDU6ZWY6MGI6YjY6NDQ6ZmY6MzI6YTY6Y2Y6CisgICAgICAgIDFiOmMyOmY0OmIwOjc1OjY2OmE5OmRhOjZmOjdjOmE1OmUzOmM2OmMxOjNhOjJmOmJmOmY4OgorICAgICAgICAxMjo2ZjowNDoyYzozNzpmMjo0ZTpmYzpiOTowOTpmZjphNDo1Yjo0MDoxOTplOTo1ODo5MToKKyAgICAgICAgNjQ6ODI6ZDY6YWQ6Yjk6N2Y6YzA6MTI6YzI6Y2U6Yjc6YjY6YmE6ZmI6MTA6YTI6M2Y6NzQ6CisgICAgICAgIDk3OjEwOjM5OmQ0OmRjOjRhOmU1OjVjOmY3OmU1OjNhOmQ5OjY4OmQ3OjE3OjZiOmY1OjUxOgorICAgICAgICAwODpiNDphMjozMDowZDpjYzozNjoxMDo2ZDo0ZToxZDoyMjpjYzo0ODpkMTozODo0NDpiYToKKyAgICAgICAgY2M6MmI6NDc6OTk6Zjc6YzY6OGI6NDE6MjQ6ZjM6ZjE6MmM6MTA6MWE6ZjI6ODg6YmI6YjI6CisgICAgICAgIGUwOmZkOjQ0OjI2OjNkOmFkOmVhOmFmOjFkOmQwOjAwOjU2OjQxOjRlOmY0OmIwOjNiOjlkOgorICAgICAgICAzMjo2Zjo0ODpjNworLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUHpDQ0FpZWdBd0lCQWdJQkJqQU5CZ2txaGtpRzl3MEJBUVFGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEzV2hjTk1qRXdNakV5TVRRME5EQTNXakE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVlCZ05WQkFNVEVWQnZiR0Z5VTFOTUlFTmxjblFnVFVRMU1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1VHhLeGNpampwQVhwSjVTcW5GMUptR0E1OGUxCitiWXovcXJaQkpyZStFYTFjY3hZTVpCRklCUC9XNFRzRjI0bTdzNWNKMVJ3VTNXaUhPYkE5Y2N2aWR0QWEyQmd0CitnQnRVOXVWRW12SExyMkV1MzBrTm5RbTM3Ykg5UFAwOCtpVFBYYjk4NUZQbkpiWHFSQ0xwSnRQcUlKU2U1bUZuCit1aTRIWndzREw2SUo3ZkF6and2T0VPOW5wTVlJMnNIdHdqL1hTdDBWUGZsZUhJRmdSajYxc3owdnB0NUhITHlTCitydXZmSjJzV1ZyZmM3TkZWVjZWdTdIVWw5YmQ3MzZ2U09scVJtSDJYRndzVENxZHJTb3ZCUnpEN092aEJCTlhCCiszN2dkdjNzQnBXV2k0QjQydDZaY3pEQmErTTF2emZFWllpWEtBZU0xZi9vZzlkejlhYkpxQUgwWDl3SURBUUFCCitvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUjk1SnhyNXZseGZVYlNFajJ0YXgzOXdxcDRUREFmCitCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBTkJna3Foa2lHOXcwQkFRUUZBQU9DCitBUUVBa2hPQkRQK3NxNWhTYkNqSnhqNkF4dXgzMEJQaG9pa2RMN2ZGbFVHRFlObFFuTkRXQ2ZjUGw4M0E1ckpvCisrakhKS3FQVEhsT3VlZHcxdXJEWjVYbzNHeXFTK3RKWmtFTWJhcEhCMnpiYTZUblQ5YXpqUmdIS1ZRUVhHckdYCitLT2ovRytmaEVNbTFNZGpPcG9scVN0OTRld0l2ZzdOQjFlOEx0a1QvTXFiUEc4TDBzSFZtcWRwdmZLWGp4c0U2CitMNy80RW04RUxEZnlUdnk1Q2Yra1cwQVo2VmlSWklMV3JibC93QkxDenJlMnV2c1FvajkwbHhBNTFOeEs1VnozCis1VHJaYU5jWGEvVlJDTFNpTUEzTU5oQnRUaDBpekVqUk9FUzZ6Q3RIbWZmR2kwRWs4L0VzRUJyeWlMdXk0UDFFCitKajJ0NnE4ZDBBQldRVTcwc0R1ZE1tOUl4dz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGExLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThiMmYyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGExLmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDcgKDB4NykKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjA3IDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDcgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBTSEExCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA5MzoyNjo0MDo2ODozZDplNzo2MjplYTpkMTo2YTo3ODoyYjpjMjowNzpmMzowZDozYjpmNjoKKyAgICAgICAgNjk6MTg6Y2Q6MDg6NWU6MzE6ZTc6NDg6NjA6MDg6MmE6NDY6YjY6ZGU6ZDE6MzU6MGE6ZWM6CisgICAgICAgIDMxOjM2OjgzOjdkOmViOjdjOmQ4OjYzOjA5OmMzOmU0OmM1OjEwOmNhOjdjOjdiOjJmOjIwOgorICAgICAgICA0ZDpkMjowZTo1ZjplZTowOTplMzo4NDo0ZjoyODpjYzowODo3NDo5YToxMToyMzo1ZjpkZToKKyAgICAgICAgMGU6M2E6MGY6OGI6MmQ6NjQ6OTE6MDU6ZjY6ZDU6Yzc6MzA6Yzg6MjA6ZWU6NmM6YzQ6NjI6CisgICAgICAgIDdjOjhkOmE4OjRkOjJlOjcwOjhjOmFjOmI1OjVkOmRlOjliOjEwOjVjOjk4OmZkOmExOjc4OgorICAgICAgICA5Yjo5YzpmMDo3MzozMzpkZToyZjo4Yzo1OTpmYTpkYzphZjo0YzpkZjo5NzplMzo5ZDowMDoKKyAgICAgICAgMzc6OWE6ZmE6ZDM6Njc6Nzc6Yjk6MmY6Yjk6NGE6MjM6YWQ6Zjk6YjQ6YTE6Yjc6YWM6YzU6CisgICAgICAgIGE4OjBmOjYyOjhjOmU2OjdlOmI0Ojk0OjJhOmRiOmYyOmZjOjUyOjkyOmE0OjllOjRlOjUxOgorICAgICAgICA0Zjo5ZDpjMDpjZTphZTozZDoxNzoxYzo5NDo2Yzo1ZjplODoxNjpiNTpjZToyZTplMjo1YToKKyAgICAgICAgY2Y6NmE6ZGI6ZGQ6YjA6ZDQ6YmU6NjI6YTU6NDY6OTI6MzA6N2M6N2M6ZmM6MDU6Zjg6Nzg6CisgICAgICAgIDMwOjkzOjMwOjI4OmFiOjY5OmExOjcyOjMxOmRjOjNiOjk3OjYzOjNhOjViOmIzOmUxOjM0OgorICAgICAgICA4Njo4MDo0YToyODpmNTpkYzpkNTo4NDo4YzoxMzphNDo2YzpkMjpjMToyZDphNjoyNTpkNzoKKyAgICAgICAgNmY6Yzk6OTM6Nzg6YTU6MTY6YmE6ZDk6MTc6NmU6M2U6Y2E6OTY6ZjI6OWU6NWM6ZTM6YWU6CisgICAgICAgIDEyOjJlOmE1OjExCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURRRENDQWlpZ0F3SUJBZ0lCQnpBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTNXaGNOTWpFd01qRXlNVFEwTkRBM1dqQTlNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R3pBWkJnTlZCQU1URWxCdmJHRnlVMU5NSUVObGNuUWdVMGhCTVRDQ0FTSXcKK0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFMazhTc1hJbzQ2UUY2U2VVcXB4ZFNaaGdPZkgKK3RXMk0vNnEyUVNhM3ZoR3RYSE1XREdRUlNBVC8xdUU3QmR1SnU3T1hDZFVjRk4xb2h6bXdQWEhMNG5iUUd0Z1kKK0xZQWJWUGJsUkpyeHk2OWhMdDlKRFowSnQrMngvVHo5UFBva3oxMi9mT1JUNXlXMTZrUWk2U2JUNmlDVW51WmgKK1o3b3VCMmNMQXkraUNlM3dNNDhMemhEdlo2VEdDTnJCN2NJLzEwcmRGVDM1WGh5QllFWSt0Yk05TDZiZVJ4eTgKK2txN3IzeWRyRmxhMzNPelJWVmVsYnV4MUpmVzNlOStyMGpwYWtaaDlseGNMRXdxbmEwcUx3VWN3K3pyNFFRVFYKK3dkKzRIYjk3QWFWbG91QWVOcmVtWE13d1d2ak5iODN4R1dJbHlnSGpOWC82SVBYYy9XbXlhZ0I5Ri9jQ0F3RUEKK0FhTk5NRXN3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVWZlU2NhK2I1Y1gxRzBoSTlyV3NkL2NLcWVFd3cKK0h3WURWUjBqQkJnd0ZvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZjh3RFFZSktvWklodmNOQVFFRkJRQUQKK2dnRUJBSk1tUUdnOTUyTHEwV3A0SzhJSDh3MDc5bWtZelFoZU1lZElZQWdxUnJiZTBUVUs3REUyZzMzcmZOaGoKK0NjUGt4UkRLZkhzdklFM1NEbC91Q2VPRVR5ak1DSFNhRVNOZjNnNDZENHN0WkpFRjl0WEhNTWdnN216RVlueU4KK3FFMHVjSXlzdFYzZW14QmNtUDJoZUp1YzhITXozaStNV2ZyY3IwemZsK09kQURlYSt0Tm5kN2t2dVVvanJmbTAKK29iZXN4YWdQWW96bWZyU1VLdHZ5L0ZLU3BKNU9VVStkd002dVBSY2NsR3hmNkJhMXppN2lXczlxMjkydzFMNWkKK3BVYVNNSHg4L0FYNGVEQ1RNQ2lyYWFGeU1kdzdsMk02VzdQaE5JYUFTaWoxM05XRWpCT2tiTkxCTGFZbDEyL0oKK2szaWxGcnJaRjI0K3lwYnlubHpqcmhJdXBSRT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMjI0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMjI0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjgzYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGEyMjQuY3J0CkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogOCAoMHg4KQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNyAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA3IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBMjI0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGI4OjliOjBhOmQxOmI0OmQxOmE0OmNlOjA1OjM5OjQyOjdhOjNiOjdiOjVlOmZkOjk3OjU3OgorICAgICAgICA4YTozNjo2MDo0MjozOTpkMDplNjowYzo5Yzo3ZToyZjoyYjpiZTplZjplNzo0NTozNDo3NzoKKyAgICAgICAgNDg6N2E6MTA6NGE6ZmQ6NzY6Y2E6NDI6Mzk6MjU6M2M6ZmE6MTk6Zjg6NjM6NmM6ZTc6MzY6CisgICAgICAgIDI3OjlhOmVjOjA2OmNlOmU0OmY3OjJjOjJlOmM2OjM2OmMxOjI1OmJkOmFiOjA5OmFhOmUyOgorICAgICAgICBkYTo0ZTpkZTphZTpiNTpmNTpiYTo5ZTo5MDoyNDo1MjozNDo5Njo5Njo2MTo0YzoyNjpiNToKKyAgICAgICAgNTc6NjU6YjE6MTA6ZWQ6MTM6MmI6NTQ6OTA6Y2U6ZDM6MjE6Y2I6OGM6ZDM6NGM6NmM6ZTU6CisgICAgICAgIGUxOjc4OjIyOjE2OjNmOmUxOmJlOmYxOmVlOjVkOjM5OjQ4OmExOmU2OjgwOjQ2OmY0OjQ2OgorICAgICAgICBmMjo3OTowMzozZTpmMTpmYzo1MTo0NzpkOTowNTplODo4NTo4MToxYjowYjo0ZjpmYTo4NToKKyAgICAgICAgOWQ6Y2U6ZTc6NzY6NWE6NmY6ZGE6OTg6OWY6NDM6ZjE6ZjM6MmY6MmY6NTc6Mjg6YWE6NzA6CisgICAgICAgIDE0OjgyOjdmOmQ1OjY5OjE0OjhjOmY5OjgyOmI2OjJmOmE2OmRmOmI1OjZiOjBlOjQzOmM5OgorICAgICAgICA5Njo5MTo2NDozZDo4YjphODoxNzoxNTo5YTo4ODo0MjphNDpkMDo5MDpjMDphMzphMjplMToKKyAgICAgICAgZGQ6ZjY6OTU6NmQ6M2I6OWQ6NzE6YTY6MWU6OWU6MmM6MWU6ZGI6ZjY6NWY6OTM6NDM6MmM6CisgICAgICAgIGVkOjUzOjcwOjU1OjUwOjU2OmRmOmNkOjk2OjZjOmQ1OjkxOjBmOmIxOmE3OmY0OmI3OjE3OgorICAgICAgICA5ZDoxZjowYjpmNjowYjpmODpmZTplNzo3YzpkZTpjMToyMDpiNzpmYzo2OToxMzpiYTplMjoKKyAgICAgICAgNjE6OWI6YTU6NjIKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFFqQ0NBaXFnQXdJQkFnSUJDREFOQmdrcWhraUc5dzBCQVE0RkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBM1doY05NakV3TWpFeU1UUTBOREEzV2pBL01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIVEFiQmdOVkJBTVRGRkJ2YkdGeVUxTk1JRU5sY25RZ1UwaEJNakkwTUlJQgorSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXVUeEt4Y2lqanBBWHBKNVNxbkYxSm1HQQorNThlMWJZei9xclpCSnJlK0VhMWNjeFlNWkJGSUJQL1c0VHNGMjRtN3M1Y0oxUndVM1dpSE9iQTljY3ZpZHRBYQorMkJndGdCdFU5dVZFbXZITHIyRXUzMGtOblFtMzdiSDlQUDA4K2lUUFhiOTg1RlBuSmJYcVJDTHBKdFBxSUpTZQorNW1GbnVpNEhad3NETDZJSjdmQXpqd3ZPRU85bnBNWUkyc0h0d2ovWFN0MFZQZmxlSElGZ1JqNjFzejB2cHQ1SAorSEx5U3J1dmZKMnNXVnJmYzdORlZWNlZ1N0hVbDliZDczNnZTT2xxUm1IMlhGd3NUQ3FkclNvdkJSekQ3T3ZoQgorQk5YQjM3Z2R2M3NCcFdXaTRCNDJ0NlpjekRCYStNMXZ6ZkVaWWlYS0FlTTFmL29nOWR6OWFiSnFBSDBYOXdJRAorQVFBQm8wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJSOTVKeHI1dmx4ZlViU0VqMnRheDM5d3FwNAorVERBZkJnTlZIU01FR0RBV2dCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvekFOQmdrcWhraUc5dzBCQVE0RgorQUFPQ0FRRUF1SnNLMGJUUnBNNEZPVUo2TzN0ZS9aZFhpalpnUWpuUTVneWNmaThydnUvblJUUjNTSG9RU3YxMgoreWtJNUpUejZHZmhqYk9jMko1cnNCczdrOXl3dXhqYkJKYjJyQ2FyaTJrN2VyclgxdXA2UUpGSTBscFpoVENhMQorVjJXeEVPMFRLMVNRenRNaHk0elRUR3psNFhnaUZqL2h2dkh1WFRsSW9lYUFSdlJHOG5rRFB2SDhVVWZaQmVpRgorZ1JzTFQvcUZuYzduZGxwdjJwaWZRL0h6THk5WEtLcHdGSUovMVdrVWpQbUN0aSttMzdWckRrUEpscEZrUFl1bworRnhXYWlFS2swSkRBbzZMaDNmYVZiVHVkY2FZZW5pd2UyL1pmazBNczdWTndWVkJXMzgyV2JOV1JEN0duOUxjWAorblI4TDlndjQvdWQ4M3NFZ3QveHBFN3JpWVp1bFlnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMjU2LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMjU2LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2E3NTIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGEyNTYuY3J0CkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogOSAoMHg5KQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNyAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA3IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBMjU2CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpiOTozYzo0YTpjNTpjODphMzo4ZTo5MDoxNzphNDo5ZTo1MjphYTo3MToKKyAgICAgICAgICAgICAgICAgICAgNzU6MjY6NjE6ODA6ZTc6Yzc6YjU6NmQ6OGM6ZmY6YWE6YjY6NDE6MjY6Yjc6CisgICAgICAgICAgICAgICAgICAgIGJlOjExOmFkOjVjOjczOjE2OjBjOjY0OjExOjQ4OjA0OmZmOmQ2OmUxOjNiOgorICAgICAgICAgICAgICAgICAgICAwNTpkYjo4OTpiYjpiMzo5NzowOTpkNToxYzoxNDpkZDo2ODo4NzozOTpiMDoKKyAgICAgICAgICAgICAgICAgICAgM2Q6NzE6Y2I6ZTI6NzY6ZDA6MWE6ZDg6MTg6MmQ6ODA6MWI6NTQ6ZjY6ZTU6CisgICAgICAgICAgICAgICAgICAgIDQ0OjlhOmYxOmNiOmFmOjYxOjJlOmRmOjQ5OjBkOjlkOjA5OmI3OmVkOmIxOgorICAgICAgICAgICAgICAgICAgICBmZDozYzpmZDozYzpmYToyNDpjZjo1ZDpiZjo3YzplNDo1MzplNzoyNTpiNToKKyAgICAgICAgICAgICAgICAgICAgZWE6NDQ6MjI6ZTk6MjY6ZDM6ZWE6MjA6OTQ6OWU6ZTY6NjE6Njc6YmE6MmU6CisgICAgICAgICAgICAgICAgICAgIDA3OjY3OjBiOjAzOjJmOmEyOjA5OmVkOmYwOjMzOjhmOjBiOmNlOjEwOmVmOgorICAgICAgICAgICAgICAgICAgICA2NzphNDpjNjowODpkYTpjMTplZDpjMjozZjpkNzo0YTpkZDoxNTozZDpmOToKKyAgICAgICAgICAgICAgICAgICAgNWU6MWM6ODE6NjA6NDY6M2U6YjU6YjM6M2Q6MmY6YTY6ZGU6NDc6MWM6YmM6CisgICAgICAgICAgICAgICAgICAgIDkyOmFlOmViOmRmOjI3OjZiOjE2OjU2OmI3OmRjOmVjOmQxOjU1OjU3OmE1OgorICAgICAgICAgICAgICAgICAgICA2ZTplYzo3NToyNTpmNTpiNzo3YjpkZjphYjpkMjozYTo1YTo5MTo5ODo3ZDoKKyAgICAgICAgICAgICAgICAgICAgOTc6MTc6MGI6MTM6MGE6YTc6NmI6NGE6OGI6YzE6NDc6MzA6ZmI6M2E6Zjg6CisgICAgICAgICAgICAgICAgICAgIDQxOjA0OmQ1OmMxOmRmOmI4OjFkOmJmOjdiOjAxOmE1OjY1OmEyOmUwOjFlOgorICAgICAgICAgICAgICAgICAgICAzNjpiNzphNjo1YzpjYzozMDo1YTpmODpjZDo2ZjpjZDpmMToxOTo2MjoyNToKKyAgICAgICAgICAgICAgICAgICAgY2E6MDE6ZTM6MzU6N2Y6ZmE6MjA6ZjU6ZGM6ZmQ6Njk6YjI6NmE6MDA6N2Q6CisgICAgICAgICAgICAgICAgICAgIDE3OmY3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICA3RDpFNDo5Qzo2QjpFNjpGOTo3MTo3RDo0NjpEMjoxMjozRDpBRDo2QjoxRDpGRDpDMjpBQTo3ODo0QworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTI1NldpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIDY5OmNlOmY5OmE5OmQ1OmUyOjMyOmRiOmZlOmE5OmY5OjkyOjdhOmQ2Ojc2OjM3OjA1OjUxOgorICAgICAgICBjOTplMzphMTowMzo3MjpiMjpiYzoyYzo4Njo0YjozMToxNjowMjoxMDplODo0MzpkNDpjMDoKKyAgICAgICAgMzM6M2M6NGY6ZWE6OWQ6MTI6NmI6NTc6NTE6YmM6ZDc6ZDk6NDI6NTY6Y2Y6Yzc6Mjk6ZTc6CisgICAgICAgIGQ3OjUyOjI0OjQ5OjI5OmFjOjljOmRlOjhmOmNjOmFiOjFhOmE5OjYyOjA3OjVhOjZiOmY3OgorICAgICAgICBmYjoxOTphYjpmNTpiMToyYzphNDphYTpkYzo1ZDowMzo3MzoxNzo3YzplYTo1Mjo0NDo4MDoKKyAgICAgICAgY2E6NzA6ZDM6MTA6YzU6MmU6ZmQ6OWY6ZDI6MGQ6NjU6YzQ6ZjI6Y2M6ZWY6MWI6MTg6ZTE6CisgICAgICAgIDBhOjA4OjRlOjY3OmQwOjU2OjdmOjI0OjU0OjJlOjczOjMxOmI1OjRkOjIyOjc0OmY4OjMwOgorICAgICAgICBmOTo5MjpjNDo2NDpjOTo0Njo4MDpkNDplMTpiZDpkNjplNzoyNjplYTpiYjpjNDpmZTo2ZjoKKyAgICAgICAgYTI6YzU6MTA6ZTQ6NjQ6MmY6YjA6NDQ6MDQ6MmM6YjM6NDQ6Mzk6Y2Y6YjQ6ZGU6YWM6ODM6CisgICAgICAgIDQzOjVlOjBiOmNhOmNkOmZiOjRlOjE4OmU2OjM4OjM5OmU3OjEwOjNmOmQ2OjU5OjE3OmU3OgorICAgICAgICA0MjplZjowMDplMzo4ODpjNjo0MzpiYzoyMToxMjpiZjoyMDphODo2NDpjNjozMDpkYzo4YzoKKyAgICAgICAgNmI6Yjg6NmE6Y2U6NmI6OGE6MjI6M2I6ZDg6YWY6MGM6YjQ6YmI6NGQ6YmU6OTY6ZGQ6NDA6CisgICAgICAgIGQ5Ojg3OjNlOjk1OjJlOjFhOjI3OjIzOjYyOmU4OjZlOmJkOmUwOjg5OmQwOmE3OjI4OjE2OgorICAgICAgICA5NTplYTpjYjo4OTphMzpmNzo3ZjpmYjowZjphYzphYjpkNjphODpiNDpjYjo0Mzo5MjpkOToKKyAgICAgICAgY2I6M2U6OGE6MTEKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFFqQ0NBaXFnQXdJQkFnSUJDVEFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBM1doY05NakV3TWpFeU1UUTBOREEzV2pBL01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIVEFiQmdOVkJBTVRGRkJ2YkdGeVUxTk1JRU5sY25RZ1UwaEJNalUyTUlJQgorSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXVUeEt4Y2lqanBBWHBKNVNxbkYxSm1HQQorNThlMWJZei9xclpCSnJlK0VhMWNjeFlNWkJGSUJQL1c0VHNGMjRtN3M1Y0oxUndVM1dpSE9iQTljY3ZpZHRBYQorMkJndGdCdFU5dVZFbXZITHIyRXUzMGtOblFtMzdiSDlQUDA4K2lUUFhiOTg1RlBuSmJYcVJDTHBKdFBxSUpTZQorNW1GbnVpNEhad3NETDZJSjdmQXpqd3ZPRU85bnBNWUkyc0h0d2ovWFN0MFZQZmxlSElGZ1JqNjFzejB2cHQ1SAorSEx5U3J1dmZKMnNXVnJmYzdORlZWNlZ1N0hVbDliZDczNnZTT2xxUm1IMlhGd3NUQ3FkclNvdkJSekQ3T3ZoQgorQk5YQjM3Z2R2M3NCcFdXaTRCNDJ0NlpjekRCYStNMXZ6ZkVaWWlYS0FlTTFmL29nOWR6OWFiSnFBSDBYOXdJRAorQVFBQm8wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJSOTVKeHI1dmx4ZlViU0VqMnRheDM5d3FwNAorVERBZkJnTlZIU01FR0RBV2dCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvekFOQmdrcWhraUc5dzBCQVFzRgorQUFPQ0FRRUFhYzc1cWRYaU10ditxZm1TZXRaMk53VlJ5ZU9oQTNLeXZDeUdTekVXQWhEb1E5VEFNenhQNnAwUworYTFkUnZOZlpRbGJQeHlubjExSWtTU21zbk42UHpLc2FxV0lIV212Myt4bXI5YkVzcEtyY1hRTnpGM3pxVWtTQQoreW5EVEVNVXUvWi9TRFdYRThzenZHeGpoQ2doT1o5QldmeVJVTG5NeHRVMGlkUGd3K1pMRVpNbEdnTlRodmRibgorSnVxN3hQNXZvc1VRNUdRdnNFUUVMTE5FT2MrMDNxeURRMTRMeXMzN1Roam1PRG5uRUQvV1dSZm5RdThBNDRqRworUTd3aEVyOGdxR1RHTU55TWE3aHF6bXVLSWp2WXJ3eTB1MDIrbHQxQTJZYytsUzRhSnlOaTZHNjk0SW5RcHlnVworbGVyTGlhUDNmL3NQckt2V3FMVExRNUxaeXo2S0VRPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMzg0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhMzg0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NhYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9zaGEzODQuY3J0CkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTAgKDB4YSkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDcgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowNyAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IFNIQTM4NAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6Yjk6M2M6NGE6YzU6Yzg6YTM6OGU6OTA6MTc6YTQ6OWU6NTI6YWE6NzE6CisgICAgICAgICAgICAgICAgICAgIDc1OjI2OjYxOjgwOmU3OmM3OmI1OjZkOjhjOmZmOmFhOmI2OjQxOjI2OmI3OgorICAgICAgICAgICAgICAgICAgICBiZToxMTphZDo1Yzo3MzoxNjowYzo2NDoxMTo0ODowNDpmZjpkNjplMTozYjoKKyAgICAgICAgICAgICAgICAgICAgMDU6ZGI6ODk6YmI6YjM6OTc6MDk6ZDU6MWM6MTQ6ZGQ6Njg6ODc6Mzk6YjA6CisgICAgICAgICAgICAgICAgICAgIDNkOjcxOmNiOmUyOjc2OmQwOjFhOmQ4OjE4OjJkOjgwOjFiOjU0OmY2OmU1OgorICAgICAgICAgICAgICAgICAgICA0NDo5YTpmMTpjYjphZjo2MToyZTpkZjo0OTowZDo5ZDowOTpiNzplZDpiMToKKyAgICAgICAgICAgICAgICAgICAgZmQ6M2M6ZmQ6M2M6ZmE6MjQ6Y2Y6NWQ6YmY6N2M6ZTQ6NTM6ZTc6MjU6YjU6CisgICAgICAgICAgICAgICAgICAgIGVhOjQ0OjIyOmU5OjI2OmQzOmVhOjIwOjk0OjllOmU2OjYxOjY3OmJhOjJlOgorICAgICAgICAgICAgICAgICAgICAwNzo2NzowYjowMzoyZjphMjowOTplZDpmMDozMzo4ZjowYjpjZToxMDplZjoKKyAgICAgICAgICAgICAgICAgICAgNjc6YTQ6YzY6MDg6ZGE6YzE6ZWQ6YzI6M2Y6ZDc6NGE6ZGQ6MTU6M2Q6Zjk6CisgICAgICAgICAgICAgICAgICAgIDVlOjFjOjgxOjYwOjQ2OjNlOmI1OmIzOjNkOjJmOmE2OmRlOjQ3OjFjOmJjOgorICAgICAgICAgICAgICAgICAgICA5MjphZTplYjpkZjoyNzo2YjoxNjo1NjpiNzpkYzplYzpkMTo1NTo1NzphNToKKyAgICAgICAgICAgICAgICAgICAgNmU6ZWM6NzU6MjU6ZjU6Yjc6N2I6ZGY6YWI6ZDI6M2E6NWE6OTE6OTg6N2Q6CisgICAgICAgICAgICAgICAgICAgIDk3OjE3OjBiOjEzOjBhOmE3OjZiOjRhOjhiOmMxOjQ3OjMwOmZiOjNhOmY4OgorICAgICAgICAgICAgICAgICAgICA0MTowNDpkNTpjMTpkZjpiODoxZDpiZjo3YjowMTphNTo2NTphMjplMDoxZToKKyAgICAgICAgICAgICAgICAgICAgMzY6Yjc6YTY6NWM6Y2M6MzA6NWE6Zjg6Y2Q6NmY6Y2Q6ZjE6MTk6NjI6MjU6CisgICAgICAgICAgICAgICAgICAgIGNhOjAxOmUzOjM1OjdmOmZhOjIwOmY1OmRjOmZkOjY5OmIyOjZhOjAwOjdkOgorICAgICAgICAgICAgICAgICAgICAxNzpmNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgN0Q6RTQ6OUM6NkI6RTY6Rjk6NzE6N0Q6NDY6RDI6MTI6M0Q6QUQ6NkI6MUQ6RkQ6QzI6QUE6Nzg6NEMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGEzODRXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA2ODplNjowMzpmMDpiYTo0NDplNzpjYzplMTpiMjowNzo2Yzo1NjpjODpiZTpiNzpiYTo4MDoKKyAgICAgICAgNjE6Yzg6Zjk6NjY6NTc6ZTE6Y2I6NjA6N2Q6Y2Q6OGQ6MGY6NjY6YjA6ZjI6NjE6NDU6ZmQ6CisgICAgICAgIGZjOmM4OjkzOjk1OmJiOmI0OjE0OjAwOjc2OmM3OmUxOjU3OmE2OmUyOjYwOjMxOjhiOmZjOgorICAgICAgICBlMTowZjo2ODoyNDo0YzpiYjoxZDpjNTpiNjo3NzplYzoyMzplMTo1Yjo0ZjoxMDo2Yzo2YToKKyAgICAgICAgZTA6NmQ6ZTc6MzQ6Zjg6NzI6MTQ6YWU6MTY6NTc6MjU6OGI6ZTg6Yjk6NzE6YTE6ZDA6Nzg6CisgICAgICAgIGVhOjE4OmMxOjUxOmM0OjJlOjI2OjZkOmNiOjgwOjhkOmE1OmI5OmRlOmU3OjM3OmMxOjJiOgorICAgICAgICBlYzplODo5ODpjNjpmOToxYTpiZjpmZTphMzpkZTozZDpkNjo1OTo5ODo0NTpkYzo0YTphNjoKKyAgICAgICAgYWQ6MGE6YWY6NzM6NTA6NDM6MjM6NWE6OWI6OWE6Zjk6OGY6ZmY6NDE6MTU6ZTU6OWM6MTI6CisgICAgICAgIDllOjI5OjU1OjVjOjc5OjljOjg5OjBjOmM4OjhhOjgyOjg2OmIxOjk2OmFlOjdjOjdkOjRmOgorICAgICAgICAwYjpmZDplMzo5ZTo4YjphNTo0ZDo4ODo1NTowNTphZDo2Yzo2MzphYTo3NDowYzo0MTowZDoKKyAgICAgICAgNDc6MjI6Y2M6MWE6NDU6MDI6OTI6NWU6ZDE6ZTA6Yjk6MzE6NTI6ZmY6ZjY6MzA6ZjA6ODc6CisgICAgICAgIDJjOmRkOmZhOmZhOmI5OmNjOjQ1OmNiOjM2OjMzOjViOjM1OjdmOjVmOjA1OjRmOmUwOjhmOgorICAgICAgICA5YTplNDpkMjpmYTpjOTpkNDpmYzo2Mjo5OTphYzo1OTpmYjpmZDowNDpiYzo1YTpjMDo0NzoKKyAgICAgICAgNWU6NWQ6M2Q6ZGY6MzE6OGM6N2Y6ZGM6MDA6Y2I6Y2I6YzA6ZjQ6NjI6NDE6NDQ6ZGI6MWQ6CisgICAgICAgIGJhOmMwOmFkOjhhCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURRakNDQWlxZ0F3SUJBZ0lCQ2pBTkJna3Foa2lHOXcwQkFRd0ZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTNXaGNOTWpFd01qRXlNVFEwTkRBM1dqQS9NUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SFRBYkJnTlZCQU1URkZCdmJHRnlVMU5NSUVObGNuUWdVMGhCTXpnME1JSUIKK0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1VHhLeGNpampwQVhwSjVTcW5GMUptR0EKKzU4ZTFiWXovcXJaQkpyZStFYTFjY3hZTVpCRklCUC9XNFRzRjI0bTdzNWNKMVJ3VTNXaUhPYkE5Y2N2aWR0QWEKKzJCZ3RnQnRVOXVWRW12SExyMkV1MzBrTm5RbTM3Ykg5UFAwOCtpVFBYYjk4NUZQbkpiWHFSQ0xwSnRQcUlKU2UKKzVtRm51aTRIWndzREw2SUo3ZkF6and2T0VPOW5wTVlJMnNIdHdqL1hTdDBWUGZsZUhJRmdSajYxc3owdnB0NUgKK0hMeVNydXZmSjJzV1ZyZmM3TkZWVjZWdTdIVWw5YmQ3MzZ2U09scVJtSDJYRndzVENxZHJTb3ZCUnpEN092aEIKK0JOWEIzN2dkdjNzQnBXV2k0QjQydDZaY3pEQmErTTF2emZFWllpWEtBZU0xZi9vZzlkejlhYkpxQUgwWDl3SUQKK0FRQUJvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUjk1SnhyNXZseGZVYlNFajJ0YXgzOXdxcDQKK1REQWZCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBTkJna3Foa2lHOXcwQkFRd0YKK0FBT0NBUUVBYU9ZRDhMcEU1OHpoc2dkc1ZzaSt0N3FBWWNqNVpsZmh5MkI5elkwUFpyRHlZVVg5L01pVGxidTAKK0ZBQjJ4K0ZYcHVKZ01Zdjg0UTlvSkV5N0hjVzJkK3dqNFZ0UEVHeHE0RzNuTlBoeUZLNFdWeVdMNkxseG9kQjQKKzZoakJVY1F1Sm0zTGdJMmx1ZDduTjhFcjdPaVl4dmthdi82ajNqM1dXWmhGM0VxbXJRcXZjMUJESTFxYm12bVAKKy8wRVY1WndTbmlsVlhIbWNpUXpJaW9LR3NaYXVmSDFQQy8zam5vdWxUWWhWQmExc1k2cDBERUVOUnlMTUdrVUMKK2tsN1I0TGt4VXYvMk1QQ0hMTjM2K3JuTVJjczJNMXMxZjE4RlQrQ1BtdVRTK3NuVS9HS1pyRm43L1FTOFdzQkgKK1hsMDkzekdNZjl3QXk4dkE5R0pCUk5zZHVzQ3RpZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTUxMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3NoYTUxMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiNGVlZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfc2hhNTEyLmNydApAQCAtMCwwICsxLDc3IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDExICgweGIpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTUxMldpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjA3IDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDcgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBTSEE1MTIKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmI5OjNjOjRhOmM1OmM4OmEzOjhlOjkwOjE3OmE0OjllOjUyOmFhOjcxOgorICAgICAgICAgICAgICAgICAgICA3NToyNjo2MTo4MDplNzpjNzpiNTo2ZDo4YzpmZjphYTpiNjo0MToyNjpiNzoKKyAgICAgICAgICAgICAgICAgICAgYmU6MTE6YWQ6NWM6NzM6MTY6MGM6NjQ6MTE6NDg6MDQ6ZmY6ZDY6ZTE6M2I6CisgICAgICAgICAgICAgICAgICAgIDA1OmRiOjg5OmJiOmIzOjk3OjA5OmQ1OjFjOjE0OmRkOjY4Ojg3OjM5OmIwOgorICAgICAgICAgICAgICAgICAgICAzZDo3MTpjYjplMjo3NjpkMDoxYTpkODoxODoyZDo4MDoxYjo1NDpmNjplNToKKyAgICAgICAgICAgICAgICAgICAgNDQ6OWE6ZjE6Y2I6YWY6NjE6MmU6ZGY6NDk6MGQ6OWQ6MDk6Yjc6ZWQ6YjE6CisgICAgICAgICAgICAgICAgICAgIGZkOjNjOmZkOjNjOmZhOjI0OmNmOjVkOmJmOjdjOmU0OjUzOmU3OjI1OmI1OgorICAgICAgICAgICAgICAgICAgICBlYTo0NDoyMjplOToyNjpkMzplYToyMDo5NDo5ZTplNjo2MTo2NzpiYToyZToKKyAgICAgICAgICAgICAgICAgICAgMDc6Njc6MGI6MDM6MmY6YTI6MDk6ZWQ6ZjA6MzM6OGY6MGI6Y2U6MTA6ZWY6CisgICAgICAgICAgICAgICAgICAgIDY3OmE0OmM2OjA4OmRhOmMxOmVkOmMyOjNmOmQ3OjRhOmRkOjE1OjNkOmY5OgorICAgICAgICAgICAgICAgICAgICA1ZToxYzo4MTo2MDo0NjozZTpiNTpiMzozZDoyZjphNjpkZTo0NzoxYzpiYzoKKyAgICAgICAgICAgICAgICAgICAgOTI6YWU6ZWI6ZGY6Mjc6NmI6MTY6NTY6Yjc6ZGM6ZWM6ZDE6NTU6NTc6YTU6CisgICAgICAgICAgICAgICAgICAgIDZlOmVjOjc1OjI1OmY1OmI3OjdiOmRmOmFiOmQyOjNhOjVhOjkxOjk4OjdkOgorICAgICAgICAgICAgICAgICAgICA5NzoxNzowYjoxMzowYTphNzo2Yjo0YTo4YjpjMTo0NzozMDpmYjozYTpmODoKKyAgICAgICAgICAgICAgICAgICAgNDE6MDQ6ZDU6YzE6ZGY6Yjg6MWQ6YmY6N2I6MDE6YTU6NjU6YTI6ZTA6MWU6CisgICAgICAgICAgICAgICAgICAgIDM2OmI3OmE2OjVjOmNjOjMwOjVhOmY4OmNkOjZmOmNkOmYxOjE5OjYyOjI1OgorICAgICAgICAgICAgICAgICAgICBjYTowMTplMzozNTo3ZjpmYToyMDpmNTpkYzpmZDo2OTpiMjo2YTowMDo3ZDoKKyAgICAgICAgICAgICAgICAgICAgMTc6ZjcKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIDdEOkU0OjlDOjZCOkU2OkY5OjcxOjdEOjQ2OkQyOjEyOjNEOkFEOjZCOjFEOkZEOkMyOkFBOjc4OjRDCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgODQ6Njg6Nzg6NzI6NTQ6MDA6YmY6OGE6NDU6Mjg6MzU6YmU6MTg6NDc6ZDg6Njk6ZjY6Njc6CisgICAgICAgIGRlOmE2OmY4OmE2OmQwOmZkOjlmOjc5OmY3OmU4OjAyOjhhOmMzOjgzOjVkOjg1OjQ1OmNjOgorICAgICAgICBiNjo5ODo3NzphNzoxODozZjo2YjpkMjplNDpkMDphZjpkNTo1MjpkOTpkYjo3ZTo0YTpkMzoKKyAgICAgICAgNjg6YjA6MDg6NjQ6MTQ6ZGU6YzI6M2I6MWQ6N2I6YWM6Nzk6YWQ6NDk6NWE6NGM6ZjY6ZDI6CisgICAgICAgIDM1OmVmOmE0OjhjOmI3OjViOmQxOjBiOjdiOjUwOmM2OjljOjQ4OjNlOjk2OjNiOjFiOjBiOgorICAgICAgICAwZTplODoxMDozZjo4YzozYjo0Zjo2YjoxZDo1YzozYToyNzpmMzo0MzoyMjphYzozNzoxMToKKyAgICAgICAgNzE6Yjg6MDc6NjY6YjA6Zjg6NzE6YzM6MjI6Y2Y6ZjQ6OTY6ODM6OTM6ZmI6NDI6YjA6MWE6CisgICAgICAgIDQzOmY5OjRiOmRmOmNiOjVmOjBmOmJhOjllOjgwOmYxOmZmOjA4OjNhOjQ2OjUxOmRjOmQwOgorICAgICAgICAzNjpiZDpiMTpjNDpjYTpmYjowMDoxMjplNzplMDozNzo3MDo0MDowZTo3MzoxOTo2MzpjMjoKKyAgICAgICAgZTU6ZGE6NTY6Nzc6MDc6Njg6YTU6NDA6OWU6ZDY6MGY6YWQ6YjU6YjM6YjI6ZjU6M2Y6MDE6CisgICAgICAgIGU4OjY4OmU3OmEzOmIwOmQ3OmYzOmRkOmZmOmI2OmQ3OjhmOjc1OjRlOjI1OmFiOjEyOjMyOgorICAgICAgICA5OTo0NTphZDo1Nzo0MDpkZTpkNzpiNDowZDpkMDpjMzo2Njo4OTo0NzpmMjowYzpiMjpiNToKKyAgICAgICAgZGY6NTI6MGU6ZmE6NjM6NjI6NjU6ODk6MDc6NGE6ODA6Njk6MGU6NGU6YmE6YzA6NDM6NWQ6CisgICAgICAgIDA1Ojc1OjIyOmNmOjUwOmY5OmFjOmJkOmVmOjhkOjhjOjEwOjA4OmI2OjhiOjYyOjRmOmExOgorICAgICAgICA2MDo1NTphMzowZAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUWpDQ0FpcWdBd0lCQWdJQkN6QU5CZ2txaGtpRzl3MEJBUTBGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEzV2hjTk1qRXdNakV5TVRRME5EQTNXakEvTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhUQWJCZ05WQkFNVEZGQnZiR0Z5VTFOTUlFTmxjblFnVTBoQk5URXlNSUlCCitJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdVR4S3hjaWpqcEFYcEo1U3FuRjFKbUdBCis1OGUxYll6L3FyWkJKcmUrRWExY2N4WU1aQkZJQlAvVzRUc0YyNG03czVjSjFSd1UzV2lIT2JBOWNjdmlkdEFhCisyQmd0Z0J0VTl1VkVtdkhMcjJFdTMwa05uUW0zN2JIOVBQMDgraVRQWGI5ODVGUG5KYlhxUkNMcEp0UHFJSlNlCis1bUZudWk0SFp3c0RMNklKN2ZBemp3dk9FTzlucE1ZSTJzSHR3ai9YU3QwVlBmbGVISUZnUmo2MXN6MHZwdDVICitITHlTcnV2Zkoyc1dWcmZjN05GVlY2VnU3SFVsOWJkNzM2dlNPbHFSbUgyWEZ3c1RDcWRyU292QlJ6RDdPdmhCCitCTlhCMzdnZHYzc0JwV1dpNEI0MnQ2WmN6REJhK00xdnpmRVpZaVhLQWVNMWYvb2c5ZHo5YWJKcUFIMFg5d0lECitBUUFCbzAwd1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlI5NUp4cjV2bHhmVWJTRWoydGF4Mzl3cXA0CitUREFmQmdOVkhTTUVHREFXZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS96QU5CZ2txaGtpRzl3MEJBUTBGCitBQU9DQVFFQWhHaDRjbFFBdjRwRktEVytHRWZZYWZabjNxYjRwdEQ5bjNuMzZBS0t3NE5kaFVYTXRwaDNweGcvCithOUxrMEsvVlV0bmJma3JUYUxBSVpCVGV3anNkZTZ4NXJVbGFUUGJTTmUra2pMZGIwUXQ3VU1hY1NENldPeHNMCitEdWdRUDR3N1Qyc2RYRG9uODBNaXJEY1JjYmdIWnJENGNjTWl6L1NXZzVQN1FyQWFRL2xMMzh0ZkQ3cWVnUEgvCitDRHBHVWR6UU5yMnh4TXI3QUJMbjREZHdRQTV6R1dQQzVkcFdkd2RvcFVDZTFnK3R0Yk95OVQ4QjZHam5vN0RYCis4OTMvdHRlUGRVNGxxeEl5bVVXdFYwRGUxN1FOME1ObWlVZnlETEsxMzFJTyttTmlaWWtIU29CcERrNjZ3RU5kCitCWFVpejFENXJMM3ZqWXdRQ0xhTFlrK2hZRldqRFE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF92MV93aXRoX2V4dC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jZXJ0X3YxX3dpdGhfZXh0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA3MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF92MV93aXRoX2V4dC5jcnQKQEAgLTAsMCArMSwyMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEelRDQ0FyVUNDUUM5N1VUSDBqN0NwREFOQmdrcWhraUc5dzBCQVFVRkFEQ0JoekVMTUFrR0ExVUVCaE1DCitXRmd4Q3pBSkJnTlZCQWdUQWxoWU1Rc3dDUVlEVlFRSEV3SllXREVMTUFrR0ExVUVDaE1DV0ZneEN6QUpCZ05WCitCQXNUQWxoWU1TY3dKUVlKS29aSWh2Y05BUWtCRmhoaFpHMXBia0JwWkdWdWRHbDBlUzFqYUdWamF5NXZjbWN4CitHekFaQmdOVkJBTVRFbWxrWlc1MGFYUjVMV05vWldOckxtOXlaekFlRncweE16QTNNRFF4TmpFM01ESmFGdzB4CitOREEzTURReE5qRTNNREphTUlHSE1Rc3dDUVlEVlFRR0V3SllXREVMTUFrR0ExVUVDQk1DV0ZneEN6QUpCZ05WCitCQWNUQWxoWU1Rc3dDUVlEVlFRS0V3SllXREVMTUFrR0ExVUVDeE1DV0ZneEp6QWxCZ2txaGtpRzl3MEJDUUVXCitHR0ZrYldsdVFHbGtaVzUwYVhSNUxXTm9aV05yTG05eVp6RWJNQmtHQTFVRUF4TVNhV1JsYm5ScGRIa3RZMmhsCitZMnN1YjNKbk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMXY4RnN3TXVnaE84Cittd2tIV0FmK1hScEszM2tZUjBpZkJuT2J2azJSOVpURVVrL1RmRkVFRlZsZW41eGhpRTBnOGxiQ2o4WTVNenNnCit3WnNKdjVpbi9LbnJhWWI3VkMwYWgwang0c01raEtSY3lVV2ZqeUg4cjdGTkgxajFqZDA4WnBXSkdvdFl4eGFMCitldnFvbTFyekxOOTlKUE9id3lDQ2dHY1FqbFJWN2NNZklnd2x3SGIvSlBYT3kvaFlBZ2pyQ2pxdkJ1M25MNS9iCitIRjBQeVZHaUtDRVFpSGhNQktOakF4elFyQ1VHeTdWcCszUWxJWXJzNi9tNUE5NnZvaFgvait3endJcDNRZ2lLCitZaGo1RTRaby9pUUxmNlJ3bDdwTDRSVGRUK2NyY3kxNDNtWWlTaE5ZK2F5bDlzbmZWSk5udUhhTWUxNWZWRXNQCitYOWxEdmRCdlh3SURBUUFCb3o4d1BUQTdCZ05WSFJFRU5EQXlnaEpwWkdWdWRHbDBlUzFqYUdWamF5NXZjbWVDCitGbmQzZHk1cFpHVnVkR2wwZVMxamFHVmpheTV2Y21lSEJDVTcvakF3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBQVhVWG9XbFF4S3ZTQ1ZXaGVzOHgwM01DdWRlMG5EcURGSDFEUEdJS2VWZVdPdzg3blZuaStoSXZ5OElJNmhqCis1WmZHU0h1WmNpMkFnRWxBM3RYazJxRGNaL3VCWGUyVlY0SXdzZ1hLVVlTbHB6MXhvVTU1SW5UNGU3S2Rzc0VQCitIT3lyVTAzRHptOEprMFBoZ0VKcFY0OHRrV1lvSnZadk9pd0cwZTQzVVBEdjl4cDhDOEVidkptbXVXa1VXbk5XCitvMHlEbm9BT3hHZlVHU1VRMWd1VHBXQ29RRUtqM0RTNHY0bEkwa05tSm0rb1JFMnZ2MVhlYWxXRUhTdU1wUlpPCitRaHk4V0ltWDNtdXc5OU1QNTc5dFk0NEQ1WjdwM2twaUMxYndWM3R6a0hkZjVta3JBYkZKSWZsaVB2ak1yUE13CisyZXlYWGlqRHNlYnBUMHczcnVNeGpIZz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NsaTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2xpMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmYTUxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NsaTIuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0xEQ0NBYktnQXdJQkFnSUJEVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTWpBMFdoY05Nak13T1RJeU1UVTFNakEwV2pCQk1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIekFkQmdOVkJBTVRGbEJ2YkdGeVUxTk1JRlJsYzNRZ1EyeHBaVzUwSURJdworV1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVJYNWE2eGM5L1RyTHVUdUlIL0VxN3U1bE9zemxWVAorOWpRT3pDN2pZeVVMMzVqaTgxeGdOcGJBMVJnVWNPVi9uOVZMUlJqbHNHelZYUGlXajRkd28rVEhvNEdkTUlHYQorTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZIb0FYNFprL09CZDVSRVFPN0xtTzhRbVA4L2lNRzRHQTFVZAorSXdSbk1HV0FGSjF0SUNSSkFUOHJ5M2kxR2J4K0pNbmIrelo4b1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQworQ1FEQlErSitZa1BNNkRBS0JnZ3Foa2pPUFFRREFnTm9BREJsQWpCS1pRMTdJSU9pbWJtb0QveU43bzg5dTNCTQorbGdPc2puaHczZklPb0xJV3kyV09Hc2svTEdGKytEenZyUnp1TmlBQ01RQ2Q4aWVtMVhTNEpLN2hhajh4b2NwVQorTHdqUWplNVBER0hmZDNoOXRQMzhRa251NWJKcXdzMG1kMktPS0h5ZVYwVT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NsaTIua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY2xpMi5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0N2QwOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NsaTIua2V5CkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSGNDQVFFRUlQYjNobVR4WjMvbVpJM3Z5azdwM1Uzd0JmK1dJb3A2aERoa0Z6SmhtTGNxb0FvR0NDcUdTTTQ5CitBd0VIb1VRRFFnQUVWK1d1c1hQZjA2eTdrN2lCL3hLdTd1WlRyTTVWVS9ZMERzd3U0Mk1sQzkrWTR2TmNZRGFXCit3TlVZRkhEbGY1L1ZTMFVZNWJCczFWejRsbytIY0tQa3h3PT0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzU4NjQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTEucGVtCkBAIC0wLDAgKzEsMTAgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQmJ6Q0I5Z0lCQVRBSkJnY3Foa2pPUFFRQk1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUQorYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVJjTk1UTXdPVEkwTVRZegorTVRBNFdoY05Nak13T1RJeU1UWXpNVEE0V2pBVU1CSUNBUW9YRFRFek1Ea3lOREUyTWpnek9GcWdjakJ3TUc0RworQTFVZEl3Um5NR1dBRkoxdElDUkpBVDhyeTNpMUdieCtKTW5iK3paOG9VS2tRREErTVFzd0NRWURWUVFHRXdKTworVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZworUTBHQ0NRREJRK0orWWtQTTZEQUpCZ2NxaGtqT1BRUUJBMmtBTUdZQ01RRFZHOTVyclNTbDRkSmdiSjV2UjFHVworc3ZFdUVzQWgzNUVoRjFXcmNhZE11Q2VNUVZYOWNVUHVwRmZRVXBIeU1mb0NNUUNLZjB5djhwTjlCQW9pM0ZWbQorNTZtZVdQaFVla2dMS0tNQW9idDJvSkpZNmZldWlGVTJZRkdzMWFGMHJWNkJqK1U9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMjI0LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGEyMjQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzFmMTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMjI0LnBlbQpAQCAtMCwwICsxLDEwIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJjRENCOXdJQkFUQUtCZ2dxaGtqT1BRUURBVEErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRVhEVEV6TURreU5ERTIKK016RXdPRm9YRFRJek1Ea3lNakUyTXpFd09Gb3dGREFTQWdFS0Z3MHhNekE1TWpReE5qSTRNemhhb0hJd2NEQnUKK0JnTlZIU01FWnpCbGdCU2RiU0FrU1FFL0s4dDR0Um04ZmlUSjIvczJmS0ZDcEVBd1BqRUxNQWtHQTFVRUJoTUMKK1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUnd3R2dZRFZRUURFeE5RYjJ4aGNuTnpiQ0JVWlhOMElFVkQKK0lFTkJnZ2tBd1VQaWZtSkR6T2d3Q2dZSUtvWkl6ajBFQXdFRGFBQXdaUUl3Ym4raTBkT2VzdDBJSkd6dXFCTEEKK1Y1bnNjWlB2SGpEVjZsV3NTd3VyUzRMQy9Vdi9xV3RldU1DcDNPcVFSSkhjQWpFQTZLQTBkaWJvdmZMMVdLRm8KK0M4alVHeGxNZkhlV0RSa3FNZmNqamdJcGt5N3Y1MHNLdERPZm1GSm4zSEZVYmlLcAorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZkNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0KQEAgLTAsMCArMSwxMCBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY1RDQjl3SUJBVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFLdVE2ODRzN2d5aHR4S0pyNkxuCitTMkJRMDJmMWpqUEhyWlZkWGFadm0zQzV0R2kyY0trb0sxYU1peUMzTHNSQ3VBSXhBSU1oajBUbWN1SVpyNWZYCitnNVJCeUQ3elVuWkJwb0VBZGd4Rnk0SlBKMklWaVdPUGVrU0doOGIvSlkxVk5TNlpidz09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMzg0LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1lYy1zaGEzODQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTdhYmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhMzg0LnBlbQpAQCAtMCwwICsxLDEwIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJjRENCOXdJQkFUQUtCZ2dxaGtqT1BRUURBekErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRVhEVEV6TURreU5ERTIKK016RXdPRm9YRFRJek1Ea3lNakUyTXpFd09Gb3dGREFTQWdFS0Z3MHhNekE1TWpReE5qSTRNemhhb0hJd2NEQnUKK0JnTlZIU01FWnpCbGdCU2RiU0FrU1FFL0s4dDR0Um04ZmlUSjIvczJmS0ZDcEVBd1BqRUxNQWtHQTFVRUJoTUMKK1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUnd3R2dZRFZRUURFeE5RYjJ4aGNuTnpiQ0JVWlhOMElFVkQKK0lFTkJnZ2tBd1VQaWZtSkR6T2d3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl3YXRlSmFEMTMrWWk0SFdCSWxPb3YKKzhaRHN2bmZRZlcvUjBBMXMyWmNjQWkrYnl1clNodU5HaVN2c0ZTaDVkLzZRQWpFQTQyN0Y4Yk5rL2ZkajVZWHUKK09vMXFFZDdXcEQyZE5VYjBkcmFHU0ljSkdCUkd6aTVpdDE0VVhyOWNSNFM1ZUo2UQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTUxMi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZWMtc2hhNTEyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M5NDAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLWVjLXNoYTUxMi5wZW0KQEAgLTAsMCArMSwxMCBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY1RDQjl3SUJBVEFLQmdncWhrak9QUVFEQkRBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3UURhUUF3WmdJeEFML1ZGckRJWVVFQ3NTMHJWcEF5Cis2enQvQ3FlQVoxc2EvbDVMVGFHMVhXMjg2bjJLaWJpcHI2RXBrWVpOWUlRSUxnSXhBSTB3YjNQeTFESFBXcFlmCisvQkZCSDdDM0tZcStuV1RyTGVFbmhyalUxTHpHL0NpUThsbnVza3lhNmx3L1AzbEovQT09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZnV0dXJlLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1mdXR1cmUucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MzgyMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtZnV0dXJlLnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJnekNDQVFvQ0FRRXdDUVlIS29aSXpqMEVBVEErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRVhEVE15TURNeE1ERXgKK01EVXhOVm9YRFRReU1ETXdPREV4TURVeE5Wb3dLREFTQWdFS0Z3MHhNekE1TWpReE5qSTRNemhhTUJJQ0FSWVgKK0RURTBNREV5TURFek5ETXdOVnFnY2pCd01HNEdBMVVkSXdSbk1HV0FGSjF0SUNSSkFUOHJ5M2kxR2J4K0pNbmIKKyt6WjhvVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlYKK0JBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEdDQ1FEQlErSitZa1BNNkRBSkJnY3Foa2pPUFFRQkEyZ0EKK01HVUNNUUNtc3ZOc09RZGJHcG16cGVabEtVOWxEUDZ5eVdlbnJJLzg5c3daWW9nRTNjU1BvYjR0T3plWWczOGkKK29yOTFJUGdDTUQ3Ti8wUXo2TnEySWdCdFpPUkxnc0EwbHRLK1c2QU9TKy9FSWh2R3VYVjh1Z3VVeVlrbmw0dmIKKytjRStsV3hoQ1E9PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMS1iYWRzaWduLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEtYmFkc2lnbi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYTU5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEtYmFkc2lnbi5wZW0KQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlDSkRDQ0FRWUNBUUV3RXdZSktvWklodmNOQVFFS01BYWlCQUlDQU9vd096RUxNQWtHQTFVRUJoTUNUa3d4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJGdzB4CitOREF4TWpBeE16UTJNelZhRncweU5EQXhNVGd4TXpRMk16VmFNQ2d3RWdJQkNoY05NVE13T1RJME1UWXlPRE00CitXakFTQWdFV0Z3MHhOREF4TWpBeE16UXpNRFZhb0djd1pUQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1CisxYWFWRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NCitNUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUJNR0NTcUdTSWIzRFFFQkNqQUdvZ1FDCitBZ0RxQTRJQkFRQjhaQlgwQkVnUmN4MGxmazFjdEVMUnUxQVlvSjVCbnNtUXBxMjNDYTRZSVAyeWIya1ROMVpTCis0ZlI0U2dZY05jdGdvMkpKaU5pVWtDdTFablJVT0pVeThVbEVpbzArYWV1bVROejZDYmVKRURocjVOQzNvaVYwCitNenZMbjlySlZMUGV0T1Q5VXJ2dkl5OGl6NVBuMWQ4bXU1cmt0OUJLUVJxOU5ReDhyaUtuU0lvVGM5MU5MQ01vCitta0NDQjU1RFZiYXpPRFNXSzE5ZTZ5UTBKUzQ1NFJnbE9zcVJ0TEovRURiaTZsQ3NMWG90RnQzR0VHTXJvYjFPCis3UWNrMVo1OWJvYUh4R1lGRVZueDkwKzRNMy9xaWtWdHdaZGNCakxFbWZ1d1l2c3pGdzhKMnk2WHdtZy9IdFVhCit5NmxpMEp6V05IdGtLVWxDdjIrU0VTWmJEM05VOEdRWQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMS5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNhNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMS5wZW0KQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlDSkRDQ0FRWUNBUUV3RXdZSktvWklodmNOQVFFS01BYWlCQUlDQU9vd096RUxNQWtHQTFVRUJoTUNUa3d4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJGdzB4CitOREF4TWpBeE16UTJNelZhRncweU5EQXhNVGd4TXpRMk16VmFNQ2d3RWdJQkNoY05NVE13T1RJME1UWXlPRE00CitXakFTQWdFV0Z3MHhOREF4TWpBeE16UXpNRFZhb0djd1pUQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1CisxYWFWRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NCitNUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUJNR0NTcUdTSWIzRFFFQkNqQUdvZ1FDCitBZ0RxQTRJQkFRQjhaQlgwQkVnUmN4MGxmazFjdEVMUnUxQVlvSjVCbnNtUXBxMjNDYTRZSVAyeWIya1ROMVpTCis0ZlI0U2dZY05jdGdvMkpKaU5pVWtDdTFablJVT0pVeThVbEVpbzArYWV1bVROejZDYmVKRURocjVOQzNvaVYwCitNenZMbjlySlZMUGV0T1Q5VXJ2dkl5OGl6NVBuMWQ4bXU1cmt0OUJLUVJxOU5ReDhyaUtuU0lvVGM5MU5MQ01vCitta0NDQjU1RFZiYXpPRFNXSzE5ZTZ5UTBKUzQ1NFJnbE9zcVJ0TEovRURiaTZsQ3NMWG90RnQzR0VHTXJvYjFPCis3UWNrMVo1OWJvYUh4R1lGRVZueDkwKzRNMy9xaWtWdHdaZGNCakxFbWZ1d1l2c3pGdzhKMnk2WHdtZy9IdFVhCit5NmxpMEp6V05IdGtLVWxDdjIrU0VTWmJEM05VOEdRWgorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMjI0LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTIyNC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxZDVkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTIyNC5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlDZWpDQ0FURUNBUUV3UGdZSktvWklodmNOQVFFS01ER2dEVEFMQmdsZ2hrZ0JaUU1FQWdTaEdqQVlCZ2txCitoa2lHOXcwQkFRZ3dDd1lKWUlaSUFXVURCQUlFb2dRQ0FnRGlNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lECitWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVJjTk1UUXdNVEl3CitNVE0xTmpBMldoY05NalF3TVRFNE1UTTFOakEyV2pBb01CSUNBUW9YRFRFek1Ea3lOREUyTWpnek9Gb3dFZ0lCCitGaGNOTVRRd01USXdNVE0wTXpBMVdxQm5NR1V3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yCitQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHCitBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHCitTQUZsQXdRQ0JLRWFNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnU2lCQUlDQU9JRGdnRUJBRUpJCitpOXNRT3pNdnZPVGtzTjQ4K1gra2svd2tMTUtSR0kyMjJscVU2eTZ0UDFMWDNPRS8rS044Z1BYUitsQ0MrZTB2CitUc1JUSmtwS0VjbUhab1AvOGtPdFpuTGI5UGRJVEtHTVFuWitkbW41TUZFelpJL3p5cllXdUpUdUsxUTgzdzBlCitNYzg4Y0FodThpNFBUay9XbnNXRHBoSzFRMllSdXBtbXdXU1VwcDFaMnJwUitZU0NlZEMwMVRWcnRTVUpVQnc5CitOU3FLRGh5V1lKSWJTNi9iRmFFUnN3Qzh4bE1SaHlMSFV2aWtqbUFLMzZUYklkaFRuRWZmSE9QVzc1c0VPRUVCCitmMEEzVnRsWjd5NXl0Mi9hNnZPYXVKQ2l2eEt0L1B1dGRIZkJxSDQzUVFtb1ZMV0MyRm1UOUFEVEp3Y3NaQjNECithNkpTcUNJTVJDUVkySk9VbjBBPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMjU2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTI1Ni5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2YTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTI1Ni5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlDZWpDQ0FURUNBUUV3UGdZSktvWklodmNOQVFFS01ER2dEVEFMQmdsZ2hrZ0JaUU1FQWdHaEdqQVlCZ2txCitoa2lHOXcwQkFRZ3dDd1lKWUlaSUFXVURCQUlCb2dRQ0FnRGVNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lECitWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVJjTk1UUXdNVEl3CitNVE0xTmpFMldoY05NalF3TVRFNE1UTTFOakUyV2pBb01CSUNBUW9YRFRFek1Ea3lOREUyTWpnek9Gb3dFZ0lCCitGaGNOTVRRd01USXdNVE0wTXpBMVdxQm5NR1V3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yCitQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHCitBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHCitTQUZsQXdRQ0FhRWFNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnR2lCQUlDQU40RGdnRUJBRVo0CitvcXA5aTVlWHJONmFDU1RhVTFqMDdNVlRGVy9VMWpRQXE2R3NlQjZiRXZvRVhGTVVISnNnQU9icUNLOWZsZkVDCitGRXFYcVdTbzMzaGhQVTdBS0t0dGJETGpVWVJOblFBUFJVblJJbDEvYTErVWpxZ0tjaFdXRDlpdHllVzhJQ3hvCitJZEFUWDlyZVltUERMSU1xVEM3enVmbFlrdnJ2ZEVPdUJPUlFQNW1uNGo4dDg0TVNRRi9wNHF6YVUwWHhMbzRYCitja3paQ2NIcGE0NUFBcENEakpNZDlvbmhGVkNZc3lraVlyRjlOUUZPOFRJNGxRNWp2NzlHb3VmRXp2aFkxU1BCCityMXh6NHNNcGZ5YW9QYWEzU00yL25ENjVFNWp6WGVsbDJ1MlZXTkdLdjR6QVFQMEU1eUdlbCsxcmtsQmx0YWRiCitYTGRKeXlhazMzQ0xCS3UrbkpjPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMzg0LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTM4NC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmN2U0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTM4NC5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlDZWpDQ0FURUNBUUV3UGdZSktvWklodmNOQVFFS01ER2dEVEFMQmdsZ2hrZ0JaUU1FQWdLaEdqQVlCZ2txCitoa2lHOXcwQkFRZ3dDd1lKWUlaSUFXVURCQUlDb2dRQ0FnRE9NRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lECitWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVJjTk1UUXdNVEl3CitNVE0xTmpJNFdoY05NalF3TVRFNE1UTTFOakk0V2pBb01CSUNBUW9YRFRFek1Ea3lOREUyTWpnek9Gb3dFZ0lCCitGaGNOTVRRd01USXdNVE0wTXpBMVdxQm5NR1V3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yCitQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHCitBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHCitTQUZsQXdRQ0FxRWFNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnS2lCQUlDQU00RGdnRUJBQWNvCitTbnRVR0RMQk9BdTBJSVphVmVhNU50MU5Nc01jcHBDMGhXUHVIMUxLQXd5VU9EQnFwVCswK0F1QUxLMGVJZFlSCithN21BQitjdjJmRndtd3huUVdKMUZ2eDRmdC9OMkFBZkI4M1ZSS3BTbzN4UjhieGxvSGZUV0tteXhKSG1IOWoxCitFWW1MUzg2cmozTmhqZjRtL1lsUVEzSW01SHdPZ1NnQk9FOGdscTVEKzBXbXNpOUxzTkVaWEV6TXc3VE1VZ2JzCit5OW8vZ2hZRi9zaEtVNG1ld0szRGVNOWdRaVRjSDVBNElTWFI4N2hCUTA4QUtKUkFHMUNMdlR5enFXaVVVWStrCitxOGlaRFlGMTdzSHJQaTJ5bjhxOWM0emR4aWFXREdEZEwwTGg5MHdYR1RBYWdlb0dFcTI1VE11TDVGcFgrdTF1CitLVUgveGYxakVuTnpiWU5HaVp3PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhNTEyLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTUxMi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxZDY1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTUxMi5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlDZWpDQ0FURUNBUUV3UGdZSktvWklodmNOQVFFS01ER2dEVEFMQmdsZ2hrZ0JaUU1FQWdPaEdqQVlCZ2txCitoa2lHOXcwQkFRZ3dDd1lKWUlaSUFXVURCQUlEb2dRQ0FnQytNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lECitWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVJjTk1UUXdNVEl3CitNVE0xTmpNNFdoY05NalF3TVRFNE1UTTFOak00V2pBb01CSUNBUW9YRFRFek1Ea3lOREUyTWpnek9Gb3dFZ0lCCitGaGNOTVRRd01USXdNVE0wTXpBMVdxQm5NR1V3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yCitQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHCitBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHCitTQUZsQXdRQ0E2RWFNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnT2lCQUlDQUw0RGdnRUJBQjlGCit5d0JmeE9qZXR4TmJDRmhPWW9QWTJqdkZDRlZkbG93TUd1eEVoWC9Ma3RxaUJYcVJjMnI1bmFRU3p1SHFPOElxCisxekFDdGlETHJpMEN2Z1NIbHJhdkJOZVk0YzJ3ai8vdWVGRTg5dFk1cEs5RTZ2WnA3Y1YrUmZNeDJZZkdQQUEyCit0N3RXWjJySld6RUxnOGNaOGhwalN3Rkg3Sm1nSnpqRTVnaTJnQURoQllPNlZ2NVMzU09ncU5qaU4xT00zMUFVCitwNkdISzVZMWp1ckY1Wnd6cyt3M3dYb1hncE94eHdFQzRlaVM4NmM5a05TdWR3VEx2RFRVMGJZRVFFMWNGK0swCitzQjhRV0FCRkpmdU81a2pEMnczcldnbUFpT0tzWm94ZDF4cmRhK1dEM0poRFhub1ZxM29WQklWbFdWejZZSUQ4Citlbk1mTXZ3U2NBNUFJbXp1OXhBPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkMTA5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybC5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeU1ERXdNakkxCitPVm9YRFRFNU1URXlOVEV3TWpJMU9Wb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUpZdVdkS1BkYmxNVldDbnhwTW5jaHVMCitkcVd6SzJCQTBSZWxDYUdqcHh1d1gzTm1MRG0rNWhLamEvREp4YVJxVE9mNFJTQzNrY1g4Q2RJbGRzTE85NmR6CisvL3dBUWRGUERoeTZBRlQ1dktUTzhJdFBIRGI3cUZPcUZxcGVKaTVYTjF5b1pHVEIxZWkwbWdEM3hCYUticDZVCit5Q09aSlNJRm9tdDdwaVQ0R2NnV1ZITFVtcHlIRERlb2ROaFlQck4wamYybXIrRUNkOWZRSllkejFxbTBYeCtRCitOYktYRGlQUm1QWDBxVmxlQ1pTZVNwMUpBbVU0R29DTys5NnFRVXBqZ2xsKzZ4V3lhM1VOajYxZjlzaDBaenI3Cis1dWcyTFpvNXVCTS9McE5SMUszVEx4TkNjZzd1VVBUbjlyMTQzZDdpdkpoUGwzdEVKbjRQWGp2Nm1sTG9PZ1U9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X2VjLXJzYS5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X2VjLXJzYS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkYThmZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfZWMtcnNhLnBlbQpAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJjVENCOXdJQkFUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRVhEVEV6TURreU5ERTIKK016RXdPRm9YRFRJek1Ea3lNakUyTXpFd09Gb3dGREFTQWdFS0Z3MHhNekE1TWpReE5qSTRNemhhb0hJd2NEQnUKK0JnTlZIU01FWnpCbGdCU2RiU0FrU1FFL0s4dDR0Um04ZmlUSjIvczJmS0ZDcEVBd1BqRUxNQWtHQTFVRUJoTUMKK1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUnd3R2dZRFZRUURFeE5RYjJ4aGNuTnpiQ0JVWlhOMElFVkQKK0lFTkJnZ2tBd1VQaWZtSkR6T2d3Q2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QUt1UTY4NHM3Z3lodHhLSnI2TG4KK1MyQlEwMmYxampQSHJaVmRYYVp2bTNDNXRHaTJjS2tvSzFhTWl5QzNMc1JDdUFJeEFJTWhqMFRtY3VJWnI1ZlgKK2c1UkJ5RDd6VW5aQnBvRUFkZ3hGeTRKUEoySVZpV09QZWtTR2g4Yi9KWTFWTlM2WmJ3PT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpJMQorT1ZvWERURTVNVEV5TlRFd01qSTFPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKWXVXZEtQZGJsTVZXQ254cE1uY2h1TAorZHFXeksyQkEwUmVsQ2FHanB4dXdYM05tTERtKzVoS2phL0RKeGFScVRPZjRSU0Mza2NYOENkSWxkc0xPOTZkegorLy93QVFkRlBEaHk2QUZUNXZLVE84SXRQSERiN3FGT3FGcXBlSmk1WE4xeW9aR1RCMWVpMG1nRDN4QmFLYnA2VQoreUNPWkpTSUZvbXQ3cGlUNEdjZ1dWSExVbXB5SEREZW9kTmhZUHJOMGpmMm1yK0VDZDlmUUpZZHoxcW0wWHgrUQorTmJLWERpUFJtUFgwcVZsZUNaU2VTcDFKQW1VNEdvQ08rOTZxUVVwamdsbCs2eFd5YTNVTmo2MWY5c2gwWnpyNworNXVnMkxabzV1Qk0vTHBOUjFLM1RMeE5DY2c3dVVQVG45cjE0M2Q3aXZKaFBsM3RFSm40UFhqdjZtbExvT2dVPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9lY2Z1dC1yc2EucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9lY2Z1dC1yc2EucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjhjMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X2VjZnV0LXJzYS5wZW0KQEAgLTAsMCArMSwyMiBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCZ3pDQ0FRb0NBUUV3Q1FZSEtvWkl6ajBFQVRBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRNeU1ETXhNREV4CitNRFV4TlZvWERUUXlNRE13T0RFeE1EVXhOVm93S0RBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYU1CSUNBUllYCitEVEUwTURFeU1ERXpORE13TlZxZ2NqQndNRzRHQTFVZEl3Um5NR1dBRkoxdElDUkpBVDhyeTNpMUdieCtKTW5iCisrelo4b1VLa1FEQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WCitCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQ0NRREJRK0orWWtQTTZEQUpCZ2NxaGtqT1BRUUJBMmdBCitNR1VDTVFDbXN2TnNPUWRiR3BtenBlWmxLVTlsRFA2eXlXZW5ySS84OXN3WllvZ0UzY1NQb2I0dE96ZVlnMzhpCitvcjkxSVBnQ01EN04vMFF6Nk5xMklnQnRaT1JMZ3NBMGx0SytXNkFPUysvRUlodkd1WFY4dWd1VXlZa25sNHZiCisrY0UrbFd4aENRPT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpJMQorT1ZvWERURTVNVEV5TlRFd01qSTFPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKWXVXZEtQZGJsTVZXQ254cE1uY2h1TAorZHFXeksyQkEwUmVsQ2FHanB4dXdYM05tTERtKzVoS2phL0RKeGFScVRPZjRSU0Mza2NYOENkSWxkc0xPOTZkegorLy93QVFkRlBEaHk2QUZUNXZLVE84SXRQSERiN3FGT3FGcXBlSmk1WE4xeW9aR1RCMWVpMG1nRDN4QmFLYnA2VQoreUNPWkpTSUZvbXQ3cGlUNEdjZ1dWSExVbXB5SEREZW9kTmhZUHJOMGpmMm1yK0VDZDlmUUpZZHoxcW0wWHgrUQorTmJLWERpUFJtUFgwcVZsZUNaU2VTcDFKQW1VNEdvQ08rOTZxUVVwamdsbCs2eFd5YTNVTmo2MWY5c2gwWnpyNworNXVnMkxabzV1Qk0vTHBOUjFLM1RMeE5DY2c3dVVQVG45cjE0M2Q3aXZKaFBsM3RFSm40UFhqdjZtbExvT2dVPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9yc2EtZWMucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9yc2EtZWMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDM2OWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfY2F0X3JzYS1lYy5wZW0KQEAgLTAsMCArMSwyMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeU1ERXdNakkxCitPVm9YRFRFNU1URXlOVEV3TWpJMU9Wb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUpZdVdkS1BkYmxNVldDbnhwTW5jaHVMCitkcVd6SzJCQTBSZWxDYUdqcHh1d1gzTm1MRG0rNWhLamEvREp4YVJxVE9mNFJTQzNrY1g4Q2RJbGRzTE85NmR6CisvL3dBUWRGUERoeTZBRlQ1dktUTzhJdFBIRGI3cUZPcUZxcGVKaTVYTjF5b1pHVEIxZWkwbWdEM3hCYUticDZVCit5Q09aSlNJRm9tdDdwaVQ0R2NnV1ZITFVtcHlIRERlb2ROaFlQck4wamYybXIrRUNkOWZRSllkejFxbTBYeCtRCitOYktYRGlQUm1QWDBxVmxlQ1pTZVNwMUpBbVU0R29DTys5NnFRVXBqZ2xsKzZ4V3lhM1VOajYxZjlzaDBaenI3Cis1dWcyTFpvNXVCTS9McE5SMUszVEx4TkNjZzd1VVBUbjlyMTQzZDdpdkpoUGwzdEVKbjRQWGp2Nm1sTG9PZ1U9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJjVENCOXdJQkFUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRVhEVEV6TURreU5ERTIKK016RXdPRm9YRFRJek1Ea3lNakUyTXpFd09Gb3dGREFTQWdFS0Z3MHhNekE1TWpReE5qSTRNemhhb0hJd2NEQnUKK0JnTlZIU01FWnpCbGdCU2RiU0FrU1FFL0s4dDR0Um04ZmlUSjIvczJmS0ZDcEVBd1BqRUxNQWtHQTFVRUJoTUMKK1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUnd3R2dZRFZRUURFeE5RYjJ4aGNuTnpiQ0JVWlhOMElFVkQKK0lFTkJnZ2tBd1VQaWZtSkR6T2d3Q2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QUt1UTY4NHM3Z3lodHhLSnI2TG4KK1MyQlEwMmYxampQSHJaVmRYYVp2bTNDNXRHaTJjS2tvSzFhTWl5QzNMc1JDdUFJeEFJTWhqMFRtY3VJWnI1ZlgKK2c1UkJ5RDd6VW5aQnBvRUFkZ3hGeTRKUEoySVZpV09QZWtTR2g4Yi9KWTFWTlM2WmJ3PT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfcnNhYmFkcGVtLWVjLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9jYXRfcnNhYmFkcGVtLWVjLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDM1ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2NhdF9yc2FiYWRwZW0tZWMucGVtCkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpJMQorT1ZvWERURTVNVEV5TlRFd01qSTFPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKWXVXZEtQZGJsTVZXQ254cE1uY2h1TAorZHFXeksyQkEwUmVsQ2FHanB4dXdYM05tTERtKzVoS2phL0RKeGFScVRPZjRSU0Mza2NYOENkSWxkc0xPOTZkegorLy93QVFkRlBEaHk2QUZUNXZLVE84SXRQSERiN3FGT3FGcXBlSmk1WE4xeW9aR1RCMWVpMG1nRDN4QmFLYnA2VQoreUNPWkpTSUZvbXQ3cGlUNEdjZ1dWSExVbXB5SEREZW9kTmhZUHJOMGpmMm1yK0VDZDlmUUpZZHoxcW0wWHgrUQorTmJLWERpUFJtUFgwcVZsZUNaU2VTcDFKQW1VNEdvQ08rOTZxUVVwamdsbCs2eFd5YTNVTmo2MWY5c2gwWnpyNworNXVnMkxabzV1Qk0vTHBOUjFLM1RMeE5DY2c3dVVQVG45cjE0M2Q3aXZKaFBsM3RFSm40UFhqdjZtbExvT2dVCistLS0tLUVORCBYNTA5IENSTC0tLS0tCistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJjVENCOXdJQkFUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRVhEVEV6TURreU5ERTIKK016RXdPRm9YRFRJek1Ea3lNakUyTXpFd09Gb3dGREFTQWdFS0Z3MHhNekE1TWpReE5qSTRNemhhb0hJd2NEQnUKK0JnTlZIU01FWnpCbGdCU2RiU0FrU1FFL0s4dDR0Um04ZmlUSjIvczJmS0ZDcEVBd1BqRUxNQWtHQTFVRUJoTUMKK1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUnd3R2dZRFZRUURFeE5RYjJ4aGNuTnpiQ0JVWlhOMElFVkQKK0lFTkJnZ2tBd1VQaWZtSkR6T2d3Q2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QUt1UTY4NHM3Z3lodHhLSnI2TG4KK1MyQlEwMmYxampQSHJaVmRYYVp2bTNDNXRHaTJjS2tvSzFhTWl5QzNMc1JDdUFJeEFJTWhqMFRtY3VJWnI1ZlgKK2c1UkJ5RDd6VW5aQnBvRUFkZ3hGeTRKUEoySVZpV09QZWtTR2g4Yi9KWTFWTlM2WmJ3PT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjYwYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX2V4cGlyZWQucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpReAorT1ZvWERURXhNREl5TURFeE1qUXhPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFLZ1AxWG1DSVBiZlkxL1VPK1NWRlFpcgorakFyWjk0UW5RZG9hbjR0SjI5ZDhEbVR4Sit6OS9LeVdOb0dlT3djOVAvMkdRUWFaYWhRT0JyMGY2bFlkNjdDdAord0ZWaC9RMnpGOEZnUmNyUVY3dS92Sk0zM1EyeUVzUWtNR2xNN3JFNWxDOTcydlVLV3UvTktxOGJOOVcvdFd4WgorU0ZidlRYcHYwMjRhSTBJUnVkcE9DQUxuSXk4U0ZoVmIyLzUySU4ydVI2cXJGaXpEZXhNRWRTY2tncEh1SnpHUworSWlBTmhJTW41TGRRWUpGalBnQnpRVTEydERkZ3pjcHh0R2hUMTB5NHVRcmUrVWJTancraVZ5bWwzaXNzdzU5aworT1Nta1dGYjA2TGFtUkMyMTVKQU1vazNZUU81Um54Q1I4RWpxUGNKcis3K085YTFPMSsreWlhaXRnNGJVakVBPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX21kMi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfbWQyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjczNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX21kMi5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUUlGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEE1TURjeE9URTVOVFl6CitOMW9YRFRBNU1Ea3hOekU1TlRZek4xb3dLREFTQWdFQkZ3MHdPVEF5TURreU1URXlNelphTUJJQ0FRTVhEVEE1CitNREl3T1RJeE1USXpObG93RFFZSktvWklodmNOQVFFQ0JRQURnZ0VCQUY4RjV5ODJ6Z3R4Y3dRNGFGdnJrYW5UCit5Z3lkNStSVy9ZLy92cGNrNDRWK0NZeDFkMXIrUWthdWFYZWw5cVVLQlBzZzJkVXdRK2p3Vi9tK1NwMk1IYVg1CitOZlc3WFViN0ppNHlod2doOS85dkZQcXFuS0JmOWVzTEp1Sm9RNG1MaGNHQjVKMXlDY2F2THJ5bnZCNFBKRW5HCitncmFUYmJ5aXplbFhCbWszQXB2Tll4Y3pKWnh0N0V6cFZickZhZXY3bXlHbU9mZmREa0lNYzJXRHBEa3lMVGxVCitrSVRqQjdmTUpoRC9kZ05za0taNGZna0tLS1BDTUpySlBPNjdXendxeC82dnNyWmNBQ0I5WCsxNDNXWnI0R1ZPCitGdzJTYU1ucWZWTGxVRW5kb09wYkxDVTR1Z2NjODJrUVFGM1Rzb3ZYSllXN1hxb1dsMnUvRU5Dd1NobDlybDQ9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfbWQ0LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9tZDQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzdkYWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfbWQ0LnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRTUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl4TWpFME5EUXcKK04xb1hEVEV4TURReE16RTBORFF3TjFvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVEQlFBRGdnRUJBSUp0WVh5M3V3SXBtU0dmaTltdVM4eHYKKzM2RlQ2ZzNzMVYveGljZFBhNTRqdUpnQkk2c3hIS3pRdGJTTklicWFkRVd3VXR2UThrMUVNUm85VUdPYmhSVjgKK2krVVdtNXFpMEdGVjduTWk0RTJwMkppL3NGS3RnZHhremhDZm4rcDNNb0dneC9uQzdZdHdwbk5kRitrdUNWMU0KK0pUUHFmbSt0YVprWUFET2FmUC9oUmFQeDNUSStITkUzdXg0Q2I3aE5wV2RmV3p0NDhaUE11aENNekl0TGQvVUsKK3h4akphbTlYQUdVVEtpNytlV3RtYTlYem1ZT0lFbFF2MktGUFZNY3g1bnZnMDM5cnJXSzZ0T2JHTDY3a0NmVEgKK3Yrbkl4N3JBT1c2VU5VOGFqMWtmSkhZakVLTUJIMUk5d2pNU0hVcGt4QkxRT0tsUE5Sa3NpRVZzSWhtRVZzcz0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9tZDUucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX21kNS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxNzk2NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9tZDUucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFRRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXhNakUwTkRRdworTjFvWERURXhNRFF4TXpFME5EUXdOMW93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUVCUUFEZ2dFQkFLS0NKWjFNd0wrZ0tBdzNSVjRxRW1iOQorZ01EZFNMSjFWZGtuOUZnRHgyaWpObllEdHZhVytJM3NPWHJxN082Z1ZOMUtFYW1KSmJ1ZlZKQTUrT0Uyb1ZiQworaHVzRWRnUW04RDVUYnJHY2pQSVBXeGdZeXV1UnNsN1hvdlpoWG5xVElVckMrSjhvSDlYekthTWMrSFpiNVVoUgoraDhiemN5cCs5amJCamU3bFd3S1R6a3V2ZC9JN1ZiUzAyVFVrV0ZKVHJZQjBMYWo4V01jZ2NaaXlYMGladWo4agorNGhPdXB1MGxQb1N6WjRoN3QwVm1heTZ3Tys4bjhMSm9oeWl3WVM3TGRkcE9qSWRQME1XaWZON3UvQXJxTk5saAorMmtnOGVBYzFwWU9VL3BKRlRBQWJPbUMva1FwYTlza2QrUFBJUFBoOVQ1M28zeWVEUUEwdkZxTjkySnJ5Q0NVPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTEucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTEucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWJlYmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMS5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeE1qRTBORFF3CitOMW9YRFRFeE1EUXhNekUwTkRRd04xb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUc2NGpxbjdWTGR2bktST3NiQ1BSOHc5Cit4bm94OXZqdU0ybEdXZW1hOXNUdXB0dzlFaEFyVlNiaWJYWjFJUFB5ckV5MVFPcTNOdWtCcVVXM0t6T3pZVjVNCitCeFpTYTI4RlRReHRWQ2hXa0RVSU1DSzhCU3h5MDd5aWVGZi8zQThtYmZjVzNaek40YWtMeE93ZXVGcDZsMkg3Cis5b2EyamVVaTFCbEhDWlM2SllJMnBIWmw4cWlNUmlxcU1sZVNNMmsxdzdUcmFLTE5CRk04VUs3MmJyWGVaalBpCituTk96ZFlzUUR6V28xSFc3ZHNMV0xmWktvSmV5cXZvZlZEUXBDNWRPNTZrdHkvZG84OXoxT25FWGZ6TU5lVlZUCitKQ2VBT3p1dTZrZHJmKzlrZVJvV2hjSW9Cb3MvWHRUVjU3dTBwZ3I4MWJMZ2pqNVBZaXZldktML2tLYnl2S0k9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMjI0LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGEyMjQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NmY1YmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMjI0LnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRNEZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl4TWpFME5EUXcKK04xb1hEVEV4TURReE16RTBORFF3TjFvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVPQlFBRGdnRUJBTDJzSWx5Mk93Z0J1OVVmRUltZHVURy8KK1J0R0VPOFJrWGJDUkpQTFphVkdRaDliOHJDUlZITDl0SVdtMzcyRlZrS3lZRW0zbUlybDJyeTE2UnpuUnQ1eXgKK0RkOC9ES1VHVWxJZTFLd3pqRGM5TzdidjFGRFNYSGQxVVNtR1RoZUtESE50dUpYWUVOTUhkb3lSMmsyQlZHT1oKK2llNHpVY1NwcXlNakJsVWpnTm1YTjZnUUljclJJbXVtVlVqTWs3NCtyV1RhMGhRMHBpRjJxbFJ1RTFkRHFjWlAKK0xrRS85MnJibkZlUkFPOTFYVWVFajEzZGlmMlVqbEFyRldkNjJBRnAwd3RJbjJzYjd3YWhoVWo5L3JFczZXZ3gKK2tkaU5zUk10bzYvaXhMclB1M3Z4czgwWlBXSGV5NTg3VDFaWjliUy93RGtwOVcrVzByR3lSb1BWbXFpS3R2TT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGEyNTYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTI1Ni5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjYTI1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGEyNTYucGVtCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXhNakUwTkRRdworTjFvWERURXhNRFF4TXpFME5EUXdOMW93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHNG1CQmd3Zk55bkNZWUwyQ0VucW9yZQorbWdLcEMzMnRCNldpVUJ1OWZpZ2N2ZE4zblNYLzF3ckI4cnBpRThSMDRDOG9TRmdsd2hvdEpDbmxXc3k0MnRqYgorMHBrMFd1aXpsbjBQRk1jL095cHFSTk5od3gzMVNISDQyVzRLek9OaXF2cTNuL1drSDNNMVluaVIxWm5NbHl2aQorbEppb1FuNlpBb2M2TzZtTVAxSjlkdUtZWWhpTUFPVjk5MlBEMS9pcVh3K2pZTjMxUndkSVM4L21HeklzNGFrZQorRWR2aXdoTTNFNC9zVmJOT1dDT25aRllWNG0reU5BRWUyOUhMMVZLdzZVWGl4QmN6Y3QrYnJxWE5WRDNVNlQwRgorNW92UjZCVGVmWk8xN2VUNTJEdWtlNVJaR0RVeVFPR3l3eE9ZS0k1VytGY09ZZHArVTVJZGszOTl0QXoyTWR3PQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTM4NC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhMzg0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2JhYTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3JsX3NoYTM4NC5wZW0KQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCcXpDQmxEQU5CZ2txaGtpRzl3MEJBUXdGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRVhEVEV4TURJeE1qRTBORFF3CitOMW9YRFRFeE1EUXhNekUwTkRRd04xb3dLREFTQWdFQkZ3MHhNVEF5TVRJeE5EUTBNRGRhTUJJQ0FRTVhEVEV4CitNREl4TWpFME5EUXdOMW93RFFZSktvWklodmNOQVFFTUJRQURnZ0VCQUMwR3BtUnZzcnZzaHAxcS9TWGs4MEhBCittMjhadkV1eXM5elk1L0FucnRZSFFmc1g5UVJKazVsaTdQbG56SHRWR3A4STVRaTRtSlZQYUorSm1ocUFjL29vCitOUG14RHg4bTlYRjl2MFhIenFRWklXbFBYSDhRTTlXTHpUYXpiUUZYaHV3blo2TFBocG8rbThjYk45MW1VRmlsCis5ZytTR2ttYStWWVYreVBSTm1LeWxkY1JWdlBaVUlraFRDTVdrWm9ZcmJEWFVta1ZRcHNnejJjNWtzSWVNSS83Cis0UWo5SjM4STlBT3QwRGxRM2V0RmhOYzBPTW5SN3pZOHRuOUI0ZGVqb05rbEVaZml5RHhzRFpWUHVzWnJ4bldNCitXeHVlaE9HSFpmM1lFU2pMTXRSN0JXMjZRUkhJRi9uaEdESHNiTGl1bnhYSTZlSmxiWUZvWk1md2M2VE1xbmM9CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhNTEyLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NybF9zaGE1MTIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNzEyZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9jcmxfc2hhNTEyLnBlbQpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJxekNCbERBTkJna3Foa2lHOXcwQkFRMEZBREE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFWERURXhNREl4TWpFME5EUXcKK04xb1hEVEV4TURReE16RTBORFF3TjFvd0tEQVNBZ0VCRncweE1UQXlNVEl4TkRRME1EZGFNQklDQVFNWERURXgKK01ESXhNakUwTkRRd04xb3dEUVlKS29aSWh2Y05BUUVOQlFBRGdnRUJBSDZHVTI0aGQ2ZC81UG1EdXNUK2gyS2wKK2U3c2NtaGtaRFBVK1ZKU256SGRFUkVZVFBhb0ZxeVZCdUpPRTk1bFpFTEVxZE9hdWhPM2xHMldFUVZHY2dFY3YKKzRqUzJFelIzQllleDFjMXVwcUd0ZEl2SW9BOVRPTHVrZHk2S2VhdW9taVdobzJLZDdiU2FYSHkyMGp3ZGtMa28KKy90M2xWaFR0QnZLYmg4WEhWWXdDYXcxYUNqM0x5ZHdOY1MrelBuUmdzTVZIc3pGeG1NTm41SENSVzhsYll3Y2YKK1VBOThPbXhJWnMyaHBCS1JwdmxmQTV5NnNYRXgyK3RTTWcrTUpyemlHQmdHNk9SL20rS1RhSzVZbGU5bnJDKzcKK2h6S0llODNocGt0dmZCMUNZNUFrNFVrZTkvMUZScUFqczVLQ1J4WVNHUTdaZFM3RGdBZUd3VDNzbExibC90WT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NydF9jYXRfcnNhZXhwLWVjLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2NydF9jYXRfcnNhZXhwLWVjLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjc0YzlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvY3J0X2NhdF9yc2FleHAtZWMucGVtCkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnF6Q0JsREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSQorVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEVYRFRFeE1ESXlNREV3TWpReAorT1ZvWERURXhNREl5TURFeE1qUXhPVm93S0RBU0FnRUJGdzB4TVRBeU1USXhORFEwTURkYU1CSUNBUU1YRFRFeAorTURJeE1qRTBORFF3TjFvd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFLZ1AxWG1DSVBiZlkxL1VPK1NWRlFpcgorakFyWjk0UW5RZG9hbjR0SjI5ZDhEbVR4Sit6OS9LeVdOb0dlT3djOVAvMkdRUWFaYWhRT0JyMGY2bFlkNjdDdAord0ZWaC9RMnpGOEZnUmNyUVY3dS92Sk0zM1EyeUVzUWtNR2xNN3JFNWxDOTcydlVLV3UvTktxOGJOOVcvdFd4WgorU0ZidlRYcHYwMjRhSTBJUnVkcE9DQUxuSXk4U0ZoVmIyLzUySU4ydVI2cXJGaXpEZXhNRWRTY2tncEh1SnpHUworSWlBTmhJTW41TGRRWUpGalBnQnpRVTEydERkZ3pjcHh0R2hUMTB5NHVRcmUrVWJTancraVZ5bWwzaXNzdzU5aworT1Nta1dGYjA2TGFtUkMyMTVKQU1vazNZUU81Um54Q1I4RWpxUGNKcis3K085YTFPMSsreWlhaXRnNGJVakVBPQorLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQorLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCitNSUlCY1RDQjl3SUJBVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JCitVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEVYRFRFek1Ea3lOREUyCitNekV3T0ZvWERUSXpNRGt5TWpFMk16RXdPRm93RkRBU0FnRUtGdzB4TXpBNU1qUXhOakk0TXpoYW9ISXdjREJ1CitCZ05WSFNNRVp6QmxnQlNkYlNBa1NRRS9LOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DCitUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZECitJRU5CZ2drQXdVUGlmbUpEek9nd0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFLdVE2ODRzN2d5aHR4S0pyNkxuCitTMkJRMDJmMWpqUEhyWlZkWGFadm0zQzV0R2kyY0trb0sxYU1peUMzTHNSQ3VBSXhBSU1oajBUbWN1SVpyNWZYCitnNVJCeUQ3elVuWkJwb0VBZGd4Rnk0SlBKMklWaVdPUGVrU0doOGIvSlkxVk5TNlpidz09CistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaC4xMDAwLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RoLjEwMDAucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmYxOWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaC4xMDAwLnBlbQpAQCAtMCwwICsxLDM0IEBACisKK1JlY29tbWVuZGVkIGtleSBsZW5ndGg6IDE2MCBiaXRzCisKK2dlbmVyYXRvcjoKKwkyMzo4NDozYzowZDo1NTo4YzpiOTo3ZDphOTpkNTo5YTo4MDo4MjpmYjo1MDoKKwk4OToyOTo3MTo4ZTo4ZTphMToyOToyZTpkZjpkYjowMTozNDo0MTplNzo2NjoKKwlmYTo2MDpkYzpiYzozNDo4Mzo0NTo3MDplMDo2MTplOTphNjoyNToyMzpjMjoKKwk3NzozMzphOTo4YTo5MDo5NDoyMTpmZjo4NDpkMjo3YjozNjozOTo5YjplNToKKwlmMDo4ODoyYjozNTo5ODo2NDoyODo1ODoyNzpiZTpmYTpiZjplMzo2MDpjYzoKKwljNDo2MTo2MDo1OTo3ODphNzplMTphMzpiMzphNzozZTo3ZTo1YjphODpkNzoKKwliNzpiYToyNTowZTpiMTo5ZTo3OTowMzpiNTo4MzpiYTo0MzozNDpiNjpjMToKKwljZTo0NTo2Njo3MjowNzo2NDo4YTphZjoxNDpkODphZToxODoxOTpiYToyNToKKwlhNjpkOTozNjpmODo4YzoKKworcHJpbWU6CisJOWU6YTQ6YTg6YzQ6Mjk6ZmU6NzY6MTg6MDI6NGY6NzY6Yzk6Mjk6MGU6ZjI6CisJYmE6MGQ6OTI6MDg6OWQ6ZDk6YjM6Mjg6NDE6NWQ6ODg6NGU6ZmU6M2M6YWU6CisJYzE6ZDQ6M2U6N2U6ZmI6ZDg6MmM6YmY6N2I6NjM6NzA6OTk6OWU6YzQ6YWM6CisJZDA6MWU6N2M6NGU6MjI6MDc6ZDI6YjU6Zjk6OWE6OWU6NTI6ZTI6OTc6OWQ6CisJYzM6Y2I6MGQ6NjY6MzM6NzU6OTU6YTc6OTY6NmU6Njk6ZWM6MTY6YmQ6MDY6CisJNGE6MWE6ZGM6YjI6ZDQ6Mjk6MjM6YWI6MmU6OGY6N2Y6NmE6ODQ6MWQ6ODI6CisJMjM6NmU6NDI6OGM6MWU6NzA6M2Q6MjE6YmI6Yjk6Yjk6OGY6Zjk6ZmQ6OWM6CisJNTM6MDg6ZTQ6ZTg6NWE6MDQ6Y2E6NWY6OGY6NzM6NTU6YWM6ZTE6NDE6MjA6CisJYzc6NDM6ZmE6OGY6OTk6CisKKworLS0tLS1CRUdJTiBESCBQQVJBTUVURVJTLS0tLS0KK01JSUJBd0orQUo2a3FNUXAvbllZQWs5MnlTa084cm9Oa2dpZDJiTW9RVjJJVHY0OHJzSFVQbjc3MkN5L2UyTncKK21aN0VyTkFlZkU0aUI5SzErWnFlVXVLWG5jUExEV1l6ZFpXbmxtNXA3QmE5QmtvYTNMTFVLU09yTG85L2FvUWQKK2dpTnVRb3dlY0QwaHU3bTVqL245bkZNSTVPaGFCTXBmajNOVnJPRkJJTWREK28rWkFuMGpoRHdOVll5NWZhblYKK21vQ0MrMUNKS1hHT2pxRXBMdC9iQVRSQjUyYjZZTnk4TklORmNPQmg2YVlsSThKM002bUtrSlFoLzRUU2V6WTUKK20rWHdpQ3MxbUdRb1dDZSsrci9qWU16RVlXQlplS2ZobzdPblBuNWJxTmUzdWlVT3NaNTVBN1dEdWtNMHRzSE8KK1JXWnlCMlNLcnhUWXJoZ1p1aVdtMlRiNGpBSUNBS0E9CistLS0tLUVORCBESCBQQVJBTUVURVJTLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RoLm9wdGxlbi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaC5vcHRsZW4ucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMWUyOWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaC5vcHRsZW4ucGVtCkBAIC0wLDAgKzEsNTggQEAKKworUmVjb21tZW5kZWQga2V5IGxlbmd0aDogMjU2IGJpdHMKKworZ2VuZXJhdG9yOgorCTgwOjBhOmJmOmU3OmRjOjY2OjdhOmExOjdiOmNkOjdjOjA0OjYxOjRiOmMyOgorCTIxOmE2OjU0OjgyOmNjOmMwOjRiOjYwOjQ2OjAyOmIwOmUxOjMxOjkwOjhhOgorCTkzOjhlOmExOjFiOjQ4OmRjOjUxOjVkOmFiOjdhOmJjOmJiOjFlOjBjOjdmOgorCWQ2OjY1OjExOmVkOmMwOmQ4OjY1OjUxOmI3OjYzOjI0Ojk2OmUwOjNkOmY5OgorCTQzOjU3OmUxOmM0OmVhOjA3OmE3OmNlOjFlOjM4OjFhOjJmOmNhOmZkOmZmOgorCTVmOjViOmYwOjBkOmY4OjI4OjgwOjYwOjIwOmU4Ojc1OmMwOjA5OjI2OmU0OgorCWQwOjExOmY4Ojg0Ojc3OmExOmIwOjE5OjI3OmQ3OjM4OjEzOmNhOmQ0Ojg0OgorCTdjOjYzOjk2OmI5OjI0OjQ2OjIxOmJlOjJiOjAwOmI2OjNjOjY1OjkyOjUzOgorCTMxOjg0OjEzOjQ0OjNjOmQyOjQ0OjIxOjVjOmQ3OmZkOjRjOmJlOjc5OjZlOgorCTgyOmM2OmNmOjcwOmY4OjljOmMwOmM1OjI4OmZiOjhlOjM0OjQ4OjA5OmIzOgorCTE4Ojc2OmU3OmVmOjczOjlkOjUxOjYwOmQwOjk1OmM5OjY4OjQxOjg4OmIwOgorCWM4Ojc1OjVjOjdhOjQ2OjhkOjQ3OmY1OjZkOjZkOmI5OmVhOjAxOjI5OjI0OgorCWVjOmIwOjU1OjZmOmI3OjEzOjEyOmE4OmQ3OmM5OjNiOmIyOjg5OjhlOmEwOgorCThlOmU1OjRlOmViOjU5OjQ1OjQ4OjI4OjVmOjA2OmE5OjczOmNiOmJlOjJhOgorCTBjOmIwOjJlOjkwOmYzOjIzOmZlOjA0OjU1OjIxOmYzOjRjOjY4OjM1OjRhOgorCTZkOjNlOjk1OmRiOmZmOmYxOmViOjY0OjY5OjJlOmRjOjBhOjQ0OmYzOmQzOgorCWU0OjA4OmQwOmU0Ojc5OmE1OjQxOmU3Ojc5OmE2OjA1OjQyOjU5OmUyOmQ4OgorCTU0OgorCitwcmltZToKKwliMzoxMjo2YTplYTpmNDo3MTo1MzpjNzpkNjo3Zjo0MDozMDozMDpiMjo5MjoKKwliNTpiZDo1YTo2Yzo5ZTphZToxYzoxMzo3YTpmMzo0MDo4NzpmYzplMjphMzoKKwk2YTo1Nzo4ZDo3MDpjNTpjNTo2MDphZDoyYjpkYjo5Mjo0Yzo0YTo0ZDpiZToKKwllMjowYToxNjo3MTpiZTo3MTowMzpjZTo4NzpkZTpmYTo3Njo5MDo4OTozNjoKKwk4MDozZDpiZTpjYTo2MDpjMzozZToxMjo4OTpjMTphMDozYTpjMjpjNjpjNDoKKwllNDo5NDowNTplNTo5MDoyZjphMDo1OTo2YToxYzpiYTphODo5NTpjYzo0MDoKKwkyZDo1MjoxMzplZDo0YTo1ZjoxZjo1YjphODpiNTplMTplZDozZDphOTo1MToKKwlhNDpjNDo3NTphZjplYjowYzphNjo2MDpiNzozNjo4YzozODpjODplODowOToKKwlmMzo4MjpkOTo2YTplMTo5ZTo2MDpkYzo5ODo0ZTo2MTpjYjo0MjpiNTpkZjoKKwlkNzoyMzozMjoyYTpjZjozMjo3Zjo5ZTo0MTozYzpkYTo2NDowMDpjMTo1YzoKKwk1YjoyZTphMTpmYTozNDo0MDo1ZDo4Mzo5ODoyZjpiYTo0MDplNjpkODo1MjoKKwlkYTozZDo5MTowMTo5YjpmMjozNToxMTozMTo0Mjo1NDpkYzoyMToxYTo5MDoKKwk4MzozZTo1YjoxNzo5ODplZTo1MjphNzo4MTo5ODpjNTo1NTo2NDo0NzoyOToKKwlhZDo5MjpmMDo2MDozNjo3Yzo3NDpkZTpkMzo3NzowNDphZDpmYzoyNzozYToKKwk0YTozMzpmZTpjODoyMTpiZDoyZTpiZDozYjpjMDo1MTo3MzowZTo5NzphNDoKKwlkZDoxNDpkMjpiNzo2NjowNjoyNTo5MjpmNTplZTpjMDo5ZDoxNjpiYjo1MDoKKwllZjplYjpmMjpjYzowMDpkZDozZTowZTozNDoxODplNjowZTpjODo0ODo3MDoKKwlmNzoKKworCistLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLQorTUlJQ0RnS0NBUUVBc3hKcTZ2UnhVOGZXZjBBd01MS1N0YjFhYko2dUhCTjY4MENIL09LamFsZU5jTVhGWUswcgorMjVKTVNrMis0Z29XY2I1eEE4NkgzdnAya0lrMmdEMit5bUREUGhLSndhQTZ3c2JFNUpRRjVaQXZvRmxxSExxbworbGN4QUxWSVQ3VXBmSDF1b3RlSHRQYWxScE1SMXIrc01wbUMzTm93NHlPZ0o4NExaYXVHZVlOeVlUbUhMUXJYZgorMXlNeUtzOHlmNTVCUE5wa0FNRmNXeTZoK2pSQVhZT1lMN3BBNXRoUzJqMlJBWnZ5TlJFeFFsVGNJUnFRZ3o1YgorRjVqdVVxZUJtTVZWWkVjcHJaTHdZRFo4ZE43VGR3U3QvQ2M2U2pQK3lDRzlMcjA3d0ZGekRwZWszUlRTdDJZRworSlpMMTdzQ2RGcnRRNyt2eXpBRGRQZzQwR09ZT3lFaHc5d0tDQVFFQWdBcS81OXhtZXFGN3pYd0VZVXZDSWFaVQorZ3N6QVMyQkdBckRoTVpDS2s0NmhHMGpjVVYycmVyeTdIZ3gvMW1VUjdjRFlaVkczWXlTVzREMzVRMWZoeE9vSAorcDg0ZU9Cb3Z5djMvWDF2d0RmZ29nR0FnNkhYQUNTYmswQkg0aEhlaHNCa24xemdUeXRTRWZHT1d1U1JHSWI0cgorQUxZOFpaSlRNWVFUUkR6U1JDRmMxLzFNdm5sdWdzYlBjUGljd01Vbys0NDBTQW16R0hibjczT2RVV0RRbGNsbworUVlpd3lIVmNla2FOUi9WdGJibnFBU2trN0xCVmI3Y1RFcWpYeVR1eWlZNmdqdVZPNjFsRlNDaGZCcWx6eTc0cQorRExBdWtQTWovZ1JWSWZOTWFEVktiVDZWMi8veDYyUnBMdHdLUlBQVDVBalE1SG1sUWVkNXBnVkNXZUxZVkFJQworQVFBPQorLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaHBhcmFtcy5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaHBhcmFtcy5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlMDVmMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RocGFyYW1zLnBlbQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCitNSUdIQW9HQkFKNDE5REJFT2dtUVR6bzVxWGw1ZlFjTjlUTjQ1NXdrT0w3MDUySHp4eFJWTXloWW13UWNnSnZoCisxc2ExOGZ5ZlI5T2lWRU1ZZ2xPcGtxVm9HTE43cWQ1YVFOTmk1VzcvQytWQmRIVEJKY0daSnl5UDVCM3FjejMyCis5bUxKS3VkbFZ1ZFYwUXhrNXFVSmFQWi94dXB6ME55b1Zwdml1aUJPSTFnTmk4b3ZTWFd6QWdFQworLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIxL3Rlc3QtY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMS90ZXN0LWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzFkMTRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMS90ZXN0LWNhLmNydApAQCAtMCwwICsxLDgwIEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDAgKDB4MCkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjAwIDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDAgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6YzA6ZGY6Mzc6ZmM6MTc6YmI6ZTA6OTY6OWQ6M2Y6ODY6ZGU6OTY6MzI6CisgICAgICAgICAgICAgICAgICAgIDdkOjQ0OmE1OjE2OmEwOmNkOjIxOmYxOjk5OmQ0OmVjOmVhOmNiOjdjOjE4OgorICAgICAgICAgICAgICAgICAgICA1ODowODo5NDphNTplYzo5YjpjNTo4YjpkZjoxYToxZTo5OTozODo5OTo4NzoKKyAgICAgICAgICAgICAgICAgICAgMWU6N2I6YzA6OGQ6Mzk6ZGY6Mzg6NWQ6NzA6Nzg6MDc6ZDM6OWU6ZDk6OTM6CisgICAgICAgICAgICAgICAgICAgIGU4OmI5OjcyOjUxOmM1OmNlOmEzOjMwOjUyOmE5OmYyOmU3OjQwOjcwOjE0OgorICAgICAgICAgICAgICAgICAgICBjYjo0NDphMjo3MjowYjpjMjplNTo0MDpmOTozZTplNTphNjowZTpiMzpmOToKKyAgICAgICAgICAgICAgICAgICAgZWM6NGE6NjM6YzA6Yjg6Mjk6MDA6NzQ6OWM6NTc6M2I6YTg6YTU6MDQ6OTA6CisgICAgICAgICAgICAgICAgICAgIDcxOmYxOmJkOjgzOmQ5OjNmOmQ2OmE1OmUyOjNjOjJhOjhmOmVmOjI3OjYwOgorICAgICAgICAgICAgICAgICAgICBjMzpjNjo5ZjpjYjpiYTplYzo2MDo3ZDpiNzplNjo4NDozMjpiZTo0ZjpmYjoKKyAgICAgICAgICAgICAgICAgICAgNTg6MjY6MjI6MDM6NWI6ZDQ6YjQ6ZDU6ZmI6ZjU6ZTM6OTY6MmU6NzA6YzA6CisgICAgICAgICAgICAgICAgICAgIGU0OjJlOmJkOmZjOjJlOmVlOmUyOjQxOjU1OmMwOjM0OjJlOjdkOjI0OjcyOgorICAgICAgICAgICAgICAgICAgICA2OTpjYjo0NzpiMToxNDo0MDo4Mzo3ZDo2NzpmNDo4NjpmNjozMTphYjpmMToKKyAgICAgICAgICAgICAgICAgICAgNzk6YTQ6YjI6YjU6MmU6MTI6Zjk6ODQ6MTc6ZjA6NjI6NmY6Mjc6M2U6MTM6CisgICAgICAgICAgICAgICAgICAgIDU4OmIxOjU0OjBkOjIxOjlhOjczOjM3OmExOjMwOmNmOjZmOjkyOmRjOmY2OgorICAgICAgICAgICAgICAgICAgICBlOTpmYzphYzpkYjoyZToyODpkMTo3ZTowMjo0YjoyMzphMDoxNTpmMjozODoKKyAgICAgICAgICAgICAgICAgICAgNjU6NjQ6MDk6ZWE6MGM6NmU6OGU6MWI6MTc6YTA6NzE6Yzg6YjM6OWI6Yzk6CisgICAgICAgICAgICAgICAgICAgIGFiOmU5OmMzOmYyOmNmOjg3Ojk2OjhmOjgwOjAyOjMyOjllOjk5OjU4OjZmOgorICAgICAgICAgICAgICAgICAgICBhMjpkNQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6CisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgICAgICBEaXJOYW1lOi9DPU5ML089UG9sYXJTU0wvQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICAgICAgICAgIHNlcmlhbDowMAorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGI4OmZkOjU0OmQ4OjAwOjU0OjkwOjhiOjI1OmIwOjI3OmRkOjk1OmNkOmEyOmY3Ojg0OjA3OgorICAgICAgICAxZDo4Nzo4OTo0YTpjNDo3ODoxMTpkODowNzpiNTpkNzoyMjo1MDo4ZTo0ODplYjo2Mjo3YToKKyAgICAgICAgMzI6ODk6YmU6NjM6NDc6NTM6ZmY6YjY6YmU6ZjE6MmU6OGM6NTQ6YzA6OTk6M2Y6YTA6Yjk6CisgICAgICAgIDM3OjIzOjcyOjVmOjBkOjQ2OjU5OjhmOmQ4OjQ3OmNkOjk3OjRjOjlmOjA3OjBjOjEyOjYyOgorICAgICAgICAwOTozYToyNDplNDozNjpkOTplOToyYzpkYTozODpkMDo3Mzo3NTo2MTpkNzpjMTo2YzoyNjoKKyAgICAgICAgOGI6OWI6ZTA6ZDU6ZGM6Njc6ZWQ6OGM6NmI6MzM6ZDc6NzQ6MjI6M2M6NGM6ZGI6YjU6OGQ6CisgICAgICAgIDJhOmNlOjJjOjBkOjA4OjU5OjA1OjA5OjA1OmE2OjM5OjlmOmIzOjY3OjFiOmUyOjgzOmU1OgorICAgICAgICBlMTo4Zjo1MzpmNjo2Nzo5MzpjNzpmOTo2Zjo3Njo0NDo1ODoxMjplODozYTpkNDo5NzplNzoKKyAgICAgICAgZTk6YzA6M2U6YTg6N2E6NzI6M2Q6ODc6NTM6MWY6ZTU6MmM6ODQ6ODQ6ZTc6OWE6OWU6N2Y6CisgICAgICAgIDY2OmQ5OjFmOjliOmY1OjEzOjQ4OmIwOjRkOjE0OmQxOmRlOmIyOjI0OmQ5Ojc4OjdkOmY1OgorICAgICAgICAzNTpjYzo1ODoxOTpkMTpkMjo5OTplZjo0ZDo3MzpmODoxZjo4OTpkNDo1YTpkMDo1MjpjZToKKyAgICAgICAgMDk6ZjU6YjE6NDY6NTE6NmE6MDA6OGU6M2I6Y2M6NmY6NjM6MDE6MDA6OTk6ZWQ6OWQ6YTY6CisgICAgICAgIDA4OjYwOmNkOjMyOjE4OmQwOjczOmUwOjU4OjcxOmQ5OmU1OmQyOjUzOmQ3OjhkOmQwOmNhOgorICAgICAgICBlOTo1ZDoyYTowYTowZDo1ZDo1NTplYzoyMTo1MDoxNzoxNjplNjowNjo0YTpjZDo1ZTpkZToKKyAgICAgICAgZjc6ZTA6ZTk6NTQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGh6Q0NBbStnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBd1doY05NakV3TWpFeU1UUTBOREF3V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdnZ0VpTUEwRworQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURBM3pmOEY3dmdscDAvaHQ2V01uMUVwUmFnelNIeAorbWRUczZzdDhHRmdJbEtYc204V0wzeG9lbVRpWmh4NTd3STA1M3poZGNIZ0gwNTdaaytpNWNsSEZ6cU13VXFueQorNTBCd0ZNdEVvbklMd3VWQStUN2xwZzZ6K2V4S1k4QzRLUUIwbkZjN3FLVUVrSEh4dllQWlA5YWw0andxais4bgorWU1QR244dTY3R0I5dCthRU1yNVArMWdtSWdOYjFMVFYrL1hqbGk1d3dPUXV2Znd1N3VKQlZjQTBMbjBrY21uTAorUjdFVVFJTjlaL1NHOWpHcjhYbWtzclV1RXZtRUYvQmlieWMrRTFpeFZBMGhtbk0zb1REUGI1TGM5dW44ck5zdQorS05GK0Frc2pvQlh5T0dWa0Nlb01ibzRiRjZCeHlMT2J5YXZwdy9MUGg1YVBnQUl5bnBsWWI2TFZBZ01CQUFHagorZ1pVd2daSXdEQVlEVlIwVEJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SAorL2Y4d1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVgorQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWegorZENCRFFZSUJBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBdVAxVTJBQlVrSXNsc0NmZGxjMmk5NFFISFllSgorU3NSNEVkZ0h0ZGNpVUk1STYySjZNb20rWTBkVC83YSs4UzZNVk1DWlA2QzVOeU55WHcxR1dZL1lSODJYVEo4SAorREJKaUNUb2s1RGJaNlN6YU9OQnpkV0hYd1d3bWk1dmcxZHhuN1l4ck05ZDBJanhNMjdXTktzNHNEUWhaQlFrRgorcGptZnMyY2I0b1BsNFk5VDltZVR4L2x2ZGtSWUV1ZzYxSmZuNmNBK3FIcHlQWWRUSCtVc2hJVG5tcDUvWnRrZgorbS9VVFNMQk5GTkhlc2lUWmVIMzFOY3hZR2RIU21lOU5jL2dmaWRSYTBGTE9DZld4UmxGcUFJNDd6RzlqQVFDWgorN1oybUNHRE5NaGpRYytCWWNkbmwwbFBYamRESzZWMHFDZzFkVmV3aFVCY1c1Z1pLelY3ZTkrRHBWQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIyL3Rlc3QtY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMi90ZXN0LWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzFkMTRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMi90ZXN0LWNhLmNydApAQCAtMCwwICsxLDgwIEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDAgKDB4MCkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjAwIDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDAgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6YzA6ZGY6Mzc6ZmM6MTc6YmI6ZTA6OTY6OWQ6M2Y6ODY6ZGU6OTY6MzI6CisgICAgICAgICAgICAgICAgICAgIDdkOjQ0OmE1OjE2OmEwOmNkOjIxOmYxOjk5OmQ0OmVjOmVhOmNiOjdjOjE4OgorICAgICAgICAgICAgICAgICAgICA1ODowODo5NDphNTplYzo5YjpjNTo4YjpkZjoxYToxZTo5OTozODo5OTo4NzoKKyAgICAgICAgICAgICAgICAgICAgMWU6N2I6YzA6OGQ6Mzk6ZGY6Mzg6NWQ6NzA6Nzg6MDc6ZDM6OWU6ZDk6OTM6CisgICAgICAgICAgICAgICAgICAgIGU4OmI5OjcyOjUxOmM1OmNlOmEzOjMwOjUyOmE5OmYyOmU3OjQwOjcwOjE0OgorICAgICAgICAgICAgICAgICAgICBjYjo0NDphMjo3MjowYjpjMjplNTo0MDpmOTozZTplNTphNjowZTpiMzpmOToKKyAgICAgICAgICAgICAgICAgICAgZWM6NGE6NjM6YzA6Yjg6Mjk6MDA6NzQ6OWM6NTc6M2I6YTg6YTU6MDQ6OTA6CisgICAgICAgICAgICAgICAgICAgIDcxOmYxOmJkOjgzOmQ5OjNmOmQ2OmE1OmUyOjNjOjJhOjhmOmVmOjI3OjYwOgorICAgICAgICAgICAgICAgICAgICBjMzpjNjo5ZjpjYjpiYTplYzo2MDo3ZDpiNzplNjo4NDozMjpiZTo0ZjpmYjoKKyAgICAgICAgICAgICAgICAgICAgNTg6MjY6MjI6MDM6NWI6ZDQ6YjQ6ZDU6ZmI6ZjU6ZTM6OTY6MmU6NzA6YzA6CisgICAgICAgICAgICAgICAgICAgIGU0OjJlOmJkOmZjOjJlOmVlOmUyOjQxOjU1OmMwOjM0OjJlOjdkOjI0OjcyOgorICAgICAgICAgICAgICAgICAgICA2OTpjYjo0NzpiMToxNDo0MDo4Mzo3ZDo2NzpmNDo4NjpmNjozMTphYjpmMToKKyAgICAgICAgICAgICAgICAgICAgNzk6YTQ6YjI6YjU6MmU6MTI6Zjk6ODQ6MTc6ZjA6NjI6NmY6Mjc6M2U6MTM6CisgICAgICAgICAgICAgICAgICAgIDU4OmIxOjU0OjBkOjIxOjlhOjczOjM3OmExOjMwOmNmOjZmOjkyOmRjOmY2OgorICAgICAgICAgICAgICAgICAgICBlOTpmYzphYzpkYjoyZToyODpkMTo3ZTowMjo0YjoyMzphMDoxNTpmMjozODoKKyAgICAgICAgICAgICAgICAgICAgNjU6NjQ6MDk6ZWE6MGM6NmU6OGU6MWI6MTc6YTA6NzE6Yzg6YjM6OWI6Yzk6CisgICAgICAgICAgICAgICAgICAgIGFiOmU5OmMzOmYyOmNmOjg3Ojk2OjhmOjgwOjAyOjMyOjllOjk5OjU4OjZmOgorICAgICAgICAgICAgICAgICAgICBhMjpkNQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6CisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgICAgICBEaXJOYW1lOi9DPU5ML089UG9sYXJTU0wvQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICAgICAgICAgIHNlcmlhbDowMAorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGI4OmZkOjU0OmQ4OjAwOjU0OjkwOjhiOjI1OmIwOjI3OmRkOjk1OmNkOmEyOmY3Ojg0OjA3OgorICAgICAgICAxZDo4Nzo4OTo0YTpjNDo3ODoxMTpkODowNzpiNTpkNzoyMjo1MDo4ZTo0ODplYjo2Mjo3YToKKyAgICAgICAgMzI6ODk6YmU6NjM6NDc6NTM6ZmY6YjY6YmU6ZjE6MmU6OGM6NTQ6YzA6OTk6M2Y6YTA6Yjk6CisgICAgICAgIDM3OjIzOjcyOjVmOjBkOjQ2OjU5OjhmOmQ4OjQ3OmNkOjk3OjRjOjlmOjA3OjBjOjEyOjYyOgorICAgICAgICAwOTozYToyNDplNDozNjpkOTplOToyYzpkYTozODpkMDo3Mzo3NTo2MTpkNzpjMTo2YzoyNjoKKyAgICAgICAgOGI6OWI6ZTA6ZDU6ZGM6Njc6ZWQ6OGM6NmI6MzM6ZDc6NzQ6MjI6M2M6NGM6ZGI6YjU6OGQ6CisgICAgICAgIDJhOmNlOjJjOjBkOjA4OjU5OjA1OjA5OjA1OmE2OjM5OjlmOmIzOjY3OjFiOmUyOjgzOmU1OgorICAgICAgICBlMTo4Zjo1MzpmNjo2Nzo5MzpjNzpmOTo2Zjo3Njo0NDo1ODoxMjplODozYTpkNDo5NzplNzoKKyAgICAgICAgZTk6YzA6M2U6YTg6N2E6NzI6M2Q6ODc6NTM6MWY6ZTU6MmM6ODQ6ODQ6ZTc6OWE6OWU6N2Y6CisgICAgICAgIDY2OmQ5OjFmOjliOmY1OjEzOjQ4OmIwOjRkOjE0OmQxOmRlOmIyOjI0OmQ5Ojc4OjdkOmY1OgorICAgICAgICAzNTpjYzo1ODoxOTpkMTpkMjo5OTplZjo0ZDo3MzpmODoxZjo4OTpkNDo1YTpkMDo1MjpjZToKKyAgICAgICAgMDk6ZjU6YjE6NDY6NTE6NmE6MDA6OGU6M2I6Y2M6NmY6NjM6MDE6MDA6OTk6ZWQ6OWQ6YTY6CisgICAgICAgIDA4OjYwOmNkOjMyOjE4OmQwOjczOmUwOjU4OjcxOmQ5OmU1OmQyOjUzOmQ3OjhkOmQwOmNhOgorICAgICAgICBlOTo1ZDoyYTowYTowZDo1ZDo1NTplYzoyMTo1MDoxNzoxNjplNjowNjo0YTpjZDo1ZTpkZToKKyAgICAgICAgZjc6ZTA6ZTk6NTQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGh6Q0NBbStnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBd1doY05NakV3TWpFeU1UUTBOREF3V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdnZ0VpTUEwRworQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURBM3pmOEY3dmdscDAvaHQ2V01uMUVwUmFnelNIeAorbWRUczZzdDhHRmdJbEtYc204V0wzeG9lbVRpWmh4NTd3STA1M3poZGNIZ0gwNTdaaytpNWNsSEZ6cU13VXFueQorNTBCd0ZNdEVvbklMd3VWQStUN2xwZzZ6K2V4S1k4QzRLUUIwbkZjN3FLVUVrSEh4dllQWlA5YWw0andxais4bgorWU1QR244dTY3R0I5dCthRU1yNVArMWdtSWdOYjFMVFYrL1hqbGk1d3dPUXV2Znd1N3VKQlZjQTBMbjBrY21uTAorUjdFVVFJTjlaL1NHOWpHcjhYbWtzclV1RXZtRUYvQmlieWMrRTFpeFZBMGhtbk0zb1REUGI1TGM5dW44ck5zdQorS05GK0Frc2pvQlh5T0dWa0Nlb01ibzRiRjZCeHlMT2J5YXZwdy9MUGg1YVBnQUl5bnBsWWI2TFZBZ01CQUFHagorZ1pVd2daSXdEQVlEVlIwVEJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SAorL2Y4d1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVgorQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWegorZENCRFFZSUJBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBdVAxVTJBQlVrSXNsc0NmZGxjMmk5NFFISFllSgorU3NSNEVkZ0h0ZGNpVUk1STYySjZNb20rWTBkVC83YSs4UzZNVk1DWlA2QzVOeU55WHcxR1dZL1lSODJYVEo4SAorREJKaUNUb2s1RGJaNlN6YU9OQnpkV0hYd1d3bWk1dmcxZHhuN1l4ck05ZDBJanhNMjdXTktzNHNEUWhaQlFrRgorcGptZnMyY2I0b1BsNFk5VDltZVR4L2x2ZGtSWUV1ZzYxSmZuNmNBK3FIcHlQWWRUSCtVc2hJVG5tcDUvWnRrZgorbS9VVFNMQk5GTkhlc2lUWmVIMzFOY3hZR2RIU21lOU5jL2dmaWRSYTBGTE9DZld4UmxGcUFJNDd6RzlqQVFDWgorN1oybUNHRE5NaGpRYytCWWNkbmwwbFBYamRESzZWMHFDZzFkVmV3aFVCY1c1Z1pLelY3ZTkrRHBWQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIyL3Rlc3QtY2EyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjIvdGVzdC1jYTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWE0MjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIyL3Rlc3QtY2EyLmNydApAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL1JlYWRtZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjMvUmVhZG1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWRhZGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL1JlYWRtZQpAQCAtMCwwICsxIEBACitUaGlzIGlzIGp1c3QgdG8gbWFrZSBzdXJlIGZpbGVzIHRoYXQgZG9uJ3QgcGFyc2UgYXMgY2VydHMgYXJlIGlnbm9yZWQuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL3Rlc3QtY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy90ZXN0LWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzFkMTRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyMy90ZXN0LWNhLmNydApAQCAtMCwwICsxLDgwIEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDAgKDB4MCkKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogRmViIDEyIDE0OjQ0OjAwIDIwMTEgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTIgMTQ6NDQ6MDAgMjAyMSBHTVQKKyAgICAgICAgU3ViamVjdDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6YzA6ZGY6Mzc6ZmM6MTc6YmI6ZTA6OTY6OWQ6M2Y6ODY6ZGU6OTY6MzI6CisgICAgICAgICAgICAgICAgICAgIDdkOjQ0OmE1OjE2OmEwOmNkOjIxOmYxOjk5OmQ0OmVjOmVhOmNiOjdjOjE4OgorICAgICAgICAgICAgICAgICAgICA1ODowODo5NDphNTplYzo5YjpjNTo4YjpkZjoxYToxZTo5OTozODo5OTo4NzoKKyAgICAgICAgICAgICAgICAgICAgMWU6N2I6YzA6OGQ6Mzk6ZGY6Mzg6NWQ6NzA6Nzg6MDc6ZDM6OWU6ZDk6OTM6CisgICAgICAgICAgICAgICAgICAgIGU4OmI5OjcyOjUxOmM1OmNlOmEzOjMwOjUyOmE5OmYyOmU3OjQwOjcwOjE0OgorICAgICAgICAgICAgICAgICAgICBjYjo0NDphMjo3MjowYjpjMjplNTo0MDpmOTozZTplNTphNjowZTpiMzpmOToKKyAgICAgICAgICAgICAgICAgICAgZWM6NGE6NjM6YzA6Yjg6Mjk6MDA6NzQ6OWM6NTc6M2I6YTg6YTU6MDQ6OTA6CisgICAgICAgICAgICAgICAgICAgIDcxOmYxOmJkOjgzOmQ5OjNmOmQ2OmE1OmUyOjNjOjJhOjhmOmVmOjI3OjYwOgorICAgICAgICAgICAgICAgICAgICBjMzpjNjo5ZjpjYjpiYTplYzo2MDo3ZDpiNzplNjo4NDozMjpiZTo0ZjpmYjoKKyAgICAgICAgICAgICAgICAgICAgNTg6MjY6MjI6MDM6NWI6ZDQ6YjQ6ZDU6ZmI6ZjU6ZTM6OTY6MmU6NzA6YzA6CisgICAgICAgICAgICAgICAgICAgIGU0OjJlOmJkOmZjOjJlOmVlOmUyOjQxOjU1OmMwOjM0OjJlOjdkOjI0OjcyOgorICAgICAgICAgICAgICAgICAgICA2OTpjYjo0NzpiMToxNDo0MDo4Mzo3ZDo2NzpmNDo4NjpmNjozMTphYjpmMToKKyAgICAgICAgICAgICAgICAgICAgNzk6YTQ6YjI6YjU6MmU6MTI6Zjk6ODQ6MTc6ZjA6NjI6NmY6Mjc6M2U6MTM6CisgICAgICAgICAgICAgICAgICAgIDU4OmIxOjU0OjBkOjIxOjlhOjczOjM3OmExOjMwOmNmOjZmOjkyOmRjOmY2OgorICAgICAgICAgICAgICAgICAgICBlOTpmYzphYzpkYjoyZToyODpkMTo3ZTowMjo0YjoyMzphMDoxNTpmMjozODoKKyAgICAgICAgICAgICAgICAgICAgNjU6NjQ6MDk6ZWE6MGM6NmU6OGU6MWI6MTc6YTA6NzE6Yzg6YjM6OWI6Yzk6CisgICAgICAgICAgICAgICAgICAgIGFiOmU5OmMzOmYyOmNmOjg3Ojk2OjhmOjgwOjAyOjMyOjllOjk5OjU4OjZmOgorICAgICAgICAgICAgICAgICAgICBhMjpkNQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6CisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6CisgICAgICAgICAgICAgICAga2V5aWQ6QjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgICAgICBEaXJOYW1lOi9DPU5ML089UG9sYXJTU0wvQ049UG9sYXJTU0wgVGVzdCBDQQorICAgICAgICAgICAgICAgIHNlcmlhbDowMAorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGI4OmZkOjU0OmQ4OjAwOjU0OjkwOjhiOjI1OmIwOjI3OmRkOjk1OmNkOmEyOmY3Ojg0OjA3OgorICAgICAgICAxZDo4Nzo4OTo0YTpjNDo3ODoxMTpkODowNzpiNTpkNzoyMjo1MDo4ZTo0ODplYjo2Mjo3YToKKyAgICAgICAgMzI6ODk6YmU6NjM6NDc6NTM6ZmY6YjY6YmU6ZjE6MmU6OGM6NTQ6YzA6OTk6M2Y6YTA6Yjk6CisgICAgICAgIDM3OjIzOjcyOjVmOjBkOjQ2OjU5OjhmOmQ4OjQ3OmNkOjk3OjRjOjlmOjA3OjBjOjEyOjYyOgorICAgICAgICAwOTozYToyNDplNDozNjpkOTplOToyYzpkYTozODpkMDo3Mzo3NTo2MTpkNzpjMTo2YzoyNjoKKyAgICAgICAgOGI6OWI6ZTA6ZDU6ZGM6Njc6ZWQ6OGM6NmI6MzM6ZDc6NzQ6MjI6M2M6NGM6ZGI6YjU6OGQ6CisgICAgICAgIDJhOmNlOjJjOjBkOjA4OjU5OjA1OjA5OjA1OmE2OjM5OjlmOmIzOjY3OjFiOmUyOjgzOmU1OgorICAgICAgICBlMTo4Zjo1MzpmNjo2Nzo5MzpjNzpmOTo2Zjo3Njo0NDo1ODoxMjplODozYTpkNDo5NzplNzoKKyAgICAgICAgZTk6YzA6M2U6YTg6N2E6NzI6M2Q6ODc6NTM6MWY6ZTU6MmM6ODQ6ODQ6ZTc6OWE6OWU6N2Y6CisgICAgICAgIDY2OmQ5OjFmOjliOmY1OjEzOjQ4OmIwOjRkOjE0OmQxOmRlOmIyOjI0OmQ5Ojc4OjdkOmY1OgorICAgICAgICAzNTpjYzo1ODoxOTpkMTpkMjo5OTplZjo0ZDo3MzpmODoxZjo4OTpkNDo1YTpkMDo1MjpjZToKKyAgICAgICAgMDk6ZjU6YjE6NDY6NTE6NmE6MDA6OGU6M2I6Y2M6NmY6NjM6MDE6MDA6OTk6ZWQ6OWQ6YTY6CisgICAgICAgIDA4OjYwOmNkOjMyOjE4OmQwOjczOmUwOjU4OjcxOmQ5OmU1OmQyOjUzOmQ3OjhkOmQwOmNhOgorICAgICAgICBlOTo1ZDoyYTowYTowZDo1ZDo1NTplYzoyMTo1MDoxNzoxNjplNjowNjo0YTpjZDo1ZTpkZToKKyAgICAgICAgZjc6ZTA6ZTk6NTQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGh6Q0NBbStnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBd1doY05NakV3TWpFeU1UUTBOREF3V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdnZ0VpTUEwRworQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURBM3pmOEY3dmdscDAvaHQ2V01uMUVwUmFnelNIeAorbWRUczZzdDhHRmdJbEtYc204V0wzeG9lbVRpWmh4NTd3STA1M3poZGNIZ0gwNTdaaytpNWNsSEZ6cU13VXFueQorNTBCd0ZNdEVvbklMd3VWQStUN2xwZzZ6K2V4S1k4QzRLUUIwbkZjN3FLVUVrSEh4dllQWlA5YWw0andxais4bgorWU1QR244dTY3R0I5dCthRU1yNVArMWdtSWdOYjFMVFYrL1hqbGk1d3dPUXV2Znd1N3VKQlZjQTBMbjBrY21uTAorUjdFVVFJTjlaL1NHOWpHcjhYbWtzclV1RXZtRUYvQmlieWMrRTFpeFZBMGhtbk0zb1REUGI1TGM5dW44ck5zdQorS05GK0Frc2pvQlh5T0dWa0Nlb01ibzRiRjZCeHlMT2J5YXZwdy9MUGg1YVBnQUl5bnBsWWI2TFZBZ01CQUFHagorZ1pVd2daSXdEQVlEVlIwVEJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SAorL2Y4d1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKQmdOVgorQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnVkdWegorZENCRFFZSUJBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBdVAxVTJBQlVrSXNsc0NmZGxjMmk5NFFISFllSgorU3NSNEVkZ0h0ZGNpVUk1STYySjZNb20rWTBkVC83YSs4UzZNVk1DWlA2QzVOeU55WHcxR1dZL1lSODJYVEo4SAorREJKaUNUb2s1RGJaNlN6YU9OQnpkV0hYd1d3bWk1dmcxZHhuN1l4ck05ZDBJanhNMjdXTktzNHNEUWhaQlFrRgorcGptZnMyY2I0b1BsNFk5VDltZVR4L2x2ZGtSWUV1ZzYxSmZuNmNBK3FIcHlQWWRUSCtVc2hJVG5tcDUvWnRrZgorbS9VVFNMQk5GTkhlc2lUWmVIMzFOY3hZR2RIU21lOU5jL2dmaWRSYTBGTE9DZld4UmxGcUFJNDd6RzlqQVFDWgorN1oybUNHRE5NaGpRYytCWWNkbmwwbFBYamRESzZWMHFDZzFkVmV3aFVCY1c1Z1pLelY3ZTkrRHBWQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL3Rlc3QtY2EyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjMvdGVzdC1jYTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWE0MjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXIzL3Rlc3QtY2EyLmNydApAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L1JlYWRtZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvUmVhZG1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWY2MTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L1JlYWRtZQpAQCAtMCwwICsxLDQ3IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgY2VydGlmaWNhdGVzIGZvciB0aGUgdGVzdHMgdGFyZ2V0aW5nIHRoZSBlbmZvcmNlbWVudCBvZiB0aGUgcG9saWN5IGluZGljYXRlZCBieSB0aGUgKnBhdGhMZW5Db25zdHJhaW50KiBmaWVsZC4gQWxsIGxlYWYgZWxlbWVudHMgd2VyZSBnZW5lcmF0ZWQgd2l0aCAqaXNfY2EqIHVuc2V0IGFuZCBhbGwgcm9vdHMgd2l0aCB0aGUgKnNlbGZzaWduPTEqIG9wdGlvbi4gCisKKzEuIHplcm8gcGF0aGxlbiBjb25zdHJhaW50IG9uIGFuIGludGVybWVkaWF0ZSBDQSAoaW52YWxpZCkKK2BgYAorY2VydDExLmNydCAtPiBjZXJ0MTIuY3J0IChtYXhfcGF0aGxlbj0wKSAtPiBjZXJ0MTMuY3J0IC0+IGNlcnQxNC5jcnQKK2BgYAorCisyLiB6ZXJvIHBhdGhsZW4gY29uc3RyYWludCBvbiB0aGUgcm9vdCBDQSAoaW52YWxpZCkKK2BgYAorY2VydDIxLmNydCAobWF4X3BhdGhsZW49MCkgLT4gY2VydDIyLmNydCAtPiBjZXJ0MjMuY3J0CitgYGAKKworMy4gbm9uemVybyBwYXRobGVuIGNvbnN0cmFpbnQgb24gdGhlIHJvb3QgQ0EgKGludmFsaWQpCitgYGAKK2NlcnQzMS5jcnQgKG1heF9wYXRobGVuPTEpIC0+IGNlcnQzMi5jcnQgLT4gY2VydDMzLmNydCAtPiBjZXJ0MzQuY3J0CitgYGAKKworNC4gbm9uemVybyBwYXRobGVuIGNvbnN0cmFpbnQgb24gYW4gaW50ZXJtZWRpYXRlIENBIChpbnZhbGlkKQorYGBgCitjZXJ0NDEuY3J0IC0+IGNlcnQ0Mi5jcnQgKG1heF9wYXRobGVuPTEpIC0+IGNlcnQ0My5jcnQgLT4gY2VydDQ0LmNydCAtPiBjZXJ0NDUuY3J0IAorYGBgCisKKzUuIG5vbnplcm8gcGF0aGxlbiBjb25zdHJhaW50IG9uIGFuIGludGVybWVkaWF0ZSBDQSB3aXRoIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjaGFpbiAodmFsaWQpCitgYGAKK2NlcnQ1MS5jcnQgLT4gY2VydDUyLmNydCAobWF4X3BhdGhsZW49MSkgLT4gY2VydDUzLmNydCAtPiBjZXJ0NTQuY3J0CitgYGAKKworNi4gbm9uemVybyBwYXRobGVuIGNvbnN0cmFpbnQgb24gdGhlIHJvb3QgQ0Egd2l0aCBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY2hhaW4gKHZhbGlkKQorYGBgCitjZXJ0NjEuY3J0IChtYXhfcGF0aGxlbj0xKSAtPiBjZXJ0NjIuY3J0IC0+IGNlcnQ2My5jcnQKK2BgYAorCis3LiBwYXRobGVuIGNvbnN0cmFpbnQgb24gdGhlIHJvb3QgQ0Egd2l0aCBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBhbmQgYSBzZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZSBpbiB0aGUgY2hhaW4gKHZhbGlkKSAKKyhUaGlzIHNpdHVhdGlvbiBoYXBwZW5zIGZvciBleGFtcGxlIHdoZW4gYSByb290IG9mIHNvbWUgaGllcmFyY2h5IGdldHMgaW50ZWdyYXRlZCBpbnRvIGFub3RoZXIgaGllcmFyY2h5LiBJbiB0aGlzIGNhc2UgdGhlIGNlcnRpZmljYXRlcyBpc3N1ZWQgYmVmb3JlIHRoZSBpbnRlZ3JhdGlvbiB3aWxsIGhhdmUgYW4gaW50ZXJtYWRpYXRlIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlIGluIHRoZWlyIGNoYWluKQorYGBgCitjZXJ0NzEuY3J0IChtYXhfcGF0aGxlbj0xKSAtPiBjZXJ0NzIuY3J0IC0+IGNlcnQ3My5jcnQgKHNlbGYgc2lnbmVkKSAtPiBjZXJ0NzQuY3J0IC0+IGNlcnQ3NC5jcnQKK2BgYAorCis4LiB6ZXJvIHBhdGhsZW4gY29uc3RyYWludCBvbiBmaXJzdCBpbnRlcm1lZGlhdGUgQ0EgKHZhbGlkKQorYGBgCitjZXJ0ODEuY3J0IC0+IGNlcnQ4Mi5jcnQgKG1heF9wYXRobGVuPTApIC0+IGNlcnQ4My5jcnQKK2BgYAorCis5LiB6ZXJvIHBhdGhsZW4gY29uc3RyYWludCBvbiB0cnVzdGVkIHJvb3QgKHZhbGlkKQorYGBgCitjZXJ0OTEuY3J0IChtYXhfcGF0aGxlbj0wKSAtPiBjZXJ0OTIuY3J0CitgYGAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDExLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDExLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDc3YzNkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzl6Q0NBZCtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQoraHFMdytLREg4K3RrWDlocGhueWRPWkZvdWVHVFk1djhXZFlJNktaWG9JbG45SUF1NFJtYjZNNTl1THppWHVyZworVkt1d0JxT2tiVVpzSVkwTk9BNkM4RnBkalpMMWRpOFZpcTY2OXZCQnM5Yyt4OWhLcHg4L1ZWY1pmVGFHZ3FuaQoraDVYaWl2UXluQlE0RTJLT3hFUStWalVNRHFJQkhZRzFWWFdzNEtNa0FlSnNxRFlIdG1TNFhzQzlUWFRJcmk1UworOUlYNG1FNUE5K25nU1RvMC82U2p3Y2QyN3VPMklRSFhEQzdqa3hYNU9INWpGUEFxc1ZLVFlEZVdsQ1U3YnZicgoraXkxSDlaOXVDbCtNN3VuYkFsOEJLUThsZU9ubm8zS08zbFFRQVBHUDJFRlJUMFhNdVVYSm5meWRQYnpNYTlGWQordWZCMUk4ekNCWnZpUHZPL09mM3lyd0lEQVFBQm8xQXdUakFNQmdOVkhSTUVCVEFEQVFFQk1CMEdBMVVkRGdRVworQkJTVUhTSDZnanJZRlpuUzFnRHZrN0JwZndUS3dEQWZCZ05WSFNNRUdEQVdnQlNVSFNINmdqcllGWm5TMWdEdgorazdCcGZ3VEt3REFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBVExxWkdGRUJPKzJJaUhqa243cEJrQXVrdG1IbQoramtrdUZMT053ZTB2bHhaRmFhYmFGcVNna29TNWVaNTBEMGRtdVVrcEpSTk1uR0sxQi9qYTVSZXd0QWR4RDZ1cworVlQ4SnBlV1lraHhhU0lIalVXOTVqSkxNVnIxN2l0OGpIYXdJMDV0RDI2bnFEalRxM0Myck00RXhwQWFLL0RndgorODNaSGU0SWR2ZW5rWGNrRE1Jam1Tc0swR2ZvbVptS3ZtbmZ4aGc0Rm5RdlpHSTQ4SkpVcVBBMmRIeFJoVXlyNAorb2hCbUg1WGk1b0xJQ2Q4NUdSaThZcUQwMGFnS0w5OUVqR3VsYUtORWRzUWtyQzRadlk2UURWMEVFbmJ1OGI0UgorR2ZpQTQyVVdOMmRLTlNxTmhCT3JQOWc1eVRjSVdYaDFEd3BkMVo5dmhCQ3dtQmVnUHFxTTVJTTFkUT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4OGMyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDEyLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURDakNDQWZLZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTWpBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQ1l4SkRBaUJnTlYKK0JBTVRHMVJsYzNRZ2FXNTBaWEp0WldScFlYUmxJRzFoZUhCaGRHZ2dNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU5KclA3L1krS2p1cHZsZ2FPbVFZQXJmR3VvaDNDemNkUGUvbWxocStmeEQKKzhVOXF6Z1NWdVZSK0ZwTlppOUR5TWxqTUJyV1YxT25aSStjVkNEWVlrTk1hM0lrVitBa3pKR3F3Y1NCS0UrNk4KK1JYWnZ2K0k0eGJHeW1kU1NhVDZLaDFQZ1BWay9FWU5mTEZGMzBwQnN5Y2pNODFhTXRaZ1c2YUE5eENTcDByOFcKK1hrWm9kc3JKVVFlckRoLzdWbURWRWVLYW5ab2c4YXV2cnZzL0VOaUE4ZDRwLzc1bE9JRVI0bkx6NlNTbjVFcXkKK3VYek5Dd21UNVBWd1dTdFhiREQ3RUJzM3JPdFIyVk5XUTlvNlFkZktRT2UvU2tJZGRacjFJV0dFSjhKSGp0Tm8KK2p4Y1lPNjdBK0pncDFKd2prKzgzZVJJQ3MwaGxXeWVIV2ZCbGJPVklLTGNDQXdFQUFhTlRNRkV3RHdZRFZSMFQKK0JBZ3dCZ0VCQVFJQkFEQWRCZ05WSFE0RUZnUVV5dzhQaHkvRkF2aWZHUStHNkhXa01pV3p5cVV3SHdZRFZSMGoKK0JCZ3dGb0FVbEIwaCtvSTYyQldaMHRZQTc1T3dhWDhFeXNBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFDRlMKKzZ0Rnk5VHBWTVVmaDFta3IzckZFVnRobzBOSmtSaEpXOHoyUFRtS1FhMDY5UzlnUytVNitDc3F3dk0xeTN5eWgKK1B0MnEzNGZoaGhiUStnUzhpQW0renZRdEJzeXMzZnJmVmtlS21SenhXRGgyTG5UK3RKaS94dHFkbFVMdWE1TkIKKzIxU280NkhkbGNlRFR1djJ2VWJySGd4VVMvSUVqSUw2T1paMFNjNlM2WXlidkdTaW9Hc1JVSE8yazJJaU9uVWEKK0MraHBCdk9rWFNjbkl0ZmRNS0FBY2U3MUNzWmVOOTdzYnhlTklNQkRpWDliU3krZFpMc2NFaFJ3QlVBQmlOci8KK3NZZFl2SXBickZYb3dqTXRCZGFjK3Z2aGNlbTdka0NyQ2RzR3lsR0lOV2hFMnRDOWhLbUZrRlhvNG11L0FHRFMKK000LzU5VGxNZUs4WCtXWjl6QnM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxMy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwMWEyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDEzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGekNDQWYrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBbU1TUXdJZ1lEVlFRREV4dFVaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lESXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNzMHFkS1h5dHUvR1RLcGEySDBDRTMKK09QU0lNTTJoaVliYXZ6VXJveUwraEZ2OVhWb3hoNUNHblZVeEs3QjlpZlZ2enlFbHJjVjd0anVJbEd3cDFoTEgKK3R4L1lVMjJ4a3NJL241L05TL3FyeGtLNXhqd0VXQjlseDkzcndMSzBRbmZqWVJacmlyN3l5U29CS2k2SWxIT3YKK0dPd2wwVi9KQXNsTVd3VVpsRm12WXZvQ1dTV0dyREFreFdWbkhxK0hvWjdZb00vYmRKZHNJSUpZZTN0dDdMOEQKK2NKVlA1ZFE4alNzOC9FaG04QmJHMzM5cjNCN3YvS2RLOHp1b01pZzlhZy9ZT3U5ak9iMFF2WUMySGRab0w0V1YKK04rN2Fhc1RRbURHV0dPdDdmazdBRWwwRUk4bER2cjJPLzVxNmFkOWpSQ2t4eXEzbEp3UnkrTTNNZFZLZ0ExT24KK0FnTUJBQUdqVURCT01Bd0dBMVVkRXdRRk1BTUJBUUV3SFFZRFZSME9CQllFRk02dTVHa2preGI4UERkUUlHS0QKK0Q4dDFadi85TUI4R0ExVWRJd1FZTUJhQUZNc1BENGN2eFFMNG54a1BodWgxcERJbHM4cWxNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRQ0xwS0FUdDAxRFVNOHdDaURGVlNwbXBpQ0JxeG5MUmZRdVkrdGExcCtmMTVMTUUrY1QKKzk0bHdhWUNmQ0J0WFFZd2l1VkZZZEs4enRXRVN0UGc2QmVjTUxQQjJLOWdPL3RhbHhVb1ZEdW1zbVI4M3ArMnkKKzhZSm1GSHlqcitCU2hzalA5cGFDalVRa0ppTU9pV1JwTkZOcFNjdjBJT0htYjhOTEVSM3ZYL3RDbXh5VkhQZy8KKzd0QnBEWFJENmpPeWFqWUg0S1V4NndkZGNZV2I2M045c0FwVnBSSE5hcXBVS2p1aVF3ZlVGWmpBN0F5Sy9GVVMKKy9jTzMrK3VxK0NrWmhCdTh2dXBhem5YRDRoMEUyOEdiWmd2dS9GMGVkQjdmMFE1RHBudURKNkhGTVlsM0EybU0KK204cHFLTm5SWUdDdFF3cHBCWVZzb0Jpc2dhMnltdE51ZDdLKworLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MTQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZTFjYmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQxNC5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERERDQ0FmU2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURJd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQWVNUnd3R2dZRFZRUURFeE5VWlhOMElHeGxZV1lnYVc1MllXeHBaQ0F6TUlJQklqQU5CZ2txCitoa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXc2VmMvVDJHWVRXajduR1pjeTJ2b1p5ZVdrRnlmREl5CitvZXh5SmU4ZXl1V1grWXFhU0NyYTFKTWN3dzBKeThlOS82L2FJOWV6ZDFkNzNlWkRjVzVoNjF0YWdDcEJraStXCitkWWgrRkpmQ2REZFBuU2tpdFdPQkxLQksyMUFROWR4ZVB2a1FCRWFuRGRBazJJd2FzeWRDb0hFaVNDcXdYTkV6CitqVkpQTDM4aWJiTGY5c05PM2trNnpPRkEzUXFWU1RKNEJkZE5oOWJITDd5MTA2ZWtmTWhyZnlUelNwbzNXajBWCisyMFRobUpaMU51d1lSbDNqMVhIQUxQMHQ4Q3AyWkxiWHVGc1RXcVRGTnpYaitnV004YjJJZlpxbXFjZXc1cG9aCis0YURralhYT2l6UnhEUHhDSHA3ckx6OXh2MXBJSUJ4YWR5MFlXcCt3OXZ4THhGRjZyWUJMdFFJREFRQUJvMDB3CitTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJRb0YvcXJuOVduS1Yzek9uQ3dNbDk5VWhteDhEQWZCZ05WCitIU01FR0RBV2dCVE9ydVJwSTVNVy9EdzNVQ0JpZ3cvTGRXYi8vVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCitWVW5sWC8vaDNUNUFqYzg1V05reVR1aXJoU1p0SXI2K1gvQXhINGtSL1FHNU5pYUR4UDlIMEZ6TXM1RmNNbmk4CiszUnM0ZDJIM0NCcytRQjdsbS9iK3h5MjZ2cE9Sd2xWRlhTY0hlVEVhbnVYU1ZzbUdQa243VEFRclBveVpnVlVOCit1eTRUR2k4TWxrc280Z21nZWh2Z1RrbElWK0VteHkzMkFiZDFsUmZJOC92T1ExeFRkQTdmM1g5OEFmV1N0VHlhCitER1JzUUxaRS9RNC9HaDU3eE5xRjBmdEJJUnd0OVRiR2x1OEF5WmlJaWxWRUNHdkUvZ3RUd3VxcFFQT2hKUW1pCitOZFlURXJnRDJXa3c5b2hpZlFGbzQ2QU1NVTFzZWVodHFpalcycEMyVWptVjVuYm9QczBlR1FtV3JmTkNqRE9yCitzWmZoOThCYWZjYUZHano2MDVWMzZnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDIxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDIxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFjNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MjEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQytqQ0NBZUtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQorbVRYMnNIWTQyT3JkOWdXeUI2R2NkbExqakUrNHpCSjFCb0RwTW52Sjg5bmlNVHVaVHExVmlNcC9CNlJ1VEgrMgorWUYzK3JpWllRREg5eU0vOHJndkFVSXZLOVNUYXExOVpybTBtbmZRVW85eUtka2ZvSitYdld1dks2ZitOa0FNZworeGZoQUQ2ZVN1cGlnVHZvdi93MklUOHJTMGR4bzRLRjZoS0JMMmFZbFhoaUV5aS9ObXNFUFpXdlZoK3FrM0wvUQorR1N3cGdDK0RoVm9RekZSb2ZVZEs5TzlNa2dSNjc1aWZ0YUZEdnlpN0YwZnhyU0xmQi9XeTRjZ1JZeklXNnB5TgorMnNYV2l2S2RMSTNiZ0IwMWZmZGJPMTdaQUdJTEsxd2hPMjkvYlg2aGJIMDlZL0g3alIydmp5K0tQOU4wUEVhMworN1NCeW1sb2tCM0E4d3EvTFdQWVBlUUlEQVFBQm8xTXdVVEFQQmdOVkhSTUVDREFHQVFFQkFnRUFNQjBHQTFVZAorRGdRV0JCU09CZDFmSDAwWTlyNVM4Y0VMai85SVQ0QkdsREFmQmdOVkhTTUVHREFXZ0JTT0JkMWZIMDBZOXI1UworOGNFTGovOUlUNEJHbERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUZFWTJTdHBwYVB6T2dHNnZFdlBKci8vKworTldZMWpLY0JCM2NUK3pXSlc1NCtCZXhEanlhQlJuQklQdlJMREc4UEFsaGxZcjl2L1A2SkNqQlN1aFlvckZMRworUDRaaEQrYWt1TXZuNnlGN25zeUcyMExIUHd2RTcvanllNyt6U08zaGh5cUNnN043TTdPMTdleG8vYWd3L2lVSQorRFlVdVV2MVpKbFp2UEIya21aTVlhNzhnMFAyeW55S3B1NGhkYnN0Snp4d0E0YVFEWEdReGNRTnR2KzNaQ2RDMgorVEk0dzBqb2RranFkcS80eTBNY3BrRXZZTDMvTGFRRWxMYUhyOENRbzd4WUV6c2p2K2Nuem9qQ08vaWxYVStSbAorc3o5NDBRNG5qQUpxbHBmaUo0NGFGeXRqcDk2dU40WVZwVmlGQ3ZSei8vOXV5UVk5a3VBLzhrS3dKdU8zcXc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MjIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MjIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2Q2NWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQyMi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQnpDQ0FlK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUNZeEpEQWlCZ05WCitCQU1URzFSbGMzUWdhVzUwWlhKdFpXUnBZWFJsSUcxaGVIQmhkR2dnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFOcEdsQk1YZG84Y085b3FVdy9iNlBNd2lNTlY4TENlNndCOVZLSFBhNk9HCitRMG84WHFrdGd3bmgxcm9qZ3BNaGJDQXBFN1VYZU1yNlpHcS9OdHFtTzFoTzVhZFY1SmVoV1p5dmc3ajRFQnBHCitnOGlXbzBqTnBLTUowWXgxdUJra2xqRWRaTFRIYTRiSy96eTJOS3FETlMyeVdzOS9NNSt4dzVYRTJlY0FnN0ZUCitjWGhmM3E1MFYrTTZUMklhUTlCeG50VHlDVDhJSUYyZVJNL3Q5WTk0NHM5UmZ6bS9LUVZLUllQdWRYN1loVHQ5CitpcUNKQjRKb3FZaHMzSEVPMHdQa0p4WTRLQlRVQ045NHMrN2pVRmRScll4ZSs4WWE2dElZV3FEMzhpNXFkR2hZCit4clZleTFMYXRzREpRMkVnTllvYk0vTGpvQ0xLMVdVc3NFcWYwT1UyYmkwQ0F3RUFBYU5RTUU0d0RBWURWUjBUCitCQVV3QXdFQkFUQWRCZ05WSFE0RUZnUVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3SHdZRFZSMGpCQmd3CitGb0FVamdYZFh4OU5HUGErVXZIQkM0Ly9TRStBUnBRd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGd1pyaVR1CitES2tpREhGZnozVVg0Zkl4WVRIQ2k0VHZlWVpHUGVUYnhoQmIzWFpDNXFERjRUNUh2Q1RTa0c5K29GZlp6STFhCitsUE4yeVpCN1FubUhKb3lXYTVmdW92d1VMMGlJM2lJWk1xVTU2dGRWUFc4Z2tKZSsrVTVrSE1TcHoyVkYwZW84Cis3WGtLV3hab3ZSd2N6Z2ZERlJQOXpNOUN5bHl6UWpxeHg2a2J4Sm96V253YzVVclZiSk1hUElxb25YcDFuRG9aCitpODc4K2hYNHJKVUVqZ082U2E5R1ZaUXBtdUNyUUYwcUtzVGlVQnpaTjY3aG9EM3hvVEFZaTVJWFFFMnRSRDFOCitqM3p3bmc5bGlDc3h1ckdNbnVWMEJQV3YvSURZUnUvc3lqZWUxUXYxVkZlUnRvNUQ0UmxkbWkycDFmNWlXSkNrCis1bTVZcFJza25hSUNqWXM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQyMy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQyMy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1NDcyNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDIzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURERENDQWZTZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBZU1Sd3dHZ1lEVlFRREV4TlVaWE4wSUd4bFlXWWdhVzUyWVd4cFpDQXlNSUlCSWpBTkJna3EKK2hraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBaWdHZ0hHTldOa0VXV0ZuN2VhVTRrQzJXalIzUnRjQnMKK29XMU1sUW5kVXZ3V1VIZ2NiZklnN25oNjZPaTZYbDNJcUFNakhqMUowRVBHY3dUZm1MZGFSdk4zOEtqVE1oMy8KK0ZpRnJyVUwwTU5naUd4amtUdGhXZ3NmVjRDL2kzdlJEVENXKzJVTUZkZDYrejdod0ZmK2xkVHNDUDlRcCs5M0cKK2Ryc2xydkFSMlcwcWpITFVMQUpHay82V3p4Rkc2eGVDZ2Roa29vRFBwcnNmbFpKL2NOMVN1cVRZT2FWTUFqOUoKK2FvdlN0VVRWaEY4b3VEVUxwcTBmaUJJbW9sZE9iY0dkYUFXbGdSbDBrOE5kb1NMcFdkLzcraGk0c0g1UFNPWnEKKys4ZzFsUTNjZ3JFN3RhNFgzcC9pNmVBcGNuMWh5RWtUeTlacEtPRnZaWG5NNEQxajgrS1NLUUlEQVFBQm8wMHcKK1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlRDTjJ2RExZMXRjZW5UenlSbWxTNFRCZTJ4aWpBZkJnTlYKK0hTTUVHREFXZ0JRNEdYeDUxV2I4Zm5GMUxZUVlSNHZOKzFuOE5UQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUEKK2ViL3RndFNicno3ajdIUWF4R2dJNUxWZWRScm8zYTJmTkxoTzB3TmJvR0k2Z0FDSVBhaXQxZVBrVXd1TWZMZmwKK0ZreTIvMlZaOEllNHBRcXhGbWRTVXFmMU5TbXhnaVdMUmhvNG9UaUZ2MXowOExZUWdTZEtUNDlmZktPNjdUREcKK0Qxbkk4ckV1VDFOdXBxOFdJNWpjS2dXcWt0TUpqZ0t6Zk4rOW5DZ0ZHUU1HcVRCbnQ3dVlaSGhudVpmS1NKUHYKK2dIbVM0Z2o3Mk9RMk51NnhPUkdoZDZKOFZqemNHNkJYMXBMZWJOUVJ6bEhUM0U1SVZORi85Y0NyYytFODdXbnMKK2JER3R6aHl4N1NJUDcvMlRpSmVCWnM3cDh4WHBhREYyY054MkYralpIK1A4ZmVUN2MrSm9ZN0E3MnVWRFNsWWYKK1dWZjAycHlsS1JncWF5T3VqSDNQV0E9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMmFmNGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzMS5jcnQKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDK2pDQ0FlS2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUJZeEZEQVNCZ05WCitCQU1UQzFSbGMzUWdjbTl2ZENBeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCittVFgyc0hZNDJPcmQ5Z1d5QjZHY2RsTGpqRSs0ekJKMUJvRHBNbnZKODluaU1UdVpUcTFWaU1wL0I2UnVUSCsyCitZRjMrcmlaWVFESDl5TS84cmd2QVVJdks5U1RhcTE5WnJtMG1uZlFVbzl5S2RrZm9KK1h2V3V2SzZmK05rQU1nCit4ZmhBRDZlU3VwaWdUdm92L3cySVQ4clMwZHhvNEtGNmhLQkwyYVlsWGhpRXlpL05tc0VQWld2VmgrcWszTC9RCitHU3dwZ0MrRGhWb1F6RlJvZlVkSzlPOU1rZ1I2NzVpZnRhRkR2eWk3RjBmeHJTTGZCL1d5NGNnUll6SVc2cHlOCisyc1hXaXZLZExJM2JnQjAxZmZkYk8xN1pBR0lMSzF3aE8yOS9iWDZoYkgwOVkvSDdqUjJ2ankrS1A5TjBQRWEzCis3U0J5bWxva0IzQTh3cS9MV1BZUGVRSURBUUFCbzFNd1VUQVBCZ05WSFJNRUNEQUdBUUVCQWdFQk1CMEdBMVVkCitEZ1FXQkJTT0JkMWZIMDBZOXI1UzhjRUxqLzlJVDRCR2xEQWZCZ05WSFNNRUdEQVdnQlNPQmQxZkgwMFk5cjVTCis4Y0VMai85SVQ0QkdsREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQjluTGFxeHNCVzBpc0RhQkdOSnl6SDlPCitXcVlZMGhleDl0bTNVcXlnZkU5YjlhYWh5a3Brb3dRSXpoNEQ5WHBiZDBoWkdWbEsvc3cycXNLajZnRE9pTXRMCit1V3M0Z2FGTldJUXFoVnNUekw4OGM3WGFXNTVuK1RSUWRWWnl5MzhEWlZXcGh0ZTFNdW1jOVdCOE4xNXJaVERoCitpWGp3R2wwbXJWMWVncTRoSlpMcHkxNGY2aWhxVTdLR2ZtYzlvbnh2Z3ZXeFlMaSs1djg4NzRjNG9waFNLc0kyCitxVkU4aVo2dXEyb1E2NlBkNVM1MGNZazZNRVc1bGlmQWhMTTVXRlptVzdkUktteWtCR1o5ckZySnJJdmhrbWg5CitIZTdxNlRFUVAxV2NvYzE0N25JZzBCVGtIR3RkckV2M2pJWDZVS0tVRXdVVWs5QVJCMW1Tb2RaUUhCaHV3dz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjZDY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDMyLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURCekNDQWUrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTWpBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQ1l4SkRBaUJnTlYKK0JBTVRHMVJsYzNRZ2FXNTBaWEp0WldScFlYUmxJRzFoZUhCaGRHZ2dNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU5wR2xCTVhkbzhjTzlvcVV3L2I2UE13aU1OVjhMQ2U2d0I5VktIUGE2T0cKK1EwbzhYcWt0Z3duaDFyb2pncE1oYkNBcEU3VVhlTXI2WkdxL050cW1PMWhPNWFkVjVKZWhXWnl2ZzdqNEVCcEcKK2c4aVdvMGpOcEtNSjBZeDF1QmtrbGpFZFpMVEhhNGJLL3p5Mk5LcUROUzJ5V3M5L001K3h3NVhFMmVjQWc3RlQKK2NYaGYzcTUwVitNNlQySWFROUJ4bnRUeUNUOElJRjJlUk0vdDlZOTQ0czlSZnptL0tRVktSWVB1ZFg3WWhUdDkKK2lxQ0pCNEpvcVloczNIRU8wd1BrSnhZNEtCVFVDTjk0cys3alVGZFJyWXhlKzhZYTZ0SVlXcUQzOGk1cWRHaFkKK3hyVmV5MUxhdHNESlEyRWdOWW9iTS9Mam9DTEsxV1Vzc0VxZjBPVTJiaTBDQXdFQUFhTlFNRTR3REFZRFZSMFQKK0JBVXdBd0VCQVRBZEJnTlZIUTRFRmdRVU9CbDhlZFZtL0g1eGRTMkVHRWVMemZ0Wi9EVXdId1lEVlIwakJCZ3cKK0ZvQVVqZ1hkWHg5TkdQYStVdkhCQzQvL1NFK0FScFF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUZ3WnJpVHUKK0RLa2lESEZmejNVWDRmSXhZVEhDaTRUdmVZWkdQZVRieGhCYjNYWkM1cURGNFQ1SHZDVFNrRzkrb0ZmWnpJMWEKK2xQTjJ5WkI3UW5tSEpveVdhNWZ1b3Z3VUwwaUkzaUlaTXFVNTZ0ZFZQVzhna0plKytVNWtITVNwejJWRjBlbzgKKzdYa0tXeFpvdlJ3Y3pnZkRGUlA5ek05Q3lseXpRanF4eDZrYnhKb3pXbndjNVVyVmJKTWFQSXFvblhwMW5Eb1oKK2k4NzgraFg0ckpVRWpnTzZTYTlHVlpRcG11Q3JRRjBxS3NUaVVCelpONjdob0QzeG9UQVlpNUlYUUUydFJEMU4KK2ozenduZzlsaUNzeHVyR01udVYwQlBXdi9JRFlSdS9zeWplZTFRdjFWRmVSdG81RDRSbGRtaTJwMWY1aVdKQ2sKKzVtNVlwUnNrbmFJQ2pZcz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDMzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDMzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTVkMTkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0MzMuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREZ6Q0NBZitnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lERXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFtTVNRd0lnWURWUVFERXh0VVpYTjBJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURJdworZ2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ0tBYUFjWTFZMlFSWllXZnQ1cFRpUQorTFphTkhkRzF3R3loYlV5VkNkMVMvQlpRZUJ4dDhpRHVlSHJvNkxwZVhjaW9BeU1lUFVuUVE4WnpCTitZdDFwRworODNmd3FOTXlIZjhXSVd1dFF2UXcyQ0liR09STzJGYUN4OVhnTCtMZTlFTk1KYjdaUXdWMTNyN1B1SEFWLzZWMQorT3dJLzFDbjczY1oydXlXdThCSFpiU3FNY3RRc0FrYVQvcGJQRVVickY0S0IyR1NpZ00rbXV4K1Zrbjl3M1ZLNgorcE5nNXBVd0NQMGxxaTlLMVJOV0VYeWk0TlF1bXJSK0lFaWFpVjA1dHdaMW9CYVdCR1hTVHcxMmhJdWxaMy92NgorR0xpd2ZrOUk1bXI3eURXVkRkeUNzVHUxcmhmZW4rTHA0Q2x5ZldISVNSUEwxbWtvNFc5bGVjemdQV1B6NHBJcAorQWdNQkFBR2pVREJPTUF3R0ExVWRFd1FGTUFNQkFRRXdIUVlEVlIwT0JCWUVGTUkzYThNdGpXMXg2ZFBQSkdhVgorTGhNRjdiR0tNQjhHQTFVZEl3UVlNQmFBRkRnWmZIblZadngrY1hVdGhCaEhpODM3V2Z3MU1BMEdDU3FHU0liMworRFFFQkN3VUFBNElCQVFDcHJ6cG9qNlVhRUc0ZXFMZzJMM0hxc3ZZNzMvWEU4eXR1Wjl3REMzSG9kbm1wZXpVWAorNDhYd0pQSEZPN09HUEdXWmdzVTJxWC9acDd5VVhrVkZTSzRWbm1uU3pVdFhOVmxVMG9XRUVPelFMcnBwaGtzSAorZGNGOFlOTi9ZNjVLbmh6SVU3ODR1SGVGZWZVcFBhRTZ5UzVPU1pib3B0WldWRjl5MUxvVTNGN2dOMFVHdlZHOQoraGZsejVPMC9Ldm1ZZCs2K1lyamUrMmxiSGlKSE5YTG1PUGlaeWs5VEJEa255Z0J1VTE0SU9XZ2hRaW0zeWtzOQordEtrOEQzOFZsODVWNWFHOW5PNFNUang1SjhCdFNsMHg2d1czdDlXd1U1VUM5Z2VDUk9oWkkxWFJCYWZJb0trbgorVlNnSExwTFRBUnRMaWtiYmcvM1N4cG5XMTJtc0h2Z0xWYXNmCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzNC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQzNC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViY2I2NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDM0LmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURERENDQWZTZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREl3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBZU1Sd3dHZ1lEVlFRREV4TlVaWE4wSUd4bFlXWWdhVzUyWVd4cFpDQXpNSUlCSWpBTkJna3EKK2hraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBa1NyZ1dGRDRsWVEwUkYvejNtSlpqbjFsZ05Ca2huQ1AKKzBoY2lKdi9ldG9NTjNiQ0IrdWM4Zm8wd3hEUTJaY2J6VEFRMHFCTm5qSnZBSjFxc2xaQTlib0lCS21UOEpTaXgKK2lpLzFYVERXSTNFNWFPdlgxaDZsVzY2cFZzSXpMbTBOQWYwVkpuMnhMdzBZdjhoZktid2pjTmVBZm03R0N3SkIKKzhza2pla01LSjgrZTZwUDRaSHhtcm5PbzBrVWxDZzh3OFJLelo2c1lKeFgxRVRla1dQRVVTWHJzY1EvWVNqcE8KK3pqTERwaDFsTzRnVkVyQmhkSmdKcEp6bnFrclJCaVI3Zi9oSXJwQVYzd09VYnRmcnhySWI1RlhPTTlydC9zdlcKK1JScnpJVUduQnZvMDRXWitLUUhQc01uKzl4OGkrL3R1ZU9nMUtMZnMxMGhXMFJXc1RRam1PUUlEQVFBQm8wMHcKK1N6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlNPQnIxVTRoNVBZeU9xR2UvZ0pnd1drN0ZmZXpBZkJnTlYKK0hTTUVHREFXZ0JUQ04ydkRMWTF0Y2VuVHp5Um1sUzRUQmUyeGlqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUEKK2FCTHV3Tk41dk9oMmRMYm44bE1Oc2Mvb1RGU0luenUreWx6Qy9LTFRram95TVlZK1MySVNVdWV3OXB6VW80R3MKK0FBRS9ycVZZZWRuYXl5QTEzZU5SQm53SXcrOGtQVEVTYUpNR2w2dVFRZDhEekFhbHpxeGJGaGJ3RlkyVDBwZGkKK0xORmtHam1HZHBSTnkvVlNUeTZKRUVCTWhJS1hqTXBhY3RtcGlWNm13SzNiZm5GYVhaNm83MCtKWnJOZWlTZTAKK2c4c2NpNmdCVkV0MjdiR3ZoTGFsdXQ4V1hjN1ZDa3hRaFFDU0Jkdi85NEVtUnh6UHllNmlBSzBMOWphVEhsdCsKK3FSNU1XSnhaTjMybXVJN25zS25ldFVNWmJJWXd2TzFMUG44ZiswaGRZa2NrOGtFN2dhMVVNOThvVGdRZUlPbWoKKzNKTkNEa05ZK1ozODd1amFhT0FWeHc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjVjOTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0MS5jcnQKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDOXpDQ0FkK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ05EQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUJZeEZEQVNCZ05WCitCQU1UQzFSbGMzUWdjbTl2ZENBME1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCittVFgyc0hZNDJPcmQ5Z1d5QjZHY2RsTGpqRSs0ekJKMUJvRHBNbnZKODluaU1UdVpUcTFWaU1wL0I2UnVUSCsyCitZRjMrcmlaWVFESDl5TS84cmd2QVVJdks5U1RhcTE5WnJtMG1uZlFVbzl5S2RrZm9KK1h2V3V2SzZmK05rQU1nCit4ZmhBRDZlU3VwaWdUdm92L3cySVQ4clMwZHhvNEtGNmhLQkwyYVlsWGhpRXlpL05tc0VQWld2VmgrcWszTC9RCitHU3dwZ0MrRGhWb1F6RlJvZlVkSzlPOU1rZ1I2NzVpZnRhRkR2eWk3RjBmeHJTTGZCL1d5NGNnUll6SVc2cHlOCisyc1hXaXZLZExJM2JnQjAxZmZkYk8xN1pBR0lMSzF3aE8yOS9iWDZoYkgwOVkvSDdqUjJ2ankrS1A5TjBQRWEzCis3U0J5bWxva0IzQTh3cS9MV1BZUGVRSURBUUFCbzFBd1RqQU1CZ05WSFJNRUJUQURBUUVCTUIwR0ExVWREZ1FXCitCQlNPQmQxZkgwMFk5cjVTOGNFTGovOUlUNEJHbERBZkJnTlZIU01FR0RBV2dCU09CZDFmSDAwWTlyNVM4Y0VMCitqLzlJVDRCR2xEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFXaHJIR0lNY0VHMlVKZnY5MjBoZnR4aStKdmovCitpdnJoRXNjcWxWQTBRTkxxWlY4di9haS9BaXlwRExrN3V3S3RzeEYyaStzbDgxNDczYVNGUzloaDNGODMvb2ZtCit4OEVVOFgxRkJRSE4xenlBRXBaeVBYcjdNaWFUWG40dzVzQ2VaTG1wV3l4R2srY1JpUFZSRTBRVWJYREdmVlJwCiszdjk4NG9DVU1VemJiK3p2NlFsa0hhNm0va1pxMHFybk5WVnAwWDRjNy9QYjVlbEpPVmxLbklzbE5nZC9lTHJ6Cit6U2FiVG9BWDlPUDZ0YkpkU1JreS9MbUlZVytDWEgvWTRZVndwRXU3TmlzWm1EbzZsbkNCb1JRQjNRZ3hvTUxwCittTStSVVkrQXlIcjBac1NVU2I2aWljSk1SWjNtaHhDTHZuSy9Ob2UvM2hxNHBVazRTaXQ3czdKTDdBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDcxMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDIuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRENqQ0NBZktnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdOREFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1DWXhKREFpQmdOVgorQkFNVEcxUmxjM1FnYVc1MFpYSnRaV1JwWVhSbElHMWhlSEJoZEdnZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQgorQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBHbEJNWGRvOGNPOW9xVXcvYjZQTXdpTU5WOExDZTZ3QjlWS0hQYTZPRworUTBvOFhxa3Rnd25oMXJvamdwTWhiQ0FwRTdVWGVNcjZaR3EvTnRxbU8xaE81YWRWNUplaFdaeXZnN2o0RUJwRworZzhpV28wak5wS01KMFl4MXVCa2tsakVkWkxUSGE0YksvenkyTktxRE5TMnlXczkvTTUreHc1WEUyZWNBZzdGVAorY1hoZjNxNTBWK002VDJJYVE5QnhudFR5Q1Q4SUlGMmVSTS90OVk5NDRzOVJmem0vS1FWS1JZUHVkWDdZaFR0OQoraXFDSkI0Sm9xWWhzM0hFTzB3UGtKeFk0S0JUVUNOOTRzKzdqVUZkUnJZeGUrOFlhNnRJWVdxRDM4aTVxZEdoWQoreHJWZXkxTGF0c0RKUTJFZ05Zb2JNL0xqb0NMSzFXVXNzRXFmME9VMmJpMENBd0VBQWFOVE1GRXdEd1lEVlIwVAorQkFnd0JnRUJBUUlCQVRBZEJnTlZIUTRFRmdRVU9CbDhlZFZtL0g1eGRTMkVHRWVMemZ0Wi9EVXdId1lEVlIwagorQkJnd0ZvQVVqZ1hkWHg5TkdQYStVdkhCQzQvL1NFK0FScFF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUdLaAorcEJoWVNHTjBLR1dJRzRHRzRtVm9UaXc4ODBlaGV0RHVUcGwzeW1aTnFrb1V1VGFBdFUzUEpXT2N0Y0p2YTdoNgorNFBTZ3lhYmkvV1FtaG50UjFHeENVdDBHVHVoSG15SllzU3dha1hVZ01nRjZXNlRLY3hnNm00dmpNa2tyZitaVAorMWxPL01pd3hoVFRsdUhQR2tsL25CRyt1eHlTSW51UU1EdmR5UURYcDJlMTdxeG9wcytHKzFVblJKaW5xTHRzZAorTE1rQ09UNHB5aDZCNXlzbko4Z1AxWjJFS1dqaEtKY0lIUk1VbTdBcC9wZjhaZ2g1TElxZFJ0RFN1TnVUbVBMUAorbGtnb2ViT0NPM2MvbVdDY2lSMHhHQ2N6ODZHM2ZZem52R3A0WHFIblJrZzNTcEFjSFFiUS9uU0hBKzFMZGZGaQorbnFaUVBuSlBWc0pjdERSOTM1Yz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTVkMTkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDMuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREZ6Q0NBZitnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lERXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFtTVNRd0lnWURWUVFERXh0VVpYTjBJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURJdworZ2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ0tBYUFjWTFZMlFSWllXZnQ1cFRpUQorTFphTkhkRzF3R3loYlV5VkNkMVMvQlpRZUJ4dDhpRHVlSHJvNkxwZVhjaW9BeU1lUFVuUVE4WnpCTitZdDFwRworODNmd3FOTXlIZjhXSVd1dFF2UXcyQ0liR09STzJGYUN4OVhnTCtMZTlFTk1KYjdaUXdWMTNyN1B1SEFWLzZWMQorT3dJLzFDbjczY1oydXlXdThCSFpiU3FNY3RRc0FrYVQvcGJQRVVickY0S0IyR1NpZ00rbXV4K1Zrbjl3M1ZLNgorcE5nNXBVd0NQMGxxaTlLMVJOV0VYeWk0TlF1bXJSK0lFaWFpVjA1dHdaMW9CYVdCR1hTVHcxMmhJdWxaMy92NgorR0xpd2ZrOUk1bXI3eURXVkRkeUNzVHUxcmhmZW4rTHA0Q2x5ZldISVNSUEwxbWtvNFc5bGVjemdQV1B6NHBJcAorQWdNQkFBR2pVREJPTUF3R0ExVWRFd1FGTUFNQkFRRXdIUVlEVlIwT0JCWUVGTUkzYThNdGpXMXg2ZFBQSkdhVgorTGhNRjdiR0tNQjhHQTFVZEl3UVlNQmFBRkRnWmZIblZadngrY1hVdGhCaEhpODM3V2Z3MU1BMEdDU3FHU0liMworRFFFQkN3VUFBNElCQVFDcHJ6cG9qNlVhRUc0ZXFMZzJMM0hxc3ZZNzMvWEU4eXR1Wjl3REMzSG9kbm1wZXpVWAorNDhYd0pQSEZPN09HUEdXWmdzVTJxWC9acDd5VVhrVkZTSzRWbm1uU3pVdFhOVmxVMG9XRUVPelFMcnBwaGtzSAorZGNGOFlOTi9ZNjVLbmh6SVU3ODR1SGVGZWZVcFBhRTZ5UzVPU1pib3B0WldWRjl5MUxvVTNGN2dOMFVHdlZHOQoraGZsejVPMC9Ldm1ZZCs2K1lyamUrMmxiSGlKSE5YTG1PUGlaeWs5VEJEa255Z0J1VTE0SU9XZ2hRaW0zeWtzOQordEtrOEQzOFZsODVWNWFHOW5PNFNUang1SjhCdFNsMHg2d1czdDlXd1U1VUM5Z2VDUk9oWkkxWFJCYWZJb0trbgorVlNnSExwTFRBUnRMaWtiYmcvM1N4cG5XMTJtc0h2Z0xWYXNmCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0NC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0NC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0ZmIyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDQ0LmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGekNDQWYrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREl3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBbU1TUXdJZ1lEVlFRREV4dFVaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lETXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNSS3VCWVVQaVZoRFJFWC9QZVlsbU8KK2ZXV0EwR1NHY0kvU0Z5SW0vOTYyZ3czZHNJSDY1engralRERU5EWmx4dk5NQkRTb0UyZU1tOEFuV3F5VmtEMXUKK2dnRXFaUHdsS0xHS0wvVmRNTllqY1RsbzY5ZldIcVZicnFsV3dqTXViUTBCL1JVbWZiRXZEUmkveUY4cHZDTncKKzE0Qitic1lMQWtIeXlTTjZRd29uejU3cWsvaGtmR2F1YzZqU1JTVUtEekR4RXJObnF4Z25GZlVSTjZSWThSUkoKK2V1eHhEOWhLT2s3T01zT21IV1U3aUJVU3NHRjBtQW1rbk9lcVN0RUdKSHQvK0VpdWtCWGZBNVJ1MSt2R3NodmsKK1ZjNHoydTMreTlaRkd2TWhRYWNHK2pUaFpuNHBBYyt3eWY3M0h5TDcrMjU0NkRVb3QrelhTRmJSRmF4TkNPWTUKK0FnTUJBQUdqVURCT01Bd0dBMVVkRXdRRk1BTUJBUUV3SFFZRFZSME9CQllFRkk0R3ZWVGlIazlqSTZvWjcrQW0KK0RCYVRzVjk3TUI4R0ExVWRJd1FZTUJhQUZNSTNhOE10alcxeDZkUFBKR2FWTGhNRjdiR0tNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRQ0IzZHRzb1Zkc2NoVnlDV1NJMTZTZTQ2UlpKdExXMWJNMDE5S2R5Wmo5RGRJWjJWUG0KK0lwK0JRRmNWSnl6YmZtaG41UUJiaE5ES2t3c2ZsZEk5WThJcVoxMzJqNDQyL1hJRlpJaWxhUGkzY0UvV0xGVVkKK054dTJvcHVOMytLRHdEWU8zMkNVcDNmcnI5T2pBdEI1YW1abmtYYXUrQzFFa0psU3VXYVQrL2dJbFl3bHI0L0gKK3VBRGN5cUZTbXkyOFA5am1rSzhBelpIaEtubFJhZEFuMmNEQjhNRlhENVZ4bkxKZmVqa3ByUVZMZHhUWFJvdlAKK2NFLzZjN1BVR0lLMjJXY1NYOEtUZnV2aUttamRHVmhnZUtwczJuUk5LYVNJbHFZQ3p0eWM4SWpjWndKQ25oNmMKK1pXOFY5Ymk3V3hESytJOVBQZ3JnTEs4VytWVGtTMFJ0alA1YQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDUuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NDUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDViM2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ0NS5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlERERDQ0FmU2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURNd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQWVNUnd3R2dZRFZRUURFeE5VWlhOMElHeGxZV1lnYVc1MllXeHBaQ0EwTUlJQklqQU5CZ2txCitoa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWtjTnNFL3M0bmF1QTV2U0cvMjN6bkhUNVpqRkFRaVJhCis4M3hvODNNRDJqTXJCamdCQnpPVzBJS2VkazlsbXFjUm1vTXNXdDNQYlllSDJBbStFcXRPamg5dmJIdy93WEV3CitlWGc3RHRaYVlUamVSTmtyd1owejVCei9UVHZpYTdZa2NmYVU4M09HNEp5TDhHbW1idGlHTk9IWnlIcVR2Mkt5CitqNllxeUJKYURFN2R3Qk5CSmQ1REVsRXV2cjZUdS9ZM0szWjZ6OGJaVUFYLzVvSUkyc3E4cmc3NlpRK0RmazhpCit1cGpwNE1WUHZvd2gvK3lzK1dOTVc1TUE1azFkd1l5VTFNWjIwTy9hYTlWVE1rYjREUHl2NHBYWmdpMWRCQ01jCitZc2tQUlZvUFBzRTV4bDNEWjNoNHFaMDM5TWJjYWxYRlllNjU2ODkrUmExTzQvZHNYUjVyYVFJREFRQUJvMDB3CitTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJUS3RYZFFaQThjWmtTLzg5ZWlpaDRHVEpYK2ZEQWZCZ05WCitIU01FR0RBV2dCU09CcjFVNGg1UFl5T3FHZS9nSmd3V2s3RmZlekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCitJV3lueW84ZXp0K1NvK3cyOWg3ejJaUzMvRWNyRXJuU2lEREowRGFFL3ZjdmZsclQvdEVQZURIVHh5NjFxUXVYCitLb3NlTzg0Zm9GcUxQdTFZcWdTalJnbWJrNzZndDhhQXUwbHI2L3QwUkhXZEhLWkczUXRLODY5NnBHb01BaFZnCitIYTNmL1lZYUVrcVNuSHdVKy92eEVYRWtHSE0yMlVId2I3ZHRIMkxmQkh0b1F0akU2TStVbHY2UWRrTGoyTEZECitYTUtKSXlBbGliVFJNVzhZT1A0Ry9EZWtDcTFEc3RVT2NUbjdCRnFlQWpqell3djNOSHBPSkhkWnJVZ3lHYjdCCitRcURYZjJyTTNzN0xFcHdETXZmZHJhQUVXbGQ0L0xSTGtmYXUvUGZLRDVZd0dZZzNOYjQ1eHlYRlNFaWpWakFyCisyM0c4SEFJY0pKdTJqVUlXR3I5T3RRPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDUxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDUxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY1Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzl6Q0NBZCtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdOREFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQTBNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQorbVRYMnNIWTQyT3JkOWdXeUI2R2NkbExqakUrNHpCSjFCb0RwTW52Sjg5bmlNVHVaVHExVmlNcC9CNlJ1VEgrMgorWUYzK3JpWllRREg5eU0vOHJndkFVSXZLOVNUYXExOVpybTBtbmZRVW85eUtka2ZvSitYdld1dks2ZitOa0FNZworeGZoQUQ2ZVN1cGlnVHZvdi93MklUOHJTMGR4bzRLRjZoS0JMMmFZbFhoaUV5aS9ObXNFUFpXdlZoK3FrM0wvUQorR1N3cGdDK0RoVm9RekZSb2ZVZEs5TzlNa2dSNjc1aWZ0YUZEdnlpN0YwZnhyU0xmQi9XeTRjZ1JZeklXNnB5TgorMnNYV2l2S2RMSTNiZ0IwMWZmZGJPMTdaQUdJTEsxd2hPMjkvYlg2aGJIMDlZL0g3alIydmp5K0tQOU4wUEVhMworN1NCeW1sb2tCM0E4d3EvTFdQWVBlUUlEQVFBQm8xQXdUakFNQmdOVkhSTUVCVEFEQVFFQk1CMEdBMVVkRGdRVworQkJTT0JkMWZIMDBZOXI1UzhjRUxqLzlJVDRCR2xEQWZCZ05WSFNNRUdEQVdnQlNPQmQxZkgwMFk5cjVTOGNFTAorai85SVQ0QkdsREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBV2hySEdJTWNFRzJVSmZ2OTIwaGZ0eGkrSnZqLworaXZyaEVzY3FsVkEwUU5McVpWOHYvYWkvQWl5cERMazd1d0t0c3hGMmkrc2w4MTQ3M2FTRlM5aGgzRjgzL29mbQoreDhFVThYMUZCUUhOMXp5QUVwWnlQWHI3TWlhVFhuNHc1c0NlWkxtcFd5eEdrK2NSaVBWUkUwUVViWERHZlZScAorM3Y5ODRvQ1VNVXpiYit6djZRbGtIYTZtL2tacTBxcm5OVlZwMFg0YzcvUGI1ZWxKT1ZsS25Jc2xOZ2QvZUxyegorelNhYlRvQVg5T1A2dGJKZFNSa3kvTG1JWVcrQ1hIL1k0WVZ3cEV1N05pc1ptRG82bG5DQm9SUUIzUWd4b01McAorbU0rUlVZK0F5SHIwWnNTVVNiNmlpY0pNUlozbWh4Q0x2bksvTm9lLzNocTRwVWs0U2l0N3M3Skw3QT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1Mi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1Mi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3MTMxOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDUyLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURDakNDQWZLZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTkRBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQ1l4SkRBaUJnTlYKK0JBTVRHMVJsYzNRZ2FXNTBaWEp0WldScFlYUmxJRzFoZUhCaGRHZ2dNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU5wR2xCTVhkbzhjTzlvcVV3L2I2UE13aU1OVjhMQ2U2d0I5VktIUGE2T0cKK1EwbzhYcWt0Z3duaDFyb2pncE1oYkNBcEU3VVhlTXI2WkdxL050cW1PMWhPNWFkVjVKZWhXWnl2ZzdqNEVCcEcKK2c4aVdvMGpOcEtNSjBZeDF1QmtrbGpFZFpMVEhhNGJLL3p5Mk5LcUROUzJ5V3M5L001K3h3NVhFMmVjQWc3RlQKK2NYaGYzcTUwVitNNlQySWFROUJ4bnRUeUNUOElJRjJlUk0vdDlZOTQ0czlSZnptL0tRVktSWVB1ZFg3WWhUdDkKK2lxQ0pCNEpvcVloczNIRU8wd1BrSnhZNEtCVFVDTjk0cys3alVGZFJyWXhlKzhZYTZ0SVlXcUQzOGk1cWRHaFkKK3hyVmV5MUxhdHNESlEyRWdOWW9iTS9Mam9DTEsxV1Vzc0VxZjBPVTJiaTBDQXdFQUFhTlRNRkV3RHdZRFZSMFQKK0JBZ3dCZ0VCQVFJQkFUQWRCZ05WSFE0RUZnUVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3SHdZRFZSMGoKK0JCZ3dGb0FVamdYZFh4OU5HUGErVXZIQkM0Ly9TRStBUnBRd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHS2gKK3BCaFlTR04wS0dXSUc0R0c0bVZvVGl3ODgwZWhldER1VHBsM3ltWk5xa29VdVRhQXRVM1BKV09jdGNKdmE3aDYKKzRQU2d5YWJpL1dRbWhudFIxR3hDVXQwR1R1aEhteUpZc1N3YWtYVWdNZ0Y2VzZUS2N4ZzZtNHZqTWtrcmYrWlQKKzFsTy9NaXd4aFRUbHVIUEdrbC9uQkcrdXh5U0ludVFNRHZkeVFEWHAyZTE3cXhvcHMrRysxVW5SSmlucUx0c2QKK0xNa0NPVDRweWg2QjV5c25KOGdQMVoyRUtXamhLSmNJSFJNVW03QXAvcGY4WmdoNUxJcWRSdERTdU51VG1QTFAKK2xrZ29lYk9DTzNjL21XQ2NpUjB4R0Njejg2RzNmWXpudkdwNFhxSG5Sa2czU3BBY0hRYlEvblNIQSsxTGRmRmkKK25xWlFQbkpQVnNKY3REUjkzNWM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1My5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1My5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1ZDE5MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDUzLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGekNDQWYrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBbU1TUXdJZ1lEVlFRREV4dFVaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lESXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNLQWFBY1kxWTJRUlpZV2Z0NXBUaVEKK0xaYU5IZEcxd0d5aGJVeVZDZDFTL0JaUWVCeHQ4aUR1ZUhybzZMcGVYY2lvQXlNZVBVblFROFp6Qk4rWXQxcEcKKzgzZndxTk15SGY4V0lXdXRRdlF3MkNJYkdPUk8yRmFDeDlYZ0wrTGU5RU5NSmI3WlF3VjEzcjdQdUhBVi82VjEKK093SS8xQ243M2NaMnV5V3U4QkhaYlNxTWN0UXNBa2FUL3BiUEVVYnJGNEtCMkdTaWdNK211eCtWa245dzNWSzYKK3BOZzVwVXdDUDBscWk5SzFSTldFWHlpNE5RdW1yUitJRWlhaVYwNXR3WjFvQmFXQkdYU1R3MTJoSXVsWjMvdjYKK0dMaXdmazlJNW1yN3lEV1ZEZHlDc1R1MXJoZmVuK0xwNENseWZXSElTUlBMMW1rbzRXOWxlY3pnUFdQejRwSXAKK0FnTUJBQUdqVURCT01Bd0dBMVVkRXdRRk1BTUJBUUV3SFFZRFZSME9CQllFRk1JM2E4TXRqVzF4NmRQUEpHYVYKK0xoTUY3YkdLTUI4R0ExVWRJd1FZTUJhQUZEZ1pmSG5WWnZ4K2NYVXRoQmhIaTgzN1dmdzFNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRQ3ByenBvajZVYUVHNGVxTGcyTDNIcXN2WTczL1hFOHl0dVo5d0RDM0hvZG5tcGV6VVgKKzQ4WHdKUEhGTzdPR1BHV1pnc1UycVgvWnA3eVVYa1ZGU0s0Vm5tblN6VXRYTlZsVTBvV0VFT3pRTHJwcGhrc0gKK2RjRjhZTk4vWTY1S25oeklVNzg0dUhlRmVmVXBQYUU2eVM1T1NaYm9wdFpXVkY5eTFMb1UzRjdnTjBVR3ZWRzkKK2hmbHo1TzAvS3ZtWWQrNitZcmplKzJsYkhpSkhOWExtT1BpWnlrOVRCRGtueWdCdVUxNElPV2doUWltM3lrczkKK3RLazhEMzhWbDg1VjVhRzluTzRTVGp4NUo4QnRTbDB4NndXM3Q5V3dVNVVDOWdlQ1JPaFpJMVhSQmFmSW9La24KK1ZTZ0hMcExUQVJ0TGlrYmJnLzNTeHBuVzEybXNIdmdMVmFzZgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NTQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmUxNGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ1NC5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQ2pDQ0FmS2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURJd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQWNNUm93R0FZRFZRUURFeEZVWlhOMElFeGxZV1lnTkNCMllXeHBaRENDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUpFcTRGaFErSldFTkVSZjg5NWlXWTU5WllEUVpJWndqOUlYCitJaWIvM3JhRERkMndnZnJuUEg2Tk1NUTBObVhHODB3RU5LZ1RaNHlid0NkYXJKV1FQVzZDQVNway9DVW9zWW92Cis5VjB3MWlOeE9XanIxOVllcFZ1dXFWYkNNeTV0RFFIOUZTWjlzUzhOR0wvSVh5bThJM0RYZ0g1dXhnc0NRZkxKCitJM3BEQ2lmUG51cVQrR1I4WnE1enFOSkZKUW9QTVBFU3MyZXJHQ2NWOVJFM3BGanhGRWw2N0hFUDJFbzZUczR5Cit3NllkWlR1SUZSS3dZWFNZQ2FTYzU2cEswUVlrZTMvNFNLNlFGZDhEbEc3WDY4YXlHK1JWempQYTdmN0wxa1VhCis4eUZCcHdiNk5PRm1maWtCejdESi92Y2ZJdnY3Ym5qb05TaTM3TmRJVnRFVnJFMEk1amtDQXdFQUFhTk5NRXN3CitDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVamdhOVZPSWVUMk1qcWhudjRDWU1GcE94WDNzd0h3WURWUjBqCitCQmd3Rm9BVXdqZHJ3eTJOYlhIcDA4OGtacFV1RXdYdHNZb3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRGRwCitWcFByNEF6RTdlY3JoY2xRS0dqUGE3bGVhb3JZdWV2alRMV3NpZVkxN21WUWhsTVgxaXRUTlhsUEJVZlBBc09kCitPN0xVZ1kweVpPblY3bDhUYmZHYWw4cElGK2FjZ0ZMZ3FNNUE2ejhuZ0NoTWk2aUtFWkNoRFZmZkFWSEpzM2UvCitXVW03VmVGWThNdnduYXkzaUhqMnRyQzdYUVgyU1pDb3ZYWWZOUDNiVnlxSWFETnF0NlNQWTFza291V3BtbVVuCitJU3pjeUg2RVUvQ2VnRmpISnlYeHJzSVc5TnYybURlanJtY1IwRUpPbUVBZldVZ29uZmVtZVg5M3hrd1pIVzJzCitsWjgvZTZyVFBQU0dkaFkvYjRWUnU2bzFGcExjUExHWlNnUHdZQk5WWXRnVDRXc29UMHhVdm02WTFXaXBpWmRhCitCL2JwaUw4bDRHU1Z0VHcxSmtvPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NjEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMmFmNGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ2MS5jcnQKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDK2pDQ0FlS2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUJZeEZEQVNCZ05WCitCQU1UQzFSbGMzUWdjbTl2ZENBeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBCittVFgyc0hZNDJPcmQ5Z1d5QjZHY2RsTGpqRSs0ekJKMUJvRHBNbnZKODluaU1UdVpUcTFWaU1wL0I2UnVUSCsyCitZRjMrcmlaWVFESDl5TS84cmd2QVVJdks5U1RhcTE5WnJtMG1uZlFVbzl5S2RrZm9KK1h2V3V2SzZmK05rQU1nCit4ZmhBRDZlU3VwaWdUdm92L3cySVQ4clMwZHhvNEtGNmhLQkwyYVlsWGhpRXlpL05tc0VQWld2VmgrcWszTC9RCitHU3dwZ0MrRGhWb1F6RlJvZlVkSzlPOU1rZ1I2NzVpZnRhRkR2eWk3RjBmeHJTTGZCL1d5NGNnUll6SVc2cHlOCisyc1hXaXZLZExJM2JnQjAxZmZkYk8xN1pBR0lMSzF3aE8yOS9iWDZoYkgwOVkvSDdqUjJ2ankrS1A5TjBQRWEzCis3U0J5bWxva0IzQTh3cS9MV1BZUGVRSURBUUFCbzFNd1VUQVBCZ05WSFJNRUNEQUdBUUVCQWdFQk1CMEdBMVVkCitEZ1FXQkJTT0JkMWZIMDBZOXI1UzhjRUxqLzlJVDRCR2xEQWZCZ05WSFNNRUdEQVdnQlNPQmQxZkgwMFk5cjVTCis4Y0VMai85SVQ0QkdsREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQjluTGFxeHNCVzBpc0RhQkdOSnl6SDlPCitXcVlZMGhleDl0bTNVcXlnZkU5YjlhYWh5a3Brb3dRSXpoNEQ5WHBiZDBoWkdWbEsvc3cycXNLajZnRE9pTXRMCit1V3M0Z2FGTldJUXFoVnNUekw4OGM3WGFXNTVuK1RSUWRWWnl5MzhEWlZXcGh0ZTFNdW1jOVdCOE4xNXJaVERoCitpWGp3R2wwbXJWMWVncTRoSlpMcHkxNGY2aWhxVTdLR2ZtYzlvbnh2Z3ZXeFlMaSs1djg4NzRjNG9waFNLc0kyCitxVkU4aVo2dXEyb1E2NlBkNVM1MGNZazZNRVc1bGlmQWhMTTVXRlptVzdkUktteWtCR1o5ckZySnJJdmhrbWg5CitIZTdxNlRFUVAxV2NvYzE0N25JZzBCVGtIR3RkckV2M2pJWDZVS0tVRXdVVWs5QVJCMW1Tb2RaUUhCaHV3dz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ2Mi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ2Mi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjZDY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDYyLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURCekNDQWUrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFXTVJRd0VnWURWUVFERXd0VVpYTjAKK0lISnZiM1FnTWpBZUZ3MHdNVEF4TURFd01EQXdNREJhRncwek1ERXlNekV5TXpVNU5UbGFNQ1l4SkRBaUJnTlYKK0JBTVRHMVJsYzNRZ2FXNTBaWEp0WldScFlYUmxJRzFoZUhCaGRHZ2dNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU5wR2xCTVhkbzhjTzlvcVV3L2I2UE13aU1OVjhMQ2U2d0I5VktIUGE2T0cKK1EwbzhYcWt0Z3duaDFyb2pncE1oYkNBcEU3VVhlTXI2WkdxL050cW1PMWhPNWFkVjVKZWhXWnl2ZzdqNEVCcEcKK2c4aVdvMGpOcEtNSjBZeDF1QmtrbGpFZFpMVEhhNGJLL3p5Mk5LcUROUzJ5V3M5L001K3h3NVhFMmVjQWc3RlQKK2NYaGYzcTUwVitNNlQySWFROUJ4bnRUeUNUOElJRjJlUk0vdDlZOTQ0czlSZnptL0tRVktSWVB1ZFg3WWhUdDkKK2lxQ0pCNEpvcVloczNIRU8wd1BrSnhZNEtCVFVDTjk0cys3alVGZFJyWXhlKzhZYTZ0SVlXcUQzOGk1cWRHaFkKK3hyVmV5MUxhdHNESlEyRWdOWW9iTS9Mam9DTEsxV1Vzc0VxZjBPVTJiaTBDQXdFQUFhTlFNRTR3REFZRFZSMFQKK0JBVXdBd0VCQVRBZEJnTlZIUTRFRmdRVU9CbDhlZFZtL0g1eGRTMkVHRWVMemZ0Wi9EVXdId1lEVlIwakJCZ3cKK0ZvQVVqZ1hkWHg5TkdQYStVdkhCQzQvL1NFK0FScFF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUZ3WnJpVHUKK0RLa2lESEZmejNVWDRmSXhZVEhDaTRUdmVZWkdQZVRieGhCYjNYWkM1cURGNFQ1SHZDVFNrRzkrb0ZmWnpJMWEKK2xQTjJ5WkI3UW5tSEpveVdhNWZ1b3Z3VUwwaUkzaUlaTXFVNTZ0ZFZQVzhna0plKytVNWtITVNwejJWRjBlbzgKKzdYa0tXeFpvdlJ3Y3pnZkRGUlA5ek05Q3lseXpRanF4eDZrYnhKb3pXbndjNVVyVmJKTWFQSXFvblhwMW5Eb1oKK2k4NzgraFg0ckpVRWpnTzZTYTlHVlpRcG11Q3JRRjBxS3NUaVVCelpONjdob0QzeG9UQVlpNUlYUUUydFJEMU4KK2ozenduZzlsaUNzeHVyR01udVYwQlBXdi9JRFlSdS9zeWplZTFRdjFWRmVSdG81RDRSbGRtaTJwMWY1aVdKQ2sKKzVtNVlwUnNrbmFJQ2pZcz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDYzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDYzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE5MGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NjMuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRENqQ0NBZktnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQW1NU1F3SWdZRFZRUURFeHRVWlhOMAorSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lERXdIaGNOTURFd01UQXhNREF3TURBd1doY05NekF4TWpNeAorTWpNMU9UVTVXakFjTVJvd0dBWURWUVFERXhGVVpYTjBJRXhsWVdZZ2RtRnNhV1FnTWpDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFJb0JvQnhqVmpaQkZsaForM21sT0pBdGxvMGQwYlhBYktGdAorVEpVSjNWTDhGbEI0SEczeUlPNTRldWpvdWw1ZHlLZ0RJeDQ5U2RCRHhuTUUzNWkzV2tiemQvQ28weklkL3hZaAorYTYxQzlERFlJaHNZNUU3WVZvTEgxZUF2NHQ3MFEwd2x2dGxEQlhYZXZzKzRjQlgvcFhVN0FqL1VLZnZkeG5hNworSmE3d0VkbHRLb3h5MUN3Q1JwUCtsczhSUnVzWGdvSFlaS0tBejZhN0g1V1NmM0RkVXJxazJEbWxUQUkvU1dxTAorMHJWRTFZUmZLTGcxQzZhdEg0Z1NKcUpYVG0zQm5XZ0ZwWUVaZEpQRFhhRWk2Vm5mKy9vWXVMQitUMGptYXZ2SQorTlpVTjNJS3hPN1d1Rjk2ZjR1bmdLWEo5WWNoSkU4dldhU2poYjJWNXpPQTlZL1Bpa2lrQ0F3RUFBYU5OTUVzdworQ1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVXdqZHJ3eTJOYlhIcDA4OGtacFV1RXdYdHNZb3dId1lEVlIwagorQkJnd0ZvQVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUJydAorMmZLT1V3QWI1RUZEL2ViWE1NNFF6ZzZzRllwcS9tY25QbG1HbXF3TnptdW1sZ1lVQlMxNWxpVG5BNG5CZ1IwOQorYjJzZWpsd256Y25yc0ZCMThZQ21FL1RJUHVoM1hNSlhtVXhqY25DeTNxUHVTd3B1d0czYnJVR1FQaUlaaFJaegorMStpU2M3dWJhL0pHYVRxTEJJdGFSUGxCNmREM2pxWTNVb3dGYVd2bllpVm1DWGcxNDdFQkM1TW4yRURpdWtnMAoreHNxTTAzeWZwVWtwNC9XOStXcEp1R055aGljU0piTnhsaDN6RWpyZ1dlTXZobkZtclRyN3NzNlAyWm9LR1MzLworUXJaQkxVemtrMjVoQ0YzZFROZlREVlNRVXQwck9OSnZ4M3ltK0twK3pRV2Mvb0hzRHMwU1RzNURiMkowZEdwOAorVkV5eHlldmZ3aXZGNEVRNzBKdz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDcxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDcxLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJhZjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQytqQ0NBZUtnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQVdNUlF3RWdZRFZRUURFd3RVWlhOMAorSUhKdmIzUWdNakFlRncwd01UQXhNREV3TURBd01EQmFGdzB6TURFeU16RXlNelU1TlRsYU1CWXhGREFTQmdOVgorQkFNVEMxUmxjM1FnY205dmRDQXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQorbVRYMnNIWTQyT3JkOWdXeUI2R2NkbExqakUrNHpCSjFCb0RwTW52Sjg5bmlNVHVaVHExVmlNcC9CNlJ1VEgrMgorWUYzK3JpWllRREg5eU0vOHJndkFVSXZLOVNUYXExOVpybTBtbmZRVW85eUtka2ZvSitYdld1dks2ZitOa0FNZworeGZoQUQ2ZVN1cGlnVHZvdi93MklUOHJTMGR4bzRLRjZoS0JMMmFZbFhoaUV5aS9ObXNFUFpXdlZoK3FrM0wvUQorR1N3cGdDK0RoVm9RekZSb2ZVZEs5TzlNa2dSNjc1aWZ0YUZEdnlpN0YwZnhyU0xmQi9XeTRjZ1JZeklXNnB5TgorMnNYV2l2S2RMSTNiZ0IwMWZmZGJPMTdaQUdJTEsxd2hPMjkvYlg2aGJIMDlZL0g3alIydmp5K0tQOU4wUEVhMworN1NCeW1sb2tCM0E4d3EvTFdQWVBlUUlEQVFBQm8xTXdVVEFQQmdOVkhSTUVDREFHQVFFQkFnRUJNQjBHQTFVZAorRGdRV0JCU09CZDFmSDAwWTlyNVM4Y0VMai85SVQ0QkdsREFmQmdOVkhTTUVHREFXZ0JTT0JkMWZIMDBZOXI1UworOGNFTGovOUlUNEJHbERBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUI5bkxhcXhzQlcwaXNEYUJHTkp5ekg5TworV3FZWTBoZXg5dG0zVXF5Z2ZFOWI5YWFoeWtwa293UUl6aDREOVhwYmQwaFpHVmxLL3N3MnFzS2o2Z0RPaU10TAordVdzNGdhRk5XSVFxaFZzVHpMODhjN1hhVzU1bitUUlFkVlp5eTM4RFpWV3BodGUxTXVtYzlXQjhOMTVyWlREaAoraVhqd0dsMG1yVjFlZ3E0aEpaTHB5MTRmNmlocVU3S0dmbWM5b254dmd2V3hZTGkrNXY4ODc0YzRvcGhTS3NJMgorcVZFOGlaNnVxMm9RNjZQZDVTNTBjWWs2TUVXNWxpZkFoTE01V0ZabVc3ZFJLbXlrQkdaOXJGckpySXZoa21oOQorSGU3cTZURVFQMVdjb2MxNDduSWcwQlRrSEd0ZHJFdjNqSVg2VUtLVUV3VVVrOUFSQjFtU29kWlFIQmh1d3c9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2Q2NWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3Mi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQnpDQ0FlK2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBV01SUXdFZ1lEVlFRREV3dFVaWE4wCitJSEp2YjNRZ01qQWVGdzB3TVRBeE1ERXdNREF3TURCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUNZeEpEQWlCZ05WCitCQU1URzFSbGMzUWdhVzUwWlhKdFpXUnBZWFJsSUcxaGVIQmhkR2dnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCCitCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFOcEdsQk1YZG84Y085b3FVdy9iNlBNd2lNTlY4TENlNndCOVZLSFBhNk9HCitRMG84WHFrdGd3bmgxcm9qZ3BNaGJDQXBFN1VYZU1yNlpHcS9OdHFtTzFoTzVhZFY1SmVoV1p5dmc3ajRFQnBHCitnOGlXbzBqTnBLTUowWXgxdUJra2xqRWRaTFRIYTRiSy96eTJOS3FETlMyeVdzOS9NNSt4dzVYRTJlY0FnN0ZUCitjWGhmM3E1MFYrTTZUMklhUTlCeG50VHlDVDhJSUYyZVJNL3Q5WTk0NHM5UmZ6bS9LUVZLUllQdWRYN1loVHQ5CitpcUNKQjRKb3FZaHMzSEVPMHdQa0p4WTRLQlRVQ045NHMrN2pVRmRScll4ZSs4WWE2dElZV3FEMzhpNXFkR2hZCit4clZleTFMYXRzREpRMkVnTllvYk0vTGpvQ0xLMVdVc3NFcWYwT1UyYmkwQ0F3RUFBYU5RTUU0d0RBWURWUjBUCitCQVV3QXdFQkFUQWRCZ05WSFE0RUZnUVVPQmw4ZWRWbS9INXhkUzJFR0VlTHpmdFovRFV3SHdZRFZSMGpCQmd3CitGb0FVamdYZFh4OU5HUGErVXZIQkM0Ly9TRStBUnBRd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGd1pyaVR1CitES2tpREhGZnozVVg0Zkl4WVRIQ2k0VHZlWVpHUGVUYnhoQmIzWFpDNXFERjRUNUh2Q1RTa0c5K29GZlp6STFhCitsUE4yeVpCN1FubUhKb3lXYTVmdW92d1VMMGlJM2lJWk1xVTU2dGRWUFc4Z2tKZSsrVTVrSE1TcHoyVkYwZW84Cis3WGtLV3hab3ZSd2N6Z2ZERlJQOXpNOUN5bHl6UWpxeHg2a2J4Sm96V253YzVVclZiSk1hUElxb25YcDFuRG9aCitpODc4K2hYNHJKVUVqZ082U2E5R1ZaUXBtdUNyUUYwcUtzVGlVQnpaTjY3aG9EM3hvVEFZaTVJWFFFMnRSRDFOCitqM3p3bmc5bGlDc3h1ckdNbnVWMEJQV3YvSURZUnUvc3lqZWUxUXYxVkZlUnRvNUQ0UmxkbWkycDFmNWlXSkNrCis1bTVZcFJza25hSUNqWXM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3My5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3My5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1NGM3NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDczLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGekNDQWYrZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBREFtTVNRd0lnWURWUVFERXh0VVpYTjAKK0lHbHVkR1Z5YldWa2FXRjBaU0J0WVhod1lYUm9JREV3SGhjTk1ERXdNVEF4TURBd01EQXdXaGNOTXpBeE1qTXgKK01qTTFPVFU1V2pBbU1TUXdJZ1lEVlFRREV4dFVaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQnRZWGh3WVhSb0lERXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURhUnBRVEYzYVBIRHZhS2xNUDIranoKK01JakRWZkN3bnVzQWZWU2h6MnVqaGtOS1BGNnBMWU1KNGRhNkk0S1RJV3dnS1JPMUYzaksrbVJxdnpiYXBqdFkKK1R1V25WZVNYb1ZtY3I0TzQrQkFhUm9QSWxxTkl6YVNqQ2RHTWRiZ1pKSll4SFdTMHgydUd5djg4dGpTcWd6VXQKK3NsclBmek9mc2NPVnhObm5BSU94VTNGNFg5NnVkRmZqT2s5aUdrUFFjWjdVOGdrL0NDQmRua1RQN2ZXUGVPTFAKK1VYODV2eWtGU2tXRDduVisySVU3ZllxZ2lRZUNhS21JYk54eER0TUQ1Q2NXT0NnVTFBamZlTFB1NDFCWFVhMk0KK1h2dkdHdXJTR0ZxZzkvSXVhblJvV01hMVhzdFMycmJBeVVOaElEV0tHelB5NDZBaXl0VmxMTEJLbjlEbE5tNHQKK0FnTUJBQUdqVURCT01Bd0dBMVVkRXdRRk1BTUJBUUV3SFFZRFZSME9CQllFRkRnWmZIblZadngrY1hVdGhCaEgKK2k4MzdXZncxTUI4R0ExVWRJd1FZTUJhQUZEZ1pmSG5WWnZ4K2NYVXRoQmhIaTgzN1dmdzFNQTBHQ1NxR1NJYjMKK0RRRUJDd1VBQTRJQkFRRFBRQzl2WUplZ0JnVlpIdTBTdG9SVDdMNlNoV2NaYzVaL1RleXJxSkJkb2lndVNScTUKK2tNaUZYWnBrc3hlRmxJVVlyeTIxTWlnWXF4T1hHWjJHWllOcWhMcFlWaDdoekFZOHVZdmY0VTcwcTg4emo3bXcKK2dJY2dFYU1kNzFHSHFiYjJPNXgzZkNON3ZMZVU1REZZQldmcUxsa0w1N1VxcjJhUkRIbHVjcnl5Uk5vcmRpY04KK1diQ3hQb3ptcXRiTk1BQkVVYmpMTUNDdXpKZU5SU1piUzBPT29kNlhkM04wMEVLN1BxYVJoYmloYnEzTDZnVUcKK01qVUkya2VTeFc0dlhjRGZJNUhxZW02U0hwQ2MzcmV0eDJWVWd3SURBb1RydzdFNGR3bXlDNFRwN1RESkwvK2QKK0dVOHFoUm1vUWVyN21MVXpwYjNzOG1xLzRyWngrYWxUUTNndQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0NzQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGM0YzIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ3NC5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQ2pDQ0FmS2dBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBbU1TUXdJZ1lEVlFRREV4dFVaWE4wCitJR2x1ZEdWeWJXVmthV0YwWlNCdFlYaHdZWFJvSURFd0hoY05NREV3TVRBeE1EQXdNREF3V2hjTk16QXhNak14CitNak0xT1RVNVdqQWNNUm93R0FZRFZRUURFeEZVWlhOMElFeGxZV1lnZG1Gc2FXUWdNekNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUlvQm9CeGpWalpCRmxoWiszbWxPSkF0bG8wZDBiWEFiS0Z0CitUSlVKM1ZMOEZsQjRIRzN5SU81NGV1am91bDVkeUtnREl4NDlTZEJEeG5NRTM1aTNXa2J6ZC9DbzB6SWQveFloCithNjFDOUREWUloc1k1RTdZVm9MSDFlQXY0dDcwUTB3bHZ0bERCWFhldnMrNGNCWC9wWFU3QWovVUtmdmR4bmE3CitKYTd3RWRsdEtveHkxQ3dDUnBQK2xzOFJSdXNYZ29IWVpLS0F6NmE3SDVXU2YzRGRVcnFrMkRtbFRBSS9TV3FMCiswclZFMVlSZktMZzFDNmF0SDRnU0pxSlhUbTNCbldnRnBZRVpkSlBEWGFFaTZWbmYrL29ZdUxCK1Qwam1hdnZJCitOWlVOM0lLeE83V3VGOTZmNHVuZ0tYSjlZY2hKRTh2V2FTamhiMlY1ek9BOVkvUGlraWtDQXdFQUFhTk5NRXN3CitDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVd2pkcnd5Mk5iWEhwMDg4a1pwVXVFd1h0c1lvd0h3WURWUjBqCitCQmd3Rm9BVU9CbDhlZFZtL0g1eGRTMkVHRWVMemZ0Wi9EVXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSzlSCitKN0g4ZXBHMk5hZ1ozR3BsNlIxalNpSWl4V2xQSmNpMkJ6MU5yOE5JRVI2NFRKQ0tIZWg5a3U2dHpTZHJWTDNCCisycmo1R21wdWJEWEVXQUtmTXR0MGNjRjJVSXZhOXJETU56YUFuQ1NldldIWGY5SHR0cjg0WDZSbWh0WGI5L1JtCitmcDNXK0wwR2xEZkhmSG44dW9WZFFlNWU2eGttR3h0Y0hEVXN5Ty9DSk1rcndVeW9COHpzN1V0bE50T2Y0NUg0CitQUGcwOWx6VjdSUTl2RklINDhGLzRnWlcrdzNBcU45Wnd2WWtHY0pVWTh0eUhwYjloRHJSNEY2bG9WSW5ybENFCiswcFFpUVhOQ2RlZTF6YTlRc1NjU2pZTnhHZlIyRGt6b3RlNDFIMDk4anZMYWxMVFRnNUZxeC9BeWxuWDI4NUZJCitFVEdPdW1OUTUxSUpMVXBxK2hjPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjJiZDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ4MS5jcnQKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCcFRDQ0FVbWdBd0lCQWdJQlVUQU1CZ2dxaGtqT1BRUURBZ1VBTURFeER6QU5CZ05WQkFNVEJsSnZiM1FnCitPREVSTUE4R0ExVUVDaE1JYldKbFpDQlVURk14Q3pBSkJnTlZCQVlUQWxWTE1CNFhEVEF4TURFd01UQXdNREF3CitNRm9YRFRNd01USXpNVEl6TlRrMU9Wb3dNVEVQTUEwR0ExVUVBeE1HVW05dmRDQTRNUkV3RHdZRFZRUUtFd2h0CitZbVZrSUZSTVV6RUxNQWtHQTFVRUJoTUNWVXN3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVQxCitHdVRROXZnZjJsM29MTTI1cjc4Y3ZJQVFxRTAyR3pRR2pwL1dXdzNDeXNFd1R3TkV1WkdoUmlENWxEbWtiVUdXCitVTnh2Lzd1Smp5N2szSzNmRE5ka28xQXdUakFNQmdOVkhSTUVCVEFEQVFIL01CMEdBMVVkRGdRV0JCVEhGQTJoCitBdTB0UG56ZVluTGNtbFRRajRGQWFqQWZCZ05WSFNNRUdEQVdnQlRIRkEyaEF1MHRQbnplWW5MY21sVFFqNEZBCithakFNQmdncWhrak9QUVFEQWdVQUEwZ0FNRVVDSUg3Wi9ITmIvUHdiczQwaU5sbDFhOWdtZ0FiWU9nZGxWUFdvCituU2RjYjdjWkFpRUFsaFZiNkNkQlhzak9mQVdXRUVUL1FQNzR6NjA4UEtGY2NDSUZQQ0RMa3hvPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWVjYzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ4Mi5jcnQKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCcURDQ0FVeWdBd0lCQWdJQlVqQU1CZ2dxaGtqT1BRUURBZ1VBTURFeER6QU5CZ05WQkFNVEJsSnZiM1FnCitPREVSTUE4R0ExVUVDaE1JYldKbFpDQlVURk14Q3pBSkJnTlZCQVlUQWxWTE1CNFhEVEF4TURFd01UQXdNREF3CitNRm9YRFRNd01USXpNVEl6TlRrMU9Wb3dNVEVQTUEwR0ExVUVBeE1HU1c1MElEZ3lNUkV3RHdZRFZRUUtFd2h0CitZbVZrSUZSTVV6RUxNQWtHQTFVRUJoTUNWVXN3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVMyCitnaVlRdDRIVmZRMnQ4ZVRTMGJ2SVN3cDdvbDJ4MTd1bWJsbEJ4d3pHREZFVVEwMEpMMS9TU3RlemVjSzBsTmhFCiswQXZZOEV6MnNvUUV0ZFNlUUdrQ28xTXdVVEFQQmdOVkhSTUVDREFHQVFIL0FnRUFNQjBHQTFVZERnUVdCQlMzCisrbnN2M25Ra25TZzRhRGpsVGlScENQbzdYekFmQmdOVkhTTUVHREFXZ0JUSEZBMmhBdTB0UG56ZVluTGNtbFRRCitqNEZBYWpBTUJnZ3Foa2pPUFFRREFnVUFBMGdBTUVVQ0lRRHVzMkx2eDN5eXZhVmlZMXMzMzR1TW02Z2U0ODRYCitva3RNeXhMVmprQU1pQUlnZWhUSGlKSmFUOVBubFZhK2hVcHhzSWZWQXVNZXhybTVmdy9iREY1Tnh6dz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDgzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE3NDhlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0ODMuY3J0CkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQm9EQ0NBVVdnQXdJQkFnSUJVekFNQmdncWhrak9QUVFEQWdVQU1ERXhEekFOQmdOVkJBTVRCa2x1ZENBNAorTWpFUk1BOEdBMVVFQ2hNSWJXSmxaQ0JVVEZNeEN6QUpCZ05WQkFZVEFsVkxNQjRYRFRBeE1ERXdNVEF3TURBdworTUZvWERUTXdNVEl6TVRJek5UazFPVm93TURFT01Bd0dBMVVFQXhNRlJVVWdPRE14RVRBUEJnTlZCQW9UQ0cxaQorWldRZ1ZFeFRNUXN3Q1FZRFZRUUdFd0pWU3pCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQk1TeQorNlg1aUJZcmR4eE9NZmRjQTIzcExCb0pDZXlFamlXZkFMeFRtODBNSkdCZFJOVmRuVDUweE5VM1NERHdIV1BkYQorL0VRcUhxK2l0c3FrVWV5QUdBeWpUVEJMTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZHc0ZIL0tzdk00bgorcitpMWdJMmlDVlhpM0t0Rk1COEdBMVVkSXdRWU1CYUFGTGY2ZXkvZWRDU2RLRGhvT09WT0pHa0kranRmTUF3RworQ0NxR1NNNDlCQU1DQlFBRFJ3QXdSQUlnUVVSSDhESFdGSFZLMzgrem5XYzg1RzFQK2c0b2Nka0E1R3QwTGJPZworU0pNQ0lCc2FjT0xGeXd4WllGOGF0aXp3NnpNUncrUWVIUjI1MTRKSWhKVWNrMmtkCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ5MS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ5MS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NjA1YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2RpcjQvY2VydDkxLmNydApAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUJxVENDQVV5Z0F3SUJBZ0lCV3pBTUJnZ3Foa2pPUFFRREFnVUFNREV4RHpBTkJnTlZCQU1UQmxKdmIzUWcKK09URVJNQThHQTFVRUNoTUliV0psWkNCVVRGTXhDekFKQmdOVkJBWVRBbFZMTUI0WERUQXhNREV3TVRBd01EQXcKK01Gb1hEVE13TVRJek1USXpOVGsxT1Zvd01URVBNQTBHQTFVRUF4TUdVbTl2ZENBNU1SRXdEd1lEVlFRS0V3aHQKK1ltVmtJRlJNVXpFTE1Ba0dBMVVFQmhNQ1ZVc3dXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBVGgKK0QyU21kUzZEN2NZaTJ2R015dUNkb2wvT09VTjJkaTJwUzJ3ZlNJL01zWS9aNE85aU5IcWJYUVA2bCtoY1Q1YXAKK2RheWNzN3I2WlBOcW1XTTdiMTZnbzFNd1VUQVBCZ05WSFJNRUNEQUdBUUgvQWdFQU1CMEdBMVVkRGdRV0JCUmIKK3pWcmNBeGRkajBpMERFcXZUR1Q4RjM3Yml6QWZCZ05WSFNNRUdEQVdnQlJielZyY0F4ZGRqMGkwREVxdlRHVDgKK0YzN2JpekFNQmdncWhrak9QUVFEQWdVQUEwa0FNRVlDSVFEYnJTVjRuZEgwdkFSM0hxSmZCbjhOVDh6ZHZNakIKK3FTSmVzNlF3YTQyYjJ3SWhBS3lvSDBIK2IxU3Z3OHBNa3ZVWUY0RWxINUNubjdneGI3V2wzYXJjMCtoUQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0OTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZGlyNC9jZXJ0OTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjUzYTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9kaXI0L2NlcnQ5Mi5jcnQKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCb1RDQ0FVV2dBd0lCQWdJQlhEQU1CZ2dxaGtqT1BRUURBZ1VBTURFeER6QU5CZ05WQkFNVEJsSnZiM1FnCitPVEVSTUE4R0ExVUVDaE1JYldKbFpDQlVURk14Q3pBSkJnTlZCQVlUQWxWTE1CNFhEVEF4TURFd01UQXdNREF3CitNRm9YRFRNd01USXpNVEl6TlRrMU9Wb3dNREVPTUF3R0ExVUVBeE1GUlVVZ09USXhFVEFQQmdOVkJBb1RDRzFpCitaV1FnVkV4VE1Rc3dDUVlEVlFRR0V3SlZTekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCQzlFCit0SzFwRThFaTh2Z1NjdW55ang1MEMrcURzUVM4RDJSaEdIQzRWa0UyeXlpRnhKQS95bmhvZVhUS1pzSHVFV0k5CitDZk9TdmswUnJUV2Y5bnIwcFRHalRUQkxNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRkxxc041MnRBZjFrCitYbHp4UW1kRDVxRzZTeTZQTUI4R0ExVWRJd1FZTUJhQUZGdk5XdHdERjEyUFNMUU1TcTlNWlB3WGZ0dUxNQXdHCitDQ3FHU000OUJBTUNCUUFEU0FBd1JRSWdYbGZLcWhraFhnSzExMkV5Y2wrWjVOSE0rNmFxWEU3aTlqN0l5R2ZrCitpa0lDSVFEQllOR2JwU3g4MlhHK0lTL2g0QVdOVGE0SHM2cm1XdlFEV0p1bTdOcnpNUT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18yMjRfcHJ2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzIyNF9wcnYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYjgzYTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18yMjRfcHJ2LnBlbQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUdnQ0FRRUVIR2hKK1gwUVp2YVpkMWxqZkg0NG1VWk03ajdIckpjR1U2QytCMEtnQndZRks0RUVBQ0doUEFNNgorQUFRV2s2S1E5L0MxY2Y0clFkWFlTd0V5ZGpIMHFHRDVsZm96TEFsL1ZCa3JzUThBRVQ4cS83RThHaVRPUkpGRgorY2FsVVFLNEJTZ0RMOXc9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjI0X3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18yMjRfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmRhNTRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjI0X3B1Yi5wZW0KQEAgLTAsMCArMSw0IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUU0d0VBWUhLb1pJemowQ0FRWUZLNEVFQUNFRE9nQUVGcE9pa1Bmd3RYSCtLMEhWMkVzQk1uWXg5S2hnK1pYNgorTXl3SmYxUVpLN0VQQUJFL0t2K3hQQm9remtTUlJYR3BWRUN1QVVvQXkvYz0KKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjU2X3Bydi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18yNTZfcHJ2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJkZDRhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjU2X3Bydi5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01IY0NBUUVFSUVuSnFNR01TNGhXT01ReHp4M3h5WlFURmdtMWdOVDlRNkRLc1gyeThUN3VvQW9HQ0NxR1NNNDkKK0F3RUhvVVFEUWdBRWQzSmxiNEZMT1pKNTFlSHhlQitzYndtYVBGeWhzT05UVVlOTENMWmVDMWNsa00ydmozYVQKK1lienpTcy9CSGw0SFRvUW12ZDRFdm01bE9VVkVsaGZlUlE9PQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjU2X3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18yNTZfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDFkYTAyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMjU2X3B1Yi5wZW0KQEAgLTAsMCArMSw0IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZDNKbGI0RkxPWko1MWVIeGVCK3Nid21hUEZ5aAorc09OVFVZTkxDTFplQzFjbGtNMnZqM2FUWWJ6elNzL0JIbDRIVG9RbXZkNEV2bTVsT1VWRWxoZmVSUT09CistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzM4NF9wcnYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMzg0X3Bydi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MDc1OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzM4NF9wcnYucGVtCkBAIC0wLDAgKzEsNiBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSUdrQWdFQkJEQS9YWTJiNG9DMWFXekZ6SitVejRyMzVyWWQxbGtyS3JLenBNWUhSUVFYN0RKOXpjcnRmQkFGCitQWEdhQlhUd3AycWdCd1lGSzRFRUFDS2haQU5pQUFUWnhtSzFDNktjcEhtUVJRNEVPdXIwOE1hYkZXZHRFUzlpCitLbkhKTUZtdm1aYVJ4V2dOSzBUUkVWZWRzUzlLUVRvdTFjUmZ6N1o3VzJQZ0M1SHI1WjBKcHJHc0xBeENncW9TCitNWDdWa1UrWm04U0l1eE11ZzBMTU52TEtYak41eDBjPQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMzg0X3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY18zODRfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTk1MzgyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfMzg0X3B1Yi5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUUyY1ppdFF1aW5LUjVrRVVPQkRycTlQREdteFZuYlJFdgorWWlweHlUQlpyNW1Xa2NWb0RTdEUwUkZYbmJFdlNrRTZMdFhFWDgrMmUxdGo0QXVSNitXZENhYXhyQ3dNUW9LcQorRWpGKzFaRlBtWnZFaUxzVExvTkN6RGJ5eWw0emVjZEgKKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfNTIxX3Bydi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY181MjFfcHJ2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDRiYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfNTIxX3Bydi5wZW0KQEAgLTAsMCArMSw3IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01JSGNBZ0VCQkVJQnNiYXRCN3Q1NXpJTnBaaGc2aWpnVlNoUFlGanllZDVtYmdiVU5kS3ZlOW9vMlora2UzM1EKK2xqNFdzQWN3ZU82TGlqalpacVdDOUcwWi81WGZPdGxvV3E2Z0J3WUZLNEVFQUNPaGdZa0RnWVlBQkFBZDRVTFYKK1QybnJBNDdrdDYrZFBLQjNOdjJjOXhuck5VMXBoNTduODhFMit3Ky9ud2o0YStYNkVvN0JvRkhUNXNaRDZGcmEKK2ovclBObVBDWUwwc2hFdHZWZ0RPNk9TS25tWFFuSzNZbnlOZDdnWHp1S1pHdm5GZkgyZlZ0RFRnL3lPaC9BZnYKK2QwQVpQa0R1LzI4N3pmMTJXcWtWVUROU1QrVHlCZlZFVGlrc1RDOXF3UT09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY181MjFfcHViLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjXzUyMV9wdWIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmM1YzUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY181MjFfcHViLnBlbQpAQCAtMCwwICsxLDYgQEAKKy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCitNSUdiTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFqQTRHR0FBUUFIZUZDMVU5cDZ3T081TGV2blR5Z2R6YjluUGNaCis2elZOYVllZTUvUEJOdnNQdjU4SStHdmwraEtPd2FCUjArYkdRK2hhMm8vNnp6Wmp3bUM5TElSTGIxWUF6dWprCitpcDVsMEp5dDJKOGpYZTRGODdpbVJyNXhYeDluMWJRMDRQOGpvZndINzNkQUdUNUE3djl2TzgzOWRscXBGVkF6CitVay9rOGdYMVJFNHBMRXd2YXNFPQorLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDI1Nl9wcnYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAyNTZfcHJ2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZhODY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAyNTZfcHJ2LnBlbQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhnQ0FRRUVJQ0ZoMXZMYmRsSnZwaXdXODFhb0R3SHpMM2RuaExOcXFaZVpxTGRtSUlEL29Bc0dDU3NrQXdNQworQ0FFQkI2RkVBMElBQkhhTWpLNUt2S1l3YmJEdGdiREVwaUZjTjRCbTdHMWhiQlJ1RS9ISDM0Q2JscXRwRWNKOQoraWdJem53a21oQTVWSTIwOUh2dmlacDBKRGt4TVpnK3RxUjA9CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDI1Nl9wdWIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAyNTZfcHViLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzM4NjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAyNTZfcHViLnBlbQpAQCAtMCwwICsxLDQgQEAKKy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCitNRm93RkFZSEtvWkl6ajBDQVFZSkt5UURBd0lJQVFFSEEwSUFCSGFNaks1S3ZLWXdiYkR0Z2JERXBpRmNONEJtCis3RzFoYkJSdUUvSEgzNENibHF0cEVjSjlpZ0l6bndrbWhBNVZJMjA5SHZ2aVpwMEpEa3hNWmcrdHFSMD0KKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAzODRfcHJ2LnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMzg0X3Bydi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlODJkYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMzg0X3Bydi5wZW0KQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01JR29BZ0VCQkRBOTJTNTFEWkRYMDUvQmlGellyUkxxbEVIeUs1TTB0TmxsSUNyYkZFak9KTVdBaW9YZG12d2kKK212Q2pFazkxVzh1Z0N3WUpLeVFEQXdJSUFRRUxvV1FEWWdBRWNaK2RDVHBpZmcwMUE0WEdZYzYvQU1ZWkkxWnYKKzZRQnFNUWV2SFljYnhydG9tRi9YSXVveXZqRnZqbmc3Zk5HVmQ0WDJiUHdNc1pYZFhKbW81NnVxaElWVHBZVGYKKzByU09kdFJGL2dEZGkrV1FsdGgzMUdsdEk3UzhqYkZISk9acQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnAzODRfcHViLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMzg0X3B1Yi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyMDJlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwMzg0X3B1Yi5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUhvd0ZBWUhLb1pJemowQ0FRWUpLeVFEQXdJSUFRRUxBMklBQkhHZm5RazZZbjROTlFPRnhtSE92d0RHR1NOVworYitrQWFqRUhyeDJIRzhhN2FKaGYxeUxxTXI0eGI0NTRPM3pSbFhlRjltejhETEdWM1Z5WnFPZXJxb1NGVTZXRQorMzlLMGpuYlVSZjRBM1l2bGtKYllkOVJwYlNPMHZJMnhSeVRtYWc9PQorLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19icDUxMl9wcnYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnA1MTJfcHJ2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBjNjIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnA1MTJfcHJ2LnBlbQpAQCAtMCwwICsxLDcgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUlIYUFnRUJCRUEzTEpkNDlwOXliTHlqOUtKbzhXdE5ZWDBRS0ExNXBxQXB6VkdIbitFQktUVGY1VGxVVlROOQorOXBCdHg5YlM3cVRic2daY0FpajNPejdYRmtnT2ZYSFNvQXNHQ1Nza0F3TUNDQUVCRGFHQmhRT0JnZ0FFT0xmcwora3JZY1hHeC92Q2lrN0hXZFNQelU0dU4wM3YxY1NXaWxUYjczVVE1UmVJYjcvRGpxT2FwU2sxblhDbkZXdzEwOAordXNmT2QydmJKUjNXUzg1eEkwUWs3bkJKN3RCeThOdkUxNW1XNFhYVlYrSmpkanJwY0pYQWdlYytmYkxqaXR3OQorVEpvRWg3SHQ2SGJjSDhwaHlRTHBvZGh5SzRZU2tvOFlva2hGV1JvPQorLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfYnA1MTJfcHViLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwNTEyX3B1Yi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZDA3MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX2JwNTEyX3B1Yi5wZW0KQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLQorTUlHYk1CUUdCeXFHU000OUFnRUdDU3NrQXdNQ0NBRUJEUU9CZ2dBRU9MZnNrclljWEd4L3ZDaWs3SFdkU1B6VQorNHVOMDN2MWNTV2lsVGI3M1VRNVJlSWI3L0RqcU9hcFNrMW5YQ25GV3cxMDh1c2ZPZDJ2YkpSM1dTODV4STBRaworN25CSjd0Qnk4TnZFMTVtVzRYWFZWK0pqZGpycGNKWEFnZWMrZmJMaml0dzlUSm9FaDdIdDZIYmNIOHBoeVFMcAorb2RoeUs0WVNrbzhZb2toRldSbz0KKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2Lm5vb3B0LmRlciBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5ub29wdC5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlMTZhMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5ub29wdC5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYucGs4LmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmJkMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYucGs4LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmVhYjdjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wZW0KQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01HOENBUUF3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFFRVZUQlRBZ0VCQkJnempvYW9nZUk0OVVtOWJ3VlQKK1NVdHo0OVlSTVAzR3lXMmhOQU15QUFSUmRiemZNS053ODUxVGsrWVNjb2pZQVdlMTlMUzNkc1owOThielZMZlMKK0pBWXNIMmhVdGFldkQrVjQ2dkpZOENjPQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYucGs4LnB3LmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYucGs4LnB3LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDEzZDFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5wZW0KQEAgLTAsMCArMSw2IEBACistLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCitNSUdSTUJ3R0NpcUdTSWIzRFFFTUFRRXdEZ1FJSXJsbUNDU3BKemNDQWdnQUJIR20yTHlKNjBvamZpbFJScDhoCitYZitzV0wzbEpxNndsajROazQxU0hWbloyUmlWdFA1TlZLOTA4L1d4blhrcmlkZDZRcGpucS8xNHdvV1ZtUXhUCitJemhLRlZpMjJZbVF5QnNOaitiRUdEQUU0YzlxYWJ5OHU2emJ6czdRajI5RjkwZi9QaVlzYUlFR2NObi9XODhlCitYYXJORHc9PQorLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLmRlciBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTMzNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnNlYzEuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE3OTkwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnNlYzEucGVtCkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNRjhDQVFFRUdET09ocWlCNGpqMVNiMXZCVk5KUzNQajFoRXcvY2JKYmFBS0JnZ3Foa2pPUFFNQkFhRTBBeklBCitCRkYxdk44d28zRHpuVk9UNWhKeWlOZ0JaN1gwdExkMnhuVDN4dk5VdDlJa0Jpd2ZhRlMxcDY4UDVYanE4bGp3CitKdz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wdy5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wdy5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhMDg2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLnB3LnBlbQpAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRAorREVLLUluZm86IERFUy1DQkMsQUE5NDg5MkExNjlGQTQyNgorCitnU2tGdVVFTk5rZTVNdmtXSGMxMS93MU5RV0J4YUl4R1QrZDVvUmNxczQ0RDN0bHRWT3d0ZG5ZZXhvRDl1U0lMCit3TUZGUkxMNkk1aWkxTmFhMzhuUE9NYWE3a0xVMkozalk4U2VJSDFyUTQzWDZ0bHB2OVdGR3FEbi9tNlg3b0tvCitSTU1mR2RpY1BaZz0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zcGVjZG9tLmRlciBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3Bydi5zcGVjZG9tLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODBhMmUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZWNfcHJ2LnNwZWNkb20uZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3B1Yi5kZXIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wdWIuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wdWIuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VjX3B1Yi5wZW0gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wdWIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NzdkMjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lY19wdWIucGVtCkBAIC0wLDAgKzEsNCBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01Fa3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUUVETWdBRXZIbDlzNjUvQ093OVNXdFB0Qkd6OWlDbFdLVUIKKzRDSXRDTS9nM0lyc2l4cDc4a3ZwS1ZITVc2Ryt1eVIwa0pyZworLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lbmNvLWNhLXByc3RyLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VuY28tY2EtcHJzdHIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MDMzMTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9lbmNvLWNhLXByc3RyLnBlbQpAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNEVENDQVhhZ0F3SUJBZ0lFVFp0OGx6QU5CZ2txaGtpRzl3MEJBUVVGQURCQ01VQXdQZ1lEVlFRREV6ZFAKK2NHVnVWbEJPSUZkbFlpQkRRU0F5TURFeExqQTBMakExSURJd09qTXpPakkzSUZWVVF5QmhjMlJsYlc4dWVXOXUKK1lXNHVibVYwTUI0WERURXhNRE15T1RJd016TXlOMW9YRFRJeE1EUXdNakl3TXpNeU4xb3dRakZBTUQ0R0ExVUUKK0F4TTNUM0JsYmxaUVRpQlhaV0lnUTBFZ01qQXhNUzR3TkM0d05TQXlNRG96TXpveU55QlZWRU1nWVhOa1pXMXYKK0xubHZibUZ1TG01bGREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEzOFUzd0EvZVRHTi8KKy9BSkhvMk9zRUhqTGRPOWszTW81UWNTaHZnKzZJb0FUaEQ3SEV5T1ltNElsZDhzNCtlRXkyaTllY1d2TUtHNk0KK1lTTytHd0c5eE9kOXdERnRPRHBGK3o2ckl0OGE0YkxiUUhjc3A5Q2N1K1ptanhrSmtteE9Dejc3NGx4RVRBclgKK1Nha3NBQjVQNldlYi9Md0tVdi9JeTljclJNOUh6U0VDQXdFQUFhTVFNQTR3REFZRFZSMFRCQVV3QXdFQi96QU4KK0Jna3Foa2lHOXcwQkFRVUZBQU9CZ1FBUkNERllDYjluMTUxaGd3aXR4emJ1YWNJVkRxSUg4RW91VjJWQnFsTlIKK3RqOHExbWFsaURFM3BXN1dSQXdNaTVpMys1YzBhdUt3aFRHRVNzQlBqYXNkNVFuanFYT2tSYmNaaGtlVlExbG4KKzZORW42eEMrTStIMkxHVkhTU3JvcGNHYThvbExsbzk4THJzRnVIVkhNZXdUczdTSzJsYys3clUvSUxlYzN5bWoKK29nPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VuY28tY2VydC11dGY4c3RyLnBlbSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2VuY28tY2VydC11dGY4c3RyLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDYxM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZW5jby1jZXJ0LXV0ZjhzdHIucGVtCkBAIC0wLDAgKzEsMTMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQjhqQ0NBVnVnQXdJQkFnSUVUWnQ4K3pBTkJna3Foa2lHOXcwQkFRVUZBREJDTVVBd1BnWURWUVFERERkUAorY0dWdVZsQk9JRmRsWWlCRFFTQXlNREV4TGpBMExqQTFJREl3T2pNek9qSTNJRlZVUXlCaGMyUmxiVzh1ZVc5dQorWVc0dWJtVjBNQjRYRFRFME1EY3lPVEF6TlRNek0xb1hEVEkwTURnd01qQXpOVE16TTFvd0Z6RVZNQk1HQTFVRQorQXd3TVpIY3VlVzl1WVc0dWJtVjBNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURIWVc4cQorWlovSElJbFU4ai9ZSXlUaDNoNTlKY0pGMEVzN1JzUGcyNVFWSmtEa2ZoTW42bDE1ZjJuZUIyS1BMS3hDTHBMRAorb3pZRDRzL0lmOGFxNzRBMUMydnZPTG8vR3ExZXJOUzRiOUlTNXhMczNMdTY0M1hHeFM5M1JmNmpyc0dhOGxmYgorV2E3RHNRcnA3RkxUNUdBcHdDcDZDZWJtWnE3akVJbWowcERGUndJREFRQUJveUF3SGpBSkJnTlZIUk1FQWpBQQorTUJFR0NXQ0dTQUdHK0VJQkFRUUVBd0lHUURBTkJna3Foa2lHOXcwQkFRVUZBQU9CZ1FBUzFVbG83aUJBQnBtLworUzIzbUNuSUZSWTErZUZmWWc0aDhFaUs5ZjhrV0R3ZHVYU1lHVlVxUkhxaDRMY05TZFRPSWFTRUc0Ukd5Vi9FQQorNVJmVHZpYVE5UHhQaVNGZWdOamE4L2FIZWwvbk9SZnNFazRyd0JDUEdLRHZlTDVLWWhBdHlBczg2NVp6THR2Kwora0VrZmhhVGdyQklpa3dsbnF1b1g1VUhPZEwvaWF3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9nZW4ua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X2dlbi5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0NzIzMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9nZW4ua2V5CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RRSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbDh3Z2dKYkFnRUFBb0dCQU1EUlN6T05FU1g0bVNWVAorSjY5bzN4OXZRYW5YY1BOdmlsamN3S2drclhrRmFoNmhRVUFoVys0alFMeHRHYitMVTQ3Z0UzMjFKR3RHTmI1TAorejFodGpMVUx2YzlTQXBsSjZPT2NRVURoeUZ4STRvNkZtVXpvcnY0OXl0ekg2eDJJTzdVT0Y0NE15SklXR2pHMworNGZvaFM4RVFhUWprQllXN2t3TS92Q1ZUOEJsOUFnTUJBQUVDZ1lCVHFqMGNTRWk1bGk0MWtPaDJaMlh4aU9BUQorSjBoK2lOYWFDbWVhVGhmcm5GcllvWlhqa3RZRjljd0FOc0xtWnpsQmxKOUFlNW9xNWhNcDJGRkhDSG4xejFVLworQmlFM3lGMkFYTnNsTDBwOGxNTzRxR3htdDJpWWRFM1o4Y29tZmt5dHRVSjVrOXRoTFF6VS9OV0FUUDhFWkduZworaVRkRURGT1czNWNHMjZjY0RRSkJBUFBvYWl2ZUFWTjBKWXhlMnRZUjh4YjVxdGE4OVFHVTZIRGRUUmlDbGFwMQorNXJmcGg1ZDMwTVFnZ3FmMXRCVGlEUktPU2s3dU4zOXh3R2JNenoxMStOY0NRUURLWUhYV0FzTjNRbG1GUUtUWAorbm00RzV4cGw1N1A5VTI1d1NDK05ZT21GRWllb21EN1lsYmFCS0JjMFY1Sk5qMklxVXQwRXZYTmgzTEE1Y3pkOQorM3BITEFrQWlvVmdadkY2aDA3YlZGRTZyNEVhTWQ0eGJDdDhhaDJMdFMyNTcwV2FnbWpiVTIvSmxmaHlGRER5ZworemxEd09od3pDMExmckJEekpscHovaFphbXBwbkFrQnN3aklSZFNLK3NMV1RXdzQ3b2pUWEdOT2krRVpPV2N2OAorSTQ4S2w0NW5xVDRPNk9LOVdwZmVDVUdQSzVEQWhkSG5sT2lhWjRYZWpjOVcwSWg5NkdMSkFrQk96SkU4blVVNQorZ2lVakxBeEpvWWVwS2xXaDV0WnNORG9HRmc0NitiSG45bDFPNmZYN3RhdTArakV6NHRDNmFBOFIzSHRVT3JZdgoraEo2MWdIOHgzVTVKCistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfZ2VuLnB1YiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2Zvcm1hdF9nZW4ucHViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTdhYjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfZ2VuLnB1YgpAQCAtMCwwICsxLDYgQEAKKy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCitNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURBMFVzempSRWwrSmtsVXlldmFOOGZiMEdwCisxM0R6YjRwWTNNQ29KSzE1QldvZW9VRkFJVnZ1STBDOGJSbS9pMU9PNEJOOXRTUnJSalcrUzg5WWJZeTFDNzNQCitVZ0taU2Vqam5FRkE0Y2hjU09LT2habE02SzcrUGNyY3grc2RpRHUxRGhlT0RNaVNGaG94dCtINklVdkJFR2tJCis1QVdGdTVNRFA3d2xVL0FaZlFJREFRQUIKKy0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X3BrY3MxMi5mbXQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfcGtjczEyLmZtdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZkNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X3BrY3MxMi5mbXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X3JzYS5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9mb3JtYXRfcnNhLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzhjYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvZm9ybWF0X3JzYS5rZXkKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1d3SUJBQUtCZ1FEQTBVc3pqUkVsK0prbFV5ZXZhTjhmYjBHcDEzRHpiNHBZM01Db0pLMTVCV29lb1VGQQorSVZ2dUkwQzhiUm0vaTFPTzRCTjl0U1JyUmpXK1M4OVliWXkxQzczUFVnS1pTZWpqbkVGQTRjaGNTT0tPaFpsTQorNks3K1BjcmN4K3NkaUR1MURoZU9ETWlTRmhveHQrSDZJVXZCRUdrSTVBV0Z1NU1EUDd3bFUvQVpmUUlEQVFBQgorQW9HQVU2bzlIRWhJdVpZdU5aRG9kbWRsOFlqZ0VDZElmb2pXbWdwbm1rNFg2NXhhMktHVjQ1TFdCZlhNQURiQworNW1jNVFaU2ZRSHVhS3VZVEtkaFJSd2g1OWM5VlB3WWhOOGhkZ0Z6YkpTOUtmSlREdUtoc1pyZG9tSFJOMmZISworSm41TXJiVkNlWlBiWVMwTTFQelZnRXovQkdScDRJazNSQXhUbHQrWEJ0dW5IQTBDUVFEejZHb3IzZ0ZUZENXTQorWHRyV0VmTVcrYXJXdlBVQmxPaHczVTBZZ3BXcWRlYTM2WWVYZDlERUlJS245YlFVNGcwU2prcE83amQvY2NCbQorek04OWRmalhBa0VBeW1CMTFnTERkMEpaaFVDazE1NXVCdWNhWmVlei9WTnVjRWd2aldEcGhSSW5xSmcrMkpXMgorZ1NnWE5GZVNUWTlpS2xMZEJMMXpZZHl3T1hNM2ZkNlJ5d0pBSXFGWUdieGVvZE8yMVJST3ErQkdqSGVNV3dyZgorR29kaTdVdHVlOUZtb0pvMjFOdnlaWDRjaFF3OG9NNVE4RG9jTXd0QzM2d1E4eVphYy80V1dwcWFad0pBYk1JeQorRVhVaXZyQzFrMXNPTzZJMDF4alRvdmhHVGxuTC9DT1BDcGVPWjZrK0R1aml2VnFYM2dsQmp5dVF3SVhSNTVUbworbW1lRjNvM1BWdENJZmVoaXlRSkFUc3lSUEoxRk9ZSWxJeXdNU2FHSHFTcFZvZWJXYkRRNkJoWU9Pdm14NS9aZAorVHVuMSs3V3J0UG94TStMUXVtZ1BFZHg3VkRxMkw0U2V0WUIvTWQxT1NRPT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2hhc2hfZmlsZV8xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MWZhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2hhc2hfZmlsZV8yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDRlYWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2hhc2hfZmlsZV8zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YmIwYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2hhc2hfZmlsZV80Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzUgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9oYXNoX2ZpbGVfNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFmYmYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvaGFzaF9maWxlXzUKQEAgLTAsMCArMSBAQAorYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleVVzYWdlLmRlY2lwaGVyT25seS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlVc2FnZS5kZWNpcGhlck9ubHkuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzc5NzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlVc2FnZS5kZWNpcGhlck9ubHkuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0Z6Q0NBWUNnQXdJQkFnSUpBSnNUemt5bGI5NVNNQTBHQ1NxR1NJYjNEUUVCQlFVQU1EOHhDekFKQmdOVgorQkFZVEFrZENNUkl3RUFZRFZRUUhEQWxEWVcxaWNtbGtaMlV4SERBYUJnTlZCQW9NRTBSbFptRjFiSFFnUTI5dAorY0dGdWVTQk1kR1F3SGhjTk1UVXdOVEV5TVRBek5qVTFXaGNOTVRnd05URXhNVEF6TmpVMVdqQS9NUXN3Q1FZRAorVlFRR0V3SkhRakVTTUJBR0ExVUVCd3dKUTJGdFluSnBaR2RsTVJ3d0dnWURWUVFLREJORVpXWmhkV3gwSUVOdgorYlhCaGJua2dUSFJrTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDOW54WU9TYmhhL0FwNAorNnJBQ3JPTUg3emZERCswWkVIaGJPMGJnR1JqYzVFbHZPYU51RDMyMXk5VG55QXgrSnJxUHAvbEZyQWdOaVZvMQorSFB1clBIZmNKK3ROQlVnQkhib1dHTkVOTmFmOW92d0ZQYXdzQnpFWnJhR25EYXFWUEVGY0lzVVFQVnFPMWxyUQorQ0hMVWp0cW8xaE1aRHFlL1dlYjBNdzljWnJxT2FRSURBUUFCb3hzd0dUQUpCZ05WSFJNRUFqQUFNQXdHQTFVZAorRHdRRkF3TUg0SUF3RFFZSktvWklodmNOQVFFRkJRQURnWUVBSjBOUzJ3VWJnUmVsSzBxS3hyUjJUczZqVllFSAorYm15a3gzR0hqRnlLcHNjREluMnZOeXlCN3lnZkZnbFpQY3crMm1uM3h1Vkl3T1YvbVd4RnZLSGsrajJXclRRTAordERxU0M1QmhGb1IwMXZlRnUwN0pkRVl2eitJK05DTDV6MElHV1hrVXJrMjM1V2w0dzRXTVpEblhUcW5jTU5FaworZkx0cG85eTc5WEQwMFFZPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0ZDQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hnSUJBQUtCZ1FETVlmbnZXdEM4SWQ1YlBLYWU1eVhTeFFUdCtacHVsNkFublpXZkkyVHRJYXJ2akhCRgorVXRYUm85Nnk3aG9MNFZXT1BLR0NzUnFNRkRrcmJlVWpScng4aUw5MTQvc3JueWY2c2g5YzhaazA0eEVPcEsxeQorcHZCeitLczR1Wk9idGpubml0ZjBOQkdkak1LeHZlVHErVkU3QldVSXlRanRROG1iRE9zaUxMdmg3d0lEQVFBQgorQW9HQWVmUElUOE1QcEFKTmpJRS9KcmZrQU1UZ3NTTHJ2Q3VyTzVnekRCYnhoUEUrN3RzTXJzRERwdWl4M0hCbworaUVnM1pielYzb2JRd1Y3YjBnY3IzNFc0dDBDTXVKZjViNWlySFJHOEpjWnVuY21vZkR5Nno3UzVWczc1Tzg1egorZlZ6VEl1VlV5dUh5MXJNNnJTQllLZnNNTFZ5SW1VYjR3dElYRU1IUHpkQ0w5TEVDUVFEM1pmZ0dxdWRNV3E4dgorM0JsS2hzUTRmc1Iwdnh6TmxNWmZvUnJaemN2QlQzMzlCcDFVUThhVW84eEJ0SGlSd3VXMU5hUE5nWUtYNlhRNgorcHB1V3VUaUpBa0VBMDMwaTQ5M0tuRlBMUndXeXBxRi9zNlpObFZ5ZStldUZONU5GL0llSmN2Yi9HVURSWXY5TworcFJvelJTMWpOeDRaQjFLMnhUN045TXdzUEhENmo2SzR0d0pCQUxkZkhUZlQ5UnpqR25hZTdTQVFRK0NjRllGegorSmlZNjM4NkIyeVVWSkxGaitqNVJhTXZNY0tRN3hHbnZHbTd2eHROSnJ0L2ozcWc2b2F2WFVmdWx6Z0VDUVFEUAorQ0VWTGhDZC8rWmVab3o1TVdQVEdUUnJPQ0ttb1JxTlcwRmxHNlBmcEQxcVN3aDA0S0c0NHVmbE8weXU1SFVHcgorSlpHK2JjajR4NWJXWkZNa29VcnBBa0VBeUVnUXplc0tGcWNidDFjcXYzcExYSllRQkJ3NmxlRlhnSGsxMWE3aworK0FrZXhoclBZeXEvNHRYRk8yVExrMmhzN3RwWWdORE9xWkN2RXU3anROM1J1QT09CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS4zZGVzIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS4zZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOGMxOWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLjNkZXMKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRAorREVLLUluZm86IERFUy1FREUzLUNCQyxCRTgyNzRENjY5MkFGMkE3CisKKzlaWGpvRjU1QTlYZ0pwZGFXbUYvWkwxc0pmYm5FMU00Mk43SEhSRHdwcTEvSythZkM5cG9NMC9BZENVYlJMN3cKK3V2UUVSaWV2YkFZcE5lTGRhaDFFZnRNNjAzM2Uxb1R4VU1pdmRMNG9yREtjYmIzcURwU1EwbzBVYmphdmJUK2QKK2FydWlsVzh6VlA0ZHozbVlNdkdia2dvdWpnemRUKzR3TTBUMW1UVHVZY1JLUXNIbGc3UUR5MlFyQklMTnVYQTQKK0hteWU0R2xTWFZVU09OOHZQWFQxMlY0b2V1YkVJWlZsbmtMVFJGR1JWQTRxejV0Ynk5R0J5bWtlTkNCdStMQ3cKK0p3SkxUYlF3TUZxb3pIdmlvcS8yWUJhSERjeVNwVEQ0WDVBd3JDamlmVU5POUJuTFdMQW10OGRPV3Iweis0OEUKK1AveVdyNXhabDNEcktoOXI5RUdiOXhiVHhodW0zeUhWN2J2WExvVUgrdDlnb3dtZDRMcTNRampmOGpRWGxlMFAKK3pvQ09WeHdOMUUxSU1obGVFVVBWN0w4bWJ0MjZiMEp5dnJTUzVCeXJYYWhHdTl2R1F5eTdxcXg5WkFOa3pnWEYKKzNoUE1EdXpRWE1KaVVlRzkyVnNNRWRHZEExLzhWNXJvK2NlQjVjN1pjYTVNak16dngydGloZGE3QlVqajZkU0UKK2NBOFZ2a3N5L05YL25xSFN0MGFTZ3BodkJtWlA4ZE42R01jWitoVDdwMGZoQ3E0bVNGRXlrUXF1ZUtYaUZVZnoKKzB4Q1VWWkM2V3pPb0VrYzhrN3hpTFdRRGxzWloxM1o0eXhVMUl4SnA3bGxaWHBaOEdrd1MrNjc4L054OGg1NEEKK212NVpsU0ZXV1Fydk41SlBRSmthN2FVMklUdTFMVUs2bVhCdStEb1NET2ZRdXFSNHZReXRrak9xSEsxODVpSHMKK0pRdEJHa0ZGZEVsa1dndWJQWC9TOC94eG9UOE1vUVkvYytkcjZpd2Nzd3lVblNKWGgzMktMUEdOQm9xV0NDYlkKK2pwL1ZZbWViMTE3Z05wRUpLSmhjTmJyUDdEb1FyQzMvRDdKRlhuT3ZUQS96NkZPdFVtejByUT09CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5hZXMxMjggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmFlczEyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDc0NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5hZXMxMjgKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRAorREVLLUluZm86IEFFUy0xMjgtQ0JDLEI1RkEzRjcwQzJBRjc5RUI5RDNERDJDNDBFN0FFNjFBCisKK2l5Zk92dnlUUFBSN29uNFhQRnh1NkNvQ2dUcWg4OFJPbHNsTStSTEpod00vcUdleGJnRE96ZUkyQ1BmNFhmekkKK3R5ZXZLRC9wcUNhQ01lc1lKaC9IRFFDSUxkVzJ0R2J3elBhamc3MnhrZkNENisxTkhPR29EYmRRTjhhaEdWbWcKK2ZsQVlVMGlYRE12cXMvam51Y003bmxUR3A4SXN0bjcremQ5QVJ5cmtReStJOG52TWgzY2hHS1d6eC9YdEpSK3oKK0l2OHArbi9vK2ZDSHpHdnRqK0xXWWVVYzRkME9USWpuRjZRUFR0UE9leFgyOHowZ1hST0RUL2luZGdpZk5YdjMKK2o0NUtPMk5ZT2FWVGFDdWlXSUhqN3dXQm9rb0w0YkNNRmNGVEpiZEp4NUJnZkxtRGtURW1CLzZERVh1NlVPc1EKKzNsUHp5SmhJUnhuN2hOcTJJNDdUelNBRnZtY1h3bTg0dHhweHRTd0hUY2w5TGdzeUlpRU1tSHYzbFBQRTFHOTQKK0Y1VnJDenpGSHlVN25GUmRVQzBtcUxyQ0hjakRuNU80U1FXZkg3Si83RzRPQXJVNmxBNFoyTkMwM0lQeEVtc1EKKzY2RnU4R2RNYm10Rk9SZGxaUXRPakxpM3pad045K053aGlVck5OZFZ2R05KSWpJY1o0RlpSWnlzYnQ3KytoZlEKKy9KT0FLaFZOQzhkTlJPSlVsZUVZSWlxeDIzZTVsemU2d3FjSW9zemlxM3RiNi9TUTZmSDUzM0Q4K1BwY1pLc0MKK0lsV0tBUXpzTlYrbkp2dDdDSTFwcFdjNkN0VjdUS24wc2NabTJvT0M0MzM5Z2RSNXh6eFhlOUVKRHNNQnBjZzkKK2RySWRCciszVXhlQzZMYy9yV003SWpTUTJZVUxCcmEzdG9FRjZVWWV2bmdYZFVEMllhZnJwb1k1cks5SUg5MEcKK0hqYmY2NUlhSExUUzBqQTdsQXZKc1FFQnVVTFFRb1dFTk9qaHA4ditVZmtOTTJjY3lPdVVrM3haSk5lWDE5WVAKKzFaMDlVTUVLYmY2dWNvUkNjMDFTQmwyMDZPQXNxMU5aRWFvZHN6VCttRGc5OTBJLzlBQ1ZpM0xFVTZYQjVaVnMKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmFlczE5MiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuYWVzMTkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzAyZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmFlczE5MgpAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitQcm9jLVR5cGU6IDQsRU5DUllQVEVECitERUstSW5mbzogQUVTLTE5Mi1DQkMsNzJGODY5RjQxQjk4OUQ3MTczMEIyOTgzNDQ4MjUxQjgKKworUjZTVDZIOW9VeUZXQmF2VU8rK2F6Ym45Z2E4N2xnZXVxTk1WVlNjT2NYamd1cVFaZG51WnE5QXp3UVFFVEV2KworWmJWUEw5dzJpc3VYS29hdmFQeFl5Q1hiWitsNkpSZldpWGk2Q21uZk5oeDRNZ1lwYkg5QkVxR2JJVnhBM2Z2dQorekZ1dHFpK1J1NlFlRVJzaEROa2U2SGZGako5MVdrQmpOanJYY2ZEbXQwdVJHcUZTV2Q1RFNFbml5YVBteENZcworbXBSd3I5WEVTRmlCa0NITCsvaVNrVzBFWkJqd0hXMC8vUk5zWkt0dXFWSkdXL2RaaER4ZXJPR1JsMGExb1drYgorSXZmRUQ3YWZyWE1scEhva013dFVkdWsyVEJFMUFvY3paNkR2N1JaR2lwYUJSNHliOWtZZ0lraXFGazUzbGc1aAorN2IzV1F0NlRZRUNJN1gzUTJyRGdQUXRVQ2hWdWQwdVVRWW1RNTMyOEhSRTh6aGxXeEhHbVRRTVdWQlc2WCtGTQoraWtGTFJVZVlCZXEwVUp1MjBEbXZrbFpWNmlEeHNVTEx1K1JiMGI4TmtUK1YyZmVTWGJyUDk3Nm9DU1V6bnZUNgorM2UyRU9IK0tBcU15NUpaaFRzak03SHRrbGVNd1lROXYrV25ibm4xT3NCOWRyWVdVSnVoUWVYdDZ2OGRrbS9lRAorOW02ZFp6aXZjL2gxVVRoSXV1WlBvKzZTN0ZvbHVJbHQ1dXYyVWNuWVlkWU9nS1NkMVZtMHd6dEdhSm4zQ1NHdworSkViZWJ1Y3IrNXB0T0h4ZmxWNVR4Z25majYzc0p5VmQvd3kwVDhzTVJPMnpuazV1VkxXeGY4NTVmTlhldjlNMworZ0EzK01YQzJlR2FSOURZT3hmYWtGUndMK1ozMFJsSWt0YXFESzc2QlpSRDRzV0I2ZElWdzVKZENYcE5NQ3VESAorZHhsVEtjUDU5dVBBRUIyVnloRHZtNUNOM1QrYk0ySzZXRFpGTzk1aEtLZkVrNWVhL1VCN0RBMnVjZm92ZGF5RQorSGQ0NkVVS0M0L2NkVUZpU3ljZ0QwMXp0ZGRhN2hVN2hGdk9rSFRLN08zRzF5dkV3SDAranhLTnN1ZE5mYmJ4YworLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuYWVzMjU2IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5hZXMyNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmMDljZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL2tleWZpbGUuYWVzMjU2CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK1Byb2MtVHlwZTogNCxFTkNSWVBURUQKK0RFSy1JbmZvOiBBRVMtMjU2LUNCQyw1MzU3MkVFRUU3OTQ5NDhBQzQ4Q0IwRTA3N0NFMDc1QQorCitwMFlvYnBRbXpIYjNOZ0dsb2pwWW9IK0c1ZjFYWDlzbll2MkdRZTJ0R1RCUXBvSGgraXZIY090ODVFWnU5cEMxCisxS1JkQUxFd3A3Q2I0UlllUW5jVjlCZnA1ckl0dXBTMVR3ZmdLQWxwN1BsbWI0dkRjRFZ3K0tMM1BhWW41MkJkCitxcTVVU0x4Q3ZLY2w5MWhaWHppdHR0SDA3MmxFajJNelcyUXBYMi8xaENSUGdNRHU5UEpsQlgyUytHT2FZUCs5CitzVFdUQ2MxeXZITVc0WEdFTTRQNHlmUmc5RU9UeFU1Z0lZV1VFMkpxbUVHZCs5STBoSzJZZXZBUExOS0h4enB5CitrbENDQllxRHBsY1ZUNXpFeUNtZGlCSElqem9kbEZ1b2NaQzhuY2luVm5zdUp2cFRlTVErek9aNXJhbzh4bTJqCit1Q25uVlJoN3laa3Rmc2Y1Qi9aS0JNR3lQWVJ5S040Q0NZaEYwR3piZWhUdkJpcmdERUxxNExIeURkbm5PVHdVCitZSmlxbzE3eDZTNEZWTnE2QXViQURWQWJDT01GeWZyK1RGc2hJOHNwT3dxZkdGRkRzOC9XV0w1T25CUzg1UGQxCitkZ29xd3pKQXQ1NUd5RFViR25wNmhVRmw5Zzk2bnZWM3NFNlhlNHhWRTJDcGYxQnRVbDlEdDNVcnJEcmJTMGRrCitwS3hsMkZBMkgwQlZLdGZOQkhYdldrT1JpK3YrWFpsMzRyWlozN0I4c25ZSU4yYU9xTHV2eU00ZmQxRWFia3lHCit5bU1FVUhKY3JjNXpsLzdJRUNhSHJDYWhxWklzTHBMaEdUZDBNTUdya0dTdlJMaVk1blE0TU41dEtJMGZVdzBTCis1S0lqT0E2Wlg1bnZoNHJZZ1FjZ043SzZkWE5BMmhPajUyNTZWdjBIVndYc1ZoUUZtQ0dudW8raDhYeHVkUlZICitSdUlVYVRVdGwyOWEvMm5QVHpYQjZNTlplN1dvbDhFa3p1WUVneWFpektyN25PMEoxdW1nK2xqN2lwWC84MEppCiszQURpMHlMNEY4MzFMc2RBaVRZNjBMdTJlM1dBQmxlWnN2dUxNV1NvZGI5V3pKWGtuc25GRURMR09NK0hHajhRCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5kZXMgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9rZXlmaWxlLmRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjMyMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMva2V5ZmlsZS5kZXMKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRAorREVLLUluZm86IERFUy1DQkMsRjg3RkUxQzBGQjlCM0U3NworCisxTmJPeVJ4NWtCV2VYeTkzZUNYeWlkRHBSM3BiZmdHV0lJZ1hWQ1ZFNC9aWGdFdDE0QTIzWW5kWmVJNU9TeHZHCitKV2hxWitWdWlSc3hlS0Fqbyt4ZjRibktMQXJ2YnNoaHpVS0NFVnNDUDFkMmQxeGZnanNueXI4dHFOaUpFMEY2Cis3TmltamNycHcvdWRDazJSQlZ5c2hOOWtpUEJibkErWFVkT0hmRW5iZGtxRHNTNURHanE3SDFrQlp1SGhUUWE4CitYdjZ0YTNrYkkxQkdpcUtEaEgySDlpSmxaTXdwVlF1SnMrSHFjcU5FaHNQbTBWNGtwMFMzUFpNYllWS3BFdERPCit2aDlDSHByUXkvbmxIZnE3WkFzOS8ySE40L09ULzVrdzRKTTlxUXk3ZW8vNkZYMnloMzlMeXo4dTdQWExhVmdNCitwd09pRmIrenZlZ1l0czVhQ1h5TTFuQlV1OU5GUERRTkR5dGpYT2hiV0wwaEVyMVJ6Z0s2N2Y1UVlJeFdnR0NLCitTdDRtb0luN0o1QmlmVmlOZHA3ai9SWENvQ21kYTNadjVQaVJ3ODN5U2NTbHpnRGRUTnBtLzcwanA4cEdTeEVuCitJYjc2OHpZRWNZZWVLeVBhcjIxME5oOWFieVNQcGtGRmF1ak40ZG81d3VqYm9DMFZQejczTTZlVGVaNmlPVWdSCitjWDlXd2tmUmo2RzZWUWZNNnhBWmRPa1EyY2o2TTRZUnplMVJLTGhxbzArZ3JlNzZGTG44S3pmL0hqcnAvMGl5CiswZmxyLzZCd0x4R1Y0OXZNVUNlc0o5b3FFL2ZycnU5WTg5Y093YmdjSHhLSjI0T3orNjRPVVB5ZVN4RE1FbFo4CitsWGlOazNhQkV1TGRCT0tKOEI5a3lLdXhOcXdEb3FoQ3NyYzc3R2ppbytxMjR3K0cyK0tBekJFdXA0UzljWWdwCitGaVN2SzhzaXpLSU5mRTE0ZjlIQTYwTUpKenlFalRVdUw3K2lvTDd4SEd0SWtkV2JzL1FwN0t4bGlINnFvSVV2CitWVXNUNlZTMW5XTER5VHlNYmNqTXgxb2RSc1dyTHdMcUlzdk5JY0dHd2UrUDRzbTRMaXZOblE9PQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL21waV8xMCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL21waV8xMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjVlMGQzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvbXBpXzEwCkBAIC0wLDAgKzEgQEAKK2xhYmVsXzEyMzQ1Njc4OTA9NjQzODA4MDA2ODAzNTU0NDM5MjMwMTI5ODU0OTYxNDkyNjk5MTUxMzg2MTA3NTM0MDEzNDMyOTE4MDczNDM5NTI0MTM4MjY0ODQyMzcwNjMwMDYxMzY5NzE1Mzk0NzM5MTM0MDkwOTIyOTM3MzMyNTkwMzg0NzIwMzk3MTMzMzM1OTY5NTQ5MjU2MzIyNjIwOTc5MDM2Njg2NjMzMjEzOTAzOTUyOTY2MTc1MTA3MDk2NzY5MTgwMDE3NjQ2MTYxODUxNTczMTQ3NTk2MzkwMTUzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9tcGlfdG9vX2JpZyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL21waV90b29fYmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNjIzNTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9tcGlfdG9vX2JpZwpAQCAtMCwwICsxIEBACitsYWJlbF8xMjM0NTY3ODkwPTEwOTA3NDgxMzU2MTk0MTU5Mjk0NjI5ODQyNDQ3MzM3ODI4NjI0NDgyNjQxNjE5OTYyMzI2OTI0MzE4MzI3ODYxODk3MjEzMzE4NDkxMTkyOTUyMTYyNjQyMzQ1MjUyMDE5ODcyMjM5NTcyOTE3OTYxNTcwMjUyNzMxMDk4NzA4MjAxNzcxODQwNjM2MTA5Nzk3NjUwNzc1NTQ3OTkwNzg5MDYyOTg4NDIxOTI5ODk1Mzg2MDk4MjUyMjgwNDgyMDUxNTk2OTY4NTE2MTM1OTE2MzgxOTY3NzE4ODY1NDI2MDkzMjQ1NjAxMjEyOTA1NTM5MDE4ODYzMDEwMTc5MDAyNTI1MzU3OTk5MTcyMDAwMTAwNzk2MDAwMjY1MzU4MzY4MDA5MDUyOTc4MDU4ODA5NTIzNTA1MDE2MzAxOTU0NzU2NTM5MTEwMDUzMTIzNjQ1NjAwMTQ4NDc0MjYwMzUyOTM1NTEyNDU4NDM5Mjg5MTg3NTI3Njg2OTYyNzkzNDQwODgwNTU2MTc1MTU2OTQzNDk5NDU0MDY2Nzc4MjUxNDA4MTQ5MDA2MTYxMDU5MjAyNTY0Mzg1MDQ1NzgwMTMzMjY0OTM1NjU4MzYwNDcyNDI0MDczODI0NDI4MTIyNDUxMzE1MTc3NTc1MTkxNjQ4OTkyMjYzNjU3NDM3MjI0MzIyNzczNjgwNzUwMjc2Mjc4ODMwNDUyMDY1MDE3OTI3NjE3MDA5NDU2OTkxNjg0OTcyNTc4Nzk2ODM4NTE3MzcwNDk5OTY5MDA5NjExMjA1MTU2NTUwNTAxMTU1NjEyNzE0OTE0OTI1MTUzNDIxMDU3NDg5NjY2Mjk1NDcwMzI3ODYzMjE1MDU3MzA4Mjg0MzAyMjE2NjQ5NzAzMjQzOTYxMzg2MzUyNTE2MjY0MDk1MTYxNjgwMDU0Mjc2MjM0MzU5OTYzMDg5MjE2OTE0NDYxODExODc0MDYzOTUzMTA2NjU0MDQ4ODU3Mzk0MzQ4MzI4Nzc0MjgxNjc0MDc0OTUzNzA5OTM1MTE4Njg3NTYzNTk5NzAzOTAxMTcwMjE4MjM2MTY3NDk0NTg2MjA5Njk4NTcwMDYyNjM2MTIwODI3MDY3MTU0MDgxNTcwNjY1NzUxMzcyODEwMjcwMjIzMTA5Mjc1NjQ5MTAyNzY3NTkxNjA1MjA4NzgzMDQ2MzI0MTEwNDkzNjQ1Njg3NTQ5MjA5NjczMjI5ODI0NTkxODQ3NjM0MjczODM3OTAyNzI0NDg0MzgwMTg1MjY5Nzc3NjQ5NDEwNzI3MTU2MTE1ODA0MzQ2OTA4Mjc0NTkzMzk5OTE5NjE0MTQyNDI3NDE0MTA1OTkxMTc0MjYwNjA1NTY0ODM3NjM3NTYzMTQ1Mjc2MTEzNjI2NTg2MjgzODMzNjg2MjExNTc5OTM2MzgwMjA4Nzg1Mzc2NzU1NDUzMzY3ODk5MTU2OTQyMzQ0MzM5NTU2NjYzMTUwNzAwODcyMTM1MzU0NzAyNTU2NzAzMTIwMDQxMzA3MjU0OTU4MzQ1MDgzNTc0Mzk2NTM4Mjg5MzYwNzcwODA5Nzg1NTA1Nzg5MTI5Njc5MDczNTI3ODAwNTQ5MzU2MjE1NjEwOTA3OTU4NDUxNzI5NTQxMTU5NzI5Mjc0Nzk4Nzc1Mjc3Mzg1NjAwMDgyMDQxMTg1NTg5MzAwMDQ3Nzc3NDg3Mjc3NjE4NTM4MTM1MTA0OTM4NDA1ODE4NjE1OTg2NTIyMTE2MDU5NjAzMDgzNTY0MDU5NDE4MjExODk3MTQwMzc4Njg3MjYyMTk0ODE0OTg3Mjc2MDM2NTM2MTYyOTg4NTYxNzQ4MjI0MTMwMzM0ODU0Mzg3ODUzMjQwMjQ3NTE0MTk0MTcxODMwMTIyODEwNzgyMDk3MjkzMDM1MzczNzI4MDQ1NzQzNzIwOTUyMjg3MDM2MjI3NzYzNjM5NDUyOTA4Njk4MDYyNTg0MjIzNTUxNDg1MDc1NzEwMzk2MTkzODc0NDk2Mjk4NjY4MDgxODg3Njk2NjI4MTU3NzgxNTMwNzkzOTMxNzkwOTMxNDM2NDgzNDA3NjE3Mzg1ODE4MTk1NjMwMDI5OTQ0MjI3OTA3NTQ5NTUwNjEyODg4MTgzMDg0MzAwNzk2NDg2OTMyMzIxNzkxNTg3NjU5MTgwMzU1NjUyMTYxNTcxMTU0MDI5OTIxMjAyNzYxNTU2MDc4NzMxMDc5Mzc0Nzc0NjY4NDE1MjgzNjI5ODc3MDg2OTk0NTAxNTIwMzEyMzE4NjI1OTQyMDMwODU2OTM4Mzg5NDQ2NTcwNjEzNDYyMzY3MDQyMzQwMjY4MjExMDI5NTg5NTQ5NTExOTcwODcwNzY1NDYxODY2MjI3OTYyOTQ1MzY0NTE2MjA3NTY1MDkzNTEwMTg5MDYwMjM3NzM4MjE1Mzk1MzI3NzYyMDg2NzY5Nzg1ODk3MzE5NjYzMzAzMDg4OTMzMDQ2NjUxNjk0MzYxODUwNzgzNTA2NDE1NjgzMzY5NDQ1MzAwNTE0Mzc0OTEzMTEyOTg4MzQzNjcyNjUyMzg1OTU0MDQ5MDQyNzM0NTU5Mjg3MjM5NDk1MjUyMjcxODQ2MTc0MDQzNjc4NTQ3NTQ2MTA0NzQzNzcwMTk3NjgwMjU1NzY2MDU4ODEwMzgwNzcyNzA3MDc3MTc5NDIyMjE5NzcwOTAzODU0Mzg1ODU4NDQwOTU0OTIxMTYwOTk4NTI1Mzg5MDM5NzQ2NTU3MDM5NDM5NzMwODYwOTA5MzA1OTY5NjMzNjA3Njc1Mjk5NjQ5Mzg0MTQ1OTgxODU3MDU5NjM3NTQ1NjE0OTczNTU4Mjc4MTM2MjM4MzMyODg5MDYzMDkwMDQyODgwMTczMjE0MjQ4MDg2NjM5NjI2NzEzMzM1MjgwMDkyMzI3NTgzNTA4NzMwNTk2MTQxMTg3MjM3ODE0MjIxMDE0NjAxOTg2MTU3NDczODY4NTUwOTY4OTYwODkxODkxODA0NDEzMzk1NTg1MjQ4MjI4Njc1NDExMTMyMTI2Mzg3OTM2NzU1Njc2NTAzNDAzNjI5NzAwMzE5MzAwMjMzOTc4Mjg0NjUzMTg1NDcyMzgyNDQyMzIwMjgwMTUxODk2ODk2NjA0MTg4MjI5NzYwMDA4MTU0Mzc2MTA2NTIyNTQyNzAxNjM1OTU2NTA4NzU0MzM4NTExNDcxMjMyMTQyMjcyNjY2MDU0MDM1ODE3ODE0NjkwOTA4MDY1NzY0Njg5NTA1ODc2NjE5OTcxODY1MDU2NjU0NzU3MTU3OTI4OTYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Bhc3N3ZC5wc2sgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wYXNzd2QucHNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmVlMzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wYXNzd2QucHNrCkBAIC0wLDAgKzEgQEAKK0NsaWVudF9pZGVudGl0eTo2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfMmRlcy5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8yZGVzLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfMmRlcy5rZXkKQEAgLTAsMCArMSwyOSBAQAorLS0tLS1CRUdJTiBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQorTUlJRTZqQWNCZ29xaGtpRzl3MEJEQUVFTUE0RUNKVU8rakpuVGpwS0FnSUlBQVNDQk1pOVFGRkxnS0dZT1NEUgorMHp5Uk1jODdSa3J2U2x5Umk4QmlieUt2VE5FRHE3N2pUcjZaRXVPRjFPZVo5ZnZkWndKZUk0R2tUZUtrV3FUdworWERqV0FUWEhiZ1RYODJJM1Q4UjJpQm52NlphOXVhRkR0REg1Z2JVWVNyU056TWFveVM5MGhjOVBUSjIrVEcvWQoreFVlOTlrU3Z6YmhBYXRWUUUrMFRXcGdIKzhvQUNSdkdlbG5IV29mdzQvQ0tKWEpjdFVPOGw2TGRoTGh0MWt3ZAorWVhOWDB4anhwWS9lTEdsc1VhaURCZGIwRDlXRmpkaTRmY1o0NklIc3BxVGZCVWhZYnBEajhJUVQxdmpINnlqbQorY1BOUHN0RWV5ZkZuaXJ2Z0Z1SGc5TFhUSDBjZjBtSmdMemdpY2xnUlZFT2VsODdMZWk1aWNFRkk0aERBelduYQorczNZaVRpamM5MjZtRDVBcVE1NVFYUE45djZiL3VBVjFReUtlbm9ZeklXQzNZNHBoVFRlQXBDeVY0NGY5b01NRAord3pjWVdNWm9IekVJaVpqL2lpQ0YxdU9TYW1JanVuQ21waUJYVEk3T0dYYnhYdlNTSjNhVTluSkhxVlQ4OC9rZQorbmovL0V6V1ZZQWpNZE5ZbDBiT3NXb0lPTmwzZUVFbkxhVXJPWU9UVk14R2FjNnl5L29JS1I3R1AwUjI2TjRWMgorYzQzNHkwYVFwbjZvcFQrSllhODNOMVJ3RVMyL054d3JIczRwY3gyV1NoYlRqZzFDdzFYTUhrOG5RWU5uTTRvSgora1hXeW5zL2sxQmF5L1NYZ3BsMk5Sc29XenhDUjdCYXZCMm1SY3lNejNkamJPWXNjdVQ0UXdwQi9XZjZrcjZwTgorZ3N6ZWdSdHdMbVZCZWh3dkdKd0wyU0V4MkNESHZKTmh2b0Q3dmJOaVdlVEZvMXdXMXdGNGFFN3AvRWU3Z1NSWAorejE0T0M4TlNidVlWNjYwbnROUTlMQitaN05EVDJkNkpUalNuaFFIeHhMQnd5M09uTTIvdnUwZUNkLzUrTUdqTgorQzRzdmdGc0FIOXFuVDFWUVR6bXB3R0JKQWJEMjlDVnZVVWVCRjMrdXArTXIrSVFVOU9XV0V0VVoyRm0yOWdzNAorajRhellKVUk0K1JMdzc1eU5MVmd4UzVyNENjNGNLR0IvUDdxVnFkSDJDbWpyRWswanh5VEZUL1BFM0RmMWN6OQorRjhlRXByZG1sMmt0cmxRM2dDRDlmdzBrWEJzcDV2d2VjcFFEUzNyMnY5ODB2bk14YjVDbTdrTVRNRmI0L2hNWQorejF5YURrYXJrU0hRazNxRll0TzVEa0VVWGhGNmZ3QVR5cU9nSll3Y3kvOXluekl0cWdic0NJWU1qcFhGN1l3dworRk5hL0dRbHFJYllSQ2Q0S1Q2NEFodXM3STAwdlZTM2IzZ2xjQytLbERrd0NKSjBNK2dsekhySnMzTCtQaUpNaQorZ20rWVQvNUZ1U3FKWi9KSTVRUDdWTW92cVNMRXc2eTZRUUhTQkNPeGgvQ0doQUwvQlo5QTlhZnZQVFJpSTlPRgorZnl4QWFmOEtIMVlQSTN1S0l1RGNtczBkMGdKcVFvRG1MYWZkZmdnZDZkd3VMRjNpUXBET1JneDgwb1BiamZsMQorRkViVThNNURxaUgrZU94Z0V2SUwwQWhNblBhNG12MWJyVmRseFMzQ3lvam5xeFBmZWNYeUVYcmhFWUpXSmRzRgorYVlLUjViVTFiWTk5MGFONlQzRURSYmxtSHMyNUZjMzI4eFMyWkprSE54Y0pEcnV3aTRFRnBRVlQrZnVrT3owMAoraE9XMkJFTUZKTFJmbEUrMzcyTE5JZ1NSVk5JNTM2WWhGOHI0cjdPMWpydzlNY1gzaHpiSkdBdGNzWHF5SU8vaworaHhDM3g1VmlxZ1piRFlnSHovQ0pKZlAyUkM4c3BwMlJiWi91REp1MllJOHo4czlPWHZjWXYwRVFtQkFKeGR0LworbHlma3pFci9uOG9SdERJa3JxN2xSM3JqTVV6N0FiQ2ZOSnBxckVCRm9sOStxSDgram5tb3dMOExXQmxoMHYvQQorcGMzcVdJdWxYT1IxcGJ3WHlBRUxvOHdHaG5KV0w0V21ZMjUyUzNpMEpuOEdmMmtYZXdNUkpzaXhTdGFpcmpXRAorMW0wd1dVVkdTbTVDTzhSZm9uOD0KKy0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmRlciBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzNkZXMuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyY2UwMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzNkZXMua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzExYWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmtleQpAQCAtMCwwICsxLDI5IEBACistLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCitNSUlFNmpBY0Jnb3Foa2lHOXcwQkRBRURNQTRFQ0doTnVRb2dpa3RyQWdJSUFBU0NCTWhmY2IrSnQwWU9nR25pCitJV253bW10WVQ2TnZpbmEvajNGQ0d6Y0hDRHlVUURxaDFyUFV0Wm5tVWRNM2Z5RUdsVUpkWDl3bUhoM2dVa1d4CitKRTAwUU16WURRc1ViR3J0OEgzckNRK2FYZWdDaWNYQXlCZ0RoMFlVaE83YldtZ0pOU3ZaT2R1SWVDSjgxbW5iCit4dGwzQ0dnYVlWT1dzcHI0NThjcnR2bjFIbGhxMEVHczU0RVVIV0JFODlQSE54b2tHSHFrRlFjZHA3UUhPOVptCitadmpUbitrUjBLNUtRYmVRd01mM0xjYm91ZURWNzF1ZVVac0hsVFNaNVFzN1daT1JSek1Cb28yU1dWK01oN1UvCit5QVF2NGk2Q01hdVZpZlZxVE1iTHRmZFR5WkN0czNONTdzR3N0eXFJcnVFMUp3ZzhtM2krY1YvUUloOUZjZ284CitSK3NuU2xiT1pNekNwVUl2Y3VWa0VNQlA4Kzg5L0J0SWFiWEw4U29Uc0Q2di9mL1lKZmN3OXFwT0grQW9BM0pHCitVWlQrMFZ4ZklrMEpVa1g4UXZNMnFNUVlZOWVmWCtEcStOME9EUzF2c2RQNDNwS3hvd09RbFFVUEtPc3FvRGNoCitJWFc5cUREM3VWK2NsZzVMNkJxRGJYMU85OG9lZ2NnNkwyNFpLMXlLVnpvdGlUai9lYVpWcHpUdHJOWXpXQjArCitxTzlGVHdMcU9tSVJjZHVLS3U1emN0QzdRbHBGWTNVMmlrYmtZcFBzYW0vOUdTWFZlMEx1TVJMbGVpTVBRVWRVCitaSmxrWnIyMjFPR3E1VFZoeUo2ekV3dWQyNndFeEIxNnRMVTI2WnZFRndFeG9VUGJvSC9VUXdYOEw5dmQ4QktwCithMzJ1MzVuNU1Pbis1NFJmYTRxZnBVK3VMQjA1NkNDS0w4UHdWTE45WHplZytnSkxmV3F3RWFsUG1Tc3lsYWtPCis3K3N1T0dhVUt5MWEvdXN6RDk3ZEtrM0Fid2ZveWIwcXZiZEYxMzFHUjA0TllJemtRbDcyQ0JseHVXcVZVdDlvCitwbXdzVURBendvSldpMHNLeTBkVG0zS1pITEorM09NSXlkb2QzYmVTOXVTNllybzZOSkJONUVQdzNQb0J5QkY1CitEVWtPZlc2dFYwZGxIeVhPdXdVK0p6QmQ0aXdKZ081M0dWUEFhcDhhL2VPR2dOQ2l3NzJnWU00bGNIbndTaEwwCisvdjk2OVZxbnRQWGI3WUYxaE1zNmVmM3pUbUxFQjR4YVhjQVJ5bm5Oa1pucFFwcHhTUGVIZVhVK0t4WkNqa0xFCiticnpIRm5VTXI4VUpPeXJhM0MvaVhmaS9PS0pjQklVUmMzb1kyOVE0NUdCY1Ywcy9XM244VFZGNHFFcXRidjNjCitOYkVtZ2NkekxHQTI4WGl1eVVIK3BMeEszcVA1NGpscWhkMjJxNXFvTi9nejRNS0craEpNTWNPMDBIajcrNEZiCitmbnh4R0U1ZmFyM3pqSExheGZuUktJZnNlVTlEclFWaDZnVGc4aWJlMGtkb1VYcnB0SWI1MWVSY3VrRTdzL3ljCiswMVBsYXk4R1lpazR4K2tjTkFtUVQyOUVzbEIvM1JjcldIM3RaRXhKampEYUMrVHkyYXRDTW1sTEd4dDdWSE9hCitDM2swUUhZU0UvVFVMQmxkQjY0UzF2VkZyWmd6TEZUbFhLR20zOG1PR0NHM3QvbFFRRFRvM0lBcDBZRSthdE0zCitWRzZPTjNTU1UwUVJQMWFFa1pZOHQ5cmYzKy9KOE5sOG9GNGtGOUlTekxOaGxSL0tKbE5rbUR2Ry9pYzBza0pLCitLWWV6dXVZSDgvZUVyOVpGZkJzYjltUnNGQ005aUJabC9YcWViQ0NDNS9rZlh6TC9IcHA0ZjBMN0RINEMwZjZMCitMYk1DRmh2c0NOR2grMXBkSWpOOWhiQWt2L3IyTk44K01hWTJ4RmswdWtMZktncExwMEVmcGtrY00wRVpjdkZuCitqMUpwQjdyc2hDTGo0UHpNNzdmTGg5OUg0Y2ZmTDJxeXpYcUZGMlk3aVcyOGJXL1JRRnhZd3B5RW5vd3JjUkgvCisxMVFpNTI1U2RLV1JrYjlRbFRKcUZJNndzV2U1a21ZTy9rRHFHVXBHUEdLOCtYVFJURmpUY2k3TlBMcU4rczB3CitaNC9iNVNNVnVjQktxOXNVbTZnPQorLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExX3JjNF8xMjgua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfcmM0XzEyOC5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3NWVmNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExX3JjNF8xMjgua2V5CkBAIC0wLDAgKzEsMjkgQEAKKy0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KK01JSUU0ekFjQmdvcWhraUc5dzBCREFFQk1BNEVDQ0xoemR3bk9YSVpBZ0lJQUFTQ0JNRzhXZ2ZuKytDRlJsMzcKK0ZkUVo5MHBJK3UzN3lqOHYwa0ZkM3JEYURNdXJFZnRmMTBnV3dUYm04UjhKMGVLMWVkSUFIUWFia2dzRjgzZ0QKK3lyeEtGcDF6aEhJMXQ2NWdQS0hjaXJoeDB0OVh1Q2x4QU96RW1lLy9pTWF3L3lmL0lLWW85TlJxeXZBNkJLSFcKKzJoM0o0K0pTR0xTYUNzUlV5emhvTDZ4T3pGK1ZYOHpFOFBJMTFUY3FmSmU3VEdzLzlHMFB2Mlh4RnBmckc3cHoKK256NW1rQVlkY2tZSGN1NytDUUdKMDlaVWtibFYzTVlLRUVicTV4WEVvNEtrdS9uMVlOcmg2QkVXTUxvNVhnT1UKK1lJQWt6aFNmbmJUdDZRcnhNKzkwYjRxd2s1YW1yQzR3MWpVdTczWnphQlFzN2ZoeDAxcFIyeTN6VFBCRDJEcGsKK0czaUxwcmdFRnFzb0dDQ09xcXFFaUVGL3hEUkVaRVBXMGVzMlJydVE5VG4xNExiZ1RqNVhWRkkvd0JjdnA5dVoKK3BqUzVjaEMwL0NSYkdjUmk0N0E5dng5Ympnd2lHQ0RweHgwL0tuNjh1RkNhQ2VHT0FRNjg3WHhBbjFVSG1CRDMKK2VzampiN1MxNmxkOXJTS1Ywb1hXdWdVWktGZG9xODdBSFk4TmpoaW4rK2JpdUFFZnlTdTNpSDVhanpaVjlkRWoKKzZKSFZ3b3R1TDJkaVZ1N05VOG1Jc2ZyMWtDSm9VeElBYldGdm9nbFdObVR0YUlCa2M1Y2gra1VUc3o5ckR0U3AKK2xMOWZUK3d6ak43UTdseVJmSWhOT2hlZzJ4RjlodXdGNm1xblNsRGZ2d3ZFSjhOc1FJOStDZW9vSTJjMVpjMGEKK0JoL3ZEdkN6b3Y4VEUrMU1hOENucmJhTS9hU1owRklxNlBjcFdTQkxYU0RYYkx3YWJFRU9Mb1hRWG9nT1pzYzUKKzBzejcxbDVjOGpKUGx6WHhGWVlXOENOdXhUc1VQK2hOMm9XdmJtTDVZTHE4UCsxdHc2OGpjZGJxaFRxb3FyVzEKK3BHRVhkMmlNUlVmQ1REdUNNNkJuNGlJTjgwcVVxcUJBdW9UQyt6Q1ZIbkk3K3lnbW92aGYveWtmVnpOYURTSVcKK0JrRHNtWm9INmJxM0Y5SHB2T1dnZ2gweUsvbDFiMUU0UERRNmhxN3FXTnlKTXlqWUJKRWJFZGQ5TzNHVzJxZXYKKzNBUmhiMHlHdWx4WUgvaDN5cDJtSWZ4TCtVVGZSTWNVWkQyU29iTCtwaExSLzlUTVVpNklhSG5CQUY4NXNuQWIKK3JidEFLQ3A5bXlGTHdHMUJ1amFRMThmS1FGZ2NNamJKWTNnTEl6KzNBQzcyaXJMU2RnR3RpMmRyalAyaERHS3AKK1JJVEFFeWRaWEl3ZjY3Sk1La3Z5dWtuVldNZjlyaTl0TU9aRXZvaG5VM2JXNGc5dmt2ODlDVXRDTFdGOGllak0KK2ZLSVA1aGpIT2NLUkx2dkFDRmJnallDUHQ4aVBDY1Fja1llK0ZaSTVUN3pZc3lRUTQ3ZnlnUzFmN01XWmJsUEoKK1VLQW04anhXVXl5U3ZFeklNSGtvWmFIdEM3Mk9TL0wzaUNqSjdta0tTWktlQ0RBelNFSmVlUWNPbDBrbFZDUTgKKzBQK21YcTV3dEdha1c5TUtMaG1zT2pVSXN5TjJmM2dDTzBuRVNZaFdEKzNFS0ZMU1c3WnNIYkRtd3FTRGg2Ym4KK2JsRnZsUWQ3Y3BmWUZ0bG1ieFpGY3YvbDJpalFXUEhpOTNHLzBWSWhGSHhJNkxlZ0t0MDBiSUw1aXd5RjNOcFcKK2ROenVFNjlod2VUU0t2T1BxUnNSbld5R3Y5ZFZMSWFRUHdVUytlRWZzR0dOek05cmJ0eTBqNUJ3NktZL3VEZ3QKK2JsVGZOM3laQmN5RXNkUHd5aVZMZGk2NXpNek44ZzRWVlFCSEZoWFdQYTJONGdKUVZxKzZxOWhRa2dGRlU3eTMKK2Y4TVg0QnJLcThpZndXeHNqTDJGYXdjQW9EY0hVZENaanQvSForOS9yTDNpUXZLZUhiRGJxdTRreGxyRTFGSm4KKzBMSElCMjFxWklvKzZyM2ZkTk1VRmt1RFJCVDllRWgzV3hsZzhHMzVGWUNJaU91SXdCMkVEL0hkbnF0bmVteGoKK2tqUlhVMTc2SFE9PQorLS0tLS1FTkQgRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmRlciBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWM1NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyXzNkZXMuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzAzZGFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyXzNkZXMua2V5CkBAIC0wLDAgKzEsMzAgQEAKKy0tLS0tQkVHSU4gRU5DUllQVEVEIFBSSVZBVEUgS0VZLS0tLS0KK01JSUZEakJBQmdrcWhraUc5dzBCQlEwd016QWJCZ2txaGtpRzl3MEJCUXd3RGdRSTRXN0cxc1ZxSEpNQ0FnZ0EKK01CUUdDQ3FHU0liM0RRTUhCQWpYT1Eva0hiOUVWQVNDQk1nNjhTd3JkRC9ETGVLY1B0Q2tFMzZ3SHZySzZ3aTcKK0Nqd0Z2MlUvZ0lmTkNVTlhCWlBJNEc3dm9MMVhPTEo4aDBXV3FsRXJhSG83ellXSTVLeTk4U0k2d09wREdEem8KK1VSdmF2T1ZUM1J5L1FmTHR0MEdadkVMbUpiNnFPMkFjTDFxSURVTHg0eFhxYjNySTI5eFIveFZhQ2tCOENHU2UKK0p4VSsxVGJKSkcwVWRWRG0yOGRoTzhKNHFnQnBqOU42TS9lOEsxVEl1OHR5NklrRlBGdW1UTjl6TVY5VlhSSW8KK0FqcjFSRElpRlhDWjRheUVuamEyUklad2k4OXJuL2lDL1F6ZnNxUUZyNWF4dzU4d3orMC9FZkQvaTc5Z0tvT1gKK2pLQkV3V040NExzeEpXL3VjeTNwbTd4UnVyd1p2T1FaSWVaY2VjVlZlY0FhSG1DUkZmcStWcFNuVTVpRFpFREwKKzBHVStDS1hXK3pEbnVJZlVjL2x4N0xXakZ5cVIxMk92aVMyQ2Rya2FUS1NWQkFFWUNGUWRHUENwNTFXb1pNbkUKK3VhS2tMcDB5NThlNUowbUh4NGttazJzYUFhY2RPL1lvbEhqa2g1ek5lMVorc09Sd1BFbzRydVpZLyt3ZW0vVEcKK0tGUXNWakgvakFzeVFGc3lYYU9yUTRReU93eHc1MlZ6NmI3dnJmZmFUZG5LbHl2SlR2ZWJFYmhOaU5tdDJOaSsKK3dhYy8xVmNlZGtNcFVyTm1wSnlhbDZseldyVlFtVzFROXFCaW54SGVHbk5IazJRV1RHWkNRQ0NseERUZlBvRTEKK0hDODVjRDRoOTFlQlY0ZmlRbS9NTC9XbWFHQVFHVWlUbFg1dkVTSkcxcEtZWEdxdjFjcjFwaitNVGpxZmpBcGwKK0tPajkzeUF2eDRzczQyb25XZTlEUE9Cb2pTTXVJekVWWk9lcTdtdDdRZU5wTjl1bmpzRFZydnEvZm1zdklCYjAKK3Q1SEZWWDRKbFpvRjJzZnJ3UDBqRWt5SHhsazBwWlpjNXJid3RWSTYwMU1vbER6alROQmNZYlVCMElVbElqOWYKK21NMzVJQUZXWnRyWFh2M2s1WlJGUVUyakI3REZQOXpIV3NhaTdxdWhoZHV2dDQ5OHJOeGlXdTdZbEFRZmhhVS8KK3dWSyszRmNhN0FHcmxROFltelYwdU93b1RNdktiTE53aWlJRzZRc2dXUmhtT0l3SGRObFJ2aGFabDZ5YlJMdHkKK3BwTWFxbE9nRHU4OC84U01DY2U4eUJkZXJYVy8wUXhDWmpRM2dFRHVmcXhqQzJJZWxPZkViQ2hNTElzNnArOUIKK3FhUHRqaTNUeE9zY1FaTUQ5ZzRqWVhVYXdIU3E1NUIvTWVnRDVzZnZUbDNxbCtxc1FubGVYRFV6MmdKK01CbEgKK1FwNkhaTXMyd29BYnZGeXhBWFNVZUtBT1pyblcxVG1STm1qNlN3dEU5YVBtTXdTWXhadFR1a2VzbCtDcHpFcWkKK0JkQlppYTNZeHU5WjU2OTRDZzFlWG9QSWlyNnU2c3ZaQTVPSXBFSVVESVVQbk1tRzlwanhRMXhLNDB2eWpkTVoKKys5dUFWZEdYMTE4bnV3WjZBbDRiZnJQT09td0lJMlgxeG1mRkdHM3JiVkhWRDlkSUdKMUhHV1BaaW80Ri9lYWkKK2tmU1lIcjA0MTBKUkFPdmQ5RzR2ckg2cnEvekU1UWNMQ21YeUg1Vzl2RjNSSkRBSzRBcmNhTEY1UlBZOHNsRUoKK05jWjdYVGNLVWMvVGc2VkNNbzNhZ296dXpyeEtDWDV4NnJ2bjBDT1lnZFUzb3pUTzcyZEpsRlFZMktwSlAwbjIKK1JXV2pkbDJyN1hZVlJvUUpkNVhhWjMvbWdKN0Z0TDQyUmg2K3ZqRUpMZXpXZ1VUbzNCNFowV0c4V0lwNHdmQXcKK2Q0cWJBYTRsVld0UCsrSFp2SXFPUGFMK25aZ0ZTMjJ5Z3RvSVZ5WURqN2xjcUg5Y2RNc2FNclpGQXhpc1ZRSzIKK3oyRG55c2ZMZzRka2REdUpqRlVJMDdRVVB3cWpmUlZLQzhNZWM0NWo5enJwdXp1ODJ6UThGdWI3bGR0RUNzYnkKK29xMHNtQkcxdmQrb3pNUG5yM3l2VTdYN2phYU00dG9XK2RHM09ReG5VTzJHeUIvQkFFYW1PQjRDV1diS1NmeTEKK3RmTT0KKy0tLS0tRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfZGVzLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl9kZXMua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTJkMGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfZGVzLmtleQpAQCAtMCwwICsxLDI5IEBACistLS0tLUJFR0lOIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS0tLS0tCitNSUlGQ3pBOUJna3Foa2lHOXcwQkJRMHdNREFiQmdrcWhraUc5dzBCQlF3d0RnUUlFK2x4NXo3OWhWQUNBZ2dBCitNQkVHQlNzT0F3SUhCQWpyV1AyL1NpUjdjd1NDQk1nVWduSTQvWkczamlkdDhUWlNoc2JLenhROWJ0OUQxVVJtCis4RkJURk1rOEpSb3dhWFp5TTJmeDEvdkVVbHZLSEl3cHl0T1lPNDJweTBsRGYycWRuOGlJZSs4VjJHTHB5R2NMCitpZldHYkR0L2N0RW8yalZnV1QwMXEyUGZVRWlyd1RQVFVhRFI1S0JqZk1qR001VjVjNThmblRRenRBRmFYRm1JCitWTmtpUUNDNkFLQ2JtbGJsRWNqRkdCbFJHZ1Y4c09XQ1crSmFSNWlKTmRUNlBoVkp6SmlRcmZSODE5ZkdTSVNqCiswTjBXcXBqM1ZBOFY5QmVBVFpBanZvZkJDd1JBQkROc0RxUmhqZ3g3WkVWejhDNnBOSzdDazZaWEVqWGFXYzEyCitadmt6akx1dWZaNUI3a2x2Z0x6ZnhFdHZaYlFKbXJRZGREWFpQOUlDeWtQNkQ4Vzg3RXFFZ2s4eW94ZUZpb09tCiswL2VkajdBVlozcnhieHBVVUhKVWlZRExOWGFaVGtzZlloTDBac0IzY0VMOFZvZlVhMUsrNjZOLzBUaXNtTkRSCis0S1NJanVSYXVzWGYxV0oxb2g1QjE4enZubDJqa3pDcHdJU2Y1OGQ3VWVPbnkzL1pSMzhCNzFFdWFYTzRyMjFlCitCckc2Zmk5VmV3dVVnMURIU1lMSUpFclZjZk5uVlhIdVQwRXpQVGpyMHZkVFVndXpEVXY0L1lGY3BFRGs1am5RCit4SnNoQmVnamJ0NVc1Z1kzR1RWUmx5V3FHS3lPc2thM2UydTRDZjd0WnRQMGt5eTM4SkhMa1FRWGdqNmR4c2VUCitsQ0lpcEJESlgzZ1U3eUpITWlYL09wTGNKdUVNYWtScnBXTHJCMHZlelg5b1cwd2VFL2RGelplaVl5bzJLL0RJCitUSUZpTDZGRHVMVXFwY1lqZUIxTSt3YnFzMGY1bmRYVGhWWWkyL2o3M3owZHdDSTFXd0taSC9XT2RUcmpZS3hpCiswb2lMejdwSEhhUG9NUnltV0NLVHdRaFlucWlPWFpJcGZlT0ZjVVk0SktEemd5S2R2VTdYTFBuYnQ0eXhPbEpECit5QXpYMGkrYkpqWWp1RzQ1WEhUUzh0b28wR0ZHMmg2VkZ2T1lBUXNpcTFxT254VnFWVXZZcGhaQlN6N0Q4VnFsCitsSFhXcDk1NEFocGZVUUs0bUxKcS9leGpVSUdJWmIvUXhiTldOdjdtVE1rQlF4R0o2Qi8xVmprdjlLQzA0S0xlCisvSk1uRVpEK1N3NW4rNWo4cVM2ZjdZT2ZWSitIcW0wNE0xUzhjYzdKRDRxTXVmTFcvUnZ1S3lCTGIzc0NuMFVlCitEK3VpVGVkeG9KUjhubTZ5STB1WjRkOVJwUnJlY2EwUFB0MG8rRGhickRXeXFIMTlrYWZON0k2U3JEU2JCTlVPCit3aUdCYmdONFVyOXJQYnphcEFUQS9YOTV5K1EzQ0ZMZS93Y01MY0xISjN0blJDVW8xN0Z4K0FQbXJBc3lCaVlkCis5dWxVcTVXY1phdzNwRURwVHFOKzA4MzJVT3lqSXdwTHlWRExVNWpnVzA0dmJXNDFvMlNXN2ZDYTcvUXhUOTRwCis0UEVBWWkyTWx0UFlRS1JPN0VPaCtpVU9IRXNjOFVEYjZ4NGk3NUJjS2h1THdaN25tcnd6ZzhaTytUV011elliCitNY0oxMWFaNDJoTjlVNUg2NUZRemFaaEFBY09xeFRmZlFYSWRBUkdsZnZyM2xUUm5PL1JRYnh5T2JFcUdlTUhQCitYbER6dklNZEI2YjBSRzRFQmZwREZVcFdmM01oeDRBRzNiR0hQalVYWGhOSUNDTURkSTQ5ZDBsTkozbmtGMG52CitKc2VobUlPWTJVNmZRQkVuWmhuNUQwcmpVK25VbEh2Z0tRS2hzOXlJeW0vSytLVlV6bkpXNHlnd0ZpS1h5c1ZxCitRR3FmbjdoYkJvbllxTGtHTDk5TzlKeUtnei9SaEVNQzBkS3RndTZFTFlKSlZXbmtKR1RJTWtwNWE4SUQ0OHFXCitSbUZKWCt2NXJ5dk05ZVBTVWJMaXpPVWRkc1h5Y0pwR3N1K0FtNUgyMGNUUFhrd3hZdE5jdTQ5ZUxyR29YZjdFCisvbUQvekRxRnJ5TUszb1VCSG5CSmYway9tTW56d2ZnSE52ZVhBcE9TYmZsdlJ4Mzk2NTJXdWdkN0N4Y09ySUE9CistLS0tLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcnNhNDA5Nl9wcnYucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcnNhNDA5Nl9wcnYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzRhYTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9yc2E0MDk2X3Bydi5wZW0KQEAgLTAsMCArMSw1MSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJSktRSUJBQUtDQWdFQTVGMm1xRXNkbnRQQUVpajZIZkNZbktpTE1Hbm02UGNmc2FGWWVGWU8xRXVmT2pONQorWkpQOTBjcjNDckNuTjlKT0FkcEJiVHB6QTBSY0ljQWRXQnp2Tk5BdElNdlNmaTIyV0pZVmp6RDBCdnMyckNZSAorNzZZYzZ2Zng3eTl6WFpjYW5oOFMvMnQ3QjY0eG14T1dMNFJFK2Y4SFdUaWpBV2x5VUZEaytEdUpXcFFLMm8wYgoraEU0UzhtWCt1VWwzYWZOVzVDaVBzUmt5MU4xdjRhNy9KMmI3Y0crN3BEV1Vjam52bU5DTjg0ditnU3VjWGZLZworL0xpQW5aZ1k3eGloMmVQRWhra0lxbjZrVTBjVkJRajFjWjdoWEdSYVovTW5xWjJ5K0tqaXVGb3Qyc2FOay92MAordmpqVyt4T3g3NnFKVjk5THROLzFxdkNZbk8xUnFNdjJFTThXaEVyTGNnaVJyaWh6YXozYTJHYXVtTDMwQ2NOaQoreHJFWFJ5RWpGYU8va2xxa3B1WlJIVHR5VW5rdmhVa1BVSHVIbjQ1WFB4WjdhMlhSeXJTYkZ5eVMwYW1UalF3UQorQ3ZlU1JpSkZqSzVUWjU2Q1ZHS0YvRG11TFNIZVRZM3Z3aStXWFZkS01ZUTZaaTlqd0ZKby9TNFRScHpwK0RUUworSDY4RnJGUnFFMStxSVZ5V1FqbWhXeHV2UGhxVmtHMElUN0NaME04bFdlc3lzeUk3NTlmNUQ4RGhFcC9LYldMRAorZVhXQ3pjTlNiZ1dHSFc1SkErZkNWNys4bTBQcW9kSXk1RDhMaHdtMnRJNWRBNlFjcm84WDEyN1JXVmFWc044TAorSXpkZjFUSFhmblpJbTFmREJOVWZoWGFwS2ZuRlY4RXZBTEZYMkd5OE0za1pRM3NsYUdlZ0lMZnFSS2NDQXdFQQorQVFLQ0FnQmc4ejFncjFzbzViN2lOdEZReXFjUHd5SXNjSmxlaUNQRmRya25oV21RU1hhVTcrdDJmcm5BU2ttdAorR1NnMHM2ejRibDllYnZVTEN3ZU9NSkNFcXV3RzRPWjN5UEJaTHpEOTFPSGNRNjBtRlpxMVpRUHpndk05OGZ1ZAorVHVqTWIrMFYraDFIb0txL3JQMVVWL0ZueE9DL3ZieXg3VENPMWVSNUlvN0NzQXYxRDJxNE5EWGRhb1B5c3NoOAorZ3lzV0tQL1hwenl4cy8vM2pQY0Z1aFNLOXRhQ2VuMFFEc3N4MzFUUDdLS0hKZ1RyYzhkVHYwRUhhWkQ0MXV5bQorL1M4aFlPZzdGbUIrZVh0ciszNTUvNzZyK1FhMkFjaTczdWdVdzJXSzJiQS9FZEhyMG1XaTBOR3J2RmZRaWlEOQorbmNubksxNXBzTGNNVms2RU9PQjFKL29VVXNhOG42L2xRaVRKWVJmRmxmMGhyK21iTUVnZGZJbU0yWG40d0Y4WQorT3ZhcHA4R2ovWE83RlZWYVdXOGRJVlVyZ3lyQ3VPejVTVzExUGIwL0tGZWJ6T1F5dFNUMFMzejFqNTViVWw1TAorbUR4UjBySlUrZk12YmRKdk1nSGdpNllZSTFNQmJTRm1LNy9VZTlIWmFHeGZVUEJxWEpldE9nQUpudW9XVXFPNAorQXRwWWJMYUlpcXZkSURpMXhGNGpETUdJb09sN0NuRnpVOUIzUGpDa1g0YUdkQVJwWHFSQUJ3RlQ5YnBmMWxXZQorRHNFaGJJZzQvcVRXS2NBNkR4SVhhRGhnUDllSDZORFdTNldLYjhMMVNaM21NeXRqYUN4S3NWNnA3cDlEakpSMQorZHdPbVkwSHY3ZUJZaGpWWVVqM3liWnM2ZGZGbElnK001UnRhcmxPc0ZoWko5blZoRVFLQ0FRRUEvbDBGSG9zNgorazVjMTcyNmJseDd6bFJtOW1PdCtyVjFuYkVPU1pVbnkrK29YR3lYclVZdlg1TlgrcDhzb0YwSW05ZEN1aWd1UQorc2RLTks2RFpDSWF5ZW5ud3dFbmNqS1dIK085VmFoWHhNUzlSd3RhUkROV0pSeDNTUDZiMnM0VDFXNlBWWmRUZAorSzdNbE1CMTgyY2t2czY3V1EyaE1ITmNLclRIdVRkZHBBWVNENUxoL1FZRDZJZFdxczZsd0xBdG1MNy9XVGtONworWGRQaHpWZkNYTGplQkJxcjdQYWtOTTlxSTdkdXcyOVFwU2ZuQXJzaERtdndpdVZPR1ZHQ2NtNHFCMVJWMHNRZworS1FKNW50OVg1Vm9LMlNNRFIySXpZYnE1SS93ZXhpSElicjRrVGhhR29rNTVsR2lDTlJqa2FuZSsvclNPaXJaWAorWW8wc0ozUlRVckJMeVFLQ0FRRUE1ZFhQQVlGN2xBbzNYcHdvMFFvdTlJRmMwcXRpRks5cEFwMHE4MURTYkRKQworbGtaT01tL29mekU2dkY2anhqYTJza1hjY2JFaElEdTg3Nm05MzcwdVJVQUFtZmltQWRtUmhVaytKenJsSFh4TwordEZTeGJ5RzBpQ213dENTWm1pQmNNZnZGSi81SGVwQmh4YlVEQkljNlBpOEVPZ2pjUWRuSllyNjBLSnhib3ZLMAord3I5bW53d2FLN1NyRSttWDV2TjJhT3dHcEc5bjYxaWJVVDFhRUxSOWFsT1o4SDRTbGhMdFp2Z1AwMllvT0NTVworQktLZTQ0ZmJPay9xVWxaRzFENk82L0gvT01UNFRNeVlnYXN3eTBRdU1IVGpPQlhya0FtVlNjaDVkd28wZW94eAorZEZobjMxbkY5UzVyQlp0L1BkQlBSM2ltejdVNk1vQmg2LzhvbEhGazd3S0NBUUVBeGJPVEdReHFPUERjY1A3dAorVytZb3VRakt2cUs3VVJBNkpJSFl0WFZtc0xwZnZ6QVgyTWZ5dytBNEVEN3RLRGE0aFhMdlZraHE3R3VVWWdhZworNmVtWHEyNC8yNVVOSVJ3L3RSS0F0dlhiQTdtZHVPeUF6Ukxqb2l6aGo2dThNQWYxbElhZ2hJZVFhRGpUZkxSTworcUEraFRlMWtoL3Yydkt1L2xxSXFjTUl1MFlrbjRvd3NETU9zcHNPbDdBS1VOd2VkSXh2ZCsvS2pYbWdqSnpGQQorMWtTeCswcW51b1J4V01LbDRxRGVMSFRHbjdlRjdDOTZIL1Z4ZnVOL2NscFNJNUxRZytYZTF2U3RjbktFQ1NIYQorOVY2bzgrQXMyanpQWnZSMGxpMk4xYjNJUlpyd0tPbUZOMzM3TFlpVk82UGZWWWxCSUVOQ1R6b3ViV0VBb3FIZAorYVhXeFVRS0NBUUVBdU1EWXVMTW5iZWVRZnVNMUJHVVZQY05IcEtuVUhDQ3RYMGFNSWkrVUZ4bUg0VmordnhpcQorWXFSbVBNb3ZDTVV1czd2bzZ4T2lOMUVPSGZIckNoSC9RZmVqQkNLVy8rR3ZVdDkvc1BWcysvalRJNjc1T3daegorSXdtd1cvOFg0b2VrMVNFNGFWL0VnY2ZTY0tXRG1YNUMyWDNkL2ZEbGJhSHVld3dsc29lT09qeTBCZURxVTJ2ZAorRmNrVHhOd0FHYzBZSUZ1ck16L0MzN0xJbDlPanRNNENDeGpOSkQrVUhVTjF4MUlkRnFpR0tDdHcxS1VNNklacgorT2tMSGNBeWV2enJTbE9SaGIzY1d5bFdsT29jc29CbGNyK01tVEEyQzRMUnpaMjVhQmRFVVFuYm5OTWxrSm16NQorN28renhEd3RXcms3SVk3aE9STExoNUVnSmg5a3RYODV6UUtDQVFBWklMU3AyMWF6UzNLektkQXZxNXUyS1ZBVgorR3VtRGYxZG91TzVvKzVIalYyS2NmNXRremo0QTFmZlZaS3Q3YXVaQ05VUkFHNGphTkljY1NjWkJ6MzNFdEN1Qgord3ZSUXA1ZjhETjlFUUg0eWphTkliUGtGckt6Z3o1QVkwOG4xMFBCbStYM2NZNDhQMjdvUi9JRGZyMndWdENBRQorVXVmakxaQ2t1VWpkQ0ZEMXdKU0NqN0xOd2paVVJ1Q1RvY3Z0YWE3SEVxbmpXOVZCNGFBYmR0ZjUzV1JzYll3dAorWkZFV1ZwOHNZYzkxN0k2T1VKRlFjVDdqeGJ2NGtiVUFYSUNMYUx0YUxXMmJXZmRSdEZRU28wOHBtWkFLeHhDdgorNlZ1NVZMWjhMR0xWa3BpZThGRWFZZC84OWdFc0hoNkhnWTlMc0pON1d4b2FKbjFzTG1FdG15dzl4UlNXCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcnNhNDA5Nl9wdWIucGVtIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvcnNhNDA5Nl9wdWIucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZDEzZDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9yc2E0MDk2X3B1Yi5wZW0KQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBNUYybXFFc2RudFBBRWlqNkhmQ1kKK25LaUxNR25tNlBjZnNhRlllRllPMUV1Zk9qTjVaSlA5MGNyM0NyQ25OOUpPQWRwQmJUcHpBMFJjSWNBZFdCenYKK05OQXRJTXZTZmkyMldKWVZqekQwQnZzMnJDWUg3NlljNnZmeDd5OXpYWmNhbmg4Uy8ydDdCNjR4bXhPV0w0UkUKKytmOEhXVGlqQVdseVVGRGsrRHVKV3BRSzJvMGJoRTRTOG1YK3VVbDNhZk5XNUNpUHNSa3kxTjF2NGE3L0oyYjcKK2NHKzdwRFdVY2pudm1OQ044NHYrZ1N1Y1hmS2cvTGlBblpnWTd4aWgyZVBFaGtrSXFuNmtVMGNWQlFqMWNaN2gKK1hHUmFaL01ucVoyeStLaml1Rm90MnNhTmsvdjB2ampXK3hPeDc2cUpWOTlMdE4vMXF2Q1luTzFScU12MkVNOFcKK2hFckxjZ2lScmloemF6M2EyR2F1bUwzMENjTml4ckVYUnlFakZhTy9rbHFrcHVaUkhUdHlVbmt2aFVrUFVIdUgKK240NVhQeFo3YTJYUnlyU2JGeXlTMGFtVGpRd1FDdmVTUmlKRmpLNVRaNTZDVkdLRi9EbXVMU0hlVFkzdndpK1cKK1hWZEtNWVE2Wmk5andGSm8vUzRUUnB6cCtEVFNINjhGckZScUUxK3FJVnlXUWptaFd4dXZQaHFWa0cwSVQ3Q1oKKzBNOGxXZXN5c3lJNzU5ZjVEOERoRXAvS2JXTERlWFdDemNOU2JnV0dIVzVKQStmQ1Y3KzhtMFBxb2RJeTVEOEwKK2h3bTJ0STVkQTZRY3JvOFgxMjdSV1ZhVnNOOExJemRmMVRIWGZuWkltMWZEQk5VZmhYYXBLZm5GVjhFdkFMRlgKKzJHeThNM2taUTNzbGFHZWdJTGZxUktjQ0F3RUFBUT09CistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEtbm9zcGFjZS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLW5vc3BhY2UuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMmMyMzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLW5vc3BhY2UuY3J0CkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGhEQ0NBbXlnQXdJQkFnSUJIekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRRd016STJNRGt5TXpFeVdoY05NalF3TXpJek1Ea3lNekV5V2pBN01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFSEJ2YkdGeWMzTnNMbVY0WVcxd2JHVXdnZ0VpTUEwRworQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNwQWg4OVFHclZWVk9ML1RidWdtVXVGV0ZlaWIrNAorNkVXUTIrNklGbExUOFVOUVI1WVNXV1NIYS8wcjRFYjVjNzdkejVMaGtWdnRacUJ2aVNsNVJZRFFnMnJWUVVOMworWHpsOENRUkhnckJYT1hEdG8rd1ZHUjZvTXdoSHdRVkNxZjFNdzdUZjNRWWZUUkJSUUdkekV3OUErRzJCSlY4Sworc1ZQR01INFZPYXo1V3U1L2twNm1CVnZuRTVlRnRTT1MyZFFrQnRVSkpZbDFCOTJtR284L0NSbStyV1VzWk91VgorbTl6K1FWNFhwdHBzVzJuTUFyb1VMQllrbkVyY3pkRDNVbWR6OFMyZ0kvMSs5REhLTFhES2lRc0UyeTZtVDNCdQorbnM2OVdJbmlVMW1lYmxxU1plS0lQd3lVR2FQZDVlaWRsUlB0S2R1cmNCTGNXc3ByRjZ0U2dsU3hBZ01CQUFHagorZ1pJd2dZOHdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVSDNUV1B5bkJkSFJGT3dVU0xEMm92VU5aQXFZdworWXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6ZENCRAorUVlJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFYczR2UXFsSWx4ck1iRTZJd0FITGNHSnV6MTdSdS9lbgorSDliVW5uU2gxcHhhK05ITUtaSEJHM0dUMGlheHNWdFhmNTYvdFhINCtITDdudEpqcmN6R04xUGJoTUdQeXQ5NAorNTU2WmdEeGtIVDlrN0tqUEFJczlCcmpGSHZsOU55SVp6Y2J3a2lDMHFHdmR6alNmZTNBaVNZdWhYSS85L0hvZwordVV3UmVIK1QyVS9JQ0VIUTVPOGFWNW52cGdxTDNFZUVteXgzYnUrWVh0Wk1XUVVZelgreWE0VG5LVlBkcXdiZgorZWJyNnYxaExYclVGbDZyWjN3RUo2TXFVVzNTR1pSa0NWTlpVT0Q2S3kzK0VpTHdZRmh1S0dkRnFTUzBKQUFENworWk8zeVB1NWh1M0JoQVFZYXZLNFl5Zmk5SVFtdWJCcXhvcFB3eXpqRzFIUHcybGorb2FwSDB3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEtdjEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS12MS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmMWZmZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEtdjEuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRElUQ0NBZ2tDREZPaXRzY0V6VTJPdklBTHdUQU5CZ2txaGtpRzl3MEJBUXNGQURCUU1Sd3dHZ1lEVlFRRAorRXhOUWIyeGhjbE5UVENCVVpYTjBJRU5CSUhZeE1SQXdEZ1lEVlFRTEV3ZDBaWE4wYVc1bk1SRXdEd1lEVlFRSworRXdoUWIyeGhjbE5UVERFTE1Ba0dBMVVFQmhNQ1Rrd3dJaGdQTWpBeE5EQTJNVGt4TURBNU1URmFHQTh5TURJMAorTURZeE9ERXdNRGt4TVZvd1RqRWFNQmdHQTFVRUF4TVJjMlZ5ZG1WeU1TOXBiblF0WTJFdGRqRXhFREFPQmdOVgorQkFzVEIzUmxjM1JwYm1jeEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Rc3dDUVlEVlFRR0V3Sk9URENDQVNJdworRFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUtrQ0h6MUFhdFZWVTR2OU51NkNaUzRWWVY2Sgordjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaWklkci9TdmdSdmx6dnQzUGt1R1JXKzFtb0crSktYbEZnTkNEYXRWQgorUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaSHFnekNFZkJCVUtwL1V6RHROL2RCaDlORUZGQVozTVREMEQ0YllFbAorWHdxeFU4WXdmaFU1clBsYTduK1NucVlGVytjVGw0VzFJNUxaMUNRRzFRa2xpWFVIM2FZYWp6OEpHYjZ0WlN4aworNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzRmlTY1N0ek4wUGRTWjNQeExhQWovWDcwTWNvdGNNcUpDd1RiTHFaUAorY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvREpRWm85M2w2SjJWRSswcDI2dHdFdHhheW1zWHExS0NWTEVDQXdFQQorQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQVBKbDNmYlZlVEo2Z1ZBdkNvTFlNOEpZNVU3WmhyQ0NkQmdodworV3VaQlMvVFd3ZjRXTFAwRy9adFR5VE9FTmNUMGdXSGYwL1ZuWHROUHcyL3lCaldzTHRUWHhOMlhRbEVWZjNqLworV2NReFdnU0VTWWR4L3NUL3VUVzZxaWh1T05QV2tUUWl6bXg3T0c2dkJ1R3gzZzU0czkvb2VKS1hPcmFOcXVkMworRzRLQnJ5dE9hemxpTWZvS08yaG56YWV5ZHBhRHRiMnRaWDhhcE4vNktxUXBUQWNYc1dyWlJXOVhFSFdxMnNOegorSVIxbklFMUYvOWducWk5WHkwSFFwcnRlTFJVdk00dEVRMzVtNEgyMGVTNVk5Z0psRS9EcVhtTVE3YWlVOERnUAora3JqK1oxOHBjcnNzTytFdHYwQk9pUGptVTlUV1dwRE1qMzRlZjdVL09INXFKeGtTckE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5jZXJ0X3R5cGUuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5jZXJ0X3R5cGUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzNhOTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmNlcnRfdHlwZS5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEVWpDQ0FqcWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVlCZ05WQkFNVEVWQnZiR0Z5VTFOTUlGTmxjblpsY2lBeE1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFxUUlmUFVCcTFWVlRpLzAyN29KbExoVmhYb20vCit1T2hGa052dWlCWlMwL0ZEVUVlV0VsbGtoMnY5SytCRytYTyszYytTNFpGYjdXYWdiNGtwZVVXQTBJTnExVUZECitkMTg1ZkFrRVI0S3dWemx3N2FQc0ZSa2VxRE1JUjhFRlFxbjlUTU8wMzkwR0gwMFFVVUJuY3hNUFFQaHRnU1ZmCitDckZUeGpCK0ZUbXMrVnJ1ZjVLZXBnVmI1eE9YaGJVamt0blVKQWJWQ1NXSmRRZmRwaHFQUHdrWnZxMWxMR1RyCitsWnZjL2tGZUY2YmFiRnRwekFLNkZDd1dKSnhLM00zUTkxSm5jL0V0b0NQOWZ2UXh5aTF3eW9rTEJOc3Vwazl3CiticDdPdlZpSjRsTlpubTVha21YaWlEOE1sQm1qM2VYb25aVVQ3U25icTNBUzNGcktheGVyVW9KVXNRSURBUUFCCitvMkF3WGpBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUWZkTlkvS2NGMGRFVTdCUklzUGFpOVExa0NwakFmCitCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DCitBRUF3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUoyOFZ1a3RqREdrVVdjVnBNL1crWWpvaEZEYXk2NzZZb3p4CitCYkJMVTNRWmlEa2NkWFpiWC9qT2FLS0JHV3JqV2lCNnR4Y2hWNFhybHZFdFZ0UGdQclFMaWwyeGFEMjBMT3FKCitlL1pFRklBSW5kZjA2Q0FjaW1kUWFQRDZtd3cwNHYzZ1p3M2N3UFFkL2FNUUN3OXRtOTN0eWY2WVU0dUloL284CitldkcxWkJyTkhSeWlXMThrYnV1ZUxOWjJkYVlRSUlTUkpTSUZyQUVSYWNmT3ZBOHI3eVhKQ3FabkI2QVU1ajl1CitWK3lTTlczc2RaSU9UZnMxbldLVTZTRUNXbzcyZGQ4OVl2czd3Q2YzTlNaTk0yVWVtTGVPalFPbVpJSEJpUjhMCitQQWhEeGhyYTVCL1FCS2FXZVRWUW9oRXZLejc1cExBV291VUdJS2xnSGlxSjRjdkJHY2c9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWIyNmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmNydApAQCAtMCwwICsxLDIwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURQekNDQWllZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQTJXaGNOTWpFd01qRXlNVFEwTkRBMldqQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R2pBWUJnTlZCQU1URVZCdmJHRnlVMU5NSUZObGNuWmxjaUF4TUlJQklqQU4KK0Jna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXFRSWZQVUJxMVZWVGkvMDI3b0psTGhWaFhvbS8KK3VPaEZrTnZ1aUJaUzAvRkRVRWVXRWxsa2gydjlLK0JHK1hPKzNjK1M0WkZiN1dhZ2I0a3BlVVdBMElOcTFVRkQKK2QxODVmQWtFUjRLd1Z6bHc3YVBzRlJrZXFETUlSOEVGUXFuOVRNTzAzOTBHSDAwUVVVQm5jeE1QUVBodGdTVmYKK0NyRlR4akIrRlRtcytWcnVmNUtlcGdWYjV4T1hoYlVqa3RuVUpBYlZDU1dKZFFmZHBocVBQd2tadnExbExHVHIKK2xadmMva0ZlRjZiYWJGdHB6QUs2RkN3V0pKeEszTTNROTFKbmMvRXRvQ1A5ZnZReHlpMXd5b2tMQk5zdXBrOXcKK2JwN092VmlKNGxOWm5tNWFrbVhpaUQ4TWxCbWozZVhvblpVVDdTbmJxM0FTM0ZyS2F4ZXJVb0pVc1FJREFRQUIKK28wMHdTekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJRZmROWS9LY0YwZEVVN0JSSXNQYWk5UTFrQ3BqQWYKK0JnTlZIU01FR0RBV2dCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvekFOQmdrcWhraUc5dzBCQVFVRkFBT0MKK0FRRUF2YytXd1pVZW1zSnUySWlJMkNwNmxpQStVQXZJeDk4ZFFlM2taczJ6QW9GOVZ3UWJYY1l6V1EvQklMa2oKK05JbUtiUEw5eDBnMmpJRG40WnZHWUZ5d013SU8vZCsrWWJ3WWlRdzQyL3Y3UmlNeTk0ekJQbnplSGk4NmR5LzAKK2pwT09KVXgzSVhSc0dMZHlqYi8xVDExa2xjRnFHbkFSaUsrOFZZb2xNUFA2YWZLdkxYWDdLNGtpVXBzRlFoVXAKK0U1VmVNNXBWMU1jaTJFVE9KYXUyY080MEZKdkkvQzlXL3dSK0dBQXJNYXcyZnhHNzdFM2xhYWEwTEFPbGV4TTYKK0E0S09iNWY1Y0dUTTVJaDZ0RUY1RlZxMy85dnpOSVlNYTFGcXphY0JMWkY4elNIWUxFaW1YQmR6akJvTjRxRFUKKy9XelJ5WVJCUmpBSTQ5bXpIWDZyYWxlcW53PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEuZXh0X2t1LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEuZXh0X2t1LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRmODU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5leHRfa3UuY3J0CkBAIC0wLDAgKzEsMjIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRHB6Q0NBbytnQXdJQkFnSUJJVEFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRRd05EQXhNVFEwTkRReldoY05NalF3TXpJNU1UUTBORFF6V2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRk5sY25abGNpQXhNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmxMaFZoWG9tLwordU9oRmtOdnVpQlpTMC9GRFVFZVdFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EwSU5xMVVGRAorZDE4NWZBa0VSNEt3VnpsdzdhUHNGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVBRUGh0Z1NWZgorQ3JGVHhqQitGVG1zK1ZydWY1S2VwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1p2cTFsTEdUcgorbFp2Yy9rRmVGNmJhYkZ0cHpBSzZGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0xCTnN1cGs5dworYnA3T3ZWaUo0bE5abm01YWttWGlpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlVzUUlEQVFBQgorbzRHME1JR3hNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRkI5MDFqOHB3WFIwUlRzRkVpdzlxTDFEV1FLbQorTUdNR0ExVWRJd1JjTUZxQUZMUmE1S1d6M3RKUzlyblZwcFVQNno2OHgvMy9vVCtrUFRBN01Rc3dDUVlEVlFRRworRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZworUTBHQ0FRQXdDd1lEVlIwUEJBUURBZ1hnTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNQk1BMEdDU3FHU0liMworRFFFQkN3VUFBNElCQVFBTnRpWVIyUDYrYTdyRXRKQVJJZ3B1cncxVVJZZWpBVGJicDNaaGFIQlc2MDNXeWIyKworS0p0bTFLUEN6b2p1L3FUUnQ2NVlZa3QrdHUxd1R6YW15cmtQeHQ4YkJLbXhpV251NWoxSEx4ZGpPejhWVzlsZgordlRiNWVnUjRkVTllTlhuaS81UWt6cmRrTU8rb2I0cHVEWFk3eXRQdUdYNllmTlZoQ2tyaEJsWURKTkU1N0NrSwordnBDTmozK1RlOFBFa1dQQUVhVWhxQ25RazZxdlB2cEJmYy9ocWd3emxSTXQzdTVOa2lWT3VINzJkdHI0Zk9JMQorbmxBVThEMnd1dkRWcjNYNTI4MU9OTkV0SFU2clhlOTh2bFV6UzlRVjlsQkRkc085blJZSnp2Mk5iMWNqUklNNQorSlpsMElMTFIydGM2RS9XNVlYYWxOcDM3amZyRmlpMVU5V3JKCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODFhNWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmtleQpAQCAtMCwwICsxLDI3IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlFb2dJQkFBS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmxMaFZoWG9tL3VPaEZrTnZ1aUJaUzAvRkRVRWVXCitFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EwSU5xMVVGRGQxODVmQWtFUjRLd1Z6bHc3YVBzCitGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVBRUGh0Z1NWZkNyRlR4akIrRlRtcytWcnVmNUtlCitwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1p2cTFsTEdUcmxadmMva0ZlRjZiYWJGdHB6QUs2CitGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0xCTnN1cGs5d2JwN092VmlKNGxOWm5tNWFrbVhpCitpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlVzUUlEQVFBQkFvSUJBQmFKOWVpUlFxNFlwdit3CitVVGNWcExDMG9UdWVXemNwb3IxaTF6akc0VnpxZS9PazJGcXlHVG9HS01sRks3SHd3YStMRXllSjN4eVY1eWQ0Cit2MU13OWJEWkZkSkMxZUNCam9VQUh0WDZrOUhPRTBWZDZ3b1ZRNFZpNk9QSTFnN0I1TW5yLzU4ck5ybk42VE1zCit4NThORjZldWVjd1RVODExUUpyWnRMYlg3ajJDcjI4eUIyVnM4cXlZbEh3Vnc1amJET3Y0M0Q3dlU1Z21sSUROCiswSlFSdVdBbk91UHpaTm9KcjRTZkpLcUhOR3hZWVk2cEhaMXMwZE9UTElEYi9COEtRV2FwQTJrUm1aeWlkMkVICitud3pnTGJBc0hKQ2YrYlFuaFhqWHV4dFVzcmNJTDhub1pMYXpsT014d05FYW1tZ2xWV1cyM1VkL1FSbkZnSmc1CitVZ2NBY1JFQ2dZRUExOXVZZXRodDVxbXdkSisxMm9DNnplTyt2WExjeUQ5Z29uMjNUNUo2dzJZVGhsZDcvT1cwCitvQXJRSkdna0FkYXEwcGNUeU9JanRUUVZNRnlnZFZtQ0VKbXhoLzNSdXRQY1RleWRxVzlmcGhLRE1lajMySjhlCitHbmlHbU5HaWNsYmNmTk9TOEU1VEdwNDQ1eVpiOVAxKzdBSG5nMTZiR2czWWtqNUVBNEcrSENjQ2dZRUF5SEFsCisvL2VrazhZalFFbG0rOGl6THRGa3ltSUswYUN0RWU5Qy9SSVJoRllCZUZhb3RDNWRTdE5oQk9uY240b3ZNQVBECitsWC85MnlEaTlPUDhQUExOM2E0QjlYcFczay9TUzVHcmJUNWN3T2l2QkhObGxaU211LzJxejVXUEdjalZDT3JCCitMWWwzWVdyMmgzRUdLSUNUMDNrRW9Ua2lEQnZDZU9wVzdjQ0dsMmNDZ1lCRDV3aG9YSHoxK3B0UGxJNFlWalp0CitYaDg2YVUrYWpwVlBpRXlKODRJNnhYbU80U1pYdjhxNkxheWNSMFpNYmNMK3pCZWxNYjRaMm5CdjdqTnJ0dVI3CitaRjI4Y2RQditZVnIzZXNheWJaRS83M1ZqWHVwNFNRUEg2cjNsN3FLVFZpK3k2K0ZlSjRiMlhuOC9Nd2duVDIzCis4RUZyeWU3d216cHRocmpPZ1puVU1RS0JnRTlMaHN6LzVKME5pczZZKzJQcW4zQ0xLRXVrZzlFd3RxZGN0MnkwCis1RGN0YTBGM1R5Q1JJeGxDREtUTC9Cc2xxTXRmQWRZNEgyNjhVTzArOElBUU1uOWJvcXpCckhJZ3MvcHZjNWt4CitUYktIbXcyd3RXUjZ2WWVyc0JLVmdWcGJDR1NSc3NEWUhHRnUxbjc0cU00SEovUkdjUjF6STlRVWUxZ29wU0ZECit4RHRMQW9HQVZBZFd2cnFEd2dvTDJoSFczc2NHcHhkRS95Z0pET3dIbmYrMUI5Z29LQU9QNWxmMkZKYWlBeGYzCitlY3RvUE9nWmJDbW0vaWlEbWlndTcwM2xkM08rVm9DTERENHF4M1IrS3lBTEw3OGd0VkpZelNSaUtoemdDWjNnCittS3NJVlJCcTRJZndpd3lNTkcyQllaUUF3YlNEampQdG4va1BCZHVQelBqN2VyaUJ5aEk9CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNGU1OWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLmtleV91c2FnZS5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEVHpDQ0FqZWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVlCZ05WQkFNVEVWQnZiR0Z5VTFOTUlGTmxjblpsY2lBeE1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFxUUlmUFVCcTFWVlRpLzAyN29KbExoVmhYb20vCit1T2hGa052dWlCWlMwL0ZEVUVlV0VsbGtoMnY5SytCRytYTyszYytTNFpGYjdXYWdiNGtwZVVXQTBJTnExVUZECitkMTg1ZkFrRVI0S3dWemx3N2FQc0ZSa2VxRE1JUjhFRlFxbjlUTU8wMzkwR0gwMFFVVUJuY3hNUFFQaHRnU1ZmCitDckZUeGpCK0ZUbXMrVnJ1ZjVLZXBnVmI1eE9YaGJVamt0blVKQWJWQ1NXSmRRZmRwaHFQUHdrWnZxMWxMR1RyCitsWnZjL2tGZUY2YmFiRnRwekFLNkZDd1dKSnhLM00zUTkxSm5jL0V0b0NQOWZ2UXh5aTF3eW9rTEJOc3Vwazl3CiticDdPdlZpSjRsTlpubTVha21YaWlEOE1sQm1qM2VYb25aVVQ3U25icTNBUzNGcktheGVyVW9KVXNRSURBUUFCCitvMTB3V3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUWZkTlkvS2NGMGRFVTdCUklzUGFpOVExa0NwakFmCitCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBT0JnTlZIUThCQWY4RUJBTUNBZUF3CitEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBQktDLzF4MG01N0VZNEg0MTJ1ZTNnaENXZ2cwN1ZjUkthbW5VU1RzCit0bnFJNVQwbVN2dVByeGhJTmRRQjYzNjBpYmN0QmtYUDNTOXJ4R0hpVWRlSy9KcXhZczJZYW1DczUwVFNXcG9uCitwNEh6Y21qc3cxWWdYc1E2cG1Zd2t6VTAzenFzMzYxZ3Q3SlNPekwyZE4wSWp3SXk0N3FmTFFiL0FYaFgySW1zCis3Z0J1cVZwWXFKdVNIUjBxc04vYzZXZ0lFM0lyYksxTUI2Q0pUa3hCZmNTYzVFNG9VSUJIbXd3K1JTVkxPY3pNCituR2szVTEzZG1mRzBuZGhNdHJNeXl4QlpaU1V3b1pMalJaNko1bUhTditrOG9vMVBZUWVpaXZORVA1M21nVmFZCitoYTBnTFVJazZ6TkJScFkxdVVteFErUlFTTUl5WVBCYjFSZWRIbjJzOEVsMm1sbz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucHVia2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5wdWJrZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjNjY5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucHVia2V5CkBAIC0wLDAgKzEsOSBAQAorLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KK01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmwKK0xoVmhYb20vdU9oRmtOdnVpQlpTMC9GRFVFZVdFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EKKzBJTnExVUZEZDE4NWZBa0VSNEt3VnpsdzdhUHNGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVAKK1FQaHRnU1ZmQ3JGVHhqQitGVG1zK1ZydWY1S2VwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1oKK3ZxMWxMR1RybFp2Yy9rRmVGNmJhYkZ0cHpBSzZGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0wKK0JOc3Vwazl3YnA3T3ZWaUo0bE5abm01YWttWGlpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlUKK3NRSURBUUFCCistLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmNlcnRfdHlwZSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmNlcnRfdHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc3ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuY2VydF90eXBlCkBAIC0wLDAgKzEsMTcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDcFRDQ0FZMENBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBa01DSUdDU3FHU0liM0RRRUpEakVWCitNQk13RVFZSllJWklBWWI0UWdFQkJBUURBZ0JBTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFCOTVQa2pwZy9OCitKYmdsNW5aY0FrOG1hR01wVUZscmhKUzRrR3V0UUtadWdOWDl2OGNmQUJXOTA1SUhZWFYxZG02enhWY3llcVpNCitGaU9nYlY5NDNmdTVKYnVmb2F6ZFlYbm5SMi9pS01pZ3FYNEN6WnJLM0Y1WnplZ3hrZkRJZkRybi9zaEMrcldiCitTUzVXQlZMSjNRTmo5dnduMy9iNjZJUmJwL1ZpT3dIeDcrOUpUNEsvckxJZC95bmpZZjJUNTdBc21OZC9qcHRjCitaczE5ZkdndHJVWHdlV2tsaUVaTjJ6RTQ3Q2M1M2preDYrTGk0VE5zNEJqazVQL2FYckNQMGZCd2dHdDJLNllXCitkUS9ucjBQd0liWHpWbGdVdWtTVEhrSkpmaEY0WS9XcWNVZk9QclJkdyt6eE9MdXNKOW56SkJSMEZPb2hjQnhNCitrUEJWbmEwZHplL28KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEua2V5X3VzYWdlIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEua2V5X3VzYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1M2FlZDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5rZXlfdXNhZ2UKQEAgLTAsMCArMSwxNyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUNuekNDQVljQ0FRQXdQREVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sb3cKK0dBWURWUVFERXhGUWIyeGhjbE5UVENCVFpYSjJaWElnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVAKK0FEQ0NBUW9DZ2dFQkFLa0NIejFBYXRWVlU0djlOdTZDWlM0VllWNkp2N2pvUlpEYjdvZ1dVdFB4UTFCSGxoSloKK1pJZHIvU3ZnUnZsenZ0M1BrdUdSVysxbW9HK0pLWGxGZ05DRGF0VkJRM2RmT1h3SkJFZUNzRmM1Y08yajdCVVoKK0hxZ3pDRWZCQlVLcC9VekR0Ti9kQmg5TkVGRkFaM01URDBENGJZRWxYd3F4VThZd2ZoVTVyUGxhN24rU25xWUYKK1crY1RsNFcxSTVMWjFDUUcxUWtsaVhVSDNhWWFqejhKR2I2dFpTeGs2NVdiM1A1QlhoZW0ybXhiYWN3Q3VoUXMKK0ZpU2NTdHpOMFBkU1ozUHhMYUFqL1g3ME1jb3RjTXFKQ3dUYkxxWlBjRzZlenIxWWllSlRXWjV1V3BKbDRvZy8KK0RKUVpvOTNsNkoyVkUrMHAyNnR3RXR4YXltc1hxMUtDVkxFQ0F3RUFBYUFlTUJ3R0NTcUdTSWIzRFFFSkRqRVAKK01BMHdDd1lEVlIwUEJBUURBZ0hnTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDajZqQ3Uwd0U1T1ExSkdRd1oKK0ZOd1BxWnJ2S250U3EyeUxJYmdtR3h3bHZETHhPem4wS21pZFNGaUtScWgwS1h3ajlzaW9kbHo1QzBkOXRVcXEKKzd4VVhnK2ord0RIcVVWOHpvNDJKa2UrVW1XWEZQcG5YeC9mREZHVElUZExTbjhaRHhrdDMxRVNMVEVWWnZQRkQKK29kbStDK3pXSnRLcHlMKzlvcDRLdnlCUTFNWjluV1pwd01hSzRnNG1kdE9Jc3o3NWdNYTc0dzhaVDdWemhHTVkKK2NaR21hZnNsN3grK0dERHRmMG9DUGdyajl4eStPdnYvR3lVQmFCKzZsd2VmbFRmUERUUlNvTjBtZUZsUDV5bkYKK3ZxY0JNNUpLSDJGVVFJaXpmYzlvNlo4dEt4ZTlGQ292M3g4c3pBdW9NUkE3YmpoVm5nZVFJckVrVGNhUUJ2QlkKK05hbEMKKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEua3UtY3QgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5rdS1jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA1N2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEua3UtY3QKQEAgLTAsMCArMSwxNyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUNzakNDQVpvQ0FRQXdQREVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sb3cKK0dBWURWUVFERXhGUWIyeGhjbE5UVENCVFpYSjJaWElnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVAKK0FEQ0NBUW9DZ2dFQkFLa0NIejFBYXRWVlU0djlOdTZDWlM0VllWNkp2N2pvUlpEYjdvZ1dVdFB4UTFCSGxoSloKK1pJZHIvU3ZnUnZsenZ0M1BrdUdSVysxbW9HK0pLWGxGZ05DRGF0VkJRM2RmT1h3SkJFZUNzRmM1Y08yajdCVVoKK0hxZ3pDRWZCQlVLcC9VekR0Ti9kQmg5TkVGRkFaM01URDBENGJZRWxYd3F4VThZd2ZoVTVyUGxhN24rU25xWUYKK1crY1RsNFcxSTVMWjFDUUcxUWtsaVhVSDNhWWFqejhKR2I2dFpTeGs2NVdiM1A1QlhoZW0ybXhiYWN3Q3VoUXMKK0ZpU2NTdHpOMFBkU1ozUHhMYUFqL1g3ME1jb3RjTXFKQ3dUYkxxWlBjRzZlenIxWWllSlRXWjV1V3BKbDRvZy8KK0RKUVpvOTNsNkoyVkUrMHAyNnR3RXR4YXltc1hxMUtDVkxFQ0F3RUFBYUF4TUM4R0NTcUdTSWIzRFFFSkRqRWkKK01DQXdDd1lEVlIwUEJBUURBZ0hnTUJFR0NXQ0dTQUdHK0VJQkFRUUVBd0lBUURBTkJna3Foa2lHOXcwQkFRVUYKK0FBT0NBUUVBTmxORzloVzg1Mk96VktqMlo4VHRVOWp4c3RBb1NDSDl5YzlDb2o0VncyVFRqczF6Y3VCV3NNbDEKKzJiZjJJNlp2RUg2WmhjUVk3aTdueUhReVBscUU0bDZVOUQ4Y3Q5NjdRTjdzbXVBSE5ZMkhpUTIrK2VDQlRIY2sKK1BkdEdKQXpJdk5sWGNvcU5pOFVDNWZHZXBOdEkxdXNObzQxU0tNdmJnNm5HQTVnZGNRS2s3Q1ZsazhsckQwcUkKK1huL0h2alNSb0RFNFpHeEF0TnZQWFdvckdTeHRnY3k4RU1Qb1hWVWFiNWZOdDhxLy94L05RNHlFUUtQcmV4bVIKK0l1T2lROFZXOFFadGtPUkdwWmJHU3Zza1UwV2ZLQU51aTR6Q2NYWVJjNG1WUjRXZjBDK2Z5SGVpaGhqc2xTblQKK1JiQzduUW41SFNIcDMxcUpscjgwUW9keXdhSzFEZz09CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM1M2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEubWQ0CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJBd1VBCitBNElCQVFBUFBVell2VUErSFFUdGVNaGtHY3VENlh0c1ozaTJnUWRER2dMVXh0TUFWRncrLzVaUzZsK1dxUGdxCitXUUlPc0VJTlBIbmpVQU16NXBqYkZkRnF1N1g1RzI5VEhhMmRhMFVhMmJKTy9idTNDWjZFa3NHbWNscWFRMlpsCit2ZmtXYUkzYmZQRmg4ZUtIRitGNW9hVnAwZ0h2aUNha05xeG90NHJyWmRMOHBuSkM1SkorZjc2eTZTZ0hZT2FvCitTR0N2MWdZVVJoSXNYMGdXQ3FsZHNDd3hKUUZFaWc5SElTVWNYVmlHR1ZuTGRzaFV0dUtMOXlOWi9ITkFPdU9rCis3TjdhN3VyOEtNbXZhcjFqa1RxK3pLU1N1U3J6bVUySnZ4RmRxVTBHcjdBMzVqZ25WRzhzajY2TDRsQWN3ZG9HCitzUDhPbUMxaFdoNFUzYXZINkVIZEVHOGx3MFU3CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBmNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEubWQ1CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJCQVVBCitBNElCQVFBUXgrRWpzUFVVWWFjM3QxdjI0bFBPWXFyS001MlhZRHdTbndXNU9ram4rWXhKb3daeWQ4Z2Z6bWZwCit2cDQrLy9oNVAzVmxRRHdhWGVNVGdLQ2l6amYramRBQ05KZTYwL1J4WXBZRktydnk2N1pTci9oN2ZoZG01Mkp6CisvdFNDYmg2RndIMTA3NWxvQnVXTHV6RDdQdm0xWDFGSm1icDJjZWFKb3pEblhUQUtGZFZUcWRpUll3eWc0aVBsCitrcmhPTkdOZTEzMmFZWnRGc3NkalNDaW0rYkIrL3NhZ1IzU3VKUG9RKzhFakRYWUc3NW40WlZhNGRBY2pWb1lrCitwZzBZSzVjdUgxRkhDWE9CTzROMStHMHNrTDhBWndsdityaEtRazZscEd0K0FROExTakN6MnpIVW5mcGFYWFdwCitzMWRxOXVmamJKZGFIRGprQlkxZ1ozQk1tWFB3CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzYxYmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGExCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJCUVVBCitBNElCQVFDQUNPMUdvQnhNZEdvV0x0azBVU2JaSUprSmlkdnJhVHl1dVZNTXZUYVJIQXNlZXBOWld0YkkyVmpaCis4QllGS25ZOXVTWDR1b3pPRGk1VGt2MmRDU3dBRkZKczdic0FMcXBqcWZVMWt3UVNiZkxvVDh0d2Y3bzUxWnc4CitMQUVLVzBHcGlmaEk0TkpBYUllaDVFeWZNZVhINVJGQXozMVQ5NUVhdDU2ZUxjZXdESzVuV1VkUXgvS2trU0liCitBRktxUEt6OEY5S1MxdEV0eTVVWW1DMVFWK3E3TkcxYU9yV2N1cXZzenB5VWJzei91MzJRSDBMcDdFM2xYTXQxCit2eUZmQXNBNktCTFRVbXlUVlFIejRzblFBYjVDRk5MT3JYbkhidGplbTdabWhEekUxRFMvN284Tks0OXp1WFVXCitZVU1QUnBaRFNOVXBJQm1aczJOQlRBUlNFYzA0CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTIyNCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTIyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTIxOTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMjI0CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJEZ1VBCitBNElCQVFBZWQyY1lZOVAveEpOSEJySER4amVoNXVGeURza0N2dzA2S3Z5OEZKdDZHLzBuY25maFNwUG5ldmFvCitVUGYyamswN2lNSUZpYURES2MzeWc0SDJVaDQ0K1VkMllkQXhIWVd0dEtudmo0M1hTb1dTbm1VREVpVXFnUEFQCitDNEVtZ1BFZnN4dGorbkk1ZndJR0V2ZmIzbUozMUZKeG5TSlJFY2FIOHVxeVhXNHZmRjhlMG8rOWdkTSthVHcvCitPSmorZFl2ZXBmSXBCKzFqSXExc3JyOU5MSmpLbHZIQmhRRmJJY0lnUVhKS2N3NXowNGhnamRvU3VRY2tNTzV6CiszZ1ZhYUhmakNKUVQxdERXZmpMVENjZURvSlBza2VvN3hiRHZYbkNobytaTHR5TWVzb0N2T0VlWkxKaERZVGx3CitINWp3NmY5R1c4UTlYUCtFUWNmNlpodG1ZTHJVCistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTI1NiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTI1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDRjNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMjU2CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJDd1VBCitBNElCQVFCWS8xbm5ZUTNUaFZ5ZVpiMVoyd0xZb0haNXJmZUpDZWR5UDdOL2dqSlpqaHJNYndpb1VmdDJ1SHBiCisrT1pRZnhSWEpUYnRqLzF3cFJNQ29VTUxXemFwUzcveEd4M0lqb1B0bDQyYU00TSt4Vll2YkxqRXhMMTNrVUFyCitlRTRKV2NNSWJURVBvbDJ6U2RYL0x1QittMjdqRXA1VnN2TTJ0eTlxT3cvVDRpS3dqRlNlNnBjWVoyc3BrczE5CiszbHRnam5hYW13cUtjTjl6VUEzSUVSVHNXanI1ZXhLWWdmWG0yT2VldVNQMHRIcjdEaCt3LzJYQTlkR2NMaHJtCitUQTRQOFFqSWdTRGx5em1oWVltc3Jpb0ZQdUNmZGkxdXpzOGJ4bWJMWGJpQ0daOFRETXk1b0xxTG8xSytqMnBGCitveCtBVEhLeFEvWHBSUVArMk9UYjlzdzFrTTU5CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTM4NCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTM4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzc2NGY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMzg0CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJEQVVBCitBNElCQVFBL1hWWXhoQ1dXV0V4eStPNXkvekkxMTIxTDVNUGpybEx5cGdQK1pEVThUVXE4ZnVzcnlZQWdWQVRvCituanBmZjZSRjlRVEtaaG91Rm1nd2ljRW5FNlh1dzFMWnQ0U1dza0V5SVNNc1RlbXgzZWlZM1lTdTd1cXBNSUloCitoNWh0MXFHeGtGWmFMRzBSRUlsVVdxVlRLazlvV0xPZzZwditxZWVzMDBTQW4wMzFWYzJDMysrY3RRT05VcmtvCitmYzhhQUdBaTlEdlN1Rmtmamhaa3A4RnI0ZDdidUhRUG1KaVl4UnAyN0s1TmJWeHJyMEdDQjN3aDdydUdjOE1jCitLK1BOUXZvejQyNWRISzNkSHplb0lXRDJLYTI1bWJqZ2xiVzFycUFkVGtaU1lIMlFxWlRIc0tDcjB1NWlQdFNECitnRjdLMEFNdVQyTEllU3MxcDgybitjTEY3OGZ6CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTUxMiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTUxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Q3MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhNTEyCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDZ1RDQ0FXa0NBUUF3UERFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUm93CitHQVlEVlFRREV4RlFiMnhoY2xOVFRDQlRaWEoyWlhJZ01UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCitBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKdjdqb1JaRGI3b2dXVXRQeFExQkhsaEpaCitaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCUTNkZk9Yd0pCRWVDc0ZjNWNPMmo3QlVaCitIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsWHdxeFU4WXdmaFU1clBsYTduK1NucVlGCitXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrNjVXYjNQNUJYaGVtMm14YmFjd0N1aFFzCitGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQY0c2ZXpyMVlpZUpUV1o1dVdwSmw0b2cvCitESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBQWFBQU1BMEdDU3FHU0liM0RRRUJEUVVBCitBNElCQVFCSDc4SnJJYm9XVWxPaVV6RXd4dVlrYVJCcjIyRGZkU0hsTlZqbmVuclRzU3NTZGZQZW5mclViczQyCitOZnpoSnR2TEJuRE1zOW9sc2l5UE5LWm5ST21qbC80RGE1U2NWQmZkQTdvU0ltd2RzYUwwa3JBanU4bEpvc3k3Cit5cHFOZWpRUURnakwwMEhrYVZ5cWpuRVdZNjhlbkFrYUs2NHN1UTR3MHBrR210ZFp5ZzBuQmlIMVZJNzJQY1BSCitGdTJ3eFNrdnZZaitCY0hWQVkvR1dSTVRIdzFta21zUW5hN0FzWjFNRklGM3ljSVc1Rm9tNmQwd3BCNmNsSjNNCit2TlRCYzdrWklSMUJReWJseVU5NmFjZXN4SlVSSm41eE85WWY5T1NzVGJkN1htNXhLNkRwUVd4RkZFZ2RWdGlyCitoU0FxdHA1NG5WbkxlNFFpaG1WQWxNOHp0Mk9OCistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEudjEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMS52MS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0YjJhNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEudjEuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzlEQ0NBZHlnQXdJQkFBSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRFd01qRXlNVFEwTkRBMldoY05NakV3TWpFeU1UUTBOREEyV2pBOE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hHakFZQmdOVkJBTVRFVkJ2YkdGeVUxTk1JRk5sY25abGNpQXhNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcVFJZlBVQnExVlZUaS8wMjdvSmxMaFZoWG9tLwordU9oRmtOdnVpQlpTMC9GRFVFZVdFbGxraDJ2OUsrQkcrWE8rM2MrUzRaRmI3V2FnYjRrcGVVV0EwSU5xMVVGRAorZDE4NWZBa0VSNEt3VnpsdzdhUHNGUmtlcURNSVI4RUZRcW45VE1PMDM5MEdIMDBRVVVCbmN4TVBRUGh0Z1NWZgorQ3JGVHhqQitGVG1zK1ZydWY1S2VwZ1ZiNXhPWGhiVWprdG5VSkFiVkNTV0pkUWZkcGhxUFB3a1p2cTFsTEdUcgorbFp2Yy9rRmVGNmJhYkZ0cHpBSzZGQ3dXSkp4SzNNM1E5MUpuYy9FdG9DUDlmdlF4eWkxd3lva0xCTnN1cGs5dworYnA3T3ZWaUo0bE5abm01YWttWGlpRDhNbEJtajNlWG9uWlVUN1NuYnEzQVMzRnJLYXhlclVvSlVzUUlEQVFBQgorb3dJd0FEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFvWlZ1Vmk3YklzbEtnTUpoZWpTRlhpTytJQ016MWZtSworYjB0UE42OG1SWWhJL2dzalJUMGNtWDZHVU5yZytVNW1jQldoTXdIZ3l2eDFDQVJVNFlUb0taeGNYR05MMERQZAorWjFoRjhuQ3JKQ1pCUXZOdVdFN3MwdWZ3OTJ4ejVaZnVLa1Z4aTk0UllSNTI5RjZnemdsNHJwWDhVUVZ1MnltLworOXBUbEhLcjRNS2k5TE5wcHlKTVM4OXVSY2IyRkpGTWRoQUtiaE50YklqSTlxR1o3eC8vMGJlbEFhV2hxMzg5dQorNlhXRm5adDM1UFU2Wno2WWJBUTVwalpZc1Rhb2h1dWZncnBPbEZQVXVjNHVSK1JmR0hJUTZpZDEybFphUUMybQorT0ZJQkRjVTB4MWNGZlBmTWdWZEJMZjZrbFB0L3YvdEQ3N213eDBlenRTcDI4TklmK0FDdzhBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDg4MzMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMTAua2V5CkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSGNDQVFFRUlMQkRNczdiUlZ4Vmc2b3ZUcGYyekI5bSsyMmpZN1IzTE5LUnZDUGZhNllKb0FvR0NDcUdTTTQ5CitBd0VIb1VRRFFnQUVIRzMzNmRxbDZxR2NzbklacUFrY2M2M2VGYnZlcHVPelR3WG9iUkF1T21rM2w0QTV3WFgvCit2czV3QWF3TFgxd1VUVU0vQUVTSG1BWnJKSzl0cTVTbzhnPT0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZTg4OWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxMF9pbnQzX2ludC1jYTIuY3J0CkBAIC0wLDAgKzEsODAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQldqQ0NBUUNnQXdJQkFnSUJTekFLQmdncWhrak9QUVFEQWpCS01Rc3dDUVlEVlFRR0V3SlZTekVSTUE4RworQTFVRUNoTUliV0psWkNCVVRGTXhLREFtQmdOVkJBTVRIMjFpWldRZ1ZFeFRJRlJsYzNRZ2FXNTBaWEp0WldScAorWVhSbElFTkJJRE13SGhjTk1UVXdPVEF4TVRNME56VTFXaGNOTWpVd09ESTVNVE0wTnpVMVdqQVVNUkl3RUFZRAorVlFRREV3bHNiMk5oYkdodmMzUXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcQorb1p5eWNobW9DUnh6cmQ0VnU5Nm00N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWQorQm1za3IyMnJsS2p5b3cwd0N6QUpCZ05WSFJNRUFqQUFNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUURMYytJbworcmc4VnhFYkNnVnY4aUgra09JRW45TWpocHZLenZ3VW9WKzZyalFJZ1pVL1JYQXljMWErSDIrc29HZk5FSU9CUQorQXpPM3BKeDdXSkFBcFp1QlgxUT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQndqQ0NBVWVnQXdJQkFnSUJTVEFLQmdncWhrak9QUVFEQWpCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUI0WERURTFNRGt3TVRFek5ESXhPRm9YRFRJMU1EZ3lPVEV6TkRJeE9Gb3dTakVMTUFrRworQTFVRUJoTUNWVXN4RVRBUEJnTlZCQW9UQ0cxaVpXUWdWRXhUTVNnd0pnWURWUVFERXg5dFltVmtJRlJNVXlCVQorWlhOMElHbHVkR1Z5YldWa2FXRjBaU0JEUVNBek1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRQorNzMyZldITE5QTVBzUDFVMWliWHZiNTVlcmxFVk1scFhCR3NqK0tZd1ZxVTFYQ21XOVo5aGhQN1gvNWpzL0RYOQorMkovdXRvSHlqVXRWcFFPemRUcmJzYU1kTUJzd0RBWURWUjBUQkFVd0F3RUIvekFMQmdOVkhROEVCQU1DQjRBdworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QUo5UlgzOGJodCtSTnNRSTJHVXBOaEMvWStUYjFPVTc0TzRpRWE2KworQ2tqQldUcEx0SFJLVmRacTdTVDB3azFMc1FJeEFJVWk4TDFWeDREdVVQMGJKeElYL251SnFsQm5CRytxUmhTZgorVmdIS2dTeUhpZHBaQUpwYVJpNElrWTUwNENZL1lnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZUQ0NBZEdnQXdJQkFnSUJEekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09USTBNVFl3T0RReVdoY05Nak13T1RJeU1UWXdPRFF5V2pCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4T2loM2ZYNVNMZU4xZG1GbmNRbAorV013OStZNnNYYmxobHJYQnhoWHhqd2R3cENIRU5uK2ZvVVZkcnFZVllhN1N1djNRVmVPNm5KMTlIM1FOaXhXOAoraWsxUCtoeHNiYXE4YnRhNzh2QXlIbUM0RW1YUUxnMXc3b3hiOVE4MnFYMVlvNEdWTUlHU01CMEdBMVVkRGdRVworQkJRUGliMWpRZXZMWGhjby8yZ3dQY0dJMEp4WU9UQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVgorRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrdworRndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSQoraHZjTkFRRUxCUUFEZ2dFQkFBamVhVFVhQ0JpWFQxQ1lMVnI2VUZTZVJOWkJyRFBuajZQd3FVUVR2Z0I1STVuNgoreVhxb0U0UllEYUVMMExnMjRqdUZ4STI2aXRCdXlwdG82dnNjZ0dxNzdjZnJQL2F2U2R4VSt4ZVo0YkNXdmgzTQorZGRqOWxta28yVThJOEdoQmNIcFN1SWlUdmdLREI4ZUtramVxM0FzTEdjaEhEdmlwOHBCM0loY05mTDdXOTRaZgorNy9sSDlWUWlFMy9weDdhbUQzMmNpZG9QdldMQTlVM2YxRnNQbUpFU1V6MHd3TmZJTnBEam1QcjhkR2JrQ04rTQorQ0ZoeG82c0NmSzhLTFlHNG5ZWDhGd3hWUjg2a3BTck85ZTg0QVgwWVliZHp4cHJiYzJYT2FlYko4K0JEbXp1dAorQVJrRDdEVFhyb2ROMXdWN2pRSmtyVXVFd1BqOVJodmsrTUZSa2F3PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCV2pDQ0FRQ2dBd0lCQWdJQlN6QUtCZ2dxaGtqT1BRUURBakJLTVFzd0NRWURWUVFHRXdKVlN6RVJNQThHCitBMVVFQ2hNSWJXSmxaQ0JVVEZNeEtEQW1CZ05WQkFNVEgyMWlaV1FnVkV4VElGUmxjM1FnYVc1MFpYSnRaV1JwCitZWFJsSUVOQklETXdIaGNOTVRVd09UQXhNVE0wTnpVMVdoY05NalV3T0RJNU1UTTBOelUxV2pBVU1SSXdFQVlECitWUVFERXdsc2IyTmhiR2h2YzNRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFRY2JmZnAycVhxCitvWnl5Y2htb0NSeHpyZDRWdTk2bTQ3TlBCZWh0RUM0NmFUZVhnRG5CZGYrK3puQUJyQXRmWEJSTlF6OEFSSWVZCitCbXNrcjIycmxLanlvdzB3Q3pBSkJnTlZIUk1FQWpBQU1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRExjK0lvCityZzhWeEViQ2dWdjhpSCtrT0lFbjlNamhwdkt6dndVb1YrNnJqUUlnWlUvUlhBeWMxYStIMitzb0dmTkVJT0JRCitBek8zcEp4N1dKQUFwWnVCWDFRPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCdERDQ0FUcWdBd0lCQWdJQlRUQUtCZ2dxaGtqT1BRUURBakJMTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEtUQW5CZ05WQkFNVElGQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVWRElFTkJNQjRYRFRFMU1Ea3dNVEUwTURnME0xb1hEVEkxTURneU9URTBNRGcwTTFvd1NqRUxNQWtHCitBMVVFQmhNQ1ZVc3hFVEFQQmdOVkJBb1RDRzFpWldRZ1ZFeFRNU2d3SmdZRFZRUURFeDl0WW1Wa0lGUk1VeUJVCitaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQkRRU0F6TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCis3MzJmV0hMTlBNUHNQMVUxaWJYdmI1NWVybEVWTWxwWEJHc2orS1l3VnFVMVhDbVc5WjloaFA3WC81anMvRFg5CisySi91dG9IeWpVdFZwUU96ZFRyYnNhTVFNQTR3REFZRFZSMFRCQVV3QXdFQi96QUtCZ2dxaGtqT1BRUURBZ05vCitBREJsQWpBSlJ4YkdSYXMzTkJtazlNbkdXWGc3UFQxeG5SRUxIUldXSXZmTGRWUXQwNmwxL3hGZzNadVBkUWR0CitRaDdDSzgwQ01RRDd3YTFvMWE4cXlES0JmTE42MzZ1S21LR2dhMEUrdllYQmVGQ3k5b0FSQmFuZ0dDQjBCMnZ0CitwejU5MEp2R1dmTT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZUQ0NBZEdnQXdJQkFnSUJEekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09USTBNVFl3T0RReVdoY05Nak13T1RJeU1UWXdPRFF5V2pCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4T2loM2ZYNVNMZU4xZG1GbmNRbAorV013OStZNnNYYmxobHJYQnhoWHhqd2R3cENIRU5uK2ZvVVZkcnFZVllhN1N1djNRVmVPNm5KMTlIM1FOaXhXOAoraWsxUCtoeHNiYXE4YnRhNzh2QXlIbUM0RW1YUUxnMXc3b3hiOVE4MnFYMVlvNEdWTUlHU01CMEdBMVVkRGdRVworQkJRUGliMWpRZXZMWGhjby8yZ3dQY0dJMEp4WU9UQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVgorRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrdworRndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSQoraHZjTkFRRUxCUUFEZ2dFQkFBamVhVFVhQ0JpWFQxQ1lMVnI2VUZTZVJOWkJyRFBuajZQd3FVUVR2Z0I1STVuNgoreVhxb0U0UllEYUVMMExnMjRqdUZ4STI2aXRCdXlwdG82dnNjZ0dxNzdjZnJQL2F2U2R4VSt4ZVo0YkNXdmgzTQorZGRqOWxta28yVThJOEdoQmNIcFN1SWlUdmdLREI4ZUtramVxM0FzTEdjaEhEdmlwOHBCM0loY05mTDdXOTRaZgorNy9sSDlWUWlFMy9weDdhbUQzMmNpZG9QdldMQTlVM2YxRnNQbUpFU1V6MHd3TmZJTnBEam1QcjhkR2JrQ04rTQorQ0ZoeG82c0NmSzhLTFlHNG5ZWDhGd3hWUjg2a3BTck85ZTg0QVgwWVliZHp4cHJiYzJYT2FlYko4K0JEbXp1dAorQVJrRDdEVFhyb2ROMXdWN2pRSmtyVXVFd1BqOVJodmsrTUZSa2F3PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMTBfaW50M19pbnQtY2EyX2NhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMl9jYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1Y2M0YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMl9jYS5jcnQKQEAgLTAsMCArMSwxNjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQldqQ0NBUUNnQXdJQkFnSUJTekFLQmdncWhrak9QUVFEQWpCS01Rc3dDUVlEVlFRR0V3SlZTekVSTUE4RworQTFVRUNoTUliV0psWkNCVVRGTXhLREFtQmdOVkJBTVRIMjFpWldRZ1ZFeFRJRlJsYzNRZ2FXNTBaWEp0WldScAorWVhSbElFTkJJRE13SGhjTk1UVXdPVEF4TVRNME56VTFXaGNOTWpVd09ESTVNVE0wTnpVMVdqQVVNUkl3RUFZRAorVlFRREV3bHNiMk5oYkdodmMzUXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcQorb1p5eWNobW9DUnh6cmQ0VnU5Nm00N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWQorQm1za3IyMnJsS2p5b3cwd0N6QUpCZ05WSFJNRUFqQUFNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUURMYytJbworcmc4VnhFYkNnVnY4aUgra09JRW45TWpocHZLenZ3VW9WKzZyalFJZ1pVL1JYQXljMWErSDIrc29HZk5FSU9CUQorQXpPM3BKeDdXSkFBcFp1QlgxUT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQndqQ0NBVWVnQXdJQkFnSUJTVEFLQmdncWhrak9QUVFEQWpCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUI0WERURTFNRGt3TVRFek5ESXhPRm9YRFRJMU1EZ3lPVEV6TkRJeE9Gb3dTakVMTUFrRworQTFVRUJoTUNWVXN4RVRBUEJnTlZCQW9UQ0cxaVpXUWdWRXhUTVNnd0pnWURWUVFERXg5dFltVmtJRlJNVXlCVQorWlhOMElHbHVkR1Z5YldWa2FXRjBaU0JEUVNBek1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRQorNzMyZldITE5QTVBzUDFVMWliWHZiNTVlcmxFVk1scFhCR3NqK0tZd1ZxVTFYQ21XOVo5aGhQN1gvNWpzL0RYOQorMkovdXRvSHlqVXRWcFFPemRUcmJzYU1kTUJzd0RBWURWUjBUQkFVd0F3RUIvekFMQmdOVkhROEVCQU1DQjRBdworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QUo5UlgzOGJodCtSTnNRSTJHVXBOaEMvWStUYjFPVTc0TzRpRWE2KworQ2tqQldUcEx0SFJLVmRacTdTVDB3azFMc1FJeEFJVWk4TDFWeDREdVVQMGJKeElYL251SnFsQm5CRytxUmhTZgorVmdIS2dTeUhpZHBaQUpwYVJpNElrWTUwNENZL1lnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZUQ0NBZEdnQXdJQkFnSUJEekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09USTBNVFl3T0RReVdoY05Nak13T1RJeU1UWXdPRFF5V2pCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4T2loM2ZYNVNMZU4xZG1GbmNRbAorV013OStZNnNYYmxobHJYQnhoWHhqd2R3cENIRU5uK2ZvVVZkcnFZVllhN1N1djNRVmVPNm5KMTlIM1FOaXhXOAoraWsxUCtoeHNiYXE4YnRhNzh2QXlIbUM0RW1YUUxnMXc3b3hiOVE4MnFYMVlvNEdWTUlHU01CMEdBMVVkRGdRVworQkJRUGliMWpRZXZMWGhjby8yZ3dQY0dJMEp4WU9UQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVgorRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrdworRndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSQoraHZjTkFRRUxCUUFEZ2dFQkFBamVhVFVhQ0JpWFQxQ1lMVnI2VUZTZVJOWkJyRFBuajZQd3FVUVR2Z0I1STVuNgoreVhxb0U0UllEYUVMMExnMjRqdUZ4STI2aXRCdXlwdG82dnNjZ0dxNzdjZnJQL2F2U2R4VSt4ZVo0YkNXdmgzTQorZGRqOWxta28yVThJOEdoQmNIcFN1SWlUdmdLREI4ZUtramVxM0FzTEdjaEhEdmlwOHBCM0loY05mTDdXOTRaZgorNy9sSDlWUWlFMy9weDdhbUQzMmNpZG9QdldMQTlVM2YxRnNQbUpFU1V6MHd3TmZJTnBEam1QcjhkR2JrQ04rTQorQ0ZoeG82c0NmSzhLTFlHNG5ZWDhGd3hWUjg2a3BTck85ZTg0QVgwWVliZHp4cHJiYzJYT2FlYko4K0JEbXp1dAorQVJrRDdEVFhyb2ROMXdWN2pRSmtyVXVFd1BqOVJodmsrTUZSa2F3PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCV2pDQ0FRQ2dBd0lCQWdJQlN6QUtCZ2dxaGtqT1BRUURBakJLTVFzd0NRWURWUVFHRXdKVlN6RVJNQThHCitBMVVFQ2hNSWJXSmxaQ0JVVEZNeEtEQW1CZ05WQkFNVEgyMWlaV1FnVkV4VElGUmxjM1FnYVc1MFpYSnRaV1JwCitZWFJsSUVOQklETXdIaGNOTVRVd09UQXhNVE0wTnpVMVdoY05NalV3T0RJNU1UTTBOelUxV2pBVU1SSXdFQVlECitWUVFERXdsc2IyTmhiR2h2YzNRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFRY2JmZnAycVhxCitvWnl5Y2htb0NSeHpyZDRWdTk2bTQ3TlBCZWh0RUM0NmFUZVhnRG5CZGYrK3puQUJyQXRmWEJSTlF6OEFSSWVZCitCbXNrcjIycmxLanlvdzB3Q3pBSkJnTlZIUk1FQWpBQU1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRExjK0lvCityZzhWeEViQ2dWdjhpSCtrT0lFbjlNamhwdkt6dndVb1YrNnJqUUlnWlUvUlhBeWMxYStIMitzb0dmTkVJT0JRCitBek8zcEp4N1dKQUFwWnVCWDFRPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCdERDQ0FUcWdBd0lCQWdJQlRUQUtCZ2dxaGtqT1BRUURBakJMTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEtUQW5CZ05WQkFNVElGQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVWRElFTkJNQjRYRFRFMU1Ea3dNVEUwTURnME0xb1hEVEkxTURneU9URTBNRGcwTTFvd1NqRUxNQWtHCitBMVVFQmhNQ1ZVc3hFVEFQQmdOVkJBb1RDRzFpWldRZ1ZFeFRNU2d3SmdZRFZRUURFeDl0WW1Wa0lGUk1VeUJVCitaWE4wSUdsdWRHVnliV1ZrYVdGMFpTQkRRU0F6TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCis3MzJmV0hMTlBNUHNQMVUxaWJYdmI1NWVybEVWTWxwWEJHc2orS1l3VnFVMVhDbVc5WjloaFA3WC81anMvRFg5CisySi91dG9IeWpVdFZwUU96ZFRyYnNhTVFNQTR3REFZRFZSMFRCQVV3QXdFQi96QUtCZ2dxaGtqT1BRUURBZ05vCitBREJsQWpBSlJ4YkdSYXMzTkJtazlNbkdXWGc3UFQxeG5SRUxIUldXSXZmTGRWUXQwNmwxL3hGZzNadVBkUWR0CitRaDdDSzgwQ01RRDd3YTFvMWE4cXlES0JmTE42MzZ1S21LR2dhMEUrdllYQmVGQ3k5b0FSQmFuZ0dDQjBCMnZ0CitwejU5MEp2R1dmTT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZUQ0NBZEdnQXdJQkFnSUJEekFOQmdrcWhraUc5dzBCQVFzRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRNd09USTBNVFl3T0RReVdoY05Nak13T1RJeU1UWXdPRFF5V2pCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU4T2loM2ZYNVNMZU4xZG1GbmNRbAorV013OStZNnNYYmxobHJYQnhoWHhqd2R3cENIRU5uK2ZvVVZkcnFZVllhN1N1djNRVmVPNm5KMTlIM1FOaXhXOAoraWsxUCtoeHNiYXE4YnRhNzh2QXlIbUM0RW1YUUxnMXc3b3hiOVE4MnFYMVlvNEdWTUlHU01CMEdBMVVkRGdRVworQkJRUGliMWpRZXZMWGhjby8yZ3dQY0dJMEp4WU9UQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVgorRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrdworRndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSQoraHZjTkFRRUxCUUFEZ2dFQkFBamVhVFVhQ0JpWFQxQ1lMVnI2VUZTZVJOWkJyRFBuajZQd3FVUVR2Z0I1STVuNgoreVhxb0U0UllEYUVMMExnMjRqdUZ4STI2aXRCdXlwdG82dnNjZ0dxNzdjZnJQL2F2U2R4VSt4ZVo0YkNXdmgzTQorZGRqOWxta28yVThJOEdoQmNIcFN1SWlUdmdLREI4ZUtramVxM0FzTEdjaEhEdmlwOHBCM0loY05mTDdXOTRaZgorNy9sSDlWUWlFMy9weDdhbUQzMmNpZG9QdldMQTlVM2YxRnNQbUpFU1V6MHd3TmZJTnBEam1QcjhkR2JrQ04rTQorQ0ZoeG82c0NmSzhLTFlHNG5ZWDhGd3hWUjg2a3BTck85ZTg0QVgwWVliZHp4cHJiYzJYT2FlYko4K0JEbXp1dAorQVJrRDdEVFhyb2ROMXdWN2pRSmtyVXVFd1BqOVJodmsrTUZSa2F3PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAwICgweDApCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowMCAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjAwIDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMwOmRmOjM3OmZjOjE3OmJiOmUwOjk2OjlkOjNmOjg2OmRlOjk2OjMyOgorICAgICAgICAgICAgICAgICAgICA3ZDo0NDphNToxNjphMDpjZDoyMTpmMTo5OTpkNDplYzplYTpjYjo3YzoxODoKKyAgICAgICAgICAgICAgICAgICAgNTg6MDg6OTQ6YTU6ZWM6OWI6YzU6OGI6ZGY6MWE6MWU6OTk6Mzg6OTk6ODc6CisgICAgICAgICAgICAgICAgICAgIDFlOjdiOmMwOjhkOjM5OmRmOjM4OjVkOjcwOjc4OjA3OmQzOjllOmQ5OjkzOgorICAgICAgICAgICAgICAgICAgICBlODpiOTo3Mjo1MTpjNTpjZTphMzozMDo1MjphOTpmMjplNzo0MDo3MDoxNDoKKyAgICAgICAgICAgICAgICAgICAgY2I6NDQ6YTI6NzI6MGI6YzI6ZTU6NDA6Zjk6M2U6ZTU6YTY6MGU6YjM6Zjk6CisgICAgICAgICAgICAgICAgICAgIGVjOjRhOjYzOmMwOmI4OjI5OjAwOjc0OjljOjU3OjNiOmE4OmE1OjA0OjkwOgorICAgICAgICAgICAgICAgICAgICA3MTpmMTpiZDo4MzpkOTozZjpkNjphNTplMjozYzoyYTo4ZjplZjoyNzo2MDoKKyAgICAgICAgICAgICAgICAgICAgYzM6YzY6OWY6Y2I6YmE6ZWM6NjA6N2Q6Yjc6ZTY6ODQ6MzI6YmU6NGY6ZmI6CisgICAgICAgICAgICAgICAgICAgIDU4OjI2OjIyOjAzOjViOmQ0OmI0OmQ1OmZiOmY1OmUzOjk2OjJlOjcwOmMwOgorICAgICAgICAgICAgICAgICAgICBlNDoyZTpiZDpmYzoyZTplZTplMjo0MTo1NTpjMDozNDoyZTo3ZDoyNDo3MjoKKyAgICAgICAgICAgICAgICAgICAgNjk6Y2I6NDc6YjE6MTQ6NDA6ODM6N2Q6Njc6ZjQ6ODY6ZjY6MzE6YWI6ZjE6CisgICAgICAgICAgICAgICAgICAgIDc5OmE0OmIyOmI1OjJlOjEyOmY5Ojg0OjE3OmYwOjYyOjZmOjI3OjNlOjEzOgorICAgICAgICAgICAgICAgICAgICA1ODpiMTo1NDowZDoyMTo5YTo3MzozNzphMTozMDpjZjo2Zjo5MjpkYzpmNjoKKyAgICAgICAgICAgICAgICAgICAgZTk6ZmM6YWM6ZGI6MmU6Mjg6ZDE6N2U6MDI6NGI6MjM6YTA6MTU6ZjI6Mzg6CisgICAgICAgICAgICAgICAgICAgIDY1OjY0OjA5OmVhOjBjOjZlOjhlOjFiOjE3OmEwOjcxOmM4OmIzOjliOmM5OgorICAgICAgICAgICAgICAgICAgICBhYjplOTpjMzpmMjpjZjo4Nzo5Njo4Zjo4MDowMjozMjo5ZTo5OTo1ODo2ZjoKKyAgICAgICAgICAgICAgICAgICAgYTI6ZDUKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICAgICAgRGlyTmFtZTovQz1OTC9PPVBvbGFyU1NML0NOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgICAgICAgICBzZXJpYWw6MDAKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODpmZDo1NDpkODowMDo1NDo5MDo4YjoyNTpiMDoyNzpkZDo5NTpjZDphMjpmNzo4NDowNzoKKyAgICAgICAgMWQ6ODc6ODk6NGE6YzQ6Nzg6MTE6ZDg6MDc6YjU6ZDc6MjI6NTA6OGU6NDg6ZWI6NjI6N2E6CisgICAgICAgIDMyOjg5OmJlOjYzOjQ3OjUzOmZmOmI2OmJlOmYxOjJlOjhjOjU0OmMwOjk5OjNmOmEwOmI5OgorICAgICAgICAzNzoyMzo3Mjo1ZjowZDo0Njo1OTo4ZjpkODo0NzpjZDo5Nzo0Yzo5ZjowNzowYzoxMjo2MjoKKyAgICAgICAgMDk6M2E6MjQ6ZTQ6MzY6ZDk6ZTk6MmM6ZGE6Mzg6ZDA6NzM6NzU6NjE6ZDc6YzE6NmM6MjY6CisgICAgICAgIDhiOjliOmUwOmQ1OmRjOjY3OmVkOjhjOjZiOjMzOmQ3Ojc0OjIyOjNjOjRjOmRiOmI1OjhkOgorICAgICAgICAyYTpjZToyYzowZDowODo1OTowNTowOTowNTphNjozOTo5ZjpiMzo2NzoxYjplMjo4MzplNToKKyAgICAgICAgZTE6OGY6NTM6ZjY6Njc6OTM6Yzc6Zjk6NmY6NzY6NDQ6NTg6MTI6ZTg6M2E6ZDQ6OTc6ZTc6CisgICAgICAgIGU5OmMwOjNlOmE4OjdhOjcyOjNkOjg3OjUzOjFmOmU1OjJjOjg0Ojg0OmU3OjlhOjllOjdmOgorICAgICAgICA2NjpkOToxZjo5YjpmNToxMzo0ODpiMDo0ZDoxNDpkMTpkZTpiMjoyNDpkOTo3ODo3ZDpmNToKKyAgICAgICAgMzU6Y2M6NTg6MTk6ZDE6ZDI6OTk6ZWY6NGQ6NzM6Zjg6MWY6ODk6ZDQ6NWE6ZDA6NTI6Y2U6CisgICAgICAgIDA5OmY1OmIxOjQ2OjUxOjZhOjAwOjhlOjNiOmNjOjZmOjYzOjAxOjAwOjk5OmVkOjlkOmE2OgorICAgICAgICAwODo2MDpjZDozMjoxODpkMDo3MzplMDo1ODo3MTpkOTplNTpkMjo1MzpkNzo4ZDpkMDpjYToKKyAgICAgICAgZTk6NWQ6MmE6MGE6MGQ6NWQ6NTU6ZWM6MjE6NTA6MTc6MTY6ZTY6MDY6NGE6Y2Q6NWU6ZGU6CisgICAgICAgIGY3OmUwOmU5OjU0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMV9jYS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIxX2NhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhkOTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMV9jYS5jcnQKQEAgLTAsMCArMSw0MSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUHpDQ0FpZWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakE4TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVlCZ05WQkFNVEVWQnZiR0Z5VTFOTUlGTmxjblpsY2lBeE1JSUJJakFOCitCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFxUUlmUFVCcTFWVlRpLzAyN29KbExoVmhYb20vCit1T2hGa052dWlCWlMwL0ZEVUVlV0VsbGtoMnY5SytCRytYTyszYytTNFpGYjdXYWdiNGtwZVVXQTBJTnExVUZECitkMTg1ZkFrRVI0S3dWemx3N2FQc0ZSa2VxRE1JUjhFRlFxbjlUTU8wMzkwR0gwMFFVVUJuY3hNUFFQaHRnU1ZmCitDckZUeGpCK0ZUbXMrVnJ1ZjVLZXBnVmI1eE9YaGJVamt0blVKQWJWQ1NXSmRRZmRwaHFQUHdrWnZxMWxMR1RyCitsWnZjL2tGZUY2YmFiRnRwekFLNkZDd1dKSnhLM00zUTkxSm5jL0V0b0NQOWZ2UXh5aTF3eW9rTEJOc3Vwazl3CiticDdPdlZpSjRsTlpubTVha21YaWlEOE1sQm1qM2VYb25aVVQ3U25icTNBUzNGcktheGVyVW9KVXNRSURBUUFCCitvMDB3U3pBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCUWZkTlkvS2NGMGRFVTdCUklzUGFpOVExa0NwakFmCitCZ05WSFNNRUdEQVdnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5L3pBTkJna3Foa2lHOXcwQkFRVUZBQU9DCitBUUVBdmMrV3daVWVtc0p1MklpSTJDcDZsaUErVUF2SXg5OGRRZTNrWnMyekFvRjlWd1FiWGNZeldRL0JJTGtqCitOSW1LYlBMOXgwZzJqSURuNFp2R1lGeXdNd0lPL2QrK1lid1lpUXc0Mi92N1JpTXk5NHpCUG56ZUhpODZkeS8wCitqcE9PSlV4M0lYUnNHTGR5amIvMVQxMWtsY0ZxR25BUmlLKzhWWW9sTVBQNmFmS3ZMWFg3SzRraVVwc0ZRaFVwCitFNVZlTTVwVjFNY2kyRVRPSmF1MmNPNDBGSnZJL0M5Vy93UitHQUFyTWF3MmZ4Rzc3RTNsYWFhMExBT2xleE02CitBNEtPYjVmNWNHVE01SWg2dEVGNUZWcTMvOXZ6TklZTWExRnF6YWNCTFpGOHpTSFlMRWltWEJkempCb040cURVCisvV3pSeVlSQlJqQUk0OW16SFg2cmFsZXFudz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi1iYWRzaWduLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjItYmFkc2lnbi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzMmQzYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjItYmFkc2lnbi5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlETnpDQ0FoK2dBd0lCQWdJQkFqQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0NBU0l3RFFZSktvWklodmNOCitBUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUZObzkzbnpSM1JCTmRKY3JpWnJBNTQ1RG84U3M4NkV4YlFXdVROCitvd0NJcCs0ZWE1YW5VclNRN3kxeWVqNGttdnkyTkt3azlYZmdKbVNNbkxBb2ZhSGE2b3pteVJ5V3ZQN0JCRkt6CitOdFNqK3VHeGR0aVF3V0cwWmxJMm9pWlRxcXQwWGdkOUdZTGJLdGdmb05rTkhDMUpadmRiSlhORzZBdUtUMmtNCit0UUNRNGRxQ0VHWjlybFFyaTJWNWthSGlZY1BOUUVrSTdtZ004WXVHMGthLzBMaXFFUU1lZjFhb0doNUVHQThQCitoWXZhaTBSZTRoakdZaS9IWm8zNlhkaDk4eWVKS1FIRmtBNC9KL0V3eUVvTzc5YmV4OGNuYThjRlBYckVBanlhCitIVDRQNkRTWVc4dHpTMUtXMkJHaUxJQ0lhVGxhMHcrdzNsa3ZFY2YzNmhJQk1KY0NBd0VBQWFOTk1Fc3dDUVlECitWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVVwUVhvWkxqYzMyQVBVQkpOWUtoa3IwMkxRNU13SHdZRFZSMGpCQmd3CitGb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2Y4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKeG5YQ2xZCitvSGticDcwY3FCcnNHWEx5YkE3NGN6Yk81UmRMRWdGczdySFZTOXIrYzI5M2x1Uy9LZGxpTFNjWnFBellWeWx3CitVZlJXdktNb1doSFlLcDNkRUlTNHhUWGs2LzV6WHhodjlSdzhTR2M4cW42dklUSGsxUzFtUGV2dGVrZ2FzWTVZCitpV1F1TTNoNFlWbFJIM0hIRU1BRDFUbkFleGZYSEhERlFHZStCZDFpQWJ6MS9zSDlIOGw0U3R3WDZlZ3ZUSzNNCit3WFJ3a0trdmpLYUVEQTlBVGJaeDBtSThMR3N4U3VDcWU5cjlkeWptdHRkNDdKMXAxUnVsejNDTHphUmNWSXVTCitSUlFmYUQ4bmVNOWMxUy9pSi9hbVRWcUp4QTFLT2RPUzU3ODBXaFBmU0FyQStnNHFBbVNqZWxjM3A0d1dwaGE4Cit6aHVZd2pWdVg2SkhHMDg9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLXYxLWNoYWluLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjItdjEtY2hhaW4uY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YmI2YjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLXYxLWNoYWluLmNydApAQCAtMCwwICsxLDM4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGVENDQWYwQ0RGT2l0dGtqWGJ4RmMvbTNiREFOQmdrcWhraUc5dzBCQVFzRkFEQk9NUm93R0FZRFZRUUQKK0V4RnpaWEoyWlhJeEwybHVkQzFqWVMxMk1URVFNQTRHQTFVRUN4TUhkR1Z6ZEdsdVp6RVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEN6QUpCZ05WQkFZVEFrNU1NQ0lZRHpJd01UUXdOakU1TVRBd09USTVXaGdQTWpBeU5EQTIKK01UZ3hNREE1TWpsYU1FUXhFREFPQmdOVkJBTVRCM05sY25abGNqSXhFREFPQmdOVkJBc1RCM1JsYzNScGJtY3gKK0VUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Rc3dDUVlEVlFRR0V3Sk9URENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTm93Q0kKK3ArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLek50U2oKKyt1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTXRRQ1EKKzRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UGhZdmEKK2kwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YUhUNFAKKzZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFUQU5CZ2txaGtpRzl3MEIKK0FRc0ZBQU9DQVFFQWl2Q0NNQmZDNVlOZW96d3A4dkFXcGlSVWFraHRPOHlzdkNmUXNaRDR0V0xsU2tyam9VdEcKKzNSTmQ5Z0RWREdiODUyR3N3dE5NS0hKQzFBZVp1WGRoM2VCb0RCTlRYblIvOVVrSGdXTkJ5NWYrSkgyaXJZcmMKK3BzNW9mcFlKWmU3SzZ4UWpsK1JMYzhuZlVVYVZmUzNkSm55THI5azVrZzRpbjQ4cCtoRUY2b1hEQnUyemR1ZkYKKzUzay9VOThGVHZGa1Zpc0VERnpMWHlLWDBmQVp4Zk1rNHFuRW9CZmxINGZFWGZrdXVhQlVWZG9HR0lNUkxOQVcKK0dJeVJ4cit6aitPSkwrWmpqQWtZNEpxdEV1VXVMak9Ebi8vREhJL01rcUUwTEFOT3ZiYjRha3BnWnN5dlNTTzMKK28zOGQxd1FIdzUrYk8rWURxZGZJZFFYZ3VVNW10UzF4QXc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlESVRDQ0Fna0NERk9pdHNjRXpVMk92SUFMd1RBTkJna3Foa2lHOXcwQkFRc0ZBREJRTVJ3d0dnWURWUVFECitFeE5RYjJ4aGNsTlRUQ0JVWlhOMElFTkJJSFl4TVJBd0RnWURWUVFMRXdkMFpYTjBhVzVuTVJFd0R3WURWUVFLCitFd2hRYjJ4aGNsTlRUREVMTUFrR0ExVUVCaE1DVGt3d0loZ1BNakF4TkRBMk1Ua3hNREE1TVRGYUdBOHlNREkwCitNRFl4T0RFd01Ea3hNVm93VGpFYU1CZ0dBMVVFQXhNUmMyVnlkbVZ5TVM5cGJuUXRZMkV0ZGpFeEVEQU9CZ05WCitCQXNUQjNSbGMzUnBibWN4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVFzd0NRWURWUVFHRXdKT1REQ0NBU0l3CitEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2tDSHoxQWF0VlZVNHY5TnU2Q1pTNFZZVjZKCit2N2pvUlpEYjdvZ1dVdFB4UTFCSGxoSlpaSWRyL1N2Z1J2bHp2dDNQa3VHUlcrMW1vRytKS1hsRmdOQ0RhdFZCCitRM2RmT1h3SkJFZUNzRmM1Y08yajdCVVpIcWd6Q0VmQkJVS3AvVXpEdE4vZEJoOU5FRkZBWjNNVEQwRDRiWUVsCitYd3F4VThZd2ZoVTVyUGxhN24rU25xWUZXK2NUbDRXMUk1TFoxQ1FHMVFrbGlYVUgzYVlhano4SkdiNnRaU3hrCis2NVdiM1A1QlhoZW0ybXhiYWN3Q3VoUXNGaVNjU3R6TjBQZFNaM1B4TGFBai9YNzBNY290Y01xSkN3VGJMcVpQCitjRzZlenIxWWllSlRXWjV1V3BKbDRvZy9ESlFabzkzbDZKMlZFKzBwMjZ0d0V0eGF5bXNYcTFLQ1ZMRUNBd0VBCitBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBUEpsM2ZiVmVUSjZnVkF2Q29MWU04Slk1VTdaaHJDQ2RCZ2h3CitXdVpCUy9UV3dmNFdMUDBHL1p0VHlUT0VOY1QwZ1dIZjAvVm5YdE5QdzIveUJqV3NMdFRYeE4yWFFsRVZmM2ovCitXY1F4V2dTRVNZZHgvc1QvdVRXNnFpaHVPTlBXa1RRaXpteDdPRzZ2QnVHeDNnNTRzOS9vZUpLWE9yYU5xdWQzCitHNEtCcnl0T2F6bGlNZm9LTzJobnphZXlkcGFEdGIydFpYOGFwTi82S3FRcFRBY1hzV3JaUlc5WEVIV3Eyc056CitJUjFuSUUxRi85Z25xaTlYeTBIUXBydGVMUlV2TTR0RVEzNW00SDIwZVM1WTlnSmxFL0RxWG1NUTdhaVU4RGdQCitrcmorWjE4cGNyc3NPK0V0djBCT2lQam1VOVRXV3BETWozNGVmN1UvT0g1cUp4a1NyQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLXYxLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjItdjEuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZjc5NjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLXYxLmNydApAQCAtMCwwICsxLDE5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURGVENDQWYwQ0RGT2l0dGtqWGJ4RmMvbTNiREFOQmdrcWhraUc5dzBCQVFzRkFEQk9NUm93R0FZRFZRUUQKK0V4RnpaWEoyWlhJeEwybHVkQzFqWVMxMk1URVFNQTRHQTFVRUN4TUhkR1Z6ZEdsdVp6RVJNQThHQTFVRUNoTUkKK1VHOXNZWEpUVTB3eEN6QUpCZ05WQkFZVEFrNU1NQ0lZRHpJd01UUXdOakU1TVRBd09USTVXaGdQTWpBeU5EQTIKK01UZ3hNREE1TWpsYU1FUXhFREFPQmdOVkJBTVRCM05sY25abGNqSXhFREFPQmdOVkJBc1RCM1JsYzNScGJtY3gKK0VUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Rc3dDUVlEVlFRR0V3Sk9URENDQVNJd0RRWUpLb1pJaHZjTkFRRUIKK0JRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTm93Q0kKK3ArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLek50U2oKKyt1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTXRRQ1EKKzRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UGhZdmEKK2kwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YUhUNFAKKzZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFUQU5CZ2txaGtpRzl3MEIKK0FRc0ZBQU9DQVFFQWl2Q0NNQmZDNVlOZW96d3A4dkFXcGlSVWFraHRPOHlzdkNmUXNaRDR0V0xsU2tyam9VdEcKKzNSTmQ5Z0RWREdiODUyR3N3dE5NS0hKQzFBZVp1WGRoM2VCb0RCTlRYblIvOVVrSGdXTkJ5NWYrSkgyaXJZcmMKK3BzNW9mcFlKWmU3SzZ4UWpsK1JMYzhuZlVVYVZmUzNkSm55THI5azVrZzRpbjQ4cCtoRUY2b1hEQnUyemR1ZkYKKzUzay9VOThGVHZGa1Zpc0VERnpMWHlLWDBmQVp4Zk1rNHFuRW9CZmxINGZFWGZrdXVhQlVWZG9HR0lNUkxOQVcKK0dJeVJ4cit6aitPSkwrWmpqQWtZNEpxdEV1VXVMak9Ebi8vREhJL01rcUUwTEFOT3ZiYjRha3BnWnN5dlNTTzMKK28zOGQxd1FIdzUrYk8rWURxZGZJZFFYZ3VVNW10UzF4QXc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E0YzI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5jcnQKQEAgLTAsMCArMSw3NyBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAyICgweDIpCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowNiAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjA2IDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDIwNDggYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDA6YzE6NGQ6YTM6ZGQ6ZTc6Y2Q6MWQ6ZDE6MDQ6ZDc6NDk6NzI6Yjg6OTk6CisgICAgICAgICAgICAgICAgICAgIGFjOjBlOjc4OmU0OjNhOjNjOjRhOmNmOjNhOjEzOjE2OmQwOjVhOmU0OmNkOgorICAgICAgICAgICAgICAgICAgICBhMzowMDo4ODphNzplZToxZTo2Yjo5NjphNzo1MjpiNDo5MDplZjoyZDo3MjoKKyAgICAgICAgICAgICAgICAgICAgN2E6M2U6MjQ6OWE6ZmM6YjY6MzQ6YWM6MjQ6ZjU6Nzc6ZTA6MjY6NjQ6OGM6CisgICAgICAgICAgICAgICAgICAgIDljOmIwOjI4OjdkOmExOmRhOmVhOjhjOmU2OmM5OjFjOjk2OmJjOmZlOmMxOgorICAgICAgICAgICAgICAgICAgICAwNDo1MjpiMzozNjpkNDphMzpmYTplMTpiMTo3NjpkODo5MDpjMTo2MTpiNDoKKyAgICAgICAgICAgICAgICAgICAgNjY6NTI6MzY6YTI6MjY6NTM6YWE6YWI6NzQ6NWU6MDc6N2Q6MTk6ODI6ZGI6CisgICAgICAgICAgICAgICAgICAgIDJhOmQ4OjFmOmEwOmQ5OjBkOjFjOjJkOjQ5OjY2OmY3OjViOjI1OjczOjQ2OgorICAgICAgICAgICAgICAgICAgICBlODowYjo4YTo0Zjo2OTowYzpiNTowMDo5MDplMTpkYTo4MjoxMDo2Njo3ZDoKKyAgICAgICAgICAgICAgICAgICAgYWU6NTQ6MmI6OGI6NjU6Nzk6OTE6YTE6ZTI6NjE6YzM6Y2Q6NDA6NDk6MDg6CisgICAgICAgICAgICAgICAgICAgIGVlOjY4OjBjOmYxOjhiOjg2OmQyOjQ2OmJmOmQwOmI4OmFhOjExOjAzOjFlOgorICAgICAgICAgICAgICAgICAgICA3Zjo1NjphODoxYToxZTo0NDoxODowZjowZjo4NTo4YjpkYTo4Yjo0NDo1ZToKKyAgICAgICAgICAgICAgICAgICAgZTI6MTg6YzY6NjI6MmY6Yzc6NjY6OGQ6ZmE6NWQ6ZDg6N2Q6ZjM6Mjc6ODk6CisgICAgICAgICAgICAgICAgICAgIDI5OjAxOmM1OjkwOjBlOjNmOjI3OmYxOjMwOmM4OjRhOjBlOmVmOmQ2OmRlOgorICAgICAgICAgICAgICAgICAgICBjNzpjNzoyNzo2YjpjNzowNTozZDo3YTpjNDowMjozYzo5YToxZDozZTowZjoKKyAgICAgICAgICAgICAgICAgICAgZTg6MzQ6OTg6NWI6Y2I6NzM6NGI6NTI6OTY6ZDg6MTE6YTI6MmM6ODA6ODg6CisgICAgICAgICAgICAgICAgICAgIDY5OjM5OjVhOmQzOjBmOmIwOmRlOjU5OjJmOjExOmM3OmY3OmVhOjEyOjAxOgorICAgICAgICAgICAgICAgICAgICAzMDo5NworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQTU6MDU6RTg6NjQ6Qjg6REM6REY6NjA6MEY6NTA6MTI6NEQ6NjA6QTg6NjQ6QUY6NEQ6OEI6NDM6OTMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgOWM6Njc6NWM6Mjk6NTg6YTA6Nzk6MWI6YTc6YmQ6MWM6YTg6MWE6ZWM6MTk6NzI6ZjI6NmM6CisgICAgICAgIDBlOmY4OjczOjM2OmNlOmU1OjE3OjRiOjEyOjAxOjZjOmVlOmIxOmQ1OjRiOmRhOmZlOjczOgorICAgICAgICA2Zjo3Nzo5NjplNDpiZjoyOTpkOTo2MjoyZDoyNzoxOTphODowYzpkODo1NzoyOTo3MDo1MToKKyAgICAgICAgZjQ6NTY6YmM6YTM6Mjg6NWE6MTE6ZDg6MmE6OWQ6ZGQ6MTA6ODQ6Yjg6YzU6MzU6ZTQ6ZWI6CisgICAgICAgIGZlOjczOjVmOjE4OjZmOmY1OjFjOjNjOjQ4OjY3OjNjOmFhOjdlOmFmOjIxOjMxOmU0OmQ1OgorICAgICAgICAyZDo2NjozZDplYjplZDo3YTo0ODoxYTpiMTo4ZTo1ODo4OTo2NDoyZTozMzo3ODo3ODo2MToKKyAgICAgICAgNTk6NTE6MWY6NzE6Yzc6MTA6YzA6MDM6ZDU6Mzk6YzA6N2I6MTc6ZDc6MWM6NzA6YzU6NDA6CisgICAgICAgIDY3OmJlOjA1OmRkOjYyOjAxOmJjOmY1OmZlOmMxOmZkOjFmOmM5Ojc4OjRhOmRjOjE3OmU5OgorICAgICAgICBlODoyZjo0YzphZDpjYzpjMTo3NDo3MDo5MDphOToyZjo4YzphNjo4NDowYzowZjo0MDo0ZDoKKyAgICAgICAgYjY6NzE6ZDI6NjI6M2M6MmM6NmI6MzE6NGE6ZTA6YWE6N2I6ZGE6ZmQ6Nzc6Mjg6ZTY6YjY6CisgICAgICAgIGQ3Ojc4OmVjOjlkOjY5OmQ1OjFiOmE1OmNmOjcwOjhiOmNkOmE0OjVjOjU0OjhiOjkyOjQ1OgorICAgICAgICAxNDoxZjo2ODozZjoyNzo3ODpjZjo1YzpkNToyZjplMjoyNzpmNjphNjo0ZDo1YTo4OTpjNDoKKyAgICAgICAgMGQ6NGE6Mzk6ZDM6OTI6ZTc6YmY6MzQ6NWE6MTM6ZGY6NDg6MGE6YzA6ZmE6MGU6MmE6MDI6CisgICAgICAgIDY0OmEzOjdhOjU3OjM3OmE3OjhjOjE2OmE2OjE2OmJjOmNlOjFiOjk4OmMyOjM1OjZlOjVmOgorICAgICAgICBhMjo0NzoxYjo0NworLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlETnpDQ0FoK2dBd0lCQWdJQkFqQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREEyV2hjTk1qRXdNakV5TVRRME5EQTJXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0NBU0l3RFFZSktvWklodmNOCitBUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUZObzkzbnpSM1JCTmRKY3JpWnJBNTQ1RG84U3M4NkV4YlFXdVROCitvd0NJcCs0ZWE1YW5VclNRN3kxeWVqNGttdnkyTkt3azlYZmdKbVNNbkxBb2ZhSGE2b3pteVJ5V3ZQN0JCRkt6CitOdFNqK3VHeGR0aVF3V0cwWmxJMm9pWlRxcXQwWGdkOUdZTGJLdGdmb05rTkhDMUpadmRiSlhORzZBdUtUMmtNCit0UUNRNGRxQ0VHWjlybFFyaTJWNWthSGlZY1BOUUVrSTdtZ004WXVHMGthLzBMaXFFUU1lZjFhb0doNUVHQThQCitoWXZhaTBSZTRoakdZaS9IWm8zNlhkaDk4eWVKS1FIRmtBNC9KL0V3eUVvTzc5YmV4OGNuYThjRlBYckVBanlhCitIVDRQNkRTWVc4dHpTMUtXMkJHaUxJQ0lhVGxhMHcrdzNsa3ZFY2YzNmhJQk1KY0NBd0VBQWFOTk1Fc3dDUVlECitWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVVwUVhvWkxqYzMyQVBVQkpOWUtoa3IwMkxRNU13SHdZRFZSMGpCQmd3CitGb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2Y4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKeG5YQ2xZCitvSGticDcwY3FCcnNHWEx5YkE3NGN6Yk81UmRMRWdGczdySFZTOXIrYzI5M2x1Uy9LZGxpTFNjWnFBellWeWx3CitVZlJXdktNb1doSFlLcDNkRUlTNHhUWGs2LzV6WHhodjlSdzhTR2M4cW42dklUSGsxUzFtUGV2dGVrZ2FzWTVZCitpV1F1TTNoNFlWbFJIM0hIRU1BRDFUbkFleGZYSEhERlFHZStCZDFpQWJ6MS9zSDlIOGw0U3R3WDZlZ3ZUSzNNCit3WFJ3a0trdmpLYUVEQTlBVGJaeDBtSThMR3N4U3VDcWU5cjlkeWptdHRkNDdKMXAxUnVsejNDTHphUmNWSXVTCitSUlFmYUQ4bmVNOWMxUy9pSi9hbVRWcUp4QTFLT2RPUzU3ODBXaFBmU0FyQStnNHFBbVNqZWxjM3A0d1dwaGE4Cit6aHVZd2pWdVg2SkhHMGM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYTc2NGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmtleQpAQCAtMCwwICsxLDI3IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlFcEFJQkFBS0NBUUVBd1UyajNlZk5IZEVFMTBseXVKbXNEbmprT2p4S3p6b1RGdEJhNU0yakFJaW43aDVyCitscWRTdEpEdkxYSjZQaVNhL0xZMHJDVDFkK0FtWkl5Y3NDaDlvZHJxak9iSkhKYTgvc0VFVXJNMjFLUDY0YkYyCisySkRCWWJSbVVqYWlKbE9xcTNSZUIzMFpndHNxMkIrZzJRMGNMVWxtOTFzbGMwYm9DNHBQYVF5MUFKRGgyb0lRCitabjJ1VkN1TFpYbVJvZUpodzgxQVNRanVhQXp4aTRiU1JyL1F1S29SQXg1L1ZxZ2FIa1FZRHcrRmk5cUxSRjdpCitHTVppTDhkbWpmcGQySDN6SjRrcEFjV1FEajhuOFRESVNnN3YxdDdIeHlkcnh3VTllc1FDUEpvZFBnL29OSmhiCit5M05MVXBiWUVhSXNnSWhwT1ZyVEQ3RGVXUzhSeC9mcUVnRXdsd0lEQVFBQkFvSUJBUUNYUjBTOEVJSEZHT1JaCisrK0F0T2c2ZUVOeEQreFZzMGYxSWVHejU3VGpvM1FuWFg3VkJaTmRqK3AxRUN2aENFL0c3WG5rZ1U1aExaWCtHCitaMGprei90cUpPSTB2UlNkTEJiaXBIbldvdXlCUTRlL0ExeUlKZGxCdHFYeEoxS0UvaXR1SFJiTmM0ajRrTDhaCisvcjZwdnduVEkwUFN4MkVxczA0OFlkUzkyTFQ2cUF2NGZsYk5EeE1uMnVZN3M0eWNTNFE4dzFKWG5DZWFBblltCitXWUk1d3hPK2J2UkVMUjJNY3o1RG1Wbkw4alJ5bWw2bDY1ODJiU3Y1b3VmUmVGSWJ5UFpiUVdsWGdZbnB1NkhlCitHVGM3RTF6S1lRR0cvOStEUVVsLzF2UXVDUHFRd255MHRRb1gydzV0ZFlwZE1kVm0remtMdGJhanpkVHZpSkphCitUV3pMNmx0NUFvR0JBTjg2K1NWZUpEY21RSmN2NEVxNlVodFJyNFFHTWlRTXowU29kNmV0dFl4WXpNZ3h0dzI4CitDSXJncG96Q2MrVWFaSkxvN1V4dkM2YW44NXIxYjJuS1BDTFFGYWdnSjBINFEwSi9zWk9oQklYYW9Celd4dmVLCitudXBjZUtkVnhHc0ZpOENEeTg2REJmaXlGaXZmQmorNDdCYmFRelBCajdDNHJLN1VsTGphYjJyREFvR0JBTjJ1CitBTTJnY2hvRml1NHYxSEZMOEQ3bHdlRXBpNlpuTUpqbkV1L2RFZ0dRSkZqd2RwTG5QYnNqNGM3NW9kUTRHejhnCitzdzlsYW85VlZ6YnVzb1JFL0pHSTRhVGRPMHBBVFh5RzdlRzFRdSs1WWMxWUdYY0NybGlBMnhNOXh4K2Q3ZitzCittUHpOK1dJRWc1R0pEWVpEakF6SEc1Qk52aS9GZk0xQzlkT3RqdjJkQW9HQUYwdDVLbXdialdIQmhjVnFPNEljCitCVnZOM0JJbGMxdWUyWVJYRURseFk1YjByOE40WGNlTWdLbVcxOE9IQXBaeGZsOHVQRGF1V1pMWE9nbDR1ZXB2Cit3aFpDM0V1V3JTeXlJQ05oTFkyMUFoN2hiSUVCUEYzTDNac093QytVRXJMK2RYV0xkQjU2Smd5M2daYUJlVzdiCit2RHJFbm9jSmJxQ203SXVraFhIT0JLOENnWUVBd3FkSEIwaHF5TlN6SU9HWTd2OWFiekI2cFVkQTNCWmlRdkVzCiszTGpIVmQ0SFBKMngwTjhDZ3JCSVdPRTBxOCswaFNNbWVFOTZXVy83akQzZlBXd0NSNXpsWGtueEJRc2Z2MGdQCiszQkM1UFIwUWR5cHorZCs5emZNZjYyNWt5aXQ0VC9oendoRHZlWlV6SG5rMUNmK0lHN1ErVE9FbkxuV0FXQkVECitJU09XbXJVQ2dZQUZFbVJ4Z3dBYy91K0Q2dDBzeUN3QVloNlBPdHNjcTlZMGk5R3lXazg5TnpnQzROZHd3YkJICis0QWdhaE94SXhYeDJneEpucTN5ZmtKZklqd2YwczJEeVAwa1kyeTZVYTFPZW9tUGVZOW1ySVM0dEN1RFE2THJFCitUQjZsOVZHb3hKTDRmeUhuWmI4TDVnR3ZuQjFiYkQ4Y0w2WVBhRGlPaGNSc2VDOXZCaUV1Vmc9PQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1kcy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkMDdkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0CkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGlqQ0NBbktnQXdJQkFnSUJMREFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRRd05EQTVNRGcwTkRVeFdoY05NalF3TkRBMk1EZzBORFV4V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENDQVNJd0RRWUpLb1pJaHZjTgorQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTgorb3dDSXArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLegorTnRTait1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTQordFFDUTRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UAoraFl2YWkwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YQorSFQ0UDZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFhT0JuekNCbkRBSgorQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTbEJlaGt1TnpmWUE5UUVrMWdxR1N2VFl0RGt6QmpCZ05WSFNNRQorWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUFzRworQTFVZER3UUVBd0lIZ0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQWM0a3ViQVNyRlhGdHBsa1lwNkZVY25VbgorUGYvNmxhUzFodEkrM3krcTFVSFdlMlBjYWdadENIVENVR0JTV0xlVUlpYUlCaGVhSVJxdis0c1NGVnVYQjdoVgorMFBHWHBPNWJ0dGg0UjhCSHpHcUNkT2JLdlB1anA1QkRxM3hnY0FGaWNBM0hVTU5zSm9URHYvUllYWTdqZTFRNQorbnRWeVZQZWppMEFXTVVZUWpjcUhUUVFQR0JnZEpyUlRNYVlnbFpoMTVJaEoxNklDTmQ5cldJZUJBMGgvK3IweQorUXVGRUJ6MG5mZTdEdnBxY3Q3Z0pDdis3LzV0Q3VqeDRMVDE3ejdvSzhCWk41U2VQQUdVMnlrSnNVWGs4WklDVAorb25nYVFRVlF3UzYvR0o2QTVWOGVjYVV2RnJUYnkxaDkrMnNPVzhuMk5SR2lhYUc1Z2t2eFZlYXllbWNtT1E9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1kc19rZS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzX2tlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmVlN2UxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1kc19rZS5jcnQKQEAgLTAsMCArMSwyMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaWpDQ0FuS2dBd0lCQWdJQk1EQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVFF3TkRBNU1UQXdNalE1V2hjTk1qUXdOREEyTVRBd01qUTVXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0NBU0l3RFFZSktvWklodmNOCitBUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUZObzkzbnpSM1JCTmRKY3JpWnJBNTQ1RG84U3M4NkV4YlFXdVROCitvd0NJcCs0ZWE1YW5VclNRN3kxeWVqNGttdnkyTkt3azlYZmdKbVNNbkxBb2ZhSGE2b3pteVJ5V3ZQN0JCRkt6CitOdFNqK3VHeGR0aVF3V0cwWmxJMm9pWlRxcXQwWGdkOUdZTGJLdGdmb05rTkhDMUpadmRiSlhORzZBdUtUMmtNCit0UUNRNGRxQ0VHWjlybFFyaTJWNWthSGlZY1BOUUVrSTdtZ004WXVHMGthLzBMaXFFUU1lZjFhb0doNUVHQThQCitoWXZhaTBSZTRoakdZaS9IWm8zNlhkaDk4eWVKS1FIRmtBNC9KL0V3eUVvTzc5YmV4OGNuYThjRlBYckVBanlhCitIVDRQNkRTWVc4dHpTMUtXMkJHaUxJQ0lhVGxhMHcrdzNsa3ZFY2YzNmhJQk1KY0NBd0VBQWFPQm56Q0JuREFKCitCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlNsQmVoa3VOemZZQTlRRWsxZ3FHU3ZUWXREa3pCakJnTlZIU01FCitYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS82RS9wRDB3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQCitCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQmdnRUFNQXNHCitBMVVkRHdRRUF3SUZvREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBblc3K2g4NXhCUDJLSnpGU3BXZkdpclZlCitBcGRDOWJYMFoxc1ZNbUQ0ODZOK3R5OVc2QlA2a0pSeExEWDBmT3VSYzN4N21DeTVxWmcvWWo0MCt5UVNvQTB3CitiVE53Smp1UjhpTXFXSXFMdzloV1IrRTlUNGxZTFpXeUdKVmpsVlRrTzRpNXdpZndob0pFOURvb2hoLzZjcm41CitJbVdnRWtnVC93RFZJSG9hbWNpTzZLVTM2ZDBpQUVFUDJlWWd4djIvc1ZIdmpqc3NlVGR2WWgzRDNWdU9tUXRTCit1VXZGeGM2SDVrWW9xL3lvZEpXRGFPbjNSUzhwRXBEc2lXK2FiY1d5eE5UUHRIRnJvSlY3ZTlhYVZtaGxSU3p3CitzWUR5RC9aeUlsYXZvUFNFaUQzTFRUL1RwNkJJcHoremI0V0hPSExFdlVDc1pwdXRxeFBWY05vRUFpOXh1QT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWthLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2EuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjdjNGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWthLmNydApAQCAtMCwwICsxLDIxIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURpakNDQW5LZ0F3SUJBZ0lCS2pBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01UUXdOREE1TURnME5ESXpXaGNOTWpRd05EQTJNRGcwTkRJeldqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQ0FTSXdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNRk5vOTNuelIzUkJOZEpjcmlackE1NDVEbzhTczg2RXhiUVd1VE4KK293Q0lwKzRlYTVhblVyU1E3eTF5ZWo0a212eTJOS3drOVhmZ0ptU01uTEFvZmFIYTZvem15UnlXdlA3QkJGS3oKK050U2ordUd4ZHRpUXdXRzBabEkyb2laVHFxdDBYZ2Q5R1lMYkt0Z2ZvTmtOSEMxSlp2ZGJKWE5HNkF1S1Qya00KK3RRQ1E0ZHFDRUdaOXJsUXJpMlY1a2FIaVljUE5RRWtJN21nTThZdUcwa2EvMExpcUVRTWVmMWFvR2g1RUdBOFAKK2hZdmFpMFJlNGhqR1lpL0habzM2WGRoOTh5ZUpLUUhGa0E0L0ovRXd5RW9PNzliZXg4Y25hOGNGUFhyRUFqeWEKK0hUNFA2RFNZVzh0elMxS1cyQkdpTElDSWFUbGEwdyt3M2xrdkVjZjM2aElCTUpjQ0F3RUFBYU9CbnpDQm5EQUoKK0JnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCU2xCZWhrdU56ZllBOVFFazFncUdTdlRZdERrekJqQmdOVkhTTUUKK1hEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5LzZFL3BEMHdPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CZ2dFQU1Bc0cKK0ExVWREd1FFQXdJRENEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFyaVBsb0lXZnU3VThkMWhsczk3QzdPQkkKK09pRTJ4RmgyVW11Ti85aFRLMkN5VzZNdEJmOGFHM2w0alFEcnN1dEhPMGdVeW9SNjd1ZzR5aitzKzBTL3pFVFoKK3E2bVBvN2NCYlZ3amhHY2lRUmlZZ3VmRnBkbmJYUjA1SERnT1ZQSzdxcWpMNlVPWm5idTVjYUlFdklKZ2R3WG4KK244V0I5eC9JaTQvMlM5eXNtUmRSaERCWWVremdIM0FjMlVuSEpUTWgxWGFTTDgxN01XNkI5QkRLSHQ0eGE3cFcKK2NwbER6ckZLWWJteFNTeHpBTEU0RHIrelJ2bUR4NGJjWXBCa1JSZk9obm5SMWNhUUJnYVp6UGNYL1Z1K3Z3OGUKK3FzMm55Qlc1UkJ1OE1CQ0JVMURwcU9TbzZqbDBRVHB1cTNOelFaSW91RzlmeWNrcURKUzVpYnJ4UVR1dFB3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMi5rdS1rZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhYTBjMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0CkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGlqQ0NBbktnQXdJQkFnSUJLekFOQmdrcWhraUc5dzBCQVFVRkFEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRRd05EQTVNRGcwTkRNNVdoY05NalF3TkRBMk1EZzBORE01V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENDQVNJd0RRWUpLb1pJaHZjTgorQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1GTm85M256UjNSQk5kSmNyaVpyQTU0NURvOFNzODZFeGJRV3VUTgorb3dDSXArNGVhNWFuVXJTUTd5MXllajRrbXZ5Mk5Ld2s5WGZnSm1TTW5MQW9mYUhhNm96bXlSeVd2UDdCQkZLegorTnRTait1R3hkdGlRd1dHMFpsSTJvaVpUcXF0MFhnZDlHWUxiS3RnZm9Oa05IQzFKWnZkYkpYTkc2QXVLVDJrTQordFFDUTRkcUNFR1o5cmxRcmkyVjVrYUhpWWNQTlFFa0k3bWdNOFl1RzBrYS8wTGlxRVFNZWYxYW9HaDVFR0E4UAoraFl2YWkwUmU0aGpHWWkvSFpvMzZYZGg5OHllSktRSEZrQTQvSi9Fd3lFb083OWJleDhjbmE4Y0ZQWHJFQWp5YQorSFQ0UDZEU1lXOHR6UzFLVzJCR2lMSUNJYVRsYTB3K3czbGt2RWNmMzZoSUJNSmNDQXdFQUFhT0JuekNCbkRBSgorQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTbEJlaGt1TnpmWUE5UUVrMWdxR1N2VFl0RGt6QmpCZ05WSFNNRQorWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvNkUvcEQwd096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJnZ0VBTUFzRworQTFVZER3UUVBd0lGSURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXFyZUxBSXV4ZUxHS2Job0VST1lScVh4TworbmRhQzZ1RGNweGhnbUVXN0IyRFc2WnRYODE1NXYzb3Y2MU11TWFzOGZFUWpENVNURFA5cUVSeE5UZVBuaFczbQora0RaZDJqVUJFM2lvSGhUQnY0N2kxUFlVK0RSZTQya1k2ejBqVW1OUEs4VHNUS2ZkYnFUR1hnOVRIZTFLWUI3cQoraGRsanFHUzA4SWdCbC9xMmxLMk9PU3ljdTI3eGhmYjlNbzBCY0xCYWI5MldneUJ1K2NGUFFzS2lMNG1EN1F5SgorKzczTmRiMjFFdUFOVWpzUkRRM05Qa2xzc0pjeUpCMnY4NWVla3drMWFjWlVHMjFubzN3ZFR2anhoVkUvWHJkegorelVQOVdrdkFWZlVyd0dqVXpHNFlIRTh3a0hPN3hLYktpeE50K25RbURoZSt0SFZienRaalZ3Rko4MDEwZ2c9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBkNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMy5jcnQKQEAgLTAsMCArMSwxNyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDb2pDQ0FZcWdBd0lCQWdJQkRUQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVE13T0RBNU1Ea3hOekF6V2hjTk1qTXdPREEzTURreE56QXpXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQkpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUJBeklBQkgwQW9ReVVoUEFCUzM4eTY3dUVWczRPM1JYbUtLckJkVVI3L0wyUVBCOEVDMnA1CitmUWNzZWo2RUZhc3ZsVGRKLzZPQmtqQ0JqekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJUa0YyczJzZ2FKCitPdGxlUTdiZ1pIMkhxMzNlTnpCakJnTlZIU01FWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWRCtzK3ZNZjkvNkUvCitwRDB3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRCitiMnhoY2xOVFRDQlVaWE4wSUVOQmdnRUFNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUJqbVNJakdLRDFlSDVXCis0YmwyTVhmTklzVHdjMnZ2L01BQWhCekJFYlRYZDNUMzcrekFHUEdqS25jdlRCK291ZlVWUkdrb0tiZm9DNkptCitEWVNFVXV4dG5VWk9rby9DLy9YbENFdEswVHVTMmFMRXFGM2dKakJKVENmdGhFZEFoSkN0bVBBUURDemVLc2R4CitDb090SDBOUXg2WGw2NG9EdDJ3WVNRTldVVEdMUGZScGRzVkV2QkhoSFlBVFFpamtsMlpIOEJEanNZY0JpY3JTCitxbUNlTiswVDFCOXZyT1FWRVplK2Z3Z3pWTDM4bjhsa0paTlBJYmRvdkE5V0xId1hBRXpQdjRsYTN3MHFoNFRiCitrU2I4SHRJTGw0STQ3NFF4ckZ5d3lseVhSL3Ayem5QbGVSSVJnQjVIdFVwOXRMU1drQjBid01scVFsZzJFSFh1CitDQVExc1htUQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMy5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXIzLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNmNDRkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyMy5rZXkKQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KK01GOENBUUVFR0l0VG9ncEU3QU9uanZZdVRxbSs5T2FibXNYMDJYS0lBcUFLQmdncWhrak9QUU1CQWFFMEF6SUEKK0JIMEFvUXlVaFBBQlMzOHk2N3VFVnM0TzNSWG1LS3JCZFVSNy9MMlFQQjhFQzJwNWZRY3NlajZFRmFzdmxUZEoKKy93PT0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiMWFhNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjQuY3J0CkBAIC0wLDAgKzEsMTggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQzZqQ0NBbkNnQXdJQkFnSUJDREFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTWpBMFdoY05Nak13T1RJeU1UVTFNakEwV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENDQVNJd0RRWUpLb1pJaHZjTgorQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUt2WGpMNVZmWWM3RC90cnVxRXBZY1pjdmxVaG51Q05ESmN0WURKTAordmdZWWo1dXhEeExIQlh2bkVITGdPNUsrbHBzNDJwK3IvZGQ0b0U2NHR0Um9lWlpVdnIrN2VCblczNW4wRXBQQQorSWs5R3d1K3ZnN0dmeG1pZmdJUjhoWm5PUWt0Mk9qdnZwQ2hQQ3h2VWFpbHRCNDUwSXpoK21FSy9oWUZyKzdKbAorTm54UjFYUWxiYnlETTdFY3QxSHdZY3VTM01CbEJxcTA0OEorMEtFa1FYSUNTaktlSEZnYTllRENxK0p5ZnFlNQorYnQwSzMwaGwxTjAxNjRCN2FvaDA4RW9tbWUrYVN1QXN6K01zSjNtN0FPMkRVWWRyRHhscmt5MVFydlJXV2ZYMAorZDhkalRNK3VIVG8xRHZpUk02bzkrUDlEZm9GZDUzL1owS20wM3NWTFFXdlVyaEVDQXdFQUFhT0JuVENCbWpBSgorQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJUQWxBbTErMEw0MW1ocVlXakZpZWpzUlZyR2VUQnVCZ05WSFNNRQorWnpCbGdCU2RiU0FrU1FFL0s4dDR0Um04ZmlUSjIvczJmS0ZDcEVBd1BqRUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUnd3R2dZRFZRUURFeE5RYjJ4aGNuTnpiQ0JVWlhOMElFVkRJRU5CZ2drQQord1VQaWZtSkR6T2d3Q2dZSUtvWkl6ajBFQXdJRGFBQXdaUUl4QVBXbHhuTWNqQmF4YVZpZVFZU0xCcXppelMzLworTzhOYTZvd1JHUGswL1VLK2o1TzlOVEJIayt1WFcvZlFibEthbVFJd1VRbDRkbDZna1JERTRyQlIveUdqWloxWgorM2RFcHZMMldpbXQza2VEN0FjTHBZQjJGSjFtVmNZMVhRVWVLMVZmYworLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNC5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI0LmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTRkYWVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNC5rZXkKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRXBBSUJBQUtDQVFFQXE5ZU12bFY5aHpzUCsydTZvU2xoeGx5K1ZTR2U0STBNbHkxZ01rdStCaGlQbTdFUAorRXNjRmUrY1FjdUE3a3I2V216amFuNnY5MTNpZ1RyaTIxR2g1bGxTK3Y3dDRHZGJmbWZRU2s4QWlUMGJDNzYrRAorc1ovR2FKK0FoSHlGbWM1Q1MzWTZPKytrS0U4TEc5UnFLVzBIam5Rak9INllRcitGZ1d2N3NtVTJmRkhWZENWdAordklNenNSeTNVZkJoeTVMY3dHVUdxclRqd243UW9TUkJjZ0pLTXA0Y1dCcjE0TUtyNG5KK3A3bHUzUXJmU0dYVQorM1RYcmdIdHFpSFR3U2lhWjc1cEs0Q3pQNHl3bmVic0E3WU5SaDJzUEdXdVRMVkN1OUZaWjlmUjN4Mk5NejY0ZAorT2pVTytKRXpxajM0LzBOK2dWM25mOW5RcWJUZXhVdEJhOVN1RVFJREFRQUJBb0lCQUhueHRZdmdDUHR0RzFOVQoreUpUVFUvSTdJRW96V0phTElaTXFmU2hUL1o0LzBiRXZmYjNhZy9iQUt6a0tETngrNlV0dmxoMVhKUVRDTWlpTAorQmh0SHBIamMzSndkQWdaOEtDTU5SQjJiYS8yTC9vdXVwcXJtOGhxT2pkbjJyNnhNNVZpOXBtZWdFSU1XVEpETQorTlNYK25DMG9GMUpnNjlYNktWaUZjNURPS0ZNaGFjU0V3TEprdi9FcUNnZFdhQm9xTWxUdFRXS2RtMzR4U04yTAorUDVvOWtPZ2loVEJOVVVuVkJVV0ppVDdDNmJCQUZ3YjFyRUNwdk5PazZoK2x2RytmU0RaS1lkd0JyQXNLc3BJeQorL2FYWkQ0cWFpY2VmR2JsckhjWnYyb2cvellrRnM0cmlXTk9tZ2x4WnlySy8zckZGazBCOG1CazFtV1F2cks3KworSnEvUjRrMENnWUVBMGhPMjloSmplVEJEZE9XZ3p5WHI1dXBwbVIxV1U3ZnYvSnk4UExSTXZVdm1pTVFxUkRLMworendHYzZIOTM4d2RzdWJwZFRDTFBocTByaERDVHF0d0lFQXVGalpJWUpzNHlaemZ5NmtsYUQzNTE2aUlnYitXNworZmUxUmtZTUJwOXdWMHgyNzJ2elA0WTVwL2Z6cDV4aHZONTJPa2hRc2pIUkhld2ZEYVV3U0ZTY0NnWUVBMFdnaQora0dWSzZPeHpvTUNnaVd4L0wreTN5cll1SGRXQU5USUlhNVJ2Wms0VVFxRUZrR1lHVlAxcnBiQi9mQWExWXFldgorcVhrTFpxYWQyZGhKQ3VCVnJ5R3QyOUNIc2JuRVEvUXVUd2xHbXlaajFVOE5uSkJnTkNQVGRtR1RCSW0vN3c5UworRVNaNDhiVWxjcXpzWm4xQmlnL0E2SlgxZTVpOWIvMWp5b3pOVmdjQ2dZRUFuUlpjNDlpUVJaalBlR1FWUVpFTAordTVwaDZEckZ5TWhzVGlzdG52Nzd1ems4WTl5NzlrOHVuejZIaEZ0ODZHQU83enJxZFBvNjBHeEJkQkdXK2xhYQorT05WRXdyNFNEVUoyOGpRbUV3ZFNydTlUWVFhdjFyeWszTjlPOVU1UE9LUWNOY2V3SjJxUVVBdmNPaTZiQVZHRworS01KS1QvV0I4bTBvM2xqSnlMMDNjRlVDZ1lCb0hGVHE0MkZkOG9qK1NDYklqQ2VqNVJYdmM2bno3VHpqdGE5WQorQlNGcGhMSXYraXh4QVRodXN0djlNWVlBWExsN2hoRWd1ZXlBS2FCYk9Wdi9TMDl1VmRsQmF5aTdwTGMrYmIxRQorVUVGSlM4bmd1SC8wOGhiU2RXbGg5dHNJSzVCQVE2YXluaVVOVHRtQ2JSVFBVOERzNmk0bnRMNnFwMkt2dGhRUworRlBUVnF3S0JnUUM4bTJzSmFwTW1zMC83RWVHcFV3TU8rV05DSGVSeXVqbnJpV1lMOEttczBsbUFuOE5yUW9BNQord2dieDBuWi9Wclh0TFBHSHk5MTVqeERYT1UxWWMyZ3FFZjVRbS9HbkJ5VXVtbDFtVVNsZGlQY2lTSnZLek1xUAorTGVXbmI2MkhENjB0L3p3c3ROMjBZenQ2bUJMb2NtMVBQZFBoUHdlSS9FRjZwU2d2bHc1TlR3PT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWJhZHNpZ24uY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzY1MDcyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNIekNDQWFXZ0F3SUJBZ0lCQ1RBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU1qQTBXaGNOTWpNd09USXlNVFUxTWpBMFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0cKK0NDcUdTTTQ5QkFNQ0EyZ0FNR1VDTVFDYUxGelhwdHVpNVdRTjhMbE8zZGRoMWhNeHg2dHpnTHZUMDNNVFZLMlMKK0MxMnIwTHozcmkvbW9TRXBOWldxUGprQ01DRTJmNTNHWGNZTHF5ZnlKUjA3OGMveE5TVVU1K1h4bDdWWjQxNFYKK2ZHYTVrSHZIQVJCUGM4WUFJVklxRHZISDFBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjAuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDhkZDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjAuY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXIxYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MDE3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWEuY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1kZXIxYi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0MGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMWIuY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTMyMGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjIuY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyNC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjA1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjQuY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyOC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjguY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YmU3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjguY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyOS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjkuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDdmMWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjkuY3J0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZXhwaXJlZC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWV4cGlyZWQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjZlNWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWV4cGlyZWQuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0hqQ0NBYVdnQXdJQkFnSUJIakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTURRd016RXdNVEl3T1RNd1doY05NVFF3TXpBNE1USXdPVE13V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YramdaMHdnWm93Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFvRworQ0NxR1NNNDlCQU1DQTJjQU1HUUNNQ0R4dkRtaGxyRWswcjRocUN3dlFEeFdFb1hQYmJEMWdnbGZMVDNCc0dwdQorWEhVUTFXMkh3QjNvLzdONUkxM0JCZ0l3Y21HMTd6eU5JT2tZaXlFeFl0UENaQ3Bib2ZFTXBSWTVxV0cwSzZZTAorZk4wOGpTenlGdDZrYk80YWswRDZ0QzVRCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWZ1dHVyZS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LWZ1dHVyZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5Yzg0YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtZnV0dXJlLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNIakNDQWFXZ0F3SUJBZ0lCSFRBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK016SXdNekV3TVRFd05ERXhXaGNOTkRJd016QTRNVEV3TkRFeFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0cKK0NDcUdTTTQ5QkFNQ0EyY0FNR1FDTUFaV2NiK05ZeEZWSytXNlo1ZWtuTTJUcmJxUUdaRVlIUVhlVjkvWEYwdDcKK1RMRGhBNmEvcEZEVEpWWnVuRnplc2dJd2Zxa0JZdXZNa2lObFM0bFdjVnlmOEw0Q1pJSENuMXlIbk9DeHU4aXgKK3VxZ0xiNG5hM2k5NHg5dXJnYlpaWWZWSworLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zZWxmc2lnbmVkLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2VsZnNpZ25lZC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1NTY0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2VsZnNpZ25lZC5jcnQKQEAgLTAsMCArMSwxMiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCelRDQ0FYS2dBd0lCQWdJTVU2TExTeEpPcllOOXFKU3lNQW9HQ0NxR1NNNDlCQU1DTUVjeEV6QVJCZ05WCitCQU1UQ25ObGJHWnphV2R1WldReEVEQU9CZ05WQkFzVEIzUmxjM1JwYm1jeEVUQVBCZ05WQkFvVENGQnZiR0Z5CitVMU5NTVFzd0NRWURWUVFHRXdKT1REQWlHQTh5TURFME1EWXhPVEV4TXpZME0xb1lEekl3TWpRd05qRTRNVEV6CitOalF6V2pCSE1STXdFUVlEVlFRREV3cHpaV3htYzJsbmJtVmtNUkF3RGdZRFZRUUxFd2QwWlhOMGFXNW5NUkV3CitEd1lEVlFRS0V3aFFiMnhoY2xOVFRERUxNQWtHQTFVRUJoTUNUa3d3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPCitQUU1CQndOQ0FBUTN6RmJaZGdrZVduSSt4MWt0L3lCdTduejVCcEYwMEswVXRmZG9JbGxpa2s3bEFOZ2pFZi9xCitMOUkwWFYwV3ZZcUl3bXQzRFZYTmlpb08rZ0hJdE8zL28wQXdQakFNQmdOVkhSTUJBZjhFQWpBQU1BOEdBMVVkCitEd0VCL3dRRkF3TUhnQUF3SFFZRFZSME9CQllFRkxadFVSZ1hqbVdxOHV6Vjh3SGtiRkxDTkIxYk1Bb0dDQ3FHCitTTTQ5QkFNQ0Ewa0FNRVlDSVFDZi9iekZvZ2UwcENPSXJ0SHJBQmdjMStDbDlramxzSUNwZHVYaGRIVU1Pd0loCitBT0orbkJIZmFFR3lGNFBSSnZuL2pNRGVJYUgxemlzaW5WekMyditKUU9XcQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGExLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlMmQxNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDSFRDQ0FhU2dBd0lCQWdJQkVqQUpCZ2NxaGtqT1BRUUJNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lECitWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFUQWVGdzB4CitNekE1TWpReE5qSXhNamRhRncweU16QTVNakl4TmpJeE1qZGFNRFF4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lECitWUVFLRXdoUWIyeGhjbE5UVERFU01CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1Ga3dFd1lIS29aSXpqMENBUVlJCitLb1pJemowREFRY0RRZ0FFTjh4VzJYWUpIbHB5UHNkWkxmOGdidTU4K1FhUmROQ3RGTFgzYUNKWllwSk81UURZCitJeEgvNmkvU05GMWRGcjJLaU1KcmR3MVZ6WW9xRHZvQnlMVHQvNk9CblRDQm1qQUpCZ05WSFJNRUFqQUFNQjBHCitBMVVkRGdRV0JCUlFZYVdQMUFmWjE0SUJET1ZsZjR4alJxY1R2akJ1QmdOVkhTTUVaekJsZ0JTZGJTQWtTUUUvCitLOHQ0dFJtOGZpVEoyL3MyZktGQ3BFQXdQakVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5CitVMU5NTVJ3d0dnWURWUVFERXhOUWIyeGhjbk56YkNCVVpYTjBJRVZESUVOQmdna0F3VVBpZm1KRHpPZ3dDUVlICitLb1pJemowRUFRTm9BREJsQWpFQXlqdnpSV3R4Ylh2a29ZVFlTUVk5Z0ZCcFA3L3dUWjJxNkZiUmlBdVpVTEZ0CitsYzBQTVBEZlZaQ2hnQTZpREgrQkFqQmRrT2I3M2YycE93WnBNUnFyT2dxU3luYnQydVdZODdtQzVsUmxORW9SCitXWEV2MUF6SWVCQ3YrODFETjFJdXU0dz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMjI0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMjI0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2IxMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGEyMjQuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0lEQ0NBYVdnQXdJQkFnSUJFekFLQmdncWhrak9QUVFEQVRBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFl5TVRJM1doY05Nak13T1RJeU1UWXlNVEkzV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YramdaMHdnWm93Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFvRworQ0NxR1NNNDlCQU1CQTJrQU1HWUNNUUNqMEV5RlV6RFJtZm9rV3pMVkVXTjBlcFI0L3NaeXRmSWVvenA2QnFXSAorcWFUQmRBUjJ2dGhJS0M3ZEt1VWtnMzRDTVFENll0QjJPOVZzbzc5Z2J6U2VuMnFoN2dLN1Z2R0UrMzFFVlBiUgorQ2Uvb05HLzNPZmhSU2RuM0ZPdkJCZzJVRXJNPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGEzODQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS1zaGEzODQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNmE3OWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTM4NC5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDSHpDQ0FhV2dBd0lCQWdJQkZEQUtCZ2dxaGtqT1BRUURBekErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UWXlNVEkzV2hjTk1qTXdPVEl5TVRZeU1USTNXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqZ1owd2dab3dDUVlEVlIwVEJBSXdBREFkCitCZ05WSFE0RUZnUVVVR0dsajlRSDJkZUNBUXpsWlgrTVkwYW5FNzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCCitQeXZMZUxVWnZINGt5ZHY3Tm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoCitjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQW9HCitDQ3FHU000OUJBTURBMmdBTUdVQ01RQ25zZC82VkIya0xJcU1Sc1dka0p2UmFRUk95QWc3OENRRXhGRVkzQ012Cis5dDBrV1JYUGM0bkNNSDY5UmpRVnZDNENNQjRsazlBN2huWDJ6UXkzYmJVaE9DT3ZYY3NRZEVlOEFNZ0pCdml6Cis1Tm9iMndUaFJxc20xd2pDRjYwZnl6WFd1QT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTUxMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTUxMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxMTJhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhNTEyLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNIekNDQWFXZ0F3SUJBZ0lCRlRBS0JnZ3Foa2pPUFFRREJEQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRZeU1USTNXaGNOTWpNd09USXlNVFl5TVRJM1dqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pnWjB3Z1pvd0NRWURWUjBUQkFJd0FEQWQKK0JnTlZIUTRFRmdRVVVHR2xqOVFIMmRlQ0FRemxaWCtNWTBhbkU3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0IKK1B5dkxlTFVadkg0a3lkdjdObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGgKK2NsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bb0cKK0NDcUdTTTQ5QkFNRUEyZ0FNR1VDTUZQTDJPSThhcmNiUmxLQWJSYi9ZZkdpYm80TXd0czhLWDNmT3VSQ2JYRW4KK3BEV2ViODJrQnFmWHd6UEp3YW1GT3dJeEFQR3p5aFdyeG4wcUV5bldWNW56RkswMlBZQm5ZRmdDbElTeXl1ZEgKK0hKR0h0YkVWUmM1SkE4QUxuZ2dhTFZwdXZnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5NzQyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0h6Q0NBYVdnQXdJQkFnSUJDVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTWpBMFdoY05Nak13T1RJeU1UVTFNakEwV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YramdaMHdnWm93Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFvRworQ0NxR1NNNDlCQU1DQTJnQU1HVUNNUUNhTEZ6WHB0dWk1V1FOOExsTzNkZGgxaE14eDZ0emdMdlQwM01UVksyUworQzEycjBMejNyaS9tb1NFcE5aV3FQamtDTUNFMmY1M0dYY1lMcXlmeUpSMDc4Yy94TlNVVTUrWHhsN1ZaNDE0VgorZkdhNWtIdkhBUkJQYzhZQUlWSXFEdkhIMVE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3UtY2xpLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNsaS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhMmU0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNsaS5jcnQKQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCNURDQ0FXbWdBd0lCQWdJQlBEQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVFF3TkRFd01UY3lNVEl4V2hjTk1qUXdOREEzTVRjeU1USXhXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqWWpCZ01Ba0dBMVVkRXdRQ01BQXdIUVlECitWUjBPQkJZRUZGQmhwWS9VQjluWGdnRU01V1YvakdOR3B4TytNQjhHQTFVZEl3UVlNQmFBRkoxdElDUkpBVDhyCit5M2kxR2J4K0pNbmIrelo4TUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNQ01Bb0dDQ3FHU000OUJBTUNBMmtBCitNR1lDTVFDekh5RXZkNTZ6bTFBemZEQmkzcHN6M3JETC9tMFJOMlduYlJCUUp4SUpxandFWE9yS2F6a285bTlxCitvd2dhdTg4Q01RRHVJMGZzcTV0bnlpSFBhRFNBRTIxLzZobHJDUjZkZU5id3pCOTRPdVBJYngxd0lhczlEMWpjCisvL2lTbUt0Ymw4WT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk3YjQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3UtY3MuY3J0CkBAIC0wLDAgKzEsMTMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQjR6Q0NBV21nQXdJQkFnSUJPakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRRd05ERXdNVGN5TURReFdoY05NalF3TkRBM01UY3lNRFF4V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2YrallqQmdNQWtHQTFVZEV3UUNNQUF3SFFZRAorVlIwT0JCWUVGRkJocFkvVUI5blhnZ0VNNVdWL2pHTkdweE8rTUI4R0ExVWRJd1FZTUJhQUZKMXRJQ1JKQVQ4cgoreTNpMUdieCtKTW5iK3paOE1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TURNQW9HQ0NxR1NNNDlCQU1DQTJnQQorTUdVQ01RQzI5NG9WSzZmVWpIL2FiSTF4enl0VHVzaThkbDc1MThMMFkxOXE4emk5SzE5T3R4elBLMDloN3h5eQorZ2FKUnZwVUNNRlM2aFlocmh0Mzh5cXd3aFNWbG5tVE1WdGlyYTU4bUVVaEw2djdRencxc3ovRG00YVhrVzNzNgorSlFWMWtxcWJSdz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jc19hbnkuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3UtY3NfYW55LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE4NjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3UtY3NfYW55LmNydApAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI2VENDQVcrZ0F3SUJBZ0lCT3pBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UUXdOREV3TVRjeU1EVTRXaGNOTWpRd05EQTNNVGN5TURVNFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2phREJtTUFrR0ExVWRFd1FDTUFBd0hRWUQKK1ZSME9CQllFRkZCaHBZL1VCOW5YZ2dFTTVXVi9qR05HcHhPK01COEdBMVVkSXdRWU1CYUFGSjF0SUNSSkFUOHIKK3kzaTFHYngrSk1uYit6WjhNQmtHQTFVZEpRUVNNQkFHQ0NzR0FRVUZCd01EQmdSVkhTVUFNQW9HQ0NxR1NNNDkKK0JBTUNBMmdBTUdVQ01RQ1NZYXEvOUlLT1RreklyVS9lT3RwaGEvM2FmM0p3VDZ2S2g0TjNjU1g2MmtzTXowR1QKK1V4bXE0VUdNQnQ0Vm1Ca0NNQkdwWXFvZjZoUzFvOTJsdE5ScERTSHVWUStua2UxbE9zb1ExcGxacDRTSStiWTEKK2JVRC9XclVTTGx3aWtaQWVuZz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1zcnYuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDMxMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2LmNydApAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI1RENDQVdtZ0F3SUJBZ0lCUGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UUXdOREV3TVRjeU1UVTBXaGNOTWpRd05EQTNNVGN5TVRVMFdqQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUcKK0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMkNSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEKKzJDTVIvK292MGpSZFhSYTlpb2pDYTNjTlZjMktLZzc2QWNpMDdmK2pZakJnTUFrR0ExVWRFd1FDTUFBd0hRWUQKK1ZSME9CQllFRkZCaHBZL1VCOW5YZ2dFTTVXVi9qR05HcHhPK01COEdBMVVkSXdRWU1CYUFGSjF0SUNSSkFUOHIKK3kzaTFHYngrSk1uYit6WjhNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01CTUFvR0NDcUdTTTQ5QkFNQ0Eya0EKK01HWUNNUURRempXQjB4WnMvOElzcUpiN293WVl0Q2lUMTc5MzlVdWMvMXlCRjY5cEpSeTdLVi9xSmxITnZsVnUKK3F3V1ZUeDBDTVFETlcvMGRsWDFnVTZhc2hyWnY1THk0c2lqZy9nNjQ1ZkZwZk1LQ05YeXNFYjl4aUJlRWo1ZGUKKzJ4NXNYLzBPU3g0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1zcnZfY2xpLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU4ZmVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQKQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCN0RDQ0FYT2dBd0lCQWdJQlBUQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVFF3TkRFd01UY3lNVFF5V2hjTk1qUXdOREEzTVRjeU1UUXlXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDJDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBCisyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY05WYzJLS2c3NkFjaTA3ZitqYkRCcU1Ba0dBMVVkRXdRQ01BQXdIUVlECitWUjBPQkJZRUZGQmhwWS9VQjluWGdnRU01V1YvakdOR3B4TytNQjhHQTFVZEl3UVlNQmFBRkoxdElDUkpBVDhyCit5M2kxR2J4K0pNbmIrelo4TUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFqQUtCZ2dxCitoa2pPUFFRREFnTm5BREJrQWpBbVFqSnh4QzgyWmhCcEgvR1FrT1FYRG1hYVYvSkhSSEdvazFjV24zajNYajhBCitmcVJaa3A4SmlocEdJTXNlMjA4Q01GQ01kTkFmTmQxdHYrb1B1eW5vSzVPaDYvWWxBU1gvb3RKVDY4dm9FSUFOCitTbXNUMW05VlBRTUl5VW8vM1J0WWpnPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0NTllZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua2V5CkBAIC0wLDAgKzEsNSBAQAorLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCitNSGNDQVFFRUlQRXFFeUIyQW5Db1BMLzlVL1lESHZkcVhZYklvZ1R5d3d5cDYvVWZEdzZub0FvR0NDcUdTTTQ5CitBd0VIb1VRRFFnQUVOOHhXMlhZSkhscHlQc2RaTGY4Z2J1NTgrUWFSZE5DdEZMWDNhQ0paWXBKTzVRRFlJeEgvCis2aS9TTkYxZEZyMktpTUpyZHcxVnpZb3FEdm9CeUxUdC93PT0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3UtZHMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5rdS1kcy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkZDA3MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3UtZHMuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0xUQ0NBYktnQXdJQkFnSUJMVEFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRRd05EQTVNRGcwT0RNMVdoY05NalF3TkRBMk1EZzBPRE0xV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2Yramdhb3dnYWN3Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFzRworQTFVZER3UUVBd0lIZ0RBS0JnZ3Foa2pPUFFRREFnTnBBREJtQWpFQXpwNERrRk1xN2VEQjB4NUZlUzlnWURhRworT2w4clZuV2xSVExRekhaQlFqS3ArVGNCZEhaYUJQb2k4THlYdFdBNEFqRUE2T1doc3VUY3YvcVhPc2NRVDByTAorZUVoOHdjQ1FlSksxdU5kNzhsTnZ4M1cwUGN4ZGI2Y2Q3QWhhQUtnWEwrcjQKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5rdS1rYS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0NzMyNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2EuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0t6Q0NBYktnQXdJQkFnSUJMakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRRd05EQTVNRGcwT0RVd1doY05NalF3TkRBMk1EZzBPRFV3V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2Yramdhb3dnYWN3Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFzRworQTFVZER3UUVBd0lEQ0RBS0JnZ3Foa2pPUFFRREFnTm5BREJrQWpBQ3pLUTg4L052bmdNUUJGYzlyQzQ4NCtnTworQlJrWFAyOEJxUmNqOHNCdDNFZm1FR0gyM0J1aGtadUIxT0ZadU1JQ01DNC9wSGdiT1F0YVk5V1pQVVJPVVZWWgorT3VPNlhzVmJoaUUwcmIvbXVtcW1Vd3VPckN0Qy9LRmR2RlpvbDRCTkdBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5rdS1rZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhZTVhZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2UuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ0t6Q0NBYktnQXdJQkFnSUJMekFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRRd05EQTVNRGcwT1RBMFdoY05NalF3TkRBMk1EZzBPVEEwV2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFRworQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQQorMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOVmMyS0tnNzZBY2kwN2Yramdhb3dnYWN3Q1FZRFZSMFRCQUl3QURBZAorQmdOVkhRNEVGZ1FVVUdHbGo5UUgyZGVDQVF6bFpYK01ZMGFuRTc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQgorUHl2TGVMVVp2SDRreWR2N05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aAorY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUFzRworQTFVZER3UUVBd0lGSURBS0JnZ3Foa2pPUFFRREFnTm5BREJrQWpBTWwwQ2p2OWY0NWJIZUpUdWw1WHBZZUplVAorNTJaYU9MVGEvdVRMeTk0OEVuRUlpNnNqM25GYjlmdnNVYnNPT2pFQ01BWEFNWTY0S09xeml4ZWZ6M3kzWFMvZAorOW1peWVBclBPbVhVMkpKM0xHdU5icXFqOUliQUJhd0IxT0Q4djhnUm1nPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLmt1LnNoYTEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5rdS5zaGExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5rdS5zaGExCkBAIC0wLDAgKzEsOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJGakNCdkFJQkFEQThNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdqQVkKK0JnTlZCQU1URVZCdmJHRnlVMU5NSUZObGNuWmxjaUF4TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0QKK1FnQUVOOHhXMlhZSkhscHlQc2RaTGY4Z2J1NTgrUWFSZE5DdEZMWDNhQ0paWXBKTzVRRFlJeEgvNmkvU05GMWQKK0ZyMktpTUpyZHcxVnpZb3FEdm9CeUxUdC82QWVNQndHQ1NxR1NJYjNEUUVKRGpFUE1BMHdDd1lEVlIwUEJBUUQKK0FnSEFNQXNHQnlxR1NNNDlCQUVGQUFOSUFEQkZBaUJqbm5EN253c0ZuQ0wrTXBQUEZKRTNLL1Rnais1ckFnWGoKK2U1VWVqRFgyQ0FJaEFLZGJpZ1dKTC9aYXR2RzlDRkhxN3lrclJuczJ4OEpFWGVoV3U4RHNYZHg5CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTRhMTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGExCkBAIC0wLDAgKzEsOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJHRENCdndJQkFEQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVEKK0JnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDIKK0NSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY04KK1ZjMktLZzc2QWNpMDdmK2dLVEFuQmdrcWhraUc5dzBCQ1E0eEdqQVlNQWtHQTFVZEV3UUNNQUF3Q3dZRFZSMFAKK0JBUURBZ1hnTUFrR0J5cUdTTTQ5QkFFRFNRQXdSZ0loQUxTZjJNajNlcitvY1pDTisrYUVvSXA1UFE5SkNrUFkKK2I4OGdodVR5UzdEQ0FpRUErQ25Wek5OMEkya3BubUtVT1VjWHhMY2pvUGFMUk9neHR1YkR2S3Y1Y2tNPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEyMjQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEyMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2NjgzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTIyNApAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCR0RDQnZ3SUJBREEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRCitCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyCitDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOCitWYzJLS2c3NkFjaTA3ZitnS1RBbkJna3Foa2lHOXcwQkNRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQCitCQVFEQWdYZ01Bb0dDQ3FHU000OUJBTUJBMGdBTUVVQ0lEWWFOMW05TVJrNW1oWDFVOGFaS2QwYWx5R0tXcWNSCitvZ2xGMk1zSWlpLzJBaUVBakZIczhYUTBRNHlERjhvTHp0Q3hscTNuQXZxbVBkUXo5VCtUa0VmaCtQQT0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMjU2IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OWUxNWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEyNTYKQEAgLTAsMCArMSw4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQkZ6Q0J2d0lCQURBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUQorQmdOVkJBTVRDV3h2WTJGc2FHOXpkREJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRGZNVnRsMgorQ1I1YWNqN0hXUzMvSUc3dWZQa0drWFRRclJTMTkyZ2lXV0tTVHVVQTJDTVIvK292MGpSZFhSYTlpb2pDYTNjTgorVmMyS0tnNzZBY2kwN2YrZ0tUQW5CZ2txaGtpRzl3MEJDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUAorQkFRREFnWGdNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJR21SRmRqamQ1M29NMlpwdDNFNXZmcXVqbkErREhXaworczlPdWRjU1dCZGptQWlBN0JBWWpHblh5TDZBVFBxTTdxbkxWR1RmM0pNVCsxclhsN2VzQm0vMEFQQT09CistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTM4NCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTM4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzU1NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMzg0CkBAIC0wLDAgKzEsOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJGekNCdndJQkFEQTBNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVEKK0JnTlZCQU1UQ1d4dlkyRnNhRzl6ZERCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkRmTVZ0bDIKK0NSNWFjajdIV1MzL0lHN3VmUGtHa1hUUXJSUzE5MmdpV1dLU1R1VUEyQ01SLytvdjBqUmRYUmE5aW9qQ2EzY04KK1ZjMktLZzc2QWNpMDdmK2dLVEFuQmdrcWhraUc5dzBCQ1E0eEdqQVlNQWtHQTFVZEV3UUNNQUF3Q3dZRFZSMFAKK0JBUURBZ1hnTUFvR0NDcUdTTTQ5QkFNREEwY0FNRVFDSURuTytQSVBaSkdxaWt5OXVudnExM3VYeGFodzFicGsKK1piNU5SVjBjMDZRNUFpQW81QjQ5dHAza0ROL24wQkROdDFCQkdMVWZoY1UrUW4yU1FlbkN5ZnVHTGc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGE1MTIgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGE1MTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3NzQxZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTUxMgpAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCR0RDQnZ3SUJBREEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRCitCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJEZk1WdGwyCitDUjVhY2o3SFdTMy9JRzd1ZlBrR2tYVFFyUlMxOTJnaVdXS1NUdVVBMkNNUi8rb3YwalJkWFJhOWlvakNhM2NOCitWYzJLS2c3NkFjaTA3ZitnS1RBbkJna3Foa2lHOXcwQkNRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQCitCQVFEQWdYZ01Bb0dDQ3FHU000OUJBTUVBMGdBTUVVQ0lRRDh4ZHRsdVRpQkpNNTBkL1d2RGVVdlBiWE9VTWxMCis4eEVKWFUyV09LK1JMQUlnUzhVNlo4dGxKcFhMRWlzei9qNGdkQUJHM1kzaDRQQkpqbHBzekZpc1RObz0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi1zcy1jaGlsZC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI2LXNzLWNoaWxkLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzZmZDRkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi1zcy1jaGlsZC5jcnQKQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCOGpDQ0FabWdBd0lCQWdJTVU2TExXQ0k1bEhTbjdIbnNNQW9HQ0NxR1NNNDlCQU1DTUVjeEV6QVJCZ05WCitCQU1UQ25ObGJHWnphV2R1WldReEVEQU9CZ05WQkFzVEIzUmxjM1JwYm1jeEVUQVBCZ05WQkFvVENGQnZiR0Z5CitVMU5NTVFzd0NRWURWUVFHRXdKT1REQWlHQTh5TURFME1EWXhPVEV4TXpZMU5sb1lEekl3TWpRd05qRTRNVEV6CitOalUyV2pCTk1Sa3dGd1lEVlFRREV4QnpaV3htYzJsbmJtVmtMV05vYVd4a01SQXdEZ1lEVlFRTEV3ZDBaWE4wCithVzVuTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFTE1Ba0dBMVVFQmhNQ1Rrd3dXVEFUQmdjcWhrak9QUUlCCitCZ2dxaGtqT1BRTUJCd05DQUFTQldURjJTU1Q2RmEycm9ERnVEdTB6RWZxUkpWWEJzTUdjQTNJK21Mb3RwSEkzCitpUjlETjQwZmpqclk4RmZvTDAvSkFLVDMyM01Qc3NZRWxORkFPempqbzJFd1h6QU1CZ05WSFJNQkFmOEVBakFBCitNQThHQTFVZER3RUIvd1FGQXdNSGdBQXdIUVlEVlIwT0JCWUVGRHhackVvK0x2d0NOaS9hZmN2TG5IcXlpWmxUCitNQjhHQTFVZEl3UVlNQmFBRkxadFVSZ1hqbVdxOHV6Vjh3SGtiRkxDTkIxYk1Bb0dDQ3FHU000OUJBTUNBMGNBCitNRVFDSUFNbFE1OS9OVzdTMGhQMWN1NU9URDJ6cVQwODdiRW1uSWZPVEJZZmo4VUZBaUJCcnJ6MmRpcE9EVll4Cit2dlRzUW1TQ3pqcm0rSnRRUW9XYStjZG5BRzN3NWc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI2LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGY2NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyNi5jcnQKQEAgLTAsMCArMSwxNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDSURDQ0FhV2dBd0lCQWdJQkNqQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UVTFNakEwV2hjTk1qTXdPVEl5TVRVMU1qQTBXakEwTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQlpNQk1HQnlxR1NNNDlBZ0VHCitDQ3FHU000OUF3RUhBMElBQklGWk1YWkpKUG9WcmF1Z01XNE83VE1SK3BFbFZjR3d3WndEY2o2WXVpMmtjamVKCitIME0zalIrT090andWK2d2VDhrQXBQZmJjdyt5eGdTVTBVQTdPT09qZ1owd2dab3dDUVlEVlIwVEJBSXdBREFkCitCZ05WSFE0RUZnUVVmbVdQUGpNREZPWGh2bUN5NElWL2pPZGdLM3N3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCCitQeXZMZUxVWnZINGt5ZHY3Tm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoCitjbE5UVERFY01Cb0dBMVVFQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQW9HCitDQ3FHU000OUJBTUNBMmtBTUdZQ01RQ3NZVHlsZUJGdUk0bml6dXhvL2llNWR4Sm5EMHlud0NuUkorODRQWlA0CitBUUEzSGRVejBxTllzNENaMmFtOUd6MENNUURyMlROTEZBM0MzUzNwbWdYTVQwZUt6UjFDYTEvTnVsZjBsbFFaCitYajA5a0xib3h1ZW1QNDBJSXFoUW5wWXB0TWc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjYua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMTFjZmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI2LmtleQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJRVFaRzVqOElrUkx4YTlPb1pKekQzS2tyWHFJZ2k5Y0haTVZ2MnMvVmNQT29Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFZ1ZreGRra2sraFd0cTZBeGJnN3RNeEg2a1NWVndiREJuQU55UHBpNkxhUnlONGtmUXplTgorSDQ0NjJQQlg2QzlQeVFDazk5dHpEN0xHQkpUUlFEczQ0dz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjcuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDg3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3LmNydApAQCAtMCwwICsxLDIzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUR3akNDQWFxZ0F3SUJBZ0lCRURBTkJna3Foa2lHOXcwQkFRc0ZBREJJTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnQKK1pXUnBZWFJsSUVOQk1CNFhEVEV6TURreU5ERTJNVEl5TkZvWERUSXpNRGt5TWpFMk1USXlORm93TkRFTE1Ba0cKK0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXcKK1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFRY2JmZnAycVhxb1p5eWNobW9DUnh6cmQ0VnU5Nm0KKzQ3TlBCZWh0RUM0NmFUZVhnRG5CZGYrK3puQUJyQXRmWEJSTlF6OEFSSWVZQm1za3IyMnJsS2p5bzRHVk1JR1MKK01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGTklLMDZWM0g4NVZzRnhHb281emJMK2hZQ2E3TUdZR0ExVWQKK0l3UmZNRjJBRkRoMzJHdDNuQ2gzZ290TzJCdXBIdmVVRnJjT29VS2tRREErTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0MKK0FRNHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnSUJBRFJvUTVmSEt3K3ZrbDBEM2FxTFgxWHJaaWRiKzI1QVdiaHIKK0ZZWGRhc2tOMjE5UHJYQkwzY1Y4eDV0SzZxc1BLU3l5dzFsdWU4ME9taFhzL3c3UEprT0hIVVNXUm5tVHY3bHIKKzhVczNaci95T0YvVlZxemRHczdEbE9UcHl6RUJkdWdJOXVhci9hQ3FIRG9sdE44d09kdU9vUUI5YW9qWXBST2oKKytnamxFTzBtZ3QvODdYcGpZT2lnMW8wanY0NFFZRFFaUXpwajF6ZUluNldNZTZ4azlZRHdDTE1qUklwZysrYzcKK1F5eHZjRUpUbjgwd1gxU2FFQk0yZ2F1OTdHN2JPUkxNd0JWa01UNG9TWStpS1lncFBwYXdPbk1KYnFVUDczRG0KK3lmSkV4RGRyVy9CYldaL3ZLSWNTcVNaSWJrSGRrTmpVRFZIY3p5VndReFp4enZMRncvQjFrOXM3allGc2k1ZUsKK1ROQWRYRmE0ZXQxSDJzZCt1aHUyNEd4c2ptSmlvRHJmdGl4Y2d6UFZCakRDakg4UVdrQkVYMjkyV0o1OG9uMGUKK2RlV0xwWlVuelBkRTFCNHJzaVB3MVZnMjhtR2dyMk8xeGdCUXIvZng2QSs4SXROVHpBWGJaZkVjdWx0OXlwd00KKzBiNllETmU1SXZkS2s4aXd6M21vZjBWTnk0N0s2eG9DYUUvZnh4V2tqb1hLOHgyd2Zzd0dlUDJRZ1V6UUU5M2IKK090amRIcHNHMWM3Z0lWRlFtS0FUeUFQVXo0dnFtZXpnTlJsZVhVMG9MMFBZdG9DbUtRNTFVak5NVWZtTzl4Q2oKK1ZKYU5hMmlUUTVEZ2ljK0NXNFRZQWdqNS85ZzlYM1dmd25ETnhyWjBVeHhhd0dFbGN6SFhxYnJObGVUdFBhS3AKK2E4U2k2VUs1CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3LmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjcua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODgzMzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3LmtleQpAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJTEJETXM3YlJWeFZnNm92VHBmMnpCOW0rMjJqWTdSM0xOS1J2Q1BmYTZZSm9Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFSEczMzZkcWw2cUdjc25JWnFBa2NjNjNlRmJ2ZXB1T3pUd1hvYlJBdU9tazNsNEE1d1hYLwordnM1d0Fhd0xYMXdVVFVNL0FFU0htQVpySks5dHE1U284Zz09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X2FsbF9zcGFjZS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X2FsbF9zcGFjZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3OTgzMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfYWxsX3NwYWNlLmNydApAQCAtMCwwICsxLDQ3IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUR3akNDQWFxZ0F3SUJBZ0lCRURBTkJna3Foa2lHOXcwQkFRc0ZBREJJTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnQKK1pXUnBZWFJsSUVOQk1CNFhEVEV6TURreU5ERTJNVEl5TkZvWERUSXpNRGt5TWpFMk1USXlORm93TkRFTE1BayBHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcW9aeXljaG1vQ1J4enJkNFZ1OTZtCis0N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWUJtc2tyMjJybEtqeW80R1ZNSUdTCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRk5JSzA2VjNIODVWc0Z4R29vNXpiTCtoWUNhN01HWUdBMVVkCitJd1JmTUYyQUZEaDMyR3QzbkNoM2dvdE8yQnVwSHZlVUZyY09vVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEdDCitBUTR3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQURSb1E1ZkhLdyt2a2wwRDNhcUxYMVhyWmlkYisyNUFXYmhyCitGWVhkYXNrTjIxOVByWEJMM2NWOHg1dEs2cXNQS1N5eXcxbHVlODBPbWhYcy93N1BKa09ISFVTV1JubVR2N2xyCis4VXMzWnIveU9GL1ZWcXpkR3M3RGxPVHB5ekVCZHVnSTl1YXIvYUNxSERvbHROOHdPZHVPb1FCOWFvallwUk9qCisrZ2psRU8wbWd0Lzg3WHBqWU9pZzFvMGp2NDRRWURRWlF6cGoxemVJbjZXTWU2eGs5WUR3Q0xNalJJcGcrK2M3CitReXh2Y0VKVG44MHdYMVNhRUJNMmdhdTk3RzdiT1JMTXdCVmtNVDRvU1kraUtZZ3BQcGF3T25NSmJxVVA3M0RtCit5ZkpFeERkclcvQmJXWi92S0ljU3FTWklia0hka05qVURWSGN6eVZ3UXhaeHp2TEZ3L0IxazlzN2pZRnNpNWVLCitUTkFkWEZhNGV0MUgyc2QrdWh1MjRHeHNqbUppb0RyZnRpeGNnelBWQmpEQ2pIOFFXa0JFWDI5MldKNThvbjBlCitkZVdMcFpVbnpQZEUxQjRyc2lQdzFWZzI4bUdncjJPMXhnQlFyL2Z4NkErOEl0TlR6QVhiWmZFY3VsdDl5cHdNCiswYjZZRE5lNUl2ZEtrOGl3ejNtb2YwVk55NDdLNnhvQ2FFL2Z4eFdram9YSzh4Mndmc3dHZVAyUWdVelFFOTNiCitPdGpkSHBzRzFjN2dJVkZRbUtBVHlBUFV6NHZxbWV6Z05SbGVYVTBvTDBQWXRvQ21LUTUxVWpOTVVmbU85eENqCitWSmFOYTJpVFE1RGdpYytDVzRUWUFnajUvOWc5WDNXZnduRE54clowVXh4YXdHRWxjekhYcWJyTmxlVHRQYUtwCithOFNpNlVLNQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFQVRDQ0E0ZWdBd0lCQWdJQkRqQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UVTFOVEUwV2hjTk1qTXdPVEl5TVRVMU5URTBXakJJTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBbzFPYzhucjZmTVRxCit2b3dWK0NwQzU1aTVCWkdGR2M1MEViNFJMQlNSVEgxZTdKZXBkRmpBVmJCdHlRUkpTaVkxamEwdGdMUURES1pSCit3ZkVJK2I0YXpzZTQ2MEluUEh2N0MxVE4wdXBYbHh1ajZtOUIxSWxQK3NCYU03V0JDNmRWZlBPK2pWTUl4Z2tGCitDYUJDTGhoZEsxRmpmOEhqa1QvUGtjdFduaG84TlR3aXZjOStucVJaalhlL2VJY3FtNUh3akREaHUrZ3orbzBnCitWejlNZlpOaTFKeUNyT3lOWmN5K2NyMlFlTm5OVkduRnE4eFR4dHU2ZEx1bmhwbUxGajJtbTBWandhN1lwajVxCitBanBxVE10RHZxYlJ1VG95b3l6YWpoTU5jQ0FmN2d3ekl1cEpKRlZkamR0Z1lBY1F3emlrd0Y1SG9JVEp6ekoyCitxZ3hGN0NtdkdaTmI3Rzk5bUxkTGRodGNsSDN3QVFLSFl3RUdKbzdYS3lORXVIUFFnQitlMGNnMVNEMUhxbEFNCit1Q2ZHR1RXUTZtZTdCamFuM3QwTnpvVGREcTZJcEtUZXNiYVkrLzllMnhuOERDcmhCS0xYUU1aRkRacVVvTFlBCitrR1BPRUdndmxQbklJWEFhd291eENhTllFaDVVdzg3MVlNU1BUMjhyTGRGcjQ5ZHdZT3REZzlmb0E4aERJVzJQCitkNktYYnJadGVlc3ZBMW5ZekVPcyszQWpyYlQ3OU1kMlc4Qno5YnFCVk5sTk9FU1NxbTRraUNKRm1zbG0vNmJyCitOcDBNU1FkK28yMlBRNHhSdG1QNlVzVGZVMHVlaU1wWWM4VFlZaE1iZm5mRnlvNG03MDdlYmNmbFBiQkVOMmRnCit1cGRRNjZjdmZDSkIwUUp0OXVwYWZZMGxwZFYxcVVrQ0F3RUFBYU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVPSGYgWQorYTNlY0tIZUNpMDdZRzZrZTk1UVd0dzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFBQXdaUUl4QVB5RSt1K2VQN2dSclNGalFpY21wWWc4amlGVUNZRW93V1kyenVPRworaTFIWFl3bXBESGZhc1Ezck5TdWYvZ0h2andJd2JTU2p1bURrK3VZTmNpL0tNRUxEc0QwTUZIeFpoaEJjOUhwOQorQWY1Y05SOEtoemVnem5MNmFtUk9iR0dLbVgxRgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19pbnQtY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19pbnQtY2EuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGRjNDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X2ludC1jYS5jcnQKQEAgLTAsMCArMSw0NyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEd2pDQ0FhcWdBd0lCQWdJQkVEQU5CZ2txaGtpRzl3MEJBUXNGQURCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFek1Ea3lOREUyTVRJeU5Gb1hEVEl6TURreU1qRTJNVEl5TkZvd05ERUxNQWtHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcW9aeXljaG1vQ1J4enJkNFZ1OTZtCis0N05QQmVodEVDNDZhVGVYZ0RuQmRmKyt6bkFCckF0ZlhCUk5RejhBUkllWUJtc2tyMjJybEtqeW80R1ZNSUdTCitNQWtHQTFVZEV3UUNNQUF3SFFZRFZSME9CQllFRk5JSzA2VjNIODVWc0Z4R29vNXpiTCtoWUNhN01HWUdBMVVkCitJd1JmTUYyQUZEaDMyR3QzbkNoM2dvdE8yQnVwSHZlVUZyY09vVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEdDCitBUTR3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQURSb1E1ZkhLdyt2a2wwRDNhcUxYMVhyWmlkYisyNUFXYmhyCitGWVhkYXNrTjIxOVByWEJMM2NWOHg1dEs2cXNQS1N5eXcxbHVlODBPbWhYcy93N1BKa09ISFVTV1JubVR2N2xyCis4VXMzWnIveU9GL1ZWcXpkR3M3RGxPVHB5ekVCZHVnSTl1YXIvYUNxSERvbHROOHdPZHVPb1FCOWFvallwUk9qCisrZ2psRU8wbWd0Lzg3WHBqWU9pZzFvMGp2NDRRWURRWlF6cGoxemVJbjZXTWU2eGs5WUR3Q0xNalJJcGcrK2M3CitReXh2Y0VKVG44MHdYMVNhRUJNMmdhdTk3RzdiT1JMTXdCVmtNVDRvU1kraUtZZ3BQcGF3T25NSmJxVVA3M0RtCit5ZkpFeERkclcvQmJXWi92S0ljU3FTWklia0hka05qVURWSGN6eVZ3UXhaeHp2TEZ3L0IxazlzN2pZRnNpNWVLCitUTkFkWEZhNGV0MUgyc2QrdWh1MjRHeHNqbUppb0RyZnRpeGNnelBWQmpEQ2pIOFFXa0JFWDI5MldKNThvbjBlCitkZVdMcFpVbnpQZEUxQjRyc2lQdzFWZzI4bUdncjJPMXhnQlFyL2Z4NkErOEl0TlR6QVhiWmZFY3VsdDl5cHdNCiswYjZZRE5lNUl2ZEtrOGl3ejNtb2YwVk55NDdLNnhvQ2FFL2Z4eFdram9YSzh4Mndmc3dHZVAyUWdVelFFOTNiCitPdGpkSHBzRzFjN2dJVkZRbUtBVHlBUFV6NHZxbWV6Z05SbGVYVTBvTDBQWXRvQ21LUTUxVWpOTVVmbU85eENqCitWSmFOYTJpVFE1RGdpYytDVzRUWUFnajUvOWc5WDNXZnduRE54clowVXh4YXdHRWxjekhYcWJyTmxlVHRQYUtwCithOFNpNlVLNQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFQVRDQ0E0ZWdBd0lCQWdJQkRqQUtCZ2dxaGtqT1BRUURBakErTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwRXdIaGNOCitNVE13T1RJME1UVTFOVEUwV2hjTk1qTXdPVEl5TVRVMU5URTBXakJJTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBbzFPYzhucjZmTVRxCit2b3dWK0NwQzU1aTVCWkdGR2M1MEViNFJMQlNSVEgxZTdKZXBkRmpBVmJCdHlRUkpTaVkxamEwdGdMUURES1pSCit3ZkVJK2I0YXpzZTQ2MEluUEh2N0MxVE4wdXBYbHh1ajZtOUIxSWxQK3NCYU03V0JDNmRWZlBPK2pWTUl4Z2tGCitDYUJDTGhoZEsxRmpmOEhqa1QvUGtjdFduaG84TlR3aXZjOStucVJaalhlL2VJY3FtNUh3akREaHUrZ3orbzBnCitWejlNZlpOaTFKeUNyT3lOWmN5K2NyMlFlTm5OVkduRnE4eFR4dHU2ZEx1bmhwbUxGajJtbTBWandhN1lwajVxCitBanBxVE10RHZxYlJ1VG95b3l6YWpoTU5jQ0FmN2d3ekl1cEpKRlZkamR0Z1lBY1F3emlrd0Y1SG9JVEp6ekoyCitxZ3hGN0NtdkdaTmI3Rzk5bUxkTGRodGNsSDN3QVFLSFl3RUdKbzdYS3lORXVIUFFnQitlMGNnMVNEMUhxbEFNCit1Q2ZHR1RXUTZtZTdCamFuM3QwTnpvVGREcTZJcEtUZXNiYVkrLzllMnhuOERDcmhCS0xYUU1aRkRacVVvTFlBCitrR1BPRUdndmxQbklJWEFhd291eENhTllFaDVVdzg3MVlNU1BUMjhyTGRGcjQ5ZHdZT3REZzlmb0E4aERJVzJQCitkNktYYnJadGVlc3ZBMW5ZekVPcyszQWpyYlQ3OU1kMlc4Qno5YnFCVk5sTk9FU1NxbTRraUNKRm1zbG0vNmJyCitOcDBNU1FkK28yMlBRNHhSdG1QNlVzVGZVMHVlaU1wWWM4VFlZaE1iZm5mRnlvNG03MDdlYmNmbFBiQkVOMmRnCit1cGRRNjZjdmZDSkIwUUp0OXVwYWZZMGxwZFYxcVVrQ0F3RUFBYU9Cb0RDQm5UQWRCZ05WSFE0RUZnUVVPSGZZCithM2VjS0hlQ2kwN1lHNmtlOTVRV3R3NHdiZ1lEVlIwakJHY3daWUFVblcwZ0pFa0JQeXZMZUxVWnZINGt5ZHY3CitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFCitBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVlJSkFNRkQ0bjVpUTh6b01Bd0dBMVVkRXdRRk1BTUJBZjh3CitDZ1lJS29aSXpqMEVBd0lEYUFBd1pRSXhBUHlFK3UrZVA3Z1JyU0ZqUWljbXBZZzhqaUZVQ1lFb3dXWTJ6dU9HCitpMUhYWXdtcERIZmFzUTNyTlN1Zi9nSHZqd0l3YlNTanVtRGsrdVlOY2kvS01FTERzRDBNRkh4WmhoQmM5SHA5CitBZjVjTlI4S2h6ZWd6bkw2YW1ST2JHR0ttWDFGCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI3X2ludC1jYV9jYTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19pbnQtY2FfY2EyLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg5YzBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19pbnQtY2FfY2EyLmNydApAQCAtMCwwICsxLDYyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUR3akNDQWFxZ0F3SUJBZ0lCRURBTkJna3Foa2lHOXcwQkFRc0ZBREJJTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEpqQWtCZ05WQkFNVEhWQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnQKK1pXUnBZWFJsSUVOQk1CNFhEVEV6TURreU5ERTJNVEl5TkZvWERUSXpNRGt5TWpFMk1USXlORm93TkRFTE1Ba0cKK0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXcKK1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFRY2JmZnAycVhxb1p5eWNobW9DUnh6cmQ0VnU5Nm0KKzQ3TlBCZWh0RUM0NmFUZVhnRG5CZGYrK3puQUJyQXRmWEJSTlF6OEFSSWVZQm1za3IyMnJsS2p5bzRHVk1JR1MKK01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGTklLMDZWM0g4NVZzRnhHb281emJMK2hZQ2E3TUdZR0ExVWQKK0l3UmZNRjJBRkRoMzJHdDNuQ2gzZ290TzJCdXBIdmVVRnJjT29VS2tRREErTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0MKK0FRNHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnSUJBRFJvUTVmSEt3K3ZrbDBEM2FxTFgxWHJaaWRiKzI1QVdiaHIKK0ZZWGRhc2tOMjE5UHJYQkwzY1Y4eDV0SzZxc1BLU3l5dzFsdWU4ME9taFhzL3c3UEprT0hIVVNXUm5tVHY3bHIKKzhVczNaci95T0YvVlZxemRHczdEbE9UcHl6RUJkdWdJOXVhci9hQ3FIRG9sdE44d09kdU9vUUI5YW9qWXBST2oKKytnamxFTzBtZ3QvODdYcGpZT2lnMW8wanY0NFFZRFFaUXpwajF6ZUluNldNZTZ4azlZRHdDTE1qUklwZysrYzcKK1F5eHZjRUpUbjgwd1gxU2FFQk0yZ2F1OTdHN2JPUkxNd0JWa01UNG9TWStpS1lncFBwYXdPbk1KYnFVUDczRG0KK3lmSkV4RGRyVy9CYldaL3ZLSWNTcVNaSWJrSGRrTmpVRFZIY3p5VndReFp4enZMRncvQjFrOXM3allGc2k1ZUsKK1ROQWRYRmE0ZXQxSDJzZCt1aHUyNEd4c2ptSmlvRHJmdGl4Y2d6UFZCakRDakg4UVdrQkVYMjkyV0o1OG9uMGUKK2RlV0xwWlVuelBkRTFCNHJzaVB3MVZnMjhtR2dyMk8xeGdCUXIvZng2QSs4SXROVHpBWGJaZkVjdWx0OXlwd00KKzBiNllETmU1SXZkS2s4aXd6M21vZjBWTnk0N0s2eG9DYUUvZnh4V2tqb1hLOHgyd2Zzd0dlUDJRZ1V6UUU5M2IKK090amRIcHNHMWM3Z0lWRlFtS0FUeUFQVXo0dnFtZXpnTlJsZVhVMG9MMFBZdG9DbUtRNTFVak5NVWZtTzl4Q2oKK1ZKYU5hMmlUUTVEZ2ljK0NXNFRZQWdqNS85ZzlYM1dmd25ETnhyWjBVeHhhd0dFbGN6SFhxYnJObGVUdFBhS3AKK2E4U2k2VUs1CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVBVENDQTRlZ0F3SUJBZ0lCRGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU5URTBXaGNOTWpNd09USXlNVFUxTlRFMFdqQklNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRU5CTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFvMU9jOG5yNmZNVHEKK3Zvd1YrQ3BDNTVpNUJaR0ZHYzUwRWI0UkxCU1JUSDFlN0plcGRGakFWYkJ0eVFSSlNpWTFqYTB0Z0xRRERLWlIKK3dmRUkrYjRhenNlNDYwSW5QSHY3QzFUTjB1cFhseHVqNm05QjFJbFArc0JhTTdXQkM2ZFZmUE8ralZNSXhna0YKK0NhQkNMaGhkSzFGamY4SGprVC9Qa2N0V25obzhOVHdpdmM5K25xUlpqWGUvZUljcW01SHdqRERodStneitvMGcKK1Z6OU1mWk5pMUp5Q3JPeU5aY3krY3IyUWVObk5WR25GcTh4VHh0dTZkTHVuaHBtTEZqMm1tMFZqd2E3WXBqNXEKK0FqcHFUTXREdnFiUnVUb3lveXphamhNTmNDQWY3Z3d6SXVwSkpGVmRqZHRnWUFjUXd6aWt3RjVIb0lUSnp6SjIKK3FneEY3Q212R1pOYjdHOTltTGRMZGh0Y2xIM3dBUUtIWXdFR0pvN1hLeU5FdUhQUWdCK2UwY2cxU0QxSHFsQU0KK3VDZkdHVFdRNm1lN0JqYW4zdDBOem9UZERxNklwS1Rlc2JhWSsvOWUyeG44RENyaEJLTFhRTVpGRFpxVW9MWUEKK2tHUE9FR2d2bFBuSUlYQWF3b3V4Q2FOWUVoNVV3ODcxWU1TUFQyOHJMZEZyNDlkd1lPdERnOWZvQThoRElXMlAKK2Q2S1hiclp0ZWVzdkExbll6RU9zKzNBanJiVDc5TWQyVzhCejlicUJWTmxOT0VTU3FtNGtpQ0pGbXNsbS82YnIKK05wME1TUWQrbzIyUFE0eFJ0bVA2VXNUZlUwdWVpTXBZYzhUWVloTWJmbmZGeW80bTcwN2ViY2ZsUGJCRU4yZGcKK3VwZFE2NmN2ZkNKQjBRSnQ5dXBhZlkwbHBkVjFxVWtDQXdFQUFhT0JvRENCblRBZEJnTlZIUTRFRmdRVU9IZlkKK2EzZWNLSGVDaTA3WUc2a2U5NVFXdHc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhQUF3WlFJeEFQeUUrdStlUDdnUnJTRmpRaWNtcFlnOGppRlVDWUVvd1dZMnp1T0cKK2kxSFhZd21wREhmYXNRM3JOU3VmL2dIdmp3SXdiU1NqdW1Eayt1WU5jaS9LTUVMRHNEME1GSHhaaGhCYzlIcDkKK0FmNWNOUjhLaHplZ3puTDZhbVJPYkdHS21YMUYKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfcGVtX3NwYWNlLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfcGVtX3NwYWNlLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWYwZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN19wZW1fc3BhY2UuY3J0CkBAIC0wLDAgKzEsNDcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRHdqQ0NBYXFnQXdJQkFnSUJFREFOQmdrcWhraUc5dzBCQVFzRkFEQklNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdAorWldScFlYUmxJRU5CTUI0WERURXpNRGt5TkRFMk1USXlORm9YRFRJek1Ea3lNakUyTVRJeU5Gb3dOREVMTUFrIEcKK0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXcKK1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFRY2JmZnAycVhxb1p5eWNobW9DUnh6cmQ0VnU5Nm0KKzQ3TlBCZWh0RUM0NmFUZVhnRG5CZGYrK3puQUJyQXRmWEJSTlF6OEFSSWVZQm1za3IyMnJsS2p5bzRHVk1JR1MKK01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGTklLMDZWM0g4NVZzRnhHb281emJMK2hZQ2E3TUdZR0ExVWQKK0l3UmZNRjJBRkRoMzJHdDNuQ2gzZ290TzJCdXBIdmVVRnJjT29VS2tRREErTVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEhEQWFCZ05WQkFNVEUxQnZiR0Z5YzNOc0lGUmxjM1FnUlVNZ1EwR0MKK0FRNHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnSUJBRFJvUTVmSEt3K3ZrbDBEM2FxTFgxWHJaaWRiKzI1QVdiaHIKK0ZZWGRhc2tOMjE5UHJYQkwzY1Y4eDV0SzZxc1BLU3l5dzFsdWU4ME9taFhzL3c3UEprT0hIVVNXUm5tVHY3bHIKKzhVczNaci95T0YvVlZxemRHczdEbE9UcHl6RUJkdWdJOXVhci9hQ3FIRG9sdE44d09kdU9vUUI5YW9qWXBST2oKKytnamxFTzBtZ3QvODdYcGpZT2lnMW8wanY0NFFZRFFaUXpwajF6ZUluNldNZTZ4azlZRHdDTE1qUklwZysrYzcKK1F5eHZjRUpUbjgwd1gxU2FFQk0yZ2F1OTdHN2JPUkxNd0JWa01UNG9TWStpS1lncFBwYXdPbk1KYnFVUDczRG0KK3lmSkV4RGRyVy9CYldaL3ZLSWNTcVNaSWJrSGRrTmpVRFZIY3p5VndReFp4enZMRncvQjFrOXM3allGc2k1ZUsKK1ROQWRYRmE0ZXQxSDJzZCt1aHUyNEd4c2ptSmlvRHJmdGl4Y2d6UFZCakRDakg4UVdrQkVYMjkyV0o1OG9uMGUKK2RlV0xwWlVuelBkRTFCNHJzaVB3MVZnMjhtR2dyMk8xeGdCUXIvZng2QSs4SXROVHpBWGJaZkVjdWx0OXlwd00KKzBiNllETmU1SXZkS2s4aXd6M21vZjBWTnk0N0s2eG9DYUUvZnh4V2tqb1hLOHgyd2Zzd0dlUDJRZ1V6UUU5M2IKK090amRIcHNHMWM3Z0lWRlFtS0FUeUFQVXo0dnFtZXpnTlJsZVhVMG9MMFBZdG9DbUtRNTFVak5NVWZtTzl4Q2oKK1ZKYU5hMmlUUTVEZ2ljK0NXNFRZQWdqNS85ZzlYM1dmd25ETnhyWjBVeHhhd0dFbGN6SFhxYnJObGVUdFBhS3AKK2E4U2k2VUs1CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVBVENDQTRlZ0F3SUJBZ0lCRGpBS0JnZ3Foa2pPUFFRREFqQStNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04KK01UTXdPVEkwTVRVMU5URTBXaGNOTWpNd09USXlNVFUxTlRFMFdqQklNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SmpBa0JnTlZCQU1USFZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRU5CTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFvMU9jOG5yNmZNVHEKK3Zvd1YrQ3BDNTVpNUJaR0ZHYzUwRWI0UkxCU1JUSDFlN0plcGRGakFWYkJ0eVFSSlNpWTFqYTB0Z0xRRERLWlIKK3dmRUkrYjRhenNlNDYwSW5QSHY3QzFUTjB1cFhseHVqNm05QjFJbFArc0JhTTdXQkM2ZFZmUE8ralZNSXhna0YKK0NhQkNMaGhkSzFGamY4SGprVC9Qa2N0V25obzhOVHdpdmM5K25xUlpqWGUvZUljcW01SHdqRERodStneitvMGcKK1Z6OU1mWk5pMUp5Q3JPeU5aY3krY3IyUWVObk5WR25GcTh4VHh0dTZkTHVuaHBtTEZqMm1tMFZqd2E3WXBqNXEKK0FqcHFUTXREdnFiUnVUb3lveXphamhNTmNDQWY3Z3d6SXVwSkpGVmRqZHRnWUFjUXd6aWt3RjVIb0lUSnp6SjIKK3FneEY3Q212R1pOYjdHOTltTGRMZGh0Y2xIM3dBUUtIWXdFR0pvN1hLeU5FdUhQUWdCK2UwY2cxU0QxSHFsQU0KK3VDZkdHVFdRNm1lN0JqYW4zdDBOem9UZERxNklwS1Rlc2JhWSsvOWUyeG44RENyaEJLTFhRTVpGRFpxVW9MWUEKK2tHUE9FR2d2bFBuSUlYQWF3b3V4Q2FOWUVoNVV3ODcxWU1TUFQyOHJMZEZyNDlkd1lPdERnOWZvQThoRElXMlAKK2Q2S1hiclp0ZWVzdkExbll6RU9zKzNBanJiVDc5TWQyVzhCejlicUJWTmxOT0VTU3FtNGtpQ0pGbXNsbS82YnIKK05wME1TUWQrbzIyUFE0eFJ0bVA2VXNUZlUwdWVpTXBZYzhUWVloTWJmbmZGeW80bTcwN2ViY2ZsUGJCRU4yZGcKK3VwZFE2NmN2ZkNKQjBRSnQ5dXBhZlkwbHBkVjFxVWtDQXdFQUFhT0JvRENCblRBZEJnTlZIUTRFRmdRVU9IZlkKK2EzZWNLSGVDaTA3WUc2a2U5NVFXdHc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhQUF3WlFJeEFQeUUrdStlUDdnUnJTRmpRaWNtcFlnOGppRlVDWUVvd1dZMnp1T0cKK2kxSFhZd21wREhmYXNRM3JOU3VmL2dIdmp3SXdiU1NqdW1Eayt1WU5jaS9LTUVMRHNEME1GSHhaaGhCYzlIcDkKK0FmNWNOUjhLaHplZ3puTDZhbVJPYkdHS21YMUYKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfdHJhaWxpbmdfc3BhY2UuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyN190cmFpbGluZ19zcGFjZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhZjhjZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjdfdHJhaWxpbmdfc3BhY2UuY3J0CkBAIC0wLDAgKzEsNDcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLSAKK01JSUR3akNDQWFxZ0F3SUJBZ0lCRURBTkJna3Foa2lHOXcwQkFRc0ZBREJJTVFzd0NRWURWUVFHRXdKT1RERVIgCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0IAorWldScFlYUmxJRU5CTUI0WERURXpNRGt5TkRFMk1USXlORm9YRFRJek1Ea3lNakUyTVRJeU5Gb3dOREVMTUFrRyAKK0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXcgCitXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUWNiZmZwMnFYcW9aeXljaG1vQ1J4enJkNFZ1OTZtIAorNDdOUEJlaHRFQzQ2YVRlWGdEbkJkZisrem5BQnJBdGZYQlJOUXo4QVJJZVlCbXNrcjIycmxLanlvNEdWTUlHUyAKK01Ba0dBMVVkRXdRQ01BQXdIUVlEVlIwT0JCWUVGTklLMDZWM0g4NVZzRnhHb281emJMK2hZQ2E3TUdZR0ExVWQgCitJd1JmTUYyQUZEaDMyR3QzbkNoM2dvdE8yQnVwSHZlVUZyY09vVUtrUURBK01Rc3dDUVlEVlFRR0V3Sk9UREVSIAorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBHQyAKK0FRNHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnSUJBRFJvUTVmSEt3K3ZrbDBEM2FxTFgxWHJaaWRiKzI1QVdiaHIgCitGWVhkYXNrTjIxOVByWEJMM2NWOHg1dEs2cXNQS1N5eXcxbHVlODBPbWhYcy93N1BKa09ISFVTV1JubVR2N2xyIAorOFVzM1pyL3lPRi9WVnF6ZEdzN0RsT1RweXpFQmR1Z0k5dWFyL2FDcUhEb2x0Tjh3T2R1T29RQjlhb2pZcFJPaiAKKytnamxFTzBtZ3QvODdYcGpZT2lnMW8wanY0NFFZRFFaUXpwajF6ZUluNldNZTZ4azlZRHdDTE1qUklwZysrYzcgCitReXh2Y0VKVG44MHdYMVNhRUJNMmdhdTk3RzdiT1JMTXdCVmtNVDRvU1kraUtZZ3BQcGF3T25NSmJxVVA3M0RtIAoreWZKRXhEZHJXL0JiV1ovdktJY1NxU1pJYmtIZGtOalVEVkhjenlWd1F4Wnh6dkxGdy9CMWs5czdqWUZzaTVlSyAKK1ROQWRYRmE0ZXQxSDJzZCt1aHUyNEd4c2ptSmlvRHJmdGl4Y2d6UFZCakRDakg4UVdrQkVYMjkyV0o1OG9uMGUgCitkZVdMcFpVbnpQZEUxQjRyc2lQdzFWZzI4bUdncjJPMXhnQlFyL2Z4NkErOEl0TlR6QVhiWmZFY3VsdDl5cHdNIAorMGI2WUROZTVJdmRLazhpd3ozbW9mMFZOeTQ3SzZ4b0NhRS9meHhXa2pvWEs4eDJ3ZnN3R2VQMlFnVXpRRTkzYiAKK090amRIcHNHMWM3Z0lWRlFtS0FUeUFQVXo0dnFtZXpnTlJsZVhVMG9MMFBZdG9DbUtRNTFVak5NVWZtTzl4Q2ogCitWSmFOYTJpVFE1RGdpYytDVzRUWUFnajUvOWc5WDNXZnduRE54clowVXh4YXdHRWxjekhYcWJyTmxlVHRQYUtwIAorYThTaTZVSzUgCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIAorTUlJRUFUQ0NBNGVnQXdJQkFnSUJEakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RyAKK0ExVUVDaE1JVUc5c1lYSlRVMHd4SERBYUJnTlZCQU1URTFCdmJHRnljM05zSUZSbGMzUWdSVU1nUTBFd0hoY04gCitNVE13T1RJME1UVTFOVEUwV2hjTk1qTXdPVEl5TVRVMU5URTBXakJJTVFzd0NRWURWUVFHRXdKT1RERVJNQThHIAorQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScCAKK1lYUmxJRU5CTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFvMU9jOG5yNmZNVHEgCit2b3dWK0NwQzU1aTVCWkdGR2M1MEViNFJMQlNSVEgxZTdKZXBkRmpBVmJCdHlRUkpTaVkxamEwdGdMUURES1pSIAord2ZFSStiNGF6c2U0NjBJblBIdjdDMVROMHVwWGx4dWo2bTlCMUlsUCtzQmFNN1dCQzZkVmZQTytqVk1JeGdrRiAKK0NhQkNMaGhkSzFGamY4SGprVC9Qa2N0V25obzhOVHdpdmM5K25xUlpqWGUvZUljcW01SHdqRERodStneitvMGcgCitWejlNZlpOaTFKeUNyT3lOWmN5K2NyMlFlTm5OVkduRnE4eFR4dHU2ZEx1bmhwbUxGajJtbTBWandhN1lwajVxIAorQWpwcVRNdER2cWJSdVRveW95emFqaE1OY0NBZjdnd3pJdXBKSkZWZGpkdGdZQWNRd3ppa3dGNUhvSVRKenpKMiAKK3FneEY3Q212R1pOYjdHOTltTGRMZGh0Y2xIM3dBUUtIWXdFR0pvN1hLeU5FdUhQUWdCK2UwY2cxU0QxSHFsQU0gCit1Q2ZHR1RXUTZtZTdCamFuM3QwTnpvVGREcTZJcEtUZXNiYVkrLzllMnhuOERDcmhCS0xYUU1aRkRacVVvTFlBIAora0dQT0VHZ3ZsUG5JSVhBYXdvdXhDYU5ZRWg1VXc4NzFZTVNQVDI4ckxkRnI0OWR3WU90RGc5Zm9BOGhESVcyUCAKK2Q2S1hiclp0ZWVzdkExbll6RU9zKzNBanJiVDc5TWQyVzhCejlicUJWTmxOT0VTU3FtNGtpQ0pGbXNsbS82YnIgCitOcDBNU1FkK28yMlBRNHhSdG1QNlVzVGZVMHVlaU1wWWM4VFlZaE1iZm5mRnlvNG03MDdlYmNmbFBiQkVOMmRnIAordXBkUTY2Y3ZmQ0pCMFFKdDl1cGFmWTBscGRWMXFVa0NBd0VBQWFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVT0hmWSAKK2EzZWNLSGVDaTA3WUc2a2U5NVFXdHc0d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcgCitObnloUXFSQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFY01Cb0dBMVVFIAorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dyAKK0NnWUlLb1pJemowRUF3SURhQUF3WlFJeEFQeUUrdStlUDdnUnJTRmpRaWNtcFlnOGppRlVDWUVvd1dZMnp1T0cgCitpMUhYWXdtcERIZmFzUTNyTlN1Zi9nSHZqd0l3YlNTanVtRGsrdVlOY2kvS01FTERzRDBNRkh4WmhoQmM5SHA5IAorQWY1Y05SOEtoemVnem5MNmFtUk9iR0dLbVgxRiAKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0gCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjguY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzViMmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4LmNydApAQCAtMCwwICsxLDE4IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUM2ekNDQW5LZ0F3SUJBZ0lCRVRBS0JnZ3Foa2pPUFFRREFqQkxNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4S1RBbkJnTlZCQU1USUZCdmJHRnlVMU5NSUZSbGMzUWdTVzUwWlhKdFpXUnAKK1lYUmxJRVZESUVOQk1CNFhEVEV6TURreU5ERTJNVEkxTmxvWERUSXpNRGt5TWpFMk1USTFObG93TkRFTE1Ba0cKK0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXcKK2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURiSEg4dUM4Mi96dEYxRUtDaXVNNTkKK3F1SUY0SHJZUkdPUHRiM0FzQm01TjdnWlNnN3hYWFNBWjBhSEJ0NWJmd1lEdmNHTlhnY1YxRnYwM09YUFBmbkIKK0VTeXVhcm1LdlIxblpoZnFUcjNiRlpxQ2grVHdlTU9qaFlldy9aK3BtVi9qTSt6TTZndTFZVjd4U1g0L295M3EKK0FRek1RcHAybThUUU45T3hGd0ZoQVJaWmZod1h3MVA5MFhMTFRHQVYybjNpNnExUTc0N2lpOVJxZDFYV2NObHIKK3UvSHVPUVE0bzczaTBlQm1hK0tjUjVucEtPYTIvQzdLWjBPRTZOV0QxcDJZYXdFK2dkdzhlc3I1ODV6MzFpZ2IKK0ozaDh3OURWWTZlQk5JbXRKV3E5OHVydCtsZjg1VFRHd1E5eExkSUlFQnV0UkVIZy9ubWdZNU9Lc1YzcHNPNXYKK0FnTUJBQUdqZ1pJd2dZOHdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVNGovbUxmVG51S2FNM0cwWHB4aEEKK0oyRjJEeDB3WXdZRFZSMGpCRnd3V29BVUQ0bTlZMEhyeTE0WEtQOW9NRDNCaU5DY1dEbWhQNlE5TURzeEN6QUoKK0JnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2cKK1ZHVnpkQ0JEUVlJQkR6QUtCZ2dxaGtqT1BRUURBZ05uQURCa0FqQmtQMWJHbFp2eG5ZeVNaamRCcTRtOGxreXoKKzJjamZxallzOENPRWtSa09OYVZ6Nzg4OEh2RmRHcEw5OHVRZUZ2RUNNSEN5Q3JIcHJrR3p2cS9MOWtVbng5QmgKKzJJSGJDemJiaTltb1lDMVhjT3hnZnNFS21odFZGL3VRZGY4KzNWdEdxQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4LmtleSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjgua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTk0MWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI4LmtleQpAQCAtMCwwICsxLDI3IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlFb3dJQkFBS0NBUUVBMnh4L0xndk52ODdSZFJDZ29yak9mYXJpQmVCNjJFUmpqN1c5d0xBWnVUZTRHVW9PCis4VjEwZ0dkR2h3YmVXMzhHQTczQmpWNEhGZFJiOU56bHp6MzV3UkVzcm1xNWlyMGRaMllYNms2OTJ4V2Fnb2ZrCis4SGpEbzRXSHNQMmZxWmxmNHpQc3pPb0x0V0ZlOFVsK1A2TXQ2Z0VNekVLYWRwdkUwRGZUc1JjQllRRVdXWDRjCitGOE5UL2RGeXkweGdGZHA5NHVxdFVPK080b3ZVYW5kVjFuRFphN3Z4N2prRU9LTzk0dEhnWm12aW5FZVo2U2ptCit0dnd1eW1kRGhPalZnOWFkbUdzQlBvSGNQSHJLK2ZPYzk5WW9HeWQ0Zk1QUTFXT25nVFNKclNWcXZmTHE3ZnBYCisvT1UweHNFUGNTM1NDQkFiclVSQjRQNTVvR09UaXJGZDZiRHVid0lEQVFBQkFvSUJBRnZmM3hRWHJ2WTJhbTJECit3MWQzMWwyclFZcmxUWjFSVDgzNmpzNDFDUlE0NE9ENXhMcEFUWkZwdkpEeHVGcjFNRGh4WUs4K05ncFpPUlc3Citha0V6NDMycERlczBwUWdmdEN5ZkNuZ2MvRTdaQ0NpamdzT3lYNVk1YjJRdmRMdFFySHhBVVpLNnNKNGxiZ0lPCitwdmxZR3ZCNzhEblYwNTdZUWZaczhqN1hQcVRGWVZObEl4NnhDRnh3aU1UZVVHWnZTck44Q3BLVC81enNTRTVkCit4WDJhbGFZaVdsMm9TT0k3YXhydHBNRVhBSTBBL08vTjFtSStuM2NzMTVjZkFKYS9mTWpFTW1HejBQcWc1SWxTCitJd1pXcHI2QnpiZEhsZE8vWGxWRXJLTW80bEFEVW1zcjJkK3EzdmZRbUxFQXlpenA3T21VOXZjK0RYY0s5akgrCithRGQwZ2NFQ2dZRUE3U0FWQS9iYW5ZZWpON092bjg0cEorbWd1SU5Nd1BGWmQ5ZVc5b3AxUGdScnlHQ3BkaDc3CitxVjY0WUlqRmh3dDFKUVFJZjVHQ1BENVVtMFo4bVk1OWE2TVUrc0pHR0I3eHdWdUN1WGJEQUtKSkY2LzU4ZjcvCitNb0x6c29RRnk1MFRwQTkwVDBXT3ZNV0RuV1NMVFlqUnIxZkZUS05XTmN2UG9GT25tQXlkR2JVQ2dZRUE3STFYCittQ0ZSU0dpdTBOZE4yajdtd3RUdWRJNG0vcXlZZlVReHBTdnZnTjJEU0h0RzU2aDhEejF3N0NwTmxMREhvZFBQCitlOG9pWE1TL2JCQk53V0h1OWh4aEJxZG12ajRDK0s1QXgwRUtZeDdDc0hXSzdCSjh1OEFrOHh3YXVmTWllanQ1Citpb0poSTRweXVrQkVxSmJudXptdURjdW9xeFBGMVpUbU0vV3pyaE1DZ1lCaTVWOStjTVVLc0ZoRlVmNnNVcXBkCitpQlhNL28zVFpwVmU0eDZHSW9iMVg1aW9VSkE4d0gxTFRVTHVsL3h4N3poalFNUmVtQXhPSGR6aGljdExxOTdwCitObkg0aDIvK2ZXRnN1RUxVSVJFQlFhM2tZRE9KVjBXT0JvbW02V01WWWFTZ1p3V21UaWRTMmJtanVoeFRNUDNxCisrRnRFTkZjdlJwcUlqbnMyY2dSUGhRS0JnUURjamhpYTVvMno5cTd3VjU3bUczbnJOTCswZXdvT3NIeHBaNWptCitTU1hCUUVmMDM4UkhvSWN6YW5VTUxaRXlUdldEaEVyVFA2OTBVWm10TnpKWVdXaUZuZ1kxUHdZRDRTdkNGQzZmCisyWnZHdVZxTFRyMGR5VXIxZjN5MEU0TXoxMmRSRW4wTFVPOGpSU1lkVkdqdnkrdjZYQmhXRW9xTUlCNTRPcUc4CisxcDBXY3dLQmdGNEtmekJPaTFEYXJDdXhhYTZodVVkTmM4ZWZvZzVHTzFsbU5lbktsUnVQTHA1d3AzcXZXc3lICitibGZidEpRTkUxRGhiREd3bXpQQ0dMYzN3WHgwdDBnQ3JjTWt4b1JBVEZNTk9TTG9kRzdNYmtqOUFvRU14OTRYCitYWWZpNXZZZnRiRVVtWmVadEhaQkkzbzN1cC94dFBjdUdObGI4QlNJSU9hUXRJWXlieEthCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOF9pbnQtY2EyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjhfaW50LWNhMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ZGE3MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjhfaW50LWNhMi5jcnQKQEAgLTAsMCArMSwzNiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDNnpDQ0FuS2dBd0lCQWdJQkVUQUtCZ2dxaGtqT1BRUURBakJMTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEtUQW5CZ05WQkFNVElGQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVWRElFTkJNQjRYRFRFek1Ea3lOREUyTVRJMU5sb1hEVEl6TURreU1qRTJNVEkxTmxvd05ERUxNQWtHCitBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEYkhIOHVDODIvenRGMUVLQ2l1TTU5CitxdUlGNEhyWVJHT1B0YjNBc0JtNU43Z1pTZzd4WFhTQVowYUhCdDViZndZRHZjR05YZ2NWMUZ2MDNPWFBQZm5CCitFU3l1YXJtS3ZSMW5aaGZxVHIzYkZacUNoK1R3ZU1PamhZZXcvWitwbVYvak0rek02Z3UxWVY3eFNYNC9veTNxCitBUXpNUXBwMm04VFFOOU94RndGaEFSWlpmaHdYdzFQOTBYTExUR0FWMm4zaTZxMVE3NDdpaTlScWQxWFdjTmxyCit1L0h1T1FRNG83M2kwZUJtYStLY1I1bnBLT2EyL0M3S1owT0U2TldEMXAyWWF3RStnZHc4ZXNyNTg1ejMxaWdiCitKM2g4dzlEVlk2ZUJOSW10SldxOTh1cnQrbGY4NVRUR3dROXhMZElJRUJ1dFJFSGcvbm1nWTVPS3NWM3BzTzV2CitBZ01CQUFHamdaSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVTRqL21MZlRudUthTTNHMFhweGhBCitKMkYyRHgwd1l3WURWUjBqQkZ3d1dvQVVENG05WTBIcnkxNFhLUDlvTUQzQmlOQ2NXRG1oUDZROU1Ec3hDekFKCitCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnCitWR1Z6ZENCRFFZSUJEekFLQmdncWhrak9QUVFEQWdObkFEQmtBakJrUDFiR2xadnhuWXlTWmpkQnE0bThsa3l6CisyY2pmcWpZczhDT0VrUmtPTmFWejc4ODhIdkZkR3BMOTh1UWVGdkVDTUhDeUNySHBya0d6dnEvTDlrVW54OUJoCisySUhiQ3piYmk5bW9ZQzFYY094Z2ZzRUttaHRWRi91UWRmOCszVnRHcUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDNlRDQ0FkR2dBd0lCQWdJQkR6QU5CZ2txaGtpRzl3MEJBUXNGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVE13T1RJME1UWXdPRFF5V2hjTk1qTXdPVEl5TVRZd09EUXlXakJMTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEtUQW5CZ05WQkFNVElGQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVWRElFTkJNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThPaWgzZlg1U0xlTjFkbUZuY1FsCitXTXc5K1k2c1hibGhsclhCeGhYeGp3ZHdwQ0hFTm4rZm9VVmRycVlWWWE3U3V2M1FWZU82bkoxOUgzUU5peFc4CitpazFQK2h4c2JhcThidGE3OHZBeUhtQzRFbVhRTGcxdzdveGI5UTgycVgxWW80R1ZNSUdTTUIwR0ExVWREZ1FXCitCQlFQaWIxalFldkxYaGNvLzJnd1BjR0kwSnhZT1RCakJnTlZIU01FWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWCitEK3Mrdk1mOS82RS9wRDB3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3CitGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQmdnRUFNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJCitodmNOQVFFTEJRQURnZ0VCQUFqZWFUVWFDQmlYVDFDWUxWcjZVRlNlUk5aQnJEUG5qNlB3cVVRVHZnQjVJNW42Cit5WHFvRTRSWURhRUwwTGcyNGp1RnhJMjZpdEJ1eXB0bzZ2c2NnR3E3N2NmclAvYXZTZHhVK3hlWjRiQ1d2aDNNCitkZGo5bG1rbzJVOEk4R2hCY0hwU3VJaVR2Z0tEQjhlS2tqZXEzQXNMR2NoSER2aXA4cEIzSWhjTmZMN1c5NFpmCis3L2xIOVZRaUUzL3B4N2FtRDMyY2lkb1B2V0xBOVUzZjFGc1BtSkVTVXowd3dOZklOcERqbVByOGRHYmtDTitNCitDRmh4bzZzQ2ZLOEtMWUc0bllYOEZ3eFZSODZrcFNyTzllODRBWDBZWWJkenhwcmJjMlhPYWViSjgrQkRtenV0CitBUmtEN0RUWHJvZE4xd1Y3alFKa3JVdUV3UGo5Umh2aytNRlJrYXc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZC1tZ2ZoYXNoLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkLW1nZmhhc2guY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZWY2OWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZC1tZ2ZoYXNoLmNydApAQCAtMCwwICsxLDIwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURXekNDQWhLZ0F3SUJBZ0lCR0RBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0FhRWEKK01CZ0dDU3FHU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdTaUJBSUNBTjR3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3gKK0VUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQk1CNFgKK0RURTBNREV5TURFek5UYzBOVm9YRFRJME1ERXhPREV6TlRjME5Wb3dOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUmlwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0MKK3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWHlNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0kKK2kyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWW1tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1YKK0FnTUJBQUdqZ1pJd2dZOHdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVN3ZQSDlSOFZwVTFIaWNIVEltT3kKKzM2Zk92VkV3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUoKK0JnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2cKK1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBYUVhTUJnR0NTcUcKK1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnU2lCQUlDQU40RGdnRUJBSWZsaW9oTmp6NENMR2JIV2dXUkJGUTMKK0RpZm4wMjdablVMVHZva1Q2N2lpMXNKekVTenFhSWFreXl1OEdSd2ZvRlJOaC9yYkdmZTRDNmU5U2t3S2JuRGcKK1dFOVNXYks2dWtJUWJNeTY5QytDVnFGbFJVSGJPTncvZG1jbmVBV3laWUd4LzJTZjRENWtrcElXTkRCZUt1YVYKK0g2OVhQWkNlTjNRQUFDbWRBZm80TllXMEk2OWExT1NhVXJUeUdUMW5CT3J6UThZMGFKQm5DSkF0ZTQ5YmhRRVcKK0tKdjBrTWorOFpHMVgwUm9TZGtsZjNHcWRMVWJzZkoydHh1MTRHR0F4eTRDMWdsMkpXem9CSE41TE1MZjBjWjkKK3VFWXVpN04vNWJrU3Y4S1hkYkd2U3pnbjZ6WjBNaUNKTWlpR0VmMEwxRnhCaUJDVnNLNEMyaWRwaVpIK2UyOD0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkLXNhbHRsZW4uY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1iYWQtc2FsdGxlbi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYTg4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkLXNhbHRsZW4uY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFd6Q0NBaEtnQXdJQkFnSUJHREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQWFFYQorTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ0dpQkFJQ0FONHdPekVMTUFrR0ExVUVCaE1DVGt3eAorRVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CTUI0WAorRFRFME1ERXlNREV6TlRjME5Wb1hEVEkwTURFeE9ERXpOVGMwTlZvd05ERUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTgorQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSaXArWnVyQm95aXJxTzJwdFdaZnRUc2xVNUEzdXpxQjlvQjZxNkE3QwordXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYeU1yTHhmNlRIYS9hRWlOelVubEdHcnFnVnl0MkZqR3pxSy9uT0pzSQoraTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZbW1NYk4vejNGQWlmaFdWSjgxa3liZEhnNkczZVV1MW10S2tMMmtDVgorQWdNQkFBR2pnWkl3Z1k4d0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVU3dlBIOVI4VnBVMUhpY0hUSW1PeQorMzZmT3ZWRXdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSgorQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3ZworVkdWemRDQkRRWUlCQURBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0FhRWFNQmdHQ1NxRworU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdHaUJBSUNBTjREZ2dFQkFFN1Q1NGN5VWYwQnlOcjM0SmFvakZhbQoraFYwVDlRU2M0d0oxN3NYNjdyeFlJb3JYVThNeW5hbmVKekZ4RDl1dE9EM2RxMlRPTjE4VnN3aFQyTWNEZ2VmbAorWE13aXZDQzBuV29kOFBrNjM4UWFIeGJhcUM3WFNxMFFSQmZPTVh3VjdrbkxOeEk4c21jOVVKYWNvMzlWRWNHRAoreUNrcTRCeS9WQ1dUcHZKKzFoeDR6WjhXb1hwRkpGTTVtNXk5b0V6NGxnTnYvNld1N0lMenR5T2syeUppU1I4cgorWW9vQzR6VmVVT1p1RE82QXQvTlhadVN2bUttcit0ZkZyRkExQUEvN3lSNW9kUWJxRlZOU0ordTB4MUp2OFJhNgorSlhBNGNYc25hRGFSZStXbTBMMHArMlB0UVdYRTVucFhZSWJGSEFBOUVPQzNBYjhvYVA5TS9GNnlRTWEvMmlzPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1iYWRzaWduLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkc2lnbi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1NjU0MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktYmFkc2lnbi5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQlRDQ0FlZWdBd0lCQWdJQkZqQVRCZ2txaGtpRzl3MEJBUW93QnFJRUFnSUE2akE3TVFzd0NRWURWUVFHCitFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnCitRMEV3SGhjTk1UUXdNVEl3TVRNek9ERTJXaGNOTWpRd01URTRNVE16T0RFMldqQTBNUXN3Q1FZRFZRUUdFd0pPCitUREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txCitoa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBM1JHS241bTZzR2pLS3VvN2FtMVpsKzFPeVZUa0RlN09vSDJnCitIcXJvRHNLN0UwRGJpaEtPaVJNa3BjWDErdGoxa05mSXlzdkYvcE1kcjlvU0kzTlNlVVlhdXFCWEszWVdNYk9vCityK2M0bXdpTFk1azZDaVh1UmRJWVdMcTVreHJ0MUZpYVl4czMvUGNVQ0orRlpVbnpXVEp0MGVEb2JkNVM3V2EwCitxUXZhUUpVQ0F3RUFBYU9Ca2pDQmp6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlR1ODhmMUh4V2xUVWVKCit3ZE1pWTdMZnA4NjlVVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS82RS9wRDB3CitPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoCitjbE5UVENCVVpYTjBJRU5CZ2dFQU1CTUdDU3FHU0liM0RRRUJDakFHb2dRQ0FnRHFBNElCQVFEQW9nL2pYeWRSCit2REl1Z1R6Qlh0ZlZLMENFWDhpeVE0Y1Z6UW1YV1NuZTgyMDR2OTQzSzVEMmhrdFNCa2pkUVVkY25WdlZnTFI2Cit0ZTUwalY4OXB0Ti9Ob2ZYK2ZvOWZoU1JOOXZHZ1FWV3pPT0ZpTzB6Y1RoeTc0OXBpckp1MUtxNU9KZHRoSXlXCitQdTBVQ3o1RzBrM2tUcDBKUGV2R2xzTmM4UzlBazF0RnVCMElQSmpyYmZPRFdIUzJMRHVPK2RCNmdwa05UZHJqCis4OG9nWXRCc040RDVnc1hCUlVmb2JYb2tVd2VqQndMckQ2WHd5UXgrMGJNd1NDeGdIRWh4dnVVa3gxdmRsWEd3CitKRzNhRjkydThtSXhvS1NBUGFQZHF5OTMwbVF2bXBVV2NONVkxSU1idEVHb1FDS01ZZ29zRmNhekpwSmNqblgxCitvNEhsL2xxandDRkcKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktZGVmYXVsdHMuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1kZWZhdWx0cy5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlNWM4NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktZGVmYXVsdHMuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREJqQ0NBZTZnQXdJQkFnSUJTREFOQmdrcWhraUc5dzBCQVFvd0FEQTdNUXN3Q1FZRFZRUUdFd0pPVERFUgorTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3SGhjTgorTVRRd05qQTFNVFUxTmpVeldoY05NalF3TmpBeU1UVTFOalV6V2pBME1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENCbnpBTkJna3Foa2lHOXcwQgorQVFFRkFBT0JqUUF3Z1lrQ2dZRUEzUkdLbjVtNnNHaktLdW83YW0xWmwrMU95VlRrRGU3T29IMmdIcXJvRHNLNworRTBEYmloS09pUk1rcGNYMSt0ajFrTmZJeXN2Ri9wTWRyOW9TSTNOU2VVWWF1cUJYSzNZV01iT29yK2M0bXdpTAorWTVrNkNpWHVSZElZV0xxNWt4cnQxRmlhWXhzMy9QY1VDSitGWlVueldUSnQwZURvYmQ1UzdXYTBxUXZhUUpVQworQXdFQUFhT0JuekNCbkRBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCVHU4OGYxSHhXbFRVZUp3ZE1pWTdMZgorcDg2OVVUQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5LzZFL3BEMHdPekVMTUFrRworQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVQorWlhOMElFTkJnZ0VBTUFzR0ExVWREd1FFQXdJRm9EQU5CZ2txaGtpRzl3MEJBUW93QUFPQ0FRRUFHVWRpbTR1eQorL3JCREZNRjhxaGpIMXFzdjBvOE9ONEhnUDNZWGJkS2RJTWZkK3A1S3RvcUhRbnJraXhXeGFJdmZPUm5SNG1HbQorZjhINUJpbXdJa05MeHk3elM4OFRWRE9ZZWw4ZzdCMnlsMG5xNGJpa2k4M05TdE5CWVpKanhLVDB1ZDVPNW1HZAorakhkeTl2VEVjN2g4cStTSHpSZGdwTkZYeUtZNU9RWW5nMUxIY284aDFVUjgvbm1QTXVEdG9jSE1ubU1YdTY4YQorNjkrVHRaeHg5MC9WNGdKWk9vTDFpQ2k4SEVzS29Kem0vTDhqaTU0T1l0N0Z4Z0ZmRTNWbUxzWGVNYVdZTzhHUworQlV4aDVrcVoyNU84aFFYSzV5d2Z1Vks4M0RvL1Nzb0NsYmd4OW1ib3lic2VHVkZJSmF4czllNjZHRkRNb0kzQgorMDlKcVd2NERvTE5ud2c9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGEyMjQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGEyMjQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTIyNC5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEV3pDQ0FoS2dBd0lCQWdJQkZ6QStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNCS0VhCitNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnU2lCQUlDQU9Jd096RUxNQWtHQTFVRUJoTUNUa3d4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJNQjRYCitEVEUwTURFeU1ERXpOVGN6TmxvWERUSTBNREV4T0RFek5UY3pObG93TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQCitCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOCitBUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFJpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDCit1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFh5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJCitpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlltbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWCitBZ01CQUFHamdaSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVTd2UEg5UjhWcFUxSGljSFRJbU95CiszNmZPdlZFd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKCitCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnCitWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQktFYU1CZ0dDU3FHCitTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ1NpQkFJQ0FPSURnZ0VCQURKRXhqZldXdkwyOGxnaitHR2d2aXFvCitQSFpMeEkwcExRVW5GSlE5S3B1Nmp4ZklDc2VCRjAwWjZCSkUvUmNZRHBJaWU1R0R0Lzh1L2k2eEI2TGkyOVBtCitnNW5BTmdkL1kzZkZuVzdkMHlkVmppU25ldGxQdWYvalRsV1FsNm1RVEgyeHFZdThKOGQzSlJ4UWRSaURZYlZtCit1eXdXMmQ2cmtzaXFtNmRQRDVsNEE1RGNlbWNZbzhmLzFJZmo1V05EQ1Y4L09IZXgrQW5XMmNjRHZXQW5WZ1NSCitCMlZwT1hKelZGdUJzdWY0dEdWbS8yVFVNU0I2TmN2RmM2VGVKazFremJaeGlpNFFqS1h0SDFTZnJWUDU5aUVlCitsMTdOWUFFV0FSakJwUVdCaXV0UkcrUU0yZXQwc05pVUJ1V3hUa3ZkMGVTZ2VuY055c1ZBT3NacXJxYVgzQ1k9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTI1Ni5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTI1Ni5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwYWEzOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjU2LmNydApAQCAtMCwwICsxLDIwIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURXekNDQWhLZ0F3SUJBZ0lCR0RBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0FhRWEKK01CZ0dDU3FHU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdHaUJBSUNBTjR3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3gKK0VUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQk1CNFgKK0RURTBNREV5TURFek5UYzBOVm9YRFRJME1ERXhPREV6TlRjME5Wb3dOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVAKK0JnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y04KK0FRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUmlwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0MKK3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWHlNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0kKK2kyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWW1tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1YKK0FnTUJBQUdqZ1pJd2dZOHdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVN3ZQSDlSOFZwVTFIaWNIVEltT3kKKzM2Zk92VkV3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUoKK0JnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2cKK1ZHVnpkQ0JEUVlJQkFEQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBYUVhTUJnR0NTcUcKK1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnR2lCQUlDQU40RGdnRUJBSDAra25xa2NMYXhlRGtlbkJRZ2Q0UWcKKzNaeUFodHBpTFU2ODltdyszY1hCL3V6RnJDSXhFTDVhR2gxZVNqK0RzekIrRnRzWjA2dXg3SlZRcVZPQTJXbTkKK3lMeEM2d0Y4T09ZajBuQmE5MUJXTGhSQUhMaG1JZFdzVms3SGw5S29qWmQ0VHdWMk4rWkVWL0JMeHlvUnZLNEgKK1Y0eENwemdEU2lUUGU4RXRrNHIrMGFrYnI2YnNPVUJheVBiN01HTEh1YlpLcThOc0ZBbW15bnArZlBtSGQzU0UKKzBvb0pkaVoxTW1LUEtMRTVPZy9oWENJOHFlaVhRVVI2b1E3YjJYT05zckkySElqMlNBOWRBNXFtSHdFNVBiTXUKK3pxeFEzUjgzYm9xTFhia0ZPUm4rVWlZTG1mZnFkb1d1TnkwMEJITUNyeFJBOURVditXeU40bnBMTUY4ck9Kdz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhMzg0LmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjktc2hhMzg0LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWE2M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGEzODQuY3J0CkBAIC0wLDAgKzEsMjAgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFd6Q0NBaEtnQXdJQkFnSUJHVEErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQXFFYQorTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ0tpQkFJQ0FNNHdPekVMTUFrR0ExVUVCaE1DVGt3eAorRVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGhjbE5UVENCVVpYTjBJRU5CTUI0WAorRFRFME1ERXlNREV6TlRjMU9Gb1hEVEkwTURFeE9ERXpOVGMxT0Zvd05ERUxNQWtHQTFVRUJoTUNUa3d4RVRBUAorQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTgorQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSaXArWnVyQm95aXJxTzJwdFdaZnRUc2xVNUEzdXpxQjlvQjZxNkE3QwordXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYeU1yTHhmNlRIYS9hRWlOelVubEdHcnFnVnl0MkZqR3pxSy9uT0pzSQoraTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZbW1NYk4vejNGQWlmaFdWSjgxa3liZEhnNkczZVV1MW10S2tMMmtDVgorQWdNQkFBR2pnWkl3Z1k4d0NRWURWUjBUQkFJd0FEQWRCZ05WSFE0RUZnUVU3dlBIOVI4VnBVMUhpY0hUSW1PeQorMzZmT3ZWRXdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSgorQmdOVkJBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3ZworVkdWemRDQkRRWUlCQURBK0Jna3Foa2lHOXcwQkFRb3dNYUFOTUFzR0NXQ0dTQUZsQXdRQ0FxRWFNQmdHQ1NxRworU0liM0RRRUJDREFMQmdsZ2hrZ0JaUU1FQWdLaUJBSUNBTTREZ2dFQkFCZjhHeXEyVll1TjFFQlcxbk9hcERRcAorQi9LdWFmTlcyR0VKN0ZtUUtOeUE3TUlqMVlxbzJNdEo2L09Rb2pSUTNGNXJuTzR5am12SVBzWGVRYU14SkJpSQorYWFvQWxMcEgrK0Yrb1hNcS8wYVMwV1NaclNMcnNoMkZwYXk5Y0JER3dlazJyRE9YOWtNK1pjUHpHaXRWd1dLWAorVG5PVzIyaHBjbDd1OTVDcFpIK0paVGN0bzVuTDN0VHlWOXBJeSt0U0tRUWZqUEIrRzBUQVpDc09rYkNHUEx1ZworcWRqdnFGUXdPZjE1VnhRTWo3TlJpWGpscUp2c3grSTdCMkFJaHJzNER6UU1FeWlXcTlTL1B6cFF1RlU1di9LZworczJpTUxKNXlndjVhTjNQWXFHbEUxWm12Z3lScDVoL0xhVEdJMkw2bHpSVG5lY09odFB2MzBOMnR5YURBRWZvPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGE1MTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS1zaGE1MTIuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTFiOTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTUxMi5jcnQKQEAgLTAsMCArMSwyMCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEV3pDQ0FoS2dBd0lCQWdJQkdqQStCZ2txaGtpRzl3MEJBUW93TWFBTk1Bc0dDV0NHU0FGbEF3UUNBNkVhCitNQmdHQ1NxR1NJYjNEUUVCQ0RBTEJnbGdoa2dCWlFNRUFnT2lCQUlDQUw0d096RUxNQWtHQTFVRUJoTUNUa3d4CitFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3RndZRFZRUURFeEJRYjJ4aGNsTlRUQ0JVWlhOMElFTkJNQjRYCitEVEUwTURFeU1ERXpOVGd4TWxvWERUSTBNREV4T0RFek5UZ3hNbG93TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQCitCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOCitBUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFJpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDCit1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFh5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJCitpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlltbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWCitBZ01CQUFHamdaSXdnWTh3Q1FZRFZSMFRCQUl3QURBZEJnTlZIUTRFRmdRVTd2UEg5UjhWcFUxSGljSFRJbU95CiszNmZPdlZFd1l3WURWUjBqQkZ3d1dvQVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgvZitoUDZROU1Ec3hDekFKCitCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVaTUJjR0ExVUVBeE1RVUc5c1lYSlRVMHdnCitWR1Z6ZENCRFFZSUJBREErQmdrcWhraUc5dzBCQVFvd01hQU5NQXNHQ1dDR1NBRmxBd1FDQTZFYU1CZ0dDU3FHCitTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVBZ09pQkFJQ0FMNERnZ0VCQUNkVm96RnE2clVpWG8raWI1WTJvUHNSCis2eHhsNFlkbjNMcFVvWXJQcFRPcmhjWEpXVy90T0xIR3VDRi9tU1JmVXpLYU1JZkw0MThjWkhZbnZ1bXZ1dHR1Cis2ejN0cDVFMVZzaVpDVTJNV0puempLU3hGQk9zczQzQW1wSkhIb2FwR0ZadTJweE9iQlBxZWdBS0hZa0tXT0xrCit0SkRqNDdQdXJXZ0VlazlqMW5MN1BjMXRWZjU5Zm0veVNwNGZXa1hMTHZRaUtpZDE1MTZWaW9MeWFjVXZLM3pVCis2RWd6OGpNdDdENWM5S3BhRXhMUlRBTlZzVGhxTzUvZG1SMzZiT3dtM0hwYmRlN0ROZGd4cnU0MXRpTE1xSnMvCis1cFgzY2VhSjFYUS9sMGlkajUvOWlwdnFISFVndXlrN0gyMkh3UUhRZFNEOW9JaGE4a0VNM1A2Q2pwZkU3eVk9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LXdpdGgtY2EuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS13aXRoLWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc4Y2ZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS13aXRoLWNhLmNydApAQCAtMCwwICsxLDk5IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURCVENDQWVlZ0F3SUJBZ0lCRmpBVEJna3Foa2lHOXcwQkFRb3dCcUlFQWdJQTZqQTdNUXN3Q1FZRFZRUUcKK0V3Sk9UREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWcKK1EwRXdIaGNOTVRRd01USXdNVE16T0RFMldoY05NalF3TVRFNE1UTXpPREUyV2pBME1Rc3dDUVlEVlFRR0V3Sk8KK1RERVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENCbnpBTkJna3EKK2hraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEzUkdLbjVtNnNHaktLdW83YW0xWmwrMU95VlRrRGU3T29IMmcKK0hxcm9Ec0s3RTBEYmloS09pUk1rcGNYMSt0ajFrTmZJeXN2Ri9wTWRyOW9TSTNOU2VVWWF1cUJYSzNZV01iT28KK3IrYzRtd2lMWTVrNkNpWHVSZElZV0xxNWt4cnQxRmlhWXhzMy9QY1VDSitGWlVueldUSnQwZURvYmQ1UzdXYTAKK3FRdmFRSlVDQXdFQUFhT0JrakNCanpBSkJnTlZIUk1FQWpBQU1CMEdBMVVkRGdRV0JCVHU4OGYxSHhXbFRVZUoKK3dkTWlZN0xmcDg2OVVUQmpCZ05WSFNNRVhEQmFnQlMwV3VTbHM5N1NVdmE1MWFhVkQrcyt2TWY5LzZFL3BEMHcKK096RUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJrd0Z3WURWUVFERXhCUWIyeGgKK2NsTlRUQ0JVWlhOMElFTkJnZ0VBTUJNR0NTcUdTSWIzRFFFQkNqQUdvZ1FDQWdEcUE0SUJBUURBb2cvalh5ZFIKK3ZESXVnVHpCWHRmVkswQ0VYOGl5UTRjVnpRbVhXU25lODIwNHY5NDNLNUQyaGt0U0JramRRVWRjblZ2VmdMUjYKK3RlNTBqVjg5cHROL05vZlgrZm85ZmhTUk45dkdnUVZXek9PRmlPMHpjVGh5NzQ5cGlySnUxS3E1T0pkdGhJeVcKK1B1MFVDejVHMGsza1RwMEpQZXZHbHNOYzhTOUFrMXRGdUIwSVBKanJiZk9EV0hTMkxEdU8rZEI2Z3BrTlRkcmoKKzg4b2dZdEJzTjRENWdzWEJSVWZvYlhva1V3ZWpCd0xyRDZYd3lReCswYk13U0N4Z0hFaHh2dVVreDF2ZGxYR3cKK0pHM2FGOTJ1OG1JeG9LU0FQYVBkcXk5MzBtUXZtcFVXY041WTFJTWJ0RUdvUUNLTVlnb3NGY2F6SnBKY2puWDEKK280SGwvbHFqd0NFRworLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAwICgweDApCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowMCAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjAwIDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMwOmRmOjM3OmZjOjE3OmJiOmUwOjk2OjlkOjNmOjg2OmRlOjk2OjMyOgorICAgICAgICAgICAgICAgICAgICA3ZDo0NDphNToxNjphMDpjZDoyMTpmMTo5OTpkNDplYzplYTpjYjo3YzoxODoKKyAgICAgICAgICAgICAgICAgICAgNTg6MDg6OTQ6YTU6ZWM6OWI6YzU6OGI6ZGY6MWE6MWU6OTk6Mzg6OTk6ODc6CisgICAgICAgICAgICAgICAgICAgIDFlOjdiOmMwOjhkOjM5OmRmOjM4OjVkOjcwOjc4OjA3OmQzOjllOmQ5OjkzOgorICAgICAgICAgICAgICAgICAgICBlODpiOTo3Mjo1MTpjNTpjZTphMzozMDo1MjphOTpmMjplNzo0MDo3MDoxNDoKKyAgICAgICAgICAgICAgICAgICAgY2I6NDQ6YTI6NzI6MGI6YzI6ZTU6NDA6Zjk6M2U6ZTU6YTY6MGU6YjM6Zjk6CisgICAgICAgICAgICAgICAgICAgIGVjOjRhOjYzOmMwOmI4OjI5OjAwOjc0OjljOjU3OjNiOmE4OmE1OjA0OjkwOgorICAgICAgICAgICAgICAgICAgICA3MTpmMTpiZDo4MzpkOTozZjpkNjphNTplMjozYzoyYTo4ZjplZjoyNzo2MDoKKyAgICAgICAgICAgICAgICAgICAgYzM6YzY6OWY6Y2I6YmE6ZWM6NjA6N2Q6Yjc6ZTY6ODQ6MzI6YmU6NGY6ZmI6CisgICAgICAgICAgICAgICAgICAgIDU4OjI2OjIyOjAzOjViOmQ0OmI0OmQ1OmZiOmY1OmUzOjk2OjJlOjcwOmMwOgorICAgICAgICAgICAgICAgICAgICBlNDoyZTpiZDpmYzoyZTplZTplMjo0MTo1NTpjMDozNDoyZTo3ZDoyNDo3MjoKKyAgICAgICAgICAgICAgICAgICAgNjk6Y2I6NDc6YjE6MTQ6NDA6ODM6N2Q6Njc6ZjQ6ODY6ZjY6MzE6YWI6ZjE6CisgICAgICAgICAgICAgICAgICAgIDc5OmE0OmIyOmI1OjJlOjEyOmY5Ojg0OjE3OmYwOjYyOjZmOjI3OjNlOjEzOgorICAgICAgICAgICAgICAgICAgICA1ODpiMTo1NDowZDoyMTo5YTo3MzozNzphMTozMDpjZjo2Zjo5MjpkYzpmNjoKKyAgICAgICAgICAgICAgICAgICAgZTk6ZmM6YWM6ZGI6MmU6Mjg6ZDE6N2U6MDI6NGI6MjM6YTA6MTU6ZjI6Mzg6CisgICAgICAgICAgICAgICAgICAgIDY1OjY0OjA5OmVhOjBjOjZlOjhlOjFiOjE3OmEwOjcxOmM4OmIzOjliOmM5OgorICAgICAgICAgICAgICAgICAgICBhYjplOTpjMzpmMjpjZjo4Nzo5Njo4Zjo4MDowMjozMjo5ZTo5OTo1ODo2ZjoKKyAgICAgICAgICAgICAgICAgICAgYTI6ZDUKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICAgICAgRGlyTmFtZTovQz1OTC9PPVBvbGFyU1NML0NOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgICAgICAgICBzZXJpYWw6MDAKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODpmZDo1NDpkODowMDo1NDo5MDo4YjoyNTpiMDoyNzpkZDo5NTpjZDphMjpmNzo4NDowNzoKKyAgICAgICAgMWQ6ODc6ODk6NGE6YzQ6Nzg6MTE6ZDg6MDc6YjU6ZDc6MjI6NTA6OGU6NDg6ZWI6NjI6N2E6CisgICAgICAgIDMyOjg5OmJlOjYzOjQ3OjUzOmZmOmI2OmJlOmYxOjJlOjhjOjU0OmMwOjk5OjNmOmEwOmI5OgorICAgICAgICAzNzoyMzo3Mjo1ZjowZDo0Njo1OTo4ZjpkODo0NzpjZDo5Nzo0Yzo5ZjowNzowYzoxMjo2MjoKKyAgICAgICAgMDk6M2E6MjQ6ZTQ6MzY6ZDk6ZTk6MmM6ZGE6Mzg6ZDA6NzM6NzU6NjE6ZDc6YzE6NmM6MjY6CisgICAgICAgIDhiOjliOmUwOmQ1OmRjOjY3OmVkOjhjOjZiOjMzOmQ3Ojc0OjIyOjNjOjRjOmRiOmI1OjhkOgorICAgICAgICAyYTpjZToyYzowZDowODo1OTowNTowOTowNTphNjozOTo5ZjpiMzo2NzoxYjplMjo4MzplNToKKyAgICAgICAgZTE6OGY6NTM6ZjY6Njc6OTM6Yzc6Zjk6NmY6NzY6NDQ6NTg6MTI6ZTg6M2E6ZDQ6OTc6ZTc6CisgICAgICAgIGU5OmMwOjNlOmE4OjdhOjcyOjNkOjg3OjUzOjFmOmU1OjJjOjg0Ojg0OmU3OjlhOjllOjdmOgorICAgICAgICA2NjpkOToxZjo5YjpmNToxMzo0ODpiMDo0ZDoxNDpkMTpkZTpiMjoyNDpkOTo3ODo3ZDpmNToKKyAgICAgICAgMzU6Y2M6NTg6MTk6ZDE6ZDI6OTk6ZWY6NGQ6NzM6Zjg6MWY6ODk6ZDQ6NWE6ZDA6NTI6Y2U6CisgICAgICAgIDA5OmY1OmIxOjQ2OjUxOjZhOjAwOjhlOjNiOmNjOjZmOjYzOjAxOjAwOjk5OmVkOjlkOmE2OgorICAgICAgICAwODo2MDpjZDozMjoxODpkMDo3MzplMDo1ODo3MTpkOTplNTpkMjo1MzpkNzo4ZDpkMDpjYToKKyAgICAgICAgZTk6NWQ6MmE6MGE6MGQ6NWQ6NTU6ZWM6MjE6NTA6MTc6MTY6ZTY6MDY6NGE6Y2Q6NWU6ZGU6CisgICAgICAgIGY3OmUwOmU5OjU0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmY5ZmJjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5jcnQKQEAgLTAsMCArMSwxOSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEQlRDQ0FlZWdBd0lCQWdJQkZqQVRCZ2txaGtpRzl3MEJBUW93QnFJRUFnSUE2akE3TVFzd0NRWURWUVFHCitFd0pPVERFUk1BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnCitRMEV3SGhjTk1UUXdNVEl3TVRNek9ERTJXaGNOTWpRd01URTRNVE16T0RFMldqQTBNUXN3Q1FZRFZRUUdFd0pPCitUREVSTUE4R0ExVUVDaE1JVUc5c1lYSlRVMHd4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txCitoa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBM1JHS241bTZzR2pLS3VvN2FtMVpsKzFPeVZUa0RlN09vSDJnCitIcXJvRHNLN0UwRGJpaEtPaVJNa3BjWDErdGoxa05mSXlzdkYvcE1kcjlvU0kzTlNlVVlhdXFCWEszWVdNYk9vCityK2M0bXdpTFk1azZDaVh1UmRJWVdMcTVreHJ0MUZpYVl4czMvUGNVQ0orRlpVbnpXVEp0MGVEb2JkNVM3V2EwCitxUXZhUUpVQ0F3RUFBYU9Ca2pDQmp6QUpCZ05WSFJNRUFqQUFNQjBHQTFVZERnUVdCQlR1ODhmMUh4V2xUVWVKCit3ZE1pWTdMZnA4NjlVVEJqQmdOVkhTTUVYREJhZ0JTMFd1U2xzOTdTVXZhNTFhYVZEK3Mrdk1mOS82RS9wRDB3CitPekVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1Sa3dGd1lEVlFRREV4QlFiMnhoCitjbE5UVENCVVpYTjBJRU5CZ2dFQU1CTUdDU3FHU0liM0RRRUJDakFHb2dRQ0FnRHFBNElCQVFEQW9nL2pYeWRSCit2REl1Z1R6Qlh0ZlZLMENFWDhpeVE0Y1Z6UW1YV1NuZTgyMDR2OTQzSzVEMmhrdFNCa2pkUVVkY25WdlZnTFI2Cit0ZTUwalY4OXB0Ti9Ob2ZYK2ZvOWZoU1JOOXZHZ1FWV3pPT0ZpTzB6Y1RoeTc0OXBpckp1MUtxNU9KZHRoSXlXCitQdTBVQ3o1RzBrM2tUcDBKUGV2R2xzTmM4UzlBazF0RnVCMElQSmpyYmZPRFdIUzJMRHVPK2RCNmdwa05UZHJqCis4OG9nWXRCc040RDVnc1hCUlVmb2JYb2tVd2VqQndMckQ2WHd5UXgrMGJNd1NDeGdIRWh4dnVVa3gxdmRsWEd3CitKRzNhRjkydThtSXhvS1NBUGFQZHF5OTMwbVF2bXBVV2NONVkxSU1idEVHb1FDS01ZZ29zRmNhekpwSmNqblgxCitvNEhsL2xxandDRUcKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwNTg2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkua2V5CkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYUUlCQUFLQmdRRGRFWXFmbWJxd2FNb3E2anRxYlZtWDdVN0pWT1FON3M2Z2ZhQWVxdWdPd3JzVFFOdUsKK0VvNkpFeVNseGZYNjJQV1ExOGpLeThYK2t4MnYyaElqYzFKNVJocTZvRmNyZGhZeHM2aXY1emliQ0l0am1Ub0sKK0plNUYwaGhZdXJtVEd1M1VXSnBqR3pmODl4UUluNFZsU2ZOWk1tM1I0T2h0M2xMdFpyU3BDOXBBbFFJREFRQUIKK0FvR0FIRkNFMnRCTDB4QjQ1R28vMWUvUGk5Ly9PVlpBSjNDdzBtbUV1cWpWTkI3STZ6eGhZaHZpV2JnejkyK1YKK2c5MktCbFU5Q0l4MC9aaEdNeUhSTk8wdVlORVpVSnlNOHpJdG9vL25tVTMxK1ZhSE9HZ3BlaTA0SFpybjFObXcKK1FTMDFGVnJuOXd6S1IvNXFlRUJteEU3clZNRFFvOFFMbmxsQzNqWHpJVlV0WDRFQ1FRRDJnOWRsZVdZYnFJUWUKK1E5cGFYeHp2T0RoQ3pOdFF3RDBQbk9LYzU0TnU0em0zSkk0NVJFdHVubUc4ZXQrTmNtczlSeWNUak5sV1BHSlQKKzYyamdhSmV4QWtFQTVaTU52NHU5Tk5SZlpwcm1sTnl2alNPZit3N2ZkS3poY25rSGJHa2ZMbkZkYzd2cTBYRkMKK253T1JzZGpwT3ZXUVV3clYyQ3c4UGw0ckthNEI0aXFVSlFKQkFNVnRpNm1hVTN1ZE44cWhYeFAzanMzTHdjdEcKK0UvT1ZNcEg1Zk1oYTVqbDl3L0I0VjJ0bjFkM08vTW1kd3NLZXUySkZSUGQwVzIra1JyK2REczZERmRFQ1FRQzEKKzNnOVFKUldZMm4xUlBYbFppSktTRHh6WHVPcVE5YndNQVpFOTh2RSt5NVFxOFQyTytsaTZ2QXNaaHlzTkNDaHoKK2dPdnp1dWRteVJjTWg4cjZMcHo1QWtBVUtLM2dZdEpGaVZIMmFyUmlnM0pqWkpxaXhnU1RvbE1UMW4rSEc0dU0KK3RuQnFCaUVCVndCeEVxYW9obGEvckhSNWpvWkNkY0ROOHhxMHllVFF5TEg5CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkMDA1MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTEKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJvakNDQVFZQ0FRQXdOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXcKK0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFIKK2lwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0N1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFgKK3lNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0lpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlkKK21tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1ZBZ01CQUFHZ0tUQW5CZ2txaGtpRzl3MEIKK0NRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNQklHQ1NxR1NJYjNEUUVCQ2pBRm9nTUMKK0FXb0RnWUVBMm44U09vaUpDcytZeUgyVlhvVVZ4aHV0ZFhHUDQrN2NFQ2FrbDJtbVZFS2h4WERNRUc3aEVGa0IKK21razRiMWtSTk9RSEtxVXEzY3JmaTBPa01jUEdrUGlMbFlMS2dUNTFDZ3NCaHVKYU1zZENZby81UE9nVFpENHUKK0ZJNWdmeU83MFhwcTlRbXJXRXFxVGRhbFJHNytVbUdhM1ZFVVZ5WFREblFaZlUxTjJRRT0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMjI0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMjI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMWM3OTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEyMjQKQEAgLTAsMCArMSwxMiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJ6VENDQVFZQ0FRQXdOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXcKK0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFIKK2lwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0N1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFgKK3lNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0lpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlkKK21tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1ZBZ01CQUFHZ0tUQW5CZ2txaGtpRzl3MEIKK0NRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNRDBHQ1NxR1NJYjNEUUVCQ2pBd29BMHcKK0N3WUpZSVpJQVdVREJBSUVvUm93R0FZSktvWklodmNOQVFFSU1Bc0dDV0NHU0FGbEF3UUNCS0lEQWdGaUE0R0IKK0FNbFlZWktxcERxZzVVWlpxM05CM1FVUjlxZnRZLzUyLzBnUGZydXc1czJnTnRGbUcxdXlFQkpYL29jN0MvZlUKK2x4bzc0SERyYVdKeXZQN2MzTU1oT3V3ci9SZlBOUWhBMkhnd3o5UnVKSUJoUXJKZmladUhzQ2ZpS1ZvZk11TWYKK2FyLzRFS2Z5b0VMRGRpbGhnNmkrYWJhaEdPa3F5WHNqYXZGdHlEU2VDcFhICistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTI1NiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTI1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWY5ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMjU2CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCelRDQ0FRWUNBUUF3TkRFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUkl3CitFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTjBSCitpcCtadXJCb3lpcnFPMnB0V1pmdFRzbFU1QTN1enFCOW9CNnE2QTdDdXhOQTI0b1Nqb2tUSktYRjlmclk5WkRYCit5TXJMeGY2VEhhL2FFaU56VW5sR0dycWdWeXQyRmpHenFLL25PSnNJaTJPWk9nb2w3a1hTR0ZpNnVaTWE3ZFJZCittbU1iTi96M0ZBaWZoV1ZKODFreWJkSGc2RzNlVXUxbXRLa0wya0NWQWdNQkFBR2dLVEFuQmdrcWhraUc5dzBCCitDUTR4R2pBWU1Ba0dBMVVkRXdRQ01BQXdDd1lEVlIwUEJBUURBZ1hnTUQwR0NTcUdTSWIzRFFFQkNqQXdvQTB3CitDd1lKWUlaSUFXVURCQUlCb1Jvd0dBWUpLb1pJaHZjTkFRRUlNQXNHQ1dDR1NBRmxBd1FDQWFJREFnRmVBNEdCCitBQ1VhQ1RpZHZ6V1ZKTkttUnJyaXVmVGhHVWZ3NVhnZHNjM0dhOEN4K3ZSZitiUFptUjNOVmtjMFpxOXVjMCs4CitkMVdYYUx6Ym1nZTZJYmN2VFBXQ0xOREFXSTlVem9RNldTOW15TTNlREVHZHJ1Q2xZd2I1QlZMeDNNdmh2b29LCitML0g2c25FMWRITlBYeUNOVkZUSklsbDNiUmxWTVJzZlpwRGhtejgvSW1KNAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEzODQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEzODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwMzQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTM4NApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQnpUQ0NBUVlDQVFBd05ERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9UQ0ZCdmJHRnlVMU5NTVJJdworRUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU4wUgoraXArWnVyQm95aXJxTzJwdFdaZnRUc2xVNUEzdXpxQjlvQjZxNkE3Q3V4TkEyNG9Tam9rVEpLWEY5ZnJZOVpEWAoreU1yTHhmNlRIYS9hRWlOelVubEdHcnFnVnl0MkZqR3pxSy9uT0pzSWkyT1pPZ29sN2tYU0dGaTZ1Wk1hN2RSWQorbW1NYk4vejNGQWlmaFdWSjgxa3liZEhnNkczZVV1MW10S2tMMmtDVkFnTUJBQUdnS1RBbkJna3Foa2lHOXcwQgorQ1E0eEdqQVlNQWtHQTFVZEV3UUNNQUF3Q3dZRFZSMFBCQVFEQWdYZ01EMEdDU3FHU0liM0RRRUJDakF3b0EwdworQ3dZSllJWklBV1VEQkFJQ29Sb3dHQVlKS29aSWh2Y05BUUVJTUFzR0NXQ0dTQUZsQXdRQ0FxSURBZ0ZPQTRHQgorQU5mWkdLNm5FL0NQOVB1QUxGemJBL212T25ZbEk2MHBNb3dzY1JmQ1lwdlIyNWlRSlZoQUpmWVZYQURSTjNxZAorTkFpRldOVmNqRk1Ja1JscTdxaWZCTjk3VkhHZVlvV0l1dzlnWUViM09xREd6T3NZUDBLSWdNTnQ4L0E0cUNragorNU16b2xPWXlUK04rUUZHVjBwZENOcFg3UXBwZk5kRnlGQW1XWGExNzFSekcKKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhNTEyIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhNTEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NmI1YzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGE1MTIKQEAgLTAsMCArMSwxMiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJ6VENDQVFZQ0FRQXdOREVMTUFrR0ExVUVCaE1DVGt3eEVUQVBCZ05WQkFvVENGQnZiR0Z5VTFOTU1SSXcKK0VBWURWUVFERXdsc2IyTmhiR2h2YzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOMFIKK2lwK1p1ckJveWlycU8ycHRXWmZ0VHNsVTVBM3V6cUI5b0I2cTZBN0N1eE5BMjRvU2pva1RKS1hGOWZyWTlaRFgKK3lNckx4ZjZUSGEvYUVpTnpVbmxHR3JxZ1Z5dDJGakd6cUsvbk9Kc0lpMk9aT2dvbDdrWFNHRmk2dVpNYTdkUlkKK21tTWJOL3ozRkFpZmhXVko4MWt5YmRIZzZHM2VVdTFtdEtrTDJrQ1ZBZ01CQUFHZ0tUQW5CZ2txaGtpRzl3MEIKK0NRNHhHakFZTUFrR0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnWGdNRDBHQ1NxR1NJYjNEUUVCQ2pBd29BMHcKK0N3WUpZSVpJQVdVREJBSURvUm93R0FZSktvWklodmNOQVFFSU1Bc0dDV0NHU0FGbEF3UUNBNklEQWdFK0E0R0IKK0FDeFdCaFBraHlWbEJZL213a3JXN09qWXNhTjIvWmxGU3Y3Nnc2M2I2MUJwaWdSZUpzZ2dNdXQ1RVBPZ2ZHWUoKK3J6eWdLRGxGL050bU1OMjJqV3JGdXA5THNaSkFYMGdZYkxtbGlpYUc5SGNoK2kvOGI0Mm9hUVREV0dGWjlMaVkKK1c3RjdYMGY5bHB6TktPdFE4aXgwcytuWVMyT055emZ1NTUrUmx6ZjgvNjNNCistLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EtdjEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS12MS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhM2IxYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EtdjEuY3J0CkBAIC0wLDAgKzEsMTkgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJREl6Q0NBZ3NDREZPaXRvNEZRQTVWWEpPVjVUQU5CZ2txaGtpRzl3MEJBUXNGQURCUU1Sd3dHZ1lEVlFRRAorRXhOUWIyeGhjbE5UVENCVVpYTjBJRU5CSUhZeE1SQXdEZ1lEVlFRTEV3ZDBaWE4wYVc1bk1SRXdEd1lEVlFRSworRXdoUWIyeGhjbE5UVERFTE1Ba0dBMVVFQmhNQ1Rrd3dJaGdQTWpBeE5EQTJNVGt4TURBNE1UUmFHQTh5TURJMAorTURZeE9ERXdNRGd4TkZvd1VERWNNQm9HQTFVRUF4TVRVRzlzWVhKVFUwd2dWR1Z6ZENCRFFTQjJNVEVRTUE0RworQTFVRUN4TUhkR1Z6ZEdsdVp6RVJNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hDekFKQmdOVkJBWVRBazVNTUlJQgorSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXdOODMvQmU3NEphZFA0YmVsako5UktVVworb00waDhablU3T3JMZkJoWUNKU2w3SnZGaTk4YUhwazRtWWNlZThDTk9kODRYWEI0QjlPZTJaUG91WEpSeGM2agorTUZLcDh1ZEFjQlRMUktKeUM4TGxRUGsrNWFZT3MvbnNTbVBBdUNrQWRKeFhPNmlsQkpCeDhiMkQyVC9XcGVJOAorS28vdkoyRER4cC9MdXV4Z2ZiZm1oREsrVC90WUppSURXOVMwMWZ2MTQ1WXVjTURrTHIzOEx1N2lRVlhBTkM1OQorSkhKcHkwZXhGRUNEZldmMGh2WXhxL0Y1cExLMUxoTDVoQmZ3WW04blBoTllzVlFOSVpwek42RXd6MitTM1BicAorL0t6YkxpalJmZ0pMSTZBVjhqaGxaQW5xREc2T0d4ZWdjY2l6bThtcjZjUHl6NGVXajRBQ01wNlpXRytpMVFJRAorQVFBQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQm9YQzVBbFhJNWF6eU9Qdm1Oc2UycUhoTzdCclhPRWpIKworOWc1UC9Wc3JWQURoc1VHdjZ4MEEyb0xvV1h0T2pHRElXV0g1M0JXSGtDVUN1NFQ1RDVDNitJNDdyWFdsNHBBcgorSitoK3RRVlpvNkowQUp4ZlBzZS9ObnJqc2JvVVNXaHVubW8vaVRyVTZTNEtKQmd1SUtQNlQxRFpvRC84RVlnVQoreCtmWERtdlJPK01UZXNXRGlZK3ArRkhFenN1M2I5RUJ0RzlkVWlSL3p6WGkva3RGQ2ZyZ3N0S0dTdVc2K2o3bQorbGNkdVR4c29naTZVYzN0V0t0bjZxcFNHUjB1Qm9DejZlbUZPN1NtbXkvdEl5VkE4OGxIMCszVW54T3Z1NFRBSwordXZqWWtPY1pxaHByRGlNZmh4QkI3cHhiZml2aUVBTlRiZ1NmQ3RaZXdTTnoyUlVKOW9jeQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVlZTJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS5jcnQKQEAgLTAsMCArMSw4MCBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAwICgweDApCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEZlYiAxMiAxNDo0NDowMCAyMDExIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogRmViIDEyIDE0OjQ0OjAwIDIwMjEgR01UCisgICAgICAgIFN1YmplY3Q6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgUlNBIFB1YmxpYyBLZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzICgyMDQ4IGJpdCk6CisgICAgICAgICAgICAgICAgICAgIDAwOmMwOmRmOjM3OmZjOjE3OmJiOmUwOjk2OjlkOjNmOjg2OmRlOjk2OjMyOgorICAgICAgICAgICAgICAgICAgICA3ZDo0NDphNToxNjphMDpjZDoyMTpmMTo5OTpkNDplYzplYTpjYjo3YzoxODoKKyAgICAgICAgICAgICAgICAgICAgNTg6MDg6OTQ6YTU6ZWM6OWI6YzU6OGI6ZGY6MWE6MWU6OTk6Mzg6OTk6ODc6CisgICAgICAgICAgICAgICAgICAgIDFlOjdiOmMwOjhkOjM5OmRmOjM4OjVkOjcwOjc4OjA3OmQzOjllOmQ5OjkzOgorICAgICAgICAgICAgICAgICAgICBlODpiOTo3Mjo1MTpjNTpjZTphMzozMDo1MjphOTpmMjplNzo0MDo3MDoxNDoKKyAgICAgICAgICAgICAgICAgICAgY2I6NDQ6YTI6NzI6MGI6YzI6ZTU6NDA6Zjk6M2U6ZTU6YTY6MGU6YjM6Zjk6CisgICAgICAgICAgICAgICAgICAgIGVjOjRhOjYzOmMwOmI4OjI5OjAwOjc0OjljOjU3OjNiOmE4OmE1OjA0OjkwOgorICAgICAgICAgICAgICAgICAgICA3MTpmMTpiZDo4MzpkOTozZjpkNjphNTplMjozYzoyYTo4ZjplZjoyNzo2MDoKKyAgICAgICAgICAgICAgICAgICAgYzM6YzY6OWY6Y2I6YmE6ZWM6NjA6N2Q6Yjc6ZTY6ODQ6MzI6YmU6NGY6ZmI6CisgICAgICAgICAgICAgICAgICAgIDU4OjI2OjIyOjAzOjViOmQ0OmI0OmQ1OmZiOmY1OmUzOjk2OjJlOjcwOmMwOgorICAgICAgICAgICAgICAgICAgICBlNDoyZTpiZDpmYzoyZTplZTplMjo0MTo1NTpjMDozNDoyZTo3ZDoyNDo3MjoKKyAgICAgICAgICAgICAgICAgICAgNjk6Y2I6NDc6YjE6MTQ6NDA6ODM6N2Q6Njc6ZjQ6ODY6ZjY6MzE6YWI6ZjE6CisgICAgICAgICAgICAgICAgICAgIDc5OmE0OmIyOmI1OjJlOjEyOmY5Ojg0OjE3OmYwOjYyOjZmOjI3OjNlOjEzOgorICAgICAgICAgICAgICAgICAgICA1ODpiMTo1NDowZDoyMTo5YTo3MzozNzphMTozMDpjZjo2Zjo5MjpkYzpmNjoKKyAgICAgICAgICAgICAgICAgICAgZTk6ZmM6YWM6ZGI6MmU6Mjg6ZDE6N2U6MDI6NGI6MjM6YTA6MTU6ZjI6Mzg6CisgICAgICAgICAgICAgICAgICAgIDY1OjY0OjA5OmVhOjBjOjZlOjhlOjFiOjE3OmEwOjcxOmM4OmIzOjliOmM5OgorICAgICAgICAgICAgICAgICAgICBhYjplOTpjMzpmMjpjZjo4Nzo5Njo4Zjo4MDowMjozMjo5ZTo5OTo1ODo2ZjoKKyAgICAgICAgICAgICAgICAgICAgYTI6ZDUKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQjQ6NUE6RTQ6QTU6QjM6REU6RDI6NTI6RjY6Qjk6RDU6QTY6OTU6MEY6RUI6M0U6QkM6Qzc6RkQ6RkYKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkI0OjVBOkU0OkE1OkIzOkRFOkQyOjUyOkY2OkI5OkQ1OkE2Ojk1OjBGOkVCOjNFOkJDOkM3OkZEOkZGCisgICAgICAgICAgICAgICAgRGlyTmFtZTovQz1OTC9PPVBvbGFyU1NML0NOPVBvbGFyU1NMIFRlc3QgQ0EKKyAgICAgICAgICAgICAgICBzZXJpYWw6MDAKKworICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBiODpmZDo1NDpkODowMDo1NDo5MDo4YjoyNTpiMDoyNzpkZDo5NTpjZDphMjpmNzo4NDowNzoKKyAgICAgICAgMWQ6ODc6ODk6NGE6YzQ6Nzg6MTE6ZDg6MDc6YjU6ZDc6MjI6NTA6OGU6NDg6ZWI6NjI6N2E6CisgICAgICAgIDMyOjg5OmJlOjYzOjQ3OjUzOmZmOmI2OmJlOmYxOjJlOjhjOjU0OmMwOjk5OjNmOmEwOmI5OgorICAgICAgICAzNzoyMzo3Mjo1ZjowZDo0Njo1OTo4ZjpkODo0NzpjZDo5Nzo0Yzo5ZjowNzowYzoxMjo2MjoKKyAgICAgICAgMDk6M2E6MjQ6ZTQ6MzY6ZDk6ZTk6MmM6ZGE6Mzg6ZDA6NzM6NzU6NjE6ZDc6YzE6NmM6MjY6CisgICAgICAgIDhiOjliOmUwOmQ1OmRjOjY3OmVkOjhjOjZiOjMzOmQ3Ojc0OjIyOjNjOjRjOmRiOmI1OjhkOgorICAgICAgICAyYTpjZToyYzowZDowODo1OTowNTowOTowNTphNjozOTo5ZjpiMzo2NzoxYjplMjo4MzplNToKKyAgICAgICAgZTE6OGY6NTM6ZjY6Njc6OTM6Yzc6Zjk6NmY6NzY6NDQ6NTg6MTI6ZTg6M2E6ZDQ6OTc6ZTc6CisgICAgICAgIGU5OmMwOjNlOmE4OjdhOjcyOjNkOjg3OjUzOjFmOmU1OjJjOjg0Ojg0OmU3OjlhOjllOjdmOgorICAgICAgICA2NjpkOToxZjo5YjpmNToxMzo0ODpiMDo0ZDoxNDpkMTpkZTpiMjoyNDpkOTo3ODo3ZDpmNToKKyAgICAgICAgMzU6Y2M6NTg6MTk6ZDE6ZDI6OTk6ZWY6NGQ6NzM6Zjg6MWY6ODk6ZDQ6NWE6ZDA6NTI6Y2U6CisgICAgICAgIDA5OmY1OmIxOjQ2OjUxOjZhOjAwOjhlOjNiOmNjOjZmOjYzOjAxOjAwOjk5OmVkOjlkOmE2OgorICAgICAgICAwODo2MDpjZDozMjoxODpkMDo3MzplMDo1ODo3MTpkOTplNTpkMjo1MzpkNzo4ZDpkMDpjYToKKyAgICAgICAgZTk6NWQ6MmE6MGE6MGQ6NWQ6NTU6ZWM6MjE6NTA6MTc6MTY6ZTY6MDY6NGE6Y2Q6NWU6ZGU6CisgICAgICAgIGY3OmUwOmU5OjU0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURoekNDQW0rZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE3TVFzd0NRWURWUVFHRXdKT1RERVIKK01BOEdBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd0hoY04KK01URXdNakV5TVRRME5EQXdXaGNOTWpFd01qRXlNVFEwTkRBd1dqQTdNUXN3Q1FZRFZRUUdFd0pPVERFUk1BOEcKK0ExVUVDaE1JVUc5c1lYSlRVMHd4R1RBWEJnTlZCQU1URUZCdmJHRnlVMU5NSUZSbGMzUWdRMEV3Z2dFaU1BMEcKK0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEQTN6ZjhGN3ZnbHAwL2h0NldNbjFFcFJhZ3pTSHgKK21kVHM2c3Q4R0ZnSWxLWHNtOFdMM3hvZW1UaVpoeDU3d0kwNTN6aGRjSGdIMDU3WmsraTVjbEhGenFNd1VxbnkKKzUwQndGTXRFb25JTHd1VkErVDdscGc2eitleEtZOEM0S1FCMG5GYzdxS1VFa0hIeHZZUFpQOWFsNGp3cWorOG4KK1lNUEduOHU2N0dCOXQrYUVNcjVQKzFnbUlnTmIxTFRWKy9YamxpNXd3T1F1dmZ3dTd1SkJWY0EwTG4wa2NtbkwKK1I3RVVRSU45Wi9TRzlqR3I4WG1rc3JVdUV2bUVGL0JpYnljK0UxaXhWQTBobW5NM29URFBiNUxjOXVuOHJOc3UKK0tORitBa3Nqb0JYeU9HVmtDZW9NYm80YkY2Qnh5TE9ieWF2cHcvTFBoNWFQZ0FJeW5wbFliNkxWQWdNQkFBR2oKK2daVXdnWkl3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV0RnJrcGJQZTBsTDJ1ZFdtbFEvclByekgKKy9mOHdZd1lEVlIwakJGd3dXb0FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpIL2YraFA2UTlNRHN4Q3pBSkJnTlYKK0JBWVRBazVNTVJFd0R3WURWUVFLRXdoUWIyeGhjbE5UVERFWk1CY0dBMVVFQXhNUVVHOXNZWEpUVTB3Z1ZHVnoKK2RDQkRRWUlCQURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXVQMVUyQUJVa0lzbHNDZmRsYzJpOTRRSEhZZUoKK1NzUjRFZGdIdGRjaVVJNUk2Mko2TW9tK1kwZFQvN2ErOFM2TVZNQ1pQNkM1TnlOeVh3MUdXWS9ZUjgyWFRKOEgKK0RCSmlDVG9rNURiWjZTemFPTkJ6ZFdIWHdXd21pNXZnMWR4bjdZeHJNOWQwSWp4TTI3V05LczRzRFFoWkJRa0YKK3BqbWZzMmNiNG9QbDRZOVQ5bWVUeC9sdmRrUllFdWc2MUpmbjZjQStxSHB5UFlkVEgrVXNoSVRubXA1L1p0a2YKK20vVVRTTEJORk5IZXNpVFplSDMxTmN4WUdkSFNtZTlOYy9nZmlkUmEwRkxPQ2ZXeFJsRnFBSTQ3ekc5akFRQ1oKKzdaMm1DR0ROTWhqUWMrQlljZG5sMGxQWGpkREs2VjBxQ2cxZFZld2hVQmNXNWdaS3pWN2U5K0RwVkE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjE0ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYS5rZXkKQEAgLTAsMCArMSwzMCBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRAorREVLLUluZm86IERFUy1FREUzLUNCQyxBOEE5NUIwNUQ1QjcyMDZCCisKKzlRZDlHZUFyZWpsMUdEVmgybExWMWJIdDBjUHRmYmg1aC81elZwQVZhRnBxdFNQTXJFbHA1MFJudG45ZXQrSkEKKzdWT3lib1IrSXkydC9IVTRXdkE2ODdrM0JwcGU5R3dLSGpIaHRsLy84eEZLd1pyM1hiNXlPNUpVUDhBVWN0UXEKK05iOENMbFp5dVVDKzUyUkVBQXRoZFdnc1grN2RKTzR5YWJ6VWNRMjJUcDlKU0QwaGlMNDNCbGtXWVVOSzNkQW8KK1BabG1pcHRqbnpWVGpnMU14c0JTeWRaaW5XT0xCVjgvSlFneFNQbzJ5RDR1RWZpZzI4cWJ2UTJ3TkluMHBuQWIKK0d4blNBT2F6a29uZ0VHZnZjaklJcytMWk45Z1hGaHhjT2g2a2M0US9jOTlCN1FXRVR3TExrWWdaK3oxYTlWWTkKK2dFVTdDd0N4WUNEK2g5aFk2RlBtc0swL2xDNE83YWVSS3BZcTAwclBQeHM2aTdwaGlleGc2YXg2eVRNbUFyUXEKK1FtSzNUQXNKbThWL0o1QVdwTEVWNmpBRmdSR3ltR0dIbm9mMERYelZXWmlkcmNaSldUTnVHRVg5MG5CM2VlMncKK1BYSkVGV0tvRDNLM2FGY1NMZEhZcjNtTEd4UDdIOVRoUWFpOVZzeWN4WktTNWt3dkJLUS8vWU1ybUZmd1BrOHgKK3ZUZVk0S1pNYVVydmVFZWw1dFdaQzk0UlNNS2d4UjZjeUUxbkJYeVRRbkRPR2JmcE5OZ0JLeHlLYklOV29PSlUKK1dKWkF3bHNRbitRekNEd3ByaTcrc1YxbVMzZ0JFNlVZN2FRbW5taWlhQzJWM0hicGh4Y3QvZW41UXNmRE90MVgKK0pjelNmcFJXTGxiUHpuWmc4T1FoL1ZnQ01BNThONURqT3pUSUs3c0pKNXIrOTRaQlRDcGdBTWJGNTg4ZjBOVFIKK0tDZTR5cnhHSlI3WDAyTTRudkQ0SXdPbHBzUTh4UXhadE9TZ1h2NExreHZkVTlYSkpLV1ovWE5LSmVXenR4U2UKK1oxdmRUYzJZZnNEQkEyU0V2MzN2eEh4MmcxdnF0dzhTakRSVDJSYVFTUzBRdVNhTUppbWRPWDZtVE9DQktrMUoKKzlRNW1YVHJFUisvTG5LMGpFbVhzQlhXQTVicXFWWkl5YWhYU3g0VllaN2w3dy9QSGlVRHREZ3lSaE1NS2k0bjIKK2lRdlFjV1NRVGpycG5sSmJjYTEvRGtwUnQzWXdydkp3ZHFiOGFzWlUyVnJORVRoNXgwUVZlZkRSTEZpVnBpZi8KK3RVYWVBZS9QMUY4T2tTN09JWkRzMVNVYnYvc0Qydk1iaE5rVW9DbXMzL1B2TnRkbnZnTDRGMHpoYURwS0NtbFQKK1A4dng0OUU3djVDeVJObUVEOXpaZzRvM3dtTXFyUU85M1B0VHVnM0V1OW9WeDF6UFFNMU5WTXlCYTIrZjI5REwKKzFudVRDZVhkbzkrbmk0NXh4K2pBSTREQ3dyUmRoSjl1elp5QzY5NjJIMzdINkQrNW5hTnZDbEZSMXM2bGkxR2IKK25xUG9peS9PQnNFeDlDYURHY3FRQnA1V21lLzNYVys2ejFJU094K2lnd05UVkNUMTRtSGRCTWJ5YTBlSUtmdDUKK1grR253dGdFTXlDWXl5V3VVY3Q4ZzRSekVyY1k5K3lXOU9tNUh6cHg0ek91VzROUFpnUERUZ0srdDJSU0wvWXEKK3JFMW5qcmdlR1ljVmVHM2YrT2Z0SDRzNmZQYnE3dDFBNVpnVXNjYkxNQnFyOXRLK09xeWdSNEVnS0JQc0g2Q3oKK0w2emx2LzJSVjBxQUh2VnVESmNJRElnd1k1ckp0SU5FbTMycmhPZUZOSndaUzVNTklDMWN6WFp4NS8vdWdYN2wKK0k0c3k1bmJWaHdTanRBazhYZzVkWmJkVFo2bUlyYjd4cUgrZmRha1pvcjFraEc3YkMydUl3aWJEM2NTbDJYa1IKK3dONDhsc2xiSG5xcWFncjZYbTFuTk9TVmw4Qy82a2JKRXNNcExoQWV6ZlJ0R3d2T3Vjb2FFK1diZVVOb2xHZGUKK1AvZVFpZGRTZjBicm5waUxKUmg3cVpybDlYdXFZZHBVcW5vRWRNQWZvdERPSUQ4T3RWN2d0OGE0OGFkOFZQVzIKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxYTQyMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydApAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNVakNDQWRlZ0F3SUJBZ0lKQU1GRDRuNWlROHpvTUFvR0NDcUdTTTQ5QkFNQ01ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEFlRncweE16QTVNalF4TlRRNU5EaGFGdzB5TXpBNU1qSXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVQKK0FrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkYKK1F5QkRRVEIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnUKK3d3NVhVek01V05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXkKK2FZN3pRYTBwdzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxT0JvRENCblRBZEJnTlZIUTRFRmdRVW5XMGcKK0pFa0JQeXZMZUxVWnZINGt5ZHY3Tm53d2JnWURWUjBqQkdjd1pZQVVuVzBnSkVrQlB5dkxlTFVadkg0a3lkdjcKK05ueWhRcVJBTUQ0eEN6QUpCZ05WQkFZVEFrNU1NUkV3RHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUUKK0F4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRlF5QkRRWUlKQU1GRDRuNWlROHpvTUF3R0ExVWRFd1FGTUFNQkFmOHcKK0NnWUlLb1pJemowRUF3SURhUUF3WmdJeEFNTzBZbk5XS0pVQWZYZ1NKdEp4ZXhuNGlwZytrdjR6bnVSNTB2NTYKK3Q0ZDBQQ3U0MTJtVUM2Tm5kN2l6dnRFMk1nSXhBUDFubkpRalo4Qld1a3N6RlFERzQ4d3hDQ3ljaTlxcGRTTXYKK3VDam44cHdVT2tBQlhLOE1zczkwZnpDZkNFT3RJQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rZXkgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiYmEzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmtleQpAQCAtMCwwICsxLDYgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUlHa0FnRUJCRENEMlJVT29ISHdWeEF6b3ppNGhzR21FVjF0dEFQaEtYWkYxNGR2STZ0RUlPcGtlNFd4ZHVlRgorbGFwMDF0R2tYdXFnQndZRks0RUVBQ0toWkFOaUFBVEQyaXMwUVRkWUw0ZFcvdnlKdWlsRFMwN2dic01PVjFNegorT1ZqVVVyU1JsVGtMSTk5ZkZ5UmlTUHdhbFNuT0xDMkh3b2hTZ0svV2Fxc2gzYmpUSEc1WXVNcm9zbW1PODBHdAorS2NPMFgzV25SMi9WR1NsVmFacFRPeUMwWmhaZ014ND0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWNybC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcmwuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjQwODMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcmwuY3J0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnpEQ0NBVk9nQXdJQkFnSUpBUDZtWkx6aDBJUFNNQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TkRBME1Ea3hNVEl6TXpoYUZ3MHlOREEwTURZeE1USXpNemhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFNZE1Cc3dEQVlEVlIwVEJBVXdBd0VCL3pBTAorQmdOVkhROEVCQU1DQVFJd0NnWUlLb1pJemowRUF3SURad0F3WkFJd1pPQ0tZMEVIWFl6STRjUXNGbmZPcnhtMQordWZ2TmVaNFpjU1pXcmtUQmF6VzJPQkN1Q1A5U0x6bmVjM1NGT1V2dkFqQUtlL3F5Y2Z4a0hpdmppZUNFRzFLdAorbTJENFFLU0pFTFVoVEhyNHpka2VxYnpndWkweTNpb3Vhb3lXc0t2ZXROZz0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWNydC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYWNjNjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnQuY3J0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnpUQ0NBVk9nQXdJQkFnSUpBT0RoNlBBZUQ5L3ZNQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TkRBME1Ea3hNVEl6TlRSYUZ3MHlOREEwTURZeE1USXpOVFJhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFNZE1Cc3dEQVlEVlIwVEJBVXdBd0VCL3pBTAorQmdOVkhROEVCQU1DQWdRd0NnWUlLb1pJemowRUF3SURhQUF3WlFJd0dHbGJ5bmQxalUzV2tVeDZJcmhrOUxvYgorejJCKzFlSU82K2V1M0VuOEIzcmg4SXBmeG8wZTBocGZhUkZZUDFNVUFqRUFqeHhCY2hSV0pBelo2LzQ3V2cvNworVW9hc1JJTmdQNUIvdUpoVG5mdFMxYnF5dVdIYXN0YjRMVzUvWUxPdlBiTVEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWNydF9jcmwuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua3UtY3J0X2NybC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3NGU0MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWNydF9jcmwuY3J0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnpEQ0NBVk9nQXdJQkFnSUpBUGVqT3VwQ0pTNjVNQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TkRBME1Ea3hNVEl5TWpWYUZ3MHlOREEwTURZeE1USXlNalZhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFNZE1Cc3dEQVlEVlIwVEJBVXdBd0VCL3pBTAorQmdOVkhROEVCQU1DQVFZd0NnWUlLb1pJemowRUF3SURad0F3WkFJd01LTFZYQjRZQlEwSGE0ZEV2RlBjSnRhdQorVFM1VmQ0VXFHM3hRMTBZY0pvZ3dldXFhR0hTRmdkbkVVZm9YKzRwNUFqQXBNbllYRmZValNtbHlmSm1UYXN3TworZ2FSNXNVbm53MzNOQTlqMWVyY2VtM2FzQ1l6NmE4VDB6bzgvclIzM1hWVT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWRzLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWRzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjhlMTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTIua3UtZHMuY3J0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnpEQ0NBVk9nQXdJQkFnSUpBUE9rUFIzd3N2bTVNQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TkRBME1Ea3hNVEkwTVROYUZ3MHlOREEwTURZeE1USTBNVE5hTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFNZE1Cc3dEQVlEVlIwVEJBVXdBd0VCL3pBTAorQmdOVkhROEVCQU1DQjRBd0NnWUlLb1pJemowRUF3SURad0F3WkFJd0dSQ21VL3JXTmpXMTNnOElUdXEzcE1YYgoramd3VEZKSFZsYk1EaUZKd1VyUnZ5dFBWOWRvSk9meko4bkFRMGNaMUFqQWJKOFFBVjJlK0RtWVpwV2MvcDZVZworblFkYWM1OWV2K2xIK2p1NndFVDNqTkRqVXRoVVByZGdxYTU0K1VXUTVyND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1mdXR1cmUtcHJlc2VudC5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtZnV0dXJlLXByZXNlbnQuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NmU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtZnV0dXJlLXByZXNlbnQuY3J0CkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQit6Q0NBWUNnQXdJQkFnSUJBVEFNQmdncWhrak9QUVFEQWdVQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRBZQorRncweU16QTVNakl4TlRRNU5EbGFGdzB6TURFeU16RXlNelU1TlRsYU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRCMgorTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnV3dzVYVXpNNQorV05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXlhWTd6UWEwcAordzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTlFNRTR3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RQorRmdRVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2N05ud3dId1lEVlIwakJCZ3dGb0FVblcwZ0pFa0JQeXZMZUxVWgordkg0a3lkdjdObnd3REFZSUtvWkl6ajBFQXdJRkFBTm5BREJrQWpCMVpOZE9NN0tSSmlQbzQ1aFAxN0Exc0pTSAorcUhGUEVKYm1sNktkTmV2b1ZaMUhxdlA4QW9GR2NQSlJwUVZ0ekMwQ01EYTdKRXFuMGRPc3M4RW1XOXBWRi9OMgorK1h2ek5jemo4OW1XTWdQaEpKbFQrTU9OUXgzTEZRTytUTVNJOWhMZGt3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wYXN0LXByZXNlbnQuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LXBhc3QtcHJlc2VudC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxYmE5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wYXN0LXByZXNlbnQuY3J0CkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQi9UQ0NBWUNnQXdJQkFnSUJBVEFNQmdncWhrak9QUVFEQWdVQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRBZQorRncwd016QTVNalF4TlRRNU5EaGFGdzB4TXpBNU1qUXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRCMgorTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnV3dzVYVXpNNQorV05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXlhWTd6UWEwcAordzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTlFNRTR3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RQorRmdRVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2N05ud3dId1lEVlIwakJCZ3dGb0FVblcwZ0pFa0JQeXZMZUxVWgordkg0a3lkdjdObnd3REFZSUtvWkl6ajBFQXdJRkFBTnBBREJtQWpFQXZRLzQ5bFhYckxZZE9JR3RUYVlXanBaUAordFJCWFFpR1BNelV2bUtCazdnTTdiRjRpRlBzZEppa3lYSG11d3YzUkFqRUE4dnRVWDhmQUFCM2ZiaDVkRVhSbQorbDd0ejBTdy9SVzZBSEZ0YUlhdUdraEhxZUtJYUtJaTZXU2dIdTZ4OTd1eWcKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wcmVzZW50LWZ1dHVyZS5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcHJlc2VudC1mdXR1cmUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MmVkMDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtcHJlc2VudC1mdXR1cmUuY3J0CkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQit6Q0NBWUNnQXdJQkFnSUJBVEFNQmdncWhrak9QUVFEQWdVQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRBZQorRncweU16QTVNakl4TlRRNU5EbGFGdzB6TURFeU16RXlNelU1TlRsYU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRCMgorTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnV3dzVYVXpNNQorV05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXlhWTd6UWEwcAordzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTlFNRTR3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RQorRmdRVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2N05ud3dId1lEVlIwakJCZ3dGb0FVblcwZ0pFa0JQeXZMZUxVWgordkg0a3lkdjdObnd3REFZSUtvWkl6ajBFQXdJRkFBTm5BREJrQWpCMVpOZE9NN0tSSmlQbzQ1aFAxN0Exc0pTSAorcUhGUEVKYm1sNktkTmV2b1ZaMUhxdlA4QW9GR2NQSlJwUVZ0ekMwQ01EYTdKRXFuMGRPc3M4RW1XOXBWRi9OMgorK1h2ek5jemo4OW1XTWdQaEpKbFQrTU9OUXgzTEZRTytUTVNJOWhMZGt3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wcmVzZW50LXBhc3QuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LXByZXNlbnQtcGFzdC5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMWQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wcmVzZW50LXBhc3QuY3J0CkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQi9UQ0NBWUNnQXdJQkFnSUJBVEFNQmdncWhrak9QUVFEQWdVQU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRBZQorRncwd016QTVNalF4TlRRNU5EaGFGdzB4TXpBNU1qUXhOVFE1TkRoYU1ENHhDekFKQmdOVkJBWVRBazVNTVJFdworRHdZRFZRUUtFd2hRYjJ4aGNsTlRUREVjTUJvR0ExVUVBeE1UVUc5c1lYSnpjMndnVkdWemRDQkZReUJEUVRCMgorTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJNUGFLelJCTjFndmgxYisvSW02S1VOTFR1QnV3dzVYVXpNNQorV05SU3RKR1ZPUXNqMzE4WEpHSkkvQnFWS2M0c0xZZkNpRktBcjlacXF5SGR1Tk1jYmxpNHl1aXlhWTd6UWEwcAordzdSZmRhZEhiOVVaS1ZWcG1sTTdJTFJtRm1BekhxTlFNRTR3REFZRFZSMFRCQVV3QXdFQi96QWRCZ05WSFE0RQorRmdRVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2N05ud3dId1lEVlIwakJCZ3dGb0FVblcwZ0pFa0JQeXZMZUxVWgordkg0a3lkdjdObnd3REFZSUtvWkl6ajBFQXdJRkFBTnBBREJtQWpFQXZRLzQ5bFhYckxZZE9JR3RUYVlXanBaUAordFJCWFFpR1BNelV2bUtCazdnTTdiRjRpRlBzZEppa3lYSG11d3YzUkFqRUE4dnRVWDhmQUFCM2ZiaDVkRVhSbQorbDd0ejBTdy9SVzZBSEZ0YUlhdUdraEhxZUtJYUtJaTZXU2dIdTZ4OTd1eWcKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0YmYwNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0CkBAIC0wLDAgKzEsOTUgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMCAoMHgwKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDAgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowMCAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpjMDpkZjozNzpmYzoxNzpiYjplMDo5Njo5ZDozZjo4NjpkZTo5NjozMjoKKyAgICAgICAgICAgICAgICAgICAgN2Q6NDQ6YTU6MTY6YTA6Y2Q6MjE6ZjE6OTk6ZDQ6ZWM6ZWE6Y2I6N2M6MTg6CisgICAgICAgICAgICAgICAgICAgIDU4OjA4Ojk0OmE1OmVjOjliOmM1OjhiOmRmOjFhOjFlOjk5OjM4Ojk5Ojg3OgorICAgICAgICAgICAgICAgICAgICAxZTo3YjpjMDo4ZDozOTpkZjozODo1ZDo3MDo3ODowNzpkMzo5ZTpkOTo5MzoKKyAgICAgICAgICAgICAgICAgICAgZTg6Yjk6NzI6NTE6YzU6Y2U6YTM6MzA6NTI6YTk6ZjI6ZTc6NDA6NzA6MTQ6CisgICAgICAgICAgICAgICAgICAgIGNiOjQ0OmEyOjcyOjBiOmMyOmU1OjQwOmY5OjNlOmU1OmE2OjBlOmIzOmY5OgorICAgICAgICAgICAgICAgICAgICBlYzo0YTo2MzpjMDpiODoyOTowMDo3NDo5Yzo1NzozYjphODphNTowNDo5MDoKKyAgICAgICAgICAgICAgICAgICAgNzE6ZjE6YmQ6ODM6ZDk6M2Y6ZDY6YTU6ZTI6M2M6MmE6OGY6ZWY6Mjc6NjA6CisgICAgICAgICAgICAgICAgICAgIGMzOmM2OjlmOmNiOmJhOmVjOjYwOjdkOmI3OmU2Ojg0OjMyOmJlOjRmOmZiOgorICAgICAgICAgICAgICAgICAgICA1ODoyNjoyMjowMzo1YjpkNDpiNDpkNTpmYjpmNTplMzo5NjoyZTo3MDpjMDoKKyAgICAgICAgICAgICAgICAgICAgZTQ6MmU6YmQ6ZmM6MmU6ZWU6ZTI6NDE6NTU6YzA6MzQ6MmU6N2Q6MjQ6NzI6CisgICAgICAgICAgICAgICAgICAgIDY5OmNiOjQ3OmIxOjE0OjQwOjgzOjdkOjY3OmY0Ojg2OmY2OjMxOmFiOmYxOgorICAgICAgICAgICAgICAgICAgICA3OTphNDpiMjpiNToyZToxMjpmOTo4NDoxNzpmMDo2Mjo2ZjoyNzozZToxMzoKKyAgICAgICAgICAgICAgICAgICAgNTg6YjE6NTQ6MGQ6MjE6OWE6NzM6Mzc6YTE6MzA6Y2Y6NmY6OTI6ZGM6ZjY6CisgICAgICAgICAgICAgICAgICAgIGU5OmZjOmFjOmRiOjJlOjI4OmQxOjdlOjAyOjRiOjIzOmEwOjE1OmYyOjM4OgorICAgICAgICAgICAgICAgICAgICA2NTo2NDowOTplYTowYzo2ZTo4ZToxYjoxNzphMDo3MTpjODpiMzo5YjpjOToKKyAgICAgICAgICAgICAgICAgICAgYWI6ZTk6YzM6ZjI6Y2Y6ODc6OTY6OGY6ODA6MDI6MzI6OWU6OTk6NTg6NmY6CisgICAgICAgICAgICAgICAgICAgIGEyOmQ1CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czoKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgICAgIERpck5hbWU6L0M9TkwvTz1Qb2xhclNTTC9DTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgICAgICAgICAgc2VyaWFsOjAwCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgYjg6ZmQ6NTQ6ZDg6MDA6NTQ6OTA6OGI6MjU6YjA6Mjc6ZGQ6OTU6Y2Q6YTI6Zjc6ODQ6MDc6CisgICAgICAgIDFkOjg3Ojg5OjRhOmM0Ojc4OjExOmQ4OjA3OmI1OmQ3OjIyOjUwOjhlOjQ4OmViOjYyOjdhOgorICAgICAgICAzMjo4OTpiZTo2Mzo0Nzo1MzpmZjpiNjpiZTpmMToyZTo4Yzo1NDpjMDo5OTozZjphMDpiOToKKyAgICAgICAgMzc6MjM6NzI6NWY6MGQ6NDY6NTk6OGY6ZDg6NDc6Y2Q6OTc6NGM6OWY6MDc6MGM6MTI6NjI6CisgICAgICAgIDA5OjNhOjI0OmU0OjM2OmQ5OmU5OjJjOmRhOjM4OmQwOjczOjc1OjYxOmQ3OmMxOjZjOjI2OgorICAgICAgICA4Yjo5YjplMDpkNTpkYzo2NzplZDo4Yzo2YjozMzpkNzo3NDoyMjozYzo0YzpkYjpiNTo4ZDoKKyAgICAgICAgMmE6Y2U6MmM6MGQ6MDg6NTk6MDU6MDk6MDU6YTY6Mzk6OWY6YjM6Njc6MWI6ZTI6ODM6ZTU6CisgICAgICAgIGUxOjhmOjUzOmY2OjY3OjkzOmM3OmY5OjZmOjc2OjQ0OjU4OjEyOmU4OjNhOmQ0Ojk3OmU3OgorICAgICAgICBlOTpjMDozZTphODo3YTo3MjozZDo4Nzo1MzoxZjplNToyYzo4NDo4NDplNzo5YTo5ZTo3ZjoKKyAgICAgICAgNjY6ZDk6MWY6OWI6ZjU6MTM6NDg6YjA6NGQ6MTQ6ZDE6ZGU6YjI6MjQ6ZDk6Nzg6N2Q6ZjU6CisgICAgICAgIDM1OmNjOjU4OjE5OmQxOmQyOjk5OmVmOjRkOjczOmY4OjFmOjg5OmQ0OjVhOmQwOjUyOmNlOgorICAgICAgICAwOTpmNTpiMTo0Njo1MTo2YTowMDo4ZTozYjpjYzo2Zjo2MzowMTowMDo5OTplZDo5ZDphNjoKKyAgICAgICAgMDg6NjA6Y2Q6MzI6MTg6ZDA6NzM6ZTA6NTg6NzE6ZDk6ZTU6ZDI6NTM6ZDc6OGQ6ZDA6Y2E6CisgICAgICAgIGU5OjVkOjJhOjBhOjBkOjVkOjU1OmVjOjIxOjUwOjE3OjE2OmU2OjA2OjRhOmNkOjVlOmRlOgorICAgICAgICBmNzplMDplOTo1NAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaHpDQ0FtK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREF3V2hjTk1qRXdNakV5TVRRME5EQXdXakE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd2dnRWlNQTBHCitDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREEzemY4Rjd2Z2xwMC9odDZXTW4xRXBSYWd6U0h4CittZFRzNnN0OEdGZ0lsS1hzbThXTDN4b2VtVGlaaHg1N3dJMDUzemhkY0hnSDA1N1prK2k1Y2xIRnpxTXdVcW55Cis1MEJ3Rk10RW9uSUx3dVZBK1Q3bHBnNnorZXhLWThDNEtRQjBuRmM3cUtVRWtISHh2WVBaUDlhbDRqd3FqKzhuCitZTVBHbjh1NjdHQjl0K2FFTXI1UCsxZ21JZ05iMUxUVisvWGpsaTV3d09RdXZmd3U3dUpCVmNBMExuMGtjbW5MCitSN0VVUUlOOVovU0c5akdyOFhta3NyVXVFdm1FRi9CaWJ5YytFMWl4VkEwaG1uTTNvVERQYjVMYzl1bjhyTnN1CitLTkYrQWtzam9CWHlPR1ZrQ2VvTWJvNGJGNkJ4eUxPYnlhdnB3L0xQaDVhUGdBSXlucGxZYjZMVkFnTUJBQUdqCitnWlV3Z1pJd0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpICisvZjh3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WCitCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6CitkQ0JEUVlJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUF1UDFVMkFCVWtJc2xzQ2ZkbGMyaTk0UUhIWWVKCitTc1I0RWRnSHRkY2lVSTVJNjJKNk1vbStZMGRULzdhKzhTNk1WTUNaUDZDNU55TnlYdzFHV1kvWVI4MlhUSjhICitEQkppQ1RvazVEYlo2U3phT05CemRXSFh3V3dtaTV2ZzFkeG43WXhyTTlkMElqeE0yN1dOS3M0c0RRaFpCUWtGCitwam1mczJjYjRvUGw0WTlUOW1lVHgvbHZka1JZRXVnNjFKZm42Y0ErcUhweVBZZFRIK1VzaElUbm1wNS9adGtmCittL1VUU0xCTkZOSGVzaVRaZUgzMU5jeFlHZEhTbWU5TmMvZ2ZpZFJhMEZMT0NmV3hSbEZxQUk0N3pHOWpBUUNaCis3WjJtQ0dETk1oalFjK0JZY2RubDBsUFhqZERLNlYwcUNnMWRWZXdoVUJjVzVnWkt6VjdlOStEcFZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1jYV9jYXQyMS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMDc4OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0CkBAIC0wLDAgKzEsOTUgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1VqQ0NBZGVnQXdJQkFnSUpBTUZENG41aVE4em9NQW9HQ0NxR1NNNDlCQU1DTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQWVGdzB4TXpBNU1qUXhOVFE1TkRoYUZ3MHlNekE1TWpJeE5UUTVORGhhTUQ0eEN6QUpCZ05WQkFZVAorQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRUF4TVRVRzlzWVhKemMyd2dWR1Z6ZENCRgorUXlCRFFUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1QYUt6UkJOMWd2aDFiKy9JbTZLVU5MVHVCdQord3c1WFV6TTVXTlJTdEpHVk9Rc2ozMThYSkdKSS9CcVZLYzRzTFlmQ2lGS0FyOVpxcXlIZHVOTWNibGk0eXVpeQorYVk3elFhMHB3N1JmZGFkSGI5VVpLVlZwbWxNN0lMUm1GbUF6SHFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVblcwZworSkVrQlB5dkxlTFVadkg0a3lkdjdObnd3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFRQXdaZ0l4QU1PMFluTldLSlVBZlhnU0p0SnhleG40aXBnK2t2NHpudVI1MHY1NgordDRkMFBDdTQxMm1VQzZObmQ3aXp2dEUyTWdJeEFQMW5uSlFqWjhCV3Vrc3pGUURHNDh3eENDeWNpOXFwZFNNdgordUNqbjhwd1VPa0FCWEs4TXNzOTBmekNmQ0VPdElBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMCAoMHgwKQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBGZWIgMTIgMTQ6NDQ6MDAgMjAxMSBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEZlYiAxMiAxNDo0NDowMCAyMDIxIEdNVAorICAgICAgICBTdWJqZWN0OiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgIFJTQSBQdWJsaWMgS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1cyAoMjA0OCBiaXQpOgorICAgICAgICAgICAgICAgICAgICAwMDpjMDpkZjozNzpmYzoxNzpiYjplMDo5Njo5ZDozZjo4NjpkZTo5NjozMjoKKyAgICAgICAgICAgICAgICAgICAgN2Q6NDQ6YTU6MTY6YTA6Y2Q6MjE6ZjE6OTk6ZDQ6ZWM6ZWE6Y2I6N2M6MTg6CisgICAgICAgICAgICAgICAgICAgIDU4OjA4Ojk0OmE1OmVjOjliOmM1OjhiOmRmOjFhOjFlOjk5OjM4Ojk5Ojg3OgorICAgICAgICAgICAgICAgICAgICAxZTo3YjpjMDo4ZDozOTpkZjozODo1ZDo3MDo3ODowNzpkMzo5ZTpkOTo5MzoKKyAgICAgICAgICAgICAgICAgICAgZTg6Yjk6NzI6NTE6YzU6Y2U6YTM6MzA6NTI6YTk6ZjI6ZTc6NDA6NzA6MTQ6CisgICAgICAgICAgICAgICAgICAgIGNiOjQ0OmEyOjcyOjBiOmMyOmU1OjQwOmY5OjNlOmU1OmE2OjBlOmIzOmY5OgorICAgICAgICAgICAgICAgICAgICBlYzo0YTo2MzpjMDpiODoyOTowMDo3NDo5Yzo1NzozYjphODphNTowNDo5MDoKKyAgICAgICAgICAgICAgICAgICAgNzE6ZjE6YmQ6ODM6ZDk6M2Y6ZDY6YTU6ZTI6M2M6MmE6OGY6ZWY6Mjc6NjA6CisgICAgICAgICAgICAgICAgICAgIGMzOmM2OjlmOmNiOmJhOmVjOjYwOjdkOmI3OmU2Ojg0OjMyOmJlOjRmOmZiOgorICAgICAgICAgICAgICAgICAgICA1ODoyNjoyMjowMzo1YjpkNDpiNDpkNTpmYjpmNTplMzo5NjoyZTo3MDpjMDoKKyAgICAgICAgICAgICAgICAgICAgZTQ6MmU6YmQ6ZmM6MmU6ZWU6ZTI6NDE6NTU6YzA6MzQ6MmU6N2Q6MjQ6NzI6CisgICAgICAgICAgICAgICAgICAgIDY5OmNiOjQ3OmIxOjE0OjQwOjgzOjdkOjY3OmY0Ojg2OmY2OjMxOmFiOmYxOgorICAgICAgICAgICAgICAgICAgICA3OTphNDpiMjpiNToyZToxMjpmOTo4NDoxNzpmMDo2Mjo2ZjoyNzozZToxMzoKKyAgICAgICAgICAgICAgICAgICAgNTg6YjE6NTQ6MGQ6MjE6OWE6NzM6Mzc6YTE6MzA6Y2Y6NmY6OTI6ZGM6ZjY6CisgICAgICAgICAgICAgICAgICAgIGU5OmZjOmFjOmRiOjJlOjI4OmQxOjdlOjAyOjRiOjIzOmEwOjE1OmYyOjM4OgorICAgICAgICAgICAgICAgICAgICA2NTo2NDowOTplYTowYzo2ZTo4ZToxYjoxNzphMDo3MTpjODpiMzo5YjpjOToKKyAgICAgICAgICAgICAgICAgICAgYWI6ZTk6YzM6ZjI6Y2Y6ODc6OTY6OGY6ODA6MDI6MzI6OWU6OTk6NTg6NmY6CisgICAgICAgICAgICAgICAgICAgIGEyOmQ1CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czoKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBrZXlpZDpCNDo1QTpFNDpBNTpCMzpERTpEMjo1MjpGNjpCOTpENTpBNjo5NTowRjpFQjozRTpCQzpDNzpGRDpGRgorICAgICAgICAgICAgICAgIERpck5hbWU6L0M9TkwvTz1Qb2xhclNTTC9DTj1Qb2xhclNTTCBUZXN0IENBCisgICAgICAgICAgICAgICAgc2VyaWFsOjAwCisKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgYjg6ZmQ6NTQ6ZDg6MDA6NTQ6OTA6OGI6MjU6YjA6Mjc6ZGQ6OTU6Y2Q6YTI6Zjc6ODQ6MDc6CisgICAgICAgIDFkOjg3Ojg5OjRhOmM0Ojc4OjExOmQ4OjA3OmI1OmQ3OjIyOjUwOjhlOjQ4OmViOjYyOjdhOgorICAgICAgICAzMjo4OTpiZTo2Mzo0Nzo1MzpmZjpiNjpiZTpmMToyZTo4Yzo1NDpjMDo5OTozZjphMDpiOToKKyAgICAgICAgMzc6MjM6NzI6NWY6MGQ6NDY6NTk6OGY6ZDg6NDc6Y2Q6OTc6NGM6OWY6MDc6MGM6MTI6NjI6CisgICAgICAgIDA5OjNhOjI0OmU0OjM2OmQ5OmU5OjJjOmRhOjM4OmQwOjczOjc1OjYxOmQ3OmMxOjZjOjI2OgorICAgICAgICA4Yjo5YjplMDpkNTpkYzo2NzplZDo4Yzo2YjozMzpkNzo3NDoyMjozYzo0YzpkYjpiNTo4ZDoKKyAgICAgICAgMmE6Y2U6MmM6MGQ6MDg6NTk6MDU6MDk6MDU6YTY6Mzk6OWY6YjM6Njc6MWI6ZTI6ODM6ZTU6CisgICAgICAgIGUxOjhmOjUzOmY2OjY3OjkzOmM3OmY5OjZmOjc2OjQ0OjU4OjEyOmU4OjNhOmQ0Ojk3OmU3OgorICAgICAgICBlOTpjMDozZTphODo3YTo3MjozZDo4Nzo1MzoxZjplNToyYzo4NDo4NDplNzo5YTo5ZTo3ZjoKKyAgICAgICAgNjY6ZDk6MWY6OWI6ZjU6MTM6NDg6YjA6NGQ6MTQ6ZDE6ZGU6YjI6MjQ6ZDk6Nzg6N2Q6ZjU6CisgICAgICAgIDM1OmNjOjU4OjE5OmQxOmQyOjk5OmVmOjRkOjczOmY4OjFmOjg5OmQ0OjVhOmQwOjUyOmNlOgorICAgICAgICAwOTpmNTpiMTo0Njo1MTo2YTowMDo4ZTozYjpjYzo2Zjo2MzowMTowMDo5OTplZDo5ZDphNjoKKyAgICAgICAgMDg6NjA6Y2Q6MzI6MTg6ZDA6NzM6ZTA6NTg6NzE6ZDk6ZTU6ZDI6NTM6ZDc6OGQ6ZDA6Y2E6CisgICAgICAgIGU5OjVkOjJhOjBhOjBkOjVkOjU1OmVjOjIxOjUwOjE3OjE2OmU2OjA2OjRhOmNkOjVlOmRlOgorICAgICAgICBmNzplMDplOTo1NAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEaHpDQ0FtK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVEV3TWpFeU1UUTBOREF3V2hjTk1qRXdNakV5TVRRME5EQXdXakE3TVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEdUQVhCZ05WQkFNVEVGQnZiR0Z5VTFOTUlGUmxjM1FnUTBFd2dnRWlNQTBHCitDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREEzemY4Rjd2Z2xwMC9odDZXTW4xRXBSYWd6U0h4CittZFRzNnN0OEdGZ0lsS1hzbThXTDN4b2VtVGlaaHg1N3dJMDUzemhkY0hnSDA1N1prK2k1Y2xIRnpxTXdVcW55Cis1MEJ3Rk10RW9uSUx3dVZBK1Q3bHBnNnorZXhLWThDNEtRQjBuRmM3cUtVRWtISHh2WVBaUDlhbDRqd3FqKzhuCitZTVBHbjh1NjdHQjl0K2FFTXI1UCsxZ21JZ05iMUxUVisvWGpsaTV3d09RdXZmd3U3dUpCVmNBMExuMGtjbW5MCitSN0VVUUlOOVovU0c5akdyOFhta3NyVXVFdm1FRi9CaWJ5YytFMWl4VkEwaG1uTTNvVERQYjVMYzl1bjhyTnN1CitLTkYrQWtzam9CWHlPR1ZrQ2VvTWJvNGJGNkJ4eUxPYnlhdnB3L0xQaDVhUGdBSXlucGxZYjZMVkFnTUJBQUdqCitnWlV3Z1pJd0RBWURWUjBUQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVdEZya3BiUGUwbEwydWRXbWxRL3JQcnpICisvZjh3WXdZRFZSMGpCRnd3V29BVXRGcmtwYlBlMGxMMnVkV21sUS9yUHJ6SC9mK2hQNlE5TURzeEN6QUpCZ05WCitCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERVpNQmNHQTFVRUF4TVFVRzlzWVhKVFUwd2dWR1Z6CitkQ0JEUVlJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUF1UDFVMkFCVWtJc2xzQ2ZkbGMyaTk0UUhIWWVKCitTc1I0RWRnSHRkY2lVSTVJNjJKNk1vbStZMGRULzdhKzhTNk1WTUNaUDZDNU55TnlYdzFHV1kvWVI4MlhUSjhICitEQkppQ1RvazVEYlo2U3phT05CemRXSFh3V3dtaTV2ZzFkeG43WXhyTTlkMElqeE0yN1dOS3M0c0RRaFpCUWtGCitwam1mczJjYjRvUGw0WTlUOW1lVHgvbHZka1JZRXVnNjFKZm42Y0ErcUhweVBZZFRIK1VzaElUbm1wNS9adGtmCittL1VUU0xCTkZOSGVzaVRaZUgzMU5jeFlHZEhTbWU5TmMvZ2ZpZFJhMEZMT0NmV3hSbEZxQUk0N3pHOWpBUUNaCis3WjJtQ0dETk1oalFjK0JZY2RubDBsUFhqZERLNlYwcUNnMWRWZXdoVUJjVzVnWkt6VjdlOStEcFZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmU5OWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EuY3J0CkBAIC0wLDAgKzEsMjQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRUFUQ0NBNGVnQXdJQkFnSUJEakFLQmdncWhrak9QUVFEQWpBK01Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hIREFhQmdOVkJBTVRFMUJ2YkdGeWMzTnNJRlJsYzNRZ1JVTWdRMEV3SGhjTgorTVRNd09USTBNVFUxTlRFMFdoY05Nak13T1RJeU1UVTFOVEUwV2pCSU1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hKakFrQmdOVkJBTVRIVkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFTkJNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQW8xT2M4bnI2Zk1UcQordm93VitDcEM1NWk1QlpHRkdjNTBFYjRSTEJTUlRIMWU3SmVwZEZqQVZiQnR5UVJKU2lZMWphMHRnTFFEREtaUgord2ZFSStiNGF6c2U0NjBJblBIdjdDMVROMHVwWGx4dWo2bTlCMUlsUCtzQmFNN1dCQzZkVmZQTytqVk1JeGdrRgorQ2FCQ0xoaGRLMUZqZjhIamtUL1BrY3RXbmhvOE5Ud2l2YzkrbnFSWmpYZS9lSWNxbTVId2pERGh1K2d6K28wZworVno5TWZaTmkxSnlDck95TlpjeStjcjJRZU5uTlZHbkZxOHhUeHR1NmRMdW5ocG1MRmoybW0wVmp3YTdZcGo1cQorQWpwcVRNdER2cWJSdVRveW95emFqaE1OY0NBZjdnd3pJdXBKSkZWZGpkdGdZQWNRd3ppa3dGNUhvSVRKenpKMgorcWd4RjdDbXZHWk5iN0c5OW1MZExkaHRjbEgzd0FRS0hZd0VHSm83WEt5TkV1SFBRZ0IrZTBjZzFTRDFIcWxBTQordUNmR0dUV1E2bWU3QmphbjN0ME56b1RkRHE2SXBLVGVzYmFZKy85ZTJ4bjhEQ3JoQktMWFFNWkZEWnFVb0xZQQora0dQT0VHZ3ZsUG5JSVhBYXdvdXhDYU5ZRWg1VXc4NzFZTVNQVDI4ckxkRnI0OWR3WU90RGc5Zm9BOGhESVcyUAorZDZLWGJyWnRlZXN2QTFuWXpFT3MrM0FqcmJUNzlNZDJXOEJ6OWJxQlZObE5PRVNTcW00a2lDSkZtc2xtLzZicgorTnAwTVNRZCtvMjJQUTR4UnRtUDZVc1RmVTB1ZWlNcFljOFRZWWhNYmZuZkZ5bzRtNzA3ZWJjZmxQYkJFTjJkZwordXBkUTY2Y3ZmQ0pCMFFKdDl1cGFmWTBscGRWMXFVa0NBd0VBQWFPQm9EQ0JuVEFkQmdOVkhRNEVGZ1FVT0hmWQorYTNlY0tIZUNpMDdZRzZrZTk1UVd0dzR3YmdZRFZSMGpCR2N3WllBVW5XMGdKRWtCUHl2TGVMVVp2SDRreWR2NworTm55aFFxUkFNRDR4Q3pBSkJnTlZCQVlUQWs1TU1SRXdEd1lEVlFRS0V3aFFiMnhoY2xOVFRERWNNQm9HQTFVRQorQXhNVFVHOXNZWEp6YzJ3Z1ZHVnpkQ0JGUXlCRFFZSUpBTUZENG41aVE4em9NQXdHQTFVZEV3UUZNQU1CQWY4dworQ2dZSUtvWkl6ajBFQXdJRGFBQXdaUUl4QVB5RSt1K2VQN2dSclNGalFpY21wWWc4amlGVUNZRW93V1kyenVPRworaTFIWFl3bXBESGZhc1Ezck5TdWYvZ0h2andJd2JTU2p1bURrK3VZTmNpL0tNRUxEc0QwTUZIeFpoaEJjOUhwOQorQWY1Y05SOEtoemVnem5MNmFtUk9iR0dLbVgxRgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2Eua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2Eua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDYyZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYS5rZXkKQEAgLTAsMCArMSw1MSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJSktRSUJBQUtDQWdFQW8xT2M4bnI2Zk1UcXZvd1YrQ3BDNTVpNUJaR0ZHYzUwRWI0UkxCU1JUSDFlN0plcAorZEZqQVZiQnR5UVJKU2lZMWphMHRnTFFEREtaUndmRUkrYjRhenNlNDYwSW5QSHY3QzFUTjB1cFhseHVqNm05QgorMUlsUCtzQmFNN1dCQzZkVmZQTytqVk1JeGdrRkNhQkNMaGhkSzFGamY4SGprVC9Qa2N0V25obzhOVHdpdmM5KworbnFSWmpYZS9lSWNxbTVId2pERGh1K2d6K28wZ1Z6OU1mWk5pMUp5Q3JPeU5aY3krY3IyUWVObk5WR25GcTh4VAoreHR1NmRMdW5ocG1MRmoybW0wVmp3YTdZcGo1cUFqcHFUTXREdnFiUnVUb3lveXphamhNTmNDQWY3Z3d6SXVwSgorSkZWZGpkdGdZQWNRd3ppa3dGNUhvSVRKenpKMnFneEY3Q212R1pOYjdHOTltTGRMZGh0Y2xIM3dBUUtIWXdFRworSm83WEt5TkV1SFBRZ0IrZTBjZzFTRDFIcWxBTXVDZkdHVFdRNm1lN0JqYW4zdDBOem9UZERxNklwS1Rlc2JhWQorKy85ZTJ4bjhEQ3JoQktMWFFNWkZEWnFVb0xZQWtHUE9FR2d2bFBuSUlYQWF3b3V4Q2FOWUVoNVV3ODcxWU1TUAorVDI4ckxkRnI0OWR3WU90RGc5Zm9BOGhESVcyUGQ2S1hiclp0ZWVzdkExbll6RU9zKzNBanJiVDc5TWQyVzhCegorOWJxQlZObE5PRVNTcW00a2lDSkZtc2xtLzZick5wME1TUWQrbzIyUFE0eFJ0bVA2VXNUZlUwdWVpTXBZYzhUWQorWWhNYmZuZkZ5bzRtNzA3ZWJjZmxQYkJFTjJkZ3VwZFE2NmN2ZkNKQjBRSnQ5dXBhZlkwbHBkVjFxVWtDQXdFQQorQVFLQ0FnRUFneXV4enVTSnJBOFNZTHB0SW9QK2U3WWlVcUNPZnkxWjlxM3BhTGVVQWhSbVdpbHJ4SzlLdVFjYgorQk9oV1hDRFh2ZE1weWtYSWRTNVdWeVpZQ1F0dXlFZUs4aGFOSUh5S0lJMlpTQjFBLzNFSmNreXNXQjkzaG5GWgorZ0ZIek5BTE9HNjQraVkzNGErUHVrYzZObUN1bEdCY2pqQVdSMktPZzl2eVJzaVJyMm0xVGtaSEZwVzlsSk1MWgorbWRra2xSRGVXaGtnRWlQcEt2NlF6TUZma3pMOW1yZWdFM1ZnRWpRZmVGTmFabFMySFdkZGhCNXo0aSt5VGZJdworRjEvVlhxVmcyeThkY1A0VnJWNVBFVDhOQkdQeklua2owbGsxTmV2ZUUyQ2wyRGxVcTRCTXlXdlVGa1FoQUw4QgorWmQ0R3ptTDluaW1aNlFiOGRWV1lDL1lUYWhvSUwzK1lVQ1pBR0llY3pBbzZkcnloZVVzajF3M3BTRXJPSVk5VQorZEdTeXE5STlYWVhxY1JOZXlma29OVk9aN3VncWs0RHZNeXY2NHR0K05JSXk5U1pHY0h1V28zR0wwRmRLaVI1YworWGJuMTh0RCtXd3JrYTBPMW50dnpYMXFrd0pjcHZ1NSt4TlZib2JrTTREaWx1b2l2T3ErMjlDR0FOdEcyRXQ3UworbTZLQ1V3U0VsS3N2cEk0ZE5XNG5XY2JkajhpOGdjTGlLanFSdTluMkJka3ZBSGFNaFZibDl4bnA5c3ZlR0xjUgoraUZnNm1Ec0NRdVZFSDhiR1BJTUlhdi8zVlVqeTF3Yk1BQTU0UHNxS00wYVRBK0RIbmxlWGNoVkFoTW05ZUhEOAoreXJWOGViOC9iY0NiV3ZoRERpODBrdVJJYURTc1lUd01XcHpqejZNVTl2OE91RkdaWmFFQ2dnRUJBTkw0NFZRNworN3RvazVYZUpKZ25SVi9QR05sSEtrc2N0UE1qK3llOGlTRHJSdkhWbEhIcXZaMjZNWkpQZ1h3SENPL05WSVd2NgoraGZDWWxmbVAvNjNmWjFXSnFEVUR4SE9nakliUHRPSUtUc0ppM1BiYk9EVnJzeWNaM3k1T2pwYmpYS0c5N2NLTQorNlJYNnpibmp0R0tQZmJVSngra3VBT3hta0ZMaUxKR05sTHF6YUphZmtnV2pVQVYvblQ2UW0yNjYzbXNmWi9NZAorN3VERkROT1RiUFM3NGtpNUpUamxqOHhteEFQY254ak5KMmlqRFE3ZWlDQW02Sm96Sll5OVBZaXhtdVNjRkYyeAorRDJONkU5L0pXVWNZZXp5YlVnT0x6Ynd6dkprQ1JKb0JYajA5RjhjYjNtNlpRMDRuMnBlUWcvMGJuNkhVVm92Rgorb3BaSlc5dVpUUm1GYWUwQ2dnRUJBTVl2ZUJuWVJYeVdxRU5mOFBaOHhscWlPdkpCQVJhSVlRT1B5MXQ0TGVPdgordDRzc3ZrU0pQRUcwdFAySVQ2cHRlY05OOUNWUmRQSm43dHNndmpnUHZxZ3ltTGxhdzhEaGVGUzNFSzRzRmQwYQorU0l3clljWFk4ZnlBRnVHYmJjeDJKVGZteHdMR1lYZVdHNE1Ea2NZY3RVaFhpT2JNYjBZSTJlWGxUdTRKWHFKSAorcTFteWw3cGkzZ3V4N0pjRmpyMEFOaDltRE9ZWHpMNTJXcVpPYmFWVVVObjhwL2FOV3BhdGk5WjlQTDJ1Sk54WQorbXlaYlRxV0dUcFo4WGxablpZZzhiSFZKR29jNy9zZVNERW5TcmVHUXRYbDZNcm5zTjliRFU2VWh1ZkkwaUFpSAorZkNlRUxweGpCcHZaaTJUellubHRYKzIxZjNvVVh1clhUNGVZUEptNllVMENnZ0VCQUlySlVTcGh0dkpvdlUvUwordUdSVEJFSUl6ZWttazBKV0h4dTJpVTg0UlQzMGhiN1F3bGh2RldMakZyTTFNaXJ0QlJWQmxwZjdHYXU2SlVjaworbExWa053MU5Yb3RwckEzSXUwbGdVSVUyOUxMcDZLUzRlQlNrZ2htaDZuRURHc2htVDZUVFZocmJLZWJjdEFPcQorcVJzQmZGZmhWRkt3Z2NrQ2U4VWFwdWtsczRiU3lXWDFHVkYrS3dGQy8wV09TY0loU25vOEVkMGNmdTM4azBDSQorUm5BRlBZcEx5aEhRNnJVemtaVmN5SWkvUlVLUHFPSjBRQ2F1a2V3RzQ1ZmZVaUNmZmQ4UVVsR0VUalJKdGROTgorR044dFdyejNESS9xbzNCQXRMd1BndU94TExhcWZ2N3I5WHJhZGkxdkNGMFdvODJaSTMySk8xbjlyTVNqQTd2RgorOExOdVVjMENnZ0VBZWRCUGg4TXc0cVZQZ3lvRFY5M1ZwWHUxczVWVTc5NmZrcXJkbWJsQ3E0SWoxTDJKcldLVQorME9ZYm9RSVp4VzFJdkV5NzFmdzlYNG1XZk1XaFpaLzMxalpUUFFxVzY0VXFpeGVDZnl2RnZJTWRPRnFwM0F1Kworb1M2eDRiWEJSVDBSSDAwUDRackI2ZGt2eTlWejBrdHUrYW9rRVloeWxKOTRIeUJVNVdhSTdrSVRCaTBKcVp4LworVXJ6bjZPT1htbi80eEUvYmVjb0RKTVptYlhZaldzMTZiS0lwTXhncktCWS9yM1NHMHllb3JHOGgzZStkWll3cAorM2NGUDB0ZjJ4a2d0ZWVHWEZxdy9xN2NQS29qK0szamdzbXZ6cGVlVllzSG9OY1dISDJJK2dzK1Q5azMrd0V6MQora1BHa0JrYTZybHdWN0d2MGtMcllwSXYyN0NjY2lIalF1UUtDQVFBY3RRTTNEVEMzcHpFd3dQZVlNblNYTDkvcwordURxYmozTVY2SDhmeFBJR0pXZnBEc3Q3bldYaFQ4MXVLRzZmWW1lZzVaNm5KWGZQMGRVRjVUcFcxems2Vkd3bgordC9jaDZVN0hZcHNlWnN5d2RaUFZJby91cGdrb3dYU2w2bWZxeXh6R25nWHVPUmg0emhScGNuNEdUd3pIRzJUZQoreE5xTUViL2kvSVdudnRmdnlmaEVCZXdKY01yOU5wd3JnNjE1cENpWjh5M2NqdkpmL2dsMGNHWjVMSXVXQlFCNQorRjE2SnhGM21tMVhDdWtUWFpPOTB2ZzNZMUp4ZUIrWVl5RisxYVFMK0RndmhHWk5SckdyQlQvUXVYUXBpTUNNZgorVk05b1pWckk3Y1lWTm5QQkVvSFZjeVAyMU5RNUFXb0ZUYVNwTUppSFo0RkJpZTBCR082SWt6TWNHMjNyCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EyLmNydCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlNDRjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMi5jcnQKQEAgLTAsMCArMSwxOCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDNlRDQ0FkR2dBd0lCQWdJQkR6QU5CZ2txaGtpRzl3MEJBUXNGQURBN01Rc3dDUVlEVlFRR0V3Sk9UREVSCitNQThHQTFVRUNoTUlVRzlzWVhKVFUwd3hHVEFYQmdOVkJBTVRFRkJ2YkdGeVUxTk1JRlJsYzNRZ1EwRXdIaGNOCitNVE13T1RJME1UWXdPRFF5V2hjTk1qTXdPVEl5TVRZd09EUXlXakJMTVFzd0NRWURWUVFHRXdKT1RERVJNQThHCitBMVVFQ2hNSVVHOXNZWEpUVTB3eEtUQW5CZ05WQkFNVElGQnZiR0Z5VTFOTUlGUmxjM1FnU1c1MFpYSnRaV1JwCitZWFJsSUVWRElFTkJNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThPaWgzZlg1U0xlTjFkbUZuY1FsCitXTXc5K1k2c1hibGhsclhCeGhYeGp3ZHdwQ0hFTm4rZm9VVmRycVlWWWE3U3V2M1FWZU82bkoxOUgzUU5peFc4CitpazFQK2h4c2JhcThidGE3OHZBeUhtQzRFbVhRTGcxdzdveGI5UTgycVgxWW80R1ZNSUdTTUIwR0ExVWREZ1FXCitCQlFQaWIxalFldkxYaGNvLzJnd1BjR0kwSnhZT1RCakJnTlZIU01FWERCYWdCUzBXdVNsczk3U1V2YTUxYWFWCitEK3Mrdk1mOS82RS9wRDB3T3pFTE1Ba0dBMVVFQmhNQ1Rrd3hFVEFQQmdOVkJBb1RDRkJ2YkdGeVUxTk1NUmt3CitGd1lEVlFRREV4QlFiMnhoY2xOVFRDQlVaWE4wSUVOQmdnRUFNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJCitodmNOQVFFTEJRQURnZ0VCQUFqZWFUVWFDQmlYVDFDWUxWcjZVRlNlUk5aQnJEUG5qNlB3cVVRVHZnQjVJNW42Cit5WHFvRTRSWURhRUwwTGcyNGp1RnhJMjZpdEJ1eXB0bzZ2c2NnR3E3N2NmclAvYXZTZHhVK3hlWjRiQ1d2aDNNCitkZGo5bG1rbzJVOEk4R2hCY0hwU3VJaVR2Z0tEQjhlS2tqZXEzQXNMR2NoSER2aXA4cEIzSWhjTmZMN1c5NFpmCis3L2xIOVZRaUUzL3B4N2FtRDMyY2lkb1B2V0xBOVUzZjFGc1BtSkVTVXowd3dOZklOcERqbVByOGRHYmtDTitNCitDRmh4bzZzQ2ZLOEtMWUc0bllYOEZ3eFZSODZrcFNyTzllODRBWDBZWWJkenhwcmJjMlhPYWViSjgrQkRtenV0CitBUmtEN0RUWHJvZE4xd1Y3alFKa3JVdUV3UGo5Umh2aytNRlJrYXc9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTIua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EyLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY1YjdhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EyLmtleQpAQCAtMCwwICsxLDYgQEAKKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUlHa0FnRUJCREF0eE9IVVY0YmUxTWRIMWZyQkh6eElUQ3lVU3hyVmpKTjhRVHZUVms1NThrYTBhM3poZDRQYgorZWtXdDd3QlBYUWVnQndZRks0RUVBQ0toWkFOaUFBVHc2S0hkOWZsSXQ0M1YyWVdkeENWWXpEMzVqcXhkdVdHVwordGNIR0ZmR1BCM0NrSWNRMmY1K2hSVjJ1cGhWaHJ0SzYvZEJWNDdxY25YMGZkQTJMRmJ5S1RVLzZIR3h0cXJ4dQorMXJ2eThESWVZTGdTWmRBdURYRHVqRnYxRHphcGZWZz0KKy0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9kYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMy5jcnQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTMuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzI0YjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTMuY3J0CkBAIC0wLDAgKzEsMTIgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQnREQ0NBVHFnQXdJQkFnSUJUVEFLQmdncWhrak9QUVFEQWpCTE1Rc3dDUVlEVlFRR0V3Sk9UREVSTUE4RworQTFVRUNoTUlVRzlzWVhKVFUwd3hLVEFuQmdOVkJBTVRJRkJ2YkdGeVUxTk1JRlJsYzNRZ1NXNTBaWEp0WldScAorWVhSbElFVkRJRU5CTUI0WERURTFNRGt3TVRFME1EZzBNMW9YRFRJMU1EZ3lPVEUwTURnME0xb3dTakVMTUFrRworQTFVRUJoTUNWVXN4RVRBUEJnTlZCQW9UQ0cxaVpXUWdWRXhUTVNnd0pnWURWUVFERXg5dFltVmtJRlJNVXlCVQorWlhOMElHbHVkR1Z5YldWa2FXRjBaU0JEUVNBek1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRQorNzMyZldITE5QTVBzUDFVMWliWHZiNTVlcmxFVk1scFhCR3NqK0tZd1ZxVTFYQ21XOVo5aGhQN1gvNWpzL0RYOQorMkovdXRvSHlqVXRWcFFPemRUcmJzYU1RTUE0d0RBWURWUjBUQkFVd0F3RUIvekFLQmdncWhrak9QUVFEQWdObworQURCbEFqQUpSeGJHUmFzM05CbWs5TW5HV1hnN1BUMXhuUkVMSFJXV0l2ZkxkVlF0MDZsMS94RmczWnVQZFFkdAorUWg3Q0s4MENNUUQ3d2ExbzFhOHF5REtCZkxONjM2dUttS0dnYTBFK3ZZWEJlRkN5OW9BUkJhbmdHQ0IwQjJ2dAorcHo1OTBKdkdXZk09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvZGF0YV9maWxlcy90ZXN0LWludC1jYTMua2V5IGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EzLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmNjNzExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL2RhdGFfZmlsZXMvdGVzdC1pbnQtY2EzLmtleQpAQCAtMCwwICsxLDggQEAKKy0tLS0tQkVHSU4gRUMgUEFSQU1FVEVSUy0tLS0tCitCZ2dxaGtqT1BRTUJCdz09CistLS0tLUVORCBFQyBQQVJBTUVURVJTLS0tLS0KKy0tLS0tQkVHSU4gRUMgUFJJVkFURSBLRVktLS0tLQorTUhjQ0FRRUVJQzl6VHQ4amdqQmxicStxQ3NHajZ1Y2xhS0xZQnF4WVNtVWl1QmRNMUtHOW9Bb0dDQ3FHU000OQorQXdFSG9VUURRZ0FFNzMyZldITE5QTVBzUDFVMWliWHZiNTVlcmxFVk1scFhCR3NqK0tZd1ZxVTFYQ21XOVo5aAoraFA3WC81anMvRFg5MkovdXRvSHlqVXRWcFFPemRUcmJzUT09CistLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9hbGwuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9hbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmIzMzk2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2FsbC5zaApAQCAtMCwwICsxLDUwNiBAQAorIyEvYmluL3NoCisKKyMgYWxsLnNoCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYsIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjIFB1cnBvc2UKKyMKKyMgVG8gcnVuIGFsbCB0ZXN0cyBwb3NzaWJsZSBvciBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLgorIworIyBXYXJuaW5nOiB0aGUgdGVzdCBpcyBkZXN0cnVjdGl2ZS4gSXQgaW5jbHVkZXMgdmFyaW91cyBidWlsZCBtb2RlcyBhbmQKKyMgY29uZmlndXJhdGlvbnMsIGFuZCBjYW4gYW5kIHdpbGwgYXJiaXRyYXJpbHkgY2hhbmdlIHRoZSBjdXJyZW50IENNYWtlCisjIGNvbmZpZ3VyYXRpb24uIEFmdGVyIHRoaXMgc2NyaXB0IGhhcyBiZWVuIHJ1biwgdGhlIENNYWtlIGNhY2hlIHdpbGwgYmUgbG9zdAorIyBhbmQgQ01ha2Ugd2lsbCBubyBsb25nZXIgYmUgaW5pdGlhbGlzZWQuCisjCisjIFRoZSBzY3JpcHQgYXNzdW1lcyB0aGUgcHJlc2VuY2Ugb2YgZ2NjIGFuZCBjbGFuZyAocmVjZW50IGVub3VnaCBmb3IgdXNpbmcKKyMgQVNhbiB3aXRoIGdjYyBhbmQgTWVtU2FuIHdpdGggY2xhbmcsIG9yIHZhbGdyaW5kKSBhcmUgYXZhaWxhYmxlLCBhcyB3ZWxsIGFzCisjIGNtYWtlIGFuZCBhICJnb29kIiBmaW5kLgorCisjIEFib3J0IG9uIGVycm9ycyAoYW5kIHVuaW5pdGlhbGlzZWQgdmFyaWFibGVzKQorc2V0IC1ldQorCitpZiBbIC1kIGxpYnJhcnkgLWEgLWQgaW5jbHVkZSAtYSAtZCB0ZXN0cyBdOyB0aGVuIDo7IGVsc2UKKyAgICBlcnJfbXNnICJNdXN0IGJlIHJ1biBmcm9tIG1iZWQgVExTIHJvb3QiCisgICAgZXhpdCAxCitmaQorCitDT05GSUdfSD0naW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oJworQ09ORklHX0JBSz0iJENPTkZJR19ILmJhayIKKworTUVNT1JZPTAKK0ZPUkNFPTAKK1JFTEVBU0U9MAorCisjIERlZmF1bHQgY29tbWFuZHMsIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGVudmlyb25tZW50Cis6ICR7T1BFTlNTTDo9Im9wZW5zc2wifQorOiAke09QRU5TU0xfTEVHQUNZOj0iJE9QRU5TU0wifQorOiAke0dOVVRMU19DTEk6PSJnbnV0bHMtY2xpIn0KKzogJHtHTlVUTFNfU0VSVjo9ImdudXRscy1zZXJ2In0KKzogJHtHTlVUTFNfTEVHQUNZX0NMSTo9IiRHTlVUTFNfQ0xJIn0KKzogJHtHTlVUTFNfTEVHQUNZX1NFUlY6PSIkR05VVExTX1NFUlYifQorOiAke09VVF9PRl9TT1VSQ0VfRElSOj0uL21iZWR0bHNfb3V0X29mX3NvdXJjZV9idWlsZH0KKwordXNhZ2UoKQoreworICAgIHByaW50ZiAiVXNhZ2U6ICQwXG4iCisgICAgcHJpbnRmICIgIC1ofC0taGVscFx0XHRQcmludCB0aGlzIGhlbHAuXG4iCisgICAgcHJpbnRmICIgIC1tfC0tbWVtb3J5XHRcdEFkZGl0aW9uYWwgb3B0aW9uYWwgbWVtb3J5IHRlc3RzLlxuIgorICAgIHByaW50ZiAiICAtZnwtLWZvcmNlXHRcdEZvcmNlIHRoZSB0ZXN0cyB0byBvdmVyd3JpdGUgYW55IG1vZGlmaWVkIGZpbGVzLlxuIgorICAgIHByaW50ZiAiICAtc3wtLXNlZWRcdFx0SW50ZWdlciBzZWVkIHZhbHVlIHRvIHVzZSBmb3IgdGhpcyB0ZXN0IHJ1bi5cbiIKKyAgICBwcmludGYgIiAgLXJ8LS1yZWxlYXNlLXRlc3RcdFx0UnVuIHRoaXMgc2NyaXB0IGluIHJlbGVhc2UgbW9kZS4gVGhpcyBmaXhlcyB0aGUgc2VlZCB2YWx1ZSB0byAxLlxuIgorICAgIHByaW50ZiAiICAgICAtLW91dC1vZi1zb3VyY2UtZGlyPTxwYXRoPlx0XHREaXJlY3RvcnkgdXNlZCBmb3IgQ01ha2Ugb3V0LW9mLXNvdXJjZSBidWlsZCB0ZXN0cy4iCisgICAgcHJpbnRmICIgICAgIC0tb3BlbnNzbD08T3BlblNTTF9wYXRoPlx0XHRQYXRoIHRvIE9wZW5TU0wgZXhlY3V0YWJsZSB0byB1c2UgZm9yIG1vc3QgdGVzdHMuXG4iCisgICAgcHJpbnRmICIgICAgIC0tb3BlbnNzbC1sZWdhY3k9PE9wZW5TU0xfcGF0aD5cdFx0UGF0aCB0byBPcGVuU1NMIGV4ZWN1dGFibGUgdG8gdXNlIGZvciBsZWdhY3kgdGVzdHMgZS5nLiBTU0x2My5cbiIKKyAgICBwcmludGYgIiAgICAgLS1nbnV0bHMtY2xpPTxHbnVUTFNfY2xpX3BhdGg+XHRcdFBhdGggdG8gR251VExTIGNsaWVudCBleGVjdXRhYmxlIHRvIHVzZSBmb3IgbW9zdCB0ZXN0cy5cbiIKKyAgICBwcmludGYgIiAgICAgLS1nbnV0bHMtc2Vydj08R251VExTX3NlcnZfcGF0aD5cdFx0UGF0aCB0byBHbnVUTFMgc2VydmVyIGV4ZWN1dGFibGUgdG8gdXNlIGZvciBtb3N0IHRlc3RzLlxuIgorICAgIHByaW50ZiAiICAgICAtLWdudXRscy1sZWdhY3ktY2xpPTxHbnVUTFNfY2xpX3BhdGg+XHRcdFBhdGggdG8gR251VExTIGNsaWVudCBleGVjdXRhYmxlIHRvIHVzZSBmb3IgbGVnYWN5IHRlc3RzLlxuIgorICAgIHByaW50ZiAiICAgICAtLWdudXRscy1sZWdhY3ktc2Vydj08R251VExTX3NlcnZfcGF0aD5cdFx0UGF0aCB0byBHbnVUTFMgc2VydmVyIGV4ZWN1dGFibGUgdG8gdXNlIGZvciBsZWdhY3kgdGVzdHMuXG4iCit9CisKKyMgcmVtb3ZlIGJ1aWx0IGZpbGVzIGFzIHdlbGwgYXMgdGhlIGNtYWtlIGNhY2hlL2NvbmZpZworY2xlYW51cCgpCit7CisgICAgbWFrZSBjbGVhbgorCisgICAgZmluZCAuIC1uYW1lIHlvdHRhIC1wcnVuZSAtbyAtaW5hbWUgJypjbWFrZSonIC1ub3QgLW5hbWUgQ01ha2VMaXN0cy50eHQgLWV4ZWMgcm0gLXJmIHt9IFwrCisgICAgcm0gLWYgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL21iZWR0bHMvTWFrZWZpbGUgcHJvZ3JhbXMvKi9NYWtlZmlsZQorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIE1ha2VmaWxlIGxpYnJhcnkvTWFrZWZpbGUgcHJvZ3JhbXMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUKKyAgICBnaXQgY2hlY2tvdXQgLS0gTWFrZWZpbGUgbGlicmFyeS9NYWtlZmlsZSBwcm9ncmFtcy9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZQorCisgICAgaWYgWyAtZiAiJENPTkZJR19CQUsiIF07IHRoZW4KKyAgICAgICAgbXYgIiRDT05GSUdfQkFLIiAiJENPTkZJR19IIgorICAgIGZpCit9CisKK3RyYXAgY2xlYW51cCBJTlQgVEVSTSBIVVAKKworbXNnKCkKK3sKKyAgICBlY2hvICIiCisgICAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgorICAgIGVjaG8gIiogJDEgIgorICAgIHByaW50ZiAiKiAiOyBkYXRlCisgICAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgorfQorCitlcnJfbXNnKCkKK3sKKyAgICBlY2hvICIkMSIgPiYyCit9CisKK2NoZWNrX3Rvb2xzKCkKK3sKKyAgICBmb3IgVE9PTCBpbiAiJEAiOyBkbworICAgICAgICBpZiAhIGBoYXNoICIkVE9PTCIgPi9kZXYvbnVsbCAyPiYxYDsgdGhlbgorICAgICAgICAgICAgZXJyX21zZyAiJFRPT0wgbm90IGZvdW5kISIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKK30KKword2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAtLW1lbW9yeXwtbSopCisgICAgICAgICAgICBNRU1PUlk9JHsxIy1tfQorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1mb3JjZXwtZikKKyAgICAgICAgICAgIEZPUkNFPTEKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tc2VlZHwtcykKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBTRUVEPSIkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tcmVsZWFzZS10ZXN0fC1yKQorICAgICAgICAgICAgUkVMRUFTRT0xCisgICAgICAgICAgICA7OworICAgICAgICAtLW91dC1vZi1zb3VyY2UtZGlyKQorICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgIE9VVF9PRl9TT1VSQ0VfRElSPSIkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tb3BlbnNzbCkKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBPUEVOU1NMPSIkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tb3BlbnNzbC1sZWdhY3kpCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgT1BFTlNTTF9MRUdBQ1k9IiQxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1nbnV0bHMtY2xpKQorICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgIEdOVVRMU19DTEk9IiQxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgLS1nbnV0bHMtc2VydikKKyAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICBHTlVUTFNfU0VSVj0iJDEiCisgICAgICAgICAgICA7OworICAgICAgICAtLWdudXRscy1sZWdhY3ktY2xpKQorICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgIEdOVVRMU19MRUdBQ1lfQ0xJPSIkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC0tZ251dGxzLWxlZ2FjeS1zZXJ2KQorICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgIEdOVVRMU19MRUdBQ1lfU0VSVj0iJDEiCisgICAgICAgICAgICA7OworICAgICAgICAtLWhlbHB8LWh8KikKKyAgICAgICAgICAgIHVzYWdlCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKK2lmIFsgJEZPUkNFIC1lcSAxIF07IHRoZW4KKyAgICBybSAtcmYgeW90dGEvbW9kdWxlICIkT1VUX09GX1NPVVJDRV9ESVIiCisgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1xICRDT05GSUdfSAorICAgIGNsZWFudXAKK2Vsc2UKKworICAgIGlmIFsgLWQgeW90dGEvbW9kdWxlIF07IHRoZW4KKyAgICAgICAgZXJyX21zZyAiV2FybmluZyAtIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHlvdHRhIG1vZHVsZSBpbiB0aGUgZGlyZWN0b3J5ICd5b3R0YS9tb2R1bGUnIgorICAgICAgICBlY2hvICJZb3UgY2FuIGVpdGhlciBkZWxldGUgeW91ciB3b3JrIGFuZCByZXRyeSwgb3IgZm9yY2UgdGhlIHRlc3QgdG8gb3ZlcndyaXRlIHRoZSIKKyAgICAgICAgZWNobyAidGVzdCBieSByZXJ1bm5pbmcgdGhlIHNjcmlwdCBhczogJDAgLS1mb3JjZSIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGlmIFsgLWQgIiRPVVRfT0ZfU09VUkNFX0RJUiIgXTsgdGhlbgorICAgICAgICBlY2hvICJXYXJuaW5nIC0gdGhlcmUgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IGF0ICckT1VUX09GX1NPVVJDRV9ESVInIiA+JjIKKyAgICAgICAgZWNobyAiWW91IGNhbiBlaXRoZXIgZGVsZXRlIHRoaXMgZGlyZWN0b3J5IG1hbnVhbGx5LCBvciBmb3JjZSB0aGUgdGVzdCBieSByZXJ1bm5pbmciCisgICAgICAgIGVjaG8gInRoZSBzY3JpcHQgYXM6ICQwIC0tZm9yY2UgLS1vdXQtb2Ytc291cmNlLWRpciAkT1VUX09GX1NPVVJDRV9ESVIiCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiAhIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oOyB0aGVuCisgICAgICAgIGVjaG8gJD8KKyAgICAgICAgZXJyX21zZyAiV2FybmluZyAtIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgJ2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcgaGFzIGJlZW4gZWRpdGVkLiAiCisgICAgICAgIGVjaG8gIllvdSBjYW4gZWl0aGVyIGRlbGV0ZSBvciBwcmVzZXJ2ZSB5b3VyIHdvcmssIG9yIGZvcmNlIHRoZSB0ZXN0IGJ5IHJlcnVubmluZyB0aGUiCisgICAgICAgIGVjaG8gInNjcmlwdCBhczogJDAgLS1mb3JjZSIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKK2lmIFsgJFJFTEVBU0UgLWVxIDEgXTsgdGhlbgorICAgICMgRml4IHRoZSBzZWVkIHZhbHVlIHRvIDEgdG8gZW5zdXJlIHRoYXQgdGhlIHRlc3RzIGFyZSBkZXRlcm1pbmlzdGljLgorICAgIFNFRUQ9MQorZmkKKworbXNnICJpbmZvOiAkMCBjb25maWd1cmF0aW9uIgorZWNobyAiTUVNT1JZOiAkTUVNT1JZIgorZWNobyAiRk9SQ0U6ICRGT1JDRSIKK2VjaG8gIlNFRUQ6ICR7U0VFRC0iVU5TRVQifSIKK2VjaG8gIk9QRU5TU0w6ICRPUEVOU1NMIgorZWNobyAiT1BFTlNTTF9MRUdBQ1k6ICRPUEVOU1NMX0xFR0FDWSIKK2VjaG8gIkdOVVRMU19DTEk6ICRHTlVUTFNfQ0xJIgorZWNobyAiR05VVExTX1NFUlY6ICRHTlVUTFNfU0VSViIKK2VjaG8gIkdOVVRMU19MRUdBQ1lfQ0xJOiAkR05VVExTX0xFR0FDWV9DTEkiCitlY2hvICJHTlVUTFNfTEVHQUNZX1NFUlY6ICRHTlVUTFNfTEVHQUNZX1NFUlYiCisKKyMgVG8gYXZvaWQgc2V0dGluZyBPcGVuU1NMIGFuZCBHbnVUTFMgZm9yIGVhY2ggY2FsbCB0byBjb21wYXQuc2ggYW5kIHNzbC1vcHQuc2gKKyMgd2UganVzdCBleHBvcnQgdGhlIHZhcmlhYmxlcyB0aGV5IHJlcXVpcmUKK2V4cG9ydCBPUEVOU1NMX0NNRD0iJE9QRU5TU0wiCitleHBvcnQgR05VVExTX0NMST0iJEdOVVRMU19DTEkiCitleHBvcnQgR05VVExTX1NFUlY9IiRHTlVUTFNfU0VSViIKKworIyBBdm9pZCBwYXNzaW5nIC0tc2VlZCBmbGFnIGluIGV2ZXJ5IGNhbGwgdG8gc3NsLW9wdC5zaAorWyAhIC16ICR7U0VFRCtzZXR9IF0gJiYgZXhwb3J0IFNFRUQKKworIyBNYWtlIHN1cmUgdGhlIHRvb2xzIHdlIG5lZWQgYXJlIGF2YWlsYWJsZS4KK2NoZWNrX3Rvb2xzICIkT1BFTlNTTCIgIiRPUEVOU1NMX0xFR0FDWSIgIiRHTlVUTFNfQ0xJIiAiJEdOVVRMU19TRVJWIiBcCisgICAgIiRHTlVUTFNfTEVHQUNZX0NMSSIgIiRHTlVUTFNfTEVHQUNZX1NFUlYiICJkb3h5Z2VuIiAiZG90IiBcCisgICAgImFybS1ub25lLWVhYmktZ2NjIiAiYXJtY2MiCisKKyMKKyMgVGVzdCBTdWl0ZXMgdG8gYmUgZXhlY3V0ZWQKKyMKKyMgVGhlIHRlc3Qgb3JkZXJpbmcgdHJpZXMgdG8gb3B0aW1pemUgZm9yIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6CisjIDEuIENhdGNoIHBvc3NpYmxlIHByb2JsZW1zIGVhcmx5LCBieSBydW5uaW5nIGZpcnN0IHRlc3RzIHRoYXQgcnVuIHF1aWNrbHkKKyMgICAgYW5kL29yIGFyZSBtb3JlIGxpa2VseSB0byBmYWlsIHRoYW4gb3RoZXJzIChlZyBJIHVzZSBDbGFuZyBtb3N0IG9mIHRoZQorIyAgICB0aW1lLCBzbyBzdGFydCB3aXRoIGEgR0NDIGJ1aWxkKS4KKyMgMi4gTWluaW1pemUgdG90YWwgcnVubmluZyB0aW1lLCBieSBhdm9pZGluZyB1c2VsZXNzIHJlYnVpbGRzCisjCisjIEluZGljYXRpdmUgcnVubmluZyB0aW1lcyBhcmUgZ2l2ZW4gZm9yIHJlZmVyZW5jZS4KKworbXNnICJpbmZvOiBvdXRwdXRfZW52LnNoIgorT1BFTlNTTD0iJE9QRU5TU0wiIE9QRU5TU0xfTEVHQUNZPSIkT1BFTlNTTF9MRUdBQ1kiIEdOVVRMU19DTEk9IiRHTlVUTFNfQ0xJIiBcCisgICAgR05VVExTX1NFUlY9IiRHTlVUTFNfU0VSViIgR05VVExTX0xFR0FDWV9DTEk9IiRHTlVUTFNfTEVHQUNZX0NMSSIgXAorICAgIEdOVVRMU19MRUdBQ1lfU0VSVj0iJEdOVVRMU19MRUdBQ1lfU0VSViIgc2NyaXB0cy9vdXRwdXRfZW52LnNoCisKK21zZyAidGVzdDogcmVjdXJzaW9uLnBsIiAjIDwgMXMKK3Rlc3RzL3NjcmlwdHMvcmVjdXJzaW9uLnBsIGxpYnJhcnkvKi5jCisKK21zZyAidGVzdDogZnJlc2huZXNzIG9mIGdlbmVyYXRlZCBzb3VyY2UgZmlsZXMiICMgPCAxcwordGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKKworbXNnICJ0ZXN0OiBkb3h5Z2VuIG1hcmt1cCBvdXRzaWRlIGRveHlnZW4gYmxvY2tzIiAjIDwgMXMKK3Rlc3RzL3NjcmlwdHMvY2hlY2stZG94eS1ibG9ja3MucGwKKworbXNnICJ0ZXN0L2J1aWxkOiBkZWNsYXJlZCBhbmQgZXhwb3J0ZWQgbmFtZXMiICMgPCAzcworY2xlYW51cAordGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaAorCittc2cgInRlc3Q6IGRveHlnZW4gd2FybmluZ3MiICMgfiAzcworY2xlYW51cAordGVzdHMvc2NyaXB0cy9kb3h5Z2VuLnNoCisKK21zZyAiYnVpbGQ6IGNyZWF0ZSBhbmQgYnVpbGQgeW90dGEgbW9kdWxlIiAjIH4gMzBzCitjbGVhbnVwCit0ZXN0cy9zY3JpcHRzL3lvdHRhLWJ1aWxkLnNoCisKK21zZyAiYnVpbGQ6IGNtYWtlLCBnY2MsIEFTYW4iICMgfiAxIG1pbiA1MHMKK2NsZWFudXAKK0NDPWdjYyBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1Bc2FuIC4KK21ha2UKKworbXNnICJ0ZXN0OiBtYWluIHN1aXRlcyAoaW5jLiBzZWxmdGVzdHMpIChBU2FuIGJ1aWxkKSIgIyB+IDUwcworbWFrZSB0ZXN0CisKK21zZyAidGVzdDogc3NsLW9wdC5zaCAoQVNhbiBidWlsZCkiICMgfiAxIG1pbgordGVzdHMvc3NsLW9wdC5zaAorCittc2cgInRlc3QvYnVpbGQ6IHJlZi1jb25maWdzIChBU2FuIGJ1aWxkKSIgIyB+IDYgbWluIDIwcwordGVzdHMvc2NyaXB0cy90ZXN0LXJlZi1jb25maWdzLnBsCisKK21zZyAiYnVpbGQ6IHdpdGggQVNhbiAocmVidWlsZCBhZnRlciByZWYtY29uZmlncykiICMgfiAxIG1pbgorbWFrZQorCittc2cgInRlc3Q6IGNvbXBhdC5zaCAoQVNhbiBidWlsZCkiICMgfiA2IG1pbgordGVzdHMvY29tcGF0LnNoCisKK21zZyAiYnVpbGQ6IERlZmF1bHQgKyBTU0x2MyAoQVNhbiBidWlsZCkiICMgfiA2IG1pbgorY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK0NDPWdjYyBjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1Bc2FuIC4KK21ha2UKKworbXNnICJ0ZXN0OiBTU0x2MyAtIG1haW4gc3VpdGVzIChpbmMuIHNlbGZ0ZXN0cykgKEFTYW4gYnVpbGQpIiAjIH4gNTBzCittYWtlIHRlc3QKKworbXNnICJidWlsZDogU1NMdjMgLSBjb21wYXQuc2ggKEFTYW4gYnVpbGQpIiAjIH4gNiBtaW4KK3Rlc3RzL2NvbXBhdC5zaCAtbSAndGxzMSB0bHMxXzEgdGxzMV8yIGR0bHMxIGR0bHMxXzInCitPUEVOU1NMX0NNRD0iJE9QRU5TU0xfTEVHQUNZIiB0ZXN0cy9jb21wYXQuc2ggLW0gJ3NzbDMnCisKK21zZyAiYnVpbGQ6IFNTTHYzIC0gc3NsLW9wdC5zaCAoQVNhbiBidWlsZCkiICMgfiA2IG1pbgordGVzdHMvc3NsLW9wdC5zaAorCittc2cgImJ1aWxkOiBjbWFrZSwgZnVsbCBjb25maWcsIGNsYW5nIiAjIH4gNTBzCitjbGVhbnVwCitjcCAiJENPTkZJR19IIiAiJENPTkZJR19CQUsiCitzY3JpcHRzL2NvbmZpZy5wbCBmdWxsCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UgIyB0b28gc2xvdyBmb3IgdGVzdHMKK0NDPWNsYW5nIGNtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU6U3RyaW5nPUNoZWNrIC4KK21ha2UKKworbXNnICJ0ZXN0OiBtYWluIHN1aXRlcyAoZnVsbCBjb25maWcpIiAjIH4gNXMKK21ha2UgdGVzdAorCittc2cgInRlc3Q6IHNzbC1vcHQuc2ggZGVmYXVsdCAoZnVsbCBjb25maWcpIiAjIH4gMXMKK3Rlc3RzL3NzbC1vcHQuc2ggLWYgRGVmYXVsdAorCittc2cgInRlc3Q6IGNvbXBhdC5zaCBSQzQsIERFUyAmIE5VTEwgKGZ1bGwgY29uZmlnKSIgIyB+IDIgbWluCitPUEVOU1NMX0NNRD0iJE9QRU5TU0xfTEVHQUNZIiBHTlVUTFNfQ0xJPSIkR05VVExTX0xFR0FDWV9DTEkiIEdOVVRMU19TRVJWPSIkR05VVExTX0xFR0FDWV9TRVJWIiB0ZXN0cy9jb21wYXQuc2ggLWUgJzNERVNcfERFUy1DQkMzJyAtZiAnTlVMTFx8REVTXHxSQzRcfEFSQ0ZPVVInCisKK21zZyAidGVzdC9idWlsZDogY3VydmVzLnBsIChnY2MpIiAjIH4gNCBtaW4KK2NsZWFudXAKK2NtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU6U3RyaW5nPURlYnVnIC4KK3Rlc3RzL3NjcmlwdHMvY3VydmVzLnBsCisKK21zZyAidGVzdC9idWlsZDoga2V5LWV4Y2hhbmdlcyAoZ2NjKSIgIyB+IDEgbWluCitjbGVhbnVwCitjbWFrZSAtRCBDTUFLRV9CVUlMRF9UWVBFOlN0cmluZz1DaGVjayAuCit0ZXN0cy9zY3JpcHRzL2tleS1leGNoYW5nZXMucGwKKworbXNnICJidWlsZDogVW5peCBtYWtlLCAtT3MgKGdjYykiICMgfiAzMHMKK2NsZWFudXAKK0NDPWdjYyBDRkxBR1M9Jy1XZXJyb3IgLU9zJyBtYWtlCisKKyMgdGhpcyBpcyBtZWFudCB0byBjYXRoIG1pc3NpbmcgI2RlZmluZSBtYmVkdGxzX3ByaW50ZiBldGMKKyMgZGlzYWJsZSBmc2lvIHRvIGNhdGNoIHNvbWUgbW9yZSBtaXNzaW5nICNpbmNsdWRlIDxzdGRpby5oPgorbXNnICJidWlsZDogZnVsbCBjb25maWcgZXhjZXB0IHBsYXRmb3JtL2ZzaW8sIG1ha2UsIGdjYyIgIyB+IDMwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1BMQVRGT1JNX01FTU9SWQorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9QUklOVEZfQUxUCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1BMQVRGT1JNX0ZQUklOVEZfQUxUCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1BMQVRGT1JNX1NOUFJJTlRGX0FMVAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9USU1FX0FMVAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19QTEFURk9STV9FWElUX0FMVAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19FTlRST1BZX05WX1NFRUQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0ZTX0lPCitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMCcgbWFrZQorCisjIGNhdGNoIGNvbXBpbGUgYnVncyBpbiBfdW5pbml0IGZ1bmN0aW9ucworbXNnICJidWlsZDogZnVsbCBjb25maWcgd2l0aCBOT19TVERfRlVOQ1RJT04sIG1ha2UsIGdjYyIgIyB+IDMwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfUExBVEZPUk1fTk9fU1REX0ZVTkNUSU9OUworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19FTlRST1BZX05WX1NFRUQKK0NDPWdjYyBDRkxBR1M9Jy1XZXJyb3IgLU8wJyBtYWtlCisKK21zZyAiYnVpbGQ6IGZ1bGwgY29uZmlnIGV4Y2VwdCBzc2xfc3J2LmMsIG1ha2UsIGdjYyIgIyB+IDMwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19TU0xfU1JWX0MKK0NDPWdjYyBDRkxBR1M9Jy1XZXJyb3IgLU8wJyBtYWtlCisKK21zZyAiYnVpbGQ6IGZ1bGwgY29uZmlnIGV4Y2VwdCBzc2xfY2xpLmMsIG1ha2UsIGdjYyIgIyB+IDMwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgZnVsbAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19TU0xfQ0xJX0MKK0NDPWdjYyBDRkxBR1M9Jy1XZXJyb3IgLU8wJyBtYWtlCisKK21zZyAiYnVpbGQ6IGZ1bGwgY29uZmlnIGV4Y2VwdCBuZXRfc29ja2V0cy5jLCBtYWtlLCBnY2MgLXN0ZD1jOTkgLXBlZGFudGljIiAjIH4gMzBzCitjbGVhbnVwCitjcCAiJENPTkZJR19IIiAiJENPTkZJR19CQUsiCitzY3JpcHRzL2NvbmZpZy5wbCBmdWxsCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX05FVF9DICMgZ2V0YWRkcmluZm8oKSB1bmRlY2xhcmVkLCBldGMuCitzY3JpcHRzL2NvbmZpZy5wbCBzZXQgTUJFRFRMU19OT19QTEFURk9STV9FTlRST1BZICMgdXNlcyBzeXNjYWxsKCkgb24gR05VL0xpbnV4CitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMCAtc3RkPWM5OSAtcGVkYW50aWMnIG1ha2UgbGliCisKK21zZyAiYnVpbGQ6IGRlZmF1bHQgY29uZmlnIHdpdGggIE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgKEFTYW4gYnVpbGQpIgorY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkKK3NjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTCitzY3JpcHRzL2NvbmZpZy5wbCBzZXQgTUJFRFRMU19FTlRST1BZX0MKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0hBVkVHRV9DCitDQz1nY2MgY21ha2UgIC1EIFVOU0FGRV9CVUlMRD1PTiAtRCBDTUFLRV9DX0ZMQUdTOlN0cmluZz0iLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tY29tbW9uIC1PMyIgLgorbWFrZQorCittc2cgInRlc3Q6IE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgLSBtYWluIHN1aXRlcyAoaW5jLiBzZWxmdGVzdHMpIChBU2FuIGJ1aWxkKSIKK21ha2UgdGVzdAorCitpZiB1bmFtZSAtYSB8IGdyZXAgLUYgTGludXggPi9kZXYvbnVsbDsgdGhlbgorbXNnICJidWlsZC90ZXN0OiBtYWtlIHNoYXJlZCIgIyB+IDQwcworY2xlYW51cAorbWFrZSBTSEFSRUQ9MSBhbGwgY2hlY2sKK2ZpCisKK2lmIHVuYW1lIC1hIHwgZ3JlcCAtRiB4ODZfNjQgPi9kZXYvbnVsbDsgdGhlbgorbXNnICJidWlsZDogaTM4NiwgbWFrZSwgZ2NjIiAjIH4gMzBzCitjbGVhbnVwCitDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1tMzInIG1ha2UKK2ZpICMgeDg2XzY0CisKK21zZyAiYnVpbGQ6IGFybS1ub25lLWVhYmktZ2NjLCBtYWtlIiAjIH4gMTBzCitjbGVhbnVwCitjcCAiJENPTkZJR19IIiAiJENPTkZJR19CQUsiCitzY3JpcHRzL2NvbmZpZy5wbCBmdWxsCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX05FVF9DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1RJTUlOR19DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0ZTX0lPCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRAorc2NyaXB0cy9jb25maWcucGwgc2V0IE1CRURUTFNfTk9fUExBVEZPUk1fRU5UUk9QWQorIyBmb2xsb3dpbmcgdGhpbmdzIGFyZSBub3QgaW4gdGhlIGRlZmF1bHQgY29uZmlnCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0hBVkVHRV9DICMgZGVwZW5kcyBvbiB0aW1pbmcuYworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USFJFQURJTkdfUFRIUkVBRAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19USFJFQURJTkdfQworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19NRU1PUllfQkFDS1RSQUNFICMgZXhlY2luZm8uaAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MgIyBjYWxscyBleGl0CitDQz1hcm0tbm9uZS1lYWJpLWdjYyBBUj1hcm0tbm9uZS1lYWJpLWFyIExEPWFybS1ub25lLWVhYmktbGQgQ0ZMQUdTPS1XZXJyb3IgbWFrZSBsaWIKKworbXNnICJidWlsZDogYXJtY2MsIG1ha2UiCitjbGVhbnVwCitjcCAiJENPTkZJR19IIiAiJENPTkZJR19CQUsiCitzY3JpcHRzL2NvbmZpZy5wbCBmdWxsCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX05FVF9DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1RJTUlOR19DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0ZTX0lPCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRAorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19IQVZFX1RJTUUKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfSEFWRV9USU1FX0RBVEUKK3NjcmlwdHMvY29uZmlnLnBsIHNldCBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyMgZm9sbG93aW5nIHRoaW5ncyBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGNvbmZpZworc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19ERVBSRUNBVEVEX1dBUk5JTkcKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfSEFWRUdFX0MgIyBkZXBlbmRzIG9uIHRpbWluZy5jCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1RIUkVBRElOR19QVEhSRUFECitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX1RIUkVBRElOR19DCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UgIyBleGVjaW5mby5oCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQyAjIGNhbGxzIGV4aXQKK3NjcmlwdHMvY29uZmlnLnBsIHVuc2V0IE1CRURUTFNfUExBVEZPUk1fVElNRV9BTFQgIyBkZXBlbmRzIG9uIE1CRURUTFNfSEFWRV9USU1FCitDQz1hcm1jYyBBUj1hcm1hciBXQVJOSU5HX0NGTEFHUz0gbWFrZSBsaWIKKworaWYgd2hpY2ggaTY4Ni13NjQtbWluZ3czMi1nY2MgPi9kZXYvbnVsbDsgdGhlbgorbXNnICJidWlsZDogY3Jvc3MtbWluZ3c2NCwgbWFrZSIgIyB+IDMwcworY2xlYW51cAorQ0M9aTY4Ni13NjQtbWluZ3czMi1nY2MgQVI9aTY4Ni13NjQtbWluZ3czMi1hciBMRD1pNjg2LXc2NC1taW5nZ3czMi1sZCBDRkxBR1M9LVdlcnJvciBXSU5ET1dTX0JVSUxEPTEgbWFrZQorV0lORE9XU19CVUlMRD0xIG1ha2UgY2xlYW4KK0NDPWk2ODYtdzY0LW1pbmd3MzItZ2NjIEFSPWk2ODYtdzY0LW1pbmd3MzItYXIgTEQ9aTY4Ni13NjQtbWluZ2d3MzItbGQgQ0ZMQUdTPS1XZXJyb3IgV0lORE9XU19CVUlMRD0xIFNIQVJFRD0xIG1ha2UKK1dJTkRPV1NfQlVJTEQ9MSBtYWtlIGNsZWFuCitmaQorCisjIE1lbVNhbiBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgb24gTGludXggNjQgYml0cworaWYgdW5hbWUgLWEgfCBncmVwICdMaW51eC4qeDg2XzY0JyA+L2Rldi9udWxsOyB0aGVuCisKK21zZyAiYnVpbGQ6IE1TYW4gKGNsYW5nKSIgIyB+IDEgbWluIDIwcworY2xlYW51cAorY3AgIiRDT05GSUdfSCIgIiRDT05GSUdfQkFLIgorc2NyaXB0cy9jb25maWcucGwgdW5zZXQgTUJFRFRMU19BRVNOSV9DICMgbWVtc2FuIGRvZXNuJ3QgZ3JvayBhc20KK0NDPWNsYW5nIGNtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU6U3RyaW5nPU1lbVNhbiAuCittYWtlCisKK21zZyAidGVzdDogbWFpbiBzdWl0ZXMgKE1TYW4pIiAjIH4gMTBzCittYWtlIHRlc3QKKworbXNnICJ0ZXN0OiBzc2wtb3B0LnNoIChNU2FuKSIgIyB+IDEgbWluCit0ZXN0cy9zc2wtb3B0LnNoCisKKyMgT3B0aW9uYWwgcGFydChzKQorCitpZiBbICIkTUVNT1JZIiAtZ3QgMCBdOyB0aGVuCisgICAgbXNnICJ0ZXN0OiBjb21wYXQuc2ggKE1TYW4pIiAjIH4gNiBtaW4gMjBzCisgICAgdGVzdHMvY29tcGF0LnNoCitmaQorCitlbHNlICMgbm8gTWVtU2FuCisKK21zZyAiYnVpbGQ6IFJlbGVhc2UgKGNsYW5nKSIKK2NsZWFudXAKK0NDPWNsYW5nIGNtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU6U3RyaW5nPVJlbGVhc2UgLgorbWFrZQorCittc2cgInRlc3Q6IG1haW4gc3VpdGVzIHZhbGdyaW5kIChSZWxlYXNlKSIKK21ha2UgbWVtY2hlY2sKKworIyBPcHRpb25hbCBwYXJ0KHMpCisjIEN1cnJlbnRseSBicm9rZW4sIHByb2dyYW1zIGRvbid0IHNlZW0gdG8gcmVjZWl2ZSBzaWduYWxzCisjIHVuZGVyIHZhbGdyaW5kIG9uIE9TIFgKKworaWYgWyAiJE1FTU9SWSIgLWd0IDAgXTsgdGhlbgorICAgIG1zZyAidGVzdDogc3NsLW9wdC5zaCAtLW1lbWNoZWNrIChSZWxlYXNlKSIKKyAgICB0ZXN0cy9zc2wtb3B0LnNoIC0tbWVtY2hlY2sKK2ZpCisKK2lmIFsgIiRNRU1PUlkiIC1ndCAxIF07IHRoZW4KKyAgICBtc2cgInRlc3Q6IGNvbXBhdC5zaCAtLW1lbWNoZWNrIChSZWxlYXNlKSIKKyAgICB0ZXN0cy9jb21wYXQuc2ggLS1tZW1jaGVjaworZmkKKworZmkgIyBNZW1TYW4KKworbXNnICJidWlsZDogY21ha2UgJ291dC1vZi1zb3VyY2UnIGJ1aWxkIgorY2xlYW51cAorTUJFRFRMU19ST09UX0RJUj0iJFBXRCIKK21rZGlyICIkT1VUX09GX1NPVVJDRV9ESVIiCitjZCAiJE9VVF9PRl9TT1VSQ0VfRElSIgorY21ha2UgIiRNQkVEVExTX1JPT1RfRElSIgorbWFrZQorCittc2cgInRlc3Q6IGNtYWtlICdvdXQtb2Ytc291cmNlJyBidWlsZCIKK21ha2UgdGVzdAorY2QgIiRNQkVEVExTX1JPT1RfRElSIgorcm0gLXJmICIkT1VUX09GX1NPVVJDRV9ESVIiCisKK21zZyAiRG9uZSwgY2xlYW5pbmcgdXAiCitjbGVhbnVwCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2Jhc2ljLWJ1aWxkLXRlc3Quc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9iYXNpYy1idWlsZC10ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0MDU4NzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9iYXNpYy1idWlsZC10ZXN0LnNoCkBAIC0wLDAgKzEsMjE5IEBACisjIS9iaW4vc2gKKworIyBiYXNpYy1idWlsZC10ZXN0cy5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBFeGVjdXRlcyB0aGUgYmFzaWMgdGVzdCBzdWl0ZXMsIGNhcHR1cmVzIHRoZSByZXN1bHRzLCBhbmQgZ2VuZXJhdGVzIGEgc2ltcGxlCisjIHRlc3QgcmVwb3J0IGFuZCBjb2RlIGNvdmVyYWdlIHJlcG9ydC4KKyMKKyMgVGhlIHRlc3RzIGluY2x1ZGU6CisjICAgKiBVbml0IHRlc3RzICAgICAgICAgICAgICAgIC0gZXhlY3V0ZWQgdXNpbmcgdGVzdHMvc2NyaXB0cy9ydW4tdGVzdC1zdWl0ZS5wbAorIyAgICogU2VsZi10ZXN0cyAgICAgICAgICAgICAgICAtIGV4ZWN1dGVkIHVzaW5nIHRoZSB0ZXN0IHN1aXRlcyBhYm92ZQorIyAgICogU3lzdGVtIHRlc3RzICAgICAgICAgICAgICAtIGV4ZWN1dGVkIHVzaW5nIHRlc3RzL3NzbC1vcHQuc2gKKyMgICAqIEludGVyb3BlcmFiaWxpdHkgdGVzdHMgICAgLSBleGVjdXRlZCB1c2luZyB0ZXN0cy9jb21wYXQuc2gKKyMKKyMgVGhlIHRlc3RzIGZvY3VzIG9uIGZ1bmN0aW9uYWxpdHkgYW5kIGRvIG5vdCBjb25zaWRlciBwZXJmb3JtYW5jZS4KKyMKKyMgTm90ZSB0aGUgdGVzdHMgc2VsZi1hZGFwdCBkdWUgdG8gY29uZmlndXJhdGlvbnMgaW4gaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oCisjIHdoaWNoIGNhbiBsZWFkIHRvIHNvbWUgdGVzdHMgYmVpbmcgc2tpcHBlZCwgYW5kIGNhbiBjYXVzZSB0aGUgbnVtYmVyIG9mCisjIGF2YWlsYWJsZSB0ZXN0cyB0byBmbHVjdHVhdGUuCisjCisjIFRoaXMgc2NyaXB0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gYmUgZ2VuZXJpYyBhbmQgc2hvdWxkIHdvcmsgb24gYW55IHNoZWxsLgorIworIyBVc2FnZTogYmFzaWMtYnVpbGQtdGVzdHMuc2gKKyMKKworIyBBYm9ydCBvbiBlcnJvcnMgKGFuZCB1bmluaXRpbGlhc2VkIHZhcmlhYmxlcykKK3NldCAtZXUKKworaWYgWyAtZCBsaWJyYXJ5IC1hIC1kIGluY2x1ZGUgLWEgLWQgdGVzdHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiTXVzdCBiZSBydW4gZnJvbSBtYmVkIFRMUyByb290IiA+JjIKKyAgICBleGl0IDEKK2ZpCisKKzogJHtPUEVOU1NMOj0ib3BlbnNzbCJ9Cis6ICR7T1BFTlNTTF9MRUdBQ1k6PSIkT1BFTlNTTCJ9Cis6ICR7R05VVExTX0NMSTo9ImdudXRscy1jbGkifQorOiAke0dOVVRMU19TRVJWOj0iZ251dGxzLXNlcnYifQorOiAke0dOVVRMU19MRUdBQ1lfQ0xJOj0iJEdOVVRMU19DTEkifQorOiAke0dOVVRMU19MRUdBQ1lfU0VSVjo9IiRHTlVUTFNfU0VSViJ9CisKKyMgVG8gYXZvaWQgc2V0dGluZyBPcGVuU1NMIGFuZCBHbnVUTFMgZm9yIGVhY2ggY2FsbCB0byBjb21wYXQuc2ggYW5kIHNzbC1vcHQuc2gKKyMgd2UganVzdCBleHBvcnQgdGhlIHZhcmlhYmxlcyB0aGV5IHJlcXVpcmUKK2V4cG9ydCBPUEVOU1NMX0NNRD0iJE9QRU5TU0wiCitleHBvcnQgR05VVExTX0NMST0iJEdOVVRMU19DTEkiCitleHBvcnQgR05VVExTX1NFUlY9IiRHTlVUTFNfU0VSViIKKworQ09ORklHX0g9J2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKK0NPTkZJR19CQUs9IiRDT05GSUdfSC5iYWsiCisKKyMgU3RlcCAwIC0gcHJpbnQgYnVpbGQgZW52aXJvbm1lbnQgaW5mbworT1BFTlNTTD0iJE9QRU5TU0wiICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE9QRU5TU0xfTEVHQUNZPSIkT1BFTlNTTF9MRUdBQ1kiICAgICAgICAgXAorICAgIEdOVVRMU19DTEk9IiRHTlVUTFNfQ0xJIiAgICAgICAgICAgICAgICAgXAorICAgIEdOVVRMU19TRVJWPSIkR05VVExTX1NFUlYiICAgICAgICAgICAgICAgXAorICAgIEdOVVRMU19MRUdBQ1lfQ0xJPSIkR05VVExTX0xFR0FDWV9DTEkiICAgXAorICAgIEdOVVRMU19MRUdBQ1lfU0VSVj0iJEdOVVRMU19MRUdBQ1lfU0VSViIgXAorICAgIHNjcmlwdHMvb3V0cHV0X2Vudi5zaAorZWNobworCisjIFN0ZXAgMSAtIE1ha2UgYW5kIGluc3RydW1lbnRlZCBidWlsZCBmb3IgY29kZSBjb3ZlcmFnZQorZXhwb3J0IENGTEFHUz0nIC0tY292ZXJhZ2UgLWczIC1PMCAnCittYWtlIGNsZWFuCitjcCAiJENPTkZJR19IIiAiJENPTkZJR19CQUsiCitzY3JpcHRzL2NvbmZpZy5wbCBmdWxsCitzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX01FTU9SWV9CQUNLVFJBQ0UKK21ha2UgLWoKKworCisjIFN0ZXAgMiAtIEV4ZWN1dGUgdGhlIHRlc3RzCitURVNUX09VVFBVVD1vdXRfJHtQUElEfQorY2QgdGVzdHMKKworIyBTdGVwIDJhIC0gVW5pdCBUZXN0cworcGVybCBzY3JpcHRzL3J1bi10ZXN0LXN1aXRlcy5wbCAtdiB8dGVlIHVuaXQtdGVzdC0kVEVTVF9PVVRQVVQKK2VjaG8KKworIyBTdGVwIDJiIC0gU3lzdGVtIFRlc3RzCitzaCBzc2wtb3B0LnNoIHx0ZWUgc3lzLXRlc3QtJFRFU1RfT1VUUFVUCitlY2hvCisKKyMgU3RlcCAyYyAtIENvbXBhdGliaWxpdHkgdGVzdHMKK3NoIGNvbXBhdC5zaCAtbSAndGxzMSB0bHMxXzEgdGxzMV8yIGR0bHMxIGR0bHMxXzInIHwgXAorICAgIHRlZSBjb21wYXQtdGVzdC0kVEVTVF9PVVRQVVQKK09QRU5TU0xfQ01EPSIkT1BFTlNTTF9MRUdBQ1kiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzaCBjb21wYXQuc2ggLW0gJ3NzbDMnIHx0ZWUgLWEgY29tcGF0LXRlc3QtJFRFU1RfT1VUUFVUCitPUEVOU1NMX0NNRD0iJE9QRU5TU0xfTEVHQUNZIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBHTlVUTFNfQ0xJPSIkR05VVExTX0xFR0FDWV9DTEkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdOVVRMU19TRVJWPSIkR05VVExTX0xFR0FDWV9TRVJWIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc2ggY29tcGF0LnNoIC1lICczREVTXHxERVMtQ0JDMycgLWYgJ05VTExcfERFU1x8UkM0XHxBUkNGT1VSJyB8IFwKKyAgICB0ZWUgLWEgY29tcGF0LXRlc3QtJFRFU1RfT1VUUFVUCitlY2hvCisKKyMgU3RlcCAzIC0gUHJvY2VzcyB0aGUgY292ZXJhZ2UgcmVwb3J0CitjZCAuLgorbWFrZSBsY292IHx0ZWUgdGVzdHMvY292LSRURVNUX09VVFBVVAorCisKKyMgU3RlcCA0IC0gU3VtbWFyaXNlIHRoZSB0ZXN0IHJlcG9ydAorZWNobworZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKK2VjaG8gIlRlc3QgUmVwb3J0IFN1bW1hcnkiCitlY2hvCisKK2NkIHRlc3RzCisKKyMgU3RlcCA0YSAtIFVuaXQgdGVzdHMKK2VjaG8gIlVuaXQgdGVzdHMgLSB0ZXN0cy9zY3JpcHRzL3J1bi10ZXN0LXN1aXRlcy5wbCIKKworUEFTU0VEX1RFU1RTPSQodGFpbCAtbjYgdW5pdC10ZXN0LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvdGVzdCBjYXNlcyBwYXNzZWQgOltcdF0qXChbMC05XSpcKS9cMS9wJ3wgdHIgLWQgJyAnKQorU0tJUFBFRF9URVNUUz0kKHRhaWwgLW42IHVuaXQtdGVzdC0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzL3NraXBwZWQgOlsgXHRdKlwoWzAtOV0qXCkvXDEvcCd8IHRyIC1kICcgJykKK1RPVEFMX1NVSVRFUz0kKHRhaWwgLW42IHVuaXQtdGVzdC0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzLy4qIChcKFswLTldKlwpIC4qLCBbMC05XSogdGVzdHMgcnVuKS9cMS9wJ3wgdHIgLWQgJyAnKQorRkFJTEVEX1RFU1RTPSQodGFpbCAtbjYgdW5pdC10ZXN0LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvZmFpbGVkIDpbXHRdKlwoWzAtOV0qXCkvXDEvcCcgfHRyIC1kICcgJykKKworZWNobyAiTm8gdGVzdCBzdWl0ZXMgICAgIDogJFRPVEFMX1NVSVRFUyIKK2VjaG8gIlBhc3NlZCAgICAgICAgICAgICA6ICRQQVNTRURfVEVTVFMiCitlY2hvICJGYWlsZWQgICAgICAgICAgICAgOiAkRkFJTEVEX1RFU1RTIgorZWNobyAiU2tpcHBlZCAgICAgICAgICAgIDogJFNLSVBQRURfVEVTVFMiCitlY2hvICJUb3RhbCBleGVjJ2QgdGVzdHMgOiAkKCgkUEFTU0VEX1RFU1RTICsgJEZBSUxFRF9URVNUUykpIgorZWNobyAiVG90YWwgYXZhaWwgdGVzdHMgIDogJCgoJFBBU1NFRF9URVNUUyArICRGQUlMRURfVEVTVFMgKyAkU0tJUFBFRF9URVNUUykpIgorZWNobworCitUT1RBTF9QQVNTPSRQQVNTRURfVEVTVFMKK1RPVEFMX0ZBSUw9JEZBSUxFRF9URVNUUworVE9UQUxfU0tJUD0kU0tJUFBFRF9URVNUUworVE9UQUxfQVZBSUw9JCgoJFBBU1NFRF9URVNUUyArICRGQUlMRURfVEVTVFMgKyAkU0tJUFBFRF9URVNUUykpCitUT1RBTF9FWEVEPSQoKCRQQVNTRURfVEVTVFMgKyAkRkFJTEVEX1RFU1RTKSkKKworIyBTdGVwIDRiIC0gVExTIE9wdGlvbnMgdGVzdHMKK2VjaG8gIlRMUyBPcHRpb25zIHRlc3RzIC0gdGVzdHMvc3NsLW9wdC5zaCIKKworUEFTU0VEX1RFU1RTPSQodGFpbCAtbjUgc3lzLXRlc3QtJFRFU1RfT1VUUFVUfHNlZCAtbiAtZSAncy8uKiAoXChbMC05XSpcKSBcLyBbMC05XSogdGVzdHMgKFswLTldKiBza2lwcGVkKSkkL1wxL3AnKQorU0tJUFBFRF9URVNUUz0kKHRhaWwgLW41IHN5cy10ZXN0LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvLiogKFswLTldKiBcLyBbMC05XSogdGVzdHMgKFwoWzAtOV0qXCkgc2tpcHBlZCkpJC9cMS9wJykKK1RPVEFMX1RFU1RTPSQodGFpbCAtbjUgc3lzLXRlc3QtJFRFU1RfT1VUUFVUfHNlZCAtbiAtZSAncy8uKiAoWzAtOV0qIFwvIFwoWzAtOV0qXCkgdGVzdHMgKFswLTldKiBza2lwcGVkKSkkL1wxL3AnKQorRkFJTEVEX1RFU1RTPSQoKCRUT1RBTF9URVNUUyAtICRQQVNTRURfVEVTVFMpKQorCitlY2hvICJQYXNzZWQgICAgICAgICAgICAgOiAkUEFTU0VEX1RFU1RTIgorZWNobyAiRmFpbGVkICAgICAgICAgICAgIDogJEZBSUxFRF9URVNUUyIKK2VjaG8gIlNraXBwZWQgICAgICAgICAgICA6ICRTS0lQUEVEX1RFU1RTIgorZWNobyAiVG90YWwgZXhlYydkIHRlc3RzIDogJFRPVEFMX1RFU1RTIgorZWNobyAiVG90YWwgYXZhaWwgdGVzdHMgIDogJCgoJFRPVEFMX1RFU1RTICsgJFNLSVBQRURfVEVTVFMpKSIKK2VjaG8KKworVE9UQUxfUEFTUz0kKCgkVE9UQUxfUEFTUyskUEFTU0VEX1RFU1RTKSkKK1RPVEFMX0ZBSUw9JCgoJFRPVEFMX0ZBSUwrJEZBSUxFRF9URVNUUykpCitUT1RBTF9TS0lQPSQoKCRUT1RBTF9TS0lQKyRTS0lQUEVEX1RFU1RTKSkKK1RPVEFMX0FWQUlMPSQoKCRUT1RBTF9BVkFJTCArICRUT1RBTF9URVNUUyArICRTS0lQUEVEX1RFU1RTKSkKK1RPVEFMX0VYRUQ9JCgoJFRPVEFMX0VYRUQgKyAkVE9UQUxfVEVTVFMpKQorCisKKyMgU3RlcCA0YyAtIFN5c3RlbSBDb21wYXRpYmlsaXR5IHRlc3RzCitlY2hvICJTeXN0ZW0vQ29tcGF0aWJpbGl0eSB0ZXN0cyAtIHRlc3RzL2NvbXBhdC5zaCIKKworUEFTU0VEX1RFU1RTPSQoY2F0IGNvbXBhdC10ZXN0LSRURVNUX09VVFBVVCB8IHNlZCAtbiAtZSAncy8uKiAoXChbMC05XSpcKSBcLyBbMC05XSogdGVzdHMgKFswLTldKiBza2lwcGVkKSkkL1wxL3AnIHwgYXdrICdCRUdJTnsgcyA9IDAgfSB7IHMgKz0gJDEgfSBFTkR7IHByaW50IHMgfScpCitTS0lQUEVEX1RFU1RTPSQoY2F0IGNvbXBhdC10ZXN0LSRURVNUX09VVFBVVCB8IHNlZCAtbiAtZSAncy8uKiAoWzAtOV0qIFwvIFswLTldKiB0ZXN0cyAoXChbMC05XSpcKSBza2lwcGVkKSkkL1wxL3AnIHwgYXdrICdCRUdJTnsgcyA9IDAgfSB7IHMgKz0gJDEgfSBFTkR7IHByaW50IHMgfScpCitFWEVEX1RFU1RTPSQoY2F0IGNvbXBhdC10ZXN0LSRURVNUX09VVFBVVCB8IHNlZCAtbiAtZSAncy8uKiAoWzAtOV0qIFwvIFwoWzAtOV0qXCkgdGVzdHMgKFswLTldKiBza2lwcGVkKSkkL1wxL3AnIHwgYXdrICdCRUdJTnsgcyA9IDAgfSB7IHMgKz0gJDEgfSBFTkR7IHByaW50IHMgfScpCitGQUlMRURfVEVTVFM9JCgoJEVYRURfVEVTVFMgLSAkUEFTU0VEX1RFU1RTKSkKKworZWNobyAiUGFzc2VkICAgICAgICAgICAgIDogJFBBU1NFRF9URVNUUyIKK2VjaG8gIkZhaWxlZCAgICAgICAgICAgICA6ICRGQUlMRURfVEVTVFMiCitlY2hvICJTa2lwcGVkICAgICAgICAgICAgOiAkU0tJUFBFRF9URVNUUyIKK2VjaG8gIlRvdGFsIGV4ZWMnZCB0ZXN0cyA6ICRFWEVEX1RFU1RTIgorZWNobyAiVG90YWwgYXZhaWwgdGVzdHMgIDogJCgoJEVYRURfVEVTVFMgKyAkU0tJUFBFRF9URVNUUykpIgorZWNobworCitUT1RBTF9QQVNTPSQoKCRUT1RBTF9QQVNTKyRQQVNTRURfVEVTVFMpKQorVE9UQUxfRkFJTD0kKCgkVE9UQUxfRkFJTCskRkFJTEVEX1RFU1RTKSkKK1RPVEFMX1NLSVA9JCgoJFRPVEFMX1NLSVArJFNLSVBQRURfVEVTVFMpKQorVE9UQUxfQVZBSUw9JCgoJFRPVEFMX0FWQUlMICsgJEVYRURfVEVTVFMgKyAkU0tJUFBFRF9URVNUUykpCitUT1RBTF9FWEVEPSQoKCRUT1RBTF9FWEVEICsgJEVYRURfVEVTVFMpKQorCisKKyMgU3RlcCA0ZCAtIEdyYW5kIHRvdGFscworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gIlRvdGFsIHRlc3RzIgorCitlY2hvICJUb3RhbCBQYXNzZWQgICAgICAgOiAkVE9UQUxfUEFTUyIKK2VjaG8gIlRvdGFsIEZhaWxlZCAgICAgICA6ICRUT1RBTF9GQUlMIgorZWNobyAiVG90YWwgU2tpcHBlZCAgICAgIDogJFRPVEFMX1NLSVAiCitlY2hvICJUb3RhbCBleGVjJ2QgdGVzdHMgOiAkVE9UQUxfRVhFRCIKK2VjaG8gIlRvdGFsIGF2YWlsIHRlc3RzICA6ICRUT1RBTF9BVkFJTCIKK2VjaG8KKworCisjIFN0ZXAgNGUgLSBDb3ZlcmFnZQorZWNobyAiQ292ZXJhZ2UiCisKK0xJTkVTX1RFU1RFRD0kKHRhaWwgLW4zIGNvdi0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzLyAgbGluZXMuLi4uLi46IFswLTldKi5bMC05XSUgKFwoWzAtOV0qXCkgb2YgWzAtOV0qIGxpbmVzKS9cMS9wJykKK0xJTkVTX1RPVEFMPSQodGFpbCAtbjMgY292LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvICBsaW5lcy4uLi4uLjogWzAtOV0qLlswLTldJSAoWzAtOV0qIG9mIFwoWzAtOV0qXCkgbGluZXMpL1wxL3AnKQorRlVOQ1NfVEVTVEVEPSQodGFpbCAtbjMgY292LSRURVNUX09VVFBVVHxzZWQgLW4gLWUgJ3MvICBmdW5jdGlvbnMuLjogWzAtOV0qLlswLTldJSAoXChbMC05XSpcKSBvZiBbMC05XSogZnVuY3Rpb25zKSQvXDEvcCcpCitGVU5DU19UT1RBTD0kKHRhaWwgLW4zIGNvdi0kVEVTVF9PVVRQVVR8c2VkIC1uIC1lICdzLyAgZnVuY3Rpb25zLi46IFswLTldKi5bMC05XSUgKFswLTldKiBvZiBcKFswLTldKlwpIGZ1bmN0aW9ucykkL1wxL3AnKQorCitMSU5FU19QRVJDRU5UPSQoKDEwMDAqJExJTkVTX1RFU1RFRC8kTElORVNfVE9UQUwpKQorTElORVNfUEVSQ0VOVD0iJCgoJExJTkVTX1BFUkNFTlQvMTApKS4kKCgkTElORVNfUEVSQ0VOVC0oJExJTkVTX1BFUkNFTlQvMTApKjEwKSkiCisKK0ZVTkNTX1BFUkNFTlQ9JCgoMTAwMCokRlVOQ1NfVEVTVEVELyRGVU5DU19UT1RBTCkpCitGVU5DU19QRVJDRU5UPSIkKCgkRlVOQ1NfUEVSQ0VOVC8xMCkpLiQoKCRGVU5DU19QRVJDRU5ULSgkRlVOQ1NfUEVSQ0VOVC8xMCkqMTApKSIKKworZWNobyAiTGluZXMgVGVzdGVkICAgICAgIDogJExJTkVTX1RFU1RFRCBvZiAkTElORVNfVE9UQUwgJExJTkVTX1BFUkNFTlQlIgorZWNobyAiRnVuY3Rpb25zIFRlc3RlZCAgIDogJEZVTkNTX1RFU1RFRCBvZiAkRlVOQ1NfVE9UQUwgJEZVTkNTX1BFUkNFTlQlIgorZWNobworCisKK3JtIHVuaXQtdGVzdC0kVEVTVF9PVVRQVVQKK3JtIHN5cy10ZXN0LSRURVNUX09VVFBVVAorcm0gY29tcGF0LXRlc3QtJFRFU1RfT1VUUFVUCitybSBjb3YtJFRFU1RfT1VUUFVUCisKK2NkIC4uCisKK21ha2UgY2xlYW4KKworaWYgWyAtZiAiJENPTkZJR19CQUsiIF07IHRoZW4KKyAgICBtdiAiJENPTkZJR19CQUsiICIkQ09ORklHX0giCitmaQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY2hlY2stZG94eS1ibG9ja3MucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jaGVjay1kb3h5LWJsb2Nrcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYmQyN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY2hlY2stZG94eS1ibG9ja3MucGwKQEAgLTAsMCArMSw1NyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgRGV0ZWN0IGNvbW1lbnQgYmxvY2tzIHRoYXQgYXJlIGxpa2VseSBtZWFudCB0byBiZSBkb3h5Z2VuIGJsb2NrcyBidXQgYXJlbid0LgorIworIyBNb3JlIHByZWNpc2VseSwgbG9vayBmb3Igbm9ybWFsIGNvbW1lbnQgYmxvY2sgY29udGFpbmluZyAnXCcuCisjIE9mIGNvdXJzZSBvbmUgY291bGQgdXNlIGRveHlnZW4gd2FybmluZ3MsIGVnIHdpdGg6CisjICAgc2VkIC1lICcvRVhUUkFDVC9zL1lFUy9OTy8nIGRveHlnZW4vbWJlZHRscy5kb3h5ZmlsZSB8IGRveHlnZW4gLQorIyBidXQgdGhhdCB3b3VsZCB3YXJuIGFib3V0IGFueSB1bmRvY3VtZW50ZWQgaXRlbSwgd2hpbGUgb3VyIGdvYWwgaXMgdG8gZmluZAorIyBpdGVtcyB0aGF0IGFyZSBkb2N1bWVudGVkLCBidXQgbm90IG1hcmtlZCBhcyBzdWNoIGJ5IG1pc3Rha2UuCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKKyMgQy9oZWFkZXIgZmlsZXMgaW4gdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3aWxsIGJlIGNoZWNrZWQKK215IEBkaXJlY3RvcmllcyA9IHF3KGluY2x1ZGUvbWJlZHRscyBsaWJyYXJ5IGRveHlnZW4vaW5wdXQpOworCisjIHZlcnkgbmFpdmUgcGF0dGVybiB0byBmaW5kIGRpcmVjdGl2ZXM6CisjIGV2ZXJ5dGhpbmcgd2l0aCBhIGJhY2tzbGFjaCBleGNlcHQgJ1wwJyBhbmQgYmFja3NsYXNoIGF0IEVPTAorbXkgJGRveHlfcmUgPSBxci9cXCg/ITB8XG4pLzsKKworc3ViIGNoZWNrX2ZpbGUgeworICAgIG15ICgkZm5hbWUpID0gQF87CisgICAgb3BlbiBteSAkZmgsICc8JywgJGZuYW1lIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gJyRmbmFtZSc6ICQhXG4iOworCisgICAgIyBmaXJzdCBsaW5lIG9mIHRoZSBsYXN0IG5vcm1hbCBjb21tZW50IGJsb2NrLAorICAgICMgb3IgMCBpZiBub3QgaW4gYSBub3JtYWwgY29tbWVudCBibG9jaworICAgIG15ICRibG9ja19zdGFydCA9IDA7CisgICAgd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKyAgICAgICAgJGJsb2NrX3N0YXJ0ID0gJC4gICBpZiAkbGluZSA9fiBtL1wvXCooPyFbKiFdKS87CisgICAgICAgICRibG9ja19zdGFydCA9IDAgICAgaWYgJGxpbmUgPX4gbS9cKlwvLzsKKyAgICAgICAgaWYgKCRibG9ja19zdGFydCBhbmQgJGxpbmUgPX4gbS8kZG94eV9yZS8pIHsKKyAgICAgICAgICAgIHByaW50ICIkZm5hbWU6JGJsb2NrX3N0YXJ0OiBkaXJlY3RpdmUgb24gbGluZSAkLlxuIjsKKyAgICAgICAgICAgICRibG9ja19zdGFydCA9IDA7ICMgcmVwb3J0IG9ubHkgb25lIGRpcmVjdGl2ZSBwZXIgYmxvY2sKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlICRmaDsKK30KKworc3ViIGNoZWNrX2RpciB7CisgICAgbXkgKCRkaXJuYW1lKSA9IEBfOworICAgIGZvciBteSAkZmlsZSAoPCRkaXJuYW1lLyouW2NoXT4pIHsKKyAgICAgICAgY2hlY2tfZmlsZSgkZmlsZSk7CisgICAgfQorfQorCisjIGxvY2F0ZSByb290IGRpcmVjdG9yeSBiYXNlZCBvbiBpbnZvY2F0aW9uIG5hbWUKK215ICRyb290ID0gZGlybmFtZSgkMCkgLiAnLy4uJzsKK2NoZGlyICRyb290IG9yIGRpZSAiQ2FuJ3QgY2hkaXIgdG8gJyRyb290JzogJCFcbiI7CisKKyMganVzdCBkbyBpdAorZm9yIG15ICRkaXIgKEBkaXJlY3RvcmllcykgeworICAgIGNoZWNrX2RpcigkZGlyKQorfQorCitfX0VORF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDQwMGJjNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2NoZWNrLWdlbmVyYXRlZC1maWxlcy5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKworIyBjaGVjayBpZiBnZW5lcmF0ZWQgZmlsZXMgYXJlIHVwLXRvLWRhdGUKKworc2V0IC1ldQorCitpZiBbIC1kIGxpYnJhcnkgLWEgLWQgaW5jbHVkZSAtYSAtZCB0ZXN0cyBdOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICJNdXN0IGJlIHJ1biBmcm9tIG1iZWQgVExTIHJvb3QiID4mMgorICAgIGV4aXQgMQorZmkKKworY2hlY2soKQoreworICAgIEZJTEU9JDEKKyAgICBTQ1JJUFQ9JDIKKworICAgIGNwICRGSUxFICRGSUxFLmJhaworICAgICRTQ1JJUFQKKyAgICBkaWZmICRGSUxFICRGSUxFLmJhaworICAgIG12ICRGSUxFLmJhayAkRklMRQorfQorCitjaGVjayBsaWJyYXJ5L2Vycm9yLmMgc2NyaXB0cy9nZW5lcmF0ZV9lcnJvcnMucGwKK2NoZWNrIGxpYnJhcnkvdmVyc2lvbl9mZWF0dXJlcy5jIHNjcmlwdHMvZ2VuZXJhdGVfZmVhdHVyZXMucGwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2NoZWNrLW5hbWVzLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY2hlY2stbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTkxNTk0YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2NoZWNrLW5hbWVzLnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIFRoaXMgc2NyaXB0IGNvbmZpcm1zIHRoYXQgdGhlIG5hbWluZyBvZiBhbGwgc3ltYm9scyBhbmQgaWRlbnRpZmllcnMgaW4gbWJlZAorIyBUTFMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaG91c2Ugc3R5bGUgYW5kIGFyZSBhbHNvIHNlbGYtY29uc2lzdGVudC4KKyMKK3NldCAtZXUKKworaWYgZ3JlcCAtLXZlcnNpb258aGVhZCAtbjF8Z3JlcCBHTlUgPi9kZXYvbnVsbDsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiVGhpcyBzY3JpcHQgcmVxdWlyZXMgR05VIGdyZXAuIgorICAgIGV4aXQgMQorZmkKKworcHJpbnRmICJBbmFseXNpbmcgc291cmNlIGNvZGUuLi5cbiIKKwordGVzdHMvc2NyaXB0cy9saXN0LW1hY3Jvcy5zaAordGVzdHMvc2NyaXB0cy9saXN0LWVudW0tY29uc3RzLnBsCit0ZXN0cy9zY3JpcHRzL2xpc3QtaWRlbnRpZmllcnMuc2gKK3Rlc3RzL3NjcmlwdHMvbGlzdC1zeW1ib2xzLnNoCisKK0ZBSUw9MAorCitwcmludGYgIlxuRXhwb3J0ZWQgc3ltYm9scyBkZWNsYXJlZCBpbiBoZWFkZXI6ICIKK1VOREVDTEFSRUQ9JCggZGlmZiBleHBvcnRlZC1zeW1ib2xzIGlkZW50aWZpZXJzIHwgc2VkIC1uIC1lICdzL148IC8vcCcgKQoraWYgWyAieCRVTkRFQ0xBUkVEIiA9ICJ4IiBdOyB0aGVuCisgICAgZWNobyAiUEFTUyIKK2Vsc2UKKyAgICBlY2hvICJGQUlMIgorICAgIGVjaG8gIiRVTkRFQ0xBUkVEIgorICAgIEZBSUw9MQorZmkKKworZGlmZiBtYWNyb3MgaWRlbnRpZmllcnMgfCBzZWQgLW4gLWUgJ3MvPCAvL3AnID4gYWN0dWFsLW1hY3JvcworCitmb3IgVEhJTkcgaW4gYWN0dWFsLW1hY3JvcyBlbnVtLWNvbnN0czsgZG8KKyAgICBwcmludGYgIk5hbWVzIG9mICRUSElORzogIgorICAgIHRlc3QgLXIgJFRISU5HCisgICAgQkFEPSQoIGdyZXAgLXYgJ15NQkVEVExTX1swLTlBLVpfXSpbMC05QS1aXSRcfF5ZT1RUQV9bMC05QS1aX10qWzAtOUEtWl0kJyAkVEhJTkcgfHwgdHJ1ZSApCisgICAgaWYgWyAieCRCQUQiID0gIngiIF07IHRoZW4KKyAgICAgICAgZWNobyAiUEFTUyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkZBSUwiCisgICAgICAgIGVjaG8gIiRCQUQiCisgICAgICAgIEZBSUw9MQorICAgIGZpCitkb25lCisKK2ZvciBUSElORyBpbiBpZGVudGlmaWVyczsgZG8KKyAgICBwcmludGYgIk5hbWVzIG9mICRUSElORzogIgorICAgIHRlc3QgLXIgJFRISU5HCisgICAgQkFEPSQoIGdyZXAgLXYgJ15tYmVkdGxzX1swLTlhLXpfXSpbMC05YS16XSQnICRUSElORyB8fCB0cnVlICkKKyAgICBpZiBbICJ4JEJBRCIgPSAieCIgXTsgdGhlbgorICAgICAgICBlY2hvICJQQVNTIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICAgICAgZWNobyAiJEJBRCIKKyAgICAgICAgRkFJTD0xCisgICAgZmkKK2RvbmUKKworcHJpbnRmICJMaWtlbHkgdHlwb3M6ICIKK3NvcnQgLXUgYWN0dWFsLW1hY3JvcyBlbnVtLWNvbnN0cyA+IF9jYXBzCitIRUFERVJTPSQoIGxzIGluY2x1ZGUvbWJlZHRscy8qLmggfCBlZ3JlcCAtdiAnY29tcGF0LTFcLjNcLmgnICkKK05MPScKKycKK3NlZCAtbiAncy9NQkVELi4uX1tBLVowLTlfXSovXCciJE5MIicmXCciJE5MIi9ncCBcCisgICAgJEhFQURFUlMgbGlicmFyeS8qLmMgXAorICAgIHwgZ3JlcCBNQkVEVExTIHwgc29ydCAtdSA+IF9NQkVEVExTX1hYWAorVFlQT1M9JCggZGlmZiBfY2FwcyBfTUJFRFRMU19YWFggfCBzZWQgLW4gJ3MvXj4gLy9wJyBcCisgICAgICAgICAgICB8IGVncmVwIC12ICdYWFh8X198XyR8Xk1CRURUTFNfLipDT05GSUdfRklMRSQnIHx8IHRydWUgKQorcm0gX01CRURUTFNfWFhYIF9jYXBzCitpZiBbICJ4JFRZUE9TIiA9ICJ4IiBdOyB0aGVuCisgICAgZWNobyAiUEFTUyIKK2Vsc2UKKyAgICBlY2hvICJGQUlMIgorICAgIGVjaG8gIiRUWVBPUyIKKyAgICBGQUlMPTEKK2ZpCisKK3ByaW50ZiAiXG5PdmVyYWxsOiAiCitpZiBbICIkRkFJTCIgLWVxIDAgXTsgdGhlbgorICAgIHJtIG1hY3JvcyBhY3R1YWwtbWFjcm9zIGVudW0tY29uc3RzIGlkZW50aWZpZXJzIGV4cG9ydGVkLXN5bWJvbHMKKyAgICBlY2hvICJQQVNTRUQiCisgICAgZXhpdCAwCitlbHNlCisgICAgZWNobyAiRkFJTEVEIgorICAgIGV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWViN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvY3VydmVzLnBsCkBAIC0wLDAgKzEsNjAgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIGN1cnZlcy5wbAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBUbyB0ZXN0IHRoZSBjb2RlIGRlcGVuZGVuY2llcyBvbiBpbmRpdmlkdWFsIGN1cnZlcyBpbiBlYWNoIHRlc3Qgc3VpdGUuIFRoaXMKKyMgaXMgYSB2ZXJpZmljYXRpb24gc3RlcCB0byBlbnN1cmUgd2UgZG9uJ3Qgc2hpcCB0ZXN0IHN1aXRlcyB0aGF0IGRvIG5vdCB3b3JrCisjIGZvciBzb21lIGJ1aWxkIG9wdGlvbnMuCisjCisjIFRoZSBwcm9jZXNzIGlzOgorIyAgICAgICBmb3IgZWFjaCBwb3NzaWJsZSBjdXJ2ZQorIyAgICAgICAgICAgYnVpbGQgdGhlIGxpYnJhcnkgYW5kIHRlc3Qgc3VpdGVzIHdpdGggdGhlIGN1cnZlIGRpc2FibGVkCisjICAgICAgICAgICBleGVjdXRlIHRoZSB0ZXN0IHN1aXRlcworIworIyBBbmQgYW55IHRlc3Qgc3VpdGUgd2l0aCB0aGUgd3JvbmcgZGVwZW5kZW5jaWVzIHdpbGwgZmFpbC4KKyMKKyMgVXNhZ2U6IGN1cnZlcy5wbAorIworIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdCBkaXJlY3RvcnkuCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKKy1kICdsaWJyYXJ5JyAmJiAtZCAnaW5jbHVkZScgJiYgLWQgJ3Rlc3RzJyBvciBkaWUgIk11c3QgYmUgcnVuIGZyb20gcm9vdFxuIjsKKworbXkgJHNlZF9jbWQgPSAncy9eI2RlZmluZSBcKE1CRURUTFNfRUNQX0RQLipfRU5BQkxFRFwpL1wxL3AnOworbXkgJGNvbmZpZ19oID0gJ2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCc7CitteSBAY3VydmVzID0gc3BsaXQoIC9ccysvLCBgc2VkIC1uIC1lICckc2VkX2NtZCcgJGNvbmZpZ19oYCApOworCitzeXN0ZW0oICJjcCAkY29uZmlnX2ggJGNvbmZpZ19oLmJhayIgKSBhbmQgZGllOworc3ViIGFib3J0IHsKKyAgICBzeXN0ZW0oICJtdiAkY29uZmlnX2guYmFrICRjb25maWdfaCIgKSBhbmQgd2FybiAiJGNvbmZpZ19oIG5vdCByZXN0b3JlZFxuIjsKKyAgICBkaWUgJF9bMF07Cit9CisKK2ZvciBteSAkY3VydmUgKEBjdXJ2ZXMpIHsKKyAgICBzeXN0ZW0oICJjcCAkY29uZmlnX2guYmFrICRjb25maWdfaCIgKSBhbmQgZGllICIkY29uZmlnX2ggbm90IHJlc3RvcmVkXG4iOworICAgICMgZGVwZW5kcyBvbiBhIHNwZWNpZmljIGN1cnZlLiBBbHNvLCBpZ25vcmUgZXJyb3IgaWYgaXQgd2Fzbid0IGVuYWJsZWQKKyAgICBzeXN0ZW0oICJzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFX0VOQUJMRUQiICk7CisgICAgc3lzdGVtKCAibWFrZSBjbGVhbiIgKSBhbmQgZGllOworCisgICAgcHJpbnQgIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOworICAgIHByaW50ICIqIFRlc3Rpbmcgd2l0aG91dCBjdXJ2ZTogJGN1cnZlXG4iOworICAgIHByaW50ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CisKKyAgICBzeXN0ZW0oICJzY3JpcHRzL2NvbmZpZy5wbCB1bnNldCAkY3VydmUiICkKKyAgICAgICAgYW5kIGFib3J0ICJGYWlsZWQgdG8gZGlzYWJsZSAkY3VydmVcbiI7CisKKyAgICBzeXN0ZW0oICJtYWtlIGxpYiIgKSBhbmQgYWJvcnQgIkZhaWxlZCB0byBidWlsZCBsaWI6ICRjdXJ2ZVxuIjsKKyAgICBzeXN0ZW0oICJjZCB0ZXN0cyAmJiBtYWtlIiApIGFuZCBhYm9ydCAiRmFpbGVkIHRvIGJ1aWxkIHRlc3RzOiAkY3VydmVcbiI7CisgICAgc3lzdGVtKCAibWFrZSB0ZXN0IiApIGFuZCBhYm9ydCAiRmFpbGVkIHRlc3Qgc3VpdGU6ICRjdXJ2ZVxuIjsKKworfQorCitzeXN0ZW0oICJtdiAkY29uZmlnX2guYmFrICRjb25maWdfaCIgKSBhbmQgZGllICIkY29uZmlnX2ggbm90IHJlc3RvcmVkXG4iOworc3lzdGVtKCAibWFrZSBjbGVhbiIgKSBhbmQgZGllOworZXhpdCAwOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZG94eWdlbi5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2RveHlnZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc3NThjOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2RveHlnZW4uc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKKyMgTWFrZSBzdXJlIHRoZSBkb3h5Z2VuIGRvY3VtZW50YXRpb24gYnVpbGRzIHdpdGhvdXQgd2FybmluZ3MKKworIyBBYm9ydCBvbiBlcnJvcnMgKGFuZCB1bmluaXRpbGlhc2VkIHZhcmlhYmxlcykKK3NldCAtZXUKKworaWYgWyAtZCBsaWJyYXJ5IC1hIC1kIGluY2x1ZGUgLWEgLWQgdGVzdHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiTXVzdCBiZSBydW4gZnJvbSBtYmVkIFRMUyByb290IiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK2lmIHNjcmlwdHMvYXBpZG9jX2Z1bGwuc2ggPiBkb2Mub3V0IDI+ZG9jLmVycjsgdGhlbiA6OyBlbHNlCisgICAgY2F0IGRvYy5lcnIKKyAgICBlY2hvICJGQUlMIiA+JjIKKyAgICBleGl0IDE7CitmaQorCitjYXQgZG9jLm91dCBkb2MuZXJyIHwgXAorICAgIGdyZXAgLXYgIndhcm5pbmc6IGlnbm9yaW5nIHVuc3VwcG9ydGVkIHRhZyIgXAorICAgID4gZG9jLmZpbHRlcmVkCisKK2lmIGVncmVwICIod2FybmluZ3xlcnJvcik6IiBkb2MuZmlsdGVyZWQ7IHRoZW4KKyAgICBlY2hvICJGQUlMIiA+JjIKKyAgICBleGl0IDE7CitmaQorCittYWtlIGFwaWRvY19jbGVhbgorcm0gLWYgZG9jLm91dCBkb2MuZXJyIGRvYy5maWx0ZXJlZApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX2N0cl9kcmJnLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX2N0cl9kcmJnLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2ZDliM2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5fY3RyX2RyYmcucGwKQEAgLTAsMCArMSw5MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIEJhc2VkIG9uIE5JU1QgQ1RSX0RSQkcucnNwIHZhbGlkYXRpb24gZmlsZQorIyBPbmx5IHVzZXMgQUVTLTI1Ni1DVFIgY2FzZXMgdGhhdCB1c2UgYSBEZXJpdmF0aW9uIGZ1bmN0aW9uCisjIGFuZCBjb25jYXRzIG5vbmNlIGFuZCBwZXJzb25hbGl6YXRpb24gZm9yIGluaXRpYWxpemF0aW9uLgorCit1c2Ugc3RyaWN0OworCitteSAkZmlsZSA9IHNoaWZ0OworCitvcGVuKFRFU1RfREFUQSwgIiRmaWxlIikgb3IgZGllICJPcGVuaW5nIHRlc3QgY2FzZXMgJyRmaWxlJzogJCEiOworCitzdWIgZ2V0X3N1aXRlX3ZhbCgkKQoreworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCA9ICIiOworCisgICAgbXkgJGxpbmUgPSA8VEVTVF9EQVRBPjsKKyAgICAoJHZhbCkgPSAoJGxpbmUgPX4gL1xbJG5hbWVcc1w9XHMoXHcrKVxdLyk7CisKKyAgICByZXR1cm4gJHZhbDsKK30KKworc3ViIGdldF92YWwoJCkKK3sKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICR2YWwgPSAiIjsKKyAgICBteSAkbGluZTsKKworICAgIHdoaWxlKCRsaW5lID0gPFRFU1RfREFUQT4pCisgICAgeworICAgICAgICBuZXh0IGlmKCRsaW5lICF+IC89Lyk7CisgICAgICAgIGxhc3Q7CisgICAgfQorCisgICAgKCR2YWwpID0gKCRsaW5lID1+IC9eJG5hbWUgPSAoXHcrKS8pOworCisgICAgcmV0dXJuICR2YWw7Cit9CisKK215ICRjbnQgPSAxOzsKK3doaWxlIChteSAkbGluZSA9IDxURVNUX0RBVEE+KQoreworICAgIG5leHQgaWYgKCRsaW5lICF+IC9eXFtBRVMtMjU2IHVzZSBkZi8pOworCisgICAgbXkgJFByZWRpY3Rpb25SZXNpc3RhbmNlU3RyID0gZ2V0X3N1aXRlX3ZhbCgiUHJlZGljdGlvblJlc2lzdGFuY2UiKTsKKyAgICBteSAkUHJlZGljdGlvblJlc2lzdGFuY2UgPSAwOworICAgICRQcmVkaWN0aW9uUmVzaXN0YW5jZSA9IDEgaWYgKCRQcmVkaWN0aW9uUmVzaXN0YW5jZVN0ciBlcSAnVHJ1ZScpOworICAgIG15ICRFbnRyb3B5SW5wdXRMZW4gPSBnZXRfc3VpdGVfdmFsKCJFbnRyb3B5SW5wdXRMZW4iKTsKKyAgICBteSAkTm9uY2VMZW4gPSBnZXRfc3VpdGVfdmFsKCJOb25jZUxlbiIpOworICAgIG15ICRQZXJzb25hbGl6YXRpb25TdHJpbmdMZW4gPSBnZXRfc3VpdGVfdmFsKCJQZXJzb25hbGl6YXRpb25TdHJpbmdMZW4iKTsKKyAgICBteSAkQWRkaXRpb25hbElucHV0TGVuID0gZ2V0X3N1aXRlX3ZhbCgiQWRkaXRpb25hbElucHV0TGVuIik7CisKKyAgICBmb3IgKCRjbnQgPSAwOyAkY250IDwgMTU7ICRjbnQrKykKKyAgICB7CisgICAgICAgIG15ICRDb3VudCA9IGdldF92YWwoIkNPVU5UIik7CisgICAgICAgIG15ICRFbnRyb3B5SW5wdXQgPSBnZXRfdmFsKCJFbnRyb3B5SW5wdXQiKTsKKyAgICAgICAgbXkgJE5vbmNlID0gZ2V0X3ZhbCgiTm9uY2UiKTsKKyAgICAgICAgbXkgJFBlcnNvbmFsaXphdGlvblN0cmluZyA9IGdldF92YWwoIlBlcnNvbmFsaXphdGlvblN0cmluZyIpOworICAgICAgICBteSAkQWRkaXRpb25hbElucHV0MSA9IGdldF92YWwoIkFkZGl0aW9uYWxJbnB1dCIpOworICAgICAgICBteSAkRW50cm9weUlucHV0UFIxID0gZ2V0X3ZhbCgiRW50cm9weUlucHV0UFIiKSBpZiAoJFByZWRpY3Rpb25SZXNpc3RhbmNlID09IDEpOworICAgICAgICBteSAkRW50cm9weUlucHV0UmVzZWVkID0gZ2V0X3ZhbCgiRW50cm9weUlucHV0UmVzZWVkIikgaWYgKCRQcmVkaWN0aW9uUmVzaXN0YW5jZSA9PSAwKTsKKyAgICAgICAgbXkgJEFkZGl0aW9uYWxJbnB1dFJlc2VlZCA9IGdldF92YWwoIkFkZGl0aW9uYWxJbnB1dFJlc2VlZCIpIGlmICgkUHJlZGljdGlvblJlc2lzdGFuY2UgPT0gMCk7CisgICAgICAgIG15ICRBZGRpdGlvbmFsSW5wdXQyID0gZ2V0X3ZhbCgiQWRkaXRpb25hbElucHV0Iik7CisgICAgICAgIG15ICRFbnRyb3B5SW5wdXRQUjIgPSBnZXRfdmFsKCJFbnRyb3B5SW5wdXRQUiIpIGlmICgkUHJlZGljdGlvblJlc2lzdGFuY2UgPT0gMSk7CisgICAgICAgIG15ICRSZXR1cm5lZEJpdHMgPSBnZXRfdmFsKCJSZXR1cm5lZEJpdHMiKTsKKyAgICAKKyAgICAgICAgaWYgKCRQcmVkaWN0aW9uUmVzaXN0YW5jZSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCgiQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZiwkUHJlZGljdGlvblJlc2lzdGFuY2VTdHIsJEVudHJvcHlJbnB1dExlbiwkTm9uY2VMZW4sJFBlcnNvbmFsaXphdGlvblN0cmluZ0xlbiwkQWRkaXRpb25hbElucHV0TGVuKSAjJENvdW50XG4iKTsKKyAgICAgICAgICAgIHByaW50KCJjdHJfZHJiZ192YWxpZGF0ZV9wciIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiROb25jZSRQZXJzb25hbGl6YXRpb25TdHJpbmdcIiIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiRFbnRyb3B5SW5wdXQkRW50cm9weUlucHV0UFIxJEVudHJvcHlJbnB1dFBSMlwiIik7CisgICAgICAgICAgICBwcmludCgiOlwiJEFkZGl0aW9uYWxJbnB1dDFcIiIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiRBZGRpdGlvbmFsSW5wdXQyXCIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkUmV0dXJuZWRCaXRzXCIiKTsKKyAgICAgICAgICAgIHByaW50KCJcblxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCgiQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZiwkUHJlZGljdGlvblJlc2lzdGFuY2VTdHIsJEVudHJvcHlJbnB1dExlbiwkTm9uY2VMZW4sJFBlcnNvbmFsaXphdGlvblN0cmluZ0xlbiwkQWRkaXRpb25hbElucHV0TGVuKSAjJENvdW50XG4iKTsKKyAgICAgICAgICAgIHByaW50KCJjdHJfZHJiZ192YWxpZGF0ZV9ub3ByIik7CisgICAgICAgICAgICBwcmludCgiOlwiJE5vbmNlJFBlcnNvbmFsaXphdGlvblN0cmluZ1wiIik7CisgICAgICAgICAgICBwcmludCgiOlwiJEVudHJvcHlJbnB1dCRFbnRyb3B5SW5wdXRSZXNlZWRcIiIpOworICAgICAgICAgICAgcHJpbnQoIjpcIiRBZGRpdGlvbmFsSW5wdXQxXCIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkQWRkaXRpb25hbElucHV0UmVzZWVkXCIiKTsKKyAgICAgICAgICAgIHByaW50KCI6XCIkQWRkaXRpb25hbElucHV0MlwiIik7CisgICAgICAgICAgICBwcmludCgiOlwiJFJldHVybmVkQml0c1wiIik7CisgICAgICAgICAgICBwcmludCgiXG5cbiIpOworICAgICAgICB9CisgICAgfQorfQorY2xvc2UoVEVTVF9EQVRBKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9nY21fZGVjcnlwdC5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9nY21fZGVjcnlwdC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZGVjYWMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX2djbV9kZWNyeXB0LnBsCkBAIC0wLDAgKzEsOTggQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBCYXNlZCBvbiBOSVNUIGdjbURlY3J5cHR4eHgucnNwIHZhbGlkYXRpb24gZmlsZXMKKyMgT25seSBmaXJzdCAzIG9mIGV2ZXJ5IHNldCB1c2VkIGZvciBjb21waWxlIHRpbWUgc2F2aW5nCisKK3VzZSBzdHJpY3Q7CisKK215ICRmaWxlID0gc2hpZnQ7CisKK29wZW4oVEVTVF9EQVRBLCAiJGZpbGUiKSBvciBkaWUgIk9wZW5pbmcgdGVzdCBjYXNlcyAnJGZpbGUnOiAkISI7CisKK3N1YiBnZXRfc3VpdGVfdmFsKCQpCit7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsID0gIiI7CisKKyAgICB3aGlsZShteSAkbGluZSA9IDxURVNUX0RBVEE+KQorICAgIHsKKyAgICAgICAgbmV4dCBpZiAoJGxpbmUgIX4gL15cWy8pOworICAgICAgICAoJHZhbCkgPSAoJGxpbmUgPX4gL1xbJG5hbWVcc1w9XHMoXHcrKVxdLyk7CisgICAgICAgIGxhc3Q7CisgICAgfQorCisgICAgcmV0dXJuICR2YWw7Cit9CisKK3N1YiBnZXRfdmFsKCQpCit7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsID0gIiI7CisgICAgbXkgJGxpbmU7CisKKyAgICB3aGlsZSgkbGluZSA9IDxURVNUX0RBVEE+KQorICAgIHsKKyAgICAgICAgbmV4dCBpZigkbGluZSAhfiAvPS8pOworICAgICAgICBsYXN0OworICAgIH0KKworICAgICgkdmFsKSA9ICgkbGluZSA9fiAvXiRuYW1lID0gKFx3KykvKTsKKworICAgIHJldHVybiAkdmFsOworfQorCitzdWIgZ2V0X3ZhbF9vcl9mYWlsKCQpCit7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsID0gIkZBSUwiOworICAgIG15ICRsaW5lOworCisgICAgd2hpbGUoJGxpbmUgPSA8VEVTVF9EQVRBPikKKyAgICB7CisgICAgICAgIG5leHQgaWYoJGxpbmUgIX4gLz0vICYmICRsaW5lICF+IC9GQUlMLyk7CisgICAgICAgIGxhc3Q7CisgICAgfQorCisgICAgKCR2YWwpID0gKCRsaW5lID1+IC9eJG5hbWUgPSAoXHcrKS8pIGlmICgkbGluZSA9fiAvPS8pOworCisgICAgcmV0dXJuICR2YWw7Cit9CisKK215ICRjbnQgPSAxOzsKK3doaWxlIChteSAkbGluZSA9IDxURVNUX0RBVEE+KQoreworICAgIG15ICRrZXlfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiS2V5bGVuIik7CisgICAgbmV4dCBpZiAoJGtleV9sZW4gIX4gL1xkKy8pOworICAgIG15ICRpdl9sZW4gPSBnZXRfc3VpdGVfdmFsKCJJVmxlbiIpOworICAgIG15ICRwdF9sZW4gPSBnZXRfc3VpdGVfdmFsKCJQVGxlbiIpOworICAgIG15ICRhZGRfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiQUFEbGVuIik7CisgICAgbXkgJHRhZ19sZW4gPSBnZXRfc3VpdGVfdmFsKCJUYWdsZW4iKTsKKworICAgIGZvciAoJGNudCA9IDA7ICRjbnQgPCAzOyAkY250KyspCisgICAgeworICAgICAgICBteSAkQ291bnQgPSBnZXRfdmFsKCJDb3VudCIpOworICAgICAgICBteSAka2V5ID0gZ2V0X3ZhbCgiS2V5Iik7CisgICAgICAgIG15ICRpdiA9IGdldF92YWwoIklWIik7CisgICAgICAgIG15ICRjdCA9IGdldF92YWwoIkNUIik7CisgICAgICAgIG15ICRhZGQgPSBnZXRfdmFsKCJBQUQiKTsKKyAgICAgICAgbXkgJHRhZyA9IGdldF92YWwoIlRhZyIpOworICAgICAgICBteSAkcHQgPSBnZXRfdmFsX29yX2ZhaWwoIlBUIik7CisKKyAgICAgICAgcHJpbnQoIkdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0ka2V5X2xlbiwkaXZfbGVuLCRwdF9sZW4sJGFkZF9sZW4sJHRhZ19sZW4pICMkQ291bnRcbiIpOworICAgICAgICBwcmludCgiZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeSIpOworICAgICAgICBwcmludCgiOlwiJGtleVwiIik7CisgICAgICAgIHByaW50KCI6XCIkY3RcIiIpOworICAgICAgICBwcmludCgiOlwiJGl2XCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRhZGRcIiIpOworICAgICAgICBwcmludCgiOiR0YWdfbGVuIik7CisgICAgICAgIHByaW50KCI6XCIkdGFnXCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRwdFwiIik7CisgICAgICAgIHByaW50KCI6MCIpOworICAgICAgICBwcmludCgiXG5cbiIpOworICAgIH0KK30KKworcHJpbnQoIkdDTSBTZWxmdGVzdFxuIik7CitwcmludCgiZ2NtX3NlbGZ0ZXN0OlxuXG4iKTsKKworY2xvc2UoVEVTVF9EQVRBKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9nY21fZW5jcnlwdC5wbCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbl9nY21fZW5jcnlwdC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YWRiYmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX2djbV9lbmNyeXB0LnBsCkBAIC0wLDAgKzEsODEgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBCYXNlZCBvbiBOSVNUIGdjbUVuY3J5cHRJbnRJVnh4eC5yc3AgdmFsaWRhdGlvbiBmaWxlcworIyBPbmx5IGZpcnN0IDMgb2YgZXZlcnkgc2V0IHVzZWQgZm9yIGNvbXBpbGUgdGltZSBzYXZpbmcKKwordXNlIHN0cmljdDsKKworbXkgJGZpbGUgPSBzaGlmdDsKKworb3BlbihURVNUX0RBVEEsICIkZmlsZSIpIG9yIGRpZSAiT3BlbmluZyB0ZXN0IGNhc2VzICckZmlsZSc6ICQhIjsKKworc3ViIGdldF9zdWl0ZV92YWwoJCkKK3sKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICR2YWwgPSAiIjsKKworICAgIHdoaWxlKG15ICRsaW5lID0gPFRFU1RfREFUQT4pCisgICAgeworICAgICAgICBuZXh0IGlmICgkbGluZSAhfiAvXlxbLyk7CisgICAgICAgICgkdmFsKSA9ICgkbGluZSA9fiAvXFskbmFtZVxzXD1ccyhcdyspXF0vKTsKKyAgICAgICAgbGFzdDsKKyAgICB9CisKKyAgICByZXR1cm4gJHZhbDsKK30KKworc3ViIGdldF92YWwoJCkKK3sKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICR2YWwgPSAiIjsKKyAgICBteSAkbGluZTsKKworICAgIHdoaWxlKCRsaW5lID0gPFRFU1RfREFUQT4pCisgICAgeworICAgICAgICBuZXh0IGlmKCRsaW5lICF+IC89Lyk7CisgICAgICAgIGxhc3Q7CisgICAgfQorCisgICAgKCR2YWwpID0gKCRsaW5lID1+IC9eJG5hbWUgPSAoXHcrKS8pOworCisgICAgcmV0dXJuICR2YWw7Cit9CisKK215ICRjbnQgPSAxOzsKK3doaWxlIChteSAkbGluZSA9IDxURVNUX0RBVEE+KQoreworICAgIG15ICRrZXlfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiS2V5bGVuIik7CisgICAgbmV4dCBpZiAoJGtleV9sZW4gIX4gL1xkKy8pOworICAgIG15ICRpdl9sZW4gPSBnZXRfc3VpdGVfdmFsKCJJVmxlbiIpOworICAgIG15ICRwdF9sZW4gPSBnZXRfc3VpdGVfdmFsKCJQVGxlbiIpOworICAgIG15ICRhZGRfbGVuID0gZ2V0X3N1aXRlX3ZhbCgiQUFEbGVuIik7CisgICAgbXkgJHRhZ19sZW4gPSBnZXRfc3VpdGVfdmFsKCJUYWdsZW4iKTsKKworICAgIGZvciAoJGNudCA9IDA7ICRjbnQgPCAzOyAkY250KyspCisgICAgeworICAgICAgICBteSAkQ291bnQgPSBnZXRfdmFsKCJDb3VudCIpOworICAgICAgICBteSAka2V5ID0gZ2V0X3ZhbCgiS2V5Iik7CisgICAgICAgIG15ICRwdCA9IGdldF92YWwoIlBUIik7CisgICAgICAgIG15ICRhZGQgPSBnZXRfdmFsKCJBQUQiKTsKKyAgICAgICAgbXkgJGl2ID0gZ2V0X3ZhbCgiSVYiKTsKKyAgICAgICAgbXkgJGN0ID0gZ2V0X3ZhbCgiQ1QiKTsKKyAgICAgICAgbXkgJHRhZyA9IGdldF92YWwoIlRhZyIpOworCisgICAgICAgIHByaW50KCJHQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtJGtleV9sZW4sJGl2X2xlbiwkcHRfbGVuLCRhZGRfbGVuLCR0YWdfbGVuKSAjJENvdW50XG4iKTsKKyAgICAgICAgcHJpbnQoImdjbV9lbmNyeXB0X2FuZF90YWciKTsKKyAgICAgICAgcHJpbnQoIjpcIiRrZXlcIiIpOworICAgICAgICBwcmludCgiOlwiJHB0XCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRpdlwiIik7CisgICAgICAgIHByaW50KCI6XCIkYWRkXCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiRjdFwiIik7CisgICAgICAgIHByaW50KCI6JHRhZ19sZW4iKTsKKyAgICAgICAgcHJpbnQoIjpcIiR0YWdcIiIpOworICAgICAgICBwcmludCgiOjAiKTsKKyAgICAgICAgcHJpbnQoIlxuXG4iKTsKKyAgICB9Cit9CisKK3ByaW50KCJHQ00gU2VsZnRlc3RcbiIpOworcHJpbnQoImdjbV9zZWxmdGVzdDpcblxuIik7CisKK2Nsb3NlKFRFU1RfREFUQSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5fcGtjczFfdjIxX3NpZ25fdmVyaWZ5LnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX3BrY3MxX3YyMV9zaWduX3ZlcmlmeS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDdmYzdkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuX3BrY3MxX3YyMV9zaWduX3ZlcmlmeS5wbApAQCAtMCwwICsxLDcyIEBACisjIS91c3IvYmluL3BlcmwKKyMKKwordXNlIHN0cmljdDsKKworbXkgJGZpbGUgPSBzaGlmdDsKKworb3BlbihURVNUX0RBVEEsICIkZmlsZSIpIG9yIGRpZSAiT3BlbmluZyB0ZXN0IGNhc2VzICckZmlsZSc6ICQhIjsKKworc3ViIGdldF92YWwoJCQpCit7CisgICAgbXkgJHN0ciA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCA9ICIiOworCisgICAgd2hpbGUobXkgJGxpbmUgPSA8VEVTVF9EQVRBPikKKyAgICB7CisgICAgICAgIG5leHQgaWYoJGxpbmUgIX4gL14jICRzdHIvKTsKKyAgICAgICAgbGFzdDsKKyAgICB9CisgICAgICAgIAorICAgIHdoaWxlKG15ICRsaW5lID0gPFRFU1RfREFUQT4pCisgICAgeworICAgICAgICBsYXN0IGlmKCRsaW5lIGVxICJcclxuIik7IAorICAgICAgICAkdmFsIC49ICRsaW5lOworICAgIH0KKworICAgICR2YWwgPX4gcy9bIFxyXG5dLy9nOworCisgICAgcmV0dXJuICR2YWw7Cit9CisKK215ICRzdGF0ZSA9IDA7CitteSAkdmFsX24gPSAiIjsKK215ICR2YWxfZSA9ICIiOworbXkgJHZhbF9wID0gIiI7CitteSAkdmFsX3EgPSAiIjsKK215ICRtb2QgPSAwOworbXkgJGNudCA9IDE7Cit3aGlsZSAobXkgJGxpbmUgPSA8VEVTVF9EQVRBPikKK3sKKyAgICBuZXh0IGlmICgkbGluZSAhfiAvXiMgRXhhbXBsZS8pOworCisgICAgKCAkbW9kICkgPSAoJGxpbmUgPX4gL0EgKFxkKykvKTsKKyAgICAkdmFsX24gPSBnZXRfdmFsKCJSU0EgbW9kdWx1cyBuIiwgIk4iKTsKKyAgICAkdmFsX2UgPSBnZXRfdmFsKCJSU0EgcHVibGljIGV4cG9uZW50IGUiLCAiRSIpOworICAgICR2YWxfcCA9IGdldF92YWwoIlByaW1lIHAiLCAiUCIpOworICAgICR2YWxfcSA9IGdldF92YWwoIlByaW1lIHEiLCAiUSIpOworCisgICAgZm9yKG15ICRpID0gMTsgJGkgPD0gNjsgJGkrKykKKyAgICB7CisgICAgICAgIG15ICR2YWxfbSA9IGdldF92YWwoIk1lc3NhZ2UgdG8gYmUiLCAiTSIpOworICAgICAgICBteSAkdmFsX3NhbHQgPSBnZXRfdmFsKCJTYWx0IiwgIlNhbHQiKTsKKyAgICAgICAgbXkgJHZhbF9zaWcgPSBnZXRfdmFsKCJTaWduYXR1cmUiLCAiU2lnIik7CisKKyAgICAgICAgcHJpbnQoIlJTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgJHtjbnR9XyR7aX1cbiIpOworICAgICAgICBwcmludCgicGtjczFfcnNhc3NhX3Bzc19zaWduOiRtb2Q6MTY6XCIkdmFsX3BcIjoxNjpcIiR2YWxfcVwiOjE2OlwiJHZhbF9uXCI6MTY6XCIkdmFsX2VcIjpTSUdfUlNBX1NIQTE6TUJFRFRMU19NRF9TSEExIik7CisgICAgICAgIHByaW50KCI6XCIkdmFsX21cIiIpOworICAgICAgICBwcmludCgiOlwiJHZhbF9zYWx0XCIiKTsKKyAgICAgICAgcHJpbnQoIjpcIiR2YWxfc2lnXCI6MCIpOworICAgICAgICBwcmludCgiXG5cbiIpOworCisgICAgICAgIHByaW50KCJSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlICR7Y250fV8ke2l9ICh2ZXJpZnkpXG4iKTsKKyAgICAgICAgcHJpbnQoInBrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OiRtb2Q6MTY6XCIkdmFsX25cIjoxNjpcIiR2YWxfZVwiOlNJR19SU0FfU0hBMTpNQkVEVExTX01EX1NIQTEiKTsKKyAgICAgICAgcHJpbnQoIjpcIiR2YWxfbVwiIik7CisgICAgICAgIHByaW50KCI6XCIkdmFsX3NhbHRcIiIpOworICAgICAgICBwcmludCgiOlwiJHZhbF9zaWdcIjowIik7CisgICAgICAgIHByaW50KCJcblxuIik7CisgICAgfSAKKyAgICAkY250Kys7Cit9CitjbG9zZShURVNUX0RBVEEpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuZXJhdGUtYWZsLXRlc3RzLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvZ2VuZXJhdGUtYWZsLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiYzJmNTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5lcmF0ZS1hZmwtdGVzdHMuc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBzY3JpcHQgc3BsaXRzIHRoZSBkYXRhIHRlc3QgZmlsZXMgY29udGFpbmluZyB0aGUgdGVzdCBjYXNlcyBpbnRvCisjIGluZGl2aWR1YWwgZmlsZXMgKG9uZSB0ZXN0IGNhc2UgcGVyIGZpbGUpIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBhZmwKKyMgKEFtZXJpY2FuIEZ1enp5IExvcCkuIGh0dHA6Ly9sY2FtdHVmLmNvcmVkdW1wLmN4L2FmbC8KKyMKKyMgVXNhZ2U6IGdlbmVyYXRlLWFmbC10ZXN0cy5zaCA8dGVzdCBkYXRhIGZpbGUgcGF0aD4KKyMgIDx0ZXN0IGRhdGEgZmlsZSBwYXRoPiAtIHNob3VsZCBiZSB0aGUgcGF0aCB0byBvbmUgb2YgdGhlIHRlc3Qgc3VpdGUgZmlsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgJ3Rlc3Rfc3VpdGVfbXBpLmRhdGEnCisKKyMgQWJvcnQgb24gZXJyb3JzCitzZXQgLWUKKworaWYgWyAteiAkMSBdCit0aGVuCisgICAgZWNobyAiIFshXSBObyB0ZXN0IGZpbGUgc3BlY2lmaWVkIiA+JjIKKyAgICBlY2hvICJVc2FnZTogJDAgPHRlc3QgZGF0YSBmaWxlPiIgPiYyCisgICAgZXhpdCAxCitmaQorCitTUkNfRklMRVBBVEg9JChkaXJuYW1lICQxKS8kKGJhc2VuYW1lICQxKQorVEVTVFNVSVRFPSQoYmFzZW5hbWUgJDEgLmRhdGEpCisKK1RISVNfRElSPSQoYmFzZW5hbWUgJFBXRCkKKworaWYgWyAtZCAuLi9saWJyYXJ5IC1hIC1kIC4uL2luY2x1ZGUgLWEgLWQgLi4vdGVzdHMgLWEgJFRISVNfRElSID09ICJ0ZXN0cyIgXTsKK3RoZW4gOjsKK2Vsc2UKKyAgICBlY2hvICIgWyFdIE11c3QgYmUgcnVuIGZyb20gbWJlZCBUTFMgdGVzdHMgZGlyZWN0b3J5IiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0RFU1RfVEVTVENBU0VfRElSPSRURVNUU1VJVEUtYWZsLXRlc3RzCitERVNUX09VVFBVVF9ESVI9JFRFU1RTVUlURS1hZmwtb3V0CisKK2VjaG8gIiBbK10gQ3JlYXRpbmcgb3V0cHV0IGRpcmVjdG9yaWVzIiA+JjIKKworaWYgWyAtZSAkREVTVF9PVVRQVVRfRElSLyogXTsKK3RoZW4gOgorICAgIGVjaG8gIiBbIV0gVGVzdCBvdXRwdXQgZmlsZXMgYWxyZWFkeSBleGlzdC4iID4mMgorICAgIGV4aXQgMQorZWxzZQorICAgIG1rZGlyIC1wICRERVNUX09VVFBVVF9ESVIKK2ZpCisKK2lmIFsgLWUgJERFU1RfVEVTVENBU0VfRElSLyogXTsKK3RoZW4gOgorICAgIGVjaG8gIiBbIV0gVGVzdCBvdXRwdXQgZmlsZXMgYWxyZWFkeSBleGlzdC4iID4mMgorZWxzZQorICAgIG1rZGlyIC1wICRERVNUX1RFU1RDQVNFX0RJUgorZmkKKworZWNobyAiIFsrXSBDcmVhdGluZyB0ZXN0IGNhc2VzIiA+JjIKK2NkICRERVNUX1RFU1RDQVNFX0RJUgorCitzcGxpdCAtcCAnXlxzKiQnIC4uLyRTUkNfRklMRVBBVEgKKworZm9yIGYgaW4gKjsKK2RvCisgICAgIyBTdHJpcCBvdXQgYW55IGJsYW5rIGxpbmVzIChubyB0cmltIG9uIE9TIFgpCisgICAgc2VkICcvXlxzKiQvZCcgJGYgPnRlc3RjYXNlXyRmCisgICAgcm0gJGYKK2RvbmUKKworY2QgLi4KKworZWNobyAiIFsrXSBUZXN0IGNhc2VzIGluICRERVNUX1RFU1RDQVNFX0RJUiIgPiYyCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2dlbmVyYXRlX2NvZGUucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5YWYyZGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9nZW5lcmF0ZV9jb2RlLnBsCkBAIC0wLDAgKzEsMzczIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgZ2VuZXJhdGVfY29kZS5wbAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAwOS0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIEdlbmVyYXRlcyB0aGUgdGVzdCBzdWl0ZSBjb2RlIGdpdmVuIGlucHV0cyBvZiB0aGUgdGVzdCBzdWl0ZSBkaXJlY3RvcnkgdGhhdAorIyBjb250YWluIHRoZSB0ZXN0IHN1aXRlcywgYW5kIHRoZSB0ZXN0IHN1aXRlIGZpbGUgbmFtZXMgZm9yIHRoZSB0ZXN0IGNvZGUgYW5kCisjIHRlc3QgZGF0YS4KKyMKKyMgVXNhZ2U6IGdlbmVyYXRlX2NvZGUucGwgPHN1aXRlIGRpcj4gPGNvZGUgZmlsZT4gPGRhdGEgZmlsZT4gW21haW4gY29kZSBmaWxlXQorIworIyBTdHJ1Y3R1cmUgb2YgZmlsZXMKKyMKKyMgICAtIG1haW4gY29kZSBmaWxlIC0gJ21haW5fdGVzdC5mdW5jdGlvbicKKyMgICAgICAgVGVtcGxhdGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBtYWluKCkgZnVuY3Rpb24gZm9yIHRoZSB0ZXN0IHN1aXRlLAorIyAgICAgICB0ZXN0IGRpc3BhdGNoIGNvZGUgYXMgd2VsbCBhcyBzdXBwb3J0IGZ1bmN0aW9ucy4gSXQgY29udGFpbnMgdGhlCisjICAgICAgIGZvbGxvd2luZyBzeW1ib2xzIHdoaWNoIGFyZSBzdWJzdGl0dXRlZCBieSB0aGlzIHNjcmlwdCBkdXJpbmcKKyMgICAgICAgcHJvY2Vzc2luZzoKKyMgICAgICAgICAgIFRFU1RDQVNFX0ZJTEVOQU1FCisjICAgICAgICAgICBURVNUQ09ERV9GSUxFTkFNRQorIyAgICAgICAgICAgU1VJVEVfUFJFX0RFUAorIyAgICAgICAgICAgTUFQUElOR19DT0RFCisjICAgICAgICAgICBGVU5DVElPTiBDT0RFCisjICAgICAgICAgICBTVUlURV9QT1NUX0RFUAorIyAgICAgICAgICAgREVQX0NIRUNLX0NPREUKKyMgICAgICAgICAgIERJU1BBVENIX0ZVTkNUSU9OCisjICAgICAgICAgICAhTElORV9OTyEKKyMKKyMgICAtIGNvbW1vbiBoZWxwZXIgY29kZSBmaWxlIC0gJ2hlbHBlcnMuZnVuY3Rpb24nCisjICAgICAgIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zCisjCisjICAgLSB0ZXN0IHN1aXRlIGNvZGUgZmlsZSAtIGZpbGUgbmFtZSBpbiB0aGUgZm9ybSAndGVzdF9zdWl0ZV94eHguZnVuY3Rpb24nCisjICAgICAgIENvZGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBhY3R1YWwgdGVzdCBjYXNlcy4gVGhlIGZpbGUgY29udGFpbnMgYQorIyAgICAgICBzZXJpZXMgb2YgY29kZSBzZXF1ZW5jZXMgZGVsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmc6CisjICAgICAgICAgICBCRUdJTl9IRUFERVIgLyBFTkRfSEVBREVSIC0gbGlzdCBvZiBoZWFkZXJzIGZpbGVzCisjICAgICAgICAgICBCRUdJTl9TVUlURV9IRUxQRVJTIC8gRU5EX1NVSVRFX0hFTFBFUlMgLSBoZWxwZXIgZnVuY3Rpb25zIGNvbW1vbiB0bworIyAgICAgICAgICAgICAgIHRoZSB0ZXN0IHN1aXRlCisjICAgICAgICAgICBCRUdJTl9DQVNFIC8gRU5EX0NBU0UgLSB0aGUgdGVzdCBjYXNlcyBpbiB0aGUgdGVzdCBzdWl0ZS4gRWFjaCB0ZXN0CisjICAgICAgICAgICAgICAgY2FzZSBjb250YWlucyBhdCBsZWFzdCBvbmUgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyMgICAgICAgICAgICAgICBkaXNwYXRjaCBjb2RlLgorIworIyAgIC0gdGVzdCBkYXRhIGZpbGUgLSBmaWxlIG5hbWUgaW4gdGhlIGZvcm0gJ3Rlc3Rfc3VpdGVfeHh4eC5kYXRhJworIyAgICAgICBUaGUgdGVzdCBjYXNlIHBhcmFtZXRlcnMgdG8gdG8gYmUgdXNlZCBpbiBleGVjdXRpb24gb2YgdGhlIHRlc3QuIFRoZQorIyAgICAgICBmaWxlIG5hbWUgaXMgdXNlZCB0byByZXBsYWNlIHRoZSBzeW1ib2wgJ1RFU1RDQVNFX0ZJTEVOQU1FJyBpbiB0aGUgbWFpbgorIyAgICAgICBjb2RlIGZpbGUgYWJvdmUuCisjCisKK3VzZSBzdHJpY3Q7CisKK215ICRzdWl0ZV9kaXIgPSBzaGlmdCBvciBkaWUgIk1pc3Npbmcgc3VpdGUgZGlyZWN0b3J5IjsKK215ICRzdWl0ZV9uYW1lID0gc2hpZnQgb3IgZGllICJNaXNzaW5nIHN1aXRlIG5hbWUiOworbXkgJGRhdGFfbmFtZSA9IHNoaWZ0IG9yIGRpZSAiTWlzc2luZyBkYXRhIG5hbWUiOworbXkgJHRlc3RfbWFpbl9maWxlID0gZG8geyBteSAkYXJnID0gc2hpZnQ7IGRlZmluZWQoJGFyZykgPyAkYXJnIDogICRzdWl0ZV9kaXIuIi9tYWluX3Rlc3QuZnVuY3Rpb24iIH07CitteSAkdGVzdF9maWxlID0gJGRhdGFfbmFtZS4iLmMiOworbXkgJHRlc3RfY29tbW9uX2hlbHBlcl9maWxlID0gJHN1aXRlX2Rpci4iL2hlbHBlcnMuZnVuY3Rpb24iOworbXkgJHRlc3RfY2FzZV9maWxlID0gJHN1aXRlX2Rpci4iLyIuJHN1aXRlX25hbWUuIi5mdW5jdGlvbiI7CitteSAkdGVzdF9jYXNlX2RhdGEgPSAkc3VpdGVfZGlyLiIvIi4kZGF0YV9uYW1lLiIuZGF0YSI7CisKK215ICRsaW5lX3NlcGFyYXRvciA9ICQvOwordW5kZWYgJC87CisKKworIworIyBPcGVuIGFuZCByZWFkIGluIHRoZSBpbnB1dCBmaWxlcworIworCitvcGVuKFRFU1RfSEVMUEVSUywgIiR0ZXN0X2NvbW1vbl9oZWxwZXJfZmlsZSIpIG9yIGRpZSAiT3BlbmluZyB0ZXN0IGhlbHBlcnMKKyckdGVzdF9jb21tb25faGVscGVyX2ZpbGUnOiAkISI7CitteSAkdGVzdF9jb21tb25faGVscGVycyA9IDxURVNUX0hFTFBFUlM+OworY2xvc2UoVEVTVF9IRUxQRVJTKTsKKworb3BlbihURVNUX01BSU4sICIkdGVzdF9tYWluX2ZpbGUiKSBvciBkaWUgIk9wZW5pbmcgdGVzdCBtYWluICckdGVzdF9tYWluX2ZpbGUnOiAkISI7CitteSBAdGVzdF9tYWluX2xpbmVzID0gc3BsaXQvXi8sICA8VEVTVF9NQUlOPjsKK215ICR0ZXN0X21haW47CitteSAkaW5kZXggPSAyOworZm9yIG15ICRsaW5lIChAdGVzdF9tYWluX2xpbmVzKSB7CisgICAgJGxpbmUgPX4gcy8hTElORV9OTyEvJGluZGV4LzsKKyAgICAkdGVzdF9tYWluID0gJHRlc3RfbWFpbi4kbGluZTsKKyAgICAkaW5kZXgrKzsKK30KK2Nsb3NlKFRFU1RfTUFJTik7CisKK29wZW4oVEVTVF9DQVNFUywgIiR0ZXN0X2Nhc2VfZmlsZSIpIG9yIGRpZSAiT3BlbmluZyB0ZXN0IGNhc2VzICckdGVzdF9jYXNlX2ZpbGUnOiAkISI7CitteSBAdGVzdF9jYXNlc19saW5lcyA9IHNwbGl0L14vLCAgPFRFU1RfQ0FTRVM+OworbXkgJHRlc3RfY2FzZXM7CitteSAkaW5kZXggPSAyOworZm9yIG15ICRsaW5lIChAdGVzdF9jYXNlc19saW5lcykgeworICAgIGlmICgkbGluZSA9fiAvXlwvXCogQkVHSU5fU1VJVEVfSEVMUEVSUyAuKlwqXC8vKQorICAgIHsKKyAgICAgICAgJGxpbmUgPSAkbGluZS4iI2xpbmUgJGluZGV4IFwiJHRlc3RfY2FzZV9maWxlXCJcbiI7CisgICAgfQorCisgICAgaWYgKCRsaW5lID1+IC9eXC9cKiBCRUdJTl9DQVNFIC4qXCpcLy8pCisgICAgeworICAgICAgICAkbGluZSA9ICRsaW5lLiIjbGluZSAkaW5kZXggXCIkdGVzdF9jYXNlX2ZpbGVcIlxuIjsKKyAgICB9CisKKyAgICAkbGluZSA9fiBzLyFMSU5FX05PIS8kaW5kZXgvOworCisgICAgJHRlc3RfY2FzZXMgPSAkdGVzdF9jYXNlcy4kbGluZTsKKyAgICAkaW5kZXgrKzsKK30KKworY2xvc2UoVEVTVF9DQVNFUyk7CisKK29wZW4oVEVTVF9EQVRBLCAiJHRlc3RfY2FzZV9kYXRhIikgb3IgZGllICJPcGVuaW5nIHRlc3QgZGF0YSAnJHRlc3RfY2FzZV9kYXRhJzogJCEiOworbXkgJHRlc3RfZGF0YSA9IDxURVNUX0RBVEE+OworY2xvc2UoVEVTVF9EQVRBKTsKKworCisjCisjIEZpbmQgdGhlIGhlYWRlcnMsIGRlcGVuZGVuY2llcywgYW5kIHN1aXRlcyBpbiB0aGUgdGVzdCBjYXNlcyBmaWxlCisjCisKK215ICggJHN1aXRlX2hlYWRlciApID0gJHRlc3RfY2FzZXMgPX4gL1wvXCogQkVHSU5fSEVBREVSIFwqXC9cbiguKj8pXG5cL1wqIEVORF9IRUFERVIgXCpcLy9zOworbXkgKCAkc3VpdGVfZGVmaW5lcyApID0gJHRlc3RfY2FzZXMgPX4gL1wvXCogQkVHSU5fREVQRU5ERU5DSUVTXG4gXCogKC4qPylcbiBcKiBFTkRfREVQRU5ERU5DSUVTL3M7CitteSAoICRzdWl0ZV9oZWxwZXJzICkgPSAkdGVzdF9jYXNlcyA9fiAvXC9cKiBCRUdJTl9TVUlURV9IRUxQRVJTIFwqXC9cbiguKj8pXG5cL1wqIEVORF9TVUlURV9IRUxQRVJTIFwqXC8vczsKKworbXkgJHJlcXVpcmVtZW50czsKK2lmICgkc3VpdGVfZGVmaW5lcyA9fiAvXmRlcGVuZHNfb246LykKK3sKKyAgICAoICRyZXF1aXJlbWVudHMgKSA9ICRzdWl0ZV9kZWZpbmVzID1+IC9eZGVwZW5kc19vbjooLiopJC87Cit9CisKK215IEB2YXJfcmVxX2FyciA9IHNwbGl0KC86LywgJHJlcXVpcmVtZW50cyk7CitteSAkc3VpdGVfcHJlX2NvZGU7CitteSAkc3VpdGVfcG9zdF9jb2RlOworbXkgJGRpc3BhdGNoX2NvZGU7CitteSAkbWFwcGluZ19jb2RlOworbXkgJW1hcHBpbmdfdmFsdWVzOworCit3aGlsZSAoQHZhcl9yZXFfYXJyKQoreworICAgIG15ICRyZXEgPSBzaGlmdCBAdmFyX3JlcV9hcnI7CisgICAgJHJlcSA9fiBzLyghPykoLiopLyQxZGVmaW5lZCgkMikvOworCisgICAgJHN1aXRlX3ByZV9jb2RlIC49ICIjaWYgJHJlcVxuIjsKKyAgICAkc3VpdGVfcG9zdF9jb2RlIC49ICIjZW5kaWYgLyogJHJlcSAqL1xuIjsKK30KKworJC8gPSAkbGluZV9zZXBhcmF0b3I7CisKK29wZW4oVEVTVF9GSUxFLCAiPiR0ZXN0X2ZpbGUiKSBvciBkaWUgIk9wZW5pbmcgZGVzdGluYXRpb24gZmlsZSAnJHRlc3RfZmlsZSc6ICQhIjsKK3ByaW50IFRFU1RfRklMRSA8PCAiRU5EIjsKKy8qCisgKiAqKiogVEhJUyBGSUxFIEhBUyBCRUVOIE1BQ0hJTkUgR0VORVJBVEVEICoqKgorICoKKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBtYWNoaW5lIGdlbmVyYXRlZCB1c2luZyB0aGUgc2NyaXB0OiAkMAorICoKKyAqIFRlc3QgZmlsZSAgICAgIDogJHRlc3RfZmlsZQorICoKKyAqIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIGZpbGUuCisgKgorICogICAgICBNYWluIGNvZGUgZmlsZSAgOiAkdGVzdF9tYWluX2ZpbGUKKyAqICAgICAgSGVscGVyIGZpbGUgICAgIDogJHRlc3RfY29tbW9uX2hlbHBlcl9maWxlCisgKiAgICAgIFRlc3Qgc3VpdGUgZmlsZSA6ICR0ZXN0X2Nhc2VfZmlsZQorICogICAgICBUZXN0IHN1aXRlIGRhdGEgOiAkdGVzdF9jYXNlX2RhdGEKKyAqCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlIDxtYmVkdGxzL2NvbmZpZy5oPgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDb21tb24gaGVscGVyIGNvZGUgKi8KKworJHRlc3RfY29tbW9uX2hlbHBlcnMKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGVzdCBTdWl0ZSBDb2RlICovCisKKyRzdWl0ZV9wcmVfY29kZQorJHN1aXRlX2hlYWRlcgorJHN1aXRlX2hlbHBlcnMKKyRzdWl0ZV9wb3N0X2NvZGUKKworRU5ECisKKyR0ZXN0X21haW4gPX4gcy9TVUlURV9QUkVfREVQLyRzdWl0ZV9wcmVfY29kZS87CiskdGVzdF9tYWluID1+IHMvU1VJVEVfUE9TVF9ERVAvJHN1aXRlX3Bvc3RfY29kZS87CisKK3doaWxlKCR0ZXN0X2Nhc2VzID1+IC9cL1wqIEJFR0lOX0NBU0UgKihbXHc6XSopIFwqXC9cbiguKj8pXG5cL1wqIEVORF9DQVNFIFwqXC8vbXNnKQoreworICAgIG15ICRmdW5jdGlvbl9kZXBzID0gJDE7CisgICAgbXkgJGZ1bmN0aW9uX2RlY2wgPSAkMjsKKworICAgICMgU2FuaXR5IGNoZWNrcyBvZiBmdW5jdGlvbgorICAgIGlmICgkZnVuY3Rpb25fZGVjbCAhfiAvXiNsaW5lXHMqLipcbnZvaWQgLykKKyAgICB7CisgICAgICAgIGRpZSAiVGVzdCBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlICd2b2lkJyBhcyByZXR1cm4gdHlwZS5cbiIgLgorICAgICAgICAgICAgIkZ1bmN0aW9uIGRlY2xhcmF0aW9uOlxuIiAuCisgICAgICAgICAgICAkZnVuY3Rpb25fZGVjbDsKKyAgICB9CisgICAgaWYgKCRmdW5jdGlvbl9kZWNsICF+IC9eKCNsaW5lXHMqLiopXG52b2lkIChcdyspXChccyooLio/KVxzKlwpXHMqeyguKil9L21zKQorICAgIHsKKyAgICAgICAgZGllICJGdW5jdGlvbiBkZWNsYXJhdGlvbiBub3QgaW4gZXhwZWN0ZWQgZm9ybWF0XG4iOworICAgIH0KKyAgICBteSAkbGluZV9kaXJlY3RpdmUgPSAkMTsKKyAgICBteSAkZnVuY3Rpb25fbmFtZSA9ICQyOworICAgIG15ICRmdW5jdGlvbl9wYXJhbXMgPSAkMzsKKyAgICBteSAkZnVuY3Rpb25fcHJlX2NvZGU7CisgICAgbXkgJGZ1bmN0aW9uX3Bvc3RfY29kZTsKKyAgICBteSAkcGFyYW1fZGVmczsKKyAgICBteSAkcGFyYW1fY2hlY2tzOworICAgIG15IEBkaXNwYXRjaF9wYXJhbXM7CisgICAgbXkgQHZhcl9kZWZfYXJyID0gc3BsaXQoLyxccyovLCAkZnVuY3Rpb25fcGFyYW1zKTsKKyAgICBteSAkaSA9IDE7CisgICAgbXkgJG1hcHBpbmdfcmVnZXggPSAiIi4kZnVuY3Rpb25fbmFtZTsKKyAgICBteSAkbWFwcGluZ19jb3VudCA9IDA7CisKKyAgICAkZnVuY3Rpb25fZGVjbCA9fiBzLyheI2xpbmVccyouKilcbnZvaWQgLyQxXG52b2lkIHRlc3Rfc3VpdGVfLzsKKworICAgICMgQWRkIGV4aXQgbGFiZWwgaWYgbm90IHByZXNlbnQKKyAgICBpZiAoJGZ1bmN0aW9uX2RlY2wgIX4gL15leGl0OiQvbSkKKyAgICB7CisgICAgICAgICRmdW5jdGlvbl9kZWNsID1+IHMvfVxzKiQvXG5leGl0OlxuICAgIHJldHVybjtcbn0vOworICAgIH0KKworICAgIGlmICgkZnVuY3Rpb25fZGVwcyA9fiAvXmRlcGVuZHNfb246LykKKyAgICB7CisgICAgICAgICggJGZ1bmN0aW9uX2RlcHMgKSA9ICRmdW5jdGlvbl9kZXBzID1+IC9eZGVwZW5kc19vbjooLiopJC87CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkcmVxIChzcGxpdCgvOi8sICRmdW5jdGlvbl9kZXBzKSkKKyAgICB7CisgICAgICAgICRmdW5jdGlvbl9wcmVfY29kZSAuPSAiI2lmZGVmICRyZXFcbiI7CisgICAgICAgICRmdW5jdGlvbl9wb3N0X2NvZGUgLj0gIiNlbmRpZiAvKiAkcmVxICovXG4iOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGRlZiAoQHZhcl9kZWZfYXJyKQorICAgIHsKKyAgICAgICAgIyBIYW5kbGUgdGhlIGRpZmZlcmVudCBwYXJhbWV0ZXIgdHlwZXMKKyAgICAgICAgaWYoIHN1YnN0cigkZGVmLCAwLCA0KSBlcSAiaW50ICIgKQorICAgICAgICB7CisgICAgICAgICAgICAkcGFyYW1fZGVmcyAuPSAiICAgIGludCBwYXJhbSRpO1xuIjsKKyAgICAgICAgICAgICRwYXJhbV9jaGVja3MgLj0gIiAgICBpZiggdmVyaWZ5X2ludCggcGFyYW1zWyRpXSwgJnBhcmFtJGkgKSAhPSAwICkgcmV0dXJuKCBESVNQQVRDSF9JTlZBTElEX1RFU1RfREFUQSApO1xuIjsKKyAgICAgICAgICAgIHB1c2ggQGRpc3BhdGNoX3BhcmFtcywgInBhcmFtJGkiOworCisgICAgICAgICAgICAkbWFwcGluZ19yZWdleCAuPSAiOihbXFxkXFx3IHxcXCtcXC1cXChcXCldKykiOworICAgICAgICAgICAgJG1hcHBpbmdfY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggc3Vic3RyKCRkZWYsIDAsIDYpIGVxICJjaGFyICoiICkKKyAgICAgICAgeworICAgICAgICAgICAgJHBhcmFtX2RlZnMgLj0gIiAgICBjaGFyICpwYXJhbSRpID0gcGFyYW1zWyRpXTtcbiI7CisgICAgICAgICAgICAkcGFyYW1fY2hlY2tzIC49ICIgICAgaWYoIHZlcmlmeV9zdHJpbmcoICZwYXJhbSRpICkgIT0gMCApIHJldHVybiggRElTUEFUQ0hfSU5WQUxJRF9URVNUX0RBVEEgKTtcbiI7CisgICAgICAgICAgICBwdXNoIEBkaXNwYXRjaF9wYXJhbXMsICJwYXJhbSRpIjsKKyAgICAgICAgICAgICRtYXBwaW5nX3JlZ2V4IC49ICI6W146XG5dKyI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkaWUgIlBhcmFtZXRlciBkZWNsYXJhdGlvbiBub3Qgb2Ygc3VwcG9ydGVkIHR5cGUgKGludCwgY2hhciAqKVxuIjsKKyAgICAgICAgfQorICAgICAgICAkaSsrOworCisgICAgfQorCisgICAgIyBGaW5kIG5vbi1pbnRlZ2VyIHZhbHVlcyB3ZSBzaG91bGQgbWFwIGZvciB0aGlzIGZ1bmN0aW9uCisgICAgaWYoICRtYXBwaW5nX2NvdW50KQorICAgIHsKKyAgICAgICAgbXkgQHJlcyA9ICR0ZXN0X2RhdGEgPX4gL14kbWFwcGluZ19yZWdleC9tc2c7CisgICAgICAgIGZvcmVhY2ggbXkgJHZhbHVlIChAcmVzKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAoJHZhbHVlICF+IC9eXGQrJC8pOworICAgICAgICAgICAgaWYgKCAkbWFwcGluZ192YWx1ZXN7JHZhbHVlfSApIHsKKyAgICAgICAgICAgICAgICAkeyAkbWFwcGluZ192YWx1ZXN7JHZhbHVlfSB9eyRmdW5jdGlvbl9wcmVfY29kZX0gPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkbWFwcGluZ192YWx1ZXN7JHZhbHVlfSA9IHsgJGZ1bmN0aW9uX3ByZV9jb2RlID0+IDEgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRjYWxsX3BhcmFtcyA9IGpvaW4gIiwgIiwgQGRpc3BhdGNoX3BhcmFtczsKKyAgICBteSAkcGFyYW1fY291bnQgPSBAdmFyX2RlZl9hcnIgKyAxOworICAgICRkaXNwYXRjaF9jb2RlIC49IDw8ICJFTkQiOworaWYoIHN0cmNtcCggcGFyYW1zWzBdLCAiJGZ1bmN0aW9uX25hbWUiICkgPT0gMCApCit7CiskZnVuY3Rpb25fcHJlX2NvZGUKKyRwYXJhbV9kZWZzCisgICAgaWYoIGNudCAhPSAkcGFyYW1fY291bnQgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJcXG5JbmNvcnJlY3QgYXJndW1lbnQgY291bnQgKCVkICE9ICVkKVxcbiIsIGNudCwgJHBhcmFtX2NvdW50ICk7CisgICAgICAgIHJldHVybiggRElTUEFUQ0hfSU5WQUxJRF9URVNUX0RBVEEgKTsKKyAgICB9CisKKyRwYXJhbV9jaGVja3MKKyAgICB0ZXN0X3N1aXRlXyRmdW5jdGlvbl9uYW1lKCAkY2FsbF9wYXJhbXMgKTsKKyAgICByZXR1cm4gKCBESVNQQVRDSF9URVNUX1NVQ0NFU1MgKTsKKyRmdW5jdGlvbl9wb3N0X2NvZGUKKyAgICByZXR1cm4gKCBESVNQQVRDSF9VTlNVUFBPUlRFRF9TVUlURSApOworfQorZWxzZQorRU5ECisKKyAgICBteSAkZnVuY3Rpb25fY29kZSA9ICRmdW5jdGlvbl9wcmVfY29kZSAuICRmdW5jdGlvbl9kZWNsIC4gIlxuIiAuCisgICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25fcG9zdF9jb2RlOworICAgICR0ZXN0X21haW4gPX4gcy9GVU5DVElPTl9DT0RFLyRmdW5jdGlvbl9jb2RlXG5GVU5DVElPTl9DT0RFLzsKK30KKworIyBGaW5kIHNwZWNpZmljIGNhc2UgZGVwZW5kZW5jaWVzIHRoYXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gY2hlY2sKKyMgYW5kIG1ha2UgY2hlY2sgY29kZQorbXkgJGRlcF9jaGVja19jb2RlOworCitteSBAcmVzID0gJHRlc3RfZGF0YSA9fiAvXmRlcGVuZHNfb246KFtcdzpdKykvbXNnOworbXkgJWNhc2VfZGVwczsKK2ZvcmVhY2ggbXkgJGRlcHMgKEByZXMpCit7CisgICAgZm9yZWFjaCBteSAkZGVwIChzcGxpdCgvOi8sICRkZXBzKSkKKyAgICB7CisgICAgICAgICRjYXNlX2RlcHN7JGRlcH0gPSAxOworICAgIH0KK30KK3doaWxlKCBteSAoJGtleSwgJHZhbHVlKSA9IGVhY2goJWNhc2VfZGVwcykgKQoreworICAgICRkZXBfY2hlY2tfY29kZSAuPSA8PCAiRU5EIjsKKyAgICBpZiggc3RyY21wKCBzdHIsICIka2V5IiApID09IDAgKQorICAgIHsKKyNpZiBkZWZpbmVkKCRrZXkpCisgICAgICAgIHJldHVybiggREVQRU5ERU5DWV9TVVBQT1JURUQgKTsKKyNlbHNlCisgICAgICAgIHJldHVybiggREVQRU5ERU5DWV9OT1RfU1VQUE9SVEVEICk7CisjZW5kaWYKKyAgICB9CitFTkQKK30KKworIyBNYWtlIG1hcHBpbmcgY29kZQord2hpbGUoIG15ICgka2V5LCAkdmFsdWUpID0gZWFjaCglbWFwcGluZ192YWx1ZXMpICkKK3sKKyAgICBteSAka2V5X21hcHBpbmdfY29kZSA9IDw8ICJFTkQiOworICAgIGlmKCBzdHJjbXAoIHN0ciwgIiRrZXkiICkgPT0gMCApCisgICAgeworICAgICAgICAqdmFsdWUgPSAoICRrZXkgKTsKKyAgICAgICAgcmV0dXJuKCBLRVlfVkFMVUVfTUFQUElOR19GT1VORCApOworICAgIH0KK0VORAorCisgICAgIyBoYW5kbGUgZGVwZW5lbmNpZXMsIHVubGVzcyB1c2VkIGF0IGxlYXN0IG9uZSB3aXRob3V0IGRlcGVuZHMKKyAgICBpZiAoJHZhbHVlLT57IiJ9KSB7CisgICAgICAgICRtYXBwaW5nX2NvZGUgLj0gJGtleV9tYXBwaW5nX2NvZGU7CisgICAgICAgIG5leHQ7CisgICAgfQorICAgIGZvciBteSAkaWZkZWYgKCBrZXlzICUkdmFsdWUgKSB7CisgICAgICAgIChteSAkZW5kaWYgPSAkaWZkZWYpID1+IHMhaWZkZWYhZW5kaWYgLy8hZzsKKyAgICAgICAgJG1hcHBpbmdfY29kZSAuPSAkaWZkZWYgLiAka2V5X21hcHBpbmdfY29kZSAuICRlbmRpZjsKKyAgICB9Cit9CisKKyRkaXNwYXRjaF9jb2RlID1+IHMvXiguKykvICAgICQxL21nOworCiskdGVzdF9tYWluID1+IHMvVEVTVENBU0VfRklMRU5BTUUvJHRlc3RfY2FzZV9kYXRhL2c7CiskdGVzdF9tYWluID1+IHMvVEVTVENPREVfRklMRU5BTUUvJHRlc3RfY2FzZV9maWxlL2c7CiskdGVzdF9tYWluID1+IHMvRlVOQ1RJT05fQ09ERS8vOworJHRlc3RfbWFpbiA9fiBzL0RFUF9DSEVDS19DT0RFLyRkZXBfY2hlY2tfY29kZS87CiskdGVzdF9tYWluID1+IHMvRElTUEFUQ0hfRlVOQ1RJT04vJGRpc3BhdGNoX2NvZGUvOworJHRlc3RfbWFpbiA9fiBzL01BUFBJTkdfQ09ERS8kbWFwcGluZ19jb2RlLzsKKworcHJpbnQgVEVTVF9GSUxFIDw8ICJFTkQiOworJHRlc3RfbWFpbgorRU5ECisKK2Nsb3NlKFRFU1RfRklMRSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9rZXktZXhjaGFuZ2VzLnBsIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMva2V5LWV4Y2hhbmdlcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjgyNmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMva2V5LWV4Y2hhbmdlcy5wbApAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL3BlcmwKKworIyB0ZXN0IHRoYXQgYWxsIGNvbmZpZ3Mgd2l0aCBvbmx5IGEgc2luZ2xlIGtleSBleGNoYW5nZSBlbmFibGVkIGJ1aWxkCisjCisjIFVzYWdlOiB0ZXN0cy9zY3JpcHRzL2tleS1leGNoYW5nZXMucGwKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKworLWQgJ2xpYnJhcnknICYmIC1kICdpbmNsdWRlJyAmJiAtZCAndGVzdHMnIG9yIGRpZSAiTXVzdCBiZSBydW4gZnJvbSByb290XG4iOworCitteSAkc2VkX2NtZCA9ICdzL14jZGVmaW5lIFwoTUJFRFRMU19LRVlfRVhDSEFOR0VfLipfRU5BQkxFRFwpL1wxL3AnOworbXkgJGNvbmZpZ19oID0gJ2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCc7CitteSBAa2V4ZXMgPSBzcGxpdCggL1xzKy8sIGBzZWQgLW4gLWUgJyRzZWRfY21kJyAkY29uZmlnX2hgICk7CisKK3N5c3RlbSggImNwICRjb25maWdfaCAkY29uZmlnX2guYmFrIiApIGFuZCBkaWU7CitzdWIgYWJvcnQgeworICAgIHN5c3RlbSggIm12ICRjb25maWdfaC5iYWsgJGNvbmZpZ19oIiApIGFuZCB3YXJuICIkY29uZmlnX2ggbm90IHJlc3RvcmVkXG4iOworICAgIGRpZSAkX1swXTsKK30KKworZm9yIG15ICRrZXggKEBrZXhlcykgeworICAgIHN5c3RlbSggImNwICRjb25maWdfaC5iYWsgJGNvbmZpZ19oIiApIGFuZCBkaWUgIiRjb25maWdfaCBub3QgcmVzdG9yZWRcbiI7CisgICAgc3lzdGVtKCAibWFrZSBjbGVhbiIgKSBhbmQgZGllOworCisgICAgcHJpbnQgIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOworICAgIHByaW50ICIqIFRlc3Rpbmcgd2l0aCBrZXkgZXhjaGFuZ2U6ICRrZXhcbiI7CisgICAgcHJpbnQgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKworICAgICMgZnVsbCBjb25maWcgd2l0aCBhbGwga2V5IGV4Y2hhbmdlcyBkaXNhYmxlZCBleGNlcHQgb25lCisgICAgc3lzdGVtKCAic2NyaXB0cy9jb25maWcucGwgZnVsbCIgKSBhbmQgYWJvcnQgIkZhaWxlZCBjb25maWcgZnVsbFxuIjsKKyAgICBmb3IgbXkgJGsgKEBrZXhlcykgeworICAgICAgICBuZXh0IGlmICRrIGVxICRrZXg7CisgICAgICAgIHN5c3RlbSggInNjcmlwdHMvY29uZmlnLnBsIHVuc2V0ICRrIiApCisgICAgICAgICAgICBhbmQgYWJvcnQgIkZhaWxlZCB0byBkaXNhYmxlICRrXG4iOworICAgIH0KKworICAgIHN5c3RlbSggIm1ha2UgbGliIENGTEFHUz0nLU9zIC1XZXJyb3InIiApIGFuZCBhYm9ydCAiRmFpbGVkIHRvIGJ1aWxkIGxpYjogJGtleFxuIjsKK30KKworc3lzdGVtKCAibXYgJGNvbmZpZ19oLmJhayAkY29uZmlnX2giICkgYW5kIGRpZSAiJGNvbmZpZ19oIG5vdCByZXN0b3JlZFxuIjsKK3N5c3RlbSggIm1ha2UgY2xlYW4iICkgYW5kIGRpZTsKK2V4aXQgMDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3QtZW51bS1jb25zdHMucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LWVudW0tY29uc3RzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzM2UzZmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LWVudW0tY29uc3RzLnBsCkBAIC0wLDAgKzEsMzUgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCit1c2UgdXRmODsKK3VzZSBvcGVuIHF3KDpzdGQgdXRmOCk7CisKKy1kICdpbmNsdWRlL21iZWR0bHMnIG9yIGRpZSAiJDA6IG11c3QgYmUgcnVuIGZyb20gcm9vdFxuIjsKKworQEFSR1YgPSBncmVwIHsgISAvY29tcGF0LTFcLjNcLmgvIH0gPGluY2x1ZGUvbWJlZHRscy8qLmg+OworCitteSBAY29uc3RzOworbXkgJHN0YXRlID0gJ291dCc7Cit3aGlsZSAoPD4pCit7CisgICAgaWYoICRzdGF0ZSBlcSAnb3V0JyBhbmQgL14odHlwZWRlZiApP2VudW0gXHsvICkgeworICAgICAgICAkc3RhdGUgPSAnaW4nOworICAgIH0gZWxzaWYoICRzdGF0ZSBlcSAnb3V0JyBhbmQgL14odHlwZWRlZiApP2VudW0vICkgeworICAgICAgICAkc3RhdGUgPSAnc3RhcnQnOworICAgIH0gZWxzaWYoICRzdGF0ZSBlcSAnc3RhcnQnIGFuZCAvey8gKSB7CisgICAgICAgICRzdGF0ZSA9ICdpbic7CisgICAgfSBlbHNpZiggJHN0YXRlIGVxICdpbicgYW5kIC99LyApIHsKKyAgICAgICAgJHN0YXRlID0gJ291dCc7CisgICAgfSBlbHNpZiggJHN0YXRlIGVxICdpbicgKSB7CisgICAgICAgIHMvPS4qLy87IHMhL1wqLiohITsgcy8sLiovLzsgcy9ccysvL2c7IGNob21wOworICAgICAgICBwdXNoIEBjb25zdHMsICRfIGlmICRfOworICAgIH0KK30KKworb3BlbiBteSAkZmgsICc+JywgJ2VudW0tY29uc3RzJyBvciBkaWU7CitwcmludCAkZmggIiRfXG4iIGZvciBzb3J0IEBjb25zdHM7CitjbG9zZSAkZmggb3IgZGllOworCitwcmludGYgIiU4ZCBlbnVtLWNvbnN0c1xuIiwgc2NhbGFyIEBjb25zdHM7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LWlkZW50aWZpZXJzLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1pZGVudGlmaWVycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzBkOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1pZGVudGlmaWVycy5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworc2V0IC1ldQorCitpZiBbIC1kIGluY2x1ZGUvbWJlZHRscyBdOyB0aGVuIDo7IGVsc2UKKyAgICBlY2hvICIkMDogbXVzdCBiZSBydW4gZnJvbSByb290IiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0hFQURFUlM9JCggbHMgaW5jbHVkZS9tYmVkdGxzLyouaCB8IGVncmVwIC12ICdjb21wYXQtMVwuM1wuaHxibl9tdWwnICkKKworcm0gLWYgaWRlbnRpZmllcnMKKworZ3JlcCAnXlteIC8je10nICRIRUFERVJTIHwgXAorICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIHwgXAorICAgIGVncmVwIC12ICdeKGV4dGVybiAiQyJ8KHR5cGVkZWYgKT8oc3RydWN0fGVudW0pKCB7KT8kfH07PyQpJyBcCisgICAgPiBfZGVjbHMKKworaWYgdHJ1ZTsgdGhlbgorc2VkIC1uIC1lICdzLy4qIFwqKlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpKC4qL1wxL3AnIFwKKyAgICAgICAtZSAncy8uKihcKlwoLipcKSkoLiovXDEvcCcgX2RlY2xzCitncmVwIC12ICcoJyBfZGVjbHMgfCBzZWQgLWUgJ3MvXChbYS16QS1aMC05X10qXClbO1tdLiovXDEvJyAtZSAncy8uKiBcKiovLycKK2ZpID4gX2lkZW50aWZpZXJzCisKK2lmIFsgJCggd2MgLWwgPCBfaWRlbnRpZmllcnMgKSAtZXEgJCggd2MgLWwgPCBfZGVjbHMgKSBdOyB0aGVuCisgICAgcm0gX2RlY2xzCisgICAgZWdyZXAgLXYgJ14odT9pbnQoMTZ8MzJ8NjQpX3QpJCcgX2lkZW50aWZpZXJzIHwgc29ydCA+IGlkZW50aWZpZXJzCisgICAgcm0gX2lkZW50aWZpZXJzCitlbHNlCisgICAgZWNobyAiJDA6IG9vcHMsIGxvc3Qgc29tZSBpZGVudGlmaWVycyIgMj4mMQorICAgIGV4aXQgMQorZmkKKword2MgLWwgaWRlbnRpZmllcnMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3QtbWFjcm9zLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1tYWNyb3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M4NGFkYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL2xpc3QtbWFjcm9zLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWV1CisKK2lmIFsgLWQgaW5jbHVkZS9tYmVkdGxzIF07IHRoZW4gOjsgZWxzZQorICAgIGVjaG8gIiQwOiBtdXN0IGJlIHJ1biBmcm9tIHJvb3QiID4mMgorICAgIGV4aXQgMQorZmkKKworSEVBREVSUz0kKCBscyBpbmNsdWRlL21iZWR0bHMvKi5oIHwgZWdyZXAgLXYgJ2NvbXBhdC0xXC4zXC5oJyApCisKK3NlZCAtbiAtZSAncy8uKiNkZWZpbmUgXChbYS16QS1aMC05X10qXCkuKi9cMS9wJyAkSEVBREVSUyBcCisgICAgfCBlZ3JlcCAtdiAnXihhc218aW5saW5lfEVNSVR8X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFKSR8Xk1VTEFERENfJyBcCisgICAgfCBzb3J0IC11ID4gbWFjcm9zCisKK3djIC1sIG1hY3JvcwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1zeW1ib2xzLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvbGlzdC1zeW1ib2xzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyNTg3MTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9saXN0LXN5bWJvbHMuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKK3NldCAtZXUKKworaWYgWyAtZCBpbmNsdWRlL21iZWR0bHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiJDA6IG11c3QgYmUgcnVuIGZyb20gcm9vdCIgPiYyCisgICAgZXhpdCAxCitmaQorCitpZiBncmVwIC1pIGNtYWtlIE1ha2VmaWxlID4vZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICIkMDogbm90IGNvbXBhdGlibGUgd2l0aCBjbWFrZSIgPiYyCisgICAgZXhpdCAxCitmaQorCitjcCBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmggaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oLmJhaworc2NyaXB0cy9jb25maWcucGwgZnVsbAorQ0ZMQUdTPS1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgbWFrZSBjbGVhbiBsaWIgPi9kZXYvbnVsbCAyPiYxCittdiBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmguYmFrIGluY2x1ZGUvbWJlZHRscy9jb25maWcuaAoraWYgdW5hbWUgfCBncmVwIC1GIERhcndpbiA+L2Rldi9udWxsOyB0aGVuCisgICAgbm0gLWdVaiBsaWJyYXJ5L2xpYm1iZWQqLmEgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MvXl8vL3AnCitlbGlmIHVuYW1lIHwgZ3JlcCAtRiBMaW51eCA+L2Rldi9udWxsOyB0aGVuCisgICAgbm0gLW9nIGxpYnJhcnkvbGlibWJlZCouYSB8IGdyZXAgLXYgJ15bXiBdKjogKlUgXHxeJFx8XlteIF0qOiQnIHwgc2VkICdzL15bXiBdKiAuIC8vJworZmkgfCBzb3J0ID4gZXhwb3J0ZWQtc3ltYm9scworbWFrZSBjbGVhbgorCit3YyAtbCBleHBvcnRlZC1zeW1ib2xzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9yZWN1cnNpb24ucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9yZWN1cnNpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FkNDJiMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL3JlY3Vyc2lvbi5wbApAQCAtMCwwICsxLDQ0IEBACisjIS91c3IvYmluL3BlcmwKKworIyBGaW5kIGZ1bmN0aW9ucyBtYWtpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIHRoZW1zZWx2ZXMuCisjIChNdWx0aXBsZSByZWN1cnNpb24gd2hlcmUgYSgpIGNhbGxzIGIoKSB3aGljaCBjYWxscyBhKCkgbm90IGNvdmVyZWQuKQorIworIyBXaGVuIHRoZSByZWN1cnNpb24gZGVwdGggbWlnaHQgZGVwZW5kIG9uIGRhdGEgY29udHJvbGxlZCBieSB0aGUgYXR0YWNrZXIgaW4KKyMgYW4gdW5ib3VuZGVkIHdheSwgdGhvc2UgZnVuY3Rpb25zIHNob3VsZCB1c2UgaW50ZXJhdGlvbiBpbnN0ZWFkLgorIworIyBUeXBpY2FsIHVzYWdlOiBzY3JpcHRzL3JlY3Vyc2lvbi5wbCBsaWJyYXJ5LyouYworCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCit1c2UgdXRmODsKK3VzZSBvcGVuIHF3KDpzdGQgdXRmOCk7CisKKyMgZXhjbHVkZSBmdW5jdGlvbnMgdGhhdCBhcmUgb2s6CisjIC0gbXBpX3dyaXRlX2hscDogYm91bmRlZCBieSBzaXplIG9mIG1iZWR0bHNfbXBpLCBhIGNvbXBpbGUtdGltZSBjb25zdGFudAorIyAtIHg1MDlfY3J0X3ZlcmlmeV9jaGlsZDogYm91bmRlZCBieSBNQkVEVExTX1g1MDlfTUFYX0lOVEVSTUVESUFURV9DQQorbXkgJGtub3duX29rID0gcXIvbXBpX3dyaXRlX2hscHx4NTA5X2NydF92ZXJpZnlfY2hpbGQvOworCitteSAkY3VyX25hbWU7CitteSAkaW5zaWRlOworbXkgQGZ1bmNzOworCitkaWUgIlVzYWdlOiAkMCBmaWxlLmMgWy4uLl1cbiIgdW5sZXNzIEBBUkdWOworCit3aGlsZSAoPD4pCit7CisgICAgaWYoIC9eW15cLyN7fVxzXS8gJiYgISAvXFsuKl0vICkgeworICAgICAgICBjaG9tcCggJGN1cl9uYW1lID0gJF8gKSB1bmxlc3MgJGluc2lkZTsKKyAgICB9IGVsc2lmKCAvXnsvICYmICRjdXJfbmFtZSApIHsKKyAgICAgICAgJGluc2lkZSA9IDE7CisgICAgICAgICRjdXJfbmFtZSA9fiBzLy4qIChbXiBdKilcKC4qLyQxLzsKKyAgICB9IGVsc2lmKCAvXn0vICYmICRpbnNpZGUgKSB7CisgICAgICAgIHVuZGVmICRpbnNpZGU7CisgICAgICAgIHVuZGVmICRjdXJfbmFtZTsKKyAgICB9IGVsc2lmKCAkaW5zaWRlICYmIC9cYlxRJGN1cl9uYW1lXEVcKFteKV0vICkgeworICAgICAgICBwdXNoIEBmdW5jcywgJGN1cl9uYW1lIHVubGVzcyAvJGtub3duX29rLzsKKyAgICB9Cit9CisKK3ByaW50ICIkX1xuIiBmb3IgQGZ1bmNzOworZXhpdCBAZnVuY3M7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9ydW4tdGVzdC1zdWl0ZXMucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy9ydW4tdGVzdC1zdWl0ZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNThmODI3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL3J1bi10ZXN0LXN1aXRlcy5wbApAQCAtMCwwICsxLDk3IEBACisjIS91c3IvYmluL3BlcmwKKworIyBydW4tdGVzdC1zdWl0ZXMucGwKKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgUHVycG9zZQorIworIyBFeGVjdXRlcyBhbGwgdGhlIGF2YWlsYWJsZSB0ZXN0IHN1aXRlcywgYW5kIHByb3ZpZGVzIGEgYmFzaWMgc3VtbWFyeSBvZiB0aGUKKyMgcmVzdWx0cy4KKyMKKyMgVXNhZ2U6IHJ1bi10ZXN0LXN1aXRlcy5wbCBbLXZdCisjCisjIE9wdGlvbnMgOgorIyAgIC12fC0tdmVyYm9zZSAgICAtIFByb3ZpZGUgYSBwYXNzL2ZhaWwvc2tpcCBicmVha2Rvd24gcGVyIHRlc3Qgc3VpdGUgYW5kCisjICAgICAgICAgICAgICAgICAgICAgaW4gdG90YWwKKyMKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKwordXNlIHV0Zjg7Cit1c2Ugb3BlbiBxdyg6c3RkIHV0ZjgpOworCit1c2UgY29uc3RhbnQgRkFMU0UgPT4gMDsKK3VzZSBjb25zdGFudCBUUlVFID0+IDE7CisKK215ICR2ZXJib3NlOworbXkgJHN3aXRjaCA9IHNoaWZ0OworaWYgKCBkZWZpbmVkKCRzd2l0Y2gpICYmICggJHN3aXRjaCBlcSAiLXYiIHx8ICRzd2l0Y2ggZXEgIi0tdmVyYm9zZSIgKSApIHsKKyAgICAkdmVyYm9zZSA9IFRSVUU7Cit9CisKK215IEBzdWl0ZXMgPSBncmVwIHsgISAvXC4oPzpjfGdjbm98Z2NkYXxkU1lNKSQvIH0gZ2xvYiAndGVzdF9zdWl0ZV8qJzsKK2RpZSAiJDA6IG5vIHRlc3Qgc3VpdGUgZm91bmRcbiIgdW5sZXNzIEBzdWl0ZXM7CisKKyMgaW4gY2FzZSB0ZXN0IHN1aXRlcyBhcmUgbGlua2VkIGR5bmFtaWNhbGx5CiskRU5WeydMRF9MSUJSQVJZX1BBVEgnfSA9ICcuLi9saWJyYXJ5JzsKKworbXkgJHByZWZpeCA9ICReTyBlcSAiTVNXaW4zMiIgPyAnJyA6ICcuLyc7CisKK215ICgkZmFpbGVkX3N1aXRlcywgJHRvdGFsX3Rlc3RzX3J1biwgJGZhaWxlZCwgJHN1aXRlX2Nhc2VzX3Bhc3NlZCwKKyAgICAkc3VpdGVfY2FzZXNfZmFpbGVkLCAkc3VpdGVfY2FzZXNfc2tpcHBlZCwgJHRvdGFsX2Nhc2VzX3Bhc3NlZCwKKyAgICAkdG90YWxfY2FzZXNfZmFpbGVkLCAkdG90YWxfY2FzZXNfc2tpcHBlZCApOworCitmb3IgbXkgJHN1aXRlIChAc3VpdGVzKQoreworICAgIHByaW50ICIkc3VpdGUgIiwgIi4iIHggKCA3MiAtIGxlbmd0aCgkc3VpdGUpIC0gMiAtIDQgKSwgIiAiOworICAgIG15ICRyZXN1bHQgPSBgJHByZWZpeCRzdWl0ZWA7CisKKyAgICAkc3VpdGVfY2FzZXNfcGFzc2VkID0gKCkgPSAkcmVzdWx0ID1+IC8uLiBQQVNTL2c7CisgICAgJHN1aXRlX2Nhc2VzX2ZhaWxlZCA9ICgpID0gJHJlc3VsdCA9fiAvLi4gRkFJTEVEL2c7CisgICAgJHN1aXRlX2Nhc2VzX3NraXBwZWQgPSAoKSA9ICRyZXN1bHQgPX4gLy4uIC0tLS0vZzsKKworICAgIGlmKCAkcmVzdWx0ID1+IC9QQVNTRUQvICkgeworICAgICAgICBwcmludCAiUEFTU1xuIjsKKyAgICB9IGVsc2UgeworICAgICAgICAkZmFpbGVkX3N1aXRlcysrOworICAgICAgICBwcmludCAiRkFJTFxuIjsKKyAgICB9CisKKyAgICBteSAoJHBhc3NlZCwgJHRlc3RzLCAkc2tpcHBlZCkgPSAkcmVzdWx0ID1+IC8oWzAtOV0qKSBcLyAoWzAtOV0qKSB0ZXN0cy4qPyhbMC05XSopIHNraXBwZWQvOworICAgICR0b3RhbF90ZXN0c19ydW4gKz0gJHRlc3RzIC0gJHNraXBwZWQ7CisKKyAgICBpZiAoICR2ZXJib3NlICkgeworICAgICAgICBwcmludCAiKHRlc3QgY2FzZXMgcGFzc2VkOiIsICRzdWl0ZV9jYXNlc19wYXNzZWQsCisgICAgICAgICAgICAgICAgIiBmYWlsZWQ6IiwgJHN1aXRlX2Nhc2VzX2ZhaWxlZCwKKyAgICAgICAgICAgICAgICAiIHNraXBwZWQ6IiwgJHN1aXRlX2Nhc2VzX3NraXBwZWQsCisgICAgICAgICAgICAgICAgIiBvZiB0b3RhbDoiLCAoJHN1aXRlX2Nhc2VzX3Bhc3NlZCArICRzdWl0ZV9jYXNlc19mYWlsZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWl0ZV9jYXNlc19za2lwcGVkKSwKKyAgICAgICAgICAgICAgICAiKVxuIgorICAgIH0KKworICAgICR0b3RhbF9jYXNlc19wYXNzZWQgKz0gJHN1aXRlX2Nhc2VzX3Bhc3NlZDsKKyAgICAkdG90YWxfY2FzZXNfZmFpbGVkICs9ICRzdWl0ZV9jYXNlc19mYWlsZWQ7CisgICAgJHRvdGFsX2Nhc2VzX3NraXBwZWQgKz0gJHN1aXRlX2Nhc2VzX3NraXBwZWQ7Cit9CisKK3ByaW50ICItIiB4IDcyLCAiXG4iOworcHJpbnQgJGZhaWxlZF9zdWl0ZXMgPyAiRkFJTEVEIiA6ICJQQVNTRUQiOworcHJpbnRmICIgKCVkIHN1aXRlcywgJWQgdGVzdHMgcnVuKVxuIiwgc2NhbGFyIEBzdWl0ZXMsICR0b3RhbF90ZXN0c19ydW47CisKK2lmICggJHZlcmJvc2UgKSB7CisgICAgcHJpbnQgIiAgdGVzdCBjYXNlcyBwYXNzZWQgOiIsICR0b3RhbF9jYXNlc19wYXNzZWQsICJcbiI7CisgICAgcHJpbnQgIiAgICAgICAgICAgICBmYWlsZWQgOiIsICR0b3RhbF9jYXNlc19mYWlsZWQsICJcbiI7CisgICAgcHJpbnQgIiAgICAgICAgICAgIHNraXBwZWQgOiIsICR0b3RhbF9jYXNlc19za2lwcGVkLCAiXG4iOworICAgIHByaW50ICIgIG9mIHRlc3RzIGV4ZWN1dGVkIDoiLCAoICR0b3RhbF9jYXNlc19wYXNzZWQgKyAkdG90YWxfY2FzZXNfZmFpbGVkICksCisgICAgICAgICAgICAiXG4iOworICAgIHByaW50ICIgb2YgYXZhaWxhYmxlIHRlc3RzIDoiLAorICAgICAgICAgICAgKCAkdG90YWxfY2FzZXNfcGFzc2VkICsgJHRvdGFsX2Nhc2VzX2ZhaWxlZCArICR0b3RhbF9jYXNlc19za2lwcGVkICksCisgICAgICAgICAgICAiXG4iCisgICAgfQorCitleGl0KCAkZmFpbGVkX3N1aXRlcyA/IDEgOiAwICk7CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL3Rlc3QtcmVmLWNvbmZpZ3MucGwgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy90ZXN0LXJlZi1jb25maWdzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmNDczOGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy90ZXN0LXJlZi1jb25maWdzLnBsCkBAIC0wLDAgKzEsOTYgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIHRlc3Qgc3RhbmRhcmQgY29uZmlndXJhdGlvbnM6CisjIC0gYnVpbGQKKyMgLSBydW4gdGVzdCBzdWl0ZQorIyAtIHJ1biBjb21wYXQuc2gKKyMKKyMgVXNhZ2U6IHRlc3RzL3NjcmlwdHMvdGVzdC1yZWYtY29uZmlncy5wbCBbY29uZmlnLW5hbWUgWy4uLl1dCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK215ICVjb25maWdzID0gKAorICAgICdjb25maWctbWluaS10bHMxXzEuaCcgPT4geworICAgICAgICAnY29tcGF0JyA9PiAnLW0gdGxzMV8xIC1mIFwnXkRFUy1DQkMzLVNIQSRcfF5UTFMtUlNBLVdJVEgtM0RFUy1FREUtQ0JDLVNIQSRcJycsCisgICAgfSwKKyAgICAnY29uZmlnLXN1aXRlLWIuaCcgPT4geworICAgICAgICAnY29tcGF0JyA9PiAiLW0gdGxzMV8yIC1mICdFQ0RIRS1FQ0RTQS4qQUVTLipHQ00nIC1wIG1iZWRUTFMiLAorICAgIH0sCisgICAgJ2NvbmZpZy1waWNvY29pbi5oJyA9PiB7CisgICAgfSwKKyAgICAnY29uZmlnLWNjbS1wc2stdGxzMV8yLmgnID0+IHsKKyAgICAgICAgJ2NvbXBhdCcgPT4gJy1tIHRsczFfMiAtZiBcJ15UTFMtUFNLLVdJVEgtQUVTLS4uLi1DQ00tOFwnJywKKyAgICB9LAorICAgICdjb25maWctdGhyZWFkLmgnID0+IHsKKyAgICAgICAgJ29wdCcgPT4gJy1mIEVDSlBBS0UuKm5vbG9nJywKKyAgICB9LAorKTsKKworIyBJZiBubyBjb25maWctbmFtZSBpcyBwcm92aWRlZCwgdXNlIGFsbCBrbm93biBjb25maWdzLgorIyBPdGhlcndpc2UsIHVzZSB0aGUgcHJvdmlkZWQgbmFtZXMgb25seS4KK2lmICgkI0FSR1YgPj0gMCkgeworICAgIG15ICVjb25maWdzX29yaSA9ICggJWNvbmZpZ3MgKTsKKyAgICAlY29uZmlncyA9ICgpOworCisgICAgZm9yZWFjaCBteSAkY29uZl9uYW1lIChAQVJHVikgeworICAgICAgICBpZiggISBleGlzdHMgJGNvbmZpZ3Nfb3JpeyRjb25mX25hbWV9ICkgeworICAgICAgICAgICAgZGllICJVbmtub3duIGNvbmZpZ3VyYXRpb246ICRjb25mX25hbWVcbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkY29uZmlnc3skY29uZl9uYW1lfSA9ICRjb25maWdzX29yaXskY29uZl9uYW1lfTsKKyAgICAgICAgfQorICAgIH0KK30KKworLWQgJ2xpYnJhcnknICYmIC1kICdpbmNsdWRlJyAmJiAtZCAndGVzdHMnIG9yIGRpZSAiTXVzdCBiZSBydW4gZnJvbSByb290XG4iOworCitteSAkY29uZmlnX2ggPSAnaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oJzsKKworc3lzdGVtKCAiY3AgJGNvbmZpZ19oICRjb25maWdfaC5iYWsiICkgYW5kIGRpZTsKK3N1YiBhYm9ydCB7CisgICAgc3lzdGVtKCAibXYgJGNvbmZpZ19oLmJhayAkY29uZmlnX2giICkgYW5kIHdhcm4gIiRjb25maWdfaCBub3QgcmVzdG9yZWRcbiI7CisgICAgZGllICRfWzBdOworfQorCit3aGlsZSggbXkgKCRjb25mLCAkZGF0YSkgPSBlYWNoICVjb25maWdzICkgeworICAgIHN5c3RlbSggImNwICRjb25maWdfaC5iYWsgJGNvbmZpZ19oIiApIGFuZCBkaWU7CisgICAgc3lzdGVtKCAibWFrZSBjbGVhbiIgKSBhbmQgZGllOworCisgICAgcHJpbnQgIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOworICAgIHByaW50ICIqIFRlc3RpbmcgY29uZmlndXJhdGlvbjogJGNvbmZcbiI7CisgICAgcHJpbnQgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKKworICAgIHN5c3RlbSggImNwIGNvbmZpZ3MvJGNvbmYgJGNvbmZpZ19oIiApCisgICAgICAgIGFuZCBhYm9ydCAiRmFpbGVkIHRvIGFjdGl2YXRlICRjb25mXG4iOworCisgICAgc3lzdGVtKCAibWFrZSBDRkxBR1M9Jy1PcyAtV2Vycm9yJyIgKSBhbmQgYWJvcnQgIkZhaWxlZCB0byBidWlsZDogJGNvbmZcbiI7CisgICAgc3lzdGVtKCAibWFrZSB0ZXN0IiApIGFuZCBhYm9ydCAiRmFpbGVkIHRlc3Qgc3VpdGU6ICRjb25mXG4iOworCisgICAgbXkgJGNvbXBhdCA9ICRkYXRhLT57J2NvbXBhdCd9OworICAgIGlmKCAkY29tcGF0ICkKKyAgICB7CisgICAgICAgIHByaW50ICJcbnJ1bm5pbmcgY29tcGF0LnNoICRjb21wYXRcbiI7CisgICAgICAgIHN5c3RlbSggInRlc3RzL2NvbXBhdC5zaCAkY29tcGF0IiApCisgICAgICAgICAgICBhbmQgYWJvcnQgIkZhaWxlZCBjb21wYXQuc2g6ICRjb25mXG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludCAiXG5za2lwcGluZyBjb21wYXQuc2hcbiI7CisgICAgfQorCisgICAgbXkgJG9wdCA9ICRkYXRhLT57J29wdCd9OworICAgIGlmKCAkb3B0ICkKKyAgICB7CisgICAgICAgIHByaW50ICJcbnJ1bm5pbmcgc3NsLW9wdC5zaCAkb3B0XG4iOworICAgICAgICBzeXN0ZW0oICJ0ZXN0cy9zc2wtb3B0LnNoICRvcHQiICkKKyAgICAgICAgICAgIGFuZCBhYm9ydCAiRmFpbGVkIHNzbC1vcHQuc2g6ICRjb25mXG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludCAiXG5za2lwcGluZyBzc2wtb3B0LnNoXG4iOworICAgIH0KK30KKworc3lzdGVtKCAibXYgJGNvbmZpZ19oLmJhayAkY29uZmlnX2giICkgYW5kIHdhcm4gIiRjb25maWdfaCBub3QgcmVzdG9yZWRcbiI7CitzeXN0ZW0oICJtYWtlIGNsZWFuIiApOworZXhpdCAwOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvdHJhdmlzLWxvZy1mYWlsdXJlLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NjcmlwdHMvdHJhdmlzLWxvZy1mYWlsdXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NjZjYTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy90cmF2aXMtbG9nLWZhaWx1cmUuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKKyMgdHJhdmlzLWxvZy1mYWlsdXJlLnNoCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIExpc3QgdGhlIHNlcnZlciBhbmQgY2xpZW50IGxvZ3Mgb24gZmFpbGVkIHNzbC1vcHQuc2ggYW5kIGNvbXBhdC5zaCB0ZXN0cy4KKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBtYWtlIHRoZSBsb2dzIHNob3cgdXAgaW4gdGhlIFRyYXZpcyB0ZXN0IHJlc3VsdHMuCisjCisjIFNvbWUgb2YgdGhlIGxvZ3MgY2FuIGJlIHZlcnkgbG9uZzogdGhpcyBtZWFucyB1c3VhbGx5IGEgY291cGxlIG9mIG1lZ2FieXRlcworIyBidXQgaXQgY2FuIGJlIG11Y2ggbW9yZS4gRm9yIGV4YW1wbGUsIHRoZSBjbGllbnQgbG9nIG9mIHRlc3QgMjczIGluIHNzbC1vcHQuc2gKKyMgaXMgbW9yZSB0aGFuIDYzMCBNZWdhYnl0ZXMgbG9uZy4KKworaWYgWyAtZCBpbmNsdWRlL21iZWR0bHMgXTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiJDA6IG11c3QgYmUgcnVuIGZyb20gcm9vdCIgPiYyCisgICAgZXhpdCAxCitmaQorCitGSUxFUz0iby1zcnYtKi5sb2cgby1jbGktKi5sb2cgYy1zcnYtKi5sb2cgYy1jbGktKi5sb2cgby1weHktKi5sb2ciCitNQVhfTE9HX1NJWkU9MTA0ODU3NgorCitmb3IgUEFUVEVSTiBpbiAkRklMRVM7IGRvCisgICAgZm9yIExPRyBpbiAkKCBscyB0ZXN0cy8kUEFUVEVSTiAyPi9kZXYvbnVsbCApOyBkbworICAgICAgICBlY2hvCisgICAgICAgIGVjaG8gIioqKioqKiBCRUdJTiBmaWxlOiAkTE9HICoqKioqKiIKKyAgICAgICAgZWNobworICAgICAgICB0YWlsIC1jICRNQVhfTE9HX1NJWkUgJExPRworICAgICAgICBlY2hvICIqKioqKiogRU5EIGZpbGU6ICRMT0cgKioqKioqIgorICAgICAgICBlY2hvCisgICAgICAgIHJtICRMT0cKKyAgICBkb25lCitkb25lCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy95b3R0YS1idWlsZC5zaCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zY3JpcHRzL3lvdHRhLWJ1aWxkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiYWUzNGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc2NyaXB0cy95b3R0YS1idWlsZC5zaApAQCAtMCwwICsxLDYxIEBACisjIS9iaW4vc2gKKworIyB5b3R0YS1idWlsZC5zaAorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBtYmVkIFRMUyAoaHR0cHM6Ly90bHMubWJlZC5vcmcpCisjCisjIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIFRvIHJ1biB0ZXN0IGJ1aWxkcyBvZiB0aGUgeW90dGEgbW9kdWxlIGZvciBhbGwgc3VwcG9ydGVkIHRhcmdldHMuCisKK3NldCAtZXUKKworY2hlY2tfdG9vbHMoKQoreworICAgIGZvciBUT09MIGluICIkQCI7IGRvCisgICAgICAgIGlmICEgYGhhc2ggIiRUT09MIiA+L2Rldi9udWxsIDI+JjFgOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkVE9PTCBub3QgZm91bmQhIiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKK30KKworeW90dGFfYnVpbGQoKQoreworICAgIFRBUkdFVD0kMQorCisgICAgZWNobzsgZWNobyAiKioqICRUQVJHRVQgKHJlbGVhc2UpICoqKiIKKyAgICB5dCAtdCAkVEFSR0VUIGJ1aWxkCisKKyAgICBlY2hvOyBlY2hvICIqKiogJFRBUkdFVCAoZGVidWcpICoqKiIKKyAgICB5dCAtdCAkVEFSR0VUIGJ1aWxkIC1kCit9CisKKyMgTWFrZSBzdXJlIHRoZSB0b29scyB3ZSBuZWVkIGFyZSBhdmFpbGFibGUuCitjaGVja190b29scyAiYXJtLW5vbmUtZWFiaS1nY2MiICJhcm1jYyIgInlvdHRhIgorCit5b3R0YS9jcmVhdGUtbW9kdWxlLnNoCitjZCB5b3R0YS9tb2R1bGUKK3l0IHVwZGF0ZSB8fCB0cnVlICMgbmVlZHMgbmV0d29yaworCitpZiB1bmFtZSAtYSB8IGdyZXAgJ0xpbnV4Lip4ODYnID4vZGV2L251bGw7IHRoZW4KKyAgICB5b3R0YV9idWlsZCB4ODYtbGludXgtbmF0aXZlCitmaQoraWYgdW5hbWUgLWEgfCBncmVwICdEYXJ3aW4uKng4NicgPi9kZXYvbnVsbDsgdGhlbgorICAgIHlvdHRhX2J1aWxkIHg4Ni1vc3gtbmF0aXZlCitmaQorCisjIGFybWNjIGJ1aWxkIHRlc3RzLgoreW90dGFfYnVpbGQgZnJkbS1rNjRmLWFybWNjCisjeW90dGFfYnVpbGQgbm9yZGljLW5yZjUxODIyLTE2ay1hcm1jYworCisjIGFybS1ub25lLWVhYmktZ2NjIGJ1aWxkIHRlc3RzLgoreW90dGFfYnVpbGQgZnJkbS1rNjRmLWdjYworI3lvdHRhX2J1aWxkIHN0LW51Y2xlby1mNDAxcmUtZ2NjICMgZGlyZW50CisjeW90dGFfYnVpbGQgc3RtMzJmNDI5aS1kaXNjby1nY2MgIyBmYWlscyBpbiBtYmVkLWhhbC1zdC1zdG0zMmY0CisjeW90dGFfYnVpbGQgbm9yZGljLW5yZjUxODIyLTE2ay1nY2MgIyBmYWlscyBpbiBtaW5hci1wbGF0Zm9ybQorI3lvdHRhX2J1aWxkIGJiYy1taWNyb2JpdC1jbGFzc2ljLWdjYyAjIGZhaWxzIGluIG1pbmFyLXBsYXRmb3JtCisjeW90dGFfYnVpbGQgc3Qtc3RtMzJmNDM5emktZ2NjICMgZmFpbHMgaW4gbWJlZC1oYWwtc3Qtc3RtMzJmNAorI3lvdHRhX2J1aWxkIHN0LXN0bTMyZjQyOWktZGlzY28tZ2NjICMgZmFpbHMgaW4gbWJlZC1oYWwtc3Qtc3RtMzJmNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NzbC1vcHQuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3NsLW9wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzE1NWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3NzbC1vcHQuc2gKQEAgLTAsMCArMSwzNjYxIEBACisjIS9iaW4vc2gKKworIyBzc2wtb3B0LnNoCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBQdXJwb3NlCisjCisjIEV4ZWN1dGVzIHRlc3RzIHRvIHByb3ZlIHZhcmlvdXMgVExTL1NTTCBvcHRpb25zIGFuZCBleHRlbnNpb25zLgorIworIyBUaGUgZ29hbCBpcyBub3QgdG8gY292ZXIgZXZlcnkgY2lwaGVyc3VpdGUvdmVyc2lvbiwgYnV0IGluc3RlYWQgdG8gY292ZXIKKyMgc3BlY2lmaWMgb3B0aW9ucyAobWF4IGZyYWdtZW50IGxlbmd0aCwgdHJ1bmNhdGVkIGhtYWMsIGV0Yykgb3IgcHJvY2VkdXJlcworIyAoc2Vzc2lvbiByZXN1bXB0aW9uIGZyb20gY2FjaGUgb3IgdGlja2V0LCByZW5lZ28sIGV0YykuCisjCisjIFRoZSB0ZXN0cyBhc3N1bWUgYSBidWlsZCB3aXRoIGRlZmF1bHQgb3B0aW9ucywgd2l0aCBleGNlcHRpb25zIGV4cHJlc3NlZAorIyB3aXRoIGEgZGVwZW5kZW5jeS4gIFRoZSB0ZXN0cyBmb2N1cyBvbiBmdW5jdGlvbmFsaXR5IGFuZCBkbyBub3QgY29uc2lkZXIKKyMgcGVyZm9ybWFuY2UuCisjCisKK3NldCAtdQorCisjIGRlZmF1bHQgdmFsdWVzLCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBlbnZpcm9ubWVudAorOiAke1BfU1JWOj0uLi9wcm9ncmFtcy9zc2wvc3NsX3NlcnZlcjJ9Cis6ICR7UF9DTEk6PS4uL3Byb2dyYW1zL3NzbC9zc2xfY2xpZW50Mn0KKzogJHtQX1BYWTo9Li4vcHJvZ3JhbXMvdGVzdC91ZHBfcHJveHl9Cis6ICR7T1BFTlNTTF9DTUQ6PW9wZW5zc2x9ICMgT1BFTlNTTCB3b3VsZCBjb25mbGljdCB3aXRoIHRoZSBidWlsZCBzeXN0ZW0KKzogJHtHTlVUTFNfQ0xJOj1nbnV0bHMtY2xpfQorOiAke0dOVVRMU19TRVJWOj1nbnV0bHMtc2Vydn0KKworT19TUlY9IiRPUEVOU1NMX0NNRCBzX3NlcnZlciAtd3d3IC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5jcnQgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IgorT19DTEk9ImVjaG8gJ0dFVCAvIEhUVFAvMS4wJyB8ICRPUEVOU1NMX0NNRCBzX2NsaWVudCIKK0dfU1JWPSIkR05VVExTX1NFUlYgLS14NTA5Y2VydGZpbGUgZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCAtLXg1MDlrZXlmaWxlIGRhdGFfZmlsZXMvc2VydmVyNS5rZXkiCitHX0NMST0iZWNobyAnR0VUIC8gSFRUUC8xLjAnIHwgJEdOVVRMU19DTEkgLS14NTA5Y2FmaWxlIGRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiCisKK1RFU1RTPTAKK0ZBSUxTPTAKK1NLSVBTPTAKKworQ09ORklHX0g9Jy4uL2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCcKKworTUVNQ0hFQ0s9MAorRklMVEVSPScuKicKK0VYQ0xVREU9J14kJworCitTSE9XX1RFU1RfTlVNQkVSPTAKK1JVTl9URVNUX05VTUJFUj0nJworCitQUkVTRVJWRV9MT0dTPTAKKworcHJpbnRfdXNhZ2UoKSB7CisgICAgZWNobyAiVXNhZ2U6ICQwIFtvcHRpb25zXSIKKyAgICBwcmludGYgIiAgLWh8LS1oZWxwXHRQcmludCB0aGlzIGhlbHAuXG4iCisgICAgcHJpbnRmICIgIC1tfC0tbWVtY2hlY2tcdENoZWNrIG1lbW9yeSBsZWFrcyBhbmQgZXJyb3JzLlxuIgorICAgIHByaW50ZiAiICAtZnwtLWZpbHRlclx0T25seSBtYXRjaGluZyB0ZXN0cyBhcmUgZXhlY3V0ZWQgKGRlZmF1bHQ6ICckRklMVEVSJylcbiIKKyAgICBwcmludGYgIiAgLWV8LS1leGNsdWRlXHRNYXRjaGluZyB0ZXN0cyBhcmUgZXhjbHVkZWQgKGRlZmF1bHQ6ICckRVhDTFVERScpXG4iCisgICAgcHJpbnRmICIgIC1ufC0tbnVtYmVyXHRFeGVjdXRlIG9ubHkgbnVtYmVyZWQgdGVzdCAoY29tbWEtc2VwYXJhdGVkLCBlLmcuICcyNDUsMjU2JylcbiIKKyAgICBwcmludGYgIiAgLXN8LS1zaG93LW51bWJlcnNcdFNob3cgdGVzdCBudW1iZXJzIGluIGZyb250IG9mIHRlc3QgbmFtZXNcbiIKKyAgICBwcmludGYgIiAgLXB8LS1wcmVzZXJ2ZS1sb2dzXHRQcmVzZXJ2ZSBsb2dzIG9mIHN1Y2Nlc3NmdWwgdGVzdHMgYXMgd2VsbFxuIgorICAgIHByaW50ZiAiICAgICAtLXNlZWRcdEludGVnZXIgc2VlZCB2YWx1ZSB0byB1c2UgZm9yIHRoaXMgdGVzdCBydW5cbiIKK30KKworZ2V0X29wdGlvbnMoKSB7CisgICAgd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICAgIC1mfC0tZmlsdGVyKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBGSUxURVI9JDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgLWV8LS1leGNsdWRlKQorICAgICAgICAgICAgICAgIHNoaWZ0OyBFWENMVURFPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1tfC0tbWVtY2hlY2spCisgICAgICAgICAgICAgICAgTUVNQ0hFQ0s9MQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtbnwtLW51bWJlcikKKyAgICAgICAgICAgICAgICBzaGlmdDsgUlVOX1RFU1RfTlVNQkVSPSQxCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1zfC0tc2hvdy1udW1iZXJzKQorICAgICAgICAgICAgICAgIFNIT1dfVEVTVF9OVU1CRVI9MQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtcHwtLXByZXNlcnZlLWxvZ3MpCisgICAgICAgICAgICAgICAgUFJFU0VSVkVfTE9HUz0xCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC0tc2VlZCkKKyAgICAgICAgICAgICAgICBzaGlmdDsgU0VFRD0iJDEiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1ofC0taGVscCkKKyAgICAgICAgICAgICAgICBwcmludF91c2FnZQorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIGVjaG8gIlVua25vd24gYXJndW1lbnQ6ICckMSciCisgICAgICAgICAgICAgICAgcHJpbnRfdXNhZ2UKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIHNoaWZ0CisgICAgZG9uZQorfQorCisjIHNraXAgbmV4dCB0ZXN0IGlmIHRoZSBmbGFnIGlzIG5vdCBlbmFibGVkIGluIGNvbmZpZy5oCityZXF1aXJlc19jb25maWdfZW5hYmxlZCgpIHsKKyAgICBpZiBncmVwICJeI2RlZmluZSAkMSIgJENPTkZJR19IID4gL2Rldi9udWxsOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgU0tJUF9ORVhUPSJZRVMiCisgICAgZmkKK30KKworIyBza2lwIG5leHQgdGVzdCBpZiBPcGVuU1NMIGRvZXNuJ3Qgc3VwcG9ydCBGQUxMQkFDS19TQ1NWCityZXF1aXJlc19vcGVuc3NsX3dpdGhfZmFsbGJhY2tfc2NzdigpIHsKKyAgICBpZiBbIC16ICIke09QRU5TU0xfSEFTX0ZCU0NTVjotfSIgXTsgdGhlbgorICAgICAgICBpZiAkT1BFTlNTTF9DTUQgc19jbGllbnQgLWhlbHAgMj4mMSB8IGdyZXAgZmFsbGJhY2tfc2NzdiA+L2Rldi9udWxsCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIE9QRU5TU0xfSEFTX0ZCU0NTVj0iWUVTIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBPUEVOU1NMX0hBU19GQlNDU1Y9Ik5PIgorICAgICAgICBmaQorICAgIGZpCisgICAgaWYgWyAiJE9QRU5TU0xfSEFTX0ZCU0NTViIgPSAiTk8iIF07IHRoZW4KKyAgICAgICAgU0tJUF9ORVhUPSJZRVMiCisgICAgZmkKK30KKworIyBza2lwIG5leHQgdGVzdCBpZiBHbnVUTFMgaXNuJ3QgYXZhaWxhYmxlCityZXF1aXJlc19nbnV0bHMoKSB7CisgICAgaWYgWyAteiAiJHtHTlVUTFNfQVZBSUxBQkxFOi19IiBdOyB0aGVuCisgICAgICAgIGlmICggd2hpY2ggIiRHTlVUTFNfQ0xJIiAmJiB3aGljaCAiJEdOVVRMU19TRVJWIiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgR05VVExTX0FWQUlMQUJMRT0iWUVTIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBHTlVUTFNfQVZBSUxBQkxFPSJOTyIKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGlmIFsgIiRHTlVUTFNfQVZBSUxBQkxFIiA9ICJOTyIgXTsgdGhlbgorICAgICAgICBTS0lQX05FWFQ9IllFUyIKKyAgICBmaQorfQorCisjIHNraXAgbmV4dCB0ZXN0IGlmIElQdjYgaXNuJ3QgYXZhaWxhYmxlIG9uIHRoaXMgaG9zdAorcmVxdWlyZXNfaXB2NigpIHsKKyAgICBpZiBbIC16ICIke0hBU19JUFY2Oi19IiBdOyB0aGVuCisgICAgICAgICRQX1NSViBzZXJ2ZXJfYWRkcj0nOjoxJyA+ICRTUlZfT1VUIDI+JjEgJgorICAgICAgICBTUlZfUElEPSQhCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAga2lsbCAkU1JWX1BJRCA+L2Rldi9udWxsIDI+JjEKKyAgICAgICAgaWYgZ3JlcCAiTkVUIC0gQmluZGluZyBvZiB0aGUgc29ja2V0IGZhaWxlZCIgJFNSVl9PVVQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgSEFTX0lQVjY9Ik5PIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBIQVNfSVBWNj0iWUVTIgorICAgICAgICBmaQorICAgICAgICBybSAtciAkU1JWX09VVAorICAgIGZpCisKKyAgICBpZiBbICIkSEFTX0lQVjYiID0gIk5PIiBdOyB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCit9CisKKyMgc2tpcCB0aGUgbmV4dCB0ZXN0IGlmIHZhbGdyaW5kIGlzIGluIHVzZQorbm90X3dpdGhfdmFsZ3JpbmQoKSB7CisgICAgaWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCit9CisKKyMgc2tpcCB0aGUgbmV4dCB0ZXN0IGlmIHZhbGdyaW5kIGlzIE5PVCBpbiB1c2UKK29ubHlfd2l0aF92YWxncmluZCgpIHsKKyAgICBpZiBbICIkTUVNQ0hFQ0siIC1lcSAwIF07IHRoZW4KKyAgICAgICAgU0tJUF9ORVhUPSJZRVMiCisgICAgZmkKK30KKworIyBtdWx0aXBseSB0aGUgY2xpZW50IHRpbWVvdXQgZGVsYXkgYnkgdGhlIGdpdmVuIGZhY3RvciBmb3IgdGhlIG5leHQgdGVzdAorY2xpZW50X25lZWRzX21vcmVfdGltZSgpIHsKKyAgICBDTElfREVMQVlfRkFDVE9SPSQxCit9CisKKyMgd2FpdCBmb3IgdGhlIGdpdmVuIHNlY29uZHMgYWZ0ZXIgdGhlIGNsaWVudCBmaW5pc2hlZCBpbiB0aGUgbmV4dCB0ZXN0CitzZXJ2ZXJfbmVlZHNfbW9yZV90aW1lKCkgeworICAgIFNSVl9ERUxBWV9TRUNPTkRTPSQxCit9CisKKyMgcHJpbnRfbmFtZSA8bmFtZT4KK3ByaW50X25hbWUoKSB7CisgICAgVEVTVFM9JCgoICRURVNUUyArIDEgKSkKKyAgICBMSU5FPSIiCisKKyAgICBpZiBbICIkU0hPV19URVNUX05VTUJFUiIgLWd0IDAgXTsgdGhlbgorICAgICAgICBMSU5FPSIkVEVTVFMgIgorICAgIGZpCisKKyAgICBMSU5FPSIkTElORSQxIgorICAgIHByaW50ZiAiJExJTkUgIgorICAgIExFTj0kKCggNzIgLSBgZWNobyAiJExJTkUiIHwgd2MgLWNgICkpCisgICAgZm9yIGkgaW4gYHNlcSAxICRMRU5gOyBkbyBwcmludGYgJy4nOyBkb25lCisgICAgcHJpbnRmICcgJworCit9CisKKyMgZmFpbCA8bWVzc2FnZT4KK2ZhaWwoKSB7CisgICAgZWNobyAiRkFJTCIKKyAgICBlY2hvICIgICEgJDEiCisKKyAgICBtdiAkU1JWX09VVCBvLXNydi0ke1RFU1RTfS5sb2cKKyAgICBtdiAkQ0xJX09VVCBvLWNsaS0ke1RFU1RTfS5sb2cKKyAgICBpZiBbIC1uICIkUFhZX0NNRCIgXTsgdGhlbgorICAgICAgICBtdiAkUFhZX09VVCBvLXB4eS0ke1RFU1RTfS5sb2cKKyAgICBmaQorICAgIGVjaG8gIiAgISBvdXRwdXRzIHNhdmVkIHRvIG8tWFhYLSR7VEVTVFN9LmxvZyIKKworICAgIGlmIFsgIlgke1VTRVI6LX0iID0gWGJ1aWxkYm90IC1vICJYJHtMT0dOQU1FOi19IiA9IFhidWlsZGJvdCBdOyB0aGVuCisgICAgICAgIGVjaG8gIiAgISBzZXJ2ZXIgb3V0cHV0OiIKKyAgICAgICAgY2F0IG8tc3J2LSR7VEVTVFN9LmxvZworICAgICAgICBlY2hvICIgICEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgICAgIGVjaG8gIiAgISBjbGllbnQgb3V0cHV0OiIKKyAgICAgICAgY2F0IG8tY2xpLSR7VEVTVFN9LmxvZworICAgICAgICBpZiBbIC1uICIkUFhZX0NNRCIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiICAhID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorICAgICAgICAgICAgZWNobyAiICAhIHByb3h5IG91dHB1dDoiCisgICAgICAgICAgICBjYXQgby1weHktJHtURVNUU30ubG9nCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIiIKKyAgICBmaQorCisgICAgRkFJTFM9JCgoICRGQUlMUyArIDEgKSkKK30KKworIyBpc19wb2xhciA8Y21kX2xpbmU+Citpc19wb2xhcigpIHsKKyAgICBlY2hvICIkMSIgfCBncmVwICdzc2xfc2VydmVyMlx8c3NsX2NsaWVudDInID4gL2Rldi9udWxsCit9CisKKyMgb3BlbnNzbCBzX3NlcnZlciBkb2Vzbid0IGhhdmUgLXd3dyB3aXRoIERUTFMKK2NoZWNrX29zcnZfZHRscygpIHsKKyAgICBpZiBlY2hvICIkU1JWX0NNRCIgfCBncmVwICdzX3NlcnZlci4qLWR0bHMnID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgTkVFRFNfSU5QVVQ9MQorICAgICAgICBTUlZfQ01EPSIkKCBlY2hvICRTUlZfQ01EIHwgc2VkIHMvLXd3dy8vICkiCisgICAgZWxzZQorICAgICAgICBORUVEU19JTlBVVD0wCisgICAgZmkKK30KKworIyBwcm92aWRlIGlucHV0IHRvIGNvbW1hbmRzIHRoYXQgbmVlZCBpdAorcHJvdmlkZV9pbnB1dCgpIHsKKyAgICBpZiBbICRORUVEU19JTlBVVCAtZXEgMCBdOyB0aGVuCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICBlY2hvICJIVFRQLzEuMCAyMDAgT0siCisgICAgICAgIHNsZWVwIDEKKyAgICBkb25lCit9CisKKyMgaGFzX21lbV9lcnIgPGxvZ19maWxlX25hbWU+CitoYXNfbWVtX2VycigpIHsKKyAgICBpZiAoIGdyZXAgLUYgJ0FsbCBoZWFwIGJsb2NrcyB3ZXJlIGZyZWVkIC0tIG5vIGxlYWtzIGFyZSBwb3NzaWJsZScgIiQxIiAmJgorICAgICAgICAgZ3JlcCAtRiAnRVJST1IgU1VNTUFSWTogMCBlcnJvcnMgZnJvbSAwIGNvbnRleHRzJyAiJDEiICkgPiAvZGV2L251bGwKKyAgICB0aGVuCisgICAgICAgIHJldHVybiAxICMgZmFsc2U6IGRvZXMgbm90IGhhdmUgZXJyb3JzCisgICAgZWxzZQorICAgICAgICByZXR1cm4gMCAjIHRydWU6IGhhcyBlcnJvcnMKKyAgICBmaQorfQorCisjIHdhaXQgZm9yIHNlcnZlciB0byBzdGFydDogdHdvIHZlcnNpb25zIGRlcGVuZGluZyBvbiBsc29mIGF2YWlsYWJpbGl0eQord2FpdF9zZXJ2ZXJfc3RhcnQoKSB7CisgICAgaWYgd2hpY2ggbHNvZiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgU1RBUlRfVElNRT0kKCBkYXRlICslcyApCisgICAgICAgIERPTkU9MAorCisgICAgICAgICMgbWFrZSBhIHRpZ2h0IGxvb3AsIHNlcnZlciB1c3VhbGx5IHRha2VzIGxlc3MgdGhhbiAxIHNlYyB0byBzdGFydAorICAgICAgICBpZiBbICIkRFRMUyIgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgd2hpbGUgWyAkRE9ORSAtZXEgMCBdOyBkbworICAgICAgICAgICAgICAgIGlmIGxzb2YgLW5iaSBVRFA6IiRTUlZfUE9SVCIgMj4vZGV2L251bGwgfCBncmVwIFVEUCA+L2Rldi9udWxsCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBET05FPTEKKyAgICAgICAgICAgICAgICBlbGlmIFsgJCgoICQoIGRhdGUgKyVzICkgLSAkU1RBUlRfVElNRSApKSAtZ3QgJERPR19ERUxBWSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIlNFUlZFUlNUQVJUIFRJTUVPVVQiCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIlNFUlZFUlNUQVJUIFRJTUVPVVQiID4+ICRTUlZfT1VUCisgICAgICAgICAgICAgICAgICAgIERPTkU9MQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdoaWxlIFsgJERPTkUgLWVxIDAgXTsgZG8KKyAgICAgICAgICAgICAgICBpZiBsc29mIC1uYmkgVENQOiIkU1JWX1BPUlQiIDI+L2Rldi9udWxsIHwgZ3JlcCBMSVNURU4gPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgRE9ORT0xCisgICAgICAgICAgICAgICAgZWxpZiBbICQoKCAkKCBkYXRlICslcyApIC0gJFNUQVJUX1RJTUUgKSkgLWd0ICRET0dfREVMQVkgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJTRVJWRVJTVEFSVCBUSU1FT1VUIgorICAgICAgICAgICAgICAgICAgICBlY2hvICJTRVJWRVJTVEFSVCBUSU1FT1VUIiA+PiAkU1JWX09VVAorICAgICAgICAgICAgICAgICAgICBET05FPTEKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgc2xlZXAgIiRTVEFSVF9ERUxBWSIKKyAgICBmaQorfQorCisjIHdhaXQgZm9yIGNsaWVudCB0byB0ZXJtaW5hdGUgYW5kIHNldCBDTElfRVhJVAorIyBtdXN0IGJlIGNhbGxlZCByaWdodCBhZnRlciBzdGFydGluZyB0aGUgY2xpZW50Cit3YWl0X2NsaWVudF9kb25lKCkgeworICAgIENMSV9QSUQ9JCEKKworICAgIENMSV9ERUxBWT0kKCggJERPR19ERUxBWSAqICRDTElfREVMQVlfRkFDVE9SICkpCisgICAgQ0xJX0RFTEFZX0ZBQ1RPUj0xCisKKyAgICAoIHNsZWVwICRDTElfREVMQVk7IGVjaG8gIj09PUNMSUVOVF9USU1FT1VUPT09IiA+PiAkQ0xJX09VVDsga2lsbCAkQ0xJX1BJRCApICYKKyAgICBET0dfUElEPSQhCisKKyAgICB3YWl0ICRDTElfUElECisgICAgQ0xJX0VYSVQ9JD8KKworICAgIGtpbGwgJERPR19QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgd2FpdCAkRE9HX1BJRAorCisgICAgZWNobyAiRVhJVDogJENMSV9FWElUIiA+PiAkQ0xJX09VVAorCisgICAgc2xlZXAgJFNSVl9ERUxBWV9TRUNPTkRTCisgICAgU1JWX0RFTEFZX1NFQ09ORFM9MAorfQorCisjIGNoZWNrIGlmIHRoZSBnaXZlbiBjb21tYW5kIHVzZXMgZHRscyBhbmQgc2V0cyBnbG9iYWwgdmFyaWFibGUgRFRMUworZGV0ZWN0X2R0bHMoKSB7CisgICAgaWYgZWNobyAiJDEiIHwgZ3JlcCAnZHRscz0xXHwtZHRsczFcfC11JyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIERUTFM9MQorICAgIGVsc2UKKyAgICAgICAgRFRMUz0wCisgICAgZmkKK30KKworIyBVc2FnZTogcnVuX3Rlc3QgbmFtZSBbLXAgcHJveHlfY21kXSBzcnZfY21kIGNsaV9jbWQgY2xpX2V4aXQgW29wdGlvbiBbLi4uXV0KKyMgT3B0aW9uczogIC1zIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gc2VydmVyIG91dHB1dAorIyAgICAgICAgICAgLWMgcGF0dGVybiAgcGF0dGVybiB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiBjbGllbnQgb3V0cHV0CisjICAgICAgICAgICAtdSBwYXR0ZXJuICBsaW5lcyBhZnRlciBwYXR0ZXJuIG11c3QgYmUgdW5pcXVlIGluIGNsaWVudCBvdXRwdXQKKyMgICAgICAgICAgIC1TIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIGFic2VudCBpbiBzZXJ2ZXIgb3V0cHV0CisjICAgICAgICAgICAtQyBwYXR0ZXJuICBwYXR0ZXJuIHRoYXQgbXVzdCBiZSBhYnNlbnQgaW4gY2xpZW50IG91dHB1dAorIyAgICAgICAgICAgLVUgcGF0dGVybiAgbGluZXMgYWZ0ZXIgcGF0dGVybiBtdXN0IGJlIHVuaXF1ZSBpbiBzZXJ2ZXIgb3V0cHV0CitydW5fdGVzdCgpIHsKKyAgICBOQU1FPSIkMSIKKyAgICBzaGlmdCAxCisKKyAgICBpZiBlY2hvICIkTkFNRSIgfCBncmVwICIkRklMVEVSIiB8IGdyZXAgLXYgIiRFWENMVURFIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgICBlbHNlCisgICAgICAgIFNLSVBfTkVYVD0iTk8iCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBwcmludF9uYW1lICIkTkFNRSIKKworICAgICMgRG8gd2Ugb25seSBydW4gbnVtYmVyZWQgdGVzdHM/CisgICAgaWYgWyAiWCRSVU5fVEVTVF9OVU1CRVIiID0gIlgiIF07IHRoZW4gOgorICAgIGVsaWYgZWNobyAiLCRSVU5fVEVTVF9OVU1CRVIsIiB8IGdyZXAgIiwkVEVTVFMsIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgICBlbHNlCisgICAgICAgIFNLSVBfTkVYVD0iWUVTIgorICAgIGZpCisKKyAgICAjIHNob3VsZCB3ZSBza2lwPworICAgIGlmIFsgIlgkU0tJUF9ORVhUIiA9ICJYWUVTIiBdOyB0aGVuCisgICAgICAgIFNLSVBfTkVYVD0iTk8iCisgICAgICAgIGVjaG8gIlNLSVAiCisgICAgICAgIFNLSVBTPSQoKCAkU0tJUFMgKyAxICkpCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICAjIGRvZXMgdGhpcyB0ZXN0IHVzZSBhIHByb3h5PworICAgIGlmIFsgIlgkMSIgPSAiWC1wIiBdOyB0aGVuCisgICAgICAgIFBYWV9DTUQ9IiQyIgorICAgICAgICBzaGlmdCAyCisgICAgZWxzZQorICAgICAgICBQWFlfQ01EPSIiCisgICAgZmkKKworICAgICMgZ2V0IGNvbW1hbmRzIGFuZCBjbGllbnQgb3V0cHV0CisgICAgU1JWX0NNRD0iJDEiCisgICAgQ0xJX0NNRD0iJDIiCisgICAgQ0xJX0VYUEVDVD0iJDMiCisgICAgc2hpZnQgMworCisgICAgIyBmaXggY2xpZW50IHBvcnQKKyAgICBpZiBbIC1uICIkUFhZX0NNRCIgXTsgdGhlbgorICAgICAgICBDTElfQ01EPSQoIGVjaG8gIiRDTElfQ01EIiB8IHNlZCBzLytTUlZfUE9SVC8kUFhZX1BPUlQvZyApCisgICAgZWxzZQorICAgICAgICBDTElfQ01EPSQoIGVjaG8gIiRDTElfQ01EIiB8IHNlZCBzLytTUlZfUE9SVC8kU1JWX1BPUlQvZyApCisgICAgZmkKKworICAgICMgdXBkYXRlIERUTFMgdmFyaWFibGUKKyAgICBkZXRlY3RfZHRscyAiJFNSVl9DTUQiCisKKyAgICAjIHByZXBlbmQgdmFsZ3JpbmQgdG8gb3VyIGNvbW1hbmRzIGlmIGFjdGl2ZQorICAgIGlmIFsgIiRNRU1DSEVDSyIgLWd0IDAgXTsgdGhlbgorICAgICAgICBpZiBpc19wb2xhciAiJFNSVl9DTUQiOyB0aGVuCisgICAgICAgICAgICBTUlZfQ01EPSJ2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAkU1JWX0NNRCIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgaXNfcG9sYXIgIiRDTElfQ01EIjsgdGhlbgorICAgICAgICAgICAgQ0xJX0NNRD0idmFsZ3JpbmQgLS1sZWFrLWNoZWNrPWZ1bGwgJENMSV9DTUQiCisgICAgICAgIGZpCisgICAgZmkKKworICAgIFRJTUVTX0xFRlQ9MgorICAgIHdoaWxlIFsgJFRJTUVTX0xFRlQgLWd0IDAgXTsgZG8KKyAgICAgICAgVElNRVNfTEVGVD0kKCggJFRJTUVTX0xFRlQgLSAxICkpCisKKyAgICAgICAgIyBydW4gdGhlIGNvbW1hbmRzCisgICAgICAgIGlmIFsgLW4gIiRQWFlfQ01EIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkUFhZX0NNRCIgPiAkUFhZX09VVAorICAgICAgICAgICAgJFBYWV9DTUQgPj4gJFBYWV9PVVQgMj4mMSAmCisgICAgICAgICAgICBQWFlfUElEPSQhCisgICAgICAgICAgICAjIGFzc3VtZSBwcm94eSBzdGFydHMgZmFzdGVyIHRoYW4gc2VydmVyCisgICAgICAgIGZpCisKKyAgICAgICAgY2hlY2tfb3Nydl9kdGxzCisgICAgICAgIGVjaG8gIiRTUlZfQ01EIiA+ICRTUlZfT1VUCisgICAgICAgIHByb3ZpZGVfaW5wdXQgfCAkU1JWX0NNRCA+PiAkU1JWX09VVCAyPiYxICYKKyAgICAgICAgU1JWX1BJRD0kIQorICAgICAgICB3YWl0X3NlcnZlcl9zdGFydAorCisgICAgICAgIGVjaG8gIiRDTElfQ01EIiA+ICRDTElfT1VUCisgICAgICAgIGV2YWwgIiRDTElfQ01EIiA+PiAkQ0xJX09VVCAyPiYxICYKKyAgICAgICAgd2FpdF9jbGllbnRfZG9uZQorCisgICAgICAgICMgdGVybWluYXRlIHRoZSBzZXJ2ZXIgKGFuZCB0aGUgcHJveHkpCisgICAgICAgIGtpbGwgJFNSVl9QSUQKKyAgICAgICAgd2FpdCAkU1JWX1BJRAorICAgICAgICBpZiBbIC1uICIkUFhZX0NNRCIgXTsgdGhlbgorICAgICAgICAgICAga2lsbCAkUFhZX1BJRCA+L2Rldi9udWxsIDI+JjEKKyAgICAgICAgICAgIHdhaXQgJFBYWV9QSUQKKyAgICAgICAgZmkKKworICAgICAgICAjIHJldHJ5IG9ubHkgb24gdGltZW91dHMKKyAgICAgICAgaWYgZ3JlcCAnPT09Q0xJRU5UX1RJTUVPVVQ9PT0nICRDTElfT1VUID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIHByaW50ZiAiUkVUUlkgIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBUSU1FU19MRUZUPTAKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIGNoZWNrIGlmIHRoZSBjbGllbnQgYW5kIHNlcnZlciB3ZW50IGF0IGxlYXN0IHRvIHRoZSBoYW5kc2hha2Ugc3RhZ2UKKyAgICAjICh1c2VmdWwgdG8gYXZvaWQgdGVzdHMgd2l0aCBvbmx5IG5lZ2F0aXZlIGFzc2VydGlvbnMgYW5kIG5vbi16ZXJvCisgICAgIyBleHBlY3RlZCBjbGllbnQgZXhpdCB0byBpbmNvcnJlY3RseSBzdWNjZWVkIGluIGNhc2Ugb2YgY2F0YXN0cm9waGljCisgICAgIyBmYWlsdXJlKQorICAgIGlmIGlzX3BvbGFyICIkU1JWX0NNRCI7IHRoZW4KKyAgICAgICAgaWYgZ3JlcCAiUGVyZm9ybWluZyB0aGUgU1NML1RMUyBoYW5kc2hha2UiICRTUlZfT1VUID4vZGV2L251bGw7IHRoZW4gOjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFpbCAic2VydmVyIG9yIGNsaWVudCBmYWlsZWQgdG8gcmVhY2ggaGFuZHNoYWtlIHN0YWdlIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpCisgICAgZmkKKyAgICBpZiBpc19wb2xhciAiJENMSV9DTUQiOyB0aGVuCisgICAgICAgIGlmIGdyZXAgIlBlcmZvcm1pbmcgdGhlIFNTTC9UTFMgaGFuZHNoYWtlIiAkQ0xJX09VVCA+L2Rldi9udWxsOyB0aGVuIDo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZhaWwgInNlcnZlciBvciBjbGllbnQgZmFpbGVkIHRvIHJlYWNoIGhhbmRzaGFrZSBzdGFnZSIKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIGNoZWNrIHNlcnZlciBleGl0IGNvZGUKKyAgICBpZiBbICQ/ICE9IDAgXTsgdGhlbgorICAgICAgICBmYWlsICJzZXJ2ZXIgZmFpbCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgICMgY2hlY2sgY2xpZW50IGV4aXQgY29kZQorICAgIGlmIFsgXCggIiRDTElfRVhQRUNUIiA9IDAgLWEgIiRDTElfRVhJVCIgIT0gMCBcKSAtbyBcCisgICAgICAgICBcKCAiJENMSV9FWFBFQ1QiICE9IDAgLWEgIiRDTElfRVhJVCIgPSAwIFwpIF0KKyAgICB0aGVuCisgICAgICAgIGZhaWwgImJhZCBjbGllbnQgZXhpdCBjb2RlIChleHBlY3RlZCAkQ0xJX0VYUEVDVCwgZ290ICRDTElfRVhJVCkiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICAjIGNoZWNrIG90aGVyIGFzc2VydGlvbnMKKyAgICAjIGxpbmVzIGJlZ2lubmluZyB3aXRoID09IGFyZSBhZGRlZCBieSB2YWxncmluZCwgaWdub3JlIHRoZW0KKyAgICAjIGxpbmVzIHdpdGggJ1NlcmlvdXMgZXJyb3Igd2hlbiByZWFkaW5nIGRlYnVnIGluZm8nLCBhcmUgdmFsZ3JpbmQgaXNzdWVzIGFzIHdlbGwKKyAgICB3aGlsZSBbICQjIC1ndCAwIF0KKyAgICBkbworICAgICAgICBjYXNlICQxIGluCisgICAgICAgICAgICAiLXMiKQorICAgICAgICAgICAgICAgIGlmIGdyZXAgLXYgJ149PScgJFNSVl9PVVQgfCBncmVwIC12ICdTZXJpb3VzIGVycm9yIHdoZW4gcmVhZGluZyBkZWJ1ZyBpbmZvJyB8IGdyZXAgIiQyIiA+L2Rldi9udWxsOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmFpbCAicGF0dGVybiAnJDInIE1VU1QgYmUgcHJlc2VudCBpbiB0aGUgU2VydmVyIG91dHB1dCIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAiLWMiKQorICAgICAgICAgICAgICAgIGlmIGdyZXAgLXYgJ149PScgJENMSV9PVVQgfCBncmVwIC12ICdTZXJpb3VzIGVycm9yIHdoZW4gcmVhZGluZyBkZWJ1ZyBpbmZvJyB8IGdyZXAgIiQyIiA+L2Rldi9udWxsOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmFpbCAicGF0dGVybiAnJDInIE1VU1QgYmUgcHJlc2VudCBpbiB0aGUgQ2xpZW50IG91dHB1dCIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAiLVMiKQorICAgICAgICAgICAgICAgIGlmIGdyZXAgLXYgJ149PScgJFNSVl9PVVQgfCBncmVwIC12ICdTZXJpb3VzIGVycm9yIHdoZW4gcmVhZGluZyBkZWJ1ZyBpbmZvJyB8IGdyZXAgIiQyIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZhaWwgInBhdHRlcm4gJyQyJyBNVVNUIE5PVCBiZSBwcmVzZW50IGluIHRoZSBTZXJ2ZXIgb3V0cHV0IgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICItQyIpCisgICAgICAgICAgICAgICAgaWYgZ3JlcCAtdiAnXj09JyAkQ0xJX09VVCB8IGdyZXAgLXYgJ1NlcmlvdXMgZXJyb3Igd2hlbiByZWFkaW5nIGRlYnVnIGluZm8nIHwgZ3JlcCAiJDIiID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZmFpbCAicGF0dGVybiAnJDInIE1VU1QgTk9UIGJlIHByZXNlbnQgaW4gdGhlIENsaWVudCBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICMgVGhlIGZpbHRlcmluZyBpbiB0aGUgZm9sbG93aW5nIHR3byBvcHRpb25zICgtdSBhbmQgLVUpIGRvIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAjICAgLSBpZ25vcmUgdmFsZ3JpbmQgb3V0cHV0CisgICAgICAgICAgICAgICAgIyAgIC0gZmlsdGVyIG91dCBldmVyeXRoaW5nIGJ1dCBsaW5lcyByaWdodCBhZnRlciB0aGUgcGF0dGVybiBvY2N1cmFuY2VzCisgICAgICAgICAgICAgICAgIyAgIC0ga2VlcCBvbmUgb2YgZWFjaCBub24tdW5pcXVlIGxpbmUKKyAgICAgICAgICAgICAgICAjICAgLSBjb3VudCBob3cgbWFueSBsaW5lcyByZW1haW4KKyAgICAgICAgICAgICAgICAjIEEgbGluZSB3aXRoICctLScgd2lsbCByZW1haW4gaW4gdGhlIHJlc3VsdCBmcm9tIHByZXZpb3VzIG91dHB1dHMsIHNvIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHJlc3VsdCB3aWxsIGJlIDEKKyAgICAgICAgICAgICAgICAjIGlmIHRoZXJlIHdlcmUgbm8gZHVwbGljYXRlcy4KKyAgICAgICAgICAgICItVSIpCisgICAgICAgICAgICAgICAgaWYgWyAkKGdyZXAgLXYgJ149PScgJFNSVl9PVVQgfCBncmVwIC12ICdTZXJpb3VzIGVycm9yIHdoZW4gcmVhZGluZyBkZWJ1ZyBpbmZvJyB8IGdyZXAgLUExICIkMiIgfCBncmVwIC12ICIkMiIgfCBzb3J0IHwgdW5pcSAtZCB8IHdjIC1sKSAtZ3QgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZhaWwgImxpbmVzIGZvbGxvd2luZyBwYXR0ZXJuICckMicgbXVzdCBiZSB1bmlxdWUgaW4gU2VydmVyIG91dHB1dCIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAiLXUiKQorICAgICAgICAgICAgICAgIGlmIFsgJChncmVwIC12ICdePT0nICRDTElfT1VUIHwgZ3JlcCAtdiAnU2VyaW91cyBlcnJvciB3aGVuIHJlYWRpbmcgZGVidWcgaW5mbycgfCBncmVwIC1BMSAiJDIiIHwgZ3JlcCAtdiAiJDIiIHwgc29ydCB8IHVuaXEgLWQgfCB3YyAtbCkgLWd0IDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmYWlsICJsaW5lcyBmb2xsb3dpbmcgcGF0dGVybiAnJDInIG11c3QgYmUgdW5pcXVlIGluIENsaWVudCBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIHRlc3Q6ICQxIiA+JjIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZXNhYworICAgICAgICBzaGlmdCAyCisgICAgZG9uZQorCisgICAgIyBjaGVjayB2YWxncmluZCdzIHJlc3VsdHMKKyAgICBpZiBbICIkTUVNQ0hFQ0siIC1ndCAwIF07IHRoZW4KKyAgICAgICAgaWYgaXNfcG9sYXIgIiRTUlZfQ01EIiAmJiBoYXNfbWVtX2VyciAkU1JWX09VVDsgdGhlbgorICAgICAgICAgICAgZmFpbCAiU2VydmVyIGhhcyBtZW1vcnkgZXJyb3JzIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpCisgICAgICAgIGlmIGlzX3BvbGFyICIkQ0xJX0NNRCIgJiYgaGFzX21lbV9lcnIgJENMSV9PVVQ7IHRoZW4KKyAgICAgICAgICAgIGZhaWwgIkNsaWVudCBoYXMgbWVtb3J5IGVycm9ycyIKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIGlmIHdlJ3JlIGhlcmUsIGV2ZXJ5dGhpbmcgaXMgb2sKKyAgICBlY2hvICJQQVNTIgorICAgIGlmIFsgIiRQUkVTRVJWRV9MT0dTIiAtZ3QgMCBdOyB0aGVuCisgICAgICAgIG12ICRTUlZfT1VUIG8tc3J2LSR7VEVTVFN9LmxvZworICAgICAgICBtdiAkQ0xJX09VVCBvLWNsaS0ke1RFU1RTfS5sb2cKKyAgICBmaQorCisgICAgcm0gLWYgJFNSVl9PVVQgJENMSV9PVVQgJFBYWV9PVVQKK30KKworY2xlYW51cCgpIHsKKyAgICBybSAtZiAkQ0xJX09VVCAkU1JWX09VVCAkUFhZX09VVCAkU0VTU0lPTgorICAgIHRlc3QgLW4gIiR7U1JWX1BJRDotfSIgJiYga2lsbCAkU1JWX1BJRCA+L2Rldi9udWxsIDI+JjEKKyAgICB0ZXN0IC1uICIke1BYWV9QSUQ6LX0iICYmIGtpbGwgJFBYWV9QSUQgPi9kZXYvbnVsbCAyPiYxCisgICAgdGVzdCAtbiAiJHtDTElfUElEOi19IiAmJiBraWxsICRDTElfUElEID4vZGV2L251bGwgMj4mMQorICAgIHRlc3QgLW4gIiR7RE9HX1BJRDotfSIgJiYga2lsbCAkRE9HX1BJRCA+L2Rldi9udWxsIDI+JjEKKyAgICBleGl0IDEKK30KKworIworIyBNQUlOCisjCisKK2lmIGNkICQoIGRpcm5hbWUgJDAgKTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiY2QgJCggZGlybmFtZSAkMCApIGZhaWxlZCIgPiYyCisgICAgZXhpdCAxCitmaQorCitnZXRfb3B0aW9ucyAiJEAiCisKKyMgc2FuaXR5IGNoZWNrcywgYXZvaWQgYW4gYXZhbGFuY2hlIG9mIGVycm9ycworaWYgWyAhIC14ICIkUF9TUlYiIF07IHRoZW4KKyAgICBlY2hvICJDb21tYW5kICckUF9TUlYnIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGUiCisgICAgZXhpdCAxCitmaQoraWYgWyAhIC14ICIkUF9DTEkiIF07IHRoZW4KKyAgICBlY2hvICJDb21tYW5kICckUF9DTEknIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGUiCisgICAgZXhpdCAxCitmaQoraWYgWyAhIC14ICIkUF9QWFkiIF07IHRoZW4KKyAgICBlY2hvICJDb21tYW5kICckUF9QWFknIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGUiCisgICAgZXhpdCAxCitmaQoraWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgaWYgd2hpY2ggdmFsZ3JpbmQgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgZWNobyAiTWVtY2hlY2sgbm90IHBvc3NpYmxlLiBWYWxncmluZCBub3QgZm91bmQiCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQoraWYgd2hpY2ggJE9QRU5TU0xfQ01EID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgZWNobyAiQ29tbWFuZCAnJE9QRU5TU0xfQ01EJyBub3QgZm91bmQiCisgICAgZXhpdCAxCitmaQorCisjIHVzZWQgYnkgd2F0Y2hkb2cKK01BSU5fUElEPSIkJCIKKworIyBiZSBtb3JlIHBhdGllbnQgd2l0aCB2YWxncmluZAoraWYgWyAiJE1FTUNIRUNLIiAtZ3QgMCBdOyB0aGVuCisgICAgU1RBUlRfREVMQVk9MworICAgIERPR19ERUxBWT0zMAorZWxzZQorICAgIFNUQVJUX0RFTEFZPTEKKyAgICBET0dfREVMQVk9MTAKK2ZpCitDTElfREVMQVlfRkFDVE9SPTEKK1NSVl9ERUxBWV9TRUNPTkRTPTAKKworIyBQaWNrIGEgInVuaXF1ZSIgc2VydmVyIHBvcnQgaW4gdGhlIHJhbmdlIDEwMDAwLTE5OTk5LCBhbmQgYSBwcm94eSBwb3J0CitQT1JUX0JBU0U9IjAwMDAkJCIKK1BPUlRfQkFTRT0iJCggcHJpbnRmICRQT1JUX0JBU0UgfCB0YWlsIC1jIDQgKSIKK1NSVl9QT1JUPSIxJFBPUlRfQkFTRSIKK1BYWV9QT1JUPSIyJFBPUlRfQkFTRSIKK3Vuc2V0IFBPUlRfQkFTRQorCisjIGZpeCBjb21tYW5kcyB0byB1c2UgdGhpcyBwb3J0LCBmb3JjZSBJUHY0IHdoaWxlIGF0IGl0CisjICtTUlZfUE9SVCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGVpdGhlciAkU1JWX1BPUlQgb3IgJFBYWV9QT1JUIGxhdGVyCitQX1NSVj0iJFBfU1JWIHNlcnZlcl9hZGRyPTEyNy4wLjAuMSBzZXJ2ZXJfcG9ydD0kU1JWX1BPUlQiCitQX0NMST0iJFBfQ0xJIHNlcnZlcl9hZGRyPTEyNy4wLjAuMSBzZXJ2ZXJfcG9ydD0rU1JWX1BPUlQiCitQX1BYWT0iJFBfUFhZIHNlcnZlcl9hZGRyPTEyNy4wLjAuMSBzZXJ2ZXJfcG9ydD0kU1JWX1BPUlQgbGlzdGVuX2FkZHI9MTI3LjAuMC4xIGxpc3Rlbl9wb3J0PSRQWFlfUE9SVCAke1NFRUQ6KyJzZWVkPSRTRUVEIn0iCitPX1NSVj0iJE9fU1JWIC1hY2NlcHQgJFNSVl9QT1JUIC1kaHBhcmFtIGRhdGFfZmlsZXMvZGhwYXJhbXMucGVtIgorT19DTEk9IiRPX0NMSSAtY29ubmVjdCBsb2NhbGhvc3Q6K1NSVl9QT1JUIgorR19TUlY9IiRHX1NSViAtcCAkU1JWX1BPUlQiCitHX0NMST0iJEdfQ0xJIC1wICtTUlZfUE9SVCBsb2NhbGhvc3QiCisKKyMgQWxzbyBwaWNrIGEgdW5pcXVlIG5hbWUgZm9yIGludGVybWVkaWF0ZSBmaWxlcworU1JWX09VVD0ic3J2X291dC4kJCIKK0NMSV9PVVQ9ImNsaV9vdXQuJCQiCitQWFlfT1VUPSJweHlfb3V0LiQkIgorU0VTU0lPTj0ic2Vzc2lvbi4kJCIKKworU0tJUF9ORVhUPSJOTyIKKwordHJhcCBjbGVhbnVwIElOVCBURVJNIEhVUAorCisjIEJhc2ljIHRlc3QKKworIyBDaGVja3MgdGhhdDoKKyMgLSB0aGluZ3Mgd29yayB3aXRoIGFsbCBjaXBoZXJzdWl0ZXMgYWN0aXZlICh1c2VkIHdpdGggY29uZmlnLWZ1bGwgaW4gYWxsLnNoKQorIyAtIHRoZSBleHBlY3RlZCAoaGlnaGVzdCBzZWN1cml0eSkgcGFyYW1ldGVycyBhcmUgc2VsZWN0ZWQKKyMgICAoInNpZ25hdHVyZV9hbGdvcml0aG0gZXh0OiA2IiBtZWFucyBTSEEtNTEyIChoaWdoZXN0IGNvbW1vbiBoYXNoKSkKK3J1bl90ZXN0ICAgICJEZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlByb3RvY29sIGlzIFRMU3YxLjIiIFwKKyAgICAgICAgICAgIC1zICJDaXBoZXJzdWl0ZSBpcyBUTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiIFwKKyAgICAgICAgICAgIC1zICJjbGllbnQgaGVsbG8gdjMsIHNpZ25hdHVyZV9hbGdvcml0aG0gZXh0OiA2IiBcCisgICAgICAgICAgICAtcyAiRUNESEUgY3VydmU6IHNlY3A1MjFyMSIgXAorICAgICAgICAgICAgLVMgImVycm9yIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiCisKK3J1bl90ZXN0ICAgICJEZWZhdWx0LCBEVExTIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlByb3RvY29sIGlzIERUTFN2MS4yIiBcCisgICAgICAgICAgICAtcyAiQ2lwaGVyc3VpdGUgaXMgVExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTI1Ni1HQ00tU0hBMzg0IgorCisjIFRlc3QgZm9yIHVuaXF1ZW5lc3Mgb2YgSVZzIGluIEFFQUQgY2lwaGVyc3VpdGVzCitydW5fdGVzdCAgICAiVW5pcXVlIElWIGluIEdDTSIgXAorICAgICAgICAgICAgIiRQX1NSViBleGNoYW5nZXM9MjAgZGVidWdfbGV2ZWw9NCIgXAorICAgICAgICAgICAgIiRQX0NMSSBleGNoYW5nZXM9MjAgZGVidWdfbGV2ZWw9NCBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXUgIklWIHVzZWQiIFwKKyAgICAgICAgICAgIC1VICJJViB1c2VkIgorCisjIFRlc3RzIGZvciByYzQgb3B0aW9uCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfUkVNT1ZFX0FSQzRfQ0lQSEVSU1VJVEVTCitydW5fdGVzdCAgICAiUkM0OiBzZXJ2ZXIgZGlzYWJsZWQsIGNsaWVudCBlbmFibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVGhlIHNlcnZlciBoYXMgbm8gY2lwaGVyc3VpdGVzIGluIGNvbW1vbiIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19SRU1PVkVfQVJDNF9DSVBIRVJTVUlURVMKK3J1bl90ZXN0ICAgICJSQzQ6IHNlcnZlciBoYWxmLCBjbGllbnQgZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBUaGUgc2VydmVyIGhhcyBubyBjaXBoZXJzdWl0ZXMgaW4gY29tbW9uIgorCitydW5fdGVzdCAgICAiUkM0OiBzZXJ2ZXIgZW5hYmxlZCwgY2xpZW50IGRpc2FibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVGhlIHNlcnZlciBoYXMgbm8gY2lwaGVyc3VpdGVzIGluIGNvbW1vbiIKKworcnVuX3Rlc3QgICAgIlJDNDogYm90aCBlbmFibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVGhlIHNlcnZlciBoYXMgbm8gY2lwaGVyc3VpdGVzIGluIGNvbW1vbiIKKworIyBUZXN0cyBmb3IgVHJ1bmNhdGVkIEhNQUMgZXh0ZW5zaW9uCisKK3J1bl90ZXN0ICAgICJUcnVuY2F0ZWQgSE1BQzogY2xpZW50IGRlZmF1bHQsIHNlcnZlciBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiZHVtcGluZyAnY29tcHV0ZWQgbWFjJyAoMjAgYnl0ZXMpIiBcCisgICAgICAgICAgICAtUyAiZHVtcGluZyAnY29tcHV0ZWQgbWFjJyAoMTAgYnl0ZXMpIgorCitydW5fdGVzdCAgICAiVHJ1bmNhdGVkIEhNQUM6IGNsaWVudCBkaXNhYmxlZCwgc2VydmVyIGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9NCIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDIwIGJ5dGVzKSIgXAorICAgICAgICAgICAgLVMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDEwIGJ5dGVzKSIKKworcnVuX3Rlc3QgICAgIlRydW5jYXRlZCBITUFDOiBjbGllbnQgZW5hYmxlZCwgc2VydmVyIGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9NCIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDIwIGJ5dGVzKSIgXAorICAgICAgICAgICAgLVMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDEwIGJ5dGVzKSIKKworcnVuX3Rlc3QgICAgIlRydW5jYXRlZCBITUFDOiBjbGllbnQgZW5hYmxlZCwgc2VydmVyIGRpc2FibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTQgdHJ1bmNfaG1hYz0wIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiZHVtcGluZyAnY29tcHV0ZWQgbWFjJyAoMjAgYnl0ZXMpIiBcCisgICAgICAgICAgICAtUyAiZHVtcGluZyAnY29tcHV0ZWQgbWFjJyAoMTAgYnl0ZXMpIgorCitydW5fdGVzdCAgICAiVHJ1bmNhdGVkIEhNQUM6IGNsaWVudCBlbmFibGVkLCBzZXJ2ZXIgZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD00IHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDIwIGJ5dGVzKSIgXAorICAgICAgICAgICAgLXMgImR1bXBpbmcgJ2NvbXB1dGVkIG1hYycgKDEwIGJ5dGVzKSIKKworIyBUZXN0cyBmb3IgRW5jcnlwdC10aGVuLU1BQyBleHRlbnNpb24KKworcnVuX3Rlc3QgICAgIkVuY3J5cHQgdGhlbiBNQUM6IGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiIFwKKyAgICAgICAgICAgIC1zICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIgorCitydW5fdGVzdCAgICAiRW5jcnlwdCB0aGVuIE1BQzogY2xpZW50IGVuYWJsZWQsIHNlcnZlciBkaXNhYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV0bT0wIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXRtPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIgXAorICAgICAgICAgICAgLVMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiCisKK3J1bl90ZXN0ICAgICJFbmNyeXB0IHRoZW4gTUFDOiBjbGllbnQgZW5hYmxlZCwgYWVhZCBjaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBldG09MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtR0NNLVNIQTI1NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV0bT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIgorCitydW5fdGVzdCAgICAiRW5jcnlwdCB0aGVuIE1BQzogY2xpZW50IGVuYWJsZWQsIHN0cmVhbSBjaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBldG09MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXRtPTEgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIKKworcnVuX3Rlc3QgICAgIkVuY3J5cHQgdGhlbiBNQUM6IGNsaWVudCBkaXNhYmxlZCwgc2VydmVyIGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBldG09MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV0bT0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBlbmNyeXB0X3RoZW5fbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiRW5jcnlwdCB0aGVuIE1BQzogY2xpZW50IFNTTHYzLCBzZXJ2ZXIgZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIG1pbl92ZXJzaW9uPXNzbDMgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmb3JjZV92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgZW5jcnlwdCB0aGVuIG1hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGVuY3J5cHRfdGhlbl9tYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIgXAorICAgICAgICAgICAgLVMgInVzaW5nIGVuY3J5cHQgdGhlbiBtYWMiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJFbmNyeXB0IHRoZW4gTUFDOiBjbGllbnQgZW5hYmxlZCwgc2VydmVyIFNTTHYzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZm9yY2VfdmVyc2lvbj1zc2wzIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgbWluX3ZlcnNpb249c3NsMyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBlbmNyeXB0IHRoZW4gbWFjIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGVuY3J5cHQgdGhlbiBtYWMgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZW5jcnlwdF90aGVuX21hYyBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBlbmNyeXB0IHRoZW4gbWFjIiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZW5jcnlwdCB0aGVuIG1hYyIKKworIyBUZXN0cyBmb3IgRXh0ZW5kZWQgTWFzdGVyIFNlY3JldCBleHRlbnNpb24KKworcnVuX3Rlc3QgICAgIkV4dGVuZGVkIE1hc3RlciBTZWNyZXQ6IGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgInVzaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQiIFwKKyAgICAgICAgICAgIC1zICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IgorCitydW5fdGVzdCAgICAiRXh0ZW5kZWQgTWFzdGVyIFNlY3JldDogY2xpZW50IGVuYWJsZWQsIHNlcnZlciBkaXNhYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4dGVuZGVkX21zPTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleHRlbmRlZF9tcz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IgorCitydW5fdGVzdCAgICAiRXh0ZW5kZWQgTWFzdGVyIFNlY3JldDogY2xpZW50IGRpc2FibGVkLCBzZXJ2ZXIgZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4dGVuZGVkX21zPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleHRlbmRlZF9tcz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBleHRlbmRlZF9tYXN0ZXJfc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInVzaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQiIFwKKyAgICAgICAgICAgIC1TICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiRXh0ZW5kZWQgTWFzdGVyIFNlY3JldDogY2xpZW50IFNTTHYzLCBzZXJ2ZXIgZW5hYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmb3JjZV92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIGV4dGVuZGVkX21hc3Rlcl9zZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGV4dGVuZGVkX21hc3Rlcl9zZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIgXAorICAgICAgICAgICAgLVMgInVzaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJFeHRlbmRlZCBNYXN0ZXIgU2VjcmV0OiBjbGllbnQgZW5hYmxlZCwgc2VydmVyIFNTTHYzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZm9yY2VfdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgbWluX3ZlcnNpb249c3NsMyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGV4dGVuZGVkIG1hc3RlciBzZWNyZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZXh0ZW5kZWRfbWFzdGVyX3NlY3JldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJ1c2luZyBleHRlbmRlZCBtYXN0ZXIgc2VjcmV0IiBcCisgICAgICAgICAgICAtUyAidXNpbmcgZXh0ZW5kZWQgbWFzdGVyIHNlY3JldCIKKworIyBUZXN0cyBmb3IgRkFMTEJBQ0tfU0NTVgorCitydW5fdGVzdCAgICAiRmFsbGJhY2sgU0NTVjogZGVmYXVsdCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZm9yY2VfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImFkZGluZyBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtUyAicmVjZWl2ZWQgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLVMgImluYXByb3ByaWF0ZSBmYWxsYmFjayIgXAorICAgICAgICAgICAgLUMgImlzIGEgZmF0YWwgYWxlcnQgbWVzc2FnZSAobXNnIDg2KSIKKworcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGV4cGxpY2l0bHkgZGlzYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGZvcmNlX3ZlcnNpb249dGxzMV8xIGZhbGxiYWNrPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImFkZGluZyBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtUyAicmVjZWl2ZWQgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLVMgImluYXByb3ByaWF0ZSBmYWxsYmFjayIgXAorICAgICAgICAgICAgLUMgImlzIGEgZmF0YWwgYWxlcnQgbWVzc2FnZSAobXNnIDg2KSIKKworcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGVuYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGZvcmNlX3ZlcnNpb249dGxzMV8xIGZhbGxiYWNrPTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImFkZGluZyBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLXMgImluYXByb3ByaWF0ZSBmYWxsYmFjayIgXAorICAgICAgICAgICAgLWMgImlzIGEgZmF0YWwgYWxlcnQgbWVzc2FnZSAobXNnIDg2KSIKKworcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGVuYWJsZWQsIG1heCB2ZXJzaW9uIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmYWxsYmFjaz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJhZGRpbmcgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1TICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siIFwKKyAgICAgICAgICAgIC1DICJpcyBhIGZhdGFsIGFsZXJ0IG1lc3NhZ2UgKG1zZyA4NikiCisKK3JlcXVpcmVzX29wZW5zc2xfd2l0aF9mYWxsYmFja19zY3N2CitydW5fdGVzdCAgICAiRmFsbGJhY2sgU0NTVjogZGVmYXVsdCwgb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkT19TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBmb3JjZV92ZXJzaW9uPXRsczFfMSBmYWxsYmFjaz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJhZGRpbmcgRkFMTEJBQ0tfU0NTViIgXAorICAgICAgICAgICAgLUMgImlzIGEgZmF0YWwgYWxlcnQgbWVzc2FnZSAobXNnIDg2KSIKKworcmVxdWlyZXNfb3BlbnNzbF93aXRoX2ZhbGxiYWNrX3Njc3YKK3J1bl90ZXN0ICAgICJGYWxsYmFjayBTQ1NWOiBlbmFibGVkLCBvcGVuc3NsIHNlcnZlciIgXAorICAgICAgICAgICAgIiRPX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGZvcmNlX3ZlcnNpb249dGxzMV8xIGZhbGxiYWNrPTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImFkZGluZyBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtYyAiaXMgYSBmYXRhbCBhbGVydCBtZXNzYWdlIChtc2cgODYpIgorCityZXF1aXJlc19vcGVuc3NsX3dpdGhfZmFsbGJhY2tfc2NzdgorcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGRpc2FibGVkLCBvcGVuc3NsIGNsaWVudCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC10bHMxXzEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInJlY2VpdmVkIEZBTExCQUNLX1NDU1YiIFwKKyAgICAgICAgICAgIC1TICJpbmFwcm9wcmlhdGUgZmFsbGJhY2siCisKK3JlcXVpcmVzX29wZW5zc2xfd2l0aF9mYWxsYmFja19zY3N2CitydW5fdGVzdCAgICAiRmFsbGJhY2sgU0NTVjogZW5hYmxlZCwgb3BlbnNzbCBjbGllbnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRPX0NMSSAtdGxzMV8xIC1mYWxsYmFja19zY3N2IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtcyAiaW5hcHJvcHJpYXRlIGZhbGxiYWNrIgorCityZXF1aXJlc19vcGVuc3NsX3dpdGhfZmFsbGJhY2tfc2NzdgorcnVuX3Rlc3QgICAgIkZhbGxiYWNrIFNDU1Y6IGVuYWJsZWQsIG1heCB2ZXJzaW9uLCBvcGVuc3NsIGNsaWVudCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1mYWxsYmFja19zY3N2IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBGQUxMQkFDS19TQ1NWIiBcCisgICAgICAgICAgICAtUyAiaW5hcHJvcHJpYXRlIGZhbGxiYWNrIgorCisjIFRlc3RzIGZvciBDQkMgMS9uLTEgcmVjb3JkIHNwbGl0dGluZworCitydW5fdGVzdCAgICAiQ0JDIFJlY29yZCBzcGxpdHRpbmc6IFRMUyAxLjIsIG5vIHNwbGl0dGluZyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICByZXF1ZXN0X3NpemU9MTIzIGZvcmNlX3ZlcnNpb249dGxzMV8yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxMjMgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIjEyMiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiQ0JDIFJlY29yZCBzcGxpdHRpbmc6IFRMUyAxLjEsIG5vIHNwbGl0dGluZyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICByZXF1ZXN0X3NpemU9MTIzIGZvcmNlX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxMjMgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLVMgIjEyMiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiQ0JDIFJlY29yZCBzcGxpdHRpbmc6IFRMUyAxLjAsIHNwbGl0dGluZyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICByZXF1ZXN0X3NpemU9MTIzIGZvcmNlX3ZlcnNpb249dGxzMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiUmVhZCBmcm9tIGNsaWVudDogMTIzIGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiIFwKKyAgICAgICAgICAgIC1zICIxMjIgYnl0ZXMgcmVhZCIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworcnVuX3Rlc3QgICAgIkNCQyBSZWNvcmQgc3BsaXR0aW5nOiBTU0x2Mywgc3BsaXR0aW5nIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgcmVxdWVzdF9zaXplPTEyMyBmb3JjZV92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEyMyBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtcyAiMTIyIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJDQkMgUmVjb3JkIHNwbGl0dGluZzogVExTIDEuMCBSQzQsIG5vIHNwbGl0dGluZyIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSBcCisgICAgICAgICAgICAgcmVxdWVzdF9zaXplPTEyMyBmb3JjZV92ZXJzaW9uPXRsczEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEyMyBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtUyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtUyAiMTIyIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJDQkMgUmVjb3JkIHNwbGl0dGluZzogVExTIDEuMCwgc3BsaXR0aW5nIGRpc2FibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgIHJlcXVlc3Rfc2l6ZT0xMjMgZm9yY2VfdmVyc2lvbj10bHMxIHJlY3NwbGl0PTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEyMyBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtUyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtUyAiMTIyIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJDQkMgUmVjb3JkIHNwbGl0dGluZzogVExTIDEuMCwgc3BsaXR0aW5nLCBuYmlvIiBcCisgICAgICAgICAgICAiJFBfU1JWIG5iaW89MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBuYmlvPTIgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgcmVxdWVzdF9zaXplPTEyMyBmb3JjZV92ZXJzaW9uPXRsczEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlJlYWQgZnJvbSBjbGllbnQ6IDEyMyBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIiBcCisgICAgICAgICAgICAtcyAiMTIyIGJ5dGVzIHJlYWQiCisKKyMgVGVzdHMgZm9yIFNlc3Npb24gVGlja2V0cworCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgdGlja2V0czogYmFzaWMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgInBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1zICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyB0aWNrZXRzOiBjYWNoZSBkaXNhYmxlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MSBjYWNoZV9tYXg9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MSByZWNvbm5lY3Q9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgc2Vzc2lvbl90aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAicGFyc2UgbmV3IHNlc3Npb24gdGlja2V0IiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSBjYWNoZSIgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiBcCisgICAgICAgICAgICAtcyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiIFwKKyAgICAgICAgICAgIC1jICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIKKworcnVuX3Rlc3QgICAgIlNlc3Npb24gcmVzdW1lIHVzaW5nIHRpY2tldHM6IHRpbWVvdXQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEgY2FjaGVfbWF4PTAgdGlja2V0X3RpbWVvdXQ9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MSByZWNvbm5lY3Q9MSByZWNvX2RlbGF5PTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgInBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLVMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtQyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyB0aWNrZXRzOiBvcGVuc3NsIHNlcnZlciIgXAorICAgICAgICAgICAgIiRPX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MSByZWNvbm5lY3Q9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgc2Vzc2lvbl90aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAicGFyc2UgbmV3IHNlc3Npb24gdGlja2V0IiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyB0aWNrZXRzOiBvcGVuc3NsIGNsaWVudCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MSIgXAorICAgICAgICAgICAgIiggJE9fQ0xJIC1zZXNzX291dCAkU0VTU0lPTjsgXAorICAgICAgICAgICAgICAgJE9fQ0xJIC1zZXNzX2luICRTRVNTSU9OOyBcCisgICAgICAgICAgICAgICBybSAtZiAkU0VTU0lPTiApIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtcyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIKKworIyBUZXN0cyBmb3IgU2Vzc2lvbiBSZXN1bWUgYmFzZWQgb24gc2Vzc2lvbi1JRCBhbmQgY2FjaGUKKworcnVuX3Rlc3QgICAgIlNlc3Npb24gcmVzdW1lIHVzaW5nIGNhY2hlOiB0aWNrZXRzIGVuYWJsZWQgb24gY2xpZW50IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0xIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBzZXNzaW9uX3RpY2tldCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJwYXJzZSBuZXcgc2Vzc2lvbiB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIGNhY2hlIiBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSB0aWNrZXQiIFwKKyAgICAgICAgICAgIC1zICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCitydW5fdGVzdCAgICAiU2Vzc2lvbiByZXN1bWUgdXNpbmcgY2FjaGU6IHRpY2tldHMgZW5hYmxlZCBvbiBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogY2FjaGVfbWF4PTAiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgY2FjaGVfbWF4PTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLVMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtQyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogY2FjaGVfbWF4PTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgY2FjaGVfbWF4PTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogdGltZW91dCA+IGRlbGF5IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIHJlY29ubmVjdD0xIHJlY29fZGVsYXk9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSBjYWNoZSIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiBcCisgICAgICAgICAgICAtcyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiIFwKKyAgICAgICAgICAgIC1jICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIKKworcnVuX3Rlc3QgICAgIlNlc3Npb24gcmVzdW1lIHVzaW5nIGNhY2hlOiB0aW1lb3V0IDwgZGVsYXkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgY2FjaGVfdGltZW91dD0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIHJlY29ubmVjdD0xIHJlY29fZGVsYXk9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSBjYWNoZSIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiBcCisgICAgICAgICAgICAtUyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiIFwKKyAgICAgICAgICAgIC1DICJhIHNlc3Npb24gaGFzIGJlZW4gcmVzdW1lZCIKKworcnVuX3Rlc3QgICAgIlNlc3Npb24gcmVzdW1lIHVzaW5nIGNhY2hlOiBubyB0aW1lb3V0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgdGlja2V0cz0wIGNhY2hlX3RpbWVvdXQ9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHRpY2tldHM9MCByZWNvbm5lY3Q9MSByZWNvX2RlbGF5PTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gY2FjaGUiIFwKKyAgICAgICAgICAgIC1TICJzZXNzaW9uIHN1Y2Nlc3NmdWxseSByZXN0b3JlZCBmcm9tIHRpY2tldCIgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogb3BlbnNzbCBjbGllbnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAiIFwKKyAgICAgICAgICAgICIoICRPX0NMSSAtc2Vzc19vdXQgJFNFU1NJT047IFwKKyAgICAgICAgICAgICAgICRPX0NMSSAtc2Vzc19pbiAkU0VTU0lPTjsgXAorICAgICAgICAgICAgICAgcm0gLWYgJFNFU1NJT04gKSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiZm91bmQgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2Vzc2lvbiBzdWNjZXNzZnVsbHkgcmVzdG9yZWQgZnJvbSBjYWNoZSIgXAorICAgICAgICAgICAgLVMgInNlc3Npb24gc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gdGlja2V0IiBcCisgICAgICAgICAgICAtcyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiCisKK3J1bl90ZXN0ICAgICJTZXNzaW9uIHJlc3VtZSB1c2luZyBjYWNoZTogb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkT19TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyB0aWNrZXRzPTAgcmVjb25uZWN0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImZvdW5kIHNlc3Npb25fdGlja2V0IGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgInBhcnNlIG5ldyBzZXNzaW9uIHRpY2tldCIgXAorICAgICAgICAgICAgLWMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIgorCisjIFRlc3RzIGZvciBNYXggRnJhZ21lbnQgTGVuZ3RoIGV4dGVuc2lvbgorCitydW5fdGVzdCAgICAiTWF4IGZyYWdtZW50IGxlbmd0aDogbm90IHVzZWQsIHJlZmVyZW5jZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDE2Mzg0IiBcCisgICAgICAgICAgICAtcyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgMTYzODQiIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIG1heCBmcmFnbWVudCBsZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIgorCitydW5fdGVzdCAgICAiTWF4IGZyYWdtZW50IGxlbmd0aDogdXNlZCBieSBjbGllbnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIG1heF9mcmFnX2xlbj00MDk2IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyA0MDk2IiBcCisgICAgICAgICAgICAtcyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgNDA5NiIgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgbWF4IGZyYWdtZW50IGxlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iCisKK3J1bl90ZXN0ICAgICJNYXggZnJhZ21lbnQgbGVuZ3RoOiB1c2VkIGJ5IHNlcnZlciIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIG1heF9mcmFnX2xlbj00MDk2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDE2Mzg0IiBcCisgICAgICAgICAgICAtcyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgNDA5NiIgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgbWF4IGZyYWdtZW50IGxlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIk1heCBmcmFnbWVudCBsZW5ndGg6IGdudXRscyBzZXJ2ZXIiIFwKKyAgICAgICAgICAgICIkR19TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBtYXhfZnJhZ19sZW49NDA5NiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgNDA5NiIgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iCisKK3J1bl90ZXN0ICAgICJNYXggZnJhZ21lbnQgbGVuZ3RoOiBjbGllbnQsIG1lc3NhZ2UganVzdCBmaXRzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBtYXhfZnJhZ19sZW49MjA0OCByZXF1ZXN0X3NpemU9MjA0OCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgMjA0OCIgXAorICAgICAgICAgICAgLXMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDIwNDgiIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIG1heCBmcmFnbWVudCBsZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiMjA0OCBieXRlcyB3cml0dGVuIGluIDEgZnJhZ21lbnRzIiBcCisgICAgICAgICAgICAtcyAiMjA0OCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTWF4IGZyYWdtZW50IGxlbmd0aDogY2xpZW50LCBsYXJnZXIgbWVzc2FnZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgbWF4X2ZyYWdfbGVuPTIwNDggcmVxdWVzdF9zaXplPTIzNDUiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIk1heGltdW0gZnJhZ21lbnQgbGVuZ3RoIGlzIDIwNDgiIFwKKyAgICAgICAgICAgIC1zICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAyMDQ4IiBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBtYXggZnJhZ21lbnQgbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBtYXhfZnJhZ21lbnRfbGVuZ3RoIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIjIzNDUgYnl0ZXMgd3JpdHRlbiBpbiAyIGZyYWdtZW50cyIgXAorICAgICAgICAgICAgLXMgIjIwNDggYnl0ZXMgcmVhZCIgXAorICAgICAgICAgICAgLXMgIjI5NyBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTWF4IGZyYWdtZW50IGxlbmd0aDogRFRMUyBjbGllbnQsIGxhcmdlciBtZXNzYWdlIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZHRscz0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIG1heF9mcmFnX2xlbj0yMDQ4IHJlcXVlc3Rfc2l6ZT0yMzQ1IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJNYXhpbXVtIGZyYWdtZW50IGxlbmd0aCBpcyAyMDQ4IiBcCisgICAgICAgICAgICAtcyAiTWF4aW11bSBmcmFnbWVudCBsZW5ndGggaXMgMjA0OCIgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgbWF4IGZyYWdtZW50IGxlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIG1heF9mcmFnbWVudF9sZW5ndGggZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgbWF4X2ZyYWdtZW50X2xlbmd0aCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmcmFnbWVudCBsYXJnZXIgdGhhbi4qbWF4aW11bSIKKworIyBUZXN0cyBmb3IgcmVuZWdvdGlhdGlvbgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogbm9uZSwgZm9yIHJlZmVyZW5jZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAid3JpdGUgaGVsbG8gcmVxdWVzdCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IGNsaWVudC1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICJ3cml0ZSBoZWxsbyByZXF1ZXN0IgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogc2VydmVyLWluaXRpYXRlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSBhdXRoX21vZGU9b3B0aW9uYWwgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIndyaXRlIGhlbGxvIHJlcXVlc3QiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBkb3VibGUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgYXV0aF9tb2RlPW9wdGlvbmFsIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIndyaXRlIGhlbGxvIHJlcXVlc3QiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBjbGllbnQtaW5pdGlhdGVkLCBzZXJ2ZXItcmVqZWN0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTAgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiU1NMIC0gVW5leHBlY3RlZCBtZXNzYWdlIGF0IFNlcnZlckhlbGxvIGluIHJlbmVnb3RpYXRpb24iIFwKKyAgICAgICAgICAgIC1jICJmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBzZXJ2ZXItaW5pdGlhdGVkLCBjbGllbnQtcmVqZWN0ZWQsIGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogc2VydmVyLWluaXRpYXRlZCwgY2xpZW50LXJlamVjdGVkLCBub3QgZW5mb3JjZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSBcCisgICAgICAgICAgICAgcmVuZWdvX2RlbGF5PS0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIndyaXRlIGhlbGxvIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiIFwKKyAgICAgICAgICAgIC1TICJmYWlsZWQiCisKKyMgZGVsYXkgMiBmb3IgMSBhbGVydCByZWNvcmQgKyAxIGFwcGxpY2F0aW9uIGRhdGEgcmVjb3JkCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogc2VydmVyLWluaXRpYXRlZCwgY2xpZW50LXJlamVjdGVkLCBkZWxheSAyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEgXAorICAgICAgICAgICAgIHJlbmVnb19kZWxheT0yIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIndyaXRlIGhlbGxvIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiIFwKKyAgICAgICAgICAgIC1TICJmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBzZXJ2ZXItaW5pdGlhdGVkLCBjbGllbnQtcmVqZWN0ZWQsIGRlbGF5IDAiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSBcCisgICAgICAgICAgICAgcmVuZWdvX2RlbGF5PTAgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1TICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAid3JpdGUgaGVsbG8gcmVxdWVzdCIgXAorICAgICAgICAgICAgLXMgIlNTTCAtIEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IHNlcnZlci1pbml0aWF0ZWQsIGNsaWVudC1hY2NlcHRlZCwgZGVsYXkgMCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIFwKKyAgICAgICAgICAgICByZW5lZ29fZGVsYXk9MCBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogcGVyaW9kaWMsIGp1c3QgYmVsb3cgcGVyaW9kIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTkgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb19wZXJpb2Q9MyBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLVMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInJlY29yZCBjb3VudGVyIGxpbWl0IHJlYWNoZWQ6IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtQyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1TICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIndyaXRlIGhlbGxvIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiIFwKKyAgICAgICAgICAgIC1TICJmYWlsZWQiCisKKyMgb25lIGV4dHJhIGV4Y2hhbmdlIHRvIGJlIGFibGUgdG8gY29tcGxldGUgcmVuZWdvCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogcGVyaW9kaWMsIGp1c3QgYWJvdmUgcGVyaW9kIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTkgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb19wZXJpb2Q9MyBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9NCByZW5lZ290aWF0aW9uPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY29yZCBjb3VudGVyIGxpbWl0IHJlYWNoZWQ6IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIndyaXRlIGhlbGxvIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBBbiB1bmV4cGVjdGVkIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gb3VyIHBlZXIiIFwKKyAgICAgICAgICAgIC1TICJmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBwZXJpb2RpYywgdHdvIHRpbWVzIHBlcmlvZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz05IHJlbmVnb3RpYXRpb249MSByZW5lZ29fcGVyaW9kPTMgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTcgcmVuZWdvdGlhdGlvbj0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNvcmQgY291bnRlciBsaW1pdCByZWFjaGVkOiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gQW4gdW5leHBlY3RlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIiBcCisgICAgICAgICAgICAtUyAiZmFpbGVkIgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogcGVyaW9kaWMsIGFib3ZlIHBlcmlvZCwgZGlzYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBleGNoYW5nZXM9OSByZW5lZ290aWF0aW9uPTAgcmVuZWdvX3BlcmlvZD0zIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz00IHJlbmVnb3RpYXRpb249MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAicmVjb3JkIGNvdW50ZXIgbGltaXQgcmVhY2hlZDogcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1DICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAid3JpdGUgaGVsbG8gcmVxdWVzdCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIEFuIHVuZXhwZWN0ZWQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIgXAorICAgICAgICAgICAgLVMgImZhaWxlZCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IG5iaW8sIGNsaWVudC1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBuYmlvPTIgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIG5iaW89MiBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEgcmVuZWdvdGlhdGU9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLVMgIndyaXRlIGhlbGxvIHJlcXVlc3QiCisKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBuYmlvLCBzZXJ2ZXItaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgbmJpbz0yIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIG5iaW89MiBleGNoYW5nZXM9MiByZW5lZ290aWF0aW9uPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IgorCitydW5fdGVzdCAgICAiUmVuZWdvdGlhdGlvbjogb3BlbnNzbCBzZXJ2ZXIsIGNsaWVudC1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkT19TUlYgLXd3dyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1DICJzc2xfaGFuc2hha2UoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgImVycm9yIiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIFtPb11bS2tdIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBnbnV0bHMgc2VydmVyIHN0cmljdCwgY2xpZW50LWluaXRpYXRlZCIgXAorICAgICAgICAgICAgIiRHX1NSViAtLXByaW9yaXR5PU5PUk1BTDolU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTEgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLUMgInNzbF9oYW5zaGFrZSgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgW09vXVtLa10iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IGdudXRscyBzZXJ2ZXIgdW5zYWZlLCBjbGllbnQtaW5pdGlhdGVkIGRlZmF1bHQiIFwKKyAgICAgICAgICAgICIkR19TUlYgLS1wcmlvcml0eT1OT1JNQUw6JURJU0FCTEVfU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTEgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLWMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1DICJIVFRQLzEuMCAyMDAgW09vXVtLa10iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IGdudXRscyBzZXJ2ZXIgdW5zYWZlLCBjbGllbnQtaW5pdGl0YXRlZCBubyBsZWdhY3kiIFwKKyAgICAgICAgICAgICIkR19TUlYgLS1wcmlvcml0eT1OT1JNQUw6JURJU0FCTEVfU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZXhjaGFuZ2VzPTEgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEgXAorICAgICAgICAgICAgIGFsbG93X2xlZ2FjeT0wIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1jICJtYmVkdGxzX3NzbF9oYW5kc2hha2UoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgImVycm9yIiBcCisgICAgICAgICAgICAtQyAiSFRUUC8xLjAgMjAwIFtPb11bS2tdIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBnbnV0bHMgc2VydmVyIHVuc2FmZSwgY2xpZW50LWluaXRpdGF0ZWQgbGVnYWN5IiBcCisgICAgICAgICAgICAiJEdfU1JWIC0tcHJpb3JpdHk9Tk9STUFMOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGV4Y2hhbmdlcz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIFwKKyAgICAgICAgICAgICBhbGxvd19sZWdhY3k9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtQyAic3NsX2hhbnNoYWtlKCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBbT29dW0trXSIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IERUTFMsIGNsaWVudC1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIGV4Y2hhbmdlcz0yIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk8iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtUyAid3JpdGUgaGVsbG8gcmVxdWVzdCIKKworcnVuX3Rlc3QgICAgIlJlbmVnb3RpYXRpb246IERUTFMsIHNlcnZlci1pbml0aWF0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZXhjaGFuZ2VzPTIgcmVuZWdvdGlhdGlvbj0xIFwKKyAgICAgICAgICAgICByZWFkX3RpbWVvdXQ9MTAwMCBtYXhfcmVzZW5kPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GTyIgXAorICAgICAgICAgICAgLXMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJ3cml0ZSBoZWxsbyByZXF1ZXN0IgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ290aWF0aW9uOiBEVExTLCBnbnV0bHMgc2VydmVyLCBjbGllbnQtaW5pdGlhdGVkIiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDQwOTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZXhjaGFuZ2VzPTEgcmVuZWdvdGlhdGlvbj0xIHJlbmVnb3RpYXRlPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgImVycm9yIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIKKworIyBUZXN0IGZvciB0aGUgInNlY3VyZSByZW5lZ290YXRpb24iIGV4dGVuc2lvbiBvbmx5IChubyBhY3R1YWwgcmVuZWdvdGlhdGlvbikKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvIGV4dDogZ251dGxzIHNlcnZlciBzdHJpY3QsIGNsaWVudCBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJEdfU1JWIC0tcHJpb3JpdHk9Tk9STUFMOiVTQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiZm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBbT29dW0trXSIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvIGV4dDogZ251dGxzIHNlcnZlciB1bnNhZmUsIGNsaWVudCBkZWZhdWx0IiBcCisgICAgICAgICAgICAiJEdfU1JWIC0tcHJpb3JpdHk9Tk9STUFMOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImVycm9yIiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIFtPb11bS2tdIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJSZW5lZ28gZXh0OiBnbnV0bHMgc2VydmVyIHVuc2FmZSwgY2xpZW50IGJyZWFrIGxlZ2FjeSIgXAorICAgICAgICAgICAgIiRHX1NSViAtLXByaW9yaXR5PU5PUk1BTDolRElTQUJMRV9TQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBhbGxvd19sZWdhY3k9LTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLUMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZXJyb3IiIFwKKyAgICAgICAgICAgIC1DICJIVFRQLzEuMCAyMDAgW09vXVtLa10iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnbyBleHQ6IGdudXRscyBjbGllbnQgc3RyaWN0LCBzZXJ2ZXIgZGVmYXVsdCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJEdfQ0xJIC0tcHJpb3JpdHk9Tk9STUFMOiVTQUZFX1JFTkVHT1RJQVRJT04iIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgInJlY2VpdmVkIFRMU19FTVBUWV9SRU5FR09USUFUSU9OX0lORk9cfGZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBzZWN1cmUgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIlJlbmVnbyBleHQ6IGdudXRscyBjbGllbnQgdW5zYWZlLCBzZXJ2ZXIgZGVmYXVsdCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJEdfQ0xJIC0tcHJpb3JpdHk9Tk9STUFMOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAicmVjZWl2ZWQgVExTX0VNUFRZX1JFTkVHT1RJQVRJT05fSU5GT1x8Zm91bmQgcmVuZWdvdGlhdGlvbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIHNlY3VyZSByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiUmVuZWdvIGV4dDogZ251dGxzIGNsaWVudCB1bnNhZmUsIHNlcnZlciBicmVhayBsZWdhY3kiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhbGxvd19sZWdhY3k9LTEiIFwKKyAgICAgICAgICAgICIkR19DTEkgLS1wcmlvcml0eT1OT1JNQUw6JURJU0FCTEVfU0FGRV9SRU5FR09USUFUSU9OIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1TICJyZWNlaXZlZCBUTFNfRU1QVFlfUkVORUdPVElBVElPTl9JTkZPXHxmb3VuZCByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgc2VjdXJlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIgorCisjIFRlc3RzIGZvciBzaWxlbnRseSBkcm9wcGluZyB0cmFpbGluZyBleHRyYSBieXRlcyBpbiAuZGVyIGNlcnRpZmljYXRlcworCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJERVIgZm9ybWF0OiBubyB0cmFpbGluZyBieXRlcyIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyMC5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkR19DTEkgIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCIgXAorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJERVIgZm9ybWF0OiB3aXRoIGEgdHJhaWxpbmcgemVybyBieXRlIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1kZXIxYS5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkR19DTEkgIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCIgXAorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJERVIgZm9ybWF0OiB3aXRoIGEgdHJhaWxpbmcgcmFuZG9tIGJ5dGUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjFiLmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRHX0NMSSAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkhhbmRzaGFrZSB3YXMgY29tcGxldGVkIiBcCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRFUiBmb3JtYXQ6IHdpdGggMiB0cmFpbGluZyByYW5kb20gYnl0ZXMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjIuY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJEdfQ0xJICIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiSGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQiIFwKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiREVSIGZvcm1hdDogd2l0aCA0IHRyYWlsaW5nIHJhbmRvbSBieXRlcyIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtZGVyNC5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkR19DTEkgIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCIgXAorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJERVIgZm9ybWF0OiB3aXRoIDggdHJhaWxpbmcgcmFuZG9tIGJ5dGVzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1kZXI4LmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRHX0NMSSAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkhhbmRzaGFrZSB3YXMgY29tcGxldGVkIiBcCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRFUiBmb3JtYXQ6IHdpdGggOSB0cmFpbGluZyByYW5kb20gYnl0ZXMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LWRlcjkuY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJEdfQ0xJICIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiSGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQiIFwKKworIyBUZXN0cyBmb3IgYXV0aF9tb2RlCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogc2VydmVyIGJhZGNlcnQsIGNsaWVudCByZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgIng1MDlfdmVyaWZ5X2NlcnQoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIiEgVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBjb3JyZWN0bHkgc2lnbmVkIGJ5IHRoZSB0cnVzdGVkIENBIiBcCisgICAgICAgICAgICAtYyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJYNTA5IC0gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkF1dGhlbnRpY2F0aW9uOiBzZXJ2ZXIgYmFkY2VydCwgY2xpZW50IG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1DICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkIgorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IHNlcnZlciBiYWRjZXJ0LCBjbGllbnQgbm9uZSIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9bm9uZSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1DICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkIgorCitydW5fdGVzdCAgICAiQXV0aGVudGljYXRpb246IGNsaWVudCBTSEEyNTYsIHNlcnZlciByZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IFwKKyAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNESEUtRUNEU0EtV0lUSC1BRVMtMjU2LUdDTS1TSEEzODQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIlN1cHBvcnRlZCBTaWduYXR1cmUgQWxnb3JpdGhtIGZvdW5kOiA0LCIgXAorICAgICAgICAgICAgLWMgIlN1cHBvcnRlZCBTaWduYXR1cmUgQWxnb3JpdGhtIGZvdW5kOiA1LCIKKworcnVuX3Rlc3QgICAgIkF1dGhlbnRpY2F0aW9uOiBjbGllbnQgU0hBMzg0LCBzZXJ2ZXIgcmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmtleSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDREhFLUVDRFNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJTdXBwb3J0ZWQgU2lnbmF0dXJlIEFsZ29yaXRobSBmb3VuZDogNCwiIFwKKyAgICAgICAgICAgIC1jICJTdXBwb3J0ZWQgU2lnbmF0dXJlIEFsZ29yaXRobSBmb3VuZDogNSwiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IGJhZGNlcnQsIHNlcnZlciByZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1zICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IGJhZGNlcnQsIHNlcnZlciBvcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydCBcCisgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAiZ290IGEgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLVMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAieDUwOV92ZXJpZnlfY2VydCgpIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiISBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGNvcnJlY3RseSBzaWduZWQgYnkgdGhlIHRydXN0ZWQgQ0EiIFwKKyAgICAgICAgICAgIC1TICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IGJhZGNlcnQsIHNlcnZlciBub25lIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUtYmFkc2lnbi5jcnQgXAorICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgImdvdCBubyBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtYyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLWMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1TICJ4NTA5X3ZlcmlmeV9jZXJ0KCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1TICIhIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgXAorICAgICAgICAgICAgLVMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1TICJYNTA5IC0gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkF1dGhlbnRpY2F0aW9uOiBjbGllbnQgbm8gY2VydCwgc2VydmVyIG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSQiIFwKKyAgICAgICAgICAgIC1DICJnb3Qgbm8gY2VydGlmaWNhdGUgdG8gc2VuZCIgXAorICAgICAgICAgICAgLVMgIlNTTHYzIGNsaWVudCBoYXMgbm8gY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAiISBDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZyIgXAorICAgICAgICAgICAgLVMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1TICJYNTA5IC0gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIkF1dGhlbnRpY2F0aW9uOiBvcGVuc3NsIGNsaWVudCBubyBjZXJ0LCBzZXJ2ZXIgb3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkT19DTEkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLXMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtcyAiISBDZXJ0aWZpY2F0ZSB3YXMgbWlzc2luZyIgXAorICAgICAgICAgICAgLVMgIiEgbWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtUyAiWDUwOSAtIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IG5vIGNlcnQsIG9wZW5zc2wgc2VydmVyIG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fU1JWIC12ZXJpZnkgMTAiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBjcnRfZmlsZT1ub25lIGtleV9maWxlPW5vbmUiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgImdvdCBhIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlJCIgXAorICAgICAgICAgICAgLWMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtQyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJBdXRoZW50aWNhdGlvbjogY2xpZW50IG5vIGNlcnQsIHNzbDMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhdXRoX21vZGU9b3B0aW9uYWwgZm9yY2VfdmVyc2lvbj1zc2wzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLUMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgImdvdCBhIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHdyaXRlIGNlcnRpZmljYXRlJCIgXAorICAgICAgICAgICAgLWMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtYyAiZ290IG5vIGNlcnRpZmljYXRlIHRvIHNlbmQiIFwKKyAgICAgICAgICAgIC1zICJTU0x2MyBjbGllbnQgaGFzIG5vIGNlcnRpZmljYXRlIiBcCisgICAgICAgICAgICAtcyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1zICIhIENlcnRpZmljYXRlIHdhcyBtaXNzaW5nIiBcCisgICAgICAgICAgICAtUyAiISBtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICIhIG1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLVMgIlg1MDkgLSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbGVkIgorCisjIFRlc3RzIGZvciBjZXJ0aWZpY2F0ZSBzZWxlY3Rpb24gYmFzZWQgb24gU0hBIHZlcnNvbgorCitydW5fdGVzdCAgICAiQ2VydGlmaWNhdGUgaGFzaDogY2xpZW50IFRMUyAxLjIgLT4gU0hBLTIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgICAgICAgICBjcnRfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTEuY3J0IFwKKyAgICAgICAgICAgICAgICAgICAga2V5X2ZpbGUyPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfdmVyc2lvbj10bHMxXzIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInNpZ25lZCB1c2luZy4qRUNEU0Egd2l0aCBTSEEyNTYiIFwKKyAgICAgICAgICAgIC1DICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMSIKKworcnVuX3Rlc3QgICAgIkNlcnRpZmljYXRlIGhhc2g6IGNsaWVudCBUTFMgMS4xIC0+IFNIQS0xIiBcCisgICAgICAgICAgICAiJFBfU1JWIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAgICAgICAgY3J0X2ZpbGUyPWRhdGFfZmlsZXMvc2VydmVyNS1zaGExLmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlMj1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMjU2IiBcCisgICAgICAgICAgICAtYyAic2lnbmVkIHVzaW5nLipFQ0RTQSB3aXRoIFNIQTEiCisKK3J1bl90ZXN0ICAgICJDZXJ0aWZpY2F0ZSBoYXNoOiBjbGllbnQgVExTIDEuMCAtPiBTSEEtMSIgXAorICAgICAgICAgICAgIiRQX1NSViBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IFwKKyAgICAgICAgICAgICAgICAgICAga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgICAgICAgIGNydF9maWxlMj1kYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQgXAorICAgICAgICAgICAgICAgICAgICBrZXlfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV92ZXJzaW9uPXRsczEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgInNpZ25lZCB1c2luZy4qRUNEU0Egd2l0aCBTSEEyNTYiIFwKKyAgICAgICAgICAgIC1jICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMSIKKworcnVuX3Rlc3QgICAgIkNlcnRpZmljYXRlIGhhc2g6IGNsaWVudCBUTFMgMS4xLCBubyBTSEEtMSAtPiBTSEEtMiAob3JkZXIgMSkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgICAgICAgICBjcnRfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlMj1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJzZXJpYWwgbnVtYmVyLiowOSIgXAorICAgICAgICAgICAgLWMgInNpZ25lZCB1c2luZy4qRUNEU0Egd2l0aCBTSEEyNTYiIFwKKyAgICAgICAgICAgIC1DICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMSIKKworcnVuX3Rlc3QgICAgIkNlcnRpZmljYXRlIGhhc2g6IGNsaWVudCBUTFMgMS4xLCBubyBTSEEtMSAtPiBTSEEtMiAob3JkZXIgMikiIFwKKyAgICAgICAgICAgICIkUF9TUlYgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNi5rZXkgXAorICAgICAgICAgICAgICAgICAgICBjcnRfZmlsZTI9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBcCisgICAgICAgICAgICAgICAgICAgIGtleV9maWxlMj1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJzZXJpYWwgbnVtYmVyLiowQSIgXAorICAgICAgICAgICAgLWMgInNpZ25lZCB1c2luZy4qRUNEU0Egd2l0aCBTSEEyNTYiIFwKKyAgICAgICAgICAgIC1DICJzaWduZWQgdXNpbmcuKkVDRFNBIHdpdGggU0hBMSIKKworIyB0ZXN0cyBmb3IgU05JCisKK3J1bl90ZXN0ICAgICJTTkk6IG5vIFNOSSBjYWxsYmFjayIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkiIFwKKyAgICAgICAgICAgICIkUF9DTEkgc2VydmVyX25hbWU9bG9jYWxob3N0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJwYXJzZSBTZXJ2ZXJOYW1lIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImlzc3VlciBuYW1lICo6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0EiIFwKKyAgICAgICAgICAgIC1jICJzdWJqZWN0IG5hbWUgKjogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0IgorCitydW5fdGVzdCAgICAiU05JOiBtYXRjaGluZyBjZXJ0IDEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBzbmk9bG9jYWxob3N0LGRhdGFfZmlsZXMvc2VydmVyMi5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSwtLC0sLSxwb2xhcnNzbC5leGFtcGxlLGRhdGFfZmlsZXMvc2VydmVyMS1ub3NwYWNlLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjEua2V5LC0sLSwtIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAicGFyc2UgU2VydmVyTmFtZSBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJpc3N1ZXIgbmFtZSAqOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBIiBcCisgICAgICAgICAgICAtYyAic3ViamVjdCBuYW1lICo6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdCIKKworcnVuX3Rlc3QgICAgIlNOSTogbWF0Y2hpbmcgY2VydCAyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgc25pPWxvY2FsaG9zdCxkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0LGRhdGFfZmlsZXMvc2VydmVyMi5rZXksLSwtLC0scG9sYXJzc2wuZXhhbXBsZSxkYXRhX2ZpbGVzL3NlcnZlcjEtbm9zcGFjZS5jcnQsZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSwtLC0sLSIgXAorICAgICAgICAgICAgIiRQX0NMSSBzZXJ2ZXJfbmFtZT1wb2xhcnNzbC5leGFtcGxlIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJwYXJzZSBTZXJ2ZXJOYW1lIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImlzc3VlciBuYW1lICo6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0EiIFwKKyAgICAgICAgICAgIC1jICJzdWJqZWN0IG5hbWUgKjogQz1OTCwgTz1Qb2xhclNTTCwgQ049cG9sYXJzc2wuZXhhbXBsZSIKKworcnVuX3Rlc3QgICAgIlNOSTogbm8gbWF0Y2hpbmcgY2VydCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LC0sLSwtLHBvbGFyc3NsLmV4YW1wbGUsZGF0YV9maWxlcy9zZXJ2ZXIxLW5vc3BhY2UuY3J0LGRhdGFfZmlsZXMvc2VydmVyMS5rZXksLSwtLC0iIFwKKyAgICAgICAgICAgICIkUF9DTEkgc2VydmVyX25hbWU9bm9uZXN1Y2guZXhhbXBsZSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAicGFyc2UgU2VydmVyTmFtZSBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJzc2xfc25pX3dyYXBwZXIoKSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlNTTCAtIEEgZmF0YWwgYWxlcnQgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZnJvbSBvdXIgcGVlciIKKworcnVuX3Rlc3QgICAgIlNOSTogY2xpZW50IGF1dGggbm8gb3ZlcnJpZGU6IG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LC0sLSwtIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgc2VydmVyX25hbWU9bG9jYWxob3N0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiCisKK3J1bl90ZXN0ICAgICJTTkk6IGNsaWVudCBhdXRoIG92ZXJyaWRlOiBub25lIC0+IG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW5vbmUgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5jcnQga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgc25pPWxvY2FsaG9zdCxkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0LGRhdGFfZmlsZXMvc2VydmVyMi5rZXksLSwtLG9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgc2VydmVyX25hbWU9bG9jYWxob3N0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiCisKK3J1bl90ZXN0ICAgICJTTkk6IGNsaWVudCBhdXRoIG92ZXJyaWRlOiBvcHRpb25hbCAtPiBub25lIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LC0sLSxub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgc2VydmVyX25hbWU9bG9jYWxob3N0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3Qgbm8gY2VydGlmaWNhdGUgcmVxdWVzdCIgXAorICAgICAgICAgICAgLWMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUiIFwKKyAgICAgICAgICAgIC1jICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHZlcmlmeSIgXAorICAgICAgICAgICAgLXMgInNraXAgcGFyc2UgY2VydGlmaWNhdGUgdmVyaWZ5IgorCitydW5fdGVzdCAgICAiU05JOiBDQSBubyBvdmVycmlkZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGF1dGhfbW9kZT1vcHRpb25hbCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjYV9maWxlPWRhdGFfZmlsZXMvdGVzdC1jYS5jcnQgXAorICAgICAgICAgICAgIHNuaT1sb2NhbGhvc3QsZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCxkYXRhX2ZpbGVzL3NlcnZlcjIua2V5LC0sLSxyZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1zICJ4NTA5X3ZlcmlmeV9jZXJ0KCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1zICIhIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgXAorICAgICAgICAgICAgLVMgIlRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiByZXZva2VkIChpcyBvbiBhIENSTCkiCisKK3J1bl90ZXN0ICAgICJTTkk6IENBIG92ZXJyaWRlIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIGNhX2ZpbGU9ZGF0YV9maWxlcy90ZXN0LWNhLmNydCBcCisgICAgICAgICAgICAgc25pPWxvY2FsaG9zdCxkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0LGRhdGFfZmlsZXMvc2VydmVyMi5rZXksZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQsLSxyZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1TICJ4NTA5X3ZlcmlmeV9jZXJ0KCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1TICIhIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgXAorICAgICAgICAgICAgLVMgIlRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiByZXZva2VkIChpcyBvbiBhIENSTCkiCisKK3J1bl90ZXN0ICAgICJTTkk6IENBIG92ZXJyaWRlIHdpdGggQ1JMIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYXV0aF9tb2RlPW9wdGlvbmFsIFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIGNhX2ZpbGU9ZGF0YV9maWxlcy90ZXN0LWNhLmNydCBcCisgICAgICAgICAgICAgc25pPWxvY2FsaG9zdCxkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0LGRhdGFfZmlsZXMvc2VydmVyMi5rZXksZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQsZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSxyZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIHNlcnZlcl9uYW1lPWxvY2FsaG9zdCBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjYua2V5IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1TICJza2lwIHdyaXRlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1DICJza2lwIHBhcnNlIGNlcnRpZmljYXRlIHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1jICJnb3QgYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IiBcCisgICAgICAgICAgICAtQyAic2tpcCB3cml0ZSBjZXJ0aWZpY2F0ZSIgXAorICAgICAgICAgICAgLUMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUgdmVyaWZ5IiBcCisgICAgICAgICAgICAtUyAic2tpcCBwYXJzZSBjZXJ0aWZpY2F0ZSB2ZXJpZnkiIFwKKyAgICAgICAgICAgIC1zICJ4NTA5X3ZlcmlmeV9jZXJ0KCkgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1TICIhIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgY29ycmVjdGx5IHNpZ25lZCBieSB0aGUgdHJ1c3RlZCBDQSIgXAorICAgICAgICAgICAgLXMgIlRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiByZXZva2VkIChpcyBvbiBhIENSTCkiCisKKyMgVGVzdHMgZm9yIG5vbi1ibG9ja2luZyBJL086IGV4ZXJjaXNlIGEgdmFyaWV0eSBvZiBoYW5kc2hha2UgZmxvd3MKKworcnVuX3Rlc3QgICAgIk5vbi1ibG9ja2luZyBJL086IGJhc2ljIGhhbmRzaGFrZSIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG5iaW89MiB0aWNrZXRzPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlJlYWQgZnJvbSBzZXJ2ZXI6IC4qIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJOb24tYmxvY2tpbmcgSS9POiBjbGllbnQgYXV0aCIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0wIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBuYmlvPTIgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJSZWFkIGZyb20gc2VydmVyOiAuKiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTm9uLWJsb2NraW5nIEkvTzogdGlja2V0IiBcCisgICAgICAgICAgICAiJFBfU1JWIG5iaW89MiB0aWNrZXRzPTEgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbmJpbz0yIHRpY2tldHM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiUmVhZCBmcm9tIHNlcnZlcjogLiogYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIk5vbi1ibG9ja2luZyBJL086IHRpY2tldCArIGNsaWVudCBhdXRoIiBcCisgICAgICAgICAgICAiJFBfU1JWIG5iaW89MiB0aWNrZXRzPTEgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG5iaW89MiB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLWMgIlJlYWQgZnJvbSBzZXJ2ZXI6IC4qIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJOb24tYmxvY2tpbmcgSS9POiB0aWNrZXQgKyBjbGllbnQgYXV0aCArIHJlc3VtZSIgXAorICAgICAgICAgICAgIiRQX1NSViBuYmlvPTIgdGlja2V0cz0xIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBuYmlvPTIgdGlja2V0cz0xIHJlY29ubmVjdD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1jICJSZWFkIGZyb20gc2VydmVyOiAuKiBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTm9uLWJsb2NraW5nIEkvTzogdGlja2V0ICsgcmVzdW1lIiBcCisgICAgICAgICAgICAiJFBfU1JWIG5iaW89MiB0aWNrZXRzPTEgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbmJpbz0yIHRpY2tldHM9MSByZWNvbm5lY3Q9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiUmVhZCBmcm9tIHNlcnZlcjogLiogYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIk5vbi1ibG9ja2luZyBJL086IHNlc3Npb24taWQgcmVzdW1lIiBcCisgICAgICAgICAgICAiJFBfU1JWIG5iaW89MiB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbmJpbz0yIHRpY2tldHM9MCByZWNvbm5lY3Q9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiUmVhZCBmcm9tIHNlcnZlcjogLiogYnl0ZXMgcmVhZCIKKworIyBUZXN0cyBmb3IgdmVyc2lvbiBuZWdvdGlhdGlvbgorCitydW5fdGVzdCAgICAiVmVyc2lvbiBjaGVjazogYWxsIC0+IDEuMiIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiUHJvdG9jb2wgaXMgVExTdjEuMiIgXAorICAgICAgICAgICAgLWMgIlByb3RvY29sIGlzIFRMU3YxLjIiCisKK3J1bl90ZXN0ICAgICJWZXJzaW9uIGNoZWNrOiBjbGkgbWF4IDEuMSAtPiAxLjEiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbWF4X3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1zICJQcm90b2NvbCBpcyBUTFN2MS4xIiBcCisgICAgICAgICAgICAtYyAiUHJvdG9jb2wgaXMgVExTdjEuMSIKKworcnVuX3Rlc3QgICAgIlZlcnNpb24gY2hlY2s6IHNydiBtYXggMS4xIC0+IDEuMSIgXAorICAgICAgICAgICAgIiRQX1NSViBtYXhfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIlByb3RvY29sIGlzIFRMU3YxLjEiIFwKKyAgICAgICAgICAgIC1jICJQcm90b2NvbCBpcyBUTFN2MS4xIgorCitydW5fdGVzdCAgICAiVmVyc2lvbiBjaGVjazogY2xpK3NydiBtYXggMS4xIC0+IDEuMSIgXAorICAgICAgICAgICAgIiRQX1NSViBtYXhfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgbWF4X3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1zICJQcm90b2NvbCBpcyBUTFN2MS4xIiBcCisgICAgICAgICAgICAtYyAiUHJvdG9jb2wgaXMgVExTdjEuMSIKKworcnVuX3Rlc3QgICAgIlZlcnNpb24gY2hlY2s6IGNsaSBtYXggMS4xLCBzcnYgbWluIDEuMSAtPiAxLjEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWluX3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG1heF92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtQyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiUHJvdG9jb2wgaXMgVExTdjEuMSIgXAorICAgICAgICAgICAgLWMgIlByb3RvY29sIGlzIFRMU3YxLjEiCisKK3J1bl90ZXN0ICAgICJWZXJzaW9uIGNoZWNrOiBjbGkgbWluIDEuMSwgc3J2IG1heCAxLjEgLT4gMS4xIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1heF92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgIiRQX0NMSSBtaW5fdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLUMgIm1iZWR0bHNfc3NsX2hhbmRzaGFrZSByZXR1cm5lZCIgXAorICAgICAgICAgICAgLXMgIlByb3RvY29sIGlzIFRMU3YxLjEiIFwKKyAgICAgICAgICAgIC1jICJQcm90b2NvbCBpcyBUTFN2MS4xIgorCitydW5fdGVzdCAgICAiVmVyc2lvbiBjaGVjazogY2xpIG1pbiAxLjIsIHNydiBtYXggMS4xIC0+IGZhaWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWF4X3ZlcnNpb249dGxzMV8xIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG1pbl92ZXJzaW9uPXRsczFfMiIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAiU1NMIC0gSGFuZHNoYWtlIHByb3RvY29sIG5vdCB3aXRoaW4gbWluL21heCBib3VuZGFyaWVzIgorCitydW5fdGVzdCAgICAiVmVyc2lvbiBjaGVjazogc3J2IG1pbiAxLjIsIGNsaSBtYXggMS4xIC0+IGZhaWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWluX3ZlcnNpb249dGxzMV8yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIG1heF92ZXJzaW9uPXRsczFfMSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtYyAibWJlZHRsc19zc2xfaGFuZHNoYWtlIHJldHVybmVkIiBcCisgICAgICAgICAgICAtcyAiU1NMIC0gSGFuZHNoYWtlIHByb3RvY29sIG5vdCB3aXRoaW4gbWluL21heCBib3VuZGFyaWVzIgorCisjIFRlc3RzIGZvciBBTFBOIGV4dGVuc2lvbgorCitydW5fdGVzdCAgICAiQUxQTjogbm9uZSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImNsaWVudCBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJnb3QgYW4gYWxlcnQgbWVzc2FnZSwgdHlwZTogXFxbMjoxMjBdIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBhbHBuIGV4dGVuc2lvbiAiIFwKKyAgICAgICAgICAgIC1DICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyIgXAorICAgICAgICAgICAgLVMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIgorCitydW5fdGVzdCAgICAiQUxQTjogY2xpZW50IG9ubHkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGFscG49YWJjLDEyMzQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJnb3QgYW4gYWxlcnQgbWVzc2FnZSwgdHlwZTogXFxbMjoxMjBdIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBhbHBuIGV4dGVuc2lvbiAiIFwKKyAgICAgICAgICAgIC1jICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyAobm9uZSkiIFwKKyAgICAgICAgICAgIC1TICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyIKKworcnVuX3Rlc3QgICAgIkFMUE46IHNlcnZlciBvbmx5IiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYWxwbj1hYmMsMTIzNCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZ290IGFuIGFsZXJ0IG1lc3NhZ2UsIHR5cGU6IFxcWzI6MTIwXSIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgYWxwbiBleHRlbnNpb24gIiBcCisgICAgICAgICAgICAtQyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMiIFwKKyAgICAgICAgICAgIC1zICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyAobm9uZSkiCisKK3J1bl90ZXN0ICAgICJBTFBOOiBib3RoLCBjb21tb24gY2xpMS1zcnYxIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYWxwbj1hYmMsMTIzNCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGFscG49YWJjLDEyMzQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJnb3QgYW4gYWxlcnQgbWVzc2FnZSwgdHlwZTogXFxbMjoxMjBdIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIGFiYyIgXAorICAgICAgICAgICAgLXMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIGFiYyIKKworcnVuX3Rlc3QgICAgIkFMUE46IGJvdGgsIGNvbW1vbiBjbGkyLXNydjEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBhbHBuPWFiYywxMjM0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgYWxwbj0xMjM0LGFiYyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImdvdCBhbiBhbGVydCBtZXNzYWdlLCB0eXBlOiBcXFsyOjEyMF0iIFwKKyAgICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgYWJjIiBcCisgICAgICAgICAgICAtcyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgYWJjIgorCitydW5fdGVzdCAgICAiQUxQTjogYm90aCwgY29tbW9uIGNsaTEtc3J2MiIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGFscG49YWJjLDEyMzQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBhbHBuPTEyMzQsYWJjZGUiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJnb3QgYW4gYWxlcnQgbWVzc2FnZSwgdHlwZTogXFxbMjoxMjBdIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgIkFwcGxpY2F0aW9uIExheWVyIFByb3RvY29sIGlzIDEyMzQiIFwKKyAgICAgICAgICAgIC1zICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyAxMjM0IgorCitydW5fdGVzdCAgICAiQUxQTjogYm90aCwgbm8gY29tbW9uIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgYWxwbj1hYmMsMTIzIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgYWxwbj0xMjM0LGFiY2RlIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyBhbHBuIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZ290IGFuIGFsZXJ0IG1lc3NhZ2UsIHR5cGU6IFxcWzI6MTIwXSIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIGFscG4gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgYWxwbiBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJBcHBsaWNhdGlvbiBMYXllciBQcm90b2NvbCBpcyAxMjM0IiBcCisgICAgICAgICAgICAtUyAiQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgaXMgMTIzNCIKKworCisjIFRlc3RzIGZvciBrZXlVc2FnZSBpbiBsZWFmIGNlcnRpZmljYXRlcywgcGFydCAxOgorIyBzZXJ2ZXItc2lkZSBjZXJ0aWZpY2F0ZS9zdWl0ZSBzZWxlY3Rpb24KKworcnVuX3Rlc3QgICAgImtleVVzYWdlIHNydjogUlNBLCBkaWdpdGFsU2lnbmF0dXJlIC0+IChFQylESEUtUlNBIiBcCisgICAgICAgICAgICAiJFBfU1JWIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rdS1kcy5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy1bRUNdKkRIRS1SU0EtV0lUSC0iCisKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIHNydjogUlNBLCBrZXlFbmNpcGhlcm1lbnQgLT4gUlNBIiBcCisgICAgICAgICAgICAiJFBfU1JWIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyMi5rdS1rZS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy1SU0EtV0lUSC0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBzcnY6IFJTQSwga2V5QWdyZWVtZW50IC0+IGZhaWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWthLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtQyAiQ2lwaGVyc3VpdGUgaXMgIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2Ugc3J2OiBFQ0RTQSwgZGlnaXRhbFNpZ25hdHVyZSAtPiBFQ0RIRS1FQ0RTQSIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua3UtZHMuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtRUNESEUtRUNEU0EtV0lUSC0iCisKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIHNydjogRUNEU0EsIGtleUFncmVlbWVudCAtPiBFQ0RILSIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2EuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtRUNESC0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBzcnY6IEVDRFNBLCBrZXlFbmNpcGhlcm1lbnQgLT4gZmFpbCIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua3Uta2UuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1DICJDaXBoZXJzdWl0ZSBpcyAiCisKKyMgVGVzdHMgZm9yIGtleVVzYWdlIGluIGxlYWYgY2VydGlmaWNhdGVzLCBwYXJ0IDI6CisjIGNsaWVudC1zaWRlIGNoZWNraW5nIG9mIHNlcnZlciBjZXJ0CisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IERpZ2l0YWxTaWduYXR1cmUrS2V5RW5jaXBoZXJtZW50LCBSU0E6IE9LIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzX2tlLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtQyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLSIKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIGNsaTogRGlnaXRhbFNpZ25hdHVyZStLZXlFbmNpcGhlcm1lbnQsIERIRS1SU0E6IE9LIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzX2tlLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IEtleUVuY2lwaGVybWVudCwgUlNBOiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1rZS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IEtleUVuY2lwaGVybWVudCwgREhFLVJTQTogZmFpbCIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1rZS5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1jICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1DICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpOiBLZXlFbmNpcGhlcm1lbnQsIERIRS1SU0E6IGZhaWwsIHNvZnQiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3Uta2UuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iIFwKKyAgICAgICAgICAgIC1jICIhIFVzYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBrZXlVc2FnZSBleHRlbnNpb24iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IERpZ2l0YWxTaWduYXR1cmUsIERIRS1SU0E6IE9LIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWRzLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLUMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IERpZ2l0YWxTaWduYXR1cmUsIFJTQTogZmFpbCIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1kcy5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLWMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLUMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGk6IERpZ2l0YWxTaWduYXR1cmUsIFJTQTogZmFpbCwgc29mdCIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1kcy5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9b3B0aW9uYWwgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1DICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtIiBcCisgICAgICAgICAgICAtYyAiISBVc2FnZSBkb2VzIG5vdCBtYXRjaCB0aGUga2V5VXNhZ2UgZXh0ZW5zaW9uIgorCisjIFRlc3RzIGZvciBrZXlVc2FnZSBpbiBsZWFmIGNlcnRpZmljYXRlcywgcGFydCAzOgorIyBzZXJ2ZXItc2lkZSBjaGVja2luZyBvZiBjbGllbnQgY2VydAorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpLWF1dGg6IFJTQSwgRGlnaXRhbFNpZ25hdHVyZTogT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkT19DTEkgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjIua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjIua3UtZHMuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpLWF1dGg6IFJTQSwgS2V5RW5jaXBoZXJtZW50OiBmYWlsIChzb2Z0KSIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyMi5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyMi5rdS1rZS5jcnQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1TICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJrZXlVc2FnZSBjbGktYXV0aDogUlNBLCBLZXlFbmNpcGhlcm1lbnQ6IGZhaWwgKGhhcmQpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXIyLmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXIyLmt1LWtlLmNydCIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLXMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgImtleVVzYWdlIGNsaS1hdXRoOiBFQ0RTQSwgRGlnaXRhbFNpZ25hdHVyZTogT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9b3B0aW9uYWwiIFwKKyAgICAgICAgICAgICIkT19DTEkgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjUua3UtZHMuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAia2V5VXNhZ2UgY2xpLWF1dGg6IEVDRFNBLCBLZXlBZ3JlZW1lbnQ6IGZhaWwgKHNvZnQpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1Lmt1LWthLmNydCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLVMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworIyBUZXN0cyBmb3IgZXh0ZW5kZWRLZXlVc2FnZSwgcGFydCAxOiBzZXJ2ZXItc2lkZSBjZXJ0aWZpY2F0ZS9zdWl0ZSBzZWxlY3Rpb24KKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIHNydjogc2VydmVyQXV0aCAtPiBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViBrZXlfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICBjcnRfZmlsZT1kYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LXNydi5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkiIFwKKyAgICAgICAgICAgIDAKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIHNydjogc2VydmVyQXV0aCxjbGllbnRBdXRoIC0+IE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIGtleV9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIGNydF9maWxlPWRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2LmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSIgXAorICAgICAgICAgICAgMAorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2Ugc3J2OiBjb2RlU2lnbixhbnlFS1UgLT4gT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jc19hbnkuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAwCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBzcnY6IGNvZGVTaWduIC0+IGZhaWwiIFwKKyAgICAgICAgICAgICIkUF9TUlYga2V5X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgY3J0X2ZpbGU9ZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jbGkuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIiBcCisgICAgICAgICAgICAxCisKKyMgVGVzdHMgZm9yIGV4dGVuZGVkS2V5VXNhZ2UsIHBhcnQgMjogY2xpZW50LXNpZGUgY2hlY2tpbmcgb2Ygc2VydmVyIGNlcnQKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaTogc2VydmVyQXV0aCAtPiBPSyIgXAorICAgICAgICAgICAgIiRPX1NSViAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2LmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtQyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLSIKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaTogc2VydmVyQXV0aCxjbGllbnRBdXRoIC0+IE9LIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1zcnZfY2xpLmNydCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtQyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIiBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLSIKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaTogY29kZVNpZ24sYW55RUtVIC0+IE9LIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jc19hbnkuY3J0IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1DICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiIFwKKyAgICAgICAgICAgIC1jICJDaXBoZXJzdWl0ZSBpcyBUTFMtIgorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2UgY2xpOiBjb2RlU2lnbiAtPiBmYWlsIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jcy5jcnQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtYyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLWMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIgXAorICAgICAgICAgICAgLUMgIkNpcGhlcnN1aXRlIGlzIFRMUy0iCisKKyMgVGVzdHMgZm9yIGV4dGVuZGVkS2V5VXNhZ2UsIHBhcnQgMzogc2VydmVyLXNpZGUgY2hlY2tpbmcgb2YgY2xpZW50IGNlcnQKKworcnVuX3Rlc3QgICAgImV4dEtleVVzYWdlIGNsaS1hdXRoOiBjbGllbnRBdXRoIC0+IE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jbGkuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2UgY2xpLWF1dGg6IHNlcnZlckF1dGgsY2xpZW50QXV0aCAtPiBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRPX0NMSSAta2V5IGRhdGFfZmlsZXMvc2VydmVyNS5rZXkgXAorICAgICAgICAgICAgIC1jZXJ0IGRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1TICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBjbGktYXV0aDogY29kZVNpZ24sYW55RUtVIC0+IE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jc19hbnkuY3J0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJiYWQgY2VydGlmaWNhdGUgKHVzYWdlIGV4dGVuc2lvbnMpIiBcCisgICAgICAgICAgICAtUyAiUHJvY2Vzc2luZyBvZiB0aGUgQ2VydGlmaWNhdGUgaGFuZHNoYWtlIG1lc3NhZ2UgZmFpbGVkIgorCitydW5fdGVzdCAgICAiZXh0S2V5VXNhZ2UgY2xpLWF1dGg6IGNvZGVTaWduIC0+IGZhaWwgKHNvZnQpIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTEgYXV0aF9tb2RlPW9wdGlvbmFsIiBcCisgICAgICAgICAgICAiJE9fQ0xJIC1rZXkgZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSBcCisgICAgICAgICAgICAgLWNlcnQgZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1jcy5jcnQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImJhZCBjZXJ0aWZpY2F0ZSAodXNhZ2UgZXh0ZW5zaW9ucykiIFwKKyAgICAgICAgICAgIC1TICJQcm9jZXNzaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJleHRLZXlVc2FnZSBjbGktYXV0aDogY29kZVNpZ24gLT4gZmFpbCAoaGFyZCkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MSBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkT19DTEkgLWtleSBkYXRhX2ZpbGVzL3NlcnZlcjUua2V5IFwKKyAgICAgICAgICAgICAtY2VydCBkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzLmNydCIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAiYmFkIGNlcnRpZmljYXRlICh1c2FnZSBleHRlbnNpb25zKSIgXAorICAgICAgICAgICAgLXMgIlByb2Nlc3Npbmcgb2YgdGhlIENlcnRpZmljYXRlIGhhbmRzaGFrZSBtZXNzYWdlIGZhaWxlZCIKKworIyBUZXN0cyBmb3IgREhNIHBhcmFtZXRlcnMgbG9hZGluZworCitydW5fdGVzdCAgICAiREhNIHBhcmFtZXRlcnM6IHJlZmVyZW5jZSIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInZhbHVlIG9mICdESE06IFAgJyAoMjA0OCBiaXRzKSIgXAorICAgICAgICAgICAgLWMgInZhbHVlIG9mICdESE06IEcgJyAoMjA0OCBiaXRzKSIKKworcnVuX3Rlc3QgICAgIkRITSBwYXJhbWV0ZXJzOiBvdGhlciBwYXJhbWV0ZXJzIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRobV9maWxlPWRhdGFfZmlsZXMvZGhwYXJhbXMucGVtIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAidmFsdWUgb2YgJ0RITTogUCAnICgxMDI0IGJpdHMpIiBcCisgICAgICAgICAgICAtYyAidmFsdWUgb2YgJ0RITTogRyAnICgyIGJpdHMpIgorCisjIFRlc3RzIGZvciBESE0gY2xpZW50LXNpZGUgc2l6ZSBjaGVja2luZworCitydW5fdGVzdCAgICAiREhNIHNpemU6IHNlcnZlciBkZWZhdWx0LCBjbGllbnQgZGVmYXVsdCwgT0siIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJESE0gcHJpbWUgdG9vIHNob3J0OiIKKworcnVuX3Rlc3QgICAgIkRITSBzaXplOiBzZXJ2ZXIgZGVmYXVsdCwgY2xpZW50IDIwNDgsIE9LIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1ESEUtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MSBkaG1sZW49MjA0OCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiREhNIHByaW1lIHRvbyBzaG9ydDoiCisKK3J1bl90ZXN0ICAgICJESE0gc2l6ZTogc2VydmVyIDEwMjQsIGNsaWVudCBkZWZhdWx0LCBPSyIgXAorICAgICAgICAgICAgIiRQX1NSViBkaG1fZmlsZT1kYXRhX2ZpbGVzL2RocGFyYW1zLnBlbSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgIkRITSBwcmltZSB0b28gc2hvcnQ6IgorCitydW5fdGVzdCAgICAiREhNIHNpemU6IHNlcnZlciAxMDAwLCBjbGllbnQgZGVmYXVsdCwgcmVqZWN0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGhtX2ZpbGU9ZGF0YV9maWxlcy9kaC4xMDAwLnBlbSIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtREhFLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsPTEiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgIkRITSBwcmltZSB0b28gc2hvcnQ6IgorCitydW5fdGVzdCAgICAiREhNIHNpemU6IHNlcnZlciBkZWZhdWx0LCBjbGllbnQgMjA0OSwgcmVqZWN0ZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLURIRS1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0xIGRobWxlbj0yMDQ5IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJESE0gcHJpbWUgdG9vIHNob3J0OiIKKworIyBUZXN0cyBmb3IgUFNLIGNhbGxiYWNrCisKK3J1bl90ZXN0ICAgICJQU0sgY2FsbGJhY2s6IHBzaywgbm8gY2FsbGJhY2siIFwKKyAgICAgICAgICAgICIkUF9TUlYgcHNrPWFiYzEyMyBwc2tfaWRlbnRpdHk9Zm9vIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgcHNrX2lkZW50aXR5PWZvbyBwc2s9YWJjMTIzIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFVua25vd24gaWRlbnRpdHkgcmVjZWl2ZWQiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcnVuX3Rlc3QgICAgIlBTSyBjYWxsYmFjazogbm8gcHNrLCBubyBjYWxsYmFjayIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgIHBza19pZGVudGl0eT1mb28gcHNrPWFiYzEyMyIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtcyAiU1NMIC0gTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJQU0sgY2FsbGJhY2s6IGNhbGxiYWNrIG92ZXJyaWRlcyBvdGhlciBzZXR0aW5ncyIgXAorICAgICAgICAgICAgIiRQX1NSViBwc2s9YWJjMTIzIHBza19pZGVudGl0eT1mb28gcHNrX2xpc3Q9YWJjLGRlYWQsZGVmLGJlZWYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0JDLVNIQSBcCisgICAgICAgICAgICBwc2tfaWRlbnRpdHk9Zm9vIHBzaz1hYmMxMjMiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLVMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtcyAiU1NMIC0gVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiUFNLIGNhbGxiYWNrOiBmaXJzdCBpZCBtYXRjaGVzIiBcCisgICAgICAgICAgICAiJFBfU1JWIHBza19saXN0PWFiYyxkZWFkLGRlZixiZWVmIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgcHNrX2lkZW50aXR5PWFiYyBwc2s9ZGVhZCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiU1NMIC0gTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJQU0sgY2FsbGJhY2s6IHNlY29uZCBpZCBtYXRjaGVzIiBcCisgICAgICAgICAgICAiJFBfU1JWIHBza19saXN0PWFiYyxkZWFkLGRlZixiZWVmIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgcHNrX2lkZW50aXR5PWRlZiBwc2s9YmVlZiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiU1NMIC0gTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJQU0sgY2FsbGJhY2s6IG5vIG1hdGNoIiBcCisgICAgICAgICAgICAiJFBfU1JWIHBza19saXN0PWFiYyxkZWFkLGRlZixiZWVmIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUNCQy1TSEEgXAorICAgICAgICAgICAgcHNrX2lkZW50aXR5PWdoaSBwc2s9YmVlZiIgXAorICAgICAgICAgICAgMSBcCisgICAgICAgICAgICAtUyAiU1NMIC0gTm9uZSBvZiB0aGUgY29tbW9uIGNpcGhlcnN1aXRlcyBpcyB1c2FibGUiIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBVbmtub3duIGlkZW50aXR5IHJlY2VpdmVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3J1bl90ZXN0ICAgICJQU0sgY2FsbGJhY2s6IHdyb25nIGtleSIgXAorICAgICAgICAgICAgIiRQX1NSViBwc2tfbGlzdD1hYmMsZGVhZCxkZWYsYmVlZiIgXAorICAgICAgICAgICAgIiRQX0NMSSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQkMtU0hBIFwKKyAgICAgICAgICAgIHBza19pZGVudGl0eT1hYmMgcHNrPWJlZWYiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLVMgIlNTTCAtIE5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVW5rbm93biBpZGVudGl0eSByZWNlaXZlZCIgXAorICAgICAgICAgICAgLXMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCisjIFRlc3RzIGZvciBFQyBKLVBBS0UKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IGNsaWVudCBub3QgY29uZmlndXJlZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgImFkZCBjaXBoZXJzdWl0ZTogYzBmZiIgXAorICAgICAgICAgICAgLUMgImFkZGluZyBlY2pwYWtlX2trcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtUyAiZm91bmQgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNraXAgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImNpcGhlcnN1aXRlIG1pc21hdGNoOiBlY2pwYWtlIG5vdCBjb25maWd1cmVkIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtQyAiZm91bmQgZWNqcGFrZV9ra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgIk5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFCitydW5fdGVzdCAgICAiRUNKUEFLRTogc2VydmVyIG5vdCBjb25maWd1cmVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBlY2pwYWtlX3B3PWJsYSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDSlBBS0UtV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJhZGQgY2lwaGVyc3VpdGU6IGMwZmYiIFwKKyAgICAgICAgICAgIC1jICJhZGRpbmcgZWNqcGFrZV9ra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLXMgImZvdW5kIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJza2lwIGVjanBha2Uga2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJjaXBoZXJzdWl0ZSBtaXNtYXRjaDogZWNqcGFrZSBub3QgY29uZmlndXJlZCIgXAorICAgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLUMgImZvdW5kIGVjanBha2Vfa2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1zICJOb25lIG9mIHRoZSBjb21tb24gY2lwaGVyc3VpdGVzIGlzIHVzYWJsZSIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHdvcmtpbmcsIFRMUyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIGVjanBha2VfcHc9YmxhIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZWNqcGFrZV9wdz1ibGEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0pQQUtFLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiYWRkIGNpcGhlcnN1aXRlOiBjMGZmIiBcCisgICAgICAgICAgICAtYyAiYWRkaW5nIGVjanBha2Vfa2twcCBleHRlbnNpb24iIFwKKyAgICAgICAgICAgIC1DICJyZS11c2luZyBjYWNoZWQgZWNqcGFrZSBwYXJhbWV0ZXJzIiBcCisgICAgICAgICAgICAtcyAiZm91bmQgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgInNraXAgZWNqcGFrZSBra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgImNpcGhlcnN1aXRlIG1pc21hdGNoOiBlY2pwYWtlIG5vdCBjb25maWd1cmVkIiBcCisgICAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBlY2pwYWtlIGtrcHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiZm91bmQgZWNqcGFrZV9ra3BwIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLVMgIk5vbmUgb2YgdGhlIGNvbW1vbiBjaXBoZXJzdWl0ZXMgaXMgdXNhYmxlIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3NlcnZlcl9uZWVkc19tb3JlX3RpbWUgMQorcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHBhc3N3b3JkIG1pc21hdGNoLCBUTFMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBlY2pwYWtlX3B3PWJsYSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGVjanBha2VfcHc9YmFkIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNKUEFLRS1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLUMgInJlLXVzaW5nIGNhY2hlZCBlY2pwYWtlIHBhcmFtZXRlcnMiIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHdvcmtpbmcsIERUTFMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZWNqcGFrZV9wdz1ibGEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBkdGxzPTEgZWNqcGFrZV9wdz1ibGEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0pQQUtFLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAicmUtdXNpbmcgY2FjaGVkIGVjanBha2UgcGFyYW1ldGVycyIgXAorICAgICAgICAgICAgLVMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0pQQUtFCitydW5fdGVzdCAgICAiRUNKUEFLRTogd29ya2luZywgRFRMUywgbm8gY29va2llIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZHRscz0xIGVjanBha2VfcHc9YmxhIGNvb2tpZXM9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkZWJ1Z19sZXZlbD0zIGR0bHM9MSBlY2pwYWtlX3B3PWJsYSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLUVDSlBBS0UtV0lUSC1BRVMtMTI4LUNDTS04IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJyZS11c2luZyBjYWNoZWQgZWNqcGFrZSBwYXJhbWV0ZXJzIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVmVyaWZpY2F0aW9uIG9mIHRoZSBtZXNzYWdlIE1BQyBmYWlsZWQiCisKK3NlcnZlcl9uZWVkc19tb3JlX3RpbWUgMQorcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHBhc3N3b3JkIG1pc21hdGNoLCBEVExTIiBcCisgICAgICAgICAgICAiJFBfU1JWIGRlYnVnX2xldmVsPTMgZHRscz0xIGVjanBha2VfcHc9YmxhIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIGVjanBha2VfcHc9YmFkIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNKUEFLRS1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLWMgInJlLXVzaW5nIGNhY2hlZCBlY2pwYWtlIHBhcmFtZXRlcnMiIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBWZXJpZmljYXRpb24gb2YgdGhlIG1lc3NhZ2UgTUFDIGZhaWxlZCIKKworIyBmb3IgdGVzdHMgd2l0aCBjb25maWdzL2NvbmZpZy10aHJlYWQuaAorcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19LRVlfRVhDSEFOR0VfRUNKUEFLRQorcnVuX3Rlc3QgICAgIkVDSlBBS0U6IHdvcmtpbmcsIERUTFMsIG5vbG9nIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBlY2pwYWtlX3B3PWJsYSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZWNqcGFrZV9wdz1ibGEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0pQQUtFLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMAorCisjIFRlc3RzIGZvciBjaXBoZXJzdWl0ZXMgcGVyIHZlcnNpb24KKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworcnVuX3Rlc3QgICAgIlBlci12ZXJzaW9uIHN1aXRlczogU1NMMyIgXAorICAgICAgICAgICAgIiRQX1NSViBtaW5fdmVyc2lvbj1zc2wzIHZlcnNpb25fc3VpdGVzPVRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249c3NsMyIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiQ2lwaGVyc3VpdGUgaXMgVExTLVJTQS1XSVRILTNERVMtRURFLUNCQy1TSEEiCisKK3J1bl90ZXN0ICAgICJQZXItdmVyc2lvbiBzdWl0ZXM6IFRMUyAxLjAiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIHZlcnNpb25fc3VpdGVzPVRMUy1SU0EtV0lUSC0zREVTLUVERS1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTEyOC1HQ00tU0hBMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249dGxzMSBhcmM0PTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiCisKK3J1bl90ZXN0ICAgICJQZXItdmVyc2lvbiBzdWl0ZXM6IFRMUyAxLjEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgdmVyc2lvbl9zdWl0ZXM9VExTLVJTQS1XSVRILTNERVMtRURFLUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfdmVyc2lvbj10bHMxXzEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUNCQy1TSEEiCisKK3J1bl90ZXN0ICAgICJQZXItdmVyc2lvbiBzdWl0ZXM6IFRMUyAxLjIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgdmVyc2lvbl9zdWl0ZXM9VExTLVJTQS1XSVRILTNERVMtRURFLUNCQy1TSEEsVExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSxUTFMtUlNBLVdJVEgtQUVTLTEyOC1DQkMtU0hBLFRMUy1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZm9yY2VfdmVyc2lvbj10bHMxXzIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkNpcGhlcnN1aXRlIGlzIFRMUy1SU0EtV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiCisKKyMgVGVzdCBmb3IgQ2xpZW50SGVsbG8gd2l0aG91dCBleHRlbnNpb25zCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkNsaWVudEhlbGxvIHdpdGhvdXQgZXh0ZW5zaW9ucyIgXAorICAgICAgICAgICAgIiRQX1NSViBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJEdfQ0xJIC0tcHJpb3JpdHk9Tk9STUFMOiVOT19FWFRFTlNJT05TOiVESVNBQkxFX1NBRkVfUkVORUdPVElBVElPTiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiZHVtcGluZyAnY2xpZW50IGhlbGxvIGV4dGVuc2lvbnMnICgwIGJ5dGVzKSIKKworIyBUZXN0cyBmb3IgbWJlZHRsc19zc2xfZ2V0X2J5dGVzX2F2YWlsKCkKKworcnVuX3Rlc3QgICAgIm1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbDogbm8gZXh0cmEgZGF0YSIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTAwIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxMDAgYnl0ZXMgcmVhZCQiCisKK3J1bl90ZXN0ICAgICJtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWw6IGV4dHJhIGRhdGEiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTUwMCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogNTAwIGJ5dGVzIHJlYWQgKC4qKy4qKSIKKworIyBUZXN0cyBmb3Igc21hbGwgcGFja2V0cworCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9QUk9UT19TU0wzCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFNTTHYzIEJsb2NrQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXNzbDMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj1zc2wzIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgU1NMdjMgU3RyZWFtQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXNzbDMgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXNzbDMgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjAgQmxvY2tDaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMCBCbG9ja0NpcGhlciB3aXRob3V0IEV0TSIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczEgZXRtPTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4wIEJsb2NrQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4wIFN0cmVhbUNpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjEgQmxvY2tDaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4xIEJsb2NrQ2lwaGVyIHdpdGhvdXQgRXRNIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8xIGV0bT0wIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMSBTdHJlYW1DaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczFfMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMSBCbG9ja0NpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xIGZvcmNlX3ZlcnNpb249dGxzMV8xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4xIFN0cmVhbUNpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxIGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJTbWFsbCBwYWNrZXQgVExTIDEuMiBCbG9ja0NpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjIgQmxvY2tDaXBoZXIgd2l0aG91dCBFdE0iIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgZXRtPTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIEJsb2NrQ2lwaGVyIGxhcmdlciBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1FQ0RIRS1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEzODQiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIEJsb2NrQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjIgU3RyZWFtQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjIgU3RyZWFtQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIFwKKyAgICAgICAgICAgICB0cnVuY19obWFjPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIlNtYWxsIHBhY2tldCBUTFMgMS4yIEFFQUQiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTEgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNDTSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMSBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiU21hbGwgcGFja2V0IFRMUyAxLjIgQUVBRCBzaG9ydGVyIHRhZyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MSBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDEgYnl0ZXMgcmVhZCIKKworIyBBIHRlc3QgZm9yIGV4dGVuc2lvbnMgaW4gU1NMdjMKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfUFJPVE9fU1NMMworcnVuX3Rlc3QgICAgIlNTTHYzIHdpdGggZXh0ZW5zaW9ucywgc2VydmVyIHNpZGUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWluX3ZlcnNpb249c3NsMyBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGZvcmNlX3ZlcnNpb249c3NsMyB0aWNrZXRzPTEgbWF4X2ZyYWdfbGVuPTQwOTYgYWxwbj1hYmMsMTIzNCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtUyAiZHVtcGluZyAnY2xpZW50IGhlbGxvIGV4dGVuc2lvbnMnIiBcCisgICAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCB0b3RhbCBleHRlbnNpb24gbGVuZ3RoOiIKKworIyBUZXN0IGZvciBsYXJnZSBwYWNrZXRzCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgU1NMdjMgQmxvY2tDaXBoZXIiIFwKKyAgICAgICAgICAgICIkUF9TUlYgbWluX3ZlcnNpb249c3NsMyIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj1zc2wzIHJlY3NwbGl0PTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX1BST1RPX1NTTDMKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgU1NMdjMgU3RyZWFtQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIG1pbl92ZXJzaW9uPXNzbDMgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj1zc2wzIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMCBCbG9ja0NpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxIHJlY3NwbGl0PTAgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlJlYWQgZnJvbSBjbGllbnQ6IDE2Mzg0IGJ5dGVzIHJlYWQiCisKK3J1bl90ZXN0ICAgICJMYXJnZSBwYWNrZXQgVExTIDEuMCBCbG9ja0NpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczEgcmVjc3BsaXQ9MCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjAgU3RyZWFtQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4xIEJsb2NrQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4xIFN0cmVhbUNpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMSBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjEgQmxvY2tDaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzEgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4xIFN0cmVhbUNpcGhlciB0cnVuY2F0ZWQgTUFDIiBcCisgICAgICAgICAgICAiJFBfU1JWIGFyYzQ9MSBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8xIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtUkM0LTEyOC1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIEJsb2NrQ2lwaGVyIiBcCisgICAgICAgICAgICAiJFBfU1JWIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0yNTYtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIEJsb2NrQ2lwaGVyIGxhcmdlciBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtRUNESEUtUlNBLVdJVEgtQUVTLTI1Ni1DQkMtU0hBMzg0IiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjIgQmxvY2tDaXBoZXIgdHJ1bmNhdGVkIE1BQyIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNCQy1TSEEgXAorICAgICAgICAgICAgIHRydW5jX2htYWM9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIFN0cmVhbUNpcGhlciIgXAorICAgICAgICAgICAgIiRQX1NSViBhcmM0PTEgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAiJFBfQ0xJIHJlcXVlc3Rfc2l6ZT0xNjM4NCBmb3JjZV92ZXJzaW9uPXRsczFfMiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILVJDNC0xMjgtU0hBIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjIgU3RyZWFtQ2lwaGVyIHRydW5jYXRlZCBNQUMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgYXJjND0xIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1SQzQtMTI4LVNIQSBcCisgICAgICAgICAgICAgdHJ1bmNfaG1hYz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJSZWFkIGZyb20gY2xpZW50OiAxNjM4NCBieXRlcyByZWFkIgorCitydW5fdGVzdCAgICAiTGFyZ2UgcGFja2V0IFRMUyAxLjIgQUVBRCIgXAorICAgICAgICAgICAgIiRQX1NSViIgXAorICAgICAgICAgICAgIiRQX0NMSSByZXF1ZXN0X3NpemU9MTYzODQgZm9yY2VfdmVyc2lvbj10bHMxXzIgXAorICAgICAgICAgICAgIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1SU0EtV0lUSC1BRVMtMjU2LUNDTSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworcnVuX3Rlc3QgICAgIkxhcmdlIHBhY2tldCBUTFMgMS4yIEFFQUQgc2hvcnRlciB0YWciIFwKKyAgICAgICAgICAgICIkUF9TUlYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgcmVxdWVzdF9zaXplPTE2Mzg0IGZvcmNlX3ZlcnNpb249dGxzMV8yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUlNBLVdJVEgtQUVTLTI1Ni1DQ00tOCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiUmVhZCBmcm9tIGNsaWVudDogMTYzODQgYnl0ZXMgcmVhZCIKKworIyBUZXN0cyBmb3IgRFRMUyBIZWxsb1ZlcmlmeVJlcXVlc3QKKworcnVuX3Rlc3QgICAgIkRUTFMgY29va2llOiBlbmFibGVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJjb29raWUgdmVyaWZpY2F0aW9uIGZhaWxlZCIgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gcGFzc2VkIiBcCisgICAgICAgICAgICAtUyAiY29va2llIHZlcmlmaWNhdGlvbiBza2lwcGVkIiBcCisgICAgICAgICAgICAtYyAicmVjZWl2ZWQgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1zICJoZWxsbyB2ZXJpZmljYXRpb24gcmVxdWVzdGVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiCisKK3J1bl90ZXN0ICAgICJEVExTIGNvb2tpZTogZGlzYWJsZWQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTIgY29va2llcz0wIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJjb29raWUgdmVyaWZpY2F0aW9uIGZhaWxlZCIgXAorICAgICAgICAgICAgLVMgImNvb2tpZSB2ZXJpZmljYXRpb24gcGFzc2VkIiBcCisgICAgICAgICAgICAtcyAiY29va2llIHZlcmlmaWNhdGlvbiBza2lwcGVkIiBcCisgICAgICAgICAgICAtQyAicmVjZWl2ZWQgaGVsbG8gdmVyaWZ5IHJlcXVlc3QiIFwKKyAgICAgICAgICAgIC1TICJoZWxsbyB2ZXJpZmljYXRpb24gcmVxdWVzdGVkIiBcCisgICAgICAgICAgICAtUyAiU1NMIC0gVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUiCisKK3J1bl90ZXN0ICAgICJEVExTIGNvb2tpZTogZGVmYXVsdCAoZmFpbGluZykiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTIgY29va2llcz0tMSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiBoc190aW1lb3V0PTEwMC00MDAiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gZmFpbGVkIiBcCisgICAgICAgICAgICAtUyAiY29va2llIHZlcmlmaWNhdGlvbiBwYXNzZWQiIFwKKyAgICAgICAgICAgIC1TICJjb29raWUgdmVyaWZpY2F0aW9uIHNraXBwZWQiIFwKKyAgICAgICAgICAgIC1DICJyZWNlaXZlZCBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgXAorICAgICAgICAgICAgLVMgImhlbGxvIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWQiIFwKKyAgICAgICAgICAgIC1zICJTU0wgLSBUaGUgcmVxdWVzdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIKKworcmVxdWlyZXNfaXB2NgorcnVuX3Rlc3QgICAgIkRUTFMgY29va2llOiBlbmFibGVkLCBJUHY2IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIHNlcnZlcl9hZGRyPTo6MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiBzZXJ2ZXJfYWRkcj06OjEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gZmFpbGVkIiBcCisgICAgICAgICAgICAtcyAiY29va2llIHZlcmlmaWNhdGlvbiBwYXNzZWQiIFwKKyAgICAgICAgICAgIC1TICJjb29raWUgdmVyaWZpY2F0aW9uIHNraXBwZWQiIFwKKyAgICAgICAgICAgIC1jICJyZWNlaXZlZCBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgXAorICAgICAgICAgICAgLXMgImhlbGxvIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWQiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBUaGUgcmVxdWVzdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIKKworcnVuX3Rlc3QgICAgIkRUTFMgY29va2llOiBlbmFibGVkLCBuYmlvIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBuYmlvPTIgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgbmJpbz0yIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImNvb2tpZSB2ZXJpZmljYXRpb24gZmFpbGVkIiBcCisgICAgICAgICAgICAtcyAiY29va2llIHZlcmlmaWNhdGlvbiBwYXNzZWQiIFwKKyAgICAgICAgICAgIC1TICJjb29raWUgdmVyaWZpY2F0aW9uIHNraXBwZWQiIFwKKyAgICAgICAgICAgIC1jICJyZWNlaXZlZCBoZWxsbyB2ZXJpZnkgcmVxdWVzdCIgXAorICAgICAgICAgICAgLXMgImhlbGxvIHZlcmlmaWNhdGlvbiByZXF1ZXN0ZWQiIFwKKyAgICAgICAgICAgIC1TICJTU0wgLSBUaGUgcmVxdWVzdGVkIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSIKKworIyBUZXN0cyBmb3IgY2xpZW50IHJlY29ubmVjdGluZyBmcm9tIHRoZSBzYW1lIHBvcnQgd2l0aCBEVExTCisKK25vdF93aXRoX3ZhbGdyaW5kICMgc3B1cmlvdXMgcmVzZW5kCitydW5fdGVzdCAgICAiRFRMUyBjbGllbnQgcmVjb25uZWN0IGZyb20gc2FtZSBwb3J0OiByZWZlcmVuY2UiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGV4Y2hhbmdlcz0yIHJlYWRfdGltZW91dD0xMDAwIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBleGNoYW5nZXM9MiBkZWJ1Z19sZXZlbD0yIGhzX3RpbWVvdXQ9NTAwLTEwMDAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgInJlc2VuZCIgXAorICAgICAgICAgICAgLVMgIlRoZSBvcGVyYXRpb24gdGltZWQgb3V0IiBcCisgICAgICAgICAgICAtUyAiQ2xpZW50IGluaXRpYXRlZCByZWNvbm5lY3Rpb24gZnJvbSBzYW1lIHBvcnQiCisKK25vdF93aXRoX3ZhbGdyaW5kICMgc3B1cmlvdXMgcmVzZW5kCitydW5fdGVzdCAgICAiRFRMUyBjbGllbnQgcmVjb25uZWN0IGZyb20gc2FtZSBwb3J0OiByZWNvbm5lY3QiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGV4Y2hhbmdlcz0yIHJlYWRfdGltZW91dD0xMDAwIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBleGNoYW5nZXM9MiBkZWJ1Z19sZXZlbD0yIGhzX3RpbWVvdXQ9NTAwLTEwMDAgcmVjb25uZWN0X2hhcmQ9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAicmVzZW5kIiBcCisgICAgICAgICAgICAtUyAiVGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQiIFwKKyAgICAgICAgICAgIC1zICJDbGllbnQgaW5pdGlhdGVkIHJlY29ubmVjdGlvbiBmcm9tIHNhbWUgcG9ydCIKKworbm90X3dpdGhfdmFsZ3JpbmQgIyBzZXJ2ZXIvY2xpZW50IHRvbyBzbG93IHRvIHJlc3BvbmQgaW4gdGltZSAobmV4dCB0ZXN0IGhhcyBoaWdoZXIgdGltZW91dHMpCitydW5fdGVzdCAgICAiRFRMUyBjbGllbnQgcmVjb25uZWN0IGZyb20gc2FtZSBwb3J0OiByZWNvbm5lY3QsIG5iaW8sIG5vIHZhbGdyaW5kIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBleGNoYW5nZXM9MiByZWFkX3RpbWVvdXQ9MTAwMCBuYmlvPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGV4Y2hhbmdlcz0yIGRlYnVnX2xldmVsPTIgaHNfdGltZW91dD01MDAtMTAwMCByZWNvbm5lY3RfaGFyZD0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1TICJUaGUgb3BlcmF0aW9uIHRpbWVkIG91dCIgXAorICAgICAgICAgICAgLXMgIkNsaWVudCBpbml0aWF0ZWQgcmVjb25uZWN0aW9uIGZyb20gc2FtZSBwb3J0IgorCitvbmx5X3dpdGhfdmFsZ3JpbmQgIyBPbmx5IHdpdGggdmFsZ3JpbmQsIGRvIHByZXZpb3VzIHRlc3QgYnV0IHdpdGggaGlnaGVyIHJlYWRfdGltZW91dCBhbmQgaHNfdGltZW91dAorcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IHJlY29ubmVjdCBmcm9tIHNhbWUgcG9ydDogcmVjb25uZWN0LCBuYmlvLCB2YWxncmluZCIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZXhjaGFuZ2VzPTIgcmVhZF90aW1lb3V0PTIwMDAgbmJpbz0yIGhzX3RpbWVvdXQ9MTUwMC02MDAwIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBleGNoYW5nZXM9MiBkZWJ1Z19sZXZlbD0yIGhzX3RpbWVvdXQ9MTUwMC0zMDAwIHJlY29ubmVjdF9oYXJkPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLVMgIlRoZSBvcGVyYXRpb24gdGltZWQgb3V0IiBcCisgICAgICAgICAgICAtcyAiQ2xpZW50IGluaXRpYXRlZCByZWNvbm5lY3Rpb24gZnJvbSBzYW1lIHBvcnQiCisKK3J1bl90ZXN0ICAgICJEVExTIGNsaWVudCByZWNvbm5lY3QgZnJvbSBzYW1lIHBvcnQ6IG5vIGNvb2tpZXMiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGV4Y2hhbmdlcz0yIHJlYWRfdGltZW91dD0xMDAwIGNvb2tpZXM9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZXhjaGFuZ2VzPTIgZGVidWdfbGV2ZWw9MiBoc190aW1lb3V0PTUwMC04MDAwIHJlY29ubmVjdF9oYXJkPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIlRoZSBvcGVyYXRpb24gdGltZWQgb3V0IiBcCisgICAgICAgICAgICAtUyAiQ2xpZW50IGluaXRpYXRlZCByZWNvbm5lY3Rpb24gZnJvbSBzYW1lIHBvcnQiCisKKyMgVGVzdHMgZm9yIHZhcmlvdXMgY2FzZXMgb2YgY2xpZW50IGF1dGhlbnRpY2F0aW9uIHdpdGggRFRMUworIyAoZm9jdXNlZCBvbiBoYW5kc2hha2UgZmxvd3MgYW5kIG1lc3NhZ2UgcGFyc2luZykKKworcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IGF1dGg6IHJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJWZXJpZnlpbmcgcGVlciBYLjUwOSBjZXJ0aWZpY2F0ZS4uLiBvayIKKworcnVuX3Rlc3QgICAgIkRUTFMgY2xpZW50IGF1dGg6IG9wdGlvbmFsLCBjbGllbnQgaGFzIG5vIGNlcnQiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGF1dGhfbW9kZT1vcHRpb25hbCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICIhIENlcnRpZmljYXRlIHdhcyBtaXNzaW5nIgorCitydW5fdGVzdCAgICAiRFRMUyBjbGllbnQgYXV0aDogbm9uZSwgY2xpZW50IGhhcyBubyBjZXJ0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBhdXRoX21vZGU9bm9uZSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgY3J0X2ZpbGU9bm9uZSBrZXlfZmlsZT1ub25lIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInNraXAgd3JpdGUgY2VydGlmaWNhdGUkIiBcCisgICAgICAgICAgICAtcyAiISBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gd2FzIHNraXBwZWQiCisKK3J1bl90ZXN0ICAgICJEVExTIHdyb25nIFBTSzogYmFkbWFjIGFsZXJ0IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBwc2s9YWJjMTIzIGZvcmNlX2NpcGhlcnN1aXRlPVRMUy1QU0stV0lUSC1BRVMtMTI4LUdDTS1TSEEyNTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIHBzaz1hYmMxMjQiIFwKKyAgICAgICAgICAgIDEgXAorICAgICAgICAgICAgLXMgIlNTTCAtIFZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIiBcCisgICAgICAgICAgICAtYyAiU1NMIC0gQSBmYXRhbCBhbGVydCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIG91ciBwZWVyIgorCisjIFRlc3RzIGZvciByZWNlaXZpbmcgZnJhZ21lbnRlZCBoYW5kc2hha2UgbWVzc2FnZXMgd2l0aCBEVExTCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogbm8gZnJhZ21lbnRhdGlvbiAoZ251dGxzIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkR19TUlYgLXUgLS1tdHUgMjA0OCAtYSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtQyAiZm91bmQgZnJhZ21lbnRlZCBEVExTIGhhbmRzaGFrZSBtZXNzYWdlIiBcCisgICAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogc29tZSBmcmFnbWVudGF0aW9uIChnbnV0bHMgc2VydmVyKSIgXAorICAgICAgICAgICAgIiRHX1NSViAtdSAtLW10dSA1MTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImZvdW5kIGZyYWdtZW50ZWQgRFRMUyBoYW5kc2hha2UgbWVzc2FnZSIgXAorICAgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IG1vcmUgZnJhZ21lbnRhdGlvbiAoZ251dGxzIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkR19TUlYgLXUgLS1tdHUgMTI4IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgICAiRFRMUyByZWFzc2VtYmx5OiBtb3JlIGZyYWdtZW50YXRpb24sIG5iaW8gKGdudXRscyBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDEyOCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgbmJpbz0yIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImZvdW5kIGZyYWdtZW50ZWQgRFRMUyBoYW5kc2hha2UgbWVzc2FnZSIgXAorICAgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IGZyYWdtZW50YXRpb24sIHJlbmVnbyAoZ251dGxzIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkR19TUlYgLXUgLS1tdHUgMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGRlYnVnX2xldmVsPTMgZHRscz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiCisKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogZnJhZ21lbnRhdGlvbiwgbmJpbywgcmVuZWdvIChnbnV0bHMgc2VydmVyKSIgXAorICAgICAgICAgICAgIiRHX1NSViAtdSAtLW10dSAyNTYiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZGVidWdfbGV2ZWw9MyBuYmlvPTIgZHRscz0xIHJlbmVnb3RpYXRpb249MSByZW5lZ290aWF0ZT0xIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyByZW5lZ290aWF0aW9uIGV4dGVuc2lvbiIgXAorICAgICAgICAgICAgLWMgImZvdW5kIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIiBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1DICJtYmVkdGxzX3NzbF9oYW5kc2hha2UgcmV0dXJuZWQiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiCisKK3J1bl90ZXN0ICAgICJEVExTIHJlYXNzZW1ibHk6IG5vIGZyYWdtZW50YXRpb24gKG9wZW5zc2wgc2VydmVyKSIgXAorICAgICAgICAgICAgIiRPX1NSViAtZHRsczEgLW10dSAyMDQ4IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1DICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogc29tZSBmcmFnbWVudGF0aW9uIChvcGVuc3NsIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWR0bHMxIC1tdHUgNzY4IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogbW9yZSBmcmFnbWVudGF0aW9uIChvcGVuc3NsIHNlcnZlcikiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWR0bHMxIC1tdHUgMjU2IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBkZWJ1Z19sZXZlbD0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJmb3VuZCBmcmFnbWVudGVkIERUTFMgaGFuZHNoYWtlIG1lc3NhZ2UiIFwKKyAgICAgICAgICAgIC1DICJlcnJvciIKKworcnVuX3Rlc3QgICAgIkRUTFMgcmVhc3NlbWJseTogZnJhZ21lbnRhdGlvbiwgbmJpbyAob3BlbnNzbCBzZXJ2ZXIpIiBcCisgICAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtbXR1IDI1NiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgbmJpbz0yIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgImZvdW5kIGZyYWdtZW50ZWQgRFRMUyBoYW5kc2hha2UgbWVzc2FnZSIgXAorICAgICAgICAgICAgLUMgImVycm9yIgorCisjIFRlc3RzIGZvciBzcGVjaWZpYyB0aGluZ3Mgd2l0aCAidW5yZWxpYWJsZSIgVURQIGNvbm5lY3Rpb24KKworbm90X3dpdGhfdmFsZ3JpbmQgIyBzcHVyaW91cyByZXNlbmQgZHVlIHRvIHRpbWVvdXQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiByZWZlcmVuY2UiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLUMgInJlcGxheWVkIHJlY29yZCIgXAorICAgICAgICAgICAgLVMgInJlcGxheWVkIHJlY29yZCIgXAorICAgICAgICAgICAgLUMgInJlY29yZCBmcm9tIGFub3RoZXIgZXBvY2giIFwKKyAgICAgICAgICAgIC1TICJyZWNvcmQgZnJvbSBhbm90aGVyIGVwb2NoIiBcCisgICAgICAgICAgICAtQyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCIgXAorICAgICAgICAgICAgLVMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1TICJyZXNlbmQiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitub3Rfd2l0aF92YWxncmluZCAjIHNwdXJpb3VzIHJlc2VuZCBkdWUgdG8gdGltZW91dAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGR1cGxpY2F0ZSBldmVyeSBwYWNrZXQiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHVwbGljYXRlPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGRlYnVnX2xldmVsPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgInJlcGxheWVkIHJlY29yZCIgXAorICAgICAgICAgICAgLXMgInJlcGxheWVkIHJlY29yZCIgXAorICAgICAgICAgICAgLWMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1zICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtUyAicmVzZW5kIiBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IGR1cGxpY2F0ZSBldmVyeSBwYWNrZXQsIHNlcnZlciBhbnRpLXJlcGxheSBvZmYiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHVwbGljYXRlPTEiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTIgYW50aV9yZXBsYXk9MCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAicmVwbGF5ZWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtUyAicmVwbGF5ZWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtYyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCIgXAorICAgICAgICAgICAgLXMgImRpc2NhcmRpbmcgaW52YWxpZCByZWNvcmQiIFwKKyAgICAgICAgICAgIC1jICJyZXNlbmQiIFwKKyAgICAgICAgICAgIC1zICJyZXNlbmQiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogaW5qZWN0IGludmFsaWQgQUQgcmVjb3JkLCBkZWZhdWx0IGJhZG1hY19saW1pdCIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBiYWRfYWQ9MSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MSByZWFkX3RpbWVvdXQ9MTAwIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIChtYWMpIiBcCisgICAgICAgICAgICAtcyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siIFwKKyAgICAgICAgICAgIC1TICJ0b28gbWFueSByZWNvcmRzIHdpdGggYmFkIE1BQyIgXAorICAgICAgICAgICAgLVMgIlZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogaW5qZWN0IGludmFsaWQgQUQgcmVjb3JkLCBiYWRtYWNfbGltaXQgMSIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBiYWRfYWQ9MSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MSBiYWRtYWNfbGltaXQ9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MSByZWFkX3RpbWVvdXQ9MTAwIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1DICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIChtYWMpIiBcCisgICAgICAgICAgICAtUyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLVMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1DICJIVFRQLzEuMCAyMDAgT0siIFwKKyAgICAgICAgICAgIC1zICJ0b28gbWFueSByZWNvcmRzIHdpdGggYmFkIE1BQyIgXAorICAgICAgICAgICAgLXMgIlZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogaW5qZWN0IGludmFsaWQgQUQgcmVjb3JkLCBiYWRtYWNfbGltaXQgMiIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBiYWRfYWQ9MSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MSBiYWRtYWNfbGltaXQ9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MSByZWFkX3RpbWVvdXQ9MTAwIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIChtYWMpIiBcCisgICAgICAgICAgICAtcyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siIFwKKyAgICAgICAgICAgIC1TICJ0b28gbWFueSByZWNvcmRzIHdpdGggYmFkIE1BQyIgXAorICAgICAgICAgICAgLVMgIlZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogaW5qZWN0IGludmFsaWQgQUQgcmVjb3JkLCBiYWRtYWNfbGltaXQgMiwgZXhjaGFuZ2VzIDIiXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBiYWRfYWQ9MSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MSBiYWRtYWNfbGltaXQ9MiBleGNoYW5nZXM9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MSByZWFkX3RpbWVvdXQ9MTAwIGV4Y2hhbmdlcz0yIiBcCisgICAgICAgICAgICAxIFwKKyAgICAgICAgICAgIC1jICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIChtYWMpIiBcCisgICAgICAgICAgICAtcyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCAobWFjKSIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siIFwKKyAgICAgICAgICAgIC1zICJ0b28gbWFueSByZWNvcmRzIHdpdGggYmFkIE1BQyIgXAorICAgICAgICAgICAgLXMgIlZlcmlmaWNhdGlvbiBvZiB0aGUgbWVzc2FnZSBNQUMgZmFpbGVkIgorCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogZGVsYXkgQ2hhbmdlQ2lwaGVyU3BlYyIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkZWxheV9jY3M9MSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgZGVidWdfbGV2ZWw9MSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAicmVjb3JkIGZyb20gYW5vdGhlciBlcG9jaCIgXAorICAgICAgICAgICAgLXMgInJlY29yZCBmcm9tIGFub3RoZXIgZXBvY2giIFwKKyAgICAgICAgICAgIC1jICJkaXNjYXJkaW5nIGludmFsaWQgcmVjb3JkIiBcCisgICAgICAgICAgICAtcyAiZGlzY2FyZGluZyBpbnZhbGlkIHJlY29yZCIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKKyMgVGVzdHMgZm9yICJyYW5kb21seSB1bnJlbGlhYmxlIGNvbm5lY3Rpb24iOiB0cnkgYSB2YXJpZXR5IG9mIGZsb3dzIGFuZCBwZWVycworCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDIKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCAoZHJvcCwgZGVsYXksIGR1cGxpY2F0ZSksIFwic2hvcnRcIiBQU0sgaGFuZHNoYWtlIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUgXAorICAgICAgICAgICAgIHBzaz1hYmMxMjMiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBwc2s9YWJjMTIzIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSAyCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIFwic2hvcnRcIiBSU0EgaGFuZHNoYWtlIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVJTQS1XSVRILUFFUy0xMjgtQ0JDLVNIQSIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSAyCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIFwic2hvcnRcIiAobm8gdGlja2V0LCBubyBjbGlfYXV0aCkgRlMgaGFuZHNoYWtlIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtcyAiRXh0cmEtaGVhZGVyOiIgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSAyCitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIEZTLCBjbGllbnQgYXV0aCIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1yZXF1aXJlZCIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDIKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgRlMsIHRpY2tldCIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0xIGF1dGhfbW9kZT1ub25lIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgMgorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBtYXggaGFuZHNoYWtlIChGUywgdGlja2V0ICsgY2xpZW50IGF1dGgpIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTEgYXV0aF9tb2RlPXJlcXVpcmVkIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgMgorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBtYXggaGFuZHNoYWtlLCBuYmlvIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCBuYmlvPTIgdGlja2V0cz0xIFwKKyAgICAgICAgICAgICBhdXRoX21vZGU9cmVxdWlyZWQiIFwKKyAgICAgICAgICAgICIkUF9DTEkgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIG5iaW89MiB0aWNrZXRzPTEiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgNAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBtaW4gaGFuZHNoYWtlLCByZXN1bXB0aW9uIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgYXV0aF9tb2RlPW5vbmUgXAorICAgICAgICAgICAgIHBzaz1hYmMxMjMgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIHBzaz1hYmMxMjMgXAorICAgICAgICAgICAgIGRlYnVnX2xldmVsPTMgcmVjb25uZWN0PTEgcmVhZF90aW1lb3V0PTEwMDAgbWF4X3Jlc2VuZD0xMCBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWluIGhhbmRzaGFrZSwgcmVzdW1wdGlvbiwgbmJpbyIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIFwKKyAgICAgICAgICAgICBwc2s9YWJjMTIzIGRlYnVnX2xldmVsPTMgbmJpbz0yIiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC0xMDAwMCB0aWNrZXRzPTAgcHNrPWFiYzEyMyBcCisgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MyByZWNvbm5lY3Q9MSByZWFkX3RpbWVvdXQ9MTAwMCBtYXhfcmVzZW5kPTEwIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQ00tOCBuYmlvPTIiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgImEgc2Vzc2lvbiBoYXMgYmVlbiByZXN1bWVkIiBcCisgICAgICAgICAgICAtYyAiYSBzZXNzaW9uIGhhcyBiZWVuIHJlc3VtZWQiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWluIGhhbmRzaGFrZSwgY2xpZW50LWluaXRpYXRlZCByZW5lZ28iIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBhdXRoX21vZGU9bm9uZSBcCisgICAgICAgICAgICAgcHNrPWFiYzEyMyByZW5lZ290aWF0aW9uPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIHBzaz1hYmMxMjMgXAorICAgICAgICAgICAgIHJlbmVnb3RpYXRlPTEgZGVidWdfbGV2ZWw9MiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWluIGhhbmRzaGFrZSwgY2xpZW50LWluaXRpYXRlZCByZW5lZ28sIG5iaW8iIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBhdXRoX21vZGU9bm9uZSBcCisgICAgICAgICAgICAgcHNrPWFiYzEyMyByZW5lZ290aWF0aW9uPTEgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIHBzaz1hYmMxMjMgXAorICAgICAgICAgICAgIHJlbmVnb3RpYXRlPTEgZGVidWdfbGV2ZWw9MiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgbWluIGhhbmRzaGFrZSwgc2VydmVyLWluaXRpYXRlZCByZW5lZ28iIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkUF9TUlYgZHRscz0xIGhzX3RpbWVvdXQ9MjUwLTEwMDAwIHRpY2tldHM9MCBhdXRoX21vZGU9bm9uZSBcCisgICAgICAgICAgICAgcHNrPWFiYzEyMyByZW5lZ290aWF0ZT0xIHJlbmVnb3RpYXRpb249MSBleGNoYW5nZXM9NCBcCisgICAgICAgICAgICAgZGVidWdfbGV2ZWw9MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIHBzaz1hYmMxMjMgXAorICAgICAgICAgICAgIHJlbmVnb3RpYXRpb249MSBleGNoYW5nZXM9NCBkZWJ1Z19sZXZlbD0yIFwKKyAgICAgICAgICAgICBmb3JjZV9jaXBoZXJzdWl0ZT1UTFMtUFNLLVdJVEgtQUVTLTEyOC1DQ00tOCIgXAorICAgICAgICAgICAgMCBcCisgICAgICAgICAgICAtYyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICI9PiByZW5lZ290aWF0ZSIgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgNAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBtaW4gaGFuZHNoYWtlLCBzZXJ2ZXItaW5pdGlhdGVkIHJlbmVnbywgbmJpbyIgXAorICAgICAgICAgICAgLXAgIiRQX1BYWSBkcm9wPTUgZGVsYXk9NSBkdXBsaWNhdGU9NSIgXAorICAgICAgICAgICAgIiRQX1NSViBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIGF1dGhfbW9kZT1ub25lIFwKKyAgICAgICAgICAgICBwc2s9YWJjMTIzIHJlbmVnb3RpYXRlPTEgcmVuZWdvdGlhdGlvbj0xIGV4Y2hhbmdlcz00IFwKKyAgICAgICAgICAgICBkZWJ1Z19sZXZlbD0yIG5iaW89MiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtMTAwMDAgdGlja2V0cz0wIHBzaz1hYmMxMjMgXAorICAgICAgICAgICAgIHJlbmVnb3RpYXRpb249MSBleGNoYW5nZXM9NCBkZWJ1Z19sZXZlbD0yIG5iaW89MiBcCisgICAgICAgICAgICAgZm9yY2VfY2lwaGVyc3VpdGU9VExTLVBTSy1XSVRILUFFUy0xMjgtQ0NNLTgiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIj0+IHJlbmVnb3RpYXRlIiBcCisgICAgICAgICAgICAtcyAiPT4gcmVuZWdvdGlhdGUiIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiSFRUUC8xLjAgMjAwIE9LIgorCitjbGllbnRfbmVlZHNfbW9yZV90aW1lIDYKK25vdF93aXRoX3ZhbGdyaW5kICMgcmlzayBvZiBub24tbWJlZHRscyBwZWVyIHRpbWluZyBvdXQKK3J1bl90ZXN0ICAgICJEVExTIHByb3h5OiAzZCwgb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUgcHJvdGVjdF9odnI9MSIgXAorICAgICAgICAgICAgIiRPX1NSViAtZHRsczEgLW10dSAyMDQ4IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC02MDAwMCB0aWNrZXRzPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA4Citub3Rfd2l0aF92YWxncmluZCAjIHJpc2sgb2Ygbm9uLW1iZWR0bHMgcGVlciB0aW1pbmcgb3V0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG9wZW5zc2wgc2VydmVyLCBmcmFnbWVudGF0aW9uIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IHByb3RlY3RfaHZyPTEiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWR0bHMxIC1tdHUgNzY4IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC02MDAwMCB0aWNrZXRzPTAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLWMgIkhUVFAvMS4wIDIwMCBPSyIKKworY2xpZW50X25lZWRzX21vcmVfdGltZSA4Citub3Rfd2l0aF92YWxncmluZCAjIHJpc2sgb2Ygbm9uLW1iZWR0bHMgcGVlciB0aW1pbmcgb3V0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIG9wZW5zc2wgc2VydmVyLCBmcmFnbWVudGF0aW9uLCBuYmlvIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IHByb3RlY3RfaHZyPTEiIFwKKyAgICAgICAgICAgICIkT19TUlYgLWR0bHMxIC1tdHUgNzY4IiBcCisgICAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSBoc190aW1lb3V0PTI1MC02MDAwMCBuYmlvPTIgdGlja2V0cz0wIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1jICJIVFRQLzEuMCAyMDAgT0siCisKK3JlcXVpcmVzX2dudXRscworY2xpZW50X25lZWRzX21vcmVfdGltZSA2Citub3Rfd2l0aF92YWxncmluZCAjIHJpc2sgb2Ygbm9uLW1iZWR0bHMgcGVlciB0aW1pbmcgb3V0CitydW5fdGVzdCAgICAiRFRMUyBwcm94eTogM2QsIGdudXRscyBzZXJ2ZXIiIFwKKyAgICAgICAgICAgIC1wICIkUF9QWFkgZHJvcD01IGRlbGF5PTUgZHVwbGljYXRlPTUiIFwKKyAgICAgICAgICAgICIkR19TUlYgLXUgLS1tdHUgMjA0OCAtYSIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtNjAwMDAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJFeHRyYS1oZWFkZXI6IgorCityZXF1aXJlc19nbnV0bHMKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgOAorbm90X3dpdGhfdmFsZ3JpbmQgIyByaXNrIG9mIG5vbi1tYmVkdGxzIHBlZXIgdGltaW5nIG91dAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBnbnV0bHMgc2VydmVyLCBmcmFnbWVudGF0aW9uIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDUxMiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtNjAwMDAiIFwKKyAgICAgICAgICAgIDAgXAorICAgICAgICAgICAgLXMgIkV4dHJhLWhlYWRlcjoiIFwKKyAgICAgICAgICAgIC1jICJFeHRyYS1oZWFkZXI6IgorCityZXF1aXJlc19nbnV0bHMKK2NsaWVudF9uZWVkc19tb3JlX3RpbWUgOAorbm90X3dpdGhfdmFsZ3JpbmQgIyByaXNrIG9mIG5vbi1tYmVkdGxzIHBlZXIgdGltaW5nIG91dAorcnVuX3Rlc3QgICAgIkRUTFMgcHJveHk6IDNkLCBnbnV0bHMgc2VydmVyLCBmcmFnbWVudGF0aW9uLCBuYmlvIiBcCisgICAgICAgICAgICAtcCAiJFBfUFhZIGRyb3A9NSBkZWxheT01IGR1cGxpY2F0ZT01IiBcCisgICAgICAgICAgICAiJEdfU1JWIC11IC0tbXR1IDUxMiIgXAorICAgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgaHNfdGltZW91dD0yNTAtNjAwMDAgbmJpbz0yIiBcCisgICAgICAgICAgICAwIFwKKyAgICAgICAgICAgIC1zICJFeHRyYS1oZWFkZXI6IiBcCisgICAgICAgICAgICAtYyAiRXh0cmEtaGVhZGVyOiIKKworIyBGaW5hbCByZXBvcnQKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCitpZiBbICRGQUlMUyA9IDAgXTsgdGhlbgorICAgIHByaW50ZiAiUEFTU0VEIgorZWxzZQorICAgIHByaW50ZiAiRkFJTEVEIgorZmkKK1BBU1NFUz0kKCggJFRFU1RTIC0gJEZBSUxTICkpCitlY2hvICIgKCRQQVNTRVMgLyAkVEVTVFMgdGVzdHMgKCRTS0lQUyBza2lwcGVkKSkiCisKK2V4aXQgJEZBSUxTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4MTVkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgpAQCAtMCwwICsxLDQwNCBAQAorI2xpbmUgMSAiaGVscGVycy5mdW5jdGlvbiIKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBIZWFkZXJzICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQorI2luY2x1ZGUgIm1iZWR0bHMvcGxhdGZvcm0uaCIKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgbWJlZHRsc19mcHJpbnRmICAgIGZwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfY2FsbG9jICAgICBjYWxsb2MKKyNkZWZpbmUgbWJlZHRsc19mcmVlICAgICAgIGZyZWUKKyNkZWZpbmUgbWJlZHRsc19leGl0ICAgICAgIGV4aXQKKyNkZWZpbmUgbWJlZHRsc190aW1lICAgICAgIHRpbWUKKyNkZWZpbmUgbWJlZHRsc190aW1lX3QgICAgIHRpbWVfdAorI2RlZmluZSBNQkVEVExTX0VYSVRfU1VDQ0VTUyBFWElUX1NVQ0NFU1MKKyNkZWZpbmUgTUJFRFRMU19FWElUX0ZBSUxVUkUgRVhJVF9GQUlMVVJFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCisjZW5kaWYKKworI2lmZGVmIF9NU0NfVkVSCisjaW5jbHVkZSA8YmFzZXRzZC5oPgordHlwZWRlZiBVSU5UMzIgdWludDMyX3Q7CisjZGVmaW5lIHN0cm5jYXNlY21wIF9zdHJuaWNtcAorI2RlZmluZSBzdHJjYXNlY21wIF9zdHJpY21wCisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoX191bml4X18pIHx8IChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENvbnN0YW50cyAqLworCisjZGVmaW5lIERFUEVOREVOQ1lfU1VQUE9SVEVEICAgICAgICAwCisjZGVmaW5lIERFUEVOREVOQ1lfTk9UX1NVUFBPUlRFRCAgICAxCisKKyNkZWZpbmUgS0VZX1ZBTFVFX01BUFBJTkdfRk9VTkQgICAgIDAKKyNkZWZpbmUgS0VZX1ZBTFVFX01BUFBJTkdfTk9UX0ZPVU5EIC0xCisKKyNkZWZpbmUgRElTUEFUQ0hfVEVTVF9TVUNDRVNTICAgICAgIDAKKyNkZWZpbmUgRElTUEFUQ0hfVEVTVF9GTl9OT1RfRk9VTkQgIDEKKyNkZWZpbmUgRElTUEFUQ0hfSU5WQUxJRF9URVNUX0RBVEEgIDIKKyNkZWZpbmUgRElTUEFUQ0hfVU5TVVBQT1JURURfU1VJVEUgIDMKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFjcm9zICovCisKKyNkZWZpbmUgVEVTVF9BU1NFUlQoIFRFU1QgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggISAoVEVTVCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZXN0X2ZhaWwoICNURVNULCBfX0xJTkVfXywgX19GSUxFX18gKTsgXAorICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSggMCApCisKKyNkZWZpbmUgYXNzZXJ0KGEpIGlmKCAhKCBhICkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsICJBc3NlcnRpb24gRmFpbGVkIGF0ICVzOiVkIC0gJXNcbiIsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICNhICk7ICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19leGl0KCAxICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKgorICogMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uIG1hY3JvcyAoYmlnIGVuZGlhbikKKyAqLworI2lmbmRlZiBHRVRfVUlOVDMyX0JFCisjZGVmaW5lIEdFVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChuKSA9ICggKHVpbnQzMl90KSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICAgICAgICBcCisgICAgICAgIHwgKCAodWludDMyX3QpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MzJfdCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgICAgICAgXAorICAgICAgICB8ICggKHVpbnQzMl90KSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICAgICAgICBcCit9CisjZW5kaWYKKworI2lmbmRlZiBQVVRfVUlOVDMyX0JFCisjZGVmaW5lIFBVVF9VSU5UMzJfQkUobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChiKVsoaSkgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSA+PiAyNCApOyAgICAgICBcCisgICAgKGIpWyhpKSArIDFdID0gKHVuc2lnbmVkIGNoYXIpICggKG4pID4+IDE2ICk7ICAgICAgIFwKKyAgICAoYilbKGkpICsgMl0gPSAodW5zaWduZWQgY2hhcikgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgIChiKVsoaSkgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSAoIChuKSAgICAgICApOyAgICAgICBcCit9CisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogR2xvYmFsIHZhcmlhYmxlcyAqLworCitzdGF0aWMgaW50IHRlc3RfZXJyb3JzID0gMDsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSGVscGVyIEZ1bmN0aW9ucyAqLworCisjaWYgZGVmaW5lZChfX3VuaXhfXykgfHwgKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKSkKK3N0YXRpYyBpbnQgcmVkaXJlY3Rfb3V0cHV0KCBGSUxFKiogb3V0X3N0cmVhbSwgY29uc3QgY2hhciogcGF0aCApCit7CisgICAgaW50IHN0ZG91dF9mZCA9IGR1cCggZmlsZW5vKCAqb3V0X3N0cmVhbSApICk7CisKKyAgICBpZiggc3Rkb3V0X2ZkID09IC0xICkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmZmx1c2goICpvdXRfc3RyZWFtICk7CisgICAgZmNsb3NlKCAqb3V0X3N0cmVhbSApOworICAgICpvdXRfc3RyZWFtID0gZm9wZW4oIHBhdGgsICJ3IiApOworCisgICAgaWYoICpvdXRfc3RyZWFtID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBzdGRvdXRfZmQ7Cit9CisKK3N0YXRpYyBpbnQgcmVzdG9yZV9vdXRwdXQoIEZJTEUqKiBvdXRfc3RyZWFtLCBpbnQgb2xkX2ZkICkKK3sKKyAgICBmZmx1c2goICpvdXRfc3RyZWFtICk7CisgICAgZmNsb3NlKCAqb3V0X3N0cmVhbSApOworCisgICAgKm91dF9zdHJlYW0gPSBmZG9wZW4oIG9sZF9mZCwgInciICk7CisgICAgaWYoICpvdXRfc3RyZWFtID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9vdXRwdXQoIEZJTEUqIG91dF9zdHJlYW0gKQoreworICAgIGZjbG9zZSggb3V0X3N0cmVhbSApOworfQorI2VuZGlmIC8qIF9fdW5peF9fIHx8IF9fQVBQTEVfXyBfX01BQ0hfXyAqLworCitzdGF0aWMgaW50IHVuaGV4aWZ5KCB1bnNpZ25lZCBjaGFyICpvYnVmLCBjb25zdCBjaGFyICppYnVmICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGMsIGMyOworICAgIGludCBsZW4gPSBzdHJsZW4oIGlidWYgKSAvIDI7CisgICAgYXNzZXJ0KCBzdHJsZW4oIGlidWYgKSAlIDIgPT0gMCApOyAvKiBtdXN0IGJlIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzICovCisKKyAgICB3aGlsZSggKmlidWYgIT0gMCApCisgICAgeworICAgICAgICBjID0gKmlidWYrKzsKKyAgICAgICAgaWYoIGMgPj0gJzAnICYmIGMgPD0gJzknICkKKyAgICAgICAgICAgIGMgLT0gJzAnOworICAgICAgICBlbHNlIGlmKCBjID49ICdhJyAmJiBjIDw9ICdmJyApCisgICAgICAgICAgICBjIC09ICdhJyAtIDEwOworICAgICAgICBlbHNlIGlmKCBjID49ICdBJyAmJiBjIDw9ICdGJyApCisgICAgICAgICAgICBjIC09ICdBJyAtIDEwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnQoIDAgKTsKKworICAgICAgICBjMiA9ICppYnVmKys7CisgICAgICAgIGlmKCBjMiA+PSAnMCcgJiYgYzIgPD0gJzknICkKKyAgICAgICAgICAgIGMyIC09ICcwJzsKKyAgICAgICAgZWxzZSBpZiggYzIgPj0gJ2EnICYmIGMyIDw9ICdmJyApCisgICAgICAgICAgICBjMiAtPSAnYScgLSAxMDsKKyAgICAgICAgZWxzZSBpZiggYzIgPj0gJ0EnICYmIGMyIDw9ICdGJyApCisgICAgICAgICAgICBjMiAtPSAnQScgLSAxMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0KCAwICk7CisKKyAgICAgICAgKm9idWYrKyA9ICggYyA8PCA0ICkgfCBjMjsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCBoZXhpZnkoIHVuc2lnbmVkIGNoYXIgKm9idWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBsZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgbCwgaDsKKworICAgIHdoaWxlKCBsZW4gIT0gMCApCisgICAgeworICAgICAgICBoID0gKmlidWYgLyAxNjsKKyAgICAgICAgbCA9ICppYnVmICUgMTY7CisKKyAgICAgICAgaWYoIGggPCAxMCApCisgICAgICAgICAgICAqb2J1ZisrID0gJzAnICsgaDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKm9idWYrKyA9ICdhJyArIGggLSAxMDsKKworICAgICAgICBpZiggbCA8IDEwICkKKyAgICAgICAgICAgICpvYnVmKysgPSAnMCcgKyBsOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqb2J1ZisrID0gJ2EnICsgbCAtIDEwOworCisgICAgICAgICsraWJ1ZjsKKyAgICAgICAgbGVuLS07CisgICAgfQorfQorCisvKioKKyAqIEFsbG9jYXRlIGFuZCB6ZXJvaXplIGEgYnVmZmVyLgorICoKKyAqIElmIHRoZSBzaXplIGlmIHplcm8sIGEgcG9pbnRlciB0byBhIHplcm9pemVkIDEtYnl0ZSBidWZmZXIgaXMgcmV0dXJuZWQuCisgKgorICogRm9yIGNvbnZlbmllbmNlLCBkaWVzIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyICp6ZXJvX2FsbG9jKCBzaXplX3QgbGVuICkKK3sKKyAgICB2b2lkICpwOworICAgIHNpemVfdCBhY3R1YWxfbGVuID0gKCBsZW4gIT0gMCApID8gbGVuIDogMTsKKworICAgIHAgPSBtYmVkdGxzX2NhbGxvYyggMSwgYWN0dWFsX2xlbiApOworICAgIGFzc2VydCggcCAhPSBOVUxMICk7CisKKyAgICBtZW1zZXQoIHAsIDB4MDAsIGFjdHVhbF9sZW4gKTsKKworICAgIHJldHVybiggcCApOworfQorCisvKioKKyAqIEFsbG9jYXRlIGFuZCBmaWxsIGEgYnVmZmVyIGZyb20gaGV4IGRhdGEuCisgKgorICogVGhlIGJ1ZmZlciBpcyBzaXplZCBleGFjdGx5IGFzIG5lZWRlZC4gVGhpcyBhbGxvd3MgdG8gZGV0ZWN0IGJ1ZmZlcgorICogb3ZlcnJ1bnMgKGluY2x1ZGluZyBvdmVycmVhZHMpIHdoZW4gcnVubmluZyB0aGUgdGVzdCBzdWl0ZSB1bmRlciB2YWxncmluZC4KKyAqCisgKiBJZiB0aGUgc2l6ZSBpZiB6ZXJvLCBhIHBvaW50ZXIgdG8gYSB6ZXJvaXplZCAxLWJ5dGUgYnVmZmVyIGlzIHJldHVybmVkLgorICoKKyAqIEZvciBjb252ZW5pZW5jZSwgZGllcyBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqdW5oZXhpZnlfYWxsb2MoIGNvbnN0IGNoYXIgKmlidWYsIHNpemVfdCAqb2xlbiApCit7CisgICAgdW5zaWduZWQgY2hhciAqb2J1ZjsKKworICAgICpvbGVuID0gc3RybGVuKCBpYnVmICkgLyAyOworCisgICAgaWYoICpvbGVuID09IDAgKQorICAgICAgICByZXR1cm4oIHplcm9fYWxsb2MoICpvbGVuICkgKTsKKworICAgIG9idWYgPSBtYmVkdGxzX2NhbGxvYyggMSwgKm9sZW4gKTsKKyAgICBhc3NlcnQoIG9idWYgIT0gTlVMTCApOworCisgICAgKHZvaWQpIHVuaGV4aWZ5KCBvYnVmLCBpYnVmICk7CisKKyAgICByZXR1cm4oIG9idWYgKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGp1c3QgcmV0dXJucyBkYXRhIGZyb20gcmFuZCgpLgorICogQWx0aG91Z2ggcHJlZGljdGFibGUgYW5kIG9mdGVuIHNpbWlsYXIgb24gbXVsdGlwbGUKKyAqIHJ1bnMsIHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGlkZW50aWNhbCByYW5kb20gb24KKyAqIGVhY2ggcnVuLiBTbyBkbyBub3QgdXNlIHRoaXMgaWYgdGhlIHJlc3VsdHMgb2YgYQorICogdGVzdCBkZXBlbmQgb24gdGhlIHJhbmRvbSBkYXRhIHRoYXQgaXMgZ2VuZXJhdGVkLgorICoKKyAqIHJuZ19zdGF0ZSBzaGFsbCBiZSBOVUxMLgorICovCitzdGF0aWMgaW50IHJuZF9zdGRfcmFuZCggdm9pZCAqcm5nX3N0YXRlLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4gKQoreworI2lmICFkZWZpbmVkKF9fT3BlbkJTRF9fKQorICAgIHNpemVfdCBpOworCisgICAgaWYoIHJuZ19zdGF0ZSAhPSBOVUxMICkKKyAgICAgICAgcm5nX3N0YXRlICA9IE5VTEw7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgbGVuOyArK2kgKQorICAgICAgICBvdXRwdXRbaV0gPSByYW5kKCk7CisjZWxzZQorICAgIGlmKCBybmdfc3RhdGUgIT0gTlVMTCApCisgICAgICAgIHJuZ19zdGF0ZSA9IE5VTEw7CisKKyAgICBhcmM0cmFuZG9tX2J1Ziggb3V0cHV0LCBsZW4gKTsKKyNlbmRpZiAvKiAhT3BlbkJTRCAqLworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IHJldHVybnMgemVyb3MKKyAqCisgKiBybmdfc3RhdGUgc2hhbGwgYmUgTlVMTC4KKyAqLworc3RhdGljIGludCBybmRfemVyb19yYW5kKCB2b2lkICpybmdfc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgc2l6ZV90IGxlbiApCit7CisgICAgaWYoIHJuZ19zdGF0ZSAhPSBOVUxMICkKKyAgICAgICAgcm5nX3N0YXRlICA9IE5VTEw7CisKKyAgICBtZW1zZXQoIG91dHB1dCwgMCwgbGVuICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICAgc2l6ZV90IGxlbmd0aDsKK30gcm5kX2J1Zl9pbmZvOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyByYW5kb20gYmFzZWQgb24gYSBidWZmZXIgaXQgcmVjZWl2ZXMuCisgKgorICogcm5nX3N0YXRlIHNoYWxsIGJlIGEgcG9pbnRlciB0byBhIHJuZF9idWZfaW5mbyBzdHJ1Y3R1cmUuCisgKgorICogVGhlIG51bWJlciBvZiBieXRlcyByZWxlYXNlZCBmcm9tIHRoZSBidWZmZXIgb24gZWFjaCBjYWxsIHRvCisgKiB0aGUgcmFuZG9tIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCBieSBwZXJfY2FsbC4gKENhbiBiZSBiZXR3ZWVuCisgKiAxIGFuZCA0KQorICoKKyAqIEFmdGVyIHRoZSBidWZmZXIgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gcmFuZCgpOworICovCitzdGF0aWMgaW50IHJuZF9idWZmZXJfcmFuZCggdm9pZCAqcm5nX3N0YXRlLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4gKQoreworICAgIHJuZF9idWZfaW5mbyAqaW5mbyA9IChybmRfYnVmX2luZm8gKikgcm5nX3N0YXRlOworICAgIHNpemVfdCB1c2VfbGVuOworCisgICAgaWYoIHJuZ19zdGF0ZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBybmRfc3RkX3JhbmQoIE5VTEwsIG91dHB1dCwgbGVuICkgKTsKKworICAgIHVzZV9sZW4gPSBsZW47CisgICAgaWYoIGxlbiA+IGluZm8tPmxlbmd0aCApCisgICAgICAgIHVzZV9sZW4gPSBpbmZvLT5sZW5ndGg7CisKKyAgICBpZiggdXNlX2xlbiApCisgICAgeworICAgICAgICBtZW1jcHkoIG91dHB1dCwgaW5mby0+YnVmLCB1c2VfbGVuICk7CisgICAgICAgIGluZm8tPmJ1ZiArPSB1c2VfbGVuOworICAgICAgICBpbmZvLT5sZW5ndGggLT0gdXNlX2xlbjsKKyAgICB9CisKKyAgICBpZiggbGVuIC0gdXNlX2xlbiA+IDAgKQorICAgICAgICByZXR1cm4oIHJuZF9zdGRfcmFuZCggTlVMTCwgb3V0cHV0ICsgdXNlX2xlbiwgbGVuIC0gdXNlX2xlbiApICk7CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoqCisgKiBJbmZvIHN0cnVjdHVyZSBmb3IgdGhlIHBzZXVkbyByYW5kb20gZnVuY3Rpb24KKyAqCisgKiBLZXkgc2hvdWxkIGJlIHNldCBhdCB0aGUgc3RhcnQgdG8gYSB0ZXN0LXVuaXF1ZSB2YWx1ZS4KKyAqIERvIG5vdCBmb3JnZXQgZW5kaWFubmVzcyEKKyAqIFN0YXRlKCB2MCwgdjEgKSBzaG91bGQgYmUgc2V0IHRvIHplcm8uCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3Qga2V5WzE2XTsKKyAgICB1aW50MzJfdCB2MCwgdjE7Cit9IHJuZF9wc2V1ZG9faW5mbzsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmFuZG9tIGJhc2VkIG9uIGEgcHNldWRvIHJhbmRvbSBmdW5jdGlvbi4KKyAqIFRoaXMgbWVhbnMgdGhlIHJlc3VsdHMgc2hvdWxkIGJlIGlkZW50aWNhbCBvbiBhbGwgc3lzdGVtcy4KKyAqIFBzZXVkbyByYW5kb20gaXMgYmFzZWQgb24gdGhlIFhURUEgZW5jcnlwdGlvbiBhbGdvcml0aG0gdG8KKyAqIGdlbmVyYXRlIHBzZXVkb3JhbmRvbS4KKyAqCisgKiBybmdfc3RhdGUgc2hhbGwgYmUgYSBwb2ludGVyIHRvIGEgcm5kX3BzZXVkb19pbmZvIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGludCBybmRfcHNldWRvX3JhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICkKK3sKKyAgICBybmRfcHNldWRvX2luZm8gKmluZm8gPSAocm5kX3BzZXVkb19pbmZvICopIHJuZ19zdGF0ZTsKKyAgICB1aW50MzJfdCBpLCAqaywgc3VtLCBkZWx0YT0weDlFMzc3OUI5OworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzRdLCAqb3V0ID0gb3V0cHV0OworCisgICAgaWYoIHJuZ19zdGF0ZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBybmRfc3RkX3JhbmQoIE5VTEwsIG91dHB1dCwgbGVuICkgKTsKKworICAgIGsgPSBpbmZvLT5rZXk7CisKKyAgICB3aGlsZSggbGVuID4gMCApCisgICAgeworICAgICAgICBzaXplX3QgdXNlX2xlbiA9ICggbGVuID4gNCApID8gNCA6IGxlbjsKKyAgICAgICAgc3VtID0gMDsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgMzI7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm8tPnYwICs9ICggKCAoIGluZm8tPnYxIDw8IDQgKSBeICggaW5mby0+djEgPj4gNSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8tPnYxICkgXiAoIHN1bSArIGtbc3VtICYgM10gKTsKKyAgICAgICAgICAgIHN1bSArPSBkZWx0YTsKKyAgICAgICAgICAgIGluZm8tPnYxICs9ICggKCAoIGluZm8tPnYwIDw8IDQgKSBeICggaW5mby0+djAgPj4gNSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8tPnYwICkgXiAoIHN1bSArIGtbKCBzdW0+PjExICkgJiAzXSApOworICAgICAgICB9CisKKyAgICAgICAgUFVUX1VJTlQzMl9CRSggaW5mby0+djAsIHJlc3VsdCwgMCApOworICAgICAgICBtZW1jcHkoIG91dCwgcmVzdWx0LCB1c2VfbGVuICk7CisgICAgICAgIGxlbiAtPSB1c2VfbGVuOworICAgICAgICBvdXQgKz0gNDsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9mYWlsKCBjb25zdCBjaGFyICp0ZXN0LCBpbnQgbGluZV9ubywgY29uc3QgY2hhciogZmlsZW5hbWUgKQoreworICAgIHRlc3RfZXJyb3JzKys7CisgICAgaWYoIHRlc3RfZXJyb3JzID09IDEgKQorICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIkZBSUxFRFxuIiApOworICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiICAlc1xuICBhdCBsaW5lICVkLCAlc1xuIiwgdGVzdCwgbGluZV9ubywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICk7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmZjVhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCkBAIC0wLDAgKzEsNTA5IEBACisjbGluZSAxICJtYWluX3Rlc3QuZnVuY3Rpb24iCitTVUlURV9QUkVfREVQCisjZGVmaW5lIFRFU1RfU1VJVEVfQUNUSVZFCisKK2ludCB2ZXJpZnlfc3RyaW5nKCBjaGFyICoqc3RyICkKK3sKKyAgICBpZiggKCpzdHIpWzBdICE9ICciJyB8fAorICAgICAgICAoKnN0cilbc3RybGVuKCAqc3RyICkgLSAxXSAhPSAnIicgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAiRXhwZWN0ZWQgc3RyaW5nICh3aXRoIFwiXCIpIGZvciBwYXJhbWV0ZXIgYW5kIGdvdDogJXNcbiIsICpzdHIgKTsKKyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKworICAgICgqc3RyKSsrOworICAgICgqc3RyKVtzdHJsZW4oICpzdHIgKSAtIDFdID0gJ1wwJzsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgdmVyaWZ5X2ludCggY2hhciAqc3RyLCBpbnQgKnZhbHVlICkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBpbnQgbWludXMgPSAwOworICAgIGludCBkaWdpdHMgPSAxOworICAgIGludCBoZXggPSAwOworCisgICAgZm9yKCBpID0gMDsgaSA8IHN0cmxlbiggc3RyICk7IGkrKyApCisgICAgeworICAgICAgICBpZiggaSA9PSAwICYmIHN0cltpXSA9PSAnLScgKQorICAgICAgICB7CisgICAgICAgICAgICBtaW51cyA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAoICggbWludXMgJiYgaSA9PSAyICkgfHwgKCAhbWludXMgJiYgaSA9PSAxICkgKSAmJgorICAgICAgICAgICAgc3RyW2kgLSAxXSA9PSAnMCcgJiYgc3RyW2ldID09ICd4JyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGhleCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAhICggKCBzdHJbaV0gPj0gJzAnICYmIHN0cltpXSA8PSAnOScgKSB8fAorICAgICAgICAgICAgICAgICggaGV4ICYmICggKCBzdHJbaV0gPj0gJ2EnICYmIHN0cltpXSA8PSAnZicgKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdHJbaV0gPj0gJ0EnICYmIHN0cltpXSA8PSAnRicgKSApICkgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZ2l0cyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBkaWdpdHMgKQorICAgIHsKKyAgICAgICAgaWYoIGhleCApCisgICAgICAgICAgICAqdmFsdWUgPSBzdHJ0b2woIHN0ciwgTlVMTCwgMTYgKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnZhbHVlID0gc3RydG9sKCBzdHIsIE5VTEwsIDEwICk7CisKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorCitNQVBQSU5HX0NPREUKKworICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgaW50ZWdlciBmb3IgcGFyYW1ldGVyIGFuZCBnb3Q6ICVzXG4iLCBzdHIgKTsKKyAgICByZXR1cm4oIEtFWV9WQUxVRV9NQVBQSU5HX05PVF9GT1VORCApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUZXN0IENhc2UgY29kZSAqLworCitGVU5DVElPTl9DT0RFCitTVUlURV9QT1NUX0RFUAorCisjbGluZSAhTElORV9OTyEgIm1haW5fdGVzdC5mdW5jdGlvbiIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGVzdCBkaXNwYXRjaCBjb2RlICovCisKK2ludCBkZXBfY2hlY2soIGNoYXIgKnN0ciApCit7CisgICAgaWYoIHN0ciA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAxICk7CisKK0RFUF9DSEVDS19DT0RFCisjbGluZSAhTElORV9OTyEgIm1haW5fdGVzdC5mdW5jdGlvbiIKKworICAgIHJldHVybiggREVQRU5ERU5DWV9OT1RfU1VQUE9SVEVEICk7Cit9CisKK2ludCBkaXNwYXRjaF90ZXN0KGludCBjbnQsIGNoYXIgKnBhcmFtc1s1MF0pCit7CisgICAgaW50IHJldDsKKyAgICAoKHZvaWQpIGNudCk7CisgICAgKCh2b2lkKSBwYXJhbXMpOworCisjaWYgZGVmaW5lZChURVNUX1NVSVRFX0FDVElWRSkKKyAgICByZXQgPSBESVNQQVRDSF9URVNUX1NVQ0NFU1M7CisKKyAgICAvLyBDYXN0IHRvIHZvaWQgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MKKyAgICAodm9pZClyZXQ7CisKK0RJU1BBVENIX0ZVTkNUSU9OCisgICAgeworI2xpbmUgIUxJTkVfTk8hICJtYWluX3Rlc3QuZnVuY3Rpb24iCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMRURcblNraXBwaW5nIHVua25vd24gdGVzdCBmdW5jdGlvbiAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1swXSApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworICAgICAgICByZXQgPSBESVNQQVRDSF9URVNUX0ZOX05PVF9GT1VORDsKKyAgICB9CisjZWxzZQorICAgIHJldCA9IERJU1BBVENIX1VOU1VQUE9SVEVEX1NVSVRFOworI2VuZGlmCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFpbiBUZXN0IGNvZGUgKi8KKworI2xpbmUgIUxJTkVfTk8hICJtYWluX3Rlc3QuZnVuY3Rpb24iCisKKyNkZWZpbmUgVVNBR0UgXAorICAgICJVc2FnZTogJXMgW09QVElPTlNdIGZpbGVzLi4uXG5cbiIgXAorICAgICIgICBDb21tYW5kIGxpbmUgYXJndW1lbnRzOlxuIiBcCisgICAgIiAgICAgZmlsZXMuLi4gICAgICAgICAgT25lIG9yIG1vcmUgdGVzdCBkYXRhIGZpbGUuIElmIG5vIGZpbGUgaXMgc3BlY2lmaWVkXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW1nIGRlZmF1bHQgdGVzdCBjYXNlIGlzIHVzZWQ6XG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcblxuIiBcCisgICAgIiAgIE9wdGlvbnM6XG4iIFwKKyAgICAiICAgICAtdiB8IC0tdmVyYm9zZSAgICBEaXNwbGF5IGZ1bGwgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCB0ZXN0XG4iIFwKKyAgICAiICAgICAtaCB8IC0taGVscCAgICAgICBEaXNwbGF5IHRoaXMgaW5mb3JtYXRpb25cblxuIiwgXAorICAgIGFyZ3ZbMF0sIFwKKyAgICAiVEVTVENBU0VfRklMRU5BTUUiCisKKworaW50IGdldF9saW5lKCBGSUxFICpmLCBjaGFyICpidWYsIHNpemVfdCBsZW4gKQoreworICAgIGNoYXIgKnJldDsKKworICAgIHJldCA9IGZnZXRzKCBidWYsIGxlbiwgZiApOworICAgIGlmKCByZXQgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCBzdHJsZW4oIGJ1ZiApICYmIGJ1ZltzdHJsZW4oYnVmKSAtIDFdID09ICdcbicgKQorICAgICAgICBidWZbc3RybGVuKGJ1ZikgLSAxXSA9ICdcMCc7CisgICAgaWYoIHN0cmxlbiggYnVmICkgJiYgYnVmW3N0cmxlbihidWYpIC0gMV0gPT0gJ1xyJyApCisgICAgICAgIGJ1ZltzdHJsZW4oYnVmKSAtIDFdID0gJ1wwJzsKKworICAgIHJldHVybiggMCApOworfQorCitpbnQgcGFyc2VfYXJndW1lbnRzKCBjaGFyICpidWYsIHNpemVfdCBsZW4sIGNoYXIgKnBhcmFtc1s1MF0gKQoreworICAgIGludCBjbnQgPSAwLCBpOworICAgIGNoYXIgKmN1ciA9IGJ1ZjsKKyAgICBjaGFyICpwID0gYnVmLCAqcTsKKworICAgIHBhcmFtc1tjbnQrK10gPSBjdXI7CisKKyAgICB3aGlsZSggKnAgIT0gJ1wwJyAmJiBwIDwgYnVmICsgbGVuICkKKyAgICB7CisgICAgICAgIGlmKCAqcCA9PSAnXFwnICkKKyAgICAgICAgeworICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYoICpwID09ICc6JyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBwICsgMSA8IGJ1ZiArIGxlbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3VyID0gcCArIDE7CisgICAgICAgICAgICAgICAgcGFyYW1zW2NudCsrXSA9IGN1cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIHArKzsKKyAgICB9CisKKyAgICAvKiBSZXBsYWNlIG5ld2xpbmVzLCBxdWVzdGlvbiBtYXJrcyBhbmQgY29sb25zIGluIHN0cmluZ3MgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgY250OyBpKysgKQorICAgIHsKKyAgICAgICAgcCA9IHBhcmFtc1tpXTsKKyAgICAgICAgcSA9IHBhcmFtc1tpXTsKKworICAgICAgICB3aGlsZSggKnAgIT0gJ1wwJyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAqcCA9PSAnXFwnICYmICoocCArIDEpID09ICduJyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgICAgICAgICoocSsrKSA9ICdcbic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCAqcCA9PSAnXFwnICYmICoocCArIDEpID09ICc6JyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgICAgICAgICoocSsrKSA9ICc6JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoICpwID09ICdcXCcgJiYgKihwICsgMSkgPT0gJz8nICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgICAgICAgKihxKyspID0gJz8nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICoocSsrKSA9ICoocCsrKTsKKyAgICAgICAgfQorICAgICAgICAqcSA9ICdcMCc7CisgICAgfQorCisgICAgcmV0dXJuKCBjbnQgKTsKK30KKworc3RhdGljIGludCB0ZXN0X3NucHJpbnRmKCBzaXplX3QgbiwgY29uc3QgY2hhciByZWZfYnVmWzEwXSwgaW50IHJlZl9yZXQgKQoreworICAgIGludCByZXQ7CisgICAgY2hhciBidWZbMTBdID0gInh4eHh4eHh4eCI7CisgICAgY29uc3QgY2hhciByZWZbMTBdID0gInh4eHh4eHh4eCI7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBidWYsIG4sICIlcyIsICIxMjMiICk7CisgICAgaWYoIHJldCA8IDAgfHwgKHNpemVfdCkgcmV0ID49IG4gKQorICAgICAgICByZXQgPSAtMTsKKworICAgIGlmKCBzdHJuY21wKCByZWZfYnVmLCBidWYsIHNpemVvZiggYnVmICkgKSAhPSAwIHx8CisgICAgICAgIHJlZl9yZXQgIT0gcmV0IHx8CisgICAgICAgIG1lbWNtcCggYnVmICsgbiwgcmVmICsgbiwgc2l6ZW9mKCBidWYgKSAtIG4gKSAhPSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHJ1bl90ZXN0X3NucHJpbnRmKCB2b2lkICkKK3sKKyAgICByZXR1cm4oIHRlc3Rfc25wcmludGYoIDAsICJ4eHh4eHh4eHgiLCAgLTEgKSAhPSAwIHx8CisgICAgICAgICAgICB0ZXN0X3NucHJpbnRmKCAxLCAiIiwgICAgICAgICAgIC0xICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggMiwgIjEiLCAgICAgICAgICAtMSApICE9IDAgfHwKKyAgICAgICAgICAgIHRlc3Rfc25wcmludGYoIDMsICIxMiIsICAgICAgICAgLTEgKSAhPSAwIHx8CisgICAgICAgICAgICB0ZXN0X3NucHJpbnRmKCA0LCAiMTIzIiwgICAgICAgICAzICkgIT0gMCB8fAorICAgICAgICAgICAgdGVzdF9zbnByaW50ZiggNSwgIjEyMyIsICAgICAgICAgMyApICE9IDAgKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAvKiBMb2NhbCBDb25maWd1cmF0aW9ucyBhbmQgb3B0aW9ucyAqLworICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfZmlsZW5hbWUgPSAiVEVTVENBU0VfRklMRU5BTUUiOworICAgIGNvbnN0IGNoYXIgKnRlc3RfZmlsZW5hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKip0ZXN0X2ZpbGVzID0gTlVMTDsKKyAgICBpbnQgdGVzdGZpbGVfY291bnQgPSAwOworICAgIGludCBvcHRpb25fdmVyYm9zZSA9IDA7CisKKyAgICAvKiBPdGhlciBMb2NhbCB2YXJpYWJsZXMgKi8KKyAgICBpbnQgYXJnX2luZGV4ID0gMTsKKyAgICBjb25zdCBjaGFyICpuZXh0X2FyZzsKKyAgICBpbnQgdGVzdGZpbGVfaW5kZXgsIHJldCwgaSwgY250OworICAgIGludCB0b3RhbF9lcnJvcnMgPSAwLCB0b3RhbF90ZXN0cyA9IDAsIHRvdGFsX3NraXBwZWQgPSAwOworICAgIEZJTEUgKmZpbGU7CisgICAgY2hhciBidWZbNTAwMF07CisgICAgY2hhciAqcGFyYW1zWzUwXTsKKyAgICB2b2lkICpwb2ludGVyOworICAgIGludCBzdGRvdXRfZmQgPSAtMTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmIFwKKyAgICAhZGVmaW5lZChURVNUX1NVSVRFX01FTU9SWV9CVUZGRVJfQUxMT0MpCisgICAgdW5zaWduZWQgY2hhciBhbGxvY19idWZbMTAwMDAwMF07CisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGFsbG9jX2J1Ziwgc2l6ZW9mKGFsbG9jX2J1ZikgKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBUaGUgQyBzdGFuZGFyZCBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IGFsbC1iaXRzLTAgaXMgdGhlIHJlcHJlc2VudGF0aW9uCisgICAgICogb2YgYSBOVUxMIHBvaW50ZXIuIFdlIGRvIGhvd2V2ZXIgdXNlIHRoYXQgaW4gb3VyIGNvZGUgZm9yIGluaXRpYWxpemluZworICAgICAqIHN0cnVjdHVyZXMsIHdoaWNoIHNob3VsZCB3b3JrIG9uIGV2ZXJ5IG1vZGVybiBwbGF0Zm9ybS4gTGV0J3MgYmUgc3VyZS4KKyAgICAgKi8KKyAgICBtZW1zZXQoICZwb2ludGVyLCAwLCBzaXplb2YoIHZvaWQgKiApICk7CisgICAgaWYoIHBvaW50ZXIgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgImFsbC1iaXRzLXplcm8gaXMgbm90IGEgTlVMTCBwb2ludGVyXG4iICk7CisgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHdlIGhhdmUgYSBzbnByaW50ZiB0aGF0IGNvcnJlY3RseSB6ZXJvLXRlcm1pbmF0ZXMKKyAgICAgKi8KKyAgICBpZiggcnVuX3Rlc3Rfc25wcmludGYoKSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAidGhlIHNucHJpbnRmIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlblxuIiApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICB3aGlsZSggYXJnX2luZGV4IDwgYXJnYykKKyAgICB7CisgICAgICAgIG5leHRfYXJnID0gYXJndlsgYXJnX2luZGV4IF07CisKKyAgICAgICAgaWYoIHN0cmNtcChuZXh0X2FyZywgIi0tdmVyYm9zZSIgKSA9PSAwIHx8CisgICAgICAgICAgICAgICAgIHN0cmNtcChuZXh0X2FyZywgIi12IiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25fdmVyYm9zZSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKG5leHRfYXJnLCAiLS1oZWxwIiApID09IDAgfHwKKyAgICAgICAgICAgICAgICAgc3RyY21wKG5leHRfYXJnLCAiLWgiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCBVU0FHRSApOworICAgICAgICAgICAgbWJlZHRsc19leGl0KCBFWElUX1NVQ0NFU1MgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE5vdCBhbiBvcHRpb24sIHRoZXJlZm9yZSB0cmVhdCBhbGwgZnVydGhlciBhcmd1bWVudHMgYXMgdGhlIGZpbGUKKyAgICAgICAgICAgICAqIGxpc3QuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHRlc3RfZmlsZXMgPSAmYXJndlsgYXJnX2luZGV4IF07CisgICAgICAgICAgICB0ZXN0ZmlsZV9jb3VudCA9IGFyZ2MgLSBhcmdfaW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBhcmdfaW5kZXgrKzsKKyAgICB9CisKKyAgICAvKiBJZiBubyBmaWxlcyB3ZXJlIHNwZWNpZmllZCwgYXNzdW1lIGEgZGVmYXVsdCAqLworICAgIGlmICggdGVzdF9maWxlcyA9PSBOVUxMIHx8IHRlc3RmaWxlX2NvdW50ID09IDAgKQorICAgIHsKKyAgICAgICAgdGVzdF9maWxlcyA9ICZkZWZhdWx0X2ZpbGVuYW1lOworICAgICAgICB0ZXN0ZmlsZV9jb3VudCA9IDE7CisgICAgfQorCisgICAgLyogTm93IGJlZ2luIHRvIGV4ZWN1dGUgdGhlIHRlc3RzIGluIHRoZSB0ZXN0ZmlsZXMgKi8KKyAgICBmb3IgKCB0ZXN0ZmlsZV9pbmRleCA9IDA7CisgICAgICAgICAgdGVzdGZpbGVfaW5kZXggPCB0ZXN0ZmlsZV9jb3VudDsKKyAgICAgICAgICB0ZXN0ZmlsZV9pbmRleCsrICkKKyAgICB7CisgICAgICAgIGludCB1bm1ldF9kZXBfY291bnQgPSAwOworICAgICAgICBjaGFyICp1bm1ldF9kZXBlbmRlbmNpZXNbMjBdOworCisgICAgICAgIHRlc3RfZmlsZW5hbWUgPSB0ZXN0X2ZpbGVzWyB0ZXN0ZmlsZV9pbmRleCBdOworCisgICAgICAgIGZpbGUgPSBmb3BlbiggdGVzdF9maWxlbmFtZSwgInIiICk7CisgICAgICAgIGlmKCBmaWxlID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZmlsZW5hbWUgKTsKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoICFmZW9mKCBmaWxlICkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggdW5tZXRfZGVwX2NvdW50ID4gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJGQVRBTDogRGVwIGNvdW50IGxhcmdlciB0aGFuIHplcm8gYXQgc3RhcnQgb2YgbG9vcFxuIiApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggTUJFRFRMU19FWElUX0ZBSUxVUkUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVubWV0X2RlcF9jb3VudCA9IDA7CisKKyAgICAgICAgICAgIGlmKCAoIHJldCA9IGdldF9saW5lKCBmaWxlLCBidWYsIHNpemVvZihidWYpICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiJXMlLjY2cyIsIHRlc3RfZXJyb3JzID8gIlxuIiA6ICIiLCBidWYgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiICIgKTsKKyAgICAgICAgICAgIGZvciggaSA9IHN0cmxlbiggYnVmICkgKyAxOyBpIDwgNjc7IGkrKyApCisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICIuIiApOworICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICIgIiApOworICAgICAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICAgICAgdG90YWxfdGVzdHMrKzsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gZ2V0X2xpbmUoIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY250ID0gcGFyc2VfYXJndW1lbnRzKCBidWYsIHN0cmxlbihidWYpLCBwYXJhbXMgKTsKKworICAgICAgICAgICAgaWYoIHN0cmNtcCggcGFyYW1zWzBdLCAiZGVwZW5kc19vbiIgKSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IoIGkgPSAxOyBpIDwgY250OyBpKysgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIGRlcF9jaGVjayggcGFyYW1zW2ldICkgIT0gREVQRU5ERU5DWV9TVVBQT1JURUQgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggMCA9PSBvcHRpb25fdmVyYm9zZSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT25seSBvbmUgY291bnQgaXMgbmVlZGVkIGlmIG5vdCB2ZXJib3NlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tZXRfZGVwX2NvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWV0X2RlcGVuZGVuY2llc1sgdW5tZXRfZGVwX2NvdW50IF0gPSBzdHJkdXAocGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAgdW5tZXRfZGVwZW5kZW5jaWVzWyB1bm1ldF9kZXBfY291bnQgXSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZGVyciwgIkZBVEFMOiBPdXQgb2YgbWVtb3J5XG4iICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCBNQkVEVExTX0VYSVRfRkFJTFVSRSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdW5tZXRfZGVwX2NvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiggKCByZXQgPSBnZXRfbGluZSggZmlsZSwgYnVmLCBzaXplb2YoYnVmKSApICkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNudCA9IHBhcnNlX2FyZ3VtZW50cyggYnVmLCBzdHJsZW4oYnVmKSwgcGFyYW1zICk7CisgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdW5tZXQgZGVwZW5kZW5jaWVzIGV4ZWN1dGUgdGhlIHRlc3QKKyAgICAgICAgICAgIGlmKCB1bm1ldF9kZXBfY291bnQgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVzdF9lcnJvcnMgPSAwOworCisjaWYgZGVmaW5lZChfX3VuaXhfXykgfHwgKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKSkKKyAgICAgICAgICAgICAgICAvKiBTdXBwcmVzcyBhbGwgb3V0cHV0IGZyb20gdGhlIGxpYnJhcnkgdW5sZXNzIHdlJ3JlIHZlcmJvc2UKKyAgICAgICAgICAgICAgICAgKiBtb2RlCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYoICFvcHRpb25fdmVyYm9zZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGRvdXRfZmQgPSByZWRpcmVjdF9vdXRwdXQoICZzdGRvdXQsICIvZGV2L251bGwiICk7CisgICAgICAgICAgICAgICAgICAgIGlmKCBzdGRvdXRfZmQgPT0gLTEgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWRpcmVjdGlvbiBoYXMgZmFpbGVkIHdpdGggbm8gc3Rkb3V0IHNvIGV4aXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoIDEgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBfX3VuaXhfXyB8fCBfX0FQUExFX18gX19NQUNIX18gKi8KKworICAgICAgICAgICAgICAgIHJldCA9IGRpc3BhdGNoX3Rlc3QoIGNudCwgcGFyYW1zICk7CisKKyNpZiBkZWZpbmVkKF9fdW5peF9fKSB8fCAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKQorICAgICAgICAgICAgICAgIGlmKCAhb3B0aW9uX3ZlcmJvc2UgJiYgcmVzdG9yZV9vdXRwdXQoICZzdGRvdXQsIHN0ZG91dF9mZCApICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWRpcmVjdGlvbiBoYXMgZmFpbGVkIHdpdGggbm8gc3Rkb3V0IHNvIGV4aXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoIDEgKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogX191bml4X18gfHwgX19BUFBMRV9fIF9fTUFDSF9fICovCisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIHVubWV0X2RlcF9jb3VudCA+IDAgfHwgcmV0ID09IERJU1BBVENIX1VOU1VQUE9SVEVEX1NVSVRFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0b3RhbF9za2lwcGVkKys7CisgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICItLS0tXG4iICk7CisKKyAgICAgICAgICAgICAgICBpZiggMSA9PSBvcHRpb25fdmVyYm9zZSAmJiByZXQgPT0gRElTUEFUQ0hfVU5TVVBQT1JURURfU1VJVEUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICIgICBUZXN0IFN1aXRlIG5vdCBlbmFibGVkIiApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCAxID09IG9wdGlvbl92ZXJib3NlICYmIHVubWV0X2RlcF9jb3VudCA+IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICIgICBVbm1ldCBkZXBlbmRlbmNpZXM6ICIgKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKCBpID0gMDsgaSA8IHVubWV0X2RlcF9jb3VudDsgaSsrICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKHN0ZG91dCwgIiVzICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWV0X2RlcGVuZGVuY2llc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHVubWV0X2RlcGVuZGVuY2llc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICJcbiIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKKworICAgICAgICAgICAgICAgIHVubWV0X2RlcF9jb3VudCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCByZXQgPT0gRElTUEFUQ0hfVEVTVF9TVUNDRVNTICYmIHRlc3RfZXJyb3JzID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiUEFTU1xuIiApOworICAgICAgICAgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCByZXQgPT0gRElTUEFUQ0hfSU5WQUxJRF9URVNUX0RBVEEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiRkFJTEVEOiBGQVRBTCBQQVJTRSBFUlJPUlxuIiApOworICAgICAgICAgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0b3RhbF9lcnJvcnMrKzsKKworICAgICAgICAgICAgaWYoICggcmV0ID0gZ2V0X2xpbmUoIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikgKSApICE9IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYoIHN0cmxlbihidWYpICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3RkZXJyLCAiU2hvdWxkIGJlIGVtcHR5ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgc3RybGVuKGJ1ZikgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZmlsZSk7CisKKyAgICAgICAgLyogSW4gY2FzZSB3ZSBlbmNvdW50ZXIgZWFybHkgZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHVubWV0X2RlcF9jb3VudDsgaSsrICkKKyAgICAgICAgICAgIGZyZWUoIHVubWV0X2RlcGVuZGVuY2llc1tpXSApOworICAgIH0KKworICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiIpOworICAgIGlmKCB0b3RhbF9lcnJvcnMgPT0gMCApCisgICAgICAgIG1iZWR0bHNfZnByaW50Ziggc3Rkb3V0LCAiUEFTU0VEIiApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19mcHJpbnRmKCBzdGRvdXQsICJGQUlMRUQiICk7CisKKyAgICBtYmVkdGxzX2ZwcmludGYoIHN0ZG91dCwgIiAoJWQgLyAlZCB0ZXN0cyAoJWQgc2tpcHBlZCkpXG4iLAorICAgICAgICAgICAgIHRvdGFsX3Rlc3RzIC0gdG90YWxfZXJyb3JzLCB0b3RhbF90ZXN0cywgdG90YWxfc2tpcHBlZCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykgJiYgXAorICAgICFkZWZpbmVkKFRFU1RfU1VJVEVfTUVNT1JZX0JVRkZFUl9BTExPQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zdGF0dXMoKTsKKyNlbmRpZgorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX191bml4X18pIHx8IChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykpCisgICAgaWYoIHN0ZG91dF9mZCAhPSAtMSApCisgICAgICAgIGNsb3NlX291dHB1dCggc3Rkb3V0ICk7CisjZW5kaWYgLyogX191bml4X18gfHwgX19BUFBMRV9fIF9fTUFDSF9fICovCisKKyAgICByZXR1cm4oIHRvdGFsX2Vycm9ycyAhPSAwICk7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuY2JjLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmNiYy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YTllZWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmNiYy5kYXRhCkBAIC0wLDAgKzEsMjE1IEBACitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxCithZXNfZW5jcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhiNTI3YTZhZWJkYWVjOWVhZWY4ZWRhMmNiNzc4M2U1IjowCisKK0FFUy0xMjgtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzIKK2Flc19lbmNyeXB0X2NiYzoiZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDNmZGFmNTNlYmJjOTg4MGMyMjg2MTdkNmE5YjU0OGIiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMworYWVzX2VuY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1Mzc4NjEwNGI5NzQ0Yjk4ZjA1MmM0NmYxYzg1MGQwYiI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM0CithZXNfZW5jcnlwdF9jYmM6ImUzN2IxYzZhYTI4NDZmNmZkYjQxM2YyMzhiMDg5ZjIzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQzYzlmN2U2MmY1ZDI4OGJiMjdhYTQwZWY4ZmUxZWE4IjowCisKK0FFUy0xMjgtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzUKK2Flc19lbmNyeXB0X2NiYzoiNmMwMDJiNjgyNDgzZTBjYWJjYzczMWMyNTNiZTU2NzQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzU4MGQxOWNmZjQ0ZjEwMTRhN2M5NjZhNjkwNTlkZTUiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNgorYWVzX2VuY3J5cHRfY2JjOiIxNDNhZThlZDY1NTVhYmE5NjExMGFiNTg4OTNhOGFlMSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4MDZkYTg2NGRkMjlkNDhkZWFmYmU3NjRmODIwMmFlZiI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM3CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2YTExOGE4NzQ1MTllNjRlOTk2Mzc5OGE1MDNmMWQzNSI6ImRjNDNiZTQwYmUwZTUzNzEyZjdlMmJmNWNhNzA3MjA5IjowCisKK0FFUy0xMjgtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzgKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImNiOWZjZWVjODEyODZjYTNlOTg5YmQ5NzliMGNiMjg0IjoiOTJiZWVkYWIxODk1YTk0ZmFhNjliNjMyZTVjYzQ3Y2UiOjAKKworQUVTLTEyOC1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjOQorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYjI2YWViMTg3NGU0N2NhODM1OGZmMjIzNzhmMDkxNDQiOiI0NTkyNjRmNDc5OGY2YTc4YmFjYjg5YzE1ZWQzZDYwMSI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAiOiI5MDY4NGEyYWM1NWZlMWVjMmI4ZWJkNTYyMjUyMGI3MyI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAiOiI3NDcyZjlhNzk4ODYwN2NhNzk3MDc3OTU5OTEwMzVlNiI6MAorCitBRVMtMTI4LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAiOiI1NmFmZjA4OTg3OGJmMzM1MmY4ZGYxNzJhM2FlNDdkOCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxCithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyM2Y3MTA4NDJiOWJiOWMzMmYyNjY0OGM3ODY4MDdjYSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzIKK2Flc19kZWNyeXB0X2NiYzoiZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ0YTk4YmYxMWUxNjNmNjMyYzQ3ZWM2YTQ5NjgzYTg5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMworYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMGYxOGFmZjk0Mjc0Njk2ZDliNjE4NDhiZDUwYWM1ZTUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM0CithZXNfZGVjcnlwdF9jYmM6ImUyMzRjZGNhMjYwNmI4MWYyOTQwOGQ1ZjZkYTIxMjA2IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmY2MGE0NzQwMDg2YjNiOWM1NjE5NWI5OGQ5MWE3YiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzUKK2Flc19kZWNyeXB0X2NiYzoiMTMyMzdjNDkwNzRhM2RhMDc4ZGMxZDgyOGJiNzhjNmYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjgxNDZhMDhlMjM1N2YwY2FhMzBjYThjOTRkMWEwNTQ0IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNgorYWVzX2RlY3J5cHRfY2JjOiIzMDcxYTJhNDhmZTZjYmQwNGYxYTEyOTA5OGUzMDhmOCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGI5OGUwNmQzNTZkZWIwN2ViYjgyNGU1NzEzZjdiZTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM3CithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMzM2NzYzZTk2NmQ5MjU5NWE1NjdjYzljZTUzN2Y1ZSI6ImYzNDQ4MWVjM2NjNjI3YmFjZDVkYzNmYjA4ZjI3M2U2IjowCisKK0FFUy0xMjgtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzgKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE5YTE2MzFiZjQ5OTY5NTRlYmMwOTM5NTdiMjM0NTg5IjoiOTc5OGM0NjQwYmFkNzVjN2MzMjI3ZGI5MTAxNzRlNzIiOjAKKworQUVTLTEyOC1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjOQorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmY0ZjgzOTFhNmE0MGNhNWIyNWQyM2JlZGQ0NGE1OTciOiI5NmFiNWMyZmY2MTJkOWRmYWFlOGMzMWYzMGM0MjE2OCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjliMGZkYTBjNGE4OThmNWI5ZTZmNjYxYzRjZTRkMDciOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGFkZTg5NTkxMzY4NWM2N2M1MjY5ZjhhYWU0Mjk4M2UiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCI6MAorCitBRVMtMTI4LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzliZGU2N2Q1YzhlZDhhOGIxYzM3ZWI4ZmE5ZjVhYzAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxCithZXNfZW5jcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkZGI1MDVlNmNjMTM4NGNiYWVjMWRmOTBiODBiZWIyMCI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICMyCithZXNfZW5jcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1Njc0YTNiZWQyN2JmNGJkMzYyMmY5ZjVmZTIwODMwNiI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICMzCithZXNfZW5jcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiNjg3ZjI2YTg5Y2ZiZmJiOGU1ZWVhYzU0MDU1MzE1ZSI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICM0CithZXNfZW5jcnlwdF9jYmM6IjI1YTM5ZGJmZDgwMzRmNzFhODFmOWNlYjU1MDI2ZTQwMzdmOGY2YWEzMGFiNDRjZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzNjA4YzM0NDg2OGU5NDU1NWQyM2ExMjBmOGE1NTAyZCI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICM1CithZXNfZW5jcnlwdF9jYmM6ImUwOGMxNTQxMTc3NGVjNGE5MDhiNjRlYWRjNmFjNDE5OWM3Y2Q0NTNmM2FhZWY1MyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3N2RhMjAyMTkzNWI4NDBiN2Y1ZGNjMzkxMzJkYTllNSI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICM2CithZXNfZW5jcnlwdF9jYmM6IjNiMzc1YTFmZjdlOGQ0NDQwOTY5NmU2MzI2ZWM5ZGVjODYxMzhlMmFlMDEwYjk4MCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzYjdjMjRmODI1ZTNiZjk4NzNjOWYxNGQzOWEwZTZmNCI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICM3CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNTE3MTk3ODNkMzE4NWE1MzViZDc1YWRjNjUwNzFjZTEiOiI0ZjM1NDU5MmZmN2M4ODQ3ZDJkMDg3MGNhOTQ4MWI3YyI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICM4CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMjZhYTQ5ZGNmZTc2MjlhODkwMWE2OWE5OTE0ZTZkZmQiOiJkNWUwOGJmOWExODJlODU3Y2Y0MGIzYTM2ZWUyNDhjYyI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICM5CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTQxYTQ3NzMwNTgyMjRlMWVmNjZkMTBlMGE2ZWU3ODIiOiIwNjdjZDlkMzc0OTIwNzc5MTg0MTU2MjUwN2ZhOTYyNiI6MAorCitBRVMtMTkyLUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDMwZDdlNWI2NGYzODBhN2U0ZWE1Mzg3YjVjZDdmNDkiOjAKKworQUVTLTE5Mi1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTEKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjBkYzlhMjYxMDAzNzAwOWI2OThmMTFiYjdlODZjODNlIjowCisKK0FFUy0xOTItQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzEyCithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDQ2NjEyYzc2NmQxODQwYzIyNjM2NGYxZmE3ZWQ3MiI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTAyZDg4ZDEzZWFlNTIwODlhYmQ2MTQzY2ZlMzk0ZTkiOiJmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICMyCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZDQ5YmNlYjNiODIzZmVkZDYwMmMzMDUzNDU3MzRiZDIiOiJmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICMzCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzA3YjFkYmIwZmZhNDBlZjdkOTVkZWY0MjEyMzNmYWUiOiJmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICM0CithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGRmZDk5OWJlNWQwY2ZhMzU3MzJjMGRkYzg4ZmY1YTUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICM1CithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDI2NDdjNzZhMzAwYzMxNzNiODQxNDg3ZWIyYmFlOWYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICM2CithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTcyZGY4YjAyZjA0YjUzYWRhYjAyOGI0ZTAxYWNkODciOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICM3CithZXNfZGVjcnlwdF9jYmM6ImIzYWQ1Y2VhMWRkZGMyMTRjYTk2OWFjMzVmMzdkYWUxYTlhOWQxNTI4Zjg5YmIzNSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiM2NmNWUxZDIxYTE3OTU2ZDFkZmZhZDZhN2M0MWM2NTkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICM4CithZXNfZGVjcnlwdF9jYmM6IjQ1ODk5MzY3YzMxMzI4NDk3NjMwNzNjNDM1YTkyODhhNzY2YzhiOWVjMjMwODUxNiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjlmZDEyZTg1MDVmOGRlZDJmZGNiMTk3YTEyMWIzNjIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICM5CithZXNfZGVjcnlwdF9jYmM6ImVjMjUwZTA0YzM5MDNmNjAyNjQ3Yjg1YTQwMWExYWU3Y2EyZjAyZjY3ZmE0MjUzZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGFhNTg0ZTJjYzRkMTc0MTdhOTdjYjlhMjhiYTI5YzgiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImM5YjgxMzVmZjFiNWFkYzQxM2RmZDA1M2IyMWJkOTZkIjoiOWMyZDg4NDJlNWY0OGY1NzY0ODIwNWQzOWEyMzlhZjEiOjAKKworQUVTLTE5Mi1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTEKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0YTM2NTBjMzM3MWNlMmViMzVlMzg5YTE3MTQyNzQ0MCI6ImJmZjUyNTEwMDk1ZjUxOGVjY2E2MGFmNDIwNTQ0NGJiIjowCisKK0FFUy0xOTItQ0JDIERlY3J5cHQgTklTVCBLQVQgIzEyCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGYzNTQ1OTJmZjdjODg0N2QyZDA4NzBjYTk0ODFiN2MiOiI1MTcxOTc4M2QzMTg1YTUzNWJkNzVhZGM2NTA3MWNlMSI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxCithZXNfZW5jcnlwdF9jYmM6IjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZTM1YTZkY2IxOWIyMDFhMDFlYmNmYThhYTIyYjU3NTkiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMgorYWVzX2VuY3J5cHRfY2JjOiJjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImIyOTE2OWNkY2YyZDgzZTgzODEyNWExMmVlNmFhNDAwIjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzMKK2Flc19lbmNyeXB0X2NiYzoiZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkOGYzYTcyZmMzY2RmNzRkZmFmNmMzZTZiOTdiMmZhNiI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM0CithZXNfZW5jcnlwdF9jYmM6ImRjMGViYTFmMjIzMmE3ODc5ZGVkMzRlZDg0MjhlZWI4NzY5YjA1NmJiYWY4YWQ3N2NiNjVjMzU0MTQzMGI0Y2YiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmM2YWVjOTA2MzIzNDgwMDA1YzU4ZTdlMWFiMDA0YWQiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjNQorYWVzX2VuY3J5cHRfY2JjOiJmOGJlOWJhNjE1YzVhOTUyY2FiYmNhMjRmNjhmODU5MzAzOTYyNGQ1MjRjODE2YWNkYTJjOTE4M2JkOTE3Y2I5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImEzOTQ0Yjk1Y2EwYjUyMDQzNTg0ZWYwMjE1MTkyNmE4IjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzYKK2Flc19lbmNyeXB0X2NiYzoiNzk3ZjhiM2QxNzZkYWM1YjdlMzRhMmQ1MzljNGVmMzY3YTE2Zjg2MzVmNjI2NDczNzU5MWM1YzA3YmY1N2EzZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhNzQyODlmZTczYTRjMTIzY2ExODllYTFlMWI0OWFkNSI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICM3CithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjOAorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4YTU2MDc2OWQ2MDU4NjhhZDgwZDgxOWJkYmEwMzc3MSI6IjM4ZjJjN2FlMTA2MTI0MTVkMjdjYTE5MGQyN2RhOGI0IjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzkKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTFmYmVmMmQxNWE5NzgxNjA2MGJlZTFmZWFhNDlhZmUiOiIxYmM3MDRmMWJjZTEzNWNlYjgxMDM0MWIyMTZkN2FiZSI6MAorCitBRVMtMjU2LUNCQyBFbmNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZjgwMDAwMDAwMDAwMDAwMDAwMCI6IjBkOWFjNzU2ZWIyOTc2OTVlZWQ0ZDM4MmViMTI2ZDI2IjowCisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgTklTVCBLQVQgIzExCithZXNfZW5jcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwIjoiNTZlZGU5ZGRhM2Y2ZjE0MWJmZjE3NTdmYTY4OWMzZTEiOjAKKworQUVTLTI1Ni1DQkMgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAiOiI3NjhmNTIwZWZlMGYyM2U2MWQzZWM4YWQ5Y2U5MTc3NCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ5YWY2YjM3MjEzNWFjZWYxMDEzMmU1NDhmMjE3YjE3IjoiZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMgorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4YmNkNDBmOTRlYmI2M2I5Zjc5MDk2NzZlNjY3ZjFlNyI6ImZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzMKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmUxY2ZmYjgzZjQ1ZGNmYjM4YjI5YmU0MzhkYmQzYWIiOiJmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM0CithZXNfZGVjcnlwdF9jYmM6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImNjYTdjMzA4NmY1Zjk1MTFiMzEyMzNkYTdjYWI5MTYwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjNQorYWVzX2RlY3J5cHRfY2JjOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1YjQwZmY0ZWM5YmU1MzZiYTIzMDM1ZmE0ZjA2MDY0YyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzYKK2Flc19kZWNyeXB0X2NiYzoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjBlYjVhZjg0MTZiMjU3MTQ5MzcyMTk0ZThiODg3NDkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICM3CithZXNfZGVjcnlwdF9jYmM6IjkwMTQzYWUyMGNkNzhjNWQ4ZWJkZDZjYjlkYzE3NjI0MjdhOTZjNzhjNjM5YmNjYzQxYTYxNDI0NTY0ZWFmZTEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc5OGM3YzAwNWRlZTQzMmIyYzhlYTVkZmEzODFlY2MzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjOAorYWVzX2RlY3J5cHRfY2JjOiJiN2E1Nzk0ZDUyNzM3NDc1ZDUzZDVhMzc3MjAwODQ5YmUwMjYwYTY3YTJiMjJjZWQ4YmJlZjEyODgyMjcwZDA3IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MzdjMzFkYzI1OTFhMDc2MzZmNjQ2YjcyZGFhYmJlNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzkKK2Flc19kZWNyeXB0X2NiYzoiZmNhMDJmM2Q1MDExY2ZjNWMxZTIzMTY1ZDQxM2EwNDlkNDUyNmE5OTE4Mjc0MjRkODk2ZmUzNDM1ZTBiZjY4ZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTc5YTQ5YzcxMjE1NGJiZmZiZTZlN2E4NGExOGUyMjAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1YzlkODQ0ZWQ0NmY5ODg1MDg1ZTVkNmE0Zjk0YzdkNyI6IjAxNDczMGY4MGFjNjI1ZmU4NGYwMjZjNjBiZmQ1NDdkIjowCisKK0FFUy0yNTYtQ0JDIERlY3J5cHQgTklTVCBLQVQgIzExCithZXNfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE5ZmY3NWJkN2NmNjYxM2QzNzMxYzc3YzNiNmQwYzA0IjoiMGIyNGFmMzYxOTNjZTQ2NjVmMjgyNWQ3YjQ3NDljOTgiOjAKKworQUVTLTI1Ni1DQkMgRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOiI3NjFjMWZlNDFhMThhY2YyMGQyNDE2NTA2MTFkOTBmMSI6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5jZmIuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuY2ZiLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0OTUzZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuY2ZiLmRhdGEKQEAgLTAsMCArMSw0NjcgQEAKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTcwMDE0ZDYzNGUyYjc2NTA3NzdlOGU4NGQwM2NjZDgiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjE3ZTc5YWVkMGRiN2UyNzllOTU1YjVmNDkzODc1YTciCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOWVkNWE3NTEzNmE5NDBkMDk2M2RhMzc5ZGI0YWYyNmEiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiNjRjZjljN2FiYzUwYjg4OGFmNjVmNDlkNTIxOTQ0YjIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjdlZmM4OWQ1ZGJhNTc4MTA0MDE2Y2U1YWQ2NTljMDUiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiNDdkNjc0MmVlZmNjMDQ2NWRjOTYzNTVlODUxYjY0ZDkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDMwNjE5NGY2NjZkMTgzNjI0YWEyMzBhOGIyNjRhZTciCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiM2ViMzk3OTA2NzhjNTZiZWUzNGJiY2RlY2NmNmNkYjUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiODU4MDc1ZDUzNmQ3OWNjZWU1NzFmN2Q3MjA0YjFmNjciCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2YTExOGE4NzQ1MTllNjRlOTk2Mzc5OGE1MDNmMWQzNSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGM0M2JlNDBiZTBlNTM3MTJmN2UyYmY1Y2E3MDcyMDkiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjYjlmY2VlYzgxMjg2Y2EzZTk4OWJkOTc5YjBjYjI4NCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTJiZWVkYWIxODk1YTk0ZmFhNjliNjMyZTVjYzQ3Y2UiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiMjZhZWIxODc0ZTQ3Y2E4MzU4ZmYyMjM3OGYwOTE0NCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDU5MjY0ZjQ3OThmNmE3OGJhY2I4OWMxNWVkM2Q2MDEiCisKK0FFUy0xMjgtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImY5YjBmZGEwYzRhODk4ZjViOWU2ZjY2MWM0Y2U0ZDA3IgorCitBRVMtMTI4LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4YWRlODk1OTEzNjg1YzY3YzUyNjlmOGFhZTQyOTgzZSIKKworQUVTLTEyOC1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzliZGU2N2Q1YzhlZDhhOGIxYzM3ZWI4ZmE5ZjVhYzAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjExMTRiYzIwMjgwMDliOTIzZjBiMDE5MTVjZTVlN2M0IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjljMjg1MjRhMTZhMWUxYzE0NTI5NzFjYWE4ZDEzNDc2IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImVkNjJlMTYzNjM2MzgzNjBmZGQ2YWQ2MjExMjc5NGYwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMzA3MWEyYTQ4ZmU2Y2JkMDRmMWExMjkwOThlMzA4ZjgiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRiOThlMDZkMzU2ZGViMDdlYmI4MjRlNTcxM2Y3YmUzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiOTBmNDJlYzBmNjgzODVmMmZmYzVkZmMwM2E2NTRkY2UiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjdhMjBhNTNkNDYwZmM5Y2UwNDIzYTdhMDc2NGM2Y2YyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmViZDlhMjRkOGI2NWMxYzc4N2Q1MGE0ZWQzNjE5YTkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImY0YTcwZDhhZjg3N2Y5YjAyYjRjNDBkZjU3ZDQ1YjE3IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmMzQ0ODFlYzNjYzYyN2JhY2Q1ZGMzZmIwOGYyNzNlNiI6IjAzMzY3NjNlOTY2ZDkyNTk1YTU2N2NjOWNlNTM3ZjVlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5Nzk4YzQ2NDBiYWQ3NWM3YzMyMjdkYjkxMDE3NGU3MiI6ImE5YTE2MzFiZjQ5OTY5NTRlYmMwOTM5NTdiMjM0NTg5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5NmFiNWMyZmY2MTJkOWRmYWFlOGMzMWYzMGM0MjE2OCI6ImZmNGY4MzkxYTZhNDBjYTViMjVkMjNiZWRkNDRhNTk3IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAiOiJmODA3YzNlNzk4NWZlMGY1YTUwZTJjZGIyNWM1MTA5ZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTI4LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwIjoiNDFmOTkyYTg1NmZiMjc4YjM4OWE2MmY1ZDI3NGQ3ZTkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTEyOC1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMCI6IjEwZDNlZDdhNmZlMTVhYjRkOTFhY2JjN2QwNzY3YWIxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhkZmQ5OTliZTVkMGNmYTM1NzMyYzBkZGM4OGZmNWE1IgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMjY0N2M3NmEzMDBjMzE3M2I4NDE0ODdlYjJiYWU5ZiIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiJmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTcyZGY4YjAyZjA0YjUzYWRhYjAyOGI0ZTAxYWNkODciCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZDE4NGMzNmNmMGRkZGZlYzM5ZTY1NDE5NTAwNjAyMjIzNzg3MWE0N2MzM2QzMTk4IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjJlMTlmYjYwYTNlMWRlMDE2NmY0ODNjOTc4MjRhOTc4IgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjRjNjk5NGZmYTlkY2RjODA1YjYwYzJjMDA5NTMzNGM0MmQ5NWE4ZmMwY2E1YjA4MCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI3NjU2NzA5NTM4ZGQ1ZmVjNDFlMGNlNmEwZjhlMjA3ZCIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiJjODhmNWIwMGE0ZWY5YTY4NDBlMmFjYWYzM2YwMGEzYmRjNGUyNTg5NTMwM2ZhNzIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYTY3Y2YzMzNiMzE0ZDQxMWQzYzBhZTZlMWNmY2Q4ZjUiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOWMyZDg4NDJlNWY0OGY1NzY0ODIwNWQzOWEyMzlhZjEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImM5YjgxMzVmZjFiNWFkYzQxM2RmZDA1M2IyMWJkOTZkIgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM4CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImJmZjUyNTEwMDk1ZjUxOGVjY2E2MGFmNDIwNTQ0NGJiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0YTM2NTBjMzM3MWNlMmViMzVlMzg5YTE3MTQyNzQ0MCIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI1MTcxOTc4M2QzMTg1YTUzNWJkNzVhZGM2NTA3MWNlMSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGYzNTQ1OTJmZjdjODg0N2QyZDA4NzBjYTk0ODFiN2MiCisKK0FFUy0xOTItQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmMzRlNGE2MzI0ZWE0YTVjMzlhNjYxYzhmZTVhZGE4ZiIKKworQUVTLTE5Mi1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjA4ODJhMTZmNDQwODhkNDI0NDdhMjlhYzA5MGVjMTdlIgorCitBRVMtMTkyLUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiM2EzYzE1YmZjMTFhOTUzN2MxMzA2ODcwMDRlMTM2ZWUiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MDEzNjcwMzM3NGY2NGU4NjBiNDhjZTMxZjkzMDcxNiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGQ2M2EyNjliMTRkNTA2Y2NjNDAxYWI4YTlmMWI1OTEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImQzMTdmODFkYzZhYTQ1NGFlZTRiZDRhNWE1Y2ZmNGJkIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiOThjNmI4ZTAxZTM3OWZiZDE0ZTYxYWY2YWY4OTE1OTY1ODM1NjVmMmEyN2Q1OWU5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIxOWM4MGVjNGE2ZGViN2U1ZWQxMDMzZGRhOTMzNDk4ZiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImIzYWQ1Y2VhMWRkZGMyMTRjYTk2OWFjMzVmMzdkYWUxYTlhOWQxNTI4Zjg5YmIzNSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiM2NmNWUxZDIxYTE3OTU2ZDFkZmZhZDZhN2M0MWM2NTkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiI0NTg5OTM2N2MzMTMyODQ5NzYzMDczYzQzNWE5Mjg4YTc2NmM4YjllYzIzMDg1MTYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjY5ZmQxMmU4NTA1ZjhkZWQyZmRjYjE5N2ExMjFiMzYyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWIwNzdhNmFmNGI3Zjk4MjI5ZGU3ODZkNzUxNmI2MzkiOiIyNzVjZmMwNDEzZDhjY2I3MDUxM2MzODU5YjFkMGY3MiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM4CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjljMmQ4ODQyZTVmNDhmNTc2NDgyMDVkMzlhMjM5YWYxIjoiYzliODEzNWZmMWI1YWRjNDEzZGZkMDUzYjIxYmQ5NmQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiZmY1MjUxMDA5NWY1MThlY2NhNjBhZjQyMDU0NDRiYiI6IjRhMzY1MGMzMzcxY2UyZWIzNWUzODlhMTcxNDI3NDQwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xOTItQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwIjoiNTRkNjMyZDAzYWJhMGJkMGY5MTg3N2ViZGQ0ZDA5Y2IiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTE5Mi1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAiOiJkMzQyN2JlN2U0ZDI3Y2Q1NGY1ZmUzN2IwM2NmMDg5NyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMTkyLUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMCI6ImIyMDk5Nzk1ZTg4Y2MxNThmZDc1ZWExMzNkN2U3ZmJlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiYmQxMDk3YTYyNDMzZjc5NDQ5ZmE5N2Q0ZWU4MGRiZiIKKworQUVTLTI1Ni1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiJmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjA3MDU4ZTQwOGY1Yjk5YjBlMGYwNjFhMTc2MWI1YjNiIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6ImZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNWZkMWYxM2ZhMGYzMWUzN2ZhYmRlMzI4Zjg5NGVhYzIiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMTM0MjhiNWU0YzAwNWUwNjM2ZGQzMzg0MDVkMTczYWIxMzVkZWMyYTI1YzIyYzVkZjA3MjJkNjlkY2M0Mzg4NyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2NDlhNzE1NDUzNzhjNzgzZTM2OGM5YWRlNzExNGY2YyIKKworQUVTLTI1Ni1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwN2ViMDNhMDhkMjkxZDFiMDc0MDhiZjM1MTJhYjQwYzkxMDk3YWM3NzQ2MWFhZDRiYjg1OTY0N2Y3NGYwMGVlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ3Y2IwMzBkYTJhYjA1MWRmYzZjNGJmNjkxMGQxMmJiIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM2CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjkwMTQzYWUyMGNkNzhjNWQ4ZWJkZDZjYjlkYzE3NjI0MjdhOTZjNzhjNjM5YmNjYzQxYTYxNDI0NTY0ZWFmZTEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzk4YzdjMDA1ZGVlNDMyYjJjOGVhNWRmYTM4MWVjYzMiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19lbmNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjBiMjRhZjM2MTkzY2U0NjY1ZjI4MjVkN2I0NzQ5Yzk4IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhOWZmNzViZDdjZjY2MTNkMzczMWM3N2MzYjZkMGMwNCIKKworQUVTLTI1Ni1DRkIxMjggRW5jcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2VuY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzYxYzFmZTQxYTE4YWNmMjBkMjQxNjUwNjExZDkwZjEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NDIxIgorCitBRVMtMjU2LUNGQjEyOCBFbmNyeXB0IE5JU1QgS0FUICM5CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4YTU2MDc2OWQ2MDU4NjhhZDgwZDgxOWJkYmEwMzc3MSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMzhmMmM3YWUxMDYxMjQxNWQyN2NhMTkwZDI3ZGE4YjQiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMmJlMWZhZTUwNDhhMjU1ODJhNjc5Y2ExMDkwNWViODAiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGE4NmYyOTJjNmY0MWVhMzRmYjIwNjhkZjc1ZWNjMjkiCisKK0FFUy0yNTYtQ0ZCMTI4IEVuY3J5cHQgTklTVCBLQVQgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZW5jcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMjIwZGYxOWY4NWQ2OWIxYjU2MmZhNjlhM2M1YmVjYTUiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiZmZmZmZmZmZmZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiYmU2NmNmZWEyZmVjZDZiZjBlYzdiNDM1MmM5OWJjYWEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTI1Ni1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkZjMxMTQ0Zjg3YTJlZjUyM2ZhY2RjZjIxYTQyNzgwNCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImI1YmIwZjU2MjlmYjZhYWU1ZTE4MzlhM2MzNjI1ZDYzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMWQ4NWExODFiNTRjZGU1MWYwZTA5ODA5NWIyOTYyZmRjOTNiNTFmZTliODg2MDJiM2Y1NDEzMGJmNzZhNWJkOSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNTMxYzJjMzgzNDQ1NzhiODRkNTBiM2M5MTdiYmI2ZTEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTI1Ni1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiJkYzBlYmExZjIyMzJhNzg3OWRlZDM0ZWQ4NDI4ZWViODc2OWIwNTZiYmFmOGFkNzdjYjY1YzM1NDE0MzBiNGNmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmYzZhZWM5MDYzMjM0ODAwMDVjNThlN2UxYWIwMDRhZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM2CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6ImY4YmU5YmE2MTVjNWE5NTJjYWJiY2EyNGY2OGY4NTkzMDM5NjI0ZDUyNGM4MTZhY2RhMmM5MTgzYmQ5MTdjYjkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImEzOTQ0Yjk1Y2EwYjUyMDQzNTg0ZWYwMjE1MTkyNmE4IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzcKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2Flc19kZWNyeXB0X2NmYjEyODoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKworQUVTLTI1Ni1DRkIxMjggRGVjcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorYWVzX2RlY3J5cHRfY2ZiMTI4OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOiIzOGYyYzdhZTEwNjEyNDE1ZDI3Y2ExOTBkMjdkYThiNCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitBRVMtMjU2LUNGQjEyOCBEZWNyeXB0IE5JU1QgS0FUICM5CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI5MWZiZWYyZDE1YTk3ODE2MDYwYmVlMWZlYWE0OWFmZSI6IjFiYzcwNGYxYmNlMTM1Y2ViODEwMzQxYjIxNmQ3YWJlIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjliODBlZWZiN2ViZTJkMmIxNjI0N2FhMGVmYzcyZjVkIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjdmMmM1ZWNlMDdhOThkOGJlZTEzYzUxMTc3Mzk1ZmY3IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0yNTYtQ0ZCMTI4IERlY3J5cHQgTklTVCBLQVQgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCithZXNfZGVjcnlwdF9jZmIxMjg6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc4MThkODAwZGNmNmY0YmUxZTBlOTRmNDAzZDFlNGMyIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICMwCithZXNfZW5jcnlwdF9jZmI4OiJjNTdkNjk5ZDg5ZGY3Y2ZiZWY3MWMwODBhNmIxMGFjMyI6ImZjYjJiYzRjMDA2Yjg3NDgzOTc4Nzk2YTJhZTJjNDJlIjoiNjEiOiIyNCIKKworQUVTLTEyOC1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzEKK2Flc19lbmNyeXB0X2NmYjg6IjBkOGYzZGMzZWRlZTYwZGI2NThiYjk3ZmFmNDZmYmEzIjoiZTQ4MWZkYzQyZTYwNmI5NmEzODNjMGExYTU1MjBlYmIiOiJhYWNkIjoiNTA2NiIKKworQUVTLTEyOC1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzIKK2Flc19lbmNyeXB0X2NmYjg6ImM4ZmU5YmY3N2I5MzBmNDZkMjA3OGI4YzBlNjU3Y2Q0IjoiZjQ3NWM2NDk5MWIyMGVhZWUxODNhMjI2MjllMjFlMjIiOiJjOTA2MzUiOiJkMjc2OTEiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICMzCithZXNfZW5jcnlwdF9jZmI4OiIyODBjZjgxYWY1Y2M3ZTczNjM1NzljMWRhMDMzOTBlNiI6IjVkNmNmNDcyMmQwZTIxZjFkOWNlZDUzYTBlMzZjMzQyIjoiYjJhMjJjZWQiOiI3M2YzYWViZiIKKworQUVTLTEyOC1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzQKK2Flc19lbmNyeXB0X2NmYjg6IjVkNWU3ZjIwZTBhNjZkM2UwOWUwZTVhOTkxMmY4YTQ2IjoiMDUyZDdlYTBhZDFmMjk1NmEyM2IyN2FmZTFkODdiNmIiOiJiODRhOTBmYzZkIjoiMWE5YTYxYzMwNyIKKworQUVTLTEyOC1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzUKK2Flc19lbmNyeXB0X2NmYjg6ImVjODlmYjM0ODc4N2NmOTAyY2E5NzNjNDcwODE0MzhkIjoiNTI4ZmU5NWM3MTFiZDEzZjM3YmM1MmNjOWU5NmQ0NWMiOiIxNDI1MzQ3MmU5OWQiOiJjZmMyNDdlMzNhM2IiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM2CithZXNfZW5jcnlwdF9jZmI4OiI2NjA3OTg3YzM1NDgwOWNiYTgxODYzOWRjZDE4NTE0NyI6IjU1MmMxMDFhMGI3YzBjYTE0M2FmMjU4NDUzOTM3ZmEzIjoiOWIxYTVhMTM2OTE2NmUiOiJiN2FiMmE0Y2M3MTkwNCIKKworQUVTLTEyOC1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzcKK2Flc19lbmNyeXB0X2NmYjg6ImMwMjhlNmJmMmI3NDlmZmE4Njc1OWYyZjg0ZTkzY2IwIjoiMjg4Yzc1MmQ5ZmFjY2YzNjdlNWQwY2NhMWZhNmVjM2IiOiIzMjQwMTU4NzhjZGM4MmJmIjoiODczMjUwMTUyZmM2YTViYiIKKworQUVTLTEyOC1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzgKK2Flc19lbmNyeXB0X2NmYjg6ImQwMWRhOTVkMmMyYTYxZGEwNmVhNzhjZmJhNTljYzMwIjoiZjlhMzkzYWQ5MDgxNGZhZjI2MmUzYTViMWQ5NzU5MmUiOiI1N2MxYTMwZTQ4MTY2ZDk2NDAiOiJlOWE4YzNiNzc2ZWRkMzllM2QiCisKK0FFUy0xMjgtQ0ZCOCBFbmNyeXB0IE5JU1QgTU1UICM5CithZXNfZW5jcnlwdF9jZmI4OiIzYTZmOTE1OTI2M2ZhNmNlZjJhMDc1Y2FmYWNlNTgxNyI6IjBmYzIzNjYyYjdkYmY3MzgyN2YwYzdkZTMyMWNhMzZlIjoiODdlZmViOGQ1NTllZDMzNjc3MjgiOiI4ZTljNTA0MjU2MTRkNTQwY2UxMSIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzAKK2Flc19kZWNyeXB0X2NmYjg6IjAzZWRmZTA4MjU1MGJkNWFjOGRkZjY0ZjQyYTA1NDdmIjoiNTJhY2Q4ZGFiNjJjOTgxZGEwOGU1MTkzOWNjMDhkYWIiOiIyMSI6IjA5IgorCitBRVMtMTI4LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjMQorYWVzX2RlY3J5cHRfY2ZiODoiMzhjZjc3Njc1MDE2MmVkYzYzYzNiNWRiZTMxMWFiOWYiOiI5OGZiYmQyODg4NzJjNDBmMTkyNmIxNmVjYWVjMTU2MSI6IjQ4NzgiOiJlYjI0IgorCitBRVMtMTI4LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjMgorYWVzX2RlY3J5cHRfY2ZiODoiYzkwNTNjODdjM2U1NmJjNWU1MmJkMzFmNjU0NWY5OTEiOiJiOGY5NjQwZDA5MjNkYTEzZmU2ZWI4N2IwMWYwY2ZhMCI6ImFlYjZkMiI6IjkxMDk0OSIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzMKK2Flc19kZWNyeXB0X2NmYjg6ImU5Njc3MWY1ZjIwYTg5ZWU4NzEyNjFkMmQxOGUxZTQ2IjoiNmU4NjQwM2UzMzM5NjY1NTkwN2FlMDZlZjE5MjI2MmYiOiI4M2NhYjJmMyI6IjNiN2YxZjFjIgorCitBRVMtMTI4LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNAorYWVzX2RlY3J5cHRfY2ZiODoiOTJhZDEzZWNiNjBiZGUxYmIzYjM0Y2UwNzg2NzY3MmIiOiJmOTVhNDA2MGI4ZjgwZTNmODM5ZDRjM2NhMzNkYWQ5NCI6IjQ5ZjczZTY1MmIiOiIxN2I5YjllMTZkIgorCitBRVMtMTI4LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNQorYWVzX2RlY3J5cHRfY2ZiODoiZWI1N2I4ZGQwNzZlN2JiYjMzZDRiZmM0ZDdlY2IyN2UiOiI1MTEzNTk5N2EwNjdkY2QyZTAxNmM1NzEzNGM1ZmE1MiI6ImIwZWFjYmYyY2E0NiI6ImNhOTg5ZmE0ZTgxOCIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzYKK2Flc19kZWNyeXB0X2NmYjg6IjcwYWJjNDhiYjFiZTQ5MDE4M2YwZmUzZGY1NjE5NWZmIjoiZTI1MWYxNzkxNzRiNzFlZTFlNDg4YWIzZGQyMDA0ODMiOiIwOGZiZWY5YjJhMzY5YSI6IjU0MDVkYTExODZiN2UwIgorCitBRVMtMTI4LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNworYWVzX2RlY3J5cHRfY2ZiODoiMTI3M2I4ZTBlZWUxYTFjYTgyNzA1OWI0ZDBhM2E1NWQiOiI2MjJjYWI0OTA5MmQwMjZmNTU0ZGQ5OGE2NDQxZGMyNiI6ImIzY2I5ZDg4OTI0MjNhZWIiOiJkNDk3ZGY3M2FmYjk3ODdjIgorCitBRVMtMTI4LUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjOAorYWVzX2RlY3J5cHRfY2ZiODoiNDk0MzdlMDZiNmZhYTVmMjBmZDk4YmY3MWY4ZmY1NTQiOiI2M2M4MThlMGQzY2I1YjcwNTRlZjNlMWU4N2RmMGUxMiI6IjAxOTkyYTk4NjI3OWMzNjg1ZSI6ImYyMDNiY2Q0MDJiNjU5MTlkYSIKKworQUVTLTEyOC1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzkKK2Flc19kZWNyeXB0X2NmYjg6IjYzOTljMWRjMDY4YmEzNTA5ODQ1NjI4ZmE5ZWQxYTk2IjoiMTE1N2MyNzY2Yzg2Yjc1NGRmNDg1YmU5ZGQ1ODUxZGYiOiJjOWMyODRlOWFiYmZlNmZiMTFmZSI6ImZlZmY0ZTJlMjQ1OGFkZGYyYTU0IgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMAorYWVzX2VuY3J5cHRfY2ZiODoiMzJhMWIwZTNkYTM2OGRiNTYzZDczMTZiOTc3OWQzMzI3ZTUzZDlhNmQyODdlZDk3IjoiM2RkMGU3ZTIxZjA5ZDU4NDJmM2E2OTlkYTliNTczNDYiOiI1NCI6IjZkIgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMQorYWVzX2VuY3J5cHRfY2ZiODoiYTYzODFkY2MxOGRkODVkNzcyOWMxZGNlOTA3NDNiYmUxZGY1ODBkODU3ZjViOWM0IjoiYzBhYzUwMWZhZDdmNGExNDY1ZGFmMzJlMThmYzFhNGYiOiJhNDU2IjoiOGZiNiIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzIKK2Flc19lbmNyeXB0X2NmYjg6ImQwOGRiZWU0NzMyYzdmZmM1NDRjMTY5NWIyMDFkMzBlNzk1MDM3MzI1ZWYwYWExOCI6ImExZTM5YWVlYjk3MmE4ZDcwYWEwZmM3ZDZmYWM2ZWFjIjoiZmQxMTVkIjoiYzRjMDE2IgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMworYWVzX2VuY3J5cHRfY2ZiODoiMjc3MTg1YTRhNDQwODY5OTIwZjUyM2M0ZDU3OGZjNWJlZGQzM2FlZThkMmViYWY3IjoiNjdiZTAwNTcyZjgyYWFiYzEzZDZlNWEyZTUxZDFmMDgiOiI4OGUwNzA2MSI6IjhiYjYzMGJhIgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjNAorYWVzX2VuY3J5cHRfY2ZiODoiODNmNzBmZGNlNDczMDZmY2JiOGMyMWI2YThiMzIwOWY3ZWMxODVmZWY0ZGVlYmQ0IjoiZmY3M2IzMTBjZjdlNjJjZTZmNTAxMDkyZmE2Y2M4ODgiOiIzNjY2NGUyMjJkIjoiMjA4NTU1NTVkMSIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzUKK2Flc19lbmNyeXB0X2NmYjg6ImM1YmUyNzFhMjlmNGEyOWUwODVlOGU5ODE5NjYwMWRjYjg4Y2NjMDNlNTU5YTMwNCI6IjlmNTFmYTJlYjhhMDg0NzE4ZjcyNDBlNDdkMTM1ZGNlIjoiYjU3ZjEyMzQyYTYyIjoiNzNmZjliZjNlYzRiIgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjNgorYWVzX2VuY3J5cHRfY2ZiODoiOWM1NTMyMmU2ZDQ5NWJlMDEwNzZkNGI4MDM3MWFkMTQ3OWFlNTYzNmZmOTg2MWY1IjoiMmI3OWNmYzFmZjM3MjU0ZGVkZjU5MjRhNmI2MWUzZTAiOiI2ZGNlZGU0M2MyZWU2NSI6IjdjODk3NjU4MjgyMjIwIgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjNworYWVzX2VuY3J5cHRfY2ZiODoiNmU3OGNjZWNlN2QxYjJhM2MwOGNmMGRlNzM4YmVlMzNjYmJiZjc4ZDliZjQ5MjJjIjoiNGJiZTE1YjFlOTRhN2I5NzI1MGEyMTM2ZDg4MDRlNDYiOiJjZWRhNDI1Mjc4NzFmODAyIjoiZDkyZmY4OTA0NWIxOTE3ZiIKKworQUVTLTE5Mi1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzgKK2Flc19lbmNyeXB0X2NmYjg6IjEzYzk4NjY1NzQ2Zjc4MjViMzdiNDA0OTE2MjQwYWRiZDFlNDM2NGJlMWQwNWM2MyI6IjBlNDc5ZmJkNWYzOTYxZjM4YjhhMjZiZTFmMmQ2NWM1IjoiMWIwYTYzZDczNDY0YWIzYzhhIjoiNTQ4NTg0N2U1ZDNjMmUyY2M0IgorCitBRVMtMTkyLUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjOQorYWVzX2VuY3J5cHRfY2ZiODoiNTM3ZTdiZjY2MWZkNDAyNGEwMjQ2MTNmMTViMTM2OTBmN2QwYzg0N2MxZTE4OTY1IjoiM2E4MWY5ZDlkM2MxNTViMGNhYWQ1ZDczMzQ5NDc2ZmMiOiJkM2Q4YjliOTg0YWRjMjQyMzdlZSI6IjM4NzlmZWE3MmFjOTk5MjllNTNhIgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjMAorYWVzX2RlY3J5cHRfY2ZiODoiN2RiZGMxNWFkNDAzNGVkODI4ZGM4NjI3OTliN2FkYzlhYmQ2OGVhZjlkNTI2ZDVkIjoiNDM1OTY4M2FmNWEzYTg1YzI0OGZiN2Y1NTA2ZjMxN2IiOiIyNSI6IjJkIgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjMQorYWVzX2RlY3J5cHRfY2ZiODoiM2EyY2RmOWM5NjA4YzFkZDYyMzNkMDNkZDg1NTI5M2IwODg1OTE1MTE0YjI1Mjc5IjoiZTdhMjhlZTM0YWNjNTIxMjhkZGFlNjU4ZWM2Mzk4YTIiOiIwNjc4IjoiN2IwNCIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzIKK2Flc19kZWNyeXB0X2NmYjg6ImM5ODRiOTlhNmNjNWJjODgwMDMxNDNjYmU0Yjc1NWU2ZTMwYmE5NDExNGY3YWQxZSI6IjQxZTNiOGZkMTM4ZjhjMzU4ZGZlZWY0MjAzMDJmNjM0IjoiMDM3Y2Y2IjoiNjU4ZDBhIgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjMworYWVzX2RlY3J5cHRfY2ZiODoiMzk3NDdkYTIyNWJkYzBjNTNjMzQ2M2ZkNjg2ZGJlMTlkMTQxNTc1MzUxNzFmOTFkIjoiNzdkM2E1YWQ4YmJkYjE2OWY4ZDI5ZTVmMjE3OTg2NTEiOiIwZmIwY2VlMiI6IjJkMTkxZjJmIgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNAorYWVzX2RlY3J5cHRfY2ZiODoiNGNkMTMxNzlkZmExNmQwMWM2YTg2MzNkZmM4NzgzZTcyM2U3MjExNGM5YjBkNTBhIjoiNjY1N2M0NmM5OWQ2NDI0NzRjMzMwZDgwMTZiNzFkYmUiOiIwOWQ5MTRjZjBiIjoiMTA1YTY0Yzg3MiIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzUKK2Flc19kZWNyeXB0X2NmYjg6IjVkY2M5YjhkOGE0NTZlOTkxN2NkOGQ1NGQ3ZjcxMDBiMzQ5NjRiNGVkMmQzOThhMCI6IjRmYTI5NWE4OTg3ZjFiMDEwY2U0ZTAxMWZiZjk0MTU2IjoiMjg4Yzc1MmQ5ZmFjIjoiOThmMzMyZDM3Yjc4IgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNgorYWVzX2RlY3J5cHRfY2ZiODoiYzhiYWYwMjA0ZWY4MGI4ZTAxMjVlZmU0M2EwYmNjZGZkMGYzNTZiNjJlNmM3NWZlIjoiZTkxNDRiZjJjYmM1NzIwYTFiNGNiNmYzN2QxMWVkZmYiOiJjOTk4MWEzNGI3YWE4OSI6IjU2YmI0YzNjYWU1M2IzIgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjNworYWVzX2RlY3J5cHRfY2ZiODoiNjRlNDA3NjNmMzhhNjNhZTM3OGMzMjA1MmIwYWUzYWE1MzhiYjg2OGEwNGFjOTg1IjoiYWFjZjY1MDg5ZTRiMjg1NDM4NDUxZmZkY2QwZjYzODkiOiJkOGZjZjgzYTg4NTEwYTBkIjoiYjU2NzQxMWJjNjFiMGE3NiIKKworQUVTLTE5Mi1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzgKK2Flc19kZWNyeXB0X2NmYjg6IjdiZmRjYTk2MDVmMTcyNTNmMjAzZWZmZmM5MmRhOTZmZGUwMjMwMDdkMjJjZGFkMCI6IjQ1YzA5ZTQ0MDM2MDcwZjhhNzczN2E1MTc2YjhjZjI2IjoiOWMxOTViMTk0NGM0YWY1YmZiIjoiODkzNThkZjY1YzNlZjE0ZDI2IgorCitBRVMtMTkyLUNGQjggRGVjcnlwdCBOSVNUIE1NVCAjOQorYWVzX2RlY3J5cHRfY2ZiODoiYmFmMDhiNzYzMTdhNjVjNWYwN2FlNmY1N2ViMGU2NTQ4ODY1OTMyNGQyOTcwOWUzIjoiMGEwMjg0NmI2MmFiYjY5M2VmMzFkNzU0ODQyZWVkMjkiOiI3MjljMGI2ZGViNzVmYTZlYjVlOCI6Ijk4OTU5MzI0MDIzOTNkYzMzYTYwIgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMAorYWVzX2VuY3J5cHRfY2ZiODoiMzRlODA5MWNlZTA5ZjFiZDNlYmYxZThmMDVmNTFiZmJkNDg5OWVmMmFlMDA2YTNhMGY3ODc1MDUyY2RkNDZjOCI6IjQzZWI0ZGNjNGIwNGE4MDIxNmEyMGU0YTA5YTdhYmI1IjoiZjkiOiIyOCIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzEKK2Flc19lbmNyeXB0X2NmYjg6ImUwNGU0MzE3MzExMzEwOWUxMzQzMzkzODQyZmU2Y2FlZjNmOGEyZTUwNmQ3ZjU1ZjgzZGNiMTA0NDRjNmFkMjMiOiJhMzhiODhhMjkzYjA3N2ZiNTU0NjYzNmFhZDkwZDY2MyI6IjI5MTQiOiI2OWE2IgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMgorYWVzX2VuY3J5cHRfY2ZiODoiMDY0ODc0MDkyZjdhMTNjYzQ0NjIyNDdhZDQyM2QwZTk2ZWRmNDJlOGI2N2E1YTIzYjdhMGE2NDc3YjA5OGU2NiI6IjMzOGM1NTJmZjFlY2ExNDQwOGUwNWQ4Y2Y5ZjNiMzFiIjoiYjk3NGZhIjoiMWNmZjk1IgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjMworYWVzX2VuY3J5cHRfY2ZiODoiNTY3OTRhZGIwZWYwNGFlZGRlYWJkNjUwZGU3MzY1MzFkNDA4ODM3OTU0YjkxOTAwMmMzM2VkZmRmZjk3NmNjMiI6IjcxYjU1MjZmYWNlYTQyMzZkMzNmMWY0MTA3ZTRiMDRmIjoiZGI3NzQ5MTIiOiJmMDRkOWQ0ZiIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzQKK2Flc19lbmNyeXB0X2NmYjg6ImRkZGQ3ZjIzNGU3ZDBlNmVjNjQ1NjBiOTY0MzA5ODZhODU2ZjJlZTk4MDU0NDNhNzk0NmUzMTYwMWVmNjY3OWQiOiJlMjBmMzlkYjAwMjVlYjI0NDkxYmQwNjAxMjg4NzEwOCI6ImFkMWQ1MzExZWEiOiIxOWNjOTdhNjYyIgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjNQorYWVzX2VuY3J5cHRfY2ZiODoiZWM3M2E3NjAyNzJjODNmOTE3NzFiM2FiN2IxODg3MTVjNmQ2YWZiOWM1NTRmZWFlODM4NTZlOTY2YTM4NjNkMCI6ImFlN2JmYTM4ZmQyNTc3OGZjZjY2Y2U4MTU3ZjZlNDJlIjoiMDJmZTcyNGZiYzVkIjoiYjBlY2E2MzQwNWY0IgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjNgorYWVzX2VuY3J5cHRfY2ZiODoiYTY2ODc0Y2EwYjcwZmI5OGIzN2MwMzNlYzk2NDEzZjMzOWFkYWUwMmFjYWRlMDE1YjlmMDE2YjQ1OWRiMzMwOSI6IjZlZDQ4MGQ5ZTRlZDAzMWNmNjZiYjFlMDdmOGQ1NTE0IjoiYjQ3NzdlNmJjZDlhMDUiOiI4YzAxNzM5N2FkNWJhYiIKKworQUVTLTI1Ni1DRkI4IEVuY3J5cHQgTklTVCBNTVQgIzcKK2Flc19lbmNyeXB0X2NmYjg6ImEzZGJiYjc3NWFkYTkyYjBiOGVkMTYzMjQ0NGUyMWMxYzg2ZmYzZWJhOGY2MjgzMDczMDZlNzY2YjhjMTViNWMiOiI0ZWM1NmE4ZTU0MWY1Y2ZlN2I4YWI5NDdiZmE0ZmQwOCI6IjFkNzBhNWE4MmJhZGY1ZWEiOiIxZTIyYmViZWJlYWNkODFkIgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjOAorYWVzX2VuY3J5cHRfY2ZiODoiNjQxMzVlNjdjMGNhMWFjZWYzMzYwZDkzMGFmY2Q3MjZjNWIwNDg2MWE2OWMxYjZhNDhiZGUxZGFmMjBmM2IxZiI6IjUzNzdhMTU0ZDVmOTQ4MTg5ZjlhYTU3YjQ2NmMxNmIyIjoiYTM2Y2E1ZWEzODJhMzIyZWVmIjoiMzEwNTAxNjU2N2QzMTc0YWVkIgorCitBRVMtMjU2LUNGQjggRW5jcnlwdCBOSVNUIE1NVCAjOQorYWVzX2VuY3J5cHRfY2ZiODoiZWJiYjQ1NjZiNWUxODJlMGYwNzI0NjZiMGIzMTFkZjM4ZjkxNzViYzAyMTNhNTUzMGJjZTJlYzRkNzRmNDAwZCI6IjA5NTZhNDhlMDEwMDJjOWUxNjM3NmQ2ZTMwOGRiYWQxIjoiYjBmZTI1YWM4ZDNkMjhhMmY0NzEiOiI2MzhjNjgyM2U3MjU2ZmI1NjI2ZSIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzAKK2Flc19kZWNyeXB0X2NmYjg6IjE2ODc4MzE1ODBjYjc2NDMyMWE5ZDY3NGRiZDBhOTY0MGY2NjhiMGY1OGVmMDFiODdhNzEwYjMwOTVkNWY4NTUiOiI2Y2Q1YmVjNmQ2ZTFmZDIzYWZjNTQzYjhmODBkM2Y4OSI6IjZmIjoiOTgiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICMxCithZXNfZGVjcnlwdF9jZmI4OiJiNmI1MDRlOGI3MDY1MzczZWEzMWNkNTQ5ZTUyZWRhN2NiOTZmZDFkYjE0ZWRkYWNiYzQyMDA4NWFiNDhiNzQ3IjoiODcwZWNkNDViMTI0MTgwM2RkYWY4YmFkMTVhMDI1ZDciOiIxN2Q0IjoiMzU3MiIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzIKK2Flc19kZWNyeXB0X2NmYjg6IjZhZDMxMDVlMTVmYjViNzQyYmY0ZmUxZWI4ZTk4YzZjMWZmZWE2NTMxMDdjODRmNmI0MmVkMTIzMmEwYmJjMjEiOiIxNzUzNGM4OWM0ZWFlNWRlYTZlYTM1M2RkZTdiMTYyMyI6ImE5ODQxZSI6ImY5NDExYSIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzMKK2Flc19kZWNyeXB0X2NmYjg6Ijc1OGYzZmE4YjJiMjg5ZjE5ZmQ1OWU3MzE2YmU0MGI5MDRlZmY3ZjU2NWNhYWM0NTcwZjk3MjM2MGUwZGE3ODciOiJiMjEzMzVhZTk4MDg5OGZhOTJjNGIzMDY5ZTUzMjk3MyI6Ijg0YjM1ZTI1IjoiNDc4ODc4NzIiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM0CithZXNfZGVjcnlwdF9jZmI4OiI4MDJlODU0ZWI3OTk1MDA5NzVkOTYwYTY3ODg1ODIwZDE5NWUwMmFiMjNkNTFmMTVlNWNkYmNlZTg2YTE1ODBjIjoiOTQ0NzhjNGU0NGUyZmE4ZDJlNmJjNDNkMzg0NTk3ZTYiOiJkMWU5NmJmMWU4IjoiZWQ0MTRiNTY4OSIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzUKK2Flc19kZWNyeXB0X2NmYjg6IjNhMGMwM2NhOWQxZTVkNDliYjM3ZjkwNDFmODhkMTU5YzNmMWQ1Y2UyNmM3OThmNTllZDU0YTkzZjBhMGU2MDAiOiI5YWFlMzhiYTgzMmU0YjA5M2I1MDQ0NDA3NDUxN2QyMCI6Ijc0NDEwY2NkMTJkYSI6IjgyMDdlZWUyYTdhYiIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzYKK2Flc19kZWNyeXB0X2NmYjg6ImVlMDU0NjIxMjhmZWE3NWU5MTlmNmY0MzZjYjE5OGYyMjI4NDdkNjk4YTI4M2Y1NzY3ZGY2ODJkMzNkM2NlNzciOiJkMmFkNTVlNDE4ODcwNzUxODQ2MzUxMTJhMjJmYzA5MyI6ImZmMDM5ZTg5ODc3YjQ0IjoiYWZmM2FhNGMyNGUzNTMiCisKK0FFUy0yNTYtQ0ZCOCBEZWNyeXB0IE5JU1QgTU1UICM3CithZXNfZGVjcnlwdF9jZmI4OiIwOGFiYmRjYzNlYjljMTcxN2RiMWZhYTM4ZGNkMDg5M2FmZDVlMTZlMjU5Njc0N2FmNThmOGQ2MWViZWRmOWNkIjoiYjkyNWM4ZGM5YTliNTVhNDM3MmVhNmQzN2QyMWMxZWIiOiJlMTc2YmE5OWVhNjAyZmQ5IjoiYjczNzAwNTAyODhiZjYwMCIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzgKK2Flc19kZWNyeXB0X2NmYjg6IjU2ZDQwNGE4OTNmYjNiM2Y1OTRhYWIxODkzOTIzMGIwOTY2NDZhMzdhNzgxNjI5ZmJkOTI3MGYzODkxYTVjZWEiOiJlNTkwNmIzNmYyZDk3ZTZmMmRiMTliNmM3YTNjZTMxOSI6ImM1NWE5YTkxN2E4MDlhNzg0YiI6ImU0NDk5NWJiYjBmZmY0MGZlZSIKKworQUVTLTI1Ni1DRkI4IERlY3J5cHQgTklTVCBNTVQgIzkKK2Flc19kZWNyeXB0X2NmYjg6ImVjMTMwNjI1NTFlNGQ3MjkxZTMyMGY1NjViNzQ5ZWVhMTgwOWI2NjNiMjZmMmM0ZDUzYjUyMDU4YjgzM2UwYWQiOiJmYmZhNWE1MjhlMjA4NjMwMTI3OTBjMmFiYWZiNWEwYyI6IjJiZmMzZjAyMDkzMDcxNDAxMDFhIjoiNTQ3YmZkNjQyY2Y2ZTEyZWQ5NDIiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmVjYi5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5lY2IuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQ5MDM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5lY2IuZGF0YQpAQCAtMCwwICsxLDIzMCBAQAorQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMQorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImYzNDQ4MWVjM2NjNjI3YmFjZDVkYzNmYjA4ZjI3M2U2IjoiMDMzNjc2M2U5NjZkOTI1OTVhNTY3Y2M5Y2U1MzdmNWUiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMgorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk3OThjNDY0MGJhZDc1YzdjMzIyN2RiOTEwMTc0ZTcyIjoiYTlhMTYzMWJmNDk5Njk1NGViYzA5Mzk1N2IyMzQ1ODkiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMworYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk2YWI1YzJmZjYxMmQ5ZGZhYWU4YzMxZjMwYzQyMTY4IjoiZmY0ZjgzOTFhNmE0MGNhNWIyNWQyM2JlZGQ0NGE1OTciOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNAorYWVzX2VuY3J5cHRfZWNiOiJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzJhMWRhNzcwZjVkN2FjNGM5ZWY5NGQ4MjJhZmZkOTciOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNQorYWVzX2VuY3J5cHRfZWNiOiJmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTcwMDE0ZDYzNGUyYjc2NTA3NzdlOGU4NGQwM2NjZDgiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNgorYWVzX2VuY3J5cHRfZWNiOiJmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjE3ZTc5YWVkMGRiN2UyNzllOTU1YjVmNDkzODc1YTciOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNworYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiN2I5MDc4NTEyNTUwNWZhZDU5YjEzYzE4NmRkNjZjZTMiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOAorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGI1MjdhNmFlYmRhZWM5ZWFlZjhlZGEyY2I3NzgzZTUiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOQorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDNmZGFmNTNlYmJjOTg4MGMyMjg2MTdkNmE5YjU0OGIiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcwYzQ2YmIzMDY5MmJlNjU3ZjdlYWE5M2ViYWQ5ODk3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzExCithZXNfZW5jcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzMjM5OTRjZmI5ZGEyODVhNWQ5NjQyZTE3NTliMjI0YSI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWRiZjU3ODc3YjdiMTczODVjODVkMGI1NDg1MWUzNzEiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTMKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMCI6IjNhNGQzNTRmMDJiYjVhNWU0N2QzOTY2Njg2N2YyNDZhIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzE0CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAiOiJkNDUxYjhkNmUxZTFhMGViYjE1NWZiYmY2ZTdiN2RjMyI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxNQorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwIjoiNjg5OGQ0ZjQyZmE3YmE2YTEwYWMwNWU4N2I5ZjIwODAiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTYKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMCI6IjA4MmViOGJlMzVmNDQyZmI1MjY2OGUxNmE1OTFkMWQ2IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzE3CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAiOiJlNjU2ZjllY2Y1ZmUyN2VjM2U0YTczZDAwYzI4MmZiMyI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxOAorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwIjoiMmNhODIwOWQ2MzI3NGNkOWEyOWJiNzRiY2Q3NzY4M2EiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMQorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRiNGYxYWE1MzA5NjdkNjczMmNlNDcxNWViMGVlMjRiIjoiZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMgorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE4MTczODI1MjYyMWRkMTgwYTM0ZjM0NTViNGJhYTJmIjoiZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMworYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc3ZTJiNTA4ZGI3ZmQ4OTIzNGNhZjc5MzllZTU2MjFhIjoiZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNAorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRjNDNiZTQwYmUwZTUzNzEyZjdlMmJmNWNhNzA3MjA5IjoiNmExMThhODc0NTE5ZTY0ZTk5NjM3OThhNTAzZjFkMzUiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNQorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjkyYmVlZGFiMTg5NWE5NGZhYTY5YjYzMmU1Y2M0N2NlIjoiY2I5ZmNlZWM4MTI4NmNhM2U5ODliZDk3OWIwY2IyODQiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNgorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ1OTI2NGY0Nzk4ZjZhNzhiYWNiODljMTVlZDNkNjAxIjoiYjI2YWViMTg3NGU0N2NhODM1OGZmMjIzNzhmMDkxNDQiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNworYWVzX2RlY3J5cHRfZWNiOiJiNjk0MThhODUzMzIyNDBkYzgyNDkyMzUzOTU2YWUwYyI6ImEzMDNkOTQwZGVkOGYwYmFmZjZmNzU0MTRjYWM1MjQzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOAorYWVzX2RlY3J5cHRfZWNiOiI3MWI1YzA4YTE5OTNlMTM2MmU0ZDBjZTliMjJiNzhkNSI6ImMyZGFiZDExN2Y4YTNlY2FiZmJiMTFkMTIxOTRkOWQwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOQorYWVzX2RlY3J5cHRfZWNiOiJlMjM0Y2RjYTI2MDZiODFmMjk0MDhkNWY2ZGEyMTIwNiI6ImZmZjYwYTQ3NDAwODZiM2I5YzU2MTk1Yjk4ZDkxYTdiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2Flc19kZWNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAiOiI4NGJlMTllMDUzNjM1ZjA5ZjI2NjVlN2JhZTg1YjQyZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzExCithZXNfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwIjoiMzJjZDY1Mjg0MjkyNmFlYTRhYTYxMzdiYjJiZTJiNWUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxCithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZjgwMDAwMDAwMDAwIjoiMTU2ZjA3NzY3YTg1YTQzMTIzMjFmNjM5NjgzMzhhMDEiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMgorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMCI6IjE1ZWVjOWViZjQyYjljYTc2ODk3ZDJjZDZjNWExMmUyIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzMKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAiOiJkYjBkM2E2ZmRjYzEzZjkxNWUyYjMwMmNlZWI3MGZkOCI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM0CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjUxNzE5NzgzZDMxODVhNTM1YmQ3NWFkYzY1MDcxY2UxIjoiNGYzNTQ1OTJmZjdjODg0N2QyZDA4NzBjYTk0ODFiN2MiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNQorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyNmFhNDlkY2ZlNzYyOWE4OTAxYTY5YTk5MTRlNmRmZCI6ImQ1ZTA4YmY5YTE4MmU4NTdjZjQwYjNhMzZlZTI0OGNjIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzYKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTQxYTQ3NzMwNTgyMjRlMWVmNjZkMTBlMGE2ZWU3ODIiOiIwNjdjZDlkMzc0OTIwNzc5MTg0MTU2MjUwN2ZhOTYyNiI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM3CithZXNfZW5jcnlwdF9lY2I6ImQyOTI2NTI3ZTBhYTlmMzdiNDVlMmVjMmFkZTU4NTNlZjgwNzU3NjEwNGM3YWNlMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGQ2MTllMWNmMjA0NDQ2MTEyZTBhZjJiOWFmYThmOGMiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOAorYWVzX2VuY3J5cHRfZWNiOiI5ODIyMTVmNGUxNzNkZmEwZmNmZmU1ZDNkYTQxYzQ4MTJjN2JjYzhlZDM1NDBmOTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImQ0ZjBhYWUxM2M4ZmU5MzM5ZmJmOWU2OWVkMGFkNzRkIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzkKK2Flc19lbmNyeXB0X2VjYjoiOThjNmI4ZTAxZTM3OWZiZDE0ZTYxYWY2YWY4OTE1OTY1ODM1NjVmMmEyN2Q1OWU5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIxOWM4MGVjNGE2ZGViN2U1ZWQxMDMzZGRhOTMzNDk4ZiI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhkZDI3NGJkMGYxYjU4YWUzNDVkOWU3MjMzZjliOGYzIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzExCithZXNfZW5jcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOWQ2YmRjOGY0Y2U1ZmViMGYzYmVkMmU0YjlhOWJiMGIiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZDU1NDhiY2YzZjQyNTY1ZjdlZmE5NDU2MjUyOGQ0NiI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxCithZXNfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMCI6ImJiMjg1MmM4OTFjNTk0N2QyZWQ0NDAzMmM0MjFiODVmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMgorYWVzX2RlY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAiOiIxYjlmNWZiZDVlOGE0MjY0YzBhODViODA0MDlhZmE1ZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzMKK2Flc19kZWNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwIjoiMzBkYWI4MDlmODVhOTE3ZmU5MjQ3MzNmNDI0YWM1ODkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM0CithZXNfZGVjcnlwdF9lY2I6IjYxMjU3MTM0YTUxOGEwZDU3ZDlkMjQ0ZDQ1ZjY0OThjYmMzMmYyYmFmYzUyMmQ3OSI6ImNmZTRkNzQwMDI2OTZjY2Y3ZDg3YjE0YTJmOWNhZmM5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNQorYWVzX2RlY3J5cHRfZWNiOiJiMGFiMGE2YTgxOGJhZWYyZDExZmEzM2VhYzk0NzI4NGZiN2Q3NDhjZmI3NWU1NzAiOiJkMmVhZmQ4NmY2M2IxMDliOTFmNWRiYjNhM2ZiN2UxMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzYKK2Flc19kZWNyeXB0X2VjYjoiZWUwNTNhYTAxMWM4YjQyOGNkY2MzNjM2MzEzYzU0ZDZhMDNjYWMwMWM3MTU3OWQ2IjoiOWI5ZmRkMWM1OTc1NjU1ZjUzOTk5OGIzMDZhMzI0YWYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM3CithZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjI3NWNmYzA0MTNkOGNjYjcwNTEzYzM4NTliMWQwZjcyIjoiMWIwNzdhNmFmNGI3Zjk4MjI5ZGU3ODZkNzUxNmI2MzkiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOAorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjOWI4MTM1ZmYxYjVhZGM0MTNkZmQwNTNiMjFiZDk2ZCI6IjljMmQ4ODQyZTVmNDhmNTc2NDgyMDVkMzlhMjM5YWYxIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzkKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGEzNjUwYzMzNzFjZTJlYjM1ZTM4OWExNzE0Mjc0NDAiOiJiZmY1MjUxMDA5NWY1MThlY2NhNjBhZjQyMDU0NDRiYiI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiMjA5OTc5NWU4OGNjMTU4ZmQ3NWVhMTMzZDdlN2ZiZSI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzExCithZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE2Y2FlNDZmYjZmYWRmZTdhMmMzMDJhMzQyNDI4MTdiIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDI2YTcwMjRkNmE5MDJlMGIzZmZjY2JhYTkxMGNjM2YiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxCithZXNfZW5jcnlwdF9lY2I6ImMxY2MzNThiNDQ5OTA5YTE5NDM2Y2ZiYjNmODUyZWY4YmNiNWVkMTJhYzcwNTgzMjVmNTZlNjA5OWFhYjFhMWMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM1MjA2NTI3MjE2OWFiZjk4NTY4NDM5MjdkMDY3NGZkIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzIKK2Flc19lbmNyeXB0X2VjYjoiOTg0Y2E3NWY0ZWU4ZDcwNmY0NmMyZDk4YzBiZjRhNDVmNWIwMGQ3OTFjMmRmZWIxOTFiNWVkOGU0MjBmZDYyNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDMwNzQ1NmE5ZTY3ODEzYjQ1MmUxNWZhOGZmZmUzOTgiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMworYWVzX2VuY3J5cHRfZWNiOiJiNDNkMDhhNDQ3YWM4NjA5YmFhZGFlNGZmMTI5MThiOWY2OGZjMTY1M2YxMjY5MjIyZjEyMzk4MWRlZDdhOTJmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NjYzNDQ2NjA3MzU0OTg5NDc3YTVjNmYwZjAwN2VmNCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM0CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwYjI0YWYzNjE5M2NlNDY2NWYyODI1ZDdiNDc0OWM5OCI6ImE5ZmY3NWJkN2NmNjYxM2QzNzMxYzc3YzNiNmQwYzA0IjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzUKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNgorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOiIzOGYyYzdhZTEwNjEyNDE1ZDI3Y2ExOTBkMjdkYThiNCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM3CithZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM2YWZmMGVmN2JmMzI4MDc3MmNmNGNhYzgwYTBkMmIyIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzgKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWY4ZWVkZWEwZjYyYTE0MDZkNThjZmMzZWNlYTcyY2YiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOQorYWVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhYmY0MTU0YTMzNzVhMWQzZTZiMWQ0NTQ0MzhmOTVhNiI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NWQwODljMzZkNWM1YTRlZmM2ODllM2IwZGUxMGRkNSI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiNGRhNWRmNGJlY2I1NDYyZTAzYTBlZDAwZDI5NTYyOSI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2VuY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkY2Y0ZTEyOTEzNmMxYTRiN2EwZjM4OTM1Y2MzNGIyYiI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxCithZXNfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAiOiJlZGY2MWFlMzYyZTg4MmRkYzAxNjc0NzRhN2E3N2YzYSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzIKK2Flc19kZWNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMCI6IjYxNjhiMDBiYTc4NTllMDk3MGVjZmQ3NTdlZmVjZjdjIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMworYWVzX2RlY3J5cHRfZWNiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwIjoiZDE0MTU0NDc4NjYyMzBkMjhiYjFlYTE4YTRjZGZkMDIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM0CithZXNfZGVjcnlwdF9lY2I6ImY4YmU5YmE2MTVjNWE5NTJjYWJiY2EyNGY2OGY4NTkzMDM5NjI0ZDUyNGM4MTZhY2RhMmM5MTgzYmQ5MTdjYjkiOiJhMzk0NGI5NWNhMGI1MjA0MzU4NGVmMDIxNTE5MjZhOCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzUKK2Flc19kZWNyeXB0X2VjYjoiNzk3ZjhiM2QxNzZkYWM1YjdlMzRhMmQ1MzljNGVmMzY3YTE2Zjg2MzVmNjI2NDczNzU5MWM1YzA3YmY1N2EzZSI6ImE3NDI4OWZlNzNhNGMxMjNjYTE4OWVhMWUxYjQ5YWQ1IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNgorYWVzX2RlY3J5cHRfZWNiOiI2ODM4ZDQwY2FmOTI3NzQ5YzEzZjAzMjlkMzMxZjQ0OGUyMDJjNzNlZjUyYzVmNzNhMzdjYTYzNWQ0YzQ3NzA3IjoiYjkxZDRlYTQ0ODg2NDRiNTZjZjA4MTJmYTdmY2Y1ZmMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM3CithZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MjNhNTJmY2VhNWQ0NDNlNDhkOTE4MWFiMzJjNzQyMSI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzgKK2Flc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM4ZjJjN2FlMTA2MTI0MTVkMjdjYTE5MGQyN2RhOGI0IjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOQorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWJjNzA0ZjFiY2UxMzVjZWI4MTAzNDFiMjE2ZDdhYmUiOiI5MWZiZWYyZDE1YTk3ODE2MDYwYmVlMWZlYWE0OWFmZSI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMAorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGRjNmJmNzkwYzE1NzYwZDhkOWFlYjZmOWE3NWZkNGUiOiI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMQorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMGE2YmRjNmQ0YzFlNjI4MDMwMWZkOGU5N2RkYmU2MDEiOiJjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMgorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOWI4MGVlZmI3ZWJlMmQyYjE2MjQ3YWEwZWZjNzJmNWQiOiJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmMGVhYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24KQEAgLTAsMCArMSwyOTcgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvYWVzLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBhZXNfZW5jcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApID09IHNldGtleV9yZXN1bHQgKTsKKyAgICBpZiggc2V0a2V5X3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDE2ICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgYWVzX2RlY3J5cHRfZWNiKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfc2V0a2V5X2RlYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKSA9PSBzZXRrZXlfcmVzdWx0ICk7CisgICAgaWYoIHNldGtleV9yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0FFU19ERUNSWVBULCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgYWVzX2VuY3J5cHRfY2JjKCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbiwgZGF0YV9sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBkYXRhX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgZGF0YV9sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGFlc19kZWNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW4sIGRhdGFfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9kZWMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgZGF0YV9sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOworICAgIGlmKCBjYmNfcmVzdWx0ID09IDApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgZGF0YV9sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCit2b2lkIGFlc19lbmNyeXB0X2NmYjEyOCggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CisgICAgaW50IGtleV9sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCggJmN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCit2b2lkIGFlc19kZWNyeXB0X2NmYjEyOCggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CisgICAgaW50IGtleV9sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19hZXNfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCggJmN0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCit2b2lkIGFlc19lbmNyeXB0X2NmYjgoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKKyAgICBpbnQga2V5X2xlbiwgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjgoICZjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIHNyY19sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2Flc19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KK3ZvaWQgYWVzX2RlY3J5cHRfY2ZiOCggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuLCBzcmNfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYWVzX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfY2ZiOCggJmN0eCwgTUJFRFRMU19BRVNfREVDUllQVCwgc3JjX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBhZXNfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5yZXN0LmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLnJlc3QuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmIyMjJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5yZXN0LmRhdGEKQEAgLTAsMCArMSwxNSBAQAorQUVTLUVDQiBFbmNyeXB0IChJbnZhbGlkIGtleWxlbmd0aCkKK2Flc19lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjM0NDgxZWMzY2M2MjdiYWNkNWRjM2ZiMDhmMjczZTYiOiIwMzM2NzYzZTk2NmQ5MjU5NWE1NjdjYzljZTUzN2Y1ZSI6TUJFRFRMU19FUlJfQUVTX0lOVkFMSURfS0VZX0xFTkdUSAorCitBRVMtRUNCIERlY3J5cHQgKEludmFsaWQga2V5bGVuZ3RoKQorYWVzX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmMzQ0ODFlYzNjYzYyN2JhY2Q1ZGMzZmIwOGYyNzNlNiI6IjAzMzY3NjNlOTY2ZDkyNTk1YTU2N2NjOWNlNTM3ZjVlIjpNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9LRVlfTEVOR1RICisKK0FFUy0yNTYtQ0JDIEVuY3J5cHQgKEludmFsaWQgaW5wdXQgbGVuZ3RoKQorYWVzX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAwMDAiOiIiOk1CRURUTFNfRVJSX0FFU19JTlZBTElEX0lOUFVUX0xFTkdUSAorCitBRVMtMjU2LUNCQyBEZWNyeXB0IChJbnZhbGlkIGlucHV0IGxlbmd0aCkKK2Flc19kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0IjoiIjpNQkVEVExTX0VSUl9BRVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKworQUVTIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUCithZXNfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJjNC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyYzQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjMyYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyYzQuZGF0YQpAQCAtMCwwICsxLDI3IEBACitUZXN0IHZlY3RvciBBUkM0IFtDcnlwdGxpYl0KK21iZWR0bHNfYXJjNF9jcnlwdDoiMDAwMDAwMDAwMDAwMDAwMCI6IjAxMjM0NTY3ODlhYmNkZWYiOiI3NDk0YzJlNzEwNGIwODc5IgorCitUZXN0IHZlY3RvciBBUkM0IFtDT01NRVJDRV0KK21iZWR0bHNfYXJjNF9jcnlwdDoiZGNlZTRjZjkyYyI6IjYxOGE2M2QyZmIiOiJmMTM4MjljOWRlIgorCitUZXN0IHZlY3RvciBBUkM0IFtTU0ggQVJDRk9VUl0KK21iZWR0bHNfYXJjNF9jcnlwdDoiNTI3NTY5NzM2YzY5NmU2ZTc1NmUyMDZjNjE3NTZjNzUyMDZiNmY3Mjc2Njk3MzczNzM2MTZlNjkyYzIwNzRlNDY4NmJlNDcwZTQ2OTY0NjU2ZTIwNzBlNGU0NmM2Y2U0MjA3NGU0Nzk3MzY5NmI3NTc1MmUyMDRiNjU3M2U0NzlmNjZlMjA2ZjZlMjA2ZjZlNmU2OTIwNmY2ZDYxNmU2MTZlNjkyYzIwNmI2MTczNmI2OTczNjE3Njc1NzU2ZTIwNmM2MTYxNmI3MzZmNzQyMDc2NjU3MjY4NmY3NTc1MmUyMDQ1NmUyMDZkNjEyMDY5NmM2ZjY5NzQ3MzY1MmMyMDczNzU3MjY1MjA2ODc1NmY2YjYxNjEyYzIwNmQ3NTc0NzQ2MTIwNmQ2NTc0NzNlNDZlMjA3NDc1NmQ2ZDc1NzU3MzIwNmQ3NTZjNmM2NTIwNzQ3NTZmNmI2MTYxMmUyMDUwNzU3NTZlNzQ2ZjIwNzA2OTZjNzY2NTZlMmMyMDZkNjkyMDY4NzU2YjZiNzU3NTJjMjA3MzY5Njk2ZTc0NmYyMDc2NjE3MjYxNmUyMDc0NzU3NTZjNjk3MzY1NmUyYzIwNmQ2OTIwNmU3NTZiNmI3NTc1MmUyMDU0NzU2ZjZiNzM3NTc0MjA3NjYxNmU2MTZkNmY2ZTIwNmE2MTIwNzY2MTcyNmE2Zjc0MjA3NjY1NjU2ZTJjMjA2ZTY5Njk3Mzc0ZTQyMDczNzk2NGU0NmQ2NTZlNjkyMDZjNjE3NTZjNzU2ZTIwNzQ2NTY1NmUyZTIwMmQyMDQ1Njk2ZTZmMjA0YzY1Njk2ZTZmIjoiMjkwNDE5NzJmYjQyYmE1ZmM3MTI3NzEyZjEzODI5YzkiOiIzNTgxODY5OTkwMDFlNmI1ZGFmMDVlY2VlYjdlZWUyMWUwNjg5YzFmMDBlZWE4MWY3ZGQyY2FhZWUxZDI3NjNlNjhhZjBlYWQzM2Q2NmMyNjhiYzk0NmM0ODRmYmU5NGM1ZjVlMGI4NmE1OTI3OWU0ZjgyNGU3YTY0MGJkMjIzMjEwYjBhNjExNjBiN2JjZTk4NmVhNjU2ODgwMDM1OTZiNjMwYTZiOTBmOGUwY2FmNjkxMmE5OGViODcyMTc2ZTgzYzIwMmNhYTY0MTY2ZDJjY2U1N2ZmMWJjYTU3YjIxM2YwZWQxYWE3MmZiOGVhNTJiMGJlMDFjZDFlNDEyODY3NzIwYjMyNmViMzg5ZDAxMWJkNzBkOGFmMDM1ZmIwZDg1ODlkYmNlM2M2NjZmNWVhOGQ0Yzc5NTRjNTBjM2YzNDBiMDQ2N2Y4MWI0MjU5NjFjMTE4NDMwNzRkZjYyMGYyMDg0MDRiMzk0Y2Y5ZDM3ZmY1NGI1ZjFhZDhmNmVhN2RhM2M1NjFkZmE3MjgxZjk2NDQ2M2QyY2MzNWE0ZDFiMDM0OTBkZWM1MWIwNzExZmJkNmY1NWY3OTIzNGQ1YjdjNzY2NjIyYTY2ZGU5MmJlOTk2NDYxZDVlNGRjODc4ZWY5YmNhMDMwNTIxZTgzNTFlNGJhZWQyZmQwNGY5NDY3MzY4YzRhZDZhYzE4NmQwODI0NWIyNjNhMjY2NmQxZjZjNTQyMGYxNTk5ZGZkOWY0Mzg5MjFjMmY1YTQ2MzkzOGNlMDk4MjI2NWVlZjcwMTc5YmM1NTNmMzM5ZWIxYTRjMWFmNWY2YTU0N2YiCisKK1Rlc3QgVmVjdG9yIEFSQzQgW1JGQzYyMjkgNDAtYml0XQorbWJlZHRsc19hcmM0X2NyeXB0OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDEwMjAzMDQwNSI6ImIyMzk2MzA1ZjAzZGMwMjdjY2MzNTI0YTBhMTExOGE4Njk4Mjk0NGYxOGZjODJkNTg5YzQwM2E0N2EwZDA5MTkiCisKK1Rlc3QgVmVjdG9yIEFSQzQgW1JGQzYyMjkgNTYtYml0XQorbWJlZHRsc19hcmM0X2NyeXB0OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDEwMjAzMDQwNTA2MDciOiIyOTNmMDJkNDdmMzdjOWI2MzNmMmFmNTI4NWZlYjQ2YmU2MjBmMTM5MGQxOWJkODRlMmUwZmQ3NTIwMzFhZmMxIgorCitUZXN0IFZlY3RvciBBUkM0IFtSRkM2MjI5IDY0LWJpdF0KK21iZWR0bHNfYXJjNF9jcnlwdDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAxMDIwMzA0MDUwNjA3MDgiOiI5N2FiOGExYmYwYWZiOTYxMzJmMmY2NzI1OGRhMTVhODgyNjNlZmRiNDVjNGExODY4NGVmODdlNmIxOWU1YjA5IgorCitUZXN0IFZlY3RvciBBUkM0IFtSRkM2MjI5IDEyOC1iaXRdCittYmVkdGxzX2FyYzRfY3J5cHQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMCI6IjlhYzdjYzlhNjA5ZDFlZjdiMjkzMjg5OWNkZTQxYjk3NTI0OGM0OTU5MDE0MTI2YTZlOGE4NGYxMWQxYTllMWMiCisKK1RNUAorbWJlZHRsc19hcmM0X2NyeXB0OiIxNDAwMDAyNDMzYzk2Y2ZhNWM1M2E2NTE4NGZjYmE4M2Q5NzkzZjQyNTIyZjk0ZTQ5YmYyNWVkY2I3YTIzYzllYWFlNWNhODRmNmVlNmRhOCI6IjVlNThiMWFkODAiOiJlOWEzZDA3ZWExYTNlYWM5ZmQ3M2RjYjE0YzQwOWYyZDQzNGE3MmI2YWEwNzdlMDkyNGJjZmZjMjM2ZjU1ZDJkMzcyYjI4OTcwNzU3MTUzMSIKKworQVJDNCBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVAorYXJjNF9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyYzQuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiNDAxYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmZ1bmN0aW9uCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvYXJjNC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfYXJjNF9jcnlwdCggY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9rZXlfc3RyaW5nLAorICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3RfaGV4c3RyWzIwMDBdOworICAgIGludCBzcmNfbGVuLCBrZXlfbGVuOworICAgIG1iZWR0bHNfYXJjNF9jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDAwKTsKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMDApOworICAgIG1lbXNldChkc3RfaGV4c3RyLCAweDAwLCAyMDAwKTsKKyAgICBtYmVkdGxzX2FyYzRfaW5pdCggJmN0eCApOworCisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfYXJjNF9zZXR1cCgmY3R4LCBrZXlfc3RyLCBrZXlfbGVuKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmM0X2NyeXB0KCZjdHgsIHNyY19sZW4sIHNyY19zdHIsIGRzdF9zdHIgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3RfaGV4c3RyLCBkc3Rfc3RyLCBzcmNfbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3RfaGV4c3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2FyYzRfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIGFyYzRfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2FyYzRfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hc24xd3JpdGUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hc24xd3JpdGUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE3OGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FzbjF3cml0ZS5kYXRhCkBAIC0wLDAgKzEsOTIgQEAKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjMCAoRW1wdHkgc3RyaW5nKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiIjoiMDQwMCI6MjoyCisKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjMSAoTGFyZ2UgYnVmZmVyKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiQUFCQkNDIjoiMDQwM0FBQkJDQyI6MTA6NQorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzIgKEJ1ZmZlciBqdXN0IGZpdHMpCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiJBQUJCQ0MiOiIwNDAzQUFCQkNDIjo1OjUKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICMzIChCdWZmZXIgdG9vIHNtYWxsIGZvciB0YWcpCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiJBQUJCQ0MiOiIwNDAzQUFCQkNDIjo0Ok1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzQgKEJ1ZmZlciB0b28gc21hbGwgZm9yIGxlbikKK21iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmc6IkFBQkJDQyI6IjA0MDNBQUJCQ0MiOjM6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjNSAoQnVmZmVyIHRvbyBzbWFsbCBmb3Igc3RyaW5nKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiQUFCQkNDIjoiMDQwM0FBQkJDQyI6MjpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICM2IChsID0gMTI4LCBsYXJnZSBidWZmZXIpCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiMDQ4MTgwMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6MTQwOjEzMQorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzcgKGwgPSAxMjgsIGJ1ZmZlciBqdXN0IGZpdHMpCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiMDQ4MTgwMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6MTMxOjEzMQorCitBU04uMSBXcml0ZSBPY3RldCBTdHJpbmcgIzggKGwgPSAxMjgsIGJ1ZmZlciB0b28gc21hbGwgZm9yIHRhZykKK21iZWR0bHNfYXNuMV93cml0ZV9vY3RldF9zdHJpbmc6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiIiOjEzMDpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKKworQVNOLjEgV3JpdGUgT2N0ZXQgU3RyaW5nICM5IChsID0gMTI4LCBidWZmZXIgdG9vIHNtYWxsIGZvciBsZW4pCittYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiIjoxMjk6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIE9jdGV0IFN0cmluZyAjOSAobCA9IDEyOCwgYnVmZmVyIHRvbyBzbWFsbCBmb3Igc3RyaW5nKQorbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IiI6MTI3Ok1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSBJQTUgU3RyaW5nICMwIChFbXB0eSBzdHJpbmcpCittYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZzoiIjoiMTYwMCI6MjoyCisKK0FTTi4xIFdyaXRlIElBNSBTdHJpbmcgIzEgKExhcmdlIGJ1ZmZlcikKK21iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nOiJBQkMiOiIxNjAzNDE0MjQzIjoxMDo1CisKK0FTTi4xIFdyaXRlIElBNSBTdHJpbmcgIzIgKEJ1ZmZlciBqdXN0IGZpdHMpCittYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZzoiQUJDIjoiMTYwMzQxNDI0MyI6NTo1CisKK0FTTi4xIFdyaXRlIElBNSBTdHJpbmcgIzMgKEJ1ZmZlciB0b28gc21hbGwgZm9yIHRhZykKK21iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nOiJBQkMiOiIiOjQ6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIElBNSBTdHJpbmcgIzQgKEJ1ZmZlciB0b28gc21hbGwgZm9yIGxlbikKK21iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nOiJBQkMiOiIiOjM6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIElBNSBTdHJpbmcgIzUgKEJ1ZmZlciB0b28gc21hbGwgZm9yIHN0cmluZykKK21iZWR0bHNfYXNuMV93cml0ZV9pYTVfc3RyaW5nOiJBQkMiOiIiOjI6TUJFRFRMU19FUlJfQVNOMV9CVUZfVE9PX1NNQUxMCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzAgKExlbiA9IDAsIHNob3J0IGZvcm0pCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjA6IjAwIjoxOjEKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjMSAoTGVuID0gMTI3LCBzaG9ydCBmb3JtKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoxMjc6IjdGIjoxOjEKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjMiAoTGVuID0gMTI3LCBidWZmZXIgdG9vIHNtYWxsKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoxMjc6IjdGIjowOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICMzIChMZW4gPSAxMjgsIGxvbmcgZm9ybSkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46MTI4OiI4MTgwIjoyOjIKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjNCAoTGVuID0gMjU1LCBsb25nIGZvcm0pCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjI1NToiODFGRiI6MjoyCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzUgKExlbiA9IDI1NSwgYnVmZmVyIHRvbyBzbWFsbCkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46MjU1OiI4MUZGIjoxOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICM2IChMZW4gPSAyNTgsIGJ5dGUgb3JkZXIpCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjI1ODoiODIwMTAyIjozOjMKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjNyAoTGVuID0gNjU1MzUsIGxvbmcgZm9ybSkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46NjU1MzU6IjgyRkZGRiI6MzozCisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzggKExlbiA9IDY1NTM1LCBidWZmZXIgdG9vIHNtYWxsKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjo2NTUzNToiODJGRkZGIjoyOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICM5IChMZW4gPSA2NjA1MSwgYnl0ZSBvcmRlcikKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46NjYwNTE6IjgzMDEwMjAzIjo0OjQKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjMTAgKExlbiA9IDE2Nzc3MjE1LCBsb25nIGZvcm0pCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjE2Nzc3MjE1OiI4M0ZGRkZGRiI6NDo0CisKK0FTTi4xIFdyaXRlIC8gUmVhZCBMZW5ndGggIzExIChMZW4gPSAxNjc3NzIxNSwgYnVmZmVyIHRvbyBzbWFsbCkKK21iZWR0bHNfYXNuMV93cml0ZV9sZW46MTY3NzcyMTU6IjgzRkZGRkZGIjozOk1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTAorCitBU04uMSBXcml0ZSAvIFJlYWQgTGVuZ3RoICMxMiAoTGVuID0gMTY5MDkwNjAsIGJ5dGUgb3JkZXIpCittYmVkdGxzX2FzbjFfd3JpdGVfbGVuOjE2OTA5MDYwOiI4NDAxMDIwMzA0Ijo1OjUKKworQVNOLjEgV3JpdGUgLyBSZWFkIExlbmd0aCAjMTIgKExlbiA9IDE2OTA5MDYwLCBidWZmZXIgdG9vIHNtYWxsKQorbWJlZHRsc19hc24xX3dyaXRlX2xlbjoxNjkwOTA2MDoiODQwMTAyMDMwNCI6NDpNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hc24xd3JpdGUuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXNuMXdyaXRlLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNWZkOGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXNuMXdyaXRlLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTM4IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2FzbjF3cml0ZS5oIgorCisjZGVmaW5lIEdVQVJEX0xFTiA0CisjZGVmaW5lIEdVQVJEX1ZBTCAweDJhCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0FTTjFfV1JJVEVfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19hc24xX3dyaXRlX29jdGV0X3N0cmluZyggY2hhciAqaGV4X3N0ciwgY2hhciAqaGV4X2FzbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX2xlbiwgaW50IHJlc3VsdCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNTBdOworICAgIHVuc2lnbmVkIGNoYXIgc3RyWzE1MF0gPSB7IDAgfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFzbjFbMTUwXSA9IHsgMCB9OworICAgIHNpemVfdCBzdHJfbGVuLCBhc24xX2xlbiwgaTsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworCisgICAgbWVtc2V0KCBidWYsIEdVQVJEX1ZBTCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgc3RyX2xlbiA9IHVuaGV4aWZ5KCBzdHIsIGhleF9zdHIgKTsKKyAgICBhc24xX2xlbiA9IHVuaGV4aWZ5KCBhc24xLCBoZXhfYXNuMSApOworCisgICAgcCA9IGJ1ZiArIEdVQVJEX0xFTiArIGJ1Zl9sZW47CisKKyAgICByZXQgPSBtYmVkdGxzX2FzbjFfd3JpdGVfb2N0ZXRfc3RyaW5nKCAmcCwgYnVmICsgR1VBUkRfTEVOLCBzdHIsIHN0cl9sZW4gKTsKKworICAgIC8qIENoZWNrIGZvciBidWZmZXIgb3ZlcndyaXRlIG9uIGJvdGggc2lkZXMgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgR1VBUkRfTEVOOyBpKysgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGJ1ZltpXSA9PSBHVUFSRF9WQUwgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGJ1ZltHVUFSRF9MRU4gKyBidWZfbGVuICsgaV0gPT0gR1VBUkRfVkFMICk7CisgICAgfQorCisgICAgaWYoIHJlc3VsdCA+PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCAoc2l6ZV90KSByZXQgPT0gYXNuMV9sZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHAgKyBhc24xX2xlbiA9PSBidWYgKyBHVUFSRF9MRU4gKyBidWZfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggcCwgYXNuMSwgYXNuMV9sZW4gKSA9PSAwICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZyggY2hhciAqc3RyLCBjaGFyICpoZXhfYXNuMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX2xlbiwgaW50IHJlc3VsdCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNTBdOworICAgIHVuc2lnbmVkIGNoYXIgYXNuMVsxNTBdID0geyAwIH07CisgICAgc2l6ZV90IHN0cl9sZW4sIGFzbjFfbGVuLCBpOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgICBtZW1zZXQoIGJ1ZiwgR1VBUkRfVkFMLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBzdHJfbGVuID0gc3RybGVuKCBzdHIgKTsKKyAgICBhc24xX2xlbiA9IHVuaGV4aWZ5KCBhc24xLCBoZXhfYXNuMSApOworCisgICAgcCA9IGJ1ZiArIEdVQVJEX0xFTiArIGJ1Zl9sZW47CisKKyAgICByZXQgPSBtYmVkdGxzX2FzbjFfd3JpdGVfaWE1X3N0cmluZyggJnAsIGJ1ZiArIEdVQVJEX0xFTiwgc3RyLCBzdHJfbGVuICk7CisKKyAgICAvKiBDaGVjayBmb3IgYnVmZmVyIG92ZXJ3cml0ZSBvbiBib3RoIHNpZGVzICovCisgICAgZm9yKCBpID0gMDsgaSA8IEdVQVJEX0xFTjsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBidWZbaV0gPT0gR1VBUkRfVkFMICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBidWZbR1VBUkRfTEVOICsgYnVmX2xlbiArIGldID09IEdVQVJEX1ZBTCApOworICAgIH0KKworICAgIGlmKCByZXN1bHQgPj0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggKHNpemVfdCkgcmV0ID09IGFzbjFfbGVuICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBwICsgYXNuMV9sZW4gPT0gYnVmICsgR1VBUkRfTEVOICsgYnVmX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIHAsIGFzbjEsIGFzbjFfbGVuICkgPT0gMCApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19hc24xX3dyaXRlX2xlbiggaW50IGxlbiwgY2hhciAqY2hlY2tfc3RyLCBpbnQgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNTBdOworICAgIHVuc2lnbmVkIGNoYXIgYXNuMVsxNTBdOworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgc2l6ZV90IGFzbjFfbGVuLCBpLCByZWFkX2xlbjsKKworICAgIG1lbXNldCggYnVmLCBHVUFSRF9WQUwsIHNpemVvZiggYnVmICkgKTsKKyAgICBtZW1zZXQoIGFzbjEsIDAsIHNpemVvZiggYXNuMSApICk7CisgICAgYXNuMV9sZW4gPSB1bmhleGlmeSggYXNuMSwgY2hlY2tfc3RyICk7CisKKyAgICBwID0gYnVmICsgR1VBUkRfTEVOICsgYnVmX2xlbjsKKworICAgIHJldCA9IG1iZWR0bHNfYXNuMV93cml0ZV9sZW4oICZwLCBidWYgKyBHVUFSRF9MRU4sIChzaXplX3QpIGxlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSByZXN1bHQgKTsKKworICAgIC8qIENoZWNrIGZvciBidWZmZXIgb3ZlcndyaXRlIG9uIGJvdGggc2lkZXMgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgR1VBUkRfTEVOOyBpKysgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGJ1ZltpXSA9PSBHVUFSRF9WQUwgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGJ1ZltHVUFSRF9MRU4gKyBidWZfbGVuICsgaV0gPT0gR1VBUkRfVkFMICk7CisgICAgfQorCisgICAgaWYoIHJlc3VsdCA+PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCAoc2l6ZV90KSByZXQgPT0gYXNuMV9sZW4gKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHAgKyBhc24xX2xlbiA9PSBidWYgKyBHVUFSRF9MRU4gKyBidWZfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggcCwgYXNuMSwgYXNuMV9sZW4gKSA9PSAwICk7CisKKyAgICAgICAgLyogUmVhZCBiYWNrIHdpdGggbWJlZHRsc19hc24xX2dldF9sZW4oKSB0byBjaGVjayAqLworICAgICAgICByZXQgPSBtYmVkdGxzX2FzbjFfZ2V0X2xlbiggJnAsIGJ1ZiArIEdVQVJEX0xFTiArIGJ1Zl9sZW4sICZyZWFkX2xlbiApOworCisgICAgICAgIGlmKCBsZW4gPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmV0dXJuIHdpbGwgYmUgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQSBiZWNhdXNlIHRoZSByZXN0IG9mCisgICAgICAgICAgICAgKiB0aGUgYnVmZmVyIGlzIG1pc3NpbmcKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBICk7CisgICAgICAgIH0KKyAgICAgICAgVEVTVF9BU1NFUlQoIHJlYWRfbGVuID09IChzaXplX3QpIGxlbiApOworICAgICAgICBURVNUX0FTU0VSVCggcCA9PSBidWYgKyBHVUFSRF9MRU4gKyBidWZfbGVuICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9iYXNlNjQuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9iYXNlNjQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTk5ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jhc2U2NC5kYXRhCkBAIC0wLDAgKzEsMTcyIEBACitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICMxIGJ1ZmZlciBqdXN0IHJpZ2h0CittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6IiI6IiI6MDowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzIgYnVmZmVyIGp1c3QgcmlnaHQKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZiI6IlpnPT0iOjU6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICMyIGJ1ZmZlciB0b28gc21hbGwKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZiI6IlpnPT0iOjQ6TUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjMyBidWZmZXIganVzdCByaWdodAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiJmbyI6IlptOD0iOjU6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICMzIGJ1ZmZlciB0b28gc21hbGwKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZm8iOiJabTg9Ijo0Ok1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzQgYnVmZmVyIGp1c3QgcmlnaHQKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZm9vIjoiWm05diI6NTowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzQgYnVmZmVyIHRvbyBzbWFsbAorbWJlZHRsc19iYXNlNjRfZW5jb2RlOiJmb28iOiJabTl2Ijo0Ok1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUgIzUgYnVmZmVyIGp1c3QgcmlnaHQKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZm9vYiI6IlptOXZZZz09Ijo5OjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjNSBidWZmZXIgdG9vIHNtYWxsCittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvb2IiOiJabTl2WWc9PSI6ODpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICM2IGJ1ZmZlciBqdXN0IHJpZ2h0CittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvb2JhIjoiWm05dlltRT0iOjk6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICM2IGJ1ZmZlciB0b28gc21hbGwKK21iZWR0bHNfYmFzZTY0X2VuY29kZToiZm9vYmEiOiJabTl2WW1FPSI6ODpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZW5jb2RlICM3IGJ1ZmZlciBqdXN0IHJpZ2h0CittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvb2JhciI6IlptOXZZbUZ5Ijo5OjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2VuY29kZSAjNyBidWZmZXIgdG9vIHNtYWxsCittYmVkdGxzX2Jhc2U2NF9lbmNvZGU6ImZvb2JhciI6IlptOXZZbUZ5Ijo4Ok1CRURUTFNfRVJSX0JBU0U2NF9CVUZGRVJfVE9PX1NNQUxMCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUgIzEKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiIjoiIjowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUgIzIKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiWmc9PSI6ImYiOjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2RlY29kZSAjMworbWJlZHRsc19iYXNlNjRfZGVjb2RlOiJabTg9IjoiZm8iOjAKKworVGVzdCBjYXNlIG1iZWR0bHNfYmFzZTY0X2RlY29kZSAjNAorbWJlZHRsc19iYXNlNjRfZGVjb2RlOiJabTl2IjoiZm9vIjowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUgIzUKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiWm05dllnPT0iOiJmb29iIjowCisKK1Rlc3QgY2FzZSBtYmVkdGxzX2Jhc2U2NF9kZWNvZGUgIzYKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiWm05dlltRT0iOiJmb29iYSI6MAorCitUZXN0IGNhc2UgbWJlZHRsc19iYXNlNjRfZGVjb2RlICM3CittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6IlptOXZZbUZ5IjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgKElsbGVnYWwgY2hhcmFjdGVyKQorbWJlZHRsc19iYXNlNjRfZGVjb2RlOiJ6bSM9IjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAoVG9vIG11Y2ggZXF1YWwgc2lnbnMpCittYmVkdGxzX2Jhc2U2NF9kZWNvZGU6InptPT09IjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAoSW52YWxpZCBjaGFyIGFmdGVyIGVxdWFsIHNpZ25zKQorbWJlZHRsc19iYXNlNjRfZGVjb2RlOiJ6bT1tYXNkIjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAoU3BhY2UgaW5zaWRlIHN0cmluZykKK21iZWR0bHNfYmFzZTY0X2RlY29kZToiem0gbWFzZCI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5IiAobm8gbmV3bGluZSBub3IgJ1wwJyBhdCBlbmQpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2NzkiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnlcbiIgKExGIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTBhIjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5XHJcbiIgKENSTEYgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MGQwYSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeVxyIiAoQ1IgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MGQiOiIiOk1CRURUTFNfRVJSX0JBU0U2NF9JTlZBTElEX0NIQVJBQ1RFUgorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSAiIChTUCBhdCBlbmQpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2NzkyMCI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSBcbiIgKFNQK0xGIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMGEiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnkgXHJcbiIgKFNQK0NSTEYgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MjAwZDBhIjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5IFxyIiAoU1ArQ1IgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MjAwZCI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5ICAiICgyU1AgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MjAyMCI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GeSAgXG4iICgyU1ArTEYgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MjAyMDBhIjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZ5ICBcclxuIiAoMlNQK0NSTEYgYXQgZW5kKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0Njc5MjAyMDBkMGEiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRnkgIFxyIiAoMlNQK0NSIGF0IGVuZCkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDY3OTIwMjAwZCI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZcbnkiIChMRiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MGE3OSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GXHJ5IiAoQ1JMRiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MGQwYTc5IjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUZccnkiIChDUiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MGQ3OSI6IiI6TUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUYgeSIgKFNQIGluc2lkZSkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDYyMDc5IjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAiWm05dlltRiBcbnkiIChTUCtMRiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjAwYTc5IjoiZm9vYmFyIjowCisKK0Jhc2U2NCBkZWNvZGUgIlptOXZZbUYgXHJ5IiAoU1ArQ1JMRiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjAwZDBhNzkiOiJmb29iYXIiOjAKKworQmFzZTY0IGRlY29kZSAiWm05dlltRiBccnkiIChTUCtDUiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjAwZDc5IjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAiWm05dlltRiAgeSIgKDJTUCBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjAyMDc5IjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGRlY29kZSAiWm05dlltRiAgXG55IiAoMlNQK0xGIGluc2lkZSkKK2Jhc2U2NF9kZWNvZGVfaGV4X3NyYzoiNWE2ZDM5NzY1OTZkNDYyMDIwMGE3OSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GICBccnkiICgyU1ArQ1JMRiBpbnNpZGUpCitiYXNlNjRfZGVjb2RlX2hleF9zcmM6IjVhNmQzOTc2NTk2ZDQ2MjAyMDBkMGE3OSI6ImZvb2JhciI6MAorCitCYXNlNjQgZGVjb2RlICJabTl2WW1GICBccnkiICgyU1ArQ1IgaW5zaWRlKQorYmFzZTY0X2RlY29kZV9oZXhfc3JjOiI1YTZkMzk3NjU5NmQ0NjIwMjAwZDc5IjoiIjpNQkVEVExTX0VSUl9CQVNFNjRfSU5WQUxJRF9DSEFSQUNURVIKKworQmFzZTY0IGVuY29kZSBoZXggIzEKK2Jhc2U2NF9lbmNvZGVfaGV4OiIwMTAyMDMwNDA1MDYwNzA4MDkiOiJBUUlEQkFVR0J3Z0oiOjEzOjAKKworQmFzZTY0IGVuY29kZSBoZXggIzIgKGJ1ZmZlciB0b28gc21hbGwpCitiYXNlNjRfZW5jb2RlX2hleDoiMDEwMjAzMDQwNTA2MDcwODA5IjoiQVFJREJBVUdCd2dKIjoxMjpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitCYXNlNjQgZW5jb2RlIGhleCAjMworYmFzZTY0X2VuY29kZV9oZXg6IjAxMDIwMzA0MDUwNjA3MDgiOiJBUUlEQkFVR0J3Zz0iOjEzOjAKKworQmFzZTY0IGVuY29kZSBoZXggIzQKK2Jhc2U2NF9lbmNvZGVfaGV4OiIwMTAyMDMwNDA1MDYwNyI6IkFRSURCQVVHQnc9PSI6MTM6MAorCitCYXNlNjQgZGVjb2RlIGhleCAjMQorYmFzZTY0X2RlY29kZV9oZXg6IkFRSURCQVVHQndnSiI6IjAxMDIwMzA0MDUwNjA3MDgwOSI6OTowCisKK0Jhc2U2NCBkZWNvZGUgaGV4ICMyIChidWZmZXIgdG9vIHNtYWxsKQorYmFzZTY0X2RlY29kZV9oZXg6IkFRSURCQVVHQndnSiI6IjAxMDIwMzA0MDUwNjA3MDgwOSI6ODpNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTAorCitCYXNlNjQgZGVjb2RlIGhleCAjMworYmFzZTY0X2RlY29kZV9oZXg6IkFRSURCQVVHQndnPSI6IjAxMDIwMzA0MDUwNjA3MDgiOjg6MAorCitCYXNlNjQgZGVjb2RlIGhleCAjNAorYmFzZTY0X2RlY29kZV9oZXg6IkFRSURCQVVHQnc9PSI6IjAxMDIwMzA0MDUwNjA3Ijo3OjAKKworQmFzZTY0IGRlY29kZSBoZXggIzUgKGJ1ZmZlciB0b28gc21hbGwpCitiYXNlNjRfZGVjb2RlX2hleDoiQVFJREJBVUdCdz09IjoiMDEwMjAzMDQwNTA2MDciOjY6TUJFRFRMU19FUlJfQkFTRTY0X0JVRkZFUl9UT09fU01BTEwKKworQmFzZTY0IFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUCitiYXNlNjRfc2VsZnRlc3Q6CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9iYXNlNjQuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmFzZTY0LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmE3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmFzZTY0LmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTI0IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19CQVNFNjRfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19iYXNlNjRfZW5jb2RlKCBjaGFyICpzcmNfc3RyaW5nLCBjaGFyICpkc3Rfc3RyaW5nLCBpbnQgZHN0X2J1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMDBdOworICAgIHNpemVfdCBsZW47CisKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMDApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgc3JjX3N0cmluZywgc2l6ZW9mKHNyY19zdHIpIC0gMSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jhc2U2NF9lbmNvZGUoIGRzdF9zdHIsIGRzdF9idWZfc2l6ZSwgJmxlbiwgc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICkgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfYmFzZTY0X2RlY29kZSggY2hhciAqc3JjX3N0cmluZywgY2hhciAqZHN0X3N0cmluZywgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDAwXTsKKyAgICBzaXplX3QgbGVuOworICAgIGludCByZXM7CisKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMDApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgc3JjX3N0cmluZywgc2l6ZW9mKHNyY19zdHIpIC0gMSApOworICAgIHJlcyA9IG1iZWR0bHNfYmFzZTY0X2RlY29kZSggZHN0X3N0ciwgc2l6ZW9mKCBkc3Rfc3RyICksICZsZW4sIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGJhc2U2NF9lbmNvZGVfaGV4KCBjaGFyICpzcmNfaGV4LCBjaGFyICpkc3QsIGludCBkc3RfYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBOVUxMLCAqcmVzID0gTlVMTDsKKyAgICBzaXplX3QgbGVuLCBzcmNfbGVuOworCisgICAgc3JjID0gdW5oZXhpZnlfYWxsb2MoIHNyY19oZXgsICZzcmNfbGVuICk7CisgICAgcmVzID0gemVyb19hbGxvYyggZHN0X2J1Zl9zaXplICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19iYXNlNjRfZW5jb2RlKCByZXMsIGRzdF9idWZfc2l6ZSwgJmxlbiwgc3JjLCBzcmNfbGVuICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBsZW4gPT0gc3RybGVuKCBkc3QgKSApOworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBkc3QsIHJlcywgbGVuICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2ZyZWUoIHNyYyApOworICAgIG1iZWR0bHNfZnJlZSggcmVzICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGJhc2U2NF9kZWNvZGVfaGV4KCBjaGFyICpzcmMsIGNoYXIgKmRzdF9oZXgsIGludCBkc3RfYnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpkc3QgPSBOVUxMLCAqcmVzID0gTlVMTDsKKyAgICBzaXplX3QgbGVuLCBkc3RfbGVuOworCisgICAgZHN0ID0gdW5oZXhpZnlfYWxsb2MoIGRzdF9oZXgsICZkc3RfbGVuICk7CisgICAgcmVzID0gemVyb19hbGxvYyggZHN0X2J1Zl9zaXplICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19iYXNlNjRfZGVjb2RlKCByZXMsIGRzdF9idWZfc2l6ZSwgJmxlbiwgKHVuc2lnbmVkIGNoYXIgKikgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHNyYyApICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBsZW4gPT0gZHN0X2xlbiApOworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBkc3QsIHJlcywgbGVuICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2ZyZWUoIGRzdCApOworICAgIG1iZWR0bHNfZnJlZSggcmVzICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGJhc2U2NF9kZWNvZGVfaGV4X3NyYyggY2hhciAqc3JjX2hleCwgY2hhciAqZHN0X3JlZiwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBkc3RbMTAwMF0gPSB7IDAgfTsKKyAgICB1bnNpZ25lZCBjaGFyICpzcmM7CisgICAgc2l6ZV90IHNyY19sZW4sIGxlbjsKKworICAgIHNyYyA9IHVuaGV4aWZ5X2FsbG9jKCBzcmNfaGV4LCAmc3JjX2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmFzZTY0X2RlY29kZSggZHN0LCBzaXplb2YoIGRzdCApLCAmbGVuLCBzcmMsIHNyY19sZW4gKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGxlbiA9PSBzdHJsZW4oIGRzdF9yZWYgKSApOworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBkc3QsIGRzdF9yZWYsIGxlbiApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19mcmVlKCBzcmMgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBiYXNlNjRfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jhc2U2NF9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmxvd2Zpc2guZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmEzMTFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmRhdGEKQEAgLTAsMCArMSwzMDggQEAKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjRlZjk5NzQ1NjE5OGRkNzgiOjAKKworQkxPV0ZJU0gtRUNCIEVuY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjMgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmYiOiJmZmZmZmZmZmZmZmZmZmZmIjoiNTE4NjZmZDViODVlY2I4YSI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMzAwMDAwMDAwMDAwMDAwMCI6IjEwMDAwMDAwMDAwMDAwMDEiOiI3ZDg1NmY5YTYxMzA2M2YyIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzQKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiIxMTExMTExMTExMTExMTExIjoiMTExMTExMTExMTExMTExMSI6IjI0NjZkZDg3OGI5NjNjOWQiOjAKKworQkxPV0ZJU0gtRUNCIEVuY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjNQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWYiOiIxMTExMTExMTExMTExMTExIjoiNjFmOWMzODAyMjgxYjA5NiI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM2CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IjAxMjM0NTY3ODlhYmNkZWYiOiI3ZDBjYzYzMGFmZGExZWM3IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzcKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjRlZjk5NzQ1NjE5OGRkNzgiOjAKKworQkxPV0ZJU0gtRUNCIEVuY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjOAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImZlZGNiYTk4NzY1NDMyMTAiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiMGFjZWFiMGZjNmEwYTI4ZCI6MAorCitCTE9XRklTSC1FQ0IgRW5jcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM5CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiN2NhMTEwNDU0YTFhNmU1NyI6IjAxYTFkNmQwMzk3NzY3NDIiOiI1OWM2ODI0NWViMDUyODJiIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEwCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDEzMWQ5NjE5ZGMxMzc2ZSI6IjVjZDU0Y2E4M2RlZjU3ZGEiOiJiMWI4Y2MwYjI1MGYwOWEwIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzExCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDdhMTEzM2U0YTBiMjY4NiI6IjAyNDhkNDM4MDZmNjcxNzIiOiIxNzMwZTU3NzhiZWExZGE0IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEyCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMzg0OTY3NGMyNjAyMzE5ZSI6IjUxNDU0YjU4MmRkZjQ0MGEiOiJhMjVlNzg1NmNmMjY1MWViIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDRiOTE1YmE0M2ZlYjViNiI6IjQyZmQ0NDMwNTk1NzdmYTIiOiIzNTM4ODJiMTA5Y2U4ZjFhIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE0CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDExM2I5NzBmZDM0ZjJjZSI6IjA1OWI1ZTA4NTFjZjE0M2EiOiI0OGY0ZDA4ODRjMzc5OTE4IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE1CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDE3MGYxNzU0NjhmYjVlNiI6IjA3NTZkOGUwNzc0NzYxZDIiOiI0MzIxOTNiNzg5NTFmYzk4IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE2CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiNDMyOTdmYWQzOGUzNzNmZSI6Ijc2MjUxNGI4MjliZjQ4NmEiOiIxM2YwNDE1NGQ2OWQxYWU1IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE3CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDdhNzEzNzA0NWRhMmExNiI6IjNiZGQxMTkwNDkzNzI4MDIiOiIyZWVkZGE5M2ZmZDM5Yzc5IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE4CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDQ2ODkxMDRjMmZkM2IyZiI6IjI2OTU1ZjY4MzVhZjYwOWEiOiJkODg3ZTAzOTNjMmRhNmUzIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE5CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMzdkMDZiYjUxNmNiNzU0NiI6IjE2NGQ1ZTQwNGYyNzUyMzIiOiI1Zjk5ZDA0ZjViMTYzOTY5IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIwCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMWYwODI2MGQxYWMyNDY1ZSI6IjZiMDU2ZTE4NzU5ZjVjY2EiOiI0YTA1N2EzYjI0ZDM5NzdiIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIxCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiNTg0MDIzNjQxYWJhNjE3NiI6IjAwNGJkNmVmMDkxNzYwNjIiOiI0NTIwMzFjMWU0ZmFkYThlIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIyCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDI1ODE2MTY0NjI5YjAwNyI6IjQ4MGQzOTAwNmVlNzYyZjIiOiI3NTU1YWUzOWY1OWI4N2JkIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiNDk3OTNlYmM3OWIzMjU4ZiI6IjQzNzU0MGM4Njk4ZjNjZmEiOiI1M2M1NWY5Y2I0OWZjMDE5IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI0CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiNGZiMDVlMTUxNWFiNzNhNyI6IjA3MmQ0M2EwNzcwNzUyOTIiOiI3YThlN2JmYTkzN2U4OWEzIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI1CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiNDllOTVkNmQ0Y2EyMjliZiI6IjAyZmU1NTc3ODExN2YxMmEiOiJjZjljNWQ3YTQ5ODZhZGI1IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI2CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDE4MzEwZGM0MDliMjZkNiI6IjFkOWQ1YzUwMThmNzI4YzIiOiJkMWFiYjI5MDY1OGJjNzc4IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI3CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMWM1ODdmMWMxMzkyNGZlZiI6IjMwNTUzMjI4NmQ2ZjI5NWEiOiI1NWNiMzc3NGQxM2VmMjAxIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI4CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDEwMTAxMDEwMTAxMDEwMSI6IjAxMjM0NTY3ODlhYmNkZWYiOiJmYTM0ZWM0ODQ3YjI2OGIyIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI5CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMWYxZjFmMWYwZTBlMGUwZSI6IjAxMjM0NTY3ODlhYmNkZWYiOiJhNzkwNzk1MTA4ZWEzY2FlIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMwCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZTBmZWUwZmVmMWZlZjFmZSI6IjAxMjM0NTY3ODlhYmNkZWYiOiJjMzllMDcyZDlmYWM2MzFkIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMxCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmYiOiIwMTQ5MzNlMGNkYWZmNmU0IjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMyCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZiI6IjAwMDAwMDAwMDAwMDAwMDAiOiJmMjFlOWE3N2I3MWM0OWJjIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDEyMzQ1Njc4OWFiY2RlZiI6IjAwMDAwMDAwMDAwMDAwMDAiOiIyNDU5NDY4ODU3NTQzNjlhIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzM0CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZmVkY2JhOTg3NjU0MzIxMCI6ImZmZmZmZmZmZmZmZmZmZmYiOiI2YjVjNWE5YzVkOWUwYTVhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEKK2Jsb3dmaXNoX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNGVmOTk3NDU2MTk4ZGQ3OCI6IjAwMDAwMDAwMDAwMDAwMDAiOjAKKworQkxPV0ZJU0gtRUNCIERlY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjMgorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6ImZmZmZmZmZmZmZmZmZmZmYiOiI1MTg2NmZkNWI4NWVjYjhhIjoiZmZmZmZmZmZmZmZmZmZmZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICMzCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMzAwMDAwMDAwMDAwMDAwMCI6IjdkODU2ZjlhNjEzMDYzZjIiOiIxMDAwMDAwMDAwMDAwMDAxIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzQKK2Jsb3dmaXNoX2RlY3J5cHRfZWNiOiIxMTExMTExMTExMTExMTExIjoiMjQ2NmRkODc4Yjk2M2M5ZCI6IjExMTExMTExMTExMTExMTEiOjAKKworQkxPV0ZJU0gtRUNCIERlY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjNQorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWYiOiI2MWY5YzM4MDIyODFiMDk2IjoiMTExMTExMTExMTExMTExMSI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM2CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IjdkMGNjNjMwYWZkYTFlYzciOiIwMTIzNDU2Nzg5YWJjZGVmIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzcKK2Jsb3dmaXNoX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNGVmOTk3NDU2MTk4ZGQ3OCI6IjAwMDAwMDAwMDAwMDAwMDAiOjAKKworQkxPV0ZJU0gtRUNCIERlY3J5cHQgU1NMZWF5IHJlZmVyZW5jZSAjOAorYmxvd2Zpc2hfZGVjcnlwdF9lY2I6ImZlZGNiYTk4NzY1NDMyMTAiOiIwYWNlYWIwZmM2YTBhMjhkIjoiMDEyMzQ1Njc4OWFiY2RlZiI6MAorCitCTE9XRklTSC1FQ0IgRGVjcnlwdCBTU0xlYXkgcmVmZXJlbmNlICM5CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiN2NhMTEwNDU0YTFhNmU1NyI6IjU5YzY4MjQ1ZWIwNTI4MmIiOiIwMWExZDZkMDM5Nzc2NzQyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEwCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDEzMWQ5NjE5ZGMxMzc2ZSI6ImIxYjhjYzBiMjUwZjA5YTAiOiI1Y2Q1NGNhODNkZWY1N2RhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzExCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDdhMTEzM2U0YTBiMjY4NiI6IjE3MzBlNTc3OGJlYTFkYTQiOiIwMjQ4ZDQzODA2ZjY3MTcyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEyCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMzg0OTY3NGMyNjAyMzE5ZSI6ImEyNWU3ODU2Y2YyNjUxZWIiOiI1MTQ1NGI1ODJkZGY0NDBhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzEzCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDRiOTE1YmE0M2ZlYjViNiI6IjM1Mzg4MmIxMDljZThmMWEiOiI0MmZkNDQzMDU5NTc3ZmEyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE0CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDExM2I5NzBmZDM0ZjJjZSI6IjQ4ZjRkMDg4NGMzNzk5MTgiOiIwNTliNWUwODUxY2YxNDNhIjowCisKK0JMT1dGSVNILUVDQiBFbmNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE1CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiMDE3MGYxNzU0NjhmYjVlNiI6IjA3NTZkOGUwNzc0NzYxZDIiOiI0MzIxOTNiNzg5NTFmYzk4IjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE2CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiNDMyOTdmYWQzOGUzNzNmZSI6IjEzZjA0MTU0ZDY5ZDFhZTUiOiI3NjI1MTRiODI5YmY0ODZhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE3CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDdhNzEzNzA0NWRhMmExNiI6IjJlZWRkYTkzZmZkMzljNzkiOiIzYmRkMTE5MDQ5MzcyODAyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE4CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDQ2ODkxMDRjMmZkM2IyZiI6ImQ4ODdlMDM5M2MyZGE2ZTMiOiIyNjk1NWY2ODM1YWY2MDlhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzE5CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMzdkMDZiYjUxNmNiNzU0NiI6IjVmOTlkMDRmNWIxNjM5NjkiOiIxNjRkNWU0MDRmMjc1MjMyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIwCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMWYwODI2MGQxYWMyNDY1ZSI6IjRhMDU3YTNiMjRkMzk3N2IiOiI2YjA1NmUxODc1OWY1Y2NhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIxCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiNTg0MDIzNjQxYWJhNjE3NiI6IjQ1MjAzMWMxZTRmYWRhOGUiOiIwMDRiZDZlZjA5MTc2MDYyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIyCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDI1ODE2MTY0NjI5YjAwNyI6Ijc1NTVhZTM5ZjU5Yjg3YmQiOiI0ODBkMzkwMDZlZTc2MmYyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzIzCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiNDk3OTNlYmM3OWIzMjU4ZiI6IjUzYzU1ZjljYjQ5ZmMwMTkiOiI0Mzc1NDBjODY5OGYzY2ZhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI0CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiNGZiMDVlMTUxNWFiNzNhNyI6IjdhOGU3YmZhOTM3ZTg5YTMiOiIwNzJkNDNhMDc3MDc1MjkyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI1CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiNDllOTVkNmQ0Y2EyMjliZiI6ImNmOWM1ZDdhNDk4NmFkYjUiOiIwMmZlNTU3NzgxMTdmMTJhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI2CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDE4MzEwZGM0MDliMjZkNiI6ImQxYWJiMjkwNjU4YmM3NzgiOiIxZDlkNWM1MDE4ZjcyOGMyIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI3CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMWM1ODdmMWMxMzkyNGZlZiI6IjU1Y2IzNzc0ZDEzZWYyMDEiOiIzMDU1MzIyODZkNmYyOTVhIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI4CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDEwMTAxMDEwMTAxMDEwMSI6ImZhMzRlYzQ4NDdiMjY4YjIiOiIwMTIzNDU2Nzg5YWJjZGVmIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzI5CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMWYxZjFmMWYwZTBlMGUwZSI6ImE3OTA3OTUxMDhlYTNjYWUiOiIwMTIzNDU2Nzg5YWJjZGVmIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMwCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiZTBmZWUwZmVmMWZlZjFmZSI6ImMzOWUwNzJkOWZhYzYzMWQiOiIwMTIzNDU2Nzg5YWJjZGVmIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMxCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjAxNDkzM2UwY2RhZmY2ZTQiOiJmZmZmZmZmZmZmZmZmZmZmIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMyCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiZmZmZmZmZmZmZmZmZmZmZiI6ImYyMWU5YTc3YjcxYzQ5YmMiOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzMzCitibG93ZmlzaF9kZWNyeXB0X2VjYjoiMDEyMzQ1Njc4OWFiY2RlZiI6IjI0NTk0Njg4NTc1NDM2OWEiOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0JMT1dGSVNILUVDQiBEZWNyeXB0IFNTTGVheSByZWZlcmVuY2UgIzM0CitibG93ZmlzaF9kZWNyeXB0X2VjYjoiZmVkY2JhOTg3NjU0MzIxMCI6IjZiNWM1YTljNWQ5ZTBhNWEiOiJmZmZmZmZmZmZmZmZmZmZmIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwIjoiZmVkY2JhOTg3NjU0MzIxMCI6IiI6TUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RICisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTEiOiJmZWRjYmE5ODc2NTQzMjEwIjoiIjpNQkVEVExTX0VSUl9CTE9XRklTSF9JTlZBTElEX0tFWV9MRU5HVEgKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICMzCitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyIjoiZmVkY2JhOTg3NjU0MzIxMCI6IiI6TUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9LRVlfTEVOR1RICisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjNAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzIjoiZmVkY2JhOTg3NjU0MzIxMCI6ImJlMWU2Mzk0MDg2NDBmMDUiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICM1CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNCI6ImZlZGNiYTk4NzY1NDMyMTAiOiJiMzllNDQ0ODFiZGIxZTZlIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjNgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNSI6ImZlZGNiYTk4NzY1NDMyMTAiOiI5NDU3YWE4M2IxOTI4YzBkIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjNworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2IjoiZmVkY2JhOTg3NjU0MzIxMCI6IjhiYjc3MDMyZjk2MDYyOWQiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICM4CitibG93ZmlzaF9lbmNyeXB0X2VjYjoiZjBlMWQyYzNiNGE1OTY4NyI6ImZlZGNiYTk4NzY1NDMyMTAiOiJlODdhMjQ0ZTJjYzg1ZTgyIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjOQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3OCI6ImZlZGNiYTk4NzY1NDMyMTAiOiIxNTc1MGU3YTRmNGVjNTc3IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTAKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OSI6ImZlZGNiYTk4NzY1NDMyMTAiOiIxMjJiYTcwYjNhYjY0YWUwIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTEKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjNhODMzYzlhZmZjNTM3ZjYiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICMxMgorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3ODY5NWE0YiI6ImZlZGNiYTk4NzY1NDMyMTAiOiI5NDA5ZGE4N2E5MGY2YmYyIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTMKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYyI6ImZlZGNiYTk4NzY1NDMyMTAiOiI4ODRmODA2MjUwNjBiOGI0IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTQKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjFmODUwMzFjMTllMTE5NjgiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICMxNQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3ODY5NWE0YjNjMmQxZSI6ImZlZGNiYTk4NzY1NDMyMTAiOiI3OWQ5MzczYTcxNGNhMzRmIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTYKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZiI6ImZlZGNiYTk4NzY1NDMyMTAiOiI5MzE0Mjg4N2VlM2JlMTVjIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTcKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjAzNDI5ZTgzOGNlMmQxNGIiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICMxOAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3ODY5NWE0YjNjMmQxZTBmMDAxMSI6ImZlZGNiYTk4NzY1NDMyMTAiOiJhNDI5OWUyNzQ2OWZmNjdiIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMTkKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMiI6ImZlZGNiYTk4NzY1NDMyMTAiOiJhZmQ1YWVkMWMxYmM5NmE4IjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMjAKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjEwODUxYzBlMzg1OGRhOWYiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICMyMQorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3ODY5NWE0YjNjMmQxZTBmMDAxMTIyMzM0NCI6ImZlZGNiYTk4NzY1NDMyMTAiOiJlNmY1MWVkNzliOWRiMjFmIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMjIKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQ1NSI6ImZlZGNiYTk4NzY1NDMyMTAiOiI2NGE2ZTE0YWZkMzZiNDZmIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgU1NMZWF5IHJlZmVyZW5jZSAjMjMKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQ1NTY2IjoiZmVkY2JhOTg3NjU0MzIxMCI6IjgwYzdkN2Q0NWE1NDc5YWQiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSBTU0xlYXkgcmVmZXJlbmNlICMyNAorYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3ODY5NWE0YjNjMmQxZTBmMDAxMTIyMzM0NDU1NjY3NyI6ImZlZGNiYTk4NzY1NDMyMTAiOiIwNTA0NGI2MmZhNTJkMDgwIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgNDQwIGJpdHMKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmMDEyMzQ1Njc4OWFiY2RlZjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6ImZlZGNiYTk4NzY1NDMyMTAiOiI5YTJhYjhmMWIwMGM3M2QyIjowCisKK0JMT1dGSVNILVNFVEtFWSBTZXRrZXkgNDQ4IGJpdHMKK2Jsb3dmaXNoX2VuY3J5cHRfZWNiOiJmMGUxZDJjM2I0YTU5Njg3Nzg2OTVhNGIzYzJkMWUwZjAwMTEyMjMzNDQ1NTY2Nzc4ODk5YWFiYmNjZGRlZWZmMDEyMzQ1Njc4OWFiY2RlZjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZmZmIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjJmYjNhYjdmMGVlOTFiNjkiOjAKKworQkxPV0ZJU0gtU0VUS0VZIFNldGtleSA0NTYgYml0cworYmxvd2Zpc2hfZW5jcnlwdF9lY2I6ImYwZTFkMmMzYjRhNTk2ODc3ODY5NWE0YjNjMmQxZTBmMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYwMTIzNDU2Nzg5YWJjZGVmMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmZmZmZiI6ImZlZGNiYTk4NzY1NDMyMTAiOiIiOk1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfS0VZX0xFTkdUSAorCitCTE9XRklTSC1DQkMgRW5jcnlwdAorYmxvd2Zpc2hfZW5jcnlwdF9jYmM6IjAxMjM0NTY3ODlBQkNERUZGMEUxRDJDM0I0QTU5Njg3IjoiRkVEQ0JBOTg3NjU0MzIxMCI6IjM3MzYzNTM0MzMzMjMxMjA0RTZGNzcyMDY5NzMyMDc0Njg2NTIwNzQ2OTZENjUyMDY2NkY3MjIwMDAwMDAwMDAiOiI2Yjc3YjRkNjMwMDZkZWU2MDViMTU2ZTI3NDAzOTc5MzU4ZGViOWU3MTU0NjE2ZDk1OWYxNjUyYmQ1ZmY5MmNjIjowCisKK0JMT1dGSVNILUNCQyBEZWNyeXB0CitibG93ZmlzaF9kZWNyeXB0X2NiYzoiMDEyMzQ1Njc4OUFCQ0RFRkYwRTFEMkMzQjRBNTk2ODciOiJGRURDQkE5ODc2NTQzMjEwIjoiNkI3N0I0RDYzMDA2REVFNjA1QjE1NkUyNzQwMzk3OTM1OERFQjlFNzE1NDYxNkQ5NTlGMTY1MkJENUZGOTJDQyI6IjM3MzYzNTM0MzMzMjMxMjA0ZTZmNzcyMDY5NzMyMDc0Njg2NTIwNzQ2OTZkNjUyMDY2NmY3MjIwMDAwMDAwMDAiOjAKKworQkxPV0ZJU0gtQ0JDIEVuY3J5cHQKK2Jsb3dmaXNoX2VuY3J5cHRfY2JjOiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjA2NjZGNzIyMDAwMDAwMCI6IiI6TUJFRFRMU19FUlJfQkxPV0ZJU0hfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKworQkxPV0ZJU0gtQ0JDIERlY3J5cHQKK2Jsb3dmaXNoX2RlY3J5cHRfY2JjOiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiI2Qjc3QjRENjMwMDZERUU2MDVCMTU2RTI3NDAzOTc5MzU4REVCOUU3MTU0NjE2RDk1OUYxNjUyQkQ1RkY5MkNDMDAiOiIiOk1CRURUTFNfRVJSX0JMT1dGSVNIX0lOVkFMSURfSU5QVVRfTEVOR1RICisKK0JMT1dGSVNILUNGQiBFbmNyeXB0CitibG93ZmlzaF9lbmNyeXB0X2NmYjY0OiIwMTIzNDU2Nzg5QUJDREVGRjBFMUQyQzNCNEE1OTY4NyI6IkZFRENCQTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjA2NjZGNzIyMDAwIjoiZTczMjE0YTI4MjIxMzljYWYyNmVjZjZkMmViOWU3NmUzZGEzZGUwNGQxNTE3MjAwNTE5ZDU3YTZjMyIKKworQkxPV0ZJU0gtQ0ZCIERlY3J5cHQKK2Jsb3dmaXNoX2RlY3J5cHRfY2ZiNjQ6IjAxMjM0NTY3ODlBQkNERUZGMEUxRDJDM0I0QTU5Njg3IjoiRkVEQ0JBOTg3NjU0MzIxMCI6IkU3MzIxNEEyODIyMTM5Q0FGMjZFQ0Y2RDJFQjlFNzZFM0RBM0RFMDREMTUxNzIwMDUxOUQ1N0E2QzMiOiIzNzM2MzUzNDMzMzIzMTIwNGU2Zjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2ZDY1MjA2NjZmNzIyMDAwIgorCitCTE9XRklTSC1DVFIgRW5jcnlwdAorYmxvd2Zpc2hfZW5jcnlwdF9jdHI6IjAxMjM0NTY3ODlBQkNERUZGMEUxRDJDM0I0QTU5Njg3IjoiRkVEQ0JBOTg3NjU0MzIxMCI6IjM3MzYzNTM0MzMzMjMxMjA0RTZGNzcyMDY5NzMyMDc0Njg2NTIwNzQ2OTZENjUyMDY2NkY3MjIwMDAiOiJlNzMyMTRhMjgyMjEzOWNhNjAyNTQ3NDBkZDhjNWI4YWNmNWU5NTY5YzRhZmZlYjk0NGI4ZmMwMjBlIgorCitCTE9XRklTSC1DVFIgRGVjcnlwdAorYmxvd2Zpc2hfZW5jcnlwdF9jdHI6IjAxMjM0NTY3ODlBQkNERUZGMEUxRDJDM0I0QTU5Njg3IjoiRkVEQ0JBOTg3NjU0MzIxMCI6ImU3MzIxNGEyODIyMTM5Y2E2MDI1NDc0MGRkOGM1YjhhY2Y1ZTk1NjljNGFmZmViOTQ0YjhmYzAyMGUiOiIzNzM2MzUzNDMzMzIzMTIwNGU2Zjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2ZDY1MjA2NjZmNzIyMDAwIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Jsb3dmaXNoLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzIyNTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmxvd2Zpc2guZnVuY3Rpb24KQEAgLTAsMCArMSwyNjAgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvYmxvd2Zpc2guaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKSA9PSBzZXRrZXlfcmVzdWx0ICk7CisgICAgaWYoIHNldGtleV9yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgYmxvd2Zpc2hfZGVjcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKSA9PSBzZXRrZXlfcmVzdWx0ICk7CisgICAgaWYoIHNldGtleV9yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfREVDUllQVCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCBibG93ZmlzaF9lbmNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW4sIGRhdGFfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgZGF0YV9sZW4gLCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IGNiY19yZXN1bHQgKTsKKyAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBkYXRhX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCBibG93ZmlzaF9kZWNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW4sIGRhdGFfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0RFQ1JZUFQsIGRhdGFfbGVuICwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisgICAgaWYoIGNiY19yZXN1bHQgPT0gMCkKKyAgICB7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBkYXRhX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBibG93ZmlzaF9lbmNyeXB0X2NmYjY0KCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaXZfb2Zmc2V0ID0gMDsKKyAgICBpbnQga2V5X2xlbiwgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2ZiNjQoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgc3JjX2xlbiwgJml2X29mZnNldCwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCit2b2lkIGJsb3dmaXNoX2RlY3J5cHRfY2ZiNjQoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOworICAgIGludCBrZXlfbGVuLCBzcmNfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NCggJmN0eCwgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBULCBzcmNfbGVuLCAmaXZfb2Zmc2V0LCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KK3ZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9jdHIoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc19ibG93ZmlzaF9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaXZfb2Zmc2V0ID0gMDsKKyAgICBpbnQga2V5X2xlbiwgc3JjX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHN0cmVhbV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2Jsb3dmaXNoX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY3RyKCAmY3R4LCBzcmNfbGVuLCAmaXZfb2Zmc2V0LCBpdl9zdHIsIHN0cmVhbV9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2FtZWxsaWEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDI5ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmRhdGEKQEAgLTAsMCArMSwyMDEgQEAKK0NhbWVsbGlhLTEyOC1FQ0IgRW5jcnlwdCBSRkMzNzEzICMxCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAiOiIwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMCI6IjY3NjczMTM4NTQ5NjY5NzMwODU3MDY1NjQ4ZWFiZTQzIjowCisKK0NhbWVsbGlhLTE5Mi1FQ0IgRW5jcnlwdCBSRkMzNzEzICMxCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAwMDExMjIzMzQ0NTU2Njc3IjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAiOiJiNDk5MzQwMWIzZTk5NmY4NGVlNWNlZTdkNzliMDliOSI6MAorCitDYW1lbGxpYS0yNTYtRUNCIEVuY3J5cHQgUkZDMzcxMyAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjAxMjM0NTY3ODlhYmNkZWZmZWRjYmE5ODc2NTQzMjEwMDAxMTIyMzM0NDU1NjY3Nzg4OTlhYWJiY2NkZGVlZmYiOiIwMTIzNDU2Nzg5YWJjZGVmZmVkY2JhOTg3NjU0MzIxMCI6IjlhY2MyMzdkZmYxNmQ3NmMyMGVmN2M5MTllM2E3NTA5IjowCisKK0NhbWVsbGlhLTEyOC1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYiOiI3N0NGNDEyMDY3QUY4MjcwNjEzNTI5MTQ5OTE5NTQ2RiI6MAorCitDYW1lbGxpYS0xOTItRUNCIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTciOiIwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiI6IkIyMkYzQzM2QjcyRDMxMzI5RUVFOEFEREMyOTA2QzY4IjowCisKK0NhbWVsbGlhLTI1Ni1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiOiIwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRiI6IjJFREYxRjM0MThENTNCODg4NDFGQzg5ODVGQjFFQ0YyIjowCisKK0NhbWVsbGlhLTEyOC1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiI0MzJGQzVEQ0Q2MjgxMTVCN0MzODhENzcwQjI3MEM5NiI6MAorCitDYW1lbGxpYS0xMjgtRUNCIEVuY3J5cHQgUGVybCBFVlAgIzIKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiMEJFMUYxNDAyMzc4MkEyMkU4Mzg0QzVBQkI3RkFCMkIiOjAKKworQ2FtZWxsaWEtMTI4LUVDQiBFbmNyeXB0IFBlcmwgRVZQICMzCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IkEwQTFBQkNEMTg5M0FCNkZFMEZFNUI2NURGNUY4NjM2IjowCisKK0NhbWVsbGlhLTEyOC1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjNAorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiJFNjE5MjVFMEQ1REZBQTlCQjI5RjgxNUIzMDc2RTUxQSI6MAorCitDYW1lbGxpYS0xOTItRUNCIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkNDQ0M2QzRFMTM4QjQ1ODQ4NTE0RDQ4RDBEMzQzOUQzIjowCisKK0NhbWVsbGlhLTE5Mi1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMgorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiNTcxM0M2MkMxNEIyRUMwRjgzOTNCNkFGRDZGNTc4NUEiOjAKKworQ2FtZWxsaWEtMTkyLUVDQiBFbmNyeXB0IFBlcmwgRVZQICMzCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiJCNDBFRDJCNjBFQjU0RDA5RDAzMENGNTExRkVFRjM2NiI6MAorCitDYW1lbGxpYS0xOTItRUNCIEVuY3J5cHQgUGVybCBFVlAgIzQKK2NhbWVsbGlhX2VuY3J5cHRfZWNiOiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6IjkwOURCRDk1Nzk5MDk2NzQ4Q0IyNzM1N0U3M0UxRDI2IjowCisKK0NhbWVsbGlhLTI1Ni1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMQorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkJFRkQyMTlCMTEyRkEwMDA5ODkxOUNEMTAxQzlDQ0ZBIjowCisKK0NhbWVsbGlhLTI1Ni1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMgorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IkM5MUQzQThGMUFFQTA4QTkzODZDRjRCNjZDMDE2OUVBIjowCisKK0NhbWVsbGlhLTI1Ni1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjMworY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IkE2MjNENzExREM1RjI1QTUxQkI4QTgwRDU2Mzk3RDI4IjowCisKK0NhbWVsbGlhLTI1Ni1FQ0IgRW5jcnlwdCBQZXJsIEVWUCAjNAorY2FtZWxsaWFfZW5jcnlwdF9lY2I6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6Ijc5NjAxMDlGQjZEQzQyOTQ3RkNGRTU5RUEzQzVFQjZCIjowCisKK0NhbWVsbGlhLTEyOC1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMQorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IjE2MDdDRjQ5NEIzNkJCRjAwREFFQjBCNTAzQzgzMUFCIjowCisKK0NhbWVsbGlhLTEyOC1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMgorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiMTYwN0NGNDk0QjM2QkJGMDBEQUVCMEI1MDNDODMxQUIiOiJBRTJEOEE1NzFFMDNBQzlDOUVCNzZGQUM0NUFGOEU1MSI6IkEyRjJDRjY3MTYyOUVGNzg0MEM1QTVERkI1MDc0ODg3IjowCisKK0NhbWVsbGlhLTEyOC1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMworY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiQTJGMkNGNjcxNjI5RUY3ODQwQzVBNURGQjUwNzQ4ODciOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjBGMDYxNjUwMDhDRjhCOEI1QTYzNTg2MzYyNTQzRTU0IjowCisKK0NhbWVsbGlhLTEyOC1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjNAorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiMzZBODRDREFGRDVGOUE4NUFEQTBGMEE5OTNENkQ1NzciOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6Ijc0QzY0MjY4Q0RCOEI4RkFGNUIzNEU4QUYzNzMyOTgwIjowCisKK0NhbWVsbGlhLTE5Mi1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMQorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiIyQTQ4MzBBQjVBQzRBMUEyNDA1OTU1RkQyMTk1Q0Y5MyI6MAorCitDYW1lbGxpYS0xOTItQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzIKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiIyQTQ4MzBBQjVBQzRBMUEyNDA1OTU1RkQyMTk1Q0Y5MyI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiNUQ1QTg2OUJEMTRDRTU0MjY0Rjg5MkE2REQyRUMzRDUiOjAKKworQ2FtZWxsaWEtMTkyLUNCQyBFbmNyeXB0IFBlcmwgRVZQICMzCitjYW1lbGxpYV9lbmNyeXB0X2NiYzoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiNUQ1QTg2OUJEMTRDRTU0MjY0Rjg5MkE2REQyRUMzRDUiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjM3RDM1OUMzMzQ5ODM2RDg4NEUzMTBBRERGNjhDNDQ5IjowCisKK0NhbWVsbGlhLTE5Mi1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjNAorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IjM3RDM1OUMzMzQ5ODM2RDg4NEUzMTBBRERGNjhDNDQ5IjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiIwMUZBQUE5MzBCNEFCOTkxNkU5NjY4RTE0MjhDNkIwOCI6MAorCitDYW1lbGxpYS0yNTYtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzEKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkU2Q0ZBMzVGQzAyQjEzNEE0RDJDMEI2NzM3QUMzRURBIjowCisKK0NhbWVsbGlhLTI1Ni1DQkMgRW5jcnlwdCBQZXJsIEVWUCAjMgorY2FtZWxsaWFfZW5jcnlwdF9jYmM6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiJFNkNGQTM1RkMwMkIxMzRBNEQyQzBCNjczN0FDM0VEQSI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiMzZDQkVCNzNCRDUwNEI0MDcwQjFCN0RFMkIyMUVCNTAiOjAKKworQ2FtZWxsaWEtMjU2LUNCQyBFbmNyeXB0IFBlcmwgRVZQICMzCitjYW1lbGxpYV9lbmNyeXB0X2NiYzoiNjAzREVCMTAxNUNBNzFCRTJCNzNBRUYwODU3RDc3ODExRjM1MkMwNzNCNjEwOEQ3MkQ5ODEwQTMwOTE0REZGNCI6IjM2Q0JFQjczQkQ1MDRCNDA3MEIxQjdERTJCMjFFQjUwIjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiJFMzFBNjA1NTI5N0Q5NkNBMzMzMENERjFCMTg2MEE4MyI6MAorCitDYW1lbGxpYS0yNTYtQ0JDIEVuY3J5cHQgUGVybCBFVlAgIzQKK2NhbWVsbGlhX2VuY3J5cHRfY2JjOiI2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0IjoiRTMxQTYwNTUyOTdEOTZDQTMzMzBDREYxQjE4NjBBODMiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6IjVENTYzRjZEMUNDQ0YyMzYwNTFDMEM1QzFDNThGMjhGIjowCisKK0NhbWVsbGlhLTEyOC1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IjE0Rjc2NDYxODc4MTdFQjU4NjU5OTE0NkI4MkJENzE5IgorCitDYW1lbGxpYS0xMjgtQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjE0Rjc2NDYxODc4MTdFQjU4NjU5OTE0NkI4MkJENzE5IjoiQUUyRDhBNTcxRTAzQUM5QzlFQjc2RkFDNDVBRjhFNTEiOiJBNTNEMjhCQjgyREY3NDExMDNFQTRGOTIxQTQ0ODgwQiIKKworQ2FtZWxsaWEtMTI4LUNGQjEyOCBFbmNyeXB0IFBlcmwgRVZQICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9lbmNyeXB0X2NmYjEyODoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiJBNTNEMjhCQjgyREY3NDExMDNFQTRGOTIxQTQ0ODgwQiI6IjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGIjoiOUMyMTU3QTY2NDYyNkQxREVGOUVBNDIwRkRFNjlCOTYiCisKK0NhbWVsbGlhLTEyOC1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiOUMyMTU3QTY2NDYyNkQxREVGOUVBNDIwRkRFNjlCOTYiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6Ijc0MkEyNUYwNTQyMzQwQzdCQUVGMjRDQTg0ODJCQjA5IgorCitDYW1lbGxpYS0xMjgtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiNkJDMUJFRTIyRTQwOUY5NkU5M0Q3RTExNzM5MzE3MkEiOiIxNEY3NjQ2MTg3ODE3RUI1ODY1OTkxNDZCODJCRDcxOSIKKworQ2FtZWxsaWEtMTI4LUNGQjEyOCBEZWNyeXB0IFBlcmwgRVZQICMyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9kZWNyeXB0X2NmYjEyODoiMkI3RTE1MTYyOEFFRDJBNkFCRjcxNTg4MDlDRjRGM0MiOiIxNEY3NjQ2MTg3ODE3RUI1ODY1OTkxNDZCODJCRDcxOSI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiQTUzRDI4QkI4MkRGNzQxMTAzRUE0RjkyMUE0NDg4MEIiCisKK0NhbWVsbGlhLTEyOC1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjJCN0UxNTE2MjhBRUQyQTZBQkY3MTU4ODA5Q0Y0RjNDIjoiQTUzRDI4QkI4MkRGNzQxMTAzRUE0RjkyMUE0NDg4MEIiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjlDMjE1N0E2NjQ2MjZEMURFRjlFQTQyMEZERTY5Qjk2IgorCitDYW1lbGxpYS0xMjgtQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiIyQjdFMTUxNjI4QUVEMkE2QUJGNzE1ODgwOUNGNEYzQyI6IjlDMjE1N0E2NjQ2MjZEMURFRjlFQTQyMEZERTY5Qjk2IjoiRjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTAiOiI3NDJBMjVGMDU0MjM0MEM3QkFFRjI0Q0E4NDgyQkIwOSIKKworQ2FtZWxsaWEtMTkyLUNGQjEyOCBFbmNyeXB0IFBlcmwgRVZQICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9lbmNyeXB0X2NmYjEyODoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiI2QkMxQkVFMjJFNDA5Rjk2RTkzRDdFMTE3MzkzMTcyQSI6IkM4MzJCQjk3ODA2NzdEQUE4MkQ5QjY4NjBEQ0Q1NjVFIgorCitDYW1lbGxpYS0xOTItQ0ZCMTI4IEVuY3J5cHQgUGVybCBFVlAgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2VuY3J5cHRfY2ZiMTI4OiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiJDODMyQkI5NzgwNjc3REFBODJEOUI2ODYwRENENTY1RSI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiODZGODQ5MTYyNzkwNkQ3ODBDN0E2RDQ2RUEzMzFGOTgiCisKK0NhbWVsbGlhLTE5Mi1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6Ijg2Rjg0OTE2Mjc5MDZENzgwQzdBNkQ0NkVBMzMxRjk4IjoiMzBDODFDNDZBMzVDRTQxMUU1RkJDMTE5MUEwQTUyRUYiOiI2OTUxMUNDRTU5NENGNzEwQ0I5OEJCNjNENzIyMUYwMSIKKworQ2FtZWxsaWEtMTkyLUNGQjEyOCBFbmNyeXB0IFBlcmwgRVZQICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9lbmNyeXB0X2NmYjEyODoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiNjk1MTFDQ0U1OTRDRjcxMENCOThCQjYzRDcyMjFGMDEiOiJGNjlGMjQ0NURGNEY5QjE3QUQyQjQxN0JFNjZDMzcxMCI6IkQ1QjUzNzhBM0FCRUQ1NTgwM0YyNTU2NUQ4OTA3Qjg0IgorCitDYW1lbGxpYS0xOTItQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjZCQzFCRUUyMkU0MDlGOTZFOTNEN0UxMTczOTMxNzJBIjoiQzgzMkJCOTc4MDY3N0RBQTgyRDlCNjg2MERDRDU2NUUiCisKK0NhbWVsbGlhLTE5Mi1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjhFNzNCMEY3REEwRTY0NTJDODEwRjMyQjgwOTA3OUU1NjJGOEVBRDI1MjJDNkI3QiI6IkM4MzJCQjk3ODA2NzdEQUE4MkQ5QjY4NjBEQ0Q1NjVFIjoiQUUyRDhBNTcxRTAzQUM5QzlFQjc2RkFDNDVBRjhFNTEiOiI4NkY4NDkxNjI3OTA2RDc4MEM3QTZENDZFQTMzMUY5OCIKKworQ2FtZWxsaWEtMTkyLUNGQjEyOCBEZWNyeXB0IFBlcmwgRVZQICMzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitjYW1lbGxpYV9kZWNyeXB0X2NmYjEyODoiOEU3M0IwRjdEQTBFNjQ1MkM4MTBGMzJCODA5MDc5RTU2MkY4RUFEMjUyMkM2QjdCIjoiODZGODQ5MTYyNzkwNkQ3ODBDN0E2RDQ2RUEzMzFGOTgiOiIzMEM4MUM0NkEzNUNFNDExRTVGQkMxMTkxQTBBNTJFRiI6IjY5NTExQ0NFNTk0Q0Y3MTBDQjk4QkI2M0Q3MjIxRjAxIgorCitDYW1lbGxpYS0xOTItQ0ZCMTI4IERlY3J5cHQgUGVybCBFVlAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2NhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4OiI4RTczQjBGN0RBMEU2NDUyQzgxMEYzMkI4MDkwNzlFNTYyRjhFQUQyNTIyQzZCN0IiOiI2OTUxMUNDRTU5NENGNzEwQ0I5OEJCNjNENzIyMUYwMSI6IkY2OUYyNDQ1REY0RjlCMTdBRDJCNDE3QkU2NkMzNzEwIjoiRDVCNTM3OEEzQUJFRDU1ODAzRjI1NTY1RDg5MDdCODQiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjZCQzFCRUUyMkU0MDlGOTZFOTNEN0UxMTczOTMxNzJBIjoiQ0Y2MTA3QkIwQ0VBN0Q3RkIxQkQzMUY1RTdCMDZDOTMiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiJDRjYxMDdCQjBDRUE3RDdGQjFCRDMxRjVFN0IwNkM5MyI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiODlCRURCNENDREQ4NjRFQTExQkE0Q0JFODQ5QjVFMkIiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiI4OUJFREI0Q0NERDg2NEVBMTFCQTRDQkU4NDlCNUUyQiI6IjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGIjoiNTU1RkMzRjM0QkREMkQ1NEM2MkQ5RTNCRjMzOEMxQzQiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRW5jcnlwdCBQZXJsIEVWUCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZW5jcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiI1NTVGQzNGMzRCREQyRDU0QzYyRDlFM0JGMzM4QzFDNCI6IkY2OUYyNDQ1REY0RjlCMTdBRDJCNDE3QkU2NkMzNzEwIjoiNTk1M0FEQ0UxNERCOEM3RjM5RjFCRDM5RjM1OUJGRkEiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6IjZCQzFCRUUyMkU0MDlGOTZFOTNEN0UxMTczOTMxNzJBIjoiQ0Y2MTA3QkIwQ0VBN0Q3RkIxQkQzMUY1RTdCMDZDOTMiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiJDRjYxMDdCQjBDRUE3RDdGQjFCRDMxRjVFN0IwNkM5MyI6IkFFMkQ4QTU3MUUwM0FDOUM5RUI3NkZBQzQ1QUY4RTUxIjoiODlCRURCNENDREQ4NjRFQTExQkE0Q0JFODQ5QjVFMkIiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiI4OUJFREI0Q0NERDg2NEVBMTFCQTRDQkU4NDlCNUUyQiI6IjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGIjoiNTU1RkMzRjM0QkREMkQ1NEM2MkQ5RTNCRjMzOEMxQzQiCisKK0NhbWVsbGlhLTI1Ni1DRkIxMjggRGVjcnlwdCBQZXJsIEVWUCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY2FtZWxsaWFfZGVjcnlwdF9jZmIxMjg6IjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQiOiI1NTVGQzNGMzRCREQyRDU0QzYyRDlFM0JGMzM4QzFDNCI6IkY2OUYyNDQ1REY0RjlCMTdBRDJCNDE3QkU2NkMzNzEwIjoiNTk1M0FEQ0UxNERCOEM3RjM5RjFCRDM5RjM1OUJGRkEiCisKK0NhbWVsbGlhLUVDQiBFbmNyeXB0IChJbnZhbGlkIGtleSBsZW5ndGgpCitjYW1lbGxpYV9lbmNyeXB0X2VjYjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyIjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAiOiI2NzY3MzEzODU0OTY2OTczMDg1NzA2NTY0OGVhYmU0MyI6TUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RICisKK0NhbWVsbGlhLUVDQiBEZWNyeXB0IChJbnZhbGlkIGtleSBsZW5ndGgpCitjYW1lbGxpYV9kZWNyeXB0X2VjYjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyIjoiMDEyMzQ1Njc4OWFiY2RlZmZlZGNiYTk4NzY1NDMyMTAiOiI2NzY3MzEzODU0OTY2OTczMDg1NzA2NTY0OGVhYmU0MyI6TUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9LRVlfTEVOR1RICisKK0NhbWVsbGlhLTI1Ni1DQkMgRW5jcnlwdCAoSW52YWxpZCBpbnB1dCBsZW5ndGgpCitjYW1lbGxpYV9lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwIjoiIjpNQkVEVExTX0VSUl9DQU1FTExJQV9JTlZBTElEX0lOUFVUX0xFTkdUSAorCitDYW1lbGxpYS0yNTYtQ0JDIERlY3J5cHQgKEludmFsaWQgaW5wdXQgbGVuZ3RoKQorY2FtZWxsaWFfZGVjcnlwdF9jYmM6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYyM2E1MmZjZWE1ZDQ0M2U0OGQ5MTgxYWIzMmM3NCI6IiI6TUJFRFRMU19FUlJfQ0FNRUxMSUFfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKworQ2FtZWxsaWEgU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QKK2NhbWVsbGlhX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NhbWVsbGlhLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjY0ODIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2FtZWxsaWEuZnVuY3Rpb24KQEAgLTAsMCArMSwyMjkgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvY2FtZWxsaWEuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY2FtZWxsaWFfZW5jcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gc2V0a2V5X3Jlc3VsdCApOworICAgIGlmKCBzZXRrZXlfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDE2ICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY2FtZWxsaWFfZGVjcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9kZWMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gc2V0a2V5X3Jlc3VsdCApOworICAgIGlmKCBzZXRrZXlfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDE2ICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwordm9pZCBjYW1lbGxpYV9lbmNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHg7CisgICAgaW50IGtleV9sZW4sIGRhdGFfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBULCBkYXRhX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQpID09IGNiY19yZXN1bHQgKTsKKyAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBkYXRhX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgY2FtZWxsaWFfZGVjcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OworICAgIGludCBrZXlfbGVuLCBkYXRhX2xlbjsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2luaXQoICZjdHggKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggaXZfc3RyLCBoZXhfaXZfc3RyaW5nICk7CisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2RlYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCwgZGF0YV9sZW4sIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOworICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIGRhdGFfbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwordm9pZCBjYW1lbGxpYV9lbmNyeXB0X2NmYjEyOCggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOworICAgIGludCBrZXlfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggJmN0eCApOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ciwga2V5X2xlbiAqIDggKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ciwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCAxNiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCit2b2lkIGNhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4KCBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X2l2X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CisgICAgaW50IGtleV9sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19jYW1lbGxpYV9pbml0KCAmY3R4ICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLCBrZXlfbGVuICogOCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX2NyeXB0X2NmYjEyOCggJmN0eCwgTUJFRFRMU19DQU1FTExJQV9ERUNSWVBULCAxNiwgJml2X29mZnNldCwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDE2ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgY2FtZWxsaWFfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NhbWVsbGlhX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiYTQyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZGF0YQpAQCAtMCwwICsxLDE0ODIgQEAKK0NDTSBzZWxmIHRlc3QKK21iZWR0bHNfY2NtX3NlbGZfdGVzdDoKKworQ0NNIGluaXQgIzEgQUVTLTEyODogT0sKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoxMjg6MAorCitDQ00gaW5pdCAjMiBDQU1FTExJQS0yNTY6IE9LCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOjI1NjowCisKK0NDTSBpbml0ICMzIEFFUy0yMjQ6IGJhZCBrZXkgc2l6ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9zZXRrZXk6TUJFRFRMU19DSVBIRVJfSURfQUVTOjIyNDpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBpbml0ICM0IEJMT1dGSVNILTEyODogYmFkIGJsb2NrIHNpemUKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCittYmVkdGxzX2NjbV9zZXRrZXk6TUJFRFRMU19DSVBIRVJfSURfQkxPV0ZJU0g6MTI4Ok1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKKworQ0NNIGxlbmd0aHMgIzEgYWxsIE9LCitjY21fbGVuZ3Roczo1OjEwOjU6ODowCisKK0NDTSBsZW5ndGhzICMyIG5vbmNlIHRvbyBzaG9ydAorY2NtX2xlbmd0aHM6NTo2OjU6ODpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBsZW5ndGhzICMzIG5vbmNlIHRvbyBsb25nCitjY21fbGVuZ3Roczo1OjE0OjU6ODpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBsZW5ndGhzICM0IHRhZyB0b28gc2hvcnQKK2NjbV9sZW5ndGhzOjU6MTA6NToyOk1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKKworQ0NNIGxlbmd0aHMgIzUgdGFnIHRvbyBsb25nCitjY21fbGVuZ3Roczo1OjEwOjU6MTg6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAorCitDQ00gbGVuZ3RocyAjNiB0YWcgbGVuZ3RoIG5vdCBldmVuCitjY21fbGVuZ3Roczo1OjEwOjU6NzpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBsZW5naHRzICM3IEFEIHRvbyBsb25nICgyXjE2IC0gMl44ICsgMSkKK2NjbV9sZW5ndGhzOjU6MTA6NjUyODE6ODpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCisKK0NDTSBsZW5ndGhzICM4IG1zZyB0b28gbG9uZyBmb3IgdGhpcyBJViBsZW5ndGggKDJeMTYsIHEgPSAyKQorY2NtX2xlbmd0aHM6NjU1MzY6MTM6NTo4Ok1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiOiIwMDAwMDAwMzAyMDEwMEEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI1ODhDOTc5QTYxQzY2M0QyRjA2NkQwQzJDMEY5ODk4MDZENUY2QjYxREFDMzg0MTdFOEQxMkNGREY5MjZFMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiI6IjAwMDAwMDA0MDMwMjAxQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjcyQzkxQTM2RTEzNUY4Q0YyOTFDQTg5NDA4NUM4N0UzQ0MxNUM0MzlDOUU0M0EzQkEwOTFENTZFMTA0MDA5MTYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDA1MDQwMzAyQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjUxQjFFNUY0NEExOTdEMURBNDZCMEY4RTJEMjgyQUU4NzFFODM4QkI2NERBODU5NjU3NEFEQUE3NkZCRDlGQjBDNSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIjoiMDAwMDAwMDYwNTA0MDNBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJBMjhDNjg2NTkzOUE5QTc5RkFBQTVDNEMyQTlENEE5MUNEQUM4Qzk2Qzg2MUI5QzlFNjFFRjEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAwMDAwMDcwNjA1MDRBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJEQ0YxRkI3QjVEOUUyM0ZCOUQ0RTEzMTI1MzY1OEFEODZFQkRDQTNFNTFFODNGMDc3RDlDMkQ5MyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDA4MDcwNjA1QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiNkZDMUIwMTFGMDA2NTY4QjUxNzFBNDJEOTUzRDQ2OUIyNTcwQTRCRDg3NDA1QTA0NDNBQzkxQ0I5NCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiOiIwMDAwMDAwOTA4MDcwNkEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiIwMTM1RDFCMkM5NUY0MUQ1RDFENEZFQzE4NUQxNjZCODA5NEU5OTlERkVEOTZDMDQ4QzU2NjAyQzk3QUNCQjc0OTAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiOiIwMDAwMDAwQTA5MDgwN0EwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI3Qjc1Mzk5QUMwODMxREQyRjBCQkQ3NTg3OUEyRkQ4RjZDQUU2QjZDRDlCN0RCMjRDMTdCNDQzM0Y0MzQ5NjNGMzRCNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIjoiMDAwMDAwMEIwQTA5MDhBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiODI1MzFBNjBDQzI0OTQ1QTRCODI3OTE4MUFCNUM4NERGMjFDRTdGOUI3M0Y0MkUxOTdFQTlDMDdFNTZCNUVCMTdFNUY0RSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSI6IjAwMDAwMDBDMEIwQTA5QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiMDczNDI1OTQxNTc3ODUxNTJCMDc0MDk4MzMwQUJCMTQxQjk0N0I1NjZBQTk0MDZCNEQ5OTk5ODhERCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAwMDAwMEQwQzBCMEFBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiI2NzZCQjIwMzgwQjBFMzAxRThBQjc5NTkwQTM5NkRBNzhCODM0OTM0RjUzQUEyRTkxMDdBOEI2QzAyMkMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIjoiMDAwMDAwMEUwRDBDMEJBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJDMEZGQTBENkYwNUJEQjY3RjI0RDQzQTQzMzhEMkFBNEJFRDdCMjBFNDNDRDFBQTMxNjYyRTdBRDY1RDZEQiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiIwOEU4Q0Y5N0Q4MjBFQTI1ODQ2MEU5NkFEOUNGNTI4OTA1NEQ4OTVDRUFDNDdDIjoiMDA0MTJCNEVBOUNEQkUzQzk2OTY3NjZDRkEiOiIwQkUxQTg4QkFDRTAxOEIxIjoiNENCOTdGODZBMkE0Njg5QTg3Nzk0N0FCODA5MUVGNTM4NkE2RkZCREQwODBGOEU3OENGN0NCMENEREQ3QjMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiOTAyMEVBNkY5MUJERDg1QUZBMDAzOUJBNEJBRkY5QkZCNzlDNzAyODk0OUNEMEVDIjoiMDAzMzU2OEVGN0IyNjMzQzk2OTY3NjZDRkEiOiI2MzAxOEY3NkRDOEExQkNCIjoiNENDQjFFN0NBOTgxQkVGQUEwNzI2QzU1RDM3ODA2MTI5OEM4NUM5MjgxNEFCQzMzQzUyRUU4MUQ3RDc3QzA4QSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiJCOTE2RTBFQUNDMUMwMEQ3RENFQzY4RUMwQjNCQkIxQTAyREU4QTJEMUFBMzQ2MTMyRSI6IjAwMTAzRkU0MTMzNjcxM0M5Njk2NzY2Q0ZBIjoiQUE2Q0ZBMzZDQUU4NkI0MCI6IkIxRDIzQTIyMjBEREMwQUM5MDBEOUFBMDNDNjFGQ0Y0QTU1OUE0NDE3NzY3MDg5NzA4QTc3Njc5NkVEQjcyMzUwNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiIxMkRBQUM1NjMwRUZBNTM5NkY3NzBDRTFBNjZCMjFGN0IyMTAxQyI6IjAwNzY0QzYzQjgwNThFM0M5Njk2NzY2Q0ZBIjoiRDBEMDczNUM1MzFFMUJFQ0YwNDlDMjQ0IjoiMTREMjUzQzM5NjdCNzA2MDlCN0NCQjdDNDk5MTYwMjgzMjQ1MjY5QTZGNDk5NzVCQ0FERUFGIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMxNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJENzgyOEQxM0IyQjBCREMzMjVBNzYyMzZERjkzQ0M2QiI6IkU4OEI2QTQ2Qzc4RDYzRTUyRUI4QzU0NkVGQjVERTZGNzVFOUNDMEQiOiIwMEY4QjY3ODA5NEUzQjNDOTY5Njc2NkNGQSI6Ijc3QjYwRjAxMUMwM0UxNTI1ODk5QkNBRSI6IjU1NDVGRjFBMDg1RUUyRUZCRjUyQjJFMDRCRUUxRTIzMzZDNzNFM0Y3NjJDMEM3NzQ0RkU3RTNDIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMxOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJENzgyOEQxM0IyQjBCREMzMjVBNzYyMzZERjkzQ0M2QiI6IjY0MzVBQ0JBRkIxMUE4MkUyRjA3MUQ3Q0E0QTVFQkQ5M0E4MDNCQTg3RiI6IjAwRDU2MDkxMkQzRjcwM0M5Njk2NzY2Q0ZBIjoiQ0Q5MDQ0RDJCNzFGREI4MTIwRUE2MEMwIjoiMDA5NzY5RUNBQkRGNDg2MjU1OTRDNTkyNTFFNjAzNTcyMjY3NUUwNEM4NDcwOTlFNUFFMDcwNDU1MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMTkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiI4QTE5Qjk1MEJDRjcxQTAxOEU1RTY3MDFDOTE3ODc2NTk4MDlENjdEQkVERDE4IjoiMDA0MkZGRjhGMTk1MUMzQzk2OTY3NjZDRkEiOiJEODVCQzdFNjlGOTQ0RkI4IjoiQkMyMThEQUE5NDc0MjdCNkRCMzg2QTk5QUMxQUVGMjNBREUwQjUyOTM5Q0I2QTYzN0NGOUJFQzI0MDg4OTdDNkJBIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMyMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJENzgyOEQxM0IyQjBCREMzMjVBNzYyMzZERjkzQ0M2QiI6IjE3NjE0MzNDMzdDNUEzNUZDMUYzOUY0MDYzMDJFQjkwN0M2MTYzQkUzOEM5ODQzNyI6IjAwOTIwRjQwRTU2Q0RDM0M5Njk2NzY2Q0ZBIjoiNzRBMEVCQzkwNjlGNUIzNyI6IjU4MTBFNkZEMjU4NzQwMjJFODAzNjFBNDc4RTNFOUNGNDg0QUIwNEY0NDdFRkZGNkYwQTQ3N0NDMkZDOUJGNTQ4OTQ0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIFJGQyAzNjEwICMyMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJENzgyOEQxM0IyQjBCREMzMjVBNzYyMzZERjkzQ0M2QiI6IkE0MzRBOEU1ODUwMEM2RTQxNTMwNTM4ODYyRDY4NkVBOUU4MTMwMUI1QUU0MjI2QkZBIjoiMDAyN0NBMEM3MTIwQkMzQzk2OTY3NjZDRkEiOiI0NEEzQUEzQUFFNjQ3NUNBIjoiRjJCRUVEN0JDNTA5OEU4M0ZFQjVCMzE2MDhGOEUyOUMzODgxOUE4OUM4RTc3NkYxNTQ0RDQxNTFBNEVEM0E4Qjg3QjlDRSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMjIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiJCOTZCNDlFMjFENjIxNzQxNjMyODc1REI3RjZDOTI0M0QyRDdDMiI6IjAwNUI4Q0NCQ0Q5QUY4M0M5Njk2NzY2Q0ZBIjoiRUM0NkJCNjNCMDI1MjBDMzNDNDlGRDcwIjoiMzFENzUwQTA5REEzRUQ3RkRERDQ5QTIwMzJBQUJGMTdFQzhFQkY3RDIyQzgwODhDNjY2QkU1QzE5NyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBSRkMgMzYxMCAjMjMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiRDc4MjhEMTNCMkIwQkRDMzI1QTc2MjM2REY5M0NDNkIiOiJFMkZDRkJCODgwNDQyQzczMUJGOTUxNjdDOEZGRDc4OTVFMzM3MDc2IjoiMDAzRUJFOTQwNDRCOUEzQzk2OTY3NjZDRkEiOiI0N0E2NUFDNzhCM0Q1OTQyMjdFODVFNzEiOiJFODgyRjFEQkQzOENFM0VEQTdDMjNGMDRERDY1MDcxRUI0MTM0MkFDREY3RTAwRENDRUM3QUU1Mjk4N0QiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgUkZDIDM2MTAgIzI0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjoiQUJGMjFDMEIwMkZFQjg4Rjg1NkRGNEEzNzM4MUJDRTNDQzEyODUxN0Q0IjoiMDA4RDQ5M0IzMEFFOEIzQzk2OTY3NjZDRkEiOiI2RTM3QTZFRjU0NkQ5NTVEMzRBQjYwNTkiOiJGMzI5MDVCODhBNjQxQjA0QjlDOUZGQjU4Q0MzOTA5MDBGM0RBMTJBQjE2RENFOUU4MkVGQTE2REE2MjA1OSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTI4ICMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQzYjFhNmJjOGQwZDIyZDZkMWNhOTVjMTg1OTNjY2E1IjoiYTJiMzgxYzdkMTU0NWM0MDhmZTI5ODE3YTIxZGM0MzVhMTU0Yzg3MjU2MzQ2YjA1IjoiOTg4MjU3OGU3NTBiOTY4MmM2Y2E3ZjhmODYiOiIyMDg0ZjM4NjFjOWFkMGNjZWU3YzYzYTdlMDVhZWNlNWRiOGIzNGJkODcyNGNjMDZiNGNhOTlhN2Y5YzQ5MTRmIjoiY2M2OWVkNzY5ODVlMGVkNGM4MzY1YTcyNzc1ZTVhMTliZmNjYzcxYWViMTE2Yzg1YThjNzQ2NzciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTEyOCAjMiAoUD0yNCwgTj0xMywgQT0zMiwgVD02KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NGU4OTE4OWI4MTViNDY0OWM0ZTliMzhjNDI3NWE1YSI6IjhkYjZhZTFlYjk1OTk2MzkzMWQxYzUyMjRmMjllZjUwMDE5ZDJiMGRiN2Y1Zjc2ZiI6IjM3NGM4M2U5NDM4NDA2MWFjMDE5NjNmODhkIjoiY2QxNDlkMTdkYmE3ZWM1MDAwMGI4YzUzOTBkMTE0Njk3ZmFmYjYxMDI1MzAxZjRlM2VhYTlmNDUzNTcxOGEwOCI6ImRmOTUyZGNlMGY4NDMzNzRkMzNkYTk0Yzk2OWVmZjA3YjdiYzI0MThjYTllZTAxZTMyYmMyZmZhODYwMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTI4ICMzIChQPTI0LCBOPTEzLCBBPTMyLCBUPTgpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM2OGYzNWExZjgwZWFhYWNkNmJiMTM2NjA5Mzg5NzI3IjoiMWNjY2Q1NTgyNTMxNmE5NGM1OTc5ZTA0OTMxMGQxZDcxN2NkZmI3NjI0Mjg5ZGFjIjoiODQyYTg0NDU4NDc1MDJlYTc3MzYzYTE2YjYiOiIzNDM5NmRmY2ZhNmY3NDJhZWE3MDQwOTc2YmQ1OTY0OTdhN2E2ZmE0ZmI4NWVlOGU0Y2EzOTRkMDIwOTViN2JmIjoiMWE1ODA5NGYwZThjNjAzNWE1NTg0YmZhOGQxMDA5YzVmNzhmZDJjYTQ4N2ZmMjIyZjZkMWQ4OTdkNjA1MTYxOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTI4ICM0IChQPTI0LCBOPTEzLCBBPTMyLCBUPTEwKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5OTZhMDlhNjUyZmE2YzgyZWFlOGJlNzg4NmQ3ZTc1ZSI6Ijg0Y2RkNzM4MGY0NzUyNGI4NjE2OGVkOTUzODZmYWE0MDI4MzFmMjIwNDUxODNkMCI6ImE4YjNlYjY4ZjIwNWE0NmQ4ZjYzMmMzMzY3IjoiYzcxNjIwZDA0NzdjODEzN2I3N2VjNWM3MmNlZDRkZjNhMWU5ODdmZDlhZjZiNWIxMDg1M2YwNTI2ZDg3NmNkNSI6ImE3ZmJmOWRkMWIwOTllZDNhY2Y2YmNiZDBiNmY3Y2FlNTdiZWU5OWY5ZDA4NGY4MjZkODZlNjljMDdmMDUzZDFhNjA3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xMjggIzUgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTIpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNlZTE4NjU5NGYxMTBmYjc4OGE4YmY4YWE4YmU1ZDRhIjoiZDcxODY0ODc3ZjI1NzhkYjA5MmRhYmEyZDZhMWY5ZjQ2OThhOWMzNTZjNzgzMGExIjoiNDRmNzA1ZDUyYWNmMjdiN2YxNzE5NmFhOWIiOiIyYzE2NzI0Mjk2ZmY4NWUwNzk2MjdiZTMwNTNlYTk1YWRmMzU3MjJjMjE4ODZiYWJhMzQzYmQ2Yzc5YjVjYjU3IjoiYjRkZDc0ZTdhMGNjNTFhZWE0NWRmYjQwMWE0MWQ1ODIyYzk2OTAxYTgzMjQ3ZWEwZDY5NjVmNWFhNmUzMTMwMmE5Y2MyYjM2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xMjggIzYgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdiMmQ1MmE1MTg2ZDkxMmNmNmI4M2FjZTc3NDBjZWRhIjoiZWEzODRiMDgxZjYwYmI0NTA4MDhlMGMyMGRjMjkxNGFlMTRhMzIwNjEyYzNlMWU4IjoiZjQ3YmUzYTJiMDE5ZDFiZWVkZWRmNWI4MGMiOiI3NmNmMzUyMmFmZjk3YTQ0YjRlZGQwZWVmM2I4MWUzYWIzY2QxY2NjOTNhNzY3YTEzM2FmZDUwODMxNWYwNWVkIjoiNzkwNzBmMzMxMTRhOTgwZGZkNDgyMTUwNTFlMjI0ZGZkMDE0NzFhYzI5MzI0MmFmZGRiMzZlMzdkYTFlZThhODhhNzdkN2YxMmNjNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTI4ICM3IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MTg5MzUxYjVjYWVhMzc1YTAyOTllODFjNjIxYmY0MyI6IjQ1MzVkMTJiNDM3NzkyOGE3YzBhNjFjOWY4MjVhNDg2NzFlYTA1OTEwNzQ4YzhlZiI6IjQ4YzA5MDY5MzA1NjFlMGFiMGVmNGNkOTcyIjoiNDBhMjdjMWQxZTIzZWEzZGJlODA1NmIyNzc0ODYxYTRhMjAxY2NlNDlmMTk5OTdkMTkyMDZkOGM4YTM0Mzk1MSI6IjI2YzU2OTYxYzAzNWE3ZTQ1MmNjZTYxYmM2ZWUyMjBkNzdiM2Y5NGQxOGZkMTBiNmQ4MGU4YmY4MGY0YTQ2Y2FiMDZkNDMxM2YwZGI5YmU5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xOTIgIzEgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTFmZDQ1NzQzZDk0NmU2ZDM3MzQxZmVjNDk5NDdlOGM3MDQ4MjQ5NGE4ZjA3ZmNjIjoiZWU3ZTYwNzViYTUyODQ2ZGU1ZDYyNTQ5NTlhMThhZmZjNGZhZjU5YzhlZjYzNDg5IjoiYzZhZWViY2IxNDZjZmFmYWFlNjZmNzhhYWIiOiI3ZGM4YzUyMTQ0YTdjYjY1YjNlNWE4NDZlOGZkN2VhZTM3YmY2OTk2YzI5OWI1NmU0OTE0NGViZjQzYTE3NzBmIjoiMTM3ZDlkYTU5YmFmNWNiZmQ0NjYyMGM1ZjI5OGZjNzY2ZGUxMGFjNjhlNzc0ZWRmMWYyYzViYWQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTE5MiAjMiAoUD0yNCwgTj0xMywgQT0zMiwgVD02KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNDZhMTYzYmJmMTA3NDZlN2MxMjAxNTQ2YmE0NmRlNzY5YmUyM2Y5ZDdjYzJjODAiOiI0NzNiNjYwMDU1OWFlZmI2N2Y3OTc2ZjBhNWNjNzQ0ZmI0NTZlZmQ4NmY2MTU2NDgiOiJmNTgyN2U1MTcwN2Q4ZDY0YmI1MjI5ODViYiI6IjU5OWIxMmViZDMzNDdhNWFkMDk4NzcyYzQ0YzQ5ZWVkOTU0ZWMyN2MzYmE2MjA2ZDg5OWRkYWFiY2EyM2E3NjIiOiIyNmQyYmUzMGUxNzE0MzlkNTRhMGZlYzI5MWM2MDI0ZDFkZTA5ZDYxYjQ0ZjUzMjU4YmExMzYwNDA2ZjkiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWVFQgQUVTLTE5MiAjMyAoUD0yNCwgTj0xMywgQT0zMiwgVD04KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiZGYyNzdhZjIyMjZmMDNlYzFhMGJhN2E4NTMyYWRlNmFlYTliM2Q1MTlmZTJkMzgiOiIwZmY4OWVmZjkyYTUzMGI2NjY4NGNkNzVhMzk0ODFlN2UwNjlhN2QwNWU4OWI2OTIiOiJjYzNjNTk2YmU4ODRlN2NhZWQ1MDMzMTVjMCI6IjRkNjU0NjE2N2IzZWQ1NWYwMWM2MmJkMzg0ZTAyZTEwMzljMGQ2N2VmN2FiZTMzMjkxZmVjYjEzNjI3MmY3M2IiOiI2ZWY2NmE1MmM4NjZiZDVkZjIwZWM1MDk2ZGU5MjE2N2FkODNjYWIwZTA5NWFkMGM3NzhhMjk5ZjEyMjRmMTBjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xOTIgIzQgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTApCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYyZjhlYmExYzJjNWY2NjIxNTQ5M2E2ZmE2YWUwMDdhYWU1YmU5MmY3ODgwMzM2YSI6ImY1NTIyZTM0MDVkOWI3N2NiZjMyNTdkYjJiOTY3NWU2MThlODc0NGEwZWUwM2YwZiI6IjE1NzY5NzUzZjUwM2FhMzI0ZjRiMGU4ZWUwIjoiMWJjMDU0NDBlZTNlMzRkMGYyNWU5MGNhMWVjYmI1NTVkMGZiOTJiMzExNjIxZDE3MWJlNmYyYjcxOTkyM2QyMyI6ImI5MTAzOTQyZGJiYjkzZTE1MDg2NzUxYzliYjBhM2QzMzExMmI1NWY5NWI3ZDRmMzJmZjBiYjkwYTg4Nzk4MTI2ODNmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xOTIgIzUgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTIpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVhNTY2NzE5N2Y0NmI4MDI3OTgwZDBhMzE2NmMwYTQxOTcxM2Q0ZGYwNjI5YTg2MCI6ImQwZTQwMjRkNmUzM2RhYWZjMDExZmU0NjM1NDVlZDIwZjE3Mjg3MmY2ZjMzY2VmYSI6IjYyMzZiMDEwNzlkMTgwZmNlMTU2ZmJhYWI0IjoiMjliZGY2NWIyOTM5NGQzNjNkNTI0M2Q0MjQ5YmFkMDg3NTIwZjhkNzMzYTc2M2RhYTEzNTZiZTQ1OGQ0ODdlNSI6IjQ3OWYzZDQwOGJmYTAwZDFjZDFjOGJmMTFhMTY3Y2U3YWU0YmNkYjAxMWYwNGUzODczMzAxM2I4ZWJlNWU5MmIxOTE3NjQwYyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMTkyICM2IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE0KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMmQ0NDgyZWE4ZTk4YzFjZjMwOTY3MTg5NWExNjYxMDE1MmNlMjgzNDM0YmNhMzgiOiI3ODE2OGU1Y2MzY2RkZjRiOTBkNWJjMTE2MTM0NjUwMzA5MDNlMDE5NmYxZmU0NDMiOiI2ZWUxNzdkNDhmNTliZDM3MDQ1ZWMwMzczMSI6IjllZjJkMGQ1NTZkMDVjZjlkMWVlOWRhYjliMzIyYTM4OWM3NWNkNGU5ZGVlMmMwZDA4ZWVhOTYxZWZjZTg2OTAiOiJlMjMyNGE2ZDU2NDNkZmM4YWVhOGMwOGNiYmMyNDU0OTRhM2RjYmNiODAwYzc5N2MzYWJjZGIwNTYzOTc4Nzg1YmY3ZmQ3MWM2YzFmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0xOTIgIzcgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3MTc3ZmQxMjk2NzRjNmM5MWMxYzg5ZjQ0MDgxMzlhZmUxODcwMjZiODExNDg5MyI6IjJjZWEwZjczMDQ4NjBhNGY0MGEyOGM4Yjg5MGRiNjBmMzg5MWI5OTgyNDc4NDk1ZSI6IjMxYmIyOGYwZTFlNjNjMzZjYTM5NTlkZDE4IjoiMjUyOWE4MzQ2NjgxODcyMTNmNTM0MmExZjNkZWVhMGRjMjc2NTQ3OGM3ZDcxYzljMjFiOWViMTM1MWE1ZjZjYiI6IjViYjdhYTZhYjljMDJhNTcxMmQ2MjM0M2ZiZTYxZjc3NGU1OThkNmI4NzU0NTYxMjM4MGVhMjNkY2ZmYzk1NzRmNjcyYmNhOTJlMzA2NDExIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0yNTYgIzEgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA3NGIxYWU0Y2EzMzQyZmU1YmY2ZjE0YmNmMmYyNzkwNGYwYjE1MTc5ZDk1YTY1NGY2MWU2OTk2OTJlNmY3MSI6IjIzOTAyOWYxNTBiY2NiZDY3ZWRiYjY3ZjhhZTQ1NmI0ZWEwNjZhNGJlZWUwNjVmOSI6IjJlMWUwMTMyNDY4NTAwZDRiZDQ3ODYyNTYzIjoiM2M1ZjU0MDQzNzBhYmRjYjFlZGRlOTlkZTYwZDA2ODJjNjAwYjAzNGUwNjNiN2QzMjM3NzIzZGE3MGFiNzU1MiI6IjljOGQ1ZGQyMjdmZDlmODEyMzc2MDE4MzBhZmVlNGYwMTE1NjM2YzhlNWQ1ZmQ3NDNjYjlhZmVkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0yNTYgIzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODU5NmE2OTg5MGIwZTQ3ZDQzYWVlY2E1NGI1MjAyOTMzMWRhMDZmYWU2M2FhMzI0OWZhYWNhOTRlMjYwNWZlYiI6ImYwYjA2NWRhNmVjYjlkZGNhYjg1NTE1MmQzYjQxNTUwMzdhZGZhNzU4YmE5NjA3MCI6IjIwNDQyZTFjM2YzYzg4OTE5YzM5OTc4Yjc4IjoiNGUwZDNhYTUwMmJkMDNmZTE3NjFiMTY3YzRlMGRmMWQyMjgzMDFkM2ViYWE0YTAyODFiZWNkODEzMjY2ZTI1NSI6ImQ2YTBmMzc3ZjdjMWIxNGRjZGJhNzI5Y2FlNTI3MWIwMjdlNzFjYzc4NTAxNzNlYzI2NTg2N2EyOWViMyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICMzIChQPTI0LCBOPTEzLCBBPTMyLCBUPTgpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJhZTczNDgzZGUyN2I1ODFhN2MxM2YxNzhhNmQ3YmRhMTY4YzFiNGExY2I5MTgwNTEyYTEzZTNhYjkxNGViNjEiOiIyOGVmNDA4ZDU3OTMwMDg2MDExYjE2N2FjMDRiODY2ZTViNThmZTY2OTBhMGI5YzMiOiJkYWY1NGZhZWY2ZTRmYzc4Njc2MjRiNzZmMiI6IjcwMjJlYWE1MmM5ZGE4MjFkYTcyZDJlZGQ5OGY2YjkxZGZlNDc0OTk5Yjc1YjM0Njk5YWViMzg0NjVmNzBjMWMiOiIzNTYzNjdjNmNlZTQ0NTM2NTg0MThkOTUxN2Y3YzZmYWRkY2Q3YzY1YWVmNDYwMTM4Y2YwNTBmNDhjNTA1MTUxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0yNTYgIzQgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTApCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ1YjMyMWIwYWMyZmVkY2UwOTMzZDU3ZDEyMTk1YzdiOTk0MWY0Y2FhOTU1MjkxMjVlZDIxYzQxZmFjNDMzNzQiOiI2YWE2ZWE2NjhkZjYwYjBkYjg1NTkyZDBhODE5YzlkZjllMTA5OTkxNjI3MmFhZmIiOiJiMzVmYjIyNjJlZGZhMTQ5MzhhMGZiYTAzZSI6ImJhNzYyYmJkYTYwMWQ3MTFlMmRmYzlkYmUzMDAzZDM5ZGYxMDQzY2E4NDU2MTJiOGU5ZGM5ZmY1YzVkMDZlYzQiOiI5NzAyN2RlNWVmZmQ4MmM1OGY4ZGJmYjkwOWQ3Njk2ZmJlMmQ1NDkxNjI2MjkxMjAwMWE0ZDc2NWJjMWM5NWM5MGE5NSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZUVCBBRVMtMjU2ICM1IChQPTI0LCBOPTEzLCBBPTMyLCBUPTEyKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ZjRhZjY3NjVjYWQxZDUxMWRiMDdlMzNhYWFmZDU3NjQ2ZWMyNzlkYjYyOTA0OGFhNjc3MGFmMjQ4NDlhYTBkIjoiN2ViZWYyNmJmNGVjZjZmMGViYjJlYjg2MGVkYmY5MDBmMjdiNzViNGE2MzQwZmRiIjoiZGRlMmEzNjJjZTgxYjJiNjkxM2FiYzMwOTUiOiI0MDRmNWRmOTdlY2U3NDMxOTg3YmMwOThjY2U5OTRmYzNjMDYzYjUxOWZmYTQ3YjAzNjUyMjZhMDAxNWVmNjk1IjoiMzUzMDIyZGI5YzU2OGJkNzE4M2ExM2M0MGIxYmEzMGZjYzc2OGM1NDI2NGFhMmNkMjkyN2EwNTNjOTI0NGQzMjE3YTdhZDA1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0yNTYgIzYgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVjOGI1OWQzZTc5ODZjMjc3ZDVhZDUxZTRhMjIzMzI1MTA3NjgwOWViZjU5NDYzZjQ3Y2QxMGI0YWE5NTFmOGMiOiIxMzhlZTUzYjE5MTRkMzMyMmMyZGQwYTRlMDJmYWFiMjIzNjU1NTEzMWQ1ZWVhMDgiOiIyMWZmODkyYjc0M2Q2NjExODllMjA1YzdmMyI6ImYxZTBhZjE4NTE4MGQyZWI2M2U1MGUzN2JhNjkyNjQ3Y2FjMmM2YTE0OWQ3MGM4MWRiZDM0Njg1ZWQ3OGZlYWEiOiI1YjJmMzAyNmYzMGZkZDUwYWNjYzQwZGRkMDkzYjc5OTdmMjNkN2M2ZDNjOGJjNDI1ZjgyYzgyODQxMzY0M2I4Nzk0NDk0Y2I1MjM2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlRUIEFFUy0yNTYgIzcgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYwODIzYjY0ZTBiMmRhM2E3ZWI3NzJiZDU5NDFjNTM0ZTZmZjk0ZWE5NmI1NjRlMmIzOGY4MmM3OGJiNTQ1MjIiOiJhOGJlNzk0NjEzODM1YzQzNjZlNzU4MTdkMjI4NDM4ZjAxMWEyZWM4YTg2Zjk3OTciOiI0ODUyNmYxYmZmYzk3ZGQ2NWU0MjkwNjk4MyI6ImZhYjYyYjNlNWRlZGE3YTljMTEyODY2M2NjODFjNDRiNzRhYjFiZmU3MGJjMWM5ZGVjN2M3ZmQwODE3M2I4MGEiOiJjYzNlZmUwNGQ4NGE0ZWM1Y2I2YTZjMjhkYzJjMmQzODZhMzU5ZDk1NTBkYmRlYzk2M2RkZDU2NDY0YWVkNmQwNjEzMTU5ZDFhYTE4MWRjYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlYmY2MGYwOTY5MDEzYTU0YTNkZWRiMTlkMjBmNmM4IjoiIjoiMWRlOGM1ZTIxZjlkYjMzMTIzZmY4NzBhZGQiOiJlMWRlNmM2MTE5ZDdkYjQ3MTEzNjI4NWQxMGI0N2E0NTAyMjFiMTY5Nzg1NjkxOTBlZjZhMjJiMDU1Mjk1NjAzIjoiMGVhZDI5ZWYyMDVmYmI4NmQxMWFiZTVlZDcwNGI4ODAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjMiAoUD0xLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YWU3YThlOTA3Yjg3MjBmNGIwZDU1MDdjMWQwZGM0MSI6IjBlIjoiN2YxOGFkNDQyZTUzNmEwMTU5ZTdhYThjMGYiOiI5YzliMGYxMWUwMjBjNjUxMmE2M2RmYTFhNWVjOGRmOGJkOGUyYWQ4M2NmODdiODBiMzg2MzU2MjFjNWRjMGQ3IjoiNGMyMDE3ODRiZGFiMTllMjU1Nzg3ZmVjZDAyMDAwYzQ5ZCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMzIChQPTIsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNkNzQ2YWU2Y2FjNWNlZmQwMWYwMjFjMGJiZjRiYzNjIjoiNDM2MCI6IjU5N2IzNjE0ZmY5Y2Q1NjdhZmQxYWFkNGU1IjoiOTA0NDYxOTBlMWZmNWU0OGU4YTA5ZDY5MmIyMTdkZTNhZDBhYjRhNjcwZTdmMWI0MzdmOWMwN2E5MDJjYWQ2MCI6ImUzOGZkYjc3YzFmOGJiYWMyOTAzYTJlYzdiYzBmOWM1NjU0ZCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICM0IChQPTMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNlNGZhMWM2ZjhiMDBmMTI5Njk1NjczNWVlODZlMzEwIjoiM2E2NzM0IjoiYzZhMTcwOTM2NTY4NjUxMDIwZWRmZTE1ZGYiOiIwMGQ1Nzg5NmRhMjQzNWE0MjcxYWZiOWM5OGY2MWE2NTBlNjNhNDk1NTM1N2M0N2QwNzNjNTE2NWRkNGVhMzE4IjoiMzg0YmU2NTdiZmM1ZjM4NWIxNzliZTczMzNlYjNmNTdkZjU0NmIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjNSAoUD00LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3Y2NiYjg1NTdmNmUwOGY0MzZkMDk1N2Q0YmJlN2ZkZiI6IjRjYWJlYjAyIjoiYmI4ZTJlZjJlZDk0ODRmOTAyMWNkYTcwNzMiOiJmYmExZDE4YTc0YTNiYjM4NjcxYWIyODQyZmZhYTQzNGNkNTcyYTBiNDUzMjBlNDE0NTkzMGIzMDA4ZDhkMzUwIjoiMzI1MDFmNDIzNWM0ZGQ5NmU4M2Q1YWI0YzNjMzFjNTIzNDUzYzMxNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICM2IChQPTUsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM3MjVjNzkwNWJmYWNhNDE1OTA4YzYxN2I3OGY4ZGVlIjoiZjU0OTlhNzA4MiI6ImM5OGVjNDQ3M2UwNTFhNGQ0YWM1NmZkMDgyIjoiMTFiYzg3ZjFjMmQyMDc2YmE0N2M1Y2I1MzBkZDZjMmEyMjRmN2EwZjdmNTU0ZTIzZDdkMjkwNzdjNzc4NzY4MCI6ImUzNzhiNzc2MjQyMDY2NzUxYWYyNDlkNTIxYzZlYWViZGZmNDBiMjY0MiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICM3IChQPTYsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgwYmVhZDk4YTA1ZDFiYjE3M2NkNGZjYTQ2M2I4ZmEzIjoiZTQ3OTk5MGJmMDgyIjoiOGExNGE2ZDI1NWFhNDAzMmViZmYzN2EzZDciOiJiYjRlNzA2ZTczZDIxZGY2NmY2NDE3Mzg1OWQ0N2UyNDc1MjdjZDk4MzJlMjBkY2NmZjg1NDhlZDVmNTU0MTA4IjoiODljOTI0NjIzODg3ODQyN2YzNmIxZjZjNjMzZTQ1NDJmMzJiNTBjYThlZGIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTEyOCAjOCAoUD03LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkYzhlYzkxMTg0YmExOGVhZTMxYWMyZDNiMjUyNjczZiI6IjJhNTc3NTk4NjU1MWM4IjoiMGRhNGM5ODhmNTIxZjU2NDgyNTlmMmJlYzIiOiI2ZDU1NzNjOTI3OTg5N2Q3ZDE2MDJkOGE5NWMwNGJiNWNhM2ZhZDJkYmU4OWEwMjRiMzY1MWViMjI3ZTczYmI1IjoiNGYyNTlmMmE3MThmYWVhODUyYTdjNDM1OGRmYTlmNTQ2NzM1NzYzOGFjYWM5MCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICM5IChQPTgsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5Zjk3ZWY1MzE4YjgwMDVmYzcxMzNmYTMxZGQxMjM2IjoiNmQ5NzJhNjczZmJlMWNhMSI6IjAxY2U5ODE0YzYzMjlkYmVlMWQwMmIxMzIxIjoiODU4NTNmMTIwOTgxZjMzY2YxZDUwZmRlNmI4YmM4NjVmZTk4OGE5ZjEyNTc5YWNkYjMzNmY5Zjk5MmIwOGI4OSI6IjJmMTJhN2U3YWNlY2FlNWQyNTYzMzA5ZWZjMTkzNjhjZGVlODI2NjUzOGNhODlkMyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxMCAoUD05LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMTc5NDRiZmFlZWI4MDhlZWQ2NmFlNzI0MmFiNTQ1ZiI6IjdjYWFlMjY0MGU3MzQ1MzlkMyI6IjkxMGIzZGI2NGRmMzcyOGNhOTgyMTllMDFiIjoiZWRmNjRmOThiM2FiNTkzY2JjZjY4YWIzN2E4Yzk0NzJlNDljYjg0OWQ0YTc0NGRlYWU5MjVhNWE0M2ZhZjI2MiI6IjBkYWU4YjNjY2YwYjQzOWY2ZmY4ZWU0YTIzM2RmYjc3NTNmNmJmZTMyMWIzZTI2OTU5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzExIChQPTEwLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZmI5ZGY2ZjYzODg0N2Y1ZGUzNzFmMDAzZGQ5MzhmNCI6ImUxMGNjMzZiYzFjNWQzYzY0NmFiIjoiYzlkZGY2MWMwNTJmMzUwMmFkNmIyMjk4MTkiOiI0Zjk5MzhkNWJjM2RjYmU0N2Y2YjI1NmQ1ZTk5NzIzZDA4OTFlNTBjNjE3NWFiYTQxYjAxMWU0Njg2MTEzYzQ5IjoiN2Y3OTczNjdkZTUwYmU2ZGMwNGU0Y2YwZDhjMjQxODlhZmZkMzUwNjBjYjdjYTNkZDEzNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxMiAoUD0xMSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDA2ZmY3ZDMxNTNjYWY5MDZlYzc5MjlmNWFlZjkyNzYiOiIzMWJlMWIyNDFjYWU3OWM1NGMyNDQ2IjoiNTdkYjE1NDFhMTg1YmQ5Y2RjMzRkNjIwMjUiOiI3ZDk2ODFjYWMzOGU3NzhmYmExMWY0NDY0ZjY5ZWQ5ZWJmZWEzMWI3ZmZjYWYyOTI1YjMzODFjNjVkOTc1OTc0IjoiOWRkOGE0MjQ0ZmJkYjMwYjYyNDU3OGE2MjVjNDMyMzM0NzZiYmI5NTlhY2Q5ZWRlYmUyODgzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzEzIChQPTEyLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMjYzMzFlOThhYmE5ZThjMjNhOWU4YTkxZDBiMGM5NyI6ImE4MjIwMGVmM2EwOGMzOTBkZWM1Y2JmOSI6ImJjY2ZlNjliYmExNjhiODFjYmRmN2QwMThhIjoiMjZlMDExMTQzYTY4NmE3MjI0ZGRiOGM1YjFlNWQzMTcxM2ZhMjJjMzg2Nzg1ZTJjMzRmNDk4YWU1NmQwN2VkNSI6ImFkZjRmYzZmOWJlMTEzMDY2YzA5MjQ4ZmNiNTZhOWMxYTFjM2JiMTZmYmI5ZmJhZWRhY2RiMTJiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzE0IChQPTEzLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMzIwODhkNTBkZjlhYmExNGQ5MDIyYzg3MGEwY2I4NSI6IjRiMTA3ODhjMWEwM2JjYTY1NmYwNGYxZjk4IjoiZTE2YzY5ODYxZWZjMjA2ZTg1YWFiMTI1NWUiOiIwZWZmN2Q3YmNjZWI4NzNjMzIwM2E4ZGY3NGY0ZTkxYjA0YmQ2MDdlYzExMjAyZjk2Y2ZlYjk5ZjViY2RiN2FhIjoiODlmMTViMWNiNjY1YTg4NTFkYTAzYjg3NGNhNmY3MzI0MmYyZjIyNzM1MGMwMjc3ZTRlNzJjZGFhNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxNSAoUD0xNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzMwMWM5MDdiOWQyYWFhYzM1NWM1NDE2ZmYyNWM1OWIiOiI0ODQzMDBhYTNhNTA2YWZjZDMxM2I0OWVhZDhkIjoiNzMwNGI2NWI2ZGFiNDY2MjczODYyYzg4YjkiOiIyYzVkMTE0ZWZmNjJjNTI3Y2MyZTAzYzMzYzU5NWE4MGZlNjA5YmZjMGZlMTNjZTMzODBlZmUwNWQ4NWNjZWFjIjoiOTI4Y2E1OGIwZDM3M2RjNTBjNTJhZmFjNzg3Y2U4ZWViNWQ1YjQ5MzY2MTI1OWE5ZDkxZWEzMWE1ZjdlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzE2IChQPTE1LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOGJlNDZkMjcxYmY4NjhjMTk4MDUyMzkxZjhhMjE0NyI6IjYxYmQxMzg1YmU5MjA5N2U4NjY1NTBhNTUyNzhmMCI6IjY3NThmNjdkYjliZmVhNWYwZTA5NzJlMDhiIjoiYzZkZTNiZTk3ZjExZDBlMmFiODVjOTM1M2I3ODNmMjViMzczNjZhNzhhMjAxMmNlY2Y1YjdhODcxMzhiM2M4NiI6IjdjOWZhOGQ5OWIzOGY4MjUzMTVlY2U2YTI2MTNmNTVlOTAyZjI5NmRjY2U4NzAyNjNhZTUwY2RhNGZhZGFlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzE3IChQPTE2LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MDAxMGVkOTBlNjE4NmVjYWQ0MWYwZDNjN2M0MmZmOCI6ImJlMzIyZjU4ZWZhN2Y4YzY4YTYzNWUwYjljY2U3N2YyIjoiYTVmNGY0OTg2ZTk4NDcyOTY1ZjVhYmNjNGIiOiIzZmVjMGU1Y2MyNGQ2NzEzOTQzN2NiYzgxMTI0MTRmYzhkYWNjZDFhOTRiNDlhNGM3NmUyZDM5MzAzNTQ3MzE3IjoiOGU0NDI1YWU1NzM5NzRmMGYwNjkzYTE4OGI1MjU4MTJlZWYwOGUzZmIxNWY0MjI3ZTBkOTg5YTRkNTg3YThjZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMxOCAoUD0xNywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzllYWU1YmFkZGM1ODg3YmRmMzAzMWZkMWQ2NTA4NWIiOiIwMDEzNDNlNjE5MWY1ZjE3MzhlN2QxOWQ0ZWVjMmI5NTkyIjoiOWRhNTk2MTQ1MzVkMWZhZDM1ZjJlY2UwMGYiOiI0NjYwMzUwMGFmOWU0ZTdhMmY5NTQ1NDExYTU4YjIxYTZlZmQyMWYyYjVmMzE1ZDAyZDk2NGMwOTI3MDE0NWIzIjoiMjE2MmUyN2JmYmYxZDAwZjI0MDQ3NTRhMjU0NjY1ZmQ5MjcwZjBlZGI0MTU5OTM1ODhiMjUzNWUyZTBlNGZkMDg2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzE5IChQPTE4LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMTRlZGEwZjk1ODQ2NTI0NmZlNmFiNTQxZTVkZmQ3NSI6IjYxNzg2OGFlOTFmNzA1YzZiNTgzYjVmZDdlMWU0MDg2YTFiYiI6IjMyYjYzY2E3ZTI2OTIyM2Y4MGE1NmJhYWFhIjoiNzMzZjhlNzY3MGRlMzQ0NjAxNjkxNjUxMGRmZTcyMmNlNjcxNTcwMTIxZDkxMzMxYTY0ZmViM2QwM2YyMTBlNiI6ImIyZGMxZTU0OGIzZDNmMjI1YTM0MDgyZjQzOTE5ODBhMDc4OGI0Y2MzNjg1MmZkNjRhNDIzZmI4ZTg3MjI1MmIyNDhlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzIwIChQPTE5LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNWU3MTQ3ZjU2YmE0NTMwYjg3OTlhYmFiZWI4Mjc3MiI6IjJmM2JmMGI1NjY0NDA5MTJhMWU0N2EwYzA3ZjFjZmQzOWNiNDQwIjoiYmRkMzhlMTczZmIyMGI5ODE2NTljNTk3ZDYiOiIzYTA2OWEyYmZkYTQ0YWJiYjBhODJhOTdlNWU5MDQ3MjU4YzgwM2RhMmM2NjE5MGQ3NzE0OWUwZjAxMGIzYWY5IjoiYmQ2MjY1ZGNiYTllMTRjNTllNTE1ZTM5NWRjNjBiZDA1MzM0NWZhNmQ3NTY4YzczOGUzYTdmZGYxNDJkOGYyZDE1NjJjMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMyMSAoUD0yMCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzhjNDZlMzI0OWNhMjhlMWVmMDUzMWQ4MGZkMzdjMTIiOiI0ODAyNDIyYzliM2I0NDU5YmEyNmU3ODYzYWQ4N2IwYzE3MmNmZTRiIjoiNWRlNDFhODZjZTNmM2ZiMWI2ODViM2NhNGQiOiJlOThhNzdmMmE5NDFiMzYyMzI1ODk0ODZiMDVmNDI3ODI3NTU4ODY2NWEwNmQ5OGFlYzk4OTE1Y2M1NjA3ZTA2IjoiZGFlYTIyMzRlYTQzMzUzM2JmMDcxNmFiZTFhYTM4NDRiNmQzYzUxZTlkNWNhM2Q4ZWM1MDY1NjMwZDJkZTA3MTdjZGViN2Q1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzIyIChQPTIxLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ODgzMDAyYmYxM2IzYTk0YjI0NjcyMjU5NzBkZjkzOCI6ImQ1MTZiYmZmNDUyZTc3MDZjOTFjN2FjZTNlOWJhYTc2ZDY1ZmY3MDUwZiI6IjgxOGE3MDJkNWM4ZWU5NzNiMzRlOWFjZGExIjoiNTQ1YWVhYzczN2MwY2EyYTNkNWUxZmQ5NjY4NDBjM2EwZDcxZTAzMDFhYmJlOTljN2FmMThkMjRjYzdlOTYzMyI6ImI4NTI0MmZkYzA2MzQ0ZjJiZDlhOTdiNDA4OTAyZWJjZDIyYWVjZTNkNDJmMmRhNGRkNGQ4MTdjOWZhMmQ0NGJjMDIxNjNhMGE5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzIzIChQPTIyLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1Y2VhMDBlZTQ0Y2ZiOWNmYmI1OThkMzgxMmUzODBlZiI6IjMzYmZkMDcxM2YzMGZjYWM4ZjdmOTU5MjBhYzZkOWI4MDNkZGQ1NDgwZGQ4IjoiOTQ4Nzg4YTljODE4OGNiOTg4NDMwYTdlYmQiOiI1MDQyMmM1ZTZhMGZiODIzMWIzYmI2ZTJmODk2MDcwMTliZTZhZDkyYTRkYWU4ZTBmZTNmOWU0ODY0NzYwMDRiIjoiYjE2ODc0N2RlYTNhZTBmYmVkZTQ0MDJhZjlhM2RjMzE4NWQ2ZDE2MmY4NTlkODI4MTAxNjgyZGUzMjkyMzc4OGM3MDI2MmI4NDgxNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMTI4ICMyNCAoUD0yMywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2I4M2Y3Nzc1MWU3MjcxMTQwMWNiYmY0ZjYxYWEwZWQiOiJlZWRlMDFiMDhmOWEzMDNjZGYxNGM5OWQ3YTQ1NzMyOTcyYzZlZmYyYTFkYjA2IjoiYzBiNDYxYjJlMTViOGIxMTZlZjkyODE3MDQiOiIyYmQxMTIyMzFmOTAzZmEwZGZmMDg1ZGI0OGEyZTJhOTZlYzAxOTkyNDliMDA1ZDVhYjRjMmVhYjc1M2Y5YWQwIjoiZmViMTE0YjdiZDNiNDM0OTdiNjI0NTRhNjc1YTYzMmMzNTQ2ZDI4MDI0NjJjNmFmNTc2NDdlZmRhMTE5YzU5ODYyY2Q1ZGQzOTA0ZWZjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xMjggIzI1IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0M2MxMTQyODc3ZDlmNDUwZTEyZDdiNmRiNDdhODViYSI6ImI1MDZhNmJhOTAwYzExNDdjODA2Nzc1MzI0YjM2ZWIzNzZhYTAxZDRjM2VlZjZmNSI6Ijc2YmVjZDlkMjdjYThhMDI2MjE1ZjMyNzEyIjoiNmE1OWFhY2FkZDQxNmU0NjUyNjRjMTVlMWExZTliZmEwODQ2ODc0OTI3MTBmOWJkYTgzMmUyNTcxZTQ2ODIyNCI6IjE0YjE0ZmU1YjMxNzQxMTM5Mjg2MTYzOGVjMzgzYWU0MGJhOTVmZWZlMzQyNTVkYzJlYzA2Nzg4NzExNGJjMzcwMjgxZGU2ZjAwODM2Y2U0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzEgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDg2ZTI5NjdjZGU5OWU5MGZhYWVhOGE5NGUxNjhiZjBlMDY2YzUwM2E4NDlhOWYzIjoiIjoiOTI5NTQyY2Q2OTBmMWJhYmNmMTY5NmNiMDMiOiI1OGY3MGJhYjI0ZTBhNjEzN2U1Y2QzZWIxODY1NmYyYjVjY2RkYzNmNTM4YTAwMDBjNjUxOTBlNGEzNjY4ZTcxIjoiM2JmOWQ5M2FmNmZmYWM5YWM4NGNkMzIwMmQ0ZTBjYzgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMiAoUD0xLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5OTJkMzg3NjhiMTFhMjM2OTQ1YmQ0YjMyN2MzNzI4ZmFjMjRjMDkxMjM4YjY1NTMiOiIxYyI6ImIyNDhhOTBiODRiMDEyMmE1YWQ4ZTEyNzYwIjoiMjdjYWJjNDBkYTBlMWVkYTBlYTVmOGFiYmI3YzE3OWUzMDc3NjI1MGE3YjMwZDcxMWIwZTEwNmM1ZWU5ZDg0YSI6IjFhOTZmNThjM2YzOGM0NGQxYTM0NWYzZTJkYTY2NzlmMjAiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMyAoUD0yLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MDEyZGI0MGZmNmFlMjNjMWUxY2U0Mzc2OGM1OTM2YzQ0MDBiMGU3OWFlNzdmMzAiOiIwYzZjIjoiYjY3ZTUwMGIzNWQ2MGFkNzI2NDI0MDAyN2MiOiI0MGFmZmQzNTU0MTYyMDAxOTFiYTY0ZWRlYzhkN2QyN2VhZDIzNWE3YjJlMDFhMTI2NjIyNzNkZWIzNjM3OWI4IjoiYzk5NmVmM2Q2ZWY5Zjk4MTU1NzUwNmVjYzg3OTdiYmFhYWE3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzQgKFA9MywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmExNWNjN2YwZGUyOTRkNzM0MWIxZmQ3OTMyNmM4YmU3OGU2NzgyMjM0M2MxOTkyIjoiYmNiODk4IjoiZTUyNTdhZWQyYmRhMDQ5NWFhNDQ1OTFkYjQiOiIzMWEwMzM4YzM4Mzk5MzFmYTFkZDUxMzFjYjc5NmM0YzZjZmRlOWZiMzM2ZDhhODBhYzM1ZGVjNDYzYmU3YTk0IjoiNjhmMDgyOThkOWEyMTQ3Nzc2ZGNhOWMxYTQyMzgyYmNlMzIzYjIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjNSAoUD00LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNTMzMGE4NDQ3ZDc0YTc5ODdmYjcxOGNmYWUyNDZiNWM3ZTA1Nzk5MTA2NGVlYWYiOiJiNDZiMzQzZSI6IjJlZjI5ZDYyYjQwZDg2NDM4NDg3OTdjZGU4IjoiMTIyNWIwMzZlNjA0NGRmNTIzMTQwMTY3NjBlOTI3NTBkZTA5MzYxMjAzOTVkZTc1MGEyYzU0YTdmYTBjZWE4MiI6ImMyYzM5ZDZmOTM0NGUyZGUwNjRmMjY5ZDA2NWEyYTYxMDg2MDU5MTYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjNiAoUD01LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMDQxOTE0NWFlOTY2NTkxYjQwOGMyOWU1ZmQxNGQ5MTEyNTQyOTA5YmU1MzYzZjciOiI4Y2VhZWI4OWZkIjoiMjdlNmIyYTQ4MmJiYzZmMTM3MDIwMDU3MDgiOiJlMDRlODFlODYwZGFmOTY5NjA5OGM3MjMwODVkODAyM2MyNDBlYmU3YTY0MzEzMWUzNTM1OWFiMDRiZDY1MGZlIjoiZWM5ZDVlZDM2MjQzZGRmNzdiMzNkOGNmMjk2M2JhNzZmZDRlMTlmM2M1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzcgKFA9NiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzQ4YWQ1MDMzODhhMzQwNDFhN2JkYWU2MzYxZDU3ODk0MzU3YzMzM2JhY2YwMmNhIjoiMjRkNjg4MGFlZDdlIjoiNTE4Yjc5ZDE5NDU3OWIxOWYyZDg4NDViNzAiOiI2OTFkZDk4ZjYxZmQyMTNiMDg0MGVjNWE2ZjA2ZWY5YTE0MjBiZTBkNTliZGU1ZTQzNTQ2MzQ3YTJhODY1YTk0IjoiMjcwMTIwZjk2MzRlYzE1NTM2ZTIxZDk2MWM2NzUwNzBlYzRjZmY5MDM3YmMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjOCAoUD03LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiOTMwY2NhMzBhM2ZkMjMwYzIzN2M4ZjNjYzY3OTJkMGM0MDg0ZGZmNWMxOGQ3NzUiOiIyYTc1NWUzNjIzNzNlZiI6Ijc1NzQ4MDJmZDgyZmU5NmMwNTQzMWFjZDQwIjoiMWNmODM5MjhiNmE5ZTUyNWZlNTc4YzVjMGY0MGMzMjJiZTcxYjMwOTIyMzliZmY5NTRkZDY4ODM3MzhkNmQ3MSI6ImYwNjIzOGIwNDUwZmQxZjRiNmNhYjEzODNhZGI0MjBjNDcyNGFhN2JkZmVmYjciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjOSAoUD04LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMTRjMTM2OTk5ZTQxZDEzN2JkN2JhMTcyMDFhOWZhNDA2MDI1ODY4MzM0ZTM5YjMiOiI0ZDU0ZDhiMDZiMjA0NDQ1IjoiNjVmN2EwZjRjMGY1YmJhOWQyNmY3ZTBkZGIiOiI1YzdjZTQ4MTliMzBiOTc1YWU2Y2U1OGRjYzFiZmEyOWE4YjZkZGE4ZjRiNzZjN2UyMzUxNjQ4Nzc0NWU4MjljIjoiMmJhZjkwYzQ5MGIxMWY5NjA3NDgyMzYyYWIzZjE1N2M0MmQwZTljNmM1Y2ZmY2YwIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzEwIChQPTksIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImExOWY2YmUwNjJlYzBhYWYzMzA0NmJkNTI3MzRmMzMzNmM4NWQ4MzY4YmVmODZhYiI6IjEzNTExYWU1ZmY2YzY4NjBhMSI6IjdmMmQwN2Y4MTY5YzU2NzJiNGRmN2Y2Y2FjIjoiZDY4ZDVmNzYzZGI2MTExYzVkNjMyNGQ2OTRjYjAyMzZiZWFiODc3ZGFhZTgxMTVlY2I3NWQ2MDUzMDc3N2I1OCI6ImIzODU5Yjc1NzgwMmViZDA0ODQ2N2ZkOGUxMzllYjllZThmY2RjYTQ1ZWQ4N2RjMWM4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzExIChQPTEwLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZTFjODI2MzM0NTA4MWQyZGZhOWFmZGYzNzY3NTk3MTEzNWUxNzhkZjU1NGE0ZDgiOiJmNzc3YWJhMWZhNzBmOTRlNmRlOSI6ImEzMDFiYjgyZjkxYTU4MmRiMDEzNTVjMzg4IjoiOWFkNTJjMDQxMzkwZDBkNGFhZjY1YTQ2NjdjMzIzOWM5NWU3ZWFlNjE3OGFjYzIzZmI0ZTcwYTg1MmQ0ODNjNiI6IjlkOGJmZjZkMmRjZGU3NzEwNGFjNmFiYTAyNWFiYzAxNDE2YTdjYTlmMDk2YWIyNTI5Y2IiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMTIgKFA9MTEsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI0OGQzNmJkMTVmNThlNDdmY2YxYzk0ODI3MjM1NTgyMWY4NDkyZTZlNjlmMzY2MSI6IjMzNzA5ZDljNzkwNmUyZjgyZGQ5ZTIiOiI5ZThkNDkyYzMwNGNmNmFkNTkxMDJiY2EwZSI6IjllYzA4YzdlZDZiNzA4MjNkODE5ZTlhYjAxOWU5OTI5MjQ5Zjk2NmZkYjIwNjkzMTFhMGRkYzY4MGFjNDY4ZjUiOiI5MTE0ZDM2Yjc5YjE5MThiMjcyMGY0MGNkZGNlNjZkZjliNDgwMmY3MzdiZWE0YmQ4ZjUzNzgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMTMgKFA9MTIsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc3YTY3ZmI1MDRiOTYxMDI4NjMzMzIxMTExYWFjMmMzMGViNmQ3MWE4Y2Y3MjA1NiI6IjEwNTU0YzA2MmQyNjlmZjZkY2Q5ODQ5MyI6ImFjYWRjMDMzMDE5NDkwNmY4Yzc1YWMyODdmIjoiOGMxODQ4NmQ1MjU3MWY3MGYyYmE2YTc0N2FhYTNkNGIzZWJjMmU0ODFlZTFiNzA5MDdkZGRiOTRiZGZhMGNhNiI6IjdmOGIwY2FkNzliNTQ1ZTVhZGRmMGIwNGZmNGIwZjJiMmE1MDY3MjgzMjEwYWJhODYzMGQwMzA2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzE0IChQPTEzLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZDQyMzUxOWU0MTEwYzA2MDYzMDYxMzIzZjhjN2M5NTM4Nzc3NmI2ZWU0ZTRiNmUiOiI0MDIxZmYxMDRmZjFkYmQ5MWU0NmRiMjQ5ZiI6IjM5YWJlNTM4MjZkOWI4ZTMwMGZlNzQ3NTMzIjoiY2RkOWJmMWI0Zjg2NWU5MjJjNjc4ZWM0OTQ3ZWEwY2IwMmU3OGJkNWMxNTM4ZjMzYWViODE4YWQzZjQ3ZTUxOSI6Ijc5NTNkM2NkNjZkMDkzNzg1ZDEyM2Y2NWJhMzdmMTY3NjFkZDZhZWRiZmM3ODlhZDk2ZWRmMTQ5MGQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMTUgKFA9MTQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE2MGNmN2NlYjYyYmYzMTE4NTMyYmM2MWRhYTI1Y2U5NDY5OTEwNDdmOTUxYjUzNiI6ImQ2NGY5NDI2ZmViY2U2YTg0Yzk1NGRkNWRlZDUiOiI3NDk5NDk0ZmFhNDRhNzU3NmY5ZWQ1NTgwZCI6ImJhYTQ4MmM2NGVlZmQwOTExODU0OWE4OTY4ZjQ0Y2ZlYTdhNDM2OTEzYTQyOGUzMGFhNGFiNDQ4MDJhNGJhMzUiOiJmNzU4MGYxNzI2NmQ2ODIzNzc0N2JmNTdjN2VkODI0MmFjMWExOTc5YzVhOWU3YmM2N2Q3Njk4YzdlZmEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMTYgKFA9MTUsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgyZDRiYzlhYWMyOThiMDkxMTIwNzMyNzcyMDVlMWJmNDIxNzZkMWU2MzM5Yjc2YyI6IjI1YTUzZmQzZTQ3NmRjMDg2MGVlZWVhMjVmY2IwYyI6IjcwMzI1ZWYxOWU1ODFiNzQzMDk1Y2Q1ZWIxIjoiNmQxNGJiMjYzNWM1ZDBhZTgzNjg3ZjE4MjQyNzljZjE0MTE3MzUyN2UxYjMyZDFiYWY4YTI3ZjdmZTM0YTU0MiI6IjRhMWNmZDAwMjM1NTdhMTg0YjkyOTk2NWIwYTQ0NWNiMzk5M2NhMzVhY2YzNTRjYjJiNDI1NGZmNjcyZTdmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzE3IChQPTE2LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ODczZjFjNmMzMDk3NWFmZjZmMDg0NzAyNjQzMjExMzBhNmU1OTg0YWRlMzI0ZTkiOiI1MDUxYTBiMGI2NzY2Y2Q2ZWEyOWE2NzI3NjlkNDBmZSI6IjdjNGQyZjdjZWMwNDM2MWYxODdmMDcyNmQ1IjoiNzc3NDNiNWQ4M2EwMGQyYzhkNWY3ZTEwNzgxNTMxYjQ5NmUwOWYzYmM5Mjk1ZDdhZTk3OTllNjQ2NjhlZjhjNSI6IjBjZTVhYzhkNmIyNTZmYjc1ODBiZjZhY2M3NjQyNmFmNDBiY2U1OGZkNGNkNjU0OGRmOTBhMDMzN2M4NDIwMDQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMTggKFA9MTcsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNjZjhkYTI3ZDViZTFhZjAyNDE1ODk4NWY3MjVmZDdhNjI0MmNiZTAwNDFmMmMxNyI6ImY2ZGQyYzY0YmY1OTdlNjMyNjNjY2FlMWM1NGUwODA1ZmUiOiIwN2Y3N2YxMTRkNzI2NGExMjJhN2U5ZGI0ZiI6IjMwNDU3ZTk5NjE2ZjAyNDdmMTMzOWIxMDE5NzRlYTIzMTkwNGQwZWY3YmQwZDVlZTliNTdjNmMxNjc2MWEyODIiOiJjZTMwMzFjM2E3MDYwMGU5MzQwYjJkZGZlNTZhYTcyY2ZmZGM1ZTUzZTY4YzUxZWU1NWIyNzZlYjNmODVkMmNmNjMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMTkgKFA9MTgsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI0NmEzYTI0YzY2ZWI4NDZjYTY0MTNjMDAxMTUzZGM2OTk4OTcwYzEyZTdhY2Q1YSI6IjU2ZDE4ZDNlMmU0OTY0NDBkMGE1YzllMWJjYjQ2NGZhZjViYyI6ImI3OWMzM2M5NmEwYTkwMDMwNjk0MTYzZTJhIjoiZWE5NDA1ZDZhNDZjYWM5NzgzYTdiNDhhYzJlMjVjYzlhM2E1MTljNDY1OGIyYTg3NzBhMzcyNDBkNDE1ODdmYiI6IjAxYmFiYTJlMGQ1YjQ5ZDYwMGQwM2E3ZWQ4NGVlODc4OTI2YzBjYTQ3OGY0MGE2ZmJkZTAxZjU4NGQ5MzhhMWM5MWJmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzIwIChQPTE5LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YjcxMDQ1Y2NlZjczNWJkMGM1YmVhM2NmM2I3ZTE2ZTU4ZDljNjIwNjFhMjA0ZTAiOiI4OTBkMDU0MjBkNTdlM2IzZDhkYmVmMTE3ZmU2MGMzZmE2YTA5NSI6IjJiOWVjZmQxNzkyNDJjMjk1ZmU2YzZmYTU1IjoiYjg5MTY2Zjk3ZGViOWNjN2ZkZWI2MzYzOWVlYWZiMTQ1ODk1YjMwNzc0OWVjMWEyOTNiMjcxMTVmM2FhODIzMiI6ImY4NDJmZjY2NjI2ODRkZTg3ODVhZjI3NWZhMmQ4MmQ1ODdkZTA2ODdlYmUzNWU4ODNjYmQ1M2I4MmYyYTQ2MjRjMDM4OTQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMjEgKFA9MjAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRjN2M2NzcxNWYyNzA5ZTE1MGNjZWZmMDIwYWFhY2Y4OGExZTc1NjgxOTFhY2JjZiI6ImYzODNiZDNlNjI3MDg3NmI3NGFiYmI1ZDM1ZTdkNGYxMWQ4MzQxMmMiOiJkYTU2ZWEwNDY5OTBjNzBmYTIxNmU1ZTZjNCI6ImY3OTk4MThkOTFiZTdiYWI1NTVhMmUzOWYxZjQ1ODEwYTk0ZDA3MTc5Zjk0ZmUxMTUxZDk1YWI5NjNjNDc2MTEiOiIzNzdiNWRmMjYzYzVjNzRmNjM2MDM2OTJjYmI2MWVhMzdiNmQ2ODZjNzQzZjcxZTE1NDkwY2E0MWQyNDU3Njg5ODg3MTllZGUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMjIgKFA9MjEsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY0MWUzNjlhMTU5OTYyN2U3Njk4M2U5YTRmYzJlOTYzZGFiNDk2MGIwOWViZTM5MCI6IjgxYWQzZjM4NmJlZGNiZjY1NmZmNTM1YzYzNTgwZDFmODdlM2M3MjMyNiI6IjY4ZWY4Mjg1YjkwZjI4YmNkM2NiMWJhY2VhIjoiZGJlM2U4MmU0OTYyNGQ5NjhmNTQ2M2NlYjhhZjE4OWZiM2FkOGIzYjQxMjIxNDJiMTEwZDg0OGEyODZkYWU3MSI6IjlmNjAyODE1M2UwNmQxNGQzMGI4NjJhOTlhMzU0MTM0MTNjMDRhNDlkYzZmNjhhMDNhMTFjZjAwZDU4ZjA2MmE3YjM2NDY1ZDEzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0xOTIgIzIzIChQPTIyLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMjg5ZTU5ZTNhN2IyOWJmNGEzMDlhZmMyNTMwMzBiYmE0YjliZGQ2NGYwNzIyZjkiOiI1MzkxMWE2N2I2NTczOGY4N2ZjN2MyMGQ2ZGI4MDQ0YmRlMWFmOTU4MzhkMSI6IjMwMjU5Y2UxMDZlOWJkN2E4YmFjYmFmMjEyIjoiMjg3MGJkOWEyNmM1MTBlOWEyNTY5MjA4OTliYmM3N2E0ZWI5YjUzZjkyNzA0NWE5NDNkNWVkNmIxMzYzOGNmMyI6IjcwY2YzN2Q0YjZmN2U3MDczNzZiMTU3NGNlMTdjMDQwYjUxNDNkYTQ3YWJiMmZlOWFmYWZjMmZjY2Q5OGNjZjYzYjBmZGVjMzBlYWMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMjQgKFA9MjMsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQwZjFhZmYyZTQ0ZDA1ZjEyMTI2MDk3YTBmMDdhYzAzNTliYTFhNjA5MzU2YTRlNiI6IjhkOThjNTgwZmIzNjZmMzMwZGJmZGEyMGY5MWQ5OWEwODc4YjQ3ZWZkMTRjNmQiOiIwZGYzZmM2Mzk2Zjg1MTc4NWZjYTlhYTVmZiI6ImU5Njk5YjIwYjA1NzRmY2U4YjVjYmM0ZWY3OTJlYjk2ZTJjMWNjZTM2YjFiMWYwNmVhMmE5NWZlMzAwNjMzY2MiOiI1NzljZGY5ZGE2MmEyZGY0NzFlMDM0NTA1MTZhZGI0Y2U5OWFlMGY3MGIxNzc2YTM5YzNiNDI5YTFmOTIyZmFjMGI1OWUyOWExMjJlNDMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTE5MiAjMjUgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkxZjlkNjM2YTA3MWMzYWFkMTc0MzEzN2UwNjQ0YTczZGU5ZTQ3YmQ3NmFjZDkxOSI6IjRlYWY5Mzg0Y2FkOTc2ZjY1Zjk4MDQyZDU2MWQ3NjBiNWE3ODczMzBkYzY1OGY2YyI6IjFiZjQ5MWFjMzIwZDY2MGViMmRkNDVjNmMzIjoiM2JkZmQ3ZjE4ZDJiNmQwODA0ZDc3OWYwNjc5YWFhMmQ3ZDMyOTc4YzJkZjgwMTVhZTRiNzU4ZDMzN2JlODFkZCI6IjYzNTUzMGNhYjE0ZTNkMGExMzViYjZlZWJiNTgyOTQxMjY3NmU2ZGQ0OTk1Zjk5Y2I3ZTE3ZjIzNWJkNjYwZTdlMTdiMmM2NTMyMGU5ZmQ0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzEgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzZjMTRjNjU1ZTUyYzhhNGM3ZThkNTRlOTc0ZDY5OGUxZjIxZWUzYmE3MTdhMGFkZmE2MTM2ZDAyNjY4YzQ3NiI6IiI6IjI5MWU5MWIxOWRlNTE4Y2Q3ODA2ZGU0NGY2IjoiYjRmODMyNjk0NGE0NWQ5NWY5MTg4N2MyYTZhYzM2YjYwZWVhNWVkZWY4NGMxYzM1ODE0NmE2NjZiNjg3ODMzNSI6ImNhNDgyYzY3NGI1OTkwNDZjYzdkN2VlMGQwMGVlYzFlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzIgKFA9MSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2M0OWQ0YTM5Nzg4N2NiNTdiYzkyYzhhOGMyNmE3YWFjMjA1YzY1M2VmNDAxMWMxZjQ4MzkwYWQzNWY1ZGYxNCI6IjFhIjoiNmRmOGM1YzI4ZDE3Mjg5NzVhMGI3NjZjZDciOiIwODBmODI0Njk1MDUxMTg4NDJlNWZhNzBkZjUzMjNkZTE3NWEzNzYwOTkwNGVlNWU3NjI4OGY5NGNhODRiM2M1IjoiYTVmMjRlODdhMTFhOTUzNzRkNGMxOTA5NDViZjA4ZWYyZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMzIChQPTIsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM2YjAxNzUzNzllN2FlMTljMjc3ZmU2NTZhMjI1MmE4Mjc5NjMwOWJlMGYwZDRlMWMwN2ZkZGU4OGFjYTQ1MTAiOiJiZTgwIjoiMDIxYmQ4YjU1MTk0N2JlNGMxOGNmMWE0NTUiOiJiNWM2ZTgzMTNiOWM2OGU2YmI4NGJmZmQ2NWZhNDEwOGQyNDNmNTgwZWFiOTliYjgwNTYzZWQxMDUwYzgyNjZiIjoiZWNhY2MzMTUyZTQzZDllZmVhMjZlMTZjMWQxNzkzZTJhOGM0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzQgKFA9MywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGRiNzM5YWNkYTZjNTZlYzlhZWZjNGY0Y2JjMjU4NTg3ZjQ0M2RhNGU3NmRkZmE4NWRiZTA4MTNhODc4NDk0NCI6ImRiNDU3YyI6IjBiZGRmMzQyMTIxYjgyZjkwNjM2OGIwZDdiIjoiODg3NDg2ZmZmNzkyMjc2ODE4NjM2M2VmMTdlYjc4ZTVjZjJmYWI4ZjQ3YTRlYjMyN2RlOGIxNmQ2M2IwMmFjYiI6IjU0NDczYzNmNjVkNmJlNDMxZTc5NzAwMzc4MDQ5YWMwNmYyNTk5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzUgKFA9NCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjJiODI2MzdlNTY3YWQyN2MzMDY2ZDUzM2VkNzZlMzE0NTIyYWM1YzUzODUxYThjOTU4Y2U2YzY0YjgyZmZkMCI6Ijg3Mjk0MDc4IjoiNWJjMjg5NmQ4YjgxOTk5NTQ2Zjg4MjMyYWIiOiJmZmZiNDBiMGQxOGNiMjMwMThhYWMxMDliZjYyZDg0OWFkY2E0MjYyOWQ4YTlhZDEyOTliODNmZTI3NGY5YTYzIjoiMmJjMjI3MzVhYjIxZGZkY2ZlOTViZDgzNTkyZmI2YjQxNjhkOWEyMyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICM2IChQPTUsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJjMjlhMTZlMTljZmJlMzJiZjQ5NDhlOGU0NDg0MTU5YmM4MTliN2VlYzUwNGU0NDQxYTFhOThjYTIxMGU1NzYiOiIzZThjNmQxYjEyIjoiNGYxOGJjYzhlZTBiYmI4MGRlMzBhOWUwODYiOiI1NzQ5MzFhZTRiMjRiZGY3ZTkyMTdlY2E2Y2UyYTA3Mjg3OTk5ZTUyOWY2ZTEwNmUzNzIxYzQyZGFjZjAwZjVkIjoiNDVmMzc5NWZjZjljNjZlMWE0MzEwM2Q5YTE4ZjVmYmE1ZmFiODNmOTk0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzcgKFA9NiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWY0YjRmOTdiNmFhNDhhZGIzMzM2YzQ1MWFhYzM3N2ZkZTRhZGY0Nzg5N2ZkOWNjZGYxMzlmMzNiZTc2YjE4YyI6IjFiNjJhZDE5ZGNhYyI6IjdhNzZlYWM0NDQ4NmFmZGIxMTJmYzRhYWI5IjoiYTY2Yzk4MGY2NjIxZTAzZmY5M2I1NWQ1YTE0ODYxNWM0YWQzNmQ2Y2JkZDBiMjJiMTczYjRiMTQ3OWZiOGZmNyI6IjRhZDFmY2Y1N2MxMmIxNGUwZTY1OWE2MzA1YjRhZWZmYWU4MmY4YTY2Yzk0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzggKFA9NywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjdhYWVmZjNhMWRjMGNjNWVjZjIyMGM2N2FkOWY2ZGRhMDYwYjRmMWJlM2NjNjA5Y2I0ZjE4YjIzNDJhODhhMiI6ImQ0OGRhYTI5MTkzNDhkIjoiZDBkNjg3MWI5YWRjODYyM2FjNjNmYWYwMGYiOiJlOTcxNzVjMjNjNWI0N2RhOGNlNjc4MTFjNmQ2MGE3NDk5YjNiN2UxMzQ3YWQ4NjA1MTkyODViNjcyMDFmZTM4IjoiZWIzMmFiMTUzYThlMDkyZmEzMjViYWZjMTc2YTA3YzMxZTZjYzBhODUyZDI4OCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICM5IChQPTgsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ5M2UxNDYyM2NkMjUwMDU4YTdmYzY2YTNmZWUwYzI0YjZlMzYzYjk2NmMyMzE0YWZmNTNiMjc2YjZjMmVhN2IiOiJlNTY1M2U1MTJkOGIwYjcwIjoiZmUyZDhhZThkYTk0YTZkZjU2M2Y4OWNlMDAiOiI1NzlhNjM3ZTM3YTA5NzRjZDJmYzNiNzM1ZDllZDA4OGU4ZTQ4OGZmZTIxMGYwNDNlMGY5ZDIwNzlhMDE1YWQ2IjoiNzVkMzFmOGQ0N2JlZTVjNGUyYmE1MzczNTVhZThhYjI1Y2M5ZWQzNTExZmY1MDUzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVlBUIEFFUy0yNTYgIzEwIChQPTksIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIyMzI1NTM3MjQ1NWM2OTI0NGEwMjEwZTZhOWUxM2IxNTVhNWVjOWQ2ZDA5MDBlNTRhOGY0ZDlmN2EyNTVlM2EiOiI2MTVkNzI0YWU5NGE1ZGFmOGQiOiIyNzQ4NDYxOTZkNzhmMGFmMmRmNTg2MDIzMSI6IjY5YWRjYWU4YTFlOWEzZjJmZTllNjI1OTFmN2I0YzViMTlkM2I1MGU3Njk1MjFmNjdlN2VhOGQ3YjU4ZDlmYzgiOiJmMDE5YWU1MTA2MzIzOTI4N2Q4OTZlNzEyN2YxN2QxM2Y5ODAxM2I0MjAyMTllYjg3NyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxMSAoUD0xMCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGJmMDYzNjZmNzY2ZTI4MTFlY2Q1ZDQzODRkNmQwODMzNmFkYzM3ZTA4MjRkNjIwY2YwZDllN2ZkMWU3YWZhOSI6IjJlM2NmMGFmOGM5NmM3YjIyNzE5IjoiYjM1MDNlZDRlMjc3ZWQ5NzY5YjIwYzEwYzAiOiI5YWU1YTA0YmFhOWQwMmM4ODU0ZTYwOTg5OWM2MjQwODUxY2JjODNmODFmNzUyYmMwNGM3MWFmZmE0ZWVkMzg1IjoiZTMxN2RmNDNhYjQ2ZWIzMWJlN2U3NmYyNzMwZDc3MWQ1NjA5OWEwYzhkMjcwM2Q3YTI0ZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxMiAoUD0xMSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGRkNTU1YmQzYTUyNTNhOTBiNjhiNWQ0ZDQ2YmQwNTAzNDBlZTA3ZGRhZDNhNzIwNDhjNjU3YjVkNzZiYjIwNyI6IjgwMTVjMGYwN2E3YWNkNGIxY2JkZDIiOiJiZGIxYjgyYmE4NjQ4OTNjMmVlOGY3NDI2YyI6IjliY2M1ODQ4ZTkyOGJhMDA2OGY3YTg2N2U3OWU4M2E2ZjkzNTkzMzU0YThiZmNmYzMwNmFlZWI5ODIxYzFkYTEiOiI4ZTlmODBjNzI2OTgwYjNkNDJlNDNhNjUxMmEwNDgxMjU1YjcyOWExMGY5ZWRiNWYwN2M2MGMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTMgKFA9MTIsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQzYWQ4Y2RhOWEwZDkxYTIwNWM0YzA1NjY1NzI4YmIyNTVkNTBhODM0MDNjOWFiOTI0M2ZjYmJlOTVhZTc5MDYiOiJhMjAzYWViNjM1ZTE5NWJjMzNmZDQyZmEiOiIwYjVmNjk2OTdlYjFhZjI0ZThlNmZjYjYwNSI6ImVhMjZlYTY4ZmFjZGFjM2M3NWJhMGNkZjdiMWFkNzAzYzk0NzRhZjgzYjNmYmZjNThlNTQ4ZDc3NmIyNTI5YjkiOiI2MjY2NjI5N2E4MDljOTgyYjUwNzIyYmQ1NmJjNTU1ODk5MzQ1ZTA0MDRiMjkzOGVkZjMzMTY4ZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxNCAoUD0xMywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTMwMGZjN2E1Yjk2ODA2MzgyYzM1YWY1YjJjMmU4ZTI2MzgyNzUxYjU5MDEwZDRiMWNmYzkwYTRhOWNiMDZkZiI6Ijg3MTRlYjllY2Y4YmRiMTNlOTE5ZGU0MGY5IjoiNTViNTllYjQzNGRkMWJhMzcyM2VlMGRjNzIiOiI5YjFkODUzODRjYjZmNDdjMGIxMzUxNGEzMDNkNGUxZDk1YWY0YzY0NDI2OTFmMzE0YTQwMTEzNWYwNzgyOWVjIjoiYmE2MDYzODI0ZDMxNGFhM2NiYWIxNGI4YzU0YzY1MjBkYWMwZjA3Mzg1NmQ5YjkwMTBiNzg1NzczNiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxNSAoUD0xNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2FlNWJlNTkwNGJhZTYyNjA5YWM1MjVlMmQxY2FkOTAxMzM0NDc1NzNkN2I2MDg5NzVhNmEyYjE2Y2IyZWZjMCI6Ijk1OTQwM2UwNzcxYzIxYTQxNmJkMDNmMzg5ODMiOiI2MWJmMDZiOWZhNWE0NTBkMDk0ZjNkZGNiNSI6IjAyNDU0ODRiY2Q5ODc3ODdmZTk3ZmRhNmM4ZmZiNmU3MDU4ZDdiOGY3MDY0ZjI3NTE0YWZhYWM0MDQ4NzY3ZmQiOiIzN2EzNDZiYzQ5MDk5NjVjNTQ5NzgzODI1MTgyNjM4NWE1MmM2ODkxNGU5ZDFmNjNmZDI5N2VlNmU3ZWQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTYgKFA9MTUsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZhYjYyYjNlNWRlZGE3YTljMTEyODY2M2NjODFjNDRiNzRhYjFiZmU3MGJjMWM5ZGVjN2M3ZmQwODE3M2I4MGEiOiI1NGJlNzE3MDVlNDUzMTc3YjUzYzkyYmJmMmFiMTMiOiJhNWMxYjE0NmM4MmMzNGIyZTZlYmVjZWI1OCI6IjVlNjBiMDJiMjZlMmQ1Zjc1MmViNTVlYTVmNTBiYjM1NGE2ZjAxYjgwMGNlYTVjODE1ZmYwMDMwYjhjN2Q0NzUiOiI3ODhkYjk0OTY5N2I4Y2Q5YWJiYzc0ZWQ5YWE0MGNkNjg1MmRjODI5NDY5MzY4NDkxMTQ5ZDZiYjE0MDA3MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxNyAoUD0xNiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWU4Y2UxODcxNjk3NzlkMTNlNDQzZDY0MjhlMzhiMzhiNTVkZmI5MGYwMjI4YThhNGU2MmY4ZjUzNTgwNmU2MiI6ImQxNWY5OGYyYzZkNjcwZjU1Yzc4YTA2NjQ4MzMyYmM5IjoiMTIxNjQyYzQyMThiMzkxYzk4ZTYyNjljOGEiOiI3MThkMTNlNDc1MjJhYzRjZGYzZjgyODA2Mzk4MGI2ZDQ1MmZjZGNkNmUxYTE5MDRiZjg3ZjU0OGE1ZmQ1YTA1IjoiY2MxN2JmODc5NGM4NDM0NTdkODk5MzkxODk4ZWQyMmE2ZjlkMjhmY2I2NDIzNGUxY2Q3OTNjNDE0NGYxZGE1MCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMxOCAoUD0xNywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2RhNmVmMzVhZDU5NGEwOWNiNzRkYWYyN2U1MGE2YjMwZDZiNDE2MGNmMGRlNDFlZTMyYmJmMmEyMDhiOTExZCI6ImIwMDUzZDFmNDkwODA5Nzk0MjUwZDg1NjA2MmQwYWFhOTIiOiI5OGEzMmQ3ZmU2MDY1ODNlMjkwNjQyMDI5NyI6IjIxN2QxMzA0MDhhNzM4ZTZhODMzOTMxZTY5Zjg2OTY5NjBjODE3NDA3MzAxNTYwYmJlNWZiZDkyMzYxNDg4YjQiOiJhNjM0MWVlM2Q2MGViMzRhOGE4YmMyODA2ZDUwZGQ1N2EzZjYyOGVlNDlhOGMyMDA1YzdkMDdkMzU0YmY4MDk5NGQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMTkgKFA9MTgsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA3ODY3MDZmNjgwYzI3Yjc5MmQwNTRmYWE2M2Y0OTlhOGU2YjVkZGI5MDUwMjk0NjIzNWJmNzRjMDIyZDc3MmMiOiI2YTI2Njc3ODM2ZDY1YmQwZDM1YTAyN2QyNzhiMjUzNGU3ZGYiOiJmNjFlZjFjOGMxMGE4NjNlZmViNGExZGU4NiI6IjY3ODc0YzgwODYwMGEyN2ZjYWIzNGQ2ZjY5Y2M1YzczMDgzMWFkNDU4OTA3NWRkODI0Nzk4MjNjYjliNDFkYzMiOiJkMWMxZjNjNjA2MDMzNTljN2Q2YTcwN2YwNWVjYjIyOTZmOGU1MmYyMjEwYjdhNzk4YWQ1Yzc3OGVlN2NmZDdmZTZlMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMyMCAoUD0xOSwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmFjNTVmOTg0N2Q5MzMyNWJmNTA3MWMyMjBjMGEzZGZlYjM4ZjIxNDI5MmQ0N2I0YWNiN2IwYTU5N2ZlMDU2ZiI6ImMxYTk5NGRjMTk4ZjU2NzZlYTg1ODAxY2QyN2NjOGY0NzI2N2VjIjoiMDViNTBjNDU4YWRiYmExNmM1NWZjYzQ1NGQiOiI4OWFkNmFlMWU1NTA5NzVlYWE5MTZhNjI2MTVlNmI2YTY2MzY2YTE3YTdlMDYzODBhOTVlYTVjZGNjMWQzMzAyIjoiN2M5YjEzODE3NzU5MGVkYWFmZWM0NzI4YzQ2NjNlNzc0NThmZmJlMzI0M2ZhZWMxNzdkZTRhMmU0YTI5Mzk1MjA3M2U0MyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMyMSAoUD0yMCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGJlZWRlYjg1ZDQyYzJhN2ZhNmY3MjM3YjA1YWNiMTk3ZGQ4ZTE2NzI0NzFhYzg3ODA2NGZlNTMxOWVhYjg3NiI6IjdiMTI1YzNiOTYxMmE4YjU1NDkxM2QwMzg0ZjQ3OTVjOTBjZDM4N2MiOiI4NDc5YmRmYWQyOGViZTc4MWU5YzAxYTNmNiI6IjdhZWJkZmQ5NTVkNmU4YTE5YTcwMWQzODc0NDdhNGJkZDU5YTkzODIxNTZhYjBjMGRjZDM3Yjg5NDE5ZDZlZmYiOiI2Y2M2MTFkODE2YjE4YzY4NDdiMzQ4ZTQ2YTQxMTk0NjUxMDQyNTRhMDRlMmRmZWVlYWM5YzMyNTVmNjIyNzcwNDg0OGQ1YjIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMjIgKFA9MjEsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMzYTBjMTI2Y2FkNTgxMDEyMTUxYzI1Y2Y4NWE0NDQ3MmMyM2Y4M2I2MDk1YjYwMDRmNGYzMmNkNjBlYzJkYjIiOiI3M2IwOWQxODU1NDQ3MTMwOTE0MWFhMzNiNjg3ZjkyNDhiNTBmZTMxNTQiOiI5NGFiNTFjZTc1ZGI4YjA0NmQ2YWI5MjgzMCI6IjJhMjQzMjQ2YmZlNWI1YWIwNWY1MWJmNWY0MDFhZjUyZDViYmFhMjU0OWNmNTdhMThlMTk3NTk3ZmUxNWRkOGMiOiJiN2U4MjY0Y2E3MGZkMmE0ZmI3NmYyMGE4YWQ1ZGEzYzM3ZjU4OTNmYjEyYWJlZWFlZjExODdmODE1Y2E0ODFlZDhkZGQzZGQzNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMyMyAoUD0yMiwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWNkZWJhZWVlODY5MGI2ODc1MTA3MDY5MWY0OTU5MzY2OGE2ZGUxMmQzYTk0OGIzOGRkYmQzZjc1MjE4YjJkNCI6IjNjYmIwOGYxMzMyNzBlNDQ1NGJjYWFhMGYyMGY2ZDYzYzM4YjY1NzJlNzY2IjoiYWYxYTk3ZDQzMTUxZjVlYTljNDhhZDM2YTMiOiJmNTM1M2ZiNmJmYzhmMDlkNTU2MTU4MTMyZDZjYmI5N2Q5MDQ1ZWFjZGM3MWY3ODJiY2VmNjJkMjU4YjE5NTBhIjoiMzk2NjkzMGEyYWU4ZmRkOGY0MGU3MDA3ZjNmZGUwYmQ2ZWI0OGE0NmU2ZDI2ZWVmODNkYTlmNjM4NGIxYTJiZGExMDc5MGRhZGIzZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZQVCBBRVMtMjU2ICMyNCAoUD0yMywgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDM0MjY0YTEyYzM1Y2RkNjdhYzEwNWUyODI2YjA3MWU0NmY4MTMxZDFlMzI1ZjhlMGFlODBhNjQ0NzM3NTEzNSI6Ijc5YWMxYTZhOWVjYTVlMDdjZTYzNWJmZDY2NmVmNzJiMTZmM2YyZTE0MGQ1NmMiOiIzODkxZTMwOGI5ZjQ0YzViNWE4YjU5MDA0YSI6IjBjZGEwMDBlZDc1NDQ1NmE4NDRjOWVkNjE4NDNkZWVhOWRhZGY1ZTcyM2VhMTQ0ODA1NzcxMjk5NmQ2NjBmOGMiOiIxYWJjYzliMTY0OWRlYWEwYmZhN2RjZDIzNTA4MjgyZDljNTBjYTdmZWU3MjQ4Njk1MDYwOGQ3YmNiMzlkY2YwM2EyY2FiMDE1ODdmNjEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWUFQgQUVTLTI1NiAjMjUgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhZDk4ZGJlZjBmYjJhMTg4YjZjNDlhODU5YzkyMDk2NzIxNGI5OTg0MzVhMDBiOTNkOTMxYjVhY2VjYWY5NzYiOiI5Y2VhM2IwNjFlNWM0MDJkNDg0OTdlYTQ5NDhkNzViOGFmNzc0NmQ0ZTU3MGM4NDgiOiIwMGQ3NzJiMDc3ODg1MzZiNjg4ZmYyYjg0YSI6IjVmOGIxNDAwOTIwODkxZTgwNTc2Mzk2MTgxODNjOWM4NDc4MjFjMWFhZTc5ZjJhOTBkNzVmMTE0ZGIyMWU5NzUiOiJmMjhlYzUzNWMyZDgzNDk2M2M4NTgxNGVjNDE3M2MwYjg5ODNkZmY4ZGM0YTJkNGUwZjczYmZiMjhhZDQyYWE4Zjc1ZjU0OWE5MzU5NGRkNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTI4ICMxIChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMwNDI1ZWQyMGNkMjhmZGE2N2EyYmNjMGFiMzQyYTQ5IjoiNGYwNjVhMjNlZWNhNmIxOGQxMThlMWRlNGQ3ZTVjYTFhN2MwZTU1NmQ3ODZkNDA3IjoiMzc2NjdmMzM0ZGNlOTAiOiIwYjNlOGQ5Nzg1Yzc0YzhmNDFlYTI1N2Q0ZDg3NDk1ZmZiYmIzMzU1NDJiMTJlMGQ2MmJiMTc3ZWM3YTE2NGQ5IjoiNzY4ZmNjZGY0ODk4YmNhMDk5ZTMzYzNkNDA1NjU0OTdkZWMyMmRkNmUzM2RjZjQzODRkNzFiZTg1NjVjMjFhNDU1ZGI0NTgxNmRhODE1OGMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTEyOCAjMiAoUD0yNCwgTj04LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYjYyNTZiZDMyOGE0Y2RhMjUxMGQ1MjdjMGY3M2VkNCI6Ijc4YTI5MjY2MmI4ZTA1YWJjMmQ0NGZiZWZkMDg0MDc5NWU3NDkzMDI4MDE1ZDlmMiI6IjIxZmQ5MDExZDZkOTQ4NGEiOiI2NmZmMzVjNGY4NmFkNzc1NWIxNDllMTRlMjk5MDM0NzYzMDIzZTczODRmNGFmOGMzNTI3N2QyYzdlMWE3ZGUyIjoiNWEwYmU4MzRjNTdiNTlkNDdhNDU5MGQ4ZDE5YTEyMDZkM2MwNmU5MzdhOWI1N2Y3NDAzNGQ5ZmRiNDNjM2Y0ODkzMmFhNzIxNzdiMjNiZjYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTEyOCAjMyAoUD0yNCwgTj05LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZmRjY2M4NGYyNTdjYjc2OGI3YWQ3MzVlZGJkMTk5MCI6IjU2ZDA5NDI0OTBlNTQ2Nzk4ZjMwZDNjNjBhZDRlM2UxMTBmYzA0ZjViMWMxZmE4MyI6ImI3Nzc2YWE5OThmNGQxMTg5YiI6IjlmOWFjNDY0ZGU1MDhiOThlNzg5MjQzZmRiMzJkYjQ1ODUzOGY4YTI5MWVkOTNkZGY4YWVhYWNmYmZjMzcxYWEiOiI5NmYxMjRjNzRmZDczNzgxOTAwOGRkZWY0NDAzMjBmNGEzNzMzZDAwNjJjODNjODkzZTI1OWFlY2YxMmJhMDhmMmEyZTk2NmEzMzQxZDZkNCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTI4ICM0IChQPTI0LCBOPTEwLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2Y2NiNjhkMzgzOGQ0ZGRmNjYwYjljZDkwNGNhZDQwZiI6IjVlYTM1YzA4MmUyYjE5MGU5ZDk4ZTZiMmRhYWQ4NjcyZjU4N2I0ZjI5NjgwNzJmYyI6ImM0ZmI3NTE5YTE5ZjEzZDlkMWZjIjoiMDkyZTY0ZmVmMDhiNTY1NWE4NmNkYjhkZTYzZmZhYTc3NzJlODczMDg0NGU5MDE2MTQxYWY4YmFkMjIxNjI0NiI6ImNkYTVmZTNkMTVkMDAxNTBiOTkxMjBjN2YyMDZiODhhNGMyYzRhMzljYTkxNDM0MjU2MDNhYjI4NGE3M2EzOGNjOTE2ZjhiNjUzYzkyYWI0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xMjggIzUgKFA9MjQsIE49MTEsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU2YWI5ZTcwYTRmYjUxYjAxYzJlMjYyMjMzZTY0YzBkIjoiYmExNTkxNjczMzU1MGQ3YWE4MmIyZjZiMTE3Y2QzZjU0YzgzZGRjMTZjZDAyODhhIjoiNzRlNjg5ZWI1YWY5NDQxZGQ2OTBhNiI6IjQyZjY1MThlZTBmYmU0MmYyOGUxM2I0YmIyZWI2MDUxN2IzN2M5NzQ0Mzk0ZDkxNDMzOTNhODc5YzNlMTA3YzciOiJkY2MxNTE0NDMyODhmMzVkMzllZDhmYWU2ZjBjZTFkMWViNjU2ZjRmN2ZkNjVjMGIxNmYzMjJjZTg1ZDdjNTRlNzFhYzU2MGZkNGRhOTY1MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTI4ICM2IChQPTI0LCBOPTEyLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMDVlOGY0ZDhlMGNiZjRlMWNlZWI1ZDg3YTI3NTg0OCI6ImI2ZjM0NTIwNDUyNjQzOWRhZjg0OTk4ZjM4MGRjZmI0YjQxNjdjOTU5YzA0ZmY2NSI6IjBlYzNhYzQ1MmI1NDdiOTA2MmFhYzhmYSI6IjJmMTgyMWFhNTdlNTI3OGZmZDMzYzE3ZDQ2NjE1Yjc3MzYzMTQ5ZGJjOTg0NzA0MTNmNjU0M2E2Yjc0OWYyY2EiOiI5NTc1ZTE2ZjM1ZGEzYzg4YTE5YzI2YTdiNzYyMDQ0ZjRkN2JiYmFmZWZmMDVkNzU0ODI5ZTJhNzc1MmZhM2ExNDg5MDk3Mjg4NGI1MTFkOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMTI4ICM3IChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYzg3ZmVmM2I3NmU3MjVkNjZkOTA1NjI1YTM4N2U4MiI6Ijk1OTQwM2UwNzcxYzIxYTQxNmJkMDNmMzg5ODM5MGU5MGQwYTA4OTlmNjlmOTU1MiI6IjYxYmYwNmI5ZmE1YTQ1MGQwOTRmM2RkY2I1IjoiMDI0NTQ4NGJjZDk4Nzc4N2ZlOTdmZGE2YzhmZmI2ZTcwNThkN2I4ZjcwNjRmMjc1MTRhZmFhYzQwNDg3NjdmZCI6ImNhYmY4YWE2MTNkNTM1N2FhM2U3MDE3M2Q0M2YxZjIwMmI2MjhhNjFkMThlOGI1NzJlYjY2YmI4MjEzYTUxNWFhNjFlNWYwOTQ1Y2Q1N2Y0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzEgKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2ViMDA5YWVhNDQ1NDQ1MWZlYWRmMGU2YjM2ZjQ1NTU1ZGQwNDcyM2JhYTQ0OGU4IjoiYzhkMjc1ZjkxOWUxN2Q3ZmU2OWMyYTFmNTg5MzlkZmU0ZDQwMzc5MWI1ZGYxMzEwIjoiNzY0MDQzYzQ5NDYwYjciOiI2ZTgwZGQ3ZjFiYWRmM2ExYzlhYjI1Yzc1ZjEwYmRlNzhjMjNmYTBlYjhmOWFhYTUzYWRlZmJmNGNiZjc4ZmU0IjoiOGEwZjNkODIyOWU0OGU3NDg3ZmQ5NWEyOGFkMzkyYzgwYjM2ODFkNGZiYzdiYmZkMmRkNmVmMWM0NWQ0Y2NiNzIzZGMwNzQ0MTRkYjUwNmQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTE5MiAjMiAoUD0yNCwgTj04LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZGQ1NjQ0MmZhMDlhNDI4OTBiMWI0Mjc0Yjk1MDc3MGVhOGJlZWEyZTA0ODE5M2QiOiJiZDkyZDY3NDRjZGU0NDZmYzg2MjE2MjU2NThmYzRiYzAwZGNiOTdmMDYxOTVhZDciOiJhZDc0OWQ1OTZkODhhNGI0IjoiYzY3MjE5OTA5ODI4YWRlZjY0NDIyMjg2MDA4ZTFlMzA2ODY3YTFjMGIzZGE5NTQ0NDUwN2E2OGI0NWM5NTNlNCI6IjA3NmNmZmQwY2E5NzhmZTJiYWQ0MTFjZWQ0NWEwOTBhYmFmYjIyYTk5ODk2ZjZhNzVhMTk2OTI3NmFhMmIwY2RiMzdjY2FmMjg0NWRiZjZlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzMgKFA9MjQsIE49OSwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGNjNjIyNjQ1MDY1YzcyZDBkMmFjYTc1ODAyY2YxYmJiZDgxMDk2NzIxNjI3YzA4IjoiNTk3YjM2MTRmZjljZDU2N2FmZDFhYWQ0ZTVmNTJjYzNmYTRjYTMyYjliMjEzYzU1IjoiY2Q4NGFjYmU5YWJiNmE5OTBhIjoiNDQ3YjZmMzZhY2RhZDJkMWNmZDZlOWE5MmY0MDU1YWQ5MDE0MmU2MWY0YTE5OTI3Y2FlYTlkYmU2MzRkMzIwOCI6IjJkN2ZiODNlNjYyMWVlZDkwNzNlMDM4NmQwMzJjNjk0MWJlZjM3YjJjZjM2YTRjNmM1ZTM2MjIyZDE3YzZmYjA2MzFjM2Y1NjBhM2NlNGE0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzQgKFA9MjQsIE49MTAsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFiNzJlZWYyYWJhMzAyMDVjOTg2ZTIwNTJkNmUyYzY3ODgxZDI0YWU1ZmNlYWE4ZiI6IjJhNzk0Yjg0ZmM5ZTRhN2U2ZDcwYTgyYjUxNDFmZDEzMjE3N2E4NmI0ZThmYzEzYSI6ImQ3YTQ2ZTcyNmVkNDNmMTU4MGViIjoiYmFhODZmMTQyNzFiMmJlN2RiYjM3ZGRjN2M5NWNlNDg1N2U1N2FhOTQ2MjRkNTk0ZDdiZDZjZWVhYWRhOGQ1ZiI6IjJkN2Y3NjQ2NDQxNzYxM2JiNjFkMzY1NzQ4MTM0NmI3NGZjOWQ2YWJjNmEzYmFiZDM5MzY1ZGNlODY4NTljZDgyMzk1ZDExYmZjOGNmMTg4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzUgKFA9MjQsIE49MTEsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFmODRjNmYzMDJjNTlhZWVlNmQ1NzI4ZWQ1ZGEyZTNjNjRhNWE3ODFjNTJjNGQxYiI6IjZkYjQxYWViNWY3YzI0ZGY4OTI5ZGJjMzA0ODNiM2M3OTM0YjNiZDFjZGNlNWJiOSI6ImRmOTkwYzQyYTI2ODk1MDY3N2M0MzMiOiJhNmFiNWQ3ODQyN2YyOTdhNGI3ZTIxZjEwOTFmZjNhNWIyMGNhYTNmZTFjYmNiMDk0NTlkOWRmNTk2YTZjOGUxIjoiOGM5MzI4MjU4YmY3MTk3MGQzM2UyM2EzZmY4MWNjMWM5Y2JlMTk2YTEyOTQyNjRiZmQ2YTcyNTVlNDgwMTk2M2JiMzBhNjNkZTNmYzViODIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTE5MiAjNiAoUD0yNCwgTj0xMiwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDQ5YjI1NWFlZDhiZTFjMDJlYjZkOGFlMmJhYzZkY2Q3OTAxZjFmNjFkZjNiYmY1IjoiMDYyZWFmYjBjZDA5ZDI2ZTY1MTA4YzBmNTZmY2M3YTMwNWYzMWMzNGUwZjNhMjRjIjoiMWFmMjllNzIxYzk4ZTgxZmI2Mjg2MzcwIjoiNjRmOGEwZWVlNTQ4N2E0OTU4YTQ4OWVkMzVmMTMyN2UyMDk2NTQyYzFiZGIyMTM0ZmI5NDJjYTkxODA0YzI3NCI6IjcyMTM0NGUyZmQwNWQyZWU1MDcxMzUzMTA1MmQ3NWU0MDcxMTAzYWIwNDM2ZjY1ZjBhZjJhNjYzZGE1MWJhYzYyNmM5ZjQxMjhiYTVlYzBiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0xOTIgIzcgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM2YWQxZTNmYjYzMGQxYjFmYmNjZmQ2ODVmNDRlZGQ4OTg0NDI3Yjc4ZGVhZTdhOSI6IjhiOWRiMWM4ZjliNDg5MmE1NjU0Yzg1NDY3YmNmZmEyZTE1ZTI4MzkyYzkzODk1MiI6IjNhZjYyNWRmOGJlOWQ3Njg1YTg0MmYyNjBlIjoiMzA4NDQzMDMzZWNkNGE4MTQ0NzU2NzJiODE0YjdjNmQ4MTNkMGVjMmEwY2FlZWNiY2FiYTE4YTI4NDBjZGI2YyI6IjZiYzY4OTBmZWUyOTljNzEyZmI4ZDlkZjljMTQxZjI0ZWUxNTcyYjhmMTUxMTJjMmY4Yzk5Y2NmMmQ4Mjc4OGNmNjEzYTYxZDYwZGFlNDU4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0yNTYgIzEgKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTUzNTIxYTc2NWFiMGMzZmQyMDM2NTRlOTkxNjMzMGUxODliZGY5NTFmZWVlOWI0NGIxMGRhMjA4ZmVlN2FjZiI6IjY0NGViMzRiOWExMjZlNDM3YjVlMDE1ZWVhMTQxY2ExYTg4MDIwZjJkNWQ2Y2MyYyI6ImFhYTIzZjEwMTY0N2Q4IjoiYTM1NWQ0YzYxMTgxMmU1ZjkyNThkNzE4OGIzZGY4ODUxNDc3MDk0ZmZjMmFmMmNmMGM4NjcwZGI5MDNmYmJlMCI6IjI3ZWQ5MDY2ODE3NGViZjgyNDFhM2M3NGIzNWUxMjQ2YjY2MTdlNDEyMzU3OGYxNTNiZGI2NzA2MmExM2VmNGU5ODZmNWJiM2QwYmI0MzA3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0yNTYgIzIgKFA9MjQsIE49OCwgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDcyYmY3OTQ2YmNlMWQzYzZmMTY4ZjQ0NzVlNWJiM2E2N2Q1ZGYyZmEwMWU2NGJjZThiYjZlNDNhNmM4YjE3NyI6IjU5ZWI0NWJiYmViMDU0YjBiOTczMzRkNTM1ODBjZTAzZjY5OWFjMmE3ZTQ5MDE0MyI6Ijc5MDEzNGE4ZGI4M2YyZGEiOiJhN2E4NmE0NDA3YjdlY2ViYzg5NDM0YmFhNjVlZjE3M2U4OGJkMmRhZDk4OTliNzE3Y2E1Nzg4NjdjMmQ5MTZmIjoiZGI0OTYxMDcwZjUyOGNjZDFhNWEwNjgxZWU0ZDBjZTM1MTVmYjg5MGJjY2VkYzJkYmMwMGIxZDhiMmJjMzkzYThkMDllODdhZjc4MTFmNTUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWTlQgQUVTLTI1NiAjMyAoUD0yNCwgTj05LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1OGFlNzk2NWE1MDhlOGRkMmVkYTY5YjVkODg4YTI4YTFjYjM3ODNiYWQ1NWQ1OWQ1YjBkYTg3MTM3YjcyZTkzIjoiZTYxYmFkMTc2NDBlY2ZmOTI2ZDBiMDIzODI3MWVlNGM5ZjhlODAxZGQ3MjQzZTllIjoiY2FhM2Q5MjhkMmJmMmI3ZjJjIjoiMzA0Njc4YjNmZmQzMjAwZTMzYTg5MTJiY2I1NTZiM2NmZWM1M2NhMTdmNzBlY2JhMDBkMzU5ZjlmNTFkM2UzYiI6IjdiYjExMzdjMTRjYjRkMzI0YTRhOGYxMTE1YzYxOWViZjc0OTI3ZjBiZWQ2MGE4ZDVhOTE0MGZmNTBkYzRkYTM3NWM3ZDJkZTgwZGUwOTdmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0yNTYgIzQgKFA9MjQsIE49MTAsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlY2M1ZTE4MDg4YmY5ZmQ3YjE3ZjA4OWJkZDU2MDdiNjk5MDNiMDRiNzI2MzYxZjhhODFlMjIxYjFjOTE4OTEiOiJkNDI5MWM5OTkwMTM0NWFmZTI5ZjU4OTEyYTQxNGE3NDk4ZjM3YjQ0MzYyYmRmM2MiOiJjNTI3ZDMwOWFiMjllZTkxYzVmYyI6IjhmOWE3M2U3YmMxYzExZTI5MTkwMjBiYTNhNDA0Y2JkZGY4NjFlOWU3ODQ3NzIxOGUzYmUyY2Q0MzM3YjI3OGQiOiIzOTI3ODRhOWUwYjE0YmNkMzc2MzllYzU0MDlkNmVhZDNlNzVmODU1ZTVhOTJjMzNmZmMwNDBlZjM5NzdlMDAzNWNlNmVhNmQxNTdjMThkMyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMjU2ICM1IChQPTI0LCBOPTExLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5N2JjNzQ4MmE4N2JhMDA1NDc1ZGZhMzQ0OGY1OWQ0YjNmOWM0Yzk2OWQwOGIzOWIxYjIxZWY5NjVjMGY1MTI1IjoiYjk5YmY0ZGM3ODE3OTVmYzRkM2E4NDY3YjA2ZTE2NjVkNGU1NDM2NTdmMjMxMjlmIjoiMGJjZjc4MTAzZWM1MmQ2ZGYyODg4NyI6IjA0OWMxMGYwY2IzN2FlMDhlYWUyZDA3NjY1NjNiN2M1YTg0NTRmODQxYzIwNjFhNGY3MWEwYTIxNThhZTZjZTUiOiIwZDM4OTFmYTBjYWFjMWY3ZWJlNDFiNDgwOTIwZmZkMzRkNDE1NTA2NGMyNGYzYjE3YTQ4MzE2M2RkOGYyMjhkMWYyMGNkNGY4NmNmMzhmZCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZOVCBBRVMtMjU2ICM2IChQPTI0LCBOPTEyLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNmZmNjczNzlhMmVhZDJjYTg3YWE0ZjI5NTM2MjU4ZjlmYjlmYzJlOTFiMGVkMThlN2I5ZjVkZjMzMmRkMWRjIjoiOTg2MjZmZmM2YzQ0ZjEzYzk2NGU3ZmNiN2QxNmU5ODg5OTBkNmQwNjNkMDEyZDMzIjoiMmYxZDA3MTdhODIyZTIwYzdjZDI4ZjBhIjoiZDUwNzQxZDM0Yzg1NjRkOTJmMzk2Yjk3YmU3ODI5MjNmZjNjODU1ZWE5NzU3YmRlNDE5ZjYzMmM4Mzk5NzYzMCI6IjUwZTIyZGI3MGFjMmJhYjZkNmFmNzA1OWM5MGQwMGZiZjBmYjUyZWVlNWViNjUwZTA4YWNhN2RlYzYzNjE3MGY0ODFkY2I5ZmVmYjg1YzA1IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVk5UIEFFUy0yNTYgIzcgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhNzVmZjJmNjZkYWUyOTM1NDAzY2NlMjdlODI5YWQ4YmU5ODE4NWM3M2Y4YmM2MWQzY2U5NTBhODMwMDdlMTEiOiIyMDVmMmE2NjRhODUxMmUxODMyMWE5MWMxM2VjMTNiOWU2YjYzMzIyOGM1N2NjMWUiOiI0NmViMzkwYjE3NWU3NWRhNjE5M2Q3ZWRiNiI6IjI4MmYwNWY3MzRmMjQ5YzA1MzVlZTM5NjI4MjIxOGI3YzQ5MTNjMzliNTlhZDJhMDNmZmFmNWIwZTliMGY3ODAiOiI1OGYxNTg0Zjc2MTk4M2JlZjRkMDA2MDc0NmI1ZDVlZTYxMGVjZmRhMzExMDFhN2Y1NDYwZTliNzg1NmQ2MGE1YWQ5ODAzYzA3NjJmODE3NiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMSAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMjRhM2QzZGRlOGM4NDgzMDI4MGNiODdhYmFkMGJiMyI6IjdjODYxMzVlZDljMmE1MTVhYWFlMGU5YTIwODEzMzg5NzI2OTIyMGYzMDg3MDAwNiI6ImYxMTAwMDM1YmIyNGE4ZDI2MDA0ZTBlMjRiIjoiIjoiMWZhZWIwZWUyY2EyY2Q1MmYwYWEzOTY2NTc4MzQ0ZjI0ZTY5Yjc0MmM0YWIzN2FiMTEyMzMwMTIxOWM3MDU5OWI3YzM3M2FkNGIzYWQ2N2IiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzIgKFA9MjQsIE49MTMsIEE9MSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDhiMGRhMjU1ZDIwODM4MDhhMWI0ZDM2NzA5MGJhY2MiOiIxYjE1NmQ3ZTJiZjdjOWEyNWFkOTFjZmY3YjBiMDIxNjFjYjc4ZmY5MTYyMjg2YjAiOiI3Nzc4MjhiMTM2NzlhOWUyY2E4OTU2ODIzMyI6ImRkIjoiZThiODBhZjQ5NjBkNTQxN2MxNTcyNjQwNmUzNDVjNWM0NjgzMTE5MmIwMzQzMmVlZDE2YjYyODIyODNlMTY2MDIzMzFiY2NhOWQ1MWNlNzYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzMgKFA9MjQsIE49MTMsIEE9MiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTUzOGNjMDNiNjA4ODBiZjNlN2QzODhlMjlmMjc3MzkiOiJlN2I4MTlhODUzZmZlNzliYWFhNzIwOTdmZjBkMDRmMDI2NDBhZTYyYmNmZDNkYTUiOiI5ZTczNGRlMzI1MDI2YjVkNzEyODE5Mzk3MyI6ImM5M2MiOiIxZDhmNDJmOTczMDQyNGZhMjcyNDBiZDYyNzdmNDg4MjYwNGY0NDAzMjRiMTFiMDAzY2EwMWQ4NzQ0MzliNGUxZjc5YTI2ZDhjNmRjNDMzYSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjNCAoUD0yNCwgTj0xMywgQT0zLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMTQ5ZTQxZDg0OGY1OTI3NmNmZGRkNzQzYmFmYTlhOSI6Ijk3NTllNmYyMWY1YTU4ODAxMGY1N2U2ZDZlYWUxNzhkOGIyMGFiNTljZGE2NmY0MiI6IjE0Yjc1NmQ2NmZjNTExMzRlMjAzZDFjNmY5IjoiZjU4MjdlIjoiZjYzNGJmMDBmMWY5ZjFmOTNmNDEwNDlkN2YzNzk3YjA1ZTgwNWYwYjE0ODUwZjRlNzhlMmEyMzQxMTE0N2E2MTg3ZGE2ODE4NTA2MjMyZWUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzUgKFA9MjQsIE49MTMsIEE9NCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWE1N2EyMmM3ZjI2ZmVmZjhjYTZjY2VmZjIxNGU0YzIiOiIwMzVjNTE2Nzc2YzcwNmE3ZGQ1ZjE4MWZhNmFhODkxYjA0ZGQ0MjMwNDJlYTA2NjciOiI4OGYzMGZkMmIwNGZiOGRkYmNlOGZjMjZlNiI6ImE5NWJkZmY2IjoiYjkyZjdlYzJlYmVjZWJkYmQyOTc3YjM4NzRlNjFiZjQ5NmEzODIxNTNiMjUyOWZjOWI2NDQzYTM1ZjMyOWIyMDY4OTE2ZmI2YWI4MjI3ZWIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzYgKFA9MjQsIE49MTMsIEE9NSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTRjYWY5NmVmNmQ0NDg3MzQ3MDBhYWRhYjUwZmFmN2EiOiJjNjlmN2M1YTUwZjNlNzIxMjMzNzFiYmZkNmJkZjUzMmI5OWVmNzg1MDA1MDhkZmUiOiJhMzgwM2U3NTJhZTg0OWM5MTBkOGRhMzZhZiI6IjVmNDc2MzQ4ZGQiOiIyMGM0M2FkODM2MTA4ODAyNDlmMTYzMmRkNDE4ZWM5YTVlZDMzM2I1MGU5OTZkMWE0ZTVhMzJmYmU3OTYxYjgzMmI3MjJiYzA3YTE4NTk1YiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjNyAoUD0yNCwgTj0xMywgQT02LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYzBjMDg0ZDdkZTAxMWUyZjAzMTYxNmEzMDJlN2EzMSI6IjE1YjM2OTg4OTY5OWI2ZGUxZmEzZWU3M2U1ZmUxOTgxNGU0NmYxMjkwNzRjOTY1YiI6ImYwYjQ1MjI4NDdmNmY4MzM2ZmU1MzRhNGU3IjoiZGE4NTNhMjdhZWUyIjoiZjM5NzU1ZDE2MGE2NDYxMTM2OGE4ZWNjZjZmY2JjNDVlZjdmMWY1NjI0MGViMTlhMmUzY2E0ZWMzYzc3NmFiNTg4NDNmNjE3ZDYwNWZkNzIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzggKFA9MjQsIE49MTMsIEE9NywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDc1NzJlZDBlMzcyNjFlZmEwMmY4YzgzZTY5NWVmZGMiOiIxZWRlZjgwYzU3ZDE3Zjk2OWY4YmRlMTBhYjM4YTFhODgxMWExMjRkZTcyYzUyNmUiOiJmNGY5NmQ3YjQzODRhMzkzMGIzZDgzMGY4MiI6IjkyMjM0MGVjOTQ4NjFmIjoiZGUxNDU1OGNjNjg2ZTE4MzZmMWYxMjFlYTFiOTQxYTllYmQ0ZjBmYjkxNmRjODcwZmQ1NDFiOTg4YTgwMWNiNTc1MWM3ZmFhZjViMGMxNjQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzkgKFA9MjQsIE49MTMsIEE9OCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOThhNDJkN2EwYzU5MTdkZWFmM2I0ZGUzZjBjYmUwYTEiOiI5YWE5YzgzNTgxMTc1NjQzNzEzNjZiZWVlYzkyMzA1MWVmNDMzMjUyMTk3YWFhZDUiOiIwM2QzM2FiMGMyZGY3YmZjZTg4YjVlZTRjNCI6IjJkNTQzOGI3MjhiOTUwZDkiOiI5ZmY5NDJiYWE2MGY0NDBjMTdhNzhlOTU4MTIxNmI5YTk0N2E2N2YwNGQ1NDkxMWZlZWNmZmY5NzFmZGZhYTg1NjMxMGIwMTRhYTU5Yzk3OCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTEyOCAjMTAgKFA9MjQsIE49MTMsIEE9OSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmE2OGUzZmU3NDZmNTkzYzFiOTdjYjYzNzA3OWMzZTUiOiIxM2I0YTg3NDg4OGRiMGU1ZDhmZDgxNGI1ZTdlMDRmN2ZkZmJjMTYwMWNjYzAyYmMiOiJjZDYyZDBmMjdiN2Y0ODY0ZGM3YzM0M2FjZCI6ImFiZTRmMWQzODEyYmZlM2NjZiI6IjAzMjgzNWEzZGJmNjg4ZDA5Y2YyYTMyYTkyYjEwMTk1OWQzM2ZmNDc1MDBmOTJmNGZkNDk4NDA0NDBmODY2ZDFhMjJiMDg1NDk5NjExMWQ4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxMSAoUD0yNCwgTj0xMywgQT0xMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDZiMDY3Y2Y5YjFhMjhjZjE4NzAwMmU5MGIxNGUxMzAiOiJjYzA5MTUxOTQyMThkNDUzNmU0Njc0MzNjZDZkNzlmZjFkOWViOWZmMTYwYWI2ODQiOiJiYWQ4YzAzMjkyYmYwMWNmZDhkMzRmODYwYyI6IjhkNjU4ODBlZGRiOWZkOTZkMjc2IjoiYmQ1NmVkYzAxNTY5MmM2YWI5YmVjNDkzYTk4OTM4NjM1OTg0MTRhM2QxMWE2YTBmMjdlY2RjYjI1N2QwZDMwNDkxZTViZjFhYThmOTA5NTgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzEyIChQPTI0LCBOPTEzLCBBPTExLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlOTRkYWM5YzkwOTg0NzkwYTdjMGM4Njc1MzY2MTVmZiI6IjRkNjQ0NjFjNTVlYjE2YmY3YjkxMjBmMjJiZTM0OTU5OGYyZjM5NGRhODQ2MGRjNiI6ImMxOWYwNmY5MWU2NDVkNDE5OTM2NWYxOGMwIjoiNTM3MDM4YjUzNTdlMzU4YTkzMGJkNiI6ImU5ZmM1MDA0YzIzNTk3MjRlMWU0NDExYWU2ZjgzNGVmNmJlYTA0NmQ1NDk3NTNjODg3OTBjMTY0OGY0NjFhMzFjODRlNjJlYTg1OTJhMDc0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxMyAoUD0yNCwgTj0xMywgQT0xMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjZiYjVkNTliMGZhOWRlMDgyOGIxMTUzMDNiZjk0YWEiOiIwMTFmYzUwMzI5YmZkNjNhODVlYmQ0Zjc2OTMzNjM2MDJmMWE0MTQ3MzcxMjcwYjciOiIwNTM1OGYzM2UxZmM2YTUzYWI1YTVjOThjZSI6IjA0MGIyNTc3MTIzOWNjMmEzOTQ0NmUzYyI6IjQ0MzJkN2ViNDI5ODA3MzRkMzRmMTljNTBjZjhhYmY3MWFjMWIxOWVkNzVhNzI3ODU0ZTVkMDUwYTQwNWY3NTUwNDdkMDljYjBmNDk1NDZhIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxNCAoUD0yNCwgTj0xMywgQT0xMywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDFkYTJlOTYxZTc4MDYzYWY4ZGU0MTg2NWIyMjY4NzMiOiI4ZTVmYTFhNjY2MmE4Mzc4Y2RhMTU2OTdlOTI2ODQxNTk0ZjJmMzk0ZmE1YTM0YWIiOiIwMzczOWY1NDc0ODU3MDA2MzQwY2NlNTU0ZCI6ImUzYWZkMDkxZDJiNTg4NDY1ODcyYTYzMDBmIjoiY2EwZDk1ZTNmZjE4NmFkNmI4OGQ0NWZjNDA3OWU2YjdiNGE2MTVlN2U4ZGQ1ZjQ3NDJkNTIyY2M5ZGMxOWM0N2E0ZmEwYjE1MjgwNjljZjgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzE1IChQPTI0LCBOPTEzLCBBPTE0LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZWVlNjY3MjY3ZWYxMGIwMzYyNGNmOWMzNDFlM2Y3NSI6Ijc5OGUzMWNjZTBhODM3MDJhOTUxNzFmYjExNjJhMTdiOWNlMDBlYzM1OTJjZTI2MiI6IjA2MzBhM2VhZTI3ZTUwNWM2MWM1NmU2NTYwIjoiZDI0NjUxZWYwNTYxMjgyZDNlMjBlODM0OTYwYyI6ImYzYzNlNTJmMWExZmY1MjhhOGQzNzgzZWU0ZTc1ZjExNGUzZTY0MTYzMzQ4MTVkMmQ5MjM2ZDVjNWM5MzE5MDkyMDc4NDExYjcyYzUxYmE4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxNiAoUD0yNCwgTj0xMywgQT0xNSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGJiZDI2ZjVkOWU5NzBlNGUzODRiMjI3Mzk2MWJlNWEiOiI1NTM3MTRlMTdhMjA4YTJlY2ViODQ3YTRhMmQ5NTA4ODM4OGIxYWM4ZDhjYTQzZTAiOiIwYjFlYWJlNTA0ZWY0ODIyNTQyZTM5N2ZlYyI6IjQ3NzkzNzMwMWM4M2JhMDJkNTA3NjBiNjAzZTBlYSI6IjFjODAyMTMyNjhiYWQ1NDAyYzRkYzliNWQ4MzZhYjc0OTk4MTBkMGQ4YTk3NDcxNmRmOWEwZTk4NmFiMjg5MDczNjQyM2JiMzc3MmNlYzNlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxNyAoUD0yNCwgTj0xMywgQT0xNiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTBhNzcyMGYyZTE4ZjczOWMyNjkyNDkyNWFmNmI2NzAiOiJlNTk3ODJhOWFlYTQ1ZjQ2N2I5MGU1MWEwZmRmMTY2YmFiYTA1NjYzZGVmMmQ4YjYiOiI4YzRlNzgxM2FiOWJjZTlkYWZlZTAxYzYyOCI6ImEyMDk5NDFmYWI3MTBmZGEzOGQxMWM2OGIxM2Q5MzBmIjoiZTM1N2IxY2NkYWNhNmYzNTA2ZGM0NTI3OWMyZTRjNTlmNTMwN2E1ZmQ2YTk5Y2Q3MjM0MWVhOGMwNzg1NTY5OTczZjkwZWU5ZWU2NDVhY2MiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzE4IChQPTI0LCBOPTEzLCBBPTE3LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YmZmYWIxZjRmNGMxZmY2NmI0YTY2OWI1MTViMmY4ZCI6ImQ5MWIxMmU4NjU1ZGQ5MmIxMzMyZmMxZDcxYzM5MWM5NmExNzExMTU2MmQ5MGJhMyI6ImRkYjM0ZDVlMDE0MGZiOTZkNjkwZTFhMmI3IjoiNWNiYmE5ZWE3NzhlMDFhZjAwYWZiMmE5MzRmMjhjNzIxMSI6ImQzMDJlNWIyZDVkOTA0MzMxODZiODA0Y2Q3NzE3ZTJkYjJmMjJjZGMzNGZiMjk0MmFiMzA3ODBhMmM0ZjEyYWY4ZjM1MzUwZDY1Mjg0YzU5IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMxOSAoUD0yNCwgTj0xMywgQT0xOCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWU2MTM2ZGY5YWI0MzYzMWVmMTQzNTE1ZGFjZWRiZTciOiI2YTQ5M2M1ZWYzNzY5Y2NjNDEwMWRiYjJlYjM2ZTFlNWJiYzU3N2EwNTdjZTA3MzEiOiJjNWM0NDU3OTIyMDhhNTBjOGU5M2Q2NGFhMyI6ImUwNDAwNmI2OGM4M2E1ZGQ0Y2VhYzNjZGUyMzhlNDg4OTVhZSI6ImM3NTg0YzAyMDNjMjUzNWM1NzAyYzZhZTkzYjdjYmZiMDY2ZjRhMDU1YzYyN2ExODBkNmQ2NzZkMTFmY2U5MDdiNWM5M2ZhMWVkN2JmZjJiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyMCAoUD0yNCwgTj0xMywgQT0xOSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjE5MDgzMjhlZGYyOTk2ZWJmYzk2NTU0NzJjYTVhZDAiOiJlZWRlMDFiMDhmOWEzMDNjZGYxNGM5OWQ3YTQ1NzMyOTcyYzZlZmYyYTFkYjA2ZWIiOiI0YzY5MzM2NDU0NjkzMGI2YzUyNTBlMjY5OSI6IjRhMzYzNGU1MDI4ZGY5N2ZiZTAwZWIwMTZlOGVhNGYxOTE4ZmFhIjoiOTBjODUwNzkwYjBiMzgwZjVhZWIyNDg4ZmRmNDNjOWQ1ZWYxNzU5ODYxZTg2ZjZlNTI1NzBlNzY5NjI5ZGNjMmU1Njg3MzdiYTUzYTExOTUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzIxIChQPTI0LCBOPTEzLCBBPTIwLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MWNiOGViNzkyZTk1ZDA5OWExNDU1ZmI3ODlkOGQxNiI6IjZhZDU0MTY5NWEzN2MzMmQ3M2ZmNmQ1Zjg3MGFiZDViMGYzNjJhODk2OGM0ZmNlMCI6IjFmMzdiM2U1OTEzN2YyYTYwZGMwOWQxNmFjIjoiMDlkYjNlZmFjOTQ3M2Y3MTNkYTYzMGFlOTJjMmM4NjA0YzYxYzUxZSI6ImU2NWZjYzk3NTg2NWMxNDk5YjA4OGI1OGJhMTYzMjgzMDg1ZDhjYTY4ZGMzYjIzNWQ4OTc1NmU1ZDc4NzUzZWYyMmMwMTJhZTM0YjM5YTIwIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyMiAoUD0yNCwgTj0xMywgQT0yMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmUxZWQ0OWUyY2IwY2FmNmI2YTA5NDBjNTg0NTNiOTMiOiJhOWVlYzM4M2Y2Mzg5MjUyMWU0NjE2ZmNiYWRjNTQ4NTk0MmZmYWY0NjY5YzQzYTciOiJiNzhhZDEyOTQ1NzY4MWZhNzM0NjQzNWI5NyI6IjE2MWQ5MmM3ZGYxZWJiMDkyNDcxOWUwNjZlMDhiOTVlYjQ5MTRhNWVkYSI6Ijk0OWJlMzQwNzIwYzRmZGM0YWRjMDVjYjc3N2RkODFhMjU0OTYyOGQzM2ZiYTA3ZTYyZDJiMzM4YTdiMzRlYmQ5ZDg1YzI0NGM5NTJkNjgxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyMyAoUD0yNCwgTj0xMywgQT0yMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzRhYjZmZDdmNTRhMmUwMjc2ZmNiN2NmMWUyMDNhYmEiOiI4ZDE2NGY1OThlYTE0MTA4MmIxMDY5Nzc2ZmNjZDg3YmFmNmEyNTYzY2JkYmM5ZDEiOiI2MDkxYWZiNjJjMWE4ZWVkNGRhNTYyNGRkNyI6IjFhYjVjYzNkN2IwMWRjNzRlNmNmODM4YmI1NjVmZWEzMTg3ZDMzZDU1MmEyIjoiMGQzMGFiMDcxNTNiNTE1MzYzNzk2OWU2YmQzNTM5NDQ4YzU0MWU0MmIzZDQzMmZkN2VmMTQ2MjJhOWI2MjFkMTcyMWI5NDRjNjBmN2ZkNjciCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzI0IChQPTI0LCBOPTEzLCBBPTIzLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlYTk2ZjkwZmJhZTEyYTg1N2Y1Yzk3ZTBjYmE1Nzk0MyI6IjQ5ZGI4MGYyMmJjMjY3YTcwZTU2MzZkZmJjOGEyMWM4M2Q5NjkxZmU0YjljMzA1MSI6IjIxY2M0NmQ5Y2VkMTUzOWIwYWQ5NDZlNjAwIjoiMTA1MjU4ZDJmMjVmNjI2NzVhZWU5NzVjZmRiNjY4YWZmODMzZjA1YjYxZWIyYSI6ImQyZmNjOGI3ODA5YjVmYzA3ZTQ0MDgzZTQzN2Q4MTgwMTU3ZjE3ODJhOWNlOWY2NWM3ZmE5ZWUyZTdjZGMxYjc1NTI1OGYyMjEyYThhOGY0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyNSAoUD0yNCwgTj0xMywgQT0yNCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzViNDAzYTE1MjEyMDk3MDg1ZDZlMmI3N2VjM2Q0ZjIiOiI3ZGQ3Mzk2ZGI2NjEzZWI4MDkwOWEzYjhjMDAyOWI2MjQ5MTJhYWJlZGRhMDY1OWIiOiJkYWE0MjNiZjkyNTZjM2ZjYzM0N2EyOTNhYSI6ImQzYzBlZDc0ZTVmMjVlNGMxZTQ3OWUxYTUxMTgyYmIwMTg2OThlYzI2NzI2OTE0OSI6IjViMDBjZjhhNjZiYWE3ZmUyMjUwMmVkNmY0ODYxYWY3MWZhNjRiNTUwZDY0M2Y5NWVlZTgyYzE5ZWNiYTM0MjgwNjA0YjU4ZDkyZGFjZDNmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyNiAoUD0yNCwgTj0xMywgQT0yNSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2E0NTlhYWRiNDhmMWE1MjhlZGFlNzFmY2Y2OThiODQiOiIwYjNkOTQ3ZGU4NjMyZGM4ZmY3NTJmNjE5YmE3Yzg0NzE2ZmFjN2EyM2UxMDE2NDEiOiJmYTQ2MTZiNzE1ZWE4OTg3NzJiMGU4OWRkNCI6IjBjMGI0YTQ1ZGY1YzM5MTljMWUxNjY5YzVhZjVkMzk4ZDk1NDVlNDQzMDdkOTVjNDgxIjoiN2RiOWYzZjdkYzI2ZmMyYWRmNThkNDUyNWQyNmQ1NjAxZTk3N2RlNWE3YzMzOTExYTExMzhjZmY3YjYyNGY5OTA4YjViNGQ3ZTkwYTgyNGEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzI3IChQPTI0LCBOPTEzLCBBPTI2LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYTc0ODIyNTA1N2Y3MzVmNzEyZWNjNjQ3OTEzNjdmMCI6ImU5MmNkMGNiOTdhZmU0ZmIwMGM0ZjEyZTliOWFiZTFkMDhkYjk4ZjQ5YTI3ZjQ2MSI6IjEzNDFhNjk5OGViMWY1MGQ0YjcxMGExM2FjIjoiNWZiOTZiMDQ1ZjQ5NDgwOGMwMjAxNGYwNjA3NGJkNDViOGE4YWQxMmI0Y2I0NDhlYzE2MiI6IjgyYjY2NjY5NDIzMmU4NmU4MjI5NWJlYWU2NmFlNjdkNTZhY2ViNWQ2YjE0ODRjZWI0YTY4NDNlYzE2MDc4MDM4YzEwYWZlZGM0MWY1MzYyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyOCAoUD0yNCwgTj0xMywgQT0yNywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmRmMmIyYzdmY2IzNzg5YjRlOTBhYmU2MDdkY2EyYWYiOiJkN2FhNGVmYTVkNzUxOTVhNDAwMDE4YmQzOGY3ZDhjZDUzZmRmZmU4OGRmMTgzN2YiOiJhNjlkZGM2NmU2M2EzNDE1ZjIxMDA5ZDUzYSI6ImM3Njg0NmRhNDk2ZWQ4N2I5YzBmNjVjNjI2NmM5YTgyMjIyNGFjZGU5Nzc1ZWZiMTg2YTRhNSI6IjE1MGQ5YThiNzhkOWMwNDIzOWQ2NjIwN2ExZjk1MDIxYmJiMWI3YzcwZDdjMzU0ODI1ZDA1ZTVhMmU3NmE5MGY2ZmU0ODlmZDc0Y2FiMmEzIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMyOSAoUD0yNCwgTj0xMywgQT0yOCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2Q4NzBkN2U1MmQzMDUzYzY1ZWVmYWQ0Nzc2NGNmZWIiOiIxMDkzMTc1NTZjMjFjOTY5ZWRhNjVhOTQxNzZkN2ExMTQ2MmM5YWUxOGE4NjViNmQiOiIzN2Q4ODhmNGFhNDUyZDdiZjIxN2Y1YTUyOSI6Ijk2MTA5NDlmNmQyM2Q1YjFmMzk4OWIyZjRlNTI0ZmFiNGYyOTdhNWJlYzhkZGFkNGYxNmNiNjE2IjoiNGU2Yjk2N2IxNTcxYzZkN2I5ZTExOGIxMTJiN2FjOTQ5YTRhMTc1NjUwMzE2YTI0MmRkNTc5Y2IwZDIwMWQyMmM4NmJiYzdmYmU0N2JkMGQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzMwIChQPTI0LCBOPTEzLCBBPTI5LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ZmNhYzQwNTI3YzBlN2NhOGVhZmYyNjVjYTEyYzA1MyI6Ijc4ZDFlOTZhZjhjZWJkY2M3ZTdlMmE0ZGRjZmEzNGY2Y2Y5YTI0ZmI4NTY3MmFkNyI6ImFlOWYwMTJmZDlhZjYwYTQwMGUyMGIxNjkwIjoiOWNlNjU1OThjZDFmODZhZmM5YWFhZjE3MjgwOTU3MGNjMzA2MzMzYzI1NTIzZjg2M2M2ZDBlMDE1NCI6IjlhZGI5YTk1YTkzNzlhZDc5NWQ4ZDNmZmQ0ZTM3YTA0NTE2MGQ2ZDcyN2Y5NzRhNmNiM2I1MTUxZjMyN2U2NTQ0N2U1MmM3NTI1NTYyYzkxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMzMSAoUD0yNCwgTj0xMywgQT0zMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGRmOWYxNTBjYzNmMWMxNWU4ZTc3MzY2M2M1YjA2MWMiOiI3OWQ4ODQxYWI4MzI3OTcyNGNlMzVlMWE4YWJkNGUxNTgxNjhkY2YzODhhYjRjM2QiOiI5OGM1MDM2YjdkNTRkYTlhMTE3NzEwNTYwMCI6IjIwYzVhYjI5MGU2ZDk3ZjUzYzc0MTIxOTUxZjM5YmE4NjViM2FjYzQ2NWZhM2YwZmI4YTU5MTYyMjI3NyI6ImQwMGQyOTM5NmZmYTllNjkxMjkwZDc0NjUyNzc3N2JmOTZhODUxZjMwNmQ0ZGEwYjE4MTZkZjFlMGU4MmJiN2JjODEwNTkzMGFkNmEyMjMyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTI4ICMzMiAoUD0yNCwgTj0xMywgQT0zMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjFkYzgxZDExNmQ5NGY1ZWNlZDUyNmIzN2MwMDRiOTUiOiI1NDM5MDcxNWI2ZTdjN2JkNTFhMjM0ZGIwNTlhNTFiYTAzMGNmMjJlZTAwYjcyNzciOiI5N2M4ZjY5ZmI5MWIxNzI5OTQ2MWZkOGQ2MyI6ImY4YjA4YWE4M2JlZDA5Y2EzNDIyNDliMmNmOWUyYjQ1YTg5ZGNmYjg3MTFhMTIwMzk1ZTQ1NTkyMWFmNDgxIjoiY2I2Mjk5OTRjMzQxOGE2NjJhOGNkZTFiNWY0ZDk5YWE3ZGY2NmUyNGM1M2RjNmRmMTEyOTc5MzBmZDQ0YzYzNjc1YjdjY2E3MDY3MWVmNGQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xMjggIzMzIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YTMzOTgwZTcxZTdkNjdmZDZjZjE3MTQ1NGRjOTZlNSI6ImEzNGRmYTI0ODQ3YzM2NTI5MWNlMWI1NGJjZjhkOWE3NWQ4NjFlNTEzM2NjM2E3NCI6IjMzYWU2OGViYjgwMTBjNmIzZGE2YjljYjI5IjoiZWNhNjIyYTM3NTcwZGY2MTllMTBlYmIxOGJlYmFkYjJmMmI0OWM0ZDJiMmZmNzE1ODczYmI2NzJlMzBmYzBmZiI6IjdhNjBmYTdlZTg4NTllMjgzY2NlMzc4ZmI2Yjk1NTIyYWI4YjcwZWZjZGIwMjY1ZjdjNGI0ZmE1OTc2NjZiODZkZDEzNTNlNDAwZjI4ODY0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxIChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlYjhkOWM4ZjNiOTA2Zjg4NiI6IjM5ZjA4YTJhZjFkOGRhNjIxMjU1MDYzOWI5MWZiMjU3M2UzOWE4ZWI1ZDgwMWRlOCI6IjE1YjM2OTg4OTY5OWI2ZGUxZmEzZWU3M2U1IjoiIjoiNjM0MmI4NzAwZWRlYzk3YTk2MGViMTZlN2NiMWViNDQxMmZiNGUyNjNkZGQyMjA2YjA5MDE1NWQzNGE3NmM4MzI0ZTU1NTBjM2VmNDI2ZWQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzIgKFA9MjQsIE49MTMsIEE9MSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTc0ODc5OGMwZjNjYzc2Njc5NWM4Y2UwZTRjOTc5YzE5MzBkZmU3ZmFlZmVhODRhIjoiMTAwZmE3MTQ2MjI3N2Q3NmNhODFmMmNmZGIzZDM5ZDM4OTRiMGNhMjgwNzRhMGYwIjoiY2RmNGJhNjU1YWNmZThlMjEzNGZhMDU0MmYiOiI2NyI6IjM2ZTI0MTViNGY4ODhhNjA3MmYyNjBkN2U3ODZkODAzYmUxNmY4YjljYmVlMTEyZDdmZjc0ZTNiMDViN2Q3YzEzMjg0NTczYmQzZTdlNDgxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMzIChQPTI0LCBOPTEzLCBBPTIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM5M2RjYWM1YTI4ZDc3Mjk3OTQ2ZDdhYjQ3MWFlMDNiZDMwM2JhMzQ5OWUyY2UyNiI6IjI2MmY0YWM5ODg4MTI1MDBjYjQzN2Y1MmYwYzE4MjE0OGU4NWEwYmVjNjdhMjczNiI6ImZlNzMyOWYzNDNmNmU3MjZhOTBiMTFhZTM3IjoiMWM4YiI6ImU2ZDQzZjgyMmFkMTY4YWE5YzJlMjljMDdmNDU5MmQ3YmJlYjAyMDNmNDE4ZjMwMjBlY2RiYzIwMGJlMzUzMTEyZmFmMjBlMmJlNzExOTA4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICM0IChQPTI0LCBOPTEzLCBBPTMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3NGFiYzQzNDdlNGJlMGFjYjBhNzNiYjhmN2QyNWMzNWJhZTEzYjc3ZjgwMjMzYSI6IjYzNzI4MjRiZjQxNmNkMDcyYTdhZDBhZTVmOWY1OTZjNjEyNzUyMGMxYjY4OGFiNCI6IjZhODUwZTk0OTQwZGE4NzgxMTU5YmE5N2VmIjoiYTQ0OTBlIjoiYjE0YTA3YmRjMTE5ZDg3NjExMzQyYzRjNjkzNWM1Nzg2ZmYxZjlhZTJlYjQ5ZTYxOTFjODhhM2NiNGZiYWZjYjhhNGExNTdkNTg3ZDdlMzkiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzUgKFA9MjQsIE49MTMsIEE9NCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGYwNTJlOTVhZWEzNzY5YTQzM2NlNGU0ZTgwMGI4NDE4NjQ5YmJlOGM2Mjk3ZWIwIjoiZThjMWE4OTIyOGQ4MjEyZjc1YzEzNmJhYjc5MjNhODlmOWZlYTE4ZTc4MWNiODM2IjoiYmEzNTZkMzkyYzNmNzAwZjRmMjcwNmE0Y2EiOiI4ZmZjMGUzZCI6IjY2YjVkNzgyMzIzOTI1ZTFiZDBhODQxM2E5YTVhODgxMzU2NDUzZDVkZjJjYmViMTk5YjJlMWU4MDM1NTBkY2RkZTU1ZmQ2NmVjYjQ1ZWRkIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICM2IChQPTI0LCBOPTEzLCBBPTUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE2ZDM0NTYwNmEzMTVhZDI0MDZhYmJjYjQzY2Q4Y2FiZTk0ODEwN2JhNmQxN2E3MiI6ImQzYmVmNDYwMjIzYzgxZTQ1NzljOWQxZDQ2M2FjNWUwODgxNjg1ZGUxNDIwYTQxMSI6ImQ0ZWYzZTllMDRmMWI3ZjIwZmZjNWEwMjJlIjoiYTQ2OGYwOGQwNyI6ImFiYjg1ZGI0OWE5YjFjODcyNGVjYmM3MzRjYzgzNzNiZDIwMDgzY2ZhNDAwN2IxY2ZlNGQzYTNiYjI1Zjg5ZjY5Mjg4NGJlMjMwYzYwMzVjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICM3IChQPTI0LCBOPTEzLCBBPTYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjNDc2Y2ZkN2RkMzAwZDk2MWZkM2YyNGE2ZmUwZTgwNzQyYjAwODUxNjc2Y2E2MyI6IjZmMzkzODkzMmI1YzEyODAzMTFlODkyMjgwZDhhODIyYTgyOGEwYmU3ZmRiMWJjZCI6ImUzMDBmYzdhNWI5NjgwNjM4MmMzNWFmNWIyIjoiMjgxMzBmOTM4YzQ1IjoiZGY0ODY2MmZlMTM0ZTc1YTg1YWJjMmNlY2UyYzNiNjIzNmM4OGE3MGZhNzkyZTliZWFkYzk2MDFhZGY5ZmJkZjRlM2U5NGIzOTViMGEzMzIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzggKFA9MjQsIE49MTMsIEE9NywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzlkMWUzOGE3MGRmMWNmMjM5YmUxNjg4MzNkY2QwNTcwYmM4ZjM3YjNhYTI2YzM3IjoiODNjMjRmM2E3N2I4M2I0ZWY0NTI3N2JhOTAyMjVmM2JhMTcyMjMxMmY1MmIxYTA3IjoiODIyOWQ2ZDdlOWUyMWZkYzc4OWJmZjVkY2YiOiIwNzY4ODdkMmFiZTkwMCI6IjE5ZDg4MGYxZDk1OWE2OGYxNjJkZTI0M2Q0YTQ1NzQ3YWNlNzA0NjEzMzU5YjI3MjE4ZDE1MzFhMDY2ZGU2MGE5NWQyOTI0YTY5MTBlOTkwIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICM5IChQPTI0LCBOPTEzLCBBPTgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcyZTZjZWJkYWY4ODIwNWM0ZTc0NDI4NjY0YmMwZDdlYjQ2ODdhMjcyMjE3YjdjYSI6IjU0YmM3ZTNjMjI3ZGY0ZTgzMjUyYTU4NDhmZWExMmRmZGIyZDE0YjllNjdjMTYyOSI6IjM4MjBkYjQ3NWM3Y2IwNGEwZjc0ZDhlNDQ5IjoiZjQyN2M0N2UxMGM0NWJiMyI6IjkxZTdiYWZmMmI0MmFmNjNlMjZjODdjZTY5OTFhZjIyNDIyYzFmODI5MDY4NThiMTcyMTk2MWRlNWM3NjhmNGQxOWJkMzAzNGY0NGYwOGQyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxMCAoUD0yNCwgTj0xMywgQT05LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOWMwM2EwYzg2MzQwNDdiMTYzNTM0OGYyODRkM2RjMWU3NTJhYjQwNTQ4ZWIzMzciOiIwNjYyZTYzYzg4ZTk2M2QzZTBjZjJjNDY1MzUxNWFlNDQ3NGEyYzc4YWIwMzk0YzAiOiI5ZTJlYThlYjdmNTYwODdlZTUwNjkyNTY0OCI6IjI4ZDE1N2YwOWE3MWRhODBkZCI6IjAxZGNkNGRkM2I4YzEzNjk1MTgxMzZjZTQ1ZThiYjlkZjU2NWIwYWQyMzFhODg3YjAyYWRhMzRhZGRmMGFhMmY0NzQ0ZWQyZTA3OTk1NDkxIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxMSAoUD0yNCwgTj0xMywgQT0xMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTJhOTJmZmJiMGI1ZWI2OGNiODI2ODdmMTI0NDlmYWU1MTY3ZDM3NTEzMWIwYjEwIjoiMDQ4YzliYTQ1OTdjM2JiNTk1YmZkNTA0OGU1ZTlhMTI5NmYzMGU1YzAxMThiMTc3IjoiNDQxYWQ1ZTEzODJlMDgzYTk1MjI0ZjM5NWQiOiIyMzUyNjQ4Mjk5YjA0MTNjYjJjZSI6IjI1MjQ3YTI1OGU0YWMwYTk4OGQ4ZGVmNjBjYzE3NGE5ZDQ1NzhjZDUzNDZmYjUxNTBjOTZlOGFiODc3NGJhYTQyMWYzOWM2NGEzODZjNDE4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxMiAoUD0yNCwgTj0xMywgQT0xMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWYxYWQzZWIwYmRlN2Q0NzI4Mzg5ZGEyMjU1ZDFmOGE2NmVjYjcyZTZmMmYxYWM0IjoiOWY1ODBjYzZjNjJhMDVjZTEyNWM2YmVjMTA5YTQ4Y2E1MjdlZTI2YTY0YjE0YjY4IjoiOGU3ZDhhNDQyNDRkYWE3ZGYyYjM0MDk5M2UiOiI1MjE1ODNjMjVlYjRhM2IyZTQ2MTIwIjoiZmYwZmY5NWJjYjBiY2NkNWU0YWFkZDc3YWM2NzcwZjUwMTM2NTRlYjNjNjM4NmZkZWQyYzg3MTM1ODYxYjQzYTk5ZjI1OGI2OTM4ZjY2ZTMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzEzIChQPTI0LCBOPTEzLCBBPTEyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NGNiYTIwYjcyMDRlZDg1MzI3YzljNzFjNmZlYTAwYjQ3Y2U3YmRkZTlkZWE0OTAiOiI2MzMzYmRlMjE4Yjc4NGNjZDgzNzA0OTJmN2M4YzcyMmY4ZWYxNDNhZjY2ZDcxZDciOiJmMzMyOTE1NGQ4OTA4ZjRlNGE1YjA3OTk5MiI6ImYxZTBhZjE4NTE4MGQyZWI2M2U1MGUzNyI6ImI5NDAxYTQ5MjdiMzRkYzE1ZTkxOTNkYjAwMjEyZjg1ZjBjMzE5NzgxZWM5MGUzYjQ0ODRkOTNjYjQyMmNiNTY0YWNjNjNkM2QxOGUxNjljIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxNCAoUD0yNCwgTj0xMywgQT0xMywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjVmNDNmM2FlMzhhNjE2NWYwZjk5MGFiZTllZTUwY2Q5YWQ3ZTg0N2EwYTUxNzMxIjoiMzcyNmMxYWFmODVlZTgwOTlhN2ViZDMyNjg3MDBlMDdkNGIzZjI5MmM2NWJiYTM0IjoiMTM1MDFhZWJkYTE5YTliZjFiNWZmYWE0MmEiOiJlYWQ0YzQ1ZmY5ZGI1NGY5OTAyYTZkZTE4MSI6ImZkODBlODhmMDdkYWQwOWVlZDU1NjlhNGY5YmI2NWM0MmVmNDI2ZGRhNDA0NTAxMTk1MDNkODExNzAxNjQyMTQzMDEzZjI4Y2UzODRkOTEyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxNSAoUD0yNCwgTj0xMywgQT0xNCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTNmMTc5YWEyYTIzYmM5MGE4NTY2MDMwNjM5NDk0MGU5YmIyMjZjZTM4ODVlYzAxIjoiZDNiMzZjNjI4OWFkNmFlN2M1ZDg4NWZlODNkNjJhNzYyNzA2ODljZTA1ZmEzYjQ4IjoiYWFhNTJjNjNjYTFmNzRhMjAzZDA4YzIwNzgiOiI1Y2M5MjQyMjI2OTI5NzlhOGUyOGFiMWUwMDE4IjoiYmM0ZmNlZjQwMWMyZTFkMWMzMzU3MzRmZjIzZWE1MmMzNDc0ZDJlNmYzMTY0OGE3ZjU4NjQ5NDAwYWM5ZTgyNWIwMzhkNjdmMGMyYTZmMWMiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzE2IChQPTI0LCBOPTEzLCBBPTE1LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMWRmYzQ4MjczZDQwNmEzYTdiOTE3NmY4MGIyZGM0ZTlhN2Y2ODEzNGJhYjY2ZDIiOiI2N2Q5NzI4YTg4ZjFmYWMzYWY0M2VkNmQ2MzRiYTkwMjg5NmJkMjI2ODU4Njk3ZDkiOiIxYWM1M2JhOTY1Y2RhZWVlZjczMjZhMzdlNCI6IjM5YmE1NGE0MTBhNThhNWQxMTYxNWEyMTYzY2MzYiI6IjM2MGYwZmM3MTQ5OTRlM2I1OTQ0OGI1MGNkZDYxZDUxMWI0ZjA5ZTBlNWZiNWFjODI2YTUxZmU1YjliNTk4YTE3ZWIzZGExMGY5MzY4MTNiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxNyAoUD0yNCwgTj0xMywgQT0xNiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDhhNjYyYWI4NDQ5YmQwMzdkYTAzNDZhMjQ1NjU2ODNhM2JiYmJkMTgwMGUzYzFjIjoiNjFmZGQxMDkzODU1NzA4MDE5MWQxM2RkNmMzMDAyZGQ0NDVkOWFmOTg4MDI5MTk5IjoiMTY2ZmI4ZDBlMTEwMTI0YzA5MDEzZTA1NjgiOiIxYzFjMDgyZWViNWI4NTQ4MjgzZDUwY2MyYWNlMWMzNSI6IjIzYzA1OTI3NTAyYTRlZTZlNjFlNGUxMDU1MmQ0OWIwMjA2NDNlYWI0NzZlZWFjYzg2NzYwMWZlNzlhMTIyYTc4MTc4MTk2NTUxODMyODNlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMxOCAoUD0yNCwgTj0xMywgQT0xNywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTE2ZjQ4NTUxMjFkNmFhNTNlOGI4YjQzYTJlMjNkNDY4Yzg1NjhjNzQ0ZjQ5ZGU1IjoiMWJkM2I1ZGIzOTI0MDI3OTBiZTE2ZThkMGE3MTU0NTM5MjhmMTdmMzM4NGMxM2E3IjoiOTI0MzIyYTNlZjBjNjQ0MTJmNDYwYTkxYjIiOiIwM2MyZDIyYTNiYjA4YmJiOTZiMjgxMWNlNGIxMTEwYTgzIjoiYWQ3MzY0MDI2MjZkZjBmOTM5M2ZlNDQ5MWViODEyNzI1YWQzOWQ2ZmFjZjIwYjViMmY5MzQwYjBkNDhhMTdhZTFjYzcxZDc1MTVlNjFlZTkiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzE5IChQPTI0LCBOPTEzLCBBPTE4LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNjdmM2JhMTEyODJkNjFmZTM2ZTM4Y2FiN2I1NTljMmZkOWNiZThiZjdlYjU4NjMiOiJkN2E5NTRkYWU1NjNiOTMzODVjMDJjODJlMDE0M2I2YzE3Y2UzMDY3ZDhiNTQxMjAiOiJhNzI3ZWQzNzM4ODZkZDg3Mjg1OWI5MmNjZCI6IjY4ZDE5OWU4ZmNlZDAyYjdhZWJhMzFhYTk0MDY4YTI1ZDI3YSI6ImM2Y2ZhYTFmNTRkMDQxMDg5YmQ4MWY4OTE5N2U1N2E1M2IyODgwY2VmYzNmOWQ4NzdlMzBiMmJjYzNmMWVhOWVjMmI4ZjI4YmYwYWY0ZWNmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyMCAoUD0yNCwgTj0xMywgQT0xOSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTBhMjlhMmM3ODQwY2Y5YjQxZGU0OTc4MGI5ZWU5MmQ2NDZhNGJmYzViOWRhNzRhIjoiMzQ0ZGM4YjZiZDY2YTFmYmJlMzMwYTk1YWY1ZGQyYTg3ODNkYzI2NGQ2YTkyNjdkIjoiZmM5ZmQ4NzZiMWVkZGVkMDlmNzBiMTg4MjQiOiIzNmUxNWJhYWZhMDAwMmVmYmI0YmIyNjUwM2I3ZTNiNzlmNmM2OCI6IjQzYjNiOTZhYTVhNTQzNzhmM2JiNTczZmZkYTNlMTU0YWE3ZjQyNWZjMzAwODE3NWI2MGE3N2I5ZDM4NzQwMzU2YjU0NGIxYzBmMjU5MDg2IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyMSAoUD0yNCwgTj0xMywgQT0yMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjZkMGEzYTg1MDlkOTdmODEzNzlkMjE5ODFmZTFhMDJjNTc5MTIxYWI3MzU2Y2EwIjoiMzdhYjJhMGI3YjY5OTQyMjc4ZTIxMDMyZmM4M2ViYTZjZGMzNGY1Mjg1YThiNzExIjoiODAxNWMwZjA3YTdhY2Q0YjFjYmRkMjFiNTQiOiIwOTNlZDI2YWRhNTYyOGNmYjhjZmMxMzkxNTI2YjNiY2M0YWY5N2Q5IjoiYTNhNjBiNDIyZWIwNzBiNDk5Y2Y2ZGEwYTQwNGIxM2EwNWNlZGRhNTQ5YzZiOTNlNmNhMGUwN2UwNDY3NGYyMWE0NmRmMjY1OWE1OTA1ZmIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzIyIChQPTI0LCBOPTEzLCBBPTIxLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYWM2MDgzNWMzMDlkODM3YWFjYzYzNTkzMWFmOTU3MDJhNDc4NGMyMTQyODNlYmIiOiJlODYxMDc1NjUyOGY3NTYwN2I4MzkyNjU5N2VmNTE1ZjRiMzJhODM4NjQzN2U2ZDQiOiIwZTIwNjAyZDRkYzM4YmFhMWViZjk0ZGVkNSI6Ijc5NmU1NWZiZTdiZWQ0NmQwMjU1OTljMjU4OTY0YTk5NTc0YzUyM2Y2YSI6ImUwYTNkNWY0M2U2ODhjZTEwNGY0YWUxYTRmY2Q4NTUwMGFhNmI4ZmRiY2QxYjhkMzAwM2MwYzNiNzM2OWU3OTMzOTQzM2UxNzU0YzA5MzdmIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyMyAoUD0yNCwgTj0xMywgQT0yMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjcxNTQ0YmYyOTg4MDU2ZjdmOWNjZDUyNjg2MTM5MWEyNzIzMzc5M2EyM2Y4MTFmIjoiNTc2YjA2OWFlMjcxM2Y1M2QyOTI0YzFmZDY4Zjc4NmNiMmVlYzY4ODkyZjllMWJlIjoiMGEyNTkxNDhhMWQwODFlMGRmMzgxZWNkMGMiOiI2MWRhZmMyMzdjYjUyZjgzYWI3NzNiYThhODg1NDYyYjZmNzdkNDkyNDYxMSI6ImNlMDZiM2QwOWIwMjkyMWYyOTA1NDQwMzJhMDgxYTc3NjY2MTI5NDAwNDg4NjcyODFiYjA4OWFmMDI0NTc5MmMxNmU2MzIwY2Y1ZmZhMTllIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyNCAoUD0yNCwgTj0xMywgQT0yMywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTBlMmM2M2I2ZTUzOTRiMWFlZWMwM2Y5NWE5ZDEzYTAxYTdkNGU5ZDU4NjEwNzg2IjoiNDRkZDA5OGIxZjg2OWQ2NzBhOGE4NDE5MDBjNGJlZjAyM2ExOTQ2YTBjMjc4MzU0IjoiZGFkYTU0NjVlYjliNzIyOTgwN2EzOWU1NTciOiJmNTYyOWNhMGVlYTU4OWY2Y2Y5NjNkODc1YTdkMmVmYjY1Njk4M2YyZGQyMjMxIjoiNmIzOGNhODU0NTBlMDVlN2I5MzYyZWQ3ZTZlMjkxYTEzMGZmMjMzYjVhNTYxY2RlZjdlYzg0ZGQ5OTJmZGY5ODUxNGY4NDVkYWM4ZjY1NmUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzI1IChQPTI0LCBOPTEzLCBBPTI0LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxM2NkYWFhNGY1NzIxYzZkN2U3MDljYzA0ODA2M2NmYjhiOWQ5MmU2NDI1OTAzZTYiOiJkN2M4Mzc5NzFiOTczZjVmNjUxMTAyYmY4ZDAzMmU3ZGNkMTBlMzA2NzM5YTBkNmMiOiJmOTdiNTMyMjU5YmFiYWM1MzIyZTlkOWE3OSI6ImFkNjYyMjI3OTgzMjUwMjgzOWE4MjM0ODQ4NmQ0MmU5YjM4NjI2ZThmMDYzMTdjNCI6IjQ3MDk2MDA0MThmMjgzOTg0MWU2ZDEyNjM1OWY2OTgyYmRiNTNhY2M3ZmYyMDk2MzU2MjNkMTViMjQxODQ0ODFlYWRjNjNiYjhjODc4ZmM0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyNiAoUD0yNCwgTj0xMywgQT0yNSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA4NTE5MzNkNGQzMjU3MTM3OTg0Y2RiOWNiYTJjYTczNzMyMmRhYzRkYmQ2NGJjIjoiYmExNzg1YTE0OWNiOGI2OWE0ZTAxMWMxMWEzZmYwNmY2ZDcyMThmNTI1YWM4MWI1IjoiYmUwMmRmM2E4NDAzMjJkZjhkNDQ4YzYwMGMiOiI2OWE5ZGQ5YWM4YmU0ODljM2EzZjdmMDcwYmRhY2ExMDY5OTE3MWY2NmFiM2RhOTM1MSI6Ijg5YWIyZWZlZmE4NDA2MzM2ZDllMjI0NTE5OWZiYzk0NTRmMGVmNjUwYjllZDBmNDQ2YzcyNDZiZDMxMzA4MDNiZjhkNzAzZWY1YmRmMTVjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyNyAoUD0yNCwgTj0xMywgQT0yNiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWM1ZDAyYzkzZmFhNzRhODQ4ZTUwNDZmYzUyZjIzNjA0OWUyOGNkODA5NmRjYWM2IjoiYjRkYTQzZWJmZTkzOTZiNjhmNDY4OWZiYTg4MzdjNjhkMDA2NDg0MWM2ZGRkNGE3IjoiNTRjYmYyODg5NDM3NjczYjg4NzVhMGY1NjciOiIwOWZjMjFhYzRhMWY0M2RlMjk2MjFjYWNmM2FkODRlMDU1YzZiMjIwNzIxYWY3Y2UzM2JiIjoiZDQwNzI1Mzk3MjI5MDIxYTE4ZjM0ODFlM2E4NWY3MDQ0NTU1N2JiMmE4NWU0YWU4MTAxYTM0Yzc3N2U5MThlMTYxODZmZGEwNWEzODY1NzIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzI4IChQPTI0LCBOPTEzLCBBPTI3LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMjM0ZGFlNWJkN2FlNjZjNjdmZjBjMWEzZjFhMTkxYTBkN2JjZWI0NTFiYzJiN2QiOiIwZjk2MGE4OWE3ZTgwNmY4NzA5MDQ3Y2I3YTJlN2M0MjExYWQ3MjQ2OTJjODhhMDUiOiIxNmQzNDU2MDZhMzE1YWQyNDA2YWJiY2I0MyI6ImMzN2ZkZjc0NDlmZDdlOTQzNTk1ZDc1ZTk3NzA4OWM2MjNiZTBhMzkyNmU2M2ZkYmJmZGY0YSI6IjM5MDc4ODBkMjVmOTEwZWFiMTJkZDE0ZTcwNGQxYjMzZWE3YzQ1MzYzNGQ1NGRhMmE0NjFmNDRkYWMxMTEyYWUzZjljNjU2NzFhOTMxZDNlIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMyOSAoUD0yNCwgTj0xMywgQT0yOCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjM1MWE2N2ZkNmRhYWJkMmZkNDllZTk0NGRkNDFkZDM3MzAxZjk1OGRkMTdmY2MzIjoiMGMwNjYzZGQ2OWNjYmZmYmJkMGM4YzJlOTQ3M2QwMzU0NDUxYWU3YTIwZmEzNjk1IjoiYjhkNTE3YjAzMzc1NDA1ODEyOGQxM2QxMWEiOiI1MTFjNjkyNGZhOTZkYjcxNmY2YjA1M2I3YTQ4YWViZGMxNTA0MTQ1YTU2Y2QwMmQ2YmUyNTkwZCI6IjE5ZjI3NDVkZjUwMDc2MTljNzljODRkMTc0ZTQ1MjFiOTQyNzc2NDc4YTA2MDFkOTgyYzU2MGZlZGU0NzQxZTJmZDNiNTRiM2E0OGYzZTM4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMzMCAoUD0yNCwgTj0xMywgQT0yOSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWE1YTk1NjBiYWVkM2I4ZTBlOTBiOTI2NTVkNGU1ZjMzODg5ZTVkNzI1M2Q5ZjZjIjoiNWJiZTljMWZiMjU2M2UzZTgyOTk5ZmUwOTdiMjhkYTRkYzZmZjJlMDIwZjNiNGYzIjoiYzAwNDkzODJjZGQ4NjQ2NzU2ZDRlNmJmZjUiOiJjOTVhODZkNTIwODhhOGIwMTA3Y2M1YjQzN2E4OTM4YjJjOWU3NGU0NmUyZTAzYmI5YmNlZWNkYmUzIjoiNmQ1NDAxZGI0MmI1YzQ4Yjc5MjAzYjZhZDgyODA2ZDc0NjBhYzRjODJhZDA4MDliODExMDIwNDgwZTgzNGY2ZmU1NTkwMGExNjJhNGU2MWEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0xOTIgIzMxIChQPTI0LCBOPTEzLCBBPTMwLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZTYxMDk0YzgwZGYwMDUzZTg2ZDQzZmNjZjRlMWQzZWUyY2RiODYyZDMyMzdiMGEiOiIxZmFkYThmNGM3ZGFlYTBkMWMzNzAxODRjMTY5NDg1YjgwYTI3ODcwOGVkNDE0NTEiOiI2M2YwMGIyNDg4ODA5ZmRjNDljYTVmMDVkNSI6ImEwODc2M2NhOTM2YWJkZWVjZTA2NDY3YmVmOGMzYzQ3YzNhNDczNjM2YTAzOWQ0ZGI1NDBjODY3ZDNlMyI6IjY4MGRkMjJmMTZhMTI5MGJkZTQyYzk3OTJkZmE5OTdhZWQyNGQ1YmQyMjY1YjZlMDk1YWE2Yjk5ZDNmODk0ZDM3OTBjMmFhMmRhZTFiYTJjIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMzMiAoUD0yNCwgTj0xMywgQT0zMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjU2NjRkZDZlZDQzNWRmMDA2MDUyZjZkZWQ3NGJiN2NlOTQ4MmNhOTIyOTg4NmY3IjoiMGI2ZGU0OWI1MzA3MDNhZmZjOTQwMTBjMmI3OTNkZGM2ZGUwYzQ0ZDQ4MDM3ZmYyIjoiN2ExNjQ5ODk2ZjNlMDMwYzE4ZjAyMDU1OTkiOiJjNWYxYTI2MzUxZTUzZTY1MDljOGJiYmVkMDNjNDJjMjNhZDgxYzY1ZmNjZWM3ZmZhMWNiNDk0YzdmMWZjNCI6IjU2YjAyZmVhNTk1Y2MyNGU3OTg2OTFhZTkwNWJlM2Q0NjZjYTY4Y2E3NDQwMDVkYmEyNjBiNWVhM2IwNDcwMjBiNzNiNWJhZmExN2U1MDg0IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMTkyICMzMyAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTA5MjU4NTNhODRhMzNmZjM5MjE1NGU0ZTczN2VmYzE4ZGNmYzk4ZjRkNTIzNWE5IjoiNzE4ZjA2MWU4Yjk3MmEzYWRjZjQ2NWQ2NmM1YjI4ZTg2NjFmMDgwMTI3ZjY3MjJmIjoiODA5MzQzZTk4NmY2ZmY0N2Y1NGQ0Y2FjMjIiOiJkNzBhZWYzNTMyYmRjNTI5M2EzZWJiMTE1ODlhYzFmODAxYzlmOTNlYTBkNjU2ZTFkMDQwNjhmYWNmOWY3NjhiIjoiYmFkM2IwZTY3NzJlOWM0YzljNjMxYzA5NWUyNTlkOTk2OTIyOTI5MzJlZmI3MmI4OTY2ZTkxYTE5NjE3YmI3NDhmMzQ5NWFhNDMzNTg1YmIiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzEgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjY1MTFmYjUxZmNmYTc1Y2I0YjQ0ZGE3NWE2ZTVhMGViOGQ5YzhmM2I5MDZmODg2ZGYzYmEzZTZkYTNhMTM4OSI6IjMwZDU2ZmYyYTI1YjgzZmVlNzkxMTEwZmNhZWE0OGU0MWRiN2M3ZjA5OGE4MTAwMCI6IjcyYTYwZjM0NWExOTc4ZmI0MGYyOGEyZmE0IjoiIjoiNTVmMDY4YzBiYmJhOGI1OTgwMTNkZDE4NDFmZDc0MGZkYTI5MDIzMjIxNDhhYjVlOTM1NzUzZTYwMWI3OWRiNGFlNzMwYjZhZTM1MDA3MzEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzIgKFA9MjQsIE49MTMsIEE9MSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTQ0OTBlZDZhYjUxZGJmY2NkNmYzNzAyYTg1NzU3NWRhZDQ0ZGEzYTI3ZWFmMzExNzhhYmM5N2RhNjBkMWU0YiI6IjFiNWNjNmIxNjUxZGVjNGJiYmY1MTMwMzQzODUyZTk3MWM3ZmYxNzc0MTAwZDliZSI6IjI2Y2VhZjZlM2IyODE5MGExN2M0ZjBjMzc4IjoiOWUiOiI3ODliY2UwNjlhNzI1YTk2YzQ4NGU2NGE5ZTU0ZGNiN2E3YzI2OGM4NWRmNDc4MTVhNDYyZmYyZGQ4YmE0NGEzODFlMWY2ZWRhYjEyYjVhOSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMyAoUD0yNCwgTj0xMywgQT0yLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZjU5NGRiOTRlZjhlY2E1NmE0MTdhZmU5NDYwODVlYWVkNDQ0YzdjYzY0OGQwN2Q1ODEzMmU2Y2I1YmMyYmMzIjoiZjRkNzk3OGZhZDM2MjIzNjIzY2NiNWJiMThhNzM3M2NiYThhNmUzYjFjOTIxMjU5IjoiYzFhZDgxMmJmMmJiYjJjZGFlZTQ2MzZlZTciOiJjMGMzIjoiYmVhNzc4NTQwYTkwMDMzYjJjMGQwODdlM2NjNDQ3NzExZWEyNWY3ZWVhOTY4NTU1MDZlYzk3ZjIzYmQ2ZWE5NzgzNGY5MmY3MjYzYzMxOTUiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzQgKFA9MjQsIE49MTMsIEE9MywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDk4MTkzYWIyYTQ2NWUzZmNkODU2NTFhYWVjYTE4YjhlOTE0ODliNzNiN2M3ZTkzYjUxOGM0YjViODFmYzZhYyI6ImVkYmE3ZDYzMTIxNDRlOTBlYzllYWFjZTc1NzYwNDVhNDZlNTUzZGNiOGVlNWE5OCI6IjIyNDdkYzdlMjY3NGU5ZTBhNjNmZTcwNjEzIjoiNGRjMmY0IjoiNDRiOWVhNzI3Yzg0NzMzNmZkNzM5YWQxMWY0YjkwNmIyOTJlZGI4MTA0NjJmMDZlZjU5NjI2YWQ1Y2RhYzJlNGQ0Y2IwN2I1MzhhMWZkOGYiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzUgKFA9MjQsIE49MTMsIEE9NCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDVjOGFmZDczNzNjYjBmNmIwOTJhZjNhNjMzZDlmZDk3YzRjYTM3OGUxOWQ3NWY5Yjc0ZDA4OTQyOTcyNmMyOSI6IjBiOTJhZGJiMjUxZGMyOWE2N2YwYmI5N2Y4ZTcxNjA4NjJiNmM0ZTg0M2QwN2ZkOSI6ImZkYjFmYTIzMGFlMGIxNzJmZjk4ZmM3NDk2IjoiMjcwOTgxYWYiOiIyNzRlMmZhZWEzMjcxZWE2ZmEwNDk0YzE5NTFmMTE1YjU0OTFhODkzMDU2YzNlZTRjNzZmYzM1MGU1ODUyNzdlMzczZTkxMTliZjk1OTVjYiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjNiAoUD0yNCwgTj0xMywgQT01LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMmU2YmYzOWVmZDFjZWRkYzkyYjQzMzNlZDkyZDY1ZWZlZWE2YzAzMWNhMzQ1YWRiOTNhNzc3MGE4MDM5YmNkIjoiZDgyMmY4NGIwMjNmMTJlYTllM2NlMTZiOTA0Mjc4ZTRhYWFiNWUxMWMyYzIzZjNmIjoiNjkzY2JiNDZiYzgzNjYwODZlYzdjZDc3NzYiOiIzYmExMTI4MmQ2IjoiOWY5MWZkMmY2NDcyZTMzYjAyYjFlYWJiOWQ2NjU1NzI5ZDQ0YzQ0ZGFkNmIzODgzZmUwNjY3YmNjNTgwNmIyMjUyMjRiMDRhZGU4YjIxYzEiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzcgKFA9MjQsIE49MTMsIEE9NiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzVhODUwMTY3YTViZmRmNTY2MzZjZTllNTZlMjk1Mjg1NTUwNGUzNWNjNGY1ZDI0ZWU1ZTE2ODg1M2JlODJkOCI6ImU3NTg3OTZkN2RiNzNiY2NiMTY5N2M0MmRmNjkxYWM1Nzk3NGI0MGNhOTE4NmE0MyI6ImM0NWIxNjU0NzdlOGJmYTljYTNhMWNkM2NhIjoiNDc1OTU1N2U5YmFiIjoiOTNhZDU4YmQ1ZjRmNzdhYzRmOTJiMGFlMTZjNjI0ODllNDA3NGM3ZjE1MmUyZWQ4YTg4MTc5ZTBkMzJmNDkyOGVmZjEzYjRjZTI4NzMzMzgiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzggKFA9MjQsIE49MTMsIEE9NywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWU4ZjkzYzNlZmUzOGUyYWYwN2UyNTY5NjFkZDMzMDI4ZmFhMDcxNmU1MzIwYTdhYjMxOWExMGQyZjRjNTU0OCI6ImJjOWNhOTJhOWM5OTE5ZTM5MDk1ZDNlNTNmYjE0ODY5NDYyMGFlNjEyMjdlMDA2OSI6IjYzMzNiZGUyMThiNzg0Y2NkODM3MDQ5MmY3IjoiMGIxZmFiZGYyYTQxMDciOiI0NTgxMWIwYzhmNzU0YmYwMzk1MGU1MjBjZDRhZmM4MWMyZTNlYjhhMTFmNGZkMzg2ZDVhNmU0YjFmYmVlMTVkMzU5MzljNzIxMDA0NTAyZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjOSAoUD0yNCwgTj0xMywgQT04LCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1NDhjMmQxZWI3ZDkxZTAwMzYzM2Q0ZDlmZjE5OWU0YTg0NDcxODBlZGQ4OWFjNzg2N2QyNWExZGIyODhiNWNlIjoiNDlmZDVjYmU0YWZmODlkYzNiODcxOGY5Y2U1NDVkNjEyY2JiZWJiMjg5ZWNiZjQyIjoiMjNiMjA1YmQ2ZmY4ZWQwYmFiMGM5ODk5OWMiOiJhNjYwMTExMWNkOTJjOTQzIjoiM2NmYzYyMTFlMzU5YWUzMjI4MDJmYzk1NjZmMzc3YjBkZmUxN2QxZGZlMDg3OGViZjJhOTA0N2UzN2NjMGJlMWZhYjAwMDZhZjhkYjhkYzQiCisKK0NDTSBlbmNyeXB0IGFuZCB0YWcgTklTVCBWQURUIEFFUy0yNTYgIzEwIChQPTI0LCBOPTEzLCBBPTksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFhYjc5M2UzNzdhMTI0ODRkYmRkNzRjOWIzYTg1Yzc0YzI4NmUxY2M0OTg2NjNmYmQ3YzcxOGI1NjMzYmI5MWEiOiI3YzA4ODk4NTQ2NThkMzQwOGM1ZDgwNDNhYWQyZjRhZTRhODk0NDlhMzZmOGEzYjgiOiIxMDAyMmNkZGIzMjNlODhiM2MwOGY5NWEwZiI6IjgyYjhjNzM2MDM3Y2UyZjJlOCI6IjEwNDQyNTBmNTg4NTdjNjlmNzJiNWQzNDU0ZDQzOTQ5ZTVjMDJiMzgyMjk3MGIyODBkZTFhM2Y3ZmM1ZDA2Y2MzMGYwNjA3NWY1NTA0ZWQ3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMxMSAoUD0yNCwgTj0xMywgQT0xMCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDZhYzM5ODk2MDczYTQ0MjgzNjExYTY2Y2NhYjA2N2UyZGQyZmFhOGRhODJmZjlhNDViYjI5ZTU0ZDJlNmU3NyI6IjMyMTZkY2UzYjhiMWNlMGU3OWU0MGZmZmNhYzcyOGFiMTkxYWFhZjMxOWQ5NzFkMyI6IjZjNzk0MmM5ODE5Y2Y2OWI4MTdiZmNkYjBhIjoiMjE1ZTJhNmMyNDMyNTM0MGZkZWMiOiJjNWIzYjUwZWQ4YTdiN2I5NmIwMmJhOTQ2NGI2YTJmZjgwZTkwNTQ4NjA1Njk5YTYzZDcwZTZkZmZiMzFhMzc2YTFlYjdmOTQ1MjZkY2E0OCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTIgKFA9MjQsIE49MTMsIEE9MTEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUwNDEyYzY0NDRiY2Y5ODI5NTA2YWIwMTllOTgyMzRhZjE1NDEwNjE1NTc0MTI3NDBiYzEyMGI0NTYwNTI3NjMiOiI2Y2RiZDYzZjZkNTkxZjU5Nzc2ZjgyODUzM2IyOGUyNDUzYTIxNGQxZDBkZDhhMzkiOiI4NTY4NGY5NGMzNzAyYzVkODcwMzEwMTY2ZCI6ImY3MDZhM2UwOWRmOTVkM2UyMWQyZTAiOiI4YzhiNGFlODU0YTVkNWMyNjViMjVlM2I1NGJkZWQ5NDQ0Y2M0NTRiM2UwZTZhMjRkNmMwNWVhZjQwNmE1ZWJkNTc4ZTE5ZWRkNTIyNzM4MCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTMgKFA9MjQsIE49MTMsIEE9MTIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhhNTY1ODhmZTVlMTI1MjM3YjZjZGMzMGY5NDBiOGQ4OGIyODYzZWM1MDFhMGNiMDBiMWFiYWRlMWI1Y2UwZWQiOiJjODI1OTUyMjkzZTQzNGVhODY2ZGI1NThhYWY0ODZlZjA5YTkyYmYzNjY5ODhmNzEiOiJkODAyMTBiOWY5Nzc2ZWEzNmRjMGUwYTc4NyI6ImU0Mjk2ZDFjOGNmNGZmYzRiMjYzNTEzNSI6ImI4YjNiMTVmZGY2YTRhMGI1YWJjMzEzYWZjNzY5ZTRlODQxM2JkODg3NTUyNTgzZWRlM2VkOTk1ZDFiNzA1NjFjOGUyOGE3YjFhN2UzZGM4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMxNCAoUD0yNCwgTj0xMywgQT0xMywgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTRjYzdlMWM5MGY4Njg0ZTZhNWY5NWU2ODk4YWI0ZTNjMTk0Y2I0NmUxOTZkODIyODA2MmI5ZjNmYTc0NDkzMCI6IjEwZDRjZmY5NWVmNDkwOTIzYzllMDkwNjg4MDcyOWQ0ZDA1NDEyZTc2NzVjY2U3NiI6ImNkYzI3MTJlNTFjN2YzMzNkNmJhZDc4ZWVlIjoiNTY5YzU2YjI3MjY4ZDNkYjU0ZTcyOGFhYzAiOiJiZTNjZTNlOWRjNzI0OTk4MzlhOThhZTUyYWJiMTc0MTVlODU0NzY4N2U4YTNjN2I4YWFhYWMyMGQ0YzkyNzZmMjg1MWNiYmEyYjA0ZDE4NSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTUgKFA9MjQsIE49MTMsIEE9MTQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM0N2UxMmVlYzU2ZTk1YWFmY2M3ZDI1YmYxMGZjNzU2YjRlNDJiYzJlNDNkYTdmOTdkZjI0MzMxZjI3ZjFmNWMiOiJjYTg4ZGRkZmM4NzZhMTJmNDVmMTk1NjJiYzljYTI1MGY0MzI2N2FiMjUxYTdmMzQiOiJiOGQ1MTdiMDMzNzU0MDU4MTI4ZDEzZDExYSI6IjUxMWM2OTI0ZmE5NmRiNzE2ZjZiMDUzYjdhNDgiOiJlZWVkY2ZhOGY1YjViNDhjMWQ3ZTI3NzUyNmVlY2I3Mjk0MjEzYjlmNTc4NTE2N2FlOTQ5YjkzMDAzZGZlNjNjOTVjMWQ0OWVkZmI0ZGUzZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTYgKFA9MjQsIE49MTMsIEE9MTUsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUyMDkwMmFhMjdjMTZkZWUxMTI4MTJiMmU2ODVhYTIwM2FlYjhiODYzM2JkMWJmYzk5NzI4YTQ4MmQ5NmMxZmUiOiI1MzNmZWU3ZDJjNzc0MGRiNTU3NzBlNDhjYjFiNTQxZDk5MGVhM2Y4ZjA4ZWQxYTYiOiJkZGY1MDUwMmY0MTRjMWJmMjQ4ODhmMTMyOCI6IjIyYjRmOGYxYWFjMDJhOWIyZWY3ODVkMGZmNmY5MyI6ImZjODY3YjMxOWUwZTRhYjQ1ZWM1MThhMWI1ZGNlYzRmMjk5ODIxNzNmM2FiZmQ0ZDhhOGY4ZDE0ZDJiZGFjODRjMzczN2NmYmQ3NWI3YzBiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMxNyAoUD0yNCwgTj0xMywgQT0xNiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTdkYTFjMjcwNDIxOWVkNTlhYmZkZjA0NzQzYTlhOTNjODdhNjNkNDcxODE4ZGUwZjE1NjRiMmRiNjQyMTU2MiI6ImRkYzNjMWFhNzNmYjZkZTkyYmI0ZGIxMzhlMjZmM2MyZTA1NDNhYjRmNTkyNDg3MSI6IjRiNjBhNDdiN2U5MGY2MjJmYTBiZjgwM2UxIjoiMGFlOGMwMTJmZjM5NzUzNTEwZGYzZWU4MDcwN2U0ZTIiOiJkYWE4MjU2ZDQ3NTNmZGY5Y2ZlZjg3NjI5NWJhZGFiYTg5YjQ1Y2M0OTdmNTRkMjIwZWMyYzZmYjY4Nzc1M2JjYTQ1ODBhZGM2YWEyZjI5NiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTggKFA9MjQsIE49MTMsIEE9MTcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkyNjdlYmM5OWNjZjY0OGIxNDZjYmEzYzI1MTE4N2UyNGE5OTQ3ZDgwNmNlYjBjZWQ2ODk0MjExNjQxYTFlMGQiOiI5NjdkYWYxMmYxNmYxNjZiN2I1MDM4ZjgzYTFjZjBiOTgwZjVhYmY0Yzc3NDZmMmEiOiI5YjcyOTg5NTAyODBlODc2MmVjZGM5YmJlNCI6IjU4MjQ2ODk0NTNiYzQwNmJmODkxYjg1ZTQ1NzZlMzhmZTgiOiI3Y2ZlMmE3YTU0MzA2ZWI4ZDhhNjNkM2QxYWU4Njc5NGY5YTJjMjIxOThiMmNiNGYxMGNhOTI2ZjFhNDMwYzA4YzEyZTIzZGIzZDkxM2U5MyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMTkgKFA9MjQsIE49MTMsIEE9MTgsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdhODU1ZTE2OTBlZTYzOGRlMDFkYjQzYjM3NDAxZGNkNTY5YzFhZTAzZGM3M2RkMGE5MTdkMGNhZGI1YWJjMjkiOiIzM2FlNjhlYmI4MDEwYzZiM2RhNmI5Y2IyOWZlOWY4YmQwOWI1OWVjMzlmNGNlNGIiOiI4ZjE2MGE4NzNhMTE2NmM4YjMyYmNjYmJhNyI6IjcyNjc0YWNhN2ViYTJmYzBlZWFmYmQxNDNjMmM0ZDhhYTZjOCI6ImIyMmFmZGY0ZjEyYzQzZWMyM2UwMWFjMTIxNWEzZjUyODYwNTkyMTEyMDdlOTU3MDU3ZTlhOTIwM2RhNzQzODdhOTQ2OGY4YWY1ZTI3NTQ3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMyMCAoUD0yNCwgTj0xMywgQT0xOSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGViZGM2ZGRiNGM1MDI3MjVkZDZlZThkYTk1ZDU2YTBkMTA0NGI0Njk0ZDZiYTg0NzVhNDQzNGYyM2E4NDc0ZiI6ImM3MzYwMjgyYzg1NDg0YTVhMzNhYjFjNjhkZDcwODczYWI0ZTc0ZmZkNGE2MmNkNSI6ImZiNzE3YThjODIxMTQ0NzcyNTNhY2MxNGY2IjoiNDFlOWQ2NTYzMmY3NGY0NDlhNjg0MmQ1ZTZjNGE4NmVmODM3OTEiOiIyZTk2MWIzYTJmYTE2MDlhNGU2ZmQwNGJmZjZhYzVlMzA2YWUyNjM4NzA2Zjk5N2I0MmJlMmUyYmEwNWM1NGI2MTk4NTBkYjVjOWQ2ODRmZSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjEgKFA9MjQsIE49MTMsIEE9MjAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJmZjY0YmJlYzE5N2E2MzMxNWMyZjMyOGRjYjQ4MzdkMGNkYzIxYTVkNmY4OWZmMWQ5N2NiNTExOTUzMzBjZDgiOiI0YTE3NTIyZGE3MDdiNGIyNTg3YTBhZTM2N2EyY2QyODMxYmI1OTNhMThlZjQ0MmEiOiJhMjM1ZjhlZTNkZTk4OTZiNzE5MTBhYzAyYyI6IjJiNDExYmVhNTdiNTFkMTBhNGQyZmIxN2VmMGYyMDRhYTUzY2YxMTIiOiIxYmYxMjI3OThiZDhlZThlNzMzOTFkNTg5YmQwNDZhMjk0ZDE2MTU3OTRlNjljYjllNmYzYmEzMDE0M2FjYmMzYTFjMWM2ZWM3NDMzMzEwNyIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjIgKFA9MjQsIE49MTMsIEE9MjEsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI0ZTlmMDhhOWEwMDdmOTk3NjkxOWUxMGRjNDMyMDAyZTJlMDc4YTMzOTY3N2YwMDEwNWM3MmVkMzU2MzNhM2YiOiJkMzQxNmE4MWI0MjQ2ZWIwYmY4MTE5YTcyYTg4NmJiYzBhYzk0NDljNjlmNzFkMmYiOiIxNTk3NzQyNGVlZWMwZWM3ZjY0N2U2Yzc5OCI6IjJkODM4ZWI1MWE0YmM2OWEwMDFhMThhZGYyMDg0YTY4MGYwMmEzYzVmYyI6ImUwMDFhOGZhZTM5MGRjNWQ2NzJjZGQxOGY4NmExZjcyODE1OGVjODNhMDAyMDUwZGVmOWFmNTY3OWVkYmNiYjdkYjIwYWI2YWYzMDY5OGRiIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMyMyAoUD0yNCwgTj0xMywgQT0yMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGVjMWIyMmI4ZGYwNWRjOTIxMzVkMmRmYmVmZWQ4ZWE4MTQ1OGY1ZWExYjgwMWU4YTIxOGZhZjZjYmRmMWE3OSI6IjJmNTlkOTRkNGFiOGVlYjg0YzJhNmZlZmI3ZmIwYTNhYzA1OWMxZTFhNjVhZTM0YSI6Ijk3ZWJjYjg1NzViYjU4MjYwMjA4ZDVjMjI3IjoiYTJmNjMzN2Y4NmRkMDBkMWE1ODQ0ODg1MWU5NWQ4YzliYWNlNGE1Yzg3MTAiOiI3Y2EwYjFkYmUzNGIwMzkxZTUyNGI4NjhiMGFmMDhiM2UwOTY5MTc2NjRkNmFhMmNhYmMxZjlkMDEzMjM5NDE0OWM5MDYyYjc0YjgyZjA0YiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjQgKFA9MjQsIE49MTMsIEE9MjMsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA4NzUwMjA5NTllZDk2OWNmYjM4NjM2ZDFkNWFhYmNlOTY1OGIwMDE3MWE3NjE0ZWE5ZTUzOTUzMzFjNzY1OWMiOiIwNjVlZjllZWFmYmUwNzdjMWM3MDQ5ZjQzZWIwZDg5OTk3MDhlODYwOWYyMTRkNWMiOiI0NTExMDEyNTBlYzZmMjY2NTIyNDlkNTlkYyI6IjdjYzljNTFiNjlmOThhMDYzOTFhYjMyNzQyZmI2MzY1ZTE1MTA2YzgxMWZlOGEiOiI5OTAwNjUzMjJhNDM4ZTEzNjg2MGY3YjAxOTgwN2U5ZmVmZjUyYTY0MmJmM2Q0NGE5MTYzZmE3YTg2N2YwNGNhYjZmNTJkYzI1MDA3MGYzMSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjUgKFA9MjQsIE49MTMsIEE9MjQsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVmNGMxZDIzMTRlNjcxZjY2NmNjNjY2NzY2MGYxNDM4YTI5MzIwOGM3Y2MyOWI0MTJkODEyNzdmMGE2MzVjOTEiOiJjOTljM2U3OTEyNWI2ZmQ5NWU3MzczMjZhODQyNDI0ZWI2YzZlY2VhNGMwNDc1YzQiOiI1MGIyM2IwNTI5MjIzNjZjMjVkZDQwZTM0OCI6ImNkMDUyMmViZTFmZWQ4MjQ2NTI3N2QxYzEwYWU5MzE2YTk4YjQ0NjliZTYzYjE4MCI6Ijc2ZGY0YmU0ZWM4MzczODY0Mzk5YWNkYTExMjk0YjIyMGI5ZjdjM2E3ZDJiMzY2MGIyNTc2NGU0MGFjNmExNzFlN2U2YmFiNGZkZWU0Mjg4IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMyNiAoUD0yNCwgTj0xMywgQT0yNSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODU0NDgwOGU4ZmJmOGMzYTVlMWQ0Y2E3NTFkNGI2MDNhZjlmZTExOWVhYmM2OTIzMjA1ODE1ZTBlNzQ4YjdlNyI6IjYxN2Q1NGZjNmEyMzYwMWM3OWUzOTg0ZjkzYmZjMmQxNTFmZGU0MjA4NjMyMDZiMyI6ImI0NGE1ODcyNDU5NmI0ZDhkZWE4MjdjMWEwIjoiZjViMmM4OGY1MjMyYzM3MjczYjFlNjZhYTMxY2ZhNzIwMWUzM2MyMWQ2MDA1NGQwMjUiOiI1N2IzNDE0ZGI0ODk4MmM2NTY3MjY1ZTFlMDE3M2JmMzhmZGZhZmZlNDQ2MWZiZWJjMTQxMWFmODMyMzdjMGY5ZWIwYmZlOGVkOTE0ZGE2NiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjcgKFA9MjQsIE49MTMsIEE9MjYsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUxOWVhZGRkOWYxNTc0NDQ3ZTdlNjUyNWY3ZmQ2N2UzYjQyODA3ZTQ0ZmJiNjBlNzVkOGMzZTk4YWJjMTgzNjEiOiJiM2IwZGUxMGI3YzA5OTY2NjJmMWIwNjRlMDRlNTI4YjdkODVjYTExNjY5ODVkMzMiOiJhOGM0NTljZTAyMjMzNTg4MjZmYjFlYzBmMCI6ImVmODhmNDM5M2Q2YzFlN2I3YmU1NWExMjE0NDIwOWVlMDUxYmI3NzllNDQwNDMyNzIxZWYiOiJkNjNlNjA4MmM5NWM2YzVmZjJiYzA3NzEzMjFhNGY4ODNlZjYxY2ZmN2I5OWUwZWE4YTIwYTFhYmU3Yzg0MmViYzA4YzhjODFhMjc0M2M4MSIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMjggKFA9MjQsIE49MTMsIEE9MjcsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0OThmMDJlNTA0ODdjZmJkYTFjZTY0NTllMjQxMjMzYmQ0YzRjYjEwMjgxZGNiNTE5MTVkYmM3ZmI2NTQ1YzAiOiIwZDE2Y2M2OWNhYTlmMTliODhiMDVlMTUxYjNkMjZhY2NkMDE4Y2E0YTU3ODZhODAiOiJlM2JkNGJjM2E2MGNkZGQyNmMyMGFhODYzNiI6IjcwY2ZjYjgyOGQ0ODMyMTZiNDZjM2NkMjJlMmY5ZWU4NzllOWUzMDU5YjU2NjE3OWI2ZTE2YyI6ImYxYzRiZWRiOGQ2ZjkxNjc2ODgxZGFhMzc2NTZhN2U2NDAyZjQ3MjczNWIwNGEwZjFmODMzMmY0MjM2NDM3NzM3NDM4ZTdhYTFiNTEwMGM3IgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMyOSAoUD0yNCwgTj0xMywgQT0yOCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2FjN2Q1YmM0Njk4YzAyMWU0OWE2ODVjZDcxMDU3ZTA5ODIxNjMzOTU3ZDFkNTljM2MzMGNiYzNmMmQxZGJmOCI6Ijg5MTk4ZDNhY2MzOWI5NTBmMGQ0MTExMTljNDc4YzYwYjI0MjJmZmU3ZTI2ZTAwYiI6IjU0YzhmZjU0NTk3MDJhYWMwNThiYjNiZTA0IjoiZWNiZDcwOTE3MzJlNDljMGY0YmRhMmU2MzIzNWVhNDNiYmY4Yzg3MzBmOTU1ZjljMDQ5ZGQxZWMiOiI3NzE3YjhlNDQ0N2FmY2VhMWVlZWJmM2UzOWZmZGFiMmY1MjgyOGU3OTMxZWYyN2U0NzVhY2QyNzkwMDQ3OGYwOWZlYzFmNDc5YWIzYTdjOCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMzAgKFA9MjQsIE49MTMsIEE9MjksIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0ODg4MmMzNjY3Y2FhODFjOWI5MDA5OTZlM2Q1OTFlNmZjYjNkMDgzMzNlZWIyOTkxMWU5YzYzMzg3MTBjMTciOiI4YjkxMzBiMGMzYzE1MzY2ODMxYmJiMTlmMzc3ZTMyMDlhOGRiZjc2MTljZDA5YmQiOiI0M2IwYWNhMmYwYTkwMzBmOTA1NTlmYTZkMyI6ImE1MTZjYTg0MDVlNWM4ODU0ZTY2NzkyMWI1YzVlMTk2OGJkZDA1MjkxNWI1NWFjOTk4NGI3ZWVmYjMiOiI0NjQ2YjJhY2RlYjExMTc0MTcxZGEyMzk5OWNkNTRlMjk3ZGFhMzJiYmMxM2QzMDUxMmU1N2M1NzZiMzE1ZjQ4YzExODc3MTc4Mzg5YWFhMCIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMzEgKFA9MjQsIE49MTMsIEE9MzAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNiZjUyY2M1ZWU4NmI5YTAxOTBmMzkwYTVjMDM2NmE1NjBiNTU3MDAwZGJlNTExNWZkOWVlMTE2MzBhNjI3NjkiOiIwOTRiNTM4MTEwNDk1ZTkzOGIwOGNmNzQ4YTZiY2YzZTBjODBmZjljNjY1NzAyMzciOiJmOWZiZDAyZjI4ZWNjOTI5ZDM2OTE4Mjc1MiI6ImViZjBiM2UzMTk5YTVjMzc3M2M3NjFjNzI1Yzc2MDBhZGQ1ZjlkODMyMWM5ZjhlNWU1ZmQxYzdhNWQyZiI6IjRkOGI1MzAxNmZjOGJjOTY3NzE4NGMwZmExNWJiZDNkNjcxYjkzNjZkODJlY2I2N2Y4NTYyZWFkY2RjYmNkYmFkMTI5OWJlYTE1MjNmNWQyIgorCitDQ00gZW5jcnlwdCBhbmQgdGFnIE5JU1QgVkFEVCBBRVMtMjU2ICMzMiAoUD0yNCwgTj0xMywgQT0zMSwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTQ1YmIxNzMwZDBkNTM5YWFiMzgwNTM1MGFjOTg2NTQwZGU5ZjBmNmMyMzllZTcwMzk1YzI5MTM5N2I3MDMwOSI6ImJjOGIzYmM0OGM3YTg4YzlmYWZkZTI1OGI2Y2NhYTlkNGYwZDAxODcwM2Q2Mzg3MSI6ImQ1Yzc4MjRhZjcxNWJiNzgyMmI2YjM0MGZlIjoiODYwZjRhMDlhZDhiM2QzNDVjMmFhMThmZmI4MDNmMGJjM2I3MzRhNGQwNDdhMTQzNzcwMWE1ZTNkOTUyODgiOiI5NWYwODNhZDZiYmFlZTZhYjU0MGZlMDIzODU4ZjhiYWYyNWUzMzNmZDNlODljMDBlNjc4YTM5MmQyMjhiMjEwZGM1Yzk5MTkwNWRhY2YzZiIKKworQ0NNIGVuY3J5cHQgYW5kIHRhZyBOSVNUIFZBRFQgQUVTLTI1NiAjMzMgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlNmUzNDA3MGNhZjFiODgyMGVkMzllZGZhODM0NTlhYmUxYzE1YTE4MjdmMWMzOWY3YWMzMTZjNGMyNzkxMGYiOiI3NzFhN2JhYTljZjgzYWEyNTMzNDlmNjQ3NWQ1ZTc0ZGJhNDUyNTMwN2IwMjJiYTciOiJjNDljY2VmODY5YmI4NmQyMTkzMmNiNDQzYiI6ImQzN2UzNWQ3Y2RjY2Q5ODI0YTFhZTRjNzg3ODE5NzM1ZTRhZjc5OGEzYmViNDlkNDcwNTMzNmQ2NDk2ODUzYWQiOiJlZWJhYzI0NzUwMDQ5NzAwNzFkZmEyY2ZiODU1YzRlNzhiMWFkZDhkY2JjY2ZjMGJkNmIxNDAyNzMyNGI2NTdhNTYyNjNkZjE0ODY2NTM5MyIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzEgKFA9MCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGFlNzAxMTAzYzYzZGVjYTViNWEzOTM5ZDdkMDU5OTIiOiIwMjIwOWY1NSI6IjVhOGFhNDg1YzMxNmU5IjoiIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhZTcwMTEwM2M2M2RlY2E1YjVhMzkzOWQ3ZDA1OTkyIjoiOWEwNGMyNDEiOiIzNzk2Y2Y1MWI4NzI2NiI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzMgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzIjoiNzVkNTgyZGI0M2NlOWIxM2FiNGI2ZjdmMTQzNDEzMzAiOiI1YThhYTQ4NWMzMTZlOSI6IiI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzQgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzIjoiM2E2NWUwM2FmMzdiODFkMDVhY2M3ZWMxYmMzOWRlYjAiOiIzNzk2Y2Y1MWI4NzI2NiI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICM1IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiMyI6IjkwMTU2ZjNmIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzYgKFA9MCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzIjoiODg5MDkwMTYiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzcgKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZCI6ImZiMDRkYzVhNDRjNmJiMDAwZjI0NDBmNTE1NDM2NGI0IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICM4IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQiOiI1NDQ3MDc1YmY0MmE1OWI5MWYwODA2NDczOGIwMTVhYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyIjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzkgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkIjoiYTkwZThlYTQ0MDg1Y2VkNzkxYjJmZGI3ZmQ0NGI1Y2YwYmQ3ZDI3NzE4MDI5YmI3MDNlMWZhNmIiOiI1YThhYTQ4NWMzMTZlOSI6IiI6NDoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMTAgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkIjoiNTBhYWZlMDU3OGMxMTVjNGE4ZTEyNmZmN2IzY2NiNjRkY2U4Y2NhYThjZWRhNjlmMjNlNWQ4MWMiOiIzMWY4ZmEyNTgyN2Q0OCI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzExIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMiOiIyNGFiOWVlYjBlNTUwOGNhZTgwMDc0ZjEwNzBlZTE4OGE2MzcxNzE4NjA4ODFmMWYyZDlhM2ZiYzIxMDU5NWI3YjhiMWI0MTUyMzExMWE4ZSI6IjVhOGFhNDg1YzMxNmU5IjoiIjoxNjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMTIgKFA9MjQsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MyI6IjdlYmZkYTZmYTVkYTFkYmZmZDgyZGMyOWI4NzU3OThmYmNlZjhiYTAwODRmYmQyNDYzYWY3NDdjYzg4YTAwMWZhOTRlMDYwMjkwZjIwOWM0IjoiMzFmOGZhMjU4MjdkNDgiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMTMgKFA9MjQsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MyI6IjRhNTUwMTM0Zjk0NDU1OTc5ZWM0YmY4OWFkMmJkODBkMjVhNzdhZTk0ZTQ1NjEzNGEzZTEzOGI5IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOjQ6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5NyIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzE0IChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMiOiIxMThlYzUzZGQxYmZiZTUyZDViOWZlNWRmZWJlY2YyZWU2NzRlYzk4M2VhZGE2NTQwOTFhNWFlOSI6IjQ5MDA0OTEyZmRkNzI2OTI3OWIxZjA2YTg5IjoiIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMTUgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiI0YmZlNGUzNTc4NGYwYTY1YjU0NTQ3N2U1ZTJmNGJhZTBlMWU2ZmE3MTdlYWYyY2I2YTlhOTcwYjliZWIyYWMxYmQ0ZmQ2MjE2OGY4Mzc4YSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoxNjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMTYgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiIwYzU2YTUwM2FhMmMxMmU4NzQ1MGQ0NWE3YjcxNGRiOTgwZmQzNDhmMzI3YzAwNjVhNjU2NjYxNDQ5OTRiYWQwYzgxOTViY2I0YWRlMTMzNyI6IjQ5MDA0OTEyZmRkNzI2OTI3OWIxZjA2YTg5IjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzE3IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOSI6Ijc4MmU0MzE4IjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMxOCAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4MjkiOiJhMDRmMjcwYSI6ImEyNjU0ODBjYTg4ZDVmIjoiYTIyNDhhODgyZWNiZjg1MGRhZjkxOTMzYTM4OWU3OGU4MTYyM2QyMzNkZmQ0N2JmODMyMTM2MWEzOGYxMzhmZSI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzE5IChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IiOiI0MWI0NzYwMTNmNDVlNGE3ODFmMjUzYTZmM2IxZTUzMCI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzIwIChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IiOiJmOWYwMThmY2QxMjU4MjI2MTYwODNmZmZlYmM0YzhlNiI6ImEyNjU0ODBjYTg4ZDVmIjoiYTIyNDhhODgyZWNiZjg1MGRhZjkxOTMzYTM4OWU3OGU4MTYyM2QyMzNkZmQ0N2JmODMyMTM2MWEzOGYxMzhmZSI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyMSAoUD0wLCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiIjoiOWY2OWYyNGYiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzIyIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IiOiJlMTdhZmFhNCI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2IjoiZjYxMDc2OTZlZGIzMzJiMmVhMDU5ZDg4NjBmZWUyNmJlNDJlNWUxMmUxYTRmNzlhOGQwZWFmY2UxYjIyNzhhNyI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzIzIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxIjoiMTg1OWFjMzZhNDBhNmIyOGIzNDI2NjI1MzYyNzc5N2EiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTI4ICMyNCAoUD0wLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MSI6ImVkZjhiNDZlYjY5YWMwMDQ0MTE2MDE5ZGVjMTgzMDcyIjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzYiOiJmNjEwNzY5NmVkYjMzMmIyZWEwNTlkODg2MGZlZTI2YmU0MmU1ZTEyZTFhNGY3OWE4ZDBlYWZjZTFiMjI3OGE3IjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzI1IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzEiOiI2YmUzMTg2MGNhMjcxZWY0NDhkZThmOGQ4YjM5MzQ2ZGFmNGI4MWQ3ZTkyZDY1YjMzOGYxMjVmYSI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6NDoiYTI2NTQ4MGNhODhkNWY1MzZkYjBkYzZhYmM0MGZhZjBkMDViZTdhOTY2OTc3NzY4IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMjYgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MSI6IjRjYzU3YTk5MjdhNmJjNDAxNDQxODcwZDMxOTNiZjg5ZWJkMTYzZjVjMDE1MDFjNzI4YTY2YjY5IjoiZmRkMmQ2ZjUwM2M5MTUiOiI1YjkyMzk0ZjIxZGRjM2FkNDlkOWIwODgxYjgyOWE1OTM1Y2IzYTRkMjNlMjkyYTYyZmI2NmI1ZTdhYjcwMjBlIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMjcgKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGMiOiJiMzUxYWI5NmIyZTQ1NTE1MjU0NTU4ZDUyMTI2NzNlZTZjNzc2ZDQyZGJjYTNiNTEyY2YzYTIwYjdmZDdjNDllNmU3OWJlZjQ3NWMyOTA2ZiI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6MTY6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzI4IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiZGYxYTUyODVjYWE0MWI0YmI0N2Y2ZTVjZWNlYmE0ZTgyNzIxODI4ZDY4NDI3YTMwODFkMThjYTE0OWQ2NzY2YmZhY2NlYzg4ZjE5NGViNWIiOiJmZGQyZDZmNTAzYzkxNSI6IjViOTIzOTRmMjFkZGMzYWQ0OWQ5YjA4ODFiODI5YTU5MzVjYjNhNGQyM2UyOTJhNjJmYjY2YjVlN2FiNzAyMGUiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMjkgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGMiOiI5MzRmODkzODI0ZTg4MGY3NDNkMTk2YjIyZDFmMzQwYTUyNjA4MTU1MDg3YmQyOGFjMjVlNTMyOSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6NDoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzZkMWIxM2Q4NDliODA4NGM5YjZhY2M1IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMzAgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGMiOiJmNDNiYTlkODM0YWQ4NWRmYWIzZjFjMGMyN2MzNDQxZmU0ZTQxMWEzOGEyNjFhNjU1OWIzYjNlZSI6IjA4MTI3NTdhZDBjYzRkMTdjNGNmZTdhNjQyIjoiZWM2YzQ0YTdlOTRlNTFhM2NhNmRlZTIyOTA5ODM5MTU3NWVjNzIxM2M4NTI2N2ZiZjc0OTJmZGJlZWU2MWIxMCI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xMjggIzMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjUxMWZiNTFmY2ZhNzVjYjRiNDRkYTc1YTZlNWEwZSI6IjUwMDM4YjVmZGQzNjRlZTc0N2I3MGQwMGJkMzY4NDBlY2U0ZWExOTk5ODEyMzM3NWMwYTQ1OGJmY2FmYTNiMjYwOWFmZTBmODI1Y2JmNTAzIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoxNjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzZkMWIxM2Q4NDliODA4NGM5YjZhY2M1IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTEyOCAjMzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlIjoiNzhlZDhmZjZiNWExMjU1ZDBmYmQwYTcxOWE5YzI3YjA1OWZmNWY4M2QwYzQ5NjJjMzkwMDQyYmE4YmI1ZjY3OThkYWIwMWM1YWZhZDczMDYiOiIwODEyNzU3YWQwY2M0ZDE3YzRjZmU3YTY0MiI6ImVjNmM0NGE3ZTk0ZTUxYTNjYTZkZWUyMjkwOTgzOTE1NzVlYzcyMTNjODUyNjdmYmY3NDkyZmRiZWVlNjFiMTAiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMSAoUD0wLCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjOThhZDdmMzhiMmM3ZTk3MGM5Yjk2NWVjODdhMDgyMDgzODQ3MThmNzgyMDZjNmMiOiI5ZDRiN2YzYiI6IjVhOGFhNDg1YzMxNmU5IjoiIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMyIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM5OGFkN2YzOGIyYzdlOTcwYzliOTY1ZWM4N2EwODIwODM4NDcxOGY3ODIwNmM2YyI6IjgwNzQ1ZGU5IjoiMzc5NmNmNTFiODcyNjYiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMzIChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiM2QzYWQxYmNjZjkyODJhNjUiOiIxNzIyMzAzOGZhOTlkNTM2ODFjYTFiZWFiZTc4ZDFiNCI6IjVhOGFhNDg1YzMxNmU5IjoiIjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjNCAoUD0wLCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiZDBlMWVlZWY0ZDJhMjY0NTM2YmIxYzJjMWJkZTdjMzUiOiIzNzk2Y2Y1MWI4NzI2NiI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICM1IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiM2QzYWQxYmNjZjkyODJhNjUiOiJmZTY5ZWQ4NCI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICM2IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiM2QzYWQxYmNjZjkyODJhNjUiOiJkYjdmZmM4MiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyIjoiIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjNyAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkNDA5NGFmY2IyMDUzOTNmYSI6IjBjNjZhOGU1NDdlZDRmOGMyYzlhOWExZWI1ZDQ1NWI5IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOjE2OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICM4IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiMzg3NTdiM2E2MWE0ZGM5N2NhM2FiODhiZjEyNDA2OTUiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICM5IChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZDQwOTRhZmNiMjA1MzkzZmEiOiI0MTE5ODZkMDRkNjQ2MzEwMGJmZjAzZjdkMGJkZTdlYTJjMzQ4ODc4NDM3ODEzOGNkZGM5M2E1NCI6IjVhOGFhNDg1YzMxNmU5IjoiIjo0OiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxMCAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQ0MDk0YWZjYjIwNTM5M2ZhIjoiMzJiNjQ5YWI1NjE2MmU1NWQ0MTQ4YTEyOTJkNmEyMjVhOTg4ZWIxMzA4Mjk4MjczYjY4ODkwMzYiOiIzMWY4ZmEyNTgyN2Q0OCI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzExIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMyNDU3NmI5OTg0NGY3NWUxIjoiY2JhNGI0YWViODVmMDQ5MmZkOGQ5MDVjNGE2ZDgyMzMxMzk4MzMzNzNlZjE4OGE4YzVhNWViZWNmN2FjODYwN2ZlNDEyMTg5ZTgzZDlkMjAiOiI1YThhYTQ4NWMzMTZlOSI6IiI6MTY6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzEyIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMyNDU3NmI5OTg0NGY3NWUxIjoiY2E2MjcxMzcyOGI1YzlkNjUyNTA0YjBhZThmZDRmZWU1ZDI5N2VlNmE4ZDE5Y2I2ZTY5OWYxNWYxNGQzNGRjYWY5YmE4ZWQ0Yjg3N2M5N2QiOiIzMWY4ZmEyNTgyN2Q0OCI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxMyAoUD0yNCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzMjQ1NzZiOTk4NDRmNzVlMSI6IjA0MjY1M2M2NzRlZjJhOTBmN2ZiMTFkMzA4NDhlNTMwYWU1OTQ3OGYxMDUxNjMzYTM0ZmFkMjc3IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOjQ6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5NyIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzE0IChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTk3YWZiMDJmZmJkOGY2OTlkYWNhZTg3MDk0ZDUyNDMyNDU3NmI5OTg0NGY3NWUxIjoiMTkwMmQ5NzY5YTdiYTNkMzI2OGUxMjU3Mzk1YzhjMmU1Zjk4ZWVmMjk1ZGNiZmE1YTM1ZGY3NzUiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzE1IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5N2UwMzk1NmY2MDgzZTQ1MSI6ImE1YjdkOGNjYTIwNjk5MDhkMWVkODhlNmE5ZmUyYzliZWRlMzEzMWRhZDU0NjcxZWE3YWRlMzBhMDdkMTg1NjkyYWIwZWJkZjRjNzhjZjdhIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOjE2OiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTciCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMTkyICMxNiAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiI5YTk4NjE3ZmI5N2EwZGZlNDY2YmU2OTIyNzJkY2RhZWMxYzU0NDNhM2I1MTMxMmVmMDQyYzg2MzYzY2MwNWFmYjk4YzY2ZTE2YmU4YTQ0NSI6IjQ5MDA0OTEyZmRkNzI2OTI3OWIxZjA2YTg5IjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzE3IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiIxZDA4OWE1ZiI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMTggKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5N2UwMzk1NmY2MDgzZTQ1MSI6IjJmNDYwMjJhIjoiYTI2NTQ4MGNhODhkNWYiOiJhMjI0OGE4ODJlY2JmODUwZGFmOTE5MzNhMzg5ZTc4ZTgxNjIzZDIzM2RmZDQ3YmY4MzIxMzYxYTM4ZjEzOGZlIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMTkgKFA9MCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YjEyYWI3NDRiNjFjMDcwZTIiOiI1MjgwYTIxMzdmZWUzZGVlZmNmZTliNjNhMTE5OWZiMyI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzIwIChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiZDQwYTczMThjNWYyZDgyZjgzOGMwYmVlZWZlMGQ1OTgiOiJhMjY1NDgwY2E4OGQ1ZiI6ImEyMjQ4YTg4MmVjYmY4NTBkYWY5MTkzM2EzODllNzhlODE2MjNkMjMzZGZkNDdiZjgzMjEzNjFhMzhmMTM4ZmUiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjEgKFA9MCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YjEyYWI3NDRiNjFjMDcwZTIiOiI1ZTBlYWViZCI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjIgKFA9MCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YjEyYWI3NDRiNjFjMDcwZTIiOiI3MWI3ZmMzMyI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2IjoiZjYxMDc2OTZlZGIzMzJiMmVhMDU5ZDg4NjBmZWUyNmJlNDJlNWUxMmUxYTRmNzlhOGQwZWFmY2UxYjIyNzhhNyI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzIzIChQPTAsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxOTRkNTQ0Y2U1ZDE1ZWVkNCI6ImQwN2NjZjlmZGMzZDMzYWE5NGNkYTNkMjMwZGE3MDdjIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjQgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzE5NGQ1NDRjZTVkMTVlZWQ0IjoiNjVmZTMyYjY0OWRjMzI4YzlmNTMxNTg0ODk3ZTg1YjMiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNiI6ImY2MTA3Njk2ZWRiMzMyYjJlYTA1OWQ4ODYwZmVlMjZiZTQyZTVlMTJlMWE0Zjc5YThkMGVhZmNlMWIyMjc4YTciOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjUgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiI5ZjZjYTRhZjliMTU5MTQ4Yzg4OWE2NTg0ZDExODNlYTI2ZTI2MTQ4NzRiMDUwNDU3NWRlYThkMSI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6NDoiYTI2NTQ4MGNhODhkNWY1MzZkYjBkYzZhYmM0MGZhZjBkMDViZTdhOTY2OTc3NzY4IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjYgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiI4NGQ4MjEyZTljZmMyMTIxMjUyYmFhM2IwNjViMWVkY2Y1MDQ5N2I5NTk0ZGIxZWJkNzk2NTgyNSI6ImZkZDJkNmY1MDNjOTE1IjoiNWI5MjM5NGYyMWRkYzNhZDQ5ZDliMDg4MWI4MjlhNTkzNWNiM2E0ZDIzZTI5MmE2MmZiNjZiNWU3YWI3MDIwZSI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzI3IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjY2Q0YjNlOGNkZDJhYjMzZCI6IjZhYWI2NGM0Nzg3NTk5ZDhmMjEzNDQ2YmVhZGIxNmUwOGRiYTYwZTk3ZjU2ZGJkMTRkMWQ5ODBkNmZlMGZiNDRiNDIxOTkyNjYyYjk3OTc1IjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoxNjoiYTI2NTQ4MGNhODhkNWY1MzZkYjBkYzZhYmM0MGZhZjBkMDViZTdhOTY2OTc3NzY4IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjggKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGNjZDRiM2U4Y2RkMmFiMzNkIjoiNDk4MGIyZWU0OWIxYWFmMzkzMTc1ZjVhYjliYWU5NWVjNzkwNDU1N2RmYTIwNjYwM2M1MWQzNmM4MjZmMDEzODQxMDA4ODYxOThhN2Y2YTMiOiJmZGQyZDZmNTAzYzkxNSI6IjViOTIzOTRmMjFkZGMzYWQ0OWQ5YjA4ODFiODI5YTU5MzVjYjNhNGQyM2UyOTJhNjJmYjY2YjVlN2FiNzAyMGUiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMjkgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGNjZDRiM2U4Y2RkMmFiMzNkIjoiMTZlNTQzZDBlMjA2MTVmZjBkZjE1YWNkOTkyN2RkZmU0MDY2OGE1NGJiODU0Y2NjYzI1ZTlmY2UiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOjQ6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0xOTIgIzMwIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjY2Q0YjNlOGNkZDJhYjMzZCI6ImRmMzViMTA5Y2FmNjkwNjU2YWUyNzhiYmQ4ZjhiYmE2ODdhMmNlMTFiMTA1ZGFlOThlY2VkYjNlIjoiMDgxMjc1N2FkMGNjNGQxN2M0Y2ZlN2E2NDIiOiJlYzZjNDRhN2U5NGU1MWEzY2E2ZGVlMjI5MDk4MzkxNTc1ZWM3MjEzYzg1MjY3ZmJmNzQ5MmZkYmVlZTYxYjEwIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMzEgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlYjhkOWM4ZjNiOTA2Zjg4NiI6ImM1YjBiMmVmMTc0OThjNTU3MGViMzM1ZGY0NTg4MDMyOTU4YmEzZDY5YmY2ZjMxNzg0NjRhNmY3ZmEyYjc2NzQ0ZThlOGQ5NTY5MWNlY2I4IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoxNjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzZkMWIxM2Q4NDliODA4NGM5YjZhY2M1IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTE5MiAjMzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2NTExZmI1MWZjZmE3NWNiNGI0NGRhNzVhNmU1YTBlYjhkOWM4ZjNiOTA2Zjg4NiI6ImQxZjA1MTg5MjlmNGFlMmYwNTQzZGUyYTdkZmU0YmIwMTEwYmIzMDU3ZTUyNGExYzA2YmQ2ZGMyZTZiY2MzNDM2Y2ZmYjk2OWFlOTAwMzg4IjoiMDgxMjc1N2FkMGNjNGQxN2M0Y2ZlN2E2NDIiOiJlYzZjNDRhN2U5NGU1MWEzY2E2ZGVlMjI5MDk4MzkxNTc1ZWM3MjEzYzg1MjY3ZmJmNzQ5MmZkYmVlZTYxYjEwIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzEgKFA9MCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWRhMzJmNzUxNDU2ZTMzMTk1ZjFmNDk5Y2YyZGM3Yzk3ZWExMjdiNmQ0ODhmMjExY2NjNTEyNmZiYjI0YWZhNiI6IjQ2OWM5MGJiIjoiYTU0NDIxOGRhZGQzYzEiOiIiOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzIgKFA9MCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWRhMzJmNzUxNDU2ZTMzMTk1ZjFmNDk5Y2YyZGM3Yzk3ZWExMjdiNmQ0ODhmMjExY2NjNTEyNmZiYjI0YWZhNiI6IjQ2YTkwOGVkIjoiZDNkNTQyNGUyMGZiZWMiOiIiOjQ6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMzIChQPTAsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMWI4YTkyN2E5NWVmZTk0NjU2Njc3YjY5MjY2MjAwMDI3OGI0NDFjNzllODc5ZGQ1YzBkZGM3NThiZGM5ZWU4IjoiODIwN2ViMTRkMzM4NTVhNTJhY2NlZWQxN2RiY2JmNmUiOiJhNTQ0MjE4ZGFkZDNjMSI6IiI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzQgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUxYjhhOTI3YTk1ZWZlOTQ2NTY2NzdiNjkyNjYyMDAwMjc4YjQ0MWM3OWU4NzlkZDVjMGRkYzc1OGJkYzllZTgiOiI2MGY4ZTEyN2NiNGQzMGRiNmRmMDYyMjE1OGNkOTMxZCI6ImQzZDU0MjRlMjBmYmVjIjoiIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzUgKFA9MCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUxYjhhOTI3YTk1ZWZlOTQ2NTY2NzdiNjkyNjYyMDAwMjc4YjQ0MWM3OWU4NzlkZDVjMGRkYzc1OGJkYzllZTgiOiI4YTE5YTEzMyI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiIjo0OiIiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICM2IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMWI4YTkyN2E5NWVmZTk0NjU2Njc3YjY5MjY2MjAwMDI3OGI0NDFjNzllODc5ZGQ1YzBkZGM3NThiZGM5ZWU4IjoiMmUzMTdmMWIiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZCI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzcgKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZjA2MzYzOWU2NmMyODQwODNjNWNmNzJiNzBkOGJjMjc3ZjU5NzhlODBkOTMyMmQ5OWYyZmRjNzE4Y2RhNTY5IjoiOTdlMWE4ZGQ0MjU5Y2NkMmU0MzFlMDU3YjAzOTdmY2YiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IiI6MTY6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzggKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZjA2MzYzOWU2NmMyODQwODNjNWNmNzJiNzBkOGJjMjc3ZjU5NzhlODBkOTMyMmQ5OWYyZmRjNzE4Y2RhNTY5IjoiNWE5NTk2YzUxMWVhNmE4NjcxYWRlZmM0ZjIxNTdkOGIiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZCI6IiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICM5IChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZjA2MzYzOWU2NmMyODQwODNjNWNmNzJiNzBkOGJjMjc3ZjU5NzhlODBkOTMyMmQ5OWYyZmRjNzE4Y2RhNTY5IjoiNjRhMTM0MTY3OTk3MmRjNTg2OWZjZjY5YjE5ZDVjNWVhNTBhYTBiNWU5ODVmNWI3MjJhYThkNTkiOiJhNTQ0MjE4ZGFkZDNjMSI6IiI6NDoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4IgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTAgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFmMDYzNjM5ZTY2YzI4NDA4M2M1Y2Y3MmI3MGQ4YmMyNzdmNTk3OGU4MGQ5MzIyZDk5ZjJmZGM3MThjZGE1NjkiOiJjNWI3ZjgwMmJmZmM0OThjMTYyNmUzNzc0ZjFkOWY5NDA0NWRmZDhlMWExMGEyMDI3N2QwMGE3NSI6ImJmY2RhOGI1YTJkMGQyIjoiIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTEgKFA9MjQsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNzA3OWRmYTNiNWM3YjA1NjM0N2Q3ZTQzN2JjZGVkNjgzYWJkNmUyYzllMDY5ZDMzMzI4NDA4MmNiYjVkNDUzIjoiYmM1MWMzOTI1YTk2MGU3NzMyNTMzZTRlZjNhNGY2OWVlNjgyNmRlOTUyYmNiMGZkMzc0ZjNiYjZkYjgzNzdlYmZjNzk2NzQ4NThjNGYzMDUiOiJhNTQ0MjE4ZGFkZDNjMSI6IiI6MTY6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5OCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzEyIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6ImFmYTFmYThlOGE3MGUyNmIwMjE2MTE1MDU1NmQ2MDQxMDFmZGY0MjNmMzMyYzMzNjMyNzVmMmE0OTA3ZDUxYjczNGZlNzIzOGNlYmJkNDhmIjoiYmZjZGE4YjVhMmQwZDIiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTMgKFA9MjQsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNzA3OWRmYTNiNWM3YjA1NjM0N2Q3ZTQzN2JjZGVkNjgzYWJkNmUyYzllMDY5ZDMzMzI4NDA4MmNiYjVkNDUzIjoiNjNlMDBkMzBlNGIwOGZkMmExY2M4ZDcwZmFiMzI3YjIzNjhlNzdhOTNiZTRmNDEyM2QxNGZiM2YiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IiI6NDoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQ2ZTNhMGIyYTg2ZjcwNmU4ODU5NTllIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTQgKFA9MjQsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNzA3OWRmYTNiNWM3YjA1NjM0N2Q3ZTQzN2JjZGVkNjgzYWJkNmUyYzllMDY5ZDMzMzI4NDA4MmNiYjVkNDUzIjoiYmI1NDI1YjM4NjliNzY4NTZlYzU4ZTM5ODg2ZmI2ZjZmMmFjMTNmZTQ0Y2IxMzJkOGQwYzAwOTkiOiI4OTRkY2FhNjEwMDhlYjhmYjA1MmM2MGQ0MSI6IiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzE1IChQPTI0LCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiMGU4ZGY2M2M1N2YwNWQ5YWM0NTc1NzVlYTc2NDUyNGI4NjEwYWU1MTY0ZTYyMTVmNDI2ZjVhN2FlNmVkZTQiOiJmMDA1MGFkMTYzOTIwMjFhM2Y0MDIwN2JlZDM1MjFmYjFlOWY4MDhmNDk4MzBjNDIzYTU3OGQxNzk5MDJmOTEyZjllYTFhZmJjZTExMjBiMyI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiIjoxNjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQ2ZTNhMGIyYTg2ZjcwNmU4ODU5NTllIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTYgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWIwZThkZjYzYzU3ZjA1ZDlhYzQ1NzU3NWVhNzY0NTI0Yjg2MTBhZTUxNjRlNjIxNWY0MjZmNWE3YWU2ZWRlNCI6ImM0MDgxOTBkMGZiZjUwMzRmODNiMjRhOGVkOTY1NzMzMWE3Y2UxNDFkZTRmYWU3NjkwODQ2MDdiODNiZDA2ZTY0NDJlYWM4ZGFjZjU4M2NjIjoiODk0ZGNhYTYxMDA4ZWI4ZmIwNTJjNjBkNDEiOiIiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTcgKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiMGU4ZGY2M2M1N2YwNWQ5YWM0NTc1NzVlYTc2NDUyNGI4NjEwYWU1MTY0ZTYyMTVmNDI2ZjVhN2FlNmVkZTQiOiI5MmQwMGZiZSI6ImE1NDQyMThkYWRkM2MxIjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4OGQxNWI2ZDM2YzAzOGVhYiI6NDoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMTggKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiMGU4ZGY2M2M1N2YwNWQ5YWM0NTc1NzVlYTc2NDUyNGI4NjEwYWU1MTY0ZTYyMTVmNDI2ZjVhN2FlNmVkZTQiOiI5MTQzZTVjNCI6Ijc4YzQ2ZTMyNDljYTI4IjoiMjMyZTk1N2M2NWZmYTExOTg4ZTgzMGQ0NjE3ZDUwMGYxYzRhMzVjMTIyMWYzOTZjNDFhYjIxNGYwNzRjYTJkYyI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzE5IChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTRiYzEwYjFhNjJjOTZkNDU5ZmJhZjNhNWFhM2ZhY2U3MzEzYmI5ZTEyNTNlNjk2Zjk2YTdhOGUzNjgwMTA4OCI6IjkzYWYxMWEwODM3OWViMzdhMTZhYTI4MzdmMDlkNjlkIjoiYTU0NDIxOGRhZGQzYzEiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTg4ZDE1YjZkMzZjMDM4ZWFiIjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMjAgKFA9MCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNGJjMTBiMWE2MmM5NmQ0NTlmYmFmM2E1YWEzZmFjZTczMTNiYjllMTI1M2U2OTZmOTZhN2E4ZTM2ODAxMDg4IjoiZDE5YjBjMTRlYzY4NmE3OTYxY2E3YzM4NmQxMjVhNjUiOiI3OGM0NmUzMjQ5Y2EyOCI6IjIzMmU5NTdjNjVmZmExMTk4OGU4MzBkNDYxN2Q1MDBmMWM0YTM1YzEyMjFmMzk2YzQxYWIyMTRmMDc0Y2EyZGMiOjE2OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMjEgKFA9MCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNGJjMTBiMWE2MmM5NmQ0NTlmYmFmM2E1YWEzZmFjZTczMTNiYjllMTI1M2U2OTZmOTZhN2E4ZTM2ODAxMDg4IjoiODY2ZDQyMjciOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZTA5YTEwMDVlMDI0ZjY5MDciOjQ6IiIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzIyIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTRiYzEwYjFhNjJjOTZkNDU5ZmJhZjNhNWFhM2ZhY2U3MzEzYmI5ZTEyNTNlNjk2Zjk2YTdhOGUzNjgwMTA4OCI6Ijk0Y2IxMTI3IjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjUiOiI4OWY4YjA2OGQzNGY1NmJjNDlkODM5ZDhlNDdiMzQ3ZTZkYWU3MzdiOTAzYjI3ODYzMjQ0N2U2YzA0ODVkMjZhIjo0OiJGQUlMIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMjMgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGM1Y2YzNDU3ZmYyMjIyOGMzOWMwNTFjNGUwNWVkNDA5MzY1N2ViMzAzZjg1OWE5ZDRiMGY4YmUwMTI3ZDg4YSI6Ijg2N2IwZDg3Y2Y2ZTBmNzE4MjAwYTk3YjRmNmQ1YWQ1IjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3IjoxNjoiIgorCitDQ00gYXV0aCBkZWNyeXB0IHRhZyBOSVNUIERWUFQgQUVTLTI1NiAjMjQgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGM1Y2YzNDU3ZmYyMjIyOGMzOWMwNTFjNGUwNWVkNDA5MzY1N2ViMzAzZjg1OWE5ZDRiMGY4YmUwMTI3ZDg4YSI6IjY3N2EwNDBkNDZlZTNmMmI3ODM4MjczYmRhZDE0ZjE2IjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjUiOiI4OWY4YjA2OGQzNGY1NmJjNDlkODM5ZDhlNDdiMzQ3ZTZkYWU3MzdiOTAzYjI3ODYzMjQ0N2U2YzA0ODVkMjZhIjoxNjoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzI1IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGM1Y2YzNDU3ZmYyMjIyOGMzOWMwNTFjNGUwNWVkNDA5MzY1N2ViMzAzZjg1OWE5ZDRiMGY4YmUwMTI3ZDg4YSI6ImMyZmUxMjY1ODEzOWY1ZDBkZDIyY2FkZjJlOTAxNjk1YjU3OTMwMmE3MmZjNTYwODNlYmM3NzIwIjoiYTU0NDIxOGRhZGQzYzEiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTg4ZDE1YjZkMzZjMDM4ZWFiIjo0OiI3OGM0NmUzMjQ5Y2EyOGUxZWYwNTMxZDgwZmQzN2MxMjRkOWFlY2I3YmU2NjY4ZTMiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyNiAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiI5NDc0OGJhODEyMjllNTNjMzg1ODNhODU2NGIyM2ViYmFmYzZmNmVmZGY0YzJhODFjNDRkYjJjOSI6IjZiYTAwNGZkMTc2NzkxIjoiNWEwNTNiMmExYmI4N2U4NWQ1NjUyN2JmY2RjZDNlY2FmYjk5MWJiMTBlNGM4NjJiYjA3NTFjNzAwYTI5ZjU0YiI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzI3IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcwNTMzNGUzMGY1M2RkMmY5MmQxOTBkMmMxNDM3Yzg3NzJmOTQwYzU1YWEzNWU1NjIyMTRlZDQ1YmQ0NThmZmUiOiIzMzQxMTY4ZWI4YzQ4NDY4YzQxNDM0N2ZiMDhmNzFkMjA4NmY3YzJkMWJkNTgxY2UxYWM2OGJkNDJmNWVjN2ZhN2UwNjhjYzBlY2Q3OWMyYSI6ImE1NDQyMThkYWRkM2MxIjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4OGQxNWI2ZDM2YzAzOGVhYiI6MTY6Ijc4YzQ2ZTMyNDljYTI4ZTFlZjA1MzFkODBmZDM3YzEyNGQ5YWVjYjdiZTY2NjhlMyIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzI4IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcwNTMzNGUzMGY1M2RkMmY5MmQxOTBkMmMxNDM3Yzg3NzJmOTQwYzU1YWEzNWU1NjIyMTRlZDQ1YmQ0NThmZmUiOiJkNTQzYWNkYTcxMmI4OThjYmIyN2I4ZjU5OGIyZTQ0MzhjZTU4N2E4MzZlMjc4NTE0N2MzMzM4YTI0MDA4MDllNzM5YjYzYmE4MjI3ZDJmOSI6IjZiYTAwNGZkMTc2NzkxIjoiNWEwNTNiMmExYmI4N2U4NWQ1NjUyN2JmY2RjZDNlY2FmYjk5MWJiMTBlNGM4NjJiYjA3NTFjNzAwYTI5ZjU0YiI6MTY6IkZBSUwiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMyOSAoUD0yNCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MDUzMzRlMzBmNTNkZDJmOTJkMTkwZDJjMTQzN2M4NzcyZjk0MGM1NWFhMzVlNTYyMjE0ZWQ0NWJkNDU4ZmZlIjoiYzBlYTQwMGI1OTk1NjFlNzkwNWI5OTI2MmI0NTY1ZDVjM2RjNDlmYWQ4NGQ3YzY5ZWY4OTEzMzkiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZTA5YTEwMDVlMDI0ZjY5MDciOjQ6ImU4ZGU5NzBmNmVlOGU4MGVkZTkzMzU4MWI1YmNmNGQ4MzdlMmI3MmJhYThiMDBjMyIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzMwIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdDpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcwNTMzNGUzMGY1M2RkMmY5MmQxOTBkMmMxNDM3Yzg3NzJmOTQwYzU1YWEzNWU1NjIyMTRlZDQ1YmQ0NThmZmUiOiI2MDg3MWUwM2VhMGViOTY4NTM2Yzk5ZjkyNmVhMjRlZjQzZDQxMjcyYWQ5ZmI3ZjYzZDQ4ODYyMyI6IjhmYTUwMWM1ZGQ5YWM5Yjg2ODE0NGM5ZmE1IjoiNWJiNDBlM2JiNzJiNDUwOTMyNGE3ZWRjODUyZjcyNTM1ZjFmNjI4MzE1NmU2M2Y2OTU5ZmZhZjM5ZGNkZTgwMCI6NDoiRkFJTCIKKworQ0NNIGF1dGggZGVjcnlwdCB0YWcgTklTVCBEVlBUIEFFUy0yNTYgIzMxIChQPTI0LCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCittYmVkdGxzX2NjbV9hdXRoX2RlY3J5cHQ6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMTRhMjAyZjgzNmY5ZjI1N2UyMmQ4YzExNzU3ODMyYWU1MTMxZDM1N2E3MmRmODhmM2VmZjBmZmNlZTBkYTRlIjoiOGQzNGNkY2EzN2NlNzdiZTY4ZjY1YmFmMzM4MmUzMWVmYTY5M2U2M2Y5MTRhNzgxMzY3ZjMwZjJlYWFkOGMwNjNjYTUwNzk1YWNkOTAyMDMiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZTA5YTEwMDVlMDI0ZjY5MDciOjE2OiJlOGRlOTcwZjZlZThlODBlZGU5MzM1ODFiNWJjZjRkODM3ZTJiNzJiYWE4YjAwYzMiCisKK0NDTSBhdXRoIGRlY3J5cHQgdGFnIE5JU1QgRFZQVCBBRVMtMjU2ICMzMiAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE0YTIwMmY4MzZmOWYyNTdlMjJkOGMxMTc1NzgzMmFlNTEzMWQzNTdhNzJkZjg4ZjNlZmYwZmZjZWUwZGE0ZSI6IjUxNmMwMDk1Y2MzZDg1ZmQ1NWU0OGRhMTdjNTkyZTBjNzAxNGI5ZGFhZmI4MmJkYzRiNDEwOTZkZmRiZTljYzFhYjYxMGY4ZjNlMDM4ZDE2IjoiOGZhNTAxYzVkZDlhYzliODY4MTQ0YzlmYTUiOiI1YmI0MGUzYmI3MmI0NTA5MzI0YTdlZGM4NTJmNzI1MzVmMWY2MjgzMTU2ZTYzZjY5NTlmZmFmMzlkY2RlODAwIjoxNjoiRkFJTCIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIjoiMDAwMDAwMDMwMjAxMDBBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiQkE3MzcxODVFNzE5MzEwNDkyRjM4QTVGMTI1MURBNTVGQUZCQzk0OTg0OEEwREZDQUVDRTc0NkIzREI5QUQiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGIjoiMDAwMDAwMDQwMzAyMDFBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiNUQyNTY0QkY4RUFGRTFEOTk1MjZFQzAxNkQxQkYwNDI0Q0ZCRDJDRDYyODQ4RjMzNjBCMjI5NURGMjQyODNFOCIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDA1MDQwMzAyQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjgxRjY2M0Q2Qzc3ODc4MTdGOTIwMzYwOEI5ODJBRDE1REMyQkJEODdENzU2Rjc5MjA0RjU1MUQ2NjgyRjIzQUE0NiIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRSI6IjAwMDAwMDA2MDUwNDAzQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiQ0FFRjFFODI3MjExQjA4RjdCRDkwRjA4Qzc3Mjg4QzA3MEE0QTA4QjNBOTMzQTYzRTQ5N0EwIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiOiIwMDAwMDAwNzA2MDUwNEEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjJBRDNCQUQ5NEZDNTJFOTJCRTQzOEU4MjdDMTAyM0I5NkE4QTc3MjU4RkExN0JBN0YzMzFEQjA5IgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICM2CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMCI6IjAwMDAwMDA4MDcwNjA1QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCIjoiRkVBNTQ4MEJBNTNGQThEM0MzNDQyMkFBQ0U0REU2N0ZGQTNCQjczQkFCQUIzNkExRUU0RkUwRkUyOCIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjNworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIjoiMDAwMDAwMDkwODA3MDZBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiNTQ1MzIwMjZFNTRDMTE5QThEMzZEOUVDNkUxRUQ5NzQxNkM4NzA4QzRCNUMyQ0FDQUZBM0JDQ0Y3QTRFQkY5NTczIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICM4CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiI6IjAwMDAwMDBBMDkwODA3QTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjhBRDE5QjAwMUE4N0QxNDhGNEQ5MkJFRjM0NTI1Q0NDRTNBNjNDNjUxMkE2RjU3NTczODhFNDkxM0VGMTQ3MDFGNDQxIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICM5CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIjoiMDAwMDAwMEIwQTA5MDhBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiNURCMDhENjI0MDdFNkUzMUQ2MEY5Q0EyQzYwNDc0MjE5QUMwQkU1MEMwRDRBNTc3ODc5NEQ2RTIzMENEMjVDOUZFQkY4NyIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiOiIwMDAwMDAwQzBCMEEwOUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IkRCMTE4Q0NFQzFCODc2MUM4NzdDRDg5NjNBNjdENkYzQkJCQzVDRDA5Mjk5RUIxMUYzMTJGMjMyMzciCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzExCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiOiIwMDAwMDAwRDBDMEIwQUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjdDQzgzRDhEQzQ5MTAzNTI1QjQ4M0RDNUNBN0VBOUFCODEyQjcwNTYwNzlEQUZGQURBMTZDQ0NGMkM0RSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIjoiMDAwMDAwMEUwRDBDMEJBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiIyQ0QzNUI4ODIwRDIzRTdBQTM1MUIwRTkyRkM3OTM2NzIzOEIyQ0M3NDhDQkI5NEMyOTQ3NzkzRDY0QUY3NSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiQzZCNUYzRTZDQTIzMTFBRUY3NDcyQjIwM0U3MzVFQTU2MUFEQjE3RDU2QzVBMyI6IjAwQTk3MDExMEUxOTI3QjE2MEI2QTMxQzFDIjoiNkI3RjQ2NDUwN0ZBRTQ5NiI6IkE0MzVENzI3MzQ4REREMjI5MDdGN0VCOEY1RkRCQjREOTM5REE2NTI0REI0RjY0NTU4QzAyRDI1QjEyN0VFIgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMxNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIwMUY2Q0U2NzY0QzU3NDQ4M0JCMDJFNkJCRjFFMEFCRDI2QTIyNTcyQjREODBFRTciOiIwMDgzQ0Q4Q0UwQ0I0MkIxNjBCNkEzMUMxQyI6Ijk4NjYwNUI0M0RGMTVERTciOiI4QUUwNTI1MDhGQkVDQTkzMkUzNDZGMDVFMERDMERGQkNGOTM5RUFGRkEzRTU4N0M4NjdENkUxQzQ4NzAzODA2IgorCitDQ00tQ2FtZWxsaWEgZW5jcnlwdCBhbmQgdGFnIFJGQyA1NTI4ICMxNQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK21iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiJDREYxRDg0MDZGQzJFOTAxNDk1Mzg5NzAwNUZCRkI4QkE1NzI3NkY5MjQwNDYwOEUwOCI6IjAwNUY1NDk1MEIxOEYyQjE2MEI2QTMxQzFDIjoiNDhGMkU3RTFBNzY3MUE1MSI6IjA4QjY3RUUyMUM4QkYyNkU0NzNFNDA4NTk5RTlDMDgzNkQ2QUYwQkIxOERGNTU0NjZDQTgwODc4QTc5MDQ3NkRFNSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTYKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiQjAwNURDRkEwQjU5MTgxNDI2QTk2MTY4NUE5OTNEOEM0MzE4NUIiOiIwMEVDNjAwODYzMzE5QUIxNjBCNkEzMUMxQyI6IkRFOTdERjNCOENCRDZEOEU1MDMwREE0QyI6IjYzQjc4QjQ5NjdCMTlFREJCNzMzQ0QxMTE0RjY0RUIyMjYwODkzNjhDMzU0ODI4RDk1MENDNSIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMkUyMDIxMTI5ODEwNUYxMjlENUVEOTVCOTNGNzJEMzBCMkZBQ0NENyI6IjAwNjBDRkYxQTMxRUExQjE2MEI2QTMxQzFDIjoiQTVFRTkzRTQ1N0RGMDU0NjZFNzgyRENGIjoiMEJDNkJCRTJBOEI5MDlGNDYyOUVFNkRDMTQ4REE0NDQxMEUxOEFGNDMxNDczODMyNzZGNjZBOUYiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzE4CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjI2NDU5NDFFNzU2MzJEMzQ5MUFGMEZDMEM5ODc2QzNCRTRBQTc0NjhDOSI6IjAwMEY4NUNEOTk1Qzk3QjE2MEI2QTMxQzFDIjoiMjRBQTFCRjlBNUNEODc2MTgyQTI1MDc0IjoiMjIyQUQ2MzJGQTMxRDZBRjk3MEMzNDVGN0U3N0NBM0JEMERDMjVCMzQwQTFBM0QzMUY4RDRCNDRCNyIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMTkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDcwMTM1QTY0MzdDOURCMTIwQ0Q2MUQ4RjZDMzlDM0VBMTI1RkQ5NUEwRDIzRCI6IjAwQzI5QjJDQUFDNENEQjE2MEI2QTMxQzFDIjoiNjkxOTQ2QjlDQTA3QkU4NyI6IjA1QjhFMUI5QzQ5Q0ZENTZDRjEzMEFBNjI1MURDMkVDQzA2Q0NDNTA4RkU2OTdBMDA2NkQ1N0M4NEJFQzE4Mjc2OCIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMjAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiQzhDMDg4MEU2QzYzNkUyMDA5M0RENjU5NDIxN0QyRTE4ODc3REIyNjRFNzFBNUNDIjoiMDAyQzZCNzU5NUVFNjJCMTYwQjZBMzFDMUMiOiJEMEM1NEVDQjg0NjI3REM0IjoiNTRDRUI5NjhERUUyMzYxMTU3NUVDMDAzREZBQTFDRDQ4ODQ5QkRGNUFFMkVEQjZCN0ZBNzc1QjE1MEVENDM4M0M1QTkiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzIxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IkY3NURBQTA3MTBDNEU2NDI5Nzc5NERDMkI3RDJBMjA3NTdCMUFBNEU0NDgwMDJGRkFCIjoiMDBDNTNDRDRDMkFBMjRCMTYwQjZBMzFDMUMiOiJFMjg1RTBFNDgwOENEQTNEIjoiQjE0MDQ1NDZCRjY2NzIxMENBMjhFMzA5QjM5QkQ2Q0E3RTlGQzgyODVGRTY5OEQ0M0NEMjBBMDJFMEJEQ0FFRDIwMTBEMyIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMjIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiQzIzODgyMkZBQzVGOThGRjkyOTQwNUIwQUQxMjdBNEU0MTg1NEUiOiIwMEJFRTkyNjdGQkFEQ0IxNjBCNkEzMUMxQyI6IjZDQUVGOTk0MTE0MTU3MEQ3QzgxMzQwNSI6Ijk0Qzg5NTlDMTE1NjlBMjk3ODMxQTcyMTAwNTg1N0FCNjFCODdBMkRFQTA5MzZCNkVCNUY2MjVGNUQiCisKK0NDTS1DYW1lbGxpYSBlbmNyeXB0IGFuZCB0YWcgUkZDIDU1MjggIzIzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjREQkYzRTc3NEFEMjQ1RTVENTg5MUY5RDFDMzJBMEFFMDIyQzg1RDciOiIwMERGQThCMTI0NTAwN0IxNjBCNkEzMUMxQyI6IjM2QTUyQ0YxNkIxOUEyMDM3QUI3MDExRSI6IjU4NjlFM0FBRDI0NDdDNzRFMEZDMDVGOUE0RUE3NDU3N0Y0REU4Q0E4OTI0NzY0Mjk2QUQwNDExOUNFNyIKKworQ0NNLUNhbWVsbGlhIGVuY3J5cHQgYW5kIHRhZyBSRkMgNTUyOCAjMjQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NjbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiOURDOUVEQUUyRkY1REY4NjM2RThDNkRFMEVFRDU1Rjc4NjdFMzMzMzdEIjoiMDAzQjhGRDhEM0E5MzdCMTYwQjZBMzFDMUMiOiJBNEQ0OTlGNzg0MTk3MjhDMTkxNzhCMEMiOiI0QjE5ODE1NjM5M0IwRjc3OTYwODZBQUZCNDU0RjhDM0YwMzRDQ0E5NjY5NDVGMUZDRUE3RTExQkVFNkEyRiIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNWM3N2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTg5IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2NjbS5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19DQ01fQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVDpNQkVEVExTX0FFU19DICovCit2b2lkIG1iZWR0bHNfY2NtX3NlbGZfdGVzdCggKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NjbV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfY2NtX3NldGtleSggaW50IGNpcGhlcl9pZCwgaW50IGtleV9zaXplLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX2NjbV9jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVszMl07CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfY2NtX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldCgga2V5LCAweDJBLCBzaXplb2YoIGtleSApICk7CisgICAgVEVTVF9BU1NFUlQoICh1bnNpZ25lZCkga2V5X3NpemUgPD0gOCAqIHNpemVvZigga2V5ICkgKTsKKworICAgIHJldCA9IG1iZWR0bHNfY2NtX3NldGtleSggJmN0eCwgY2lwaGVyX2lkLCBrZXksIGtleV9zaXplICk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NjbV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQyAqLwordm9pZCBjY21fbGVuZ3RocyggaW50IG1zZ19sZW4sIGludCBpdl9sZW4sIGludCBhZGRfbGVuLCBpbnQgdGFnX2xlbiwgaW50IHJlcyApCit7CisgICAgbWJlZHRsc19jY21fY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzE0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZFsxMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRbMTBdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnWzE4XTsKKyAgICBpbnQgZGVjcnlwdF9yZXQ7CisKKyAgICBtYmVkdGxzX2NjbV9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgc2l6ZW9mKCBrZXkgKSApOworICAgIG1lbXNldCggbXNnLCAwLCBzaXplb2YoIG1zZyApICk7CisgICAgbWVtc2V0KCBpdiwgMCwgc2l6ZW9mKCBpdiApICk7CisgICAgbWVtc2V0KCBhZGQsIDAsIHNpemVvZiggYWRkICkgKTsKKyAgICBtZW1zZXQoIG91dCwgMCwgc2l6ZW9mKCBvdXQgKSApOworICAgIG1lbXNldCggdGFnLCAwLCBzaXplb2YoIHRhZyApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jY21fc2V0a2V5KCAmY3R4LCBNQkVEVExTX0NJUEhFUl9JRF9BRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIDggKiBzaXplb2YoIGtleSApICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggJmN0eCwgbXNnX2xlbiwgaXYsIGl2X2xlbiwgYWRkLCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2csIG91dCwgdGFnLCB0YWdfbGVuICkgPT0gcmVzICk7CisKKyAgICBkZWNyeXB0X3JldCA9IG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdCggJmN0eCwgbXNnX2xlbiwgaXYsIGl2X2xlbiwgYWRkLCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLCBvdXQsIHRhZywgdGFnX2xlbiApOworCisgICAgaWYoIHJlcyA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIGRlY3J5cHRfcmV0ID09IE1CRURUTFNfRVJSX0NDTV9BVVRIX0ZBSUxFRCApOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoIGRlY3J5cHRfcmV0ID09IHJlcyApOworCitleGl0OgorICAgIG1iZWR0bHNfY2NtX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19jY21fZW5jcnlwdF9hbmRfdGFnKCBpbnQgY2lwaGVyX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICprZXlfaGV4LCBjaGFyICptc2dfaGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppdl9oZXgsIGNoYXIgKmFkZF9oZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXggKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1s1MF07CisgICAgdW5zaWduZWQgY2hhciBpdlsxM107CisgICAgdW5zaWduZWQgY2hhciBhZGRbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzUwXTsKKyAgICBtYmVkdGxzX2NjbV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3Qga2V5X2xlbiwgbXNnX2xlbiwgaXZfbGVuLCBhZGRfbGVuLCB0YWdfbGVuLCByZXN1bHRfbGVuOworCisgICAgbWJlZHRsc19jY21faW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBrZXksIDB4MDAsIHNpemVvZigga2V5ICkgKTsKKyAgICBtZW1zZXQoIG1zZywgMHgwMCwgc2l6ZW9mKCBtc2cgKSApOworICAgIG1lbXNldCggaXYsIDB4MDAsIHNpemVvZiggaXYgKSApOworICAgIG1lbXNldCggYWRkLCAweDAwLCBzaXplb2YoIGFkZCApICk7CisgICAgbWVtc2V0KCByZXN1bHQsIDB4MDAsIHNpemVvZiggcmVzdWx0ICkgKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5LCBrZXlfaGV4ICk7CisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtc2csIG1zZ19oZXggKTsKKyAgICBpdl9sZW4gPSB1bmhleGlmeSggaXYsIGl2X2hleCApOworICAgIGFkZF9sZW4gPSB1bmhleGlmeSggYWRkLCBhZGRfaGV4ICk7CisgICAgcmVzdWx0X2xlbiA9IHVuaGV4aWZ5KCByZXN1bHQsIHJlc3VsdF9oZXggKTsKKyAgICB0YWdfbGVuID0gcmVzdWx0X2xlbiAtIG1zZ19sZW47CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jY21fc2V0a2V5KCAmY3R4LCBjaXBoZXJfaWQsIGtleSwga2V5X2xlbiAqIDggKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IHdpdGggaW5wdXQgPT0gb3V0cHV0ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggJmN0eCwgbXNnX2xlbiwgaXYsIGl2X2xlbiwgYWRkLCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICBtc2csIG1zZywgbXNnICsgbXNnX2xlbiwgdGFnX2xlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG1zZywgcmVzdWx0LCByZXN1bHRfbGVuICkgPT0gMCApOworCisgICAgLyogQ2hlY2sgd2UgZGlkbid0IHdyaXRlIHBhc3QgdGhlIGVuZCAqLworICAgIFRFU1RfQVNTRVJUKCBtc2dbcmVzdWx0X2xlbl0gPT0gMCAmJiBtc2dbcmVzdWx0X2xlbiArIDFdID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NjbV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdCggaW50IGNpcGhlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqa2V5X2hleCwgY2hhciAqbXNnX2hleCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaXZfaGV4LCBjaGFyICphZGRfaGV4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnX2xlbiwgY2hhciAqcmVzdWx0X2hleCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgbXNnWzUwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEzXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZFszMl07CisgICAgdW5zaWduZWQgY2hhciB0YWdbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzUwXTsKKyAgICBtYmVkdGxzX2NjbV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3Qga2V5X2xlbiwgbXNnX2xlbiwgaXZfbGVuLCBhZGRfbGVuLCByZXN1bHRfbGVuOworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX2NjbV9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoIGtleSwgMHgwMCwgc2l6ZW9mKCBrZXkgKSApOworICAgIG1lbXNldCggbXNnLCAweDAwLCBzaXplb2YoIG1zZyApICk7CisgICAgbWVtc2V0KCBpdiwgMHgwMCwgc2l6ZW9mKCBpdiApICk7CisgICAgbWVtc2V0KCBhZGQsIDB4MDAsIHNpemVvZiggYWRkICkgKTsKKyAgICBtZW1zZXQoIHRhZywgMHgwMCwgc2l6ZW9mKCB0YWcgKSApOworICAgIG1lbXNldCggcmVzdWx0LCAweDAwLCBzaXplb2YoIHJlc3VsdCApICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleSwga2V5X2hleCApOworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbXNnLCBtc2dfaGV4ICk7CisgICAgaXZfbGVuID0gdW5oZXhpZnkoIGl2LCBpdl9oZXggKTsKKyAgICBhZGRfbGVuID0gdW5oZXhpZnkoIGFkZCwgYWRkX2hleCApOworICAgIG1zZ19sZW4gLT0gdGFnX2xlbjsKKyAgICBtZW1jcHkoIHRhZywgbXNnICsgbXNnX2xlbiwgdGFnX2xlbiApOworCisgICAgaWYoIHN0cmNtcCggIkZBSUwiLCByZXN1bHRfaGV4ICkgPT0gMCApCisgICAgeworICAgICAgICByZXQgPSBNQkVEVExTX0VSUl9DQ01fQVVUSF9GQUlMRUQ7CisgICAgICAgIHJlc3VsdF9sZW4gPSAtMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgcmVzdWx0X2xlbiA9IHVuaGV4aWZ5KCByZXN1bHQsIHJlc3VsdF9oZXggKTsKKyAgICB9CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jY21fc2V0a2V5KCAmY3R4LCBjaXBoZXJfaWQsIGtleSwga2V5X2xlbiAqIDggKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IHdpdGggaW5wdXQgPT0gb3V0cHV0ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2NtX2F1dGhfZGVjcnlwdCggJmN0eCwgbXNnX2xlbiwgaXYsIGl2X2xlbiwgYWRkLCBhZGRfbGVuLAorICAgICAgICAgICAgICAgICBtc2csIG1zZywgbXNnICsgbXNnX2xlbiwgdGFnX2xlbiApID09IHJldCApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG1zZywgcmVzdWx0LCByZXN1bHRfbGVuICkgPT0gMCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplX3QgaTsKKworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgbXNnX2xlbjsgaSsrICkKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtc2dbaV0gPT0gMCApOworICAgIH0KKworICAgIC8qIENoZWNrIHdlIGRpZG4ndCB3cml0ZSBwYXN0IHRoZSBlbmQgKHdoZXJlIHRoZSBvcmlnaW5hbCB0YWcgaXMpICovCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXNnICsgbXNnX2xlbiwgdGFnLCB0YWdfbGVuICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2NtX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmFlcy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hZXMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg3OGVjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hZXMuZGF0YQpAQCAtMCwwICsxLDExMDMgQEAKK0RlY3J5cHQgZW1wdHkgYnVmZmVyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZGVjX2VtcHR5X2J1ZjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjA6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6ODotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE1Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTY6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzI6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzMgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZSB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzMgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19PTkVfQU5EX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjI6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo4Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojk6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE1Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzM6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDk6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMzIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoiQUVTLTEyOC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPUworCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOiJBRVMtMTI4LUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX05PTkUKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX05PTkUKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX05PTkUKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6IkFFUy0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX05PTkUKKworQUVTIFRyeSBlbmNyeXB0aW5nIDEgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDIgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjI6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDggYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojg6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDkgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4Ojk6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDE1IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoxNTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitBRVMgVHJ5IGVuY3J5cHRpbmcgMTcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjE3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyAzMSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MzE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIFRyeSBlbmNyeXB0aW5nIDMzIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODozMzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitBRVMgVHJ5IGVuY3J5cHRpbmcgNDcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjQ3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0FFUyBUcnkgZW5jcnlwdGluZyA0OSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6NDk6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzoxMjg6MDowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOjEyODowOjE6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE2OjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjA6MTY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE6MTU6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE1OjE6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE1Ojc6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE2OjY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE3OjY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6MTI4OjE2OjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjA6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjE6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODoyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6IkFFUy0xMjgtQ0ZCMTI4IjoxMjg6NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4Ojg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoiQUVTLTEyOC1DRkIxMjgiOjEyODo5Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjE1Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjE2Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjE3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjMxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjMyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjMzOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjQ3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjQ4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OiJBRVMtMTI4LUNGQjEyOCI6MTI4OjQ5Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODowOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjE6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MDoxOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MTY6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjA6MTY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODoxOjE1OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MTU6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjE1Ojc6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4OjEyODoxNjo2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NGQjEyODoxMjg6MTc6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6MTI4OjE2OjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjA6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjE6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODoyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6IkFFUy0xMjgtQ1RSIjoxMjg6NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4Ojg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoiQUVTLTEyOC1DVFIiOjEyODo5Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjE1Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjE2Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjE3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjMxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjMyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjMzOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjQ3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjQ4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOiJBRVMtMTI4LUNUUiI6MTI4OjQ5Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODowOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjE6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MDoxOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MTY6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjA6MTY6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODoxOjE1OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MTU6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjE1Ojc6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ1RSOjEyODoxNjo2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NUUjoxMjg6MTc6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6MTI4OjE2OjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MDotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5MjoxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5MjoyOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5Mjo3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5Mjo4Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5Mjo5Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MTU6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5MjoxNjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjE3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6MzE6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5MjozMjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjMzOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6IkFFUy0xOTItQ0JDIjoxOTI6NDc6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoiQUVTLTE5Mi1DQkMiOjE5Mjo0ODotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOiJBRVMtMTkyLUNCQyI6MTkyOjQ5Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQkM6MTkyOjA6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NCQzoxOTI6MDoxOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxNjowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjowOjE2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxOjE1OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxNToxOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxNTo3OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxNjo2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxNzo2OgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOjE5MjoxNjoxNjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjA6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6MTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6MjotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6NzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6ODotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjE1Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6MTY6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1NjoxNzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjMxOi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6MzI6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzMgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1NjozMzotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOiJBRVMtMjU2LUNCQyI6MjU2OjQ3Oi0xCisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6IkFFUy0yNTYtQ0JDIjoyNTY6NDg6LTEKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoiQUVTLTI1Ni1DQkMiOjI1Njo0OTotMQorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0JDOjI1NjowOjA6CisKK0FFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTowOgorCitBRVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6MjU2OjA6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTY6MDoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MDoxNjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MToxNToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTU6MToKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTU6NzoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTY6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTc6NjoKKworQUVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NCQzoyNTY6MTY6MTY6CisKK0FFUyBEZWNyeXB0IHRlc3QgdmVjdG9yICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfUEFERElOR19QS0NTNzoiZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjIzZjcxMDg0MmI5YmI5YzMyZjI2NjQ4Yzc4NjgwN2NhIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitBRVMgRGVjcnlwdCB0ZXN0IHZlY3RvciAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6ImZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyM2Y3MTA4NDJiOWJiOWMzMmYyNjY0OGM3ODY4MDdjYSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjowOjAKKworQUVTIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcwN2IxZGJiMGZmYTQwZWY3ZDk1ZGVmNDIxMjMzZmFlIjoiZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjA6MAorCitBRVMgRGVjcnlwdCB0ZXN0IHZlY3RvciAjMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ5YWY2YjM3MjEzNWFjZWYxMDEzMmU1NDhmMjE3YjE3IjoiZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjA6MAorCitBRVMgRGVjcnlwdCB0ZXN0IHZlY3RvciAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0ZCMTI4Oi0xOiJmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMTExNGJjMjAyODAwOWI5MjNmMGIwMTkxNWNlNWU3YzQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6MDowOgorCitBRVMgRGVjcnlwdCB0ZXN0IHZlY3RvciAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0ZCMTI4Oi0xOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYwMTM2NzAzMzc0ZjY0ZTg2MGI0OGNlMzFmOTMwNzE2IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjA6MAorCitBRVMgRGVjcnlwdCB0ZXN0IHZlY3RvciAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0ZCMTI4Oi0xOiJmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiZTY2Y2ZlYTJmZWNkNmJmMGVjN2I0MzUyYzk5YmNhYSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjowOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImYzNDQ4MWVjM2NjNjI3YmFjZDVkYzNmYjA4ZjI3M2U2IjoiMDMzNjc2M2U5NjZkOTI1OTVhNTY3Y2M5Y2U1MzdmNWUiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk3OThjNDY0MGJhZDc1YzdjMzIyN2RiOTEwMTc0ZTcyIjoiYTlhMTYzMWJmNDk5Njk1NGViYzA5Mzk1N2IyMzQ1ODkiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijk2YWI1YzJmZjYxMmQ5ZGZhYWU4YzMxZjMwYzQyMTY4IjoiZmY0ZjgzOTFhNmE0MGNhNWIyNWQyM2JlZGQ0NGE1OTciOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNzJhMWRhNzcwZjVkN2FjNGM5ZWY5NGQ4MjJhZmZkOTciOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTcwMDE0ZDYzNGUyYjc2NTA3NzdlOGU4NGQwM2NjZDgiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZjE3ZTc5YWVkMGRiN2UyNzllOTU1YjVmNDkzODc1YTciOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiN2I5MDc4NTEyNTUwNWZhZDU5YjEzYzE4NmRkNjZjZTMiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGI1MjdhNmFlYmRhZWM5ZWFlZjhlZGEyY2I3NzgzZTUiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDNmZGFmNTNlYmJjOTg4MGMyMjg2MTdkNmE5YjU0OGIiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcwYzQ2YmIzMDY5MmJlNjU3ZjdlYWE5M2ViYWQ5ODk3IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzMjM5OTRjZmI5ZGEyODVhNWQ5NjQyZTE3NTliMjI0YSI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWRiZjU3ODc3YjdiMTczODVjODVkMGI1NDg1MWUzNzEiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMCI6IjNhNGQzNTRmMDJiYjVhNWU0N2QzOTY2Njg2N2YyNDZhIjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAiOiJkNDUxYjhkNmUxZTFhMGViYjE1NWZiYmY2ZTdiN2RjMyI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwIjoiNjg5OGQ0ZjQyZmE3YmE2YTEwYWMwNWU4N2I5ZjIwODAiOjAKKworQUVTLTEyOC1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMCI6IjA4MmViOGJlMzVmNDQyZmI1MjY2OGUxNmE1OTFkMWQ2IjowCisKK0FFUy0xMjgtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzE3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAiOiJlNjU2ZjllY2Y1ZmUyN2VjM2U0YTczZDAwYzI4MmZiMyI6MAorCitBRVMtMTI4LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwIjoiMmNhODIwOWQ2MzI3NGNkOWEyOWJiNzRiY2Q3NzY4M2EiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRiNGYxYWE1MzA5NjdkNjczMmNlNDcxNWViMGVlMjRiIjoiZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE4MTczODI1MjYyMWRkMTgwYTM0ZjM0NTViNGJhYTJmIjoiZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc3ZTJiNTA4ZGI3ZmQ4OTIzNGNhZjc5MzllZTU2MjFhIjoiZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRjNDNiZTQwYmUwZTUzNzEyZjdlMmJmNWNhNzA3MjA5IjoiNmExMThhODc0NTE5ZTY0ZTk5NjM3OThhNTAzZjFkMzUiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjkyYmVlZGFiMTg5NWE5NGZhYTY5YjYzMmU1Y2M0N2NlIjoiY2I5ZmNlZWM4MTI4NmNhM2U5ODliZDk3OWIwY2IyODQiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQ1OTI2NGY0Nzk4ZjZhNzhiYWNiODljMTVlZDNkNjAxIjoiYjI2YWViMTg3NGU0N2NhODM1OGZmMjIzNzhmMDkxNDQiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiJiNjk0MThhODUzMzIyNDBkYzgyNDkyMzUzOTU2YWUwYyI6ImEzMDNkOTQwZGVkOGYwYmFmZjZmNzU0MTRjYWM1MjQzIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiI3MWI1YzA4YTE5OTNlMTM2MmU0ZDBjZTliMjJiNzhkNSI6ImMyZGFiZDExN2Y4YTNlY2FiZmJiMTFkMTIxOTRkOWQwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6TUJFRFRMU19ERUNSWVBUOiJlMjM0Y2RjYTI2MDZiODFmMjk0MDhkNWY2ZGEyMTIwNiI6ImZmZjYwYTQ3NDAwODZiM2I5YzU2MTk1Yjk4ZDkxYTdiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTEyOC1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOk1CRURUTFNfREVDUllQVDoiZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAiOiI4NGJlMTllMDUzNjM1ZjA5ZjI2NjVlN2JhZTg1YjQyZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xMjgtRUNCIERlY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwIjoiMzJjZDY1Mjg0MjkyNmFlYTRhYTYxMzdiYjJiZTJiNWUiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZjgwMDAwMDAwMDAwIjoiMTU2ZjA3NzY3YTg1YTQzMTIzMjFmNjM5NjgzMzhhMDEiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMCI6IjE1ZWVjOWViZjQyYjljYTc2ODk3ZDJjZDZjNWExMmUyIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAiOiJkYjBkM2E2ZmRjYzEzZjkxNWUyYjMwMmNlZWI3MGZkOCI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjUxNzE5NzgzZDMxODVhNTM1YmQ3NWFkYzY1MDcxY2UxIjoiNGYzNTQ1OTJmZjdjODg0N2QyZDA4NzBjYTk0ODFiN2MiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIyNmFhNDlkY2ZlNzYyOWE4OTAxYTY5YTk5MTRlNmRmZCI6ImQ1ZTA4YmY5YTE4MmU4NTdjZjQwYjNhMzZlZTI0OGNjIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOTQxYTQ3NzMwNTgyMjRlMWVmNjZkMTBlMGE2ZWU3ODIiOiIwNjdjZDlkMzc0OTIwNzc5MTg0MTU2MjUwN2ZhOTYyNiI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImQyOTI2NTI3ZTBhYTlmMzdiNDVlMmVjMmFkZTU4NTNlZjgwNzU3NjEwNGM3YWNlMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGQ2MTllMWNmMjA0NDQ2MTEyZTBhZjJiOWFmYThmOGMiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiI5ODIyMTVmNGUxNzNkZmEwZmNmZmU1ZDNkYTQxYzQ4MTJjN2JjYzhlZDM1NDBmOTMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImQ0ZjBhYWUxM2M4ZmU5MzM5ZmJmOWU2OWVkMGFkNzRkIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiOThjNmI4ZTAxZTM3OWZiZDE0ZTYxYWY2YWY4OTE1OTY1ODM1NjVmMmEyN2Q1OWU5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIxOWM4MGVjNGE2ZGViN2U1ZWQxMDMzZGRhOTMzNDk4ZiI6MAorCitBRVMtMTkyLUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhkZDI3NGJkMGYxYjU4YWUzNDVkOWU3MjMzZjliOGYzIjowCisKK0FFUy0xOTItRUNCIEVuY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOWQ2YmRjOGY0Y2U1ZmViMGYzYmVkMmU0YjlhOWJiMGIiOjAKKworQUVTLTE5Mi1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfRU5DUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZDU1NDhiY2YzZjQyNTY1ZjdlZmE5NDU2MjUyOGQ0NiI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMCI6ImJiMjg1MmM4OTFjNTk0N2QyZWQ0NDAzMmM0MjFiODVmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAiOiIxYjlmNWZiZDVlOGE0MjY0YzBhODViODA0MDlhZmE1ZSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAwIjoiMzBkYWI4MDlmODVhOTE3ZmU5MjQ3MzNmNDI0YWM1ODkiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjYxMjU3MTM0YTUxOGEwZDU3ZDlkMjQ0ZDQ1ZjY0OThjYmMzMmYyYmFmYzUyMmQ3OSI6ImNmZTRkNzQwMDI2OTZjY2Y3ZDg3YjE0YTJmOWNhZmM5IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiJiMGFiMGE2YTgxOGJhZWYyZDExZmEzM2VhYzk0NzI4NGZiN2Q3NDhjZmI3NWU1NzAiOiJkMmVhZmQ4NmY2M2IxMDliOTFmNWRiYjNhM2ZiN2UxMyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzYKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiZWUwNTNhYTAxMWM4YjQyOGNkY2MzNjM2MzEzYzU0ZDZhMDNjYWMwMWM3MTU3OWQ2IjoiOWI5ZmRkMWM1OTc1NjU1ZjUzOTk5OGIzMDZhMzI0YWYiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjI3NWNmYzA0MTNkOGNjYjcwNTEzYzM4NTliMWQwZjcyIjoiMWIwNzdhNmFmNGI3Zjk4MjI5ZGU3ODZkNzUxNmI2MzkiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJjOWI4MTM1ZmYxYjVhZGM0MTNkZmQwNTNiMjFiZDk2ZCI6IjljMmQ4ODQyZTVmNDhmNTc2NDgyMDVkMzlhMjM5YWYxIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNGEzNjUwYzMzNzFjZTJlYjM1ZTM4OWExNzE0Mjc0NDAiOiJiZmY1MjUxMDA5NWY1MThlY2NhNjBhZjQyMDU0NDRiYiI6MAorCitBRVMtMTkyLUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiMjA5OTc5NWU4OGNjMTU4ZmQ3NWVhMTMzZDdlN2ZiZSI6ImZmZmZmZmZmZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwIjowCisKK0FFUy0xOTItRUNCIERlY3J5cHQgTklTVCBLQVQgIzExCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImE2Y2FlNDZmYjZmYWRmZTdhMmMzMDJhMzQyNDI4MTdiIjoiZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAiOjAKKworQUVTLTE5Mi1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDI2YTcwMjRkNmE5MDJlMGIzZmZjY2JhYTkxMGNjM2YiOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImMxY2MzNThiNDQ5OTA5YTE5NDM2Y2ZiYjNmODUyZWY4YmNiNWVkMTJhYzcwNTgzMjVmNTZlNjA5OWFhYjFhMWMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM1MjA2NTI3MjE2OWFiZjk4NTY4NDM5MjdkMDY3NGZkIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiOTg0Y2E3NWY0ZWU4ZDcwNmY0NmMyZDk4YzBiZjRhNDVmNWIwMGQ3OTFjMmRmZWIxOTFiNWVkOGU0MjBmZDYyNyI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiNDMwNzQ1NmE5ZTY3ODEzYjQ1MmUxNWZhOGZmZmUzOTgiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiJiNDNkMDhhNDQ3YWM4NjA5YmFhZGFlNGZmMTI5MThiOWY2OGZjMTY1M2YxMjY5MjIyZjEyMzk4MWRlZDdhOTJmIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NjYzNDQ2NjA3MzU0OTg5NDc3YTVjNmYwZjAwN2VmNCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwYjI0YWYzNjE5M2NlNDY2NWYyODI1ZDdiNDc0OWM5OCI6ImE5ZmY3NWJkN2NmNjYxM2QzNzMxYzc3YzNiNmQwYzA0IjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjoiNjIzYTUyZmNlYTVkNDQzZTQ4ZDkxODFhYjMyYzc0MjEiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOiIzOGYyYzdhZTEwNjEyNDE1ZDI3Y2ExOTBkMjdkYThiNCI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0VOQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM2YWZmMGVmN2JmMzI4MDc3MmNmNGNhYzgwYTBkMmIyIjowCisKK0FFUy0yNTYtRUNCIEVuY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWY4ZWVkZWEwZjYyYTE0MDZkNThjZmMzZWNlYTcyY2YiOjAKKworQUVTLTI1Ni1FQ0IgRW5jcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZmZmZmZmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJhYmY0MTU0YTMzNzVhMWQzZTZiMWQ0NTQ0MzhmOTVhNiI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0NWQwODljMzZkNWM1YTRlZmM2ODllM2IwZGUxMGRkNSI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJiNGRhNWRmNGJlY2I1NDYyZTAzYTBlZDAwZDI5NTYyOSI6MAorCitBRVMtMjU2LUVDQiBFbmNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkY2Y0ZTEyOTEzNmMxYTRiN2EwZjM4OTM1Y2MzNGIyYiI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMDAiOiJlZGY2MWFlMzYyZTg4MmRkYzAxNjc0NzRhN2E3N2YzYSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwMDAwMCI6IjYxNjhiMDBiYTc4NTllMDk3MGVjZmQ3NTdlZmVjZjdjIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMDAwIjoiZDE0MTU0NDc4NjYyMzBkMjhiYjFlYTE4YTRjZGZkMDIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM0CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImY4YmU5YmE2MTVjNWE5NTJjYWJiY2EyNGY2OGY4NTkzMDM5NjI0ZDUyNGM4MTZhY2RhMmM5MTgzYmQ5MTdjYjkiOiJhMzk0NGI5NWNhMGI1MjA0MzU4NGVmMDIxNTE5MjZhOCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiNzk3ZjhiM2QxNzZkYWM1YjdlMzRhMmQ1MzljNGVmMzY3YTE2Zjg2MzVmNjI2NDczNzU5MWM1YzA3YmY1N2EzZSI6ImE3NDI4OWZlNzNhNGMxMjNjYTE4OWVhMWUxYjQ5YWQ1IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjNgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiI2ODM4ZDQwY2FmOTI3NzQ5YzEzZjAzMjlkMzMxZjQ0OGUyMDJjNzNlZjUyYzVmNzNhMzdjYTYzNWQ0YzQ3NzA3IjoiYjkxZDRlYTQ0ODg2NDRiNTZjZjA4MTJmYTdmY2Y1ZmMiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICM3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI2MjNhNTJmY2VhNWQ0NDNlNDhkOTE4MWFiMzJjNzQyMSI6Ijc2MWMxZmU0MWExOGFjZjIwZDI0MTY1MDYxMWQ5MGYxIjowCisKK0FFUy0yNTYtRUNCIERlY3J5cHQgTklTVCBLQVQgIzgKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfRUNCOk1CRURUTFNfREVDUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjM4ZjJjN2FlMTA2MTI0MTVkMjdjYTE5MGQyN2RhOGI0IjoiOGE1NjA3NjlkNjA1ODY4YWQ4MGQ4MTliZGJhMDM3NzEiOjAKKworQUVTLTI1Ni1FQ0IgRGVjcnlwdCBOSVNUIEtBVCAjOQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMWJjNzA0ZjFiY2UxMzVjZWI4MTAzNDFiMjE2ZDdhYmUiOiI5MWZiZWYyZDE1YTk3ODE2MDYwYmVlMWZlYWE0OWFmZSI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiZGRjNmJmNzkwYzE1NzYwZDhkOWFlYjZmOWE3NWZkNGUiOiI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMGE2YmRjNmQ0YzFlNjI4MDMwMWZkOGU5N2RkYmU2MDEiOiJjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitBRVMtMjU2LUVDQiBEZWNyeXB0IE5JU1QgS0FUICMxMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOWI4MGVlZmI3ZWJlMmQyYjE2MjQ3YWEwZWZjNzJmNWQiOiJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6MAorCitDaXBoZXIgQ29ybmVyIENhc2UgYmVoYXZpb3VycworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfc3BlY2lhbF9iZWhhdmlvdXJzOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hcmM0LmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmFyYzQuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQyMzExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5hcmM0LmRhdGEKQEAgLTAsMCArMSwxMDMgQEAKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODowOi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjE6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjI6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4Ojc6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4Ojg6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4Ojk6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODoxNTotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjE2Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6MTc6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODozMTotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjMyOi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6MzM6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoiQVJDNC0xMjgiOjEyODo0NzotMQorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OiJBUkM0LTEyOCI6MTI4OjQ4Oi0xCisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6IkFSQzQtMTI4IjoxMjg6NDk6LTEKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BUkM0X0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BUkM0XzEyODoxMjg6MDowOgorCitBUkM0IEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE6MDoKKworQVJDNCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FSQzRfMTI4OjEyODowOjE6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE2OjA6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjA6MTY6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE6MTU6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE1OjE6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE1Ojc6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE2OjY6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE3OjY6CisKK0FSQzQgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQVJDNF8xMjg6MTI4OjE2OjE2OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5ibG93ZmlzaC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5ibG93ZmlzaC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTg0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmJsb3dmaXNoLmRhdGEKQEAgLTAsMCArMSw2MDMgQEAKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODowOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjI6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojg6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojk6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE2Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMyOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzM6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0NzotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ4Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDk6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE1Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMxOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZSB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo4Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTU6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzE6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MjpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MTU6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6MzE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6NDc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6IkJMT1dGSVNILUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19aRVJPUworCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0OTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19OT05FCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoiQkxPV0ZJU0gtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfTk9ORQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfTk9ORQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODozMjpNQkVEVExTX1BBRERJTkdfTk9ORQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfTk9ORQorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyAxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoxOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIFRyeSBlbmNyeXB0aW5nIDIgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjI6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgNyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6NzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyA5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo5Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIFRyeSBlbmNyeXB0aW5nIDE1IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODoxNTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyAxNyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MTc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgMzEgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjMxOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIFRyeSBlbmNyeXB0aW5nIDMzIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODozMzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitCTE9XRklTSCBUcnkgZW5jcnlwdGluZyA0NyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6NDc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQkxPV0ZJU0ggVHJ5IGVuY3J5cHRpbmcgNDkgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjQ5Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MDowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MTowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MDoxOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjE2OjA6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MDoxNjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOjEyODoxOjE1OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjE1OjE6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MTU6NzoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOjEyODoxNjo2OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6MTI4OjE3OjY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NCQzoxMjg6MTY6MTY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjA6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODoxOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjI6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6NzotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODo4Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4Ojk6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjE1Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODoxNjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6MTc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjMxOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODozMjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6MzM6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTI4OjQ3Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoiQkxPV0ZJU0gtQ0ZCNjQiOjEyODo0ODotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6IkJMT1dGSVNILUNGQjY0IjoxMjg6NDk6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODowOjA6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODoxOjA6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODowOjE6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MTY6MDoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODowOjE2OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6MTI4OjE6MTU6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MTU6MToKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODoxNTo3OgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0ZCNjQ6MTI4OjE2OjY6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDoxMjg6MTc6NjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OjEyODoxNjoxNjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODowOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODoxOi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6MjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6IkJMT1dGSVNILUNUUiI6MTI4Ojc6LTEKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODo4Oi0xCisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxMjg6OTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODoxNTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODoxNjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODoxNzotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODozMTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODozMjotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODozMzotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODo0NzotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODo0ODotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOiJCTE9XRklTSC1DVFIiOjEyODo0OTotMQorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOjEyODowOjA6CisKK0JMT1dGSVNIIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTowOgorCitCTE9XRklTSCBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DVFI6MTI4OjA6MToKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTY6MDoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MDoxNjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MToxNToKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTU6MToKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTU6NzoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTY6NjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTc6NjoKKworQkxPV0ZJU0ggRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoxMjg6MTY6MTY6CisKK0JMT1dGSVNIIENCQyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMsIDE5Mi1iaXRzIGtleQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ0JDOiJCTE9XRklTSC1DQkMiOjE5Mjo3Oi0xCisKK0JMT1dGSVNIIENUUiBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMsIDE5Mi1iaXRzIGtleQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NUUjoiQkxPV0ZJU0gtQ1RSIjoxOTI6NzotMQorCitCTE9XRklTSCBDRkI2NCBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMsIDE5Mi1iaXRzIGtleQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0NGQjY0OiJCTE9XRklTSC1DRkI2NCI6MTkyOjc6LTEKKworQkxPV0ZJU0ggRUNCIEVuY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfRU5DUllQVDoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNGVmOTk3NDU2MTk4ZGQ3OCI6MAorCitCTE9XRklTSCBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoU1NMZWF5KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiI6ImZmZmZmZmZmZmZmZmZmZmYiOiI1MTg2NmZkNWI4NWVjYjhhIjowCisKK0JMT1dGSVNIIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMzCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQjpNQkVEVExTX0VOQ1JZUFQ6ImZlZGNiYTk4NzY1NDMyMTBmZWRjYmE5ODc2NTQzMjEwIjoiMDEyMzQ1Njc4OWFiY2RlZiI6IjBhY2VhYjBmYzZhMGEyOGQiOjAKKworQkxPV0ZJU0ggRUNCIEVuY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzMsIDY0LWJpdCBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfRU5DUllQVDoiZmVkY2JhOTg3NjU0MzIxMCI6IjAxMjM0NTY3ODlhYmNkZWYiOiIwYWNlYWIwZmM2YTBhMjhkIjowCisKK0JMT1dGSVNIIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMzLCAxOTItYml0IGtleQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19FTkNSWVBUOiJmZWRjYmE5ODc2NTQzMjEwZmVkY2JhOTg3NjU0MzIxMGZlZGNiYTk4NzY1NDMyMTAiOiIwMTIzNDU2Nzg5YWJjZGVmIjoiMGFjZWFiMGZjNmEwYTI4ZCI6MAorCitCTE9XRklTSCBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoU1NMZWF5KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjRlZjk5NzQ1NjE5OGRkNzgiOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0JMT1dGSVNIIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChTU0xlYXkpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQjpNQkVEVExTX0RFQ1JZUFQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIjoiNTE4NjZmZDViODVlY2I4YSI6ImZmZmZmZmZmZmZmZmZmZmYiOjAKKworQkxPV0ZJU0ggRUNCIERlY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfRUNCOk1CRURUTFNfREVDUllQVDoiMzg0OTY3NGMyNjAyMzE5ZTM4NDk2NzRjMjYwMjMxOWUiOiJhMjVlNzg1NmNmMjY1MWViIjoiNTE0NTRiNTgyZGRmNDQwYSI6MAorCitCTE9XRklTSCBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoU1NMZWF5KSAjMywgNjQtYml0IGtleQorZGVwZW5kc19vbjpNQkVEVExTX0JMT1dGSVNIX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9FQ0I6TUJFRFRMU19ERUNSWVBUOiIzODQ5Njc0YzI2MDIzMTllIjoiYTI1ZTc4NTZjZjI2NTFlYiI6IjUxNDU0YjU4MmRkZjQ0MGEiOjAKKworQkxPV0ZJU0ggRUNCIERlY3J5cHQgdGVzdCB2ZWN0b3IgKFNTTGVheSkgIzMsIDE5Mi1iaXQga2V5CitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0JMT1dGSVNIX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IjM4NDk2NzRjMjYwMjMxOWUzODQ5Njc0YzI2MDIzMTllMzg0OTY3NGMyNjAyMzE5ZSI6ImEyNWU3ODU2Y2YyNjUxZWIiOiI1MTQ1NGI1ODJkZGY0NDBhIjowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNhbWVsbGlhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5YjcwZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuY2FtZWxsaWEuZGF0YQpAQCAtMCwwICsxLDc1OSBAQAorQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MDotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojg6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6OTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTU6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE2Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0OTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODowOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6ODpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTY6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMTpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0NzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDg6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjI6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo4Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojk6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE1Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoxNjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MTc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMxOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODozMjpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzM6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ3Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NDk6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjA6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODoyOk1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6NzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4Ojg6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo5Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE1Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMxOk1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMyOk1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjMzOk1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ4Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPUworCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MDpNQkVEVExTX1BBRERJTkdfTk9ORQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoiQ0FNRUxMSUEtMTI4LUNCQyI6MTI4OjE2Ok1CRURUTFNfUEFERElOR19OT05FCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOiJDQU1FTExJQS0xMjgtQ0JDIjoxMjg6MzI6TUJFRFRMU19QQURESU5HX05PTkUKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6IkNBTUVMTElBLTEyOC1DQkMiOjEyODo0ODpNQkVEVExTX1BBRERJTkdfTk9ORQorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyAxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyAyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MjpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyA3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6NzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyA4IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6ODpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyA5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6OTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyAxNSBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjE1Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0NBTUVMTElBIFRyeSBlbmNyeXB0aW5nIDE3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6MTc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgMzEgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODozMTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBUcnkgZW5jcnlwdGluZyAzMyBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19QQURESU5HX05PTkU6MTI4OjMzOk1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0NBTUVMTElBIFRyeSBlbmNyeXB0aW5nIDQ3IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORToxMjg6NDc6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworQ0FNRUxMSUEgVHJ5IGVuY3J5cHRpbmcgNDkgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjEyODo0OTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOjEyODowOjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6MTI4OjA6MToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTY6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MDoxNjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MToxNToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyA0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTU6MToKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTU6NzoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTY6NjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTc6NjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzoxMjg6MTY6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODowOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjI6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4Ojc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4Ojg6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4Ojk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODoxNTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjE2Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6MTc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODozMTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjMyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6MzM6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6IkNBTUVMTElBLTEyOC1DRkIxMjgiOjEyODo0NzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoiQ0FNRUxMSUEtMTI4LUNGQjEyOCI6MTI4OjQ4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OiJDQU1FTExJQS0xMjgtQ0ZCMTI4IjoxMjg6NDk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjA6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MTowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODowOjE6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODoxNjowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MDoxNjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjE6MTU6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODoxNToxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MTU6NzoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6MTI4OjE2OjY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0ZCMTI4OjEyODoxNzo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NGQjEyODoxMjg6MTY6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODowOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjE6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjI6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4Ojc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4Ojg6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4Ojk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODoxNTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjE2Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6MTc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODozMTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjMyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6MzM6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6IkNBTUVMTElBLTEyOC1DVFIiOjEyODo0NzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoiQ0FNRUxMSUEtMTI4LUNUUiI6MTI4OjQ4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOiJDQU1FTExJQS0xMjgtQ1RSIjoxMjg6NDk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjA6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MTowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODowOjE6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODoxNjowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MDoxNjoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjE6MTU6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODoxNToxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MTU6NzoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6MTI4OjE2OjY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ1RSOjEyODoxNzo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NUUjoxMjg6MTY6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjA6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjoxOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjI6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6NzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5Mjo4Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjE1Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjoxNjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6MTc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjMxOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5MjozMjotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6MzM6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoiQ0FNRUxMSUEtMTkyLUNCQyI6MTkyOjQ3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6IkNBTUVMTElBLTE5Mi1DQkMiOjE5Mjo0ODotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOiJDQU1FTExJQS0xOTItQ0JDIjoxOTI6NDk6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0NCQzoxOTI6MDowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfQ0JDOjE5MjowOjE6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE2OjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjA6MTY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE6MTU6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE1OjE6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE1Ojc6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE2OjY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE3OjY6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9DQkM6MTkyOjE2OjE2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1NjowOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1NjoyOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2Ojc6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6ODotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1Njo5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1NjoxNTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MTY6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjE3Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1NjozMTotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6MzI6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjMzOi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6IkNBTUVMTElBLTI1Ni1DQkMiOjI1Njo0NzotMQorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOiJDQU1FTExJQS0yNTYtQ0JDIjoyNTY6NDg6LTEKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoiQ0FNRUxMSUEtMjU2LUNCQyI6MjU2OjQ5Oi0xCisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9DQkM6MjU2OjA6MDoKKworQ0FNRUxMSUEgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxOjA6CisKK0NBTUVMTElBIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0NCQzoyNTY6MDoxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxNjowOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjowOjE2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxOjE1OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxNToxOgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxNTo3OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxNjo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxNzo2OgorCitDQU1FTExJQSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDOjI1NjoxNjoxNjoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuY2NtLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNjbS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDQwOTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmNjbS5kYXRhCkBAIC0wLDAgKzEsNDgwIEBACitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNGFlNzAxMTAzYzYzZGVjYTViNWEzOTM5ZDdkMDU5OTIiOiI1YThhYTQ4NWMzMTZlOSI6IiI6IiI6IjAyMjA5ZjU1IjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNGFlNzAxMTAzYzYzZGVjYTViNWEzOTM5ZDdkMDU5OTIiOiIzNzk2Y2Y1MWI4NzI2NiI6IiI6IiI6IjlhMDRjMjQxIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMyAoUD0wLCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiMyI6IjVhOGFhNDg1YzMxNmU5IjoiIjoiIjoiNzVkNTgyZGI0M2NlOWIxM2FiNGI2ZjdmMTQzNDEzMzAiOiIiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzQgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjMiOiIzNzk2Y2Y1MWI4NzI2NiI6IiI6IiI6IjNhNjVlMDNhZjM3YjgxZDA1YWNjN2VjMWJjMzlkZWIwIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNSAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiMyI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoiIjoiOTAxNTZmM2YiOiIiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzYgKFA9MCwgTj0xMywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjMiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6IiI6Ijg4OTA5MDE2IjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNyAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6IiI6ImZiMDRkYzVhNDRjNmJiMDAwZjI0NDBmNTE1NDM2NGI0IjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM4IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZCI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyIjoiIjoiIjoiNTQ0NzA3NWJmNDJhNTliOTFmMDgwNjQ3MzhiMDE1YWIiOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM5IChQPTI0LCBOPTcsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjE5ZWJmZGUyZDU0NjhiYTBhMzAzMWJkZTYyOWIxMWZkIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOiJhOTBlOGVhNDQwODVjZWQ3OTFiMmZkYjdmZDQ0YjVjZjBiZDdkMjc3MTgwMjliYjciOiIwM2UxZmE2YiI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMiIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTAgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMTllYmZkZTJkNTQ2OGJhMGEzMDMxYmRlNjI5YjExZmQiOiIzMWY4ZmEyNTgyN2Q0OCI6IiI6IjUwYWFmZTA1NzhjMTE1YzRhOGUxMjZmZjdiM2NjYjY0ZGNlOGNjYWE4Y2VkYTY5ZiI6IjIzZTVkODFjIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTEgKFA9MjQsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzIjoiNWE4YWE0ODVjMzE2ZTkiOiIiOiIyNGFiOWVlYjBlNTUwOGNhZTgwMDc0ZjEwNzBlZTE4OGE2MzcxNzE4NjA4ODFmMWYiOiIyZDlhM2ZiYzIxMDU5NWI3YjhiMWI0MTUyMzExMWE4ZSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMiIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTIgKFA9MjQsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzIjoiMzFmOGZhMjU4MjdkNDgiOiIiOiI3ZWJmZGE2ZmE1ZGExZGJmZmQ4MmRjMjliODc1Nzk4ZmJjZWY4YmEwMDg0ZmJkMjQiOiI2M2FmNzQ3Y2M4OGEwMDFmYTk0ZTA2MDI5MGYyMDljNCI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEzIChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MyI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoiNGE1NTAxMzRmOTQ0NTU5NzllYzRiZjg5YWQyYmQ4MGQyNWE3N2FlOTRlNDU2MTM0IjoiYTNlMTM4YjkiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTciCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE0IChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MyI6IjQ5MDA0OTEyZmRkNzI2OTI3OWIxZjA2YTg5IjoiIjoiMTE4ZWM1M2RkMWJmYmU1MmQ1YjlmZTVkZmViZWNmMmVlNjc0ZWM5ODNlYWRhNjU0IjoiMDkxYTVhZTkiOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNSAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5IjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiIiOiI0YmZlNGUzNTc4NGYwYTY1YjU0NTQ3N2U1ZTJmNGJhZTBlMWU2ZmE3MTdlYWYyY2IiOiI2YTlhOTcwYjliZWIyYWMxYmQ0ZmQ2MjE2OGY4Mzc4YSI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5NyIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTYgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOSI6IjQ5MDA0OTEyZmRkNzI2OTI3OWIxZjA2YTg5IjoiIjoiMGM1NmE1MDNhYTJjMTJlODc0NTBkNDVhN2I3MTRkYjk4MGZkMzQ4ZjMyN2MwMDY1IjoiYTY1NjY2MTQ0OTk0YmFkMGM4MTk1YmNiNGFkZTEzMzciOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNyAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOSI6IjVhOGFhNDg1YzMxNmU5IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyZWMyMmIxYTI2OGY4OGUyYyI6IiI6Ijc4MmU0MzE4IjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxOCAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOSI6ImEyNjU0ODBjYTg4ZDVmIjoiYTIyNDhhODgyZWNiZjg1MGRhZjkxOTMzYTM4OWU3OGU4MTYyM2QyMzNkZmQ0N2JmODMyMTM2MWEzOGYxMzhmZSI6IiI6ImEwNGYyNzBhIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTkgKFA9MCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiIjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiIjoiNDFiNDc2MDEzZjQ1ZTRhNzgxZjI1M2E2ZjNiMWU1MzAiOiIiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIwIChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YiI6ImEyNjU0ODBjYTg4ZDVmIjoiYTIyNDhhODgyZWNiZjg1MGRhZjkxOTMzYTM4OWU3OGU4MTYyM2QyMzNkZmQ0N2JmODMyMTM2MWEzOGYxMzhmZSI6IiI6ImY5ZjAxOGZjZDEyNTgyMjYxNjA4M2ZmZmViYzRjOGU2IjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjEgKFA9MCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiIjoiOWY2OWYyNGYiOiIiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIyIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YiI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2IjoiZjYxMDc2OTZlZGIzMzJiMmVhMDU5ZDg4NjBmZWUyNmJlNDJlNWUxMmUxYTRmNzlhOGQwZWFmY2UxYjIyNzhhNyI6IiI6ImUxN2FmYWE0IjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjMgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3YTdlZTY0MTAxODRjNzk4MiI6IiI6IjE4NTlhYzM2YTQwYTZiMjhiMzQyNjYyNTM2Mjc3OTdhIjoiIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyNCAoUD0wLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxIjoiODczOWI0YmVhMWEwOTlmZTU0NzQ5OWNiYzYiOiJmNjEwNzY5NmVkYjMzMmIyZWEwNTlkODg2MGZlZTI2YmU0MmU1ZTEyZTFhNGY3OWE4ZDBlYWZjZTFiMjI3OGE3IjoiIjoiZWRmOGI0NmViNjlhYzAwNDQxMTYwMTlkZWMxODMwNzIiOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyNSAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiZjlmZGNhNGFjNjRmZTdmMDE0ZGUwZjQzMDM5Yzc1NzEiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOiI2YmUzMTg2MGNhMjcxZWY0NDhkZThmOGQ4YjM5MzQ2ZGFmNGI4MWQ3ZTkyZDY1YjMiOiIzOGYxMjVmYSI6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjYgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxIjoiZmRkMmQ2ZjUwM2M5MTUiOiI1YjkyMzk0ZjIxZGRjM2FkNDlkOWIwODgxYjgyOWE1OTM1Y2IzYTRkMjNlMjkyYTYyZmI2NmI1ZTdhYjcwMjBlIjoiNGNjNTdhOTkyN2E2YmM0MDE0NDE4NzBkMzE5M2JmODllYmQxNjNmNWMwMTUwMWM3IjoiMjhhNjZiNjkiOiJGQUlMIgorCitBRVMtMTI4LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyNyAoUD0yNCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQ006ImE3YWE2MzVlYTUxYjBiYjIwYTA5MmJkNTU3M2U3MjhjIjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiYjM1MWFiOTZiMmU0NTUxNTI1NDU1OGQ1MjEyNjczZWU2Yzc3NmQ0MmRiY2EzYjUxIjoiMmNmM2EyMGI3ZmQ3YzQ5ZTZlNzliZWY0NzVjMjkwNmYiOiJhMjY1NDgwY2E4OGQ1ZjUzNmRiMGRjNmFiYzQwZmFmMGQwNWJlN2E5NjY5Nzc3NjgiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI4IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGMiOiJmZGQyZDZmNTAzYzkxNSI6IjViOTIzOTRmMjFkZGMzYWQ0OWQ5YjA4ODFiODI5YTU5MzVjYjNhNGQyM2UyOTJhNjJmYjY2YjVlN2FiNzAyMGUiOiJkZjFhNTI4NWNhYTQxYjRiYjQ3ZjZlNWNlY2ViYTRlODI3MjE4MjhkNjg0MjdhMzAiOiI4MWQxOGNhMTQ5ZDY3NjZiZmFjY2VjODhmMTk0ZWI1YiI6IkZBSUwiCisKK0FFUy0xMjgtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI5IChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGMiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOiI5MzRmODkzODI0ZTg4MGY3NDNkMTk2YjIyZDFmMzQwYTUyNjA4MTU1MDg3YmQyOGEiOiJjMjVlNTMyOSI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzAgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0NNOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4YyI6IjA4MTI3NTdhZDBjYzRkMTdjNGNmZTdhNjQyIjoiZWM2YzQ0YTdlOTRlNTFhM2NhNmRlZTIyOTA5ODM5MTU3NWVjNzIxM2M4NTI2N2ZiZjc0OTJmZGJlZWU2MWIxMCI6ImY0M2JhOWQ4MzRhZDg1ZGZhYjNmMWMwYzI3YzM0NDFmZTRlNDExYTM4YTI2MWE2NSI6IjU5YjNiM2VlIjoiRkFJTCIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzEgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMjY1MTFmYjUxZmNmYTc1Y2I0YjQ0ZGE3NWE2ZTVhMGUiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOiI1MDAzOGI1ZmRkMzY0ZWU3NDdiNzBkMDBiZDM2ODQwZWNlNGVhMTk5OTgxMjMzNzUiOiJjMGE0NThiZmNhZmEzYjI2MDlhZmUwZjgyNWNiZjUwMyI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQUVTLTEyOC1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTToiMjY1MTFmYjUxZmNmYTc1Y2I0YjQ0ZGE3NWE2ZTVhMGUiOiIwODEyNzU3YWQwY2M0ZDE3YzRjZmU3YTY0MiI6ImVjNmM0NGE3ZTk0ZTUxYTNjYTZkZWUyMjkwOTgzOTE1NzVlYzcyMTNjODUyNjdmYmY3NDkyZmRiZWVlNjFiMTAiOiI3OGVkOGZmNmI1YTEyNTVkMGZiZDBhNzE5YTljMjdiMDU5ZmY1ZjgzZDBjNDk2MmMiOiIzOTAwNDJiYThiYjVmNjc5OGRhYjAxYzVhZmFkNzMwNiI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEgKFA9MCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJjOThhZDdmMzhiMmM3ZTk3MGM5Yjk2NWVjODdhMDgyMDgzODQ3MThmNzgyMDZjNmMiOiI1YThhYTQ4NWMzMTZlOSI6IiI6IiI6IjlkNGI3ZjNiIjoiIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiYzk4YWQ3ZjM4YjJjN2U5NzBjOWI5NjVlYzg3YTA4MjA4Mzg0NzE4Zjc4MjA2YzZjIjoiMzc5NmNmNTFiODcyNjYiOiIiOiIiOiI4MDc0NWRlOSI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiNGJiM2M0YTRmODkzYWQ4YzliZGM4MzNjMzI1ZDYyYjNkM2FkMWJjY2Y5MjgyYTY1IjoiNWE4YWE0ODVjMzE2ZTkiOiIiOiIiOiIxNzIyMzAzOGZhOTlkNTM2ODFjYTFiZWFiZTc4ZDFiNCI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNCAoUD0wLCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiM2QzYWQxYmNjZjkyODJhNjUiOiIzNzk2Y2Y1MWI4NzI2NiI6IiI6IiI6ImQwZTFlZWVmNGQyYTI2NDUzNmJiMWMyYzFiZGU3YzM1IjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNSAoUD0wLCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI0YmIzYzRhNGY4OTNhZDhjOWJkYzgzM2MzMjVkNjJiM2QzYWQxYmNjZjkyODJhNjUiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6IiI6ImZlNjllZDg0IjoiIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICM2IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjRiYjNjNGE0Zjg5M2FkOGM5YmRjODMzYzMyNWQ2MmIzZDNhZDFiY2NmOTI4MmE2NSI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyIjoiIjoiIjoiZGI3ZmZjODIiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICM3IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZDQwOTRhZmNiMjA1MzkzZmEiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6IiI6IjBjNjZhOGU1NDdlZDRmOGMyYzlhOWExZWI1ZDQ1NWI5IjoiIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICM4IChQPTAsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZDQwOTRhZmNiMjA1MzkzZmEiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MiI6IiI6IiI6IjM4NzU3YjNhNjFhNGRjOTdjYTNhYjg4YmYxMjQwNjk1IjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjOSAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZDQwOTRhZmNiMjA1MzkzZmEiOiI1YThhYTQ4NWMzMTZlOSI6IiI6IjQxMTk4NmQwNGQ2NDYzMTAwYmZmMDNmN2QwYmRlN2VhMmMzNDg4Nzg0Mzc4MTM4YyI6ImRkYzkzYTU0IjoiMzc5NmNmNTFiODcyNjY1MmE0MjA0NzMzYjhmYmIwNDdjZjAwZmI5MWE5ODM3ZTIyIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxMCAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOWViZmRlMmQ1NDY4YmEwYTMwMzFiZGU2MjliMTFmZDQwOTRhZmNiMjA1MzkzZmEiOiIzMWY4ZmEyNTgyN2Q0OCI6IiI6IjMyYjY0OWFiNTYxNjJlNTVkNDE0OGExMjkyZDZhMjI1YTk4OGViMTMwODI5ODI3MyI6ImI2ODg5MDM2IjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTEgKFA9MjQsIE49NywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzMjQ1NzZiOTk4NDRmNzVlMSI6IjVhOGFhNDg1YzMxNmU5IjoiIjoiY2JhNGI0YWViODVmMDQ5MmZkOGQ5MDVjNGE2ZDgyMzMxMzk4MzMzNzNlZjE4OGE4IjoiYzVhNWViZWNmN2FjODYwN2ZlNDEyMTg5ZTgzZDlkMjAiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjIiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEyIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MzI0NTc2Yjk5ODQ0Zjc1ZTEiOiIzMWY4ZmEyNTgyN2Q0OCI6IiI6ImNhNjI3MTM3MjhiNWM5ZDY1MjUwNGIwYWU4ZmQ0ZmVlNWQyOTdlZTZhOGQxOWNiNiI6ImU2OTlmMTVmMTRkMzRkY2FmOWJhOGVkNGI4NzdjOTdkIjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTMgKFA9MjQsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjE5N2FmYjAyZmZiZDhmNjk5ZGFjYWU4NzA5NGQ1MjQzMjQ1NzZiOTk4NDRmNzVlMSI6IjVhOGFhNDg1YzMxNmU5NDAzYWZmODU5ZmJiIjoiIjoiMDQyNjUzYzY3NGVmMmE5MGY3ZmIxMWQzMDg0OGU1MzBhZTU5NDc4ZjEwNTE2MzNhIjoiMzRmYWQyNzciOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTciCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE0IChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIxOTdhZmIwMmZmYmQ4ZjY5OWRhY2FlODcwOTRkNTI0MzI0NTc2Yjk5ODQ0Zjc1ZTEiOiI0OTAwNDkxMmZkZDcyNjkyNzliMWYwNmE4OSI6IiI6IjE5MDJkOTc2OWE3YmEzZDMyNjhlMTI1NzM5NWM4YzJlNWY5OGVlZjI5NWRjYmZhNSI6ImEzNWRmNzc1IjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTUgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6IiI6ImE1YjdkOGNjYTIwNjk5MDhkMWVkODhlNmE5ZmUyYzliZWRlMzEzMWRhZDU0NjcxZSI6ImE3YWRlMzBhMDdkMTg1NjkyYWIwZWJkZjRjNzhjZjdhIjoiYTE2YTJlNzQxZjFjZDk3MTcyODViNmQ4ODJjMWZjNTM2NTVlOTc3Mzc2MWFkNjk3IgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNiAoUD0yNCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjkwOTI5YTRiMGFjNjViMzUwYWQxNTkxNjExZmU0ODI5N2UwMzk1NmY2MDgzZTQ1MSI6IjQ5MDA0OTEyZmRkNzI2OTI3OWIxZjA2YTg5IjoiIjoiOWE5ODYxN2ZiOTdhMGRmZTQ2NmJlNjkyMjcyZGNkYWVjMWM1NDQzYTNiNTEzMTJlIjoiZjA0MmM4NjM2M2NjMDVhZmI5OGM2NmUxNmJlOGE0NDUiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxNyAoUD0wLCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI5MDkyOWE0YjBhYzY1YjM1MGFkMTU5MTYxMWZlNDgyOTdlMDM5NTZmNjA4M2U0NTEiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOiIiOiIxZDA4OWE1ZiI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTggKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiOTA5MjlhNGIwYWM2NWIzNTBhZDE1OTE2MTFmZTQ4Mjk3ZTAzOTU2ZjYwODNlNDUxIjoiYTI2NTQ4MGNhODhkNWYiOiJhMjI0OGE4ODJlY2JmODUwZGFmOTE5MzNhMzg5ZTc4ZTgxNjIzZDIzM2RmZDQ3YmY4MzIxMzYxYTM4ZjEzOGZlIjoiIjoiMmY0NjAyMmEiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxOSAoUD0wLCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiNmE3OThkN2M1ZTFhNzJiNDNlMjBhZDVjN2IwODU2N2IxMmFiNzQ0YjYxYzA3MGUyIjoiNWE4YWE0ODVjMzE2ZTkiOiIzNzk2Y2Y1MWI4NzI2NjUyYTQyMDQ3MzNiOGZiYjA0N2NmMDBmYjkxYTk4MzdlMjJlYzIyYjFhMjY4Zjg4ZTJjIjoiIjoiNTI4MGEyMTM3ZmVlM2RlZWZjZmU5YjYzYTExOTlmYjMiOiIiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIwIChQPTAsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YjEyYWI3NDRiNjFjMDcwZTIiOiJhMjY1NDgwY2E4OGQ1ZiI6ImEyMjQ4YTg4MmVjYmY4NTBkYWY5MTkzM2EzODllNzhlODE2MjNkMjMzZGZkNDdiZjgzMjEzNjFhMzhmMTM4ZmUiOiIiOiJkNDBhNzMxOGM1ZjJkODJmODM4YzBiZWVlZmUwZDU5OCI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIxIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiI2YTc5OGQ3YzVlMWE3MmI0M2UyMGFkNWM3YjA4NTY3YjEyYWI3NDRiNjFjMDcwZTIiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOiIiOiI1ZTBlYWViZCI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjIgKFA9MCwgTj0xMywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006IjZhNzk4ZDdjNWUxYTcyYjQzZTIwYWQ1YzdiMDg1NjdiMTJhYjc0NGI2MWMwNzBlMiI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2IjoiZjYxMDc2OTZlZGIzMzJiMmVhMDU5ZDg4NjBmZWUyNmJlNDJlNWUxMmUxYTRmNzlhOGQwZWFmY2UxYjIyNzhhNyI6IiI6IjcxYjdmYzMzIjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjMgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOiIiOiJkMDdjY2Y5ZmRjM2QzM2FhOTRjZGEzZDIzMGRhNzA3YyI6IiIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjQgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNiI6ImY2MTA3Njk2ZWRiMzMyYjJlYTA1OWQ4ODYwZmVlMjZiZTQyZTVlMTJlMWE0Zjc5YThkMGVhZmNlMWIyMjc4YTciOiIiOiI2NWZlMzJiNjQ5ZGMzMjhjOWY1MzE1ODQ4OTdlODViMyI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI1IChQPTI0LCBOPTcsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJmOWZkY2E0YWM2NGZlN2YwMTRkZTBmNDMwMzljNzU3MTk0ZDU0NGNlNWQxNWVlZDQiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOiI5ZjZjYTRhZjliMTU5MTQ4Yzg4OWE2NTg0ZDExODNlYTI2ZTI2MTQ4NzRiMDUwNDUiOiI3NWRlYThkMSI6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjYgKFA9MjQsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9DQ006ImY5ZmRjYTRhYzY0ZmU3ZjAxNGRlMGY0MzAzOWM3NTcxOTRkNTQ0Y2U1ZDE1ZWVkNCI6ImZkZDJkNmY1MDNjOTE1IjoiNWI5MjM5NGYyMWRkYzNhZDQ5ZDliMDg4MWI4MjlhNTkzNWNiM2E0ZDIzZTI5MmE2MmZiNjZiNWU3YWI3MDIwZSI6Ijg0ZDgyMTJlOWNmYzIxMjEyNTJiYWEzYjA2NWIxZWRjZjUwNDk3Yjk1OTRkYjFlYiI6ImQ3OTY1ODI1IjoiRkFJTCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjcgKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4Y2NkNGIzZThjZGQyYWIzM2QiOiI1YThhYTQ4NWMzMTZlOSI6IjM3OTZjZjUxYjg3MjY2NTJhNDIwNDczM2I4ZmJiMDQ3Y2YwMGZiOTFhOTgzN2UyMmVjMjJiMWEyNjhmODhlMmMiOiI2YWFiNjRjNDc4NzU5OWQ4ZjIxMzQ0NmJlYWRiMTZlMDhkYmE2MGU5N2Y1NmRiZDEiOiI0ZDFkOTgwZDZmZTBmYjQ0YjQyMTk5MjY2MmI5Nzk3NSI6ImEyNjU0ODBjYTg4ZDVmNTM2ZGIwZGM2YWJjNDBmYWYwZDA1YmU3YTk2Njk3Nzc2OCIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjggKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiJhN2FhNjM1ZWE1MWIwYmIyMGEwOTJiZDU1NzNlNzI4Y2NkNGIzZThjZGQyYWIzM2QiOiJmZGQyZDZmNTAzYzkxNSI6IjViOTIzOTRmMjFkZGMzYWQ0OWQ5YjA4ODFiODI5YTU5MzVjYjNhNGQyM2UyOTJhNjJmYjY2YjVlN2FiNzAyMGUiOiI0OTgwYjJlZTQ5YjFhYWYzOTMxNzVmNWFiOWJhZTk1ZWM3OTA0NTU3ZGZhMjA2NjAiOiIzYzUxZDM2YzgyNmYwMTM4NDEwMDg4NjE5OGE3ZjZhMyI6IkZBSUwiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI5IChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGNjZDRiM2U4Y2RkMmFiMzNkIjoiNWE4YWE0ODVjMzE2ZTk0MDNhZmY4NTlmYmIiOiJhMTZhMmU3NDFmMWNkOTcxNzI4NWI2ZDg4MmMxZmM1MzY1NWU5NzczNzYxYWQ2OTdhN2VlNjQxMDE4NGM3OTgyIjoiMTZlNTQzZDBlMjA2MTVmZjBkZjE1YWNkOTkyN2RkZmU0MDY2OGE1NGJiODU0Y2NjIjoiYzI1ZTlmY2UiOiI4NzM5YjRiZWExYTA5OWZlNTQ3NDk5Y2JjNmQxYjEzZDg0OWI4MDg0YzliNmFjYzUiCisKK0FFUy0xOTItQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMwIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiYTdhYTYzNWVhNTFiMGJiMjBhMDkyYmQ1NTczZTcyOGNjZDRiM2U4Y2RkMmFiMzNkIjoiMDgxMjc1N2FkMGNjNGQxN2M0Y2ZlN2E2NDIiOiJlYzZjNDRhN2U5NGU1MWEzY2E2ZGVlMjI5MDk4MzkxNTc1ZWM3MjEzYzg1MjY3ZmJmNzQ5MmZkYmVlZTYxYjEwIjoiZGYzNWIxMDljYWY2OTA2NTZhZTI3OGJiZDhmOGJiYTY4N2EyY2UxMWIxMDVkYWU5IjoiOGVjZWRiM2UiOiJGQUlMIgorCitBRVMtMTkyLUNDTSB0ZXN0IHZlY3RvciBOSVNUICMzMSAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfQ0NNOiIyNjUxMWZiNTFmY2ZhNzVjYjRiNDRkYTc1YTZlNWEwZWI4ZDljOGYzYjkwNmY4ODYiOiI1YThhYTQ4NWMzMTZlOTQwM2FmZjg1OWZiYiI6ImExNmEyZTc0MWYxY2Q5NzE3Mjg1YjZkODgyYzFmYzUzNjU1ZTk3NzM3NjFhZDY5N2E3ZWU2NDEwMTg0Yzc5ODIiOiJjNWIwYjJlZjE3NDk4YzU1NzBlYjMzNWRmNDU4ODAzMjk1OGJhM2Q2OWJmNmYzMTciOiI4NDY0YTZmN2ZhMmI3Njc0NGU4ZThkOTU2OTFjZWNiOCI6Ijg3MzliNGJlYTFhMDk5ZmU1NDc0OTljYmM2ZDFiMTNkODQ5YjgwODRjOWI2YWNjNSIKKworQUVTLTE5Mi1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzIgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0NDTToiMjY1MTFmYjUxZmNmYTc1Y2I0YjQ0ZGE3NWE2ZTVhMGViOGQ5YzhmM2I5MDZmODg2IjoiMDgxMjc1N2FkMGNjNGQxN2M0Y2ZlN2E2NDIiOiJlYzZjNDRhN2U5NGU1MWEzY2E2ZGVlMjI5MDk4MzkxNTc1ZWM3MjEzYzg1MjY3ZmJmNzQ5MmZkYmVlZTYxYjEwIjoiZDFmMDUxODkyOWY0YWUyZjA1NDNkZTJhN2RmZTRiYjAxMTBiYjMwNTdlNTI0YTFjIjoiMDZiZDZkYzJlNmJjYzM0MzZjZmZiOTY5YWU5MDAzODgiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxIChQPTAsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZWRhMzJmNzUxNDU2ZTMzMTk1ZjFmNDk5Y2YyZGM3Yzk3ZWExMjdiNmQ0ODhmMjExY2NjNTEyNmZiYjI0YWZhNiI6ImE1NDQyMThkYWRkM2MxIjoiIjoiIjoiNDY5YzkwYmIiOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIgKFA9MCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJlZGEzMmY3NTE0NTZlMzMxOTVmMWY0OTljZjJkYzdjOTdlYTEyN2I2ZDQ4OGYyMTFjY2M1MTI2ZmJiMjRhZmE2IjoiZDNkNTQyNGUyMGZiZWMiOiIiOiIiOiI0NmE5MDhlZCI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZTFiOGE5MjdhOTVlZmU5NDY1NjY3N2I2OTI2NjIwMDAyNzhiNDQxYzc5ZTg3OWRkNWMwZGRjNzU4YmRjOWVlOCI6ImE1NDQyMThkYWRkM2MxIjoiIjoiIjoiODIwN2ViMTRkMzM4NTVhNTJhY2NlZWQxN2RiY2JmNmUiOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzQgKFA9MCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZTFiOGE5MjdhOTVlZmU5NDY1NjY3N2I2OTI2NjIwMDAyNzhiNDQxYzc5ZTg3OWRkNWMwZGRjNzU4YmRjOWVlOCI6ImQzZDU0MjRlMjBmYmVjIjoiIjoiIjoiNjBmOGUxMjdjYjRkMzBkYjZkZjA2MjIxNThjZDkzMWQiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM1IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImUxYjhhOTI3YTk1ZWZlOTQ2NTY2NzdiNjkyNjYyMDAwMjc4YjQ0MWM3OWU4NzlkZDVjMGRkYzc1OGJkYzllZTgiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IiI6IiI6IjhhMTlhMTMzIjoiIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICM2IChQPTAsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImUxYjhhOTI3YTk1ZWZlOTQ2NTY2NzdiNjkyNjYyMDAwMjc4YjQ0MWM3OWU4NzlkZDVjMGRkYzc1OGJkYzllZTgiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZCI6IiI6IiI6IjJlMzE3ZjFiIjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjNyAoUD0wLCBOPTEzLCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiYWYwNjM2MzllNjZjMjg0MDgzYzVjZjcyYjcwZDhiYzI3N2Y1OTc4ZTgwZDkzMjJkOTlmMmZkYzcxOGNkYTU2OSI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiIjoiIjoiOTdlMWE4ZGQ0MjU5Y2NkMmU0MzFlMDU3YjAzOTdmY2YiOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzggKFA9MCwgTj0xMywgQT0wLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImFmMDYzNjM5ZTY2YzI4NDA4M2M1Y2Y3MmI3MGQ4YmMyNzdmNTk3OGU4MGQ5MzIyZDk5ZjJmZGM3MThjZGE1NjkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZCI6IiI6IiI6IjVhOTU5NmM1MTFlYTZhODY3MWFkZWZjNGYyMTU3ZDhiIjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjOSAoUD0yNCwgTj03LCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJhZjA2MzYzOWU2NmMyODQwODNjNWNmNzJiNzBkOGJjMjc3ZjU5NzhlODBkOTMyMmQ5OWYyZmRjNzE4Y2RhNTY5IjoiYTU0NDIxOGRhZGQzYzEiOiIiOiI2NGExMzQxNjc5OTcyZGM1ODY5ZmNmNjliMTlkNWM1ZWE1MGFhMGI1ZTk4NWY1YjciOiIyMmFhOGQ1OSI6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5OCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTAgKFA9MjQsIE49NywgQT0wLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiYWYwNjM2MzllNjZjMjg0MDgzYzVjZjcyYjcwZDhiYzI3N2Y1OTc4ZTgwZDkzMjJkOTlmMmZkYzcxOGNkYTU2OSI6ImJmY2RhOGI1YTJkMGQyIjoiIjoiYzViN2Y4MDJiZmZjNDk4YzE2MjZlMzc3NGYxZDlmOTQwNDVkZmQ4ZTFhMTBhMjAyIjoiNzdkMDBhNzUiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMxMSAoUD0yNCwgTj03LCBBPTAsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiZjcwNzlkZmEzYjVjN2IwNTYzNDdkN2U0MzdiY2RlZDY4M2FiZDZlMmM5ZTA2OWQzMzMyODQwODJjYmI1ZDQ1MyI6ImE1NDQyMThkYWRkM2MxIjoiIjoiYmM1MWMzOTI1YTk2MGU3NzMyNTMzZTRlZjNhNGY2OWVlNjgyNmRlOTUyYmNiMGZkIjoiMzc0ZjNiYjZkYjgzNzdlYmZjNzk2NzQ4NThjNGYzMDUiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTgiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEyIChQPTI0LCBOPTcsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJmNzA3OWRmYTNiNWM3YjA1NjM0N2Q3ZTQzN2JjZGVkNjgzYWJkNmUyYzllMDY5ZDMzMzI4NDA4MmNiYjVkNDUzIjoiYmZjZGE4YjVhMmQwZDIiOiIiOiJhZmExZmE4ZThhNzBlMjZiMDIxNjExNTA1NTZkNjA0MTAxZmRmNDIzZjMzMmMzMzYiOiIzMjc1ZjJhNDkwN2Q1MWI3MzRmZTcyMzhjZWJiZDQ4ZiI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzEzIChQPTI0LCBOPTEzLCBBPTAsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJmNzA3OWRmYTNiNWM3YjA1NjM0N2Q3ZTQzN2JjZGVkNjgzYWJkNmUyYzllMDY5ZDMzMzI4NDA4MmNiYjVkNDUzIjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIiOiI2M2UwMGQzMGU0YjA4ZmQyYTFjYzhkNzBmYWIzMjdiMjM2OGU3N2E5M2JlNGY0MTIiOiIzZDE0ZmIzZiI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZSIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTQgKFA9MjQsIE49MTMsIEE9MCwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImY3MDc5ZGZhM2I1YzdiMDU2MzQ3ZDdlNDM3YmNkZWQ2ODNhYmQ2ZTJjOWUwNjlkMzMzMjg0MDgyY2JiNWQ0NTMiOiI4OTRkY2FhNjEwMDhlYjhmYjA1MmM2MGQ0MSI6IiI6ImJiNTQyNWIzODY5Yjc2ODU2ZWM1OGUzOTg4NmZiNmY2ZjJhYzEzZmU0NGNiMTMyZCI6IjhkMGMwMDk5IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTUgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiIxYjBlOGRmNjNjNTdmMDVkOWFjNDU3NTc1ZWE3NjQ1MjRiODYxMGFlNTE2NGU2MjE1ZjQyNmY1YTdhZTZlZGU0IjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIiOiJmMDA1MGFkMTYzOTIwMjFhM2Y0MDIwN2JlZDM1MjFmYjFlOWY4MDhmNDk4MzBjNDIiOiIzYTU3OGQxNzk5MDJmOTEyZjllYTFhZmJjZTExMjBiMyI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZSIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTYgKFA9MjQsIE49MTMsIEE9MCwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiIxYjBlOGRmNjNjNTdmMDVkOWFjNDU3NTc1ZWE3NjQ1MjRiODYxMGFlNTE2NGU2MjE1ZjQyNmY1YTdhZTZlZGU0IjoiODk0ZGNhYTYxMDA4ZWI4ZmIwNTJjNjBkNDEiOiIiOiJjNDA4MTkwZDBmYmY1MDM0ZjgzYjI0YThlZDk2NTczMzFhN2NlMTQxZGU0ZmFlNzYiOiI5MDg0NjA3YjgzYmQwNmU2NDQyZWFjOGRhY2Y1ODNjYyI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzE3IChQPTAsIE49NywgQT0zMiwgVD00KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjFiMGU4ZGY2M2M1N2YwNWQ5YWM0NTc1NzVlYTc2NDUyNGI4NjEwYWU1MTY0ZTYyMTVmNDI2ZjVhN2FlNmVkZTQiOiJhNTQ0MjE4ZGFkZDNjMSI6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5ODhkMTViNmQzNmMwMzhlYWIiOiIiOiI5MmQwMGZiZSI6IiIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTggKFA9MCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiMWIwZThkZjYzYzU3ZjA1ZDlhYzQ1NzU3NWVhNzY0NTI0Yjg2MTBhZTUxNjRlNjIxNWY0MjZmNWE3YWU2ZWRlNCI6Ijc4YzQ2ZTMyNDljYTI4IjoiMjMyZTk1N2M2NWZmYTExOTg4ZTgzMGQ0NjE3ZDUwMGYxYzRhMzVjMTIyMWYzOTZjNDFhYjIxNGYwNzRjYTJkYyI6IiI6IjkxNDNlNWM0IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMTkgKFA9MCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImE0YmMxMGIxYTYyYzk2ZDQ1OWZiYWYzYTVhYTNmYWNlNzMxM2JiOWUxMjUzZTY5NmY5NmE3YThlMzY4MDEwODgiOiJhNTQ0MjE4ZGFkZDNjMSI6ImQzZDU0MjRlMjBmYmVjNDNhZTQ5NTM1M2VkODMwMjcxNTE1YWIxMDRmODg2MGM5ODhkMTViNmQzNmMwMzhlYWIiOiIiOiI5M2FmMTFhMDgzNzllYjM3YTE2YWEyODM3ZjA5ZDY5ZCI6IiIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjAgKFA9MCwgTj03LCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006ImE0YmMxMGIxYTYyYzk2ZDQ1OWZiYWYzYTVhYTNmYWNlNzMxM2JiOWUxMjUzZTY5NmY5NmE3YThlMzY4MDEwODgiOiI3OGM0NmUzMjQ5Y2EyOCI6IjIzMmU5NTdjNjVmZmExMTk4OGU4MzBkNDYxN2Q1MDBmMWM0YTM1YzEyMjFmMzk2YzQxYWIyMTRmMDc0Y2EyZGMiOiIiOiJkMTliMGMxNGVjNjg2YTc5NjFjYTdjMzg2ZDEyNWE2NSI6IkZBSUwiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIxIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJhNGJjMTBiMWE2MmM5NmQ0NTlmYmFmM2E1YWEzZmFjZTczMTNiYjllMTI1M2U2OTZmOTZhN2E4ZTM2ODAxMDg4IjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3IjoiIjoiODY2ZDQyMjciOiIiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzIyIChQPTAsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiJhNGJjMTBiMWE2MmM5NmQ0NTlmYmFmM2E1YWEzZmFjZTczMTNiYjllMTI1M2U2OTZmOTZhN2E4ZTM2ODAxMDg4IjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjUiOiI4OWY4YjA2OGQzNGY1NmJjNDlkODM5ZDhlNDdiMzQ3ZTZkYWU3MzdiOTAzYjI3ODYzMjQ0N2U2YzA0ODVkMjZhIjoiIjoiOTRjYjExMjciOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyMyAoUD0wLCBOPTEzLCBBPTMyLCBUPTE2KQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9DQ006IjhjNWNmMzQ1N2ZmMjIyMjhjMzljMDUxYzRlMDVlZDQwOTM2NTdlYjMwM2Y4NTlhOWQ0YjBmOGJlMDEyN2Q4OGEiOiJhNTQ0MjE4ZGFkZDNjMTA1ODNkYjQ5Y2YzOSI6IjNjMGUyODE1ZDM3ZDg0NGY3YWMyNDBiYTlkNmUzYTBiMmE4NmY3MDZlODg1OTU5ZTA5YTEwMDVlMDI0ZjY5MDciOiIiOiI4NjdiMGQ4N2NmNmUwZjcxODIwMGE5N2I0ZjZkNWFkNSI6IiIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjQgKFA9MCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiI4YzVjZjM0NTdmZjIyMjI4YzM5YzA1MWM0ZTA1ZWQ0MDkzNjU3ZWIzMDNmODU5YTlkNGIwZjhiZTAxMjdkODhhIjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjUiOiI4OWY4YjA2OGQzNGY1NmJjNDlkODM5ZDhlNDdiMzQ3ZTZkYWU3MzdiOTAzYjI3ODYzMjQ0N2U2YzA0ODVkMjZhIjoiIjoiNjc3YTA0MGQ0NmVlM2YyYjc4MzgyNzNiZGFkMTRmMTYiOiJGQUlMIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyNSAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiOGM1Y2YzNDU3ZmYyMjIyOGMzOWMwNTFjNGUwNWVkNDA5MzY1N2ViMzAzZjg1OWE5ZDRiMGY4YmUwMTI3ZDg4YSI6ImE1NDQyMThkYWRkM2MxIjoiZDNkNTQyNGUyMGZiZWM0M2FlNDk1MzUzZWQ4MzAyNzE1MTVhYjEwNGY4ODYwYzk4OGQxNWI2ZDM2YzAzOGVhYiI6ImMyZmUxMjY1ODEzOWY1ZDBkZDIyY2FkZjJlOTAxNjk1YjU3OTMwMmE3MmZjNTYwOCI6IjNlYmM3NzIwIjoiNzhjNDZlMzI0OWNhMjhlMWVmMDUzMWQ4MGZkMzdjMTI0ZDlhZWNiN2JlNjY2OGUzIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMyNiAoUD0yNCwgTj03LCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiOGM1Y2YzNDU3ZmYyMjIyOGMzOWMwNTFjNGUwNWVkNDA5MzY1N2ViMzAzZjg1OWE5ZDRiMGY4YmUwMTI3ZDg4YSI6IjZiYTAwNGZkMTc2NzkxIjoiNWEwNTNiMmExYmI4N2U4NWQ1NjUyN2JmY2RjZDNlY2FmYjk5MWJiMTBlNGM4NjJiYjA3NTFjNzAwYTI5ZjU0YiI6Ijk0NzQ4YmE4MTIyOWU1M2MzODU4M2E4NTY0YjIzZWJiYWZjNmY2ZWZkZjRjMmE4MSI6ImM0NGRiMmM5IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjcgKFA9MjQsIE49NywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiI3MDUzMzRlMzBmNTNkZDJmOTJkMTkwZDJjMTQzN2M4NzcyZjk0MGM1NWFhMzVlNTYyMjE0ZWQ0NWJkNDU4ZmZlIjoiYTU0NDIxOGRhZGQzYzEiOiJkM2Q1NDI0ZTIwZmJlYzQzYWU0OTUzNTNlZDgzMDI3MTUxNWFiMTA0Zjg4NjBjOTg4ZDE1YjZkMzZjMDM4ZWFiIjoiMzM0MTE2OGViOGM0ODQ2OGM0MTQzNDdmYjA4ZjcxZDIwODZmN2MyZDFiZDU4MWNlIjoiMWFjNjhiZDQyZjVlYzdmYTdlMDY4Y2MwZWNkNzljMmEiOiI3OGM0NmUzMjQ5Y2EyOGUxZWYwNTMxZDgwZmQzN2MxMjRkOWFlY2I3YmU2NjY4ZTMiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzI4IChQPTI0LCBOPTcsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiNzA1MzM0ZTMwZjUzZGQyZjkyZDE5MGQyYzE0MzdjODc3MmY5NDBjNTVhYTM1ZTU2MjIxNGVkNDViZDQ1OGZmZSI6IjZiYTAwNGZkMTc2NzkxIjoiNWEwNTNiMmExYmI4N2U4NWQ1NjUyN2JmY2RjZDNlY2FmYjk5MWJiMTBlNGM4NjJiYjA3NTFjNzAwYTI5ZjU0YiI6ImQ1NDNhY2RhNzEyYjg5OGNiYjI3YjhmNTk4YjJlNDQzOGNlNTg3YTgzNmUyNzg1MSI6IjQ3YzMzMzhhMjQwMDgwOWU3MzliNjNiYTgyMjdkMmY5IjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMjkgKFA9MjQsIE49MTMsIEE9MzIsIFQ9NCkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiI3MDUzMzRlMzBmNTNkZDJmOTJkMTkwZDJjMTQzN2M4NzcyZjk0MGM1NWFhMzVlNTYyMjE0ZWQ0NWJkNDU4ZmZlIjoiYTU0NDIxOGRhZGQzYzEwNTgzZGI0OWNmMzkiOiIzYzBlMjgxNWQzN2Q4NDRmN2FjMjQwYmE5ZDZlM2EwYjJhODZmNzA2ZTg4NTk1OWUwOWExMDA1ZTAyNGY2OTA3IjoiYzBlYTQwMGI1OTk1NjFlNzkwNWI5OTI2MmI0NTY1ZDVjM2RjNDlmYWQ4NGQ3YzY5IjoiZWY4OTEzMzkiOiJlOGRlOTcwZjZlZThlODBlZGU5MzM1ODFiNWJjZjRkODM3ZTJiNzJiYWE4YjAwYzMiCisKK0FFUy0yNTYtQ0NNIHRlc3QgdmVjdG9yIE5JU1QgIzMwIChQPTI0LCBOPTEzLCBBPTMyLCBUPTQpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiNzA1MzM0ZTMwZjUzZGQyZjkyZDE5MGQyYzE0MzdjODc3MmY5NDBjNTVhYTM1ZTU2MjIxNGVkNDViZDQ1OGZmZSI6IjhmYTUwMWM1ZGQ5YWM5Yjg2ODE0NGM5ZmE1IjoiNWJiNDBlM2JiNzJiNDUwOTMyNGE3ZWRjODUyZjcyNTM1ZjFmNjI4MzE1NmU2M2Y2OTU5ZmZhZjM5ZGNkZTgwMCI6IjYwODcxZTAzZWEwZWI5Njg1MzZjOTlmOTI2ZWEyNGVmNDNkNDEyNzJhZDlmYjdmNiI6IjNkNDg4NjIzIjoiRkFJTCIKKworQUVTLTI1Ni1DQ00gdGVzdCB2ZWN0b3IgTklTVCAjMzEgKFA9MjQsIE49MTMsIEE9MzIsIFQ9MTYpCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0NDTToiMzE0YTIwMmY4MzZmOWYyNTdlMjJkOGMxMTc1NzgzMmFlNTEzMWQzNTdhNzJkZjg4ZjNlZmYwZmZjZWUwZGE0ZSI6ImE1NDQyMThkYWRkM2MxMDU4M2RiNDljZjM5IjoiM2MwZTI4MTVkMzdkODQ0ZjdhYzI0MGJhOWQ2ZTNhMGIyYTg2ZjcwNmU4ODU5NTllMDlhMTAwNWUwMjRmNjkwNyI6IjhkMzRjZGNhMzdjZTc3YmU2OGY2NWJhZjMzODJlMzFlZmE2OTNlNjNmOTE0YTc4MSI6IjM2N2YzMGYyZWFhZDhjMDYzY2E1MDc5NWFjZDkwMjAzIjoiZThkZTk3MGY2ZWU4ZTgwZWRlOTMzNTgxYjViY2Y0ZDgzN2UyYjcyYmFhOGIwMGMzIgorCitBRVMtMjU2LUNDTSB0ZXN0IHZlY3RvciBOSVNUICMzMiAoUD0yNCwgTj0xMywgQT0zMiwgVD0xNikKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfQ0NNOiIzMTRhMjAyZjgzNmY5ZjI1N2UyMmQ4YzExNzU3ODMyYWU1MTMxZDM1N2E3MmRmODhmM2VmZjBmZmNlZTBkYTRlIjoiOGZhNTAxYzVkZDlhYzliODY4MTQ0YzlmYTUiOiI1YmI0MGUzYmI3MmI0NTA5MzI0YTdlZGM4NTJmNzI1MzVmMWY2MjgzMTU2ZTYzZjY5NTlmZmFmMzlkY2RlODAwIjoiNTE2YzAwOTVjYzNkODVmZDU1ZTQ4ZGExN2M1OTJlMGM3MDE0YjlkYWFmYjgyYmRjIjoiNGI0MTA5NmRmZGJlOWNjMWFiNjEwZjhmM2UwMzhkMTYiOiJGQUlMIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwMzAyMDEwMEEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiJCQTczNzE4NUU3MTkzMTA0OTJGMzhBNUYxMjUxREE1NUZBRkJDOTQ5ODQ4QTBEIjoiRkNBRUNFNzQ2QjNEQjlBRCI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjAwMDAwMDA0MDMwMjAxQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjVEMjU2NEJGOEVBRkUxRDk5NTI2RUMwMTZEMUJGMDQyNENGQkQyQ0Q2Mjg0OEYzMyI6IjYwQjIyOTVERjI0MjgzRTgiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJDMEMxQzJDM0M0QzVDNkM3QzhDOUNBQ0JDQ0NEQ0VDRiI6IjAwMDAwMDA1MDQwMzAyQTBBMUEyQTNBNEE1IjoiMDAwMTAyMDMwNDA1MDYwNyI6IjgxRjY2M0Q2Qzc3ODc4MTdGOTIwMzYwOEI5ODJBRDE1REMyQkJEODdENzU2Rjc5MjA0IjoiRjU1MUQ2NjgyRjIzQUE0NiI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwNjA1MDQwM0EwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IkNBRUYxRTgyNzIxMUIwOEY3QkQ5MEYwOEM3NzI4OEMwNzBBNEEwIjoiOEIzQTkzM0E2M0U0OTdBMCI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwNzA2MDUwNEEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjJBRDNCQUQ5NEZDNTJFOTJCRTQzOEU4MjdDMTAyM0I5NkE4QTc3MjUiOiI4RkExN0JBN0YzMzFEQjA5IjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICM2CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMDgwNzA2MDVBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJGRUE1NDgwQkE1M0ZBOEQzQzM0NDIyQUFDRTRERTY3RkZBM0JCNzNCQUIiOiJBQjM2QTFFRTRGRTBGRTI4IjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzcKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwOTA4MDcwNkEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI1NDUzMjAyNkU1NEMxMTlBOEQzNkQ5RUM2RTFFRDk3NDE2Qzg3MDhDNEI1QzJDIjoiQUNBRkEzQkNDRjdBNEVCRjk1NzMiOiIwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzgKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwQTA5MDgwN0EwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDciOiI4QUQxOUIwMDFBODdEMTQ4RjREOTJCRUYzNDUyNUNDQ0UzQTYzQzY1MTJBNkY1NzUiOiI3Mzg4RTQ5MTNFRjE0NzAxRjQ0MSI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRiIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICM5CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMEIwQTA5MDhBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3IjoiNURCMDhENjI0MDdFNkUzMUQ2MEY5Q0EyQzYwNDc0MjE5QUMwQkU1MEMwRDRBNTc3ODciOiI5NEQ2RTIzMENEMjVDOUZFQkY4NyI6IjA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzEwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkMwQzFDMkMzQzRDNUM2QzdDOEM5Q0FDQkNDQ0RDRUNGIjoiMDAwMDAwMEMwQjBBMDlBMEExQTJBM0E0QTUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIiOiJEQjExOENDRUMxQjg3NjFDODc3Q0Q4OTYzQTY3RDZGM0JCQkM1QyI6IkQwOTI5OUVCMTFGMzEyRjIzMjM3IjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwRDBDMEIwQUEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjdDQzgzRDhEQzQ5MTAzNTI1QjQ4M0RDNUNBN0VBOUFCODEyQjcwNTYiOiIwNzlEQUZGQURBMTZDQ0NGMkM0RSI6IjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiQzBDMUMyQzNDNEM1QzZDN0M4QzlDQUNCQ0NDRENFQ0YiOiIwMDAwMDAwRTBEMEMwQkEwQTFBMkEzQTRBNSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQiI6IjJDRDM1Qjg4MjBEMjNFN0FBMzUxQjBFOTJGQzc5MzY3MjM4QjJDQzc0OCI6IkNCQjk0QzI5NDc3OTNENjRBRjc1IjoiMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzEzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDBBOTcwMTEwRTE5MjdCMTYwQjZBMzFDMUMiOiI2QjdGNDY0NTA3RkFFNDk2IjoiQTQzNUQ3MjczNDhEREQyMjkwN0Y3RUI4RjVGREJCNEQ5MzlEQTY1MjREQjRGNiI6IjQ1NThDMDJEMjVCMTI3RUUiOiJDNkI1RjNFNkNBMjMxMUFFRjc0NzJCMjAzRTczNUVBNTYxQURCMTdENTZDNUEzIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzE0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDA4M0NEOENFMENCNDJCMTYwQjZBMzFDMUMiOiI5ODY2MDVCNDNERjE1REU3IjoiOEFFMDUyNTA4RkJFQ0E5MzJFMzQ2RjA1RTBEQzBERkJDRjkzOUVBRkZBM0U1ODdDIjoiODY3RDZFMUM0ODcwMzgwNiI6IjAxRjZDRTY3NjRDNTc0NDgzQkIwMkU2QkJGMUUwQUJEMjZBMjI1NzJCNEQ4MEVFNyIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxNQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwNUY1NDk1MEIxOEYyQjE2MEI2QTMxQzFDIjoiNDhGMkU3RTFBNzY3MUE1MSI6IjA4QjY3RUUyMUM4QkYyNkU0NzNFNDA4NTk5RTlDMDgzNkQ2QUYwQkIxOERGNTU0NjZDIjoiQTgwODc4QTc5MDQ3NkRFNSI6IkNERjFEODQwNkZDMkU5MDE0OTUzODk3MDA1RkJGQjhCQTU3Mjc2RjkyNDA0NjA4RTA4IgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzE2CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDBFQzYwMDg2MzMxOUFCMTYwQjZBMzFDMUMiOiJERTk3REYzQjhDQkQ2RDhFNTAzMERBNEMiOiI2M0I3OEI0OTY3QjE5RURCQjczM0NEMTExNEY2NEVCMjI2MDg5MyI6IjY4QzM1NDgyOEQ5NTBDQzUiOiJCMDA1RENGQTBCNTkxODE0MjZBOTYxNjg1QTk5M0Q4QzQzMTg1QiIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMxNworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwNjBDRkYxQTMxRUExQjE2MEI2QTMxQzFDIjoiQTVFRTkzRTQ1N0RGMDU0NjZFNzgyRENGIjoiMEJDNkJCRTJBOEI5MDlGNDYyOUVFNkRDMTQ4REE0NDQxMEUxOEFGNCI6IjMxNDczODMyNzZGNjZBOUYiOiIyRTIwMjExMjk4MTA1RjEyOUQ1RUQ5NUI5M0Y3MkQzMEIyRkFDQ0Q3IgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzE4CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDAwRjg1Q0Q5OTVDOTdCMTYwQjZBMzFDMUMiOiIyNEFBMUJGOUE1Q0Q4NzYxODJBMjUwNzQiOiIyMjJBRDYzMkZBMzFENkFGOTcwQzM0NUY3RTc3Q0EzQkQwREMyNUIzNDAiOiJBMUEzRDMxRjhENEI0NEI3IjoiMjY0NTk0MUU3NTYzMkQzNDkxQUYwRkMwQzk4NzZDM0JFNEFBNzQ2OEM5IgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzE5CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDBDMjlCMkNBQUM0Q0RCMTYwQjZBMzFDMUMiOiI2OTE5NDZCOUNBMDdCRTg3IjoiMDVCOEUxQjlDNDlDRkQ1NkNGMTMwQUE2MjUxREMyRUNDMDZDQ0M1MDhGRTY5NyI6IkEwMDY2RDU3Qzg0QkVDMTgyNzY4IjoiMDcwMTM1QTY0MzdDOURCMTIwQ0Q2MUQ4RjZDMzlDM0VBMTI1RkQ5NUEwRDIzRCIKKworQ2FtZWxsaWEtQ0NNIHRlc3QgdmVjdG9yIFJGQyA1NTI4ICMyMAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DQ01fQworYXV0aF9jcnlwdF90djpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0NNOiJENzVDMjc3ODA3OENBOTNEOTcxRjk2RkRFNzIwRjRDRCI6IjAwMkM2Qjc1OTVFRTYyQjE2MEI2QTMxQzFDIjoiRDBDNTRFQ0I4NDYyN0RDNCI6IjU0Q0VCOTY4REVFMjM2MTE1NzVFQzAwM0RGQUExQ0Q0ODg0OUJERjVBRTJFREI2QiI6IjdGQTc3NUIxNTBFRDQzODNDNUE5IjoiQzhDMDg4MEU2QzYzNkUyMDA5M0RENjU5NDIxN0QyRTE4ODc3REIyNjRFNzFBNUNDIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzIxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDBDNTNDRDRDMkFBMjRCMTYwQjZBMzFDMUMiOiJFMjg1RTBFNDgwOENEQTNEIjoiQjE0MDQ1NDZCRjY2NzIxMENBMjhFMzA5QjM5QkQ2Q0E3RTlGQzgyODVGRTY5OEQ0M0MiOiJEMjBBMDJFMEJEQ0FFRDIwMTBEMyI6IkY3NURBQTA3MTBDNEU2NDI5Nzc5NERDMkI3RDJBMjA3NTdCMUFBNEU0NDgwMDJGRkFCIgorCitDYW1lbGxpYS1DQ00gdGVzdCB2ZWN0b3IgUkZDIDU1MjggIzIyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0NDTV9DCithdXRoX2NyeXB0X3R2Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQ006IkQ3NUMyNzc4MDc4Q0E5M0Q5NzFGOTZGREU3MjBGNENEIjoiMDBCRUU5MjY3RkJBRENCMTYwQjZBMzFDMUMiOiI2Q0FFRjk5NDExNDE1NzBEN0M4MTM0MDUiOiI5NEM4OTU5QzExNTY5QTI5NzgzMUE3MjEwMDU4NTdBQjYxQjg3QSI6IjJERUEwOTM2QjZFQjVGNjI1RjVEIjoiQzIzODgyMkZBQzVGOThGRjkyOTQwNUIwQUQxMjdBNEU0MTg1NEUiCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMjMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIwMERGQThCMTI0NTAwN0IxNjBCNkEzMUMxQyI6IjM2QTUyQ0YxNkIxOUEyMDM3QUI3MDExRSI6IjU4NjlFM0FBRDI0NDdDNzRFMEZDMDVGOUE0RUE3NDU3N0Y0REU4Q0EiOiI4OTI0NzY0Mjk2QUQwNDExOUNFNyI6IjREQkYzRTc3NEFEMjQ1RTVENTg5MUY5RDFDMzJBMEFFMDIyQzg1RDciCisKK0NhbWVsbGlhLUNDTSB0ZXN0IHZlY3RvciBSRkMgNTUyOCAjMjQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0NNX0MKK2F1dGhfY3J5cHRfdHY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NDTToiRDc1QzI3NzgwNzhDQTkzRDk3MUY5NkZERTcyMEY0Q0QiOiIwMDNCOEZEOEQzQTkzN0IxNjBCNkEzMUMxQyI6IkE0RDQ5OUY3ODQxOTcyOEMxOTE3OEIwQyI6IjRCMTk4MTU2MzkzQjBGNzc5NjA4NkFBRkI0NTRGOEMzRjAzNENDQTk2NiI6Ijk0NUYxRkNFQTdFMTFCRUU2QTJGIjoiOURDOUVEQUUyRkY1REY4NjM2RThDNkRFMEVFRDU1Rjc4NjdFMzMzMzdEIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmRlcy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5kZXMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWFjOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5kZXMuZGF0YQpAQCAtMCwwICsxLDU5MSBAQAorREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjA6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MjotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NzotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6ODotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6OTotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE1Oi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTY6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNzotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMxOi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzI6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMzotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ3Oi0xCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDg6LTEKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0OTotMQorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MDpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoyOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo4Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo5Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTU6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNjpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE3Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzE6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMjpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMzOk1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzIHdpdGggb25lIGFuZCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCBvbmUgYW5kIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0ODpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcyB3aXRoIG9uZSBhbmQgemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ5Ok1CRURUTFNfUEFERElOR19PTkVfQU5EX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDowOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZSB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjI6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojg6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojk6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE2Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMTpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMyOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzM6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMgd2l0aCB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0NzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcyB3aXRoIHplcm9zIGFuZCBsZW4gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ4Ok1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgYW5kIGxlbiBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDk6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU4KKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDowOk1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoyOk1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0Ojc6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6ODpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo5Ok1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDoxNTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MTY6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE3Ok1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDozMTpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6MzI6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMzOk1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcyB3aXRoIHplcm9zIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo0NzpNQkVEVExTX1BBRERJTkdfWkVST1MKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMgd2l0aCB6ZXJvcyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0NCQzoiREVTLUNCQyI6NjQ6NDg6TUJFRFRMU19QQURESU5HX1pFUk9TCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzIHdpdGggemVyb3MgcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ5Ok1CRURUTFNfUEFERElOR19aRVJPUworCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjA6TUJFRFRMU19QQURESU5HX05PTkUKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOiJERVMtQ0JDIjo2NDo4Ok1CRURUTFNfUEFERElOR19OT05FCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjE2Ok1CRURUTFNfUEFERElOR19OT05FCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjMyOk1CRURUTFNfUEFERElOR19OT05FCisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6IkRFUy1DQkMiOjY0OjQ4Ok1CRURUTFNfUEFERElOR19OT05FCisKK0RFUyBUcnkgZW5jcnlwdGluZyAxIGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6MTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgMiBieXRlcyB3aXRoIG5vIHBhZGRpbmcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZmFpbDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOk1CRURUTFNfUEFERElOR19OT05FOjY0OjI6TUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQKKworREVTIFRyeSBlbmNyeXB0aW5nIDcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDo3Ok1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVECisKK0RFUyBUcnkgZW5jcnlwdGluZyA5IGJ5dGVzIHdpdGggbm8gcGFkZGluZworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19mYWlsOk1CRURUTFNfQ0lQSEVSX0RFU19DQkM6TUJFRFRMU19QQURESU5HX05PTkU6NjQ6OTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgMTUgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDoxNTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgMTcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDoxNzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgMzEgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDozMTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgMzMgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDozMzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgNDcgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDo0NzpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgVHJ5IGVuY3J5cHRpbmcgNDkgYnl0ZXMgd2l0aCBubyBwYWRkaW5nCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2ZhaWw6TUJFRFRMU19DSVBIRVJfREVTX0NCQzpNQkVEVExTX1BBRERJTkdfTk9ORTo2NDo0OTpNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRAorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MDowOgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDoxOjA6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjA6MToKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjE2OjA6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDowOjE2OgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MToxNToKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjE1OjE6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDoxNTo3OgorCitERVMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19DQkM6NjQ6MTY6NjoKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOjY0OjE3OjY6CisKK0RFUyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0NCQzo2NDoxNjoxNjoKKworREVTIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjA6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjE6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODoyOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6IkRFUy1FREUtQ0JDIjoxMjg6NzotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4Ojg6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoiREVTLUVERS1DQkMiOjEyODo5Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjE1Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjE2Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjE3Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjMxOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjMyOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjMzOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjQ3Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjQ4Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOiJERVMtRURFLUNCQyI6MTI4OjQ5Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODowOjA6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjE6MDoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MDoxOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MTY6MDoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjA6MTY6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODoxOjE1OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MTU6MToKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjE1Ojc6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREVfQ0JDOjEyODoxNjo2OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFX0NCQzoxMjg6MTc6NjoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERV9DQkM6MTI4OjE2OjE2OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MDotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5MjoxOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5MjoyOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5Mjo3Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5Mjo4Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5Mjo5Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MTU6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5MjoxNjotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjE3Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6MzE6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5MjozMjotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjMzOi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoiREVTLUVERTMtQ0JDIjoxOTI6NDc6LTEKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOiJERVMtRURFMy1DQkMiOjE5Mjo0ODotMQorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6IkRFUy1FREUzLUNCQyI6MTkyOjQ5Oi0xCisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MDowOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MTowOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MDoxOgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjE2OjA6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MDoxNjoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOjE5MjoxOjE1OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgNAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjE1OjE6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MTU6NzoKKworREVTMyBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOjE5MjoxNjo2OgorCitERVMzIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6MTkyOjE3OjY6CisKK0RFUzMgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzoxOTI6MTY6MTY6CisKK0RFUyBFQ0IgRW5jcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMCI6IjhDQTY0REU5QzFCMTIzQTciOjAKKworREVTIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VDQjpNQkVEVExTX0VOQ1JZUFQ6IkZGRkZGRkZGRkZGRkZGRkYiOiJGRkZGRkZGRkZGRkZGRkZGIjoiNzM1OUIyMTYzRTRFREM1OCI6MAorCitERVMgRUNCIEVuY3J5cHQgdGVzdCB2ZWN0b3IgKE9wZW5TU0wpICMzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9ERVNfRUNCOk1CRURUTFNfRU5DUllQVDoiRkVEQ0JBOTg3NjU0MzIxMCI6IjAxMjM0NTY3ODlBQkNERUYiOiJFRDM5RDk1MEZBNzRCQ0M0IjowCisKK0RFUyBFQ0IgRGVjcnlwdCB0ZXN0IHZlY3RvciAoT3BlblNTTCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQwordGVzdF92ZWNfZWNiOk1CRURUTFNfQ0lQSEVSX0RFU19FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwIjoiOENBNjRERTlDMUIxMjNBNyI6IjAwMDAwMDAwMDAwMDAwMDAiOjAKKworREVTIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VDQjpNQkVEVExTX0RFQ1JZUFQ6IkZGRkZGRkZGRkZGRkZGRkYiOiI3MzU5QjIxNjNFNEVEQzU4IjoiRkZGRkZGRkZGRkZGRkZGRiI6MAorCitERVMgRUNCIERlY3J5cHQgdGVzdCB2ZWN0b3IgKE9wZW5TU0wpICMzCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0MKK3Rlc3RfdmVjX2VjYjpNQkVEVExTX0NJUEhFUl9ERVNfRUNCOk1CRURUTFNfREVDUllQVDoiNDMyOTdGQUQzOEUzNzNGRSI6IkVBNjc2QjJDQjdEQjJCN0EiOiI3NjI1MTRCODI5QkY0ODZBIjowCisKK0RFUzMtRURFIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0I6TUJFRFRMU19FTkNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRiI6IjAwMDAwMDAwMDAwMDAwMDAiOiI5Mjk1QjU5QkIzODQ3MzZFIjowCisKK0RFUzMtRURFIEVDQiBFbmNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0I6TUJFRFRMU19FTkNSWVBUOiJGRkZGRkZGRkZGRkZGRkZGMzAwMDAwMDAwMDAwMDAwMCI6IkZGRkZGRkZGRkZGRkZGRkYiOiIxOTlFOUQ2REYzOUFBODE2IjowCisKK0RFUzMtRURFIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0I6TUJFRFRMU19ERUNSWVBUOiIwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRiI6IjkyOTVCNTlCQjM4NDczNkUiOiIwMDAwMDAwMDAwMDAwMDAwIjowCisKK0RFUzMtRURFIEVDQiBEZWNyeXB0IHRlc3QgdmVjdG9yIChPcGVuU1NMKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCit0ZXN0X3ZlY19lY2I6TUJFRFRMU19DSVBIRVJfREVTX0VERV9FQ0I6TUJFRFRMU19ERUNSWVBUOiJGRkZGRkZGRkZGRkZGRkZGMzAwMDAwMDAwMDAwMDAwMCI6IjE5OUU5RDZERjM5QUE4MTYiOiJGRkZGRkZGRkZGRkZGRkZGIjowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDczNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NpcGhlci5mdW5jdGlvbgpAQCAtMCwwICsxLDcxNCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyNpbmNsdWRlICJtYmVkdGxzL2djbS5oIgorI2VuZGlmCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NpcGhlcl9saXN0KCApCit7CisgICAgY29uc3QgaW50ICpjaXBoZXJfdHlwZTsKKworICAgIGZvciggY2lwaGVyX3R5cGUgPSBtYmVkdGxzX2NpcGhlcl9saXN0KCk7ICpjaXBoZXJfdHlwZSAhPSAwOyBjaXBoZXJfdHlwZSsrICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCAqY2lwaGVyX3R5cGUgKSAhPSBOVUxMICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNpcGhlcl9udWxsX2FyZ3MoICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCAqKCBtYmVkdGxzX2NpcGhlcl9saXN0KCkgKSApOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzFdID0geyAwIH07CisgICAgc2l6ZV90IG9sZW47CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY3R4ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggTlVMTCApID09IE1CRURUTFNfTU9ERV9OT05FICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2dldF9jaXBoZXJfbW9kZSggJmN0eCApID09IE1CRURUTFNfTU9ERV9OT05FICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfZ2V0X2l2X3NpemUoIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2dldF9pdl9zaXplKCAmY3R4ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcoIE5VTEwgKSA9PSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIE5VTEwgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0dXAoIE5VTEwsIGluZm8gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoIE5VTEwsIGJ1ZiwgMCwgTUJFRFRMU19FTkNSWVBUICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eCwgYnVmLCAwLCBNQkVEVExTX0VOQ1JZUFQgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoIE5VTEwsIGJ1ZiwgMCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjdHgsIGJ1ZiwgMCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCBOVUxMICkgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY3R4ICkgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggTlVMTCwgYnVmLCAwICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eCwgYnVmLCAwICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisjZW5kaWYKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl91cGRhdGUoIE5VTEwsIGJ1ZiwgMCwgYnVmLCAmb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgsIGJ1ZiwgMCwgYnVmLCAmb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggTlVMTCwgYnVmLCAmb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjdHgsIGJ1ZiwgJm9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfd3JpdGVfdGFnKCBOVUxMLCBidWYsIG9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfd3JpdGVfdGFnKCAmY3R4LCBidWYsIG9sZW4gKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jaGVja190YWcoIE5VTEwsIGJ1Ziwgb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jaGVja190YWcoICZjdHgsIGJ1Ziwgb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworI2VuZGlmCit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQyAqLwordm9pZCBjaXBoZXJfc3BlY2lhbF9iZWhhdmlvdXJzKCApCit7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGl2WzMyXTsKKyAgICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBpbnB1dCwgMCwgc2l6ZW9mKCBpbnB1dCApICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDAsIHNpemVvZiggb3V0cHV0ICkgKTsKKyAgICBtZW1zZXQoIGl2LCAwLCBzaXplb2YoIGl2ICkgKTsKKworICAgIC8qIENoZWNrIGFuZCBnZXQgaW5mbyBzdHJ1Y3R1cmVzICovCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IgKTsKKyAgICBURVNUX0FTU0VSVCggTlVMTCAhPSBjaXBoZXJfaW5mbyApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIGNpcGhlcl9pbmZvICkgKTsKKworICAgIC8qIElWIHRvbyBiaWcgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4LCBpdiwgTUJFRFRMU19NQVhfSVZfTEVOR1RIICsgMSApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisKKyAgICAvKiBJViB0b28gc21hbGwgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4LCBpdiwgMCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgLyogVXBkYXRlIEVDQiB3aXRoIHBhcnRpYWwgYmxvY2sgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LCBpbnB1dCwgMSwgb3V0cHV0LCAmb2xlbiApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0NJUEhFUl9GVUxMX0JMT0NLX0VYUEVDVEVEICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlbmNfZGVjX2J1ZiggaW50IGNpcGhlcl9pZCwgY2hhciAqY2lwaGVyX3N0cmluZywgaW50IGtleV9sZW4sCisgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoX3ZhbCwgaW50IHBhZF9tb2RlICkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gbGVuZ3RoX3ZhbCwgb3V0bGVuLCB0b3RhbF9sZW4sIGksIGJsb2NrX3NpemU7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgYWRbMTNdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGluYnVmWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGVuY2J1Zls2NF07CisgICAgdW5zaWduZWQgY2hhciBkZWNidWZbNjRdOworCisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4X2RlYzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4X2VuYzsKKworICAgIC8qCisgICAgICogUHJlcGFyZSBjb250ZXh0cworICAgICAqLworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHhfZGVjICk7CisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eF9lbmMgKTsKKworICAgIG1lbXNldCgga2V5LCAweDJhLCBzaXplb2YoIGtleSApICk7CisKKyAgICAvKiBDaGVjayBhbmQgZ2V0IGluZm8gc3RydWN0dXJlcyAqLworICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl9pZCApOworICAgIFRFU1RfQVNTRVJUKCBOVUxMICE9IGNpcGhlcl9pbmZvICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV9zdHJpbmcoIGNpcGhlcl9zdHJpbmcgKSA9PSBjaXBoZXJfaW5mbyApOworCisgICAgLyogSW5pdGlhbGlzZSBlbmMgYW5kIGRlYyBjb250ZXh0cyAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4X2RlYywgY2lwaGVyX2luZm8gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4X2VuYywgY2lwaGVyX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4X2RlYywga2V5LCBrZXlfbGVuLCBNQkVEVExTX0RFQ1JZUFQgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eF9lbmMsIGtleSwga2V5X2xlbiwgTUJFRFRMU19FTkNSWVBUICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisgICAgaWYoIC0xICE9IHBhZF9tb2RlICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoICZjdHhfZGVjLCBwYWRfbW9kZSApICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoICZjdHhfZW5jLCBwYWRfbW9kZSApICk7CisgICAgfQorI2Vsc2UKKyAgICAodm9pZCkgcGFkX21vZGU7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcgKi8KKworICAgIC8qCisgICAgICogRG8gYSBmZXcgZW5jb2RlL2RlY29kZSBjeWNsZXMKKyAgICAgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMzsgaSsrICkKKyAgICB7CisgICAgbWVtc2V0KCBpdiAsIDB4MDAgKyBpLCBzaXplb2YoIGl2ICkgKTsKKyAgICBtZW1zZXQoIGFkLCAweDEwICsgaSwgc2l6ZW9mKCBhZCApICk7CisgICAgbWVtc2V0KCBpbmJ1ZiwgMHgyMCArIGksIHNpemVvZiggaW5idWYgKSApOworCisgICAgbWVtc2V0KCBlbmNidWYsIDAsIHNpemVvZiggZW5jYnVmICkgKTsKKyAgICBtZW1zZXQoIGRlY2J1ZiwgMCwgc2l6ZW9mKCBkZWNidWYgKSApOworICAgIG1lbXNldCggdGFnLCAwLCBzaXplb2YoIHRhZyApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjdHhfZGVjLCBpdiwgc2l6ZW9mKCBpdiApICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjdHhfZW5jLCBpdiwgc2l6ZW9mKCBpdiApICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY3R4X2RlYyApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfcmVzZXQoICZjdHhfZW5jICkgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGVfYWQoICZjdHhfZGVjLCBhZCwgc2l6ZW9mKCBhZCApIC0gaSApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkKCAmY3R4X2VuYywgYWQsIHNpemVvZiggYWQgKSAtIGkgKSApOworI2VuZGlmCisKKyAgICBibG9ja19zaXplID0gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjdHhfZW5jICk7CisgICAgVEVTVF9BU1NFUlQoIGJsb2NrX3NpemUgIT0gMCApOworCisgICAgLyogZW5jb2RlIGxlbmd0aCBudW1iZXIgb2YgYnl0ZXMgZnJvbSBpbmJ1ZiAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eF9lbmMsIGluYnVmLCBsZW5ndGgsIGVuY2J1ZiwgJm91dGxlbiApICk7CisgICAgdG90YWxfbGVuID0gb3V0bGVuOworCisgICAgVEVTVF9BU1NFUlQoIHRvdGFsX2xlbiA9PSBsZW5ndGggfHwKKyAgICAgICAgICAgICAgICAgKCB0b3RhbF9sZW4gJSBibG9ja19zaXplID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbF9sZW4gPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbF9sZW4gKyBibG9ja19zaXplID4gbGVuZ3RoICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmN0eF9lbmMsIGVuY2J1ZiArIG91dGxlbiwgJm91dGxlbiApICk7CisgICAgdG90YWxfbGVuICs9IG91dGxlbjsKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl93cml0ZV90YWcoICZjdHhfZW5jLCB0YWcsIHNpemVvZiggdGFnICkgKSApOworI2VuZGlmCisKKyAgICBURVNUX0FTU0VSVCggdG90YWxfbGVuID09IGxlbmd0aCB8fAorICAgICAgICAgICAgICAgICAoIHRvdGFsX2xlbiAlIGJsb2NrX3NpemUgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsX2xlbiA+IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsX2xlbiA8PSBsZW5ndGggKyBibG9ja19zaXplICkgKTsKKworICAgIC8qIGRlY29kZSB0aGUgcHJldmlvdXNseSBlbmNvZGVkIHN0cmluZyAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eF9kZWMsIGVuY2J1ZiwgdG90YWxfbGVuLCBkZWNidWYsICZvdXRsZW4gKSApOworICAgIHRvdGFsX2xlbiA9IG91dGxlbjsKKworICAgIFRFU1RfQVNTRVJUKCB0b3RhbF9sZW4gPT0gbGVuZ3RoIHx8CisgICAgICAgICAgICAgICAgICggdG90YWxfbGVuICUgYmxvY2tfc2l6ZSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxfbGVuIDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxfbGVuICsgYmxvY2tfc2l6ZSA+PSBsZW5ndGggKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY3R4X2RlYywgZGVjYnVmICsgb3V0bGVuLCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbF9sZW4gKz0gb3V0bGVuOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX2NoZWNrX3RhZyggJmN0eF9kZWMsIHRhZywgc2l6ZW9mKCB0YWcgKSApICk7CisjZW5kaWYKKworICAgIC8qIGNoZWNrIHJlc3VsdCAqLworICAgIFRFU1RfQVNTRVJUKCB0b3RhbF9sZW4gPT0gbGVuZ3RoICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWVtY21wKGluYnVmLCBkZWNidWYsIGxlbmd0aCkgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvbmUKKyAgICAgKi8KK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eF9kZWMgKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4X2VuYyApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlbmNfZmFpbCggaW50IGNpcGhlcl9pZCwgaW50IHBhZF9tb2RlLCBpbnQga2V5X2xlbiwKKyAgICAgICAgICAgICAgIGludCBsZW5ndGhfdmFsLCBpbnQgcmV0ICkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gbGVuZ3RoX3ZhbDsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVszMl07CisgICAgdW5zaWduZWQgY2hhciBpdlsxNl07CisKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisKKyAgICB1bnNpZ25lZCBjaGFyIGluYnVmWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGVuY2J1Zls2NF07CisKKyAgICBzaXplX3Qgb3V0bGVuID0gMDsKKworICAgIG1lbXNldCgga2V5LCAwLCAzMiApOworICAgIG1lbXNldCggaXYgLCAwLCAxNiApOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBpbmJ1ZiwgNSwgNjQgKTsKKyAgICBtZW1zZXQoIGVuY2J1ZiwgMCwgNjQgKTsKKworICAgIC8qIENoZWNrIGFuZCBnZXQgaW5mbyBzdHJ1Y3R1cmVzICovCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX2lkICk7CisgICAgVEVTVF9BU1NFUlQoIE5VTEwgIT0gY2lwaGVyX2luZm8gKTsKKworICAgIC8qIEluaXRpYWxpc2UgY29udGV4dCAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBjaXBoZXJfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4LCBrZXksIGtleV9sZW4sIE1CRURUTFNfRU5DUllQVCApICk7CisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORykKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfcGFkZGluZ19tb2RlKCAmY3R4LCBwYWRfbW9kZSApICk7CisjZWxzZQorICAgICh2b2lkKSBwYWRfbW9kZTsKKyNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORyAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9pdiggJmN0eCwgaXYsIDE2ICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmN0eCApICk7CisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eCwgTlVMTCwgMCApICk7CisjZW5kaWYKKworICAgIC8qIGVuY29kZSBsZW5ndGggbnVtYmVyIG9mIGJ5dGVzIGZyb20gaW5idWYgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgsIGluYnVmLCBsZW5ndGgsIGVuY2J1ZiwgJm91dGxlbiApICk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjdHgsIGVuY2J1ZiArIG91dGxlbiwgJm91dGxlbiApICk7CisKKyAgICAvKiBkb25lICovCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVjX2VtcHR5X2J1ZigpCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbMTZdOworCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eF9kZWM7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKworICAgIHVuc2lnbmVkIGNoYXIgZW5jYnVmWzY0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGRlY2J1Zls2NF07CisKKyAgICBzaXplX3Qgb3V0bGVuID0gMDsKKworICAgIG1lbXNldCgga2V5LCAwLCAzMiApOworICAgIG1lbXNldCggaXYgLCAwLCAxNiApOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eF9kZWMgKTsKKworICAgIG1lbXNldCggZW5jYnVmLCAwLCA2NCApOworICAgIG1lbXNldCggZGVjYnVmLCAwLCA2NCApOworCisgICAgLyogSW5pdGlhbGlzZSBjb250ZXh0ICovCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkMgKTsKKyAgICBURVNUX0FTU0VSVCggTlVMTCAhPSBjaXBoZXJfaW5mbyk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eF9kZWMsIGNpcGhlcl9pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eF9kZWMsIGtleSwgMTI4LCBNQkVEVExTX0RFQ1JZUFQgKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4X2RlYywgaXYsIDE2ICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY3R4X2RlYyApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkKCAmY3R4X2RlYywgTlVMTCwgMCApICk7CisjZW5kaWYKKworICAgIC8qIGRlY29kZSAwLWJ5dGUgc3RyaW5nICovCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4X2RlYywgZW5jYnVmLCAwLCBkZWNidWYsICZvdXRsZW4gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG91dGxlbiApOworICAgIFRFU1RfQVNTRVJUKCBNQkVEVExTX0VSUl9DSVBIRVJfRlVMTF9CTE9DS19FWFBFQ1RFRCA9PSBtYmVkdGxzX2NpcGhlcl9maW5pc2goCisgICAgICAgICAgICAgICAgICZjdHhfZGVjLCBkZWNidWYgKyBvdXRsZW4sICZvdXRsZW4gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG91dGxlbiApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHhfZGVjICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVuY19kZWNfYnVmX211bHRpcGFydCggaW50IGNpcGhlcl9pZCwgaW50IGtleV9sZW4sIGludCBmaXJzdF9sZW5ndGhfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWNvbmRfbGVuZ3RoX3ZhbCApCit7CisgICAgc2l6ZV90IGZpcnN0X2xlbmd0aCA9IGZpcnN0X2xlbmd0aF92YWw7CisgICAgc2l6ZV90IHNlY29uZF9sZW5ndGggPSBzZWNvbmRfbGVuZ3RoX3ZhbDsKKyAgICBzaXplX3QgbGVuZ3RoID0gZmlyc3RfbGVuZ3RoICsgc2Vjb25kX2xlbmd0aDsKKyAgICBzaXplX3QgYmxvY2tfc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVszMl07CisgICAgdW5zaWduZWQgY2hhciBpdlsxNl07CisKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4X2RlYzsKKyAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY3R4X2VuYzsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworCisgICAgdW5zaWduZWQgY2hhciBpbmJ1Zls2NF07CisgICAgdW5zaWduZWQgY2hhciBlbmNidWZbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgZGVjYnVmWzY0XTsKKworICAgIHNpemVfdCBvdXRsZW4gPSAwOworICAgIHNpemVfdCB0b3RhbG91dGxlbiA9IDA7CisKKyAgICBtZW1zZXQoIGtleSwgMCwgMzIgKTsKKyAgICBtZW1zZXQoIGl2ICwgMCwgMTYgKTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHhfZGVjICk7CisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eF9lbmMgKTsKKworICAgIG1lbXNldCggaW5idWYsIDUsIDY0ICk7CisgICAgbWVtc2V0KCBlbmNidWYsIDAsIDY0ICk7CisgICAgbWVtc2V0KCBkZWNidWYsIDAsIDY0ICk7CisKKyAgICAvKiBJbml0aWFsaXNlIGVuYyBhbmQgZGVjIGNvbnRleHRzICovCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX2lkICk7CisgICAgVEVTVF9BU1NFUlQoIE5VTEwgIT0gY2lwaGVyX2luZm8pOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHhfZGVjLCBjaXBoZXJfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHhfZW5jLCBjaXBoZXJfaW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRrZXkoICZjdHhfZGVjLCBrZXksIGtleV9sZW4sIE1CRURUTFNfREVDUllQVCApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4X2VuYywga2V5LCBrZXlfbGVuLCBNQkVEVExTX0VOQ1JZUFQgKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY3R4X2RlYywgaXYsIDE2ICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjdHhfZW5jLCBpdiwgMTYgKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfcmVzZXQoICZjdHhfZGVjICkgKTsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9yZXNldCggJmN0eF9lbmMgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eF9kZWMsIE5VTEwsIDAgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZV9hZCggJmN0eF9lbmMsIE5VTEwsIDAgKSApOworI2VuZGlmCisKKyAgICBibG9ja19zaXplID0gbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjdHhfZW5jICk7CisgICAgVEVTVF9BU1NFUlQoIGJsb2NrX3NpemUgIT0gMCApOworCisgICAgLyogZW5jb2RlIGxlbmd0aCBudW1iZXIgb2YgYnl0ZXMgZnJvbSBpbmJ1ZiAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmN0eF9lbmMsIGluYnVmLCBmaXJzdF9sZW5ndGgsIGVuY2J1ZiwgJm91dGxlbiApICk7CisgICAgdG90YWxvdXRsZW4gPSBvdXRsZW47CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4X2VuYywgaW5idWYgKyBmaXJzdF9sZW5ndGgsIHNlY29uZF9sZW5ndGgsIGVuY2J1ZiArIHRvdGFsb3V0bGVuLCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbG91dGxlbiArPSBvdXRsZW47CisgICAgVEVTVF9BU1NFUlQoIHRvdGFsb3V0bGVuID09IGxlbmd0aCB8fAorICAgICAgICAgICAgICAgICAoIHRvdGFsb3V0bGVuICUgYmxvY2tfc2l6ZSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxvdXRsZW4gPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbG91dGxlbiArIGJsb2NrX3NpemUgPiBsZW5ndGggKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY3R4X2VuYywgZW5jYnVmICsgdG90YWxvdXRsZW4sICZvdXRsZW4gKSApOworICAgIHRvdGFsb3V0bGVuICs9IG91dGxlbjsKKyAgICBURVNUX0FTU0VSVCggdG90YWxvdXRsZW4gPT0gbGVuZ3RoIHx8CisgICAgICAgICAgICAgICAgICggdG90YWxvdXRsZW4gJSBibG9ja19zaXplID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICB0b3RhbG91dGxlbiA+IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsb3V0bGVuIDw9IGxlbmd0aCArIGJsb2NrX3NpemUgKSApOworCisgICAgLyogZGVjb2RlIHRoZSBwcmV2aW91c2x5IGVuY29kZWQgc3RyaW5nICovCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4X2RlYywgZW5jYnVmLCB0b3RhbG91dGxlbiwgZGVjYnVmLCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbG91dGxlbiA9IG91dGxlbjsKKworICAgIFRFU1RfQVNTRVJUKCB0b3RhbG91dGxlbiA9PSBsZW5ndGggfHwKKyAgICAgICAgICAgICAgICAgKCB0b3RhbG91dGxlbiAlIGJsb2NrX3NpemUgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgIHRvdGFsb3V0bGVuIDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgdG90YWxvdXRsZW4gKyBibG9ja19zaXplID49IGxlbmd0aCApICk7CisKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZjdHhfZGVjLCBkZWNidWYgKyBvdXRsZW4sICZvdXRsZW4gKSApOworICAgIHRvdGFsb3V0bGVuICs9IG91dGxlbjsKKworICAgIFRFU1RfQVNTRVJUKCB0b3RhbG91dGxlbiA9PSBsZW5ndGggKTsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1lbWNtcChpbmJ1ZiwgZGVjYnVmLCBsZW5ndGgpICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eF9kZWMgKTsKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4X2VuYyApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBkZWNyeXB0X3Rlc3RfdmVjKCBpbnQgY2lwaGVyX2lkLCBpbnQgcGFkX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9rZXksIGNoYXIgKmhleF9pdiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2NpcGhlciwgY2hhciAqaGV4X2NsZWFyLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfYWQsIGNoYXIgKmhleF90YWcsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBmaW5pc2hfcmVzdWx0LCBpbnQgdGFnX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlbNTBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZbNTBdOworICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVyWzIwMF07CisgICAgdW5zaWduZWQgY2hhciBjbGVhclsyMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYWRbMjAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ1syMF07CisgICAgc2l6ZV90IGtleV9sZW4sIGl2X2xlbiwgY2lwaGVyX2xlbiwgY2xlYXJfbGVuOworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBzaXplX3QgYWRfbGVuLCB0YWdfbGVuOworI2VuZGlmCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMDBdOworICAgIHNpemVfdCBvdXRsZW4sIHRvdGFsX2xlbjsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldCgga2V5LCAweDAwLCBzaXplb2YoIGtleSApICk7CisgICAgbWVtc2V0KCBpdiwgMHgwMCwgc2l6ZW9mKCBpdiApICk7CisgICAgbWVtc2V0KCBjaXBoZXIsIDB4MDAsIHNpemVvZiggY2lwaGVyICkgKTsKKyAgICBtZW1zZXQoIGNsZWFyLCAweDAwLCBzaXplb2YoIGNsZWFyICkgKTsKKyAgICBtZW1zZXQoIGFkLCAweDAwLCBzaXplb2YoIGFkICkgKTsKKyAgICBtZW1zZXQoIHRhZywgMHgwMCwgc2l6ZW9mKCB0YWcgKSApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleSwgaGV4X2tleSApOworICAgIGl2X2xlbiA9IHVuaGV4aWZ5KCBpdiwgaGV4X2l2ICk7CisgICAgY2lwaGVyX2xlbiA9IHVuaGV4aWZ5KCBjaXBoZXIsIGhleF9jaXBoZXIgKTsKKyAgICBjbGVhcl9sZW4gPSB1bmhleGlmeSggY2xlYXIsIGhleF9jbGVhciApOworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBhZF9sZW4gPSB1bmhleGlmeSggYWQsIGhleF9hZCApOworICAgIHRhZ19sZW4gPSB1bmhleGlmeSggdGFnLCBoZXhfdGFnICk7CisjZWxzZQorICAgICgodm9pZCkgaGV4X2FkKTsKKyAgICAoKHZvaWQpIGhleF90YWcpOworI2VuZGlmCisKKyAgICAvKiBQcmVwYXJlIGNvbnRleHQgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfaWQgKSApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4LCBrZXksIDggKiBrZXlfbGVuLCBNQkVEVExTX0RFQ1JZUFQgKSApOworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcpCisgICAgaWYoIHBhZF9tb2RlICE9IC0xICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0X3BhZGRpbmdfbW9kZSggJmN0eCwgcGFkX21vZGUgKSApOworI2Vsc2UKKyAgICAodm9pZCkgcGFkX21vZGU7CisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcgKi8KKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZjdHgsIGl2LCBpdl9sZW4gKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3Jlc2V0KCAmY3R4ICkgKTsKKyNpZiBkZWZpbmVkKE1CRURUTFNfR0NNX0MpCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlX2FkKCAmY3R4LCBhZCwgYWRfbGVuICkgKTsKKyNlbmRpZgorCisgICAgLyogZGVjb2RlIGJ1ZmZlciBhbmQgY2hlY2sgdGFnICovCisgICAgdG90YWxfbGVuID0gMDsKKyAgICBURVNUX0FTU0VSVCggMCA9PSBtYmVkdGxzX2NpcGhlcl91cGRhdGUoICZjdHgsIGNpcGhlciwgY2lwaGVyX2xlbiwgb3V0cHV0LCAmb3V0bGVuICkgKTsKKyAgICB0b3RhbF9sZW4gKz0gb3V0bGVuOworICAgIFRFU1RfQVNTRVJUKCBmaW5pc2hfcmVzdWx0ID09IG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICsgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRsZW4gKSApOworICAgIHRvdGFsX2xlbiArPSBvdXRsZW47CisjaWYgZGVmaW5lZChNQkVEVExTX0dDTV9DKQorICAgIFRFU1RfQVNTRVJUKCB0YWdfcmVzdWx0ID09IG1iZWR0bHNfY2lwaGVyX2NoZWNrX3RhZyggJmN0eCwgdGFnLCB0YWdfbGVuICkgKTsKKyNlbmRpZgorCisgICAgLyogY2hlY2sgcGxhaW50ZXh0IG9ubHkgaWYgZXZlcnl0aGluZyB3ZW50IGZpbmUgKi8KKyAgICBpZiggMCA9PSBmaW5pc2hfcmVzdWx0ICYmIDAgPT0gdGFnX3Jlc3VsdCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggdG90YWxfbGVuID09IGNsZWFyX2xlbiApOworICAgICAgICBURVNUX0FTU0VSVCggMCA9PSBtZW1jbXAoIG91dHB1dCwgY2xlYXIsIGNsZWFyX2xlbiApICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0FFQUQgKi8KK3ZvaWQgYXV0aF9jcnlwdF90diggaW50IGNpcGhlcl9pZCwgY2hhciAqaGV4X2tleSwgY2hhciAqaGV4X2l2LAorICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfYWQsIGNoYXIgKmhleF9jaXBoZXIsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF90YWcsIGNoYXIgKmhleF9jbGVhciApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVs1MF07CisgICAgdW5zaWduZWQgY2hhciBpdls1MF07CisgICAgdW5zaWduZWQgY2hhciBjaXBoZXJbMjAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNsZWFyWzIwMF07CisgICAgdW5zaWduZWQgY2hhciBhZFsyMDBdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnWzIwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG15X3RhZ1syMF07CisgICAgc2l6ZV90IGtleV9sZW4sIGl2X2xlbiwgY2lwaGVyX2xlbiwgY2xlYXJfbGVuLCBhZF9sZW4sIHRhZ19sZW47CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMDBdOworICAgIHNpemVfdCBvdXRsZW47CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoIGtleSwgICAgMHgwMCwgc2l6ZW9mKCBrZXkgICAgKSApOworICAgIG1lbXNldCggaXYsICAgICAweDAwLCBzaXplb2YoIGl2ICAgICApICk7CisgICAgbWVtc2V0KCBjaXBoZXIsIDB4MDAsIHNpemVvZiggY2lwaGVyICkgKTsKKyAgICBtZW1zZXQoIGNsZWFyLCAgMHgwMCwgc2l6ZW9mKCBjbGVhciAgKSApOworICAgIG1lbXNldCggYWQsICAgICAweDAwLCBzaXplb2YoIGFkICAgICApICk7CisgICAgbWVtc2V0KCB0YWcsICAgIDB4MDAsIHNpemVvZiggdGFnICAgICkgKTsKKyAgICBtZW1zZXQoIG15X3RhZywgMHhGRiwgc2l6ZW9mKCBteV90YWcgKSApOworICAgIG1lbXNldCggb3V0cHV0LCAweEZGLCBzaXplb2YoIG91dHB1dCApICk7CisKKyAgICBrZXlfbGVuICAgICA9IHVuaGV4aWZ5KCBrZXksICAgIGhleF9rZXkgICAgICk7CisgICAgaXZfbGVuICAgICAgPSB1bmhleGlmeSggaXYsICAgICBoZXhfaXYgICAgICApOworICAgIGNpcGhlcl9sZW4gID0gdW5oZXhpZnkoIGNpcGhlciwgaGV4X2NpcGhlciAgKTsKKyAgICBhZF9sZW4gICAgICA9IHVuaGV4aWZ5KCBhZCwgICAgIGhleF9hZCAgICAgICk7CisgICAgdGFnX2xlbiAgICAgPSB1bmhleGlmeSggdGFnLCAgICBoZXhfdGFnICAgICApOworCisgICAgLyogUHJlcGFyZSBjb250ZXh0ICovCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX2lkICkgKSApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJmN0eCwga2V5LCA4ICoga2V5X2xlbiwgTUJFRFRMU19ERUNSWVBUICkgKTsKKworICAgIC8qIGRlY29kZSBidWZmZXIgYW5kIGNoZWNrIHRhZyAqLworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2F1dGhfZGVjcnlwdCggJmN0eCwgaXYsIGl2X2xlbiwgYWQsIGFkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXIsIGNpcGhlcl9sZW4sIG91dHB1dCwgJm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsIHRhZ19sZW4gKTsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3Qgb3ZlcndyaXRlICovCisgICAgVEVTVF9BU1NFUlQoIG91dHB1dFtvdXRsZW4gKyAwXSA9PSAweEZGICk7CisgICAgVEVTVF9BU1NFUlQoIG91dHB1dFtvdXRsZW4gKyAxXSA9PSAweEZGICk7CisKKyAgICAvKiBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgaXMgcmVqZWN0ZWQgaWYgaXQgc2hvdWxkIGJlICovCisgICAgaWYoIHN0cmNtcCggaGV4X2NsZWFyLCAiRkFJTCIgKSA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBvdGhlcndpc2UsIG1ha2Ugc3VyZSBpdCB3YXMgZGVjcnlwdGVkIHByb3Blcmx5ICovCisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CisKKyAgICBjbGVhcl9sZW4gPSB1bmhleGlmeSggY2xlYXIsICBoZXhfY2xlYXIgICApOworICAgIFRFU1RfQVNTRVJUKCBvdXRsZW4gPT0gY2xlYXJfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCBjbGVhciwgY2xlYXJfbGVuICkgPT0gMCApOworCisgICAgLyogdGhlbiBlbmNyeXB0IHRoZSBjbGVhciBhbmQgbWFrZSBzdXJlIHdlIGdldCB0aGUgc2FtZSBjaXBoZXJ0ZXh0IGFuZCB0YWcgKi8KKyAgICBtZW1zZXQoIG91dHB1dCwgMHhGRiwgc2l6ZW9mKCBvdXRwdXQgKSApOworICAgIG91dGxlbiA9IDA7CisKKyAgICByZXQgPSBtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQoICZjdHgsIGl2LCBpdl9sZW4sIGFkLCBhZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIsIGNsZWFyX2xlbiwgb3V0cHV0LCAmb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X3RhZywgdGFnX2xlbiApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG91dGxlbiA9PSBjbGVhcl9sZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBvdXRwdXQsIGNpcGhlciwgY2xlYXJfbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG15X3RhZywgdGFnLCB0YWdfbGVuICkgPT0gMCApOworCisgICAgLyogbWFrZSBzdXJlIHdlIGRpZG4ndCBvdmVyd3JpdGUgKi8KKyAgICBURVNUX0FTU0VSVCggb3V0cHV0W291dGxlbiArIDBdID09IDB4RkYgKTsKKyAgICBURVNUX0FTU0VSVCggb3V0cHV0W291dGxlbiArIDFdID09IDB4RkYgKTsKKyAgICBURVNUX0FTU0VSVCggbXlfdGFnW3RhZ19sZW4gKyAwXSA9PSAweEZGICk7CisgICAgVEVTVF9BU1NFUlQoIG15X3RhZ1t0YWdfbGVuICsgMV0gPT0gMHhGRiApOworCisKK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCB0ZXN0X3ZlY19lY2IoIGludCBjaXBoZXJfaWQsIGludCBvcGVyYXRpb24sIGNoYXIgKmhleF9rZXksCisgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2lucHV0LCBjaGFyICpoZXhfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgIGludCBmaW5pc2hfcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleVs1MF07CisgICAgdW5zaWduZWQgY2hhciBpbnB1dFsxNl07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRbMTZdOworICAgIHNpemVfdCBrZXlfbGVuOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMzJdOworICAgIHNpemVfdCBvdXRsZW47CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoIGtleSwgMHgwMCwgc2l6ZW9mKCBrZXkgKSApOworICAgIG1lbXNldCggaW5wdXQsIDB4MDAsIHNpemVvZiggaW5wdXQgKSApOworICAgIG1lbXNldCggcmVzdWx0LCAweDAwLCBzaXplb2YoIHJlc3VsdCApICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKKworICAgIC8qIFByZXBhcmUgY29udGV4dCAqLworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl9pZCApICkgKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5LCBoZXhfa2V5ICk7CisgICAgVEVTVF9BU1NFUlQoIHVuaGV4aWZ5KCBpbnB1dCwgaGV4X2lucHV0ICkgPT0KKyAgICAgICAgICAgICAgICAgKGludCkgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjdHggKSApOworICAgIFRFU1RfQVNTRVJUKCB1bmhleGlmeSggcmVzdWx0LCBoZXhfcmVzdWx0ICkgPT0KKyAgICAgICAgICAgICAgICAgKGludCkgbWJlZHRsc19jaXBoZXJfZ2V0X2Jsb2NrX3NpemUoICZjdHggKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY3R4LCBrZXksIDggKiBrZXlfbGVuLCBvcGVyYXRpb24gKSApOworCisgICAgVEVTVF9BU1NFUlQoIDAgPT0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY3R4LCBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmN0eCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm91dGxlbiApICk7CisgICAgVEVTVF9BU1NFUlQoIG91dGxlbiA9PSBtYmVkdGxzX2NpcGhlcl9nZXRfYmxvY2tfc2l6ZSggJmN0eCApICk7CisgICAgVEVTVF9BU1NFUlQoIGZpbmlzaF9yZXN1bHQgPT0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY3R4LCBvdXRwdXQgKyBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGxlbiApICk7CisgICAgVEVTVF9BU1NFUlQoIDAgPT0gb3V0bGVuICk7CisKKyAgICAvKiBjaGVjayBwbGFpbnRleHQgb25seSBpZiBldmVyeXRoaW5nIHdlbnQgZmluZSAqLworICAgIGlmKCAwID09IGZpbmlzaF9yZXN1bHQgKQorICAgICAgICBURVNUX0FTU0VSVCggMCA9PSBtZW1jbXAoIG91dHB1dCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2dldF9ibG9ja19zaXplKCAmY3R4ICkgKSApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX1dJVEhfUEFERElORyAqLwordm9pZCBzZXRfcGFkZGluZyggaW50IGNpcGhlcl9pZCwgaW50IHBhZF9tb2RlLCBpbnQgcmV0ICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV90eXBlKCBjaXBoZXJfaWQgKTsKKyAgICBURVNUX0FTU0VSVCggTlVMTCAhPSBjaXBoZXJfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldHVwKCAmY3R4LCBjaXBoZXJfaW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoICZjdHgsIHBhZF9tb2RlICkgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgY2hlY2tfcGFkZGluZyggaW50IHBhZF9tb2RlLCBjaGFyICppbnB1dF9zdHIsIGludCByZXQsIGludCBkbGVuX2NoZWNrICkKK3sKKyAgICBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgY2lwaGVyX2luZm87CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0WzE2XTsKKyAgICBzaXplX3QgaWxlbiwgZGxlbjsKKworICAgIC8qIGJ1aWxkIGEgZmFrZSBjb250ZXh0IGp1c3QgZm9yIGdldHRpbmcgYWNjZXNzIHRvIGdldF9wYWRkaW5nICovCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJmN0eCApOworICAgIGNpcGhlcl9pbmZvLm1vZGUgPSBNQkVEVExTX01PREVfQ0JDOworICAgIGN0eC5jaXBoZXJfaW5mbyA9ICZjaXBoZXJfaW5mbzsKKworICAgIFRFU1RfQVNTRVJUKCAwID09IG1iZWR0bHNfY2lwaGVyX3NldF9wYWRkaW5nX21vZGUoICZjdHgsIHBhZF9tb2RlICkgKTsKKworICAgIGlsZW4gPSB1bmhleGlmeSggaW5wdXQsIGlucHV0X3N0ciApOworCisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBjdHguZ2V0X3BhZGRpbmcoIGlucHV0LCBpbGVuLCAmZGxlbiApICk7CisgICAgaWYoIDAgPT0gcmV0ICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIGRsZW4gPT0gKHNpemVfdCkgZGxlbl9jaGVjayApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIuZ2NtLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmdjbS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2NiZTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLmdjbS5kYXRhCkBAIC0wLDAgKzEsNzAzIEBACitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODowOi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MTotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODoyOi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4Ojc6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6ODotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODo5Oi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODoxNTotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MTY6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjE3Oi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODozMTotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6MzI6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjMzOi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToiQUVTLTEyOC1HQ00iOjEyODo0NzotMQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006IkFFUy0xMjgtR0NNIjoxMjg6NDg6LTEKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOiJBRVMtMTI4LUdDTSI6MTI4OjQ5Oi0xCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToxMjg6MDowCisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOjEyODoxOjAKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006MTI4OjA6MQorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006MTI4OjE2OjAKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOjEyODowOjE2CisKK0FFUyAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTToxMjg6MTY6NgorCitBRVMgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006MTI4OjA6MjIKKworQUVTIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOjEyODoxNjoxNgorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiZDc4NWRhZmVhM2U5NjY3MzFlZjZmYzYyMDIyNjI1ODQiOiJkOTFhNDYyMDVlZTk0MDU4YjNiODQwMzk5NzU5MmRkMiI6IiI6IiI6IiI6IjNiOTJhMTdjMWI5YzM1NzhhNjhjZmZlYTVhNWI2MjQ1IjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006LTE6IjlhYjVjOGNhOTA1YjVmZTUwNDYxZjRhNjg5NDExNDRiIjoiOTZkZDM5MjdhOTZlMTYxMjNmMmU5ZDZiMzY3ZDMwM2YiOiIiOiIiOiIiOiI2ZTBjNTNlZiI6MDowCisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOi0xOiJiNWZjN2FmNjA1NzIxYTljZmU2MWMxZWU2YTRiM2UyMiI6IjZiNzU3ZDQwNTU4MjNkMTAzNWQwMTA3NzY2NjAzN2Q2IjoiIjoiIjoiIjoiZThjMDlkZGQiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOi0xOiIwM2MwYjRhNmU1MDhhODQ5MGRiMGQwODZhODJjOWRiNyI6ImFjNTJmNmMxYTA1MDMwMzIxZmEzOWY4N2U4OWZkYjVlIjoiIjoiIjoiMzMzMTZjYTc5ZDEwYTc5ZjRmZDAzODU5M2U4ZWVmMDk2MjUwODlkYzRlMGZmZTRiYzFmMjg3MTU1NGZhNjY2NmFiM2U3ZmU3ODg1ZWRlZjY5NGI0MTA0NTZmM2VjMGU1MTNiYjI1ZjFiNDhkOTVlNDgyMGM1OTcyYzFhYWJiMjVjODRjMDg1NjYwMDJkYWRjMzZkZjMzNGMxY2U4Njg0Nzk2NGExMjIwMTZkMzg5YWM4NzNiY2E4YzMzNWE3YTk5YmNlZjkxZTFiOTg1YWU1ZDQ4OGEyZDdmNzhiNGJmMTRlMGMyZGM3MTVlODE0ZjRlMjQyNzYwNTdjZjY2ODE3MiI6Ijc1NjI5MmQ4YjQ2NTM4ODdlZGVmNTE2NzliMTYxODEyIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiMmJjNzNmYmE5NDJmZjEwNTgyM2I1ZGNjZjZiZWZiMWMiOiI5MDJjM2UzYjY5YjFlZjgzOTVkNzI4MWZmNzRjY2UzOCI6IiI6IiI6IjRhZGVjMGI0YWMwMDMyNWE4NjAwNDRkOWY5NTE5ZGFhNGY3YzE2MzIyOWE3NTgxOWIwZmQ3ZDhlMjMzMTlmMDMwZTYxZGZhOGVhZGFiZmY0MmVhMjdiYzM2YmRiNmNhZDI0OWU4MDFjYTYzMWI2NTY4MzY0NDhiNzE3MmMxMTEyNmJhZDI3ODFlNmExYWE0ZjYyYzRlZGE1MzQwOTQwOGIwMDhjMDU3ZTBiODEyMTVjYzEzZGRhYmJiOGYxOTE1ZjRiYmFiODU0ZjhiMDA3NjNhNTMwYWQ1MDU1ZDI2NTc3OGNkMzA4MGQwYmQzNWI3NmEzMjliZGQ1YjVhMmQyNjgiOiJlYmRkN2M4ZTg3ZmU3MzMxMzhhNDMzNTQzNTQyZDEiOjA6MAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiMGRkMzU4YmMzZjk5MmYyNmU4MWUzYTJmM2FhMmQ1MTciOiJkOGM3NTBiYjQ0M2VlMWExNjlkZmU5N2NmZTRkODU1YiI6Ijg3Y2M0ZmQ3NTc4OGM5ZDVjYzgzYmFlNWQ3NjRkZDI0OWQxNzhhYjIzMjI0MDQ5Nzk1ZDQyODhiNWVkOWVhM2YzMTcwNjhhMzlhNzU3NGIzMDBjODU0NDIyNmU4N2IwOGUwMDhmYmUyNDFkMDk0NTQ1YzIxMWQ1NmFjNDQ0MzdkNDE0OTFhNDM4MjcyNzM4OTY4YzhkMzcxYWE3Nzg3YjVmNjA2Yzg1NDlhOWQ4NjhkOGE3MTM4MGU5NjU3ZDNjMDMzNzk3OWZlYjAxZGU1OTkxZmMxNDcwZGZjNTllYjAyNTExZWZiYmZmM2ZjYjQ3OWE4NjJiYTM4NDRhMjVhYWEiOiI3Nzk0OWIyOWYwODViYjNhYmI3MWE1Mzg2MDAzODExMjMzMDU2ZDMyOTZlYjA5MzM3MGY3Nzc3ZGFkZDMwNmQ5M2Q1OWRjYjk3NTRkMzg1N2NmMjc1ODA5MWJhNjYxZjg0NWVmMDU4MmY2YWUwZTEzNDMyODEwNmYwZDVkMTZiNTQxY2Q3NGZkYzc1NmRjN2I1M2Y0ZjhhMTk0ZGFlZWE5MzY5ZWJiMTYzMGMwMWNjYjMwN2I4NDhlOTUyN2RhMjBhMzk4OThkNzQ4ZmQ1OTIwNmYwYjc5ZDBlZDk0NmE4OTU4MDMzYTQ1YmQ5YWU2NzM1MThiMzI2MDY3NDhlYjY1IjoiIjoiYTgxZDEzOTczYmFhMjJhNzUxODMzZDdkM2Y5NGIzYjEiOjA6MAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0dDTTotMToiOWE0MzNjNjEyZDdlMWJkZmY4ODFlNGQ2M2JhOGIxNDEiOiI4YjY3MGNmMzFmNDcwZjc5YTZjMGI3OWU3Mzg2M2NhMSI6ImNlMTA3NTgzMzJmNDIzMjI4YjVlNGFlMzFlZmRhNzY3NzU4NjkzNGExZDhmMDVkOWI3YTBkYzRlMjAxMGVjM2VhYWNiNzFhNTI3YTVmZmY4ZTc4N2Q3NWViZDI0YWQxNjMzOTRjODkxYjMzNDc3ZWQ5ZTJhMmQ4NTNjMzY0Y2IxYzVkMGJjMzE3ZmNhZjQwMTA4MTdkYmU1ZjFmZDEwMzdjNzAxYjI5MWIzYTY2YjE2NGJjODE4YmY1YzAwYTRjMjEwYTE2NzFmYWE1NzRkNzRjN2YzNTQzZjZjMDlhYWYxMTdlMTJlMmViM2RhZTU1ZWRiMWNjNWI0MDg2YjYxN2QiOiIiOiIiOiI4NTI2ZmQyNWRhZjg5MGU3OTk0NmEyMDViNjk4ZjI4NyI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjOAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9HQ006LTE6IjY5ZWVkZjM3NzdlNTk0YzMwZTk0ZTljNWUyYmNlNDY3IjoiYTMzMzA2MzhhODA5YmEzNThkNmMwOThlNDM0MmI4MWUiOiI1MTE0ZTk5ODNjOTZmZWNlYzNmNzMwNGNhNDJmNTJhYTE2Y2I3YzZhYWRmYjYyYWQ1MzdjOTNhMzE4ODgzNWNhMDcwM2RhZDM0YzczY2Y5NjQzNWI2NjhiNjhhN2ExZDA1NjkzMTk1OTMxNmU4ZDNhYjk1NmJmNjRjNGUwNzQ3OWM3NzY3ZjlkNDg4YjBjMGMzNTEzMzNjY2Y0MDBiN2UwYmUxOWEwZmQxNzNlM2YyYTFhZTMxM2YyN2U1MTY5NTIyNjBmZDJkYTlhYjlkYWNhNDc4ZWJiOTNjZDA3ZDBiNzUwM2IzMjM2NGQ4ZTMwOGQ5MDRkOTY2YzU4ZjIyNmJiIjoiMjA4ZTYzMjEyMzhiZjVjNmUyZWY1NWE0YjhmNTMxY2JiZmIwZDc3Mzc0ZmUzMmRmNmRkNjYzNDg2Y2Y3OWJlZWVkMzliYjY5MTBjM2M3OGRkMGNjMzA3MDdhMGExMmIyMjZiMmQwNjAyNGRiMjVkY2Q4YTRlNjIwZjAwOWNhZmE1MjQyMTIxZTg2NGM3ZjNmNDM2MGFhZjFlOWQ0ZTU0OGQ5OTYxNTE1NmYxNTYwMDg0MThjMWM0MWZmMmJiYzAwN2NlY2Y4ZjIwOWM3MzIwM2U2ZGY4OWIzMjg3MWRlNjM3YjNkNmFmMmUyNzdkMTQ2YWUwM2YzNDA0ZDM4N2I3NyI6ImRmNGUzZjJiNDdjZjBlODU5MDIyOGZjZjk5MTNmYjhhNWViOTc1MWJiYTMxOGZkMmQ1N2JlNjhjN2U3ODhlMDRmYWJmMzAzNjk5Yjk5ZjI2MzEzZDFjNDk1NjEwNWNkMjgxN2FhZDIxYjkxYzI4ZjNiOTI1MWU5YzBiMzU0NDkwZmE1YWJmY2VhMDA2NWFhM2NjOWI5Njc3MmViOGFmMDZhMWE5MDU0YmYxMmQzYWU2OThkZmIwMWExM2Y5ODlmOGI4YTRiYjYxNjg2Y2YzYWRmNThmMDU4NzNhMjRkNDAzYTYyYTA5MjI5MGMyNDgxZTQxNTk1ODhmZWE2YjlhMDkiOiI1ZGUzMDY4ZTFlMjBlZWQ0NjkyNjUwMDAwNzdiMWRiOSI6MDowCisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzkKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfR0NNOi0xOiI0NWNjMzUzMTFlZWRmMGJhMDkzYmY5MDE5MzFhNzAzNiI6ImZlZDUwODRkZTNjMzQ4ZjVhMGFkZjRjMmZkNGU4NDhhIjoiNWRjOGQ3NTI1ZWFhZDAzNWMxOTcxNGFlMWIxZTUzOGNiNjZhNDA4OTAyNzI0NTM1MWUwYWQ5Mjk3NDEwZmIzYTBjMTE1NTQwN2MxMGE4YmI5NWE5Y2E2MjRhOWM5OTI1ZGFjMDAzZWU3ODkyNmM2ZTkwZmY0Y2NkYmExMGU4YTc4YmRhMWM0NDc4MTYyYTBlMzAyZGU1ZmYwNWZiMGY5NGM4OWMzYzc0MjlmYjk0ODI4YmRjZDk3ZDIxMzMzYzJlZTcyOTYzZWU2ZjA1NmNlMjcyYjhiYWIwMDdlNjUzYTQyYjAxZDFkMjA0MWJhNjI3ZjE2OWM4YzBkMzJlNmRhZSI6IiI6IjZlMjEwOTE0ZTRhZWQxODhkNTc2ZjVhZDdmYzdlNGNmN2RkOGQ4MmYzNGVhM2JjYmRiNzI2N2NmZDkwNDVmODA2OTc4ZGJmZjM0NjBjNGU4ZmY4YzRlZGI2YWQyZWRiYTQwNWE4ZDkxNTcyOWQ4OWFhYjIxMTZiMzZhNzBiNTRmNTkyMGE5N2Y1YTU3MTk3N2UwMzI5ZWRhNmM2OTY3NDliZTk0MGVhYmZjNmQ4YjBiYmQ2ZmJkYjg3NjU3YjNhNzY5NWRhOWY1ZDNhNzM4NDI1N2YyMGUwYmVjZDg1MTJkMzcwNWNjMjQ2ZWU2Y2ExZTYxMDkyMWNmOTI2MDNkNzkiOiIyNjZhODk1ZmMyMWRhNTE3NmI0NGI0NDZkN2QxOTIxZCI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6MDotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjE6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6MjotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5Mjo3Oi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjg6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6OTotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6MTU6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjE2Oi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5MjoxNzotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6MzE6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjMyOi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5MjozMzotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006IkFFUy0xOTItR0NNIjoxOTI6NDc6LTEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOiJBRVMtMTkyLUdDTSI6MTkyOjQ4Oi0xCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToiQUVTLTE5Mi1HQ00iOjE5Mjo0OTotMQorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006MTkyOjA6MAorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToxOTI6MTowCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOjE5MjowOjEKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOjE5MjoxNjowCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToxOTI6MDoxNgorCitBRVMgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006MTkyOjE2OjYKKworQUVTIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOjE5MjowOjIyCisKK0FFUyAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTToxOTI6MTY6MTYKKworQUVTIDE5MiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9HQ006LTE6IjgwNjc2NmE0ZDJiNjUwN2NjNDExM2JjMGU0NmVlYmUxMjBlYWNkOTQ4YzI0ZGM3ZiI6IjRmODAxYzc3MjM5NWM0NTE5ZWM4MzA5ODBjOGNhNWE0IjoiIjoiIjoiIjoiOGZhMTY0NTJiMTMyYmViYzZhYTUyMWU5MmNiM2IwZWEiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOi0xOiJiZTJmMGY0YWU0YWI4NTFiMjU4ZWM1NjAyNjI4ZGYyNjFiNmE2OWUzMDlmZjkwNDMiOiI2NDZhOTFkODNhZTcyYjliOWU5ZmNlNjQxMzVjYmY3MyI6IiI6IiI6IiI6IjE2OWU3MTdlMmJhZTQyZTNlYjYxZDBhMWEyOWIiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOi0xOiIxZWI1M2FhNTQ4YjQxYmZkYzg1YzY1N2ViZGViZGFlMGM3ZTUyNWE2NDMyYmMwMTIiOiIzN2ZmYzY0ZDRiMmQ5YzgyZGQxN2QxYWQzMDc2ZDgyYiI6IiI6IiI6IiI6IjM0YjhlMDM3MDg0YjNmMmQiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOi0xOiJjNmE5ODEwMmFmM2Q4NzViY2RlYmU1OTQ2NjFkM2E2YjM3Njk3MGMwMmIxMWQwMTkiOiJiZWE4Y2Q4NWEyOGEyYzA1YmY3NDA2YjhlZWYxZWZjYyI6IiI6IiI6ImYyZjgwZTJjMDQyMDkyY2M3MjQwYjU5OGFiMzBmYWQwNTViY2U4NTQwOGFhMGY4Y2VmYWY4YTcyMDRmMGUyYWNiODdjNzhmNDZhNTg2N2IxZjFjMTk0NjFjYmY1ZWQ1ZDJjYTIxYzk2YTYzZmIxZjQyZjEwZjM5NDk1MmU2MzUyMDc5NWM1NmRmNzdkNmEwNGNiNWFkMDA2ZWU4NjVhNDdkYzIzNDlhODE0YTYzMGIzZDRjNGUwZmQxNDlmNTFlOGZhODQ2NjU2ZWE1NjlmZDI5YTFlYmFmYzA2MTQ0NmViODBlYzE4MmY4MzNmMWY2ZDkwODM1NDVhYmY1MmZhNGMiOiIwNGI4MGYyNWFlOWQwN2Y1ZmQ4MjIwMjYzYWMzZjJmNyI6MDowCisKK0FFUyAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18xOTJfR0NNOi0xOiJhMjQ5MTM1YzlmMmY1YThiMWFmNjY0NDJhNGQ0ZTEwMTc3MWE5MThlZjhhY2VlMDUiOiI4MGI2ZTQ4ZmU0YTNiMDhkNDBjMTYzNmIyNWRmZDJjNCI6ImM2MmIzOWI5MzdlZGJkYzliNjQ0MzIxZDVkMjg0ZTYyZWFhNDE1NDAxMGM3YTMyMDhjMWVmNDcwNmZiYTkwMjIzZGEwNGIyZjY4NmEyOGI5NzVlZmYxNzM4NjU5OGJhNzdlMjEyODU1NjkyZjM4NDc4MmMxZjNjMDBiZTAxMWU0NjZlMTQ1ZjZmOGI2NWM0NThlNDE0MDllMDFhMDE5YjI5MDc3Mzk5MmUxOTMzNGZmYWNhNTQ0ZTI4ZmM5MDQ0YTVlODZiY2QyZmE1YWQyZTc2ZjJiZTNmMDE0ZDhjMzg3NDU2YThmY2ZkZWQzYWU0ZDExOTRkMGUzZTUzYTIwMzEiOiJiODY1ZjhkZDY0YTZmNTFhNTAwYmNmYzhjYWRiYzllOWY1ZDU0ZDJkMjdkODE1ZWNmZTNkNTczMWUxYjIzMGM1ODdiNDY5NThjNjE4N2U0MWI1MmZmMTg3YTE0ZDI2YWE0MWM1Zjk5MDlhM2I3Nzg1OTQyOTIzMmU1YmQ2YzZkYzIyY2Y1NTkwNDAyNDc2ZDAzM2EzMjY4MmU4YWI4ZGM3ZWQwYjA4OWM1YWIyMGFiOWE4YzVkNmEzYmU5ZWE3YWE1NmM5ZDNhYjA4ZGU0YTRhMDE5YWJiNDQ3ZGI0NDgwNjJmMTZhNTMzZDQxNjk1MWE4ZmY2ZjEzZWQ1NjA4Zjc3IjoiIjoiOTUxYzFjODliNmQ5NTY2MTYzMGQ3MzlkZDkxMjBhNzMiOjA6MAorCitBRVMgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMTkyX0dDTTotMToiMjNjMjAxOTY4ZGVmNTUxODE3ZjIwZTQ5YjA5ZGJiNWFhZTAwMzMzMDViZWY2OGEwIjoiYmQyOTUyZDIxNWFlZDVlOTE1ZDg2M2U3Zjc2OTZiM2UiOiI3N2JjOGFmNDJkMWI2NGVlMzkwMTJkZjVmYzMzYzU1NGFmMzJiZmVmNmQ5MTgyODA0ZGNmZTM3MGRmYzRiOWQwNTliZGJjNTVmNmJhNGVhY2I4ZTNhNDkxZDk2YTY1MzYwZDc5MDg2NGJhNjBhY2YxYTYwNWY2YjI4YTY1OTE1MTNlYTNjZmQ3NjhmZjQ3YWVlMjQyYThlOWJkZmFjMzk5YjQ1MjIzMWJmZDU5ZDgxYzliOTFmOGRjNTg5YWQ3NTFkOGY5ZmRhZDAxZGQwMDYzMWYwY2I1MWNiMDI0ODMzMmYyNDE5NGI1NzdlNTU3MWNlYjVjMDM3YTZkMGJjZmU4IjoiMTdkOTNjOTIxMDA5YzZiMGIzZWNmMjQzZDA4YjcwMTQyMjk4M2YyZGNhZWM5YzhkNzYwNGEyZDU1NjVlZDk2Y2U1Y2RkY2IxODNjZDU4ODJmOGQ2MWQzMjAyYzkwMTVkMjA3ZmVkMTZhNGMxMTk1YmE3MTI0MjhjNzI3NjAxMTM1MzE1ZmM1MDRlODBjMjUzYzNhMmU0YTU1OTNmYzZjNGEyMDZlZGNlMWZkNzEwNGU4YTg4ODM4NWJiYjM5NmQzY2RmMWViMmIyYWE0ZDBjOWU0NTQ1MWU5OTU1MGQ5Y2ZhMDVhYWZlNmU3YjUzMTljNzNjMzNmZDZmOThkYjNjNSI6IjIzZjM1ZmFjNTgzODk3NTE5Yjk0OTk4MDg0YWQ2ZDc3NjY2ZTEzNTk1MTA5ZTg3NDYyNWJjNmNjYzZkMGM3ODE2YTYyZDY0YjAyZTY3MGZhNjY0ZTNiYjUyYzI3NmIxYmFmYmViNDRlNWY5Y2MzYWUwMjhkYWYxZDc4NzM0NDQ4MmYzMWZjZTVkMjgwMDAyMDczMmIzODFhOGIxMWM2ODM3ZjQyODIwNGI3ZWQyZjRjNDgxMDA2N2YyZDRkYTk5OTg3YjY2ZTY1MjVmYzZiOTIxN2E4ZjY5MzNmMTY4MWI3Y2ZhODU3ZTEwMmY2MTZhN2M4NGFkYzJmNjc2ZTNhOGYiOiJiYjliYTNhOWFjN2Q2M2U2N2JkNzhkNzFkYzMxMzNiMyI6MDowCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjA6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjoxOi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjI6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6NzotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1Njo4Oi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2Ojk6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjE1Oi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjoxNjotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6MTc6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjMxOi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1NjozMjotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6MzM6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOiJBRVMtMjU2LUdDTSI6MjU2OjQ3Oi0xCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToiQUVTLTI1Ni1HQ00iOjI1Njo0ODotMQorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006IkFFUy0yNTYtR0NNIjoyNTY6NDk6LTEKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOjI1NjowOjAKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006MjU2OjE6MAorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToyNTY6MDoxCisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToyNTY6MTY6MAorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006MjU2OjA6MTYKKworQUVTIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOjI1NjoxNjo2CisKK0FFUyAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTToyNTY6MDoyMgorCitBRVMgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006MjU2OjE2OjE2CisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOi0xOiIyYzE4NjY1NDQwNmIyYjkyYzk2MzlhNzE4OWQ0YWI1YWIwYjliYjg3YzQzMDA1MDI3ZjNmYTgzMmZkMzUwN2IxIjoiM2EwMzI0ZDYzYTcwNDAwNDkwYzkyZTc2MDRhM2JhOTciOiIiOiIiOiIiOiI0YzYxY2QyZTI4YTEzZDc4YTRlODdlYTczNzRkZDAxYSI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006LTE6ImM4YWUwMTE3OTVjOWE2MGFkNzY2MGEzMWZlMzU0ZmE2ZjdlOWMyNzI0ZDdhMTI2NDM2MjkxNjgwY2Q5NWMwMDciOiIxYmQ5ZWE2MTg2NDUwZjljZDI1M2NjZmVkMjgxMmIxYyI6IiI6IiI6IiI6IjM1MjE0YmJjNTEwNDMwZTMiOjA6MAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTTotMToiNDQ5ZDM5Zjg2M2U0OTA5OTg0YjM3ZjJlNWMwOWVhNGQ0YjNlOWZhYzY3YmQ1N2MyOTllNGUxZDFmMDg0YWFhMyI6ImQ4ZTkxMThmMzMxYmI1YTM1OWYwYWE4ODgyODYxYjcyIjoiIjoiIjoiNGRkY2FlMGJjMjRkNjIyZTEyYmRlYWFjNzNlOGQxYWI3OTU3YWYwNTFkMjdkZmFhZmNlNTNhZWVkNGNkZDNmOTg5ZWEyNTk4OWEyZjQxY2ZiM2MzOGRiZDg0MWM1NTYwYjBiNWFiMTg2MWIxZmJjZDIzNjg2NWQxM2RhNTViNTAyMTk0NjJlMDIxZjhhMjE4NDhhNjRhODUzMjYwMzFmY2VjOGZlNDdhNmVmNGE0MzVkZDJiMmZmZjYzNzY0NGZmY2YzOTE0ZWYyZGZhNWRkNTU2NDIxYmZkMjk3YmUxNTBiMzFkYjAzOWYwZjJjYzQyMmIyODJlNjU5ZTcwY2NlYiI6ImM1OTViOWQ5OTQxNDg5MTIyOGM5ZmE1ZWRiNWZjY2UzIjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006LTE6IjFhMWJiOTEyMmU3NjJlY2Q3ZmY4NjFhMWQ2NWU1MjYwN2Q5OGU3YWU1YmQxYzNhOTQ0ZTQ0MzcxMGYzYjA1OTkiOiIzMmY5OWVhNGNiZjUyYzI3MDFjMjI1MmU1ZTZjODYzZCI6IiI6IiI6IjkxYjdhNzBjM2EwNmMxZjdmMmVhNTg0YWNiNWRkNzYxNzdiYTA3MzIzYzk0ZjJlOGY3Y2JlOTNmYzBiYjdjMzg5YzNjODhlMTZhYTUzMTc0ZjBmYzM3M2JjNzc4YTZjY2Y5MWJmNjFiNmU5MmMyOTY5ZDM0NDFlYjE3YTBhODM1ZDMwZGNmODgyNDcyYTZkM2NiMDM2NTMzYjA0ZDc5ZjA1ZWJmYWFkZjIyMWFlMWMxNGFmM2YwMmZhNDE4NjdhY2ZkZmEzNWY4MWU4YTlkMTFkNDJiOWE2MzI4OGM3NTkwNjNjMGMzMDQwYzNlNmVlNjljZjdjNzVmOWMzM2ZlYTEiOiJhOGUyOWUwODYyM2EzZWZkYmJlOGIxMTFkZTMwYTQiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0FFUyAxMjggR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0FFU18yNTZfR0NNOi0xOiJmMTA5NjVhNjYyNTVmMGMzNTE1YWY0OTdjY2JiMjU3YTA5ZjIyZWMyZDU3YzVlZGFlMzIyYTNlNmQyZDE4OGVmIjoiYzU3MWNlMGU5MTFkZTVkODgzZGM0YTA3ODc0ODMyMzUiOiI5MTU5ODY5MGVkZjJkZThiMjdmOWJjNzQ2MWE4NGU4MDgxMWNlZTU0NGYwNTQyOTIzODk4MzI4Y2YxNTc1OTAyNTFmMDM0MmNiODFkMzU5YjVkY2NjNTM5MWExMjMyMGQxNDQ0YzI2ZjI0MTc4OTc3ZGQ2NzA1YzJiMzY1ZGMxZWNlMDE1MmM0MmUyZjBlZTMxNjJjZjg4NmVmNTUyOWY0ZjE2YTc3ZjNiZGQyYWVjY2Q0MDViNTlhZGRmMDk4NTIxZDBkMzhjYzI1ZjE5OTFlMTFiZTdlY2YyNGNhZWRiNDhhMmEyODZkMmU1NjBhMzhmYTkwMDFjNWEyMjhjNGQxIjoiMjg2Nzk5NmUzODllMDllYzBkYTk0ZDQyZTc3YjFlNDM2YjUwMDY1YjA5Y2E0YWRmMWNkMDMyNDA0NDRlZTY5OWRiYjdiM2ZjMDgxYTE4NjljYTYwN2Q3N2Q1ZmY5NzU0ZmMzYzk5N2ZmMGE0ZWUxNzU0M2EyYmE3Nzg4NmI4OGE3MTI4YmNjNTFkMzQ1MGRmNThmZjNhMjY2NzFiMDJjMWQyMTNkZjZhZGI2ZjdlODUzMDgwZWI0NmI1MDQ1MTdjYmFlYTE2MjcxMGE5YmJjMmRhOGI1NTJlYjZiMGUwY2I5OGU0NGZjYWIwYTE1NzMxMmJlNjc5NzQ2NzhkMTQzZSI6IiI6IjZkOWQzYTVkYmM4ZGNlMzg1ZjA5MmZmZjE0YmZmZmRhIjowOjAKKworQUVTIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9HQ006LTE6IjQxMDNiMWRkZmY4N2E1MDhhMjE5YzgwOGEwNGFkNDc1MDY2ODY4OGY0YzJlZTc1YjkyZDI4ZDcwYjk4YTJjOTQiOiI1Y2VhOTA2NzM3NTE4YzJjYjkwMTAxNmUzMDIwNjI3NiI6ImEwMGExOTYxOTNmZjA3MDA2YjdkZjUyNDgyNGJkMDk3MWQ2M2Y0NDdhM2E3YmIxYjc1YzFlMmQxMTc4OTQ4MmMxMTVjZmY2NzdiNTQ5NDhkMzZkYzRkZTM0MjAwYmNlOTdiZTAxMDFkODhjZWUzOWIxNzc4NTdkZDVkYTNjYjBkMmY5ZDZlMTE1MGY3MmEzYmQ2NTVlMGJhY2UxZDI1YTY1N2JhOWE3ZjhkZmYwODJiNDQ2MDQzMjA3NWFmYjIwMTczZGEyMmI0OWJlZWI2YTAzMGQ3MmJhMDc4NjlmZjQzODlmYzFjMjhkODcwMThkN2MxYTk4MjljMjE5MzIxOTciOiIiOiIiOiIzYTNhNzcxZGQ1ZjMxYzk3N2UxNTRlZjVjNzNhIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM2CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTTotMToiZGY4NjdkMWRkOGEyODc4MjFhNTQ0NzljYWI2Zjg4NjM2ZDJhY2EzMGUxYmYwMWE1ZGZmYzczNWUxNzU5MDM1NiI6IjM1MDE5ODI2YzUxZGQxZWYwN2ZmOTE1ZDlhYzRlYTk2IjoiNjUxNzI3MmNhYzg1ZDdmMzg5MDJiY2I0Yjk2YTBjNTljNGJkYzQ2YmZlZmE2ZWJhY2Q3ZjJmYjE2MjliODdjYTkxZGUyZmZlZmM0MmNlM2NmZDM0ZGNiZjAxYjNmN2NhZGNlYTNmOTllNmFkZGYzNWQzNmM1MWYyY2ViMWY4NWMxZjU2YTA0ZWM5YzlmZmY2MGNkN2ZjMjM4Njc0OTkyMTgzZWEzZGU3MmVmNzc4NTYxYjkwNjIwMmI3YjgzZmU2NTYyYTBiY2E5YzFlMGExODYzOGU4Njg1Yjk5OGI0MTkyZjUxMjA0MzU4MDlhZDZlOTNhMDQyMmQwMDcyNTI2MiI6IjcyM2JlMzliYzEzYWRiYzQ4Yzg2MWIwNzc1M2Y2NGZhYzFhZTI4ZmM4OTMzYWNiYTg4OGI2NTM4NzIxZGYwYThiOTFjMDQwYTI2NTIyZmUwZGJiNzMzNWQ4ZjYzZDIwOWU4OWY3Y2RlMjNhZmE5Y2EzYzU4NGIzMzZkNjNhOTFlMDdmZGQ4ODA4YjE0YzMyMTRjOTZhMjAyZTY2NWJiYWFhMzQyNDhmZjMwMzQ4ZjNkNzljOWYxNmU2NmFkNmM1OTAzMzA1YWNkODg3YTg5YjYyNDRlYjdjMmQ5NmUxOGIxM2E2ODZkZTkzNWJmMzgyMTQ0NGVlMjBmNDg2NzhiZTUiOiIwMzc1ZWQ5M2YyODdlZWZlNDE0YWIyOTY4ODQ0YmQxMDE0ODg2MGM1MjhkYmY1NzFhNzdhYTc0Zjk4Y2M2NjlhN2ZjMzE3YWRjOWY3Y2YyZDgwZGRhMjliMTlkYjYzNWIzMGEwNDQzOTlmMzY2NWI2MTc2ZWQ2NjkxNDZkMjhmNWFkYTAzYjNkMzJkNTNmZTQ2NTc1YThhZmNkMzdmMjAzODZkOWUzNmY3ZTA5MGI0ZmVmYWRmYWI3ZjAwOGUwMmYxYjUwMjJjMGVlYjgxZDAzNDQzYTI3NmVhZTQ4YzAzOGVkMTczNjMxNjg3ZDI0NTBiOTEzYjAyYzk3MjQzZWRiIjoiZTQ5YmViMDgzYTliMDA4YWU5N2ExN2UzODI1NjkyZjAiOjA6MAorCitBRVMgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM3CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9BRVNfMjU2X0dDTTotMToiODg2Yzc3YjgwZjVmM2EyMWMwMTkzMjY4NWE1NDBiMjM2MjlmNmQ0MWQ1NTc0ZmM1MjcyMjdlZDBiZGYyZTIxYiI6IjVlYzUwNmVkYjE4OTBhNWE2M2I0NjQ0OTA0NTBkNDE5IjoiNTNhMTdkN2I2OWY2MDdmMDg2NzZkNmY2ZGQ0ZThkYjA4ZTAxMzMzYTgzNTVkOGM4NzYxNmU4NGNkZjEwZWY1YjA0MWZjNmRkYzNmNmEyNDVjMGY1MzRjMmIxNjcwNjRhZjgyZjQ1ZTQ3MDJhNWU4ZGVkZTU5NTc5ZmRlY2Y2NzEzMzUzMzkyNDMzOTUwYzliOTdjMzhkOWVlNTE1YWM5N2QwOTcwY2NmMDM5ODE5NTQ1NDAwODg1NjdhMzA5NDFiYjJjY2EwOGNiZWQ2ODA1MDBmODM0MmZhYTdhZWJiYzZjMTQzZTJlYTU3YmE2YjRhYzFmZDk3NWRjYzVkMDg3MSI6Ijc5ZWUyN2FkZmE5Njk4YTk3ZDIxN2M1MDEwZWM4MDc4MDZmZWRhMzdkYjgxMWUzOThjM2I4MmFiZjY5OGFlY2UwODU2MWZmZmM2YzYwMWQyNjkxNzM4ZTI3OWVlYjU3ZTU4MDRlMTQwNWE5OTEzODMwZTNiYTBkN2I5NzkyMTNlZjQwZDczM2ExOTQ5N2Q0YmIxYjhiMmM2MDlhOGY5MDRlMjk3NzFmYTIzMGMzOWE0OGViYjhjMzM3NmYwN2M4MDEzZmZmNmUzNGYxMGZlNTM5ODhhNmVjODdhOTI5NmMwYTdjZmJhNzY5YWRlZmU1OTllYzY2NzEwMTI5NjU5NzMiOiIwNWI4ZDgyMGM5ZjQzOWQ3YWVhZTVjN2RhMGVlMjVmYjBkYWQ0N2NjM2U2ZjNhNDdlOGI5ODRlODU2MjAxNTQ2OTc1ZjgyMTQ1MzFmYzNjMmU1MDRkMmFjMTBmYTQ5Y2I5NDg1OTZiOWE4ZmFiMDFiOTVjNDlkNmYwNGQxNTg5ZjkzYjc3Yjg5OWU4MDNkZDIwZTFmMDBhNTFjMGI1OTUzZTg1YmU2MzkxMDliMTRiMTAwZTM1Y2EyNmQ4NGVhNjI5OTY0YjBkYjgyNjBkZmE1YTE1MGE2NjI2MWJmMzdlNzlkZTJlYzQ5ZTlmMWIwODJhN2M1OGVjZDNkMzliNmM5IjoiZmZkZjU2ZTFjMWE3MjUyYjg4NDIyNzg3NTM2NDg0IjowOjAKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODowOi0xCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODoxOi0xCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6MjotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToiQ0FNRUxMSUEtMTI4LUdDTSI6MTI4Ojc6LTEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODo4Oi0xCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOiJDQU1FTExJQS0xMjgtR0NNIjoxMjg6OTotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODoxNTotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODoxNjotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODoxNzotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzEgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODozMTotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODozMjotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODozMzotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODo0NzotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODo0ODotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006IkNBTUVMTElBLTEyOC1HQ00iOjEyODo0OTotMQorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006MTI4OjA6MAorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToxMjg6MTowCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOjEyODowOjEKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOjEyODoxNjowCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToxMjg6MDoxNgorCitDQU1FTExJQSAxMjggR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006MTI4OjE2OjYKKworQ0FNRUxMSUEgMTI4IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOjEyODowOjIyCisKK0NBTUVMTElBIDEyOCBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0dDTToxMjg6MTY6MTYKKworQ0FNRUxMSUEgMTI4IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICMxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9HQ006LTE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiIjoiIjoiZjU1NzRhY2MzMTQ4ZGZjYjkwMTUyMDA2MzEwMjRkZjgiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0NBTUVMTElBIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOi0xOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImRlZmUzZTBiNWM1NGM5NGI0ZjJhMGY1YTQ2ZjYyMTBkIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiJmNjcyYjk0ZDE5MjI2NmM3YzhjOGRiYjQyN2NjOTg5YSI6MDowCisKK0NBTUVMTElBIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OSI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNjE0YmFiODE1IjoiIjoiIjoiODZlMzE4MDEyZGQ4MzI5ZGM5ZGFlNmExNzBmNjFiMjQiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0NBTUVMTElBIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNiI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiI5ZjQ1ODg2OTQzMTU3NmVhNmEwOTU0NTZlYzZiODEwMSI6MDowCisKK0NBTUVMTElBIDEyOCBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjNQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImNhZmViYWJlZmFjZWRiYWQiOiIyOGZkNzQzNGQ1Y2Q0MjRhNTM1MzgxOGZjMjFhOTgyNDYwZDIwY2Y2MzJlYjFlNmM0ZmJmY2ExN2Q1YWJjZjZhNTIxMTEwODYxNjJmZTk1NzBlNzc3NGM3YTkxMmFjYTNkZmExMDA2N2RkYWFkNDA2ODg2NDViZGQiOiIiOiJmZWVkZmFkZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiZTg2ZjhmMmU3MzBjNDlkNTM2ZjAwZmI1MjI1ZDI4YjEiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MDotMQorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MTotMQorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjI6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDcgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006IkNBTUVMTElBLTE5Mi1HQ00iOjE5Mjo3Oi0xCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6ODotMQorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToiQ0FNRUxMSUEtMTkyLUdDTSI6MTkyOjk6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MTU6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MTY6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MTc6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MzE6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MzI6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6MzM6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6NDc6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6NDg6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOiJDQU1FTExJQS0xOTItR0NNIjoxOTI6NDk6LTEKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDAgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOjE5MjowOjAKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006MTkyOjE6MAorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToxOTI6MDoxCisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToxOTI6MTY6MAorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006MTkyOjA6MTYKKworQ0FNRUxMSUEgMTkyIEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOjE5MjoxNjo2CisKK0NBTUVMTElBIDE5MiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTToxOTI6MDoyMgorCitDQU1FTExJQSAxOTIgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006MTkyOjE2OjE2CisKK0NBTUVMTElBIDE5MiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOi0xOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOiIiOiJiYTlhZTg5ZmRkY2U0YjUxMTMxZTE3YzRkNjVjZTU4NyI6MDowCisKK0NBTUVMTElBIDE5MiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xOTJfR0NNOi0xOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI4ZjljMGFhMjU0OTcxNGM4OGJiMjY2NWU4YWY4NmQ0MiI6IiI6IiI6Ijc4M2NmZjVjNWFjYTcxOTczMjA2NThhNzQyNzlhYjM3IjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitDQU1FTExJQSAxOTIgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTkyX0dDTTotMToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiMGYwMDllODg0MTBkODRhZDkzYzkwZDU1ZWZiZTIwZmZhODU1NDkyZjRkZmQwZmI0ODVjNGYwMmY1MzZmZWZmYmI0ZDk2NzcyOWU1YzY3ZjFkZTA3NTAyNTVjYzUwMDcxNmJhNDgzZWIzYjBhMmJmNjA3YWYyOGY2YTYwYmIyZTkiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NSI6IiI6IjhkNjQ1YTBiMGU0OGQzYzNiNjBhMDE0MTU3Y2I0OWI0IjowOjAKKworQ0FNRUxMSUEgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006LTE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNiI6IiI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiIxMWIxNWJiNWFiNmZhYzBjNDIyMDE0ZTkxZWFjYmYyYiI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQ0FNRUxMSUEgMTkyIEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzE5Ml9HQ006LTE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6ImNhZmViYWJlZmFjZWRiYWQiOiI2NzhiM2RjYjI3MGZhYTIwNmRjNWY2ZmJiNTAxNDk5NmU4NmQ2ZjNlMzVjZGNkZmViMDNiMzdiOWIwNmZmNGZmMjY4MjI0ODgyM2JkM2M4NDEyNGRjNzZhZjdiZGUzZGQ0NDBjMjI4YjVlZmJjNzk1ZGQ4MGRmYjYiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiZjg3NjE0M2Q5MzMyMTRhNTAzNWZmMGJiOTZmZjY1MGIiOjA6MAorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjA6LTEKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjE6LTEKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1NjoyOi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA3IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOiJDQU1FTExJQS0yNTYtR0NNIjoyNTY6NzotMQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgOCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2Ojg6LTEKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006IkNBTUVMTElBLTI1Ni1HQ00iOjI1Njo5Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjE1Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjE2Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjE3Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjMxOi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjMyOi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAzMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjMzOi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjQ3Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjQ4Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCA0OSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToiQ0FNRUxMSUEtMjU2LUdDTSI6MjU2OjQ5Oi0xCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAwIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToyNTY6MDowCisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOjI1NjoxOjAKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDEgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006MjU2OjA6MQorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTYgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006MjU2OjE2OjAKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOjI1NjowOjE2CisKK0NBTUVMTElBIDI1NiBHQ00gRW5jcnlwdCBhbmQgZGVjcnlwdCAyMiBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTToyNTY6MTY6NgorCitDQU1FTExJQSAyNTYgR0NNIEVuY3J5cHQgYW5kIGRlY3J5cHQgMjIgYnl0ZXMgaW4gbXVsdGlwbGUgcGFydHMgMgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZW5jX2RlY19idWZfbXVsdGlwYXJ0Ok1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006MjU2OjA6MjIKKworQ0FNRUxMSUEgMjU2IEdDTSBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOjI1NjoxNjoxNgorCitDQU1FTExJQSAyNTYgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTTotMToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6IiI6IjljZGIyNjliNWQyOTNiYzVkYjljNTViMDU3ZDliNTkxIjowOk1CRURUTFNfRVJSX0NJUEhFUl9BVVRIX0ZBSUxFRAorCitDQU1FTExJQSAyNTYgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTTotMToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjNkNGIyY2RlNjY2NzYxYmE1ZGZiMzA1MTc4ZTY2N2ZiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIyODRiNjNiYjE0M2M0MGNlMTAwZmI0ZGVhNmJiNjE3YiI6MDowCisKK0NBTUVMTElBIDI1NiBHQ00gRGVjcnlwdCB0ZXN0IHZlY3RvciAjMworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19HQ01fQworZGVjcnlwdF90ZXN0X3ZlYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfR0NNOi0xOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiYWQxNDJjMTE1NzlkZDk1ZTQxZjNjMWYzMjRkYWJjMjU1ODY0ZDkyMGYxYjY1NzU5ZDhmNTYwZDQ5NDlkNDQ3NzU4ZGZkY2Y3N2FhOWY2MjU4MWM3ZmY1NzJhMDM3ZjgxMGNiMWE5YzRiM2NhNmVkNjM4MTc5Yjc3NjU0OWUwOTIiOiIiOiIiOiJjOTEyNjg2MjcwYTJiOTk2NjQxNWZjYTNiZTc1YzQ2OCI6MDpNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQKKworQ0FNRUxMSUEgMjU2IEdDTSBEZWNyeXB0IHRlc3QgdmVjdG9yICM0CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX0dDTV9DCitkZWNyeXB0X3Rlc3RfdmVjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzI1Nl9HQ006LTE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiJhZDE0MmMxMTU3OWRkOTVlNDFmM2MxZjMyNGRhYmMyNTU4NjRkOTIwZjFiNjU3NTlkOGY1NjBkNDk0OGQ0NDc3NThkZmRjZjc3YWE5ZjYyNTgxYzdmZjU3MmEwMzdmODEwY2IxYTljNGIzY2E2ZWQ2MzgxNzliNzciOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiNGU0YjE3OGQ4ZmUyNmZkYzk1ZTJlNzI0NmRkOTRiZWMiOjA6MAorCitDQU1FTExJQSAyNTYgR0NNIERlY3J5cHQgdGVzdCB2ZWN0b3IgIzUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfR0NNX0MKK2RlY3J5cHRfdGVzdF92ZWM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMjU2X0dDTTotMToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImNhZmViYWJlZmFjZWRiYWQiOiI2Y2E5NWZiYjdkMTY1NzdhOWVmMmZkZWQ5NGRjODViNWQ0MGM2MjlmNmJlZjJjNjQ5ODg4ZTNjYmIwZWRlZGM3ODEwYzA0YjEyYzI5ODNiYmJiYzQ4MmUxNmU0NWM5MjE1YWUxMmMxNWM1NWYyZjQ4MDlkMDY2NTIiOiIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiZTY0NzJiOGViZDMzMWJmY2M3YzBmYTYzY2UwOTQ0NjIiOjA6TUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLm51bGwuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIubnVsbC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWU5NzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLm51bGwuZGF0YQpAQCAtMCwwICsxLDk1IEBACitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDowOi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjE6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6MjotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgNyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDo3Oi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCA4IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjg6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDkgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6OTotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6MTU6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjE2Oi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAzMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDozMTotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMzIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6MzI6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMzIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjMzOi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCA0NyBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUgorZW5jX2RlY19idWY6TUJFRFRMU19DSVBIRVJfTlVMTDoiTlVMTCI6MDo0NzotMQorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgNDggYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmOk1CRURUTFNfQ0lQSEVSX05VTEw6Ik5VTEwiOjA6NDg6LTEKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDQ5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1ZjpNQkVEVExTX0NJUEhFUl9OVUxMOiJOVUxMIjowOjQ5Oi0xCisKK05VTEwgRW5jcnlwdCBhbmQgZGVjcnlwdCAxIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTowOgorCitOVUxMIEVuY3J5cHQgYW5kIGRlY3J5cHQgMSBieXRlcyBpbiBtdWx0aXBsZSBwYXJ0cyAyCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitlbmNfZGVjX2J1Zl9tdWx0aXBhcnQ6TUJFRFRMU19DSVBIRVJfTlVMTDowOjA6MToKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTY6MDoKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDIKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MDoxNjoKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDMKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MToxNToKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDE2IGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDQKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTU6MToKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTU6NzoKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTY6NjoKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDIyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTc6NjoKKworTlVMTCBFbmNyeXB0IGFuZCBkZWNyeXB0IDMyIGJ5dGVzIGluIG11bHRpcGxlIHBhcnRzIDEKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTlVMTF9DSVBIRVIKK2VuY19kZWNfYnVmX211bHRpcGFydDpNQkVEVExTX0NJUEhFUl9OVUxMOjA6MTY6MTY6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmcuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jaXBoZXIucGFkZGluZy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZmMyNjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2lwaGVyLnBhZGRpbmcuZGF0YQpAQCAtMCwwICsxLDIzNCBAQAorQ2lwaGVyIGxpc3QKK21iZWR0bHNfY2lwaGVyX2xpc3Q6CisKK0NpcGhlciBudWxsL3VuaW5pdGlhbGlzZWQgYXJndW1lbnRzCitjaXBoZXJfbnVsbF9hcmdzOgorCitTZXQgcGFkZGluZyB3aXRoIEFFUy1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfUEtDUzc6MAorCitTZXQgcGFkZGluZyB3aXRoIEFFUy1DRkIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DRkIxMjg6TUJFRFRMU19QQURESU5HX1BLQ1M3Ok1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorCitTZXQgcGFkZGluZyB3aXRoIEFFUy1DVFIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DVFI6TUJFRFRMU19QQURESU5HX1BLQ1M3Ok1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorCitTZXQgcGFkZGluZyB3aXRoIENBTUVMTElBLUNCQworZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX1BBRERJTkdfUEtDUzc6MAorCitTZXQgcGFkZGluZyB3aXRoIENBTUVMTElBLUNGQgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DRkIxMjg6TUJFRFRMU19QQURESU5HX1BLQ1M3Ok1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorCitTZXQgcGFkZGluZyB3aXRoIENBTUVMTElBLUNUUgorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK3NldF9wYWRkaW5nOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DVFI6TUJFRFRMU19QQURESU5HX1BLQ1M3Ok1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQQorCitTZXQgcGFkZGluZyB3aXRoIERFUy1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9ERVNfQ0JDOk1CRURUTFNfUEFERElOR19QS0NTNzowCisKK1NldCBwYWRkaW5nIHdpdGggQkxPV0ZJU0gtQ0JDCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6TUJFRFRMU19QQURESU5HX1BLQ1M3OjAKKworU2V0IHBhZGRpbmcgd2l0aCBCTE9XRklTSC1DRkIKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DRkI2NDpNQkVEVExTX1BBRERJTkdfUEtDUzc6TUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBCisKK1NldCBwYWRkaW5nIHdpdGggQkxPV0ZJU0gtQ1RSCitkZXBlbmRzX29uOk1CRURUTFNfQkxPV0ZJU0hfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfQkxPV0ZJU0hfQ1RSOk1CRURUTFNfUEFERElOR19QS0NTNzpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworU2V0IHBhZGRpbmcgd2l0aCBOVUxMCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX05VTExfQ0lQSEVSCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9OVUxMOk1CRURUTFNfUEFERElOR19QS0NTNzpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworU2V0IG5vbi1leGlzdGVudCBwYWRkaW5nIHdpdGggQUVTLUNCQworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzotMTpNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitTZXQgbm9uLWV4aXN0ZW50IHBhZGRpbmcgd2l0aCBDQU1FTExJQS1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOi0xOk1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK1NldCBub24tZXhpc3RlbnQgcGFkZGluZyB3aXRoIERFUy1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworc2V0X3BhZGRpbmc6TUJFRFRMU19DSVBIRVJfREVTX0NCQzotMTpNQkVEVExTX0VSUl9DSVBIRVJfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitTZXQgbm9uLWV4aXN0ZW50IHBhZGRpbmcgd2l0aCBCTE9XRklTSC1DQkMKK2RlcGVuZHNfb246TUJFRFRMU19CTE9XRklTSF9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitzZXRfcGFkZGluZzpNQkVEVExTX0NJUEhFUl9CTE9XRklTSF9DQkM6LTE6TUJFRFRMU19FUlJfQ0lQSEVSX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworQ2hlY2sgUEtDUyBwYWRkaW5nICMxIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwNDA0MDQwNCI6MDo0CisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjMiAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDEiOjA6NAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzMgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAxMDEiOjA6NQorCitDaGVjayBQS0NTIHBhZGRpbmcgIzQgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiIwMzAzMDMiOjA6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzUgKG51bGwgcGFkZGluZykKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDAiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzYgKHRvbyBmZXcgcGFkZGluZyBieXRlcykKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDIiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzEpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAzMDIwMyI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjNyAobm9uLXVuaWZvcm0gcGFkZGluZyBieXRlcyAjMikKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDMwMTAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICMzKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMzA3MDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAzMGIwMyI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjNyAobm9uLXVuaWZvcm0gcGFkZGluZyBieXRlcyAjNSkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDMxMzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICM2KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMzIzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzcpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1BLQ1M3OiJEQUJCQUQwMDAzNDIwMyI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzowCisKK0NoZWNrIFBLQ1MgcGFkZGluZyAjNyAobm9uLXVuaWZvcm0gcGFkZGluZyBieXRlcyAjOCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19QS0NTNworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfUEtDUzc6IkRBQkJBRDAwMDM4MzAzIjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgUEtDUyBwYWRkaW5nICM3IChub24tdW5pZm9ybSBwYWRkaW5nIGJ5dGVzICM5KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMjAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzEwKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwMTAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzExKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwNzAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzEyKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAwYjAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzEzKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAxMzAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzE0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDAyMzAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzE1KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDA0MjAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzcgKG5vbi11bmlmb3JtIHBhZGRpbmcgYnl0ZXMgIzE2KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiREFCQkFEMDA4MzAzMDMiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayBQS0NTIHBhZGRpbmcgIzggKG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3CitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19QS0NTNzoiMDQwNDA0IjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgb25lIGFuZCB6ZXJvcyBwYWRkaW5nICMxIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IkRBQkJBRDAwODAiOjA6NAorCitDaGVjayBvbmUgYW5kIHplcm9zIHBhZGRpbmcgIzIgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUzoiREFCQkFEMDA4MDAwIjowOjQKKworQ2hlY2sgb25lIGFuZCB6ZXJvcyBwYWRkaW5nICMzIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IkRBQkJBRDAwODAwMDAwIjowOjQKKworQ2hlY2sgb25lIGFuZCB6ZXJvcyBwYWRkaW5nICM0IChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IkRBQkJBRDAwODA4MDAwIjowOjUKKworQ2hlY2sgb25lIGFuZCB6ZXJvcyBwYWRkaW5nICM1IChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX09ORV9BTkRfWkVST1M6IjgwMDAwMCI6MDowCisKK0NoZWNrIG9uZSBhbmQgemVyb3MgcGFkZGluZyAjNiAobWlzc2luZyBvbmUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUzoiREFCQkFEMDAwMCI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzo0CisKK0NoZWNrIG9uZSBhbmQgemVyb3MgcGFkZGluZyAjNyAob3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfT05FX0FORF9aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfT05FX0FORF9aRVJPUzoiMDAwMDAwMDAwMCI6TUJFRFRMU19FUlJfQ0lQSEVSX0lOVkFMSURfUEFERElORzo0CisKK0NoZWNrIHplcm9zIGFuZCBsZW4gcGFkZGluZyAjMSAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOOiJEQUJCQUQwMDAxIjowOjQKKworQ2hlY2sgemVyb3MgYW5kIGxlbiBwYWRkaW5nICMyIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TX0FORF9MRU4KK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX1pFUk9TX0FORF9MRU46IkRBQkJBRDAwMDAwMiI6MDo0CisKK0NoZWNrIHplcm9zIGFuZCBsZW4gcGFkZGluZyAjMyAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOOiJEQUJCQUQwMDAwMDMiOjA6MworCitDaGVjayB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcgIzQgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTjoiMDAwMDAzIjowOjAKKworQ2hlY2sgemVyb3MgYW5kIGxlbiBwYWRkaW5nICM1IChvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19aRVJPU19BTkRfTEVOOiIwMDAwMDQiOk1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX1BBRERJTkc6MAorCitDaGVjayB6ZXJvcyBhbmQgbGVuIHBhZGRpbmcgIzYgKG5vdCBlbm91Z2ggemVyb3MpCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1NfQU5EX0xFTgorY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1NfQU5EX0xFTjoiREFCQkFEMDAwMDA0IjpNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOjAKKworQ2hlY2sgemVyb3MgcGFkZGluZyAjMSAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1M6IkRBQkJBRDAwIjowOjMKKworQ2hlY2sgemVyb3MgcGFkZGluZyAjMiAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1M6IkRBQkJBRDAwMDAiOjA6MworCitDaGVjayB6ZXJvcyBwYWRkaW5nICMzIChjb3JyZWN0KQorZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9QQURESU5HX1pFUk9TCitjaGVja19wYWRkaW5nOk1CRURUTFNfUEFERElOR19aRVJPUzoiREFCQkFEIjowOjMKKworQ2hlY2sgemVyb3MgcGFkZGluZyAjNCAoY29ycmVjdCkKK2RlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPUworY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfWkVST1M6IjAwMDAwMCI6MDowCisKK0NoZWNrIG5vIHBhZGRpbmcgIzEgKGNvcnJlY3QgYnkgZGVmaW5pdGlvbikKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX05PTkU6IkRBQkJBRDAwIjowOjQKKworQ2hlY2sgbm8gcGFkZGluZyAjMiAoY29ycmVjdCBieSBkZWZpbml0aW9uKQorY2hlY2tfcGFkZGluZzpNQkVEVExTX1BBRERJTkdfTk9ORToiREFCQkFEMDAwMSI6MDo1CisKK0NoZWNrIG5vIHBhZGRpbmcgIzMgKGNvcnJlY3QgYnkgZGVmaW5pdGlvbikKK2NoZWNrX3BhZGRpbmc6TUJFRFRMU19QQURESU5HX05PTkU6IiI6MDowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY21hYy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NtYWMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGI3NjA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NtYWMuZGF0YQpAQCAtMCwwICsxLDY0IEBACitDTUFDIHNlbGYgdGVzdAorbWJlZHRsc19jbWFjX3NlbGZfdGVzdDoKKworQ01BQyBudWxsIGFyZ3VtZW50cworbWJlZHRsc19jbWFjX251bGxfYXJnczoKKworQ01BQyBpbml0ICMxIEFFUy0xMjg6IE9LCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY21hY19zZXRrZXk6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6MTI4OjAKKworQ01BQyBpbml0ICMyIEFFUy0xOTI6IE9LCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY21hY19zZXRrZXk6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6MTkyOjAKKworQ01BQyBpbml0ICMzIEFFUy0yNTY6IE9LCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY21hY19zZXRrZXk6TUJFRFRMU19DSVBIRVJfQUVTXzI1Nl9FQ0I6MjU2OjAKKworQ01BQyBpbml0ICM0IDNERVMgOiBPSworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DCittYmVkdGxzX2NtYWNfc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0VDQjoxOTI6MAorCitDTUFDIGluaXQgIzUgQUVTLTIyNDogYmFkIGtleSBzaXplCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK21iZWR0bHNfY21hY19zZXRrZXk6TUJFRFRMU19DSVBIRVJfSURfQUVTOjIyNDpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworQ01BQyBpbml0ICM2IEFFUy0wOiBiYWQga2V5IHNpemUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworbWJlZHRsc19jbWFjX3NldGtleTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6MDpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworQ01BQyBpbml0ICM3IENhbWVsbGlhOiB3cm9uZyBjaXBoZXIKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCittYmVkdGxzX2NtYWNfc2V0a2V5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOjEyODpNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEKKworQ01BQyBTaW5nbGUgQmxvY2tzICMxIC0gRW1wdHkgYmxvY2ssIG5vIHVwZGF0ZXMKK21iZWR0bHNfY21hY19tdWx0aXBsZV9ibG9ja3M6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoxMjg6MTY6IiI6LTE6IiI6LTE6IiI6LTE6IiI6LTE6ImJiMWQ2OTI5ZTk1OTM3Mjg3ZmEzN2QxMjliNzU2NzQ2IgorCitDTUFDIFNpbmdsZSBCbG9ja3MgIzIgLSBTaW5nbGUgMTYgYnl0ZSBibG9jaworbWJlZHRsc19jbWFjX211bHRpcGxlX2Jsb2NrczpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOjEyODoxNjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOjE2OiIiOi0xOiIiOi0xOiIiOi0xOiIwNzBhMTZiNDZiNGQ0MTQ0Zjc5YmRkOWRkMDRhMjg3YyIKKworQ01BQyBTaW5nbGUgQmxvY2tzICMzIC0gU2luZ2xlIDY0IGJ5dGUgYmxvY2sKK21iZWR0bHNfY21hY19tdWx0aXBsZV9ibG9ja3M6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoxMjg6MTY6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIjo2NDoiIjotMToiIjotMToiIjotMToiNTFmMGJlYmY3ZTNiOWQ5MmZjNDk3NDE3NzkzNjNjZmUiCisKK0NNQUMgTXVsdGlwbGUgQmxvY2tzICMxIC0gTXVsdGlwbGUgOCBieXRlIGJsb2NrcworbWJlZHRsc19jbWFjX211bHRpcGxlX2Jsb2NrczpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0VDQjoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOjEyODoxNjoiNmJjMWJlZTIyZTQwOWY5NiI6ODoiZTkzZDdlMTE3MzkzMTcyYSI6ODoiIjotMToiIjotMToiMDcwYTE2YjQ2YjRkNDE0NGY3OWJkZDlkZDA0YTI4N2MiCisKK0NNQUMgTXVsdGlwbGUgQmxvY2tzICMyIC0gTXVsdGlwbGUgMTYgYnl0ZSBibG9ja3MKK21iZWR0bHNfY21hY19tdWx0aXBsZV9ibG9ja3M6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoxMjg6MTY6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIjoxNjoiYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEiOjE2OiIzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZiI6MTY6ImY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIjoxNjoiNTFmMGJlYmY3ZTNiOWQ5MmZjNDk3NDE3NzkzNjNjZmUiCisKK0NNQUMgTXVsdGlwbGUgQmxvY2tzICMzIC0gTXVsdGlwbGUgdmFyaWFibGUgc2l6ZWQgYmxvY2tzCittYmVkdGxzX2NtYWNfbXVsdGlwbGVfYmxvY2tzOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfRUNCOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6MTI4OjE2OiI2YmMxYmVlMjJlNDA5Zjk2Ijo4OiJlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YyI6MTY6IjllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZiI6MjQ6ImY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIjoxNjoiNTFmMGJlYmY3ZTNiOWQ5MmZjNDk3NDE3NzkzNjNjZmUiCisKK0NNQUMgTXVsdGlwbGUgQmxvY2tzICM0IC0gTXVsdGlwbGUgOCBieXRlIGJsb2NrcyB3aXRoIGdhcHMKK21iZWR0bHNfY21hY19tdWx0aXBsZV9ibG9ja3M6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0I6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoxMjg6MTY6IiI6MDoiNmJjMWJlZTIyZTQwOWY5NiI6ODoiIjowOiJlOTNkN2UxMTczOTMxNzJhIjo4OiIwNzBhMTZiNDZiNGQ0MTQ0Zjc5YmRkOWRkMDRhMjg3YyIKKworQ01BQyBNdWx0aXBsZSBPcGVyYXRpb25zLCBzYW1lIGtleSAjMSAtIEVtcHR5LCBlbXB0eQorbWJlZHRsc19jbWFjX211bHRpcGxlX29wZXJhdGlvbnNfc2FtZV9rZXk6TUJFRFRMU19DSVBIRVJfQUVTXzE5Ml9FQ0I6IjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJmOGVhZDI1MjJjNmI3YiI6MTkyOjE2OiIiOi0xOiIiOi0xOiIiOi0xOiJkMTdkZGY0NmFkYWFjZGU1MzFjYWM0ODNkZTdhOTM2NyI6IiI6LTE6IiI6LTE6IiI6LTE6ImQxN2RkZjQ2YWRhYWNkZTUzMWNhYzQ4M2RlN2E5MzY3IgorCitDTUFDIE11bHRpcGxlIE9wZXJhdGlvbnMsIHNhbWUga2V5ICMyIC0gRW1wdHksIDY0IGJ5dGUgYmxvY2sKK21iZWR0bHNfY21hY19tdWx0aXBsZV9vcGVyYXRpb25zX3NhbWVfa2V5Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOiI4ZTczYjBmN2RhMGU2NDUyYzgxMGYzMmI4MDkwNzllNTYyZjhlYWQyNTIyYzZiN2IiOjE5MjoxNjoiIjotMToiIjotMToiIjotMToiZDE3ZGRmNDZhZGFhY2RlNTMxY2FjNDgzZGU3YTkzNjciOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCI6NjQ6IiI6LTE6IiI6LTE6ImExZDVkZjBlZWQ3OTBmNzk0ZDc3NTg5NjU5ZjM5YTExIgorCitDTUFDIE11bHRpcGxlIE9wZXJhdGlvbnMsIHNhbWUga2V5ICMzIC0gdmFyaWFibGUgYnl0ZSBibG9ja3MKK21iZWR0bHNfY21hY19tdWx0aXBsZV9vcGVyYXRpb25zX3NhbWVfa2V5Ok1CRURUTFNfQ0lQSEVSX0FFU18xOTJfRUNCOiI4ZTczYjBmN2RhMGU2NDUyYzgxMGYzMmI4MDkwNzllNTYyZjhlYWQyNTIyYzZiN2IiOjE5MjoxNjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFhZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0NWFmOGU1MSI6MzI6IjMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFhMGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiOjMyOiIiOi0xOiJhMWQ1ZGYwZWVkNzkwZjc5NGQ3NzU4OTY1OWYzOWExMSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEiOjMyOiIzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIjozMjoiIjotMToiYTFkNWRmMGVlZDc5MGY3OTRkNzc1ODk2NTlmMzlhMTEiCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jbWFjLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NtYWMuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMWFiMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jbWFjLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMzEwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY21hYy5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19DTUFDX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgbWJlZHRsc19jbWFjX3NlbGZfdGVzdCggKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NtYWNfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NtYWNfbnVsbF9hcmdzKCApCit7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIHVuc2lnbmVkIGNoYXIgdGVzdF9rZXlbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworICAgIHVuc2lnbmVkIGNoYXIgdGVzdF9kYXRhW01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKyAgICB1bnNpZ25lZCBjaGFyIHRlc3Rfb3V0cHV0W01CRURUTFNfQ0lQSEVSX0JMS1NJWkVfTUFYXTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHggKTsKKworICAgIC8qIFRlc3QgTlVMTCBjaXBoZXIgaW5mbyAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwgdGVzdF9kYXRhLCAxNiApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19DSVBIRVJfQUVTXzEyOF9FQ0IgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjdHgsIGNpcGhlcl9pbmZvICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfc3RhcnRzKCBOVUxMLCB0ZXN0X2tleSwgMTI4ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoICZjdHgsIE5VTEwsIDEyOCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCBOVUxMLCB0ZXN0X2RhdGEsIDE2ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsIE5VTEwsIDE2ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goIE5VTEwsIHRlc3Rfb3V0cHV0ICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goICZjdHgsIE5VTEwgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3Jlc2V0KCBOVUxMICkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hYyggTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9rZXksIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RhdGEsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWMoIGNpcGhlcl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2tleSwgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DSVBIRVJfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9rZXksIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOCggTlVMTCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhLCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY21hY19wcmZfMTI4KCB0ZXN0X2tleSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRVJSX0NJUEhFUl9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NtYWNfcHJmXzEyOCggdGVzdF9rZXksIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ0lQSEVSX0JBRF9JTlBVVF9EQVRBICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NtYWNfc2V0a2V5KCBpbnQgY2lwaGVyX3R5cGUsIGludCBrZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVszMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XTsKKworICAgIG1lbXNldCgga2V5LCAweDJBLCBzaXplb2YoIGtleSApICk7CisgICAgVEVTVF9BU1NFUlQoICh1bnNpZ25lZCkga2V5X3NpemUgPD0gOCAqIHNpemVvZigga2V5ICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCAoIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3R5cGUoIGNpcGhlcl90eXBlICkgKQorICAgICAgICAgICAgICAgICAgICAhPSBOVUxMICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgyQSwgc2l6ZW9mKCBidWYgKSApOworICAgIFRFU1RfQVNTRVJUKCAoIHJlc3VsdCA9PSBtYmVkdGxzX2NpcGhlcl9jbWFjKCBjaXBoZXJfaW5mbywga2V5LCBrZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMTYsIHRtcCApICkgIT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NtYWNfbXVsdGlwbGVfYmxvY2tzKCBpbnQgY2lwaGVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmtleV9zdHJpbmcsIGludCBrZXliaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2sxX3N0cmluZywgaW50IGJsb2NrMV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrMl9zdHJpbmcsIGludCBibG9jazJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpibG9jazNfc3RyaW5nLCBpbnQgYmxvY2szX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2s0X3N0cmluZywgaW50IGJsb2NrNF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4cGVjdGVkX3Jlc3VsdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9jazFbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrMlsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2szWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9jazRbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGV4cGVjdGVkX3Jlc3VsdFsxMDBdOworICAgIGNvbnN0IG1iZWR0bHNfY2lwaGVyX2luZm9fdCAqY2lwaGVyX2luZm87CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtNQkVEVExTX0NJUEhFUl9CTEtTSVpFX01BWF07CisKKyAgICAvKiBDb252ZXJ0IHRoZSB0ZXN0IHBhcmFtZXRlcnMgdG8gYmluYXJ5IGRhdGEgKi8KKyAgICB1bmhleGlmeSgga2V5LCBrZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGJsb2NrMSwgYmxvY2sxX3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBibG9jazIsIGJsb2NrMl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggYmxvY2szLCBibG9jazNfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGJsb2NrNCwgYmxvY2s0X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBleHBlY3RlZF9yZXN1bHQsIGV4cGVjdGVkX3Jlc3VsdF9zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjdHggKTsKKworICAgIC8qIFZhbGlkYXRlIHRoZSB0ZXN0IGlucHV0cyAqLworICAgIFRFU1RfQVNTRVJUKCBibG9jazFfbGVuIDw9IDEwMCApOworICAgIFRFU1RfQVNTRVJUKCBibG9jazJfbGVuIDw9IDEwMCApOworICAgIFRFU1RfQVNTRVJUKCBibG9jazNfbGVuIDw9IDEwMCApOworICAgIFRFU1RfQVNTRVJUKCBibG9jazRfbGVuIDw9IDEwMCApOworCisgICAgLyogU2V0IHVwICovCisgICAgVEVTVF9BU1NFUlQoICggY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX3R5cGUgKSApCisgICAgICAgICAgICAgICAgICAgICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eCwgY2lwaGVyX2luZm8gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0cyApID09IDAgKTsKKworICAgIC8qIE11bHRpcGxlIHBhcnRpYWwgYW5kIGNvbXBsZXRlIGJsb2Nrcy4gQSBuZWdhdGl2ZSBsZW5ndGggbWVhbnMgc2tpcCB0aGUKKyAgICAgKiB1cGRhdGUgb3BlcmF0aW9uICovCisgICAgaWYoIGJsb2NrMV9sZW4gPj0gMCkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9jazEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sxX2xlbiApID09IDApOworCisgICAgaWYoIGJsb2NrMl9sZW4gPj0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2syLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMl9sZW4gKSA9PSAwKTsKKworICAgIGlmKCBibG9jazNfbGVuID49IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKWJsb2NrMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jazNfbGVuICkgPT0gMCk7CisKKyAgICBpZiggYmxvY2s0X2xlbiA+PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9jazQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s0X2xlbiApID09IDApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfZmluaXNoKCAmY3R4LCBvdXRwdXQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBvdXRwdXQsIGV4cGVjdGVkX3Jlc3VsdCwgYmxvY2tfc2l6ZSApICA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2NtYWNfbXVsdGlwbGVfb3BlcmF0aW9uc19zYW1lX2tleSggaW50IGNpcGhlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICprZXlfc3RyaW5nLCBpbnQga2V5Yml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrX2ExX3N0cmluZywgaW50IGJsb2NrX2ExX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2tfYTJfc3RyaW5nLCBpbnQgYmxvY2tfYTJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpibG9ja19hM19zdHJpbmcsIGludCBibG9ja19hM19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4cGVjdGVkX3Jlc3VsdF9hX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmxvY2tfYjFfc3RyaW5nLCBpbnQgYmxvY2tfYjFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpibG9ja19iMl9zdHJpbmcsIGludCBibG9ja19iMl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJsb2NrX2IzX3N0cmluZywgaW50IGJsb2NrX2IzX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZXhwZWN0ZWRfcmVzdWx0X2Jfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2tfYTFbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrX2EyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9ja19hM1sxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYmxvY2tfYjFbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrX2IyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBibG9ja19iM1sxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZXhwZWN0ZWRfcmVzdWx0X2FbMTAwXSwgZXhwZWN0ZWRfcmVzdWx0X2JbMTAwXTsKKyAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvOworICAgIG1iZWR0bHNfY2lwaGVyX2NvbnRleHRfdCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbTUJFRFRMU19DSVBIRVJfQkxLU0laRV9NQVhdOworCisgICAgLyogQ29udmVydCB0aGUgdGVzdCBwYXJhbWV0ZXJzIHRvIGJpbmFyeSBkYXRhICovCisgICAgdW5oZXhpZnkoIGtleSwga2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBibG9ja19hMSwgYmxvY2tfYTFfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGJsb2NrX2EyLCBibG9ja19hMl9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggYmxvY2tfYTMsIGJsb2NrX2EzX3N0cmluZyApOworCisgICAgdW5oZXhpZnkoIGJsb2NrX2IxLCBibG9ja19iMV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggYmxvY2tfYjIsIGJsb2NrX2IyX3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBibG9ja19iMywgYmxvY2tfYjNfc3RyaW5nICk7CisKKyAgICB1bmhleGlmeSggZXhwZWN0ZWRfcmVzdWx0X2EsIGV4cGVjdGVkX3Jlc3VsdF9hX3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBleHBlY3RlZF9yZXN1bHRfYiwgZXhwZWN0ZWRfcmVzdWx0X2Jfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9pbml0KCAmY3R4ICk7CisKKyAgICAvKiBWYWxpZGF0ZSB0aGUgdGVzdCBpbnB1dHMgKi8KKyAgICBURVNUX0FTU0VSVCggYmxvY2tfYTFfbGVuIDw9IDEwMCApOworICAgIFRFU1RfQVNTRVJUKCBibG9ja19hMl9sZW4gPD0gMTAwICk7CisgICAgVEVTVF9BU1NFUlQoIGJsb2NrX2EzX2xlbiA8PSAxMDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBibG9ja19iMV9sZW4gPD0gMTAwICk7CisgICAgVEVTVF9BU1NFUlQoIGJsb2NrX2IyX2xlbiA8PSAxMDAgKTsKKyAgICBURVNUX0FTU0VSVCggYmxvY2tfYjNfbGVuIDw9IDEwMCApOworCisgICAgLyogU2V0IHVwICovCisgICAgVEVTVF9BU1NFUlQoICggY2lwaGVyX2luZm8gPSBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZSggY2lwaGVyX3R5cGUgKSApCisgICAgICAgICAgICAgICAgICAgICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9zZXR1cCggJmN0eCwgY2lwaGVyX2luZm8gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19zdGFydHMoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0cyApID09IDAgKTsKKworICAgIC8qIFNlcXVlbmNlIEEgKi8KKworICAgIC8qIE11bHRpcGxlIHBhcnRpYWwgYW5kIGNvbXBsZXRlIGJsb2Nrcy4gQSBuZWdhdGl2ZSBsZW5ndGggbWVhbnMgc2tpcCB0aGUKKyAgICAgKiB1cGRhdGUgb3BlcmF0aW9uICovCisgICAgaWYoIGJsb2NrX2ExX2xlbiA+PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9ja19hMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19hMV9sZW4gKSA9PSAwKTsKKworICAgIGlmKCBibG9ja19hMl9sZW4gPj0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2tfYTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfYTJfbGVuICkgPT0gMCk7CisKKyAgICBpZiggYmxvY2tfYTNfbGVuID49IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKWJsb2NrX2EzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19hM19sZW4gKSA9PSAwKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCBleHBlY3RlZF9yZXN1bHRfYSwgYmxvY2tfc2l6ZSApICA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19yZXNldCggJmN0eCApID09IDAgKTsKKworICAgIC8qIFNlcXVlbmNlIEIgKi8KKworICAgIC8qIE11bHRpcGxlIHBhcnRpYWwgYW5kIGNvbXBsZXRlIGJsb2Nrcy4gQSBuZWdhdGl2ZSBsZW5ndGggbWVhbnMgc2tpcCB0aGUKKyAgICAgKiB1cGRhdGUgb3BlcmF0aW9uICovCisgICAgaWYoIGJsb2NrX2IxX2xlbiA+PSAwKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY191cGRhdGUoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKWJsb2NrX2IxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2IxX2xlbiApID09IDApOworCisgICAgaWYoIGJsb2NrX2IyX2xlbiA+PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2lwaGVyX2NtYWNfdXBkYXRlKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilibG9ja19iMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19iMl9sZW4gKSA9PSAwKTsKKworICAgIGlmKCBibG9ja19iM19sZW4gPj0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2NpcGhlcl9jbWFjX3VwZGF0ZSggJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciopYmxvY2tfYjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfYjNfbGVuICkgPT0gMCk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaXBoZXJfY21hY19maW5pc2goICZjdHgsIG91dHB1dCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG91dHB1dCwgZXhwZWN0ZWRfcmVzdWx0X2IsIGJsb2NrX3NpemUgKSAgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jdHJfZHJiZy5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2N0cl9kcmJnLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2MTY1OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jdHJfZHJiZy5kYXRhCkBAIC0wLDAgKzEsNzM1IEBACitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICMwCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZDI1NGZjZmYwMjFlNjlkMjI5YzljZmFkODVmYTQ4NmMiOiJjMTgwODFhNjVkNDQwMjE2MTliM2YxODBiMWM5MjAwMjZhNTQ2ZjBjNzA4MTQ5OGI2ZWE2NjI1MjZkNTFiMWNiNTgzYmZhZDUzNzVmZmJjOWZmNDZkMjE5YzcyMjNlOTU0NTlkODJlMWU3MjI5ZjYzMzE2OWQyNmI1NzQ3NGZhMzM3Yzk5ODFjMGJmYjkxMzE0ZDU1YjllOTFjNWE1ZWU0OTM5MmNmYzUyMzEyZDU1NjJjNGE2ZWZmZGMxMGQwNjgiOiIiOiIiOiIzNDAxMTY1NmI0MjkwMDhmMzU2M2VjYjVmMjU5MDcyMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjdiZTg3NTQ1MjY2ZGFkZDFkNzM1NDZjMDkyN2FmYzhkIjoiYTdmMzhjNzUwYmQ2ZmY0MWM0ZTc5ZjViN2RkMzAyNGQ1OGNhM2YxZjRjMDk2NDg2YzRhNzNjNGY3NGEyNDEwYzRjOWM1MTQzZWI4YzA5ZGY4NDJiYTQ0MjdmMzg1YmJmNjVjMzUwYjBiZjJjODcyNDJjN2EyM2M4YzJlMGU0MTllNDRlNTAwYzI1MGY2YmMwZGMyNWVjMGNlOTI5YzRhZDVmZmI3YTg3OTUwYzYxOGY4Y2VlMWFmNDgzMWI0YjhlIjoiIjoiIjoiZDViMWRhNzdmMzZjZTU4NTEwYjc1ZGZkZTcxZGJkNWQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiIzNzcxNDE2YjE2MmY0ZDljNWY0OGEwNWI3YWE3MzkzOCI6ImQyMGEwZTVjZGI3MTRmMDFiNDhlMDBiYWU1MTkwOWYzNDVhZjA1ZGUxMzIxN2U1ZDU1ZmM2YzJkNzA1YWVhNTUwNDIwZDlhNDU4NTk0ZDgyNWI3MWUxNmIzNjEzMDAyMGNmNTk0OGZlODEzNDYyMDYxYzFhMjIyZDFmZjBlMWU0YjNkMjFhZThlZWUzMWQzMjYwMzMwZDY2OGQyNGVmM2M4OTQxYjg3MjBlODU5MWI3ZGVlYzRiZDM1YTNhMWYxYSI6IiI6IiI6IjNjYmQ3ZDUzYWMxNzcyYzk1OTMxMTQxOWFkYWQ4MzZlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICMzCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZjJiYWQ4ZjdkYWIzZjU4ODZmYWExY2Y2ZTFmNTJjODciOiI0ZGY1NGE0ODNiNDUxMGVkNzYwNDlmYWFlMTRiOTYyZmJiMTY0NTlkMWY2YjRmNGRiZWNhODVkZWRlZDYwMTgzNjEyMjNjODkzZjk0NDI3MTljNTFlYjU2OTVlMTMwNGExYzJiZThjMDVkMDg0NmI2NTEwYTk1MjVhMjg4MzFhOGVmY2JkODJhYTUwNTQwZDdlNzg2NGUyYjhhNDJkNDQzODBjZGM2ZTAyZWViYjQ4ZDBiNWE4NDBiN2NkZDZlMDQiOiIiOiIiOiIwMDYyZDgyMmJjNTQ5YmVhMjkyYzM3ODQ2MzQwNzg5YiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjFjNTc2MGFhMGZkNGNlMzA4NzM1YjI4NjgyYjY3MjQ2IjoiODlkZWZkNDQ0NTA2MWMwODBlNDc2MmFmYWMxOTRiOWY3OWM0YmIxZWQ4OGM5NjFhZjQxZDlkMzdiZDM4OGExZDQ1YzgyY2E0NmY0MDQzNDhhMmFlNWUyMmNlMDBhYTM1ZWJjN2M1MDUxZDg4MDA4OTBkNDRkMjUyODQ0ODllZmNiZDFmNWUyYjE2ZTQwM2Y2OTIxZjcxYmJkZmNmN2I5YWVkZGVmNjViYzkyZmJkMWNiOWU0ZWEzODlhZWU1MTc5IjoiIjoiIjoiM2JhZjgxMTU1NTQ4YWZjYTY3ZDU3YzUwM2QwMGE1YjQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJiNzJiOTQ1MWE1ZTg2NmUyMjY5Nzg2MjNkMzZiMzQ5MSI6IjI3MTNkNzRhZmZlZDk4ZTM0MzM1NTllMTdkMjQwMjg4YmIxYTE3OTA5MDRjZDc3NTRjYWQ5NzAwN2UyMDVhMTU3YjhkZGNhNzA0YTM2MjQ0MTNmMmVjODM2MWNjZDg1NDQyZmIwYjdjYzYwYTI0N2YwZmQxMDJjZWY0NDY3NzMyMTUxNGVhNDE4NmQwMjAzYWI3Mzg3OTI1ZDAyMjI4MDBjZTIwNzhjNDU4OGJjNTBjZGZjY2JjMDRmYmVjZDU5MyI6IiI6IiI6IjA0N2E1MDg5MGMyODJlMjZiZmVkZTRjMDkwNGY1MzY5IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICM2CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiOTFiOTU1YTNlN2VjY2Q3ZjA3MjkwY2JhNDQ2NGJhZmYiOiJiMTYwNDY1NDQ4ODk0YzdkNWVlMTk2M2JiM2UxYTJmM2Y3NWZjZDE2N2ZmYTMzMmM0MWM0YzkxYzE4MzBiN2MwNzQxM2JkNTgwMzAyOTU4YWE2ZmE4MTU4OGFkMmIzMTczNjk4YTRhZmFmZGE0NjhhY2IzNjhkYmJkNTI0MjA3MTk2YjlhM2JlMzdhYzIxYmE3YTA3MmI0YzgyMjM0OTJlZTE4YjQ4NTUxNTI0ZDVjMzQ0OWM1YzhkMzUxNzIxMmUiOiIiOiIiOiJhZjJjMDYyZmVkYjk4ZWU1OTlhZTFmNDdmYzIwMjA3MSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjNworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImQwODExNDY3MGM0ZjYwMTZhNGNmOWQyZGEzZTNhNjc0IjoiMzhkZmJmYjUyYzE4NWFjZjc0ZGUwMGI1YTUwZjBjZDk2ODgyODY3NDdhYjM0MGNmZTlhZDMwZDM4YjM5MGZkMjQ0M2JmZDdlYTkzOTQxZDgyNjJhZTBmNjZiMGVhYjRmZjY0YmE1OWEyZmY5NDBjM2MyNmZkYTEwM2UwZDc5OGRiY2FhMTMxOGU4NDIxNDM5NzU2NzNhZjg0MDhiNWFmNDhkZmJhYTU2Y2E0ZjlkZGM4NzEwMDAyOGI0YTk1NTQ5IjoiIjoiIjoiNTUwMzBmZWY2NWM2NzllY2FmZmIwZGMwNzBiZmQ0ZDIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJlMmFmOWFiZTg3NzBlMzM3OThhNWYwNWIyMjA1N2QyNCI6Ijg4ZmIyYTgwMjBlNjA0ZWE2NGE2MjBmNDcwNDA3ODg1NzA2MmNjOTdlMjQ2MDRjMzBkZTRjNzBjYmY1ZTViZWEwZjBkYjc5ZDE2ZjRkYjYzNmEyZDZjZDk5MmM1ODkwMzg5YTQwY2ZlOTM5NjdlYWM2MDllNWI5ZjY2Nzg4OTQ0Mjg1NzU4NTQ3YzcxMzZlZjJlZTNiMzg3MjRlZDM0MGQ2MTc2M2QwZDU5OTFlY2U0OTI0YmI3MjQ4M2I5Njk0NSI6IiI6IiI6ImE0NGYwY2ZhMzgzOTE2ODExZmZmYjJlMGNmYzliZmMzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICM5CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYWUzMGYxNjQyNzUzYzVjYjZlMTE4ZDdmZjVkNTlmMWQiOiIzNDBkZWYzNDIwYjYwODQyMGQ4MWI0ZWE4MjUyYTNkODZkM2UxZGQ3NTk3ZTYwNjNlZDkyM2E3M2E3YjhlOTgxZTYwNzlmN2YwYzQyZGViOWY0ZWYxMWQyZjM1ODFhYmFkZjQ0YjA2ZDg4MmFmZGM0Nzg5Njc3N2NlOGRhZmQ4NWVjMDQwZjc4NzNkMGUyNWM0YmU3MDljNjE0YTI4YjcwOGU1NDcyNjZhYzhmMDdmNWZkYjQ1MGQ2M2JjMGM5OTkiOiIiOiIiOiJjN2U3NjcwMTQ1NTczNTgxODQyYmQxZjNlMGM2ZTkwYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI3MTFlY2ZlNDY3ZDZmODNiY2M4MmU1NjY3Mjk2NjlhZiI6IjIxZDZjODIyNzA2ZDFhZjA5ZTRkMjMzYzBlYmFjN2Y0ZWM2MGM3YmUyNTAwZGQ0MWE4NWExOWIyZGM1YzdkYTI3ZjhhODIxNjRiZDJhNjQ0MjE4Y2I1YWMyODNjNTQ3ZGExMDY0Nzg0NDEzZWVkNWVjZjMyZmFkZDAwMzU3YWJhYWU4MTIyNWFjOGQwMzkxZWFkNTMzMzYyY2ZmNTY3OTg4MjU0NDVkNjM5YjBiNDVlMDMxMmFhNzA0N2MwMGI0ZCI6IiI6IiI6ImQzYTBkMmM0NTdmNWU5ZDEzMjhhOWUxZDIyYjZlYWY2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImY5YjIyMTUyYmMwZWZmMWViZjBiZmFmZWVhNDBhZWNmIjoiNGVlMzJmMGFlYWRiMzkzNmUxN2YxYWEzYjE4YzEwZjc3M2RlZjVmODM1MDBjMmJhOTZmODQ0MDhhMjUyMWMxMjU4ZjZiZTlhYTVjZWU1Mjg3NDY2MjlhYTJiODExOGFjNDFkZDk4ZWYxYjNkZTMxZDI2YjhjMmFkMzQ0MjA4MTIwM2Y1ZWYyMWRmNDA5ZGYzMzgxZmJmMmUwNjRmYmFlYzY0ZDczMWRjOTNiMzIxOGUzNGJiM2IwM2JmZDg4MzczIjoiIjoiIjoiODYwMDliMTRjNDkwNmE0MDlhYmU2Y2E5YjA3MThjYmUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMCkgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNTE3NGU3NmU5MDRmZjE0NzEzNjdjY2FjZTljNjZlZDkiOiJmYTgxNTM1NjcwMjc1ZThhYjc0MTIxMzc3Y2Y4OGE0NzQyZGQwZDdhOTljZjA2ZWI5YzJiNGZlMmIwMzQyM2RiZTQ0MTIwMTE0NGMyMmE5ZmMwY2E0OWY1ZWY2MTQ5ODdhMjI3MWNjMTA4OWQxMGVlMDFiMjUxNjNjMDkwYTFmMjYzNzk3ZTRmMTMwOTIwY2RjM2I4OTBhMDc4ZThhYmJiMDcwZGVkMmU4ZmQ3MTdmNDM4OWYwNmZmMmMxMGQxODAiOiIiOiIiOiIxOGQ2ZmNkMzU0NTdkMjY3ODE3NWRmMzZkZjVlMjE1ZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwwKSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI3M2MzNzJmNjA1MTllOGVjYTM3MWVhYTEzZmI1NGY4OCI6IjkzMGMyOTBhNzk3Yjg1ZDU4YjUyZDBkOTIzNTY0MzY5NzdiMmY2MzZmMDdkNWE4MGM5ODdmYjdlZWE2Yjc1MGNjZWI5ZWI4Nzg2MDU0N2FiNDAyOTg2NWE2ODEwZmM1YzM2NjNjNGUzNjlmMjkwOTk0NDYxZDJlOWM3MTYwYThiNTk4NTg1M2JkOTA4OGIzZTk2OWY5ODhmZTY5MjNiMzk5NDA0MGVlZWUwOWFkMzUzYjk2OWQ1ODkzODIzN2NmZSI6IiI6IiI6ImY2MmM3Y2ZiZTc0NTU1NzQ0NzkwYmNjNzkzMGUwM2MzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDApICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6Ijc1YmE4ZGRlZWYyNGY5ZjViMDBiNDI2YTM2MmM0ZjAyIjoiNzA2NWQxMjhkZGIyZmM2ZWEzMWY0MTEwYjZjMDkzNGVkMTEyYzUxZDc0YTRhMDc0MWEwODQzZDhiZWZhYzIyOTAyYTAxMzUzMzIyNjc0YzNkNTg5MzUxNDRhMGY4ZjE3MWE5OWRiZWFiNzEyNzJmZjc1MThjNDZjYzdlYmI1NzNhZGJmOTViZmY4ZWM2OGVlYmE1ZThlYzEyMjE2NTVhZWQ4NDIwMDg2YmRhODljN2RlMzRmMjE3ZGNlNzNjY2FiIjoiIjoiIjoiNzAwNzYxODU3ZWEyNzYzZTg3MzliOGY2ZjY0ODFkMWMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjE0MDUxYjU3Mjc3YmMzZDNiYmFlNTFiZGVjZmI5ZjVkIjoiODJjODBkOTIyYzQ3YmJlYzBmNjY0ZGQ2MjNlMjJhMTFhM2I4NGQzMDgzNTFlNDVlMzBlZTI4NmU4OTU0N2QyMmM0M2UxN2IzY2EwZmEwOGY3N2VlZjEwMDFiYTY5NjkzMmU5ZWU4OTBlN2FhYzQ2NjFjMTM4ZTViNWNlMzY3NzNkMzEyMGMzNWY4Yzk0ZTBhNzhmZmJmNDA3YTYzY2E0MzUzOTJlMTdjMDc0NjE1MjJmZGMxZjYzZjAzN2FhY2ZmIjoiYjcwZTdjMWM0YjhlMGYxNzcwZTA1YjI5YTkzZjlkN2E2NTQwZjIzYWI4NDEzNmIwNWIxNjFkODVlNWYxOTI1MSI6IjVhNzM3YzEyOGJkNjlmOTI3ZjhmM2FkNjhmOTNmNjM1NmQ1ZjRlYzBlMzZiNmI1MGNlZDQzZGNkNWM0NGRiYzIiOiJhNGU2Yzc1NDE5NGEwOTYxNDk5NGIzNmVjY2UzM2I1NSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMxCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiNDUyNmIyNjgxMjhlYTM1Zjg1NThiNGUxZDA4Mzg4ZjIiOiI5NTJmM2YxNzljYmJkYTI3ZWJkMzBmNGZjMzFiZjk2YmFjY2IyYWRiYWE5YzA5MGJjMGYzNzA0NGE0NGU4NWIzYmM2NjhjZDM1MzNmYWFmNTZiNWRhOTI0Mjg0NGQ2NTczM2Y3YWMxZjU1YzM4YjE3NTc0OWI4OGUxOGQxOTY3MmI3YmRhYjU0ZTBhYmFiZGQ0NTE5ZmIwN2UwYzI1NTc4ZjY0YWQ0MGQwYmViMGEyNjI3NWQ1ZTJmNDkwNmFhNzAiOiI2YjE2N2M3Y2ViZWEyZTU4NWFiOTc0YjYwYzRkMzA1YTExMzEwMmNhOGMzZGM4NzY1MTY2NTcyOGM0YzY3NWFkIjoiYTAzOGYxY2ExZjQyMGVhZTQ0OTc5MWYxM2JlNDkwMWJmYjkxZTQxZTA1MmUwMjYzNWIxZjE4MTdiZDg5NjliMSI6Ijc0NWVjMzc2MjgyZTIwZmQxZjkxNTFmNzA0MGVkOTRhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJjMWFhZmE5MGYzOTRlMGJhOWE1MjgwMzJkYzY3ODBkMyI6Ijc1ZmQwNDJiZmQ5OTRkZTJjOTJlNWFhNTA1OTQ1ZWM5M2JkN2NmMzY2ZDg2YTM1NjcyM2ZjYTNjOTQ3OWVlMTdmYjU5YzZjYThiYTg5Nzg0ZDQzZjA2Y2RhZDExM2U1MDgxZTAyNDI3ZWUwNzE0NDM5ZDg4ZGMxYTYyNTdmYzkxZDk5YzFhMTVlOTI1Mjc4NDdhYjEwODgzY2M4ZjQ3MWNhZDhjZjA4ODJmNWI2ZDMzYTg0NmEwMGRlZTE1NDAxMiI6ImM3MDQxNjRjZTgwYTQwMGNiMmY1NGQxYjJkN2VmYTIwZjMyYjY5OWZhODgxYmZjN2I1NmNmZDdjNGJlZTFlYTYiOiJmM2JhZmY0YjZmNDJjOGU3NWI3MGMyYTcyYTAyN2IxNGE5OWFlNDlhNWE0N2M3YWYwZjUzODg0M2M5NGUxYTY5IjoiN2FmOTExM2NkNjA3Y2RiNGM2NTM0ZjQwMWZlNGU5NmMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjMworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImU2ZTcyNmI3MmU3YjI2NGEzNmVjMGNkNjBkNDU3OGI1IjoiMGMzYzZkZDcwNjA3NmQ2NDg0NDc4MzQ3NTU5YjQ5NWQ3ZWU4OThjMzljZGUwNjAyN2JjOTlmN2JmNjljZTExNDBjYTA0NjAyMjY1ZTEzMDhhZjZkZDY0NDZhMWNmMTUxNzQ5YjIyYTk5ZThhMDVkMzBjYzNjY2QwMGU2NjNiYzFiYzM3ZTA4ZWU2MjgzNGZjYzUyYTRiYzhjMWQ2NDQyNTQ0MTg3NDg0ZjgxZGM3Mjk0MTdkNWJlZGZjYWI1YTU0IjoiZDg0Yjk3ODQ4M2MwYmQ4ZjhjMjMxZDkyZWE4OGFjMjFlNmU2NjcyMTU4MDRiMTU3MjVhN2VkMzJmN2ZjNWRkNyI6IjlhODk3MWY2YzU1OWY3ZjE5N2M3M2E5NGE5MmY5NTdkMTkxOWFkMzA1ZjQxNjdjNTZmZTcyOWQ1MGU1NzU0YTUiOiJlMTZlZTViY2VjYTMwZjFmYmNhZGI1ZGUyZDdjZmM0MiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICM0CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiMDI3MmQ4NmRiMjgzMjQ0ZWI3ZWUwZWQ4YzgwNTRiODkiOiJhMDhjZTM5ZjJmNjcxZTFmOTM0ODIxYThkYjkwNzBmMzlhNzM0YTdhMjBlNzAzMDdmY2NjYTE3ZGIxNWJiNGU4YTQyMTYwMGRmMTFkMWE2ZTc4MDZhMTQ4MjY3MzkzMjJjODA0MzY0OWVhNzA3MTgwZjFkMDBkZWE3NTJjMmMzNjM5ODAzMDUxOTQ2NTg2NGM0ZDM4MTYzZjViMGRkNWJlMDdkYmMwYWUyOTY5M2FkNGE2N2NhNjlmMjg0MTQ2MzQiOiJhYTk3MDU1Y2Y0NmJhMjY0NjVkZmIzZWYxY2Y5MzE5MTYyNWMzNTI3NjhiMmQ4ZTM0NDU5NDk5YTI3NTAyZTUwIjoiZGRkZDAwMDdlYjI5ZmRmOTQyMjIwZTkyMGNhMDYzN2RiNGI5MWNiZjg5OGVmZDI2OTY1NzZmZjZiZmFjYjlkMSI6IjlkYjAwNTdlMzljYTZlMGYxNmU3OWI0ZjhhMGVkNWM3IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI0YWQ4ZjcyYTBkMGUyOGE3NTg3MjJiMjBlMzAxN2Q3ZSI6Ijg5YWYzNmExYzUzZjczMGMxYjgxOGIyNmFhNTEwNjI3YjE3ZTZmOWRhNTFjOGU1MzkzMGRlODgzYjdjYzdhM2U4YzNjNDYzYzkxMDY0NmFjM2ZmMDhmMDViY2E4ZTM0MGRhZjlhMzIyZDEzM2FlNDUzZmRmN2U2ODYwYTI3ZmY0NDk1Yzg5ODc1NDMxYmE5ZGUzZTRmMzI0N2NkYThjNjJhY2M4NmY3MDY2NDQ4ZjYzOWQ4YmE4YjUyNDkzMzdmOCI6IjlkMDYwYjdlZDYzYmRiNTkyNjNjNzVlYmU2YTU0YmYzYTRhYzljOTkyNmNhOGZiNDljYWE5MDVhMjY1MWVlYWQiOiIwMTYwOTkyMzJkYzQ0YmI3Y2RiNDkyZjQ5NTVhYjFhYWJjNWRjMGI1NzMxNDQ3Y2VhMmViMWQ5MmU0MTQ4MmQxIjoiNGI2NThlOTVhZGFlNGJmMGM0MThmZGVkNDQzMWMyN2YiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImFhMTliOTQ0YzJlMWI5ZDI3OTMzYmM4NzMyMmJkZjE0IjoiZGM4YzYwZGQ0MmM4NWZlZDg2Y2IzMmFmMDM1YmJkZTU3Mzc1MjZlYjA3OTkxMzk3Yzg1MzI1NmYyZjBjYjMxMWJjZTcwZTFjNWUzMmZjMzUxMDQwMmQ3ZDdlM2RlMzZmYTVlNTg0MjM0ZGFmMzkxYmM1M2NjNjUxZTAwMWFiN2ZjZjc2MDY3OWIzYzgyMDU3ZjlkMDliZmRjYWI4ZTE1OGQ0ZGFhNjNiMjBjMGUxMTAyZjdhMDZiZjVhMjc4OGRkIjoiNmI5OGZlYzVmN2RlODA5OGZmOWRmODBmNjI0NzNjNzM4MzFlZGFjZTgzMmE3NjdhYmY1OTY1ZWE4YmY3ODliYSI6ImNjOTk4YmQ1NzUyZjljOTZlYzM1ZDk2NThjYzhiMzgzM2RkNmFiODBjN2FjY2Q2Nzc3YzA2YzJjZjdjMDFlNTkiOiJmYzU4ODMzZTBlMjdmNzcwNWU0OTM3ZGQyYWFkYjIzOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICM3CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiMTBjOGMxN2EyNTA0MWUyZWYwZDNjYzgwNjcxZTRjZmUiOiI1MTNmYjk2YjYxNjRlY2U4MDFlNTI4NTVhYWQyOGNiODAxMzFlNzg3MmQ4NDMyZDI3YTk3NGZiNjJkOGQwMTAwYmI3ZWJjYjhmNWMwNjZlMjMwMzc3YTg4NDdkNjc5OGMzZDgwOTA0NjliOTcxOWE4MGFjOTU2YWMzMzE4NmIwMGViOGNhNjRjNTUzMDQyMWY5MzkzMmJjN2M5OGVlOTI2NTFlODVkYWI1NjI0ODNiZGIxODk2NzY4MDI3MjY2NDciOiIyNDBmMzZhMGE1OThmZTIxMTZmZmE2ODI4MjRmMjVhY2MzNTEzMmYxMzdmNTIyMWJjMGZmMDViNTAxZjVmZDk3IjoiMjJhNWViNWFhMDAzMDlhNzYyYWI2MGE4YzI2NDdlZWJlMTA4M2Y4OTA1MTA0YjVkMzc1ZWQxNjYxYjRjODQ3OCI6IjE0NWExNjEwOWVjMzliMDYxNWE5OTE2ZDA3ZjA4NTRlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwwLDI1NikgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJjZWEwYzNjMTJiZTY4M2MwZjI3NjkzNjUwYTZhM2Q3ZCI6ImRmOGJjNzBlNDVmZTE0YWJiMDJjMWI5YTk3NTRjMzc0OTdmYzJmNjc3MDllZGQ4NTQxOTZmYzRkMDc0YjEyNzk3Y2U3Y2IyOTJmMTRjYjFkNjkwNGFiZjMyYmYyMjkyOTlkYjVjY2Y1YTc5MWEzYjhjZDNlNDBhNjRmMzhmNmI1N2RmNzU5YTg2M2UwOWQ3Njc2ZDJmM2ZmMjc2MmNkYWIyMjExNTEwMDBkYmEzMmE2N2YzOGNhYjkzZDViN2E1NSI6ImJmMmFjNTQ1ZDk0ZTMxODA2NmZmODhmMzk3OTFhODM4NWUxYTg1MzllOTlhYzRmYTVhNmI5N2E0Y2FlYWQ5ZDQiOiI4NDZlZmVmODY3MmQyNTZjNjNhYTA1YTYxZGU4NmExYmJjNjk1MGRlOGJmYjk4MDhkMWMxMDY2YWVmN2Y3ZDcwIjoiOGQ4ZjAzODlkNDFhZGNhYzhjYTdiNjFmYzAyNDA5YzMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDAsMjU2KSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjFiNzgyYWYyNTQ1MzUyNjMxOTgzZGM4OTk0NWZmYzM3IjoiNTE5MzBmYjcwOTVlZGVmM2ZjMjBhY2EyYTI0MTI3ZjAzZDNjNGI5ODMzMjllMDEzYWQ4YTM1MDE2ZjU4MWRkN2IyZDExYmFmYmY5NzFjMWZkZWZkOTVhMDAyNDE5NWU2ZTkwYTYwZWMzOWIxYThkYmUwY2IwYzNhYWJmOWNmNTZiNjYyZWZjNzIyYjJkZmZhNmMzYmU2NTFmMTk5Y2JjM2RhMjMxNWI0ZDU1YWVhZmQxNDkyMjgzODg5ZTFjMzRmIjoiMWI2Mjk1OTg2ZjZmYjU1ZGM0YzRjMTlhM2RiYTQxMDY2ZmRjMDI5N2Q1MGZiMTRlOTUwMWJhNDM3OGQ2NjJlZCI6IjZlNjZmZjYzZmM0NTcwMTQ1NTBiODUyMTBhMThmMDBiZWFiNzY1ZjllMTJhYTE2ODE4ZjI5ZDE0NDk2MjBkMjgiOiI3OGRmY2I2NjI3MzZhODMxZWZhYTU5MjE1M2E5YWZmOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjY1ODBmNmRmNWM4ZGU3YzRhMTA1YzExZWQ0NDQzNWMyIjoiZDM3NDAzZGI2Zjg0YTdiYTE2MmUxY2MzNTFmZTJlNDRkNjc0YWU4NjA2MjgwYzlkYWMzZTM5NzVmMzBjYmUxYzk5MjVlNTAyYTk4MDRiOTFhYWRhNWNjOTdiMjU5YjkwY2NiNWI4MTAzMzk0ZDlhMjhmMDcwOWZjOWI1ZmZlOWQ3M2FkMzY3MmUwMjA2NGVhNjhjZWJlM2ZhY2U1ZDgyM2VlNjA1YzQ2YzE3M2RiNTkxMTM1ZjU2NDU1OGRhYjRjIjoiOTc0ODZhNWU2Y2U2YzZjZjlkM2Y5YTMxM2QzNDZjYmMzNGIyYmQ1NGRiODBjNWY4ZDc0ZDZmNjkzOWY4OTUxOSI6IjgzNzdmY2I1MjU1NmY5OTc0ZjFhYTMyNWQ2ZTE0MWQ3YjgxMzU1YmQxNjBhYmJjODZlMDAwNzU3MWIzYzE5MDQiOiI3NzAzMWQzNDc0MzAzNDcwZGNhOTMzNmIxNjkyYzUwNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImY1MzAzZjE0OGQ2ZDZmYWNhOTBhYTg4YjA3YWIyYmE5IjoiYTBkZTUxYjhlZmE0NGI4MjQ1ZGJhMzFkNzhmNzg0MGIyYjdhYmNlZDRlMjY1YjRjZDk2MjhlYWJjNmViYmNjYjBmMTE4ZGQ4Y2M5NThiMzZkYzk1OWUyMmM0YTAzZGFmYTIxMmVlZWRlYzdkMjVlZTZjNTk2MTE4N2JlZTgzYjFlZDNhNzVjN2JkZDlkMDcxM2IxNmNjNjdlNjgyMzFmNGNiMjc0YzhmM2RmY2M3ZTVkMjg4YzQyNmEwZDQzYjhmIjoiOGQxZmRkYzExZGJhZDAwN2U5YjE0Njc5YTU1OTllNWU4YTgzNjE5N2YxNGQwMTBmMzMyOWQxNjRjMDJkNDZkNiI6IjljZWI2NTcwNTY4NDU1ZDQyYTczOTdmOGNhOGI4YWY3YTk2MWEzM2E3Mzc3MDU0NGNjYTU2M2MwNGJjOTE5Y2EiOiI5ODgyZjBiZDFmNjEyOWE3OGI1MWQxMDhlNzUyYjJkOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjVhNzk5YzU4OTg1YWEyODk4Y2M4ZmU4ZTViYzRhOWY4IjoiZGJkYmVmOWQyMTdlOTA1MTAyNWMzMjFiNjI4YzFjYzgyM2Q1MDhmZmRkMTNmYzRlZGJlODY3NzY1OGE1N2VmNWI2NDM5NWE2YjdkNjJjMGU5M2RjMDk1NmVlMDIxN2VjNDhhZTA1NGYxZDQ2ODAwMjNjYzFiMmFmNjY2ZWZhOWUxNDU4Y2Y2YjBkYWU3MmVlZjIzOTJlOTM2ODdiZDFmYjVmMzY2YmIyY2RkMTI5MzdhZDA5NzI0ZTM5ZGI0MTg5IjoiOGMxNzliMzU3MzllNzU3MTllNzRmN2MzZTAzOGJjMDZlYjNlMjEyZDZhZGU4NTI3NWNmZWJmMTJiMmRjZTJhMiI6ImFmNjE3ZjJlMjI4YWRkZTNlZGFmNTJhN2U1OTc5NDc2ZGJiOWNkMjk1NmExNzM3ZDkzYTE2NTYzYmJiYjQ4ODgiOiI0OWEwNGYzYjRlZjA1Mjc0N2M3ZjRlNzdjOTE2MDNlOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMxMworY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjhmNWI1MTk4M2E4MTU2YTUyOWY1NTlhYzNhZmViYmYwIjoiYmYyMmIxODJkMzk2MjJlOTQxMDE3Mjg1YWRiZGZlNDQ2YzNkMWE3MjYwMWQwZTVhMTU2NzRmM2IxYjI2MDE3MGIxYjJhYjZiNTg4YTAyNjdkODY3NzZhNWQ0Y2U4MGUxMzJkNzEzNWE1ODFhZjc1ZWE2ZGU2NTE1MzY4MGUyOGNlMzVjZTc4ZDA5MTdiNDkzMjAwMGQ2MjI2MDE0OWU1YTNhZTcyYmMyNTA1NDgzOTBiNjY0ZjUzYzY5N2RhYzQ1IjoiNGNiYjViMmQ2ZTY2NmQ1ZGQzZGQ5OWI5NTFlYTQzNWNhZTVhNzVkMmUxZWI0MWE0OGM3NzU4MjliODYwZTk4YiI6ImE0YjQxNzFjMjU5MjUxNjQwNDQzNDkzMmFkMGE4ZWU2N2JkNzc2YTAzNDc5YjUwN2M0MDY0MDViM2Q4OTYyYmMiOiJjYWI0OTYzMTczM2YwNmUzZmIzZTA4OThlNWFkMjJlNyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMCwyNTYpICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjlmMzA1YTc3Y2JhZWMxYWI0MDhjZmMwZWI4OWM2Y2JiIjoiMWU1MGZhZGExZTc2YTBkMjQzZTZmNjRjMzZhMTczZGRjMWY0N2ExZGFiODM0ZjVjZDQ5MjU2ODc5Mjk1OGQ1YmUyMmNjZTMxMTBjOGU4OTU4YjQ3ZjA3YjVjNjNmODZiMjU0OTQyMzYxZDRkNTUzZTQ3ZDM2MTAzZjQ3Y2Q3ZjBiYmVlMjdkMmUyMzhiMWQ4NTY3MWFmZTgyODRlZTFmZDJhNDMxYTVmNjliMmRmNzNlOTUzNDFjM2EyZTRmZTRiIjoiYzI1NGYzYjQwZTc3M2ViMDkwNTNiMjI2ODIwZjY4Y2FmYTM0NThhZDQwM2FkMzZmNzE1MjQ1YTg1NDc1MmE5MyI6IjY5OWUxNzdiN2JlMzM1M2M0NWNlN2I3YTBkNTczYjAwMDg3ZDcwMGE5ZjJjMWNkMmUzNzBlMDVkNGRkYWRjODYiOiJiYjZiMDJiMjVhNDk2ZjI5MjQ1MzE1ZjU4YTE2ZmViYyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICMwCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZTA5ZjY1ZGNmZmMwZDNhNGQ4NGJhY2M0MTYxN2E0ZTQ2Y2U1MTg0ZWNhMDExMDQ5YWI2NTc1NjZmNzI4ZTRhYTI4MzE1ZmZhYzE2NmViZTUwZTEyNjliMDFjOTViM2EyIjoiNTQ1YTc4M2FlOTdkODI3ZWQwYjgxZDk3NTJhZDBmN2U5NjVmNTExYjFmNWRhZTBmODcyZTllYzM3Y2ZlNjNhZjg2YzFkMTVlMTUzODg3OTg5YjYwNTc3M2IxNmFkNTUwNWU2NWY2MTdjZmE4ZWY0NjU0N2M0YzNmOWQwYzRmZDBiNmUxY2ZmNWNhMGYxOTI5MjY2ZmU0M2JhOGY0NWFkNjY0Y2ZlNWU5MDkwM2E5Y2I3MjJiNDJhZTg5ODljMTQ4IjoiIjoiIjoiMWU3N2Q3Y2MxODc3NWZlZjlhM2QzZTAwOTAzZGEwMWIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjA1NmNkNDRjODg0N2Q4OWRhMDVmYmVmOTVlOTY2MGQ1ODkwNDZiMGMwMmY5YjQyYzE3ZmQ4YjA2OWY4MzFjNzNjZDg5NjAwNWVjMDgwMTEzNTg5YjZmMDdiZTZlNDJlYSI6ImRkZTZjMDg1MGZlNjQyNjAyZWIyMjJjYTczNzEyMTNjNTk4Y2VmOGMzZTcxZTA1OTNlYThlZGI1NGUxYmVkMTMwYjliMGFlYmUwODkzMDkzYjk1MGM1MmY1NmViOWIzMzhhYTRiZDAxZGFlMDMwNTE1NzI2ZWNlMWJmNzUxNjYwYjRhMzYwMmRhNjQwMGU0Yjk0ZWRlYmJhNjQ2YjVjM2Q0ZTY0Y2VlYTFjNGYxNGI3YTE5ZjAxNDI3ODMyNDdkZiI6IiI6IiI6ImE3OTBhYjkzOWU2MzU1NWQwMmVhMWU5Njk2MDUxNzI1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI3M2M3MmM3ZGZlMTM4ZWY0Yjk4MTdkNDFiOTcyMmIzOTQwNzYyYjU5YmRhMjZiM2Y2YmI4YjMwNTgzZTAxZDA4OGEyOTcyNmI3MWQzNmZmZWViZGIzODcwMTBjYjFiYjYiOiI2ZmUwOTUyMGUyNmY1YWJlY2UwZmNlYWRjNTQ5MTNjNjUwYTlmNTU3MjVhZjQ1YTlhNWYzNzNkMDliOTk3MGI4NzA2YjkwNDFkMDE4OWEyMDRmNmE0ZWI1MjdkZmE4NjU4NGEzYmVlMzI2NWI4MDljMzkzMmFlNWU3MjI4MTk0YTNjZjc1OTJmYzkzMDFjODMzYjQ1YTUzYmUzMmI5Y2FlYzlmMGY5MWJhODY1MTlmMTJiMGIyMzVmNjg0MTljMWUiOiIiOiIiOiI3OThkOTk3ZjQ2ZmY3Y2M0MjA2OTk0MDg1MzQwMzI1ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICMzCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiY2RiYTdjNzAzM2MzNDg1MmI3YmMxYTZiMzNlZGFiMzZmNDFkNTYzYmQwMzk1ZDEwMDFjMDJmZmMwYzQyZWM4NTk1ZWQyYjVkZGFiYzkyMzM3MmUzYjZiYjQ1NzgzM2ZhIjoiNTMyOTYwYzIzYzhjOGIyMTQ2NTc2ZGRlNTJmYWRjOTg1MTM0OTE0YWJmNDJjYTFjNWY0NzIwNjkzN2ZkYTQxMjg5YWU1ZDlmOTM1ZGM0Y2U0NWY3N2NhZDIzMGE0ZjM0NTU5OWUzYmFlNDA3MTE4ODMyNDQ4M2EwYjkzNTkzYzk2ZDhiNmFjNmMwZDhiNTJmODc5NWM0NDE3MWYwZDhjZDBiMWU4NWRjNzVjZThhYmU2NWQ1ZjI1NDYwMTY2YmEwIjoiIjoiIjoiOWQ0ODE2MGFjYTYwZjFhODJiYWFhOGE3ZDgwNGEzZDgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjAyY2VmMDFhY2E5OTJmNjBhYTEyZGI0YjJjNDQxNjg5ZTQ5NzJhNmY5ZGVhZjM2NjMwODJhZmVkNjQyYzE1MDJiNjdiNDJkNDkwYWYxYzUyYzdlNmVhZjQ1OTg4MmVjYSI6IjkyMTZjOWE4MzNmODE5NTM3OTIyNjBhNjg4ZWI3YzNkZmM4NTU2NWFlNmE2MDMzMjAzNzQxYTc2M2RiMDU2MjQ3ODA4ZTBlY2Q1YmExZmM0NTQ5YzNhNzU3ZWJhNTM1YWRjNzg2ZTgxMGRkYWFlOWEyNzE0ZDMxZjUxNTRmMmMzZWU4MTEwODY2OWYxMjM5ZjRmNGVmZDZlMThhYWJmYTJkODhmMGFjMjVmNDc0MDEwOGY2Y2ZlYmZmZWIyZDg1NyI6IiI6IiI6ImQ2Mzc4YmNmNDNiZTFhZDQyZGE4Mzc4MGMxZGFiMzE0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJkN2Q4MDA4NGU5ZDFmYmI5MzE1YzNiY2UxNTEwZGJmMjJjZjExZmE1NDE3N2Q5MTNhM2IwNGI2NGNiMzA5NTczOTViZDZmM2Q3ZTNkODY2ZDFiZTQxYjI5ZGI5ZWQ4MWQiOiI4MGQ0NzQxZTRlNjQ2NzQ4YmI2NWUxMjg5ZjFmOWIzYzIxYmZmZWM0ZDBhNjY2YjMwMWYxOTlkNzZiNGE4MzQ2NDU4MzA1NzA3OWIwNjk5NDZiMDNkNmFjODFlYmY5ZTZmYThkNDA4MTEyMGYxOGJmNTgyODZhMGM0ZGU3NTc2ZjM2ZjNjN2MzNTMxMjZmNDgxYTA2NWFjMjhiZGYyOGUxM2NkMGMxZTc5MTFkYjYzNDNjNDdkNjEzZjE3NTBkYzYiOiIiOiIiOiI5MTY1YTkyZWQ5MjI0OGIyZDIzN2Q5ZjQ2ZDM5YmRlOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICM2CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiZGY1YTY4ZDNiZWRlNDY3ZmQ2OTcxNmY1ZjhmYmFjMjk3NTk0Yjg1NzM5MjFhZmI4NjRiYTc2YWFhNmRkODllODNiODllMzU5YTVhMGRkMWFhYzliNGFjYjk1NzNkMjE4IjoiNTJkZjYzMzZmOTM3ODExMTVjMmE3N2JkOGY5OWNiNzE3ODcxZmUxNDcwNzk0N2EyMWY2MDkzZGQ5MjA1YmMzNzhhY2Y2MTMyOWY4ODMxMzY5YjRiMWFmMGE5ZWRmYjI1ZDc0ZjU4NjNmMjY4NTlhZDljOTIwNzY3YjExM2M0N2VkMjY5MDA1M2JmOWEyZjdjN2E2N2E4ZDY4MGUwODg2NTcyMGI5ZTlmN2I2YWU2OTdlM2M5M2U2NmYyNGI2ZGRjIjoiIjoiIjoiYzU0MmNmMjQ4YTE2M2JiY2VlZTdiOWYxNDUzYmQ5MGIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjNworY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjI5NDU1MjczNzJmZjcxZWRmYTU3NzZmNTVmN2U0YTI0NzU0NGFhNmRlOTc0ZTgxYjJlYmE1NTUyODQzYWI2ZGZhMjQ4Njk1ZjRmMzIyNWE0M2Q0YmYzNjcyYzNhNmIyZSI6ImFhNTYwYWYyMTMyY2JkMDYyNGE2OWM3YTdlNzMzY2Q1OWE0ZjJkNGU2MWQyYjgzMDA4N2JkODhmMzBmYTc5MmM3ZTRkMzE2OGZhODZhMTBmNzYxOWQ1YjlkY2Y0ZjdiYjA4YjM1MGJhNmE2YmZjMGZkZmI3ZWU3YWNhMDcyNjBjOWExMWFiZTQ5OTYzYzM2ZWZhZWZhOTRkMjk3OGVkMDk0NzJiZjkzY2M4NzNkMGYyNGMwMDA3NjJiYjE0MDJjZCI6IiI6IiI6IjMzYWYwMTM0ZWVjYTI3OWRjZTVlNjljMmNkYTNmM2Y0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJiMzBjYjc2NzEyNTY3NGY2MDk5YTVjZjdjYjJlNGY1YjZjMWNkMWUzMmZmYzFlMzkzYjFjNTY5OGI1MmIzN2Y5NzFmMTI1MjFhN2MxZmZhYWYzMjMzZDUzOTFiYzRjODYiOiIyZDQyYjAwMjQ4ZDk1ZDkzNzhhMmFlY2U0MGQ2MzZiYzFhYjIyZWRhYWE2NGRhYTM0MzM1MTk1YTllZmE0YzFiNThmMTNhYzE4NGNhMmJlNTJlMTVjM2E5NzdhYmRlMmFhNTA1MjQzZmMxMDZjNGVhNmYwNjcxZmUwZjIwOWIxMDZlYTg5NjU2NDVhZjczZDhlYmI4YTgwMjUxZGIyOTY3MTQ5YzcwMWNmZTFkMTU3Y2MxODliMDNiZjFiZmYxYWMiOiIiOiIiOiIxZTEwZWZmOWNlZWJjN2U1ZjY2ZTUyMTNjYjA3ZmNhNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICM5CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYzk2MmEyZGE0NTI0ZjA4YWRjZGQ1Y2VkZGMwNGU2NjlhZDYxNTRhZWUwNjE2NDY0NWU4MGM4MzI1MDZiOThmOTkxOTQ1MWM3ZWMxZDNhNmE5NzA0ZjgzZGVmOGY2ZTJkIjoiYTFmZjY4YTg1ZTQzNzQ3NWIxYjUxODgyMWRiYWFjMTczMDA3MWE0ZGRkMzI1NTM2MTc3ODE5NGZiMGNmZTMyOTNlMzhkZjgxNTI3ZDhiOGRhMTVkMDNhY2IyNjQ2N2I2YjUzZDc5NTI0NDFiNzlmOTViNjMzZjRhOTc5ZDk5OGZkMDQxN2I5MTkzMDIzMjg4YjY1N2QzMGMwY2IyZGFkYTI2NGFkZGY5ZDEzZjFmOGVkMTBiNzRlMmRkMmI1NmIzIjoiIjoiIjoiNTg5OTAwNjliNzJiNzU1N2MyMzRkNWNhZjQzMzQ4NTMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJhM2NjMWZlNTYxZDAzYTA1NWU4ZWVkYWEwZTcxM2JlNDkwYzRiZDRjNjgzOWE1Yjk4YzJhYzAxMzliZjIxNWJkYzQ2NzgzZDJhM2U2YjlkMTVkOWI3YThiZmUxNTEwNGIiOiIyMDcyNjc5MTFjMTIxMjVjYjMwMTIyMzBlNGZhZmQyNTc3NzdjY2JmYjkxNjUzZjc3ZTRjMTI4NzU3NGY5Yjc5ZDgxYWY3ZmIzMDQ3OTAzNDlkZDQ1Nzk4M2NjOTliNDhkNWY0Njc3Y2NkOTc5ZmNjNmU1NDVjYmY1YjVjOGI5ODEwMmM5YTg5YWUzNTQzNDlkYmRlZTMxYTM2MmQ0N2M3Y2RhZTEyODAzNGMwZjRjM2U3MWUyOThmZTFhZjMzYzYiOiIiOiIiOiJmZmQxZDI1OWFjZDc5MTExYTZmYjUwODE4MTI3MjgzMSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImVjZjE4NjA3MWI4MWUwZWQzODRkNGViZmI1YmYyNjFiNDA1NGUyZTYwNzJiNTFkMjFkZmI2ODE3YWRjNTFmZjFjODk1NmZmMzYxMjc2NzUzOGNkYzhkNzNmYWRlNzhiMyI6IjNiOWFlYzlmOGJmODQ5NTAwNGM1ZTRlNzMxZTVjMzQ3OTg4ZTc4N2NhZjAwM2YwMDFlNjg1ODRlMzUxMGE2YWJkZWRmZmExNTg5NTcwMmMyZDU3YzMwNDMwMGY0ZjBhZjgwYTg5YmNjMzZiM2NlYTJmMDhhMDc0MDIzNmI4MGNmZDJlYTZlNWNmZTQxNDRiYzRhZTA5MjcwZmI2YmM1OGMzMTNkYmFhZWRjMTZkNjQzZmMwNTY1MTcxZjk2MzIyMiI6IiI6IiI6ImEyZDkxN2Y1ZWMzOWEwOTBiNTVkNTE3MTMwMDZlNDlkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMCkgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiM2ZjZWRiYTg2MDg5NzA5YWE2MzhkMDA3MTMxNTBkZjc4MWQ0YTkzZTg1ZjE1NTMzOGU5MGZmNTM3YmNiZjAxN2YzN2EyZDYyMjU5ZjVkOGNjNDBkZGZiMDQxNTkyNTM5IjoiNmIxZTlkNDVjMmVjNTk4ZGU3NTI3YjY0MTRhMzM5ZjI2MTkyZmM0ZTNmNWVmZjRiM2EzZTJhODBlZTBmMmU5NzQzMDMxODA0ZDFiZTEyYjNjN2ZmNmZiYzIyMmRiMWQ5NzIyNjg5MGFkZGVlZjBlMTU3OWE4NjBlMjI3OTI5MmMyZjc2OTQxNmI3MDY4ZjU4MmY2ZmZjMTkyYWU0YzRmMWVlYjQxZDVmNzdmMGE2MTJiMDU5YzQ3YWVmOGUzZDhlIjoiIjoiIjoiYWE0MTQ3OTljNTE5NTdkZTk3YzAwNzBmYjAwZWI5MTkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwwKSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJmNGM0NWZiOGY1OGI3ZWJmNzNhMGNkODFjNmEyNjY4Njk3NzU1OGQ0YjhiZjFjZWRmYzZiZDM3NTRkZTZhYWVkNTAwOGZkNzIyMDg0MzdjNTRkOGZlYjlhMTZjZTMyMjQiOiI2ZDE3MGNmNDcyZWEwN2RhNjE0NmE3MDg3ZWQxNWQzZjViNmFkNzJiOGM5OWU0NmJhZTNiODllNDlhNmU2MzQ2NzE5OWVlMTYwOTY1MTZjMjM2MmRiZDE4MWJmNTM0M2EyOWZkMDkzMmQ3MmVlYjAxOWZjM2JmZWEzYTNiMDFmZmMyYjk4NWUzNDFjZmI2NDc5ZDlkYzcxZTIxOTdiNWNmZmM0MDI1ODcxODJlNWZlOTNiNWE4Y2Y3NWVhYzJlNDIiOiIiOiIiOiJmNTU3ZjYyNzY4OGZlNjNjMTE5Y2YwZjI1Mjc0YWE3NCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDApICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjcxMjA3NDJhNzgwN2I2NmM1YTliNTA5OTVkNTQ5NGE1Yjk0NTFiYjc5NTM5M2MwZDhhMzBhZTY2NTg3OTI2OTQwOGY4Mjk3ZDQ5YWI4NzQxMGE3ZjE2YTY1YTU0YjFjYiI6ImMwOGE2Zjk3OTdlYTY2OGNkMTRiYTYzMzhjYjVkMjNjMDkyMWU2MzdlNjZhOTYyNTlmNzhlMzNlNDVhYWZkMDM1ZWRiNDQzOTRjYjQ1OTQ1M2I5YjQ4YmVhYzFlMzJkM2I2ZjI4MTQ3M2NkYTQyZmI2ZmQ2YzZiOTg1OGU3YTQxNDNkODFiZmMyZmFmNGVmNGI2MzJjNDczYmU1MGE4N2I5ODI4MTViZTU4OWE5MWNhNzUwZGM4NzVhMDgwOGI4OSI6IiI6IiI6IjUyMTk3M2VhYzM4ZTgxZGU0ZTQxY2NjMzVkYjYxOTNkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImFkZDJiYmJhYjc2NTg5YzMyMTZjNTUzMzJiMzZmZmE0NmVjYWU3MjA3MmQzODQ1YTMyZDM0YjI0NzJjNDYzMmI5ZDEyMjQwYzIzMjY4ZTgzMTYzNzBiZDEwNjRmNjg2ZCI6IjYxNjhmYzFhZjBiNTk1NmI4NTA5OWI3NDNmMTM3ODQ5M2I4NWVjOTMxMzNiYTk0Zjk2YWIyY2U0Yzg4ZmRkNmEwYjIzYWZkZmYxNjJkN2QzNDM5N2Y4NzcwNGE4NDIyMGJkZjYwZmMxMTcyZjlmNTRiYjU2MTc4NjY4MGViYWE5YmY2YzU5MmEwZDQ0MGZhZTlhNWUwMzczZDhhNmUxY2YyNTYxMzgyNDg2OWU1M2U4YTRkZjU2ZjQwNjA3OWMwZiI6IjdlMDg0YWJiZTMyMTdjYzkyM2QyZjhiMDczOThiYTg0NzQyM2FiMDY4YWUyMjJkMzdiY2U5YmQyNGE3NmI4ZGUiOiI5NDZiYzk5ZmFiOGRjNWVjNzE4ODFkMDA4Yzg5NjhlNGM4MDc3NzM2MTc2ZDc5NzhjNzA2NGU5OTA0MjgyOWMzIjoiMjI0YWI0YjhiNmVlN2RiMTllYzlmOWEwZDllMjk3MDAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMxCitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiODk2NGViZGU2MWYwYzRlMjNmOGU5MTI0NGFlOTY4MmVkMGIxN2U0MjRlZGQ0YzAyNWI0NjFhMmQyMDlhNTM4NTgzZjI5NDY1ZGYzZjg5Y2YwNGY3MDNiNzcxZmY1YzkwIjoiNGRiOGU4YTI3ZmU3YTAzNzhlMzdkNGNjMDFiNmE0NjVkMzRiZTkxZjQ4YzUyZmRjMTAyM2VmMmVhMTI0MTA4MmY1MjI4MDViYzg3NzdmZGE2YzEwZTNkNDQxYjU4ZjY0OGVkY2Q3ZDRkZjNkZjhjOGEzOThkN2IwMDVjNGZkNmY0MWM5YjAzM2JkMzhmYzVmNTc3MDY5MjUxNTI5YjU4MjczZjZhOTE3NWZlYjM5Nzg3OThmZGViNzhhMDQzMjMyIjoiNWViM2ZiNDQ3ODRmMTgxODUyZDgwZmNmN2MyZTNiODQxNGFlNzk3ZjdiOWIwMTNiNTljZjg2YjlkM2ExOTAwNiI6IjNlZWMzNThmN2Y5ZTc4OWU0YWQ1YTc4ZGQ3Mzk4N2FkZGJmM2FlNWIwNmQ4MjZjZWMyZDU0NDI1Mjg5ZGM5YWYiOiI5YTY2YzAxNWQyNTUwZTNmNzhjNDRiOTAxMDc1ZmFiYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI5ODc4NGFhNzk0ZGY1NDAwODkwZTY4MDNmMDZkODg2YWViMDgzM2IxZmVhMjhhNWY3OTUyMzk3YWEyMTA5MmNlYWZkYjkxOTQwNzlmMzYwOWJjNjgyMzMxNDdjNzc4ZTciOiI3MzM4NTIxZThlMTI3ZTcwZGEyNTliMzdmNWY1Y2RmODMwNzliZGI0MDI0MjM0YjhjZWVjZmJhOGQ4YzNmMWM4NTEwZmY5MWYzYmQwOGYyYzU0ZjExYjUzNDA0OGEzMjBhMTViYTBmY2NlYzhkYTM0ZDRlZjdmNDlhZGU0ODQ3ODE0Yzg1OTgzMTkwNzk5MmQwYWRhYjI3MDQ2MzI0ZDRkOWE4NTNlYjk4NmI4ZGUyNWIzNGVhNzRlYjNkMTEwNDgiOiJiMTRjNTMxNGFhYzExY2I0M2Y0NTczMGU0NzRiODRmYmY1ZDE0ODBkOTRkMDY5OWI4MGUzNTcwZjY2MzZhYTcyIjoiZDYyMDg5MTIzNDgyMzZmZWVlMWQyNTgwOTIyODNkZDlkYjc1ODk5NzY5ZGQxMDljYzJmMGYyNmQ4OGRjYzZiZiI6IjVlYzc1ZmRkMWVkM2E3NDIzMjhlMTEzNDQ3ODRiNjgxIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjMworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImZlOWI3ZGYzMDZjNGNjZDAyYWZkNjE0MmM2NjUwNDE4MzI1NjE3OTQ1MTQ3ZGU0MzZhNTVlNzhhYTQ1ODY2MTE2ZDY2NzhlMDEzYTBlMmM1YTEzZTBkMDFmYmQ4NDAzOSI6ImM0ZGE1NmY0MjM5ZmRlMGJjNDliMWQ4NTJjYjM2YzgwMjA1ZjllOTllNTk5NWE4MGJlMDRiYmJiYTE1ZjI1YjhkMDU0YzM5N2EzNGNmZjEzMjZhNzFmMGFjYzRmNzk0Mjc5NWNhYmMzZmE0NjMzOWRjNTRiNGJmN2YxMWMwOTVhZjg1MDMwMDRkOTdjNDg1YWNlYzg4MTVkMTQwNDY3NDU5MmM4OTZlY2ZhYmVmY2JmMjIyZjRmZTVhM2NlZDBhZiI6IjA4NmQwOWE2ZWUyMGM2OWJmNWMwNTRlYmM2MjUwZjA2MDk3YzhkYTFhOTMyZmIzZDRiMWZiNWY0MGFmNjI2OGEiOiI0NGU2NGIxNGM0OWViYjc1YzUzNjMyOWJiNDFhYjE5ODg0ODg0OWNhMTIxYzk2MGRiOTlmN2IyNjMzMGIxZjZkIjoiN2FhM2E3ZTE1OWQxOTQzOTlmYzhlZjllYjUzMWE3MDQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICM0CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYzBkNDdlZTIzMjgxODVkZjJjMjk5ZDI3MGUxMWZlZTI2ZGY3NTNhNWI0Zjg5OWZkYzBkZmY3OWViNTA3NDgyMzJmOWY3OWNmM2Y1ZTliZDRhMjZhNDhlNzQzODQzYjAyIjoiYTZiNWRkNWYxYmFkOTUzMzFjYWFlNTg1MmJlNTBhMjYyNjdhZjY1NWM5OGZlYjhiNjZjNDVhOGFlMmRkZmNhMjcwYWIwZDgwMjNlNDNlNmUyMmE3YjU5MDRkNjM0ODJmMDQ1ZTg1NTU2YjljMTA1Y2RlMGYzZWI3YjFmZmYxMDI2MDg2YzgwYjE5NTE5NjgwM2I1ZjY2NDM2MmI2NTk1Nzg4OTRkNjU1MWZiN2M0NTY2ZWVjMDIyMDJmZGMyOThmIjoiM2I1NzVkMDI4MDQ2ZTdmNjAwNWRmY2RmY2RjZjAzZmY3N2E5Y2FjZDI1MTZiY2RmZjdmMzYwMWE5YTk1MTMxNyI6ImYxM2I1OGRhZWQ0NmY1YmYzYzYyYjUxOGFiNWM1MDhkZDJiYzNlMzNkMTMyOTM5MDQ5NDIxZmYyOWMzMWM0ZjAiOiI4NDY5ZGZhODk0NTNkMTQ4MWFiZWRkNmNjNjJlNGU0NCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiJhMGRiODEyYTkzOWZiZjM5NDJiMDBiZTAxOGNmZjQ1NzhiOWZiNjI2MjljNzY2YTUwZjM1MThmZTYzNDEwMGIxY2JjNDI0NGFlODQzZmUzMjEyNWM1M2I2NTM3MDU0NTciOiI3ZTNkY2EyMGE3YTk3N2I2NjE2YTY4NGUzMDkwMTVjZjZhMzdlZGQwZDg1ODE5ZmU5MWQwNzRjOTE1YjBjOTU0MGE4YWE0ODZmNTg2ODViMDY0ODUxZDYxNjQxNTBiMWMxYjBlMmU1NDVjNjM1OGQyOGIyZjUyNjNiMmZkMTJjNTAzZDI3MWFiNmRlNzZkNGZhNGM2MDRjYWU0NjkzMzU4NDAzMjgwMDhkOGNlNTU0NTU4NmI5ZWE2YjIxZGE0ZjkiOiI1NTRiMjk3YmMzMjg2NmE1Mjg4NGZhYmZjNmQ4Mzc2OTBkZTMwNDY3YjhmOTE1OGIyNTg4NjllNmY0ZWQwODMxIjoiNGY2ODhjYmE1OTA4ZTA2OTliMzNiNTA4ODQ3ZjdkYWMzMmYyMzNlNmYwMmNmMDkzZWZkYWNhZTc0MjU5ZjNiNiI6Ijk2OTZkZDZlZDU4NzVjZGVmNGE5MThhNjY4NjQ1NWE4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImZmNmNkMjA0NDNhMzJjOWU5MzhmMmE2MTdiYmI5NjliYTU0MDQwYjEyNzIzYjBkNDUyYTY2OWI1ODRiYTE2ZmZhYWNiZTM4YWY2MmI1YTYyZTBjNjdkMTY1ZDAyMjM0NCI6ImVmY2Y3NTM2ZjMyOTMyNTI2ZmU4MmIzYTIzMzM1MDg0MDQ3Mjc4Nzg3MjNmYzA5Y2JkOTAyNTgxZDgyNDYzY2Y2YWNmMWRkZjQyMTdlYTY0MDQ0NjkxOTNlOGRiMGU3ZThjODY0YWU2NTViNDljNmEwOTVmODBmMWFiMTY5ODU0NTNmMGZiNzI5YzExOWQ4YTNiODIwMDM0NjI2YTkzYjFmNzBlYjk5YjZjZDhjOTkwZGRhMzRhMWM2YTRiNmVlYSI6IjhkNDEyMjA4MDkxYjk4N2VlMDc4MWZmNjc5YzUwZGJhYjllZjM4OTE1NmY1NzBmMjdhYWYzZTY5OWJkYWRlNDgiOiI1MDEzODFjZTVlNzcxOGM5MmVlNzNlOWMyNDc5NjVkZDVmMGJiZGUwMTNjNGI1ZTYyNWU5YWY4OTA3ZTQwNTY2IjoiNGYzMjM5MzRhZGI4YTIwOTZmMTdkNWM0ZDc0NDQwNzgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICM3CitjdHJfZHJiZ192YWxpZGF0ZV9wcjoiYmQxNDc3OTE1M2VkOTY5NmQzZTUxNDNjNTBiMjA1MGI2YWNkM2VhMmY4YjY3MGVmMGU1ZjRiZWRmMDE3MDU3MjdiZjllNjRhZTg1OTIxNGFiZTZlZjQ5NzE2M2YwMjM2IjoiYmZiMDkzMWIwNWEzZmUyMzI2MTRlMWIxYzMwNjBiM2IwN2ZiNzVkMjNhYzEwMTkwYTQ3YTcyNDVhNmVjYWQ1ZjM4MzRlNjcyN2I3NWFjYzM3ZTlkNTEyZDAxYTRhOWNlZjZjYjE3ZWI5N2U0ZDFkN2MxZGY1NzIyOTY5NzJmMDQzN2E4OWMxOTg5NGY3MjFjYmUwODVjZjNiODk3NjcyOTFhODJiOTk5YmYzOTI1MzU3ZDg2MGYxODFhMzY4MWNlIjoiMGI1ZGMxY2RmYzQwY2ZkYzIyNTc5OGRhNzczNDExZGM5YTg3NzkzMTZjZWIxOGQxZThmMTM4MDk0NjZjNjM2NiI6Ijg0M2ViNzI5NzU3MGU1MzZiNTc2MGMzMTU4YWRiMjdjMGM0MjZjNzdkNzk4YzA4MzE0ZjUzYjU5YWE3MmQwOGIiOiIxZTcwM2YzMTIyNDU1YTQwNTM2YzM5ZjllYTNjZWFhNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixUcnVlLDI1NiwxMjgsMjU2LDI1NikgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX3ByOiI2NGIxNTVmZDRiODYzNDY2M2E3ZThhNjAyZTJiOWZlMjQ3N2JlNzQ2OTI2NDNjY2ZkMGIzMTZhMDI1ZWE2ZjFmYzBkZmQwODMzMjQ4Y2IwMTEwODJiZTM2Y2JhM2M1ZDEiOiJhNWIxNWNiMWUwMzlkN2JiZTJkYjgwYTMyZDRmNDAyYzdkM2M1OWE0NWIwNTI1NTQwMWQxMTIyNzcwZGJkYjk4OTQ4NDE5NjRkNWNhZGM5YWU5YWYwMDdkNjNlODcwZDA1MTAwNzg4ODVjYTQwMmJkMjIyZjE2ZDJkMjc4OTJlMjMyOTJiNjVjZjM3MGIxNWQ1ZTVhNzM5ZGRkMTNlM2UyN2Y3YzJlMmI5NDVmOGUyMTg5N2MzYmJmMDVkOGIwNDMiOiJhZWEyZmU5OTViZTc3ZGZkY2E2ZWJhYTFjMDViYTRjODRkMGU2YjlhODc5MDVjMzk4YTNkZmUwOGFlYjI2ZDM4IjoiZjRlOWU3ZWIwZWVhNGUyZDQxOWRlNmFkMjkwOWQzNmVjMDZjNzkwOTc4ODRiZjk4OTgxZTg2ZGVkYWUzNjZiYSI6IjRhMjg5NTVkYzk3OTM2YjFjMGFlZDA3NTFhMWFmZWQ1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLFRydWUsMjU2LDEyOCwyNTYsMjU2KSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImU2YzA4ZThiOGQ4ZTQxODQ3NzA4NzkxMTYxMDA5NmY3ZTA0MjIwODNhMzc2YTc3MTk4ZTljNjBmYjJkYzhjMTRhZmYzM2Q3ODM1ODc4YjY1MzIyZjE1NjE3MzhiMWViYiI6ImQ0ZTAzNDdjMjE1OGI4ODJlYjFlMTY1ZjdmMmFhMTMyNGQ2NjA2ZmUyNTljYTczMGIyYTMzNjc0MzVjYjkzYjg5MTA4ZTQ5YmQ5NzM1NTIxNTA2M2Y2M2U3OGU4OTI2YjI2NGM4YTk3NTcxZmQ0ZDU1ODgyMzY0OTE1YjdiZDU0NDI1NGMyNWMyYjY3Y2RkOTc5NzM3Yzc4MTFiY2RlZWY1YjA1MmQ4ZmUwNWE4OWIzMjkxZWY2NjlkNTU3OWE2MSI6IjY2MDc1NDExNzdiYzBjNWYyNzhjMTFjYjJkY2IxODdmYzlmMmM5YTllOGVlZmE2NTdiYTkyZGVlMTJkODRiMDciOiI3YTQzOWM4NTkzYjkyNzg2N2NmYTg1Mzk0OWU1OTJiYWVhMGVlYjM5NGIwZTJmZTlhYjA4NzYyNDNiN2UxMWUyIjoiNDIwODg4MTIyZjJlMDMzNDc1N2M0YWY4N2JiYzI4YTQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjQ0MTNmZjc3NWM5YjdkOWEzMDAzZTBiNzI3ZTM0NTU0ZTBmNjE1NDcxZDUyYWViNGEwNTk3NzdiMzcyZDYwMzMyYTFhNGJjYWY5MDZlNTk4NTgxYmM1YTM2OWIyYzkzMyI6ImEyMWNmNTY3MzYyZmVkMGVkZGRmZDBiMWMyZDg1ZmY2ZDJkYjU0ODRmY2E4YmY5MGE4MmRhMmFiNzZlZmNhYzkyODZlNDE3NjI4NDk2ZjM3ZWZmZGExNTBlZjQ5MTIxMjVhYWM2OGFhYzcyZTZmOTAwYTcwMTkyZDRlZjBiNGNjNGU5NDE5YzkzZmZiMjQ1OTY1YWUzMGM1ZjhhYmUyMGY3MzJkNzYwODBiZGU1YTFjNmIzZjA3NWViMzU2MjJkMSI6ImI5MjRkMTQ1ZmMzZWNkNzZmMDAwZjEyNjM4ZWYwYTQ5YTVkNGNmODg3YWE5M2ZjOWU1YzUzNmZlYmM0NTRmMmQiOiI3M2RiYjQwYjI1N2U2NTk4NzQ0ZjkxMDdjOGU3ZmY1MWEwODA0MDdmYzllODBkMzlkOWE0ZGI5NGYxNjdjMTE2IjoiODQ0NTdlYTc1Mzc3MWFkN2M5N2NlOWMwM2FiMDhmNDMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjVlNDA5ZDU2YWZiNjk0MGY5ZmZhNDVlMGY5MmVmNDk3MmFjZWRkMzU1N2I4ZTBmNTQxOGUzMDJmMjcyMGFlNTI4OTI5NDE3NjA0NWFkMzA5NmVhNjhkYjYzNGNmNTU5NyI6ImM1YTYzYzg4NmFmN2VkNzQ5NjQ3M2E2YWUyZjI3ZjA1NmM3ZTYxYzlhY2E4YzVkMDk1YWYxMWIyZWZlMWE2YjQzMzQ0ZjkyYjM3YzdiNjk3N2RkYmVmMTI3M2U5NTExZDkzMDVmY2JlN2YzMmJjNmE2MmYyOGQzNDg0MTM1MDM2MmQyNzE3ZGQwMDQ2NzIyNGEzNTk4NWI5ZmVjYzI3MzlhY2QxOTg3NDM4NDlkYmZhOTdmNDU4ZTJlN2Q2YjFkYyI6IjdmZGExMzNhMjNlOTI5YjE3NTQ4YTA1MDEzZmY5YzcwODVjNWFmOWM5NzkwNTdiOGY5NjFiYTc1MTQ1MDlmZjMiOiJiZDA2MTI5MmI2YmMzZDNlNzFlZDAxYWYwOTFmMDE2OWY3MGYyMzg2MmVmY2NkOWU3NjM0NWZmNjA3ZGZmM2VjIjoiNzViMzVkYWIzYWQ1ZTM1YzEwZWUzOTUyOWE3Zjg0MGYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImVkMmE1MjE2OTc5MWQ3YzdkMzMyY2YyNThlYTQ4NDdjMzU5MzM1ZjlhNjgzOWVlNzY3YThmNzY4MDBiYTI4ZTk0ODU4Y2M5YjdmNTI2ZTYyYTkzNjAzZmEyYjFjYWE2YiI6IjBhNjE1NWZmNDIyZmY2YWU5ODE0ZjgxYmYzNTNiZDM0NTRkMGM5ODkyZjlmM2Q3MzBkY2Q4Yzg3NjI2ZjgxM2NiZTFkZmYxOTIyZmU3M2U0YTMxOWJlNTNmNGVjMDVlOTY1YzI3ZjIzOWIxZTUxODY5MDY5YTdlN2NkZDkxNmZjMWZkNmY2NDBiZmU0Yjc2MWE4MDQwZjhkYjM3ZmI1ZWU3NTA4ZTdkMjI2Yzc2OTVmYjJhOGJkNzkxZmU0OWVmMiI6IjE0MDczYTFiNGYwN2YzYjU5NGZhNDNkMGM4NzgxYjgwODlkZDJkOWI4YWQyNjZlMDMyMWFhYTZiNzFhMGQwNTgiOiI0MjQ3ZmM2ODg2ZTg2NTdiODQzNjljZjE0NDY5YjQyYWEzNzFkNTdkMjcwOTNlZTcyNGY4N2JmMjBmYTllNGU2IjoiZjJhZWEyYmMyM2U3YzcwZjRlZTJmN2I2MGM1OWQyNGQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMxMworY3RyX2RyYmdfdmFsaWRhdGVfcHI6ImYwZDNhNDY1MDFkYTdhYjIzZDg2ODg3MjVmNTNmNDI4OWNlM2JmYTYyNzY0NmZlMzAxNTMzZWM1ODVmODY2Y2FhZmI4MTMxZTk1NDYwNTY2MjcwZjY4Y2QyNWUxZjE1MyI6IjIyM2Q0OWY5OWE1NmNmY2YyZWI4Y2NhMzlhOGE4MmVlMzA2YzYyNzJkNTIxMjU3ZjNkN2QyYTg3Njk5MTExZTQ0MmZjNTVhMzk5OTk0ZDU3MzczMTQxZjIyMDdkNDNhOGJiYzFlMDg2ZDY3MzQzYjdkYzJhODkxODUzYzg2MGZlNDNmYjZiZTMyY2YwMzVhY2E1ODJiZjU1OTBjYjUwMDFiMDliNDk3NmVhNjE3ZmE3YmQ1NmRhODFmZGVmMmRmOSI6IjdkMTI2NzNjYWQ1YWQ1MDAzNDAwZmI5NDU0N2UyYjk4N2U5MzRhY2Y2YjkzMGMwZTdhZWM3MjYzNGJmYjgzODgiOiJlODU4M2I5OTgzYjNhYzU4OWE2YmI3YTg0MDVlZGZjMDVkN2FhNTg3NGE4NjQzZjlhYzMwYTNkODk0NWE5Zjk2IjoiY2U3MmMwZWEwZTc2YmU2YmM4MjMzMWM5YmRkZDdmZmIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsVHJ1ZSwyNTYsMTI4LDI1NiwyNTYpICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfcHI6IjFlNDY0NGRmMWQwMWY5YTBmMzFkMWQwYzY3YmM5ZmI5YTFlZTIyMjNmYmZiMjU1MjBkMzg4MWNkZTJiMTgzYjczZmUxYThjYzVmMTc3OTZjZjIyYWFhZWQ1NzYwNzQyMCI6ImNkYWM2MmI1ZTRjY2VlODYwOWIxZjRiN2E4NzMzZTY5MDY4YzcxMjE5YjYyOTJlY2IzMThiOWQzNDc5NTE2ODA3YWYyODBjZmEyMGU0NTVkNWU5NmViNjc5NGEzYjk2Mzk1N2YzYzA5OWZkMWUxMTk5NzA2ZDM2YTA2MDExODM2YWY4OTBmM2I3YjE1Y2RhNjM0NmEwNmZkZDBmMTk0ZGU0MGJmYmVjMTJiMDIxYjAyZWVhYmFhMzRkMzViMzBhMyI6IjgxNjkyNTFlYTU1Y2NlNTM0YzZlZmQwZThhMjk1NmQzMmVkNzNiZTcxZDEyNDc3Y2VhOGUwZjFhYjgyNTFiNTAiOiI4NjVkMTRjYjM3ZGQxNjBhM2YwMmY1NmFjMzI3MzhmOWUzNTBkYTllNzg5YTFmMjgwZWU3Yjc5NjFlYzkxOGE3IjoiZmYxMWJhODM0OWRhYTliOWM4N2NmNmFiNGMyYWRmZDciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxYjU0YjhmZjA2NDJiZmY1MjFmMTVjMWMwYjY2NWYzZiI6IjVhMTk0ZDVlMmIzMTU4MTQ1NGRlZjY3NWZiNzk1OGZlYzdkYjg3M2U1Njg5ZmM5ZDAzMjE3YzY4ZDgwMzM4MjBmOWU2NWUwNGQ4NTZmM2E5YzQ0YTRjYmRjMWQwMDg0NmY1OTgzZDc3MWMxYjEzN2U0ZTBmOWQ4ZWY0MDlmOTJlIjoiIjoiIjoiIjoiYTA1NDMwM2Q4YTdlYTk4ODlkOTAzZTA3N2M2ZjIxOGYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5MGJjM2I1NTViOWQ2YjZhZWIxNzc0YTU4M2Y5OGNhZCI6IjkzYjcwNTVkNzg4OGFlMjM0YmZiNDMxZTM3OTA2OWQwMGFlODEwZmJkNDhmMmUwNmMyMDRiZWFlM2IwYmZhZjA5MWQxZDBlODUzNTI1ZWFkMGU3Zjc5YWJiMGYwYmY2ODA2NDU3NjMzOWMzNTg1Y2ZkNmQ5YjU1ZDRmMzkyNzhkIjoiIjoiIjoiIjoiYWFmMjdmYzJiZjY0YjAzMjBkZDM1NjRiYjliMDMzNzciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI0YTJhN2RjYmRlNThiOGIzYzNmNDY5N2JlYjY3YmJhMiI6IjU4MzY0Y2VlZmFkMzc1ODFjNTE4YjdkNDJhYzRmOWFhZTIyYmVmZDg0Y2JjOTg2YzA4ZDFmYjIwZDNiZDI0MDBhODk5YmFmZDQ3MDI3OGZhZDhmMGE1MGY4NDkwYWYyOWY5Mzg0NzFiNDA3NTY1NGZkYTU3N2RhZDIwZmEwMWNhIjoiIjoiIjoiIjoiMjBjNTExN2E4YWNhNzJlZTVhYjkxNDY4ZGFmNDRmMjkiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5MTFmYWFiMTM0N2FlMmIzMDkzYTYwN2M4YmM3N2JmZSI6IjJmMDQ0Yjg2NTFlMWM5ZDk5MzE3MDg0Y2M2YzRmYTFmNTAyZGQ2MjQ2NmE1N2Q0Yjg4YmMwZDcwM2NhYmM1NjI3MDgyMDFhYzE5Y2RiNWNmOTE4ZmFlMjljMDA5ZmIxYTJjZjQyZmQ3MTRjYzlhNTNjYTVhY2I3MTU0ODI0NTZhIjoiIjoiIjoiIjoiYWFlMGMwYWM5N2Y1M2QyMjJiODM1NzhhMmIzZGQwNWQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmOTU5ZjFiYzEwMGFlMzAwODgwMTdmYWU1MTI4OWQ4ZSI6Ijc3ZDBmMGVmYmM3Y2E3OTRhNTFkZmY5NmU4NWI4ZTdkZmQ0ODc1ZmJmYjZlNTU5M2FlMTc5MDhiZmJkZGMzMTNlMDUxY2I3ZDY1OWM4MzgxODBkODM0ZmRkOTg3YWUzYzdmNjA1YWFhMWIzYTkzNjU3NTM4NGIwMDJhMzVkZDk4IjoiIjoiIjoiIjoiNWQ4MGJjM2ZmZmE0MmI4OWNjYjM5MGU4NDQ3ZTMzZTUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI0NWE4YmIzMzA2Mjc4M2VlZGUwOWIwNWEzNWJkNDRkZCI6IjZiYjE0ZGMzNGY2Njk3NTlmOGZhNTQ1M2M0ODk5ZWI1YWM0ZTMzYTY5ZTM1ZTg5YjE5YTQ2ZGJkMDg4ODQyOWQxMzY3ZjdmMzE5MWU5MTFiM2IzNTViNmUzYjI0MjZlMjQyZWY0MTQwZGRjYzk2NzYzNzExMDEyMDk2NjJmMjUzIjoiIjoiIjoiIjoiMGRmYTk5NTVhMTNhOWM1N2EzNTQ2YTA0MTA4YjhlOWUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwYWRhMTI5Zjk5NDgwNzNkNjI4YzExMjc0Y2VjM2Y2OSI6ImIzZDAxYmNiMWVjNzQ3ZmRiN2ZlYjVhN2RlOTI4MDdhZmE0MzM4YWJhMWM4MWNlMWViNTA5NTVlMTI1YWY0NmIxOWFlZDg5MTM2NmVjMGY3MGIwNzkwMzdhNWFlYjMzZjA3ZjRjODk0ZmRjZGEzZmY0MWUyODY3YWNlMWFhMDVjIjoiIjoiIjoiIjoiZjM0NzEwYzllYmY5ZDVhYWE1Zjc5N2ZkODVhMWM0MTMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwNTJhNWFkNGNkMzhkZTkwZTVkM2MyZmM0MzBmYTUxZSI6Ijk4NDgyZTU4ZTQ0YjhlNGE2YjA5ZmEwMmMwNWZjYzQ5MWRhMDNhNDc5YTdmYWQxM2E4M2I2MDgwZDMwYjNiMjU1ZTAxYTQzNTY4YTlkNmRkNWNlY2Y5OWIwY2U5ZmQ1OTRkNjllZmY4ZmE4ODE1OWIyZGEyNGMzM2JhODFhMTRkIjoiIjoiIjoiIjoiM2Y1NTE0NGVlYzI2M2FlZDUwZjljOWE2NDE1MzhlNTUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwMDRjZDJmMjhmMDgzZDFjZWU2ODk3NWQ1Y2JiYmU0ZiI6IjYyMzhkNDQ4MDE1ZTg2YWExNmFmNjJjZGMyODdmMWMxN2I3OGE3OTgwOWZhMDBiOGM2NTVlMDY3MTVjZDJiOTM1YmY0ZGY5NjZlM2VjMWYxNGIyOGNjMWQwODBmODgyYTcyMTVlMjU4NDMwYzkxYTRhMGEyYWE5OGQ3Y2Q4MDUzIjoiIjoiIjoiIjoiYjEzNzExOWRiYmQ5ZDc1MmE4ZGZjZWVjMDViODg0YjYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmOTg1YjNlYTJkOGIxNWRiMjZhNzE4OTVhMmZmNTdjZCI6IjUwZDNjNGVjYjFkNmU5NWFlYmI4N2U5ZThhNWM4NjljMTFmYjk0NWRmYWQyZTQ1ZWU5MGZiNjE5MzFmY2VkZDQ3ZDYwMDVhYTVkZjI0YmI5ZWZjMTFiYmI5NmJiMjEwNjVkNDRlMjUzMmExZTE3NDkzZjk3NGE0YmY4ZjhiNTgwIjoiIjoiIjoiIjoiZWI0MTk2MjhmYmM0NDFhZTZhMDNlMjZhZWVjYjM0YTYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTAwZjE5Njk5MWI2ZTk2ZjhiOTZhMzQ1NmY2ZTJiYWYiOiJkMjdjYmVhYzM5YTZjODk5OTM4MTk3ZjBlNjFkYzkwYmUzYTNhMjBmYTVjNWUxZjdhNzZhZGRlMDA1OThlNTk1NTVjMWU5ZmQxMDJkNGI1MmUxYWU5ZmIwMDRiZTg5NDRiYWQ4NWM1OGUzNDFkMWJlZTAxNDA1N2RhOThlYjNiYyI6IiI6IiI6IiI6ImUzZTA5ZDBlZDgyN2U0ZjI0YTIwNTUzZmQxMDg3YzlkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg4ZjU1ZDliYThmZWY3ODI4NDgzMjk4MzIxMTMzZmVjIjoiMTZmOWY1MzU0ZDYyNGM1YWIxZjgyYzc1MGUwNWY1MWYyYTJlZWNhN2U1Yjc3NGZkOTYxNDhkZGJhM2IzOGQzNGJhN2YxNDcyNTY3YzUyMDg3MjUyNDgwZDMwNWFkMWM2OWU0YWFjODQ3MmExNTRhZTAzNTExZDBlOGFhYzkwNWEiOiIiOiIiOiIiOiIwN2NkODIxMDEyZWYwM2YxNmQ4NTEwYzIzYjg2YmFmMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxMjY0NzlhYmQ3MGIyNWFjZDg5MWUxYzRjOTIwNDRmOSI6IjcwYWZiYzgzYmY5ZmYwOTUzNWQ2ZjBkZGM1MTI3OGFkNzkwOWYxMWU2ZjE5OGI1OTEzMmM5ZTI2OWRlYjQxYmE5MDFjNjIzNDYyODNlMjkzYjg3MTRmZDMyNDFhZTg3MGY5NzRmZjMzYzM1ZjlhZmYwNTE0NGJlMDM5ZDI0ZTUwIjoiIjoiIjoiIjoiMGY5MGRmMzUwNzQxZDg4NTUyYTViMDNiNjQ4OGU5ZmIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTQ1ZjJmY2E1NTMwODlmZTA0ZTc4MzIwNTlkYzc5NzYiOiI1ZTVhOWUxZTNjYjgwNzM4YzIzODQ2NGVkZTFiNmI2YTMyMTI2MWEzYjAwNmE5OGE3OTI2NWFkMWY2MzU1NzNiYmE0OGRjY2YxN2IxMmY2ODY4NDc4MjUyZjU1NmI3N2MzZWM1N2EzYmY2YmI2NTk5NDI5NDUzZGIyZDA1MDM1MiI6IiI6IiI6IiI6IjZlYjg1YWUyNDA2YzQzODE0YjY4N2Y3NGY0ZTk0MmJjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjUyZGJiNDMyNDEwMDI0MTU5NjZlYWVjMjYxNWFiYTI3IjoiMzFjZmU2MGU1ZWQxMmZmMzdkN2YyMjcwOTYzZGVmNTk4NzI2MzIwYzAyYjkxMGI1YzZjNzk1ZTIyMDliNGI0YTk1ODY2YzY0Y2IwOTdhZjFkNjQwNGQxZTYxODJlZGY5NjAwZTE4NTUzNDUzNzViMjAxODAxZDZmNGM0ZTRiMzIiOiIiOiIiOiIiOiIyYTI3MGY1ZWY4MTU2NjVkZGQwNzUyN2M0ODcxOWFiMSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTc2MjAwYmI0NDgwOGI1NDAwYjI0ZTFiNWY1NmNmNzMiOiJmODRkMzk1YjE3MzRlYWM0NjAwZGJjMzZmNmIxZTE1OTliYzdmMjYwOGRjOGVjYjNhNTUzNjlkN2IxYjEyMmEwOWY1YWM5YzE2ZDlhMmJlMzdkMmZmNzBhOWJiYTczMmZjMzc4NWIyM2ZmNGFkZTNjODQwNGRhM2YwOWY5NWE4ZiI6ImFlZjI4YzkxNjllOWFmNzRjNzM0MzJkNGFhNmY1ZGZmOWVhNGE1MzQzM2RlMmVjYjliZjM4MGE4ODY4Yzg2ZTEiOiIwNjI2YWUxOTc2M2M1MzEzYjYyN2E4ZDY1Y2YxY2ZiYTQ2ZGZkNjc3MzI0MjczOGI5YjgxZmRlOGQ1NjZhZGUxIjoiNjNjMTYwZWQ2YTZjMWZmZmQwNTg2ZjUyZmE0ODhhOTA1NTUzMzkzMGIzNmQ0ZmE1ZWEzNDY3Y2RhOWZmZTE5OCI6ImU4ZjkxNjMzNzI1ZDc4NjA4MTYyNWZiOTkzMzZhOTkzIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxOWMzZDE2MTk3YWM5M2JmNThjNDExMGM5ZTg2NDgwNCI6IjUwNzU1Y2MwMTc4YzY4YWU3MGJlZmQ3NzQ0ZjZmMWUzZjZhNTliM2JiZTQ4NGE3NDQ0MzYwNzljN2ZhZThkODNjNDk2NTUxNmZiOTUyYzYzZTFkMDU2MWQ5MmNjY2M1NjAzNzQ2NTgxNWM5ZTU0OWM5YWRjZTRhMDY0ODc3MTI4IjoiNWNiODJkMmMyOTc0MDRmM2RiMTkwOTQ4MGM1OTdkZDA4MWQ5NGNhMjgyYmE5MzcwNzg2YTUwZjNjYmFiNmE5YiI6Ijk2ZDEzMGZhZjFhOTcxOTIwYzJiZjU3YmNkNmMwMmQ1YTRhZjdkM2M4NDA3MDYwODFlNGE1MGU1NWYzOGJmOTYiOiIxYjBkMDRmMTc5NjkwYTMwZDUwMWU4ZjZmODIyMDFkYmFiNmQ5NzJlY2UyYTBlZGZiNWNhNjZhOGM5YmNmNDdkIjoiNDYyOGIyNjQ5MmU1Y2IzYjIxOTU2ZDQxNjBmMGI5MTEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjRiMWVkZDBmNTNiZjRlMDEyZGVmODBlZmQ3NDAxNDBiIjoiZTUwYzMxZWJiYjczNWM0YTUzZmMwNTM1NjQ3YWUxZmZmN2E1YWM0ZmE0MDY4YmE5MGYxZmEwM2NhNGRkZWRlY2Q1YjE4OThkNWUzODE4NTA1NGIwZGU3ZTM0ODAzNGI1NzA2N2E4MmE0NzhiMDA1N2UwYzQ2ZGU0YTcyODBjZDkiOiJlNzE1NGVjMWY3YWMzNjlkMGJkNDEyMzhmNjAzYjUzMTUzMTRkMWRjODJmNzExOTFkZTllNzQzNjQyMjZlYjA5IjoiOTQ0NDIzOGJkMjdjNDUxMjhhMjVkNTVlMDczNGQzYWRhZmVjY2NiMmMyNGFiZGFhNTBhYzJjYTQ3OWMzODMwYiI6ImFiMjQ4OGM4YjdlODE5ZDhjZTVlYzFmZmI3N2VmYzc3MDQ1Mzk3MGQ2Yjg1MmI0OTY0MjZkNWRiMDVjMDM5NDciOiJhNDg4YTg3YzA0ZWIxYzc1ODZiODE0MWVkNDVlNzc2MSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMWY4OWM5MTQ2NDlhZThhMjM0YzBlOTIzMGYzNDYwZjkiOiI1ZTAyOWMxNzNkYzI4YWIxOTg1MWE4ZGIwMDhlZmJjZjg2MmY0MTg3ZmNhODRlNGU2ZjViYTY4NmUzMDA1ZGJhNWI5NWM1YTBiY2Y3OGZiMzVhZGEzNDdhZjU4ZWMwYWNhMDllZDQ3OTljZDhhNzM0NzM5ZjNjNDI1MjczZTQ0MSI6ImI1MWY1ZmQ1ODg4NTUyYWYwZTliNjY3YzI3NTBjNzkxMDZjZTM3YzAwYzg1MGFmYmUzNzc2NzQ2ZDhjM2JjZTEiOiI5YjEzMmEyY2JmZmI4NDA3YWEwNjk1NGFlNmViZWUyNjVmOTg2NjY2NzU3YjU0NTM2MDEyMDdlMGNiYjQ4NzFiIjoiZjFjNDM1ZTJlYmYwODNhMjIyMjE4ZWU0NjAyMjYzODcyYTJkM2UwOTdiNTM2YThjYzMyYTVhMjIyMGI4MDY1ZiI6ImEwNjVjYzIwMzg4MTI1NGNhODFiZDk1OTU1MTVlNzA1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwZWYyYmUyZDAwYTE2MDUxNDA0ZmMyYTBmYWE3NGZkYyI6ImI2NmM4ODJhZTAyYzUyMTVlZDNiY2Q5ZTlhNDA5MzRiMDliZjQ4YTE1ZmU3NTU4YzlkOWNlYjBlYmVjNjM2MjVlYTE4ZjdjM2FiMzQxZDlmN2VkZDhlMWQ4ODE2ZWRlY2IzNGRiZDcxYWUwMjc3MTMyN2I1ZWJjNzQ2MTNkYWRkIjoiMWViZTk4OTM5NTdhNWM0YTcwNzc5MzkwNmQzMWJiMjAxZTg4ZDg4YTIyYWJkNmJhYTY0NjFmYzYxZGVmN2ZmYiI6ImY4MWUyNjc0NDgzNDQxM2NiOTVhZjhkNDM4ZDAwNTBjN2M5NjhmOTI5YTMzZTM1ZWU1YzY3MTVhMGE1MjA5NTAiOiI2ODdhODQ4YjJiNmM3MTVhMGU2MTNiM2YzYmIxNmNmMmYwNTY1NDNlYjlkZDZiOGFlZThkZThhYTZmZDhhMWU2IjoiYTZjNGE3ZTk5ZDA4Y2M4NDdhYzBiOGM4YmNmMjJlYzAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImViMjQzOWQxNTZjNGY1MWZiMTk0M2MyNmYyN2RlOGFmIjoiYWQxNTNmZDI2NmQ5ZjczYjIxZjRlNWU4OGQzZDEzYmE4MzI1YWJkZWM0MjdkNWQ4ZjY3MWNmY2NkYmQzNTEwZTk3NzRkNTlhMTRkOWI1NDcyYjIxN2I3YmNmMzU1NDM2YTUxOTY1ZDJkZmY3YzRhYzU4NmFiODEyZjIwZDMyNmUiOiJlMjRiZDZiNjlhNDBmYTBhMDJjZWZiYmFhMjgyZjhmNjNhODBlMTU0YmUzMzhkMWI5MTM0MThkNGZmN2E4MTBkIjoiZmQ0MGJhZjExZDdjZGQ3NzY0MWEyYjQ2OTE2Y2IwYzEyOTgwZTAyNjEyZWY1OWZiNmZlN2RhYmJiZTdhODVjMCI6ImE0MDAxOWUzYjg1ZDdkNTc3NWU3OTNkZDRjMDliMmJkYzgyNTM2OTRiMWRjYjczZTYzYTE4YjA2NmE3ZjdkMGMiOiI3Y2Q4ZDI3MTAxNDdhMGI3ZjA1M2JiMjcxZWRmMDdiNSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYjIzNzk2ZDg4ZWU1YWU3NWZmMmJhNGZiYmQ1ZTJkZTgiOiJiMjQ5ZDJkOWIyNjliNThjNTM1NTcxMGFhYWU5OGJlMTJkOGZiMmU3OTA0NmI0ZTZkZWVlYzI4YWRhZDdlNzg5OTk5ODQ3ZTIwZGUxMWY3YzMyNzcyMTYzNzRmMTE3ZTNlMDA2YmRmOTliYjg2MzFhYTRjNGM1NDJjZDQ4Mjg0MCI6Ijc5ZjAyMTRiNmIwYzVmZmIyMWIxZDUyMTQ5OGI3MWQyMmM2N2JlNDYwN2MxNjMwMGFiOGRkZTNiNTI0OTgwOTciOiI1ODJiZTFlMDgwMjY0YjNlNjhlYzE4NDM0N2E1YjZkYjFlOGJlMTgxMTU3ODIwNmUxNGFkODQwMjlmZTM5ZjcxIjoiZjVlOWMzMzU2ODEwNzkzZjQ2MWY4ODlkOGM1MDAzYjFjMGIyMGEyODRjYjM0ODMwMWNlN2IyZGQ3YTFjN2RkNyI6IjFhYThjZjU0OTk0YmU2YjMyOWU5ZWI4OTcwMDdhYmYwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwODFkYjBiMTYyMGE1NmFmZDg3YzJmZDJiZWJiMWRiMyI6IjNmMWU5MGQ4ODg3MGEwYmQwMzM2NDAzNmI2NTU0OTVlM2U3ZDUxYmY2N2ZiNjRiYTBjYmYwMDM0MzBhZjU1ODVmNTkzNmI4NGFiM2I4YTU1YzAyYjhiNmM1NGJlYTA5Y2YyZDc3NjkxODU4YzU4MTg5OTEzODNhZGQ1ZjBjNjQ0IjoiNWI5OGJjODNhZThiZWQ1YzQ5Y2I3MTY4OWRjMzlmZWUzOGQ1ZDA4YmRmYTJhMDFjZWU5ZDYxZTlmM2QxZTExNSI6ImFhZDNlNThmZGQ5OGFhNjBmYzJjYWUwZGYzZmM3MzRmZmYwMWEwN2YyOWY2OWM1ZmZlYjk2ZDI5OTIwMGQwZDgiOiJiYWQ5MDM5ZWJiN2MzYTQ0MDYxMzUzNTQyYTJiMWMxYTg5YjNlOWI0OTNlOWY1OWU0MzhiZmM4MGRlM2QxODM2IjoiOGQwMWUzZGM0OGIyOGYwMTZmYzM0NjU1YzU0YmU4MWYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImE4NDI3NDQzZDljMzRhYmNkY2NhMDYxYTJiYmNmZjUyIjoiYjBlOWIyMTkyYWRjODkxMjY1M2Q5MGE2MzRkNWQ0MGM1M2NhNDM4MzI5MGE4NzY0YmRmOTI2NjdmODU5ZDgzM2MzZTcyYWQwZmY0MWUwN2ZlMjU3YjFlYWQxMTY0OWJlNjU1YzU4YTVkZjIzMzExNGU3ZWRhMjU1OGI3MjE0ZDciOiJjNmNhZDlmYjE3YWRhNDM3ZDE5NWQxZjhiNmE3ZmE0NjNlMjAwNTBlOTQwMjQxNzBkMmZmYzM0YjgwYTUwMTA4IjoiYmU0NjFhOWMxYTcyZWJhZjI4ZWU3MzIyMTllM2NhNTRjYmVlMzY5MjFkYWFhOTQ2OTE3YTdjNjMyNzlhNmIwZSI6ImI2ZDExMGQ2Yjc0NmQ3Y2NmN2E0OGE0MzM3YmEzNDFkNTI1MDhkMDMzNmQwMTdhZTIwMzc3OTc3MTYzYzFhMjAiOiIxNmNjZDYzZGJmN2IyNGI2YjQyNzEyNmI4NjNmN2M4NiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiODZiZDAyOTc2ZTZjNTA2NTYzNzJiOGMyMTJjZjBhN2EiOiI4OTkwMGIwZmViZjZiNGUxOWFiOGZjNWJhYmI0MTIyYThhYWQ4NmQ2NThkMGMyZjk4OTg4Yzk5ZmJkODUzMGZmNGFkMzY1YmQ1ZmRkYWExNWY5NjUzN2JkNzJkZWI1Mzg0NDA1YjYxMGU2ZWJhZTgzZTg0ODMwNzA1MWZkNmM4MiI6IjQxYmYzNzk0ZWU1NDY0N2E0OGEyNTg4ZmRmZGVhNjg2ZjFhZjY3OTJlOTU3ZDQyZjE4MWYyNjMxYjIwN2FjMGMiOiJjNDQ3OGFmYmVhNGVlY2IyMjU0NDhmMDY5YjAyYTc0YzJhMjIyNjk4YzY4ZTM3ZWIxNDRhZmY5ZTQ1N2Y5NjEwIjoiNDFhOTllMGQzZjViNzY3ZjliZWRjYjJmODc4YTVkOTlkNDI4NTZiZWQyOTA0MmQ1NjhiMDRlMzQ3NjI0YmY3ZiI6Ijg2MzMzNzUyOWFhYzlhYjFlOWY3ZjgxODdlYTdhYTdkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZTgwOWVmOGQ0YzNkODI1NzU4MzNkNTFhYzY5NDgxYjIiOiIzZTgzMWI3NzE1Y2UyMDJjOTVlYzg1MzM3ZTJjMDA2MWQ5NzIxNjk5NTViZDk2ZmJlMWY3NTg1MDhjMDMzNmIzMjI2MjYwZWE1ZTY2Zjk0M2I1MzhlYjExNWZmZTRkNWU1MzRjYmU1ODI2MmE2MTA1Mjg2NDE2MjliYzEyZmM3NSI6IjRkNDBjNmE5NjExNjg0NDVjMTY5MWZlYTAyZWJkNjkzY2I0YjNmNzRiMDNkNDVhMzUwYzY1ZjBhYWNjYjExOGIiOiJiMDdkYzUwZTZjYTc1NDRlZDZmZGViZDhmMDBlZDVmYTliMWYyMjEzYjQ3N2RlODU2OGViOTJkZGRhYWJmZTNmIjoiY2JhYzk4MmFhOWYxODMwZDBkYzczNzNkOTkwNzY3MGY1NjE2NDJhZGIxODg4ZjY2YjQxNTBkMzQ4N2JmMGI4ZCI6IjI4MTRiZTc2N2Q3OTc3OGViYjgyYTA5Njk3NmYzMGRiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYWQ3MWNhYTUwNDIwZDIxM2IyNWY1NTU4ZTBkYzExNzAiOiI2YTNmZDIzZTdkYzkzNGU2ZGU2ZWI0Y2M4NDZjMGRjM2NmMzVlYTRiZTNmNTYxYzM0NjY2YWVkMWJiZDYzMzEwMDRhZmJhNWE1YjgzZmZmMWU3YjhhOTU3ZmJlZTdjZDlmODE0MjMyNmM3OTZjYTEyOWVjOWZiYWNmMjk1Yjg4MiI6IjMwNDJkZDA0MWI4OWFhYTYxZjE4NWZkZGE3MDZjNzc2Njc1MTVjMDM3ZjJhODhjNmQ0N2YyM2RkYWRjODI4YWUiOiI5YjFlM2Y3MmFhYWI2NmIyMDJmMTdjNWNjMDc1Y2ZiYTcyNDI4MTdiMmIzOGMxOWZlODkyNGNhMzI1YjgyNmVhIjoiODY2MGI1MDMzMjlhYWVhNTZhY2RiNzNjYTgzNzYzMjk5YmFjMGYzMDI2NDcwMmNiOWQ1MmNiYWYzZDcxZDY5ZCI6ImMyMDRhMzE3NDc4NGQ4MmI2NjRlOWExYzBhMTNmZmE2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNWZkNjYwNmIwOGU3ZTYyNWFmNzg4ODE0YmVmN2YyNjMiOiJiYWY4NzUwZTA3MTk0ZmM3MTcyYzczNmUwZmRlYTBhNjMyODEwZDQ1NjAyZGZmMTdjZTM3YWRmMTA2ZDY1MmY4N2UzMWI2YmQyNGQyMTQ4MWM4NjQ0NGQ4MTA5NTg2MTE4NjcyYTZmOTM3MzFiNzQzOGEzZjBmMzk2NDhiODNhMyI6IjNjMzcxOTNkNDBlNzljZThkNTY5ZDhhYTdlZjgwYWFiYWEyOTRmMWI2ZDVhODM0MTgwNWY1YWM2N2E2YWJmNDIiOiJjNzAzM2IzYjY4YmUxNzhkMTIwMzc5ZTczNjY5ODBkMDc2YzczMjgwZTYyOWRkNmU4MmY1YWYxYWYyNTg5MzFiIjoiNDUyMjE4YTQyNmE1ODQ2Mzk0MDc4NWE2N2NiMzQ3OTlhMTc4N2YzOWQzNzZjOWU1NmU0YTNmMjIxNTc4NWRhZCI6IjU2MWUxNmE4YjI5N2U0NThjNGVjMzliYTQzZjBiNjdlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDhkZWY3MzQ5MTRlY2Y3NGI5ZWNjYjVkZmFhMDQ1YjgiOiI2Njk3Zjg4OWZjZjZkYWUxNjg4MWRjMWU1NDBlNWMwN2Y5NDYxZDQwOWFjZWUzMTg0MmIwNGY5M2MwMGVmYmJhNjcwZGZiZjYwNDBjMWMyZTI5YWQ4OTA2NGVhZTI4M2ZkNmQ0MzE4MzJmMzU2ZTQ5MmJjNWIyMDQ5ZjIyOTg5MiI6ImE2YWM4N2FmMjFlZmQzNTA4OTkwYWFjNTFkMzYyNDNkNDYyMzdiMzc1NWEwZTY4NjgwYWRiNTllMTllOGFlMjMiOiIwMDUyMTUyODcyYjIxNjE1Nzc1NDMxZWI1MTg4OWEyNjRmZWQ2Y2E0NGZhMDQzNmI3MmE0MTliOTFmOTI2MDRjIjoiZWJhZGY3MTU2NWQ5YThjYzI2MjE0MDNjMzZlNjQxMWU3YmVkNjcxOTNhODQzYjkwY2NmMmY3YWE5ZjIyOWNhMiI6ImM4M2ZhNWRmMjEwYjYzZjRiZjRhMGFjYTYzNjUwYWFiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNjQzNzg2MmU5MzA2MGRlZjE5OTAyOWZmMjE4MmYxZTUiOiI3MTlkMWFmY2I2ZGM4Y2EyNmNiYTZhN2MxMGY1OWNmODIzNDViMmEwYzYzMWE3ODc5ODEyZDZmMmQyNjYzYjQ5ZjllOTJkYWVjYjgxZmY3YzA3OTAyMDVkNjY2OTQ1MjY0NzdkNmRlNTRhMjY5ZjU0MmNiNWU3N2ZlNGJjOGRiMyI6IjVjOTYxZGIwYWMyZWE4Y2FmNjJjOWFjYzQ0NDY1ZGNmYjRkNzIxZmNiMmNkM2UxYzc2Y2RjYjYxYmZhYTdlNzUiOiIyNGVhYmQzOTJkMzc0OTNlMzA2NzA1ZDBiMjg3YmUxMWE0ZDcyZGQ0Yjk1NzdhYzQwOThlZjBkYWU2OWIwMDAwIjoiOWU0ZjA1YzFiODU2MTNlOTc5NThiYzM4NjNlNTIxMzMxYjJiZDc4ZmRmMjU4NWY4NDYwN2JmMjIzOGU4MjQxNSI6IjIxYWFhZTc2ZGM5N2M5YmY3Y2Y4NTgwNTQ4Mzk2NTNlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjZDdhMTk4MWMxYjcwNzljMWMzOGY1YWVlZTg2ZGIyMjIwN2NiOWZhZWQ4YzU3NmIxNzI0Y2E3ODE3YWE2YWJmYjI2YzQyYTAxOWViNGMyZjQwNjRmMDU4N2VhMmI5NTIiOiI3Zjg4YzM4MDVhZTA4NTdjNWNiYjA4NWE1ZDYyNTlkMjZmYjNhODhkZmU3MDg0MTcyZWM5NTkwNjZmMjYyOTZhODAwOTUzY2UxOWEyNDc4NWI2YWNlZjQ1MWM0Y2U0YzJkZmI1NjVjYmUwNTdmMjFiMDU0YTI4NjMzYWZiZGQ5NyI6IiI6IiI6IiI6Ijc2YzFjZGIwYjk1YWYyNzFiNTJhYzNiMGM5Mjg5MTQ2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwY2NkYWMyZmQ2NWE4NmJmOGY4ZTlkZGNhYmZmYjlkMjlhOTM1MTM5ZjYyN2MxNjVhODE1YjIzMTM3ZWVlZTk0Y2JiMjFiZTg2YWM1MTE3Mzc5MTc3ZDM3NzI4ZGI2ZmQiOiI2ZjYxNzAzZjkyZDMxOTJjZDk4MmIyZTUyYTg2ODNlMGQ2MjkxOGQ1MWIxMmUwODRkZWFlMDZjNGE4ZTA4ZWNmYjNkMmQzMGE5ODBhNzBiMDgzNzEwYmM0NWQ5ZDQwNzk2NmI1MjgyOWNmMzgxM2NjOTcwYjg1OWFhNGM4NzFmZSI6IiI6IiI6IiI6ImU2YzczZTE1OWQ3M2MyYmE4OTUwY2Q3N2FjYjM5YzEwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmYmJjYzRhYmZkNjcxMjk2ZGUzZTBkY2Y0MDlhMTM5ZTM1ZGVhZTEyNmMxOTQxYmYxYWZjYzhkM2RhM2EyZDY1ZjU0YTZkMzE3YmI2ZDY4M2EzYTc3ZjYyNjZiMDA3ZmYiOiJjNjYyZWQ3MjNlNzA0MTg3NzU0MmZkY2Y2Mjk1MzNkNGE3NDM5M2ViNGRhZTRmM2VjMDZkMmQxYzBkMzdlZDdmNTE5NjA5YTg0ODVjYjhkZWI1NzhhZTRjYmI0NWM5OGVmN2YyZjJlNjc3MzYzZTg5ZmIzNzQ0Mjg2ZGI2YmZjMSI6IiI6IiI6IiI6IjlkOTM0ZDM0NDE3YzZkMDg1OGY0YTNmYWFjYmU3NTllIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxYjgyNDc5MGI2YjIyYjI0NmJjYzFiY2ZiYmI2MWE3NjA0NTQ3NjY3MmY5MTdiNzJlNzljY2EzNThlNjUwZWIyOWVkNDlmYjBhNTczOWUwOTdmNWY1MzM2ZDQ2ZmM2MTkiOiJjNTdhNTY4NjQ4NmViYWNjMjQyMjIzNmIxOTExMGM3NTQ3OTVhODY5YTgxNTc5MDFjZjcxMzAzZGUxYWRjNmFmMTZhOTUyMTkwYTM5NWQ2YzIwZTE1NWU2OTBmNDE5MjJmNmY3MjFkYzhlOTNkYTgxYWZiODQ0ZjY4NzE0Y2JhNyI6IiI6IiI6IiI6IjEzZTdiZjIzZDg4ZjNiYjVhNTEwNmE4MjI3YzhjNDU2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyZWE3ODYxZTM3NDIzMmNiOGNlZWNiYmQ5YTE4ZmMxZjYzYzMxZjgzM2ZlMzk0ZjFlMTljOGVmNjEwOTJhNTZmMjgzNDJmYTViNTkxZjdiOTUxNTgzZDUwYzEyZWYwODEiOiI2YTA4NzM2MzQwOTRiZTcwMjhiODg1YzM0NWNkNTAxNjI5NWVlYzVlNTI0ZjA2OWRlNjUxMGFlOGFjODQzZGJhMmNjMDVjMTBiYWE4YWFkNzVlYWM4ZThkMWE4NTcwZjRkMmEzY2Y3MTg5MTRhMTk5ZGViM2VkZjhjOTkzYTgyMiI6IiI6IiI6IiI6ImMwMDhmNDZhMjQyYWUwYmFiYWQxNzI2OGM5ZTA4MzlhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIzOWNhYTk4NmI4MmI1MzAzZDk4ZTA3YjIxMWRkYzVjZTg5YTY3NTA2MDk1Y2FkMWFlZWQ2M2I4YmZlMGQ5YzNkM2M5MDZmMGMwNWNmYjZiMjZiYWI0YWY3ZDAzYzllMWEiOiJmMjA1OWY3ZmI3OTdlOGUyMmRlMTRkYWM3ODNjNTY5NDJhMzNkMDkyYzFhYjY4YTc2MjUyOGFlOGQ3NGI3YWQwNjkwNjk0ZWRlNDYyZWRiZDY1Mjc1NTA2NzdiNmQwODBkODBjZGFiZTUxYzk2M2Q1ZDY4MzBhNGFlMDRjOTkzZiI6IiI6IiI6IiI6IjIwMmQzYjI4NzBiZThmMjliNTE4ZjJlM2U1MmYxNTY0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhNGUyNTEwMmMxYjA0YmFmZDY2YmZlMWNlNGE0YjM0MDc5N2Y3NzZmNTRhMmIzYWZlMzUxZWVkZTQ0ZTc1YzI4ZTM1MjUxNTVmODM3ZTc5NzQyNjlkMzk4MDQ4YzgzYzMiOiIwYTAzYjdkMDI2ZmFiMzc3M2U5NzI0ZGFjYjQzNjE5Nzk1NGI3NzBlY2EzMDYwNTM1ZjJmODE1MmFhMTM2OTQyOTE1MzA0ZGVkZTFkZTBmNWU4OWJkOTFkOGU5MjUzMWI1ZTM5MzczMDEzNjI4ZmVhNGVlNzYyMmI5MjU1ZDE3OSI6IiI6IiI6IiI6ImJlMjFjYWI2MzcyMThkZGZmYTM1MTBjODYyNzFkYjdmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI2ZGUzM2ExMTY0MjVlYmZlMDFmMGEwMTI0YWQzZmFkMzgyY2EyODQ3M2Y1ZmM1Mzg4NTYzOTc4OGY5YjFhNDcwYWI1MjNiNjQ5YmFkODdlNzZkZWU3NjhmNmFiYWNiNTUiOiJkODgzMTJkYTZhY2JlNzkyZDA4NzAxMmMwYmYzYzgzZjM2M2ZhNmI3YTlkZDQ1YzM1MDEwMDlmYjQ3YjRjZmNmZWI3YjMxMzg2MTU1ZmUzYjk2N2Y0NmUyODk4YTAwZWNmNTFlYzM4YjZlNDIwODUyYmVmMGExNjA4MWQ3NzhjYyI6IiI6IiI6IiI6IjJjMjg1YmZkNzU4ZjAxNTZlNzgyYmI0NDY3ZjY4MzJjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJiOGFiNDJmZDNmNjMwNjQyNjYwMmNhZTBjNDhlYjAyZmZhNzA1Mzk0MDM4OTkwMGMxNzg0NmUxZDk3MjYyNTE3NjIwOTUzODNmMmVjMzQwNmIzMzgxZDk0YTZkNTNkZDgiOiI2YTc4NzNjY2I3YWZiMTQwZTkyM2FjYmVjODI1NmZhNzgyMzJmNDBjMGM4YmEzZGNiY2Y3MDc0ZDI2ZDZkMThhN2U3OGZmZmRhMzI4ZjA5NzcwNmI2ZDM1ODA0OGVlNmE0NzI4YzkyYTZmNjJiM2YyNzMwYTc1M2I3YmY1ZWMxZiI6IiI6IiI6IiI6IjEzNTA0YTJiMDk0NzRmOTBkMmU5ZWY0MGQxZjJkMGQ1IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwNDJiNTI0NDQ0Yjk5MDNjMWVjYjgwYWYyMWVlZjBlODg0MTE1NTYxYTE1YTFhYjJmOWYzYTMyMmVkY2JmMTQxNzRmNTRkMzE1MTk2YTYzMjk0MGMyYzZmNTY2MTJjMDkiOiIzMWJhNWY4MDFhZWFhYzc5MGYyNDgwZmJkMjM3M2E3NmJhMTY4NWViZWJjNWFlN2NkNDg0NDczM2VjM2NmYjExMjYzNGIzODk5MTA0ZGNjMTYwNTBlMTIwNmY4YjNmYjc4N2Q0M2Q1NGRlMmM4MDRmZDNkOGViOThlNTEyYmIwMCI6IiI6IiI6IiI6IjBhMDQ4NGMxNGU3ODY4MTc4ZTY4ZDZkNWM1ZjU3YzVjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNjMyNzU4ZjkyZWZhY2EzOTYxNTg2MjE3N2MyNjc5MDZhYjA0MjQyMzBkNDgxZWUwYTVhYTFhNWY2NjY5N2QzOTE4ZDRhYWIzZjMxMGI3MmE3ZjJkNzFjMGE5NmI5MjQ3IjoiNDZkYzgzNzYyMDg3MmE1ZmZhNjQyMzk5MjEzYjRlZWJmYjI4Y2EwNjljNWVhYWYyYTYzNmY1YmQ2NDdkZTM2NWMxMTQwMmIxMGVjZDc3ODBjNTZkNDY0ZjU2YjY1M2UxN2FmODU1MGI5MGE1NGFkYjM4MTczYTBiMmY5ZTJlYTciOiIiOiIiOiIiOiI5MDQzMmNlM2Y3YjU4MDk2MWFiZWNkZTI1OWFhNWFmNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjdiMzg5MTE4YWYzZDBmODMzNmI0MWNmNThjMmQ4MTBmMGU1Zjk5NDA3MDNmZDU2YTQ2YzEwYTMxNWZiMDlhYWZkNzY3MGM5ZTk2ZmZhNjFlMGNiNzUwY2IyYWE2YTdmZSI6Ijc2ZTkyZTlmMDBmYzdkMGM1MjVjNDg3MzlhOGIzNjAxYzUxZjhmNTk5NjExN2E3ZTA3NDk3YWZlZTM2ODI5NjM2ZTcxNGRiY2I4NGM4ZjhkNTdlMDg1MGEzNjFhNWJkZmMyMTA4NGExYzMwZmI3Nzk3Y2U2MjgwZTA1NzMwOWI3IjoiIjoiIjoiIjoiNzI0Mzk2NDA1MTA4MmMwNjE3ZTIwMGZjYmJlN2ZmNDUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlNTBkMzg0MzRlOWRmZTM2MDFlN2VhMTc2NWQ5ZmU3NzdkNDY3ZDk5MTg5NzRiNTU5OWVjMTlmNDJkNzA1NGI3MGZmNmRiNjNhMzQwM2QyZmQwOTMzM2VkYTE3YTVlNzYiOiJjOWFhNDczOTAxMWM2MGY4ZTk5ZGIwNTgwYjNjYWQ0MjY5ODc0ZDFkZGExYzgxZmZhODcyZjAxNjY5ZThmNzUyMTVhYWFkMWNjYzMwMWMxMmY5MGNkMjQwYmY5OWFkNDJiYjA2OTY1YWZiMGFhMmJkM2ZjYjY4MWM3MTBhYTM3NSI6IiI6IiI6IiI6IjI4NDk5NDk1Yzk0YzZjZWVjMWJkNDk0ZTM2NGFkOTdjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMzI1M2NiMDc0ZDYxMGRiNjAyYjBhMGQyODM2ZGYxZjIwYzNlZTE2MmQ4MGI5MGIzMTY2MGJiODZlZjNmMDc4OWZhODU3YWY0ZjQ1YTU4OTdiZGQ3M2MyMjk1Zjg3OWI2IjoiYjA2OTYwYTkyZDMyYTllOTY1OGQ5ODAwZGU4N2EzODAwZjM1OTVlMTczZmRjNDZiZWYyMjk2NjI2NDk1MzY3MmUyZDdjNjM4Y2M3YjFjYWRhNzQ3MDI2NzI2YmFmNmNlYTRjNjRiYTk1NmJlOGJiMWQxODAxMTU4YmVlNWU1ZDQiOiIiOiIiOiIiOiJiNjYwOGQ2ZTVmY2I0NTkxYTcxOGY5MTQ5Yjc5ZjhmMSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjgzZTQ3MzM1NjZmOTBjOGQ2OWU2YmNiZTlmYjUyNTIxZmYzZTI2ZjgwNmQ5YjdiODZlOTM0NGNjYTAzMDVkYmYxMDZkZTg1NTI0MGYxZDM1NDkyY2M2ZDY1MWI4YjZhZSI6IjBlMDEwNWIxMmFmMzVhYzg3Y2IyM2NmOWNhOGZiNmE0NDMwN2MzZGNkYzViYzg5MGViNTI1M2Y0MDM0YzE1MzMzOTJhMTc2MGM5OGJhMzBkNzc1MWFmOTNkZDg2NWQ0YmQ2NmZiYmViMjE1ZDdmZjIzOWI3MDA1MjcyNDc3NzVkIjoiIjoiIjoiIjoiNjhkNjRkMTUyMmMwOWE4NTliOWI4NWI1MjhkMGQ5MTIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTk0ZGE1NWFmZGM1MGNlNTFjOWEzYjhhNGM0NDg0NDA4YjUyYTI0YTkzYzM0ZWE3MWUxY2E3MDVlYjgyOWJhNjVkZTRkNGUwN2ZhM2Q4NmIzNzg0NWZmMWM3ZDVmNmQyIjoiYTUzZTM3MTAxNzQzOTE5MzU5MWU0NzUwODdhYWRkZDVjMWMzODZjZGNhMGRkYjY4ZTAwMmQ4MGZkYzQwMWE0N2RkNDBlNTk4N2IyNzE2NzMxNTY4ZDI3NmJmMGM2NzE1NzU3OTAzZDNkZWRlOTE0NjQyZGRkNDY3Yzg3OWM4MWUiOiIyMGY0MjJlZGY4NWNhMTZhMDFjZmJlNWY4ZDZjOTQ3ZmFlMTJhODU3ZGIyYWE5YmZjN2IzNjU4MTgwOGQwZDQ2IjoiN2ZkODFmYmQyYWI1MWMxMTVkODM0ZTk5ZjY1Y2E1NDAyMGVkMzg4ZWQ1OWVlMDc1OTNmZTEyNWU1ZDczZmI3NSI6ImNkMmNmZjE0NjkzZTRjOWVmZGZlMjYwZGU5ODYwMDQ5MzBiYWIxYzY1MDU3NzcyYTYyMzkyYzNiNzRlYmM5MGQiOiI0Zjc4YmViOTRkOTc4Y2U5ZDA5N2ZlYWRmYWZkMzU1ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlODY0OWQ0Zjg2YjNkZTg1ZmUzOWZmMDRkN2FmZTZlNGRkMDA3NzA5MzEzMzBiMjdlOTc1YTdiMWU3YjUyMDZlZTJmMjQ3ZDUwNDAxYTM3MmMzYTI3MTk3ZmVjNWRhNDYiOiI3OGQ3ZDY1YzQ1NzIxOGE2M2UyZWIxZWJhMjg3ZjEyMWM1NDY2NzI4YWM0Zjk2M2FlYWFiZjU5M2I5ZDcyYjYzNzZkYWVhNjQzNmU1NTQxNWFkMDk3ZGVlMTBjNDBhMWZmNjFmY2ExYzMwYjhhYjUxZWQxMWZmMDkwZDE5ZWY5YSI6ImNjNTdhZGM5OGIyNTQwNjY0NDAzYWQ2ZmQ1MGM5MDQyZjBiZjBlMGI1NGVkMzM1ODRlZTE4OWUwNzJkMGZiOGYiOiJhYjJmOTllMmQ5ODNhYThkZDA1MzM2YTA5MDU4NGY0Zjg0ZDQ4NWE0NzYzZTAwY2VkNDJkZGRhNzI0ODNjZDg0IjoiMGVjZDc2ODBlMmU5ZjAyNTBhNDNlMjhmMmY4OTM2ZDdlZjE2ZjQ1ZDc5YzBmYTNmNjllNGZhZmNlNGFlYjM2MiI6IjA4ZTM4NjI1NjExYmIwZmI4NDRmNDM0Mzk1NTBiZDdhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjZjNzllMTU1Njg4OWIzYzA3NGZjMDgzYTEyMGQ3Mzc4NGI4ODhjNWFjYjg3Nzg5OWYxN2NlNTJlNDI0Yjg0MTc4ZDE0NDQ0MWFhOWYzMjhjNzMwYTk1MWIwMmIwNDhkZiI6ImM3OGZmNmI5ZmM5MWNiY2UyNDZjOWZjYzIzNjZkNWY3ZGQ2ZDk5ZmIxMzI1ZDg5OTdmMzY4MTkyMzJkNWZjZDEyY2NhZmRjYmVmZDAxNDA5ZDkwYWNkMGUwZmZiNzQyN2M4MjBiMmQ3MjlmZTdlODQ1ZTZhNjE2OGZjMWFmMGI1IjoiNjBjYmExMDgyNmRlMjJjNWU4NWQwNjM1N2RlNjNkNmIyZmYwNzE5Njk0ZGFmY2E2YWIzMzI4M2YzYTRhYWNkZCI6Ijg5NDNjMjJmYjY4YjMwODExNzkwYTk5YjljYmIwNTZlMWEyYzMyOTE4NWExOTljNzZiYTVhZWNlYjJmY2Q3NjkiOiI3MDY3MWE1MGU4Mzg3YmYyMzI5ODlkOTA0YzE5MjE1Yzc1MzVhZDJkMGM1ZGVjMzBhNzQ0YzhkMjcwNmJlNmVjIjoiZjZiOTRiNjcxY2FlOGRmYTgzODc3MTliZmQ3NWVlODQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZjVhYjc3YjJhOGUzNzA1NDhiODhmZWJmZDc5NzcyMTQ0Y2Q1ZmM4ZDc4MDYyNTgyYWRkZDRmZjFlNWMxMDA5NGIzOTBlNjZiM2M0ZWZiMDg3NTEwZGUxYjlkMjU3MDNmIjoiMjFhMjFjOTMxNGIzN2Q0YWRlNGE1MGE1ZDg1OTk1ZTBiZTA3ZTM1OGVkOWJjYTE5ZGFhODY3YThkNDc4NDcxMDVkY2E3YTQyNGYzMmY3MTVhZGI4ZmVhNWQzYTQxY2ZlMzg4ODcyYTQyYWIxOGFhNWNiY2Q3YmRlNGFkYzNmOGIiOiIwMjNkNTgyNTY5YTdmZjE0MDVlNDRjZjA5Y2VlYmI5ZDMyNTRlZWY3MjI4NmU0Yjg3ZTY1NzdhOGFiMDkxYTA2IjoiMzk1OTc1MTk4NzJkNDlmYmQxODY3MDQyNDFiYTFkYzEwYjFmODRmOTI5NmZiNjFkNTk3ZGJkNjU1YTE4Zjk5NyI6IjMwOTFjOWZlOTYxMDliNDFkYTYzYWE1ZmEwMGQ3MTZiNWZhMjBlOTZkNGYzZTBmOWM5NzY2NmE3MDZmYTU2ZjEiOiIxZmI1NzA1OGIzYmE4NzUxZGY1YTk5ZjAxODc5ODk4MyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmMGI3OWUyOTJkMGUzOTNlNzhiNmQ2MTE3ZTA2ZDJlNzI1ODIzZmUzNWJkZTExNDY1MDI5NjdhNzhkOTlkNmJjYTU2NGYwZTJmMzI0MjcyZjk2OGJlNWJhYWI0YWViMjkiOiIxOTIwNTRkZGRhYzAyMTU3YTM1ZWI3Zjc1YWU4ZWJkYjQzZDZiOTY5ZTMzOTQyZmIxNmZmMDZjZDZkOGE2MDI1MDZjNDFlNGU3NDNiODIzMGU4MjM5YjcxYjMxYjJkNWUzNjE0ZTNhNjVkNzllOTFkNWI5ZmM5ZDJhNjZmODU1MyI6ImIxMjI0MWU5MGQ4MGYxMjkwMDQyODdjNWI5OTExYTcwZjcxNTk3OTRlNmY5YzEwMjNiM2I2OGRhOTIzN2U4YjciOiI1OWU5YzNjMGY5MGU5MWYyMmMzNWEzYmUwYzY1ZjE2MTU3YzU2OWM3ZTNjNzhhNTQ1ZDk4NDBmNjQ4YzYwMDY5IjoiMDg5YTU5YWY2OWY0N2RkYjQxOTFiZDI3NzIwYmI0YzI5MjE2ZjczOGM0OGMwZTE0ZDJiOGFmZDY4ZGU2M2MxNyI6IjE1Mjg3MTU2ZTU0NDYxNzUyOWU3ZWVkZTRhYTljNzBlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImUzZjMzODQzYWVjYjM1ZDAxMDAxZmY5MmFiOWEwZjFhNTQzMWJhOWRlM2U0ZjMyNDdjZGE4YzYyYWNjODZmNzA2NjQ0OGY2MzlkOGJhOGI1MjQ5MzM3ZjhjMzUzYmJiZCI6ImVmMDgxYWYxZjYyNDAwYTNkMTkzOTY5ZDY4OWE0MDIzNDk5OGFmYjY0NmQ5OWE3YzRiOWNiYmY0N2U2NTBjZGE5M2E5MGU3NTRhMTZmZmZhMjVmYzJhMmVkYWIwOTcyMGI0NTIwYzQ3MzA5ZWM0ZjZkOWY3NmYwMTYyYWY2Y2FlIjoiZTdjYzU1YjcyODYyNTQ0YTg2NjFiNTAzNGUxNTU4N2IxZTVhNDVlYjVkYzc0NGY1ZmExZGI5YjI2N2YxYzNmZiI6Ijg4MmQzMGM4ODhlYjhlMzQ0YjFkMTcwNTcwNzQ2MDZmZTIzMmNlYjQyZWI3MTA1NTI2NGVkZTdiYjYzOGYyYTIiOiI5Y2U2NWU5NWMxZTczNWZlOTUwZTUyYzMyNGU3NTUxNDAzZDBlZjcwYWQ4NjViZDMxZmVmMWUyMmIxMjlmZGQ2IjoiMjA1ZTNhNTMzNjdjNGE1MTgzYmU3NGJiODc1ZmE3MTciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZjMwYTE4ZDU5N2Q4NTkxYTIyZGVlOTA4ZGU5NWM1YWY3NDg4NGIwMjVmMzliNGY2NzA3ZDI4NDQ3ZDlkMGEzMTE0YTU3YmMyZDllZWQ4ZTYyMWVjNzVlOGNlMzg5YTE2IjoiZmFlM2Q1NTRkMTJhMTRlMjlkZTFiNjIyOTIyZjI3NTU5NTU5Y2ExNTE4YzlmODAwMzc1YTM3YTIxMmU4YjlhNjUzY2MzNzAwMjIzZTk0MDRkNWJmNzgxZDE1ZmNjZjYzODA1MGExMzk0NTkyY2FiYTAwMWNmYzY1ZDYxZWY5MGIiOiI1NDI0MGVkZDg5MDE2ZWQyN2UzYmIzOTc3YTIwNjgzNmY1ZWYxZmJhMGYwMDBhZjk1MzM3ZDc5Y2FjYTljZjcxIjoiMjUwNjExZTUxODUyZDkzM2ZmMWExNzdiNTA5YzA1ZTMyMjhjYjlmNDZkZmI3YjI2ODQ4YTY4YWFkMmNlNDc3OSI6ImY4YjYwMmQ4OWZhMWEwYmZiMzFkMGJkNDkyNDZiNDU4MjAwYTFhZGIyOGI2NGE2OGY3YzE5N2YzMzVkNjk3MDYiOiI3YjYzYmZiMzI1YmFmZTdkOWVmMzQyY2QxNGVhNDBhNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM3CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjOGRiYzNkMzliZWI2MTI4MTFjNTJlMmI0NmVmNzZkMmI3YmQ1ZDNhOTBjZWRkZjlmYjg2NGZlNmY0NGUzNjY4N2Q4ODE1OGQ2MTAxNGUxOTJmOWEzY2Q0NzQzMzhlMTMiOiI4ZTYwMTE1YjRhZjljOGU1NjA2MjIzNzkyNTM5ZTliYTg3ZTllZjQ2Y2QxNmZjYzA5MDQ2ZGIxZWY4ZDNjMDM2MjQxY2FlNWQ2MTE0MTcxMTgxOGU5ZTg2MWRiZDgzMzYzMjA2OWViZjVhZjFiZDZkNGU1MTNmMDU5YWIxZWZkMyI6IjliNTZlYmEwODM4NDU3ZjczNmZjNWVmYTJjZmJlNjk4OTA4MzQwZjA3ZDQ2ODBlMjc5ZDIxZGQ1MzBmZGM4YzgiOiI2MmM0N2VjZTQ2OWE3YTQwOWU0YjJiNzZkMWM3OTNhYWYxMTY1NGUxNzdjYzhiZjYzZmFmZjNlNmM1YTUzOTVjIjoiNDI1MTU5NzAxM2QwYzk0OWM1M2JiZDk0NTQ3N2I3OGFhOTFiYWE5NWYxZmY3NTdjM2EwMzljY2M0ZTFmNDc4OSI6ImFmMmYzNzE2MDk0MGYwY2MyN2QxNDRhMDQzZGRmNzliIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImEzN2Y5ZWQ2YzRlOGY3NGZmMTYwNDZiMDY3OGVmN2JkMjRmY2RjYTI0N2I3NzFlYTFjZTFmZDQ4ZTNmNWQyMDY3ZTM4YWFmNjRlYzU5ZjFmNDlkOTZmYTg1ZTYwZWYwMyI6Ijk1ZGE5MWY0MTg1YjI1NDMyMmVmMGZjODUyNDczYTliOWU0YzI3NGIyNDJkZWQ4YTRlYWU2ZjFlMmJhZGRlMDY2NGNmNTdmMjEyOGFhM2RjODNlNDM2ZjdlODA5MjhhMDFkOTNiZjI1MDExZWVkZjAxOTBkMGJmMzYxOWNkNTU1IjoiYjRhMjJmNTU5OGY3OWQzNGYwYjk2MDA3NjNjMDgxYjAyMDBiYTQ4OWRhNzAyOGFkMDI4MzgyODU0NWM2ZDU5NCI6ImZhM2VkYzA5NjJiMjBhOWQ5ZTFkMGFmY2FkOTA3YzgwOTdjMjFkN2E2NWMwZTQ3YzYzZDY1Y2VhOTRiZjQzYmQiOiI0OWJhNzkxYTIyN2U5ZTM5MWUwNDIyNWFkNjdmNDNmNjQ3NTRkYWFjMGIwYmI0YzZkYjc3MzIwOTQzMjMxZWMzIjoiMzJmMzEzZGVkMjI1Mjg5NzkzYzE0YTcxZDFkMzJjOWYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiODdmODViOWMxOWViYTFkOTUzYjY2MTNjZjU1NWMyMWJjNzQ0MjhkOWE4ZmVlMTVlNmNkNzE3ZTI0MDUwNmYzZTgwODYwNDIzOTczYTY2YzYxODIwZDRjZTFjNmJiNzdkIjoiZjIyZGQzNTE3MzUwMTc2ZTM1ZTFiN2VjYzhjMDBiZWE0NzQ3ZjBhYzE3YmRhMWIxZGRmOGNkZjdiZTUzZmY4YzMyNjI2ODM2NmU4OWNmM2IwMjNhOTY0NjE3N2EwZGNjYTkwMmYwYzk4YmYzODQwYzljYmRmNWMwNDk0YmVlM2MiOiI2MTFjYWEwMGY5M2Q0NDU2ZmQyYWJiOTBkZTRkYmNkOTM0YWZiZjFhNTZjMmM0NjMzYjcwNGM5OThmNjQ5OTYwIjoiY2JhNjgzNjdkYzJmYzkyMjUwZTIzZTJiMWE1NDdmYjMyMzFiMmJlYWFiNWU1YTJlZTM5YzVjNzRjOWJhYjVmNSI6ImY0ODk1Yzk2NTNiNDRhOTYxNTJiODkzYjdjOTRkYjgwMDU3ZmI2NzgyNGQ2MWM1YzQxODZiOWQ4ZjE2ZDNkOTgiOiJhMDVkZTY1MzFhMWFhMWIyYmEzZmFlYThhZDZhYzIwOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiOTY3MGRlYjcwN2NhYWJjODg4YTNiMGRmNzI3MDk0MjkzNDczMmUwMmJlNzI4YTRiZWRiNWZjOWNhNGQ2NzViMmYzYjQ3YzcxMzJjMzY0Y2U2MjkyY2VmN2MxOWI2MGM3IjoiYmJhMzRlNmY0ZWUyN2U1ZDRlODg1ZTU5ZjhiYmIwZGM3MzUzYTg5MTJlNjY2MzdkNzUxNWE2NmU1Mzk4ZDlhOGNiZDMyOGZlZDMyZjcxYmRkMzRjNzNjZGY5N2UwZDIxMWJlNmRhYmZiMDE0NGUxMDExZmQxMzZjZjAxZWE0ZTQiOiI5ZjU1ZGEzNmJhYmQ2ZWE0MjA4MmY1ZjVkNDMzMGYwMjM0NDBiYjg2NGY4YWQ1NDk4YTI5Y2Y4OTc1N2VhZWFiIjoiODAxM2EzMDkwNThjOTFjODBmNGQ5NjZmOThiY2UxZDQyOTEwMDNhZDU0N2U5MTU3NzdhM2ZjZThhZTJlYWY3NyI6ImM4MzEwNjI3MmQ0NGU4MzJlOTRjNzA5NmM5YzExZjYzNDJlMTJlYzA2ZDVkYjMzNjQyNGFmNzNkMTI0NTE0MDYiOiJiYzhkNGQwMDYwOTY2MmMxMTYzZGNhOTMwOTAxODIxZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNmQ5ODRjOGFiOTIzYTdlMTE4NDQ3ZmQ1M2FkMjg3YjhmMDFkMWU2MTEyY2ZmMTJiZmIzMzhlY2QzZWQxNmJhZmRkNjM0Njc3YzYwMGJkZDY4Zjg1MmE5NDZmNDVjM2Q5IjoiZWQwZTUyNGVkMjk5MGVmMzQ4ZGJiMTViM2Y5NjRiMTJhZDMxMDk5NzhkNjk1MmFlMTkzYjIxZTk0NTEwYTQ3NDA2OTI2NjIwNzk4ZTcxYTBmZmNiZGQyZTU0ZWM0NTUwOWQ3ODRhOGJmYzlkNTljYjczM2Y5ZjExZmM0NzRiNWUiOiIwYTNhMzIyNjBkMDRkZDdhODJmYjA4NzNlY2FlN2RiNWU1YTRiNmE1MWIwOWY0YmY4YTk4OWUxYWZhY2JkYTNiIjoiM2NiY2FiYjgzYWFiNWEzZTU0ODM2YmJmMTJkM2E3ODYyYTE4ZTJkZmZlZWI4YmRkNTc3MDkzNmQ2MWZkODM5YSI6ImY2M2IzMGEzZWZjMDI3M2ViYTAzYmYzY2Y5MGIxZTRhYzIwYjAwZTUzYTMxN2RiZjc3YjBmZTcwOTYwZTdjNjAiOiJhYjlhZjE0NGU4ZmFkNmE5NzhhNjM2YWQ4NGUwNDY5ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMmM1OTUyMGQ2ZjhjZTk0NmRjYzUyMjJmNGZjODBiYTgzZjM4ZGY5ZGNlMjg2MTQxMmVlYmIxNjE0MjQ1MzMxNjI2ZTdmYjkzZWVkYmFkMzNhMTJlOTRjMjc2ZGVmZjBhIjoiMjg4MmQ0YTMwYjIyNjU5Yjg3YWQyZDcxZGIxZDdjZjA5M2ZmY2E4MDA3OWE0ZWYyMTY2MGRlOTIyMzk0MDk2OWFmZWM3MGIwMzg0YTU0YjFkZTliY2NhNmI0M2ZiMTgyZTU4ZDhkZmNhZDgyYjBkZjk5YTg5MjkyMDE0NzZhZTkiOiJkM2MxN2EyZDljNWRhMDUxYjJkMTgyNTEyMDgxNGVhZWUwN2RmY2E2NWFiNGRmMDExOTVjOGIxZmNlYTBlZDQxIjoiZGNjMzk1NTViODdmMzE5NzNhZTA4NWY4M2VhZjQ5NzQ0MWQyMmFiNmQ4N2I2OWU0NzI5NmIwYWI1MTczMzY4NyI6IjlhOGExYjRjY2Y4MjMwZTNkM2ExYmU3OWU2MGFlMDZjMzkzZmU2YjFjYTI0NTI4MTgyNTMxNzQ2OGNhMTE0YzciOiJmYmE1MjNhMDljNTg3ZWNhZDRlN2U3ZmQ4MWU1Y2EzOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMWMxMjA3ZjUwYjY0NWFhZWQ1YzE2ZmUzNmY2YWFlODNhZjQ5MjRlNmI5OGE3ZTJhMjUzM2E1ODRjMWJhYzEyM2Y4YjZmMGUwNTEwOWUwMTMyOTUwYWU5N2IzODkwMDFhIjoiOGFlOWE1OTAzZGEzMmEzOGI3YzZmZWQ5MmRkMGM2YTAzNWNhNTEwNGEzNTI4ZDcxYTNlYWNjMmYxNjgxMzc5NzI0OTkxYTAwNTNlOGRhYzY1ZTM1ZjNkZWVlMDQzNWU5OWY4NjM2NDU3N2M4ZWJkYmEzMjE4NzI5NzNkYzk3OTAiOiI1NjhiZmVlNjgxZDdmOWJlMjNhMTc1YTNjYmY0NDFiNTEzODI5YTljYmRmMDcwNmMxNDVmZGNkNzgwM2NlMDk5IjoiZTMyY2I1ZmVjNzJjMDY4ODk0YWFlYWJmYzFiOGQ1ZTBkZTBiNWFjZGYyODdhODJlMTMwYTQ2ZTg0Njc3MGRjMiI6ImQ0NDE4YzMzMzY4N2ExYzE1Y2FjN2Q0MDIxZjdkODgyM2ExMTRiYjk4ZjkyYzhhNmRjY2M1OWZmOGFkNTFjMWYiOiIxOTRlMzAxODM3N2NlZjcxNjEwNzk0MDA2Yjk1ZGVmNSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMjgyNTQwMTRjNWQ2ZWJmOWJkOWU1ZjM5NDZmYzk4ZTU1ZmUzNTFkZWVlOGZjNzAzMzNlNGYyMGYxZjc3MTlhNTIyYjNlYTlhNDQyNGFmZTY4MjA4ZDFjYzZjMTI4YzQ3IjoiOThhMGRiOTg1NTQ0YzMzOTkwYWVlMGY2OTY1NWRiYTcxOThlNjcyMGNlNTZmZjlkNDY2MmUyNmYwYzZiNGVlN2FiNTk5OTMyYzA1Mjk1ZjZjNWE0MDExMDg1YzViMmM4NjFhNWE4YWU0ZjU3MmNlNjE0ZmYyZGFmYzBmZGRiMzQiOiI2NDIxNWNiZTM4NGYxZjRjZjU0ODA3OGZmZDUxZjkxZWVlOWE4YmFlNWFhY2RkMTljYTE2YmNhYWYzNTRmOGFkIjoiMmUyMWRmNjM4ZGFiZTI0YWViZjYyZDk3ZTI1ZjcwMWY3ODFkMTJkMDA2NGYyZjVhNGE0NGQzMjBjOTBiNzI2MCI6IjdmOTM2Mjc0Zjc0YTQ2NmNiZjY5ZGJmZTQ2ZGI3OWYzYzM0OTM3N2RmNjgzY2I0NjFmMmRhM2I4NDJhZDQzOGUiOiIyNWM0NjljYzg0MDdiODJmNDJlMzRmMTFkYjNkODQ2MiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImUyNmM4YTEzZGFlNWMyZGE4MTAyM2YyN2FiMTBiODc4IjoiZmVhMTA0ZjkwYzU4ODFkZjdhZDFjODYzMzA3YmFkMjJjOTg3NzBlY2QwZDcxNzUxM2EyODA3NjgyNTgyZTNlMThlODFkNzkzNWM4YTdiYWNkZGQ1MTc2ZTdjYTQ5MTFiOWY4ZjViMWQ5YzM0OTE1MmZhMjE1MzkzZWIwMDYzODQiOiIiOiIiOiIiOiJmZDg3MzM3YzMwNWEwYThlZjhlZWY3OTc2MDE3MzJjMiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjhkN2RkYTIwYTk4MDc4MDRiZmMzN2JkNzQ3MmQzYjBjIjoiMWQ3MjNjYmMyZmYyYzExNTE2MGU3MjQwMzQwYWRiZjMxYzcxNzY5NmQwZmRmZWNmM2VjMjExNTBmY2EwMGNkZTQ3N2QzN2UyYWJiZTMyZjM5OWE1MDViNzRkODJlNTAyZmJmZjk0Y2VjYWM4N2U4NzEyN2QxMzk3ZDNkNzY1MzIiOiIiOiIiOiIiOiI3MjIxNzYxYjkxM2IxZjUwMTI1YWJjYTZjM2IyZjIyOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImMwMmUzYjZmZDRmZWE3ZWM1MTdhMjMyZjQ4YWFhOGNiIjoiMDgyMGZjMjFjZWNiYTZiMmZlMDUzYTI2OWEzNGU2YTc2MzdkZWRhZjU1ZWY0NmQyNjZmNjcyY2E3Y2ZkOWNjMjFjZDgwN2UyYjdmNmExYzY0MGI0ZjA1OTk1MmFlNmRhNzI4MmM1YzMyOTU5ZmVkMzlmNzM0YTVlODhhNDA4ZDIiOiIiOiIiOiIiOiI2NjdkNGRiZWZlOTM4ZDZhNjYyNDQwYTE3OTY1YTMzNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjlhZWUwMzI2ZjliMTZmODhhNDExNGU4ZDQ5YjhlMjgyIjoiZWYwYWFlM2Y5YzQyNTI1MzIwNTIxNWU1YmYwYWQ3MGYxNDFhZDhjYzcyYTMzMjI0N2NmZTk4OTYwMWNhNGZjNTJiYTQ4YjgyZGI0ZDAwZmUxZjI3OTk3OWI1YWVkMWFlMmVjMmIwMmQyYzkyMWVlMmQ5Y2I4OWUzYTkwMGI5N2QiOiIiOiIiOiIiOiI2NTFhZDc4M2ZlM2RlZjgwYTg0NTY1NTJlNDA1Yjk4ZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjFlN2E0OTYxZDFjZDJmZDMwZjU3MWI5MmE3NjNjMmM1IjoiYTkyNjJlZDViNTQ4ODBjYzhlY2Q0MTE5Y2NlOWFmZTNkZTg4NzVkNDAzZjdjYTZiOGVkOGM4ODU1OTQ3MGIyOWU2NDRmZGRkODNlMTI3YzVmOTM4YmM4YTQyNWRiMTY5YzMzYzVjMmQwYjBjNTEzM2M4Zjg3YmJjMGIwYTdkNzkiOiIiOiIiOiIiOiIxMTI0YzUwOWNhNTI2OTM5NzdjZjQ2MWIwZjBhMGRhOSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImFlMGIwZDJlODRmNDhjNjMyZjAzMTM1NmNkZWE2MGFjIjoiNTU0Y2Y2ZmFkMWMzNzZhZDYxNDhjZDQwYjUzMTA1YzE2ZTJmNWRkNWZhNTY0ODY1YjI2ZmFhOGMzMTgxNTBiZmIyMjk0ZTcxMTczNWRmNWViODZmZjRiNGU3Nzg1MzE3OTNiYWQ0MjQwM2Q5M2E4MGQwNWM1NDIxMjI5YTUzZGEiOiIiOiIiOiIiOiIxMjEyZTVkMzA3MGIxY2RmNTJjMDIxNzg2NjQ4MWM1OCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE2YjhjNzQ5NWQ0M2NkMmZmNWY2NWFkMmFiNDhlY2VmIjoiN2NmZmUyYmVmMGQ0MjM3NGY3MjYzYTM4NmI2N2ZiYTk5MWU1OWNlZmQ3MzU5MGNiY2RlM2E0ZGM2MzVhNWEzMjhmMWE4ZTVlZGQzYWRhNzU4NTRmMjUxZWU5ZjJkZTZjZDI0N2Y2NGM2Y2E0ZjZjOTgzODA1YWEwZmU5ZDMxMDYiOiIiOiIiOiIiOiJkMzg2OWE5YzUwMDRiOGE2YWU4ZDhmMGY0NjFiNjAyYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImEyZDVlZmY2ZjczZjk4ZTViMDRjMDE5NjdkZmZhNjliIjoiNTk3NTliYjkxYjNjNGZlYjE4YzBmMDg2MjY5ZWM1MmUwOTdiNjc2OThmNGRmZTkxZWJlOGJlZjg1MWNhYTM1Y2FkYjNmZDIyZDEzMDlmMTM1MTBlMTI1Mjg1NmM3MTM5NGE4ZTIxMGZkYmYzYzdhYWU3OTk4ODY1Zjk4ZTg3NDQiOiIiOiIiOiIiOiJhMWY5OWJkOTUyMjM0MmU5NjNhZjJlYzhlZWQyNWMwOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImVhMWY0N2ZlNWUyODExMzY3MDY0MTllYTliNjUyOTY3IjoiMGVjN2M2MTdmODViZWM3NDA0NDExMTAyMGM5NzdiZTMyYWI4MDUwYjMyNmViYzAzNzE1YmJiZmZhNWEzNDYyMmYyMjY0ZDRiNTE0MWI3ODgzMjgxYzIxZWE5MTk4MTE1NWE2NGZiN2I5MDJlNjc0ZTlhNDFhOGE4NmMzMjA1MmIiOiIiOiIiOiIiOiJkYWY3NWI4Mjg4ZmM2NjgwMmIyM2FmNWZkMDRhOTQzNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjZmMDcyYzY4MWE4MmMwMGRjZDBkOWRkNWI3ZmZhMmFmIjoiY2Q3Y2U5MGYwMTQxZTgwZjZiZDZmZjNkOTgxZDhhMGE4NzdkMGRkYWU3Yzk4ZjkwOTE3NjNiNTk0NmZjMzhiNjRjMWVmNjk4NDg1MDA3ZDUzMjUxYWQyNzhkYWY1ZDRhZTk0YTcyNWQ2MTdmYzlhNDVhOTE5YTllNzg1YTk4NDkiOiIiOiIiOiIiOiIzOWMwMTQ0ZjI4YzVhNDkwZWZmNjIyMWI2MjM4NDYwMiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5ZDczMDY1NTM2NmUyYWE4OWVlMDkzMzJiZDBhNTA1MyI6Ijg1NDc2NmU4NDJlYjE2NWEzMTU1MWY5NjAwODM1NGJjYTE2MjhhOTUyMGQyOWMzY2M0ZjZhNDEwNjhiZjc2ZDgwNTRiNzViN2Q2OWY1ODY1MjY2YzMxMGI1ZTlmMDI5MGFmMzdjNWQ5NDUzNWNiNWRjOWM4NTRlYTFjYjM2ZWI3IjoiIjoiIjoiIjoiYmFhMmEzZWQ2ZmRjMDQ5ZDBmMTU4NjkzZGI4YzcwZWYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMzM2Mzg4MTYxMWJmZDVkMTY4MTQzNjBlODNkODU0NGYiOiI2YWJmYWIxNGNiZjIyMmQ1NTNkMGU5MzBhMzg5NDFmNmYyNzFiNDg5NDNlYTZmNjllNzk2ZTMwMTM1YmM5ZWIzMDIwNGI3N2FiNDE2YWMwNjZkYTBhNjQ5Yzg1NThlNWEwZWFjNjJmNTRmMmY2ZTY2YzIwN2NhYjQ2MWM3MTUxMCI6IiI6IiI6IiI6IjViZTQxMGNlNTQyODhlODgxYWNkM2U1NjY5NjRkZjc4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjE0ZTU4OTA2NTQyMzUyOGZmODRhMWY4OTUwN2FiNTE5IjoiMGQyZTQ0NmNhZDM4N2E5NjJmZjIyMTdjN2NmNDgyNmRjYWJiOTk3YWI3Zjc0ZjY0YWExOGZiY2I2OTE1MTk5M2YyNjM5MjVhZTcxZjlkZmRmZjEyMmJiNjE4MDI0ODBmMjgwMzkzMGVmY2UwMWEzZjM3Yzk3MTAxODkzYzE0MGYiOiIiOiIiOiIiOiJmYzJkM2RmNmM5YWFlNjhmYjAxZDgzODJmY2Q4MjEwNCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5NzRjNWFlOTAzNDdkODM5NDc1ZjBmOTk0ZjJiZjAxZCI6ImFhMDRkOWZjNTYzNDlmZGQzMWQ4NjhlOWVmYzI5MzhmOTEwNGMwMjkxZTU1YWMwYWEwYzI0ZWM0NjA5NzMxYjhlMGFjMDRiNDIxODBiZGUxYWY2YWQxYjI2ZmFmZjhhNmRlNjBhOGE0YTgyOGNkNmY4NzU4YzU0YjYwMzdhMGVlIjoiIjoiIjoiIjoiM2NhZWM0ODIwMTUwMDM2NDNkNWEzMTlhMmFmNDhmYjQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYjNhMTEwNTg3YTE2YzFlYWZlNTExMjhhNjY4MTZlY2YiOiIyMDNiYmE2NDVmYjVjY2VlMzM4M2NmNDAyZTA0YzcxM2I3YTZiNmNjYThiMTU0ZTgyNzUyMGRhYWM0ZWEzYTAyNDdiYmRjM2IyY2Q4NTNlMTcwNTg3ZDIyYzcwZmI5NmMzMjBlYTcxY2I4MGMwNDgyNjMxNmM3MzE3Yzc5N2I4YSI6IiI6IiI6IiI6IjlhZjRmNjdhMzBhNDM0NmUwY2ZjZjUxYzQ1ZmQyNTg5IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1NTU0NjA2OGNkNTI0YzUxNDk2YzVmYzk2MjJiNjRjNiI6Ijk1MWU3MTJkMDU3MDI4MTU4ODMxY2E4Yzc0ZDRhZTMwM2M2ZTQ2NDFjMzQ0YTFjODAyOTIyNjBiZGQ5ZDhlMmY1Yjk3NjA2MzcwZTk1OTAzZTMxMjQ2NTlkZTNlM2Y2ZTAyMWNkOWNjYzg2YWE0YTYxOWMwZTk0YjJhOWFhM2NjIjoiMmQ2ZGU4NjYxYzdhMzBhMGNhNmEyMGMxM2M0YzA0NDIxYmEyMDBmYmVmNGY2ZWI0OTljMTdhZWUxNTYxZmFmMSI6IjQxNzk3YjJlZWFjY2I4YTAwMjUzOGQzNDgwY2IwYjc2MDYwZWU1YmE5ZDdlNGEyYmIyYjIwMTE1NGY2MWM5NzUiOiJiNzQ0OTgwYmIwMzc3ZTE3NmIwN2Y0OGU3OTk0ZmZmZDdiMGQ4YTUzOWUxZjAyYTU1MzVkMmY0MDUxZjA1NGYzIjoiNjViOWY3MzgyZWQ1NzhhZjAzZWZhMjAwOGRiZGQ1NmYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImEwYzkyNTY1NjQwYTMzMTVjYWM4ZGE2ZDA0NThmYjA3IjoiNmU5YjMxNzU1YzFmNDVkZjdkNjg1Zjg2MDQ0YWIzYmMyNTQzM2EzZmYwOGFiNWRlNzE1NGUwNmIwODY3ZjRlMzUzMWVkMmUyYTE1YWI2M2M2MTFmYzI4OTQyNDBmZGFjMWQzMjkyZDFiMzZkYTg3Y2FhMjA4MGQxYzQxYmNmMjQiOiJjNmM3NDY5MGJkZWUyNjI4OGQyZjg3YTA2NDM1ZDY2NDQzMTIwNmIyM2IyNGY0MjZlODQ3ZmI4OTJkNDBkNWQ1IjoiNGU3ZGMxYWRiYzhiYzE2YmE3YjU4NGMxOGEwZDdlNDM4M2M0NzBiZmYyZjMyMGFmNTRhZDVhZGU1ZjQzMjY1YiI6ImM2ZmI4ZWUxOTRhMzM5NzI2ZjUwNTFiOTE5MjVjNmEyMTQwNzlhNjYxZWM3ODM1OGU5OGZjNGY0MWU4YzQ3MjQiOiJjM2Y4NDllZTdkODcyOTEzMDFlMTFiNDY3ZmEyMTYyZiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNjNlMTQzYmQ2YTg3MDY1YTAwZWVhOTMwNTkzZjliMjkiOiI2MmMyYzc5MGNiNTY1MThlZDJkOGQ2NTk1MmJiZDRhYjg1YTU2NDYzNDk1Yzk0MGI5NGY0MDNhOTMzMzhiZGM5NjEyOWZlZWE5MzM1YjFhM2UwYWRhN2NmNGMyMDdmNDczMjAxM2JjNmE1MmRiNDE0MDdiZjVkNmZlOTE4M2IzYyI6IjdiNGU5ZmYwYzhmOGM5MGY4YjMyNGM3MTg5MjI2ZDNhZGNjZDc5ZGYyZDBjMjJiNTJmYjMxZGJiNWRmZWZiYTYiOiI0OWUxYWVjZjJiOTZhMzY2MzI1ZGMxODkyYzAxNmE1NTM1ZGQyNDgwMzYwYTM4MmU5Y2M3OGJmNzViMmJiYTM3IjoiZjRjZTFkMjdlNzU5ZjNiYTRhNTZhYWFiNzEzNjQyYjRjNTY4MTBjOTk5NWZiZmMwNGNlMjg1NDI5Zjk1YThmNCI6IjUxMzExMWFiYWFlMzA2OWU1OTliNTZmN2U1ZmI5MWQxIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5OGRjMTZlOTVmOTdiNWI5ZDgyODc4NzU3NzRkOWQxOSI6IjJmYWI0YTYyOWU0YjIxZjI3NDg4YTBjOWVkMzZmYzhlNzViZWUwYzM4NjM0NmM2ZWM1OWE2ZjA0NTk3NWUyOTgxODQ0MGE2NjM4ZWIzYjllOTUyZTE5ZGY4MmQ2ZGM3YjhiOWMxODUzMGFlZjc2M2QwNzA5YjNiNTU0MzNkZGM2IjoiMmU5ZDJmNTJhNTVkZjA1ZmI4Yjk1NDk5NDdmODY5MGM5Y2U0MTAyNjhkMWQzYWE3ZDY5ZTYzY2JiMjhlNGViOCI6IjU3ZWNkYWQ3MWQ3MDlkY2RiMWViYTZjZjM2ZTBlY2YwNGFhY2NkNzUyN2NhNDRjNmY5Njc2ODk2ODAyNzI3NGYiOiI3YjJkYTNkMWFlMjUyYTcxYmNjYmIzMThlMGVlYzk1NDkzYTIzNmYwZGVjOTdmMjYwMGRlOWYwNzQzMDMwNTI5IjoiODQxODgyZTRkOTM0NmJlYTMyYjEyMTZlZWJjMDZhYWMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjVkYmFjNWMzMTM1MjdkNGQwZTVjYTliNmY1NTk2ZWQ3IjoiYzAwYjI4Yzc4ZGE0ZjljZTE1OTc0MTQzN2ZlN2Y5MGU0ZTIzZWNkMDFjZDI5MmYxOTcyMDJkZWNiYmM4MjNkOWNlNDZiODE5MWMxMWU4ZjhkMDA3ZDM4ZTJlY2Q5M2I4YmQ5YmJhZDU4MTJhYWY1NDdkZGY0YzdhNjczOGI3NzciOiI0NjBjNTRmNGMzZmU0OWQ5YjI1YjA2OWZmNjY2NDUxN2VkM2IyMzQ4OTAxNzVhNTljZGU1YzNiYzIzMGMwYTllIjoiYmY1MTg3ZjFmNTVhZTY3MTFjMmJjMTg4NDMyNDQ5MGJmMmQyOWQyOWU5NWNhZDdhMWMyOTUwNDVlZWQ1YTMxMCI6IjI4ZmQ4Mjc3ZGNiODA3NzQxZDRkNWNiMjU1YThkOWEzMmVmNTZhODgwY2NmMmIzZGNjYTU0NjQ1YmQ2ZjEwMTMiOiJiNDg4ZjVjMTNiYjAxN2IwZDlkZTIwOTJkNTc3Yzc2ZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMjU0ZDVmNTA0NDQxNWM2OTRhODkyNDliMGI2ZTFhMmMiOiI0YzFjYzllYmU3YTAzY2RlMzE4NjA2MzdkODIyMmZhZWVmYTljYmY3ODlmYWI2MmU5OWE5OGQ4MzA4NGZlZjI5ZWFmY2Y3MTc3ZDYyZDU1NDM1YTFhY2I3N2U3YTYxYWQ4NmM0N2QxOTUwYjg2ODNlMTY3ZmUzZWNlM2Y4YzllOCI6IjcxYWY1ODQ2NTcxNjBmMGYwYjgxNzQwZWY5MzAxN2EzN2MxNzRiZWU1YTAyYzg5NjdmMDg3ZmRiZmQzM2JmZGUiOiI5NmU4NTIyZjZlZDhlOGE5NzcyZmZiMTllOTQxNmExYzYyOTNhZDZkMWVjZDMxNzk3MmUyZjYyNThkN2Q2OGRkIjoiM2FhYTVlNGQ2YWY3OTA1NTc0MjE1MGU2MzBjNWUzYTQ2Mjg4ZTIxNmQ2NjA3NzkzYzAyMWQ2NzA1MzQ5Zjk2YSI6IjY2NjI5YWY0YTBlOTA1NTBiOWJkMzgxMTI0M2Q2Yjg2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJiNDZmY2VlZDBmY2MyOTY2NTgxNWNjOTQ1OTk3MTkxMyI6ImZmNjJkNTJhZWQ1NWQ4ZTk2NjA0NGY3ZjdjNTAxM2I0OTE1MTk3YzczNjY4ZTAxYjQ0ODdjMzI0M2JiZjVmOTI0OGE0ZmRkNmVmMGY2M2I4N2ZjOGQxYzVkNTE0ZmYyNDMzMTliMmZiZGZhNDc0ZDVmODNiOTM1Mzk5NjU1ZTE1IjoiOTk0ZDZiNTM5M2ZiZjAzNTFmMGJjZmI0OGUxZTc2M2IzNzdiNzMyYzczYmY4ZTI4ZGVjNzIwYTJjYWRjYjhhNSI6IjExOGJiOGM3YTQzYjljMzBhZmFmOWNlNGRiM2U2YTYwYTNmOWQwMWMzMGI5YWIzNTcyNjYyOTU1ODA4YjQxZTQiOiJiYjQ3ZTQ0MzA5MGFmYzMyZWUzNDg3M2JkMTA2YmY4Njc2NTBhZGY1YjVkOTBhMmU3ZDBlNThlZDBhZTgzZThhIjoiMTg2NWZlZTYwMjRkYjUxMDY5MDcyNWYxNmI5Mzg0ODciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImUxYTVkZDMyZmM3Y2VmYjI4MWQ1ZDZjZTMyMDBmNGNhIjoiYmYxYmE0MTY2MDA3YjUzZmNhZWU0MWY5YzU0NzcxYzhhMGIzMDlhNTJlYTc4OTRhMDA1NzgzYzFlM2U0M2UyZWI5ODcxZDc5MDlhMWMzNTY3OTUzYWFiZGY3NWUzOGM4ZjU1NzhjNTFhNjkyZDg4Mzc1NTEwMmEwYzgyYzdjMTIiOiIzMmU5OTIyYmQ3ODAzMDM4MjgwOTFhMTQwMjc0ZDA0Zjg3OWNkODIxZjM1MmJkMThiY2FhNDlmZmVmODQwMDEwIjoiMDE4MzBkZGQyZjBlMzIzYzkwODMwYmVkZGVkZjE0ODBlNmMyM2IwZDk5YzIyMDE4NzFmMThjYzMwOGFiMzEzOSI6ImYzNmQ3OTJkYmRlNzYwOWI4YmY0NzI0ZDdkNzEzNjI4NDBiMzA5YzVmMjk2MWUyNTM3YzhiNTk3OWE1NjlhZTgiOiI3MDgwZTgzNzlhNDNjMmUyOGUwN2QwYzdlZDk3MDVhOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZDFiN2JlODU3YTQyMmI0MjVhZTYyYzYxZTkwYTE5MmEiOiI2YWMzNGM0Y2UyMmI2NDQ2MzIyODNhYjEzZTI5NGRmMjA5M2U5MzlkMzI0MTEzNDBiMDQ2YzI2ZmNjNDQ5ZDBmZDZkMTQxMzJjNzIwNWRmMzAzZGJiNjYzMTkwZTZlODZhZDEyZTE0ZTE0NWI2NjAzMzA4MjQxZjM4ZDk0ZWI1ZCI6ImFhY2ZlODU1M2Q1ZmZlZjZhYmMzZmQ4Zjk0ZDc5NmNhZTIwNzlmZjA0ZjdhYjFiNDE5ODIwMDNmMDI0MjdjN2EiOiIwMWQyZDFiYzI5ZDZhNmI1MmJiMjliZDY2NTJiZTc3MjA5NmNhMjNjODM4YzQwNzMwZDViNGE0ZjhmNzM1ZGFhIjoiMjdhZjcyOGVlMDdkM2Y1OTAyZjRlNTY0NTNiNmE5ZmViMzA4ZWYxNDc5NWViNTYzMGIyNjUxZGViZGQzNmQ1YiI6ImIwM2ZiY2QwM2ZhMWNjNjlkYjBhNGUzNDkyYTUyYmFkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhMmM0OWFhNmYzZjkyZTM2MjY2YmYyNjdhZjU4NzdlZCI6IjU2ODRjM2ViOTkzMTQxMjcwNzg0ODQ5NTkzMTRkNTJiM2JjNTBjYjM2MTVjMGVlZjZiNDg4NTBkOThhZWUwNGM1MjhiMDY5M2JlMTNlZDFiYjQwNDBlOGU5NmNiMTNjMzE2MTQzZjA4MTVjZDY4ZDFiYjc5MzFhM2Q5Yjg4YTNkIjoiNTY2NTIyMDg1NDI2Yjc2YmRlZjE1MmFkZWZkNzNlZjBmNzZlZWU0NjE0YmM1YTQzOTE2MjllYzQ5ZTBhY2ZmYiI6IjMwZWY5NTg1MTQ4ZGQyMjcwYzQxNTQwYTQyMzUzMjhkZTg5NTJmMjhjZjU0NzJkZjQ2M2U4OGU4Mzc0MTllOTkiOiJhZGM0NmUwYWZjZjY5MzAyZjYyYzg0YzVjNGJmY2JiNzEzMmY4ZGIxMThkMWE4NGRjMmI5MTA3NTNmZTg2YTJkIjoiNGVkYzQzODM5NzdlZTkxYWFhMmY1YjlhYzQyNTc1NzAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI0Mzg1MmM1MzA0MWEzYTRmNzEwNDM1ZGJkM2U0MzgyYiI6ImFiN2JjYTU1OTUwODRiY2NkYmE4MGFkZTdhYzNkZjJhMGNlMTk4ZmE0OWQyOTQxNGMwMjQ5ZWMzZDFjNTBkMjcxY2E3NGJhNWMzNTIxNTc2YTg5YTE5NjRlNmRlZGVkMmQ1YmE3ZmYyOGEzNjRhOGY5MjM1OTgxYmVjMWJlZGZhIjoiYzU2MTJhOTU0MGI2NGZjMTM0MDc0Y2IzNmY0YzllYTYyZmZmOTkzOTM4NzA5YjVkMzU0YTkxN2U1MjY1YWRlZSI6ImVlZTIyNThhYmE2NjVhYTZkM2Y1YjhjMjIwN2YxMzUyNzZmNTk3YWRiMmEwZmJmYjE2YTIwNDYwZThjYzNjNjgiOiJhNmQ2ZDEyNmJlZDEzZGJjZjJiMzI3YWE4ODRiNzI2MGE5YzM4OGNiMDM3NTFkYmU5ZmViMjhhM2ZlMzUxZDYyIjoiZTA0YzNkZTUxYTFmZmU4Y2RhODllODgxYzM5NjU4NGIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1MjYyODU1MWNlOTBjMzM4ZWQ5NGI2NTVkNGYwNTgxMSI6ImIzYTRhM2M0ZDNkNTNmZmE0MWI4NWNlM2I4ZjI5MmIxY2M4ZTVhZjc0ODgyODZkNGM1ODEwMDVmOGMwMmM1NTQ1YzA5YmIwOGQ4NDcwYjhjZmZkZjYyNzMxYjFkNGI3NWMwMzZhZjdkYzRmMmYxZmM3ZTlhNDk2ZjNkMjM1ZjJkIjoiZjVmOWQ1YjUxMDc1YjEyYWEzMDBhZmRjN2I4ZWEzOTQ0ZmM4Y2Y0ZDFlOTU2MjVjYzRlNDJmZGZkY2JlYjE2OSI6IjYwYmNjYmM3MzQ1ZjIzNzMzZmU4ZjhlYjk3NjA5NzUwNTcyMzg3MDVkOWNlZTMzYjMyNjlmOWJmZWRkNzIyMDIiOiJjMGZhM2FmZDZlOWRlY2ZiZmZhN2VhNjY3OGQyNDgxYzVmNTVlYzBhMzUxNzJmZjkzMjE0Yjk5NzQwMGU5N2MzIjoiNWExMTM5MDZlMWVmNzZiN2I3NWZlZmJmMjBkNzhlZjgiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwZTQ4NzNjNGNiY2RlMjgwYWJjNjcxMWE2NmRiYjgxYSI6IjFhYjdjN2Q4ZmU4ZjUwNWUxZGQ3ZGRiOGU3Y2RhOTYyNTcyZjcwMDRiMmExNGM3YTdjNWJjZjI0YmQxNjYxNmUyYzQyYzUwYWU1ZGI5OTgxY2NkN2QwYzc5MDYyYWM1NzJkMzg5MzQ4NmJkMGFlMWY5OWNiYzFkMjhhOWU0YzFlIjoiZTRiODllMjg2NjNlODUzZjhiMzgwYzhhNDQ5MWI1NDEyMWZlNjkyNzM0MGE3NDM0MjM2MmMzN2Q4ZDYxNWI2NiI6IjYxOTc3NTg3ODg3OWVmZjllZTIxODk3OTBmZjZmMTg3YmFlZDRlZDFiMTU2MDI5YjgwZTdhMDcwYTEwNzJhMDkiOiJiYTNkNjczZTVlNDFiZDFhYmJjNzE5MWNjNGI5YTk0NTIwMWI4ZmVmMDAxNmU0Nzc0MDQ3ZWUyYWJmNDk5ZTc0IjoiNDc1OGZkMDIxYzM0YTVjZjZiZWE3NjBhZDA5NDM4YTAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIwNjg0ZThlZjkzYzMzNjNiYTUzNWM0ZTU3M2FmMWMyNCI6Ijc0OGE1ZjVmZGUyNzFjNTYzYThmOGQxNTUyMGQ2ODE4ZjdlZDBlZmI5YjQzNGFkZjJmZjk0NzFiMzkxZGQyMjViMzc4NjgxNzlmZmE5YTZlNThkZjNiMWI3NjViODk0NTY4NWEyZjk2NmQyOTY0OGRkODZhNDIwNzgzMzk2NTBiIjoiZTkwYzgyMTUzZDIyODBmMWRkYjU1YmQ2NWU3NzUyYmY2NzE3ZmJlMDhjNDk0MTRmNmMxMjliZjYwODU3OGRiNyI6ImMxN2U5N2M5M2NmYWJlMGI5MjVjYTVkMjI2MTVhMDY0MzBhMjAxYjc1OTVhZDBkOTk2N2NjODlhNDc3Nzk0N2QiOiIzZDU1NGM0MzBjODkyOGRjZGIxZjZkNWU1YTQzMDZiMzA5ODU2YTliNzhjNWY0MzFjNTVkN2ViZDUxOTQ0M2JiIjoiZDNkYTcxYWY3MGUxOTY0ODNjOTUxZDk1ZWIzZjAxMzUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4OWI4ODVkZGIxMmFiYzRmNzQyMjMzNGYyN2MwMDQzOSI6ImUyMzY2ZWVjNjI2YmZkOWNiOTMyYmNhYTA1NjlkZTZhN2EzN2NmMWRmZGUxZjI1ZDAwZDFhMGM4OWZlMjVmZWE1OTJjYmQyYWY3YzgyMDI1MjFmYTQ4ZTE1ZjdjYzdlOTdlNDMxYjIyMmI1MTZhM2FkMmJiN2I1NWI3ZmNmN2Y0IjoiYzc3ZWU5MmJkMTc5MzllZmU5YmVlNDhhZjY2NTg5YWVlMWQ5ZmU0Y2Q2YzhhZTI2Yjc0YjM3OTllMzUzNDJhNiI6IjIzZTgwZDM2Y2E3MmVjYzM4NTUxZTdlMGE0Zjk1MDJiZWQwZTE2MGYzODJkODAyZjQ4ZmIyNzE0ZWM2ZTMzMTUiOiI2YjgzZjc0NThkYzgxM2NlMGI5NjNiMjMxYzQyNGU4YmNlZDU5OWQwMDJjMGVmOTFhOWMyMGRjYzNmMTcyZWE1IjoiODFkMTNhNmI3OWYwNTEzN2UyMzNlM2MzYTEwOTEzNjAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImZmNTY4YmUwMmE0NjM0MzExM2YwNjk0OWExNmNjN2Q5ZGEzMTVhZWY4MmY1NjgxZjA0NTk2NTBlNWUxODBlNjVkMWQ3N2IwMGU1Y2UzZTNmOWViNmMxOGVmZmY0ZGIzNiI6Ijc3ZGU0ZTVkYjNiMzA4YzM4YzgxNDIyODU4M2RmZDFlYjQxNTc3MWY0YWUzMGY5Y2MyZDM1YjQ4MDc1Mjg2YTRlOGMyYzZmNDQxZDFhYWM0OTZkMGQ0YmUzOTVkMDc4NTE5ZTMxY2I3N2QwNmQ2ZjdmZDRjMDMzYmM0MGZkNjU5IjoiIjoiIjoiIjoiNDQ4YWM3MDdiYTkzNGM5MDkzMzU0MjVkZTYyOTQ0ZDYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjZmMDkyYjg1ZWI5Zjk2NDI3NjQyZjY5NDY3OTExMTcyY2JhNmRmODZlMGRiMDhkMDRlODI0Y2RlNmZiOTFkOWI5YWYyY2VhNTNmNDJkNTNjNDVlZTNlNjlhMjMyNzE3MiI6IjY2N2QzZWQ5ZjQxYTE1NGVhMzNiNTUxODJiOGJlZTRkN2Q0NmVmZjhlODkwYzcwMzZjZjdjMjY2NWQ0NGMyOGY5ZTNhOGNmZjE2NmRhYmZhZjI2MjkzM2QzMzdlNzI5ZTBiNmE2MGE1MWQwMGJhMThmODc3YmRjOWQwY2M2NTllIjoiIjoiIjoiIjoiMTZhMjAwZjY4M2FiODYyOTQ3ZTA2MWNkZGFhYzU1OTciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjI2ZTYzNWE2YTJiNjQwMmI5NjhjMWVlYTEzYzZhOTgwYTBlZTliODQ5N2FiYzE0ZmNjZGM1YmY4NDM5MDA4ODYxZjc0ZGUyYzIwMDUwNTE4NWJmNTkwN2QzYWRjOWRlMiI6IjgwZTU2Zjk4OTNiZWI5ZjIyYjJiMDNjYWE4ZjE4NjFkNWIzMWIzN2Y2MzZmMmNjYmM3ZTQwNDBhZDMwNzNhYTIwZjJmM2M2YmZlZmMwNDFkZjhlNTdlNzEwMDc5NGM0MjczMmI2ZDRiNjNkOGJiNTEzMjljYTk5NjcxZDUzYzdjIjoiIjoiIjoiIjoiODA3NTg2Yzk3N2ZlYmNmMmFkMjhmY2Q0NWUxYTFkZWIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImIyMzljNDg1ZDMxOWNlOTY0ZDY5YmQzZGJjNWI3YWI5Y2M3MmFjOTEzNGEyNWU2NDFiY2QzYzhiNmY4OWU3ZTA4ZWYyZDBhNDVjZjY3NjY3YTRlMmU2MzRiMzJkNzNmZiI6ImM5NjNlMTdlZjQ2YjdiMmM2ODc1NjAxOTcwNGVjNzQzNWVjMDkzYzQyMzYwMGIzZjJmOTlkZDg5ODlmODUzOWExMWIxYjA1OThlOTNlODRkNTBiNjVlODE2ZTc5NDQyMWFiNTQ2YjIwMmU0YjIyNGE4NDk0NTM4ZGRhODVkYTgyIjoiIjoiIjoiIjoiMmEzMjE4YjRkNTlmOTliZDM4MjU2MzFhNmVlZmIwOWMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjAyMzk1NDVhMjM3MzViODAzYWU3Y2I3NzY2MTk0OTE3ZDZjY2UxNjRmN2VjNGY2NWM2Y2NkNWVjMWRiNTI5NzcyMmQ0Yjc0NjY1ODlkYTRkMzlmNDU4NTg1NmJjMWQ3ZSI6IjcxYTQ0MGI3MGEyYjVjZTQxYjg1ZGUyN2Q5ODdmYTJhMDYyOGQ3OTkwZGQ3Y2QxNDYwZmRkYzU0MTBjZTZlOWJiMGFlNGY5MDIzMWY0NWJjNzExODhmZDk0ZTQxNzAzODlhOGJiZTRhN2U3ODFjOTVjOWE5N2FkNzhiYTdkMDdiIjoiIjoiIjoiIjoiOWRhZmFhOGI3MjdjNDgyOWRkYTEwYTgzMWU2NzQxOWQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzUKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjIzN2U4OTE2ZWFkZDY1ZTM0MjJmZTU5YWIyNTdiN2U2OTU3ZmUyNGY3NjBiNDk5ZmJkMDUyMjQxODc5ZTgyOTRiMDFkMjE2OWVjMmI5OGY1MjY2MGQ5ZjUxNzBkZWUyMiI6ImQ4OTA4Y2ZjMWVhODUxOGMxNDQyZTQ2NzMxZjMwZmRhZDg1Mzk5ODk0ZGIyNjJiOGY0ZmRjMGRiY2JmMTFiNjBiNjBiMjVkMzEwOGY0YjE2OWZjYmVmNjIxYTE0YzYzNTUyNWZhM2FmOGNjZWY2YjkxZjgwODQ3OTUwOTk2N2Y0IjoiIjoiIjoiIjoiNTkzYzM5YzU2YmI5ZTQ3NjU1MDI5OWVlOGQ4NWQyZmMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjI4YjY2MzliNDE1Yzc5MDEyYzc0OWRjMmEwZDE4NDMzZWMzNmVkYTU1ODE1ZjA4NDEyNDE0NTNmYTExYjlkNTcyYjdjMjkyMDhlMDFkYmIwYmU5MWUxMDc1ZjMwNWQ3ZiI6IjY3NjdjM2ViNmJhMWIxOTQxMmMzMmJmZTQ0ZTRkMDMxN2JlYmExMGYzYWJlYTMyOGNkYTdiN2MxNDEwOWI3MjA0NmM4NjkxYzFjN2IyODQ4NzAzN2QzODFmNzdhM2JiYzg0NjRhNTFiODdkZTY4YmRjNTBlYzljNjU4ZjkxNWFiIjoiIjoiIjoiIjoiZTM5MDgwNjIxOWZhNzI3ZTc0YTkwMDExYjQ4MzVlZDYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImNlNzM1YTg1NDlmYzNmOWRmYzdiOTZiZjBkNDg5MzZhNzExNDM5YWM3MjcxZDcxNWEyNzg3MThhY2E5ZTJmZTNjODAxMDMwYmM3NGIwNDhhYzFlNDA4NTIzNDVlODdjYyI6IjUxMGIwZGMwNmU4NGNlYjkwMWM3MTk1YzJmMDBhZDdhMDRiZGQ3NWUwYWI1MmIzZDJjZDQ3ZGRmY2Q4OTI0OGRkNThlM2YxYWE4YzFmZmUzMDZmNDkzOTA1ZjY1MzY5ZWFlZDJhNWIzMzdkZmY4YWM4MWM0YzFlODkwM2E2YWQ1IjoiIjoiIjoiIjoiYmE4NzFiYTU4NDMwODNiNTUzYTU3Y2Y4ZGVmYTM5ZDciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzgKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg0MWVhOTJmYTQyYzA2NzY5YzVjNTJmZTE1MmQwNzgzN2I4ZmYwMDQ4MzkyY2FhNWRkMDQ1MDU0MzUzZDM2M2IyNTQzOWViNTg4NWU5Njc3MWRkZWQ0MDA1ZjJiYWY0MiI6Ijk3NTExYWU1MjU5MGEwYjY0Yjc1YzM3ZTEwYjg5NjcxODgwZDJkNmU4ZjkwNzgwYWMyNzI2M2RiYzBlMzJkMDgyNGJlNWU4MGE4OGNmOGZjM2Q0YzYwN2ViODczYzAzMjJkMDliOWNhMzQ5OGM0MDE1YzUzY2E2ZmVlODkwMDkzIjoiIjoiIjoiIjoiYThmYjMxMzYyYmQ5OTdhZGY0ZDkxMTZlMjNkYmFmMTAiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjU1Y2Q3NmZhNWYwMDRiOTdiYjhlMTQxNzBmNzlmNTI3MTVkMThjNjBmMTQyYjA2ZDE2ZThlMDZjMjc0Nzk4MTkwYTc5YzhiMzI1MTYzOTg5ZDg2MzIzYzAzZGJlMGQ2OCI6ImJhZmMwYmE2NDY2OWM5YTM2NTE0YmRlNjE2OTAzNDEwMWYyOWUyYTBhNGI5YTU1YzBhYWU3ZGZmMGM1YWNhMjM3MWI1MjNlMjZkYzQ0YmY3NTQ5M2JkYWEwMjNkMTU1NTI5NDE3ODI4OGI3MGYxYWU3MjE1MGQ5ZjcyNjViNGU2IjoiIjoiIjoiIjoiZmExNmRiZGFmMDFiM2MyMDI0MjZhZGFiZjYxZmE2NGEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJmZjNmMzA5OGZhM2QyYjIzYjM4ZWQ5ODJlN2FmYjYxZDQ2YjQ4NDhjODc4YjkyODBmOGU1ZWQ2YmQ4MTE3NmU3NmYwYTJhODUwNzFhNDExODI5Y2Y4NDQyMWMyMmYyM2UiOiI5MjE5NGUyYzcwMGZhNzI0NDg5NjgzZDBiNmRkY2Y3MmM4OWI5YzNmM2ZmNTg0ZTgwMmFlNDI2YmU0OTA4YjFhZGUwOTNiY2Y5YmFmNzczOGI5ODhkYzBmZGUxNzM5NDk4YTk3Yzk2MTBkYTg1M2E3YzgzOTgxYzZhN2I2ODA5NiI6IiI6IiI6IiI6ImY4NTQ5MDQyNmRjMjQzYmEwOWY5NzE5YmZmNzM1NDVhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNzI0MmMxMDIwYTYzNzcwY2NjZjZmODEwMDk3MDk5MDIzMmE5ZDExZDYxYzliMGQzOGZlNWU3YTU2OGE4NjI1MmE2NjQ4MTIxMmU1ZDUzYzg2ODU2MTI5OGRkNWJkZWVjIjoiN2MzODA2YTMyY2NmMzI1MmFjMjdhOTJhMDcyMDljZDcwMDBiMTYwZmFhNzBiOTAyNDQyMGI5MDM1ODdkMWQ3N2YwMDJkM2FiZTI4YjU2M2QzMmNjYzUwMmI4OGY4M2JjNTk5NmYzZGJiZjBmNTc4MzU4MzllYWRkOTQ1NjNiOWQiOiIiOiIiOiIiOiIyMjMyMTgxZjA4YzE1NjllZmFhZDFhODJiY2I1ZjNiYSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImEyZTQ0NTI5MGZlZDgxODdkZjZkMmE1N2U2ODM4NWJiNjJkNzAwY2I4ZjE0MDQxMDc2NmI1M2U2OWU2YTBmMjkzOWJiZmE3Y2UwOTE1MjVjOTA1MWYwNjRlMzgzYTJlMSI6ImZkYWU1ZjFlYTI1MzEwOGZjYjI1NWQyMTVhM2NlMWRjMWQxMDFhY2Y4OWRlNDQyM2I3NWE3NDYxOWU5NWYzZmVhYTM1YjVlMGJlYzQzMGIwYWQ5NTY3ZGY4MTg5ODljMzZjNzc3NDIxMjlhZjMzNWM5MGNlYjZkZDc5YzdkMmM0IjoiIjoiIjoiIjoiMzg0MWUyZDc5NWIxN2NiOWEyMDgxZDYwMTZhMWE3MWQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJiYzg4NTQ1NGUzODVkOTExMzM2ZGRhOWI3YTYwOWE2YTcwNzlhNGE1YTg2MGZjZDcwNDE2MWMzNDY1OGJkOTg2ODViYjAzNDE4YjdmMjRmMmVkOTQ3NWViOGNlYjIzMmUiOiI3N2JlZjg4NGE5MTEyNjU2NGIzMjE0MDI5YWM2ODQyZDg2ZTRjMWZhMjgzZTMzZDY4MjhkNDI4Mzc3NDE2ZjY2OTQ3ZTM5YTRhNjcwOGUxMGJmZGFlODMzN2E2ZjMwMjQyMGE2NjQ5ZmMxMDlkMGYwOTRjMThjMWU5MzYxMzc1YSI6IiI6IiI6IiI6ImVhMjA3ODBlZDI4MGQ4MTA5ZjgxMWE2YTM5OGMzZTc2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYzE4MjVjZjAwY2RjMmRhOTNhZGIzZTdhMzNjMWYzYTc2YzQ5MTY2ODg3ODgzNzQ0ZWEyNjgzZGRjYTIzZjMxOTAwZjI1YzQzNDM2NGM5OTJhNmQ5MTNmNzUzYTljNDJhIjoiNTY5NDBhNmZjNDgyM2M5ZTQyZThmZmVkNjNmYzNjZjQ2ZDBhMmIzMDVjMjM2YTUxMWIwYjVlYzcwMDVlY2Q4OTg5YmYyMDA2ZWJlNTJlZDU1ODQ1ZjdjYzI1ZDNkMDA4NmNlY2U5NWYwYmZmNmZhN2UxN2RkZjQ3NDcwNGFiZmUiOiIiOiIiOiIiOiJiMDM3YzdmMGY4NWY0ZDdlYWVlYjE3ZjRjODY0M2E3NCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxOWI4M2MwZGVlYTY0NjNhMzkxMmQyMWZmYzhkODA0MWE1YjMwNjQwMzUyYWJjOTY1Mjc3MGNmY2E5OWRjNTNjOWMwOTk0MmRkZDY3YjkxZjRkYTUwYTg2MTU0NjJjZTQiOiI1ZDg1YzU2ZDBkMjBlZTM5OTU4YTkwZjMwMWQyZjhiYjEzNmZhMzRkMDliNDFhMGM5Mzc1MTE0YTBkZjljMWRjZGIyYTYyYzRiZTM5OGQ5ZWFmMjQ0MDk0OWI4MDZmMGU1YTk3N2RhNjA4ZWViNjUyYTQxNzExZDFlOWI3MjY1NSI6IjljMWRiOTI4Yjk1Yzg0Y2I2NzQwNjBhNmQyZjZiN2E2YTVkNDNlOWVlOTY3ZTlmODIxYmYzMDljYTVmODgyMWYiOiJhMzExMWNiNTczNjVjNjE3ZGYwYjBiYjNhMWFhZGE0OWNhNzg5YmM3NTkwM2VlYjIxZTQyYTdkM2QwZGQwODI1IjoiY2U3ZjU1N2M3MDY3Njk4N2QxM2FjYTYwYmM0NTg1MTQ3ZWZlZWQ5N2JlMTM5ODcxYTFiMjljYWExZTE4MGFmOSI6IjRhNDk0MzAyNzdkNjQ0NDZlMmZhNzU3NjNlYjc5ZWM2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjIzOWYyMWJlNmNkYTIzZTg2NjBjOGE1ZTA0Yzc5ZjZkYWQ2ZjM2M2FjNmRjZmZkOTIyODY5OWFlNDNmYmNlNWFjM2M1MTY0NTUwMGNiM2VhZTY4ZjBiNjA0ZGM0NDcyYyI6IjI5NzVhMDk5ZjdlNjUzMGU1NTc2NTM0YzI1MTcxZjM5MTMxZDZiZmZiOTkyNTlmN2YyYmJmN2Q3N2RlOWZiMWU4MjkwNTJiNTRhOTYzMWE3MzMxMTMwMjE2OTJlYmExMDk3NDM4MzQ3YzZkZTgyMzA3YTBjMmJiMzA4ZWRmMDY1IjoiZDQ1MWE1NDU4NGU2ZDFkNjM0MjE3Mzc5ZTdlNjBlNjczMDNlMTlkZDRiYTYzYjA5Nzg5OWM3MzQ5YTVhNzQzMyI6ImEzM2RjMjRjNmE2NTZlYjI2Mjc1NDE1NTgxZDU2OGI3YzI0MjRhOWM1ZmI5ZTI5NDRjYTM1ZWNiZjY0MWY3MTMiOiI4ZGZjY2M2MjM3OWFmNDY4NDRkZjEzNjEyMmI3MmE4NzhkOWQ2MWI0MGNjYWEwMjliMDllNmI5ZjBiNGQwMTkyIjoiMDA1ZTkxNzYwZDg5ZWNiNjRiNWZjM2IwZTIyMmZjYTMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZTMyNmFiYmUxZGIzZWFkMzczOGQyY2E0ZDlmMWQ2MjA4MGNkMjNmZjMzOTZmNDNhMGFmOTkyYmVkMjQyMGNlYzY2NjFkZmFhYzgzYzNjNGQ4MzM0N2FjODQwZjdkYzE0IjoiMzdjOTRkMTFlZDBlOTNiODE5OWQ0M2Q2ZWIyNDIxNjVkZGRkMTJmZTM5YzBiZWE0Y2RlZjZiY2ZlYjVkMTdiYjg2NmYwODBhOWRhZWYxMjhmNjg1ZmIzYmM1OWM5NDU5MjdmYjBhYTNlMTcwNjg1MTVjM2M5MmZiZGYwNGEyMjgiOiIxZmY0MTQwNWRiYjNiMTJiOGRkYzk3MzA2OWVkYzJkMjgwMWFmMGUwZGM5YmRlMmNkZDM1YzViMmQ0MDkxNTA5IjoiMTM4YjZkMmVhYmVmNGIzMjE3NGFmYjAxNTZhZDFkZjU3MGNmNmU1ZjZlYmRlNWQxOWNjMzBkYWZmZDljYTRmMiI6ImYyN2NmNzQyMjgwOGM1NGM1OGZjZGRlMWNlY2U5MmY1MzQyYzdhMTBhYzQzYWIzYjJlNTMzNjJiMjI3MmUzYWQiOiI1MDZkNmZhZTZmZmY5ZjIyMmU2NWFjODZkZjYxYTgzMiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjYjAyMjlkMmJiNzJkOTEwYjAxNjllOGY5MzMxODkwNWFlZjhkZDkzZWQ5MWEyZjgzODg1NDVkYjMyZGIzZjI0ODllNzk4OGI1MGRlNjRjNDlhOWY3ZmViNWFiZTg2MzAiOiI1MTRlYzhjMDI0MzkyOTA4NTM0MzRlNzVlM2QwYmQxNTllYWNkNWFjMTNiOGYyMDJjZmQ1YzM2Y2RjMGZlOTliNTNhMWI3YTE2MTllOTRlYjY2MWFjODI1YTQ4ZWE1ZWY4YmI5MTIwZGQ2ZWZjMzUxZTM5ZWI3Y2M1MjIzZjYzNyI6ImE2ZWQ2OWM5MjE2YzU1MTc5MzEwN2YxYmRhYTA0OTQ0ZjZkNzZmZTQ0NzRmNjRiYjA4YjBlYmMxMGExOGYzMzciOiJlMGJjMWNjNTZmZGZlZWY2ODZlMGM3ZWMzNTllMmU4YmQ0OGQ3NmM4NjQzYzQwZDEyMzI1MzI4MTcwYmJmNzAyIjoiODdjNWIyM2FhM2MxMDBmZjllMzY4ZmM0NzUzNGZmOGZhMmY5ZTJiZmQzNTk5NTE5ZWU2ZjYwMTY0NDg1Y2Y2ZCI6ImJkNDE5OTY4ZjYzNmUzNzQyNjhjY2RkNjI0MDNmNzljIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImJkZDE1NmVmM2M0ZTA5Yjc3ZmU4NzgxYzQ0NmVhYzU1YjU2MmU0ZWUxYjdkMTU1MTVhOTY2ODgyZDRjN2ZhZGIwZmM3YjM3NTU0YmEwMzkwODgzOGRiNDA0OTlkZWQ1YiI6IjlmYWNkOWY0NTg3ODE5YWNiMzU4ZTQ5MzZkOWY0NGI2N2RkZjgyNjE2ZTc5YTQ0ZmZkNmEyNTEwZjY1MmY2YjljZWJjMTQyNGI1YzY0MjM2MmIxOWY2M2M2MTVmNDk2ODZkZjY2YThmODBkZGZmYjU2Y2UwYzBkODU0MDE1MGZiIjoiMzVlYTMxNmZlMzAyNzg2ZjYyNmUzODMxNTMwNjIyYjYyZWIzM2EzNjA4ZDRhZjMzODRlY2ZjYmQxOThmM2YwNSI6IjhkNGZhZTIyMjkwYjZlZjg2MThkZWQxYzM0MTJlODVmYWI3YjhkMTdmYjljYmQwOWRiYzg3Zjk3Mjc5Y2M3MmQiOiIyZjU0OTI4MzcyZTRjZTQ0NzIwMTQyN2EzYWUwNTc2OWFlMWM1NGIyZTgzYmRjODZkMzgwYTkwYjA3ZjI4OTBjIjoiODA0NWU4ZGE4OGIxYmMxMjY3ODVjOGE3NzFkYjUzNTQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTU0ODc2Mjk4YTFiNjMzMzQ2MjRiMzY3ZGE5ODRlYjMxZDcyNjBhYmU3OWNlZDQxZGUzNWJhNjhhNzE2MjMzYTVkZjA5MzdiOTBmODlkZGU3ZmQ1NWE5NjkzYzkwMzFmIjoiMzY4OTVmNTc0ZTllOWQwOGU2Yzg4NWQzMDVlYjQ3NjRjMWU1Njg5ZDFmOTljMjQ2MmIzZWJkZjY1OWU4Y2U0MzgxOGRmYzg4NmVjNzk3ODQzYmZlZTM2MWI1NTRjZDVmOTY5YjBjN2IwMzgxYjUzZjRhZmMxYmNhZGJmN2ViMWMiOiJjM2E0NjEwNWM1MGExNjdhNWIwMzkxMDUzZjM4MTRhMDZjOTBjZWEyYzFmYTkzMjlkOTdmZGJjNjI4ODdmZjZkIjoiNTRjN2Q2NmM2NWRiZGRiNDY2NTk4MWJmZjBmNTAzZGUzN2Q3MjQzNjJhZWI2N2FiY2U2YTg3MGZkNmE3Mzk4YSI6IjU4MjA0Y2E5NTNjYmQ0NmRkNmM4ODcwYjM1OGNiYTc3YzQzNjg3MGRiNDliY2QzZTJmOTI2OTdiYjU4MGI0NjAiOiJjZDkwM2MwZjExZWE3MDEyMTRmOTE3MTVjZmVjMTFhMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM2CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5NGUyNzNmZGUxZTY5OWY4NGFlZWYzNDNlYjAyNzdjNTBkMTY5YmI1NDk2NTc1MzAxMDIxYTJiZTUwZGY2YTU1NWQxNDIyZWE4OGUwZTRkOTA1MTU4ZTkzZmQ4ZDAwODkiOiIxY2Q5N2I2ZTZlN2YxOTQwMWU0MDlhZWE3YjNlYzMzYThmYWVmZDcxNDAyYjhmMzRhNzNjMWNiMWFmMjE1ZTBlODdkZWJlNjhiY2U1OTBkNDFjMWY5MGM2YWQ5ZGIzZDMwYjM5MDE4NjJlMDc2ZDc2NWZmZGY1ODc3NmU1ZmI3ZSI6IjZlZTc1ZTlmOWFlZTZhYzkzZTIwZjc0MmYyMDQyN2U1ZWI5YjRhZDJlZDA2ZmJiYThjN2I3ODcwYTk2OTQxYWMiOiIwYmE2MDM5OTg5M2VkZTI4NDM3MmJjNGUwYTM3NzAyYTIzYjE2YWE4ZTVmZTcwZWE5NTQyOWFmODdmZjI5MWFhIjoiOTRiZDJiNTFjMzJkMjljZDE0ZTIxMjMyMjFlNDVlYzBjZjFmMzg3NjZmYjZiYjA3MTY4NTZkMDEzOGY2ZmEzOSI6IjgzMTc5MzY4NmFiZDQwNmY3YjM4NWNkNTllNDk3YjE4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzcKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjVhNjk5MTEzZWJmOThiZmY5Y2I3ODBjZTI5NzQ3YTYxYmEyZDc1ODFhNTcxNjA2NWQwMThjODkzNDhkN2MyZWQzZjViYmEzMjQ0MmNkMTkyYzFlMzdiNzdiOThmNTc5MSI6ImRlNmQyYTNiNmFkOWFmMDcwNThkM2IxZDE5NzZjZjYxZDQ5NTY2Yjk2NWViNGU5Yjc0YTRjYWQ4ZTI4NmU3YTQwYjI1NGI4NjBlMmUyMDlhOGNiNGNmZjNhOGU2MTViODRmNWFlNzUwNTk1N2E3NThlMjY2YTRjM2U5MTVkMjUxIjoiZWQxOGMxNmE2MWJhNWVjYzA3NTVmOTRjMjg2MzkwYTZkNDZlNmUyNjQzOWRhZGQzNmM4M2ViZGVlNDJiNGI0YyI6IjdjNDU1MGQwNThiODU1ODBiZTIwNTNmZDlkOTMzYzg3MDQxYzVjM2Y2MmE1YjZiMzAzMjU5ZGFmYzkwZDkwNDEiOiJlYmViZmNiOWI0YjM1OTVlNTE2OTM5Y2EwNjg4NDIyYmJkZmM0YjlmNjdiMGQ2NjE5NzU3Y2IzMTViN2Q3OTA4IjoiMWE1YTQ5NmFhMjI2ODQ4MzQ0NGIzNzQwYzljYzQxMDQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNDI0NTBmMjY4OWI4N2EzZGQ5NDBmM2I5ZTNiMzJkNDY1NGM3MjVhMjRkZGQyYzIyZjAwNjY5NDMyMWRhY2YxOTgwYjUwZjdhYzA0MDE2MjY0NTNlYzgzNjAzOWJmZGM5IjoiNDc2NTM5OWNjYmJmM2QzMzQzM2JiOTkyZWUyOWU0MzgxZjI4ZDgwMGIwNTQzMWYxYzViM2U5NDljNWRiNzJjNTgyYmZlOGJhMDhkYjE1NzViODY2ODE2Y2FiYmU1ZTFkMzFkOGE4NzBjZWVkNDlmYjc1Njc2Yzk3MDIwZDFmMjIiOiI2ZWU1YTc2MTNjMjVlY2VjMjYzYTJmZDIyODg5NDhiMmRmOWEwNWQ1MDA0MGM0MDMxYjA2NTM4NzhmZGIwNjdmIjoiNjhhMTAzODQ4MWJlNzQxMmQ2YTdjODQ3NGQ0YjJhMjUzNWM5YjU1ZWEzMDFlZTgwMGQ1YTg0NjEyN2QzNDVjYiI6IjdhMTkxNWNmNzhlNmRhMmRjNzg0MGNiYTQwMzkwZDY2OGQwNzU3MTYwOGI3Nzg1N2QyMjI0YzQ1MzFjMTdiYjgiOiI4MGE2YzYyMmU2NDQ5NWY5YTM5MWY1YThhOWM3NjgxOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM5CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI4NzM4NjllMTk0MjAxYjgyMmIxNDBiZGQ3Nzk3ZGQxZWQ0MDhmMjE5MGI3NTljMDY4YjcwMTllNjcwN2Y2MDc1MWUxMDFkMzQ2NWM0ZWM1N2RiZjlkMWVhNzU5N2ZhNDQiOiJkMmY5MjcwNmNhM2ZiOWNlZDgxODNjNzQ3MDQ0NDBkN2VlZGVlMTU0MmMyZTgxMmY2NWFmYzgzZjRiNjJkYWRmMWM1MWZhNjhmOGQ1ZjQ1N2E4OTMyMTFjOGFmYzgyYzkzZTZhMWUxNTgyMmVmZjBkNGFkYTZlZmQyNWQyNzFhMCI6IjhkMDM5M2QyYTFhZTg5MzBlYTg4NzczYWRmYTQ3YjQ5MDYwZjBiZjJkM2RlZjJhY2M1Nzc4NmJmYmQxZTJkNmYiOiI1YmNmNWZmNGZiZDllYWFiZjhiZjgyZWM3YzU5YjA0M2ZkNjRiMDAyNWFkMWFiMmIzODRlMzk5YjllMTMxNDdhIjoiNmUyZDA1ZTI4NmM5MDUwMmEzYWJmMmVlNzJhYjdmZmI1MjBjZTVmYWNmYjI3ZTA5NTc4N2EwOWE0MTJhYmVjMyI6ImUxY2VkYTcxYjhmZWI0YjBkMTRkMzViYmI1N2E3OWEyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEwCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxZmVjYjVmZTg3YzJhMjA4YjRmMTkzZTljM2ZmODEwOTU0YzU1NDE1MGQ1NDRiYWVhMTY4NWZiNDc3NDMyMDMxNWQ1Y2I2NTFiZTQ5M2VmMTIwZWY2OTY2ZTNlNzUxOGMiOiIzNGJjMjkyODA5Njc0MzUyZmZiNjA3ODZkY2E1OWVjNzk5MTg4YWE0MDFiMzY2YTQ4Y2RlZGRmMzdjMTJlZTRjNjY2ZjhmYjNhMGQ1M2RmNGNkNzE5MTE2NmQ1MGZmMDFkOTkyZjk0Y2Q5MmRhN2EzODVmZmU1Nzk1YjE5N2NlZCI6IjM4MjQ5ZmVkMzRhOTA3NzY4ZWFjNDkyNjdjMmM2MTNhNjUxNTRlZWM1YjczYjU0MWQ3ZDdiMzE0YjUwODAwNjEiOiIxMTViZTljYjkxNGI1MDQ4MGZmZmUwNzhkODE3MDg3MGI1NjEyOWEwYTc0MjcxZGVlMDYzZjhiMjA0OWUxYmUzIjoiNjlmYTZmYWY3MjIzZjViYjFiNTVmMzVhNTQ0Zjc4MTgxNTc5YjE3NDU5OTAwNTMzNTc5MTZmZTUwN2U1MWRiNiI6IjYwY2M5MmQzYmEzZmYwNzE1ZjU2MjcxODIzMzRlZDFiIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI0ZDI4M2ViNWVjZDg1YTE2MTNjOTc1ZTI0ODMyNzcwNjQzNjEzYzlhNWFlZTBkODY0OWJjMGQ2OGM4OWNmMWVhNmVjM2ExYTIyZWVmZDllMjEyZDYwMmMzMzhkNjRjNmUiOiI0YWE2OTE3YTVjOWYzNzA1OTBkNzA1MzZmZGQ4OWM5MTZmZWM1ZTViY2JhZGU4YzZhNmNmY2Y1YjIzMmM5OGE2YjNlNmI3OWEyZGZiMDc3OGZiYzNmMWRhN2IwNjA0NGQ3YjBmYTJjMDRmZmMzYjcxMzI0YWNhMWVlMTlmOTM2YiI6IjA1YTcwOTJhNjg0YmE3YTdmYmQzMzUzM2Y5YmU1OGE0MTQwYTM4NTVkNGM1ZjQ0YTMxZDY2NWEwNzIwYzE3MzkiOiI1NTdlZjFiZWRjODkwZDE1NDNkZTZjZmViMjU2NDI3ODI2ODNkNzdhNDZiYzhhYTA4MzZiMDcxNTc1OTljN2MzIjoiZTg3ZTQ1MDczZmY4ZTM2YzM4YjEyOGNkMjI3NWExNjBlNDMxNzg3YjVlODFmNmMyZmQ3YTM3OTA5ZWI3MmVhNSI6IjMxZWNmYjFiY2YzMjUzYmE1ZjcxYjE4NWE2NmM3Y2ZmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhNmY0ODgxMDRhNmMwM2UzNTRkNWQxODA1YzYyZGNkMzAxNjMyMmQyMTg3NDdmYTgzZjkxOTllMjBmNmFiMWNmYmMyYjg4OTUzNmJkYTExODdmNTliNzI5NGQ1NTdmZjIiOiIyMmY4YWQ1N2EyZGZhODAxMGUyODY1YWQ2MjYzODIzNjUyOTE3Yjg0ZGZlYTYxZjYzOWVmZGIwZmRiYjM1YzYzNDFjYTc3MjEwOTVkNjk2ODYyMTJkZmZlNzg0MTBjMGQwZGI5NGYwNDc1NmQ1MmU3ZDc2MTY1ZDVhMWQ1MTZkOSI6ImZiOTk1MWQ1NjNmN2FhODhkYjU0NTg3NGIxYTMwNDljNWY3OTc3NGQ0ODZlN2EyOGFlZDFlZDc1ZjU5MjI0YTUiOiJiMWVhN2M2YjUzZTc5ZTRlOTQ3ZTYzMDg2ZGVlMzJkY2MxN2JjNGYyN2ZiYTYxNDJmODIxNWVjMDgxY2RkNWM5IjoiMGQxMmNjMGEzOWJmYmY4NzE5NGU0MDcwZjZiNTRjYWFhYmJlNDhmYTE5MmI5NmNmZWQyYTc5NGQ5NWZhMjk5ZCI6IjYyYTFjNTY3OGU2ZThmYzczOGQzNzVlMmNhNDg3NTFmIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzEzCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI5ZDY3ZTAxN2UwYWJkZDdjMDc5YmMwMzU0ZjMzZGFiNjk2YWQ2NDE0NjgwMmYwNmQ2Y2VmZDljZGVmYmY1NWIxOTdmNTg5OWU1ZWZhYTI2OWNjMDQzMmM4NzY0OGNlMTgiOiJkOGJlMGVjMTExOWZmOTU5YzMyYzljZjI5OTE0ZTNmN2JmMmIwMWJkYmY4MDZjMmQ5YmExMTlhZTJhMmNmYjU2NTg3MTc2MmIwMmVlN2JmNjhmMWQyODA1MzJmZDdhZTczNjg1MTdmNmY3NTE3MzliMjI4ZDIzZGYyZjIwN2YzNSI6Ijc0YTVlMjQ0NzdlODc1OWJlZGZiYWExOTZmMzk4Nzc3MTA4MzkyZWZiOGM2NGM2NWMwYzllY2Q2Y2QzYjVmMDQiOiI3MGNiYzZjZmUxZDZhYjRiYzMwZDY2ZmExNjJkNWQ0YjMwMjllNGIxYjlkNzU5ZjNlYWUxN2ZiNTA4ZTkxYTQ2IjoiZDNjNTM4ZTA0MmYwZWI3OTZiNGFmOWI0ZTY1Y2Q4NTA0MjVjNzJlMmM4OTZmY2VhNzQxYzE3MTcyZmFmMjdkOSI6IjU1OWE1ZTA0Yjc1Y2VjMjUwYWFjMjQzMzE3NmE3MjVlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIxMDkxNDYwOGE2ZDM3M2EyNmM1M2FiODMwMTQyODNiNjc4ZDczZGZlYTY1YjRhMzU0MGFmMTdmMmZhZmEzYjNjZjY5ODkyNWI0MjNlZGI5Zjk0NmI5MDZmNDMxMTA3OTUiOiI5ZGVkODdkMjg5NDEyZGZkYTg5MzVlNWIwOGVjNjZiNjhhYmQxYmFlMWZjNTM2M2U0MzQxZjU4ZGI5NTRmMWY5YmM0YjY4MWMwZDkzMGJhMDgwZjg1ZjhmZDA0YzE3M2NiMmI3NzcyM2NlNjc2OTJlZmE3YWRlNDhiODJiNjkyNiI6IjIyNTE1OWI0YzY3OTA5NGYyNzc1MTZiMjMzNWIxZThiN2QwYTdlYTMzZmQ1NjgyMjkwNmQ0ODFmZTQxMjU4NmQiOiI0OTY3Y2Q0MDFjZDQ2NmFiYTBiZTVmNTU2MTVjYTBkOWZiOGFkYmRlNWNiNGU2YWUzYTAxNTlmY2Q2YzM2YmYwIjoiZmVjMTRmMzI1YjhiNDU4ZGRmM2U3ZjJlMTA5MzhmNGMyZDA0YzhkOTg4NWJiNWI5Mjc3YmRjMjI5YzcwYjM1NCI6IjFjZDVjMGJkZWI4N2M3OTIzNWJlYWQ0MTZjNTY1ZDMyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYjAyM2Y2YTZmNzNkNDc0OWIzNmViNTQ4Njc5OTQ0MzIiOiIyNDYyYWQ3NjBkZGJjYTRlMDEzNjg4YmY2MTM4MWYxOTBjN2IyZGU1N2NiZWVlYzgxZDZhYjdiNmYwNjdiNzVhZGMzNTQ1ODg3ZjhkMmFhNWQ5YjlkZmNiZmE0MjVkNjEwZmFhOWMyNDdlYjVkNzExNDVmMzAyOTE4ZTkwOGFlNSI6IiI6IiI6IiI6ImMwNjIwYzY4NTE1YTQ2MThlNTcyZGI2ZTRjMTQ0NzNkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiN2UwZmNkOTUzYzFjOGJiOGQwM2Q3YTBlOTE4ZmI1OWQiOiI1NmIyZTExZDVjMmQ4N2QyYzljOTBjMjg1ZTAwNDFiZWI0NTk0YTZlZmRkNTc3NTgwMDk1NjEyZTUwY2Y0N2MwYjc2MjA4MzM3ZTFlMTg0NTMwODJkNzI1NjI5NjY3ZDg2MjI2YWIyMjk0NGJiZmI0MGMzOGI3OTg2ZTQ4OWFkYiI6IiI6IiI6IiI6IjcxOTRlZWUwZDMzM2ZhNTI4MmRjNDRkYjk2NGVjZjViIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDEzMDIxN2Q0YTM5NDU0MDJlZDk5ZDdiODUwNGZlNGIiOiIyOGU1OTJmZDlkYjcyYjQwYWU0ODg4MDc4YWVkZGUyNjBmNmRlNGYwNDcyYTc2MDEyNThlNjk0ZDdiYjZhZjY4MTBmZjRlYWJkZmZiMzMyOTMyNzY1ZmExZDY2NjUwZmI3OGNjMmJlNDg0YzBiYTgwM2ViOWEyNTAyMDIwZTg2NSI6IiI6IiI6IiI6IjQ2NTJmMDU0NTM4NWZkYmUwMmQwNWFlYzIxNjY4NjA4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDc4NTQ0NDdlMzM1MjFkMmQ5OTdkOTBjMDg4N2Y0MmQiOiJjNTYxYWI2YWNmYmZiOTg4Nzk5ODJhYzdhZGQ5MmI4MDQ3MWUwMTU0Yjc3Y2NjOWZkOThlN2MyMDEzYzQxMWU4MDc1OTQ4ZTk3YWI0ZGI3NTA1Nzk3YTk5ZDQ1NmU1NGU2NTg1MDQyZWZlZmY3ZTM5NzBlMzk5ZWEwZDI3NTM3YyI6IiI6IiI6IiI6IjFhMTRhODEwYzExYjRmMGFmMjNjNjQ2N2M0N2JiZGUwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNjhhOGVjMDE1ODFkNjA2NjM5MWYzZTU5Nzc0NjUwMjYiOiI3NDdjN2U5YWFjZTZkNGY4NDBjN2I1MjYxZTBhZjc5NmM1MTY0Nzc0MjFkNTI4NTBhNzA3MmEwYWIyYzc2OGZjYzgwYzliYThkMThiMjI4ZTc3YTdmNjEzMWM3ODhhNzY1MTVmZTMxYWVmNGVkNjczNzY1NjgyMzFhNDcwMGZhYyI6IiI6IiI6IiI6ImE1NzIzYzQzNzQzNDQyZmFlMzYzN2JiNTUzODkxYWViIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTQ1OTAzOGM2MGI3MGJhZTdhZjBkYTZjZmFiNzA3YTIiOiI5ZjdkODM5MzEwODQ2YmQ0NTI4MjdhMTg1NTM5YzBlYjBmMTA2YWNjN2JjNGRlODBkMzUyMWE5NzBiMjM0ODNkNTc4MjZiMTQ4NGQzMjlhMmQxYzJlY2ZlYWY4ZWVmZmJhYTZlMWEzMDVlM2YxZTQ3Yjk2YWQ0OGE3MTFhZDFhYSI6IiI6IiI6IiI6IjVmY2Q2YmYxMDhmZTY4Yjg1ZjYxZjg1YzA1NTZmNWMwIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTMzNTdkYjE3M2RmOThkYTRkZDAyZWUyNGNlNWMzMDMiOiJmMWNlMDg1ODdhYzAzMzhiNGQwYjhlMDc1YjQyYjY1MDFlNzc3NThiMzAwODdkZTAyOGE4NjIyZmI3YWJkN2Y2NWUzYjRmODAyZDFhNDcyZGVkYjljMWE2ZGM5MjYzYzY1OTE4ZDhiN2ZhZmQwYWU3ZTljMzllMmU4Njg0YWYzZiI6IiI6IiI6IiI6IjhhNWZhMTFkOGU3OGZiZjFjYTRlNGNhM2UxYWU4MmI4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMjEyZjRjODBjN2U5Mjg3YzhkMjVlM2I5NjVmOTFhM2MiOiJiZjFkNzE1YjNmNTZjNDMzODI3YzljYjQyOWJlZTVjYTYxYzgwYThkOWIyZmQ0NDk4ZTFjODZjZTcwMzYzN2Y4ZjdmMzQwNTZhYjAwMzllMGJhYTYzMzIwZGYwZWM2MWRlNjAzNTRmMmVjZTA2MzU2ZDliZTNjNmQxY2RjYzRjZiI6IiI6IiI6IiI6IjA0YWMyZjk2OWU4MjhmMzc1YjAzZWUxNjMxN2U4NTcyIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNDZlODU3NTJlMGFmODJmYzYzOTMyOTUwMTIwZTRiNWQiOiJhZTQzMTY0MjRmYTc2NTE3OTQwNDE4OGViODgzOWNlODRhZDhkYjkyY2IxMmYzOTA4OWE5M2EyZGJkYzM3MWUyZmRiZWYxYWQwODBlYjM1NGVlY2RkYTNhMTBlYTY2ZWY2NDdhYTA5NWFmYTE3ODZjMDFiZDFjOWY3MGQ4ZGE0ZiI6IiI6IiI6IiI6ImRlNTc2Mjg0ZDhhZDM2YjMxYmQ0ZjhmM2RhNjMzZTM2IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZWMyNDU5YjFkZDdmNTBkZjYzZTE0ZTQwYWE0YTRlNjYiOiJiOTY0YTI0YmY5ODI2NDMyN2MwYjllMmUxYzk5ZWQxYjM1ZjUzNGJlODAxYzk5NmYzMThiYzIwNzRlZDI1MDBiYTg0ODhjNGZlYjQ0MmI1MDdjMzIyMDUyM2MwMDQxYzk1NDMxMzMzNzkzNjVlNjVlMDkyODUwYTVlM2Y5NmNjOSI6IiI6IiI6IiI6IjRkNDY2ZTJmMzg4YWFlNDBkMWIzMWNlMWY4ZGRjNWU4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImFjZjQ4MGQ1NGY0YzY2ZDYxMTUxOWI3MmYyYzBkY2E2IjoiZDViMzI3N2NmOGJhZGY2YmU4NmFmMjdkZDM2ZjIzZmZjNTgwODQ3YzVmY2I1NmM0ZDhhNDIzMzkzMzZmMTg1YzM4ZmZiODZmNGQ4YWE3NjQ2YzFhYWVkNmMyYjBjN2FlN2U0ZDQzNWY0ODFkNjJiYjAxZTYzMmY2YmJiMmFiZjkiOiIiOiIiOiIiOiI3NDZhYWE1NDIzZWY3N2VhNmIxZWRhNDc0MTAyNjJkZCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlZGI4MGZkZGM1OTViMjM0ZTNjNWMwM2IyYmUzZDcyMSI6Ijk0YWFkOGM3NzIyMDE0MzU1NDNlZmQ5MDEzYzlmNWYwMjIwMzhkYjY4NjRlOWVkNDE0MWVhNzViZWIyMzY4NDRkYTZlNmExNzEwOTI2MmJjODBmNTI4NDI3YjM3ZDlkYTZkZjAzYzdkZDI1YmUyMzM3NzQzODRhN2Y1MzE5N2VhIjoiIjoiIjoiIjoiNTExOTI3ZjEwZjgwMDQ0NWI3MDVlYTNjZmU2ZWM4MjMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDApICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYzc3OTBjOTg4OGIwZTczMWNhNmNjZDYwYzMyYmI5OGEiOiI5NjcwNTBjMTEwNTBhNmQ5OWE1ZGE0MjhkMWYwZmM4MDY4YjI5YmE0YzY2OTY1YWRkYmZkMzFiNzQ1Y2IwN2QyNDM5ZDI2OGFiMzJhNWZhMmIxOTM0YmYyNzdmZjU4NjUwNmE5NDE3Njg0Njg5MDVlZDk4MDUzN2Q4YmFhMWQwNyI6IiI6IiI6IiI6Ijk3ODQ5M2YwY2VjZTZmOTRkMjE4NjNhNTE5ZTA2ZGJlIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwwKSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjU4Yzc1NjI1NzcxZGY2MWM0OGE4MjU5MGVlZWQzMzc4IjoiYmUzMTIwZTg1MTVhOTg3MDFiNGIyZmIwNjY3ZGUyYmFkM2YzMmJjYmYxMGZiOWI4MjA5NTZmOWFhN2ZmYTFiYmJhZmI3MDAwMmE5YzdmZGQxY2Y3ZTc2YTczNTI2MTc5OGRjNjBhMTE2MzkxOWQ1OGUzOWVmMGMzOGI1NGIyN2IiOiIiOiIiOiIiOiI5MGY1YzQ4NmU3ZWZlOTMyMjU4NjEwZTc0NDUwNjQ4NyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMCkgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJkM2Y2NGMxMWFhMjFiYjJkMTIyNzg4NDc1NDdmYjExYiI6Ijg1NWMwZTNhNzU2NzczMGIxMWUxOTdjMTM2ZTVjMjJiMWRjNzI3MWQ0ZGJlMDRiY2RmZDJmYzBlZjgwNmIzYzA1YjQyNjRlZTZjNjBkNTI2NTA2NjIyZWJmNjEzMDczOGRiYTRiZjM1YzEzY2UzM2RiMTk0ODczMTJlZTY5MWZlIjoiIjoiIjoiIjoiMzNlZDcwODllYmFlNzM4YzZhN2U2ZTIzOTBkNTczZTQiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjEzMmFkMWM0MGFmYjA2NjYyMGYwMDRmMDg0MDljNTllIjoiMmU1YmVhZGQ4OWI2NjNiMzkwM2QzYTYzYzNhYjU2MDViZmIxYTAwNDVhNDI0MzBlMDIyMDI0M2M1MWE2OWY3ZmY3Njc4YzJmOGVkYjdiYjRhMjliNjQ2ZjNlZGZhY2EyNDYzZjlkZWZkMzQyZGE4N2QyMmIxYjhmZGIwMTJmZDUiOiIxNTBkZWI4NDFkMWE0ZDkwZTY2ZTg1YjAzNmQ5ZjVhN2VmY2E3MjZiOTA3YWUzZThmMDVlMWQxMzM4Y2RmZDMyIjoiZmIxOTliZWVlYWYzOTM5YmUyYTVmOWU2YmEyMmY5N2NkZDJjNzU3NmU4MWVjY2M2ODZmYWNiZGY4YmI0ZjJhYSI6IjQyOTMzNDE3MjFmNTdlNDU0OGNlOGMwMDM1MzFkMzg2MjI0NDZjODgyNTkwNGUxYjg2OGRjZGRjNjI2YzUxNjQiOiI2NmQ4ZjNiZmI3ODE4NmI1NzEzNmVjMmMxNjAyZTFlZiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMWMxNTAyY2E5N2MxMDkzOTlhNzJhNzdjOGQ2Y2MyMmIiOiIxZDMzYjFiMjU3YTNhZTEyMTBmYTIwOTkzMDc5MTZhNzNkZDkyMjcwNzY5Njk3ZWEyZDc5MDFmNTY4NjVlM2NhZTFiZTk0YjUwMjRkMGRhMzg4MGJjZTA2ZjBiMzEyMzFjNWE4ODlmOGJhM2Q5MmEyMDg0NGI2MTAwOWRiNjcyZCI6IjIzZWVkZTQ2ZWZmNGEwNGIwOGRjYzIxMzNlNDUzN2IzMzIzNTFmODQ2OTYzMGYxMWIwYzg4NTNmYjc2MmE0YmMiOiI2ZmQ5ZjlkYTEwOGU2OGFlYTlkMWNlY2Q4MWM0OWJjZDBlN2JlZGIzNDg4OTBmMjI0OGNiMzFjNDI3NzM2OWY3IjoiNzZiY2MxMWJkOTUyMTIzZjc4ZGQyYmE2MGRkOTMyZDQ5MjAzZTQxOGJiODMyZDYwYjQ1YzA4M2UxZTEyOTgzNCI6ImExZWVlNDYwMDE2MTZmMmJmODc3Mjk4OTVkYTBkMGQxIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjNzljMGExZGI3NWU4M2FmMjU4Y2RmOWVhZDgxMjY0ZCI6IjVlOGNjMGZkYWRjMTcwZWQwZjVlMTJmNzlhNmI5ZTU4NWY5ZDdjMjkyNmMxNjM2ODZhNmE3MjQ0OTVkODhmYWJjZWM5NDBkNzUyNTQ1Y2FlNjNmMTc5MmRjYjk2NmE3MzI1ZjYxOTk3YmE4ODgzNTU5YWQ2ZjZmOGZjMDk4OThhIjoiYTJjZjZjMWM5ZTQ0ODlmNTA0ZTE3ZjM4NWYwOGFhODI3NzVhYTJiMGE4NGFiZDBiN2VlM2M2YjM5M2Q3ZmQ1MCI6ImM3NTI5Yjg3NGUwN2Q0Yjg3NjE5Njc4NmQ1MTBjYzAzOGM5ZTFhYjkzYzQ2MWRmMjQ3NGViYTQ4NGFlNjg3NmYiOiI2M2M2ZTdmMzU0ODUyOTM4NmM5ZjQ3YzVhZWNlNTJjZTg0NTRkYTVkYjlhODA3YTFiOTYwZjc3MzBhNjE1ODJiIjoiNDNiNzkzMWUwYjNiMzc2OWVmODk3MmQwMDI2ODk2YTMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImI0NGQxZGQ5MTRlODg4NDBiYzY1YTk0ZWUxOTliM2FjIjoiYzNkYWUxODYzZDMyM2NjNzhmNDNjY2IzZjYzMmZkZTI5MTMwZTZiMjNiODQzZmY1YThkNzlmZGRjM2MxZjkyYjU1Y2QzZGNhZjc4NDhkNDBkMTg5YzBkZTc3OTBiZWJiODg5ZTAxYmUwNTk4MGRjZGYzMGQyYjMzMzM0MjZjNTAiOiI0MWUyZmNlOWI0ODY0MmExYjliZDE2OTUzMTRhZGNkZDM4ZTFhOGFmZTQ4OTFlNjMzYzUwODhjNjc1MzQzOGEyIjoiMWViM2Y4YmJhY2IwYzZiOTAxNzE4YmZkN2ViYTI5ZjZmODdlMWZlMDU2YWQ0NDJkNmQzOGMxMzUxYTY4NGUxZiI6Ijg1NTcwZGI3NzNmM2Y1MjAyOTY3Mzc2ZjkxYTBhOWMwOWM4OWNkNGVkZGQ1OGNkYzYyMTAzMzVmZDVlN2FjZWYiOiJiZDUzMDM2NTM4ZDllZDkwNGE0OTk2NmI1NDI4YTJhOCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNWVmOTdmN2FmN2RmNWNjNmZhOTRmODQyOGVjN2JlNWMiOiJiZTY3NDM0YWM0ZDc3ZjBmNTBlYzViYWNjODExMmQxNDgwYmQ5ZjIwZDZiNGVhNzY4ZDliNTFiYjY5YzFkZmZjZDhjMzBlNDQxMjEyNzY0NGFhYTZmYzQ1M2U1OWZiNjMzZjZhNWE4YzJmNjllNDBkMTg2M2UzNWQ0ZDRjMDIyNyI6ImE2NDE5NWIxZTU2Y2Y5N2ZkODFlOTlmYTE4MzNkMTkxZmFmNjJmNTM0Yzg3NGRlZjRiOGJlZDBhZTcxOTVhYzciOiIzNTNjZDNhOGQ5Y2Q5MmJjZTgyY2Q4ZDFjYzE5OGJhYTkyNzZkYjQ3OGIwY2ZlNTAyNDllMzBjMzA0MmVlOWRiIjoiMzkzYWI0NzI2ZjA4OGZkZmViNGRmNzUyZTFiMmFlYzY3OGU0MWZhNjA3ODFiYzVlOTE0Mjk2MjI3ZDZiM2RmYyI6IjI0YmRjMmNhZDVkY2NkMjMwOTQyNWYxMWEyNGM4YzM5IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiI1NjcxMzBkYTRlN2VjYzRkYjBmMDM1ZDdlY2IxMTg3OCI6ImNjMDcwZGY2YWEzNjIzZjc0YWZkODViNTlkMWJlZjJiMWZjZDljODA5MzM2MjUxMmZmMTA5ZWJmZTk5MmVkNzViZDU4YjVhZTE1NjFkNzAyYjY5MDY1ZWIzY2MwYmQzMjhhYjY5OGQ0YzZjYTI3NGU5NmQ2NzMzMDliNWRmNWRmIjoiNDIwMzMwNTRjZWZhMWYyMGIzNDQzZjhhYjdkOTYzNWFlOGYwNDdiODMzYzg1MjkyNDViYThiNGFhMDdlZGJhMyI6IjcyOTcyZmI5NDdiZmY2MGRmMjkxODg4ZGRiZmQ5MWU2OThlMGMxYzI2YTM0NmI5NWZjN2M1ZGFjNTk2ZDAwNzMiOiJhZjI5YjZhMTM2MDJiYTljNmIxMWY4ZGJkZWI2Y2I1MmUyMTFmOWNkMmZjOTZlNjNiNjFlM2MxZWM2MzFkMmVhIjoiYjA4NDlmODMxN2UwNDMyNzFhM2ZjNWYyZWFhYWFiYTIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjJjMjBhZTM2ZjFlNzQ1NDJlZDhiMGExNzdiODA1MGFhIjoiYzRiZjdhMzljYWYyNmRjM2Y2MTMxMWY1NGFiMzA5NTQ5M2M2MjZhOTg4ZjVhYmVlMjgyNmM2N2E0ZjRiNGQ2YTAyMzI5Yzk5YTZiY2I1ZTM4N2ZhMTYwNzQxYzg3MWFjYzI5MjljMWNjMDdmMmYwYTdjZTE2MTllYjdkYTFlYzQiOiI5N2MxNDhkZDEwYzNkZDcyYjFlYWFhZmJlMzdhOTMxMGVkMTViMjM4NzJlOWYyYjYyZDFmZWI5MWVhODFmZmUzIjoiMjNkZjBjMzBjNjhiZjJlZWI1NWQyNzNhNTk2ZjFmNTRlZDkxNjI3MTU5NWI5MDZlNGY3NzkzYjdhNTJmMjU3MyI6IjIyZjEyMGZhMDkyMTUxMDUxMTY5MTlhYWY4ZWViY2I2OWVjY2Q1ZGE0MmZlYjczNzAxOGEwNTI2OGJmMDhlNDYiOiJiN2M3M2I5Y2VlYTJlNmNhMGJlNmEzNzczY2RkNjg4NiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMjA3NmY5ZTExNmEyNjQ4ZTFlNjY0YjgxNWIxYjM2NzQiOiI5NzliNWFlYWZlNTU1YWViYTE1MmVkNjZlMzJlMzBlMTEwZGYyMGVlMWYyMjc5MzJhNzJhY2ZiODIxOGFlYzc2Nzk0MWVmYWVmYTA5MWMwMTI4ZGFkOWI5M2IwNmIyOGZjNzZlMDFmMjc1ZThjZTFjMDJmMGViNTY3YzkxNGY4OSI6ImQxMmZiMTBiOWZhNmQyZmQwZjM5Y2Y3NjI5NGNkNDRkY2JmYTgwZGNhN2MyZjg1MzdjNzU0NTNkOTg1ZWY1NTEiOiI0MjI4YTk5ZmFmMzU1NDdhNThjMWE0ZDg0MjMwMWRjYTM3NGYxZjEzYzZmZDA2N2I3YzFiODE1ODYzYjczMTU4IjoiYTNhN2Q1ZjFlMmRjZjk1YTkwNzE1ZWM1ZmQzMmU3Zjg4YzM4YjBhNDUyYjZjY2QxZjEwNzQ1OGRiNGY3NGZkNiI6IjhhNjNhNTAwMmEzNjM2YjI0MWYwYmVjMTRmZDljMmFjIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMCwyNTYpICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJhNzEwMTVjZjA2ZGRkMGE2Y2Q3MmZhMDE0Y2YwYWVlNiI6ImM4MTBjYjlkYjBmMTY5ZGJjMzBmZGE4NWNjYjZkNGM0MGRiNjhkNDI5ZWViMzY1MzA3MGRiNzY0MWZiYmFiYTYwZWYwZmY5NzBlYWY0MDg4N2I3ZTE1NGUyZWNkNTMzMWRlNzAwNDY4OWVjNjA0ZTY5OTI3ZGE2MzBhOGRkN2E3IjoiNWY5OWY0NWQ4NzcwMDQxNzAzZTVhMTQ1MjFjNTAxOTA0ZmQwNWZmMzM0MDgzNWFjMGM0MWI4NjQ0MmU0OTM5YyI6ImViN2VmYTZlNDZhYjkyNmVhMDRjODdlYjljZTQ1NGY1YjEwNzE3YmQ5ZDg1MzA1ZjI3ZDcxYmVhMWJjOTkxYjMiOiJjYmM4MGM2MTcxZDA5OGZjODEwMjM0ODZkMzI3ZWZlMjQxNWEwZjMyZTVmYTZmNjc5M2NlMWQwZTk4NzgzMjU4IjoiYTM1M2Y2YjM1MDQwNGYzZjdiNGZiNzI0Zjg0YTk0OGEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwwLDI1NikgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjM5NTkzMTgzNzYxNGMzMjJkODQ4OGVjNmEyYzRjOTE5IjoiODMxZmM4ZDYzNTkyYjZjZTM1OGMwOGFlYWMzOWQ2N2MzZTQ4YjRjMjYxNzczNWI2ZmU1ZTlmYTQ0ZDdhZWU5ZDYwZjJmY2Y1NDlkYjIzOWQ1YmVkOWM2MDhjOTRlOGY4YzIzYjMyOTAxNDQyYWM1MzQ0MjEyNzM3N2JkY2YyMDUiOiJlYjI2MWM3MzdjMGExN2M4Y2IxYWUwNTVjMTQzZjcwMWI3NGM5NmM4NTJlNGE3NmNhM2VhMDQ1ZTdlZmRmNWVlIjoiMTUzMjc2MDA3YjM4NDNhODk3ZWZiZjAyMmJkMWJjYWJjZjY1NWM3ZWI4YWNlZjliYWFjNzEwYjMzOWVjZmQ5OSI6ImE4YTVjYjE3YTI5NDVlNWI0MWZmMzcwY2M4OGFjNDk4Mzg5Yjg5YjZjZDgyYmIzYmJkZTgxYzIxMmY3YzE3ZDQiOiI1MzdmYzJiNzMxODNkMmMwYzEwNjg4NjkzN2E2NjA5YyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjlhMTk4Mzg1OWRkNmM0Y2I2MDI5NzBkNzA1OTUyYjJiIjoiNjhjNWNmMzFmNzk1OWZmYWE4M2FmOWRkNTVhNzVlYzAwMWJlZmJmODM1ZTQyYTc4OWFjNDJkMzlkOTYxMjhlYjZkOWIzZjA3Y2VkMTVlNTdlMzk3NjAzOTBjMDY1ZmI0NDI1YzE5ZWY3MTg0NjM1YzE4ZTVlZDI4MjU2OTM3ZTEiOiJlMDY0OTdhMTgxYTUzNjI5ODA1NzljOTFkMjYzZjYzMGFkNDc5NDUxOWE2NDI2MWVkZThiMzZjZjBhYzVlNzEzIjoiNzE0ZTRmYzUyYWVhNzYzZTIzYTFmNWIxODk0OWFiOGZkOTQ5ZjE3Njg1NjA1NTliY2NiNDlkNzhkNTFkZmFiNSI6IjZiNmI3ZjY1ZmQ0NzJhZDQyOGRmMmJiYjg2Yjg1MDY3ZDBhNmY4OWQ5MjMzZWVhOTJmNTE4OWE5MTYzZDA0MTkiOiJlMzJhZjhhODFjNTlkYzQ0NTQwZWQ4ODQ1YjQ0N2ZkYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjIzMDU3NmU5NTE4ZmI5YTZhODM5MWE4NDkxOWIwZDk3IjoiNjE5M2YwZTdiMzNjZTE5ZmRlOTIyYWVjOWM5M2YxMjcxZWJjZGQyOTZkOWM4Yzc3MDI5YjU5YWZhMjA2NGUzMTU5MDg4ZTA3ZTkxYzE0YTRhM2RjMjNiNjAwNWRkOGVmMTQyNWQ3ZDJhZTgyODJhNWIzMGI3NDk4YjY3NTQyMzQiOiJmZmFjYTMwYTI1NmQxODgzNmEwZDQ5YmJhYWQ1OTlhMjhmYzc4MjFkNzFhYTkxYjk3MTU4YTQ5MmQ4NGE2MjgwIjoiYTNkYTEzODUyZDA3MTdhZmVkN2M1OGM1MjUzMGQyYWUwNDdiNjQ1YTVlN2FhOGNmYWJjMTE0Nzg0NDQxNTFhYyI6ImUxNWZkYWVlYTMxYzk1NTU1ZmM1MDlkMmEyNjZhYmY3OGQ4NmNhMTFhYTJmODdjZTEwNDExNDJlYjlmODJiYWUiOiI3OTA2ZjhkYTFlMTQwMzQ1YzE5MWRiYzJkZTVlYWQxYiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImUwOGEzYTMzYWRiNDM5OWE5YmU3MmZlYWQyMjQxNTVmIjoiY2ZiZThiMTQ2NGIwMGJiOWUwZDE4YjA0ZDIwNDBlZDliZDgyMjc0MTE4ODgxMmI5OGE0NDBmYmM2NmZmMDE4ZGRmNmMwZWEyMGM2MmQwMWI4MjM3YmM3YzNkYTllM2Y5ZmI4NzRmY2E3OWEzNjBiNGYwZjk2N2Q4ZDAyMDgzYmEiOiI1NmY5NzU4NDkxOTdlMmVhZTVhMmU2ZmI0NDVhOTNjMWZhZGY1NzI4MGFjMjdlMjdjN2NiZWEyY2IwMGMxMGNjIjoiMGE2ZDllMmQ2ZTE4MWFkZGFiMGVhMWVlODljNjVjZTU1N2UxMGZiOGU4ZDQzYTI0Y2RkMjcwMzNkM2ZmZjUwNyI6IjgyM2U5NDAwYTlmNTYzY2MxZmE1ZGFmMTBmNGZmMWFiOGFmZmExOGQ4MzcxZjljZDBlMDY3ZmNkZGNlOGNhZWQiOiI1ZGVkMjk4Zjk4Y2ZmYjJlN2Y1ZWE5N2JkNTBjN2UzZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjExYzEzYjkxN2Q5Zjk0ZmQ3YTAwODU2NmQ4NTk4ZTg5IjoiZjUzMzQzYTVhNDU1MTMyZGYzZDFiMDNkYjM5ZTQ0ZDkzMzg1NWIzNzVkNzQyMmFkMGQwN2RmZGZiMzUyYWYyODk0NmViMjk5ODA3OTM0NTZlYzg2MzRiZjExM2U3NTc4MzI0NmJiZDA1YWE4YTdjYjU4ODZkMzcyZmEwMTJmNTgiOiJmZjFkOGQzMzA4MzAyM2ZmYmUyOGYxNTNiZGRmYTlkOWYzYzIyMWRhMTZmOGYyMDk2N2QyNTA4ZmE3NzUyYjU1IjoiNjZhOThjN2Q3NzhkNzk4NjE3ZTFkMzFkNGJkZmFiZjhkMzgxZDM4YjgyMTI1ODM4ZGRmNDNmYjdmNWIyN2RjNiI6IjQwN2M3MmQ3Yzg5MGMwMGIyNDliZTAwYTUzYWU3MjJlNWQ4MDMzYzg0YjFlMWE2YTY5ZDRiMjc4YmE1ZGI5ZWIiOiI2N2FiODgxNTZmMjBkMDNiM2ExYmMzNjNkYWVmYzBjNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDAsMjU2KSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjdiOTUzNDNhNGFjMGY4YzhiMjY0NWMzMzc1N2EzMTQ2IjoiM2Q3ZTI5ODc4NjBjYmNiYTE0YTEyNTk0ZTFhMzk0ZWU3NTRjOWE3YTY1Y2VjYzk5MGJjNzliNWU4NmU2NzJlMTJmOGMxNDRkODQzZTFhYmNhNDZiNDc1OWExMWIzZDI5ZjRlMjE5MDc3YTg2OTZlZmFkZWU2MThmMjU0Y2I4MGEiOiIxNjI5NzUzNGE3OWM0YWU3NDkzMTc4MjI2YjI5ZTQyYTZmMWUwMDY2YWVhZWU4YjVhZjY1YmNlZmEyZWUzZWJiIjoiYjQyOWVlOTg2ZjE2ZmIzNWZlMmM0N2MwM2MwOTE4ODcwYjQ1NjBmNGVjNDY3OGY5ZGY0NzFjYmQ3Y2E2YTg4NyI6IjJiMTRkNjEyZWIwMGM3ZmJhMGQ4ZTIzYmY5MWRmOTFkYWVmNmY4ZTI3OWUwMDUwZDU0OTdkZGYwZjM0NjZjNzYiOiI4ZjcyYzE3NDA1MTYzMDkwZmUwYmQ3OTViNjU4MTFjNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMzI3MjkwZGEyZTlhMTljODQwZGU4ZDMzZTQyNWVmYWE1YWE3YTdhZmE0ZTVhODEyMDY1OTY1NDc4ZDY0MGY3ODUyMGNmM2M2NzBiMDk4OTQzZmVjMTkxNGQ0YzhjNDExIjoiODBiZGYxODI4OGNiOGFkYjZlM2RhY2IwOWM1NTNhZjJlNzMxN2MxOTRkMzdmNDMzZWVjMjdlMzI0YTBiYWQ3NTI4OTliZGE5MWZkNDFlNWEwOGFjZGZkNzYwMDdhZWNhYmMxOWM5NWE4YmNlZGUzMTBmNzMyMGNlOTdhYWFkMGUiOiIiOiIiOiIiOiJjMjYyMjI2NjJlZDNhNjQ5YTE3NDVkZWU1ZGY0ZWVmMCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYmUxNGY0NzM0NzJkYjA3YTQzYjdmOWE1MTc3MzVkN2Y3ZWRlMmFhNzBkYmRiNzI5YmM0ZjU3OGEwZGNlOWQ3ZmU5ZmQ5NzkzOWNkMWVmNzMxMjYyNDE3YjUyMTNiZDdmIjoiYWM3MWZmNTMxNDBjMTM4M2ViMzc5ZTUzMTFlMzc2MzdhZjkzM2RiNDk0ZTVlNjg5ZDA2NTY2MWU5MDk1YjgzMDJlNDE3NGMzOTJmMzI0ZmFjNDM2OTVkOTM4MWUzY2Y0NjI2YTUzNDc5MzhlZDllMjE1MDJjYmQ3ODljY2EzNjMiOiIiOiIiOiIiOiI0YmFiOTVmOWYwNWZjMzZhMzM3YjZmMjU4MmMyY2U5OCIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiODhjMzFlMjRmNGY4NTliNjY4OTQ2Y2U3M2Y4NjAwNjIxYTcwNzMxNDQwNzYyYjNjMjY3Y2VhYjUyYTlkNzdhMjNkNmY3MGRkYmEwZTQ2YTc4NjY5N2E5MDZjY2IxOGEzIjoiYmY5YmYyNWE5NDlkNDQ3Mjc0YThjNzJmMWFlNTEzOTk1MjFmOGFjYTM5YjFiMzdiYjdiNGQ1Y2YzYzY3ZDU1ZWY4ZGJhY2ZiNzFhYTljNTk0OTQxNmUyODY4Yjk2ODg4M2U1MTcyMTViYzIwMjkyODk0Zjg0MDZhYjM5YzFlYTEiOiIiOiIiOiIiOiI4NDFhYWEwYjE3MWQxNTI2ZWYzNjViOTIwMWFkYmZmMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiODU0NWEwZGU1ZWEwMjhjOGU1OTc2ZDViNThmYTUwMDc5YjIwYmE3MTZmMDg1NmNjMWFmN2I5ODUzN2M4OTVmMDI2NmI5NTY1NDJkMmI4Y2E2NjFhZWY1ZGExZjdmOGM1IjoiNjg2ZjRmOWVlNzRjMzQwMjg0NWZiYWQ5MzUzZDdkZmVmZjcyNzU4NGQ4OTJlYjY0YmQ4NGI3NjQxMTBjYmU0YWM4NTgxZTdlMjNhY2I5NWNhZjEyOTc5OTgzZTg5NDdjNTcwMjY0YWVjMjkyZjFjN2I3NTZmNzE4NDAwN2RjYmEiOiIiOiIiOiIiOiJmNmQ2YWU2NDQ5YjI5ODRkZjhiY2I2OTU4NGZiMTZmMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZDZjZDRiNGZiOTEwNTM3NDYwNWRlYWM3YmI0OWFkNzkyZWIyMjVkYWE1NjBmMmE4NmY2NjI2OWJmOWFmYzJlYTAxYjZlZTZmMGViNDkyNmQyZjA5MzI5ZGY2ZTkwZDc5IjoiNWQxYjhmYTBjYTJlZTEyN2QxYmQ0MTQyM2MxN2I5YThjNzM2NzE1Y2MyOTA2ODE4ZTkyMTZkZmQ4MWI3NjM3YjY2Yzg5Yjc3MmI1NWFlNzA3YzZlZmZhMmQ5Y2U3NDI1ZGYyNmY5NjY2NDZhYjYxM2Q1NTk5MTQzY2Y1MWU1ZTgiOiIiOiIiOiIiOiJjMzZhYjQ1MTExNmQ3MzNlYjQzNzdkZTM1MTFkYjVjZSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZTczZWJhZTBkMDgzNGZkZmYxODI5YWMzZDk3MjJmZTlmMWJjNjViNWY2NTJmYWU1Zjc2MTVhZjExNjQ0MGUzZDU3MDliNWNkZGQ2MDY1ZDU2OGMyNDY4MjBkZTQ2YjA5IjoiMjAyNmNmN2MxYjFmZTk2NDVhYjg3NTk5NThhYzA0ZmIxZDg5MzhiOTkxM2MzYjdmMjJkYTgxZTM5OGIyYzAwYjE5MjFlMWQ0ZWRiNWQyMWM0NTMxNTE1Y2IwZjk2NDRmZTgwNjg2ODViOWZjYTgxMzE3NmU2NzgwNzk2ZThkZWQiOiIiOiIiOiIiOiI5OGQxZGNlMzA1OTNkZThhOGQ1YjRkOTU2ZjZjNjg0YiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTUzYzE4MTNjMDZiNjA5ZWZmOWRkYzc3MjA0YjA4NWNhOTg1ZjIyMTcwYjhlY2ZjYmJmNDVlYTExYzQ1YzI0ZmNmMjViYzMzMTUwZjlmOTdjZTQ4MjQ0ZDViZWI2ODVjIjoiMWQwZGQxYTg3ZDU5YzY5ZjI4ZTExOGUxMDgzZDY1ZjFlZTBkZjMxZjYzMDhhOTJkY2M0NzUwM2VjNGQyMGEwMThkOTgyMWM2YTdkNjQzODU3MjRmMGU5NDEyMzE0MjZlMDI4ZWZlNmQ3NWU1M2ZmOGVkZjA5NWVmMWJhZjI2NTYiOiIiOiIiOiIiOiIwMzVjZWMzYTI0YmE3YzQ0ZTVjMTk0MzZjMjY4OWE3NSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTZkNWI4MjkwNjkzYTVjNDBjNWE1MjZkZDZkNjUzYWM1NGNhYmI1NjA4ZDc3YmIyY2I3ZDYyNzBiOTZjMmZlMmRlMDc2NzE2YWU4Y2YwYTVjNzgxZWRiZGU4NjFkYzcwIjoiYWE4MmE1ZWEzMzQzOWQwYzE2YTFjYzEzY2JhZTUzYjE2OWY0ZDM2OWJjYmRhZTgxYTlhMzgxMjljNjVhZTBlYTRmNzIwNTc2YzAxMmY4ZDdlYjFjMDIwMjAwM2MzOWQyODQ1M2EyMmU1MDJiNDk0OWNmNWJhMjNhNzI3NzIxYmYiOiIiOiIiOiIiOiJkZTRlZDlkMTYzZDExZTliNTI0NzBkMDc4ZGY0Yzg2OSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjOAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiNjhiZmFiZGJiODIxY2I5Nzg1MjdmZjE4Y2UzN2M5NmM3OWFkNzUxNzU2NTUxZjM2YjY5OTE5ODEyODVhNjg4NTRlYzdmNzJmNTQ4YzMzOTVhZDNlZTQwNDEwMDY0ZDRiIjoiM2RhOWU5NTE4ZWIxZjFiNjI2OGU0NTk3ZjE1ODg0NGZmNjcyZGRiNDE0ZjdlYzIzZmE2NmQ2Yzg2YjkwYTczMmE3YjMwMTZhMzM4N2VjM2RiZWQzNGViNDc5NDEzZDAxNzkzMmViZjlmMmEyZmVhMGIzNWQyYmY0ZTA2NzE4ZjkiOiIiOiIiOiIiOiJlYzRlM2UyYjZiODc2M2RlYjE3Yjg2MTFkMWZlNzk1MyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjOQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMTcxYTc0YWI2OTRhN2Q3YzJiYWEzY2NmMTAzYWQ5NGYxMTA5NGUwN2E5NTVhZTlhYzNiYWQzNzBmMTQ0ODc1M2U5OWI2M2NjMjNkMTg3OGFiNjZmOTQxMzZlYzJlY2FjIjoiNzJlYmVkYTczNDI3NzBkMDNiYzBlNTMxNzU0Zjk0NmNhNWNjYTY4NGM0MWY5ZDA4OWZlOTE0N2ZhZDkzYjYxNTQ5MTljNWNiMmU2ZDE2MmZiZmRlN2I5ZmYwYWE1OTBhMTc5OTNjYTZjODBiZDU5ZWVlNDEzNGZjMmNlOTQ0ZDgiOiIiOiIiOiIiOiI1ODJhYjRmMTA1YzNlMWZlZDk1OTNmNThmYzMzNWZjMyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImNhZWQzMDAxNWIzNDA2NDc2MjU5MWViYTlhNTlmNDQwNTY2YTY2MjE4MzJmNjUwNTcyMzYyMjI5ZThhMzhjZDBmNWQ2ZDMyMmFmZDg0NDQxMzIwNTY2OTBkNmZhNTU0MCI6IjhlMjdmMGRiZWFlNDYxM2JjZjAwMTExMDVmODI0ZWQyZWNiMTUwYTgzYTA5OTRmOGY2NjA3ODMzNzU1MjE2ZTAxNmZiMTc1ZTUxZDQyMzcwYWZlMjdiMTFjMTg0Nzc4ODZiNTMwYzk1YmMzMWJkMWMwZjhmZTAwZjYxZmMxNWEwIjoiIjoiIjoiIjoiZDQyNzg3ZTk3MTQ3ZDQ1N2YxNTkwYzc0MjQ0M2FkOTIiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzExCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJjNThkNjJmODE0NTYyMmNkODZjZmJkYTY2YmMyNmQyY2U0YzU2MTBjZDljZDFjMzI2Yjk5YjYwMzU1YTZmZTc1MTc4M2MwN2YyY2MyMWJhNjhmMWYyMGNhNzBmMGFkMzEiOiIzOGE4YjY4NWU2YmJhYjY3ODI0ZjRjYzcyOTk1MDQzZWEyODU0ZjA2N2YyYWZhZWM3NjJjOWU3OGZmOWQ1ODVhMjViYzYzYzhkMGQwNzVkMDZkNDNmM2Y2OTQ3MzM5ODJkMjZjYmUwNjQ4YjJkMGNmODA1MzkxOGI5MTJjMzAzYSI6IiI6IiI6IiI6Ijg0MDAxNzA5ZjE1YTJmZDE2N2MxNjFiNWQzNzZkODZkIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDApICMxMgorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiZGM5NzE5MDUwZDUyNTcxNTJkOGE3ZDYwZDNlZjFmYzViOGNiMTcwMGJhZmM3ZGU4NjNjMDE5ZjI0NDc3OWM0NjRiNjIxNGYyMWEyZjZkMGFhM2NhMjgyMDA3NjE1Y2U1IjoiZjE4OGExYmEyMWIxNzkxZWJmOGEwOGQ4YmE1NTVlNDk0MjNkOTE3OGE1NjFiY2MxNjcyNTM5YzNhN2JhMWQ4NTZlYWU5OTIyYzRkOTZjMTgxZWQwNDVkNmYxZDE1ZTg1NTY5MGNkYWU0NTFlZGFjNjBmMWNhMjAyMWYxZmVjNTciOiIiOiIiOiIiOiI3NTQwZmVkMzEzYzk2MjYxY2FjMjU1YmY4M2I1YWU5OSIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwwKSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImZmMDU3NzgxYWY0YTRhMWVlZmViMjZhYjM4ZjgyYTJlZmI2ZjA2NWRlMjkwZWJmMjI1YmQ2OTNkZmIxZjk3NDU1YjQ5MTQzYmRiNDMwMzI0YzlkOTQ1YzQ4ODI0ZjZjYyI6IjBkZGQwZjRhNDNhN2I1NGQ5YWJiMDkyOGEyMjQyYzM3OGRiN2E5NWEwYjIwNmJhYTY0MmFmZTVjZDU1MTA4ZjQxMmYxZDcyN2ZkNTkxYmNhMmM3NjM1NWFhNjJhYTg2MzhjZmExOTE2NzM5YmM2NmUwMmI5NDU5Y2NkMDg4MWJhIjoiIjoiIjoiIjoiOGI2ZTc0YTk0ZmNhYzBkMmYyMTJkMzU5NDIxM2ZiYjYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMCkgIzE0CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJlZjAyNzMyN2U0N2ZjNTg3NWMwMWNiMTdkNzk4ZmRjMmIyN2E1Yzc4MDAwNzI3ODQyZjhhNTE2ZjRlOGRkMzRhZmMxNjdhZTE0NWIxZTc2M2JlYmRjYTUxZTJmNDYxYTciOiIxMjg1NjZmZTZjNWI1NTk1NzQyMTkwNTE5NDQ1YzI1ZGI4NWVlMGNlMjkzNzFmNGNhYjIxMzQwMGQ0NzlkMmJmZTI3NjU1MTU1YmUwZmEyMzcxNzNhYmIyMTRmMDIyNmEyZjE3NzA4MDJkZDY5NDg1YWRiMjVlNmQ4Mzc0ODVlMSI6IiI6IiI6IiI6Ijc2Y2QxNTUzYjJiNzNkNGVmNjA0M2EwOWZiOTBkNjc5IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjhlMWE1OTIxMGY4NzZkMDE3MTA5Y2I5MGM3ZDVkZDY2OWIzNzVkOTcxMjY2YjczMjBiYThkYjliZDc5YjM3M2JjYzg5NTk3NDQ2MGUwOGVhZGQwN2EwMGNlN2JkYWRlOSI6IjIzNjc3YzA0YTJkNmFiNDQ2YjdiM2M1ODJhODA3MTY1NGQyNzg1OTQ0MWIxMDc5OWYwOGI3ODgzNzhiOTI2Y2E0MzA2ZTdjYjVjMGY5ZjEwNGM2MDdmYmYwYzM3OWJlNDk0MjZlNTNiZjU2MzcyMjViNTUxZjBjYzY5NGQ2NTkzIjoiMTllOTE0ZmZiYzZkODcyYmUwMTBkNjZiMTc4NzQwMTBlYzhiMDM2YTNkNjBkN2Y3ZGRhNWFjY2M2OTYyYTU0MiI6ImJkN2EwYzA5ZTc4MGUwYWQ3ODNmZDcwODM1NWI4ZGY3N2I0NDU0YzNkNjA2ZmI4ZGUwNTNiZmZhNWVjZjkwMjEiOiJkMjg0ZGMyY2FmNmQyMTRmODkwOWVmYzlhNzUyOTdiY2NmYzA0MzUzYzI3ODhhOTZmOGI3NTI3NDljN2ZlYzBjIjoiMTI5ZDI1NmU3ZGI2MjY5ZTVhMGExNjBkMjI3OGYzMDUiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMQorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDA2NzRlNjMzNjcwYzk5NzFiZTdhZjc4OWQzN2Q1YTRlZjU2N2IzY2E0NzY2NzIyY2Q4ZjY3ZTA5ZDIxY2JiZmEwOGQ0M2VhMWFhMjU5OTk5YzZhMzA3YWU2MzQ3ZDYyIjoiZWM0N2IwMjk2NDNmODVlYTE5Mzg4YjZlOWRlNmFiMjI3MDViMDYwYWUxMGNlZTcxMjYyMDI3ZDBiZGZmNWVmZDczOTNhZjYxOWJjNjY1ODYxMmZhYmM3ODQzOWEwYmQ1YTAxMjU1NTYzYTk2MDEzZmExMzBkZDA2ZmQwZjU0NDIiOiI1YjkyYmNlM2Y4NzY0NTEyNmRhYTQ3MDRmZDdkZjk4Yjg4MGFhMDc3NDNhNTczOTliOTg1YWQxYTAwYjFmMmZjIjoiODE5OWRlMTMzOGM2ODgyMzRjNzcyNjJlZjM1NDIzZjQ2OTViMjc3NzI2Yzc2ZDhiNWY0MjYzOTljMTRkODNiNSI6ImViOTVmNWE0ZDg0MDBjZWMyZDRlMGY1NDhiNmU5MjYzNmI1ZTI4NGZiNmI2MTc2NmExZjM1YmI5Y2RjNWRmMGEiOiI5ZmJlOTU4MTc1NzhlYjI3MmFhOWRhMmY1MDljMmEwNiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICMyCitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiIyNTUzNDIzYzNjYjBmYWU4Y2E1NGFmNTZmNDk2ZTk5MzVkNWFmNDczODg5OGY3N2Y3ODlhOWJlZTg2N2RmYmM2MDEwYzRlNWJjNjhkYTJiOTIyY2RkODRlZWE2OGUxZGEiOiJhOWJlYmQxMzcxMWMwYzIyYzk0YjMyNTI2NTQ4NTQ1MTVhOWRjMDE1ZmU2OWU2ODhmYmFjOTY3NmIzZDc3YWI2N2UxOWIwMjBjZDI0MjdhYzc4OWNhMTdmNjU2ZTQ5OWJlM2JhM2FiMjA3NWZmOTUyNDdjNjM1NTE1N2VlYmM3OSI6ImU3NGU0NWZhMjg2OTdhMDZkYWIwODU0NWZkZTBjYzI2ZTdlY2EzMWM0MGFhNjhlZTQxYzRkZTQwMmZkY2M5NjEiOiI1YWE4YWJmNzA2MjA3OTkyOWQ2YTEzMWNkMzg0NGE1ZmI2NTE0YzA3MDYxZTI1Y2FkNjc2NzdkODY3Mjk3Njg1IjoiODQ4MTkxMDliMmUwOWI0NmJhM2Y1NDY0YzM0YjI4Y2UyNWExODZmMGUwZmQ4M2ZlNWZhMGFiMDI2YzAxMjkyYSI6IjM4NDZmMzQwNmU0OTA0MGM0OGI1Y2ZjOWNiYzc1ZDFhIgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg1NmYxMzcxNDU0YmI5YWEwNmJlODk3ZGNkYTliMjk1ODE3YzZlZWI4NjVhOWFjYjNhODlkMTQ1YmZlMjljZTVlMWIzYjEyYjcxNDU3MWFmZGZhY2E3OTUxY2Q0N2UzMyI6ImE2OTFiOGJmNmE0MDdjOTNhMzZkMThhZWNlZDRjNzVmNzZkODM5N2Q0ZWNiY2Q0ZThmODIwY2IzOTMxODY4OTdmMDVjMWVmNjY4YjAyN2ZjNzhiYTZkYTliZDU1NGNjMzFhNDY3ZDQ3YjVlNTM0YjUzNDBjNzc5OTM4M2VjMDVjIjoiMmM4MWQxZTk0YjMzMTY0YTE3N2QwMTgzZDE4MmZlN2QyM2VmNGY4ODQ0NDI0NjQ2NGU1OGJkZDBkZTM4ZDgyYyI6IjFiNWRhZTgxYzk2NzcxYmVhMDkxNTIxYzA5NzNjNWFmNzZhMDNlMzYyNDE2MGUyNTExZTU3ZmY0M2ExZDMyYTkiOiJiZjU4NzhlMmJkMTM5ZjhmMDU4ZjNkODM0YWNkNzcxNTE0ZGE2ZDRjNWI5ZWY4NDQ2NmU1YTRlMGU0YjJlYWFmIjoiNmE1ZWE3M2FhZDQ3NmNlMjAxZTE3M2Q0ZDVhN2ZmY2MiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNAorY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiMDQzNjA3NWNmOGNmNjJjZTYyM2MyMzAxZWJkNDUyMDNjOTgyODI2MTFjZmE1YTEyZGQ3YzA0NTI1ZmZhN2ViMzQzYTYwN2FmMmY1N2ZlYjdjZTNhZjk3ZTBhYmMyMjg1IjoiMWFiOWFkYTVlZWViYzNmYzhlNTNmMzU4YjY0MzQ3NmZjZmQ0ZGQ5ZjA5MmYyMWQyYmMxYzRiYjFmZmQwMWEwYzViMjA3YWFhMDlmZjc2YTljYWIwYWE2Y2U2MmI2YTY1YjI2NTBhYjQ0OGI4YmIyZTg2OTZhN2FhNGI2ZjRlOGQiOiI2MmYwN2QxZjQ5ZTQwZjdmNDcyOTg1OTQ3YWM0ZDhlZjJkNTgyMTZkOTE4Zjc5NDJiOWM3MGY0M2RhZmY4OTcyIjoiMzdhZTc1ODE0MWZiYzg5MGVlN2UxZDA4NTQ0MjZiMjk4NGZiMWMwOTQ2NzdlNmE2MTU0NmU5MzE1YmFiMDg5OCI6IjM1M2QxZGQwYzhkODY1NmJjNDE4YTZhM2FjZTEzOGVjZDYyODE5ZDRlMjFiOGJkODc2OTRlYTY4M2VjMGNjMzciOiJiZmVlNmJiNGFmYzIyOGRhOTgxYmZlN2YwZDE3NTc4YiIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM1CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJkMDA0YTA4OTNiZjMyNmQ1MGVlNTJlMDRjYjNlNjQ0MDlmMjA0ZjRlOWFmNzgwZDVkZDA5MmQwNDE2MmQwODgzODViMWYyNDMwMDA5MTRjNjJjYmEzZGFkZjk4MjdjODEiOiJjMzYwMDQwNzVmNWZkMDc4MTM3ZWEwOGRlNmNiMTVmNzFhZWI5ZWNhMjFjODkxY2ZkZjdhOGMwZDIxNzkwYzk0ZmZhOTNiZTVmYTA2YmViNWU4MmQ5ZmJmMTczZWY5YjI5YzE4NTExZmVlMjQ1NWRiYmU2MWQ2YjAxYmFmMDI0YSI6IjdkMzEzYWRhMTMxNjUwYzdhNTA2ZDJjMTk0NDQ0ZWQyMDJkNTY4NTQ0Y2FhNzViYmM2MGU1N2EwYjc0YzlhMTAiOiI3OTFkNjAyMzg2NzdmZjUzMTUwY2Y3MDc0MDYxZWFjNjgzMzVjMGE3Y2VjN2RlNDNlYTYzYTVkZjBmMzEyY2Q4IjoiNjc1NDM2NmJlMjY0ZGViOWU5NGYzOWU5MmFjMjg5NGJkOTNjMWQ3ZTExOThkMzllNmVkZGNjYjBlYTQ4NmY0ZCI6IjFjMjk3OTVmMDNlM2M3NzE2MDMyOTM0NzNlMzQ3YWI0IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzYKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjlhOGM3OWI0OGFkYTQwOTE4M2Y3MjYwYWExNDE1YzllZTRlMGI2NjJlMGZiODFiNWM1NmY4NWQ3NmVkNzVlZmFjNTc1MWRkNGRlN2U3ZjhiNTNhMzZlZTBkY2UyYmM5ZSI6ImM0ZDY4Yjc2ZGMwZTc4NTgyM2JlMmRhOWQzMzlkYzkwMDEzMmYxMjcyMWU4YTYzZWJlOTJlMzZkNzQwYzVhNWU1NTY0YzM2N2JmZjRhNTJiYzcwYjFjNjBjODZmMGJjYjdjMWQ5OWM0MTQ5NTZhMjU5OTYzMjA3MTg0ZjAxMjQ2IjoiMDRjNzA2MGYzNjU2OWE1ZDk1NzhjNzE4NjI3ZmMyNjk1ZThkNzgzYzBjOGFlZmNhMjc0NGRhNjY2NGU2N2M4YyI6IjFkNGI3ZDU4NzQyMWRlYTRmN2YzZTc3ZmNmOTk3NjA3ZWNmZWI2ZTY2NWE5YTE4NDEzOGViNTczNmIxNmY1MTYiOiI4Y2I4ZGFmOWNkYTIzMGQ4ZDM5YjgyOWI5NjhhYWE1ZjVkM2UzMTA2ZDhiNjkzMjI3YWIxYjYyMDFiNzhhN2I4IjoiZmFhMTQ2MDk4NTI2NTQ2OTI3YTQzZmE0YTUwNzNlNDYiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjNworY3RyX2RyYmdfdmFsaWRhdGVfbm9wcjoiYTA3MzZhNWE4YjBhMzk0NjI1ZDg5ODViMDVlM2E5ZjI3N2M3YmEwM2IyNTNjMGU3ODMzNTlhOGM0YzA4NjEyMWNiNDZlYTQ2OWM3NzU2ZDVmMDk5ZjVlZThlZDE2MjQzIjoiZWE3YTA0NmZhMTc2MDg2NmJjYjM3ZmVjZjlhZGU3YmNlYTQ0NDQ2NjJlYTc4MmQ2ZjI4MjBiMjJhOTZiYWI5N2I0YzVhZGNiMGE1MGNlZDg4NTEyMWI2Yjg1YTUwNzQ0NDRiMTU1NWQ5NjU1ZjRmNmRlZDMxZmUxNTI4MWIzMGUiOiI0N2YzNjU1ZGQwNWM0MjQ1NGZhZDY4ZTMzMGFhYmNhNDlmMjdjNzZiYTA1ZWYwN2I2ZDc3ZmJhNDExNTNjMGFiIjoiYTVkMDdkYTNlMzk5Y2M1MWQxMzYwOTY1OTlmY2JkOTc3OWU4MzliMWZkODZmMjFkN2QxZTIzYWNkOTFmOWZhNyI6IjE1MGIwMjhiNjRhOTg4ZmMxZmZkZmM5ZTY2YjRjOGRmZTRmY2Q4NTM4ZWU5NzZjODk5MjM2MzhlYmFkMzM4MDIiOiI2ZmZkYzY4NTE2OWIxNzRhZDBkZDg0Y2RlZWQwNTBhNyIKKworQ1RSX0RSQkcgTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2IHVzZSBkZixGYWxzZSwyNTYsMTI4LDI1NiwyNTYpICM4CitjdHJfZHJiZ192YWxpZGF0ZV9ub3ByOiJkNDQ1YTNkOTMzMmM4NTc3NzE1YzFlOTNmMTE5NTIxYmQzMWE0NjRkYjA4Y2RiZDczZDUwMDgwZDYyZDVhNDhmYmE0Y2VmMmRkMDk3ZWM3NDk5NzMwMzdlMzNlOGQ2ZmEiOiJkYTVmOWIyZGIxM2QwNTU1ODQ2YzAwZGE5NjExNTAzNmJiNzVhY2U2NmQ1NmZjNTgyZDZjZDAxNzFlM2UyMzMzNWM1YzJiODY5MWU1OGFmODg5OWVkMDIwNDMxNjQ3OWY4NDljYTZmNDczMDljYWU1NzFjY2I0MmQzZDM1YzE2NiI6Ijc5MzQ2Mzk0Zjc5NWYwNWM1YTUxOTk0MjM2NDliOGI1MzQ1MzU1ZWYxMWViNDIzOWRiMWM3NjdjNjhhZmE3MGEiOiJjMjI4MTBkZTk5ODdiMjI4YzE5NjgwZWIwNDRkYTIyYTA4MDMyMTQ4YTYwMTVmMzU4ODQ5ZDZkNjA4YTIxNGI5IjoiNzc0N2Q2OGNhOGJjYjQzOTMxZjFlZGNlNGY4Yzk3MjdkZDU2YzFkMWQyNjAwYWQxZmI3NjdlYjRmYmM3YjJkNiI6ImY1YzQwYmFiYmVjOTdjYjYwYmE2NTIwMGU4MmQ3YTY4IgorCitDVFJfRFJCRyBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYgdXNlIGRmLEZhbHNlLDI1NiwxMjgsMjU2LDI1NikgIzkKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjI3MjhiZTA2Nzk2ZTJhNzdjNjBhNDAxNzUyY2QzNmU0YTA1MTcyNGFhMzI3NmExNDZiNGIzNTEwMTdlZWU3OWM4MjU3Mzk4YzYxMmZjMTEyOWMwZTc0ZWNlZjQ1NWNkMyI6ImQ2NjNkMmNmY2RkZjQwZmY2MTM3N2MzODExMjY2ZDkyN2E1ZGZjN2I3M2NmNTQ5ZTY3M2U1YTE1ZjQwNTZhZDFmOTczM2M4ZWQ4NzVmZjc3OTI4Mjg0ZGMxY2RiMzNhY2NjNDc5NzFkMzYyNjYxNWE0NWI5YTE2ZDliYWY0MjZlIjoiNjIzNDllZmJhYzRhNDc0N2QwZTkyNzI3YzY3YTZiYzdmODQwNGNmNzQ2MDAyZTdkM2VlZmZiOWE5YmUwYmJkYyI6IjM4MWMwY2ZmYmRmYTYxYTZhZjNmMTFjY2QwZTU0MzIwOGI1ODRjM2Y1MjAxMzBlMzM2MTc1NjRlYzdhNDhjZjciOiI2OTc0MDQzMzYyZjgzNGZkNzkzZGUwN2NlZWJkMDUxNTk5MTYzZDUwNDg5NDQxMDA1YWZjOWRiMDlhOWFiNDRmIjoiZGY3ODk0NzQ2YzU5OWUwMmQ5ODViMTk1Y2EzYjQ4NjMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTAKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjJiNjViNTZkZTQxMGVlODJlNTViZDJiZjgwZTZjZWUzNTZhMzdjM2EzYWE3MDQyZGY0NWZhNzUwYTc0ZTA5N2IwNzFmYzE4ZDZlZWQ5NjUyM2RkNGZiYjY3N2I4YzcyOSI6ImJmMDNhNmIzZThlMjNmZjUzMzY5Yjk3MTIxN2RjM2QzZjRjMTIxMTMyOWM5NDg0NzM0N2IzYWE3N2RjN2EzZTA2NzAzODE1NzM1Mjc4NDRhMWFkZTc4NmYxODYzMTk0NDU1OGRlZmZmYjlhMDA5MDBjYTU1Zjk3ZWM3MjYxMjZiIjoiNTkyNTVlNWNkMjIyMTMxNmM5NDViZDYxNDQ3MWRmNzZkNWIyZjM5NGI4ODI5ZGU4MmU1YzMwYmMxNzg1NjVlMiI6IjU3MzliYzE0ZjBmMmVmOWQzMzkzOTI4YWVlNjdiMDkwOGFkYWY1ODc2NTA5Mjg5MTZkOGFlNzhiMDA3N2EzYjMiOiI2YjIzNmNmMGVlMGRiYTBjOTJiMjZjNjAyMzVkMzg2ODcxNWE4MGMwZWZiYzBjODk4YjZmMGIxYWNlODE0NmU5IjoiODM3NGI1NzFkN2YyZDk0Y2UyYmRhZGViOWQ4MTUzOTciCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTEKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg3NTZlZTJjNWUzODFjN2MxZGM1MzA3NDhiNzZhNjI3NGVmNjU4MzA5MGU1NTVkODUyMTBlMjM1NmZlYjI5NzRhOGYxNTExOWEwNGU5YjQ4MWNkM2JjNTU3YTE5N2I4ZSI6IjE5NzA1NzQzZWFhYWEwZTg4OTBhMGZhYTJlMGRmMzdjODIwZDU1NmM3YTQ1ZjA0ZDc2Mjc2ZjlmOWNlMmU3YzEzMzI1OGFlNmQxYmE5Y2RmNzc0NWQwMTc0NTc2M2QxOGRjZDFhZjJjOWU5YjBiZWQyODA2ZTYwZjBmOWI2MzZjIjoiMmI0YTkyYjY4MmU5YTU1NzQ2NmFmOTdiNzM1ZTJmZmRiYWMzYmZjMzFmZDViZTJjZDIxMmNmYmQ0YjhkNjkwYSI6ImU4NjUwNGYxMDMxN2JiZWFiMzQ2ZjNiOWU0YjMxMGNiZTlmYmQ4MWE0MjA1NGYzNThlYWNkMDhjY2NhYjZlZmYiOiIxOWZmYWQ4NTZhNjY3NTI2OGNjNDY0Y2E2ZmRiOGFmZDA5MTIxNDNlNTUyNjY4NTI4ZDE0ODRjOWE1NDU5MmNmIjoiZjM0N2ZkNThhZmYyOTk5NTMwZTI1OGJlNzc1OTE3MDEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTIKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6ImY1OGJlNTdlNTAzNWQ1YzQ1NWIxN2E0MWNjZjc1NDJmZmQ3N2Y1YzAwOWUwYTczNzExOGVkNmM0MTg4Zjc4ZmNiZGJlOTQ2YmY4MmUxZmE1MGZkODE2OTFkZTgyZGNmMyI6ImY5OTM5NTkyYWIyYjMxZDkyYWM3MjY3M2RhMDEzYTU4OGVhMTdiYmYwMmNmZDZlNzlkNzlmODI5NjYwMTYzM2QwNGNlYjAwNTExMGYyNjZlNjEwMDA0MGVmMzMxOTQ4NThkZWY4YjUzNTMxNGM3M2NhYTBlNDhmYzRkMmY2ZTJkIjoiYmIxY2IyMWEzMTZkNGI4ODA5M2NiZmM3OTE3ZDYxNGRjYTk3MDkwY2RjOGJiMzQwZDg2NDU0N2NiM2UxZmVmNiI6IjdlNDJkNTQzOWQ4MTY4MGM4ZWRmNWM1NzFkNTQ4Njk5NzMwY2ZhZGEzM2I2NTBhNGQ1MTAxNzJhNDJiMjk4YmIiOiJlOWUzY2YxODBmNzJiYTJjMWE0NWQwYTk0YjgyMjk0MzYxMjE0M2UwYjY0MjM5ODc5NmIwNDI4YWUxYWY2Y2Y1IjoiZDBjODNhNGJmMzUxNzY0OGI0NDFkNDExZGRjYjgwOGMiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTMKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6Ijg5ODA2NDI0M2U0NGZmNjcxNTE3MzZjZThiYjZmMWM3NTljYWI0YWFjYTliODc1NDNhMWFjOTg0ZWY5NTVjZDVkYjc2YzFhYTU2YWZmODNmMWY2Nzk5ZjE4ZmU1MzFjYyI6ImI4ZDZiZTMwMzZlZWI1NjU3ZmIxMDc2NjM1NGQ0YmU4OTdiZDI3OTczYjM1MzAyNzBjY2MwMmEwODE2OWEyZTQzN2IzMGEzNjM1ZWI2Y2NiMzEwZjMxOTI1N2Y1OGQ4YWEwMzBjOGFhYjYxNjQxOGUwOTE0YTQ2MTMxMzA2YTBjIjoiMzc1NzI0MjhkZjU4MjZlNmFlNWNlOTVkYjRlZjYzZjQxZTkwOGY2ODUyMDRhN2I2NGVkYjlmNDczYzQxZTQ1YyI6IjI4YmVkYTBlMGUzNDZiNDQ3ZDMyMjA4YzZiNGM0MmRjZDU2N2FjZmUxZTQ4M2ZiNGE5NWVhODJjYjhjZTU1YTUiOiI3YTBmZmZhNTQxZDcyM2UxNjM0MGVlYjk2MGIxYjljOWFhZTkxMjQ3N2UwZWJmYWMwM2Y4ZjFhM2E4YmRjNTMxIjoiNjExYzlmNmZjNTE5M2RiZTNkYjk2Y2JjZDI3NjE2OGEiCisKK0NUUl9EUkJHIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiB1c2UgZGYsRmFsc2UsMjU2LDEyOCwyNTYsMjU2KSAjMTQKK2N0cl9kcmJnX3ZhbGlkYXRlX25vcHI6IjUwZGU3MjkwM2I5ZDk5NzY0MTIzZmZhYTBjNzIxZTE0YWQxYWI1YzQ2YTM0YzA0MGYyNTMyNGJhMWQ5MzdiOGVmMTA0NjcxNjFmY2YyOTc4YzJhNjgwYWM1NTcwYzZkMiI6IjVjOTk1NGZkMDE0M2U2MmMzYmYyZDU3MzQwNTJlM2M5MzcwZjdiOWQ3NWM3MGY1OGZlMzNiMTJlMzk5N2VlMmM4ZGI4NGY4NDY3YWZmZDdjZmQ5YTllN2VjNjBkYTZmMzFiZjliZjMyYWVkZjY0NGU0OTM0YmQxZmM5MTZiYzhkIjoiZDVkYzRjOWZjNzE3MWZjYmZkYWVhZDU1OGE1NjVmZmQ1NWQyNDVhNThiMjJhZDE2NjZlZTA1MTMxZTMzZjQ5ZSI6ImVhMzExNGU5MmU2YTE5ZjUzYjIwN2EwYTU0Y2QzNjNhNmQwNTNmZWQwYTgyN2Y5MjU1NmYwYTg1ODBmN2EzNDIiOiI1MzY4NmYwNjliNDU1YWY0NjkyODg4ZDExZmFjMTVjZjdiNGJkMzhlMTk4ZGU0ZTYyYjcwOThmODc1MTk4YTc1IjoiOWZiMGRmMDUzZTAzNDVlNTY0MGFhOTdmZWRlZjUwYTYiCisKK0NUUl9EUkJHIGVudHJvcHkgdXNhZ2UKK2N0cl9kcmJnX2VudHJvcHlfdXNhZ2U6CisKK0NUUl9EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUKK2N0cl9kcmJnX3NlZWRfZmlsZToiZGF0YV9maWxlcy9jdHJfZHJiZ19zZWVkIjowCisKK0NUUl9EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUKK2N0cl9kcmJnX3NlZWRfZmlsZToibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfQ1RSX0RSQkdfRklMRV9JT19FUlJPUgorCitDVFJfRFJCRyBTcGVjaWFsIEJlaGF2aW91cnMKK2N0cl9kcmJnX3NwZWNpYWxfYmVoYXZpb3VyczoKKworQ1RSX0RSQkcgc2VsZiB0ZXN0CitjdHJfZHJiZ19zZWxmdGVzdDoKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2N0cl9kcmJnLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2N0cl9kcmJnLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhY2ZiOGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY3RyX2RyYmcuZnVuY3Rpb24KQEAgLTAsMCArMSwyMjEgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworaW50IHRlc3Rfb2Zmc2V0X2lkeDsKK2ludCBtYmVkdGxzX2VudHJvcHlfZnVuYyggdm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuICkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKKyAgICBtZW1jcHkoIGJ1ZiwgcCArIHRlc3Rfb2Zmc2V0X2lkeCwgbGVuICk7CisgICAgdGVzdF9vZmZzZXRfaWR4ICs9IGxlbjsKKyAgICByZXR1cm4oIDAgKTsKK30KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQ1RSX0RSQkdfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY3RyX2RyYmdfc3BlY2lhbF9iZWhhdmlvdXJzKCApCit7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkaXRpb25hbFs1MTJdOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDAsIHNpemVvZiggb3V0cHV0ICkgKTsKKyAgICBtZW1zZXQoIGFkZGl0aW9uYWwsIDAsIHNpemVvZiggYWRkaXRpb25hbCApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIE1CRURUTFNfQ1RSX0RSQkdfTUFYX1JFUVVFU1QgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCwgMTYgKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQ1RSX0RSQkdfUkVRVUVTVF9UT09fQklHICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwsIE1CRURUTFNfQ1RSX0RSQkdfTUFYX0lOUFVUICsgMSApID09CisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yZXNlZWQoICZjdHgsIGFkZGl0aW9uYWwsCisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0NUUl9EUkJHX01BWF9TRUVEX0lOUFVUICsgMSApID09CisgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9DVFJfRFJCR19JTlBVVF9UT09fQklHICk7CitleGl0OgorICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBjdHJfZHJiZ192YWxpZGF0ZV9wciggY2hhciAqYWRkX2luaXRfc3RyaW5nLCBjaGFyICplbnRyb3B5X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZDFfc3RyaW5nLCBjaGFyICphZGQyX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIHVuc2lnbmVkIGNoYXIgZW50cm9weVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkX2luaXRbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDFbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDJbNTEyXTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3R4OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzUxMl07CisgICAgaW50IGFkZF9pbml0X2xlbiwgYWRkMV9sZW4sIGFkZDJfbGVuOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAwLCA1MTIgKTsKKworICAgIHVuaGV4aWZ5KCBlbnRyb3B5LCBlbnRyb3B5X3N0cmluZyApOworICAgIGFkZF9pbml0X2xlbiA9IHVuaGV4aWZ5KCBhZGRfaW5pdCwgYWRkX2luaXRfc3RyaW5nICk7CisgICAgYWRkMV9sZW4gPSB1bmhleGlmeSggYWRkMSwgYWRkMV9zdHJpbmcgKTsKKyAgICBhZGQyX2xlbiA9IHVuaGV4aWZ5KCBhZGQyLCBhZGQyX3N0cmluZyApOworCisgICAgdGVzdF9vZmZzZXRfaWR4ID0gMDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19zZWVkX2VudHJvcHlfbGVuKCAmY3R4LCBtYmVkdGxzX2VudHJvcHlfZnVuYywgZW50cm9weSwgYWRkX2luaXQsIGFkZF9pbml0X2xlbiwgMzIgKSA9PSAwICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3R4LCBNQkVEVExTX0NUUl9EUkJHX1BSX09OICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIGJ1ZiwgMTYsIGFkZDEsIGFkZDFfbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgYnVmLCAxNiwgYWRkMiwgYWRkMl9sZW4gKSA9PSAwICk7CisgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBidWYsIDE2ICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X3N0ciApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY3RyX2RyYmdfdmFsaWRhdGVfbm9wciggY2hhciAqYWRkX2luaXRfc3RyaW5nLCBjaGFyICplbnRyb3B5X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkMV9zdHJpbmcsIGNoYXIgKmFkZF9yZXNlZWRfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGQyX3N0cmluZywgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBhZGRfaW5pdFs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkMVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkX3Jlc2VlZFs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkMls1MTJdOworICAgIG1iZWR0bHNfY3RyX2RyYmdfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbNTEyXTsKKyAgICBpbnQgYWRkX2luaXRfbGVuLCBhZGQxX2xlbiwgYWRkX3Jlc2VlZF9sZW4sIGFkZDJfbGVuOworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAwLCA1MTIgKTsKKworICAgIHVuaGV4aWZ5KCBlbnRyb3B5LCBlbnRyb3B5X3N0cmluZyApOworICAgIGFkZF9pbml0X2xlbiA9IHVuaGV4aWZ5KCBhZGRfaW5pdCwgYWRkX2luaXRfc3RyaW5nICk7CisgICAgYWRkMV9sZW4gPSB1bmhleGlmeSggYWRkMSwgYWRkMV9zdHJpbmcgKTsKKyAgICBhZGRfcmVzZWVkX2xlbiA9IHVuaGV4aWZ5KCBhZGRfcmVzZWVkLCBhZGRfcmVzZWVkX3N0cmluZyApOworICAgIGFkZDJfbGVuID0gdW5oZXhpZnkoIGFkZDIsIGFkZDJfc3RyaW5nICk7CisKKyAgICB0ZXN0X29mZnNldF9pZHggPSAwOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3NlZWRfZW50cm9weV9sZW4oICZjdHgsIG1iZWR0bHNfZW50cm9weV9mdW5jLCBlbnRyb3B5LCBhZGRfaW5pdCwgYWRkX2luaXRfbGVuLCAzMiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgYnVmLCAxNiwgYWRkMSwgYWRkMV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmVzZWVkKCAmY3R4LCBhZGRfcmVzZWVkLCBhZGRfcmVzZWVkX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIGJ1ZiwgMTYsIGFkZDIsIGFkZDJfbGVuICkgPT0gMCApOworICAgIGhleGlmeSggb3V0cHV0X3N0ciwgYnVmLCAxNiApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGN0cl9kcmJnX2VudHJvcHlfdXNhZ2UoICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxNl07CisgICAgdW5zaWduZWQgY2hhciBhZGRbMTZdOworICAgIHVuc2lnbmVkIGNoYXIgZW50cm9weVsxMDI0XTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpLCByZXBzID0gMTA7CisgICAgaW50IGxhc3RfaWR4OworCisgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgdGVzdF9vZmZzZXRfaWR4ID0gMDsKKyAgICBtZW1zZXQoIGVudHJvcHksIDAsIHNpemVvZiggZW50cm9weSApICk7CisgICAgbWVtc2V0KCBvdXQsIDAsIHNpemVvZiggb3V0ICkgKTsKKyAgICBtZW1zZXQoIGFkZCwgMCwgc2l6ZW9mKCBhZGQgKSApOworCisgICAgLyogSW5pdCBtdXN0IHVzZSBlbnRyb3B5ICovCisgICAgbGFzdF9pZHggPSB0ZXN0X29mZnNldF9pZHg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0eCwgbWJlZHRsc19lbnRyb3B5X2Z1bmMsIGVudHJvcHksIE5VTEwsIDAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIGxhc3RfaWR4IDwgdGVzdF9vZmZzZXRfaWR4ICk7CisKKyAgICAvKiBCeSBkZWZhdWx0LCBQUiBpcyBvZmYgYW5kIHJlc2VlZF9pbnRlcnZhbCBpcyBsYXJnZSwKKyAgICAgKiBzbyB0aGUgbmV4dCBmZXcgY2FsbHMgc2hvdWxkIG5vdCB1c2UgZW50cm9weSAqLworICAgIGxhc3RfaWR4ID0gdGVzdF9vZmZzZXRfaWR4OworICAgIGZvciggaSA9IDA7IGkgPCByZXBzOyBpKysgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgLSA0ICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSAtIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQsIHNpemVvZiggYWRkICkgKSA9PSAwICk7CisgICAgfQorICAgIFRFU1RfQVNTRVJUKCBsYXN0X2lkeCA9PSB0ZXN0X29mZnNldF9pZHggKTsKKworICAgIC8qIFdoaWxlIGF0IGl0LCBtYWtlIHN1cmUgd2UgZGlkbid0IHdyaXRlIHBhc3QgdGhlIHJlcXVlc3RlZCBsZW5ndGggKi8KKyAgICBURVNUX0FTU0VSVCggb3V0W3NpemVvZiggb3V0ICkgLSA0XSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG91dFtzaXplb2YoIG91dCApIC0gM10gPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBvdXRbc2l6ZW9mKCBvdXQgKSAtIDJdID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggb3V0W3NpemVvZiggb3V0ICkgLSAxXSA9PSAwICk7CisKKyAgICAvKiBTZXQgcmVzZWVkX2ludGVydmFsIHRvIHRoZSBudW1iZXIgb2YgY2FsbHMgZG9uZSwKKyAgICAgKiBzbyB0aGUgbmV4dCBjYWxsIHNob3VsZCByZXNlZWQgKi8KKyAgICBtYmVkdGxzX2N0cl9kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoICZjdHgsIDIgKiByZXBzICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIGxhc3RfaWR4IDwgdGVzdF9vZmZzZXRfaWR4ICk7CisKKyAgICAvKiBUaGUgbmV3IGZldyBjYWxscyBzaG91bGQgbm90IHJlc2VlZCAqLworICAgIGxhc3RfaWR4ID0gdGVzdF9vZmZzZXRfaWR4OworICAgIGZvciggaSA9IDA7IGkgPCByZXBzIC8gMjsgaSsrICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQsIHNpemVvZiggYWRkICkgKSA9PSAwICk7CisgICAgfQorICAgIFRFU1RfQVNTRVJUKCBsYXN0X2lkeCA9PSB0ZXN0X29mZnNldF9pZHggKTsKKworICAgIC8qIENhbGwgdXBkYXRlIHdpdGggdG9vIG11Y2ggZGF0YSAoc2l6ZW9mIGVudHJvcHkgPiBNQVgoX1NFRUQpX0lOUFVUKQorICAgICAqIChqdXN0IG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uKSAqLworICAgIG1iZWR0bHNfY3RyX2RyYmdfdXBkYXRlKCAmY3R4LCBlbnRyb3B5LCBzaXplb2YoIGVudHJvcHkgKSApOworCisgICAgLyogTm93IGVuYWJsZSBQUiwgc28gdGhlIG5leHQgZmV3IGNhbGxzIHNob3VsZCBhbGwgcmVzZWVkICovCisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3R4LCBNQkVEVExTX0NUUl9EUkJHX1BSX09OICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIGxhc3RfaWR4IDwgdGVzdF9vZmZzZXRfaWR4ICk7CisKKyAgICAvKiBGaW5hbGx5LCBjaGVjayBzZXR0aW5nIGVudHJvcHlfbGVuICovCisgICAgbWJlZHRsc19jdHJfZHJiZ19zZXRfZW50cm9weV9sZW4oICZjdHgsIDQyICk7CisgICAgbGFzdF9pZHggPSB0ZXN0X29mZnNldF9pZHg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHRlc3Rfb2Zmc2V0X2lkeCAtIGxhc3RfaWR4ID09IDQyICk7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX3NldF9lbnRyb3B5X2xlbiggJmN0eCwgMTMgKTsKKyAgICBsYXN0X2lkeCA9IHRlc3Rfb2Zmc2V0X2lkeDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggdGVzdF9vZmZzZXRfaWR4IC0gbGFzdF9pZHggPT0gMTMgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPICovCit2b2lkIGN0cl9kcmJnX3NlZWRfZmlsZSggY2hhciAqcGF0aCwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19jdHJfZHJiZ19jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0eCwgcm5kX3N0ZF9yYW5kLCBOVUxMLCBOVUxMLCAwICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3dyaXRlX3NlZWRfZmlsZSggJmN0eCwgcGF0aCApID09IHJldCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBjdHJfZHJiZ19zZWxmdGVzdCggKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2N0cl9kcmJnX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVidWcuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZWJ1Zy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGQ1OGQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVidWcuZGF0YQpAQCAtMCwwICsxLDY0IEBACitEZWJ1ZyBwcmludCBtc2cgKHRocmVzaG9sZCAxLCBsZXZlbCAwKQorZGVidWdfcHJpbnRfbXNnX3RocmVzaG9sZDoxOjA6Ik15RmlsZSI6OTk5OiJNeUZpbGUoMDk5OSlcOiBUZXh0IG1lc3NhZ2UsIDIgPT0gMlxuIgorCitEZWJ1ZyBwcmludCBtc2cgKHRocmVzaG9sZCAxLCBsZXZlbCAxKQorZGVidWdfcHJpbnRfbXNnX3RocmVzaG9sZDoxOjE6Ik15RmlsZSI6OTk5OiJNeUZpbGUoMDk5OSlcOiBUZXh0IG1lc3NhZ2UsIDIgPT0gMlxuIgorCitEZWJ1ZyBwcmludCBtc2cgKHRocmVzaG9sZCAxLCBsZXZlbCAyKQorZGVidWdfcHJpbnRfbXNnX3RocmVzaG9sZDoxOjI6Ik15RmlsZSI6OTk5OiIiCisKK0RlYnVnIHByaW50IG1zZyAodGhyZXNob2xkIDAsIGxldmVsIDEpCitkZWJ1Z19wcmludF9tc2dfdGhyZXNob2xkOjA6MToiTXlGaWxlIjo5OTk6IiIKKworRGVidWcgcHJpbnQgbXNnICh0aHJlc2hvbGQgMCwgbGV2ZWwgNSkKK2RlYnVnX3ByaW50X21zZ190aHJlc2hvbGQ6MDo1OiJNeUZpbGUiOjk5OToiIgorCitEZWJ1ZyBwcmludCByZXR1cm4gdmFsdWUgIzEKK21iZWR0bHNfZGVidWdfcHJpbnRfcmV0OiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOjA6Ik15RmlsZSgwOTk5KVw6IFRlc3QgcmV0dXJuIHZhbHVlKCkgcmV0dXJuZWQgMCAoLTB4MDAwMClcbiIKKworRGVidWcgcHJpbnQgcmV0dXJuIHZhbHVlICMyCittYmVkdGxzX2RlYnVnX3ByaW50X3JldDoiTXlGaWxlIjo5OTk6IlRlc3QgcmV0dXJuIHZhbHVlIjotMHgxMDAwOiJNeUZpbGUoMDk5OSlcOiBUZXN0IHJldHVybiB2YWx1ZSgpIHJldHVybmVkIC00MDk2ICgtMHgxMDAwKVxuIgorCitEZWJ1ZyBwcmludCByZXR1cm4gdmFsdWUgIzMKK21iZWR0bHNfZGVidWdfcHJpbnRfcmV0OiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOi0weEZGRkY6Ik15RmlsZSgwOTk5KVw6IFRlc3QgcmV0dXJuIHZhbHVlKCkgcmV0dXJuZWQgLTY1NTM1ICgtMHhmZmZmKVxuIgorCitEZWJ1ZyBwcmludCBidWZmZXIgIzEKK21iZWR0bHNfZGVidWdfcHJpbnRfYnVmOiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOiIiOiJNeUZpbGUoMDk5OSlcOiBkdW1waW5nICdUZXN0IHJldHVybiB2YWx1ZScgKDAgYnl0ZXMpXG4iCisKK0RlYnVnIHByaW50IGJ1ZmZlciAjMgorbWJlZHRsc19kZWJ1Z19wcmludF9idWY6Ik15RmlsZSI6OTk5OiJUZXN0IHJldHVybiB2YWx1ZSI6IjAwIjoiTXlGaWxlKDA5OTkpXDogZHVtcGluZyAnVGVzdCByZXR1cm4gdmFsdWUnICgxIGJ5dGVzKVxuTXlGaWxlKDA5OTkpXDogMDAwMFw6ICAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlxuIgorCitEZWJ1ZyBwcmludCBidWZmZXIgIzMKK21iZWR0bHNfZGVidWdfcHJpbnRfYnVmOiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiI6Ik15RmlsZSgwOTk5KVw6IGR1bXBpbmcgJ1Rlc3QgcmV0dXJuIHZhbHVlJyAoMTYgYnl0ZXMpXG5NeUZpbGUoMDk5OSlcOiAwMDAwXDogIDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDA4IDA5IDBhIDBiIDBjIDBkIDBlIDBmICAuLi4uLi4uLi4uLi4uLi4uXG4iCisKK0RlYnVnIHByaW50IGJ1ZmZlciAjNAorbWJlZHRsc19kZWJ1Z19wcmludF9idWY6Ik15RmlsZSI6OTk5OiJUZXN0IHJldHVybiB2YWx1ZSI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAiOiJNeUZpbGUoMDk5OSlcOiBkdW1waW5nICdUZXN0IHJldHVybiB2YWx1ZScgKDE3IGJ5dGVzKVxuTXlGaWxlKDA5OTkpXDogMDAwMFw6ICAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZiAgLi4uLi4uLi4uLi4uLi4uLlxuTXlGaWxlKDA5OTkpXDogMDAxMFw6ICAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlxuIgorCitEZWJ1ZyBwcmludCBidWZmZXIgIzUKK21iZWR0bHNfZGVidWdfcHJpbnRfYnVmOiJNeUZpbGUiOjk5OToiVGVzdCByZXR1cm4gdmFsdWUiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGMjAyMTIyMjMyNDI1MjYyNzI4MjkyQTJCMkMyRDJFMkYzMCI6Ik15RmlsZSgwOTk5KVw6IGR1bXBpbmcgJ1Rlc3QgcmV0dXJuIHZhbHVlJyAoNDkgYnl0ZXMpXG5NeUZpbGUoMDk5OSlcOiAwMDAwXDogIDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDA4IDA5IDBhIDBiIDBjIDBkIDBlIDBmICAuLi4uLi4uLi4uLi4uLi4uXG5NeUZpbGUoMDk5OSlcOiAwMDEwXDogIDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDFhIDFiIDFjIDFkIDFlIDFmICAuLi4uLi4uLi4uLi4uLi4uXG5NeUZpbGUoMDk5OSlcOiAwMDIwXDogIDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDJhIDJiIDJjIDJkIDJlIDJmICAgISIjJCUmJygpKissLS4vXG5NeUZpbGUoMDk5OSlcOiAwMDMwXDogIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXG4iCisKK0RlYnVnIHByaW50IGNlcnRpZmljYXRlICMxIChSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19CQVNFNjRfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX2RlYnVnX3ByaW50X2NydDoiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6Ik15RmlsZSI6OTk5OiJQUkVGSVhfIjoiTXlGaWxlKDA5OTkpXDogUFJFRklYXyAjMVw6XG5NeUZpbGUoMDk5OSlcOiBjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5NeUZpbGUoMDk5OSlcOiBzZXJpYWwgbnVtYmVyICAgICBcOiAwMVxuTXlGaWxlKDA5OTkpXDogaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuTXlGaWxlKDA5OTkpXDogc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbk15RmlsZSgwOTk5KVw6IGlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowNlxuTXlGaWxlKDA5OTkpXDogZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA2XG5NeUZpbGUoMDk5OSlcOiBzaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5NeUZpbGUoMDk5OSlcOiBSU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbk15RmlsZSgwOTk5KVw6IGJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG5NeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnY3J0LT5yc2EuTicgKDIwNDggYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIGE5IDAyIDFmIDNkIDQwIDZhIGQ1IDU1IDUzIDhiIGZkIDM2IGVlIDgyIDY1IDJlXG5NeUZpbGUoMDk5OSlcOiAgMTUgNjEgNWUgODkgYmYgYjggZTggNDUgOTAgZGIgZWUgODggMTYgNTIgZDMgZjFcbk15RmlsZSgwOTk5KVw6ICA0MyA1MCA0NyA5NiAxMiA1OSA2NCA4NyA2YiBmZCAyYiBlMCA0NiBmOSA3MyBiZVxuTXlGaWxlKDA5OTkpXDogIGRkIGNmIDkyIGUxIDkxIDViIGVkIDY2IGEwIDZmIDg5IDI5IDc5IDQ1IDgwIGQwXG5NeUZpbGUoMDk5OSlcOiAgODMgNmEgZDUgNDEgNDMgNzcgNWYgMzkgN2MgMDkgMDQgNDcgODIgYjAgNTcgMzlcbk15RmlsZSgwOTk5KVw6ICA3MCBlZCBhMyBlYyAxNSAxOSAxZSBhOCAzMyAwOCA0NyBjMSAwNSA0MiBhOSBmZFxuTXlGaWxlKDA5OTkpXDogIDRjIGMzIGI0IGRmIGRkIDA2IDFmIDRkIDEwIDUxIDQwIDY3IDczIDEzIDBmIDQwXG5NeUZpbGUoMDk5OSlcOiAgZjggNmQgODEgMjUgNWYgMGEgYjEgNTMgYzYgMzAgN2UgMTUgMzkgYWMgZjkgNWFcbk15RmlsZSgwOTk5KVw6ICBlZSA3ZiA5MiA5ZSBhNiAwNSA1YiBlNyAxMyA5NyA4NSBiNSAyMyA5MiBkOSBkNFxuTXlGaWxlKDA5OTkpXDogIDI0IDA2IGQ1IDA5IDI1IDg5IDc1IDA3IGRkIGE2IDFhIDhmIDNmIDA5IDE5IGJlXG5NeUZpbGUoMDk5OSlcOiAgYWQgNjUgMmMgNjQgZWIgOTUgOWIgZGMgZmUgNDEgNWUgMTcgYTYgZGEgNmMgNWJcbk15RmlsZSgwOTk5KVw6ICA2OSBjYyAwMiBiYSAxNCAyYyAxNiAyNCA5YyA0YSBkYyBjZCBkMCBmNyA1MiA2N1xuTXlGaWxlKDA5OTkpXDogIDczIGYxIDJkIGEwIDIzIGZkIDdlIGY0IDMxIGNhIDJkIDcwIGNhIDg5IDBiIDA0XG5NeUZpbGUoMDk5OSlcOiAgZGIgMmUgYTYgNGYgNzAgNmUgOWUgY2UgYmQgNTggODkgZTIgNTMgNTkgOWUgNmVcbk15RmlsZSgwOTk5KVw6ICA1YSA5MiA2NSBlMiA4OCAzZiAwYyA5NCAxOSBhMyBkZCBlNSBlOCA5ZCA5NSAxM1xuTXlGaWxlKDA5OTkpXDogIGVkIDI5IGRiIGFiIDcwIDEyIGRjIDVhIGNhIDZiIDE3IGFiIDUyIDgyIDU0IGIxXG5NeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnY3J0LT5yc2EuRScgKDE3IGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICAwMSAwMCAwMVxuIgorCitEZWJ1ZyBwcmludCBjZXJ0aWZpY2F0ZSAjMiAoRUMpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19CQVNFNjRfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfZGVidWdfcHJpbnRfY3J0OiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6Ik15RmlsZSI6OTk5OiJQUkVGSVhfIjoiTXlGaWxlKDA5OTkpXDogUFJFRklYXyAjMVw6XG5NeUZpbGUoMDk5OSlcOiBjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5NeUZpbGUoMDk5OSlcOiBzZXJpYWwgbnVtYmVyICAgICBcOiBDMVw6NDNcOkUyXDo3RVw6NjJcOjQzXDpDQ1w6RThcbk15RmlsZSgwOTk5KVw6IGlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0Fcbk15RmlsZSgwOTk5KVw6IHN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0Fcbk15RmlsZSgwOTk5KVw6IGlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDktMjQgMTVcOjQ5XDo0OFxuTXlGaWxlKDA5OTkpXDogZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wOS0yMiAxNVw6NDlcOjQ4XG5NeUZpbGUoMDk5OSlcOiBzaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTI1NlxuTXlGaWxlKDA5OTkpXDogRUMga2V5IHNpemUgICAgICAgXDogMzg0IGJpdHNcbk15RmlsZSgwOTk5KVw6IGJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPXRydWVcbk15RmlsZSgwOTk5KVw6IHZhbHVlIG9mICdjcnQtPmVja2V5LlEoWCknICgzODQgYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIGMzIGRhIDJiIDM0IDQxIDM3IDU4IDJmIDg3IDU2IGZlIGZjIDg5IGJhIDI5IDQzXG5NeUZpbGUoMDk5OSlcOiAgNGIgNGUgZTAgNmUgYzMgMGUgNTcgNTMgMzMgMzkgNTggZDQgNTIgYjQgOTEgOTVcbk15RmlsZSgwOTk5KVw6ICAzOSAwYiAyMyBkZiA1ZiAxNyAyNCA2MiA0OCBmYyAxYSA5NSAyOSBjZSAyYyAyZFxuTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ2NydC0+ZWNrZXkuUShZKScgKDM4NCBiaXRzKSBpc1w6XG5NeUZpbGUoMDk5OSlcOiAgODcgYzIgODggNTIgODAgYWYgZDYgNmEgYWIgMjEgZGQgYjggZDMgMWMgNmUgNThcbk15RmlsZSgwOTk5KVw6ICBiOCBjYSBlOCBiMiA2OSA4ZSBmMyA0MSBhZCAyOSBjMyBiNCA1ZiA3NSBhNyA0N1xuTXlGaWxlKDA5OTkpXDogIDZmIGQ1IDE5IDI5IDU1IDY5IDlhIDUzIDNiIDIwIGI0IDY2IDE2IDYwIDMzIDFlXG4iCisKK0RlYnVnIHByaW50IG1iZWR0bHNfbXBpICMxCittYmVkdGxzX2RlYnVnX3ByaW50X21waToxNjoiMDEwMjAzMDQwNTA2MDciOiJNeUZpbGUiOjk5OToiVkFMVUUiOiJNeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnVkFMVUUnICg0OSBiaXRzKSBpc1w6XG5NeUZpbGUoMDk5OSlcOiAgMDEgMDIgMDMgMDQgMDUgMDYgMDdcbiIKKworRGVidWcgcHJpbnQgbWJlZHRsc19tcGkgIzIKK21iZWR0bHNfZGVidWdfcHJpbnRfbXBpOjE2OiIwMDAwMDAwMDAwMDAwNyI6Ik15RmlsZSI6OTk5OiJWQUxVRSI6Ik15RmlsZSgwOTk5KVw6IHZhbHVlIG9mICdWQUxVRScgKDMgYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIDA3XG4iCisKK0RlYnVnIHByaW50IG1iZWR0bHNfbXBpICMzCittYmVkdGxzX2RlYnVnX3ByaW50X21waToxNjoiMDAwMDAwMDAwMDAwMDAiOiJNeUZpbGUiOjk5OToiVkFMVUUiOiJNeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnVkFMVUUnICgwIGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICAwMFxuIgorCitEZWJ1ZyBwcmludCBtYmVkdGxzX21waSAjNAorbWJlZHRsc19kZWJ1Z19wcmludF9tcGk6MTY6IjA5NDEzNzlkMDBmZWQxNDkxZmUxNWRmMjg0ZGZkZTRhMTQyZjY4YWE4ZDQxMjAyMzE5NWNlZTY2ODgzZTYyOTBmZmU3MDNmNGVhNTk2M2JmMjEyNzEzY2VlNDZiMTA3YzA5MTgyYjVlZGNkOTU1YWRhYzQxOGJmNDkxOGUyODg5YWY0OGUxMDk5ZDUxMzgzMGNlYzg1YzI2YWMxZTE1OGI1MjYyMGUzM2JhODY5MmY4OTNlZmJiMmY5NThiNDQyNCI6Ik15RmlsZSI6OTk5OiJWQUxVRSI6Ik15RmlsZSgwOTk5KVw6IHZhbHVlIG9mICdWQUxVRScgKDc2NCBiaXRzKSBpc1w6XG5NeUZpbGUoMDk5OSlcOiAgMDkgNDEgMzcgOWQgMDAgZmUgZDEgNDkgMWYgZTEgNWQgZjIgODQgZGYgZGUgNGFcbk15RmlsZSgwOTk5KVw6ICAxNCAyZiA2OCBhYSA4ZCA0MSAyMCAyMyAxOSA1YyBlZSA2NiA4OCAzZSA2MiA5MFxuTXlGaWxlKDA5OTkpXDogIGZmIGU3IDAzIGY0IGVhIDU5IDYzIGJmIDIxIDI3IDEzIGNlIGU0IDZiIDEwIDdjXG5NeUZpbGUoMDk5OSlcOiAgMDkgMTggMmIgNWUgZGMgZDkgNTUgYWQgYWMgNDEgOGIgZjQgOTEgOGUgMjggODlcbk15RmlsZSgwOTk5KVw6ICBhZiA0OCBlMSAwOSA5ZCA1MSAzOCAzMCBjZSBjOCA1YyAyNiBhYyAxZSAxNSA4YlxuTXlGaWxlKDA5OTkpXDogIDUyIDYyIDBlIDMzIGJhIDg2IDkyIGY4IDkzIGVmIGJiIDJmIDk1IDhiIDQ0IDI0XG4iCisKK0RlYnVnIHByaW50IG1iZWR0bHNfbXBpICM1CittYmVkdGxzX2RlYnVnX3ByaW50X21waToxNjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0MTM3OWQwMGZlZDE0OTFmZTE1ZGYyODRkZmRlNGExNDJmNjhhYThkNDEyMDIzMTk1Y2VlNjY4ODNlNjI5MGZmZTcwM2Y0ZWE1OTYzYmYyMTI3MTNjZWU0NmIxMDdjMDkxODJiNWVkY2Q5NTVhZGFjNDE4YmY0OTE4ZTI4ODlhZjQ4ZTEwOTlkNTEzODMwY2VjODVjMjZhYzFlMTU4YjUyNjIwZTMzYmE4NjkyZjg5M2VmYmIyZjk1OGI0NDI0IjoiTXlGaWxlIjo5OTk6IlZBTFVFIjoiTXlGaWxlKDA5OTkpXDogdmFsdWUgb2YgJ1ZBTFVFJyAoNzY0IGJpdHMpIGlzXDpcbk15RmlsZSgwOTk5KVw6ICAwOSA0MSAzNyA5ZCAwMCBmZSBkMSA0OSAxZiBlMSA1ZCBmMiA4NCBkZiBkZSA0YVxuTXlGaWxlKDA5OTkpXDogIDE0IDJmIDY4IGFhIDhkIDQxIDIwIDIzIDE5IDVjIGVlIDY2IDg4IDNlIDYyIDkwXG5NeUZpbGUoMDk5OSlcOiAgZmYgZTcgMDMgZjQgZWEgNTkgNjMgYmYgMjEgMjcgMTMgY2UgZTQgNmIgMTAgN2Ncbk15RmlsZSgwOTk5KVw6ICAwOSAxOCAyYiA1ZSBkYyBkOSA1NSBhZCBhYyA0MSA4YiBmNCA5MSA4ZSAyOCA4OVxuTXlGaWxlKDA5OTkpXDogIGFmIDQ4IGUxIDA5IDlkIDUxIDM4IDMwIGNlIGM4IDVjIDI2IGFjIDFlIDE1IDhiXG5NeUZpbGUoMDk5OSlcOiAgNTIgNjIgMGUgMzMgYmEgODYgOTIgZjggOTMgZWYgYmIgMmYgOTUgOGIgNDQgMjRcbiIKKworRGVidWcgcHJpbnQgbWJlZHRsc19tcGkgIzYKK21iZWR0bHNfZGVidWdfcHJpbnRfbXBpOjE2OiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxMzc5ZDAwZmVkMTQ5MWZlMTVkZjI4NGRmZGU0YTE0MmY2OGFhOGQ0MTIwMjMxOTVjZWU2Njg4M2U2MjkwZmZlNzAzZjRlYTU5NjNiZjIxMjcxM2NlZTQ2YjEwN2MwOTE4MmI1ZWRjZDk1NWFkYWM0MThiZjQ5MThlMjg4OWFmNDhlMTA5OWQ1MTM4MzBjZWM4NWMyNmFjMWUxNThiNTI2MjBlMzNiYTg2OTJmODkzZWZiYjJmOTU4YjQ0MjQiOiJNeUZpbGUiOjk5OToiVkFMVUUiOiJNeUZpbGUoMDk5OSlcOiB2YWx1ZSBvZiAnVkFMVUUnICg3NTkgYml0cykgaXNcOlxuTXlGaWxlKDA5OTkpXDogIDQxIDM3IDlkIDAwIGZlIGQxIDQ5IDFmIGUxIDVkIGYyIDg0IGRmIGRlIDRhIDE0XG5NeUZpbGUoMDk5OSlcOiAgMmYgNjggYWEgOGQgNDEgMjAgMjMgMTkgNWMgZWUgNjYgODggM2UgNjIgOTAgZmZcbk15RmlsZSgwOTk5KVw6ICBlNyAwMyBmNCBlYSA1OSA2MyBiZiAyMSAyNyAxMyBjZSBlNCA2YiAxMCA3YyAwOVxuTXlGaWxlKDA5OTkpXDogIDE4IDJiIDVlIGRjIGQ5IDU1IGFkIGFjIDQxIDhiIGY0IDkxIDhlIDI4IDg5IGFmXG5NeUZpbGUoMDk5OSlcOiAgNDggZTEgMDkgOWQgNTEgMzggMzAgY2UgYzggNWMgMjYgYWMgMWUgMTUgOGIgNTJcbk15RmlsZSgwOTk5KVw6ICA2MiAwZSAzMyBiYSA4NiA5MiBmOCA5MyBlZiBiYiAyZiA5NSA4YiA0NCAyNFxuIgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RlYnVnLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RlYnVnLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Zjk4YjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVidWcuZnVuY3Rpb24KQEAgLTAsMCArMSwxOTggQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvZGVidWcuaCIKKworc3RydWN0IGJ1ZmZlcl9kYXRhCit7CisgICAgY2hhciBidWZbMjAwMF07CisgICAgY2hhciAqcHRyOworfTsKKwordm9pZCBzdHJpbmdfZGVidWcodm9pZCAqZGF0YSwgaW50IGxldmVsLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc3RyKQoreworICAgIHN0cnVjdCBidWZmZXJfZGF0YSAqYnVmZmVyID0gKHN0cnVjdCBidWZmZXJfZGF0YSAqKSBkYXRhOworICAgIGNoYXIgKnAgPSBidWZmZXItPnB0cjsKKyAgICAoKHZvaWQpIGxldmVsKTsKKworICAgIG1lbWNweSggcCwgZmlsZSwgc3RybGVuKCBmaWxlICkgKTsKKyAgICBwICs9IHN0cmxlbiggZmlsZSApOworCisgICAgKnArKyA9ICcoJzsKKyAgICAqcCsrID0gJzAnICsgKCBsaW5lIC8gMTAwMCApICUgMTA7CisgICAgKnArKyA9ICcwJyArICggbGluZSAvIDEwMCAgKSAlIDEwOworICAgICpwKysgPSAnMCcgKyAoIGxpbmUgLyAxMCAgICkgJSAxMDsKKyAgICAqcCsrID0gJzAnICsgKCBsaW5lIC8gMSAgICApICUgMTA7CisgICAgKnArKyA9ICcpJzsKKyAgICAqcCsrID0gJzonOworICAgICpwKysgPSAnICc7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEhSRUFESU5HX0MpCisgICAgLyogU2tpcCAidGhyZWFkIElEIiAodXAgdG8gdGhlIGZpcnN0IHNwYWNlKSBhcyBpdCBpcyBub3QgcHJlZGljdGFibGUgKi8KKyAgICB3aGlsZSggKnN0cisrICE9ICcgJyApOworI2VuZGlmCisKKyAgICBtZW1jcHkoIHAsIHN0ciwgc3RybGVuKCBzdHIgKSApOworICAgIHAgKz0gc3RybGVuKCBzdHIgKTsKKworICAgIC8qIERldGVjdCBpZiBkZWJ1ZyBtZXNzYWdlcyBvdXRwdXQgcGFydGlhbCBsaW5lcyBhbmQgbWFyayB0aGVtICovCisgICAgaWYoIHBbLTFdICE9ICdcbicgKQorICAgICAgICAqcCsrID0gJyonOworCisgICAgYnVmZmVyLT5wdHIgPSBwOworfQorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19ERUJVR19DOk1CRURUTFNfU1NMX1RMU19DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBkZWJ1Z19wcmludF9tc2dfdGhyZXNob2xkKCBpbnQgdGhyZXNob2xkLCBpbnQgbGV2ZWwsIGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBzdHJ1Y3QgYnVmZmVyX2RhdGEgYnVmZmVyOworCisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1lbXNldCggYnVmZmVyLmJ1ZiwgMCwgMjAwMCApOworICAgIGJ1ZmZlci5wdHIgPSBidWZmZXIuYnVmOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApID09IDAgKTsKKworICAgIG1iZWR0bHNfZGVidWdfc2V0X3RocmVzaG9sZCggdGhyZXNob2xkICk7CisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBzdHJpbmdfZGVidWcsICZidWZmZXIpOworCisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9tc2coICZzc2wsIGxldmVsLCBmaWxlLCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGV4dCBtZXNzYWdlLCAyID09ICVkIiwgMiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmZmVyLmJ1ZiwgcmVzdWx0X3N0ciApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfZGVidWdfcHJpbnRfcmV0KCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY2hhciAqdGV4dCwgaW50IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIG1iZWR0bHNfc3NsX2NvbnRleHQgc3NsOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZyBjb25mOworICAgIHN0cnVjdCBidWZmZXJfZGF0YSBidWZmZXI7CisKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWVtc2V0KCBidWZmZXIuYnVmLCAwLCAyMDAwICk7CisgICAgYnVmZmVyLnB0ciA9IGJ1ZmZlci5idWY7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgPT0gMCApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBzdHJpbmdfZGVidWcsICZidWZmZXIpOworCisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9yZXQoICZzc2wsIDAsIGZpbGUsIGxpbmUsIHRleHQsIHZhbHVlKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZmZlci5idWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X2J1ZiggY2hhciAqZmlsZSwgaW50IGxpbmUsIGNoYXIgKnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YV9zdHJpbmcsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxMDAwMF07CisgICAgbWJlZHRsc19zc2xfY29udGV4dCBzc2w7CisgICAgbWJlZHRsc19zc2xfY29uZmlnIGNvbmY7CisgICAgc3RydWN0IGJ1ZmZlcl9kYXRhIGJ1ZmZlcjsKKyAgICBzaXplX3QgZGF0YV9sZW47CisKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisgICAgbWVtc2V0KCAmZGF0YSwgMCwgc2l6ZW9mKCBkYXRhICkgKTsKKyAgICBtZW1zZXQoIGJ1ZmZlci5idWYsIDAsIDIwMDAgKTsKKyAgICBidWZmZXIucHRyID0gYnVmZmVyLmJ1ZjsKKworICAgIGRhdGFfbGVuID0gdW5oZXhpZnkoIGRhdGEsIGRhdGFfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgPT0gMCApOworCisgICAgbWJlZHRsc19zc2xfY29uZl9kYmcoICZjb25mLCBzdHJpbmdfZGVidWcsICZidWZmZXIpOworCisgICAgbWJlZHRsc19kZWJ1Z19wcmludF9idWYoICZzc2wsIDAsIGZpbGUsIGxpbmUsIHRleHQsIGRhdGEsIGRhdGFfbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWZmZXIuYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X2NydCggY2hhciAqY3J0X2ZpbGUsIGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByZWZpeCwgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgbWJlZHRsc194NTA5X2NydCAgIGNydDsKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBzdHJ1Y3QgYnVmZmVyX2RhdGEgYnVmZmVyOworCisgICAgbWJlZHRsc19zc2xfaW5pdCggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCAmY29uZiApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworICAgIG1lbXNldCggYnVmZmVyLmJ1ZiwgMCwgMjAwMCApOworICAgIGJ1ZmZlci5wdHIgPSBidWZmZXIuYnVmOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3NldHVwKCAmc3NsLCAmY29uZiApID09IDAgKTsKKworICAgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCAmY29uZiwgc3RyaW5nX2RlYnVnLCAmYnVmZmVyKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIGNydF9maWxlICkgPT0gMCApOworICAgIG1iZWR0bHNfZGVidWdfcHJpbnRfY3J0KCAmc3NsLCAwLCBmaWxlLCBsaW5lLCBwcmVmaXgsICZjcnQpOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmZmVyLmJ1ZiwgcmVzdWx0X3N0ciApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICBtYmVkdGxzX3NzbF9mcmVlKCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoICZjb25mICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19CSUdOVU1fQyAqLwordm9pZCBtYmVkdGxzX2RlYnVnX3ByaW50X21waSggaW50IHJhZGl4LCBjaGFyICp2YWx1ZSwgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHJlZml4LCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBzdHJ1Y3QgYnVmZmVyX2RhdGEgYnVmZmVyOworICAgIG1iZWR0bHNfbXBpIHZhbDsKKworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfaW5pdCggJmNvbmYgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmdmFsICk7CisgICAgbWVtc2V0KCBidWZmZXIuYnVmLCAwLCAyMDAwICk7CisgICAgYnVmZmVyLnB0ciA9IGJ1ZmZlci5idWY7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfc2V0dXAoICZzc2wsICZjb25mICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmdmFsLCByYWRpeCwgdmFsdWUgKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX3NzbF9jb25mX2RiZyggJmNvbmYsIHN0cmluZ19kZWJ1ZywgJmJ1ZmZlcik7CisKKyAgICBtYmVkdGxzX2RlYnVnX3ByaW50X21waSggJnNzbCwgMCwgZmlsZSwgbGluZSwgcHJlZml4LCAmdmFsKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZmZlci5idWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnZhbCApOworICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF9jb25maWdfZnJlZSggJmNvbmYgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlYjY5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZXMuZGF0YQpAQCAtMCwwICsxLDI1MSBAQAorREVTIGNoZWNrIHdlYWsga2V5ICMxCitkZXNfY2hlY2tfd2VhazoiMDEwMTAxMDEwMTAxMDEwMSI6MQorCitERVMgY2hlY2sgd2VhayBrZXkgIzIKK2Rlc19jaGVja193ZWFrOiJGRUUwRkVFMEZFRjFGRUYxIjoxCisKK0RFUyBjaGVjayB3ZWFrIGtleSAjMworZGVzX2NoZWNrX3dlYWs6IjAxMDEwMTAxMDEwMTAxMDAiOjAKKworREVTIGNoZWNrIHdlYWsga2V5ICM0CitkZXNfY2hlY2tfd2VhazoiRUVFMEZFRTBGRUYxRkVGMSI6MAorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxCitkZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwIjoiOENBNjRERTlDMUIxMjNBNyIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMgorZGVzX2VuY3J5cHRfZWNiOiJGRkZGRkZGRkZGRkZGRkZGIjoiRkZGRkZGRkZGRkZGRkZGRiI6IjczNTlCMjE2M0U0RURDNTgiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMKK2Rlc19lbmNyeXB0X2VjYjoiMzAwMDAwMDAwMDAwMDAwMCI6IjEwMDAwMDAwMDAwMDAwMDEiOiI5NThFNkU2MjdBMDU1NTdCIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM0CitkZXNfZW5jcnlwdF9lY2I6IjExMTExMTExMTExMTExMTEiOiIxMTExMTExMTExMTExMTExIjoiRjQwMzc5QUI5RTBFQzUzMyIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjNQorZGVzX2VuY3J5cHRfZWNiOiIwMTIzNDU2Nzg5QUJDREVGIjoiMTExMTExMTExMTExMTExMSI6IjE3NjY4REZDNzI5MjUzMkQiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzYKK2Rlc19lbmNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IjAxMjM0NTY3ODlBQkNERUYiOiI4QTVBRTFGODFBQjhGMkREIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM3CitkZXNfZW5jcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwIjoiOENBNjRERTlDMUIxMjNBNyIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjOAorZGVzX2VuY3J5cHRfZWNiOiJGRURDQkE5ODc2NTQzMjEwIjoiMDEyMzQ1Njc4OUFCQ0RFRiI6IkVEMzlEOTUwRkE3NEJDQzQiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzkKK2Rlc19lbmNyeXB0X2VjYjoiN0NBMTEwNDU0QTFBNkU1NyI6IjAxQTFENkQwMzk3NzY3NDIiOiI2OTBGNUIwRDlBMjY5MzlCIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxMAorZGVzX2VuY3J5cHRfZWNiOiIwMTMxRDk2MTlEQzEzNzZFIjoiNUNENTRDQTgzREVGNTdEQSI6IjdBMzg5RDEwMzU0QkQyNzEiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzExCitkZXNfZW5jcnlwdF9lY2I6IjA3QTExMzNFNEEwQjI2ODYiOiIwMjQ4RDQzODA2RjY3MTcyIjoiODY4RUJCNTFDQUI0NTk5QSIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTIKK2Rlc19lbmNyeXB0X2VjYjoiMzg0OTY3NEMyNjAyMzE5RSI6IjUxNDU0QjU4MkRERjQ0MEEiOiI3MTc4ODc2RTAxRjE5QjJBIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxMworZGVzX2VuY3J5cHRfZWNiOiIwNEI5MTVCQTQzRkVCNUI2IjoiNDJGRDQ0MzA1OTU3N0ZBMiI6IkFGMzdGQjQyMUY4QzQwOTUiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE0CitkZXNfZW5jcnlwdF9lY2I6IjAxMTNCOTcwRkQzNEYyQ0UiOiIwNTlCNUUwODUxQ0YxNDNBIjoiODZBNTYwRjEwRUM2RDg1QiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTUKK2Rlc19lbmNyeXB0X2VjYjoiMDE3MEYxNzU0NjhGQjVFNiI6IjA3NTZEOEUwNzc0NzYxRDIiOiIwQ0QzREEwMjAwMjFEQzA5IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxNgorZGVzX2VuY3J5cHRfZWNiOiI0MzI5N0ZBRDM4RTM3M0ZFIjoiNzYyNTE0QjgyOUJGNDg2QSI6IkVBNjc2QjJDQjdEQjJCN0EiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE3CitkZXNfZW5jcnlwdF9lY2I6IjA3QTcxMzcwNDVEQTJBMTYiOiIzQkREMTE5MDQ5MzcyODAyIjoiREZENjRBODE1Q0FGMUEwRiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTgKK2Rlc19lbmNyeXB0X2VjYjoiMDQ2ODkxMDRDMkZEM0IyRiI6IjI2OTU1RjY4MzVBRjYwOUEiOiI1QzUxM0M5QzQ4ODZDMDg4IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxOQorZGVzX2VuY3J5cHRfZWNiOiIzN0QwNkJCNTE2Q0I3NTQ2IjoiMTY0RDVFNDA0RjI3NTIzMiI6IjBBMkFFRUFFM0ZGNEFCNzciCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIwCitkZXNfZW5jcnlwdF9lY2I6IjFGMDgyNjBEMUFDMjQ2NUUiOiI2QjA1NkUxODc1OUY1Q0NBIjoiRUYxQkYwM0U1REZBNTc1QSIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjEKK2Rlc19lbmNyeXB0X2VjYjoiNTg0MDIzNjQxQUJBNjE3NiI6IjAwNEJENkVGMDkxNzYwNjIiOiI4OEJGMERCNkQ3MERFRTU2IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyMgorZGVzX2VuY3J5cHRfZWNiOiIwMjU4MTYxNjQ2MjlCMDA3IjoiNDgwRDM5MDA2RUU3NjJGMiI6IkExRjk5MTU1NDEwMjBCNTYiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIzCitkZXNfZW5jcnlwdF9lY2I6IjQ5NzkzRUJDNzlCMzI1OEYiOiI0Mzc1NDBDODY5OEYzQ0ZBIjoiNkZCRjFDQUZDRkZEMDU1NiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjQKK2Rlc19lbmNyeXB0X2VjYjoiNEZCMDVFMTUxNUFCNzNBNyI6IjA3MkQ0M0EwNzcwNzUyOTIiOiIyRjIyRTQ5QkFCN0NBMUFDIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyNQorZGVzX2VuY3J5cHRfZWNiOiI0OUU5NUQ2RDRDQTIyOUJGIjoiMDJGRTU1Nzc4MTE3RjEyQSI6IjVBNkI2MTJDQzI2Q0NFNEEiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI2CitkZXNfZW5jcnlwdF9lY2I6IjAxODMxMERDNDA5QjI2RDYiOiIxRDlENUM1MDE4RjcyOEMyIjoiNUY0QzAzOEVEMTJCMkU0MSIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjcKK2Rlc19lbmNyeXB0X2VjYjoiMUM1ODdGMUMxMzkyNEZFRiI6IjMwNTUzMjI4NkQ2RjI5NUEiOiI2M0ZBQzBEMDM0RDlGNzkzIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyOAorZGVzX2VuY3J5cHRfZWNiOiIwMTAxMDEwMTAxMDEwMTAxIjoiMDEyMzQ1Njc4OUFCQ0RFRiI6IjYxN0IzQTBDRThGMDcxMDAiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI5CitkZXNfZW5jcnlwdF9lY2I6IjFGMUYxRjFGMEUwRTBFMEUiOiIwMTIzNDU2Nzg5QUJDREVGIjoiREI5NTg2MDVGOEM4QzYwNiIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzAKK2Rlc19lbmNyeXB0X2VjYjoiRTBGRUUwRkVGMUZFRjFGRSI6IjAxMjM0NTY3ODlBQkNERUYiOiJFREJGRDFDNjZDMjlDQ0M3IgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzMQorZGVzX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwIjoiRkZGRkZGRkZGRkZGRkZGRiI6IjM1NTU1MEIyMTUwRTI0NTEiCisKK0RFUyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMyCitkZXNfZW5jcnlwdF9lY2I6IkZGRkZGRkZGRkZGRkZGRkYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiQ0FBQUFGNERFQUYxREJBRSIKKworREVTIEVuY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzMKK2Rlc19lbmNyeXB0X2VjYjoiMDEyMzQ1Njc4OUFCQ0RFRiI6IjAwMDAwMDAwMDAwMDAwMDAiOiJENUQ0NEZGNzIwNjgzRDBEIgorCitERVMgRW5jcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzNAorZGVzX2VuY3J5cHRfZWNiOiJGRURDQkE5ODc2NTQzMjEwIjoiRkZGRkZGRkZGRkZGRkZGRiI6IjJBMkJCMDA4REY5N0MyRjIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2Rlc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjhDQTY0REU5QzFCMTIzQTciOiIwMDAwMDAwMDAwMDAwMDAwIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyCitkZXNfZGVjcnlwdF9lY2I6IkZGRkZGRkZGRkZGRkZGRkYiOiI3MzU5QjIxNjNFNEVEQzU4IjoiRkZGRkZGRkZGRkZGRkZGRiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMworZGVzX2RlY3J5cHRfZWNiOiIzMDAwMDAwMDAwMDAwMDAwIjoiOTU4RTZFNjI3QTA1NTU3QiI6IjEwMDAwMDAwMDAwMDAwMDEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzQKK2Rlc19kZWNyeXB0X2VjYjoiMTExMTExMTExMTExMTExMSI6IkY0MDM3OUFCOUUwRUM1MzMiOiIxMTExMTExMTExMTExMTExIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM1CitkZXNfZGVjcnlwdF9lY2I6IjAxMjM0NTY3ODlBQkNERUYiOiIxNzY2OERGQzcyOTI1MzJEIjoiMTExMTExMTExMTExMTExMSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjNgorZGVzX2RlY3J5cHRfZWNiOiIxMTExMTExMTExMTExMTExIjoiOEE1QUUxRjgxQUI4RjJERCI6IjAxMjM0NTY3ODlBQkNERUYiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzcKK2Rlc19kZWNyeXB0X2VjYjoiMDAwMDAwMDAwMDAwMDAwMCI6IjhDQTY0REU5QzFCMTIzQTciOiIwMDAwMDAwMDAwMDAwMDAwIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICM4CitkZXNfZGVjcnlwdF9lY2I6IkZFRENCQTk4NzY1NDMyMTAiOiJFRDM5RDk1MEZBNzRCQ0M0IjoiMDEyMzQ1Njc4OUFCQ0RFRiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjOQorZGVzX2RlY3J5cHRfZWNiOiI3Q0ExMTA0NTRBMUE2RTU3IjoiNjkwRjVCMEQ5QTI2OTM5QiI6IjAxQTFENkQwMzk3NzY3NDIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEwCitkZXNfZGVjcnlwdF9lY2I6IjAxMzFEOTYxOURDMTM3NkUiOiI3QTM4OUQxMDM1NEJEMjcxIjoiNUNENTRDQTgzREVGNTdEQSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTEKK2Rlc19kZWNyeXB0X2VjYjoiMDdBMTEzM0U0QTBCMjY4NiI6Ijg2OEVCQjUxQ0FCNDU5OUEiOiIwMjQ4RDQzODA2RjY3MTcyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxMgorZGVzX2RlY3J5cHRfZWNiOiIzODQ5Njc0QzI2MDIzMTlFIjoiNzE3ODg3NkUwMUYxOUIyQSI6IjUxNDU0QjU4MkRERjQ0MEEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEzCitkZXNfZGVjcnlwdF9lY2I6IjA0QjkxNUJBNDNGRUI1QjYiOiJBRjM3RkI0MjFGOEM0MDk1IjoiNDJGRDQ0MzA1OTU3N0ZBMiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTQKK2Rlc19kZWNyeXB0X2VjYjoiMDExM0I5NzBGRDM0RjJDRSI6Ijg2QTU2MEYxMEVDNkQ4NUIiOiIwNTlCNUUwODUxQ0YxNDNBIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxNQorZGVzX2RlY3J5cHRfZWNiOiIwMTcwRjE3NTQ2OEZCNUU2IjoiMENEM0RBMDIwMDIxREMwOSI6IjA3NTZEOEUwNzc0NzYxRDIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE2CitkZXNfZGVjcnlwdF9lY2I6IjQzMjk3RkFEMzhFMzczRkUiOiJFQTY3NkIyQ0I3REIyQjdBIjoiNzYyNTE0QjgyOUJGNDg2QSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMTcKK2Rlc19kZWNyeXB0X2VjYjoiMDdBNzEzNzA0NURBMkExNiI6IkRGRDY0QTgxNUNBRjFBMEYiOiIzQkREMTE5MDQ5MzcyODAyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMxOAorZGVzX2RlY3J5cHRfZWNiOiIwNDY4OTEwNEMyRkQzQjJGIjoiNUM1MTNDOUM0ODg2QzA4OCI6IjI2OTU1RjY4MzVBRjYwOUEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzE5CitkZXNfZGVjcnlwdF9lY2I6IjM3RDA2QkI1MTZDQjc1NDYiOiIwQTJBRUVBRTNGRjRBQjc3IjoiMTY0RDVFNDA0RjI3NTIzMiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjAKK2Rlc19kZWNyeXB0X2VjYjoiMUYwODI2MEQxQUMyNDY1RSI6IkVGMUJGMDNFNURGQTU3NUEiOiI2QjA1NkUxODc1OUY1Q0NBIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyMQorZGVzX2RlY3J5cHRfZWNiOiI1ODQwMjM2NDFBQkE2MTc2IjoiODhCRjBEQjZENzBERUU1NiI6IjAwNEJENkVGMDkxNzYwNjIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIyCitkZXNfZGVjcnlwdF9lY2I6IjAyNTgxNjE2NDYyOUIwMDciOiJBMUY5OTE1NTQxMDIwQjU2IjoiNDgwRDM5MDA2RUU3NjJGMiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjMKK2Rlc19kZWNyeXB0X2VjYjoiNDk3OTNFQkM3OUIzMjU4RiI6IjZGQkYxQ0FGQ0ZGRDA1NTYiOiI0Mzc1NDBDODY5OEYzQ0ZBIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyNAorZGVzX2RlY3J5cHRfZWNiOiI0RkIwNUUxNTE1QUI3M0E3IjoiMkYyMkU0OUJBQjdDQTFBQyI6IjA3MkQ0M0EwNzcwNzUyOTIiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI1CitkZXNfZGVjcnlwdF9lY2I6IjQ5RTk1RDZENENBMjI5QkYiOiI1QTZCNjEyQ0MyNkNDRTRBIjoiMDJGRTU1Nzc4MTE3RjEyQSIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjYKK2Rlc19kZWNyeXB0X2VjYjoiMDE4MzEwREM0MDlCMjZENiI6IjVGNEMwMzhFRDEyQjJFNDEiOiIxRDlENUM1MDE4RjcyOEMyIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMyNworZGVzX2RlY3J5cHRfZWNiOiIxQzU4N0YxQzEzOTI0RkVGIjoiNjNGQUMwRDAzNEQ5Rjc5MyI6IjMwNTUzMjI4NkQ2RjI5NUEiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzI4CitkZXNfZGVjcnlwdF9lY2I6IjAxMDEwMTAxMDEwMTAxMDEiOiI2MTdCM0EwQ0U4RjA3MTAwIjoiMDEyMzQ1Njc4OUFCQ0RFRiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMjkKK2Rlc19kZWNyeXB0X2VjYjoiMUYxRjFGMUYwRTBFMEUwRSI6IkRCOTU4NjA1RjhDOEM2MDYiOiIwMTIzNDU2Nzg5QUJDREVGIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzMAorZGVzX2RlY3J5cHRfZWNiOiJFMEZFRTBGRUYxRkVGMUZFIjoiRURCRkQxQzY2QzI5Q0NDNyI6IjAxMjM0NTY3ODlBQkNERUYiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzMxCitkZXNfZGVjcnlwdF9lY2I6IjAwMDAwMDAwMDAwMDAwMDAiOiIzNTU1NTBCMjE1MEUyNDUxIjoiRkZGRkZGRkZGRkZGRkZGRiIKKworREVTIERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMzIKK2Rlc19kZWNyeXB0X2VjYjoiRkZGRkZGRkZGRkZGRkZGRiI6IkNBQUFBRjRERUFGMURCQUUiOiIwMDAwMDAwMDAwMDAwMDAwIgorCitERVMgRGVjcnlwdCBPcGVuU1NMIFRlc3QgVmVjdG9yICMzMworZGVzX2RlY3J5cHRfZWNiOiIwMTIzNDU2Nzg5QUJDREVGIjoiRDVENDRGRjcyMDY4M0QwRCI6IjAwMDAwMDAwMDAwMDAwMDAiCisKK0RFUyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzM0CitkZXNfZGVjcnlwdF9lY2I6IkZFRENCQTk4NzY1NDMyMTAiOiIyQTJCQjAwOERGOTdDMkYyIjoiRkZGRkZGRkZGRkZGRkZGRiIKKworREVTLUNCQyBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2Rlc19lbmNyeXB0X2NiYzoiMDEyMzQ1Njc4OWFiY2RlZiI6ImZlZGNiYTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjAiOiJjY2QxNzNmZmFiMjAzOWY0YWNkOGFlZmRkZmQ4YTFlYjQ2OGU5MTE1Nzg4OGJhNjgiOjAKKworREVTLUNCQyBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2Rlc19kZWNyeXB0X2NiYzoiMDEyMzQ1Njc4OWFiY2RlZiI6ImZlZGNiYTk4NzY1NDMyMTAiOiJjY2QxNzNmZmFiMjAzOWY0YWNkOGFlZmRkZmQ4YTFlYjQ2OGU5MTE1Nzg4OGJhNjgiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1MjAiOjAKKworM0RFUy1FQ0IgMktleSBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2RlczNfZW5jcnlwdF9lY2I6MjoiMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiOTI5NUI1OUJCMzg0NzM2RSIKKworM0RFUy1FQ0IgMktleSBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIKK2RlczNfZW5jcnlwdF9lY2I6MjoiRkZGRkZGRkZGRkZGRkZGRjMwMDAwMDAwMDAwMDAwMDAiOiJGRkZGRkZGRkZGRkZGRkZGIjoiMTk5RTlENkRGMzlBQTgxNiIKKworM0RFUy1FQ0IgMktleSBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2RlczNfZGVjcnlwdF9lY2I6MjoiMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkYiOiI5Mjk1QjU5QkIzODQ3MzZFIjoiMDAwMDAwMDAwMDAwMDAwMCIKKworM0RFUy1FQ0IgMktleSBEZWNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzIKK2RlczNfZGVjcnlwdF9lY2I6MjoiRkZGRkZGRkZGRkZGRkZGRjMwMDAwMDAwMDAwMDAwMDAiOiIxOTlFOUQ2REYzOUFBODE2IjoiRkZGRkZGRkZGRkZGRkZGRiIKKworM0RFUy1DQkMgM0tleSBFbmNyeXB0IE9wZW5TU0wgVGVzdCBWZWN0b3IgIzEKK2RlczNfZW5jcnlwdF9jYmM6MzoiMDEyMzQ1Njc4OWFiY2RlZmYxZTBkM2MyYjVhNDk3ODZmZWRjYmE5ODc2NTQzMjEwIjoiZmVkY2JhOTg3NjU0MzIxMCI6IjM3MzYzNTM0MzMzMjMxMjA0RTZGNzcyMDY5NzMyMDc0Njg2NTIwNzQ2OTZENjUyMCI6IjNGRTMwMUM5NjJBQzAxRDAyMjEzNzYzQzFDQkQ0Q0RDNzk5NjU3QzA2NEVDRjVENCI6MAorCiszREVTLUNCQyAzS2V5IERlY3J5cHQgT3BlblNTTCBUZXN0IFZlY3RvciAjMQorZGVzM19kZWNyeXB0X2NiYzozOiIwMTIzNDU2Nzg5YWJjZGVmZjFlMGQzYzJiNWE0OTc4NmZlZGNiYTk4NzY1NDMyMTAiOiJmZWRjYmE5ODc2NTQzMjEwIjoiM0ZFMzAxQzk2MkFDMDFEMDIyMTM3NjNDMUNCRDRDREM3OTk2NTdDMDY0RUNGNUQ0IjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NTIwIjowCisKK0RFUy1DQkMgRW5jcnlwdCAoSW52YWxpZCBpbnB1dCBsZW5ndGgpCitkZXNfZW5jcnlwdF9jYmM6IjAxMjM0NTY3ODlhYmNkZWYiOiJmZWRjYmE5ODc2NTQzMjEwIjoiMzczNjM1MzQzMzMyMzEyMDRFNkY3NzIwNjk3MzIwNzQ2ODY1MjA3NDY5NkQ2NSI6IiI6TUJFRFRMU19FUlJfREVTX0lOVkFMSURfSU5QVVRfTEVOR1RICisKKzNERVMtQ0JDIDNLZXkgRW5jcnlwdCAoSW52YWxpZCBpbnB1dCBsZW5ndGgpCitkZXMzX2VuY3J5cHRfY2JjOjM6IjAxMjM0NTY3ODlhYmNkZWZmMWUwZDNjMmI1YTQ5Nzg2ZmVkY2JhOTg3NjU0MzIxMCI6ImZlZGNiYTk4NzY1NDMyMTAiOiIzNzM2MzUzNDMzMzIzMTIwNEU2Rjc3MjA2OTczMjA3NDY4NjUyMDc0Njk2RDY1IjoiIjpNQkVEVExTX0VSUl9ERVNfSU5WQUxJRF9JTlBVVF9MRU5HVEgKKworUnVuIHRocm91Z2ggcGFyaXR5IGJpdCB0ZXN0cworZGVzX2tleV9wYXJpdHlfcnVuOgorCitERVMgU2VsZnRlc3QKK2Rlc19zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZXMuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzNhNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMzY3IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2Rlcy5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19ERVNfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVzX2NoZWNrX3dlYWsoIGNoYXIgKmtleV9oZXgsIGludCByZXQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5W01CRURUTFNfREVTX0tFWV9TSVpFXTsKKworICAgIG1lbXNldCgga2V5LCAwLCBzaXplb2Yga2V5ICk7CisKKyAgICB1bmhleGlmeSgga2V5LCBrZXlfaGV4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXNfa2V5X2NoZWNrX3dlYWsoIGtleSApID09IHJldCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBkZXNfZW5jcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Rlc19jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19kZXNfaW5pdCggJmN0eCApOworCisgICAgdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCA4ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19kZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBkZXNfZGVjcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2Rlc19jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19kZXNfaW5pdCggJmN0eCApOworCisgICAgdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCA4ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19kZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGRlc19lbmNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgY2JjX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgY3R4OworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19ERVNfRU5DUllQVCwgc3JjX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19kZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIGRlc19kZWNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgY2JjX3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgY3R4OworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZGVjKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19ERVNfREVDUllQVCwgc3JjX2xlbiwgaXZfc3RyLCBzcmNfc3RyLCBvdXRwdXQgKSA9PSBjYmNfcmVzdWx0ICk7CisgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19kZXNfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBkZXMzX2VuY3J5cHRfZWNiKCBpbnQga2V5X2NvdW50LCBjaGFyICpoZXhfa2V5X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9kc3Rfc3RyaW5nICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19kZXMzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgaWYoIGtleV9jb3VudCA9PSAyICkKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDJrZXlfZW5jKCAmY3R4LCBrZXlfc3RyICk7CisgICAgZWxzZSBpZigga2V5X2NvdW50ID09IDMgKQorICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoICZjdHgsIGtleV9zdHIgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXMzX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ciwgb3V0cHV0ICkgPT0gMCApOworICAgIGhleGlmeSggZHN0X3N0ciwgb3V0cHV0LCA4ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19kZXMzX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGVzM19kZWNyeXB0X2VjYiggaW50IGtleV9jb3VudCwgY2hhciAqaGV4X2tleV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2RlczNfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworICAgIG1iZWR0bHNfZGVzM19pbml0KCAmY3R4ICk7CisKKyAgICB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIGlmKCBrZXlfY291bnQgPT0gMiApCisgICAgICAgIG1iZWR0bHNfZGVzM19zZXQya2V5X2RlYyggJmN0eCwga2V5X3N0ciApOworICAgIGVsc2UgaWYoIGtleV9jb3VudCA9PSAzICkKKyAgICAgICAgbWJlZHRsc19kZXMzX3NldDNrZXlfZGVjKCAmY3R4LCBrZXlfc3RyICk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVCggMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgZGVzM19lbmNyeXB0X2NiYyggaW50IGtleV9jb3VudCwgY2hhciAqaGV4X2tleV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9pdl9zdHJpbmcsIGNoYXIgKmhleF9zcmNfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2RlczNfY29udGV4dCBjdHg7CisgICAgaW50IHNyY19sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19kZXMzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBpZigga2V5X2NvdW50ID09IDIgKQorICAgICAgICBtYmVkdGxzX2RlczNfc2V0MmtleV9lbmMoICZjdHgsIGtleV9zdHIgKTsKKyAgICBlbHNlIGlmKCBrZXlfY291bnQgPT0gMyApCisgICAgICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2VuYyggJmN0eCwga2V5X3N0ciApOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoIDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX0RFU19FTkNSWVBULCBzcmNfbGVuLCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IGNiY19yZXN1bHQgKTsKKworICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgZGVzM19kZWNyeXB0X2NiYyggaW50IGtleV9jb3VudCwgY2hhciAqaGV4X2tleV9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9pdl9zdHJpbmcsIGNoYXIgKmhleF9zcmNfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IGNiY19yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX2RlczNfY29udGV4dCBjdHg7CisgICAgaW50IHNyY19sZW47CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEwMCk7CisgICAgbWJlZHRsc19kZXMzX2luaXQoICZjdHggKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBpZigga2V5X2NvdW50ID09IDIgKQorICAgICAgICBtYmVkdGxzX2RlczNfc2V0MmtleV9kZWMoICZjdHgsIGtleV9zdHIgKTsKKyAgICBlbHNlIGlmKCBrZXlfY291bnQgPT0gMyApCisgICAgICAgIG1iZWR0bHNfZGVzM19zZXQza2V5X2RlYyggJmN0eCwga2V5X3N0ciApOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoIDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RlczNfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX0RFU19ERUNSWVBULCBzcmNfbGVuLCBpdl9zdHIsIHNyY19zdHIsIG91dHB1dCApID09IGNiY19yZXN1bHQgKTsKKworICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZGVzM19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGRlc19rZXlfcGFyaXR5X3J1bigpCit7CisgICAgaW50IGksIGosIGNudDsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVtNQkVEVExTX0RFU19LRVlfU0laRV07CisgICAgdW5zaWduZWQgaW50IHBhcml0eTsKKworICAgIG1lbXNldCgga2V5LCAwLCBNQkVEVExTX0RFU19LRVlfU0laRSApOworICAgIGNudCA9IDA7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzCisgICAgLy8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMzI7IGkrKyApCisgICAgeworICAgICAgICBmb3IoIGogPSAwOyBqIDwgODsgaisrICkKKyAgICAgICAgICAgIGtleVtqXSA9IGNudCsrOworCisgICAgICAgIC8vIFNldCB0aGUga2V5IHBhcml0eSBhY2NvcmRpbmcgdG8gdGhlIHRhYmxlCisgICAgICAgIC8vCisgICAgICAgIG1iZWR0bHNfZGVzX2tleV9zZXRfcGFyaXR5KCBrZXkgKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgcGFyaXR5IHdpdGggYSBmdW5jdGlvbgorICAgICAgICAvLworICAgICAgICBmb3IoIGogPSAwOyBqIDwgODsgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyaXR5ID0ga2V5W2pdIF4gKCBrZXlbal0gPj4gNCApOworICAgICAgICAgICAgcGFyaXR5ID0gcGFyaXR5IF4KKyAgICAgICAgICAgICAgICAgICAgKCBwYXJpdHkgPj4gMSApIF4KKyAgICAgICAgICAgICAgICAgICAgKCBwYXJpdHkgPj4gMiApIF4KKyAgICAgICAgICAgICAgICAgICAgKCBwYXJpdHkgPj4gMyApOworICAgICAgICAgICAgcGFyaXR5ICY9IDE7CisKKyAgICAgICAgICAgIGlmKCBwYXJpdHkgIT0gMSApCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIDAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoZSBwYXJpdHkgd2l0aCB0aGUgdGFibGUKKyAgICAgICAgLy8KKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2tleV9jaGVja19rZXlfcGFyaXR5KCBrZXkgKSA9PSAwICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIGRlc19zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGhtLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGhtLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjZGVmZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kaG0uZGF0YQpAQCAtMCwwICsxLDE3IEBACitEaWZmaWUtSGVsbG1hbiBmdWxsIGV4Y2hhbmdlICMxCitkaG1fZG9fZGhtOjEwOiIyMyI6MTA6IjUiCisKK0RpZmZpZS1IZWxsbWFuIGZ1bGwgZXhjaGFuZ2UgIzIKK2RobV9kb19kaG06MTA6IjkzNDUwOTgzMDk0ODUwOTM4NDUwOTgzNDA5NjIzIjoxMDoiOTM0NTA5ODMwNDg1MDkzODQ1MDk4MzQwOTYyMiIKKworRGlmZmllLUhlbGxtYW4gZnVsbCBleGNoYW5nZSAjMworZGhtX2RvX2RobToxMDoiOTM0NTA5ODMwOTQ4NTA5Mzg0NTA5ODM0MDk2MjM5ODIzMTczOTgxNzEyOTg3MTk4NzM5MTg3MzkxODI3Mzk3MTI5Mzg3MTkyODczOTE4NzkzODEyNzEiOjEwOiI5MzQ1MDk4MzA5NDg1MDkzODQ1MDk4MzQwOTYyMjIzOTgxMzI5ODE5ODEyNzkyMTM3MzEyOTczMjk3MTIzOTEyNzkxMjcxIgorCitEaWZmaWUtSGFsbG1hbiBsb2FkIHBhcmFtZXRlcnMgZnJvbSBmaWxlCitkaG1fZmlsZToiZGF0YV9maWxlcy9kaHBhcmFtcy5wZW0iOiI5ZTM1ZjQzMDQ0M2EwOTkwNGYzYTM5YTk3OTc5N2QwNzBkZjUzMzc4ZTc5YzI0MzhiZWY0ZTc2MWYzYzcxNDU1MzMyODU4OWIwNDFjODA5YmUxZDZjNmI1ZjFmYzlmNDdkM2EyNTQ0MzE4ODI1M2E5OTJhNTY4MThiMzdiYTlkZTVhNDBkMzYyZTU2ZWZmMGJlNTQxNzQ3NGMxMjVjMTk5MjcyYzhmZTQxZGVhNzMzZGY2ZjY2MmM5MmFlNzY1NTZlNzU1ZDEwYzY0ZTZhNTA5NjhmNjdmYzZlYTczZDBkY2E4NTY5YmUyYmEyMDRlMjM1ODBkOGJjYTJmNDk3NWIzIjoiMDIiOjEyOAorCitEaWZmaWUtSGFsbG1hbiBsb2FkIHBhcmFtZXRlcnMgZnJvbSBmaWxlCitkaG1fZmlsZToiZGF0YV9maWxlcy9kaC5vcHRsZW4ucGVtIjoiYjMxMjZhZWFmNDcxNTNjN2Q2N2Y0MDMwMzBiMjkyYjViZDVhNmM5ZWFlMWMxMzdhZjM0MDg3ZmNlMmEzNmE1NzhkNzBjNWM1NjBhZDJiZGI5MjRjNGE0ZGJlZTIwYTE2NzFiZTcxMDNjZTg3ZGVmYTc2OTA4OTM2ODAzZGJlY2E2MGMzM2UxMjg5YzFhMDNhYzJjNmM0ZTQ5NDA1ZTU5MDJmYTA1OTZhMWNiYWE4OTVjYzQwMmQ1MjEzZWQ0YTVmMWY1YmE4YjVlMWVkM2RhOTUxYTRjNDc1YWZlYjBjYTY2MGI3MzY4YzM4YzhlODA5ZjM4MmQ5NmFlMTllNjBkYzk4NGU2MWNiNDJiNWRmZDcyMzMyMmFjZjMyN2Y5ZTQxM2NkYTY0MDBjMTVjNWIyZWExZmEzNDQwNWQ4Mzk4MmZiYTQwZTZkODUyZGEzZDkxMDE5YmYyMzUxMTMxNDI1NGRjMjExYTkwODMzZTViMTc5OGVlNTJhNzgxOThjNTU1NjQ0NzI5YWQ5MmYwNjAzNjdjNzRkZWQzNzcwNGFkZmMyNzNhNGEzM2ZlYzgyMWJkMmViZDNiYzA1MTczMGU5N2E0ZGQxNGQyYjc2NjA2MjU5MmY1ZWVjMDlkMTZiYjUwZWZlYmYyY2MwMGRkM2UwZTM0MThlNjBlYzg0ODcwZjciOiI4MDBhYmZlN2RjNjY3YWExN2JjZDdjMDQ2MTRiYzIyMWE2NTQ4MmNjYzA0YjYwNDYwMmIwZTEzMTkwOGE5MzhlYTExYjQ4ZGM1MTVkYWI3YWJjYmIxZTBjN2ZkNjY1MTFlZGMwZDg2NTUxYjc2MzI0OTZlMDNkZjk0MzU3ZTFjNGVhMDdhN2NlMWUzODFhMmZjYWZkZmY1ZjViZjAwZGY4Mjg4MDYwMjBlODc1YzAwOTI2ZTRkMDExZjg4NDc3YTFiMDE5MjdkNzM4MTNjYWQ0ODQ3YzYzOTZiOTI0NDYyMWJlMmIwMGI2M2M2NTkyNTMzMTg0MTM0NDNjZDI0NDIxNWNkN2ZkNGNiZTc5NmU4MmM2Y2Y3MGY4OWNjMGM1MjhmYjhlMzQ0ODA5YjMxODc2ZTdlZjczOWQ1MTYwZDA5NWM5Njg0MTg4YjBjODc1NWM3YTQ2OGQ0N2Y1NmQ2ZGI5ZWEwMTI5MjRlY2IwNTU2ZmI3MTMxMmE4ZDdjOTNiYjI4OThlYTA4ZWU1NGVlYjU5NDU0ODI4NWYwNmE5NzNjYmJlMmEwY2IwMmU5MGYzMjNmZTA0NTUyMWYzNGM2ODM1NGE2ZDNlOTVkYmZmZjFlYjY0NjkyZWRjMGE0NGYzZDNlNDA4ZDBlNDc5YTU0MWU3NzlhNjA1NDI1OWUyZDg1NCI6MjU2CisKK0RpZmZpZS1IZWxsbWFuIHNlbGZ0ZXN0CitkaG1fc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGhtLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RobS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWI4ZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2RobS5mdW5jdGlvbgpAQCAtMCwwICsxLDEyOCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfREhNX0M6TUJFRFRMU19CSUdOVU1fQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZGhtX2RvX2RobSggaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsCisgICAgICAgICAgICAgICAgIGludCByYWRpeF9HLCBjaGFyICppbnB1dF9HICkKK3sKKyAgICBtYmVkdGxzX2RobV9jb250ZXh0IGN0eF9zcnY7CisgICAgbWJlZHRsc19kaG1fY29udGV4dCBjdHhfY2xpOworICAgIHVuc2lnbmVkIGNoYXIgc2tlWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBza2U7CisgICAgdW5zaWduZWQgY2hhciBwdWJfY2xpWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc2VjX3NydlsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNlY19jbGlbMTAwMF07CisgICAgc2l6ZV90IHNrZV9sZW4gPSAwOworICAgIHNpemVfdCBwdWJfY2xpX2xlbiA9IDA7CisgICAgc2l6ZV90IHNlY19zcnZfbGVuOworICAgIHNpemVfdCBzZWNfY2xpX2xlbjsKKyAgICBpbnQgeF9zaXplLCBpOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfZGhtX2luaXQoICZjdHhfc3J2ICk7CisgICAgbWJlZHRsc19kaG1faW5pdCggJmN0eF9jbGkgKTsKKyAgICBtZW1zZXQoIHNrZSwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggcHViX2NsaSwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggc2VjX3NydiwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggc2VjX2NsaSwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICAvKgorICAgICAqIFNldCBwYXJhbXMKKyAgICAgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHhfc3J2LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4X3Nydi5HLCByYWRpeF9HLCBpbnB1dF9HICkgPT0gMCApOworICAgIHhfc2l6ZSA9IG1iZWR0bHNfbXBpX3NpemUoICZjdHhfc3J2LlAgKTsKKyAgICBwdWJfY2xpX2xlbiA9IHhfc2l6ZTsKKworICAgIC8qCisgICAgICogRmlyc3Qga2V5IGV4Y2hhbmdlCisgICAgICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX21ha2VfcGFyYW1zKCAmY3R4X3NydiwgeF9zaXplLCBza2UsICZza2VfbGVuLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgc2tlW3NrZV9sZW4rK10gPSAwOworICAgIHNrZVtza2VfbGVuKytdID0gMDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fcmVhZF9wYXJhbXMoICZjdHhfY2xpLCAmcCwgc2tlICsgc2tlX2xlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9tYWtlX3B1YmxpYyggJmN0eF9jbGksIHhfc2l6ZSwgcHViX2NsaSwgcHViX2NsaV9sZW4sICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fcmVhZF9wdWJsaWMoICZjdHhfc3J2LCBwdWJfY2xpLCBwdWJfY2xpX2xlbiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmN0eF9zcnYsIHNlY19zcnYsIHNpemVvZiggc2VjX3NydiApLCAmc2VjX3Nydl9sZW4sICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZjdHhfY2xpLCBzZWNfY2xpLCBzaXplb2YoIHNlY19jbGkgKSwgJnNlY19jbGlfbGVuLCBOVUxMLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIHNlY19zcnZfbGVuID09IHNlY19jbGlfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIHNlY19zcnZfbGVuICE9IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBzZWNfc3J2LCBzZWNfY2xpLCBzZWNfc3J2X2xlbiApID09IDAgKTsKKworICAgIC8qIFJlLWRvIGNhbGNfc2VjcmV0IG9uIHNlcnZlciBhIGZldyB0aW1lcyB0byB0ZXN0IHVwZGF0ZSBvZiBibGluZGluZyB2YWx1ZXMgKi8KKyAgICBmb3IoIGkgPSAwOyBpIDwgMzsgaSsrICkKKyAgICB7CisgICAgICAgIHNlY19zcnZfbGVuID0gMTAwMDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmY3R4X3Nydiwgc2VjX3Nydiwgc2l6ZW9mKCBzZWNfc3J2ICksICZzZWNfc3J2X2xlbiwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzZWNfc3J2X2xlbiA9PSBzZWNfY2xpX2xlbiApOworICAgICAgICBURVNUX0FTU0VSVCggc2VjX3Nydl9sZW4gIT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBzZWNfc3J2LCBzZWNfY2xpLCBzZWNfc3J2X2xlbiApID09IDAgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNlY29uZCBrZXkgZXhjaGFuZ2UgdG8gdGVzdCBjaGFuZ2Ugb2YgYmxpbmRpbmcgdmFsdWVzIG9uIHNlcnZlcgorICAgICAqLworICAgIHAgPSBza2U7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fbWFrZV9wYXJhbXMoICZjdHhfc3J2LCB4X3NpemUsIHNrZSwgJnNrZV9sZW4sICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBza2Vbc2tlX2xlbisrXSA9IDA7CisgICAgc2tlW3NrZV9sZW4rK10gPSAwOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9yZWFkX3BhcmFtcyggJmN0eF9jbGksICZwLCBza2UgKyBza2VfbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmY3R4X2NsaSwgeF9zaXplLCBwdWJfY2xpLCBwdWJfY2xpX2xlbiwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9yZWFkX3B1YmxpYyggJmN0eF9zcnYsIHB1Yl9jbGksIHB1Yl9jbGlfbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmY3R4X3Nydiwgc2VjX3Nydiwgc2l6ZW9mKCBzZWNfc3J2ICksICZzZWNfc3J2X2xlbiwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9jYWxjX3NlY3JldCggJmN0eF9jbGksIHNlY19jbGksIHNpemVvZiggc2VjX2NsaSApLCAmc2VjX2NsaV9sZW4sIE5VTEwsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggc2VjX3Nydl9sZW4gPT0gc2VjX2NsaV9sZW4gKTsKKyAgICBURVNUX0FTU0VSVCggc2VjX3Nydl9sZW4gIT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIHNlY19zcnYsIHNlY19jbGksIHNlY19zcnZfbGVuICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZjdHhfc3J2ICk7CisgICAgbWJlZHRsc19kaG1fZnJlZSggJmN0eF9jbGkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPICovCit2b2lkIGRobV9maWxlKCBjaGFyICpmaWxlbmFtZSwgY2hhciAqcCwgY2hhciAqZywgaW50IGxlbiApCit7CisgICAgbWJlZHRsc19kaG1fY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19tcGkgUCwgRzsKKworICAgIG1iZWR0bHNfZGhtX2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUCwgMTYsIHAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmRywgMTYsIGcgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kaG1fcGFyc2VfZGhtZmlsZSggJmN0eCwgZmlsZW5hbWUgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggY3R4LmxlbiA9PSAoc2l6ZV90KSBsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC5QLCAmUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJmN0eC5HLCAmRyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfZGhtX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBkaG1fc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2RobV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjZGguZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RoLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxMTlkZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RoLmRhdGEKQEAgLTAsMCArMSwzOSBAQAorRUNESCBwcmltaXRpdmUgcmFuZG9tICMxCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY2RoX3ByaW1pdGl2ZV9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKK0VDREggcHJpbWl0aXZlIHJhbmRvbSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMQorCitFQ0RIIHByaW1pdGl2ZSByYW5kb20gIzMKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK2VjZGhfcHJpbWl0aXZlX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEKKworRUNESCBwcmltaXRpdmUgcmFuZG9tICM0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECitlY2RoX3ByaW1pdGl2ZV9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxCisKK0VDREggcHJpbWl0aXZlIHJhbmRvbSAjNQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMQorCitFQ0RIIHByaW1pdGl2ZSByZmMgNTkwMyBwMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitlY2RoX3ByaW1pdGl2ZV90ZXN0dmVjOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiQzg4RjAxRjUxMEQ5QUMzRjcwQTI5MkRBQTIzMTZERTU0NEU5QUFCOEFGRTg0MDQ5QzYyQTlDNTc4NjJEMTQzMyI6IkRBRDBCNjUzOTQyMjFDRjlCMDUxRTFGRUNBNTc4N0QwOThERkU2MzdGQzkwQjlFRjk0NUQwQzM3NzI1ODExODAiOiI1MjcxQTA0NjFDREI4MjUyRDYxRjFDNDU2RkEzRTU5QUIxRjQ1QjMzQUNDRjVGNTgzODlFMDU3N0I4OTkwQkIzIjoiQzZFRjlDNUQ3OEFFMDEyQTAxMTE2NEFDQjM5N0NFMjA4ODY4NUQ4RjA2QkY5QkUwQjI4M0FCNDY0NzZCRUU1MyI6IkQxMkRGQjUyODlDOEQ0RjgxMjA4QjcwMjcwMzk4QzM0MjI5Njk3MEEwQkNDQjc0QzczNkZDNzU1NDQ5NEJGNjMiOiI1NkZCRjNDQTM2NkNDMjNFODE1Nzg1NEMxM0M1OEQ2QUFDMjNGMDQ2QURBMzBGODM1M0U3NEYzMzAzOTg3MkFCIjoiRDY4NDBGNkI0MkY2RURBRkQxMzExNkUwRTEyNTY1MjAyRkVGOEU5RUNFN0RDRTAzODEyNDY0RDA0Qjk0NDJERSIKKworRUNESCBwcmltaXRpdmUgcmZjIDU5MDMgcDM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfdGVzdHZlYzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjA5OUYzQzcwMzRENEEyQzY5OTg4NEQ3M0EzNzVBNjdGNzYyNEVGN0M2QjNDMEYxNjA2NDdCNjc0MTREQ0U2NTVFMzVCNTM4MDQxRTY0OUVFM0ZBRUY4OTY3ODNBQjE5NCI6IjY2Nzg0MkQ3RDE4MEFDMkNERTZGNzRGMzc1NTFGNTU3NTVDNzY0NUMyMEVGNzNFMzE2MzRGRTcyQjRDNTVFRTZERTNBQzgwOEFDQjRCREI0Qzg4NzMyQUVFOTVGNDFBQSI6Ijk0ODJFRDFGQzBFRUI5Q0FGQzQ5ODQ2MjVDQ0ZDMjNGNjUwMzIxNDlFMEUxNDRBREEwMjQxODE1MzVBMEYzOEVFQjlGQ0ZGM0MyQzk0N0RBRTY5QjRDNjM0NTczQTgxQyI6IjQxQ0IwNzc5QjRCREI4NUQ0Nzg0NjcyNUZCRUMzQzk0MzBGQUI0NkNDOERDNTA2MDg1NUNDOUJEQTBBQTI5NDJFMDMwODMxMjkxNkI4RUQyOTYwRTRCRDU1QTc0NDhGQyI6IkU1NThEQkVGNTNFRUNERTNEM0ZDQ0ZDMUFFQTA4QTg5QTk4NzQ3NUQxMkZEOTUwRDgzQ0ZBNDE3MzJCQzUwOUQwRDFBQzQzQTAzMzZERUY5NkZEQTQxRDA3NzRBMzU3MSI6IkRDRkJFQzdBQUNGMzE5NjQ3MjE2OUU4Mzg0MzAzNjdGNjZFRUJFM0M2RTcwQzQxNkRENUYwQzY4NzU5REQxRkZGODNGQTQwMTQyMjA5REZGNUVBQUQ5NkRCOUU2Mzg2QyI6IjExMTg3MzMxQzI3OTk2MkQ5M0Q2MDQyNDNGRDU5MkNCOUQwQTkyNkY0MjJFNDcxODc1MjEyODdFNzE1NkM1QzRENjAzMTM1NTY5QjlFOUQwOUNGNUQ0QTI3MEY1OTc0NiIKKworRUNESCBwcmltaXRpdmUgcmZjIDU5MDMgcDUyMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNkaF9wcmltaXRpdmVfdGVzdHZlYzpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjAwMzdBREU5MzE5QTg5RjREQUJEQjNFRjQxMUFBQ0NDQTUxMjNDNjFBQ0FCNTdCNTM5M0RDRTQ3NjA4MTcyQTA5NUFBODVBMzBGRTFDMjk1MkM2NzcxRDkzN0JBOTc3N0Y1OTU3QjI2MzlCQUIwNzI0NjJGNjhDMjdBNTczODJENEE1MiI6IjAwMTU0MTdFODREQkYyOEMwQUQzQzI3ODcxMzM0OURDN0RGMTUzQzg5N0ExODkxQkQ5OEJBQjQzNTdDOUVDQkVFMUUzQkY0MkUwMEI4RTM4MEFFQUU1N0MyRDEwNzU2NDk0MTg4NTk0MkFGNUE3RjQ2MDE3MjNDNDE5NUQxNzZDRUQzRSI6IjAxN0NBRTIwQjY2NDFEMkVFQjY5NTc4NkQ4Qzk0NjE0NjIzOUQwOTlFMThFMUQ1QTUxNEM3MzlEN0NCNEExMEFEOEE3ODgwMTVBQzQwNUQ3Nzk5REM3NUU3QjdENUI2Q0YyMjYxQTZBN0YxNTA3NDM4QkYwMUJFQjZDQTM5MjZGOTU4MiI6IjAxNDVCQTk5QTg0N0FGNDM3OTNGREQwRTg3MkU3Q0RGQTE2QkUzMEZEQzc4MEY5N0JDQ0MzRjA3ODM4MDIwMUU5QzY3N0Q2MDBCMzQzNzU3QTNCREJGMkEzMTYzRTRDMkY4NjlDQ0E3NDU4QUE0QTRFRkZDMzExRjVDQjE1MTY4NUVCOSI6IjAwRDBCMzk3NUFDNEI3OTlGNUJFQTE2RDVFMTNFOUFGOTcxRDVFOUI5ODRDOUYzOTcyOEI1RTU3Mzk3MzVBMjE5Qjk3QzM1NjQzNkFEQzZFOTVCQjAzNTJGNkJFNjRBNkMyOTEyRDRFRjJEMDQzM0NFRDJCNjE3MTY0MDAxMkQ5NDYwRiI6IjAxNUM2ODIyNjM4Mzk1NkUzQkQwNjZFNzk3QjYyM0MyN0NFMEVBQzJGNTUxQTEwQzJDNzI0RDk4NTIwNzdCODcyMjBCNjUzNkM1QzQwOEExRDJBRUJCOEU4NkQ2NzhBRTQ5Q0I1NzA5MUY0NzMyMjk2NTc5QUI0NEZDRDE3RjBGQzU2QSI6IjAxMTQ0QzdENzlBRTY5NTZCQzhFREI4RTdDNzg3QzQ1MjFDQjA4NkZBNjQ0MDdGOTc4OTRFNUU2QjJENzlCMDREMTQyN0U3M0NBNEJBQTI0MEEzNDc4Njg1OTgxMEMwNkIzQzcxNUEzQThDQzMxNTFGMkJFRTQxNzk5NkQxOUYzRERFQSIKKworRUNESCBleGNoYW5nZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNkaF9leGNoYW5nZTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEKKworRUNESCBleGNoYW5nZSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNkaF9leGNoYW5nZTpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RoLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjZGguZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2YTk3YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RoLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTYwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2VjZGguaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfRUNESF9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY2RoX3ByaW1pdGl2ZV9yYW5kb20oIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IHFBLCBxQjsKKyAgICBtYmVkdGxzX21waSBkQSwgZEIsIHpBLCB6QjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJnFBICk7IG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZxQiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZkQSApOyBtYmVkdGxzX21waV9pbml0KCAmZEIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmekEgKTsgbWJlZHRsc19tcGlfaW5pdCggJnpCICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4MDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmdycCwgJmRBLCAmcUEsICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApCisgICAgICAgICAgICAgICAgID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZncnAsICZkQiwgJnFCLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKQorICAgICAgICAgICAgICAgICA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9jb21wdXRlX3NoYXJlZCggJmdycCwgJnpBLCAmcUIsICZkQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZncnAsICZ6QiwgJnFBLCAmZEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJnpBLCAmekIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZxQSApOyBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmcUIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZEEgKTsgbWJlZHRsc19tcGlfZnJlZSggJmRCICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnpBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ6QiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY2RoX3ByaW1pdGl2ZV90ZXN0dmVjKCBpbnQgaWQsIGNoYXIgKmRBX3N0ciwgY2hhciAqeEFfc3RyLCBjaGFyICp5QV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRCX3N0ciwgY2hhciAqeEJfc3RyLCBjaGFyICp5Ql9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnpfc3RyICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgcUEsIHFCOworICAgIG1iZWR0bHNfbXBpIGRBLCBkQiwgekEsIHpCLCBjaGVjazsKKyAgICB1bnNpZ25lZCBjaGFyIHJuZF9idWZfQVtNQkVEVExTX0VDUF9NQVhfQllURVNdOworICAgIHVuc2lnbmVkIGNoYXIgcm5kX2J1Zl9CW01CRURUTFNfRUNQX01BWF9CWVRFU107CisgICAgcm5kX2J1Zl9pbmZvIHJuZF9pbmZvX0EsIHJuZF9pbmZvX0I7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJnFBICk7IG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZxQiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZkQSApOyBtYmVkdGxzX21waV9pbml0KCAmZEIgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmekEgKTsgbWJlZHRsc19tcGlfaW5pdCggJnpCICk7IG1iZWR0bHNfbXBpX2luaXQoICZjaGVjayApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworCisgICAgcm5kX2luZm9fQS5idWYgPSBybmRfYnVmX0E7CisgICAgcm5kX2luZm9fQS5sZW5ndGggPSB1bmhleGlmeSggcm5kX2J1Zl9BLCBkQV9zdHIgKTsKKworICAgIC8qIEZpeCBybmRfYnVmX0EgYnkgc2hpZnRpbmcgaXQgbGVmdCBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiggZ3JwLm5iaXRzICUgOCAhPSAwICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2hpZnQgPSA4IC0gKCBncnAubmJpdHMgJSA4ICk7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBybmRfaW5mb19BLmxlbmd0aCAtIDE7IGkrKyApCisgICAgICAgICAgICBybmRfYnVmX0FbaV0gPSBybmRfYnVmX0FbaV0gPDwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHJuZF9idWZfQVtpKzFdID4+ICggOCAtIHNoaWZ0ICk7CisKKyAgICAgICAgcm5kX2J1Zl9BW3JuZF9pbmZvX0EubGVuZ3RoLTFdIDw8PSBzaGlmdDsKKyAgICB9CisKKyAgICBybmRfaW5mb19CLmJ1ZiA9IHJuZF9idWZfQjsKKyAgICBybmRfaW5mb19CLmxlbmd0aCA9IHVuaGV4aWZ5KCBybmRfYnVmX0IsIGRCX3N0ciApOworCisgICAgLyogRml4IHJuZF9idWZfQiBieSBzaGlmdGluZyBpdCBsZWZ0IGlmIG5lY2Vzc2FyeSAqLworICAgIGlmKCBncnAubmJpdHMgJSA4ICE9IDAgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzaGlmdCA9IDggLSAoIGdycC5uYml0cyAlIDggKTsKKyAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHJuZF9pbmZvX0IubGVuZ3RoIC0gMTsgaSsrICkKKyAgICAgICAgICAgIHJuZF9idWZfQltpXSA9IHJuZF9idWZfQltpXSA8PCBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgcm5kX2J1Zl9CW2krMV0gPj4gKCA4IC0gc2hpZnQgKTsKKworICAgICAgICBybmRfYnVmX0Jbcm5kX2luZm9fQi5sZW5ndGgtMV0gPDw9IHNoaWZ0OworICAgIH0KKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmdycCwgJmRBLCAmcUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX2J1ZmZlcl9yYW5kLCAmcm5kX2luZm9fQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggISBtYmVkdGxzX2VjcF9pc196ZXJvKCAmcUEgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmNoZWNrLCAxNiwgeEFfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcUEuWCwgJmNoZWNrICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmNoZWNrLCAxNiwgeUFfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcUEuWSwgJmNoZWNrICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZ3JwLCAmZEIsICZxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfYnVmZmVyX3JhbmQsICZybmRfaW5mb19CICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCAhIG1iZWR0bHNfZWNwX2lzX3plcm8oICZxQiApICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY2hlY2ssIDE2LCB4Ql9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZxQi5YLCAmY2hlY2sgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY2hlY2ssIDE2LCB5Ql9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZxQi5ZLCAmY2hlY2sgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjaGVjaywgMTYsIHpfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZncnAsICZ6QSwgJnFCLCAmZEEsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZ6QSwgJmNoZWNrICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZncnAsICZ6QiwgJnFBLCAmZEIsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZ6QiwgJmNoZWNrICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmcUEgKTsgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJnFCICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmRBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZkQiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZ6QSApOyBtYmVkdGxzX21waV9mcmVlKCAmekIgKTsgbWJlZHRsc19tcGlfZnJlZSggJmNoZWNrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVjZGhfZXhjaGFuZ2UoIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY2RoX2NvbnRleHQgc3J2LCBjbGk7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAwMF07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmJ1ZjsKKyAgICBzaXplX3QgbGVuOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmc3J2ICk7CisgICAgbWJlZHRsc19lY2RoX2luaXQoICZjbGkgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHgwMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZzcnYuZ3JwLCBpZCApID09IDAgKTsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBzaXplb2YoIGJ1ZiApICk7IHZidWYgPSBidWY7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9tYWtlX3BhcmFtcyggJnNydiwgJmxlbiwgYnVmLCAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9yZWFkX3BhcmFtcyggJmNsaSwgJnZidWYsIGJ1ZiArIGxlbiApID09IDAgKTsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmNsaSwgJmxlbiwgYnVmLCAxMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkaF9yZWFkX3B1YmxpYyggJnNydiwgYnVmLCBsZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmc3J2LCAmbGVuLCBidWYsIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmY2xpLCAmbGVuLCBidWYsIDEwMDAsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZzcnYueiwgJmNsaS56ICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmc3J2ICk7CisgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZjbGkgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkc2EuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RzYS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjQwNzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkc2EuZGF0YQpAQCAtMCwwICsxLDI1MiBAQAorRUNEU0EgcHJpbWl0aXZlIHJhbmRvbSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNkc2FfcHJpbV9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKK0VDRFNBIHByaW1pdGl2ZSByYW5kb20gIzIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2VjZHNhX3ByaW1fcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMQorCitFQ0RTQSBwcmltaXRpdmUgcmFuZG9tICMzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitlY2RzYV9wcmltX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEKKworRUNEU0EgcHJpbWl0aXZlIHJhbmRvbSAjNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorZWNkc2FfcHJpbV9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxCisKK0VDRFNBIHByaW1pdGl2ZSByYW5kb20gIzUKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjZHNhX3ByaW1fcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMQorCitFQ0RTQSBwcmltaXRpdmUgcmZjIDQ3NTQgcDI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorZWNkc2FfcHJpbV90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJEQzUxRDM4NjZBMTVCQUNERTMzRDk2Rjk5MkZDQTk5REE3RTZFRjA5MzRFNzA5NzU1OUMyN0YxNjE0Qzg4QTdGIjoiMjQ0MkE1Q0MwRUNEMDE1RkEzQ0EzMURDOEUyQkJDNzBCRjQyRDYwQ0JDQTIwMDg1RTA4MjJDQjA0MjM1RTk3MCI6IjZGQzk4QkQ3RTUwMjExQTRBMjcxMDJGQTM1NDlERjc5RUJDQjRCRjI0NkI4MDk0NUNEREZFN0Q1MDlCQkZEN0QiOiI5RTU2RjUwOTE5Njc4NEQ5NjNEMUMwQTQwMTUxMEVFN0FEQTNEQ0M1REVFMDRCMTU0QkY2MUFGMUQ1QTZERUNFIjoiQkE3ODE2QkY4RjAxQ0ZFQTQxNDE0MERFNURBRTIyMjNCMDAzNjFBMzk2MTc3QTlDQjQxMEZGNjFGMjAwMTVBRCI6IkNCMjhFMDk5OUI5Qzc3MTVGRDBBODBEOEU0N0E3NzA3OTcxNkNCQkY5MTdERDcyRTk3NTY2RUExQzA2Njk1N0MiOiI4NkZBM0JCNEUyNkNBRDVCRjkwQjdGODE4OTkyNTZDRTc1OTRCQjFFQTBDODkyMTI3NDhCRkYzQjNENUIwMzE1IgorCitFQ0RTQSBwcmltaXRpdmUgcmZjIDQ3NTQgcDM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorZWNkc2FfcHJpbV90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiIwQkVCNjQ2NjM0QkE4NzczNUQ3N0FFNDgwOUEwRUJFQTg2NTUzNURFNEMxRTFEQ0I2OTJFODQ3MDhFODFBNUFGNjJFNTI4QzM4QjJBODFCMzUzMDk2NjhENzM1MjREOUYiOiI5NjI4MUJGOERENUUwNTI1Q0EwNDlDMDQ4RDM0NUQzMDgyOTY4RDEwRkVERjVDNUFDQTBDNjRFNjQ2NUE5N0VBNUNFMTBDOURGRUMyMTc5NzQxNTcxMDcyMUY0Mzc5MjIiOiI0NDc2ODhCQTk0NzA4RUI2RTJFNEQ1OUY2QUI2RDdFREZGOTMwMUQyNDlGRTQ5QzMzMDk2NjU1RjVENTAyRkFEM0QzODNCOTFDNUU3RURBQTJCNzE0Q0M5OUQ1NzQzQ0EiOiJCNEI3NEU0NEQ3MUExM0Q1NjgwMDNENzQ4OTkwOEQ1NjRDNzc2MUUyMjlDNThDQkZBMTg5NTAwOTZFQjc0NjNCODU0RDdGQTk5MkY5MzREOTI3Mzc2Mjg1RTYzNDE0RkEiOiJDQjAwNzUzRjQ1QTM1RThCQjVBMDNENjk5QUM2NTAwNzI3MkMzMkFCMEVERUQxNjMxQThCNjA1QTQzRkY1QkVEODA4NjA3MkJBMUU3Q0MyMzU4QkFFQ0ExMzRDODI1QTciOiJGQjAxN0I5MTRFMjkxNDk0MzJEOEJBQzI5QTUxNDY0MEI0NkY1M0REQUIyQzY5OTQ4MDg0RTI5MzBGMUM4RjdFMDhFMDdDOUM2M0YyRDIxQTA3RENCNTZBNkFGNTZFQjMiOiJCMjYzQTEzMDVFMDU3Rjk4NEQzODcyNkExQjQ2ODc0MTA5RjQxN0JDQTExMjY3NEM1MjgyNjJBNDBBNjI5QUYxQ0JCOUY1MTZDRTBGQTdEMkZGNjMwODYzQTAwRThCOUYiCisKK0VDRFNBIHByaW1pdGl2ZSByZmMgNDc1NCBwNTIxCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY2RzYV9wcmltX3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjAwNjVGREEzNDA5NDUxRENBQjBBMEVBRDQ1NDk1MTEyQTNEODEzQzE3QkZEMzRCREY4QzEyMDlEN0RGNTg0OTEyMDU5Nzc3OTA2MEE3RkY5RDcwNEFERjc4QjU3MEZGQUQ2RjA2MkU5NUM3RTBDNUQ1NDgxQzVCMTUzQjQ4QjM3NUZBMSI6IjAxNTE1MThGMUFGMEY1NjM1MTdFREQ1NDg1MTkwREY5NUE0QkY1N0I1Q0JBNENGMkE5QTNGNjQ3NDcyNUEzNUY3QUZFMEE2RERFQjhCRURCQ0Q2QTE5N0U1OTJENDAxODg5MDFDRUNENjUwNjk5QzlCNUU0NTZBRUE1QUREMTkwNTJBOCI6IjAwNkYzQjE0MkVBMUJGRkY3RTI4MzdBRDQ0QzlFNEZGNkQyRDM0QzczMTg0QkJBRDkwMDI2REQ1RTZFODUzMTdEOURGNDVDQUQ3ODAzQzZDMjAwMzVCMkYzRkY2M0FGRjRFMUJBNjREMUMwNzc1NzdEQTNGNDI4NkM1OEYwQUVBRTY0MyI6IjAwQzFDMkIzMDU0MTlGNUE0MTM0NEQ3RTQzNTk5MzNENzM0MDk2RjU1NjE5N0E5QjI0NDM0MkI4QjYyRjQ2RjkzNzM3NzhGOURFNkI2NDk3QjFFRjgyNUZGMjRGNDJGOUI0QTRCRDczODJDRkMzMzc4QTU0MEIxQjdGMEMxQjk1NkMyRiI6IkREQUYzNUExOTM2MTdBQkFDQzQxNzM0OUFFMjA0MTMxMTJFNkZBNEU4OUE5N0VBMjBBOUVFRUU2NEI1NUQzOUEyMTkyOTkyQTI3NEZDMUE4MzZCQTNDMjNBM0ZFRUJCRDQ1NEQ0NDIzNjQzQ0U4MEUyQTlBQzk0RkE1NENBNDlGIjoiMDE1NEZEMzgzNkFGOTJEMERDQTU3REQ1MzQxRDMwNTM5ODg1MzRGREU4MzE4RkM2QUFBQUI2OEUyRTZGNDMzOUIxOUYyRjI4MUE3RTBCMjJDMjY5RDkzQ0Y4Nzk0QTkyNzg4ODBFRDdEQkI4RDkzNjJDQUVBQ0VFNTQ0MzIwNTUyMjUxIjoiMDE3NzA1QTcwMzAyOTBEMUNFQjYwNUE5QTFCQjAzRkY5Q0RENTIxRTg3QTY5NkVDOTI2QzhDMTBDODM2MkRGNDk3NTM2NzEwMUY2N0QxQ0Y5QkNDQkYyRjNEMjM5NTM0RkE1MDlFNzBBQUM4NTFBRTAxQUFDNjhENjJGODY2NDcyNjYwIgorCitFQ0RTQSB3cml0ZS1yZWFkIHJhbmRvbSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNkc2Ffd3JpdGVfcmVhZF9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxCisKK0VDRFNBIHdyaXRlLXJlYWQgcmFuZG9tICMyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitlY2RzYV93cml0ZV9yZWFkX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjEKKworRUNEU0Egd3JpdGUtcmVhZCByYW5kb20gIzMKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK2VjZHNhX3dyaXRlX3JlYWRfcmFuZG9tOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMQorCitFQ0RTQSB3cml0ZS1yZWFkIHJhbmRvbSAjNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorZWNkc2Ffd3JpdGVfcmVhZF9yYW5kb206TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxCisKK0VDRFNBIHdyaXRlLXJlYWQgcmFuZG9tICM1CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY2RzYV93cml0ZV9yZWFkX3JhbmRvbTpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjEKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIG1iZWR0bHNfc2hhMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjZGQUIwMzQ5MzRFNEMwRkM5QUU2N0Y1QjU2NTlBOUQ3RDFGRUZEMTg3RUUwOUZENCI6TUJFRFRMU19NRF9TSEExOiJzYW1wbGUiOiI5OEM2QkQxMkIyM0VBRjVFMkEyMDQ1MTMyMDg2QkUzRUI4RUJENjJBQkY2Njk4RkYiOiI1N0EyMkIwN0RFQTk1MzBGOERFOTQ3MUIxREM2NjI0NDcyRThFMjg0NEJDMjVCNjQiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjZGQUIwMzQ5MzRFNEMwRkM5QUU2N0Y1QjU2NTlBOUQ3RDFGRUZEMTg3RUUwOUZENCI6TUJFRFRMU19NRF9TSEEyMjQ6InNhbXBsZSI6IkExRjAwREFEOTdBRUVDOTFDOTU1ODVGMzYyMDBDNjVGM0MwMTgxMkFBNjAzNzhGNSI6IkUwN0VDMTMwNEM3QzZDOURFQkJFOTgwQjk2OTI2NjhGODFENERFNzkyMkEwRjk3QSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIG1iZWR0bHNfc2hhMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMjU2OiJzYW1wbGUiOiI0QjBCOENFOThBOTI4NjZBMjgyMEUyMEFBNkI3NUI1NjM4MkUwRjlCRkQ1RUNCNTUiOiJDQ0RCMDA2OTI2RUE5NTY1Q0JBREM4NDA4MjlEOEMzODRFMDZERTFGMUUzODFCODUiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBzaGEzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjZGQUIwMzQ5MzRFNEMwRkM5QUU2N0Y1QjU2NTlBOUQ3RDFGRUZEMTg3RUUwOUZENCI6TUJFRFRMU19NRF9TSEEzODQ6InNhbXBsZSI6IkRBNjNCRjBCOUFCQ0Y5NDhGQkIxRTkxNjdGMTM2MTQ1RjdBMjA0MjZEQ0MyODdENSI6IkMzQUEyQzk2MDk3MkJEN0EyMDAzQTU3RTFDNEM3N0YwNTc4RjhBRTk1RTMxRUM1RSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBNTEyOiJzYW1wbGUiOiI0RDYwQzVBQjE5OTZCRDg0ODM0M0IzMUMwMDg1MDIwNUUyRUE2OTIyREFDMkU0QjgiOiIzRjZFODM3NDQ4RjAyN0ExQkY0QjM0RTc5NkUzMkE4MTFDQkI0MDUwOTA4RDhGNjciCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDE5MiBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMToidGVzdCI6IjBGMjE0MUEwRUJCQzQ0RDJFMUFGOTBBNTBFQkNGQ0U1RTE5N0IzQjdENERFMDM2RCI6IkVCMThCQzlFMUYzRDczODc1MDBDQjk5Q0Y1RjdDMTU3MDcwQTg5NjFFMzg3MDBCNyIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIHNoYTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiNkZBQjAzNDkzNEU0QzBGQzlBRTY3RjVCNTY1OUE5RDdEMUZFRkQxODdFRTA5RkQ0IjpNQkVEVExTX01EX1NIQTIyNDoidGVzdCI6IjY5NDVBMUMxRDFCMjIwNkI4MTQ1NTQ4RjYzM0JCNjFDRUYwNDg5MUJBRjI2RUQzNCI6IkI3RkI3RkRGQzMzOUMwQjlCRDYxQTlGNUE4RUFGOUJFNThGQzVDQkEyQ0IxNTI5MyIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMTkyIG1iZWR0bHNfc2hhMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMjU2OiJ0ZXN0IjoiM0E3MThCRDhCNDkyNkMzQjUyRUU2QkJFNjdFRjc5QjE4Q0I2RUI2MkIxQUQ5N0FFIjoiNTY2MkU2ODQ4QTRBMTlCMUYxQUUyRjcyQUNENEI4QkJFNTBGMUVBQzY1RDkxMjRGIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAxOTIgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI2RkFCMDM0OTM0RTRDMEZDOUFFNjdGNUI1NjU5QTlEN0QxRkVGRDE4N0VFMDlGRDQiOk1CRURUTFNfTURfU0hBMzg0OiJ0ZXN0IjoiQjIzNEI2MEI0REI3NUE3MzNFMTkyODBBN0E2MDM0QkQ2QjFFRTg4QUY1MzMyMzY3IjoiNzk5NDA5MEIyRDU5QkI3ODJCRTU3RTc0QTQ0QzlBMUM3MDA0MTNGOEFCRUZFNzdBIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAxOTIgbWJlZHRsc19zaGE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjZGQUIwMzQ5MzRFNEMwRkM5QUU2N0Y1QjU2NTlBOUQ3RDFGRUZEMTg3RUUwOUZENCI6TUJFRFRMU19NRF9TSEE1MTI6InRlc3QiOiJGRTRGNEFFODZBNThCNjUwNzk0NjcxNTkzNEZFMkQ4RkY5RDk1QjZCMDk4RkU3MzkiOiI3NENGNTYwNUM5OEZCQTBFMUVGMzRENEI1QTE1NzdBN0RDRjU5NDU3Q0FFNTIyOTAiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiJGMjIwMjY2RTExMDVCRkUzMDgzRTAzRUM3QTNBNjU0NjUxRjQ1RTM3MTY3RTg4NjAwQkYyNTdDMSI6TUJFRFRMU19NRF9TSEExOiJzYW1wbGUiOiIyMjIyNkY5RDQwQTk2RTE5QzRBMzAxQ0U1Qjc0QjExNTMwM0MwRjNBNEZEMzBGQzI1N0ZCNTdBQyI6IjY2RDFDREQ4M0UzQUY3NTYwNURENkUyRkVGRjE5NkQzMEFBN0VEN0EyRURGN0FGNDc1NDAzRDY5IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiJGMjIwMjY2RTExMDVCRkUzMDgzRTAzRUM3QTNBNjU0NjUxRjQ1RTM3MTY3RTg4NjAwQkYyNTdDMSI6TUJFRFRMU19NRF9TSEEyMjQ6InNhbXBsZSI6IjFDREZFNjY2MkRERTFFNEExRUM0Q0RFREY2QTFGNUEyRkI3RkJEOTE0NUMxMjExM0U2QUJGRDNFIjoiQTY2OTRGRDc3MThBMjEwNTNGMjI1RDNGNDYxOTdDQTY5OUQ0NTAwNkMwNkY4NzE4MDhGNDNFQkMiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMjU2OiJzYW1wbGUiOiI2MUFBM0RBMDEwRThFODQwNkM2NTZCQzQ3N0E3QTcxODk4OTVFN0U4NDBDREZFOEZGNDIzMDdCQSI6IkJDODE0MDUwREFCNUQyMzc3MDg3OTQ5NEY5RTBBNjgwREMxQUY3MTYxOTkxQkRFNjkyQjEwMTAxIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiJGMjIwMjY2RTExMDVCRkUzMDgzRTAzRUM3QTNBNjU0NjUxRjQ1RTM3MTY3RTg4NjAwQkYyNTdDMSI6TUJFRFRMU19NRF9TSEEzODQ6InNhbXBsZSI6IjBCMTE1RTVFMzZGMEY5RUM4MUYxMzI1QTU5NTI4NzhENzQ1RTE5RDdCQjNFQUJGQUJBNzdFOTUzIjoiODMwRjM0Q0NERkU4MjZDQ0ZEQzgxRUI0MTI5NzcyRTIwRTEyMjM0OEEyQkJEODg5QTFCMUFGMUQiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBNTEyOiJzYW1wbGUiOiIwNzRCRDFEOTc5RDVGMzJCRjk1OEREQzYxRTRGQjQ4NzJBRENBRkVCMjI1NjQ5N0NEQUMzMDM5NyI6IkE0Q0VDQTE5NkMzRDVBMUZGMzEwMjdCMzMxODVEQzhFRTQzRjI4OEIyMUFCMzQyRTVEOEVCMDg0IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyMjQgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMToidGVzdCI6IkRFQUE2NDZFQzJBRjJFQThBRDUzRUQ2NkIyRTJEREFBNDlBMTJFRkQ4MzU2NTYxNDUxRjNFMjFDIjoiOTU5ODc3OTZGNkNGMjA2MkFCODEzNTI3MURFNTZBRTU1MzY2QzA0NUY2RDk1OTNGNTM3ODdCRDIiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IkYyMjAyNjZFMTEwNUJGRTMwODNFMDNFQzdBM0E2NTQ2NTFGNDVFMzcxNjdFODg2MDBCRjI1N0MxIjpNQkVEVExTX01EX1NIQTIyNDoidGVzdCI6IkM0NDFDRThFMjYxREVENjM0RTRDRjg0OTEwRTRDNUQxRDIyQzVDRjNCNzMyQkIyMDREQkVGMDE5IjoiOTAyRjQyODQ3QTYzQkRDNUY2MDQ2QURBMTE0OTUzMTIwRjk5NDQyRDc2NTEwMTUwRjM3MkEzRjQiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDIyNCBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMjU2OiJ0ZXN0IjoiQUQwNERERTg3Qjg0NzQ3QTI0M0E2MzFFQTQ3QTFCQTZEMUZBQTA1OTE0OUFEMjQ0MERFNkZCQTYiOiIxNzhENDlCMUFFOTBFM0Q4QjYyOUJFM0RCNTY4MzkxNUY0RThDOTlGREY2RTY2NkNGMzdBRENGRCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjI0IHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRjIyMDI2NkUxMTA1QkZFMzA4M0UwM0VDN0EzQTY1NDY1MUY0NUUzNzE2N0U4ODYwMEJGMjU3QzEiOk1CRURUTFNfTURfU0hBMzg0OiJ0ZXN0IjoiMzg5QjkyNjgyRTM5OUIyNjUxOEE5NTUwNkI1MkMwM0JDOTM3OUE5REFERjMzOTFBMjFGQjBFQTQiOiI0MTRBNzE4RUQzMjQ5RkY2REJDNUI1MEMyN0Y3MUYwMUYwNzA5NDREQTIyQUIxRjc4RjU1OUFBQiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjI0IG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiJGMjIwMjY2RTExMDVCRkUzMDgzRTAzRUM3QTNBNjU0NjUxRjQ1RTM3MTY3RTg4NjAwQkYyNTdDMSI6TUJFRFRMU19NRF9TSEE1MTI6InRlc3QiOiIwNDlGMDUwNDc3QzVBREQ4NThDQUM1NjIwODM5NEI1QTU1QkFFQkJFODg3RkRGNzY1MDQ3QzE3QyI6IjA3N0VCMTNFNzAwNTkyOUNFRkEzQ0QwNDAzQzdDRENDMDc3QURGNEU0NEYzQzQxQjJGNjBFQ0ZGIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiQzlBRkE5RDg0NUJBNzUxNjZCNUMyMTU3NjdCMUQ2OTM0RTUwQzNEQjM2RTg5QjEyN0I4QTYyMkIxMjBGNjcyMSI6TUJFRFRMU19NRF9TSEExOiJzYW1wbGUiOiI2MTM0MEM4OEMzQUFFQkVCNEY2RDY2N0Y2NzJDQTk3NTlBNkNDQUE5RkE4ODExMzEzMDM5RUU0QTM1NDcxRDMyIjoiNkQ3RjE0N0RBQzA4OTQ0MUJCMkUyRkU4RjdBM0ZBMjY0QjlDNDc1MDk4RkRDRjZFMDBEN0M5OTZFMUI4QjdFQiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IHNoYTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiQzlBRkE5RDg0NUJBNzUxNjZCNUMyMTU3NjdCMUQ2OTM0RTUwQzNEQjM2RTg5QjEyN0I4QTYyMkIxMjBGNjcyMSI6TUJFRFRMU19NRF9TSEEyMjQ6InNhbXBsZSI6IjUzQjJGRkY1RDE3NTJCMkM2ODlERjI1N0MwNEM0MEE1ODdGQUJBQkIzRjZGQzI3MDJGMTM0M0FGN0NBOUFBM0YiOiJCOUFGQjY0RkRDMDNEQzFBMTMxQzdEMjM4NkQxMUUzNDlGMDcwQUE0MzJBNEFDQzkxOEJFQTk4OEJGNzVDNzRDIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgbWJlZHRsc19zaGEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMjU2OiJzYW1wbGUiOiJFRkQ0OEIyQUFDQjZBOEZEMTE0MEREOUNENDVFODFENjlEMkM4NzdCNTZBQUY5OTFDMzREMEVBODRFQUYzNzE2IjoiRjdDQjFDOTQyRDY1N0M0MUQ0MzZDN0ExQjZFMjlGNjVGM0U5MDBEQkI5QUZGNDA2NERDNEFCMkY4NDNBQ0RBOCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiQzlBRkE5RDg0NUJBNzUxNjZCNUMyMTU3NjdCMUQ2OTM0RTUwQzNEQjM2RTg5QjEyN0I4QTYyMkIxMjBGNjcyMSI6TUJFRFRMU19NRF9TSEEzODQ6InNhbXBsZSI6IjBFQUZFQTAzOUIyMEU5QjQyMzA5RkIxRDg5RTIxMzA1N0NCRjk3M0RDMENGQzhGMTI5RUREREM4MDBFRjc3MTkiOiI0ODYxRjA0OTFFNjk5OEI5NDU1MTkzRTM0RTdCMEQyODREREQ3MTQ5QTc0Qjk1QjkyNjFGMTNBQkRFOTQwOTU0IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgbWJlZHRsc19zaGE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBNTEyOiJzYW1wbGUiOiI4NDk2QTYwQjVFOUI0N0M4MjU0ODg4MjdFMDQ5NUIwRTNGQTEwOUVDNDU2OEZEM0Y4RDEwOTc2NzhFQjk3RjAwIjoiMjM2MkFCMUFEQkUyQjhBREY5Q0I5RURBQjc0MEVBNjA0OUMwMjgxMTRGMjQ2MEY5NjU1NEY2MUZBRTMzMDJGRSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMjU2IG1iZWR0bHNfc2hhMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMToidGVzdCI6IjBDQkNDODZGRDZBQkQxRDk5RTcwM0UxRUM1MDA2OUVFNUMwQjRCQTRCOUFDNjBFNDA5RThFQzU5MTBEODFBODkiOiIwMUI5RDdCNzNERkFBNjBENTY1MUVDNDU5MUEwMTM2Rjg3NjUzRTBGRDc4MEMzQjFCQzg3MkZGREVBRTQ3OUIxIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiJDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxIjpNQkVEVExTX01EX1NIQTIyNDoidGVzdCI6IkMzN0VEQjZGMEFFNzlENDdDM0MyN0U5NjJGQTI2OUJCNEY0NDE3NzAzNTdFMTE0RUU1MTFGNjYyRUMzNEE2OTIiOiJDODIwMDUzQTA1NzkxRTUyMUZDQUFENjA0MkQ0MEFFQTFENkIxQTU0MDEzODU1OEY0N0QwNzE5ODAwRTE4RjJEIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAyNTYgbWJlZHRsc19zaGEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMjU2OiJ0ZXN0IjoiRjFBQkIwMjM1MTgzNTFDRDcxRDg4MTU2N0IxRUE2NjNFRDNFRkNGNkM1MTMyQjM1NEYyOEQzQjBCN0QzODM2NyI6IjAxOUY0MTEzNzQyQTJCMTRCRDI1OTI2QjQ5QzY0OTE1NUYyNjdFNjBEMzgxNEI0QzBDQzg0MjUwRTQ2RjAwODMiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDI1NiBzaGEzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IkM5QUZBOUQ4NDVCQTc1MTY2QjVDMjE1NzY3QjFENjkzNEU1MEMzREIzNkU4OUIxMjdCOEE2MjJCMTIwRjY3MjEiOk1CRURUTFNfTURfU0hBMzg0OiJ0ZXN0IjoiODM5MTBFOEI0OEJCMEM3NDI0NEVCREY3RjA3QTFDNTQxM0Q2MTQ3MkJEOTQxRUYzOTIwRTYyM0ZCQ0NFQkVCNiI6IjhEREJFQzU0Q0Y4Q0Q1ODc0ODgzODQxRDcxMjE0MkE1NkE4RDBGMjE4RjUwMDNDQjAyOTZCNkI1MDk2MTlGMkMiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDI1NiBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiQzlBRkE5RDg0NUJBNzUxNjZCNUMyMTU3NjdCMUQ2OTM0RTUwQzNEQjM2RTg5QjEyN0I4QTYyMkIxMjBGNjcyMSI6TUJFRFRMU19NRF9TSEE1MTI6InRlc3QiOiI0NjFEOTNGMzFCNjU0MDg5NDc4OEZEMjA2QzA3Q0ZBMENDMzVGNDZGQTNDOTE4MTZGRkYxMDQwQUQxNTgxQTA0IjoiMzlBRjlGMTVERTBEQjhEOTdFNzI3MTlDNzQ4MjBEMzA0Q0U1MjI2RTMyREVEQUU2NzUxOUU4NDBEMTE5NEU1NSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IG1iZWR0bHNfc2hhMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjZCOUQzREFEMkUxQjhDMUMwNUIxOTg3NUI2NjU5RjRERTIzQzNCNjY3QkYyOTdCQTlBQTQ3NzQwNzg3MTM3RDg5NkQ1NzI0RTRDNzBBODI1Rjg3MkM5RUE2MEQyRURGNSI6TUJFRFRMU19NRF9TSEExOiJzYW1wbGUiOiJFQzc0OEQ4MzkyNDNENkZCRUY0RkM1QzQ4NTlBN0RGRkQ3RjNBQkRERjcyMDE0NTQwQzE2RDczMzA5ODM0RkEzN0I5QkEwMDI4OTlGNkZEQTNBNEE5Mzg2NzkwRDRFQjIiOiJBM0JDRkE5NDdCRUVGNDczMkJGMjQ3QUMxN0Y3MTY3NkNCMzFBODQ3QjlGRjBDQkM5QzlFRDRDMUE1QjNGQUNGMjZGNDlDQTAzMUQ0ODU3NTcwQ0NCNUNBNDQyNEE0NDMiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjZCOUQzREFEMkUxQjhDMUMwNUIxOTg3NUI2NjU5RjRERTIzQzNCNjY3QkYyOTdCQTlBQTQ3NzQwNzg3MTM3RDg5NkQ1NzI0RTRDNzBBODI1Rjg3MkM5RUE2MEQyRURGNSI6TUJFRFRMU19NRF9TSEEyMjQ6InNhbXBsZSI6IjQyMzU2RTc2QjU1QTZEOUI0NjMxQzg2NTQ0NURCRTU0RTA1NkQzQjM0MzE3NjZEMDUwOTI0NDc5M0MzRjkzNjY0NTBGNzZFRTNERTQzRjVBMTI1MzMzQTZCRTA2MDEyMiI6IjlEQTBDODE3ODcwNjQwMjFFNzhERjY1OEYyRkJCMEIwNDJCRjMwNDY2NURCNzIxRjA3N0E0Mjk4QjA5NUU0ODM0QzA4MkMwM0Q4MzAyOEVGQkY5M0EzQzIzOTQwQ0E4RCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IG1iZWR0bHNfc2hhMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMjU2OiJzYW1wbGUiOiIyMUIxM0QxRTAxM0M3RkExMzkyRDAzQzVGOTlBRjhCMzBDNTcwQzZGOThENEVBOEUzNTRCNjNBMjFEM0RBQTMzQkRFMUU4ODhFNjMzNTVEOTJGQTJCM0MzNkQ4RkIyQ0QiOiJGM0FBNDQzRkIxMDc3NDVCRjRCRDc3Q0IzODkxNjc0NjMyMDY4QTEwQ0E2N0UzRDQ1REIyMjY2RkE3RDFGRUVCRUZEQzYzRUNDRDFBQzQyRUMwQ0I4NjY4QTRGQTBBQjAiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBzaGEzODQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjZCOUQzREFEMkUxQjhDMUMwNUIxOTg3NUI2NjU5RjRERTIzQzNCNjY3QkYyOTdCQTlBQTQ3NzQwNzg3MTM3RDg5NkQ1NzI0RTRDNzBBODI1Rjg3MkM5RUE2MEQyRURGNSI6TUJFRFRMU19NRF9TSEEzODQ6InNhbXBsZSI6Ijk0RURCQjkyQTVFQ0I4QUFENDczNkU1NkM2OTE5MTZCM0Y4ODE0MDY2NkNFOUZBNzNENjRDNEVBOTVBRDEzM0M4MUE2NDgxNTJFNDRBQ0Y5NkUzNkREMUU4MEZBQkU0NiI6Ijk5RUY0QUVCMTVGMTc4Q0VBMUZFNDBEQjI2MDMxMzhGMTMwRTc0MEExOTYyNDUyNjIwM0I2MzUxRDBBM0E5NEZBMzI5QzE0NTc4NkU2NzlFN0I4MkM3MUEzODYyOEFDOCIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBNTEyOiJzYW1wbGUiOiJFRDA5NTlENTg4MEFCMkQ4NjlBRTdGNkMyOTE1QzZENjBGOTY1MDdGOUNCM0UwNDdDMDA0Njg2MURBNEE3OTlDRkUzMEYzNUNDOTAwMDU2RDdDOTlDRDc4ODI0MzM3MDkiOiI1MTJDOENDRUVFMzg5MEE4NDA1OENFMUUyMkRCQzIxOThGNDIzMjNDRThBQ0E5MTM1MzI5RjAzQzA2OEU1MTEyREM3Q0MzRUYzNDQ2REVGQ0VCMDFBNDVDMjY2N0ZERDUiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDM4NCBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMToidGVzdCI6IjRCQzM1RDNBNTBFRjRFMzA1NzZGNThDRDk2Q0U2QkY2MzgwMjVFRTYyNDAwNEExRjc3ODlBOEI4RTQzRDA2NzhBQ0Q5RDI5ODc2REFGNDY2Mzg2NDVGN0Y0MDRCMTFDNyI6IkQ1QTYzMjZDNDk0RUQzRkY2MTQ3MDM4Nzg5NjFDMEZERTdCMkMyNzhGOUE2NUZEOEM0QjcxODYyMDFBMjk5MTY5NUJBMUM4NDU0MTMyN0U5NjZGQTdCNTBGNzM4MjI4MiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IHNoYTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToiNkI5RDNEQUQyRTFCOEMxQzA1QjE5ODc1QjY2NTlGNERFMjNDM0I2NjdCRjI5N0JBOUFBNDc3NDA3ODcxMzdEODk2RDU3MjRFNEM3MEE4MjVGODcyQzlFQTYwRDJFREY1IjpNQkVEVExTX01EX1NIQTIyNDoidGVzdCI6IkU4QzlEMEI2RUE3MkEwRTc4MzdGRUExRDE0QTFBOTU1N0YyOUZBQTQ1RDNFN0VFODg4RkM1QkY5NTRCNUU2MjQ2NEE5QTgxN0M0N0ZGNzhCOEMxMTA2NkIyNDA4MEU3MiI6IjA3MDQxRDRBN0EwMzc5QUM3MjMyRkY3MkU2Rjc3QjZEREI4RjA5QjE2Q0NFMEVDMzI4NkIyQkQ0M0ZBOEM2MTQxQzUzRUE1QUJFRjBEODIzMTA3N0EwNDU0MEE5NkI2NiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwMzg0IG1iZWR0bHNfc2hhMjU2CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMjU2OiJ0ZXN0IjoiNkQ2REVGQUM5QUI2NERBQkFGRTM2QzZCRjUxMDM1MkE0Q0MyNzAwMTI2MzYzOEU1QjE2RDlCQjUxRDQ1MTU1OUY5MThFRURBRjIyOTNCRTVCNDc1Q0M4RjAxODg2MzZCIjoiMkQ0NkYzQkVDQkNDNTIzRDVGMUExMjU2QkYwQzlCMDI0RDg3OUJBOUU4MzgxNDRDOEJBNkJBRUI0QjUzQjQ3RDUxQUIzNzNGOTg0NUMwNTE0RUVGQjE0MDI0Nzg3MjY1IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAzODQgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOiI2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUiOk1CRURUTFNfTURfU0hBMzg0OiJ0ZXN0IjoiODIwM0I2M0QzQzg1M0U4RDc3MjI3RkIzNzdCQ0Y3QjdCNzcyRTk3ODkyQTgwRjM2QUI3NzVENTA5RDdBNUZFQjA1NDJBN0YwODEyOTk4REE4RjFERDNDQTNDRjAyM0RCIjoiREREMDc2MDQ0OEQ0MkQ4QTQzQUY0NUFGODM2RkNFNERFOEJFMDZCNDg1RTlCNjFCODI3QzJGMTMxNzM5MjNFMDZBNzM5RjA0MDY0OUE2NjdCRjNCODI4MjQ2QkFBNUE1IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHAzODQgbWJlZHRsc19zaGE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjZCOUQzREFEMkUxQjhDMUMwNUIxOTg3NUI2NjU5RjRERTIzQzNCNjY3QkYyOTdCQTlBQTQ3NzQwNzg3MTM3RDg5NkQ1NzI0RTRDNzBBODI1Rjg3MkM5RUE2MEQyRURGNSI6TUJFRFRMU19NRF9TSEE1MTI6InRlc3QiOiJBMEQ1RDA5MEM5OTgwRkFGM0MyQ0U1N0I3QUU5NTFEMzE5NzdERDExQzc3NUQzMTRBRjU1Rjc2QzY3NjQ0N0QwNkZCNjQ5NUNEMjFCNEI2RTM0MEZDMjM2NTg0RkIyNzciOiI5NzY5ODRFNTlCNEM3N0IwRThFNDQ2MERDQTNEOUYyMEUwN0I5QkIxRjYzQkVFRkFGNTc2RjZCMkU4QjIyNDYzNEEyMDkyQ0QzNzkyRTAxNTlBRDlDRUUzNzY1OUM3MzYiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBtYmVkdGxzX3NoYTEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwRkFEMDZEQUE2MkJBM0IyNUQyRkI0MDEzM0RBNzU3MjA1REU2N0Y1QkIwMDE4RkVFOEM4NkUxQjY4QzdFNzVDQUE4OTZFQjMyRjFGNDdDNzA4NTU4MzZBNkQxNkZDQzE0NjZGNkQ4RkJFQzY3REI4OUVDMEMwOEIwRTk5NkI4MzUzOCI6TUJFRFRMU19NRF9TSEExOiJzYW1wbGUiOiIwMzQzQjZFQzQ1NzI4OTc1RUE1Q0JBNjY1OUJCQjYwNjJBNUZGODlFRUE1OEJFM0M4MEI2MTlGMzIyQzg3OTEwRkUwOTJGN0Q0NUJCMEY4RUVFMDFFRDNGMjBCQUJFQzA3OUQyMDJBRTY3N0IyNDNBQjQwQjU0MzFENDk3QzU1RDc1RCI6IjBFN0IwRTY3NUE5QjI0NDEzRDQ0OEI4Q0MxMTlEMkJGN0IyRDJERjAzMjc0MUMwOTY2MzRENkQ2NUQwREJFM0Q1Njk0NjI1RkI5RTgxMDREM0I4NDJDMUIwRTJEMEI5OEJFQTE5MzQxRTg2NzZBRUY2NkFFNEVCQTNENTQ3NUQ1RDE2IgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgc2hhMjI0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwRkFEMDZEQUE2MkJBM0IyNUQyRkI0MDEzM0RBNzU3MjA1REU2N0Y1QkIwMDE4RkVFOEM4NkUxQjY4QzdFNzVDQUE4OTZFQjMyRjFGNDdDNzA4NTU4MzZBNkQxNkZDQzE0NjZGNkQ4RkJFQzY3REI4OUVDMEMwOEIwRTk5NkI4MzUzOCI6TUJFRFRMU19NRF9TSEEyMjQ6InNhbXBsZSI6IjE3NzYzMzFDRkNERjkyN0Q2NjZFMDMyRTAwQ0Y3NzYxODdCQzlGREQ4RTY5RDBEQUJCNDEwOUZGRTFCNUUyQTMwNzE1RjRDQzkyM0E0QTVFOTREMjUwM0U5QUNGRUQ5Mjg1N0I3RjMxRDcxNTJFMEY4QzAwQzE1RkYzRDg3RTJFRDJFIjoiMDUwQ0I1MjY1NDE3RkUyMzIwQkJCNUExMjJCOEUxQTMyQkQ2OTkwODk4NTExMjhFMzYwRTYyMEEzMEM3RTE3QkE0MUE2NjZBRjEyNkNFMTAwRTU3OTlCMTUzQjYwNTI4RDUzMDBEMDg0ODlDQTkxNzhGQjYxMEEyMDA2QzI1NEI0MUYiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMjU2OiJzYW1wbGUiOiIxNTExQkI0RDY3NTExNEZFMjY2RkM0MzcyQjg3NjgyQkFFQ0MwMUQzQ0M2MkNGMjMwM0M5MkIzNTI2MDEyNjU5RDE2ODc2RTI1QzdDMUU1NzY0OEYyM0I3MzU2NEQ2N0Y2MUM2RjE0RDUyN0Q1NDk3MjgxMDQyMUU3RDg3NTg5RTFBNyI6IjA0QTE3MTE0M0E4MzE2M0Q2REY0NjBBQUY2MTUyMjY5NUYyMDdBNThCOTVDMDY0NEQ4N0U1MkFBMUEzNDc5MTZFNEY3QTcyOTMwQjFCQzA2REJFMjJDRTNGNTgyNjRBRkQyMzcwNENCQjYzQjI5QjkzMUY3REU2QzlEOTQ5QTdFQ0ZDIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgc2hhMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwRkFEMDZEQUE2MkJBM0IyNUQyRkI0MDEzM0RBNzU3MjA1REU2N0Y1QkIwMDE4RkVFOEM4NkUxQjY4QzdFNzVDQUE4OTZFQjMyRjFGNDdDNzA4NTU4MzZBNkQxNkZDQzE0NjZGNkQ4RkJFQzY3REI4OUVDMEMwOEIwRTk5NkI4MzUzOCI6TUJFRFRMU19NRF9TSEEzODQ6InNhbXBsZSI6IjFFQTg0MkEwRTE3RDJERTRGOTJDMTUzMTVDNjNEREY3MjY4NUMxODE5NUMyQkI5NUU1NzJCOUM1MTM2Q0E0QjRCNTc2QUQ3MTJBNTJCRTk3MzA2MjdEMTYwNTRCQTQwQ0MwQjhEM0ZGMDM1QjEyQUU3NTE2ODM5N0Y1RDUwQzY3NDUxIjoiMUYyMUEzQ0VFMDY2RTE5NjEwMjVGQjA0OEJENUZFMkI3OTI0RDBDRDc5N0JBQkUwQTgzQjY2RjFFMzVFRUFGNUZERTE0M0ZBODVEQzM5NEE3REVFNzY2NTIzMzkzNzg0NDg0QkRGM0UwMDExNEExQzg1N0NERTFBQTIwM0RCNjVENjEiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBtYmVkdGxzX3NoYTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBNTEyOiJzYW1wbGUiOiIwQzMyOEZBRkNCRDc5REQ3Nzg1MDM3MEM0NjMyNUQ5ODdDQjUyNTU2OUZCNjNDNUQzQkM1Mzk1MEU2RDRDNUYxNzRFMjVBMUVFOTAxN0I1RDQ1MDYwNkFERDE1MkI1MzQ5MzFEN0Q0RTg0NTVDQzkxRjlCMTVCRjA1RUMzNkUzNzdGQSI6IjA2MTdDQ0U3Q0Y1MDY0ODA2QzQ2N0Y2NzhEM0I0MDgwRDZGMUNDNTBBRjI2Q0EyMDk0MTczMDgyODFCNjhBRjI4MjYyM0VBQTYzRTVCNUMwNzIzRDhCOEMzN0ZGMDc3N0IxQTIwRjhDQ0IxRENDQzQzOTk3RjFFRTBFNDREQTRBNjdBIgorCitFQ0RTQSBkZXRlcm1pbmlzdGljIHRlc3QgdmVjdG9yIHJmYyA2OTc5IHA1MjEgbWJlZHRsc19zaGExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMToidGVzdCI6IjEzQkFEOUYyOUFCRTIwREUzN0VCRUI4MjNDMjUyQ0EwRjYzMzYxMjg0MDE1QTNCRjQzMEE0NkFBQTgwQjg3QjA2OTNGMDY5NEJEODhBRkU0RTY2MUZDMzNCMDk0Q0QzQjc5NjNCRUQ1QTcyN0VEOEJENkEzQTIwMkFCRTAwOUQwMzY3IjoiMUU5QkI4MUZGNzk0NENBNDA5QUQxMzhEQkJFRTIyOEUxQUZDQzBDODkwRkM3OEVDODYwNDYzOUNCMERCREM5MEY3MTdBOTlFQUQ5RDI3Mjg1NUQwMDE2MkVFOTUyNzU2N0RENkE5MkNCRDYyOTgwNUMwNDQ1MjgyQkJDOTE2Nzk3RkYiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBzaGEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworZWNkc2FfZGV0X3Rlc3RfdmVjdG9yczpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjBGQUQwNkRBQTYyQkEzQjI1RDJGQjQwMTMzREE3NTcyMDVERTY3RjVCQjAwMThGRUU4Qzg2RTFCNjhDN0U3NUNBQTg5NkVCMzJGMUY0N0M3MDg1NTgzNkE2RDE2RkNDMTQ2NkY2RDhGQkVDNjdEQjg5RUMwQzA4QjBFOTk2QjgzNTM4IjpNQkVEVExTX01EX1NIQTIyNDoidGVzdCI6IjFDN0VEOTAyRTEyM0U2ODE1NTQ2MDY1QTJDNEFGOTc3QjIyQUE4RUFEREI2OEIyQzExMTBFN0VBNDRENDIwODZCRkU0QTM0QjY3RERDMEUxN0U5NjUzNkUzNTgyMTlCMjNBNzA2QzZBNkUxNkJBNzdCNjVFMUM1OTVENDNDQUUxN0ZCIjoiMTc3MzM2Njc2MzA0RkNCMzQzQ0UwMjhCMzhFN0I0RkJBNzZDMUMxQjI3N0RBMThDQUQyQTg0NzhCMkE5QTlGNUJFQzBGM0JBMDRGMzVEQjNFNDI2MzU2OUVDNkFBREU4QzkyNzQ2RTRDODJGODI5OUFFMUI4RjE3MzlGOEZENTE5QTQiCisKK0VDRFNBIGRldGVybWluaXN0aWMgdGVzdCB2ZWN0b3IgcmZjIDY5NzkgcDUyMSBtYmVkdGxzX3NoYTI1NgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMjU2OiJ0ZXN0IjoiMDBFODcxQzRBMTRGOTkzQzZDNzM2OTUwMTkwMEM0QkMxRTlDN0IwQjRCQTQ0RTA0ODY4QjMwQjQxRDgwNzEwNDJFQjI4QzRDMjUwNDExRDBDRTA4Q0QxOTdFNDE4OEVBNDg3NkYyNzlGOTBCM0Q4RDc0QTNDNzZFNkYxRTQ2NTZBQTgiOiIwQ0Q1MkRCQUEzM0IwNjNDM0E2Q0Q4MDU4QTFGQjBBNDZBNDc1NEIwMzRGQ0M2NDQ3NjZDQTE0REE4Q0E1Q0E5RkRFMDBFODhDMUFENjBDQ0JBNzU5MDI1Mjk5MDc5RDdBNDI3RUMzQ0M1QjYxOUJGQkM4MjhFNzc2OUJDRDY5NEU4NiIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwNTIxIHNoYTM4NAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCitlY2RzYV9kZXRfdGVzdF92ZWN0b3JzOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgiOk1CRURUTFNfTURfU0hBMzg0OiJ0ZXN0IjoiMTRCRUUyMUExOEI2RDhCM0M5M0ZBQjA4RDQzRTczOTcwNzk1MzI0NEZEQkU5MjRGQTkyNkQ3NjY2OUU3QUM4Qzg5REY2MkVEODk3NUMyRDgzOTdBNjVBNDlEQ0MwOUY2QjBBQzYyMjcyNzQxOTI0RDQ3OTM1NEQ3NEZGNjA3NTU3OEMiOiIxMzMzMzA4NjVDMDY3QTBFQUY3MjM2MkE2NUUyRDdCQzRFNDYxRThDODk5NUMzQjYyMjZBMjFCRDFBQTc4RjBFRDk0RkU1MzZBMERDQTM1NTM0RjBDRDE1MTBDNDE1MjVEMTYzRkU5RDc0RDEzNDg4MUUzNTE0MUVENUU4RTk1Qjk3OSIKKworRUNEU0EgZGV0ZXJtaW5pc3RpYyB0ZXN0IHZlY3RvciByZmMgNjk3OSBwNTIxIG1iZWR0bHNfc2hhNTEyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK2VjZHNhX2RldF90ZXN0X3ZlY3RvcnM6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwRkFEMDZEQUE2MkJBM0IyNUQyRkI0MDEzM0RBNzU3MjA1REU2N0Y1QkIwMDE4RkVFOEM4NkUxQjY4QzdFNzVDQUE4OTZFQjMyRjFGNDdDNzA4NTU4MzZBNkQxNkZDQzE0NjZGNkQ4RkJFQzY3REI4OUVDMEMwOEIwRTk5NkI4MzUzOCI6TUJFRFRMU19NRF9TSEE1MTI6InRlc3QiOiIxM0U5OTAyMEFCRjVDRUU3NTI1RDE2QjY5QjIyOTY1MkFCNkJERjJBRkZDQUVGMzg3NzNCNEI3RDA4NzI1RjEwQ0RCOTM0ODJGRENDNTRFRENFRTkxRUNBNDE2NkIyQTdDNjI2NUVGMENFMkJENzA1MUI3Q0VGOTQ1QkFCRDQ3RUU2RCI6IjFGQkQwMDEzQzY3NEFBNzlDQjM5ODQ5NTI3OTE2Q0UzMDFDNjZFQTdDRThCODA2ODI3ODZBRDYwRjk4RjdFNzhBMTlDQTY5RUZGNUM1NzQwMEUzQjNBMEFENjZDRTA5NzgyMTREMTNCQUY0RTlBQzYwNzUyRjdCMTU1RTJERTREQ0UzIgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkc2EuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZWNkc2EuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlMDdhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2RzYS5mdW5jdGlvbgpAQCAtMCwwICsxLDE5NCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9lY2RzYS5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY2RzYV9wcmltX3JhbmRvbSggaW50IGlkICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUTsKKyAgICBtYmVkdGxzX21waSBkLCByLCBzOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2Nl07CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZCApOyBtYmVkdGxzX21waV9pbml0KCAmciApOyBtYmVkdGxzX21waV9pbml0KCAmcyApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIC8qIHByZXBhcmUgbWF0ZXJpYWwgZm9yIHNpZ25hdHVyZSAqLworICAgIFRFU1RfQVNTRVJUKCBybmRfcHNldWRvX3JhbmQoICZybmRfaW5mbywgYnVmLCBzaXplb2YoIGJ1ZiApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoICZncnAsICZkLCAmUSwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkKKyAgICAgICAgICAgICAgICAgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2Ffc2lnbiggJmdycCwgJnIsICZzLCAmZCwgYnVmLCBzaXplb2YoIGJ1ZiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfdmVyaWZ5KCAmZ3JwLCBidWYsIHNpemVvZiggYnVmICksICZRLCAmciwgJnMgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZRICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmQgKTsgbWJlZHRsc19tcGlfZnJlZSggJnIgKTsgbWJlZHRsc19tcGlfZnJlZSggJnMgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNkc2FfcHJpbV90ZXN0X3ZlY3RvcnMoIGludCBpZCwgY2hhciAqZF9zdHIsIGNoYXIgKnhRX3N0ciwgY2hhciAqeVFfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqa19zdHIsIGNoYXIgKmhhc2hfc3RyLCBjaGFyICpyX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNfc3RyICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUTsKKyAgICBtYmVkdGxzX21waSBkLCByLCBzLCByX2NoZWNrLCBzX2NoZWNrOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs2Nl0sIHJuZF9idWZbNjZdOworICAgIHNpemVfdCBobGVuOworICAgIHJuZF9idWZfaW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUSApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZkICk7IG1iZWR0bHNfbXBpX2luaXQoICZyICk7IG1iZWR0bHNfbXBpX2luaXQoICZzICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnJfY2hlY2sgKTsgbWJlZHRsc19tcGlfaW5pdCggJnNfY2hlY2sgKTsKKyAgICBtZW1zZXQoIGhhc2gsIDAsIHNpemVvZiggaGFzaCApICk7CisgICAgbWVtc2V0KCBybmRfYnVmLCAwLCBzaXplb2YoIHJuZF9idWYgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX3N0cmluZyggJlEsIDE2LCB4UV9zdHIsIHlRX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkLCAxNiwgZF9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcl9jaGVjaywgMTYsIHJfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnNfY2hlY2ssIDE2LCBzX3N0ciApID09IDAgKTsKKyAgICBobGVuID0gdW5oZXhpZnkoaGFzaCwgaGFzaF9zdHIpOworICAgIHJuZF9pbmZvLmJ1ZiA9IHJuZF9idWY7CisgICAgcm5kX2luZm8ubGVuZ3RoID0gdW5oZXhpZnkoIHJuZF9idWYsIGtfc3RyICk7CisKKyAgICAvKiBGaXggcm5kX2J1ZiBieSBzaGlmdGluZyBpdCBsZWZ0IGlmIG5lY2Vzc2FyeSAqLworICAgIGlmKCBncnAubmJpdHMgJSA4ICE9IDAgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBzaGlmdCA9IDggLSAoIGdycC5uYml0cyAlIDggKTsKKyAgICAgICAgc2l6ZV90IGk7CisKKyAgICAgICAgZm9yKCBpID0gMDsgaSA8IHJuZF9pbmZvLmxlbmd0aCAtIDE7IGkrKyApCisgICAgICAgICAgICBybmRfYnVmW2ldID0gcm5kX2J1ZltpXSA8PCBzaGlmdCB8IHJuZF9idWZbaSsxXSA+PiAoIDggLSBzaGlmdCApOworCisgICAgICAgIHJuZF9idWZbcm5kX2luZm8ubGVuZ3RoLTFdIDw8PSBzaGlmdDsKKyAgICB9CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9zaWduKCAmZ3JwLCAmciwgJnMsICZkLCBoYXNoLCBobGVuLAorICAgICAgICAgICAgICAgICBybmRfYnVmZmVyX3JhbmQsICZybmRfaW5mbyApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmciwgJnJfY2hlY2sgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZzLCAmc19jaGVjayApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3ZlcmlmeSggJmdycCwgaGFzaCwgaGxlbiwgJlEsICZyX2NoZWNrLCAmc19jaGVjayApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlEgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZCApOyBtYmVkdGxzX21waV9mcmVlKCAmciApOyBtYmVkdGxzX21waV9mcmVlKCAmcyApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZyX2NoZWNrICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZzX2NoZWNrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDICovCit2b2lkIGVjZHNhX2RldF90ZXN0X3ZlY3RvcnMoIGludCBpZCwgY2hhciAqZF9zdHIsIGludCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1zZywgY2hhciAqcl9zdHIsIGNoYXIgKnNfc3RyICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19tcGkgZCwgciwgcywgcl9jaGVjaywgc19jaGVjazsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgc2l6ZV90IGhsZW47CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJmQgKTsgbWJlZHRsc19tcGlfaW5pdCggJnIgKTsgbWJlZHRsc19tcGlfaW5pdCggJnMgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmcl9jaGVjayApOyBtYmVkdGxzX21waV9pbml0KCAmc19jaGVjayApOworICAgIG1lbXNldCggaGFzaCwgMCwgc2l6ZW9mKCBoYXNoICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkLCAxNiwgZF9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcl9jaGVjaywgMTYsIHJfc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnNfY2hlY2ssIDE2LCBzX3N0ciApID09IDAgKTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisgICAgaGxlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICBtYmVkdGxzX21kKCBtZF9pbmZvLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtc2csIHN0cmxlbiggbXNnICksIGhhc2ggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3NpZ25fZGV0KCAmZ3JwLCAmciwgJnMsICZkLCBoYXNoLCBobGVuLCBtZF9hbGcgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJnIsICZyX2NoZWNrICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmcywgJnNfY2hlY2sgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZyICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJnJfY2hlY2sgKTsgbWJlZHRsc19tcGlfZnJlZSggJnNfY2hlY2sgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DICovCit2b2lkIGVjZHNhX3dyaXRlX3JlYWRfcmFuZG9tKCBpbnQgaWQgKQoreworICAgIG1iZWR0bHNfZWNkc2FfY29udGV4dCBjdHg7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFszMl07CisgICAgdW5zaWduZWQgY2hhciBzaWdbMjAwXTsKKyAgICBzaXplX3Qgc2lnX2xlbiwgaTsKKworICAgIG1iZWR0bHNfZWNkc2FfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisgICAgbWVtc2V0KCBoYXNoLCAwLCBzaXplb2YoIGhhc2ggKSApOworICAgIG1lbXNldCggc2lnLCAweDJhLCBzaXplb2YoIHNpZyApICk7CisKKyAgICAvKiBwcmVwYXJlIG1hdGVyaWFsIGZvciBzaWduYXR1cmUgKi8KKyAgICBURVNUX0FTU0VSVCggcm5kX3BzZXVkb19yYW5kKCAmcm5kX2luZm8sIGhhc2gsIHNpemVvZiggaGFzaCApICkgPT0gMCApOworCisgICAgLyogZ2VuZXJhdGUgc2lnbmluZyBrZXkgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9nZW5rZXkoICZjdHgsIGlkLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisKKyAgICAvKiBnZW5lcmF0ZSBhbmQgd3JpdGUgc2lnbmF0dXJlLCB0aGVuIHJlYWQgYW5kIHZlcmlmeSBpdCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggJmN0eCwgTUJFRFRMU19NRF9TSEEyNTYsCisgICAgICAgICAgICAgICAgIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICBzaWcsICZzaWdfbGVuLCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZjdHgsIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKSA9PSAwICk7CisKKyAgICAvKiBjaGVjayB3ZSBkaWRuJ3Qgd3JpdGUgcGFzdCB0aGUgYW5ub3VuY2VkIGxlbmd0aCAqLworICAgIGZvciggaSA9IHNpZ19sZW47IGkgPCBzaXplb2YoIHNpZyApOyBpKysgKQorICAgICAgICBURVNUX0FTU0VSVCggc2lnW2ldID09IDB4MmEgKTsKKworICAgIC8qIHRyeSB2ZXJpZmljYXRpb24gd2l0aCBpbnZhbGlkIGxlbmd0aCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjZHNhX3JlYWRfc2lnbmF0dXJlKCAmY3R4LCBoYXNoLCBzaXplb2YoIGhhc2ggKSwKKyAgICAgICAgICAgICAgICAgc2lnLCBzaWdfbGVuIC0gMSApICE9IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggJmN0eCwgaGFzaCwgc2l6ZW9mKCBoYXNoICksCisgICAgICAgICAgICAgICAgIHNpZywgc2lnX2xlbiArIDEgKSAhPSAwICk7CisKKyAgICAvKiB0cnkgaW52YWxpZCBzZXF1ZW5jZSB0YWcgKi8KKyAgICBzaWdbMF0rKzsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggJmN0eCwgaGFzaCwgc2l6ZW9mKCBoYXNoICksCisgICAgICAgICAgICAgICAgIHNpZywgc2lnX2xlbiApICE9IDAgKTsKKyAgICBzaWdbMF0tLTsKKworICAgIC8qIHRyeSBtb2RpZnlpbmcgciAqLworICAgIHNpZ1sxMF0rKzsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2RzYV9yZWFkX3NpZ25hdHVyZSggJmN0eCwgaGFzaCwgc2l6ZW9mKCBoYXNoICksCisgICAgICAgICAgICAgICAgIHNpZywgc2lnX2xlbiApICE9IDAgKTsKKyAgICBzaWdbMTBdLS07CisKKyAgICAvKiB0cnkgbW9kaWZ5aW5nIHMgKi8KKyAgICBzaWdbc2lnX2xlbiAtIDFdKys7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZjdHgsIGhhc2gsIHNpemVvZiggaGFzaCApLAorICAgICAgICAgICAgICAgICBzaWcsIHNpZ19sZW4gKSAhPSAwICk7CisgICAgc2lnW3NpZ19sZW4gLSAxXS0tOworCitleGl0OgorICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjanBha2UuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2pwYWtlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3NzJhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2pwYWtlLmRhdGEKQEAgLTAsMCArMSwyMzAgQEAKK0VDSlBBS0Ugc2VsZnRlc3QKK2VjanBha2Vfc2VsZnRlc3Q6CisKK0VDSlBBS0Ugcm91bmQgb25lOiBjbGllbnQsIHZhbGlkCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYyMDkzNGQ3NGViNDNlNTRkZjQyNGZkOTYzMDZjMDExN2JmMTMxYWZhYmY5MGE5ZDMzZDExOThkOTA1MTkzNzM1MTQ0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTIiOjAKKworRUNKUEFLRSByb3VuZCBvbmU6IHNlcnZlciwgdmFsaWQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9TRVJWRVI6IjQxMDRhY2NmMDEwNmVmODU4ZmEyZDkxOTMzMTM0NjgwNWE3OGI1OGJiYWQwYjg0NGU1Yzc4OTI4NzkxNDYxODdkZDI2NjZhZGE3ODFiYjdmMTExMzcyMjUxYTg5MTA2MjFmNjM0ZGYxMjhhYzQ4ZTM4MWZkNmVmOTA2MDczMWY2OTRhNDQxMDQxZGQwYmQ1ZDQ1NjZjOWJlZDljZTdkZTcwMWI1ZTgyZTA4ZTg0YjczMDQ2NjAxOGFiOTAzYzc5ZWI5ODIxNzIyMzZjMGMxNzI4YWU0YmY3MzYxMGQzNGRlNDQyNDZlZjNkOWMwNWEyMjM2ZmI2NmE2NTgzZDc0NDkzMDhiYWJjZTIwNzJmZTE2NjYyOTkyZTkyMzVjMjUwMDJmMTFiMTUwODdiODI3MzhlMDNjOTQ1YmY3YTI5OTVkZGExZTk4MzQ1ODQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDRhNDk1NThkMzJlZDFlYmZjMTgxNmFmNGZmMDliNTVmY2I0Y2E0N2IyYTAyZDFlN2NhZjExNzllYTNmZTEzOTViMjJiODYxOTY0MDE2ZmFiYWY3MmM5NzU2OTVkOTNkNGRmMGU1MTk3ZmU5ZjA0MDYzNGVkNTk3NjQ5Mzc3ODdiZTIwYmM0ZGVlYmJmOWI4ZDYwYTMzNWYwNDZjYTNhYTk0MWU0NTg2NGM3Y2FkZWY5Y2Y3NWIzZDhiMDEwZTQ0M2VmMCI6MAorCitFQ0pQQUtFIHJvdW5kIG9uZTogcm9sZSBtaXNtYXRjaAorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNGFjY2YwMTA2ZWY4NThmYTJkOTE5MzMxMzQ2ODA1YTc4YjU4YmJhZDBiODQ0ZTVjNzg5Mjg3OTE0NjE4N2RkMjY2NmFkYTc4MWJiN2YxMTEzNzIyNTFhODkxMDYyMWY2MzRkZjEyOGFjNDhlMzgxZmQ2ZWY5MDYwNzMxZjY5NGE0NDEwNDFkZDBiZDVkNDU2NmM5YmVkOWNlN2RlNzAxYjVlODJlMDhlODRiNzMwNDY2MDE4YWI5MDNjNzllYjk4MjE3MjIzNmMwYzE3MjhhZTRiZjczNjEwZDM0ZGU0NDI0NmVmM2Q5YzA1YTIyMzZmYjY2YTY1ODNkNzQ0OTMwOGJhYmNlMjA3MmZlMTY2NjI5OTJlOTIzNWMyNTAwMmYxMWIxNTA4N2I4MjczOGUwM2M5NDViZjdhMjk5NWRkYTFlOTgzNDU4NDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNGE0OTU1OGQzMmVkMWViZmMxODE2YWY0ZmYwOWI1NWZjYjRjYTQ3YjJhMDJkMWU3Y2FmMTE3OWVhM2ZlMTM5NWIyMmI4NjE5NjQwMTZmYWJhZjcyYzk3NTY5NWQ5M2Q0ZGYwZTUxOTdmZTlmMDQwNjM0ZWQ1OTc2NDkzNzc4N2JlMjBiYzRkZWViYmY5YjhkNjBhMzM1ZjA0NmNhM2FhOTQxZTQ1ODY0YzdjYWRlZjljZjc1YjNkOGIwMTBlNDQzZWYwIjpNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRAorCitFQ0pQQUtFIHJvdW5kIG9uZTogdHJhaWxpbmcgYnl0ZQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MjA5MzRkNzRlYjQzZTU0ZGY0MjRmZDk2MzA2YzAxMTdiZjEzMWFmYWJmOTBhOWQzM2QxMTk4ZDkwNTE5MzczNTE0NDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbm8gZGF0YQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IGxlbmd0aCBvZiBmaXJzdCBwb2ludCB0b28gc21hbGwKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IGxlbmd0aCBvZiBmaXJzdCBwb2ludCB0b28gYmlnCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiIwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBubyBwb2ludCBkYXRhCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiIwMTA0IjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IGZpcnN0IHBvaW50IGlzIHplcm8KK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjAxMDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogdW5rbm93biBmaXJzdCBwb2ludCBmb3JtYXQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDU3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYiI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDE6IG5vdGhpbmcgYWZ0ZXIgZmlyc3QgcG9pbnQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBsZW5ndGggb2Ygc2Vjb25kIHBvaW50IHRvbyBzbWFsbAorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbGVuZ3RoIG9mIHNlY29uZCBwb2ludCB0b28gYmlnCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmIwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBubyBzZWNvbmQgcG9pbnQgZGF0YQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiMDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiB1bmtub3cgc2Vjb25kIHBvaW50IGZvcm1hdAorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNTA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2IjpNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogbm90aGluZyBhZnRlciBzZWNvbmQgcG9pbnQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDQwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiB6ZXJvLWxlbmd0aCByCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYwMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBubyBkYXRhIGZvciByCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AxOiBjb3JydXB0ZWQgcgorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MjA5MzRkNzRlYjQzZTU0ZGY0MjRmZDk2MzA2YzAxMTdiZjEzMWFmYWJmOTBhOWQzM2QxMTk4ZDkwNTE5MzczNTE1IjpNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRAorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMTogWCBub3Qgb24gdGhlIGN1cnZlCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmE0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYyMDkzNGQ3NGViNDNlNTRkZjQyNGZkOTYzMDZjMDExN2JmMTMxYWZhYmY5MGE5ZDMzZDExOThkOTA1MTkzNzM1MTQiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbm8gZGF0YQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IGxlbmd0aCBvZiBmaXJzdCBwb2ludCB0b28gc21hbGwKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IGxlbmd0aCBvZiBmaXJzdCBwb2ludCB0b28gYmlnCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTIwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBubyBwb2ludCBkYXRhCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTIwMTA0IjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IGZpcnN0IHBvaW50IGlzIHplcm8KK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjAxMDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogdW5rbm93biBmaXJzdCBwb2ludCBmb3JtYXQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDU3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYiI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCBvbmU6IEtLUDI6IG5vdGhpbmcgYWZ0ZXIgZmlyc3QgcG9pbnQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBsZW5ndGggb2Ygc2Vjb25kIHBvaW50IHRvbyBzbWFsbAorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbGVuZ3RoIG9mIHNlY29uZCBwb2ludCB0b28gYmlnCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmIwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBubyBzZWNvbmQgcG9pbnQgZGF0YQorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiMDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiB1bmtub3cgc2Vjb25kIHBvaW50IGZvcm1hdAorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNTA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2IjpNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogbm90aGluZyBhZnRlciBzZWNvbmQgcG9pbnQKK3JlYWRfcm91bmRfb25lOk1CRURUTFNfRUNKUEFLRV9DTElFTlQ6IjQxMDQxOTBhMDc3MDBmZmE0YmU2YWUxZDc5ZWUwZjA2YWViNTQ0Y2Q1YWRkYWFiZWRmNzBmODYyMzMyMTMzMmM1NGYzNTVmMGZiZmVjNzgzZWQzNTllNWQwYmY3Mzc3YTBmYzRlYTdhY2U0NzNjOWMxMTJiNDFjY2Q0MWFjNTZhNTYxMjQxMDQzNjBhMWNlYTMzZmNlNjQxMTU2NDU4ZTBhNGVhYzIxOWU5NjgzMWU2YWViYzg4YjNmMzc1MmY5M2EwMjgxZDFiZjFmYjEwNjA1MWRiOTY5NGE4ZDZlODYyYTVlZjEzMjRhM2Q5ZTI3ODk0ZjFlZTRmN2M1OTE5OTk2NWE4ZGQ0YTIwOTE4NDdkMmQyMmRmM2VlNTVmYWEyYTNmYjMzZmQyZDFlMDU1YTA3YTdjNjFlY2ZiOGQ4MGVjMDBjMmM5ZWIxMjQxMDQ3ZWE2ZTNhNDQ4NzAzN2E5ZTBkYmQ3OTI2MmIyY2MyNzNlNzc5OTMwZmMxODQwOWFjNTM2MWM1ZmU2NjlkNzAyZTE0Nzc5MGFlYjRjZTdmZDY1NzVhYjBmNmM3ZmQxYzMzNTkzOWFhODYzYmEzN2VjOTFiN2UzMmJiMDEzYmIyYjQxMDQwOWY4NWIzZDIwZWJkNzg4NWNlNDY0YzA4ZDA1NmQ2NDI4ZmU0ZGQ5Mjg3YWEzNjVmMTMxZjQzNjBmZjM4NmQ4NDY4OThiYzRiNDE1ODNjMmE1MTk3ZjY1ZDc4NzQyNzQ2YzEyYTVlYzBhNGZmZTJmMjcwYTc1MGExZDhmYjUxNiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiB6ZXJvLWxlbmd0aCByCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYwMCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBubyBkYXRhIGZvciByCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmI0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgb25lOiBLS1AyOiBjb3JydXB0ZWQgcgorcmVhZF9yb3VuZF9vbmU6TUJFRFRMU19FQ0pQQUtFX0NMSUVOVDoiNDEwNDE5MGEwNzcwMGZmYTRiZTZhZTFkNzllZTBmMDZhZWI1NDRjZDVhZGRhYWJlZGY3MGY4NjIzMzIxMzMyYzU0ZjM1NWYwZmJmZWM3ODNlZDM1OWU1ZDBiZjczNzdhMGZjNGVhN2FjZTQ3M2M5YzExMmI0MWNjZDQxYWM1NmE1NjEyNDEwNDM2MGExY2VhMzNmY2U2NDExNTY0NThlMGE0ZWFjMjE5ZTk2ODMxZTZhZWJjODhiM2YzNzUyZjkzYTAyODFkMWJmMWZiMTA2MDUxZGI5Njk0YThkNmU4NjJhNWVmMTMyNGEzZDllMjc4OTRmMWVlNGY3YzU5MTk5OTY1YThkZDRhMjA5MTg0N2QyZDIyZGYzZWU1NWZhYTJhM2ZiMzNmZDJkMWUwNTVhMDdhN2M2MWVjZmI4ZDgwZWMwMGMyYzllYjEyNDEwNDdlYTZlM2E0NDg3MDM3YTllMGRiZDc5MjYyYjJjYzI3M2U3Nzk5MzBmYzE4NDA5YWM1MzYxYzVmZTY2OWQ3MDJlMTQ3NzkwYWViNGNlN2ZkNjU3NWFiMGY2YzdmZDFjMzM1OTM5YWE4NjNiYTM3ZWM5MWI3ZTMyYmIwMTNiYjJiNDEwNDA5Zjg1YjNkMjBlYmQ3ODg1Y2U0NjRjMDhkMDU2ZDY0MjhmZTRkZDkyODdhYTM2NWYxMzFmNDM2MGZmMzg2ZDg0Njg5OGJjNGI0MTU4M2MyYTUxOTdmNjVkNzg3NDI3NDZjMTJhNWVjMGE0ZmZlMmYyNzBhNzUwYTFkOGZiNTE2MjA5MzRkNzRlYjQzZTU0ZGY0MjRmZDk2MzA2YzAxMTdiZjEzMWFmYWJmOTBhOWQzM2QxMTk4ZDkwNTE5MzczNTE1IjpNQkVEVExTX0VSUl9FQ1BfVkVSSUZZX0ZBSUxFRAorCitFQ0pQQUtFIHJvdW5kIG9uZTogS0tQMjogWCBub3Qgb24gdGhlIGN1cnZlCityZWFkX3JvdW5kX29uZTpNQkVEVExTX0VDSlBBS0VfQ0xJRU5UOiI0MTA0MTkwYTA3NzAwZmZhNGJlNmFlMWQ3OWVlMGYwNmFlYjU0NGNkNWFkZGFhYmVkZjcwZjg2MjMzMjEzMzJjNTRmMzU1ZjBmYmZlYzc4M2VkMzU5ZTVkMGJmNzM3N2EwZmM0ZWE3YWNlNDczYzljMTEyYjQxY2NkNDFhYzU2YTU2MTI0MTA0MzYwYTFjZWEzM2ZjZTY0MTE1NjQ1OGUwYTRlYWMyMTllOTY4MzFlNmFlYmM4OGIzZjM3NTJmOTNhMDI4MWQxYmYxZmIxMDYwNTFkYjk2OTRhOGQ2ZTg2MmE1ZWYxMzI0YTNkOWUyNzg5NGYxZWU0ZjdjNTkxOTk5NjVhOGRkNGEyMDkxODQ3ZDJkMjJkZjNlZTU1ZmFhMmEzZmIzM2ZkMmQxZTA1NWEwN2E3YzYxZWNmYjhkODBlYzAwYzJjOWViMTI0MTA0N2VhNmUzYTQ0ODcwMzdhOWUwZGJkNzkyNjJiMmNjMjczZTc3OTkzMGZjMTg0MDlhYzUzNjFjNWZlNjY5ZDcwMmUxNDc3OTBhZWI0Y2U3ZmQ2NTc1YWIwZjZjN2ZkMWMzMzU5MzlhYTg2M2JhMzdlYzkxYjdlMzJiYjAxM2JiMmE0MTA0MDlmODViM2QyMGViZDc4ODVjZTQ2NGMwOGQwNTZkNjQyOGZlNGRkOTI4N2FhMzY1ZjEzMWY0MzYwZmYzODZkODQ2ODk4YmM0YjQxNTgzYzJhNTE5N2Y2NWQ3ODc0Mjc0NmMxMmE1ZWMwYTRmZmUyZjI3MGE3NTBhMWQ4ZmI1MTYyMDkzNGQ3NGViNDNlNTRkZjQyNGZkOTYzMDZjMDExN2JmMTMxYWZhYmY5MGE5ZDMzZDExOThkOTA1MTkzNzM1MTQiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IHZhbGlkCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjQxMDQ1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjODIwZmY3MjRhOWE3MGI4OGNiODZmMjBiNDM0YzY4NjVhYTFjZDc5MDZkZDdjOWJjZTM1MjVmNTA4Mjc2ZjI2ODM2YyI6MAorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IHRyYWlsaW5nIGJ5dGUKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2NDEwNDU1MTZlYTNlNTRhMGQ1ZDhiMmNlNzg2YjM4ZDM4MzM3MDAyOWE1ZGJlNDQ1OWM5ZGQ2MDFiNDA4YTI0YWU2NDY1YzhhYzkwNWI5ZWIwM2I1ZDM2OTFjMTM5ZWY4M2YxY2Q0MjAwZjZjOWNkNGVjMzkyMjE4YTU5ZWQyNDNkM2M4MjBmZjcyNGE5YTcwYjg4Y2I4NmYyMGI0MzRjNjg2NWFhMWNkNzkwNmRkN2M5YmNlMzUyNWY1MDgyNzZmMjY4MzZjMDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IG5vIGRhdGEKK3JlYWRfcm91bmRfdHdvX2NsaToiIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBFQ1BhcmFtcyB0b28gc2hvcnQKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogRUNQYXJhbXMgbm90IG5hbWVkIGN1cnZlCityZWFkX3JvdW5kX3R3b19jbGk6IjAxMDAxNyI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogRUNQYXJhbXMgd3JvbmcgY3VydmUKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE2IjpNQkVEVExTX0VSUl9FQ1BfRkVBVFVSRV9VTkFWQUlMQUJMRQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IG5vIGRhdGEgYWZ0ZXIgRUNQYXJhbXMKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3IjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBsZW5ndGggb2YgZmlyc3QgcG9pbnQgdG9vIHNtYWxsCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBsZW5ndGggb2YgZmlyc3QgcG9pbnQgdG9vIGJpZworcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTcwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbm8gZmlyc3QgcG9pbnQgZGF0YQorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTcwMTA0IjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBmaXJzdCBwb2ludCBpcyB6ZXJvCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzAxMDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IHVua25vd24gZmlyc3QgcG9pbnQgZm9ybWF0CityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDUwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNiI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBub3RoaW5nIGFmdGVyIGZpcnN0IHBvaW50CityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbGVuZ3RoIG9mIHNlY29uZCBwb2ludCB0b28gc21hbGwKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2MDAiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IGxlbmd0aCBvZiBzZWNvbmQgcG9pbnQgdG9vIGJpZworcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA0MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTYwMSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogbm8gc2Vjb25kIHBvaW50IGRhdGEKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2MDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIGNsaWVudDogdW5rbm93biBzZWNvbmQgcG9pbnQgZm9ybWF0CityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjQxMDU1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjOCI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBub3RoaW5nIGFmdGVyIHNlY29uZCBwb2ludAorcmVhZF9yb3VuZF90d29fY2xpOiIwMzAwMTc0MTA0MGZiMjJiMWQ1ZDExMjNlMGVmOWZlYjlkOGEyZTU5MGExZjRkN2NlZDJjMmIwNjU4NmU4ZjJhMTZkNGViMmZkYTQzMjhhMjBiMDdkOGZkNjY3NjU0Y2ExOGM1NGUzMmEzMzNhMDg0NTQ1MWU5MjZlZTg4MDRmZDdhZjBhYWE3YTY0MTA0NTUxNmVhM2U1NGEwZDVkOGIyY2U3ODZiMzhkMzgzMzcwMDI5YTVkYmU0NDU5YzlkZDYwMWI0MDhhMjRhZTY0NjVjOGFjOTA1YjllYjAzYjVkMzY5MWMxMzllZjgzZjFjZDQyMDBmNmM5Y2Q0ZWMzOTIyMThhNTllZDI0M2QzYzgiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IHplcm8tbGVuZ3RoIHIKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2NDEwNDU1MTZlYTNlNTRhMGQ1ZDhiMmNlNzg2YjM4ZDM4MzM3MDAyOWE1ZGJlNDQ1OWM5ZGQ2MDFiNDA4YTI0YWU2NDY1YzhhYzkwNWI5ZWIwM2I1ZDM2OTFjMTM5ZWY4M2YxY2Q0MjAwZjZjOWNkNGVjMzkyMjE4YTU5ZWQyNDNkM2M4MDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IG5vIGRhdGEgZm9yIHIKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E2NDEwNDU1MTZlYTNlNTRhMGQ1ZDhiMmNlNzg2YjM4ZDM4MzM3MDAyOWE1ZGJlNDQ1OWM5ZGQ2MDFiNDA4YTI0YWU2NDY1YzhhYzkwNWI5ZWIwM2I1ZDM2OTFjMTM5ZWY4M2YxY2Q0MjAwZjZjOWNkNGVjMzkyMjE4YTU5ZWQyNDNkM2M4MDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBjbGllbnQ6IGNvcnJ1cHRlZCByCityZWFkX3JvdW5kX3R3b19jbGk6IjAzMDAxNzQxMDQwZmIyMmIxZDVkMTEyM2UwZWY5ZmViOWQ4YTJlNTkwYTFmNGQ3Y2VkMmMyYjA2NTg2ZThmMmExNmQ0ZWIyZmRhNDMyOGEyMGIwN2Q4ZmQ2Njc2NTRjYTE4YzU0ZTMyYTMzM2EwODQ1NDUxZTkyNmVlODgwNGZkN2FmMGFhYTdhNjQxMDQ1NTE2ZWEzZTU0YTBkNWQ4YjJjZTc4NmIzOGQzODMzNzAwMjlhNWRiZTQ0NTljOWRkNjAxYjQwOGEyNGFlNjQ2NWM4YWM5MDViOWViMDNiNWQzNjkxYzEzOWVmODNmMWNkNDIwMGY2YzljZDRlYzM5MjIxOGE1OWVkMjQzZDNjODIwZmY3MjRhOWE3MGI4OGNiODZmMjBiNDM0YzY4NjVhYTFjZDc5MDZkZDdjOWJjZTM1MjVmNTA4Mjc2ZjI2ODM2ZCI6TUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKworRUNKUEFLRSByb3VuZCB0d28gY2xpZW50OiBYIG5vdCBvbiB0aGUgY3VydmUKK3JlYWRfcm91bmRfdHdvX2NsaToiMDMwMDE3NDEwNDBmYjIyYjFkNWQxMTIzZTBlZjlmZWI5ZDhhMmU1OTBhMWY0ZDdjZWQyYzJiMDY1ODZlOGYyYTE2ZDRlYjJmZGE0MzI4YTIwYjA3ZDhmZDY2NzY1NGNhMThjNTRlMzJhMzMzYTA4NDU0NTFlOTI2ZWU4ODA0ZmQ3YWYwYWFhN2E3NDEwNDU1MTZlYTNlNTRhMGQ1ZDhiMmNlNzg2YjM4ZDM4MzM3MDAyOWE1ZGJlNDQ1OWM5ZGQ2MDFiNDA4YTI0YWU2NDY1YzhhYzkwNWI5ZWIwM2I1ZDM2OTFjMTM5ZWY4M2YxY2Q0MjAwZjZjOWNkNGVjMzkyMjE4YTU5ZWQyNDNkM2M4MjBmZjcyNGE5YTcwYjg4Y2I4NmYyMGI0MzRjNjg2NWFhMWNkNzkwNmRkN2M5YmNlMzUyNWY1MDgyNzZmMjY4MzZjIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiB2YWxpZAorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWU0MTA0MDc3ZThjMzFlMjBlNmJlZGI3NjBjMTM1OTNlNjlmMTViZTg1YzI3ZDY4Y2QwOWNjYjhjNDE4MzYwODkxN2M1YzNkNDA5ZmFjMzlmZWZlZTgyZjcyOTJkMzZmMGQyM2UwNTU5MTNmNDVhNTJiODVkZDhhMjA1MmU5ZTEyOWJiNGQyMDBmMDExZjE5NDgzNTM1YTZlODlhNTgwYzliMDAwM2JhZjIxNDYyZWNlOTFhODJjYzM4ZGJkY2FlNjBkOWM1NGMiOjAKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiB0cmFpbGluZyBieXRlCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTQxMDQwNzdlOGMzMWUyMGU2YmVkYjc2MGMxMzU5M2U2OWYxNWJlODVjMjdkNjhjZDA5Y2NiOGM0MTgzNjA4OTE3YzVjM2Q0MDlmYWMzOWZlZmVlODJmNzI5MmQzNmYwZDIzZTA1NTkxM2Y0NWE1MmI4NWRkOGEyMDUyZTllMTI5YmI0ZDIwMGYwMTFmMTk0ODM1MzVhNmU4OWE1ODBjOWIwMDAzYmFmMjE0NjJlY2U5MWE4MmNjMzhkYmRjYWU2MGQ5YzU0YzAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBubyBkYXRhCityZWFkX3JvdW5kX3R3b19zcnY6IiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbGVuZ3RoIG9mIGZvcnN0IHBvaW50IHRvbyBzbWFsbAorcmVhZF9yb3VuZF90d29fc3J2OiIwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbGVuZ3RoIG9mIGZpcnN0IHBvaW50IHRvbyBiaWcKK3JlYWRfcm91bmRfdHdvX3NydjoiMDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IG5vIGZpcnN0IHBvaW50IGRhdGEKK3JlYWRfcm91bmRfdHdvX3NydjoiMDEwNCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogZmlyc3QgcG9pbnQgaXMgemVybworcmVhZF9yb3VuZF90d29fc3J2OiIwMTAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiB1bmtub3duIGZpcnN0IHBvaW50IGZvcm1hdAorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA1NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWUiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbm90aGluZyBhZnRlciBmaXJzdCBwb2ludAorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWUiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IGxlbmd0aCBvZiBzZWNvbmQgcG9pbnQgdG9vIHNtYWxsCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBsZW5ndGggb2Ygc2Vjb25kIHBvaW50IHRvbyBiaWcKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNDY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlMDEiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IG5vIHNlY29uZCBwb2ludCBkYXRhCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTAxMDQiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ0pQQUtFIHJvdW5kIHR3byBzZXJ2ZXI6IHVua25vd24gc2Vjb25kIHBvaW50IGZvcm1hdAorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA1NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWU0MTA0MDc3ZThjMzFlMjBlNmJlZGI3NjBjMTM1OTNlNjlmMTViZTg1YzI3ZDY4Y2QwOWNjYjhjNDE4MzYwODkxN2M1YzNkNDA5ZmFjMzlmZWZlZTgyZjcyOTJkMzZmMGQyM2UwNTU5MTNmNDVhNTJiODVkZDhhMjA1MmU5ZTEyOWJiNGQiOk1CRURUTFNfRVJSX0VDUF9GRUFUVVJFX1VOQVZBSUxBQkxFCisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogbm90aGluZyBhZnRlciBzZWNvbmQgcG9pbnQKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNDY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVlNDEwNDA3N2U4YzMxZTIwZTZiZWRiNzYwYzEzNTkzZTY5ZjE1YmU4NWMyN2Q2OGNkMDljY2I4YzQxODM2MDg5MTdjNWMzZDQwOWZhYzM5ZmVmZWU4MmY3MjkyZDM2ZjBkMjNlMDU1OTEzZjQ1YTUyYjg1ZGQ4YTIwNTJlOWUxMjliYjRkIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiB6ZXJvLWxlbmd0aCByCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTQxMDQwNzdlOGMzMWUyMGU2YmVkYjc2MGMxMzU5M2U2OWYxNWJlODVjMjdkNjhjZDA5Y2NiOGM0MTgzNjA4OTE3YzVjM2Q0MDlmYWMzOWZlZmVlODJmNzI5MmQzNmYwZDIzZTA1NTkxM2Y0NWE1MmI4NWRkOGEyMDUyZTllMTI5YmI0ZDAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBubyBkYXRhIGZvciByCityZWFkX3JvdW5kX3R3b19zcnY6IjQxMDQ2OWQ1NGVlODVlOTBjZTNmMTI0Njc0MmRlNTA3ZTkzOWU4MWQxZGMxYzVjYjk4OGI1OGMzMTBjOWZkZDk1MjRkOTM3MjBiNDU1NDFjODNlZTg4NDExOTFkYTdjZWQ4NmUzMzEyZDQzNjIzYzFkNjNlNzQ5ODlhYmE0YWZmZDFlZTQxMDQwNzdlOGMzMWUyMGU2YmVkYjc2MGMxMzU5M2U2OWYxNWJlODVjMjdkNjhjZDA5Y2NiOGM0MTgzNjA4OTE3YzVjM2Q0MDlmYWMzOWZlZmVlODJmNzI5MmQzNmYwZDIzZTA1NTkxM2Y0NWE1MmI4NWRkOGEyMDUyZTllMTI5YmI0ZDIwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNKUEFLRSByb3VuZCB0d28gc2VydmVyOiBjb3JydXB0ZWQgcgorcmVhZF9yb3VuZF90d29fc3J2OiI0MTA0NjlkNTRlZTg1ZTkwY2UzZjEyNDY3NDJkZTUwN2U5MzllODFkMWRjMWM1Y2I5ODhiNThjMzEwYzlmZGQ5NTI0ZDkzNzIwYjQ1NTQxYzgzZWU4ODQxMTkxZGE3Y2VkODZlMzMxMmQ0MzYyM2MxZDYzZTc0OTg5YWJhNGFmZmQxZWU0MTA0MDc3ZThjMzFlMjBlNmJlZGI3NjBjMTM1OTNlNjlmMTViZTg1YzI3ZDY4Y2QwOWNjYjhjNDE4MzYwODkxN2M1YzNkNDA5ZmFjMzlmZWZlZTgyZjcyOTJkMzZmMGQyM2UwNTU5MTNmNDVhNTJiODVkZDhhMjA1MmU5ZTEyOWJiNGQyMDBmMDExZjE5NDgzNTM1YTZlODlhNTgwYzliMDAwM2JhZjIxNDYyZWNlOTFhODJjYzM4ZGJkY2FlNjBkOWM1NGQiOk1CRURUTFNfRVJSX0VDUF9WRVJJRllfRkFJTEVECisKK0VDSlBBS0Ugcm91bmQgdHdvIHNlcnZlcjogWCBub3Qgb24gY3VydmUKK3JlYWRfcm91bmRfdHdvX3NydjoiNDEwNDY5ZDU0ZWU4NWU5MGNlM2YxMjQ2NzQyZGU1MDdlOTM5ZTgxZDFkYzFjNWNiOTg4YjU4YzMxMGM5ZmRkOTUyNGQ5MzcyMGI0NTU0MWM4M2VlODg0MTE5MWRhN2NlZDg2ZTMzMTJkNDM2MjNjMWQ2M2U3NDk4OWFiYTRhZmZkMWVmNDEwNDA3N2U4YzMxZTIwZTZiZWRiNzYwYzEzNTkzZTY5ZjE1YmU4NWMyN2Q2OGNkMDljY2I4YzQxODM2MDg5MTdjNWMzZDQwOWZhYzM5ZmVmZWU4MmY3MjkyZDM2ZjBkMjNlMDU1OTEzZjQ1YTUyYjg1ZGQ4YTIwNTJlOWUxMjliYjRkMjAwZjAxMWYxOTQ4MzUzNWE2ZTg5YTU4MGM5YjAwMDNiYWYyMTQ2MmVjZTkxYTgyY2MzOGRiZGNhZTYwZDljNTRjIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2pwYWtlLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjanBha2UuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjZjhkYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY2pwYWtlLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTkwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2VjanBha2UuaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQpICYmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF94MVtdID0geworICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisgICAgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKKyAgICAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLCAweDIxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfeDJbXSA9IHsKKyAgICAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLAorICAgIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCisgICAgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwgMHg4MQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X3gzW10gPSB7CisgICAgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywKKyAgICAweDZkLCAweDZlLCAweDZmLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorICAgIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF94NFtdID0geworICAgIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsCisgICAgMHhjZCwgMHhjZSwgMHhjZiwgMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwKKyAgICAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLCAweGUxCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfWDFbXSA9IHsKKyAgICAweDA0LCAweGFjLCAweGNmLCAweDAxLCAweDA2LCAweGVmLCAweDg1LCAweDhmLCAweGEyLCAweGQ5LCAweDE5LCAweDMzLAorICAgIDB4MTMsIDB4NDYsIDB4ODAsIDB4NWEsIDB4NzgsIDB4YjUsIDB4OGIsIDB4YmEsIDB4ZDAsIDB4YjgsIDB4NDQsIDB4ZTUsCisgICAgMHhjNywgMHg4OSwgMHgyOCwgMHg3OSwgMHgxNCwgMHg2MSwgMHg4NywgMHhkZCwgMHgyNiwgMHg2NiwgMHhhZCwgMHhhNywKKyAgICAweDgxLCAweGJiLCAweDdmLCAweDExLCAweDEzLCAweDcyLCAweDI1LCAweDFhLCAweDg5LCAweDEwLCAweDYyLCAweDFmLAorICAgIDB4NjMsIDB4NGQsIDB4ZjEsIDB4MjgsIDB4YWMsIDB4NDgsIDB4ZTMsIDB4ODEsIDB4ZmQsIDB4NmUsIDB4ZjksIDB4MDYsCisgICAgMHgwNywgMHgzMSwgMHhmNiwgMHg5NCwgMHhhNAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWNqcGFrZV90ZXN0X1gyW10gPSB7CisgICAgMHgwNCwgMHg3ZSwgMHhhNiwgMHhlMywgMHhhNCwgMHg0OCwgMHg3MCwgMHgzNywgMHhhOSwgMHhlMCwgMHhkYiwgMHhkNywKKyAgICAweDkyLCAweDYyLCAweGIyLCAweGNjLCAweDI3LCAweDNlLCAweDc3LCAweDk5LCAweDMwLCAweGZjLCAweDE4LCAweDQwLAorICAgIDB4OWEsIDB4YzUsIDB4MzYsIDB4MWMsIDB4NWYsIDB4ZTYsIDB4NjksIDB4ZDcsIDB4MDIsIDB4ZTEsIDB4NDcsIDB4NzksCisgICAgMHgwYSwgMHhlYiwgMHg0YywgMHhlNywgMHhmZCwgMHg2NSwgMHg3NSwgMHhhYiwgMHgwZiwgMHg2YywgMHg3ZiwgMHhkMSwKKyAgICAweGMzLCAweDM1LCAweDkzLCAweDlhLCAweGE4LCAweDYzLCAweGJhLCAweDM3LCAweGVjLCAweDkxLCAweGI3LCAweGUzLAorICAgIDB4MmIsIDB4YjAsIDB4MTMsIDB4YmIsIDB4MmIKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVjanBha2VfdGVzdF9YM1tdID0geworICAgIDB4MDQsIDB4N2UsIDB4YTYsIDB4ZTMsIDB4YTQsIDB4NDgsIDB4NzAsIDB4MzcsIDB4YTksIDB4ZTAsIDB4ZGIsIDB4ZDcsCisgICAgMHg5MiwgMHg2MiwgMHhiMiwgMHhjYywgMHgyNywgMHgzZSwgMHg3NywgMHg5OSwgMHgzMCwgMHhmYywgMHgxOCwgMHg0MCwKKyAgICAweDlhLCAweGM1LCAweDM2LCAweDFjLCAweDVmLCAweGU2LCAweDY5LCAweGQ3LCAweDAyLCAweGUxLCAweDQ3LCAweDc5LAorICAgIDB4MGEsIDB4ZWIsIDB4NGMsIDB4ZTcsIDB4ZmQsIDB4NjUsIDB4NzUsIDB4YWIsIDB4MGYsIDB4NmMsIDB4N2YsIDB4ZDEsCisgICAgMHhjMywgMHgzNSwgMHg5MywgMHg5YSwgMHhhOCwgMHg2MywgMHhiYSwgMHgzNywgMHhlYywgMHg5MSwgMHhiNywgMHhlMywKKyAgICAweDJiLCAweGIwLCAweDEzLCAweGJiLCAweDJiCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlY2pwYWtlX3Rlc3RfWDRbXSA9IHsKKyAgICAweDA0LCAweDE5LCAweDBhLCAweDA3LCAweDcwLCAweDBmLCAweGZhLCAweDRiLCAweGU2LCAweGFlLCAweDFkLCAweDc5LAorICAgIDB4ZWUsIDB4MGYsIDB4MDYsIDB4YWUsIDB4YjUsIDB4NDQsIDB4Y2QsIDB4NWEsIDB4ZGQsIDB4YWEsIDB4YmUsIDB4ZGYsCisgICAgMHg3MCwgMHhmOCwgMHg2MiwgMHgzMywgMHgyMSwgMHgzMywgMHgyYywgMHg1NCwgMHhmMywgMHg1NSwgMHhmMCwgMHhmYiwKKyAgICAweGZlLCAweGM3LCAweDgzLCAweGVkLCAweDM1LCAweDllLCAweDVkLCAweDBiLCAweGY3LCAweDM3LCAweDdhLCAweDBmLAorICAgIDB4YzQsIDB4ZWEsIDB4N2EsIDB4Y2UsIDB4NDcsIDB4M2MsIDB4OWMsIDB4MTEsIDB4MmIsIDB4NDEsIDB4Y2MsIDB4ZDQsCisgICAgMHgxYSwgMHhjNSwgMHg2YSwgMHg1NiwgMHgxMgorfTsKKworLyogTG9hZCBteSBwcml2YXRlIGFuZCBwdWJsaWMga2V5cywgYW5kIHBlZXIncyBwdWJsaWMga2V5cyAqLworc3RhdGljIGludCBlY2pwYWtlX3Rlc3RfbG9hZCggbWJlZHRsc19lY2pwYWtlX2NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnhtMSwgc2l6ZV90IGxlbl94bTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp4bTIsIHNpemVfdCBsZW5feG0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqWG0xLCBzaXplX3QgbGVuX1htMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlhtMiwgc2l6ZV90IGxlbl9YbTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpYcDEsIHNpemVfdCBsZW5fWHAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqWHAyLCBzaXplX3QgbGVuX1hwMiApCit7CisgICAgaW50IHJldDsKKworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZjdHgtPnhtMSwgeG0xLCBsZW5feG0xICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmY3R4LT54bTIsIHhtMiwgbGVuX3htMiApICk7CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAmY3R4LT5ncnAsCisgICAgICAgICAgICAgICAgICAgICAmY3R4LT5YbTEsIFhtMSwgbGVuX1htMSApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggJmN0eC0+Z3JwLAorICAgICAgICAgICAgICAgICAgICAgJmN0eC0+WG0yLCBYbTIsIGxlbl9YbTIgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoICZjdHgtPmdycCwKKyAgICAgICAgICAgICAgICAgICAgICZjdHgtPlhwMSwgWHAxLCBsZW5fWHAxICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAmY3R4LT5ncnAsCisgICAgICAgICAgICAgICAgICAgICAmY3R4LT5YcDIsIFhwMiwgbGVuX1hwMiApICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2RlZmluZSBBRERfU0laRSggeCApICAgeCwgc2l6ZW9mKCB4ICkKKyNlbmRpZiAvKiBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCAmJiBNQkVEVExTX1NIQTI1Nl9DICovCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0VDSlBBS0VfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBlY2pwYWtlX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DICovCit2b2lkIHJlYWRfcm91bmRfb25lKCBpbnQgcm9sZSwgY2hhciAqZGF0YSwgaW50IHJlZl9yZXQgKQoreworICAgIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0IGN0eDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHB3W10gPSB7fTsKKyAgICB1bnNpZ25lZCBjaGFyICptc2c7CisgICAgc2l6ZV90IGxlbjsKKworICAgIG1iZWR0bHNfZWNqcGFrZV9pbml0KCAmY3R4ICk7CisKKyAgICBtc2cgPSB1bmhleGlmeV9hbGxvYyggZGF0YSwgJmxlbiApOworICAgIFRFU1RfQVNTRVJUKCBtc2cgIT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9zZXR1cCggJmN0eCwgcm9sZSwKKyAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwgcHcsIDAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY2pwYWtlX3JlYWRfcm91bmRfb25lKCAmY3R4LCBtc2csIGxlbiApID09IHJlZl9yZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjanBha2VfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfZnJlZSggbXNnICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQyAqLwordm9pZCByZWFkX3JvdW5kX3R3b19jbGkoIGNoYXIgKmRhdGEsIGludCByZWZfcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VjanBha2VfY29udGV4dCBjdHg7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBwd1tdID0ge307CisgICAgdW5zaWduZWQgY2hhciAqbXNnOworICAgIHNpemVfdCBsZW47CisKKyAgICBtYmVkdGxzX2VjanBha2VfaW5pdCggJmN0eCApOworCisgICAgbXNnID0gdW5oZXhpZnlfYWxsb2MoIGRhdGEsICZsZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbXNnICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2Vfc2V0dXAoICZjdHgsIE1CRURUTFNfRUNKUEFLRV9DTElFTlQsCisgICAgICAgICAgICAgICAgIE1CRURUTFNfTURfU0hBMjU2LCBNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjEsIHB3LCAwICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIGVjanBha2VfdGVzdF9sb2FkKCAmY3R4LAorICAgICAgICAgICAgICAgICBBRERfU0laRSggZWNqcGFrZV90ZXN0X3gxICksIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfeDIgKSwKKyAgICAgICAgICAgICAgICAgQUREX1NJWkUoIGVjanBha2VfdGVzdF9YMSApLCBBRERfU0laRSggZWNqcGFrZV90ZXN0X1gyICksCisgICAgICAgICAgICAgICAgIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfWDMgKSwgQUREX1NJWkUoIGVjanBha2VfdGVzdF9YNCApICkKKyAgICAgICAgICAgID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjanBha2VfcmVhZF9yb3VuZF90d28oICZjdHgsIG1zZywgbGVuICkgPT0gcmVmX3JldCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNqcGFrZV9mcmVlKCAmY3R4ICk7CisgICAgbWJlZHRsc19mcmVlKCBtc2cgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DICovCit2b2lkIHJlYWRfcm91bmRfdHdvX3NydiggY2hhciAqZGF0YSwgaW50IHJlZl9yZXQgKQoreworICAgIG1iZWR0bHNfZWNqcGFrZV9jb250ZXh0IGN0eDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHB3W10gPSB7fTsKKyAgICB1bnNpZ25lZCBjaGFyICptc2c7CisgICAgc2l6ZV90IGxlbjsKKworICAgIG1iZWR0bHNfZWNqcGFrZV9pbml0KCAmY3R4ICk7CisKKyAgICBtc2cgPSB1bmhleGlmeV9hbGxvYyggZGF0YSwgJmxlbiApOworICAgIFRFU1RfQVNTRVJUKCBtc2cgIT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9zZXR1cCggJmN0eCwgTUJFRFRMU19FQ0pQQUtFX1NFUlZFUiwKKyAgICAgICAgICAgICAgICAgTUJFRFRMU19NRF9TSEEyNTYsIE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMSwgcHcsIDAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggZWNqcGFrZV90ZXN0X2xvYWQoICZjdHgsCisgICAgICAgICAgICAgICAgIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfeDMgKSwgQUREX1NJWkUoIGVjanBha2VfdGVzdF94NCApLAorICAgICAgICAgICAgICAgICBBRERfU0laRSggZWNqcGFrZV90ZXN0X1gzICksIEFERF9TSVpFKCBlY2pwYWtlX3Rlc3RfWDQgKSwKKyAgICAgICAgICAgICAgICAgQUREX1NJWkUoIGVjanBha2VfdGVzdF9YMSApLCBBRERfU0laRSggZWNqcGFrZV90ZXN0X1gyICkgKQorICAgICAgICAgICAgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNqcGFrZV9yZWFkX3JvdW5kX3R3byggJmN0eCwgbXNnLCBsZW4gKSA9PSByZWZfcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY2pwYWtlX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG1zZyApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY3AuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY3AuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg1OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjcC5kYXRhCkBAIC0wLDAgKzEsMzM4IEBACitFQ1AgY3VydmUgaW5mbyAjMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2N1cnZlX2luZm86TUJFRFRMU19FQ1BfRFBfQlA1MTJSMToyODo1MTI6ImJyYWlucG9vbFA1MTJyMSIKKworRUNQIGN1cnZlIGluZm8gIzIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvOk1CRURUTFNfRUNQX0RQX0JQMzg0UjE6Mjc6Mzg0OiJicmFpbnBvb2xQMzg0cjEiCisKK0VDUCBjdXJ2ZSBpbmZvICMzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY3VydmVfaW5mbzpNQkVEVExTX0VDUF9EUF9CUDI1NlIxOjI2OjI1NjoiYnJhaW5wb29sUDI1NnIxIgorCitFQ1AgY3VydmUgaW5mbyAjNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY3VydmVfaW5mbzpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6MjU6NTIxOiJzZWNwNTIxcjEiCisKK0VDUCBjdXJ2ZSBpbmZvICM1CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMToyNDozODQ6InNlY3AzODRyMSIKKworRUNQIGN1cnZlIGluZm8gIzYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2N1cnZlX2luZm86TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOjIzOjI1Njoic2VjcDI1NnIxIgorCitFQ1AgY3VydmUgaW5mbyAjNworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY3VydmVfaW5mbzpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6MjE6MjI0OiJzZWNwMjI0cjEiCisKK0VDUCBjdXJ2ZSBpbmZvICM4CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToxOToxOTI6InNlY3AxOTJyMSIKKworRUNQIGNoZWNrIHB1YmtleSBNb250Z29tZXJ5ICMxICh0b28gYmlnKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK2VjcF9jaGVja19wdWJfbXg6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOToiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNQIGNoZWNrIHB1YmtleSBNb250Z29tZXJ5ICMyIChiaWdnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK2VjcF9jaGVja19wdWJfbXg6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOToiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiI6MAorCitFQ1Agd3JpdGUgYmluYXJ5ICMwICh6ZXJvLCBiYWQgZm9ybWF0KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3dyaXRlX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxIjoiMDEiOiIwMCI6RUNQX1BGX1VOS05PV046IjAwIjoxOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ1Agd3JpdGUgYmluYXJ5ICMxICh6ZXJvLCB1bmNvbXByZXNzZWQsIGJ1ZmZlciBqdXN0IGZpdHMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3Bfd3JpdGVfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDEiOiIwMSI6IjAwIjpNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQ6IjAwIjoxOjAKKworRUNQIHdyaXRlIGJpbmFyeSAjMiAoemVybywgYnVmZmVyIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMSI6IjAxIjoiMDAiOk1CRURUTFNfRUNQX1BGX1VOQ09NUFJFU1NFRDoiMDAiOjA6TUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKworRUNQIHdyaXRlIGJpbmFyeSAjMyAobm9uLXplcm8sIHVuY29tcHJlc3NlZCwgYnVmZmVyIGp1c3QgZml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6TUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VEOiIwNDQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMzZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6NDk6MAorCitFQ1Agd3JpdGUgYmluYXJ5ICM0IChub24temVybywgdW5jb21wcmVzc2VkLCBidWZmZXIgdG9vIHNtYWxsKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3dyaXRlX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMyI6IjZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6IjAxIjpNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQ6IjA0NDhkODA4MmEzYTFlMzExMmJjMDNhOGVmMmY2ZDQwZDBhNzdhNmY4ZTAwY2M5OTMzNmNlZWQ0ZDdjYmE0ODJlMjg4NjY5ZWUxYjY0MTU2MjZkNmYzNGQyODUwMWUwNjBjIjo0ODpNQkVEVExTX0VSUl9FQ1BfQlVGRkVSX1RPT19TTUFMTAorCitFQ1Agd3JpdGUgYmluYXJ5ICM1ICh6ZXJvLCBjb21wcmVzc2VkLCBidWZmZXIganVzdCBmaXRzKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3dyaXRlX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRDoiMDAiOjE6MAorCitFQ1Agd3JpdGUgYmluYXJ5ICM2ICh6ZXJvLCBidWZmZXIgdG9vIHNtYWxsKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3dyaXRlX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRDoiMDAiOjA6TUJFRFRMU19FUlJfRUNQX0JVRkZFUl9UT09fU01BTEwKKworRUNQIHdyaXRlIGJpbmFyeSAjNyAoZXZlbiwgY29tcHJlc3NlZCwgYnVmZmVyIGp1c3QgZml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6TUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRDoiMDI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOjI1OjAKKworRUNQIHdyaXRlIGJpbmFyeSAjOCAoZXZlbiwgY29tcHJlc3NlZCwgYnVmZmVyIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6TUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRDoiMDI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOjI0Ok1CRURUTFNfRVJSX0VDUF9CVUZGRVJfVE9PX1NNQUxMCisKK0VDUCB3cml0ZSBiaW5hcnkgIzkgKG9kZCwgY29tcHJlc3NlZCwgYnVmZmVyIGp1c3QgZml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF93cml0ZV9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI5MzExMmIyODM0NWI3ZDFkNzc5OTYxMWU0OWJlYTlkODI5MGNiMmQ3YWZlMWY5ZjMiOiIwMSI6TUJFRFRMU19FQ1BfUEZfQ09NUFJFU1NFRDoiMDM0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOjI1OjAKKworRUNQIHJlYWQgYmluYXJ5ICMxICh6ZXJvLCBpbnZhbGlkIGlsZW4pCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfcmVhZF9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMDAwIjoiMDEiOiIwMSI6IjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIHJlYWQgYmluYXJ5ICMyICh6ZXJvLCBpbnZhbGlkIGZpcnN0IGJ5dGUpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfcmVhZF9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMSI6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNQIHJlYWQgYmluYXJ5ICMzICh6ZXJvLCBPSykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9yZWFkX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAwIjoiMDEiOiIwMSI6IjAwIjowCisKK0VDUCByZWFkIGJpbmFyeSAjNCAobm9uLXplcm8sIGludmFsaWQgaWxlbikKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9yZWFkX2JpbmFyeTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjA0MDAxMTIyIjoiMDEiOiIwMSI6IjAwIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIHJlYWQgYmluYXJ5ICM1IChub24temVybywgaW52YWxpZCBmaXJzdCBieXRlKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3JlYWRfYmluYXJ5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDU0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzM2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKworRUNQIHJlYWQgYmluYXJ5ICM2IChub24temVybywgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfcmVhZF9iaW5hcnk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwNDQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMzZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6IjQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMyI6IjZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6IjAxIjowCisKK0VDUCB0bHMgcmVhZCBwb2ludCAjMSAoemVybywgaW52YWxpZCBsZW5ndGggYnl0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDIwMCI6IjAxIjoiMDEiOiIwMCI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCB0bHMgcmVhZCBwb2ludCAjMiAoemVybywgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxMDAiOiIwMSI6IjAxIjoiMDAiOjAKKworRUNQIHRscyByZWFkIHBvaW50ICMzIChub24temVybywgaW52YWxpZCBsZW5ndGggYnl0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMzAwNDQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMzZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6IjQ4ZDgwODJhM2ExZTMxMTJiYzAzYThlZjJmNmQ0MGQwYTc3YTZmOGUwMGNjOTkzMyI6IjZjZWVkNGQ3Y2JhNDgyZTI4ODY2OWVlMWI2NDE1NjI2ZDZmMzRkMjg1MDFlMDYwYyI6IjAxIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIHRscyByZWFkIHBvaW50ICM0IChub24temVybywgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjMxMDQ0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzM2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiI0OGQ4MDgyYTNhMWUzMTEyYmMwM2E4ZWYyZjZkNDBkMGE3N2E2ZjhlMDBjYzk5MzMiOiI2Y2VlZDRkN2NiYTQ4MmUyODg2NjllZTFiNjQxNTYyNmQ2ZjM0ZDI4NTAxZTA2MGMiOiIwMSI6MAorCitFQ1AgdGxzIHdyaXRlLXJlYWQgcG9pbnQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF90bHNfd3JpdGVfcmVhZF9wb2ludDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEKKworRUNQIHRscyB3cml0ZS1yZWFkIHBvaW50ICMyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY3BfdGxzX3dyaXRlX3JlYWRfcG9pbnQ6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxCisKK0VDUCB0bHMgcmVhZCBncm91cCAjMSAocmVjb3JkIHRvbyBzaG9ydCkKK21iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwOiIwMzEzIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEE6MAorCitFQ1AgdGxzIHJlYWQgZ3JvdXAgIzIgKGJhZCBjdXJ2ZV90eXBlKQorbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXA6IjAxMDAxMyI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBOjAKKworRUNQIHRscyByZWFkIGdyb3VwICMzICh1bmtub3duIGN1cnZlKQorbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXA6IjAzMDAxMCI6TUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEU6MAorCitFQ1AgdGxzIHJlYWQgZ3JvdXAgIzQgKE9LLCBidWZmZXIganVzdCBmaXRzKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXA6IjAzMDAxNyI6MDoyNTYKKworRUNQIHRscyByZWFkIGdyb3VwICM1IChPSywgYnVmZmVyIGNvbnRpbnVlcykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwOiIwMzAwMTgwMDAwIjowOjM4NAorCitFQ1AgdGxzIHdyaXRlLXJlYWQgZ3JvdXAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF90bHNfd3JpdGVfcmVhZF9ncm91cDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjEKKworRUNQIHRscyB3cml0ZS1yZWFkIGdyb3VwICMyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY3BfdGxzX3dyaXRlX3JlYWRfZ3JvdXA6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxCisKK0VDUCBjaGVjayBwcml2a2V5ICMxIChzaG9ydCB3ZWllcnN0cmFzcywgdG9vIHNtYWxsKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNQIGNoZWNrIHByaXZrZXkgIzIgKHNob3J0IHdlaWVyc3RyYXNzLCBzbWFsbGVzdCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwMSI6MAorCitFQ1AgY2hlY2sgcHJpdmtleSAjMyAoc2hvcnQgd2VpZXJzdHJhc3MsIGJpZ2dlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMwIjowCisKK0VDUCBjaGVjayBwcml2a2V5ICM0IChzaG9ydCB3ZWllcnN0cmFzcywgdG9vIGJpZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzEiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ1AgY2hlY2sgcHJpdmtleSAjNSAobW9udGdvbWVyeSwgdG9vIGJpZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ1AgY2hlY2sgcHJpdmtleSAjNiAobW9udGdvbWVyeSwgbm90IGJpZyBlbm91Z2gpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OiIzRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwIjpNQkVEVExTX0VSUl9FQ1BfSU5WQUxJRF9LRVkKKworRUNQIGNoZWNrIHByaXZrZXkgIzcgKG1vbnRnb21lcnksIG1zYiBPSykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworRUNQIGNoZWNrIHByaXZrZXkgIzggKG1vbnRnb21lcnksIGJpdCAwIHNldCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wcml2a2V5Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiOk1CRURUTFNfRVJSX0VDUF9JTlZBTElEX0tFWQorCitFQ1AgY2hlY2sgcHJpdmtleSAjOSAobW9udGdvbWVyeSwgYml0IDEgc2V0KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOToiNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDUCBjaGVjayBwcml2a2V5ICMxMCAobW9udGdvbWVyeSwgYml0IDIgc2V0KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXk6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOToiNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCI6TUJFRFRMU19FUlJfRUNQX0lOVkFMSURfS0VZCisKK0VDUCBjaGVjayBwcml2a2V5ICMxMSAobW9udGdvbWVyeSwgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleTpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5OiI3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4IjowCisKK0VDUCBjaGVjayBwdWJsaWMtcHJpdmF0ZSAjMSAoT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjAwZjEyYTEzMjA3NjAyNzBhODNjYmZmZDUzZjYwMzFlZjc2YTVkODZjOGEyMDRmMmMzMGNhOWViZjUxZjBmMGVhNyI6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjowCisKK0VDUCBjaGVjayBwdWJsaWMtcHJpdmF0ZSAjMiAoZ3JvdXAgbm9uZSkKK21iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2Ok1CRURUTFNfRUNQX0RQX05PTkU6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VDUF9EUF9OT05FOiIwMGYxMmExMzIwNzYwMjcwYTgzY2JmZmQ1M2Y2MDMxZWY3NmE1ZDg2YzhhMjA0ZjJjMzBjYTllYmY1MWYwZjBlYTciOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCBjaGVjayBwdWJsaWMtcHJpdmF0ZSAjMyAoZ3JvdXAgbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjAwZjEyYTEzMjA3NjAyNzBhODNjYmZmZDUzZjYwMzFlZjc2YTVkODZjOGEyMDRmMmMzMGNhOWViZjUxZjBmMGVhNyI6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTIiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIGNoZWNrIHB1YmxpYy1wcml2YXRlICM0IChReCBtaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2Ok1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MyI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmYiOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiMDBmMTJhMTMyMDc2MDI3MGE4M2NiZmZkNTNmNjAzMWVmNzZhNWQ4NmM4YTIwNGYyYzMwY2E5ZWJmNTFmMGYwZWE3IjoiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MiI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmYiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ1AgY2hlY2sgcHVibGljLXByaXZhdGUgIzUgKFF5IG1pc21hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXY6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZSI6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOiIwMGYxMmExMzIwNzYwMjcwYTgzY2JmZmQ1M2Y2MDMxZWY3NmE1ZDg2YzhhMjA0ZjJjMzBjYTllYmY1MWYwZjBlYTciOiIzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyIjoiNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZiI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0VDUCBjaGVjayBwdWJsaWMtcHJpdmF0ZSAjNiAod3JvbmcgUXgpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX2VjcF9jaGVja19wdWJfcHJpdjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTMiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjAwZjEyYTEzMjA3NjAyNzBhODNjYmZmZDUzZjYwMzFlZjc2YTVkODZjOGEyMDRmMmMzMGNhOWViZjUxZjBmMGVhNyI6IjM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTMiOiI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmIjpNQkVEVExTX0VSUl9FQ1BfQkFEX0lOUFVUX0RBVEEKKworRUNQIGNoZWNrIHB1YmxpYy1wcml2YXRlICM3ICh3cm9uZyBReSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2Ok1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MiI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmUiOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMToiMDBmMTJhMTMyMDc2MDI3MGE4M2NiZmZkNTNmNjAzMWVmNzZhNWQ4NmM4YTIwNGYyYzMwY2E5ZWJmNTFmMGYwZWE3IjoiMzdjYzU2ZDk3NjA5MWU1YTcyM2VjNzU5MmRmZjIwNmVlZTdjZjkwNjkxNzRkMGFkMTRiNWY3NjgyMjU5NjI5MiI6IjRlZTUwMGQ4MjMxMWZmZWEyZmQyMzQ1ZDVkMTZiZDhhODhjMjZiNzcwZDU1Y2Q4YTJhMGVmYTAxYzhiNGVkZmUiOk1CRURUTFNfRVJSX0VDUF9CQURfSU5QVVRfREFUQQorCitFQ1AgZ2VuIGtleXBhaXIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK21iZWR0bHNfZWNwX2dlbl9rZXlwYWlyOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorCitFQ1AgZ2VuIGtleXBhaXIKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVECittYmVkdGxzX2VjcF9nZW5fa2V5cGFpcjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5CisKK0VDUCBnZW4ga2V5cGFpciB3cmFwcGVyCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECittYmVkdGxzX2VjcF9nZW5fa2V5Ok1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMQorCitFQ1AgbW9kIHAxOTIgc21hbGwgKG1vcmUgdGhhbiAxOTIgYml0cywgbGVzcyBsaW1icyB0aGFuIDIgKiAxOTIgYml0cykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjAxMDAwMDAwMDAwMDAxMDMwMTAwMDAwMDAwMDAwMTAyMDEwMDAwMDAwMDAwMDEwMTAxMDAwMDAwMDAwMDAxMDAiCisKK0VDUCBtb2QgcDE5MiByZWFkYWJsZQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDEwMDAwMDAwMDAwMDEwNTAxMDAwMDAwMDAwMDAxMDQwMTAwMDAwMDAwMDAwMTAzMDEwMDAwMDAwMDAwMDEwMjAxMDAwMDAwMDAwMDAxMDEwMTAwMDAwMDAwMDAwMTAwIgorCitFQ1AgbW9kIHAxOTIgcmVhZGFibGUgd2l0aCBjYXJyeQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiRkYwMDAwMDAwMDAxMDUwMEZGMDAwMDAwMDAwMTA0MDBGRjAwMDAwMDAwMDEwMzAwRkYwMDAwMDAwMDAxMDIwMEZGMDAwMDAwMDAwMTAxMDBGRjAwMDAwMDAwMDEwMDAwIgorCitFQ1AgbW9kIHAxOTIgcmFuZG9tCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIzNkNGOTZCNDVENzA2QTA5NTREODlFNTJDRTVGMzg1MTdBMjI3MEUwMTc1ODQ5QjZGMzc0MDE1MUQyMzhDQ0FCRUY5MjE0MzdFNDc1ODgxRDgzQkI2OUU0QUEyNThFQkQiCisKK0VDUCBtb2QgcDE5MiAoZnJvbSBhIHBhc3QgZmFpbHVyZSBjYXNlKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMUFDMkQ2Rjk2QTJBNDI1RTlERDE3NzZERDgzNjhENEJCQzg2QkY0OTY0RTc5RkVBNzEzNTgzQkY5NDhCQkVGRjA5MzlGOTZGQjE5RUM0OEM1ODVCREE2QTJEMzVDNzUwIgorCitFQ1AgbW9kIHAyMjQgcmVhZGFibGUgd2l0aG91dCBjYXJyeQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiMDAwMDAwMEQwMDAwMDAwQzAwMDAwMDBCMDAwMDAwMEEwMDAwMDAwOTAwMDAwMDA4MDAwMDAwMDcwMDAwRkYwNjAwMDBGRjA1MDAwMEZGMDQwMDAwRkYwMzAwMEZGMDAyMDAwMEZGMDEwMDAwRkYwMCIKKworRUNQIG1vZCBwMjI0IHJlYWRhYmxlIHdpdGggbmVnYXRpdmUgY2FycnkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjE6IjAwMDAwMDBEMDAwMDAwMEMwMDAwMDAwQjAwMDAwMDBBMDAwMDAwMDkwMDAwMDAwODAwMDAwMDA3MDAwMDAwMDYwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDAiCisKK0VDUCBtb2QgcDIyNCByZWFkYWJsZSB3aXRoIHBvc2l0aXZlIGNhcnJ5CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiIwMDAwMDAwRDAwMDAwMDBDMDAwMDAwMEJGRkZGRkYwQUZGRkZGRjA5RkZGRkZGMDhGRkZGRkYwNzAwMDBGRjA2MDAwMEZGMDUwMDAwRkYwNDAwMDBGRjAzMDAwRkYwMDIwMDAwRkYwMTAwMDBGRjAwIgorCitFQ1AgbW9kIHAyMjQgcmVhZGFibGUgd2l0aCBmaW5hbCBuZWdhdGl2ZSBjYXJyeQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMToiRkYwMDAwMEQwMDAwMDAwQzAwMDAwMDBCMDAwMDAwMEEwMDAwMDAwOTAwMDAwMDA4MDAwMDAwMDcwMDAwMDAwNjAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMCIKKworRUNQIG1vZCBwNTIxIHZlcnkgc21hbGwKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjAxIgorCitFQ1AgbW9kIHA1MjEgc21hbGwgKDUyMiBiaXRzKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorZWNwX2Zhc3RfbW9kOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMToiMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitFQ1AgbW9kIHA1MjEgcmVhZGFibGUKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjcF9mYXN0X21vZDpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjE6IjAzRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisKK0VDUCBtb2QgcDUyMSByZWFkYWJsZSB3aXRoIGNhcnJ5CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitlY3BfZmFzdF9tb2Q6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwM0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIgorCitFQ1AgdGVzdCB2ZWN0b3JzIHNlY3AxOTJyMSByZmMgNTExNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjE6IjMyM0ZBMzE2OUQ4RTlDNjU5M0Y1OTQ3NkJDMTQyMDAwQUI1QkUwRTI0OUM0MzQyNiI6IkNENDY0ODlFQ0ZENkMxMDVFN0IzRDMyNTY2RTJCMTIyRTI0OUFCQUFERDg3MDYxMiI6IjY4ODg3QjQ4NzdERjUxREQ0REMzRDZGRDExRjBBMjZGOEZEMzg0NDMxNzkxNkU5QSI6IjYzMUY5NUJCNEE2NzYzMkM5QzQ3NkVFRTlBQjY5NUFCMjQwQTA0OTkzMDdGQ0Y2MiI6IjUxOUExMjE2ODBFMDA0NTQ2NkJBMjFERjJFRUU0N0Y1OTczQjUwMDU3N0VGMTNENSI6IkZGNjEzQUI0RDY0Q0VFM0EyMDg3NUJEQjEwRjk1M0Y2QjMwQ0EwNzJDNjBBQTU3RiI6IkFENDIwMTgyNjMzRjg1MjZCRkU5NTRBQ0RBMzc2RjA1RTVGRjRGODM3RjU0RkVCRSI6IjQzNzE1NDVFRDc3MkE1OTc0MUQwRURBMzJDNjcxMTEyQjdGRERENTE0NjFGQ0YzMiIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwMjI0cjEgcmZjIDUxMTQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxOiJCNTU4RUI2QzI4OERBNzA3QkJCNEY4RkJBRTJBQjlFOUNCNjJFM0JDNUM3NTczRTIyRTI2RDM3RiI6IjQ5REZFRjMwOUY4MTQ4OEMzMDRDRkY1QUIzRUU1QTIxNTQzNjdEQzc4MzMxNTBFMEE1MUYzRUVCIjoiNEYyQjVFRTQ1NzYyQzRGNjU0QzFBMEM2N0Y1NENGODhCMDE2QjUxQkNFM0Q3QzIyOEQ1N0FEQjQiOiJBQzNCMUFERDNEOTc3MEU2RjZBNzA4RUU5RjNCOEUwQUIzQjQ4MEU5RjI3Rjg1Qzg4QjVFNkQxOCI6IjZCM0FDOTZBOEQwQ0RFNkE1NTk5QkU4MDMyRURGMTBDMTYyRDBBOEFEMjE5NTA2RENENDJBMjA3IjoiRDQ5MUJFOTlDMjEzQTdEMUNBMzcwNkRFQkZFMzA1RjM2MUFGQ0JCMzNFMjYwOUM4QjE2MThBRDUiOiI1MjI3MkY1MEY0NkY0RURDOTE1MTU2OTA5MkY0NkRGMkQ5NkVDQzNCNkRDMTcxNEE0RUE5NDlGQSI6IjVGMzBDNkFBMzZEREM0MDNDMEFDQjcxMkJCODhGMTc2M0MzMDQ2RjZEOTE5QkQ5QzUyNDMyMkJGIgorCitFQ1AgdGVzdCB2ZWN0b3JzIHNlY3AyNTZyMSByZmMgNTExNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjE6IjgxNDI2NDE0NUYyRjU2RjJFOTZBOEUzMzdBMTI4NDk5M0ZBRjQzMkE1QUJDRTU5RTg2N0I3MjkxRDUwN0EzQUYiOiIyQUY1MDJGM0JFODk1MkYyQzlCNUE4RDQxNjBEMDlFOTcxNjVCRTUwQkM0MkFFNEE1RThEM0I0QkE4M0FFQjE1IjoiRUIwRkFGNENBOTg2QzREMzg2ODFBMEY5ODcyRDc5RDU2Nzk1QkQ0QkZGNkU2REUzQzBGNTAxNUVDRTVFRkQ4NSI6IjJDRTE3ODhFQzE5N0UwOTZEQjk1QTIwMENDMEFCMjZBMTlDRTZCQ0NBRDU2MkI4RUVFMUI1OTM3NjFDRjdGNDEiOiJCMTIwREU0QUEzNjQ5Mjc5NTM0NkU4REU2QzJDODY0NkFFMDZBQUVBMjc5RkE3NzVCM0FCMDcxNUY2Q0U1MUIwIjoiOUYxQjdFRUNFMjBEN0I1RUQ4RUM2ODVGQTNGMDcxRDgzNzI3MDI3MDkyQTg0MTEzODVDMzREREU1NzA4QjJCNiI6IkREMEY1Mzk2MjE5RDFFQTM5MzMxMDQxMkQxOUEwOEYxRjU4MTFFOURDOEVDOEVFQTdGODBEMjFDODIwQzI3ODgiOiIwMzU3RENDRDRDODA0RDBEOEQzM0FBNDJCODQ4ODM0QUE1NjA1RjlBQjBEMzcyMzlBMTE1QkJCNjQ3OTM2RjUwIgorCitFQ1AgdGVzdCB2ZWN0b3JzIHNlY3AzODRyMSByZmMgNTExNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjE6IkQyNzMzNUVBNzE2NjRBRjI0NEREMTRFOUZEMTI2MDcxNURGRDhBNzk2NTU3MUM0OEQ3MDlFRTdBNzk2MkExNTZENzA2QTkwQ0JDQjVERjI5ODZGMDVGRUFEQjkzNzZGMSI6Ijc5MzE0OEYxNzg3NjM0RDVEQTRDNkQ5MDc0NDE3RDA1RTA1N0FCNjJGODIwNTREMTBFRTZCMDQwM0Q2Mjc5NTQ3RTZBOEVBOUQxRkQ3NzQyN0QwMTZGRTI3QThCOEM2NiI6IkM2QzQxMjk0MzMxRDIzRTZGNDgwRjRGQjRDRDQwNTA0Qzk0NzM5MkU5NEY0QzNGMDZCOEYzOThCQjI5RTQyMzY4RjdBNjg1OTIzREUzQjY3QkFDRUQyMTRBMUExRDEyOCI6IjUyRDE3OTFGREI0QjcwRjg5QzBGMDBENDU2QzJGNzAyM0I2MTI1MjYyQzM2QTdERjFGODAyMzExMjFDQ0UzRDM5QkU1MkUwMEMxOTRBNDEzMkM0QTZDNzY4QkNEOTREMiI6IjVDRDQyQUI5QzQxQjUzNDdGNzRCOEQ0RUZCNzA4QjNENUIzNkRCNjU5MTUzNTlCNDRBQkMxNzY0N0I2Qjk5OTk3ODlENzJBODQ4NjVBRTJGMjIzRjEyQjVBMUFCQzEyMCI6IkUxNzE0NThGRUFBOTM5QUFBM0E4QkZBQzQ2QjQwNEJEOEY2RDVCMzQ4QzBGQTREODBDRUNBMTYzNTZDQTkzMzI0MEJERTg3MjM0MTVBOEVDRTAzNUIwRURGMzY3NTVERSI6IjVFQTFGQzRBRjcyNTZEMjA1NTk4MUIxMTA1NzVFMEE4Q0FFNTMxNjAxMzdEOTA0QzU5RDkyNkVCMUI4NDU2RTQyN0FBOEE0NTQwODg0QzM3REUxNTlBNTgwMjhBQkMwRSI6IjBDQzU5RTRCMDQ2NDE0QTgxQzhBM0JERkRDQTkyNTI2QzQ4NzY5REQ4RDMxMjdDQUE5OUIzNjMyRDE5MTM5NDJERTM2MkVBRkFBOTYyMzc5Mzc0RDlGM0YwNjY4NDFDQSIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwNTIxcjEgcmZjIDUxMTQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOiIwMTEzRjgyREE4MjU3MzVFM0Q5NzI3NjY4M0IyQjc0Mjc3QkFEMjczMzVFQTcxNjY0QUYyNDMwQ0M0RjMzNDU5Qjk2NjlFRTc4QjNGRkI5Qjg2ODMwMTVEMzQ0RENCRkVGNkZCOUFGNEM2QzQ3MEJFMjU0NTE2Q0QzQzFBMUZCNDczNjIiOiIwMUVCQjM0REQ3NTcyMUFCRjhBREM5REJFRDE3ODg5Q0JCOTc2NUQ5MEE3QzYwRjJDRUYwMDdCQjBGMkIyNkUxNDg4MUZENDQ0MkU2ODlENjFDQjJERDA0NkVFMzBFM0ZGRDIwRjlBNDVCQkRGNjQxM0Q1ODNBMkRCRjU5OTI0RkQzNUMiOiIwMEY2QjYzMkQxOTRDMDM4OEUyMkQ4NDM3RTU1OEM1NTJBRTE5NUFERkQxNTNGOTJENzQ5MDgzNTFCMkY4QzRFREE5NEVEQjA5MTZEMUI1M0MwMjBCNUVFQ0FFRDFBNUZDMzhBMjMzRTQ4MzA1ODdCQjJFRTM0ODlCM0I0MkE1QTg2QTQiOiIwMENFRTM0ODBEODY0NUExN0QyNDlGMjc3NkQyOEJBRTYxNjk1MkQxNzkxRkRCNEI3MEY3QzMzNzg3MzJBQTFCMjI5Mjg0NDhCQ0QxREMyNDk2RDQzNUIwMTA0ODA2NkVCRTRGNzI5MDNDMzYxQjFBOURDMTE5M0RDMkM5RDA4OTFCOTYiOiIwMTBFQkZBRkM2RTg1RTA4RDI0QkZGRkNDMUE0NTExREIwRTYzNEJFRUIxQjZERUM4QzU5MzlBRTQ0NzY2MjAxQUY2MjAwNDMwQkE5N0M4QUM2QTBFOUYwOEIzM0NFN0U5RkVFQjVCQTRFRTVFMEQ4MTUxMEMyNDI5NUI4QTA4RDAyMzUiOiIwMEE0QTZFQzMwMERGOUUyNTdCMDM3MkI1RTdBQkZFRjA5MzQzNjcxOUE3Nzg4N0VCQjBCMThDRjgwOTlCOUY0MjEyQjZFMzBBMTQxOUMxOEUwMjlEMzY4NjNDQzlENDQ4RjREQkE0RDJBMEU2MDcxMUJFNTcyOTE1RkJENEZFRjI2OTUiOiIwMENERUE4OTYyMUNGQTQ2QjEzMkY5RTRDRkUyMjYxQ0RFMkQ0MzY4RUI1NjU2NjM0QzdDQzk4QzdBMDBDREU1NEVEMTg2NkEwREQzRTYxMjZDOUQyRjg0NURBRkY4MkNFQjFEQTA4RjVEODc1MjFCQjBFQkVDQTc3OTExMTY5QzIwQ0MiOiIwMEY5QTcxNjQxMDI5QjdGQzFBODA4QUQwN0NENDg2MUU4Njg2MTRCODY1QUZCRUNBQjFGMkJENEQ4QjU1RUJDQjVFM0E1MzE0M0NFQjJDNTExQjFBRTBBRjVBQzgyN0Y2MEYyRkQ4NzI1NjVBQzVDQTBBMTY0MDM4RkU5ODBBN0U0QkQiCisKK0VDUCB0ZXN0IHZlY3RvcnMgYnJhaW5wb29sUDI1NnIxIHJmYyA3MDI3CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9CUDI1NlIxOiI4MURCMUVFMTAwMTUwRkYyRUEzMzhENzA4MjcxQkUzODMwMENCNTQyNDFENzk5NTBGNzdCMDYzMDM5ODA0RjFEIjoiNDQxMDZFOTEzRjkyQkMwMkExNzA1RDk5NTNBODQxNERCOTVFMUFBQTQ5RTgxRDlFODVGOTI5QThFMzEwMEJFNSI6IjhBQjQ4NDZGMTFDQUNDQjczQ0U0OUNCREQxMjBGNUE5MDBBNjlGRDMyQzI3MjIyM0Y3ODlFRjEwRUIwODlCREMiOiI1NUU0MEJDNDFFMzdFM0UyQUQyNUMzQzY2NTQ1MTFGRkE4NDc0QTkxQTAwMzIwODc1OTM4NTJEM0U3RDc2QkQzIjoiOEQyRDY4OEM2Q0Y5M0UxMTYwQUQwNENDNDQyOTExN0RDMkM0MTgyNUUxRTlGQ0EwQURERDM0RTZGMUIzOUY3QiI6Ijk5MEM1NzUyMDgxMkJFNTEyNjQxRTQ3MDM0ODMyMTA2QkM3RDNFOEREMEU0QzdGMTEzNkQ3MDA2NTQ3Q0VDNkEiOiI4OUFGQzM5RDQxRDNCMzI3ODE0QjgwOTQwQjA0MjU5MEY5NjU1NkVDOTFFNkFFNzkzOUJDRTMxRjNBMThCRjJCIjoiNDlDMjc4NjhGNEVDQTIxNzlCRkQ3RDU5QjFFM0JGMzRDMURCREU2MUFFMTI5MzE2NDhGNDNFNTk2MzI1MDRERSIKKworRUNQIHRlc3QgdmVjdG9ycyBicmFpbnBvb2xQMzg0cjEgcmZjIDcwMjcKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQlAzODRSMV9FTkFCTEVECitlY3BfdGVzdF92ZWN0Ok1CRURUTFNfRUNQX0RQX0JQMzg0UjE6IjFFMjBGNUUwNDhBNTg4NkYxRjE1N0M3NEU5MUJERTJCOThDOEI1MkQ1OEU1MDAzRDU3MDUzRkM0QjBCRDY1RDZGMTVFQjVEMUVFMTYxMERGODcwNzk1MTQzNjI3RDA0MiI6IjY4QjY2NUREOTFDMTk1ODAwNjUwQ0REMzYzQzYyNUY0RTc0MkU4MTM0NjY3Qjc2N0IxQjQ3Njc5MzU4OEY4ODVBQjY5OEM4NTJENEE2RTc3QTI1MkQ2MzgwRkNBRjA2OCI6IjU1QkM5MUEzOUM5RUMwMURFRTM2MDE3QjdENjczQTkzMTIzNkQyRjFGNUM4Mzk0MkQwNDlFM0ZBMjA2MDc0OTNFMEQwMzhGRjJGRDMwQzJBQjY3RDE1Qzg1RjdGQUE1OSI6IjAzMjY0MEJDNjAwM0M1OTI2MEY3MjUwQzNEQjU4Q0U2NDdGOThFMTI2MEFDQ0U0QUNEQTNERDg2OUY3NEUwMUY4QkE1RTAzMjQzMDlEQjZBOTgzMTQ5N0FCQUM5NjY3MCI6IjRENDQzMjZGMjY5QTU5N0E1QjU4QkJBNTY1REE1NTU2RUQ3RkQ5QThBOUVCNzZDMjVGNDZEQjY5RDE5REM4Q0U2QUQxOEU0MDRCMTU3MzhCMjA4NkRGMzdFNzFEMUVCNCI6IjYyRDY5MjEzNkRFNTZDQkU5M0JGNUZBMzE4OEVGNThCQzhBM0EwRUM2QzFFMTUxQTIxMDM4QTQyRTkxODUzMjlCNUIyNzU5MDNEMTkyRjhENEUxRjMyRkU5Q0M3OEM0OCI6IjBCRDlEM0E3RUEwQjNENTE5RDA5RDhFNDhEMDc4NUZCNzQ0QTZCMzU1RTYzMDRCQzUxQzIyOUZCQkNFMjM5QkJBREY2NDAzNzE1QzM1RDRGQjJBNTQ0NEY1NzVENEY0MiI6IjBERjIxMzQxN0VCRTREOEU0MEE1Rjc2RjY2QzU2NDcwQzQ4OUEzNDc4RDE0NkRFQ0Y2REYwRDk0QkFFOUU1OTgxNTcyOTBGODc1NjA2Njk3NUYxREIzNEIyMzI0QjdCRCIKKworRUNQIHRlc3QgdmVjdG9ycyBicmFpbnBvb2xQNTEycjEgcmZjIDcwMjcKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECitlY3BfdGVzdF92ZWN0Ok1CRURUTFNfRUNQX0RQX0JQNTEyUjE6IjE2MzAyRkYwREJCQjVBOEQ3MzNEQUI3MTQxQzFCNDVBQ0JDODcxNTkzOTY3N0Y2QTU2ODUwQTM4QkQ4N0JENTlCMDlFODAyNzk2MDlGRjMzM0VCOUQ0QzA2MTIzMUZCMjZGOTJFRUIwNDk4MkE1RjFEMTc2NENBRDU3NjY1NDIyIjoiMEE0MjA1MTdFNDA2QUFDMEFDRENFOTBGQ0Q3MTQ4NzcxOEQzQjk1M0VGRDdGQkVDNUY3RjI3RTI4QzYxNDk5OTkzOTdFOTFFMDI5RTA2NDU3REIyRDNFNjQwNjY4QjM5MkMyQTdFNzM3QTdGMEJGMDQ0MzZEMTE2NDBGRDA5RkQiOiI3MkU2ODgyRThEQjI4QUFEMzYyMzdDRDI1RDU4MERCMjM3ODM5NjFDOERDNTJERkEyRUMxMzhBRDQ3MkEwRkNFRjM4ODdDRjYyQjYyM0IyQTg3REU1QzU4ODMwMUVBM0U1RkMyNjlCMzczQjYwNzI0RjVFODJBNkFEMTQ3RkRFNyI6IjIzMEUxOEUxQkNDODhBMzYyRkE1NEU0RUEzOTAyMDA5MjkyRjdGODAzMzYyNEZENDcxQjVEOEFDRTQ5RDEyQ0ZBQkJDMTk5NjNEQUI4RTJGMUVCQTAwQkZGQjI5RTRENzJEMTNGMjIyNDU2MkY0MDVDQjgwNTAzNjY2QjI1NDI5IjoiOUQ0NUY2NkRFNUQ2N0UyRTZEQjZFOTNBNTlDRTBCQjQ4MTA2MDk3RkY3OEEwODFERTc4MUNEQjMxRkNFOENDQkFBRUE4REQ0MzIwQzQxMTlGMUU5Q0Q0MzdBMkVBQjM3MzFGQTk2NjhBQjI2OEQ4NzFERURBNTVBNTQ3MzE5OUYiOiIyRkRDMzEzMDk1QkNERDVGQjNBOTE2MzZGMDdBOTU5QzhFODZCNTYzNkExRTkzMEU4Mzk2MDQ5Q0I0ODE5NjFEMzY1Q0MxMTQ1M0EwNkM3MTk4MzU0NzVCMTJDQjUyRkMzQzM4M0JDRTM1RTI3RUYxOTQ1MTJCNzE4NzYyODVGQSI6IkE3OTI3MDk4NjU1RjFGOTk3NkZBNTBBOUQ1NjY4NjVEQzUzMDMzMTg0NjM4MUM4NzI1NkJBRjMyMjYyNDRCNzZEMzY0MDNDMDI0RDdCQkYwQUEwODAzRUFGRjQwNUQzRDI0RjExQTlCNUMwQkVGNjc5RkUxNDU0QjIxQzRDRDFGIjoiN0RCNzFDM0RFRjYzMjEyODQxQzQ2M0U4ODFCRENGMDU1NTIzQkQzNjgyNDBFNkMzMTQzQkQ4REVGOEIzQjMyMjNCOTVFMEY1MzA4MkZGNUU0MTJGNDIyMjUzN0E0M0RGMUM2RDI1NzI5RERCNTE2MjBBODMyQkU2QTI2NjgwQTIiCisKK0VDUCB0ZXN0IHZlY3RvcnMgQ3VydmUyNTUxOQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQKK2VjcF90ZXN0X3ZlY194Ok1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTk6IjVBQzk5RjMzNjMyRTVBNzY4REU3RTgxQkY4NTRDMjdDNDZFM0ZCRjJBQkJBQ0QyOUVDNEFGRjUxNzM2OUM2NjAiOiIwNTdFMjNFQTlGMUNCRThBMjcxNjhGNkU2OTZBNzkxREU2MUREM0FGN0FDRDRFRUFDQzZFN0JBNTE0RkRBODYzIjoiNDdEQzNEMjE0MTc0ODIwRTExNTRCNDlCQzZDREIyQUJENDVFRTk1ODE3MDU1RDI1NUFBMzU4MzFCNzBEMzI2MCI6IjZFQjg5REE5MTk4OUFFMzdDN0VBQzc2MThEOUU1QzQ5NTFEQkExRDczQzI4NUFFMUNEMjZBODU1MDIwRUVGMDQiOiI2MTQ1MENEOThFMzYwMTZCNTg3NzZBODk3QTlGMEFFRjczOEI5OUYwOTQ2OEI4RDZCODUxMTE4NEQ1MzQ5NEFCIgorCitFQ1AgdGVzdCB2ZWN0b3JzIHNlY3AxOTJrMQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9EUF9TRUNQMTkySzFfRU5BQkxFRAorZWNwX3Rlc3RfdmVjdDpNQkVEVExTX0VDUF9EUF9TRUNQMTkySzE6IkQxRTEzQTM1OUY2RTBGMDY5ODc5MTkzOEU2RDYwMjQ2MDMwQUU0QjBEOEQ0RTlERSI6IjI4MUJDQTk4MkYxODdFRDMwQUQ1RTA4ODQ2MUVCRTBBNUZBREJCNjgyNTQ2REY3OSI6IjNGNjhBOEU5NDQxRkI5M0E0REQ0OENCNzBCNTA0RkNDOUFBMDE5MDJFRjVCRTBGMyI6IkJFOTdDNUQyQTFBOTREMDgxRTNGQUNFNTNFNjVBMjcxMDhCNzQ2N0JERjU4REU0MyI6IjVFQjM1RTkyMkNENjkzRjc5NDcxMjRGNTkyMDAyMkM0ODkxQzA0RjZBOEI4RENCMiI6IjYwRUNGNzNEMEZDNDNFMEM0MkU4RTE1NUZGRTM5RjlGMEI1MzFGODdCMzRCNkMzQyI6IjM3MkY1QzVEMEUxODMxM0M4MkFFRjk0MEVDM0FGRUUyNjA4N0E0NkYxRUJBRTkyMyI6IkQ1QTlGOTE4MkVDMDlDRUFFQTVGNTdFQTEwMjI1RUM3N0ZBNDQxNzQ1MTE5ODVGRCIKKworRUNQIHRlc3QgdmVjdG9ycyBzZWNwMjI0azEKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQKK2VjcF90ZXN0X3ZlY3Q6TUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxOiI4RUFEOUIyODE5QTNDMjc0NkIzRURDMUUwRDMwRjIzMjcxQ0RBQzA0OEMwNjE1Qzk2MUIxQTlEMyI6IkRFRTBBNzVFRjI2Q0Y4RjUwMURCODA4MDdBM0EwOTA4RTVDRjAxODUyNzA5QzFEMzVCMzE0MjhCIjoiMjc2RDJCODE3OTE4RjdDRDFEQTVDQ0EwODFFQzRCNjJDRDI1NUUwQUNEQzlGODVGQThDNTJDQUMiOiJBQjdFNzBBRURBNjhBMTc0RUNDMUYzODAwNTYxQjJENEZBQkU5N0M1RDJBMUE5NEQwODFFM0ZBQyI6IkQyRTk0QjAwRkQzMDIwMUM0MEVERjczQjEzNzQyNzkxNjY4N0FFQTE5MzVCMjc3QTU5NjBERDFDIjoiREU3MjhBNjE0QjE3RDkxRUIzQ0IyQzE3REExOTU1NjJCNjI4MTU4NTk4NjMzMkIzRTEyREEwRUQiOiJCNjZCNjczRDI5MDM4QTM0ODdBMkQ5QzEwQ0RDRTY3NjQ2RjdDMzlDOTg0RUJFOUU4Nzk1QUQzQyI6IjkyOEM2MTQ3QUY1RUU0QjU0RkE2RUNGNzdCNzBDQTNGRUU1RjQxODJEQjA1Nzg3OEYxMjlERiI6CisKK0VDUCB0ZXN0IHZlY3RvcnMgc2VjcDI1NmsxCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVECitlY3BfdGVzdF92ZWN0Ok1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMToiOTIzQzZENDc1NkNEOTQwQ0QxRTEzQTM1OUY2RTBGMDY5ODc5MTkzOEU2RDYwMjQ2MDMwQUU0QjBEOEQ0RTlERSI6IjIwQTg2NUIyOTVFOTNDNUIwOTBGMzI0Qjg0RDdBQzc1MjZBQTFDRkU4NkREODBFNzkyQ0VDQ0QxNkI2NTdENTUiOiIzOEFDODcxNDFBNDg1NEE4REZEODczMzNFMTA3QjYxNjkyMzIzNzIxRkUyRUFENkU1MjIwNkZFNDcxQTQ3NzFCIjoiNEY1MDM2QThFRDU4MDlBQjdFNzBBRURBNjhBMTc0RUNDMUYzODAwNTYxQjJENEZBQkU5N0M1RDJBMUE5NEQwOCI6IjAyOUY1RDJDQzVBMkM3RTUzOEZCQTMyMTQzOUI0RUM4REQ3OUI3RkVCOUMwQThBNTExNEVFQTM5ODU2RTIyRTgiOiIxNjUxNzFBRkMzNDExQTQyN0YyNEZEREUxMTkyQTU1MUM5MDk4M0VCNDIxQkM5ODJBQjRDRjRFMjFGMThGMDRCIjoiRTRCNUI1MzdEM0FDRUE3NjI0RjJFOUMxODVCRkZEODBCQzcwMzVFNTE1RjMzRTBENENGQUU3NDdGRDIwMDM4RSI6IjJCQzY4NUI3RENEQkM2OTRGNUUwMzZDNEVBRTlCRkI0ODlEN0JGODk0MEM0NjgxRjczNEI3MUQ2ODUwMTUxNEMiCisKK0VDUCBzZWxmdGVzdAorZWNwX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VjcC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY3AuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlNjFlYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lY3AuZnVuY3Rpb24KQEAgLTAsMCArMSw1MTIgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisKKyNkZWZpbmUgRUNQX1BGX1VOS05PV04gICAgIC0xCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvKCBpbnQgaWQsIGludCB0bHNfaWQsIGludCBzaXplLCBjaGFyICpuYW1lICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpieV9pZCwgKmJ5X3RscywgKmJ5X25hbWU7CisKKyAgICBieV9pZCAgID0gbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggaWQgICAgICk7CisgICAgYnlfdGxzICA9IG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV90bHNfaWQoIHRsc19pZCApOworICAgIGJ5X25hbWUgPSBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvX2Zyb21fbmFtZSggICBuYW1lICAgKTsKKyAgICBURVNUX0FTU0VSVCggYnlfaWQgICAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQoIGJ5X3RscyAgIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCBieV9uYW1lICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBieV9pZCA9PSBieV90bHMgICk7CisgICAgVEVTVF9BU1NFUlQoIGJ5X2lkID09IGJ5X25hbWUgKTsKKworICAgIFRFU1RfQVNTRVJUKCBieV9pZC0+Yml0X3NpemUgPT0gc2l6ZSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY3BfY2hlY2tfcHViX214KCBpbnQgZ3JwX2lkLCBjaGFyICprZXlfaGV4LCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUDsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGdycF9pZCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlAuWCwgMTYsIGtleV9oZXggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZQLlosIDEgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmUCApID09IHJldCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY3BfdGVzdF92ZWN0KCBpbnQgaWQsIGNoYXIgKmRBX3N0ciwgY2hhciAqeEFfc3RyLCBjaGFyICp5QV9zdHIsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRCX3N0ciwgY2hhciAqeEJfc3RyLCBjaGFyICp5Ql9zdHIsIGNoYXIgKnhaX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqeVpfc3RyICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUjsKKyAgICBtYmVkdGxzX21waSBkQSwgeEEsIHlBLCBkQiwgeEIsIHlCLCB4WiwgeVo7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZkQSApOyBtYmVkdGxzX21waV9pbml0KCAmeEEgKTsgbWJlZHRsc19tcGlfaW5pdCggJnlBICk7IG1iZWR0bHNfbXBpX2luaXQoICZkQiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZ4QiApOyBtYmVkdGxzX21waV9pbml0KCAmeUIgKTsgbWJlZHRsc19tcGlfaW5pdCggJnhaICk7IG1iZWR0bHNfbXBpX2luaXQoICZ5WiApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmZ3JwLkcgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkQSwgMTYsIGRBX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ4QSwgMTYsIHhBX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ5QSwgMTYsIHlBX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkQiwgMTYsIGRCX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ4QiwgMTYsIHhCX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ5QiwgMTYsIHlCX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ4WiwgMTYsIHhaX3N0ciApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZ5WiwgMTYsIHlaX3N0ciApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmZEEsICZncnAuRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5YLCAmeEEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlksICZ5QSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmUiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJmRCLCAmUiwgTlVMTCwgTlVMTCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIuWCwgJnhaICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUi5ZLCAmeVogKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlIgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfbXVsKCAmZ3JwLCAmUiwgJmRCLCAmZ3JwLkcsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4QiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIuWSwgJnlCICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZSICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmZEEsICZSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4WiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIuWSwgJnlaICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZSICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmZEEgKTsgbWJlZHRsc19tcGlfZnJlZSggJnhBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ5QSApOyBtYmVkdGxzX21waV9mcmVlKCAmZEIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmeEIgKTsgbWJlZHRsc19tcGlfZnJlZSggJnlCICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ4WiApOyBtYmVkdGxzX21waV9mcmVlKCAmeVogKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNwX3Rlc3RfdmVjX3goIGludCBpZCwgY2hhciAqZEFfaGV4LCBjaGFyICp4QV9oZXgsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpkQl9oZXgsIGNoYXIgKnhCX2hleCwgY2hhciAqeFNfaGV4ICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUjsKKyAgICBtYmVkdGxzX21waSBkQSwgeEEsIGRCLCB4QiwgeFM7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOyBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmUiApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZkQSApOyBtYmVkdGxzX21waV9pbml0KCAmeEEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZEIgKTsgbWJlZHRsc19tcGlfaW5pdCggJnhCICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnhTICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4MDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZncnAsICZncnAuRyApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmRBLCAxNiwgZEFfaGV4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmRCLCAxNiwgZEJfaGV4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnhBLCAxNiwgeEFfaGV4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnhCLCAxNiwgeEJfaGV4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnhTLCAxNiwgeFNfaGV4ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZkQSwgJmdycC5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4QSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmZEIsICZSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4UyApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9tdWwoICZncnAsICZSLCAmZEIsICZncnAuRywgTlVMTCwgTlVMTCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZ3JwLCAmUiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIuWCwgJnhCICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX211bCggJmdycCwgJlIsICZkQSwgJlIsIE5VTEwsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLlgsICZ4UyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2ZyZWUoICZSICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJmRBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZ4QSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkQiApOyBtYmVkdGxzX21waV9mcmVlKCAmeEIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmeFMgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZWNwX2Zhc3RfbW9kKCBpbnQgaWQsIGNoYXIgKk5fc3RyICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19tcGkgTiwgUjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZOICk7IG1iZWR0bHNfbXBpX2luaXQoICZSICk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmTiwgMTYsIE5fc3RyICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggZ3JwLm1vZHAgIT0gTlVMTCApOworCisgICAgLyoKKyAgICAgKiBTdG9yZSBjb3JyZWN0IHJlc3VsdCBiZWZvcmUgd2UgdG91Y2ggTgorICAgICAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmUiwgJk4sICZncnAuUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBncnAubW9kcCggJk4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2JpdGxlbiggJk4gKSA8PSBncnAucGJpdHMgKyAzICk7CisKKyAgICAvKgorICAgICAqIFVzZSBtb2QgcmF0aGVyIHRoYW4gYWRkaXRpb24vc3VidHJhY3Rpb24gaW4gY2FzZSBwcmV2aW91cyB0ZXN0IGZhaWxzCisgICAgICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZOLCAmTiwgJmdycC5QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmTiwgJlIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJk4gKTsgbWJlZHRsc19tcGlfZnJlZSggJlIgKTsKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVjcF93cml0ZV9iaW5hcnkoIGludCBpZCwgY2hhciAqeCwgY2hhciAqeSwgY2hhciAqeiwgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0LCBpbnQgYmxlbiwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFA7CisgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XSwgc3RyWzUxMl07CisgICAgc2l6ZV90IG9sZW47CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgIG1lbXNldCggc3RyLCAwLCBzaXplb2YoIHN0ciApICk7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZQICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZQLlgsIDE2LCB4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlAuWSwgMTYsIHkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmUC5aLCAxNiwgeiApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9wb2ludF93cml0ZV9iaW5hcnkoICZncnAsICZQLCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGVuLCBidWYsIGJsZW4gKSA9PSByZXQgKTsKKworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIHN0ciwgYnVmLCBvbGVuICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBzdHIsIG91dCApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOyBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY3BfcmVhZF9iaW5hcnkoIGludCBpZCwgY2hhciAqaW5wdXQsIGNoYXIgKngsIGNoYXIgKnksIGNoYXIgKnosCisgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFA7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWjsKKyAgICBpbnQgaWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlAgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgMTYsIHggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgMTYsIHkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWiwgMTYsIHogKSA9PSAwICk7CisKKyAgICBpbGVuID0gdW5oZXhpZnkoIGJ1ZiwgaW5wdXQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggJmdycCwgJlAsIGJ1ZiwgaWxlbiApID09IHJldCApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC5YLCAmWCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLlksICZZICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlAuWiwgJlogKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX2VjcF90bHNfcmVhZF9wb2ludCggaW50IGlkLCBjaGFyICppbnB1dCwgY2hhciAqeCwgY2hhciAqeSwgY2hhciAqeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19lY3BfcG9pbnQgUDsKKyAgICBtYmVkdGxzX21waSBYLCBZLCBaOworICAgIHNpemVfdCBpbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmJ1ZiA9IGJ1ZjsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7IG1iZWR0bHNfZWNwX3BvaW50X2luaXQoICZQICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlogKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIDE2LCB4ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIDE2LCB5ICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlosIDE2LCB6ICkgPT0gMCApOworCisgICAgaWxlbiA9IHVuaGV4aWZ5KCBidWYsIGlucHV0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoICZncnAsICZQLCAmdmJ1ZiwgaWxlbiApID09IHJldCApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmUC5YLCAmWCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZQLlksICZZICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlAuWiwgJlogKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCAqdmJ1ZiA9PSAweDAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsgbWJlZHRsc19lY3BfcG9pbnRfZnJlZSggJlAgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlY3BfdGxzX3dyaXRlX3JlYWRfcG9pbnQoIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IHB0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmJ1ZjsKKyAgICBzaXplX3Qgb2xlbjsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9pbml0KCAmcHQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZ3JwLCBpZCApID09IDAgKTsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBzaXplb2YoIGJ1ZiApICk7IHZidWYgPSBidWY7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggJmdycCwgJmdycC5HLAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VELCAmb2xlbiwgYnVmLCAyNTYgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmZ3JwLCAmcHQsICZ2YnVmLCBvbGVuICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfRUNQX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICBURVNUX0FTU0VSVCggdmJ1ZiA9PSBidWYgKyBvbGVuICk7CisKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOyB2YnVmID0gYnVmOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfcG9pbnQoICZncnAsICZncnAuRywKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FQ1BfUEZfVU5DT01QUkVTU0VELCAmb2xlbiwgYnVmLCAyNTYgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmZ3JwLCAmcHQsICZ2YnVmLCBvbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwLkcuWCwgJnB0LlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZncnAuRy5ZLCAmcHQuWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJmdycC5HLlosICZwdC5aICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCB2YnVmID09IGJ1ZiArIG9sZW4gKTsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBzaXplb2YoIGJ1ZiApICk7IHZidWYgPSBidWY7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3NldF96ZXJvKCAmcHQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggJmdycCwgJnB0LAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VDUF9QRl9DT01QUkVTU0VELCAmb2xlbiwgYnVmLCAyNTYgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc19yZWFkX3BvaW50KCAmZ3JwLCAmcHQsICZ2YnVmLCBvbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9pc196ZXJvKCAmcHQgKSApOworICAgIFRFU1RfQVNTRVJUKCB2YnVmID09IGJ1ZiArIG9sZW4gKTsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCBzaXplb2YoIGJ1ZiApICk7IHZidWYgPSBidWY7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3NldF96ZXJvKCAmcHQgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3Rsc193cml0ZV9wb2ludCggJmdycCwgJnB0LAorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VDUF9QRl9VTkNPTVBSRVNTRUQsICZvbGVuLCBidWYsIDI1NiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfdGxzX3JlYWRfcG9pbnQoICZncnAsICZwdCwgJnZidWYsIG9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2lzX3plcm8oICZwdCApICk7CisgICAgVEVTVF9BU1NFUlQoIHZidWYgPT0gYnVmICsgb2xlbiApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmcHQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAoIGNoYXIgKnJlY29yZCwgaW50IHJlc3VsdCwgaW50IGJpdHMgKQoreworICAgIG1iZWR0bHNfZWNwX2dyb3VwIGdycDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMF07CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmJ1ZiA9IGJ1ZjsKKyAgICBpbnQgbGVuLCByZXQ7CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWVtc2V0KCBidWYsIDB4MDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIGxlbiA9IHVuaGV4aWZ5KCBidWYsIHJlY29yZCApOworCisgICAgcmV0ID0gbWJlZHRsc19lY3BfdGxzX3JlYWRfZ3JvdXAoICZncnAsICZ2YnVmLCBsZW4gKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJldCA9PSAwKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2JpdGxlbiggJmdycC5QICkgPT0gKHNpemVfdCkgYml0cyApOworICAgICAgICBURVNUX0FTU0VSVCggKnZidWYgPT0gMHgwMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9mcmVlKCAmZ3JwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVjcF90bHNfd3JpdGVfcmVhZF9ncm91cCggaW50IGlkICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnAxLCBncnAyOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwXTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp2YnVmID0gYnVmOworICAgIHNpemVfdCBsZW47CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAxICk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfaW5pdCggJmdycDIgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMHgwMCwgc2l6ZW9mKCBidWYgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAxLCBpZCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF90bHNfd3JpdGVfZ3JvdXAoICZncnAxLCAmbGVuLCBidWYsIDEwICkgPT0gMCApOworICAgIHJldCA9IG1iZWR0bHNfZWNwX3Rsc19yZWFkX2dyb3VwKCAmZ3JwMiwgJnZidWYsIGxlbiApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmZ3JwMS5OLCAmZ3JwMi5OICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggZ3JwMS5pZCA9PSBncnAyLmlkICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAxICk7CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycDIgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggaW50IGlkLCBjaGFyICprZXlfaGV4LCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VjcF9ncm91cCBncnA7CisgICAgbWJlZHRsc19tcGkgZDsKKworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2luaXQoICZncnAgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZncnAsIGlkICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmQsIDE2LCBrZXlfaGV4ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoICZncnAsICZkICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19lY3BfZ3JvdXBfZnJlZSggJmdycCApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfZWNwX2NoZWNrX3B1Yl9wcml2KCBpbnQgaWRfcHViLCBjaGFyICpReF9wdWIsIGNoYXIgKlF5X3B1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQsIGNoYXIgKmQsIGNoYXIgKlF4LCBjaGFyICpReSwgaW50IHJldCApCit7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpciBwdWIsIHBydjsKKworICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggJnB1YiApOworICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggJnBydiApOworCisgICAgaWYoIGlkX3B1YiAhPSBNQkVEVExTX0VDUF9EUF9OT05FICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZwdWIuZ3JwLCBpZF9wdWIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfc3RyaW5nKCAmcHViLlEsIDE2LCBReF9wdWIsIFF5X3B1YiApID09IDAgKTsKKworICAgIGlmKCBpZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZwcnYuZ3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9zdHJpbmcoICZwcnYuUSwgMTYsIFF4LCBReSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuZCwgMTYsIGQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHViX3ByaXYoICZwdWIsICZwcnYgKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZwdWIgKTsKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZwcnYgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY3BfZ3JvdXAgZ3JwOworICAgIG1iZWR0bHNfZWNwX3BvaW50IFE7CisgICAgbWJlZHRsc19tcGkgZDsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pbml0KCAmZ3JwICk7CisgICAgbWJlZHRsc19lY3BfcG9pbnRfaW5pdCggJlEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmZCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAweDAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmdycCwgaWQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfZ2VuX2tleXBhaXIoICZncnAsICZkLCAmUSwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkKKyAgICAgICAgICAgICAgICAgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmdycCwgJlEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3ByaXZrZXkoICZncnAsICZkICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfZWNwX2dyb3VwX2ZyZWUoICZncnAgKTsKKyAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmUSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZkICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfZWNwX2dlbl9rZXkoIGludCBpZCApCit7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpciBrZXk7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCAma2V5ICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4MDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9nZW5fa2V5KCBpZCwgJmtleSwgJnJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2NoZWNrX3B1YmtleSggJmtleS5ncnAsICZrZXkuUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfY2hlY2tfcHJpdmtleSggJmtleS5ncnAsICZrZXkuZCApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZrZXkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBlY3Bfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VudHJvcHkuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lbnRyb3B5LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkZmFlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lbnRyb3B5LmRhdGEKQEAgLTAsMCArMSw2MSBAQAorQ3JlYXRlIE5WIHNlZWRfZmlsZQorbnZfc2VlZF9maWxlX2NyZWF0ZToKKworRW50cm9weSB3cml0ZS91cGRhdGUgc2VlZCBmaWxlCitlbnRyb3B5X3NlZWRfZmlsZToiZGF0YV9maWxlcy9lbnRyb3B5X3NlZWQiOjAKKworRW50cm9weSB3cml0ZS91cGRhdGUgc2VlZCBmaWxlCitlbnRyb3B5X3NlZWRfZmlsZToibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfRU5UUk9QWV9GSUxFX0lPX0VSUk9SCisKK0VudHJvcHkgdG9vIG1hbnkgc291cmNlcworZW50cm9weV90b29fbWFueV9zb3VyY2VzOgorCitFbnRyb3B5IG91dHB1dCBsZW5ndGggIzEKK2VudHJvcHlfZnVuY19sZW46MDowCisKK0VudHJvcHkgb3V0cHV0IGxlbmd0aCAjMgorZW50cm9weV9mdW5jX2xlbjoxOjAKKworRW50cm9weSBvdXRwdXQgbGVuZ3RoICMzCitlbnRyb3B5X2Z1bmNfbGVuOjI6MAorCitFbnRyb3B5IG91dHB1dCBsZW5ndGggIzQKK2VudHJvcHlfZnVuY19sZW46MzE6MAorCitFbnRyb3B5IG91dHB1dCBsZW5ndGggIzUKK2VudHJvcHlfZnVuY19sZW46NjU6TUJFRFRMU19FUlJfRU5UUk9QWV9TT1VSQ0VfRkFJTEVECisKK0VudHJvcHkgZmFpbGluZyBzb3VyY2UKK2VudHJvcHlfc291cmNlX2ZhaWw6ImRhdGFfZmlsZXMvZW50cm9weV9zZWVkIgorCitFbnRyb3B5IHRocmVzaG9sZCAjMQorZW50cm9weV90aHJlc2hvbGQ6MTY6Mjo4CisKK0VudHJvcHkgdGhyZXNob2xkICMyCitlbnRyb3B5X3RocmVzaG9sZDozMjoxOjMyCisKK0VudHJvcHkgdGhlcnNob2xkICMzCitlbnRyb3B5X3RocmVzaG9sZDoxNjowOk1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorCitFbnRyb3B5IHRoZXJzaG9sZCAjNAorZW50cm9weV90aHJlc2hvbGQ6MTAyNDoxOk1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRAorCitDaGVjayBOViBzZWVkIHN0YW5kYXJkIElPCitlbnRyb3B5X252X3NlZWRfc3RkX2lvOgorCitDaGVjayBOViBzZWVkIG1hbnVhbGx5ICMxCitlbnRyb3B5X252X3NlZWQ6IjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYwMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGIgorCitDaGVjayBOViBzZWVkIG1hbnVhbGx5ICMyCitlbnRyb3B5X252X3NlZWQ6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitDaGVjayBOViBzZWVkIG1hbnVhbGx5ICMzCitlbnRyb3B5X252X3NlZWQ6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIgorCitFbnRyb3B5IHNlbGYgdGVzdAorZGVwZW5kc19vbjohTUJFRFRMU19URVNUX05VTExfRU5UUk9QWQorZW50cm9weV9zZWxmdGVzdDowCisKK0VudHJvcHkgc2VsZiB0ZXN0IChNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZKQorZGVwZW5kc19vbjpNQkVEVExTX1RFU1RfTlVMTF9FTlRST1BZCitlbnRyb3B5X3NlbGZ0ZXN0OjEKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lbnRyb3B5LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2VudHJvcHkuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhMjFiYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lbnRyb3B5LmZ1bmN0aW9uCkBAIC0wLDAgKzEsMzg1IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHlfcG9sbC5oIgorCisvKgorICogTnVtYmVyIG9mIGNhbGxzIG1hZGUgdG8gZW50cm9weV9kdW1teV9zb3VyY2UoKQorICovCitzdGF0aWMgc2l6ZV90IGVudHJvcHlfZHVtbXlfY2FsbHM7CisKKy8qCisgKiBEdW1teSBlbnRyb3B5IHNvdXJjZQorICoKKyAqIElmIGRhdGEgaXMgTlVMTCwgd3JpdGUgZXhhY3RseSB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAqIE90aGVyd2lzZSwgd3JpdGUgdGhlIGxlbmd0aCBpbmRpY2F0ZWQgYnkgZGF0YSBvciBlcnJvciBpZiBuZWdhdGl2ZQorICovCitzdGF0aWMgaW50IGVudHJvcHlfZHVtbXlfc291cmNlKCB2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIGVudHJvcHlfZHVtbXlfY2FsbHMrKzsKKworICAgIGlmKCBkYXRhID09IE5VTEwgKQorICAgICAgICAqb2xlbiA9IGxlbjsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgKmQgPSAoaW50ICopIGRhdGE7CisKKyAgICAgICAgaWYoICpkIDwgMCApCisgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqb2xlbiA9ICpkOworICAgIH0KKworICAgIG1lbXNldCggb3V0cHV0LCAweDJhLCAqb2xlbiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEKQorLyoKKyAqIEFiaWxpdHkgdG8gY2xlYXIgZW50cm9weSBzb3VyY2VzIHRvIGFsbG93IHRlc3Rpbmcgd2l0aCBqdXN0IHByZWRlZmluZWQKKyAqIGVudHJvcHkgc291cmNlcy4gVGhpcyBmdW5jdGlvbiBvciB0ZXN0cyBkZXBlbmRpbmcgb24gaXQgbWlnaHQgYnJlYWsgaWYgdGhlcmUKKyAqIGFyZSBpbnRlcm5hbCBjaGFuZ2VzIHRvIGhvdyBlbnRyb3B5IHNvdXJjZXMgYXJlIHJlZ2lzdGVyZWQuCisgKgorICogVG8gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIG1iZWR0bHNfZW50cm9weV9pbml0KCkuCisgKgorICogSnVzdCByZXNldHRpbmcgdGhlIGNvdW50ZXIuIE5ldyBzb3VyY2VzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIG9uZXMuCisgKiBUaGlzIG1pZ2h0IGJyZWFrIG1lbW9yeSBjaGVja3MgaW4gdGhlIGZ1dHVyZSBpZiBzb3VyY2VzIG5lZWQgJ2ZyZWUtaW5nJyB0aGVuCisgKiBhcyB3ZWxsLgorICovCitzdGF0aWMgdm9pZCBlbnRyb3B5X2NsZWFyX3NvdXJjZXMoIG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHggKQoreworICAgIGN0eC0+c291cmNlX2NvdW50ID0gMDsKK30KKworLyoKKyAqIE5WIHNlZWQgcmVhZC93cml0ZSBmdW5jdGlvbnMgdGhhdCB1c2UgYSBidWZmZXIgaW5zdGVhZCBvZiBhIGZpbGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyX3NlZWRbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworCitzdGF0aWMgaW50IGJ1ZmZlcl9udl9zZWVkX3JlYWQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgIGlmKCBidWZfbGVuICE9IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgbWVtY3B5KCBidWYsIGJ1ZmZlcl9zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9udl9zZWVkX3dyaXRlKCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuICkKK3sKKyAgICBpZiggYnVmX2xlbiAhPSBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIG1lbWNweSggYnVmZmVyX3NlZWQsIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICByZXR1cm4oIDAgKTsKK30KKworLyoKKyAqIE5WIHNlZWQgcmVhZC93cml0ZSBoZWxwZXJzIHRoYXQgZmlsbCB0aGUgYmFzZSBzZWVkZmlsZQorICovCitzdGF0aWMgaW50IHdyaXRlX252X3NlZWQoIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4gKQoreworICAgIEZJTEUgKmY7CisKKyAgICBpZiggYnVmX2xlbiAhPSBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGlmKCAoIGYgPSBmb3BlbiggTUJFRFRMU19QTEFURk9STV9TVERfTlZfU0VFRF9GSUxFLCAidyIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZndyaXRlKCBidWYsIDEsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFLCBmICkgIT0KKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIHJldHVybiggMCApOworfQorCitzdGF0aWMgaW50IHJlYWRfbnZfc2VlZCggdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiApCit7CisgICAgRklMRSAqZjsKKworICAgIGlmKCBidWZfbGVuICE9IE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoICggZiA9IGZvcGVuKCBNQkVEVExTX1BMQVRGT1JNX1NURF9OVl9TRUVEX0ZJTEUsICJyYiIgKSApID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIC0xICk7CisKKyAgICBpZiggZnJlYWQoIGJ1ZiwgMSwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsIGYgKSAhPQorICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApCisgICAgICAgIHJldHVybiggLTEgKTsKKworICAgIGZjbG9zZSggZiApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19FTlRST1BZX05WX1NFRUQgKi8KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfRU5UUk9QWV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRU5UUk9QWV9OVl9TRUVEOk1CRURUTFNfRlNfSU8gKi8KK3ZvaWQgZW50cm9weV9zZWVkX2ZpbGUoIGNoYXIgKnBhdGgsIGludCByZXQgKQoreworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X3dyaXRlX3NlZWRfZmlsZSggJmN0eCwgcGF0aCApID09IHJldCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX3NlZWRfZmlsZSggJmN0eCwgcGF0aCApID09IHJldCApOworCitleGl0OgorICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVudHJvcHlfdG9vX21hbnlfc291cmNlcyggKQoreworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgaTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisKKyAgICAvKgorICAgICAqIEl0J3MgaGFyZCB0byB0ZWxsIHByZWNpc2VseSB3aGVuIHRoZSBlcnJvciB3aWxsIG9jY3VyLAorICAgICAqIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IG1hbnkgc291cmNlcyB3ZXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQuCisgICAgICovCisgICAgZm9yKCBpID0gMDsgaSA8IE1CRURUTFNfRU5UUk9QWV9NQVhfU09VUkNFUzsgaSsrICkKKyAgICAgICAgKHZvaWQpIG1iZWR0bHNfZW50cm9weV9hZGRfc291cmNlKCAmY3R4LCBlbnRyb3B5X2R1bW15X3NvdXJjZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9XRUFLICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoICZjdHgsIGVudHJvcHlfZHVtbXlfc291cmNlLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIE1CRURUTFNfRU5UUk9QWV9TT1VSQ0VfV0VBSyApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0VOVFJPUFlfTUFYX1NPVVJDRVMgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBlbnRyb3B5X2Z1bmNfbGVuKCBpbnQgbGVuLCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKyAxMF0gPSB7IDAgfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFjY1tNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSArIDEwXSA9IHsgMCB9OworICAgIHNpemVfdCBpLCBqOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZjdHggKTsKKworICAgIC8qCisgICAgICogU2VlIGNvbW1lbnRzIGluIG1iZWR0bHNfZW50cm9weV9zZWxmX3Rlc3QoKQorICAgICAqLworICAgIGZvciggaSA9IDA7IGkgPCA4OyBpKysgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9mdW5jKCAmY3R4LCBidWYsIGxlbiApID09IHJldCApOworICAgICAgICBmb3IoIGogPSAwOyBqIDwgc2l6ZW9mKCBidWYgKTsgaisrICkKKyAgICAgICAgICAgIGFjY1tqXSB8PSBidWZbal07CisgICAgfQorCisgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgZm9yKCBqID0gMDsgaiA8IChzaXplX3QpIGxlbjsgaisrICkKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBhY2Nbal0gIT0gMCApOworCisgICAgZm9yKCBqID0gbGVuOyBqIDwgc2l6ZW9mKCBidWYgKTsgaisrICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIGFjY1tqXSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGVudHJvcHlfc291cmNlX2ZhaWwoIGNoYXIgKnBhdGggKQoreworICAgIG1iZWR0bHNfZW50cm9weV9jb250ZXh0IGN0eDsKKyAgICBpbnQgZmFpbCA9IC0xOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoICZjdHgsIGVudHJvcHlfZHVtbXlfc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhaWwsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9XRUFLICkKKyAgICAgICAgICAgICAgICAgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9mdW5jKCAmY3R4LCBidWYsIHNpemVvZiggYnVmICkgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9FTlRST1BZX1NPVVJDRV9GQUlMRUQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X2dhdGhlciggJmN0eCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykgJiYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X3dyaXRlX3NlZWRfZmlsZSggJmN0eCwgcGF0aCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX3NlZWRfZmlsZSggJmN0eCwgcGF0aCApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX0VOVFJPUFlfU09VUkNFX0ZBSUxFRCApOworI2Vsc2UKKyAgICAoKHZvaWQpIHBhdGgpOworI2VuZGlmCisKK2V4aXQ6CisgICAgbWJlZHRsc19lbnRyb3B5X2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZW50cm9weV90aHJlc2hvbGQoIGludCB0aHJlc2hvbGQsIGludCBjaHVua19zaXplLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX2VudHJvcHlfY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgY2hhciBidWZbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdID0geyAwIH07CisgICAgaW50IHJldDsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoICZjdHgsIGVudHJvcHlfZHVtbXlfc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaHVua19zaXplLCB0aHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX1NPVVJDRV9XRUFLICkgPT0gMCApOworCisgICAgZW50cm9weV9kdW1teV9jYWxscyA9IDA7CisgICAgcmV0ID0gbWJlZHRsc19lbnRyb3B5X2Z1bmMoICZjdHgsIGJ1Ziwgc2l6ZW9mKCBidWYgKSApOworCisgICAgaWYoIHJlc3VsdCA+PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworI2lmIGRlZmluZWQoTUJFRFRMU19FTlRST1BZX05WX1NFRUQpCisgICAgICAgIC8vIFR3byB0aW1lcyBhcyBtdWNoIGNhbGxzIGR1ZSB0byB0aGUgTlYgc2VlZCB1cGRhdGUKKyAgICAgICAgcmVzdWx0ICo9IDI7CisjZW5kaWYKKyAgICAgICAgVEVTVF9BU1NFUlQoIGVudHJvcHlfZHVtbXlfY2FsbHMgPT0gKHNpemVfdCkgcmVzdWx0ICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gcmVzdWx0ICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfZW50cm9weV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FTlRST1BZX05WX1NFRUQ6TUJFRFRMU19GU19JTyAqLwordm9pZCBudl9zZWVkX2ZpbGVfY3JlYXRlKCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIFRFU1RfQVNTRVJUKCB3cml0ZV9udl9zZWVkKCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRU5UUk9QWV9OVl9TRUVEOk1CRURUTFNfRlNfSU86TUJFRFRMU19QTEFURk9STV9OVl9TRUVEX0FMVCAqLwordm9pZCBlbnRyb3B5X252X3NlZWRfc3RkX2lvKCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGlvX3NlZWRbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfc2VlZFtNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisKKyAgICBtZW1zZXQoIGlvX3NlZWQsIDEsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgbWVtc2V0KCBjaGVja19zZWVkLCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgbWJlZHRsc19wbGF0Zm9ybV9zZXRfbnZfc2VlZCggbWJlZHRsc19wbGF0Zm9ybV9zdGRfbnZfc2VlZF9yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcGxhdGZvcm1fc3RkX252X3NlZWRfd3JpdGUgKTsKKworICAgIC8qIENoZWNrIGlmIHBsYXRmb3JtIE5WIHJlYWQgYW5kIHdyaXRlIG1hbmlwdWxhdGUgdGhlIHNhbWUgZGF0YSAqLworICAgIFRFU1RfQVNTRVJUKCB3cml0ZV9udl9zZWVkKCBpb19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19udl9zZWVkX3JlYWQoIGNoZWNrX3NlZWQsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0KKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGlvX3NlZWQsIGNoZWNrX3NlZWQsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0gMCApOworCisgICAgbWVtc2V0KCBjaGVja19zZWVkLCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgLyogQ2hlY2sgaWYgcGxhdGZvcm0gTlYgd3JpdGUgYW5kIHJhdyByZWFkIG1hbmlwdWxhdGUgdGhlIHNhbWUgZGF0YSAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX252X3NlZWRfd3JpdGUoIGlvX3NlZWQsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0KKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBURVNUX0FTU0VSVCggcmVhZF9udl9zZWVkKCBjaGVja19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIGlvX3NlZWQsIGNoZWNrX3NlZWQsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRU5UUk9QWV9OVl9TRUVEOk1CRURUTFNfUExBVEZPUk1fTlZfU0VFRF9BTFQ6TUJFRFRMU19FTlRST1BZX1NIQTUxMl9BQ0NVTVVMQVRPUiAqLwordm9pZCBlbnRyb3B5X252X3NlZWQoIGNoYXIgKnJlYWRfc2VlZF9zdHIgKQoreworICAgIG1iZWR0bHNfc2hhNTEyX2NvbnRleHQgYWNjdW11bGF0b3I7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgY3R4OworCisgICAgdW5zaWduZWQgY2hhciBoZWFkZXJbMl07CisgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5W01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBlbXB0eVtNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisgICAgdW5zaWduZWQgY2hhciByZWFkX3NlZWRbTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfc2VlZFtNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRV07CisgICAgdW5zaWduZWQgY2hhciBjaGVja19lbnRyb3B5W01CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFXTsKKworICAgIG1lbXNldCggZW50cm9weSwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKyAgICBtZW1zZXQoIGJ1ZmZlcl9zZWVkLCAwLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1lbXNldCggZW1wdHksIDAsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgbWVtc2V0KCBjaGVja19zZWVkLCAyLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1lbXNldCggY2hlY2tfZW50cm9weSwgMywgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIC8vIFNldCB0aGUgaW5pdGlhbCBOViBzZWVkIHRvIHJlYWQKKyAgICB1bmhleGlmeSggcmVhZF9zZWVkLCByZWFkX3NlZWRfc3RyICk7CisgICAgbWVtY3B5KCBidWZmZXJfc2VlZCwgcmVhZF9zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgLy8gTWFrZSBzdXJlIHdlIHJlYWQvd3JpdGUgTlYgc2VlZCBmcm9tIG91ciBidWZmZXJzCisgICAgbWJlZHRsc19wbGF0Zm9ybV9zZXRfbnZfc2VlZCggYnVmZmVyX252X3NlZWRfcmVhZCwgYnVmZmVyX252X3NlZWRfd3JpdGUgKTsKKworICAgIG1iZWR0bHNfZW50cm9weV9pbml0KCAmY3R4ICk7CisgICAgZW50cm9weV9jbGVhcl9zb3VyY2VzKCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lbnRyb3B5X2FkZF9zb3VyY2UoICZjdHgsIG1iZWR0bHNfbnZfc2VlZF9wb2xsLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0VOVFJPUFlfU09VUkNFX1NUUk9ORyApID09IDAgKTsKKworICAgIC8vIERvIGFuIGVudHJvcHkgcnVuCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZW50cm9weV9mdW5jKCAmY3R4LCBlbnRyb3B5LCBzaXplb2YoIGVudHJvcHkgKSApID09IDAgKTsKKworICAgIC8vIERldGVybWluZSB3aGF0IHNob3VsZCBoYXZlIGhhcHBlbmVkIHdpdGggbWFudWFsIGVudHJvcHkgaW50ZXJuYWwgbG9naWMKKyAgICAvLyBPbmx5IHVzZSB0aGUgU0hBLTUxMiB2ZXJzaW9uIHRvIGNoZWNrCisKKyAgICAvLyBJbml0IGFjY3VtdWxhdG9yCisgICAgaGVhZGVyWzFdID0gTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkU7CisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmYWNjdW11bGF0b3IsIDAgKTsKKworICAgIC8vIEZpcnN0IHJ1biBmb3IgdXBkYXRpbmcgd3JpdGVfc2VlZAorICAgIGhlYWRlclswXSA9IDA7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmYWNjdW11bGF0b3IsIGhlYWRlciwgMiApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmFjY3VtdWxhdG9yLCByZWFkX3NlZWQsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFICk7CisgICAgbWJlZHRsc19zaGE1MTJfZmluaXNoKCAmYWNjdW11bGF0b3IsIGJ1ZiApOworCisgICAgbWVtc2V0KCAmYWNjdW11bGF0b3IsIDAsIHNpemVvZiggbWJlZHRsc19zaGE1MTJfY29udGV4dCApICk7CisgICAgbWJlZHRsc19zaGE1MTJfc3RhcnRzKCAmYWNjdW11bGF0b3IsIDAgKTsKKyAgICBtYmVkdGxzX3NoYTUxMl91cGRhdGUoICZhY2N1bXVsYXRvciwgYnVmLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworCisgICAgbWJlZHRsc19zaGE1MTIoIGJ1ZiwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUsIGNoZWNrX3NlZWQsIDAgKTsKKworICAgIC8vIFNlY29uZCBydW4gZm9yIGFjdHVhbCBlbnRyb3B5ICh0cmlnZ2VycyBtYmVkdGxzX2VudHJvcHlfdXBkYXRlX252X3NlZWQpCisgICAgaGVhZGVyWzBdID0gTUJFRFRMU19FTlRST1BZX1NPVVJDRV9NQU5VQUw7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmYWNjdW11bGF0b3IsIGhlYWRlciwgMiApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmFjY3VtdWxhdG9yLCBlbXB0eSwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKTsKKworICAgIGhlYWRlclswXSA9IDA7CisgICAgbWJlZHRsc19zaGE1MTJfdXBkYXRlKCAmYWNjdW11bGF0b3IsIGhlYWRlciwgMiApOworICAgIG1iZWR0bHNfc2hhNTEyX3VwZGF0ZSggJmFjY3VtdWxhdG9yLCBjaGVja19zZWVkLCBNQkVEVExTX0VOVFJPUFlfQkxPQ0tfU0laRSApOworICAgIG1iZWR0bHNfc2hhNTEyX2ZpbmlzaCggJmFjY3VtdWxhdG9yLCBidWYgKTsKKworICAgIG1iZWR0bHNfc2hhNTEyKCBidWYsIE1CRURUTFNfRU5UUk9QWV9CTE9DS19TSVpFLCBjaGVja19lbnRyb3B5LCAwICk7CisKKyAgICAvLyBDaGVjayByZXN1bHQgb2YgYm90aCBOViBmaWxlIGFuZCBlbnRyb3B5IHJlY2VpdmVkIHdpdGggdGhlIG1hbnVhbCBjYWxjdWxhdGlvbnMKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBjaGVja19zZWVkLCBidWZmZXJfc2VlZCwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggY2hlY2tfZW50cm9weSwgZW50cm9weSwgTUJFRFRMU19FTlRST1BZX0JMT0NLX1NJWkUgKSA9PSAwICk7CisKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIGVudHJvcHlfc2VsZnRlc3QoIGludCByZXN1bHQgKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0KCAxICkgPT0gcmVzdWx0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Vycm9yLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZXJyb3IuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWM1NjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Vycm9yLmRhdGEKQEAgLTAsMCArMSwyMSBAQAorU2luZ2xlIGxvdyBlcnJvcgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitlcnJvcl9zdHJlcnJvcjotMHgwMDIwOiJBRVMgLSBJbnZhbGlkIGtleSBsZW5ndGgiCisKK1NpbmdsZSBoaWdoIGVycm9yCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0MKK2Vycm9yX3N0cmVycm9yOi0weDQwODA6IlJTQSAtIEJhZCBpbnB1dCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uIgorCitMb3cgYW5kIGhpZ2ggZXJyb3IKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1JTQV9DCitlcnJvcl9zdHJlcnJvcjotMHg0MEEwOiJSU0EgLSBCYWQgaW5wdXQgcGFyYW1ldGVycyB0byBmdW5jdGlvbiBcOiBBRVMgLSBJbnZhbGlkIGtleSBsZW5ndGgiCisKK05vbiBleGlzdGluZyBoaWdoIGVycm9yCitlcnJvcl9zdHJlcnJvcjotMHg4ODgwOiJVTktOT1dOIEVSUk9SIENPREUgKDg4ODApIgorCitOb24gZXhpc3RpbmcgbG93IGVycm9yCitlcnJvcl9zdHJlcnJvcjotMHgwMDdGOiJVTktOT1dOIEVSUk9SIENPREUgKDAwN0YpIgorCitOb24gZXhpc3RpbmcgbG93IGFuZCBoaWdoIGVycm9yCitlcnJvcl9zdHJlcnJvcjotMHg4OEZGOiJVTktOT1dOIEVSUk9SIENPREUgKDg4ODApIFw6IFVOS05PV04gRVJST1IgQ09ERSAoMDA3RikiCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lcnJvci5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9lcnJvci5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTliMWZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Vycm9yLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjEgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfRVJST1JfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgZXJyb3Jfc3RyZXJyb3IoIGludCBjb2RlLCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBjaGFyIGJ1Zls1MDBdOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKworICAgIG1iZWR0bHNfc3RyZXJyb3IoIGNvZGUsIGJ1ZiwgNTAwICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxMjhfZGUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2RlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhYTcxMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTI4X2RlLmRhdGEKQEAgLTAsMCArMSw2NzUgQEAKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDc4NWRhZmVhM2U5NjY3MzFlZjZmYzYyMDIyNjI1ODQiOiIiOiJkOTFhNDYyMDVlZTk0MDU4YjNiODQwMzk5NzU5MmRkMiI6IiI6MTI4OiIzYjkyYTE3YzFiOWMzNTc4YTY4Y2ZmZWE1YTViNjI0NSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlYzk2MzgzM2I5MDk4ZGUxYWJhYmM4NTNhYjc0ZDk2IjoiIjoiNGUwZmZkOTNiZWZmZDczMmM2ZjdkNmFkNjA2YTJkMjQiOiIiOjEyODoiZTlmY2VkYzE3NmRmZTU4N2RjNjFiMjAxMTAxMGNkZjEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNGZiOWUzMzkzNjgxZGE5Y2VjNWVjOTZmODdjNWMzMSI6IiI6Ijg0NWU5MTBiYzA1NWQ4OTU4NzlmNjIxMDFkMDhiNGM3IjoiIjoxMjg6Ijk5ZmI3ODNjNDk3NDE2ZTRiNmUyYTVkZTdjNzgyMDU3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJhOTMwZjJlMDliZWNlYWNkOTkxOWNiNzZmMmFjOGQzIjoiIjoiMzQwZDlhZjQ0ZjYzNzBlZmY1MzRjNjUzMDMzYTc4NWEiOiIiOjEyMDoiMGMxZTVlOWM4ZmU1ZWRmZDExZjExNGYzNTAzZDYzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU3MTE3N2UwMjA3M2IxYzQwN2I1NzI0ZTIyNjNhNWUiOiIiOiI4M2MyM2QyMGQyYTlkNGI4ZjkyZGE5NjU4N2M5NmIxOCI6IiI6MTIwOiI0M2IyY2E3OTU0MjBmMzVmNmNiMzlmNWRmYTQ3YTIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMDIzOTJmZDdmMjI4ODg4YzI4MWU1OWQxZWFhMTVmYiI6IiI6IjI3MjYzNDRiYTg5MTJjNzM3ZTE5NTQyNGUxZTY2NzllIjoiIjoxMjA6ImExMGI2MDFjYTgwNTM1MzZhMmFmMmNjMjU1ZDJiNiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIxODk1Y2JhZmMxNmI3YjhiZjU4NjdlODhlMDg1M2Q0IjoiIjoiZjk4N2NlMTAwNWQ5YmJkMzFkMjQ1MmZiODA5NTc3NTMiOiIiOjExMjoiOTUyYTdlMjY1ODMwZDU4YTY3NzhkNjhiOTQ1MCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjliYjk3NDJiZjQ3ZjY4Y2FmNjQ5NjNkN2MxMGE5N2IwIjoiIjoiMzRhODU2NjlkZTY0ZTFjZDQ0NzMxOTA1ZmRkYmNiYzUiOiIiOjExMjoiZTliNmJlOTI4YWE3N2IyZGUyOGI0ODBhZTc0YyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRlOTcwOGU0YjM3ZTJlMWI1ZmVhZjRmNWFiNTRlMmE2IjoiIjoiMWM1M2E5ZmRkMjM5MTliMDM2ZDk5NTYwNjE5YTk5MzkiOiIiOjExMjoiNjYxMWI1MGQ2ZmJjYTgzMDQ3ZjlmNWZlMTc2OCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgyZmVkZTc5ZGIyNWYwMGJlOTZlYjA1MGEyMmNlYTg3IjoiIjoiZTljNTBiNTE3YWIyNmM4OWI4M2MxZjBjYWM1MDE2MmMiOiIiOjEwNDoiZDBjMGNlOWRiNjBiNzdiMGUzMWQwNWUwNDgiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZDk4NTY2ZmNhNTIwMWFiYjEyOTE0MzExYThiZDUzMiI6IiI6IjU5MGFlZjRiNDZhOTAyMzQwNWQwNzVlZGFiN2U2ODQ5IjoiIjoxMDQ6ImExY2ZkMWEyN2IzNDFmNDllZGEyY2E4MzA1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwMzg3NzE4MjBjMmUxMzE5ZjAyYTc0YjhhN2EwYzA4IjoiIjoiZTU1NmQ5ZjA3ZmI2OWQ3ZTlhNjQ0MjYxYzgwZmFjOTIiOiIiOjEwNDoiNGQyZjAwNWQ2NjJiNmE4Nzg3ZjIzMWM1ZTEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZmI3ZWVmNTBkZTU5OGQ3ZDhiNTA4ZDAxOWEzMGQ1YSI6IiI6ImEyYTI2MTcwNDAxMTZjMmM3ZTQyMzZkMmQ4Mjc4MjEzIjoiIjo5NjoiNjg0MTNjNThkZjdiYjVmMDY3MTk3Y2EwIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGNjNThiNjA5MjA0MjE1YzhhYjQ5MDgyODZlNTZlNWMiOiIiOiJmYjgzZWE2MzcyNzkzMzI2NzdiNWY2ODA4MTE3M2U5OSI6IiI6OTY6ImEyYTkxNjBkODI3MzlhNTVkOGNkNDE5ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgxYTVmZDE4NDc0MmE0Nzg0MzI5NjNmNjQ3N2U4ZjkyIjoiIjoiZGEyOTdjYmI1M2IxMWQ3YzM3OWUwNTY2Mjk5YjRkNWEiOiIiOjk2OiIyMDBiZWU0OTQ2NmZkZGEyZjIxZjAwNjIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNjA0YWM2NmQ2MjY5NTllNTk1Y2JiN2I0MTI4ZTA5NiI6IiI6IjI2OWQyYTQ5ZDUzM2M2YmIzODAwODcxMWYzOGUwYjM5IjoiIjo2NDoiNDY4MjAwZmE0NjgzZThiZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlMzA4YmE3OTAzZTkyNWY3NjhjMWQwMGZmM2ViNjIzIjoiIjoiMzM1YWNkMmFhNDhhNDdhMzdjZmUyMWU0OTFmMWIxNDEiOiIiOjY0OiI0ODcyYmZkNWUyZmY1NWY2IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMzA0ZTJhNWEzNTIwNDU0YTUxMDlkZjYxYTY3ZGE3YSI6IiI6ImRiZThiNDUyYWNmNGZhMTQ0NGMzNjY4ZTllZTcyZDI2IjoiIjo2NDoiODNhMGQzNDQwMjAwY2E5NSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVjZjFlYzJjOWE4ZjJlOWNjNzk5ZjliOWZkZGIzMjMyIjoiIjoiZGRmMGI2OTVhZWY1ZGYyYjU5NGZjYWFlNzJiN2U0MWMiOiIiOjMyOiIyODE5YWVkZiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWFiNWM4Y2E5MDViNWZlNTA0NjFmNGE2ODk0MTE0NGIiOiIiOiI5NmRkMzkyN2E5NmUxNjEyM2YyZTlkNmIzNjdkMzAzZiI6IiI6MzI6IjZlMGM1M2VmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNWZjN2FmNjA1NzIxYTljZmU2MWMxZWU2YTRiM2UyMiI6IiI6IjZiNzU3ZDQwNTU4MjNkMTAzNWQwMTA3NzY2NjAzN2Q2IjoiIjozMjoiZThjMDlkZGQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDNjMGI0YTZlNTA4YTg0OTBkYjBkMDg2YTgyYzlkYjciOiIiOiJhYzUyZjZjMWEwNTAzMDMyMWZhMzlmODdlODlmZGI1ZSI6IjMzMzE2Y2E3OWQxMGE3OWY0ZmQwMzg1OTNlOGVlZjA5NjI1MDg5ZGM0ZTBmZmU0YmMxZjI4NzE1NTRmYTY2NjZhYjNlN2ZlNzg4NWVkZWY2OTRiNDEwNDU2ZjNlYzBlNTEzYmIyNWYxYjQ4ZDk1ZTQ4MjBjNTk3MmMxYWFiYjI1Yzg0YzA4NTY2MDAyZGFkYzM2ZGYzMzRjMWNlODY4NDc5NjRhMTIyMDE2ZDM4OWFjODczYmNhOGMzMzVhN2E5OWJjZWY5MWUxYjk4NWFlNWQ0ODhhMmQ3Zjc4YjRiZjE0ZTBjMmRjNzE1ZTgxNGY0ZTI0Mjc2MDU3Y2Y2NjgxNzIiOjEyODoiNzU2MjkyZDhiNDY1Mzg4N2VkZWY1MTY3OWIxNjE4MTIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjIyOGQzZDE1MjE5ZWE5YWQ1NjUxZmNlMDJjODM3NGQiOiIiOiI1YzdlYWZhZWFkMDI5YzNmZTNjZjM4MzVmZTc1OGQwZSI6IjhjMzVkZDgwNWMwODY4NmI5YjRkNDYwZjgxYjRkY2I4YzQ2YzZkNTc4NDJkYzNlNzJiYTkwOTUyZTJiZWJmMTdmZTcxODQ0NDViMDJmODAxODAwYTk0NDQ4NmQ2NjJhMTI3ZDAxZDNiN2Y0MjY3OTA1MmNkYzczY2U1MzMxMjlhZjhkMTM5NTc0MTVjNTQ5NTE0MjE1N2Q2Y2U4YTY4YWE5NzdlNTZmNTYyZmVkOThlNDY4ZTQyNTIyNzY3NjU2Y2U1MDM2OTQ3MTA2MDM4MWJiNzUyZGQ1ZTc3Yzc5Njc3YTRjYWRmZmEzOWU1MThlMzBhNzg5ZTc5M2IwN2VhMjEiOjEyODoiYTRkZGUxYWI5M2M4NDkzN2MzYmJjM2FkNTIzNzgxOGQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzc2YWZjYmFiZWRkNTU3N2ZlNjYwYTYwZjkyMGI1MzYiOiIiOiI1YmJiN2YxYjE0MDg0ZTUyMDQwOGRkODdiOTc3MDVlOSI6IjQ0NjMxZmM5ZDRhMDc0MTZiMGRmYjRlMmI0MjA3MWUzZTJiZTQ1NTAyYzlkZGY3MmIzZTYxODEwZWVkYTMxYTdkNjg1ZWJiMmVlNDNhMmMwNmFmMzc0NTY5ZjQzOWVlMTY2OGM1NTAwNjdkZTJkZWNlOWVjNDZlZTcyYjI2MDg1OGQ2MDMzZjgxNGU4NTI3NWM1YWU2NjliNjA4MDNhOGM1MTZkZTMyODA0ZmEzNGQzYTIxM2NjZmFmNjY4OTA0NmUyNWVlYjMwYjllMTYwOGU2ODlmNGQzMWNjNjY0YjgzYTQ2OGE1MTE2NWY1NjI1ZjEyZjA5OGE2YmY3ZGRhYjIiOjEyODoiYTUzNDdkNDFkOTNiNTg3MjQwNjUxYmNkNTIzMDI2NGYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjBhYmVhZmEyNWZjNGVhN2QwNTkyY2IzZTliNGQ1ZmUiOiIiOiIzYWJhNzlhNThjNWFhNjY0ODU2YjQxZDU1MmM3YThkMyI6Ijk4Y2ZlY2FhZTllYjlhN2MzYjE3ZTZiYzVmODBkOGE0YmY3YTlmNGZhNWUwMWI3NGNhZTE1ZWU2YWYxNDYzMzIwNWFhZmUzYjI4ZmI3Yjc5MThlMTIzMjJlYTI3MzUyMDU2YTYwMzc0NmQ3MjhhNjEzNjExMzRhNTYxNjE5NDAwZmYyYmY2NzkwNDViYWMyZTBmYmMyYzFkNDFmOGZhYmE0YjI3Yzc4MjdiY2VkYTRlOWJmNTA1ZGY0MTg1NTE1ZGQzYTVlMjZmNzYzOWM4YWQ1YTM4YmM1OTA2YTQ0YmUwNjJmMDJjYzUzODYyNjc4YWUzNmZhM2RlM2MwMmM5ODIiOjEyMDoiMmE2N2FkMTQ3MWE1MjBmZTA5YTMwNGYwOTc1ZjMxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJiYzczZmJhOTQyZmYxMDU4MjNiNWRjY2Y2YmVmYjFjIjoiIjoiOTAyYzNlM2I2OWIxZWY4Mzk1ZDcyODFmZjc0Y2NlMzgiOiI0YWRlYzBiNGFjMDAzMjVhODYwMDQ0ZDlmOTUxOWRhYTRmN2MxNjMyMjlhNzU4MTliMGZkN2Q4ZTIzMzE5ZjAzMGU2MWRmYThlYWRhYmZmNDJlYTI3YmMzNmJkYjZjYWQyNDllODAxY2E2MzFiNjU2ODM2NDQ4YjcxNzJjMTExMjZiYWQyNzgxZTZhMWFhNGY2MmM0ZWRhNTM0MDk0MDhiMDA4YzA1N2UwYjgxMjE1Y2MxM2RkYWJiYjhmMTkxNWY0YmJhYjg1NGY4YjAwNzYzYTUzMGFkNTA1NWQyNjU3NzhjZDMwODBkMGJkMzViNzZhMzI5YmRkNWI1YTJkMjY4IjoxMjA6ImViZGQ3YzhlODdmZTczMzEzOGE0MzM1NDM1NDJkMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM1NmE0YzI0NTg2ODI0M2Q2MTc1NmNhYmU4NmRhODg3IjoiIjoiYjQ0MmYyZWM2ZDQ1YTE3MTQ0YzI1OGZkNTlmZTViM2IiOiIxMmNjY2MzYzYwNDc0YjBhMTU3OWM1MDA2YzIxMzQ4NTA3MjRmYTZjOWRhM2E3MDIyZDRmNjVmZDIzOGIwNTJiZGYzNGVhMzRhYTdkYmFkYWQ2NDk5NjA2NWFjZWU1ODhhYjZiZDI5NzI2ZDA3ZWQyNGZmYWUyZDMzYWFkZjNlNjZlYmI4N2Y1N2U2ODlmZDg1MTI4YmUxYzllM2Q4MzYyZmFkMWY4MDk2ZWUzOTFmNzViNTc2ZmIyMTNkMzk0Y2VmNmYwOTFmYzU0ODhkOWFhMTUyYmU2OTQ3NWI5MTY3YWJkNmRkNGZkOTNiYmJjN2I4Y2EzMTZjOTUyZWIxOWM2IjoxMjA6ImVkMjYwODBkY2I2NzA1OTA2MTNkOTdkN2M0N2NmNCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZmE3ZTkzYWZmNzM2MDBmYzU1MjMyNDI1MzA2NmUyYyI6IiI6ImMyMDAwMWU5M2YxY2QwNTI1M2MyNzdhOTQ0NWQ2MWU0IjoiYTY0ZDFlMjAwNThhMWY3ZTY5ODYyMmEwMmY3ZmY4ZGMxMTg4NjcxN2VkZTE3YmJkYzNjNDY0NWE2NmE3MWQ4YjA0MzQ2ZmIzODlhMjUxZmZiMGE3ZjQ0NWEyNWZhZjY0MmJiN2U0Njk3ZDJjYWNmOTI1ZTc4YzRiZTk4NDU3OTk2YWZiMjViMDUxNmI1MGYxNzk0NDFkMTkyMzMxMjM2NDk0N2Y4ZjFlMGY1NzE1YjQzYmQ1Mzc3MjdiZjk0M2Q3YjQ2NzliMGIwYjI4Yjk0ZTU2ZTdiYmY1NTRkOWNmNzlmY2VlNDM4N2YzMmJiNmY5MWVmZGQyMzYyMDAzNWJlNiI6MTEyOiI2YmE1ZTRkYWNlOWE1NGI1MGI5MDFkOWI3M2FkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmVjZWE4MGI0OGQyZWNkMTk0YTc2OTlhYTdkOGNjZmMiOiIiOiI4YjRkYjA4YmFmYzIzYjY1YWU1MGEyZDIwNjYxZDI3MCI6ImVmYzJjYTFhM2I0MWI5MGY4ZGRmNzQyOTFkNjhmMDcyYTZlMDI1ZDBjOTFjM2NlMmIxMzM1MjU5NDNjNzNlYmFkYzcxZjE1MGJlMjBhZmViMDk3NDQyZmE1MWJlMzFhNjQxZGY2NWQ5MGViZDgxZGNiYWYzMjcxMWVkMzFmNWUwMjcxNDIxMzc3ZmZlMTRkZGFmZWEzY2E2MGE2MDA1ODhkNDg0ODU2YTk4ZGU3M2Y1NmE3NjZhZTYwYmFlMzg0YTRhZTAxYTFhMDY4MjFjZjBjN2E2YjRlZTRjOGY0MTM3NDg0NTdiMzc3NzI4M2QzMzEwMjE4ZmI1NWMxMDcyOTMiOjExMjoiMjQ2YTlkMzc1NTMwODhiNjQxMWViYjYyYWExNiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQzOGZlZTNmZDNkNmQwODIyNGMzYzgzNTI5YTI1ZDA4IjoiIjoiYTk0MmNjYjExY2Y5NDY4MTg2ZmFiZmMxOGM4OTk4MDEiOiIxYzkyYTRjZTBhMWRhZTI3ZTcyMGQ2ZjliMWU0NjAyNzY1MzhkZTQzN2YzODEyYWIxMTc3Y2YwMjczYjA1OTA4ZjI5NmYzM2JhMGY0Yzc5MGFiZTJjZTk1OGIxZDkyYjkzMGEwZDgxMjQzZTZhZDA5ZWY4NmVlOGUzMjcwMjQzMDk1MDk2NTM3Y2IxMDU0ZmNmY2Y1MzdkODI4YjY1YWY5YjZjZjdjNTBmNWI4NDcwZjc5MDhmMzE0ZDA4NTkxMDdlZWQ3NzJlZTE3MzJjNzhlOGEyZTM1YjI0OTNmM2U4YzFlNjAxYjA4YWVhYjhkOTcyOWUwMjk0ZGNhMTY4YzYyIjoxMTI6IjgwM2EwODcwMGVjODZmZGViODhmN2EzODg5MjEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTg5OWIwY2JhZTQxZDcwNWM2ZWVkMzIyNmFmYjViYzAiOiIiOiI4MmQwOTEwYWE1M2UzMDBhNDg3ZDg4MGQwMThkMGRlYSI6IjZiZjU1ODNjYzEwMDdkNzRmMzUyOWRiNjNiOGQ0ZTA4NTQwMGNjZjM3MjVlYWI4ZTE5Y2IxNDVmMzkxMGM2MTQ2NWEyMTQ4Njc0MGEyNmY3NDY5MTg2NmE5ZjYzMmFmOWZhZTgxZjVmMGJmZmVkZjBjMjhhNmNlMGZkNTIwYmI0ZGIwNGEzY2QxYTdkMjlkODgwMWUwNWU0YjljOTM3NGZkODliY2I1Mzk0ODljMmY3ZjFmODAxYzI1M2ExY2M3Mzc0MDg2NjliY2QxMzNiNjJkYTM1N2Y3Mzk5YTUyMTc5MTI1YWE1OWZhZTY3MDdkMzQwODQ2ODg2ZDczMGE4MzUiOjEwNDoiYzVkNTg4NzBmZWU5Y2UxNTdmNWVjMWZhOGYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4Yjk1MzIzZDg2ZDAyNzU0ZjRjMjg3NGI0MmVjNmViMCI6IiI6IjRmNzYwODRhY2JkZWY5OTk5YzcxZGNjNzk0MjM4ZDdjIjoiZWJjNzU3ODgzNzdjMGIyNjQ4MThhNmY5N2MxOWNmOTJjMjlmMWM3Y2RlYjZiNWYwYTkyZDIzOGZhNDYxNGJjMzVkMGNmZTRlYzlkMDQ1Y2Q2MjhmZjYyNjJjNDYwNjc5YWMxNWIwYzYzNjZkOTI4OWJiZDIxN2U1MDEyMjc5ZTBhZjBmYjJjZmNiZGY1MWZlMTY5MzU5NjhjYmI3MjdmNzI1ZmU1YmNkNDQyODkwNTg0OTc0NmM4NDkzNjAwY2U4YjJjZmMxYjYxYjA0YzhiNzUyYjkxNWZlZDYxMWQ2YjU0ZWY3M2VjNGUzOTUwZDZkYjE4MDdiMWNlN2VkMWRjYyI6MTA0OiJjNDcyNGZmMWQyYzU3Mjk1ZWI3MzNlOWNhZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMGRhNTU1NTU5ZWIxMWNmN2UwZWZmOWQ5OWU5NjA3ZCI6IiI6Ijc3OTkyNzViZjEyMzM1ZjI4MWVjOTRhODcwZjkwYTBiIjoiZTczNWQ1NTZlMTVhZWM3OGQ5NzM2MDE2YzhjOTlkYjc1M2VkMTRkNGU0YWRhYWExZGQ3ZWFhZDcwMmVhNWRjMzM3NDMzZjhjMmI0NWFmZGYyZjM4NWZkZjZjNTU1NzQ0MjU1NzFlMDc5Y2E3NTliNjIzNWY4NzdlZDExNjE4ZmYyMTJiYWZkODY1YTIyYjgwYjc2YjNiNWNmMWFjZmQyNGQ5MmZkNDE2MDdiYmI3MzgyZjI2Y2Q3MDM3NTcwODhkNDk3YjE2YjMyZGU4MGUxMjU2YzczNGE5YjgzMzU2YjZmY2VkMjA3MTc3ZGU3NTQ1ODQ4MWVhZWY1OWE0MzFkNyI6MTA0OiIzYzgyMjcyMTMwZTE3YzRhMGEwMDdhOTA4ZSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWQyYWM3NGFmODk2YzUxOTBjMjcxY2ZhNmFmMDJmZDIiOiIiOiJlMDIyNmUyZDhkYTQ3YmFkYWQxZmI3OGI5YTc5N2YyNyI6IjhmMTEzNTNhZTQ3NmZmOTIzMDEzZTZlNzM2ZmZjOWQyMzEwMWExYzQ3MWNjYzA3YWQzNzJhODQzMGQ2NTU5YzM3NjA3NWVmY2UyZTMxOGNkZjRjOTQ0M2RiZjEzMmU3ZTZkYTU1MjQwNDUwMjhjOTdlOTA0NjMzYjQ0YzRkMTg5YTRiNjQyMzdhYzc2OTJkZDAzYzBlNzUxY2U5ZjA0ZDBmZGJkOGE5NjA3NGNkN2RmYTJmZDQ0MWE1MjMyOGI0YWMzOTc0YjQ5MDJkYjQ1NjYzZjdiNmYyNDk0N2RiYTYxOGY4Yjk3NjllOTI3ZmFmODRjOWY0OWFkODIzOWI5ZmIiOjk2OiJkYjhhZjdhMGQ1NDhmYzU0ZDk0NTdjNzMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAyMjViNzNmZTVmYmJlNTJmODM4ZDg3MzE3Mzk1OWQ4IjoiIjoiMDJhMDQ4NzY0ZjQ4ZDlhZWQxMTQ3ZWU5MjIzOTViYmYiOiI5YjQ2YTU3YjA2ZTE1NmM4NzdlOTRjMDg5ODE0NDkzZWFkODc5Mzk3ZGFiM2RmY2FiMmRiMzQ5ZWYzODdlZmNkMGNjMzM5YTdlNzkxMzFhMmM1ODAxODhmYzc0MjkwNDRhNDY1YjgzMjlkNzRjZDhmNDcyNzJhNGVkMzI1ODJiMWM1YzdlM2QzMjM0MWFlOTAyZWE0OTIzZGMzM2RmODA2MmJjMjRiYjUxYTExZDJlY2M4MmY0NjRmNjE1MDQxMzg3ZjljODJiZDIxMzVkNGUyNDBmZTU2ZmE4YTY4ZTZhOWE0MTdlNjcwMjQzMGE0MzRiMTRkNzBjZjAyZGIzMTgxIjo5NjoiZTJjMmNlNDAyMmM0OWE5NWM5YWM5MDI2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODljYTM3NzFhMGVmMzI4NzU2OGI0YWMwMzYxMjAxOTgiOiIiOiI3ZTgzZDJmZmE4YWY4YzU1NGNmZDcxYTBkYjU2ZWY1YiI6IjFiZDdhOWQ2MjYyODgyYmQxMmM2MmJkNTA5NDI5NjViM2NkY2FkZjVlMGZhYjJkYzRkMGRhZjBlZTRiMTZlOTJjNmUyNDY0YzBjYWE0MjNjZGNlODhlNGQ4NDM0OTA2MDk3MTZlYzVlNDRjNDE2NzJjNjU2YWMwZTQ0NGQzNjIyNTU3ZWE4NDIwYzk0ZGVhZTNhZDE5MGRkYWY4NTlmNmY4YzIzZTRlMmUzMmE0NmQyOGRmMjNkZTRmOTliZDZjMzRmNjllMDZlZGRmZGZhNWYyNjNkYmU4YmFmOWQ0Mjk2YjJjNTQzZTRjNDg0NzI3MWU3NTkwMzc0ZWRmNDYyMzQiOjk2OiIwNmIyYmY2MjU5MWRjN2VjMWI4MTQ3MDUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE0MWEyOTdiZDk2ZTIyNDk0Mjk5OGZlMjE5MjkzNGExIjoiIjoiNjgyN2YyYzVhMGI3ZWNkNmJiYzY5NmFiYjBhZGY1NTYiOiJmMzIwNDFhYmQ4NTQzNDE1Y2JhYzQyM2Q5NDVkZGE1Mzc4YTE2YTdlOTRkOWFiNWRiZDJkMzJlYjFjNTA0OGNjN2M4ZTRkZjNjYTg0ZWM3MjVmMThjMzRjZmRlYWE3NTk1MzkyYWFiZmQ2NmQ5ZTJmMzdjMTE2NTM2OWNkODA2Y2Q5ZDIxMTBkZWY2ZjVmYWQ0MzQ1ZTVhNmUyMzI2YzkzMDAxOTk0MzhmY2MwNzhjZDlmY2Y0ZDc2ODcyY2FjNzdmYzlhMGE4YWM3ZTRkNjM5OTUwNzhhOWFkZGVjZjc5ODQ2MGZmNTkxMDg2MWI3NmM3MWJjY2ZiNmI2MjlkNzIyIjo2NDoiNDlhNDkxN2VlZjYxZjc4ZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE5MzcyYzA1OGY0MmUwYTFkMDE5YmRiNTI4MzEzOTE5IjoiIjoiOGQwM2Y0MjMyMzBjOGYwMGE1YjZiNzEyZDQyNmEyYWYiOiJjZmVmNGU3MGZjYzE4MjFlZWNjZjdjN2I1ZWIzYzBjM2I1ZjcyZGM3NjI0MjZlMGJkMjYyNDJmOGFhNjhjNWI3MTZhYjk3ZWRlZDVlNTcyMGNhY2NjMTk2NWRhNjAzZDU1NmQ4MjE0ZDU4MjhmMmNmMjc2ZDk1YmY1NTJkNDczMTM4NzY3OTYyMjFmNjJjY2I4MThhNmQ4MDEwODg3NTVkNThjZmI3NTFiZmVkMGQ1YTE5NzE4ZDRlMGY5NGI4NTBlMDI3OWIzYTY5Mjk1ZDE4MzdjYmE5NThhNmNjNTZlNzU5NDA4MGI5ZTViOTU0YTE5OWZkYzllNTRkZGM4NTgzIjo2NDoiYjgyY2QxMWNkMzU3NWM4ZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjMwMmI3MzM4ZjhmYTg0MTk1YWQ5YWJiYWNkODliNGUiOiIiOiJlMWJlZDVjNTM1NDdjYmM4NWYzNDExZmJiNDNiYjA4YiI6ImJjZDMyOWMwNzZlOGRhMjc5N2Q1MGRjZGNmMjcxY2VjZjNjZTEyZjNjMTM2ZWQ3NDZlZGM3MjJmOTA3YmU2MTMzMjc2ZWUwOTkwMzhmZGM1ZDczZWVjODEyNzM5Yzc0ODlkNGJjYzI3NWY5NTQ1MWI0NDg5MDQxNmUzZmZlNWExYjZmYTM5ODZiODRlZWUzYWRhZDc3NGM2ZmVhZWNiMWY3ODUwNTNlZWRhMmNmYzE4OTUzYjg1NDc4NjZkOTg5MThkYmUwYTZhYmMxNjhhYzdkNzc0NjdhMzY3ZjExYzI4NDkyNGQ5ZDE4NmVmNjRlZjBmZDU0ZWFjZDc1MTU2ZDIiOjY0OiI1MjIyZDA5MmU5ZThiZDZjIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3OGI1YzI4ZDYyZTRiMjA5Nzg3M2ExMTgwYmQ1YTNhNSI6IiI6ImM5MzkwMmMyODE5ZWU0OTRmMGZjNGIyNTllZTY1ZGQ4IjoiZTZiMTE5MjY3NGEwMjA4M2E2Y2YzNmQ0YmE5M2JhNDBhNTMzMWZhZGY2M2ZkMWViMmVmYTJlZTljMGQ4ODE4NDcyYWFhZjJiNDcwNTc0NjAxMTc1M2YzMGY0NDdjOGY1OGRkMzRkMjk2MDZkYWY1N2VhZGMxNzI1Mjk4MzcwNThjYjc4YTM3OGIxOWRhOGQ2M2MzMjFmNTUwZGZhMjU2YjVmZDlmMzBlOTNkOGYzNzc0NDNiZmNkMTI1Zjg2YTA3OWExNzY1ZDIwMTBiZTczZDA2MGYyNGVlYmFlOGQwNWU2NDQ2ODhiMjE0OWJjMzllMThiZDUyN2JjMDY2ZjJiYSI6MzI6ImVhZTQ4MTM3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZDg0MTMwNTc4MDcwZTAzNmM5ZTNkZjViNTUwOTQ3MyI6IiI6IjNiOWI0OTUwNTIzYTE5YzY4NjZmZDJiMGNkZTU0MWZkIjoiYTc2NDkzMWUxYjIxYTE0MGM1NGE4NjE5YWFjZGI0MzU4ODM0OTg3ZmI2ZTI2M2NlYzUyNWY4ODhmOWU5NzY0YzE2NWFhYTdkYjc0ZjJjNDIyNzNmOTEyZGFlYWU2ZDcyYjIzMmE4NzJhYzJjNjUyZDdjZDNhZjNhNTc1M2Y1ODMzMWMxMWI2Yzg2NjQ3NTY5Nzg3NmRiYzRjNmNhMGU1MmEwMGJhMDE1ZWUzYzNiN2ZiNDQ0YzZlNTBhNGI0YjliYmUxMzVmYzA2MzJkMzJhM2Y3OWYzMzNkOGY0ODc3NzFlZDEyNTIyZTY2NGI5Y2Y5MGU2NmRhMjY3ZjQ3YTc0ZCI6MzI6Ijc5OTg3NjkyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwODQyODYwNWFiNDc0MmEzZThhNTUzNTRkNDc2NDYyMCI6IiI6IjEyOGY1ZjRhODE3ZTRhZjA0MTEzODQ3YTIyM2FkZWIwIjoiNDY0YjQ4NGVkNzlkOTNhNDhlMGY4MDRlMDRkZjY5ZDdjYTEwYWQwNGJhNzE4OGQ2OWU2NTQ5YWI1MDUwM2JhYWVjNjdlMGFjYmE1NTM3ZDExNjNjODY4ZmQzZTM1MGU5ZDBhZTkxMjMwNDZiYzc2ODE1YzIwMWE5NDdhYTRhN2U0ZWQyMzljZTg4OWQ0ZmY5YzhkMDQzODc3ZGUwNmRmNWZjMjdjZjY3NDQyYjcyOWIwMmU5YzMwMjg3YzA4MjFlZjlmYTE1ZDRjY2NiYzUzYTk1ZmE5ZWMzZWQ0MzJjYTk2MGViYmY1YTE2OWNjYWRhOTVhNWJmNGM3Yzk2ODgzMCI6MzI6IjNlYjNlM2EyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGRkMzU4YmMzZjk5MmYyNmU4MWUzYTJmM2FhMmQ1MTciOiI4N2NjNGZkNzU3ODhjOWQ1Y2M4M2JhZTVkNzY0ZGQyNDlkMTc4YWIyMzIyNDA0OTc5NWQ0Mjg4YjVlZDllYTNmMzE3MDY4YTM5YTc1NzRiMzAwYzg1NDQyMjZlODdiMDhlMDA4ZmJlMjQxZDA5NDU0NWMyMTFkNTZhYzQ0NDM3ZDQxNDkxYTQzODI3MjczODk2OGM4ZDM3MWFhNzc4N2I1ZjYwNmM4NTQ5YTlkODY4ZDhhNzEzODBlOTY1N2QzYzAzMzc5NzlmZWIwMWRlNTk5MWZjMTQ3MGRmYzU5ZWIwMjUxMWVmYmJmZjNmY2I0NzlhODYyYmEzODQ0YTI1YWFhIjoiZDhjNzUwYmI0NDNlZTFhMTY5ZGZlOTdjZmU0ZDg1NWIiOiIiOjEyODoiYTgxZDEzOTczYmFhMjJhNzUxODMzZDdkM2Y5NGIzYjEiOiI3Nzk0OWIyOWYwODViYjNhYmI3MWE1Mzg2MDAzODExMjMzMDU2ZDMyOTZlYjA5MzM3MGY3Nzc3ZGFkZDMwNmQ5M2Q1OWRjYjk3NTRkMzg1N2NmMjc1ODA5MWJhNjYxZjg0NWVmMDU4MmY2YWUwZTEzNDMyODEwNmYwZDVkMTZiNTQxY2Q3NGZkYzc1NmRjN2I1M2Y0ZjhhMTk0ZGFlZWE5MzY5ZWJiMTYzMGMwMWNjYjMwN2I4NDhlOTUyN2RhMjBhMzk4OThkNzQ4ZmQ1OTIwNmYwYjc5ZDBlZDk0NmE4OTU4MDMzYTQ1YmQ5YWU2NzM1MThiMzI2MDY3NDhlYjY1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDNiNWYxODIyN2U1Yzc0Mjg4ZGJlZmYwMzgwMWFjZDYiOiJmNThkNjMwZjEwY2ZjYTYxZDQ2NDRkNGY2NTA1YmFiNjI5ZThlOGZhZjE2NzNlNjQ0MTdmOWI3OWU2MjI5NjZhNzAxMWNmYjNmZjc0ZGI1Y2ViZjA5YWQzZjQxNjQzZDQ0MzdkMjEzMjA0YTZjODM5N2U3ZDU5YjhhNWIxOTcwYWVkMmI2YmI1ZWExOTMzYzcyYzM1MWY2YmE5NmMwYjBiOTgxODhmNmUzNzNmNWRiNmM1ZWJlY2U5MTFlYzdhMTg0OGFiZDNhZTMzNTUxNWM3NzRlMDAyN2RhYjdkMWMwN2QwNDdkM2I4ODI1ZmY5NDIyMmRiYWY2ZjlhYjU5N2VlIjoiMDhlZTEyMjQ2Y2Y3ZWRiODFkYTNkNjEwZjNlYmQxNjciOiIiOjEyODoiODJkODNiMmY3ZGEyMThkMWQxNDQxYTViMzdiY2IwNjUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWE0MzNjNjEyZDdlMWJkZmY4ODFlNGQ2M2JhOGIxNDEiOiJjZTEwNzU4MzMyZjQyMzIyOGI1ZTRhZTMxZWZkYTc2Nzc1ODY5MzRhMWQ4ZjA1ZDliN2EwZGM0ZTIwMTBlYzNlYWFjYjcxYTUyN2E1ZmZmOGU3ODdkNzVlYmQyNGFkMTYzMzk0Yzg5MWIzMzQ3N2VkOWUyYTJkODUzYzM2NGNiMWM1ZDBiYzMxN2ZjYWY0MDEwODE3ZGJlNWYxZmQxMDM3YzcwMWIyOTFiM2E2NmIxNjRiYzgxOGJmNWMwMGE0YzIxMGExNjcxZmFhNTc0ZDc0YzdmMzU0M2Y2YzA5YWFmMTE3ZTEyZTJlYjNkYWU1NWVkYjFjYzViNDA4NmI2MTdkIjoiOGI2NzBjZjMxZjQ3MGY3OWE2YzBiNzllNzM4NjNjYTEiOiIiOjEyODoiODUyNmZkMjVkYWY4OTBlNzk5NDZhMjA1YjY5OGYyODciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGU5ZDc1Yzc4MWQ2M2IyOWYxODE2ODU5ZjdhMGUwYTAiOiJhOWYxODgzZjU4ZTRlZjc4Mzc3OTkyMTAxYWI4NmRhMGRhZmNlZmE4Mjc5MDRkZDk0ZGZmNmY2NzA0YjFlNDU1MTcxNjVhMzRjNTU1NWE1NWIwNGM2OTkyZmI2ZDA4NDBhNzFiZDI2MmZlNTk4MTVlNWM3YjgwZmU4MDNiNDdkNWJhNDQ5ODJhM2Y3MmNiNDJmNTkxZDhiNjJkZjM4YzlmNTZhNTg2OGFmOGY2ODI0MmUzYTE1Zjk3YmU4ZWYyMzk5ZGJhY2UxMjczZjUwOTYyM2I2ZjllNGQyN2E5NzQzNmFlYmYyZDA0NGU3NWYxYzYyNjk0ZGI3N2NlYWMwNWRlIjoiNzQ4YTNiNDg2YjYyYTE2NGNlZGNmMWJhYjkzMjVhZGQiOiIiOjEyMDoiMTMxZTBlNGNlNDZkNzY4Njc0YTdiY2FjZGNlZjljIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZlNmI4NTUzMDAyYzY5Mzk2ZDk5NzZiYjQ4ZDMwNzc5IjoiNzg2ZjQ4MDFiMTZkZTdhNDkzMWFiMTQzYjI2OWM3YWNjNjhmMWVkOWIxN2E5NWU4OTI5Y2NlYzdkNTM0MTMwNTlmZDQyNjdiZWRiZjA3OWQ5ZDY5ZTkwMzE0YzEzNDViYzljYjkxMzJmMWFmNjkzMjMxNTdkZGY3NTMzY2VkNDJiNGI3YmQzOTAwNGYxNGQzMjZmNWIwM2JjMTkwODRkMjMxZDkzYmNhYjMyODMxMmQ5OWI0MjZjMWU4NmU4ZTA0OWQzODBiYjQ5MmUyZTMyYWQ2OTBhZjRjZjg2ODM4ZDg5YTBkZmRjYmMzMGU4YzllOTAzOWU0MjNhMjM0ZTExMyI6IjU5NWIxN2QwZDc2YjgzNzgwMjM1ZjVlMGM5MmJkMjFmIjoiIjoxMjA6Ijg4NzlkZTA3ODE1YTg4ODc3YjA2MjNkZTliZTQxMSI6ImIxNWRjN2NkNDRhZGNiMDc4M2YzMGY1OTJlNWUwM2NjZDQ3ODUxNzI1YWY5ZmU0NWJmYzViMDFhZTM1Nzc5YjlhOGIzZjI2ZmVjNDY4YjE4OGVjM2NhZDQwNzg1YzYwOGQ2YmZkODY3YjBjY2YwN2E4MzZlYzIwZDJkOWI4NDUxNjM2ZGYxNTNhMzJiNjM3ZTdkY2RiZDYwNjYwM2Q5ZTUzZjZlNGM0Y2M4Mzk2Mjg2Y2U2NGIwZWE2MzhjMTBlNWE1NjdjMGJjOGU4MDgwODBiNzFiZTUxMzgxZTA1MTMzNmU2MGJmMTY2M2Y2ZDJkNzY0MGE1NzVlMDc1MjU1M2IiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNDg5OGM1NjAwOWI0NTkxNzJmZWY5YzE3OTkzYjU0ZiI6ImU3YmE2ZWY3MjIyNzMyMzhiOTc1ZDU1MWY5NWQzZTc3ZTliNzViMjRjNTQ3Yjg2ZWFmYjQ1N2Q0MDk4MDNiZGY2ZTE0NDM4MzlkODYwNGVlNDk3MDIwZTFhM2RiZDY4N2E4MTliMTdmZGRlMGZjZjI0MGNlMjEyOTc5Mjc5MmE1OGJmY2Q4MjU3NzMwMDFlZTk1OWJmOWVjOGQyMjhlMjdjZTFjZDkzZDdmYjg2NzY5YTM3OTMzNjFiNmY4MmJmN2RhZjI4NGFmYzFlY2U2NTdhMWVlNjM0NmVhOTI5NDg4MDc1NWI5YjYyMzU2M2FkMjY1N2JhMjI4NjQ4OGEyZWYiOiIwODYyZjhmODcyODk5ODg3MTFhODc3ZDMyMzFkNDRlYiI6IiI6MTIwOiIzNjkzODk3NDMwMWFlNzMzNzYwZjgzNDM5NDM3YzQiOiIzZmQ1Njg5N2E2Mjc0M2UwYWI0YTQ2NWJjYzk3NzdkNWZkMjFhZDJjOWE1OWQ3ZTRlMWE2MGZlY2NkYzcyMmI5ODIwZWM2NWNiNDdlMWQxMTYwZDEyZmYyZWE5M2FiZTExYmMxMDFiODI1MTRlYWQ3ZDU0MjAwN2ZlZTdiNGUyZGQ2ODIyODQ5Y2QzZTgyZDc2MWZmN2NmNWNlNGY0MGFkOWZlYzU0MDUwYTYzMmE0MDE0NTFiNDI2ODEyY2YwM2MyYjE2YTg2NjdhODhiYjNmNzQ5N2UzMzA4YTkxZGU2ZmQ2NDZkNmEzNTYyYzkyYzI0MjcyNDExMjI5YTkwODAyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmU1MjUzZDRiMDcxNzkzYjA4MWViYzEyMmNjMmE1ZjgiOiJiNTdhMGJkNzcxNGFlOTVlNzdmYTk0NTJlMTFhN2VkNGEyYmVjNjBmODFhZDZkZGI5NTZkNGIxY2I1ZGZjMjc3ZGNiNDAzNGQ1MDE4MDFiMjY3MzNiNWUwOGM3MTBjM2NmZGNjYzFiMjA4ZGM3YTkyY2Q3ZWJlMTY2MzIwNTgyYmNhZmY2NGNjOTQzYzM2ZmJlNzAwOGYwMDRlNWRiNzBjNDBkZTA1ZmE2OGIwYzlkNGMxNmM4Zjk3NjEzMGYyMDcwMmI5OTY3NGNkMmY0YzkzYWVhZWIzYWJjYTRiMTExNGRiYzNhNGIzM2UxMjI2YWQ4MDFhYTBlMjFmN2NjNDliIjoiNDllODJkODY4MDRlMTk2NDIxZWMxOWRkYzg1NDEwNjYiOiIiOjExMjoiZThiOGFlMzRmODQyMjc3ZmU5MjcyOWU4OTFlMyI6ImM0YTMxYzdlYzgyMDQ2OWY4OTVkNTc1NzlmOTg3NzMzMzM3ZWM2NTQ3ZDc4ZDE3YzQ0YTE4ZmFiOTFmMDMyMmNmZTA1ZjIzZjlhZmFmMDE5Y2Y5NTMxZGVjMmQ0MjBmMzU5MWQzMzRmNDBkNzg2NDNmZDk1N2I5MWFiNTg4YTdlMzkyNDQ3YmQ3MDI2NTIwMTdlZGU3ZmIwZDYxZDQ0NGEzYjNjYzQxMzZlMWQ0ZGYxM2Q5NTMyZWI3MWJjZjNmZjBhZTY1ZTg0N2UxYzU3MmEyZjkwNjMyMzYyYmM0MjRkYTIyNDliMzZhODRiZTJjMmJiMjE2YWU3NzA4Zjc0NWMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMzUwMmQ2ZjBkMTcyMjQ2ZTE2NTAzY2RmNTc5MzI5NiI6IjA5MjY4YjgwNDZmMTU1ODc5NGUzNWNkYzQ5NDViOTQyMjdhMTc2ZGQ4Y2I3N2Y5MmY4ODM1NDJiMWM0YmU2OThjMzc5NTQxZmQxZDU1N2MyYTA3YzcyMDZhZmRkNDk1MDZkNmExNTU5MTIzZGUxNzgzYzdhNjAwMDZkZjA2ZDg3ZjkxMTlmYjEwNWU5YjI3OGViOTNmODFmZDMxNmI2ZmRjMzhlZjcwMmEyYjlmZWFhODc4YTBkMWVhOTk5ZGI0YzU5MzQzOGYzMmUwZjg0OWYzYWRhYmYyNzdhMTYxYWZiNWMxYzM0NjAwMzkxNTZlZWM3ODk0NGQ1NjY2YzI1NjMiOiI2Y2U5OTQ2ODlmZjcyZjlkZjYyZjM4NmExODdjMWExMyI6IiI6MTEyOiIyMWNkZjQ0ZmY0OTkzZWI1NGI1NWQ1OGU1YThmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVmYjMzZGQ3M2RiMzA5YjlkZmQzYWVlNjA1Y2Q5NGJmIjoiZjRlMDExZjhjOTkwMzhjNDY4NTRiNDI3NDc1ZjIzNDg4MDc3ZWJmMDUxYzRiNzA1YTFhZGZkZDQ5M2EwYTEwYWY3YTdlOTQ1Mzk2NWI5NGY1MmY2MWFlNjJjZTkyNDNhODJhMmRiZjljNWEyODVkYjNmZTM0ZWQzNGVkMDhiNTkyNmYzNGM0ODE3MTE5NWY3MDYyZDAyYTZlNmU3OTUzMjJhMDQ3NTAxNzM3MWNiOGY2NDVjZGNhYzk0YWZjNjZkYzQzZTc1ODNiZGYxYzI1NzkwZjQyMzUwNzZhNTNkZTZjNjRmM2JjNTAwNGU1YTljZTQ3ODNmYmY2MzlmYWQ5NyI6IjNmNjQ4NmY5ZTllNjQ1MjkyZTBlNDI1YmFjMjMyMjY4IjoiIjoxMTI6IjdlZTVlMGUyMDgyYjE4ZDA5YWJmMTQxZjkwMmUiOiIwNTAzY2I1MzFmMWM5NjdkYWUyNGYxNmRkNjUxZDU0NDk4OGE3MzIwMjAxMzQ4OTZhMGYxMDkyMjJlODYzOWJmMjlmZjY5ODc3YzZlZjRhYzNkZjFiMjYwODQyZjkwOTM4NGUzZDQ0MDliOTlhNDcxMTI2ODFjNGIxNzQzMDA0MWNhNDQ3YTkwM2E2YzFiMTM4ZjBlZmJiM2I4NTBkODI5MGZjZWFjOTcyM2EzMmVkYmY4ZTJkNmU4MTQzYjFjYmM3YmYyZDI4ZDFiNmM3ZjM0MWE2OTkxODc1OGNjODJiYmFiNWQ4OThmYTBmNTcyZDRjZWFhMTEyMzRjYjUxMWVjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTk1OGZlM2I1MjAwODFiNjM4ZDllNGM3ZDVkYTdhYzciOiJkZmE5NDg3Mzc4YzdkOGFmOWM4ZGJkOWU1MzNjZDgxNTAzZDllNGU3ZGFiNDMxMzNiYWQxMWZkMzA1MGE1M2E4MzNkZjljYzMyMDhhZjFhODYxMTA1NjdkMzExZDVmYzU0YjBkNjI3ZGU0MzNjMzgxYjEwZTExMzg5ODIwM2FjNTIyNTE0MGY5NTFjZGI2NGM2NDk0NTkyYjY0NTNmOWI2Zjk1MmVjNWVjZTczMmZiNDZjMDlhMzI0ZjI2YjI3Y2RhZDYzNTg4MDA2YmI1YzZjMDBiOWFhMTBkNWQzYjJmOWVhYWI2OWJlZWRkZDZmOTM5NjY2NTRmOTY0MjYwMDE4IjoiYzM5NjEwOWU5NmFmZGU2ZjY4NWQzYzM4YWEzYzJmYWUiOiIiOjEwNDoiMDZjYTkxMDA0YmU0M2NmNDZlZDQ1OTllMjMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWMzMTlmYjE0M2VhYzgyMTViNTE1NDFkYWVjMjY4ZjIiOiJkMjk4ZDk4OGU3NDkyNzczNjIzN2ViOGFiMDlkN2E4NmI4NTRmYTJmZDFmN2YzYmU4M2I0MTdhYzEwYWE5MjkxZjRhZjViM2ZiYWY3NWEyOTZhYzMyMzY5YWQ1N2RlZDM5ODRiODQ3MTE5NTNlNDc3ZGUzMDM1YmE0MzBhMzBmZmI4NGM5NDE5MzZlNmM4ZDJjYWU4ZDgwMTU5ODc2Zjg3ZGQ2ODI3NDdmMmRjY2MzNmQ3YzMyYWIyMjcwMzJiOGFjNzBiMzEzZmE0MjAyZWEyMzZlM2VjNGQ5ZTRkOGI0OGNmM2I5MGIzNzhlZGM1YjFkYmVlYzkyOTU0OTM0NGY4IjoiOGE0Njg0ZjQyYTE3NzViMDM4MDY1NzRmNDAxY2ZmNzgiOiIiOjEwNDoiZTkxYWNiMWJmZGExOTE2MzBiNTYwZGViYzkiOiIyN2NlNGE2MjI5NTk5MzBmNDA1OWYyNDdkMjlkMTQzODI1NzA5M2NjOTczYmYxYmFlNGUwNTE1ZGE4OGI5YTdlMjFlYzU5YzdlNGQwNjIwMzVjZGY4OGI5MTI1NGQ4NTZiMTFjOGMxOTQ0ODY1ZmExMjkyMjIyN2RlZDNlZWNjY2FhMzYzNDFlY2Y1NDA1YzcwOGU5ZWExNzNmMWU2Y2RmMDkwNDk5ZDNiYjA3OTkxMDc3MTA4MDgxNDYwN2ExZWZlNjJlYzY4MzVkYzAzMzNkMTlkZDM5ZGQ5ZWE5ZjMxY2QzNjMyMTI4NTM2MTQ5YTEyMjA1MGJiOTM2NWI1MjFkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTRhM2U2OWYzNTFhYzM5YjQyOTc3NDlhOTBjMTM2NWMiOiIwNTEyMjRmN2IyMDg1NDlkY2ZkYTVmOWQ1NmNlNWYwYTA3MmVmMWYyM2YzODEwYzY5MzUxNmM5MjYyMmJlNmVkNGQ3YTllMGY5NDUwOTgwYmE0OTBiMmU5ZTM0NjhlYTdlZWYxMGJjOWViZDY3M2Q5MWYzMmI3NDhjMWJmMmM1MGNjNGViYjU5ZmM0MDljNmQ3ODBiYmEwMDcwMGQ1NjNjZTFkYzk5MjdhNmM4NjAwOTVhNDJlZDA1M2YzZDY0MGRlYmZiZmE3YTRlNmQ1ZGUyMzRhZjE5NzU1MDAwZDk1ZTdmNDE0ZjFmNzgyODVlZTE2NTQxMGMwMjAwMzgyODZiIjoiZWIxYzZjMDQ0MzdhYTVhMzJiY2MyMDhiYjNjMDE3MjQiOiIiOjEwNDoiZTQxODgxNTk2MDU1OWFlZmVlOGUwYzM4MzEiOiI3OTczMTBhNmVkOWNlNDdjZGMyNWY3Zjg4ZjVkYmJmNmY4ZjQ4Mzc3MDE3MDRkN2FmY2VkMjUwNTg1OTIyNzQ0NTk4ZDZmOTViYTJlZWNmODZlMDMwY2M1ZWU3MWIzMjhmYzFjNGYyZDRkZjk0NWQxYjkxYTI4MDNkNmFlOGViYTY4ODFiZTVmZTBmMjk4ZGQwYzAyNzllMTI3MjBlZGU2MGI5ZTg1N2NjY2E1YWJlOWI0ZDdlZTdmMjUxMDhiZWViYmZlMzNmMDVjMGQ5OTAzYmY2MTNjMmU3ZWQ2YTg3YjcxYjVlMzg2ZDgxYjNhZTUzZWZkMDEwNTViYmNjY2MyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMzQ4Mjc3NzFmYzM5MThkMWNlZTA5YmE5NDAxYjgzMiI6ImNlNzk3MDFiNjYxMDY2ZTUzMTkxYzlhY2RhZjY3N2FkNDE2MjIzMTQ4OThkNzIxNmUzZjExM2UyZTZlMjE1ZDI2ZDhiZDEzOTgyN2YwNmFiM2VhNWM0MTA1Njk0ZTg3ZGIxZGQ2Y2VjMTBlMWY4NmE4NzQ0ZDRjNTQxZjA4ZTQwMzE5ZTIyYWI0MmZjMWE2Yzg5ZWRmZDQ4NmI2ZjE0MmM2YmJiZjg0YTczOTEyZTBiMmU1NWI3OWRiMzA2Y2NhYmY4Mzk4NTVhZmRkODg5ZTUyYWU5ODE1MjBjODllN2RjMjliYjJhZGIxOTA2Y2NhOGM5M2ZjYjIxMjkwYTA5NWIiOiIyMzc5YmJkMzlhMWMyMmJjOTNiOWI5Y2M0NWYzODQwYiI6IiI6OTY6IjI2ZTFmNmNmMGQ5ZTBmMzZkZmQ2NjllYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIxZjliZDIwMDZlYzU1MGI3Yjk5MTNkMzgzMjAwYjVkIjoiNmQ5ZmM4ZjU4NmQ1MGQ2ZTAxMjgxNzJhZTE0Nzg0NGU4MDEzNjkwNWQzYTI5NzQ5N2E5NTY2Y2E3Yzc0NDUwMjkwMjhmMTRjOTk1MGFjZWU5MmE1YzEyYTkxNTBmNWUwMjRlMDFjNzUwNWRkODM5Mzc1NDJiMGIxMjg4ZGU5YzI5MmFlOGFkOTE4YTA5YjJlZGY4NDkzNTQwYjc0YzczZDI3OTRmMmViNmVlZDE4ZWJhNTIwZGRlYTk1Njc0NjJjODMzMzBmMzNkNzg5MmZjZGUwYjEwYzczYTRlMjZhYjFiZWYwMzdjZWM3ZTAxOTBiOTUxODhlOWE3NTJmZWU2ZiI6ImNhMjhmYTZiNjRiYjNiMzJlZjdkMjExZjFjOGJlNzU5IjoiIjo5NjoiYzg3YWFjN2FkMGU4NWRiYjEwM2MwNzMzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGIyY2VmMWE5MmFhMGFmMmIwMGZiMmE5OTg1NWQ1YmMiOiJmZDA5NTI1ZWYzYzY1YWI1ODIzZTFiNmMzNmI0YTk0NDlhMzk3NWM1ZDNhOWU3ZTMzYzYxZmIzMmVkY2JiOGU4YzkxNWI2MjAyZTNmYmNlODdkNzNjYzNiNjZkODNkOWVhN2UxZTM1M2NjNzQ2OGYwODYyNjkzMmNmMDIzNTU2M2UyYTI4OTUzZWU1YTBhZmFkYjFjM2NiNTEzYjFmMWZjOWE4YTZjZjMyNjE3NGI4Nzc0NDg2NzJmNzczMWRkNjQzMGE1MTYxOWRhMWExNjlhYjMwMmRhNWFmNWIzODgwMmY4YmJmNTg5MGI1ZDliNDVkZWRhNzk5Njc5NTAxZGM0IjoiMDhkODdiN2FjZWU4N2Q4ODQ2NjdmNmIxZTMyZTM0ZDAiOiIiOjk2OiIzYmQ3Njg1MzE4MDEwYjBjNWZlMzMwOGIiOiI1ODNlNjQ2MzFjMjE4NTQ5OTIzZThhZDMzYjcyOGQwN2YyM2IwZjE5ZDJhZmYxYWQ3ZTIwZDU2NGM1OTFkYjBlMTE3Y2FhOGYyMWUzZjMzNDVlM2Q4NGYwY2NiYjI3Mjc0Y2RkZjkyNzQ0MTBmYzM0MmNiMmE1ZDRhZWE0ZTkyNWQwZGQ1MzUwMzg5ZWUwZGVhMjNhODQyZmYzZjVjMTE5ODM3NGE5NmY0MWUwNTVmOTk5Y2ZiYzJmNDdjZWFhODgzZGE4ZWI2ZmY3MjlmNTgzZWZmMWY5MWJkM2YzMjU0ZDRlODFlNjBkOTk5M2IzNDU1ZTY3ZjQwNTcwOGU0NDIyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNzVjMzA2Zjg2NDRiMGM0Yjg5NGFlM2QwOTcxNTA1ZSI6ImZiZTdjZWQ3MDQ4ZjgzZTNhMDc1NjYxYzQ5MjRlYjc3ZGExYjRkNjAxOWQ1MDRhZmI5NDJkNzI4YjMxZmQzYjE3NTU3YmQxMDFjMDg0NTM1NDBhNWUyOGQzNTA1YWViODgwMWE0NDhhZmFjMmQ5ZjY4ZDIwYzBhMzFjN2VmMjJiZDk1NDM4ODUxNzg5ZWVmMWJlYmU4ZDk2YWMyOTYwNzAyNWI3ZTEzNjZmZWNkMzY5MGJhOTBjMzE1NTI4ZGM0MzVkOWE3ODZkMzZhMTY4MDhkNGIzZTJjN2M1MTc1YTEyNzk3OTJmMWRhY2NmNTFiMmY5MWFjODM5NDY1YmI4OWEiOiI5ODYwMjY4Y2EyZTEwOTc0ZjM3MjZhMGU1YjliMzEwZiI6IiI6NjQ6ImY4MDkxMDVlNWZjNWIxM2MiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwOGMwZWRjZmUzNDJhNjc2Y2NkYzA0YmRmODU0YjRiMCI6IjFmYzhlZjg0ODBjMzJkOTA4YjRiY2JmYTcwNzRhMzhlOTE1YzIwZWQ3YTFjNjA4NDIyMDg3ZTg5NDQyZDdjNWFmNmZlOWM5YTcxNmM1NTc5MzI0ODA2MmQ4ZTZjNmU4ZTkwNGUyODA0ZGEzYTQzNzAxZTRjNzhlY2RiNjdlMGIyNTMwOGFmYzZkOWI0NjMzNTY0MzljZDA5NWNmZjFiZGYwZmQ5MWFiMzAxYzc5ZmQyNTcwNDZjYmE3OWE1ZDVjZDk5ZjI1MDJhZDk2ODQyMGU0ZDQ5OTExMDEwNjA3MmRjNjg3ZjQzNGRiMDk1NWM3NTZhMTc0YTkwMjQzNzNjNDgiOiI0YTdiNzA3NTM5MzBmZTY1OWY4Y2MzOGU1ODMzZjBjNyI6IiI6NjQ6IjlhYjFlMmYzYzQ2MDYzNzYiOiI5ODM0NThjM2YxOThiYzY4NWQ5OGNlYTJiMjNjZjcxZjBlYjEyNmU5MDkzN2NhYjM0OTJhNDZkOWRjODVkNzZiYmI4MDM1YzZlMjA5YzM0YjJhNzE4N2RmMDA3ZmFhYmU5ZjMwNjRkYzYzZjFjYjE1YmY1YTEwNjU1ZTM5Yjk0NzMyZTBjNjU4M2Q1NjMyN2U5NzAxMzQ0ZTA0ODg4N2E4MWIyNTYxODFjZGZhOWVjNDJlYmM5OTA4NzVlNDg1MjI0MGRkY2IzY2JjNGVhNGU2MzA3MDc1ZmQzMTRmNzE5MGYzNTUzMjY3YmQ2OGIxOWU5NTRlMzEwZWMzZjhkYmFiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNDEwNjdhMDMwMWVkZjBmODI1ZDc5M2UwMzM4M2VhMSI6IjY5ODRiYjk4MzA4NDM1MjlmYWQ3ZjVlNzc2MGRiODljNzc4ZDYyYzc2NGZjZDIxMzZmZmIzNWQ3ZDg2OWY2MmY2MWQ3ZmVmNjRmNjViNzEzNjM5OGMxYjVhNzkyODQ0NTI4YTE4YTEzZmJhNDBiMTg2YWUwOGQxMTUzYjUzODAwN2ZjNDYwNjg0ZTJhZGQ4YTllZDhkZDgyYWNiYjhkMzU3MjQwZGFhYTBjNGRlYjk3OWU1NDcxNTU0NWRiMDNmZTIyZTZkMzkwNmU4OWJkYzgxZDUzNWRhZTUzMDc1YTU4ZjY1MDk5NDM0YmZlZWQ5NDNkYmM2MDI0YTkyYWEwNmEiOiJhMzA5OTQyNjFmNDhhNjZiYjZjMWZjM2Q2OTY1OTIyOCI6IiI6NjQ6IjM2YzNiNGE3MzJiYTc1YWUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwM2NjY2I1MzU3YmQyODQ4MzMyZDE2OTZmMmZmOTBjYiI6IjVlMmYxOGNiYzFlNzczZGY5ZjI4YmUwOGFiYjNkMGI2NGQ1NDVjODcwYzU3NzhhYzhiYjM5NmJlZjg1N2QyYWMxMzQyYWUxYWZiM2JmNWQ2NGU2NjdiZjgzNzQ1ODQxNWQ0ODM5NjIwNGZlNTYwZTNiNjM1ZWIxMGU1NjBlNDM3ZjJkMDM5Njk1Mjk5OGZkMzZlMTE2Y2QwNDdjMWQ3ZjZmYzk5MDEwOTQ0NTRkMjQxNjVjNTU3YTg4MTZlMGQwYThlMGNlNDFlMDQwYmE2ZjI2Y2E1NjdjNzRmYzQ3ZDk3MzhiOGNkOGRhZTVkZmM4MzFjNjViYzFiYTk2MDNhMDciOiJlMDc1NDAyMmRmYjFmODEzY2NhZjMyMTU1ODc5MDgwNiI6IiI6MzI6ImM3NWYwMjQ2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGU1ZTUzYzg0YTA1ZDVhNTM0OGJhYzdiMjYxMWNmNjIiOiI0ODljMDBjMDVkZWMwNmYyODI5MjRjNjgwZjYyMWFiOTlhYzg3ZjdkMzNlYmJiNGNhMGVlZTE4N2VjMTc3ZDMwZDJiNGFmYjRlZTlmMGRjMDE5Y2YxYTRkYTE2ZDg0YjdmNWY1YzdmY2U3MmEzMjQ2MWRiMTE1YjVhNWE0MzMwMjRmZDVlZDNkNDcxNjE4MzZiYjA1N2EwMTg5ZWQ3NjhmOTVlNDVmYTk2N2QwY2M1MTJmYzkxYjU1NTgwOGM0MDMzYzk0NWU4ZjJmN2QzNjQyOGRjYjYxZjY5N2U3OTFiNzRlNWM3OWIyYmNiOWNiODFiZWM3MGQ4MTE5Y2Q4ZDc2IjoiNDdlNDA1NDNiN2QxNmJjOTEyMmM0MGIxMDZkMzFkNDMiOiIiOjMyOiI4MWVlYzc1ZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjOTQwMDhiZjM3N2Y5MGI3YTFjMGQyZWEzOGY3MzBjIjoiN2IzZDYxOWQxMTVkZTk5NzBiMmRmNGUxZjI1MTk0OTQwYjNmM2RhMDRjNjUzMjMxZThlNjk0NmRlOWRjMDhhZTViYTM3ZTJhOTNjMjMyZTFmOTQ0NWYzMWMwMTMzMzA0NWYyMmJkODMyZTNiNWY5ODMzZjM3MDcwZmFmYjBlZjFjNDRjYzU2MzcwNThhYjY0ZDllMDdiYjgxYjMyODUyZDRjZjc0OWEzZGRiZmRiNDk0ZjhkZThiYjRlMzFmNDYwMzNmOGExNmJjMjJlMjU5NWQwMjM4NDU1MDVlYTVkYjc0ZGQ2OWFiNGNhOTQwMDc4YjA5ZWZiNGZmMTliZGI2NiI6ImFiZmU5MjkzMWE4NDExYTM5OTg2Yjc0NTYwYTM4MjExIjoiIjozMjoiNDdkNDJlNzgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjllZWRmMzc3N2U1OTRjMzBlOTRlOWM1ZTJiY2U0NjciOiI1MTE0ZTk5ODNjOTZmZWNlYzNmNzMwNGNhNDJmNTJhYTE2Y2I3YzZhYWRmYjYyYWQ1MzdjOTNhMzE4ODgzNWNhMDcwM2RhZDM0YzczY2Y5NjQzNWI2NjhiNjhhN2ExZDA1NjkzMTk1OTMxNmU4ZDNhYjk1NmJmNjRjNGUwNzQ3OWM3NzY3ZjlkNDg4YjBjMGMzNTEzMzNjY2Y0MDBiN2UwYmUxOWEwZmQxNzNlM2YyYTFhZTMxM2YyN2U1MTY5NTIyNjBmZDJkYTlhYjlkYWNhNDc4ZWJiOTNjZDA3ZDBiNzUwM2IzMjM2NGQ4ZTMwOGQ5MDRkOTY2YzU4ZjIyNmJiIjoiYTMzMzA2MzhhODA5YmEzNThkNmMwOThlNDM0MmI4MWUiOiJkZjRlM2YyYjQ3Y2YwZTg1OTAyMjhmY2Y5OTEzZmI4YTVlYjk3NTFiYmEzMThmZDJkNTdiZTY4YzdlNzg4ZTA0ZmFiZjMwMzY5OWI5OWYyNjMxM2QxYzQ5NTYxMDVjZDI4MTdhYWQyMWI5MWMyOGYzYjkyNTFlOWMwYjM1NDQ5MGZhNWFiZmNlYTAwNjVhYTNjYzliOTY3NzJlYjhhZjA2YTFhOTA1NGJmMTJkM2FlNjk4ZGZiMDFhMTNmOTg5ZjhiOGE0YmI2MTY4NmNmM2FkZjU4ZjA1ODczYTI0ZDQwM2E2MmEwOTIyOTBjMjQ4MWU0MTU5NTg4ZmVhNmI5YTA5IjoxMjg6IjVkZTMwNjhlMWUyMGVlZDQ2OTI2NTAwMDA3N2IxZGI5IjoiMjA4ZTYzMjEyMzhiZjVjNmUyZWY1NWE0YjhmNTMxY2JiZmIwZDc3Mzc0ZmUzMmRmNmRkNjYzNDg2Y2Y3OWJlZWVkMzliYjY5MTBjM2M3OGRkMGNjMzA3MDdhMGExMmIyMjZiMmQwNjAyNGRiMjVkY2Q4YTRlNjIwZjAwOWNhZmE1MjQyMTIxZTg2NGM3ZjNmNDM2MGFhZjFlOWQ0ZTU0OGQ5OTYxNTE1NmYxNTYwMDg0MThjMWM0MWZmMmJiYzAwN2NlY2Y4ZjIwOWM3MzIwM2U2ZGY4OWIzMjg3MWRlNjM3YjNkNmFmMmUyNzdkMTQ2YWUwM2YzNDA0ZDM4N2I3NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ1Y2MzNTMxMWVlZGYwYmEwOTNiZjkwMTkzMWE3MDM2IjoiNWRjOGQ3NTI1ZWFhZDAzNWMxOTcxNGFlMWIxZTUzOGNiNjZhNDA4OTAyNzI0NTM1MWUwYWQ5Mjk3NDEwZmIzYTBjMTE1NTQwN2MxMGE4YmI5NWE5Y2E2MjRhOWM5OTI1ZGFjMDAzZWU3ODkyNmM2ZTkwZmY0Y2NkYmExMGU4YTc4YmRhMWM0NDc4MTYyYTBlMzAyZGU1ZmYwNWZiMGY5NGM4OWMzYzc0MjlmYjk0ODI4YmRjZDk3ZDIxMzMzYzJlZTcyOTYzZWU2ZjA1NmNlMjcyYjhiYWIwMDdlNjUzYTQyYjAxZDFkMjA0MWJhNjI3ZjE2OWM4YzBkMzJlNmRhZSI6ImZlZDUwODRkZTNjMzQ4ZjVhMGFkZjRjMmZkNGU4NDhhIjoiNmUyMTA5MTRlNGFlZDE4OGQ1NzZmNWFkN2ZjN2U0Y2Y3ZGQ4ZDgyZjM0ZWEzYmNiZGI3MjY3Y2ZkOTA0NWY4MDY5NzhkYmZmMzQ2MGM0ZThmZjhjNGVkYjZhZDJlZGJhNDA1YThkOTE1NzI5ZDg5YWFiMjExNmIzNmE3MGI1NGY1OTIwYTk3ZjVhNTcxOTc3ZTAzMjllZGE2YzY5Njc0OWJlOTQwZWFiZmM2ZDhiMGJiZDZmYmRiODc2NTdiM2E3Njk1ZGE5ZjVkM2E3Mzg0MjU3ZjIwZTBiZWNkODUxMmQzNzA1Y2MyNDZlZTZjYTFlNjEwOTIxY2Y5MjYwM2Q3OSI6MTI4OiIyNjZhODk1ZmMyMWRhNTE3NmI0NGI0NDZkN2QxOTIxZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ZWRiNTIzMWNhNGExMzZiNGRmNGFlMjJiODU4OGY5ZiI6IjQ5M2RmODAxYzU3ZjhiYjU5MTk1NTcxMmQ5MmQzZmMzNDUxOGYwNTk5ZmVjODUzM2IyYjQ0NzMzNjRlMWRmNGY1NjBjMTI0NDRjZjUwZWViNTg0Njc2YjdlOTU1Yzc0MjE4OWRlNmI1MGI4ZTAxMmRmYTY2NDJmMzY3OWZiMDJiYzZkOGUwOGQxZGI4OGM4YWU5NTVhNzk0NjI2M2UwNjQ5NGUxN2Y4ZGYyNDZiNjcyOTQyNjYxZTU1NjMzMDIyNTIyMDhmMmUwMGEwZDc3MDY4YTAyMGUyNjA4MmMyOTFhNzVhMDZmNjNjNDFlMjgzMDI5MmE0MThiMmI1ZmQ5ZGQiOiJjMzQyZTliZGFiZTdiZTkyMmIyNjk1ZjU4OTRlMDMyYyI6ImE0NWM3ZjgwMzJhYzUxNDRkZWVmOGQ1MzgwZjAzM2FlYTI3ODZiMDU5MjcyMGE4NjdmNDgzMWVhY2NjNmI4NWQzZmQ1NjhhZWRjNmU0NzJlMDE3NDU1YjBiNWIzMGNmN2EwOGVhNDNjYTU4N2YzNWUxNjQ2ZWNkOWI0ZGM3NzRkMTFlMzUwYzgyYzY1NjkyYmUxZTk1NDFjYmQ3MmEyODNiZGNmOTNkYzcxMTU1NDVmMzczNzQ3YjRmOGQ1OTE1ZWQwYzQyZmJlZWZkM2U5YmQ4NjAwM2Q2NWVmYzIzNjFmZGU1Yjg3NGRkYWJjZjgyNjVlNmI4ODQ2MTUxMDJlZmYiOjEyODoiNWVkM2VhNzVjODE3MmZhMGU4NzU1ZmVmN2I0YzkwZjEiOiI1NjY5NmU1MDFmYWMxZThkNWI4M2VmOTExZWQxMTMzN2Q1ZDUxZmY1MzQyYTgyOTkzZGQ1MzQwYmI5NjMyZTY2MDZlZWY2OGVjNWZlOGNlYzZiMzRlYmJjNTk2YzI3OWU2Y2JjOTIyMWM0Y2RlOTMzZjZkOTNhZTAxNGUzYzRjYTQ5NTkzZjM1ZWFhNjM4NjA2ZDA1OTUxOWJhYzNhMzM3MzUxOWU2MTg0ZTcyMjdkMmFhNjIxNzBjMzY0NzlmZTIzOWNiNjk4YmZjYTg2MzkyNWE0YzlmYjEzMzg2ODVhNTVhNmRmZDNiZDljNTJkOGFlMTJiZTg1NTFmY2U2ZTFhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDVmZGNiOGY1MjI1MDkwZTYzZmFlOWI2OGY5MmM3Y2IiOiJkMzliOWNiYTk1ZTNhM2FhYjliYzFkMDNmZjQ3NWMwNGZhZWI1YjdmMDUxMDc3N2YzOWU1YTA1NzU2NjA2ZWI3ZGRkMTU0YWFjMDM1ZDlkZGFmMzUzNTYyOTgyMWRkOGYwMTRkZWRkNTJjZDE4NGY1MmZjNzA2ZTNjODlhM2EyNzEzOThjOTEyNWQ5YTYyNGRhZmIyOTdhNTYwMjJjYTJlYTMzMWVhNzM1OWFiNWU2NWY4ZTE0ODE0Nzg4ZTY0ZTBhODg2YTliMWEwMTQ0YmYyNjhmZGNmOWQ5NGMzZDEwYTA0NTJmNDAxMTFkYTlkZjEwODI1MmU5MDM5ZWFjZWEzIjoiNTgxYzgxODI4MmEwOTA1ZGY1ZmZmZjY1MmU1NjA0ZTkiOiJmMWFlNmNkN2IwN2YyNjExMDVmNTU1Y2Y4MTJhMWQ1YmY4ZGQ5YWFjMDc2NjYzMThhY2ZmYTExYWJiNzdkMDIzODE1NjY2M2FjYmY3NTQzODI1YjQ1YzZlOWNkZGI0ODFhNDA5OTVlY2Q3OGJiNWY0Y2JhNWRmN2M3ZWZiMDBmYzE5YzdmNDVlOTRkMzc2OTdhY2E4ZWYzNjhiOTkxNjUzOTNiNjEwN2Y5MDAxOTRjNzk3Y2QzMjg5Y2IwOTdlYjU5MTVmMmFiZmQ2YWE1MmRkMWVmZmZmZGRlNDQ4ZTMwMDc1YTFjMDUzMjQ2ZGI1NGIwZWMxNmVhZGNhMWMwMDcxIjoxMjA6IjgyN2U2NmI1YjcwZGNlNTYyMTVjZmI4NmM5YTY0MiI6ImNlYzExYTEyZTQ3ZmQ0NDNmODc4ZThlOWZlMjNjNjVmMjlkZDJkNTNjZWM1OWI3OTliY2IwOTI4ZGU4ZTJmOTJmZTg1YzI3Y2VjNWM4NDJlZjMwOTY3YjkxOWFjY2FmZTBjMGQ3MzFiNTdmMGJiNTY4NWQ5MGEzMDYxY2I0NzNlNTBlOGFlY2ExMzQ2ZDFmNDdmN2RiMDY5NDFmODNmMjFiYTU5NzZkOTdjMjhjYWI1NDdkOGMxZjM4Mzg3YTA0YjhhMGIyMTJkYTU1Yjc1ZmJhZjk1NjJlZWVhYmQ3OGVhZGNiYWI2NjQ1N2YwY2Q0ZTBkMjgxMzNhNjRjYjA2M2YiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMzYxOThjZDNhM2FiOTMxOTY4NGQwZjgxMWNmMjk5MiI6IjZiOTViOWU4MmE2OTVmYjdiNDY2Y2UzYWRiNTM2ZjUyNWQ4MzE0Zjk1ZWFkYTM5ZWZiNDliYWYxMjEwOTNjZTdkNTQzOWYwZDgyMjNlMDM1MzBiODVhY2NkMzg4YTcwNjUwY2E5ZjdlNjNlYjMyYWZlY2I3YjE5MTZlZDliNzYyMTI4Y2M2NDFjYWYzZTA4ZTAyN2MzZDg4NDgxZDY1M2I2YjE1MTcyZTk3N2RmYjliM2Y4ODQ2NTkxMWFlZTE2MjUwMWNiZjg1MDFjZTJiNjZlZTE1MWJiZmRjMjMyMjVmNjM4ZjE4NzUwYzIzOWQ2MjQ3MTY2M2U1ZWUyYTU4NTYiOiI0N2RmZmM2YjNiODBmZmVmNGI5NDNiZGU4N2I5Y2YzYyI6ImVjNGRlNDc2Y2QzMzdmNTY0YTNmYWNiNTQ0ZDBmZjMxY2Q4OWFmNGMzZDlhMjg1NDNlNDUxNTYxODlmOGVmZjhmODA0NDk0ZGRhODNhMWZiMmMzMGNlODU4ODg0YTAxZWM2M2RiNTkyNjg0NTJiMWVlYTBmMGQ0ODI4MGJiNzM0MGVhYWNjODQ1MDk0NjlkZDk0ZDMwMzc3NGQwNTNkN2FiNGZiNWY2YzI2NTgxZWZlYjE5MTY1ZjhjYjA5ZDU4ZWMzMTRkMDlhYjgzNTY3MzFlODdmZDA4MWY2NjFlN2IyZDFhN2MzYWE0YWY1NDQ4YTEyYjc0MmU3YjIxMGIwYjAiOjEyMDoiNmNmNjhhMzc0YmVhMDhhOTc3ZWM4YTA0YjkyZThiIjoiNWMyZjdjNDA4MTY3YmUzZDI2NmZmNjM0ZTE5OTNmZTI5MWFlZjdlZmFlMjQ1ZmEwYjZiNWJkZTg4NmE4MTBjODY2YWU2YTA3ODI4NjY4NGQxYjY2MTE2ZTYzNmUyODVmMDM2NDZlMDlmM2M0ZWQ3YjE4NGU3YzE3MWJhODRmM2JmZDk1MDBjNmYzNTk2NGE0MDQ4OTJiNGNkY2RkM2Y2OTdmYzViMDE5MzRhODYwMTk4MTA5ODdhOWZlYTdlZmNhMDE2MDQ5ODczZjEwNzJmNjJkZjNjMTdmNTdlYTFkODhjY2Q4NzU3ZjdlM2M1ZDk2ZThhMThkNTM2NmEzOWVhOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM5ZmJiZmY4ZjI1Zjk1MWJhODc0ZGZjNWZmMzg1ODRlIjoiY2E0MDEwNzEzOTZkYTAwMzc2YWRkNDY3NDkwYWJjNmU2YTdkOGE4NTg1MjAyNjk3OWY3MDEzYTA5Y2Y2ODkxMTNjOGQ4MzM1NjBjZDZjNWI4ZmRhYThmZGQ4MThlNzczYWMxMzk1NDgzOWEwYTJjOTFlZmVhZjRlMGUxNGRlNDMzMDg0MTlhOGI4NmZhMmFlNjAwYTg4YTZiZDM5ZGZhYWJjMTZhM2M3YzFiNzdhNWMyYWFiN2Y3Y2FjZWIyZjg1OTUzMjQxMjVlZmJiN2M5NmJhMTZjNDdkMGJkMTA1NjhiMjRiZjQ0NWQ3MmQ2ODMyNjg0NjZlNjhlNDZkZjUwMCI6IjFjMWZjNzUyNjczYmU2ZDRmZjRjYzc0OWZjMTFlMGZlIjoiYWJmZGUwYjYwYWNmZTI2NWI2MmVkNjhlYmViYzFmNWY3MjVmMTU1YzRiOGE4YWVlYzhkNzA0NzAxYzUxZmY3ODE3MDYwYzFiMGNlNmI4MGQ2ZWZjOTgzNmM5ZWEyYmMwMjJlYzY3ZGI0Y2QzNGU5NDVlM2ExYjE1M2ZkMmUwZjdhYzg0YmI0YjA3ZTA0Y2JiNTI5ZWUyNDAxNGIxNjA2N2Y5ZjA4MmI5NDBjOWQ1ZTU0MDI0ZDNlNWU5MTAzMTA0NTc0Nzg1NjA3MjE1ODdkYTdiNTM0M2Q4OWVlYzVhOGZjZTM4OWMwMTE4NWRiMTVlN2ZhYTlhM2ZhMzJlOGFiOSI6MTIwOiJmZjBiMmMzODRlMDNiNTBlN2U4MjljN2E5Zjk1YWEiOiIyMzk2MzdmYWM2ZTE4MGU3MWIyYzlmYTYzY2U4ODA1ZjQ1M2Q4MTQ5OTYyM2VjMmRlYmE5YjAzMzM1MDI1MDY2Mjg5Nzg2N2JmZmFmMGMzMTQyNDRiYWY5ZTFmZTNlMWJiN2M2MjZkNjE2YmZiZjNlMGFjMDlhMzJhYWY3MThiNDMyMzM3YzlkYzU3YzJkNmZjNGEwYTA5YmRjMDViOTE4NGQxYjkwYzcxOTNiNzg2OWY5MWUyY2FhOGIzYjM1YzEwYzY2MjFmZmFlNGM2MDliZGY0ZTRlM2YwNmU5MzA1NDFjMzgxNDUxZWY1OGY0ZjMwYTU1OWQyYjc5YjBlNmI2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2EzMTRlYzE3OGRhOTYzMTFlNDIzMzRhNjE2ZmIzOGIiOiI1MThiM2Y1Mzg0YWI1NGY4MDQ5N2Q1NWJlN2E1ZDY5MDJiYzc3MTgzODYyMTJjMmVjNzUzN2RiMzMxNTE0YjM4MzhmMTA0YmY5MDU0ZTAzMDM5YTRjZmI3M2Y0MWU1ZDBhOTY0OGU1NjllZDczOGNlYThkMzM5MTc0MzBkZmY2YWZhOGYwN2E3NWUzMjRiOTI2MmZhMTk2YTQ0MzlkY2Q2NmIwNTM1ZWU1YmVhMGQyOTI2MDAyMjdjMmE3OWVkMDNiZTA2NzE3NDBlNWNiN2IzMDZkODU1NjEyYmQzYWJjYmYwMmNmN2U3Y2VjYmI2Y2RiYjMzZDU3YjRlMzIzNGEyIjoiZDdlYTI3YzgxOWUzZWIyNjY2NjExYmIxYzdmYzA2OGQiOiJkYjhkY2MzMWE1NjgxZjEzZDU2YWJkNTFiZDJkY2IwZDJiMTcxNjI4MTg2ZTIxNWE2OGJmMTYxNjdiNGFjZDAwYzM0NDE5NzNjM2ZhNjJmYTI2OThlZTVjNjc0OWZjMjBlNTQyMzY0ZDYzYzQwNzU2ZDhiY2ZmNzgwMjY5ZTUyMDFiYWZkY2VkM2NkYzk3OTMxZDgyMDM4NzM0MzE4ODJjODQ1MjJjMTUxYjc3NTI4NWQwYTNjNWQ3NjY3MjU0Yzc0NzI0ZmYwZWE5ZDQxN2FhNmM2MjgzNTg2NWRmZGVkMzRlZGQzMzFjMGMyMzVhMDg5NDI3NjcyYzVhOTIxMWM5IjoxMTI6IjFlNzc0NjQ3YjFjYTQwNmUwZWQ3MTQxYThlMWUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTgxODM3MmE2M2I3ZTJjMjNiNTI0ZTI5YmE3NTJiZGIiOiJjMWJmMWI3MDJhOTVjZWFhNmI0OGExY2RkODg4YWU1MWY1OGE5ZmMzMjMyYmQ2Yzc4NDUyOWE4MzMwMWM2ZDBjZGRhNmU2MDVhZDlhMjU2M2Y1NGE4ZDU5ZjYyNGFlN2M1ODllNDhiODUwNDFhMDEwZGNiNmZiODczOWQ0M2U3OWE0NTZmYzBlODU3NGFmMDg2ZGY3ODY4MDQ2MGMzY2RjNGUwMGRjM2I5ZDRlNzZiMGRlMjZlOWFlYzU0NjcwNTI0OWZhN2U3NDY2YzAxMDAxYzI2NjdlYWYyODEzYmUxZjBmMTE2OTE2ZjM0ODQzYTA2YjIwMWQ2NTNhYTFiMjdlIjoiMzZlNjE3ZTc4N2NiMjVlMTU0ZjczYWYxZGE2OGNiMDYiOiI3MTgwMWQ2OTc5NmMyY2UzNmIwNDNjMTU3YWVjOWZkMmUwNmZkMWVjNTk2MTI2ZDEwYzI2YjZkNDRlM2RjMzZjNGZhMzBhMDMwZDY1YzM4MmI2ZGRmZDk1OGU3MWZlOWMxNjczMmU1OTUxMzdhM2Q2NzY0YzE1NDgwZmMzMzU4ZTlhMTEzYmE0OTJiMzEyNzQ2NjNmNTg0MmRmNWQxY2M2YmFkNzBlODNiMzQ2NzVhNDQxMWUyZTcwNzU1YWVkZTBmZjUwMzU2MDFiZTEzMDU2MmUyN2EyMDI4M2Q2ZjE0NGZmMWJkYjUyNzZkZWMwNWZhZDgwZDUxYjI4ZDUwNjg4IjoxMTI6IjM3NDQyNjJiYzc2ZjI4Mzk2NGMxYzE1ZGMwNjkiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWEwNGYxNjg4MmZmNDU4MTY3MzlkMWI2Njk3Y2U4YjciOiI2YTRmM2RiYjMzNzFmNjQyNThmZDFmODMxMzQ5ZTc0NWE0ZTE5YTMzYWFkNzk0YjFkZTM3ODg3Mjk2MThiZWVkNjE5NTg2MDkyMTIwZTllNWRjM2FjNmUwZDUyZjk5MWY3YmU2MWFmYmZhYTQzOTlhYzcxNmFkNzlhMjczNDgyNzI1NGIxNjI3NzkxZGM5MmExMjhhNmY0MzQyNmI4MDg1ZGVlOTQyNDJlODMxNzZhM2Q3NjI2NThmMThlY2MxZTM3ZTNlMTUzMTY0OGM5Y2FlZDIxMmVhMmNmM2IzODQzY2I5MmNiMDc3MzBmMzBmZTJkY2EzOTI1NDcwZmFkZDA2IjoiNjZmNTA0ZDlhOTEyOGFkN2ZiN2YxNDMwZDM3YzQ3ODQiOiJmNjQxYzUzYzgzYzRmYjFmZjgwNDRiZmE5N2NkZjYzZmU3NWQ4MTU5ZDY1YjNlNWFkNTg1Yjg5YzA4M2E1M2NmNGEyZjdhNThlYWVhZjQ1ZmE3MWYyYzA3YmM1NzI1YTZiMDMzMDdkN2YzMjg4NGExMzNhNGM4MDM3MDBiZjFlMTI1NjRiOThiNzFmNjNiNDM0ZGRmMTNhZDJjNDY3ZGRhMjVmZmE2ZWZmY2FmYTcyNDUyYjIwYzM0Y2ZhZTcxZTQ3MDk2Zjg3NDViNDg3ZTlmMTk0NWY1YmVjODNmN2VjMjcwOWExM2I1MDRkOTIzMTViMWI3MjdhNzg5MDJiZTg0IjoxMTI6ImZiYjM3MDg0Mzk2Mzk0ZmVjZDk1ODE3NDFmM2MiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzhjZjAyOWE0YjIwNjA3MDMwNTg2Y2QyZDgyMTQ2ZTYiOiJmNGM5ZjQ0NzY1NjFjOWViZGFjNzFiMjgyYWU2ZTJmOWYwMzU0N2RhOThlNjZkNGQ4NTc3MjBkYjJmY2M5ZWQxZjM2Mzg1OGRiMzRjOWRjYWNhMDEwOWQ3YzgxZGIyNDE1MDQ5MzExNWYyYmI2OTg1ZWZhODY4NmUzZDJhYjcxOWQzM2IyMzBhYTRjNWM3MDY5NmJmNDJmMjI1ZmIzYzY3MDQ3MTFjMDU0YTg4MmQ4OWIzMjA4ODRhNzhjYjU5Y2QyMTAwNDk2ZWRmNDAxMDQ4NzU5N2ZiOTEzNWQ4Y2E3OTY5M2E0Mzg0M2U5NjI2ZmQ2YzY0YTg3MjJiM2EyN2RjIjoiNjMzMDA4NDMxOWUyYmYzMmNkNTI0MGY0ODI2OTQ0YmMiOiI4MDc0NmNmYjAxMjdjNTkyZjgxNjRkNzUxYjBlMTRhNWIzNzkwNTZhODg0Y2VjZTdlZTRlOWI4MDUzOGQ3ZmY2YmU1NmEzYjE5YzEzNTc4NjcyMmFhZjMxNTEyM2I0NzY3MmIwMjUxZTg3ZWE0NWYwZmQzNjAxY2Y5M2Y5ZWZhNmNiZDlhZDUzN2Y1NGQ1N2YxZTE4N2Y4MjFmYWFjMjQwOTZlY2VjMTlkMTM3YzlmNGNmMTQ1YzI3OGFmNGNkOGRlMDFjNzc1ODc4NGZkYTA2ZjFjYzYyZDkyYWUxOTc3Nzg2ZjNkMDY0NTcxNGFiNGFiNmY0OGM4Nzk0YjEyZjczIjoxMDQ6IjdiMDIxZGU1Y2RhOTE1YmE1OGY5MGNlZWY0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNmNGQ4MWZjNTk5N2M3NDRhNTcyYmVkNzFmNGFlNjA5IjoiZjNkNjVkNzAzMjZlNjQxZmJlN2ZkOTQ1ZmU5Y2Y2NmM3NGYxN2QwZDEwMjBhZThhYzQ4OGYzOWI3Mjg1Yzk5ZDg2MzJiYzIyMDE5NjBmM2Q3N2RhY2NmZWNjMDQ0MjhhYmUwODUzYWE4ZDgyYjkwYTkzMTI3YzcyYjJkMmFmNTNmN2YxYmQwYWZiOTlkNTBmMGIzYjI0ZTkzNGVjOThlZGRiMjc4YjJjNjU4NjY0NDJjZWJmMTAyMDhjN2NlMWI3ZWNmNzY0ODU4NDgwYjJhMjY5YjEwNmZhNmQyNDI4ZDVhZDE3NjEyZTUzZTYyY2NjN2FkMTE4NDY2M2FlYjlhNyI6ImJjNGUyMGM1NjkzMWM5NjdjZThlM2I4ZjVmMWMzOTJmIjoiYjZiODI5NGFiZjdkYTU3MDNmODY0NzIxZjc5MDRkMzgyMWY1NTY4YmY0YjI2OWU0NGVkZWY0ZjFjOTVkZGMxNzJkODNhMDZjMGFkOWY3ZjFmZDJlMjkyYzE3YTg3NjM5MmJjNWJiNzA1ZDM3MGIyZjE2ZmY3MjFiZWY3NjQ4ZjQyMzM0NmZkM2E0ZDc2MjY3NmU2ZmNmMmQ2OTA1NTNhNDcyMjRhZjI5YWZlZDBmNDUyZDI2M2JlOTBlYjgxNTBhMTNkNzIwZjFkYjZmMWFiYzFjMmVjMThjZmJmOTNiOGVkM2M1YWE3Y2ZjMWRjYjUxNGQ2OWY5MDQwOTY4N2E0ZCI6MTA0OiIwYTg2MTQyYTBhZjgxYzhkZjY0YmE2ODlmNCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkODhhZDQwYjQyZWFkNzQ0ZjFiN2EzNjY4NTY1OGJlMSI6ImU5OWQyNTY2ZmU2YmNiMmEwNGQxNjc2MDVkYjdjMGYxZTU1NjdmZjJkOGQzMjkyYzE1YmJjY2M1ZDFlODcyYmNiMTVhMzBiM2JiOGIxZWI0NWUwMmZiYTE1OTQ2ZTZiY2EzMTA1ODNhNjc0MDg0NWEwZjc0ZjRlYmZkNWM1OWNlZDQ2ODc1ODIzZTM2OWUwNDQ3Y2MzZTVkMDNkYWU1MzBhZGYzYzk4NDYzNjJjOTRlN2Y5ZDE3MjA3YmY5MmQ0ZDU5OTgxZDhmZDkwNGViOGI5NmEwYTIzZWIwZjhkN2U3YTg3ZThlODg5MmEyNDUxNTI0ZGE2ODQxY2U1NzVjMjciOiI1MmMzMTU4ZjViZDY1YTBhN2NlMWM1YjU3YjliMjk1ZSI6ImRkZTI2NjMzMzVjNDBlNTU1MGFlMTkyYjg0M2ZhOWZiNGVmMzU3YjVjMDlkOWYzOWRhZmRhMzI5NmE0ZDE0MDMxODE3ZWU0ZGMxYTIwMWQ2Nzc1OTdkODFlMzcwNTBjZDNkYzg2YzI1YWRiZDU1MWU5NDdhMDgwYjZjNDdlYzdiZThhOTI3ZWY3OTIwYmQxYmI4MWYyYzU5ODAxYTJiOWQ3NDVkMzMzNDRjYmU0ODM4YmNmMmViOGRjZTUzYWI4MmM3NWM5YmJhYjhlNDA2NTk3ZjY5MDhhYWE4MWZiYmRlZjI1YWE2OTExNmM4ZjdhOGNkYzk5NTg0MzVhYTMyYWMiOjEwNDoiNzY0M2IzNTM0ZWI1Y2IzODMzMWVkMmU1NzIiOiI2Zjg3ZjZiZTJmNGU3NDIxYWEyNmZlMzIxMDQ1ZDFlMjMwNjZhMDIxNTg2MzRiZWYzNTg5MDU4MWM5MjM2N2QwYmMyMzI5NDBkZTMwOTc0YzcwYTY2YzYwMTM3YTlmMzkyNGQxMmRiMWU1YmMxYjBlNzEzMWVhMzYyMGEyNWViODA1YjdkNjcwMjYzYjgyYzhiYmZjZDY4MzkzMDUwMjUzOTBmYzE3ZDQyZDgyZGFlYmUxYjI0ZjczZmY5YWE0NjE3ZTM4NjY3ODVkZGVkODhmOGI1NWVmODliMjc5OGVhMjY0MWE1OTJhNDY0MjhkOTAyMGY5YmY4NTNjMTk0NTc2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjM2NlODZhMjEyYTMwZTcyNGI0YzYyNDA1N2RiNGU3OSI6IjM1ODJlZjdhOTU2NWM5YThlNDQ5Njc1MGVlNWNhM2UzYTgwZGY2MjM4ZjdiNzYwOGUzMzk0ZWM1NmQxMzYwNzc3OTIxZGEwMzllZGUzNGFiY2VkZDAxMDgxYmFiZDQ5NmJhNGRlNzRhN2RlNTAxMTgxZDZiYjIwMjJhNmNjN2Y3OWQ4OWE0YzZhOTc2NzZmYjBmMmI0MmY3MGUyZDBiYzFlYWFjMzY0YzM2NDZkZjRmNjExYzFkNmIwOTczNzQ1MWI4MWI1YTRkYTczYzA1ZmI1ODM5MWM3NGU0NDQ5OGI4MGIyNmYxYzI5NTYyZDIzYzM5YjVkM2YwODZiMjgwY2IiOiI5ZTAzZjBkZDRjYjJiM2Q4MzBhNjkyNWU0NDAwZWQ4OSI6IjkyYzQ4YTM5ZDkzZWEzMzA4ZjU1ZjY2NTBkMzNmZGYxN2E5MDIwNzZkNTgyYTk0YTgyYWM5OTQ5NmRlOWY2MjMxMjI5MmI4NDRiYmNhNWE2ODNlZjBmMDcxMGJiYzFjN2Y4OWNiY2NhOGY5YzAyOTlmMTU0NTkwZDMyMDU5YmQ5OWZjYTVkNzhjNDUwZWRlMGQxMWQ1NTA3NTk0N2NhZjIxNTEyMThjZTdhMDZjMWU4MTk4NWE3NzgxYTM0NDQwNTQxNzBiNDU3ZmQ3YmE4MTYwMjYzMTAxMTJhYmI0N2M4ZWRkZmQzYWI3ZjY3OWEwZjYwZWZjNmM2ZGQzYjc1OWUiOjk2OiIzMjMwZmU5NGI2Y2NkNjNlNjA1Zjg3ZDAiOiIwNTIzNDdhNDI3M2NkZGJhNjViMmEwYjk2MTQ3N2YwN2VkZWU0NDBhOTExN2FiMjA0MzU5ZDJkZDQ1YWQyYTZkYWQzYjYwZWFkODkxZTdkYTZkNzlmMzAxN2FjOTBmOTU3MjVhMDA4OWYwNGQyNWNlNTM3YmY1M2I3ZWE4ZTFlYTU4NjkyZDM0YzIyMWRiMTQxZTJhOWZkNzIxMWFkY2VlMDNlZjhiNWJmM2M1ZDM2MzExZDIwYmIzZDgxZjcwZjdlNzI3MmQwZTJiNmQxMjI5M2IxYTJjMzFiNzBmMTQwYThmMDhkOThjNjIzMWEzYzQyOWMzZDBhMTBiMmUxYzFjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMDE1NTM2MGI4NDQyMGI1YmY0ZmI0MTBlYTAyZjMxZSI6ImVjZGI1MTUyMmZjNDQwZjc0NzFlYTZhMzFmN2MxZWYxZWMyMTUzZTViY2Y2MzAzMjk3ZGJmOGRkYjM4MzBiNDVlZDk4NjYxNTczNzVjZTRiZGViNWUzMmZjYmM2NjA3OTg0ZmNjZDdlNjU1MjYyODczNjYwOGFiMTMwNzI4NTZkNDMyY2VjY2QzZTkwZDFiYjUyY2E5YWRhOWNlZTkwZWI4OWFjMTBlODg3YTE5NzhmZDBmYjNkN2JiMjBjYWFmMzU1MzllMTUwYmU4MDQ0YjcyNWI4NDI3YzRjNGE5MTBmNzk5ODA4NjVkMzYzNDRhODc4NGJjYzNkNTg0NjBhY2IiOiI0NmYwMzg2YmU3MzYzODg3ZTdlMzU3Mzc2MzA1ZWFiNSI6IjYxMWJjMjkwZjkxNzk4YWQ4NGYwYTVlY2I1YTdjYjhmYTM1ZTlhYjZhNWE1MWM5ODY5YTY4YTA3NmU5NmY5MmM5YzExNzU5NWY5MmNiYWM1ZDMzMzQzZmEyYWNjZDI1NDE0NzM5MDdjYmM1NDc5MmM1ZTIxNWFlODU3NDI0YzkyMWIwNGNhNGI4MTM3NmJiZWRiZmNjMGU1NjVjMTE4ZjJhY2VkMDhmMjQ3Njk4ZWVkNWUyZDIwMmM0ODI0NTE2MWNhYmVhYzlmYTE5NTIxOWY5Nzk5ZmEyNTNlMzM5NTYxZTEzMDEyMTY3ZjFkMDJiNDAxMmI3NzkxYjdjODYzYmEiOjk2OiJhYzVhZGRjYzEwY2FlNmMxMzQ1NTIwZjEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2OTRmNjIxZjU5NGQ5NmIxNmMzMjI1NGZmMDZmM2Y5YyI6ImU2MTQ3NmI4YjdmMTAxY2E2MDA1ZjI1YWYyYjliZWU3OTVkNjI3MjBiYmJmNTkzNTcwNTdjYTdjZDQ3M2UwMGYwZDQ2NTI1NWZjZThkNjE2NDY1NzYwMzMyMzU0OWZiNGUzZDMzZmE1MTA1NGIxYTcwY2M3ZTQ5MjkxNmRlYTg1NDUzZTkxMDdmZTc4MWJmZWI0YTYyMmM1YjIzMDZhOGRkZGVmOTkzODZkYzUwNzQ1MDAzYWE3MjIwY2Q3ZjMyZmIwYTA2MGZhNzY4MjU3Njc2OWE0OGY5MTY5YzdkMTFmZTBhOGE2MWI5NWY1ZDZkZmNmMjE2ZjdkMGM2NTJhODQiOiI1NDJkYjRlMTA3NDg1YTNjZDI0YzdhZDMzN2E0ZjFiNSI6IjI3YjdiZmE1ZWIzNGJhMzc2ZTUxNWU1OGFiOGI2NTU2YzM5NjgyMGQwMDc0YTFmZTNiOTg0OTQ1ZGNmNTI1MWNhNDUwNDU2Y2NiNGJiNjZlYzczOWIwM2ZkYzVmNzJkMjQ1NTNlODQzMjU1YWRjMDEyZDFmMWM5NWFhM2NkYWM1ZDEyOTI2NDY1MzU0MjE3MjAzMDUyY2JkNDg2OWE4YjViZTJlMDFkMGZlNjZiNWE2YThkYTBhMmNlMzUxNTU3ZTI5OTFjZTc3YmFhODEyYjljNjdiOGUxYzVhMWZjMzQ4NzEwZTFhNzNhMGZkNDlhY2ZkNTM4YjdkYjZiZWY4YjMiOjk2OiIwYmRlZjRkNzcxYTE3NDAzODFlN2RiOTciOiI4YjI3YTMzOGZkMjE1M2QzMDRmMDQ2NTVlMDliZDliZGY0NDY4ODkwZWNjZTFlM2I1MWRlMmM5YTI1YThkOTMzNmE5YWNkNzUzY2UyNzBiMWZlOGQ1MDE5NmZlYWM2ODE0NWUwZmQ1OWM5Y2IzYWE3YzFlOGFmMDM0OTRiYzQyNzljNmUyODdjODQ5ZjNjNzc1YWRhNTg0YWUxNzMxMDA5NDZhZTY5MjFlZjdjOTZiYmM2ZjIxNjA5MzU0ODcwMmNmMTg2N2JiMWJmMWY0YzllOTBhMzQyMzBhMmIyYWViNTg0NjIyZGQ2MTUwMjNhNDNhNDA2ZTY0NDI4YmQ5MTcwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ODgyNmE1MjE1YTFkNWUxYjM5Y2FkNWEwNjg2MWY4ZiI6IjBmZTJjNzk4ZDcwMTVkM2UyZjg3MjU2NDhkOTU3MjljNDVkMzU3ZGMwYzg5ZmM2M2I5ZGY1YTY4ZDNlNjU0MTk1NDBmNjYzZTkxOTA3OTNhMjljNThjNDk1ZDVjNmE3MzE3ODJhY2YxMTllMmRmOGE5NmZiMTgwYWQ3NzJjMzAxZDA5OGRiYzVlMzU2MGFjNDViNjYzMWEwMWNlZjdlZWQ2ZGI1MWYyMjM3NzVkNjAxZDJlMTFiOWJhYTU1ZTJmMDY1MTM0NDc3N2U1YTAzZjY3MzhhMjAxMzYyNmE4OTFiNWYxMzRmMDdiMTY1OThiOGNiZTNhZWFlZmExYzJhMjYiOiJmZWI5ZDc0MGZkMWUyMjFlMzI4YjVlZjVlZDE5ZWZmNSI6ImNhOTQxMWIzNjhkODI5NTIxMGQ3YTA0ZGEwNWEzNTFkMjg3ZjJmNjdkOTc4ZWYxYmI5MzZkZTlmODA2NTQ3M2Y2ZmExMTQ5NWRhMmVhYjEzYTEwMDIyMzFjODY0MTFkNTQwOWJiYzcxOGUyMDQyZWU5OWUwMTNiMWRmMWVmNzg2ZTlmYzFmMmQ0MzI5M2M4NTQxMjgxODRlZmI5MzE3YzRlZjgyYTAwMmVhYzhiMjhmY2Q5MWQ4YTcxNGEzYWEyNWZjM2MwYWU0YWY5ZjRiY2Y1YWQxOWEzMGNkOGVjNGIxNzg1ZGY3MGFhOTIwNzRkYTQxOWFiZTQzM2RkNGM0MzUiOjY0OiJhNzI0YmJiMjk1YTAyODgzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDQ1MGY1MjUzMjUxMTIxNjA2ZTU2Njg3OTUyYmYyZjEiOiI0NzliNGY0MjFiZDhhYzdmNjE1YzRhNTA3ZGExODdjYjVkNGIxZjFlMmM2MTEzZDFmOTY3OGMxYmE5MmRjNWUxN2M1YjUyNWQ3ZjMyMDg3MzMyMjNlYjgyYWYwODIwYjg0NzZlOWIwOGNhNzE0Y2UwNDQ0MTdiMjRkMjIzODcyMGNiOGZmZGM2OWRiNTU4Y2JhZmY1MmUzNjUxYjQwMGUxNmM5ZDVhYzhlZDg5NDlhMTljMzU1MTZmODAzOTRhMDRiZDFjZmRjZWQ3YjIwNGY3NzlkNzkyMDg2ZTAwYjJlYmNhMmY1NWExMTQwZTg1ZjVlZTlhYzdjZmM1YTMxNzQ3IjoiZmU3ZmY5MGIwMjBmYzc3ZDdmY2Q5MGJjNTgzODUwYWMiOiJhM2JjYTlmZjI1YTYwMDA2ZWIxOGY5OTNkY2RjOTk2ODFlNDE0ZTI3NjA1MjY0ZGZkMjU2NTIxOTVkN2ZlMTQ4OTU1MGFmZDA3ZmM3MzQ2Yjg4ZDkzYjU5ZWI2NjQyOTEzNjQ2ZTkzYmY1MGVlMWRiNWRkMzAxMDZjZjE4MTEyNGQ4YWQwMWM3MmVkOTkwMzhjOTc5ODYyMGFiZGY1Yzc4YzQxOWIwOGM5N2Y5ODJiMzRkOWU5MTA1ZDlhYTQ1MzhhZmNkMzdmNjJlMjQxMmYxNGY3YTI0OGZjZDYwYWJhZjJiNjZjZDQ1NTQ3NjdmOTkwMzBmMWE0OTVkNTZhNWFlIjo2NDoiNjQ0NjM5OGFmZjczZWQyMyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwYTU5ZjZiMGFiZjkzMjMxMWYwYjY1NjIzYzE3NzQwIjoiYmU1YTk0OGE3NzFhOGRmMTJhZGFmNzRkNzAyZjA2NGE3NWY2NDgzYzAzMjAzMzY1ZmJkZTdkMTg0ODQ0ZmU2ZGVlMGI4NGNmMzQ0YmUwNWIxZDE2MzgxN2JhMTUxNmZjYjg3YjkxNjdlZDgxZjg4NGFkYTczYjAwNThlMmIzOGNiYTUxNWJiYmU0NjJmNGMyMWY4ZGUxZDQxYmNhMmNmNDM0MGFhNjU5ZjlmMDc4ODZjMmJiNjIwZDljMzI5NTMxOGMwN2ZhM2MxN2ZlODI0MjQwOTM1OWMwOGJjYjMzN2U1Y2YyNjg4ODA4MzliNmEyMGY0ZWU0YjNmMDRlNzAyNCI6IjIwNzc4YmVhODJhNjcxNzAzOGU3MDY0ZjQ4YTMxOTgxIjoiNDAyMmQwNGYxNDU0YTcyZDJlZmU1NzUzM2JkMzI3NTc1OTUyMjBiMjBmM2EzN2QxNjZjZWMwNDEyZmIxZWIyNTg4ZjkzOWVjZDkwNmM4MDVmNDgyNzMzODY2OTg4OGU5ZjczMDkwNTAwMWViMWIxMzZiOTVlMzA2ZWRmNzBkOWJhMWU1Y2QwYWExM2EyNWExZjI4YWI1NWNmZjM2ZjljZDcwMzZjNzM1ZTNiMjg1ZDI2MDAyYWQyZWQxMDc0YjU2NmUyNTJlYTNlYzhhOWNlMTA4ODIzNzVkYzNmMWQ5Njc2ZTMwMWRjYjE3OWVhYWU5OTExMjBiNzk2Y2MzNTY0OCI6NjQ6ImRjNzdjMWQ3ZTA5MDJkNDgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YmU0ZWY2MjlmMGIzODE5NGM3NGY3YjY2NDE4OTIyZCI6ImI2N2VhMjBhMzIwZjRlYzBlNDE4NWM2MmE0YWQ3OWEzYzk3YTgxODlhNWU0ZDFkZWZmOWQzZWRmZjBmOWE5MzIzNTMyODUzYzFhMmEyYzFlNjJlNGQxYWZlYmZjZGYxZDg0NjE5MjFlYTYwMTc1MDM4MGU2M2I5MTJkOGI3Mzg5MTk4Zjk3Njg1MWQ4OGExOWYxYWEzMmM5NzE0MzY2OGFkMDA4MzhkOThkYTFjNGYyYmUwZTZlMmRjOTY0ZDE3MGQ3ZjdhZDJlMjk5Nzk4MmU1Y2ExMTBlNzQ0YjZlMTBjMjRjYTE4ZWFkZmY2YjEyOWIxZjI5MGM4YTdlMGE1OTMiOiJmYjc3YTRiOWIyNDYyNzFhYmZjNjU2NDMzZjg3NjI4YyI6ImU1ZDUyMjc3MjVhMTlhMzA1MGZiZjJhOTdhNmU4NTRiYzEyMThiOTRhNGEzNDAzYjcyMWFjZTM0NDdkYWZmNjhmZmY1NTUzYTI2ZWRkNDEyMTllNjhmYjYxZmI5ZTk2NGQwYTNjMjk3OTYyNTFhZTRlYjk0MjE4N2NkYzU1ZDEzYTA5ZGZiNDg3ZTkzZDllMjA3MmQ3MjcxNDU2YTc3YzZjY2I4MTE1NDQ0M2VlYTE3NjMxNGQ2ZTNhMDg2MTliNTJjZDg4MGYxYzI4YWU1MjE0YWMwMDkwYTM4NTVkYmQ3NGY4NzM4OWZlOGFmZWJkNDY0MzMwZmI2ODNkZmY4MWEiOjMyOiIzZDhmYzZmYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM1MGUzNzI0NDkzMWU4ZGViYzEyYjNkNTYxYzgzYmEyIjoiYjlhYmYwNzk2ZjJkMmY3NzQ3MzU1NDZjZjgwOTAzMGY2NWVkMGM3ZjZiZDQ2OWVmMmZlMGVmMzJhYTAyMjViNTdmYmNlMDdjMzYwMTdiYmMxODA2YTgxZmYxYTQyOTI3ODE2MGEwNzY0M2Y4NjQ0ODViNGUwZTM1ZDU3NTUzZGMxYTEzMWUzMmFhMTBmMWY5MWQ2NjNiMTBmMGE0MThmNDcyZWQ3YjRiY2E1NGZkN2ZmZGJiMjJjNGQ3NzY0ZDk0YTdmZmQwNDczMDYxNDQ1OTQzMWViNjQzMzViOWI2NTM2M2RlMjkyYzA0Mjc1ZDQwYTdiOTY4YzBmNWM0ODZlOSI6IjZjMGIxZmQ3YWI0MjRhNjg4M2MzNjQ1N2QxYjU1MjFmIjoiNTE2ZGMyNWY2NDUyYWUxNjljZTI5M2M1Y2VlNDQwZGU0NzM1M2NhNWJhNzcwZGNhMGYwNDE3NTk1MGU4N2EyZDRjM2Y4NGZiYzZlZWFjYWFjNDM2ODUzNDkyOTI5NjgwMDY2Zjk1OWU3NGRlNGI3MzZhYjkyNGQ4MzY3YjkwYWFhNmU5NDkyNTYxYWQ0YjVhYTc4YjY3MzdkNTYyZTk2MGVkYzNiOTgzZTJlMDFhMTg2ZTlmMjI4OTZmNDhkOGRmY2ZiNmE0MmNmZTJjNjAwNmM2ODdhMjc3NzI4MjBhMWU4ODc1YmRmMDllODEwNDI0OGNlNGRiODgzMzc2YmMwNCI6MzI6IjdkNDM5M2YwIjoiOTYyNTA5ZTQ5NGYxMDI2OWI3MGViYWQwMmIwY2Q3OTlkMWQ0MTE5MWE3MzQ4NjNlZjUwMmFmZjNkM2JhNDhkYzJhY2Y5ZGE5YTNmYzNmNDBiZTRkMjEwZGM1ZTEyOGJjMDA0OTlhZWM1N2FhMGE0NjY5ODYzMTY1NDI4Njg3Yjg4ZDQ2ZmFkNDFlMzZhZjhlYTY2MDU1ODZlYWE1YzA3MzZkMGQ1M2I5ZDUyM2UwY2I1YTBiMjg1MDQ4ZTA2MGE3M2NiZjRiNTg3ZDJjZDc4N2RlYmRiMmI0YzhjZGE3MzFhNjFhMTViMTlmZThiNTYxZmJkZDNhNzM3Mzg1M2FlMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODUzMWRkYjAzOTc3MzgzNDA1YmFmMmVlOWNhN2Q2NGIiOiJkOTBjOWUyNjUwOWJkYmE5YjFkZWE4ZDJiOTRmMmIxODgxZDIyYzJiZDc1NmFkMjNjZDYxOTQ0NzEwYTFjMWYyODA3MTcwZWQ0N2E2ODcwYWU2NTRlNDQ3NTdmY2IzODIyZWYyOGIzNzk0NmNhZmMwNzI4NGY4YTBjMjJhZTM1NTI5NTRmMGQ4N2I4ZDhjODI1YmQ1NDY5MzViNDk0Y2FjYjQyNjJkOWUyYTg4ZjI1NGYyMDBhZDMxMzY3ZDhiMzcxNWFmYmFiZWE1ZjM0MjE0ZmZlZGIxNGQ3Yzg0ODA2MDIyYWJhMmRjOGY4OGEzMTRmZmJiMjQwMTdkMWE5YjlmIjoiYmFmNjIzODY3ZDZhMjVmZDg1ZDFmMDhlNTk5YzA1NjYiOiIxOGY5MmNkZDM3ZGNkN2Y5OWIwNjgzOGYzZjY4NzQ4YWJhMzY3YmFhYmFlYmQwZGE5ZWU3ODdkNzBlNzUyZmEwN2RlYTU1M2E0M2I2NDNiOGQ4ZjQ2MDE3NWMwNzQ2Njc1MjA1ZTIwYTdhOThhY2ZjYWM4NjRkN2M0Y2Y1YWI0YzQxYzAzMTczOGM3Njg4MmFjZGEwMDNjNWFmNDdiMWM0ZGY4ODk0YTgyN2EzMTc5MzVkOTcwZDRhZmFlZTE3NzE1YzljZmQxODgzZThjMzQ1ZjE5ZDFmODllMjI5YjhlZGJhNmI0ZjUzYjg2ZDhkYTFjMGYxNTlhZmI4M2I2YjMzIjozMjoiMmZjOWRlNDYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODYyZGQ1YjM2MmNmYTU1NmNhMzdlNzNjZmY3ZjRhMGUiOiIiOiI4MTUzMGEyNDM2NTVhNjBkMjJkOWFiNDBkMjUyMDQ0NyI6IiI6MTI4OiIzYjliMmFmNTRlNjEwZWQwYjNkZGE5Njk2MWRkODc4MyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM0NTJiN2JjMTAwYzMzNDI5MmUwODM0M2YxMzliOWQwIjoiIjoiOGY5MjczOWEzMGZlNGJhMjQwNzlmNWQ0Mjc1M2Q2YWMiOiIiOjEyODoiMGVlY2E2OWY4Yjk1ZTFhOTAyY2MzYWIxYWFhOGUyYWYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMWEwY2JhZjIxYjk0M2Y4YmFkYzkzOWU5NGVhYzdlYiI6IiI6ImQ1YmIyYzRlYWVjNDcwODgyMzA5NzJhZTM0ZmNkYTljIjoiIjoxMjg6IjU4MGU3Mjg1MTJjOGU0NGZiYjNmZTJjNDk4ZTA1MzIzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWU4ZmNhNTM3NzQ2ZTdjYmZmOTdmMWRjZDQwYTMzOTIiOiIiOiI0M2U5ZjJiZjE4NmIyYWY4Y2MwMjJlN2M3NDEyZDY0MSI6IiI6MTIwOiI0NDY1YTNmOWQ5NzUxNzg5YmNlZjVjN2M1OGNiYzUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzNWI1ODU0Y2E4Mzc5MmFkNjkxZGJkYTFhNjY3OTBmYiI6IiI6ImNmZjYxY2Y5YjMyZWEzMGNmN2UzNjkyYWE2ZTc0YmVkIjoiIjoxMjA6IjcyNjc5MzE5OWRmNTMzZGQ5MDU1YjBhYzdjOTM5ZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA3MjU5MjY3YzFjNmEwMTU0MzdhNWQ4Y2ZhOTJmOWU2IjoiIjoiMThiOWNmMmFkN2FjZTZlYzFjODM2NmI3Mjg3OGNmMjAiOiIiOjEyMDoiNDM0MGY2MjYzZjBiYTJkODJjMmViNzljYjBjYzdlIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmExZGY4OTU1YWEzZWYxOTE5MDBiMDZlN2MxYjdkNDYiOiIiOiI2OTI4YzEzOGM5OGE0MzUwYzMxOGZiZGNjZDNmNDRiYSI6IiI6MTEyOiI3Yzg5ZDllNzc1MTVkMjcxYjZlZDU0YzljNGUzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMwNDIwMGNlNDFjZTc3ZDc3MmJhYmIyMDYzMTVlYzdkIjoiIjoiYTg4NWQ1OGYwZjM4ZjlmZjI2ZDkwNmZhMWJmYjEyZjQiOiIiOjExMjoiOWVlMGQwMjU0MjFmMmJmMThjYWY1NjM5NTNmYiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY1MGRmMDQ5NDYxYmUzNDFjMzA5OWJkMTYxM2RjZWFkIjoiIjoiOGE0ZmY2MzI3YjQ5ZDI5NzI0OGNlMmQ1YmQzOGFmYTgiOiIiOjExMjoiMTNmMDY3ZWYwZDdiNDQ4ZDU2ZTcwZDI4MmZlZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlZTYxYjViZjUwNjBmY2M2MzdkYzgzMzkyNjg5ODUwOCI6IiI6ImIyZGNmMjFmOWZmYTRhODgzMDQ0ZDI5ZjA4N2Y5Yjg1IjoiIjoxMDQ6IjlhYjFkNjY2NjZkNGRlYTNjYmI1OTgyMjM4IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDFjYzU2Y2E3ZTY0ZGI3ZmJlZjY2MjM2YTVjNDk0OTMiOiIiOiI4ZWE1YjYzMDA0MTg5NzkyY2MwNDBlZjE4YjM3ZTU1MCI6IiI6MTA0OiJkNjg1YWViNTRhYTEyOWEyMWJlZDE3NzY2ZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMzRkZDcyYWM4ZTI4YWI0NjcyMGMyZjQyMjg0YTMwMyI6IiI6ImM2MzY4ZTRjMGJhMGVjOTBmYTc0ODhhZjk5OTdhNGM3IjoiIjoxMDQ6IjRhZDljZGYxOWZmN2Q3ZmQ3ZTI3M2VmY2VkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxODBjMDRiMmJkZTY5MDFlZGNkYTY2MDg1ZjczZWNkOSI6IiI6IjkxOTNiMjA2YmVhZGU0Y2IwMzZmMDFhOWRiMTg3Y2I4IjoiIjo5NjoiNTMwZjVlOWVkMDg3OWNjZWYzYTdiMzYwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYWFjODU3NDJhNTVmZmEwN2U5ODEwNmQ2ZDZiMTAwNCI6IiI6IjYzMGNkOGFiODQ5MjUzYzRkYTk1YWM4MDMyNGVjYzI4IjoiIjo5NjoiMzc5MTE4MjBjODEwZTM3MDBjM2E5MzIxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWI2NjNjNGY4ZjJmZGM3ZDVlYWJmNmVmMjYxNjliNGUiOiIiOiI4NmU2MTAwNjY5OTI5ZTMyOWExZDI1OGNkMzU1MmRjOSI6IiI6OTY6Ijk1OGQ2MTQxZjdmYjJiMmRjN2Q4NTFhNiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBkZDc1NmQ0OWZkMjUzODBjNDAyNmVhMDNjYWZjMmRhIjoiIjoiNmE2ZjdlMzliMGQ3MzBlYTE2NzBlMTNkMTZjMTJjMjgiOiIiOjY0OiI4NzJlZjA1YTI4ZGE1ZWExIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiZDhhODM0YjI4OGJkYzc1NzhiNmM2YWIzNmY1ZDA2OCI6IiI6ImFhNzdkZTBhZjVmYTRkZDFlZDJhZGE1Y2I5NDgxM2EwIjoiIjo2NDoiYzVjMDk0ZTgzNzU1ZjJiNiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDIwZDI4MGRiZDA2OTM5YmJiNWU2ZWRjNmY2ZDM5YzYiOiIiOiIwOWFlYTZmMGU1NzU5ODQ1MjcxOWQ2ZjYzYjZmZTVhMCI6IiI6NjQ6IjA1ZDZjNTZiYTYwMWU4NWIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNDdmNDFhMjdhMjcyMmRmMjkzYzE0MzFiYWRjMGY5MCI6IiI6IjIyN2MwMzZmY2EwMzE3MWE4OTA4MDZiOWZhMGMyNTBkIjoiIjozMjoiODZjMjIxODkiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ZDNlMTEyMTE0Yjk0ZTI2ZTkzZDM4NTVkNGJlMjZiZCI6IiI6Ijk5Yjk4NTI1MTYwYzRiYjIwMjlkYTU1NTNmZjgyYjU5IjoiIjozMjoiMzNiZWU3MTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YjRiNzY4ODU4ODEyNTM0OWZiYjY2MDA0YTMwZDVkNCI6IiI6ImI0YWUzNjNlZGI1MjlkOGI5MjdjMDUxY2YyMWEyZDlkIjoiIjozMjoiNmE5MjA2MTciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNGI2YzViOGUyMWMzMmYzNmIwYWU0ZWYzYjc1ZDVjZCI6IiI6IjNkMTAzNmJmMDAwMGU2ZjFiNzdhNzk5ZjJlZjMyZGVjIjoiMWNmMmI2Y2JlODZhODdiNGI1YmIzY2M1MDAyNGFlYjI3YzQ4MTQzNjU4ZDQ3YjQxZjJmMjBiODdlZDY3YmQ2ZmMzYjg1YTNhODAzZjY2ZDM1NzY2MDhmNWQ2Y2U2Y2FkMTFlMDJmZTEyZGU1MzkwNzIyZGNjYjgyNDJlMWRkMTQwMDUxYmVmNTFhYTk3MTZjODYwZDQ1ZDQ1YmNhNmVmZmJiMWE0Nzk3ZTZlNzQwNmEwNGRiNWQ4MjM3NjZjMGYwMTFlYmMyOGU5YThjZDQ0NDZlYzhhNzVlYThiZGMxYjJmZGJiNWNjMzY0ZmE5ODc3ODg2ZTMwNDA0NTkzZGYzNCI6MTI4OiJhNDk3MjUwMTRjMjE0ZWY3Y2MyZDI4YjliMmI1M2RhNyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2M2MzZjgxNTAwNzQ2ZWFmMzgzZmUzOTc1ZDg0Zjg0OSI6IiI6IjA3OTlkNDE1MmZkNzNjMTYwNGI0NjEwY2Y3MTcxZmUxIjoiY2I4MjQ4ZTVmOTA0Y2M5Y2NjY2Y2ZjI3M2ZlNjIxZWVlMWI0ZDdlZDk4NDgwZjllODA2YTQ4Yjg0ZTJkNmE3MzM3NzJlY2Y4ZmI3ZmU5MTgwNTcxNWNkZGFiMmI0NjJiODlmNmU2YzdjZjg3M2Y2NTAzMWYxM2MzNTdkNWY1N2IwMGI3YzM5MWMzOWU3OGFkMWVkOTRiZTIzNmNhMGFlMzE2YmNlMTFiYzMzYzVkNzAxZmRmYzU4YWJiZTkxOGI5YzQyZjdiM2Q2ZTg5ZDQ2Zjk3ODRiMzg4YTZlNmRhZjQ3NzMwYjlmYTY2NWQ3NTVhMTdlODk5MzJmYTY2OWM0NCI6MTI4OiJjNTNkMDFlNTNlZTRhNmVhMTA2ZWE0YTY2NTM4MjY1ZSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIwYzg4YjE5MWNlNmU4ZTRhMzk0MWY3OTYwYjdlYWU1IjoiIjoiZTJhODk5OTYxYzMzMmM4MTU2ODVjNTUzMzUxZmE1MTkiOiIzMDhiZjEwNTcwYWY0OGQ2MzI5MTFmMzY0MWRlYTYwZDc4MDQ2MjExYzAxYTYzYmI4ZTRlNWNiZGRmZmY4ODQxZDJmMmIxMWUxOGNjYjIxNzA4MDVlZjRjYWNmNzgwNGQ2NGUwZmVlZjQwNzMxYTE3MDQ5MDdmMzNiNzc3ODhjMThjY2YzNWIyMjRlYzMwNDZhNjc2NjRhYzlhMzQ4MWQyMzg1YjZkZGVlYzZkYTRmMzI0MjNmOTRlYTk2NjNhNWM1MWNjMzg4Y2VmMzM3NDRhODE1OWI0ZmI2NTRkZmRiNTA5MjcxOGJmOTI2YzgyNGJlMzExOTdmMDdmMjc2YjVmIjoxMjg6IjkyNjA0ZDM3NDA3YWZmMzNmOGI2NzczMjZjYmI5NGZjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM4MThkZmEwODg1YTA5ZjY1ZWY3ODcxMmY1Y2U2NjA5IjoiIjoiY2EyNzkyODQ3MjM1MzBmZGQ2OGFlODgwZTBjZTc3NWMiOiIyYTU2MmFiZGJiNDgzY2E1ZjM1NWY5Y2MxYzVlNjA3YmRkNjI0YTA3OGE3NmI3MTdjZTBmOGYzNWQwZDRjNTRiNjI5ZjM3MmYxNWQyMGM4NDhkMDE0MjBjNmFmNWE3MDQwZDQyMDYzNzA0YTE3YjQ2MjU5ZGNjNTM3MjNjYWYyZDRiZjU1NjE0M2ZmOTExN2M3NTJmYTRmMjJjOWMxNTVjOTliN2JmNTk0OWQwODljZGFmZDU2MjE2NWI5Y2JmNTNmZjUxY2VjMjFmNDkxMjhjOGE1OTk3MThiYmNkYjRhNWQ3MDVkMjA1MDljNDRjODk0NWUyYTEzMzE2NGI5OTQyIjoxMjA6IjIwZTlhM2E5OGQ3MWQ0NjA3NDNlMWVmYWFiMTNjNiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIzNTRjNmI2YWZhYTg4M2U3Y2U5MWZhY2E0OTgxZjhiIjoiIjoiNjA0ZjI3MzBjNzU2YzhjMzlhMDUyNzA5M2JjMmZlYjUiOiI5NTliNGIwYjljZTJlOTEyMGIzMjdkMmQwOTAxMTc1NTM5OTllZTEwYmRkMzg0YTU0NmZjNmRlMDk1N2VmNGI0NDdkYWYwN2IzZDA3ZWY3ZGJjODExZjM2YjBmYzA5YTE3NWQyNmU0ZDEyNjNjYjVlMjFlZGE1ZWNhYjg1ZDc2MzgwN2JiMjBiM2NiNmFjM2YzMWQ1NDhkZmYwMGFhZTA1OGQ0MzRlYmNmNmY3ZTNhMzdmMTEzMjQxMzRmNDUzZGQwZWE3ZjUxMDk0ODYzNDg2NDI2ZmYxNzA2MTI5YTVhOTNjNTNkOGM1Y2NiNTZjYWZhNTg4MTk4MWZlMjMzY2IwIjoxMjA6IjM1ODhjOWFhNzY5ODk3ZGZhMzI4NTQ5ZmJiZDEwYSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIwYWY0OGU2YWViYmI2ZmY1YjdjOTJiZDE0MGIwODVmIjoiIjoiZDIxMGQ2NTAyYTUyMjFhYzEyNzRhOWM3ZjVhODE3MjUiOiJkNzI1MzExY2ExMGViNGI0YWEyNGU2ZGQxOWM1ZTcyZGMzNGZjMWZmNTNmZWIyNWQ5MjRhOWI3ZDhkNzIyMDU3OTBjYTRiMTI3NWJkOTNhZDYwYzI3YTU1ODdhNDU2NTliY2EwN2MxMTFlOTc0OGZiNjgzYTAzNDY1MTUzZmZkNzM1YjdkMTM0YjQ3OTY3NGFiODU5NmYwNTk2NDk2ZmUyMDkwZjYyM2ZkMWU0ZGQ3MzBjNTI4M2Q4YjE3MmRiOGEyNWRmNDJkOWIzNGYzODhlZDMyNjc2YTU2YjhiYTAzMzQ3ZTQ3Mzc5NzAyNjU0NTA4Y2NkMGEyMWZmMDM1MTZlIjoxMjA6ImU2MjIyZjA2OGExZTE4ZjA5YmE2Yzc3MWVhYmQ4NiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMDVmZTQ4MmZlMTY0YjJlY2E3ZjZjM2UzNzdiMzlkOCI6IiI6IjE0NTMyN2JjYzEwMzM1ZmNjYjkzYWZiZjRiMTdlNmU3IjoiZWE2ZjJlOTNiNWUxYmYxMjdkNDA0NDBiOGQ2Mzk3NDA1MjQ2YjFiNDhlZWJlMTY5NjRmMTg5MjhmNmI0YjhlZTJjMzYzMjJkNzEyNjkwNWMxYTViODE2OTk2ZTM0MDQwNGI1ODZlZGMyZDc3YWZhYzExYTZjMTI2NjUxMWY5ZWZmMWEzMjBiMDM1NDQyZDQwNzhmOGU0MmNhNjNjZjI2ZDEyYTk3MWE3YWRmNDY0NWQxYmQ5YThlNGQwYTIwNzIyZjdjMmQ1MjliZWFlY2M0MDMzZjc3MzgwNzVlMWNkYzZkOGE5MjlkYTU1ODI1NDA2Nzg5MzViODJlN2I3YmE2OCI6MTEyOiIzOTAwYmRlOWZhOWFlMmNiZWVlNTRkMDRmMjI0IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGFjYmFkZjgxOWViMTZhNjNmNmYwOTFkMTNlZDA0ZDQiOiIiOiJiOWViY2U3MjRiMGRjYjA5ODlhYzJkOGU3ZmY4YWFlYyI6IjdkYzZlMjE4OWQ4YTk2ZjM1MDdlMzUyZTA1ZThmZDFiNGJhYjk4OGMyZjFjNzA2MTE1ODg3MTE5ZjYzYjc4MDg0ZjAxNWQ4NWY2YjQ2MDkwMWEwMjg4MDEwM2U0ZDM2ZThmNjUyN2RmZDc0ZTRhM2FjZDNmNTc4YzBjYzcyNmI1Mjg4NzVmNzAxZmY4YjY2ZTVjMTFiNDY4OWMzNDZhMDk4ZTEyM2JlYmZhMjUzMzYyY2I4NjgyOWJlNzNjMmI4NWE2ODgxZmE5NzZhYTczMGZhYmI3Njc3NTAyN2ZlZWM3ZmQ5MjBhNmM4OTY1YTRhNTA5ZWE4MTJkN2M0MTNhOTUiOjExMjoiODk4OGZjYTgzYzhjZmIxZjhmZWVmYWM0NmYwNCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NjkyNDRjNzQ0NGYzZjNiZjE5M2IyOGY4ZThlOTZkYyI6IiI6IjQ5YjI4NDVhMWExYzg3ZmE2NmViOGY3OGMwNWFjMDI5IjoiMTQxNGEwN2U4NmQ4YjYxZDFlZmY0M2UxZmY0YWI0MmMxYzk1ZTE1OTA1OGI3NGM3MzFlMzAwN2QyMWE1ZWI3OGJjMTdiN2U5MjAzNjNhMzk3NGFlYjg2MDg4MTNkYzlhNDY1NTE5OWI2NzAzZWQzMzc0NTA3MDJkOGFiMTZhODk3NzY4MzFiMmM3YzgxMWZlYzNhY2MyMzU5OGEwYWEwMTY4MGE3YmY0MmE0ZTI1ODE0NWJlYjA4YzlmMGVhY2YyYmI1ZjU2ZDI2YmVhM2FkMTFlMWE5NTZhNjMwYjgwZjNkMjJiZjM1NTkyYjQ3MDRmN2M0NjRiMDhiMDZkZDdmOCI6MTEyOiJhMjkxYzc1MjczODVmMDM3ZjYyZTYwZmQ4YTk2IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTI1YWJlNDkwYzg0MzQ4MDJiNjk0MzljNTkwYTUyOTAiOiIiOiIxNDFmNzlmMDUwMTMxNmU2NjQ1MWM0MWM3YWYwZjBjZCI6ImJlNDQwZGI2NmQzZjgxYmU0Njc2MDVhN2IyODA1ZWMxZGY1ZTcxZTFiMWIwNGJkN2E0ZDA1ZTkxMmY1YWExOTEyYmEwOGRlNzJkZjE4NjEzYjMyYjdlZGY3ODk2M2M0OGM4MGMyNTE3OGIzYjE5MjYyYjg1YmI4MjlmNTM3N2UwYjM2OGI1MDBkNmQzYjQ0MmY1NDE3MmQ0Y2E0NTAwZWI1YjRkNDc4YjYwMmU1ZGMxMWQwOTA1Mzk0NTUwODdjZTFlNWI5ZWE3NDM1NWZjMDZlOWI2MGNiZjI1YTk4MDRkM2Y4YzYyM2ZmZjEzMGFiYzQ4YmMyZDhkMTE2YjgzNjYiOjEwNDoiMDM4YzdlOTVmNzkwZTZjYTVjZTczZjk1NTEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MTY0NGUwMjU2NTlkZTk4M2Y1YzgxNTY1MTZiODEyZSI6IiI6IjYxNDgzN2M3NDNkMDk3NGU5Y2NhNDk3ZjEzMDM4YzAyIjoiNjBjNWQwNjJhZGUyYzVjMmRlYzY4YjczNGRkM2U1OGVjNDc0YTU4NmQxYzQ3OTdmZGZhMjMzNzgwMDUxMDEzNGNiMjdhMTBkNTAxOTI3NjMyYWYzYzFmZWJjMjc1MDEwYzBkMmU1YWJlZTYzMGNkMmJjNzkyOTYzZmE4MmE0MjI4NmFiMDQ3YjkzNGEyNjE5MjczMTFiNDBmNWY5NTNiZmQ2NjE0Mjc5MjExNDdjYWM3NjEzZDk1ZWU4NmUxNjMyNmVmNjdjMWVkMDk3ZThmYjg3YTc4NzUzZDc4NWRlMzRlMDNhMTgyMjMyNzg2MDc5Y2I2YmUwMDE4MmU0MWM5ZSI6MTA0OiI3N2UzZGViYTJjN2Y5Mzg2Zjg1YmM0YTgwMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA4NTY2Y2E3MzEwMzAyZGZiODRkNzZlYTA1MjViYTIwIjoiIjoiNWYyMGVjOWMzNWMwOGFhN2YxYzBlOGEyMGZkYmQyYjMiOiI1ZDg0ZTMyNzY4YjhkMWU3ZTNjNDI2YjMxMThkNDhlMzU0OTFiZjFiYjQ1NGIzNTljODQyOTIyMDIxNmVmZDg4MjZiZTk0ZmUxOTE5NDA5YTEyOGNjZDgxMjVhNTk0ZjE2OTFjOTQyMWZjM2RiYmIzZjc1N2JmMjM1NWJiMGQwNzRjZWVjMTY1ZWI3MGUyNmViNTNmYTJjYjVkODRkZmFlMDZiYWJiNTU3ODA1ZWY3YjhjNjFjMWJjNzYxMzc1NzFiY2M1ZTg0YmY1OTg3ZGM0OTAxMzgzMWQ3OGJkNDk3Y2NjNDljZGU3ZGNhMmNiNzVlN2FiOTY3ZGE4YzZjZTgxIjoxMDQ6Ijg3M2YwMzdmYzA1MjUyYTQ0ZGM3NmY4MTU1IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZmI1NGRiOTYzODNmYTkxMWJmNWI0ZmExMjE4ZWY5YSI6IiI6IjdlODQ5ZTI0OTgzZjYzZjExOTRiMzk2YmJkMmQ1NWUwIjoiZDNmYjY4OWM1ODE4ODEwZGQxMDQ2OTNmMzMwNmExMGIyNzE3ODQ0NGFmMjY3OThhMTk0ZjdjMmFiMzFmZjNhMTcyOTA0Yjk1MTk0MmIxYTI2YzhhZTViNWIxZWUyZDg2ZGM3OGJiNzJhMzM1ZmRlMzUwNzY2ZDdkOWFlZjZmNTQ5ODcxZGQ0NmIwNGIyY2MzMTlmY2RkNDdiZTQzN2Q0MzFhZDE4Y2FiODJkNTFjYTlmYTU3ZjQxMDhhOGRlNjIyYTkyZjg3ZDI4YzAzNDlmYWIyNzc1N2ZkNzczNDEzZjU1OWE4YzAwZDMwZTI1OGMxZjZjZDk2Zjk3NTliZDk1NyI6OTY6ImRhZGE3ZmM3ZmVkNThkYjQ2Mjg1NGVmNiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM4OWNmODg4NDc0ZTk0MDNlNWY0ZDBlMjJmZmVjNDM5IjoiIjoiZWY1Nzc5NGNmNmZhYzlmOWNlYTNlODQ5OWI1M2IxZDYiOiI3ZWE3ZjdmNDc2M2FkMjA4ZWI2MTk5Mjg1YjZiMjgxOTc1NmM0ZTNjYWYyZDBhYzZmNTA3NmFlNjc4NWZlY2RjYzRiMTM4YTUxODYwZmY4Yjg3YWFhYzNhMThjMmRmNzc4YTQ4MTgzMDhkNDU4ZGJhMjhmNTAxNzUxM2UxNDU0ZjYwYmUyMGRhZTY4NzM2ZWE2ZDQ4YjFmOWRlYWRiNTE3ZGY2MzE0MGFjYmQzMjlmYmZiYzliODJmM2NhMTg2MmM5ZTk5OGYwZmFmZjFkM2FlNjBiMDA1YmY2NjgyOWY1Y2YwYzVmYTAzZWZiZGQ5MmQzOTM1MWUzOTU0YmUwMjU3Ijo5NjoiOTI3MjZkOTBhZDI2MTMwZTY1ZjJiZWI0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTU1YWJiMmNhMzZjODIyYmYyYTAzMGFjNzAzY2I4YjQiOiIiOiJkODZmNzE3N2U4ZWM5MGY5ZTllZGYxMDE3NWQ1MDEyZCI6Ijc3N2E5ZDkzMDkxZGU1NjMyNGMxMDcxMjI0M2Y1NTQxNzIyZTBiMjdlMWYzMDNmZWY2ZmFhMzg3YTg2NjYxNjFhYjM1NGRiZWE2YzQzYzgyYTI0ZTg2MjNiZmVjMzlhYWIxMzE2NGFkZDZiZTBkZmQ1NWQyMzIwNGMwOTc1YjRiYTZmYmRhNTEzNjNiZWZkZTQ4MmE5Y2NjMWViOWYxNTFlNmFkNTljNzdhMWUyNGRkMjY4Mzg5ZTQ2ODZmMTk4YTkzNmRkNjAzMDQ0YTNmYjY1M2Q2M2NmZjgwNTk3ZjVhMjkxM2M4YTJlYzFiN2Q5ZGNlNTcyOGRkNTZjNzhjMmMiOjk2OiI2NTAyNTI1MDM0M2VkOGMwOWIzZmNlZWQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU4NjExNGYzYjFkYzA4N2UxYjI3MzliMjhjNTkyZGZlIjoiIjoiYWU1YTM4ZGRkNDU1NTA1Mjg0NDM0YTRiY2ZlODFlZjIiOiI1MzFmZjhjMjg1ZTUzMmQ5NjFmNDliZDIxMGE1NTIzY2Q5YjE5YTY5N2EzYTNmYjI2ZGI5NDBhNDk2ZjI1Mzg2MjQwNWIxZTgyNWRhZWRhN2ViMDQ0NWM5ODAyMmI4MzQyYzhmOGVhMjAzMDE2MTg0ODNmOGFiMDRiNmViY2NkN2U3ZmM1Nzg3OGZiNTQ0YTViZjc4ZmE4OTZmNTBhYzMwMTI2ZmY4YWZjYThhODYzODg2NjZiNjRjNjQzZDE2ODEyNzI5YmZkN2U1YzAzYmE1MmY3ZTZlYTRjNmE2ODU0MDRmN2JjYmQ5NTY5NjQ0MTdmYTBlYTlhNmQ3MjkwYzQxIjo2NDoiNDY3YTgxNTYxMGZhZWI4MiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2JmZTgwNmJkZGI3ZjA2YjM4MjZiMDk3NTUwYzY4ZjUiOiIiOiIwNGMxYjZjOWZkMmFiNzZmYzJhZGZlMTVkMzQyMWJiYiI6ImNmYTg2ZDAyNTk5NjUyY2I0ZmZmZjAyN2I5YzZlZjIzMzZkYzlmZTk0NmY2NGZhNWNlODNmNjI0ZTE0NDU2M2Q0NzM4MzgxYmM1MzcxYzNjYjU1Y2Y0MWNlZGEwN2U2MmNiNjM1ZmYzNzI0NmJmYTQyODc4NTIyOWM2ZTg2OWQ1ZGY2OWQ3OTQ5YTg1Nzc4ODlhMjllM2QwNWI3ODhkZGQ0MzYwOGQ5YzE0ZTNmMWI1MWNlMjA4NWI5YTk3NmZlODQzZTMzOTZhNzQ5MjJiYWJlNjc5N2Q1ZjAxYzM3ZWFkNjIzYjViNTgyNTA1YmNkMjllZGY4YTZlYTM2YjBmYzciOjY0OiIwNjk3YWMzNzJhOWFjYWZkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NmNlM2EwOTVhOTFlZmZkZDkxZDYxNmYxZjAyZGRjZCI6IiI6IjU3OWQ2NjMzZWM2Njg3YWZhMjRlZjg3NDg5OWI1OGUwIjoiM2ZmM2MwMDM4MTQ4ZWQzOTFiNmExMGFhZDYyM2E4MmZlOTIwOWM1YmE3NDQ4MmYxMTUwNmQ1OTdiNWZjN2FmOTc3MjM1ZDhlZTllMjhjZjIxNjAzNDZkZGQwZTMzYTViZDFmYjY3Yjg3ZGFkNzE2N2ZkZDRiMmI0MDAwZDg0NjBlZjdiM2UxYjU5YjlkNjFkMDZjZmJlNzk0NTM3OWVkNmI2NTBkZTg2ZjM5NmEzOGNjNzBkNDdiOGEzNDlmMDY3ZDAwMTQ0YzkwM2MyNzZiMzIzYmU2YTkyOWE3ZDdkZDhhZTdkMjU0ZDY0MGNkYzExNzZmOThlMDFhMWQ4YzgyZiI6NjQ6IjU1YTBmNjEwMzJlMDQ4ZjMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNGVjZTE2OGMyOTcxY2YyYjQwNGVhMjA2ZGM5ZTI5ZCI6IiI6ImU5ZGI2MmE0MjQ5MTY2NGE2YzQ2Y2JiMGIyYmFmYzkyIjoiMzU3OWY2YzBjYjNkMmE1ZDBjNDU0ODg1NWM3YzA1MmQzNmI2YThkZmM2MGY0Y2ExYjRiYmUyOGVkODczMDYxMTllNzE5ODJkZDg0YzQyMDVjZWJhOTE4ZDY3NTQ3Mjc1M2RmMWI1MTkyZDM2OTNkYmY2YTA2MWM2MDU2ZTMxMjEzNWZmYzVmZjQyNjg5NWE3ZTMwZjdmNjc1ZDJjYjIxZGUwNmVlYTVlMzc2MWI5NGRlZWY3NTM3Yjk4NWQzMjQ4NjRjOWZmNmFiNmUyMzBhMTAwNjcyMGY5OGM5NTg5MTJiNjA0YTZkMDNlMzk3OTg4N2MwN2JlM2NlYWFmYzc4ZiI6MzI6ImQyYjE1YTIzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDNjM2NmOTkzZjY3NDBhMDE5ZTYxY2UxM2MyOTk1NWMiOiIiOiJhZjkwMGFjMzQ4MDgyZmYzMmQyZTBhYjg4NjA3OTUxNiI6IjJkZGQwZThjOTk2NjFmMDc1N2YwNGFhNzlhMWZmYTI0YWQ0OGZiZTVkYTY4YjllNzFmN2EwY2YxYjRmMmNhOWI3NTc2OTU5MDBiNzU0OWQ0ODg0N2FlNDk5NTBkYzliMjcwYjE1NjlkMjlkY2JlZjQxMjIxNjczN2JkODM1MDljMTdhZTQxYzM0Y2NkYTMxODkzOWNiMzdhMGEzODA3NjI5OTNhNzU2OGMwYjA3Nzk0ZTc4NzQ2MTczZGQ1YzBkOTIxY2Q1MGRlNGI1NDhjMTU4OWUxNDJjM2RhZGJhZDQyMTYxYWFlZGEyMzEwZjNjNmQ1YzcyMmQ5YWM2OWU5NmQiOjMyOiJmMmQzYTZmZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVmMWU1YmQ0NWVlOGJiMjA3ZWJiZDczMDUxMGZmMjE4IjoiIjoiODg0NjQyNGExOTRmNWRlODU4NTU2ZTZiZTViNjVkN2YiOiJlOTY4OTQ3ZmMwZTQ5MTM2ZTczMGI5N2Y2YjE2ZTM5M2Q1ZTRmZGYzZTQ4MDNhMjNhZjc5MjExZWY1OWYyOTE2N2M2MGVhZDcyZmQ0ODlkYTMyZDJmZmE0M2IyYmNhMjA3NGY5ZDFiNGY1Mzk2Y2E2NTAwNGIwODA2Y2I3YzZkZmE3NTFmYjZhZmJlZTNlNDQzZjNjOWIwZTNkZjY3MjJlMGQxMzIwNDQxNDAwYzVjYTUwOGFmYjY1N2MyYjdmMTY2OWIwZGUyMTc2MWRjY2FiOWE0MGZjNTEzNzY4YmQxZjU1MjY5MjYyNmNlMzUwNzhhMmUwZTEyZjVkOTMwNjQ3IjozMjoiMGQ2YzE1ZGEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOTk3MDUwMzc3Y2ZiYjgwMmNjNDM4ZDk3MzY2MTY4OCI6ImIwMmYwZGQzNzNlNDJjNjVlOGUxZGIyZGQ3NmE0MzJlMGIyYmY2ZTYzMGM4YWFmMGQ0OGFmNTFiMzcwOWIxNzVkZTlhMTliMzI0NWFlNzU4MTgyNzRjNzcxYzA2ZmFlMjI1YzRmOGIwMDIyMzY3MTIzMzZlODA1YWIwMDY0NDllYjI5Y2M1ZTI5YWJkODJiMDZjMzJkNGMzNmVlOTlhY2I5YTZkN2Q5ZWFlNmVjNmVjMjYzYzAwMmEyMmM0YTg5OGM3NGY2YWJkNmQ5MjExMjM2N2NhN2ZmZTgyNzg3YzViMzllNzAxMmJhMjI4MjVkMzYxMmFmM2Q0MWU4MDA4YTgiOiJjOTVjODRjMjYzYmRmZDVmMWRlNjZlN2U2MTZjZjNmYiI6IiI6MTI4OiJiMzViM2NmNmVkNTljY2I2OWRiYzliNDdhM2YyODRhZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNTg1ODNmNjQ3OWQ5YmM5ZjFiZmZkZGVmZWU2NmU1OSI6IjU2NGE5ZjcwMGNiYzFmODk1ZTRmNGZhNjQyNmY3M2I0OTU2ODk2YTE1ZTYxMjdlNzU2MGQ3NGUzZmQwYjk4MGQyZWU0NWI3YTZhMzg4NGZhNjEzZDkxZDEzOTIxZTNmOTA5NjdkNzEzMmJkYWZjZDE0NmRkOGZmNzE0N2VkMTk2NGMyYmRiM2UxMmY0MTMzZDNkYmJjM2JmMDMwZmYzN2IxZDIxNDdjNDkzY2U4ODUwNjhkOWJhNWJlYmFlMjQ5MDNhYWFjMDA0YWEwYWI3M2ZlNzg5ZTQxNTBlNzVkZGMyYmRlMjcwMGRiMDJlNjM5OGQ1M2U4OGFjNjUyOTY0YWMiOiJjZWU0NDhiNDhkMzUwNmZmM2VjYzIyN2E4Nzk4Nzg0NiI6IiI6MTI4OiIzNjFmYzI4OTZkN2VlOTg2ZWNlZjdjYmU2NjViYzYwYyI6IjljY2U3ZGIzZmMwODdkOGNiMzg0ZjZiMWE4MWYwM2IzZmFmYTJlMzI4MWU5ZjBmY2YwOGE4MjgzOTI5ZjMyNDM5YmIwZDMwMjUxNmYwYWI2NWI3OTE4MWZjMjIzYTQyMzQ1YmFkNmU0NmZmOGJjYjU1YWRkOTAyMDdmNzQ0ODEyMjdmNzFhNjIzMGEzZTEzNzM5ZWYyZDAxNWY1MDAzNjM4MjM0YjAxZTU4NTM3YjdjZmFiNWE4ZWRhYzE5NzIxZjQxZDQ2OTQ4OTg3ZDFiYjFiMWQ5NDg1YTY3MjY0N2JiM2I1Y2IyNDZhMWQ3NTNhMGQxMDdiZmYwMzZhYzdkOTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYmMyYmRlODc3ZTg4MWFlYTUxMjA2ODEwNTY5NDk2OCI6IjFhNjM2OWE0NWU4ZWYyODQ2YzQyZDU0ZjkyZDBkMTQwYTk0Zjk2MzM0MzI3ODJkY2JmMDk0ZjE0NDRhMWQwMDZhY2QwN2VmNjA3NmNkMGZhZWUyMjZmOWZmMTRhZGMxZmIyM2UzYzYzZWQ4MThjOWE3NDNlZmJlMTY2MjQ5ODE2NjNlNWE2NGYwM2Y0MTFkY2QzMjZlMGMyNTliY2FkY2EzYjNkZDc2NjBlZDk4NWMxYjc3ZjEzYTNiMjMyYTU5MzRmOGI1NGU0NmY4MzY4YzZlNmViNzVmOTMzMTk2ZmE5NzNlNzQxM2U0YjE0NDJiOWRlZTVlMjY1YjQ0MjU1ZWQiOiIwNWYwYzM0YWIyZThlODAyNmIwYTIzNzE5MzQ0YjcxZiI6IiI6MTI4OiI0NmJhYjlmYzJkYmU4N2I4ZjZjYTBlZDRkNzNlNTM2OCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMTRmNDViYTVkMWViNTJlMDQxMjI0MGRhNWQ3YjVmOSI6IjlhODVmZGExOWNlOTIzZjA5M2EwYzI1YjBjNTJmNWQ5NTM0ODI4YWY3Yzc2ODdkMjIzMDcwMDRhZTJkMTBjNDU5MjI0MmMwZjI3MDQwNzAzMDdhYjU1YjEzNzc4MGQxZTIwMTNhMTkzOTZhYjQzZmY2YTI5NWI2M2ZkY2YzMjM0NTZkMTQ5NzU4ZjlhMmJiMzdmMTQxOGQ2MmVhNjM2OGIyNGQ1MDY3YjljNjNkMjk2OGUwNmQ2NTg2YzdlMzI3NWZhZmZhMDA1ZjdjN2JmZWY1MTMwM2U0YzJiMmVkNDU2NGFjZDE3ZDUwZWZhYzlmNWUzZTdmMTZjZTU4OWMzOWIiOiJkN2Y4ZWYxMmY2NmY4YjdjNjBhZWEwMmVmNmZmNjg4ZiI6IiI6MTIwOiJiZWVkZTA1ZTQ5MjhjODA4YmM2NjBmM2RlOTU2MzQiOiI0YWQ1YjlhY2UwYzBjN2MwN2RmMjkwMGZhZjM3YTkwMjg5OTQ3MWU3YWE0YTBhMWFkNTM4N2Y4ZjU2ZDczZjc4ZjYxOWJlNzlhNGUyNTNmOTViMTVkNTI4OTVhMDViYWU5ZWNmZmE5MTZkMzVlZmFjZDhiYWYxYzcwNGQyYWE0YTM4YzIzNGVmYzRkY2ZiMTkxZWMwZmEwYjUyMjMyOGZhNWI1ZGZmNTVlOGM0NDNmZWU2NjBlYmUzZDhhZDg1ZGUxNTdhODg5YWVmYzgyMzcyMDAzMGE0Y2Q2YmE5NGE2MzA5ZGQ2MTgwNmYwYWJiMjc3NzI0MzIwMThiYzYxNzAxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWE2NDU3OWYzNjAxYjAwMjJkMzU3YjYwMWNkODc2YWIiOiI4OGJlMWY0YmM4YzgxYjhhOWQ3YWJjMDczY2IyNzUxZTIwOWFiNmI5MTJjMTVkYzA5NDAwMmY5NWE1N2E2NjBiOWYwOGIxYjM0ZjU5NDcyMjMyMDViNTc5ZTcwNGQ3MGE5ZWNiNTQ1MjBjZTM0OTFlNTI5NjViZTY0M2Y3Mjk1MTZmNWNiMDE4YmVlZWRjNjhhN2Q2NmMwZDQwYTNmMzkyZWM3NzI5YzU2NmNlMWU5Zjk2NGM0YzBiZDYxYjI5MWNjYjk2ZTNkMWZhYzE4YTQwMWEzMDJmMzc3NTY5N2M3MWVkYjhmZjVhODI3NWE4MTVlYmE5ZGQzYjkxMmUzNzU5IjoiNTE1ZWZjNmQwMzZmOTVkYjdkZjU2YjFiYmVjMGFmZjIiOiIiOjEyMDoiMTNlYTkyYmEzNWZjZWQzNjZkMWU0N2M5N2NhNWM5IjoiN2ZjODU2NTc2MGMxNjhkNjQwZjI0ODk2YzY5NzU4MzU1YjE3MzEwZGJjMzU5ZjM4YjczZmM3YjU3ZmUzZjRiNmVjYWQzZjI5OGJlOTMxYzk2YTYzOWRmM2M1NzQ0ZjdlOTMyYjMyZDIyMmY1NTM0ZWZiOGViNWQ1Yjk4ZDIxOGRjZTNlZmVmNWM4YzdjZTY1NzM4YmY2MzQxMmQwYThlZDIwOTA3MTIxOGE2ZmEyZjdiZTc5YjM4ZDBiMmY1YjU3MWVjNzNmMWE5MTcyMWJkNDA5YjE3MjJiMzEzNjgzZTk3ZDUzZGYxOWRlZDk1ZmQ0NzExMjRmYTVmMjk0YTRiYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiZGE0YWNmZDEwYWI2MzVmMzU3OTM1YmIwYWI3MDIwIjoiYzlhYzhkNGVmN2Q4Mzg0OGZkYzAzNjY0OTU3YzI4YjliNzY3MTA3OTdkNWRiMWMyMWU3MTNlODVlYjA4OTg4OTIyMjNlNTJiZTE2NDRmYzczNjJjOTUwMjZlYmI5YzljYTc0ZDdkMzczOWVmZjEwY2FiMWVkYTAwYzM2NjI4ZGFlMGI5OGQxMTlhMTQ2MzU4MDBlMzdjZDM0MGZhYTZmYmJhOWMzZDQxZDUyNzIyY2MzOTY5NjEyYjFhOGM1Y2E5YTY4NzczZjVlZTY1NDUwNmNiODhlYTY1ZmIxZWRkZjVhYjYzMTJkMDE3MGRjMDMzMjRlNDgzMzQyNDQ4Yjg1NCI6IjQ4Yjc3YzU4NzYxNmZmYWE0NDk1MzNhOTEyMzBiNDQ5IjoiIjoxMjA6IjgzMjVlNDM5NGM5MTcxOTY5MTE0NWU2OGU1NjQzOSI6IjEyODdhZDM3MTk1MDhhOWJlNzBjMTllM2IxMzRhMmVhYTQ0MTVkNzM2YzU1OTIyZTlhYmNmZDdmNjIxZWEwN2ZmYjliNzhkOGE5NjY4Yzc0YmJkNTQ4YjVlNjUxOWVhMTI2MDlkMmQ2MTk3YzhiZDNkYTljMTNjNDY2MjhmMjE4ZTdmZjgxODg0ZmY3ZWIzNDY2NGFiMDBmODZlMDljZDYyM2JlYzI0OGQ4ODk4ZWYwNTRmY2U4ZjcxOGEwZTA5NzhlOGI1ZDAzNzcwOWM1MjQxMTRlYzM3ODA5YWMzZmQxNjA0ZTIyM2UwOGY1OTRlN2FhMTIwOTdmN2RjMTg1MGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMjFjZjI0YmM1YmQxNzZiNGIwZmQ0Yzg0NzdiYjcwZCI6IjJlNzEwOGZkMjVjODhiNzk5MjYzNzkxOTQwNTk0ZWM4MGIyNmNjZDUzNDU1YzgzN2IyZTZjZjRlMjdmY2Y5NzA3YWYzZjBmZTMxMTM1NWUxYjAzYWMzYjVlZTBhZjA5ZmI2ZmI5ZjAzMTFmODU0NWQ0MGE2NTgxMTllNmE4N2JhOGJhNzJjYzVmZGIxMzg2YmM0NTVjOGZlYzUxYTdjMGZlYzk1N2JlZDRkNjQ0MTE4MDc0MTE5Nzk2MmQ1MWIxN2MzOTNiNTc1NTNlNTM2MDJmMmEzNDNhMDg3MWVhMmRjNGIxNTA2NjYzYjI3NjhjZTI3MWI4OWM0ZWQ5OWVlYzYiOiIyMDhjYjlkY2VkMjBiMThlZGRkYjkxNTk2ZTkwMjEyNCI6IiI6MTEyOiI3ZWRmYjlkYWY4Y2EyYmFiY2MwMjUzNzQ2M2U5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNkMDJlMmIwMjE3MDk4Njk0NDQ4N2NiYTg0NDhmOTk4IjoiYmMxZDc1NTNmNGEyODc1NGNmNTllZDZmN2E5MDE5MDFmMDRjZTYyYTQ0OWRiMmI0NWFkNjAzMjlkMDM0MWJiOWJhNDIxYzc4M2MyOGE5MjAwYjQxZGE4YWI2MzI4ZDgyNjI5MzEzNGE3ZDBjOWE1Nzc1ZGQyNzM1ZTc3NjdlZmRhNGFkMTgzNTY2ZTA4NDdkNmQ5NzhhYmQxYThhYjEzYjE2YjgzMjNhY2VmMDVjZWQzYjU3MTYzMWUxZTI0YWQ0NGQ2NWU2ZmZhNjRlMDNjOTk3MGU5NGJhY2I5ZjcyMWFiYTA2Y2RhNmEwODgwNmEzYmU2M2RkZGQ4MDI5MzAxZCI6IjYzMzYwNzdiYjgzZWZmMWM5ZWE3MTVkZTk5YjM3MmNkIjoiIjoxMTI6IjA0NjZiYjI5NTcyODFmNjRiNTllYWZlZDM1MDkiOiI1ZjM5NTk1OGYyZjdhY2FmYjFiY2E2ZDNhNmVjNDhiNzE3ZjJjZWVhYzFiNzdlMWIwZWRjMDlhMDllNGEyOTlkMmVjNzIyY2M3ZGFmMzRjOGY0MTIxYTkzYzgwYjJhZGIyMGEyZmM5NWFmZDA5MzIwZjkxMDg1YzkzYzhiMDgyZGQ3MDM4MTRjOTc3NzUwMWQyM2JmOWIzMjhmMDdmMDQ2NTI1OTJkYzVhM2Y0MzIxNjI2YTY5NWI4ZGI4ZTY1Yzg2MTdjODA5ZWIyOTc4ZDhjOWE4ODJmZmE4MmE0YmI3MDdjMWE4ZjlhOTY1YmRhY2NlNWMwNDFiYWZjOTRhMWM2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2QxYWQxZGUwNTIxZDQxNjQ1ZDEzYzk3YTE4ZjRhMjAiOiI1ODhjMjYxNzUxNzMyOWYzZTFlN2JhNjIwNmExODNkYzkyMzJlNmE0ZmE4YzhiODk1MzJkNDYyMzVhZjFlNTQyYWNhYTdlYWU0ZDAzNGYxMzliMDA0NDkwNzZiYTJlZjlhNjkyY2FlNDIyOTk4ODc4ZGFiZGFjNjA5OTNkY2U5ODgwZDI4MGJlYzE0MTk4MDNiYTkzNzM2NmU1Mjg1YzRhN2YzMWE1ZjIzMmY4ZDNlZjczZWZlNzI2N2IzZWY4MmEwMmY5N2QzMjBlYmM5ZGI2MjE5ZmJkZjFjN2Y2MTFlOGU1MTY0ZTllY2YyNWIzMmY5YzA3ZGZhMTJhYTcwNWFmIjoiNDEzODczYTBiMDYzYWQwMzlkYTU1MTM4OTYyMzMyODYiOiIiOjExMjoiZDRkYmU5Y2FlMTE2NTUzYjBjYmUxOTg0ZDE3NiI6ImJkNTE5YjdlNjkyMWU2MDI2Nzg0Y2Q3YjgzNmM4OWJjMWZhOThlNDAxM2I0MWQyYmYwOTFlZjBkNjAyZTQ0YTcwZGY4OTgxNmMwNjhkMzdmMGM2Mzc3YWY0NmM4YmZhNzNlYzBkNWJjMGI2MTk2NmYyM2U1NWExNWE4M2NlYTQ5ZjM3Y2MwMjIxM2I0OTk2ZjkzNTNlZTJiNzNhNzk4YjYyNmU1MjRiOWMxNTkzN2VjZjk4YTRlZGVkODNmYjYyZTZkZWVhMWRlMzFlMGE3ZjFkMjEwZjZkOTY0YmMzZTY5YjI2OWRhODM0NzIwZmQzMzQ4Nzg3NDQ4OWI4OTMyYTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxY2IxMjBlOWNkNzE4YjUxMTliNGE1OGFmMDY0NGVmZiI6IjRjOGU4ZmI4Yzg3ZmY2Yjk5NGFlNzFiZmJmMGZhNDUyOWYwM2JhZDg2ZWRmOWQyN2NmODk5ZWE5M2EzMjk3MjY0MDY5N2UwMDU0NjEzNmMxZGJjN2U2MzY2MjIwMDk1MWI2NDc5YzU4YWUyNmIxYmQ4YzNiNGY1MDdjMGQ5NDVkNjE1MTgzMTk2ODY4ZWM0ZjQ4NjVkMWQwMGJiOTE5YTAwMTg0ZTk2NjNmNmNiOWE3YTBkZGZjNzNlZTI5MDFmN2E1NmVmMjA3NGQ1NTRmNDhjZWYyNTRiZTU1OGZjYTM1NjUxYmU0MDVmOTFjMzllMDM2Nzc2MmI0NzE1ZDA1ZmEiOiI1YTcwODc5ODliZmUyZjZlZGRjYjU2ZmRlNGQ3MjUyOSI6IiI6MTA0OiI5NWQ4YmQxMmFmOGE1YWI2NzczMDlkZjBmYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMTViMjA2Nzc4YzI4ZWQwYmZkZDZlNjYwODhhNWMzOSI6IjYxODZmNTdhODViNjVmNTRlZmJmOTk3NGExOTMwMTJiMTM5NmZjMGNhODg3MjI3ZTE4NjVmMWM5MTVhYzJhZjliYmQ1NTk2OWY3ZGU1N2NlOWZiODc2MDRjZjExYzdiYzgyMmI1NDJmNzQ1YmU4YTEwMTg3N2E4MTBlZDcyYmY0NTQ0ZDBhY2I5MWYwZjlkM2MzMGI2YTE4YzQ4YjgyNTU3NDMzZDBkYjkzMGUwM2JjZWNjNmZiNTM1MzBiZmQ5OWVlODlmOWUxNTRhYTFhM2UyYTJjMmE3YTllMDhjOWFlZDFkZWFiN2ZhZThlYTVhMzExNThiNTBiY2EyZjVlNzkiOiI3ZWM2ZjQ3ZWM1NmRkYTViNTJiYmRhYTZhZDJlYjZkYSI6IiI6MTA0OiI5MzA3NTBjNTNlZmZjN2I4NGFhMTBiMjI3NiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlODg2ZGUxYzkwN2M5N2U3ZGI4ZWM4MGE3OWRmOTBmOCI6ImM2NGNjOTU5NmQ3YzczODc0NmFiODAwZjY4OGVlYzE5MGE0YzgwMmM1NWIyNTI4OTMxZDc0ZDI5NDQ5Njg5MmI4MWY1M2QzMDczZDQ4ZjliZWYxZDU4Y2UzYmUyNjU0NzQ3NGNkZGEyODY4YWJlYWI3MWFmZjU2NmZmZjYxM2I0ZTViZmVkMWJlMWQyZmZmMzVkOGZmYTMzMzAyZDNkYTFjODJlNDIxYWEzYTIzODQ4ZjMxZTI2ZDkwYzBjYjJhYzJhZTEzNmFkYTczNDA0ZWQzZTBlMWQzZTdjYjM1NWExMWNkMmE0ZjkzOTNiNGQ1ZWFjOTg4MTA0ZmUxY2Y5NTkiOiI2MTJjYWNiZjMzMjY2MzUzZDBhMjlhMjQ1MzJmM2MwYyI6IiI6MTA0OiI3NjYzNGU1OGQ4ZjNhNDhmMTU4NzVhYzFkNiI6IjcwMDFkNzM5NWVmYjQzMmUyODA0Y2M2NWMwYmE1ZDQ3MTljZTg0MTc3Y2U0NjI5MmM0ZmQ2MmE1NTk2YmQyYmFiMWQ1YzQ0MjE3YWM0MzIzNWJkOTQ0ODljNDNkMDE2MThhMTFmMDQ3ZDJlMjQ3MDYyYzNiODhkNmU1OWFkYWExZjQ2NTE0ZmIzM2I3ODQzNDgzOTIwYmVlNjBhNDFmM2NiMzEyMzIyYzMwNWQyNTI1MWI0NzA0ZmI2NmRhNTg2MzdjOTVhOWQ1Mzk3MzE0MzRmNjBlZjQ0ZmUzY2Q2ZDM3ZTJjOGU3MDg5ODgwYTU2MzkzOGRjYzk4YjQzZjA4ZmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNiOTM2ZTA5YTY0NzdmM2JkNTIwMzBhMjlkZjUwMDFkIjoiNjVjZjExZDFhZmFkMTliMzRmMjgyZjk4ZjE0MDMxNTk5MjM5MmY1ZDRlZWQ0MjY1MDg1YjI5ZTFlNTU1M2Y0NzgzZmVjNjgxYmEyZDM2ODQ4NmJhNmE1NGMwMGU3MWM4MmMwOGNhM2QwOTc5MDRmMDIxY2U0YjBhY2JhMmQyYTcwMDVlMjhlNWY4NzUwZWEzZDE4YTRmNzgzNjNjMzc1ODNlODUxMDQyMzQ0OTg5NDJjNjM5YTA1NjRiMGQ4MDA1NWMyMWNiNzczNWRkNDQzNDgyOTgyOTFhYjYwMmYzNDViMWQ3NGQ2MjQ3NTBjMDE3N2ZiZDVjY2E2Zjk5MjIzYiI6ImY5MzEwNWJlODNmYTVlMzE1ZDczYWNmZGNmNTc4ZGU3IjoiIjo5NjoiOTFiNTViYjVlM2YzZjFhYmNmMzM1ZGI1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGM5ZTIwOTVkZTdiMWI0ODQ4MWI1NmJmNmEzNjA0Y2QiOiJlZDYxZmY5NGEzZjg0YzcyMTQ3ZmFlZmE2MTVlMmRmMDAzMjRmYjAxNzkwY2Y5NzY0YzcyYzFiOGJhNDdmMTc4NjZhMWZkNjRlZTVjMmY1Mzg2NWQxYmMyNGVjOTMxNjVhNjc3NDQ2NmE1OTYwMzE5OWVlNDc2YzFmMmRhN2Q5MzJjODk0M2QxMjZhYTE3MmQ1MzJkODQ3NWE0ODRkNDJiYjQ1ZmNmOTI3NjZmZWFmZDdmM2UyZTNkNDJkMjJmNmY4NGE5MGU3ZTY4ODIzMmY3OTlkODBjZDJjYzE1MmRkZDIxZWNmYjEzNzcwMWVjYWZjYjJiNjVhYmUyZTRlNmY0IjoiOWU1MjY4ZGIxOWExYjUxYzA0OTZhMTYwY2E3NmY4ZjciOiIiOjk2OiIwZmE5NTg4NTM2ZmNhNzFiYjQ0MjYwZjciOiJlZjU2MmUzMDFmY2Y5MjNmZjFhMWFjZDNhZmY5YjFjOTYzMDU4MjI4NjU1ZmU4YTY2Y2FiMDEzOTY1NDdkYmQyYWExZjc5YTIyZWVmYzYyOTQ0Yjg2ZDFhMzFlYmUyZDE3MTMwMTc1YjhjMDAzZDY3NTViMGViOGI3OTg5NWIwZjdmODA0NmM1YWU4ODhhMDY3YmExN2JjOGUxMWE4ZjZlNTAyM2E5Y2Q0MmY2NDYxOTY2YzI4ZTUwNWIzNzFjMGY3MmEyNjA2YmZmNDMwYTU4MDE2ZTk5NzEzZDI1Y2UxMWYxMDM5MWZiNGE5MjJlMjc5ODk0MjJjNmE2NGY5MTA3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZjkzOTAxZmQ3Y2M4OGRiM2JhNzZhMTU4ZDY1OGM3YiI6IjE2NDAyZmRlZDg3OWZjYmZlOTQwNTkwMmFhNjNjYTJhNTIwODg5ZTAwNDVmNjg3NDU1NDY5YjdiYjg2NzgyOWEwMTIwOGI4ZGM1ZGNjODUyZDhlZTQ3ODk5M2MzMGU2ZDllYzY0MDg3NzNiMzY3ODIxMzEwYTBhZTE3MWQzOGQ3MWUwNjk4MWZmNmU4NDVhY2ZmYmM3OTQxNDJiODdjNzQ4ZTEyNDg0YzA2MzY0MTlkNzliZTNkNzk4Y2RlNTllOWRhZTBhNGE0YTQzNDY1OTY0MjdlNmIyMzVhZDUyZTZhMWIwMmQ2ZjRkZjBjN2RlMzVmYzM5MGNhZTM2YWVmMTQiOiI3ZTk4ZGU0NjFlNmQ5NmMwY2U2YzhkOGIzODU0Y2Y0OSI6IiI6OTY6Ijg2YzlhNzBlNGJhYjMwNGFlNDZlNjU0MiI6IjFiNGMwOTU2OWI0MmM0NjliM2FiNmIzOTMxMmMyMTQ1MDJlYzA5ZjVmZTJmZWQxZDE5MzNkMTNjZGM2YTdiNzdhNWQxMzUxMjNmYTY5ZDkyMDdkNjg0NGIwMzU3YjI2YjdhMmY1M2IzM2E1Y2QyMThkYWNkYTg3Yjc4YjA5Y2YyNTllNDhlNzQwNzY4MTJjNDMyZTJkMDgzM2ZiMjY5NzIxZjkzNDdjOTZlMTU4NTAwZjliMjI4MzM0MmEzNWM4ZGUwYTAyMmVkY2U3MTExMThkNzJkOGZiYWEzNTRiZmIwZmZlZTQ2NTg0NGVmMmQzN2UyNGVjMmNlYTg1NTY2NDgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQyMjg5ZjNkM2NkNTgzOGUyNTBlZjU0YjEyOGU2MGQxIjoiM2VkYWUxZDU1NGI2N2QyMDM2ZjVmZGJkYjI5NDVjYzExMmYxMDBhZGMxYjQ3MDA5YzJlMjNmNmEyZWFlZTc4ZDFmMzljZThhOThmNzE1ODUzY2MyOWZjNzkzZmI2OTgxZWMzMDM2ODM0MTg4ZGVhN2Q2NjgxODVjY2M4NjQyMDcxYjE1ZGUxMzMyZjZhNTljOGE5YjQzOTk3MzNlYjRiM2Q4ZjIyNGFmNTdiYTZiNGE4ZTY0NDk0YmI2NjMwYjlkMjhlN2VjMzM0OTA2NDM1MGZlYmNlZjZhM2FkMWQ2Y2NhMWIxZGE3NGYzZDI5MjFjMmIyOGEyZGQzOTljMzQxNiI6ImU1NTczODlhMjE2YWQ3MjRhYWZkYWIwMTgwZTE4OTJlIjoiIjo2NDoiNmY3OGJjODA5ZjMxMzkzZSI6IjI1YzQ3NjY1OWNjN2IzNDNhNjkwODhiYWY4NjhhODExYmEzN2RhY2E4NWM0MDkzMTA1YmY5ODIzNWE5MGFlY2EwMTVhYjAzNGRhMDA4YWYwOTgyZjliMmU4MGRmODA0YzE4NmE5YjJlOTdmNzRjZmZkNzBlYmI3NzcxZDg3NGZjYWYxMmY2ZDAxYzQ0YThiMGVjMjg5OGNmNDQ5M2NmMDlhMTZhODhhNjVjZDc3OTA5YmJmMDQzMGM5NjAzODY5YmQ1ZjIwZDU2Y2I1MWQ4YTNmMGEwMzJmYzMwZDkyNWM5NjU5OWQyOTZiMWVjNDFjMjkxMmJkYTQyNmFkZWE0ZmIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNkNzcyZWFiYjdmMTk0NzU2NjVjYTJhN2U2OTNiY2ZjIjoiZTlmYzRkODZmNWI4NTdmYTYwNTdiNzNmOTY3MzUxZTA2Zjg3Mjg4YzQwYTk1YjllMzc4Yzg0ZjFhNGMwZjRiODBlZDBhMGI0NGZmOTBhODk3M2JlNDE5OWMwYzQwMDZmYzRmNWVhMTlkNWYxZmU4YjljOGMwMWY0Njc1YWI4NWFmYWIwNTkyYmIzZGFiYTM2YmI0ZmM3ZWQ5ZWVhODY3ZTlkOGNjNTBjMTlmYjYyYTVhNTc5NTZlOWVmYWNlYmFjNWU5Zjg0OTY0OWQzNWEzMjliZDY4ZGU5N2JiNmU1ZmY3YmVmNDc3YTg2NzY1YzJjOWVjMTVlMjRjYmJhNWM2ZSI6IjA3NDdjYmI0ODZhMDEzNDUzZmRlMWNhNmFiYjExZGJlIjoiIjo2NDoiOGU3NjFmZmFlYTY4Zjk2NyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZiN2ZkNzUzZWU2ZWFhZjI4M2E0MmExMjFkYWI0ZTQzIjoiZmQ1Y2VjYjJjMDI4N2NiODIyOWU5N2Q5Y2M0Yjk4ODVmNDI4NzEwNTI4ODg0Y2U2NjNlZDE3MjhjZDQ0Y2IyZGY5M2U1NmVmMTdhY2UwNjc4ZDFlMzQxMzY2YzY1MmY0YmE3ZWU0NTc5N2QzOWJlNGEwNWMxMTUxZTVjZGU0OTllMTNlNWQ0NTU0OWI1ZDk1YTE3NGQwMzYxNmQwNmVmOTZlOWQ3YjJiNmJiMGQ3OWE3MjZiMjUzZGQ2NDIyM2E1ZjA5NjExNjcxYjIzNGNjZjliMzgzOTUyZjg4ODg4MTRiMmMxNjdlNzc0Y2ZiZjU0ZTljNmI5OWE3NTNmNGZhOSI6IjgxNjQ5MjlmYjU0NDg1Mzc3ZWNjY2M5Yjk2MjFhZjVlIjoiIjo2NDoiNDBhMmZhN2Y0MzcwYWZiMiI6IjYyMDhkMDY4YmU2MGY3YjA0YjgwZmM2MTEwNjJlNmNhYWVmOWE1Y2Y1OWY4NTBkMTc0Yjc0NDZjNzhjMDM5ZWE5YWVmZTQ4ODVlMTljMmIzMzkxMWQzMmNlMWZlM2M0OGRkZmZhNGIwM2U0NTBmZDM1ZGEwM2Y0MGM0ZTdjNWJiM2IxYzNmMzA0OWRiZmFkM2FjODFjYTFiNzljYWZiYWExNzJmNDkwMGUzODI5ZDM4ZWRlYTNiNjQwMDBmOTM5MjRhODAxMjU5YmM0YjI1MjM0NDVjNjRiYzIzYmZlZTE5MGI5NTI0Njg1MDdmYTRiYWY2ZGMyYmVjNjZmY2YwZDgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwZDc1N2ZkNzNhMGZkNWZhNDkxNTlhZDA2NTMyOTZkIjoiMTdkNDg1YjI1OGY4MGQ4OTI0ZTM1MjkxMTE4Y2ZkY2ZmZDg2YzQ3ODUxYjY1ZjBiMDZhN2MxZjUyMDJkZTgyZjNmNDYwZmM2MWIxYWEzOGZkYmE3YzhkZWQzNzVjOTJjZjAwNWFmZTYzZTU5ZDM2MmMwOTYwMDQ0YWYzOTI0MWI4MWNhMjRlODVjNWZhYTQzOTAzMjI5MzU1YjczMTNmZWUyMWI5OTJlZjM5MzFkOWQyNDA3YjMyYjNjZjcyZGQ3YWNiYzc5NDgzOTVlYjUxM2NiMmZkNDI4YjIxNWJhMmJkMWUyOWM2MmY0NWQwY2UyMzE4ODRmNjI0ODBjNmQ4ZiI6ImIzNWI4ZGYwYWViZDA2MDg1MTdmMjgzMGUwZTcwY2QwIjoiIjozMjoiOTU0YzBlOTkiOiIwMjI2MThkMjU5OGY3OTEwNGU5MThhMDljOTM3YTgyYjNkYjU5MjQzYjVlMTNkZTczMWZjYjkxMmU0MzY2MTA1Nzk3Y2U0N2Y2ZGNlN2YwODA3M2YyZjQxZTVjMTVmZDZiMWVjNGI1ODYxNDY5YTQ4ODBjM2IwYmQ3NjliNzhjNjk2ZmYyOWMyOGM5MzQ5ZDVhNDZhNmU1YWQ5MjExYmQ0YjcwOGE4YzBiNjkyOGViYmIwZGFjMWMwYTVmNWNlNmIwNWRlNmE1MDA3MzEyODU2NmEyM2YwOWNjMWI4MjZhYTU4MDNmOWY3NTBhYTRkZWJmNTlmMjRhZTlmOThjOWI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkOWQzY2ZkNTkwMGRlNWQ1ZTIxMDllNzcyMWNmZWVmNiI6ImU0MjQzY2MzN2NjMzJkZmNlZGY5YmI3Njg5MGU3MDZhZjZhYjFlMDZiMjkwYjhjY2ZlMmE1NWU1ZGFiZTY4Y2IzOTBmNzYzNmRjOTY3NmI0MzFkNGRjOGFkM2Y2ZDk4OWU1MTAxOTQyOTRhYjdhYjA1NTY3ODkwNDY3NDNjZjM3NGQ4YjY0NjJmNWY5NWExN2YzZjQ0MzM3ZDZjNjllZTQ3YjBlMWFkN2U1Y2U2ZjliMjI0YzU0MDk5YTEwNGU3MGQyZDA2YWY4NjliOTIxZWE0N2ZlYmUwOGY5MGM1OTFlZDQ5YzFmMTIwMDNhZmNlYWJkMmM3YmJhNDU4YTAxMTEiOiJiNGI5ZGZiMDEzZGU2ZjdjNDQ3NzllNWE5ZGFhZjVlNSI6IiI6MzI6IjJiODFlOGNlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjhkYzEzOGYxOTM1NGQ3M2VhYTFjZjBlNzkyMzFkNzQiOiJjZTM0NTU2N2E3NmJjMzBkOGI0ZmQyMjM5Nzg4MjIxY2ZhNzVlMWEzMTBhZWVlYjhjMzU1ZjhlZWE1N2Q4MDk2N2YzMDQ3ZmJkNGU2MTczZmFjNWNhZWIyMjE1MWZhNjA3MDY1OTUzYzRjMzVlMDUzN2I5ZTM3ODhjYzgwZGU5ZWVkZjJhMzQwNjk4YmRlOTlhNmExYmRjODEyNjUzMTlkYTNlNTJmN2E1Mzg4M2I3ZjIxNzQ5MjM3ZmNmZDNjZDRmMTQ5YmIyYmU3YTRkZGQ5ZWYwNTQ0Y2ZlMDc4OTA0MGQxZGM5NTFiNjQ0NzMwNDk0MmYwM2FiMGJlYWU4ODY2IjoiZTcxNDc3NDk1NjBmNDkxNDIwYTJkODkzYzA3NWJiNzYiOiIiOjMyOiI3MGE4M2Y2ZiI6IjY0YjAyMTYxMmM3OGIzZTE5MmU4MzQ5ZDQ4Yjc3ZDAyOTI3ZTdmZDcwYzcxNjBkMzdjYjhlZjQ3MmY2YmNkOWRmOWQ5MzQzMTYyN2MxYzgwODc1ZTIwODcyNGFlMDVmOTRmZGQyZTAwNWU5NzA3Yjc4YTFiZjNiYmNhN2JlZWM0YjAzZGRkNGQ5ZGU2MjM1ZmZkNmQ4NGE4YjlhMTg0MmUxMDRjMWUyMmRmNDU2NmY2YzRkM2Q0ZTNkOTZhNTZiOWI4YTVjZGNlOWRhNzBhYTIzNjEwOWIyODkyNjYwMzZmMjg1NTY0MDYwYjIwNGRmZDdhYzkxNWVlYTBkZDBiMWUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MzYyYzg2MzQ0ZTBhZWZiMGNmMGQwNDc2OGY5YzA1ZCI6IjhiYWZmYzc4MzYwMDRkZWI4N2MwMTExZDQ3YzE4MjUxMmJmODYxODc0MDIxZGRmY2Q1NTlhY2YyYzRhNTFjZjViYzRiZmRlZTJkMDM5YjljMDA1YjZhZjk1YTI2MDc2NDNkY2Y0ZDljZDlkNjI0MTJmNzA5MzM0NTU2ZGIyMmZjOTFkN2I0MDQzODUwNWQ2ODA2Y2NiMmYyYzIxYWU3MzFiYzFmMWM4MjVkMjhhNzFhYjI3MDk1YTM5OTg1ZTk2Y2NkMDdjZmIyZTc1MjQzY2NhZmQ0NzQ0OTRhMjMzOGMzMjRlZjUzM2NhNWYxN2QyYWMxYjE4ODMxNDAzNDJjZWQiOiI3ZThkMTJjMmYwZGNmNGY3OTIyNDcxMzQyMzRhYzk0YiI6Ijg2ZDJiNWRlYmMzYjEwNDk1ZGEzNTNkNjgyMWY2Y2FkMzgwNzc2ZDgwNWJkODY2MGIwOGRjZGIxYWNkODcwMjZlNGYzNDRiNTQ3YTRkYjQ3YjVmNDRjZGVkMzE0YmVjNGNlOWE0MTdjZTQwYTJhY2Q1YTIxNDYwYzQyZGZjZDI3NDgzYWJmM2YzOGRkOGNjNWZhNTIzYjY3NjhhMjY1MTNkZjU4OTY0MzViYWE5Nzc4MWNmZjE5NjZlMmUzZDZlYzZkMGE5Y2RjMDEzZGU1YTUwZTRkNDY4MzE2NjcwNTViYWQwNGY3ODQwMjRhODJmOWNkMDg3YWU0Y2QzN2RkNjQiOjEyODoiOTU5NGRhNDI4ZmQ4YzFiMTNlY2IyM2FmYTJjMWFmMmUiOiJlMmM0MjRmNDJhZWRkNTZmMGUxN2EzOWQ0M2FkMTljOGUyNzMxZWZjN2EyNWYwNzdhZWY1MWQ1NTI4MGIxMGU2NjdlMzM4YmQ5ODFiODJhOTc1ZWY2MmJmNTNiYzUyNDk2YjY5OTVkMzNjOTBjN2FlMTQ3NjdjMTI2ODI2ZTNmMzJiZDIzZjQ0NGRkY2ZkN2EwZGQzMjNiMGFlMmMyMmRlZmFkMDRjZTYzODkyYjQ1YzE3NmJkMGI4NmY1ZmEwNTdhM2RjMzcxMzU5NzQ0Y2I4MGJiZmI0YTE5NTc1NTEzNmEwZWE5MGI0MDQ0YTQ1YmMxYjA2OWYzY2IzNjk1YzA0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTg3NDhiYjIwNGNjYjdiZGFmZGJmNzM5YjZjMTlhM2UiOiJiNzI5MDJjOWViYjcyYTg2YmU1MzliMTlhNTJmZDlhZjAwYWE0ZGUwODFkOTBjMGQ4YWQ1ODBlYmI1OTAwMTc3YTAzNmY0MGExZTliNDNlM2EwN2Q3MTU0NjY1MjZkNmQ3NTQ0ZTVhNTU1MTgwNWI2MjQ2M2Y5NTZjZDUxOWZjOTkxODJjMmQ1NGJkNjJmYzdmZmM2ZTVlYmYxNTAzODU5YjcwNmRhMTFhMWI2YzcwN2E2N2E3MDc4OWRiZmMxMGVmNzI2YmQzNjBmOWYyMzQ3MzI2ZTA2OGU3NTdjODQ0M2RkYzkzMDhhMTcxZTY4MjM1OWFlMWJmZTg3MTk0YWI1IjoiOTNhYzI5OGM3M2M4OGUxMjdhNGQ5ZGQ4MWJmMjRlM2QiOiI4ZjE2OGZjNGQxZGExM2JkYmVmYWUzZjlkNmFjMWQ4Y2IxOWZjZWMxZjQzZjcyNzk1MWFmMGE0NjZkODgyNjY0OWE0NmMzY2I1MGMwNDVlYTgzODQ5ZmNlMGVlZGJjMDQyYTFhNDM1ZTZkOWQ1OTAxNzk5N2EyZDU0NTliOTQwMDc4YjhhN2YzYjZiMGZmMjc5ZmY4YzU2MDI0ODI5NmExNzI0MGZmMWIwNjQzZDFmNDM2YjZlM2YyMDc5MzYzZmM0OWZiNDVmNDEwZGViYmRkZTA4M2I5MjA1NzkxNjM2OGNiODA3ZDYwM2NiODJlMmMwZGMwMTY1OGJmZjdmMWFiIjoxMjg6ImVmYmE0NTg5ZDRhMDM1NTU3NjZiYmMzYjQyMWRkNjBmIjoiZDVjOTdhNjU5ZjAxNjkwNGZmNzYyODZmODEwZThlOTJkYTZmOGRiMmM2M2Q4YTQyZTYxNzc2MDc4MDYzN2UzMjEwNTUwMzQ0MGNkZjA0ZDFmZTY3ODEzMzEyZjE0NzlmZGE4ZDc0NmM4YjBiMDgwNTkxZWJhODM4NTAzODJmNjAwZTlkODY4MDUxNmM2NTc5NjY5ZjBiM2QwYTMwMzIzNTEwZjlkZTFjOTI1MTI3OTBiODM0Nzc1MTk5NGQwMjIxNTZjYWU2NGRhMDgwOGE2NDlkMTYzYTBlOTllODY5ZmRmMjI0YjdjMWE2YThmYmM2MTNkNTkxN2VjYThlZTA4YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZjYzEzY2JkNjI0MjhiYjg2NThkZDM5NTRmZTkxODFmIjoiMmM5ZWM5ODJkMWNmYjY0NGRkYmM1M2MwNzU5YjEwNDkzMjA2ZDUxODZhZmZjNjg4MmZiYjJiYTNhYTQzMGY5YmFlMTIwOWRiMmQ3OGRjYzEyNWYzYzkwOWE1NGRkODRmZGZmOTZjNzFlNjc4MjE2YTU4MzkwZWY0MzA4YmRkOTBmOTRmNzEwOWM0ZWRlZmE3NmE3NGZkYTY0YjIwMWI3YTQzNWJiYWJjMjcyOThmM2VhYTRjMmQxMzkzYmQ1ODRmODExZmZmNTI2MzhmNmFkMmY2ZDg2YThjM2M5YzAzMGQ5ZDQyNjRjOGMwNzk1OTJhMzYxNzhkMjU5OTFjZmYwOSI6Ijg2NzQwZGE3Y2U0ZWZiZWQ3MGFmNTVlMWQ2YzEwZmRmIjoiYmU1NjFhYzE1ZTNjZmRhNjI0YjQyMmFmOTdjMjY3MTljMTQwYmI1MGU0YTk5M2Q2MzZlZmU5YzdmMTk2M2ZiOTA0N2EwNzYyMTY5YjU3MWE2OThmZjMxMGJjNDE3ZTM0ZDQwMzliNzU2MmE5NWFmNzEwY2NjMWIxOTc5NjRhMzc2Yzk4NmZkMmVkOGFjNGIwYzdiNGU4NDNjMzdhNDEzNjZmMmY0ODNjODIxYTE4MjNmMzE3NDE2YzdlNGYzMmVlZDliOWRjMmFlMWEyZjNlZDMyYzRiMzE4NzM1OGEyMzI5YWE0MjE5MWI3YzJmZTg3YjZlMjdmZjIwMzAzY2IyOSI6MTI4OiI3NmI5OTBhMWUwMTBlNWYwODhmNmFlOTBiZWM0MGIzMiI6IjBiOWE1ZjVkMmU2ODUyYjc1YjljZjI2YzFiMzEwYjIyMDBlNTZkYWZjZjNjOTQxNDc4ODYyY2RmOTczN2FjOGUyY2I5YjM4ZDQxYmQ0YTE4NzJlYTFiNGNmZDUxYTFhMGI5Yjc0M2FjYTQzOWVlZmExMGRlODQ1OWEwYTdhMjIxYzU0MjliM2RlZTM5M2YxNzAzMWNhNmMzOTlkZjhlMDU2NTdjM2RiNTViZTljOWRkMjllNjkwMDQyYTRlZDhkYjczMmVmY2U3YzU4ZDZiMjBhMmEwZjdjNzllNDJlNWFkYTQzYjg3YWIwMGY0ODFjMjBjYWMxYjM1NTE0ZGNkYzkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyODZkM2Y1MDgwY2ZlODg1Mzg1NzExODhmYmViMmRkNSI6IjU1MTM1OTI4OTk3NzExMzYwNjIyZWRhMTgyMGM4MTVhYTIyMTE1MjA0YjFlOWJiNTY3ZTIzMWFjNmVhMjU5NGI0ZDY1MjYyN2I2ODE2YmRjNmM0MGE0NDExZmQ2YjEyZmFiOWExZjE2OWQ4MWM0NzZkYmY3NzE1MWJmZjEzZjk4Y2EwZDFkYzBhNjhlYTY4MTY1MmJlMDg5ZmFkYmM2NmM2MDQyODRlZWJmYzhjZTRjZjEwZjRjYTZiZGEwZTBmNjYzNDAyM2RiNmUzZjBmMWRlNjI2YzMyNDlhMjhhNjQyZWNjOWVjNWZmNDAxZTk0MWZhOGEzYzY5MTU2NmMwYWUiOiJkYTYxNDBiZDRkYzY0NTZkZGFiMTkwNjllODZlZmIzNSI6IjVkMzUwYTA0NTYyYTYwNWU5MDgyZWJkOGZhZWM2YzI3ZTU2MTQyNTg0OWU3ZjBmMDVmNTA0OTg1OWMyYzFiZDJjNDY4MmViZjk3NzNmYWI2MTc3ZDI2MDFmZDVhMDg2Y2VmYzNhZGVmNWEyZjhmNmI1ZGM5ZTY0OWU5OGRkMGEzZDFhMjUyNDQxOWYwMTMwNWJkMGZjZmZmNTJkODRhMjBkMWIxNGRlYTIxMzhkY2M1NGVlYTJiZjI2M2M2ZmUyN2MzZTcyNTVmMWYzNTlkMGQwMGZiMWIzNTBkN2EwNDk2NWFmMzAwMjc2MzI1MjAxOTdlODVlYjQxZGU2YmIyODYiOjEyMDoiZDkwZDM0MDk0ZDc0MDIxNGRkM2RlNjg1MDEwY2UzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcyNmFlMTEzYTA5Njc2OWI2NTdmOTczZWE2ZDJkNWRkIjoiOTA2MzYwMTJiYThjNTFkMTZmOGY2ZGYzZDNiY2FiYzNmMDlhZWZmYmUyYTc2MmY2MmU2Nzc5MTMxODgwNDViODYxYjJlN2Q5YTdiZDkzZGNlZTQ2ZTllNDgzMmU0OTdhNmY3OWRiNTJiNGU0NWM4ZGFiMjBmYTU2OGZmOWM0YWNlNTViZTMyMTZmNTE0YTMyODQ3NjhhMjVkODZiMWM3ZGE1Mzc3NjIyZjNlOTBlZDRjN2JkNDU3MTcxNWFmNGQwYTJhYjUxODFkMDQ3NWY2OTkyMDJlNDQwNmJiOWNmZGJkNGZhN2YyMmQwZGQ3NDRkMzZiMzIyMzEzNDY1ODQ5NiI6IjJmOTkwMDIyNmM5NzU4NWQyMDBkZDIwYTI3OWMxNTRhIjoiNzYxNjYzYzNmY2JmMWRiMTJiYzI1NTQ2YjI0MjViODIyOWIzMTUzZTc1Zjc5ZmE2Mzk1ODgxOWNhZWUzZmViZmY3NDYwM2Q5OTI2NGI1YTgyZWY1OTgwNDM5YmVmODkzMDFhZTMyMDZhMWQwMWEzYmJkN2E2Yzk5ZDI3ZDFlOTM0Y2M3MjVkYWViNDgzZjgyNmMyYzlkNzg4ZmQxZjY3YTYyNzg2NGNmOGI1Zjk0ZGY3NzdiYjU5ZWY5MGNiNjc4MWEyMDAwZTZmMGJhYTRmMWVhNDc1NGI0N2JiN2NiZDI2OTlmODM2MzRlNGQ4YWIxNmIzMjViMmM0OWYxMzQ5OSI6MTIwOiJkMDk1YmZiODk5MGQ0ZmQ2NDc1MmVlMjRmM2RlMWUiOiI5Zjc3NTljNmQyNGZkOWFhMGRmMDJhN2MwY2M1ZjE3ZTYxNjIyYzYzMTk1Zjg1ZGZhZmE1ZDgyMGQzYWQyMThjNzI4OGVjMDE3ODIxMTAwZjFmYWRlMTBmOWJiNDQ3YTRhMDFlMzY5OGIwNDU1NDhjNzYxOWEwOGYyMzA0ZTI4MThhOWJmNTVlNzBiNDBmOGI5OTRiN2RjZjBjYjI0Mzg0OGNmM2Y2ZmRmZWMzZWJiYjE0N2QwMWRmODRhM2VjNjJjZDhmYTVkNzhhZDlmMmYyOGNkMjg4YTM1ZWI0OWE1MTcyMzM5ZTk4NzJlOGU3ZTMzNTBiMGQ2OWY1OWFjZDA3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzNhOWVlZGE3MjFjNmYyOTJlNmIzOTllMjY0N2Y4YTYiOiIyMTVmYzdlNTJhYmU0Yzc1MWNhMmY3ZjlhNWNiZGU5YWI4YjQ0YjhkNDA1NGJiNjJkY2VhNmRmNWI5MzYxNDVjYTZlYzgzYTJiNzhiMDcwNjM4ZmQ2ZTVlYTNiYWQ1ZDBjYWYxYjhmNzU1ZjM5MWMzZTA5NjJhOTIzMzdlM2ViYTU3NTU4NWViODM2ODAwNzVmYzgxODg2MDM4OGM1ODc3NDZhZjc4ZDVmYzc1Y2NkMGE2M2YxNjEyYWJiMWJhMGYwNGEyMjI4Y2EyN2ZiZGRiYTQ4NzhmOWIyNjgzNjgzZjUxNmI2ZDZmZTRmNjYyMmU2MDNiZDNjNWFkNDVlMzMyIjoiYzFlODBlYjcyMzk2MDA0OWNjNDQ0OGI2NjQzM2YxY2YiOiJmYjJhMGIxZjgxNzQwNGU3NGFlZTBhNmVjOGYyY2Q4NmYwYzkxMTRlZDM2N2IyNjkwYzQ0YWQ4MGY5ZDMzNzdkN2ZkNTA2NmJlYWYxZGFhNzM5ZDI3ZWQzZmJhOTgzNzkxODgwMTZiMWZlOTAxMjA0YTE3NGY5ZmZjYTM3MGMxODFhZWNlNWU1ZDQwOTM5YTBkNDYwOTEzYjQwYjg5NWU3OGEzYjgwZGRmM2Q2MTNjMDVlNGUyN2JmZDE2MWVhMmVmNDIyNzFhMjY3OWYyY2RjYTViNzI4ZmZiMjMxOTc4MWM5NDZhNGYzZWNhY2Y0ODZiNzU0YjMwYmIwNGVhNjBiIjoxMjA6ImUwODE2MTI2MjIzNGQwZDViZTIyZjA5ZTU2NDZiZiI6ImI1ZTI4NjE4M2YxNmRkOTQwM2JlYzY3ODZiZDQ4MzZjYzZhZGQ0Nzk0N2VmMTExZmIxZDU1MDNjMThjMzMzYzhmZTYwOTU5NTAyZjU4MzkwZDBlMGY2OWZiZTVmZWUxM2M3MmFlZDY1ZmU2ZTMyZjZlYTQ1ODc3ZmU0NGY4YTU1NmFhNTE1N2IxMTJlNTcyMTk3YzFjMzUwYjc5NDNjNmNmMmU5MTQ2MDE4NTk5NTI0ZDI3NTk5ZjA5Yzg2MDI3ZjJjNTkyN2U0YTIwYzYzODMzODcwZTgzNjliYWEzNmVjYzA3Y2RiM2NlZDUyMGI1YWU0Njg2OWZmMzU3Y2EwODkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MGRiZGE3Mzk3ZDhmYzQ2MjE1YTEyMThhNmZmZDBkOCI6IjRmODJhMWVjYTZjOTE4NDI0MGY1MGY3ZTBjZmVjMDdlYzc3MmNhZDUyNzZkOTMwNDNjNDYyZDgzNjRhZGRkOWE2NTJlZWQzODVjY2M2YjBmYWE2Y2E2NzlhYjNhNGMzZDBiZTZhNzU5NDI1ZmQzODMxNmVlNmExYjFiMGM1MmMxYmIzYjU3YTliZDdjOGEzYmU5NWM4MmYzNzgwMGMyZTNiNDJkZGUwMzE4NTE5MzczOTg4MTFmOGY4ZGMyYTE1YmZkMmQ2YmU5OWE1NzJkNTZmNTM2ZTYyYmM1YjA0MWQzOTQ0ZGE2NjYwODFjZDc1NWVjMzQ3ZjQ2NDIxNGJmMzMiOiI3YmU0NzdkMTRkZjVkYzE1ODc3YWU1MzdiNjJlMWE1NiI6IjczNThkZGYxMzEwYTU4ODcxYTJmNzY3MDVmMWNmNjQyMjNjMDE1YzRkMTU3NDEwNGQyZTM4NzgzYmI4NjYyMDUwNDJmMDVjODZlNzZjNDdhMjUxNmNlMjg0OTExZjFkMmNiZWUwNzk5ODJkZDc3MTY3ZTMyOGI4MzI0ZWVjNDdjOTI0NGNjNTY2OGNmOTA4YzY3OWJiNTg2ZDRkZDMyYzZjOTllZDk5YTZiNTcxY2YxOGIwMDY4OTQ2M2U3YTg4Y2VhNmVhMzJkMjg4MzAxYTEwYTkxMzllZDYwOTJmZmUyOThlMjViOGNmYjZiNGJlODIxN2YxNjA3NmRjZDBhOTAiOjExMjoiNzc2ZDg3MTk0NDE1OWM1MWIyZjVlYzE5ODBhNiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYzg1MTc0ZDQyOGZjMWM3Yzg5Y2E1ZDFiOGFhYmEyNSI6IjM3MzVjYmZiODAwMDI2MDAyMWQxOTM4ZDJhMThlNzczN2YzNzhlY2RkYjExYTQ2Y2UzODdiZjA0ZTIwYmJmY2M5MDI0NTc2MzdmZDE1MmFiODcwMTcxODU2MDFmMzJhN2Y5MDYwNTcxMjNiNmMyZGEzMWExMDY5YzkzZTNjYWNjNTlhMzU5YWViZDNlMzFiMzAyZTFhMWY3ZDVkOGYxYjI5MTdhOGZlNzkxODFmYTYzM2I5MjVjZTAzYTExOThkYWM0OGY0Yzk1OTA3NmI1NWJjNmIzZDUwMTg4YWYyYzZhYTMzZDgzNjk4YWE4ZGIyMjY0OWYzOTgyNWJhNTQ3NzUiOiJiM2M5ZGZhNGM1NTM4OGExMjhmYmY2MmFhNTkyNzM2MSI6IjNmNTUyZDQ1YjYxY2YwNWFlMmFhOTI2NjhlODlmMzMzOGExNWVjN2M1YjcxMTNiNjU3MWNmY2Q5ZTRjNGE5NjIwNDNjY2Q5MzIzZjgyOGRkNjQ1ZThhOTFiMDA3Y2UyMTEyYjdmOTc4YWQyMmVlOTgyMTY5OGE0ZjI1NTlkOTg3YWU0NDIxNDUyYWQyZThkMTgwOTUzMjk3MTU2NDI2ZDQ1NDBhZmYyMTA0ZDg2MzdiNTZiMDM0YTNhMTgyM2NmOTYyYmZmYmM0NjVmZTYxNDgwOTc5NzVhODgyMWNhNzQ4N2U2ZTZjN2ZmNGVlNGRlODk5ZmU2NzM0NTY3NmJiMWMiOjExMjoiMWU3ZGVjODM4MzAxODNkNTZmNDQzYTE2NDcxZCI6IjNkOThjYWJjYTRhZmI3YzFmNmI4ZWVlZDUyMWY0NjY2YWUyNTJhYzEyZDE3ZWJmNGE3MTBiOWEyMmQ4MzliNjk0NTgzODdiYTRiYmVjMmY2NDAwZTBjZmY4MGZiZTQ2ODJjMjRlZmNkM2I4YzU5NGQ5YjUxNWNhNzg0MmM5ZDU5ODhjNDJiNTliNjUyNmMyOWE5OTI1NjQ1MWUyOTI3ZjViOTU2ZWYyNjJmOTdjNzMzZGZhOGJmZjczNjQ0NDczYjlhODU2MmJkZmNhNzQ4ZjQ3MzNkZGNlOTRhNjAwMjRkZmJmY2RlNjJmYjNjYmQ3YzNkOTU1MDEyZDUzMzhiOTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkODlmMDZlYjA3NzQ0ZDQzZDQ0NzM0ZmFmOTc1MWQwNyI6IjM2Y2MzYjJmNTYzMzA1MjA4YTAzMzc4ZjdkYzAzNjExOWY3ZGUzZmVlNzdjZWZhYzA2NTE1ODUzZDM2NjA5YTYyMjM4MmVkMDI2YzU5NzgzZmJjMGQ5OTEwNzY3ODc0YzUxNmUxMGM3YmYzZTNkMTA0ZjczYjM0NjNjOGQ5M2E2MzQxOGM3NmNiMGQwNWU2MmU5Yzg2NDJjYjRmMzJjYWNlZDI2MjA5MTJjYjZjNzllNTExMGEyN2Q1ZmJhMWVmM2I0ZDA1NzgwNzc4NTg1MjZjNWU0MjU0MzY1ZjJiMmFiNDdhNDVkZjRhZjA4OTgwYjNiN2E5YjY2ZGZmNWIzOGMiOiIxODVmOGQwMzM3MTNlZTYyOWU5MzU2MWNmOGQ1YWNiOCI6Ijc0M2JjYjY3MWQwYWExYzU0N2I1NDQ4ZDY0ZDdjNmIyOTA3Nzc2MjViYTI4ZjI1Y2EwZmJmMWZjNjY0OTVhMmZkZTA2NDhhOGRiNTEwMzliMGU3MzQwZDk5M2FlZjhhZmI0ODI2OWU2NjBjYjU5OTgzN2QxZTQ2ZjcyNzI3NzYyZDg4N2VlODRjMDczZDYxMzZkMWIwYmM3ZDRjNzhmNTY3M2E0YTZiNzMzNzU5MzdlOGQ1NGE0NzMwNDg0NWYzOGNhNmI0ZjUxY2YxNDEzNmEwODI2MDE2NTM1ZGM1ZWQwMDNlMzhjM2FjMzYyYjlkNThiYThiNTU1YTA1YTE0MTIiOjExMjoiZmNhZDQ4MDc2ZWIwM2ViZTg1YzZkNjRmNjM1NyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MTUwZjE0ZGM1M2YzOTFlODE1YWNmYWJlZDlmOWUyMCI6ImZkOGYzMzcwMTdlMWI2MGQ2NjE4ZTZlNGFkMzdjMWYyMzBjZGViNzg4OTE1NzljMmM2M2Q0ZTZhNGY3ZDJjYjcyNTJlOTlkZTMzM2M3M2RiNDU5NTg4MDhjMDhlOTEzNTljODg1YTczODVhYjZmOWVkOThhMjc5MjdhNWI4M2MzYTQ1NmNlMmUwMTg2OTcxMjY3NWU1MjcxNTViYTFlMzM5YWMxNGEzY2NkN2E0Yjg3MzYwOTAyZjJiODM4MTMwOGZlNWE0ZWFjNWM5MGQwYjg0ZGE0YmY1YjkwN2RlNmZmMzEzOWNmZmQyM2I0OWE3ODc1MDAwNjEwMDE4MzAzMmEiOiI3ZTkyZGQ1NThiZDI2NjJjM2E1MzlkZmUyMWEzNTJjZiI6IjliNDYyNGU5MTE4ZTZhYTVkYzY1YjY5ODU2NjM4Zjc3ZmQzZjlmNTYyMDQ2ZjUwYmE5MmE2NGU5ODgyNTg2Mzc5MzJhZjc5NzlmMDAwNTA1Yjg0YTcxZmY1ZGQ3YjYwYmFkNjI1ODZiMWE4ODM3YTYxYzE1YTFhMWJhN2YwNjY2ODI3MmMyODE2OTkxNWQ3ZjA2Mjk3YjZjMmE5NmM4YzQ0MjAzYTQyMmJmZDI1NTAwYzgyZTExMjc0ZmZlMDc3MDYzNjViZmQzZGEzNGFmNGM0ZGQ4YWQ3YjYyMGRlNzI4NGE1YWY3MjliZWE5YzRlZDI2MzFiZGNiYTJlYmRiN2QiOjEwNDoiOTIyYTdiNDhhZDViZjYxZTZkNzA3NTFjZmUiOiJmMjcyYTNlZTliOTgxZjk3Nzg1Y2M2ZmFkMzUwZTUxNmQ3MmQ0MDJkYWUwZDhhNTMxYzA2NGVjNjQ1OThiMmE1NzYwZjliMjc5YzEwYWExZmY3MWJlYzA3MzAwYWIwMzczMTg3MTM4ZTdhMTAzZmM0MTMwMTA1YWZhNmI2MzQ2ZjNkMzY4YjQwZDZmNTQyMzc1ZGU5Nzg3OGFkNGQ5NzZkNjRjNWM0OTY4YTE3YmUyYjE3NTdhMTdjMDMxMDAyMzFjMzQ3MjEyNTBjZDM3Y2M1OTY2Nzg3NjQwODNhZGU4OWFlM2IxYTIxNTFmZjkxNTFlZGNkN2JhMGViOGE0NjQ5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2U4MjE2MDcyZWQ2ZmNkZTBmZTBmNjM2YjI3ZWQ3MTgiOiIzYjUwZjJhOGRjYTlmNzAxNzg1MDNkODYxZDllMzdmNWVkZmFmYzgwZWUwMjNiZmVkMzkwYTQ3NzM3Mjk4NmU0Nzk0MTc1ZWMyMmFjMDM4YzM0NjFhYmE1MGM5YjIzNzljYWI0ODUxMjk0NmVmZGZlMmNiOWMxMmE4NThiMzczYTUzMDkzMjRmNDEwZTZhMDVlODhiYTg5Mjc1OWRiZWU2ZTQ4NmRjOTY2NWY2NmNiNTk1MGVhN2U3MTMxN2ZhOTRhYmJlYmQ2N2EzOTQ4NzQ2YTk5ODE3M2ZiYmI0ZjE0ZjllZmZiZGY2NmQzYjZlMzQ2MDUzNDk2YTRiMTkzNGNlIjoiMjNhMTIyY2YzNjNjMzExN2I4YzY2MzM4OGM3NjBlZTQiOiIyOGNlMGI0YTQ0ZmE4MzMyM2UwNjBmM2ZmNjQzNmI4ODI5ZDRmODQyMDkwMjk2YmRjOTUyYjZkNGE2YjFiMWE2NmJlMDYxNjhjNjNjNDY0M2U2YWMxODZmN2ZmZDhkMTQ0ZjYwM2IyZDRiYzBkNjViZTQ4MTIxNjc2ZjlmYTFmMzU5MDI5YzUxMmJlYmZkNzUwNzVmZjM1N2JjNTVmMjBmYzc2ZDlmMjQ3N2M5OTMwZjE2NDA4ZjlmMDljNWFlODZlZmEyNTI5ZDJmMTQ0OWNlZWI2MzViODNjYTEzNjYyODYwZWY5YWMwNGEzZDhhYjQ2MDVlY2NkMmQ5YWU1YTcxIjoxMDQ6IjUzMWE2NWNjNWRmZWNhNjcxY2M2NDA3OGQxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFhZjQzNGI3M2ExMjEwYjA4NTk1ZmZhNjg2MDc5ODMyIjoiMTNmNmMxYzJkNGVkY2YxNDM4YTdiNGU4NWJjZDFjODRhOTg5ODMxYTY0ZDIwNWU3ODU0ZmNlODgxN2RkZmNlYWI2N2QxMDUwNmNjZjZlZDljZTUwMDgwZWY4MDllMjhlNDZjYmE3YjBjOTZiZTZhODExZjU5Y2QwOWNiM2I3YjNmZTUwNzNlZTY3NjNmNDBhZWU2MWUzZTY1MzU2MDkzZjk3ZGVlZjVhODcyMWQ5OTVlNzFkYjI3YTUxZjYwYTUwZTM0YWMzMzQ4ODUyYzQ0NTE4OGNmYzY0MzM3NDU1ZjMxN2Y4NzUzNWQ0NjVjNmY5NjAwNmY0MDc5Mzk2ZWJhMyI6ImFlMzE4ZjNjYjg4MWQxNjgwZjZhZmJmNjcxM2E5YTJmIjoiMzc2M2M5MjQxYmUwZDlkOWE5ZTQ2ZTY0YjEyZTEwN2QxNmNjYTI2N2ZmODc4NDRjMjMyNWFmOTEwY2M5YTQ4NWM3MDE1ZDk1YmJlNjIzOTg4NjRkMDc5ZmIyYjU3N2JhMGNmYWQ5MjNjMjRmYTMwNjkxYWQ3ZDc2N2Q2NTFlZWQ0YTMzZDBiZThmMDZmZWQ0M2Y1OGIyZTBiYjA0OTU5ZjEwYjllOGU3M2JkODBkM2E2YThjOGNlNjM3YmZiZGI5ZDAyYzJiMGEzZGQ4MzE3YzQ5OTc4MjIwMzFhMzVkMzRiM2I2MTgxOWI0MjVjMTBjNjRlODM5YjI5ODc0ZGRmYiI6MTA0OiIyYWU3MzUwZGQzZDE5MDlhNzNmOGQ2NDI1NSI6IjNjZDJhNzcwMzAwY2U0Yzg1NzQwNjY2NjQwOTM2YTBmZTQ4ODg4Nzg4NzAyZmMzN2U3YTgyOTZhZGI0MGI4NjJlYzc5OWYyNTdhMTY4MjFhZGFhNzMxNWJkMzFlOGRlYzYwZTRhOGZhZWI4YmEyZWU2MDYzNDBmMDIxOWE2NDQwZTljMWQzMTY4NDI1ZTU4ZmFjMDJlOGE4ODg2NWYzMDY0OTkxM2Q5ODgzNTNhYjgxZjQyYTVhZDQzZjk2MDA1NWYwODc3YWNkYTIwZjQ5MzIwOGMyYzQwNzU0ZmJmNGNjZWUwNDA5NzVhYTM1OGVhM2ZlNjJjYmQwMjhjMTYxMWEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA0MDM2ZDJmNTI3M2M2ZmY1YjgzNjRhYTU5NTM1OWM5IjoiYWNmNzliNjA5OTQ5MGFmOTM4ZmI1ZmQ4OTEzMjU1YjNkYWEyMjc4NmIwMzM1NmNkZjNlMGZmYWY1NzBmOWY4NjYwNDdiOGUxNWM5OTUzZjg5M2Q5N2U3MDk4MjY1Mjk3Mzk2ODY4ZWJjMzgzYmU4NTQ3ZThlYzlkOTc0YjZhNjViNWRjNTE0N2NkYWRlZjJlMmFkOTY2OTZlODRlNDRmMzY0YzJiYTE4YzhhYWJlMjFmOTk0ODk5NTdiMmI1NDg0YmYzZmI0ZmVjYWY1ZGRhYTFkMzczZTkxMDA1OWM5Nzg5MThhM2QwMWI5NTVkZTJhZGI0NzU5MTRiZjJjMjA2NyI6ImVkYzQzM2MzODExNDBkZmY5MjlkOWRmOWY2MmY0Y2I2IjoiNDA0YWNmZWVlYTM0MmFlZWE4YzhiNzQ0OWFmOWUyMGRkZjViODVkYzc3NzBkMjE0NGE0ZGQwNTk1OTYxM2QwNGQwY2ZlY2U1YTIxY2JiMWE5MTc1ZGRjOTQ0M2ZmYWNkMjA4NTMzMmViNGMzMzdhMTJhN2JiMjk0Yzk1OTYwZTdjMGJkZTRiOGFiMzBhOTFlNTAyNjdiYmQwYjhkMmE0ZWQzODE0MDllYTJlNGM4NGY5YTIwNzBhNzkzY2UzYzkwZWE4YTRiMTQwNjUxYjQ1MjY3NGY4NWQ1Yjc2ZDAwNTVkZjExNTYwOGJmM2EzYzYwOTk2MTA4MDIzZWJhYmU2NSI6OTY6IjcxZjgxOGYxYTJiNzg5ZmFiYmRhOGVjMSI6IjQ3MjljYjY0MjMwNGRlOTI4YjlkY2EzMmJiM2Q3Yjc4MzZkZDM5NzNiYmNjZjNmMDEzYzhmZjRiNTllY2E1NmY1ZDM0ZDFiOGYwMzBhN2I1ODFiMmY4ZmRjMWUyMmI3NmE0Y2JjMTAwOTU1NTk4NzY3MzZkMzE4ZDZjOTZjNWM2NGNiZDlmYmQxZDhlYjRkZjM4YTJkNTY2NDBkNjdkNDkwZDAzYWNjMWNkMzJkM2YzNzdlYjE5MDdiYmQ2MDBmMjFkNzQwYjU3ODA4MGJhOWM2ZGRjN2RjNmM1MGNkY2VlNDFmZWM1MTQ5OWNiOTQ0NzEzYzA5NjFmYzY0ZjVhNzAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU5ZmU0NGM2ZTI4ZDAyNWIyYWQwNWU2ZTg2NzA1MWFiIjoiMjBlNjZiYWUxMjE1ZGU5YTg3YTBiODc4ZDM5MDE1ZDE3ZTBkNDU0MmExYWFiYTIwMDBjZWZiZDVmODkyYzI2YTQxMGY1NWYwZDdkYzJmNmI2NjY5MGYyOTk3MDMyOTg1ZTU1MTZlMDY4YmZjNmVjOGEzNjY5ZjU2NmUyODBiMGNlZmRlZDUxOTAyM2I3MzVlZTNiY2JmYzViNmNlODIwM2I3Mjc5MzNhNzUwZjliZDUxNWVjNDQ4YzFmM2EwMzBhYTBmNDBlNjA3NzI3YTMyMzllYmJlNjU1ZDQ2YjM4YTNkODY3ZTQ4MWNjZjBmYWRiZjBkNTliNjY1ZDJlZDZiNSI6ImViMGMzMDMyMDAyOTQzM2Y2NmQyOWIzZmQ1YzY1NjNiIjoiNDliNzQxOGI4NzM3NGI0NjJkMjUzMDliMWMwNmUzMTMyYTNjOGY0YTRmY2YyOWZlZDU4ZTA5MDI1MDk0MjZiZTcxMjYzOWRiMjFjMDc2ZGY3YjgzZGNmY2MyYzJjOGZjYzg4NTc2ZjQ2MjJhNDM2NmViNDJmODRlYmY3NjBlM2ViMjJiMTRmOGI1ZmY4M2YwNmE2ZjA0YTkyNGVhYWIwNWI5MTJlMTI2ZTgwZGEyMjQ2MWFiZjdmMTkyNWZkNzJlYmRmMmFlYTMzNWEwNDQ3MjZlN2MyZWJiYjJiOGFlZWJhYjRmN2RlNWUxODZiNTBmMjc1YjcwMDc5NGQ4OTVkOCI6OTY6IjI5NmM0Y2RhZWI5NGJlYjI4NDdkYzUzZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMzMTQyNjRjZWUwZTZkYjMwZWJlOWIyZjZkNDk5MWIyIjoiZDQzNmZmOWFiZmIwNDRhMzMyYzRlMDA5YjU5MTcxOWE2N2IxMmE1MzY2ZGEwYTY2ZWRmMTk2MDVjMzRkYWEzNzU4OGUxNWRkM2RhMGQxYTA5NzIxNWU0Njk0MzlkZTc5Y2NhNzRlMDRjZDQ5MDRlNWI0YTZjYjRlMGVhNTRlNmJhNGU2MjRlZDZiZDQ4YmUzMmQxZWY2OGZmZWExNjM5YTE0ZTkxYTU5MTRjMjM0NmVhNTI2ZGY5NWNiZDRhZDFiOGVlODQyZGEyMTBiMzViNjMxNWMzMDc1ZWNjMjY3ZDUxNjQzYzRiMzkyMDJkMGFkNzkzY2JiMDA0NWViZGMxOSI6IjRjZDQ0MzFiYjZkZWE4ZWIxOGFlNzRlNGMzNWE2Njk4IjoiMGVlYWZiZmQwNGY5YTBlYTE4ZTViZGM2ODhjN2RmMjcxODNmMzQ2MTg3ZTk1NzRiNjEyMjIwMDZmMmIzZTEyZThkOWQ5YmYxZjBmMTU5NDllZTFhN2VlOGU1YzgwZWU5MDNiOGJhMjg2MGUxNWNjYjk5OTkyOWYyODAyMDBiMTU5YzJhZGNhNDgxNzQ4ZDA2MzJhN2I0MDYwMWM0NTA1NWY4Y2I1MTI2MTQ4ZTZjYmFiMmM3NmY1NDM1MzdhYjU0ZWIyNzYxODgzNDNjZWEzYzRhYjBkN2I2NWI4NzU0ZTU1Y2ZlM2Y2YTVjNDFiNmVhM2MwOGI4MWZjZWNjOTY4YSI6OTY6ImZkYTE4ZDJmNzk1ZDkwMGYwNTdmZTg3MiI6ImNiOWUwZmIwYWMxM2NhNzMwYjc5ZTM0NzQ1NTg0YjM2MmQwNzE2YzM0NGU0ZGU5MGQ4MzUyYjIxMTE3NDcxYmExMmM5N2YxOTMxNTBiMzM3NzRiYWVlNWU0YTBmMTFiMTA0MjhlYWYwMTA2Yzk1OGUxNmFhNDZjNWY2ZjNkOTllZWQ5M2QxYjliYTM5NTdiZWQwNWE4YjljYzhjNTUxMWNmODEzYTY2ZGM3ZDc3M2NiNzM1YjA1MjNkOGQ2YjBiODA2MzliMDMxZGRjMzc1ZjcxNGM2ZGQ1MDA1NTMyMGNkN2VkNDRhNDcxYzhkNTY0NWM5MzhhOTAwNWQwYjUwNTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2MDcyMDE4YmQwYmRhNTI0YjViZWI2NmE2MjJjNjNlIjoiOTFjNTI0YjM1OWRhZTNiYzQ5MTE3ZWViZmE2MTA2NzJhZjFlNzc1NDA1NDYwNzMxN2Q0YzQxN2U3YjFhNjg0NTNmNzJkMzU1NDY4ZjgyNWFlYjdmZGUwNDRiMjAwNDlhZWQxOTZlYzY2NDZjY2UxZWVlY2NmMDZjYjM5NDI4NjI3MmI1NzMyMjBjZGI4NDY2MTNlYmM0NjgzNDQyZGNjYzdhMTllYzg2ZWYxZWM5NzFjMTE1NzI2NTg0YWUxZjQwMDhmOTRlNDdkMTI5MGQ4YjZiN2E5MzJjZmUwNzE2NWZkMmI5NGU4Zjk2ZDE1ZjczYmY3MjkzOWM3M2Y0YmQxMSI6ImM3ODNkNmQzYjgzOTIxNjBlM2I2ODAzOGI0M2NmMWY0IjoiOGFlN2M4MDlhOWRjNDBhNjczMmE3Mzg0ZTNjNjRhYmIzNTljMWIwOWRjYjc1MmU1YTZiNTg0ODczZTM4OTAyMzBjNmZjNTcyYjlhZDI0ZDg0OTc2NmY4NDljNzNmMDYwZmM0OGY2NjRjMWFmOWU2NzA3ZTIyMzY5MWI3N2UxNzA5NjZlZDE2NGUwY2MyNWVkZTNmYmMzNTQxYzQ4MGY3NWI3MWU3YmU4OGZlNzMwZDhiMzYxZWEyNzMzYzZmMzdlNmE1OTYyMWRlNjAwNGUwMjA4OTRiNTFkZmI1MjU5NzNkNjQxZWZlOGQ1ZmQ5MDc3YTBiYmM5ZGM3OTMzYTVkZSI6NjQ6ImVkZmZlNTVjNjAyMzU1NTYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMDE3NTFkM2RhOThiZDM5ZmY0ZTU5OTBhNTZjZmVhNyI6IjI5NjVhZjBiZGUzNTY1YTAwZTYxY2ViYmZlMGI1MWI1YjVlZTk4ZGJiZmZmN2IxYjViZjYxZGE1YmE1MzdlNmY0Y2Y1ZmEwN2QyYjIwZTUxODIzMmM0OTYxZTZiYzNhZTI0N2I3OTc0MjlkYTVkN2VlZTJmYzY3NWIwNzA2NmFjMmU2NzAyNjFjNmU5YTkxZDkyMGM3MDc2MTAxZDg2ZDVlZjQyMmI1OGU3NGJkYzFlMGIxZDU4Mjk4ZDNlZTBmNTEwZWUzYTNmNjNhM2JiYzI0YTU1YmU1NTZlNDY1YzIwNTI1ZGQxMDBlMzM4MTVjMmExMjhhYzg5NTc0ODg0YzEiOiI2MTcyNDY4NjM0YmY0ZTVkZGE5NmY2N2Q0MzMwNjJkNyI6ImFlMmQ3NzBmNDA3MDZlMWVhYTM2ZTA4N2IwMDkzZWMxMWVkNThhZmJkZTQ2OTU3OTQ3NDVlNzUyM2JlMGExZTRlNTRkYWFkZTM5M2Y2OGJhNzcwOTU2ZDFjZmIyNjdiMDgzNDMxODUxZDcxMzI0OWZmZTRiNjEyMjdmMTc4NDc2OWNlOGM5MTI3ZjU0MjcxNTI2ZDU0MTgxNTEzYWNhNjlkYzAxM2IyZGZiNGE1Mjc3ZjQ3OThiMWZmNjc0YmNhNzliM2RlYzRhN2EyN2ZjZjI5MDVhZTBjZTAzZjcyN2MzMTU2NjJjZDkwNmU1N2FhNTU3ZDEwMjNjY2UyYWNkODQiOjY0OiI2NmMyNDdlNWFkNGUxZDZhIjoiZWZkMDY0ZDRiNGVmNGMzN2I0OGRkZjJmYTZmNWZhY2M1ZTljYzRjMzI1NWIyM2ExZTM3NjVmYWJiNWEzMzlmYTBlZGE3NTRhNTM4MWI3Mjk4OWZjMTMyM2ZmOWE2YmJhZWNkOTA0ZWI0ODM1ZTVhNTExYjkyMjkyNzU3NDY3MzA2MWVkOGRlMjMyOTllYTE0NTYwNTRlN2ViYjYyODY5ODc4YzM0ZmI5NWU0OGM4Mzg1YjVlYmNlZWNiOTYyNjU0Y2YxNTg2YjNmNTRlNzg4N2NlMzE4NTAzNjNlOWEyMmJlOWU2ZmJjMjJlNjk0ZGI4MWFhMDU1NDkwNDk1ZGJmMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2JjMGRjYjUyNjFhNjQxYTA4ZTZjYjAwZDIzZTRkZWIiOiJkNTMzYWQ4OWExYTU3OGRiMzMwYzAxYjRlMDRkMDgyMzhiMDIwZTM2YWViZTg3Y2YyYjBiZjBiMDFmMWNlNDE5N2JlOGIwNTk2ZTQ3NWE5NTk0NjkxODE1MmU4YjMzNGJhODlmNjA0ODZjMzFmMGJkODc3M2NhNGZmMTMxOWZlOTIxOTcwODhiMTMxZTcyOGQ2NDQwNTQ0MWM0ZmI1NDY2NjQxZjBiODY4MmU2Y2IzNzFmOGE4OTM2MTQwYjE2Njc3ZjZkZWY4YjNkZDljYmY0N2E3M2Y1NTNmMWRjYTQzMjBhZDc2ZjM4N2U5MmY5MTBmOTQzNDU0M2YwZGYwNjI2IjoiMTZmYTE5ZjY5ZmNlZWQ5ZTk3MTczMjA3MTU4NzU1YTUiOiI5MmRkZDNiOThmMDhmYzg1MzhmNjEwNmY2NDM0YTFlZmEwYTc0NDFjYzdmNmZkMDg0MTEwM2MyZTRkZDE4MWVhMGM5YTQ4MTFiM2NiMWJhZDE5ODZhNDRkOGFkZGFiYzAyZGQ2OTgwZGFmN2Q2MDQwNWIzOGRhZGM4MzZiYjFkMDYyMGNlYWI4NGUwMTM0YWNhN2MzMGY5Zjk0OTA0MzZiMjdhY2ZkNzA1MmY5ZDdmMDM3OWI4ZTcxMTY1NzEwMTdhZGQ0NmI5OTc2ZjRiNDE0MzFkNDdiYWU2ZjVmMzRkYzQyNDEwNzkzYmMyNmM4NGJmZTg0ZmI1M2FlMTM4Yzg1Ijo2NDoiZjUyODllMTIwNGFjZTNiMiI6ImJlMGMzMGRlZWZmYmU1MTcwNjI0NzkyODEzMjAwMmIyNGQyOTI3MmVlZTZiOWQ2MTg0ODM4NjhlNjcyODAyMzY2MzJmYTFhZTA2ZjNlZjc5M2Y2N2JkMDFiMWIwMWY3MGE4MjczNjdjMWNkMjhmNzc4OTEwNDU3YzdjYmQ5NzdkZmVmZmYxZjg0YTUyMjI0N2UxOWIyZmQwMWZhMjJjZTY3Y2VmOTUwM2Q0NWM4MGE1MDg0NzQxZjA0MTA4ZjI0NjJiN2NkZDA2YThmMWYwNDRmZWEyYjA1ZTkyMGJjYzA2MWZiYzY5MTAxNzVkNzMyZjQ1MTAyYTYzYzc2YWU0OGMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIzOWMxNTQ5MmQ2ZGVlYzk3OWU3OTIzNmJhY2E0NjM1IjoiZDY0ODg2Y2U1ZjViNGFkYjdmZThmOTU5MDRiYzE0NjE3NDljOTMxNjU1YjAyODE5ZmZkZDBhZTMxYmFkNDE3NTEyNWFhNjg5NjJmOGUzNmVjODM0YTdkNTNhMTkxYTc0YzkzN2U4MWVjOTNhZDljZTBkM2IyODZkM2MxMWZmMTczM2MwYjc3ODAxMzA3NjhjMTIwYjE4MzM5MzM1NjFjZjA3Mzk5Y2E0OWI5MTIzNzBhZTM0ZjBlNDliOWM4Y2I5OTIwZWRkYzY4MTZhYjJhZTI2MWM2ZDdmNzAwNThhOWI4M2E0OTQwMjZmMjQ5ZTU4YzRjNjEzZWVmYWZlNjk3NCI6IjkxNmI4YjU0MTc1NzhmYTgzZDJlOWU5YjhlMmU3ZjZiIjoiYjM5ZWI3MzJiYzI5NmM1NTVjYzlmMDBjZjRjYWFmMzdkMDEyMzI5ZjM0NGE2Yjc0YTg3M2JhZjBkOGRkZTk2MzFmNWU1N2I0NWI5NTdkNmFlYzBmNzk3OGU1NzNkZDc4YjQzZDQ1OWI3Nzc1NjAzN2NkNjRkMTBkNDk5NjZlYjNhMmEwOGQwZjRkNWU0ZjVkY2I4NzEzZjRlNDc1NmFjZGY5OTI1YzVmYzYxMjBjNDc3ZjZkZmZjNTliMGI0N2EzZDVlZmQzMmI4YzkwNTJiMzIxYmI5YjUxMjllNWM2YTA5NWQ4ZGU1NjM2MDFiMzQ2MDg0NTZmNThkNzIyMWYyZCI6MzI6ImZjMDhjYmJlIjoiOTVjMTY5NzIxZWEwMDdjM2YyOTJlNGVjNzU2MmE0MjZkOWJhYTdkMzc0ZmQ4MmUxZTQ4ZDFlYWNhOTNkODkxZDVmZmE5YWNmNWUzYmQ4MmU3MTNhYzYyNzE0MWUyNmE4YjY1NDkyMGJhZmZhYjk0ODQwMWNjM2MzOTBkNmVlYTlkN2I3OGM0ZmNiMDgwYjBhYTkyMjJlNGQ1MWJmMjAxY2NmZDkzMjg5OTU4MzE0MzVlMDY1ZDkyYWQzN2VlNDFjN2M0MzY2Y2MxZWZlMTVjMDdmYzA0NzA2MDg4NjZhZWVhOTY5OTc3NzJlY2Y5MjY5MzRjNWQwMmVmZTA1ZjI1MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGI2OGE5NmUyMTZiMGRkOTk0NWYxNGI4Nzg0ODdlMDMiOiI1NjM0MTk2YTMyZDRjYmZhN2EyZjg3NGExZTBmODYyODdkMjk0MjA5MGUwY2M2YTgyYmQ1Y2FmNDAxMzZhMjdkZGY1MjRhMTc3MTNjZTRhZjA0Y2E2Y2I2NDBhNzIwNWNjZTRhYzljYjJkMGFiMzgwZDUzM2UxZTk2ODA4OWVhNTc0MGMwZmNiZmE1MWYyNDI0MDA4ZTBiODlkYzdiMzM5NmIyMjRjZmFlZDUzYjNhYzA2MDQ4Nzk5ODNkM2U2ZTZkMzYwNTNkZTQ4NjZmNTI5NzY4OTBmNzJiOGY0Yjk1MDVlNGViZGQwNGMwNDk3MDQ4YzNjZTE5MzM2MTMzZWE0IjoiOGExYTcyZTdiYjc0MGVjMzdlYTQ2MTljMzAwN2Y4YWUiOiIxYjRmMzcxOTBhNTlhNGZmZjQxZDM0ODc5OGQxODI5MDMxMjA0ZmQ3YWMyYTFiZTdiNWVhMzg1NTY3ZTk1ZTJhY2UyNWJmOWUzMjQ0ODhkZDNhYjhjZTdmMjlkNGM5YTRmNGIxYThhOTdmNzc0ODcxZWU4MjVlMmMxNzcwMDEyOGQzYzU1OTA4ZDNiNjg0YTFmNTUwZmRiOGIzODE0OWZmNzU5YzIxZGViZGQ1NGU0OWQ2NGQzZThhYWM4MDNkZmQ4MTYwMDQ2NGVkNDg0NzQ5YmI5OTNmODlkNDIyNGIzZDdkNTVjNzU2YjQ1NDQ2NmZmOWZkNjA5MDE5ZWQ1ZTgzIjozMjoiOTI1MWQzZTMiOiIwYzZiYjNlZTVkZTVjYmI0YjM5ZDg1ZDUwOWJjYWNiM2RkYTYzZmE1MDg5NzkzNjUzMTMzOTg4Mjk2MmU4ZGM1NGMyODVjODk0NDc2OGQxMjA5NmQ0YTNjMmI0MmZmYTkyNjAzY2VlMmRhOWI0MzVlYzUyOTA4ZmNhNmQzOGVkNzRmODk4ZmUwZmZhNzYxZjk2MDM4ZmY3ZGZlY2NjNjViYjg0MWMzNDU3YjhkZTFlOTdkOWJlZTgyZTI5MTE2MDJlZTJkYzU1NWIzM2EyMjc0MjRkZWE4NmQ2MTBkMzdjNDQ3Nzc2Mjk1YjQxMmI0MTI5MDNhZDJjZWRlNTE3MGI2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2NTliOWU3MjlkMTJmNjhiNzNmZGMyZjcyNjBhYjExNCI6ImZkMDczMmEzODIyNGMzZjE2ZjU4ZGUzYTdmMzMzZGEyZWNkYjZlZWM5MmI0Njk1NDRhODkxOTY2ZGQ0ZjhmYjY0YTcxMWE3OTNmMWVmNmE5MGU0OTc2NWVhY2FjY2RkOGNjNDM4YzJiNTdjNTE5MDJkMjdhODJlZTRmMjQ5MjVhODY0YTk1MTNhNzRlNzM0ZGRiZjc3MjA0YTk5YTNjMDA2MGZjZmJhY2NhZTQ4ZmU1MDliYzk1YzNkNmUxYjE1OTI4ODljNDg5ODAxMjY1NzE1ZTZlNDM1NWE0NTM1N2NlNDY3YzFjYWEyZjFjMzA3MWJkM2E5MTY4YTdkMjIzZTMiOiI0NTlkZjE4ZTJkZmJkNjZkNmFkMDQ5Nzg0MzJhNmQ5NyI6ImVlMGIwYjUyYTcyOWM0NWI4OTljYzkyNGY0NmViMTkwOGU1NWFhYWVlYWEwYzRjZGFhY2Y1Nzk0OGE3OTkzYTZkZWJkN2I2Y2Q3YWE0MjZkYzNiM2I2ZjU2NTIyYmEzZDU3MDBhODIwYjE2OTdiODE3MGJhZDljYTdjYWYxMDUwZjEzZDU0ZmIxZGRlYjExMTA4NmNiNjUwZTFjNWY0YTE0YjZhOTI3MjA1YTgzYmY0OWYzNTc1NzZmZDBmODg0YTgzYjA2ODE1NDM1MjA3NmE2ZTM2YTUzNjk0MzZkMmM4MzUxZjNlNmJmZWM2NWI0ODE2ZTNlYjNmMTQ0ZWQ3ZjkiOjMyOiI4ZTVhNmE3OSI6IkZBSUwiOjAKKworQUVTLUdDTSBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczEyOF9lbi5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4uZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGJlZTlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxMjhfZW4uZGF0YQpAQCAtMCwwICsxLDY3NSBAQAorQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMDE0Zjc0MzEwZDE3MThkMWNjOGY2NWYwMzNhYWY4MyI6IiI6IjZiYjU0YzlmZDgzYzEyZjViYTc2Y2M4M2Y3NjUwZDJjIjoiIjoiIjoxMjg6IjBiNmI1N2RiMzA5ZWZmOTIwYzgxMzNiODY5MWUwY2FjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDg3NGEyNWYyMjY5ZTM1MmNjZGQ4M2NjMmQ0ZTQ1YjciOiIiOiI5NzE3YWJiOWVkMTE0ZjI3NjBhMDY3Mjc5YzM4MjFlMyI6IiI6IiI6MTI4OiIwZTA5ZTUzZTVmZThkODE4YzUzOTdjNTExNzNlZGE5NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdkYWI3N2UyM2I5MDFjOTI2NDU0ZjI5Njc3ZWI2MmQ0IjoiIjoiOGFhZWMxMWM0YTBmMDUzZDdmNDBiYWRkMzFhNjNlMjciOiIiOiIiOjEyODoiY2VjMmUzMjMwZDhiNzYyYWNlZTUyN2UxODRlNGMwZGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMzk3ZjE2M2EwY2I1MGIwZThjODVmOTA5Yjk2YWRjMSI6IiI6Ijk3YTYzMWY1ZjZmYzkyOGZmY2UzMmVlMmM5MmY1ZTUwIjoiIjoiIjoxMjA6IjNiNzRjY2E3YmNkYzA3YzhmOGQ0ODE4ZGU3MTRmMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE3YWRjMGQzYWFjZWY0MjM5N2JiY2E3OWRkNjVkYmRmIjoiIjoiYzZkMzExNGMxNDI5ZTM3MzE0NjgzMDgxZDQ4NGM4N2MiOiIiOiIiOjEyMDoiZDg4MTQxZDI3ZmUxNzQ4OTE5ODQ1Y2ZhNTkzNGJjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTAxNzE4MDVkN2Y3YTZkODdiNjRiZGE1NzQ3NGQ3ZmMiOiIiOiJmYWQ2NWI1MGMxMDA3YzRiMGM4M2M3YTY3MjBjYWNiOCI6IiI6IiI6MTIwOiJjM2QzZjI0MGQzZjNkYTMxN2VhZTQyYTIzOGJjYzEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YWFhMGM4NWQyMTRjNmM5ZTllMjYwZTYyZjY5NTgyNyI6IiI6Ijg0ZTI1YzkxNmYzOGRkNmZkYjczMmMwZDZkOGY4NmJiIjoiIjoiIjoxMTI6ImE3NzQ4MTVhMmE4NDMyY2E4OTFlZjQwMDMxMjUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZWY4YjZhNThiOGU1ODJlNTc3MDBiYWI0ZjJhNDEwOSI6IiI6IjM2MTU0MzllOWZiNzc3NDM5ZWI4MTQyNTZjODk0ZmIyIjoiIjoiIjoxMTI6IjUzN2JlOWM4OGQzYTQ2ODQ1ZTZjZjVmOTFlMTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ODk0MjMxZDc0M2Y3OTYzODY4N2MwNzBiNjBiZWVlMSI6IiI6ImUzNGNkMTNiODk3ZDFjOWI4MDExYTBlNjM5NTBjMDk5IjoiIjoiIjoxMTI6ImQ1ODJjNGJjMDgzYThjZjFhZjRkNWMyYzliMTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YjI1ZjljYmRjM2JjZDI3ZmQyNDVhMWM0MTE1OTRiYyI6IiI6ImE2NTI2ZjhjODAzYjY5ZGQ1ZjU5ZmVjYTFjZmY3OGUyIjoiIjoiIjoxMDQ6ImM3ZTE5ZTA4YTA5YTljMWZhNjk4MjAyODkwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjMyMzU0MjI4OTdiNjQ1OTc5OGE5N2RkZDcwOWRiM2QiOiIiOiI5NjY3OWU5MzYyZjkxOTIxN2Q1ZTY0MDY4OTY5ZDk1OCI6IiI6IiI6MTA0OiI0NGVkNDFiZGEwZWIwOTU4ZDQwN2I3Yjc4NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY2NWJjNzk1NDM0ZWZiYTNjNTM5OWVkM2M5OWZmMDQ1IjoiIjoiMmU3MjdjMTlhODljYmE2ZjljMDRkOTkwMjQ1ZmNlZWQiOiIiOiIiOjEwNDoiNjQ4MzBlZDdmNzcyZTg5ODgwMGZjOWFlMmEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM2YzY2ZDUwZjJmNzZjNGU5MTFiM2IxN2ZjZGNiYTFkIjoiIjoiNzdiNDIxNThhNGVmNWRjMzMwMzlkMzM2MzFiYjAxNjEiOiIiOiIiOjk2OiIxYmNlM2JhMzNmNzNlNzUwYWIyODRkNzgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjEzNTU4ZGI5Yjc0NDFjNTg1ZDM4MWZmYzE2YjMyNTE3IjoiIjoiYWRkZjVkYmUwOTc1YzVhZDMyMWUxNGRkNGJkYzJhZDIiOiIiOiIiOjk2OiJmNDEzYzNiZjEyNWNlNTMxN2NkMWM2YmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc0NjM4NjI4YjEzNjFjMjk1NGNlMGFjNTQ1NmExMTU1IjoiIjoiYzU4NjE1MDdjODc5ZTY4NjRkN2NiMWY3N2NjNTVjYzYiOiIiOiIiOjk2OiI4YTUxNGZkYzc4MzU3MTFlNGY0NTgxOTkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc4MTVkMjJjNWMwODFkZjlhYzIxMTRhYWEyYzBjYmY5IjoiIjoiODIyZjgzY2Q5ZjI0OWRmYzIwNGI1OTU3ZjBiMGRlYWIiOiIiOiIiOjY0OiJhYTFmNjlmNWQzYmI3OWU1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYTg0N2E0NzgyM2NiOWMyOThlNDEwN2M2YWFmZjk1YyI6IiI6IjM5MzQ4ZjgwYzZiYzQ4OWY5MzE1YmU3YTZmY2JiOTZmIjoiIjoiIjo2NDoiYzNiM2YzMWU1NmNmNDg5NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTZlNjdlYTI0OGVhNmRiMDhhZjFkODEwY2IxMDU3NGUiOiIiOiI1MDM4NmUyMDc1ZWIxNWNhM2YzZTZkYjZiZmYwMTk2OSI6IiI6IiI6NjQ6IjNkNGYzYjg1MjZhMzc2YWUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI2YTgzMDE2MzZiYTkzZTdmNTYzMDkxNDNmMTg0MjQxIjoiIjoiYzdlMzJiMWQzMTI5NzFiZGMzNDRhZWZhZjQ1NDYxYmMiOiIiOiIiOjMyOiIyNWYxYjQxYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTMwYTA3YzQ2NzA2NzE0OGRhMjc5MGY5MGQ3M2ZmMzIiOiIiOiI4MDBiODFjOWQyZmYzYThlMTU2OTBmZmI0MTE3ZTIxMSI6IiI6IiI6MzI6ImFiY2M4ZDcxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjY2ZhYWU1OWMzMTk2YjhjNDAzNzE2NDI0ZWE2MDFmNSI6IiI6ImY5YjA1OWRlMGVmYTRlM2YzNjQ3NjNkNjNkMDk4NDEwIjoiIjoiIjozMjoiODkzMzQ0NGYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNWJlZWZiZGQyMzM2MGYyZGQxZTZlM2MxZGRiZmViZiI6IiI6IjgxYTg0OTRmODViZTYzNWQ3MWU1NjYzNzg5MTYyNDk0IjoiZjllYmYyNDJiNjE2YTQyZTIwNTdlZGUzYjU2YjRjMjczNDlmZWQxNDg4MTdhNzEwNjU0ZGU3NWQxY2ZjNWY2MzA0NzA5YjQ2ZWYxZTJjY2I0MmY4NzdjNTBmNDg0ZjhhOGM2YjBhMjVjZmY2MWQ5NTM3YzNmZDBjNjliYmM2ZWYyMWNiZWM4OTg2Y2JjOWI2ZTg3OTYzYjhkOWRiOTFiNzEzNGFmZTY5ZDNkOWRlYzNhNzZiNmM2NDVmOWM1NTI4OTY4ZjI3Mzk2Y2M5ZTk4OWQ1ODkzNjljOTBiYmZlZmIyNDllM2ZhNDE2NDUxYmMzZDY1OTJjYzVmZWVmYmQ3NiI6IiI6MTI4OiIxNTlhNjQyMTg1ZTA3NTZkNDZmMWRiNTdhZjk3NWZhMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM0NjVhYThmZTVkNTM0YzkxMmU2NTRmNWFhZWQ1ODU3IjoiIjoiNWMxNTVmNzE5NGIwZDBhMTdiOWEwYzIzNGQ2MDk0NDMiOiJhM2Y4ZDcwNWIyMzNiNTc0Mzk5ZjcyMzUwYjI1NmNiNDg5M2UxMzA2ODg5MTNjZTNkZWY4ZTQ0Njg3Njg4YzAzNTJmZjk4N2FlYTM1ZGM1M2JjOTVjZGI5Y2RjYzZlNmViMjgwMjY1ZDlhMWFmMzhkNTI2MzkyYWI2M2M5YjA0M2MxYjFiNDNlMTgzMjFlODRlYjdlMDg4ODRmMjQ2M2MzMmI1NWViNTg1OWZiMTA5MTg1OTVhNzI0YTYxY2ZkZjkzNWU0Zjk2ZDA3MjE2MTI3MjBkNDZhOTQ2NDg3YjUyNTc3OWY2Y2UwYWJmMDRmYzU2MDgzNTExMTliNzQyN2QyIjoiIjoxMjg6Ijk1OTVhNmQ4NzljZDdhOTQ5ZmEwOGU5NWQyYjc2YzY5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzQ0YjllMTY5MmQ4OTc0ZDdkZWMzNDllYmQ3ZmUxZTgiOiIiOiI2MmFkNGIwOWZkNTU0ZTBkNmIzOTM3ODM5ZTY5M2U1YiI6IjZmOTk3OGY3MDc4ZjAwMzBjNDVjYWY0OTEyOGZmNzI5NDNhMjA4YTIzOThkMDhkMTMyMjM5ZjNhYjVjMTg0NzA4ZTQyMjJlYzljY2RlNjlkYzg2ZDE3MDBjMmZlMGFmOTM5NDU0YmJiMzk2MjMyNzE1ODU1Nzg2MGI2ZmE0OTJhYjgyMDFkZjI2MmE2MjA5NzA1YzdlMzEyOTQxOWJjZThiODI3MzIwODkzYzE1NzljYTA1YjMyYzgxYjM5NjNiODQ5NDI4ZjcxZmU3NTI4ZTcxMDU1N2EyNzIxMTcxOTkxNjNhMzVlYmZiYWJhNzhmNzY3NmY3ZTU2NmIxNjMxMWEiOiIiOjEyODoiNjM0ZjZmZTk2MjViZThiMWFmOWY0NmJjYzBmYTMxNjIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwOTdjMDU5NTM1MDM3YzZiMzU4ZGJiNWE2OGI1ZjJiMSI6IiI6IjAwY2FlZGZhMDc4YzI3ZTNkOTU1MWUzZmI4ZDk4ZDc3IjoiNmM0YmRlMTExMjlhOTU5ZmNkNmE0ODJjYjE5ZjVmMWM1ODJjMDQyYjMxNGY3OTk3YjA0NTAyNDJmOWU2NjlkYzFjYmIwYTNiN2ExODViZjhiMDM1MjY3ZTZmMDMyMDYyNjgwMDhlMmI5Nzg2NGQ0NGQ2YTljNmIxYjRiMDY3ZDYyM2M0YjRlOWM2MDgwNDJlYTkxMjBhZWQzYmVlODA4ODYzNTI2ODM4OTE0OTZkODk4MGU0MGI4NDgwYzk4YzJmZTA4Zjk0NWFhMWVmNjAwN2M2NTIyMDMxOWRkODY3ODE4NGFiNTRlODEwODNiNzQ2ZWM2NDQxZTg3YTU2OGUwYyI6IiI6MTIwOiI1MDc1ZWY0NWM2MzI2NzI2MjY0NzAzZjcyYmFkZGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMjVkYjVlY2E0NmMxNjQ5MDI5NDQyM2NhMGMzNTY2MCI6IiI6IjZmMzdmMTVkNmM3ZWE4MTYyNzhhYjk3N2MyOWZhNDVlIjoiYmQ3NmZkNDMxY2VhNzJhMjg4ZTVkNzI4OWM2NTFjOTNiNWY0MjlhNTRmODUyNDkwMjFkNmI1OTVlYjljZTI2ZTE4OTE0YTM4MWE2YjAyOTlhY2MzNzI1NDMxYjM1MjY3MGYyMDZiNzMxYmU3MThhNTk4ZWMxMjNkY2UwYTJjNWFjMGFhNDY0MWIwOTJlNzA0ZGE5Zjk2N2I5MDljYTU1YzI3MjIyOTgzNjVhNTBkY2I1YjVlYzAzYTFkMGNiYjY3YjhkZTFlOGIwNmU3MjRhZjkxMTM3ZTBkOThlN2RjMWU4MjUzODg3ZGE0NTNjZGNiZDJlY2EwM2RlYWNhYWJiOCI6IiI6MTIwOiIwMDUxMDg1MWU5NjgyMjEzZDQxMjRkNTUxN2ViYWYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiM2M2MjU4YTcyNmFmZjk0YTdiY2M0MTY0NmM2ODE1NyI6IiI6IjdmNWIzMzE1YWZlNTE2N2E3ZTkwNjFhYjhiMDA1NTg4IjoiMGVmMzM4NDg2MmM3ZTAwYzI5MTJlN2ZkZTkxMzQ1ZGMzMTM0YjU0NDhlNjgzOGY0MTEzNWJhOTE5OWMwM2E3ZjIwODg4N2U0Njc1NjNiMzlhNmMxMzE2NTQwYzE0MDFlOGZmMTQ4Mzg2YzUwZmNmMTU3MjRhNjVkMzIxMGIxNzgzMmQ2M2NkY2U3NmJkMmI0NTgzNDgzMzJiMGI1NDIxMjJhNTdlMzgxNDc1YTU5NDQwZjI4MGRiNmUxZjRiOGQwYmFiZmQ0N2UzZGIxMWE5ZWY4OWNiYTVmMzM0ZjBlOGU3MmJlMzBhZmIyYjFlZjJkZjhlYjdmOGQzZGEwMzNjNCI6IiI6MTIwOiIxODA0ODkwMzljY2Y0YTg2YzVmNjM0OWZjMjIzNWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3M2NkMGExZTJiNmUxMmZiYWE3Y2JhY2U3N2Q1MTE5YyI6IiI6ImQ4OTc2ODE3NjRiY2MzYjYyYzI2YjRhYWY0MDdjZWZhIjoiOGM3NzNlMTRhOTA2YzdkZWFlMzYyZDFiZjNkN2U1NGM2YmU0Yzc0YzY5MWI3ZjJkMjQ4NjkzYjI2MTkyMTlmYmE2ZWI1YmM0NWY3N2FmMWNmN2MwNWQzZGQ0NjMxNThmODg0ZmU4MjI5MGQxNDUxMzU4ODlmZDg1MWI4NmVlMjgyYWEyMGJiZGY2YWY3OGM3ZjlkYjYxMjhiOGI5OWU3ZjliMjcwZmQyMjJlZmExOGY3YWNhNjkzMmExMDI0ZWZiNzIxMTNlODEyYjNmOWQyZDRjY2M3Yzg1ZjU4OThkZGFjY2NiZjFiNDQxY2Q3NDA5Nzc0MGRkOTIyYjU3YmFkZSI6IiI6MTEyOiJkODgxMWE4OTkwMTkxZjFlNWJkMTViZTg0OTk1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzFkZmRkYWZlMDc2ZDBjZWViYjBmMzdiYjI1YmMwYjEiOiIiOiIyOWM1NmRiMTBjZWE4MDJjMTlmYjYyMzAyMjdhYjJiZiI6IjI4N2I3M2NkYzYyY2UwNThjZGNlZmY4ZTlhZjdhZmMzMjE3MTZmNjlkYTllZWY2MGMyZGU5MzYzMGJhN2QwZWQwYTlkMzAzY2QxNTUyMWEyNjQ3MTU5Yjg0Nzg1OTNmM2RkM2Y1YjdjNTIwODFlNTE1NGU1NWNjYmZmMzcxZDdlNWRmYzJkMDVlMTRkNjY2YTAxZWMyY2M2MDI4YWFjYWRmZDc4ZGZjNzNiZjYzOWZjNGRmYTBhMGM0NjQxNTkwMmJiZGEyNDQzNjIwZmE1ZTBjZTRmY2NmMWI4NTkxZTNhNTQ4Zjk1NzU1MTAyYTg0MzgzMDA3NTNlYTVmNjFiOWYiOiIiOjExMjoiMzA5ZmVkYWQxZjNiODFlNTFkNjllNDE2MmU2ZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjNDA4N2NjZDI4Y2VkYTE0N2QyZmNmYzE4NTc5YjFlIjoiIjoiOWNiZGQ2N2M3OWFiNDZiY2JjZmE5NmZhMmMzZDdlODciOiIzNTA4OGQxOGRmZjBhOWQzOTI5Y2UwODc2NjhhYWUxZDM2NGIzN2E5NzEwMmYzZjQzZTExOTUwZTZlYzgyOTZkMGM5OWIwMGNkMWM1ZGZmNTNkM2EzODQ3NWU3ZGE3YjllZTRjZTBjNjM4OGE5NWQzZjhiMDM2NDE0ZTRiNzljZDAyYjU0NjhjYmIyNzdmOTMwZTdjOTI0MzJhNjA5ZGIxZWZmZTY1ZjYwZjExNzRiNThmNzEzZTE5OTQ5MWY5ZTBjMjliYTFmMmU0MzMwNjc3NWQxOGMxMTM2Mjc0YWY2MTQ4OGEyZjkzMmU5NWVjZWFkZmUzZmU0Yjg1NGZlODk5IjoiIjoxMTI6ImI3ZTgzMjA3ZWIzMTNiM2NlYjIzNjBiYzhkNGYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiYjY2NTg0YzhiMThmNDRjMTFmM2JkNzE4MGI5YjExZCI6IiI6IjM5YzgyYWVlMDNjZTA4NjJmZjk5Zjg4MTJjZGJkY2YwIjoiNDVlYzg1OGUwYTVjNmQ4MTE0NGJhODkzZTAwMDI4MThhNzBlOWExOTAwMmE1NDcxOTkzMDc3MjQxYjNmY2ZiNGZkOTg0ZjI0NTA4MDMyOTM4ODJkMWM3ZWNiNjU0ZTYxMTU3OGZlN2QyNThmOWEyY2EzYjVmMGMwZjBkMGVjNDgyOGJkZWI5Mjk5OTE0ZmYyYWM0Y2M5OTdjZjU0ZmE5MDhhZmRiM2VhZTlmOTFkNjdjNDYzN2UxZjllYjFlYWUyYjNmNDgyZGRkNTQ2NzY2OGJjMzY4Yjk2YmJiZmMzM2I5YWUyNjU4ZTRjYTQzZmNmNGI2NmJhMmEwNzlkNjVmMSI6IiI6MTA0OiIyNDMzMmZkMzVhODNiMWRmYjc1OTY5ODE5YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdiMmEyMzBjODk3OGQ0ZTM4ZmE1MDk2ZGRjMTlkNmY1IjoiIjoiY2QyNWU3NDRhNzhhZjg1OGU4MjVlMWZkMDcwMzI0ZWUiOiI2MjhiYWFjMzM2ODYyNTczY2VlMTU4Y2QzOTM1YzM0ZGYzMDU1ZGFkYzljMTY5NWU5ZWExODcyNGY2NDU3ZjBkMTgzM2FhYjMwYjg1YTk5ZTA3OTNlNTYwMDBkZTVkNmQ1Y2IyMzI3YTRjYzhiZWM0MGNkMTk4NDU5ZTdiOTM2MTc3MTNlNjNiYmQxNTM4MWEwNjZiYzQ0YTY5YzlhZDNkZmIxOTg0ZjhiMzNhOTQyOWVkYTMwNjhkM2FjNWZiYmFhZWUyYjk1MmE0ODZlNThkNjc0ZmZjYTY0MWQ5ZWMxZDEwMjYwMGFmMTE2NDFmZDVmZmY3MjUyMDRlNmMzNGE4IjoiIjoxMDQ6IjY4ZDQ5ZDQ5NWZmMDkyY2E4ZTVhMmMxNmNiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzNhYTU3NmUxZGZhZDJjOTkzYWZjYzA4OGJkOGQ2MmIiOiIiOiI3MTJlNjY1YTBhODNlOGVjYWQ5N2U5MmFmZWIzNTcwNiI6IjMxNGU1ZmVlNzc2ZTlkNWQyYTFmYjY0Y2ViNzhlMmM5YTU2MGEzNDcyNGUzMGRhODYwYjU1ODhmZTYzZDUwODM4Y2I0ODBmZjhhYzYxZDc5NThiNDcwYjFiZmQ0Yzg0Nzk5YWY2Y2I3NGM0YTMzMWIxOTgyMDRhMjUxZTczMWY3ZDc4NWI5NjZkYTU5NWI3NDVkMDE3Njk2MjM0OTJjMThiOWRkOGJkM2M3NTI0OWVmZmQyMDMyNjU4YzcxNTkwNmE3MWRiYmVkODQ3MDI3ZWE3NWQ2NDdmOTgwMzI5NmE0MTkwNmUwOTE1MjUwODU0NTk3YTE2MzAzNWE4ZDNmNDUiOiIiOjEwNDoiYTQxZjVjOWM3ZGUyNjk0Yzc1ODU2NDYwZDQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgzZjc2MzFjNGQ0YzQ2NmM5MjQ2Y2JjNDhlMmRkZTZmIjoiIjoiZjVkNmM4YzI1MmNiNjg3YTkzMWMzOGY1OGY3NDk0M2MiOiIxZjM1ZTk0YTM1ZDBmNDI0YmY2OTBhMTUwMzgxMjZhNDE1MDI1OTM2MTJlZmU2MzMzY2Y5NGVhMDU2NWNhNmFjZGVmYWU4ZDc0ZGFlNjJkZjk1ZTkyNjFjNjU5NmMzMzk3MjIwZTA0NGM1YjA4Y2YzOWNjY2IyNzMxNWQ5Yjc5NWRhMzIxMjA0OTEwMjc0YTkzNDM2YmMwNTczZmRiYTA0YWU2YmIxNGM2Y2E5NTVjZjhiOWUxOTNhMTJlMDU3OTZkN2Y0YjM5NzUwNzYxNGRhYmM0NTdmMWNkM2NlMTllNDM5YjZlNjI3MDNmMjE4OTM3MjkzOGIyOWI3YTU0MmI5IjoiIjo5NjoiYmI4NWRiZDg1OGFiN2I3NTJkYTdlNTNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ODRlMDIzYjJkNGM5NzgxNTFkMDVlZTcxNTMzYzU2YyI6IiI6ImYxNmQwNDFiOWYwZjQ1NGRiOTk4NWM4NTU4ZWY4YTYxIjoiOTFmNmUxMDhjMjk0NjQwYzdiYzY1ZDEwMmQzZDI1YTdiZmJiZTExNGFjZWM5YjQ5NTYzNjY4OWFmZDY1ZmZmNzk0ODM3OTQ2NjAyZWYwNGRlN2Q0MzA0YTgxODA5ZTBmN2RkYzQ1YzQ3NmMyOWZkNTI4NmZjZjRkZDFiYTc2ZWQzY2U4OGFiZGI1MWNkMjFlN2FhZWVjYjEzMjM4YWMwMzFkYTg3YWI5NmIyYTEzMTU3Mjc4YmY2NjlkMGVmYWUyODg1MmVjMzU4NWQ1MjBkNTQ1MDI4ODEzMjJmNzk3N2QwMzk1NGUxN2U3YzBjMGQ4Zjc2MmUzNGY1OWNhMTQxZSI6IiI6OTY6IjU5Njk5YzYzOWQ2N2JlNmE2ZDdjOTc4OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDNhMmVjNjZlNGE3MmNiMzU0MGU4N2Y0ZTY3YzdlNTgiOiIiOiIwN2E5Y2Y5ZjQ0YjA3ZTMwNjdkNjBlMjc2MzIyZTlmYiI6ImQ3ZTcyMmI4MmU4NjA3YTY0ZmJmZWVmYzc4ODcwMDkyOThmMDZhNjM3ZmU5MzcyNzdlM2E3NmU4YWRkYWVlYjQ2MGJhMDc0MzkxMmMwN2I1MDBiNGI1MWU5ZmVjMmI3ZWRkZjY5MWQxNTViYWY2ODlmNzU5NjgxNjBjMTlhODMzMGUyNTQyMjAxNDJhZTg0M2JmMDY4N2FhYmViNzRhYjYwNzIyN2IwYTc1MzllYzNjZmVhNzJhNWMzNWYyMzY2MjNhZjc4YmVmZmFlZTZlN2IxYWRjMjg5NTczMmZmZWRiM2Y4NTIwNzEwZjA0ZWI5YzJjZTliMmNhZTIxNWVkNWMiOiIiOjk2OiJmMjlhZWM3MjM2OGJmY2ZhOWFlODE1ZmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgzZjM4MmE5MDE0NjU0NGVmNDg3MWJkZTg5MWFlZDIyIjoiIjoiYzZmNjY0ZjVjY2ZkMWFhZWZiNjBmN2ZhM2I2NDIzMDIiOiI2NTZhMmYyMjFhMTMzOWQ4ZjVjMjYzOTNhMDhmYTMxODU5ZjYyNmVlYzlhNjhhZmI2ZWUzMGU1YjY4NTlkMWNiYjVlZDdkZWE2Y2JjNGE1ZDUzN2Q3MDIyN2QwNjA4MTg1ZGY3MWEwMjUyZmEzMTNiZTRkODA0NTY3YzE2MmI3NDM4MTRmOGI4MzA2MTU1OTMxZmRlY2YxMzgyMmE1MjQ4NjhiOTlhMjdmZDJmZjhmOThjMTZlZGNjZDY0NTIwZTJkY2UxYWQ2NDVmZDUyNTVjN2M0MzZkOWI4NzZmNTkyZWY0NjgzOTdiMDA4NTdiYTk0OGVkZjIxMjE1ZDYzZDk5IjoiIjo2NDoiMDlkZjc5ZGQ4YjQ3NmY2OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjQzMzRmMTBhNjJjMjZmZWY3OWQ5MDI0ZDRiYTdjNWYiOiIiOiI3Yjg1MjUxNTU0ZDRmMGZmODk5ODBjZjM1NjhjNWNhYSI6ImRhYjI4OTIyNjJhMTgzMmE0NzNjZDM0ODFhY2JkM2QxODIwZjE0MzYxYzI3NTUxNGVjNjkzYjQwZjIxNzBlYTVmZjgyYzRmN2U5NWE3Yzc4M2VhNTJjNDNhMGEzOTljMzdiMzEzMTlhMTIyZmQxYTcyMmU2NjMxZWZhMzNmOGJmYjZkYzE5Mzk4NjU4MGYwMzQ0ZDI4ODQyYTNhNGE1Y2E2ODgwNTUyNTU3ZjM5MTVhNjU1MDFmNmVlMGMxYjY4YTRjOTA0MGYwZmFjMzgxY2JjY2I2YTZlOWJjYTIzYjk5ZjJlZjFhYmJjYTcxYzY5YWEyN2FmMmRiMTc2YmYzN2QiOiIiOjY0OiIzZTg0MDY5MDBhNGMyOGJjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYzk4Y2E0OTcxYzNhNjMzM2MxOGI4OGFkZGYxMzM2OCI6IiI6IjdmNjE3ZjA4ZTgyNmEzYzYxODgyYzNlMDBjMjAzZDRiIjoiYWIxNTMxZmNlMGYyNzlkMjEwOTFjMzMzNGJkMjBhZmE1NWM3MTU1YmZjMjc1MzMwZWQ0NWY5MWNmYzk1Mzc3MWNiZGUyNTgyZjRiZTI3OTkxOGFjOGI5YWUwN2NiM2IyZWZkMTQyOTJlMDk0ODkxZDQ4NDFiZTMyOTY3OGFkNThkNzE0ZmM4Y2U0YmZmZTUxZjUzOWY0MjQwYzE0YmE4ODNiOTVjZGMzMmNmNGE5ZmQ2YmE0ZmZlYWZhMGQ2NzE4OTg5YzQ2NDgzYzk2Y2ZjYTNmZTkxMDAwZjlmOTIzZDdmOTY3MjVlOTY2ZGUwNjhiNWRhNjU1NDZmZTM4ZjcwZSI6IiI6NjQ6IjU4Y2M3NTZkM2JmOWI2ZjkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI0N2QzYWJlYjgwN2JkZTk1OWU2OGI0MGEzNzUwMDQ1IjoiIjoiM2Y1MzkwY2Q3OTIxZmNiNDJjNTlmMGRiMDVhOGE2MmYiOiI4MWFiZjM3NWRhNzE1N2ExYTU2MDY4ZDA5MTgwMzdmZWNiNzI5NmQ5YjE3NzFjNTRhZTYwMzBhYmRhNGI5ZDc2ZmVmZjgxOGRlODE3NDc5ODBiMmMxYjAwNWUzNmIzYmUzNmFmYmYxMDkyZWRlZjZmZDg3NWQyOTAzZDczNjEyYWRkZjIwNmE2YWU2NTg4NjQyMTA1OWM3MDk5MGE2ZWUzMzE5N2Y5MmJlZDY0OTkwMWZlZDYyZmRkMjBjMzBkODFiYWY2MDkwZjUwZDlmNTkyOTA1MjhlNThhMGI3NDEyYWNlMGEyOTMzNjlmMmI0YzhkNzJjMmZiMGUxYzQzMmY1IjoiIjozMjoiMzdiYjQ4NTciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYyMmJlOGNkM2M3NTdkZTAwZmJiN2FiNDU2M2NlMTRmIjoiIjoiMTZjNTNhODQzYjE1NDk3MTZkN2MwNmIxNDE4NjE4NjIiOiJhMTVkMTAxNTgwZDU0OWYyNDAxYmYwZjM2YmUwZjgzNzI0ODc1MjA1YzkxMDlkMmQ2OWQyNjA5Y2JmNjc1MDRiOTE4ZjA4NTkzMDMxOTJiNDA3NWY5NTI0NTRmM2U3MTUyZjg5OGY5OTdiMzZhZmMwMzU2NzEyZmMwOGRiMzM0MzA1NGIyMGU4OGFkMTI3NGUwMTliZjhmY2MzYzkyMWQzYmM4ZjljMWQxZDI0YWRjNjFmNjAzM2E4M2VmNDZhODQ3NjIzMDRmMTkwMzU1Mzc0OGIxM2IxNjQ3Yzk2ZWI4NzAyZWJiNDFjY2VhNGQ5Y2ZlYmNiMTc3YzQ1MzI3N2YyIjoiIjozMjoiMzU3Nzg1OTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhhNjYwYWEwMTkxZjk4MTYyNjEzODdkNWFlYjI2MmY2IjoiIjoiYzcyMGNiMzFlODQxNDgwZGE1YmE2NTZlOWI5M2YwNjYiOiJkOTc5YWZmZTM5NWJkMDQ4ZGIyNmQyNjkwOGExYzJhNDM1OTA1Mjk5MDg2Y2M1NWJiNjVlZjc4MmY1YWVkOTljNDE3NDNjM2FlMjUyZWEwODdmNTQ1M2JkYzYwNWFiZDc4NGIzMzdiNjA5NjA5NDYzNThkYTIyMThiMDc2ODI2NjU5YTFmYWZhNTkxMjRhMDBhMzQyNGZjZTBkMDBjMzhlZWE4NWNmYjNkMWUwMWJjYjA5ZDk4NzBkNWIzZmU3MjhmMzk0ZTBlNTEyZjVhYTg0OWQwNTUwZDQ1YTdjYzM4NGYxZTRjNmIyZTEzOGVmYmM4ZjU4NmI1YjVlZDA5MjEyIjoiIjozMjoiY2Y3OTQ0YjEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTBmOGNmZTlkNjRjNGY0YzA0NWQxMWI5N2MyZDkxOCI6ImRmZmYyNTBkMzgwZjM2Mzg4MDk2M2I0MmQ2OTEzYzFiYTExZThlZGY3YzRhYjhiNzZkNzljY2JhYWM2MjhmNTQ4ZWU1NDJmNDg3MjhhOWEyNjIwYTBkNjkzMzljODI5MWU4ZDM5ODQ0MGQ3NDBlMzEwOTA4Y2RlZTdjMjczY2M5MTI3NWNlNzI3MWJhMTJmNjkyMzc5OThiMDdiNzg5YjM5OTNhYWFjOGRjNGVjMTkxNDQzMmEzMGY1MTcyZjc5ZWEwNTM5YmQxZjcwYjM2ZDQzN2U1MTcwYmM2MzAzOWE1MjgwODE2YzA1ZTFlNDE3NjBiNThlMzU2OTZjZWJkNTUiOiJhZDRjMzYyN2E0OTRmYzYyODMxNmRjMDNmYWY4MWRiOCI6IiI6IjBkZTczZDk3MDJkOTM1N2M5ZTg2MTliNzk0NGU0MDczMmFjMmY0ZGQzZjFiNDJkOGQ3ZjM2YWNiMWYxNDk3OTkwZDBlYzNkNjI2MDgyY2RiMTM4NGVjNzJhNGMxZDk4OTU1YmEyYTNhYWU2ZDgxYjI0ZTljZTUzM2ViNWVkZTcyMTBhZTRhMDZkNDNmNzUwMTM4Yjg5MTRkNzU0ZDQzYmNlNDE2ZmVlNzk5Y2M0ZGQwMzk0OWFjZWRjMzRkZWY3ZDZiZGU2YmE0MWE0Y2YwM2QyMDk2ODlhM2FkMTgxZjFiNmRjZjc2Y2EyNWM4N2ViMWM3NDU5Y2M5Zjk1ZGRjNTciOjEyODoiNWY2YTM2MjBlNTlmZTg5NzcyODZmNTAyZDBkYTc1MTciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MTM3MWFjZDU1NTNmZGFkYzZhZjk2ZmRlZWU0YzY0ZCI6Ijk0MDgwNmZkNWRkY2FiOTkzN2I0YmE4NzVlNDZiYjRiN2U5Njg4ZDYxNmQxN2ZkMjQ2NDZmMWVmMTQ1NzgxOWY1NTg4N2Y1M2JkNzAwMzliYjgzYjRkMzQ2YWFiZTgwNTI4OGFiN2E1NzU2ODc0YmRjMmIzZDQ4OTQyMTdkM2EwMzZkYTVlOWUxNjJmYTJkOTgxOWNlYjU2MWVjZjgxN2VmYzk0OTNiOWE2MDc5NmY2ZGM1ZTcxN2FjOTliYzRiYTI5OGVlZTRmM2NkNTZiYmMwN2RkZTk3MGQ0ZjA3YmJmYTFmNWZlMThjMjlhMzkyN2FiZTExMzY5MDkxZGYyOGYiOiIzMjYyNTAxZWQyMzBiYzRmNWExOTBhYjA1MGUxYmNlZSI6IiI6ImZmZWIxOTA3YmRiZmVhODc3ODkwYTZlOTcyYTUzM2FlNjYxYTkwM2EyNTdiM2I5MTJjN2M3NjhjYzk4OGUwNWFmZDcxYTllNjExN2Q5MGQxZTFiNTRmNTVkZTliMTBjYmNlN2ExMDk0NTI1Njc0ODNjYzhkNmE2OGI5ZTU2ZGExMDgwMjYzMDU5MWZkZDhkNTVmOWUxNzJmMGY1OGE3ZTBjNTZhNzNhMWFlM2MzMDYyZjA5OTdiMzY0ZWIwODg1ZDQ4ZTAzOWIyYmExYmQxNGRiYjljNzRhNDFjYmQ0YjUyNTY0ZTQ3MGQxYTgwMzhkMTUyMDdhNzY1MGJkM2YxZDYiOjEyODoiMjI3ZDQyMmY4Nzk3YjU4YWE2YTE4OTY1OGI3NzBkYTkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlZjUyOTVlOWFlNzQ3MjllMjIyZGY2ZGFiMjUxMTU4ZCI6IjU5MzcyODQ4NDMyZjg2ZjU3NDA1MDAzOTFkMmU1ZDVmYmUxZjgwZWE4NzZhMGVjYjlhNWIyOThkOWVhN2NkYzI4NjIwYWViMmZkYTAxNTM0NWFlNDc2ZjI2NTM1MWIyYzZiNmZjZDY2YmM4YWFlNGRjOGE5NWMxMzUwY2RhMjA0ZGEzZDJkMmZjNWU2ZTE0MmRjNDQ4Mjk2ZDVkZjBjYzM0OWQxZWJhMmZhOThkMmY0Njg2NjI2MTYyNzRhMTQ3ZmJlMDc5Mjc0NDBhZmEzOTY3YWMwOWEwM2E4ZGUwYjAzZjMwMzZiZGU1ZTI3MmUzYzRjNWZmMTY5ZGQ3MzAyMzgiOiIxOTRkMDhmY2MzYzA4YWI5NmZhNzI0YzM4MTI3NGQzZiI6IiI6ImZkY2VlZmZkYzgzOTBiZGU2YjkxMDU0NGRiNjFkYjJmMzQ1ZWJhMDY2NGY3OGY2NWQ5NGI5MGUzZTJhNTI1MWJlMzc0YjNjNWQ4ODE0NjBjZmZmMzU0OWEwMWY4NGViOWQ1NDA4NzMwNmEyMGY1MTU2Y2Q1NTVlNDZiZDIxNzMzODZjOTBlYTQ3OTgzMzIwZmNiZjI0ZTA5YTA1ZjJlYzRiMjU3NzI4N2QwNWUwNTBiNTViMzAwMmI3NTNkZTQ5YWJlZjg5NWVlOTcwMTU4MTBjMDZkMDkyMTJiMGMwOWU0OTEwYzY0YWMzOTgxNzk1YTFlMzYwMTk3NzQwMzYwZmQiOjEyODoiZTk0NjAzZGJkOGFmOTlhYjFlMTRjNjAyYTM4YTAzMjgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNmRiMDM1ZjJkZGQ5ZjU2NzJjNmY2YWYxNTY4MzhkNyI6IjkyYzMxNTkzNjg0NzY0OTc1NmIwYjFiYjRhMzQ1M2U2ZTZkYTg2NmY4MDg4ZDk2ZGE0NDQxMmQ5ZjQ3YTIyZGRhMGNkODE3Mjg3YmE0MjE2M2JlNTlhNjlmNzM5NjMwNTkxMzlmYjNiYTQ0YmM1ZWJmZDk1YjY3NDI1NDZkZmI0ZmU5NTYwOGRjYTcxOTExZDEzNDdiZTY4MTc5ZDk5YzllYmY3ZWUxZDU2YjE3MTk1Zjg3OTRmM2E2NThkN2NhZDIzMTdlZDFkNGJjMjQ2Y2Q0NTMwZTE3MTQ3ZTllY2RmNDEwOTFhNDExYTk4YmI2MDQ3ZWVlOGI0ZjFlNGE5ZWYiOiIzNjg2ZDQ5YmI4YzdiZDE1NTQ2ZDQ1M2ZkZjMwZTFmMyI6IiI6IjFhYzk4ZTljY2ZlNjNhMmYxMmEwMTFlNTE0ZjQ0NmM0YzBlMjJkZDkzNjEzYjFiOWI4ZjU2ZDE0OGJlOGEyNGUzNjgyZGZjMWNkZTJiNjllNzJkMjAwYjUxNmE5OWU3NDY2ZGFlOGNjNjc4YzYxMTdkYzE0YjIzNjRjZDJiOTUyYWVkNTk3MjIwNTZkN2RhZTRjZmRiN2Q5YzRmNzE2YWVmMmFhOTFhNGYxNjFkMDFjOThkOTJkOTc0MjQ3YmI5NzJkZTA1NTdlMTc1MTc3Y2UzNDM2MWJlNDBjMzBhYjlhYzQ2MjQwMDE2ZTVhZDM1MGMzYjcyMzJjNTkyMGUwNTEiOjEyMDoiYjc0NDMxNjg4MGIwZGYzZDRmOTBjM2ZmYTQ0MTQ0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDVjNjM3NTcxOTdhMTMyY2JiMzMzNTFmZDJkODFhNDYiOiJlOTcwYjYyY2U1ZjA2YjE1Zjg0NDhhYTJhMDk1YzJiM2M4YWRmNTM1ZTExMGU3ZjM3NDQxMWVkNTFmYTE5ZjljNDkyNjA0NWY3OTZiN2NkOGE5NDJiNmExOTgxMWI3YWFlNTlmY2UzN2U1MGQ2Y2E1YTRhNTdiZmIwNDFhNWI1MWMxZWU4MmI1NGQwM2JlMjJkOWRjMmJiOWEyZTcwODUwM2I4NWUyNDc5YjA0MjVhMDMzYWU4MjViNGYyMzJjYTM3M2UyODBlM2NjOTdjZjBkNzkzOTdhODFmYjMwZDNiNDFjZGFhM2U3ODg0NzBjZGU4NjczNGUxMGE1OGIxZTNhIjoiYTY2OWE0ZDJmODQxZjlhMGI5ZWRlMWZiNjFmZWU5MTEiOiIiOiI1MjJiYTcyMjBkMGQ0YmVhN2FiOWNhNzRhZDhmYTk2YmEzMzdmN2FhNzQ5Y2QyNjE4NjQ5OTA4MWJhMzI1ZGY2ZDZiOTBhODFiZDFjN2FkZGEwY2QxY2EwNjU4OTRmMTRhMDc0ZWMxM2VmZjExN2IyYTAwMDQyMDM4YWVhNTU4NTAwNTZhNjNhZGYwNGY1OGZjZDcyNjkwODVmNWFkMWVmMTdjZTdiNmM0MDgwNDEyN2YxNDc0N2EyYWQ5M2VjMzFmYWRhODM2NjNhZjAyNWEzYjkwYzIwYTRhZTQxNWIxYzk2MDA5NGU1ZmQ1N2RiMGQ5M2E4MWVkY2NlNjRmNzJkIjoxMjA6IjdiZmNlM2M4ZTUxM2E4OWE1ZWUxNDgwZGI5NDQxZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYzODBkM2JmMGQ1NWExY2Q1NmI3ZTc4MzU5ZWI2YzY2IjoiYzBlOTc3ZTkxYzFjNTBlZTc4ZDRhNTZjNTI3YjJkMzFhMWExNGYyNjFhYTc3ZTUyZDkxMGY4ZjIzMGRlNDkwOGI1Y2M2OTQzZTI4YjhjNmU3YWM2MWVlYmUyNzBkY2ZkZTQ4ZDE0MGVjMTM3OTIzNzE5MzJlNTQ1YjZlZjRiNTJkMWRmZGY1NGM2MGZmODkyYjc0MDk1YTNmNGEyYjkwMDBhY2QyY2FjMDQ2NjZhMjMwNTM0M2I4YzA5Zjg5ZGNjMGMyNWJiZTJhMzliMTQ2MjQxMThkZjAyNTk2MmVkZWMzZGZjNThkMzZmY2FjNTMxYjI5MWVjNDViNTE1OWUyMiI6ImJhMzMwMGYzYTAxZTA3ZGRlMTcwODM0M2YwMTMwNGQ0IjoiIjoiNzUyZjA5YjUxODYxNmE5MWE4MDJjZjE4MTUzMmM3ZWM2NWI1NGM1OWMxYmFiMzg2MGYwYWQxOTk3MWE5ZTViYzg4NDM1MjRjNWZmYWM4MjcwNjdiNDYyZWJiMzI4ZTJlZmY0ZGQ5MzE3MjhkZTg4MjA1NTEyOTk5NzIwNGU3ODcxN2JlY2Q2NmUxZjZjOWU4YTI3M2M0MjUxODk2MzQzNjA0YWMyODllYjE4ODAyMDdhOGVhMDEyNjI2ZTE4ZTY5YWQ3NTczZWY3MzA3MWI4ZTJmYjIyYzc1YzdmYzdiZjIyMzgyZDU1YTVkNzA5YzE1ZTRlOGZmMTRlMmJmODFlNCI6MTIwOiJmYmY4ODE4YWVlNWM3MWViZmQxOWIwYmNkOTZhN2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0N2M4MDdjZDFjZjE4MTA0MGE0ZTNiMWQ5NDY1OWRiOCI6ImM0YTUyYzFmMWYwZDMyYzIxZmI4NWZiYTIxZDFiMzU4YjMzMmVmYTA2NmM3ODkzYzU2NmIyZTg1OWVmZGRlOTlmYzY3YmI2MTY3Y2RiMDQ4NWE4ZWQ1M2RkMTA2OGQ5MGJjOTkwZjM2MGIwNDQwMzk3OTFiZTYwNDhiYTBlZTRjZTEwOTBjOWZjZTYwMmFmNTlkNjkwNjlmNWJmZjhiNjIxOWFhYWVkNWE5YjFiZmM4YzViNzI1MGM1YTZjZmU4NjU4NmZhODA2NDEyNGQ1NTFkYTM4ZDQyOWExNzY5NmViMWE3YTAzNDFjMzYzZjAxMGVhZmQyNjY4M2VlY2RmODIiOiI5OTYzYTNmYjE1NmJlYWNkNmRkODhjMTVlODM5MjlkZiI6IiI6ImU3ODRhYjAwNmRlOGE1MmRlMWQwNGJjMmM2ODBkODQ3YzVkZWNkZDc3N2NiMjQ3NWFkNGFiMWRjNTI5ODgyZDllNTFjZmY1NDUxYjE0ZWE1ZmY5YTliYWI1YzU0NzRlOGEzMzFkNzk1NjRhY2RiMmFjODE1OWUwZjQ2ZTkwMTliZjgwNjUwYzQ4MWZkYWYxNjgwY2FkY2I4YzVkZTlmOTI0NzYwYjM3NmNlNTczNmNjNDk3MGNiODcxNWI1OTk5ZjU3NzQzNjI4M2E0YzIxNDY5MzA2ODQwYWYzNmQxZTA2OTYxNjE1N2QxYjljZTc1ZGUzYWRiMTNkMjAxY2RmMWIiOjExMjoiNTFlOGNlMjNmNDE1YTM5YmU1OTkxYTdhOTI1YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEwYjAzM2QxNGZlOTAyYWEwODkyYjBlODdmOTY2YzQxIjoiMWNjNzUxZDg5MGNkMTAyNDg2ZDgxYzYxOGMyM2ZhMzM1MDY3YWMzMjRlZjExZjdlZGRjOTM3ODUzZGI2ZTE2ZDBmNzM3Mjc3MjVhNWE1YmQ1ODA3MDU0MTZlY2Q5N2UzNjg0NjRlZDBhZWE5MjNmZmI3MWMyM2MzN2Y5Y2Y5YzhiZDgxY2RiZGMzZDBhYzM0YTg3NWRiMzE2N2VjMWQ1MTkwMDRkNGZhNGJiYTA0MWFmNjdhZjFlZDNkNGUwOWMzMmIzZThlMTBhYmQ5MWY0NjgzNmNlYzc0YjFmOWM1YjA2YzA1ZjNiMThjYWE3OGU3ZmYxODVkYjIxMmI1MmNlMCI6ImFkNGRlZTE4ZTZjMTk0MzNhZDUyMDIxMTY0ZjhhZmI3IjoiIjoiYTMwMDQ0NTgyZGFjZjU3MzMyYjA0NDAyZTk5MzgzMWRmMGE0YzEzNjRhODNjOWJjZTczNTM5NzlmYjQ0NGNkMWIzZmU3NDdlMmM5MzM0NTdmZjIxZjM5ZTk0M2EzOGE4NTQ1N2JmZTk5ZGMwOWFmODg2NzM0ZDZlNDIxOGZjNjUxMzgwNTVhZDhlYjVkMzA0NGY0ZWVkNjU4ZTMxMmI2MTY1MTk5ZTY4MmZmYTIyNjU1OGRjNGI1MTZmOGQ1MTlmMTQ5YmI1YTQwZDJiYjdkNTllY2U5ZTVmZDA1MzU4Yzg5ZTYzNTc5MmFkMjBjNzNjMTc0NzE5ZjliMjhjNzM1OCI6MTEyOiI2YTE4YTRmODgwY2U5ZTY3OTZlMTA4NmVkMDViIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzQwMzBjYTg0ZjEzMmJmYWJhZjY2MGUwMzZmNTYzNzciOiJhOGZlOThlMmI0ODgwZDEyYzk5YzlkNTE5M2IzNTM3YjNmYmM1MTY1Y2MxMzI3Mzk1MTc0ZDk4OWJlNTc0MWY4NjczMzIyNzFjZGM1MmRkYjI5NWRkYmViYTMzNjk4MDczMDU0YzZkMjQxNmZhZmFlYjBhNzZhYWQ4NzBhNmZiNjA5N2EyOWZiYTk5Zjg1OGQ0OTQxODU3MmM4ZTRkYzBkMDc0Y2E4YWY3NzI3Yzc3M2M4NjE3NDk1YjExOTVkNmIyNjg3YTJlMzdmYWQxMTZkZDcyMWI2MGJjYjU0NzFkNTQ4YzZkYWZlM2VjZGNmMGM5NjJlNDY1OWE2MWY0ZGYzIjoiOTc1ZGY5YzkzMmE0NmQ1NGQ2NzdhZjhhNmM5YzljYzMiOiIiOiI4NmIyMGZlY2ViYzRjZjg4YTZhMzgyZDY5MzExN2NkMmEzYzllYWI3NDdiZjVkZjVmMWQzNWUzNDFkMjA0ZDhmZWE2Njk0YjkyNTUyZTM0N2RhNjc2YmM4ZDMzNTM5ODRlOTY0NzJhNTA5ZjUyMDhjZTEwMGEyYTkyMzI0Nzg0MTc5NDdmODVmMTA5OTNjOWQ2OTM5YzgxMzhiZDYxNTFhZWY4ZTIwMzg1MzZlOGJhMWJhODQ0NDJlMjc1ODZjMWI2NDJmOTUwNTQ1NWM3MzhlOWZkMmMxYjI1MjdkMWVjZDNhMmY2ZWQ2ZTM4NjkwMDBlZjY4NDE3ZWM5OWZmN2EyIjoxMTI6IjM1MTY5MDkxMjRjMGMxZjljMzA0NTNjOTAwNTIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZTIxMGRlMzYzZjE3MGE3Y2NiMWI5Y2VjOGQzNDczNyI6Ijg5ODUzZmEwMDI5ODVhNDU2NTFmMmE3ZGIyYjQ1YjdlN2E3ZDMzY2U2YzQzOGVjNDUzM2M3ZmEyNTdlMWEzODQxMzAzNjlhNjgxODRhODA3ZmQwZDkyYTcwZDkxZDdkZGM1NmU1YzUxNzJjODcyMjU3MjMwZDdhZWI5MjkzZDc4NWIxYjg4MzVkY2RlNzUzNzk4Y2FmZjRhYmNkOGJiYzUzNzhjZDUwNWRjZjkwNGFhNjk5MDJlNGYzODY5OWJlOTcyMDk5YWRmZmM4Nzc4YmQ4NDRhOWEwM2U2YjU4YTcyMWE3MzMyNGQ5NTZmMjBmMmZmZDAwZDM0OTFmNzJmNDIiOiIzOWZlMjBiMDUxYmEyMTMxOWE3NDUzNDlkOTA4YzRiZiI6IiI6ImFjOWQ3NGY4ZjQwNWZkNDgyMjg3YTRhN2ZhMzU5Y2FjYTA5NWMwZjFiNDY3NDRmMTljM2MxMWUxM2IwYzYwNWI5ODU3YzhjYzVhMTc1NGI5NWJjYzY1ODQxNmY0NjNiZjg3NjRmMzczMjA1OTQxODg1OTQ4MjU5OTE2ZWFhYmQ5NjRmMmQ2YzJkNzg0ZjkyOGRjNWVlZmUzMzFmNmMwNGI0ODYyZDRjOGU5NjY1MzBkZTZiZjUzM2ExMDgxOGRlODUyZGUzYWY3ZjUyMWIxNjdjYjRlYjcxNDFiYThhZThhMTdiZTFlYjcxNGZkMjZhNDc0YmJiYmU4NzBhNjU5ZGMiOjEwNDoiN2EyZGZjODhhZDM0ZDg4OWY1ZTM0NGVlMGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YmJmZWRhMjNlYTY0NGZiMzc2NjZiMDVkYzQ3ZjU5MCI6ImE4NWVjNGMyYzE2MGRlZGE3ZTNkZTBhZTQ0OWVlYTZlZDFkMjRlMmM4ZjNkNTE1MWYyYWMwZmQ4NjlmNWE3NjM5ODE3MzNiNjhmNDZjNTE5N2Q3NmMyNmNjZTdkZGM4YWZjNmNkZjQ1MzZkNzcxY2YzZTljZWYwMDk4ZTI3MGM1ZTFmZjcyY2IwYWQ3Zjg0YWJmNDRiNzI2ZTBlYWUwNTJkMGMxNTUzYWZjNjdjNzI4OWE0Mzg1MWE0ZDA0YzI4NTZjYzQ2YjQwMzkzODA0MzY0NjVhM2IxOWRlYjU2ZTQxYjg1OWFlY2FmMjJiOTA1NzhhMjMyODhkNWY3ZDliMGUiOiI5ZDE1NGYzY2MyYzViMGJkZDc3ZTg2ZTM1MTIyMDk2MCI6IiI6ImRiZTU3NWVhMDRiNTg0MjllNjhjNzMzZDk5ZDdmYjNhNTdlNTYwNGQ2ZmMzYmFmMTdlMGM2Zjk4MWQ3OGMwNzAxNDQ3MDI4NjEzMTZmODkyMDIzNTE1ZjIwYjY5N2E4ZjNhNDBkODIxMTYyZGM5MjU1ZDQ3NzVlNzU3ODI4NWFjZjJjY2E2N2U5MDJjMDYwZjgwZWFhZTI5YjljMDExYjZjMTEwMzcxNDA5ZDkxNDc4MmUxZTQxMTVkYzU5NDM5YTI4MjM1MDczMzA4NTJmMTA0MzZiMTIxNTM4ZjIyYTNiNjE5MDc1NjEwZjFkYTg3YjYwMzUxMzhkNzhjNzVhNzkiOjEwNDoiODY5ODc2M2MxMjFiZjNjMjI2MmJhODdhNDAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTE0MDdmNjY2ZjJhYTE0MmVkNGVmNTBlYjJhNGY2NCI6IjU4NWZjMWU4NjgwOTI0NzgyNmY4NzQyNDc0MWY2Y2UyY2U3YzcyMjhmYjk2MDgwM2JlNjQzYWNkMjgzMzJiMjAzNjcxNWUyYjYzOWZlM2Y4ZGU3ZTQzZTg4YmQ4ZTY1YTZlMjI1OTM5MTM2MGFhZjUzNGFlNzU2NmNiZDJiMzk2MWM4NzRkMDg2MzZmY2ExMTdkNDEyM2IzMDYzOTMxZDdhMTYxZDAwMjIwMDE0MzM5YWU5ZjQ0N2YzMWI4YTJkN2Q1NDY2ZmIxZmYyNTA4Mzk3YjVmYTcxZjliNGNkMjc4YzU0MTQ0MmEwNTJhZTQzNjc4ODlkZWFlZDQwOTUxMjciOiIxMjI1YTI2NjJkNjY1MmUzZDRlOWM1NTU2YmM1NGFmNCI6IiI6IjhiYzEzY2MxY2I1MmZiZDE1MzkwY2I1NjYzY2UzMTExYzNmYjk0M2Y4ZWQzYzRmMDdiN2FlYjcyMzY0OWZjY2I5MDg5NTk5OWVjNWRiZGI2OTcxMmQ4ZTM0YWUzZjMyNWZlZmE0OWVjYzdjMDc0ZGU4YmIyZWEwMWZhMDU1NGQ3YWRiZjQ5NDk4ZjJmNmU3OGFhMGNkMjQ2MjBiYWIwZjExYmY5YjJjNzNhZDBlZmY3ODBlYjZjMDNlZTljNDUzODk1MmFmNzU0YzU2NmFiYTdjNzE3ZDFlZTZhYzJmNWZmZTIxZGFiOWFmZDY0OWNkNjUzMTNlZTY4NjU5NmZlZjAiOjEwNDoiOWExZjExMzdmOWVkMjE3ODE1NTUxNjU3YmYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVlY2VhMWRhNzZkNmRmOTBmZDBkNDA3N2VmNjMxYjE3IjoiZDg3ZTlhMGM2YTk3OTZkNjBlZDc4OTI0ZjdhOGM0MDhkNWI5ZmFiMDNmYzc2NzkwZTc0MDI5ZjEzMzU4ZmNhZTAwMzViZDk3MWE0MDA4NDVmNTA4YzJjMmNkYzM5NDliZTQ5ODE5M2FmY2NhNmQ3NWY4ZDIxNTIxYWM2NzNiZDQxYTkzNmExMzNmYjVlZDYxMDk4ZjNjYjg5ZGY1MjM0YzVjYTVhZDNkYmJlNDg4MjQzZDI4MjQxMjg0NGRmMGQ4MTZjNDMwZGUzMjgwYWIwNjgwYTJhNTYyOWRjZTUzZjk0ZThlYjYwYjc5MGY0MzhhNzBmYWZiOGEzZWQ3OGExYiI6IjdkN2FlMmVkMWNmYzk3MmY2MDEyMmRlYzc5ZmYwNmZjIjoiIjoiMWViMTlkYTcxODU3ODU0NDIwYzBiMTcxZjFmMDcxNDk3MmZlNzA5MGRiMTI1ZDUwOWFmZjZkOTJlNTE5MjM1MzE4N2YwOTA2ZTNlODE4N2Y3MzcwOWQxYTYwZTA3NGFmMDFlODNkMTMwNmQ1ODJhODJlZGJkYmViYzc5N2E3MzNkNzJlMmQ0MjA4Njc1ZWY5OGVhNGVhYWRkYWUyMjkyZTMzNmZjZDNmYTg1Y2RjNTc3ZjRiOGQzZjMyNGYwYzVjZjM5MTk3MDEyMDhkNjk3OGY4MzQ2NmEwMmFlNmNjMzY4ZjU3ZTE4YjllZTE2ZTA0Y2Y2MDI0YjBjN2ZiYWQzMyI6OTY6ImY3NGIzNjM1ZWMzZDc1NWRjNmRlZmJkMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmQ2ZGU1MWMzMDY5MmQ3ODYzNDgyY2JiYWE1Y2NiYzMiOiI5ZjI0MmMyMzBhZTQ0YWQ5MWNiMGY0ZmUyNTk2ODQ4ODM5NjhmM2NhNGY1N2EzZTBjYzRiMDNhYjA2M2E0ZWFjZGY2M2Y5ZTc5MDBhOTgwNzNlMzQ1ZDFiNDk3Yjk4NTg4N2UxZmZiNWZlN2Q4OGNlZmE1N2RkNDEwNzZmMmRhNTVjZTdhYjA4OTliZGM1Nzk5YjIzNzczZjhmN2E0ZGZiZjE4NjFjZjRkZTM3NzI4MWZhZTk3NjNkZDRlYThkYzdjMGQ2MzJiODc0Yzg2YWM4ZTRjOTAzMzllYzNmMTRjYzUxYmY5MjQxNjYwYWI4Mjg2MDVjYzYwMjk4NGEwZjEwIjoiYzZjMGZhM2RhOTUyNTVhZjVmMTU3MDYyNzRmYTU0ZWUiOiIiOiI1NWU3NWRhYTNkZjNiMTNhMzNmNzg0ZDVhZGFjYjJmZjY4NjFjYWNiMjk3ZDVlYWE2MTY5Mzk4NWI2YTBmODJlOWUwYjNhMjhkMTA2NDgxOTFjNmU2MmQ2MjYwZDhhOGJiNDcxZTZiMzdhY2EwMGRhZmRiMmZiMTc0NTQ2NjBmOTBjMjg0OWE5YWQxNzMzZDdiYzIyN2Q5NjJiM2NkODZhYjMyZDViMDMxZWIyZTcxN2U0NTUxY2IyM2Q0NDhlMDZiYWM3YjJhNGNhZGIwODg2ZmRlNDcyZDQ1ZGUzOWVjYTJkZjQ3NGJhNzllYjU4NTA0MzE4MjA3MzI1YzgxODEzIjo5NjoiOGViOTA4NmE1M2M0MWM2YTY3YmFkNDkwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NmI3ZjIzMDdlOWNmOTIyMWM4ZjNmZjcxMDUzMjdmOSI6ImJjMDc2YmZkMWZmN2E5ZmIwNDNhMzcxZTVhZjcxMTJiYjBjOWM0NDJiZTQ0Y2E2NDg1Njc5MzdiY2MwOTFjMTI3ZjAyYWI3MGI4MWNlNTFiMmY3YTM4OTU0ZGNhM2Q5NGIzNzE2YzYxMTRmMGJhMzQ5ZDZmODdmNWVmZDg0NTA2ZWQyODlkZmU4YTEyNzdhNWQxODIxYzU2ZjlmMjk3Y2I2NDdjZGYzNmQzMDhlNmFkNDFjNTVkNjhhNWJhYWE1MjBkMTFkMThmNWRkZWEwNjFjNGIxYjFlYzE2MmIyZDViY2Y3Yzc3MTYyMzVkZDMxZWRhM2RjMzA5NGNiMTViMjYiOiIzY2RhZjc5MzJhOTUzOTk5YTZjZTVjM2NiZDBkZjdlOCI6IiI6Ijg4YzcwZDNjZjU4MTdmOWZhNjY5YWFkZjczMWMwZWIwM2MzZDhlNTUyZjJkYzc2MzAwMWFjOTQ4MzczNTNhYjc1YjBjNjU1M2JiOGJhMmY4M2VmMDU1NmY3M2RhZTc4Zjc2YmMyMmRlOWE5MTY3ZDdiZThlMzFkYTZlNjhiMGYwYmRmNTU2NjA1OTkwMTcyNmI2ZjI4OTBhYzg3NDVlZDE0Zjg4OThhOTM3ZTdkM2U0NDU0MjQ2MTg1MTI0ZjY1Y2ViZDI3OGY4YzExZmIwZGUyMmRhNzI0OGYzM2VmNmJiODJjYjFjMDgyNTk5NzA3MTRkZTM5ZWE0MTE0Zjg1YWYiOjk2OiI2MDA2ZmU0OGY3NGYzMGJjNDY3YzdjNTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImJhYzgzMDQ0ZjlkOGZlZmNkMjQ3NjY2NDQzMTdjNTMzIjoiYTcyZGFiYTlkZTk2YmMwM2I1Y2Q3NDQ5YzJlOTdjODU4Mzg1NDc1MTI3Yjk2MTRlMzdjMTk3MjI1ZDU3ODk1MzViNjlmOTEyMzk5M2M4OWE0ODE1YzFiNDM5M2JmZTIzNzU0ZGRjNmMwMWZjNDRjZDIwMDliNWY4ODY5ODhkYzcwYThjZWJiMTI2NjRmYTRhNjkyZGI4OWFjYjkxZGU2YTllZGE0ODU0MmIwNDQ1OTE0OWY1OTUzN2U3MDNlM2U4OWY2ZDY4M2ViYjc5N2ZjZTM4NzRjODE5ZDA4Njc2ZDkyNmJmMmRhMmY4M2EyMjQ0OWI4OWUyMDRiNWVjZTU4YSI6IjEzMDdjZDBlNmY5YmE1NTcwZTk3ODFmY2E5YTRmNTc3IjoiIjoiNDc5Y2RiNWY2NWI5YmFmZjUyYTk2Yzc1NzkwZTNiN2UyMzkxMjVmOTQ1MjUwNjhjZDFkNzNhMWI4NDc1MDgwZjMzNDUxZWM4Mzc4OWQ3MTg5ZjVhZDZhOTEzMGU3YWE0ZGYxMGQ3MWVjYWJiNWNjZDk4MGQ4NGQwZmJmYjM0MjUwNmVkY2Y3Mjk4Y2NiMzEwYzBlMjk3ZGQ0NDNkZWQ3N2NmMWQ5NmZjNDkwNTU1MzQ0MzlmMWFmNTgzMjE3YTVkZTM2ZTRkZjAzNmEzYjY0MGQwMjEyNjU4Mzk5YjYyOTE5MzA4MGQzOGFmZjBkNGU4YWVjZDZjOGQ4ZjQ4YjQ0ZiI6NjQ6ImNhMTkyZjgxNTNhYTVmYjciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYyNzc3NmIyMGNlOWJiMDcwYTg4ZjFhMTNkNDg0NTUwIjoiMWRhNGEyNGZiMTI1MzhhNzI0ZjYyYjI3NzQxMGQ1MGU5MThiZDYyMjRkNGE2MWRmNmZiNzczNDMwMDY0MzE5OGRlYmVhNzE2ODZlMDE4YmNkODQ1NWMyMDQxMjY1ZDExZjdmNWRjZWMwOGMzMWZjOTQ3ODQ0MDQ0MjNiY2YxZGM4ZTYxNTIyN2QyYjA4NDBiZTEyM2ExZWZiODIwMWFhYTE1MjU0YTE0YTJkNzZhNmRkZjUzNjcwMWNiMzM3OWQzYzZiMWIwZDY4OWU1ODk2MTg2Yzg4ZDRhMmM1M2E3MGJiNDIyZWNjOGUwYTVjM2I5ZjNkODljZTQwNjc2ZTRmOSI6IjU3ZjNmOTM4OGVhMWUyYzFjNzNmNjBiN2Q3MTFmNmVhIjoiIjoiZjhhMDZlZWE1MjhkYWQxMmIxMWVhZDUxNzYzYWE2OGNhMDYyZjlmNmMxYzFmNzQwZmI5MTA5NzRmN2FkOWQyYWM4N2MxNmZiNzRkMDdjM2JkM2I0NWYyZTI2YWY0MTdlMDA0MTZiZGZlZTdlZDBiNjkyNzRlYWQ3MGE1MjIwMWMxZmMwNTkzNzQzODg1NWY1NTY0ZWMzZTgyNGRhYTBjNTlkYTFhYTZmNmNiOGE0NGFiNWY3M2Q2NjFiMjE5NzY2YjgwNjU2Y2QzZmYxZTJkNjkwOWM2Y2U5MWZiMTQ5MzFhZjg1ODBlODU5ZTlkNzY0MjY3OGMxYzM1ZDk0MzVkNCI6NjQ6IjA1YjQzMjgyNmRkOWIwNDQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg5NTRlMmMwYTdlYTgwZmUzYzhlNzUyNDZmNzViZGJkIjoiZDc3ZTExYTgzN2VmZjk1Yzc3ZGQ1NmU5Y2Q5N2YwZmZjZWUwYWRjY2E0YTIyMDNkMjNjZTc0YzgwNGE3NWNlZjFiZGQ2OWIxNjIyODQ3MmEyMzk1MTE4ZGZjZTYzNmI4OTE2MzcyZDZhMjQxMDZmOWExNjgwNTVjNmQ0YjQ0MjY0Njc0Y2UzOTA1YjNiMzBmNTEwOGViZjkzOWYzZmE4ZjU1YzEyZTAwMWI0NTdiNzM2NjlhY2QyM2MxZGNhYmVhMDVhYWJhMzRlMmQwZjY2YTRkMWM5MTYyNzY0MjI4ZWJjNGQzOTc0ZmRiMzhiMWE2MWEyMDc3ODhjNWRlYjg3OCI6IjJiNWY5NDIwYjNjNTgzNDAzZDkyZDc2YTJkZDY4MWMzIjoiIjoiMzViOGEwNGQ2NTU3NDI2ZGVmOTkxNWViNzk4MzEyYTc1NzJlMDQwYTY1OTkwY2UxNWE4YTZlNWFjZDZiNDE5YzNmYTI2ODI4YjZlZmQyZjFmNTBmOTFmNjcyZmVkMGZlYWEwOWE2Y2E2YjQ4NDRmYWM1ZDNkYjU3MWRiOGJiY2UyNTAwODZiOGM4OWFhNmZhMDdiZGNhOGRkMGUxZmU3NmUwZjVhODIxMTQ1YmFmYTExZjNhOWIwYjAwM2FkMDlkZTczYWQ3MTg0OWFjNThmN2ZkNTA4NTFhYTBmYmJlZDE3ZDIyMmEwYTU2MDdmOWY3NWRkM2IwZDNmYTQ1YTEzNSI6NjQ6Ijk2NTExYWRjMDk3ODM4ZTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdkMGY5MTA5ZGQ4NDZjNDc1MjdhNDI5Yjk4ZDUzMzAxIjoiNTA2ZWZjMjljMGYwMjkxMGNjOWY1YjJlNjc3YmI4MTFlMzY2YjllNDkxMGMwMGIzNmU0OGU1ZDViNDI3MThmM2I2ZDFhMDhhMmRlOWM2ZDRjZTQ0ZmNlMDBmYjdlMTBjZjg5Mzk2YTg4YmRiMzhkY2IwZGJhNjk0NDkxOTVlMTliNzJmZjk4OTY2NmIzNjZmMDMxNjZkZDQ3Y2Y0YzdiZjcyZGJhMzA0OGZhMzQzMjliYTg2YmJiZjMyOTM0YTA5OTJkNzJjNDYzZmZmZWU5NDY1MzM3OWQyM2I4YmI0ZGZmMDNmZDg2Y2ZjOTcxYTJmN2NkYjkwNTg5YmJiY2IyOCI6ImY1OGE1YmI3N2Y0NDg4ZWU2MGRkODVjYTY2ZmFkNTlhIjoiIjoiMmUyNzYwYzY0OWYxN2MxYjRiYTkyYjFmYzliNzhkMTQ5YTlmYzgzMWYwZDBmZTQxMjVjYmZjNzBkNTIwNDdmMzJhN2YyNWM3MTY1MzNkMTk5YWY3N2VkMDVlMjU5Y2MzMWQ1NTExODdkYmMyZTdkOWU4NTNkNWY2NWFiOGE0ODg0MGYyMjM5MTA3MmNiZTI5ZTg1MjljZDExNzQwZjI3ZDExNTEzYzY4YWQ0MWY0YWNjNmZiMzYzNDI4OTMwZmUzZDdjMGU2OTgzODc1OTQxNTZlNmNjNzg5ZDQzMjgxN2M3ODg0ODBmM2IzMTMyNmZhNWYwMzRlNTFkMmFmOGM0NCI6MzI6IjZjZWQ3YWFjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMzRjODA1YjVlODNiNTlhZDlkNmE2NWFkZTM5NDBhOSI6ImVmYmVjMDlmODE4OTQwNGYzZGJlNTY5ZDNiYWI5YjhiZmFiZGU0MTlmYzgwYWJiM2IyMWEwN2E1ZmU0MjMyNmQyM2QwMjI0MDY5ODFhYmQ1NThlOTRmNGRlYmYzOGYyYzM0YzNjMzE1Y2IxYWUxZDVmMmQ0OGVhZTEzMzViNTBhZjlkZDA1YjYwYWVlNzI0ZWRiN2Q0ZTEyNzAzZDVlYzg4NzNjNTVlM2EzZDZkOGQ1ZTRkYWRkZDUyNDBmYTNlYzJkMWYzMjQ0MmNlMzJjZGU2NmRmYWM3N2VkMjEzMjA3ZGM0ODM4Y2E5NzgyYmViOWE5OGQ2ZGM1MjgzODgzMWIiOiJiMGMxOTQ0OGI5ZjJhODE4ZmQyMWJhNjQ4OWMzNGZiMCI6IiI6ImE0NWJhNTgzNjAxMWZjNjU4ODJiYThiMWQ2YmY3YjA4YjE3ZjI2YjljZDk3MWVlY2U4NmZiYjZhYWM1Y2RmZDQyNzkwYTdjNzM5MDA5OWIxMGRlZTk4Y2I4ZTRiZDhiM2NjYjNjYTVkMGI5ZDAyZjc1OTQzMWRlNjQwYWQ3ZjVkZmZiOTE5YThhYWE3NDY5NWY5NGRmOGVmZjRjN2NiMjQyZDY0M2M1NWQ2ZjljODMyMzAwNmYzYmU1OTVhYThjZGJmYjBkOTI2MGFkMjQ3M2IyNDRjYTY1YTVkZjUzZDJlZGQ2OWY0N2RmNjA4ZTIyYTY4YjA1NjIzMTUwYjU2NjUiOjMyOiI0M2UyMGU5NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjNiYWQ4OWU3OTY5MWFlNzJmNTM5NjRiOTI4YTA5ZjMiOiIwMTkxM2U0ZWYxMDIyNmQ4MGM1MDI2YmE5MjQzZmE0MWVkYWY1ZjVjMjMyZDE3YzAzNGRiNGMwYzgzNjlmNDhkODlhMWQ1OGIzYjJkZGE0OTY1MDZjMzA0NTczNjViZGQ3NjcxMDE3M2E5NzAyMmQ2NDcyNzZhNGE4YWM3M2YwZTllMjExY2ZkN2Q2NDg0OTQwOWVmNjFjY2U2MTg2NzVlYWZmZTg4YjNmMTQ0OTZlNWViMDEzYzBmOGExMjJkYmYxNmYyYzY3NWVkZjdmODEzYWJlOWM1NjEwMWU1NzBlMjA4ZTY1MWZkOTU2ZTcxMGRjMDlmMTNlYmQyMmI4MWFiIjoiYWFiZjc3MTE2YTc1MDQ2ZTdlY2M1MWE0NjhhYTIxZmUiOiIiOiJmNzQ1MzY3MDYwNGZmNjI4N2ViZGFhMzU3MDVjZjc1NTM0MTA0NTJmZGIxMTI5YTdmY2FlOTI1NjVhNDIxN2IwZDI5MjdkYTIxZjNkMWIyYmQ1YWU5YjdkNGRjYzE2OThmYjk3ZmM4YjY2MjJkZGMwNDI5OWZkZWJhYmE3ZjcwOTA5MTc3NzZiODZiMmFmNDAzMWZlMDRmYTFiNjI5ODdmYTllYzc4ZmJiYzJiYWRjM2EzMTQ0OWJlM2E4NThhYzdmMjc3ZDMzMWI3N2MwZTliMTIyNDBiZDk4NDg4YTEzMWRiZDI3NWI2YTBjZTk4MzBmZjczMDFkNTE5MjFiYTg1IjozMjoiMTU4NTI2OTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4Mzk2NjRiYjZjMzUyZTY0NzE0MjU0ZTRkNTkwZmIyOCI6Ijc1MmM3ZTg3NzY2M2QxMGY5MGU1Yzk2Y2NlMjY4NmY0YWE4NDZhMTIyNzJhMGFiYTM5OWU4NjBmMjgzODgyN2M3YzcxODM2NWU3MDQwODRmYmUxZTY4YWRiMjdhZDE4ZTk5M2M4MDBkYTJlMDViY2FmNDRiNjUxOTQ0YmRlNzY2ZTdiM2FjMjJmMDY4YjUyNWRkMGI4MGI0OTBiMzQ5OGQ3YjcxOTlmNjBmYWY2OWZlZTMzODA4N2Y3YTc1MmZiNTIxNDcwMzRkZTg5MjJhM2VkNzNiNTEyZDljNzQxZjdiYWMxMjA2ZTliMDg3MWE5NzAyNzFmNTA2ODgwMzhhYjciOiI1NDgyZGI3MWQ4NTAzOTA3NmE1NDFhYWJhMjg3ZTdmNyI6IjRkNzVhMTBmZjI5NDE0Yzc0ZDk0NWRhMDQ2ZWQ0NWRjMDI3ODNkYTI4YzFlZTU4YjU5Y2JjNmY5NTNkZDA5Nzg4YjZkNTEzZjczNjZiZTUyM2U2YzJkODc3YzM2Nzk1OTQyNjkwY2U5NTQzMDUwZjdhYjZmNmY2NDdkMjYyMzYwOTk0ZjdmODkyZTlmNTk5NDFhOGQ0NDA2MTlmZGE4YWEyMDM1MGJlMTRjMTNkNzkyNGMwNDUxYzE0ODlkYTlhMGNhZmQ3NTljMzc5ODc3NjI0NTE3MGFkODhkYmNlYjNjYWNkZTZiYTEyMmI2NTY2MDFjY2I3MjZlOTlkNTQxMTUiOiJjN2VlMWMzMmY4YmMwMTgxYjUzY2U1N2YxMTZlODYzNDgxZGI2ZjIxNjY2YmEzZmExOWJkOTljZTgzZWVlMmQ1NzMzODhhMDQ1OWRmZWRlOTJlNzAxOTgyYTljYzkzZDY5N2YzMTMwNjJkYmVhOTg2NjUyNmYxZDcyMGExMjhhYjk3NDUyYTM1ZjQ1ODYzNzExNmY3ZDkyOTRmZmM3NjA3OTUzOTA2MWRmZWZmOTY0MmEwNDlkYjUzZDg5ZjI0ODBhNmQ3NGEwNWZmMjVkNDZkNzA0OGNjMTZkNDNmNzg4OGI1YWZmOTk1N2I1ZGM4Mjg5NzNhZmNjZmY2M2JkNDJhIjoxMjg6IjYzYzhhYTczMWE2MDA3NjcyNWNkNWY5OTczZWVhZGI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWYyYWYxYjE0Y2E5NTk4YzM0MTc4NTE4OWFjNmUwODUiOiI3OTBiYzk3NTg2NWY0NGUzYTE1MzRlOTc4ZTkwYjA2NDUzMDMyMWEyMjgwYTkxNzJkYzdmMzQ1MTc3M2IwMWQ0YTU2YzE4NTdhZDA0NzQzNTBiOTQ1ZTRmMzRjZDY3N2MyMmNhODk0NDVhNTY0YjQ3YTg1MjZkMzFkMTgxNjBjMzVkMmJlMWU4OTQyOGMzNTkzYjUzODc3Y2VhMGQ4OGQ4NWIyYTdlZDA1NTJlMzlhMGU5NmUzNWFlMDM4NGE1ZDc4NjgyNDMwNDVkY2JmYzI0NWEzZWIzZmY5OWY0ZGQ4NmMwYTMxNGY2OGQxOTcxZTc3M2NhZjljMTY4YjBhYTBiIjoiYmJmMjMzMDdhZDI3MTgzOThiMjc5MWMxNmY2OWNjNDUiOiIyNmIxNjA2OTVkZTJiYTQwYWZjYTZiZDkzZjFjMjg5NWY5MmNhOTEwODg0N2E4YWI3MWFkMzVjYWM5ZjljOWY1MzdlZjE5NmM1ZDQxYjEwZTM3NzdjOWEwMmFkM2M3M2NkMjk5YTg1ZjYwZTVkMDI3OTRjM2JlMjY0M2MzZTYzZjEwNWI5NGQzMmNiNGUzZWIxMzFkM2Y0ODdmYTVkMWRlMWE0YWQ4MGNhZDc0MjcwNGVkNWMxOWE3Y2Y0ZTU1NTMxZmEwZjRlNDBhNGUzODA4ZmI0ODc1YjRiNWZlYWY1NzZjNDZhMDMwMTM2MjVmMDQzMzE4MDYxNDllMGY2MDU3IjoiNTJjMzczYTE1ZTFiZjg2ZWRmYjQyNDIwNDlmMTg2MDI5YjQ1OGUxNTZkYTUwMGNlN2E4ZmM3YTVmZDhhNTI2MTkxYWMzM2U2YjRiNzliMzZmZGExNjA1NzBlMmI2N2QwNDAyYTA5YjAzZjQ2YzliMTczMTdhMDRhNGI5ZmJlMmRkY2ZjMTI4YmQwZTAxYjBiZTNmZTIzZTUxYjY5YzI4YmNmODcyNWI4ZTQyMDhhZWZiMWNmMzRmZTkxYTJiYjZkNWJlZjdiOTM2YmVjNjI0YThmMzhjOWNkNGFjNTFhMDE4NzYzNTEzOGQ1NWRhMWZiMTc5MWFkZmJmODQ1OWQzZiI6MTI4OiJkYjNiYmRmNTU2YzljMWJlOWI3NTBhMjA4ZmU1NWMzNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAyOTgwZGZmMjA1YmZhNWIxODAzNzQ4NjYxOGUxZmJkIjoiZjAzN2FlMjgxZTQ1YzUwYzlmYTg3NWYwZWM5ZWI0MzI1MWQzYWUxYjZhY2RlMjdjYjVlZGRhN2E0ZTM4NGY1MDMwMWE2OGJiNmY0Y2FmNDI2YWRiMzE0NTdjNWVlYWE3ODllZGM4NGZkOTAyY2I4MmUwMGRjY2JlYmUyNzJkOTBjZjY5MGNhODJlZTc0ODg4NWYwMmRhZjM3Nzk3MGU5ODVkNTU5OTRmYTY2OGZjNWUzZTA2NzYzZTY4MjkwNTlmZTBjM2ViNjcwMzNiM2Y1MjIzY2Q0YmI2NTQ0ODRjNTczNzBkMmI4NTZkNzExN2UzMmVhZDNkMTc5MDY0MzE1YiI6IjI3MzU0ZTY4YTAwNGIyNTVhMzgwZDg0ODBkYzliMTllIjoiMzdlZWQ4NjIwMTM2ODQyOTM4ZWUzYzNjMDgzMTFkMTI5OGQzZmQzZjA0NTZjMDU2ZTA4NTFhNzVkODQ0ZmU2YzYxYWViMjE5MWMwMjRmZmNlMzg2ODZjMDlhYjQ1NmYwZWMyNmJkNzZmOTM1ZDc0NzAwMmFmOWI0NzY0ODUwMjcxMzMwMWQ1NjMyYzJlMGQ1OTliOTVkNTU0M2FjMTIwNjE3MGVlNmM3YjM2NTcyOWM0ZDA0ZWEwNDJmMDQzNjM4NTdmOWI4ZWEzNGU1NGRmODllOThmZWYwZGYzZTY3ZWFmMjQxZWQ3ZWJiYzdkMDI5MzE5MzRjMTRiYjdhNzFhZCI6ImY4MDkwZDBhOTZmYzk5YWNiOGY4MmJiYmU1ODM0M2ZlMjI3ZDNmNDNmY2VlY2U1NDkyMDM2YjUxYWMyZmE2ZGI0YmY4Yzk4YmYyOGI0MDEzMmIxYWI0NjUxN2Q0ODhiMTQ3ZTEyY2ViNWU2YjI2OWJiNDc2YTY0OGQ4YTExMzNkNWU5N2Q0ZjRmYmRmYTM4NjZhMDQ5NDg4NTFjZmI2NjRmMzQzMmRlMjIzZjMzMzMyNDhhMWFmZmE2NzEwOTY3MDhjZTZlMmM5YjRmOGU3OWQ0NGM1MDRmZjNjZDc0ZThkZmZkNGRkZmY0OTBiY2JhM2FiZmZiYWRlMGE0ZTIwOWQiOjEyODoiYjU3NjJiNDEyNDFjYmVlNDU1N2Y0YmU2ZDE0ZDU1ZDQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZmM5YmNjNWFlZTM1MGYxZWYxNjAzNDZiNjQyY2MyMCI6ImUwZmIwOGNmN2RjOTAxYmY2OTgzODVhMzhlMWE4MWFjZDQxMThmMDgzZTUyYWE1MmUxZGVkMTZhYjFlODQwY2M0OWZhMWVhZDMyOTJjZTIxMDk2Y2M3NWM4OWRjMzcwMTEwMmIwOTgyZmQzYTZiZmE1NWE3Nzk5ZTU3OWFhNzMzNmVkZjM2NTU3NGE5MDRiYWQ5MjRlYzA4MGIwOTNhNjA0OTk0ZGI0ZGNkODMyM2Q3ZDM5YzNjMzU3NTBiMDc0MWIxNzA0ODE1MzlkMjI1NTE4NzFkNmEwZTJlYTE3ZTRiZWJlOGNlMTllYzNiYzNiZjRmNmVkYWU5Y2Q3YWIxMjMiOiI5MTBhODFhNTIxMWNlMGY1NDJmMTE4M2MwOGJhOTZhNyI6IjJkY2Y3NDkyYzQ1MzlkNmFiYzNkMjU5YmE1OTcwMDMzZWJjMmU3ZGRmYTFhZjhiZTExZjgxYjQ1OWQ3NDc3ZjMxMGJlMjE3MTI5MGJlYzJmMmFlMmNjNTEyNjZmNDZlOThjODc4ZGQyNDQ0YWZlZmRiZGI3M2E0MTc1MThmNWZkNGMxMTY1NDdiZjQ0MmZhOWE4Y2IyMzAwYzVmZjU2MzExN2IyNjQxZGNkNjUwMTgwODFlNjJhN2NlNWM0ZDgyMjU2MzgyNGU1ZWFmZWE5MGNiY2VlZTc4OGVkNDRlNmM0ZjIzZmU4OTI2NjAzYTE1YWRmZGI1NTZmMTFhMGJlOWEiOiI1MTRkMjdmODQxM2Q3ZWQ1OWQ5NmMxNGU3ZTc0YjlmM2Q0NTE4NDg2ODc2YzQ2OWIzNjlmOGM1NzM0MTQ1ZjRhYTUyNTA2YzhmODMyZDQ4MTFlNWY5ODFjYWFkZWRjZjA5ODc1MDMzYzViMjhhMDBmMzU2MDVkNzczYzdmOWUxYWY3ZjBjNzk1ZTNkZjFmYTliNWE1MjRmMWY3NTM4MzZjMWUyZGM5ZWRmMTYwMmQzN2FjMTIwZjNkOGE1YzA5M2E1Mjg1ZGJlOTM5NTc2NDNhNjVmMjI5OTVhMjc4MmJiNDU1ZDIzMzE4ZjAxYmQxOGFlMGQwODEzYjAxZDIzM2U1IjoxMjA6ImZlYjdhMjVhNjhiNWY2ODAwMGNmNjI0NTA1NmExZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjljZjMyOWRjMTBiY2ViYjQ4NDQyNGM3N2ViNzg1YWEyIjoiOTI3MjhhNjk2YjA3NzA0ZmIxZGViNjQ4YzUwMzZhMWM4NjAyYjQwMDZmYjJmZDJkNDAxYzRiNjY5MmUyNTJjN2Y2NjkxODA3ODU0MmNjMGIxYTk3NDg2OTY0Mjc2ZDZlNmM3N2JiYjg4YTlmZmYwMjg1YWVmNzA3ODNkOWYyYmUzYjdiMjJmOGE4YzAyNzcxNDkyMTUwMTIyZmUwMjI3MjJiZjY0MjYzZjVkMjQwNjg4NDEwOGQ4ZDYwODI3M2JjMDJhOTEyN2ZlNGRiY2IzMjFhYzQ0YTdkMjA5MGNmZjcwMTdkNTlkNzNlY2Y5MjdiOGIwNTk2ODY3NWE2M2NhMCI6ImE0MzBiOTc5MTY4ZjVkZjViYTIxOTYyZDFiZDZkZDE1IjoiNGQ5NGI3NjUwMjk3YzY2YjQzMjEwYzg0ZTZlN2IwOTM4NTExN2VkOGZiOTFhZGY2NDNiMjMzOWYzOWE1ZDhkZDBiMGQ3NWE3OTNlMmE2NjllNDJjNWRkYjA4NzM3MTRlMDFjYjY1ZGE5ZWI3M2ZkOTc2YTQ5YWU5YTQ3NjJiY2JjMDZiZTUwNTJmNzUwZDExMGE0MDc3NjQyODBiNTEwZGE1ZmQwZmRjZTk2OWY4NmVhNmJmNTJhZDRmZDllMmQ4MWVjNWNiODRhZjBhMWQ0MDY1MDRhMzRjNTFjNzUxZGFlYmI0NDIxZmUxOTk0YmY2ZGI2NDJlNjRiZDQ3MWQ5YSI6ImMxM2RiZmM2MGIzNGQ3NWY4YTg0ZGIxZjZhYTk0NmRiZmMxOTQ3OWQ2MzkwMDQ1MDM4OTc1NmNkMWFkYThmNmQyZDA3NzY2MDdmNzA1M2RiNmJmYTY3NTJjNGI4NDU2ZjBhY2UzMTRmZjNmZDQ4OTBkNjA5M2E0YTVkNDdkZDhmYmY5MDJlM2UzMDAwZjVlMDJiYTkzYTAwOTg1ZjI5YWQ2NTFjYjY5N2NjMDYxZDhmM2NjNzRlNmQ4ZDA3NDNhMTk4ODk0N2M5ZGMyMzA1ZTJiN2M1YTc4YjI5NDAwZDczNmFjYzIzODEzMTcwMGFmMzhlNzJkOGM5OGJhMDA3ZWIiOjEyMDoiODJmMWRkNTg0MjVlYjk4MjFmY2Y2N2E2YjM1MjA2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2Y0M2ZmNmExZWYzNWMzNzg2MmFlM2I4NzE3MWExNzMiOiJhMWU2NzBiM2ZkNjIwMzljZjI5ZWRiNjFiMjY1NTViY2QwZjkxODRiZTQ1OTNiZjZiMjBjZWFiMjYzYmRjNzZjZGVmMzQ5OTJmZTBjZTRkNDNiZDkzYmQ5NzliNzhiYjI1MmMxMjBmYmFhZmU0OTQ3ZmMwZWMwNWNjZTQzNThhNTA4OWE4NDFjNzQ3NmIwZWJmY2E2NDc2ZTY5MGNiOWVlMGI3M2M2NzAwYWE4MmFhOGY0MDUwZjJjOTg1MDAwNTJhMmQzMjc0YjMwYjBiZTY3NTQ5ZDc1NmVmZDE2M2M0MzY5YjZkZjAyMzZkNjA4YmZiZWNkNzg0NDY3ZGIyNDg4IjoiNmM1NjU0MGIzYTk1OTVmM2M0M2Y1NTk1YWNlOTI2YmMiOiI1YzBiYzZlNDQzNjIyOTk2NDJmMzc1NmFjZjA5ODc4YmIwNTU0OWViNmNkNmM0OTQyZDM5ZmU1ODZjZWFjMjI4ZDJhYTljOTJmODM5M2U1MDE3ZTczZWU0MTAwMmU2MGFhOGI5OTNjNDhhNzYzOGNlMmFlMGFlMGVhYTUzNmJkNzQ5YjA3YTg2NzJmYzYyMGE1MTEwYWY2MTIzMmI2YTNkNTI3YjM2Yzg2NjM3Y2MxZmE5MmM4NDAwODQ2NWZkODYxOTIwODg0ZDhhNzg0ZTE5NGVjNTJmY2JiNzY3YTY4Y2E2ZmFiYjY0YWIwYTBkNjgwOTYzMTQwZDVjZmQ5NDIxIjoiOGFkMzY1MjJlNGFkNDdkNGE1NGM1ZWFlMGE4YjlmZjQ5MTFhYTViOWIxM2I4OGIwMDQ4OGE3YjY3OGY2M2NmODU5NDViOGQ0OTk4ZDEwMDdlMjc1MjliNTZmNTBiOWUzYjM3M2JiNmZkODYxYTk5MDUxNDc0M2I5NzA3ZDUzNWI0MGQxYmRiYzNmNThhNjNiOGNhMzBkZDc5MzRlZTk4ZWMzMzI1ZDgwYWZhYTM3ZTM4YjRlODJkODg1MTE2NjU4OTAyN2Q5MTM0NzcyN2IzMTRlMDJlZDA4YTc4NDZlMjlmY2QwYzc2NDgzNGQxMjQyOWQ5ZjU2OGIzMTIwODFmMyI6MTIwOiJmNWJmMjFkNWVhZGVlYmRlZjMxMDRkMzkzNjJiODUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMGVjN2IwMDUyNTQxZDllOWMwOTFmYjdmYzQ4MTQwOSI6IjU0MzFkOTMyNzhjMzVjZmNkN2ZmYTljZTJkZTVjNmI5MjJlZGZmZDUwNTVhOWVhYTViNTRjYWUwODhkYjAwN2NmMmQyOGVmYWY5ZWRkMTU2OTM0MTg4OTA3M2U4N2MwYTg4NDYyZDc3MDE2NzQ0YmU2MjEzMmZkMTRhMjQzZWQ2ZTMwZTEyY2QyZjdkMDhhOGRhZWVjMTYxNjkxZjNiMjdkNDk5NmRmODc0NWQ3NDQwMmVlMjA4ZTQwNTU2MTVhOGNiMDY5ZDQ5NWNmNTE0NjIyNjQ5MGFjNjE1ZDdiMTdhYjM5ZmI0ZmRkMDk4ZTRlN2VlMjk0ZDM0YzEzMTI4MjYiOiIwMGU0NDA4NDZkYjczYTQ5MDU3M2RlYWYzNzI4Yzk0ZiI6ImEzY2ZjYjgzMmU5MzVlYjViYzM4MTI1ODNiM2ExYjJlODI5MjBjMDdmZGEzNjY4YTM1ZDkzOWQ4ZjExMzc5YmI2MDZkMzllNjQxNmIyZWYzMzZmZmZiMTVhZWMzZjQ3YTcxZTE5MWY0ZmY2YzU2ZmYxNTkxMzU2MjYxOTc2NWIyNmFlMDk0NzEzZDYwYmFiNmFiODJiZmMzNmVkYWFmOGM3Y2UyY2Y1OTA2NTU0ZGNjNTkzM2FjZGI5Y2I0MmMxZDI0NzE4ZWZkYzRhMDkyNTYwMjBiMDI0YjIyNGNmZTYwMjc3MmJkNjg4YzZjOGYxMDQxYTQ2ZjdlYzdkNTEyMDgiOiIzYjZkZTUyZjZlNTgyZDMxN2Y5MDRlZTc2ODg5NWJkNGQwNzkwOTEyZWZjZjI3YjU4NjUxZDBlYjdlYjBiMmYwNzIyMmM2ZmZlOWY3ZTEyN2Q5OGNjYjEzMjAyNWIwOThhNjdkYzBlYzAwODMyMzVlOWY4M2FmMWFlMTI5N2RmNDMxOTU0N2NiY2I3NDVjZWJlZDM2YWJjMWYzMmEwNTlhMDVlZGU2YzAwZTBkYTA5NzUyMWVhZDkwMWFkNmE3M2JlMjAwMThiZGE0YzMyM2ZhYTEzNTE2OWUyMTU4MWU1MTA2YWMyMDg1MzY0MmU5ZDZiMTdmMWRkOTI1Yzg3MjgxIjoxMTI6IjQzNjU4NDdmZTBiN2I3ZmJlZDMyNTk1M2RmMzQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWJhMDUzNzc2YWZiMDFkMTU5MTVlN2Y4MmEwNGYyMSI6ImZiNTk4NTg0MjFmZmJmNDNkMDk0MTVhNzczMjBjYzkyNTBkZjg2MWU0NDE0ODE3ZTdiNzhjYWI5MThmYTg5MGVhMDQwMGQ0MjM3ZjdlYmY1MjJkOTczMThlYTc5Zjk5NzlhNzM5NzAyOTY4MjdhMWE5NjkwYTAzOWU2YzYwNWEwYTNlZmMwMDc3MTU2ZTFiMTVmMTRkODg2ODU4MzNlMDlmNmNkNmY3ODNkMGY1MDU3OWRlN2EzMDkwN2I5ZDhlZmM0YzY1MGVjNTdkYmY3YjQyNWZmYWY5YTkwMGVjOTEwODdkNDcwNDA5ZGE0ZDY3Y2FlNzMyOGMxNWE1ZGIxZmIiOiJkZjI2YjEwOTI0NGY1YTgwOGYzZWE3MTM3ZjJmNDlmYSI6ImIyMWM4MTAxYWM5NmM0MWJhZDI5MjViOWI2Yzg2M2Y1NDg4OGYzNmU0OTk1ODIwZWJkNTFmNTNlMzIzZTQ2ZjUyOGQ5MWY0MzE4MTgzYmUwMjgyMzEyY2NkZThkYTA3NWZjMmU4MjA0MWNiNDFhNzllOTkzMzAxMmE0Y2I2ZTlmODk3MTc0NDRiYzczNGRhM2I3ZTQwZTkwM2U1OGRkMGYzOGJjYjExNTY4NDIyN2VjNTMzYzA5YTkzYzg5YzJjMjU4NGJiYWM4M2E0NjQ4ZjgyYjRjOTIwN2Y0M2I2MWU1ZWM0NzA2MDIwNzZlZDQ3MzE3NTZjODdkNGUwZTI0YWYiOiIyYzMwNmZjNjBiZmY1ODMwOGYyYjlmMDhkNTIzNjllODcxMTlkN2Y2ZGUyMjc5ZmNkZWEwYzQ2YzkwMWM4ZGM1YjRmODM1NzhiMTdhMDA3ODYwMTRhMTdkM2UzODBlMWFmNGI5ZjMyZmE1OGI5YWM3NjNiZGY4NmZmMGM2MDg0YWZlNDEzYTVkY2I3NjE3Zjk0ZDc2ZTU5ZTM3MGVhZTQ4MjllNjliY2I3MGYxMDU0NWIwNGVkNWZkMTM3ZTExNTlmMzk2MWIyYzAxMDg5ZWJiZTJmMTZhOTFjNzgyZDRmMzgzZmJkNGQ2MWI2NjEzODMxOWI2M2Q3OWNlOWZkZWMzIjoxMTI6ImQ2ZGI1YWE1MzlhNmUyZTcwODg1NTA4ZDYzN2QiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYmJjNDA2YTY2OWI5NDM3NGM3OTcwZjJhYzEwYzkxYyI6ImE5ZjMzNGQxYWU3ZDI5NjBmMzlkYTRmMWRmODU4MzBkMjdjMGYxM2ZhMGJkMjNkNjA3YWNlNGNmNThiMzU5NTg0MTIwZTdjOTBkMzA2MmIxYjIzYjFhOWU4NWE3NDBjOTA2M2ZmODA0MjNiNTg0NjI1N2U0NDI2YzE3NGU4Y2Q3N2EzZGJjZmUxMjk3MGViZGRhYWEwMGE4ZmZiNTU0YjJhODBkZWNjODFmOTkxN2Y1YTEzNjllOGJmNzI4OGVkODY4NDU3OTkzZjQ4MGQ4YWZmMGI5MmIzZGIyZmRhMjMzZTMyZmFiZWMxYTQ1MTQ3MTUzNjRkNGY3MGY5OGQ2MmMiOiI0NjE1MmY1YTY4YzAzZGJlMmYyOGU2OWY1YjUyZTJmYyI6IjEwNTJmOGIyZDNlMTFkYTUzYmE5ZWZlMDJjZTk4NTA5OGQxNzFkZmY5Yjk4Y2JjMmY2NzU1ZmQ4ODIxNGRkYjg2NjAyMjVhNjNhMWM4YmNhZjQzZmYzOTMwZTIzOTgyNGFlOGUxMjIwNjhiODlkN2ZlNzNjNjU4Y2UwMzBjYjUxZGFlOTgzNmFhZmI2OGZhZDc3YjFjYjViZmY4ZDdkOWM5MjBlYzQ0OTE4MWUxMGVhNjQzY2M3M2FiYjk2MjBkYmRmYTMyZTA2YzI5Y2ZiZDhjN2NiOGIxMTAzNzYzNjE2YWU2ZjliMTljNGE2ZTFlZWQ4OGMzOTcxYzQ3NzhjMmIiOiI3YjE2NDI0YzUwOGRhM2ZlZDE0YmI1MzQ2MmQxODA1ZjBmOWQwOWY4MDNkNGUxNjZmZGFkYmFjNzZmOWZjNTY2NjY1NTU0MzE3NDMxNjQyZjZlNTI3MTIzZWE2YzFjMGRkY2Y0NTAwNTIxM2IwZjI3NDczMjFmYTExMmQ3Yjg5M2NkY2Y0YzFhNTllOGJkMWM0OGI3ZDc3ODgxYzZkNzlkZTNkODUwYmNlNDQ5OTY5MzA1Nzk3MTk2ZDE4NzE5NmQwZDgxZGMzNDIzMjk1ZjU1MmQzYzI3ZDZkNzBlNDJjOWExYTc0NGEwMzkxODFlNzMzNDUwYzk5ODVjOTRhZTk0IjoxMTI6ImI1MWRjYThlMDA5ODhhZjA5ODc4NjBhNjYzYWQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTk2ZWFiMTBmZjQ4Yzc5NDIwMjU0MjI1ODNkMDM3NyI6IjE5NGM4YmJiZmFlNGE2NzEzODZiOGNkMzhmMzkwZjQ2ZjlkZjZiODY2MWI0NzBjMzEwOTIxYTFjODU4YTkzODA0NTgzNGJiMTAzODAwMzdmYmY1ZjVlMDA2ODg1NTQ1MzdiZTBmY2FmZTgyNzBiOWI1OTA2OGZhMDU2YWIxMjY4ZmMxNjZjMmQ3MjkyNDNhMDY2NTBhMTcxYzkyOWM3ODQ1Yzg1MzMwYzA0NTY4ZDYyOTc3ZWVkZjNiMWJhOWRjYTEzYmRiOGY5NTIyODE3YzhjYjk5ZTYzNWUzNzQ2NWVjMWM5ZjZmMTQ4ZDUxNDM3YWE5Zjk5NGE2MmUxYmQwMTMiOiI5N2NlM2Y4NDgyNzY3ODM1OTljNjg3NWRlMzI0MzYxZSI6IjEyNzYyOGI2ZGNiY2U2ZmM4YThlZjYwNzk4ZWI2N2IyMDg4NDE1NjM1MTE5Njk3ZDIwYmI4NzhjMjRkOWM2ZjljMjllMTQ4NTIxY2I1ZTBmZWZmODkyYzc4NTVkNGYxYzBiZmIzMmFkMzM0MjA5NzY3MTRkY2U4N2EwYmJjMThlNDM3OGJkMWVmMzUxOTdkMGNhNzMwNTExNDhmMTE5OTAxMGY2M2NhZjEyMmRmNWY3MWFkOGQ5YzcxZGYzZWIyZmJlM2IyNTI5ZDBiYTY1NzU3MDM1OGQzNzc2ZjY4N2JkYjljOTZkNWUwZTllMDBjNGI0MmQ1ZDdhMjY4ZDZhMDgiOiIxMjQ5NTEyMDA1NmNhM2NhYzcwZDU4MzYwM2E0NzY4MjFiYWM2YzU3Yzk3MzNiODFjZmI4MzUzOGRjOWU4NTBmOGJkZjQ2MDY1MDY5NTkxYzIzZWJjYmM2ZDFlMjUyMzM3NWZiN2VmYzgwYzA5NTA3ZmEyNTQ3N2VkMDdjZWU1NGZjNGViOTAxNjhiM2VmOTg4ZjY1MWZjNDA2NTI0NzRhNjQ0YjFiMzExZGVjZjg5OTY2MGFlZjIzNDdiYjA4MWFmNDg5NTBmMDZlYmY3OTk5MTFlMzcxMjBkZTk0YzU1YzIwZTVmMGE3NzExOWJlMDZlMmI2ZTU1N2Y4NzJmYTBmIjoxMDQ6IjZiYWM3OTNiZGMyMTkwYTE5NTEyMmM5ODU0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjI5NTYzODRhNjVmOTYyN2RjY2Y1MTI2MTQxYzdiY2EiOiI4OWRmZDE4NWJjMzNhZGJlYTBjNjliNTVkMzcwODdkZTNmYTdmZDY5YTlmYTc2YWExNTY4YWMzNjNjNWYyMTJhZTkyZDIwMmI5MzM4ZWYzOTcyNjZkZDhiZDFlZjM2Y2FiNmQxMzY4ZmVhZmVjNjlhNGUzZTExZTFiZjFiZWJhMzVkOTZlMDQwZDkxZTlkM2E4Mzg5NjZiYWU2MmExNWIxOGQ2MjFmMzNlZmQ5ZWM1MTFkZTRiZDI4N2M3MjJjZDM5YjRiYTQzZTdhNmY4YzhhYjY3MmQ2OWVhYzZiMjFhOGQzNTQ0YWIxZDY0ZjlkZTMxOTU2YjkzYjExMDQ0MzFlIjoiMmY2MWY3NmJjZjA3NGEzZDAyZjUxODE2YzA0MTEwNTIiOiJiZGUxNTA4ODIzYmU3OTg0ZDU5MjFkYjRjYWIxZWQzMDE3YzBkNzNjYjliZmY5ODc0ZjM5YTZmNWJjNDQ5NzE5YzFjNDNkOGZiNGU3NmY2ODEzYjA5ODVkNGIxMjQ1MTdmOWU0ZTJkM2M1NTJiMmY3NTg3NjU2M2M5M2E0NGMxOGZiNjUyM2VlNzMyZWE1YjZkMTM0MTdkYjQ1MTIwNjUzZGYzODIwYTMyZWJkYjQyZDU0NDc2ODQ2MWIxZDBiNTViNDZiMDlmNjg4ZTQ3MjQwODgwOTMwZmNhNzA5N2RkZmFlMzVmODU0ODkxZTIxODkxZGJhZDEzZjY2MWEyNTM0IjoiMDIzYTljM2FiM2VkMDE4MWVjODkyNmU0YmZiYzBmYTYzZTM4ZWM4OTgwZWFiZDJlZDc1ZTI5YjY4MWIzZWMwNGNjOGIyN2ZhZDNhN2NlNmRjMWVmZDY4MDQ3OWE3OGYwMmRlN2JhOTJmNDVkYzAzZGUwMjg1MmEyZTY3YjM1YmIxZGQxNTQ1NjhkZjdhY2Y1OTA4MWRmYzA1YWNhMDJjMGFhOWYzZjdiNGZkNGRiZGI2NzFiMWI5NzNhNDhhZjBjMzI1YTIzNDY3YmE1Y2I1OTE4MzU0MGY2ZWRmNGMwMDM3NmJlMzlhM2E2NzJmZWI5ZTc5NWQxYmRhOTZmMDAxNyI6MTA0OiI2MTNlZWNhM2RlY2JlMDllOTc3ZTBiZWVkYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlOWJiMzBlYTI1ZjUwYjNlNzcxMWZhYzA1ZjlkNDRhIjoiMTdhNTJmNGZhYTYwOGRjOTg1M2Q0NTExZmViM2RkOWQyZmI5MmQ3YTNkZWIzZjhhN2E2ZGYzZmEyYTkwOWI3ZGIzMGJhYmVmMTJkOWRhNzFhYWRmYWQxNmJmZDJiY2I1NzA2ZWYyYWRkYzU4ZWViOGQ4ZDEzZjMxMzI2ZjdhYjFkMGFhYmZlNTUyNTAxNGYwNWNkOGZiODBlMWVjYjA2NTRlNjIwNzg0NDAxNTdkZjY2ZjYxOGYwNzhjZGYyYjMyMmIwZjg4NzhiY2Q5MjQ2MDljMzNlNDIwNTlhYTY5ZmUwZGRjYTY1OWFlYTQyYWI5MDdiNDgzYWE1NWFhY2M2MyI6Ijk2NjhlOGIxY2U5NjIzYWQ1MjQ2ODQzMWRmYmVkNjMyIjoiZjc3NmM2ZTg5MmUzNzNlYzg2Y2NmNzA2NzA0ZDQ3Y2Q4OWZhNDVjMmFiZGViMGY5ZjZmMzJjZGU4OGMyMmYwMDExNTBjYzY2ZjBmZDgzZTliNzViOTdiY2ViOTg5MTNjZjE0M2NkOGE2OGJmMDZlMTEyNTAzMWUzZTdmMDlkZmVmYmNhZWY0ZjA0ZDdiZjI4YWNhMTk5MmE3ZTQyMjhmZDQwMTdhNWIzMmZjNDgxMDFjOGY1YTYwOWVhZWU5NDg5ZDAyMjAwZThhMTNlZmVkYTYwYjU3ZGY1M2NjZjJmZTI2MzA5YTFjMWUxZDQwZGI2ZWI4NDMxZGJmZThkNDNlYSI6IjQwNzE3MWRiMWRmYjdmZjIwZDVjOTc0MDczNzU1NzQyMjA1MzRlZjc1YmExOGRjNjE2NDAwZTVlOTY3ZTcyZGIyMzc4M2E2ZWI5NTA2YjYxMWQwYzY3YTgzZjVjNDIzMzgwY2VhZTY2ZDVkY2RmZmMzMWUzMTIzOTM1N2I5MTc5NDAxOGU5YzRjMzZjMjg2ZjdiMTdlZTkxMTEzNmQ5Y2FjZjU2NGJhZjVmOWI5ODMxNzc5Mzc1ZTYzYWFhZGU4NzM0YTkxYmQ0MDAwZTUzZTVlNDEyYjNmOTJmOGI2OGUwYjdhZDNiZjZmMjc0NzQ0ZTJjNWE2MzU4OTRiZjkxOGUiOjEwNDoiMjc0MWViYzMzYTRkNGMxNTZjMjEzODVhMjMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFhNzA1ZWU3MDI5N2U5MjEyZjcwNTg1ZDkyZjQyYWE0IjoiNWU0YjQ3ZDk4NmQ1NWY0OTcwOGNiM2U0ZDI3MDcyYTdlODUwOTM2YjI3YjI0NzIzODU2YWNlYzdiMmUwM2NhY2NkOThjMmEwMDJhMmRkMWQzZjRkYWQ4ODI3YTU5MTBiNDI5ODZjYjAwYmU3YmZmNDdlYjQwMWJlNWYzMjRjZDJjZDNlYTJmYTQxZjRlZjYxZjk3NzFhNGMwMTg0ZDg1ZDYwMjNmMzdmM2Y1NGJiOWQ3Y2Q2MjFmZTM2Y2UxMWE4MjY3OGEwNzU0YTMzMDQ5MTA2YmU1OTdjNTNmMjg3NjkyYWM1YTQyZTU5ZjA5YTJhMTE3ZmFkNmMwMzRhOTFiOSI6Ijg5ODIyYzlkYjY5MjI5ZDFlNDg4MGFmZDE5OTY1OTA4IjoiZmRkNjU1NTg0YTkyZTI5YTE0YTM2OGYyOGE3M2Y5ZGM2MDhlNWMyZmZkMzA4ZDRhZWZmNzMyNmJiZWY1ZWE1OGY4NDYyMGM5YWQ0M2MwYjU5OGMyNzE1MjdhZTYwZGFlNmRiNGZmZDNmNTkwZTUwM2FlNzA1N2Q4YzQ4ZTliMWJkOGY4YTg4MzI2MjliYmZjMTM5MWI5NTRhNGZjZWU3N2Q0MDA5NmViNWRjZWM1ZTA0MzkzNzVlZDQ1NTM3OGQ3MTZlZThmOGIwNGNjZGUzMjkxZTU4MDA2OGRkN2RiZWY0YmEzNjg1YjUxOTQwNDcxZjI0ODU5ZjhlOTNiNjU5YiI6IjBmMzRiYjRlMmE0MDE2YmE0MWViMjNlNzY4OGVkZDQ1NWYyZDQ2YTUwOTcyMzZkOWExMjRhZTBiZDQ3MzQ5ODc2MzE5OTc2YWE0YzNhYTQxNjgwYTYzY2VhODVmNDMzZTNhMWI0Mzc2Zjc5ZDAwNDcxMGQ0ODZhM2ZiNWFmYmI3ZGIyYzQxYWNhNDAwZTA0Zjc1YmE5MTY2MGJiNjgzNTQwMjlkZWZlYWFlMTg1MzQ0N2Y4ZmEwZDQ3MGIyNTM3MWRhNzNjOWU4ZWU4NDFiYTk1ZmMyNzNmODhjMmU0NjA0ZmYyOWExMzFhN2Q3M2U2MGEwMDM0MGU4ODZkZjUzNTkiOjk2OiJhMjQ3ZTg4YWNiZDRlMzU0ZDdjOGE4MGQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRkZWVjNzhhMGMyM2U4YzVjMzJkM2Q0Zjk4MzBmOTI3IjoiMTM0ZmQ2YmUxYTkzNDA1M2E1MzkzOThhZWFmNWQzYWNlZGEzZWY3MjJhNmIzNTY4YWY2OTU4YTRiMTIwN2Y3ZTliOWU4MzVjZmQ0NmE3ZjNkNGZhZWQ4MjlhZDIzNTU0ZmM3YzBkMWE5YjMyYmFkOTQ3N2Q5ZGQzOTdhMjU5Y2ZiMGJlYTMwMjY4YWJhN2I4Y2Y0YTM1ZGJmOTlhNmIyY2E5Njg2NDk4NDdmNzE3NzQ5YmM1ZjQxMzc0ZTE1NzRhZDZjMzU3ZjdiNjBiMGNmZmNiODIyYmQzOTI0MjA4ZDA0NzJhOTczYWU5NzU1MGI5MjEzMzg3OTJjYTg4ZmRlNiI6ImFlNDI4ZWJiOTc0Y2NmYmJkYmNmNjIwMzEwNTcyNGYxIjoiZTNkNWNlNzY4YzY4OGU4ODFlNzJmMDM2MzQxYjJkOTE5NDdlMDJiNzMyN2ViNTMyNDBjODViMGI5M2E0MGViMGYzMzQ2ODE3ZTJjOWUxMjYyMDliMzFiNTc2MzNjNDM4NGY3YWY0Njg0NmQ5YmJlNmZkMGQ2YmFiYzU3Yjg0ZDBmNWJlMmE4YTdiMTQ2YjM4OTE0YTRjZWE3MDI3M2Q1NDYxMTI2Y2ZkNzUyN2FiMzk3NTEwMTc2ZTc5MDMwMGEwNjA2NjY1NTkwN2Q0OTliZGVkNzlmNWJiMzlmNmZkYjAzZjg1YTQxNWMyY2MyYWQxZjI1MDc4ZjBkYTdkZjIxNSI6Ijg2NWQ2MTQ4Yzk4MjBiNjdjMDhjMTdjOTIxNGRlNjEyYWRhNmUyNGVkNjc5MzNkMTNjM2IzZWM0MzYzN2ZhMzA1NjczZDhkNTJkMTVhMTk1YjI3YTZiMjU2MzY4MmE5Zjk4OTEyOTA4NjY4ZTMzMzUxOTJiMWRhYWJmMjZlMWU3M2Q3ZDM0NzY0YWYwMDZiMGMxNGEwZmZhZDNiNmEwZGVmNTk5NjRiMTFlYjUyZTgyOWFkNzkwMDY5OTk3OTMxZDA5YmU4OGI4ZDYwYWVmOTBlMzlkZmNiMGRmNGZkNTRiNzE1OTdiOGFjNjQ2NzBlNzAzZTdjYjgzZWZhM2YyY2IiOjk2OiI2NGIyNDU4YTZlYWE2ZjEyOTM3YTg2NDMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgyOTAwODMzOWU5ODM5MThiOGQxNDIwOTFmODRlZTI4IjoiNmYzMDYwNGQ4YzJmYWUyMTZiMWVkM2Q2NzQ4NTYzMWVhYWRhNjhmZTg5YTcwMjBkNmUyOWY0MmI5MzdlNzY0MGZjMWYyM2MwMGJhNDhiZjIzOTc0MGY2NDY4Mjg5ZWQyMTFiYTgxZTgwOWNkYTU1ZmUwNjdiZGZhMTk4YmYwNDYxZGFmODZkNGE3OTY5ZGU5YTYyOTUxMzgwOWIzNTg2MzBjZTdlYjUwYTc4M2I4Yzk4ZWMxYmQ1ZTU2Y2I0NzAzMmVlOGZjNjRhOTM5ZGZjNGE4NzBlYTk0MTliMTYxNzgxMDlmMTk2NmFiOTY0ZGEzNGRlYmNmMDBjYzQ5ZjU3ZSI6ImRjNjJjZjEyYjZkMDQzOTU3OGI0NTdlNTE2ZDgyMDVlIjoiZTcwMGNkOTE3OTIzYjE2Yzk2ODcxMmIyZmRiZjA4YmUxYjVjM2I1ZDllNDJjYzQ1NDY1NTQ5ODk4ZGFhMDdjNDRiNGNkMzIxYmExNmEzOGFlYjY3MjBlMjE3YTU4NDI4ZTNhNGNjMTI1OTIwY2IzZmM5MmYwMzliNjY3MTY1NDNiYWI3MWI2NGViZWRiYjFlNWUzZThmYmJlY2ZmMzM4NWFiMGFiMTZiN2Y2NTU0YjdmYmIzYjRjOTIzMDdjNjU0MzYxZjk4NGQ1YTZjYjY5Yjg3MDg2ODRkOTBiYjFmZGZhYmMwY2I1OWY0MmMyYjM3MDdiMzc1NWE4YzdhYmYzNCI6ImFkZjYwYzRhZmZiMmFjNzZjY2UyMGNmOWYzMDJiOTA5YmZkYTFiZWRjNjBiZTIxYjUzZjY1ZDBiODFiZmYwOGY3ZTkwZWNhYWYxMmVlMWY5ZDkyMTkyNmI3NWUyNDRiN2U4MzU3YzFjZmMyNjAxM2E2ZDFjODc0ZWQyZTVjZDBjY2UwMTJiYmZmZjBkZmY4NWIzNzJkOTJjMThkY2U4ODdjMTY1MWI2NDY3ZjE3M2E2N2FjOGNlYTE5NGE2YzQxZTc3ODQyNjc1ZjYwY2FjZmJjOWM4MTU5N2EwODk1OWQxOWFmNjMyZDNjMTkxYmY2OTUwNTYyMGU0MjkwYmIwNDAiOjk2OiI2MjA5YzA5ZGQxYjdlYTg1ZDAyZWI5ZmIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhZWM1NWM3ZTRiYjM2YzMyY2I1NDNiNTdjZmJhM2ZjIjoiNGNmMTQ0M2E1NDQ4ZmQwOWUwOWU5MWI3Y2M1ZjhlMDBmNTNmMGI3NWE2YjE3ZGI1YWI5YTcyMTE2N2RlNWY3YmM1ZGUxZmI3MTFhY2NkYWZiN2YzZjFiZjZiOTgzOTNlNWYwOWU5MDkxZTI2ZDEzNDAxMjJlZGM5MWY3ZTYwZjYyY2FhMjE4ZjE5MjdjOGYwMDMyYmUwNzUyNTIwYWE2NTBmNmYxZGRmNDA0MTJjOTZkNDlkY2MyMjg3ZWUxNzgzNDUwNGYxZGRhM2Y0YTcyM2UyZmNlMDY0ZjBiOGRhZTA3ODllYzQ1NTkyMmExNDQ4ODYyM2UzYWMxMGI2ZTMxMiI6IjY2NjljMzAyMmUwODIwNjM0YTk1ZWZhMmI1NTc4ZTkzIjoiZjZhZTliMWFhYmExOGFjYjc0MWM5ZmM2NGNmYmEzODQxZjUxMjdiMWNkYTVjYmNkNDhhZjU5ODc0MjhkYWE1NzgyZDI2NzZiYzNlMmVmMjM5MzZlYzI5YTgwZDZiNTMxMDI4MmIzOWI3NzE4MWRjNjgwNzk5YWM5YzgxMjVmYzQ4YWZkMTg1Y2JhMmNhODkwMGJkOWEwMDM5Nzg3YjRmM2E2ODQ2ZjNlZGY1ZjdiOTIxZGVjMjYwOGZkM2RmNjc2MDBhZTBhYmE5Mzc4ZGEwMDE1YmQ1N2Q2NmQyOTk5YmY3NTE4MDZkMWI4OTIxNDMzMmJhYzUwZjcyMWNhOTQ3NCI6IjcyMGMzMmIwZDQ1NGYwODZhZjM2YTMyY2M3Mjc0ZTJmMmZlMDhkYjljZjFjZWZlY2MxNGI0MmIzZTVjNTczYWVmYTdlOWUxZWUwMDQyZWVlMjExMDRkYzNlNGQxOWIwMTIwOTkyODBjNWE1M2U0MGEwYmY2NjJkODI5NWRkZTc0MzE0M2EyOGJlNzMwNTcyOTc2N2EzN2NiZGYwOGZiM2M4NzY2NzkzOWE4ZmZlNDRjOTZhZDI3MmUzMGI3NWFhZmFkYTI5NjNiYjk2MzZmMTg5YzM3ZDk3NmVkMWM0NTgyOTVmZTg1ZWQxOTY2MmM0NjNkN2M4MTU1ZTlmMDQxMTUiOjY0OiI0YjMzNDNiNjI3MDk1ZjYwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NjI5ZTgwNjRiM2JhMmI5NWJjMjBkZDA3NWY4ZTkzMSI6Ijg1ODk2ZGU0YjY0NTRhY2Y4NTY4Y2NmOTVhYjY4YTYzMjMzMGNlNzFjYThiNGU3YmZlMjZhZDhkN2UyZTZiNjNmMjAzMmUyY2QzNjU5OTlmZmQyNGVjZTBkZjE2OTA0ZDc0OWQwNmU4MjlhMjkxZjNkMDdmY2NlZTI3ZDljNmYzZmYzYTEzOWQ5ZTMzZjA2NjA4MDNkZThmZTc5ZGM2YWQyOTFmYWQ0N2M5MzU0MzUyMmExYzM4ZTQwNjk3NDI2YTk4NTUyNTVlM2UwYWJjYjg0ZDQ3NGVhZDE1MzQxYzZiMjM1Y2NkNzU1ZTU4ZmU2ZTg3ODk4ZDIxNmQ2NWFiYWMiOiJkYzRiY2VmZTI4NGNmYzYwNmYzOWIwNTdiN2RmNDExYiI6ImFiZmQwY2I2ZmVlODU4OGFhNjg2MDZiN2U0ODdiYjljMGQyYmQxMTIwNTYxMWE2ZjMwYTc4ZDljY2YyOGU4MjdjZWY0ZTk2NmZhMjQ1ZTRiN2IzOTUzM2E0YmQwMDE3NmNlM2M5Nzg1OGIwYzhhYmRmZjRjNTQ4YzgzNWJmMTk2MmE2MTE1YzRjZTdjMDViMWNlNWFhMjliNDEyZTgxNmFiYzkyNWI4Y2I5OThlYjRiNjljNDNhN2RkYTFiM2NmMGQ3MjgwNzJkNDJjYjVhNDg5ZGI1MjE2OThjNWRhZmZjMzAxMzUzN2JiZjYyMmVmNzZhMmU5NjA4OWI3ZDRiOTYiOiJiMjk1Y2EwZDc3MDc4OTJmYjA4NTM3ZjQyZDI4YTg0NGY1ODc3MTc3ZjEzNmI0NjIwZjY5YjA1YzgzZjQzYmYyZTYxMzIzZTgwMDc2Yzg4NjYwZjUzODUwNjAyMjhiZGI5MWQ4NjY2ODZlNjkxY2M3ZTk2ZmRhZmY0MWYyY2E1ZjViNWQ5M2VjZWM3YmJhODI1MTVhNmUwYmQ2MDRjOTllZjkzZDNlYTAxM2Q4OTk0NjQ1NThiYzgyMmJkNzY1ZWIxY2EyYjhiOGE3ZDk2MWE2YTMxNmJmMTM1YzIyZDJlZTU1MmU2MmQ4YmJjNWI2MGNhMzFiYjUzY2RlODJmYjVmIjo2NDoiZDI2Y2JhMTFmNjhhNWUxYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGQ5MDFlNTlhNDkxYzg2YmY1MzhmN2IzODI0N2JiMjEiOiI0YzM3MGE5ZjMxNmQyNTcwMjE5NTQwOWQ4ZTczYmJmYTQwYWExNWMyYjBlYTU1ZGI5MjU3YTlhZTRlOGRjY2FkMTQ1ODk3MTg3NDFhNzhlNWE3NGMyNmE4MDE4NTdlMzg4YzlmMTQxZWY3ZGYwOGJjMDEzODRiMmIyMzM4YzM4YWJjZTUxZDU0NzA1NmY0YmJhZjc0ODRmOWVkYzk2ZGYxMjJlNzFmMTMyYjdiY2I2NDg0MjI4YzNhZTJmNzQxYTJjOGI5YjIwOGI2ZjQ5YjA3MDgxMzM0YjkzYzUwMTkzODgwOGNkYmQyZTQwY2Y5NWFlNGYyN2EyOWUxMTIxNDgwIjoiMzllMjc4OGM5Njk3ZTgyY2FlMGUyMjJhOWU0MTNkOGYiOiI0OGQ3ZDIwZTQyNGRmM2MzZWZjZWQyOWU4NjA3NzE2NDdhZTAxMzEyYTk2ZTY4ZDMzZjk4MmM1NDBlNzQxNjBhN2ZiZGI2MjNkNGIxOWFiYjE4NzFkNzRjNmRhZGM1NjAzODk1NGIxNTQzODliNzUyYmViYzQwY2Y0ZWUxNTA1ZWM4ZDg0NGUxYTA0ZGNhZTQzMGJlZmRiMDgxY2M4NDI1MmUwODQwZjVmNTE0NmZmZTViOTU5NGY4NTZhZmMyZWRiMzNiM2M2ZjkwNDFjOTYzMWM1ZTNkODEyOTU5YzU1MDQ5Mzg2MzVmNzJjNmZlMjlhMjViYmY2NmE0ZWNkMjExIjoiMjYyNzE4NjcxZGQwZTJjOWE0MGI5ZDcyOTdjN2Y2YTI2Y2Q1ZmU0ZjMwMTk5OWEzMjA1OTgxMjcxOTg5NmQzYTJmNTM1MGY2ZWMyMGQ5OTlmYzgwYjhkN2FmNWE0MjE1NDViMzI1ZGU5MTgwZjE0NTA1ZjBjNzIyNTA2NThhNTAxNDc2OGZlZDYzYWI1NTNkZTBmYjAxYWIxMzY4MzU2MDQzZjZkMWE2Yzk5NTBjODBlM2Q5ZDQ2MzdiYmVlYTQ0YzlkNThhNDE0OGJiMTA5NzRkNTA3YzYyYjY3Y2M0ZTM3ZWFlYmQ3ZWI4ZTY3MDc3ODU2Y2M1ZDE3MDJmOGUyZCI6NjQ6ImJkODE0YjQ1ODQ5NDE2ODEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJmNTQyMjkxNjc4NjIwMzRlZjZjNWZmNGExMjQ2Njk3IjoiYWYyYzg5ZDM2MDAzMjk3NzlhYmZiY2Y1YmU4YmI4M2MzNTdkNGQyNDM1ZmM4ZjRjNDEzYjk1NmI4OThkMjJhOGE4ODlkYjllMmZmNWU3MjI5ZDc0OTU1NzY5ODk2OTVhMGI1MmQ3OTZmOWEyM2U5NTcwYjdjYWVjNmI0NjA1OTc0OWMyOWEyOTNkMzFhNjIyNGJhYWY3MzcxMWJjMGU0YTU4N2FiZTlkMDM3OWFkZWM2ZGUwNGNlNDQ0Njc2ZGZkODY3MmU2NjYwY2ZjNzlkN2VlMmU3NjI1Y2U1N2RkNDY4MWJhZDY2YWEyOWJlYTJiYWY5MzYxMjJjM2RiMTdlNyI6IjgxNjhlZjhlZjI3OGM4MzJmYzBlYzg0NmJjOWY2MmU5IjoiYWJiOWVkMjQxMzc5MTUyNjViZGRiZDRiNjNmMWQwMmVmYTJhOTljOGMzNzNmMTkwNzdjN2UxYzM4OWZlYWUzNmE3YWY0MmM2NjFiMGFkYzVkYzhlNGI1NTIwZDMzNGU4ZTBlMTEyZDQyYzI5NzdmYTIzNDg1YzBhODVhZWY4M2YxZTUyZDY3NDliZDI5Y2JlYmUxNGFlYTZlZTFjMTA5OGFhOTZjNjM2MGIwMTkyODk0YmIyMDAxYzdjMGZlZDdmMDBiYjg0OTUzYzIzYmZkZGEwMDgxOGQxNTY4ZmI5NGMxYmQ5NzE5ODJkNmMwMWMxMmEzNWVmN2FmMzRmOTQ3ZiI6ImNkNmRlZGUyNTQzM2ZkM2RhNjEzNzAwMTIxOWI1N2FhNTRiZGY2MDM5YTVhOGQ2NjEzODE3MWIwMDYxOTRmZTNlMTNkNDg0ZTVjZjU3YTFhY2RhYThlNzZmMDAxZGY3YmY0MWNiZWQyYzU1NjFhMzdhMzIxMTNmYTExNmQwOTE4MTY3YzI5ZGQ5ZTdkNDZmN2MxOGQ5ZGIzM2Q3ZjFiYzMzYWMyMWQxNTlkZGVjNTdhMmUxNThmMGMwOTkzYzE2ZGJmNTA1ODIzNzExMDBhOGQ3YzU1Y2Q0N2MwMzQ3M2M1NzcwYWQ1NjIyNDBmNzU0Yzk5ZDk1ZWM1OTNkY2EyODQiOjMyOiI0YWI2MzM0OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjdiNTJmZTc0YzVjMzI2NmVkZjczMTU3OGQyOGE3MmUiOiIwMWE0YjdkYTU3YzBmN2Q5YWVhNTEyODMwMDRiMjNmODk5NjY5ZGNjZDZkYmFlYzljZDZlNzQ3YzdhZGI1MjQzMmM3YzI5ZDE0MTFlYzFkZjRlNWUzMzMxMWFkODQyMTgwNzVkYWJlMTdmNzNjOTU1MTFjZTc5NTBmMDhiNjE4ZmVmZjU2YmQ0NTJiMzM0NTVhMWEwM2NhYTgzNzFkYzdmYjlhZWJlZGIzY2I2NTJkOTRlMDZiZDAwYTk4YmIwNmQzMGI1MDZkNDFjYjUxNmM3NTlmNmQ3Zjc5MzQ3MmU2ZDZkYzlhZTUwY2YzZGM4YjFhZDNkMDUxN2M0ZjU1NWEzIjoiYTAwNTc1MGU5ZjhjNjhhZTIzODY2OGYwYThmMDE1YmEiOiI4MDVjZjM2MzVmOWQ4NGM3NjA4YzI0MmVlMjNhNDgzN2RkM2YyNjBkZTlhZmQ2MTY2YjA4MTY0YTAyNTYyMDBiZTliNTJlNTI1OWE0YTU0MTg2ZWMwNjdkZGZhZDkwZjVjNGY5MmFmZDFjN2U0ZjJkODQ0MzMxMmJhM2M0ODE4YjY2NDQzOWEwMjY0NGU1NTQ2NzA0NTA3MWFhMmNjNzkzOWE5NDBlODljYzUyYzhhNTM2MjNiYzY0NzNiZjg0M2E0ZTBmMDAxNDliMmNlMTU0M2E2NTQwYWEwZDljMmM1YjY4YmEyYmQ1NzkxMDc4ZGVlZDFkZTNiNWY0ODI1N2M1IjoiZDYxMjRkYTA4OTZkOTlmYzdmMmMzNjg4ZmJjYTE2NGY4ZmVjZDc1YjYyNjAxNjJjNGRjMmQyNzczY2U3NWNmNDFhOGM3YTU3OTk4ZTBhN2U0OWNjNzFlNWFkNmEwNGM3NDE1ZjhkNGZkMTFmMTAzNWQzYTAyZWQ3NDQzNDVkNzRlYmM5YzRmMjAyZjY1YmZhODhkNTVjNzQ3ZmU3NzcyMjVlMjE4ZjIxNDlkYTIyYjUzZTY1ODQ4MjNkYmRhNDJjYzJkZGE1NmZjNzJiNzUzZjM5MjNjNDQzZWI1YzY1NjUxNWRkODI0ZDhjMDhjYzc4MTUyMjI2ZWQ4YzE4MDhkYiI6MzI6IjYwZDg2Mjg3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YTM1MDFkOWZiYjg2YWI4MGY1ZmFlYWY4ODc2YjdjMSI6IjRmMGRmYmQyYWVhYjcwYzgwODE0YTFmMjYxYTFmZTQ0MmVhY2ZmNWQyNjdmZDBjMGY5Mzc1NzkxOTgxMGY2NjEwMTEzZjFiNDQyMjcwYWZjYzQ3ZjJmYTAxYWIwMTc5NzY4M2VjOTI2NzY5MWEwZGVjNDUwMzNjNTdmNWNiZGZjYWZkZjE1NGZjOTllNjE0MDE3NmVlYTkyNTAzYjNmNmZlZTVkZmE1YWFkMDVmODAyZTA4YTA4ZjEwZTQ5YThiMzJhNTBjMDI4ZjJiYzdhYTQ1MWJlMzc0N2QxMGI5NmIzYTExMDVjNjdjNTE2N2VjY2RjMThiNGE5YjA2MTJkMDMiOiI2ZDU5YmUxODMzZTc1Y2U3ZjU0ZGRjOTFhZDZmNTE4NyI6IjNlNTU2YjFiMzNjNDJmMWFkNmNjYTY3ZGFiYzZmZjc5ZDZjYjY2NzUyNzMzNTg1OGUyNmNiNGY2YTNkODUwM2VjNDE1OTY4YmE5N2QyZDc5YTNmODBjMWExMGQ3NTE3NGViNTI5NGNjZThiODkyMjRlYmE3ZGZiMjU4ZmIxN2NiNWM1ZGI3YTkxNGFjZTA2ZTk0Y2QyZjJjYWZlM2ZlYmM4YWRjNGMyMjY0YWZhMmRiMmM2MzU2ZTRjM2U4NjY3MzkzYTc3YTBhZmMzNmJlNjc4ZDVjMGE0YjYzYWU4MmQ5OTIyYmJiYzYwNTU5ZjMzMWVjZTk5NDdiNjc0Njk0NjkiOiI2MTVlYTQ1MzVmMWU1NzlkN2FhNDVjMDExMDE4ZjI3MmMyZTIzNGMzZWE5ZTJkMTAyY2ZhYTRhNDM3YzQxZTY0YmRlZjdhMjExZWE0ZDg1OGJkYjY1NjIxNWU2MDA5MTE0MzVlZjljOGRhNjhlODIzOWU0NzgyY2VkN2U3YWRkMDYzZjMzZjViYzYyYjg1ZDlhZTQ0ZWQxYjEzOTU4MDExOGM1ZmMwNTRlYWQwODI1N2IwYTk3NjMyZThjNTAzYzYyMTkyOTRhZjQyM2YwZGViMzY3NThlMDU4NTdlYmIwNWM2ODM1OTcyNDg4MzA2ZWJmZWRkMmNhNGNlM2IyYzQ4IjozMjoiNzRjNmJmMGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOTVkZGFkMmIwZGExOTVlYTU0YTlkYWQwZjg2YzE2MSI6IiI6IjI2NWFiMTk5NWZhYzRmY2E3YzJiMjZjODRlNGEyZGJjIjoiIjoiIjoxMjg6IjkzMGY3MTkwMzRiNzZjMjMyNjE5ZWYyNzkyZmU2ZTY1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTJiZTQ4ZTkwYzg0OTA2MzYzN2IxYzJhYjBmMmI0NjciOiIiOiIwMDIwYzNkZmYyZjZmM2FjYWFhZTk4MmNlMzhmNjNjMyI6IiI6IiI6MTI4OiJjODg5MWYzMmI4MDE1MDI0Y2E0MjUzNmQ2MzNiMTg2MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhlNzkyZmM5MTY3NWQ1ZWZkNGQ4MGQ1YTA2Mzc4ZDI0IjoiIjoiMTVhZDYzYjk2OWY4ZTMxM2VhYzNjNzE3ZmY5YTk5NGQiOiIiOiIiOjEyODoiZGU5YTA0YjAzMDk1NGIwMTQxZGQ3OGZmYzY3MzIzZDYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNjY4Y2ZkNDViNmVmOGI3NjZhNGJiMTg3ZDA4MjRkMSI6IiI6ImExMTFlOTRhNjQyNmFkOWI0MzYyMTMyMDUyZWFkZjRhIjoiIjoiIjoxMjA6IjNhMzMzMWU2YTQxY2FkYTJjY2E4ZTg1NjEzNTU0OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYzNmUwN2YyNjg5ODMyYjkxNGUwYjgxNzAxMGM1MjhjIjoiIjoiNjU0MTA0ZjlkMTYzNDgyMzFlNmJhNmZkMzBjMWYwMmMiOiIiOiIiOjEyMDoiYmU4OTc1ODNiYWUwNzNmNDIxMzhkNjRlNjIyYzM1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjVkODM5YTcwOWQ5OGVmOWMwYzllNzhlY2U5NjFlYmEiOiIiOiJiNjQ1Mzc2MDkwNDA3OTBmZjY0OGQ1MTQwNjcxMGI5YSI6IiI6IiI6MTIwOiI0ZDU4NTRjNjljYzk3M2JlOGRlNDFkNTU4NDQwN2MiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NTdkZDYxOWY5ZjE5NDQ1YzM3NGNlZGE5ZTlhYzA4MiI6IiI6IjM0ODg3YmUwM2I0ZDRjYThlYTIyNjFiNjAwYWIwYjBlIjoiIjoiIjoxMTI6IjYwZTJkNTBhZGZmNzA3ZDhiMjc5YmRlZGIyNzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNWM5YTJkY2FmNTc2ZTY3ODI4ZTgwNjA4MmQ4ZTc4MCI6IiI6ImY5MzczMmFhYzk0NDhjNGE0MjdlNjM0MDg5ZDdlZGNjIjoiIjoiIjoxMTI6ImY2N2VkMWM5OGJkMmM1ZjNhNzM4ZTc1ZjE1YWMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYTMwYTgxNmU4ZDRkODVkNDBjOGU0ZDdjOTNiNzc3ZSI6IiI6ImJmMWYzMzJhYTE5NjgyZDA1Y2Y5NWYyYjAzZDI2YWY5IjoiIjoiIjoxMTI6ImFjZmIyZjc4ODRiYzQ5NmYzMDg5ZTUwZGJmNDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNDVhMTZiYmE1ZmJhMzYyNzA0MTQ5ZGM1NmJhOGExMyI6IiI6IjY0Y2NhODUwNDEyMDkxYmY0ZTEyMGNjZDYxMmRmMzUzIjoiIjoiIjoxMDQ6IjdiMWFkYzIzYWY5YmUxODVlNWFlMGIwZjBlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGNiY2JjMWM3MmFhOTBlM2VhN2UyZmUzMjhkNzk3MjMiOiIiOiIyZmM1ZmQ5NjRiNDUwODI1NDY2MzZhZTFlMjA4YTkzNyI6IiI6IiI6MTA0OiJmZTA5MWE3NjhjNzMxZTU0ZTIyMzdiZmRjNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0Mjk3YTFhZDNmMGMzMzNjZDliMDg3YjFlZmQ0M2MwIjoiIjoiNTJlYzlkYzgyMTMxZDdiMWM2OWMwMWZlZDZhYWRhMTAiOiIiOiIiOjEwNDoiNWM5MjdkZGE4NTViNzZhYjhmYzA3NzIwM2IiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFlOGNmMzIwMDhiZGY4NjdmMGZmNzZlN2Q3ZWMyMWJkIjoiIjoiMzg1NGI3NDEyZGU3MmZlZmNjNGIwYzIxNTVmNjkxMGUiOiIiOiIiOjk2OiJjYzhlN2VjY2MwNTZiMDZjZmZjMzA3ZTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjZTFhOWJkOTNmZGRlMmFkZmQ4YzJjMTZhMzk1Yjk1IjoiIjoiNjQwNzIzMTNlZDM2ZWVmODIwOWYwNzlmYTYyMmQ3ZjAiOiIiOiIiOjk2OiJjZDllOGZmYzE0MjMyNzAwMTViZjhlOGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIxNTM1NGFkM2Q4NzRmZTQ3MjcxOWViY2NkNDVmMTIzIjoiIjoiMWIyMDEzMTUzMjkwZWRlZjYwYTZhNDM4YmQ3NTE3ZGUiOiIiOiIiOjk2OiJmNjVhODQxZWQ1MTBiZWNmNTJiMWVhZTciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE0ZWYxMjk3ODQ3NzY2NDdlYjNmYjg4OTc5MTVhYjllIjoiIjoiZjdiYmU5ZjY5OTE1NjU0OTkzNWYyYjkyYzFkZGExNjMiOiIiOiIiOjY0OiJkZDEwZmE2NGZkNTEyMzFkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZDQ0NzAwNTNjNDZhNTc3YmJhNzAwMDA3NWU5YmYyYyI6IiI6Ijg1NGI3NjhmZGQ3NDkyYzIxNjE4Y2E3MTZiYzg3OTBkIjoiIjoiIjo2NDoiMWYzYzczNzIyMDA2MDIzYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWE4N2Q2NzVhMGQ0MDZjNTdmNzhhMjUzMWJmYzBjOWEiOiIiOiIwOTA3NTAzZmNiMDZlZTM4NDUyNmY3MjA2MTgwYTA4MCI6IiI6IiI6NjQ6IjY1ZDU0NjYzOTJiNjNiZjYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQzZThlMjc1NjhlNmUxN2ZmODA3Y2MyMDdlNWQ0ZWVhIjoiIjoiMThlNTFjZGZiNGEzYTVlYmM3YjBkN2IxNzcyN2FhOTUiOiIiOiIiOjMyOiJhN2UzZjYzNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTk2YTYwMjE2NGIxYTBiYjUwZWY5MWJjZTNhOTg3OTYiOiIiOiIyMDI1ZTcyYmQ2YTUxMTk4MGE4ZGRjZTM0NTY1ZDE2YSI6IiI6IiI6MzI6ImY4NGY5MmRlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMDE5NGI2ZWU2OGYwZWQ4YWRjNGIyMmVkMTVkYmYxNCI6IiI6IjMyZWE4OTcwYThjYjcwZDZmZmIzOTcyYTE0NmM2OTg0IjoiIjoiIjozMjoiZWVmNGI5N2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NjljZTY1ZTVlNWUxMmM2MjAwNzYzNjVmMTQ5Nzg0ZiI6IiI6IjMxN2JmMDdlODNjMmU5NzE3ODgwYjdkMDgwOTU3ZmUxIjoiZWUxODVkNzM4MjYwZGU2N2YxNzkyYTdkNTQ4ZWE3MzI2N2ZiYmI2NTQzYmMwODFmYWM0M2UwMGU2Y2NhOTJkN2Q2NDZmMjcwNTQ4OTQ2NjRmZmRjYmU2MzVlMzRjZmE4MDA5MTJiNTlmZGFhNjI0YjM2YzQ0YzlmZjRmMTkzZDNiZTJmOTdhNzgyMGE2ZDRjZWFiZTk2NzA5MWVmNjcyMDk4YmFmODJkZDNiNjcxY2FjNGZkNGY0YjE0ZTRlZTM4OGZiZGFhZmI0ZGFiMjM4NWRmNGZjYTIzYTc4ZDMxZjExYmNhMTVlZWRkN2NhYzc3ODQ4NDI1ODc3ODEwNmEwNyI6IiI6MTI4OiJhZGQ2Yzg5MTUzYzRjMGVlYWQwM2RmNDQ0ODc3NDJhMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBhMDViYWVlOTI3YmYyM2RkMmY0YjU3YjkwZmI2NDM0IjoiIjoiODE0N2U5OWRjOWU0NjJlZmVhOWMxZDdmMzBiZGY0NWMiOiI2NDI0Y2E3ZmJmMjRjNmMzYjBiNWViOWQ3NjliMjZhOTc5MmM5NmE4NTg1ZGM1OTYyMDhhZTZjZmMwYjI2NWJkOGQyNmFmMzEwMjdmMjc4YmI5MmE5ZTNiMzY1YmVhZThkOTY0ZWM3YTQwOTY1MTNmODRmYTczZjg3MzlmYTdlMTFkNTRkNjc4YmVkMTk1NDZkMmI3MWIzZDAxNjZiMjViNDdhZDdjZmE2OWQ3NDA1N2Q4ODkyNThhNzk2YTY1ZjJiZjhkM2JiMTUxZjRlNzIxZDM5OGU3NDU5NGExODZlNjE4MmMxNmZlNGM4ODEzZGZlYzY3MjE1YjNjNGE5NGMwIjoiIjoxMjg6IjA1ZmFjNTUyMGE5OWFkN2ZiNDA3YzQ4OTk1YTJjMzMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTI4YzQzNTIxMTc0M2E3ODcyZTRhMGJkNzYwMjMzNmEiOiIiOiIyZGRiZWU5NGZjYmZhY2VhMDgwZGVkNDY4ZjY3MTgwYyI6IjYzMTkwZWY1NDI2NTZjYzJiNjlhOWIwZGFmOGRiZDJkMzhjZDc1ZjE3YjkyZDZkODkxYzE3YjAzMzdhZDRmZTQ1MzlkOTE1NDcyMmZhNDMwNzgyYTFkNzk2MjBlOTc0NjYxOTE4MTY2ZTM5YzQ1M2M1YTk4NzU5YTEzZDI3NjYxMzhjNzc1MGU2Y2JkYzdiNmQ3Y2JlNDRmM2Y0ZGU3YmI1NjJkOWJjZTZlNmUyZTgxNTQ0NDg0MmI4OWJhOGI3MzQ1NDIxOGM0ODNlNTc0Y2E4ODZhODRlOGM5YWE2ZjU2ZGQxNTQxYTdlMzVhNGE1YjhmNmEwNWFkNWJiMDEzZTkiOiIiOjEyODoiMmNlNmQ3NGNkYTQ2NjM1NGE3MzY2MzZiZjE4YWNmYzAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYjJiZWMxNmM3ZDMyNmEzNWE4ZTRjMGI4YzJlMzY3NCI6IiI6IjQ1NzNlYjU0NDkxZWQ5MWJmYTIxODViNzYyMTE1YmM4IjoiN2E0YTZiMzExNGRhYmM1MGIyMDE0NzJjNWNiMTNhNzk0MzBmNzhlZWRiMmJhODQ5MmMwMWNlMTBhNzRkMDg1NjViOWJmOTg3NGJiOGZiNzJmNjk0YTIzYmFiZGQwODY4NGNiNjhkN2UwOWU2NTgxMzcyOGFhYTVjNDFmOWMyYjEwZDkyMWY4MjcxZTIwMGUwYzUxOWM3YzQ2ZjU3MmJjOWZlM2YyN2UxM2QxZTZkN2JkYTRiZDY2YzFjNGIwZmVjOGM2OGExYjBlZDdiMDY1OTAwOWRjODk0YWQ1NWUwNzEyZGRkMDgzNzMxNTczNGYyYmMzYjc1NzI0MWFmMzViYSI6IiI6MTIwOiI1ZjVkNDY5NTc5NWI4NTgwYjBiYzQxNGE4MWIwMDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ODZmYjEyNTU0YjA3NWRkOTY2M2VmZDA3NmFjYmU1NiI6IiI6IjdlN2E3MzU0Mjg2OGZjMjdhMDE4NjVjM2FhNjM1YWQ1IjoiY2IyNWMyZjAyOWM3YTg3N2EwYWE1NjVjN2Y3MzQ3YjMxN2FkNTM0ODIxZWRlZWVhODM4OTk2ZGZjNDJiMTM3ODdlNWJiMjM3NTI1YWM5MjZjYThhNmM1MDc4MjEwZjRhMjc4NjNlODExNGM3MjhkMDk2NTNmYTkzYWU5OTBlOTlmMGM4NTZiYzgwOTdjMmNkMzNjZGNhMWE0MDc4OTdlMmY0OTVkMmU3NTM1NmFhYmQ4OTE3MDJmMjVmZjIwZTZiNmM4YTc4NWQ3NGI3OGE3MzRlMzExZmQyMzZmOWU5NzAyMDI2NzQwMDRlZTQxNTE4NzlkNTkzNDBiMjBhYTIzYiI6IiI6MTIwOiI4MjU1MTE2ZWUxZTNjZjkzNjYzMzAxN2M0ZGVjM2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MjBmZGY0YjM5YzYzOTQ3ZDU3YTA3ZWFiYmYzZjJmNSI6IiI6Ijc3NDMxZWJhYWQ1M2U0MmNhN2VlYWQwZDQ1ZTViZDE4IjoiMTFmODJmOWVmN2MyMTYxYmE3M2NmN2RhODJjNTM5N2RhNWU4Mjc4ZGExODBhOTc2ZjQzMjIyNDAyZTk4M2IwNTcxNzFmNzkzNjQxYTgzNDNkNjM2NmQ2Y2M5MjYwZGZlOGJlY2I4Mzk2YjViY2ZhMGY0NjkwOGJkODA5YmRhYjYxMTI2Y2JiOGQ2M2Y2MDE5NjVmYjllNGIzYWZkNjZjNTk0ZGZkMzk0ZDRjZjA2Zjc5ZjM2MTc3MWE4NWRjZWFkNmY0NWRjN2RmMTBmYTQzNDczNmViMTA5YTc2ZmU2Y2RhMzJjNTc3M2Q0ZGI2NDQ5NDk0ZjJhM2Y2Yzg4NGJmZSI6IiI6MTIwOiIxMjkxY2JlYTFhOWY4YjE2NmM3MzA2ZmY5ZWIyODEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMTQwNjA1MzRmNTI2ODk1ZjMwZGZiNDAwNzM1NmVhNyI6IiI6IjVlZDdmYjU5NjE4ZWMzZDA4MWU2MGQ4MjU5YTNmMTg0IjoiYTU2NTY2YTk4ZDlkNGZkY2ViYzkzMmFkYzQwNWUwYjgxOTBkNTM3ZjkzMTk4MzE2ODI4M2QwNDMxZTc1ODkzMzNkNDJmMmEzZDZlNDFmMjY4ZTdiNTY2Y2Y0ODY5NGNkY2ZlMDFmYmI5MTk4ODA0YWQzOWU3ZDM4NzAzOTU3NWM1ZGU3ODc2MTBhMjNlYzI2NTUwNWE0NDhjM2E2NGRkYWMxYjBkOGM1NjdlZWZlNWMzYzJkYzFiYjE1YWY0NWI0YmQ4ZmMyZTE1MDZkZGViMmUzOWUwNGY3MmZkMjRhNjRjYmJiYzkyOTgwMGUwNjg3YjUzZWI4OWIzMDQ5ZjI3MSI6IiI6MTEyOiI2MmY3NzBiMzk4NTM4OGFjMzdlMTRlOGQ0Njk2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjk3Y2E0ZTlkZTU4MGI1MjVkNzE0OWU4YjY5ZTgwOTMiOiIiOiJlODQ0MTUzNzM0ZWFlYmQ4Njk4M2FhM2JmNTAwNjhkZiI6ImNlZGNkNWZmZWI3OTg4ODM3YzM4YTBiZTQyMzRhYjFiMDNmMTQzNjdhMWEzODU0YjZkYzlmMzNlYjlhODdjNDExMzI2ZTVjYjdkMTJkYzczMGNiNmYzNjNkYTJiYTY4YWZmZGZiNjUxZmU0OTc5NDJlMGRkNTk2NjhmNTZjMjNkYWU4MGI3YmJmOTA1ZDM2YjUwMWZmMDM3ZmNkZmZhNDcyZWZhNGJjYzFjOTc1YjY3ZTVkN2YzNDhkYjczZTBjZTY0OGI0NGVjYzViNWJiYmRmMzEwMWJmMzJlYTk5ZTNjOGU4OTkxYzk0ZmE2MDljOTNkNGIzNzVhNDM4OTAyM2IiOiIiOjExMjoiOTViZWNiMDRjZDM5Yzg2OGM5ZGJkMWQ0ZTU5YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJmYTkyY2M5N2VmNDY5ZWZlYjJjMjU4MzgxOTM0MzVhIjoiIjoiMDdlNjQ5MmYyMzc3YzA0YTg1MDQ1ZDI0OTQwZmJlOGYiOiIwZjAyMWZiNzg3YzZkZTJiZTA1NGJkYjI3NDFhZWY4MmNlMzVkOTUxZGUyOTg2Yzg2YzNkYWM3N2VlMDgwNGRmYmQwMTBkMzNhNWRjYzEwOTc2OWQ0YjhmZjE0NzFlYjk4ZmU5MTdjN2IwYjM3NGU4MDUzOWYyZjQ0MzJmOTJhYTU1ZDgzOThhNzE1MTBjMmFjZjg1YzU0OTc1ZmIwOWZmNTYzOGI5MzYyODNlZmEzYzFkM2IwNTQ4NjVmOTc2ODVkNmJmYTBkZmNmZmRlM2EyMDUyNWI1MzI0NTczYjY5ZGRlMjMwZWE4N2M2ODVlNGY2YjVjM2M0YzU1ODI4YTg2IjoiIjoxMTI6IjM5N2IyYjBkYWQ3ZjE5MjZiZmMyNWEzYmEwY2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNjFmOGE1Nzc3ZWMzZGEwYzNlMjU3ZDQyMTI4NjY5NiI6IiI6IjE0ODk0Y2M0ZmY3MWUyNDlmMDA1M2JiYzE2ODAzMzFmIjoiOWRmNDZkZGUyNTcwNTQxNjA4NTQyNDhlNzA2MjUxODNiZjk1N2VjZWMzNmZhNGY1YTc5YTE2NTBlMDRiNTAwZjdmMmZhYjRiYjg3M2YwZTgxM2YwZDZiMTc2MTBiZGUwZGU5NTQyN2E4ZTJkMTI5M2RjZGRlMDUzZjViMWE1YTgxYWYyNWQ1NTMyODllODllNzdlNGFkN2QwYTExOTAxNTE3MjQ3MzAxNDkwNTBiZDAyMWVjNjFhMDhjZTIyNzEzOTAxNjFjNzUyZGY4YjVmNjFjMzNlZTM5MzY2ZGU0YzFkYjQxZDA4NWFiOWRkODhlMTcwZThjNDFjNTcxZTJjZiI6IiI6MTA0OiJlMDYyYWI3OTg0MjIxZWQyMjZiZTM1MzczMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFhMmQwNGY0ZjUyNThjNjM2M2IxMjEwYzkxYWZmN2QxIjoiIjoiNmIyNGMwMzI3M2RjZmQ1MDhjZWFkMmRmMGM2NWVmMmQiOiI4MWExYjMyNmY4ZjIyYmZlY2RmMWYzODZiZjhmZTY3OGE0MjdlMzg4NjgwMWI4MjNhMzc4NjBiOWE4MzIzNTY3MjRiMWQzNTJkNjI1MGNmOGU4Zjg5ZDBiZjIzMTRmZDExNDY0YzNiNDg3MTQ3OGYwYmMyOTBlZTEwOTZjOGY2Y2I1NDg0MTc2ZDcwNzYyMjg5YjQ0MzA5ZDZhODhlNDc1MDE4NWFiZjMwOTAxYmNmOGQ5NTJkYTlhYmFhZjk4MDdjMGMwZWU4YmUyYjI0N2RiYmZkMTgyYjgzZjliZmE2N2NhM2JmNDQ4YzNmNWEzZGUzYzMxYjA1OGMzZjk0NGE5IjoiIjoxMDQ6IjgwZGVlMDlmZWQ1MTgzZDY0MDViZWViMjY4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2YyMjFlNmNhZGU5ZjZjZjUwOWFmYTY5NzljYzFmYjkiOiIiOiJkMzU0MzNiZTQxYTI1OWRmYWY1OGFhYzFkODJhZjQ2MiI6ImIzMWM0Nzc0OTBlNTYyNGM0YWFjOGU1OTA3MjViZmE4YjNlZmNhNjE4ZTIzNjllOWI5ODBkNmE0NjNhMDE0ZDU1YWE4MzE3YTllNzBjZTZkZTdjNTc0Y2QxNTI0MmNmNGViM2ViMDc4Y2QyZjQ5ZmQ4MmQxYTU2YzZjNDI0MTM0MmU2MmEyZTlkOTRmMGFhYTAyNDA1NWNiNDQxZDY1MGYwYTZlY2FiZmU5ZWY1NjNkNmJkODdkNGNiMWJlZDM0OGFlZTQyNDg3YzEzYjczZTUyZmI3MGYwY2E2ZWQ4MTkyNGZkNTE5ODA2ZTA0YmFiZmQwOGRmMWEwMDE5MWNhYTEiOiIiOjEwNDoiZjE3NzZiMWVlN2EzYzQ5Zjk5ZjM0ZjU4MmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM5OGViNjM0YzdjYWY1MmQzZjNkOWYzNDRlMTQxOTg4IjoiIjoiYTBlNTgxNzY4MjY5MTBhNjljMmQ2OGFlMWM2YTA1YzAiOiI2ZTU1OTI3OGJjNDY5Y2M2NzBjNGQ5MTA1YzNjMmY4ZmEzMDhlMTFiNGE2MGY3NTY2NGE5YmZhZmY0ZjAxNzYxNzVkZGQzYzZjMTdmZjkxYTIwOGRiYmM3YzQ5ZWZmZjA5OWZhODczZjYwODQ5ZmZhYTNhMzAwMzQxOWNhZGFhMDZiOTJhNjc4YjgwYmY2Yzk1MmJiYmU1OTZkZDBhMmVlZDM1NTA3YzU1YzQ4YTllNjEzMWJjYmRhMDYyMWNmZjg3ZTAyYmU1ZDA4Mjk0NGYyYzhlMjcyMTE1Mjc3MTcyNzI4Mzk2MDFiMGUyNmNiNWFhMjMwMWFmZDA1YWUxYjM1IjoiIjo5NjoiM2Q4NjE3YjJkYjUzNmJhN2QzNjcwMTNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNTAxOGY0YThlMmE4NTA5NzliMDA2ZDA0OThkZDBmZSI6IiI6Ijc1ZTRiZWJkZDE3MDE1OWNmZjU5Zjg5NWViZGViMTE4IjoiMjVlZDI4MzFmZWYyMDU2OTAzODFjNzNlOTI1ZWY3YmEyMGQ1ZjJlM2E0YjVkN2JlYWJkNzQ5ZmFmYTA4YTY5NDFhY2IxMzg1YWVkOTc3ZWE4MjQzMjJkMzc4NjQ5ZjY0NmE4MTJlNmM4N2RlZDZhZTQzN2M2OGZmZGQ0ZmFlOTM3YTg0OThhZTgyNWQ3NTIzNzQ2NzMwYWY4NGQ1NjM4MGJlOGY1NzVjNjBlN2Y4MzZhODYyMzQzOTE2ZTk4Y2MyYWE1YTI3Y2Q2M2NkOTJkZjYzYjhiYjQ3YzgxZmE2YTUzNzQwYTEyNWJiOWNiYjI0N2M5MTYzNjNlNjBmNWY2NSI6IiI6OTY6IjBhYTVhY2VkOTNlMDIzN2JlYTlhMDAxNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2VmZDQwYWVhYzI4ZmJlYTZlMzM0M2ExMjVmZTFjOWEiOiIiOiIzMjRiOTcyMjE2NmVkYzM4MzFiZDE5YzFkYjViZmJmMiI6IjcyYjdhNDI4OWJmN2Y1YTc1MjY2NTgzOWFkZGU4Zjc5NjQ0NDI0ODM5ZGIwNTljZTQwZGUzMjY0MTRjMDk2OTFkNWM3MDcxZTQzNzIyMTA0YTk0ZTQzMGUyNjNiYzk3NGI5OGYxNjdjNTBiOTc0OTBiY2Q0Mjg2YjUwMmY2MDdkZGNlYzUzODc2OTU0NjMxNTRiZDk1OThjZThmZmI2MTA0ZDFmNzAxMGJjMTk2ZWEyZGNiZmJmNDUyZDYyNTdiMWRhMDAyNzFmZTFlNmZiNTZjNDM2NTZkNTU3MGI5NjVlMDM2OTUwMjQ0MzUzNmNjNDZkNGMwNWIxZTg2M2VkOGYiOiIiOjk2OiIwYzZiMjhkZTIyZTAyZmU2YTQ1OTVkNWYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU4Y2I3Y2I1ODUxOGZmM2ZlY2VhNGI0NGFkOWZkZWYxIjoiIjoiZmU2MTllZmIxYzk1MDJjMDNjYjhhNzA3OTJmOWUwNDYiOiIxYTdjNDQ0YTg0MjY3ZjUyYzM2ZjNjMDlmOGM0YTg4YjZmZmUzMzA5YjhlZGFhZDkzYTA4ZDM5NjFhZjI4YjdjMmJhYmE1MTY1ZjBhOWVmZTEzZmE2YTBhYzU5NWRhMTU2NzQxZGM3ZjcyOGMxMWVkYmQ4YWIwMmYwM2U0NTcxNmJlNTA0Nzc4YTc1Mzc0ZWU4ODJhZjQ4OGJmYmM2Y2RkNThmZDgxZDNhYzVmMzY5Zjg1YmE0MmM2ZmQ3ZjlkZjRiMjVmZGQyZmQzMjYwN2VhODAwMDQ3ZTA2MDU4Mzg4YzRmNzFhNWViNGQ4MjVlODU3ODEwNjA0MWM4NGMyNWExIjoiIjo2NDoiODI0M2YzMjAwMmQzM2NkZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTVjYzRjYjk3OWEzNDNmNGFkZmI4MjFkNmY2ZTljNjYiOiIiOiI2ODQ2NGU3ZWI2NDM2MGM3YzBhODU0MGFjMzQ3MzUxMyI6ImQ2OWY0YTk1OTVhNDhhNTBlYzMzYWMxODQ4ZGYzZDk5NGVmZjgzOGIyOGVhN2M4YjJjNDI4NzZkYWRkNjBhM2Y5NzY5YmQ0ZjYxZDgwMDdjOWRkNGZkZTU1ZWRjZWM4ZjVhYzNiZjIzYjFhOTU4ZmE3MTRkZDg4Y2Q1MjYxZWRiNjliN2IwODZlZjBmNDQyMTc5OTQzZjA4NzFhNjI1M2FhZTk5ZDMxZmRjYTQ0OGJjM2VmZWYzNTNiNWNjNTVjZmM1NzZlNGE3ZmI3M2E1YWI2YjVhZjU4ZGJkMzgxYmY3ZjlkNjlhNWMyYmZjOTAyOTAxZmQ0ODU5NjdiMjNiZDkiOiIiOjY0OiJjMGY0MzAyZDgyNzZjM2QzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2Mzk4ZGU5MTBmZjhmM2FjZGMyMjE3ODExYTFkYTJhMSI6IiI6ImZjNjliMjFlYzE4MTk1OTAxZmZhNjIyNjBmYTIwNDU0IjoiMDIxZjIyNTI0MGNjOWE2OGM0ODg2ODI0ZDM3M2YzYTcwZmEzMmIzYTkyNmM3ODE2NDY0MjQ1MDI4N2QyNjlkMzlkYmQ0OWM4YzcxY2U3YjkxNGY4M2U4YjUzYmM2MWM2NzczZjk4MzE4NTU3YjQ1ZjBjYzJlZjI1Mzk5MzlkZjdhMWU2NzY1MTE3Zjc1NjMxZGM1NjQwMjkxZDIwZTY0MDJkMjJjZDJlMjMxZjljMmM2N2NiMjRhYjVkOGE2OTkzM2M0OWI4OWM5ZmIyZWE1NzEzNmE2YmYxYmZmZThlMDRkOGQ2YzgxMzA0MDIxNWYwNTFjNjU0ZDkzMjI0ZWRmYyI6IiI6NjQ6IjMxNGQxYTMzMmQzYzU5MGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM4MmQ4Njg2OGNjZDA4ZDQxN2Q5NGYzYjczNzI5ZTA5IjoiIjoiMDY5MDY5YzM3Nzk1ODIzNTE3MTQzN2IzNGUwZmNlNzYiOiIwNDlhZjM3MmUzNGVmN2E5MmQwZDQ5Y2YyZGQwMzA1MmRhYmFjZjI5ODJlYWU2YTgxN2U2MTQ2YWQ3OTk5NzFiZTIzOWVmNTgxMGVjM2Y2Y2M2OTkwZTk2NDFhN2I2OTYzOTJhZDNmYWVlMzhiYjUwNzQ2YzFlOTM5MTNjMDJkYmJjYmM2YmY1NGYwZDA2MmYxNzY3NzliN2MwZGQ1ZDdlYzc3NTI2MDFjOTgxMmZhODA1MDhhNzhiYmQyNjkyMmJlZDRmNjRiMWZmMmE4MzQwY2UxYzAxZTMxN2UzNTI2Y2Q4MjE4YWMyNGFmODdiMDdmODc5Mjg0OWY2NDc5YjhlIjoiIjozMjoiZmZhNTlmYTIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIxMDUyYjJmYzdiYzdhNjYyYWE5ZGM0YjZhMDRmMjVkIjoiIjoiZDdlNTQzMmRlZjZhMjRkNDg2YTYwOGU1YzVjOTE5YTgiOiIxOTcwZWQ0MDAwM2JjY2FiZjdmM2M1N2JiZTViYTI3ZTQyNTRjMTUxMTQxM2VkNDIxY2VmM2E2ZmZiOWYwMTkyOTg3ZGU4M2FlOTY1NDc4YzNlOTk3OTYzN2Y4YjNmYTVkMTBkNjliOTE2ZjAzZmRjOTJhY2U3NzM2ZjE3MTY2MDE1NmQ4ODAxMTRhZWZkY2MxNjRhZGI2ZjhjMDM5NDBkOWI0M2NlODg4MTQ0MWI0MWNhZmVlMzM1MWE1NmZjYjYzMmFhNGIwOWVhODFhZGVhMjZmYjBkOGM2ZTFhZTM4MGRmOTIyYTQyOWFlMWY1YjgyYjM4ZDliZGE0MzIzYzUxIjoiIjozMjoiZmYzNDJmNGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI2YzUzYWE5MWExMTVkYjY0NjUzMDE2Mzc1YmQ3NDdlIjoiIjoiODE2M2E0ZmQ5YzJjNzAxMGJjODVjODYxNzdiMTk0YWIiOiI5M2NkZGQzMThiOTk5MjYyYzdjZGUyODM4Y2I1YzRkNzhmM2ViMWU3OGQzMDVlNWY4MDhmYTU2MTM1MjZkNzI0ZTg0YTAxODhmZjQyYTJjMzRiZGYzYjVmZmY3MGU4MmIzYzMwMzQ2ZTE3OWZiM2ZhZjM3OGJjNGUyMDdlMzM1YTQ0ZGE1M2E1YWUzMzc3MDEwNGI5NTM5N2ZiNWFjYjc0NmU2NDE4ZDBkZmM3MzY4YjAzNWFmNTNiNDcwZmM2NmJkMGMyMTBiNjhjZTFiMjc2ODIwYjYyMWU5MTlmMDQ0ZTVjZmY1Y2VkN2UwN2RiYjg4MjViY2E2YjRkZGQ4ZWUyIjoiIjozMjoiNTBiOGFjY2UiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMjUxODE1ZjViZGZlMTExMWM3ZjljYTI0NjY2MmY5MyI6IjIyNDdlNzgxNzYzZWRiMTM0OWRiMmNkYTUzZTU4NTNiNzI2YzY5N2IzNDQ5Nzc2MTM3M2MzYjZhMWM0NDkzOTIwN2U1NzBlMTRlYTk0YmQ1ZjliZjliNzlkZTljYWZlZGVhYmM5MjQxZTkxNDc0NTM2NDgwNzFmMjI0MGUxMDQ4OGM2ZTNkNzA3Nzc1MGE2ZjdlZGUyMzVkNDRjNWE5NjM5Mjc3OGVjNTFmOGFlYjFhMTdmYWJlOWI2Yzk1ZmJjNDc5ZmZmOTU0YTY3NjgxM2FkM2QyZjcxYzc2YjlkMDk2YTA1MjdmMmUxYjE1MWFhODk3MjE0NzU4MmMwZmQyYmYiOiI1ODk3MzI4MGMyYTcxMjJkZGZjYjI1ZWIzM2U3MjcwYyI6IiI6ImIyMDJlYjI0MzMzODg0OTYwMGUyZmViYTdmMjVhMDVmZTk4MzIzYmQ3Y2I3MjFhYzQ5ZDVhODEzNjQyMjU2NDM5MTQ2MjQzOWZkOTJjYWFkOTVmYzhjZGNhYTlhNzk3ZTFkZjNlZjZiYTdhZjZjNzYxY2VhZjg5MjI0MzZkZDVjOGIxYjI1N2Y4MDFjNDA5MTRjMTMzMWRlYjI3NGM1OGVlZDEwMmZkNWZhNjMxNjFjNjk3ZTYzZGM5ZGZlNjBiZDgzY2VhODg1ZDI0MTk4M2E3ZTVmMGQ2YThmZDAyNzYyMDg0ZDUyYmY4OGVjMzVmMTU2OTM0ZTUzZGZmYzAzOTUiOjEyODoiYzM3MDFjZTMyODRkMDgxNDVhZDhjNmQ0OGU0Y2VkOGMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMTk5YjcwZTcxMTVjNzRlM2FhMzc0NWMxOGZjZThkMSI6IjRmYTBiMDkwNjUyZDVhOGRjZDliNWYyY2VhYWEyZGM4N2E0MGIzMGUyZDU5YmRmZjA5ZTFmMjA0ZDFiOTAzNzFkZTcwOTM1YzM4NWNmNWI0ZDdlMGM0ZTg4NjYxZjQxODcwNTM3MGI5MDFiOTdiZjE5OWIzNjZlNjY5YmM3Mjc4ODJkNGFlZGY4MTcxYThjMzk0MzFmMTFhZjgzMDM1OGNkMGQ5ZTExMGRhMWEwY2M2ZWY3MGVmYjI1NWVmZGFjMWRjNjFlNzIyYTJkOGI3ZmI0Y2Q3NTJjNjM1MGQ1NThhZTFjY2QxYzg5ZjhiYTQ0YWI2OTdkZjk2NjgxZWUzMDEiOiI4MDhhMDE5ZjdmYjc2MWU5NzAxYzBjNGYxYTE2OTBlNCI6IiI6IjhkNWVkNDE0NmZiNDkxZGI5NDU2ZTkyZjc1M2FhNGY2ODhhOWJjMjc2ZTZhZWJiNzgyYTBjZGY3ZmU1NzhkNzRjYTM5NDZmYTdiNzg5M2VmZjYzNDVlNjQyNTFjYjFiMTQ2NDQyYWNiNjQwNDEzMjRlMjg0NzQ4MWZkNDM4OGIxN2Y4MzIwNjk0OGU2N2MxZTY2Yjg5NGQ1ZDQwZWNhYzBiYmU0ZGIwYzZmNThiNjVhMWYxOWYyOTQyOWE5ZTc2Zjc4ZWY1ZGJhMGM5NGQ4OGRmYzA2ZTYyMjJhNTA2ZjAwNGQyNGNkYjNmZTI2ZDZlYjZlMDhlNGZkZjYyODk2NTEiOjEyODoiOTA4ODA2ZDY2ODQ1MWQ4NDliYTAyNjg1MjNlYjBlNGEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MzgwNWNlZjg0Y2E3ZmNmMjgxYjIyNmMzYWUzNzIzMCI6IjU0M2ZkNjRkMTQ1NGVmNmMwMDdlZTk2YjNmZjVkMmU0YjdmNWQxNWMyM2U3NTQ4ZGZkMWRmYWQ0ZGE3Nzc0Yjg3OTVlODE3ZmFiM2JlN2ZiZjhlNGQwZDM1MWE3NDNlYTc5M2Q5ZDAxMzg1YTU1MmY3OGVkZTA1NGJlMDc5YWViZDE1MTEwMTNkZTIwOTY0NTZlOWZjMWI4MzQ1N2ZhMTI0MGNkMzljMTc0NDBkNGI1NWM0ZTM5MDExOWE3NTkwNTVhYzg1MWEwMmVhNDgxZWI4M2UyOTQ5MjJkMzVmNjg3YTU2ZDgwMWVlZDYzOGQyODkzNTBlMTQxMTE2ZmZiYTgiOiIxYWE5ZTc1ZDc4NTQ1MDlhODVkOTk1ZWU0ODJiOGVjYSI6IiI6Ijk4ZGI5ZThlM2ZmMjNmMDllNTg1ZTUzMjZmNTI1ZTRmODM1MGExZjIzM2EwYWViZDYwZDU5NTE1ODNlYWY1MjIwZjE2OTBlZTM2MDdiYTk4Y2Y4Y2M5OWE5MGVmYjcxOTc4MzU5NTdmMmJkYTkxOGEzMmU1MjhmNTVkNTQ4ZTNjODNkNjU5MTBiOTU2NjM0MjI0Y2Q1NDE1ZmYwMzMyYzE2NWQxMjQxZjdhOTM5NzY2NDllYmVkMmNjN2U2MmFkZGI3NjIzMWJiNzM4ZWU4YTI5MWI2MjM2NTk2NTM5MmFlYjcyYWNjNWYwZmJkMmY4OGY1NjEzZmNmNDRhMWIwNzQiOjEyODoiOWIxYmFhMGIzMThlMWY2ZTk1M2E5ZjkwYjIxY2Q5MTQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZWM5MjQ1ZThmNTY3ZTFjYzg3OTViYmY3MmYyOTk5YiI6ImYyNjZkMDA2MGQyOTAzMzlkZWY1ZjZkOGRiZjdkMTIwYTRjNjQ1YWE5MDQ3MGUxNjhiNGYzNTM0MmEwMGI4YzdiNzIzMDAwMzY1N2QzNzdkODU2OGQyNTI3NjVkZjE0MmU5N2E5ZGJmYjk3MTFkOWNjZjM5NmYzZDUxYmQ5MTY3M2YxMjlkNThlZmQ4MGFiODNhMDY3ODMwM2UyOWEwZGJlYjFmYTlmZGI3ZmJkZTU4NmExN2FjZTY1ZTg5NDM3NGVjOGRhMWNjZDNlMjE4NTFhYjk5ODUzNGRlNDZjYjQzYjM4ZTI0MWVkYzA0YjVjNTcxZGZjMGFhMDA3NGQ0ZmEiOiI0MTM2MjhkOWZmM2U0MDY3ZDg0MGIwYWJjMmNkYTBlYiI6IiI6IjE0NWQ4MzA5MmEyNjljOGFmZWE2MDRlOTE5MmI4YmI1NTBiOWJlYTg1Zjg0MmZjYzQ5OTdjMmIwMGM2ZjNjYTQ2MTAwZTgxNGU4MjM4OWYyN2E2OWExMmQyOTM0MGM1ODI3ZTYwNzY1N2EwMGZjNzJjNGRlMzAwNzllMjM3NjA3NjllODAwZWU0Y2U0Njk1N2Y4MmQ2MTkzNWQwN2QxYzcwZGNhODM2YzE5OTY5ZGZkMGZlMGVhNzQwYTUyZTJkMDliMWM5YWExMzdiNWU4NTI3NzU2ZmIyYzIyOThmODQwMDk0OWJhMjRhODM1MWMxMDkzNjI2NzIzYTY4YTc5ZjUiOjEyMDoiYWQxNzRkMWVkYzcxM2MxODdhNTg1OWEzOTBmZmY4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjA4ZGY0YWNkMjUzZjlkZDRhYmM1MmM0YmU0ODgwMTUiOiI4MmY2NjU5MTBkODUzZmQyYjc3NWJmNjZhMTcwNzkzNTQ0MzU3NGM5MDQ4M2ZjMzNiYTAyZDY0NzlmYWZkOTljNWY4MTZiYzU4YTEzOTNhNDRmYjMyNzExZmJlYjBkNjkzNmVmZWIzNTgwZjE0N2MzMDE5ZTlmMmUyZWY0OGIyMDJiZGQzNjljMjc3NzkxYmNlNTI0ZjNiMjJjZWI3NGM2NjQxNDNjNGIxZGE4MTliMjI5YTViNDgwYWE5NTRiZTExMGNhMDA2NjE1ZDljZmY1YTE1ODM0MmE0N2NiNmQwNGZiYjgxN2FlNGRkZmY2ZDRmODZiNzQyMDU3OTljOWMwIjoiZTFjMjdkMzU1MjBlYTUyN2Y5YTJjZDliMGY3MTc4NDEiOiIiOiJmNWIwZmNkODEyMDYxYmU5OTk5MDE1OTViMzU0N2U3MGY3MTQ0Y2M5ZTBiMDA5ODI2MmJlNGM0NDBlODYzN2FmNzgyZjUzNmY1NzE1MzRhNjU4YWQxZmI0NDM2MGQ5YzQ1NGQxMDAwZDY5NTdmMjYxNDAxZTA5YzBmMTlmNTE0NmVlNTQzM2UzNzg0MjNmOWM5NGE5MGFmMjE4NWQzOGNiZTI5NDBhNDU5ZDg0MDlkOTg3ZDA0YTFmM2U2ODZjMmI5MWQ0ZmFlMWYzZTNiZGM1YTMwNTY5ODM4MjAxYjdkMzBjNzMyMGQ3Y2JkNzg3YmZkNmNkNDBlN2UyZDA3MWExIjoxMjA6ImZhMzFlNThmYTMyZDEyMDhkZDhhNjdmZWQ0NDAzMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjljMDhkNmVmYjE2N2JlYjAzNWY3MTU1NGY2NGMxMmNkIjoiNzA0ZjU5ZDUyMDIxMDhiOTQ5MTcwNTMyYWMxZTc4ZWRiMGUwNmZhMzIzYzFjNjkyMDJkN2QyMmRlYTRkNzM0MjE5OWNlYmU5NDllOTgwYTIxZmYwZmFjMjgyYjg2OGNjMzFmZjRmNjY3NGMzOTNjMGYyY2FlMjM3NDY2NDMxNGFmYWY3NzkxOTc0YjZiZDZhZjI2YWRlN2ZjMjY2YTZjZDJkZTRmM2MxZjQ3OWY4OTVmZjU5Nzk5OGNjOGI5MjljMWYwNWRiMTNkOWI5YTRkOThjOWJjNjA2ZWVlMzI5MTViYmRhZWVjNjU3NmUxZmE2ZThiMjJlMGJiMTA5ODA3NCI6IjYwOGQ1NmY2ZGVhMmZkZjE3NWVhZTE4OWQ0MmE4NWZiIjoiIjoiMmM3ZDI2MTg4MDhhZGNmOGVkZjVhNTQxMTk0NzFiOTMwZTA3NDg4ZDVmYWMzZGNiNTNmNGFkZTQzNjc0ZDE2Mjg4MWJlZTFmMjdkZWE2ZDE1OGIyNTRkNGI0MzJlMTdmMjExNTE1YmY1OTVhOTg3NGQ4OWY4Y2Y3NDhkZGFmMjMyNDA3ODAyOWM2NDYzMzEyYWQzMmViMGFhNWViZWZjMzFjN2ZiZmQwNGIzN2JhNmI3NjYzNzU5NTJjMjExZDE2MGI5NDNlOWQzYzVlMTQ0YjU4MTE1N2JmZjkwNzFkMzFjZmMwODJiNTVjNGEwZmNlZDM4NmVmMmZjNzVlMWE3YiI6MTIwOiI3YTFhZTAzZTI4MzgyOTRlMjg2ZGNhNGZiYmQ5ZjEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxOTJkYmZkZjg2ZTQ4YmYxODcxMGU3MDZkYzkwZTM1NiI6IjFkN2M0NWM4ZWY2ZjlmMDczYzdmMTg2ZTRjODc2YzJiOGZiZjIyZmVlZWNkYzExMWExOTA3MWYyNzZlODM4YWIwNTcyYzlhNjhlOWFkNDY0ZmE4OGJhOGQ4YTE2MmU5ZjVlZTFjNDk4MzM5NWE4OTA5OTAzNTc2NzM0Njc5ODhjMDU3ZWI4YTAzNDJjNDE4NjdiYWFiNDE0NTZlZGMzOTMyNTMxZDFjNGFhMGI0MmNlMmIzODhkMmJlNTc5ZGZlMzMyZjQwYTliODY0YzVlMzNlMmIzY2ZkNzNiNjhkNjVjNGRiOWVjNDZkM2JhMTU4N2E1NmNiNzg4N2RjYjNjNWUiOiIxYTUxMWY4NWUwZTEzOGY0MjQxODgyYzIwNjg5Zjg4MSI6IiI6IjNlNTBlODIxZmJmODM0MzMxNTVkZTdiNGViM2M5YTJjMTQ4YjA4ZDlkMzk5OGEzNDg2ZjUxN2ZiNWQwYTEzMzhmYWFiYmY5NWU4NWZhOTE4NjM4NWJjYjllMjZhYWE1ZTQ3M2QzY2M3YWY4Njk4NzJlNGZiMzZhZDE2YzU0NjhkOTk0ZTljNzFhMDlkZDI4Njg5NzdmM2Y5MDY0NjY0ZjZmZmNiYWMxYmQzMTNhNzgwM2MzMDQyNzNkNjlhZDIwMzY5YmFkMzZhZGViMzg0ODA1NjNiYzZkYjlhYTBkMTFhMGUwM2QwOTczMTE3MWMxMjI5YTc1NjAzN2IyYzI4NWMiOjExMjoiOTM5M2VkZjA5MzQ3OTZlYjk3YThjNTEzYmJmYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRhZjk0NTViYWQ4YmVlOTA1YzZjZDQ2NDY3N2I4MDNmIjoiYWYwNDIyNmNjNmViODRmODE2N2E2OGMyY2ZkZTMzYTE1MjFkY2JlNzgxZTdiOTdhM2ZhZTczMmJjZDhjMDYxNmE1ODgyMDAzMjg5MDJmYWE1YTY1YTI3ZTc2OWE3MjBkN2VhMjMzMzNjYzFjNjZjNGQ0ZTRjNTNmYWNjYTVkNmFmMDZhZWE3ZmI0OWIxMmIwNGNkNmFlMzhmZTI4ZDcxY2Q2NmY3NjlkNjQwYmVlYjA3ZjUwOGEwZTNmODU2OTAyY2JmZGU2OTE5MDc3ZGUzNzhjZjA0ODZjZjE3N2Y4OTdjZDBhNTZiNjlkYjNhMzFiNDQ4ZWJiZjhmZGY2MzczNiI6IjZjZmU4NDkwZTg5MmY1ZGRiYThiYmQxY2Q1MjJiYTBiIjoiIjoiZTU2MjJjYTczNjAyNzJhMzNlMzBmN2ZiZWFhMDA5NTZlOGFmMGQ4NzFjNDMzYzA3MGM4ODU0ZDgxOGVhYjk3MTcyOTNlODQ1MTA2NzcwZWMwN2RhMzcyYzc1MjY2MjM5YTIyNWFkNzQ0NjVlMjU1NTIwMjE4YzY3MzZlNTEwNzA0NzdkNzA5NzZhYTdkNDQ5YzMyYTVjODViYmQ2OTMxYzc2ZTllNDM1NWY5Njk3YmFkMmVhM2JjYzBiZTAwNWRhMTVjNjJkYjIxOWIwNzRiNzFmZTRhNTUxMjE1NzE0M2RmMmMxZjcwYmIxN2M2ZDM3NDBkOGQyMGVlZjg4NTM1ZiI6MTEyOiIyNWZlNmM5YjIzMDNiNDBlZDMxZDFiZWVhMzlhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODJkMTY2ZGRkY2JmNGY3ZjY2YWE1YWM2YjEyNTE2YmMiOiI3ODgzZjRmOTZjMGVmN2Y2ZDlmZDdjMmVhYWQyNTk5NTk0MzA3ODU1OWViMjRhM2U2NjUwMTI2ZGRhYTMyMzAxYjA0ZjczN2RjMjdiNjQ4ZDYxMTVjZTA4ZmVhYzg2MmNiODg4MDczYjIyYWE2NDhjNzUyOTM0YmI3ZjljNTY2MjA5YTk3NDk5MjM2Zjc4Mjc1OGQ2ZjZmOWEwMTJhMmZiNjg4NWNhOTE4NThmOTc3OWNjOTM5NTBiYWE3MzFmMTg3NDYyOTM1MWU2MTg2OTM1NDc1YTIwNTkzZjY2Y2RkZWZmZjg5YmUwZmMwZjliNTc2OTViMTQ3ZDlhY2Q4MTU3IjoiNTQwYzJhMDc2ODliZjMxNGJjOGVkZTcxZGYzZjQzNTgiOiIiOiI0NDgwNmU3NmE0MGJiYmMyZGU4NjBjZDM2ZTkzZDY0YzlmNGMxMTk5NGY3NTRkYjZhMjc5ZDZlYWVjZmRmMTk5NjY1MTJkZTUyMjNkODMzMmE0MDczODExMTRkNTBmYWRiMDNlMzNlMzQ3YTVmNGQ4N2MzZmJmMzVmMmQ1OTY3YmEyOTUwMDNhMmM2YzEyZmJhODM5NGFhNWI3YTMxMzY1NzkxYzYzMDczNGE2YjJlZjg0ZWVkMDczOGNiNGJjMjI5ZTkzYzRlODUyOWFhZWFkZWNmZjdhYjkzODg3YjlmYWQ1ZjA1YTg4YTViYTlmYjQ0OTA1M2NlNGM2Mzc1ZDFmIjoxMTI6Ijc1NmQ2NWMxYjhhMDQ0ODVjMzk0NGUyYTNjYmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MWMxZmNhMzcxOTY4NTEzYTY4YWMwOWE3NDU5MDQyZCI6IjE4MmNiODljOTQxNzFiNjg1MDE2YmFkNzZjNDQ1Y2M0NTYxYWZmOGUzMTcwZGQyNTFmNjJlZmJkNDQ5MTBkZGY4ZWJhOGE2N2RkMWEyMzdmMmY3MzM2ZjQzNmVkY2ZiZGY5OTI4ZTk0YzM0ODgxODkxMTBkNjcyNDg4YzZjNGUwZGM0YTFmYjZlNjdkZWU5YTFiZmMzZjQ5ZDJmOTM0ZjMwNWYxMzllOThmMGJhOWMxYWI1NmI1Y2U5ZGRjZTRhYjU0YjY5NzBiZjY0OTllNWU4MjVhYmJiMjNmOWUzMjBlZTA1YWFmMGQ3MTJjMDliMDEzNDgzOWM1NjA5ZTE3OGEiOiI3Yzk2MmE5MmI4ZGFhMjk0YjQ5NjJjYzMwMjBkY2QwYiI6IiI6ImY5MWUzNmM3OWRiNjc4OWEzYWNlYzllODJlYzc3N2VmYzE5NThlN2U1NjM0ZDMwYTYwMjM5ZWI3Y2FlMWI0OGY0MDU1Nzk2NWU4YTZmNjk5M2RiM2Y0YWU0NDNiYTE2Nzc1M2M4OWY1MmY2MTBhYjY5MTU5ZmY2MDIzMzMxMGMxYmIyYmFjY2I5MzY0MzMyNzBmODgzOTc1OGJjODVjNTM2MDRlNzcxZTNhYjBkZjZkNmJiMDJlODYwZDBlYjI3ZjQyNWM3ZDMwZmI3NTY2YWZmOTgyZDI4OTIyOGRhNWNlNWE0NTg0MmUxMGZmYmU5MDE2YzllOTI2ZDdmNjk4NjMiOjEwNDoiMDExNGMyZGU4ZjczM2ZjMThmMjAzMTUwYTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwOWNlNzNlNzMzZTg4MGM2ZDdiZTkyYmUzMTQ0ZGI0MCI6ImEyODNlMjBhZGI2ZWZlZGM1NTMwZjRlZmQ3MTg0MGQ1ZmU2MWM5MDJhNzUxMWNkYWE5MzlmNTAzMDg4MGYzNjc1OTU5ZWU5NmUzOWFiZTA4MmE2NmViYTJhNWE5MzIxNGIyMmMyNDlkNzE2N2I3YTBmZGEzNjBkMDJkZjg1NWQ1MDhjN2ViYWU3MDE2MTM3ZTU0MjkwOTA0OTA5YjJkNDFhNTk5NDJhYmVjNzY2MTJiMTdlYTc2ZmZkMWVlNzE1YWEyYjA1YjEzMTRjMGFiMjg2MzFmMzkzNGQwZTllZmUyYWVmMGM3MTFlNzVhNWM2MjcwMWIzMzU4YTQxNDk1OGQiOiJmNzJhMmZjOTEwZmRlZWVmZTg3NDNmNTcyOTBlODBhZiI6IiI6ImZlOWE3ZjU5YWJjMzcyMDcwNmMzM2ZhNDBlMTA2NjYzZDI2YzBmOGRhMGQyNWRlYjkwYWRhODEzMGI2Zjk1YWFlYzA3ZjRhN2RiMzQyYjY3OGQxMDJiMmM4MTQ2NGU0Y2E5NDU4NzMyNzgzY2RjM2E5ZDUwNDIzMmY0NGUyODc4YjBhYWVlYzBmODhlZmE1ZDdlNWZiMTQ2OTExZGNkYjQ1NjlkZTdmMTE0ZTE4NTRhZDdhOTU4OTQ1NjFiZDBmYzRkOWE1YjU4YjUxNjQ4NzI4MzMyODNlZDg4ZmRiNDkwMGIyYTU5NmRiNGU4Mzc5ZWVkNGUzYTVjMDhkNWZhZGYiOjEwNDoiOWRlOTdiZmVjMTMyNTkzNmJkMTcxYzk5NmEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNjFkNDE1ZGI3OGQ5ZjI2OTUzNDQzNTBlMGE4MjkxZSI6IjczMGMzZmE5ZTA3ZWVhNzNhNzM0YjE3ZmNiYzVhOTY5ZGMyYzA0ZjQ0OGY0NGM3ZjYyNzZlMzJhZTM1MDRlOWIxNWZiNjY0OTA4ZjUzMGU4M2E3NGUyNWE0NTI1Zjc0ZDMxNWFiODVkN2I4NTAwNTQwMTM3MGRjNTBmZGI4NmU5N2JhZjNlN2FjYjQwM2U0NzYxOTM1MjdhMWE1ZDY0MmZmYWQ2Y2YyNTU1ZDE2ZDI4Y2Y0YzQxMjcxODkwNTYzODkzNjhiNzZhZWE4MDY5MDZiMGEzOGI4MDhjYjAyMzc4ZWVhNDhlZGMwMDVjZjJjMjFlNjU0NzUwMmUzMWQyY2IiOiJlMDlkZWU5MzQ2NmEzZjM1NjA1YjY0N2QxNmI0ODQ1MiI6IiI6ImFlODdlNzU0YzFhZjExNzViNDc0YjA3MThlMzU2MDI0MGY1NTE5NGQ5NDZkMTAxZTdjMGJjN2FmMThkOTBhNTBmYTQxZDY4NTE2ZTQ1ZGMyYTRkYmE0OGQ0NTdlYmZmMThhNjU3YTg3M2UxNTYyMGVkN2NmNmVkM2EyNjE5NWI5ZDM1NGVhMjc5YjI0ZWM3ODAyZTRlOTVkM2YzNzY1MTg4YTY0ZDdiOGQ0YjdjMjE1ZTdkNjczODVlZmM2Mjg4NzI0YTMzYTFhNzk5NGYyMWUwZGMyOTcwMDc2YWY3Y2YzMWU5YWQxMDk4NTM3NTQzMDUyYTJiMGY2MmU0ZThhODciOjEwNDoiNWRlM2M1NzE2NzM1ZDdkMWI4NTlkZWJiNmUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5YmYwMGIyMjhkZGI2ZThmMWZhNGJhODVmODY2NDc1IjoiMTA3NDJhZWRhNTkwMDI0YmFjMjY5NmFmODQwMjU4MGQyZWM2YmEzZjUxY2M2Zjc5YjZjZmJiMzA1NzYzNGNlZDYwMzNmYTQzZGJhZWM5YWY4Y2U3ZTk3MDZjYTY5OWVkZTg4ZDg5Y2FlZDg5ZWEwMjNkMTQ3NjFiZWM0OWRhNzI0NTM4YjRmOTY3MjE2M2E1YmI1ZGJmOTJmNTI3OGZjMDAxNGVhZmNlNDAyY2I0MDhhMWVhYWQ2YmMxN2VjMGU4MzVkNmI4MGY0NzAxZjk0NjY2MTc1N2I5YjJkNTRkMWIxMzc4NDE1MTlkZDM4ZDcyODM1ODkzZWE2ZDUyYTI3ZiI6Ijc2MGM1YjkyOWFjM2QzM2JlZTRkYWUwMDg4YTg5NGY5IjoiIjoiYjAzZDI3YmM3ZjRjOWQ0OGQ1NTVhMzgwOTEzNDdmMzcxZDA1MjJhZDRjMzQ3YjRhMjMxOTRjMjM0Yzc4NzdjZDM2MjFjZTVhN2MyZmMyNmIzOGM3ZTZmMWMyYmYyMjhjY2VjNDkxZjViYzM1MjU1NmMwOGU0ZTE5ZGRjNGU0YjJjMDM2ZjQ1YTQyYWE0MjVhNWZmOWEyZTljOWU1NTgwYjUzOGVlNTZmYTgwNGE4NmQ5YjFiNTliNmZiMGQwMDIxNmE5NjkzNjc1NTQ2Mjk3OWRjMTQ5OTA5MzU5MTkwMjZmYjUxY2RmZWYwNWI4ZGFkMDMzMjBhODExMmI3YWRhNSI6OTY6IjJmMWNjNzk0MDhjODVhOTg2NzIxNDA2MSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjViZDllN2Q5MDA5ZGQ2MTEwZGNhNjU3Y2NmZTYwM2UiOiJjMWI1MzkzMjRhMDAxOTAxYzI0NjFiOTc0N2Y2MDVhMmY0MDQzYjliMGY1NGQxMzU3MDQ5ZmQxODE5ZGUwNmRmNmUyOTg4MGQ2MmVmN2Q5MWY5Y2RkMTEwOGYzY2NlMzIzZjZjMzJjZWMxNmY3YmQ0MzRlNTM5ZmQwMGFkYTQ3NmVmNDFlZmU3YzY5MDdhZDFjYjcyNjcxN2FiNTZkNmUyZDMyMDQyZWUyZGYzZjkwZDE1ZTE1MTVmMGExNWE1ZjA2NzAzZTA2ZTE0MjI5ZDE4MzI4MTE2MTQ4YjNjYzM5NjgzOTE4ZTQyOTI3ZjYyYWVjNDllZTliY2MxOWJlMzhkIjoiM2ZkZGY3ZTk0MzMyNmU0MzFiZTU0MGM0OWJiOTE3YzYiOiIiOiIyODEzZDZlZWYwNzBjYmRlZTlkNWQ3MWNhYThhODhjNjMxZjBiNzFjNDE4MTNjNjIxOWE3NjVlNGZiM2U2ZWZmOWFmZThmOGY0Mzk0ZmJkNTY0NmZlODBiYWI3ODgwNmVkZGY3NTQ5ZDZjYTNkMGQxNmQ0N2VmNjNkYjkzY2I1NjIwZTM4MTRlZmQ4NmJlMTUxYjMzOGVlNmUyYzY4MWJkMzdiZTQwMzliMmVhNGExOTBmZWNjZDdkNjVjYmQ1NmViZGE4MWY0YjY2Y2UxMmNjM2UyY2VjZTczMWMzN2Q0MjM3YTlkZDBhMmMxYTc2OTdiYWU0MjE3NmE2NzNkNjJhIjo5NjoiOTYyMDBiZDNlNjRkNWVlYTc0NjY5M2JhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiOWI4YWM5MjE1Mjg5YWEwMDNjZWNkNTNhOTBlMDQwNyI6IjhhNmZiZDA2NzE0NGI2ZDUwZWE3M2EyYTdhYmJhM2VlOTY3N2JiZjAwMzEyYzcwZDgwOGZkMTI0NTQxYWI5MzYyMjlkNTk4NDJjODg0NjU2OWEwNjNmZWNiOGJkMTk0NTg4MmFiZDk4N2E5MzY5OTFkNWNkYmVjMDg3OTM3ZjkxYzRmNTUxM2ZlZmZhMTk4NGE2YjhkMDRhN2I2OWViNGU5M2U5MGI2ODI1Nzc4Y2QyY2U5YTBjZTU0ZDRhNDY4YzkzODg0NjE5Zjg1MWQyMjk0YmUwYmJiZWVmNWZjMGMwNWQyMzg0MTI2Mjg5MjgzZDVkZGFhY2NkODk3MTFkNzMiOiIyN2QzNjdmM2YwYzYwYWNmOTIxZjhkOGIyMjhhMGIyZiI6IiI6IjQyZDk4ZWNmYjRmNzA3ZWMyMzNjN2Y5OTBiMGNhZDhmMzk1NDZiODYxYjExZDhjYjlkOTM5YjI5ZmY1YWIzMTUyMjlkOTQ2ZmY1NTkyN2RiZGU4MmMwM2FhNzNmZDc4NTdiMmFkMzhmYTU1YTgyN2RkYTU0ZDI3MjZiY2VlNjYzNDdjZTQyYzljZmQxM2JhMTUwN2QyMDlmZjIzODhjMGVhMjQ3NGUxN2UzMWQ4MDU2NTkzYjcyMmQzYzJhMzAyYTcxNmEyODg1OTJiMGEzNjU0N2M3ZmQ0N2Y3NTk1ZmVlOWQzMGY1YmMwOWE5NTU1ZDdmMzE2OWUyNmE5MjRkYjEiOjk2OiJkNjY5NzRjOTU5MTdhZTFiZjc5YjY2ODUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNjYmNjMzk1MTI0MjViYzMyMzUwNTg3ZjBmYzNlOGZkIjoiNTdkNmNjZGEzMTdiN2VhMTUwYjE4ZDk1NThiMzlmZDc4ZDljYjUyNTA5YWE1YzA5NWM1YjQ2ZGE4OWI3OTkxOGM4NWQ0NjlmZmFjNzIyNmNhZGRkNjcwYWM4ZjVhZGQ0N2ZjMzgyZGYxZjMyYjRkZTljYzFiMmNhN2MyYWNmYmRjYWEwODQyOWI5N2U3N2VlZGVhNTVjOGRkYzc4MTRmZTRjM2NjMWUyMWY5NWQ5NDMwMWFiNzdiNGRmNzU3MmQwYjg3NzhjYjJiZWZjMGY0YzRhNWU5MzQyOWFkNTJkNmMyYTc1NDgxZjM4ZDkyZWRiMWRhYzU2MzE1NGJmOTBiMiI6IjA4NjJlYmZlYjQwZmYyNGJmYzY1ZDNjYzYwMGYyODk3IjoiIjoiZTZhNzdlOTA3NTBjZjBlNGMyNzZjNTBjMzg4MGIzZjZmYTM1NzE3OWNiZDg0ZTIyZjViNDNjZDEwYWJjYmUwNGI0M2YxOTFlZDNmYWJmODNlYWNhODg2ZjRhN2Y0ODQ5MGZiMWZkOTJlYmRhY2I2OGM1MTU4ZTlmODEyNDNmN2NhZGM3YThiYTM5NzIxZGY2OGRiZjI0MDZmY2I1ZGFiODIzMjAyY2VlYTcxMTJlNWQyNTk1MmRlMWI5MjJiZWRhMjcxZTc2Nzc0MjFmZGUyNWY4Y2RlNDUwYzQwNjY3Mzg3ZTVhYmY4ZGE0MmRmZTg5MWM1MmJkZDlmNTA2MGRiYSI6NjQ6IjkyN2QxM2NiOTBlZTVmNDQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM5NmI1M2E2OTRiMjhiNzE3YzEwNDExMWM0NzUyMDc0IjoiYmJjM2I4MThmNGZmMTBiNjgyMmVhNDFmNjNjYTUzYzI3NTc4YTgxMjZmNTE2M2E1MDE0YzYwZTFiYzhjMWE5YmJhNjdhMzgwOGM4YWVlZTA5YmE5ZTU4NGEzNTg0ZTliODY4OTVhM2YwZGIyZTY0ZTcxYmIxOGI4NDNiMTJmNGViYmZhYTFkZmYzNzM0MTk2ZjcwYzVhNmQ5NzAyNzdhYjUzMzdlOGI5NDBhZTdjOTU3NjQ2ZjhlOTZjNmI1ZDg0ZTllOTdiNjIwYTkyNmU2NTU4NTBkMDliYzJkOTQ2Nzg3MDRhYTQ1ZDE3ODhlN2MyM2VjZjM3ZTI5MDRhMDc4NiI6IjA5ODFhMTUxYzZmNjg2N2QzODMwYzFmOWVmOTljNDMzIjoiIjoiNzJhNTU4NzA3NmExMDUwYjJiNTE0ZjA0N2NjZGY3MTc2YzExOGRiOTIzNmMwZjcyMDkxNTEzZGEzOWQ3NDE2NzM0YWM1MGUwYTM1YjI5MDU0MjAyMTRiZTg0MjZhMzZlODY4NjNjOTk1NzY5MzI5MmJmYzViZmMyZTkzZDIzNGEwOWU4MGY1MTdlZGI3Y2Y4ZTVkMjFkNWFlNmMyMzYyYjc3OWE5YjYyYjRjNjYyMDI4OTRkMzY5ZDIxOWVmMGU0YjUyYTM0MmI3MWYyNDhjMThmZmMzNDVkYzdlYjBiNDdiM2JjODNmZmRlZjkyMWViNDJiNmQ1MWFiZDg4OWVmNCI6NjQ6ImFmOTlmODc5NzQ5NWRkMTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFmMDkwNjE4Y2I0NTQzMjRhODJhNzVhOTE5NDRkZDZmIjoiM2ViY2E2ZmYxMzhjNTI3Yjg1MWIyN2I5ZTM5MTdiYjlhMDcyODIxOTc4NjgzNTFkZDU5OWI3NGIzMzI2MTBiZDYzNDQyMjkxMTM5MzE3MTMwNWNhYTRmZTNmNmU4OWFiNmMwMzNjYTc1OWUxMThjMmQ4Njg0YjkwMzk2Njk5OTEyNWM3NDhlMDQzMTJlY2QyYzFhYzMxMzVjM2JlMmRmOWM4YzY3YmU0ZDgzMDNhYzdhYTZjMjFjYTdiN2MyMGIxMTA4ZjU2MjJkOGU2MDc5ZjQxZTRiZTRhYmRhOTlmNzgyYWQzNWEwODViN2RiODM0ODJkYzcxYjhlNWQ4ZTcxYyI6IjMzODBhNmYyMDg3NWI3ZDU2MWM0YTEzNzUxOWNjY2QzIjoiIjoiNmJlOGVlYmU3YWY3OGMwNjI4MTI1MTM3ODVlOTgwM2YzMDJjNzcxZTgyMTVlNGM2MDZmYzVlZGRjM2VmZDhiMTJjOTZlMDI5YjQyODdkYTU1ZDg2MjY1ODNlNThjZTBlNTBjNGFjNWEzOWExYjBmMzA5ZDU4MDMzODY3MzgzOTczNzZjMGFlMTU1MDg3ZjM2ZmQ4NmZkZGE0YjVjOGRkMDc5MDExZmE5YTEzNGNhOGE3NmRlNTcwZWYxNjViMjBkN2Q4MDM1NDRjZDJmM2EwZmZlZGU5YjM1Y2ExYzk4Mjk3OGJmOTVhYzEwMGFmNzU1NTUzZmRhYzM4ZDk4OGZlOSI6NjQ6IjNlODY5ZGNhYzA4N2FhNmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA0MWNhZTUxZDllNjMxZWY3MDExNWJlNThmODgxOGVmIjoiZjY3NDhmNGEyNjFkODc2ZTM3ZmU0NGE0MTljZmU5NjU4ODhhYTVlZTE5NWFlMTIyMzczMjJmNmU3YWM0YmZhYWYxNmU4ZTI5YmU1MDdlMjk3ODMzOWExODU1YWI5MTg0ODUwMTFmZDUyZjgzNGJmMDg3NmJhOGQ4OWRmYzAxOTI3ZTA5MzBkMDNjMGFjN2RjN2JhMTU1NGE4NzlhMjA1MTAxMWJjYjM0YTVlNGM3Y2VhNGQ0ZmI1ZWQ1M2I0MWVjOGQxN2JkNTJiMmUxYjlkZDQxN2E4NGFjNTkxM2NlM2Y5ZmIwNGRhZjRkMTRiZTY1ZjQ5ZDA3NjdiOTQzMWI0NyI6ImMzMmYyMjc2NTllMDU2NmZhYTA5ZWI3MmQ5OWY4OWMyIjoiIjoiZjMwZmU2Yzg3NjVjOGMwYWY1NzljOTViYzJkMTgyY2NjMzQ2ZTU4N2E1N2FhMjI2ZWFmYjY5MjY3NTM3N2E4NWU5ZWUwODMzOWEwNDdiOWNiNjc0ZGFiZjVhMjUzMDFkMmM4YzI2NGJjMDY1NzNlMzZlNTVjZWFlZTM5MjM5ZTM2N2I4ZjFhM2Q3ODFhMjAyMGU1NDgwMDFmOWY5ODg1MDk5NGMzYWE3OWIxM2RmYzkzYzFkNzI5MWJlZmQ5MWUwNDRiMmY1ZDI1ODNkMWE5Zjg2OGZhYjRhZmVjZDQ2ZmVjN2QzMTViMGNiZjhhNzMzMWVmOGY1ODhkNzVmOTdlMiI6MzI6IjU2MjllMWE0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMDU3N2Q5YTdkYmY3YjRhZGE1Yjk3NThlZWM0Yzg0NyI6IjViNTU5NzM4NjM0ODI1OTIxYjVjYjYyMGI1YjlmNjM3ZjhiN2NlMzM5OThjY2UxZWQxYTIzZmYwMWY4NGU1ODI1NWQ4NTJhMDJlNTllNDM5NDc1MjQwNWVjYzE1MjQ4Zjc2MTZhMzNlNjQ5MzZmNzI2ZGU2ZmM2ZDEwYzNmY2U5YWMwYjNmY2ZmYmQ3NTVmMTZiZmY4NDYyYjNiZTI0ZjdjZjM0MmM4ZDBiZjFjYTc5YjFjYjRlYTg4ZDY5MDY0NDk5OGE4YWMzY2FmYzhjMThjOGNiNzM3ZTM4YTY4MTAyNmQ0Njk2NmI4OWM3ZDZjN2E0Y2U3YTFlMWZhZWNkZDUiOiJiNDMyNDczYWU2NzIwNWJjN2E5OWY1YWIyYTI3MjFlNiI6IiI6ImRkZmU2NjRlMjhjNWZhY2UzNzYxZGVkYTFhYjJkYWM2ZTM2Y2ZlZDUzOGUzZmFmOWQ3OWM1NGUzYzg1YjRiYWVhOWVlZGNlZjdmOGYyOGMyZmVlZGVjNzJhYjJjYzZhYWFlMTAxYjk5NTEyZWYxOGU3NTliNzgyODM2NGU0ZGFmOWE1NzJmOGM2YWQ4OGViODJmNzMwNDk4OTM0NWFhNDk4NWU0OThkZmViYzU4Y2JjNDVhYTMxYzE4YzBkZGE1YjE5OTFmZDk5ODkwMWM2NTgwN2M4Y2ZmNjA1OGIxZDVkZmQ1ODMyOTdkYTg0NTFjZWYxM2YyNDY1NDdhZDExZGYiOjMyOiJjZTU1YWMwMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmNhMWQ2YWU5YjVkZGQ2ZTNkNjg2NTZjNTA4ZGYzMTgiOiJkMTYwNzQwYWVkOTU1ZTMwYzFmOTQ2MDg4YjViYzViYmFmNWM4NGYyODJjMzJmNjVkMDk5NTA5OTkzNjI4YmE1YTUxYjQxMWM2ZWJmNTdkNThlOTE3NmI0OTBhYjkwZmE4ZGI4YTNjZGM2N2E1ZjgzMjJkMDZkNzE5ZDkxZjAwY2EwN2FhMmEzOTc3ZGQwODM4NDg3ZjJlOWQ0ZGQyODUwNjdhMWY3MmJiOGE2YzlkZmNhMTA3YWNmMWY0MDQ5OTViYjY4ZWQ5ZDdlMTI0MjNlZmU1NzBmMTQ0ZTA1MzNmYTM0YjhkMGI3MTU2MTEyYjg1Yzk0YThmYTMzZDdhNmQ5IjoiNjhhNDk0YzkwMDJkYWRmNGYwMzAzZGQwZWJkNjAwYzAiOiIiOiIyNzZlMzYyY2I3M2I0MDViMTBhOTg3MzEzMzNmNmFjY2YwZDE5Y2I5NmMyMTQxOWQ2ZDU2YjMwZGNmNzNmNzIwODkwNmIwZTNlYjEwM2I3MjFjZGJiN2ViMWQ0ZmYyOWVjM2I3ZTlkNDMzMjA1YmQ5ZWM0OGM1OWQwMDc1YTE1MDdkZGYwOTI3NTQyNmMwY2U5YTU4Yjk3M2UwNmQ2ZmNlZWU3MDU0YmE5MmIxZGY3NzEwMTFhYzczZTM5ZTQ1MWQ5YWMzMzc1YzU5NTYzMTA5MGEyMjk2ZDQyM2UzZWY4MDZhYzIwNzcwYWJmNzhhZDA0MTE0ZjY1NjYxODA0ZmFlIjozMjoiOGZmOWEyNmUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YTNlNTc3NzQzYjQ1ODE1MTliODRiNzUzOGZiMzJlNyI6IjE3MmEwYTE0ODIwNDQ4ZTVmZmQwMTdjMThlZTAyMjE5OTA2ZjcyMWM5MTVjNGYwZmYxM2I3Yjc4ODk4MTJjMGVkYjg5ZjI4YmUwYzIyZGVmZjc2YmM5NzVkMWVmOGVmM2ZjNDBiMTBjY2UwZDc4OTMzYWEyMmU2YWRmMmQ0YjdlZTRlZDZlZjQ4N2VhZGRiNjY2YWZkODY3MTQyN2Y3NTI1ZWI5OWFmNTRhNTVkOTgxNTlmYzVkNjUxMjY2YzY1Y2NkOTE1Y2JiYTYwZmI2ZTJjNDA4ZWYxNzdkNjgyMjUzYzBiNTQxMGQ3N2QwOGJlMWQ4ZjE3NWNhMzYwYmVjZDAiOiIxZTE1NWFkYTUyZTI1MGNlZTE0NWQ2OWI0YTMwN2JjMCI6ImI5YmUyMTQ1Yjg0MmQyZjVjM2QxNWFjMDMyMDEwNDAwYmZmZTMxODU2NDQxY2I0ODRkNWM5M2U2NzEwMTk0YjEzZTE0MDc3ZTEzMmNmZTAzOTg1ZDRiOTM2YmRhOTM4M2MyMmMzOTI5NjhjNzQ4ZjcyNjUyMTNhOGVhYzU4NGFhYTExZWVhMzU1ODllMzUzNmUzOWIzZTQ0MTgyNDg5MjdmYTlmY2MwMjdjNTUxNmU0MDI0NDUwNjhlZjc5M2QzNDllYjc3OGI3N2ZiMGIzN2Y1MWJmY2MzYzIxZGY5OTk5Y2E5OTg1Y2M1YmVjNjUwMjQ0NWIwNjhjMmQwNjFmNDEiOiJiNWJkMjI0MTQwZDZiODI2MDYyZTU1NzU0Mjk5YTQzYTg3Y2JlODYxMzYwMzM0ODk3ZTgyYjdhNjAyM2FiMDA0MTczNjQ3OWM5YWFjYTdjNzNmMjdlMjM5YTYzZTc0MzNlMDQ4YThkMmMyZDI2ZjBiMTg0NzZhY2E3YWMyMDgzN2FmZmFjZGZmYjU3YzYxOGNlNTk4MmJhNjFmZTE3OTJjOGEzYTg1Njk3MGMwOTViMGM0Njk1ZGNlOTYxYTM1NDEzNTA3NWUwYTc4NjE5MmQ1ODc1ZDE2NzkzYTNhZDBlMzU3MmE4MWVmYTI0MDk5ZjVlZDljOTJkZjU1YzE1ZGQxIjoxMjg6Ijc0ZGY1OGZkNGEyYTY4NjU3Y2UzNWEzZWYxMWE5YzBiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGViMGFiNmU4YjBmMzkyYWY2Yjg5ZDI1M2U5MjNmMWEiOiIxNGE4NmM0MzFiZGU1YzA4NjFlNmJkMmNiNzQ4YTEzYjliZmIyYTRhNjdhMGJjZjA2Nzk2MGIzYTljN2E3NWZjN2VhMzIxODYzYzgzNjkzYzcwMDc2NDYyZWMzMTc5ZjRkODJlZDRhMTE1NWE0YjUwMDQ4NDJmYjQ3NDgyYmQ2YTgzODA0YTA1YWYyNTA0ZjZmNTM1ZWI5YmRjOTVhOWEyZWI4MGM3ZGNkN2RmZjU0ZTNjMDA0MzdlNGRhOWM0MzNjODhmNmQyNDhlNDc1NDY1NmFjZGY4ZWE3ZDY4MTA2YjA0ZWJiMmYxY2RiMjQ3ZmRkYjBiY2ExZjhlOWVkNmE1IjoiYzFiYzU4N2MzNDQwZjFmNWRlYTViMGE0YjVlZThkZmQiOiI2MDJjZmIwOWU4YmYyNTBjM2EyYzI0OGM0ZTkxMjM0NjI5YTRmZTlhMThjNWY4YjU5ZGYyMTVlOTdkZDg3M2E3YzEyMDRiZDA2OTU3OTY5MDhkYWEyOGI3NzM1M2UwZTViMzc4NzdhNzQ0MWQzNTYzMzExOWMwYWVlOWFhODJjM2MxOGE3ZjU3N2QwOTI5M2ZhZmNlMTg5NWRhZmVhNDJmOTcyMjJhMzNiMDAxOTA3Yjk3OGYxMTQ3MWNjMGFkYzQ2MjQzZThmN2ZjZTk0ODAzZDRkMDU5NWJjOWZjY2I5YjkzOTZiNTJkZWI5NDMyODBlYWMyYzRlZGE1NDg0MWJjIjoiYTcyZDI3MTM2ZDBiNGVmYzBhYTIxMjZhMjQ2YWU0OTQ2ZTJjNjJjZjUwNTVmN2JkZTI2M2U3NTE2YWNlMmI3ZTEyMTc5OTgwZjhkY2ZmMThkYzRmY2Q2NjJmMzhkM2I5ZGM3ZjhhMDU3ODI3ZWJmMjdlNWRhYjg1MjY0ZDkzMjVlMGVlYTNiMTJmOGU5ZTM5YWQ2ODYyNjNkZjc1YjA3NThjYzhhZjBiZTg5ODgyYmIxNTljOTViOGRlMzkyYjNlMjk1YzAzOWE1MjBkMmU1NmI1MGE2MzcwYWZhNTdhZGM5NjdmN2U0ZmY2NzBkYWI0NzFhNTdmYjZjODE0MDFlYiI6MTI4OiJlYjI2Y2RmODc5ZTBjYjEzMjBkNzg2YTY0MmM0ZGZjMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFkZjYwMDZmYjFjZmVhMGY5NjQxYTRjMzViODY0MTAxIjoiZDIxNzc3ZTFmYWI2MzJiZmZkODJhNThjYjczMjc5NGYxMTJjZDg4YmRkYTVhN2E4ZDE5YzY4YWNlMzQzZmQ3ODZlNWU1MTIwMTM4ODcxMDVjMjEyOTlmMmQ2YWUyM2NhZTRmMDMwNDdjNjhmMDE5ZDk4ZTc2ZDJhYTFiM2EyMDRmMTNmNGNiYTEzZjVhODk1N2I5YWEzZWJiNDRiODAyNGIyNmNiNjEzOWEzYmNhM2FkYTA1MjBhNjhiODU3MWFlODk1MDFiMjEyYTFmOGVkZTU3NTNkNTU3YWQyZjM4ZDk0NjVkYmIwOWI1NTUzMDBiMTMxOTRiZjc4MTczMjFmNyI6ImEzNDlkOTdmYzY3N2Q4YmE2ZjcyZThjYzcxOTFhYjc4IjoiNTcxN2JlZThiMzE2NDBmMzk5OWVmZGE0NjNkNGI2MDRjMWNlZjYyZmMwZGNjODU2ZWZiNGM1MGE4YzZiOTAyMDE5YzY2MzI3OWUxYmY2NmZiNTJkODJmODU3MGI5YTMxNDY0N2Y0YjFlZDg2ZWI4OWY0YmU4OTgxMjI1Zjk0ZDQyODVmNWNhOTE2NzQzNGExNTY5YjUyMGIwNzFlZTQ0NDhkMDhjYjg2MjNiNGNkYTZkMWY3YWQyOGU1MWEyZGY5ODBiNWE5OTkwMjVlOWJhNjQ2NzA3MDc1YTZjYjI0NjRjMmEwZDVmYzgwNGM5OGE3OTk0NmZhZTBiNGZhNjFmZCI6IjM0NWFmMGQ4MDQ0OTA1ODZjOWZmYmFkYTA0MDQxNzZmNGNiMTMzMWZjNzc3MDUxNzU2MTlmMjdkMTA3NTEyZDNlNjA2ODMyM2IyNzY3NDMyODRmZWI5MzhjNTcxOGE1YjAxMzMwNWZiNDIyODJhODllMjcwZDI0NTg1MjM2ZmExODI2NWRjN2U4ZGRkMmIzZWZlOTNhMmVhMDVhYjM1OTMyM2M3NTIxMWYyMTMzYWE5NzAyMmM5YTkzN2E0NjdhZjM3YzkyYTc5NWM2ODJhMzBmMmJhMWM0YWIyZGM0NWU2M2M1NmNkM2IyOWIwZWZhYzJjYWEzMTUwZTZhNzJhYTMiOjEyODoiYWU3ZDI4MjdjNGYxNDIyYjcyOGE5ZmQzMWQ4ZDE5MTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5N2M4M2Q0NjI4YjY1ZDk0MzQxOTg0YmJjMjY2ZGM3YSI6ImU5OThjYzBiNzY3N2ZhMmU1MDQ5OTRlOTljZjdiYmQ4NGJhN2UzNTZkN2RhMTc4ZjhmZjQwZGRkYzA0NmM3MDU1NGRkZWMxZDI4YWEyM2Y5YzRlNmZjYjllZmZlYjhlMjhhODgzYWQwNWJkMGE2MDQxYjhhMjRkMGZjZWZmMjAwYTRlMzM5OTZlMjc5Y2JmMDI5YjExZDU4MTg1YWRlYjVlNWU3OTdhNzRkMGQ4YjE3YWRjZjA2ZGZiZTNlZTExZDhlNmJjM2I2YTg0MzRkZTZlMGRkZmEwZmQwOGM5MTNmOWZiOTExY2VmY2E3MmJjM2Y2MTZiNGFjOTgyMWY1M2MiOiI2NzFkY2M1MDAxYzIxNDZiZjhhNGU1MjJhZDcwMmJkOCI6IjllYjEyYTQyZDJjYTA2YTdkYTM3ZmJjMjNkMjEzZjVlM2Y1ZTE1NTgwZjAxYjBlYTgwZWI0YjZiZDI4M2UzMDdkZWM5NjU3NDVlYTNiMzUwOWQzMjY5Y2YyNTgwOGZjNmE5MjNlOTdkODdkMGMxYTMwYjQ0N2E1YTI3YTA2ZDBjODhhOTZjZDkwZDk5MGJmMjA4ZjFhYmM0OTM0ZjZhMGFlMzRhNjk0NzUwYTc0ZmZiMjdmNGJiNjZiYzc5OWQ0MzU3MGIwMTg5N2I5OGIwMGU2YTAxYjk1YjM1NmIxMWQzM2U4NTJiMjAxMGRhNTc4NWE2OTEyNDZkMGJlMmJjZmIiOiI1YTZkODkzMGU0NzNlMjkyZTY3NDI1NzQ4ZTg2MTg1NjliN2E0NzhmMWUxODNiYTRlNGE2NDM4NWFjNGI3NWQzZDQyYjFhZmMzNGNjNmRhZmYzNDFmMTBjMWFkOGYwM2Q3NzE3OWY1MmE3MjM5YWIzMjYxZjVmY2Q1YTBiNDI4MmQyNmZhNGQwOGJmMGM4YTVjOTY3ODJjMDczYWQ2M2FkMjMzZGZlM2FhMDI5MGEwM2Q3M2RlMTRkNDQ1YjljZTRlYTBlM2IxMGE0YWVmNzFjNTkxOTk2OWI3MDg2MzUzYzk0MmM0NzlhMWMwNTJhNzQ5YWZkZTIzMjVlZjQ2ZjdmIjoxMjA6ImI4MWNiN2JmZDBhYWYyMmI3MjMzYmNmZTM2M2I5NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJkY2Q1Yzk3NGM1ZDc4Y2RlMGQzYTY3N2QwYjFhY2RjIjoiMjFiNjEwMzVjYTNjMTQ5ZDY2NjA4ZDc3ZWRkOTc3MDQxMWUwZWY3M2E5N2Q0YmU5ZGNkZTk1ZWQ3OTk3YmE5NzExN2FlNmMxOTc5MTk1YTVkOTE2ZmY3YTFkNDNkZGNlZDUyODcwMDRmYjYwYTJjODFjODJiNWY3YzhhMzM2YTYwM2MzZWI3Y2IxNjBiYmYyMWI0NTRmODEwNjgxNDUwZDY1ZGViNjRlN2NkMjI5MzMzZmM1ZTg1ZGMyOTA0MGQ3ZGE0ODUxMWI2YjI1MjRmMDJlYWVhYjQyMmI1Y2E4MTc3OTZjNDdiOWYyZDdkNDk4YWJjNjE5YjJjZTI5MTJiZiI6Ijc0NTVmZWExYmJiZmU5NDc5ODMwZDQwM2UzM2M5ZDFjIjoiZDY4NGQzOGYyYjEyMTExMTk3Y2E1MTJjNTRjOGUyOWVmMWMzYjliMDg5YTY5MjNjZGIzMjdjNzYzZjBhYzhjMmVjMDkwMGM3MTZlMjExZTdjYmExZDdjMTNhNjBmZTg3ZjVkNzhlNWQ1MjE1ZDkyZTU3YTA2NDVkOWIyZWFiNGIxMTg3MGI1ZjdiZmE5ZjJjOWU0YjlmY2Y3NTk2ZTc3MTliN2QwYzBlNmNjMTZlZmU3MWQ4YmM5MmUxNmE4M2Q0NzgyZjA4ZTliOTdkYzg1YTE4YzQzNWI1MWM5NDAxODlhM2MyNjA4Mzc5YTIxYThjNDY2MzMwMjBiOWI2Y2QxMCI6ImViMDM5ZDhjZjBiZjIxN2UzZjJhYTUyOWJhODcyYzM4NWYyNzcwZWRlNmNhNGVkMzJmZDIyY2QzZmNiZmRkZmI5MmQ2ODFmMDBkZjZmYmYxNzBhNWRhZDcxYzk5ODhkNTU2Y2Q3NGJjOTllMThhNjg2ODNlMGVhN2I2ZWY5MGIyMWZmNDJjZWY4YzQ2MjdlNDA1MWJmZjBkYTAwMDU0MzkwZTEwMDM2ZjQzMGRiZTIxN2U1YmQ5MzkyOTVkOWM5ZjY0YzI2MTRkNDJiYTYyZWZlNzg3NjNjYzQyNzAyN2VkYmQwYjdmNzJlY2VhYThiNDc3NmJhNjMzZjJjM2Q1MDAiOjEyMDoiMThlN2I1MGZjZWMxMWM5OGZlNTQzOGE0MGE0MTY0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTViMTMyYmI3YWNhM2UwMTEwNTg0OGY5YjM3ZmY1MTYiOiIzYjZkMWE0MzJiN2ZkYjQwMjJmYzM1ZDZiNzllYTAzYjZhYTE0ZDRkZGY2MGExNjBlOTc2OTA5Y2EwNjkyNDJmYjJlN2Q0MTRkNGUzNGZmZGY5NDE2ODIzYzRiM2Y0ZTAxOGFjOGNhNjg5NDQ2NjQ3ZWRhNmExMjAyOWY4ODZiY2M5ZDE4YmUxNTBiNDUxZDc4ZmE3MmI5YzRkYzEzMzE0MDc3YTViMDRjZmZlYjE2NzAwNWM3ZTgzNzk5NDBlNmI5OTgzMTZiZWY5YmY4YjVhNzQyZTMzNzY2M2MwZWQ5MWQ4OGQwOWQwYzNlYmVjMzdhZWNhZWI4Mjc3YjEzNjYxIjoiMjRjMWJhNzdkMzdmOTkyNTM1NzZmNDk2Mzc3OWZkNTkiOiJkZWRmNzhmMDU5NTdiZGU5MDY2MzliZDM1ZWFjZDhmYmE4NTgyZDI4OGM5ZjE0YTI1ZWI4NTFhMGEzNGM4MmZkOTFmMmI3ODYxNGZmNDZjYTE3ZmU3NzgxZDE1NWNjMzBmM2E2Mjc2NGIwNjE0ZDU3Yzg5ZmRkZmRkNDZhZjRmYTVmYzU0MGI5ZWU5MDc2ODA1ZDRkMTIxYWEwZGFkMjQ0OWQyMjhmMWZjM2MwN2Q0NjZjMDUxYzA2ZGI2ODQ2YjkwMTJlOGQyNjhjNmUxZTMzNjEyMWQyNzJjYTcwZDk2NTM4OWE1MzgyZmJmZWMwYTQzOWU5NzlmMTZmYWIwMjgzIjoiOTk3NmQyZjNlMTY0ODViNmIzNjk5YTU0MWI2ZGYzODY1NjJiNWVhNGY2ZjlmZjQxZDI2NWIxNmUyZDdkM2M1ZjEzMWJiNTg3NGNkZmZhODdlNzA0YWUzY2MyNGYxZGNjYjYyYmFiYWJkY2RlZGY4YmFjMjc3YTcyNzdjYTUzYTRkMzhmZDMxZjlmYzgzZjg2YTEwNTY2M2YwNDViNzBkYWJkNTUzMTM3YjZkNjIyMmFiYjMzNGI3YmU3Njg5YTRhZmEyODEwMzYxOWYxMWI4YjYxYWE5MmE2MzEzNmFkNTYzOWYxMWJhZTY0YjI1ZjA5ZjFlMmRiNzAxOTM4ZmE1ZSI6MTIwOiIyOWQxYjhhNjg0NzJmMmRhMjdhYTg0YmU3MTQxMDgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MzYyODUxOWEwZjAxMDYyMGNiYWUzN2Y4YWQzNDU3MCI6IjZkYjI5MTkyMDhiMDlhOGFiZTVlOTVkY2ZlMGY5NTdkY2UxYWUwZTViMjlmMDZiZjMyMWRjODE1Y2VjYTA5NGYzOGM1YzgxMmY1OTFhZWRiYzlmYzI4Y2MwMzE3YmQxZDg5ZDRhM2JhMTRmN2IzZTVmYjJlMDM3Nzg5OTBhNjAwNmUwZWMyY2ViNDdjOTIzZjNiMTc0NzNmOTk1MjE0OTFhNGNiMmY5YmQ0MzVlMzEzM2RjOTBlMTI5ZGVkOWQxNWQ3OGU3NWJmYjM0OTI0NThjZTA5NjRkNTYxNDUwOGVmMmEzOGVhMDJlYzg2NjRiYTkwMTg5MWE3Y2M4NmE2MmIiOiJjZTBhZDc1Yjk0YWIyZDM5MThhYmYyNTVjODU0ZWNmNiI6ImMyOTM4NGJkN2NkMDEzZmEwMjQ4Nzg2NzU5NWQ3MzlkOTk4ODZhM2JiZWQ3ZmQ1YWNkNjg5ZjNhNzRmMjQwZjE0YzhmZmZkMGJkZWExZjgzYmZlZjdiNThjZTUxMjg0OWUzYTk4NmYzN2FmYTU0ZGRjMTE3MTkxNjlhNDliZDdlNzEzOGE3NDUwNTM0MTdmZjgwY2FiMWEzMmFlOWJlNDc2Y2NiNjFhZTA1NWIzMTlmZGVlNWRjYWI2MjliYjIzN2FlYjdkOTk4Y2UzNmRkOWM2OTA4NDUxYzNiY2E5ZDM1ODJmN2ZkNjBlNjlmNjI5OGQ0M2EzYjk1ODM0MWI2MTEiOiI2MjA1ZDM3ZDcyMGNiYjYyOGRiZDUwNjlmMzhkZWQ4ZTU2NjAzMGVhZGI3ZmJkZjJlZDgyN2Q1ZjVhMDExN2EyMWM3NWFkZTg5NzgyYjNkYzRlNzMwN2Q5YTdhZTQwNmVhZDAxNDVhZWExYjZjY2UyODYxMDNhNTVjZTE5NTk5OTIxNGI4NGJjMjUyODFiZDdmZTUxMTg2OGE2OTk0NGQ0ODNlMDVlYTZiMzliMTE1NThhYjQ2YTMzZDIyNzczNGViM2EzODZlMzBkNThjMzAyOWVmMGNiNDA0NmMwODU2MDc4ZDU3YTZkZjE5NGFhOGMwZTEwZjliNmVkOGZiNDBiIjoxMTI6IjQyM2ZkNTQyNDk4ODI1Y2M1NDUwMWNiNDJiMmMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YzBlMWM2YmRlNzkzMTVmNzlmMjJlYmM3NzEwNzIyOCI6IjljZDU2YjE2YWE0ZTEzMGMzZGJmMzBlNzAxZTg3ODRmZjM5Zjg2NjAzMWU3NzhlOWFiNzJiODU4YzNlMzMzZTk1ODliNGI2Y2Q4OWQ2NTQ2ZTUyYTQ3OGQ5MmJkNTlkMGU0NzU2ZDZiNTAzN2FiMTg3M2Q4ODI0MmVmMzFiZTY0Mzc0NWQyNjM5NTM4NWI3MTAzNGY2ZjBjMGM4NDgxNmYwYzY3NTU5NjVmYzhhNzcxOGY4OTFkNjE4ZjIyNjY4NGJjYzc3Zjg3ZmUxNjhlMTc4YjMzMGQ0YjRjMGViNDc5MTAyODAxN2ZlNmM0MmU2OGIwZTE5NTY1NGE1ZDY1ZTUiOiI5MDExZGVlNTdjM2I4ZTExMmVmYTRkMmI4MTZjZjE4OSI6IjU3YmZjY2NjNmYwMGMwYWJiYzVmMzA1ODlkYmI0NzU5NzgzOGZkZDUwZGQ2MjJlZWVkZWUzMzgyNGU2M2JhNzg3NTNjMDVkMjU0MzY4N2Y2MGRkZTUwMTc1N2I2ZmI3NGMxN2ZlMzRiM2U5YzQ1NWViMzhjZjA3OGM4Yzc3ZWZmNjhkM2UzYjhjMjQ0Y2RlNzBkZGY2MTcwMzY2NGQzNDE1OWExMTc4NWNjNjYyNmViMWNhZDcwYWI5NDQwNTYxNmZmZjUyYzBmNzgxZWU2YjQzZWYyYTQ0OTkyNGE3NmI3NjIwMzVmZjQ3OWNkNjAwNmMyMWE2MmE1NmExNDY1MGYiOiIyYzFlZjk5ODc0NzE2MzEwNGU1YTdkMmE0NDBhMWExY2MyYzIwNDQ2YTlkMGNmNWYxMzhmODVjMWY1YWZkOTBmZGMzZmE0OTMyODQ1YzE1MDUxOGY0MGJmZDU2NTY5YTU0NzkxMjZjNDkwNjFlZjM1MGI0ZmFlODk1MTcwYjRlYjk0ZGFkN2I0NTY4OTBhODIyZTFiY2I1N2Y5YmRlNWJlYTc0N2QxN2JlM2QxOGVhMjAxY2Q5OWJjNDZmZWUyMTEzMmM2OTE4ZmZiMDExNzc0NGY2YmEzZjI1YmM4YTUwZjk3MTk4NTQzMTRiOTM0YzNhMzIzMGY0NzU3YTQ5MTEzIjoxMTI6IjRlZjlhZWJiNzIxZGFiZTJkMDkxMDEwMzdhNjMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5M2YzZmE4NWRiZGIyNzg0ZmIwNzhhMzRiMTExNmViMSI6ImU3YTBmYWZkYTBiOTBjYWRhNjcxZjVlMmFkZmQyZTJhNWYxNGU0NjEzZWE3NmFhZDU3ZTc5ZTJjYjUzMmY2NTUyMTA2MTRlMjAzNmQ3YWMwMDVlZDVlNTE2ODE0ZDg2NjdlZDcxZTBmMjliOWM3YjQ3MGY0NzIyMzI3NDA3Y2Q2Y2U2ZGJkMjk4Y2VlMzdiZmYzM2MzNWUzNGNkZmViYmJmMzM5MzQ2NzM0NjlkNmI5OGJlY2Q2ZDI2ODY4OTc3ZTY5ZTA2ZGVlZTk5YzExOGZkNGRhMzUzMGQzNjdkMjBkMTUxMDdjMDNlZmUwZDdlN2IzODcxMDIzMWUwZGNkZjAiOiJmNWE3YjBiMjZkMWU4NmY0ZmM2OWY4MWM5ZWVmZjJjZCI6IjNkMmExZGFkY2NjNTk3YjVlN2I2Y2U0ODc2MDE1MGRlZTAxYzg1NTBiNTI1YzU4N2FiY2NlOGMyYzdmYjYyOTE2ODNhNThjMmU0MmU3YjdiYTZhM2MyYTExN2RkYjdlNjdlYTA1OGE3ODk4OWQ2Nzk0NmZkOTU1MWUzMGZjYjUyNjE4ZGNiOWZhZTA3OWNhNTZiNzQ1NzJkN2I2YTdiNmE1YzYwZTkwNmU5NjM5ZWFjNWVlMWE1YTJkYjg2NDcyMTExOWRhMmM0YzUxMTBjMmI4ZDQ4N2U3OTJjZjY5Mjk2MDBmMTU4N2NiMmQ0OGVmZTY4NjQwMTlhZmMzMmFmNmUiOiI2MGRhM2Y0YjNhMjYzYmMwMTc4Mzc5NjQ2YmNlMzkxYmY1NTJmNjBkMjgzMzI2MTk2MjM3NWQyOTYwYzYyOWRlZGFjNjgxZDg2Zjc5MTVlYTNjZmZkYWQwZjM3ZTQwOTY2OGY5MjNkN2M4NjA1MjViOTk0YjMyNTM5NjUzMTk5NGEyZmJiMmQ0ZTkwOWQwYjFkY2UzMjJlMDc4YjRiOGNkOTk4MjBhMzlmZmQ3YjQ2OGJkM2U3M2I0MThiOWEyY2Q1NzU3YjdkNDVmMDM2MzU3NGM5MjViYzIyZDY2NjQ1YWJkOTVhNmIyOWVhNjM2NmQ4YzIyNTJkMWM1NzEwZDQ1IjoxMTI6IjgzM2QyYzU1ZjVlZTQ5MzA2MDU0MGQ2YjUzNDkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNjNjMDVmNjljZGM0ZTUxOGZmNjQ0NTkxMWQxZWRlMCI6Ijg0ZDhhMTg1NTQyMzI5M2RlMzdlYmZkOTcxNWE5YjQ2YjE3NWJjNmQ0NGU5NGFjOGEzZTdkNDA5ZThhMjI3YTU3YTZiODUxNDRhOGVlMjM1NjRmYWRjMjg3NDJiNjllODljMGQ0YWFkZjBhNzg2ZjlhNWQ1ZjkxOTg5MjM2NDNmZmMwYmZkMGY5NmU0M2IwOGYxNDM1ZDRhZmMwZTQ5YzBlMjI0MWQ5Mzg3ODA5NzViYzdhMzFjZGYzOGYzMDM4MDc1M2JkZDY2YmU3MmI0ZGZmMjYwYTM1ZGMxMGI5YmEzNTA1OWJhNjFiMGJlYWIxNmUzNTA2ODcyMWJkOTUwZTMiOiI0YjE2MTg4MjQ5MDk2NjgyYjg4YWE1ZTRhMTNmNjJjMSI6ImEyMzhkMTExMWVmYjc4MTFmNjgzOGMzY2I2ZjNiZjNlMGVjZWU2ZDhlZmIyNjg0NTM5MWY4YWRiNTFlNDk3ZTg0MGVhNDAzMThiZjhlM2NmMDY4MWMzYjY5OTUxYzRmMDNkNWE0YjVlZGY3MTE5YTE1MGVhZmU2ZGMxNmI2OGYzZDJiOTFlMTQ1NDYzNzEzNTE0OGY0ZmVjMTMyYmZkOTZjYTA4ODE2OWEzNTk2MWQ0YzY2MzUzNWI5ODUyZjEyYTAwZWM0YzA4MDgyNTUzYTA5ZWEwNDYzNzljZTc0N2M3MTcwMzYxNTRkMDYzZDg3NmEyYjk1Y2Q3YmRiNDJkYWEiOiIzYmY3NTFjZjYzYmMxYjQzM2JlNjA3NTMwMzk4NmFjMWQwNTkyZGVlNDAwNzc0ZDBiYjdhOWU3MjIyNDQxNzYzOWUxZTgzZTY5ZjM0MjI2Yjg3MzM2NWY0MWZkYWM5MjU2MjhmMzJlZDRiNTcyYjM3NDMxMGVkZmQ4OTJjNWUwYzMxOTdlNTllZmJjMjJlZTExZjBkNGE2NmJkNzNhNmY1YjBkZTdjMWNiYjA2MTJhNjNhMjYyYWY1MWQ0MTg1NzdhOWJhZTBhODU3N2U1NDczODI4NzhmMTMwNDdhOTJmNTFhODY3ZjhiN2QyODNkMjA5OWMzNGMyMzY5MThmNzE4IjoxMDQ6IjBkNzc4Mjk5YzRkYzA0MTVjYTc4OWRkNWIyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTJmZjdjYjlmZTMzYjA0YTA4N2Q5ZWU2ZGI1OGVjMGUiOiJlZDdjMjIyMTgwMDljZWI1YjMyMjA0NWZlY2MxZmQ3NDhmMjc2NTUzOTdhMDljMmMyOTgxM2ViYTlhNWNiZWViZTg4ZDRhMzVkZmQ3NDFlZjBhYzFkMTFjNGFkYmM2YmZhZTgyNGFmODhlM2NlMDlmNjhkOGNhNzY3MWRlOTFlYzllMmJkNWY3OTBkMWNiMTc0OGUzNGIzNTYwYzliMTA3MjZlYTRiODViMTI3NzMxZDhhN2ZkZmQwZGRiZWQxMWFhZjE4MTc5OWY3MWE2OGU1NDJiNDNlZDk4ODkyMzdkMmZmZmUzNzBmNDEwNjRiODEwYzJlMTRkMWFiNjYxNTE3IjoiNmM1OGViOGYxZjU2MWIxODBmMDdlZGUwZDNhZTMzNTgiOiIwMGNiNjNmYTBjZjUyNmM2ZGIzN2UzM2NmMDkyZjNmNDIxZmQyNThkMjg0NDZjOWE3YzY4N2I5NDFjN2ViNWUxYzViZTI2N2RiOTkyZDBkOTNlZGUwYjA5MDMwZjk3OWQ0NTFlY2JkYmJiYjM4NmNmMWQ3NGIyM2Q1NWI3NGY1ZjRkNTIwYzAwMGM5YTQxOTIyZjU0NTY3Y2E3ZGZjZDg0YzY4ODgzYTIzYzdhY2MzZGIzY2Q4ZDM0MDIxN2VlN2M1ZWEzOWI0MWNmMmMwZTU4YzI3MGExOWVlOWUxNDZkMmRiZmRhZjhiYTNlMjRmZGE3ZjJjNWU0YmE2NTYzZWY0IjoiZjBmMTE5YmRkZjVkZGYxNDdmZTA2ZGE5ZDQ1MTBkOTczNjlkOGUzNDU1MTlkZjIxODhiOGQyZGJhZjhiN2QzZTAxZjNjMjY0NzUxNDFhYWUyMjRlNWNlMWIxMzFjODA5NmYwZTJhMTdjNGMyZGY2MmY3NmYwMDljZmM4YWEyMGRkY2Q3NWE2YTQyODFjZmEyMjI1NDg1Y2EyMmFhYmNiNjBmZjExMjY1YWNiOTJhMTllZDY2Nzk3ZmMyYjQxOGFlNGI4YzcwZmJlY2YwZmQ2M2Y2YzIyYWQ2MmJmZDZmNDBkOGQwZTJhYmViNjIwYjdiNGY1ZDhiM2UwNDFhNTNlNiI6MTA0OiI3ODg1Y2EyMmM0YWZkN2RjNmNiNDQwZWEzNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJlNzM5YTQ4NWI2MjkzYjQzNTM1Mzc5ZTNiMzA5ZmU4IjoiNjk5YjlhNTY2ODA0MmM0OGM2M2ZmYjMyM2MwZmFiMTg0NDY1NDY0MTdiMmYzM2E2OWFkZGNlNjE3OGY5ZDViN2RmYTg5MWZmMjAwNGViNTdhOThjYTAxMmMyNjY4ZTA2MTQyNzZkODliMjFiN2JmYTQzNmIyYWExNTgyZGFhYTgxYTZhNzcyMjE4NmU5OWRkMTZhNTc4NmZkMGU4YjA5YjE5NDc0NjIzMmZkNDEzOTg0NDg0NTI0NzkzYTM3OTExMmUyOTdkNzMzZGNlMDYzNDA4ZmU1OTM2N2Y1OTI5YzUwODZiYzIxOTFhOGZkZDYwYTM0NjA1MmMwZDEwOWQ1NyI6ImM0ZGVjYTNlZWVhODAzNTI2MjRjOTM1MjNmMzVlMGFlIjoiNzA0YWEzNmE4MmQwMmM1NmY0OTkyNDY5YmI3ZThhM2Y3ZGRhMTMyNjA2OGJmNjAxN2U0YTBjODEwMzUyYjQ3NmFlYTEyOWMxYmExZDQ5NzRiYzBkMDUwM2RjZjgxNmI4OWMwZGM4ZTZkMDY2Nzc0Y2U5N2NlYTY1YjVmYjVjN2I1YTdmOTNlNWUyYzcxMjZkZDNiMjQxYjk1OGU0N2Q4MTUwYjQyMmJiOTFjNGFmYzQ3ZDUzY2ZjMmQyMDE3NmMyZWEwYzg1YjM3NmRjNDZhODZiYmFhNTNjNTg0YWE1NjFmNjY2MmQxMWRlNGUzOWU1MGYxYTA5NWI4NTU1MTM3YiI6IjMwYjhmYTJlNTI1NzdhN2U1Y2RjMTJhN2M2MTk2MTViMTM0YWQ0YjQxODkzYmE5MTIwNjUxY2QzNWM2ZjJkNDhlYzZiOGI5ZmE5OTM2NmM0ZDYwZTY0M2E4Y2NiMmNiYjM1NjhmNzY0N2Y0YWQxYTEyZDE0ZGViOGFhYzAwZGM0ZWY3ODAxMzNlZThkZjhmNDk0Njc1ZGViN2Y2NzhmZWQ1NGU3MGQ2YmY0MzQ3Njg1NGViMDI4NmE0OWNkMzIyY2MxOGRhYTIzOGQ0NTgwZWU2NjVmYmM3NTkyOTVhM2UxMjU2N2JlZmYzZTgyMzgxMTA5M2NmMGYwMmQwMDgyMGIiOjEwNDoiZmY4OWVlNTJmYTRlYWViNzQ4Yzg2NzY0OTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZiYmIxMjM2MWM5NTk1M2E4ZDc1N2JjYmI5MjU2OGViIjoiYzNmY2NjNTY5M2FiZTUzYTEzZTUyMDlmODA2MTFmYWQxZTgxZTdjZTE5YTQ2MTI2NjZkOTU0YjRiNmQyMDYyYmVlNzY0MTgxNzE2ZDVmZTBmZTFkZTQ4NWJiNzM5ZDZlODYyNWQ1YjZjZWRjYWFmNmU0ZTVlYzM1MGJjMjE2OGMyNGQ3NzY0ZTc1YjBjZjA3OWQ3YWQxYjVmYzI0ZGJlZDE0YzVhZTQ3MTQ3MzRmNDI0YjM2MTFkZTBmNzBhMGE4ZDc1MmZiMTQzZTFiN2U1MWViYzk2NWEwNjAyMWRlMzcxOGFmMzBiMDY3ZGRlMjcwZDgwNGZiNWI4N2ZmYjI5ZiI6IjQ4Y2E4MjFlNWU0M2ZkNTg2NjgzODA0OTFkNThjZGZiIjoiZTk3MjgwZmQ3OGViOGJkNjk1MjI3ZmM3OTQyMDk3MTA4MWRlOGYyNGJjOTVkOWExNzk0ZWQyYmViZjViNjhkOGI0M2FlODI4OGViNWNlNzJkYjA3NDAzMzRmZjliYzliNGU2NjA0MThkM2NmZjhjMzQ0ZTUwYzc5NjJjMzY3YzI2MjQ3ODA2ZDBiNWMyYWUwNDIwYTcyNDIwM2RjZjRmZGVmZDY1MTNmODI2M2Q5OTVhZmE0NzgwYTljNGU5MmMyNTQ5NjEwNmZlYzM3MGQwNDUwZDkwNzIyNTE5MGVjY2NmYWU2MzRmMTFmOGY3NGY2NDIyYTY1MmIyYjlhZjllNSI6IjYxY2ZjNWE2YWI2ODQ3YmYwMTI3YjM1Y2UwNzEyY2JmYTljZDI4ZGZiM2YwYjRjYWMyNjI0YzUyY2Y1NWYzMTFlNTVlOWFiZmYyZDQ1MTRjNmZlZmY4MDFlYTg3MzlmODc0ZGVkMmVmY2U0YTQ0MGYyYWNkOTVlYmE2Yzc1ZTA5YmNkOTFiODk4Yzk4NTYzYTI2YjNkZjQxNTY1OGM0ZDA0YTZhYWY1NDdhOTBiMDNkMTc4OWJkZjdhYjhmMDlmNmQ5ZjIyMmY1Njc0NjEzODAzNzJhOTc2MjQwYjdiMTgwYzNmYTdiNDUwN2U1MzgxNWFmM2Y2YjRhNDY5NzM4MDYiOjk2OiJmODZkNTM3NGQxYWQyNjljYzNmMzY3NTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFhMGE5YjJkZDFhZTMxYjNlNDdiNmRmOTc5ZGQyZmJmIjoiMzUzNzg2Zjk2NjIwYWU3ZGZhN2FlZTE2M2M3YmIzMDM4NGJiMzI0YjUxNmNhZDEzODcyZjQ4ZTcyNTFmNmY0YzU5MDY3NDhiZjJhMmY2MTY3YmMxNDQ1M2IyYjJmNTEzODA0MzA4YmE5MmQ2OTYzOWJlYWMyZjI1Mjc0YmQ1NDc3NzQ0MjgxYjdlZjdkMDY2MWIzNjcyY2Q0NWFiZDViZDMwZDk4ZGVhYzRhZDBhNTY1MzA4YzAyMjRkZmY1OWUzMTkwYzg2ZGY2YTVjNTIwNTVmOGUwZjczZmEwMjRmOTkxNjIyMTk4MzdjOTk5YTljMGExMmM4MDZmMDEyMjdhZiI6ImIzOWM4NjE1ZmEwNjI0MTJmZDliNmFjM2E3ZTYyNmY2IjoiZGVhNzViMTdjZDEzZGQzM2I1MDE2ZGU1NDljNDRmYTljODhiYWY0MjRhYzgwYzQ4MzVlODY4YWNiNTgwODJmZmM0MjU1YzY1NTg3OGExYzYyN2E0NDE2MGQ1ZTUwNTRhMGEwNGY2NWZkZmI1NDJjZDM0MmJlMmFhMmUwMDAxMTdiZjhjZDY3YjAyZjNhMzcwMDc1NTUwOGY5YWY4Mzc5YzIyNmFkZWQ0MDQxMTdhNWNhM2ZhNzA5Njg0OTVlYWIyODcwNjRlZTU4NGI0Y2U1OTY2MTJmMmM0NjVkOTk3NTE4YzY5OTU1MThlM2JiODgxOTY3YWI2Yjk5ZDdmNjJkNyI6Ijg0MzBiODczNWYwYjAwMmUwOThkNTEzZWVjN2IzYTg0MzFhM2ZkYWMyYjdmYWYyNTZhN2JjZjA4ZjNkY2Q2ZmE1NDlmMDI5MjQwYWNhZTRkYmQ0YWQ1NDc1MmJhMzU4YzE0ODkzYWFhNjdhMDAzMjYxYzI1MjAyMGQxNGI1MjE5MDZiMjNjMzdkZDgwYWY3MDNjMjk2NGNlMTM3NzNkZDcyZmE1NmMzODk3NjhjNmVmYmQ0ODU5NTM5MDBiNTZmNmJiYWE4MzdmMTY2OGY0Nzg2Nzc2MjFhMjk3ZDRiNWEyYzFhODZmNjg5ZDg2NDRjYWVjNTE0MzViMGRkNjZjNzciOjk2OiJmMDAwZjJkMzk4ZGYxODUzNDQyOGYzODIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRkYTczNmZiYTJiNzIwMmVhMmJhNjA3OTNkYTMzNDRkIjoiNGYwMDQ4NTJlZGQ1ZGNkZTEzNTA3MjUyZWQ4YzJiMjBhMDkzYWM5MDgxY2UyYTgxMzNjNDhkMjgwN2U1Zjk2OGMwNGEyMGRkNTJjMDcwZDZjNDNjNzA0Yjg2NTBkYTdmOTRlNTQ1MGUwZDM0Y2ZjMmIyZDJiYTdjYjUzNDNlNmI0MjgxNjMzYzZjMDY1ZGFlMjdmYWIxOGNhNzFiZWEwMThlYmE5NGQyMGU3OGM1ZTMyMjNjNzBmNTBjYjc3Mzk5YzFhODk0MzZmMWU3MjEzNjczYWU4MjVkNGZjNTUyMzY0NTAzMTY5NmRmMTBmOWI1MjM4YzAzZjczM2I0ZGZjZiI6Ijg1NzJhZjQ0MmM5YWY5NjUyYTE5MmQ4OTNjMThiOGMzIjoiNDI5OTE1YzMzMDlmYmEyYTQyYjhlODlmNDJhOTM3NmEyZjMyOTgwNWE0ZDZkYWFlMTFlOWEyMGMyZjk4MjY3MWVmOGE3NTM5YTk2NTc3NzdkMDNjYmY3NTVlZjkzYmUwZDhlNDI2ZWQwMDg5OWE1OWU4Yjk2M2ZkNDQyNjlkNjQ2OTJlZDA3YjIzMWNkZTkzZTg1Mzk3Y2YxMjVhNzUwMzJjYTM3MjZlYTFmZjFiMDVkNzlmMjA0MGMxMTM1MDEyYjkwNTk3MTg2YzFkYjJlMTZjZDEyOGQ0NWE3YjlkOTM0ZWMwMTM0MWQ5MDMwZTk3MjFjNjJmNjIwMDMwNTliOCI6ImZmNGU0NmM0MjM2MzA0YjhkNTJiYTJkNmRiMjY5Zjk1ZDJjZDVmZTQzMThjZTkzMGQ0MDcwNTE0NjljN2UzNmU0NGJiY2M5MDljNDk2NjI3NmY1YTJlYzcwMDIxOTgyZmVjYmVhZTM0ZGYyMzVhM2U5ZTAzNzBhZmE1YTI2OWNhODg0N2E4NGI4NDc3ZjdkZGQ2MDU1ZDBmODAwZmY0ZDQxM2Y2M2RiNTE3Yzk2ZDE1ZGJlNzg2NTU3NDhlZGQ4MjBmMmVlNzlkZjVlY2EzMTcxMTg3MDAyMmYxZjUzOTRiODRmMDViZmVmOTdmOTljYmQ2MjA1ZjhlNTIyYjNkNWUiOjk2OiI2MjRiMGI1YjYzNzRjNTE1MzgzNWI4ZTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjViY2M4NzQxMTRiOWQ3OGMzZWI3NDhhNzgzZDE0NDhjIjoiN2Q1NzQxOGJjZWEwMDcyNDdmNWUxOGMxN2EyZTQ2MDFjM2ViOGM4OWY2MWVkMzY1ZDVhZWJlZTc1OTNjZGQ2Mzg3MWQ5NjRhMjVmYzlkNzIzZjI5MWQzOWUwYzRmNzUwMTI0NzFmYWY4ZTA2ZGI2MGM0YWQ4YTI2Y2Y0MzRiZDgyYTI5YThiNjUzZmRkYTFiODZhN2U0ODAwYzFkNzBjYjVkOGI4YTFkMWFmNTI4OTQwODJiYjI4MmZmZGRlOGYwMTI4YTRhYmI2OGFlZGNmY2I1OTE2MGY2YjVhYWY0NTI4MTJmNGQwMDQ3MmQyODYyYThiMjI0ODBlNzEyMzFiMyI6IjVmNGZkZTQ0MGZhYTk1MzdkNjJlNjI5OTRhYjIwZmI1IjoiYjVkZmUwZDk3MWYyOTIwYmE0YzAyOWQ0YzM0NmE0OTc4OGI0OTlmYWFjZGIxOGI4ZjkwNWYxNDU3YThiOWZhNDg3MDk4OTM1MTZhN2I0OGJjNjAxNzEwYmZkNzNjMTJkYTA5NGMyOWRmNTc3NmQ0OTFjOTk3OGY4YWIyMzdmNjA1Nzg1YjAzMDQ0ODhmMWMyMGJmNWE3NjdiYTZkNWUxZTI5NjE5NTdhYTEwN2JkYmEyMzU4YjgxZWYxZTA2NTc2ZGI5ODViM2VmODE5NDcyNWI3NWQ0OWRlMWRlM2E1N2YxNjFkZWRlNTA4ZTM3YWQzMzU2MTM0ZmEwYTFhYTQ4ZSI6IjZiYzBkZWM5OGJlY2U2YzRlMjQ1ZmU5NzhmNmRiMTEzZGVjYTc1ZTFiNDc1YmMzMWYxZGEwYzc0NTdhODVlZTdhYWM4YmU1ZjIxMjFjMDYxMGI5OWEyYzY0NTE5ZmMyNTE0YjY0M2MzNzliNGY1M2M1NDMyYjk3MjlhZWE5ZmNlY2I4OGEyZTJkMGE2ZTc0YmUwNDg1OWE2NmY1NWZiMmFmMTU5OGJjYjAzOTEwOGVmN2ZjZmQ5OWQ5NGU3OTI4N2VjMWY2MmJkMWJmNWZmOWRkNTFhYjEyZmFlNGY2ZTIxYjk1Y2E1MDAzMmY5YTY1YmQ4NWY5YTFhYTA1MjQ5NTAiOjY0OiIzNTRmYjhiY2QzOGYyYTI2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MjdjODkxNDZlYjdkNzY1NzhkYzE3M2JkOWUxNWNkYSI6IjFkMzkyNDkxMzA0MDRkNjBlZDQwMjQxY2YzMzU0NDU4ZTA2ZjE0NzRiMzcyMzU2OWQ4ODIzNWYwMzA5ODA1M2ZjOTkwMTBmMzk0MzU2MjBhY2M3MTBhNGUzODZiMmVjYmY5YjMyN2E4ZGNmYmVkZGMwODQzNTNmZmYwMjlkMjQ3ODdjZTgxZTc0YTVlMWFjMWVmMDk2ZTBhMmFlODgyYTY2OWNhMTY4Mjc1ODA2YmI3ZjQ2MmU2NmM5NDFmZmZjNmVkNDRiOTYyODQ1MGUwM2E1MDMyNjc2YzFlZTRhZWRmY2IxNzY3MTUwZDU2YzdkNzNhOGE0N2Y2ZDE5ODU0ZmEiOiIwMDkyZTc2Y2Q4ODgyZTVmNzdmNGM4NTE0NDkxNzA1ZCI6IjBhYzQ2MzEzNThiYjkzNzVlMDc3NTY2OTJiZGU1OWQyNzAxMmU5MjFmMDU0ZmRmZWEwZGRiMjQyYzQzNDIxZjRjNzI0MWNiMjEwY2I1YzE3MmQwNTNkZTI3NjNlZmQ1NjVmMTEzOGZiZTdmOWNkOTk4ZDgyNWFiODAwZGY5MDA4NDM0NzRlYmY4NTdiMzM3MWM1NTViODk2NzBlODYzNTRmZTQzMGY3MTVlYmJkMGVjYWQ5NzRmZWEzNGUzYmJhZTQzZDNjYTNjYTE3OGYzMzYxZjBhMTFmZDc1ZjYwZTkxNDBmNDQzNjRiMDJhMDczZGNjZTgzMzlmYTI4Y2I1YWQiOiIyYjM4NWU5ZGY0ZWQ0MWNkY2E1M2E0YWM4Y2IzZTBhZjc1ZWRkZDUxOGI2NzI3MzgwNzEyOTUwZDk2YzM0YmM2YTBhNmFjMDIxODRjMTk4NzU0ODkzMmIxMTZlYzlhZTdhYmYwMTE1N2E1MGU0MjJiM2U2YWE2MmRlYjBjYjJkODFiZjdmZTBjMjUwNDFhMzU1Y2NhYWViMDQ5YWJiMDM5M2FjZmU5MGQ4NjllOWVkZmRmYjY0Njk3MWJiYjFiYTllNTk4M2NkMGUyNzM5MTU4ZmFiMzFiZTI2Y2ZkZjkyODZkMzQ3YjU4YjAwZjc1ZDlmNDhlY2UxMzUzMzA4YTkxIjo2NDoiOTA1Y2RmMjI4YTY4YmViYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmUwOTY2MDkwOWE5YWEwYTUwOTU4MDE2YzNlMDc4OTUiOiJkN2IyY2ViMTgyZDRhOGVkNTc1NzJjNDIzN2JhOTliYmRkNTg5MDkzZGIwZjcxNzMyZjllNjc1NTlkMzA1NGZhMWFmMTk1YWE0ODY0ZmRlNDEzNTQ5ZDI3NDY4ZmZlN2M1YzIzZTI0MmNhYjRhZTRiYjllMjY1NzQyMmRjM2ZjNzhmYmRjZGU4OTJlZDIwMmJlMWU0N2YwOTViMDljZmM1M2NmZTg2Y2IxNmUyZTk1NDQ0NDkyYWQ1ZDBlZWYwNTMxNzhkNmIwNDg1NzMxYmU3YTUxOTM1NjNiZjU2ZjYzY2MwNjg3ZmMwMTY3OTI1NGQ3NGU5ZWQ3ODg2NDUwMDRjIjoiYzRmODY1YmU4YjUwNjJlNDg4YjE3MjU3NDlhODc5NDUiOiIyNmY1MGFjZGVmZGU0ZDU4NWZjNmRlNmM2MjM0YzllYWQ0MDY4NDM0OWEyYmZkMDIyZGY5M2Q5Nzc0YzlmNWI4ZjUwNDc0MDMyYTQxN2JkY2MyMWE3NGRhNzJjMDI5NzQzN2EwY2VmOGY1MjdjOTIwNTc5N2Y3N2I0MjI3YzI3MmUwOGFkMGIxMjBhMmEzMWVmMTNlMzcyY2FkMjM4N2NjYzFiY2VmYzg4ZGQ1ODg5OTgyMWQ2OGYzYmU2YTRiMmNkMDg2OTdkMTg5N2VmY2Q2ZWQzYTBkNzg0OWY2Y2JiNTBlNDY4MDA2MjdjZmQyNjk2NGUyY2ZlOWYzNjYyNGQ5IjoiMzIxZjZkNzlhNjY1OGM3YzJiNjdmZTNjOTMyMjM3NTkzYTZlYzdlNmZkODE5OGFiYzZiMGI2YmE1ZDRkYWM5ZTA2OTVmMGM2NGRkZTFjOTRjMDM4MzgzOWVlMzdmOGJiZmNjNTE2ZjI0ODcxZmQ3OWE5YjkxMzVjZWVmODQxZTRjOGRkZjZiNTc5NjJjMGU4YWQ3YWFmMjEwZTk3YTQzNDg5MDk3MjcwNzU2NDA0ZmRkZGU2MzdkZTQ2MWI4NjQ0ZmVmMjQ0MTQyODIwZTFhZjEyYjkwZjE2NzQ4YjA5MTVhNmI3NzNkZmJiZGY2YjE2ZjFiZWFjY2I0Y2Q1ZWRiYSI6NjQ6ImIyOTRkYjdlZDY5OTEyZGMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xMjgsMTI4LDEwMjQsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVlNDVkNTc5ODFmNjVhNmIxNzBlZmE3NThjZjQ1NTNkIjoiYmM4ZDRjNDE4NDQyNzQzZjJmZGJhZjk1YjhmODdiN2MxNWEzMTc2MDg1ZTM0YWRkZjRjZjBmYjNjMmRmMTU1ODc1MjY2OTFiMDdlNjQwN2JhMTY5OTliNzIzODI2MzVhMmFlYmI2MmQwNWMxNTQ3YTdkMDc0Yzg1N2EyMzEwN2M3NTc3ODY0ZTdmN2JjZGI1YjZkMWZiNTAxMzYzOTFmODljNDJkM2YwMjc1NGIwZTRlZDBmY2IwYzAzNTc2Yjk4NmFmNWMxMmNmOWJmNWUwYzU4NWQ2YWFmNDlkMGM2ZmIyZWMzMGVhZTk3YjJiODUwYTM1NDc0YmZiOWEyYzA2OSI6ImI0MzQwM2I2MjdmZTllMDEzNTE5MmQxYTA0OGM2ZmFhIjoiN2EyN2VhMjZjNzYwN2U0ZTdlNjI3ZjMxNjFiZGYxNWYyMWYzZDYyZGMzM2RmMTQ5NTE5NzE3MTJmOTYwZDNiMjA4MmQ3NTM5NWM1MDA4ZTVlYTAwZDI4MmQzNTBmODZkYWM4YzYxZjVjMGY5MGU3Nzk3YTViNjFlZTk2ZjdlMzMyZWM1ZGU1MWNiMTM3N2U0N2M2NDFmMzI2ZDFlNTg4MTdjOGM5NWZlYjViMjkyMzc1OGUzM2IyNzkxOTFkMGE5ZmZkMDliNzYxOWIwMzE4YTcwNzc1ZTM2YWJmNWY3YWI1OTQyMmZmNjg5MTRlN2I0NzhjNDQ4YTdiMTQxYzRiZiI6IjkwZDhhNjIxOGRhMDYzYzM4ZTBmMDZkNTQ4YTNkNTY4NWZkM2UwZmJhZjYwOWM3N2JkZDU3M2JiOWM2M2YzMDU5MGVhZjhiMTgxYTJmZWI4MWM4YjNmNWYzNGE5NGRjOTRiOTA1MDM2YTZjNjliOTcyNjMzMDJiODY3NGQ5ZTA5MzI1MDY1NTg4ZTk3YzBiNWIzMzExNjk4MWYxZjM2MmE3YzViYjFlOTk2YzEyNmMzMWZiZDYzNzkxNzcyZjRkNTk0NjMyZjQwOGZkZjAxMWIzZjJjYzc1MGIwNjA0NTJjMTgxZThlMDk2OTdjODY2MmMwMGM4ZDRmMjlkODc1YTciOjMyOiI2MTFhYmVmNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTEyOCwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDBkNGJmMjA1MDlhNjFiYzc2NDMwZmZhNWYwMTM1ODkiOiIwMzZhMTkxYTM4OGNmM2M1N2M5ZTZmMGUyZjVjOGJjM2Q1YzI1ZWU4ZTJmZWRmYWRiN2I3NDMzMTU1YzdlNzkzMDRmMDkwNWFiMmExN2UxZjA0ZjJmMmRhY2Q0YTQxNTIxZDZjZTIxMzk2MWRmOWRjOTEwMWQ0MWRmNGU0NDI0NjQ4OGZiZWRiNzVhMDEyNTZmYmM3Nzg0NzY5ZWI4Zjk5ZDQ0ZDVlYWJmOTNjZjY2N2ViYWUyNDM3Y2NlZGM3OWVmYTU4YzA3NTE4M2Q0NmE1YzIwYmY0YzgxZTBmOTc1NGFkMzVhZjY1ZjdjOGFhZmU3ZGFhMzQ2MGM2ODkyYjFhIjoiMjViMTAyNmEwMDk0NzBhNWNhOGNhZWViNjcyMDA3OTIiOiJmZDc1YWNmZDVhYTI1ZmI4YmNjYjUzNjcyZTVkNmE4MDgwMDgxNTA2Y2YwM2RmMmJhYjA3NDZhMzUzNTEwOTk2ZTAyMzdkNjM1NGVlMDIxMGE0MWYyMGY4OGVjNjU2OWYyYjIwMGIyOGM2YTMxNDY0YTA1MzNhNmJjNDVhZmVmM2FlMzgxNDI1YTM2MDZkZTI4NjZkYmE2OTQxMjRkOTZkYTlkMGEyYjA2MWI3ODc1MjRlZTZlNWQzYjFlZjVjNGJjZjE2ODgxMGFhMTc3NjYwYjdlMTM3OWFjOGE0ODBjZTQzZDczZGZjYzY5Njg3M2NlYTJkZjQxOWYzNzI2NTFlIjoiY2FiODA2MTViNjY2YzQ3ZmNhYmYwZDk4MDU4NDJhYjI4MDUxNTBhYmFkNGRlMGFlOGIxMjMwNmJlZDUwNGQ0YTdmOTFmNTIzNzlkZjY1Y2I5NTg3NTc3ZTU5ZGFmY2Q0MjAzZDJlZDI3NDNkMzU0NzIyODVlOTUyMmRiMGNlM2RkMDI3YTAxYzc5YWM2NGNhZWUyOWVmMzc1MmEwNzcyNTRiMGRjYTI2OWY2ZjIwNmY2Y2M1NzVlOGZlZGIwYmE1MjVkY2Y2MjUyZmE2ZjdiNjg4NTU2OTMzZjFkZWU4NGIyYWQzNmEyNjY2OTVjZTg2NzIyMjljZWRkODJmMjBhMSI6MzI6IjMyODc0NzhjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTI4LDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTQ4MTQ3NmZjZTc2ZWZjZmM3OGVkMTQ0YjA3NTZmMSI6IjI0NmUxZjJiYWJhYjhkYTk4YjE3Y2M5MjhiZDQ5NTA0ZDdkODdlYTJjYzE3NGY5ZmZiN2RiYWZlNTk2OWZmODI0YTBiY2I1MmYzNTQ0MWQyMmYzZWRjZDEwZmFiMGVjMDRjMGJkZTVhYmQzNjI0Y2EyNWNiYjQ1NDFiNWQ2MmEzZGViNTJjMDBiNzVkNjhhYWYwNTA0ZDUxZjk1YjhkY2JlYmRkODQzM2Y0OTY2YzU4NGFjN2Y4YzE5NDA3Y2E5MjdhNzlmYTRlYWQyNjg4YzRhN2JhYWZiNGMzMWVmODNjMDVlODg0OGVjMmI0ZjY1N2FhYjg0YzEwOWM5MWMyNzciOiIxYTJjMThjNmJmMTNiM2IyNzg1NjEwYzcxY2NkOThjYSI6ImIwYWIzY2I1MjU2NTc1Nzc0YjgyNDJiODliYWRmYmUwZGZkZmQwNGY1ZGQ3NWE4ZTVmMjE4YjI4ZDNmNmJjMDg1YTAxM2RlZmE1ZjViMTVkZmI0NjEzMmRiNThlZDdhOWRkYjgxMmQyOGVlMmY5NjI3OTZhZDk4ODU2MWEzODFjMDJkMWNmMzdkY2E1ZmQzM2UwODFkNjFjYzdiM2FiMGI0Nzc5NDc1MjRhNGNhNGNiNDhjMzZmNDhiMzAyYzQ0MGJlNmY1Nzc3NTE4YTYwNTg1YThhMTZjZWE1MTBkYmZjNTU4MGIwZGFhYzQ5YTJiMTI0MmZmNTVlOTFhOGVhZTgiOiI1NTg3NjIwYmJiNzdmNzBhZmRmM2NkYjdhZTM5MGVkZDA0NzMyODZkODZkM2Y4NjJhZDcwOTAyZDkwZmYxZDMxNTk0N2M5NTlmMDE2MjU3YThmZTFmNTJjYzIyYTU0ZjIxZGU4Y2I2MGI3NDgwOGFjN2IyMmVhN2ExNTk0NTM3MWUxOGI3N2M5NTcxYWFkNjMxYWEwODBjNjBjMWU0NzIwMTlmYTg1NjI1ZmM4MGVkMzJhNTFkMDVlMzk3YTg5ODdjOGZlY2UxOTdhNTY2Njg5ZDI0ZDA1MzYxYjZmM2E3NTYxNmM4OWRiNjEyM2JmNTkwMjk2MGIyMWExOGJjMDNhIjozMjoiYmQ0MjY1YTgiOjAKKworQUVTLUdDTSBTZWxmdGVzdAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmFlczE5Ml9kZS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFjNmZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxOTJfZGUuZGF0YQpAQCAtMCwwICsxLDY3NSBAQAorQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MDY3NjZhNGQyYjY1MDdjYzQxMTNiYzBlNDZlZWJlMTIwZWFjZDk0OGMyNGRjN2YiOiIiOiI0ZjgwMWM3NzIzOTVjNDUxOWVjODMwOTgwYzhjYTVhNCI6IiI6MTI4OiI4ZmExNjQ1MmIxMzJiZWJjNmFhNTIxZTkyY2IzYjBlYSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYzJhYmRjZDJlNGFlNDEzNzUwOTc2MWEzOGU2Y2E0MzZiOTljMjFiMTQxZjI4ZjUiOiIiOiIzMzVjYTAxYTA3MDgxZmVhNGU2MDVlYjVmMjNhNzc4ZSI6IiI6MTI4OiJkN2Y0NzVkZmNiOTJhNzViYzg1MjFjMTJiYjJlOGI4NiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlZWY0OTBhMGMyZWNiMzI0NzJlMTY1NDE4NDM0MGNjNzQzM2MzNGRhOTgxYzA2MmQiOiIiOiJkOTE3MmMzMzQ0ZDM3ZmY5M2QyZGNiMjE3MGVhNWQwMSI6IiI6MTI4OiIwMTdmZWYwNTI2MGE0OTY2NTQ4OTZkNDcwM2RiMzg4OCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTBjMzQ5MGYxZjBkYmEyM2NmNWM2NGU2ZTE3NDBkMDZmODVlMGFmZWM2NzcyZjMiOiIiOiJmNDdlOTE1MTYzZmEzZGY3ZjZjMTViOWQ2OWY1MzkwNyI6IiI6MTIwOiIxNGUxYTA1N2EyZTdmZmJkMjIwOGU5YzI1ZGJiYTEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDM1NmIzYjFmMzA4ZGYzNTczNTA5OTQ1YWZlNTI2ODk4NGY5ZDk1M2YwMTA5NmRlIjoiIjoiYTM1YjM5N2IzNGExNGE4ZTI0ZDA1YTM3YmU0ZDE4MjIiOiIiOjEyMDoiZTA0NWVjYmEyMjBkMjJjODA4MjZiNzdhMjFiMDEzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTI4OTg5MzdjYzU3NWM4YmI3NDQ0NDEzODg0ZGVhZmU4ZWFmMzI2YmU4ODQ5ZTQyIjoiIjoiMTY5YTQ0OWNjYjNlYjI5ODA1YjE1MzA0ZDYwM2IxMzIiOiIiOjEyMDoiM2E4MDcyNTFmM2Q2MjQyODQ5YTY5OTcyYjE0ZjZkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc1NjgzYzdkZjA0NDJlMTBiNTM2OGZjZDZiYjQ4MWYwYmZmOGQ5NWFhZTkwNDg3ZSI6IiI6IjUzODY0MWY3ZDFjYzVjNjg3MTU5NzFjZWU2MDdkYTczIjoiIjoxMTI6IjA3ZDY4ZmZmZTQxN2FkYzMzOTc3MDZkNzNiOTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDcyNGVlMWYzMTc5OTdjZTc3YmI2NTk0NDZmY2I1YTU1NzQ5MGY0MDU5NzM0MWM3IjoiIjoiMGQ4ZWI3ODAzMmQ4M2M2NzY4MjBiMmVmNWNjYzJjYzgiOiIiOjExMjoiN2RhMTgxNTYzYjI2YzdhZWZlYjI5ZTcxY2M2OSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiZTJmMGY0YWU0YWI4NTFiMjU4ZWM1NjAyNjI4ZGYyNjFiNmE2OWUzMDlmZjkwNDMiOiIiOiI2NDZhOTFkODNhZTcyYjliOWU5ZmNlNjQxMzVjYmY3MyI6IiI6MTEyOiIxNjllNzE3ZTJiYWU0MmUzZWI2MWQwYTFhMjliIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU4M2MzMjhkYWVjZDE4YzJhYzVjODNhMGMyNjNkZTE5NGE0YzczYWE0NzAwZmU3NiI6IiI6IjU1ZTEwZDVlOWI0MzhiMDI1MDVkMzBmMjExYjE2ZmVhIjoiIjoxMDQ6Ijk1YzBhNGVhOWU4MGY5MWE0YWNjZTUwMGY3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI0MDg1N2U3ZTZmMjYwNTBmMWU5YTZjYmUwNWUxNWEwYmEwN2MyMDU1NjM0YWQ0NyI6IiI6ImUyNWVmMTYyYTQyOTVkN2QyNGRlNzVhNjczMTcyMzQ2IjoiIjoxMDQ6Ijg5ZWE0ZDFmMzRlZGI3MTZiMzIyZWE3ZjZmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYyNzAwODk1NmUzMWZlYTQ5N2ZiMTIwYjQzOGEyYTA0M2MyM2IxYjM4ZGM2YmMxMCI6IiI6IjA4ZWE0NjRiYWFjNTQ0NjliMDQ5ODQxOWQ4MzgyMGU2IjoiIjoxMDQ6ImFiMDY0YThkMzgwZmUyY2RhMzhlNjFmOWUxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGMzODZkNjdkN2MyYmZkNDZiODU3MWQ4Njg1YjM1NzQxZTg3YTNlZDRhNDZjOWRiIjoiIjoiNzY2OTk2ZmI2N2FjZTllNmEyMmQ3ZjgwMjQ1NWQ0ZWYiOiIiOjk2OiI5YTY0MWJlMTczZGMzNTU3ZWEwMTUzNzIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjcxMWJjNWFhNmI5NGZhMzI4N2ZhZDAxNjdhYzFhOWVmNWU4ZTAxYzE2YTc5ZTk1YSI6IiI6Ijc1Y2RiOGI4MzAxN2YzZGM1YWM4NzMzMDE2YWI0N2M3IjoiIjo5NjoiODFlM2E1NTgwMjM0ZDhlMGIyMjA0YmMzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzc0NjIwODI4NDAyZTBiZGYzZjdhNTM1MzY2ODUwNWRjMTU1MGEzMWRlYmNlNTlhIjoiIjoiY2ZiZWZlMjY1NTgzYWIzYTIyODVlODA4MDE0MWJhNDgiOiIiOjk2OiIzNTVhNDNiY2ViYmU3ZjcyYjZjZDI3ZWEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZWI1M2FhNTQ4YjQxYmZkYzg1YzY1N2ViZGViZGFlMGM3ZTUyNWE2NDMyYmMwMTIiOiIiOiIzN2ZmYzY0ZDRiMmQ5YzgyZGQxN2QxYWQzMDc2ZDgyYiI6IiI6NjQ6IjM0YjhlMDM3MDg0YjNmMmQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MGQwNzc1NzVmNmRiOTEwMjRhOGU1NjRkYjgzMzI0NTM5ZTliN2FkZDdiYjk4ZTQiOiIiOiIxMThkMDI4MzI5NGQ0MDg0MTI3Y2NlNGIwY2Q1YjVmYSI6IiI6NjQ6IjUwN2EzNjFkOGFjNTk4ODIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkOWRkY2EwODA3MzA1MDI1ZDYxOTE5ZWQ3ODkzZDdkNWM1YTNjOWYwMTJmNDg0MmYiOiIiOiJiNzhkNTE4YjZjNDFhOWUwMzFhMDBiMTBmYjE3ODMyNyI6IiI6NjQ6ImY0MDFkNTQ2YzhiNzM5ZmYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZlZDhkOGFmZGU0ZGMzODcyY2JjMjc0ZDdjNDdiNzE5MjA1NTE4NDk2ZGQ3OTUxZCI6IiI6IjE0ZWIyODAyODg3NDBkNDY0ZTNiOGYyOTZjNjQyZGFhIjoiIjozMjoiMzllNjRkN2EiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgwYWFjZTVhYjc0ZjI2MWJjMDlhYzZmNjY4OThmNjllN2YzNDhmODA1ZDUyNDA0ZCI6IiI6ImY1NGJmNGFhYzhmYjYzMWM4YjZmZjVlOTY0NjVmYWU2IjoiIjozMjoiMWVjMWMxYTEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIzYjc2ZWZkMGRiYzhkNTAxODg1YWI3ZDQzYTdkYWNkZTkxZWRkOWNkZTFlMTA0OCI6IiI6Ijc1NTMyZDE1ZTU4MmU2YzQ3N2I0MTFlNzI3ZDQxNzFlIjoiIjozMjoiNzZhMGUwMTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTRjNTA0NTNkZDNlZjdmN2VhNzYzYWUxM2ZhMzRkZWJiOWMxMTk4YWJiZjMyMzI2IjoiIjoiMWFmZTk2MmJjNDZlMzYwOTkxNjU1NTJkZGIzMjlhYzYiOiJiMjkyMGRkOWIwMzI1YTg3ZThlZGRhOGRiNTYwYmZlMjg3ZTQ0ZGY3OWNmNjFlZGJhM2IyYzk1ZTM0NjI5NjM4ZWNiODY1ODRmMDVhMzAzNjAzMDY1ZTYzMzIzNTIzZjZjY2M1YjYwNTY3OWQxNzIyY2RlNTU2MWY4OWQyNjhkNWY4ZGI4ZTZiZGZmZGE0ODM5YzRhMDQ5ODJlODMxNGRhNzhlODlmOGY4YWQ5YzBmZWU4NjMzMjkwNmJmNzhkMmYyMGFmY2FhYmRjMjgyMDA4YzZkMDlkZjJiZmU5YmUyYzkwMjdiYjQ5MjY4YjhiZTg5MzZiZTM5ZmE4YjFhZTAzIjoxMjg6IjUxZTFmMTlhN2RlYTVjZmU5YjljYTlkMDkwOTZjM2U3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM2YTk4MTAyYWYzZDg3NWJjZGViZTU5NDY2MWQzYTZiMzc2OTcwYzAyYjExZDAxOSI6IiI6ImJlYThjZDg1YTI4YTJjMDViZjc0MDZiOGVlZjFlZmNjIjoiZjJmODBlMmMwNDIwOTJjYzcyNDBiNTk4YWIzMGZhZDA1NWJjZTg1NDA4YWEwZjhjZWZhZjhhNzIwNGYwZTJhY2I4N2M3OGY0NmE1ODY3YjFmMWMxOTQ2MWNiZjVlZDVkMmNhMjFjOTZhNjNmYjFmNDJmMTBmMzk0OTUyZTYzNTIwNzk1YzU2ZGY3N2Q2YTA0Y2I1YWQwMDZlZTg2NWE0N2RjMjM0OWE4MTRhNjMwYjNkNGM0ZTBmZDE0OWY1MWU4ZmE4NDY2NTZlYTU2OWZkMjlhMWViYWZjMDYxNDQ2ZWI4MGVjMTgyZjgzM2YxZjZkOTA4MzU0NWFiZjUyZmE0YyI6MTI4OiIwNGI4MGYyNWFlOWQwN2Y1ZmQ4MjIwMjYzYWMzZjJmNyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImVjM2NjNDVhMjJmZGM3Y2M3OWVkNjU4ZDllOWRiYzEzOGRjYzdkNmU3OTVjYmExYSI6IiI6ImIxMGQ5YzcwMjA1ZTE0MjcwNGY5ZDFmNzRjYWVlMGY2IjoiNzE0OTk0MDE3YzE2OWM1NzRhYWZmMmY4YmFkMTVmOGZhNmEzODUxMTdmNTQwNWY3NDg0NmVjYTg3M2NhNGE4ZjQ4NzZhZGY3MDRmMmZjYWZmMmRmYTc1YzE3YWZlZmQwOGE0NzA3MjkyZGViYzZkOWZhZmRhNjI0NGNhNTA5YmM1MmIwYzZiNzBmMDliMTRjMGQ3YzY2NzU4M2MwOTFkNDA2NGUyNDFiYTFmODJkZDQzZGMzZWE0Yjg5MjJiZTY1ZmFmNTU4M2Y2YjIxZmY1YjIyZDM2MzJlYjRhNDI2Njc1NjQ4MjUwZTRiM2UzN2M2ODhkNjEyOWI5NTRlZjZhOCI6MTI4OiJkMjI0MDdmZDNhZTE5MjFkMWIzODA0NjFkMmU2MDIxMCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVhMzJlYmM3YTIzMzgwMzhjZWQzNmQyYjg1Y2JjNmM0NWNjYTk4NDVhN2M1YWE5OSI6IiI6IjlhZmUwODgyZTQxOGM5YWYyMDVlZWI5MGUxMzFkMjEyIjoiNjFmZjhhOGJjMjI4MDNmMTdlOGU5ZjAxYWZmODY1YmM3ZDMwODNmZjQxM2NlMzkyYTk4OWU0NmViZWQ1MTE0ODk0ZGU5MDZmN2QzNjQzOTAyNGQ4ZjJlNjljYzgxNWFjMDQzZmZmMmY3NTE2OWY2YzlhYTk3NjFmZjMyZDEwYTEzNTMyMTNhYzc1NmNiODRiZDM2MTNmODI2MWVmMzkwZTFkMDBjM2E4ZmI4Mjc2NGIwY2RhNGUwMDQ5MjE5ZTg3ZDJlOTJjMzhmNzhmZmFjMjQyMzkxZjgzOGEyNDhmNjA4YmIyYjU2YjMxYmJiNDUzZDEwOThlOTlkMDc5ZWExYiI6MTIwOiJmY2JiOTMyZGRiMDEyOGRmNzhhNzE5NzFjNTI4MzgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWJmMjI4ODVlN2YxM2JjYzYzYmIwYTJjYTkwYzIwZTVjODYwMDFmMDVlZGY4NWQ4IjoiIjoiOTlkZWMyMWY0NzgxMjg0NzIyYjUwNzRlYTU2N2MxNzEiOiI5ZjQxNzZkYWNmMjZlMjdhYTBlNjY5Y2Q0ZDQ0YmNhNDFmODM0NjhjNzBiNTRjNzQ1YTYwMTQwOGEyMTRiZjg3Njk0MWFlMmFlNGQyNjkyOTExM2Y1ZGUyZTdkMTVhN2JiNjU2NTQxMjkyMTM3YmYyMTI5ZmRjMzFmMDZmMDcwZTNjZmFmMGE3YjMwZDkzZDhkM2M3NmE5ODFkNzVjZDBmZmEwYmNhY2IzNDU5N2Q1YmUxYTA1NWMzNWVlZmVkZGMwN2VlMDk4NjAzZTQ4YWQ4OGViN2EyZWMxOWMxYWVmYzVjN2JlOWEyMzc3OTczOTdhYTI3NTkwZDUyNjFmNjdhIjoxMjA6IjE4ZmQxZmVlYzVlM2JiZjA5ODUzMTJkZDYxMDBkMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZmQ3NWE5ZDM3ODhkOTY1ODk1NTUzYWI1ZmI3YThmZjBhYTM4M2I3NTk0ODUwYTYiOiIiOiJhNmRmNjllNWY3N2Y0ZDk5ZDUzMThjNDVjODc0NTFiMiI6IjA0MWFlYjJmYTBmN2RmMDI3Y2Q3NzA5YTk5MmUwNDExNzlkNDk5ZjVkYmNjZDM4OTAzNWJmN2U1MTRhMzhiNWY4MzY4Mzc5ZDJkN2I1MDE1ZDRmYTZmYWRmZDdjNzVhYmQyZDg1NWY1ZWE0MjIwMzE1ZmFkMmMyZDQzNWQ5MTAyNTNiZjc2ZjI1MmEyMWM1N2ZlNzRmNzI0N2RhYzMyZjQyNzZkNzkzZDMwZDQ4ZGQ2MWQwZTE0YTRiN2YwN2E1NmM5NGQzNzk5ZDA0MzI0ZGZiMmIyN2EyMmE1MDc3ZTI4MDQyMmQ0ZjAxNGYyNTNkMTM4ZTc0YzlhYzM0MjhhN2IiOjEyMDoiZmQ3OGI5OTU2ZTRlNDUyMjYwNWRiNDEwZjk3ZTg0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIwYjIxYWUxMzg0ODU1OTFjNmJlZjdiM2Q1YTBhYTBlOTc2MmMzMGE1MGU0YmJhMiI6IiI6IjU2ZGM5ODBlMWNiYTFiYzJlM2I0YTA3MzNkNzg5N2NhIjoiYTM4NDU4ZTVjYzcxZjIyZjZmNTg4MGRjMDE4YzU3NzdjMGU2YzhhMTMwMWU3ZDAzMDBjMDJjOTc2NDIzYzJiNjVmNTIyZGI0YTkwNDAxMDM1MzQ2ZDg1NWM4OTJjYmYyNzA5MmM4MWI5NjllOTljYjJiNjE5OGU0NTBhOTVjNTQ3YmIwMTQ1NjUyYzk3MjBhYWY3MmE5NzVlNGNiNTEyNGI0ODNhNDJmODRiNWNkMDIyMzY3ODAyYzVmMTY3YTdkZmM4ODVjMWY5ODNiYjQ1MjVhODhjODI1N2RmMzA2N2I2ZDM2ZDJkYmY2MzIzZGY4MGMzZWFlZmZjMmQxNzZhNSI6MTEyOiJiMTFmNWMwZThjYjZmZWExYTE3MGM5MzQyNDM3IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODc3NTY2NWFiYTM0NWIxYzNlNjI2MTI4YjVhZmEzZDBkYThmNGQzNmI4Y2YxY2E2IjoiIjoiY2QxN2Y3NjE2NzBlMWYxMDRmOGVhNGZiMGNlYzcxNjYiOiIyZWUwOGE1MWNlYWNhMWRiYmIzZWUwOWI3MmY1NzQyN2ZkMzRiZDk1ZGE1YjRjMDkzM2NiYjBmYzJmNzI3MGNmZmQzNDc2YWEwNWRlZWI4OTJhN2U2YThhMzQwN2U2MWY4NjMxZDFhMDBlNDdkNDZlZmI5MTgzOTNlZTUwOTlkZjdkNjVjMTJhYjhjOTY0MGJmY2IzYTZjY2UwMGMzMjQzZDBiM2YzMTZmMDgyMmNmZWFlMDVlZTY3YjQxOTM5M2NjODE4NDZiNjBjNDJhZWI1YzUzZjBlZGUxMjgwZGMzNmFhOGVmNTlhZGRkMTA2NjhkZDYxNTU3Y2U3NjBjNTQ0IjoxMTI6IjZjZGY2MGU2MmM5MWE2YTk0NGZhODBkYTE4NTQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYzk5MjIyOTliNDc3MjU5NTJmMDYyNzIxNjhiNzI4MjE4ZDI0NDMwMjhkODE1OTciOiIiOiI5YjJmMWE0MDcxN2FmY2RiYjZhOTVkNmUzMzVjOWU0ZCI6ImJjZmNhODQyMGJjN2I5ZGYwMjkwZDhjMWJjZjRlM2U2NmQzYTRiZTFjOTQ3YWY4MmRkNTQxMzM2ZTQ0ZTJjNGZhN2M2YjQ1Njk4MGIxNzQ5NDhkZTMwYjY5NDIzMmIwM2Y4ZWI5OTBmODQ5YjVmNTc3NjI4ODZiNDQ5NjcxZTRmMGI1ZTdhMTczZjEyOTEwMzkzYmRmNWMxNjIxNjM1ODRjNzc0YWQzYmJhMzk3OTQ3NjdhNGNjNDVmNGE1ODJkMzA3NTAzOTYwNDU0NjMxY2RmNTUxZTUyOGE4NjNmMmUwMTRiMWZjYTQ5NTVhNzhiZDU0NWRlYzgzMWU0ZDcxYzciOjExMjoiZGQ1MTVlNWE4YjQxZWNjNDQxNDQzYTc0OWIzMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVhMjdkNzE4ZjIxYzVjYmRjNTJhNzQ1YjkzMWJjNzdiZDFhZmE4YjEyMzFmODgxNSI6IiI6IjU5NjYxMDUxOTEyZmJhNDUwMjNhZWY0ZTZmOTM4MGE1IjoiMmI3Y2U1Y2VhODEzMDBlZDIzNTAxNDkzMzEwZjEzMTY1ODFlZjhhNTBlMzdlYWFkZDRiYjVmNTI3YWRkNmRlYjA5ZTdkY2M2NzY1MmU0NGFjODg5YjQ4NzI2ZDhjMGFlODBlMmIzYTg5ZGQzNDIzMmViMWRhMzJmN2Y0ZmNkNWJmOGU5MjBkMjg2ZGI4NjA0ZjIzYWIwNmVhYjNlNmY5OWJlYjU1ZmUzNzI1MTA3ZTlkNjdhNDkxY2RhZGExNTgwNzE3YmJmNjRjMjg3OTljOWFiNjc5MjJkYTkxOTQ3NDdmMzJmZDg0MTk3MDcwYTg2ODM4ZDFjOWViYWUzNzliNyI6MTA0OiJmMzNlOGY0MmI1OGY0NWEwNDU2ZjgzYTEzZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiODNlOTMzY2Y1NGFjNThmOGM3ZTVlZDE4ZTRlZDIyMTMwNTkxNThlZDljYjJjMzAiOiIiOiI4NzEwYWY1NWRkNzlkYTQ1YTRiMjRmNmU5NzJiYzYwYSI6ImI3YTQyOGJjNjg2OTZjZWUwNmYyZjhiNDNmNjNiNDc5MTRlMjlmMDRhNGE0MGMwZWVjNjE5M2E5YTI0YmJlMDEyZDY4YmVhNTU3MzM4MmRkNTc5YmVlYjA1NjViMGUwMzM0Y2NlNjcyNDk5NzEzOGIxOThmY2U4MzI1ZjA3MDY5ZDY4OTBhYzRjMDUyZTEyN2FhNmU3MGE2MjQ4ZTY1MzZkMWQzYzZhYzYwZDhjZDE0ZDlhNDUyMDBmNjU0MDMwNWY4ODJkZjVmY2EyY2FjNDgyNzhmOTRmZTUwMmI1YWJlMjk5MmZhMjcxOWIwY2U5OGI3ZWYxYjU1ODJlMDE1MWMiOjEwNDoiMzgwMTI4YWQ3ZjM1YmU4N2ExN2M5NTkwZmEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDJmODVmOTIwOTIzODVmMTVkYTQzYTA4NmNmZjY0Yzc0NDhiNGVlNWE4M2VkNzJlIjoiIjoiOTAyNmRmZDA5ZTQ1NTNjZDUxYzRjMTNjZTcwODMwZGUiOiIzYzhkZTY0YzE0ZGY3M2MxYjQ3MGE5ZDhhYTY5M2FmOTZlNDg3ZDU0OGQwM2E5MmNlNTljMGJhZWM4NTc2MTI5OTQ1YzcyMjU4NmE2NmYwM2RlYjUwMjljYmRhMDI5ZmIyMmQzNTU5NTJjM2RhZGZkZWRlMjBiNjNmNDIyMWYyN2M4ZTVkNzEwZTJiMzM1YzJkOWE5YjdjYTg5OTU5N2EwM2M0MWVlNjUwOGU0MGE2ZDc0ODE0NDQxYWMzYWNiNjRhMjBmNDhhNjFlOGExOGY0YmJjYmQzZTdlNTliYjNjZDJiZTQwNWFmZDZhYzgwZDQ3Y2U2NDk2YzRiOWIyOTRjIjoxMDQ6ImU5ZTViZWVhN2QzOWM5MjUwMzQ3YTJhMzNkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZTdkZjQ0Y2UwMDdjOTlmN2JhYWQ2YTY5NTUxOTVmMTRlNjA5OTllZDk4MTg3MDciOiIiOiI0ZDIwOWU0MTQ5NjVmZTk5NjM2YzFjNjQ5M2JiYTNhMyI6ImRhM2JjNmJkZDQxNGExZTA3ZTAwOTgxY2Y5MTk5MzcxMTkyYTFmYjJlYWFlMjBmNzA5MWU1ZmU1MzY4ZTI2ZDYxYjk4MWY3ZjFkMjlmMWE5MDg1YWQyNzg5ZDEwMTE1NWE5ODBkZTk4ZDk2MWMwOTM5NDE1MDIyNjhhZGI3MDUzN2FkOTc4M2U2YzdkNTE1N2M5MzlmNTliOGFkNDc0YzNkN2ZjMWZjYzkxMTY1Y2RmOGRkOWQ2ZWM3MGQ2NDAwMDg2ZDU2NGI2OGViZWFkMGQwM2ViZDNhYTY2ZGVkNTU1NjkyYjhkZTBiYWY0M2JjMGRkZWY0MmUzYTllYjM0YWIiOjk2OiIyNDQ4M2E1N2MyMDgyNmE3MDliN2QxMGEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZGZhNWZmMjAwNDZjNzc1YjVlNzY4YzJiZDk3NzUwNjZhZTc2NjM0NWI3YmVmYzMiOiIiOiIyZDQ5NDA5Yjg2OWI4YjlmYzViNjc3Njc5NzljYThjZCI6ImUzNWQzNDQ3OGIyMjhiYzkwM2VhMjQyMzY5N2U2MDNjYzA3Nzk2N2Q3Y2ZiMDYyZTk1YmMxMWQ4OWZiZTBhMWYxZDQ1NjlmODliMmE3MDQ3MzAwYzFmNTEzMWQ5MTU2NGVjOWJjZTAxNGQxOGJhNjA1YTFjMWU0ZTE1ZTNlNWMxODQxM2I4YjU5Y2JiMjVhYjhmMDg4ODg1MjI1ZGUxMjM1YzE2YzdkOWE4ZDA2YTIzY2IwYjM4ZmQxZDVjNmMxOTYxN2ZlMDhmZDZiZjAxYzk2NWVkNTkzMTQ5YTFjNjI5NTQzNWU5ODQ2M2U0ZjAzYTUxMWQxYTdlODJjMTFmMDEiOjk2OiIyMzAxMjUwM2ZlYmJmMjZkYzJkODcyZGMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZGYzZWUzYTY0ODRjNDhmZGQwZDM3YmFiNDQzMjI4YzdkODczYzk4NDUyOWRmYjQiOiIiOiJkYzZhZWI0MTQxNWMxMTVkNjY0NDNmYmQ3YWNkZmM4ZiI6ImVhZmM2MDA3ZmFmYjQ2MWQzYjE1MWJkZmY0NTllNTZkZDA5YjdiNDhiOTNlYTczMGM4NWU1NDI0Zjc2MmI0YTkwODBkZTQ0NDk3YTdjNTZkZDc4NTU2MjhmZmM2MWM3YjRmYWViN2Q2ZjQxM2Q0NjRmZTVlYzY0MDFmMzAyODQyN2FlM2U2MmRiM2ZmMzljZDBmNTMzM2E2NjRkMzUwNWZmNDJjYWE4ODk5Yjk2YTkyZWMwMTkzNGQ0YjU5NTU2ZmViOTA1NWU4ZGZiODFmNTVlNjAxMzUzNDViZmNlM2U0MTk5YmZjZGIzY2U0MjUyM2U3ZDI0YmUyYTA0Y2RiNjciOjk2OiJlOGU4MGJmNmU1YzRhNTVlNzk2NGY0NTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTA3ODdmNjVlNmMyNGExYzQ0NGMzNWRjZDM4MTk1MTk3NTMwYWEyMGYxZjZmM2IiOiIiOiI1NTMwMDQzMWIxZWFhYzAzNzU2ODFkNzgyMWUxZWI3YSI6Ijg0YTY5OWEzNGExZTU5NzA2MWVmOTVlOGVjM2MyMWI1OTJlOTIzNmRkYjk4YzY4ZDdlMDVmMWU3MDk5MzdiNDhlYzM0YTRiODhkOTk3MDhkMTMzYTJjYzMzZjVjZjY4MTlkNWU3YjgyODg4ZTQ5ZmFhNWQ1NDE0N2QzNmM5ZTQ4NjYzMGFhNjhmZWY4OGQ1NTUzNzExOWRiMWQ1N2RmMDQwMmY1NmUyMTlmN2VjZTdiNGJiNWY5OTZkYmUxYzY2NGE3NTE3NGM4ODBhMDBiMGYyYTU2ZTM1ZDE3YjY5YzU1MDkyMTk2MTUwNWFmYWJmNGJmZDY2Y2YwNGRjNTk2ZDEiOjY0OiI3NDI2NDE2MzEzMWQxNmFjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2ExNTU0MWI1ODU3YTY2OGRjOTg5OWIyZTE5OGQyNDE2ZTgzYmFjMTMyODJjYTQ2IjoiIjoiODliZjhhYjBjZWE2ZjU5NjE2ZWViOWIzMTRkN2MzMzMiOiI0ZDI4NDNmMzRmOWVhMTNhMWFjNTIxNDc5NDU3MDA1MTc4YmNmOGIyZWJlYWViMDkwOTdlYTQ0NzFkYTlmNmNjNjBhNTMyYmNkYTFjMThjYWI4MjJhZjU0MWRlM2I4N2RlNjA2OTk5ZTk5NGFjZTM5NTFmNThhMDJkZTBkNjYyMGM5YWUwNDU0OTMyNmRhNDQ5YTNlOTAzNjRhMTdiOTBiNmIxN2RlYmMwZjQ1NGJiMGU3ZTk4YWVmNTZhMWNhY2NmOGM5MTYxNGQxNjE2ZGIzMGZjODIyM2RiY2Q4ZTc3YmY1NWQ4MjUzZWZlMDM0ZmQ2NmY3MTkxZTAzMDNjNTJmIjo2NDoiOGY0ODc3ODA2ZGFmZjEwZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI2MWNkZmQxOWMxMzZlZTJhY2JlMDliNzk5M2E0NjgzYTcxMzQyNzUxOGY4ZTU1OSI6IiI6IjQwNjYxMTgwNjFjOTA0ZWQxZTg2NmQ0ZjMxZDExMjM0IjoiMTUzYzA3NWVjZGQxODRmZDhhMGZjYTI1Y2FlOGY3MjAyMDEzNjFlZjg0ZjNjNjM4YjE0OGNhMzJjNTFkMDkxYTBlMzk0MjM2ZDBiNTFjMWQyZWU2MDE5MTQxMjBjNTZkZmVhMTI4OWFmNDcwZGJjOWVmNDYyZWM1Zjk3NGU0NTVlNmE4M2UyMTVhMmM4ZTI3YzBjNWI1YjQ1YjY2MmI3ZjU4NjM1YTI5ODY2ZThmNzZhYjQxZWU2MjhjMTJhMjRhYjRkNWY3OTU0NjY1YzNlNGEzYTM0NjczOWYyMDM5M2ZjNTcwMGVjNzlkMmUzYzI3MjJjM2ZiM2M3NzMwNTMzNyI6NjQ6IjRlZmY3MjI3YjQyZjlhN2QiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlMTc1YTdkZjdlNDI5ZmNjMjMzNTQwZTZiODUyNDMyM2U5MWY0MGY1OTJiYTE0NCI6IiI6ImMzNDQ4NGI0ODU3YjkzZTMwOWRmOGUxYTBlMWVjOWEzIjoiY2U4ZDg3NzVmMDQ3YjU0M2E2Y2MwZDllZjliYzBkYjVhYzVkNjEwZGMzZmY2ZTEyZTBhZDdjZDNhMzk5ZWJiNzYyMzMxZTNjMTEwMWExODliMzQzM2E3ZmY0Y2Q4ODBhMDYzOWQyNTgxYjcxZTM5OGRkOTgyZjU1YTExYmYwZjRlNmVlOTViYWNkODk3ZThlYzM0NjQ5ZTFjMjU2ZWU2Y2NlY2IzM2UzNmM3NjkyN2NjNTEyNGJjMjk2MjcxM2FkNDRjYmQ0MzVhZTNjMTE0Mzc5NmQzMDM3ZmExZDY1OWU1ZGFkN2ViZjNjOGNiZGI1YjYxOTExM2Q3Y2U4YzQ4MyI6MzI6ImZmMzU1ZjEwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZjY1OWVkMjM2YmE2MDQ5NGU5YmYxZWUyY2I0MGVkY2YzZjI1YTJiYWMyZTViYzUiOiIiOiJhZDQ5ZjEyZjIwMjMyMDI1NTQwNmMyZjQwZTU1YjAzNCI6IjZkYTYyODkyZjQzNmRmZTk3OTBlNzJkMjZmNDg1OGNhMTU2ZDFkNjU1YzljYzQzMzZmY2YyODJiMGYzZjBiMjAxZTQ3Zjc5OWMzMDE5MTA5YWY4OWVmNWZkNDhhNDgxMTk4MDkzMGU4MmNkOTVmODZiMTk5NWQ5NzdjODQ3YmJiMDZlY2RjYzk4YjFhYWUxMDBiMjNjOWMyZjBkY2YzMTdhMWZiMzZmMTRlOTBlMzk2ZTZjMGM1OTRiY2MwZGM1ZjNlYmY4NmNlN2VjZDRiMDZkMWM0MzIwMjczNGQ1M2Y1NTc1MWE2ZTZiYmRhOTgyMTA0MTAyYWYyNDBkZWY0ZWIiOjMyOiJjYjRkOGMxZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTczZjMxOGIxZTI5OGJhNGFjMGFiMmFlZDc0ZjczNTQzYjEwMTdjY2NiZDFiMjQwIjoiIjoiYWJlMzNiN2U4ZDg4YmQzMGRlYjk2ZDFlOTBjNGU5NTEiOiI2ZGU2MTZiMDAwMDQ3YjE0YjY3NTkwMTUxODNkZDc1M2M2MTQ5OWMwZTY2NWQwNmE4OWU0ZmIwY2QwZGQzMDY0ZmY4NjUxNTgyZTkwMWVmNWQwY2RmMzM0NGMyOWM3MGMzYWFiYzJhYWY4M2NiM2YyODRjNmZlNDEwNDkwNmQzODliMDI3ZTdkOWNhNjBkMDEwZjA2ZWY4Y2Q5ZTU1ZGIyNDgzZDA2NTUyZGRiZTNmYzQzYjI0YzU1MDg1Y2Q5OThlYWUzZWRlYzM2NjczNDQ1YmY2MjZlOTMzYzE1YjZhZjA4ZWEyMWNiYWNlNDcyMGIwYjY4ZmUxYTM3NDg3N2Q1IjozMjoiNGEyOGVjOTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzNkNWJlNzQ2MTViYzViNjI3ZWVkZmI5NTc0NmZiNWYxN2NiZjI1YjUwMGE1OTdmIjoiZmM0MDk5M2ViODU1OWU2YjEyNzMxNWMwMzEwM2NlMzFiNzBmYzBlMDdhNzY2ZDllZWNmMmU0ZThkOTczZmFhNGFmZDMwNTNjOWViZWYwMjgyYzllM2QyMjg5ZDIxYjZjMzM5NzQ4MjczZmExZWRmNmQ2ZWY1YzhmMWUxZTkzMDFiMjUwMjk3MDkyZDlhYzRmNDg0MzEyNWVhNzI5OWQ1MzcwZjdmNDljMjU4ZWFjMmE1OGNjOWRmMTRjMTYyNjA0YmEwODAxNzI4OTk0ZGM4MmNiNjI1OTgxMTMwYzNjYThjZGIzMzkxNjU4ZDRlMDM0NjkxZTYyZWNlMGE2ZTQwNyI6ImViMTZlZDhkZTgxZWZkZTI5MTVhOTAxZjU1N2ZiYTk1IjoiIjoxMjg6IjgwNDA1NmRjYTlmMTAyYzRhMTNhOTMwYzgxZDc3ZWNhIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEyNDkxMzVjOWYyZjVhOGIxYWY2NjQ0MmE0ZDRlMTAxNzcxYTkxOGVmOGFjZWUwNSI6ImM2MmIzOWI5MzdlZGJkYzliNjQ0MzIxZDVkMjg0ZTYyZWFhNDE1NDAxMGM3YTMyMDhjMWVmNDcwNmZiYTkwMjIzZGEwNGIyZjY4NmEyOGI5NzVlZmYxNzM4NjU5OGJhNzdlMjEyODU1NjkyZjM4NDc4MmMxZjNjMDBiZTAxMWU0NjZlMTQ1ZjZmOGI2NWM0NThlNDE0MDllMDFhMDE5YjI5MDc3Mzk5MmUxOTMzNGZmYWNhNTQ0ZTI4ZmM5MDQ0YTVlODZiY2QyZmE1YWQyZTc2ZjJiZTNmMDE0ZDhjMzg3NDU2YThmY2ZkZWQzYWU0ZDExOTRkMGUzZTUzYTIwMzEiOiI4MGI2ZTQ4ZmU0YTNiMDhkNDBjMTYzNmIyNWRmZDJjNCI6IiI6MTI4OiI5NTFjMWM4OWI2ZDk1NjYxNjMwZDczOWRkOTEyMGE3MyI6ImI4NjVmOGRkNjRhNmY1MWE1MDBiY2ZjOGNhZGJjOWU5ZjVkNTRkMmQyN2Q4MTVlY2ZlM2Q1NzMxZTFiMjMwYzU4N2I0Njk1OGM2MTg3ZTQxYjUyZmYxODdhMTRkMjZhYTQxYzVmOTkwOWEzYjc3ODU5NDI5MjMyZTViZDZjNmRjMjJjZjU1OTA0MDI0NzZkMDMzYTMyNjgyZThhYjhkYzdlZDBiMDg5YzVhYjIwYWI5YThjNWQ2YTNiZTllYTdhYTU2YzlkM2FiMDhkZTRhNGEwMTlhYmI0NDdkYjQ0ODA2MmYxNmE1MzNkNDE2OTUxYThmZjZmMTNlZDU2MDhmNzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYTgzMmE0YjM3ZGNiM2MwODc5YTc3MWJiOGFlNzM0ZjBkODhiOWJlNDk3Nzk3YTgiOiIwZjExMDVmOWVjMjQxMjEyMzJiNjBiNmVmM2MzZThjYTllZWMxYTNkNzYyNTAwNGI4NTdkMWQ3N2YyOTJiNmVjMDY1ZDkyZjViYjk3ZTBkYzJmZGZkZjgyM2E1ZGIyNzUxMDlhOTQ3MjY5MGNhZWEwNDczMGU0YmQ3MzJjMzM1NDg3MThlOWY3NjU4YmJmM2UzMGI4ZDA3NzkwY2Q1NDBjNTc1NDQ4NmVkOGU0ZDY5MjBjZWZhZWIxYzE4MmM0ZDY3ZWJlZDBkMjA1YmEwYmQ5NDQxYTU5OWQ1NWU0NTA5NGIzODBmMzQ3OGJjZmNhOTY0NmEwZDdhYTE4ZDA4ZTUyIjoiNzA4MzVhYmFiOWY5NDVjODRlZjRlOTdjZGNmMmE2OTQiOiIiOjEyODoiYTQ1OWJlMGIzNDlmNmU4MzkyYzJhODZlZGQ4YTlkYTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGRhMjE2Mjg3OTEwZDFmNWMwYTMxMmY2M2MyNDM2MTIzODhiYzUxMGNiNzZjNWJhIjoiZDY2MTdkNTgzMzQ0ZDRmZTQ3MjA5OWQyYTY4ODI5Nzg1NzIxNWEzZTMxYjQ3ZDFiZjM1NWNjZmU5Y2YyMzk4YTNlYmEzNjJjNjcwYzg4ZjhjNzE2MjkwMzI3NWRmZDQ3NjFkMDk1OTAwYmQ5N2ViYTcyMjAwZDQwNDVkNzJiZDIzOWJkYTE1NjgyOWMzNmIzOGIxZmY1ZTQyMzAxMjVlNTY5NWY2MjNlMTI5ODI5NzIxZTg4OWRhMjM1YmI3ZDRiOWRhMDdjY2U4YzNjZWI5Njk2NGZkMmY5ZGQxZmYwOTk3ZTFhM2UyNTNhNjg4Y2ViMWJmZWM3NmE3YzU2NzI2NiI6IjdmNzcwMTQwZGY1Yjg2NzhiYzljNGI5NjJiOGM5MDM0IjoiIjoxMjA6Ijk4MjNlMzI0MmIzZjg5MGM2YTQ1NmYxODM3ZTAzOSI6ImI0OTEwMjc3MjI0MDI1ZjU4YTVkMGYzNzM4NWIwM2ZjZDQ4OGRmZWY3NTgwZWI1YzI3MGMxMGJkN2E2ZjZkOWM3ZGRjMmQxMzY4ZDY4ZDRlMDRmOTBlM2RmMDI5ZWQwMjg0MzJhMDlmNzEwYmUxNjEwYjJhNzViZDA1ZjMxYmFlODM5MjA1NzM5Mjk1NzNhZmZkMGViMDNjNjNlMGNlYzdhMDI3ZGVhYjc5MmY0M2VlNjMwN2ZkM2M1MDc4ZDQzZDViMTQwN2FjMDIzODI0ZDQxYzk0MzdkNjZlZWVjMTcyNDg4ZjI4ZDcwMGFhNGI1NDkzMWFhZDdjZDQ1ODQ1NmYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNWFmYTFlNjFkNDU5NGIxYzJmYTYzN2Y2NGYxOGRkNTU3ZTRkZjMyNTViNDdmMjQiOiI1Yzc3MmNkZjE5NTcxY2Q1MWQ3MWZjMTY2ZDMzYTBiODkyZmJjYTRlYWUzNmFiMGFjOTRlNjE2NGQ1MWFjYjJkNGU2MGQ0ZjNhMTljMzc1N2E5Mzk2MGU3ZmQ5MGI5YTZjZGY5OGJkZjI1OWIzNzBlZDZjN2VmOGNiOTZkYmE3ZTNhODc1ZTZlN2ZlNmFiYzc2YWFiYWQzMGM4NzQzYjNlNDdjOGRlNWQ2MDRjNzQ4ZWViMTY4MDZjMmU3NTE4MGE5NmFmNzc0MTkwNGVjYTYxNzY5ZDM5ZTk0M2ViNGM0YzI1ZjJhZmQ2OGU5NDcyMDQzZGUyYmIwM2U5ZWRhZTIwIjoiMTUxZmQzYmEzMmY1YmRlNzJhZGNlNjI5MWJjZjYzZWEiOiIiOjEyMDoiZjA2MjZjYzA3ZjJlZDFhNzU3MDM4NmE0MTEwZmMxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZlYmQ0ZmYwZmVkZDlmMTZiY2NiNjIzODBkNTljZDQxYjhlZmYxODM0MzQ3ZDhmYSI6ImRjOTcxYzhmNjVlY2UyZWE0MTMwYWZkNGRiMzhmYzY1N2MwODVlYTE5Yzc2ZmVmNTBmNWJkMGY4ZGQzNjRjYzIyNDcxYzJmYTM2YmU4Y2RlNzg1MjlmNThhNzg4ODhlOWRlMTA5NjE3NjBhMDFhZjAwNWU0MmZjNWIwM2U2ZjY0OTYyZTZiMThlYWVkZWE5NzlkMzNkMWIwNmUyMDM4YjFhYWQ4OTkzZTViMjBjYWU2Y2M5M2YzZjdjZjJhZDY1OGZiYmE2MzNkNzRmMjFhMjAwM2RkZWQ1ZjVkZGEzYjQ2ZWQ3NDI0ODQ1YzExYmFiNDM5ZmJiOTg3ZjBiZTA5ZjgiOiI3NDM2OTlkMzc1OTc4MWU4MmEzZDIxYzdjZDc5OTFjOCI6IiI6MTIwOiIxZGEzNDdmOWI2MzQxMDQ5ZTYzMTQwMzk1YWQ0NDUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDI4MGQwNzkxMTBjMWM4MjZjYzc3ZjQ5MGQ4MDdkZDhkNTA4ZWI1NzlhMTYwYzQ5IjoiYTI4NmQxOTYxMGE5OTBkNjRmM2FjY2QzMjlmYzAwNWQ0Njg0NjVhOThjZmEyZjM2MDZjNmQwZmJlYjk3MzI4NzliYWQzY2E4MDk0MzIyYTMzNGE0MzE1NWJhZWQwMmQ4ZTEzYTJmYmYyNTlkODAwNjZjNmY0MThhMWE3NGIyM2UwZjYyMzhmNTA1YjJiM2RjOTA2ZmZjYjQ5MTBjZTZjODc4YjU5NWJiNGU1ZjhmM2UyZWRlOTEyYjM4ZGJhZmRmNDY1OWE5M2IwNTZhMWE2N2NiMGVjMWRiZjAwZDkzMjIzZjNiMjBiM2Y2NGExNTcxMDVjNTQ0NWI2MTYyOGFiZiI6Ijg1YjI0MWQ1MTZiOTQ3NTljOWVmOTc1ZjU1N2JjY2VhIjoiIjoxMTI6ImJiZjI4OWRmNTM5Zjc4YzNhOTEyYjE0MWRhM2EiOiJiOTI4NmFiOTE2NDVjMjBkZTA0MGE4MDUwMjBmZWQ1M2M2MTJkNDkzYThjZTljNzE2NDlhZTE2YmQ1MGVhYjZmYjdmM2E5MTgwZTE2NTFkNTQxM2FhNTQyNjA4ZDdlY2JmOWZjNzM3OGMwYmVmNGQ0MzliYzM1NDM0YjZjZjgwMzk3NmI4NzgzYWVjYzgzYTkxZTk1Y2VhNzJjMmEyNmE4ODNiNzEwMjUyZTBjMmE2YmFhMTE1NzM5YTA2OTJjODVmNmQzNGZmMDYyMzRmYmRjNzliOGM0YThlYTBhNzA1NmZiNDhjMThmNzNhYWY1MDg0ODY4YWJiMGRmYWEyODdkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWU4MGY4N2ZhMjE1NmM2MmRmN2JlMmFkMTZjNDg5MGRlNWVlNTg2OGE2ODRmY2Y5IjoiYzgyOTA3M2VmZDVjNTE1MGQyYjdlMmNkYWVmZjk3OTgzMGQxYWE5ODNjNzQ3NzI0YWRlNjQ3MmM2NDdhNmU4ZTUwMzMwNDZlMDM1OWVhNjJmYzI2YjRjOTViY2NiM2FjNDE2ZmRmNTRlOTU4MTVjMzViZjg2ZDNmZGQ3ODU2YWJiYjYxOGZlOGZjZDM1YTkyOTUxMTQ5MjZhMGM5ZGY5MjMxN2Q0NGJhMTg4NWEwYzY3YzEwYjliYTI0YjhiMmYzYTQ2NDMwOGM1NTc4OTMyMjQ3YmY5Yzc5ZDkzOWFhMzU3NjM3NmQyZDZiNGYxNGEzNzhhYjc3NTUzMWZlOGFiZiI6Ijk3NjlmNzFjNzZiNWI2YzYwNDYyYTg0NWQyYzEyM2FkIjoiIjoxMTI6IjM5NGI2YzYzMWE2OWJlM2VkOGM5MDc3MGYzZDQiOiJmODg2YmQ5MmNhOWQ3M2E1MmU2MjZiMGM2M2EzZGFhMTM4ZmFhYWNmNzgwOTA4NmQwNGY1YzBjODk5MzYyYWEyMmUyNWQ4NjU5NjUzYjU5YzMxMDM2Njg0NjFkOTc4NWJiNDI1YzZjMTAyNmFkOWM5MjQyNzFjZWM5ZjI3YTliMzQxZjcwOGNhODZmMWQ4MmE3N2FhZTg4YjI1ZGE5MDYxYjc4Yjk3Mjc2ZjMyMTY3MjAzNTI2MjliZDFhMjdlYmY4OTBkYTZmNDJkOGM2M2Q2ODM0MmE5M2MzODI0NDJkNDlkZDRiNjIyMTk1MDQ3ODVjZWU4OWRmZmRjMzZmODY4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDhhN2I5OWU1M2Y1ZTViMTk3MzY0ZDQ1MTZjYWNlNGI5MjhkZTUwZTU3MTMxNWUzIjoiZDBkYjBhYzVlMTRiZjAzNzI5MTI1ZjMxMzdkNDg1NGI0ZDhjZTJkMjY0Zjg2NDZkYTE3NDAyYmRhZDcwMzRjMGQ4NGQ3YTgwZjEwN2ViMjAyYWVhZGJmZGYwNjM5MDRhZTk3OTNjNmFlOTFlZThiY2MwZmMwNjc0ZDgxMTFmNmFlYTY2MDc2MzNmOTJlNGJlM2NmYmI2NDQxODEwMWRiOGIwYTkyMjVjODNlNjBmZmNmN2E3ZjcxZjc3MTQ5YTEzZjhjNTIyN2NkOTI4NTUyNDFlMTFlZTM2MzA2MmE4OTNhNzZhYzI4MmZiNDdiNTIzYjMwNmNkODIzNWNkODFjMiI6IjRiMTJjNjcwMTUzNDA5OGUyM2UxYjQ2NTlmNjg0ZDZmIjoiIjoxMTI6IjcyOWIzMWM2NWQ4Njk5YzkzZDc0MWNhYWM4ZTMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzg3NGI0MjdiNzE4MWIwYzkwYjg4NzE0N2MzNmYyNDI4MjcxNDkzMjRmZDVjOTQ1IjoiYmRkOTAxOTBkNTg3YTU2NGFmMDIyZjA2YzhiZDFhNjg3MzViNmYxOGYwNDExM2ZkY2VjMjRjNjAyN2FhZjAyNzFiMTgzMzM2ZmI3MTNkMjQ3YTE3M2Q5ZTA5NWRhZTZlOWJhZGIwYWIwNjk3MTIzMDI4NzU0MDZmMTQzMjAxNTFmZDQzYjkwYTNkNmYzNWNjODU2NjM2YjFhNmY5OGFmYzc5N2NiNTI1OTU2N2UyZTliN2NlNjJkN2IzMzcwYjVlZTg1MjcyMmZhZjc0MGVkZjgxNWIzYWY0NjBjZGQ3ZGU5MGNhNmFiNmNkMTczODQ0MjE2YzA2NGIxNmVhMzY5NiI6IjRiOGRkYTA0NmE1YjdjNDZhYmVlY2EyZjJmOWJjYWY4IjoiIjoxMDQ6ImZlMWU0MjdiY2IxNWNlMDI2NDEzYTBkYTg3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU2NTQzY2Q2ZTJlYmIxZTNkYzEzNmE4MjZiZmMzN2VkZGIxMmY3YTI2NDMwYTFiNCI6ImQ1NDFkZDNhY2VjMmRhMDQyZTZlYTI2ZmI5MGZmOWEzODYxMTkxOTI2NDIzYjZkYzk5YzUxMTBiM2JmMTUwYjM2MjAxNzE1OWQwYjg1ZmZlYTM5NzEwNmEwZDgyOTllYzIyNzkxY2IwNjEwM2NkNDQwMzZlZWQwZDZkOWY5NTM3MjRmYjAwMzA2OGIzYzNkOTdkYTEyOWMyOGQ5N2YwOWU2MzAwY2JlYTA2YmE2NmY0MTBjYTYxYzMzMTFjZTMzNGM1NWYwNzdjMzdhY2IzYjcxMjljNDgxNzQ4Zjc5Yzk1OGJjM2JiZWIyZDNmZjQ0NWFkMzYxZWQ0YmJjNzlmMGEiOiI5MjdjZThhNTk2ZWQyOGM4NWQ5Y2I4ZTY4OGE4MjllNiI6IiI6MTA0OiIzYTk4ZjQ3MTExMmE4YTY0NjQ2MGU4ZWZkMCI6ImE2MDJkNjFlN2EzNWNiZTBlNDYzMTE5YmI2NmZkNGJiNmM3NWQxZmUwYjIxMWI5ZDZhMGE2ZTllODRiMDc5NDI4MjMxOGYwZDMzZWMwNTNmMmNmYmExNjIzZTg2NTY4MWFmZmVhZjI5ZjNkYTMxMTM5OTVlODdkNTFhNWFiNDg3MmJiMDViNWJlOGVmMmIxNGRmYzNkZjVhNDhjYmM5YjEwODUzYTcwOGVlNDg4NmE3MzkwZThlNGQyODY3NDBhMGRkNDFjMDI1YzhkNzJlZGEzZjczZjNjZWM1YzMzZDVlNTBiNjQzYWZkNzY5MTIxM2NjY2NjYzJjNDFiOWJkN2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYWFmODFjZDM4MGYzYWY3ODg1ZWYwZDYxOTZhMTY4OGM5MzcyYzU4NTBkYzViMGIiOiI2ZjI2OTkyOWI5MmM2MjgxZTAwNjcyZWFlYzE4M2YxODdiMmRkZWNjMTFjOTA0NTMxOTUyMWQyNDViNTk1YWIxNTRkZDUwZjA0NWE2NjBjNGQ1M2FlMDdkMWI3YTdmZDZiMjFkYTEwOTc2ZWI1ZmZjZGRkYTA4YzFlOTA3NWEzYjRkNzg1ZmFhMDAzYjRkZDI0M2YzNzllMDY1NDc0MGI0NjY3MDRkOTE3M2JjNDMyOTJhZTBlMjc5YTkwM2E5NTVjZTMzYjI5OWJmMjg0MmIzNDYxZjdjOWEyYmQzMTFmM2U4NzI1NGI1NDEzZDM3MmVjNTQzZDZlZmEyMzdiOTVhIjoiNTA4YzU1ZjE3MjY4OTZmNWI5ZjBhNzAyNGZlMmZhZDAiOiIiOjEwNDoiM2I4MDI2MjY4Y2FmNTk5ZWU2NzdlY2ZkNzAiOiJjNGE5NmZiMDhkN2MyZWViZDE3MDQ2MTcyYjk4NTY5YmMyNDQxOTI5ZmMwZDY4NzZhYTFmMzg5YjgwYzA1ZTJlZGU3NGRjNmY4YzM4OTZhMmNjZjUxOGUxYjM3NWVlNzVlNDk2N2Y3Y2NhMjFmYTgxZWUxNzZmOGZiODc1MzM4MWNlMDNiMmRmODczODk3MTMxYWRjNjJhMGNiZWJmNzE4YzhlMGJiOGVlZWQzMTA0NTM1ZjE3YTljNzA2ZDE3OGQ5NWExYjIzMmU5ZGFjMzFmMmQxYmRiM2ExYjA5OGYzMDU2ZjBlM2QxOGJlMzZiZDc0NjY3NTc3OWMwZjgwYTEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZmM5ZDlhYzg0NjljZmM3MThhZGQyYjAzYTRkOGM4ZGNjMmVlY2EwOGU1ZmY3YmMiOiJiYzg0ZDhhOTYyYTljZmQxNzlkMjQyNzg4NDczZDk4MGQxNzdhYmQwYWY5ZWRjY2IxNGM2ZGM0MTUzNTQzOWExNzY4OTc4MTU4ZWVlZDk5NDY2NTc0ZWE4MjBkYmVkZWE2OGM4MTlmZmQ5Zjk5MTVjYTgzOTJjMmUwMzA0OWQ3MTk4YmFlY2ExZDM0OTFmZTIzNDVlNjRjMTAxMmFmZjAzOTg1Yjg2YzgzMWFkNTE2ZDRmNWViNTM4MTA5ZmZmMjUzODNjN2IwZmE2Yjk0MGFlMTliMDk4N2Q4YzNlNGEzN2NjYmJkMjAzNDYzM2MxZWIwZGYxZTlkZGYzYTgyMzllIjoiYjJhN2MwZDUyZmM2MGJhY2MzZDFhOTRmMzMwODcwOTUiOiIiOjk2OiIwYTdhMzZlYzEyOGQwZGViNjA4Njk4OTMiOiJmYzNjZDY0ODZkZmU5NDRmN2NiMDM1Nzg3NTczYTU1NGY0ZmUwMTBjMTViZDA4ZDZiMDlmNzMwNjZmNmYyNzJmZjg0NDc0ZjM4NDUzMzdiNmU0MjljOTQ3ZDQxOWM1MTFjMjk0NWZmYjE4MTQ5MmM1NDY1OTQwY2VmODUwNzdlOGE2YTI3MmEwN2UzMTBhMmYzODA4ZjExYmUwM2Q5NjE2MjkxM2M2MTNkOWMzZjI1YzM4OTNjMmJkMmE1OGE2MTlhOTc1N2ZkMTZjYzIwYzEzMDhmMjE0MDU1NzMzMDM3OWYwN2RiZmQ4OTc5YjI2YjA3NTk3NzgwNWYxODg1YWNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MWZmNzI5ZWZhNGE5YWEyZWNjYzM3YzVmODQ2MjM1YjUzZDNiOTNjNzljNzA5YzgiOiIzOTkyYWQyOWVlYjk3ZDE3YmQ1YzBmMDRkODU4OTkwM2VlMjNjY2IyYjFhZGMyOTkyYTQ4YTJlYjYyYzI2NDRjMGRmNTNiNGFmZTRhY2U2MGRjNWVjMjQ5YzBjMDgzNDczZWJhYzMzMjM1MzlhNTc1YzE0ZmE3NGM4MzgxZDFhYzkwY2I1MDEyNDBmOTZkMTc3OWIyODdmN2Q4YmE4Nzc1MjgxZDQ1M2FhZTM3YzgwMzE4NWYyNzExZDIxZjVjMDBlYjQ1Y2FkMzc1ODdlZDE5NmQxNjMzZjFlYjBiMzNhYmVmMzM3NDQ3ZDAzZWMwOWMwZTNmN2ZkMzJlOGM2OWYwIjoiMWJkMTdmMDRkMWRjMmU0NDdiNDE2NjU5NTJhZDkwMzEiOiIiOjk2OiIwMWIwYTgxNWRjNmRhM2UzMjg1MWUxZmIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwNjg1MDBlOGQ0ZjhkNGFmOTAzNWNkYWE4ZTAwNWE2NDgzNTJlOGYyOGJkYWZjOGEiOiI5OGUzMjQyOGQ5ZDIxYzRiNjBlNjkwYTJjZTFjZjcwYmVlOTBkZjMxMzAyZDE4MTliN2QyN2ZkNTc3ZGQ5OTBmN2ZmZTZiYTVlZjExN2NhYWM3MThjYzE4ODBiNGNhOThmNzJkYjI4MWM5NjA5ZTE4OTMwNzMwMmRjMjg2NmYyMGJlM2E1NDVhNTY1NTIxMzY4YTY4ODFlMjY0MmNiYTYzYjNjZjRjOGI1ZTVhOGVhYmViM2U4YjAwNDYxOGI4Zjc3NjY3YzExMWU1NDAyYzVkN2M2NmFmZDI5N2M1NzVjZTUwOTJlODk4ZDU4MzEwMzFkMjI1Y2VlNjY4YzE4NmExIjoiNWVhOTE5OGI4NjA2Nzk3NTkzNTdiZWZkYmIxMDZiNjIiOiIiOjk2OiJkNTg3NTJmNjZiMmNiOWJiMmJjMzg4ZWIiOiIyZWYzYTE3ZmNkYjE1NGY2MGQ1ZTgwMjYzYjczMDFhODUyNmQyZGU0NTFlYTQ5YWRiNDQxYWEyNTQxOTg2Yjg2OGRhYjI0MDI3MTc4ZjQ4NzU5ZGJlODc0YWU3YWE3YjI3ZmIxOTQ2MWM2Njc4YTBiYTg0YmJjZDg1NjdiYTI0MTJhNTUxNzllMTVlN2MxYTEzOTI3MzBhYzM5MmI1OWM1MWQ0OGY4MzY2ZDQ1YjkzMzg4MDA5NTgwMGUxZjM2ZmYxYWMwMDc1M2Y2MzYzYjBlODU0ZjQ5NDU1MmYxZjJlZmUwMjhkOTY5ZTZiMWE4MDgwMTQ5ZGQ4NTNhYTY3NTFlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NDc0ZDliMDc3MzkwMDFiMjViYWY2ODY3MjU0OTk0ZTA2ZTU0YzU3ODUwODIzMmYiOiIxY2JhYjJiNmU0Mjc0Y2FhODA5ODcwNzI5MTRmNjY3Yjg4NzE5OGY3YWFmNDU3NDYwOGI5MWI1Mjc0ZjVhZmMzZWIwNWE0NTc1NTRmZjVkMzQ2ZDQ2MGY5MmMwNjhiYzYyNmZkMzAxZDBiYjE1Y2IzNzI2NTA0YjNkODhlY2Q0NmExNTA3NzcyOGRkYzJiNjk4YTJlOGM1ZWE1ODg1ZmM1MzRhYzIyN2I4ZjEwM2QxOTNmMTk3N2JhZGY0Zjg1M2EwOTMxMzk4ZGEwMWY4MDE5YTliMWZmMjcxYjNhNzgzZmYwZmFlNmY1NGRiNDI1YWY2ZTNhMzQ1YmE3NTEyY2JmIjoiM2FkZTZjOTJmZTJkYzU3NWMxMzZlM2ZiYmJhNWM0ODQiOiIiOjY0OiI2N2MyNTI0MGI4ZTM5YjYzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDUwZDRjN2Q0NDJkOGE5MmQwNDg5YTk2ZTg5N2Q1MGRkYTZmYmU0N2NhNzcxM2VlIjoiYjM2YjRjYWYxZDQ3YjBkMTA2NTI4MjRiZDU3YjYwM2VjMWMxNmY0NzIwY2U3ZDQzZWRkZThhZjFiOTczN2Y2MWI2OGI4ODI1NjZlMDRkYTUwMTM2ZjI3ZDlhZjRjNGM1N2ZmZjRjODQ2NWM4YTg1ZjBhZWFkYzE3ZTAyNzA5Y2M5YmE4MThkOWEyNzI3MDllNWZiNjVkZDU2MTJhNWM1ZDcwMGRhMzk5YjM2NjhhMDAwNDFhNTFjMjNkZTYxNmVhM2Y3MjA5M2Q4NWVjYmZkOWRkMGI1ZDAyYjU0MWZiNjA1ZGNmZmU4MWU5ZjQ1YTVjMGMxOTFjYzBiOTJhYzU2ZCI6IjQxYjM3YzA0YWI4YTgwZjVhOGQ5ZDgyYTNhNDQ0NzcyIjoiIjo2NDoiNGVlNTRkMjgwODI5ZTZlZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM4ZjNlYzNlYzc3NWRhYzc2YWU0ODRkNWI2Y2E2MWM2OTVjN2JlYWZiYTQ2MDZjYSI6IjQ5NzI2YjhjZWZjODQyYTAyZjJkN2JlZjA5OTg3MWYzODI1N2NjOGVhMDk2YzlhYzUwYmFjZWQ2ZDk0MGFjYjRlOGJhZjkzMmJlYzM3OWE5NzNhMmMzYTNiYzQ5ZjYwZjdlOWVlZjQ1ZWFmZGQxNWJkYTFkZDE1NTdmMDY4ZTgxMjI2YWY1MDM5MzRlYjk2NTY0ZDE0YzAzZjBmMzUxOTc0YzhhNTRmYjEwNGZiMDc0MTdmZTc5MjcyZTRiMGMwMDcyYjlmODliNzcwMzI2NTYyZTRlMWIxNGNhZDc4NGEyY2QxYjRhZTFkYzQzNjIzZWM0NTFhMWNhZTU1ZjZmODQiOiI5YWY1M2NmNjg5MWE3NDlhYjI4NmY1YzM0MjM4MDg4YSI6IiI6NjQ6IjZmNmYzNDRkZDQzYjBkMjAiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZGI0ZWYwNjE1MTNlZjY2OTBkNTdhZWY1MGQ4MDExZTBkZDdlYjQ0MzJkODIzNzQiOiJiN2Y5MjA2OTk1YmM5NzMxMTg1NWVlODMyZTJiNDBjNDFhYjJkMWE0MGQ5MjYzNjgzYzk1YjE0ZGNjNTFjNzRkMmRlN2I2MTk4ZjlkNDc2NmM2NTllNzYxOWZlMjY5M2E1YjE4OGZhYzQ2NGNjYmQ1ZTYzMmM1ZmQyNDhjZWRiYTQwMjhhOTJkZTEyZWQ5MTQxNTA3N2U5NGNmZTdhNjBmMTE3MDUyZGVhODkxNmRmZTBhNTFkOTJjMWMwMzkyN2U5MzAxMmRiYWNkMjliYmJjNTBjZTUzN2E4MTczMzQ4Y2E5MDRhYzg2ZGY1NTk0MGU5Mzk0YzI4OTVhOWZlNTYzIjoiNjIzZGY1YTA5MjJkMWU4Yzg4M2RlYmIyZTBlNWUwYjEiOiIiOjMyOiIxNGY2OTBkNyI6ImE2NDE0ZGFhOWJlNjkzZTdlYmIzMjQ4MGE3ODNjNTQyOTJlNTdmZWVmNGFiYmIzNjM2YmViYmMzMDc0YmZjNjA4YWQ1NTg5NmZlOWJkNWFiODc1ZTUyYTQzZjcxNWI5OGY1MmMwN2ZjOWZhNjE5NGVhMGNkOGVkNzg0MDRmMjUxNjM5MDY5YzVhMzEzY2NmYzZiOTRmYjE2NTcxNTNmZjQ4ZjE2ZjZlMjJiM2M0YTBiN2Y4OGUxODhjOTAxNzY0NDdmZTI3ZmE3ZGRjMmJhYzNkMmI3ZWRlY2FkNWY3NjA1MDkzYWM0MjgwYjM4YWU2YTRjMDQwZDJkNGQ0OTFiNDIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg5MDFiZWM0ZDNjNjQwNzFkOGMzMGM3MjBjMDkzMjIxZTA1ZWZlZDcxZGEyODBiZiI6IjdjNDQ3ZTcwMGRiNzM2NzI2MGRmZmE0MjA1MGU2MTJlZmYwNjJlYjBjOGE2YjRmZTM0ODU4ODAwYmNiOGVjMmY2MjJjYjUyMTM3NjdiNTc3MTQzMzc4M2U5YjBmYTYxN2M5ZmZiN2ZkZTA5ODQ1ZGFmYzE2ZGZjMGRmNjEyMTVjMGNhMTE5MWVhYmY0MzI5M2RiNjYwM2Q1Mjg1ODU5ZGU3ZWYzMzI5ZjVlNzEyMDE1ODZmYjAxODhmMDg0MGVkNWI4NzcwNDNjYTA2MDM5NzY4Yzc3ZmY4Njg3YzVjZmMyZmQwMTNhMGI4ZGE0ODM0NGM1NjhmY2U2YjM5ZTJiMTkiOiI5MjY1YWJlOTY2Y2I4MzgzOGQ3ZmQ5MzAyOTM4ZjQ5ZCI6IiI6MzI6IjZmNmMzOGJjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmM1N2ViNzYzZjg4NjE1NGQzODQ2Y2MzMzNmYzhhZThiM2M3YzljMzcwNWY5ODcyIjoiOWZlN2QyMTAyMjE3NzNiYTRhMTYzODUwYmFiMjkwYmE5YjdiZjVlODI1NzYwYWM5NDBjMjkwYTFiNDBjZDZkZDViOWZiNjM4NWFlMWE3OWQzNWVlN2IzNTViMzQyNzU4NTdkNWI4NDdiZWY0YWM3YTU4ZjZmMGU5ZGU2ODY4NzgwNzAwOWY1ZGMyNjI0NDkzNWQ3YmNhZmM3YWVkMTgzMTZjZTZjMzc1MTkyZDJhN2JmMGJlZThhNjMyZmU0ZjQxMjQ0MDI5MmUzOTMzOWI5NGIyODI4MTYyMjg0MmY4ODA0OGJlNDY0MDQ4NmYyYjIxYTExOTY1OGMyOTRjZTMyZSI6IjliMzc4MTE2NWU3ZmYxMTNlY2QxZDgzZDFkZjIzNjZkIjoiIjozMjoiNjJmMzJkNGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzA3ZDMxYTU5NGU1NGY2NzNiZWEyZjk3NzgzNTY3MGFjYTRmM2Q0NWM5YzM3NmNjIjoiZDczODVhN2JkMGNiNzZlMWUyNDJmYTU0N2M0NzQzNzBiY2M3Y2M3Y2YzZTNmYTM3YjAwZmUwOGE1NjM4M2NhMzFkMDIzZDhjNDkzZjZkNDJlNDgyYjBmMzJlNGYyNDRkZDEwMGVhMDhlZWU2NTM1ZTViYjhkMjdmNzZkYmI3ZWVhZDZiYThlMDMxY2NkMGVhZWI2NDllZGVlOTJhZWFmMGYwMjdkNTllZmQ0ZTM5YjFmMzRiMTVjZWI4YjU5MmVlMGYxNzFiMTc3M2IzMDhjMGU3NDc3OTBiMGU2YWNlOTBmYzY2MWNhYTVmOTQyYmRjMTk3MDY3ZjI4ZmJlODdkMSI6IjBiZGFhMzUzYzQ5MDRkMzI0MzI5MjZmMjc1MzRjNzNjIjoiYWEzOWYwNDU1OWNjYzJjYWUzZDU2M2RkYTgzMWZiMjM4YjI1ODJjYjJjMmJiMjhjZmYyMGNjMjAyMDA3MjRjODc3MWI5ODA1ZWY3NDY0YjhmYzA2YzdiODA2MGM2OTIwZmQyNzc5ZmJjODA3YzIyOTJjOGMxZjg4ZjgwODg3NTU2MDlhMTczMmZmOGMwYjA2NjA2NDUyYjk3MGM3OTk5N2I5ODU4ODk0MDRmZDkwN2M0NjY4YTBiY2MxMWJhNjE3MTc1ZjQ1MjU1MjM0OTRhMjQ0ZGE2MGIyMzg0NjhjODYzMDU1ZjA0ZGIyMGVhNDg5YWRmNTQ1ZDU2YzBhNzFkOCI6MTI4OiIyZGRkYTc5MGFhZTJjYTQyN2Y1ZmIwMzJjMjk2NzNlNiI6IjBiOTIyNjI3NTk4OTdmNGJkNTYyNGE4OTExODdlYmE2MDQwZDc5MzIyYTJhNWE2MGZiNzVjNmM2YTViYWRkMTE3YWJlNDBjNmQ5NjM5MzFiYmM3MmRjYTFhMWJmMWY1Mzg4MDMwZmUzMjNiM2IyNGJkNDA4MzM0Yjk1OTA4MTc3ZmI1OWFmNTdjNWNjNmIzMTgyNWJjNzA5N2VlYzdmZWMxOWY5Y2RiNDFjMDI2NGZkMjJmNzE4OTNiY2Y4ODFjMTUxMGZlYjgwNTdlNjQ4ODBmMWVhMmRmOGRjNjBiYjMwMGZkMDZiMGE1ODJmN2JlNTM0ZTUyMmNhYWRjNGEyYzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyM2MyMDE5NjhkZWY1NTE4MTdmMjBlNDliMDlkYmI1YWFlMDAzMzMwNWJlZjY4YTAiOiI3N2JjOGFmNDJkMWI2NGVlMzkwMTJkZjVmYzMzYzU1NGFmMzJiZmVmNmQ5MTgyODA0ZGNmZTM3MGRmYzRiOWQwNTliZGJjNTVmNmJhNGVhY2I4ZTNhNDkxZDk2YTY1MzYwZDc5MDg2NGJhNjBhY2YxYTYwNWY2YjI4YTY1OTE1MTNlYTNjZmQ3NjhmZjQ3YWVlMjQyYThlOWJkZmFjMzk5YjQ1MjIzMWJmZDU5ZDgxYzliOTFmOGRjNTg5YWQ3NTFkOGY5ZmRhZDAxZGQwMDYzMWYwY2I1MWNiMDI0ODMzMmYyNDE5NGI1NzdlNTU3MWNlYjVjMDM3YTZkMGJjZmU4IjoiYmQyOTUyZDIxNWFlZDVlOTE1ZDg2M2U3Zjc2OTZiM2UiOiIyM2YzNWZhYzU4Mzg5NzUxOWI5NDk5ODA4NGFkNmQ3NzY2NmUxMzU5NTEwOWU4NzQ2MjViYzZjY2M2ZDBjNzgxNmE2MmQ2NGIwMmU2NzBmYTY2NGUzYmI1MmMyNzZiMWJhZmJlYjQ0ZTVmOWNjM2FlMDI4ZGFmMWQ3ODczNDQ0ODJmMzFmY2U1ZDI4MDAwMjA3MzJiMzgxYThiMTFjNjgzN2Y0MjgyMDRiN2VkMmY0YzQ4MTAwNjdmMmQ0ZGE5OTk4N2I2NmU2NTI1ZmM2YjkyMTdhOGY2OTMzZjE2ODFiN2NmYTg1N2UxMDJmNjE2YTdjODRhZGMyZjY3NmUzYThmIjoxMjg6ImJiOWJhM2E5YWM3ZDYzZTY3YmQ3OGQ3MWRjMzEzM2IzIjoiMTdkOTNjOTIxMDA5YzZiMGIzZWNmMjQzZDA4YjcwMTQyMjk4M2YyZGNhZWM5YzhkNzYwNGEyZDU1NjVlZDk2Y2U1Y2RkY2IxODNjZDU4ODJmOGQ2MWQzMjAyYzkwMTVkMjA3ZmVkMTZhNGMxMTk1YmE3MTI0MjhjNzI3NjAxMTM1MzE1ZmM1MDRlODBjMjUzYzNhMmU0YTU1OTNmYzZjNGEyMDZlZGNlMWZkNzEwNGU4YTg4ODM4NWJiYjM5NmQzY2RmMWViMmIyYWE0ZDBjOWU0NTQ1MWU5OTU1MGQ5Y2ZhMDVhYWZlNmU3YjUzMTljNzNjMzNmZDZmOThkYjNjNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZiYWVjMDY2OWFkZDMwYWNiOGY2NzhjZTQ3N2EyYjE3MWY4OWQxZjQxOTM1YzQ5MSI6IjU3MTJiODRjNGM5N2Q3NWY4NGVkZDUwNTYxYmMxZDNmMWJhNDUxY2MzYjM1OGIyNDAzYjVlNTI4MjkwOTU0MzQ4Y2Y3YTIzNWI0ZGMxMWE3MmRkYmM1MDMxOTEyMDRlOThhOTc0NGQ4NTQxOTUwOGM4Y2E3NjQzOGMxMzMwNWY3MTZmMWUyMzlhNmQ5ZjY0MjNjMjcyMTdhMDA1N2FhNzVmNmQ3ZTJmYjM1NmU3MTk0ZjI3MTQ1OWFiNTQ4MjU4OWVhMzExYjMzZTNkMzg0NTk1MmZmNDA2N2RkMmI5YmNjMmU4ZjgzNjMwYjBhMjE5ZTkwNDA0MGFiZDY0M2Q4MzkiOiJiMTQ3MmY5MmY1NTJjYTBkNjI0OTZiOGZhNjIyYzU2OSI6IjVhZTY0ZWRmMTFiNGRiYzcyOTRkM2QwMWJjOWZhZjMxMGRjMDhhOTJiMjhlNjY0ZTBhNzUyNWY5MzhkMzJlZjAzMzAzM2YxZGU4OTMxZjM5YTU4ZGYwZWFiYzg3ODQ0MjNmMGE2MzU1ZWZjZmYwMDhjYWU2MmMxZDhlNWI3YmFlZmQzNjBhNWEyYWExYjcwNjg1MjJmYWY4ZTQzN2U2NDE5YmUzMDVhZGEwNTcxNWJmMjFkNzNiZDIyNzUzMWZlYTRiYzMxYTZjZTE2NjJhZWM0OWYxOTYxZWUyOGUzM2FlMDBlYjIwMDEzZmQ4NGI1MWNmZTBkNWFkYmRhZmY1OTIiOjEyODoiMjlhMmQ2MDdiMmQyZDljOTZkMDkzMDAwYjQwMWE5NGYiOiJiZWI2ODdmMDYyYWU3ZjUxNTlkMDc2MDlkZDU4ZDdiODFjNDc4ZDE4MGJjMGI0YzA3YWU3OTk2MjZmZjFkYTJiZTJlMGQ3OGIyYTJhMWY1NjMyNTdmMTYxNDkxYTVhYzUwMGNkNzE5ZGE2Mzc5ZTMwZDBmNmQwYTdhMzMyMDMzODFlMDU4ZjQ4N2ZjNjA5ODk5MjNhZmJlZTc2ZTcwM2MwM2FiYzczYmIwMWJkMjYyZmY2ZjBhYzkzMWY3NzFlOWI0ZjI5ODBlN2Q4YzBhOWU5MzlmYTZlMTA5NDc5Njg5NGYyYzc4ZjQ1M2U0YWJlNjRjYjI4NTAxNjQzNWVmMGU4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2I4ODJhMmRmODFmZGI5Mjc1ZmIwNWQxMjBmMzI0MTdlOGZmZWRkMDc0NTdlOTM4IjoiMGFhZTcyMTNkYTI3OWIzNGQ2ZGNmMmE2OTFiMmQwMzMzMTEyZWEyMmRlMGMzYzY4ZDQ3Y2Y5ZjlmNGVkOGFkNGUwM2Q0YTYwZWMxOGMzYTA0YWM5YzJhYmI3M2UxMDIzMDUxMDI5YjVlODcwNWJiNjljNGM1MGFmYzg0ZGViMDM3OWRiNTA3N2JlMWY2NjM2NTJmOGJkODk1ODI3MWFmMmMxYWM0YTg3ZTA4Y2I1MjZiYWI4YTAzMDY1MmYyYTI5YWY4MDU1ZDBmMzFlMzU0NzVjYWVlMjdmODRjMTU2ZWY4NjQyZTViZmVmODkxOTJmNWJkZTNjNTQyNzlmZmUwNiI6IjVjMDY0ZDM0MThiODkzODhmYjIxYzYxZDhjNzRkMmM1IjoiNWJmYTcxMTNkMzRlMDBmMzQ3MTNjZjA3YzM4NmQwNTVlODg5YmI0MmQ3ZjZjODYzMWZmY2U1NjY4ZTk4Y2IxOWJlZDg4MjBiOTBlY2IyYjM1ZGY3MTM0Zjk3NTcwMDM0N2U1NTE0Mjg3Y2ZlZjdmZmEyYjBmZjQ4YjFkZTA3NjliMDNkY2E2NjEwOTk1ZDY3Y2I4MDA1MmNiMmU1OTE0ZWI0ZWQ0M2VmNTg2MWY0YjkzNjQzMTRmZGU2YWQyYjgyZmJiYTdmZDg0OWRmYTZlNDZlY2MxMmVkYzhjYWJmZmYyOGQ5YmQyM2MyYmNjOGFiMzY2MWM5YmE0ZDVmZWUwNiI6MTIwOiIwOTQzYWJiODVhZGVlNDc3NDE1NDA5MDBjYzgzM2YiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTFkOTRkMjE0ODJjMDBiYjViYzdlN2UwM2FhMDE3YmE1OGY1YTIzNDk0YjcyYzJhIjoiM2E5YzY5YzFlZDIzNDBiZmRlMTQ5NTY1OGRiZjRmNTQ3MzFhMTliMzkyMmExZDUzNWRmOGQwYjI1ODJmNWU4MDNiNTg5MWU4YWQxYWEyNTZjOTIzOTU2ZGNkYTI0MzBkMGMwNjk2YmNlNjMyOTVmYjYxMTgzZTA0MDU2NmU0NTkzMzhmOTA4ZDIzYWU1MWY2NDAyMGMxZWYzZDE5MjQyOGYyMzMxMmIyODVmYzQxMTFkNTBkMWFkZDU4ZjRhNDkwMDhhMjJjOTBkMzM2NTIzMGU5MTU4Y2Q1NmY5ZDg0ZjA3OWJkZDY3MzU1NWQ0ZGM3NmM3NGIwMmZhOTkyMGU3ZCI6ImZiMjFjZDc2M2U2ZjI1NTQwZjhhZDQ1NWRlYWNjZGYwIjoiMDE5ZDFkYjU1NjllZWZmODMzMDZmNjVkNjUzYjAxMDY0ODU0YzFiZTg0NDZjZDI1MTYzMzY2NjdjNjU1N2U3ODQ0ZmMzNDlhZGVhNjRhMTJkYzE5YWM3ZThlNDBiMDUyMGE0OGZhYzY0NTcxYTkzZDY2OTA0NTYwNzA4NWFjOWZhNzhmZWQ5OWJiZjY0NDkwOGQ3NzYzZmU1ZjdmNTAzOTQ3YTlmZTg2NjFiN2M2YWVmOGRhMTAxYWNjYTBhZWQ3NThjYTE1ODBlZWIyZjI2YWUzYmYyZGUwNmNlODgyN2E5MWE2OTQxNzk5OTFhOTkzY2RmODE0ZWZiY2M2MWNhNSI6MTIwOiJhOTNiZDY4MmI1N2UxZDFiZjRhZjk3ZTkzYjg5MjciOiI3MDkzZjQ0NzAzZjJjYmIzZDEyZDk4NzJiMDdhOGNkNDRkZWI2MmRhZTQ4YmM1NzNiMTFhMWVlMWM5ZjMxMDUyMjM0MjNmYWMzMTgxYzMxMmE4YTYxNzU3YTQzMmQ5MjcxOWY0ODZjMjFlMzExYjg0MGFhNjNjZjUzMDcxMGM4NzNkZjI3ZmVjZGEwOTU2MDc1OTIzZjFlY2MzOWJmZmI4NjI3MDZmNDhiZGUyZGUxNTYxMjkzMGZjODYzMGQyMDM2ZTllNGNmYzFjNjk3NzkxNzFiZDIzZDllMWQ1ZGU1MGE5ZTBhMGRlNGJkODJlZDNlZmM0NTI5OTk4MGJiNGNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTY3NTY0NzA5MzdmNWQ5YWY3NmYyYWJlNmRmMmQwYmMxNWZmOGUzOWI1MTU0MDcxIjoiYWZhZTkyYmQ1NmM0MjZjMDk1ZDc2NjMzNzAxYWE5YmVhNWNlMDU0OTA0ODJjNmM2NGFjMjQ0NjhjM2UxYWY2ZTYwMzBhNmJiNjY0OTc0NWIwMTFjNjcyOWJkZTk4NWI5MjQyZTIyMTA1MzIyZmJiODg1M2RjYWJiZDAwMTY1ZDBiMDdkN2I0OTllMDIzOGI2NTEzYmY2MzUxZWI0MDYzNWE3OThmN2U2ZTJkMzExMjVkZGE0NWZmZTg5NjQ1OTZmZGJmZjU1ZGYyMmQ0ZTkwMjViZDRmMzllN2M5YjkwZTc0YjNlZTU4ZDY5MDFmMTEzOTAwZWU0N2E0ZGY1YWZkNyI6IjQ1MDAxOTM3MTFhNWQ4MTdhOWY0OGRlYWZkYTM5NzcyIjoiOTJmYTIyZGJhMGVlZTZiMWRlMWRkZDI0NzEzYjFiZTQ0YzcxMDVkZjkwZTZlN2E1NGRjYmYxOTAyNWU1NjBlYjQ5ODZlZTA4MGNmNjEzODk4YTFhNjlkNWFiNDYwYTNiOGFhMjcyM2E5NWFjNGE0YWY0ODIyNGIwMTFiNTVmYjc1ODJhZTE4ZjY3NDY1OTFlYWIyYmQzM2Q4MmE4ZGJiYWUzZjc4NzdlMjhhZmVmOTg1N2E2MjM1MzBiMzFkODE5OGIyZGY0M2Y5MDNkNmU0OGRkYWUwODQ4NzQxZjllYWFlN2I1NTA0YzY3YWQxMzc5MTgxOGYzYzU1YzliM2QxZSI6MTIwOiI3ZDlmOTdjOTdjMzQyNGM3OTk2NmY1YjQ1YWYwOTAiOiI2MjI1OGQ2MGYwMTM4YzA0MDVkZjRiMmVjMWUzMDhiMzc0NjAzYTllYWNlNDU5MzJmZGMyOTk5ZTllMjI2MWRlOGIxMDk5NDczZDFmYzc0MWM0NmMzMzQwMjNhYTVkOTM1OWY3ZWY5NjYyNDBhYWY3ZTMxMGQ4NzRiNTk1NmZkMTgwZmIxMTI0Y2JlYjkxY2Y4NjAyMGM3OGExYTAzMzVmNWYwMjliZDM0Njc3ZGQyZDUwNzY0ODJmM2IzZTg1ODA4ZjU0OTk4ZjRiYWM4YjhmYTk2OGZlYmNlZWMzNDU4ZmI4ODJmYzA1MzAyNzFmMTQ0ZmIzZTJhYjhjMWE2Mjg5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzBkYjczZDQ2YjUxODY2OWM0NWI4MWJjNjdiOTNiZWQzZDA4NjRmN2U5ZThlNzg5IjoiNzUwYmMxZDJmOTFkNzg2YmIxZTYyMTE5MmEzNzZmNTUyNTM4YmE4YzA3ZDUwZDllMTBiOTM0NWYzMWIzZTVmOWQ4YWQ3YzcxOWMwM2Q4NTQ4YTNiMTg0Yjc0MWNkMDZjNDlkN2ZiNmZlODAyNThkNjBjMDFjMjk4N2MzMzdjODIzMjExY2VlN2MxY2Y4MjA3NzI2Njg4OWJjNzc2NzQ3NWUwZWVhYmIyZWY2YjVhMWRlMjA4OWFhZWY3NzU2NWQ0MGExYzJjNDcwYTg4MGM5MTFlNzdhMTg2ZWFjY2ExNzNiMjU5NzA1NzRmMDVjMGJkY2Q1NDI4YjM5YjUyYWY3ZiI6IjUwNjllMmQyZjgyYjM2ZGU4YzJlYjE3MWYzMDExMzVkIjoiZWY3ODFkY2U1NTZiODQxODhhZGVlMmI2ZTFkNjRkYWMyNzUxZGQ4NTkyYWJjNmM3MmFmN2I5OThkZmFlNDBjYmU2OTJhNGNhZTBiNGFhMmM5NTkxMGUyNzA2MDA1NTBmY2ExZTgzNjQwYzY0ZWZiMWViMGUwYTkwYTZmYzQ3NWFlMWRiODYzYTY0Y2U5Y2MyNzJmMDBhYmFjOGE2M2Q0OGRkOWYxYzBhNWY0NTg2MjI0YmVmZWQwNWJlNGFmYWU1YmQ5MjI0OTgzM2Q1NjVjYzZiNjVmZDg5NTVjYjhhN2Q3YmQ5ZjRiNmEyMjllMzg4MTIxMjg3MWE1MmMxNWQxYyI6MTEyOiJhNTEwMGM1ZTlhMTZhZWRmMGUxYmQ4NjA0MzM1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIwOWYwNDc4ZjFhNjJjYjU0YzU1MTE4MWNiZDRkMjRiNzk2ZTk1ZjNhMDZiNmNiOSI6IjY2ZGI3Y2M5N2I0YTgyNjZjMGEyMjI4ZTgwMjhlMzhkODk4NmU3OWZjYmNjM2NhZmYzMDUwZmRkMmRlODdiN2ZmN2E2ODk1Yjk4OGIwYmRiN2ZjYzRkNmUyZDUzOGRjZmFhZDQzY2UyZjk4YjZkMzI1MDBmNWE2ZTYxODNkODRjYjE5MTU3YTY5OWNkZGUxMjY2ZDZkNzVhMjUxZWUxYTJlYjk3YmZlNjQwNWQ1MGJlMmIxN2E1OGJhNmVhZmFlZTBhMDIzYTI4ZDU2OGZkMWM5MTRmMDYwNDFhNDljNzliOWRmOWVmZTYzZDU2ODgzY2JiYmVhYmE4MDkyNzNkMmUiOiI3YmUxNzY4ZjZmZmIzMTU5OWViNmRlZjdkMWRhYTQxYyI6IjljYjQ5MzU3NTM2ZWJlMDg3ZTE0NzVhNTM4NzkwN2E5ZTUxYWQxNTUwNjk3ZjEzYzZjYzA0Mzg0ZWM4YTY3ZGVhMTMzNzZiZGQ1ZTI2YjgxNWM4NGE3OGY5MjFiNTA2YjllMjA4NmRlNTBmODQ5MTg1ZjA1YmE3YzMwNDFlNDllNDJjMDY3M2RmODU2ZGExMDlhNzhiOGUwY2U5MThjMjU4MzZmN2U3ODFlNmIxNjE2OGU0ZTU5NzZkMjdlYmM4M2YyMGI3YmY0YmVhZGVjYjliNGYxN2E3YTBkM2EzZGIyN2ZjNjUyODhhNzU0YjUwMzFhMmY1YTEzOTQ4MDFlNmUiOjExMjoiNGQyYWMwNWJmZDRiNTliMTVhNmY3MGVhN2NkMCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxYmZhMzBiMzE1ZTdiOTA4MjYzMzMwMTQwZmEyZDY2ZWQ1NzEwNDc4NGE0M2NjNzAiOiI4ZWVlZTk4NjVlMjNmYTUxZGJiZjE5N2ZhNDE3NzZiN2VkYmRiOTM4MWEyMmM5MzUyOTljZDk1OWE0NjE5MDc4OGFlODJmNGU2NDViMDM2MmRmODliZmMwMDI0MTk2NDc4NGJjN2VmNzBmNmY5N2U4MTY4N2Q1MmU1NTJhMzNhZjIwYWUzNGEzMDA1ZTBhN2I4NWQwOTQzNjhkNzA3YzNjNGNkM2VmMzFjMGRhZjNjY2FhMTY3NjYwOWVkMTk5MzI3ZjQxMzlkMGMxMjA5NzdlNmJhYmNlZWQyODg5NmQyY2IzMTI5NjMwZjNlZTEzNTU3MmRjMzk0MzMwNTdlMjZhIjoiYjcwODFhMzAxMGI1MjQyMTgzOTBiYTZkZDQ2MGExZWMiOiI4YzFmNDJiNTkzMWQ2OWFlMzUxZmNkZTdkMmI0MTM2ZDQ4OThhNGZhOGJhNjJkNTVjZWY3MjFkYWRmMTliZWFhYmY5ZDE5MDBiZGYyZTU4ZWU1NjhiODA4Njg0ZWVjYmY3YWEzYzg5MGY2NWM1NGI5NjdiOTQ0ODRiZTA4MjE5M2IyZDgzOTMwMDczODlhYmFhOWRlYmJiNDlkNzI3YTJhYzE2YjRkYWIyYzhmMjc2ODQwZTljNjVhNDc5NzRkOWIwNGYyZTYzYWRmMzhiNmFhZDc2M2YwZDdjZGIyYzNkNTg2OTFhZGRlNmU1MWUwYTg1MDkzYTRjNDk0NGY1YmYyIjoxMTI6IjRkYTg1YjhlYzg2MWRkOGJlNTQ3ODdiYjgzZjEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmM0NzE1NmE2OTNlNTlhMWRlYTA2MThjNDE0NDFmZTY2OWZjNjVkY2ZiN2QwNzI2IjoiM2U0ZjBhNTg2YmFkNTMyYTA4Yzg4NjNlYmJhMDFmZDI1MDE0YmFhOTA3ZTYwMzJlZTQzZDRhN2RmYzdjMzE3MTkxNmRjZGY5ZmFlZTA1MzFmMjc1Mjc4NzJhZTRlMTI3YjZiOWFhZWU5M2Y1ZTc0ZDBhYjIzZjM4NzRhYTBlMjkxNTY0YmM5N2YxNzA4NWRkN2Q1ZWI5YTg1ZDlmNDQ1NzRlNTk1MjkyOWVkYTA4ODYzYjY0Yzg1ZGQzOTVjOTFiMDFmZTViZWY2NmUzZmE4ZjllZTViZjYyYzI1ZDgwZGM4NGZiZTAwMmVjZmQyMTg0MzBiMjZmMzU0OWY3MzRhMSI6ImVhMTkzNWVkMDE0ODgzY2M0Mjc5ODNkNzk2MmQ5OTkyIjoiMGQ4NWI4NTEzYmVjZmU4YzkxZDBmNmZmYjY1ZWMzMWYyY2Y0MDZjNTFjMGRhODg4OTNjNDNkMTMyN2ZkOGFkMWY0YmFiMmQ3YjVlMjc0MzhkNjQzMzk3MDM0YTcyZjg2NjZiZjY0MWI2NzgxYmM5MGY3NjRkYjM4N2VhZTY3MjBiNTcyM2Q1MTAxOTQ1NzBjY2Q3NzNlMWIzYmViZmMzMzNjYzA5OWQwNzg1ODNlOGRhYzYwZDE3NGQzMzI5MjVhMjRhNDUxMTBjOGQyYWJlODkyNGVhNjc3YWM3NGRiNjZlYTc4OWUyODM4ZWZjOTZjNzhiY2VhYTYyMzZjMGE2NyI6MTA0OiI4NzgxYjA0NWE1MDljNDIzOWI5ZjQ0NjI0ZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNWZjZDc4MGEwM2JhODAzNDEwODFlZjk2YjQ0MGMwZTQzNDhhZmRlNGQ2MGMxZDUiOiI2MzE2ZjNiZWIzMmY2ZjNiZjhmMmZmNmEyYzE2MGI0MzJiYWZkMzAzNmQzZWVmYTFlNGVjMjA0ZjI0ODkyZTM3ZGM0ZDc1YzdjZTlhMjRiNWM0OWZiNGRmOTAxZjM1ZWY5ZDU5NTVmN2RjMjg5YzU2Y2I3NDc1M2Y0ZDZiMjk4MjI2N2Q1MjY5ZDEyMjM3ZTIxMjAyYTY1MDYxODQ5YzY1ZTkwZTY3MDJkZGEwM2EzNWFjZTNhM2EwOThkMTZiNGJmYmI4NWI3MjMyNDA0YmFlZTM3Nzc2YTliNTFhZjZiMzA1OWE1ZjE3MGY0ZWJlNGVjZjExMDYxY2EzYzFmMWYzIjoiYWQyMGNjZTA1NmU3NGVjNWQwYTc2ZDYyODA5OThmMTUiOiIyOGY4ZmNmMjNiOWMxYmE0MGMxOWZmYzEwOTI2MzJlMzVmMjM0YzFlOGI4MmJjZDUzMDlkMzdiZjg0OWEyY2U0MDE0MTNkMWYyNDJjZjI1NWVkNTk3ZjlhOTNhMWQ2ZTUwNjc2OTk3Zjk1YWE2MTJlNTgwZDg4MjM0YTg2ZGRjNDA0MjkyNzQ2ZjBiMmY1Y2YxNWFiZWJjZWE2NjU5Zjk5OGVjNmExY2I1YTk5MTRmZWU1YWExYWE1ZDA0YjNjMjA5MTRlNDUwOTVlNDE0MWNlOWMxNzM2NTNkZDkxYzNlYmU0ZWQ0YTlhMjhmMzkxNWQ3YjJlZGJhMzRjMmE1OGQ4IjoxMDQ6IjJhZDQ1MjBkZGMzYjkwNzQxNGQ5MzRjYzFkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQzODI1MDdkZGRjY2YxMzg1ZmM4MzFkYTg5MjQxNDc1NjM0MTZkMDY1NmUxNjhlYyI6ImU1YzU0MzBiOTYwYWEzNWRjODU0MDIxNWMyNzcyZDY2ODExMjcwODU5ZTMzZGQ0NDc3OTA0NzU5ZTdlNWViMjk4NmE1MmE0Y2NjOWY1OTJlNjE0MTQ3YjVlYTJlYWQ2NjM2YTE1YzY0MjYzMzZiMjk5NWQ5YTMxYWIzNmQ3NjU3OGMzNTQwYmM2NjkzODQyYTRiYzA0OTFjNzk2M2VlOWNkYTIzMTc5NTFjZjkzMjQ0YmQzMGJjZGZlYzY5YTQ3NjcwMDQ2MzZmZTdkMWJlNzMwMGMzNWU4MDYyN2JhYjkyMzZhMDc1YTgwM2U5ZTEwODBiOTE1OTA2MGM2NDNhNzgiOiJhMzc2ODdjOWNkNGJkYzFlYWQ0ZTZiOGY3OGJlZTdmNSI6ImZhOWFlMzA1MDljYmI2ZmUxMDRjMjE0ODBhZTdiOGVjOWYxMmYxYWZiMTczMjBkNzdiNzdjZGYzMmNlOGM1YTNmN2Y5MjdlNTAxMTE4YzdjY2Q2OTc1Yjc5MjI1MDU5Y2VmNTMwYTRmY2IwYTk3MTlmNWUyZDNiZWJlN2JiNmVjMDg1NWU0OTVhMzFlNTA3NWViNTBhYTZjMTIyN2U0OGIwM2UzZmRmNzgwMDg0YWM0OTEyZWIzYTU2NzRjY2E5ZGQ2YWMwMzczNjZiMjMwYWU2MzFhODU4MGQyZDExNzk0MmRlZTVkNWRkYmJiMjIzM2FmZWNhNTMyODljYzRmNjgiOjEwNDoiNDIyMTgxOGQ0YmU0NTMwNmUyMDU4MTM3ODkiOiJiNWIzNjcxOWJjNGQxM2E1ZmJmMzcxODhlYTgxNGNkZjNjOTdhNDMwNzg0MzMwNTQwMzI1Yzg5OTU3MGUxNTQ4MjMwMGJjODJjNWI4MTYzMDc0ZTA1NDRjNTEzMmUzY2U5M2JiYTY4YmQ3YThkMmRiODFkMTQzMWI0MjRiNjk3YzExNThjNGQ3MDYyNTY2NmQ1ZmY5OTE0NWNhMzQ4NTY4MTVjOTA1YjVhMGZkOTU4MDZkZjU2YjljZDViMzg0YmRhM2UzOTRiNDA5MDQ4ZWIxMDM3MTQ0Y2MwNzE1MzljMDIzOTdlOTMxZGEyOGE0M2NjMzU0ZDU4NDY0M2FmZDRmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YTY2ZGIzNDUwZGFjOWExZTYzZDI2MzlmMzRjNWM2YTNmYmZiM2M4ZTgyMzAxOTkiOiI2NDYzYTdlYjI0OTYzNzliYzhhNTYzNTU0MTUyNTkyNmE2ZjlmYTcxOGUzMzgyMjE5NTIxMThhZTRjZjAzYTg1ZjIwNzRiNGViYWYxMDhiOWM3MjU4MDliZTFlNjMwOWMzYTQ0NGI2NmYxMjI4NmY2ZWE5ZDgwYzM0MTM3MDZiMjM0YjI2MzcyZThmMDA3ODM4MTkzMTRhOTk0YzllM2VjZjZhYmRkMjU1Y2JmZTAxYjM4NjVlMTM5MGEzNWRjZDI4NTNhM2Q5OWVkOTkyZTgyZWM2N2JhMjQ1ZjA4OGNiMDkwYWRhZGU3NGJkYmM4YTFiYWQwZjA2Y2JlYTc2NmE2IjoiMjFmODM0MTUyOWIyMTBhZGU3ZjJjNjA1NWUxMzAwN2EiOiIxNjk5YmM4YzE5OGFiMDNlMjJkOWJjNGYzNjgyYWFkMzM1YzZlMzVmM2Y2MTZiYjY5NzY5YTlkNWEyMDI1MTE3OTdlNzcwYWUwZDhkODUyOGVmN2IyYmIyNWI0Mjk0ZDQ3NDI3YjQzZjA1ODBmYTcxZDkzZmRlZjY2N2Y0ZjQxOTZmODRlNDFjMGIxOTc4Nzk2ZDBkZTc0YTk0NDIwZmI4NTcxYmZmMzkxMzdmYTIzMWM1NzJiMzFiZTlhZTcyMzM4Mjg4YmVmNWY4Yzk5MjEyMWRjOTE4NTM4NTUxZjM0NmUyNzlhOTA0N2RmMTRlYzlmYzBmZDM5OWNkM2JkOGQ4Ijo5NjoiNGFmMDJiODFiMjYxMDRkMWQzMWUyOTVhIjoiNTNmZTZhMzRkMjgwZjJjOTZkMWFlMmIyZThiYWY2YWJkNjdjZWRmN2QyMTQzMTJmNzVkZDRhMWJlYzI4YTY0MWRkYTNlNzFhYTM5ODcyNmIyYjBiMWY1MTVlMWY0MjU5ZWU5N2FjYWYxN2YxMjJkYjllYzc4MTRjMmRlNmE4OGQzNmMzYWMxMDYzOTZhZDAzZDMzN2MyY2QyZDJiOWI0YjcxNzBlMjNhNTg0OGNhN2VhMTI5ODM4Zjk2N2RmZGZlODNiNDVmZjJhOWJlNjk5YmZiMjM0NjExNTQ2NWQ1OWYwNzRmMDllMjRkOGZjYmQ5ZWNlMDAxOGM5Mjc3NmM0MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWY1YzgxOGYyNGQyMDFmOWZiMjNmY2NhMjExYjA1NDVlZWU1YzVjOWI0NDA4MTBkIjoiOWE3NTY2ODE3YTA2Zjc5MmU5NmE2YTJiYThlMGEwMWY4ODM3ZTJkZTA2Nzk2ZTY4YjA3ODJjYzU0ZWQwYjA0ZmM1ZTI0YTFhZDM3ZDVmZmIwMzU1NDhiODgyZDg4MTUwZTg5OTE1Yjg5ZjU3Y2RlMmJmM2M0M2FiOWRhZTM1NjkyN2RhZWY2YmQ2MWNjOWVkZDVlMWI3YTRhYmVhMmY3MTMxMzY3N2YxYjJmZGYzZDhkNGE3ZTk4MTRlYTgyMGZiYzNlNWM4Mzk0N2RiOTYxODM5YTk4NWE1N2NlZDdmNWU0YTFlZmZmY2ZkMTdhMmM4MDZkNGNkYzFlNzkxNjJkYSI6IjNhMTYzMDY3YmRkOTBmY2UwNDA2ZDFjMTk4YTg4NzcxIjoiYTVlOTRlMjMzZDA0ZmUwYzRiNmM0Njg0YjM4NjkwMmZlMDUwOTY3MDIyMzdkZmJlNzZmNzNiZWZhNjliNmYzMDM5NGNmOWZlMzM1ODk5Nzk0MmRmNjU4NDI3NDhmYjRmMDc1YTNkYzA2ZTE0N2JkOGQ2N2ZjNDM3MTExM2E0ZDc1YzcwMjE5MjU3YzY1MGE2ZjM4YTEzNjY1OWUyMGExY2YzYTExOTM5NzgzNWMzMDRlMGZiMmEzM2FhM2MzMDE5MTc1Yzg2NDYzMDQzZDVlZGM2OTkyODc0ZjYxZTgxY2QwZDI2YWY4YjYyY2Y4Yzg2MjY5MDFkNGYxNmQ4NDIzNiI6OTY6ImIxMjRlZWE5MjdlMmE2MmE4NzU0OTRhMSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhMzAxZjdlZGY4M2RhNjNiY2YzNzIxNmEzYTMzZDc2MTMzMzFjMzIxMDI4MWRkNyI6ImUwOWNjODU0M2RiNzgwNDg3MDAwNDcwNmEyNmU5NGI0NTdjMTI1YmQ2NDhiNTgxYTE5NmY5NjJmMmFlOGZhNTVkOWJjNjY1MzBiYTUwMjBlMjJkMjgyMDgwYjQ3MjBkYzlhMjA5NmExMWMwZmNjM2Q5YTY3Y2QxY2Y5NWNkN2NkMjQxN2JhMzA4Yzc2MWU2NGJlMjQzNDdhMTRjOTQyMzQ0NzA5NGE1YzcyYTAwNDNjMjg4YjM1ZTc1M2JhMGFhNzQ4ZjIwODM4MTI0OWZiMWM4ZDE5NWE0NzIxOTI0MDRiNmM4MTcyNjYzZWU0YjRkNGVjZmE0MjZlMWZiMDAzZjIiOiJkNzNhNTQ2YjBmYTMwNzYzM2FjODk1MDZmYTg2MTM4YiI6ImY1N2ZlNTQ4Y2Y0YTU1MWEyMTZmZmIyNGExZGNmMWI3OWM5NWY5YWJmMDY0NDNmZDU4YWYwNDJkMjg3YzIxNjVkYjM3M2M4MmE5NDE3MmRiNTE3ODQwZjIyZTQ1ZTk2NmUzZWFkOTFjZTFkZGFkMTMyYmNiODQ0ZTQwNmU4NGI3NmEwYjViMGVlMjMwNjRiNjZhMjI5ZjMyYTJkM2I5YzcxMTAzZjAyMGM0YmE1N2ZjMGYwNjA4YjcxMTQ5MTRjZjJhZGEwYzVhOWJjNGFmYmZhOWNlNWRhMzIwZjM0YmViMjIxMWQ1NjlhMTQyZjUzYmZkMjYyZjZkMTQ5YzQzNTAiOjk2OiJmNTM2YTNiOGMzMzNiMWFhNTIwZDY0NDAiOiIxMjRhMzI3YThjMjJiNzY1Mjg4NmRhYzJjODRiODk5N2NhOGE2ZjYxYzliYTljMDk0YjVhZWE0MWVhYTA1MGE2ZGY2Y2JmMjgwMjU5ZTU0NjYwNzFiY2ZhNTNiNGViYzc2YzNjYzRhZmM4YzAzODUxODlhNTM4MjkzM2FhNTdjODlhYWI3OGRjYTg0MzMxZTBmZThmMGFhYjNhNzg1N2QzZTEzZjA4ZGNkOTBlYzVmMDY4NGY4MjA4OGVmOGViN2ZkNjdlNzVkZTQzYjY3YWZjM2EwYmViNDU4ZjVlYmQ2MWIyYzc3OWU2YzUzOWQ3OTVjNjY3YmI3ZGNjMmI3NjJlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZDQwZTgyMjZmZDEzY2I5NWJhNTBiN2NkZjBmMDdmN2FiNzAzN2NmODcwNWNhNTAiOiI3NWFhN2RmNWMzYzQ0M2Q0OGVlOTk4MDY0YjZmZDExMmMyMGQyZDkwYzk4ZTAwZDAyNWVmMDhkMWFkMzU5NTM4NWJlOTlkZTQ3ZmE2Mjc1NDliODI3YzQ4YmM3OWViMWRjYWYyZjFiZTk1YTQ1ZjdlNTU3NTViOTUyYWVlNWFlMDc0OGU2OGJlZTFiMDE0YTYyOGYzZjdkYzg4ZTBlYmFjMWQxZDAwZTI2ODM1NWY1MTAxODM4Y2UxMjVjNTcwMDNhZWJjMDJhMWM5ZDZhZTJjZDZlMjU5MmY1MmMwYmUzOGNlZjIxYTY4MGFlMzVjOTA5Y2FiOTlkY2U5ODM3YWVmIjoiMzQwNmU3MGNiZTE2YjA0N2ZlZGFhNTM3ZWI4OTIyNzkiOiIzOTBiMThkMjJkNWVjYzBiNWE1MjRhZTlhZmFjNmZkOTQ4YWM3MmQxMzYwNzc1YTg4YjM4NWFhODYyY2NlOGEyN2YzZTRiNDIwZTUzOWJlYzZlODk1OGY4YzFiNTQxNmMzMTNmYTBhMTZmOTIxMTQ5YTJiZmVhZTI5YWQyMzQ4OTQ5YjI5YTczOTcwZTViZTkyNWVjMGMzNTIxOGI4MmEwMjBjZjIxYmI2OGM2OTMxZjg2YjI5ZTAxYjg1NTAwYTczZjNlZTdlYjc4ZGE2MDA3OGY0MjU1MGRhODNiMmUzMDFkMTUxZDY5YjI3M2EwNTBmODllNTdkZmM0Nzg3Y2JmIjo2NDoiNjllMDZjNzJlYWQ2OTUwMSI6IjZlOGQ2NjFjZDMyMGIxYjM5Zjg0OTQ4MzZmY2Y3MzhiMGFiODI4NzNkMzkwM2M5ZWUzNGQ3NGY2MThhZWEzNjA5OTkyNmI1NGMxNTg5MjI1ZWM5YTlkNDhjYTUzNjU3ZjEwZDkyODljMzFmMTk5YzM3YzQ4ZmI5Y2JlMWNkYTFlNzkwYWFlZWRmNzM4NzFmNjZhMzc2MTYyNWNjYTNjNGY2NDJiYzRmMjU0ODY4ZjZiOTAzZTgwY2VlZWIwMTU1NjlhY2UyMzM3NjU2N2QzNzEyYWQxNmQxMjg5ZGM1MDRmMTVkOWIyNzUxYjIzZTc3MjJiOWU2ZDhlMDgyNzg1OWYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE4NWFiODc1NjNiODA5YjAxNzI1NzY0ZDY0YmE0Y2M2YTE0M2UyZTAzNjJmMGM1MiI6ImVmNDM2Mjk3MjFiNTBiZDM2NTZiN2FlMzFiNmU0YjRiYTFjZjJjNzJlZDA0NjBlZTdkOWZiNDE2NjMxZGRjNTk3ZTVmOWFlYmJjZjQ0NDJiOTVjYzQ2ZTI4NDc2YTQ2NGRkODdjYWY5YzFjMWQ2Yzk5ZDNlM2UwNTlkYzIzZjhkMmZlMTU1ZmY1ZTU5YzUwZDY0MGJjMDUyYzYyYWRlZTNhYTEyOTViMzg3MzJlMzQ1OGYzNzllOThhOGRiZGZlZDA0YzIyYTU3NjE3OTJlODdmYTY3ZWNiY2JmM2I5MGViMWJjZDFkM2Y0OWU2MDEzMjQ1MmYyOGFmZWNlODNlOTAiOiI5Zjk5MWZmMTZhM2UzZWIxNjRhNGY4MTljOWYxODIxYSI6ImRmMjg5NTExZjc4ZDhmYTI1MDVhZmM0YzcxYWIxZDdjMzFhOGQxNWQxZTVmY2JiMjlkNzBmMGU1NmY4OWM0ZDdiMzBmMWIzYjQ3NDViNWQyY2M3YWYzNGZiNGM5NTQ2MTM3MmJmNTE2ZWMxOTJiNDAwZGM4ZmRiMGNhOWZlMWYzMGY1MzIwZDBmYWRmMjAxNTVjZmNkZGNmMDkyMzNjNmY1OTFjMWM4OTkxN2UzOGEwMDNmNTZiOTRhMWUyNDI5ZDFmMmI2Mjk3ZGI3OTBkN2RjZTg0ZDlmYTEzZDJkODZhMGU0ZDEwMGUxNTQwNTBiMDcxNzhiZWU0Y2RmMTgxMjYiOjY0OiJkYzRjOTdmZThjYzUzMzUwIjoiZmYwZTUzMWM3MzQ0ZjA0MjVkNjJkNWZiZWRmNGJjOGQzZDVjYzgwNjQ3ZTY3Yjg1MmMxYTU4YWQxNTE2ZDM3NmQ5NTRjYjhkZGE3MzlmNmE0ZGYzY2YxNTA3ZTU5Njk2NjEwYmNiNmIzNDM0MGQ2MzEzMDI4ZTAwZDcxOTc4NDVkMzkyZTczMzMxYWFmMTY4YjQ3NGE2NzM2NGQ4ZjlkYWI3NDA1MDlmYWJmOTJhZjc1MDQ1ZjBhZmFiYzFiNTgyOTI2NGQxMzg4MjA5NTJiYmM0ODRkMTEwMGQwNThhNGRlMzJiNGVjZTgyNzQ2YjJiNGE4NWZiMjk5M2Q0YWRkOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjRmMWUwM2FiYjkyN2ZmZDBiMDgxYjlkY2U4M2E1NmE2ZGQ0MTlhNjMxM2FjMzRmIjoiMGU3MDQyMTQ5OWJjNGJjYjM4NTFhZmEzNGNkZjViZTM3NDcyMjgxNWFiZGQ5YmNlZTVmMzMyZGJlODkwYmRjMWMwMjEwYWIxMDY2N2U1YmI5MjRiZjNjMTEyMGUyNWEwYzA3NGRhNjIwMDc2ZjE0Mzk0MDk4OWUyMjIwODZkMWIzNGExMjAwZDA5YWVhMWY4MTBlZjZkZTdkODUyMGM2NWVlZjk1MzlmZGU1YTY0MjI2MDZjNTg4ZmNlNjI2NGU1ZjkxZjkzNGVkZTYzOTdjNGIzMDdkMmQ3ZTA3YTUxOGZjZTU3N2E0MjdmYTkyOTIzY2JiYTYzN2FlNDk1YWZhZCI6ImQxZTI5YmI1MWEzYzRlODcxZDE1YmIwY2Q4NjI1N2UyIjoiYWUyOTExY2RhYWFkMTE5NGM1ZDc4NjhiNmQ4ZjMwMjg3MTA1ZGYxMzJlYjBjZWNjYTE0YjZlMjNlYzdhYzM5Y2MwMWRhMWM1NjdhMDIxOWNjYTdiOTAyY2MyZTgyNWUzMGY5NTI0YTQ3M2ViNmUxZDRkMWJlZmY1YWI0ZjI5MTAzYjJjNzUyMmEzM2RkMzMxODJmYTk1NWM0ZjA5YTc1MTk2YjEwNzJhNmYwMzQwZmM1NWE4MDJkMjljNzA2N2YwNTIxOWMyMTg1N2ViZmY4OWFkYTExZjY0OGMxZjI4ZGZiZmRhYWI1NjAyOGYwNTUwOWRlMTdlMjM4MTQ1N2ViYyI6NjQ6IjQ0Zjc2MDc4N2Y3YmMzYzAiOiIyMTk5ZmE1MDUxNDYxYjY3NTgxNDI5YWIxOWRlMmNjYjUwYjhiMDJlMTJjMGUxZDgxYThhMTQ5MjlmODRlMDlkOTcxNWI3ZDE5OGU3N2U2MzJkZTRhZjFjMDhjNTA0MTI3NjIwNGE3ZWQ3NjY0NjM4NWUyODhlOTZlMWE0YjBiMGYyYjFhOWRmN2YwODkyYmVhZWEzY2I1OGQ5NjMyNzIwMTU4ZjZkYWE0Y2JiZmMwZWJkYzU2ZmY2YTUxNzU3NjhmZjJhYmQyNGNiNzY2OWJjM2ZlNDBmOGFiYTc4NjlkMmRkN2RhYzg2YjZlYmM0ZTRjZTI2MWVkYmVjODhkYjE3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzM2VmZTIwNDMzYzZhMWFkMjYxYTFmZWQ0OTQ5NjE3NDllNWJmOWQzNTgwOWI1OWQiOiJjZmJlYjYxYmU1MGRlZjI1ZjUxMzM0NjQ5OGY3NTk4NGJmZTc5N2E4YWQ1NmJlMzRmMjQ2MWUyZDY3M2Y2Y2UxNGU3NDc5YTU5Nzc3MjY3Yjc1ZGFkYzZiOTUyMjU5OWViZTVkN2IwNzk0OTVhNThjYTE4N2VjNDc3OTZmNmVlOGMzMjIyNzhhZDc0NTFiMDM4YzkzODkyOGFkY2ZmNjEwNWE4ZWEzNzgwYWVkYzQ1YjZhMzMyM2QzYWU2ZmJjZTVkYTRmYjU5Y2E1ZWMwYTE2YTcwNDk0YzNjNDg1OTY3MjM0ODUzMjUwNWU0NGY5MTVlMGI5YjhhMjk2ZWY1MjI1IjoiZGM5NDY3M2IwYzQ5YzZkM2I0NjExZTI3ODIxMmM3NDgiOiI5MTlmNzM5N2E2ZDAzODM2NDIzYjdjYWM1MzE3N2ZjZmJlNDU3ZDRhYTQzNDg2NDZmNjQ2YWFlMWJjNWExNTU2OGNkYjhjOTZmYWJlZjI3OGFjZTI0OGFjYTUzMTExMGE0ZjRmOWU4YWIwYzMyNTI1YWQ4MTZhZTNmYWNmMDMxNzUyMzJkYzg0YWRkY2Q2MDY1ZjljYzFmNTEzOTY2YjYzZmQyN2U5MWEwOWYxOTIxYjk1ZDZiZDhmMDhmMWRiY2UwNzNiY2Y4Mjc4NDdmNzc0NTE0YjQ3OGI5ZDdmYjU0MjY4NDdkZDRkZWU2ZjM5YjU3NjhjMWZiNzI5YjMyZDAzIjozMjoiYzUwOTgzNDAiOiJjNWU0N2Q4YzYwYjA0ZGYxOTc0YjY4YTE0MDk1ZDliYzg0MjlhNDEzZDIxOTYwYjE1YmFlNGZkNzM1NmJmNzg3MmUwZGEwYTFhMzg1Y2EyOTgyZDNhYTMxODJlNjNlYTRiYjhjYTAxNDEwY2Q0ZTcxZGRhZDM0YWExZjEyYzEzODc5MDJiM2Q1NjYzNGY4OWM2MTlhMmU2NzU2NjQ4YWIzYmY5MGU5YmM5NDVhZmM5MTQwZWI5MzViNjMzYmFlOTZiYjA2N2U5ZWU0MjE2OTdiY2Y4MGIxNGIxYjg4ZGJmMTNlMDEwYjQ3MmE3Y2E1NDExZGIzNjg0OGI5YzdhMzdmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZWQ1ZGFkZWZhMGY2ZDE0ZmVkZDFhM2NkYmFiMTA5ZjY2NjA4OTZhOTUyYWM1YWIiOiJhZWY2MTdmNjk3MjRlMDIwMzA5ZWMzOWQ5NTg3NTIwZWZkYTY4YThlMzAzNjg2YzNhNDFlZjcwMGNiYTA1YjdjNmU0M2U5NWFhZGIxYTU2NmY2MTY1MGM4Nzg0NTgzNWU3ODllYjIzNjY5NDFlM2JmZWY2ZDk4NDZhZjBlMGRiYzQzMjQ5MTE3YWQ2ZjI5OWJiYzQwNjY5YWMzODNjZGY3OTI4OWFkYTZjY2Q4Y2NmZTMyOWEwZGM2YTM4ZWVhMWE5OTU1MDQ1NzEwMmQxMGY2NDFjZGE1MGMyMWY1MzNiMWY5ODE2NjNmNzRhMGE3YzY1N2MwNGQ5ZmM2Njk2ZmY0IjoiNTUzYTE0ZjFlMTYxOWY5ZDdiZDA3Y2Q4MjM5NjFmMjUiOiJlYjhlYTgxZDNlMzI4YTExMTM5NDJjZDVlZmQwZjJiNWU3ZjA4ODc5MWM4ZmMwNTY5MGEzNDU4NDEwMWM0ZDQ5MzYyOGVlN2QwMDk5YTI4NjVhYzE5NGI5MTI0YzNmYjkyNGRlMGM0NDI4ZDBhMWMyNmVhM2FkOWEwYmM4OTE4N2ExNjY3M2UzYjZmN2UzNzBkZmIyZGMyNmU4YTU2YTljZjkxZjljMjA4OGMwMjBhNzY2ZWZlMGQwYzkxNjg5NzQzYTYwM2YyY2QxZTMwMGE2YTg0ODI4YjNiNTE1YTRiOWEwNmU2YmIyMDQ1N2JmMTI0Y2Q2Y2U0YWM4YjgzZDUxIjozMjoiZGM0MTNjNGMiOiJiYzFmMzQ5OTFhNDhhYWJiMGZlYTUxM2Y3OTBmMGQyMjNlOWZlYWM0Yzk5ZmExZTg0MjdmMDFhYjhiNGIyODI3Y2ZhZjIzOTM0MmRlMzYwNTFhODQ2YWYwMzA2YTNmODJlN2FlZDk4ZGQwNDE2ZmIwNzhiYzdmM2I2MTdiMDBjZWIyY2VhNGRkYWZjMjJkZDAyMmVmYTgzMDNlOTgwNDUxMGUwZTg4ODA2NWQ4NDI3MzQ1MTU2ZDgyM2Y3OTZmNzQxMzBjMDZkYjlmOTkzNDQzNTU1MmI0ZmVmZDA1MTk1M2UyMGVjYmEzYTQ1MTRhYzEyMWQ3ZDIwOTdkNTk3NDM5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZDk3ZThiZmYzOTIzYTc3ODUwNGZiOTE3ZGJjMTQyOGExMzI4NTg3MDQ3Njk3ZDkiOiJkYzFhODFlZmQ1MWU5Njc3NjdmNWJkZDdlMmU0MjU3MzJjMWQyODQ1MWYyYmY1YmRmM2Y1YTY0OTIyNzkzMzA1OTRkMzYwZGQ4YTE5M2U1ZGJkZTFiZTQ5YmYxNDNhMzVjMzhiY2QwNTlmNzYyYWRhNjVjNTExOWUwOTdmMDk3Njg5MTM0N2Y0ZDgyOWIwODdiZDcyZGFhMzQ5NGIzNDRjYmQzMzcwYzQ0NTljYTI0M2JkNTdhZWRhNGNiODZjZGQwYmYyNzRmMDc4MzBjZGJmNWU1YmU0ZWI5Yjc0MmRkZmZlZjhhYTM1NjI2ZDJiOWVhMGEyOWQzYzNkMDU4YjI4IjoiMGMyOGRjNGNkNTM3MjUwOTFjMmZiNjhhNDc2YzJlNDAiOiJmMzkzMmY1ZTgyZDc1YTFlM2ViYTE1OTFjMTc3NjllMWE0NTgxOWNjZjA1N2MzMWU3NmZhODEwYjkzNjc4NzY2ZDI1OTA1ZTg1OTc3NWMyNDRlOTZiY2FmYmM3NWM0YTJkOTVlN2QwMjg2OGNjYjJmNjVlNDkyNzZmMGI2NDVhYzhjZjZlMzc1ODQwMjMwNGEzYzI1Y2UyZGUwYTQ5ZjQwMWIxYWNhZGFmZjhiNTc1ODliNDVjYzc5MTMwZGRjODM4N2Y0MWNjMzgzZTMzZWYzOGVlYzAxOTE1MjA1MWM3NTYxOThkNmY3ODJjY2Y1NjI5N2I5ZmU5NDQyNjlhNjVhIjozMjoiZTZkNmRmN2EiOiIzOTMyNzgzNmU5ZDhjZmI1OTM5N2FkY2YwNDVhODU2NDRjNTJjMzU2MzI5MDc5NTgxMWYyNjM1MGM4YmNlOGY1NWNhNzc5Y2JjZDE1NDc5ZWZkODE0NGI4YTM5ZWY2MTExNTM5NTVjNzBiZjNhN2RhOWQ0ZDk0NGMyNDA3YTBkNzM1Nzg0ZmNiNjhkZTEwODNlZWJmNjk0MGViYzljZjkyZjlmMTM5YzAxNDA0YjUwM2ZmNjRlNjExMjZhOTRlODgxMzUxNDczNTA3ODg0MzU3MDQwZmQzMjcxNGI4NzJjMjU0MzQ5MDcxMDY5NjQ0ZTJiZDY0MjkwNTUyMWI5NDRlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmM3OGUyOTk3MWU5MGEwMWJiNjU5NzNmODEyNjBiOTM0NGZhODM1NzUxZjVmMTQyIjoiIjoiZjFhMjNjZTZlMmJjOTA4OGE2MmM4ODdhYmVjZDMwYWUiOiIiOjEyODoiZDRkNWMyMmY5OTNjOGM2MTAxNDVmY2JlNGUwMjE2ODciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YzU4MmQ1YjZhNDBlZjBlNDA0OGVjMjBmMDI2MzU3MmQ3Y2M4MjcwNGUzODA4NTEiOiIiOiJlZjIyMWExYzY2ZmRhMTc5MDYxOTBiN2M5OWFiNjBiOCI6IiI6MTI4OiI2MzI3ZGNiNDZmZmIzZDBmZDhmYmYzZDI4NDhhOGYwMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhNThhYmFkZDI5ZTk0NmUyM2NhOWViMDlhZjA1OTkxM2Q1Mzk0OTcxYmRhNmE0ZiI6IiI6IjdjMjliMzE5NmQ0NGRmNzhmYTUxNGExOTY3ZmNkM2E2IjoiIjoxMjg6ImZjMTIzOTQ0YmJlYTZjNTA3NWE1Zjk4N2FlZDljZjk5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA0YmRkZTRjMzVjMzg1NzgzNzE1ZDhhODgzNjQwODUxYjg2MGNlMGU4NDM2ZWMxOSI6IiI6Ijc4M2Y5YTNjMzZiNmQwYzlmZDU3YzE1MTA1MzE2NTM1IjoiIjoxMjA6IjIzZTIxYTgwM2NhYzUyMzc3NzcwMTQ2ODY1NjRmMiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRiYTVmYmEwYzIyZmJlMTBjMmQxNjkwYzVkOTk5Mzg1MjJkZTljNTE4NjcyMWJhYyI6IiI6IjJhY2MyMDczMDg5YTM0ZDQ2NTFlZWUzOWEyNjJlOGFlIjoiIjoxMjA6IjdhYzc0MmM4NTlhMDJhNTQzYjUwNDY0YzY2ZGNmNSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYxMjg5MGIwYTg4MTlmYWE1YThlMGU0ODdmN2YwNjRhZjQyZmE2ZDU1MTlkMDA5ZiI6IiI6ImM5Mzc2MTU2NzU3MzhmNGIzMjI3Yzc5OTgzM2QxZTYxIjoiIjoxMjA6Ijg4MzAwYmQ2NWIxMmRjYjM0MWYxZjZkOGExNTU4NCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MTg3OGYzNjMwMjk4YTgxMjk3ZjRhMjE1MTRmZWE2MzdmYWEzODE1ZDRmMjZmYWUiOiIiOiIxZjkzOTIyNmZlYWIwMTJkYWJmYzIxOTM2MzdkMTViMSI6IiI6MTEyOiJlZWQ1ZmNiNzYwN2MwMzhiMzU0NzQ2ZDkxYzViIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlNTk2ZTc0ODQwYTYwMDU1NmEwNmY5N2IxM2I4OWUzOGY2N2MxNTJmMWExYjkzMCI6IiI6ImUyMDc2ZTEwNTAwNzBkNDY4NjU5ODg1ZWE3N2U4OGQwIjoiIjoxMTI6ImI0NTg2YmRiZDRiNmI4OTk2NDhmMjMzM2VlZTAiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZDMzYjdhMGVmYWUzNDMzOWNhOTg3YjVlYjgwNzUzODVmZDEyNzZlNjNjYzg1MzAiOiIiOiIyZDA3YmI4NjE2ZmMwYmJiNzE3NTVhMWJkMjU2ZTdmYiI6IiI6MTEyOiI2YjYwZDY0NTIyMGNmZGU0MmQ4ODI5NmFjMTkzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU2ODViMTJhNjYxN2Q1NTRjMzZiNjJhZjViOGZmMjIzOWNiM2ZmYjFkMmM0MGUxNCI6IiI6IjZjMzExOTRkZjk5ZDA4ODgxZmE1YjFkZDMzYjQ1YTkyIjoiIjoxMDQ6IjY5NDMxNTkzYzM3NmM5ZjgwNTJiZjEwNzQ3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAzNmFlMDM3NDEwZGFlOWYwNzQxNjA4NTE2ZDAzYjg1NWM5YzE4NTFkZjhjNTRhNCI6IiI6IjczNTk5Mjc1ZjgyMzdmMTRjNGE1MmIyODNjMDcyNzVkIjoiIjoxMDQ6IjZmNzI0OWQyNWM5ZjI3MzQzNGM0NzIwMjc1IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWMxNDRmMzllYmQ2MTI0YmFkODVjOWM3ZmI0Zjc1YmZmMzg5ZWNlMmU4MDg1ZDgzIjoiIjoiZDA4NzFiZmMzNjkzMjQ1YmU0NzhlNmEyNTdjNzllZmIiOiIiOjEwNDoiNWE5OWQ1OTYzMWQwZTEyZjU4YjdiOTVjY2QiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhOGE1NDFmZjExYTFiODU0OGU4MzJkOWUwMTVlZGVjY2M5NGI4N2RhZGMxNTYwNjUiOiIiOiJjNzJiYjMwMGI2MjRjMjdjZGVkODYzZWJhNTZlNzU4NyI6IiI6OTY6ImVhMjUyOGU3NDM5YmUyZWQwYTBkNmIyYSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzBkZDhmNDAwMzM1ZTljNjg4ZTEzY2MwYjEwMDdiZDIxNzM2YTZkMzk1ZDE1MmUyIjoiIjoiMjg4OTk2MDFmYTk1ZjUzMmIwMzBmMTFiYmViODcwMTEiOiIiOjk2OiIzNTYyNTYzODU4OWJiN2Y2Y2NkYjAyMjIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNiOGY2NzJiMDRkNzA2ZDdkNDEyNWQ2ODMwZmZmNWQyZWMwNjk1NjliZWEwNTBjZSI6IiI6IjM3NWQ0MTM0ZTg2NDkzNjdmNGRiOWJkYjA3YWE4NTk0IjoiIjo5NjoiNzA2MTBiZjMyOTY4M2UxNWVjZjhjNzlmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmY3MWU1YjFjZDZlYjM2M2VjZDg5YTQ5NTg2NzVhMTE2NmMxMDc0OWUxZmYxZjQ0IjoiIjoiOWY1MDJmYjVhYzkwZmY1ZjU2MTZkZDFmYTgzNzM4N2QiOiIiOjY0OiJhNGI1MTM4MTIyZTEyMDlkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWI5ZDFkZmIyMzAzYjY2ODQ4ZTM2Mzc5M2JkY2EwZTVhZGE4NTk5Y2IyYzA5ZTI0IjoiIjoiMmVlOTYzODRkZDI5ZjhhNGM0YTYxMDI1NDlhMDI2YWIiOiIiOjY0OiIzYjMzYTEwMTg5MzM4YzNiIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTM1YWUyNzFmNzBlYmFjYjI4MTczYjM3YjkyMWY1YWJjYWQxNzEyYTFjZjVkNWRiIjoiIjoiOGQ5N2YzNTQ1NjRkODE4NWI1N2Y3NzI3NjI2ODUwYTAiOiIiOjY0OiI4MTNkMmY5OGE3NjAxMzBjIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YmRkMGNiODI2ZDVkMjhjMmFiOTc3N2Q1YTBjMTU1OGU3YzgyMjdjNTNlZDRjNGYiOiIiOiJkYWYxMzUwMWE0N2VlNzNjMDE5N2Q4Yjc3NGVlYzM5OSI6IiI6MzI6ImE2ZDEwOGMwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MWI0ZDVlZTRlMWNiZWUxZDg5NjZmYjM5NDY0MDllNmU2NDMxOWE0YjgzMjMxZjUiOiIiOiJiYzJmOTMyMGQ2YjYyZWVhMjllYmM5Y2Y3ZmM5ZjA0YSI6IiI6MzI6ImE0N2NkYWRkIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ODEzNjI3ZDI2ZDU2OGRmZTVhMGY4MTg0Y2Y1NjFmZTQ1NWViOThiOTg4NDFmZTAiOiIiOiI4MTcxOTkyNTRhOTEyODgwNDA1Yzk3MjlkNzVlZDM5MSI6IiI6MzI6ImQ4MWQ5YjQxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTRmMTYwZTIzMjVkYTIzMzBmYmU0ZTE1OTEwZDMzYzIwMTRmMDFhY2U1OGU1YjI0IjoiIjoiODBhMWI5OTc1MDk4MGJmMmJlODRhMTcwMzJmYzI3MjEiOiIwNjZmZGQ5ODBjZjA0M2E3MzI0MDNlZTVmNjVjODJjYTgxZTNmYzg1OGFkM2NmYTM0MzAxNGE4NDI2ZmQzODA2NzcwZjEyN2UyMDQxZWZiNDJlMzE1MDZjZTgzMzkwYWM1ZDc2ZGUyZmUxODA2ZGYyNGNlNmU0YmI4OTQ5NzJhMTA3ZWY5OWU1MWU0YWNmYjBlMzI1YWIwNTNmOTgyNDUxNGI1OTQxYWIxZWM1OThmYmI1N2E1ZDE4ZWQzNGQ3Mjk5MmExOTIxNWQ5MTRlMzRhZDFhMjIzMjZlNDkzZDFmZjJkYTdiYzI3MWM5NmFkM2FiNjZkMGMzMmJkNzExMjkzIjoxMjg6ImRkMTUzY2ZkN2FhOTQ2MjgwNjYwYzQ0NWY1ODZmYTI4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ3ODU4NDZmN2MwNTI0ZTc4ZjNlYjEzN2ZkNDMzZTE4MDhhZjY0NTQ5YWY2OTE4MyI6IiI6IjUzMzQ0NzZhNWZhM2ZhNTBkY2M0YjEyZjhhYzAwYjUxIjoiZTcwZjgyZDFlMzM2MWFjNWE1YzlhMDg3ZTQ3OTg0ZDU1MzNiYTI5NmY5YjdlNGExOTJhNGFiMjhhODMzY2RiYmQ1Y2VjZTM0MTVjZjZmYmIyZjgwNTU1NjBiNWMzMWM5OGQ4M2QxMzk5NTRlMWMwM2E0NjQ3MzlmMWViNWFkOTgyYzQzNzFjZjIwYjg5ODRiYmQ5N2Q1ZjQwYjMzNmY1ZTk2ZGYzZDI3MmI5NWY3NTQ3YmUxNWMzYmMwNWIzY2FhYzdkMDhjNWViNWRlOGJkZDI0NmU3NGY2Y2FhNmJmZjc2ZWEwNDE3NzMwY2U3MmI5MTE4NjdmODhmZGNmNzNhMCI6MTI4OiJjNTkyMzFkZGFhZTk4ZTBlOGRiNmIzZmU4ZjRkMzQyNyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ5YjA4NWZlMWE4ZTFhZTc2OWVkMDlmYzU4NWQyOWViMjRkNTg5Njg5OTkyZTZjNSI6IiI6Ijg5OTg3OGIwNjg0ZmI4NjVkMzAxOTA4MjE4MTdiODhjIjoiZjc4OWVhZmUzZDAyODI2YjYxOWNhNGZiY2E3YmIxOTE5ZTVjNmY3YzMzODI0YTJmN2Y4MTVkYzUwZTMyOTk3OTcwNWY3ZWY2MWU5YWRmNzg5OWQzNGYxYjg4NDAzODRmZjYyZWY2ZDI5ZWVhMzhjNDVkMTJiZTkyNDlhY2E2OWEwMjIyMmNkNzQ0ZDgxOTU4YzY4MTYzMDRmZjBkODFkNjcxNGEyMDIzYjNkZDlkOTQwZGI1YzUwYWZkODljNTI3NzRkMjhkNmFmZGUyYjZjNjg0MjViNmFjYmUzNDY4MjUzMWEyZTU3ZTJiOWE3NzI5YjNlOGQ5NmE3MjliMTVjYyI6MTI4OiIyYzg0YmY3YTg5NDdhYjkzYjEwYWU0MDgyNDNiNDk5MyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc1ODQ3NTg4NzYwZWNiNmNhNTQ4NzQ3Yjc0MzkxNGM4OWZlYTM2N2E1Y2NiODFiNiI6IiI6IjdkOGE5ZmQyNTRlMjA2MWMwMWUzOWViNTc0OTUxOTI0IjoiYjAzYzU3ZGZkNDkxNTI0MDFhMjI1MzU3ZjFkNmU1MzNmM2E0MjNlNWNmY2UwN2I4YWU3Y2E5ZGFmNjg2NDVlNWJkNjdiM2NhMjQyMWVhYzQ0NzUzMGIyN2M2ZGM2YmQ5YzdmMWIyMjQ0MWI4Y2M4YzRhYzI2Y2VjMmM5YzBkNjY1YTM1YjY2ZDc3OWEzNzcyZDcxNGY4MDJkNmI2MjcyOTg0ODA4ZDA3NDAzNDRiNmFiZGI2M2U2MjZlZjRlMWFiMDQ2OWRhNTIxYzc5MDhiMmM5NWEwZmQwNzQzN2MwZTlkNGQyNDUxYWUxODlhZDYxZmYxOWY0ZWZiNDA1MTI3YyI6MTIwOiJlOGFhYzE0YjUzY2RiYzIwMjhkMzMwZmM4ZDkyYTciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlM2ExOGE5NmQyZTQ1ZDJmNjA3ODBkYzM5Y2VlNzE2MGUyOGNiODEwYmYwOTg1OGMiOiIiOiIyNmE0ZDY1OTY2NWRlZDM5YjdhMTU4M2RlNzU2ZDBhZCI6IjgzZjhkOWM1ODE2OWI0YzY4MDMyMzIxMTk3MDc3ZmY1YzhlZTRlYmI3MzJiMDQwNzQ4ZTFiNTVkY2Y1MzM3NWFlODZmYjk2NDZhNjcyYjVjNWJjODA1YTkyYzQ3NWNiYjZkMGVkNjg5YTU4YWJkZjIyMzAyNTBhN2QzZmJkOGNmYWIwNzgzNWZhODVlNzM4YTdmNzRiYzNlOTM2MTZkODQ0YjFlYzYxYjc5ZjIzZGZlYTYyZTE4MTVmMjk1ZDQzZjYxZDdiNTk1NjEwM2IzMWNhODhhZmIwYjNkMzdlYjQyY2Y3NzIzMmRiZjIyNTgwNjUyMzI5NzFjMzk3ZGNiY2IiOjEyMDoiZGMwMzQ1NjRkNGJlN2RlMjQzZmYwNTliNWY5MTYwIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdiZTM5MDkxNzBlYTdhMmZmNzZmOWYyODI0MWQ4Y2M0OGRkZWFmYTg1MTdjNmY4YyI6IiI6IjhkZWU3ZTI5MzUwYzYwYzViY2ZlYzg5ZGE2NjE3ZDJlIjoiZjZlOWU3YTdmOTcxNjc2MGViNDMwNjBkNWM4MDIzNmEwZjExOGIwZjc1MGViZDVkZjAxZmQyZGJhOTVjNTU2ZWNkMmU1NGEzZjMzNzc2NzMyMWFiZjU2OWM4MTM3YThlNDhjNWI0NDAzN2JhNjI5NTFlOWY5ZjcwOWU2ZTQ1NDBhMzZkNzY5ZjM5NDVkMDFhMjBhMmVkMTg5MWM0MTVhMTZkOTVjYWI3ZGRmOWJjZWJmMTg4NDJjODMwMDY3NTA5YTJhNWQ0OWE5Njg0MzI0YzQzM2Q1MzgyNGQyZjhmZDMyNmIxNDlhZjE3ZjQwZTViZjVlNDkxODU3MzhmYmE2MCI6MTIwOiI5NDJiNTIyNzdlOWRjMGEzMGQ3MzdkMDBmNWU1OTciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZmU0MTNiYWZjNDc1M2UxNTExYjU4MGM4MzA0NDliZWU1NmUwZTViOWFjYjg1MmMiOiIiOiJlMzA4MjlmNjRmM2VkYTEzYmZiMmFjNTcyYWNlYjNkZSI6IjZjNzcyZDA4YjRkNzUwN2UzNTgwNDU3MmZhNjk3YzY0NmM3NzMwMTk1NGNjNWMxNjA5NDFlNDllMjMwNjk3ZWQ4YzIzMzM4YjlmMzBjM2VhZDY5YjFjMWEyMzI5ZmYwMjVkY2QzYzBkMGE5Y2M4M2ZlZTQ5Nzk0NDhhYTcxZGRiOWQ1NjliZWRjOGM0OTdhMmE0YWMzYjYwZDA4N2Q3ODcyZjBhMTEwYmY5MDQ5M2FlN2RhMDNiMDk1MzczNDIyMzE1NmNkMmQ2YzU2MmU0YTk3OGE2ZGQ1Y2RiMjI5ZGQ1OGRkNGQwZjUwYWMwMTVmMmY1ZTg5ZGFjNGFhMjlhMTkiOjExMjoiODc3Mzc4NzNiODI1ODZiYjI5YjQwNjk0NmNhZSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI0YmM0Mzc4ZDQyMzkzMWY5YjMyMGJiNTdkZjU4NGM2NDE0MDZjMWRhYTc0NDhhZCI6IiI6ImVjYTcwZTEwYzAzNTg4MzhhM2Y0YTQ1YzRiMDE2Y2NkIjoiNjhkMWMwNDVjMTYwNGUzYzNkZDRmN2M3NTQzMjQwYWNhOGRiYzUyNjZkYzE4YzVhODA3MWU4YjA5ZTM3MDBiN2NmODE5MDQ0YjI3MjJkOGRiOTIwMjFmNDJhMGFmYjI5NWQ3YjE2ZWNmNGU0NzA0YTUwYTUyN2EyZTcyZDdmNTM2MTdjMzU4ZTNiN2JlM2Q3ZmVjZGE2MTJjZTY4NDJmY2ZhYTY4ZjJkMWI4YTU5ZDhiODM5MTc3OWYyZmFiOTlmODIwODYyYzk0MDI5ZjQ0NGFiZTYyMzY3YzVkZTBhNGJlY2MzNTk2NjBlNGE1MzY2ZjdkNDgyYmRjMzYyYjg2NiI6MTEyOiIwNmY5NWNhNjljMjIyYTg5ODU4ODc5MjViMTVlIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWNkNDQxNGZmZDI0ZTgzMGUyZGM0OTcyN2VmYTU5MmU0MzBhNmE3NTM5MWNmMTExIjoiIjoiYTA4ZTMyYWQ3ZDYzZjk3NWRlMzE0YWQyYzBmYTEzZmMiOiIyMGEyNzFmMWY0YzZiZWE4ZjE1ODRhYjM5YTcxNzllYzQ0ODY1MGUyZmY2N2E3MzM4ZDFiYzlmYWI3ZjczYjJjZTUyMjJjZDA3ZGVkOTQ3ZDEzNWQ5ZDA2NzBkYzM2OGYwYTRiNTBlY2U4NWNiZjY0MTg3N2Y5ZmUwYWM2YTdlNmFmYjMyZmRiMWIzY2QzNTM2MGJiODBjZmZmYzM0Y2ZiOTRkYmNiZWU5Y2E1YmU5OGEwY2E4NDYzOTRhMTM1ODYwZmJhNTdjNmYwMTI1ZGNiOWZiOGI2MWJlNjgxYWRhMzFhOTk3NjM4ZWUxNzI1MjVjMDNkZDEzMTcxNTM0YTkxIjoxMTI6ImM2ODg0MmNhZmM1MDA3MDc5OWY3YzhhY2Q2MmEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ZTBlZjllZDVlNmYwMGE3MjFhOTg5M2UxZjBkOTA3OWM1YWE2NjdhNGNkZDJhNTIiOiIiOiI1ZjAxNWZkNTU2ZTg3ZmYwZDBkZjU4NmZiNDUyMzA2ZCI6ImI4Mjk4NjEzNWU0OWUwM2Y2ZjhmM2NlNDA0OGRlZDJlNjNlZTBjMzFkZGM4NDkyOWUwMjJlZTg1NjExNTkxNzliM2JiNDQwM2ViZGFmZGY2YmVhZTUxYWM1YmY0YWJlZDRkYmMyNTE0MzM0MTdlY2UzMjI4YjI2MGVjYTUxMzRlNTM5MGNiYTQ5YTBiNmZjYmJiYWJiMDg1Mzc4Mzc0ZTRlNjcxZDliYTI2NTI5OGU5ODY0YmZjZTI1Njg4NDI0N2MzNmY5YmRkY2ViNzliNmEzZTcwMGNiM2RkNDAwODhiYTdiYjZhYjZhYTExYjZiZTI2MWE3ZTUzNDhmNGE3ZDEiOjEwNDoiZWM5YTc5YTg4YTE2NGUxYTYyNTNkODMxMmUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWJjOGYxNWQ5OGUwODlkNjBkNGRiMDA4MDg3MDAwNTNmNzhiMzNjMzE2NTJjM2U0IjoiIjoiNWNjMGZmOWJiN2Q1YjliMmFhMDZmNmVjZjY2OWQ1YmIiOiIyNGFjOTVhNmVkMmY3ODg1M2Y5YWIyMGY1M2RlNDdlN2Y2NjJmNzJhZWE0NTQxNDFlMjEzMWFhY2U3ZWQyZGFlYjM5NWJiY2NkYmYwMDRlMjNjZTA0YWQ4NTkwOWYzMDE1MWI2NTI2YzFjZTc5MzQ3MjZmOTk5OTdiYmFiMjcwNTViMzc5ZTVlNDNiODBhZDU0NmUyZDE2NTVkMWFkYWQ0Y2JlNTEyODI2NDNiYjRkZjA4NmRlYjFiNDhjMWJkM2FjM2I1M2M0YTQwNmJlMjY4NzE3NDAyOGVjZjdlNzk3NmU1YzdhMTFjOWEzODI3ODEzYWRlMzJiYWVmOWYxNWVjIjoxMDQ6Ijk3NzliN2MzZWNlNmMyM2Q1ODEzZTI0M2VjIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTlhZmM0M2E0NDgxZjc5NmQ3NzU2MWY4MGI1YjJlMTUxNGM5NmM1ZDFkODZlNjRjIjoiIjoiZDRjMDY1OTVmZWZkNGE4MWJiYmQ0YjQwYzJlMTk4OWQiOiI5OGZjY2E1MTM1Mjk5OGQwMTI2YjU1MzllM2ZiOWEyMzhhYzMxYzA1OTU0ZmMyMDZkMzgxOTA5YWVlNzA5ODNiNmFiOTlkM2YzZWZlODUzMGExYzNjZmUzYjYyNzU2MzIxYjFkMDc3MWE1OTQwMDU1ZWJhMWU3MWZhNjRmMjkyOTFhYTVlNWIwYWYwZmNjOGU2ZjVhMDI2ODhkOWU5MzQxNzIyNWVkZWQ3OTFhMzUyMTc4MjJmZmIzNDZkM2ZhMjgwOWI2NWFiZTcyOTQ0ODMxNmJlMzBjZjY2MTEzN2QzYzBlNDk4NDZjYjBkZjU5OGQ5MGVkYTU0NWFmYjY0YTVlIjoxMDQ6ImNhODI0NDg0MjkxMDYwMDkwOTRjMjFkNzBiIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjRmYzMxZGNmZWY2MjAzZmRiMjk2Y2M5MjhjMTNiN2RmNTZiZmU2ZjMyNTgzMDU3IjoiIjoiNjMwOGE3OGRjOGYzYzkwNDQyZGM1MjE5NjY0OWMzOGUiOiIyNTY3ZDgwYzI1M2IwODBjMDE1ODEwMjU1ODU1MTQ0NWQ4Y2U0ZDVkZGVlMjAxNGEyYmU1Y2JhZDYyZTE3MTdhMGZkNGQyMDU5NDQ3YzMxNTExOTI5NTFlYjExYTRhN2IxOWE5NTJmNmJhMjYxYzg3ZjEwZjRjOTAzMjAyOGRlM2NjNWEyYTU3M2E0ZTk5M2E2OTBmYzg5NTRkYWEzZWM5Mjc0M2U3MzQzZTc1YjY0NmM0ZmE5Y2JjM2ZjZWI0ZjVkNTliYjQzOWMyMzc1NGM0ZDk2NjZmYmMxNmM5MGMwY2FjOTE2NzliNmFkMWJmZTVkY2Y2YmQxYThhNjdjNmI1Ijo5NjoiOWQxNjAzNzk5ZTI0ODVhMDNlN2IwNWEwIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWMyZDk0MTI0ODZjMzgxNDQwMjEzZTE1ODhiNmJiNThiMGRhNTMzMDBiOWQzMDg5IjoiIjoiNzI3ZWQ4ODQ2ZGFhYjg3NGQ1YTk5MThiNDdkMDE2ZjQiOiI2NTY0MzBmMGMxNDIzMDE4YjVlMmVmYmIxZTMyYTUzODVjMWE5YTE3NzljNGRiZDU4NWRlYTkxZWRjMzllYTg3NTJlYmZjMmQ4MDY0MjUxYThhNWFlNzFlMTg0NWYyNGE3ZTQyYzYzNzFjMmVjYjMxZTIyMjlkNWY0OTIzYmZmYzIxZDQ4MDQ1NzVhODQ4MzZmM2NmOTBlYzYwNDdiYjM2MGI1NThhNDFhOTc1ZWNlMTExYjUyODRkZmEyNDQxNzA1YTZkZjU0ZmM2NmNhNmNjMWFmOTE2M2VjYzQ2OTAyZmFjMzM3ZDVmNjdmNTYzZmRlOGU4ZTdlNjRiODU4OGI3Ijo5NjoiMDVlZTZjZTEzNzExNTM1ODY0Njc0YTViIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYmY3YTk3NTY5NDI3MjI1YTRiZDUxNDNjNzE2YTIyZTYyZjg0YzE0NWJiNTE1MTEiOiIiOiJlMjU1MDg4Y2RmZThhZTVjOWZlYTg2ZDc0ZDJmMWI3ZCI6ImI4NTA5OTMzMDBmNTRkMDc4ZjgzY2ViOWFlZjczNDViYmY3NThmOTIzNjViNjYyNWMyMTBmNjFkYWQ0ZjJhMjMxOWY1MWQ4ODNhMzgzYTcwNjM5MmQzZGZjYTE3MDZlYmE1ODVhNmZhYzhiZDQyOTRjMGJiMmNiM2Y2YjQ1NGQ1Yzk3ODE5ZThlNWM5MjY3NTQ4NDAyNjFiMDdlYzRlZjFmODdjZjI4MWQ3NWMxODc4Mzk2ODk5NDQyMzAzMDZlMTkwMzA0NzkxNWUwODYwNDM5OTA3NDU4NjQ4MTlhZDcxM2QzNGEyNDRhYTRlOWQ3NTVmZGIxMzcxMDVkN2VlZDgiOjk2OiIwYzljMTczODhkMDYxMGY5OWQwYTA5M2YiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ1YTZkZjY1NWU4OGJjODgwYWNmZjQxNTIwYWFmZDBjYzhhYThhZWI4OTUyZmQwNiI6IiI6IjExMjVlMWRlOTQ5NzBjOWU3YmU3MGU1OGU3NjI2ZWY0IjoiZmU5ODM4YTQ0NWI4ZWRlZjE5YjNlOWYzM2M4YzBjMjY1YjNhMTJjOTdiOGVjNTdjZWI5NGY2NWFlNTIyNzE3N2RlMzhmMWUzMzhkY2NiMmIyNGU1YmQwZjBlYjgxMjdmODNlYmEwZjFkZGZhNTUxOTg3ODlkZjBjZGQxZDk3N2ZjYjk4NWFkOWM3ZDUxYjk2ZTc0OWQyY2YzY2M3YTFlYzRkZmNiYzY0MWExYTAyMmQ1NWRlZjMyOGUwODFhZjg5MGE3ZTY5OWYyZGJhZmRmNTA2Mzg5ZTA0NWFhMTIxOTIzOWQ1ODY4YmE2NzVhMzkyNTYwMmI2ZmI2ZjZlNmQzNyI6NjQ6IjFjM2JkMWUwZDQ5MThlMzYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNzlmNGYyYWI0YjcwNzc4ZmRiOWNhNzgwMGNkMjBlMzIzNjAxZDdhYTJjNzUzNjYiOiIiOiIwZjdiNDAyNTYwNzM1Y2YwM2Q1ZGE1OGRlNWI2YzY4NSI6IjdkZDlhOGM4NDhiYmNmNTEyNzE2MWM4YTQxOWE0MzZhMGRhZDU1OWY3YzE2MTNjZGY0MTU5NGUxNzcwMTZhY2IxY2NmNDRiZTg1MjE4NWM0MmU3MTIwOTAyYTQyZWZlODM4NTU5OTVhYjUyY2Y1YzE5MGQ0OTlmY2ZkNjk4YzY3MWZkNzI5NDlkYzNlYTdkZGI4NzRlNTg2YTNhYTQ1NWEwMjFjZWM3YjVmODYwODQ2MmNhNjZmOTI2YWJhNzZlNjBhNTg0NmQ0ZWIyMDQxNTVjZDNjMTMyOGRhNTFiYTM1YzMwMDdiOGJiMzk0ZjM0ZTNhOGI4MWRkZDJlYTExMTUiOjY0OiJkYWI2MTIzNTFmNzVlMmNiIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2NzE2YWI5Mzc3NTU2ODRhZjc0MDNlNmZiYTU0NTJjMWIxMTU2OGE5MDQ3YmI1MGYiOiIiOiIyZmQ1YTQ0NmRkNTY0NjE5ZWY3NWI2ZTAwOTA1ZmZlMCI6IjIwZDI2MWQzMTkyOTk2YzIxZGE2OWU5NzljMjZmNWY5MzdlNmVhNGNiN2IwNWM2ZWY1NTZjZTRkODZjYTBmZTg1ZWMyNDI1ZDI3NGM0M2I1MjEyZmU5ZDI3YmI0OGIwNGU4ODc0NjFhOWY0NWY1MjQwNTliODdlYWVhMmUyODdhOGQ0NTM3ZjMzOGIwMjEyMDEyYTlkNGI2NjEwZThjOTdkZDU1NGUwYjNjMzEzM2UwNWMxNGQwZGRhYjM1MjRjOTNmZDUyN2UyMjNiMTk5NmI0Y2ZmMGE0YTc0MzhmMWQ1NDg5MGJmNTczY2Q4MDM5NDFiNjllNWZjNjIxMmM1ZDIiOjY0OiJmMWQ3NDNiN2UxYjczYWY1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2RjOTRiNWJiZDYzMTVhZDhkMmI2N2YwYzY4M2QxMGNmNDU2ZjgyMmEzZWJiMDI0IjoiIjoiNmYzZWVkZWI1N2RjZjEyYmZiM2NkODA4NDk4OTNjOTAiOiJlZTFmZjM2N2Y0YjIzYzE1NmUzZGNjZmY4NGFlNGJmMmI4ZWNlYzFmYjVmZmQyNWNjYWE5M2I2YzY4MzQzODliZDc5NjU1YmQ0YmFjNzUyMzhlYjBmNjVkMzYwM2VjYzU3Yzg3NzQ3OTgzMDllODViNjY3N2U3OGVkMjA3N2I3MTJjZjI4Nzk1ZDBkYzhmZWU5OTRmOTczNzNhODIzMzhlZjY3YzYyMzc4MTM2YTc5YTk5MGVjYmNkNjM2NzQ0NWU4MDVlZmE5OGY5MTY4ODI2ZTU3Y2I4ZGQ3ZTdiMWQ1Yzg5YWQ5ODM1ODY0NmZhNTZkZDJhNzFjNDBlMDI3NWExIjozMjoiNGRjNzQ5NzEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNiYmUyMjNlMjUzYmYyNzI1OTllMjhhZjY4NjEwMTNlY2QwYzg4NzEwOTQ3ZWQ0MSI6IiI6IjRmYmYwOWZmYWZmYjYwMGYwZGUzOGZiMTIzMTVjYWI1IjoiNTM4ODE0NmY2NDc5ZjdiM2IyODBmNDU2NTVhOTViODQ3ZWUyN2M3MzRmYjJmZDkxZjZjMDA5YjFhYjE4MTBjNzcyYzc0MzVkMzIyMTA2OWY5NDkwZDI1MWI3NmU3NDAxNDc5MDZhYzFkYjFjMjA5YzE3NWIyMWFhMTA4ODFjNDRmYjMwN2Q0ZDI5MDBhYTNiMWQ1NmZiMGVkYjlmMmE1ODUwNTY1M2ExN2ZlZTM1MGUxMjc1NWI5NjU2YmM2NWM3OGMxNTkzZDVjYjcxNzhlMjlmODIyMDljYWY1M2U2MGZkZGY3MjVmNjk1N2NjOTcxOGJmNDEwYzRhMDIyOWVkNCI6MzI6ImZiODQ1YWI3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDYxODc3ODEzYWNmZTZlOTk3OWVhYjcyOWI1MmUzZDE5MmIzMjM2NzU4YmI2NTYzIjoiIjoiNjk4NWNmNzdiNzVhNDdhMzk3OGRkNjQxMmQ1OTIwMGIiOiIzODU1NTE4NTRhODlhYjM3MDYzYmEwZWQ5MTE1MDFiM2Q2MzIxNTNjNWMyOTkyZTE1NGMwYTMzNGJjMzY2MjA0NzZmMTE0OTU0MzdiODQyNDA5ZTA5NTRmNzM1MmNiZjI4OGQxNThiZGJiYWY3MjYyMWVhMmNlNzViNzA4YmMyNzZmNzk2YzVhYTdmZDAwNzFlNTIyYzVmMTc1YTllNzc4N2RlZWY3OWY2MzYyMTAxYWEzNjA3YjQ1ODhmMmUxZGY3MTI3ZjYxN2M2MDczNTkzYTFjNzkyYjk1OWUyMDFlNGE3YTQzZWE4YjFjM2FmMDI2Mzc2NDM5ZWY2MjkyNjZjIjozMjoiYzg0MGQ5OTQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDk3NzBmOTExNDEyMGEyYzFjM2NjNDE2ZmUwZWI4Njk5ZTA3MTQxMTU4YTViZGZmIjoiODc1ZTJlNWI1YzAyZTBhMzNlNzFiNjc4YWEyOWMxNWNlMThlYzI1OWNmNGI0MTg3NDg5M2VkMzExMmRhYTU2ZmYyYTc0NzU2ODFiOGIzZDkwMjhlZjE4NGQzMDY1OGU4ODFjOTA4ZjM1ODhmNjk4OTk5NjIwNzRkYjRkZGZjMDU5N2Y4ZGViYjY2YzgzODhhMWJjY2YwZmZlMmNmOWYwNzhkYzFjOTNmODE5MWY5MjA3NTQ0NDJhZDRhMzI1OTg1YzYyZGUxYTU3YTI1ZGU0ZTllZDVjMmZkMGYyYzhhZjMzZjNiMTQwYmFjMTJiZjYwZmRiMzNlMGVjNTU3OTU1YiI6ImNmZjI5MWQyMzY0ZmMwNmEzYTg5ZTg2N2IwZTY3ZTU2IjoiIjoxMjg6IjgxZjFlYjU2OGQwYWYyOTY4MDUxOGRmNzM3OGJhM2U4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRmYmYxYzc4NWMwODdhZDA2YjQzZDQxNjNjZjliOTM5NmRlZmZkMzcxMjg1NjM3OSI6Ijk2YTY5MGU1MzE5Yzk0ZDk0OTIzOTg4MDI1MzA3ZTU0M2YxNmZkOTcwYWVjMjQ1MjRjZjk4MDhkYzYyYjA5MzM1OTI4NzI1MTUwM2Y0MjMxYmY1MmNkMWExNmE4MGJmYTgyZDhmNTg1ZDk2ODU1ZGMxOTMyZjQ5MTlhOTJkYTI2MThkNjQ0OGZjMThhMjM0ZjlhY2IzODZhYjRhYjRhOWUzOGVhMzQxZTdjNTRmYWNlZmYzOGMxNjJkNzRlN2ZhYmJjYTEzYWFkYjcxZTljOGFlNjA3MmU3YmVmNDA3M2NmMDhhYTdmYWFhNmQ2MzlmOThkMTViYWQ0ZWQxODNjZWQiOiIxYzhmNDE0MjRhY2FmMDA5OTk2Y2VhYTgxNWIyNGFkNCI6IiI6MTI4OiI5ZjNjMDM0OWM1YTRhNzQwYTgyZDZkNjNiZjAwZmIxNyI6IjYxMDBiMDkxZTUyMzY2ZmI0MjIyNTFkOWI2ODk3NGI2YzY2NmE2MmE4YmI3N2ExZmZkN2M3ZDFhZTU4NmE2ZWU3NjNiODRkYzExYWFjZTAyYTI1YWY5MWQxOTRiNzBiMzI2NWVjNDY4NzJmZGVkNTQyNzViN2RkYjI2ZWUxZjIwYzg1NzMyOGY0NmE2OTRmYjFkY2U2OGJjYWVjYmQ1ODdlY2U1YjUwNWQ2NThkNTdkNTAzMzNlMzBiNjM5ZWVhMWY2NTM3YjM3YzE3NWY2MjQ5N2M2Yzg0ZTNjZmRkYWUyMTQyODVkMmQ2OGQ5MGRkNWNkOGNlMjI3M2QyNWM4Y2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZTBjZTRmYjRmZTRiYjJmZGY5N2IyMzA4NGZmNTY3MWI5Yjg5OTYyNDE4NGFjZWYiOiJkZjg5OTc0YjE1MzRmMGJhMjYyYmJlYTVlZmUzOWQ4YjcyODIwY2M4YTcyMGNjOTk1MjBmZWRiZjY2NzUxNWMzZjZkOGMzZTI1YzcyYzQ4YzFjZmYwNDIxNzFkZjU4NDIxNzQxYWFjYjJhNDlmMjMxNjcyNTdiZTdkNzAwNGQ1NmIxNDkwMWIyMDc1ZWFjYTg1OTQ2ZTlmYmYxYmJmNGFlOTgyMjdlZmM2MmJmMjU1YTI1ZGQwNDAyZDM3YzY3YmE1NTM1MzFjNjk5ZGQ4OWZmNzk3ZTdhNWI1YjlhOWFhNTFlNzNjYTJkYWNmZGEwZjgxNDE1MmFhOGVkOGM3OWY5IjoiYTk1MGFiMGRkODQxMTVlMzgyOWFiMGFkM2JiYjExOTMiOiIiOjEyODoiMjVjZmRlNzNlN2EyOTExNTgyOGRmZTE2MTdmOGI1M2UiOiI4NDdiNTRlMTc2Y2NjODMwODFjYjk2NmVmYzRiNGEzYmY3ODA5Y2UwYjQ4ODUwMDlmNjIwZjYxZmFmY2FhNzhmZWVlOTFhODM1YWU2YzFhOTQyNTcxODExMTA4YjFlODFiNGM0ZGRhYzQ2YWFmZjU5OWMxNDk4OGM5YTFmYjlmMzg3YWI3ZjEzNTdiNTgxNTY4YjdiMzRlMTY3YWMyYzhjMmIyYjhhNGRmM2ZkN2FkODk0N2EzNjNjMWMwY2I3ODJlYzU0YjE5MDFlOTI4ODIxY2YzMTk2NjlkZDc3ZWIzN2IxNWM2N2YxM2FkNzg3ZmY3NDMxMjgxMjczMWNhM2U2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmJlM2M2NmIyMGU1ZTY2YWJhYmJmYmExYjM4ZTVhNzE2ZWFmY2UyM2ExNzY3YjY5IjoiZGUxY2Q5NzgzNTRhNDk5NDE1MTc2ZjI2MDAyMWFiZTBhOGM1YmMzNGQxNjZmNTNkMjBlMDJlNDEzZTEzNzdjZTRlZjVkN2Y1ODMzN2M2MjI1MWEzYjRkZGVhMGRlYTIzYzQwZTVkZTAzN2ZkNWRkOGE1NThlYjUzYmZmYTRlOGNlOTQ4OTlhZmE4Mjg0YWZhYjUwM2MxYTQ4NTk5OWExNTRkMjM3NzdmOWQ4YTAzMWI3YWQ1YzZkMjNkNmFiYmUzYjc3NWM3Nzg3NmFkNTBmNmJlZDE0YWMwYjJiODhmYjE5YzQzOGU0YjdlYjAzZjdkNGQzZmNjYTkwZGQwMTI2MCI6IjNhMmFjZjY5YmJhMTlmNWQxZDE5NDdhZjJjZmRhNzgxIjoiIjoxMjA6ImY4MjZkMjEyZjdjMTIxMmZiOGE4YmYyMzk5NjgyNiI6ImZkMWY3YjU2ZTU2NjRjZjRjOTFlNThmN2M1MGY2YzVlOThlNDJjYTJlNGFkY2MwMDM0OGNlZTZmNjYyYjM4MmFkNDAyMmRhNTRhNDdkOGZhZWI5Yjc2YTI0ZGZjNGY0OTNjMjdmYzBiYzQyMWE0NjQ4ZmFkN2IxNGIwZGY5NWQ4NzUyMDEzZmViMDMzYjFmZDk3MWRhYTJjOWE1ZGY4OThiZWNlNmEzYjhmYTA3OGRkMTMwMDcxZGYyMGE2OGNkMGYzOTRiZTI1ZGNiYjNlODViZGZhMGRmNDc5N2ZhNmYwMWY1ZjBkYTdhNmU4NjMyMDIwN2RkYjViM2JlNTNhZTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMTZhYmI5ZjViMzhkN2Y1YWJiYTlkYzM2OTk1Y2U2Y2U5MjhlZDgyMmEwN2I3YzQiOiJlNzJmMjliMWZjMWRiZmMyZDkzYTBmM2I3OWVhNGI5ODA2Y2U5YjJjNGQ0OTBhYzVjMGMzYzc5M2RmOWRjN2RmNTQ3MWU4MzRiODRkMThhZmE1YTc1MTZmOWE2YTgxM2E5YjY1YWUyZjA4M2E4NTQ3MzA1NDdlMjhhMWY2MGZlOTdkOGRiYTFkMmQ0MzNlMTE4NDdiOWJmZmQ4ODczZWM2MzRlNjQzNjU1MzBjOTA1ZGQ2ZjI3NGU0NWM5Nzk1YWMxMjdhNmYzNTZmNjNjYzZjMTE2YzVkZDhjNjI4ZTdlMTdlMWZhZGM1OGY4NDUyYmYyMWY1M2M0MTMzMTk4MTE4IjoiM2NkOTU0MjljNmRlMWQzMjdiOWViM2M0NTQyNGE4N2MiOiIiOjEyMDoiMTM1MjEyMzZmMTkwZjc4ZTc1YzA4OTdjNWZiMjM3IjoiY2Q4YmI5N2MyOGRmMDkyYjY3ODNlZjY1M2ZkMjZmMmJkYzI3YzQ0MmJhYjBhNGM3YmVlMjc4OWYzODlkY2QxYjI4MGMwMjMxNjcyNzIxYmZiYmM5MzlhMDQ0OTU1NzY3OGVjNjFiYTBhZmIyZTU4MTdlNmY3ZDk0Mzg3Zjg0ZWNhZmJmYTEyMTZkNjVlN2Y1MDI1ZjQ3YjBkMjkwNWNmZjdjOTlhZGY4MzA2YTNkOTg1MGM1OTA4YmUwNWY4N2NiMWQzNmE0ODM3ZGJhNDI4YWFjOTdkN2ZiYzE4ZTM3NzhmOGQ4MWEzMTkyNTk1MDRjODdmYzk0YmQwNzY2ZWQ5MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBiYzM0NGIxYTQwNzg4MDdlNWY1M2E2ZTdlMWUzNmZhODMxMDg0NzNhZTJmYjRjMiI6IjhiZDczZjk0YzcxZTM3NjViYzdkMTdmZGM5MGE5YmE2YWZmOTY0OGI0NjMwMGU0MDQ4OTg1ZmJiZDdjNjBjMzljMzc2NmY3YzUyNDc4MGJmYzIyOTZkYzExZTExMzIxMzQ5MjE3NjBhMzczMTA0ZWRjMzc2ZWFiNmU5MWU5YTYwYTVjNGE1OTcyOTM1ZGYxMmVhZGFlMDc0NzIyYmRjMDE0N2MzY2FmNmE2MmZkNDQ5ZWYzN2Q3NmI2NWY2ZDIxMDI4M2M5NGFjNTI0Y2YxMzE4NmU0NDRkODBhNzBiMDFlNDM3M2NjMDQ2MjU0NmYxY2FlZTZiNDllNzM4YTc0MmMiOiJiZDUwNWZjYmE0NjRlNmUyYzU4ZmRmMjlmNTY5NWZiOSI6IiI6MTIwOiI4NTEwZmZmNzFiYjg3OWY1NmVhMmZlNDNmNmZmNTAiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzgwOTczOThmYzIxZjkzZWVhNmE5NWFhOTNhMzIzMTA5NjgxN2I2NTUyMGJjNTQ5IjoiODBiMGFiYmFlYmJkNTM3YTA4MTBlZDc1Y2QxNzJkMjlkNTBmNTk4MmU0ZDAxZjg2NjRkZGIyZGZkYThmNTdmYTBlZDg3ZTY0YTc3OWExZDdmNWU1NjhiNmFjZmRjNzM5NTcyYTcxNzY3NTIzMDdiNDMwZmIxZmExYzNjMmMzNDY0NzdjZWJlN2QwMWIxNjc0NWNhNmM4OTI5YTdmNDQ2YzAzYWQ5YTllOGE1YTkzNWRlNzhjYTZjNzAxZThjMWM1ZTZkMjU1MGM0Mjk0OWNmNTM0MmZiNWVmNGM2YWI5YmIwMmFjZTgzODhiMTZlZGY3MmExMjM3ZTVkMWQwZTgyMCI6Ijc3NjI0ODM4MTk0MWUxNjkwOGY1MmQxOTIwNzg4MWY1IjoiIjoxMTI6IjdmYzQzODhiMmY4ZWFiMGYwYzJkNmEwODUyN2UiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzZkNGJiNTY5NGZhYWYzNDRkYjgzYmM2ZDZjNDdkNTZiYjZhYjUyNzAwODI2ZjJkIjoiOWUzMWZkYTZhMTcxZjBkNGE1ZjJhZjJjNGY4MjdiMTMxMmQ5ZGRhNWQ3OGZhMzI5YjhmMWI2MzczYjliMjliZTM1ODYwMWU1YmIwZDBjNjE1YWVmNGI5ZTQ0MWM4MTEyMTlmMWYyZmYyZDBhYjIzZTBjZDgyOWE4OGI1YjYxNWVlNzJlNWUzZWE2MDRmYTI2Y2M2NDM4ZWM0YzMwZTkwZjczNDhlOTExNmFkZjhlOGVmYjc0OTgzMjBkMmRhMTY2NzlmYTU0NmIxYWE5YWZjNzcyMGIwNzRjNGU0OGUwNjg2MmQ0MTQyOGM5ZTcxYTQ3NzJjMmUxOTVhNmYzNjk3OCI6IjYwMzk3Nzg0NWQ4MmZhY2NiNDAxODE3ZWNjZTZlMmZlIjoiIjoxMTI6ImM5NTVhM2JjMzE2ODQxYmUwN2U0MDZkMjg5YzgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTNlNTAyMDY5NTU4Nzk4NDA3NGQ3OGQ5Yzk4YjhlMWE1NzE5ZTVmODgzNzI3NDBlIjoiYzBiZmUzYjJkYzRkYWQxN2VjNWE3NjYyZDg2ODQ3ZmI2N2U1ODJjYzBiYWY0NjliYzliYWE3YTA3NWQ0OGE4Yjk3NTIxYTEwNzJjMjc5OGJmYmRhZTVjYTM3NTJlZGExY2I5NmZlNWNmMjRhZjk4OWViNzdhMjk0OGFhZTNkOGI3MGQ4M2Q5M2Y4NGM0OTM0N2Y3ODg0ODBmMzQwNTE2MjFjMzU4YzAzY2Y4MTU5YTcwZmM3MmNiOGJjMDI4NzYyMzRmZmU3NmIxODFkYThiMjJiODc5NmM4N2IwOTA0ZGExYWY0NmRlNTE5YzIwZDhkMWIxZGM3Y2MyNGUzOWJhNSI6IjRjZDU2ZGU1NGU1MTQwYTU4N2JlN2RmZDAyZDNhMzllIjoiIjoxMTI6IjFhMjk1MjdhNDEzMzAyNTlmOTE4ZDk5ZDc1MDkiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWZlOTg2ZWFkNzk5NzI3MDYzOTU4ZTJjZTEzY2E4NDZmNzZjNTE2MDU0MzlmODM5IjoiN2MxYjM1NGE1YmIyMTRiZDk1MTQ3ZTMyZDgxZTY1ODcwNTA4OWMzODAzNWQwZWE0MjNlYjFhNWM4MmY5NzQ0M2M2OTAzZDJjZjFiYTdhMDA3ZWVjN2M4ZmY5OGI4ZjgyYjA3M2Q5NjM2YTc5YmQ0N2M3ZjJmNjM5YThlYjRlOTIwNzZmOWVkNjE1NzY2ZjQzYWMzYTRmMTY4NzMwMWVkN2Q1MDc3NjY2MDVlMGUzMzI4ODBhZTc0MGFiNzJlODYxYTJjYjZkY2UxZGYxZmY4YmUxODczZDI1ODQ1ZWU3YzY2NWU3MTJjNWJiZTAyOWExNzg4NjM0YmNlMTIyODM2YyI6ImY4NWE5NWVkMTBiNjk2MjMxNjJhYjY4ZDEwOThkZTk0IjoiIjoxMDQ6IjNjZjFjZGI0YTRmZGM0OGRhNzhhOGI0ZTgxIjoiYTdmMjUyYWQ3OTgzZTcwODMyNjA1OTgwNTFiZmZkODNmNDBmNGQ0YThiNTgwY2MyMzg4ZDcyMGEwOTc5ZGRlNzE1NDlkZGNiODZiMGE2MmM0OTY0ZmNhNTkxZDA5ODJmM2EyMDNmMmY4ODg0ZmY0OTkxZjE3ZTIwZjc1OWVhNzEyNWJhMmJiNGQ5OTM3MjJmMjM5Mzg5OTRlYjI3MDljODUwZjMzZWQ5ODg5ZTVhMzk2NmY5ZDdiNzZhZGQ0NmFlZGYyMzBlOGY0MTc0MjVmOWRiNzljY2Q0NmI1NjYwMzYxZGU3YzVkODdmNzFhOWQ4MmM0OTFjMGMzZGFhZjU2YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjZmFhMjE1ODQxODI2YTk3N2FlNmFkZmRkOTkzMzQ2MjEwYzQ5ZGQwNGQ1ZDQ5MyI6ImU4ZWIzYjZlZGQwY2E0MjAxYjQ5YTZhODMwMzY0NDVhYmExYTFkYjA0MGYzZTc0NTExMzYzYmNlNzY5NzYwYTk5MTRlMDVhMDY3ZjU1NWNhMTVhNTdjNmUwMmU2NmZiZTRlMDRkZDhjOGRiOGQ2ZDE0ZWJjMDFjYzdkODRhMjBmZjBhYWNiNjliYjM2NzlkNmI3ZDlkMmUwN2RlZGE3YzJkNGZlNGM1ODRmZTExNjZlNzhkMjFkYzU2YjljZGFkOTM3MDljMDNiOTE0NWI4ODdmODdiNGY2MDVmMjRmOTg5ZDVlMDUzNGZjNzFhNThlOGE4NjE5ZWU5OWY2OWU1ZjUiOiI1MzdhNGVlMzA3YWYzMDcyZTc0NTU3MGFhYWFkY2UzNCI6IiI6MTA0OiJkZjAxY2ZmYmQzOTc4ODUwZTA3MzI4ZTZiOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMjhkZGM4M2QyMTcwYzQwM2E1MTc2MTUwNTZkY2VlYzBkMTlkNmZkNzYzMmU3MzgiOiJjZmU5Zjc3OTdlZTM3YmZjNGY1NjQ0MTliZjIyNjhjOTY0NDc5ZWZhNzQzNTk3MDg3NDE1NDQzMjkzMGYzYjI3MzY0MzhkYTRkYzljNzYyMDAwMDk2NTEzNDBlMjMwNDRiYzlkMjAwYTMyYWNmZDRkZjJlMWI5OGIwYmFlM2U5ZmY5ZDZlODE4MWQ5MjZkMmQwM2Y4OTc2OGVkYzM1Yjk2M2QzNDE5MzFhYzU3ZDI3MzliMjcwY2UyNTRmMDQyYjY0Y2VhYzRiNzUyMjNiMjMzNjAyYzlhNGJkYzkyNTk2N2IwNTE0NDBjMjg4MDVkODE2YWJlNzZmYzlkNTkzZjVhIjoiNTEyNGI0MTBjNDNkODc1ZWNhNmNlMjk4YzQ1OTk0YTciOiIiOjEwNDoiNTZhZDljMTY1M2YxMWE0MWZkNjQ5Y2NjZDgiOiJjZjkxZjA4N2ZkN2ZhZjM2MmNhYWNmNGE2OGNmZjUxZWM1N2IzMDc1NTYzZTRhZDA5NTVkZjIwYjM2NmU5MmJkNzVjMzc2MmNmNGE2ZjBlYjg1OTg3MjY2N2E1YzU1YWE1ZDk0ZjVhYzk0NzliMWI5YzkzNDViNTBmODIzNzlkNTUxNTA2YTJhYjAyYjA0NDFiMTRiMjhiNzhhMTJiMzg1MDBkNzAzYThjMTk4ODhmZTYxMmQ0NzEwZWVjN2NkMThjMTZkNmE0YjU1ZDNjNjk3NjBlMmJlZDk5ZWZjOGI1NTFkYmUyYWM5YjliNjQ3MTVmODcxODBiOGUxNGQxNzk1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ODU4MWMyODk4M2M0ZGEzMjFjZTBjNDE5Y2MwZDQ3NmQ1MzllNzdkYTUxM2M4OTQiOiJiZGVmNWI2NWI1MTExYjI5ZTc4MWE2YjcxYTAxNjAxNzljNTJiNWJjY2IxYWM1YzAzNzdiMjZjZjNmNjE0MzJmM2NjZDY3NjMzYTgzNjM1N2MyNGI1MDk5ZGIwNTEwYTdmODExMGY1OWU4MjI3Y2FjZDExZjE3ZWExNzk4YjVkNGQ2ODkwMmNhNmM2ZWNjZDMxOWZlZjE0NTQ1ZWRkMTM1MDc4YjM4ZDQzYjYxYzlhZjI2OWZjNzJmN2EyMDliYTc4OTdlNGM2ZGJkMjFiYjcxZDdlOTNkMmQyNDI2ZmZhMTU1N2NhZTI4ZTc0MDU5ZDNiYWYwNmJhNDE5YTQ3YjM5IjoiZmYxMDIzNDUyNDQzM2I4NzEyMDJjMmNjYTZhY2IxOTQiOiIiOjk2OiI5ODQ5NDMzNTVhN2FlZjE1YzRmYjgwMzMiOiI4MDhlMjhiZmQ0NDFjYjg4OTA0MTZhNzU3ZDI1MmM5ODZkYWE4ZDYwN2FjOWNhZGQyZjRmZDI5ZWRkYmNmM2I4NTliYTI5OGUxNGE0Y2NlZmUyYzI3NTJiMTIzZjg3Yjk4ZDY3MDhmZGU0OGZhY2E0YmM3ZGQ4MThhN2VhNzZjZmE0MzU3OTMyZTU5Y2I2YmUwZTkyODNiZGZiNDk0NTRiODZiOWZkMDRhYThjZGVmNTAzYzY1ZDEzZmNmZjQyZTljZDhmMTQyZjhjMDZjZjdkYWE2ZDhlZjhiOWM5ZDY5YzM5ZThhZmQ5ODAwNDhmZWNmNzMxZmQ2NzRiMmE4MTRiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNjdiOGI2ZGY4MDE0YzhmM2RlOTEyYjc3ZjVhMGMxMTM1ODBhYTQyZDc4NTI5OGYiOiI0Zjc4N2RlMTJiYTkwN2E1ODllZGY3NGM4ZTdhNmNkYWFhYmViZGRkNDY1YTg2ZTE3MGUxZWZjMjg5MjQwMjk4YjUxNmZkZGM0M2M3ZmQ5YmIxYzUxNzIwYTQ0NTVkYjRkZDYzMGI1OWFlYmFhODJiZDU3OGViM2NiMTlmOGIyM2VlNjg5N2MxZmVmYWVmODIwNDMwZWZhNmViN2Q2ZmYwNGRlNGQ4YjA3OTYwNWZiNTIwYjBkMzNlOTZjMjhmMGNkNzE5ODNjNGNlNzZjMGVhNjJmZDcyMDlkMjFlYzdiNDE2ODgxZDU0NTgyNGE3M2QxZjlmOGQzMzIzZmRiOTBjIjoiNDlkYTkxZTkyNjA5MWE0NDhkNTdkNTIxY2M5MGYzYzAiOiIiOjk2OiI5OTE5OGY1NWY5ZmE3NjM2NTFiYmE1OGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MWY1Zjg1MDVmYmE2MmYwOGZhMDU1N2RkNTQwN2ZjODNhODUyYzYwMDdjY2VjYzgiOiIzZTE5ZWMwMjM2NWU0NTBlOTQ2MTIzYTMzNjJmOTg1OTM1MmViNTI5MDJhNmJjYjhhNzgyMjg1ZGZhYzlkMmIyODJmNTYzMDJiNjBkNmU5ZjUzZmRkZDE2YmJmMDQ5NzZjZjRlYjg0ZWYzYjY1ODNlOWRjMmY4MDUyNzZhN2I3MzQwZGVjN2FiZGU0OTE2ZmI5NGIwZWQ5YzlhZjZkNDkxN2IyN2U0NGQyNWYzOTUyZDA0NDRjZDMyYTRhNTc0ZTE2NWEyM2ZhOGM5MzIyOWNlYjQ4MzQ1MTcxYTRmMjBkNjEwYjViZTdkOWU0MGRjZjcyMDkxMjhmMDI5ZmVkNmJmIjoiYjVlZmI5ZmVhZTNkZTQxYjVjZTlhYTc1NTgzYjhkMjEiOiIiOjk2OiI5NjA0ZDAzMWZhNDNkY2QwODUzZTY0MWMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0Y2RiMzhmODE4NWE0MTg2ZmM5ODNlNThhNzc2YTY0NTRiOTJlY2YwYmZmZWZlOTgiOiIxY2E3MmM1MGEwOTMwNzZlOWE5ZGZhMDk4ODhiOWM4OWViMzZhOTQyMDcyZmM1MzZhODE3MTNmMDVhMjY2OWIzOWZkYjI4NzFiODJjYTQ3ZGNhZjE4MzkzY2E4MWRjYjQ5OWFhZmNjNGVkNTdlYTc5ZjhkNGY5YmQ2MzU0MDYxMDIxNWIyYzY1NDgxYjI5NDYzOGNlYzQxMjY0YTdmZGNhNDIzMGRmNWZlMWU3ZTNkOGQyNmRjZDBjNDM1ZmVjOGU5YmY3NzhmOWU2ZjEzNDgyMTU3YTk3MjI3NjE2MDFlMDg0MjVmNjE2MGQzYmI2MjZhZTM5ZWUxMTE3YjAzNTNjIjoiYWVmMjU3ZGQ0NGQxNGQwYmM3NWY5MzExZWYyNGU4NWEiOiIiOjY0OiJkOTUxYmVjYjBkNTVmOWZiIjoiMmVhYTdlOTIyZGJkODk2M2UyMDc4YWFlMjE2NjM2Mjc2ZjNmN2NiNWQ3ZjM1ZmE3NTllOTFiZGRiNmUyNDdhOTNjMzg4MjQxYmExZDBkMzcwNDBjMGI5ZTQ0N2M2N2QzNWI0OTkxYzFhY2NlOTc5MTRmM2JjMjJlZTUwMTcxYmM1OTIyMjk5OTgzZWU3MGFmNzkzMDMyNjViYzFhZTFlNzMzNDIwMjQ2MDYxOGI0YTg4OTFkMWE3ZWFhYWM1Y2FjMWU0ZGNlMDI0Y2U2NjJkMTQ4NDk5OTNmODllNzcxZmI4NzM2NDRiNTUyMTIwZmQzNDYyNTBkZjM5YWFhYTQwMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWU4ZDNhY2VkM2FhM2NiMjE2NmFhNjZjNGEyNTJjMTJkYzA5Nzg4MzBkMGJjNzViIjoiZWU2OWIyNDIxZDQzYTlmMzgzZDk5Zjk4MDJiYTRkNmNmMWM1MzdiNDIwNDFjODZjY2U2ODEwNDliYjQ3NWU1MDk4ZDQxODFmMTkwMmIwYTQ5YzIwMmJmMzRlZjcwZWE3Yjc4N2ZhNjg1YWI4ZjgyNGZjYzI3MjgyMTQ2ZDgxNTg5MjViZmVmNDdjY2JhODlhYTgxYzA1NjVlYWNiMDg3YjQ2Yjg3MDZjOWY4ODZiN2VkZjg2MzcwMTAwMzA1MWQ2ZmI1N2U0NWU2MWQzMzQxMjU5MWVjODE4ZDAxNmVlYzdkZWU0MjU0NjM2NjE1YTQzZGFjYjRmMWU2ZWMzNTcwMiI6ImMxNWM5YzBiMGI3MGM3MzIxZGYwNDRiZmRlMmIxNWZiIjoiIjo2NDoiYzVjOTg1MWE2YmY2ODZkMCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRhODUzOGQ2MDk0NDRlMzE5N2FiNzQwY2QzM2I2NmRiMWNmNTM2MDAwOTZiOTRlMCI6IjhjMmI4ZmI3NzVkMWIyMWM0MWEzZGNmNDhhZDZkNjhhYjA1YmUzODc5ZjliOTRiMzA1YTZjZTRkNzk5ZTNhOTkyYzFjM2E2NWEzZTRlYWI1NjNlZGI1NzQyNDkyN2M5MGM3NmU0OTM4NmUyOWRkNWU3ZGUyODAwZmNjMGVlZmJjOGI0Zjk3N2Y3MWJlMzc1NGMwMDZlZTkzZGMwOWIxY2ZhNTljNDI0YjZiMzk4N2FlYjU2ZmVlZmMyMTAwNGM2M2U4Mjg0YjY4NDVlMzk1YmM4ODQzY2NhMDkxNzI2N2ZiNGE4ZjJkYjFmN2RhYWZlN2E5ZGE5NTA4M2E0NGRlNzAiOiIwYmQ2NGQyMjI1MzJkYWU4YWI2M2RjMjk5MzU1YmYyYSI6IiI6NjQ6IjM0NzdjYWQxZmQ0MDk4YjIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NDdmMGYwNjU3NzFiNjEyOTk1MmU1MjIwNmE2NGZlMDg0NDY1OGVkNjg1ZTM5Y2QiOiJmZWE1ZDIyNzg2OWU1Mjc4ODJjNjNhNjhhNjYyM2Y0YTY5OWRmODJiM2RjNzE1YzcyNjBhNTU1NDMzNmRmODM3Njc0NGMwNWFlODllYzI3ZDQwZGEwMmQ5ZjFjNWU5ZTI5NDA1NTc5ZmQ0MTMyMTQzY2IyMWNkYmUzZWRmYWFhYjYyMTI4ZWNjMjgwMTg3MjVjOGRkMzA5ZDIzNzYyMjNkMmUyZWRmZWE5NzY1Njk5YjI2MzBmZjVkOWZlOWJlYzQxNmMwY2E2NDE4YjkzOGQxOTVkMzFhMDhlNDAzNGM0OWQ3OWUzYTI0OWVkZDY1Zjk4NTIzMGIzM2M0NDRkZDAyIjoiMzdlM2EzMDA1NDJkOWNhZjM5NzVjNjQyOWNiOGEyZTgiOiIiOjMyOiIwNmJmY2EyOSI6ImUxYmRkMWMyMTJiMTU5Yjg3ZTQxYTVmNjRkY2JhNmIyN2FhMGY1Yzg4NzFmYWJmYjU4OGRmMGUwNmJkNzczMGVjMWJlYjBlMzM4OGY5NmM5OTJhNTczZmY2OWIzNDg3MGY4M2M1M2ZiNjViNDIwYzFjNmY5MmUyYWE2ZjAzOTE3ZTgyMDNkNzdjN2Y1ZWUwOGJhZjlmYWIxMmY5ZDM4ZmMwZmZiODM4MDdiYTc4MWMzZGQ3YjYyZWRjYTIxMjFmNjhlZjIzMGI0MmI4YWRiZDRjZWEwNzIyMDlkMDI3MTM3ODllZDU1OWI4MzczOWE1NGNmZGU2OWU2OGJkYzQxMjgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY0NjVlOTVmNmZjMTlmZTY5NjhiOTgzMTliNTQ3MTA0ZDBjMDFjMTcxMDVmOGZjMCI6IjI0MjZmMTA4MzY4YTAwZDJhNDk2NzBhM2I2NGI0ZjA1NjljNmRhOTY2MDE2M2U3YjIwOWVjM2Y4ZDA1OGVlMTFmNzgxOGE4YzUwMzBjNWY0Y2U2ZTFlNWE5M2ZhYTNlNWFlM2QwYmQ1ZDcxMmZiYzg5MWNmZWIyMDg0NTcwN2VkY2Y1ZTI5NzE5YTUyNDZhM2IwMjRmYjEyZDM3YmQxYjgxZGYzODEyZmQ1MGIxZGZiM2U5NDhjZTU0NmRkMTY1Y2M3N2Y5MDNjMDdmZTMyYmM3ZGE3ZmJjMjUwMzY2NzkwMTczMTdjZTk0Y2Q4YTAwYzFiY2U3Mzc5Nzc0ZjE3MTQiOiI2Y2JhNGVmYzhkNDg0MGFhMDQ0YTkyZDAzZDZiNGQ2OSI6IiI6MzI6IjkyNzUwYWM5IjoiMmU1OWIxMDRjMWE2ZjZkNjUxMDAwMzk2YWRiZmEwMDliZjRjZjhjYmY3MTRkYThlNGQzYjRhNjJiZDdmNTIyZDYxNGRlY2YwOTBjNzU1MmE0YjllOGQ3ZWU0NTdiYTY0MmQ1MTAwYzBjODFjMTRjYmJhOGM4ZmY0OWIxMjgyN2Y2ZWJkNDE1MDRjY2I2ZGZjOTdjZGY4NTMyZDFmN2Y3ZTYwM2M2MDllZmE3MmQyYWUwZGNlMDM2ZWM0YWIzNjg0OWEwYzA2Zjg3MzdkOTcxMDA3NWExZGFhZWQzODY3Y2EwYTdlMjIxMTFjMGU3YWZhZTkxZjU1M2I2ZmQ2NmM2ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjA4ZTNlOWY3YjNhMjBjY2RjNGQ5OGI1NmYyYjU2NzM5OWEyOGE2YjM5MDhkZWFiIjoiYTk4NmU4MTZmMWVhZmI1MzJjNzE2YTU1NWNjYTE4MzlhMWIwNTIzNDEwMTM0ZWEwNDI2YWIzMDk1MjBiMzM5ZmMxZmRlYjQwNDc4YWU3NjgyM2NlZTRlMDNiOGQzNDUwZTZiZTkyZDVmZjE3YjJmNzg0MDBmMDE3NmU2ZDZhMzkzMGJkMDc2YTdhM2M4N2MzMzk3ZGNjMDUyMGM2YjdiNGZmOTA1OWVhMjFlNzFjOTE5MTJhNzRhYWMyY2E3MGVlYzQyMmI1MDdjYzVjNjA4NjBiYjhiYWNhMDFlZWMyYTMwMDM5NzBiYTg0MDExZWZlNTc2ODA0YjI4MjBlMzA2YyI6IjRmNDYzNmQxYjI4M2JmYTcyYzgyODA5ZWI0ZjEyNTE5IjoiIjozMjoiMTZjODBhNjIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODdiNTM3MjU3MWZiMjQ0NjQ4MDUzYzk5NDA1OTk5MTMwZjg3YTdjMTc4MDUyMjk3IjoiYWUwNzhkMTU1NGZjNmExNDQ0N2EyOGMzZGQ3NTNlNzkwZjdlZjliNTNlMzVjM2UwZmU2M2E3YjFiMzI2YmM1NjAzNDg0N2Y4YTMxYzJkNjM1ODA0OWFhZTk5MGJmZTc1NzViNDM5ZGIzNzBhYTUxNWUyMjVlMGVjNzMwNDg4YzcwMGE3YjBhOTZhN2I4ZTRlOGU0YzZhZmVjMjBkZWNkMTZmZTNjMGYzZjhkN2E2Y2Y3YTg3MTFkMTcwODI5ZDE0YzcwNmNjZWIwMGUxMzNiOGM2NWM4ZTA4Y2Q5ODRiODg0NjYyZWRkZDIyNThjZTYyOWFiZjZiOWRkMjg2ODhjOSI6ImExY2M4MWI4N2JkMzZhZmZlM2FmNTA1NDZlMzYxYzllIjoiNjg0Y2UyM2Y1OTYzMjMwOGQ3ZGIxNGY3ZjZlZGRhZjRkODMyNzFmYjBjMjc0MDFiMDk1MThhNzc1YjM2MjUyNTQwZjE0MzA1ZjBkYWUxM2ZmNmMwZGM1NjVjOWU1NzA3NTllMDcwYzhhYzczZGZiOTdhYmQzMjg1Njg5YTdjZGNmYzk0MWY2MjcxYmUzYjQxODc0MGI0MmJhNGExMTQ0MjEwNjVhNzg1YmUzZGZhOTQ0Yzg2YWY1NmRhODIwOTc3OWU4NzM2ZTYyNTI5YzQxOGI1MDdjNmQ4YWUwMDJjYmMwNDMxNzQ3NzIyYWZkNjQ1MjE3MzRmOTkyNzNkZTQ1NSI6MTI4OiI5ODE3N2IzNDI4ZTY0YmM5ODYzMTM3NTkwNWMwMTAwZiI6IjhiZTdkZjMzYTg2YjExNjI0NjRhZjczOGRlNTgyYTM1N2QwY2U4ZTIxM2JiYTFiNzkxM2MwZDEzYWQ3NTlkNjJjM2JmNDM2NmY1MTMwYjNhZjJiMjU1YjdhZDUzMGI0OTc3NjI3ZjllNzZiMDdlMzYwYzA3OWQwZjc2M2RhYmJkMjJlOTc2Yjk4Y2Q1NDk1YzYxODJmOTViYzk2M2FhZDRiNzE5NDQ2ZjQ5ZDNhNDQ4ZDExY2FjNWJmY2JhNGI2NzViOGU0ZDg4YTM4OWUyNTgwZThmMzgzZjk1YmY4NWM3MmU2OTg2ODBkMmEyYmM5OTNjOWVlMWNlMGQxZjFhYzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMmQwNjliODI2NDU1ZDVlNzllNjVkYjRmMWQyYjZhMjlhZTlmNDAxYmM2MjM5MTciOiJhY2Q2MjI1ZGM1YjkxMDlkNTZlYTU2NWFiMzhkZDRkYjQzMmE3ZWMwOGYwZGIwNGYxYzZiNjkxYzk2ZDJlYWFhNmJlNjJkYTdjYzdmZDc1ZjkzMTcxNmM3ZjM5NzA1ZWE3Y2Y4MjhmMWE1YTMyNTk1NWU5YjJjNzdlN2ZiMmQ1NjJiZTZhODliMzM1MWIxYjNkMTM1NWI0M2I3M2VkNDI1MDQ5NDMwMzE0YzE2YmYwODM2ZWQ1ODBlOTM5MGEzYjhlMmE2NTJmZGRiZmE5MzljYTRjM2M5OTc2NWIwOWRiN2YzMGJmMmVmODhlMWFhMDMwZTY4OTU4NzIyY2IwZGEzIjoiNmQ0MGEwYzc4MTNiYzA0MTBmZjczZjE5YmI1ZDg5YzkiOiI5OTYwMzc2YjE4OTg2MThkOThjMzI3YzE3NjE5NTlkMDQ1NDg4Y2M2MTk4MjM4YmJlNzI2NjJmMjc2ZDQ3YjQxZThhZWJjMDZkYmNlNjNkYTVhZGNiMzAyYTYxYWRlMTQwYzcyYjljZjlmNmRmYWQ2ZWNlZGQ3NDAxYzk1MDlmYWUzNDlkM2M3ZGViZTM1MTE3Nzc2MjI3YmExNjdmMmI3NTkyMWQ3MzIxZDc5ZjRlYmNhMTNkMjBhZjE2MzhhMTU2NzA0MzM2NWYxNzlmNDE2Mjc5NWZlNGZkODBiNWQ4MzJlNGNhNzBlN2JmOTgzMGJjMjcyYjgyMTgyZjcwZDJlIjoxMjg6IjAxMDE5NTA5MWQ0ZTE2ODQwMjllNTg0MzkwMzlkOTFlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYzMjUyMzUxZmU4ZTdjNjI4YzQxOGMxYTQ5NzA5YmYxZjhlMjBhZGQ4MjUzOTk0OCI6IjdlOGQyODE2ZDI4MGM5MWQyMzJiYWQ0M2I2NjEwZTJkMDUzMmE5ZjY3MGYyMjFhM2E5NzVmYjE2NDcyYzJlODNiMTY4MTE1ZTg3YTQ4N2JjZDE0YjM3ZjA3NWUxZmFhNTljNDI1MTVjMzUzY2RlZmM3MjhhYzYxN2I3ZDI3M2ZhOTY3NzhlM2ZiNWY3YTExMzJmOGUyYWRkNGE1NzAxNWIxNWQxOTg0MzM4Yjc4NjIzNTYyNDNkMWM1YWE2Mjg0MDZmNGE1MDc0OThlZGExMmQyZjY1MmM1NWU4ZTU4MTEzZWQ4Mjg3ODNiODI1MDU3OTA2NTRmMDM2YjYxMGY4OWEiOiJlYWNkMmIxYzNjZjAxYmY0ZWE3NTgyZDhlZTI2NzVkNSI6IjE0MWNiMzlhMmZiOGU3MzVlMGM5NzIwN2YxYjYxOGE0Yjk4ZjZiOWJmOGM0NGExYzhlOWVhNTc1YTc3NTljYzJhMDIzMDEyNzQ1NTNlNzc0NDQwOGIyYzU3N2I0YzhjMmEwMGUxOGY4NzE3ZmQ4YTZkMmY0NmE0NGVlYjA1ZDY4NWZiZWY3ZWRlYjQyMjllN2VhOWI4ZTQxOWZmY2I1MDRkMzM1ODNiM2FlNDIxYzg0Y2FlY2E5Zjk3ODkwNDdkZDdiMTgxMDMxOGQzNzY1MzA3MjMzNTY3YmM0MGUwMDM0MDFjOWY0ZTFiMDdhMmE3MTYyODg5ZTFhMDkyYWVkYzEiOjEyODoiNjNhMzEwYjRmNDNiNDIxYTg2M2ZiMDBmYWZkN2VhYzQiOiI2OTljMTQ2OTI3YWUyOTAyNWU1YjIwMDg4YjIwYWYyN2JjNzU0NDllNDcyNWVlNmI3ZDVkYzYwYjQ0YmE4YTA2ZjdkMjY1MzMwYzE2MDYwZmJkNmRlZjI0NDYzMGQwNTZjODI2NzZiZTJkYzg1ZDg5MWM2M2QwMDU4MDQwODVjOTNjZTg4ZjNmNTdjMmQyYzAzNzFjMzEwMjdkMGE0YTAwMzFlM2Y0NzNjYjM3M2RiNjNkNGZmOGY2NWJlOWViZTc0MDQ1ZGU4MTNhNGU2YzY4ODExMGQwMDBmNmIxMjQwNjg4MWMwODA4NWM5MzQ4ZTFmMDMxNTAzODkwN2UzM2Y3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTQ2Mjk1N2YyYzUwMGJmMmQ2YmZhOWFmOTc5MzhmZGQ4OTMwZTM2MGVhNDE3NWU3IjoiODJhN2E2ZGQ4MmE1ZWEzZDlhOGU5NTQxZDg1NDk3ODQ4N2VkYTI5OGI0ODNkZjAyYjQ1Yzc2YjhiMzhiYWM5OGZmZDk2OWRkMTYwYTI3NjU1OTViMTlkNGVhM2U2NDM1MWNlOTU3NjRhOTAzZjU5NWRkNjczZDEzZmFjZjVhNTU5NGUwMWJlMWQ2MGEwYzZkMjhiODY2YTFmOTNhNjNhNzRmZWNiNmQ3M2FjNmZiMjZiMjBjMDA4YjkzZGI1M2U5ZGMxZDNlMzkwMjM1OWZkNDc3MzRmZTIyYTVjNjk1OGY5N2U5MDAxY2M0ZThiNjQ4NGQ5NTQyZGJiZGZjZmNkYyI6ImIzODA1ODRhM2Y0ZTBlNTlhZGQ0NzUzYzI4MmYyY2Y3IjoiNjgyYjBhZjY1OTJlZWYxNzNlNTU5NDA3ZTdmNTY1NzRjMDY5MjUxYjkyMDkyNTcwY2JiN2Y1YTJmMDVlODhiZWQwYWY0OGRjZGE0NWIyOTMwYjFlZTdkNWRhNzhkYzQzZWMzNTk4YTM4NTkzZGY3YzU0ODA1OGVkYTNjOTI3NWMxMzA0NDg5YWZmOTVmMzNhNmNkNzllNzI0ZThkMTJjYTBhZTkyYjIwMjczZWIzNzM2ZWZjZDUwZGM0OWU4MDNhZDYzMWRjYmY2NDM3NmE0NWE2ODdlYjRlNDE3YWVmMDhhM2Y1ZjgyMzBkM2YwYjI2NmVhNzMyYzIxZWQyZWVkNyI6MTIwOiIyOGE0MzI1M2Q4YjM3Nzk1NDMzMTQwNjQxZTlmZmQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGE2MmRkZDg3ZjQxYzZkZjc1NmU4ZGEwOTg1ZGNkOGM5MWU3M2JhMzk1YjNkNzliIjoiMzdhODNlZTZkYmRlY2UyMTI0NDY3MzllYTM1M2NiOTU3YjlhYTQwOWM4OGJlZTA0MmJiYzNhNmU1MTk5YWViMjhmMmI0YjAwZmY0MzNjMGM2OGQ2ZGI1YTE5NzU2NjAxOWRiOGE0YzdhNzkyZTI4MzlhMTlhMzAyZWUwMmJlZTA0NmFkY2UwNGMxZmJiZDViMGM0NTdkN2NiZTI3Nzk5MmNlMmMxNTNkMTMyMjY5ZTJkMWYxMmIwODRjZjMwMjZhMjAyYjQ2NjRiYzlkMTE4MzJlOWI5OWM3Y2M1MDM1ZGNmZGU1OTkxZGQ0MWFlYjRmYmY4YmVjNTEyNmE5ZjUyNCI6IjFkMTg0M2UyMTE4NzcyZDc2YTAyNDRhMmMzM2M2MGJkIjoiMDI4YjkyNzI3Yjc1YjE0Y2I4ZGZlYjdhODZhN2ZlYzUwY2Q1ZGU0NmFhNGEzNDY0NTc1NDkxOGI4NjA2ODE5ZDRiZjhhMmU3NTMxYTA1YWU1NTA1NDkyY2E2Y2JjOGMwZTZkNmFiMmRlYTIzYmZmMWZkZjU4MWJiNzgwYjRhMzMxMmFhMzk2MzkzODNmZDEwYmNmOTI0ODk4MDE5NTQ3MzNmMTZiMDIxYzJlODQ4MDkzNDUyMTZmOGYyOGE5OTc3MzM0MWU0MGM0YTY0MzA1YTIwOThlYWEzOWYyNmE5M2JkNTU2Yzk3ZjAyMDkwZTFhNmMxODFhNGUxM2UxN2QzYSI6MTIwOiJhYjczODA3MzIyOGJkZjFlOGZkNDQzMGI1YzdkNzkiOiJlNzAyZjFiYjlhMWYzOTVjNzRmY2EwY2U5Y2RmMjllNzMzMmMxNGFjYWNhNDUyMDBjZDQzMmE1NzY3YmUzODkyOWVmOGRlNDNkMGUxYTVlNzMwMGMxZWI2NjlhYzFhYjk5N2IzMWNiMTQwM2FmODQ1MWU3N2U2MzUwNTkyMGFmMGY4YzNhYmY1YTk0NTBlYTQ3MzcxMDM5YmExY2YyZDY1YTE0ZmE1ZjAxM2I3Y2UxZDE3NTg1OTQwNGRjZjY0NjFhMzZlOGJjMjYwZTdhYmY3MzlkODk1MWRkZjFhMzc1NGUyZDY1ZTBhYTMxMzIwYTVmZmNhODIyMDIzYmMwOTA2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmM0Njk3NmQzOGE1ODFhNzA0MmE5NGVhNGI1YmZlMzU4N2RkYzY1ZDExNjJkNzFlIjoiNGI5ZTg1OGZjOGYwMTkwM2U0MjYxMTIxOTJkNGFlNDY4NmIxYWU0ZDY4M2I3NWFmYjJiOGM2MzU5MDI3NTk0M2QwZDZkNmEyM2I2ZDM1Nzk2YTJmMTAxMjAzYWNiYTEwNzQ3NGNhNmY0ZmY2ZGQ4N2Q2Yjc3Nzg1YWQxZDE2MGVmMjc1NWQ4NDA5MmRjNzBjODZkYjVlNjM5YjY4OTk0M2IxNWVmYTY0NmFmZjQ0YjNmNTFmNWQzZjRjZjZjOGY3ZmM1YWRmZTdiZjJkNzJmNzViOTNiOGVlOTRlZjNmYTY5ZWEwZmMwYmI3N2IzOTgzOTAxZmRjZDMwYmNkMzZmNSI6ImI1ZTkyNTYzZGQwMzM5ZGYwMGI3ZmZhMjIzOWQyMWJjIjoiN2I2ZjZlMTA0YWNiY2Q3MTg4MTYxNDc3ZDhlNDI1ZmY5OWFkZDIyZGY0ZDIyZGU3ZjI4ZDBhMDA3NWNhNGVmODQ4ZjY4ZDA3ZWQyMmQzMTY1YzA4ZTQwODkwY2UwNGQxYmQwNWIxYTZjY2IyZmVjODE5M2Q1ZjdkZmZjOTNkOTdhMGMwMzZiMzc0OGY3MDhiMDExYjY4MjQ3YTAyNDliOWUxYTYwYjY1MjE2NGU1YzJmZDcyMTAzNzdkZTgwNGFjMDEwYzhhYTA4YTExZjQwYWY5N2U4MzcwYTU5ZjkzNmNkMTRjMjJlYTdhMjM2ZDkwNDE0NWFkYzA0YTI0MWZjMCI6MTIwOiJkNDM1NmNiNDE3OTUzYjAxZjdiMTExMGM4YWEzZWIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDAzZTQ5ZmVhZGQ0ZGI3NjM2NTJlZDVjNGIxZTEyNjgwY2ZlMGFiYzMwZjQ2OTZkIjoiMjIxYzYxZDc2OWZlYmNlMzkxM2JmZWFkOWEyMDFhODA1ZjExMDA1ZGRjYWMxODVjYmFlMDBjZTc0OWRlOWM0MzYyODg5YjFiMGQ5NTQ2ZTkxNTk4ZTBkZGVkYjg4YjY3M2E5MGFjY2E2NWQ3ZTcxYTg1NjM2YmUwNTJmMzYxODM5YTY0NmRjOGI4MzRjMDJmM2UyMjYxZDM3MGU2YmFjOTYzNmI3NTM2MjI1YjVlYTc3ODgxMjAwYzhhMzQ1MGQyMWJmZDFlMTFhZmIzYTQ3MGUxNzhlY2ZlOTQ0YTI1YTdjZDAyNTRlMDRhNDJiNjc3MjNhYWM4YWZmZmQ1NmZlZSI6IjFhNjAyNThhNTZlMTVmOTI4MTRiNGQzNzIyNTVhODBkIjoiYTRmZmE5ZTNjNjEyMTAzMjI0Yzg2NTE1ZGFkNDM0M2NiY2E3YTdkYWYyNzdmNTgyODY3MDgzNGY0ZDlhZjY3YjlhOTM1YzcxYjIxMzBkZmJjOTI5YzQ0MDliZmZiNzk3NGZmYTg3NTIzYjU4ODkwNzcwNDM5YzMzMzQyODgwYjMzMzE5YzYyNmJmNzc2YzFjMGFlYjljMmEzNDhhNzY4MTU3MmY0ZmY3MTFkOTRjMTkyZjM0NTBlOGIxMjc1ZjlkMDJjNzQyYTJjOWYxZGEzMTZlOTkxOGJmNzg3ZjIyNjk5MTcyOTg2Y2I5YjEwZmM1NmQ1ZjZiODM5MmZmOTJiOCI6MTEyOiI2MjY0NmZjOGJmZTM4YjNiYTZkNjJmOTAxMWUzIjoiNWM3NmM5MGRlYTdkNjU5ODA0YWQ4NzM5NjA5MDYyNTlmYmRkYTM2MTQyNzdlYzU3NWQ5ZWVjNzMwZTc0N2EyZTdiOWRmNjcxNmI0YzM4ZDM0NTFlMzE5ZWVlY2VlNzRkMWY0OTE4MjY2ZmM5MjM5ZGU4NzA4MGYxYWQ0MzdiNDdjNjkwNGVkMmQ1NTE0MTYxYWQyNWUzZTIzNzY1NWUwMGU1M2ZlMThkNDUyNTc2NTgwZTg5YjJmMWYwZjZhYTdlNDBhMzM3ZmQ4YzQ4ZDY5MGZlMDEzYTY3MjY0YTgwZTliNWRmZDAwOWE5MTUyZDU1OWFhMDJhNjhmNDAxYTA5YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMzNDcxMjU5NTEyZDFmMDNjZTQ0YzFkZGFjMTg2ZTlhNTZjMTQzNGE2YWM1NjdjNiI6ImRkNWI5OGIzYjNjZjAzZmI5MmJlNTc5MDY4YTg4NWFmZDk4NDYzMDY5MmViNWYxNTVmYTZiNDlmMmIxNjkwYjgwM2QzNGI5MGU4ZGUzY2MzOWMyZTYxNjUwZmZmZmI1MWU3ZWYzNmQzNWFkMTdkYzRkOTFmMzM2MzYzYjA3MzQ5OTZiMTYyYjUwOWM5OTU0Y2FiM2RkOTU5YmRlN2U0MzdlOTEwMGQ4NGM0NDEwNGM2MWUyOWRiZTEyNDkyYTAyNzJjZTZlZWEyOTA2ZDM5MGRlNzgwOGQzMzdlOGM2NTBiMzMwMWFmMDRhOWVkNTJhYjllYTIwOGYzYzc0MzlkNmMiOiI1MDE2NGM2M2Q0NjYxNDhhYjM3MTM3NmQ1YzJiNmI3MiI6IjExZDFmNTIzODg4YmVhMWZiYzY4MGQzNGJjOWI2Njk1N2Q2NTFlZmE1OWU3ODhkYjNkM2Y2ZjUwZTcyMTg0YjlkMTRlOWZmOWJjMDVmYjY4NzUyMGNmNDIzZDY4MTgxMmUwMDcwMjVlZWRmMGU3OGU3ZTgxOTFlNmI2MjQwNGU4ZWI0MDBjZjgzN2Q3NjJhMzFhYTI0ODU1MzM2NzI2M2Q2ZGUwOTFmY2Y3YWJlZGMzZTY5ZmMxMThiN2VmYjA1OTRjODliOTZjMzg3YjdjMjhlZDlhN2I3NWRiNjBiNmI1MTMzOTQ5Yjg5MWZmODFlY2E1NzkwYTI2NWYxMmE1OGMiOjExMjoiNmM1ZjM4MjMyZThhNDM4NzFhYjcyYTM0MTlhZCI6IjUwNDM4ZWU3MTI3MjBhYmYyMDg5MzMxZTRjMDU4YjMwYzMwYzNkMTc4MzRjNTA3YzAwMTBhYzNmOTc0YTI1NmQwMWIxNGE0NWU5Y2U1MTkzYzVjZWRlNDEzMzBjZjMxZTFhMDdhMWY1ZTNjZWNhNTE1Y2M5NzFiZmRhMGZiZTBiODIzNDUwZWZjMzA1NjNlOGVkOTQxYjAzNTBmMTQ2ZWM3NWNkMzFhMmM3ZTFlNDY5YzJkZDg2MGMwZmQ1YjI4NjIxOTAxOGQ0ZmJhY2RhMTY0YTQwZDI5ODBhYTNhMjdhYTk1ZjhiOGUyY2Q4ZTJmNWYyMGQ3OWEyMmMzZmYwMjgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlYzMyNmExZTBmZTZhOTk0MjEzOThkZjRmYzdkOGZlYTY3YjY3ZTVmNWZjZDUwYWQiOiI2ZDUwMTZjNDM0YTBmNGI0YTVkOWUwYjZiOGUyZDg0OGE5NGYxMzJmMDU1ZDJkODQ3ZTU0NjAxYTRjOWNmYzU5NjZhNjU0ZDY5NmY4YTM1MjlhNDhhOTBiNDkxZWEwZDMxYzA4ZWFlOGVmMzY0ZjcxZjhlYzdhZTdmN2UzOWJiOWMzMzExMzdiMjU3ODM2MmZmMTY1NjI4MDk5OTQ0YmE4ZGViMGQ5OWFjNjYwZDVlZDIyMTViOWE3NjI2ZmYxZmE2MTczY2Q4ZGQ2NzZjOTg4ZDE2YzljZjc1MGEwZDc5M2Y1ODRjM2M4ZjVmZDVkMTY3YmMyNzhmNGQ3N2E2MjljIjoiYzk0YWE0YmFhODQwYTA0NGRiZDU5NDI3ODdhMGM5NTEiOiJmODQwMWM1NzhmMjBkOWMyNTBlYTg2ZWI5NDUxODRlMDA3YTAxOTA0NjJjN2FiZGRmMjM4Y2UxY2VkZGNjMjMwNzU2YWEyMjIzODZkOGJhNjZlYmJiYTEzZGUwMDhjZWQxNDA4OTZhYzU1YmM0N2MyMzFjYzgxMzcwY2E5ZmVhZGMyMjVlMDE3ZDU5ODkwZTYyOTFjYzRjY2EyN2RiMzA3OGMwY2Q2Y2JiNTFhZmI2MjIxMDIyNmE3NjgzN2M1NDU0NzI4Y2I1Y2UzYWZlNzM1MmU3ZmU3NTQyMWY5NDk4NmU2YjdiMjYzMjFiYmNhMTVjNzVhYzdjMTNkYzE1ZjUwIjoxMTI6IjMyNjk5MjJhZmZiOWQ3NjdmNWFiZTA0MWNjOGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTdlZjgxNjUyZjYwNGU4OGE3MjQxNjkyNGM1Mzk3OWRjNzNjYWRkMzU3NWVkYTFjIjoiOWVjZDE5YThlYmE5ZmJhODQzNDg2ZTFiYmZiOGQ5MDUzYzVlMDRiMjRlMzAxNzRkNGFhODlkODMwNzQzOWQ2NTNmODYzMGVkZGRhZmQ1MTcxOWM3NDRiY2I0YmNlM2U0NDQ4NDc1NjdiZDJjZGRlMjk5NTg3MGQwNjM0Y2MwYmEyYmRlNGI2YmMyYmM1ODMwNjJmYjgzODc0YTFjMjViNTBhZWI5NDViZDEwOWExNTE3NzJjMDc3NDM4YzRkMWNhYWViNWIwYzU2MzkwYWMyM2M2ZDExN2YzYTAwZmQ2MTYzMDZmYzJmZmM0YzFlNzZmOTM0YjMwZmJiYzUyZWVjMiI6IjBjYzlhZTU0YzlhODVmM2U5MzI1YzVmMzY1OGFiM2IyIjoiZDAxOTViNzQ0MzUxYWEyNWE1N2E5OWRmOTU3M2RmYTNjZWJlOTg1MDEzOTE0OWI2NGY3ZTRhZjM3NzU2YTQzMGRkYThhZjk4ZTRlZDQ4MGU5MTNhYTgyODIxYzAxYzFmNzViMTg3ZTEwNWE4ZjM5NjIxNzU3ZDUyMmMwODNhOGQ4MWQ3ZDhiZmU2Y2YxNWM0MzlkMDY5MmI2YWZmZDY1NWExMWJjZDI0NTcwNDZmYWU5OTZhMTA3NWM2NjAyOTg2N2I4OGNkMjNjNTAzYWUwNDAzN2RkNDFmMjdiYWZkNTAwMGQxZjUxNjAwMmY5ZmNjMGYyNTAwZThjMWIyN2RlMCI6MTA0OiIyMmMyZWZlZGRmZDVkOWNiNTI4ODYxYzRlYiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MDUyNzFhNDFlMjYzYzkyZGMxNGZlOWRmNTIwM2U3OWQ1OGNjMmQxMjg5ZGMzNjEiOiIyYmRhMzQ0OGEyODNlY2JhMzFlMDI5OWMwYTllNDQ2MjhjYjJiNDFmYTdiMWE0MTEwN2UxMDdjYWJjMzgxMDgzYmRiZTA0OGYyODA0NTY4ZmRkNWZlMDE2ZjRkNjA3ZjY5NDA0MmE0NTliYTAzYTJkZWRhNGNjY2M4Y2JlNDYxMmQ4ZWQwZDQ1NzVlNDhiYzlmNTk4NDMzNjlkYmUyYWY2ZDA0OGU2NWZmNDI1MGUxZWVmNjFkN2IxYjM3OGZlMmYzMzA1YjEzM2RkYzdlMzdkOTVjYTZkZTg5YTk3MTczMGZjODBkYTk0M2E3NjdmZjEzNzcwN2E4ZDhhMjQzMjljIjoiN2YxMjgwOTJhNzc3ZmM1MDNhZGM3ZjZiODVlYjIwMDYiOiJhZWY5Zjk4NGZiNjQ1ZTA4ZDVmMGFhMDdhMzFjMTE0ZDJmOGU5ZWNhMDQ3ZTRhOGQ1NDcxMzc4Y2ZjMmNlZDExNTlkYzA5M2QxNzQ3ODhlNTg0NDdhODU0YmU1ODk0MmVkOWEzZmQ0NWYzZjRhMWFmNzM1MWUwODczNjlhMjY3Nzk3YzUyNWYxMzRlNzk3MDkwOTdlNzMzYjkwMDNiOWJlMGM1NjlmYzcwZWUzNDYyYjgxNWI2NDEwZTE5OTU0Y2UyZWZhYzEyMTMwMGMwNmZkOWUwMDU0MmE5YzZhNWE2ODJmZTEwMTBjMTQ1YWNiYmI4YjgyMzMzYmRiNWRkZmQ5IjoxMDQ6IjY3M2FmZWE1OTJiMmNlMTZiZDA1ODQ2OWYxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZhMDc2ZjM2Y2I2NzhlMjI3NTU2MWU5NTUzZWJkZjM5NzM2MGU1YTVlNDQ3OTFjNCI6IjUxMzMwNWU4NmMwY2IwNDZjNWQzNzIwYjI1YTQwNjM5Mjc2NmJkMWZiN2RlMjc1OGRlMzcwZmYyZTY4MjgxZTIxMTkyMjg5MGM2MWYzNjU5NDYwZjIyYzQ1YTU3ODk1YjQyNDQ0MTI2MmEzYmEwNjA2ZGY0ZTI3MDFmMzgyODFmZDM0MzZhNGQwZTBmOGVmZWNkMjMxODA4YTllYTA2M2RmYjcyNTAxNWE5MWYyN2NhZGZlNzkwOWEwZWUxMDllYWMzOTFhYzgwN2FmZWQxNzY3YWUwNTE1YjljMWI1MWFlOWE0OGIzOGZlN2ZlYzdmZTBkZGVlNTYyYzk0NWU1YWUiOiIxZWNkNTNkOTRmZTI4NzA0N2ZmMTg0ZThiOWI3MWEyNiI6IjVmZjI1ZjdiYWM1Zjc2ZjUzM2Y5ZWRmZmRmZDJiMjk5MWQ3ZmM0Y2Q1YTA0NTJhMTAzMWRhNjA5NGNkNDk4Mjk3ZmIyYTA1YWU4ZGI3MWNiMzQ1MWU0YWMzM2EwMTE3MjYxOTAzNWE5NjIxZDJkNTRmODEyZWY1MzQzZTE0YjlkZWRjOTM4MzhlNGNmMzBlMjIzZDIxNWI0ZDI0NzZlYTk2MWExN2FjNzI5NTA2OWYyNWIyYTEyZDZlMmVmZTc2ZDkxZjQ1NjMyYzZkNGU2MWZmMTlhOTVkNWFlMzZhZjk2MGQ5NTA1MGNlOThiNTc5MWRmMGI3ZTMyMjQxMWM4ODQiOjEwNDoiMDc5ZThkYjljM2U2ZWRkYjAzMzViMWNmNjQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTlkYWZhMGU3ZTUzYTg3NjZmYzBiYzM4ZmJhODA3ZDA0ZTE0ZTVlZDYxYmMyMzQiOiJiNTg1YjhiZjYzNDc1N2RhYzAxNWYyZjY5ZjJhZTY3NDM3MmE2NjRmMjExNWFkMmQwM2JkM2UwYzMzNTMwNmIwMmQwOTQ3ZDNjZGE1OTkxZjVjMGMyNWYxMmVhZDJjM2NjMmQ2NWQ1NzVmZDY3MDkxYzcwYmM5M2RkYjRiMWUyMWY3YjBmYzZlNmFlNjUyZGVhOTNhNjU2NGZmMTM0ODlmOTI3OTQyZTY0ZGQ5NGJmOGY4MjFjN2ZmZGVmMTZkZjU4YmQ4MzA2YTk1NzgyMWFjMjU2ZGE2ZjE5YzlkOTZlNDhlZWU4N2Y4OGFjYjgzYmFlMDVkNjkzYjcwYjkzMzdiIjoiZmQwNzUxYWY0OTgxNGVlOThiMmIwY2RmNzMwYWRhYTYiOiIxY2JhNDg4YTBmYzhhMDEyZjlhMzM2Y2M3YjAxY2JjYzUwNDE3OGVlYjA4MjM3ZGJlZGJjNmM3YWM2OGZkZjNhNjc0Mjc1MWEyMDdlNDNkNDMwNjhhYmY2ZWY0ZTEyYTVlM2MxN2U1YTJmOTM5OGZjMDRjZWQ2NzM3N2NiYjg1OGZkNjAyMGZhZDY3NWE4ODBhZGIyNDllNGFiYTk0Yjk2ZWZhNTE1ZDFjZGY1YzBjMzA3MWEyN2EzMjQ1OTY4ODY3ZWE5NGIyYmZjMjAyOGE2N2JlMzRjODRjM2Y0NzU5NDQ0OTdhYThjYTFhYjAwOWY4ZTRiMTFjODMwOGMxOTk2Ijo5NjoiZTVkYzkyZjRhZDQwMDBlOWI2MmZiNjM3IjoiOTVmNDMyNGIwNjU2YmVmMTllY2E1NTcwNTQ4ZmM2YTdhOTkyM2Y0ZTJhN2U0MjA2Njg5MWJjMTMyZmQ3M2JjMWM5MDg5NzU1ZDk5Njc1NmRlMDA3MjgyNGU2OWM0M2YyZGI4YmEyYmY2ZjkwZDNjNGVhZmMwNzIxY2VhY2NjZTFhZjg5NmY5ZmIxNWZiMTljNDc0Njk3OWI2ZDk0NWY1OTNmYWQ2MWQ1NTBmODFkMTJiNTk0NWVkNzI4YzAyOTMxZDdmOGQ5MTcyODVjMjJhM2FmNzQ4ZDc1YTZiZjE2M2ZkZGQ4NGI5NDFkODU2NGMxYTYzMTkyYzgxNmFkNmQ2ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGEzMjg1NTRmZWQ2OGRjNDgzOGZiYzg5ZmQxNjJjOTllYzEwNWIzNjY1MWFiYmM5IjoiNzU5ODZmNTY5NzJjMDQ1Yzg1MGVkNjhhZWIyMjlmMjAzYjIyOGZkZmMzNmNhZDZiMTZkOWJkMTIwMzdjNDg3MDBkMjBkODA2MmE5ODNmZmVjYTc2YjhkMzZhNjdlZjUxYmM4ODUzNzA2ZTgzYTM0ZTRlMjNmZjRmNGE0ZWI5NDNmMTlkYmU4NWU0NTQwNDNkNzkwNmJlNjU4N2E4NTA3OWY5Y2NkMjc5NjJkMjkwNTExN2QyZGJlYWY3MjVkNmZmZTg3YmVmNTJiMjEzOGRhMTUzZWYyOWIxODA2NWIzMzQyYjNmOWQwNzgzN2Q1N2I4YmM1ZjI1OTdkZTA2YzU0ZiI6ImU0ZjdjNjlhMWQwMjZlZWViZmM0NWU3N2JkN2IzNTM4IjoiZTM0OWRjZWRiMGJmY2M3NzFjODIwZjBkNTEwYjgwY2VmMzJhZTMzMjY0ODRlMjVhYTE4MzAxNTk0MWU3ODQ0YmM0NmY2MTdkNWU2MWZkNjRmYTcxNzU5ZTkwZmNiNzJhZTIyMGJjZDUwN2YwZmIzODliNjg5ZGQzZmEyOWIzYjkzN2VkZWQ4NWYyNmFkYTllMGYzZjUxMDlmODJmZWY0N2M3ZWJhNzMxMzA0OTc1MGFkMTc5NjllNzU1MGMwZDQwOTNlZDE4ZWUyNzg0M2QwODJiY2VlOGJmM2ZjNzgzM2Q1NjliNzcyMzk5ODU5NWE1YTFkODcxMDg5ZmQyMzhkYSI6OTY6IjhlODMyMDkxMmZmZjYyOGY0N2U5MjQzMCI6ImExZWQ2NWNmYzdlMWFlY2NkMDUzMWJjZTFkYzc0OWM3YWE4NDQ1MWVjMGYyOTg1NmYxMmYyMmM0MTA1ODg4YzdkNjJlMmUyZmM4YWQ3YTYyNzQ4NjEwYjE2ZTU3NDkwZjA2MWFkMDYzYzg4ODAwMDM3ZDcyNDRlZTU5ZTEwOWQ0NDUyMDUyODA0NzMzOTAzMzZkN2I2MDg5ZjNhNzgyMTg0NDdiMWIyMzk4YzRkMGIzYWFjOGI1N2EzNTg5MWFkNjBkYzFiNjlhZDc1ZTJlODYyNDhjZWFjN2JiNGNmM2NhYWRlNGE4OTZlNWVlOGM3Njg5M2VmOTkwZjZmNjUyNjYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZlN2Y2ZmViNDAyMjMxMmRlNWM4MDRlZDFkN2EzNzU4MGQ3NDQ5OTEwN2Y4Y2M4YiI6IjRmNWJiZGY1NzVhYjhmNzc4NTQ5Zjc0OWYyMjY1ZTE3ZGM3MjI1NzEzZTczZWU2ZDdiZTE2M2ZmNzA3MTU1N2RjYzIyNDBiMDcwNWMwNzkwMDg2MDVmODEzOTY0MTRhYzY0ZjA2YjFiNjM3ODc2ZTA0YzNmY2E4ZDBmYTU3NmNlZjRkZDNkYzU1M2ZkNjgwOGVhZjEyMGY4MzdmOWJiMWQ5ZGJiZDVjZjY3ZWQ0OTcxNjdmYzdkYjg5ZDNhODQxNTFiODFhZWFiMGU5MjEwNTdmMTIxNTgzZGY1ZWQ3Zjk3NmIyMDZlY2UxN2E5MTNmMjM0ODUzODVmNjRjNDYyYTgiOiI2Y2UxMzQ4NWZmYmM4MDU2N2IwMmRkNTQyMzQ0ZDdlZiI6ImM2ODA0YTJiZDhjMzRkZTE0ZmU0ODVjOGI3Y2FhMjU2NGFkYWY5ZmNiYjc1NGJkMmNjMWQ4OGJhOTE4M2YxM2QxMTBjNzYyYTNjNWQyYWZjMGZiYzgwYWVkY2I5MWU0NWVmZTQzZDkzMjAwNzU0MjBlZTg1YWIyMjUwNWYyMGU3N2ZhNDYyNGIwMzg3MzQ2YzFiZDk0NGU5Y2Q1NDA1NWI1MTM1YzdmYzkyZTg1MzkwZWNmNDVhNzA5MTEzNmI0N2UzZDY4ZDkwNzY1OTRjZmFkMzZjMzYwNDc1MzhlNjUyMTc4YzM3NWEyZmU1OWEyNDZhNzk3ODQ1Nzc4NjAxODkiOjk2OiI5NzRiZDBjNGE4Y2FjMTU2M2EwZTBjZTAiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NmQ2ZTk4MmZlZmYwZTdkMDRhODQzODRjNTY3MzliNjk2MjZkZGU1MDBlNGI3ZmIiOiJhNTE2MGZiMmQzOTdiNTVhN2ViYTAyZGYzM2EwNDI0MDQxODhmMDJmNDQ5MmQ0NmY0ZWRjMDNmYzY3NzIzZDY0ZjVmN2ZlZDNhNjA3Mjg0Mzg3MDNjNjA0NTRhMzBmNDczYWM5MThmZmM4Zjk4YmU1YzVlOTc3OWVlOTg0NDE1ZTQxNWNlM2M3MWY5YWNjM2Y4MDhkMjE1YmU1ODUzNWQzMTQ0Y2ViZTc5ODJiOWI1MjdlZGJlNDE0NDYxNjEwOTRkNmZjNzRkZWMyZTBhMWM2NDRiYmMyY2Y1Nzc5YTIyYmQ0MTE3YTdlZGIxMWQxM2UzNWU5NWZlZWI0MThkM2YwIjoiNzFhNmQxZTAyMmE2YmRmZjY0NjBjNjc0ZmIwY2YwNDgiOiI2N2E4NDU1YzdkM2ZiZmRiYTNjNWVjNWY0MGUwYmU5MzVmYmI5NDE3ZTgwNTc3MTgzMmZmYWQwNmJhMzhhNjFiODM3Nzk5N2FmMWY1ODZkYzBmYTFlM2RhMGIzOWZhY2Q1MjBkYjFmMGVjMmJkZjE5MDRhM2E4OTdmMGI1MDdjOTAxZmFiMzBhODVkZTUxZWZmYTlmN2Q0NzAzY2VlYjJjYTcyYWJlMGJkMTQ2YmEwYmQzZmZkZWUxMTYyODMxMGRiN2Q2NWVhMTM0M2IwMTgwODRlYTI0MTQ5OTVmODZmZWZiNDViYTkxYTlkYzIyMzZkOTIwNzhiNDMwNTY3MWI1Ijo2NDoiODRmMWVmZDM0ZmY4NGU4MyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk5MWRjYWEyZThmZGFkMmI0ZTZlNDYyYTNjMDZjOTYwNjdlZjVlOWZiMTMzNDk2YSI6IjljZDBjMjdmMGMyMDExYzFhYjk0NzQwMGQyODUxNmM3ZjQ2ZDIyYTQwOWExOGZkMzVjMWJhYmY2OTNiODAzMGRmZDc4MjJkOWJhMDNiYjhmZDU2YTAwZjljNzE0OWMwNTY2NDBkZGU2OTA4ODlkMmYyMzk3OGVlZWIyOGNjYzI2ZTJmYzI1MTIyMGEzNjgyYzk2M2Y1NTgwYzY1NGMxYTY3MzZjY2NiMWI4ZWQxMDRlYzczOTAwMjFkMjQ0YmQ5ZjkyYWJkZTg5ZTM5YTRiODNlZmY4MjExYzhhNjI1OWJkNmFjMmFmMWRhN2RmYjhjZjEzNTUyMzgwNTZjNjAzODEiOiI5Nzg5MTNkMmM4MjJiYTdjYzc1ODA0MWQ1ZWU0Njc1OSI6IjVhOTRkYzgxYWYwMTFhOGFmMjYzMzE4YjYwMjE1Yjk3NTIyOTJiMTk0Yjg5ZjZmYzAxM2IwZmU4ZTI5MTMzZGU2MzFkOTgxODYyZjJjMTMxZWUzNDkwNWJkOTNjYWZmYzNiOGY5MWFlYjAyNjRiMjdhNTA5ZTVjNmE0MWFlNzgxMjA5ZjhjNTg5NWQwZDM1YjNjNWUxYWUzNGExYTkyYTJiOTc5ZTBlNjIxMzIwNTEzOTQ5NDBlYTRkOWJmZmZiOGQ4OWJhMWU4MzMxYjE1YmRmMDVjNDFkYjgzYTU3NzQ1YTRhNjUxYTc1N2NjODY0OGFjZGNmODUwYTJmMjUzNjciOjY0OiIxNWQ0NTZkYTc2NDVhYmYyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjI5Y2ZmMDA3ODFmNTkxNjkzMGYxMjU0ODljODdkMjFmNjU5MzMyNGQxNTA2ZjY1IjoiYTNlODU5NTc0N2I3MTQ3ZDQ3MWFjNGZlMzgwMTRiZjRhNDA5OTMxZTNmNDE5ZmY4OGFlMjQ5YmE3YTdmNTFiZDBlZGUzNzFiZjE1M2JhYjRiMjgwMjBiN2E4MmE4Y2EzMGI3NWYxZTNiY2ZlZTNjMTNkYjgxM2NiYzg1MTM4ZWYwNTg3NGRlZGIxNGE2ZTViNmQwNmQ3NTg5YTgzYmQ1ZTA1MmRjNjQ0MzNhOGUyNGMxMTg4Yjk0NzBkZGIyNTM2ZDEzYjRiN2JmZjBjNWFmY2ZhYTlhYTAxNTdjM2FhZTNiMTc3NGRmMmRmMTRmOTY1ZDZkZWU0MzMyZWRiYTY3ZSI6IjUwZGI3ZWUyNWE5ZjgxNWM3ODQyMzZmOTA4YmZkN2YyIjoiZWMxNDgyZTE4NjkyYmNkNjg5NGEzNjRjNGE2YWJiOWMzYjk4MThiYjE3ZTVlMWZjOWVjMGI0MTcwMmM0MjNmM2E2MDkwN2U5NGM4ODhmYWQ4ZTc4ZjUxZTFmNzI0YjM5OTY5YmE3YjExZDMxYjUwMzUwNGIzMDRkNWM0YjRjYmQ0MjYzNGY0ZWM1MDgwYTlmZTUxYzgyZTEyMWFlMTkxMjcwZGQyYzMwN2FmODRjODJkODkyZDk4MjQxM2E1MGNjY2UzMzY5ODA1NGY3NjFhM2ZhOTNkYTlhMWZjYTMyMTI5NmIzNzhhNTBkNDU4YmE3OGU1N2E3MGRhNDY3NjE1MCI6NjQ6ImExZTE5ZWYyZjBkNGI5ZjEiOiJlZWExODI2MWE0ZGUzMWQ4NjE5ZTc3MDA1ZWJiYjM5OThjNWRjZmFjMmJjMTIwYWU0NjVlMjlkNmI0YzQ2ZGU3ZTZjMDQ0YzhiMTQ4ZmZlNGVkYTc2MjljMjQzZGY4YWY0ZTdjZWI1MTJkNTc1MWEzZWU1OGRlZmIwNjkwYjZmMjZiNTEwODZkZWRmZGUzODc0OGY2ZjBiYmU2YjQ5NWY0MzA0MzczMTg4ZTVkMmRjOTM0NjFiZDUxYmY3MjAxNDlhN2QzYWE1NDM2MjNiMTIyYjlhZjAxMjNiMmNkYzkwMjAxMzZiMDQxYTQ5NDk4ZWM0YWE2OTZjMmQzYzQ2ZDA2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMDg3ZTE0MDkyZGFkNmRmODk5NjcxNWNiMWNmY2E5MDA5NGYwMzAzMjgwODBmZmQiOiI2ZDAzOTUxMzA2MTk4MGZiMTk1YmRmMmY3YzcwNzljYTRiN2UwZmRkNTBkOTQ4Y2JmYWI1YmExMGI5OWUzYWVhMjdmMDhhYmQwMDBjNDI4ODUxZGU4MmNhY2IwZDY0YzE0NmNkOTU2N2U5ZDU1Yjg5ODE5ODc2ZDZhNjM1YmQ2OGJjYWY0N2ZmYTQxZTAyZDllZTk3ZjVhMjM2M2JmZTYxMzFhZTdhMjFlYTUxMzBhZTk1M2E2NGQ1N2Q2Y2JmZDQ1MjYwYzVmMTk0NjM4OGQ0NDVjZTk3ZDIzYWI3YmEzMWE1MDY5YTQ4OTZiYzk0MGE3MWRlMzJiZGUwMmJjMThkIjoiZDMwNTA0YWZiNmY4YjZhYzQ0NGI0YTc2MTE1ZDc5ZDEiOiJkOTU4NDVkMjY4YzhkOGY5MTM1ZDMxMGMzOWUzMGY1NWY4M2VmN2ZmZWU2OWU2YmExZjgwZDA4ZTkyZWQ0NzNiNWFjMTJjYzhmN2E4NzJiZmM4YjMyNWU2YjhlMzc0NjA5YzkwYmVhZjUyZDk3NWY3MWNhZWVmNWVlNGMxM2RlMDhkY2U4MGQzNThlZTFjZDA5MWZhZWEyMDlhMjRlMzM5MmFkY2ZlMDFhZWIyYjJlMTczOGJjNzVkNGE5YjdjZDMxZGY3Zjg3ODE0MWNmMjc4ZDE1MGY2ZmFhODNmYjNhMmZkMTIyNTU0MmEzOWM5MDA2MDZjNjAyZjE1YzA2YTRmIjozMjoiNTQxMmYyNWMiOiIxZTgxYTRjMTBhMzQ0MGQwMDAyZGRjMWJmYTQyZWJiMDhlNTA0ZmNjOGYwNDk3OTE1YzUxYjZmNWY3NWZlZTNmMGNkM2U5YzVhODFmZjY1MjhlMGZlY2Q2OGEzNjE5MjExNGYxN2ZhMWE0Y2ZlMjE5MThkYWM0NmUzYmExMzgzYzI2NzhjN2E2ODg5YTk4MDAyNGVlMmEyMWJjZjczN2Y3NzIzYjU3MzVlMWViZTc4OTk2ZjdjN2VhY2UyODAyZWJiODI4NDIxNjg2N2Q3M2I1M2EzNzBhNTdkNWI1ODdkMDcwYTk2ZGIzNGI1YjRmNWFmZTdmMzk4MzA0OThjMTEyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZmM3NmQ2MjdjNzc1ZGUyZjc4OTI3OWRjN2I2Nzk3OWE5ZjFjYzIzYzhkY2FiYzkiOiI5MmE2MGQzOGZjNjg3YjkyZDQ0NjM1YWFmZWU0MTZhMTQyZDExYTAyNTY4MGU1YWE0MmU5YmE1YWEwMTA0NjI5OTFhZDNkZDczMjhjYTRhNjkzNjczNDEwZjliYmEzN2YwNWE1NTFiOTQ5YWIwZDQzZmM2MWVmM2I4OTk2ZGQzZmMxYjMyNWU2NmVlYzZjYzYxZWE2Njc1MDBmODJhODNlNjk5NzU2YTEzOWQxNGJlNmNhOTc0N2VkMzhjZDliMWQ5ZGEwMzJlY2UzMTEzMzFiZGNkNjk4NjY2ZGRjOTcwYjhiZTJiNzQ2ZWM1NWZlNjBlNjVkN2FlNDdjNmY4NTNjIjoiOGY2ZmQ1M2ViOTdlMTJkY2Q0ZDQwZjI4NDNlMjUzNjUiOiJlNTY5OTVkZjczZTUyNjA2YTExZGU5ZGY2YzdiZmIwZWY5M2I4NmJmNjc2NmUzMTlhZWE1OTM3MjA2MDI5NGIwZTFiMTNjNjI4OGMyMzEwYTRiZWY3MjVhMmRkZGIxNzRmM2UxMjI4NjQ5ODYxNzU3OTAzYzQ0OTdhMGVlYzljMTQxNDU0ZmM3NWYxMDE0MzlhMjE1MGUzNjg4NTdjNGYwZjZlNTE2MWM0MmM3N2Y2MzJiZjFjMjI5YTUyNTk1Y2JmMTZlOTAxOGRlOWE4ZjZhMWU2YjhiMThiZDI0NGY5M2YwMDFlYjJlYjMxNTQwNWQyMjNjMGQyN2VjZTlkNGQ5IjozMjoiNjEzYmE0ODYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMTA5Nzk3OTdmYjhmNDE4YTEyNjEyMGQ0NTEwNmUxNzc5YjQ1Mzg3NTFhMTliZjYiOiJlM2RjNjRlM2MwMjczMWZlNmU2ZWMwZTg5OTE4MzAxOGRhMzQ3YmY4YmQ0NzZhYTc3NDZkN2E3NzI5ZDgzYTk1ZjY0YmI3MzJiYTk4NzQ2OGQwY2VkZTE1NGUyODE2OWY3YmFmYTM2NTU5MjAwNzk1MDM3ZWUzODI3OWUwZTRjYTQwZjljZmE4NWFhMGM4MDM1ZGY5NjQ5MzQ1YzhmZGZmZDFjMzE1MjhiNDg1ZGZlNDQzYzE5MjMxODBjYzhmYWU1MTk2ZDE2ZjgyMmJlNGFkMDdlM2YxMjM0ZTFkMjE4ZTdjOGZiMzdhMGU0NDgwZGM2NzE3YzljMDlmZjVjNDVmIjoiY2EzNjJlNjE1MDI0YTFmZTExMjg2NjY4NjQ2Y2MxZGUiOiIyMzdkOTVkODZhNWFkNDYwMzU4NzBmNTc2YTE3NTdlZGVkNjM2YzcyMzRkNWVkMGY4MDM5ZjZmNTlmMTMzM2NjMzFjYjg5MzE3MGQxYmFhOThiZDRlNzk1NzZkZTkyMDEyMGVhZDBmZGVjZmIzNDNlZGJjMmZjYzU1NjU0MGE5MTYwNzM4OGEwNWQ0M2JkYjhiNTVmMTMyNzU1MmZlZWQzYjYyMDYxNGRmY2NjYjJiMzQyMDgzODk2Y2JjODFkYzk2NzBiNzYxYWRkOTk4OTEzY2E4MTMxNjM3MDhhNDU5NzRlNmQ3YjU2ZGZkMDUxMWE3MmViODc5ZjIzOWQ2YTZkIjozMjoiMjhkNzMwZWEiOiJkYWZkZTI3YWE4YjMwNzZiZmExNmFiMWQ4OTIwN2QzMzljNDk5N2Y4YTc1NmNjM2ViNjJjMGIwMjM5NzZkZTgwOGFiNjQwYmE0NDY3ZjJiMmVhODNkMjM4ODYxMjI5YzczMzg3NTk0Y2Q0Mzc3MDM4NjUxMmVhNTk1YTcwODg4YjRjMzg4NjM0NzIyNzllMDZiOTIzZTdjZjMyNDM4MTk5YjNlMDU0YWM0YmMyMWJhYThkZjM5ZGRhYTIwN2ViYjE3ZmE0Y2FkNmU4M2VhNThjM2E5MmVjNzRlNmUwMWIwYTg5NzlhZjE0NWRkMzFkNWRmMjk3NTBiYjkxYjQyZDQ1IjowCisKK0FFUy1HQ00gU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMxOTJfZW4uZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNTZlNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMTkyX2VuLmRhdGEKQEAgLTAsMCArMSw2NzUgQEAKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjgwMjJiODk4ODM4M2Q1Y2ZkN2Q5ZTBlMjA4MTQ2ZTc4NjhkM2Q3MTRmZTg1NzQ0IjoiIjoiNWZjY2Q4Y2I1NTFjZmM5YzIwOTk4ZGE0Y2I5ODFkNDkiOiIiOiIiOjEyODoiMWI1YzZjOWEyOGY1ZWRmYTRjZjk5MTc2YjBmMTQwNzciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhN2Q0NDU2YjhlMTZiODIyODNiNjc3YmQ4YzRiMWY1NmRjN2YxNTNiNWNmYTc0NmYiOiIiOiIwODFkZTRhM2Y3MWY1ZDZmZGY3ODAxZmY2YzY2N2Y3ZCI6IiI6IiI6MTI4OiI5MGMyNzI5YzViYTA0ZjhmNWM3MzcyNmM5MTA2NDBhYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU3NzliNjBiNTM2YjA5NmM5MzQ4Y2Q4ZGFmYjM0NTEyODA3OTFlMzE5YjcxOThjMiI6IiI6IjYyZjhlMTk1YmM3OTk1N2NhOGNlOTlhODhkZWQxYTAyIjoiIjoiIjoxMjg6IjY5OWQ3MWJiNjNjNjY4YjUzM2MzNTc2NjJmODYxNTEzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTY2Y2ZiMDc4ZjY5NWM4YWQ4NGVkZTJmYjk2ZmI4OTQ4OGZhMjcxZGQzYjUwMzQ2IjoiIjoiNGE3YjcwOWQ0NTc0NWQ5NGM1NDMzYjAxZmM5ZDU3ZmIiOiIiOiIiOjEyMDoiNGE5YmQyMTM0MjA2MjlhNWY2ZTQ3MTY1MDA2MGUwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2M2OWVkNjg0YWYyYzJiZDJiM2UyZDJmOWZhZjk4YWNmODA3MWE2ODZjMzFlOGUzIjoiIjoiMGJkNDE5N2U1YWIyOTRhYjdhYjFlNmVjNzVkYjJhYzAiOiIiOiIiOjEyMDoiNjYzMmI2MThiNGNhYjk2M2RkNjcxZmQ1M2QyMDc1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTlkZWFmYzVlYzYxNTUwNDNiNTNhODZkNDY2YzJiNjUyZDU5YjcyNzRiYjg0NGVmIjoiIjoiMDlkMThlODVlNWVkMzhmNTFlMDRhNzI0ZmFmMzNhMGUiOiIiOiIiOjEyMDoiOTBiZmFkZTJmMDdmMzhiMjE5MmUyNDY4OWI2MWNiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWMwYzcwNmExZmQ0ODAwNWUwZmQwZWQ5MWI0ZDlmMDAyOGM1MDBkY2NiMjhjYTczIjoiIjoiNTk1NzE2ZTE1NDk4NDU0NTc3ZDM1ODFlOTRmNWM3N2UiOiIiOiIiOjExMjoiOGIxMGVhY2IxZjEyN2Y0YzU4Y2JiOGMzNTE2YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFlOGUxMjU1MDdlYTE2ZDUyODJmZThiYWM0MmQzY2I0OTA4YjcxN2YzNDVlNmEzOCI6IiI6IjBhN2Y2NGVkYjhjZDgwNTJmY2Q1YjkyZTIwYzBiYzJkIjoiIjoiIjoxMTI6IjQ2N2EyYzBiYTFkMjRjNDE0Zjc1ODIwMGI4YTQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMjE3NmE1YTVkOGNiOGY1Y2NlZTNmNjZhMjIxODE3NjVjZTczMDc1MWMxMzUxOTgiOiIiOiJjMTllZDFmNTJmNWViYmNmODlhYjE5MDdiOWViYzdmNyI6IiI6IiI6MTEyOiI2NTI1YmViNTg1NmQ2ZjI5MTA1Nzc3ZTMxNDU3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDQzNGQ2YmNlM2EzMzU1MTczM2Q3YWZlOGNkNDc3YTc5YmU4ZWVhYzE5YmMwYTA1IjoiIjoiYjBlYWZkZjMyNjg4NmVhYWNiNzUwZGNmMmMxMDRhYmUiOiIiOiIiOjEwNDoiYWI5Zjc5MjNhM2I5MjI4Y2I5ZWNkN2Y5MDciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOTk5NGMyNTIwYTYxOTZjYzNmM2U4YzZlNDgzMzI4NmNlMzczOTllMDM3OTU2M2IiOiIiOiJkYmY5YzQwMjY2ZDk1MTkxZDcwNzM5ZTkzMmNkODU3MiI6IiI6IiI6MTA0OiJiMjlhY2FmNWFkZGQ2YjM3OTMxNTUzNTM3NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFmMjdkMDU0MTE0YTI2NGIzN2VlMTgyMWEwNzc3NzM3NTBjYzc5ZDI4NTk0ZjUwNiI6IiI6IjY3MzlkNDMwOTI2MjBmNDRiNTdlNjUwMzVjZTE0NTY1IjoiIjoiIjoxMDQ6IjI1ZTA0MzRhMzY2MDcwNGVlZTRiYjgyOTYyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZTk3ZDE1ZjQ5OTJhNjM1NGU0Mzk0NGZkMzQ2ZGE2NWFjMWYwZjEyMjkxODk0NDIiOiIiOiIzMmE2NGU4MjZiNTAwZDdlODVmNGM0MmE3ODRmN2MxOSI6IiI6IiI6OTY6ImRhOGYzZTBhNmYxNTZlYzI2MGFhMzRmZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjc1MDRmYzQ3YTllOWE4NWVhZGVkMzc4MmNiNWIwODgzNTllYTFjMGFiYmYyNzMwIjoiIjoiYzU1YzhkYzNkNmQyOTcwYzgxNjU5ZjJmODdiZjg0OWQiOiIiOiIiOjk2OiIxMTNlNjM3NTM4ZGUyOTFlMjQ2M2FiY2YiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ1ZmM2N2Y3M2RlNzM2NzY4ZTVjNjRjMzc0NTljNWVlYzNkMjdmN2UzMzdjMzQ2YyI6IiI6IjI2OTE0MzJkMzkzNWQ0ZWE4Y2I4ZjdjMTdiZWYzNTU4IjoiIjoiIjo5NjoiYzBhZjc2ZDZmNjI0MzAxMDZjYTU0OTI4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMjgyOTJlZTJjNTQxMTk1MTFhNjdkYjBkMjMxNzQzM2FiYWVjY2FiZmRkNWQxZjEiOiIiOiJjZjkzMzFhMWJiMzg1MWIyZmMzYWVlZDJkMWEzM2ViOCI6IiI6IiI6NjQ6IjhlMTRiODY5YTk1ZWIxMmUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIwNDJmOTI0NDA3OTczNjI5MWJhN2ZlMWYwMzBjYmE5OTY3MmE5N2NlMzYxZGMxNCI6IiI6ImFhZGZhNjE5YmFmYjIxYjVjNzM4YjY1ZDYzMmJiOGIyIjoiIjoiIjo2NDoiYWQ2ZjUyZjI1YWVhMWM1NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDliNGViMDBhYzAzZmFiYjUzMDRhYzM4NDE0Zjc3ODJjYjAxODY0MzZhNGI5MDM2IjoiIjoiODA5OTM5MjYwMTE3Yjc1OWQ4ZGFjMWE2OWMyN2MxMmEiOiIiOiIiOjY0OiIxZjdkMGIzMTA0YWFlNTBiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNTEyOGY0Y2Y5MWQ1M2IzYTUwZTliNzZiMGIyN2RhMzNjYmQ0YjkzNDlkODk0MTMiOiIiOiI2NDQ5MDlmNWZiY2Q2MWQ4NTBlNDNmYmVmMWZiNDU0ZiI6IiI6IiI6MzI6IjJkZGJmNzA5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYWM3YWIyYWRlN2E4ZTM5N2Q2NmJlNmRjNzY3MWYxOWNkMzlhZDY1NDkwZjE3MTIiOiIiOiJkMTUyMzU5ZDc2NWY0MWRkOWNhYmY1YzhmMzdjZmQ4YSI6IiI6IiI6MzI6ImE2ZTRlMzBkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOWMyZGU3ZTNjNzRiN2UzMTg0MTNhMzI4OTJkNGZkMDcwZGU5ODgyMTU4YmJjODIiOiIiOiI2MzQxMGM4M2ZhMzYzYTYzZmE3ODMwM2I5OTk0YjZjNiI6IiI6IiI6MzI6IjQ5YzUxNGFjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjZlYmRjMjMzMjI3Njc4NGE2OWI2YmIxMzcxNjEyMTBiYWM5ZjFkNmEzNmQ2YTRjIjoiIjoiNjQ3ZjQxYjYwYzZhNTc5MDg2YmE4ODU0ZDA0MzQ5NWMiOiJkYTI2ZWViZDA0YzI3YmJlN2ZhN2I1NGI4N2QzYjcyMjdmMDU2ZGQ5YzA4NWZhYmZjYjU5ZWM2NjVhMjU3YzZkZTY4ZmQyYzFjNTFhYWQ1ZTYxODhlMDJhNTZmNzBhYWM0OWJhNDg5ODAyMjQ3Y2EzMjdkZTU3ZWEzY2ZhODdlNzJjYWU3ZGQ4MmI1MDM0MWEyMTMzYjAzY2QwMDI3MjE2ZmNkOTRjZjQzZWM4YTQ4ZTFjMDQxNDViNTk3OTI0YjM3Zjc5NzdkYjNmZjIzYjhlZGM5MTMzNTcwMzdkMGZlMDJhZmUyYmJhNmI5MWUyNzU1NGVkYmZiNzdmNTFjYzQxIjoiIjoxMjg6IjQyMGIzMjBjMmQ2MTZhMGIxMWE3NjA1YTg0Zjg4ZTI2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjZiMDRkODQyNzU4MmIwNDMxOGZlZmViYWMyYTIyOThlYzNjZTYxMTQ2ZjM5YTM1IjoiIjoiOTlmMzQ0OWM4NTM4NDE0ZTdhYjU5NWI5MmE3ZTZlMTAiOiJlZGZjMmFhOGVkOTFjZmMwZTExN2ZjOWUyZDFiZmU4NDNjN2NmMzY1YTJiNmNhYmQ0MjU5Njg2Y2Q3YWVkZTljNzQ1MzYyMzk2N2EzMGZmYmQ1MmIzMGZjMjA1MjA4YmIzNDZmZmM3MDU4NDQ3OGY1ZjM5YTc5ZDQ5NzFlZDcxY2MzZGQwMjAwYTg5YWVmNmFlY2RhMGExZjNhNGJmMjkyOWI3YjllMTQxYmUwZGRkMzY3MWY3MjdlNWU3OTNlZjA4NWY1MmVjYjc3YTI2NmI5YTAyYTJjNzAwYjYzZDhjNDNkYTBiNTY5NTEwMjg1ZTk4YjUzMGFiY2RiZjc3MzlkIjoiIjoxMjg6IjA5MWNmYzM4YjI0ODQ2MGVhZmIxODFhYjU4NjM0YTM5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODJjODE5N2U2NjQxZDA4MzI2MzllMmIxZDc2OTFmYmFjNzk2MThiMmY1ZGI0NWJmIjoiIjoiNjllMWEzZTVlZWQ1NGJlZGM5NDE2NDZlM2FkMjVhNmMiOiJkMGZjYjRmNGQ3NjRlZmMwZmI1MmM4MTA4ZTYxYjY3YTEzODZmMWExM2MxNzYxOTQxY2M5YTI4YzZhZDE1ZTc4NDc0Y2QyYTY1YWU5NDc1ZDcwZDljODQ1ZjE0YmY0ZDJiZDJiYzQ2YzI5ZTUwN2EzNDczOTE4MjllMGYyNDQ5NWIwMjZmNjgxYzM4N2IzZTZhZWM4YWNmYTVlY2FmNGMzY2ZlNzk2YzIyNDY5NDc4ZWU2NzQ0Y2YwNGEyMmU2YWVjODI0ODlmNTMxMDk1NTFmNThjYzY2MDI5MzNkMTc4MGI4YjQ1YjkzM2Y3NmE5NGVmNjUyYThjZThiYWMyY2M2IjoiIjoxMjg6IjhlNzQzNDNhZThjZjFjZGRhNDk2OWMxYTk0YWFiNWNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWEzNDliYTk2MGIyYzhmNDliN2U1MzE0OTExYmE4ZGUzNThmMmU3NGNlZGRmMTI2IjoiIjoiZjU5OThhNjJlYzUwN2M1ZmU1YjI4MGY5YzU3YWM2MjYiOiI3ODQ0NWVjZWVjZjJlNmQyZWNmMjU4OWZkMjRlODU0YmVkM2FlY2M2M2FlZjkzNGFlYzlhZWE5M2RjYTk1ZDU4NjI5MDAyYTRiYTkxZTliZjZkMTJlMTNmMGE4NDQ5NzdiM2MyNzAwNjQ1MjgxZGI1ZGUzODFhZGJjY2QzNGE4NDM0NmE5OWYzNDg4OWJkNDZjNzViMTk1NmUyMWFhOWY4NzY4NGFmNTVkN2ZkMGRlNmRhMDdlODU2ZDliNzkxYzBhNDVlOWUzNzg4MTA5MmY2MDQwYTlhZTlkODc3NTcxNDJkM2M5YzdmYzZmMjVkYjBlNWI1ZDM3Nzg2NWVjNGRhIjoiIjoxMjA6IjRkN2VhYjBhMzcxOWZhNTNlNTUyYjllNWE4NWJkZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjAxOWFmMDNkMjMzNDJmNzkxNmUzMjliNjg0MzE2MWU1NjZhYTg1OTQwMmNiMDdmZiI6IiI6ImM1ZmQ5Njc2NWZjZjZkNTFlMjNhYzZkMjA2NzQ0YWYwIjoiZjk4MDhhZjM0MDMwNTFhNTJiNjY1MmRmMDNiNmIzN2Q5MGE0NzFiYzI0MmM0MzZjYWI2YmE2OTkxMzllYWFkMTY4NDc2NjUwOTM3OTg3MzFiOTk2OTcwOTI4NzE5OTIzM2M1ZTc3MzUxYzVlNDJiMTU0NTNiNDE3MTIzN2E2ZDE2YWVlNjM3NzNjOGMwZDczNmIzYThiZjM4Y2NmOTIyZTU2MWM0NTY2ODJmYmMyYzcxNjFkYTNiODk1MjZkOWRlMjIyMzUxYmJkMDRlY2Q0ZTg2ODBmMjZkNzBmZTU3ZDU3N2VhMjg3YjE5OWJlMWJiYjhiNzYzMjhkZGVlM2QzMyI6IiI6MTIwOiJmZDM2ZmFmZTRmNTU3MWZhZmI2ZWNlNTliNzczODEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmYWIzOWFkMjk0NmIyYTM0M2Q3NmIxY2NjMTkzOWNjZTdhZTNjZDdiNmVhMTg3YmMiOiIiOiIyNDdiYzcxNDQ2NDg5ZGQzNDk1YzRkZWU4YTA3MWM3NiI6ImNiMmMwNmZhNWFhNTRhZDA3OTc0MWFmYzU2ZGJlZDc5MDYxYTAyMDQ1YjZjMDk5ZDBhZTJkNzg4M2I3OGM1ZmUwOTYzNmNjOGE1ZGJiYTBjMGM3NmViZmRiODEyMTc1MjZhZmJiZTA0ZmE0YjJiNzhmMzM1NzAyNTkzMGIwZjk0ODgzNjliZjNhYTA4OGEyMTA3YmZiNmM0YmE3MTRmMWMyNmQwMzgwZDY0N2FkYTU4NTJkMmM1MzkzMDBhNDc3OTI5NTQxMmIyMDJjM2NiOTc3YTdiOTRjMjRjNGRkMmE4OTFhMjAzNWYzODgyNTdiODRlNWIzMWJkYzg5NWYwNjIiOiIiOjEyMDoiNjVlMWFhZDIxNGY0OTg4MWEwNjdkOGIzNzJhYjZkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTdiNTI2OTdmNzJhZTJkZjYzNTQ0MTBhNjlkYzNjNWYyOGIzMWU2NjE3YmQ3OGMxIjoiIjoiMGQ5NjcyMDUyNjQ5MWQxOTZlY2E2NjQ1N2UzYzllNzEiOiJjYmRmZGIzY2M3M2FlZDQyOTdmZjlhYmE3NmRkOGNhNGQ4ZWZlMTFiMGY1MjFmZDcxNzBmMDc0NjFjNzg4NTI1Mjg3NGIyZmY4ZmQwNWEzOTQzZWNkYzgyNGZmY2VmMDM5Njk4MGViYmRkYzBhNTNjNmM5OTA4NmMxNGZjODA2ZDkwZDM1MzQ3ZDQ1ZTU1NmU5YTU1ZWNjM2E5ZmQ3NGM4ZTVkYmQxOWVkOGI0NTJlYWViNjczODE4ZGRjMDY5NWY1NmRkZjNiMTM5YTNkZjM3OGZjZmU1YjZjY2ZhMzU4ZjVhNWJjZDE1NTBmMWQ5ZDVmMzI1ZjE1ZjlkY2QwMDdmIjoiIjoxMTI6ImYwYzQ5OTYwZTYwZmI2M2VkYmI1MGJmZWJkOTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YmY2OWVkMDYyNzExMDdlMTFmZGYwMTZlZGM0YWFmYjBlMmQyYWMwNWJkYmM0NmYiOiIiOiI1MGU2NWFhMzM4Y2ZlODU2YzgwY2JlMTMzMWI0NmFiZCI6ImE3Y2FiNGUxZTU2ZjRiOWZjY2NhMDhkMzc5MTU2MGU0YjZjN2NlYjQwYTEwYWRlYzA1MzY4NjFjNWM0NmZjM2ZkMDZjMGE4ZWIzMmM5ZjE4YzQwNDYzYjBmMDZjZDAwNTNlNjE1ZGZkN2NhZWIyYjM1M2IwOGFkNmRhMWY4YTIzZWJkZGYxNjUyNGQyZWFlZDcwZDRkN2U1NjU0MTJkY2M5NTk4ZGY3ZTEwN2JlYjQ2NGIxMDNjZDhkZTkzMDFjYWZlOGIwNDIwZjBjMTU2MDI1ZDcyYjczZDZlMDE1ZWQyMzEyNTM1ZDM1ODk5YWVkNzNhYTU0Mzc0Njc0ZDdmMDIiOiIiOjExMjoiZDdmYjlkNzhmZWRlNzc5ODE5NDhlYjAxM2VhMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNhYTc4MWJiZWQ0MWQ3YTFjNTZkNDc2NzNmNzRkNDMxMGEzYmY4YjEyNzUwMzFkNiI6IiI6Ijc3OTVkYzA0MjYxZDk0MzMzNjdmNTFjM2I4N2JmMThkIjoiZjQ0ZDc3YmQ1NDFlMDJhNzM3YzY5M2ZmM2VhMGFkYzA5MWZmZjE5NjZhNTkzNTI0ZTY4OTU0YTJkN2Q2NmE0ODE5OTM2NmE1YTYwMDMzMWNmMzkyOTY1YjVlYmVkYmY5NDkyMDM5NzVmYTlkYjUzYjcyNTg2NjE1OTc1ZThhN2I4NGUwNjMzYzZjZjY5Y2FmNDgyZGQ3MmIyNmIwYTU2ODdlYzcxNjY3ZTdmNmU1YWJlYTg5YzNkNjlkMmRjNDJhMjQyZWY5NTllNDAzOWJhNWIyZDIyYTNlNDg0MjRhNDMxYTc3ZTgxNjYwNDc2OWQxM2I3Zjg5MmUyYjMzZmNkMiI6IiI6MTEyOiIzODY5MzBjZWQ5YTQ2MDk3YzBkMWY2ZTY1YzYyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWIyNjhkZTRmZjY0NGNmYTQzNjFmODAxNDY1NmQ1ZDRkZWNiY2Y5Y2VkZTg2MDVjIjoiIjoiNDAwOWJiMDBhZmFkMDI2Y2JhZDExN2M2MDQ3ZjRlZDgiOiIxNDBjNWE5MzI5MzU5OGZhYjg1YjM5NDhiNTNlMGJhMTU0MzhhMGI5NDhlOTEwNDFhMTMxMDRmMGFkMjYzYzhhMTA2MTNlMjBlODdlZjI2MTk5OWE1NGQ0NjliYTZmMWFiZTU2ZWMzOTc5NjIzZGY4NTIwYTA0NzY4MDE5ODdjMTU0MTBlYzI0ZjVhOWJlNzJhY2ZjYTcxZThjNTkwNGUyZWE1ZjhiMjJiOGNmNDA0YjlmZDUzM2FhMzdlMzNiM2Q0Y2Y5MTU5OWNiYjNiODVlY2RhNGFlYmFhMjdhYzAzNjVkZjgzMTJjMzk5YmExNzY3YzQ3ZmUwOTIzZjJjNTNlIjoiIjoxMDQ6ImFmMzZiY2VlNzU2MWNkN2QwODYxMDg1ZDU1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzI4NDNiZDY4OWNjYmJhNjBjZTk2MWI3ZGQ1MDYxOWE1OTIzNGRhZDk3NTY3ZTM5IjoiIjoiNTVhNjhjYmFhNTc1NWQ4YzY3YmYyNmYwM2M1ODYzYzYiOiJkNzk4MGFiODZjZWI5YjY2YWIyNjViNjhlMDc4ZGVkZGY3YmEwODRiODk2N2MzMjI3ODM5ZThmMzFjZGNmYmJmZmEwMDQ5NTNmMzU4MmVhOTI3NGRjZjQ2ZTNhZDdlNzc0NGE1NzZkZWMzN2UwY2IzNmZjZWQyYjJjMmZjZjQzMjhmNTA2MzAyZjU3NDFlNjk2Y2UyNWM0OTQ5MmUzM2M2YTBjOGFlZDVhZjAzY2RjMWEyNjYzNTI2MjNjNmE1MmE1NTVjZTkwNmY2ODRiZmQ1OTdiNWUzN2Y2MGI1MTc1YTk4MTA4OGI5ZDhiOGI1NDkzZTRmYzFiZmVjYTY0Zjk1IjoiIjoxMDQ6IjY2Y2NjYjdkMjhkM2ZhNzBiY2UyOTAwYTg0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjQ1MWM1ZWRmOTg0OWEzOTA0ODZkZmVjYWQ0MzdjYjgwOWMzM2QzMWY2ODk4YmEwIjoiIjoiOWUyZGQ1MmMwNDY1MWNlZWE4OGNhZjRhZGZiMmU4ZWUiOiI4N2I4MDRkNGE4MWRjMjAzZDY3YTkyYjRmZGVhYjk1OWMyMDU2ZGNlZGIyOGQyOWYyMTZmOTE3MjgxN2JjZmIzZDIyNTZiYzFjOGFhYzIzZmViMjJiNzFmMWZkMDJlYTI4Y2RmOTE3ODU5MzE3NTBiYTQ4NjVkNjcyMzQ1YjUwMDFiMWFhZGU0ZjZhY2M3ZWRiMDM3NThkMjU0MGU2NDcyYWZmNTBhYjNlYTYxYTBiOWZmMzdmZjdhODdiOTEwMTNiMTQ4NjdjM2U0M2NiMDk3YTkyM2U2ZDhkZGIxZjUyZTRiZDk0MGI2MGQ1MDBhNGUzNWJmYTkxOTM1MDY1ZjI2IjoiIjoxMDQ6ImUxOTJhNDlmNWYyYjIyZmEzOWRjZmE1NGM4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiZDAyZmY4Y2I1NDBiYTU3MmFmMzQzMTU5N2JkZjNmMjNlNjE2NjVmOTZhMTliNGYiOiIiOiI3MTk4YWYzZjU5NGE0ZjA1OTdmNDVmYjU5MmVkZWY1MCI6ImVmMDZkZTQ4YmQzNGYzNjJmZGI0MjVjNmUzNWUzN2QwZGZhMWVhODc0ZGY3ZDIwMWI2YTFjMjViNzM2Yzk2ZTNjYzhlZDA5MTU4MDdmYjdlZDc1OTQ4MmNhNzAxZDI4YzA4Y2JmOTU1YmUyNDRiZjg4N2RmMzczOTRkMWNhNGQyZTdlYWNlMGRjNjFjODA3YjcxNGYzMTYxZjlkN2Y1NTRjOWY4N2FkNjc0ODQ5YzEzNjEwOGNmZDhmNzc3OTk3NjU2NDg5ZDNlOTkzYWFkNGE1MWI2ODYxNjA4Mzg3NjgzMmIzMDg1YTVmOGYxNTRiODNlYTQ0NzAyYzcwZjI5ODAiOiIiOjk2OiI0MzI5ODI4MWNkMjdhMzZlNWNiYWM0YjkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjllY2FiNGE0YTlkZGE0MzQ3N2M5OTNkNjM4ODM4NzQ0M2M2NmFjMjUzMDcxYzUwNCI6IiI6Ijk1MjNiMjcyMmI5MjdkYzNhZmNjNWY3ZGFiMmJmMDMzIjoiZmI4NGUzOGE4NDIyNWM4ZWJiMzA3ZGY4ODMyNWQwMjBhNTg1M2JiMDVhYzdhNzVlZTM4NTUyYzQwYzMwMmQyNjMxODEwODFiMDU5MTg3NzVjZjljZDY5MDViOTk4MmIyYWU5ZWY3OTkzZjI4ZmQ4NzE0ZTg3OGM5YTRhODEwMWMwOGU5ZjEzNTgxZGNmNGYxNmRhYmZjYjlkM2M0NzFjMDA1NjgwNWY1MWU2N2U5Yjc1NTcyNjM5YzNkNmNlNjJkMmY4YWJkNjRlMWU2NmZmYjI5MjM2MGMyMDE1NWU0ZDUyODM3NGE1YTIyZDg0NTM0MGQ2ZjFhYzY4ZDMzMDQwZSI6IiI6OTY6IjY5NmJiNjc0ZTQzY2RjN2Q2OTM0NjU1NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzMzZGY4YzQyY2MyZTcwYWMxOTU2MTVkNDkxMWZmYmVjYmUyNzEyMjMwYzVjMjkyIjoiIjoiZjc2MTM1ZWFiNWQ0MmU4MmFlZGZmMzA5MGExYmE2MDYiOiIwYzhhZWE3NDdjYWNmMmYwZmRmYWYzNjhjZjMyYjEyZGM0OWY1ZGE5YTI5YmVlMzgwZDJkNjQwMzViNzNlZmI1NmZlZjEzYWEyMGMwYjYxMmQ5NjE1Y2VmYjk0ZjI2OTc4ZmEwYjM3MWE0N2RkMjAwNTFhMTYwNWI5ZjVlMTMzYjUyZGM1MTQ1NzdjNTMzMTljOWUyYmQ0YWM3Y2RmMzdkNTZhOWU3MTVlMjc4NjBhMDlkODZjYzIxZDBiOWYwZjMwMmY2YWNmMDZmMmZmMDBjYzZjODc4ZGFjYjhiZGU1MTA4MmY3MDEzMTRkZTdlZmQzNmEyNDZmODBmOGE4ZmI2IjoiIjo5NjoiODJlNmQwYzA3NmM3ZDhhYzA4MzlmZTE4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiYTMzYzI0YzQxYmY5ODM2NjA3YjZkZDA1ZTY2YTNkMTYyOThjODk3ZGQxZDcwYWUiOiIiOiI0YjMwNDIzZGY2ZGU3NmRkNjg0Mjc0YWZiZWEwODlkOCI6IjcxZjVmNmVlN2JiZDc3NGZhNjkxYTNkN2UwZjY5NGE2YzhkZmU4YWFmOWNkNzIwZTE2M2VmNmQ1Y2Q5NDljNzk4ZjllOWM5OTNhZGI2ZDY0ZTcyMjBhYTBmMTczMzFiZmE5YTQzYjY1OWJlMTAxNzI2YTgwZTU1MjllODI3YzNlNGIwNWNmYjRkNzhkYjk5NTJlNThlZWJlNjRkZmJjMGQxYmFmMjBlN2U0ODkwMjIxNTI3N2E0OWVlOTUzMTA4NTI2YTcwZWUxNTBlZGE4NWU2YTBlNDk5NTVmOGM2MzIzNzY2YWUxMGUxM2VjZmRiZTQ4MTVmNGJiNGJhNDM3ODYiOiIiOjY0OiI3M2U4MDAxODIzNWRlZDcwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNzExNTUzOTgwZTNmYzVjMTRjOTg2MTFkZGJkZjQyNjQ2M2Y4MmM2NmRmODNhNzAiOiIiOiIzMzk2YmQ5NmI4M2JhNjExZWQyMmUxMmU4YTVlYzkxMSI6Ijk1MDZmMzRjOTA2MTFhY2Q2ZWNlYTM4NWE3ODJhNTczOWY4OGI0ZmQxM2I3NzU3MGM0ZDdlMDYxNzI4M2U3YjIxNTY4ZTMyYzQyYWRhMWNmNmFjYTFhMmUyYmExODRkNDEwMTMwNmZmMjFjOWQwM2UwZmZkYTQ4NTQ3NzNjMjZhODhhNTE3M2Q1Mjk2MDI4NmMxODc1M2RmMTczNjFiYjcwNDZkMjg4NGVlNjAwZjU4Nzc1MzA0ZjQ5Y2Y0ZTc4MmFjNzBjYjAwYjNkOWMzNDVjZmNiMzhlMzg4MDc0MzAzNDY0MGJiY2FlODMxMTI1NDNjZDE2MjJlYmFlZGIyMjEiOiIiOjY0OiI1ZDUxYTA4NjhhMjE2MWE1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZDY5ZGJlYzdlYmU4MGYyYjViOGY2MWZkZmYxZjQ0MTNmNWY2NjI0MDEwZmI3OTUiOiIiOiJhMmViM2JhNTBkZDkzZmEzNzVjZjY4MmRiN2IyYmM3YiI6ImEwZjljMGRlODZiNTRkM2MxNzZlY2UzMzA1NDYzMjM3ZTFmNzBiZTNjNTJlMmFiMWM3NzNhOWQyN2Q2ZmM1ZGFkZjYxY2U3YTNkMTBkYmE4NzMwZDEyYzMwNmZjYTg5NTI0MDM5ODNiZjI0MmZjMWI2ZWZhYWExNTNjYTQ0NmEwN2QxNmE3MGFmNGNiMWFhNGQ0YzBjOTNkNjQ2ZGMzYTU2MzBmNWE2MTBhYTllNmVlYjg3M2Y5YTA2ZDMyMzQ2NDJiYzg2YjAzYzU5NjIzNWVjMDMwMTllNzYyNDU4YWJlMTdkMzc0MDlhMThjYTViN2UwZTAwODgzOTFkZDNhY2IiOiIiOjY0OiIxYTgyNzg1NWVlOThkNjc5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YWE3MzI4NzlmMjkwYWE0NDIyMTcyMTIxNTY5MjBjNjk0NTdiOGVjNDFlYWIxNTMiOiIiOiJjYjU5MzIyMWM1OTg0NmRjODJmYzBkMGNkMDRhZjNmMCI6IjE1ZDdlYmY5NDk4NWMzNGI3MmI2Njc1ZDczNDZmMGIwNWJkYjhmZDNhMjc4NTU1OTM5ZDI5OTkwMjhlNDE3OWU2OTM1MmQzOThhNWRkMGU1YjM3MGJkZDljYmQyNGQ1NzZiODk3MDljOThiNjE0MmY3MWY1YjFiYTIyNDIyMmFmYjY3NTk5ZmM1OGZlMDQzZDFhOTFkN2VhOTViNTZkYmQwODZkYjhlM2EwNjFiMWJmYzZlODJkYzlhYzcyODE3NGZkMzY2OWQ2NWRiNjJhMDYzODBhNWY3MmMzZDA5MWI3YTFiNjk5ODA0MWQ1NTAxZTlmYmE4YmY5MWE3ZDI3OGMiOiIiOjMyOiI1NWI4NmQyMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTYxYTNlNzhmNmE3NTk0NDQ1NWY5ZDlkMDM0NWUwOGY0NjY5OTcyZjNkNWMyMDJjIjoiIjoiY2U0M2ExOWFjNjQ4ZTYyZGRjNDlkMjQzZmIzNGUyOWYiOiIzOTM3MzY1NTgxMzMwNzhhMDM2N2I4MjQ4YmMxOGM4MzUyZjkyYTkyMTJlOTAzMThhNWI2M2FkM2M0MjJjY2RhN2MxODFjNTY1NjI5YWNmNGZjNzNiMmRlODViYzljZjM4MzEwZmU3MDNhODc3YjNlN2QzYjJkNDE2YWViOTYyZjEwMjcwNzcyMzJjZmEzOWM1ZTUyODRhMWIzMjMyNjQxNzU1NDZkZGZiMjUwY2U2OTNlMmRjNzhhMDQ3OWJkODlhN2FiNDRiNjNlNTA0ODY2ZDJlYzZiNTE1M2NmZDUxZjI5YTkxY2Q0ZmEyYjhlMDk4Nzg3NDdhZTUzOTgxODc1IjoiIjozMjoiYWM3MDEzNzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM0ZDQ5MjkwNGJlY2RlNGU0NmMyNTU3YWM4MzMyNjVjNzE1YmI1N2YxOGNkMDQwZCI6IiI6ImRmNDFiMjJiOTJkNDNhOTZhNzUwNDUxNGI5MmU2NDRmIjoiYzRkZDQ2Y2UzZTQ4NmQ4OTkwMzQ4MmRlMjQ3YzFlN2RmMDU4MDlhMjQ3MzAyZGIzY2E4NDU3YjkzZDY4ODZjMGEzZDFiZTQwYTkwZjY1MDJlYzU4ZDBkZGQ3MTU4OTZjZWUzNzMyMmQ0OGVjM2YwYzNhZDcxNmYxYmI2NzlhZmRjYzBlNGM3OWU1ZTJlMzQ2NzAyZDM0OWVjN2IzOTFlZjdlYWZkZTYxOGJiYWRjZTVkMTRkMjIxMjNkZTYxMWMwNjU3ODBhNGQwNWU5MjhlODdkMTJiNzQ5ODg4ZDYwMDQyMjRjM2U0NTdhY2EwMTkwYmYxYTdmYmEyNDUzNjgwYiI6IiI6MzI6IjdhMjU5YmRhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE2NjYwZjAxM2NlZDc4YTE2NzAxYjM1NDc5ZmZiMWY3YzhjNGU5NjRjMWI1MmI4IjoiZDI2MmMxNWQwOGFlYTQ2ZjYxNGM3ZjhmNmE1NDYzMTI4OWU1NGNhOTdkNjk4Nzc3Mzg4ZTEzN2Y0MzFiYjc4MzYwMWU3OTk5ZTdhZjk4Nzc1ZDdiODdjZTA2MWQ5YmE1NjU3MGVkOGM1OGI2YmJhYzVmMTJmNzUxZmMzNzZhYjBmMTRiMzZiNDBiMmI1NTMzNzI3YmUzYmJjOWE1MTE4MzQwNWQ1ZmQwMTIxMjAxZmY1OTI4MTdkMDY2MTNiNTA0YTM0NDBiMGUxYTU3ZTllZDE3NzE3NjZhOWE1Yjc4OTA1NGY3MDMyZDIwYjIzYzVjMzdkNzdmMjkzYzY3N2ZkOCI6IjkxOWNlYjE3MmQyY2I0NjBiZGIzYjNlNThkZWJlODg5IjoiIjoiNWY1MTI4ZjdmOTQ4ZjBjYzlmYjI0OGEyNGIwN2M1NDI0N2U0MDA4MGE5OTJhY2RkYjI2MTVkOTBlZjkzMjhhMTdiZDVlOWE2OThiMDAxMDM4NTU3MzhhZWE1NWM0OTQ0Y2RlNGE5MTQ4YmZhOGRiMTIyMzMyMzE4NjFjNDU1ZTUyYzk4ODkxMTljYTQwMmVhYmM4ZjQxYjI3MDAwMTU2ZGQyOWI5MDEwMjQzMzZjYjJiNzA4OGViNWZkNTM0YmE1OGYyM2NhZjE0MGE4YjI1NDk0ODYwNzRlNGVkYmZjMjYyZWQ5YzdjN2NjYWFlMjRiZThkZTg3M2FkNDNjZDEzZSI6MTI4OiJhZTIyZWM0YzE5ZTc2MTZhNWI4NzdmMTY4ZmViZDIwMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFiZGI3MDdjMzI4MzA0ODA5YmYwNjA4ODc0YzlkYjM3M2RmM2M3MTA0YTVhNzA0OSI6ImNhMjQzY2FhMTQ1MTI0OTk3ZjVlMmU2YmIyNWQwMjFhMzhkNThkMGFiMWJiZjA2ZDA4NmMyNDE2YzA4ZTM1MTJhYTg4N2NjMjE1ZmRiMzRkMGYyZDc4ZjZhNDU4ODU3NjdmMTVmYzAwYjY4YTRkZjExMzA1ODdkZTc3N2VmYjljZmQ1OWNhZmEwNzc0NzdlOTdlZGFiZjJiZjA0YzlhNmNlMDI5YzIzMDM4NWNhNWY5OTI4YmNhN2ZlNTUwM2IxODc3NDg0OTE5OWQyYTM5YTM3OGEyZDMxNDRhZWY0NDE2YzE3MTgzMTlmZjFiZWQ4MDIxZGQ3N2EwN2Y2MWVhYTYiOiJiN2U3ZmMwZDVhZGFlZDE2MzJjNWY3ZDFmNTY0NThmMSI6IiI6IjkxYzc5NTRiZGQ2YTQ5MzYwZmRjZTExYzFiYzcxMDUxMmJmNWE1N2JjZWYyNDFmYjYzZTVjZWFiY2RjOTY5OWQwYzBkZGIwMjVjNzUxOTVlYzI1ZTYzMTUwN2YxM2UxODc5OWU2YmU5Nzk4ZTU2MzlhZDg0MDFmNjI0NGM1YjBhY2UzOTA1YWUwZGUwOGUyZDBmY2QxOWQxOTNkZTgzOTQzZmU0NDlhZjRiNTAzYTQ1NGMyNDhlNjc3ZDJmNTExMDBmZDliOGI3ZTUzODhkNTA5MTA4OTM2OWE3YzJmZjM4YmQzNTNlOTc1N2VmODczYTg3ZjE1ZjMwMjMyYmFmYjQiOjEyODoiNzIzMzdiZGIyYmZkZDFmMWViZTBkYmE2ZjliN2I2NDkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNmRkMGQ3ZTlkNmFkMWFkN2M3Mzk0ZDUzZTllMDgxYzQzNmQzNGM4MTU4YmJjOTUiOiIyZDk1ZDY0ZWQzYmU4NTdhNWM3OWM3YWYyMGFlZTAwZjE0MjU1N2UxMGQ3ODAzODNmZWYyZDQ1ZjE2YzdlMjgyM2ZmZWU0OTViMjIwYzg3OTcxNjEwZTU2NTBmN2MzZThkMjk2YjNmMDNmYzg4M2MwMDM1MWRmNDhkOTc3MTc0MjcxMDFhYTBjMDhhMjNjNDA4YjI0NTExNjIxYjY0MGMyMTBiMzE2Y2YxN2UzZGZkNzE0ZjBjOWFhOWRkZDk3NDY5MmQxYzJhZTI3YjliYjBmYmI0MjhlN2E5ZGEzYjNjZjliZDg2OWU3MzBjY2FhM2FhNGJkMDhmMDFmODQwMzlhIjoiNjBiNGI5Yzc3ZDAxMjMyYzVkM2Q0YWY4MWJlY2IwZGMiOiIiOiI0NDk0NDYwZWU3M2QzNTEzODE0ZTFmNzc5YmZlM2EyMjliNDkzNDhkNzY0MWU5ZWQ0ZGQ5NTliNTgyOTYwMDk3ZWYwOGI5MTI5MmJiOWRiODdiNGU3MjhkMDFiOTI2ODNmNGNkYzgxMTUxYTY5YmVkMjA5NmJmNmZiMmU0NWQwMTQ4NDA0NDIwZWExNmI2MzFiNDIxZTZmNGM2NjY1ZmUzM2MyZDExZTdiMjJiNmFhODJiNjEwYjgzMjE0YWU0ZDE3ZTY4MTk3MmUzYTFmNzczMDZkM2M1NGQ5NmM0N2Q4YmUxZmIyYzhjYWU4MzAwYWM5ZGI5OTAxM2YyNWE2NWExIjoxMjg6ImQ0MGEyNDZjMTg1MThlYTlmOGQ3MzNiNDIxODExMjNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTllZDc4Y2I1YzEwZGYwNWFkMDBjNmYxZmIzNWI0ZDI4ZTZkZGZjYzE2NDU2ODA3IjoiZTQ2NWU1N2NiYWMwZGNkMWU4Y2NkYTIyMDQyYWJlY2Q5ZDg5YzRhYzkxYjBlODJhNDFmZDUxMTA3YTc5MjA5OWU2M2Y3Y2YyM2E4ODlkOGMwNGVkYWUyYzJiM2E5ZTUxZGJlZTZjM2I3MWFjZTNkZTA4YWIzNTRhMjk1ODg4YmI5OWFlMGZlNDI4ZGQ2OWJjMDEzZDQ5YTcwNTExZWY2MDUyNDI4MjM0Nzc4N2E1NDJmZTk1MDFiNjQ1MmI1ZmFhZDJmMTI5YTk3OTVjMmM0Y2MwODgxZWM0YWY4ZjBlMGQyZDRhN2E2MjhjYjA1MTA1NWZlODMxYjUxZTI1MDYwOCI6IjNhOGFkOTg5YzYyMWFlMWU4MmI4ZDI1NWEzYzk1MDI4IjoiIjoiNjg1NWU0NzAyZjFlYTU5M2JmZTMwZWU2NWIzZmFiODMyNzc4ZDZiMTFhMGFkOTAyZGQzNzM2MWI4ZDg1YWI3NmQxZjJjY2Y3OTI3ZDY5NWViMzEyOTI4NmMyNjczN2I5NTczZTI2YmY2NGIzMWRlMjZmOTc1MjVmODQzNDVmNzNiZGEyODg4YTFmNTNjOWI0MDVhZDYyN2JiZTVkZWExMjNjOWZiMGE0YjdmMTkzY2Q4ZmJjOGZhNGE1ZTVmNjRlOWMwODNmNWMwNDhkNjFmZDFkMzQ3YjQ5YWZkYzY5ZTBjYTZhODJlM2IwNjRjNDlkNWJmZmEyODAwYjVjZmNkZiI6MTIwOiI5NjYxZjVjM2IwZDk5ZDRmNzYyYmRjYWJkNDhkZjIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NmE1YmM5YThkN2M2ZTI4MjI0NTYxNTZjZWE3ZDQ5MzcwMmQ2MWU3ZDUwNGUzYzMiOiIwYTdmYmNhODc1ZmQ2MjBjM2Q4ZGU3ODhlNWMyNzUzNDE2MGY2OGQ2MGQ3MGZhNDE2N2FkZjBjMThlYTI1ZmExZjJjYzU1MWZkZjQ0N2FhMTY2NzhkM2Y4MjE5M2NmNDIxYTZmYTk1MzUzMmEzNzY1YmNiNTQxODNiZjBlOTY1MjdhZTVlNjk1ZWQzYmJhNWQ5OTExZjM2YzFhYTczMTMyY2Q0M2IyNjk4OTk2ZWI0M2ZmODQ0MjBlMzE1YTA2ZDdkYjAyYWVlODE1NDYxODkyYzdhYjkwMjY5NTNjNGJjMjVmNDcxNTNkNWNiN2I5NjZiNzFiMjRkYWQ2OWZhNTY1IjoiMDliNjgxZGU2NjgzNzUxMzAwYzJhZGE4NGEyMTRkMDIiOiIiOiJkZDY2ZTA4ZmM1MDA0MjZmZWI0OTdjMzljNTg1M2IyNjM3NjI3MmRmYWJiODJhYjU5NzgxNjdmYWE5MWFkYjAyNWE2Y2EwZThmZTNkMDRhMGQ5NzA2MmVlZThjYTY1MzBjMzc4OGJlYmU0NDM2ZWNkZDNkOWVhYjk2ZDM4YTBjZjliOGNjNmE1ODRhMGZhY2FlYTMzZWMyZjRhNmU2MWY3ODBjM2RhZDUyNGRmOTAyZjQyMWUzMjA0Y2VjN2M5YTRiYjNmMDg2MGUwMTdlZGRlYjkzOWNkZmJlNmY5MjRlMWVlYmZiYmY4ZWM2M2M1NWI2MjEzN2Q5Zjg4NDVmMzhmIjoxMjA6IjRhY2M0MGE0ODgyZDc3MzNkOGY1MjYzNjVmMjU2MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImY1Y2I1NjRjZGQ2OTc0MjE5ZTg3ZjkzYTAzMGZkY2FkMzUzMTNkNGFkZjlkN2E5NyI6IjIxMGE3OTlkNDgwYjQ5MzNlMTZmY2JlZDYzMjU3OWJlYjZiMDBhZWM3NGMyMDVkYmFmNjRlMmNiMTUyYzEyZjliNjk2OTEyMmYyOTZlZmNmZTMyOGY1NDIwMjQ0NjUxNDA2NjU5NDg0OGY0MmEzMDMxNDI1MDIwYjU2ZDA2NWQ2ZWFmMmNhZjUwN2Q1ZjUxZGY0OTNjMTE1MTQ0MDBiODg5ZjMzZDBiOTk2ZTcyMWViNjEzNTY5Mzk2ZGYwNTI4YWExNGVhZWQxMTdkYmI3YzAxZDljM2FjMzk1MDdlNDJhMTU4NDEzZGFiODBhYTY4Nzc3MjQ3NTEwNWVhYmNiYmYiOiI5MGY5MWRhNTIzOTY0MGE3MGVlYzYwZDg0OWQ5YWU3MCI6IiI6IjY5YTNkY2Y1Yjk0YTUwN2E1M2ZhNWU2MmNmY2EyNjk0NTM2MjNjY2QzYTUzN2Q5NzExMzBhMjFiZWU4ODRjZjI3MWI5ODMzZGVjMTk4NjJhYjBkZmU3MDUyZTdkYzA3YjIwZjM0YWFjNDJiYzM5YmYxZDQ5NTM2MGMxZDcwMWVhNTNhOWJiYTY0YjAyOTYyYjRlZjY0ZmIxYzkwYTFhMmYzYTZmODFhNmJhNzgxZDVmMjhiNzg2ZWZjMzY1ZWM2YTM1YzgyNjU0NGFhYjk0YjUzYjk2NjEzZmRkYjY1NjYwZGQzMzZhY2MzNGEyMTc5NjBmNmMyMmI5ZmU2MGRkZTEiOjEyMDoiYjY3NDk1YTg2M2ZmZmNjNzczMDIxZGM3ODY1MzA0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGMyYzVhMDIwZDNlYTczMTM2MmMyOWQ1NTljYjE0YWE0ZjhlM2Y2YTU1NGE1ZmVlIjoiOGNmMDk4Y2I2YWQ3OWUwZjBlYjRjYTg4OGRhMDA0ZGZlNjQzMWI1OTgyYmYxNDkwYzVmMmQxNDg2YzI4OGI1ZDUwZWEwYTVhNjNjZjlkMDk3YTcxMzQ4NjMyMzkxYjRiZjk2MmJmNDY0NDE5YzJjOTcxZTc2YzAzZWVkZDA5ZDA2OWEwNzBjODY4MzdlMTZhMmMzOWEyY2I4ZGUzZTJkM2YyNzRlMDM5OThhODc0ZmE5OGRlMDkzM2IwODU2ZTA3NmU3ZjU3NWYzNTFkN2VjZDAyNDc1Mzc4MWY1MWVmNjAwNDA1YjMwNGUzN2YzMjY4NDZiODQ2OTI0NDhkM2YyZiI6ImJkNGQ0NWQ5NzAwODVlMGIyYmZjOTQ3N2Y1Y2QwMjQ0IjoiIjoiZDQ0YTRmZDMwM2U2NTc2NzA2MzJkYThkZGRiNmExMTdmM2UzNWQ4YWZjZTI0NWU3ZTY1NzY3MTFjNjYzZjM2ODA2YjgxM2JhNjQyMWVmOTc4ODY4MWQ5NzE3YTM2ZDNlZmY0YWUxNzg5YzI0MmY2ODZkOGNmNGFlODExNjUxOTEyMjBlMzM4YmYyMDQ3NDRjOWZjNzA1NjA2ODNlYzA3YzIxMjg0NmQyNTdkOTI0ZDVmYzQzYTNkNDI5N2FjNTQ0MjhhMzJjOGJiOWQ1MTM3ZTBmNGFhYTQyZGY4ZGVjMzc3OTNmMzk2NWNhNjU4ZjIyYzg2NmUyNTljODBiY2M1OSI6MTEyOiI5YzFkNmM3MGUxNDU3YThkNjdmODFjYjNkYzhlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTY3Y2IxODRhYjZhZDE1YmUzNjUzNmY1MDVlYTU0NDdmZDk5NmIxZDlhMDkyZWYzIjoiMGI2ZWMwODY4NWI1YTlkMzIzNDZhNWZhMjVkMjA4MTM2NDMzMjA0ZjNiODYxODJiZDFkOTU3OGYwNjM0ZGNiYjViNTk5MzdmYjg3ZGYwNjc5MzM0ZDdmNDFlYjhiZWM2MGFlMWI4Nzk5NGVkMmNmZGRjYjU2ZTk1YTZmYjRlM2FiNzg0NWIwMjk0ZTRhZmE1YWQ0NmViNWE0MzFjYmQ3YWQwZWIwNDczYzQyYzA2ZjNmNjJkZTAzZDEwZGRkYTQ0OWQ0MTEzN2M4MDEwYWY1YzdjMGVhYzdhNWZkZTVhMzliNTQzN2EyMzgyNjM5ZmUzMzg4Y2UwMjlhN2Q0NDY1YyI6ImI1Y2M4OWExYzEwMzI5YmI0MTdlNmI1MTkwOTFjZWU0IjoiIjoiN2ViZTRhOTU0N2ZiMTE1YjM5YjA5ODgwZDZmMzZmOGNkNDAyYmI3OThjNmQ5ZGIwMzZiMWViZDhiODdhOGU5ZDU2ZmMyM2I3YWU0ZThjYWMzNTAwYmYyZjczOTUyYzM3YTA2OGYxZTQ3MjM2OWI2MjMxOWE4YjFiYzA4NWE1MWZiZTQ3ZTFjMzIxZGQxYmEyYTQwNjkyZWNkNjg3NjJhNjM0NjdkNWVjYWQ2NmEzZDcyMGE4YTgxZTAyZGFjMGViZThkZjg2N2UyZjdhZmEzNjdhYTI2ODhjYTczNTY1ZTU1Y2YyYjAwNzJmYTM2ODE3NTBkNjFlOGU2MDI3NWFhZCI6MTEyOiIzMDQ1NGRhZTc4ZjE0Yjk2MTZiNTdmZGM4MWJhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWJjN2FhZDRmNGJkNzNhY2Y3NTYzMTFmZjFiNzJiNDE2MzEzNDRiOWI1N2NmNDQ3IjoiN2NkZjA3ZTE3ZjY2NzIyN2VkYzk4NjgyN2Q1NWJiODAzYzZlNTFmOTNlNzJkOThhMWNiZDE2MWI1ODE1NWExYzE0Y2E1NGQ1MjI1NGU1Zjg4ZjJhMDg2MTRkZjY4Y2MzN2Y2ZTlmYWM4ODg5NWI1MzA5MGY2OTU0NGIxOGFlZTRjYzAzNzYzZDM1ZTdkZDk0ZWQ4MmQxNDM1MzE2ZTdlMDIzNjdiMWM0MzUwNmIzY2NkMzFlMjQ4ZGNlODFmZTYyZmRhZWEzYTBiZmJhMDM0NzdkNWMxNTFiMGY3NmYwOTc5OTA0OGQ4YjIzNjk5ZDAwMGE5ZGExMTI4MWVmZmZjMSI6ImZmYThlNzE5ZjI5MTM5ZDEyZjc0MWYwMjI4ZTExZGZlIjoiIjoiNmFiMzA0Y2I5ZDFlZDY3NTM4M2ZmOTVmN2Y2MWZmYzJhYTczYWIxYjlhNjkxYmI4NDc3N2IxNGM3MDE0ZTk4NmZmYjkxZGE2ODQ3ZDNhYmMwMzQ5YTdhYTA5ZWQxZDg2ZjJkYWJjMDllMGUyNWEwNTgwMGJkNWQ2MTZjMWE2NjViZGIxMTllZjcxYmFlMDY1ZWQwMTlhZWQyMGFkM2IxMzI2MmE5MDJmMjRjY2I0ODE5ZGM3MTQxOTk5NGE4YjQ3NzRhM2I5ZjRmNjcyZDMxYWFlYzk5N2NmZTM0MGQyYWJkYzM5NThjNDEzNzNkMDMxNTA3NmQyMjE4OWViNTA2NSI6MTEyOiIyNjBjY2U3ZDVlZDZhODY2NmM5ZmVhYWQ3MDU4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWJkNDdiZWEwOGVhYjg2OTRkZWZjMmI2NmU2MGRhMWJlNDBmYzFlMzk4MjI0ZjliIjoiMDgzYWQzZmU5MjczYjgwNjNlMTQ0YTAzZjg4ZmIxNzliMTgzMjdhYmEzNzI1OWQ3Zjg1MzIzMDMzMDZhYzlkMThjZmNiNzQ2Y2FiM2Y5Mzg1YjViYjY4NWZiYzRhMjUyZGRhMjY4MDQ0NjQyZjVkYmUzM2VhNmUxNjM0NDQ1MzExZTQ0MGM1NTA3ZmE2YmVhZWQzNDNjODNhZWIwZmZjNGYxY2JhMjFiMzlmMGZmNmVkZmZmOTYxYWVkM2FlMTc5NmY4YmZlZWJjZDMzOTJkOTJlMjZkZDI2YTE5YTdiN2MyZTU5MTBmMjI1NTdmYWQ2MDBmOGNjYThhYmE5ODhkNCI6ImU0NWE1MmM1ZTVlY2M4N2I0MzIwODY0YjM4NjgzNzc3IjoiIjoiOGZhM2NkOTFmYjkzYTM0NmUxZjk1OTUwODhjNTUwM2E4NDBjN2Q3YzMzYWExYmUxNDdlNDg0ZTJhZWYyYThiZGE3NzI3NTM0OGNhNTk4MTBhYmVmNmUxNzk4ODhmNjc4MTg2Mjk5MGJhOGU2ZDk2YWY3MGZlYmQyZjY3MWEzYThkNmRjZTliZTQ2YzFjYzZkYmZhYWUzNWMzNWE3MDczMjA1NDExY2M4YWI0ZGRkMjY2YjMxYjY0ZWRhYjRmZmVhMDc2YjI5ODAzMTQ5ODUwY2NhNDFjODU3YjA1YzEwMTQ4MTgyZjhlNzI1MmU2NzA2OWU3NTE3ZGE1ZmMwOGVlMSI6MTA0OiI5ZmEzMzcyMTk5YTI0ODRmODJjMzMwMDkzZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg1MGE4MTFjYTE4MDQ0ZGVlNDQ4NzcyOWU2MTljY2E3MWYwNWE1YjE2NGRkMTI1MCI6IjZlZTc2NzEyZDBiMWZjMDBlNDNjMjMxMjc0M2E4ODFlZDk1YTBiMDYyNzZjNWE0ZDkzZTNkNTY3MzJhZjZiMTJjN2MwZDFhYTZmZmFlYzU2MjIyOWI2NDQzZTU3NmNhZWNmZmVhZGQ5YTY1YjkxZWZhMWJmZTQ4YWIxZWNjNjNjMzgxZDAwZmU4ZGM3ZjExMzY1ZjJiMjg5NDVlODQ0ZTdjNmNhNjA5NzJmNzMzYTk2ZjI5Y2MxMmUyNTljN2NmMjllMmM3YmJmOGY1NzJlMTU4NzgyYTQ2MDkzYzU3NTQ2NTZkMGYyZTFlMWVhMmEwYjMxNWI1ZmEwMmRhZGY0MDgiOiI2Zjc5ZTBmNjIyMzY3OTBjODkxNTZjMTRiZDk1NDBhOSI6IiI6ImViMWViZDc4ZDdhYzg4ZTZmOTI3ZTA5ZmVjZjdmZWIxYWE2NGQ3NDM1YWFlNzZjYzkxN2VkZDllMDYyNGE5NmU5NDVkZjY3NjQ4YzE4N2UzOTc5NTRkYTdiMDg4ODAwNWY3YTBkMDVkMDlkZTQyNGMxYTA2NDhiNTY3MDdiOTBkYTQwMjFkNWEzNjE3NTUwMDMzN2U3MzQxZDFhNDc0ZmJhYTk0ZTU2ZDdlYTUyMTU1ODI5ZWI2YmI5ZDk1NDU3YzEzODg3NWYwNzM4MDM0OTI0ZDU5NjgxZTdjMmRmZmZiN2RjMDk1OTY5NzQ2OGVhMmI2NWE4ODRjODk3MjA4YWIiOjEwNDoiOTFjNzRhMzBlNWJmZjViMjU4NWFjNzY5OWUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MTQ2OTgyOGRhZmQzMGRlNDE1MDY3MjM2ZDVmNDllYTE0ZTgxMzYzN2YxZWUwYzMiOiJlM2FhYzAwYmQwNWNlM2M5Yjg3NzIwZGI4MjEwNDM2NGM4ZWY2ZWYyNWQ2ZjNjOGJjZjVmNzNmMWEyNmY4NjE5ZTgzMWJmN2JiMjhjNGRjYmFjNzAxM2RjNjI4MmQwN2NjMjI1YmQ5NjljNTgyYTI2YWNjZDdjZmZmZTg3OGEzMTU5YTVhZDNjYjZjOGI4OTEzMWFhZGE2MWUyOTYwY2M1NDMxZjRlZjk0Mzk0NjM0ZTRjOGIyOTM4NDA5YmNkMmU3NjY4OTg2YzdjNWNkMmVkNWYyYzUyNWZhMDIxMjk5Njk2MGFiODQyYTQzODY5ZWQ0MzBkMzI5MTc5OWEyYTFlIjoiY2I1NDA5YWFkOWQyMjdhM2NmMGUyYzVmMTAzMTg3M2UiOiIiOiI0YWE4MmIxYzgxYTkxMWNiZTg0MjMxY2U3YWZiOTUxODhmMjE3N2I1MzlmYjc3ZGU2OGYzZDQ4MDFhMmJkMDlmNWVlMmY3ZTU5YjVkOWU3OWJlNWY3YTIzZjA2MTJhZTM5ZDU5MjU5ZGFiYzhiMWJmN2RiZDRhZGMwZGI1MjBiZjdlNzFiOTg4ZmE5NmQ2YjRkZmM3NmFmZGMyMmVhMzFmNjRjNjQzODhkZDkzYjI3NTE4YjMyNjNiMGExOTAwNzQwNWZjMDg2NDUzNTBhNjllODYzYTk3ZGQ5NTJjOGQ4ODZiNWUwZjQ0NGE2ZTc3YTllZjdjN2RlNTRmNDA1YTA0IjoxMDQ6IjJhNmIxNGM3OGJjYjZlMjcxOGQ4YTI4ZTQyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YjY5MDc4NTNiN2Q0YzRhMTk0NjgxMTFkOTZjNWRlMDQ4MjAwYjU0NDFiOTQxMWQiOiIzNjIyYmEyNTJjMDY3Y2U3ZDZjYWUxZDFmNTA2OGU0NTdhMGNmOTNiZTAxZmRjZTZkYzg2NTJhNTMxMzVkNWVkNDQ1Mzg4Njc5ZTNmMzg4ZWU2YTgxMjIwYjE5MzU2YjI3NTg3OGZiY2MyYTY3NTFiZWU3ZTJhNTBhZGI3YzQzMGU0YzhjYWUwM2U4ODQ2NWY5N2JjYWViMTUxZDRmMDAwN2JlZTZiYjk4NjRiMzMwMjA3MTdhZGM0MmQ2ZjhhMjgzYTIwZjZiNjJlYzc5ZmI4MDYwZTNlNWVjYzFlOTFhMmVhZWY1N2U5ZGFiZDNiMzYzNDIzNmYxMmQ0YmZmNDc1IjoiYTY2ZWU2NGMxNTA5NGJlMDc5MDg0Yzg5Y2IxNzM5YzEiOiIiOiIyYjhjMTQ5MGUxMzg4MWFiM2JhYzg3NWNiZGI4NmJhYWJlN2ZhMzA0NDViY2IzOTMxNWQwNTcxNzFlODBkMDJhYTg0NzEzNTVlODBiYTg5MWIyNmQ4MGIzNzU1MDhiYTI3NTYxNjJjYzY4ODU3OGJlMzEzYTUwMDk2ZDdjZDYyNTNhODA5NDk3MDg5OGZiOTljZDI5NjdlNzhhNTdkMTJiOGIzZTNjMTA1MDI2MzRiZWFkNWJmZTJjOWRhZDMzMmZjYmRhMGMxYmNhMTZmZDVjYWM3OGViY2JjN2YxNWFhZDhiMjhhYmYzZWQ3NGEyNDVhOGU3YTg1Y2ZhYTcxMmFiIjo5NjoiZTUyYWYzMzk4ODg1NWQxYTMxMTU4Yzc4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTYzZTI0N2U4ZGU4MzhhMTk3YTllOTM3ZTM0YzBmNWEwYjI4MjUzM2Q0NDUwMTUiOiIxN2M1ZDc0OGI4NTk2OTAxZTk3ZGY2NjBjYTk0ZmM5NzBmN2ViYjc2OWFmZjg4ZjYwYWNjNDI1ZjUwZWJmYjY3NDRjNmQ4Nzc4YzIyNmM1ZDYzNjUzZDkzODhkM2ZhMGQ0ZDYzMGY5NGQ2NjhmMzQ3OGM4OWUyNzA4NTAxZWRiMTIzMDdhOWIyMTg5NTc2Y2JjNzkzODhkMjkxMzU0Y2I5YTVkMWVhY2U0Y2ExZDlmNzM0ZmM3OGU1NWVjYmY4NjMzOGEzMWViZTU4M2NhY2U3NTJlOGJhZmQwYTgyMDM4NDEzNjk2M2ViMmQyZjRlZWE3YjJmNjk1OTc3MzdhMWNhIjoiOGUwMTgzMDU2NzVjMjg3ZjgwMmYyOGZlNTZhZTVjNGIiOiIiOiJjM2QzNGUyY2YxYzNhZDYyOTQ5MGQ3MGEwZmVjMWE2M2M4OGQwMjVmZmVkNDZmZjhmNWQ4YzA4NzljMTY2YWQ3MTZiNzAyNjgyY2QwYTQzN2JkYWEwM2E5YjJlNjlhMzJmYjcyNTliMGZhOTMwY2E3YTM0NGFlYTM3ODg2Y2M5ODUwZTQ0ZGUwYWEwNDliOGJjMzAwY2FlZTgyZTI2YjJhMWU1YWI0NWM0YzdjYzZhMTVmNWY1OTUxOTk5OTlhMGNhY2FhNTlkYTFiMmJlMmEyMDRmZTEzMDA1YjkyY2U3MjJhMDAwMjI4NTQ1YWU4YTYxYjJjNjY3YTM4NmY0MzFiIjo5NjoiZDdhNmE5MTdhMjg2ZDhlZGYxMjg5MTgzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNzM5ZGFlODNhNWU2NGJkOThmZmFmNjhiNWJjYmNkMDE1NWQ4MTA5ZTlmZjI1MTgiOiI1NmRhZmMwNmIzNTRlODRjZTNjZTMxYjdmODgxOTMxMjRjYTdlNzA0OTI3MmJlYjkzZmJlZGNiM2VkZThlMDE3YmRiOWVlNWQzMTRlYzUxNjg0NDNmZTAxMjU4ZDlhYmM0YzRjMjc1ODBmNjI5OWIyMDA4MmI0Y2E4N2ViMjU4OWJlZGM0NTlmMTMyZGZhZWZhZmZmZGQxM2Y4MmUxNTNhMjE2NWRjYWI5YTliNmMxMGYxZDBkMTNiMTI3MzEyYTZmNWYzZDY1YTczYjhmZDA1N2YxZDg4MDM4YzUxMzcyNTQxMTFmN2FlZGYyMWFmMDdhMzVlMzRjZjRkMjE2NmQ5IjoiZDgwYWM0ZGFjYjBmMTQ0MTgzOWUyMDY4MDEzZGRlM2YiOiIiOiI5YWU1MTA3ZjQzOTRjOTA1MGY4Y2E4YWU2ZDFlYjY2MDk5Y2NkMDE2NmYzOGU0NWMxY2JjMTdiMzBlMjE4ZmNmNjAxNWFjOTJkZDdhYjQ4YmJiMDk1YTA1MjM5MDRjNzI3MTBhODZlNTA1MThkNmFhZGUyNjljODJiYzVlY2RmYTcyOTgwMjQ0MWUwOWFlYjkzOWFiYjQzZjU5NjA1NDJhZDg3OTYxZTIxNDFmOTY3ZDEyZjcxOTBiMDdkZTk5ODExYjI2NGRjNjJjYjhmMDY3ODcyZjg0ZDIxYjY2MTU1OGNlZWFlNDkyMjkwMGZmZDc2MDg0ZTQ1MDY1MGRlNzliIjo5NjoiNmExODBlZDRmM2E5ZDU3MzllNTU5ZDAwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YzIzZWQ2NDM3NWQ0MmMzYTQwMmZkYWRkMTQzMzM2ZDJmNmJhYmY0ZDRlYmMxNzYiOiI1NTQxYTIxOTEwOGNlM2NlNTkzY2NhOGM2YWE2NTA0Yzg0OTgzYTk4ODUxYmY4NjEwZDcxZjc5YTM4YmRjMjFkNTIxOTI2NmFkNTZlMTBjY2JhNDg5OGVhOTY5ODE1ZWQwZDZkZjc1MzEyZDY1NzYzMWUxZTIyZTQ2ZjcyN2E0OTk2OTYzOTlhMDk1NWQ5NDk0MmE2NDEzODNjYWRlYmM1MzI4ZGEyYWM3NWJmMGRiNzA5MDAwYmEzMjc3NTgxZTEzMThjYjU4MjViYTExMmRmM2VhOWM0NTNhZDA0ZDAzZWIyOWQxNzE1NDEyY2MwM2RiY2U2YzhlMzgwYjM2MTY3IjoiZGFhNmY2OGIzY2UyOTgzMTBiY2MyYTdlMGIyZjlmZWMiOiIiOiIyYTRlMDQxMDFkNGM4MjJlYmEwMjRkY2VhMjdkNjdlY2E3YmE3ZjBlYTZkNTI5MGNlZDkzNzYwNDlhZTA4NWNjYWUzZWNiNjI0YzAzZWI1YjI4MDg5ODJjODhmMGE1YzQzNjNhNzI3MTYxMGI2NzQzMTdiYmRmMTUzODc3NmYxZmEyNDU0YzI0OWExYjBkNmMzZTY0YmQ0YTM1NmFjMmFhMmZkNjAxYTgzZDRmYTc2MjkxZjNlZjFhOWJmYzg1OGNjMGFlYTEwY2ZmMzRhYjllYjU1NDExZWZlYzJhODJhOTBhZjNmYzgwZjNkOGUyYjU2MTgxNjMwMjMwODkwYWNjIjo2NDoiZDQwODIwOWZhYmY4MmEzNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjk1ZGZkZTM0ZjBhZjE5MmZhYTUwMjQ0YWI5NWE2MDU5ZTJlNjM3ZTIzN2ViNjBkIjoiMzNjYTJjNjFhMDQ0NjdhZDJiYmQyYmE4MTQ0NTczZjBjMjUwNGE0ZTk5NDVmYmFlMjUwMzg1NDA2ZWQxNzU3YWRiNzA1MzRiZDZlZDg1NGYyMjdkOTNlZWU1N2M3M2EzMTRmNTk1NTIwOGUxYmE1YWY4Y2MxZThiNWJiMDdjYjYzMDMwZTNhZTVmMGFkMjg3NTM2ZjQ5YjU3NjQxOGJiMWQyZGVjNDA1NjJmNmJkZGE1OWMzNzNkNjY2OGFhYTliNzkxMjg1NzE2MzI1ZmNjYmRhMjE4MGUzMzk1NWM4YmUxOWQwNWUzODk4MjBlZDY5MjU4YzliOTNlM2M4MmU5NiI6ImE2YTU3NzkyYjVhNzM4Mjg2ZmI1NzViODRlZWEyYWFhIjoiIjoiYjJjZTQ0OWZjODA2ZGZiOTNjZDdjOTdjMDE4YzJiYTdkNzAyMjE2YWUyOWE1MzBhOGYyMmQwNzI3OWM3NTcwYzYyODhmYzAxZmE5OTE1YjQyYTZiZTdhN2Q5NTY5ZjcxYjhmYzI0MTFkZDk3NDdiNWM5YzdiNWMwYTU5MmJjZDdlOGY0NTMwZWJhZWUzN2U5YzdkNDhkN2E1NmJlN2UyZGYxZDkxY2VjZmQxMWJlYzA5YmJjYTdjZTcxMDY5NDI5ODk1OTRlNzkxZTAwZTIzNTU3Yzg0M2FjZjUxNjRmMzg2M2Q5MGY2MDZhZDgzMjg2OTZmNGNhNTFmZDI5MzQ2YyI6NjQ6IjA1MGJkNzIwZGUxYjEzNTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFhODlhNTE2MjA0ODM3YmM3ODBhZDliMjY3MTdlNTFjY2Y0MjU5MWJmNThjNzVjMSI6ImM3MmExYjg3MDc1MjI0NDJiOTkyY2IyMWE3NTI2ZGZkMzQxZTI3YTExZTc2MWY1OTRhYmJmYWNjMmFjMjZlYTQ4NTIzZDAxMTNlMzhhZGJmYzA2ZDRhZjg4MDljYjYwNjQ1NDQ2N2ZkMjUzY2E0NDIyNDFlODkyMWI5MDZkNmMwMDdkZDA5ZTEzOWU1NjgxOTQ2NjZkNWRhMGIzM2M3Y2E2Nzg3Njg1NmNmNTA0ZThkZmFiNGE1YjBhNzdjZmIxODgzZDUzMmVmN2M3MGIzNWIwODM4ODgyZjE0NDk5MWMyNWEyMzMxODYzZWFhYWEyMDU5NDAxZjYxMzc4NzUwZTUiOiJhOWIxZWY3NzQ0MDc1Y2Q2Y2MwMjRmOGM3YjNiMGI2ZSI6IiI6IjBlYzUwMTUwNTkwYmI0MTlkZjBkNmM0MTBlZGZjMmY4ODA1YTYwMmZmMjQ3ZTNiNTA4ODFhZDNlZmI1OThlZDA1M2Q4ZGQxZGVmZjg2NDYwZGIwMDgxYzBlYjNlZmZlOWVhOTQ1NjRmNzQwMDAxNjZmMDhkYjI0ZGE2Y2ZjYmE5MWE5ZWUxZTk4Yjg2NzFkYjk5ZWRiZThmZGUxMWQwZTg5OGJiMTMwZTFiMjczNThmYzQyYmUwM2ZiMzM0OGFmN2RlOTM3NmFmNDk1YzBlYzcxYWVkNTZkNjgwNjMyMTk1NTM5YjJkMWQ1YmY4MDQzMjhkMDkyOGE0NGM5NzMxY2UiOjY0OiI2YzlmNTVlNjc1MzM4MjhjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MTA3ZDUxZjdkNmUyNGFhNjA1OTU5ZDVkNDZiNGM3ZTE3NDNiN2Q1ZTNhZTA3YjYiOiJlNTA3NGZmYmFmNWU3NzFlMTJmOWU3Y2M4ZTc3MDFiOTcwYWE3ODk3OTI4NjgxMzgzZWEwZjkxYmNlODIwMGVjNjc4MmRjOTYxOGUwNjVlMTQyYzRlZjJmNzAxOTc5MWU3NGVkZmUyMDQwYjA4YmRmMzI4ZDdkOTY1OGU3NDczYmVhYjY1MzU5ZDM1ZWQxNjhhMmJiMzlmM2MzZjU5ODkwMzUzNDA1YTgyZjQ4ZTE2ZDM4OGViOGYyMTQ1ZWQ5YmZmMDE2ZTcyNTc5MWNhYmNhOTEzODEzZTc0ODVmMzg3MjIzNzExYzFhZDA5OGZmYTBmNzJmNzRhMDQ4ZWMxN2VhIjoiOTRhODhmNjg3Mjk5NWIyNmRhMzllZmI1ZTNmOTMzMzQiOiIiOiJiZjMyYTcxN2M5NDVlMWUyZmU5MWZkMzhmM2M3MDg0MjEwYTc5NjZjYjgzMjM1ZDI4ZjcwMWViY2FlNmIyMDQyMjI2ZTkzMmU0NjAxZWIzZWQ0NzI4Y2EzMmJmNzA2NWZjZGM5ODAxN2RhYmNhYzIzZjBmODBjNjVlOTI1MThkYjZjNzhiZjRjZDkxZjgxN2I2OWYzYzNhODg5MTc4NmQ0MzNmNmMzYzFhMDI1YzFkMzdiZDFjNTg3YmE2MDA0MDg1NTcxMjQ1NTkxZDYxNTkwNmY1YzE4OTk0ZjA5YTAzZjNlZWYxODBkN2FmMzRmMDBlY2ZlMTUzZDVhYjczOTMzIjozMjoiOGQ0MzQyNmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBmYTYyNzBhNDRjOGQxNDkzN2NjM2ZmNGNjMmQyYzk5NzI1NGE0MmNhOGEwOWVhZiI6IjIyNTJkMWM0NzA2Y2M0NmFkM2U0ZjhjNDlhOTJjZGM3ZDFhZjI0ZGVhZjdiMDhhYjczMDRlZjgwNGNmZTI2MWFjYzNhMjAyYmVjMGQ4ZGY0MmNjMzZhNWEzYWNlOWVkN2E5NDY1Y2RlYzM1MTNkMzFkZTlhZTc4MjFmOTQ0NDIyNjQzOWM4Zjk4YTlhN2Q5OWIzNmI5MWIxYjAwZWFjNzEwODBkN2ViNTUwMjA5YWY1ZmI3YjNmMjhkMDlmNTA2MDA3MGRhNzNhNDA0NTZkNjBjMDQ3MDc3M2FmOTVkMTZjMGIzM2QwYjUzMjdkNDQxODg2MTliOTUwNTkwZWE4NjIiOiJiNWYzZmRlODQxMTU2YmM0MDhlYzNkZTllZjM0MzhmYyI6IiI6IjRmY2ZjNTZmYTcyMmFmMzJlODA0ZGVlMGY0YjY3ZjVmZWE1NDJiMzgxYmM0N2M0MTQ1MTg0NGM4MmU1NDI3ZjZjZDkwYzM3ZTA4OGRiYWZmNzIyZDg3MDBhMTFkNWRmYjQyODJlNTY1ZjMyZTA1NTMyNGU1MDY5OTMxYzg2YjYyZmViMmNkZjgyY2ExZjYyYWVlMDJhNzBlNGUyNzRiMmI5NTc2NTBhNWNjNzcyYmU4NmMxYjFjZmM0MWIwMWQyMGQ5YmU4YjA1YjllM2ZmNjU0MTM1MjA3ODljYTBmMTk4ZmUwMGQ4MzQ4M2ExZDg1YWViMTMwOTRjOWE4MjdlN2QiOjMyOiIxYWU4ZjljMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTA0YzE4YmQyYTA2NDFmZDQ2YzJkNzU5MGQ2MGQ2ZDhlZWE3NGEyNzU4ZWQwZjRkIjoiNDQzNGNmNWQxMmQwNzYxNDIyN2NmYzEyNzE2YThhZGZjNjUxZmZlNWM2NDc2Y2Y0NDg5YWZhYTY5OGQ5ZDE5OTQ3MDE2YmRiY2I1YjYyNTc3MzI1Mjc0NWRmZWFmOWIxMDAyMWE1YjM4Zjc0MmVhOGEwZmM1ZjkyNmM4MGNlZjY1NjhhYjg2MzljZGRjZjhmZWU5Njc4ZDQ1YWQ0OTM3ZDZlNmIwNTRiNjU1MTJmOTI5ZTg5N2VkNWY5NjVjZDE0Y2FkOTM5NzMyYzUzYTg0N2JiMjc1OGQ4MThkNWQxMzE5Nzc2NDlkYjViNTlhMGM1ZWJhYzM3ZGI5NjFmOWQ2OSI6IjI5MDJmYWVjNjBmNzU0ZjBmYmIxOTgxYWViYTI3N2ZmIjoiIjoiMTc4OTUyNDg0NWExZTM2MzIyYzQ0ZGQxZTkzOGVlNWQwZmU2ZGYyNDRiNzUxZjMwMjNkNWQ2NGQ0MGE3MjU5OGQzNTJkOWQyZmFiYTY4YmU0ZTAzNWMyNThiNjg3ODIyNzM5MjVhOTQ1MjdmY2RiOTc3YTQxYzFlMGE5NmY1MzExOWI1OTA5YjIzYjAzMjdjODIwZThmNmRhMDQ5YTVkMTQ0YTk4MDE5YzQ5NTNhYWZkNDgxMTkwMTE3NTczODY5MTA5YzI2NTAxMmE0MmY3NmJiNGMzMzUzZjY2MTNjY2JjNDBhNGFmMmY5ZTE0OGJmMGEwMzI0YmI0MzMzN2ZiNyI6MzI6ImQzNmQyZDA2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjYzNDUxZjE4N2I2ZGNhYjlkOGRjNDM2NDIxN2E0ODNkZDgwYzFkNzVmMjRmY2VhIjoiNWUyMzZjMjgyZWI0NjQ2ZmJkMTZhOTVlZmYyYjI3ODczZjYyNWE3ZTkxOTIzN2Q3NTk4OWE4YTExMmVhODBjZThkYjBiNGFlYWY1ZGE1OWMzYjIyNjQ5ZGFiYjU4NDI4NGFiOTY3M2JhN2VkZWY1OTA0M2ViOGU5OTc2MzY0Mzk0MWE0Nzg4ZTdjZjExYmFkNjNlMTNjOWVmMDg2NDQwNDRiNzZiZWVmNjg5MjhkYWMyMjk3NTQ4MWRhNGFmYzcyM2IzYWIzYjQ5ODE4OTU0MmNiZGZmYmMzZjQ2N2QxOTBjZDAyZTliMzZiNjk4MTEyMmFhODBjZmEzYWEzNTYxZiI6IjZjNDU1MmIzYTAzMTUyYWE0NjRlODhmZDViMTQzNTZkIjoiNDM1NDUzYTMwNGZjZDNjNGJkNmFiOTBkNmVkOGM1NGU2ZDIxZjc1YjllNTZjOWQ0ODAzMDQ5OWIwNGY2NzU0Y2ZmNjI4YzRjOTIxNmY3ZDhhMGFiZWQ1YjhiN2NhMTI4YzA5OWE3ZGVhYjc0ZWNmZTJjNGE0OTRiMzBkNzQ4MzNmODM3ZDI1NGFhMDBkNzVhYTk2M2NlOWMwNDFmMTkxNmViNjNkNjczYTRhZjNmODg4MTdjNjVkNGM4NmY1YTNjMjhhNjdkZTJhYWY3NWYwOGQxYjYyOGFmMzMzZTUxOGE3ZTk5ZDk4MDU3MWRiNjA4NDA3ZDNmNDQ3NTYzZjJkZiI6IjEyZGVhNWVhOWI1NDk1N2M2ODljN2M5YzZhNzExZTI4ODA2NDUxMDlhNDA1N2ZhZmUzYjMyNzI3YTYwZWUxZTI0Zjg0NTAzMTBkNmI4NDAyYzI2YjMwN2JiMGJmM2NiN2M2NDA3MjcwZDk1NTkwZWZiOTM4ZTZkNzczNTk2NjZiMTFhN2EzODMzYTcxMjI2OTdlOTU5NjQ1ZDhlOWQ4MzVlMGJkMzliZGMzMDM5NzExNWI0YzM0OGVhODI1Yzg1MGMxZTU0YTYwYTI1MjJhNjMyMWU0Yjk5ZmEyYWQ5MjE1MjA1NjI4YzU5NWIwN2M2ZmZlZDkzOWM3NzlkMjNhYjIiOjEyODoiNTg1Njc3ZTBmMzdhZTEzZDg4NmMzODIwMmMzODYwYjciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkYmNmNzM1ZDdjODcwMWY1MzcwOTBkM2RjZjkxNGM3NDFlZDc4M2MyNGJkODI2NWIiOiIxOGViNzBkZmY3MzM0MTI5OGNlMzNmZjQwNDlmYTYzMWYyYzcyYzE1OGZjZGVhNTVkMTIzMWM0NmM5NWJhNDAxMzAxMmI3MTNiYzk1YmEyNWEyMTE0ZDAzODBjMjk3YWNkMDVjMzIzNjk2ZGI0NjY4NzQwODNlMThiZjU0NGRhYmZmYmM3MGJlNDY0OWNmZTdlOGJmNDQ5YWViOTc4OWQ2ZmE0MTJhMWFkZjU3Y2U3MzI3MDJhYjk2MjU2MWY5ZTFmYTg1MDczM2M5N2I4YTQxNTg3ODZlOGNjZjMyYWYwZmMyYjA0OTA3MTI0ZTczMWZmYWYzZmE3ZWFjYWE2NGIyIjoiMDllY2NlZDg0NjBhZjYzNWU0NmJjODI0NTAzNTJiZTUiOiJjYzViOGY4MmZjZTM3OTcwMDlmYmQzOGRmYWQ3MDU1YTVlMmFjMjQxMzYzZjY3NzMxOTFkMGU1MzRlMmI0NTkyYTY4MDVjMTkxZGFhZDM3NzI0NWM0MTRkZjhlZGM0ZDNkOWVjZDE5MWE1MGNmOTc0N2RkZTY1MTg3NDg0ODAyZTE1Nzk3ZDdjN2UxZGI0OWVhNGU0MjNlOTRkOWFkM2I5OWFlYTZiZjI5MjhjZTZhZGRmYzAwODQ4NTUwYjRkMmU0NjZlODVhMjgyY2MwMjJjN2M0NDY5ZDJjYjE2MTUxZTgxYmY2M2RmMzc4ZTBjNjc2MDM2MTk3ZDk0NzBmNDJhIjoiODI5OGY3OTY0MjhmYWZmYTYwODVlNDU4ZjE0OTY3NWQ2YzZlMmNkZmJjNzk5NGVlNmYxOWFmNDBmZTg5MjZjMjg5MDRmZDVhYzBiOWJkYmQyZGUzZjE2MTQ1MDBhM2VhYjFmOTgwZjgyYWMyM2NhZTgwZjNlNmJhNzE1MzlkMTcyM2U5ZjM0MTJkZjM0NTUzNmY3NTE3ZDg0N2FhZTc5YTgzZWU5YWQ1ZmUzOGQ2MGM2NjE4ZDg3MGNiMWYyMDNhM2UxODQ3ZDE0ZDhkZTUyOTUyMDljMGUwNWFhMTk2ZmVjMGVhYjgzODllNGViNjZiZGYzZGQ0OWQwODAwZmZhZCI6MTI4OiJlNTNjYTI2NmRkOTNkZWY1YmVlNWRhZjcwYzk1M2RkMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjVmOGQ4NDkwOGE4YjdmNWUxMTg0ODJiYjg2NzEwMmEyNDRiY2JmNDhiNzIyOTExNSI6IjljZDJhNGUyYWNiZWVhNmE3M2I1YmZmYzExOTFkODA0NWY2M2YzYTE0YWE3NjJlYjc3NmYzNTUxOGY3MmJkZTRmOWM4ZGVjZDYxYTkzMTllM2RmY2E4MmU2ODI5MTBhNDNkZTI3MTk0NTFlMWEzMjgzOWIyOWIyN2MzZWIxYzhmNjExODUxMmQ2YTE5Y2YxODllMmQwNGNmNGUyMjQ1OTM5NzkzNmQ2MGY3NTUxMjQ0Mzg3Mjk0YTc5OTQzMjA1NDZmMDcwZTU0ZjE2NmNkN2MyNDNkMTNmMzAxN2I3ODZmN2RmNmE3ZmE0ZWNlMDVhMmZlNDlmYzM5ZTIyMjViOTIiOiI1YmE5ODZmNTExNWQ0MGMyY2ZlNDA0MDA3YTFlMjQwMyI6IjA2Zjk4ZDQ4MDdlZmVjZmM4NjMzMDlmM2JjNjRiMGYwNGU0YzE2YzMyNjc1ZmY5N2EzMjk1ZDU2NTdkNDQ0M2Y2YzhiMGEzOTRkM2Y5NDI3MDViZGMxOWMyMmI4ZmY1OGU5YjdjMjA5YjUyOGI3NDVmYTA0MjRkNTg5OGVmMGU0MmUwOTA5YWE1YWQwYjAxZjg1NDllMzY3NDEwMmRkYWY0Nzg0ZjBmZjg5MDhjZjlmOWEyNWU3ZTRkZDlhZjRkYTdiZDEzYWUwY2Q4N2I2YWFhNmIxMzJkYzUxOGY0YTk1YWY0MDNlNjEyZWRjZTYzZTE0MjRkYWNmOGUzNDkzNzIiOiIyZjE2OGZkMWM4MTliMTU5NzM5YTdjYzc4M2VjZGIwZWY5NjM5Yjc5NjU5MThlMzQzZTJhNTVmMTk2ZGFmNTg0ZjdmMTRiYjZlNDJkMzdiNTA0YmZjMmNjMDhjMjE4YzViODQxYjJkMmFiY2UwNWJiZjE1MzE1ZjQ3MWU1NmYwNGY3ZDU0ZDZmMWRjN2I3YTY4YjhiYzcwMjZhMTQ0MTEwNTAxNWJjZWUyYzM5ZDgzYmUzNWQyNWYwZDUxNGJkMWZmZTc1NDExYjMyODY3ZWJmMmQ1MzJhNzY2ZjliZmNlOWU1NWVhM2UwMjQwZDJhMzcxM2RkYzJiYTc5MGJhZDIxIjoxMjg6IjdmMTIxZWEzNmIzNjQ0OWUxZGI4NWU4YTkxYWIxNmYzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjZjMzAzN2E1OWU5OGE5YTgxMDk0ZDY1Y2E1Mjc1MmFkOTJmOTNiY2ZhNjcxODIxIjoiMjY2NDdmOGY0MDkyZjgwZmMxOWY4MWYwMjljMzU0YzU4MmI1ODI1MTZlOGUyN2U5N2Q1MDg2NmU4ZmY3NTVmNTBhOGFlNjQyMmY0ZTk5NmYwY2Y1MDgyNmE2OGMwMDdhNWIxNmZkNTkwMDJkMzY4ZWQzMjg1YmJkMDRmOGY5YTVhNTI0MjQzY2I4ZDViM2ZmYTE4NGJhNzM4NDc3MWJmYzUwOGYyZTkzYWJkMmExZTcxNzBkNjk0ZDM1Y2MwZmY3ZjI0N2U4NGNhODg4OWVmYzgyMGMzZjZkOWNkNDBhZmQ1NmM1Nzk5OTcyZDc1NTZjOTFjZGU1MGFjODA4NjUyYyI6IjQzYjRmMTViYmU1MjU5MTNhMzFhOWFkZjIzZDE5NzFlIjoiNjA4MjZjOTdmMGE5OWI4OGU3YWVhYjc3NGEzZjIyNzhmOWQzNWI2YzFhNWZjZTQ5ZDkzODlhNDIxNTQzYzk5ZjY4Nzk3MjI0NTM1ZGNhNGQ3MDQwMzEzMzQwZGE3Mzk4MjIyMDA0MGEwNjNiMDQ1ODQzYTE0ZjVkMzg3NjNmOTViZGQyNmVmODE4ZjZlNTE3MWM4ZDViNDdmMTgzNTg5YWZkNmFjZDM2ZTU5Yjk5NDZjMWVkZjAzOGFlMjg1ZjUwMDE3MWU5ODUwNjAzY2RhMzYwNDNjMjk4NjBlNzViZmUwM2MyMWUwZWYxMWE5YWVjYzVkNWM1MWJiMjIwMWQyOSI6ImU1OGRmOTljY2U1YjI1NDhjZjM5Njg0ZGY2YTI2YjhmOWI3OTY5MTY4ZmYyMWM0MTBiYzQwYjc2Mzg0MmFiM2IzMGNiYjNjODJlMGI0MjBjODEwMGRhNjFjOTAzN2E5ZjExMmRiOTU2M2EzZDA2OWNkZjI5OTdlN2Y0ZGJiMGI1ZDc5YjU2ZjBlOTg1Y2Q4Y2I3MDM1NTM2NmY3YWZkMjExYmQ5OTA5YzQ4YjE0MmM2NTU2MzI2MDYyZDI3ZjdmODJkNzZiODNjNDMzZjAwZjE3MTZlYmM5NTAzOGNiNTdjNTUwYjU4MTBiNzc3ODhjOGJmMWU2ODZhOGExNGI2MTAiOjEyMDoiYmE2YWE2ZDY4YTU2MDY0MmMyNjZiZjQ0NjllYWFjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGZkOWIwODIzMmExZDNmYmUzMTlkMDg5N2M3NDA5OGY3NWIzZTgwMWQxMGUxODNhIjoiYTY3N2ExM2FlMjZiN2EwNWNlY2ZkMTUzYWFhZWEwMmNjYjUwZGI2MDEyMjFhM2RmNTQ1MTY0YmI1ZmU2MzhmNmVkMjc2ZDRiZDE3MmI5ZTc0MGE4MmE2OTBhZWM0ZjE4ZjRmM2EwYWZiODBjOWEzMjE4ODk1OGUxY2IzNjUxMDY0ZjU1Y2ExMjExNjQ3OTAzZjYzMDEzZTQ2YjQ2YzdmNGY5NTU4OTAxMmViNGNjZDI0NTFkOGU4ZGFjYzNjZDA2NjI4MWYxZjBjNzFmNjlmMWM0OWYzZjk0MTM2YTUyMmZmZjBkMDI0MjdlNGJjY2FiMDU2ZTYxNWZmNmZkZTFkNiI6IjMwNGM3NTk4MDBiOGUyNzVkZmNmZDNlNWUzYzYxYTdlIjoiNWQyZGZmYjAwYTI1Nzg4NTQ4ZmYxYjJjOTQ3NDVlNWJmY2MwNWVlYjExZTYzNTAxMDA3MzM1ZDRiZDA2YmZiMzIyM2Q0NjgyZTdlODNlY2EwZTE2M2QxYThmMmE3NjA5NmFiMjgzOWFkMTRiNDVlYjU5ZWE5YjI5ZmViNzZmNDBiMGQ4ZGFjNTUyNDdjNjVlNWRiZTZiYjJkNTE1NWRkY2YyYjJmOTI0YzQ4ZTFjMTZjOTkwYjY5YWM0OGVmMjM1MDg3M2MxZWQ1MjRjZTFiOGVmNmM5MmExMWM4ZTQ2MTMwM2Y3YzMyYjVkNjViNTcxNTQxOTdlNDVmMWM2Yjc5MiI6IjA3NzllNTA1MGRkMTc4MzdkNDBmZTM0MjczMjJlNzE3ZjA3NDMxMmYxNjBjMTk1MWU1NTYwNzk3YzEzZTRmYmU0N2YzMjBkYzgwNTNhMzlkMmRlZjRkM2NjMjBlMjE1OTc4NjQ3ZDkxN2RkZjkzZmRmOWVlZTVlNTRhOTc0MDYwZGJhYzJhNDc4YWZlNWY1YWNiZjY1YWY0ZGNjYmQzOTQyZDEzMGRkZGZkOTBjZmM5NjlkYTBjN2Y0YjQwNTBlMzRjZTJlMDQ5YzNiYjAwNDc4MmFiZjQ3NDRjOWEzY2EyNzEzZWJmYzVkZmExNmQwMTFiYzBiMzNkMDM2OGMxMDgiOjEyMDoiNTRjOGExZGRkZmFhMWNhZmJjYzE4ODM1ODdiNGNkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTlkMzg0NjdjMTAyNDYxMTQzM2EwYjI3ODA5ODA1MzhkODhmM2U4OTA3YTg2ZTQyIjoiMjYyM2NkMGViNDZhNzM2Njg3NzE0OWNlMDIwNGQ3ZGMwOGE1ZTY0YTFhZGIzYjY3NTkxNzhjNGVhYjI2Y2ExODA2ZmMyNWZjMGZjOTlkZmM3N2QxODExZTYxYWMxZTA0ZWU4MmViNjllZjc1Mjc5NjJkZjE3MDc3MzRlNGFjYTk3MGI4YTQ5OWViNzBjMmIwMzg2OTQyOTA2OTQ1YWJjZDkyMzRiOTJlN2JlYzMzMDA5ZTcwNzg2YzM5YmQyNDFkYTM5MDVkOTYxNDczZTUwMzY3Y2I3NzI2ZGY4ZGEyNjYyZmIzMjEwMWQxM2I3NTAzMjgzOGYwMWFkNzk0NjY3MCI6IjhkNTZhOWU0YmVkNjdhN2ViMGY3YjhjNWU2YmJmMDRlIjoiMWM3ZDI3NDRhNTZmNTE4NWI5Y2RmMTRlYjk3NzZmZmQzMTUyMTQ1NDBkYWZmYzY5YzIxN2RkNjRjN2QwZmI0YTlmN2IxY2NjNGMxZTMyNWZjMDQ2ZWVjNGZlYjhkZjM1ZDMyZjQ5MmEyOGQzNTg1OGFkMWU5YmZhZjk1MjExZjExMTQ3M2MyZmY3OTlhMTI0YjMwOGZiYTk5NmIwOGYxODUxMDM2MDc2MDU5MjJiYWQzMTljNmI3ZmQyMTFmOTdjODYxNTY1YmVhMzQ5NDhiZmQ3NTFlNGNlMjU5MWFlNzc3YWIxZGY4ZGM5ZTgyMGNkYWQxMzA2NmVkNzQzMDNjNiI6ImVkZmRmYTM1YjQxYzU2NDJlNWI0ZGQxNzY5YjYzNTgxMWE0OGVjZjIxOTE1Y2JlZjNjOWUyZjgyMzA5NTNmMmVkNGZkYTg5MDNlYzc2MzRmMTBkNTVhYTU4Yzk3NWE2YzYxMzNhMTczYzJhZWI4M2Q2ZDdmYzY1MzRlYTE3ODFkZmM2MjQwOGU3YTE3ZDI1NWE5ODNiZDFjMzNkMmY0MjNjMzY0ODkzZGI4MTI4YTU5OWNkMDM3YjJkYjMxOGY4NmYxZmJkODk1YTY0YTlmYjIwOTQ5MGI3ZTlhMzBkYjhjZGY0MmUzNDhjZmNmYTc5ODRlMTVjMTdkYjgxMGVjMTkiOjEyMDoiMTdkZmY3OGY2MWQyMWRlNGMwNzQ0ZTU3MTc0ZjcwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDY5YmRjOWQzNTU4OWUzM2VhOWMyYjk1Njc4MGNkOTYxOGUwZGY3OWQxMDgzZTY5IjoiZDhhNzVkZTIyZmQzZTJkNTAxMjdjNmZkZWFiYzA5ZmFiMTE3ODg3NTk5ODMxOWUxZWE4M2M5NzQ1YTFkNTgzM2M2YmE5ZGYwODE3N2MzNDlkZmE0MTJlMTNlMTkyN2JiZDRjZGZiNTRhMjFjODZjMTQ5YmUxZmViNGQ5ZGU5OWZmZDU5MDg1MDg3NWEzZDljOGQ5MzA2OTcxYTk4MDJhZDRjYTQ4ZjczZDA1MTczMjI1MjVhYzg0NjNlM2Q1OWFlOTg5NWM5YjM2M2I2ZjA3MjhkNzU4NWRlNzhjYmI0OTc1N2JkMTkxOWJhMmYyZDZiYTA0MmQwNzgxZTdhNzlkNyI6ImFiZDRiOTQzNjI1MDFiOGYzMDdmY2EwNzZmY2NjNjBkIjoiMWFkOWFhOTlhNGM4MTU4ZWMwOGQyMWViZmI2MjYwNGEwNDNmYzBjMjQ4ZmUwOGRhYTE1YTg5ZjRhNzg1NTkxNmFmOGFlYjY4MWFjNjYwMGMwMjY4YWRlMjMxZjkxOGZlNTA4ZjQ4YzljZmE5OThlZmZjMzUwZmExMTdlMjc3MmYwNDgzOWY4ZmExYTUzYmNhMDA2OTNlY2QyOGRiMjdjNjUwNzc1MDQwNGJkODlhZjA3NDUxZDY2ZmI3ZGZhNDcwNjVlOWQzZmUyNGE5MTBlYjI3OTExNTkxZTRmNGU0NzQ2YjM1MzU5YWZhZGE0MzU2Njc2YjNjNzMzMWM2MTBhYiI6IjUyZTg4YjU0YjQxMGRiZmI0ZDg4MDkyZGY1MjY4OGJhOTUwMmI5MDY3NTJiNDgwMmFjYTU0Mjg0MzdkNzk1ZGUwZDM1Mzk5NDViZWJkZjJiYWIwNzBkZjRhN2U2MzA0NjliOTJmZTJkZGUwOTk4ZDQ0MDk0Y2FlN2YyMWY4NGVhNzgwNjYzN2ZhNWM3M2IxMzhlODdkMDQwMDVlZjEyMDZkZGYzMGEyMWY0NmMwYWE3MTg2NjVlODA5ZmZjMGI0MmI1MjUwMTQzNjA0YjIwMjI1ZWM0NjBkZWZhZjU1NGE4YmZiNWY2OWVmNDI0NGUwMmU5NTYzYzM3NGE0NGYwYTkiOjExMjoiMTAyNGY4ZTk5OTdmNWZhNDY4NDkzMGQxNzQzMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY5NjBiZThmZTgyMDYxZTljZDc4M2NkMWMwM2Y2M2EwMGQ2MGNlOWZjNDdlYTQ5NiI6ImUwZjU3NGRkYmIwNDgzMWI1YTg2ZjQwMTgyZjVmMTBkODY2N2ZlMTNjNzA2NWI0NzFkZjE1N2Y2NzIzMGM0MWI4YzA2OWMwMjE4Y2VhYjkzZDYzOTY0YmU4ZWU4NTNjNTY3YWRkMmMzZWFiMTY3MGIwM2E1MWY5MTc1ZThlNzYzYmU3NzhlYzQzODMzY2Q3MTZlMWM4ZmU1Y2ZiMWQ2NjMxNDliMjFlMDZkZjc3MmEzOTczZmUxMjk3ZDY1MTg4MjAxY2RiMGMzNTMzZjVlOWQ0MGJiMDY2NGE5N2RiNjBmYzk5ZDdlNDhlZWRlYmYyNjQwMjQwMDZjYTM2MzYxYWMiOiI2NzJmNDM3ODg2MmM4MjczODA1NTI3M2M3MjU1NWIzOSI6ImUzYTRkYmNlODdlZGFjNTE5Y2U4NjM0OWVlZDJkYmEwZDM3MWNlZjBkOGYyMGI0ZGRhM2UxY2Q5ZjU3OTljOWZkMGI3NDk0ZGFlYzViYzk5NWE2OTM2YzUwMTIxMmViOTU3Y2NjOWRkZDRjOWI4YTIwNWNhYzEyMmJhODdiNWM1YTBlZWJhNmIyYWYyY2JjMjMyNmQ5NTNkNjFkMDg5YjYzMzRjZTAzMjU3MjAzMDcyZjhlMDZiOGM2ZjM3NjkyNzQ4YTEzZTY4MTA4MjkwMGZkMzJmMGRmNmEzMDcyZjNhOGI5YmJlYjNlYTU1OGU5N2E0M2Q2NjU2MDkzZDdjNzUiOiIyYTNjNGI3OWJiY2ZhNGFmMDRiYWE4NDEzZjZmMWQxOGM5YzU3OTA2MGVjZDBjYzM1OWZjZGNmYzA1NjY2OTdmZjgzNGY3ZGZmZWM4NGIyMjkyZTg1ODNlY2I1OWM5ZTVlNWQ4NzkxM2E2Y2NhYWNlYmYzNzFmMWZmZjY3ZjBiZTc0OWQ0ZWE1ZjVjNmY0Yzk1OWU5ZDkzMjQxNGE1NGE4ZTI1YmYyZjQ4NWVjY2U5ZTcwOTkwYmJjNGU2MjFjZTJjOGZjYzNjYWE2NmIwNzMwYzY2MzlkZTFiZmEwMTI0YWZlMzUxOTEyMjc5YmMzY2EzNjNmNGU2MDEzNDk2Y2YxIjoxMTI6ImRiZGQ2YWYxOTRmMjU3OGEwZDA4MzJkMGNiYTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYjdkMDExNTYxMmM1NmExZjI4YzZiM2NiM2Q1MWMyYjRiYmQ0Y2QzNmNjZjNkZGEiOiIzYTg4ZWZhNTI0YTkwYjMxODczY2JhMTc3YTdlNmUwNTBkYzU5ZjQyYzkzNDkyM2RiMWU3NWZlYzkyNDkwODM3MGFkMGM5YzNiMGIzYzA1YWRmMTJjNmVmMjYyN2Q4ZDE2ZjgzMjA3MWMwNTVhZWY1ZjU4MWEzOWE4ZTdkOWJlZDI2MjllMjZkNWUzZWNhZWQyNDA0OGQ3NDRmYmEwOGQ4ZDEyMTMyZGVmNjIwNTlmMWE1NDkwNDRjMWRiMTIxZjQ3ZjEwYjNkYzRhMDI4NDkxNTBhZWY1M2JkMjU5ZDY4MTQxNjI3NjFjYmM5ZTFhODczMWQ4MjEwMTY5NmUzMmQ0IjoiMzE3YTYwYzNjMjk0NDBiOGJhMDRkYWY5ODA5OTRjNDYiOiI4MGQ4MTZiZjQwMDhhZTUxYjlkZDlhMjVjMzBjZDc0ODJmMjI4OWY1NjE2YzQxZDk5ODgxYWE4Zjc4YjVlZmZmODRlZmUzMDdhODIyMTc0ZjNhNWMwOGIzODFiYzk5YjE2OWI5MjA1NzYyN2YyMWRkZGMzNjc3MjNlYWNhMjU0NWNlM2E0ZmJhMmI0NjMzZmQ5OTQ1OWZiMDNlODVkNmQxMWVkMDQxYjYzMTg1ZjNiOTRmNjAwNGJkY2U1NTZlMmEwYWFmODExZmFmMDE1M2IzOTc0ZDBiYWUzZWFiYWRjY2ZjOTU0NzRjOTQwZWNhZDViNGQ1ZWE4OGY4OGI4YzRhIjoiZjE5MzMwM2JiNzgxMTY0ZTQyYjNkNGQyNTU2OWE0NDZjODY2NDZiYzBmYmM5MzA1OTYwM2MwYjQ2ZWM3MzdkZGZjZDU1ZGY4YzkwZTZkODA2YmQ5ZmVmOTBmMmIxMjJhMTc1OGJlZjVjNzVmY2RmZjk1Y2U0NDIxN2Q5YjZiMGU3NWU3NzY1NmNjN2Y4YThjYzQ3NzI5Yzc0ZmFmNDNjYmYwODIwMmU5YWQxNmM3ZWY4YzgzMmNlNWY5N2Y1MTE1M2UxNzhjY2MzYzE2ODkyOGYzYzMyOGNkNWI0YzM0MWJiMDQ4MmY2YTI5MmNmYTJmYTg1ZTAzZDk1YmNkNGNiMSI6MTEyOiI0MjMwOGZmYzc2Y2I2YWIzYzc3MGUwNmY3OGJhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzU3MzdlMDFhOTVjMmFkOWM4NjBlNzJhNTdkYTY0NmUwMWMyMjg2YTE0ZGZlYzc1IjoiZmE3NDk3OTlhZmNmMjI0MmE2MDAwYzRmZTFlMDYyOGRiNTM5MzNkZGU5OWQ2NzJlM2M3YjI0YjBjZDY1MzNiODAwMmJiN2FhODYzMzMyMmY0ZWUyZTM0M2RiM2EwMDY3YWQ0NGVkYWEzOThjZDkwZWJkYjUwYzczMmU4YmY5NWFjZWI0YWFhNGRmZDFlYWNhNjE3YzMwYzMwYzFhMTg3NjFhNmQyNGMyZGUwNzkwZjU0ZjczZTA4MDJlYjgyZmZjMDEyNDUxN2RkYWZlODMzNmY0ZWM2MTk3MjE5MzQ2ZGVlZjRjZTkzMGU4YWUyMDExN2U2ZWJlNDlhMjU4MjM0NiI6IjEwNjBkNzg1NDNiZTM4NGU3YTlkYzMyYTA2YmNkNTI0IjoiNTI4YTZjMzRjM2NiM2FiYTQwMmI4NTZkZDdjOTY3N2QwZDg4ODIxNjg2ZWRkODYyODdlNzQ4NGI3MjI0OGY5NDliYmRmYjY0MGRmMjdlM2QxZDZiNmRjMTI5M2VhNmM4NGJlNzJjODVlNWZmNDk3ZjVkYTc0ZDc5NmEyMWYyNTEzMzg1YTE3N2YyOWYyMTU0YjIzNjJkNWFjODNjMzg5N2YzNjhkMDY1MTMzMzNmMjk5NWI3MDFmYjNlNWFhYmFjNTU5ZjYwMThmZmZkMDJjZDZiNjVlYmE5Y2RjNjI5MDY3ZjE1ZDFhZTQzMWQ2YTIyODExNTA4Y2Q5MTMwMDlmOCI6IjdlODc3NGNiNzM0NjhhZDk2NDdmNjk0NmFlYTMwZTk0NjhmYWMzODUwYjVmZjE3M2M3YjM0Njg5MWVjZGEzMmE3OGI1OGRmOGQ4MzUzMjg2MTVmMzZhMTJjMTgzNzBmM2FiY2YwMjFlZDcyMzgzMGIwODYyNzc2NzI3MmY3NjlhMjEwNWU0Nzg2NDUxZGIwNTEyMDI3Y2UwZTNmNzcwZmJiMGVlMGUxODUwYTVmYzQ3OWRmNGFkNWNlZmY0ZmEzYjJiOTEyNGMzMzBjMmU3OWQ3NzBlNmY1ZTg5YWNkYzhkMGNhOWM3NTg5ODBkZmVmYWFhYzQxYWFmNmQ0NzJmOGEiOjEwNDoiNmJjNjYzMmJiNWIzMjk2ZWRlOWUxYzVmY2QiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMzI2MjI2YjI0MjIyYjMzODlkNzkzYjYxYjcyM2U5YWM3MDU5NDk1YTFiNTk3ZjUiOiIxY2MyNmU0NTNhNTRjOTRjMWNmOTAyZmUxMjMwN2NjZTJmYmE0ZDVmMGZjM2JiNjNjZGJhYzBkZDBiNWJhMzFkMDhkYWUyYjRmMDU0Yzg2ZjNhM2VlOTIwZDhiOWY3YWQ4YWU4YjRlY2EwOTBjODc4M2NmMzVkYjVkZTNiOTU4ODlhODRmMDlmZjNmNzAyNjNjNjE2ODFmMDBhNDU0YjA4MTM4MTNmMGZlM2VjMzhhNmQzMGNjM2M2YTkzYzkxYTQyMjc0M2U3YTcyMzQwY2IwMTI3MThiOGE0YTNiNjZhNzVmMTNlMDE2NWFhNTFlZTRiMDAwNDZjYmExMmU5NjZkIjoiMzI3OTcyZDBjMmViYzIwZWQ1YmRlZGM4YTNhN2FlZTUiOiIyZWRiMTQ1NWJmNDU3M2E1NGFiOTIxZDMxYjdmYzllNTM0YmNlMDg3MGViNmU5NzNhZmNjYzNiMWY5M2RkMmMxYTQ3NmRkODhlNzA1OTE5Y2FlYjVkNGY0YTg1MTZhNzE4Y2ZmODg1OGViNDQzY2E3Nzg1NTc5MDM2Y2M3MjczNTcwZTdiZjI0ODljZTcxYTUyYWQ2MjNiZjcyMjNjZTMxMjMyZDhjOWIxOGU1MmEyZGQ0NTE5YmIwOGQ4NzMwMWYzYWU2OWRjYzM2YzZkY2IzYjAzZDhmYzM5YjY2MjFmNmI0NDcxMDkyZTk0MWVmMDkwYzk4MjFhMDVkZjg1NzVhIjoiNWEyMTlhMGQ5OTdlODc5ZmZlYjU0OGQ0M2RlOGU0ZjMyYTlhZDE5NmRjNDI1YzgzZjc2NjEzNDczNWFkMmM5ZmY1ZDk2NjViZDU0YWMzZWZkYzUwYmI0YTdhMDRiYTU5ODI1ZjMxYTBmM2U1MzBhZWY0NWJiYTAwY2Q2NDc5ZWZhYTE5Yzg1ZWRiNDczNGY5MWZkYWQ2Njg2ZTUwZjljYzUzMWZjYWJjZTllODM5NzM4MWI0ZDY5MWRhNGEyN2I3YzQ4N2U5M2RlM2UzYTllNzY5ZTgzMWM2OWIwNzY5N2U0YmFiNDcwZWJmZjYyOGU3MTBlZmExN2U0YzE4NGUwZiI6MTA0OiIyYjlhYzI3M2MwNTk4NjVmYWI0NmYwNWFlMyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNmNWYyZDg0MzA0MmFiOTRmYzQ1MTlkNTdkOTIyOWVhN2U4MTcyYWNmNTE1ZmFiNyI6IjBlMjBmNWEyYWZmZmE0YTVmOTIxOTMyMDcxNmM4YTI2ZTM1YTE5YzUyNWRkZGQ1MjhlNWY1ZjA2ZjBkYTA4MmY0MzI3MjM2MWYwN2NmZGY1NzQyM2Y2N2FkM2NmZGRhOWNmMTc0N2M2MDJhOTM3NDdjYzU3MWFkZmFiY2M5ZDFlYzFhODEyODkwOGRmNDVmZTBlZGUwZTE0ZmY0MDE2OWRkMWVjYmZmN2Y0MDYyZWU3YmUwYTFhZmIzNzBjOWQ1MTAzMTMyYzFmYmVlOTI2MjMwOWNiMDVlYTE1MGZhODYyZDYzMDNhZjcxNjc3ZDJkZTljYWZkYjRlY2RhYjhkNWIiOiI5NWIwNmMzY2UxYTNkZTczY2Y1MWU3ODFiOTQxMDk3YSI6Ijc2NWMzZmFlNzRiNmZhNGI2ZWQ0Y2E3YWI5YjgyOWQ3NmE3NzU5YzUwODc0YTM4ZDJlY2ZkZGFjYTIzNjVmN2ExNDNjOTU4NGUyNTU2MDhiZTgyOTk1MDM5M2U1Zjk0MTMxY2FmNGNhYTA0YWVlZWI5ZDU5NWUzOWVmM2Y5ODMwMjQ2ZDYwNjY5OTViMmQ0MDQzOGY3ZWIwOTQ0YmQ0NTJhYjQ5M2I0MjJlOTNhM2UwZGMzYzBmYzJhNGI4MzcxMWFjNjY5M2YwN2YwMzVmZDlkMDMxMjQyYjZlYTQ1YmViMjU5ZGMwMjAzZjQ5N2E3NzEwNjM5MmU0ZGE5M2MyODUiOiJmNDM2MjhhMjI3ZGM4NTJlMGFkOTMxZTIzNTQ4ZmVkZmQ1NzAyMGEyNjYzOGNlYjk1ZGM1NjAxODI3YTA2OTFjNDQyMDlkMTQxMTNkYTU2ZTZhMWU0NGM3Mjg0NWU0MmViYmM3ZmZiYmMxY2YxOGMxZDMzY2E0NTliZjk0YjEzOTNhNDcyNTY4MmY5MTFmOTMzZTNmYjIxZjJmOGNkMWFjNDhiYzVhZmI2Y2I4NTNhMDllMTA5ZGFkY2I3NDBhOThlNWU3ZWM4NzVjZWE5MGJlMTZiY2RmZWM1ZjdkZTE3NmVlZWIwN2EzNzY4Yjg0YjA5MWM2NjFmNjVlMmI5MDVlIjoxMDQ6Ijc3OTY0YjVjZTUzMjA5ZWU1MzA3MDY1ZDQ5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMWNmMThiYmJjMWQ4Nzc4ZmFmNDAzOTFjMzBjYTQxNzczOWZmOGUyYTUyMTkyNmMiOiJhMmUxMWFjMDkzYWI2NDgxMTg3NTkxODNjZDUyY2E3ZDU3MjhjYTg3ZmUyZjMxZWNhMjhjZmIxMzMyNWUzZTZlOTU5NzQ0NTY4NTc4NjZkZGE3ODM1OTAyM2UyYzk5OGQyYzkzYzZkZmU4ZjcyYzZkNGFjMzljYTA1ODVhNTNmYzA3NGJmMTEyNGMzYWRhOTJlNzg0NjJhNDQ1ZGEyM2U2NTBiZjUyZTI2Yjc4MmZmNTAzMTJlZTJiZWI3NDEwZTkzYzg0MzVmN2I4OGRmYjBlZDYzZDlhMzgyMzk5MmQ3OTZiZjNhYjE0N2MzMzU5M2M1ZTYxOTNlZjMyZjdhNjIwIjoiYmRkOWEyYjcwZTRlZTBjYzUwMWZlY2EyYTUyMDljM2IiOiIwNTFjNjhmZTBjZDgxYjUyZmVkZTEzN2QwMTA1ZTY5Yzc0NzcxYjc3MGVhOWI1NzNhZDkyZWNhZTg2ZjQyMDk1M2Y0NTk3NTU1OTdmNjhjMjlmNmZjYTM5YTI3MjM5ZmFhOTQwY2U2Yzk0OWNjZDQ0YzlmMTJhMDE2MGNmNzRhNTc1NzUzMzEwZjUyZWM1YzViYjljNDQ3NGI4NTI2NjQ5NGU2M2I2ODEwZGRmN2E2YWJkMWNmODI0NGNlYmJmNjlkMzE5OGM0YTA5ZThkY2NiYzk0MjlmODE3OTFmNWMwMjYyOGU5NDc3Yjk4OGUyYmQxMGY5YmQ1ZDY3MzFhZDAxIjoiY2E4OTlhMDA2NTQ3MzBkNjgyMTljYTJlZDliMjMwNThhNWY0MDE1MGMyMzcxNDNiMjQyNDVkZTFlNDQwMzI5ZTUxMzY5MGYwMGMwYzUyYmJkMGRlODA3NGZlNWQ3YTUwZmU0MjA0NzAyNDkyMjdmOTY3MzQwZWZlZWI2NGM0MjQ4ODFjN2YzYTIwYzQwNWQ1OGVhODFmMjMwOWM3Zjc0YWU1NzJiMzAzMTNlMmQ0YjQxOWZiZjVmMmNmOTBjNjcwNmExYWUxYTgwMGE4ODNlOGIwMGZiYmM5ZGMyOGJmNWFhNGEzMjkyNDZiYmU5NGRmNWMyZDQ1MjRmNTczNzBkOSI6OTY6ImRkNDU1MDNjYzIwNDkzZWM2MWY1NGYwMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODEyNDgxZjg5ODJiNDJiMmZiODYyOTdjNGI3YzczOTY1MjkwOGRjNDk4MTcxYzY5IjoiMzJiMjcxMjc1ODJjZWFjMjFmOTY4ZjU0MThlMjRlYzhiODQ2MTdmNGRhYWIwZWIwMDdmMDJkNDU4MTJlODFkNDg2ZGM1MDkwOWQ3OTIyMWM0MzhkZWY1MzViOGE1NTk0NmY1MDI5Nzk2MzEzOWE2YjIxZTEzOWU4MTBkMTliYzE1NjZiMzc0ZDA4MGEzODdhNjQ2YmI1ODJkYzczOGM0NDE1NmViNmM4ZGFkNjEzNTg2NjYyNDE4ZWRjYmIxOGZlNjg4ZDI3MTEwODMxOGRlNzE3MzRjYjU3MWQ0NDJlNGQ5NTM3YjBmY2IyZjVjNzYzYjNmYmNhYzAxMGY1YzRlMSI6IjBkYWQ2NThjNzNjOWM4OGRkOTI3YTUwMmQ3YjE0ZThiIjoiYWY0NGY3NDdkNzdhODNlZjA5NDRmM2JhYzhlODM1ZDc1MmJiNTU3NzJhN2ZiZDNjNmFmMjdjYTBlYWFkZDEyMmM5YWYxZTJhOWYzN2MyYmE0Mjc3OWVkOGNkZTIxOTkxMjUzNzhmYzg4YzdkNmQ1OGVkYzAxYzY1NDkxYzVlZmM2YmVlNThlN2U4YmY3MmYxYTY5ZDNkYmE0N2IzOGE1MDA3NzEzMGNiZDcxYWNjZDNkZDRmMTkzYTUzYzZmMmQxZGY2OTQ0NzY3NjdmNzlmOGI3MWZkNDI3NDVlZTViZDQxZTkwYTdkZDUwYTE1OTc0NDUyNTFiMzJkZTMwMzE2OSI6IjAwM2FlNDc5OGY2YTBiOTc5OTBkNDEzNzM2MjNlNTI4NjE4ZjkyOTljZWJkYjBkMjNlMzc5OWY2MmJiMDYzZTU1MzBlZWY3ZmM0MGMwNmFmMTY5NjVmZjY4OTVmNjc1ZmZiODFjMDA0ZDgyNmNiZDM2YjVlZWM5YmQzZDkwZDc4NWFmMDNiNjRkMTJkMzExYjZmOTBiY2Q3NWE0MDQ5N2QwZmFkNWU1NGY4MjlhMDk3YjI1ZjdhOTYwNGY2ZmFkNDc1YzkyMzlhMGY4ZDU1ODliOGE3NmM2ZjdiYzg1MmEzYjgyMDczNGI0MjZmNTllZTg0NWVjM2YwOWRkN2QzZDEiOjk2OiJiODBiYmMwMDJjYmViZmI0ZWM1ZDQ4YzAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE2NjU3YTdhOWRkYzZiNDU5NWRmOTRkN2M2YmVlOWQxM2FkMjMxY2RjNDZhZTViNCI6IjM2ODU3ZWNjYjViM2MyMjAyNjVhNDA5ODBlODk0OTEzNWU4NDBlZjI3MDYwMjk0MGQzMzk0ZjNmNjc5YWVkNTUyMTdjMWRlMTc1ZjZiNDhhMTZmN2IzOTRhZDdkMjg4YmM0MjU3NjJmOTcxYjc1MmQxMzcyYjM2OWZiMWMzYTY0OTcwYzhkMThhZDZkZTJlMWE5YTU2MWE3NDllM2NmOWE4NTI0ZTIzOWYzMTIxZTg2NDNiZWJlZTQ3MWU1NWZiNWQ1NGEzNDUzYzUxYjE3NDdkZWZhYzk4ZWFkOGIyNTg1NGVkMWNhZTdhYzQ0ZmQyOGNmNGIxZWQ4OTg4ODc1YzEiOiI2ODYyMWVhN2M2YWFmMWU4NmEzYjg0MWRmOWM0M2FhOCI6ImJjMjVjMzhkM2EyMDBmYzE3ZjYyMDQ0NGU0MDRmM2IzOTk5ZjUxZWQ1Yjg2MGMwNDE4Njc1MGY1NWNjNTNjNjQyM2M0NGQwZWVlMDJhODNhZjI3ZDE2Yjk2NTJhN2NiM2QzNGE1Y2IxOTY5NGU1Mzk5YTI3MmRhY2Q1NmM0YjE3ODcyZmQyM2ZkY2ExMjlhNDI5OWI5Yzg3YmFmMjA5ZGQxY2QxZjM1NTA4OGUzZjkzOGU2ZDUwNTNhODQ3YjU5MTNmMGI5MTM1ZDZmMjkwZTM2NTUwOGJlZDczYzYxMTYwYTExYTJjMjNhYWVkNzU1MWIzMjg4MmM3OWE4MDcyMzAiOiJkZThiYjhlNjlmOWZmMTMyMmYwYTZjMzBjYmE1YTZmY2NkN2QxN2EyMTczYTg2Y2ZmNTQ3OGFjOGVhNGFkNmY0ZTk5ZGRkNDE0OWU2YTliMjQ4NjVjYzhmZDYzOTQwNjZlMjRhNTU2ZjNmNmQ0OGM1OTk1OTJjNTZmMDZhOTQ2YzZiMzQxNGUyZmI0N2UxNGQxZjEyOGVmMjZiMzg1OTEyMzY3ZjM1MDgyMDk5YzFmM2Q0ZWE4NjY4N2YxOWYwNTljNTZkYWMyMTkyM2U5YTE1MTU2NzI5OTQxNmViMzExZjViYmY5YTI4OTY4YjA4MGIwYjIwMDA0NDY2OGYwOTE5Ijo5NjoiMDY1ZjZjMmI4Njg5MWM3MTllYTc2OTg0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMGNmOGMyYzQ3Y2Q1ODMyODYxNTdiNDViNTc1ZDRkNjljNzkzYjQyNTAyNzRmZTQiOiJhNjRjMjEzMWM5NGZhODI3YzNhNTEwYjIzYjIwZmI2ZDA0NTc5YmMyOTJkMmVjMzNlZmM5ZWIzMTQ1OTExNWRhMTQzZjczZmJhOWJkOGIwM2I2N2U1OTE0OTdkMTA4ZjkwMGE3Mjc5NTQyYjQ4MGJkM2ExM2VhNTg4YTI5ZWZlNjY2ODhiNTJjM2ZkNTg1OThjNjZkODU5NTg4OGU4N2IyNzczNGU2YzViMjc5NmNjNjBhYjJhYTNkZDA2YTI5YzU3N2RlNWJkYmYwYjZjNjljNzAzNGYwMTgxMDUwZjI4NmI5MzAwZDIxNGY1NDkxNjVhMGI1YjU2YmE4ZTQwNjQxIjoiYWI1OGQyZTE4ZWI4M2MyMGRmOTRjZDZiNTY5YzY1ZmUiOiI5M2ZmNjA1N2VhYWE5NTU5ZDg3ZTMyNzZkNGQ5MDA4ODhjYjFmNTY0MzRjZTI2NzdlZTE0ODZhMGFhOGY0ZThkMDJjNDdkMDZlNjg0MWYzZmJlNWJkNzJkZDM3ZmE5ZDgxYmJlZjgwN2RjYTY5NjE5MTA4NDRlYjk2MTE0MTk5MzYzMTBkNzE3ZTE4NDNlN2IyNzhmNDhhZTQ0YTU3YzFmMjI3YTc1ZmE4Y2JjN2ZkNTdjOGNjM2IxMDFlMDM2YzhlZjMwNDM2NDJjODFmMzgxNTYxYjYxZGE3YzlkNzliNmRhOWVjNDZmN2NmMDkzYzI5YzE5MzBiMjdjMTRmOTkxIjoiYTNmNjIxMjYxYWYxN2VjNDc1NjI0NTQxNDI4MDAxN2ZkMzYxMzNmMmY5ZmY4OWViODk3OWQ0NDE3YjhmOTM4OTJiYmY3YjA4YmFiNzg1MzQxYmYwYzdiNWUzNjQzZjBlMzNmMDM2NjMzZTVlYmVhZTdhNzUwZmZkZmNmYmFiNjkwMjkxNzMxZTkyMjM4YmE2YjQ1ODU5YjMwOTYyOTIyNGZhN2VmYzcyMjk4ZDNjZjFhZTNiNmE5ZTk0Nzk3NTUyYWZjNGUzYTQ2MjA1ZjliYWI3ZWI2NGU0YTQxYWVlMGU0NTI4OTcwNGE5NzIyMWI3MTE4ZDIwOWUwYjI2N2E2OCI6NjQ6ImFlNTM1NjQyNzFkNWRlNWQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhhMzExYmYzNTZjYjFkMWY1OGVhYjQxMWI0NWI4ZDc4Yjg4MDUyZjNjOGFiODIxZCI6IjNlOTE1ZTkyZjE4NmZkZTA1YWQ1NWEyNTk3Y2VhYjgxNDk1YWJiYWEwYmUxMDdkYmY2YTM3NTUyNWQxMTU3YTMyMmIxZjY1NDYwZGNlMGMzYWEyYmMwOGZhODlmNzc3ZGFjNGQyZmMzZTVmN2YyMGEwZDVlMzMzNzNjN2YxYzM1NTEzNjk3MzcxMjRjNzAyOTI4NzI2YmQ5ZGI5NmEzM2JhY2I1NmYxZDY0NWZhMDJjYTFkODg2MjljNTQ3YzBlYWY5NTg1ZWUyM2I1MzBlYTk3MWJmNDM5YzY3ZTNiNzUyYWY4ODI2NjhlYmUwYzczOWIyNmM4Mzc4ODdiOWQyYmUiOiIwNTY5ZDA1ZjM4MjVkMTZhYWE4OWU4NjgxMmY4MDYyOCI6IjI4NDk0YTEyMDI2ZWI4OWI0NmI2MTM5NTczZGNkYTA4MzZhNjE3ZTAwZTI1ZTJkYWE5MmY5MzcyZDg2YzNjMTYyY2ZlYzM0ZDYzNGVhNDgyOTRjNzg0ODI1NjE1ZjQxZTA2ZTU1NWNmOTE2OTgzOTMxZTNkNmE3Y2NiYjQ0NDg2NzAxMzk2MTZlM2JiZjcxMDkzODdhODUyNzAzYjBiOWQxMmMxZmJkOTY2ZjcyYmY0OWE3ZTE0NjFjYTcxNDg3MmNjZGM1OWRjNzc1YzI0YTg1ZTk4NjQ0NjExMjM3MTBmZDhkY2MyNjgxNTg5NGVlOGNmMmNhNDhhNGVjNzNiM2IiOiI5YmE3NzY2NTNlOGQ5ZDI0MGQ5YzFlYzM1NTAyN2ExODczMWM1MDA5Mjg5MjVlN2M1MGVmODNjNmYzNjk1NzA3M2E4Mzg2ZWNiZmFmNDMwNjM0Y2Q1NTdiMWRhMWJmMTIyZjM3NDU2ZmVhM2U5YjU4YTZlOTk0MTNkOWQxNmEyZjFiNDBkZmY4NDNmZTE2YTJmYTAyMTlhZDVkZDhhZTQ2MTFkZTUzZDdhYWJiZWY3YTg3Y2U0MDJlNjIyNzZhZGRjN2Y0NGUwOWFlOWU2MmM1Y2NlNGRkY2U1Njk1ZGI5ODcwODQzODVhZTlhOTg4ODRlYzk3ZTY3YjU0OWFkNDQwIjo2NDoiYzY2OWNhODIxYjZlZjU4NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODJmYzQ3NjM4Y2ZiMzYxZWNmNzkyNGMwMzkyNWQ2MDA2Y2I5OTQ1OWVmNTY5MWU4IjoiZDE0YTU1MGQ0MTliOGUwMzc2MjQyOWE3YWJkYTNiMTdhZDdhMTMwNWU1ZmM2MzllNzE1MzgyODVjZDcwZDc4ZmEzMGUwYzA0OGUyYzMyZDJhN2ZkN2Y4MmM4NzRkNjNhZTkyMmRiNWE3NzExMWI0NmNhZWZiZmU0ZmVlZjRkZjE5Nzg2ZTVmZWM2YTRkZjg0Zjc2ZGY0MTJiMWYwNmJlYTE0OWYxOTk2YjQxYjExN2QwMGQ0MjJiYmE1NTY2ZDNhZjUyODljYTkzNzdmMzI1Y2ExZTcyZjdkNmEzMmRmNjYwN2JkZTE5NGNmNGFjNTJjMjhlOGFhMWU4ZjFjOWE2NyI6IjJhOGUxY2FkZDJmMjY0ZjJhZDdiZTllN2JkZmEyNGEyIjoiODA4ODM1OGQ3YzNjYTg5NTFkN2U4Y2Q2Y2FlMTU4NDRlZGFiY2NjOGQwZmNmOGYxNjlhNDhjZjQzNGQ0ODE0ZjFkN2Q5YWU0MTBlNTU4MWQ0MTRmOTUyZjUyYjg1MmViMTBmY2YwZjJhNjdiZWE4MjZlYTJlMjgzMzFmMDU5NzE1MmU2MjRlMTQ4NDYyZDU5NTJmMTBmYTM2MzY2NmQ1N2ViZmUwMzY2OTVlMWU2OGY3OTE2MWI5OTFlMjBjOGFlNjA5NTIzMmU2M2ZkZTA3M2M3OTYwMzEzNTg0OWM2MmY4ZDk4YTFkODA2MDhmYzA4MTE3MTExNGRiNDE4ODNmNiI6ImU1NGNjOTVlODQ1ZjRkMWIyODg4NWU5YjkwZDFkOWQzY2M1MWZkOWQ4ZmVjOWJjZTU3ZGU4NzgxYTI4YjRlNWI3YWI0NDYwNzRlODQ0NzFkN2E5YTIzNzQ4YjY4OWMzNTRlNDAyYmU3N2Y5ODkwYTljNTJhMmViOTAyMmE2YTQxNWUwMTI4NWRiMWM2ZWI2NmQ1ZTE1ZjQyMTZhNGYzZjQ1NzgyNjc3YjZjY2JmMjBhYzdiMzViZDE1M2Y1MmE1OTk3MTJkMDk3MTJlZjE0NTRjY2Y3MmVlNDhjY2E5NjdmNDkxN2YxYWVhZWFhNmVhYWY4NDkzZWM3ZmYyZGMxZDQiOjY0OiIwOTMzNDNlNDliNzBjOTM4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMzE4MDcwM2UxZWM5M2IyMGQxYWM0ZDY0ZTg1ZDU0NjFkNzVmNzgzYmNkMmY0ZmEiOiJiN2IzNTBkYjZmYzA3OTZlOWZkMGNiMjM5ZjU2MWJmN2UyN2IyYWEyNmI4ZTNlNzZkOGI3MzdjYWExYzFjNWFkNjI0YTMyZjU3MDllNGI3NTFmOGMyMTE3MmQ0ZDBmNGJhMzhjYTRkMWQwZTI1NzBjMDg0Y2FiZGQwZTg4ODBiMzUxNDBjODRmNzc1YzNjMzAxYTliMjYwODI1ZTFmZDc1Zjk4MzU3NzdkNmMwZTIzZDM1OWFmMWE1ZjdjYWVmOTM0YjkxYmVlNTIxNTMxNTgyYjYzOWJlMmNjYTg3YzI5OTFmNTUyNWY0YTJmNjRjMzBhMTQ1MzAxM2Q3M2MxNmNmIjoiOTE2ZDcyZDUxNWQzMjQ3YmE0ODgyOGQ0MTEzYmRhM2IiOiIxMDAyNTEzMDM1Y2IxZDdlOGIyNzEwZmY4YzkzY2VjNTVlMmUyYzJiNTYwMDBkNGMxMTgyYjUyODY3MzZhY2QyZDZmMmZjOWI4MmY3MTE1NmRiYTZmNzc0NjM4MDU2MjdlNGJjMzhjOTZlMDkxZWNkOTQ1ZGY3ZTk5NmU3ZmMzYmJmZGFlM2Q4NWVmMTMzN2ZiY2U5NjBmZDFkNjBkMDY5NjJhMTY2OWU5ZThkMjBiZTE1MWY2MzIzY2IzOGVmNjhhYjVlODM4ZjAyYTBmMzc5NTY3ZjUxOGYxNWQ4MWIxOTJjYjI1YTQyMzU2ODA3YzFiOWMwMmJlZjgzMDlmZjQ0IjoiZDU5MGYyYWZjZDY0YzU3NGVjZTEyYzY3NWY1MDllZmRmZmMwMWUxNDA0Y2JhZmJjOTIzYzRiNDQzOTBlZmY2NmRkODM5ZTZkODAwZGY2N2JjMDZmNDlmNzY5MTFkZjNjZWMzNmEzYTE1MjE3NjJkNmQ0YThlZTYwMmViZWZkZTAxNzg4NjM0NDNmOTE4NjY4ZmNkZThhNTMxZjNiNWVlMGU0YzM3OWVjZjNlNzVlN2M1OWY3NTNlNDFmNGUzOTgxMWJkM2U3ZGQzZDZiYmFhMWU4MWZkYmY4YmQ5NzYzODRhNmM0NTA1ZjdlNDI3MDMyMWM3MzI5YmJhN2YxNTUwNiI6MzI6IjIyZTUwZWQwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMmJjMGE4YWI1NDY4MTIzMDA5YjJjNjlhYWZmZDBhMjBhMWZiMDgyYjU1YTdlY2IiOiI4YmYzMmFmMTYzMmE3OTAzZjAwZTgwMWVlNmU1YzY5MDE0N2MwMjFiZTY4ODZjZjI0NjJiMjE3Mjc4NmFiMjk2ZTBmZWI5NjY0OGU0YTYwMmFlNmRjNDVlMmFhNjBlNjYxMDM1NmNkZTI2YjFkZGUzYWExMTRjNTQ0OTIxNmE0NjdmY2RlMTgzMzJhNmQ0ODJkMjRhMWVlOTUyMzc5MzQwZDAzNmE0OGI2M2VmYTA5MmRiNGMzMGE5NWY0MDJkNTdiOWM4MzcxODNlOTAwYjQ3ODA1ZjE3MGNmZTllNjliYWVhMmI5Mzk3OTllOTgzZjc0NzBiYjEyOTdmOTM3YmJmIjoiYmNmYzE1MzA4ZTg5MWYzMjUwNmE1MGM0ZWQ0MWJmZjYiOiIwMWJmZjVlNjA2YTUzNmU5NTEyMTNiMjM2NzJkYjkwNzRmYThiYmY5NDdlODE1ZDMyY2JmZTMwYWRjMWU3MzY1MTdmODYxMzk4NDBhNGFhMGE2NzFiNGU5YmJkNmE1OWQyOTJkYjM0Y2M4Nzc0MmMwZGZkMmQ2NThlZjE1NzczNGM1ZmRlYmIzZTU3NzJkNDk5MGFkMWIyNjc1YzIzZGRmMTQ3MmU4OTJkYWZlN2JmMTQwZDYxNGM1MGNmOTM3OTIzNDkxNjYyMjk5YWI5NTc2MDZmNGNhNWVlZDJmYWNkYzVjNjU3Nzg0YmFjODcxZmFiMDRkNmNkM2NjYjE4MzMyIjoiYjhkZmYwMzE0MTgzMjk3MGM5MjVlN2ZmMDAzODM5NGEwZGY3ZjM1YWRkMzA0NmNjNTZmNzNlM2VmZjU5ZTE4OTMyYWFjNjk3NDU2MTA3YjZkYTdkYTMyNDkwNDljM2JlNWMwOThkZDczMGNkNGJmNjhjZGY3OThjM2E5MzJiMmM1MWYxOGQyOWU0Mzg2Y2JmMWI3OTk4YTgxYjYwMzM3MjMzNzc4NDMwN2IwYmViNTkyMzVlYmE0ZDNlNDgxMDg5OWY2ZDcxYTk5NGJhOTc0MmFlYTE4NzU4NzhjY2VmMWJmNjc0ZWU2NTVhMDcyMGJkMzdlNDRiMzNjYWZlNTc0MiI6MzI6ImJkMGJlODY4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YzA3ZDVjY2FhZGI5ZTNiYTViNWRkZjM4MGE3YTJhMTc1NTIyYjk4ZTMxZTFkMzQiOiIwNGQzZTZiY2Q1ZWJmNjk2ZmU4NGE3MDJmZmQ1Zjc2ZGNiZTk2NzljOTA5YjM2ZDQxY2U2MzYyZjIyOTMwNGFlYjE5ODk2YzYzNzZjYjNjMjUwODFmNzA5YWY1N2QzNmYzOWY0MjFlY2RiNzBiZWQ5ZjgyOTU1OGJlYzZlNzg4MjMyNzVmYzExZjlhMmQ1Zjc3M2QyNzEzNmQ5MDNmZjA4ZTU5MjYzMzhkZmRjYmMxODI4MjU3OTRlNWY3MzllZmMxZjBlY2RhOGU1Mzc1MWVkYmUwZDA4OTYzNDcxZmI1MDk5ZjJmZjMxZjc2YjQ3OTY3N2JkNmQxODZhNDA5NTI1IjoiZTRkYjVjNjQwM2EwM2RhYTcwMzUxNjc2MzA1MmJjZTAiOiJiNzQ3ZDk3ZjI2M2QwZmY2MTE5ZGYxYjUzMzI2NDBkMmU0NTY4ODEzYWRjMTJlZDc2MTc1ZmRmZmZhZmQwODc0NTY3NDhhYmIyNjcxOTU2ODhkMmRiNDFjYWVmMzAxMTE3OTc5ZGZkMmRiOTcxNGIzNTIzOTg1OTQwMDViZWJiNDQ5ZWEyMDQxNWZjZmIyNjcxMjUzZjY5YmY2NDY3Y2U3ZjViY2UzNTBhODM0YzQ1ODZlYjAzZTc2NmMxOTMwZTdlNmNjZjAxMjgzZWEzMWI4YzczZDc5NjdjZGUwZjJhNTNjYzQ2YjFiNTBjNDg2NDkwNDRkNmY3NTNmMWQ1NGI1IjoiZjVmYWY3YmRkOTljNjJlYzg3ZjkzZGEyY2EzY2UzMWU2OTRkZjBhMGZkMDRkNjE5MTRmOWE3YTQyMzVkZTIwZTBhNDA2ZTI5N2JhMTA5OWZmZjhjMTRlOGZkMzdhOWQ2Y2JlMmM1YzU3MmM5ODhjYjFmZjg3ZmZlNzgyNWUxOTQ3ZWEzZGE3M2I4YjM2MzM3MjFmYjRlMDhkZWIzZjhmY2FlMjQwN2Q3M2JkNGMwN2YzMmI0ZjlhZDBiMTM2NDAwM2IxMWY4NDAzN2EyODIzOWU5NmMzOTk2ODc0YmE4ZTRlYzcyNzBiZjA0NDFkNjQ4ZjUyZjM3MzBkMzBlMzUzNiI6MzI6ImUwODIwYzRkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGQwMWQ0ODc4OWVmN2YwN2Y4MGE3Mzg1ZTRkMWIxNzM0OTAzYmM2ZWM3NjhjOWYyIjoiIjoiOTQ0ZWQ3NzQzYmU5Y2UzNzBjYmE3YjdjOWI3ZGVjZTIiOiIiOiIiOjEyODoiZGZhMGFiMzg5YzNhNzgwZjU5OGFmODAyMDBjODRkYTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMzgzODQ5ZWQwZGIzZTUyNzQzYWE4MmZlOGNkOTE3M2I0NTc3NTViZThiYmQ0NmMiOiIiOiJjNmI4NTE4MzQ2ZWM1MmMwMDE2OTdiN2JkMzhkYzc5NSI6IiI6IiI6MTI4OiI0OGExOTkyNTQ5YjYyN2M4NjIxZThmYmFhZGFjYjE2YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkzNjM4ODA1M2VlMDExNmIzZjc4M2FlMzRmMDAwZDVmZTJjNWQ3MTI4NDJkNDZmOSI6IiI6ImM1NDI2YjIwYzAxNGU0NzJjN2I4NWJlMmVkMGY2NGM4IjoiIjoiIjoxMjg6IjRjZjBmNmE0NWYzNTQ0ZTNkMzkxMzc1YzhmZTE3NmIxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDBkZmNiMzE1MWE4ZGFiMWNiNzlhNmExZTZhMjRmYjU1MDI0ZDBlMjU2YmQ0YjA3IjoiIjoiYjg0OTVjYzU0NjUzZTdhZDc0MjA2MTUzZWE2NGMzY2IiOiIiOiIiOjEyMDoiMWQzNzg2NDEyZTBjZWIzODNkZTM4OThlZjJjZmZlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODNjYTQxZDhiMzNjNjEzNGExNGQ4YjMwYjBjMzZkNWI3OTk1NzRkZDkyNWYzYjhiIjoiIjoiZmI5YWNhNWI0OTMyMDM1YzY1YjU3MWQxNzBmZGY1MjQiOiIiOiIiOjEyMDoiOTc4N2Y3ZDY4ZDI2NDg5NjNjYjQ5ZmQ3NDU5MTIxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODg2ZTY0NjY4OGQ1NzNjMmRjYzhjYTIyOWExMWIzOTRiMzQwMDQwOGRkODAxNTAzIjoiIjoiYzA3NDQ2ODU3MjJjYjg3NzE3Yzc2ZmQwOWE3MjFkYWMiOiIiOiIiOjEyMDoiNzk0ZmU0ZGYwMDg0YzIxZmZlYWY5NTllNWIwMzgyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGI4NDVkYzJjNGU5ZTVhOTRiZDNlODk2OTMwMGIxNmI0NWQzYWQ1ZWFkYjJlODBhIjoiIjoiMDkwMGIzZmEzY2M5ODMzZDcwMjY1NWQyODVmOTA0ZWQiOiIiOiIiOjExMjoiZGM2NzA1MThlMTUwZDMyNjkyMWJkNWY0M2U4MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFjOWZhYzJlMzJhYjQ0YTA3NzQ5NDlkNTNhNjJjMWNkYTA0YjEzMmEzYjA3YTIxMSI6IiI6IjhjZjZhODFiZmEyMTYzM2FkOTVmZmM2OTBjNzM3NTExIjoiIjoiIjoxMTI6IjRjZDdhNmU0ZjNlYzNkNDFkMDg2ZTZhYmYxNGMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5Zjk3MjFlZjc4NDk4MGQwMzE0MDQ5MGY3NjAzMTNjYzhhNTY0MjRhZmZiMDE2NzIiOiIiOiJjMTA0YmQ4NDgyZTNmZTczNTljODVlMGU5NGZkNDA3MCI6IiI6IiI6MTEyOiIzZjY4MmZjNzE5ODk4MDRiYTc0YmRhZDA0YTk3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjdjOTM1ZjU2OTcwNjc4YWI4OWY2ZDk3MzE1YTMzZWZhZTc2MTQ4MjYzZTk1ZjFlIjoiIjoiMWE5MTk2NWM1NDU4ZjRhMWZkZTMwOWNkNDJhM2YyNzciOiIiOiIiOjEwNDoiY2UyNjZjNmYwNDQ3NjIzYTNlZjFmNmY1N2MiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMGVjZWE2Y2FjNzBhOWRlNGY0ZjdmNDQxZDZiOWI1NjA4Y2NhMzlkMDdjMGRlZDUiOiIiOiIzNjFlNWNkMjFjNjcwZGUzOWI1ZjBiMmI4OTQzN2Y5OSI6IiI6IiI6MTA0OiI0OGE5NjIxNTIyYTk4YmM2YzBhY2YwMzQyOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRmYjgwYzRmZDAyNmMzZjY4YWI4ZmNiOGUyOGUxNDRmZGIzYmEwMGQ3MDI5NWViZiI6IiI6ImVlNTUyZmI5NGE1MjdkMThkMjg1ZDZjMTk1Y2E3YjJmIjoiIjoiIjoxMDQ6IjVlYzk3NjMwY2U1OTNlOWQ1NjAxMzY3NzRjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMDI2MTAyM2VlOWY2ODI3ODljZTlhZTk3MGZiNzYwMWYwNzU1MTI1OWVmOTE5NDUiOiIiOiJiZmZlNGFmNzZkYjc1YmM0YTNkNDJiNTdjNzNjNTFiNiI6IiI6IiI6OTY6ImJmODI3YjQ1MjZkYTc3YWIyZTIxOTA4YyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGZiNGFiMjA3MWJmZjRlYzIzOWFjMDVjMDQ4MDA4MDZkZjJjMjU2YTQ4NDViMTNhIjoiIjoiM2VlMGUyZTcyZWVhNDM3ZTQ2YTg3M2JkNjU5YjFjNGEiOiIiOiIiOjk2OiI1NzJkM2VjMjY1MGFkNTdlZWM4NGZlMDAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE5M2Q1ZWJlYjQ2NmQzZmU2ODc1NGJiYTQxM2M2NTExMmFlMjljNWNhNWU0NTBjNCI6IiI6IjA0ZTlkMzFiM2IxMjA1Y2FlMzdjNDM1ZDVhNTU3OWRmIjoiIjoiIjo5NjoiNzEwMDQzNTZmMjY2Njg4Mzc0NDM3YWVmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YTQ1NWVhMWQ5YTc4NDI1YTQxZDQzZTI5M2U4OGRlNDBkZDZhZDlhYjJhNjNlZjAiOiIiOiJjMTA4YzU2YTFiMzI2MTA0MmFkYzg5MDQ2YWQxZWNmOCI6IiI6IiI6NjQ6IjIxM2Q3N2VkMDUzNGNjMjAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ2ZmZmODc5N2RiMmYxODg0YjdkNzFlM2VmM2U1OTgzMjM0YTgzN2RiZDBjMmNkNiI6IiI6IjZiZTQ0MTdkN2MwMGZlOWM3MzFlMDkzMmE3MDM3YTcxIjoiIjoiIjo2NDoiNjhiNmMyODc4NmEwMTdlNyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODZlNmM0NTFlYTBlY2FlYzllMzY1YmM0ODMxZTdhNmMwOTJiNjVlZTliY2YxYjg2IjoiIjoiNjI1ODE2OGRhNDA3Y2U0M2NjMThkNjkzMTQ5N2MxZjMiOiIiOiIiOjY0OiJjYmYyMDE3MmU3NWE2MzE2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5Mjk1Y2M2NDU4ZDkwN2RhNWU3YzM1NmE3ZGU1MWViOGU4ZDMwMzFmNzJhMDVmYjciOiIiOiJjN2VhYWQzMzg5ZmMyNGE0ZWY5NmE3MTFmZmJmZmY5ZSI6IiI6IiI6MzI6IjEyNTA4ZTM3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMDhiNmVlOTU4ZjgxYTdmYmYzYmMzODZlMTY3NDU5MjA2ZGY5YzFjYjk5OWQ5MDQiOiIiOiIyYzYxYjk5MWNlNDc4ZDlhYWM4MThkN2FhNzVhZGEzNiI6IiI6IiI6MzI6IjMyZWFkMTcwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NzNkMDMzNzczMjE4Mzg3NjkwYzI4NzE0NDg1NzhkODQ0MGVmMzY1NTM1ODM5MjgiOiIiOiIwMjA3MmVjNzQ1Yzg1NmM2ZTg2ODczYTA1MjNkNjAzYSI6IiI6IiI6MzI6ImU2YTU3MjZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2ZkOWMxMzc1ZGZkMTllNjRiNWU0Yjc1MDIyZmFiYWEwNDk2MjdkNTIzOGNiYTNhIjoiIjoiMGE3NDVjNjkxMGIyM2M3OGIxYjQ0YzAyZjFjZTExYjIiOiIwY2M2NzI0YjlmMzY3NTYxOWZiYzcwMTE3YmZjZmI1ODcxZTkwM2IwZjAxMzgyZTQwNDc5M2MxZGZhZmY1YTViNDEzMWE3ZmMzMDQxMDE0OTQxZGMyYzUzODcxYmVlM2ZmMThjMDhlOWFiYmIxM2E4ZWEyMjBjYjg5Y2Y2NWJlYTE1ODFlYjhhYzQzZDE0ODIwMzUzMmRhZDg4NTQ2MTYyMTBlZDdmMWY5NDY3ZTZiMjIwNzFjY2M4YmI3ZTNiZDg5YTBlZDAyYTcwNTg0MDFhYTRmMmI1ZDBjZTA1MDA5MmI2NTA1OTEyODJlNjZlZTc4OWJiZjAzMmRjMTA1NTAzIjoiIjoxMjg6IjhlYzQxZTljNzZlOTZjMDMxYzE4NjIxYjAwYzMzYTEzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmM5ZjE2YzVkZmY0YmQ4ZDE4NTU5OTVkY2FkMWM0MjUzNzU5YjZlMmE4MzM5OTViIjoiIjoiM2YyNWUzMjEwZDZkOWNhYTg3MjVlYjU1YzY4MTNjZWYiOiI3YzZhNjZkOTMwYzk1Y2UxMDI4MzEwY2ZhMzY3MGI3N2ZmZWI1ZTliNjI3YTY2Nzg1OTY2NWMxZGVlOGU2OTkzMGMyODdmYjFmMWEzNzA2ZWQxYTBkMzVlYjZkMWJlY2IyMzYzNTJhMjI2YTViNjg2YmMyN2UxZTFkY2U0YWM2ZDU5NzRkODhiOTgxMmIzOWJhMjg5YjI0OTA4MjEzMTliNWZkNjc3ZGEyM2ZhYjNhZGJhZTRmYjM2MzBlMjU3MWFjODg3ZWQ5NTFhNDkwNTFiMGNjNTUxZTdlYmU5MjRjMGNiYjFjNTE2ZjcxZGI2MGUyNDc3MzQzMGRjMzRmNDdiIjoiIjoxMjg6IjVlMDAwNDc4YjU1ZWNiMDgwYzFiNjg1ZjI0ZjI1NWE5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYThlMzkzZTAwNzE0Y2Q5NGRlMDM0NzM1MWI5MjRlYmQ1NTUwMDNmM2EyOTc0OTNmIjoiIjoiOWM3ZWFmNzMwZmE4MDc0YWNkMzcyZmRjNTNiNzI2YzAiOiJjZTRjYjQ2ZTY3ZDg1YzVlNjhhZmU2MWRkZWNiMWEzNmRhNGRlNDI3NzRkNDUyNTBkMGQ1MmIzMjg4MzQzODVjZTFjZWJhOTZmNzAzZGFhYjgxZDdhOTgxY2Q4MGM0Njk4NTVlMTRkODM0ZGY0MWU0YzBjOTg4NzNmM2RiYjc3N2ZjMDU2MmYyODRjNDY2YjcwMWE1MzBmMjdmYzRlNjgzOGNlY2JkMTYyZGIzNGI4ZThhMjMxMzFkNjBkMWY5ZGFjNmMxNGQzMmEyMTQxMTczZjU5ZjA1N2YzOGFmNTFhODlhOWM3ODNhZmQzNDEwZGUzZjJiYmQwN2I5MGE0ZWIyIjoiIjoxMjg6IjY2YmI0NmFkZjdiOTgxZjdjN2UzOWNmZmZjNTMzOTBmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmQzNTZhOGFjZDEyYjA2ZGU5ZjYzODI1ZTkzNjY0Y2FiMWJlYWU3ZjQxMTJjYzcwIjoiIjoiNzJlYWY0NTliOGFmMGY3ODdlOTFkMTE3OTMxZTNjZGQiOiI5Mjk1YjIyN2JlM2UxZmFmNGU5NjliZTZjN2YyMGQ1MDc0MzFjZjVkYTllMmE1NzdjOWIzMTUzODA1ODQ3MjY4M2JkNTJmMGFkM2YyZmE5ZjY4MTU5YzFkZjg4ZTdkZGU0MGQ2NjEyZjhhYmIwZjExYTAwNzg0MTliMzRiNTU4ZDkxNDRlYTY1OTZhMDllNWQ1NTQ4YjI3NTYyMGU1YTMwOTZkY2ViMjc2OGQyZjc3YTBiNzllMGI5NjMzODdkMzAxNmVjYzJmMTU1ZDkxODJlMzIwOWQ5N2M3NjMyOWI4MzBiYjYyZGYxOTVjYjJiZTExMjIzNTY1ZjQ5NmU3NTFhIjoiIjoxMjA6IjJmZjRhZWNjOTBlMmRlOWE3ZDNkMTVlYjMxNGNjOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgwZWNjOTU4N2JjMmNlYzFiYTg3YWI0MzFjN2VkMDM5MjYxNjljMDFlYmExOTcyOSI6IiI6IjVhNjVmMjc5ZjQ1MzU3MmUxNjlkYjMzODA3ZDliNTJkIjoiMjk1MjBkOTAyMGVmYTFlY2Y1MTRlMzlhMjg2ZjM5OGM3MjI1Yjk0NTYwOGQ0YjU3ZWM4NzNhZThiZmJkZDQwZTRjYmQ3NWI5YjUzNWM5ZjE3MWNkNzkxM2VkNGIyMWUwOWQ2YmIwMzBlYWEyN2NhNThiMDgxMzE4MTcxMTNjODUyYjZjYmRmNTUwZDk0ZGRkZmRlODU5NWU2ODk0NzBjZjkyZjljMjA5NjBiOTM2YWMwNjkyMTcxMTU4ZTU0MDQxMTU1NDgyZjI5ZTRhY2FlNDE1NjVkODdmNTY0MWQxYWFjOTZiOGNiNzYzYjdmMTI2N2NjZGJjZTIzNGQwNjdkNCI6IiI6MTIwOiI4M2RlYzBmYjM2NDYzYjg2MjcwNjU2NjgxNDU1YTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5NDM0NTI5M2ZiNzczM2ZlYTljOGI5NGJlMmY0ZmMyNmY4YzM2NTVmNTgzZTJiMGUiOiIiOiI4YmFkNGYzZjI4OWI5ZjQwNjNiYTM5NjIyYmEyYjdlZSI6IjdlMmI2NTIwZDdhNTU0ZTYxMmQwMWY0NjI2MDZjMGU2ZDAxODFiYWZlY2UxZGFmNTRmNDMxNmQ3MDc0ODNhNWRjZDQyNzVhMDhjYWVjYzFjMjBmM2UzMjg3MmZlM2U1N2ZhNjJkNTk4OTQ5ZjVlNDllZjBlZmQ1M2U5MTg2MTdlMGExNDAzMzhjMDA3MDI1NDkzZjJlMGY4ZGJlNWZjYTRhNTdkMWRiNjMzMzU1MWJiY2E3OTI0M2E3M2FlOGE2OGRhZmIzMDg5OTk4MzU5MTU5ZGY5MTZlZTZiYTRmOTI4YTZhMTczMzkwZjE1ZjJlZTYwNDVkNTc4ZGQ3NTdiYjEiOiIiOjEyMDoiZGEzMDUxODFhMTI1MTc0MjBjNmYwZDcxZmQzZWUxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTM5MTU1MjMwMzFjM2NhYTU4Y2UwMmMyYjFlNmVlMmViNDJjZGFmMzEzMzI0MzJjIjoiIjoiZDU0MTY5ODZiZWIzMTMxYWZkNmI3OTY3ODM2ZDI0M2IiOiJiYTRlODgzMTQ3YzhmMDdhZmMwODczNWU2ZTQzOTc5OGJlYzYwZTAwZWQzZjU5ODJmNjZkNmI4MmE5YWY3NTgwOTM0MTEyYTk4NThmODNhYmJkNzExOTMxOTAyOThmMDY4MzQ1M2QzZjgzODhjNDc1ZmJiYzhmOWI2YTNkMmM3NzA0NmI3Mzk4NmE1NGNjNDU1OWM1N2NiYjg2MzMwMjY3ZTA0YmNmNWZkNTgzYzZkMjk2OGE3OTcxZGE2NGM5OWQ5ODYyMzY3NjE1NGIwZWU0MTNiYTUzMWViZjEyZmNlNWUwNmI0ZWUwNjE3ZTQzYmRhZWI0MDhiNTRkMWI0NDQ1IjoiIjoxMTI6ImYyNzNmZTY2NGU1MTkwYTUwNmRhMjhlYTgzMDciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3OTlkM2ZmMjY2NjQ0MTI4ZjMzMGNlYjhjMDI4Mjk3OTkxYjJhNTU5M2U0YWZhM2IiOiIiOiI5ZDI3MDYxZGQ5ZDUwODE3YjMwODZmNDUzZjFmNDAxYSI6ImQzYjVjNDIwYWM1OTdkYWFhYzc1MDNjZDE3ZjU4MGU5NGFkNzc5ZmFlMGQ0MTk5YWRhMmM3ZGE3YzRhNjExMjI4NzUyMzc1NjQ3YTAzMjQxZjI5ZjgxMGQzYTZhNzRhMTQwZWY5NjUxZTRhNjA5OTI1OWY3ZDQxZWM0ZTUxYTAyOTE3ZThjYzM1ZWRmN2Y2MGZmYzQ3MzgwNWY1NmYwYWQ1MWZjYzc2NzY3MDE1N2MwNTBjMzIxNGQzNmY4MzFhNTRiZmViN2FiMjAzOWNiMTBmNzkxOWI4OWIwZjYyM2E1NzJhYWVkMzEzOTgzYjEwNWZkZmY0OTVkOTc5YjhhODQiOiIiOjExMjoiZTY5MGM5YWZkZWNlYTI0OTRiNmNmNWE1NzZiZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc0ODA5MDVjZWU4YmU3ZjQyYjk0OTA5MzYwNDFhMTliMDYwMzMxNzEyODgyZGE1NSI6IiI6IjI3NTAwYTA5NTA2ZTAxMzNjODhmNjVlNzc3MjFiNTQ3IjoiNTI4MzJkNDExOGZkZGYxODJiMjE1MTNkYjI1ZDU0YTE5MjIwMzM1Zjg2NzZlYTM1YzA5NDFkMmEzOGEzYWE1MzZiOGM5Y2JmMDkzZGU4M2M2YjI0ZGEzMzcyYmFiYTI4MjYyODliYjNjYWM0MTU3OTViOWJkM2VhNjJiYjliNDg0NTA5NzhlNzliOTM2Y2Q3MGNkNTUxZTU4MGE2ZGUzNDE4YTJiZTBmNGMxZjA2Mjk1NGFlZDZhZGM5NGQ4MDVlNTlmZjcwM2QyMzlmYzIzMThiODBjZWU0NWM1N2Y5MTY5NzdiMzE5YTljZTg4NGQ3ZTAyNzI2ZmRiNzFjMzI4NyI6IiI6MTEyOiI1MmE1NzIxZTk4YmExYTU1M2Q4ZTU1MGYxMzdjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDQyZGIzZjhhZjk1YWQ2ODk2NmJjZTljYTAyOTdlZDQxYjYwODY4M2EzNzQ1N2Y1IjoiIjoiMzJkM2U5N2VkZDNmMzkzZGE1YWJjMzgyN2NhZTFlNjciOiI0ZDdjMmVlNmUwMjRlOTVhNmU2ODRkZWQ5ODk4ZjVjN2ZhZTdkYTg2NThiZGI0MDU2MGRhYzY0OTVlNDZhNjkxZTk3YzA0N2U2NjA0NmI1NWU4Y2Y5YjAyZDMxZDNjYWVlYmUzYTlmOGFlZWQ3NTZkNmIwZGExYWM1ZDRiYTJjNWU3YjU0YWRkMjJmNjgxYWIxZDVhMmFjMTQ2M2U4NDQ3ZTA4NTkyZTBjMmYzMjYwNWJkMDJmMmYwM2M5MjVhMjE1OWU1YmRkODgwMzIzZjRjZTE4YTgyNmEwMDk2MmNlNDE4ZGJiZDVjMjc2ZTNmZjMwZjFjYmFhNDc5NWQxY2U1IjoiIjoxMDQ6ImUyYWZiYjk1YTQ5NDQzNTNlZDIxODUxZjEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2Y1ZWE5MGY5OWZjNzY1OTRmMGYwNjQ0ODMyMWJkNGJiNWU0OTRhNWUzNTFlNDFiIjoiIjoiMDAyYTVkYTNjNTQzY2E1NmRkN2U1YjAxM2IwOTRmNzAiOiJiODE1MGI1MGUzNmRlODUxNThhOTZkMjA5NjY3OGYzMWYxNzljODc2NWFlNmJhNTcyM2NhNjU1ZTg5MDUyOGVhZTk2ZDQzOGY5ZDkzNjU1NzVkYWRlYTNjZWJiNGQ3ZGYzYTlkNTMyM2Y5MzY5NmM0MDc4MWE2NjYxZGQ0ODQ5NTMxZTY3MmY1Y2VlN2NkZmM1Mjk0MTZjOWMzZmFhODg5ZDBmNjZlZTQwNDljOTQ5YzNjODQ1OTY4MGY0OTBiYmIwYTI1ZTUwYWY1NGRlNTdkOWUzMjQxZTBkZmY3MjYwNGFmNTU4MjdiOWM0ZDYxYjdkMWE4OWY1NTFjZWEyOTU2IjoiIjoxMDQ6ImRiOWZkOTBhMGJlMzVhMjlmODA1OTg5NDEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGEyODdkMzQzNzlkNTZmNTQyZWRiMDJlYTY3M2JhYzA5NzE1MGY4NzY0OGE1N2I5IjoiIjoiNjY5NjAzNGIxYjM2MjkyN2I4OWFlMWI3YWI1Mjk3ZDciOiI0NTgxOGI3YjY5YjA1YTEyMWZlNWM1NzNjOTkwM2NiMTE0Nzc4NzNiMjRhNTQ0YmE5MTliYWVjNzhkMTU2NWY0YWQwNzY2ZGE1OGJmYWJmYWExN2FjM2M2MjgyMzhhNGQzOGI1YzBiMTRiNTJlMzk3YmNhYzk5MTQwOGRkN2IzMjJmZjYxNGJkNjk3Y2UyYjViOTRjYTE1NWE0NDQyZGRkOWU1MDJjNGE1ZjgxMjEwYzMyZGZmMzM0ODFmNDIxMTg5N2RiMzhmNjE5YjMwOGYzNzA4ZDU1NGJkYjZjN2I4YTRkMmE4MGNjZGZkNWY3MDUwMWM4MzUwMmEzMTJjYThhIjoiIjoxMDQ6IjhlNjVkODZlZGMwNzE0NDY0NTRhMWJlZjM0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNzgyYWMzMzRjYmZmYzkyNzY5YTE3MGMzY2Q0MzkxNWY3MzViNDQyM2ViYjRkYzMiOiIiOiI3MzZmMmYyNGNkMDRlMjZkMzhlNjljNTViMzhjY2E3YSI6IjU4MjdkMzkxZWZlYzJmOGYxMDJlNWYwNTNhYzQ5NmUyOTEwMjQ4YTBlYjcyZThhMGIzYmYzNzdjNjM0OWRmMDJhYjA0MTBhM2QyOGJjMjdhYmM3Y2JlNTgyYTAzMDAwZGI1Nzg0MzU2NWU0ZmIwNmM0MDc4ZGU3NWMzZjFhMjExMzBkNTViZWZiN2VjYjkxOWFkNzg5YTRkZTI4MTZjM2E0MmQ0ZTliMzJlMzhkOTgwYzA2MDQ1OTg3ZDAzNzM5Y2JlNzcxMGQ4MzljNDJmMDRmNTA4ODA3MmMxYTEwNDRjM2I4OTgwOWI3ODBlNzRlNTRlYzEzNWZiZTQxMjllZTAiOiIiOjk2OiJjNmRjM2M0YWU1MmYzOTQ4NTAzZDg0YTQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIwNTI5YzM3NGYyMWM5N2IwYThmOTZmN2JkNWJkZWIzZmNkMmIxMmRiMzBiM2VlNCI6IiI6ImU2ZTQ1YjdjMjhmN2ZiY2FlNjU4YWNiNTMzNjE0ZTQ4IjoiYjQxMjkwMDMxOTA2NzA5ZWM4MDQ4ZjQ1MGE5NDBlZmYwNDIyYTZlYmM3YjQ0NjY2YzA1ZjE3YWVjOWRlYmMxYmZlY2NlNjJkODk2ZDVkZjQ2MTg1MTdmYjU3Y2U3YjA0ZWYxNTc5ZWJiMjYzNmRhMGVlYWQwNjNiYzc0ZWMxODRiMGE2OWNhM2ViYTY3NWZjNzEwN2JiNTJhNDlmOTM3ODM2MDg2Nzc1NjUyMDVhZGE3YmY1YTczMTQ0MWU0NGNlZGU3ODExMjBhMDI2Y2M5M2NmZTA2YTA2ZmIzMTA0YTUyMWM2OTg3ZjEwNzA4MjNlNWE4ODBjYmIzYThlY2M4OCI6IiI6OTY6ImU5ZWM1YWQ1Nzg5MmNlMThiYWJmZGU3MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTYzNDc4OWIyOWUzNzM3NjBlY2I5OTUyZjRiOTRjYTc2ZjQwZGRhNTdiYTM2M2RkIjoiIjoiN2NkMWQyZDZiZWVmNDRhNmQ2MTU1MTgxZGZjYTNkYzYiOiIwMTMwYTY3OTM1ZTJkZjA4MmE5NWQwYmM2ZGFiMTcwOTNmYjA4NzQ2YTgwOWNjODJkYTc4OTNjOTdjNWVmYzAwNjUzODhiYjg1YzljMjk4NmE0ODFjYzRiYmRlYjZlMGY2MmQ2Y2QyMmI3Nzg1YTE2NjJjNzBjYTkyYTc5NjM0MWU5MGE1MzhmZTZlMDcyOTc2ZDQxZjJmNTk3ODdkNWEyM2MyNGQ5NWE0Y2E3M2NlOTJhMTA0OGYwYjFjNzllNDU0ZmI0NDZkMTY1ODc3MzdmN2NjMzM1MTI0YjBhOGZiMzIyMDVlNjZiOTNiYzEzNWFkMzEwYjM1ZWVhMGY2NzBlIjoiIjo5NjoiNDAwNjY4NWUyZDMxN2ExYzc0ZWY1MDI0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMDA3MjExMDU3MjMyMWFkOTgwNGVmYjViY2JjMmFlN2IyNzFiMWNiYjBmNDg5N2IiOiIiOiI2MDRlZDgwNTY2NjZiMTdmZDI3YjExMWFmZDQxOTM3NSI6Ijk3ZjY4YzAwNTEzYjIyNDdiYzg4YTMzMWEzZmZhMTIwODAzODczNmQ2NzYxYjNiMDgwODg0YThkZDQ2ZTA1OTZmMmMwMGMxYTkzYmNlZWVlZTgxNDIxMGU1N2Q3ZjFjYmRiNGUwYzJlYTZhMDgzNGJhZjcxNjk0NWFmOWFhOThlMjgyNmFlMGViNTcxN2IyNDFlZGUyYjllODczZjk0YzFkYjllYjVlMWIyNWY3NTgyN2MyNTg0OWEyYzdiOTIwOThiNTQ4NDVlZDgxZjUyODcxYTJiMGQxMmQzMTc4NDZjZWMzNGRlZmFhYWZjM2JkM2NjNTNhNmFiODEyYmQyNTAiOiIiOjY0OiI2NDg4MWVhZjc4YWVhYTdkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlOTFlOGMyZDY5MjhiYmFmODcwZTE0MWVlMzRkM2E1NmQwMGRhY2M4YzdlNTA1MTQiOiIiOiI2ZjNkNjYxYTNlMzIxODQ0ZDFmYzEyZDVlYzJiZWNmNiI6ImZjOGU1YjQ1YWQxNjQ3ZjlkYmRiYjZiNDM3YWJlY2YwYThhYzY2MDY1ZDBlMjUwYWEyYWU3NTUyNTQ1NWVlMTNhZGNlOGM1OWQ2NDNiOTZkZTkwMDJkNzgwZGI2NGYxZWI5ZDgyM2M2YjlhNDIzODE3MWRiMjZiZjVkMDUxNTNkMWUzYzgzOWI5MzQ5NTA4NDM2M2I4NDVmZWQ3NTY3MWFjZTBjMDA5ODAwNDU0NTk2Njc0MjE3YjE5ODMyNzUxMjUyZjA1MWYzOTk1Nzc2YTg5MjA5YzE2MzZiNGY0YjI4YTM2NGJjY2RlZGI3OGFkMzY4NzY3NDVjMWE0Mzg0MDYiOiIiOjY0OiIxZjRmNDk1YWRmZWQ2YzFlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMzhmZjljOGM1NTZmZmU3NjM3Zjc2MDJjYWU0MjhkN2UyMGRmZjg4MmQ0NGRkYzMiOiIiOiIzOGQ3MDA1ZmFkZWU1NWI1YTA0MzRkOTI0ZDk3MTQ5MSI6IjNmYWNjZWIwNDdlNDg2OTk4Yzk0NTgzOWVlNWVkZGQ2NzA1NGJiYjI4MzA4MzY1YjI5MDlkYWJhZWQyOWZkNWI3YjM0NjQ0MDQzZmE0NDMxNjVlMDdiMjAyMTQ3MTBjZDY1MmZlY2Q4MTZkOTI3M2M3MDBkNjgyOGQyMTZkYjhmM2NlYWE5ZWVkMGUyNTE1ODVmNGVlNWJhNGJlYjNjMDU4MmI4MTI4YTNlY2MwMWY0YjI5Y2FiMDk5YmEyYTg5MzFlNTYxMjA4MDJmZGY2MDA0YTZjMDJlNmRkMDAyNTdhODNhZGM5NWIzYWNiMjcwZTgwMDBmZDIxMjZiOGViODMiOiIiOjY0OiJmYThhZWQxOTg3ODY4Mzg4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMTg3YTM0Y2NiNzVmYzA2ZGFmZWNhMDIzNTE4NmM2NGJhOTI5YWRhYzZjZjZlNDkiOiIiOiI5ZGQ1MTVkMzQ4MWYyMWVmYmU0MzE5OGY2MjNiMzRmNyI6IjhhMWIwMGVhNWQxZjRlNDUxY2VhNzFiM2QyZmM5YmIwM2I5NzkwYThhZThhZTI2MmIzZTk3ZWJmMzQ5MTFmOWQ4NjVjODgxMGI5ZmU3NzlmZmY3MDFjNzJmMzYzOTY1NGU2MDg5OGQxZjU3ZWI5MzM4MTc0OWYwZTJjZWNiNGVlMzQyZjVmMzQ0NzMyMTVkNWM0NjgxODMzOGZmNjg4NjM3MjE3ZmRmYThiN2VlNTUyZGIwMTk3M2ZkYjYwODRjM2MyMGI1MzA4NjNlZWIxY2U3OTgwNDY4OTA5OTRmNTYyNWRmMmE1NjA0MmQ2Mjc0MjA5N2NjMTBkNTEyYTU0M2EiOiIiOjMyOiI4M2Y0NTUyOSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGMxMDUyNjEwZDA1ZmI3NzU0M2I2YjUxN2ViNjRiNDg3ZWQ5MDJmOTk2OWE0MjBmIjoiIjoiOTBmNGM5MzMwMTM3MTE1ODI3MWE4ZjQ2ZGYxYzg2YzkiOiI4M2QwMDlhMTIzOGY4YWE0MGUzNmNiZGRmMDhhNWYzZDk2NDAzYTAzZjdkMDc5MzU5Y2Q2ZDNkMGM3MTliZjc5YzkwODY1NDg4MjkxOWRiYzZjMjdkYjM0MDA3YjY3MzJjYjM0NGEwZjRiYWJkMjZiMTIwOWNlNmIxMzRhOGQyMzE4ZjlhMzhhZjAzNGIyNjU1NjIwOTdiNjM3OTRkN2VmZWUzMDZlOTdjNmFjMGE5OTFiMzc2NGVjZDkzNmM4NzAwMGZhNThlNjY4OWUzMDJmMTJjMjg1MWIxZmZjOTUwZGFkN2E1NTNjOGM2N2UwMWEyMjcwZTFlNWU5Y2FmMzBhIjoiIjozMjoiMzBiM2ZkODUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNkYzYyZTU0OTU3YmRkMTk2OGJlNzFiN2QyMDVmZWRhYTI5MTM0OWQ2OWYyODU0ZiI6IiI6ImI4YmNlMGY5MjYzNjg4Y2E0MWM0Y2VmYjI2ZTc5NDUzIjoiMjJiNmQ5MmQ4OTA4YmJkYmNkMGZmMzUyOTllZGRhZjBjZmIwMzliZWZhMmQyZDgzYzg5NmYzNzNiOTIwOTFkMTQ1ZjE3NzFjNThkNjBmOTRkMzU0OGQwY2JiZWFiZWI3OTZkNzYzMmI1ZGEzYzY2ZWY3NWNiNDFhMzVlN2QxYjAzMmNjZmJkZGJiOTQyM2UwZWUwNTRiZDU2YjYyODhiZGYxYjYxNjQ5MmM4NTM5M2U0MTM0ZmY5YzA2NmIyM2YzZjYyNmVhYzYzYTVmZTE5MWNlNjE4MTAzNzljNjk4ZGU2MjkyMmQzYmRiZTMwNjk3YTNlM2U3ODE5MDc1NmMzZCI6IiI6MzI6IjY3ODg3YWViIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjE3MGE2YTc2MTA5MDM1NTU5Mjk2OGQ2N2ZiMzUxNGI4YmZkYjQxY2JmMTIxMzQxIjoiYTA1MGY4NThjODdkNTZkZmNiYTNhYzFjY2Y1YmE2MDYyOGIzYWIxYjg5ODQ1NjgyYTk1YjdmMjkxYzgwZjZlYjFjYmNlZDRmYTIxZTM1ODRlMjE1Mjg3NDYyMzFlNzMxMWVjMzE5YTBmY2VjYzMyOWUxYTdhYWVkMGE4NTQ4ZTYxM2U1MWRiNzhjODZjOGQwY2VmYTE1ZTMwYjc0NWI5NTI4MDlmODdkOGE0YTdiYmVmYzc2YThlYjgyNDgyN2Q0MzM0MjAxYmRhNzc0M2RjNDk3ZWY1ZmZmYTI4MTJlNjdmMmEwNGU1YzEwYmY0NjQxNzljNjE3OGRiOTMyZWNkMyI6ImUwMmVmNzNhZWU0MTQwNDFiMTM3ZGQzY2FlOGYyNzY1IjoiIjoiYzA4YzliY2NmMjk4YzhhMzUyY2Q3MmU5MTc0ZjU3ZGM5YmY2NGQ2NTE5MWE5ZTk3YjQzY2U3MGFmYWNmZTc2ZmViNWIyNjk1ZDcyZWE0NjM1ZmE5NDE0NGRlMDJhNTQzMzNhNzdjN2Q0YWRjZGUxN2MxNjZiMzAzZjFkNjY0ZTZlZGIwODFhODU0MzNhNzQ5NmY5MWNlNjQwZjExMzkzNWNkZDRlN2FkMTRjOTUyNDc1MDZkZGM2NjIwOTEzYjVjNjc0MjJmNTk5Y2EwMGI5NWQ2MmE5MzcxZTQ0YzVhZjUyOTViZjk2NzQzZDBmMTIyOGM5NmU5NWFmM2I0ZDM2NiI6MTI4OiJkNjRkOWFjOTE1NDhkYzFiYWQ2MTg1MDk2MzNlMGMyNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJjZTVhNDA2MThiOGJiMmQ5ZmMxZDg3YTMzMzNhOWNkNDk0NWNmYTgzOGM4ZTBjNiI6IjRhZDRkMTAzZGEzZmIyZWY4YWRjZDFlMGU4MjNmNGE4NTdmMWQ2ZmE2MjczYmI2NjU3NDAzM2MxOGJhMmY3NjA5NTFlZTBmZGJlMDZjNWNkM2EwYTMwYmQxMTE0MjQ1MGYyZDdlNzFhZjJmYTdiOTU1NmI2NjNmYzMwNzY2NTA4YWEyNGUxZmIyMjE5ZjMwZWMyM2E2Y2Q0OGI1ODk0NDU0MWQxZjNlM2ZiZjU5NmUyZWYyNjNiZGRmNzg5ZTdhNjY2YTY4NjM4MDgxZjBlYzFhNmNiM2NiN2ZlYjBmZGRiZTMyM2IzMDc2NzUzMjRlYmNlYjI1Y2JhNmQ5MDAyZDQiOiIwYzRiNmM5NDBkMDkxZWZlZTk4YmYyN2ZhZDc5YjA0ZSI6IiI6ImFkNjExZGQ2ZWJhZWI1YTYzNGQ0YmZiYTlmOTY1OTQ4ZWE3OWQxNjI5NGI5NzZiN2M4YmI1NzI0MGM1ZDEzZTEwYTlmZTdhNWI1ZDM5MTQzMDAwYjRmMjRmYzMzMWNjNDk4ODY4NWM4ZDY0MDE1OTNhNDIwYzEyZTZjYmQ3Y2RlZDA2NTA0ZDZhMTAzNGY3MDE1M2Y3YjUwMTkwODRhNjZjZTgxODc2MTg0MWNhYjUyZDViY2IyYTU3OWE0YWNkOWRmNTBjYWY1ODJiYzZkYTJiOTRkNGIzYjc4OTIyODUwOTkzY2NlYzU2MDc5NTQxNzAxNmU1NWNmYWI2NTE0NzMiOjEyODoiMzE3NTk2ZWVmZGMwMTEwODFmMWRkYTZkYWU3NDhhNTMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNzFkNzg5YTYzMjEzYmJlMTdhYTE0ZjI5NTZlOWRhMjQ5NmExZWZkMWE2M2Y2YTUiOiJmNWJmMjBkYzZhMTFjZTUxNDJmZjM0ZDZjNDc3MWRiZWU0ZTc0NzkwYzRjY2QzY2I1YWY0MDhhNWM3YmQ3MDZiYWM1NTBkN2VkNTY4MDVmNTUwZWZjNzY0OGFiNTAxZmJiYzYzYTEwNzA0MDI2MjZjNTc4OGYwNzZhZTQwZTZiZWYyYjlhYWI5YTRiZDg1NTBmZTM4ZjdjZGIwZmNjYTI2NTdjYTI2ZjFmNzI5MDc0MzI2ZjQ1YWU5MzIxODI5MDVkODQ5YjE1MzRkM2VmZmUyMGRiZmMzZmMyNmRjNjQ1M2Q2NTQ0ZDQ4MWU1ODg5MTQwNWRiZjg3NmQwZjI1NGU4IjoiMTczMjc5OTZmMThjNzA5NmZjNWI4ZTM3NWVkODZmNDciOiIiOiJmZWQ5NjFhNDk3NTAyYjJlNDkwNDNmZjI5Yjk0MjZhMWU4NjRhN2ZlMGE4ODI4MWExNTcyZmJlNjIyMDNmMDcxNzEwZWExZDc3ODczOTA2MzY5YjE5NTkxOWE3YmQ1YjQ0Y2JhYmFiNmVlZTIzYzM2OTJjYjhiOWU0ZGI3ZWU1OTViOGQ0YjA2M2QyMDliMTFkNjQxNTBjNDU1NDViN2VkYTk4NDE0NGUxZDMzNmEzYmQzZjE4NzgzNGJiYzY5NTBiM2U3Y2Q4NDg5NWEzYTVlMjdmODM5NGE5YWE5YjY1N2ZiYTc3MTgxYzkwNDBiNzQxYzEyZmM0MGU4NDliYTRiIjoxMjg6IjlkYmE4ZmFmOWQxMjkwNTk3MGJhMGUyOWJjN2U5ZGM0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODMxODJiYTc1M2FjMTY1NTRlODczMjgxNTk5MTEzYjc2MjBiZGIwNDI3MDRiY2U4IjoiNjkxNWQ0NjE4OWZjYjBmOWFiOWI4MzhkYTIxMjRjZTA2Mzk4ZDYzOGZlYzljMWM1M2YwN2E0M2ZhMGVhMDlmZWIyYmY4NjhmZDFkZDUyMWYzMDFmOWYzOGUyZTc2NzE2MDM4ZjM0Y2MwZDE4YWI5YmYyN2FjMjgyZGMzNDkwMDI0MjdjYTc3NGUyMTEwMjdiYWFjYjlmNmJmYWQ2ZmQ3ODg1YTY2NWU1MDhmNjU0YmIwMThmMDMyMzIxNTE1M2NkM2E1YjNlN2I4MzQ4MmMwOGNmMDdlZTVlZjkxZDY0YTY3MWIzZWYyMjgwMWZmMjFjZmFlOTVkNjg0M2NjZGMxNiI6IjgwNWM2YjczNmQ2MmY2OWE0YzJjZDRhYTM3NDVhNjE1IjoiIjoiNzZkY2VmY2E2MzA1ZGVkNjk3YmU0NDg4NTEzY2MzZmQzZDlmMDhmMDZhN2MxYTkxMzNiOWIzZmIwZjQ0YmFkZjVjNzU0NDg4MWI1YmFiY2I4NzNjYWI5MTJjYzhhMDAzMzdmYzM2MTAwZTZhNWFkOTk4ZWFjNWQ4NTY4Nzk1YjQxMTY2Mzc3YzUxMTQ3NTcwNDRiOWI3MzIwNmQxOWZjMzRiNjM3OGEwNmQ1NWI1ZDVlOTQ5OGM3NjkzZTgxOGRkOTYyYWY5YjlkYTIzNDVmNGViZjE1MmYzM2ZlODVmMzM5OGE2NWFkN2RlYzgyM2ExYjExNTVjMzhjZjY3ZGY4NCI6MTIwOiI3NDZjOTk3MmFhODQ4MTI1M2QwZDU0ZGI3NzM5OGEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMTc2ZTdhNjhkYTRjNzRhZWI5MTc2MDQ0OGMwMjU3YjFlMTcxMDEyOTllMTQwNWMiOiI2OTFjNDM2ODExZjgyZTc0NzQ2ODU3MWY4MGZhODUwMmVmNWYyNTkzNmZjYTU4YThmYjZiNjE5YTdhOTVmNDkzOGRhNTU4YTNiMjZhMmYwOWM4ZmMxZjViZDM0N2M3NzI0ZDlmYTM3N2QwYTUyMDk0YmZhYWM4OGYzZmE5YjNkYWNjMmY1NmQ4ODBlODI1ODA5NTMzZGE1OTgwYTYzZTAxZDYxOTlmYmVhMDdmM2QwNzBlMjljNWQ1MGUxMDEzMjI0ZjBlYTg2ZTdjMDA4ZTNhMmU2M2RmMzk0ZWY2YWQ5M2VhOTdkNzNmZDQ0MjlmZWVlNDk1YjE0NGVmM2EwZDZjIjoiNDJlMmU3MGIwMDk2ZWJkNDg5YmZjZjRkNmFjMGYyYTQiOiIiOiI4MWY5YzM0YzViMDY2OGZkNThlYzg4MjJjNmJhNzViZDdlYjBkMTc0MTI2MGZhZDZhZDVlNjM3OTAzYWEyOWQ1ZjVmYWNhY2NiNGI4ODVmNjJlMTBiNzM3MWY5YjZiNDNlM2FlYjY5YmM1MDkzYmNjY2Q0OWYzZWU3NDRlNDlmODdjZDJhMmMzNmM4MDhjNDdlNDY4NzE5NGNiZmQ0ZmFlYzRkYTY2Yjk5ZTNkNGNlZDljYjhhYzZmZmI5NGQ3ZmVmM2FlMmI5MmI5ZjYxM2YyYmRhM2NhNmM4ZWZhOWM2ZGY4YmVjOTk4ZTQ1NWY2ZWI0ODUxOWU4ZjhjZTRlNTI2IjoxMjA6IjI2ZDA5MjFkYmI3OTg3ZWY0ZWI0MjhjMDRhNTgzZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhiYWI1YmYxY2Q4ZjI1OTEyOWNlMzU4Y2M1NmFjZTJiYmJiYWVmYTc5NzI3ZjY2ZSI6IjU3Mzg1OTU1Yjk5MDlhMDg1NmJmNTRhZDI1ZDAwNzc5Y2Q3ZDNkZWE3OGUxYWU4OTY1YzRiN2E1Njg5MzRkMTViYTFhN2IyYWI4OTlmNjlmYjFiODY0YmQ0ZDUyOTMxOWI1MWJmODVhOWI2M2RlOWNkNTE5OTdlZTRiMmYwMTUzMDdjYzQyYmU5MjU3ZTFiMGE4NGUxYzllNTVhMzcwNDc2YmZmMGE1MzI1YjIxODUwZjViNjg2YTNiZDRmMTU5OWYzNmQwNzcyYzQwNjA0N2I4ZWYyOTI0NWM0MmFkZTg2MmNiOWQyNWIxZTEwOGRiNGYzM2E0MmRjY2Y0NWM5ODUiOiJjYTViZWVhN2RhYzJkOWQyNGQ1NDg0NjM5NzdkNTk1NiI6IiI6IjY3ZGVmZjFhY2NjNGYyNzllYzJlYjRjMmE1MTVjMTc4ODYzNzFiYzQ4NDdiZGFmZjRhYTcwZTE3MDc3NWI2NDg1NWE2ZmIwZDM0N2JhZjM5YmI1M2Q3MjM5YjdhNjNjZTQ1MWVmZmM2OWU4ZDhjM2U1NDRiNzdjNzUxNzBhNjhjYmM0NWRjOTZhZDIzOGFhYmViNWViZWMxNTlmMzgwODliMDhkZmJiZTk0ZTFkMzkzNGE5NWJkNzBmMGI3OTlmZDg0YThmNTYzZDYyOWE1YmZiYjRlYjNkNDg4NmIwNGU3ZGJhNTEzN2Q5MjU1MjY4ZGFjMzZjYmI1YjVjOGQzNWEiOjEyMDoiZjIxMmVhYWQwZTI2MTZhMDJjMWVjNDc1YzAzOWUwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmQwZTBkMGM3OTA3YmRiNGI0ZTYwNTEwZjczZDhhYjJhMzA3MDAzNDkyMDZjZTIyIjoiZTY4MzVhNjUwMDQ3MDMzYTQ5NDBmNzIwMjk4NTdmYWU2ZmZmMjc3M2YyYWEwZTRmN2NiMGE0YWJlODZiNmU4Y2IwYzNlNDY4NjM3MDU3ZjdlYjIwZDFkMzA3MjNlM2MzMTA3ZDBmNTc5ZTMxYTRjM2U2ZmE4MTMzZTFiMWI1MWZkMjFhOGFhODBlYzY1N2M0ZjY3NGMwMzJiYzRhMmQzZTEzODljYjg3Nzg4MzMxN2M0NDUxYWI5MDY5MjMzN2JkOGFhNmU5MzEyMzg4YTBhY2RkYjUwOGZhNDc3Y2MzMGViMzNhODg2ZThmYmNlZDk3NDkyYzlkMzczM2NmM2ZjMiI6IjFmMTgzZWVhNjc2YzdlZDJlYWQ5YTMxOTI4ZjRkZjVjIjoiIjoiOWYxYTMwMTdkMTYwMjRkYmZlYTRiYTlkZjUxNTRhNmEyYzc5NGYwMGRhMDcwMDQzYzE3ZjAyMDRmMDZmNjM3YzhmZmZjNzYwNDI0MTg3ZGNlNGZlZjA0NGZhY2NhZGVmYTFiMWJkODE4NTIyOTE1ZTM4OWQzMDdjYWE0ODFhZjBmMWY3NjdjMzgyMTZmYTA0OGY2MjFkNDY4ODBhZmNhNWM4ZmM1ODI4NTNkZWM5NWQxOWQxOWNjOTQzZTlhMTg2MTU5N2M5OTA0MWM1OWU4YmY4ZTcyNDVmOWUzMGIxZjY2MDc4NDNhOTc4ZDBhZTdhNGUwZjcxNmRhYmM5ZDlmNiI6MTEyOiI0Y2VlYTIwYmY5NjE2ZWI3M2NhYzE1ZmU3ZTJmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDU5YzQ3NmRjZWY2MGE0NWJlMjUzZDVjZmJiMjQ3NDJkZTllMzg3OWJkZmU2OTQ5IjoiMTQ0Njk2ZDg1MTI2YzY4MmY4NDQ2ZmNjMjcyNGZhYmU0Yjg4NDBkNDZmM2RlNmFlMmNlYWNiMmYwNmExYTgwZmVkNDMwZTNhMDI0MmY0ZjdjMzA4NjExYzgwMmM4YjhlOWM5OTJiNzhhNWNmNDAxZmU3YTQ2NzFiZjA4MWY5NzUyMDkxOWYwMmI2NmU4YmZmZDRmZTNmNGE2OWNmM2QxNjY2N2U3NzI0ODkwY2M0YjY2YzZhZTQ4N2QyZDk4N2JmYWNlYzQyNGZkYzk4NjVhZjQ0NzRiMDRjY2UwM2ZmZmM4MjhiMmRmNjZkOTkwODdlNjNmMzVlY2E1MmFiZTg2NCI6IjliY2E4MDhmMDIyOTU0NzdmMmFhN2Y2YWMxYTdiZmU1IjoiIjoiOWQyMzk4OWVkZDhkZDk5MTFhM2Y1YTgwZGUwNTFlYzc4MTJjNmNlMDE4ZTY4Mzc1MTM4MGZmOTkwYTA3OWYzNTAyZWMwZmFiZmNkYWNmNmMxZmIyNTAzMDk0MTI0YzM5ZWM1MzFiNWQyOWVlOGU0ZTQ2YzMyNGZjMTBkYmUwZjMxZTlhYTU2NTIyYmNjNzA4NWNjZjc2ODQyNTIyN2NiYWI2ZGI0MTI3NjcxYTRjYWI3YmM2NWRjMWQzZDlkODE0Njk0OTMzMjllMjlhOWExY2I3ZTVlMDg4ZTg0ZWIyNDM0OTNjZGYxYTQ5YjE2ZmM4ZDRlYTJmMTQyYWE5YWQyMyI6MTEyOiJkOGIyMGQ3MmQ5NWE0NGRmYjg5OWJjNmFlYTI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmYxNTk0ZTg0MDM3NTQwNWE2ODJkYmMxODM2MzQ0YmU4YzZiM2YzMTk5ZWU3ZmQ2IjoiOWJjNmI3MTVjNjUzNDdhMzgzZjc3MDAwYjNlZmIzM2IxNjAxOWQwMTYwNTE1OWUwOWMxMTZkZWQ1MmQyMDcyMWJjZGRlMzc5NmI2ZjRkYzMzY2IyOWNlMWM0ODQzOGU5NWQ0ZGI2MTAyNDY1NDQwY2VjYWE1MGNhMzNlYmNlNDcwZDg5ODY2NjM2NTJlMDY5MDc5ZjlkOTJmZjE2N2IzZjdhZTU2ODIxOGZjNjJmZjVhN2JlNTBiM2I5ODdkYWI0ZmM3OTc5ZTU5NjdiYjA1NzRkZTRiYzUxZTc3NGJhMDVmOTc4MGE0OWFjN2IzZWE0NmZkZjM1ODA0ZTc0MDgxMiI6IjdmMWY0YTgwMjEwYmNjMjQzODc3ZmNjZDNlN2NkNDJlIjoiIjoiNzczZDY5MDFlYTY0ZDY4NDBkZWQ5YTA1YTczNTFjMGM3NDczN2FkMjdlN2MzZGJkMzhkZWRjZGVkZTk0NzIyYWU2N2U4ODg1MWVlNDcxYWVmYzFmODBiMjlhNzMxMmZhMmE2ZjE3OGVmMmM5ZGRlNzI5NzE3OTc3ZTg1NzgzZTJlNDlhMWZhMmU4NDdkODMwZmFjMTgxZTk1ZmUzMDA3N2IzMzhiOWFjNWQyY2ZhMjJmZjkzNDhhMDc3MTA1NDMyMmJjNzE3MzQzYjlhNjg2ZGFmZGEwMmQ2MzU0Y2Y5YjUzYzkzMmRhMTcxMmI5YmIzNTJiMjM4MGRlMzIwODUzMCI6MTEyOiJmYzNlMGNhN2RlOGZiNzllYjY4NTFiN2JjYTE2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODhhNmQ0NDFjMWI3NDcyYWVjZjkyYzI5NGY1NmYzYzFkYTE3MDJkMTc0ZWZmNDMxIjoiZWVjYzEyZmJkMDBjNjM2YTdmZjg5N2MyNDQ1OTMyMzlkMmRiY2E5ZDFmMzcwNjYwYzliZjk3NTljYzQxZGM2ZTk1MDc1NTE2ZjhkN2ZjMDZmYTkxZmY2ODcwMTc3NzcyNTE3MWMyZGMwNzY3YTE5NTNmYWMxMzAwOGQ3NzA2NWNjZThlZTMyOTI4M2QzZjY0YWRiOGEyOThhYTEwMGM0MmU3NWQ2MmU0N2ZiZjUxMzRhMjFiODI2ZmNjODllYmIxODcwN2MwZjRkNTRmNmU5MzIyMDQ4NDcwNmEyM2E3MzczNDFjNjAxYjU2ZjZhMjhjYzg2NTlkYTU2YjZiNTFiMSI6IjA1OGEzN2VhZWUwNTJkYWY3ZDFjZDBlNjE4ZjY5YTZjIjoiIjoiMGY1ZTg4OWRlZmYzNzA4MTBlZDI5MTFmMzQ5NDgxZGZiMzRlOGE5NjIzYWJkNjU3YTlhMmRjMTRkZjQzZGM4OTE3NDUxZGRlZWU1Zjk2N2FmODMyMjk2YjE0OGQ2YTVkMjY3YmU0NDQzZTU0Y2VmMmUyMWMwNmRhNzRmOWE2MTRjZjI5ZWFkM2NhNGYyNjcwNjg3MTZhOWZkMjA4YWVmYTZhOWY0YThhNDBkZWVlOGM5ZmE3ZGE3NmE3MGZjYjRlNmRiOGFiYzU2NmNjZGY5NzY4OGFhYWQxYTg4OWFjNTA1NzkyYjVlZGU5NWM1NzQyMmRmZWM3ODVjNWU0NzFiMCI6MTA0OiI1ZmE3NTE0ODg4NmUyNTVhNDgzMzg1MGQ3ZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFiYjRjNGY4ZDNjNDRmMDdkNWE1N2FjYmE2Y2NmNzg1MjAzMGRhYTg0ZDA5ZTEzYSI6IjI0ZDgyOTAzZTUwNzRiZWI5YTc2OWYyNGE5OWIxOGM3YjUzYzE2MGEzYzNhZTQwNjUzMzViZWMxYzQxNzBhYTRjNjU2YmQ3Yzg3YThhMTNjMGZmYzY2NTNjMDQ1NDQ1YmY4YTEzNWQyNWExM2IyZDQ0YTMyYzIxOWFkYzZlYTI2OTVmYjllOGM2NWYzYzQ1NGRjMGUyNzcyZjRhNGNlNTFmZjYyYWQzNDA2NGIzMWIwZjY2NGY2MzVkZTBjNDY1MzBjOTY2YjU0ZThhMDgxMDQyMzA5YWZiOGNmMWYzMzc2MjVmYTI3YzBjYzllNjI4YzRhZTQwMmNiZjU3YjgxM2EiOiJjOTQ4OWE1MTE1MmVlYzJmOGYxNjk5ZjczM2RjOThmNSI6IiI6IjNlNTUyOGFiMTZhZWQ1YmU4ZDAxNmZlMDdmMmZmN2FjNGQzOTM0MzljNGZlMGQ1NTQzN2E2ODk2N2Q2ODU4MTVlMzU5ZmRiOGY3N2Q2ODI0MTk0MGNlN2IxOTQ3YzVhOThmNTE1MjE2MjU0YWMyOTk3N2NjMmE1OTFmYzhlNTgwMjQxNDQyZDA4ZmFjYmRiZWU5YTlmZjdjZmJkZTcwMDQzNDY3NzJiNDYwN2RhZmI5MWM4ZjY2ZjcxMmFiZWU1NTdkM2RhNjc1YmIzMTMwZTk3OGExZTY5MmZhNzUyMzY2NzZiOTIwNTM0MWVhZDUyNzdjYzMwNmYwNWU0ZWFlYTAiOjEwNDoiZmVjY2E5NTFiYTQ1ZjVhNzgyOWJlODQyMWUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYmNlNWU2ZDBmZGNkM2FiMDhjY2Q4NjExNTE0OWI1NTY5NTg0ZGZhZGY0MDI1NmQiOiIzOTc0MzM5YTFiOTBiMTlmZDM4NTdkODEyYTBlNTlkY2Y0M2Y5YjBmMzYwODM5OTQwYjk5ODM0ZGRlZGVhZDc5Nzg1Mzk2YWI4ZmQwZmMwZTUyM2MwNmYwNTU1MzcxZmQ1YmM4NTdhOTVjM2VhZDI2NTM2ZTZkZWIxZmFhYmRjNzc2YWM3Y2ZlYzRiNjBkOWMyNGIwODU2ZWNmMzgxZWZkOThmOTQxZDViMmEzODEwODkyMmQ5Y2YxMTEzZDFlNDg0MzU0YjU1ZjljMGYwOWQ5NWE3N2ZkMzBlYzljYzA0ZDE5MTk5OTMxZTE4N2M1NmZkMjMxZjk2ZmNlNWUxZWI0IjoiYWUzYTI1YmU3Mzg3NmI2ZTlkYzg4NTczZDYxNzY1M2EiOiIiOiI0ZjU3YmUwZGUwMGNhMmM3YzUyYzU0YjkzMWMyMzVmZWNiNGVlMWU1YTMwZTI5YmY2OGY1NzI0OGJhZmFkODdlNDg0Y2M2ODQ2NWQ5ZjY0YmJmNTAyY2VmZDJjODRlNTU5NmMzYzhlNThhOWZiNTFhOGM4YjEzMjU3OWE5NGJjMzJlOTJmN2M3MjQ3ZGM1ZjY5ZmRhOTg3MjdjNDIzZGU1NDMwZjAxYjM3ZDc3ZTNhZTZiY2QwNmVhZjU2MjVlNWM3YzljMjI4YjlkY2E1YWFkOGY1NzEzNjlmZTA5NjQ3MzFiZjFmMTQzZjJmNzA5YzdlZDUxNjQxZWNmYzg4ZWJjIjoxMDQ6IjMzMzc1ZTIxZmQ4ZGY5ZjAxOTYxOThiNGIxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5Njc3OWVhYTg2OTk0NjllMmEzYmZhZThhMDNmZDRiZmY3YWJjNjJkNDI3ZmY5ODUiOiJhMzQzZmQzMmZjNTEzZTBlOTc3MmFjYmY5OWZlYWZlOWRlNGI1NGU0MDQ4MDc5OTliMDJlOTIxZTA5MTRiMmQ2NGQwZDQwMmVmMDZmMzFlMWRiODUyODk5ZmI2ZGIyMzFhZDQ0NjVhZjAxNWIwYzE2NDA3ZmEzNjY2ZWY1YzJhNmQ1MmQ1YjRmNjBiMGY3ZmJjYjEzNTc0YjJhYTUxODMzOTNmM2E5MWI0NTVhODViM2VkOTlkNjE5YmM5YzVjMmRiY2M0ZjBhNjFhN2IwM2U1YWI5OGE5OWNlZTA4NmJlNDA4Y2UzOTQyMDNmMDJkNmQyM2ExZTc1ZGY0NGE0YTIwIjoiY2Q3ZGNhMjk2OTg3MjU4MWQ1MWIyNGFmNDBmMjJjNmYiOiIiOiI3NDQyMmFiYmRlNmU0YWI2NzQwMjU3MzU4NzRkOTVkOWZlMzAxNTYyMGE4Zjc0OGRiZWQ2M2VmMGUyMjcxMDYzYjZjMGQ2NWUwMGQ0MWJjZjRlYTg2YWM4YjkyMmI0ZDQ3NWY5MDRjMDcyNGYwYWRlYmMyZWVmNGEzYWJkMGY5ZWZkNzU0MDhjYzA1NGNiZDQwMDQzNmUwNTQ1ZTA5ZTZiMGJjODNhOWM3ZDFjMTcxNzU4OWQxODBjN2IxZDRmZTRjYTE4YmRlNGQ5YjZiYzk4NDgxYjc5NzFjN2ViODFjMzkxYWM0ZGQ3OWNkZWZlYWJiNWJiYzIxMGQ5MTRkMzBjIjo5NjoiYjBlNDI1NDM1ZmQyYzhhOTExODA4YmE1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzOWJmYjRjZjUzM2Q3MWMwMjkzMmUxY2Q3YjgwMGRjYTljZTliY2E4NDM4ODY5NjIiOiJkZTc2ZjYzZWNmOWM4ZDQ2NDM1OTlmNGRjM2Y5ZWQ4Mzc5MjQ5MTVjZTQyMTY3NTkwMTNjZGI0NmRhYTBhNTA4ZTA2YmNkYjc3NDM3YjBhNThjNDBhMGJkMzBhMDVjYTQxNDMzMjE4YzY4NjlmMWVjZDI2MzE4YWZmMjc5OTlhMmViYmI2NTFkZThlMDMwNjFiOGZmZTNlMTQwNjA3MjBlYjM1YThlNGRmZDhjODcwYWE0NTYyMjkxZTM3NThjYzFlYTZjNGIwZmFmY2YyMTBlMTBiMzFmODUyMWJiMGY2YjI5ZTg0NTBiMGNkNmY4YzgxOTZjYTJmN2FjYjgwN2EzIjoiZDJiOTM3YmI1ZDJlYTdkNTRkMmI5NjgyNjQzM2YyOTciOiIiOiIwYjBiNGM5MmYwNmIxNzEwM2VkNTgxZmIzMmQ0NmU4NzRmZWEyYTIxNzFkMzJhYWMzMzFkYWE0ZDZjODYzZjg0NGZiYmFkNzJlNDU1Y2Q1YTNlZjk0MWQ4Y2Y2NjdmZWQ1ODU1ZGE2ZGYwY2NkMGM2MWQ5OWIyZTQwYTBkNjk3MzY4MTM4YmU1MTBhMmJmMmUwOGE3NjQ4ODUwZDI0MTBlNGExNzlhNmQwMTkzZTQ5YTEzNTUyNDA5MmFiMWY4NDJlZDQwNTc2MTFkYWFlYjkzZTdhYTQ2ZTU2MThiMzU0YTEwOTFhOWU3N2ZiOTJhOGMzYzBlOGUwMTdmNzJkZWIzIjo5NjoiYTE4ODEwN2U1MDZjOTE0ODRlNjMyMjI5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MWI3ZDgwYWU0ODdhYzM1YWE0OThlNTkzOWEwZjI3YmFlZWRmNDhhNDk0YzhlOTEiOiJjMjZkNGI5MThhMGM5NjcxNDFmYjU3MTJhMjg2OThkMTY2NDBkMjAwYjI5MzQxODdiODFlYzU4NDg2YjcwNmVhMWNhYWViNjU0ZTVmYmJjMGQwNzgyMTVhY2VlZDdkNjY5MzllMGZiNTRkNjEzMWQ4OTQ4Y2Y1OGVjOTU3MTY0NmNhNzVhMDUxYzJiNWM5OGZlMTZmNzczM2Q0MmU1ODk3YjAyNjMyNzIwMTUwNDJmMzEzNDE0M2VhM2IwOGJjNjUyOTJkOGQzMWYzMGYyZWQ5ODMwY2NiZmNhMmQzM2QyOTBjMjhmNGRhZDA3YzcxMzdhNGNhMDVmNDMyYTQ1N2MyIjoiNjI2ZTFkOTM2YjM4Y2Y5YzRjM2E0NGVlNjY5OTM2ZWQiOiIiOiI4OTk4ZTc5OTk4NTg5MGQwZjdlOGIwZmMxMmE4YTljNjMxNzFlNDU2ZWY1Y2IyMTFmODM2YTJkYzdjOWUzZjRkMWNkNjI4MGY5YjBjNDY5YjcwM2M1NTg3NmI1N2NkMWQ4Y2VmNzBkYzc0NWUzYWY4NDM4ZDg3OGNiMmZlOWZiMWM1YjJkOWEyZDkwZWRmM2JjNTcwMmVmMzYzMGQzMTY1NzRjMDdiNTYyOWYwZGIxNTEwNDYwYWY4ZTUzN2RjZjI4ZDljNWI1Y2VjNjk5NmVhYTNkY2RlMzM1NGUzOWY2MGQ1ZDg5NmQ4YmI5MjcxOGE3NThhZGI1Y2I5Y2MxN2Q1Ijo5NjoiNjk5MDFjYmFmZTYzN2RlNTk2M2U3MzMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZWNjZThmYjUwYTI4YTA4NWFmNzQ0YjQ0YmMwZWE1OWQ2YmMyYzhmZjFmMmZmOGUiOiI1NDMwMGJmZDU1YjIyN2I0NzU4Y2Y2NGQ4YTNmNTZjYjQ5YjQzNmFkYjRiOTI3YWZhOGM0YjcwZDI1ODRhNmNiYTQyNWFmNGZiYzM4NDBkZDZmMmUzMTNmNzkzY2JjN2FjYTgyMTlmMTcxYzgwOWNmMWViOWI0YWU4YTlkMGNmMWE3YWEyMDNkMzhkNjdjZjc3MTljZTIyNDhkNzUxZTg2MDU1NDgxMThlNWJiOWNlMzY0MzQ5OTQ0YTIyMDVlMWI3NzEzNzI3MGI4MzU1NWQ1ZDgwNGVkYmEyZjc0NDAwZjI2ZDJkMGQyOGViMjlkN2JlYjkxZTgwYWQ2NmI2MGJlIjoiYjdlNDNkODU5Njk3ZWZlNjY4MWU4ZDBjNjYwOTZkNTAiOiIiOiI0NWRhYzA3OGMwNWU2YTJjNDgwNTQzZDQwNmMyM2YzZGRhNjNmMmI2MTYwMDdkMDhmYmZiMDc1YTkwZWVmYWI4ZGZiYzI2ZDMzNDI2NmY1ZDcyZmJjNTI4MDBjZjQ1N2YyYmJjODA2MmE4OTVmNzVlODZkZjdiOGQ4NzExMjM4NmM5YmFkODU1NzM0MzFjY2ZjZWY2YTVlOTZkNzE3ZmMzN2IwODY3M2JmNGE1ZWVjZWRmMWE4MjE1YTg1MzhlMWRkYjExZDMxYTI0Y2IxNDk3YzdiNWJhMzgwNTc2YWNiOWQ2NDFkNzE0MTJhNjc1ZjI5ZDdhYmQ3NTBkODRkZmQxIjo2NDoiMmRmZTE2MmM1NzdkYzQxMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjc3M2U2MjdmNmM0OWExNjg3YTNhNzVkMmVlNjc1NGViZmMyNjI4YmRmY2ViYTI4IjoiZWIwYTY0YWQ1MTA5NjhjNjhhODE2NTUwZDlmZTJlY2NhYjNiZDg0MDlhYjVhNjg1YTg2MzhmODFiNGI1MGE5YTk2MzE4YmZmNGU4NmY3ZjZlOTA3Njk2MGJlOGVlZjYwZTcyY2VlNGVhODFmM2JhMjY5ZDhhYjRjOTU4MWE1NDYzODQyMTUyMGE2NDExYTgzZTlkYzgzYjY5ODFhOWRjZGQ5ZTRhMzY3ZDU3ZjE1NmQxMzFjZjM4NWMwMWE3MzZiMzI3MjE4ZTZiNjQ2OGQzMTdmZjc4YTAxZjE1ODhjMzU5YTNhOWIxODhiYmU1ZDNmZmFkNmI1NzQ4M2E5NzZkMCI6ImFkODViZWNiMDNhMDVjYWE0NTMzYjg4OTQwY2ExNDFhIjoiIjoiOTU5NjU4ZmRmZjVmZDgwMmZjYTVjNWE3OWQ1OTUzNmJhOGVmMTM1OWFjN2JmZmY4MTI2NGM3ODI3YmQzMWI4ZjAyZWNiNTRmMzA5YjQ0MmE1NGE1YTU3YzU4OGFjZTRiNDk0NjNmMDMwYjMyNTg4MGU3ZTMzNGI0M2FiNmEyZmNlNDY5OTA3MDU1ZTU0OGNhZmZhMmZlNDY3OWVkYmUyOTEzNzdjMTZjNzA5NmE0OGFlZjU2NTlhZDM3NzAyYWVkNzc0MTg4Y2I0NDI2YzNiNzI3ODc4NzU1ZDY4M2VkOGMxNjNhOThhMDVmMDY5YTBhM2MyMjA4NTYwMDc1OTE3MCI6NjQ6IjRjMGY0NjIxYjA0YjU2NjciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjMDg2Zjc0MDRjMTQxNjBmMzNkNmVmZGUyMzFlZGE2MTBmOTJmYTU1YWMxNDdiNCI6ImZjOGU1Y2Q4MTc1NWU0ODlkZTdlM2RkZDJiNTg3MTQ5ZWUwMTNiZmZhMmNlMTk4YzUxNDY0MWIwZTE2NTkyNjFlZGQ2MGJkYmZkODczZTMwZTM5OTg2OTc0OGJmZTU2YmE1NDNjZWI5YmY1ZmQwZTdiYTJiNGRjMTc1YzUyZjI4YThhMDJiNDgxNmYyMDU2NjQ4ZTkwZmFmNjU0MzY4YzY0ZjU0ZmQ1MGI0MWVhN2NhMTk5ZDc2NjcyODk4MGUyZWJkMTEyNDZjMjhjZmM5YTBhMWUxMWNmMGRmNzc2NTgxOWFmMjNjNzBmOTIwYzNlZmI1ZTI2NjM5NDlhYWEzMDEiOiI3MWYxNTRmMWRjMTliYWUzNGI1OGYzZDE2MGJiNDMyYSI6IiI6IjZkNjBkYTJmZDA2MGQyYWVjMzVmYWY5ODlkOGRmMzNmMjQxM2JhMTQ4NDJiMDQwNmUzOGE2YTg0N2UxOTFlYWM5ZjQ1NzBjZWE2NDdjMzk4OGZhYWE1NTA1ZWEyMGY5OTEzMmRmMmE4Nzk5Y2YwNTQzZTIwNDk2MmRhMWZkNGY2MDUyM2Q3MTQ5ZTBkZWU3N2MxNjU5MGQ3ZTExNGFjNWQ4Zjg4ZmEzNzFkY2RkMjU0ZWNjYWE4MzE2ZWU5MjJiYTIzYTBhMDdiMjg5NzM5NDEzZGRmZmMyYzcwOWMzOTFhZmVlOTI4OTI1MmRkZjNkZGI2MmE0NTMyYTU1MTVlMzUiOjY0OiJmNDdiYWU2NDg4ZjAzOGZlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiYWUxYjNlZWY5MWJhNzkwMzIxMTdjNjBmYjg0N2Q0NmYxODE3NTU2NWQwZWQxMGMiOiI5YjcxZWVjY2RjOTFjYjVmN2E1NjdhOTE4OTc3NGY0YzMwZDk2NDc3Yjg4YWM1NTNkZjY2Yjc4YTU2ZTVjOWUwOTg2YTE3ZDgwYzgxMTExNmQzMTk4NWFjZmJmOWQ3YTliZWQyOTFhYTJmYjYzMjk0NTdhODM2YjNmOGYxMWMxNjQxNmYwYTNiODZkZDljNzE3YzhhMDUwYzZjZWI1YzI3ZDhlMmVlMGRiZTYzZjNlMWU0ZjBhZmY0ODA5ZTFmNmY2ZWQ2NGQzMWQ0OTRiNzM5OWNmYTBkZDk0NDYzMjFiZDQyNTZhNDlkMDc5M2ExMGE2NzBlM2YwODY0MDg0MjhlIjoiY2VjOGI2NmE2NTdlNGJkZjY5M2Y0OGFjNTJlNjA3NzAiOiIiOiIwMTVhMzE4YWNiNjE5ODE4OWNlOTA4YWIxYWYyODU3OGEzN2E0OGJlZWVkNzcyYzZlZDRkY2ViMGEzYmNiMDkyZGY4NWY2NTMyMzRjNTZhMjVjMDc1YzhlMDI4ZDRhOGQ5MGQ5NzRmYjA0Nzc4MzRhZTJkZThkNWRmNTNkMGQwM2E5Nzk0NTBiNmU3YTY2ZmRjOWIxMWY4NzllYTkwNzI2OTk4MzdmMmRlNzE5MjE1NmY4ZTVkOTQxMWZkODNkOTdkMzFmZTYzZWNlNGU0MzI2ZmY1MGEyNGZjNzUwMDRhNWJhMmJkNDg0NWIyOWUwNzk0Njk2OTQzZGZmMWU1ZDZlIjozMjoiOWNmNmY5MGEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdjMTU4MjI0MGFkMzAxZjgzMTkwMmM2NjMzNDU0NmRkNjgxYzEyMzA4YWRkMDg3MCI6ImQ0YjcxNmI0OTg1OGEyM2FhZDQ3ODU4MWNiYjZkZmQwMTVhZTU1MGQ3NjQ5NzIyOWI1YjE3NzZlODNmMmRlZDg1NDI2NzVjNjNjYTZhMDA3YTIwNGI0OTdlZDJlZjcxY2ExMjVkOTFmMzg2YmU5YjQyMTNjZDM1MmE3OTdhNWQ3OGExMzczZjAwOTE2YmI5OTNkZTE0ZTFhMGFmNjc1MjRhY2ZjYzlmZDcxZGFhMzJlNWRlZjlhM2YyZGFiNWIzYmJhNGQyZjlmMmNmYzVmNTI3NjhiNDExNTdmZTc5ZDk1MjI5ZDA2MTE5NDRlODMwOGVjNzY0MjVhOTY2YjIxZWMiOiJiNmY0ZjM5NTk5MTRkZjQxM2I4NDlkNTU5ZGQ0MzA1NSI6IiI6Ijc5OTY0Zjg3NzVjNzgwMDliY2ExYjIxOGMwMzA1NmI2NTllNTM4MmUyNWU0Mzc1OWM4YWRmYTc4YWVjNDhkNzBiMzJmZmQ1NmIyMzBmYzFjZThjMjE2MzZhODBhOGMxNTBlNWRiYjJiZDNmNTE2MDdkOTdlZDA5NzYxNzk2M2RjNmU3NjUzMTI2ZmU0MGNiMzZhN2Y3MTA1MWQ3N2U0ZjNiNzY4YTg1ZWU3MDdjNDVkMzNjYzY3NDczZjk0YzMxZGEzZThiNGMyMTg1OTAwMjMzMWI1ZjczNTBlM2U4Zjk4MDYyMDkyNTVjZWFjNzA4OTE3NmU5ZDZiNzBhYmQ0ODQiOjMyOiI3OWU1YTAwYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwwLDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmQ1NWEzNTY5NDM4MjRkMjA2MzBiMTUzOTYyN2FkMWE5ZGNkOGVlMmNiNGRiZjQ5IjoiYjhkOGQ2ZGQwNjMxZjkxODNjYTg1ODAzM2EzMWRkNTgzZDNlZTNiOTUxMGZjYzY5ZDhjZDQxMjAxNmJmODU0YjllZGNmNjVjMjgzMWU2M2Q3MmY0Y2I2MWE5OWY2ZjRlNmRhYjBjMmNlOWM1YThjZGJjMTc5YWU5M2FhY2EyYzhhNWI4NDhhMTUzMDliZTliMzRlNTIyNmFhOWE1OTA4ZjU0M2ZkZGE5ODNmZWMwMmU0MDczZWRjYzM5ODVkYTUyMjJiNTNmOGM4NGI5YzU0Yzc4ZGQ4YjI3MTJiNTkyMDk0NjM1OTVjNzU1MmUyOGYyYTQ1ZjUxY2I4ODJjMDM1NCI6ImFhODlhMTIyYzY4ZTk5N2QwMzI2OTg0ZmE1YmVmODA1IjoiIjoiMTA3YTllZDU2MWU2YzQ1YzM3NWQzMWRlYTMyMWM3YjRhNGI3NjQxMDI0ZDJjOWVlZjZhMTAzYTc1MGJhMTVlMWFjYWNiY2FlMTIxNTEwYjRmNTZmMTlkMjllNmZiM2U2ZmMwNjk1MGIxZGFhNTIxNTI4ZjQyMjg0MTMwYTQwZTVhNmMxYjU4YjNiMjgwMDM2NzM1MTFhYmNmNTlhNGI5ZGYxNTQ4YTAwZjc2OWQ4NjgxOTc4YjYzMmY3NWU1ZGEyY2YyMWI0OTlhMjRmYmRkNGY3ZWZlMDUzZDRhMWIyMGIyNDA4NTZkM2FlMjc5NDhlMzUwOThhYTYxN2RlZjViZCI6MzI6IjdmOWM4ODZhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGNkZGM4ZjUyNTY0MGZjMGEwODc1YzY1Yjc4OGVhNzVjNjczZjg0ZjRhYWNhZWQ0IjoiNTVlM2NjYjg1NWMxZmQ2ZDMzZTI4ZDMwODQ4NWZkODVhYmJkOGFkZTEyOTk5MzY5OTY4NTFkNDRkZGUwNjNkZGMzNzk2MmY5ZjY3ZTk1ZGYwMmVhZjNkODc3NTE2MjQwNzcxYzQ2OWJlMmFiZjJlZjZjOGRjYmI3OWViMTk3NmY4MjViMTA5Zjc1MjA3OTk1N2E3Yzk4MWZhYTJmY2VhNTk5Y2M1MmUyNjJiODRmNGMyMDMxODIxNjE5ZjBiZTZmYTNjMzhkNjYwZTllYjNlMGQ1ZGUyZGE2YjgzZGU5ODY2ZWIzZWZiYzZhMmRmZjI3ZTUyNTg3YzZmNzllMWMyNiI6IjFiODgzYTg5NDEzZjYyZGQ2ZDUwN2NkNzBjMDQ4ODU1IjoiZWVhZjIxYmMzMTc2NjBiMGUyYWZiOWNkNWJkNDUwZmYwYmZhNmNmYTdlNDllZGFkNjAwZjcxYjk3MTM0N2U5M2I5NzEyYTZlODk1NTQwYzY2NWExZDgzMzhmNjFiNTFkYTllMGE0YTkxMjI0MDk4MjQyODdiYTRiYzA2YmRiYmExMDI5MGE0MGIzMWI1ZWFlOWRmZWI2NDcxZjRhMGEwYzE1YzUyYTJjNjc3YzRkNDcyNjMwZDQwNzhlY2YzNmRjNjAwOGZhYTAyMzVhNjg4ZWJiZTI2NjJlNDZhNDliMWRkNThjYmVlODJmMjg1ZjNjZGViZGExZGM1NDY3MzE5NSI6IjE4ZDExNTEzNjYxMjk2MDM1ZjZmNDJkMjY0ZTBiNGNjN2VjNDdmNDNiNzU4YzZkYWM5NWU1ZTNiMzgzNDM2MmViNjQ0NDdkOTIzZTEwN2E2MGNkNjZhYzM1OWNmM2EyMDNmOTA3MGVhYjlmZTYxYWU2NGE4NjYwNmM5YjUwYTk3YTE5ZTEyZjczMWRlMjg3MTlmZTE3OGM5NzEzZWRiYjQ1MjViMjIxZjY1NmEzNDBjODY3NDA1YzQxYmVkM2JiY2I5YzZkYTVjYzZhNGQzN2FjZDdhNTVmMjUxYTUwZmExNWVhOGY5Yjg5NTU2MDZlYWE2NDVjNzU5ZWYyNDgxZTgiOjEyODoiZGVjM2VkYzE5ZmQzOWYyOWU2N2M5ZTc4MjExYzcxY2UiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYjhjMzE4MzBiMTEzOWE2MDQyNWY2YTM0Mzg3ZjVjYTJiZTZmNWE1MDc0YWRmMTMiOiI5NWY0ZWE5MDcyOWRlMGYwYjg5MGZkZjY5Nzk0ODA1M2Y2NTZiZGRmNTdlM2Q0NjFlN2VlMTc3MDE2MTkwNGJiMmNiYzhjMmY4MDE0ODFiYjU0MTQ1YWY3NjBlOTFjOGIzMGNiMjJmYWE4N2VmY2M2ZjAxZTNmNzk4YWYwYmQ0NjA0NzU3NTQ3MjY1MTRkNTNmNDE5YWYyZjJjMzczYzc2ZjA1YmY1N2QzZmMxYjc2M2Y3MmJhMGZkMjY4MmQ5ZDFkNzZmNmNlOGQ1NWI1NmZjN2JhODgzZmFkOTRmNTlkNTAyMjQ0ODA0YmI4N2JkMDZmMTIxN2E0YTZjNTA1NWI1IjoiYWI1YmYzMTdhZDFkNmJlYzljYWM4YmM1MjBhMzdiMWQiOiI1YTQ3ZDc0NzRiZTZjNDhmYTRiZGJiMDkwZjRiNmRhNDk0ZjE1M2E0YzljODU2MWNhZTRmZTg4MzAwMGI4MTc2OWI0NmNkNjVmNGNlMzRhYmMzZTVjNjg4MGEyMWQxMmMxODY5NzRiMGM5MzNhMTZiYTMzZDUxMWU3OWI1Zjk5NGMzOGUzODNiOTNlZWExMjU5ZDM4ZjlmYjk1NTQ4MDc5MjIwNjQ2MWRkMjlkNmQzYjhmZjIzOWVhNjc4OGM4ZTA5YzE1YmU5OWYwOTRkMmQ1OTgwYzZjMWE4ZWZlMGY5N2Y1OGY3NzI1YTk3MjExMWRhZWI4N2Q4NjJhOTBhN2QwIjoiMWQwMjExZDdkN2JjODkxZTRmYmExYmE3ZDQ3YWM1YTRmM2I3YmE0OWRmNjlmY2ZkZTY0YmY4Njg5YjBlYWIzNzlkMmY1NTY3ZmNmZjY5MTgzNjYwMWI5NmMwYTNiMGVjMTRjMDNiYzAwZTk2ODJlZjAwNDMwNzE1MDc5ODhjZjE0NTM2MDNkMmFhM2RjOWZhNDkwY2RiMGRkMjYzYjEyNzMzYWRiNGQ2OGEwOThlMWNjZDI3YzkyZmUxYmI4MmZhNGE5NGY4YTFjYzA0NWE5NzVhYzM2OGUzMjI0YmE4ZjU3ODAwNDU1Y2M0MDQ3OTAxYmJhNmJmNjdkNmU0MWY5NCI6MTI4OiIyMzY4MTIyOGM3MjIyOTVjNDgwMzk3ZmMwNGM4NDhhMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjljMjM4NmI5NDhmNTljZTY1MTg4ODQ1MTAyMTc3MjI4N2YxNGE5MmQ4MDdkODhhOCI6IjQ0ZjAwYzhhN2M4NGU4MjA3ZWMxNWE3YmUwYjc5Yzg4ZmEzNDdlMmMzZDVlOGQwNzIzNDUzNmQ4NjUxM2JjMzliZWJmZmYwMmVmYjlmZjI3MjgwZWIzN2Y3ZThhNjBhNDI2NTM4YmMxZTM4MzBiY2EwZTc2ZmFhMzNiMzA3MTlmYWI1MTU3OGQxNWRmNzc4OTNiY2U4NzQwZjUwYzQ5MWI4YjlmMTczOWE2OTVjNzg0MDZiNWVlNGQ1NmY4MGQ4ZDU2NGI1ODZiMGYyMmZmYTg2ZWNhNDZhOWQ4MTM0YTk1MDdjNWI5YWQ4Mjc1N2VjNTFiMTg3NDFhYmM2MWYyM2IiOiI3YTFmN2QwYmU0YzdmODg2OTQzMmNiOGIxMzUyNzY3MCI6ImY3NmVhOWQ2ZTk3NjYxNjY4OTcwOTcwMGE5NjM4MjA0ZTYxNmY0YzFjM2E1NGEyN2ZiMGRjODUyOTkwZDgxZGZkNjc4N2FhNWE4M2I5YmU1MDg3ZDNmN2RmY2Q1MjIwNDQ5MTFmYTQxODY1MTFkZTE5NTdiODAzMzgwMjVjNmM0YWE3MjA1OGFhMzE2MDA0N2NmNDIxNjZhYTAwODllMmVjMWFjOGVhNmQ5ZjVmMmMwNTdmOWY4MzhhNzIzMTlkYmQ3YmI0OTQ4ZGEzYmM4N2ZjMjAzNmEwZTdiNWU4Y2VlN2YwNDU0NjMxNTJmZjgwYTE3MTFlZjEwOTZlNzU0NjMiOiI2NjZjNGQ2ZDNmMWJlYzQ5YmE5MzZlZWE5MGQ4NjRlOGVjYmUwY2NjN2IyMzg3MmE0YWQ3NTk2YWZhZWM2MjhhODE2NWE3MDM5NzI4OWExMGM2N2Q2Mjk0MmUxYzE1OGYxNDg5YTlkZTQ0NDQzYWM0MTgxZTc0ZWJmMjU2Mjk5NWM5MTgyYjU3YmM5NjBmNGI1ZDNlMzNmYjdjZjdhMGMzMmE1OWM3MTZkZTIzNjM5ZGU5YmM0MzA3MTI1MjRkNzRhMDg3NjQ3ZTI3ZmYxYWY4N2EyYWEwY2YwYjU4OTc4YWQ4ZWQ2MTZiNTY2MjI1ZDNhZWYyZWY0NjBiZTczOTNkIjoxMjg6IjUzZDkyNmFmN2JiZjdmYmE5Nzk4Zjg5NWQxODJiMDllIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTg1MmI0YmJmYTYyM2U1ZTJmODNiODg4ZjVlYjZjYmUwNmI1NzI5OWUyOWE1MThjIjoiOGNjODVlNTIwYjQ1YTg1YzY5Y2Q4MDA3MjY0MmVmMTUwMGIxZTBhNDA5YzQzNWQ2ODU1NDRhNmI5NmQzMjI0Y2M0MGU1ZmU4YTIxYzQ5NTliMjg5MWQ0YTUzYmJmZjAzZGI5OTM5YzY1NWU2ZTkyMjIyYzZiNDRjOTUyMDQ4MjdiZDgwMGM3NDY2NmRiNjQ5MDc4OTRiYzRlMzA0M2ZhYjMxOGFhNTVhMDExYWI5Mzk3NTkyY2VkNzNmMDdhMDYyODJjMjJkOWE1N2RkN2EzN2VhZGIwMmY1OWI4NzliMDMwZDBhNTAwNTIyNmM0NjEyODFjZTMwNjFiZjI2ZGU1NiI6ImI5NmY0YmRhMjU4NTdjMjhmZGZhNDJiZmU1OThmMTFhIjoiMGJmZGMxYjE2ZWVhZTg1ZDU1MGE5N2EyMDIxMTIxNmE2NmI0OTZjOGMxOTAzMGEyNjNmODk2OTU4ZTRkMWRlY2MzMTBiOTU1NTIzZTMxNDY0N2VkY2JlM2Y2OTk3MGNkYThlMDdmOGI4MWY5MDc0NDM0ZmQ4NmI4ZWM1YjNmYThiMTU1Mzc3YWQyODA1MGI1MDUyM2QzZDE4NWU1ODY5YmM5NjUxZDk3YzU2ZWM2YjgwNDdjMjBkNjcxZjZkYzY1N2Y0Y2RmNzNmZDdkM2NhZjRiODcyZjNmYjYzNzZlZGExMWI4MGQ5OWNmMGU4NWM0OTU3NjA3YTc2NzY0MmRhNiI6ImIxNDgzMTIwNzRlY2ZjOGYxMThlMzgwMGRiZDE3MjI2ZDU1ZmMyYzkxYmNiY2VlYWUyYTdjYTNiMzc2ZjZkNTY4ZGQ3ZmNiNWMwZDA5Y2U0MjQ4NjhmMTU0NDA5N2EwZjk2NmQzNTQ0NTVlMTI5MDk2ZWM4MDNhOTQzNWJiYmY4ZjE2NDMyZDMwOTkxMzg0Yjg4ZDE0YmNhZDExOTFiODIyNzMxNTdkNjQ2ZjdhOTg1MDdkYzBjOTVjMzNkMjJlMGI3MjFjMDQ2ZjFjMTM1NDVmNGVkMmRmNjMxZmQyYjhmYzQ5NDBlMTBlM2U2NmMwYTRhZjA4OTk0MWE4YWQ5NGEiOjEyMDoiZTNmNTQ4ZTI0YTE4OWRiYmZkNmFlNmI5ZWU0NGMyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmJkODk3ZTk2OWNjZWU0MDViYTliZWNmMjQ3ODdhMWUxYmUxN2E1NzE0NDJjNmRhIjoiNTBiOGFkZTVlNjU0N2MzNTBjM2Y0M2EzNWEzY2I2NDE0NTljNWVmOTAyYWZjNzA2Y2UyZmI5ODBiMjc1ZmRhNjJlODk3NGQxNTc3ZWY2NWNlOWZkODU0ZDg4Y2FhMTAyOTVkMTA0NWVkNzU2M2U5MzkxZDYwNzAwYjVkMmE0YTdiYTVmM2RlN2E3ZDE1NDE3ODBiOTVhMDhlYjNmMDk5NmQ5NmFhYzdlZTgzOGI2N2VlODY5NDQ3NjE3Njg0YzA4NTY2NjQ3YTQ5OTFlMzE4Mjk5MDdlYmU0YjMyY2ZhNDZjMDQzM2E2NGY4NjRiOGI5MzE2Y2IwZWMyNTc4Y2NlZSI6ImZlZjZhMDhkOTJiNWI5YmRhZTRjMzY4ZmNkMGNmOWU4IjoiZmIzMTQ0ZWM2ZDkzNzA0ZDYyNWFhOWU5NWJlOTYzNTFjNmUyNWJjY2YxZWFhYWY5YTFkNDA1ZTY3OWVmZTBmMmRhMDc1MTBhYjA3NTMzMjk1YTUyY2RjMWY1YTE1ZWY1YmVjOWU3MmIxOTk2MjU3MzBlMWJhZjVjMTQ4MmYzNjJmNDg1ZDc0MjMzZmJmNzY0ZDBiNjM2MzA3NWNlYmQ2NzY5MjBhMGIzMTVkNjgwZTg5OTczM2Q2ZGEwNWQ3ODc2NWRiMTU5YzRmOTQyYTMxZDExNWQ1M2YxZDg5Y2Q5NDhiYzk5YzAzYWRhZDFlZWU4YWRjZWY3NTQzZjlkZWEzOSI6ImU2NWVkNWI2ZDBmNTFmODg3NmY0ODNmM2Q4YWI4ZmVkNzhhYjZjMmUxY2Y1MDY5M2M4NTExZTFjYzk4MjNlMTAzMDc0MGFjMzNmMDVhNWFhMGQ4ODIwNWJiMzA3MWEwODc2NTVmMjhlZWU3ZDBhMDc5NDVkMjVlM2RjMDAyMjFhMWRhZGU0MTcwY2FiOTA4NGM0N2I4MjM3NmQ1ZDQzOWJlZDk5MTUwODExODQzYjE3NjU0M2Y3OTQ0YjFkZDk2ODRmYTlhNTIxMTdjMjMzNWRkYTc1MGQ5ZGUwZDliM2VmNzE4MTIzYjY1MzRjYjAxMjA4MGY2ZWY4ZWRhOGQ0ZDYiOjEyMDoiNDY4NTQ2ZDQxOTliOWQ5MjNhNjA3YTc4ZmE0YjQwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTIxNDFkNTgzNGI4Y2E0OGI1N2UwODkyYjYwMjdjOTk3NjY5ZGFjMTJmZTYwNDExIjoiY2Y0NzViNTA2NzJmZDhjYzRiYTg0ZDE3YWIxYjczM2ZlZTIwNzNhNTg0ZDU0MjcxNTVmMTQ0ZGRkOTQ1ZDQ5MDFkNWE5ZDc2ZTNkNmFlNTVhYjNmOTUxNDg2MWM4M2JjYTdkNTM4NjhmMzViZGM4NjA2YTE2N2FjODM1OTFiZTMwZGRiOTU0ZWUxNzNlZTE3MmU4ZDc3NDJhNzFjMGZlZTA0Y2NkMTZmYjVkNTRhNDU4MjA2NDA0MDUyMDllMjBmODQ5NGYwOGQ3OTFhMmExNWY1Y2I4NDhkZjY4OTI5NmEwNGU0YjAxZTJjMTliZDhkOWNhOGI0NTI1ODUzNTQ5YSI6ImI2ZGNiMzk5MzlhMzFkZjE3NmRjZWM4N2ViOGRiOTBmIjoiZGFmNGUwY2QwYjI5MzQzZGVmYjY1NTYyNTk0YjJiNmZkM2YwMDVlNjI1NTUwMDMzMGY3N2EwNTUwYzFjZmJhZGU1ZjU5NzNlODM2Y2U3MDQ2YmMyYjJhYjhiYjc5ODM4MzBjZTZjZTE0OGQwOTk4MTE2MTgzZDFhZWQzMjBkMjhhZGVmOWZmYWI0OGUwZjZkNjQ1MWM5OGViODNmYWZjNzVmYjA1NDk5MWQxMjM5NjVkYmRkY2Y3NGEyYzAxYzc0NmJiYmM4Mjc2Yjc3ZjY3MzJjZjM2NGQ4YTRhNWRiZjVhZWRiYmUxNjc5M2U4YzQwNmJhNjA5YzkwZjBlNzY2OSI6IjRjMmQ5NzliOWMyZGM5Y2JiZDZkNGVkMDQwOTQyODVhNDRkZjkyZTdlYmNkZWU3ZmVjY2YwNGM2NmM0NTEzN2E3ZGYxMjExMGI4YWY4MDVmNWNhZTliNGEyMjVjM2Y4ZGNmZDhmNDAxZTA1YzZjZTkzN2NiZmM1NjIwYWNkZjNhNDkxN2M1Yjg1N2JmZjc2ZjNkNzI4Y2Y2YTgyYTViMzU2ZmI5NWQxNDQxMjVkNTNlNTY4YjMxM2NlZjExYzExNTg1ZDMxMGNhMGY3ZjEyMzQwOTBiMWI2MjUzNjg4NWU5ZTM5Yjk2OTA2MGFkMzg5M2U0NzZlODg5NDFmZTJjZGQiOjEyMDoiOTljZWM5NGE2OGQzZTJkMjFlMzBjYjI1ZDAzY2QyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTRiOTE5N2I3OTgwZDk1YjcxY2UxYTFkZTY1NzdjZTc2OWQ2YWY0Y2I0NWY3YzhmIjoiMDNiMzc5NDJmMTI0MzVmMWMxOWRiY2ZmNDk2NzM4MjA3ZGM5MmVkZjFhYjY5MzViNTY0ZTY5M2RhMTg2NWRhNjdmYjUxZThhODM4NTU5YWUxNjQwZGE0NDFmMjJlZTc5Nzg3ZjFlOTA5Y2YzYzMyMTg3YjQxYTQ4ZmJjNTk1ZGYxYzA5N2ZiMzc4ODFiMzI5ZmQ3YjMwZGQxZTA1ZDYwNTJmZTgxZWRmMmUxMDc4NmFjYzhhZWViNGZhYzYzNmFhYzk0MzJjM2JlM2RhZmI1NWM3NmVjODVjYzEzODgxNzM1NjA5NzczMzUwYjk1ZWVkYmRiNjk1YjJkZTA3MWEwMyI6ImNhZDBjZmE3OTI0ZTFlNWNmZjkwZDc0OWNmYWRmOWY4IjoiMjgzYzhhMzhjN2ZjOWRjZTA3MWQ0ZmY5ZWQ3OTAwMmE2ODYyZjk3MTg2NzhiNDM1NTM0ZTQzNjU3YTk0MTc4MzUzYjllYzdlNWJiODc3ZGI1ZTRmNjJhMmNhNmJkNTU3NTYyOTg5MzYzYzZmZGVkYmQ3ZjBmM2VlZWM1NDQ1YzQxYTJhOGJjOTgxMTdhMTQ0M2FkNGQ1ZGQ2M2EwNzgwNjYyMmNjYThlYTZmOWY2MDE5YmQ1MTE2MzRkYjI4NjUxYjkxNmUyMzk5YmJkODRiMDNmOGVjNjk2ZWQ1ODQ2ZjMwMzIwYWRlZjIyYWU2ZDE2NGFlZDA5ZWRjZmEyNTAyNyI6IjgzOTQwMDk3MzAxZTk4Njc2MjNjMTA3ZDQ0NDdiMjUwYmY2ZGI3ZDA2ZjllMDdiOGQ4YmM2YjcyYjA3OWI3MjVlYTFmNGI1Zjc5YmI4MGM1MThiYzY5YTJiZDczY2YzYWE3Yjg4MTYyNzczYWM1YjI3YTJkY2NjZWNjZTY2ZTE1OGVjMDg3NTkzNzkxMGUwYjZmMzk2Y2M3ZDdjYWM1ZDUzYjBmZGRmM2NkNzBiNTcwYTY0NzI0NWE1MjY0OTI3YmUxYjJkOWM0NmZiYzZhNjMwYjIxZmVhZDQ2YzRmMzVhZjFkMTYzMjY4ZTQ5YTE2MDgzNTkwODkzZTZkZjQ2NzEiOjExMjoiM2UzZjY3N2U2ODIwODIwOGU1MzE1YjY4MWI3MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjgwZTJlYWE3MDM2MjIwM2I3NTYxYjEzNWRiNTgxY2YzMmU5Y2Q4MTY0NjRmMGIyZSI6IjYyY2MyZGIzMjU4NGE4ZDkwZjM0OGJlMzIyMjRiZmRjZWZkMWZkMjVjNWNiMDVjN2U3NGJlY2I0YjQwZWEwOWQ2NDk1ZjczYWRjMWZkMjNkMTQ4YzExODQ5YmQ4MjVlZmRmMTVlMTQ0NTg3Zjc4NTc3MGQyYWVmMjc4OGI3NDhjMzM4MzczYTBlYTQzODgyMTQxYmM5ZjdjNjkzYTI5MWM1MTJjZGNkZWE2ZDVkZWZiMmVmYTIzMjQ3MzZkZjdmYzRiNDM0ZDdmNGQ0MjNmYjFiODg1M2VjM2ZkZjJjMWMyODgxNjEwYThkODFkYTVkZTVlNzYxZjgxNGVkMzhlMzUiOiIzZDdlOTlkZGVhMGJhYTQ1ZTJmOWYyMjg5ZDIxODJhMyI6IjcxNjYzZmFiNzE3ZWM0ZDlkYTM0ZDQ4NTE0MzdmNDUwNGRiZDcxYjY1YjBkMDRlY2NjNTEzMjgyYzM1MTkyNWMyMzg5Mjk1OGI0YzlkYzAyM2M1YTM0OTQ0ZWY1MDdlMGI0MDg1N2Q4YjUwOGFiNzEwNGQxM2MyZmJmY2UyZDA4NmQ0NjYyOTFhYWE0NDlhZDM2OTc3ODM3MjE2YTQ5NmZmMzc1OTU5YWZlNGRkNTBkYzI2MjBhMDYyYzkyNmI5MzlmZmRiMTQ0YTY1NmJjMDRiY2NhOGQxZDRmYTBhOWNiMGE1ZDcxMzcyMWFjY2VmMmQyYzk2ODhhNzdiYjQyYmMiOiIxYzU2YjQ5MmY1MGZjMzYyYzViZjcwNjIyZjgxN2UxODE0YWUwYjY5ZGI3ZTMwNTVmYzllNjkwZDJhZGI5NDBmOWE3OGNmZDdlMDgwNDQ2NzE5MTNiYWVjNjYzZDlmOWFmNmRlZGU0MmZlMTZkMjAwZTg0MjFkMjIwNjYwMDk1MzU3MDRiMDViMzc3NWFjNDEzNTlkN2MyNjk3ZTJmNGJlYzQwZGY2OWIyNDIzOTJlYjMwZTJkOGE2NjRkODRjZjk1ZWMyMTc5N2YxY2NkZGI3MjkyNmNmZGZmMjI4NDhkMTRlMzczZjVlNmMzZGQzNDkxOTY0NjRjOThkYzM4MzY1IjoxMTI6ImUwYzFiMTQwY2Q3YmM0ZGVkOTE2YWFiODc4MGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YjdhYTY0OWNiMTQ4OGE2NThiNDM4NzQ1MWJmNTk4NTJlODQ1ZWM3ZDIyNzNjNjkiOiIyNDUyNTE1OTVkMTBkNzE5ZDhkMDA2MTBkMzkxNzM1ZmFkMzc3YjYwZDc0MzBjN2RiNDg4NDg4YzFlYzI1YzEyZWUwZGVlM2FhYzNkN2RjMTlhYTYwMjkyNGExZjI3YTJjZmE4ZjYzNTQzMTVkYjkzYjVlNGQyYjZlODQwMmM0MjU0OTIxZTY4M2NhNjgxZGZiM2M3ZjQzM2E5N2YxMTllMDFmMmFjYjIwOTg4ZGNlZDg0OTRlMDg2Mzk1MzUxZjJhZjM1NmIxMTgzMjQ3MmNiY2IxMDljMTNmZjkyZjEwYTRjOGZlNjliZDI2NGM4OTMzY2RlZDE5YTk4MGJkYmQyIjoiMDdiNTBiMWFhY2RhZGViMDNlNzQ4ODQ1OGRiMDNhYWYiOiIyYTc5NzBlZTk3ZDYxMmI2M2QyYTBjMjllNTA0NWRkZmM2NjIxYzIzN2JjMjcwYjMxNDdmYzAxOTFkZTE5OWI2OTIzOTQ3ZTNiZDM3NTBkZTUxNTVlMWRmMjljYWY5NmFjNzAyZjk0OGMzODYxOWUyMTgxMzg5NDU1OTUxNTZjYzVmMWRjZmRlMGQxZDZhNWFlYzQ4ZmYzN2M5ZmYyYjIyMDlhOTA0YzU5NTkzNzc5ODIwZWE2OGFkOTU4OThjN2NhMGQwZDgxNTgzYzQ0ZmViMGZlYzMwNjY1Y2M1NjYyMGE4Yzk0MDhlNDI3NWU2MGY1Mjg0ZWQ3YzBlNTgyODVkIjoiNmJkNTNlNDQxNTc2NWYzODcyMzljNjY2NGY4MzczNzFiMzlmNmQ3ZmYyMjQ1MzIxMWU5MWRlNWRkMTQyNzI3ODRmZmZiNGY2YjJjMGJiOGM2YjdkMWNhZmM1NTEzM2FhMGQ1NGQ0MTBhZTM4MzAwOGZkZDg3NjQ1NjU1MDYyMzIyZmJhYTA2ZGYwYTJkN2NjZjRjYzE3MGQxZjk4ZWM2YTdhZDUyNGEzZTViMDc3NjFmOGFlNTNjOWM4Mjk3ZmFhNWI1NjIxYzM4NTQ2NDNlMDA4NTQxMGRhZjViZjZjN2UxZjkyYmJiZmMzNjkxZWVmZjFjNTI0MWQyMzA3YmJjMiI6MTEyOiI3OGQzNzIxNTIzNGY5YTMyNTcxZDBkOGIxZTUxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTEyYmJiNDkwZDA2MmZlNWVjYzhlNWFkOTU5MjBhOWU5Yjc4YmVjNmE3Njk0ZGMyIjoiODYyZjI3MjRhZDgyYTUzZTA1NzRjMGEyYTA1MTViZDg2YzVlZDBiNWFlOTIyNzhhNzhlYTFhOTBjMDMwNTlkMDhhOTFkMWE0NjY3OGFlZjg2MmI1NmQwMzIwZTk3MGI3Zjk0MWI3ODQ4NDFiNGQ4YTM4ZDA1NmYyYmQzNTJkNDhjMDAyODA4NmEzNjQyNmJiYzE0MzZkYTllMDIxZGNhYzcwNWI2ZTAzNjQ5YjQyNmNlYmQ3YTIzNWY2ZDA2MGFiNjMwMmQ3NzdmYzkzMTZkYjRhODVlOGMxMzg3NjQ4YThmNWNlMjM5OGEyNDc0MTNjYjkzNzQxMjQ0NDllNDk4ZCI6IjJkMTRmYjNlMDU4Zjk3YjdjOWU5ZWRkMWQ5N2NhYzdlIjoiMjkwMDc4ZTYzYzgxYWJmZTk5MDEwYjgzNDRmZjFhMDNkYWMwOTVlMjQ3M2Q3YTMxODg4MTAyZTgzODc2ODg5MmU4MjE2NDM5ZGMzMzU1YWVkZDA3Mzg5MmY0NDQ5ZDlkNGQzZWE2YzI1YTkxNTJjMzI5ZDI0Y2M3M2VhYTAwMDQ4MzI2OTE3NDBlNjBmMTc1ODEyMDFjOGY3ZjQwMjNkOGU1NWZhYTM5NDJhZDcyNWQyMWRhZGU0YzAzYzc5MGI1MzcwZDRjYWQzOTIzNTI3YzIwY2E5MjVhMmNlNTM0YTY1MmVkN2UwMzJjYjFjNzkwNmFlYmJkYzI0ZTZiMzlhNCI6IjQ0ZTc4Y2YzYTJjZTRhNWU0OTgzMTVjYjhkNWU4NDFmOTI2NDA4OTIxZjM2NjVkNTMzY2FlYmUwYTdmYTZjMTY0YjNkMmMwYjIxZmYzYTYwOGE3MTk0ZTMxOTRmZGExNjVhZGE4ZDVmYzJlOTI0MzE2YWE0Y2UyMDE1MzFiODU3ODc3YzU1MTlmODc1ZWI0OWU1OTA4ZDhkODFiNjk0NzJkMDNkMDhjNzg1ZWUzNzRjNWZlOTFiMTZhZWUxNzM3NjFhZjdmZjI0NDU3MWZkNDBhYWRhYmIzNjBmMzhkMzAxNDYzZTlkYThjZjhkYzQ0ZDIwODQ4Njg4YWIzYmU0N2IiOjEwNDoiNjAzN2NiMThmODQ3ODYzMGJjOWQ4MDkwZTIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMzk2NGVlMDNlYzVlNTAwZjJmOGMwNTMxM2I3ODYxNTQyMDE4M2ZlMjk1MGJlMzIiOiJiOTQyNGU0YTc5YTA4YTc5MzdkYTFkYTE1MDYxYzFlYjlhODczNzQ4NjkxZWM5YzFmYzc2YWFhMTY0YmQzNDg3M2QwNzQzN2QyMDNjOTJjMGU4OWMwYzViZWZlZGZiYjE3ZjcyMWY1NzY0NzMyNTM2MTc1NDcyMDZmYjJiMzQwOTQ1NTM2Y2Q3YTA0OTg2NGQwOTk0MTljZjNmN2E5MTU0YzBhYzhkNjc2YjBlOWVjMDI5NDdjYWE0MDU3NTYwYWYzNDdkZGI0NjAwMjcwM2YzNTMxZjI3YjIxOTc3OTBiYTEzNWUzZDNjMDcwOWM4NmY0NzgxODkwZGViNTBmM2JhIjoiZDNkNGU1ZmRmNmUzNmFjNzViNGQ1MWM0N2NlNWI4ZjkiOiI2MTQ2YTk3YTJhMWM3MDk0NThiZWY1MDQ5MDg4ZmRmMzM5ZTRmZTI5Y2JkZjUxOWM5M2Q1MjViNzFjOWZiNTAxYzRiNThiZWY0OWQ0M2NjNzY5OWIxOGZjODljZWUxYTRhNDU4MzRmNTE3MjE0YTc3ZmIzYjkxZDc0MTk3NzMwOGUxNTg1YzQ3NDI0NTgwMjExOGQwZTJjNzAwMzA1N2M0YTE5NzUyYTE0MzE5NWVjMmE1NzEwMmNiMmExMjdkMmRiZWZlMTE2ODQ5MmUwNzJlNzRjNWY2ZWUxMDJhMGMzNzFiMWZlMmRkZmQ4ZWNiYzA0YzZmNDJiZWZlY2Q3ZDQ2IjoiYTJhZTMzNGJhYzk2OTA3MmU3NTRjMGUzNzc2NWNhNjI1Mzc0NDk0MWEzNTU4N2JiNGZlZGE1NDIzM2E3YTU5ZjAzN2U5NzFkMjU0YzY3OTQ4YjE2ZTRjMzVmMzA2YzA5ODRmMDA0NjUzOTk0MDVjZTcwMWJhNTU0NDE5YTczNmNkZmY1YTFiNGFlNWFiMDVlNjI1YzkxNjUxZjc0YWE2NGM5NmFiNjI4MjQzZDMxMDIxYWQ1NmY1MzVlYWUzM2E4ODViNDU3MzAyNjhmOTAwYjZkZjBhZmYxOGE0MzNlMjgyM2RkYjA2MjhhNzAyNmI4NmIzODM1MTYwZTUxMjFiMCI6MTA0OiI4MTdiZTdkY2Y3YWRlZjA2NDE2MWI2YzQyZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdhODA0OWY1MjFmZTlhMDBmN2JmNTY2MzY5ZTU0MGE0OGFiNTlkODMzMDVlMjgyOSI6IjY3MjQzYTMzNmExMGI4MmEwYTg2MzhiMzVkYzE0N2MxNGFjNjNiMjA5Nzc5MjJhMTNkZTQ1OWFlMmNmYmRiMjYyYTc5MDA0YzNhNjU2ZGZiYzA3M2VjODg3ODU5NWUyNDk5OGRjNDRiOTQzNTQzOWFmMTE3Yzk2MzVjNDc5Njc2ZjZlZGI4ZjUyMmNmMDE1NzFiZTVhYTViNWJjN2QxY2MzMjY0NDM2NTY2ZjhkM2M2ODQ5NzNkMWU4OGQ0NjI4MmI1MzgzNmExYWI1YTY5ODU2MGU1YmY3NjI5ZWMxMmNiMTQxODY3ZjY4NGIzNjk1NDZhMWQ4YmY0ODMxNWI2YzciOiJlNGQ4MWY3MWUxZGU4Y2Y0Njg5YmZlNjZhNDY0N2YxNSI6IjRjZjY3MzM0ODJjMjE4YWY4MzJlOTk5NzBkMDcxN2FjOTQyZWJhY2UwZmVkNGNlNGRmYTFmNzEwYjllMTMxYTIxY2MwM2RkM2NlZDI1Yjc4YmNjZDE5OTFhMzBiYjUzYjQ2M2MxNDQwYjY1NDNiMTlhZjkxZTMxYzE4ODY2YzJhY2ViYjc4YzJhMzQwYjkzMDUxOGU2MWE2M2ZmOGQ2YTZlOGU3OTYwNTIzZGU0MGExNzg2MTRkYWQ0Y2U1YWIyNTNlMTA5MGEwOTdmOGVjMDBkZmVlY2I0NmFhMGU4Zjc3MmYwMWM0ZTcwNmRlN2U4MjQzODZhMTM5NDQ2MDA1NDIiOiJjZmE4YmEyNDdhZGE5ZTZiM2U1YWI3ZGQwYTcxMDg1NzRjYzgxMWMyOTg2Y2FkOTUxMTY4NTU5ZmY2OTdiNzc2ODQ4ODBlYzI2NmYwYjdkODdhMmZmNTU5ZTM2OGE4NTg0NmJlY2VlMzEyYmIyOTkxNjkyZDkyOGE3YzE5MWNmZGI3ZjE0NjhmOGI4NGJlNGJiNTkyZWE2NDA3NDM0NDNiZDQ5NDFhOGI4NTZjNTdiZTIxZWIyMmZjYjNmNmMwYTgwNzI4ZGRjOWRjNWZhYjFjNzdkZmNlYjkxNjk5MDA5MDU0YzVhNGViMDcxNGExMGI3NGNmMGUwOWZhNjMwMjk5IjoxMDQ6IjFkY2VlMjUxY2RhMTBiMmVhOGYyYmZlNmEwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2NTc1NjdhNTZlNTg1Yzg0ZTQwMzMyNjhmMDhmNzEyYWEyODAwMTViNzdjZDY1N2YiOiI5NmQ4ODk2NTFjNGYzZjUxMjBiZWUyMzNmNjM5NWZhMGJiYmExZjY1NDhiMTA5YmU1NjhmZjk2ZjExZDI0ZTM0ZDY3YmViNmMyMDI2OGZlYmE4OTI0MDY3NGIwYjQ1NTJkMGE2NDU1ZDQzZThlZGY5NDNkYTNkOGQ3ODVhNTIyMWRmOGRkYjNhOThkMmZjNjExYWM3MzYyYWVmNzFmOGYwMDRlYjQ1NWExNmQxZGNhYzQ4OGVlODNkNGYxMWM0YTAwYzI5ZDk5OTBjNWEyYTk3Yjg5N2Q2N2U1MWZhYTQwOTk5YjFlNTEwYWM2MmZhNDg1OTEyM2NkYjM3ZDIwMmFlIjoiOTRkYzc1N2I2YmRiZmU5MjViNzYyOTIzY2QwYTA4ZWQiOiJhMmM1NGU4ZGE3ZGNhNDljNzM1NTBiZDFmNWU2ODQ0OTI5NWYwNjJkNWRmZTVhYTQyMDFiZGYzNTNhMmExYWM5YzNjNjFmMmI1NDgyMTg0Y2VmNDgxZmEzNzhhMWVhOTkwY2UyMDNjMmM3ZDc2OTkzYzYyYjQxNWVjZTA2YjliN2NhYWNlYzBjNDE0N2MwY2JmMjkyZTUyOGQ5N2MxYTE3NmZjYjFjYTYxNDdjZmE0YmNjZTkyY2JkZmU2MTc3MzhhOTIyNzMyODJjN2E2NWZjYjk5N2JjZWI4NjdjZTAxZWM3NDU0MTU4MmQzOTYxZGRkZjNhMmFmMjFjYWQzY2U2IjoiNTVhNWQwN2E3N2ZjMzcwOTBjNDIwNmYxOTQ4M2FhM2NjMDM4MTUxOTRkZWQ3MWMyYjI4MDZhZDk1NjNlZGZlYmZjZjk2MjgwNmJhODI5MzczOTQ3ZTNlOTNmNGYzOTc5NDUxNGFkN2I2ZGJjNjI2ZTI5ZmJjMzVmOTBmNTczZGEzM2FiNmFmYjVjOTQzODNmZDBmZGQxZWUwNzRkNjUwZDE5MmY2ZDA4ZmJkMWUyNGE2OTY2YTgxYTJmZmQ4M2ZhYjY0NGVlOTE0OTUyZGU3N2U5NDI3MjYyMzE0YWM0N2MxMWE0NGJmN2QyODkwZjliOTk4MDQ5OWJiNmExZjY5MiI6OTY6IjQxYzcyMDQzZjYxMTZlZTZmN2MxMTk4NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjExNTkyNDJkNDhjMmNhMGMzMDM3N2VjMmFkNzAxMTM1YWRiNjJkMTEzYzlmOWJhIjoiOGFlNDA2MDNmNmNkYWU0YjYzYWM3YjE4YjRiY2JiODNjNjU4NjdjMmFlMjcwMTAyZWZiNmYwMGFhOGFmNWQwNDAwZGM5NTA4NTkxMGE1MGExNmNiY2Y3MWYwNmMzZjNlYWI3MTM0NWQ1OWM2MDU0YWFhYzAyOTcxMTExYzcxNDZhZGQ4YzA3MjE1OGUwYjM3NGQ0ODFiYjU0MDAzNmExMzZjY2I5MTUyM2Y5NmYyNGVhMjM3OTQwYWIwMTFhZDM4ZjJhMzA5NWMwNzg1ZGY5MTYwNGJlMWZlNzczNGNjNDExOWIyN2FhNzg0ODc1ZDBhMjUxYzY3ODkwMDMzNGEwYiI6IjRmZGE3MjM2YmQ2ZWJlMGIzMTZmZWVlYTMxY2I1ZWJjIjoiZWQyOGU5OTU0NjM0ZWMyYzllMmRmNDkzMDYyYWJmM2VhM2UxOTkyOTkwNTNhMTVjZThkNmZlMDUxZDEwNzYyODdlNGU3YzBiMmJhYjBhNTk5Yjc2M2EyOWQwYWFiNjgwNjI2ZjI4MGM0ZjVhZDk0Yjc3OTJkOWFmNTMyNjgxZjZlNGViMjY3Mjc4MWYyMzQyMzA0ZGFmZjkwMmQwM2IzOTY4NTNlYWY1ODVhZjRkM2JmNTA3OGQwNjRlOWVlYTZlOTRlNjY3NzIyZjE1YzAwNGY0Y2Y1MjI1M2E1YzY1Yjc1MzE5YjA3YmE1Mzk1NThkOGEyYjU1MjM5MGEyMTU3NyI6ImRiYTI1MWUzNTQyMmY2MGY5MDJmNTk0YmI1OGRjZTM3MTMxZThhZTA2YjVmNDBhZDIzYzRhNzBhNWUyNWZlMjRjNzY5ODJjOWJjMTFhN2Y0ZTNjYzYyZDhjMTMyNjE3MDQzMjYzM2ViYTE2MzQ5NzJhOWJjZDA5M2IwOGUxYzYzZWNlMDdjNGJlNzljYWRjODg4YjA0MDhlNDBjMDk2MzZlMWNmMWU1ZTlhNmYyZWE0NGVlYTU0MDlhMmZmZTljM2FjOWExOGFkN2FhOTA0MWYwOGViMTA5YzAxZWQ5MDczMmE4YWZlMDY5NDMxOWVmOThhMDI2OTY4NWI0ZDE2YjEiOjk2OiJiMGZlZWJmYzgzMjRmZDFlOWU0MGY3ZjAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjViNGMzNzE1MGY4YmYwZTE0ZTBiZmQzN2FjMTRlNjA2ZGQyNzM1NzcwMDdmMjRiNCI6IjQ4YzY0ODZiMjY5MWI4NmY1ZjEwN2U4ZmUwMTIyYTgyMTI0ODIwNmQyZGQzY2U4OThhMmJiMzc3MjIwMmZmZTk3MjkyODUyYmM2MTUxMzUyOWFkOTVmYWY2MzgzYjVmNmM1YTdjMTZjNGNiZTMzY2IwMmU1ZTUwZjMyZGI5NWVlMjk2MmFhZTFjOWMwZjU0NzBiM2JhYTIxNmNjMTliZTVhYjg2YjUzMzE2YmVlZjE0Mzk3ZWZmYjhhZmJhNWI1MTU5MDc0ZTI2YmY1ZGQzYjcwMGY0ZWE1YWJkNDNlOTNjYTE4NDk0ZTE3NzliOGM0OGZjZDUxZjQ2NjY0ZGQyNjIiOiI2NjRmNTUzYTE0ZGNkNGRjYmE0MmYwNmUxMGIxODZhYSI6IjQzODZlMjhlYmQxNmQ4Mjc2YzZlODRlMWQ3YTNkOWYxMjgzZTEyY2IxNzc0NzhhYjQ2YWNiMjU2YjcxZGY1YTJkYTg2ODEzNGVkNzJlZjQzZjczZTgyMjZkZjFmMzRlMzUwYjdmOTM2YmQ0M2NhZmY4NGEzMTdiMWU1YjJlOWEyYjkyY2NhYjFlM2U4MTdmOTMyMjJkZDFlMmNmODcwZDQ1YTg0NThlNTc5NDhhNjQ5MzYwYzZlMjQzOWJiY2M2ODIzODNiNTBiY2QzZDhiMDAwNTkyYzNjYTU5OWU1OThhMDNiOTk1M2FmNDg1ZjFlY2MyMjUwMWRjYWNiNzExMGUiOiIwNWZkYmI1YWQ0MDNkNjQwMTFlMTVkMjdjZDZmNWEyMjQ3ZTAxOGU0NzllNThhZDNmZWUxZTBlOGRkZDllMTE0YzBlODJmMmM5NDdmZjlhZjUyNWNlNzUyZjRhZWE5NTk0NjM4OTk1NDJiODVjOWI0MTNkMDY1ZWExNzUxMDNjM2IzYzM1ZjU2ZWVhNTJhZjJjNTRlYzA4YTFkNWI3Y2Q1ZWU0ZjU5ZGU4YmU4NjUxMmI3NzBlNDJhYjE3NmI2YjcwY2NiY2QyNjRkNmQ1Y2ZkZDJlNTJlNjE4ZGMyNDI1MWFjMzM5ZWEzOGNkYzQ0NmM3NzhkMmRiM2M3YzNlOTNkIjo5NjoiNzdmMzI0MDFkYjIxYWRiNzc1ZTdmMWQwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MzFhMzgwYjEwOTA5OGVhZmQ5OTdiZDI1YmZkZTQ4NjhkMmExY2E3ODE3OTVlOWEiOiI0NjYyMzdkYjc4ZDRjNzcwYTY1OGI5NjkzNDIwYTJlMDg3Yzk3OGZjYzQzNGM5YWM4MmYzZTI0NDdiMmZhMDhiZTMyZDJjZTZkYTI1ODQ2NTU1ZmZlNTc2NDIzNGIwN2IzNWRkMWQxYmNiNzEwZThhNDlmOTE4ZjJjODczNjgxZjMyNzY1YjA5MmE4MzZlOTQxOGZhYmE2MWRjNTlhMjU0YzkyMzE1OWJlMTZmNTg1ZTUyNjYxNmZlZGQzYWNmZTI3NDhjZTE5ZWUwMzg2OGVhOTgzNmJlZTJjNmFjYjFiODIxZTIzMWViMmQzMGQzMDAzODdjOTMzOTBkNTFlM2E1IjoiYWQwNzlkMGI5NThmMDk3MzJhYWEyMTU4ZjYyMTU1NzMiOiIwOWUwMDJjMmM0OGJlYWYxMTIyNDExZTg2MjQ1MjJhOWU5MGNjM2YyYTA0MGM1MmZmY2I5MTEzNjUxOTI3N2MzOWZkNmE3OTI5MmI4ODM1ZTBmYmNhZWYyMjc5MjE4MTA2YWFmNzUwMzY1OTBmOGE0NmY2YjY5MTIwNTNhM2IzOTE4NDlmN2UyMDRmMDk2Mjg4ZDYxNDFkNWY4MGM3ZjkxZGQyZjJiNmViYzFjZWQ2YWY4MjE2ZTBhNTk0ODE0YjU2YmQ1OTJkZjgwMDI5OWIyOWUyNmVkNzQ2MWJhM2Y2ZjNjZjE1MWI5YzEwYWQ2MzRhMDFkOWM1ZTU3OGFhMzcyIjoiZDFmNDlmOTRlNmZiZWY3ZTIxYWJhZDIzZTE2YzA2ZmNkZmE3NWE4YzM0MmJlNjdiYWVhOGUwZTU3ZGJjZDI5NzEyNzZlOTkzZmFhMTI0YWM4MWU2YmUxOGY2OGFmMzAzNTE4ZWZkOTI2NTEzY2VlOWRiY2M1ZWY2Y2Y1ZTljMDY4YTEyMTBlNTNmZGQ1Njc3NjE0OGQ1MTU5N2UzNTlkYmFhMDU3MGI0ZmUxNTQ3NmNjYzlhYTc5ZjdjNzY1NzU1YjZmNjk0YWY0MjY5YjllMThmYzYyYTBkNDc3MDhiY2E2N2RjZjA4MGUyMDA3MThjMjJiYWMyNTZmNjQxZTdhMiI6NjQ6IjAxZWMzOTVjOTlhMTdkYjYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0xOTIsMTI4LDEwMjQsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZiZDdhOTIxMjBmZjk3M2VjNjliNmE4MTg5YzZlYTgyN2NhMjA3NDNhODc4MTUxOCI6IjE1ODNjMTU3OGE4YzhkMjcyYTk3MGYwNWQ4NzVmMTk5ZTQ5N2M1NWYwM2YxMGY3YmM5MzRmZWUyMWMzMDM3OWRhZDNjNTgwYjNmOTkzMDRhNTc0N2I2MWZkNDM0Mjg1MDY0MzllZGUyYzU3ZjUyMjllMTNkYTljYjdjZDYxNzRjY2NiYjM5N2U5OGZiOTA0NTVjY2YzZWEzYjEzMDRmNDMyYTA3MGEyZWI1MjA1ZWQ4NjMzMjZiM2I4NmQ0ZWI3ZjU0ZWUyZmZjZDUwZWQ2ZWYwMWIzZWUyMTZjNTNmNGYyNjU5YTg4ZmI2MzQzMzk2YjJkZWQwYjM4OWM2MjY2YzUiOiI1NzY1OGM3MWIyYzQ1ZjZhZTJkMWI2Nzc1YTk3MzFjZiI6IjQ1Y2E4YTE2OGVjY2E3YTQyODQ3Yjc3OWVmMTUyNzY2YjkwMjE5MmRiNjIxZDI3NzBiNTZjN2Q1OTIyMDdhZmFmNTJkMTlhNjA1OWZlYjc2ZTk2YjkwNjI4OTk1YmQ2NTE3YWYzZjExNGU5N2FmOGQ2MDJhNDkzYjc3NDA1ZTkzMDk1ZmVlNjc2MTg3N2RjMjkyZmFiNjk2YTQzMDMxMDJkZWNlNjA5NTFjY2EyMGNhY2IxNzFhYmRjZmQwZWY2ZGE2YzkwYjQ0ZWRiYTYzYjliNjA4N2Q4NzZiM2ZmZjI0ZGVhOTA5ODk5ZWJkMGQwMzcxYzQyNGY1MWE5YTg0YjgiOiI1OGEyOTBjZjBlNzc0MjkzZDFiNTVmNWVmOGEzMDVmNjg2MDVjMGM4MTY2OGI4YTFiYTk1ZmNlZWFhNjUyMjk0MDRlMThmYTU0ZGQ4MTFhNmFmMDg1Yzk4Yjg4NTRkMGY5NTZhZGMyYWFhZDc0MmNhZmE5ZWQ1M2Q3Y2I0NDU0NTFlZTdhNGRjMWU4Mzk5ZWM3ZTViNGQwMDRlY2QyMjQ5NjU2NWJmNDQ0YjJlM2Q4MmRkZjZhNmQ1ZTYyNTZjNTA5NWE2OTlkN2ZmM2Y4Y2YyYWRkZWM3M2UyMTAxM2VlNmYzZGZjMGEzYWJmMzE2ZWE1ZWUxZDY5NDNiYzM5NGUxIjo2NDoiYWY3MzdlYzM1MTJkYTJiNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTE5MiwxMjgsMTAyNCwxMDI0LDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTRiZmM4Mzc5ZTBhODE4MGI5MzFjNTE4OGM5NWFiM2VkMzQ2MWQ2ZTkwMDRkMTgyIjoiOTMzMjc2NjRlYjU3NmJiYjY0ZTRmZjA2MTg3NDM0NmI0ZTgwYTc3OWNkZWIxZmJlNjMwYmY1ZTQzMDdkNGYyYzVkNWVjYzk0YWE4YmRlYTc1NWMxYWYxNjVmYzg5MjViZmNkZjEyOGMxZWU2NTcxZTlmODM0NGIyMmRmYzkwZWQ4OTMzMTYwMzE2NjFhOTQzOGIzMDUzOTZmM2E4MDQ1MmM5YjExOTI0MTYzYjdmYzQ0MjJiMDBkYzU4ZWUwZTY3NDcxMDIzOTk3NWEyY2YzMjUzYmYyNjAxY2QxNTVlMDk1NDdhNWYzYmUxYWRkYTg0YTRiMjk2MzFhOGUxMzE2MSI6IjlkMTVkZjhkZTQxNTBmNDRkMzQyZjIwMzFkZTM2MTFjIjoiNjMzMzE5MzZkMjk3MmFiZDQ0YzFjOWY2MmU0MmJmYTkzMmRmZjhjYzc1ZDlmNTU1ZjVhNzg0N2QwODU1OGU3NmY1MzkzZTA4OTA5NzYwZWRiZWY4ZDI5MjJhN2NhOGUxYzBjNTA1Y2E2MjdjMDJhZjczMjUzNzkxYmIzNWZmMDgwYjRkYjdkZGRmNGM4YjMwNDk5OWZmNjQ1MjI3Y2Q3OWYxM2FjODdmOWM5NjNiOTNhNzlhMGU5NDZlNTc4MWNkYmYxYjRiMTk2N2E3NTMxNGYxOWM3MjE5ZTNiNjlkYzJjMjRiYTA5ZmJiZGY3MTg0Mjc4ZjgyODE4YmRkMDk1OCI6IjE4ZmY4N2RjY2JjMjRjMzk2MTkwYzdiMzdjNGE3N2Y4NmU2MDlkYjdmYjJiMzI2ODAyNzE0ZDBmMTk2YjAwYjg0YWY4ODdmMWIzYmQzMGVlMGIwYjE5MmQwODAxYWM0ZTU5YWM0MGU1YzY1MmIzZGEzMmFhMDI0ZGEzYWNmNjQ4ZGEwMjUzNjc0YzM5MWQyNjBjMDY3NDg1M2M3ODIxODYxMDU5NzcyYzlhN2YyNzc1YTdlZjc3ZDFkMzFhNmVjMWM1MWM1ZjMwODliYjUxNmY4Y2Y1MmQ1YTE1NzI0MjgxMDg2YWJkOTJhNzRkMjU1YjdjYzg0YjUwNTFiZTRlNWIiOjY0OiJiZjBmN2Y4MDg0ZTc5ZGE1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyMWI3NzVlZjhjNDBhNTM4N2Q2YzhlZGE0ZTkwZDBhMDBjNzk1NjgxYTI4ODdkZmMiOiI2MzQ2Zjg0MzAxZDZkODNlMWM1YmFkNDRmYTdlMDgyMWYzNTcyMzcxM2VlOGQ0YTllMmJmMTVhYmY5NTM0MjViMDliZDc3YjIzNjBmNGU2MmU4MmJmOWUxNGUyYjU2YmU1MWQwMzJhYThhOTZlODk0ZjE5ZjNlODQ2MzBmOWVhZTgzMWIzMjlmNzYzOGIwOWRlNzIxMGNkMjk3NzgwNTllZjFkMGJjMDM5YzFlMTA0MDVmM2FlNWU0Y2EzMzIxNmFkY2ZjMjE4NjlkOWY4MjUzNDRkNjJiNTBiYWIwM2Y3YWE3YjkyZmRiOTQ5NTFhNjhhY2QwMWYxZGVlNzVlNDI4IjoiOTc2M2U2MTg3ZDRiOTZiMTgwMWQxZjZlZmU3ZTgwYTUiOiIzYmQ1MjNjMTZhMDAyMmI3ODBhZTgzMThhMjhmMDAxNTAyMTIwYmIyNmUyZjY1ZjRmZTk0MDE5Njg2ZjlkMWRmMzMwZTcwY2VmMWIyYmE0YjZjZTFmN2VmMzc3NTBmNDdlNjAyODQzY2JjNWYxM2ZmMmNlYWRjNTA5MWViMzYwMTYwNGI3MGJkNGFjYWQzZDYxOTUwYjlkZDJjYmZkODNhMzkxMjIzYzhlMDlmZGRkNDAyMGMwZjhhOGE3MDU3MTM5ZmQ5MmYzYmJlMDM0ZjAzY2M0OGFmZGRlMDY0YzhiMTNlYTk0MmVjMGQ2MjFkYjk1OWVjOWQ1ZmE5NWFmZTQ1IjoiZjI1NDA4ODQ4YmMyN2FiMDg3YjNlYTA1Mzc2MjgzN2E1MzRjMzcwMmRkOGJlMDFkNzlmMDc1ZjYxZDc2YWMxZDY1NTdkMzkyZTFmYWI0NzVjYzdkMTNhNWY2YmU2ZjA3MThiYWQ3MWMzYzg1YjU5OTZiZDNjMDE1OWUyNjQ5MzA5ODhlM2VkNTA2YmNjOTRmYWJlY2ZiNThjYWFmNTZlMmU0MzE1YmI1MDgxN2NiYTc2NTYzNmQxZmFhOTExNDdiMzg4MDgxNWVlYjkwZDA5MzQxODBlNDkxMzI4MzNhYmZhNjI3OTI0N2Q5ZGQ0MDQ4ZGZmODUxZTlhNTUxZWUxYyI6MzI6ImQxZmI5YWVkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4YTdkODE5N2Q5Y2VlYmQ4ZTNmNmIzYmZiNzQ4NzdjY2Y2NDlhYzkxZDcwNTdhZjUiOiIzN2IwMWRmMzU3NTYxZjVhYTQzYjViNGIwMDgxMTQ4MjEzZjdiNzRiYWJjODBmNGIzYzZkZDc4YWQxNzY4N2YxMTQ0M2NkNGE1N2Y4ZDdhNzRjYTMwODBlMmEyMjlmNzhkOGU2ZGIyNzZjMTE0MmQ1ZjRlZTc2NGVhZjA5Y2ZkNzBjNTk2ZDdhMmNhZDUzNjBjMmRlMjBkNWUxN2VjNmUwNmE5YjA0OWJiMTBmODc0MmEzMGE5NDI3MGNjNmQ3NzA5YjJmMDlmM2NiODM0N2U0MTExN2I3ZGRiOTllNGE5MzlmMzA5NGMwMTYzMzBhOGYxNzBjY2NjYjlkMzY1MWZiIjoiZGI1MTQ0OTUxYTlmMTcyMTM5N2I3MzIxNzEzYTcyM2UiOiJhZDcyZmE1YTA1YWRjNDBmYjM4MjQ1ZGEwMTljYmY1MDk1OGNjZmUyNmFiZjY3ZGZkZDQ5ZjRjNGFmNmJkYThiZmM5OWQ1NTc5MTNiMjYzNGM1YzY1ZDMzY2E5MDkzNjBhZGY1OThiNzAzZGIxZGJjYzI5NDgxYjE3Y2E0MmZjZTMzMTVlYTE0NTQ2OTNiNTg0M2U3NTFmYWZkNzgxNThmYzA0MGMxY2JlNjA3MDYzYmE5YzBhYzAyYWU0Yjg4OTg5ZTNjYzYzYWRkYTg0MjcwMzJjNzA1NjAzNDllMWE4ZWM4NDc5MDZhOWE3YjA0MjJhNjk0YTFmOWViMmIzYjcyIjoiNjk4NWVjNTI1Y2ZlODY5ZTE3MDk3NTFlYjZmMWZmMGFhYmNiMzlhZTNhYTcwOGFkYzQ1MmNlMWE4Y2FkOGFiNGYxNzM5ZjY2MGIyODQxNTY2ZjFmNWM5ZTE1ZTg0NmRlN2Y4NmNhMWRjMDg1MTg4ZmNhYTRhM2Y4MzlhYjJhNWYwY2ZkMzZlMzY5NjVhZTUxOWZlMTRmOTg4OTljY2IwN2EzY2ExNWVjNzA1ZTMxNjBkZjZkYmMzN2FiODljODgyMDEyZWVmZTUxZTRkYThkNmQ2Yjg0YjMxNDRjYTg3YTkwODY0ZmY1MzkwYWJmYjkyOTkyZTQ0YzQ2ODA3YjNjOCI6MzI6ImM1MTYwNGY1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMTkyLDEyOCwxMDI0LDEwMjQsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3MTMzNThlNzQ2ZGQ4NGFiMjdiOGFkYjNiMTdlYTU5Y2Q3NWZhNmNiMGMxM2QxYTgiOiIzNWI4YjY1NWVmZGYyZDA5ZjVlZDAyMzNjOWVlYjBiNmY4NWU1MTM4MzQ4NDhjZDU5NGRiYTNjNmU2NGY3OGU3YWY0YTdhNmQ1M2JiYTdiNDM3NjQzMzRkNjM3MzM2MGFlM2I3M2IxZTc2NTk3OGRmZmE3ZGJkODA1ZmRhNzgyNWI4ZTMxN2U4ZDNmMTMxNGFhOTdmODc3YmU4MTU0MzljNWRhODQ1MDI4ZDE2ODYyODM3MzVhZWZhYzc5Y2RiOWUwMmVjMzU5MDA5MWNiNTA3MDg5YjkxNzRjZDlhNjExMWY0NDZmZWVhZDkxZjE5YjgwZmQyMjJmYzYyOTlmZDFjIjoiMjZlZDkwOWY1ODUxOTYxZGQ1N2ZhOTUwYjQzN2UxN2MiOiJjOTQ2OWFkNDA4NzY0Y2I3ZDQxN2Y4MDBkM2Q4NGYwMzA4MGNlZTliYmQ1M2Y2NTI3NjNhY2NkZTVmYmExM2E1M2ExMmQ5OTAwOTRkNTg3MzQ1ZGEyY2RjOTkzNTdiOWFmZDYzOTQ1Y2EwN2I3NjBhMmMyZDQ5NDhkYmFkYjEzMTI2NzBjY2RlODc2NTVhNmE2OGVkYjU5ODJkMmZjZjczM2JiNDEwMWQzOGNkYjFhNDk0MmE1ZDQxMGY0YzQ1ZjVkZGYwMDg4OWJjMWZlNWVjNjliNDBhZThhYWVlNjBlZTk3YmVhMDk2ZWVlZjBlYTcxNzM2ZWZkYjBkOGE1ZWM5IjoiY2MzZjk5ODNlMWQ2NzNlYzJjODZhZTRjMWUxYjA0ZTMwZjlmMzk1ZjY3YzM2ODM4ZTE1Y2U4MjViMDVkMzdlOWNkNDAwNDE0NzAyMjRkYTM0NWFhMmRhNWRmYjNlMGM1NjFkZDA1YmE3OTg0YTEzMzI1NDFkNThlOGY5MTYwZTdlODQ1N2U3MTdiYWIyMDNkZTMxNjFhNzJiN2FlZGZhNTM2MTZiMTZjYTc3ZmQyOGQ1NjZmYmY3NDMxYmU1NTljYWExYTEyOWIyZjI5YjljNWJiZjNlYWJhNTk0ZDY2NTBjNjI5MDdlYjI4ZTE3NmYyN2MzYmU3YTNhYTI0Y2VmNiI6MzI6IjViZTc2MTFiIjowCisKK0FFUy1HQ00gU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMyNTZfZGUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlODQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2RlLmRhdGEKQEAgLTAsMCArMSw2NzUgQEAKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmMxODY2NTQ0MDZiMmI5MmM5NjM5YTcxODlkNGFiNWFiMGI5YmI4N2M0MzAwNTAyN2YzZmE4MzJmZDM1MDdiMSI6IiI6IjNhMDMyNGQ2M2E3MDQwMDQ5MGM5MmU3NjA0YTNiYTk3IjoiIjoxMjg6IjRjNjFjZDJlMjhhMTNkNzhhNGU4N2VhNzM3NGRkMDFhIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc0N2QwMWQ4MmQ3MzgyYjQyNjNlN2NiZjI1YmQxOThhOGE5MmZhYWJmOGQ3MzY3NTg0YzdlMmZhNTA2ZTljNWYiOiIiOiI3MTU2MzU4YjIwM2E0NGVmMTczNzA2ZmRjODE5MDBmOCI6IiI6MTI4OiI5Njg3ZmIyMzFjNDc0MmE3NGQ2YmY3OGM2MmI4YWM1MyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFjYmUzMDIxNjEzNmI3ZWFmMjIzZTZhN2I0NmMwNjYyNTE3NmQ5YTA4MTgyZmE4MDZhNjNkOGIxNDNhYTc2OGIiOiIiOiI0ZmU2YWNlNTgyYzRlMjZjZTcxZWU3Zjc1NmZiN2E4OCI6IiI6MTI4OiJkNWJkZjhlYzI4OTZhY2FmYjcwMjI3MDhkNzQ2NDZjNyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYzMTE5NGM4M2JiOGRhOTc5YTFlYWJiMzMzN2NlYjNkMzhhNjYzNzkwZGE3NDM4MGQ4Zjk0MTQyYWI4Yjg3OTciOiIiOiI0MDRlZmQyNmI2NjVjOTdlYTc1NDM3ODkyY2Y2NzZiNiI6IiI6MTIwOiJlNDkxMDc1ODUxZWVjMjhjNzIzMTU5Y2MxYjJjNzYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkYWVlZDUyYWU0YmY1Y2JlMWFkNThhZTRjY2IzZGE4MWZiOWMwYjZmNzYxOWNhMjE5NzkzMTNhZDlkM2U4M2MxIjoiIjoiNDAzN2VhZGIxMTI0OTg4NGI2YjM4YjU1MjViYTJkZjQiOiIiOjEyMDoiMzYwYzZlZjQxY2JkOWNkNGE0ZTY0OTcxMmQyOTMwIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2FkODFjMzQzODk0MDZhOTY1YzYwZWRiMzIxNDY2M2FjNGE2YmQ1Y2ZkMTU0YWU4ZDlkYzg2ZGFlOTNkZWY2NCI6IiI6ImNlYmJjZTA2YTg4ODUyZDNiYjI5NzhkYmUyYjU5OTVhIjoiIjoxMjA6ImJkN2NhOWY2YmQxMDk5Y2RlODdjMGYwZDdjYzg4NyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRjMTUyYmEzMGFlZmE1YjJhMDhiMGI0ZDliZjNmMTZmYzIwOGJiMGJjNGM0ZWNhOTQxMWRjMjYyZDkyNzZiYWQiOiIiOiIwMDhkMDQwZmJkNzM0MjQ2NDIwOWYzMzBjZjU2NzIyYyI6IiI6MTEyOiJjODcxMDc1ODU3NTFlNjY2YmVkYWUyYjFiN2U4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhZWQ0YWU2YjFkODU3ZmRjYmU1YWVjNmRiMzg0NDA2MTNkY2M0OWYyNGFhMzFmYmExZjMwMGIyNTg1NzIzZjEiOiIiOiI5NDdjNWYwNDMyNzIzZjJkN2I1NjBlY2E5MDg0MmRmMSI6IiI6MTEyOiI3ZDMzMWZlZGNlYTBmZDFlOWU2YTg0Mzg1NDY3IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNjODBiYzAzMTY3NmVmZjVmMzRkZDA3NjM4OGE1MTMwZTk4NWY5ZTA2ZGY0YjRiZjg0OTBmZjlmZjIwYWFlNzMiOiIiOiI1MWY2Mzk0NjcwODMzNzc3OTUxMTFkNDRmN2QxNjU5MiI6IiI6MTEyOiIwMmQzMWYyOWUxNWY2MGFlM2JlZTFhZDdlYTY1IjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGI3YTQwMjEzYjViNGIwN2U5OTAwZGMyOGY1OTk0MDNiMDU3OWNiY2UxM2ZjZDQ0ZGZmMDkwMDYyZjk1MjY4NiI6IiI6ImFlYTZmODY5MGY4NjViY2E5Zjc3YTVmZjg0M2QyMzY1IjoiIjoxMDQ6IjdmMjI4MDc3NmQ2Y2Q2ODAyYjNjODUwODNjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI5OWI4NzRlYWE4YjdiYWY3NjlmODFmNDk4OGE0MWUyNzA4YWU5MjhlNjlhNWJhN2I4OTNlOGU2YjJkYjVjM2IiOiIiOiIyYWEwNGQ4NWQyYzBkYzZmNTI5NGNiNzFjMGQ4OWFjMSI6IiI6MTA0OiJlYTAxNzIzYTIyODM4ZWQ2NWNlYjgwYjFjZiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE2YzdiNGM4MTc1ZGI0Y2YyM2QwNTkzZWQ4ZWE5NDkwNDM4ODBmYzAyZTI3MjVmMGFiOTBhZTYzOGY5ZGNmY2UiOiIiOiJhZTA3ZjhjN2FjODJjNGY0YzA4NmUwNGEyMGRiMTJiYyI6IiI6MTA0OiIxMTMyZTRmZmYwNmRiNTFmZjEzNWVkOWNlZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI5OGUxYmY3NjgyOGI2NWE4MTAwNTQ0OTk3MWZkYzhiMTFiZTU0NmQzMWRlNjYxNmNkNzNjNTgxMzA1MGMzMjYiOiIiOiI5MjliMDA2ZWIzMGQ2OWI0OWE3ZjUyMzkyZDdkM2YxMSI6IiI6OTY6IjMzOTQwZDMzMGY3YzAxOWE1N2I3NGYyZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjA5Y2NlZjY0YWU3NjFhNzBmZTE2NzcyY2JhNDYyYjA1OGE2OTQ3N2M5MTU5NWRlMjZhNWYxYmQ2MzdjMzgxNmYiOiIiOiJlMzRiMTkzODFmMDU2OTNmNzYwNmNlMDQzNjI2NjY0ZCI6IiI6OTY6IjJhZGMyYzQ1OTQ3YmZhN2ZhYTVjNDY0YSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY1NGNmNDY1OThlNWFkM2UyNDM0NzJhNDU5YmNkODBmMWUwMjZhNjU0MjkzNTJkYmQ1NmU3M2ZjYzU4OTVkMWMiOiIiOiJhNTZmMjc3MDllNjcwYjg1ZTU5MTdkNWMxZDViMGNjMiI6IiI6OTY6IjE3N2I5YTVlNmQ5NzMxNDE5ZGQzM2M1YyI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODRiY2ExYjI3NjhiOTIwMmJmMTk0ZjJkNWU1YTBhNWY1MWZkOGJiNzI1ZjJiYWI4YTNmY2NiZGI2NGE0ZWE3MCI6IiI6ImM0NWIyNzA4YzViZGY2NWVjNmNjNjZiNmRmYjM2MjNiIjoiIjo2NDoiZmU4MjMwMGFkZmZkOGMxNyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM4YWUwMTE3OTVjOWE2MGFkNzY2MGEzMWZlMzU0ZmE2ZjdlOWMyNzI0ZDdhMTI2NDM2MjkxNjgwY2Q5NWMwMDciOiIiOiIxYmQ5ZWE2MTg2NDUwZjljZDI1M2NjZmVkMjgxMmIxYyI6IiI6NjQ6IjM1MjE0YmJjNTEwNDMwZTMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRmMmYwYThhMzg0OWY0OTdkMTJiZGE0NGUxMmNlMzBhNjk1N2YzZmViY2Q1ZWM5YmMxMzQxNzEzMjZjYTY2ZDMiOiIiOiI3MjhjYjk2MDhiNjdhNDg5YTM4MmFhNjc3YjFmNGY1YiI6IiI6NjQ6ImUyZWY1ZDljYzU3OTFjMDEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc4ZThhOGFkMWVjZDE3NDQ2Y2Y5Y2Q5YzU2ZmFjZmQ0ZTEwZmFmNTc2MmRhMGZkMGRhMTc3ZjZhOWI5YzNhNzEiOiIiOiJmMTY5Y2U2ZjNjY2M1OGY2NDM0YWUyYjhhZDFhNjNhMSI6IiI6MzI6IjBmZTU3NTcyIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMmNhNmQ4YTg2MmUyNWRiOWQ2OGU0NDA0YWJjMTA3ZTcwMDEzNWRmNDE1N2NmYjEzNWNlOThlYWEzMzE1MWM5IjoiIjoiN2I3MjJmZGQ0M2NmZjIwODMyODEyZjliYWYyZDY3OTEiOiIiOjMyOiI3MmRlYTZjYyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjlhMmI3MDlkYmNjM2E0ZmIxNWIzYWQ1NDFmYjAwOGMzODFiN2U5ODViNTdkZjUyZjA3Y2E3Y2QyNmFiMWVjYzQiOiIiOiI3MjliYWE0YzBlZjc1ZWQ4YWFlNzQ2Mzc2YjM5ZmUzYyI6IiI6MzI6IjJhMGQ2MDdjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ0OWQzOWY4NjNlNDkwOTk4NGIzN2YyZTVjMDllYTRkNGIzZTlmYWM2N2JkNTdjMjk5ZTRlMWQxZjA4NGFhYTMiOiIiOiJkOGU5MTE4ZjMzMWJiNWEzNTlmMGFhODg4Mjg2MWI3MiI6IjRkZGNhZTBiYzI0ZDYyMmUxMmJkZWFhYzczZThkMWFiNzk1N2FmMDUxZDI3ZGZhYWZjZTUzYWVlZDRjZGQzZjk4OWVhMjU5ODlhMmY0MWNmYjNjMzhkYmQ4NDFjNTU2MGIwYjVhYjE4NjFiMWZiY2QyMzY4NjVkMTNkYTU1YjUwMjE5NDYyZTAyMWY4YTIxODQ4YTY0YTg1MzI2MDMxZmNlYzhmZTQ3YTZlZjRhNDM1ZGQyYjJmZmY2Mzc2NDRmZmNmMzkxNGVmMmRmYTVkZDU1NjQyMWJmZDI5N2JlMTUwYjMxZGIwMzlmMGYyY2M0MjJiMjgyZTY1OWU3MGNjZWIiOjEyODoiYzU5NWI5ZDk5NDE0ODkxMjI4YzlmYTVlZGI1ZmNjZTMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzZTcwZTY2ODEzZmM0OGY5ODRkY2RhNGQxYzljMjRmMWQ1ZDFiNzFlY2ZjOGJiOTU4MTc4MmU3Y2NhNWE1Y2M2IjoiIjoiZDgwNGYxMDUxZTcyYzliNzExNzAwMmI4NjJlYjQ1ZmYiOiIwYjFhYjJiN2E4N2NlYmFjNjY4YzdhNTMyZmE4ZmE1NmEyMmNhYmYwYzQxZmMxZTY3NDRmZmUwN2M4NTdjNjg2NWQ2MjNmNTA4MzUxZjk4ZjNmMGM1NzdkMWViOTQzMDBhMzBhNDQ1NDcyMjE4YzhhYzYyNmIwYmVlN2Q0YzEyMmQzM2Y4MTMwNDM2YTg5YWRkMzQxZThlZjdlMDA2OTRhZmI0YWQ4MGQzMTRkODdhZDNmOTIxYzcxMDVlZWQwNTQzMWI4MTUxZGY3Y2ZmMmM4ZTM3OTBlZmQ0YWNkM2Y2MDMzMmRjN2YzNGZkZDkwYmVlZjcwZjkwOTMzNjFkNjViIjoxMjg6ImMwOWMyZTNmZGZlZmEyMjJmNzM0NWFlNGVmYjk3OGZjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhlNTM0MDQxMDkwYjQ1YjgwZjI4N2RjNWZhMjBlYmRhMDE3YWQ4MWIwNTMwZTY4MGY2MmM2MjgwZmQ4ODgxYWYiOiIiOiJlYWQ2NzViMDE5ZWY1YzZiYmY0OTg1ZjJhMzgyZDZjMSI6ImIxZGIyMjAwNTJjNGJlYmNlZjI3ZWVkNmRiMGRjOTFiZTQ4MTE3OWQ3MTE2MGM1YTJkZGIyZmU0OTdhMDU0ODQ4NDBiMDRjY2U0ODk4MDA1N2Q3NzBmYmJkMGQ1ZjNkNWM2MzNiNTU0NzA2MTdhZDJjYWI1NzY3MTg4MjgzMzEwMzM3ODI1YzRiMGVhZmUxM2I1YjExMjkzZGVjMjMwZGFkNDNiMjIwODg1MTA1NzY3OTM4YzdlYzQ2MDBmZTA2M2Y5OGFhMTRiYzZhZmI4ODZmYzg3NGMxMDU0Njc0OWRhMjk1ZjU3MWU2OTYzMDViZDkxNjU0ODZlMjlmNDNmNTIiOjEyODoiOWFhMGNkYWQ1Njg2Y2E1MTVjZDU4YWVkOTQ5MzhlZjQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmRlMTg4NzQ0NzBjMDlkYjY4M2NmNDVjZDc1MmJkZmE4YmYzM2U3OTY3MjIwYjFhNjlmNDFmMmEwMmRhMWQ4MCI6IiI6ImFmMzBlYjJkMGEwYzJhNTBlYTQxM2YzMjg1YWE4OGQ0IjoiMjI4ODliODY4ZDhjY2M5ZjQ4ODQwNjgxM2NhZWQxOTliMjMwOTFkZGQ3OTZjODYzMmY1NjRlN2NmNWEzOWRmYjcyNTI2NmE5MzFmZWM5NTg2NTliNmZjNWI2YjkzNDNiODIxN2VkYjBhY2IwMTBhZmM5NDE2NjAxMTU1MjYyYjU3YmQzOThkNjJmNTU1OTUzZjBlMTU5NThlMTlhZTAwNGZiYzljYjI1ZTAyNjlhOWVhYTM4YTQ2MzVhMjdiZmE3MTlmYjI0OWZhNDkzMzc3OTZiY2Y1ZjQxNmJiYTg3ZmJmM2IxOWYwZDhjMTEyOTBjMjVjYTUwYmJkYzgyMmYwMSI6MTIwOiI2NDZiYmM5YjE0NjgxYWY2NWIwZDFjNGM5ZjFkMGQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWExYmI5MTIyZTc2MmVjZDdmZjg2MWExZDY1ZTUyNjA3ZDk4ZTdhZTViZDFjM2E5NDRlNDQzNzEwZjNiMDU5OSI6IiI6IjMyZjk5ZWE0Y2JmNTJjMjcwMWMyMjUyZTVlNmM4NjNkIjoiOTFiN2E3MGMzYTA2YzFmN2YyZWE1ODRhY2I1ZGQ3NjE3N2JhMDczMjNjOTRmMmU4ZjdjYmU5M2ZjMGJiN2MzODljM2M4OGUxNmFhNTMxNzRmMGZjMzczYmM3NzhhNmNjZjkxYmY2MWI2ZTkyYzI5NjlkMzQ0MWViMTdhMGE4MzVkMzBkY2Y4ODI0NzJhNmQzY2IwMzY1MzNiMDRkNzlmMDVlYmZhYWRmMjIxYWUxYzE0YWYzZjAyZmE0MTg2N2FjZmRmYTM1ZjgxZThhOWQxMWQ0MmI5YTYzMjg4Yzc1OTA2M2MwYzMwNDBjM2U2ZWU2OWNmN2M3NWY5YzMzZmVhMSI6MTIwOiJhOGUyOWUwODYyM2EzZWZkYmJlOGIxMTFkZTMwYTQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2JmYWQxZThmOTg1MDU3N2Y5YmEzZjI5MGU5YTVlOTFiNDk0YzJkOTk1MzQyMjAzNjJlMTcxYTc1NDMxNzdhYyI6IiI6Ijg0MTA4ODZiNzBjNTdkN2RlZDg1OTY0NDNiZDFiMTU3IjoiY2E4MDFjODM1OTY3OTU1MTVlYTkzMWVkYmEwMGUwNmUzMzJiZjg0MjQ2YjcwMzZlMTBiMzE3ZTJkMDlhNTFiMjk4MWZjYjY2NGVlM2JmNDE4MGJiMGIxMmVkMWNkYTIyMWFiYzY3OTBiMjdjMjY5MTRmNWVmOWNlYTk1MzZlMjQ1M2NkNWIyNDdjYjA1NGUyOTVjMjY4N2I3MjVhOTdjYmM0ODRiOGViODZjNmNlZWUwM2JkMDdhNTRhOTMwMWEzYWMwZGRiMjNhZWNiODI1YTIzODI1MmU3NTc1MzI5MDU4YjQwZTc1NTc1YTdmMTY0MzllZGY1YmUxNjNjZTVmNSI6MTIwOiJlMzY0NWRiMGM2MDBkYmE1MjA0NGVmY2VjZmMzMzEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjVkZWJkZjJmMjE5MWE2Y2Q4ZGU4YWQ0ZDVkNGQwZDhmNzMxZjY3NzQ0ZTI1NDVkZjZiMmE3Y2JhODljMWVlMCI6IiI6ImZkYWIyZWU1NDdkZDhiNmY1YTRlYTJkZDE5Njk3YjNlIjoiZDJiMGEwNDM4ZWUwZjE0NWFlYzlhN2NhNDUyYjc4OGVjYjQ3MzE1MmI3OGZiNzVmNmFjZTcyMWFmYzdiMGFlMTk0MjA0OWI3OTBmM2E1YjYyMjFhODc2MDI5NTY1OTc1NmQzNTM0N2NjMDQwMjliZTAzNDU5ZjNlMjNhNzEyMDliNGUwYmJlMTNhMjUzYTg4OGM4M2RiMjMzNzZkM2E2ZDlhNTM5ZjdjOWZhNGExMmRjNjQyOTdlN2M5M2RmYTBhYjUzZWY3NmI2ZTFkOTViZjZmM2Q1ZTZlZThmMDg2NjJmYzAzZWM5ZDQwZWZmMGE0M2YyM2FjMzEzNjcxYmZkOSI6MTEyOiJjMjVmYzE1N2MzZjI0NzQ4ODVlMmVlYTQ4YWVhIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDk2YWU4MTAzODA0NjBkNDBjZDJmZGFlOGMwNzM5ZjE2Yjg3MjA1Y2M3ZjU3ZGIwYTcxYTQ3M2ViMzYxZDU3MCI6IiI6Ijc3MjMzZGU5NmY1ZTE3NDQzMzc3NzgyMTJiNDExYmQ1IjoiODVmNWI1NGI0YzRhZjVjODA4MTIwYmQyOGQ5OGU0NGU5NmY0MTI2NjIzZTU3Njg0OTU3ZTlmYzRmZDFhMmQwNTgzOTQwYjhmYzgzMTRhMjQ5MzI1NDc2ZThkMDUyNDc4MzFiMDQ3MDk1ODBhZTcxNGU4MTg3Y2QzOGY5NTU5NDE5ZTE0YzlmYzRmOGM0NTRlYzE5MWI4ZWYyYTM2MTA5ODhmZTMzMzlkMGRjNmI3MmY1OTc4ZjllZmY5ZDU5NmRmYWJmMjcwNTZlM2E5MDhjNjQ5NzI2NzQ2MTM4NmU4NjBmNmI5ZDY1NTI2Mjk0YmNiOTI5MDhiNTY2MWIwNmI1YSI6MTEyOiI0ZWQ5MWFmNjM0MGU3MGIwYzJiOTRhYjZmODJlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImFjYTE4ODE4M2I0NjEzOWNjN2NmZmM4MmE2YWFhZWIyZmQ3M2NlY2FkMTRlNzVjNjYzYmQ2MmRhZjFlYzcxMWQiOiIiOiI3YmJmN2ZiNTVlYjcwY2NlOTRjYzZhMmI2N2RlNTViYSI6IjAxNWNmYmE5MGYwNjk1NDVmZWQ2MGYzMTk5MmZmM2QzYzM1OTJlYjkxZTdhNTNkZjU5NzhkZWQ2NDI5MTk1NGNiOTlhNTdkZTgyZDUzOThjZTc4MmI2OGQxNGFjMDRhOGI0MjUzOTViZDA3NmVhZDU5ZWI0NDU3MjFiZGIyZjQ1ZTE5ZmEwODkxMTc4MDBjYmJhYzdiODMxM2ZiMTY1Y2NiMTEyMmFjYjY1NGUxMjQyZGM3ZmU2ODg1ZWExY2JiNzI4MWIxMjcwY2ZhMTU0OWNkZmU5YjQ3Y2FmNDdiNGFjMzgwN2U1NjJlNDhjMDY2NTY2ZjVlNjA2YjUwMjNiNDciOjExMjoiM2JjYjVjMmE0MjYxZDc1YmZhMTA2ZmIyNWVlMSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhjZDY4MTVmNmVjMTVmMDNiN2E1M2YxNTllODc3YTU5ODFlMGFiN2Y2ZTZjMjYxZGRkZTRiNDdjYmIyZjIzNjYiOiIiOiJjNDMxYzA3ZDlhZGY1ZjYxMjA0YTAxNzI1OWNkZGQ3NSI6IjRlMWE4MzU0MDJiZGU0ZjUyMjdlNjRiNDZhMWY4ZDBmMjNhOTQzNGUxODkzNzdmY2RmMWI5NjIxYmExOTg3ZWI4NmE3ZjNiOTdlZDBiYWJmZDY3NGU3NGM1NjA0YTAzZGQwMTZkNzEwMDBhNzJiYmJkMDBhN2Y3ZmU1NmFkMGZjYjM2YTNlMjRkZDBmZGI2M2JkNjZkNGRiNDE1ZjM1MDEyNDE2ZWQ1OTk3OTZjYTNmNjc4ZGY3ZWI1YTFiMTdmNzVhYmIzNDhkZGQzYjM2NjM2OWE3YjM2MmM5NDg4YWVkYWI4MzZiNjFmOWExNThmMGIxMjljOGNhMGE1M2E4MWUiOjEwNDoiMGU0NjM4MDZmZjM0ZTIwNmY3MDNkZDk2YjMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGYwYTcyYWJjZGExMDRhYTdmYWU1MDFmOWEzYjY4NmQwMGQzZjZmZTk4NDczMWRiOGEyODY1YmZlYzU4NzA3MyI6IiI6ImFiOGFjZDA2Mzc3NWQxYjEzMTRmMTRlOTBmZGRkMWJlIjoiMDJjNmQ0MjZlN2YyMGI3MjVkOGNkZTBhNjM4MmU0OWIwMjliNTIxMjY4ODkwMTNlZjQ1MjUxZjI3YjJmYWRiOTVjYTRhOWEzYjE2YWQwNjk5OWVlY2E0YTQ3M2U4MTMwNDVkYjQ5NDJlOWI5ZmYyZTVhNWU0MjlkOWJhYzI5ODM3MjM0NGQxYjc4MWQ1ZmFjYWJmNmQ3Nzk2NDNmMzFhZGE2MTI0ZWI1MGFhZDU5OTA0NGI1NDI3OWVjOWIyNTcxNGFjOGEzYjlhZDI0ODdjZWM3ZjRiMWVlMjQ1ZDdiZTNkNDk2ZDZhZjFkNGNiZWUxYzgyMDEzMTI1NDFmMzA2NCI6MTA0OiIzZjBjY2MxMzQwOTFlMGMwNDI1ODg3YjFiOSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQxNzEzNWNhZDc0MjgwZTZmODU5N2RjNzkxNDMxYzk1Y2I4ZmE2M2JiZjcxOTdlM2FiMzdjNGIxZDZkOTQzOGEiOiIiOiIwZmUyMmQ5YmExZDBlMzI2NTZlM2E5ZjA3YTUxN2EyNyI6ImEwYjI3MTJlODFkMzI5ZDViMDc2YTRiZTJhZDY4MjNjZWU2ZGJkMTdkOWE1OTJkMDY1YmRlYmI5MmIxZmYzN2E1NmJmMmY1ZTUzNDFmMzljNTc0MjQ2Y2NkYTE5ZTVmMzVmZWRlNDljOWJhOTU4ZjM5MjBjYzU0NDBmYjQwNGZhYjc4NDY4ODRjYTBjMmEzYWY1YjUxZjRmZTk3YTEzOTU1NzEzMTljYzViNDBmOGFhYzk4NmQ3N2RlMjgwZGI4MjM0Mzk4Mzk4MjYzODMyNmVmMDAzZTBjMDEzYWYxOWMzNDY3Mjk3NWRjOTljY2MwODUzYTFhY2Y3YzYxN2Q5NjUiOjEwNDoiODg4YjgzNmM5MTExMDczOTI0YTliNDMwNjkiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwNDgyNDkxNGUzMmVhMGVmZDYxYmU2OTcyNTg2MDkzMzQ5YmQyY2MyY2YwY2ZmNDRiZTk0MzY4MmIyZGJmZjUiOiIiOiJiNmQ5MjdhNzE5MjkwMjlmNjc2NmJlNDI3NDZmN2NiMSI6IjcyODFjODFjNzUxNGY0YjE3Y2IxMjVjNDY0OTAwNmVmODk1OWE0MDBhMWU0ZDYwOWQyNzdlMzYzZTQzMzcyNWZhMzIzNDZhMTBiY2JkODI2YjZhZmM4MjIyMTU4OTIwZDBhMmRiMWU2ZmM5MTVlODEyMzFjMzRjMzk0MWVjZjNjNmY5NGZmZTIxMzYxOTBjYWUzZGMzOWE0Mjc3YWNiYzI0N2YzNjI5MWI1NjE0YTg0MzNiMWEwNzgwNDM0YTZjNTA1MjFiNzJlYzI1MTQ1YmJkM2IxOTI2NDcxNTVkNWRkOWRmOWU2Njc2MmQzOTU5MjYwMmVhOTliZjliZmZmNDkiOjk2OiJiNjA0NGM0ZDdmNTk0OTFmNjhiMmM2MWUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhhMTBlOWFiZTkzODk3MzhlMTJhNGJiNmY1NTNhZTgxZThiZDMyMGUwZGZiYzA1ZmJhZTIxMjhjMWZkZTdhMjMiOiIiOiI2ZGE0NDM1NGUxOThlM2JlYjU0NzkyNzE4YmVjYmNjMSI6IjE5OWQ3NTQ2MzAxMzViNjY5YmYyZWM1ODFkMzAyN2E1Njk0MTJhYjM5YTc4ZGQ5ZDQ4MmU4N2I3NzhlYzY1YzY0NzM2NTYyNjBjMjc4MjdlMDBlNTY2ZjFlMzcyOGZkN2JjMTg1M2EzOWQwMGU0Mzc1MmM2ZjYyYzZmOWI1NDJhMzAyZWVhNGZkMzE0NDczNjc0ZjY5MjZhODc4ZWMxZTRiNDc1ZDg4OTEyNmNlNjMxNzExNWFlYTc2NjBiODZhYjdmNzU5NTY5NTc4N2Y2OTU0OTAzZjcyMzYxYzkxNzUyMzYxNWE4NmQ2Y2U3MjRiZDRhMjBjOTI1Nzk4NGMwYzYiOjk2OiI1YzU2ODNlNTg3YmFmMmJkMzJkZTNkZjUiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQxNjRmZmRlNWRkNjg0YmVjYWY3M2U5NjY3ZTNlNmFjYjMxNjY4MmM0MWFlYTI0Nzg5OWUxMDRhNTRkZDdhN2YiOiIiOiIxZDM4OGUxOWU5ZDdhOTc1MGUyZmMxMTg3ZDRiMDc1YSI6ImYxNjZhNWI2ZjkxMjYxY2RhNTZmMWE1MzdmNDJmZmI4YWVkMTBhZjVlMDI0OGY4OTEwMDM0YjkyZGJjNThkMjU5NTNmMTQ5N2Y1NzFkMzFmYmY1ZWMzMGQ5MjIzNGI0NDAxNjE3MDM4NTFmMGU0MzUzMDQxODE0N2NlNjI3MGZiY2I1ZGIzM2FiODE5YmE4OTczMDUxOTA4NzA0YjZiZWE4YWFjYTA3MTg5NDdlNmFhODI0OThhNmUyNmE4MTM5ODE3ODNlZDliZjlkMDJlYjFlYTYwOTI3NTMwYzQ3MDBmZjIxZjAwMTc5MDAyYjI3OTAzZGQ0MTAzYmJjNWM2NDUiOjk2OiI1MmUxMDQ5NTEwNTc5OWVhZDk5MTU0N2IiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI4NTQxODhjMjhiMTVhZjRiOGU1MjhhYjI1YzA5NTBmYzEzODQ5NzZmMjQyNzE2YzkxYmRkZWVjMDZmMmZkZWEiOiIiOiIwNzVhZjljMzFmNTI1MmI4OTIwMDkyY2JkOTk5ZTdhMCI6ImU5NDUyZjcxMDkzODQzYTAyNWJiNWY2NTVlYjZhNGU4MzE2YWI1OTQ2NDg0YjExODE4ZjIyYjYyZjRkZjc1ZDU4OTFmYTMzOTc1MzcwOTNhMjYxZGM5YTc2NDhiNzQ3N2VhMWY1ZmM3NjE3MTZlMzAyNzYzMzY0YmNhYjc5OTI1OTVlZGQwZmMxYzdmN2FjNzE5Yzg3OWU2NjE2ZTIwMDc5NDhlYjg1MzAwNjVhNmNjY2Y3M2QwZmU0YTA1OTg4MTliNDcxYjA4NTZlNmQ5MGVhMGZjMGU1ZDM2YTMwZWU5MjViNmI4ZTVkYmY0MGU3N2YwMWVmZTc4MmMwYmI0ZjciOjY0OiI2ZmY4ZmQ4N2U1YTMxZWI2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmJmYzQ0NWFjMDM2NWFlNmMzYzM4MTVmZDE4YmJkMGM2MGVhMjI0ZjY2MjBkOWI2YWM0NDJhNTAwMjIxZjEwNCI6IiI6IjQzYzVmMzM2N2E5OTU1YWFlZTFhMGM0ZDRhMzMwMDU5IjoiZGIwYmFlOGNlN2M2NmE4YmEyZmVkZWMyMmYyMzYyMTJlOWE3YWQ3MmIzNzFkZTI4NWM3ZGM2ZDJmNmMyMmRmMGNlNDkyMGUwZjAzZjkxZWIxNjUzYzQ0OTAwNTBiOWYxOGEyYTA0NzExNTc5NmYwYWRjNDE3MDdkMWZmY2JmMTQ4YWVkNWM4MjAxM2Y1NTdlNmMyOGY0OTQzNGZjNGViMjAxMTJmNDM1NjZmMjEyYzQ4Y2VjOTg5NGFjNDA3NzJmY2Q5YjYxMWVlOTQ0NGRmN2I3M2UzNWI4YTM4NDI4Y2NiMDY0YzljNTA0OTFkMjUzNWUwYjUzOWY0MjRkYjgzZSI6NjQ6IjQ5YWFhODA2Y2IyZWVhZGQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3YjgyOGY5OWFhZjc1MWJmMjJkOTkzZWQ2ODJlNDg4NTk1NjE3YTYwN2VkNzRhYWFjYmI2YjYwNDU3NDUzMDgwIjoiIjoiZDQ4ZGFjMWQ4ZDc3ZTI0NTQyMGZlYjI1OTg4MTI0MTgiOiJmNTBmNzg1ZjRlN2M4NDhhNTVhNjE2ZWNmNGI2YjFlMWNhODVlMTZkZTcxMDBjN2U0MjczZDQxMWJkOTVjMTM4MGVlMTU3YmE1MDFiYTk2MTY5ODAxOTVmMzRlMzlmNDNlMzM1ZjMzMjUzMzQyZmViOGVkNjQ0NDM0ODNjNzIxYjg1MjQxYTAzMjBiM2NhYzgzMTA0ZGUyZGI0NzE4OGM2MWEzNzNmYmE1OTJlYTE2ZmVlZWZkZWUxZjJiYjQzOTI3Mzk2ZjU4MTUxNDE4NjcyZWJiNzRhZmZmNWMwMjk1MDNhMGQwYmU4MTQzMGU4MWVkNDQzZTA4Yjc0YzAzMTgzIjo2NDoiYTViNzFlY2Y4NDViMjVkMCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjdiNmRhMTFkNjlmY2EzZTRjOTA3NjI4ZDNlYjYzZDk1YzdlNTAyZmM5MDEzNzJmZDA5N2UwNjRlNzA4MzE0MzIiOiIiOiI2ZmUyMTQ4ZjI1MGVhMTc4ZDRjOGNhODQyM2VhZDg3ZCI6ImE4MDk3YmI3NGRlZDc3NmY1NzhlYjc1ODhmNWVmODkxNWRiOWJmYTcyNjJhZjcwMGM4ZTc2ZWUxMTRlMDc1NTdiNjc4NmRkNWE2MGE2NmIyNzAzZTdjOWRlNWQ2YjQyYWNhOTI1NjhhZWM1ZDFlY2MyOThkYmQwZWRiMTUwYjhjYzEzYzlhNzg2OThmNzY3NGNhYTk0ZGE2Y2FjZDFmM2VmNGNhNDIzOGM1OTgzMGVhNzI1YWIzYTYyODRlMjg5NjZjOGMzMmQ5YmNjZmIwY2ZkNjU4M2E1Y2EzMDlkZWJlODY1NDlhNmYzMTdkMTVjNWY5MjhjYmM3ZjQ3MzMxMGMiOjMyOiJlOWNkYmM1MiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM1YWU5MzI4YmU0OWU3NjEwNjQwODBmYzIxM2U1M2UzNzNmZDg2MzU5YTA5ZDAzNTVlMmQ0MzhkOWI4ZTY4ZjEiOiIiOiJhN2UzZjg2NjBmZjkyNWQ1Yzg4YzVhY2VmZmJkNzAyNiI6IjJkZGRkYmE3YTU2Y2M4MDhhZWM0NjAyZjA5YWU5YmQ3ODg4NzgyN2JmMDMxNWQ4ZGJlMTY4MjE2MDZlZjlkMTE3NzQ2ZGQxMzhiZjFmMjM1NjVkMWFiOGY0Y2VlMzZkNTNmZTM3MzA2MzJjNWRmOWYxMjEwOWIxNmVkYmVhZTI4NWJiNDlkZmRkMTU1ZjVkYzk3YjMxOWE4NTM2MmQ1M2NjODY4MTdiN2MxYzMxZTVlODdjOWYzNzQyMmYxMzNkMDBkZDA3NzZiZDkyYWIwNWNlNjg2MDU3M2NkOTExNjQ1Y2ZlM2ZiZTUxNWU4NWY3NDQ4OTlhNDQ3ZmU0NDM2NTMiOjMyOiJlMzVkYmFjOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU0ZjhjYTEzYmE4NmM2NThjYzdmNDJkNGYwMjk0MjIyMDllZmJkMTAxYmMxMGExZGY4MWE0MmNmYjNhMGY3OWYiOiIiOiIxYTM2MmZhMGU0MDU0YmExMWU0YjA2ZDU5YzhiYzljZiI6ImU3YWQ1Yzc1YWExMzY1OWY4Y2U0YjE2NTBjNDYzODI2NDVlYzY3NDE4MTk5Yjg0ZWE0NDViOGNlZWY2MTllZjNmYmRlNTllZDNkMzEzYzQ1OWUzNmZjZjg3ZDI2ZWYyYjQ1MzQwOWIzMmYxMDg2OTM0YzMwNzJjMWVmMGFhYzgzNzYyZDI4YjExOTNiOWFmZmYyYzA4M2NlNDMwMGI3NjhiMGFlMjNmZjlkM2RjZjY1YmMxNjkzZjEzNTBkYTY1MTgwNjIwYWFiMjA1YWNlYWNmYzY4M2M4YmU1M2EzMzJlMmQwMzM3YTc1MThkMmE1MjA0ZjljOGQ3MzI1YTQ3OTkiOjMyOiJlN2EzN2YxNSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMDA1MGEyMWNhMWU3MmNkMDkyNGJlMzFiOTQzYzYwODU0YmU2NzQ0NTc3ZGUzZGQ5ZDFmNGZhZGE0YTE5ZWE2IjoiNjkzZmZkM2Q5MjI5NDg1N2E5OWM3MDJhMDc5OWVlY2EyOGFiMDY2ZGQ5MDkxN2I5ZWE1ZWY4ZjY1NDdmMWQ5MGIxMDZjYmVjOGVmMmMyMmFmOWY4ZWZhNmM2NTJmMmY5N2MyYmFmMzNhZjE0ZmU5ZGVmMjMwZDQ5NTI0YmQ2NTkwOWMzZGYxNDkwZjYzN2Y5OWU3ODhkY2MwNDJiNDBlMDBiZDUyNGM5MWUyNDI3ZWY5OTFiZjc3ZTdiMmY3NzBjZGE2ZTkwMDc2YzVkYWM0Y2FjN2VlMzk1OGI1M2ZmOGNlODQ2YzNhOTYyODFmNTNjMmM1MmY1ZjNlNTIzNTM2ZiI6IjJmYzFhZmMxMzk1ZDg0MDk5MTkyNDg3MDlmNDY4NDk2IjoiIjoxMjg6ImUzOWI2YTdmZDVhYzY3YTJhMWNjMjRkNWViOWQ5Yzc0IjoiY2ZjZDZiOWZmNzY0MTgyOWNiYWRlYWEyZTU2ZjFmMTUwYTA5OWVjY2YzZTM3OGZhNGRhNTk3OTRkY2M0NDkwYWE0ZjljNWRiMGFiMjQ1YmVjMzZhN2Q0NTU3YTU3MjAwOGU0MmYwM2JjMWJhZmYzYzk0NmYyM2Y1NGE0ZGM5ODI4ZjEwNmNmNDI2NGU0YWI0MDE2NTgzOWQxMDg1ZTc3OTViMWFlMDk1MGYwZWU0YTA4ZTQ2YWRhNTAxYjZiNTFkZWUwZTUxODEyOWM5NDI2ZTViZDQ0YzY2Njc0YTlmOTljZmU2NzZmMDAyY2ZkMzQ0YzViYmQyMmQzZDkxZTYwMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYxMDk2NWE2NjI1NWYwYzM1MTVhZjQ5N2NjYmIyNTdhMDlmMjJlYzJkNTdjNWVkYWUzMjJhM2U2ZDJkMTg4ZWYiOiI5MTU5ODY5MGVkZjJkZThiMjdmOWJjNzQ2MWE4NGU4MDgxMWNlZTU0NGYwNTQyOTIzODk4MzI4Y2YxNTc1OTAyNTFmMDM0MmNiODFkMzU5YjVkY2NjNTM5MWExMjMyMGQxNDQ0YzI2ZjI0MTc4OTc3ZGQ2NzA1YzJiMzY1ZGMxZWNlMDE1MmM0MmUyZjBlZTMxNjJjZjg4NmVmNTUyOWY0ZjE2YTc3ZjNiZGQyYWVjY2Q0MDViNTlhZGRmMDk4NTIxZDBkMzhjYzI1ZjE5OTFlMTFiZTdlY2YyNGNhZWRiNDhhMmEyODZkMmU1NjBhMzhmYTkwMDFjNWEyMjhjNGQxIjoiYzU3MWNlMGU5MTFkZTVkODgzZGM0YTA3ODc0ODMyMzUiOiIiOjEyODoiNmQ5ZDNhNWRiYzhkY2UzODVmMDkyZmZmMTRiZmZmZGEiOiIyODY3OTk2ZTM4OWUwOWVjMGRhOTRkNDJlNzdiMWU0MzZiNTAwNjViMDljYTRhZGYxY2QwMzI0MDQ0NGVlNjk5ZGJiN2IzZmMwODFhMTg2OWNhNjA3ZDc3ZDVmZjk3NTRmYzNjOTk3ZmYwYTRlZTE3NTQzYTJiYTc3ODg2Yjg4YTcxMjhiY2M1MWQzNDUwZGY1OGZmM2EyNjY3MWIwMmMxZDIxM2RmNmFkYjZmN2U4NTMwODBlYjQ2YjUwNDUxN2NiYWVhMTYyNzEwYTliYmMyZGE4YjU1MmViNmIwZTBjYjk4ZTQ0ZmNhYjBhMTU3MzEyYmU2Nzk3NDY3OGQxNDNlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDQzN2VlN2QxNmQ4YzNjYTFhYTAxZTIwYjY2NzQ5ZWZhOTAxNjE0ZDRiYjRiZWU3ODZhZDVhNWYxYmZkZTJlNiI6ImZmODA3MjdhMzQ4NWNkYmM3ZmFiNGVlOWZhZGZkYzYyMWM1MzhlMjA1NTcwNjYyOTA0NjA3OGYxYWEzZmI2ODdmYzcyOGQzYTdmZmE1MmFlNDU3YjdiNTY0OTYxM2VhYjdiYWZhNDY0YmI0MzUzMTRjNDllNTkwMDc1MGY3YWQzOWNhOWI3NWRmNmIyZWFhNzU1NDM5ZTEwMWY2N2I3YWU0Y2Q4MGRjNGE5ZGVhMDAyNzA0ODI1M2YyZDBhNjAxNDA1NmNhNjliOGM4NTYwNWIwMGNmNzVmYTc2MzRhMGRkZjQ2NDI3MGE4Yzc5Y2UxYTEzMjRjNGE0YzUxM2IyNGIiOiIyNzUzOTMyNzY3NDViYzQzYmFlNGFmMWU1ZDQzYTMxZSI6IiI6MTI4OiJhODJmZjFlODdkMjZlNGQ2ZTQxN2I2MGZiMmQzY2UyMyI6Ijg4Zjk5NGQyNzZlZDIwYmUzOTMyZDE2ZjU1MWM0YjdlMmVkODA0MTFmMmU3MmNlMDk4ZmEwYjcwYzIyMTU3YTU5ZWRhYjMwNjQ5ZmVjNDQ3ZGQ2M2YwYzg3ZGNlY2E3MjM4ZWYwZDk1NjFiNTg0ODliYTdiZDg2ZjI4OTI3NDMwOTlmNDBhZjYzYzQzMmY3OGFjMGFkMGI1YzJiZTQ3YjllMzA0NWU3MjM3YjA5NmVlNDAwZjQzMGFmNjNhNmYzMDlkZTc4NWNhZjE5MGYzZjRhYWJiZTc5ZjcyN2E3NDE1OTBkZTU0MmJkMzQzZGY2OGQxM2RiNTVhNWY4YmFiNDEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTRlYzAzN2NlNTYzZGFkZWU0MzVjZmNiMmJmMDkwZjFmN2NjYzdkMWI1YjRmYWIyZjFiNzM4MzQ4ZjhlZDJmIjoiNjRlYjhhNGJkYTk4MDRjMDliMDRjZmNkODkwOTQ5MjhjMjE0ODA5MDhiODFlZTE5ZDZjMjljMmEzNjMxYjFhNWJkYzhlN2Y4ZWE1NmY3YjhiOGUxNGE1MjA4Mjk2MDI2Nzg1Y2FjM2E2YWZhNTRiZThhZjRkNWZhZWRjZDEyYjY2MjFiZGUwZjhlYzVhMjYzNWZlNzJhODk0NjhjYTc3MDRjNzNhYTQwY2QyYmE5N2FlZjA4ODg2YjI3YTY5NGQzMzliMDBlN2QxMmEzMTMwODY3MmY4N2MwNmE3Mzg4YTE0MzJmODY5ZWI0Y2MxZGE4NjQxNDBiMWIzMzkzMTkyNSI6IjQ3ZjUyNjRmN2E1YjY1YjY3MTg5MmEwNWZhNTU2ZjYzIjoiIjoxMjA6IjY2MDQ2MmI0MDg4ZjY2MjhhNjMwZjJlNDE3MGIyMSI6IjRhMzEwZTAzNTM2MWY5OGI4YzU0ZmI0Y2VmNzBiMWE5YzkxMDU1MmVjZTA1NmNhOGZkYWI1NGM1MjMwOGVjMGFkN2ZlOWRkMWRhZTkyYmFkYWI1MDEwNTc3ZGU1MjIwODg3NjhmYTY0NjZmYmNjY2UyMmUxNGM1MWNhNzk4NmM0MDYzZDBmMDZiZjU3OGRhYjE2YTkxODU2NzEzMTk4YTcxMzgzOTVjNDljNzhiNjMxNGI1N2FiNzJmZDA3OTAyOGM4ZGMzNTE5NTJkOTBiMDRhN2NkMmIyNDVkZjBjMDUyMjQ0N2NkYjdkMzMyOWZkOTQyNWZlNWNiNDBhOGU3YzkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNmUxYWRhNjI4Y2E3NmViOTgzMmNjNmI1ZWZjNWM5ZDI2ODZiYjU4NzM2NmE2ZGUyZDczNDIzM2ZhOTUyNzllIjoiYTBhYzczOGUwZmIzNTI0NmI4NGE2ZmJlMzE5ZjgyNzAzOTUxNWRmMjVkMGMwZmM2ZGU3YzA0ODI1M2FlNjNkM2M1NjFlNDRhMTI2NzJmZmVhZTFjYjkyNTYxMGI0ODJhYTQyMmJiZWUwZTE3ODRmYzY5YmFhYzNhOTdkNjlmNTFlNmQyYTE3OTU3YjQ0YjMxODYyNGVhN2VjNjgwYTU1OWY0ZDNmMjc2MWQwOWJlZTY2ZWZiM2EzMTJhZTZiM2VjYjY3M2U3NTZiMmEwZjY1NDY3MWU4MjUwMGU3YWNlOTFmMmJlMmE3NGJjM2JjMWVjMWE0YjY4NzdhNTNjMjdjOCI6IjVhMTAwYjQ1MWUzYTYzYTNlNmQ0YjhhOWU1OWM2YmNlIjoiIjoxMjA6Ijg4ZGY5YTFlYTU0ZTViZDJlZjI0ZGE2ODgwYjc5ZCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZDVjMWU5MGQ3ODIxMzE1NWM1MTc2N2M1MmMyOTBiM2Q2NTdkYjg0MTRlZTBhNzYwNGEyZWM3YjQ4MTA1NjY3IjoiOGU5ODc2OTNkYTBmYjc3YjZkMTI4MmVlYmQzYTAzZTA1ZDk5NTVmZjgxOTI5YjFhMmM3MjE1NzQ4NjJhMDY3ZGRlZTM5MmM3ZWNlNTJjYTE0NTFmM2U2ZTMyMWQ3MjA4ODgyZDk3YjQxNDlhZjZkNzhkNjVjMDU0ZTFiZmNkZmE2MmJkMjIwMmRlMzJkZWE4MzYzZjhkN2YwNDE4OTFjZTI4MTg0MGYzY2Q5MDZhYjQ2Y2E3NDhlNWIzYjExODkwYjQwMTRiZjAyNzFjOTQyN2M4NzQwOTc3ODJkMWMxM2RiYjQwZTc4ZmM4Mjc2ZmMxMzRmM2MyOTkyM2E0M2EwMSI6IjRlMDIyZDhkODZlZmJkMzQ3ZThjYmFiN2U5Nzk3NzFmIjoiIjoxMjA6ImU3ZGY3OWFmMGFlZjAxMTI5OWMzYjg4MmUzYTQ1YiI6IjNiMjA0NzNkOWI1MDE4ZDA4OWU3Zjc0ZDNmZWYyMmVjMjgwNTk0OGE5ZTA3Njg5ODMxOTczYzcwNGE2ZDhkYjRkMDkwYWY4OGQ2OTZhYjhjM2FhZTk3NDBhMmJiZDdmMDNlMGIxOGIyYjU5MWU1OWMzMzVjMTA0M2EyNTc4YTg5YjFhOWYyMGZkMGRkNTNmMTJlMDBlOWJmZGIyN2RlOGNhYWM3NzJiYmZjNGRlOWU0YTI1NWE1ZDFiMDRlNTk2MjVhODdiODI3OWJhYmU2MTNkZWY1OGQ4OTBkNTUwMmFiZjJmNzA5YWFiNjI1ZGNjMjBjNTg3NzI4MzJjN2JiYWIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZTNkZmMwNzAwM2JiNmEyZDgyYmQ1MjYzYjI4MzJmNDdkYjRlNzMyNzkyNjZjN2E5ZWEyMWY0ZjE4ZWRkZjgzIjoiYTk2MGRhMjIyYWY5ZDRkYTU3OTdlNjk1N2Q1OWIwMGY2ZDM4OTM1OTljNzBlOTVjMDk4NGI1NmViMzMyOWIxOTE3MDNjMjUzMmYzMjg4YjE1ZWJmNjU1YjliNWVlNDYxNzQ4NGU1YWM5YzM5YmIwNjczMWQwM2ViZTRmZWY5NDk1ZDAwM2IwZWQ2OTRjZjU0MGI0ZGM3NTlkMzI2MjllNTU1MTI2ODBiYWRkODEyMzRiZDcxZmZkNTVmY2I1ZTZhODUwMzFjMWRjMzFlZTFlZDE5ODkzOTU4MmQ4MzM2YzkwNTcxN2NjODcxMDFkY2ZjZjlkODMzZmFjODE1YzhlYSI6IjdjMGY0OWZiNTRmNWU2OGM4NGU4MWFkZDAwOTI4NGU2IjoiIjoxMTI6ImIyZWMwZjNkYTAyYTllYjMxMzJmYjRlYmUzYjgiOiJhNDBiNmY3MGYwNTcyZmUwYmM3MGQ4MzM2OGU3YzE1NGY3ZGJkNTAxZjUyNTAxNjMwYTJlNTIzZDE4ZTIxNmUwNzM2ODUyMWY2MDQwZDgwNjI5OTM5NzcyMmI5OWJjZjdmODVkMzZiOGJlZDkzNGI0OWFhMWZhNzZkMzg3ODNlNmEyZTM5MmQ2ZDA3ODZkNDY3ZjdiYzg5NGE3MzllY2Y5NGYwZmU4ODRhOWMzOTExNTRmODMyNmJmMzFlYTUyNDJhMThhYTI2M2QwNGRhNGI2M2IxMWRlMjNiNDJkM2UxMGEyZDU0NjBjYjMyNzAwY2RmNTBhMGQ4OTE2NWJhMjJhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDEwM2IxZGRmZjg3YTUwOGEyMTljODA4YTA0YWQ0NzUwNjY4Njg4ZjRjMmVlNzViOTJkMjhkNzBiOThhMmM5NCI6ImEwMGExOTYxOTNmZjA3MDA2YjdkZjUyNDgyNGJkMDk3MWQ2M2Y0NDdhM2E3YmIxYjc1YzFlMmQxMTc4OTQ4MmMxMTVjZmY2NzdiNTQ5NDhkMzZkYzRkZTM0MjAwYmNlOTdiZTAxMDFkODhjZWUzOWIxNzc4NTdkZDVkYTNjYjBkMmY5ZDZlMTE1MGY3MmEzYmQ2NTVlMGJhY2UxZDI1YTY1N2JhOWE3ZjhkZmYwODJiNDQ2MDQzMjA3NWFmYjIwMTczZGEyMmI0OWJlZWI2YTAzMGQ3MmJhMDc4NjlmZjQzODlmYzFjMjhkODcwMThkN2MxYTk4MjljMjE5MzIxOTciOiI1Y2VhOTA2NzM3NTE4YzJjYjkwMTAxNmUzMDIwNjI3NiI6IiI6MTEyOiIzYTNhNzcxZGQ1ZjMxYzk3N2UxNTRlZjVjNzNhIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNkOGMyZjBjMzMwZDVkYjMxNmRhZTdhMTZiNTdkNjgxY2EwNTg4NjRmN2JkNjBmM2QwZGUxNzQ0NDIyODNmNzciOiJlMmE1YWQyOTVkMzUwMzE1MzViZjEzYzI5OTNiZDBiMjkyZThhOTQ2NWI5ZGFiNzM4ZTU5YmEwMzY3MDI0OGExZWNjOTJiMzhhNTViYWUzNDcyOTE2MjI3MWNjMTU3MmMzNWZjY2NiMjc0MTdiNDhkZmNiZmY4NTJhN2E4ODQ1Y2M4MjlhNDQ2MTA2MWI1NThhYzhiNTkzMGE1YzY0OTFmZmJhMDRhOWQwZGZmMjIwYjNjZDVlNGZjMmUwZjNkYjNiMmRkZDkwMzI4ZjJjYWQ4MTk1NzNhNzg1NjI5OTYyMGIwMmY1ZWUwMjY3ZjNiNTY5ODFhZmJmMWI3ZDllM2UxIjoiMzg3ZWU4YzFlN2YwNDdlOTRkMDZkMDMyMmVlYzAyZmMiOiIiOjExMjoiNjIzNTY4NTBkMTJiNTRlMzk4NzIzNTdjZmEwMyI6IjE3YjdmNmJkZmMxOTkzYzU2ZGQ5YmQ2NzRjYzI3NmE1NWE0NmZkZDlmZDVmZTQzNWI5ZTRiN2ViYzcwNTJhOWRjNzZhOTllNGU0M2FiYTdkNDg2NjAzMTg5YzkwZDEwYTIxYWQzNzIyYzg2YmY1YmM4NTZhMGY5MzBmZjViY2E2NWJlNzA4Yjc2YmI4YTI5MTA1ZGE2N2YzMWVlYmNlYzgxZjI4YWFmNTI2ZDJmOGYwZmVhYzM5M2EyNDk1OWRjZDYxMmUyYjkzYjQ0NjNmNjE5NTdkMmIzMDQ2YmNkZjg1NWUzNDY2MDFlNGM3NzYwYzBjYTYxOGVlN2JmNTUzODEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ZTE5ZTQwMDg3MmVlZDcyMWQ1NjAyMDJjZDc1N2QzZWI5OTcyOTQ5NmI2ZTNhNmQzOGRkOGFmZTEwNjYwNDVhIjoiM2ZiOWFiYzdhYmE2NTRkZmIxNzRlODg5OWMxN2RiMjIyZmZiYjM4N2I3MjYwZmM2ZjAxNWI1NGYxY2Q3NDI4NGM1MTZlMjFhYWUzYjcyMzM4ZTVlOGRjNjQzY2ZhZmNhMDY3OGY1YmRhM2E3NTM5ZjE2MTJkZGRiMDQzNjYwMzFiNWEzZWRhNTVmMzIzMmMxYjE3NmNjOWJlN2NjMDdlMGViY2E2NzRhMjcyMjI0OTI5YzQwMWEyNTMwZWZjNmQ0ZWVkMDA4N2I1NDRiMTJkMTcyYTAxYmM4MzQwZDljMmEyZWJjYjVhZjhiMDdkOTYwNzNhODc5ZmRhMTQwYzE5NiI6ImQyYjI3N2Y3OGU5OGYxZmExNmY5NzdjZTcyZWUyMmE3IjoiIjoxMDQ6IjRjODFjMDQ0MTAxZjQ1OGZkZmFjOWNhM2I5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQwNjUzOTM0YTE2ZmQzNmMyN2Q1NDQ4OGExODI5MzAyYjkzMWJlZDZlMjZjYTI2MDQ3MjQyYjg1YjUwYmZiNjEiOiJjMDIzNDdlMWFkZDkxNzhkODMwZDhiYWFhZDlhZWVlMzdlOTU4YmVkZjJjYzg0NmUyNTYxZmU4YzgzNDgxZDBhOGE4NTkxMWU3ZjFmNmU0NDRiMjhmMzBiZDk2YzEzYzM5MGU4MGY2MTZmZWI2ODQ0ZWU2ZmE0ODY1NDNhMmUzZjM4YzEzOGY0NWI0NDA1ZTNmYjMzMWI2NDY0ODIxOWFhZjFkNTc0YmU5NDhjY2ZjYTZhZmMxOGQxMjQ4OGRiMTljMzViMDU2MDFlNDdjMGFmNWQ0OWE5M2E1ZGQ0NDIwZjM4NTg1YzFlYjAzM2UxNzMzNzZmYTM5MGQzZjk0OGRmIjoiOTQ4ODZhMTg0NWFlYmJhNWVkNmI4NmY1ODBiZTQ3ZjkiOiIiOjEwNDoiNGJlMzRmZjQyMDg1ZWY0NDQzYzhiNjA0MmQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDBmMGNjYjg4YzdjZWM5NDk2ZjI2YTU5ZGRjNjdkYzU5ZWJlNDlhZTNkZDg5ZWYzYmUwMDg1OTg3MjdlMjE0YyI6Ijc4NDVlMTU1ZjRmMjgwMjEyOTFlN2M4MTRhMWFjZThmNDJiMjM5OTkwODMxYWE4Mjc1OGZjMWUzNzZjYWNlMGI2ZjY2OGY3ZjJmMjI0ZGVkZTFlZjViMWRmN2FlNzRiMmMwMTQ4MzcwMTA0NGFjYmJiNzJhOTIxNmVlYzZiN2VmMDE5MGYxMTRiM2M3M2M2OTg1YzQ2NTNmMTE2MDFjNzc0ZDEwYjdmOWRmMWYxZTFmM2ZmNGZhZmEyMGQ2NTI1ZWRiMzdkOWU1YWNmYWZlNmQzNDY4ZWUwNjhkNDA3ZmRiNTZkYzcxOGM5ODQyNTkyNjgzMTI1Mzk3OGQ3Mjc4NTQiOiJlNWNhODRiOTA3YWM3NjFhNWU2OGE5MDgwZGEwYTg4YSI6IiI6MTA0OiJjOGY3OGU0MTM5ZGQzZWFmMmJhZWY4YWFmYiI6IjBjYzNlZGU1MGIwZDNmYjlhZGExMTMwMGEzMjM5YTM4M2M5OGY5NjhhZDY1MjY2ZDU3YTE5NWJiMThkM2U1NjhmZTZjYWJiYTI1OGRhNGJlZTllOTIzYzdjODM4ZTA2ZGM4ODdhNmM0OWNjMTQ1M2VhNmEyMjdjNmE4M2U2NTFhODc0MmUwMzE2Y2FkNWVmYzkzNzM5MzkzZTM2MDM0NDZiNWM5MjBhMjA2ZGIxNDM0YWRiYjhlYmRlNGQxYTdhODY5OWM3ZjZjNjFiMmQ1N2M5NzA5YjU2NDMzODQyM2I0ZjUyNmQ2YzE1NzY0N2E2YzQ1ZGE5ZGQ1MjEwNjFmMDUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImUzNWRjZWExN2NiZjM5MTQ5MWFlNWJhNjA1NmQwZGQxM2IzNDgxODM0NzRkZDRiNjE0NzQyNzUxYmRlYmZjMzIiOiI1MjEzNTQyYmViMDQ0OTEwZDdmZGVlYzhiYjg5ZGU5M2YzNTA3NjBlNDkzMjg2ZWFlZjExNDA0ODUzODBkNDI5Zjc0YTQyNzljMTg0MmE1YzY0ZjNjYTMzODFjYjVkYmIwNjIxZGU0ODgyMWJkZWQ2NTBjYjU5NzAzZTBjYTg4ZjRlOWMzZDE1ODc1ZjlkYzg3ZDg1YmE3ZTRiYWU5OTg2ZWY4YzIwM2ZjZTZmMGNlNTJjMjhlM2E5M2JlZmI0Y2M0YmEzZDk2M2QyMjgzY2QzMGY5YmY2YWI5OWQ5MmYyZjRmM2FmZjBiMDIyZjE3NTFiODlkNDNlYTEwYmJiMjhhIjoiZmE1NDliMzNiNWE0M2Q4NWYwMTI5MjlhNDgxNjI5N2EiOiIiOjk2OiJhZmE2MWU4NDNjZWU2MTVjOTdkZTQyYTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NDRjNTBkZGMwYWMxZDkzNjRiMjEwMDMyODdkNmFlNjM2MGQxMmJiYjE3YTg1MzUxMzYyNDIwZWU0Y2E1ODhlIjoiM2EzYmY0Y2NhZjA1ZjdjMDJmNWUxNThkZDJjNWNiMDhjNmFlZDRiMWJhNDA0YTZkOGVmOWEwNzM3ZmUyZjM1MGIzZTIyMTg4ZmMzMzBlYTYzZTM1ZGY4MmY5OTZlM2NmOTRkMzMxYzQyNDZjZGIyNWJiMmM0MDk3NjJlMDVkZGMyMWYzMzdlZGVlNTFiNjRmMTc2NmFkMThmNTIwYjNmMzQ3MzViMjQyNzhkOWQ2NDdjNTMzYTc0M2UwYzFlOWM4MWU5ZGVlOTc1Y2RjNDdlODU4MjExM2ZkMjUwZWY1OTM1MzYwNWI2NGFjYjdjMDI1YTk3ODU0YzFhNWMwMzIzNyI6IjJmODUxMmJiN2UyMTRkYjc3NGEyMTdhNDYxNTEzOWUxIjoiIjo5NjoiZjFkYTFjZWJlMDBkODBlYjRlMDI1ZmViIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmFhZTFhYTA0N2EyMGVkMmQ2ZDgzMzZkOTIzODY0Y2VlOTQwNGY5MjQwMzFhZTMyN2ZiZmUyZDI5M2UxZDkzYyI6IjhlNWI2YjllNGU3ZDAxZGU5YTkxOWRkMzNjMGMxZWI5NGRjZmViZjI4ODQ3Yzc1NGM2MmMxYzAwNjQyZDllOTZmMTViNWQyOGFkMTAzZmY2OTY5YmU3NTBhYWRmZDAyZmMxNDY5MzU1NjJjODNlYzQ1OWE5MzJhMmZkNWZkYTMyZWI4NTFlNmNmZjMzMzM1YWJkNWMyNDM0YWU0ZjU1MjRkNmJjNzRhMzgwOTRjZWQzNjBmNDYwNmExYTE3MDk2ZmYwNjYwNDk1MmM4Y2E5NGE5YTZkYzRhMjUxZTEzYjBlMGM1NGJkOGE2ZGZmNWYzOTdhMWViMWNmMTg2ZmE1MTgiOiIzZGE5YWYzNTY3ZDcwNTUzY2EzYTk2MzZmMGIyNjQ3MCI6IiI6OTY6ImUxMDI2YjNkMTVkMjYxYjJmYjQ3NjMyZSI6IjU4YzUyZWE5ZjNiMTYyNTExMTYwZWVkMWE2OGI2ZjUyYjNjNGY1ODM0YWY3MjhkZTk3YTNkOWU0YmEzMzdiMjlhYWQxMjYzNjAwM2NmNWJlOWZmYmVhZTBmMzgzZjdjZjMyZjY0NWE4ZjZmYzVjZGMxY2RlOTFjNjI1YzY5YTkyYmM0MzRlZDY3MWU1MmEwMDQ0YTQ4ZjNmY2U1NWNhZTQ5YTdkMDY1YzJhNzI2MDNhN2VmZTU4YjVhN2IxOGFjNTAwZDFhNTE0MjBlODIwMzU3ZTdhNDM5YjFjMDIxOThlYmUzZDRlNjJkNTU3M2EzYWE1ZjQwOTAwYTIxZTNiNDEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYzZDY5MjA4Y2IwZDI3NDc0ZTlhMjMxY2Q0NmVhYzdjMTU3NGZmZjk1MGM0OGJiZDFiYTAzZmFkMTZmNTYzZGYiOiIwZDFmMDZlZWY1ZThmMmM4MWQxYTczYmIxZGNhOTNjMjJjZmI2ZTQwZTk5NDhiYzc1YjBkODQ4MzBmYjkyMTYzMzA0MjRmNTgwYjg5MDUwYzNmYjNmNjIwZWNhOGY5ZmQwOWZiODZkMmU4YjNhMDg2OWM2MDIyZDhhNzA1ZmMyODBkNjZmZDE2ZDNhYmE3Mzk1ZDZiZTRiZWQ0NDE0NWQ1MWQ0MmQ1NjI4NWYzNjc1NzI2ZDYyZDk0YzA4MTM2NGE2ZDQ0MDUxMWRlODNhNjEzYzU5OGIwMzA3OGUyZWM3NjQ4YzYzMDJkZWZiYmVhNjZhYWZkMzNlMWE0YjE2ODZjIjoiYjk1N2YwNTkyMWQyMWYyMTkyZjU4Nzc2OGRjMTJiNGYiOiIiOjY0OiIzMjIzNzRmYmIxOTJhYmJjIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2IyY2RlYjE3ZmE2YmNiMDA2YzdmYzYwODU4YTEyYTQxMTgwNDQ2NDQ1OGRiMzUxOTU3ZThjYWY0MmYxZWU2YyI6IjI5NjUwNDEzMTM1NGIyYzE5Mjg5ODJmMTJkNDA4YmEyMzc3ZjJkNGJiZTg3ZTRjNjlmOTJhMTViZjYwMDM5MTBhNDNiZGE2Yzg5MjlkZjY2YjNhYjFkMjAyYTUyNThjYWQxOTlmMzJmMzZjYzMwZDJkYzA2MTk5YzJhNTJmN2NjYWRhZDFmY2U1MDEyM2M1Zjg0MzRkZWM1N2NjNjBjYzc4MDI2M2Q3YWFjZThmNTljYzhhNmM1NGJkZGJhZGVkM2FkYjEyYWUyZWUwYmFjZjZhOGRhNjM1ZmY4NWI1MWE0ZThhMWIzZGM0MDQ4NjNiOTAwNTlkZTRhZDBmMTU4ZGQiOiIzMWJkN2M5NzFhNmQzMzBiNTY2NTY3YWIxOTU5MDU0NSI6IiI6NjQ6ImVmYzVhMWFjZjQzM2FhYTMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmOTQxNzA3OTBmYWRhYjMyNDBkZjU2ODE5N2Y5ZDZmNjg1NWFmYWVkOGQwN2VjZWVhYTIzODAxMjE4NzI1MjlmIjoiZWQyMzFiNzhkYjA4MmY2NTJiYzYzMTBjMzk2OTkzYjUyZGU4MDRhODI0NjRmYTNmYWM2MDJhMTI4NjUzNWY1OWM2N2ZjMmIxYjQyMGM3MzIxZWI0MmI5NzFlZGRlMjRjZDRjYjllNzVjODQzZjJhYzZmYjhlY2RhZDYxMmQyZTUwNDljZjM5MzI3YWE3YThkNDNlYzgyMTE2MWMzODVmM2ZkYzkyMjg0YTc2NGE1ZDFjYmFlODg2ZjA3ZjkzMDE3ZjgzYTEwNWJiN2MzY2M0ZmM1MWUyNzgxNTE2YTI0NzFiNjVjOTQwZGRhZTZiNTUwYWQzN2IzNWY1M2Q3Y2M2NCI6IjJmOWMwNjQ3YTRhZjdmNjFjZWQ0NWYyOGQ0NWM0M2YxIjoiIjo2NDoiYWI3NDg3N2EwYjIyM2UxYyI6IjFjYjVlZDBjMTBjZWU5OGZmOGVjZmE1YTFiNjU5MjM5MWJiZDlmOWIxZGMxZmYzNTFlMGFmMjM5MjBkNTQ2YjVlMjdkNjJiOTRkYWFiZDMyZjdmOTZhMjYzMmRjOWZkN2MxOWJmNTVmM2I5YjdjZDQ5MmU3NmY0ZDZiMGY1YjQzN2MxNTVjMTRhNzVlNjViZmM0MTIwYmVmMTg2ZGEwNWUwNmEyZmQzNjk2ZjIxMDI5MmVlNDIyZGRiY2U2ZTYzZDk5ZWU3NjZiNjgzNjMxMzk0Mzg3MzNjNWU1NjcxNzdmNzJlNTJlZjJkZjZhN2RkMzNmYzAzNzZkMTJlYzMwMDUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc5N2MwMDkxZmY4Nzg3ZmU3Y2QwNDI3YzAyOTIyNjIwZTdmNmZiNzFjNTJkZGNjMDNhOWYyNWM4OWJhMzM0OTAiOiIyZDNlZmM4OTAwMzE1YzM2OTFhOGUzYzlkZTMzMTlkNGRlYWY1MzhmY2Y0MWFhMGUyOTViODYxZDBhYzg1YmFmNTZkMTQ5YTY0Mzc3NDdkZDY5NzZmNDQwMTZlMDEyYjg4ZGU1NDJmYjhlNWI5ZTRhZDEwYzE5ZGVlYzRiN2MwYjY5YmMxYjJlMzNkNDRhOTgxZGVkNjYxMjdkZWEzNTRiMDcyMDEwYjhkYzI0Yjg1ZWQyZmZlZWEzYjljMGU5MzE2MTlkYmJmMjI2Nzc2OTFmMGQ1NGZjMDNlYWExNjJlMGFiMGQ3NjBhZDQxMDIxZjY3MDU3YzBkNmFjMTljYThmIjoiNjlkODFjNzMwMDhhNjgyN2E2OTJmYTYzNmZiYWI4YmIiOiIiOjMyOiJiZTJkZGE1YyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwY2UxYWZiNTUwMDQ4OWI5ZWRiYWQ5ODdmNDAwOTUwOWM4NDdiM2U1NWNkZjBjNzY0ZWYyZmIwODVlM2QwMzMiOiI5ODQ4MmI1NGVkY2UyYmFjMWNkNjRkNDQ5MTdkY2YxMTdlYmZiZmUyNmFkMTdhOWIyNjM0NDcwMjgzMDRmMWNmNWE2OTU1OWMwNWI1ZDgzMzQyMGY0ZmRkYjZlMzA4Mjc3ZDAxZWI0YjMyMzVmMWM0YjQ3ZDMzZDM4OTkzMjViNTVlN2JlMTlkNDMxODdhNWIxYjEzNTRjZTAyYTUyOWIzZGYxYzEzYjQ4ODM5MDJhZTlmYzU2NTA3OWRlZTgyNWU3MDVmM2U1ODAzNzFlNGZkODZjM2IwZDMxYmFlOThhZGI1Mjk5MDFmMzQ2Y2EwNzEyNzMxNDE1MmI0MzcwZWRkIjoiZTExOWUxNjY0NzFlY2Y0NGJjM2EwNzA2Mzk2MTk5MzEiOiIiOjMyOiJiMmY1NGIzYSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI5MjY0YTkwZjExNGE4MDBjMGZjMzI0N2IzYmRhMDA5ODFhMTJhOGY4NWNmM2ExOWVhNGM3ZmZkZDAwNWY0YmIiOiI1ODdjOGU1M2FiNWFlOGMzMWUxNjE2MGI0YTQxZDg4Nzk4ZTI3ZjRhZDYxYzU3M2MwMjNjNjJkNGRiYjM5NTJlZWY1MDI2YWQ3YjQ1M2ZhOWUwNjk0MzQ3YWI4ZmU1MGE2Y2YyMGRhNTY2MjAyYjgxZTMyNWNlZTljMDdhYjJkNGQ1M2VkNDViM2VjMmQyMTM1OTM2NTE1ZjhhMjRmMmE4MTE2ODA3ZGNlOWRmM2M0NGVkZjY0YzMyNjQ3MTQ1MTUyZmYyNDFkOWUwMThlNDEwMWU0MDBhZjA3MDE5MmRjM2I0OThiNWEyMTNkMjY1YjRjZmM4YzhkNGQ3ZGVjY2I1IjoiY2YyOTZhYTQzY2I3YjMyOGUwOWM4OTc1ZTA2NzQwNGUiOiIiOjMyOiI1NjAxNWMxZSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NGZmOWE4NzcyODE1YjkyOWQ1NWY2MDUyYzAzNTRjZjNlMDJiY2M4MzM2ZmNmZTU3OTQ5NTJiNGM0NWQ1ZDk2IjoiYTg3ZGU1NmQ0OTcyNWExNjI1YmFmMTJmZDE1OTMxZmUxYTY3ODNkY2U1ZDFlNzQ0ZWJhMTA4ZjQ1ZTBjMTA1ZDgxNDFkYzAyN2QwZTMzYWQ3ZWZiNjc1MmI0MzcyOTcxNWUyZjNlMmM0MmViZGFiNGQ1ZjcyZjg4NmJkODIxYzQzNzIyNDQ2OTlkZGRlZDk5YTYzZGJlNzc2M2E1YTNiYzIxY2JmYzI1M2NkYzI1MTRlYmEyYTRmNTRlMjRkY2E3YzIwN2NiM2Y2YWU4MDE1M2Q3N2ZlMDY0MWYzNTdkNWEwNzNkY2Q0MjVjMzhkZWI3N2M0NWYyNzQyNzM0NTUxNiI6IjVjMDQ0YTY2ZTQ4OGI4NTNiYWY0NzlmN2RlZTJhYWRiIjoiMDAzMDRlM2Q0MGNiYzZkMmJlZTA3Nzg0NjI4ODRmNGVjMDQ3YThjNzRiYjNkZDdlMTAwZjJiOWQwZTUyOWZkMjQ3MzAwNjM5ODYxMTdiNTZjYTg3NmIyMDhhMzY5MTQyNWFjNjNhZmMzZDUwNGNjYjQ5OWM3NjYyMmVhZGUwOTcxNzAyM2ZjYjdkOTU2YjAxY2UyNGEzZTUzY2I1ZGE0NzJiZTNmY2Y1YjI3OGI1ZDllMzc3ZGUyMmZhYjc1YmM3NGFmYTk2NzBmNWZlOTY5MWFhMGVkNzdlNDNmNmFiYzY3YTYxZWM0MDllYzM5ZmQ2NmFjMDMwN2JmMTk1ZjM2ZiI6MTI4OiI3MmRkZDk5NjZlZGU5YjY4NGJjOTgxY2JiMjExMzMxMyI6ImFhZGI4NTM3MzA5OTQwNDIyZjY3Y2EzOTNhYTYxODJkNjdmZTdjNTIwOTI1MzhhMTVlOThhNDI1NGYwYTkwODdjN2YxMDkwM2Q1ZTc4MDc4YzJlNTVkZTkxNGRlYzhiNmIzNWNiNzIwZTNlNTU5NjNjMGFjOTkwMWU0NGI4M2EwZTdjNWIyZDNmMDAyYWVjMGE0YTA4MzU0ZmViZTQ3YjJhYmI5NTVmMmEyMTEwNzYyNmVmMGI4ZTFlMDk5NjUwODEyYTZmZWNmMzY5MDhmY2UyZDA3OGMyNzM1Y2Y3YzJiOTcwYTMwOWU1YzZkNmZmMjljMjZhMDU3MjBjNTcxMDUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNWNhMzk5MWQwMTYwYjE3MjlhZTFhNjIyZGNmNGIwM2IxZjRiYTg2MTUwYmQ2NmJmMzVjYmJlZTkyNThhZjEwIjoiNjJhYWQ1ODU0YTIzOGYwOTZiZGRlMDcxMWFjNmY1NzYzZTdmZWEyOWRiMDY4ZWE4YzkxMWYxN2JhOTFlNmQ3ODA3ODgzZTZmYzViYTdkYjE3YWYzM2RhMmIwMDk3MzAwOGEzNDI1ZTY1Y2M3ODZjZTFiOTczNjAwMTllZTJjZWY3NDU2M2Q1NDc1MmJlNDM2YjkwNTcwNWI1MDdjM2Q2MjY4OWRmNGVkZjAzNTZkMjZiNjkzZWI0M2Q4YTJhOTI3YTlmMzg2NmI3ZTBlMTllODRhOTA0NDdiZDZmNDdlMzEwNzBmYTdjMmE3MWUzZjc4MjI5ZWUxOWZhNDdlODQ4ZiI6ImY4NDAyMTg0ZDFjYzM2ZGYwN2I2OGVjYjFhYjQyMDQ3IjoiZDM3OGNmZDI5NzU4YmNiZDIxZTI2YTMyNDIzOWM0MmM5OTI5NDFiM2FkNjhkOWYyYjNkMmRlZjNhMDUxZmQxNzJlZTg4MjU2Mjk3MGVmNTk3OThmZjhkOWViNWY3MjRmZjE3NjI2MTU2ZjRjZjVkOTNlNDFmZmVmNmU1MjU5MTlhZjYxOTRlYTliYmI1OGM2NzU2M2QzZmZkOTBlNWE2ZTJhM2EzM2JkMWZhM2Q1NWVmZjVkYmE3Y2Q0MzlkNTcxZjdlMDgwMTRjNDc4MGUzZDEwOTA0ZWYyMmI2NjA4OTdlNzgyNThkYTIwYjI2MDBlODhkNzFjMzVlY2I2MzI5YSI6MTI4OiI5ZThiNTliNDk3MTEzMDU1N2FhODRlYzNhYzdlNDEzMyI6IjU1NmRkMzJlZGMwYWYzYzY0MTg2ZmU4YzAwMGRkYWQxNTE2Y2QxNDcyMWM5M2MyMjhlMzc5ZDRmODdlMzJjNzllNzM0NTM5Y2VjOTMwMzIyMDQ4ZjM0YTJiMzQ5MzFjNTg1ZDQ0ZjA5OTY2Y2FmMTg3ZWM0YjkyNDRjOTkxYThhNWYyNjNlOWRhMWQwOGQ2MDg2ZTUyNTM1YWZkYjM2Yzc2NjIzMDc1MjFjYmNlYjllY2I0NzBhNzY5NzAyNDM3MjNmYmMxNjEzYjZlYmJjYWUyNjFhYzJmMTkzNmU2NmNlMjllYzczNTBiMmU2YjJmNzNhOTEwYWRlNjQ1MTU0ZjciOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZjg2N2QxZGQ4YTI4NzgyMWE1NDQ3OWNhYjZmODg2MzZkMmFjYTMwZTFiZjAxYTVkZmZjNzM1ZTE3NTkwMzU2IjoiNjUxNzI3MmNhYzg1ZDdmMzg5MDJiY2I0Yjk2YTBjNTljNGJkYzQ2YmZlZmE2ZWJhY2Q3ZjJmYjE2MjliODdjYTkxZGUyZmZlZmM0MmNlM2NmZDM0ZGNiZjAxYjNmN2NhZGNlYTNmOTllNmFkZGYzNWQzNmM1MWYyY2ViMWY4NWMxZjU2YTA0ZWM5YzlmZmY2MGNkN2ZjMjM4Njc0OTkyMTgzZWEzZGU3MmVmNzc4NTYxYjkwNjIwMmI3YjgzZmU2NTYyYTBiY2E5YzFlMGExODYzOGU4Njg1Yjk5OGI0MTkyZjUxMjA0MzU4MDlhZDZlOTNhMDQyMmQwMDcyNTI2MiI6IjM1MDE5ODI2YzUxZGQxZWYwN2ZmOTE1ZDlhYzRlYTk2IjoiMDM3NWVkOTNmMjg3ZWVmZTQxNGFiMjk2ODg0NGJkMTAxNDg4NjBjNTI4ZGJmNTcxYTc3YWE3NGY5OGNjNjY5YTdmYzMxN2FkYzlmN2NmMmQ4MGRkYTI5YjE5ZGI2MzViMzBhMDQ0Mzk5ZjM2NjViNjE3NmVkNjY5MTQ2ZDI4ZjVhZGEwM2IzZDMyZDUzZmU0NjU3NWE4YWZjZDM3ZjIwMzg2ZDllMzZmN2UwOTBiNGZlZmFkZmFiN2YwMDhlMDJmMWI1MDIyYzBlZWI4MWQwMzQ0M2EyNzZlYWU0OGMwMzhlZDE3MzYzMTY4N2QyNDUwYjkxM2IwMmM5NzI0M2VkYiI6MTI4OiJlNDliZWIwODNhOWIwMDhhZTk3YTE3ZTM4MjU2OTJmMCI6IjcyM2JlMzliYzEzYWRiYzQ4Yzg2MWIwNzc1M2Y2NGZhYzFhZTI4ZmM4OTMzYWNiYTg4OGI2NTM4NzIxZGYwYThiOTFjMDQwYTI2NTIyZmUwZGJiNzMzNWQ4ZjYzZDIwOWU4OWY3Y2RlMjNhZmE5Y2EzYzU4NGIzMzZkNjNhOTFlMDdmZGQ4ODA4YjE0YzMyMTRjOTZhMjAyZTY2NWJiYWFhMzQyNDhmZjMwMzQ4ZjNkNzljOWYxNmU2NmFkNmM1OTAzMzA1YWNkODg3YTg5YjYyNDRlYjdjMmQ5NmUxOGIxM2E2ODZkZTkzNWJmMzgyMTQ0NGVlMjBmNDg2NzhiZTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZThlOWNlNjI5NGI3ZmJjNTM0YTk2YmRkMDYwMTIwOTc2YTZlMDgzMTVkMmVhNzNhYzYxZDA4NWNkNDYyYTQ0IjoiOTg1NWYxODZiNTEzNThmMGUyMTExYzA2YmZhYWVhZWM5YmY5NWM1NWUyNDYzNzVjNjE0ZmFkOTg4M2Q4NmM4MmEyMGM4NjUzOGRjNWY0MmEwZWE2OTY3N2Q1OWEyMGM1MTEyZDE1ZDJhODM5NmYxMjA5NjI0MmFkNWQ3YjgzOGQxNmVlMDY3OWZjNDAxN2FmNzViYzE1ZThhZDJmNzdiMGU4MDJjODY0MDMxY2JmYjBiYWNkOTVjODI4ZDFkYjRiN2JhYjA3MTM2MTllOWU1ZThmZTY5MDJhYWM3YTllNmM0MmViMDVmNWIxNTZmN2U2NjNlZTQzZTZmZGI2MjQ4MCI6IjRlZGM2YmUyMGY5MDRiNDc4OWU1YmVlMGE4MGEzZmM4IjoiZGIyOGNlMDc2YjM2MDgxNmNkMWUwNGI3NzI5ZjhhYjA4MGUwYTA3ZjM1MjA0MzUwZjNiZDA1Njk0NWFhYjg2MzhjMGU4MzExYWIwNTZmM2U1ZGViZGJmYmIwM2ZhZTcwMDc3MDI2NGZhZjczZTBmM2EwNWE1ODEyYWVlODRhYjYxM2M4MmY0YTc2ZGEyNzYyNTA2NzVmNmE2NjNmODVlMmMyNmQ0ZjRhODY2NmE3ZjRjZWRhZmZjMWE3MjE4ZGVjMTFjYTRlNzJiOGI1ZDViNjIwZDFlZmJkM2QzYjk0YTVhZTBkMTE4Yjk4NjBkZmQ1NDNiMDRjNzhkMTNhOTRjMyI6MTIwOiIwM2NmZTZjMzZjM2Y1NGIzMTg4YTZlZjM4NjZiODQiOiJlMTAxNDJmODUyYTBkNjgwYzk4M2FhZDJiNDYwOWNjYmQzNWZmNjFiYjNlYjY2NDQyYWVlNmUwMWQ0Y2MxY2Q3MGY0NTIxMGFjYmQ1MDYzOTVkNmNhMGNmZWJjMTk1YTE5NmM5NGI5NGZjMmFmYjlmZmEzYjE3MTQ2NTNlMDdlMDQ4ODA0NzQ2OTU1ZTIwNzBlMWU5NmJmZjU4ZjliYzU2ZjM4NjJhYWE1ZmUyM2E2YTU3YjVlNzY0NjY2ZGRlYzllM2U1YTZhZjA2M2YyYzE1MDg4OTI2ODYxOWQwMTI4YjNiNTU2MmQyNzA3MGU1OGU0MWFhZGQ0NzFkOTJkMDdlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODg2Yzc3YjgwZjVmM2EyMWMwMTkzMjY4NWE1NDBiMjM2MjlmNmQ0MWQ1NTc0ZmM1MjcyMjdlZDBiZGYyZTIxYiI6IjUzYTE3ZDdiNjlmNjA3ZjA4Njc2ZDZmNmRkNGU4ZGIwOGUwMTMzM2E4MzU1ZDhjODc2MTZlODRjZGYxMGVmNWIwNDFmYzZkZGMzZjZhMjQ1YzBmNTM0YzJiMTY3MDY0YWY4MmY0NWU0NzAyYTVlOGRlZGU1OTU3OWZkZWNmNjcxMzM1MzM5MjQzMzk1MGM5Yjk3YzM4ZDllZTUxNWFjOTdkMDk3MGNjZjAzOTgxOTU0NTQwMDg4NTY3YTMwOTQxYmIyY2NhMDhjYmVkNjgwNTAwZjgzNDJmYWE3YWViYmM2YzE0M2UyZWE1N2JhNmI0YWMxZmQ5NzVkY2M1ZDA4NzEiOiI1ZWM1MDZlZGIxODkwYTVhNjNiNDY0NDkwNDUwZDQxOSI6IjA1YjhkODIwYzlmNDM5ZDdhZWFlNWM3ZGEwZWUyNWZiMGRhZDQ3Y2MzZTZmM2E0N2U4Yjk4NGU4NTYyMDE1NDY5NzVmODIxNDUzMWZjM2MyZTUwNGQyYWMxMGZhNDljYjk0ODU5NmI5YThmYWIwMWI5NWM0OWQ2ZjA0ZDE1ODlmOTNiNzdiODk5ZTgwM2RkMjBlMWYwMGE1MWMwYjU5NTNlODViZTYzOTEwOWIxNGIxMDBlMzVjYTI2ZDg0ZWE2Mjk5NjRiMGRiODI2MGRmYTVhMTUwYTY2MjYxYmYzN2U3OWRlMmVjNDllOWYxYjA4MmE3YzU4ZWNkM2QzOWI2YzkiOjEyMDoiZmZkZjU2ZTFjMWE3MjUyYjg4NDIyNzg3NTM2NDg0IjoiNzllZTI3YWRmYTk2OThhOTdkMjE3YzUwMTBlYzgwNzgwNmZlZGEzN2RiODExZTM5OGMzYjgyYWJmNjk4YWVjZTA4NTYxZmZmYzZjNjAxZDI2OTE3MzhlMjc5ZWViNTdlNTgwNGUxNDA1YTk5MTM4MzBlM2JhMGQ3Yjk3OTIxM2VmNDBkNzMzYTE5NDk3ZDRiYjFiOGIyYzYwOWE4ZjkwNGUyOTc3MWZhMjMwYzM5YTQ4ZWJiOGMzMzc2ZjA3YzgwMTNmZmY2ZTM0ZjEwZmU1Mzk4OGE2ZWM4N2E5Mjk2YzBhN2NmYmE3NjlhZGVmZTU5OWVjNjY3MTAxMjk2NTk3MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjUyMzFjYTZkNzcyZWRkOWVhMmQyNTFlMjJkN2Q0NTU5MjhjMjI0NzRiNGI0NDEzMGRhZDU3ZTY1MTFmZWQ2ZWUiOiIyNzY3YzgwODQxMGVlMTMyMjkxNTg1ZWE3NGE0OGFkMzEwMmY4ODNmMDdkMDYwYzkxYzVmMTBhYmQzN2ZlMDk5NmQyMjEwZGM0OTAyNjAyMzhhZTE1ZjVkNzRjN2JlMmExZTE1ZDgwZGIwOTA3OWM1MjAwNDdmODg0ODhhNzgwMjg1N2EzZmMzYjgxZDg1YTk2OTQ5OTk3NDMwYTg4MDE3Nzg4MGEzMWQ0ZDBjOWM5MDQ1MjQ3ODA0ZjA1N2E0ZjI3NTZkNmU0MDM3NWE0YTMxODdjNDM3NmQ2YmY1NzNjZTMzNGNkYTFlZDg4ZDhhNTBkYjQ5OWU3Y2RiODlkOGRiIjoiMDQ4Njk4YTRhMGZlYWJjMWYzMzYxMTJlMjc5NDc5NWEiOiIzYTgxYjZiMGI3MjI4OTlmZjkzMWNiNzNjMzkyMjJkNTU1YjgzYWUzZjg4ODBiOTgyNTkzY2JjMWFiOGJlOTBkMWVlMzJmZDdkZmU2OTdjZjI0Yzk1YjczMDlkODJjM2ZlZDNhYTZiM2Q1NzQwY2M4NmEyODE3NGFjOGYxN2Q4NjBlYmIyNTFhYzBkNzE3NTFjMmZmNDdiNDhiZmIwYjNiZWI0ZjUxNDk0NDY0Y2RhMzRmZWFlY2RkYjFkYmJlNWZhMzZjNjgxYWRhMDc4N2Q2ZWQ3MjhhZmM0MDA4Yjk1OTI5YTE5MDU3ODc5MTdhZGM5NWYxMDM0ZmVkY2Q4MTdhIjoxMjA6ImJhNjFlZGViN2I4OTY2MTg4ODU0ZmM3OTI2YWFkMiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1YTNmNTE2YTc4OThlMDRlNWRhNGVmZDZjN2M1OTg5Yjc3NTUyZDE5NTQ2NDYyMGMyYjM1YjlhNGZkYTI5Y2NlIjoiNWNjMjhiNjFhZTk3NTU3Nzc0YmRjZDdmZjY1M2Y0YWEzNDlkZjY4ZDUzYzdlNWE2NTI2Mzg4M2VmMWZlMjI0YWQ0MGU4NmJmZmMyZDM4ZjI4YTJlZDlhZTFmYzA4NTYzZTJhMWU0NjI0NjEwNjU0NmViOGU2MDY0YzA2YmFhMDA0NmZhMTM3NDIxNzM0YjdmMGY5NDY1NmE0ZjQ1OWQ5ZDk4MTcxNzU1N2Q4NDM3MDBkMTE2YjZlNWUyZGQzYWY1ZjY3YzM0ZWRmMzFiNDBiNzFmZDNjNmYyNDc1ZjkzMTBmZWI3MGJjYjk3M2JlNTJkNDFlODY3OTJjNDlkNTRjMCI6IjkzMTBhZjY5NzQ4OTBjMGEwMzY0MjMxZjljYzgxMDNkIjoiMjEwM2FmODM1NmJjYjlkZmMyYTRmMWQ0ZWQwOWNiY2Q4ZTE5OTBkMjM4NjU2MDVlMTlmODdmZWI1MGJmOGQxMGQwMjU3NzQwZTU1NTdhOTI5N2YwNDk5YzAxZTI5YTFhNTEzY2ExOGU2ZjQzZjc0MDZjODY1Y2JlMzk1MWE3NzcxMTI4ZjMxMTBjOGRhM2JkNjk2MzY4OTAxOTQ0NTQ5NTUyODQyYTFmNmZkOTZjYzY4MWI0NWRhMDk4ZjNjMWFjYjNkMjM3ZDIzNjMyODVmNTIwZDBiNjcxNGI2OTg3OTBiNzY2MGM1MmFjODRhNDJjOTcyMWFjN2U5ZDM4YTJlZiI6MTEyOiI5OTNmYzhlNzE3NjU1N2VlOWViOGRkOTQ0NjkxIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjU5YzkyNTg1NTQzNjNkOGE4ODVmYzBmNWQxMTJmZWUwOGVhZGZjN2NlNTJhMGU3ZTczZTNkMGQ0MWQ5YTAyOTAiOiI3OWM0OTE0MTE0MDJlYTc4NzhlNDgwNTE5ZmQ5ODRkZGU0NGJjZTY0NTkzMDNiYjc2ZDRlYWY5N2Q0ZTM0NWQxYWFmYWE2OGNlYjA1OTBiNDFjZmVkMGY0MTFiNjc1ZDkzNDRjN2U4ODhjY2NmYzllYjZmZTZiMjI5ZDE5OGY5NGJhNTE2ZWU4NTBlZTdmMDc4YTRmNWYzMmEyM2Y5MmY3MjI2NGUzYTc2YTMxZWJkMDQyNTY0MzE1YWM0ZjJlYzBiYjQ5YmE2ZDA4Y2ZkMmQzYTYzMDg2ODhlMzlmMjhlM2VjZDY2OWM1ODgzNjhjZWU4MjEwZWRmNWRiZWZiOTI1IjoiNzdlNTFlODlkYzQ3YmJjYWM3OWNjYTIxZTgxYTYxZGUiOiIyNWE2Zjg4MDBhOWI5MTRjMGViZjlhNDVkNzIzNTVjMDNlZTcyYTEzOGViODFiMjk4MGYzMzI2NDVjZTFkN2FhNDY1OTgwNTgyMTg2NmFlZTJiMjc2ZTJjMDMyNzc2YjRlYWYzNmY5M2I1ZjlhNzJiNzkxYmUyNGUzMWVmZjEwNWNhNmQwNzAwZTMwNjllZTMyNzk4M2RkN2ZlMWM3NDY1ZDZjNmQ3NzgzN2FmZjY5MDU1MTQ5OTg4ZTcxOTk4NDdmYWQ5ODYwNWMzNzdkOTk3ZGJkNDBmM2UyZmYxYTRmOTc4YTQ5MzY4NGU0MDEyNDllNjk1NDBmYmRlOTYzMjNjIjoxMTI6ImVlNmQ4NWQzZjM3MDNiNDVhZGI0ZjliMmYxNTUiOiI0NGNhNjhkZWVkNTQ3ODA3NGFkZmRkYzk3ZjA2ZjQ0YzA4YmY3YmNhNGRlZTg3MDdkNjIxZmM3Mzk2ZmUyZWZjZGFkMGExNjdkMTcwOGE5ZmY1OWNlNGNkZGI4NjkyMGJmMWRiZGY0MWIyMTA5YTE4MTVmZmM0ZTU5Njc4NzMxOTExNGNhZDhhZGFiNDZjZjdmMDgwYzllZjIwYmNmNjdhODQ0MWJhNTVlYWM0NDlmOTc5MjgwMzE5NTI0Yzc0Y2YyNDc4MThhOGM1NDc4ZWE2ZjY3NzA5OTYwMjZhNDM3ODEyODVkZDg5YzM2MjEyMDUwYWZjODhmYWE1NjEzNWZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWU5ZWFlNTk0Y2I1NGM4MDg5MzMwZTQ0MDRmZjc5YWJiMWMwODQxYjBiZTUzNDdhMTQ2MzNhZDFlMWZmNDRmYSI6IjMyYWJjMWViNjA3NzU1NWE4NWEwYTZmZDFjNzhjY2NjYTZjOGIzNzU4NDJlMmViOGVlZTQ1ZWU2YzM4ZGMwODM3NDQzZDE2YzY0NzI1MmU4MTI0NjM5ZGQwMWM4MDhhYzVlODU3YTI1ZDkyN2MyYTc1ZTJmYTg5NTVjYWQ1YmViNWMyMDZmYzA1MGNkOTMzZmM0NjIxZjU3MTg5MzZmMDFmMzlkZDcwMGFlMWFlZTc1MzdjYzU5NWRmODc4OWM1ZDFhNmUxZTg3YjFjN2E2MGUzY2U1ZDU3YzgwZGQ2NWRlZTM4MDE3OThlMTQ4MWIxOTYzYmNjNzhjYzY5ZjhjNTAiOiIwOTE3YjQ4NmRhNzU0ZjQ4YmI0M2VjYzg3NjZhN2NlMyI6IjJhYTFlZjJmOTFhZWJhNWRhMTBiNDhhODgyZGJkNDU3NGRmNGU5MTU3YTE4YWJmOGNlY2QwM2U0MTc2NzEyYmExNzFiNmVjYjBlNzQ1ODQxZmY4NGUzNTA2M2U0N2IwODEwMWFmYzQ0Y2ZkOWNlZGVkYjkxM2E4MmYwMGI5ZDRiYWM5MjJmMjNhMjJmMjAwNjQyMjcwMzk5ODk2NDA1ZDAwZmE1MjcxNzE4ZWVmYjRjZDVmZTdlNWYzMjA5Nzc2NmViZmYzNmZmMTg5OGExYzhhMWEwMWNjMThlNjEyMWU0NzA4MDVjMzdmZjI5OGZjNjVlZjJmYjFiMzM2ZDA5ZmQiOjExMjoiOTIyODJiMDIyZTM5MzkyNGFiOWM2NWIyNThjMiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYWYwM2MzMDU1YTM1MzYyMjEyYjliMDU5OTMxZTdhMjRmYzcxZTMyYmM5YTUzMzQyOGM5ZGMzMTA3N2YyZWJjIjoiYzBlMTJjZGQ4MjMzODc4NTA1ZTAyNWQ1MjQyNzUzNmJlN2I2YmYxODg3ZDJkZDIwZWFjNzA5MmRiODBiMjI0MTdhM2E0Y2E4M2NkZjViYzVlMzYxNjFiZTFmZjliNzNmN2NlYjI5N2M2ZDA3YzljYjJhNzUwMzVhNWRjMDc5ZTQ4MjgzZGFlYTYwNTk2ZjRiMzU2Y2EyOGMyNDNlNjI4Y2JlNDU5ZjA2OTcwOWZlMTkzMzk0YzliMWEzMWQ4Y2NjNWEzYTRlYmEzMDA1NmM0MTVlNjg1NzFhMmMzNGJiNWMzMmVmZmYxMmU5YWE0ODNjNGE2OGJlNWU3NmFiYTRjZCI6IjdkZmNjZDA3N2IyOWU2ZWQ1NzIwMjQ0YmI3NmJkZTlmIjoiMjFlZGQxYzYwNTZmNTFmZDVmMzE0ZTVjMjY3MjgxODJlZGNkOWRmOTI4NzdmMzA0OTg5NDkwOThkY2RlODA4OWVlZDg0ZTc2ZDc3NGVmODg3NGQ3NzEyNTY2OWEzMDJkMjY4Yjk5ZGNkNjZiMzQ5ZDAyNzFkZGU2ZjhjYzk0ZGM0ZjJkZjM3ODc4ODdiMTE3M2NhZDk0ZDA2N2UzNDY4NDZiZWZiMTA4MDA1Mzg3MTAyODU0ZDkzODdkMmMwZmJjOTYzNmNkZjczYTEwZDE0NWY0YjYxMmMyMDFiNDZlMWZmNDQ2NWY2YTc2NTRjZTNkYTU3OTJkYWY5YTI3ZmIzNSI6MTA0OiI2MTU0YzY3OTlhZDdjZGMyZDg5ODAxOTQzYSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2MGM3NzU5NzFhOWVhYzc5NTBlZDJiZGQ4NWJkNjBmZTk0OGJhMDRjNDE5ZjY3NDNmYjY3ZjM3NTU3ZTQ2YzZlIjoiOGFiYjJlNjZhNGQwODA3NDkxNjA1NmJiOGU5MjU1NTEzNzJmNzM3ZjBlMWI1OTdjNWQwOGVlMTAyOTg5NzQzYTI3M2IyOWQ3MjgxMDEzZjhiM2FlZTI5MzQzOTljYjQyNzM3MGQ3MDM3MGVlODZlYjQxNTg0YjY1MzY2MGM2MzM1MDZhNTNjYWU3NDc4MjZiYjdkOTM5MDlmMDY5ZDVhYWNmMDU4YjdmMmJiZGM1OGVhMDg2NTNkYjg1N2JkYTgzYTk3OWZjMjJhNGYxMjZkZmVmN2FhYzQ1MTc3ZjRjZGI4MDJmYWIwYzgxMmZiMzVkMTJhODE3NmVjMjEzMzZkNyI6IjliOTJhZDcwNzliMGRlMDljOTQwOTEzODY1NzczMzhiIjoiMWY2YTg0YjBkZjc1YmQ5OWEyYTY0ODQ5ZTk2ODY5NTdjNmE2MDkzMmViZTg5OGQwMzMxMjhiZTliNzU3ZTk4OTAyMjU5MjVkODU2YmZkYzMzZmY1MTRjNjMxNDVmMzU3NzMwYmIwNDM1YzY1MzQyYmM1ZTAyNTI2N2I0MTBhZjZmZDM4OGE1ZWNhMDFiN2VmYzg3ZmQzYjFiNzkxZGY3OTFiZDQ3ZGZhYjczNjM1MGQ3YjdmMzY4YjQxMDBlMDRjOTM5ZDVhZjk1N2JhYjk1ZWQ1MDJkYWM5MDRlOTY5ODc2Njc0NjAyYTBmMDc5MGRhMmQ3MzUxYjY4NmU0NjU5MCI6MTA0OiIxZDZjZDRhYjM5MTRlMTA5ZjIyNjY4ODY3ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYjQyNmU0NDkzMzdhMTRiYzA2NjMyNDZhYjYxYjY3MWI1MjNjOWEzMTMwYzIxZWQ1OWM5M2ZhNmE1YWE1YWUzIjoiMjkxYmQ1YTAwZDcxZWI3ZDU0N2I3Yzk0ZTcwMzBiYTRhOTQ3NDE4ZWFlYjM3OGEzYmFjZDMwNGIwOGM2ZjkyZjY5NThlYWJhOTY4YWM2YWEyM2UwNTEyYTJhOGFkN2MxY2EyZjhmY2Y2MjNiZmMxMjgxZjViN2I1OThjMDhkMmFlYmNkNDQ3NjY4YjIzMjM4YzVlMzM4YjRjMmFjN2Y4ZmQzODE3MTRjNTk2ZWEzZTBjMTdhY2E0MzE3YTA4NTYzZTU4ZjBmNTJhOGFmMDhlMDc4ZGMyNDJhZTU0ZWUwZmUzODY5ZjhjOTY4N2IwMDRhNGRlZDBhYTI3ZDhmNGM1ZCI6ImU2ZWZjOTZhY2QxMDVmZTRhNDhkMWFjOTMxZWVhMDk2IjoiMDkwMmNmN2EwNjg1NDQ0MTI2MzY5NzEyYWM0Nzk2MmJjMmY3YTNhNTgzN2YxYjYxOTBkOWFiMWFkYjRjZDM1ZTdmMDg5MmVlZTYyOGI4ZTA3ZmNmMmI1OThjZWJlMWVjMDdkOGM0ODIzMTcyYWU2NmExMzViYjUxY2M3MTU5MDcwN2I2OTFhNjZiNTZhZjFmZmUzODc3MjkxMWQxMTY4NWRhMzU1NzI4ZWFkZGQ4Mzc1MmQyMWMxMTlkN2I1OWY0YzE3YzI0MDM2MjlmYTU1Y2Q3MGNkMzMxYWVkN2IwZGU2NzNjODVmMjVjMmU5ZTAyNjdmNTNmMGI3NDgwYzhjYSI6MTA0OiJjYTRiZmVlZGNkMTlkMzAxZDNmMDhjYjcyOSI6ImJjZWYzZjJmZDEwMWI4MjhkMzZjYjM4NTMwY2Y5YTBhN2EyODVhYzFjNTVlZTEwNjljYzc4NDY2MzI3ZTg1ODg3NTM0Yzk4YTg4OTFkNTc5ZWZmZDgzMmMwZjdkNmU3ZTgyMmZiMWVlYTg1YTM5MzE3YTU0NzU5MWRlZjRhZWVkNjY2MDg3Mjg1OWZjOWQxZGY5NzI1ZDNjNDBlOWNjYWE5MDBlMGYxNDI2YTU1ZDIwYWM0ZjJlOGUwN2JkM2JiYzY4N2Y4ZTA1OWFiOTNlNzYwNGM5N2U3NWFjOTRiZTFjOGMyNGY0YzRkYTAwODBhNGQ3Nzk1M2ZiMDkwY2JiNjIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlYWYyMDRmZjUwNGVhOGU3ZmFkZTFhMjA5N2YyYjUyN2E0NDc2Njg2MDQ0NzMyMmZhNWFkMzQ2Y2Q4MTAyMTciOiIxYzhlNGNmNjAxODIxMTUxODQ5NGQ0NmMyZTA2MDdmYTQyZTIzNmFiYzI4ZDU4ZjgxNzVjNTMwZjg0YjFmMDMwNTcyZjVmNmE3NGNiNTUxN2UxZmI5OTlhNjM3ZDM1MmFmY2JlYWRlYTkxMjFlNjk1Njc1ODU5YjY2YjQ5OWEzYTM1MWVjYmE1MjI2ZTU4ZWJiYjU5ZmUxMmUzNTllNGM4OWNkNTFjODcwM2Q0NjQzYzQ5OTIxYWU0OTU4MDFjNzM2MjdkZjQwNGI5MWU4MjhlMWQwZTAzYWUwOWEzOWRlZmI1YWE1ZjJjODEwNjk1Mzc3MmJhMDcxM2QzMjYxMzI5IjoiY2ZkYjgxODMyNTFmNGI2MWM2NGU3MzI0MzU5NGZkYzYiOiJhNjBmMzk2OWZkMWIxNDc5M2RkMTQyNWFhMGIxZjc0MmE0ODYxZTBiNTBlYWZmZDE1MjVjZDIwOWJhNmQxMjUyMTc2NzYzYmI1YmVlNTlhYWE1NWY5MjM0MWNkYzA3MDU4OTlhYmE0NGNmMGVjMDVjYmY4MDI3NGViZWY2NWNkOTUwN2ZkNDIyNGIyNWNhYzE5NjEwOTY4ZDZhMzdlMmRhZjlkZGYwNDZlZjE1OGVmNTEyNDAxZjhmZDBlNGY5NTY2MmVlYmRlZTA5ZGQ0YTc4OTRjYzhjNDA5YmUwODZkNDEyODBiZDc4ZDZiYzA0YzM1YTRlOGNkM2EyZTgzYmUzIjo5NjoiOWU0NTAyOWY0ZjEzYTQ3NjdlZTA1Y2VjIjoiNWNkYzY2YjU4N2VkNWVlYmIwNGY0MmI4M2E2YWI3MDE3MDkzNTE0ODgxYzU5OGNjZTMzMmQ3NGZhM2ZhYjkyNzQ5M2FjMTViZmYyNjgzNTI5NmUwODBiNWI0NWVmOTA3YzA1MjlmYzJmNGVkMmZjMDlkYjE3OWVmNTk4ZTVkMTkzZWE2MGMzMDFkM2Y4ZDgyMzQwNDgxNGUzZTc0ZGUwZTFkMjQxN2M5NjNlOTI0NmMzNTMyMDFjN2E0MjY1OWQ0NDczNzZlN2QwNWM1NzlkZDRjM2FlNTFjMjQzNjQwN2I4ZWZmMTZlYzMxZjU5MmYwNGI4MDEzZWZjZmQwZjM2NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTU2NTJhYmUzOGNkMDk3NzdiYmEyMWQwZGIwNDYzN2Y1NzM3ZDNjYjM5MjIxODFiOWYyZDA3YmZkYWZkMzI3YSI6IjFkNmMxNTNkZWMzYjQ3MzhhMDljOWZiZGZlMzFhMDkzZWI3ZWE3OWI4ZmE0OWY4M2U1ZTFmNDY4OTM1OTBmMDc0ZmIxNzFmYjY2ZTMwZWY4ODc3NjcwMTRlM2ExMGEzYWEwNWRhMmJkNTBkZDdiNzkzNmUxZDdmNmYzMWFmOTAzMGUzMWU3NmJkZjE0N2Y0Mzk2NDY0ZGIwZjZhNzI1MTFjNDg4NWM2YzIzMDVkMzM5OTA2ZTNjNzYxYTMyNDlkN2ViZWEzYmY0NjNlOGI3OWMzNzA2ZTY4NDU3NTU1MGU5NjRiODA0Nzk3OWY3YWVkNmVhMDUwNTZjNGI1ODQwYjEiOiIzYTVlMGQyMjNhZTk4MWVmYjQwNTU2NjI2NGUzZTc3NiI6ImNkNzU1NDM3Y2I2MWI1Mzk5MDhlMGNmYWFhMzZjMDEyM2Y4ZjE3ZDFlNjUzOTc4M2NiNjFkNGI1NmNhYzNiYzFlOTcxYzFlYTU1OGIxMjY2OWIwMjVjYjZiOWFkNTU5OTFjNmUyZjhlZThiMGI3OTAxNzkwMTkzZTIyNmEwZmJiZmZmN2ZmMGJlZTZhNTU0NjYwYjlmMzJlMDYxYjZjMDRiZjA0ODQ4NGZmOWViZDQ5MmY3ZTUwZTc0NGVkZDcyZDAyYzhmZDMyZjg3Zjk0MjFiZjE4YTVhMjBlYmI0ZDlkYmUzOWExM2MzNGI3Mjk2MjMyNDcwZThiZTU4N2JhMDkiOjk2OiIwMWE1NzNkOGU5OWM4ODQ1NjMzMTA5NTQiOiIxNjI0MzBjMjNmN2FkY2Y5ODU3NWEyZDkyNDliNGI1Y2VjNDJlZmFlMzM3NzYzNjBlYmZhNmExOWM4ZWVlNGJkNmIwN2NiZDI3NGRlYWRjMzI5MmI3Y2RiYjc4MDNlOTlkOWY2N2NjYzUwNzdmM2FkNTgwOGYzMzlhMDViMzIxM2RiZmQxMTM3NzY3M2Q0ZjliNDg2YTY3YTcyYTlhYzhlYTliYTY5OTg2MWRjZTBkZTdlMmZkODNkM2JhMmEyZWM3ZmFiZjE4Yjk1YTJiYmUyMTg0ZmY3YmRkZDYzMTExYjU2MGIzYWZlN2YyYzc2ODA3NjE0YmEzNmMxYjAxMWZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhNDNmNmQwNzA0MmExNWNkNDlmNmY1MmEyYTNhNjdjNmMyZmY0MjBkOTViYjk0YjlmZTAzYjI4N2MzYWJjYWY4IjoiYjY3ZTU4YzhiNjA4NzI0ZmQyMGFhMDk3ZWU0ODNiYzRjODA0NDkwY2M3OWRlNjM1MTcwOTQ0YWY3NWM4N2FlMGFkODI2MTM2NWMxZGM4MGQ4NTI1NTNiY2JhMThkYTlmYmMzZmJlNjFkMjc1NTBhMDMwMDNlZjBjNjAyMDIwNTQ2MjY2NTU1MDlhOWUxYWI1NDY3N2U1MzdhNGU3NjFkZjAxMWQ2YzZkZDA0MWM3OTU0NDZiMzg0MTYxYWU5ZWFiNDQxYWZkMjRkMTliNThlYjRmZTUxMTZjZDdiMTFiNzUxZWJiZDBhMmFkYmE3YWZjMzgwZDlkNzc1MTc3MDk5YSI6IjNiNmZhZDIxZjAwMzRiYmE4YjFmN2EzNDRlZGY3YTNjIjoiMmUwMWMwNTIzYzgyOTNmYzUxMzg4MjgxZGNjZGI4ZDBhMmQyMTVkNzI5Mjg5ZGViMzI3YjgxNDJkNzE2YzJiYjg0OWU5NDc2NTQ1YjgyZjM4ODJiYTc5NjFiNzBjNWRhMmE5MjViYTE4YjZiMTIxZTkyMTVkNTJhYzQ3OWM5MTI5YzljZDI4ZjgxNTg0ZmY4NDUwOWQ1ZjlkY2I3ZWFhZTY2OTExYjMwM2NjMzg4ZWZhNTAyMGFjMjZhOWNkOWVhOTUzZjYxOTkyYTMwNmViNGIzNWJjZDg0NDdlZWE2M2NlZjM3YmIwYzk1YzFlMzc4MTExMTVjZjI2YzUzZThjNSI6OTY6IjQzNDcwYmMzZDdjNTczY2IzYTUyMzBmNSI6ImUxNzIwZDQ1MWZhN2FiOWRiNDk4ODU2NzE4NzI0NGIxNWI2ZmU3OTVkZDRmZWY1NzlmYjcyZTQxYjIxYWFhNDM2ZDJlNWQ4NzM1YTRhYmQyMzJhM2ZiOTE4OGM3NWMyNDdmNjAzNGNkZWJiMDdmZDdmMjYwZjhlNTRlZmVmYTRmMjk4MWNhZmE1MTBkZDVjNDgyYTI3NzUzYTdjMDE1YjNjYWUxYzE4YzdjOTlhNmQ2ZGFhNDc4MWI4MGYxOGJiZTY2MjBiZmMxNTE4YTMyNTMxMDE3YTFhNTJhYWRiOTZhNzc5NDg4N2MxMWFkNmJkZDY4MTg3YmExNGY3MmE0YjUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw2NCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjFmMGYwMTkxZTE4ZGIwN2MwNTAxZGJhYjRlZDk1MmM1NjAzYTRjZDI0OWQyZDhkMTdlNjJlMTBiOTZhZTcxM2YiOiJhYWQ0MGU3ODY2YzI2ZTQ4NmI2ZjZlOGViMTRhMTMwZDVmODg4OTFiZjBkMDlhYThmZTMyZjQ0N2FiOGRlYTdiZWU1ZDNlZGE0NDk5YzAxMDNhMDEwNDgzZjJiNjRmZGYxMTU1NDk5ZDMxZGVjZjUyOGM3N2RkNzYyNzg4NGY5OTk1YzIxM2NmNzQwMjE0M2RiYjc1NjFkNjljODY4ODY3MzQyNjBhYzk0ZmZhYzdlYjMzNTk4ZDI1NzE0MjI4ZWY0M2Y3NDRlYzFhZjJhODdlNzg5ZjFlNWQ2ZmZmMGZiZDUwODJkY2M0OTMyOGYxOTRlOGY4YTE0YTViZmM5NjJkIjoiYWI4YmUxNmI0ZGI4MDljODFiZTQ2ODRiNzI2YzA1YWIiOiJhNWE2ZTgyODM1MmE0NGJkNDM4YWQ1OGRlODAwMTFiZTA0MDhkNDEwZjZlNzYyZTMxNDVmOGIyNjRhNzBjNTkzNDc2YjQxYmI4Nzg3NTc0NmM5N2RlN2Q1ZmFiMTIwYmQyZjcxNmIzN2MzNDM2MDhlZTQ4ZDE5N2E0NmM3NTQ2ZmFmY2RiZTNlNzY4OGI3ZTlkMmY1YjYzMTljOTFkMzg4MWQ4MDQ1NDZiNWYzZGJlNDgwOTk2OTY4ZGQwNDZmNDA2YzExZjBkYzY3MWJlMDQyMWNiYzhiNGVhNjgxMWRkNTA0MjgxNTE4YmI5NjE0OGRkZGY5ZjBkYzRlMmUyNDM2Ijo2NDoiZDhiZDdkODc3Mzg5MzUxOSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE2Y2Y3ZDgzMTM3ZjU3ZjIzMTBlZTZiZjMxZTg4ODM5NTJiYjA3Y2NkYzEyZjUxNjIzM2VkNTMzZWE5NjdlNWQiOiI4M2FiMjA2OThmZDc1NzNmZDEyMTk3NmE3MmI0NWE3ZjAzYWFkODQ3MDJmYzhhYzczZDY5MjZlYWJkOGE1NDY4OTVhZWZmZTRiYTgxZDExNzUwN2UyY2QzN2Q1OGVlZmY3MWNjM2FmYThhNDQ0OWJlODVmMjI4ZWE1MmY2ZGM2Mzk1YmI0M2MxYzlmNzk1MzQzNzIwODQxNjgyZDliMmYwMDYwMmVhZmE0ZDRjYmUyOTdiZmM2MjQ2N2U1MjZiOWQ4MjNjYzhlZWVjZDllNWY4ZGJjMmY2NTYxMDY2M2M2ZjM3YjNkODk2NjUxYjI1NGJkNjAyMTU2MjlhZGUzYjJhIjoiZjE3ZTM3ZTczYTI4YzY4MjM2NmJmZTYxOWNjNjczYmIiOiIwZjRkZDIwMWIxOGUyMDIzMGI2MjMzZTBkN2FkZDZmOTY1MzdkZDRlODJkM2QwNzA0YzA0N2ZhYjQxYWY1ZmFmNmJkNTJiZDE0ZmE5YTA3MmY4MWQ5MmEyY2UwNDM1MmYwYjY2ZjA4OGM2NzEwMmQyZDEyN2E5ODUwYjA5ZmY2MDg3ZjE5NGE2ZThjY2FiYTI0MDkxZmViMzAzZWViYjY1ZjEyMDNiMmQyMmFmNDRlN2JlNGRlNzFmMDNlNmY2Y2JhZGYyOGUxNWFmNThmNThlYjYyZTViZGRmYWUwNmRmNzczY2MzZjA5NDI1MjBkZTIwMDc4ZGRhNzUyZTMyNzBmIjo2NDoiNzQxMTA0NzFjY2Q3NTkxMiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImIwYzg1YWM2YjM4ODc2Mzk4MzhkZGNhOTRjNWM2OWYzODExNWFhMDAxMjIzMjJjODExNDY0MmQxMmVhMWI4ZmUiOiIwMjEwZmNlNDE4ZTdlMjE5OWNiOGY4OTljODFiOWJlNzRhNjMwZDAwMjY5NzU1Zjg4MmZjNGRiMjc2MzJlOTk2ODVjYzEyYzQyNmE3NTAzNDczNjQ2ZGYxMjg4ZDBlZGUyODQwOGJlOWFkZDU3MTM2Mjg3MDBmOGUyYjJlMjdkNzUyMjUyMGVkMDBhYzQ3MjM5MDg0NjUxZWI5OWU3ZDAzZTE1MjBhYWUxMzdiNzY4ZjMxNDQyMzJjMTZiNzIxNThmZDVkYTRhMjZhMjUyNWI5YjI3NzkxYmYwNmQxZWIyZTY3MWM1NGRhZjY0ZmRkYzE0MjBiYzJhMzBhMzI0YmE1IjoiMTRmNjhlNTMzZWNmMDJiY2ViOWE1MDRkNDUyZTc4YzciOiI3OTZhNDYyMzZmZDBmZjY1NzJiMWQ2MjU3Yzg3NDAzOGY4NzBhYTcxY2JiMDZiMzkwNDZkMGZiNjQ4OWQ2YWU4NjIyYjUxNTQyOTJhZTVjNGUxZDVmZjcwNmRhZWRiMmU4MTI1MzNhZTNhNjM1ZDMzOWE3ZmJlNTM3ODBlM2U4MjA0OTI0YTVkZWI0YjY4NTY2MThmNGM3NDY1ZDEyNWEzZWRmZmUxYWI4Zjg4YjMxZDQ5NTM3NzkxYzBmMzE3MWYwOGRiYjVlZDFkOWVkODYzZGFmYmFlNGVjYjQ2ODI0YTQ5MjI4NjJmZTA5NTRlZTJjYWEwOWFiMGU3N2VkOGZjIjo2NDoiNmZiMGI1YzgzYjUyMTJiZiI6IjVlNmMzNjJmNzU4NzkzNmJjYjMwNjY3MzcxM2E2ZjFmYjA4MDc4M2EyMGU5YmJiOTA2NDU2OTczZTUyOWNmYTAyOTgyMDYxODQ1MDljMzBlMWQzNzkzZWFhYTVkNTY0ZWRkNDQ4OGYwNDMxMTgyMWViNjUyZTBhMWY0YWRhZjY5NzE1MDVjYTAxNDc4OGM4Y2UwODVjZWIzNTIzZDcwMjg0ZWQyYmIwYWViZWJhN2FmODNkNDg0ZGY2OWM4N2Y1NWE5M2IzZDg3YmFhNDNiZDMwMWM0ZTU1ZWI4YzQ1ZGNmM2U0NjEyNTM1ZWExYmQ1ZmRiNGMzYjkwNTZkMGNhZTkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU2MWIxYTZiNDBlMmFiMTI0NWZmNjVkY2ZiOTk0ODMxOGFjNGZlNTVlOWVkNjAwY2VjMzAxZGFlMzJhZTBlOTMiOiI4ZDY3ZmE5ZmNmMDc4ZTQyMWNiNjNhYmViMjVkYmE3MzlhYjBlMDlhMDkxZGQwNmIwYzYxNmUxZTg4OGYzNTBlZGIyZDczYTQyZjU3ZjExNTI2NmVhMjBjN2Y4ZmMxNDNhYzc0NjY0OTYxMmRmMDZhNWUyOWI0YTE1OTM0ZGMwNDliZTFhYjQ5ZDAxOGFiODZjNGYzN2Q4YzNkOWM3MTRmMDM4MDI5ZTc0ZDhlZTNkYmU2MWQ4MWFkYzYzNzEyZWE0MTNiMzdmNzYwNGRhMTIxMDdhYTE2OTVkOWIwOTgxZTVhOTJjZGZhYTVmYmRhMGUzMWIyMmM2ZmQ2ZjNiNDk5IjoiYzM1NjI0NGIzMDM0ZDI4OGU0ZDRmZTkwMWI4ZTI3YzEiOiJiZGNmZWIwOWQ1Yjk3YmFiMDVhN2FjZDk4NDllN2RlMmM1YmViN2E0ZGM1NzNjN2UxYzFkMGMwNDA5MjQ1YTY1ODQwMjMxMTRmZGNjNjQxM2M4MDBjYTE2ODQ3YmRlNzUwYjI3YzRkNTkwMjQ4ZTJjZTQ1N2MxOWIwZjYxNGY2YWZmNGQ3OGQ0YTE5YjMyNTE1MzFlNWU4NTJmYmIwNWQwOTQxMmNjMWZmODk4OGQxOTU1Y2E2ZjVmZTJkODIwZjIwYTc2NDJlM2FlNjllODEyMmIwNmJhMDkxOGU4MDY0MDBiOWI2MTVlMWFiZTZmZGQ0ZjU2YTdkMDJkNjQ5MDgzIjozMjoiODZhY2MwMmYiOiI3YzczMTgyZWNhOTdkOTYxN2FiYjQ3OGE2Y2U2MmUzNDkxYTdlOTk1MTk4MWM4OWMzMDcxYjE2MWE0YzgwNDQwNjE0YzNmMjRkMDE1NTA3M2UyOGRjY2NlZTk2YmM4MzAzZGFiNDkwMWVmNzczMThkZjUyMmQxNmQ5ZGE0Nzc3MGVmMDIyMzk1ZDYxMDRjZDYyM2Q5M2Q2NzA5MGEyNzUwN2ZjOGNhMDQxNTdlNzkzOWU2MzljNjJjZDBlN2Q4YTQ3MjMxNDgzM2MwZWFhOWJhMmZkNTRhMjViMDI4NTRlM2JmZjI1Y2NjZDYzODg4NWMwODIzNzRhZTUyMGVkMzkyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZjVhMDJlOTg0M2QyOGM4YzIyNmVkNzBkNDRiOGZjZWQ4ZmI3NTdhYjZlY2U0ZDRmMDZlM2MzY2VjNzllNDRmIjoiM2VjMTM5NTBkMzI5ZjI0MDc0NzE0YzU4M2JkYzM1Njg2YjgxMWY3NzViNzZiMGE4ZmNmYTY2ZmM1NjQyNmM5ZDAyMmY4YWIwYWYzOGY4ZDJmNzFhMDY4NTQ4MzMwY2RiZTg5MTY3MDE4MWVkNzQ5MWJmNDBjNzM5ZWY0ZGQ5MzY4OWZkMzU5MjliMjI1MDg5ZDJiMTUxZjgzZDliM2NkNzY3MzAwNjExMTQ0NTg2NzY3MzU0YzA0OTExMTJjMjA1NDA5ZjMxNjgwOTJkMjdmOWI5ZjQzM2FmYjc5ODIwYTI4MTE5ODRkNDhlNzBjMWZiMmExM2JiYjNkZGJjNTNmYiI6IjA5OWU1ZDlhYWU4OWZiNjM5MWExOGFkZjg0NGE3NThlIjoiYWQ5M2U4NjYyYzMxOTZlNDhjZmRiNWFhM2JjOTIzY2QyMDQxNTFhYTk4MGNiZWM3OGYwZDU5MmI3MDFmNzc5YzFjNDlmOWU4Njg2ZDdlMjM4NWE0MTQ2YjIxYTY0M2E1OWMxOGM4YjgyMjE0ZjQyNTYwYmNkNjg2ZmFkN2M3YzhlOGMxOTQ0Y2U2YjIwZWM5NTM3ZGQxNGI2Y2YyNTkyNzQwY2ExMTJmNGNkNTgyMjUwZDY5ZjI0MGQzZTk1NzA0MGUxZjdlMTljNjBiM2M4ZjJiZDAwY2I2NjY2MDRjMzg5NDZlYjliMmYxNzMzNmQyODFiNDc5NGY3MWU1MzhhMiI6MzI6IjMwMjk4ODg1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWNkYjIxOGUwYmQwZTAyMTU2ZTViNDgxODI5OTBmNzc4ODg5NzkzZWY2MDE4YTg5MjhlNjExNjRhYzA0N2M4ZSI6IjRkMDM5NjE4YTBlYjY0MDMyOWY5MGZlOTdkZTE4YmM5MjhmYzNmYzdhMGRiNDJjOTc3NzRiZWMyZTg4MmU4NzJmYzEwOTdjODMxOWY3ODM3YTE2NTE2YmYzODdiMWJhZTMyMWM1NjVlOGZjMWNiODQ4MGYwNTExNThlNDY4NWYwYWRiYTMxMGQyYzYyNTNiYzEzMDA0MDNjYmQzZjdkZGNiMjc5NmE2OWY4YmY5ZTczZDQ3YWFkYTlhMDI2NzNjMWEzZDVlY2RhYzgzOGFiZjIyYjM4NTkwNjIzNjUyOWExYjdkZDViOGFmMjYxMWEwNGNmNGY4M2IxNWJhNDFjZmMiOiJkMmZmYmIxNzZmODZiZWU5NThlMDhlNWM3YzYzNTdjNyI6ImJjNTgwYzQyMjNmMzRlNGY4NjdkOTdmZWJmOWIwMzYyOWQxYzAwYzczZGY5NDQzNjg1MmNhZmQxNDA4Yzk0NWM1NDc0YzU1NGNiMGZhZjJiYWUzNWQzMTYwYzgyM2QzMzlhNjRlYmQ2MDdjZjc2NWZhOTFmNDE2ZmM2ZGIwNDJiYzJiZDc0NDVjMTI5YjRhMGUwNGI2ZjkyYTdiN2I2NjllYjcwYmU5ZjliMjU2OWU3NzRkYjdjYjdhZTgzOTQzZTNhMTJkMjkyMjEzNTZlMDhlNWJmMWIwOWU2NWYxOTNkMDBkOWZlODlmODJiODRiM2I4YjA2MmU2NDkxNjNkYzgiOjMyOiIxOTk3ZGFhOSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkYzFhMTQ1YzE4YmRiY2E3NjBmMzVlZWEwZDRhNTk5MmRlMDRhMDYxNTk2NGVjOGI0MTljODI4OGFiMTQ3MGYwIjoiIjoiN2Y4MzY4MjU0OTU1ZTFiNmQ1NWI1YzY0NDU4ZjNlNjYiOiIiOjEyODoiOGRkYWEyYzNlZDA5ZDUzNzMxODM0ZmE5MzJkOWQzYWYiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiN2I0NzY2ZDNhNjYxNWVlNThiMzkwZGFhMjI4YWU3YTU0MWM0NmNlODBhMWVmZTIyN2NjNDNjYjc3N2RmMzIzMiI6IiI6IjI3NDM2N2YzMWVjMTY2MDFmZTg3YThlMzViN2EyMmRkIjoiIjoxMjg6IjVmM2E3NTdiNTk2ZTA2ZTliMjQ2ZWQ5YmFjOTM5N2Y5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQxOWIwNDA1NWJmNmU3ZmY4MmU4OWRhZWY2NmM5ZDgzMTlhYjI1ZjkxOTdlNTU5NDQ0YzU3MjliOTJjNGYzMzgiOiIiOiI3OTZlZmFmZjRmMTcyYmVmNzg0NTNkMzZhMjM3Y2QzNiI6IiI6MTI4OiIzYjQ0NWYzOGJmNGRiOTRmMWE5ZWM3NzExNzNhMjllOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3Y2E2OGUzMDA1MzRhOTBhN2E4N2NhOTkwNmU0YWM2MTRhNmFhNTFmNzY5YjZlNjEyOTc1M2E0ZjgzZDEwMzE3IjoiIjoiNDVlNmIyM2Y4YjNmZWVmZDRiMGVhMDY4ODBiMmMzMjQiOiIiOjEyMDoiNmMwYTFjOWMyY2Y1YTQwNDA3YmZhMWQ1OTU4NjEyIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImEyYjdjZDY5MzIzOWJiYzkzNTk5ZDNkMTJjOTg3NmU3MzAzYjIyN2I4YWU3MThlMmM2MmU2ODllMWZkNjI5MDMiOiIiOiI1NDhjOWM4ZmNjMTY0MTZhOWQyYjM1YzI5ZjBkYWNiMyI6IiI6MTIwOiIzYWEyMWYyMjEyNjZlNzc3M2VlYmE0NDQwZDFkMDEiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxNTZiODU0YmViMGMyNzZhNWU3MjRmNWRhNzJmMGQxY2E0YWU3Y2JkNWY5M2EyMjU3ZDk1YzJlNWJmZDc4YWQ0IjoiIjoiYTUxMjllMjUzMGY0N2JjYWQ0MmZjNTc3NGVlMDlmZTciOiIiOjEyMDoiNmJiMDllZDE4MzUyN2M1ZDVlZDQ2ZjU2OGFmMzVmIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ4MjQzMzBjNjAxNDEyNjRlMWY3MDlkNjMyMjdhOWE3MzFiY2M0MmI0YWRlYzFkOGYwMTYxYjEwYjRmZGIyYWIiOiIiOiJjNWFmYWE0NTMxMmM2NGFiM2MzY2Y5ZDZjNGUwY2M0NyI6IiI6MTEyOiI1NTk1MmEwMWVlZTI5ZDhhMTczNGJiZGYzZjhmIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjU1MTc1ODk5NDhkOGFlYTc3OGRmNmZkNjZjMTdhMTcwZDMyN2Y2OWU1MDRmMGE0YmQ1MDRjNDI4NmE5ZjU3OCI6IiI6IjY0MDRiMTExYzYyODllZWZhMGQ4OGVkNjExN2JiNzMwIjoiIjoxMTI6IjYzN2Y4MmU1OTI4MzE1MzFhOGU4NzdhZGZjMmMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjYxMzdiMmJjYmQzMjdmYmNjN2YzMTNlZmExMGY2ZmZhZWQzMGU0NzgyZTIyMmUxMjI1Yzg3MTAzZmNhZTkwNSI6IiI6IjNiODdiMDgzMzdhODIyNzJiMTkyYmQwNjdlMzI0NWVjIjoiIjoxMTI6IjFmMmRkYTM3MmYyMGZmZGRkOWRkNDgxMGUwNWYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNWU3MGQxYjc4ZTkzMWFiZjQ0YmJhM2Y5MzdkYmMzNDQ4NTg1MTZhOGE4YWZlNjA1ODE4ZGM2N2QwYzNlNGM0IjoiIjoiNThlNzAwOTVjNmYzYTBjZGEyY2RjNzc3NWUyZjM4M2QiOiIiOjEwNDoiMTc2MzU3M2Y3ZGFiOGI0NmJjMTc3ZTYxNDciOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MGRlMGMwNDdkMWRkMDFkNTIxZjJkZWRlYzdlYjgxYmMwYWNlN2E1YTY5M2E3ODY5ZWFhZmJiNmU3MjVhZDdiIjoiIjoiZDU2NWM5Y2RmYjVkMGEyNWM0MDgzYjUxNzI5NjI2YmQiOiIiOjEwNDoiNzg3MzhkM2U5ZjVlMDBiNDk2MzVhYzlhMmQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzQzZThkYmVhZmIwNzk2OTI0ODNhOWZjYmFiOTY0Yjc2ZmNjY2E2Y2E5OWUxMzg4YTFhYTliZjc4ZGZkMmYwMiI6IiI6ImYyYmQ0ZmUwZDMwYzBlOGQ0MjljYWM5MGM4YTdiMWM4IjoiIjoxMDQ6ImVhN2I1MjQ5MDk0MzM4MGNjYzkwMmNhNWFlIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTM1NDA5MTlmZGI5NTU1OWUzN2I1MzVhNDI3ZWZlZWUzMzQzMDllMzRjNDYwODQ1OWUyMDRkOTMxYjgwODdlNyI6IiI6ImM5OTNjMTgwMmRmMGYwNzVjZTkyOTYzZWI5YmZmOWJkIjoiIjo5NjoiZWRmYWIwMTMyMTM1OTFiZWI1M2U2NDE5IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmE3YjJlMDdjMTQ4ZmYwZjYyN2FlMjhjMjQxYTM5NTg3NmJiZWQwYzIwZjNmZDYzNzMzMGU5ODZkYjAyNTcxNCI6IiI6IjhmN2UxNjIxYzIyMjc4MzlkYTRlYTYwNTQ4MjkwZmZhIjoiIjo5NjoiZjlkYTYyZjU5YzA4MDE2MGVjMzBiNDNkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjNlNzgzN2E3NWIzOGFlNmQ0Mjk5YTFhZTRhZjNjMjQ2MGRmY2E1NTg3MDhkZTA4NzRkNmIxYTU2ODliODM2MCI6IiI6IjA1ZDM2M2IyNDUyYmVmZjRiNDdhZmIwNTJhYzNjOTczIjoiIjo5NjoiNmI0YTE2ZDFlYTFjMjFiMjJiZGNiMjM1IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWRmM2NjZDk1Zjc1NzBmNmVjZjVlNTMyOWRjYjc5YmNkNDZjYmNmMDgzZmUwM2FhOGY1YmQwZjY0NWM2YTYwNyI6IiI6Ijc3NGY0ZTcwYTc1NzdiNTEwMWMwYzNkMDE5NjU1ZDNlIjoiIjo2NDoiOThmZjg5YThlMjhjMDNmZCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWM3MTIzZTJlOGQzNzc0YzhmMWJkYmIyMjcyZjE5MTI5ZTA0ZjI5YjQzNTFhZTE5YzNiOWQyNGU2ZWExZmU4NyI6IiI6Ijk5ZjI1Y2ViZDZjZmE3ZjQxMzkwYjQyZGY2YTY1ZjQ4IjoiIjo2NDoiOGUxNGEwYTQ4NTNhMTU2YSI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ5MDA5MDMyM2U5MjU3NTE3ZTI0NTM0NjljYWEzNDE0MDQ1Y2FjYjRkMDVkNWNlYmM2YjljMDZmYTZkMTkyOTEiOiIiOiJjMWJlZmYxZmY2Y2RkNjIzMzlhYTIxMTQ5YzRkYTFlNiI6IiI6NjQ6ImY5OThkN2MwOGQ2MDliM2EiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM2MGU0OGRkMzhkOWU3ZjViZjI5YTI5OTRhYjViM2M5YzcwMjQ3MTAyZDk0MDQ5YWU3OTE4NTA4MDdhNGM4NDUiOiIiOiI4ODEyNmMzNTBkZmMwNzljNTY5MjEwZWU0NGEwZTMxYSI6IiI6MzI6ImYyZWJlNWU0IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTU2MmIzMmU0ZGQ4NDNlZGFmNDQ3NGI2MmNhZGQ4ZjQ2ZDUwNDYxZjViMjJjOWYxYThlYWU3MzY3ZDM1ZDcxYiI6IiI6ImFmMjlmZGI5NmY3MjZjNzZmNzZjNDczYzg3M2I5ZTA4IjoiIjozMjoiMTNmZDZkZmQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNTE2MGQwYzk4ZmZjYjFjMjZhYWQ3NTVmNjc1ODkwMDBlMmJiMjVmYTk0MGU2YjFkODFkNzgwZjQyMTM1M2Q5IjoiIjoiMTU1MjYwNDc2MzQ1M2I0OGE1N2NlYTFhZWQ4MTEzZjQiOiIiOjMyOiI2NjBjNTE3NSI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImMzYTNlYTNhMDk3YzBjMmIzYTRjYjc4NDYyZDg3ZmQ1YThmMzQ4Njg3YzQxNTBlOWQzMzU0YjM4OGFiMTNkMTciOiIiOiJmNzc5NDU5NzkyNDFmYjNhNDU0ZDhlM2RhMTkzZTE2OSI6ImE2OWJhYzMxMjQxYTJjMDdkM2Y3ZTMzMWI3N2Y2NjJiMWU2N2NjYjgxYzA3ZjUyNTc4YjAxZjU3ODVkZTk0MzdmMDJlYjc2MjdjYTdiOWFmMDljMWNiNDI4ZmU5M2Q2ZGViMzFmNGQ2ZGQyZjA3MjlmODc0ODBiZGViOTJkOTg1ZGUxYWFhZDRiY2ViYzZmYmFkODNiZWRlOWE1ZGQxY2E2YTE1YmY1ZDhhOTZkNGVkYjViZWUxZjdkMTk1ZTliMmU1ZmIyMjIxYTU5NmQ2OWYyNTdjMThhMTQzZWRhODcwZTIyZDNmMmVkMjBjOWIzYjBkOGM4YTIyOWM0NjJmZmYiOjEyODoiNmI0YjFhODRmNDliZWZlMzg5N2Q1OWNlODU1OThhOWYiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlMTYyNjMyN2Q5ODczNDJjYmE1YzhjNjNiNzViNGVkNjU0NjNhMmI5YzgzMWY0ZjlmODAzMjVmYTg2N2QxZDczIjoiIjoiNGUyNTgwMGRlYWI3ZWNlYzJhMjMxMWY4ZmI0NGViN2QiOiJlYmFmZmQ1NThmMjRkYWUwMzExN2M2OWFjNGIyYjRhYWVhZmZlN2UwZTc1OTllYWJhNjc4YmZjZTIzYTk5MTRkYzlmODBiNjlmNGExYzgzN2E1NTQ0Y2JhMDgwNjRhOGY5MjQwNjRjYmE0ZDc4MzYyMzYwMGQ4YjYxODM3YTA4YjRlMGQ0ZWI5MjE4YzI5YmMzZWRiOGRkMGU3OGMxNTM0YWI1MjMzMWY5NDliMDliMjVmYmY3M2JlY2U3MDU0MTc5ODE3YmMxNWI0ZTg2OWM1ZGYxYWY1NjljMmIxOWNiNmQwNjA4NTViZTlhMTVmMmNmNDk3YzE2OGM0ZTY4M2YyIjoxMjg6IjhmYWEwZmZiOTEzMTFhMWEyODI3Yjg2ZmVjMDE3ODhkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkzOGRhNjRiODM3Mjc1YjBjODBjNDQyYmRmMjMwMWFhNzVlMzg3ZmU2NWE3NzVkMTBhOGVjODQwZjYyZmY0MjkiOiIiOiJkZWM2YWRlYjYwMjE2Y2JiOGE2YzNhZmJhNDlmYTIwMSI6IjRhYzE0NGJkOTVmNDA1NjQ5NDQ0ZjAxYWI2N2VmM2U0YzBhNTRmZGJkOTMzYjZiYTAwNTE4Yzc5ZGI0NWMyMmM5MDAzMGM0NWFhZGNmZGI1M2VjODE5OWJlMGNiYjIyZGJiOWFiOTM4YTg3MWY0YjNiMGM5OGVkMzI1OTBhMDUxYWJiOTQ2YzQyNzI2YjNlOTcwMWYxODNiMjA5Mjk4NWUzNDU3OTQzYTYzNTBmYmNhZWNlMmU2YjExMWIxNzllYTNmZDEwYWMwODBhNTc3YTE0ODE3ODUxMTFkNWYyOTRiYzI4NTE5YzQ3MGZmOTQzOTJhNTFhMmM0MGE0MmQ4YjUiOjEyODoiMjIxMWNhOTFhODA5YWRiOGNmNTVmMDAxNzQ1YzA1NjMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTI0MzY0ODRlYTFmNDU0ZDY0NTFhZDhkYmQxNTc0YjIwOGQ3YTNhYjRmYTM0ODY5Mjk5Yjg1YzI0MzQ4YjQzZCI6IiI6Ijk3MDQwZDJlYzA5NGZlMWM2NGZhMzViMzViNzQ1MWE3IjoiYmMxOTg2Nzc1MTNjZTBlNjY2OTdkZmU1MmIyMjMxNWZhNWQ4ZjkyMDQyZjM0Y2M5ZjM3M2EwMWY5NDYwN2RmMWE1OTkxMzJmNjBhZjAxMGVkOWI1ZTUyMTYyZGQ3YjE2MjkxMmI2OGIxMTcwMGUwOGY1ZmRhZmQ4NGQxMGY3NjBmYzA1ZWM5N2MwNWI4M2U1NTE1NTE5NGYzOTk1OTQwMTViOTBhMTljMDRmYjk5MmUyMjg5NDBmZTFiNTRiYTU5YzRiYjgzMThiMzNjYzBkZjFjYjFkNzFjMzg5NDczZGZiM2VlZmFiZmUyNjljYTk1ZGI1OWE3YmMwMjAxYzI1MyI6MTIwOiIyZTA4MGJhMTYwMTFlMjJhNzc5ZGExOTIyMzQ1YzIiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ZmIzZmM3MmViOGEzYWE1YjEwMmY5MDAzOWY4NTJjYzNmZDY0ZjQ2OTE1ZjVlNDlmMWQ5ZTAyZmU5Y2MxM2IxIjoiIjoiZjYxMjBmZWEzMTMzNjI1MjQ5MTdjNTNkOTBiYWZiNGYiOiI2MGMyYmU3ZmJkMTVmYWY4OTVmZDE5YTljZTc3NWZlMmIxODNiNDVjZmZhZmU0ZmNiZjUwZDQyMWJlYTk3MzQ3ZTQxYTk0MThjZmExMjliMmRkYTYzYjg4OWE3MDA2MzAxMDIxNWRiZTM4YzM3ZmVhZTE4YmMzMWIzNGYzMWI3MjZmMjIxNzdmMmI0YjlkNjQ4ZGQ0YWE4MGVkZmQxMmRhZmFlZTEwYmFhODMyMjQzNTQ0MzJkMWNiNjJjY2FiZTM4YmI4NDQ4ZDE2MmNkMGQzMGU5ODhkMmUxYTI0NThmZmRhZmFhY2JkZmY5Mjg3NTYzOTBmNjZkYzYwZDdlYTQ1IjoxMjA6IjgzZGUzZjUyMWZjZmRhZmY5MDIzODZmMzU5ZTY4MyI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2OTdjOTZkODBkMGEzZmE5YWYzNWI4NmYzMWZiNzFhMTdhZWQzMGNlODQxYzc5ODk2YmJjODg2M2IzYjNlZTA0IjoiIjoiM2E1MTYzZWM3ZTAwNzA2MTgzOGQ3NTVhYzIxOTg1NWUiOiJkZTUwYzEyZGE2MzIzMjc2OGQ1ZWI5OTIwZDQ5NjgzYjViNzExNGNiNzc0NDhmYTEwYjlkNjM1NTJlYzVkOWMyZWFjOTRiMzc1ZDExZjk0NDk1OWY5MDNiYjIwYzY5NjYzOWI2ZTdmMTA4ZWMxZTg3Mzg3MDA5OGM2MzFkZGFjYjJjMjUyNjhjZmMyNmQyYTRjYWNmYjdkZGE3MzgzMzc0YzU0NTZiY2Y0ZGFhODg3YTg4N2Y0MjkzZjhjYWExNDQxOTQ3MmE4YmY3ZmZkMjE0ZGZiMjc0MzA5MTIzOGI2ZDExNDJiMTE2YzJiOWY0MzYwYzZmZTAwMTVjZDdkZTgxIjoxMjA6ImNkNDU0MmIyNjA5NGExYzhlMDU4NjQ4ODc0ZjA2ZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2NmMxZDljZTNmZWIwZTk2NmMzM2UzZmQ1NDJlYzExY2MzMmYxOGMyNTE0Yjk1MzEwM2QzMmFiY2RjNzI2MzNhIjoiIjoiNDZmZGI4OGZkZGU5YjdkNzRlODkzODAyYTAzMDMyNTYiOiI1NWQyZjI2M2QyZTNjZjBiMzkwZmNlMWRkMWViZDVmNjY2MDg2ZjI2ZTFjZTJmMDgwMDJiZWRiYjgxMGFkYTM5MjJjNmJmY2Y2YTZhZGFhNTU2ZTllMzI2Yzk3NjZmMDJiM2ViNmUyNzhkYTJmYTNiYWE3ZGJkYjYzNzNiZTNjNmVjZmJlNjQ2YjFhMzllMjdjNWE0NDlkYjliNTU5ZTdlYTM0OTYzNjZiOGNkYmNhMDBlZTdhM2RlYTdmZGZiZWExNjY1YmJmNThiZDY5YmI5NjFjMzNhMGZkN2QzN2I1ODBiNmE4MjgwNGYzOTRmOWQ1ZDQzNjY3NzJjZWUzMTE1IjoxMTI6Ijk2Y2E0MDJiMTZiMGYyY2QwY2RmZjc3OTM1ZDMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkN2M5NDk0MjBkYzk0OTcyMzJjZDU4MTBmMzE2ZDExZjllODVkMzZjNDMwYjU5NDNiYTc5ODM2ZDg4YzFlYjkyIjoiIjoiN2VmOTc4OGZmMDljYmVlZGQ5NTY5ZDQ5MDgzYTQwOTciOiJjYTFkZTVjYzNmY2RlMjYzOGViNzIyMTBlNTUxZTljMGUwYTNmNTU3MGQ1YmU4M2E5YTQ0MDZiNTQ1ZDg1NGJmMTdlNzViOWNkMGY0YzQ1NzIyZmJkNzEzMTlhMzE3YjcyYTg3OTg0ODVlOTMxNmExYzgxMDI0MzJiODNiYzk1YWY0MmY2ZDUwNzAwYmE2OGY2ZjJlMTliNmFmNjA5YjczYWQ2NDNkZmE0M2RhOTRiZTMyY2MwOWIwMjRlMDg3YzEyMGU0ZDJjMjBmOTZmOGU5ZGRmZTdlYWUxODZhNTQwYTIyMTMxY2VkZmU1NTZkMWViZDkzMDY2ODRlMzQ1ZmQxIjoxMTI6IjgyMzM1ODhmY2EzYWQxNjk4ZDA3YjI1ZmEzYzQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZmU3YzcwODE1YWExMjMyNmNkY2JiMmQyZDNlMDg4YmJhYWVmOThiNzMwZjg3ZmU4NTEwYjMzZDMwZTEyYWZlIjoiIjoiZTAyNTNiZDFmMTllOTlhN2Y4ODQ4MjA2ZmI4YWM0YTQiOiIzOTc4OTdlY2E0ODU2ZjkwZDE0YzNjZGZlMWFkM2NiYTQ3ZTIzMTc0YWUyZGFiN2QyYTYzMjA4OTg1ODRlMDNiZmZhM2ZmZDUyNmY0MTZkN2IzYzU3OWIwZjM2Mjg3NDRlMzZlZWJiNWRmNTE5MjQwYzgxZDhiYmJmNWM1OTY2NTE5YzVkYTA4M2FiMzBhN2FhNDJkZWFlNjE4MGU1MTdjZGQ3NjRiN2Y3N2QxOWNjMWE4NDE0MTgxNzc1ODg4N2E4ZDcyNjVlN2U2MjI3OWI5ZDMzY2QyZjFiYTEwZmQ1NGM2Yzk2ZDRiOGE1ZGJlMjMxOGZlZjYyOWM4ZTJhZjBmIjoxMTI6IjQ3N2IwYTg4NGQ3ODhkMTkwNTY0NmJkNjYwODQiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYmVlZmIzODE3Y2IwMmQ2MTdmMzg1Y2YyMzcxZDUyYzhiY2JjMjllNWU3YTU1Y2QyZGExMzFjYTE4NGM2ZTg5IjoiIjoiZjc0MTU2ZDY0MDBhZTQ2YjYxMjUzMTg0OGJmZmUxOGYiOiIxYWJlMmFiMDVjZWNjZjIzOTEyNzMxMjZmZTRhNDQyNmI5NGQyYzNiOTdhN2YxY2QyZWU2YmI5NTJiZjRhNTQ2ZTk3MmI1YTE3MDFkNWRkYjBlNWJiN2EyNDhmY2I0NzEwN2E5ZmM3N2U0Yjk4MDZiNjhhMTE4NTAxMTlhYTIzOWZhOGJlMTM3MGUzYTJlMWE4YjE2OGY3MzIzYWZkZmM0Yjg5MTdkOTI1NzAxNjc4NDhhNTYxMzJkNjg4NzZhYmMzODZjMjU4YTkyMzNkYzhhOWViNzM0NDNiMDUyZTg0MmMzZDYzZThiNTM2OWFjZGQwMzg0MDRlNGU5YTRiMDM4IjoxMDQ6IjBjYjY3Y2VjMTgyMDMzOWZhMDU1MjcwMmRkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImU2ZjVmNjVjZTJmYzhlYzNmNjAyZjVkZjkwZWI3ZDUwNmRkNzcxMzM3OTEzNjgwYWMxNmJkY2QxNWM1NjU4M2QiOiIiOiI5MjEyYTU0OGM1OTc2NzdkMTc0N2U5OGNlNmZiMThhNCI6IjU1Y2E0ODZjMDE4M2QwMTM0OTI1ODgwZDJlMjFkZGUwYWY1MWM0Yzc3YzYwMzhhNWE5YzA0OTc4ODRlMGFhNDcxNWJkYjViNGJiODY0YWNjNzA4YWMwMGI1MTFhMjRmYTA4NDk2ZGY2YTBjYTgzMjU5MTEwZTk3YTAxMWI4NzZlNzQ4YTFkMGVhZTI5NTFjZTdjMjI2NjFhM2UyZWNmNTA2MzNjNTBlM2QyNmZhMzNjMjMxOWMxMzliMjg4ODI1YjdhYTVlZmJkMTMzYTVjZTc0ODNmZWVjYjExMTY3MDk5NTY1ZTMxMzFkNWYwY2IzNjBmMjE3NGY0NmNiNmIzN2MiOjEwNDoiMDhkN2NjNTJkMTYzN2RiMmE0M2MzOTkzMTAiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZTlhMDM5MTQzNWFjYjU3ZWFlMmU2MjE3ZTA5NDFjNzlhM2ZmOTM4ZWM2YTE5YjhhN2RiMmVhOTcyZTQ5ZjU0IjoiIjoiMjdjZDFkN2FmN2U0OTFlMzBjODExMGNjMDEzOTI1MjkiOiI3OTE0MGQzMmJiMzJkYWNlMDc3OWUyZDM3YTBmNzQ0ZDZkOTczZTk5YTI3OTk2MmI0M2E2YzBhZjYzNzcyZThhMGEyMWQ1ZDlkZDNjMzNkNGIyMThjYjJmNmYyNGRkOGQ5M2JiNGUxZTZhNzg4Y2I5MzEzNTMyMWVjZmVkNDU1ZTc0N2ZhOTE5Yjg1YjYzYjllOThiNDk4MGE4Y2NiM2IxOWQ1MGQ3MzU3NDJjYjU4NTM3MjBjMmFkMzdmYTViMGU2NTUxNDk1ODM1ODU4MzBmOGQ3OTljMGQyZTY3YzBkYzI0ZmM5MjczZDk3MzBmM2JiMzY3YzQ4N2E1Zjg5YTI1IjoxMDQ6ImZiYjQ3N2RkNGI5ODk4YTlhYmM1YTQ1YzYzIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDk2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTVhMTJlZWNhNjM3NjU0MjUyZTNlNDBiMzcxNjY3ZTNmMzA4YjAwZjJmZDJhZjY5NjIyM2U0Y2Q4OWUzZmQ0ZSI6IiI6IjhhMzc5M2I2NDQxMjU4MzYwZjdmNDgwMWIwM2QwYjI2IjoiZjU4MTBkYzVmMjVlNDliZDZkOTRiYzYzYzI0OTRhYTdhNTc5YTQwNTZhMjVmMWRkOWIyNzM0ZDBiODczMWVlNTI1MjNlZGQ1NGZmNDc1NjUxZDQ1YzIxM2UxYmYyNTQzMjdmYjBlMmM0MWE3ZDg1MzQ1YjAyYmNjOWQyN2IwODkxNWQzMzJlMTY1OTY3MTk5MWE0YmI3NDA1NTk2N2JlYmJiYTZlY2NlYjE4MmY1Nzk3NzEzMDYyM2Q1YTdiMjE3NWZhNWE4NGIzMzQ4Njg2NjFjMWY0NTBiOTU1NjI5MjhiNDc5MTc1OTc5NmExNzdkNTllZDE4YmJmMTQxZTJhZCI6OTY6Ijk5MjMwMDE5NjMwNjQ3YWVkZWJiYjI0YiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNkMzUzZjg3MGE5YzA4OGRlNTY3NGVmZDk3NjQ2YjljNTQyMGIyYmNkZmNmZmVmY2FkZDgxNjgyODQ3ZTUzMzEiOiIiOiJmMjY3ZmE5ODJhZjVjODUzNTliNjQ0N2Y5Yjc3MTVlYSI6IjdjZjU1NjMwODY3YWY1ZGZmNzQ3YzhkZDI1YmNjNTMxZDk0YTc3MzBhMjBiNmMwM2Q0NjA1OWVhOTNmY2FhMDBkMDdlZTE3ZGFkMGUwZGZmODE0YjAyZGZlZjBjYmUwMGIzN2ZkMmY1Zjk1ZWFkN2M3MmJlNjAwMTZmMjkzNGQ3NjgzZmMxZTQ3MTg1YzcyMTFjNDljYjAzZTIwOWIwODhlZGIxNGU1MzNkYmNiNzkyYWI3MDMzNzI4OTA0ZjdmZjEyMzgxYTIzNmRiYTk3ODk0ZWMxZmFmY2Y4NTNhYjE1ZmZmMzQzZjkyNjVkMDI4M2FjZWYxMDE2OGZmZDEyNzEiOjk2OiI5NTUzYjU4M2Q0ZjlhMWE4OTQ2ZmUwNTMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMjI3YzlmZjVkMTdhOTg0OTgzMDU2ZmI5NmYzOTkxOTMyYWU4MTMyMzc3NTI5YzI5MjM4Y2Y3ZGI5NGEzNTlkIjoiIjoiYjhmNjUzNmYzNzZhN2VmZTBlNjg0YWNmMzUwYmFlNzAiOiIxY2MyNWRhMzFmOTBkZTdmYTQ3ZWJjZTkyNzU0ZDNmYWE5OWY4OGQ0ZTI1Y2NhYjQ1NjQ1YzFhY2RmODUwZDU1ZDdmMDJmNjFhMGJmZGMzMTI1ZjI5MjU5ZDdkYThhYmVmNTMyZmUwOTY2YzYzZDM0ODY3NTNjOGEyY2I2M2EzOTM0OWEwNjQxYjJmMmI5NTI2YTAzYjk3ZDU4Y2E2MGZiYjA1NGM2YzE2NGZmMjgzNjY4OGIwY2FkNTRkZjJiMTY1YmMwODJlZWFlNjYwZTc2OGRkZTUxMzBlMzBmOGVkYzg2MzQ0NjY2MWM3NGRhNjliOWU1NmRlOGFlMzg4ZGEwIjo5NjoiNDRiOTVhMzdmYWIyMzJjMmVmYjExMjMxIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiMmE1N2VmODVmZmNmMDU0OGMzZDA4NzAxMmIzMzZjNDZmNjU3NGNmMWQ5N2NhMDg3YmZhZDA0MmVlODNlZWMyIjoiIjoiM2Q1ODA0MDJkMmE4ZGM0ZDc0NjZlNWRjYjQ1NmJlN2EiOiJjMmI5ZTk1YzE2ZTU1MDI4Nzk0YTYzZWY4MmQxMWZiODNhMmE3NWRjMzRhODFmMjM4ZTQ3MmMzMzI2NDUzNGJkZDU0Y2QwN2QwMmEwZWNmOTAxOWFkMWE2ZDZjNzc5ZjMzOWRkNDc5ZTM3OTQwNDg2OTUwZjE4M2JhZGUyNGZjYTJmMjRmMDZkNDAzN2IzNTU1YjA5ZmM4MDI3OWVhMzExNzY5NDczZWIwNjMwYjY5NGEyOTgyMzMyNGNkZjc4MGQ3ZDFhNTBkODlmN2EyM2IwNWY3YThjM2FkMDRiNzk0OWFhOWU2YTU1OTc4YmE0OGQ4MDc4YjVhMmZkM2MxYmJiIjo2NDoiMDcyZDQxMThlNzBjZDVhYiI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjM4ODllZDViZjJjMjdkNTE4YTY5NmI3MWMwZjg1NTkyZTMzMzdhYWU5NWI1YmYwNzI4OWU0YzVkZmRjMDg4ZCI6IiI6IjFhZDUzNDI4MGEwZmFjN2RjZTMxZjJhZTRmYjczZjVhIjoiYmUxYjlkYWJlYTMzYmI5NDQzZTI3ZjY3NGIyNzkzMWMwZmJhNjk5YTMzZGM4NmZhYjI5ZTUwYjc2YTk0NDEwMzA0NDRiNDY1MzE3YmJmMjk0OWZhZjkwOGJjMWI1MDFkMTFhNWVhMjA0MmU0YjQ2MGE4NWYzYmU1ODM2NzI5ZTUyM2Q5OWI1NmVmMzkyMzFkNWM2ZDhhZTJjMmFiMzZlZjQ0ZTJhYTAyYTFmMmM1NTljNmUzMzMyMTZjN2Y5ZWQ1ZjliODgwYTg4ZTkyMDIxOTIwNGM5OWEzYWU4ZjkwYWZkMTM5NjU2M2JjNTlhNjkxYTkzZTAwNzBiMGI1ZmQ5MCI6NjQ6IjFiY2VhMGFjMmMxYTBjNzMiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijk0ZTNlMmMxN2NmYjZmNTJkNGZkYmEzYmE2ZDE4YmJhODkxYjY2NjJlODVkZjE0ZDdlNjFmMDRhZGI2OWUwZTUiOiIiOiI4YTgwZWZiM2JmZTIyMDUyNjk5NzU0MzQwOWZkZGI0ZCI6IjA1ZGExYjBmN2FjNmVlZjQ4OGQzZjA4N2VjYWU3ZjM1YWJlM2VmMzZkMzM5NzA5ZGMzZmNiNWI0NzE5NzkyNjhlZTg5NGMzYjZjN2Y5ODQzMDBkNzBiYzVlYTVmYmE5MjNiZmI0MWQ4ODY1MmJkYWVjYzcxMDk2NGM1MWYzZTJhZTJjMjgwYjdkNmM4ZTNiOWE4YTg5OTFkMTlkOTJkNDZjOGExNTgxMjMxODdmMTkzOTdhZDFhZDkwODBiNGZmZDA0YjgyYjVkNjhkODlkYWNkM2U3NjQzOTAxMzcyOGMxMzk1MjYzZTcyMmIyOGU0NWRhYmYxZWY0NmI4ZTcwYjUiOjY0OiJmYWE1YzEzZDg5OWYxN2VhIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmZTVlNDc5YWQwZDc5ZGJmNzE3YTFmNTFmNTI1MGQ0Njc4MTllNDQ0Yjc5Y2IzZGVmMWUwMDMzYzgwZGRhZGQ4IjoiIjoiNDdjZTgzODA4M2ZkMDcwZDg1NDRjMGFkNTMzN2NkYzYiOiI5ODQ3NmJmMDVhMThjNGZmMWI2MDI0ZGQ3NzljMWFjMDZkODM4NzA1YTBhODNmZTQyYmVlNWZjNmViZjNiMmExYTUwNDliNjdmNGFhYmM4MjM5Y2Q2ZmY1NjUwNGJjYmFkMWUyNDk4YzE1OWJiZWMyYTY2MzU5MzM5NDVmNmVhNDllNWJjNzYzZGNmOTRmNGIzNjQzZDM4ODhmMTYxMDVhYmIwOTY1ZTI0ZjUxY2I0OTQ5NDA2MTI0MTQ1ZTlhZTMxY2M3NjUzNWI0MTc4NDkyZjM4YjMxMTA5OWRmMjc1MWY2NzQzNjNhZTdhNThmNmY5MzAxOTY1M2I3ZTZhNmYwIjozMjoiYTM5NTg1MDAiOiIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI3ZDRkZWRiNzFhOGY2OGNhNWNlMmI5ZTU2ZGE3NzJiZjVhMDliNzk4MWQ0MWNkMjlmNDg1YmQyZDFhZGI4ZDQiOiIiOiI3ZTZmMDM0M2M1NDUzOTcxN2E5N2I2YzhiOWY3ZGVjNCI6ImQzODZkYjc4MDQzZjcxOWI3ZTEzN2NiZjc5YTdmNTNkZGEyZmUzYmFjY2JlYmI1N2Q0OTlmNmViMTY4ZTUxNTFmMTAwODFkNzZiNzJhZTBmMzAxNjVlZmJkZGE0NjllODI2ZjkyNDZlNTlkYmNhZDVjMGIyNzY5MWMwMGQ2YzE5MmMyNDA3M2U5OWMxOWNmOGMxNDIwODdjMGI4M2M0Y2UyZmM3YmExZTY5NjM5NGU1NjIwYWIyZDExN2Q1ZGNkMmFjMjI5ODk5NzQwN2ZkNWRlMDdkMDA4ZGU4Zjk5NDFhNGE1ZjgwNzQ3MzZhNTk0MDQxMThhZmFjMDcwMGJlNmMiOjMyOiI1MGZkMTc5OCI6IiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWE3YWE4MzZhNDY5ZDI4NTQyZDBkMjRkMzIzMmZhZDI2NmRhOGZjODg5YzZiNjAzOGI3MjZkM2RhMjVmN2IyMCI6IiI6IjlmYWY3Y2Q4MDU4MDNlMTQzZWM4ZjNmMTM0NzVlZmQyIjoiMTAwNmM3MDdmNjA4NzI4YjJiZjY0NzM0MDYyYjEyYTU2MjUwNjJiY2RjYjgwYTNjZTIwNTgzNTJhMjkyMmQ1ZTZmYmUxOTY4MWI0ZjBkNzlhZDNjODM3ZjgxZTcyZjJmYmY4ZGY2Njk4OTRlODAyYTM5MDcyYjI2YzI4NmY0YjA1MTg4YzcwOGY3YzZlZGQ1ZjViYjkwYjg3ZmZhOTViODZkODRkNmMxYzQ1OTFiMTFkMjJjNzcyYThhZDdmMmZlNmJkOGI0NmJlMGU5MzY3MmRmMmU4YmZmOGJhODA2MjllMTg0NmNmZDQ2MDNlNzVmMmQ5ODg3NDY2NWMxYTA4OSI6MzI6IjA3NzY0MTQzIjoiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYTk0NDRmZDE3NmFjYmUwNjFkMDIyMWZkZTNkZGZjYzRmZjc0ZTk5NWQ5ODFhODMxMjk3YzRjYmRhNTFjMjJhMSI6ImMxNDZmZjVhOTg4NDk2Y2FkN2VjZWQ3YTJlYTQ3MWUwMTE3ZDVkNmJkMjU2MmMyM2NlOWRiNGJmMzZkODNiYTNmYzIyZTkwNDg2ZWMyODhhNjI3ZDIwOGUwYjJmZDNiNjVmODMwMWNmN2ZjNDFkOTc5NTk5ODFhOTVjZDFjZjM3ZWZmYzQ2ZGI5OWI5NGIyMWM5NDFjMzYxM2MyNmExMGIxYTZiNzc5M2Y0NjdkNThmZjUxMzQ2MTIyMzBmMWM0OWQ3ZTFmY2Y2NjRmZTUyZmM2ZWNhNDYyNzM5ODJmNmZlNzI5YjAwOWQ5MGViOGQ4ZTRhMGIwZGJlOTA3Yjc2ZGEiOiI1NzE0NzMyMTQ1NDcwZGExYzQyNDUyZTEwY2QyNzRiNSI6IiI6MTI4OiJkYjg1YjgzMGEwMzM1N2Y0MDg1ODc0MTBlYmFmZDEwZCI6ImEzY2FkOWE1N2ZhMjhlNmY2YWFhMzcxNTBhODAzYmY4Yjc3ZTc2NWYwNzAyZTQ5MmM0ZTVlYmIzMWFlNmIxMmQ3OTExNDkxNTNlNDY5YTkyYmI2MjU3ODRhNjk5ZmQ3Y2E1MTc1MDBlZTNmMjg1MTg0MGJhNjcwNjNiMjhiNDgxZTI0YmE0NDEzMTRlOGI3MTI4ZjVhYWNjYWY0YzRlMmM5MjI1OGViMjczMTBiZjAzMTQyMmI3ZmMyZjIyMGY2MjFkNGM2NDgzN2M5Mzc3MjIyYWNlZDI0MTE2MjgwMThhNDA5YTc0NDkwMmM5ZTk1YzE0Yjc3ZDViYjdmNTg0NmIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ODZkM2JkMDcxZTNmNDZmMTgwNjExYmM0ZWM4ZDc3MjZmZTcyYjZjNjE3ZTdkNDJiMzMzOWY1MzkxOGM5ZTM2IjoiMjE5ODNhZDY2NDQ5YzU1NzI2M2FlZjI5OWRhNmVlZjhmMzFkNTc2ZmMxN2VkMmRhYzNlODM2ZjdjMmNlYWZmMzA5NGIyNjk1NDUyNjgwZTE4OGRmMTBjMTc0ODEwZWZkMWZiYWE2YzgzMmJhZWRjZTBiOTJlNGM3MTIxNDQ3ZjY0NjFhYzkwOWI0MzAyY2RmNjU4MDk1YjFkZTUzMmI1MzZmYWE0ZmIzOGNmZGY0MTkyZWI1YzNmZTA5MGQ5NzlhMzQzNDkyZjg0MWIxZWRjNmViMjRiMjRiZGNiOTBiYmJlMzZkNWY4NDA5Y2U3ZDI3MTk0YTdiYjk5NWVjYzM4NyI6ImE3MTRlNTFlNDNhZWNmZTJmZGE4ZjgyNGVhMWRjNGI3IjoiIjoxMjg6ImNkMzBjMzYxOGMxMGQ1N2U5YTQ0NzdiNGE0NGM1YzM2IjoiOTYxMDkwOGEwZWIyZWU4ODU5ODFjOWU1MTJlMWE1NTA3NWEyMTJkMzExMDczYmJiMmZiOTI0OGNjZTA3YWYxNmVlNGM1OGJkYzhkYmU4MDZkMjg0ODBmOTA2NTgzODE0NmYzZTFlYjNhZTk3MDEyY2ZlNTM4NjNhMTNkNDg3ZjA2MWE0OWE2Yzc4Y2EyMmEzMjFmYTI1MTU3ZGJlNjhjNDdkNzhmMjM1OTU0MGNjOTAzMWVlNDJkNzg4NTVlZDkwZTZiOGVhM2Q2NzcyNWJmZmZjYjZkYjNkNDM4Yzk4MmI1Zjg4ZDliNjYwZjdkODJjYjMwMGMxZmExZWRlYmI2YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjZmZTgxZjE1YTAyZTJlY2Y0NmU2MTE5OWMwNTcxMDJkMTYwZTZiNWQ0NDdkNGEyNzU5NzIzMjNmZmY5MDhjM2UiOiIwYjRlZTAzODVlNjY2NWRhOGZkMmFlNDdmMmQwY2YxYzViZDM5NWEzYmI0NDcwNDdhYjVhM2FlMGI5NTM1NWJmODNkMDM4MTExOWE4ZDRjMDFhY2JlNjBjZDc4ODVkYTY1MDUwMmY3MzQ5OGE2ODJmZGM5NGY3YjE0ZjRjNzUzMjI2MDY0ZmExNWUzYTkwYTYwODNlMDUzZjUyZjQwNGIwZDIyMzk0ZTI0M2IxODdmOTEzZWUyYzZiYjE2YzMwMzNmNzlkNzk0ODUyMDcxOTcwNTIzYTY3NDY3Y2U2M2MzNTM5MGMxNjM3NzVkZTJiZTY4YjUwNWE2M2Y2MDI0NWU4IjoiOTFkNTVjZmRjZGNkN2Q3MzVkNDgxMDBmZjgyMjI3YzMiOiIiOjEyODoiY2Q3ZGE4MmU4OTBiNmQ3NDgwYzcxODZiMmVhN2U2ZjEiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGMyMDk1ZTEzNzkzODlkYzM4MTBlODgxOTMxNGY1YTJmODdkMTQ5NDIxM2M1YjFkZTFhNDAyZjdmNGY3NDZjNCI6IjI2ZWM4ZWJhYzA1NjA1MzhhOTQ4YWZiYzE4ZmI3MzBlOWE5MWYyMTM5MmJkZTI0Yjg4YjIwMGY5NjExNGIyMjlhNWI1N2ZhOWQwMmNmMTBlNjU5MmQ0ZGZiMjhiZjBmMDA3NDBjNjExNTdjZTI4Nzg0ZTkwNjZlYTNhZmQ0NGVjZjNhNDk0NzIzNjEwY2I1OTNjMGZlZmZjNjg5N2UzNDM1YzZmNDQ4Njk3YWQzZTI0MTY4NWM0ZTEzM2VmZjUzYmRkMGZlNDRkZDhhMDMzY2ZiMWUxZWEzN2E0OTM5MzRlYjUzMDNhZTZlZjQ3Y2U2NDc4Zjc2N2VmOWUzMzAxYWIiOiIxOTc4OGIyZTBiZDc1Nzk0NzU5NjY3NjQzNmUyMmRmMSI6IiI6MTIwOiJmMjZhMjBiZWE1NjEwMDQyNjdhMGJmYmYwMTY3NGUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmU1MzUxZWZjMDI3N2FmYzk3NTllYzI0NjRhMjJjYjQ0MDFmN2ExN2VmZDFhMjA1ZTdhZjAyM2M3ZWQzMGVlMSI6IjFlY2E5MTQwNmYzMzhmYzA5YzI5ODhiMWQ3ZGM4YzQwOWQ3MTkzMDBjMDM4NDBhNDk3ZDdiNjgwY2RkNWUwOWIxNDQ5MDM0NzdmNzExNmE5MzRlMWQ5MzFjZjM2OGFmMWZjMmEwYTBlN2NhYTk1NDc1YTNjZDdiZjU4NWExNmZkYTMxZWIzZjgyMDFkYjAyMTZiMzdhMTYzNWMxYzAzMDgzNmIzZGQwNWNhNWIwMTk0Mzg4ZmExOThlNzE3ODIyMTMxZDVkNDMxODY5MGVmODJkMzVhYzgwYjI3ZmZmMTlhZWM4ZjAyMGRjNmM2Y2UyOGYwODEzYmJiZjgyMzBhZDkiOiJjNmIyNjExN2Q5ZGJkODBjMWMyNDJhZDQxYWJlMmFjYyI6IiI6MTIwOiI2MTA1MWQ2YzA4MDFiNGE2YjZjYTAxMjRjMDE5ZjMiOiI5NTQ0N2FkZWQzMzZkNmMyMGQ0ODNhNmYwNjJkNTMzZWZlZDAyNjFhZDMyMWQzN2JmOGI3MzIxYjk4ZjU1YzBmMDA4MmNlN2YzZDM0MWIxOGZlYTI5YTcyZmM5MDlkMzBjZDhjODRhMTY0MDIyNzIyNzI4NzY3NGE5YjJmMTZhODFiMTkxZWNmM2I2MjMyZDY1NmMzMmQ3YjM4YmVhODJhMWIyN2Q1ODk3Njk0YTJiZTU2ZDdlMzlhYTFlNzI1ZjMyNmI5MWJhZDIwNDU1ZjU4YTk0YTU0NTE3MGNiNDNkMTNkNGI5MWUxY2VlODJhYmI2YTZlMGQ5NWQ0ZGUwNTY3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODE0YzJjZGZkZWVjZjM5ZDQzYmIxNDFmYmZjNjJkYWM0NGY3NTUyYzVlNWRhYzJkNDkxMzMwM2ZjODYwMTE5YiI6IjBkMzAxM2ExZDcxMzJmNjg1ZDAwMTQyMGRhYTZjN2I2NDNiYzM2Yjg4NzUxMWFjYzQ1ODgyMzdkM2I0MTJjNzllNGViYmEyOWMwODI0OGFkNDZjNzIzOWU4ZGFhMjMyYjc0ODNjOWM0ZTNkMWMwYmJlYmM2OTY0MDFlZmUyMWY3ZmQ2ZmMwNTI1YTRhYjgxYmQ5YTg5M2Q1ZjdhYjIzYjcwZWQwN2MwMGYzMzY0OWI4YTk5NmEwMDZkZTZjOTRmNzc5M2Y3Mjg0ODc5M2Y0ZDViMzEzMTFjNjhhYWUxZTcxNWIzNzQwOWZiZTUwNmRhYzAzOGEwOTUwZjA1ZmU4MmIiOiIwZGIzYWRlMTVjYjBkZWE5OGE0N2QxMzc3ZTAzNGQ2MyI6IiI6MTIwOiJlNjJmOTEwYjYwNDZiYTRlOTM0ZDNjZmM2ZTAyNGMiOiIzNzRkMDNjZmU0ZGFjZjY2OGRmNWU3MDM5MDJjYzc4NGYwMTFmNDE4YjQzODg3NzAyOTcyZGNjM2YwMjFiY2I5YmRkNjFlZDU0MjVmMjk3NWI2ZGE3MDUyYzQ4NTk1MDFlYjJmMjk1ZWI5NWQxMGJhNmIyZDc0ZTdkZWNjMWFjYWNlYmY4NTY4ZTkzYTcwYTdmNDBiZTQxYWMzOGRiNmY3NTE1MThjMmY0NGE2OWMwMWM0NDc0NWM1MWFkOWEzMzNlZGE5Yzg5ZDAwMWFhNjQ0ZjFlNDA2M2E4ZWIyYTM1OTJlMjFjNmFiYzUxNWI1YWFjYWVjOGMzMmJjZjFkM2M0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWFlNDU0MTExMGYyYmM0ZjgzY2Q3MjBiNWM0MGM4MzE1NDEzZDg5NmUwMzRiNzUwMDdmMTcyYmFhMTNkMjllYyI6IjVlYTgxMWU3ZmJmYzBlMDBiZjJhNmFiZmFjNTBjYWQ5ZWZkOTAwNDFjNWY3ZmI4ZjA0NmEwZmVjYmQxOTNiNzBhMmRlOGE3NzRkMDFkZDNjZDU0Zjg0OGNiM2U5ZjUxNTJlZTFiMDUyYmE2OThiZWJmYmExZmJiZGFlNDRhMjYwNDQ3ZDZlNjQ4MjY0MGFlNGQwMWM5Y2FjM2QzN2Q0ZmZlOWEwZGUwYjYwMDFkZTUwNGEzM2VmNzYyMGVmZTNjZTQ4ZWNkNmY1YjFiM2E4OTE4NWM4NmQ0ZDY2MmE4NDNmZjczMGUwNDBlMzY2OGQ2MTcwYmU0Y2NlZDhhMThhMWMiOiI4M2Y5OGVlYzUxZWU0Y2FlNGNiN2ZlMjhiNjRkMTM1NSI6IiI6MTEyOiJkZjQ3ZWVmNjliYTJmYWFiODg3YWE4ZjQ4ZTRiIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjIwYzliNjYyZWM0YmQxM2JmNThkNjRjYjBhNzE1OWIwZTdmZWU0NzAzYWY2NjI5MmJmNzVjOGJkNmU0MmU4ZGMiOiI0NWI2NGYyZWQ1YWM3MDc4OTBjMGMxNzI2YWRmMzM4NzcwY2U2YTcyOGZlODZiYjM3MmM0YzQ5NDA5YTMyNzA1Zjg4MWJjNGQzMWEyN2M0NTVjN2M3ZGY5ZGQyYzU0MTc0MzUyM2U3ZDMyZjg4OTMwZDk4ODg1Nzg0N2YwMTFiZTVmNWYzMWEzMWU4ODEyNzQ1MTQ3Y2JmZjVjMTI5NGQwZmQ0YTcyODVkYjQ4MzNmMjJiZjE5NzUyNTBkYTk5YzRkMGRkMmM5Njg4ZDdmODAwMWJiNmVmMmJjODk4Y2U0ZDQyYzViNzhlNzQ2NDViNTZjZTk5MjMzOGY0OWQ0MTgzIjoiMmJjMDg0N2Q0NmYzZDEwNjRiYmY4ZmU4NTY3ZjU0YTIiOiIiOjExMjoiNWExYmYyNWFhOGQ1YzNmZTVjZjFiZThlNTRhMSI6IjkwNzlkNjI3NWRiMDc2NjI1ZTg0NzRjMjkxNGZlNDgzZDQxM2Q1MzM5MjAyZjk4ZjA2YzNiMGVmMDYzZDhmM2QzMTAyOWRlYWY3ZjkzNDliZmVjNTdlNWNmMTFmNDZmMDJkNWE2NTIwYzc5OTJlZmM5NTFhZGJiZWE2ZDA4ZTUzZmFlYjEwZGZlOGI2N2VlNDY4NWRhOWVhNGZlOTMyNTUxYTY1ODIxMTQ3ZDA2ZDRjNDYyMzM4ZTZkZGRhNTIwMTdjMmJjMTg3ZmQ2ZDAyYjdkNTE5M2Y3N2RhODA5ZDRlNTlhOTA2MWVmYWQyZjljYWRiYzRjZDliMjk3MjhkMzIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwYTE1NTRkYjM3ZjJlMjc1NzMyYTc3ZTUyMWNiZDgxNzA3MjlkODY3N2E4NWRiNzNmZWFjZjNjNjZhODlkNjg5IjoiNTQyMWQ5M2I3ZTZlMDA5MTk3OGM2NzNkZjRmM2E0MDZhZWY1ZjEzZWI1ZTZmOTVkYTE5YjA3ODMzMDhjYmUyNmQ0ZmQ2YzY2OWNjNGE5ZjA2OWQ3ZTYyZTRjNmZhZDE0YjgwZTkxOGZlOTE1NTZhOWE5NDFhMjhiM2RiZjc3NmE2OGFjN2M0MmRmNzA1OWI1ZWQ3MTNlNzgxMjBhZWM4NGU3YjY4ZTk2MjI2YzJiNWUxMWE5OTQ4NjRlZDYxYjEyMmU3ZTQyZWY2Y2ZkYWUyNzhmYWRiYWUxYjNlYTMzNjJmNGU2ZGM2OGVlZjZhNzA0NzdiOGEzZmZjZmJhMGRmOSI6ImI5MTk0YTRkNDJiMTM5ZjA0YzI5MTc4NDY3OTU1ZjFkIjoiIjoxMTI6IjA1OTQ5ZDU5MTc5M2NhNTJlNjc5YmZkZjY0ZjMiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2FiMWQ5YmI1NzFjNGJkYzlmM2VmMzQwOTE0YmRkY2ZlMGM4ZTc3MThkNGEyNTMwMzM0MzcyY2VjODZlNWZjYiI6IjgwYmNlYTMwN2UwMDk3NDU3MjRkNWYxNWQyMWYzYjYxYTVkNWE4NDAxNTMwMzQ2YjM0YTJhZGZhMTNlM2U4YzljOTMyN2Q2ZmFkOTE0YjA4MWU1NTRmYmU2YzFjNmZlMDcwYjU2NjYyMGU1NTk1NTVjNzAyYzBhYjViZWNmNjFlYTFkOWRlNjQzNTFjZTQzYjIyNzZlZjRlMjBiNWFmN2NlNDNkYjZkMjEyODZhZjRlNzQwZWYwMGM2ZDc5MDcwNWFmY2YwZWU0ODUwZmZmYzEyYzY2MmYyYmQ4MjEyZmViMjFkYjMxMDY1YWI4ZjcxN2E3NTA5YzIxMzM1MmI4NjkiOiI2YTUzMzU5MDEyODRkZDNiNjRkYzRhN2Y4MTBiYWI5NiI6IiI6MTA0OiIwNGI4ZTU0MjNhZWU4YzA2NTM5ZjQzNWVkZCI6IjM2Yjk2MDJlZWUyMGI4ZjE4ZGNlMDc4M2NkMWUwMWE3OTlmODFhZTBhMWNlNmQyOTNhMjZjNjJmNDdlN2RhZDg1Yzg0NDY2OTdjYzA5YzgxZDNkOWVhZDZmOWU1NWM0MTQ3MjExNjYwYzhhZWE5NTM2Y2M1NTE2ZTk4ODNjN2Q2ODU0YmU1ODBhZjhjZDQ3YmEzOGZhODQ1MWYwZGFkOWM5MDRlMGU3Zjk5OTdlZmY3ZTI5YmY4ODBjZDdjZWRkNzk0OTNhMGUyOTllZmU2NDQwNDZlNGE0NmJmNjY0NWRmYjIzOTdiM2E0ODJhMzQ2YjIxNWRlYjc3OGM5Yjc2MzYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3ZGRkYmQ1NjU3ZTIyNzUwYmZlNmJhYTcwYTFmNGFjNDZjMWVmOGJlZTU3M2E1N2NmY2VmNTBiNjZmODVlNTkzIjoiMmJmNWFiYTgzYTgxNjFiOWQyMWZmMjkyNTFmYjBlZmE2OTdiMWVhOWMxYjNkZTg0ODFkNWZkNGQ2YjU3YWZkYTBiMDk4ZGVjZGM4Mjc4Y2M4NTVmMjVkYTQxMTZlZDU1OGZjNGU2NjVhNDlhOGZmZjNhZWYxMTExNTc1N2E5OWMxMGI1YTczYjFmNzk0Zjk1MDIxODZjMTNkYzc5NDQyZjkyMjZiYmY0ZGYxOWE2NDQwMjgxZjc2MTg0OTMzYWVhZTQzOGEyNWY4NWRiZDA3ODFlMDIwYTlmN2UyOWZiOGU1MTdmNTk3NzE5ZTYzOWNiZDYwNjFlYTNiNGI2N2ZiMCI6ImZjYjk2MmMzOWU0ODUwZWZjOGZmZDQzZDljZDk2MGE2IjoiIjoxMDQ6IjFkOGNkYWRjZjE4NzJmYjJiNjk3ZTgyZWY2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjY5MTZiOTNiMjcxMjQyMWYxZjQ1ODJkZTdlYzQyMzdjNGU0MmUyYjMyYzdkY2VkMmY4YmI1YmQyZTA1OTgzMTIiOiIzNzM5Y2NhMjAyNzlhMzZkZGI4NTdhYzIyYmVhZTkwMWE0OTUyOWIzMTgyNDYzYWI4MWE3YzQ2ZTQzN2ViMGIwNTcxZThjMTZmN2I2MjZlY2Q5ZjJjYTBjZDgzZGViZTNmODNlNWQ1OGVkMzczODg5OWY0YjYxNjc1NWViNTdmYjk2NTIwOGYyNjE3MzZiZGY3NjQ4YjFmODU5NWM2YjZhNzc5NzY4MTE1ZTMwNzdkZmVlN2E0MmQ0NGI1NTVhNTE2NzVmYjFjZTk5NjFkMGUyMWIyYjliNDc3YzA1NDExODQzNTBlNzBkZWNmN2MxNGE0YzI0YjhhNmNkNWZlZDhlIjoiYjRkOTI0OGJiNTAwZTQwZGU5OWNhMmExM2U3NDNmMWMiOiIiOjEwNDoiMDkwZDAzNDQ2ZDY1YWRjYzBhNDIzODdlOGUiOiIwMjU1YmU3YWM3YWM2ZmViM2EyMWY1NzJmNmE1OTNjYzhhOTdmMTdhZjcwNjRjODBlNDc4ZjRhNmM0NjljZjk0ZDYwNGJjMDE0YjAwM2JmMjg0ZDIxNjE2MWE5YzhhNDkzYWY0M2M2YTBkOGNhZjgxM2E5ZTZmODNjN2VkNTZkZDU3NTQzODc2YjExZjc2YWEyYmU4MGRjZDc5ZDE5YWM2MWYwMGZhNDIzYWMyZjUyZmFlN2E4MzI3Y2Q5MTQ5NGNhNDExNmZlYjczNTk4MGFkMGE0YjE0NDVjYjdmMzhjYzcxMmI4YWVlNzIxNzllNjViOTdmY2EzODY5NGUzNjcwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNzUxYzhiNzI0MTY1MDA5YThiZDk3YTlkMmEwZTIyY2FlNWE5NWM0NzQzYzU1ZWVlZWYwYTZmZTdkOTQ2YmVjIjoiZTg1NDZhNWFmMWUzODExNDgyMmU2MGU3NTU2M2E5Mzk5Yzg4Nzk2ZjMwM2M5OWM2OWQxZjNjNTAzNzlkYTgxZTFjZDViNWE0YTcyMWUyM2M1OWRhNThlYTQzNjFiN2ZmNTg0MDhlNTA2YTI3ZmVhMjRmOWEyMzVjNmFmN2Y3YTViZDkzZmEzMWU5MGVkZmMzMjI4MjFjMDhkNjMyNDEzNDgzMGI3ZmUxNjBiNGEzZTZkMjc4NjZhMTBlNmU2MDc2MmEzMTYxOGVmOTJmNWM2N2NjYjFkZWIxZjFiMTg4ZjBlNjg3MTY1ZTdjMzY2Yzc0MTg5MjBkZjRmNGZjZGNhZSI6IjE2MGM1MGMwNjIxYzAzZmQxNTcyZGY2YmE0OWYwZDFlIjoiIjo5NjoiOWZlZjliZWNmMjE5MDE0OTY3NzI5OTZmIjoiMTc1ZmE2YjdjZDc4MWVjMDU3ZmY3OGJhNDEwZjI4OTdhOTIwNzM5YjVmYzRmMDRiYzliOTk4ZmJjN2NjMThlMzI3YWQ0NGQ1OWIxNjdlNDYyNzI1NmFhZWNkOTdkYzNlNGE3YzliYWFmNTFkMTc3Nzg3YTdmNGEwYTJkMjA3YTg1NTc1M2M0NzU0ZDQxMzQ4OTgyZDk0MThiNmIyNGI1OTA2MzJkNTExNWRjMTg2YjBiYTNiZWMxNmI0MWZhNDdjMDA3N2M1ZDA5MWVjNzA1ZTU1NDQ3NTAyNDgxNGM1MTY3MTIxZGQyMjRjNTQ0Njg2Mzk4ZGYzZjMzYzIxMGU4MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGZhZjMyYzIyYzJhNGVlMzhmZTRiNWNlMDhmOThmZGY2ZjgzYjUwMzhkY2JhNWVjODMzMmIzZWViNWM3MTBjNyI6IjhhNTU2Y2MzMDA3NTc1M2M2ZTk0YzJmNjY5YmNhMjA1OGZmNmFiY2JmZmZmYzgyZGE3Y2ZjYTBhNDVhZjgyZGZiNGNmNDg3Y2ViNGVkZTcyYmU4N2VlNGM4YjcyZGIxZTk2NDU5ZGUxZGM5NjcyMTQ2NGM1NDRjMDAxZDc4NWYyMTg4YjlmY2NhZWM0YjFhMzc5NzBkMzhiMzI2ZjMwMTYzZDJmZGZkZjhhMmNlNzRhZWM1NWFiY2Q4MjM3NzJiNTRmODA4MWQwODZhMmU3YjE3YjQwODZkNmM0YTVlYTY3ODI4ZWYwYjU5M2VhMTM4N2IyYzYxZjVkZmU4ZjJiYjAiOiIwNDg4NWE1ODQ2ZjVmNzVhNzYwMTkzZGU3ZjA3ODUzYyI6IiI6OTY6IjBjMTM1MDZlZDlmMDgyZGQwODQzNDM0MiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBkZGRjM2QyZjgyYmRjZGJjMzc2NDhhNmI5YjQxNmFmMjg3NTM3NDBmOGU5OThjZDFhNTJhMGI2NjUzNjlmMWMiOiIwN2JmODRiMTViMjE5NTFmZDIyMDQ5YmU2OTkxYTY3MjUwM2FlMjQzYjhkMjg1ZmIxZTUxNWUxZDJjMzZiZmQ1YjBkMGJjY2U4NTc5MWYyY2VhOGY2MTZhZWQ2OGE3ZDljZjRlYWY3NjQxOGU4YjFlYzI3NzUxZGU2N2NiZmQ5ZDlmNzkwNWIyNjY3OTA0ZjEwZDU5ODUwM2YwNGMwNGVhMDBhNjgxZmY4OWE5YzQ0NmQ1NzYzODk4NDMwYmQ3YTlkZmViZmU1NDRlM2VkM2U2MzliMzYyNjgzYTY1MWUwODc2MjZmZmE2M2MwYzJiM2UwZGQwODhiODFiMDdmNzVlIjoiMGE5M2I4ODNjYmQ0Mjk5OGFlMmUzOWFhYjM0MmNiMjgiOiIiOjk2OiI1YzM3OTE4ZWRiN2FhNjViMjQ2ZmQ1YTYiOiJmZjdiN2IyZjg4YjhjNmY5ZjliYWQ3MTUyODc0ZTk5NWVlYTBmZjFjZTFlY2Q5YjhkNTYzNjQyYTM3YTMxNDk5ZjE0ZDcwZjBkZDgzNWI3YWRmODA5Mjg0OTdmODQ1ZmQ4YzI3ODZjZDUzYWYyNWY4YzlmZTFiYmEyNGUzYzM4NjAxNjI2MzViYmVkNThmMDZjZjZjOTk2NmJiOWI1NzA5ODdhNDgzMjkyNzliYjg0YWZiOWU0NjRiYjRhZDE5YWU2NjAwMTc1MDg2ZTI4OTI5NTY5MDI3YzUyODVkMmVkOTc2MTVlNWE3ZGFkYTQwYmEwM2M0NDA4NjFmNTI0NDc1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMGIxYTYyZTQ2ZTc3MTIyNzdmYzcxMWUxOWQwYzBjODY1ZWU3N2I0MmFjOTY0YjcyMDJkYmNhZjQyODA4NmMyIjoiN2RkN2MwNzg3ZmRiZWE0YWFjZjkyOTM0MTY1OWRjZjRiNzVjYmNhOGY5MjAwMWU4YjYyYTRkN2I0MDI3MmM1NzU1ZmE5YzQ0NTg1N2RiMDUzMjhkYzExY2U1MjIxZjA0NGY0YjNkYWZiZjBlMmQ3MmExYWQwZDNlNGM4MDQxNDhkYjU3ODIxODY5MGNjYzYyMGQ4Yjk3YjQ0NTBmZjgzNDAwYTZjYWFhOTU5NjE3NjExNDQ2YTY2MjcxMzhhNDA2N2JlOWVhNDEwZDRiMDU4MTAyMmFiNjIxOTI4MjA1YjRhNDQ4MDU2MGZjNGMyYzNiMzlhMjgwNTY4NDAwNmYzNSI6ImUyMDk1N2E0OWEyN2UyNDdkMDAzNzk4NTBmOTM0ZDZjIjoiIjo2NDoiYzk5NzUxNTE2NjIwYmY4OSI6IjkzMDc2MjA0NzlmMDc2YzM5ZjUzOTY1Yzg3ZDIwYzJhZmYxMWM3MzZjMDQwZGJhNzRjZDY5MGQyNzU1OTFhNWRlZmM1N2EwMmY2ODA2ZGU4MmViNzA1MTU0ODU4OTQ4NDM2NGY2YzliOTFmMjMzYTg3MjU4ZWRlMWVlMjc2Y2IyYzkzYjRmYzc2ZjRkN2U2MGNiZDI5YmEyYzU0Y2I0NzljMTc4ZmE0NjJjMWMyZmI2ZWViM2YxZGYwZWRmYjg5NGM5MjIyYjk5NGM0OTMxZGVkZjdjNmU4ZGRlY2JkZTM4NWRkZjQ0ODE4MDdmNTIzMjJhNDdiZjVmZjcyNzI5OTEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZmY2MxYzg4ZmJhMTcyM2IzYWI1N2I0NThkOWJmZmI5OGI4NzhjOTY3ZmI0M2I5ZGIyYWUwNzUzZDMyYTNiYjEiOiIxOWI2ZGVjODZkOTNjNDY2MzA3ZGUzYTM2YzA3OTFlZDEwMTBiMWI5Y2Y4ZDMwMzQ3YWU0NmUwZjkyODNjOWZkYTQzZGE4Y2I0OTFkZDE3Y2M0Mjk4YjFmMGI4NzZkNmEwZjRiY2JjOTY2N2ZlMzQ1NjRiYzA4ZjhmN2I2NzA0NTA1N2QxOWY0YmYwMjdiYzgzOWU1OTA4MjJmYTA5YTVjZWYxYWYxOGU2NGEwMTE2YWEyYTAxYTNmMjQ2YzJiNTI3MmMxOGM5YWEyM2VmZTY3NGJhNTNkNTMzYWU4ZjA2OTVjYjc4YzExNTVjZGM3YTlkN2ZhZTJjNDU2N2RjMDdjIjoiZDUzM2MyMTcwYzVkYzIwMzUxMmM4MWMzNGVmZjQwNzciOiIiOjY0OiIxNjdlYzg2NzVlN2Y5ZTEyIjoiMDUzOTI4N2FjNTQ2ZmU1MzQyZTRjM2MwZWMwNzEyN2RjZDIyODk5YWJmZThjZGQ2ZTg5ZDA4ZjEzNzRkNzZlODc3YmVjNDg0NGQwNmUwYTlmMzJkMTgxYzhkOTQ1YmExNmE1NGNlMzcyNWZhZTIxZDgyNDVjMDcwYTRkYTBjNjQ2MjAzZDZiOTEzMjViNjY1YWI5OGMzMDI5NTg1MWM1OTI2NWI0YWI1NjdiOTY4YjZlOTg1MzZiNzg1MDczOGQ5MmU5NjI3YjRjOWM2ZjVkOWFlMjUyMDk0NDc4M2Q4Zjc4OGExYWExMWYzZjUyNDU2NjBkNDFmMzg4ZTI2ZTBhMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTVlOTRiMzM5YzNiYWZlMDY4ZWY5Y2MzMDc4N2NjNjcwNTg1MDExNDk3Njg0Mzc3N2M5MmI0YjMzMTgwMTY1MCI6IjE0N2NjN2JjNDAwOGRhZGYxOTU2NTIwYjU5OThkOTYxNDk5YmRmM2Q4YjE2ODU5MWFkYmZkOTk0MTFhZDdiMzRlYjRiMmE1YzFiYjA1MjJiODEwZmVjMTJkZDdjNzc1Nzg0ZDdlY2RjNzQxZTZkZWM4MTkxMzYxZTZhYmY0NzNiMjE5MjIxODAxOTUxYjRkNWZmZTk1NWFiNTBlZWY5Y2ZmZGZlZTY1YmEyOWRkZmE5NDNmYjUyZDcyMjgyNTMzOGMzMDc4NzBhNDhhMzVmNTFkYjM0MGFhOTQ2YzcxOTA0ZDAzMTc0YjFlNGE0OTgyMzhiOWQ2MzFhNjk4MmM2OGQiOiIyZTJiMzEyMTRkNjEyNzZhNTRkYWYyY2NiOThiYWEzNiI6IiI6NjQ6IjUyNjZlOWM2N2MyNTIxNjQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxM2M5NTcyYmRlZjYyNTEwZDg0ZjJkNDE1Y2M0ODFjZDFlNzFiOWMxMTMyYjQzZTYzYjIxYmE0ZTE2ZGU5YjM5IjoiN2M3OGU2MzRkZWM4MTExNzNmZjNjNGE5YTQ4YWUzYWU3OTRmYmQyYWVmZDRiMzE3MDE3NzdmZjZmY2I2NzA3NDRjNTkyYTFkMjk4ZDMxOTcxNzg3MGRjYTM2NGIyYTM1NjJhNGZmYTQyMmJmNzE3M2M0ZjdlYTliMGVkZjY3NWU5NDhmODM3MGZmZDBmZDBkNTcwM2E5ZDMzZThmOWYzNzViOGI2NDFhMWIxZWVjZDE2OTJhZDFkNDYxYTY4ZDk3ZjkxZjkwODdmMjEzYWZmMjNkYjEyNDZlZTE2ZjQwMzk2OWMyMzhmOTllZWQ4OTQ2NTgyNzdkYTIzY2VkMTFlZSI6ImE4MzM5YmE1MDVhMTQ3ODZhZDA1ZWRmZThjZWJiOGQwIjoiIjozMjoiZGYzY2FiMDgiOiI5MWY5NzgwZGFlZmQyYzEwMTBjNDU4MDU0YWM2ZTM1YmFhODg1Y2RkMmM5NWUyOGUxM2Y4NDQ1MTA2NGUzMWUwNzM5ZjI3YmYyNTljYjM3NmFiOTUxZTFjNzA0OGUxMjUyZjA4NDljY2I1NDUzZmM5N2IzMTk2NjZlYmJmYmM3ZWYzMDU1MjEyYTYxNTgyZDFiNjkxNThmM2IxNjI5OTUwYTQxYmM3NTZiZGVkMjA0OTg0OTJlYmM0OWExNTM1ZDFiZDkxNWU1OWM0OWI4N2ZmZWJlYTJmNGFkNDUxNmVjZGQ2M2ZhNWFmZGE5Y2NlOWRjNzMwZDZhYjI3NTczODRhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzMGExNGNhNTM5MTNhY2JiMjE1YjRlNDE1OTA4MzEwNmRiM2ZmZjgzY2JlZGQxZTU0MjVmNjVhZjFlOTRmNWRkIjoiOGM1ZjczZWUxNTQ0NTUzYjcxMmFkN2ExNGYzMTM3OWM4ZDU0YTRlNDMyZmI2YzUxMTI0MzY5ODhkODNjNGU5NDk1NGIwMjQ5YjQ3MDUzOGZiOTc3Yjc1NmZiZWU3MGI4MTFkNGRjMDQ3YTg2OWUyMDdiYjBiNDk1ZjFlMjcxZDAwMzRlOTEyMDAwZTk3NTk0MDMzZTBkZWRkZTA1OTFiMjk3ZjhhODRiYWZjYzkzYTQ2MjY4YTViYmExMTdiNTU4ZjFjNzM1MTNlOTcxYzgwYTcwODNlMTcxOGZjMTJkMGNjMGQ5OTZhOGUwOTYwM2Q1NjRmMGI4ZTgxZWVhMjhiYyI6IjRmMjNmMDQ5MDRkZTc2ZDZkZWNkNGJkMzgwZmY1NmIxIjoiIjozMjoiMThlOTJiOTYiOiJiYjRiM2Y4MDYxZWRkNmZhNDE4ZGQ3MWZlMjJlYjA1Mjg1NDcwNTBiM2JmYmFhMWM3NGU4MjE0ODQ3MGQ1NTc0OTljZTg1NmRlM2U5ODgzODRjMGE3MzY3MWJmMzcwZTU2MGQ4ZmRhOTZkYWJlNDcyOGI1ZjcyYTZmOWVmZDUwMjNiMDdhOTZhNjMxY2FmZGYyYzg3OGIyNTY3MTA0YzQ2NmY4MmI4OWY0Mjk5MTVjZjMzMzE4NDVmZWJjZmYwMDg1NThmODM2YjRjMTJkNTNlOTRkMzYzZWFlNDNhNTBmYzZjYjM2ZjRjYTE4M2JlOTJjYTVmMjk5NzA0ZTJjOGNmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlNjlmNDE5MTQwMjg5YWMyNWZiMGUyZWY5Y2M0ZjdlMDY3NzdhYzIwZjdkNjMxOTE4ZDFhZjBjODg4M2I3ZDZhIjoiZmY4ZGZhNGU3MDQ5MGVhOWM4NGNiODk0ZGM1ZDdlMWI5MzVlYmNkZWE4MGEzOWM0MTYxZDRkYjQyY2JiMjY5Y2M4NmFiZDM4MWFmMTVlYzlhNGE0MmVkMThjMWVlZDU0MGRlY2VjMTk3MjJkZjQ2ZjIyYWEwNjg4MzI5N2NiMzkzZmIyM2U0YmIzMWE4MTdlODgzNTdhYTkyM2M3ZWNiY2YyNGMyOGEwOWY2MjJkZDIxZmE3MGMwYTAyMTkzMDI0ZmRjZWZlYWE5NmNjMWI1MGY4MWE2NWRmYTllMWJiNTEyNmYwYzk3NjZhODYxZWVkMDk2ZWMxNWZiMDdiMGY4MSI6IjUzMTI0OGFmZGFhZjFiODZjZjM0ZDIzOTQ5MDBhZmQ5IjoiIjozMjoiYzY4ODVjZGQiOiJmNzUyOTllMGVhZDM4MzRmYzdlYmQ0YjIwNTE1NDFiNTk4YWQ1N2NjOTA4ZmRjZDQzMjRjZjRjY2Y3ZGNmN2IzZjA3MzdhZDZjMDI2Mzk5YThiMWI2ZDNkNTAwMTFiM2M0OGVhMmM4OTgzM2I0YjQ0YzQzNzY3N2YyMzBiNzVkMzY4NDg3ODFkNGFmMTQ1NDY4OTRlZWNkODczYTJiMWMzZDJmY2RkNjc2YjEwYmQ1NTExMjAzOGMwZmRhYTdiNTU5OGZlNGRiMjczYTFiNjc0NGNiYTQ3MTg5YjdlMmE5NzM2NTFiZmMyYWFhOWU5YWJlYTQ0OTQwNDdiOTU3YTgwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDA0YTVkMWFjOWUzMmY5Y2FhYmZmYmZhNDg1Y2U5YzI3ZWRjOWU1Y2RlMGYyYWFiNGYzMmNlMzEyMTQ0OWI4OCI6ImI2M2VjNGQyODg1NGI3ZmUyZDRkMTM5NzNmNWJjYjE2Zjc4NDk0Y2UyNWNjMjgyMGRlOWQwZGMxZDhkOTFkYjFmMTliYzllMDFjZWU4NDE4YzllODhhNjliMmYzMGNkYmIwZGJkYmI1MGJlNzFlMWU2NjZjMTExYzEyNmYyYjcxOTdjMDJmNjlhMWIyZWM1ZTFiZjQwNjJiMmQwYjIyZmIwZmExNTg1YjRlNjI4NmIyOWY2YWM5OGQxYjEzMTlkZDk5ODUxZmE2OTIxNjA3MDc3ZDI5NDcxNDBmZGVlZWExNDViNTZlYTdiNmFmMjc2YzlmNjUzOTNiYzQzZWRlMzMiOiJiNmU2YzA3OGU2ODY5ZGYxNTZmYWE5YWMzMmYwNTdjMyI6IjZlYmM3NWZjOTMwNGYyYjEzOWFiYzdkM2Y2OGIyNTMyMjgwMDljNTAzYTA4YjdiZTc3ODUyZGE5ZTFhZmJlNzJjOWFiMzc0NzQwYjBkYzM5MWZhNGQ3ZTE3ZGU2YTBhYTA4YzY5ZTZmNWM1ZjA1NDExZTcxZTcwYzY5ZGZiY2Y2OTNkZjg0YzMwZjdhOGU2Yzc5NDllYTFlNzM0Mjk3YzBlYTNkZjliN2U5MDVmYWE2YmJkY2FmMWZmMjYyNWEzOTM2MzMwODMzMWQ3NDg5MmNmNTMxY2IzZjZkN2RiMzFiYmU5YTAzOWZjYTg3MTAwMzY3NzQ3MDI0ZjY4YzViNzciOjEyODoiOTRjMWI5YjcwZjljNDhlN2VmZDQwZWNhYjMyMGMyZDMiOiI1NmEwYWM5NGYzZWM3YmUyNjA4MTU0Zjc3OWM0MzRlZTk2ZGI1ZWQ0ZjVhNmUxYWNmYjMyMzYxY2UwNGUxNmUxMzM3YmU1OTc4ZGYwNmQ3YzRmNjAxMjM4NWZiOWQ0NWJiMzk3ZGMwMGYxNjU4ODM3MTRiNGE1YjJmNzJmNjljMDE4ZmZhNmQ0NDIwYWQxYjc3MmU5NDU3NWYwMzVhZDIwM2JlM2QzNGI1Yjc4OWE5OTM4OWYyOTViNDNmMDA0ZGUzZGFhZWY3ZmE5MTg3MTJkM2EyM2NhNDQzMjk1OTVlMDhkYTE5MGUzNjc4YmM2YWQ5YjUwMGI5Zjg4NWFiZTIzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjU2ZjBjOTgwYWNmNzg3NWNmN2YyN2Q1M2FkNGEyNzZhZGMxMjZkMGI5M2E1Nzc0YWM0Mjc3ZWVjYWQ0MzA5ZSI6IjJjOTQyOTllMzZiN2M0YTgyNWVjYmM1YTc4MDkwNjFlMGE2NzYxNzY0YTVhNjU1ZmZkYjBjMjBlNWMzZmNiMTBmNGU5M2M2OGFhMGEzOGMyYWNjNWQwNmYyYjdjNGZmNGZjZjgxNGI1NTFiZmVmYTI0OGRiZTA2YTA5YTBmMTUzMjEzNTM4YTMxZmE3Y2Y3ZDY0NmI1YjUzOTA4ZDg5NzhmNTE0YzljNGQ2ZDY2ZjJiMzczODAyNGI1ZjljM2ZkODZiNmRhMGM4MTgyMDMxODNmNDIwNWYxODZlYTQ0YTU0ZWRiOTExYjFhMTdjNDI0Yzk1ODUyYzhkMjcxYjJlOTMiOiJiMDA0YzA0OWRlY2ZiNDNkNmYzZWMxM2M1NmY4MzllZiI6ImIyMDQ1Yjk3ZmJiNTJhNWZjNmZmMDNkNzRlNTlkZDY5NmYzZjQ0MmMwYjU1NWFkZDhlNmQxMTFmODM1ZGY0MjBmNDVlOTcwYzRiMzJhODRmMGM0NWJhMzcxMGI1Y2Q1NzQwMDE4NjJiMDczZWZhNWM5YzRiZDUwMTI3YjJjZTcyZDJjNzM2YzVlMjcyMzk1NmRhNWEwYWNiODIwNDFhNjA5Mzg2ZDA3YjUwNTUxYzFkMWZhNDY3ODg4NmJhYzU0YjBiZDA4MGNjNWVmNjA3ZGNhMmEwZDZhMWU3MWYwZTM4MzM2NzhiZjg1NjBiYzA1OWRhZTM3MGVjOTRkNDNhZjYiOjEyODoiZmNlNzIzNGY3Zjc2YjVkNTAyZmQyYjk2ZmM5YjFjZTciOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWM1MDI3YzM2ZTZjYWExYjNlNWU0NWZlYWQzMmI1ZTMxMjZhYzQxZjEwNmM0OTFiMGIzYTdjMTY1MDJmNGZlNiI6IjU4ZjBjZWFhMzFjMDAyNWQyZTZiYjU4NzIwY2NlNGI2NGY1ZjZjNjU3Yzg0N2FlNDI5MzZlYjFlMzQzZmVhMzk3YzhhOGNmMmY1ZWYwMmZmYWVjMjVmNDMxOTAwZGNiMDkxMGNmMzJjZWE5ZWNhM2I3OGFlZDFjNDUxYzdhZjUxMDY2NDg5Zjg3YjJhNWY4Y2YyOGQ2ZmRiNmNlNDlkODk4YjYxNjdiNTkwYTM5MDdiZTc2MThiZTExZmIwOTIyYTNjZmQxOGU3M2VmZWYxOWU1Y2RjMjUwZmEzM2Y2MWUzOTQwYzY0ODJhZTM1ZjMzOWU4YzBhODVhMTczNzlhNGUiOiIzZWU2NjBmMDM4NTg2NjllNTU3ZTNlZmZkZDdkZjZiZCI6IjkzZTgwM2M3OWRlNmFkNjUyZGVmNjJjZjNjZDM0ZjlhZGRjOWRkMTc3NDk2N2EwZjY5ZTFkMjgzNjFlYjJjYWNjMTc3YzYzYzA3NjU3Mzg5Y2UyM2JiZTY1ZDczZTA0NjA5NDZkMzFiZTQ5NTQyNDY1NWM3NzI0ZWFjMDQ0Y2FmYWZlMTU0MGZjYmQ0MjE4OTIxMzY3MDU0ZTQzZTNkMjFlMGZhNmEwZGE5ZjhiMjBjNWNkYmQwMTljOTQ0YTJkMmVlNmFhNjc2MGVlMTEzMWU1OGZlYzlkYTMwNzkwZjVhODczZTc5MjA5OGE4MmRkZjE4YzM4MTM2MTFkOTI0MmEiOjEyODoiYWMzM2Y1ZmZjYTlkZjRlZmMwOTI3MWZmN2E0ZjU4ZTIiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzRjMzAxOTgxMGQ3MmI1ZTU4NGYwNzU4ZjJmNTg4OGE0MjcyOWEzMzYxMGFhZmE5ODI0YmFkYWRlNDEzNmJiZCI6IjIyZGVlZjY2Y2JiN2RiMjQwYzM5OWI2YzgzNDA3ZjA5MGQ2OTk5YmEyNWU1NjBiMjA4N2ZlZDA0Njc5MDRiYjVjNDBjYmFhMDViOGJmMGZmNWE3N2M1M2ZhMjI5NDc4ZDhlMDczNjQxNGRhZjljNDIwNDE3YzM5MWM5YTUyM2ZkODU5NTQ1MzNmMTMwNGQ4MTM1OWJkY2MyYzRhYzkwZDlmNWY4YTY3YTUxN2Q3ZjA1YmEwNDA5YjcxODE1OWJhZjExY2Q5MTU0ZTgxNWQ1NzQ1MTc5YmViNTk5NTRhNDVhODY3NmEzNzVkNWFmN2ZhZTRkMGRhMDVjNGVhOTFhMTMiOiJmMzE1ZWEzNmMxN2ZjNTdkYWIzYTI3MzdkNjg3Y2Q0ZiI6ImYzM2M1YTNhOWU1NDZhZDViMzVlNGZlYmYyYWU1NTdjYTc2N2I1NWQ5M2JiM2MxY2Y2MmQ4NjJkMTEyZGJkMjZmOGZlMmEzZjU0ZDM0N2MxYmMzMDAyOWU1NTExOGJhYjI2NjJiOTliOTg0YjhiOGUyZDc2ODMxZjk0ZTQ4NTg3ZGUyNzA5ZTMyZjE2YzI2Njk1ZjA3ZTY1NGI3MDNlYmE2NDI4ZjMwMDcwZTIzZWQ0MGI2MWQwNGRkMTQzMGUzM2M2MjkxMTdkOTQ1ZDljMGU0ZDM2Yzc5YThiOGFiNTU1ZDg1MDgzYTg5OGU3ZTdmYmViNjRhNDVjYzM1MTFkOTkiOjEyMDoiMGJhZTk0MDM4ODhlZmI0ZDhlYzk3ZGY2MDRjZDVkIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI5Mzk3ZDk4ZmM1YTdmMDRiNWM4YjZhYTNhMWRkOTc1YjZlNDY3ODQ1N2FlN2YwNjkxZWVlNDBiNTM5NzUwM2EiOiIwYmJmMTA3OWNiNTU2OWMzMjI1N2JjN2U1MjM3MWRiNDZmMzk2MWI0NTc0MDJiODE2NTg4MjQzYjQ1MjM1NDM0MzBkNWNhNTZiNTJkZTY2MzI3MjRjNTFlNmMzYWYzMTBiMjg4MjJjNzQ5YTEyYmRkNThkZWU1OGJiYzMyNjY2MzE1NjJhOTk4ZWMzYWNkYzhhMjU2N2E5ZjA3ZjdmOTc1OWMzZjUwYjFkMWRjZGQ1MjkyNTZiODBjMGQyMjdmYzFmZThiNThjNjJkMWM2NDNmMWFjMjk5NjgwOWZkMDYxYWZjZjRhOWFmMTg0YzE0ZGI5ZTYzZWM4ODVjNDlkZTYxIjoiODg1NTQzYTQ1ZmQxMTYzZTM0ZWY5Mjc2MTQ1YjBmOGMiOiJkODhiZWFhMDY2NGJjZWYxNzhjYmRiZmFiMTdmZjUyNmI1YzBmOGFkOTU0M2M2YTMxMmQ5M2MzMzY3MDdmYmY4N2MwNDQ4YjA3YTU1MDU4MDk1MzI3OWY1NTJmMzY4MjI1Y2M2OTcxZjFlZWNjNzE4ZDZhYWQxNzI5YzhkODg3MzA4MTM1Nzc1MmJkMDlkNzcwNzVmYTY4MGNiMmRjNDEzOTE3MWU0YTBhYWE1MGIyOGMyNjJjMTRmZDEwYjhkNzk5Y2ExYzY2NDFiYjdkZmRmZGYzZGVhNjlhYTJiOWU0ZTQ3MjZkYzE4YjA3ODRhZmE0MjI4ZTVjY2IxZWIyNDIyIjoxMjA6IjdiMzM0ZDdhZjU0YjkxNjgyMWY2MTM2ZTk3N2ExZiI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NTU1ZGZjZjM1NGRhMDdmZDcwZjk1MWQ5NGVjMWQ4NmE2MzVlZGZkYjc5Mjk0NjAyMDdiMmEzOWNjMGNmNGEzIjoiYTEzNTFjZmZmZDFiMGNiZjgwYzMzMThjYzQzMmQzMjM4Y2I2NDdlOTk2YjdiNTNjNTI3NzgzNTk0NjgzZjUzNTk1MGNkMDg3ODg2ODdjNzcyMjZiMmQzZjA5NTk1NTg4NGFkYzJlNDc1Y2ExZTFlYWIwNGUzN2Q1ZTkwMWFlODkzNGE5ZDNhMGNiMzdiODA2MTJjYTI1ZDk4OTg1NmRmYTc2MDdiMDMwMzliNjRkN2RjZDQ2ODIwNGYwM2UwZjJjNTVjYjQxYzUzNjdjNTZjYTZjNTYxNDI1OTkyYjQwZTJkNGYzODBiM2Q4NDE5ZjY4MWU4OGViZTJkNGJkYWQzNiI6ImUxYjMwYjZhNDdlOGMyMTIyOGU0MWEyMWIxYTAwNGYwIjoiYmY5ODZkMzg0MjM3ODQ0MGY4OTI0YmI3ZjExN2QxYTg2ODg4YTY2NjkxNWE5M2JhNjVkNDg2ZDE0YzU4MDUwMWU3MzZkMzQxOGNlYmVlNTcyNDM5MzE4YjIxYjZlNGU1MDRhN2IwNzViOGMyMzAwYzAxNGU4N2UwNGZhODQyYjZhMmEzZWJkOWU2MTM0YjlkZGQ3OGUwYTY5NjIyM2IxZGM3NzVmMzI4OGE2YTk1NjljNjRiNGQ4ZmM1ZTA0ZjIwNDdjNzAxMTVmNjkyZDJjMmNlZmU3NDg4ZGU0MmZmODYyZDdjMGY1NDJlNThkNjlmMGY4YzliZjY3ZWY0OGFlYSI6MTIwOiJkOGVmNTQzOGI3Y2Y1ZGMxMTIwOWE2MzVjZTEwOTUiOiI5NWU4ZGI3YzhlY2FiOGE2MGNlYjQ5NzI2MTUzYTdjNTU1M2NmNTcxYmM0MDUxNTk0NGQ4MzM0ODVlMTliZjMzY2I5NTRlMjU1NTk0Mzc3ODA0MDE2NWE2Y2ZmZmVjZWY3OWViN2Q4MmZlZjVhMmYxMzZmMDA0YmI1ZTdjMzVhZTgyN2ZhYzNkYTI5MmExODViNWI4ZmMyNjIwMTJjMDVjYWVkYTU0NTNlZGUzMzAzY2ZlYjBjODkwZGIxZmFjYWRhYTI4OTViZGJiMzMyNjVhZGEwYmI0NjAzMDYwN2I2Y2Y5NGY4Njk2MTE3OGUyZTJkZWViNTNjNjM5MDBmMWVjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYmJlYWZlODZjNzJhYjAzNTRiNzMzYjY5YjA5ZTRkMzQ2MmZlYjE2NThmZTQwNDAwNGQ4MTUwM2YzYTZlMTMyZiI6ImEwMzNjMjA1MWU0MjVkMDFkOTdkNTYzNTcyZTQyYzUxMTM4NjBlNWRlZGNkMjRjNzZlM2UzNTc1NTliYTMyNTBmMWZjNWQ0YTkzMWE5ZDA5MDBhYzAyNTQwMGYwMTU4NjIxZjBiMTIxNWIyOTA3NDY3YmZjODc0YmNhYmJiMjhlMjhkZTgxZmUxZWU1Yjc5OTg1MjYxYzUxMmFmZWMyMzI3YzhjNTk1N2RmOTBjOWViNzc5NTBkZTRhNDg2MGI1N2E5ZTZlMTQ1ZWExNWViNTJkYTYzZjIxN2Y5NGE1YzhlNWZjYjVkMzYxYjg2ZTBlNjc2MzdhNDUwY2RiY2IwNmYiOiJlZTFjYWJhOTNjYjU0OTA1NGNhMjk3MTVhNTM2MzkzZSI6ImU0NGIwZTBkMjc1YWU3YzM4YTdkYzJmNzY4ZTg5OWMxYzExYTRjNGNiNWI1YmQyNWNkMjEzMmUzZWNiYWE1YTYzNjU0MzEyNjAzZTFjNWIzOTNjMGNlNjI1M2M1NTk4NmVlNDViYjFkYWFjNzhhMjY3NDlkODg5MjhmOWI5OTA4NjkwZmMxNDhhNjU2Yjc4ZTM1OTUzMTk0MzI3NjNlZmJjZjY5NTdjOWIyMTUwY2NhYmZkNDgzM2QwZGNlZTAxNzU4YzVlZmI0NzMyMWE5NDhiMzc5YTJlYzBhYmNkNmI2Y2JmNDFhODg4M2YwZjVkNWJmN2IyNDBjYjM1ZjA3NzciOjExMjoiYTQ4MDllMDcyZjkzZGViN2I3N2M1MjQyNzA5NSI6ImU2MmFkZjliYmQ5MmRkMDNjYzUyNTAyNTE2OTFmNzI0YzZlY2UxY2I4OWQ4YzRkYWYzMWNjNzMyYTU0MjBmNmJlZGFiNzFhYWIwMjM4YmEyM2JkNzE2NWVkMWY2OTI1NjFlZjQ1N2ZkMWQ0NzQxMzk0OTQwNWI2ZmM4ZTE3OTIyYjE3MDI2ZDg5ZDU4MzBiMzgzNTQ2ZWE1MTZhNTZmM2ExYzQ1ZWMxMjUxNTgzYWU4ODBmYTg5ODViZDNkY2MxZDZhNTdiNzQ2OTcxOTM3YmYzNzBlNzY0ODIyMzhjYzA4YzJjM2IxMzI1ODE1MWUwYTY0NzVjYzAxN2Y4YTNkMGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2YWQwNmM4OGRkNGYzYmVjZjM1ZWVkOTViYjg1OWJlMjQwNmExODAzYTY2ZTQzMzJhNzRjNWY3NWMwOWI5YTAxIjoiMjIxOWMxMTY3Mjg4NGI5M2QwMjkwYjZhNzE0MGZlYWZlNDE2NDYxZjFjZGFmMGIzYWE2NDY5M2Q3ZGIyZWIxMGZlYWU0NmFhYzdhZjU0OWZhMWIwYWJjNzhjMTFmOGRmN2VlODAzZWY3MDMxMGZjM2U2Nzc2OWY4YjRiYzY0ZjgxMTQzYTZlYmY4YmVlOWQzODZhOGVkZTVkMmNjMGVkMTc5ODVhM2I3YmI5NTE5MWVmNTVlNjg0NjkwY2NkYzVjYTUwNGJjNmViMjg0NDJiMzUzODYxYTAzNGE0MzUzMmMwMjVmNjY2ZTgwYmU5NjdhNmIwNWI5ZGQzYTkxZmY1OCI6IjA3ZDhiNGE2ZTc3YWVmOTAxODgyOGI2MWUwZmRmMmE0IjoiY2NhMWZkMDI3ODA0NWRkYTgwYjg0N2YwOTc1YjZjYmYzMWUxOTEwZDJjOTliNGViNzhjMzYwZDg5MTMzYTFjNTJlNjZjNWMzODAxODI0YWZjMWYwNzlkMmIyYjFjODI3MTk5ZTgzZjY4MGU1OWI5YTdkZTliMTVmYTdiNjg0OGI1YmY0ZTE2YTEyYWMxYWY0Y2YyYjRkN2JiNDU2NzNjNWUxMjQxZTk5OTY0NDA4NjBhOTIwNGZjMjdjYWU0NmE5OTE2MDdiYzVlNzEyMGQ2YzExNWRkY2JkZDAyYzAyMmIyNjI2MDIxMzkwODFlNjFlZWU0YWJhNzE5M2YxMzk5MiI6MTEyOiJlM2VkZTE3MDM4NmU3NjMyMWE1NzVjMDk1OTY2IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg3YmJmN2MxNTY4OWU4Yzk5YTVhMzJhOGJhMGRmZWJjZmUxOTg5MTU5ODA3NDI4Y2RkMWYzODJjM2VhOTUxNzgiOiJiNzdkM2JmM2IzMGIzZTZlNWM4NmNiZmI3ZTU0NTVmNjQ4MGY0MjNjYzc2ODM0YjQ2NjNkMjhkOWYxZWI1YzQwMjEyNjM0ZTMzNDc2Njg0MjdmNzg0ODM1MmFiNzg5ODg2Zjk2NjgyYTU2ODI2MGJkYWViN2RlMGFhZTJhZjM2ZjVhZTA0ZjA2YzMzMmIxNThkOTIzNzA2YzFjNjI1NWM2NzNmZWVhZGI2ZDMwYmZjOTAxZTYwYjkyYWNkOWRkZDgzZWY5ODY4NmM0ZDQ5MmY0YTYwZTk3YWYyNTQxZDQ3MGE2YTZiMjE5MDM0NDEwMjBlYTc2MTljZjI4YTA2OTg2IjoiMmYxOWFhMWYzYTgyYTczOTg3MDY5NTNmMDE3MzlkYTciOiI1OTBkYmQyMzA4NTRhYTJiNWFjMTlmYzNkYzk0NTNlNWJiOTYzN2U0N2Q5N2I5MjQ4NmE1OTliZGFmZGZiMjdjMzg1MmUzZDA2YTkxNDI5YmI4MjBlYjEyYTUzMThlZDg4NjFmZmU4N2Q2NTljNDYyZWYxNjdiZTIyNjA0ZmFjZmEzYWZiNjAxYjIxNjc5ODliOWUzYjJlNWI1OWU3ZDA3ZmRhMjdmZmNjZDQ1MDg2OWQ1Mjg0MTBiMGFmZjQ2OGY3MGNjMTBlZjY3MjNhNzRhZjZlZWJjMTU3MmMxMjNhOWI1YTlhYWI3NDhhMzFmYTc2NDcxNmQzMjkzZmY1ZGU3IjoxMTI6IjVjNDNmYzRkYzk1OWZhYmVlYmIxODhkYmYzYTUiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjQwOTVhNjZiNmViMDMyMGNhNzVlMmFiNzhlODQ5NmE0NWY0YjAwMGZjNDM0MzY5MDRjM2UzODZmYjg1MmVkMiI6IjQ2OTBlZGM4NDNlMjNkOWQ5YjlhNGRhYjhmYTgxOTNmOGJmMDM4OTdkM2QyOTc1OWU5ZGM5ZTBmOGE5NzBjMGY1ZDQzOTliOWY2MDQ2MWZlNWNmNDM5ZjliMGQ1NGJiYzA3NTY5NWU0ZDc2Yjc2Mjk4Y2MyYjc1YmIzZTBiNTE2ZWU5YWRhOTNmNzdjNGMwMDJiYTlmZDE2M2ExZTRiMzc3YmVmYjc2YzFlNWFiOGIzOTAxZjIxNGMwYTRjNDhiZDJhYTJmMzM1NjBkNDZlMjcyMWEwNjBkNDY3MWRjOTc2MzNmZjliY2Q3MDNiYjBmYmVkOWE0YTJjMjU5YjUzZjMiOiIwOTU1YzFmMGUyNzFlZGNhMjc5ZTAxNjA3NDg4NmY2MCI6ImY1MTYwYzc1YzQ0OWU2YmI5NzFlNzNiN2QwNGFiOWI5YTg1ODc5ZjZlYjJkNjczNTRhZjk0YTRmMGNhMzM5YzBhMDNhNWI5ZWRlODdhNGZmNjgyM2I2OTgxMTNhMzhhZTUzMjdlNjg3OGMzY2NjMGUzNmQ3NGZlMDdhYTUxYzAyN2MzYjMzNDgxMjg2MmJjNjYwMTc4ZjVkMGYzZTc2NGMwYjgyOGE1ZTNmMmU3ZDdhMTE4NWI3ZTc5ODI4MzA0YTdhZDNkZGNkNzI0MzA1NDg0MTc3ZTY2ZjRmODFlNjZhZmRjNWJiZWUwZWMxNzRiZmY1ZWIzNzE5NDgyYmQyZDgiOjEwNDoiNzVhMzEzNDc1OThmMDlmY2VlZWE2NzM2ZmUiOiIwZGQyZGNhMjYwMzI1OTY3MjY3NjY3ZmYzY2NkYzZkNmIzNTY0ODgyMWE0MjA5MGFiYmE0NjI4Mjg2OWJhYzRiZGMyMGE4YmVlMDI0YmVhMThhMDczOTZjMzhkYmI0NWQ5NDgxZmVkY2M0MjNhMzkyOGNmYTc4YTJmMGFlOGVlZGIwNjJhZGQ4MTBiZGJlZTc3ZGRjMjZjMjllNGY5ZmRhMWFiMzM2ZDA0ZWY0Mjk0N2IwNWZiZGI5YmM0ZGY3OWUzN2FmOTUxZDE5ZDZiZjVlNWNiMzRlZWY4OThmMjM2NDJhOWM0YTkxMTFlZDBiN2EwOGFiZWVlZmJiZDQ1YzIzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDg2Yjc3YjU3MzFmOTcxZjBiZjViODIyNzM2MWIyMTY3NDZkYWY4YjA4YzU4M2FkMzhmMTE0YTY0YWE3ODc3YiI6IjYyOTMxNzIxMmZmOGJkOGE3Njc2ZTRjMDBiODFhOTU3N2RlNjM5N2M4MzJmOTlhYzk3NGZhMmJiYmNjYjZlM2I4YWE3NzZkYjY5MjJlZWQwYjAxNGJmMzkyMzc5OWRhN2Q5ZDA4NTRjODgxNzQ3MGUxZTJmN2ZjN2E1NzJmOWQwMzE2ZWU2MGNkZTdlZjAyNWQ1OWI4OTdkMjlhNmZlZTcyMWFlYjJmN2JiNDRmOWFmYjQ3MWU4YTdiMGI0M2EzOWI1NDk3YTNiNGQ2YmViNGI1MTFmMGNlZmExMmNlNWU2ZDg0MzYwOWQzZTA2OTk5YWNmYmVlNTBhMjJjYTFlZWUiOiIxNjQwNThlNWU0MjVmOWRhNDBkMjJjOTA5OGExNjIwNCI6IjY2MzNlYWUwOGExZGY4NWYyZDM2ZTE2MmYyZDdkZGQ5MmIwYzU2Yjc0NzdmM2M2Y2RiOTkxOWQwZTRiMWU1NGVhNzYzNWMyMDJkY2Y1MmQxYzY4OGFmYmJiMTU1NTJhZGRhMzJiNGNkMzBhYTQ2MmIzNjdmMDJkZWQwMmUwZDY0ZWVlZTJhNmI5NTQ2MmIxOTE3ODQxNDNjMjU2MDdmZDA4YTIzYTJmYmM3NWNmNmJlZTI5NGRhZjIwNDI1ODdmZGQ4ZmUzZDIyYzNhMjQyYzYyNGNmMGE1MWE3YzE0ZGI0ZjBmNzY2ZWM0MzdkZTRjODNiNjRmMjM3MDZhMjQ0MzciOjEwNDoiMmViNmViNmQ1MTZlZDRjZjE3NzhiNGUzNzgiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGY5ZTgwNmIwZDkzNzI2ODU2MWMwZWFmYmJkZDE0ZWM3MTViN2U5Y2VmNDExOGQ2ZWIyOGFiYmI5MTI2Njc0NSI6IjJhZTRiYWVmMjJhY2UyNmY0NjRhOWIwYzc1ODAyMzAzZjJkN2MwZjlhMWVkMWQwMTgwMTM1MTg5NzY1YmRkMzQ3ZmVhMGNjMmI3M2VlN2ZiYmY5NWVhMWZkYTIyNTk3YjhhYWQ4MjZmNjNlNzQ0MDY5YTljMzQ5NDg4YjJjYzFjZjkzNzJmNDIzY2M2NTAzMDIwODIxMjU3MjQ3MzBhZTVhNGQ4NzhlMDczODVkZGM5OTAzNGM2YjZiNDY3NDhmMDJjODBiMTc5ZmU2NDA2YjFkMzM1ODE5NTBjYjliY2QxZDFlYTFlYzdiNWJlY2ZkNmMxZjViMjc5NDEyYzQzM2EiOiI4NjU3OTk2NjM0ZTc0ZDQ2ODlmMjkyNjQ1ZjEwM2EyZSI6IjJjYTI1MzM1NWU4OTNlNThjYjFhOTAwZmJiNjJkNjE1OTVkZTVjNDE4NmRjOGE5MTI5ZGEzNjU3YTkyYjRhNjMxYmJkYzNkNWY4NjM5NTM4NWE5YWE4NTU3YjY3Zjg4NmUzYmI4MDc2MjBlNTU4YzkzYWVhOGU2NTgyNmVhZGViMjE1NDQ0MThlZTQwZjU0MjBjMmQyYjgyNzA0OTFiZTZmYzJkY2JmZDEyODQ3ZmEzNTA5MTBkZDYxNWU5YTE4ODFiYzJjZWQzYjBhYzNiZGU0NDViNzM1ZTQzYzBjODRmOWQxMjBjYTVlZGQ2NTU3NzlmYzEzYzZmODhiNDg0ZjciOjEwNDoiODMxNTVlYmIxYTQyMTEyZGQxYzQ3NGYzN2IiOiI4N2Q2OWZjM2NiYzc1N2IyYjU3YjE4MGM2YmEzNGRiNGUyMGRkZTE5OTc2YmZiM2QyNzRkMzJlN2NlYTEzZjBjN2Q5ZTg0MGQ1OWNlODU3NzE4Yzk4NTc2M2I3NjM5ZTQ0ODUxNmRkYmJkYTU1OTQ1N2NkOGNiMzY0ZmE5OWFkZGQ1YmE0NGVmNDVjMTEwNjBkOWJlODJiNGViZTFmMDcxMWFjOTU0MzMwNzQ2NDliNmMwOGVlYWI1MzlmZGZjOTljNzc0OThiNDIwNDI3ZTRkNzBlMzE2MTExODQ1NzkzZGUxZjY3ZmIwZDA0ZTMzODlhODg2MmY0NmY0NTgyZGM4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjMjRjMTc5MTFmNmRiNGIzZTM3YzQ2YmNjNmZhMzVlZmMxYTU1Zjc3NTRmMGJiOTlmMmVlYTkzMzk4MTE2NDQ3IjoiMGJkOTJjYjEwNjg2N2UyNWFkNDI3ZmY2ZTVmMzg0ZDJkMGY0MzJmYzM4OTg1MjE4N2ZjYzdiMGJmOWY2ZDExYTEwMmE4NzJiOTllZDFhZDlhMDVkYWIwZjc5ZmE2MzQ3NDU1MzVlZmVkODA0ZmY0MmIwYWY4ZGFkMjBiYTQ0NzA5MzkxZmIyNjNmMjQ1ZTVhMmM1MmQ5Y2U5MDQxNzk2MzMyODJmNTdhMTIyOWIwYTljNDU1N2E1YzBhZWRhMjliYmM1YTdhODcxZmE4YjYyZDU4MTAwYzM3MjJjMjFlNTFlM2IzZTkxMzE4NTIzNTUyNmU3YTVhOTFjNTU5NzE3ZCI6IjUwOThjYzUyYTY5ZWUwNDQxOTdlMmMwMDBjMmQ0YWI4IjoiOWFkNGRlZTMxMWQ4NTQ5MjVmYzdmMTBlY2E0ZjVkZDRlNjk5MGNiMmQ0MzI1ZGEyZWYyNWE5YTIzNjkwZjVjNTU5MGJlMjg1ZDMzYWFlYmE3NjUwNmM1OWVkZWM2NGI4YzNmZjhlNjI3MTZkMWMzODVmYmNlMmE0MmJjN2JkNWQ4ZTg1ODRkZTE5NDQ1NDNhYjZmMzQwYzIwOTExZjhiN2IzYmUxYTFkYjE4YTRiYjk0MTE5MzMzMzM5ZGU5NTgxNWNhZTA5MzY1YjAxNmVkYzE4NGUxMWYzYzViODUxZjFmYTkyYjFiNjNjZmEzODcyYTEyNzEwOWMxMjk0YjY3NyI6OTY6ImY3OTMwZTNmYWI3NGE5MWNiNjU0M2U3MiI6IjYxMjRlZGU2MDhkNDE2YmFhNWU2NTNhODk4Y2E3NmU5ZjQ3ZjA4NDAzYzE5ODRmZWVjMTEyZTY3MGRlZDIyMjZlMDA3M2Y4ODgxYWIyMTYxY2ZkYTU0MWRjY2FlMTk2OTEyODVmNzM5MWE3MjlmMDdhYmExOGYzNDBiYjQ1MmMxZGEzOWNiZTgzY2Y0NzZjZmMxMDViNjQxODdlMGQyMjI3ZGQyODNkY2JhOGI2YTM1MGY5OTU2YjE4ODYxZmExMzFkM2YwMGMwMzQ0NDNlOGY2MGUwZmRmY2ZhYWJiZWQ5MzM4MWFlMzc0YThiZjY2NTIzZDMzNjQ2MTgzZTEzNzkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQyNjdhODM3OTI2MDAzNmZmM2QxZWMwN2E3YjA4NmZmNzU3MDZiYWQxMmQzN2Q5NjU2ZjA0Nzc2ZjNkOGI4NWMiOiI4MGM2OGEzMzBlZjUwZTNlNTE2NjgxZjFlNTM1ODY4YjAzNDY2ZTdlZGJiODZjYjM4NWQwMWRiNDg3ZGEzZGQzZWRhZDk0MGZkYzk4ZDkxOGI3ZGI5YjU5ZjhkNjEzNjllZWUyOTI4Yzg4NTU3MzA2YzRhMTNlMzY2YWYwNzA4ZDk0Y2I5MGExNWYxYzNiYzQ1NTQ0YmRiMDVmZjk2NGRhNWUwNmM1YWU5NjVmMjBhZGI1MDQ2MjBhZWQ3YmNlMmU4MmY0ZTQwOGQwMDIxOWMxNWVmODVmYWUxZmYxM2ZlYTUzZGViNzhhZmE1ZjJhNTBlZGJkNjIyNDQ2ZTRhODk0IjoiNjc0ZGMzNGU4Yzc0YzUxZmE0MmFhY2Q2MjVhMWJkNWIiOiI2YTlhOGFmNzMyYWU5NmQwYjVhOTczMGFkNzkyZTI5NjE1MGQ1OTc3MGEyMGEzZmRiYmMyYTNhMDM1YTg4YWM0NDVkNjRmMzdkNjg0ZTIyMDAzYzIxNGI3NzFjMTk5NTcxOWRhNzJmM2VkMjRhOTY2MTgyODRkZDQxNGYwY2FjMzY0NjQwYjIzYzY4MGRjODA0OTJhNDM1YzhlYzEwYWRkNTNiMGQ5ZTMzNzRmMWNmNWJmYzY2M2UzNTI4ZmEyZjYyMDk4NDY0MjFlYTZmNDgxYjdlY2Y1NzcxNGY3YmMyNTI3ZWRjNGUwNDY2YjEzZTc1MGRkNGQ0YzBjYzBjZGZjIjo5NjoiYmVhNjYwZTk2M2IwOGZjNjU3NzQxYmM4IjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzg2Y2I2Mzc3NTMwMTBmNjM5ZmEzYWEzYmZmN2MyOGI3NGYwMTJhZDYwOTBmMmEzMWIwODAxZDA4NmYxODNhZCI6IjZiNzg1ODU1N2UwZmQwZjk1Nzg0MmZiMzBlOGQ1NGRlZGJjMTI3ZWI0YmJmOWRlMzE5ZjczMWZhMjhhNjA2ZGYyYzA0NmEwYmNlOGVjZGE0ZTc1ZDM1OTZlNGU5ODhlZmQ2YmMyNzlhYTAwNWJjNTJmYWQ5MmJhMDdmNWIxZGZkYTRjYzQxNzAyOWY5Nzc4Yzg4ZDZmZTUzNDFhMGZkNDg4OTNkY2I3YzY4ZDBkZjMxMGEwNjBmMmE1MjM1YWVlNDIyZDM4MGY3MjA5YmMwOTA5YjJhYTdlODc2MDQ0MDU2ZjBiOTE1ZGFiMGJjMTNjYmVhNWEzYjg2ZDQwY2E4MDIiOiI4N2ZmNmUwYmIzMTM1MDJmZWRmM2QyNjk2YmZmOTliNSI6IjI4MTZmMTEzMjcyNGY0MmU0MGRlYWJhYjI1ZTMyNWIyODJmOGM2MTVhNzllMGM5OGMwMGQ0ODhlZTU2MjM3NTM3MjQwMjM0OTY2NTY1ZTQ2YmZiMGM1MGYyYjEwMzY2ZDE1ODk2MjBlNmU3OGJkOTBhZGUyNGQzOGEyNzJmM2ZmZjUzYzA5NDY2YWEyZDNlZjc5M2Q3ZjgxNGEwNjRiNzEzODIxODUwYTZlNmEwNThmNTEzOWExMDg4MzQ3YTlmYTBmNTRlMzhhYmQ1MWRkZmM3ZWYwNDBiZjQxZDE4OGYzZjg2Yzk3MzU1MWNlZDAxOTgxMmMxZmM2Njg2NDk2MjEiOjk2OiI3ODU5ZjA0N2YzMmI1MTgzMzMzM2FjY2YiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyYzMxY2EwY2FjM2VmZTQ2NzE2ODE5OGYwNmJlYWNmMzk1NjVhNmY1N2Y4MmUxMDQ4YTVjMDZhMjMxMzE1ODgyIjoiNjUyNjFkNmUyOWIyMzY5YjE4MjhhN2NlZjJkZjk4NzNkNmU2MDU3YzQ5OTMwMWFmZWRkNmNiNjViNTAzNmRkYjk1ZjllMzUzZmJmMzhlNTRjNGY0NmY4ODE2NDMyNWIzMzYyMGNlMTgzYmViMmU0MTFmYmI4OWEwZTAwMDJlNTQyZmMxNjFjYWQzMmE2MWVlNmYxZTE3MTdlMGI0ZGNkMDM0MGIxMTZmNzk1YmMxMDA5ZGJiYzY1YmMzMWM5YjU0OWJmMDNjNDBiYzIwNGNkMGQwMmVjODg0YmU5MDc3NzdlYmVlZDhiNTI3ZWMzYWY3Y2JiNTA4MTkzYzA3NDVkZSI6Ijk1Y2FlNmU4NWYzM2YzMDQzMTgyNDYwNTg5YmUzNjM5IjoiNjc1MjM3NTFhOWIxYjY0M2QwMGRlNDUxMWI1NWU0MjY4Y2IyZDE4ZTc5ZTAxYTU1ZmM3YjY3N2Q1MjliZDY0MDA5NDBmYjI1ZWE2YWUxMzVjMWE4MTZlNjFiNjllOTBiOTY2OTgxYWVkYTY4NTkzNGIxMDcwNjZlMTQ2N2RiNzg5NzM0OTJhZDc5MWUyMGFlZjQzMGRiM2EwNDc0NDcxNDFkZWY4YmU2ZTZhOWExNTA4OTYwN2MzYWY5MzY4Y2RiMTFiN2I1ZmJmOTA2OTE1MDVkMGMzMzY2NDc2Njk0NWQzODc5MDRlNzA4OWI5MTVhM2MyODg4NmJhMTc2M2JiNSI6NjQ6IjIxMzA5ZDAzNTFjYWM0NWUiOiIxZDVmMmNiOTIxZjU0YWViNTUyYjQzMDQxNDJmYWNkNDk0OTc4MzdkZWIxZjAwZDI2ZmJlZGRiYWI5MjJmZDgwYjAwZGJhNzgyOTYxZjhmY2U4NGYxZjc5NzNlODFlZWQ2ZWUxNjhiMTc2MGM1NzVjODkxZjQwYTFkYWUwZmExYTA4NzM4MDI1ZDEzZWY2ZTBiMzBiZTRmMDU0ZDg3NGYxYjhhMjQyN2ExOWViYjA3MWQ5ODM2NWMzMjMxNmE4OGE2OGMyYjQwZGFmMWVhODMxYTY0NTE5YWMzNjc5YWNiNGUwNDk4NmVjYzYxNGVjNjczYzQ5OGM2ZmVlNDU5ZTQwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYTlmYTM2Y2EyMTU5ZGZmOTcyM2Y2Y2ZkYjEzMjgwNDQ2ZWI2YmMzNjg4MDQzYzdlMmUyNTA0MTg0NzkxNTk2IjoiYWMwNGM0MjkzNTU0Y2Q4MzJhYTQwMGM4MTFjYjIwMmQ4MTVkNjE3OGFhMTM0M2I0NjI4NTkyYjdmM2FlNDVkYzVmMTJlYTQ3YmU0YjQzZTE4NjVmNDBiMDZhYjY3YjNhOWZiMzY0NDI0OGE5YjNlZmUxMzFhOGFkZGI3NDQ3OTc4YmI1MWNjZjc0OWU3NTU3NGZlYTYwZTg3ODE2NzcyMDBhZjAyM2IyZjhjNDE1ZjRlNmQ4YzU3NWE5ZTM3NDkxNmQ5ZWMzYTYxMmIxNmUzN2JlYjU4OTQ0NGI1ODhlMGI3NzBkOWY4ZTgxOGFkODNmODNhYTRlY2YzODZkMTdhNyI6ImQxM2NhNzMzNjVlNTcxMTRmYzY5OGVlNjBiYTBhZDg0IjoiMmFhNTEwYjdmMTYyMGJmY2U5MDA4MGUwZTI1ZjU0NjhkYmM1MzE0YjUwOTE0ZTc5M2I1Mjc4MzY5YzUxYWMwMTdlYWNlOWZkMTUxMjdmY2E1YTcyNmFkOWU2N2JkZWU1YWYyOTg5ODhkOWE1N2VjNGJiYzQzZDRlYjg0OTUzNWViMTA1MjFhYzdjZDdlZDY0NzQ3OWE0Mjg3NmFmMmViYzllMjEwOGI1MzlmZWJkYWE5MTI3YzQ5YmRhMWJkYTgwMGY2MDM0MDUwYjg1NzZlOTQ0MzExZGZiY2E1OWQ2NGQyNTk1NzFiNmQyZWQ1YjJmYzA3MTI3MjM5YjAzZjRiNyI6NjQ6IjIxMTFkNTVkOTZhNGQ4NGQiOiJGQUlMIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZjgwMmU4MzgyNTAwNjRjMTVmZGVlMjhkN2JkNDg3Mjg1MDM1NTg3MDg0NzcwMWFkOTc0MmIyZDZlYjRiMGMwIjoiZTJjYThjOGQxNzJmZjkwMjMyODc5ZjUxMGQxMjI1YWY5MWJjMzIzYmRmNjM2MzYzYzI5MDNmY2QxNzkwNjkyYzhiY2IwM2ExY2NjYjE4ODE0Njc4ODUyYzZiM2E0NDE1NTJlNTQxYjg0M2VlNWU0Zjg2YTE1MmZhNzNkMDVhZWE2NTlmZTA4YWE2NDI4YmIyNTdlYWEyYTdiNTc5ZmRjNDAyMmMxZGVjMzU5YTg1NDI1M2MxYWVmYzk4M2M1ZWRlOGM5NzUxN2VhNjlmYzQ2MDZlMjVmMTNmZmIwZjVmNDkxNjA2OTE0NTRmYmI3NGU3MDQzMjY3MzgzNTM1MjVmNyI6IjJkZDU1MGNmZDk3ZjhlMWQ4ZDMxYmE1NTM3YWU0NzEwIjoiNzJiOTYzMGRkYTQwMzA2ZTc4NWI5NjE5MzRjNTZlMjA5NDhmOGVhYzBlOTgxZjQ5Nzg3ZWIzZGJkNmU0NjA3ZjdkMDhkMTBjYTY0Mzc0NmJmMWVmYTdlNTA2Njk5MzY4M2Q1MjdhOTBmMmQ0NWVjOWNmNzMxMTNmMWYxN2JiNjc5NThiZTY2OWFjZDRlMjkyN2YxZGFjZmRlOTAyY2QzMDQ4MDU2ZDdmNmRmZGQ4NjMwZmYwNTRlZmNlNDUyNmRiN2M5MzIxZDZkMmJlMjIzNmY0ZDYwZTI3Yjg5ZDhlYzk0ZjY1YTA2ZGMwOTUzYzhjNDUzM2E1MWI2YTI5YmQyYyI6NjQ6ImJkNmM4ODIzYzkwMDVjODUiOiJmNmRkMGI1ZjNkMWEzOTNhMTgzNzExMjk2MmRiYTE3NWExM2MyZDFlNTI1ZWY5NTczNGNhZjM0OTQ5ZDhiMmQ2M2I0ZmU1NjAzMjI2YjVmNjMyZjJkN2Y5MjczNjFiYTYzOWRjMGUzYzYzNDE0ZjQ1NDYyMzQyNjk1OTE2ZDU3OTIxMzNiNGEyNGM3YzRjYmUyYjk3YzcxMmJmMjdhYjYyZDNkNjhiMzg3NWQ1OGZmZTRiN2MzMGE4MTcxYmZmMWE5ZTJmMzk5NTc2OGZhYWNkYTJlYTkyMTNmZjM1Nzk4YjllNDUxM2Y2YTg3YmQzZjVhOWQ5M2U4NDdlNzY4MzU5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NGRkNTNjZTAxNDZjYjcxYzMyNzc2MDMzYmIyNDMwOThkNzhhMjJhYzE3ZjUyYTYyYTEyMmY1NjUzZmI0ZTMzIjoiNjgyMjJiZmZhNzgyZGNmZTRmMzI4ZmMyMGViNTIwZTc1YTlhNWZlZGJlMTNlYzdmY2YwZTgyZmJhMDhiYjg3YThhOGUwMjkwMjYzOGUzMmZlMGUyMjk0MzQ0YjM4MDc5N2Y4MDI4NDI2ZmZjYzA1MzFjNzM5Yzg4NDg5MjM5NGM0OGZmMDc3OWM1ZjVlZGYwYTM2YTNmYjhhYTkxMjEzMzQ3Nzc0ZWM0YmYwZmUxMDQ5YmQ1Mzc0NmIxM2JlZWYzYzYzNzE2OTgyNmMzNjcwNTZjYjFhYTBhMzg2OGUyM2Y4ODZhOWM3YjgwMTVjMjZhZjllNDA3OTQ2NjJmNmIyMSI6ImYwYzkwYTFiY2E1MmYzMGZhYjM2NzBkZjBkM2JlYWIwIjoiYTNlYTgwMzJmMzZhNWNhM2Q3YTEwODhmZDA4YWM1MGFlNmJkYzA2YWQzYTUzNGI3NzNhYzNlM2Q0YTNkNTI0NDk5ZTU2Mjc0YTAwNjJjNThjM2IwNjg1Y2M4NTBmNDcyNWU1YzIyMWFmOGY1MWM2ZGYyYmJkNWZiY2ZmNGE5M2JhNGMxMDU0ZjdmOWM2N2ZkOTI4NTUxMWEwOGQzMjhkNzZhNjQyZjA2NzIyN2QzNzhmOTVhMWU2NzU4N2I5MDI1MWY5MTAzZWQzY2FjZGI2YmY2OWUwNzk0ZTM2NmQ4YjkyZDhkZTM3YjRlMDI4ZGUwNzc4ODQxZjM1NmFjMDQ0ZCI6MzI6ImIxZWNlOWZiIjoiRkFJTCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWJiMzZmZTI1ZTk2NmEwNzVhZTJjM2JiNDNiNTg3NzY3OWViYzM3OWQ1MTIzYzhlZGEzZmEwZTMwYjk1Y2FlMCI6ImZiM2E0YmU2NDNjMTAzNDMyNTFjNmYwNzQ1YWFhNTQzNDk0NjNmNjIyY2EwNGE3OTJlOWI0NzgwODY2ODQ0YjMwYWVlZjMyNjlmYzYwY2FjMGVhMDMxYzVmMzc4MGI1MzVlMTUxNTRmN2M3NmViNGEzNzFiOGFlMzY4NTUwZjNmYTJjZTY5M2MzNDUxMWVjOTZiODM5Y2FjNTY3ZjFiMGRlMGU3ZTMxMTZkNzI5YjQ1ZDFiMTZlNDUzNzAzYTQzZGI3M2Y1ZDBjM2U0MzBmMTZiMTQyNDIwYjVmMGQyNmQ3MmFjM2RiYTU0M2Q3ZDgxMzYwM2IwYmZkY2EzZGQ2M2UiOiI1OTg2OWRmNGVmNTc1NGI0MDY0NzhhMmZiNjA4ZWU5OSI6ImVjZDEyNTY4MmU4YThlMjY3NTdjODg4YjBjOGI5NWRlYzVlN2VkN2FjOTkxNzY4ZjkzZThhZjViY2Y2ZjIxZWQ0ZDRkMzg2OTllZTc5ODRlZDEzNjM1ZmZmNzJmOTM4MTUwMTU3YzlhMjdmY2RhMTIxZmZjZWQ3YjQ5MmQyYjE4ZGFkMjk5Y2I2NDk1ZWQ1ZjY4NDQxYWVmYzgyMTlkMmNmNzE3ZDE1ZDVjZDJkYmNlNDYwNmZjZjkwZmU0NWYzNjAxMTI3Y2Y2YWNlZTIxMGJkN2RmOTczMDlmNzczOTc0YTM1YmVmMWQzM2RmOTg0MTAxYzJmYzlkNGI1NTI1OWUiOjMyOiJjYjNmNTMzOCI6IkZBSUwiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNhMjY0ZTdjYWVjYWQ1NmVlMzFjOGJmOGRkZTk1OTJmNzUzYTYyOTllNzZjNjBhYzFlOTNjZmYzYjNkZThjZTkiOiI4ZDAzY2Y2ZmFjMzExODJhZDNlNmYzMmU0YzgyM2UzYjQyMWFlZjc4NmQ1NjUxYWZhZmJmNzBlZjE0YzAwNTI0YWI4MTRiYzQyMWIxZDQxODFiNGQzZDgyZDZhZTRlODAzMmU0M2E2YzRlMDY5MTE4NDQyNWIzNzMyMDc5OGY4NjVjODhiOWIzMDY0NjYzMTFkNzllM2U0MjA3NjgzNzQ3NGMzN2M5ZjYzMzZlZDc3N2YwNWY3MGIwYzdkNzJiZDQzNDhhNGNkNzU0ZDBmMGMzZTQ1ODdmOWExODMxM2VhMmQyYmFjZTUwMmEyNGVhNDE3ZDMwNDFiNzA5YTA0NzFmIjoiNDc2M2E0ZTM3YjgwNmE1ZjQ1MTBmNjlmZDhjNjM1NzEiOiIwN2RhZWJhMzdhNjZlYmUxNWYzZDY0NTFkMTE3NmYzYTcxMDdhMzAyZGE2OTY2NjgwYzQyNTM3N2U2MjFmZDcxNjEwZDFmYzljOTUxMjJkYTViZjg1ZjgzYjI0YzRiNzgzYjFkY2Q2YjUwOGQ0MWUyMmMwOWI1YzQzNjkzZDA3Mjg2OTYwMWZjN2UzZjVhNTFkYmQzYmM2NTA4ZThkMDk1YjkxMzBmYjZhN2YyYTA0M2YzYTQzMmU3Y2U2OGI3ZGUwNmMxMzc5ZTZiYWI1YTFhNDg4MjNiNzY3NjIwNTFiNGU3MDdkZGMzMjAxZWIzNjQ1NmUzODYyNDI1Y2IwMTFhIjozMjoiMzEwNWRkZGIiOiJGQUlMIjowCisKK0FFUy1HQ00gU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5hZXMyNTZfZW4uZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkMTY4OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uYWVzMjU2X2VuLmRhdGEKQEAgLTAsMCArMSw2NzUgQEAKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZmI4MDk0ZGQyZWRkYjNkODAwNGJiNzkxMzQwMjNjYTJiZTRkZTliNjY4YTllNDYwOGFiZGYyMTMwZThiZWNiOCI6IiI6IjQ5MWExNGUxM2I1OTFjZjJmMzlkYTk2YjY4ODJiNWU1IjoiIjoiIjoxMjg6IjgwODgzZjJjOTI1NDM0YTVlZGZjZWZkNWIxMjNkNTIwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzI1MzEzZjRjYjNmNmEwZDI5Y2VmYzE3NGI3ZTRmNDNjZWYxMWI3NjFlZjc1ZTE5OTVjYjY0YzEzMDY3OTVmMSI6IiI6IjI3ZDFlZDA4YWJhMjNkNzlmYzQ5YWQ4ZDkyYTJhMGVhIjoiIjoiIjoxMjg6ImQ1ZDY2MzdiYTM1ZWYyYWQ4OGU5NzI1ZjkzOGQzZDJkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGU3NjY1ODRjZTBlODg1ZTFiYmExMzI3ZTUzMzU3OTZkZTA4MzFhNDBmNzRhNWNlYzE3ODA4MWRkMTViZmQxMCI6IiI6ImNlY2UwZGVhMDI0ZmY0Nzg1MWFmMDUwMGQxNDZjYmZlIjoiIjoiIjoxMjg6IjFhYmUxNmVlYWI1NmJkMGZiMWFiOTA5YjhkNTI4NzcxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2U3ZjIyMDdmODNhOTUyNDUxZTcxNGJhMzgwN2RkYjNlZDY3YzI3MzlhNjI4OTgwNDExYWE2ODM2NmIxZjJmNSI6IiI6IjY1MmZkOTUxYWNlMjg4ZGIzOTcwMjA2ODcxMzVhNWQxIjoiIjoiIjoxMjA6Ijk4NTIyN2IxNGRlMTY3MjI5ODdhM2QzNDk3NjQ0MiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg1NWY4ZmE0ZWM2YTEyMDYxNzM1MDlkNTA0ZDBiMjlkZmJmYmZhOWFhNTI4MjU0YjE4OWNkNzJlNmViYzFjMWYiOiIiOiIxYWQxNTA3ZTY0NjNlNGUyZTFhNjMxNTVhYzBlNjM4ZiI6IiI6IiI6MTIwOiI2OTMxNDZhOGI4MzNmMzI0YzFkNGNiZWViOGMxNDYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlZjhkZDEyOTRhODVkZDM5ZTM2NmY2NWUxMDc2ZDUzZTA0NjE4OGMwNmM5NmIyYzllODRlYmM4MWY1YzlmNTUwIjoiIjoiOTY5OGEwNzQ0NzU1MmQxYTRlY2QyYjRjNDc4NThmMDYiOiIiOiIiOjEyMDoiYjAwNTkwY2FjNmUzOThlZWIzZGNiOThhYmUxOTEyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjU4OTZlNTg3NTcwZmYxODIzNjM5ZTFlNTFlOWM4OTE5MmQ1NTFiNTczZGQ3NDdlN2MwYzFjMTA5MTZlY2U0YyI6IiI6ImYwNTE2NDU3YzA5YzM3MmMzNTgwNjRlYjZiNDcwMTQ2IjoiIjoiIjoxMTI6IjVhN2NhZGVjNjAwYTE4MGU2OTZkOTQ2NDI1YjAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMmZjOWNmZmZiZTcyZTc5NTQxODI5OTMwODhlMDlkMjRlYThjYWQ5MWE4Y2E5YTMzNmQ5ZjFmZTQxNTY0ODZkIjoiIjoiMGUxODllMTYyZTA5N2ViMjA2MGIzMGM0NmQ5YWZhNzAiOiIiOiIiOjExMjoiN2QzZDVjYzU1ZTYxODJlYzU0MTNlZjYyMmQ0ZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImYyNGUzZDYzMWQ4OTYxZDNkNGI5OTEyZDRmYTdhMzE3ZGI4MzdhN2I4MWNkNTJmOTBjNzAzYTQ4MzVjNjMyZTIiOiIiOiI1MTA3NDBiZmEyNTYyY2U5OWNhMzgzOTIyOTE0NWE0NiI6IiI6IiI6MTEyOiIxNDAyZGRjMTg1NGU1YWRiMzM2NjRiZTg1YWQxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzIwYWI1YWNlYjgwZmYxZjg2NDM3OWFkZDliMGQ2MzYwNzIyN2Y3YzNmNTg0MjVkZDZlYzNkNGNlYTNmZTJlYSI6IiI6IjU4ZjIzMTdhZmI2NGQ4OTQyNDNjMTkyZWY1MTkxMzAwIjoiIjoiIjoxMDQ6ImU4ZTc3MjQwMmNjNmJmZDk2YTE0MGIyNGMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjU3ZGQxNmZhOTJhOGY4YzA5ZDhmMTNjYjViNjYzM2E0M2I4NzYyZTkwYzY3MDIzMmY1NTk0OWNkZmRmNzAwYyI6IiI6IjNiN2MxNGVlMzU3YjNjNmIwZGMwOWUzMjA5YWI2OWYyIjoiIjoiIjoxMDQ6IjQzZTYwOTY2NGU0OGFkMWY1NDc4MDg3ZjI0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODdjMTdhYjkxOWE0YmMwZDUwMzQzYzBiYjI4MmE5NjkyODNjMmFkYTI1ZjlhOTZkMjg1OGM3Zjg5YmM1MTM5YSI6IiI6IjAyODEzZDNmYWYzMGQzZTE4NmQxMTllODlmZTM2NTc0IjoiIjoiIjoxMDQ6ImQxYTFmODJhODQ2MmM3ODNiMTVjOTJiNTdlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkZDhkNWI2YzVjOTM4YzkwNWMxN2VhYjlmNWFiN2NkNjhkMjdmM2YwOWQ3NTE3NzExOTAxMGQwNzBiOTFlNjQ2IjoiIjoiMWRmMWMzYWQzNjNjOTczYmZmZTI5OTc1NTc0ZmZkZjYiOiIiOiIiOjk2OiI3NDlhYzdmZmRhODI1ZmM5NzM0NzViODMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRkNjBhMTRjYjc4OTA5OWM3N2I4OTkxZTdiMGI0MGY3ODdkMzQ1OGY0NDg1MDFlODEwOGU0ZDc2MTEwZjk0ZWYiOiIiOiJjYTZiMzQ4NWViNWRjZDlkYmZhN2NmZmNkYjIyZGFhNSI6IiI6IiI6OTY6IjNmODY4YjY1MTBkNjQwOThhZGMxZDY0MCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDA1YjY5MDcxN2RlOTkzYWQ5NDVkODAxNTljMjgwMDg0ODA2MGRlMGI3ZDJiMjc3ZWZkMDM1MGE5OWJhNjA5YSI6IiI6IjYzNzMwYWNiOTU3ODY5ZjBjMDkxZjIyZDk2NGNjNmEzIjoiIjoiIjo5NjoiNzM5Njg4MzYyMzM3ZDYxZGFiMjU5MWYwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYjU1NjNhMzg3ZTcyZDdkMTA0NjhjOTlkZjU5MGUxZGUyNWVjMTAzNjNhYTkwZDE0NDhhOWZmY2QxZGU2ODY3IjoiIjoiYzUxMTQwNjcwMWJhZDIwYTJmYTI5YjFlNzY5MjRkMmYiOiIiOiIiOjY0OiIzOTAyOTFlZDE0MmJhNzYwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYmVmN2MyNGRhYWEyMWYzMDhhNWFmMDNkZjkzNmJhM2Y3MGFhNTI1MTkwYWYwZDk1OWQ2ZTUwZDgzNmY0NjI0IjoiIjoiZTlmMTU5NTAxMzBiOTUyNGUyYjA5Zjc3YmUzOTEwOWEiOiIiOiIiOjY0OiJkYjJmYjJiMDA0YmM4ZGM0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2Y2E2MzBiMGI2Nzc5YThkZTdhMTllNTI3OWVhYzk0YmYyOWY3NmY4YjBjZjhlY2Y4ZjExYzRmOGViMDRhYTBkIjoiIjoiNzM3M2JlZmMyYzgwMDdmNDJlZWY0N2JlMTA4Njg0MmYiOiIiOiIiOjY0OiJlMmI4NjIwYmNjNzQ3MmE4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhY2VhNzgxOGE3MWRmMmM5ODQwYWVmMWMxMGVjYmUyYmFjN2U5MjIxNjM4ODQxNmEyZjM2MTE5YTA3NDVkODgzIjoiIjoiNmQ0NmFhMzlmYjVhNjExN2U5YWRmN2VlNzJiYzUwZmYiOiIiOiIiOjMyOiJmZDVmZjE3YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjMwMTAzNmQ0YjJiMjhiOGE0NTAyOTI1OTg2ODYxZWJhMmI2N2MyNGNiMGM3OWM2M2ZkNjIxOTVkOWI2NzUwNiI6IiI6ImJiNmYzOThlNWFlZDUxNTkwZTNkZjAyZjU0MTllNDRkIjoiIjoiIjozMjoiNDdmM2E5MDYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijg5NTc2ZDJhYWM1NTRjODk4MmM3ZGYwMDUzYmU5YWIxOWY0YmQ4MGJhOWYzZGQ0MzNjMWMwNTRkNjhlNjg3OTUiOiIiOiJhZWRiZDQ4MmE0MDFhN2MxMmQ0NzU1MDc3YzhkZDI2ZSI6IiI6IiI6MzI6IjUwNmZhMThkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDNjOWUyMDlkYTNjMTk3MWQ5ODZhNDViOTJmMmZhMGQyZDE1NTE4MzczMGQyMWQ3MWVkOGUyMjg0ZWMzMDhlMyI6IiI6Ijc4YmVmNjU1ZGZkODk5MGIwNGQyYTI1Njc4ZDcwODZkIjoiOWQ4YzY3MzQ1NDY3OTdjNTgxYjliMWQwZDRmMDViMjdmZTA1MzliZDAxNjU1ZDJkMWE4YTE0ODljZGY4MDQyMjg3NTNkNzcyNzJiZjZkZWQxOWQ0N2E2YWJkNjI4MWVhOTU5MWQ0YmNjMWJlMjIyMzA1ZmRmNjg5YzVmYWE0YzExMzMxY2ZmYmY0MjIxNTQ2OWI4MWY2MWI0MDQxNWQ4MWNjMzcxNjFlNWMwMjU4YTY3NjQyYjliOGFjNjI3ZDZlMzlmNDNlNDg1ZTFmZjUyMmFjNzQyYTA3ZGVmYTM1NjlhZWI1OTk5MGNiNDRjNGYzZDk1MmY4MTE5ZmYxMTExZCI6IiI6MTI4OiJmMTVkZGY5MzhiYmY1MmMyOTc3YWRhYmFmNDEyMGRlOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImZiZTJkNTJiN2Y1MGJmMjNhMTZmZjhjZDg2NDIxNTAzNGZkZmJmNGQxNTA2Y2EzYzFmZmIwMTU2NTNlZmUzM2EiOiIiOiJiMTU1ZjhhYjFhOGMwMzI3Nzg5Y2ZiODMxMDA1MWYxOSI6ImVkOGQxNGFkZjFjMzYyYmJhZjBkNTY5YzgwODMyNzhlODIyNWY4ODNkNzVkMjM3YTRhYmNkNzc1YTQ5NzgwNjAzZTUwYzAwYTFiNWI1OTQ2YzA4NWU1N2E3NDliNDk0NmY2YWNhOTZlZGEwNGFjOTk0NGE3ZDNkNDdhZGM4ODMyNmVkMzBhMzRkODc5ZGQwMmZiODgxODJmOWUyZGVlZmFlZWUxYzMwNmI4OTc1MzlmYTkwNzViZGEwM2JhMDdiNGZmZmY3MWNlNzMyZWYzYzRiZWZhYzBmMThjODVhMDY1MmQzNDUyNGNjYjFhNDc0N2FiOGY3MmVkMWMyNGQ4ZmMiOiIiOjEyODoiYzVmZTI3Y2E5MGU1YzhiMzIxY2MzOTFlZTdmMWY3OTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ZTg4ODcyMTUxNGZkMDFmYjY3NTEzY2I1NmJmZDI5YWY2N2E5Y2U1MjVlM2U2OTdhZjQ3NDUwZjAyMDUzMTYxIjoiIjoiOWY2YmQ0YTkzZTRmM2YyZjVmNGE3YzJjNWI0NzkwYmYiOiI4NjdkNTA5MjM5Njc1MzVjZTZmMDAzOTU5MzAwODM1MjNjMjJmMzczY2ZiNmM4ODE3NzY0ZjU2MjNjZDYwYjU1NTU3MjQwNGU1NGYyZmU3MDgzZWYzMmI5YTQ1OTNhMWY3MGE3MzZkNmU4ZmU2MWI3N2RlZjUxZjNiMWQ4ZjY3OWQzYThkNTBkMGFhZDQ5ZTUxZWMxZWI0ZDRhMjVmMTNkMTRmM2U1MjUzNTU1YzczZWFjNzU5ZTQ4NGM2MTMxY2M4NjhiNDZjMThiMjZhY2QwNDBjM2UxY2IyN2FmZWNiYTdiN2ZjM2Y1ZmY0ODgzZjRlYWZjMjZjN2YzMDg0NzUxIjoiIjoxMjg6ImVhMjY5MDk0MzMwYjY5MjY2Mjc4ODlmY2RiMDZhYWI0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDhmODJiMDdlNzMxOWNhNjA3YzlhYTAzNTIwNzBjYTg4M2RkN2IzMmFmMzcwYTc3NGY2M2IwMjcwZjQ0ODM1YSI6IiI6ImU4OWU0NDg0NDk3Y2I3MjhmODY1ODVkODkxOGI3ZmFlIjoiNDIzNDBkOTZlMTg1MmRlM2VkNWUzMGViNGEwNWUxZmIyMjI0ODBiNDUwZTJiZjRlMmNmMGZiMmE1MjVlYjY2MDJlZjQzYTg5NmFkYzVjNTJlYTUzODFjNjQyYjIxNzU2OTFjMDE0ZTdhNmRhZTkxZmE2ZmY1Yjk1YzE4YTJkZDJlODgzOGQzYWJkNDZhY2UwYjMwNWYzZjIyZDMwYTBiZDgyYTgxYmJmNjc1MzM2MmI1NGIwNjI0Yzc2YzBkNzUzZTMwZWI2MzYzNjVmMGRmN2UxYmY4YmYxMzBjZjM2MDYyZWMyM2Y1OGEzZjdlZDBhZTdiZmJiZDY4NDYwY2Q3NiI6IiI6MTIwOiJiMjM0YjI4OTE3MzcyMzc0ZTdmMzA0ZjE0NjJiNDkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiNDliMDRhNTRhMDhkMjhiMDc3ZWE1NGMxOGJmYTUzZTkxNjcyM2U5MTQ1M2I0N2Y4OGUzOTkwNDZiOWI0ZGNjIjoiIjoiNjI3NmM1NzdjNTMwZjkxYjQzNGNlNTcxOWUxYzU5ZGUiOiI2YjczZjk5NmM0OWUzNjhmYzRkMjE4MTYxNTNhZWZiMDgxNTA5ZjlkYzA5MTZkYmU0ZmRmNzdmMzk4NjdhMmJkNjE3YjhhNzVmMzlmNTE1YjFiYzE0NTQwMDlkNTI0N2VmY2Q5MGJhMGQ0YTY3NDNjNmYxMmE5MjliNjY2NTg0ZjNiNTUyNTRjMzJlMmJhYjIzMjFmOTRmYTg0M2RjNTEyNGMzNDFkZDUwOTc4OGExNTgxOTFlZTE0MWViMGJjNGUxYjk2ZjY5ODdiYWZlNjY0YTBmOWFjNmQ4NWM1OWNlZTk1NjRhMjdiY2MzN2RmZmFlODBjNTdmYmY3ZTc0OGNlIjoiIjoxMjA6IjY5ZGQ1YmRlYjE1ZmRiYzNhNzBjNDRiMTUwZjcwZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjM5OGJiMzdiYjk5MTg5OGM3ZGFkN2JmNTkzMGRiYWQyMGQxMjFmNjhkNWVjNmM1NmZmZTY2ZjIzYzBjMzdmOGUiOiIiOiIwYzNiZDU1YjU0YzEyMjFiMGNmMjVkODhlYTRkZmUyNCI6IjRjNDhiOTI5ZjMxMTgwZTY5N2VhNjE5OWNkOTZjNDdjZWNjOTVjOWVkNGM0NDJkNmEyM2NhM2EyM2Q0YjQ4MzM2MDFhYzRiYmNkYmMzMzNjZDFiM2EwY2Q5MDMzOGUxYzg4ZWY4NTYxZmVkN2FkMGY0ZjU0MTIwYjc2MjgxOTU4OTk1Yzk1ZTRjOWRhYWJmZjc1ZDcxZTJkNTc3MDQyMDIxMWMzNDFjNmIwNjJiNmM4YjMxYjhmZTg5OTA1ODhmYmFkMWU2NTFhNDliMGJhZGQ5YThkODA0MjIwNjMzN2ExZjJhYTk4MGIzYmEzYjVlZThlMzM5NmEyYjkxNTBhMzQiOiIiOjEyMDoiODUyODk1MGJkNTM3MTY4MWE3ODE3NmFlMWVhNWRjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGU4ZjdjMzE3YjIyZGVhOGVhYmU3ZWFhODc0MTNhOThmZjU2NTcwNzIwOTg1YjY3NDNhNWY5YWY1NjM4N2NjYSI6IiI6IjNhOWE1YTgzOTA0NTcyM2FmZGZiMmQ1ZGY5NjhiZmNiIjoiYTg3ZDk1ZjhmNDdlNDVhMWM3YzVjNThkMTYwNTViNTJiMzI1NmM1MjcxM2ZkMDkyYmNkNmNiYzQ0ZTJjODQ2NjlmMjNjYTJhMTllMzQxNjNlZTI5N2Y1OTJmNjA1NGRiYzg4ODYzYTg5NmMyMjE3ZTkzYTY2MGQ1NWE2Y2Q5NTg4YTcyNzVkMDU2NDk5NDBkOTY4MTVjN2RkZmE1ZmM0Mzk0Yzc1MzQ5ZjA1ZjFiY2FmZjgwNDA5NTc4MzcyNmMwZWNlYjc5ODMzYTQ4Y2VmZDM0NmIyMjNmNGU1NDAxNzg5Njg0ZTVjYWVkYTE4N2EzMjM5NjJhMWYzMmY2M2YwMiI6IiI6MTEyOiJmYWFkNmE5NzMxNDMwZTE0OGFjZTI3MjE0ZTY4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjdjOTVlNTcxOTdmMGUwYmJhYWE4NjZkMzM3ZmNjMzdmM2ExMGRjNTVhMDU5ZjVlYTQ5OGRlMjA0ZDJmZmY2MSI6IiI6IjVmMTcxZDIwM2M2NTNhMzE2Y2FjNDNkZjk5ZjQwMzNhIjoiODRmMjgxYjM4OGNhMThiYzk3MzIzNjU3YTcyM2E1NjI2MDczMTIzNDcyMGIwMmI2ZGRlMDBlYTEzNGJkODRhMTg5M2JlYzM4YWY4MDIxNGM0ZGEwMWI5Mzk1OGFiMDBmM2I2NDhjOTc1MzcxZTU2NWQ1YjZiZjJhOGY2M2MwZjNjZmNkNTU3YzlmNjM1NzQzOTBiNmFlNTMzMDg1YWNhNTFmYTlkNDZjZDI0NzhiNzY0OGI2ZGNiYmFjN2U2MTE5N2E0MjU3NzhkZWJlMzUxYWMyMTEwYmE1MTBhMTdlMmMzNTFiYTc1ZDVhNzU1ZWY1NDdjZjlhY2M1NDY1MDIyMiI6IiI6MTEyOiI5ZWE5YzcxNmUwNmEyNzRkMTVhMzU5NWEwYzQxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTE0M2YwMGUzMWM3MmJkOWZjZWQzMTU4NWQwNDdmNjdmMTAwNGU2MjQ0YzNkOWMxMGM4YWUwMDVmZWVhYmM4NCI6IiI6ImU0OWNkNmFmOWEyZjBkYTJhNzE5ODMxN2RhOTJhYjJmIjoiYWI5MTkzYTE1NTE0MGQyNjVhYWJmZTJkZDVlZmNhN2QzZmE2MTI5NDk4NTMyYmNjZDc3ZjA5ZmExYTQ4MDcwMjYyMGIzYWI1M2RmOTFiMDEyNjIxMjJmMWE2ZmMzODdiNWZjNTVkYWRmY2RiOTlhZGE4M2Q0YTViMDY2NmM4NTI2ZGUzMDlmNDFlYjU0ZDY5YjUyNTk1YzQzNTUwYTZiZjdiNGI4ZjBlMGM0ODMxMWI1MjE3NjJlYWE1Njc3NDRjNGM0NzA0ZGQ5NzdmODQwNjhiNTlkYjk4YTY3ZTMzY2M2NTMwMmJhNTkzNjBkNjAwYTIyMTM4YzVhZDMzMTdmMyI6IiI6MTEyOiI4MjkzZTM2MWZlMDMwOGEwNjdmODlhZWEzOTNmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZDBiYTE4MDA3NWMzNzMxMTZiYjAzNzkwN2I1MTJhZGQwMGJhOWE0NjkzYThlY2MxNGNhMGQ3OWFkYWRhOTBlMyI6IiI6IjVjMTUwMWIxOWNjZTU0MDRkY2NjOTIxN2FjODI1M2I3IjoiM2ExNjE2MDVlYzAwNTVjNDc5ZGQ0OGNkYWVlZDU5ODFiOGI2MGZiN2I3NzgxY2M0ZTU4MDIxOGM3MDE0YzMwNjBhOWY3MDZlNmUxNmNmNDAyMWU0ZDM4ZGViNTEyNTM0YjQ4NGZmMjNiNzAxOTc1YmRmOTAxMTQ2Y2NhZWNlOWMzZmZiYmVlYjE3MmNmYjY0YTkxNWFlMGRiZTdhMDgyYjkwNzc3NzZhMzg3YjU4NTU5YTg4MWI5Yjc5YjkwYWEyOGFkMWFjMGYyYmVjZTMxNDE2OWEyZjc5ZWE0YzA4Mzg5ZjdmN2RkMTBlZTJkOWE4NDRmZWU3OWU3YmYzOGJjZiI6IiI6MTA0OiIwNTQxMjYyZmRkZmQ1ZDAxZmYwZjNjMmZiNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImM5NzVjN2U1OTEzM2MyMzFkMWI4NGM2OTY3NjFjNDEzYmEyMGFmZjdmYjdkODU0YzY5NDdlNjVkYjNjYzU3YjQiOiIiOiJkOGZlZGRhNGNjY2FmNmIwODE4ZWRjZmE3YjFmMDNmYSI6ImNiNGNjOTE3MTM2N2Q2NDIyYWJmYWYyYjQ0NTJkYTI2N2ViOWNjZjFjNGM5N2QyMWEwYTEyNWRlNDg2OTk3ODMyZDE2YzdlNDEyY2IxMDllYjlhYzkwYzgxZGZlMWExZGQ5Zjc5YWY3YTE0ZTkxNjY5YjQ3Zjk0ZTA3ZDRlOWJkNjQ1ZDlkYWE3MDNiNDkzMTc5Y2EwNWRkZDQ1NDMzZGVmOThjZjQ5OWZmMTE4NDljYzg4YjU4YmVmYmRkMzg4NzI4NjMyNDY5ZDhiMjhkZjQ0NTFmYzY3MWY0YTNkNjk1MjZhODBjMmU1M2U0ZmRlZTYzMDBkMjdkOTdiYWY1ZjQiOiIiOjEwNDoiNzdhYzIwNWQ5NTllYzEwYWU4Y2VlMTNlZWQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhODZlYzY4ODIyMmM1MGMwNzI3NGVkMmQyYzhhZTZmODgzZTI1ZjhmOTVkNDA0YTc1MzhmZDgzMjI0MTk5MzI3IjoiIjoiOTljNzNmZGI4Zjk3ZjIyNWY3YTE3Y2Y3OWMwMTExMTIiOiJjZjVmNzA3ZGUwMzU3MjYyYzA5OTdmYTNlYmZlNmUwNzE5MmRmOGRiNWYwMjllNDE4OTg5ZTg1ZTZiNzFlMTg2YjAwYzYxMmVjZWRiZmUzYzg0N2U1ODA4MTg0N2YzOTY5NzMzN2FlN2M4MTVkMmNkMDI2Mzk4NmQwNmJmM2E1ZDJkYjRlOTg2ZGJlNjkwNzFmZDRiODBhNTgwZjVhMmNmNzM0ZmM1NmM2ZDcwMjAyZWEzNDk0ZjY3NTM5Nzk3MjUyZDg3Y2Q3NjQ2Mjk2OTMyOTU5Yzk5Nzk3YTA0NDY1MzJmMjY0ZDMwODlkZDVmNGJjY2VhYWE3Mjg5YTU0MzgwIjoiIjoxMDQ6ImMyMDkzYWQ0NzA1ZTYxM2IwOWVlZTc0MDU3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkMzk4MWYwYWExZWQ4Y2IzNjlkOWIwZDdiMGU1MjllYzYwODlmZjJkMjI2YzU0Mjg4NWIxYmZmNTUyNzZlODkxIjoiIjoiNzMzMWY5MWJkMWE2N2MyMWM5ZGQzMzZhMmE5MjI4MzkiOiI0MDZkOWNmNDVmYzg2MThkNTY0MTU0MjQxZGM5YzAwNmVjZGNkODQ3NDA2ZTVhNmU3MTI3YWM5NmU3YmI5M2Y0YzMzOWZmNjEyYzUxNGI2ZjY2ZGY5NWEwODQ1MDM1ZDc1MzUyMTJhMmFhZWViMGVlNTEyZDFmNDM3NWM5YTUyN2U0ZTQ5OTM4OWMyZDdmN2Y3NDM5YzkxM2VhOTE1ODBlNzMwMzc2N2I5ODljNGQ2MTlkZjc4ODhiYWY3ODllZmQ0ODliMDhlZGEyMjNmMjdkYTVlMTc3Y2Q3MDRjNjM4ZjVmYzhiZjFmZWNmY2QxY2FiNGY0YWRmYmM5ZDFkOGJhIjoiIjo5NjoiZGJiN2VjODUyYzY5MmM5YTBlMWE1YWNkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4NDM2OTY3Zjk3YzU5Y2E3M2I3NjBiNzNjNmUwODhkMWRhNGU3NmI3MTIxODhhYjQ3ODFkOGQ4NDk1MDVhZTQ3IjoiIjoiOTQwMWRkMDk5ODkxNDY0NTY2OGQwNmQ1MThiZmU3ZDciOiJhNWY0MDkwNjE3NzQxNzA5N2MxOWEwYTIxZGJiNDU3YTY5NGUxNzMxNDE4MzdmNjk1YjA5YzhlYjU4YWMyY2UyOGFhY2U0ZTU5Mjc1YjYyNjZkYTkzNjlhOTkwNWIzODllOTY4YWVmYzY0ZDc4YzdlMWQyZjAzNGVmNDEzZDM0NThlZGNiOTU1ZjVjZDc5NzFjMjhjZDY3ZGM5OTAxZWYzYTJhYmM2MTIxNzA0YmI1ZWNkODdhNjU2OGQwNTA2YWJiYzg3YTJmMTAyMDVkYzhlYjBjZDFiNTEwOTE1OGQwZTc0M2MyYzNhMzQyZDYwYjhkNTViYmNiOGQ4NTA3ZWQxIjoiIjo5NjoiZGQ2ZDk4OGQzNTJkZWNjNGU3MDM3NWQ4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjZTZiODQ2YmNlZGM2YWU3NDdlNjZlNzJjZDlmNzY2NGU2Y2FkOTYyN2JhNWYxZjE5MjNmM2QzYTZlZDU5MGQxIjoiIjoiYWM4NjVmZjhhNjI1NWU1MDFiMzQ3YTY2NTA1MTBkMDUiOiIxNjU4YjlmODQ2OWFmMWRmYTYwNDU4Y2Y4MTA3ZGIxZWRkMWU0YmJhNzBhMGJkMjNlMTNlMWJiYTBkMzk3YWJmNTFhZjgzNDhmOTgzZmNkZmNjODMxNWVmMWZmYzlhMjYzNzEzNzdjNjJkZGJhMDgzNjNiZDJiZjBmZjdkMGMzYjYwM2ZhZDEwYmUyNGVjZWU5N2IzNmQyMjU1YThiMmVmYzYzZjAzNzEyM2NlZjRiYjRmZTM4NGFhMGM1ODU0OGIyZjMxN2MzNmVmM2VmMjA0YjI0NzY5ZGU2YmEzZTlkODllMTU5ZTJiZjFmOWQ3OWFlYjNlYjgwYzQyZWIyNTVlIjoiIjo5NjoiN2VlODdhY2QxMzhjNTU4NDU1ZmZmMDYzIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwMDM4ZWNmMTQwN2JiZjBkNzNhZmE1ZTAxMDc2OWI3MWU4NjQ5YzQyNDkzNDVkY2Y5MjNlZjlkYTAyNTRjNmFmIjoiIjoiNzRjNmI5OGZjNmNlZDNhNTliZDljNDJkMzFkNzEwOTUiOiI0NjdmNDgzYzcxYzM0MDRmZTdmMDlkNmY2YjZiNjRjM2I3NjEzYTBkZDMyNDcwY2YyNGJjNTkwZDM5OTRhNDhmM2U4Y2Q1ZGMxOWVhOGNhN2Q1MzY2YWQ3YzVhZDMxY2M5NjEyZGFmZWRhZWExMDlkZGUyYWVkZmU1ZmMyYTBkYjJjOTAzZGQxZGMxYTEzOTQ5NzIwYTEwYmFiZjM3ZmJhNWEwZWQ3Y2I1ZjNkYzllYjVhNGQ4MzMxZjIxOGU5ODc2M2U3Nzk0YjNlNjM3MDVkNDE0ZWYzMzIxNjBiMGIxNzk5ZjFmZjVjYmUxMjlhNzVlNWM0ZTBhNGVkMzVlMzgyIjoiIjo2NDoiNjJmZTA4OGQ5MTI5NDUwYiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTlmYzRjMjIxNTFlZTg1MTUwMzZjMzhiYzU5MjZjMGUwYmJkOTNkYjVkMGZjNTIyYjJhNmJmNjI5OGZlZDM5MSI6IiI6Ijk1NDdmMDU2YzZmYjllZjcyYjkwOGY1MjdjYjUwMGMxIjoiNTExYjE1YzI1YjJhMzI0MTU5ZTcxYzNiOGU0N2Y1MmQzZTcxZTViYzM1ZTc3NGMzOTA2NzI1MGY0NDk0YzljNGViMTg0ZWNiZTg2MzhkZTk0MTg2NzJkOWFlMmM2YTBlN2Y1NGMwMTc4NzlmZmIyYTM3MWRlMTYzOTY5M2Q2NTRhNDNjYjg2ZTk0YTczNTA1MDg0OTAxOTE3OTBkMTI2NWI5OWU3YjMyNTM4MzhiMzAyYWFlMzM1OTA5NDlhODc2MWEzYmIyYWViMWJhNzk4Y2RkZWIwMGE1M2RhYWQwNWEzMzM4OWQ0YTE5MjY5ZDY1MTE2YTg0ZjEyZGJhNTgzMCI6IiI6NjQ6IjA0NjIzOTEyYmI3MDgxMGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNiNWQzYjE5MjBiNWExMDViMTQ4MTUzYWUxZjEwMjdjNmQ0OGJjOTk2NDBlYTg1M2Y1OTU1ZmVkNGViM2Q2MjUiOiIiOiI5YTQwOTFjMmViN2U4ODc1OWJkOTE2OWZlZTMwMzQ4NSI6ImFhNjgwZDA3MTQzYmE0OWE5MDk5ZDU1NTEwNWZjM2NmY2I4OThjZWMxMWFkZTk2Nzc2ZGM5Nzc4Y2M1MGZlOTcyZTFlODNjNTJjODM3YjcxZTI3ZjgxZDE1NzdmOWJkMDlhZmUyMjYwZGZkOWE1ZDlkZmJkM2I4YjA5YTM0NmEyYWI0ODY0N2Y1ZGQyZmY0MzcwMGFlY2NlN2ZhNmY0YWVlYTZlYTAxYjI0NjNjNGU4MmVjMTE2ZTRkOTJiMzA5YzU4NzlmYjRlMmNhODIwZDAxODNhMjA1N2FlNGFkOTZmMzhhN2Q1MDY0M2E4MzU1MTFhZWRkMDQ0MmIyOTBiZTMiOiIiOjY0OiIwMzNiZmVlNmIyMjhkNTliIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNmM0YWQ4ZTI3NzY0MTU3Nzg5MjUyZjRiYzRhMDQxNDVjYjk3MjE5NTUzMzBhMmY2YTJhM2I2NWNhY2YyMmJjIjoiIjoiM2RlMTM2Y2JkNzUwNjFjODg4MjI2ZWZhYjEzNjg0OWQiOiIwZjY5NTFjMTI3ZDZiYzg5NzBlMmFkMjc5OWUyNmM3ZmI5Y2EzMWQyMjMxNTVmODgzNzQ5ODRiNTY2MDYyNmM4MzI3NmZmYTZjMTYwZjc1ZTBlMWJjZmE5NjYxNjE4OGYzOTQ1YjE1ZmMxYjgyYTRlMGVlNDQwMDBhNjg0YjNjMzg0MDQ2NWFlYmUwNTEyMDgzNzllZjNhZmU5ZjU2OWVlOTQ5NzNkMTVmMGE0MGM2ZjU2NGZhNGJhMTFkNmUzM2NmOGFlMTc4NTRhOWUxMjM2MGEyYjg0OTVlMmNjZWVjNDYzZjVlMzcwNWM3NDA2OWJhMzdiYTZkNzI1ZjQ1OGMwIjoiIjozMjoiZjY1OGM2ODkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjMwY2Q5OWZlZDk3MDZjNDA5ZTM2NmQ0N2ZlZmMxOTFmNzliY2M0N2EyOGJlNzhmOTg5MGZkOTBkNDg2NGViODUiOiIiOiI4YzdjZTM0NjkxNTAzYmYxNGM3NzZmODgwOWYyNGU2MSI6IjRiNmIxMGMyZTI5MDVhYjM1Njc2OWI2NDUzZGQxNjBhMDhlODYyM2IwODc4ZmNjMWMxZDY0ODIyZjBhZWExZjRmNWI0Njk4ZGVkNWQyM2ViYWZhMTFiYzFlNGNlOWU1Y2Q3ZDdjN2IxM2RlMDJkMTFhOTQ1YmE4MzYxYjEwMmJhNDljZGNmZDZhNDE2ZTNkYjc3NGNkN2JkYTAyNGZjY2QxYWQzMDg3NTYwZGMxNWJiZmU5YjFhNWM2YzcxZmFlMTdhMzI5ZjEwNGY2YzJjYmE3ZWI2YTc0NTk1MzVjYTMyODE0NmQwY2NjMGE5YmQyOGEzZDFjOTYxOTQ3YTM4NzYiOiIiOjMyOiI3Nzc3YzIyNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTQ3MmYyNDUyOTMzZGNmYWM0YmIyMjgzMWNlODNjNmExZGRmMjVlZjhkMmQzYmE1OWQ3MmIwZDE3M2E5ODZlOCI6IiI6IjE4ZmIyYzM0YjA5NTVkNzEyOTYwMDA5NjE3ZDMwMGVmIjoiZDI4M2RkNzVjZDQ2ODljMjY2YzhlMGI0YjY1ODYyNzhhYTI1ODNjN2M0MWJmMTJiZDFjZmRlZjIxZDM0OWFjYmJhYmMwYTIyMDRkYzQxMzBmOTIyOTQ5MjA2YzRmYmRjZTM3ODZhYjg2MTRlMzI5MDg4MzhhMTNiNjk5MDQ1M2FiZjE0Yjg0ZjU4MTJlNjA5MzY0NGFjY2RkMzVmN2FkNjExZWExNWFlZmFlMjhiM2NmMWZjNWRhNDEwYmNlYTRmMGE1MGQzNzdmZGNjZWZmZTQ4ODgwNWJjNWE3MWZhYjAxOWIxMmZhODcyNWQ2ZTdjOTFlNmZhZjEyZmJhZjQ5MyI6IiI6MzI6ImM1M2IxNmExIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTA2ZDUzMTkyMTBmNDEwN2VhNzI2N2ZhMmU4MTgzZmNiZjc0ZmQzYjA1NzliODU2NTc3MTc3ZDljYjMwN2Q0MiI6IjJiOTE3OWQyMWNiODg0NTgxYjBlNGY0NjI0NTUxNjdmMWY3ODk5NzE3MjQ1ZDRhZWQzZDhkYjU5ODNkYWNjY2NlYmZjMjEzMGEyMGMyODQ1NjNiZWE1OTk3Y2MwNDM4YzgzZDhmYTdiYjllMzU4OGVmZWQyODVhMGZjYzMxNDU2ZGM5YTMxMjJiOTdiYjIyZjdlZGMzNjk3MzQ3NTkyNTgyOGMzMjM1NjVlNDE3ZWM5NTE5MGRiNjNiMjE4ODEwMTZiNTMzMmYyZTQwMGJiNDcyNGM4NmE4ZWUwMjQ3MTQ5MzcwZWU1NDEyZjc0M2RjNmJmN2NhNWJjYzMxYWZhMGYiOiJmMmIwNTY0NzA1NDMwYmM2NzI5NjRiMDQ5MTE1ZTEyMiI6IiI6IjNmYTM0MmE3NmNiNWQ1MDFlNmE2ZmFkZTE0YWFiNTRhNzY2MjBlNGVhMjI4NzE0N2Q0Y2EyYjlkNjJkMmE2NDM1OTFlNWRmNTcwZWY0NzRlZTg4YWQyMjQwMWMxMDU5ZTMxMzBhOTA0ZTliZjM1OWM0YTYxNTFmZjJmM2U0Zjc4ZWYyN2E2N2Q1MjdkYThlNDQ4YjBlZjVjZGNmZWM4NWYzNTI1ZTM1ZjhkMDI0NTQwMzg3ZTRjZGNiMTAxOGMyODFhMWFmN2Q0YTM2ODhhMGZlYzRkOWY0NzNjODE2ZjdkNGM0YzM2OWY3MGQ3ZGZlOGYxYjdmYTRmNTgxMDk4YTEiOjEyODoiMThmMTg2ZWQxZWUxZjRmOGIyOWRiNDk1NTg3ZDBhYjAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIwZGZhODM0ZTk4YjZjNTFlZTkyNWRkOWVkYzliZTcyYzIwOWRkY2Q5MDk5ZGVkNTdiNTMzZjIyMzY4OTVhMjI5IjoiN2Y0ZTRmMTEwOTFiZjUxOTc2YzBmYzcxZWNiY2QwOTg1Y2RhZDIxMzU1NDljODE4YzA5NTY3ODAxZDhhOWE0MmM3MTlhYWI3ZGMyY2I1OGExMGI1MDY3ZDE0YzUyY2FiZTZiYjliOTM5ZTdiOWNkMzk1ZWFmMTBiYTZhNTNmZDJlNjQ0NmUxZTUwMTQ0MDEzNGUwNGU2NjJlZjdlYmIxYzljNzhiYmQzZmQ3Y2I5ZGU4Yjk4NTQxOGJlMWI0M2ViYjVkNzkwMmNjYjRjMjk5YzMyNWM4YTdjYzFkZTkxNzRmNTQ0YmM2MDgyOGMxZWViYWQ0OTI4N2NhYTQxMDhhMCI6ImExMDFiMTNiMjM4Y2ZhYzY5NjRmZDZhNDNkYWVhNWE3IjoiIjoiYmM2MGQyMDQ3ZmQ4NzEyMTQ0ZTk1Y2I4ZGUxZmZkOWYxM2RlN2ZkYTk5NWY4NDViMWE0MjQ2YTQ0MDNmNjFjYTg5NmJkNjM1YTE1NzBkMmViNWI4NzQwZDM2NTIyNWMzMzEwYmY4Y2VhM2Y1NTk3ODI2YzY1ODc2YjBjYmNmYTBlMjE4MTU3NWJlOGU0ZGQyMjJkMjM2ZDhhODA2NGExMGE1NjI2MjA1NjkwNmMxYWMzYzRlNzEwMGE5MmYzZjAwZGFiNWE5YmExMzljNzI1MTliMTM2ZDM4N2RhNzFmZWZlMjU2NGQ5ZjFhYTg1YjIwNmEyMDUyNjdiNGNmYTUzOCI6MTI4OiJjNGNjMWRiZDFiN2ZmMmUzNmY5ZjlmNjRlMjM4NWI5ZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlNTkxNDRiMTE0YWM1NTg3YTdhODA3OWRjMGUyNmYxYjIwMzMzOGJiM2U0YjFkMWQ5ODdiZGRjMjQxNTBhODIiOiJiYzdhYTFiNzM1YTVmNDY1Y2ZmZWNjZDhkZDRiMGEzM2E1NzFlOWYwMDZkYzYzYjJhNmY0ZGYyNzJhNjczYmIyY2MwMGU2MDMyNDhhYjZiZTU2MjdlZWJjMTA5MzRmZTRkMWRjNWNkMTIwYTQ3NTkzNmVlZmEyYzdiZGRlYTlmMzZjNmM3OTRkMmM2YmQyNTk0MDk0ZTU2Y2FjMTJkOGYwM2UzOGYyMjJhN2VlNGZjNmMyYWRmZmU3MWM5YzEzMDAzZTMwMWMzMWZmM2EwNDA1ZGRlODliYjIxMzA0NGQ0MTc4MmM0YmI0ZWIzYzI2MjU5NWQxYzBlMDA1MjIwNDdjIjoiZmRjNWE0MDY3NzExMDczN2ZlYmFlNDQ2NWIxYTc2Y2MiOiIiOiIwODRjMzFjOGFlZjhjMDg5ODY3ZjZlMGNlNmUwYWFkYWZhMzAxNmMzM2MwMGNhNTIwZjI4ZDQ1YWFjOGY0ZDAyYTUxOWI4ZWJhZmQxM2I5NjA2YWI5ZGI0ZjI1NzJmMzk2MDkxYmM1YTFkOTkxMDExOWNhNjYyZDQ3NmMyZDg3NWE0YWI2MmQzMWZmNWY4NzU2NzhmMjVhNDc3NWZhN2ZjODViMWEzZDQ0MmZiMmM1MDQ3YTNkMzQ5ZDU2ZDg1Zjg1ZjE3Mjk2NWU2NDc3NDM5MDQ1ODQ5YTBiNTgwMTRkOWQ0NDJlMmNhZTc0NzA5ZWQ4NTk0ZjBlYzExOWQxZDM5IjoxMjg6IjRjMzllMGQxNzAzMGE1ZjA2ZWNkNWY0YzI2ZTc5YjMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTdhNmI0NTlhNTM3MGNlZWM0ZDQyOWJiYTk0NzJhNDlkYjA3Njk3ZGM2NmRiYzJmMjk0ZDNlNjJmZmM4YWFjMSI6ImNiOTU5ZTU2MTFhNjM2MzE3ZmViNTI2NWQzM2IzMTVjMmY1YWY2NDE1OTAyOWYwMDMyZTMzOGJhYmJkYjBhNTI1YmE2YjkyY2IzYmU3ZGI5ZjAwNzc1NjFlNmNmZmUxMjQ3YmFkMzJkZWE4OTE4ZjU2MmRjM2NkODMyMjVjZGJjYWVkNjUyYjg3YzYyZmVhOGVmZjE1MzYzOGEzYTE0ZWY5ZjlhODhiY2M4YzlhNmI2NWZhOWRjYzUzZjYzZDFiMTRmYjliYjBiYWYxN2U3YmZiOTU2OTBjMjVjY2EyYzMwOTc0OTdlNDFmN2UyMjk5YTg1MThkNWQxYzVmNjI2NGUiOiI5MjQ2OGQ0MmFkMzc3YWZmYTdlODA4ZDk1ZDhjNjczYSI6IiI6IjU5OWRiYzQ3ZTJmMmUzYjA2YjY0MWM1MTBiMjM4NDE3YjAxODY5ZjBlN2QwODYxOTc1MmY2ZDlmNGIwODU4NTczMWRlYWViNDM5ZmYyNmUwMmQ3ZTUxYjQ1Y2E1ZTNkNGE3NzlmZTRjZmM5NTcyZDFkNjQwN2Y5OGRlNjlhOGZjYTYwYmYwMWQxYTc2OTEzMGJiMzhhNjc5MzNhMmJlM2FhM2VhMTQ3MGQ4ZjMyYTM0ZGM4NjNkYzgwMGZlYjdlZjcxNTg4ZWRkOTQ4OWJkNTlhMjM2ODVmZjUzNThmOWI1NjJmYzBiYmFkOWUxMWRiN2E2ZmVkYmQ3OTIyNTUzOWQiOjEyMDoiZTg1MzI2MmVkNDNlNGQ0MGZlYTZmMzgzNWQ0MzgxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTgxODkwNGE5OWUzZDgwYzk1ZGM3MWExNjQ4M2FkZTFiOWI4ZTdkZjYzOGNlNmE0YzFkNzA5YTI0NDE2Y2JlOSI6IjJjMDczY2RjMTFhOGQ1OGZiNTVlMWRhZGJiYzAzNzJkZGU4NmMzODdmYTk5YzkyNDliZDA0Y2IyZjJkMjM5ZGUwMWJlYzhjODc3MWE5ZmIzMzY2NGVlMDZlYTgxYzM3YTgyNDUyNTY2NDA1NDE3M2I2M2EyODk0ZDhkN2ZmYzYwYjllOTMwNTI4MDI0NzhhMTg5YmU1ODM1ZDk3OWEyOGNlNzAyNWIyMTlhZGQwNjIyZjk3YzliY2YzZWNmNjI5YjU2NDA4ZWQwMDJhMTQxMDYxMzIwNDAwNDA5MzQ1ZTk0YTdhN2UzOTA2NjExMzA1Zjk2ZjJhYmM5ZDYyY2M0MzUiOiI5NmEzMDFhYjZiYzAzMDliZTk3MzViZDIxY2M5ZTEwZCI6IiI6IjQ4NzZlNDQ5YjBjYWMwOWEzN2JiN2U0YjhkYTIzOGY0YzY5OWFmOTcxNGVjNGZjZjIxYTA3YzVhZWU4NzgzMzExYTEzMTQ5ZDgzN2E5NDljNTk0YTQ3MmRkYTAxZThiNmMwNjQ3NTViNjMyOGUzZWY4ZDYwNjNmOGQ4ZjE5Y2ZkYTMxNDdiNTYzYjBmNWZiODU1NmFjZTQ5Y2IwZjg3MjgyMmE2M2IwNmYyNjFiNjk3MGY3YzE4YmUxOTM3MmE4NTJiZWFkZjAyMjg4YzBiNDA3OTU4N2MwZjhlYWIxODU4ZWVlYzExYzZiYThkNjQ0NDgyODIwNjhmZGRkOGE2M2QiOjEyMDoiZTFlOGI2MmNlNDI3ZTUxOTIzNDhiMWYwOTE4M2M5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOWIzNGYxMzdlM2YzN2FkZGFkOGE2NTczYjhiNmRhYzlhMjllOTdkYjUzYzBhNzYxMGYzN2M3MmEwZWZhZWJmYSI6ImMxZTA5YzQzMmM2OGEyYzExOWFlYjNiMTljMjExODBlM2M4ZTQyOGUxMjAzM2Y0MTZhOTI4NjIwMzZmNWU4YTM5YTg4OTNiMTBmZTU0NzZlMzg4ZDA3OTE0M2VlMGI3OWIxODNhMzQwMGRiNzc5Y2ZiZjE0NjdkNjk4ODczMDZiMTI0YTg1NzhjMTczY2Q1MzA4ZDQ0NDhlZWZjZjFkNTdmMTE3ZWIxMmJjMjhiZDFkMGZmNWMzNzAyMTM5NjU1MTk3ZDczMDViZGE3MDE4MWM4NTM3NmUxYTkwZmIyYzViMDM2ZDllYTVkMzE4ZDMyMTkxMzJlYTZjNWVkZjdiN2QiOiI1MGRkZGIyZWJlNGY4NzYzNTA5YTYzZDA3MzIyMjc3ZSI6IiI6Ijc5M2UxYjA2ZTE1OTNiOGMwYmExM2EzOGZmMjNhZmFhNjAwNzQ4MjI2MmJjMmQwZGU5ZmI5MTBmMzQ5ZWZmODhkM2RkMDVkNTZlYjlhMDg5ZWVkODAxZWFlODUxNjc2YjdhNDAxOTkxYjcyYmY0NWFjMDA1Yzg5ZTkwNmEzN2VkNzIzMWRmNGFlZWViMWZjZjIwNmNhMTMxMTExN2U3ZTczNDhmYWYxZDU4YWNjNjljNTcwMmY4MDIyODcwODNkM2VkOWUxNmNmODdhZGNkZmExYmIwYzIxYzQwYzIxMDJmZDBkZWY5MTk4NWY5MjI4NWU2ZWExY2RkNTUwZTdmNTAiOjEyMDoiYjNjNmFlMTcyNzRmYWFjYTY1N2RjYjE3MmRjMWZiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjZiNDBlMmU2NzFiZGYyNDRiNDU2NDRkMWE1YWRjNjMwMTFiMzIxNTZiYTlmNWUwM2RmZmFjYzFhOTE2NTA2MSI6Ijk4NTU0NmVlMTJiYTg5ZDk1OTg4YWQ4YTQxNTNjNGY5ZDNjOTFjMGUzNjMzYTk1YjRmOWI1ODhiYmEwMDMyMDA2YzkzMjEwNTE0MzU3YzkxZDU3NGI0MzZkYTEzZGM5ZjY4MTk0YTk4MWU3YjY1ZWI3OWU1NmJlOWNmMWRhYmZkZjUzMTQwNzcyN2MwMzRhM2M3NzQzYmIyMmFhMDJiMjZmMTU5YzJlZmYzYzdlZDUyMDI3ZGUyZThiOGIyZmVmYjcyYzA0ZmJmMjBhMWZmZTEwZDZkZGE3OTBhOTgxMmNkYmU5ZjJlZDY3MDZkN2EyNjM5ZTg1MWE0Mjg3MGVmYjgiOiI0ZTA5MDg3MWU4ODliNGJlMzZkYjVlMWRmMWVhMjgzZCI6IiI6ImY5M2VlYmZmZWRkZmQxNmI0NjE4Yjg5M2Q1N2I0NTliNzA0Yjg5NGIzOGE1ZWFmNmNjZTU0MDI2YzgwMDkwYmU4MzI4ZTEyMjYxZTFiMTBlODFjNzNhYzgyNjFjMjk4MmJiMjU2MDNjMTJmNWZmZmY1YzcwYjIxOTk1MTVjMTcyMDBkYjJkOTUwYTNmMjA2NGQ3YjM2MjYwN2FkYmYzNjg2ZjI3NDIwZWMxNWUxODQ2N2U4NmZhYTFlZmE5NDZhNzNjODg4OGI4ZmRjODI1NzQyYjhmYmVjNmU0OGNkYWJiYjQ1ZjNjZDJiNmI2ZTUzNmI2ZmJmMzQyOWFlYmU5MzQiOjExMjoiZWQ4OGM4NTZjNDFjYWM0OWY0NzY3OTA5YWM3OSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE4YzUxMDVhOTY1MTE0NGNlOTY1YjQyNzAzOThiOTgyMTIwYjg4NTg1MDExNDU3MWVmOGUyY2JjNWQyZjVlMDQiOiIwMGM1ZWEzZDkxMjQ4YmZlMzBjNWE2ZDI2ZGJkZjA2MDlmOTc3YWZjZmE4NDJiNjAzYzEwNjFiMmE0NzNjOWE3OWI0MjFiMjUwOTU1MDMwOWU0YmU5YzUwMTVjNTFjNmRlZjllZTY4YzI0MmY2ZTIwNmIzMDI3Y2U4ZTU4YjdhYjk2YWFhNTBjZWQxZDc4YzJkZmNiYzI1ODk1NzViZWMyY2UzYjZhNTA2NjI3NmZlN2RjYTRmMTExODgwOGQxZTVjYWMwNjI2NjcwNTNjMTUzNTAyODlkYTAzY2QwNzMzNzdjMmQ2NmMwMWUzMDk4ZWQwMWI3NTc4OGM3ZTFmOWU3IjoiYTNhNWY4Mjc0OGFjYzg4N2UzMzMyOGZkN2Y0Y2UxZmQiOiIiOiJkOTFlZDY4ODZhMjY5ZGMxZWIwNzQ1ZGM0Yjk3ZmM1NGNiZWE1ZTY4NTdkMTBhMzAzYTNjYWY4MjhiNGUwZTIwYmI3NDJiY2ExNzAyMWI3ODUyZDA5YTZkN2QzYTU2YWQ4MjI5OGMxNWEyMDgyZmVkMGUwZTMyNmJiMTZkZDY3N2VlMjYyZWFkOTNhMjQxNDdkZTNjMDdlYjhhOTViMTA4YWJmMTczNTcxNTVmMWRlNzkxNzE2ODk0MDdiNjU0NWM5ZmRmOGFiNDQ4NjU3NjQ5MDQzMGMwZTA0M2UyMWU3YzQwY2U4OGU3NTJjYjAwNmNiM2M1OTQ3OWE3ZTU2Y2Y3IjoxMTI6ImFkZDRlMDg2ZDYxMmExMTljNmFhZTQ2YmE5ZTUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NjY3Y2FiZWIzYTY0NGUzNzFjYmJlOTE5NTQxM2RhYWIwMjVjYzZlZmMxMjI5OGJmYWVhMGRkOWJjMDI4ZjlmIjoiOTc3MmVjNDdmM2NkMjZmMDkxYmYxMTdlMDg1ZjIzOTRkYjI1OGMyYzQ2MGRjM2IxNDAyZWRjYjYwYThmNzA1MTdmODJhYTY2OTYwN2I3OGMyYWQ3OWM2NjJjM2IzNzZjZWUxYjlmMzRjNGVjNWQxNTMxOWMzM2RlNzhhNDQwZTdmMmE0MTA4YzNjOWRhNTE2MDRhZGRlMjAyNWZmMWRjMzM2YzQ5Mjc5YzEzYTcxNTM5MzFkZjY3NWRmMGU3OGYxN2E0ZDcyOTczMzExYWY3NGZlNzU1Yzg1Yzc4NjliYWYzODk2YmI3Mzg5MjU5NDJkYzY3ZjFiNmU2OTBjOWQ0OCI6IjdlODkyN2M2OTk1MWQ5MDE0OTQ1MzlhYjk1YWM1OTA2IjoiIjoiNWQ2MmZhNjljZmJmZGVjMzAxOTM0MDhkYWQxNWNmOTgzYWQ3MDdlZTkyMTA2OGI4MTc2NzZlY2E5ZjcwZjljYTQ2MjNhOGMxMTNkZjVmYmE4NjEzMTQxNWY0ZWM1NDZjN2YxYTk0ZmY5ZDAyY2I4ZGRjZjQyMWM3Y2M4NWVkODdjZTcxMmZjZDhkNWY0NTQ2MDc0OWNlZDBkOTAwZmUwMzY4YzU5YjFjMDgyYmQ1ODExYzFhNjQ4YTUxNzY4ZDVlNGJmYmMyM2NhZGEzNzkxZjI4OWQ4YjYxZmQ0OTQzOThiZTFhZDllZTlmZjQ3MWFiYjU0NzAwMGFjMmMxYTVkMSI6MTEyOiIwYWU2YmQ1ZThjMjVkMTU4NWU0ZDRjMjY2MDQ4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiM2Q1OGNkNTE0ZGUzNmNhNzg0OGFhZDFiZjRkMzE0YjNiMzQxNWNhZTFjZTlhMTY5MDIxYWU4NGE2N2Q0YWI2OSI6ImUxYzJlNzllM2Y2NGM1YzY0Zjg1M2FjOWJhMWE4NTNmYmYxYmZkMzAwMWQ0OGY3ZTczZTBlOTdhYTFiOGVkMWYxYTcwNjYxNzhlNzVkZjY4OGM1ZWRiMWM0MmUyNzBlYTM4YWIwZTI0NmM2YTQ3ZmRlNGMzMTQxNDM2ZmU0YjM0YmViOTAzM2JhN2VlYmZjNTNjZjFmNmM4YWUxNzk0ZTliYjUzNjE1MmQxOTZlMWI5NjgwMzMxNmEwNWYxZGNiOTAxNmM4YjM1YmY0ZGEwNmNkMThkYTYyNDNhY2MzYTNkYzY0MWQzYTEzMzJiMTkxNTkzMmNhODk5MzdjYjAzMjciOiI0YTFjMmU3YTNmOTc4OGMzYzJmZGQwZGNjMGNmZTg0YiI6IiI6IjUwZDYzYzY2MGEyYjRmOGU4NzI3NmM1ZjU4NTU2Y2RmMTVkMGZiYjJjOGVhNWUzMjY2ZDI4YzUxNTY0MzEwOWFhN2ZjOTUwZDZkNDhmNTA0ZGFkNTI0NTdlMTY1NzZiNTgxZDM3NTc0NTc0Y2Q4YjdhYzEyYjdkNTliODE5OTkyYzk0MWEyN2UyM2VmOWYyNTdlZDBjNGVhNGVkYTZjMWYzYjI4YjQ0ZGVjYjYzYTkyZmFlODRjMzU1NmRjYjlkNjQ1OGU3MjlkYWQ2YTdkYjlmNzQxMTY5MGZjZTk3MWIzYjI0MGY4Zjk5NzllZDk5MmY4N2Q3NmUyMjdmZDczODQiOjEwNDoiYWM4NDI1NzliZGQxYWM3N2M4NGRmZmFjMmQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiN2U0Y2Q4MGYwM2E3ZWQwOTJjNzc2YjI0M2RmYWQ3Nzc2ZDljYWYzZTY3OTkzOTAzOGUzM2FjOTRkODkzMWRlIjoiMTAyZTJkMmMwZDAxZGJjNjk3MzNkMjQ1MWQxYWMxODE3ZDYwNDE4Njg1ZDRhZThhYTQ0ZTFlZGUxYzFlMDhkMmY3MWYwYWVmNDFhNzJiZDlmMDUyZWE0YTlhMDU3MzMwYzk1ZDk2NGY4YzM2NzliODBmYzljMDk1MmI0NmYzOGUyZWYwNTVjYjMzNzAzZDY4Njc1NzQwMDIxMGZhNWEzOWJjN2UzYmI5YjhiOWNjMjBjOTVkNTYwN2UyZjEwYmI1NTAxNTA3NjgwZWYzYWFhZDk2NTUzMzMzYjFkMjdiZjJmN2FjMTAyYzk4M2VlZGUyMjYyYTVjNjIzN2MxZDc1NCI6ImFmMTYwYTk4M2Q2NzRiN2QxOTI5NGY4OWMzYzkzMDdkIjoiIjoiNmJkZmFlMjk5ZDc5NmVmMzY4NTAzMjdiMDkxYmE3YmIwMmUyOWI2NDNjYTRjOGJjMTk5ZWI5MWVjYmFmODg0MjY0MTJjZmQ1NTcwZTAwNDJjYWI3MzVjYzQ2ZWM2NDhiMDg3Nzk1NWIzZjlhNTcwN2Q1NmM0NzhhYTc3YWU1NTEwNzQ5YmViMWU0NGRiYmIzNzc5MWYxODQ3NzEyMzQzNmE5ODVlNWU5Zjc5ZmRhMGEwNTc1MDQ4NDdlNGVjYWU4NDFmMjRlMWI1MzA3NmQzZWZjNmJkZWEyZWJiMzM2ZWUwZTRiNWU2ZWE5NzNlM2U1MGEyN2I1YzJlNmZlZTNlMiI6MTA0OiJmZGYyMWUyYWMzNTZlNTA3NzQ1YTA3ZmM5NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNhMGM0NmVhY2ZlODVjYmMwYzVmNTI3Yjg3Y2QwNzViZGViMzg2ZDBjYTZkZTgxNmE4N2NmZGRjYjhhODdhZTgiOiI2ZDEyMDNkYzgzOTVlMzVhMzVlMjM0MjAzNjI1ZWE5ZDM3ZDFjMDA5ZGIyYWM4YjFkNWIyOTAyMTk5N2I1NDIxZjFkMTcyZjRjOWE3ZWI3ZGJiNjdmMDAwMjcyMGZjNDEyZjViMTU1MGM3MzlhMmQ3YmE0Mzg3YTFmOTc4YmQ1NDhmZTYxNjlkOTQ3Mzg5Mzc4MmIxMGZhYjk5MTk4Y2I4YjQ1NTNkZmUyNzU4M2MwMTcxMzZmZDhjOTUwNzBkOGQ3ZjlhNjAyZDE1MjQ4ZDM4ZDcyODE1N2EwYjI2NDA0ZTY2MmY5YTU1NTRkM2UxNTgyYmMwZTEyZjAwNTQ3OTJmIjoiYjFjZGU2M2FkMmFkNGI4YTdiZmIzNmFiNzgzODVjM2QiOiIiOiI5ZGUzYTQ1Yzk3NmQzMmVkMmFmNTA3NGVmMTNiMWY4NmYzNWIxNjg5YjFjNjk4YjJlNDI3ZDVkZDYyNTU2ZWIxNDQzOWY3N2NkOGZjYmU2ODZhOWEwOGE5MjJlM2Y1NGE3OGU4NmZkMjg0ZGU0OTNhNzQwNTg2MzYwYjYzZGEwOWJjMWQwMDE3Nzc1ODI5NjljNjc5ZGI1NGEwZGRiOGQ3ZGZkYjQ2NzUwZWRjODgyODA0YTFjMDBlNDE3OTEyYjcyYjRjYWQ1NGRmZmExODk3ZWJhNjE4OGIzZTYxZWJmMGMzZGZhYjI5MmMyNjg2ZGNiOWRiMzAxMmUwNzg4YzdmIjoxMDQ6IjY0MTg5NmRhYWI5MTdlYTNjODI1MjRjMTk0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0ZDU0MGUwYmEyNzEwMzY2N2ViNDUxMWNlOWQyNDM1OTJiY2NiODUxNWFiNTk4OTZjOTkyMmNiNWYxYjQ3YTAyIjoiZDc5ZjliMWM3NGUzMTQxZjE4ODcwNGM4ZDViZGFhZjYwODM2NDJiZTUwZDAwZjIwYzk3YjU2NjQ2ODYzODk1MjUwZDEzMWUwMGRiMGVjZjRmMDM1ZDQyZjA4Y2ZlMjBmNDAxYzJkMzA2MmEzOGRhYTBiOWU3YzE5ZmE3YzVkMzQ0NjgwYWZmNDhkNTA2ZGFhMTgxNDUxZjZiMzRlZDkwOTliOWE1YjM5YzAxNjZlOTNhYzQ0NjNjOWFkNTFmNDhlMzA2M2IxYzE2NzkzNjE1MzM2ZjU1ZDUxNmQwNzlmNmM1MTBjMjg5MWI5N2FhYTk1ZTVmNjIxZTNiNTIwMjYyMCI6ImEyZWQzN2RhYTc5NzUyMmEzOWIwMWRkMjA2ZDA2NTE0IjoiIjoiNmE4OTFiZDI4OWVjMDU5OTA0MjRhMjc3NTI4N2Y0NzI1YWVjZWZlMWFiMjFmYTBjYTY0M2YzNzgyOWNhZTlmY2JiZjgwNWI4ODNmODA3MTAyZmYxMmYxYTg1OTY0ZGY4MTgwNTdkYWVkZDQxYzczNDllZjMyYjI0NjQyMTg2YzQ1ZDI4NThjMzI2MGQ1YjkwNTk0OTY5ZTI2YjY5MTk2M2FjN2ZiZDJlYjRlZWY0NjZhZTY5MGNhMjc0ZDkxOTRkZmM0ZGYxYzNiYWVjMDJhYmMzOGZiZmMwZTJjN2M0ZmNhZmVkMjI3ZDRmNjYwNzMyOWY1N2VlNDM5NDM1YzcxNCI6OTY6IjkwNzRlY2Y2NmJiZDU4MjMxODQ5NTE1OCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTUxZDdlNGRiOWUyMWM4N2JlZjY1YzJhYzZhYWI1YjZiMDQ1YjdkYWRhZjY0MjQ2NDRhOTFlMDRiYTgxMDU4NSI6IjA5ODRjNWQzZjY4YmViYTFkYjRlNmFkZTQyOWNiODk1NGNjY2FiYTlmY2Y0ZDg1Mjg5N2VmNjlmODQ4MzQyODkzMmM4ZjE4YTg5MWY1NGI2OGY3ZDQ5YTAzYzU3ZjcxNDRkODAyZWI5OTZkMjMzY2VjOTMwZDVlYjE5ZjQzZDBmYWY5Yzk0YTJkN2FhY2E0MGM4MDY2YTI4ODI0ODFmNTIxYmI1ZjZiYTE1YjIxMzgxMGRhMzczODE3ZWFiM2Q1MmI1ZGQxNDNhMTUyMTIzOTQ4MmZiZjRhMDdmZTY4YzNkMzVjOTBjNmNlMjdiNTVlNDBhYmNmNDMyYTI2MWRjNTgiOiI0OWUwZTBkMDg5ZTM1NzRmYTVhMzNjOTYzYjQwM2NjZCI6IiI6IjY5MzhkOGE3NjI1ZDEyOTFmMjQ5ZWYxZTA4NmJiMDMwY2NkYzg0NGE5MjcxZmVlMTZkYjYwZTdhY2ZlNGFlZGQ3MjBkZTc2MzQ1MTA5ZDVlNjg0OWZkMTU3NmMwZmUwYzM0ZTczZGNhNDAxMWY4NTY1Y2ZmY2NlZjQyNzE5OGM5MjdmMTlmNjNiODIxZjQzODQ0ZDAwOGNlZWUwNTY2ZjBkODA2MmQ3ODYwZTkyZWJkZjIxZGNkZTgwMDM5YTA0NTA0Y2Q4ZWU5NDg3NGIyZWViMDM4OTYyYTc0YWM5OTAyZDlkN2NlMDlhZmRhYzdhYTcwNmJmMzg5MmRlMTk1MzEiOjk2OiI0OGQzYTgxMTYyMTNmOTJiZmJlODZiZmUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjNlOTYxNTUxNWNhNDUxMDkzMTZjYzAyYmJmM2EyMzQwNmVlZWFiMjA5MmRjNjYxNGRiNzZlNGUwNDdhM2IwMjMiOiI0NmM0YzZiYWQwZjIxMTcyMDk0YWUwN2E0N2ZkNzY0NzdiNjljYTc1Y2MwODk3MGU4ZGJmN2I4NjQ0ZDRiY2RjZTk2ZjlkMTVkZDNmYmE1ZmJhM2Y4NTFhZjE0NTY1MmFkMDA0ZWU1MjVkMTgwZDJmM2UwM2JjMGVjMWMwZThmZmViYzE0NzRjMzQyNzMyYjcyNDdmNjU3YmE4N2ZmY2VmOTMzMzg1NzEyM2YyOWM0OTc2YjA0OGM4OWMyNDEwNzUyOWRjNWRkNjkwMDRmZDE3NmViMGNhNmRkYWUxZGY3YmU3ZDI4YjNiOWRhOTc2NDEzNTg4ZjIwYzFmZmY0ODhhIjoiYzFmYWNmNzNkYTY0ZTE2ZTRhY2VlM2ZkYzNjYzZiMTAiOiIiOiI0NDE1ZGM5NmQzZGFmNzAzZDM5MmJhMTMxODI1NDE0M2E1ODg3MGU2OTE1NzBjYTZiMWJlNjA3NGRkOWMxZmVhZTEyYzcyZjkzMTRmYzNkMTliNmFmZmI1OWI2NDJhZGU2YzRlNjRiN2M5OWY4NTBiZmY3ODFkZTE5M2NjMGEzMjFhMjkzNTZhZGRjYjA5MThhMjgyZTUzODAxNTQxYjViMDEzODNmYTc2MjRjMzZkMWY2NzQyM2YwMmQyYjU0ZjU4ZGVjYTU4MmI3MDMxZDE5MmE0ZDMyYmMxNTRhZTExNDljYjNjNWI0ODUzOGM4MDNhOGQwMWZhN2NmYzE2ODNmIjo5NjoiMzIyZDhkMWI0NzVhN2ZkM2QwYzQ1NjA5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MmMxYTE0YjRlZDU3Y2JmYTMxN2ZlMGRiODc1MjhmNGM1NTUxZGViOWZmYzg4OTMyNTg5ZTMyNTViMWQzNDc3IjoiZWI5MDgxZTE5YjYzYzk0YjVmM2E2OTZjNWZjMmMwYjdmNDM0ZTE1NzQzOTRkMGI0MWRkNjdkZmFjMjhhNzNkNGJhMjZjODZiMzcyOGIyODAyZmI5ZDA5MzBjODk1ODZiMDk2MDI5MDBkMzNlZGRjNWEwMGE0ZTk4ODgxYjVhY2Q1NTk3YWFlOWI4MGIxNTY5ZWRlNzQwNDI5NDhmMmNkNjZjM2VlYWUyMjdhZTEwMjQxZGYwMDFjODVkZmU4YTVmZGEwYWEyMTE0MmVjYWRlNzYyOTBkZmRkNGEyN2I2ZmYzYTkzMmRhY2MwYjVmNDYxNTAxMjM5YWU4ZDZkNWY0MSI6IjM2ZDAyNjA0YjViMjRmNDliMDhiYjAxMDUzYTIzNDI1IjoiIjoiMTJmYmVhOWUyODMwYmEyODU1MWI2ODFjM2MwYjA0YWMyNDJkYmJkZTMxOGY3OWUxY2I1MmRiYTZiZGRlNThmMjhmNzVmMmZiMzc4Yjg5ZjUzY2VmMjUzNGE3Mjg3MGExZjUyNmI0MTYxOWM0YjlmODExMzMzZThlZTYzOWJlMTI1MGE1YzdlNDdlY2JlZTIxNWI2OTI3ZWNmZmFmN2Q3MTQzMjdiMmM0ZThiMzYyYjFhNGYwMThmZjk2ZjY3NTU3Y2EyNTc5OWFkZmFjMDRkZDk4MGU4ZTMzZjk5MzA1MWY5NzVmMTRlMDViZThiNzM0MjU3OGQwYzlkNDViMjM3YSI6NjQ6IjAxZTZhZjI3MjM4NmNmMWEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjRkMDhhMDdiM2U5NDAyNTUyM2E0YTY0MTUwMjljOGY5ZTExZmJiZmQ3MjU2NDk2NGM1M2I4ZjU2Zjg2NWFmMGQiOiI0YWM3YzI3YjA3YTRhZWJlNWNhZjFkZTA1MzhkMTNhNTZlOGMxMWJjNzM3MTNiZjc4YzdhYmJhZDNiOWY2ZDY5MGUwMDQ4NzI2N2RhMTA4ZTJmMmFlNjdjMjRiNDY1N2U3N2JiODNlMmQ1ZTRiMjQ0Y2YzNGU5MjRjZjdiZGI0NDNmODdhYzhjZGIzNzQxNDc0NDlmOGQwNmViNTE3YTI1ZGM4NmYwM2EzODlmMzQxOTBhZWQ1YTdmYWFjZTAzZWJmNjQ2ZmVjMmIxNzNiMmMxNWZkNWNiZTdjNWFmZmI2YzNlZTZkMWNhY2U4YjAwZGQ4ZjY2OGEyMzM2ZGE1YmZjIjoiOThiNzQ1YzdmMjMxYmEzNTE1ZWRkZjY4ZjdkYzgwZjQiOiIiOiIzMzc2OTNjNWM3NDZkOGZjZGY3Y2Q0NGQ4Zjc2YTRkYjg5OTQwMmI4OTExNzZlODViNGM1NDljMzY2YWQ3MDkzMjI4NzRlOTg2ZDZiOTM5YTM1MGQyYTBlM2I3NzkyNGQ2ZDE1NDU0ZDg4MmQxZDNjOTQ0NjlkNzQ5YTIwZDhmMDExNjUwNGNiMzE4ODhhMWU4MWQzYWJmMjVkYmI3YTdmOWU3ZGVmMjZiOTE1MWVlNjQ5YzA1OWRhMTk1NWYxNzE2NDIzYzczNGRjZDI2YTU0ODg0NGFiYjZiNjRjNDQzODNlYzY5OGU1OTM2MWI2NTgyYzY4ODNiNzdjMzM4MzQyIjo2NDoiN2E5MjY2YzRlNWFlNDhmMSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjlkOWZjNDJiNThkZWFmZTliYzk3MzRmNDEyOWRjYWQzNGEyZTU1ZWU1YWQ4YWJjYzNmN2JjNDJkZDJjMGUwNSI6IjExZGJjZDZjZDUzZDJhZjc2NmExYjZlNGFmMmJjOGJhYzI4MTFlZjgxOGRhMmQxZjgxYzE0MGFiNmUwMjk4ZTk1OGZlZjAzMzczNmJjNmUwZGNjZDY2MGI5YTNlNDIyMmJkZjNmODlhOTViMjA2Nzg1ZDIyODUyMjAxZTZkZDAwYjQ0MjMyZWYzYzAzMzkzODkzODEzZGNjZjE5NjA0MTBiNTBjZjUwNjAyZWFkOGJkMjQ2ZmFkODhlNjZjODhiNTA4MjE1NzgwMDQ3NzliNmM0NWMxM2Q4MjExZGYxY2ZjMGZiMmQ3YTM0MmY1OGU0ZjJmMzYyM2ZkMzFiMTJjMzAiOiI2NzkzMTQ5MzA5NmY0NTUwNjMzYzMyMjYyMmJjMTM3NiI6IiI6IjY2YWI2ZTdhNTQ3NzA1ZDhhZThhYzNjYjliYzVmYmJjMThjZDIyMGY4OWFlYzdkZmJmNGY3MmU3YmM1OWI0ODNjNTBjOTQ3MTUyM2MzNzcyZWZjNWRlZWUzYTljMzRjOTZiMDk4ODQyY2M0MmY5YjdkN2MwZDI1MzBmNDU5MDBlZWI5NTAyZTRkZDE1MzYzYjA1NDNjOTE3NjUxMjFmZDgyZmNjOWRiODhmZTZhNTMxYjcxOGMxZmU5NGI5NmEyNzg1NmQwNzcwN2ZjZWQzMDIxY2NhOWNmNDc0MDgzM2Q0NzA5MTc5N2NjODdmNTdmNTM4OGI0OGUyMjk2ZmYzNTIiOjY0OiIwZGU2MGQ0MTI2NzMzNDA0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5N2U3MzZhNjM4NzA1NDZlYzljMjMyNWE4ZTM2N2M4ZWExN2E3ZmZhNzFmNmNhZGQ2OTA5YTViYjllYjEyODE0IjoiNjA4MjgwYTlkY2JkNmRkNjYxMDBhOWZkZDAwZTZkYWMyMTgzZTMyYzk0NWIyYjRkMjU1YzA0ODI0M2JmZWExNWFhZDFhMTBmZjNlZWMwYmE3OWM1MzEyMzliNDg5YTVkYzE1NWRjMjc3NTUxOWY4ZDNkMmVkODJmYTdhYzY1M2ZiN2M3N2UwZGZhZDFjMTc1YjZjNjk5NjNmNWMxMmZmOTg0MGYxOGUwMjAyNTAyZTlkMWUzYjE3MDk2NWNkODZhZTQxMWFmMjBlNmQ2OWE2MDhjOTljYThkYWUzY2IzYmNjZTY2Njg0MTEzMmE5OTQyOWJjZGU0OTBkOWYwYjZiNSI6ImQzNTE5MmI0ZDIzMzUwN2I3MGM2ZDMyZjhlMjI0NTc3IjoiIjoiNTY4YTBkNTg0ZmM2NmM4NzZiN2JlYjllZjg3MDk5NTRhMmM0MjZmYjhjMTkzNmI5MDI0MTgxY2EyY2QzYTc2ODRjNDEyNzE1YzExZWFiODBhMTgxYmUwMjM4ZTMyYTJiNjg5ZTlkYjM2YTJhYzg3ZGI2NTEwNTgwODA1MzFlN2IxMTEwOTM4ZGNiMDk2MTVlMzg1ZDdiMjI0YjExMjIyNDY5MTQ1ZjZmYjVmNGMwZTg3YjA4YmIzMDA2YmM1YjZkMmNlMGExNWJlN2ZjMjliMjdjMTBjNjQ1YWZkOWQ4MjUzYzA5NGZjMGY3NzUwODZiZGYyYWRhYzI2NWI0NzRkNyI6MzI6ImFmMThjMDY1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZDA1MTkzY2MwODg1ZjdiNzQwNTdlYWQzYTA3MzhiNzRlYjMxMThiMWE3ZTc0YzVjOTQxY2UwMDExMTk3MTIyIjoiYzU4ZjUxYmFkODE1YTQzYTU3MDVjMzExZGU0YTg0NmVhMmE3MGNiZGQyYzMwZDcwOWEyYWUwZGRmODJiN2M4ODlkYzU5OWZiNmUwMzI4ZmFkMjE1NTVhOTk1MzBiZTZkZWVlYjViMWJlYjMzMzMyMmMyYjc0NzI4OGU1MmZhZDAwODUxM2Y4MDQwYTQ3MzVjYWIzYzhjZjMyYzRlMThiZDU3MzM5Yzg1Y2Y1ZGQ3MWUzODIwNjdiZWU3ZTljY2FmNjhlNzY3ZDc3ZmIwMDVhM2I3M2E1MWFjZjk0MmZjM2IyYzVjOWVlYzYxODlkMDFhMjZjNmZmYjA3MDE2NTg3NCI6IjUxNjBiNjViZjdhMmNjZjc3ZmEyZTNlMGIzODY2ZjI2IjoiIjoiNjRkYzU4MzRhNjNiZTQxNGMzNzE0ZjFiMzRmZWRkYmFjZDU2OGM2NDY2Y2JkMDZmNjY1YWEyNjkxODdhMTYwZGI3OTMwNmE1M2I2MjlmZWRjMTI0N2JkODkyOTk4ZmUzMjA4YjMxMDVmNjI3MzY3NmJiZGJmZjZlMjU0ZGUzMzJkMDJiYzg4NDJlZjk4ZDZiNzk5OTQ3OTJlZWI1YmUzYTgwNzQ1MmIxNGFlNWI1MDI3ZGI4MTQyMWNjMjI5MzZjY2FhN2FlMWI3N2ExNDU0NjI2MzRlNDI0Y2NmMmRmYWYwMDFlZDQ0NzdiODA0ZTIwNDEyMGExNDE2YjQ0OWI4YyI6MzI6IjM2NGVmMGI1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI2ZTgwMDY5ODM3MTJkZGZlZGZlYmY5NWU2Y2MzYjBhYWRjMjMwNzcwNTVlNTAwYWU0OWZhZTc3MDU3ODdmMmUzIjoiZTNiYTE0YzRlMzllYmFkOTI1OTk3NjQ5ODcyYjgzMzFmMTcwMGM4Zjk4ZjgwZTU4ZDkyYzg1YTg0ZjJhNDI3MDk0ZDlkNzcxYjI3NmEwZDM1YjE3YzBjMDMwNzM0Mzk5MDcwYTU3MzQ1ZDRkY2YwODJiOTZjN2ViNTgwNjE4ZjdhZjhiZGYwMzYyOTZlMjAzNzllNzRlMjlmOTA1YjUyYTBjNDZmZTdkNDYyMDFhMDc1ZTdkZTdlMWE1MjNhMDQ5MmMxZjIyODEwMmZkYjg5ZjAxOWJjZDQ1NzFlMDQxYzVkMzcxNTlkYzQ4N2VjMTM5ZmEzN2QzMzE0MmZjODA4MiI6ImUzNmUzOWQ3ODczOTRmMTQwMWZjNGIxNzNlMjQ3ZGIwIjoiIjoiNGQ1ZGI0YjY1YTFjYTMxZjNkOTgwY2MzMDAzN2I1ZDc5ZDI4MjgwYTMxY2M1ZDAyNzRiZTc3ZGFkNzBkY2QzN2Y2NTJmMmNhOTk5YzlhZWNmMDhmZDJhMDJkMzgyNDU3YTI3NzAwMmExYTI4NmFiNjZmOWU0MzdhZGVlMDBjM2JhYjA0ZjgzMWRkNTIxNDcwMDVhOTg5NjA2MTcxYjYwMTdkMjg5NzBjODk4Njg5OWZiNTg5MDBlMjNkMWJjNmE5YWMwYmQ0ZDhiNWQ2ZTNmY2FlYmM5OTAzOTIzZTY4YWRhZTdkNjFjZjkyOTM4OGUwZTM1N2M3MjIzNTIzZDFmZiI6MzI6ImQyMTYzN2MwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiY2Q4ZWMyMzcwMDllYWI1OTBkYmQ5YjMxZTc2NTEzZGZhMzUwMTcwMWIxYTcwNjk4Mjk0NDQ0MWQ5OTZlMTgzOSI6IjllZWY3YzlhMGZhM2U5YTdmY2M0YjJmOWQyMTBhOTdkNjY1M2RlZDc5MTNmMmZiMmRlODI1YTBkZmQ3OGFlMWNjYTY4YzA0MGYyMzI4MDA5ZmZmZTYyOTM3ZDYzMGVlOWQ2ZTBlNjdiYzEyYzM4YzBiM2QwMzU2OTdkNGMyMzExMzcxYWFjZjQxY2NlMGQ1MjMwMTZlZTQzNmE0N2Q5M2FmMGRmNzcwMTExMzE4NTZkMDcyYzcxOGMzMTBmMDk5NWI3MTUzMGQ3MGEzZGE4ODE0ODFmNDZmMjFkZGE2MmUzZTRjODk4YmI5ZjgxOWIyMmY4MTZiN2M0ZTJmYjY3MjkiOiJhM2NhZTdhYTU5ZWRiNWY5MWVlMjEyMzEwMDJkYjhlMiI6IjQ1ZmE1MmEwZTgzMjFkODJjYWVhOTViZDk1MDZmNzMzMTkyM2UyYWE5NWU5MjM4OTA4ZjNmZjMwZTE3YTk2Mzg5ZGZlYTc1ZTIyNWUzNGUxNjA1MzU0ZWFhZjk5OWE5NTBmNDY5YzZlMmU4NzIyZGE1YWQ5ZGFkZWQ2NzIyYmFjYTAwZTVkMWI4ZTYzMjY2YWQxYjQyY2FlMTYxYjljMDg5ZjRmZmRmYmJhYTJmMWZiMDI0NWQxYTRjMzA2ZDQ2ZTIxNWU4YzZjNmFlMzc2NTJhOGY2MDE2ZjkyYWRiNzY5NWQ0MGJkZThjMjAyYWI5YzJkNzBhOTYyMjBiNGIwMWIiOiI4MzNkNThmMGJiZDczNWM2MTY0ZWNhYTI5NWU5NWFkMTE0M2M1NjRkMjQ4MTdkNWY2ZGRlZDVkMmQ5YjJiZWQyZGMwNWRhNGE4YTE2ZTIwZmRmOTBmODM5MzcwODMyZjlkZGM5NGU0ZTU2NGRiM2FlNjQ3MDY4NTM3NjY5YjE2OGNjNDE4ZWE3ZDBlNTViMmJiOGZkODYxZjlmODkzYTNmZGJhNmFhY2U0OThiYzZhZmU0MDBmZWE2YjJhOGM1ODkyNGM3MWNlNWRiOThjZmNlODM1MTYxYTVjZjYxODc4NzBhYTMyZjUyMmQ0MDZjNTJmOTFjMzA1NDNlYTZhYTE2IjoxMjg6ImMxZGY0ZWU2MGIxMGY3OTE3MzAzMmU5YmFhZjA0ZDNmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNWYwYjI0ZjA1NGY3NDU1ZjU4MjFmZGM2ZTljYTcyOGQ2ODBlODAwNGZlNTliMTMxYmI5YzdjZGRiMGVmZmE1MSI6ImQ0MDYxMzg1ODdmYmNiNDk4ZThlYzM3ZjBmM2Q3ZjZiMmZhYTAyZTY4ODA0MjRlNzRjZGJhNjdhZTM0NjhiNjgyM2QzN2ZkOTE3YTdmZWRlNmIzNGEyZjBmYzQ3YzUyMGU0MDg4NzY2YmE4MmE5ODlmMGQ4MDUxYTNhODBjYzhiMWUzZTFlMmIxYzY2MjBiOTBlOTliMjdlNjU5NTFhZWIzOTM2MjYzZmMyZjc2YzFjOGVmZmE3NDJmNTM5ODdmOGEzOGM3MzFhNDExZmE1M2I5ZjZjODEzNDBlMGQ3Y2UzOTVjNDE5MGIzNjRkOTE4OGRjNTkyM2YzMTI2NTQ2YzMiOiJmNTJmN2EyMDUxMDQ3ZjQ1ZWM2MTgzYjdjNjZlOGI5OCI6Ijc1NmNmNDg1YjZhOGU2NzJkOTBkOTMwYTY1M2M2OWZkYmYyNjBkM2VhMThjZDNkMGMwMjE3NWQzOTY2YTg4YjcwYWI4MjM1ZDk5OGI3NDVhMGViNmE1YzkyODk5ZjQxZThjMGI3YWE0ZWMxMzJjOGNiYjFiYWM5N2E0NTc2NmEwMzkyM2M5YjkzYzJhMDU1YWJkMDEyN2E4M2Y4MWU2ZGY2MDNhMzc1Y2E4Y2MxYTJlZTBhOGI3ZmQyMjYyMjZiMGIxOWJkMmU4MWY3M2MzNGRmYWZhNGZjZWEwOGRkOTNkZDRhYjdlNGI0Mzc0MDhhZjkxYmZmNTY2MDY4YTVmMzQiOiJlNThhMDNmNjY0MDAzZDBlZjViZGIyODkzMWFmZDE2ZTc3NDdjZmY2MmRjYzg1YmY0ZWVkNmU1NzNlYTk3M2NmNjE1ZTRlYmVlNDBmMzVkNDRlMThlMzkxYjM5MWU5OGRjYTU2NjlhNWIwYWJiZmE2NzgzNDgzNmIxMjJkMTkwOWI1M2FjZDUwZTA1M2Q1Y2E4MzY4OTQ0MTRiYjg2NWIxZmI4MTFkOGFmNjhiODhiNGEzMDJmZGVkZjI3ZmRkMjc0NTZlOWFhZjM0YThkNTNjOWM4NTg3ZTc1ODQzZTA5Nzc2MzkyZGJiMDUwMWVmNDEzNTljMDFlODk4MGU1MjIxIjoxMjg6IjI1ODQ5MmI5ZjU0OWQxYjkwNTU1ZWFmYmU1MjkyODA2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNmY1MGVmYjM5NDZmNmE2ZGZlNjNmMTI3ODBmNzY0YmI2ZWJjZjIxMjdkMzgwNDYxMGUxMWYwYmQ5YjY4Y2UwZiI6ImJmYzg5ZDUwNDlhNWI0MDE1YzllYjY0ZmRhZjlmZTlmNGJlNzIyOWU2N2M3MTNhN2IzNjhmMDU1MGIzYTVlMTJiYTNhNDM5OWM2NGY2MGI3MTU3ZTFiMjg5YjE1NGE0OTRkZWFkZWNmZjBkMDY4NmFiNDRmYWUyYTM0YWU0Y2IxMjBhN2YwMDI2OGFiNTUxZjQxYzE2YTA1Zjg5OTkxNTdiZTExMDM0NjQxMjdhOGE5YmNjZjczNmMzMmRiMDQ1MTI0MTc4YzkwNDcyZTY2NGQ4ZTY3YTJhZGUwZWZlOWEzYjA0OGM0NTNkMmZiNTI5MmRkOGQyOWU2MmQ1MmM1YjUiOiI2M2MxMTkyYWI3ZmM3NWMxN2U3ODEyZmQ5NjBmMjk2ZSI6IjMzNWNjNWM4ZmI1OTIwYjA5ZTAyNjMxMzNlYjQ4MWZkOTdmOGQ5ZjI5ZGI4Njg5ZmI2MzAzNGJjNDA5NTlhMTc2Y2NkY2E2NzI1ZTFmOTRmODIyZTRkODcxMTM4ZmMzOTc3NmZiZTA2MmYwN2JmODBlNWM4ODkxYzJlMTAwN2VmZWI3N2MxNThjZWQ4ZDZjMDAyYjA0NDQyZWQzNWM0MGEyMTg3YTU5YzAyMzM5YzA1NzYyOTQyMjA4ZTNiZTk2NDczNmE0MzEwMTdmNDcyZGZkNWZkYWY4ZmI4YzY0NWNkYjY4NGY5NjMyMDU3YjllYjc1NTI1M2I0Yjc1ZTM2ODgiOiJjYTk3NDk0MmFlMGY0OTU1Y2EwNzM2MjE4ZTRlMzU2MTQ1YzFlZjQyMTM1YjExNDJiNTVjY2IzZmM1Y2FlZWM2MzBlYjUwZTY5YjVhNmY5N2MxMWQ0YjYwNDE4OWIyNzQ5NjYyM2JiMDM2NWFlNjlmNDE1MGUyMDFlNzJiYWQ4ZTdiODgzMTg1NTg4ZDBhMzFjNDQyNzNiYWU4NzE5NGIxNjEwMTE0YTgzZWM0N2JhNjhhMDJlMjk4OTFkZTQzMjA0OTc3ZmNkMGQ1NTE3NzgzMzVmYzc3ZmNmZGYzZmQ2M2U5ZTVlMGMwMjkzMGEwMzIxZmZiMDkzYzUyMWNkMGVkIjoxMjg6IjJmMTFhMDFjYjBlZjhkY2VmYWQ5MjMzYmVjNDRkNmYwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWM1NjYzMjRhZDlkNGNkMDE1ODIxZTJjZDRlZDRkM2Q1MDdiZGIzYzY1YmQ1MGFjYzg1ZjY5MGVmMDY3NDBmYSI6IjM0OGQzNTc2OGQ3MTkyNDE1Y2JiOTJjNTYyNWYxMGVkZDc5ZjI0YzU2ZDRiODIxYWFmODBkN2RjODNlOTAxZWRlNmJlOTRkMWVmZTExYTNhY2QxNmFjMDBhZWE4ZDBkNDg3NWM0NzUyMjMzMmZlZDExY2RmMDgxNmIyNjk3OGRlNDMxYzg5ZDJmZTZkMTIyYjJkNDk4MGYxZDUzYTk3ZWRjMTVlNDkwYTQ0ZTczY2JhOTM5NGNhNGJiYjg3MTY3NWM3MjljMzlkZTgwZDY2NzhjNzFiMWJkMjIwZTQ2NDdiZmQyMGE3ZGRiZWZlMmI3ZWVjNzI3NmI4N2M5MmJhNzciOiI5NWM4YTU0NGM0Yjk0ZTlmYmZkNzZlNjZmNDBiYjk3NSI6ImZhNmYzOGY4ZTU2MmE1NGJiMjI4MWRjOWE3Y2JlMGI5ODEyOTJmYjAwZGMwMDUzMTg1NTUwYTMwMDY2MTg1MjE3OWQwZjJiZWI0ZTc3NTliODEzMTZmYmZlYWQ1Yzg1OGU2ZmNlNzNmM2NkMmMyNDYyOTI1ZGJiMTk5YTRlNmMxMjFkMDUxYjFiNWViZjYwZTE2ZDFlMzBmNjk3M2IxOWNmMzE4MzBkYTMwNTg4ZmRmZmY2MTE1YTRhMWY2ZDk3N2E3MjU4MzM3OWE1NjA1NTcyNDU4MWJlNTIzMmIwZDFiMGFlODhiYWI1ZDRhMDMxYjA1OGJjOGQwMzA3OGRjZDUiOiI4YjRkYTc5ZjNhZTFlYTM1YTgwYWYyZjUyZmM2NDAwNTVlNmEzYjkyNjE3ZGRmYTc5ZmU1ZDhhNDlmMjhkZGYzNmE4MmExN2NhMGIzY2RmMTcyNjcwMGY3ZmZjMDlhZTViNDEyZDA2NGZkNTJhOTBhNzZiYWNjNzRhMGI4OWUzOGRjNDc0ZTg4MGEyYjc2OGZmYTkxZmVmMzRjNDc3NTlhN2I4ZmQ3ZmFhMzJhNGZjYjI1ODM0OTQ5NWU0NDM4YzdiMjA1NWE4ZjQ2MjcyOWZhNGU3MjIzYWE5YjQ3MDg3Njk1ZTNhYWJmNDNhZmIzMmUyNzJkNTM2YjI1N2I3NDhhIjoxMjA6ImIxZmFlYzI3NzY5N2FkZDhmNzU2MzkxZGQ5YzdmNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImRkNmFhNGZmNjNlZmFkNTM3NzJlMDdlMGZhN2Q2ZWRhNWU3M2JlMTY3NjIwZmQ3YzlmMzk5N2NmNDZjZDI1YTkiOiI1OTJiM2E2ZjA5ODQxNDgzNzcwYjc2N2JlZDczNDk4YzI4Njg5NmQyYWQzZDhiZDkxZjgzZjkyZjQ4OWIxZTgzYjA0NTZhNTRlMDY3YTc5ZTFiZjU5ZWVmYzFkM2JkMzVjZWNmYmE5NDA4MTFkMDZhMDZlOWI4Zjc3NGJmZWZmNTU3YmQ3ZTNmMDg2NGNiNmJkM2Y4NjdlZmJlM2YwNDBkMjM4NGFlOGUxYTBlMjBlZDM4Y2FhNjY4MTU5ZDNlMzNjNDY2OTQ3OGQwMDk2M2ExMTUyMzA1YWEyMDM3YTVlMDZjYWM1MmQ4NDAyMTIzNGE3ZjVkNDZhYjA2MGJkMDNhIjoiNjM4NmUwM2JjYjZhYzk4MTQwZWUwNzA2YjU0Yzg0OTIiOiIwY2NkYWE0ZjU0Y2ZlYTEwMjZhNGQyNjMzOGIxZTZkNTBhNzBiMDBjNDYxNDdmZTkwNmM5NWYwYTJmYjVkOTI0NTZjYTNhYTI4YTI1N2MwNzllY2ViODUyYjgxOWU0NjY0Njk5N2RmODdiODczYmM1NjdmNjlhMmZhZTQ3MWRmMDNiMGU1Yjk0NTExMTg5ZWFlZWRkMjM4YTk5MWIzMjY5NjNjNDZkNTMwODBmNDIwZWM5ZmQxYTc0MTQ1YTBiMTU1Y2JjYzBiNWU0N2ZhNjk0NTBjN2ViNDQ3MDgwZTM0ODY4ZDY0MGY5MjM5MjNiOTFhOWUxM2EwNWM3MzU1MGNhIjoiYzFiZTU0MDQ0OGYxZTNmNDMyYTEwYjNjYzFhOTEzY2M0MDQ2NTk1ZjVhNTdiZjU3YzlkODU2Y2RmMzgxODMyZTkxNDA4OGQzMzg4MTk5MDE4ZmYyNjMyN2UzMDAxNjc4YWIzNjNkYTk0NTdiYTIwODRmNWFhODEzMjBmMWEwMzQzNDkxZTBiNDQ0MjQwMTg3NjU4NjFjNWRiOTE3Y2UxNGU5MWE3N2Y3ZTgwNWQ3YTk3YTE3YTI4OGVlNjY1NjdjNWMwMWVlNjFkYzQ2YTlhYThiMjgxNDM4ZWQzNzdiNzkyZTk1MzllMzExNjc2ZjgxYzU2NzMzOWNmOTJiOGUxZSI6MTIwOiJjZTdlMzYxNzEzNjMwZWNhZmY4MTg2NmMyMGZjZTYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhZDM5OTBjZDU3Y2U0ZTk1MzQyY2RjYTRmMDdkN2UzNWQ1NzVlYjE5ZjIyNGE3YzgyMWIxZjVhOGM1NGQ0YmMzIjoiNzMyODA5YzI5YjVlZWRhOTc0MDM5YjEyMmI4NzVhZWMyODIzZTA4MmVmNjM3Mjk0NjU4Y2M1NGY5YmNhODhlYjdlZWE4N2EzNjYyMzRmODk5MTk5NzVkMGU3ZGQyZjhlYTgzMTk4ZDVhNmUzNDkxNDlhMDE2YTRiMTc3YmE0M2RmMmYzY2EyOGUyN2I4NTY2NTkxZDIyNWFjMjVkZmQ5ZWE0MzFjZjFmYjNlYTUzMGQ2NWRhYzkzYWFkNDc3NjRhNmFlZjhlYzY5MDNiNmQxNDVlYTlhMjY2MzAzNGQyYTMyMDY5MGI5MmFmZDgwMzIwODRiNzU0YmU5NzYwNDM4MiI6ImZkNGVkNzVkODYxZGEyY2MxNGZkMTA1NDk3NmM4NTY2IjoiYWI0NDY4OTgzOWZkZjQ3ZTg4N2I3MGZjMWIwNDIyZGJiZTVjMWI1MGY0ZTcwNGY5YTQzNTk2N2JhOGI3MGNmMWUxNDRhMDI1ZDM3MjkyZjYyOGY5ZjdkZDlkMDU1NTdiNjUzNDAwOTA1MDMyMDFlOGNmMmNlYTJkNmE3M2VhNDg1MGJkMDkzMWI5MGZkNGE0MzA2YmE4NGI4YWVjOTlmZWQ0N2NhMWIxNmRhZWU2Yzk1Yzk3ZTRiYTBkZDFmYjEzMGNkMTNmNWVmNzdjNWFmOTZmNjFmYTA1MzA1YTNhY2EzNzc1ZTkyN2Y3MmYwOGZjMzRiYzk5NGU2OWFiYWFkOCI6ImY0ODcyMWIwODEwMWIzNWNkZTFjNGNlMDhhOGJhMDA0OTE4NWI5ZGQ0OGI2NmFiOTk3MWZkNjdkZWUyNGY4OWI0NTZlOWNhMTlhYzhhOWI1YjNiMDg4Y2JkNTM4OThhOGMyYWMxMTI5NzUyZmI3ZmM1NWEwYzNlMmU3MjY2ZmY0MGY3YTlkNjNlYmM0YWI2NWY0NzQyMmZjMTdjYmUwN2ZjZmRhNTgyZmQxYjhmNTBlODQwYWU4OTgzN2U4NGFkZDhiZTE3ZDRjYWMzZDJiZTI2YmVmNGFhODQzOGRhZWM5ZDJiMTM5ZTQ0MmY5OWMzMmYyNzg5Mzc4YzgwMjlhZDkiOjEyMDoiZGE2ZGEyYWYwZmMxNGI1OTFhODYzNTliNTUyZTIwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzA4MjMzOTZhYzkwZGI1NzNiNjU4NzY3NjU2NGQwOWZhNjgwOTA2YmQ2ZWFhNmI4NTk3ZTJlNzU0OWM5ZDg0OCI6ImM1NWJlNWEwYjg1NTllMDJkZTQ2NjdiYTU2NTZmN2U0NmY1NjI3YWYxM2ZkMzRkMzI3ZjZmYmZjNGYzYTkyNzMwMzZmY2UyZmIyMTIzMmY4ZTJlZDExNWIzOWIwZWNiOWExMTljOGZjMTcwNzBiYmU0ZTM0ZDM1NDRkNzExN2ZmZGE1ZTFlZjA1ZTA2M2I1YThmY2ViMjMxNThkNzgyNGQ2YTFlYjRkOTBhMWQwMzYwYzZiZDc4ZmIyNGZkZDRjZmEzNTkyNGJlYjRlMDkwODkxZDA2ZjUzZmM1MmNkY2FhNmI4YmJhNjc3MmQ1NDllYjk1YjY0ZWJmMzc1NmFlNDUiOiI0OTZhYzczNGFmYWRjZDU0ZjFhNDM3MmNlYjU2NDVmYyI6IjJkNTgyMTMxZjcwNzFlODBjZGUxYjExMTA2YjdkNzliYjIwODc0M2RlNzU5ZDQwYjg5N2VmZGFiMDE4ZjRlZmYxZjkxZDJmZTY3ZTI3YWYyNWExM2YyMDFiYmU0NDQ2ZjIwYWM2Yjk0MmZmN2IzMmNmMTBhZDFjZWEzNjk0NWI2N2FjMDhiMTE0ZmM2MTYxNzVhODc0MzdlZTA1ZjNhOGI2NTY2ZTllZGZiYzFiZWVjMGVkODY5NmI1ZDVjNDFhMjVhYzQzYmYzY2UyOTIwZGQyNjIyMzNhYjM0MDVkNDZmNTIzODk0ZGNiZmI2YzkwYjZlOTExY2ViOTNiYjdmYTYiOiJjOWRhM2RmNjYxMTFkY2JhYmY3MzFjNjg5MWViNjk4YWMzMjgzNzgwZjUyNmU4MTM4M2UyMDEyNDRlZmU0ZWNhN2ExYzg0YTNiZmE5YmE1NjE2YWZiMTVjMWYxYWYwZjNhZjJlMDcxZGY2YzFkMzRhMzQzYzNlMzQ0MGYxYTNlMWI2NjIwMjQzZDllN2Q5YTRkYmRhNTk4MWMzZTg3NmZkMDdmMzkyZDQ0YmYzZTBhNGVkYmQ4ODQ0NjJlYzJmNzFkMzZiZGU0YTFiNTc5MjYyOWRhMDlhMWZiMDFiZmRiZDUzMmZiYWM3MTg4N2EwNWE3MDc3ZmMxMTlhNDYzOGQ0IjoxMTI6ImNlYzk3M2EyN2M0MmUzMWI3NzlhNmE5MWFhMzQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MTVmMmIyZjBiMTYyMWFhMTk4ZWVmMjc2MTM4MGYxMGFjOTg3MmE1YWRiZGY2Mjg2YmRmMzM4NmU1NmFhZTRlIjoiZDE2OTMwYzU3MDQxNGJiNjIwZTBlYWEyZTliNWQ5NmU0NDI0MTI3ZTE2NDYxYWFhNTg4NWM2MTZhMDJhZTk3NGZiMjg5MGU3M2JhZGU5ZmZhNTA2NmViODhhNDZhYzdmY2YyNThkNTU3MzNkMzE1OTUxYjFiNzFjNWUzYzEzZDc4ZDYwMzQ0Y2U5MjE5NjYyOTdhMGY2MzYxY2ZlYWIwM2IzNDZhN2ZhNGY4M2E3YTBlYWYzNzU3NmZhMzNhNDk2MTAyNDQ2ZjlmMzFiMDZlZDkxYjUxNjcyYzg3OWNiMThkNGUzOGZhODZlMTU2ZDViMWRiZmYyNzkyNTkyMjQ3MCI6IjA4NDM5ODRiYmFhNTY1Y2EyNGYxNDhlNTdhN2Q5YzU3IjoiMTUxNGI5OWMwYWQzNDkzYzM2ZmUxMjE2ZDFhODg3YTY5ZWEwMzQwMTAxYWViYjAzZjYwZDdlZDI2ODkzMTE5ZTgxZThiOGMzZjBiYjRhZjVlMTBhM2JmNGVkY2YyNTc0NzNiZTlkY2ViYjQ0YTlkOTEyZjA0ZDk3YTU1NmVjZjAyMGMwYmVkN2NjZWYyYmZkNTU4MGYxZmM3NGI3MDZmZWE0NWY4YzYzZDhkZTZmOGRlY2NjNDdhMDJkYzg2ZDNmMDYyNGU1MmY2ZjFkY2QwOWRlODAwMGYyZDk4YTRjYzA4OTZkYTZhNTY0YjkyMjYzNjczYWRmMzkwZWQ5MDlmYSI6Ijc1MDYxNzVhY2Q2NDIyNGIzOWY4OTBlNDk4ZWU1MDEzYmI0NmZjNTcxZGMyYjEyNWVkNTg5MWI4Y2U4YmNmNDIzNDJmMDE1ZmQyZGY1ZjRiOWNjMjIwYWFiNTIzODZiZjIyNDdkNDE2Mzk1MWU4NjQ2NzYzM2Y5NmMyOGJkZGExNjZkNzc4ODU1YTdmNjA0NjVkZDI5ODMyMzJjOWU1M2Q1Zjg5NDMyNDA3ODA3YjA0MDJhMTBmMTU1ZjgwMDU1YzMzOTQ1MWExMDZhYzU0NDM4YWU0YTk0NWU2MGQ1MzIwZWFiMGFkYWQ5YTFlNjZkNTliOWQzY2M1Mzg4NzgxMWQiOjExMjoiMjhkOWQ3ODAwNTJiMzZkYmU4MGEyNWQ0MWQ1YiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQxMzI1ZWNlZGI4ZmMwZmU0NDlkZTU1OGZiYzExZGRlYmVmNjYwZTQ3YWFiYjg0ZWRmZTY5ODM3YTZhOTA2NmMiOiJmOWE0ZjcwMjlmZWFlNWNmNWJkYjgzODVkNmFkN2Q3ZGE2YTI0M2M1MDI2ODE4ZTVhNzk0YzZjZmZiOGRhZDMyMjc5NjQ1MDFjNWEwNDliNWE5NGE3ZWEyZTI0NDM0ZTA4NjgwMDA5NDExODQ0NGM1YTk3MWJiZTU3NTMyNGZiNmI1MWM1OTM5ZjgxZTc4YmIxMWQ4NWQzMjQ3NDJiNDYyY2U4ZDEzNTg0YjM4ODI2MTdkMGM5NDc3NmYzMjhhNTU0ZjlkNTMyYjY1MTVhZGU5ZmJiZDJkZTFjMTJhYjUzNjcxYjdmN2VkYWE3ZTIwMjIzZjRjMzcxYzFmMjI5NTY4IjoiOGFmZjcwMmM0MGE4Yzk3NGNmMjRiZjNjNjQ1MTY5YTUiOiI5ZWMyZTg1MWRlZTM4MzRkNDg0M2FhZmE3NDBmM2FhYzRjZmIxZTRkM2E3ZTNlNzczNDkxMTNmNTIwMDc2OGMzZTlkYzM3NDgxZDYyOTJlYmVlYmQyMzcyZGIwMmVmOGFjNzE4MDgzMGM3MTg3OTk1YzgxNWQxZDE1MjBjM2UyZjhjZjJhOTQ5OTNiMThjODI4YjUzNDg1MDczYzhhODQ1MDY2NzcyNjE1YjI2ZDdhM2Q3ZDNlN2Q4MWFkMTcyNTc5NzE1M2Y3YmE1ZTMxM2JkZWM1ODJjNTQ4MmFkZjc2YjMxYzg3MWNkNDJhMzEzMDE4ZjQwZDdlMjNmMWE3ZjMzIjoiM2E5MzY2M2FhYjkzYzZjZDIzNmNiYTRkYjJjMDM5NDJkOWViYzY2OTYzMzkzNjM3MGMyODM0MzU3ZTc2ZjY1NTVjMzRkNDBkZmFhYjFlNzhhMTA1ZGE5MDkyYWNkYmE4YmU4OWUyZGJmNzJlODk1MThkNTVlMDllYjJmYTFlYTdkYTUwNTQ4NGFkNDUzMWRiYTNlYjg1M2QxYWUxYTQ3NzM1NWVhOTQ0ODA2N2IwYWRiYzc4MmQ2NGVjMzQyYzdjYjc4MWQ5ZGQ4ZGMyYjE0ZGMxYzlhYjU1NDJiNjc5NzgyYjhiYjliNDVmZjZhNGUzNmM1MTNkZjE2OWM4ZWRkYyI6MTEyOiI3ZTY4MmIwZGRiZTZjNTUwOTE4Mzg2MTZjMzUyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGI5MjI0MjI2OGU1OThkZGNmM2E1YTBkZTI2ZDc0MzU2NjkzYzRkYmNhMzU0ZTQ0YmU0MDFmM2Q2ODA0ZWExZSI6IjcyZGM3NWJjNGM4ZjViYmJkOWM2MzlmYmRiMzRhZmJiODQ3MDY0MDRjOWU2N2VhZWUxOTU5YWE0YjUxZWFjMGRiNGY5NzVjYjNlZDhkOGNhMjdmNzJmNjFjODU2MmVjOTUzYTdiODc0NTgyNjEyMWE3MDE2ZTYwZTg3N2RjZGIwNDZmMjM2YWYzODI2YzFkZGY1YjkyOWM1YmQ5YTkyYjBkNWMyM2NmODk4M2JmMjQ1OWNlZDY1OTU4ODJiM2RkMGNkMjVkYTdlYmE5ODFiYmExMjI2MjNkYWUyMmRiZGNlMDVjZjRlNWQ4MmQyY2M1NGViNGY2OGU5ZThlZmYwMmIiOiIzYzI5MmJiY2MxNmM5NGIwYTI2M2Y0ZDIyZjMyODkxNSI6IjE2N2RmYWIwOGFhYzgzNTA1NzQ2OTNiMzEyMTAxMzhmNmI5OWNmYjYxYmE3YWRlMmUyYWJmZmUyMjU1ODM3YTkxM2M5YWZlMzMyZThmYzRiMjQ2MzMxMGRmNDY0OTJlN2Q5ODJkY2I3MGZkZGEyYThiMDM5MTFlNmJlOWE1YzU2MjFkMGFlOGVjZDFjYjM5MDkxMGI2NzAyYWFkMzMzOTRjMjVkMTE2MGI4NjY4N2UyNWJiNmNkYzQ4MTFlMzE1OGJiODViYTc1NTQ4MzI5ZGFjYzE5Mjg3ZDljMDA0YTA0NzMwMjliNzdjYTI5MGZjNDdjMWY5NmQ5NTgzYmNkNjciOiJjMmRkNDJhYjliZjNmZGE3ODAzMmY3M2NiZjdkMjhkZDhlMzJjNTgyYTNiN2VlNzk3OTU1NTFmMTMzMjM0ZDYyZWE2NTcxYTQ2NmI4ZTFhZjBiM2QzNTRiNzFhNjU4MmM5YzgwMTNkNWY4YTJjMzRlYjNlODQ4MzYwYWRhYzFkNTAwNWNlZGU1OGVhZTc3ODRmMzJhMzFjNDBlZWM1YTNmMDNjYzFlNzI2M2Q4NTE1YjM2MjI1YjM1MTVlYmNmOGRjYTJhNzcxNzJjNzk3ZDM0N2VkMzkyMWNhMGJjNzNlOGFlNTYzNDcxMzRhNmEyYTA2YWUwODRmMWViYjdiMGZlIjoxMDQ6IjAyZmIwMDJkOGU0YTFkMTFiYjBmMGI2NGQ3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzVjNTAwNTlhNjE2OTJhOGYxZmZhZTFjNjE2MTU4YzY3ZDI3NmRjZDRhMDI5Y2UxOTdlZDQ4NTY3ZTVmZjg4OSI6ImFiN2UxMzkyM2U2NmQwZjYwMGFjY2QyNDYyYWY3NDE5MmMzZGU2YzcxOGEyNzA1MmVmN2MxMzAyMjM5YzdmYjI0MTNkZjdjNjYyNjU3Y2ExODIyODU3NWVkMTM4YmM1NGYzMTY2M2RmNTQ4NjE4ZTk4ZDY0NDAyZmVhYjUyOWQ1YmY2YTY3ODQzMWM3MTRkZjFmZTI0ZWE4MDAxN2Y0NTVhODMxMmJiNWI3MTBkZjhkZDM1NzE5NzA0MDRhODA2ZWM0OTNkY2IxZjNmMWFjOTgwNjYzZjBiOWM5ODIzZTBkMDMwNGVkOTA2ODlmNzBkNGEyNGRhN2Q4NTA0YzViMGIiOiI5MjBkODJjNmI5N2E3YmVhMTIxZjY0ZjgzYjc1ZGM2NSI6ImE5YmQ1N2RiMmJiZTgzMTc3Mjg3ZTVmNjE0ZGFiOTc3MDcxYWJmZTBiNTM4MDY3ZjdkMGM1YWNkNTliZmJhOTVkZmI3MjViOGUxYWY0NTczZmYxMGNlMTM1MTQ4YTNiYWIwNDQ1NTIzNDgzNzhkNWZmMGM0ZjhiZTFhZWY3ZWQ2MGJiOWEzNzRhNmM3YjgwOTdkN2MxODA0ZmRmMDc4ZjIxMmU2M2U5ZjExZDc0MDRhZDBkMWE5Y2IyOGQ1YmExOTlhZWMzYTZjNDFiOWU1MjNiNTQxYWQzOGNlYTc2MzE1OTgzNmVkZTYzNzEzNTdhYjFhZWFlZGFhZjQ0ODFjMjkiOiI4ZjdlODdlM2ZmNGY3Y2NkMWNlZGMxZGYxMjUxOTljZmI1ODgzMzkxMTlhNWVhNWY5YmRiOTE4Zjg5Y2EzNWY5ZGMxNmM2NDY1ZmIyNWVhMjUwZWFhYThlN2YwMGFjYTIxOTlmOTJhMmMyNDQ2NDJiZDE1Y2JjOWI2MmNhYTU4MTE1ZWYwMWQwYjRhOWUwMjUyN2UwMzU3NDRiMjA4OTJmNzliMDdhYTQ3YjZjNmRiMTMzMmY4MjQzNDc2NGM0MzEyNGIyNzE0OGYyZjYxMTc2Njc4MWRmOGU0Y2MwYjViYTk5Yjg1OGMxM2MyMzM2NDZkY2IyYjg3NDlhMTk0ZjA4IjoxMDQ6IjY1ZGE4ODY3NmQyYWIzZjljNmQ1OTBlYjgwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGM3Y2MzNTg4NDM2YWQ5ZTg3N2RlNzI1NzhkMzAwMjZkMzI3NDY4MTdjYTdhOGZiN2RmOTg3MDY1MGFhNDhkOCI6IjAwYzI4NDVmYzQ5NWI4OWY4NzBiY2U3MTRmODYwNGE3ZTdhOTZlZGU5MmM0YjliZGNmMDQ0YzlhMTc2ZjY2YTI4NzYxMDg5YzA4M2Q1ZTJkNjEzYzc0NjcxMTIzODQ3N2MwZWZkZjQ3NWUxOGFmOTllODhjZjc2ZDA0ZDRlNDA0OTVlYTE2YzQ2MjgwMTQ0M2NkN2Y2OWM1ZDM2YWM5ZjMzN2U4MjhjMzA4ZjFkMTkzOGIxZmFjNzMyMjc0NDU5ODI3Y2Y5ODA2YzE2NjFhMjQ3MTY3OTQ4YTkzZWI2ZTk5OGE0Y2VhNzZiYjgyNWJhYTI3ZTQxODBlNTI2MzNiYjMiOiI1ZTgyMjg1YTNiMzMyYzY5M2U0MjdmOTQxMDU2NDQ4OSI6Ijk5NzFiOGUyMzRmYzNlMWU5NjQ0NTQ1ZTM4M2ViMDY1ZTE4NjZlMmZhYTY1MTMyNzhkMzk3MmFkZDVlYzBlNzFiMTU1ODMyOWZlMWVlMDM4YTI3OTE5ZTQzYmZkYWM4Y2YwODE0MWFiNTQwNTI4Zjc0ZjlkNWJjOGM0MDBiYjZlZTc4NjdlNGRiYzJhYTA4MWQ5MTI2YWMzNzRkYzYyYjEwMDA0ZDBlMjMzZGM5MzM3NmI5M2MwZGE0MTVlN2QzZTA5ODUxZjIwODRhOTlmZWViMjU5MzllMjE4OTMwNTY4NzBjZWZlN2NkZmFmNDlmNzI4YTkxZWEwZWVmNjA1YWYiOiJhYjdiYWM0ZGRlZGU3OTY1NzZlMWZjMjY1YzNjNTk4MDU1ODI3YmU3NGRjN2VkOGVmMTcyZDAwYTY0OGRhNTY3Mjc3NjdkNjhmY2JlNmM0NGU3MjcyZGM4Y2IxNWYwM2EyNmRjNDM5MTc4ODQ5YjBlOWFkNmM3NDEwZGQ0Y2NhM2Y5ZWY0MGVjN2MyODAwNDJiYmMxOTkxNTVjNzM0MWU4OGQzNWU1ZThkMGI0Mjg1NmU2MThjNmMzMGU0M2Q0OTUwNmNjYzM1MTg1ODVjOTUxYTM4OTg0MDkzMTVlOGIzYjRkMGFkY2NkYjU2MWRkY2YxYjlkM2IyY2YzZGU5NzUwIjoxMDQ6IjI0NzRjODMwYzZlYmU5YzZkY2IzOTNhMzJkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ZDczYWVjNTA2ZTAyMmMwNjkyODkyZjZkYmMzYjRkNDFlODZiOTdmYjM3N2MxOTU2ZWUyN2I5YzlhYjNiMzJhIjoiZjAyYmY2MGYxMGVkODc2YTgwM2E5NmU3NWYzZmUxN2I0ZTM1NTI0NjEzNWEwY2Q1NDk3YmFhZDJhNDBhNTIzYzI3ZTI3YmY4NDhmMGNiNWQwYzY0MjhkMDhiZWM5NTkwYjE3ZmNhNWU2OTc5OTBkMmE2ZjdkMjEwODBhYjYxNGYzNzhhMDc0NjFlN2E2MjA3MjI5ZTBhMDg3ZTI4NTg0MWVmMmYxMTljYWM3ZDhhMmQzYWJiYjFlNzI3MmEwZDdkZDQ5M2M4YzRmNzk3ZTE2MGMzNmUwODYyMjdjZWFlNDkyMzY1ODM2NWIyZDNhM2ZiZWExMWFhMmZhYjM0OTljYiI6ImJiYWNjMDgxYTYxMDczNjRkY2RhYzgzYWJjZWRkYmZiIjoiNzdlMWRhMDkwZTRkM2E4OTJiYWYxYWZiYzEyYTU2MjAxYTQzNjJkOGYwOWNkYTVlOWJkYjIzNDExZTY5MDg5MTUzMDFkNjY0MDNhY2IzNTI0ODk4YzFjNTFkNjk3MGE3MTg3OGFjY2QwMDQ4Y2I2Y2ZiZDRiZjk0MWMxNzRlZTA1ZWNhMmM0YTI5ZjFjMjRlOTM2ZDNhNjNjYjZjZmE3MTA2MTdhZjFiYmI0MWQ3NTViMmY3OWUxMzVkYjkxNGE3ZGQwMGM1OTBjZjc0MTA3OGViNzJjM2FiNTU5Nzg3MjEzMjAyZGNjMGE0NzM0YmRkNjEyYjkxN2UzNzJmMGU2MSI6ImQ3OGZhNDAyNGI4ZDA3Mzg5OWFjMDliODE1MWMyOWIxMGEzNzc5M2I3NmYwNDkyMWJkYzdkZDNkMmVmNTMwYTgzMWU1M2NmNmE3ZGRlZWMwZTAzM2NlZWFiYjUyNWJmNWVmNTdiZjliMzY2MWZmYjU3ZDNiZDQwMjQyNTJmYTExZGQ1NjkxMDJjNzg3YzJkODQ4OWExYWQxMjkwZGNhMmU4ZWRmODJmYmU2YjVmODNiY2MwZTg4ODA0NWI4OTVlMjBjODU1NmVlODA0MzBjYzg2NDBmYzA3MDQ5MWQyYmI4MWExMjA5NDI4OTM4Y2Q4ZTdhMjdlMGU4NTgwMjk0MjEiOjk2OiIyMjM1ZDAwYTQ3ZDU3Y2ZiZDM4M2I2OWQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjczMTk4ZGZkOTJkMjYyODM2MzdlNDUxYWY2ZTI2ZmY1NmUzYjdkMzU1ZWQ3YWI4YjIwNTljMTAyMmUwZWE5MDQiOiIyNDcxYjNjNGNjMWQ2ODg0ZDMzM2QxYzk5OGM3YzQ0MTgwOGNhODg0Y2I4ODE3M2EyMjU1NjllMTY4OWVmMzllMjY2ZTlhZDM4MTkyNmFkZWFmYzJkYWNjYmRkM2M5NDU3ZWExYmRjM2JiMDUxNjhlZjFlZWFkMTUwNGQxZDQ0ZGRlMzRmOTZlMWE3ZjJhNWQzZmIzM2NmNTI5MmQ1MmZhOTQxMjgwMDQxOTU3MGRiMGViMjRmYjc0ZDU1ZGUyMDJmNWRmNzQwNzNjNWEyZWI5ZWI3MjYzOTM5OTZlYWViMzIwNzJiZWJiMDA1OTNkZTQxYjk3ZWNiYWIyNTU0MTg2IjoiZTM2NDAzY2UxYWNjNjNiZjUwYjQ3Mzg3MjUwZWY1MzMiOiJjYWQwMjNjZmI3M2QwOGU1YjA4MmMzMDYxZjNhNjUwMmExYzFkNTMwMzhjZmIxOTA3NGQwZWMyNmM5YjI3MmRiOTMwOTQxNDdlZjBhYjJiZGNlNDQwYTJiMzIzM2JiMDQyOWFkZDQ3NjAxZjAxMWRmNjc5Njk4MjY0YzBmODE0NDRhYmExNDU3NmExYTU2NWU1YzE2OWY5NjdjNzU3MWJmYjMyYTJhNGQ3ZmNhZTg5Nzg2M2Q3ODk2NGM1YjFhMDQwY2M4NDU0OTRjMGFkOGZmNDM1MzMxN2IyOGNhMzc5OGU2MjUyZDUwMTViNThlOTkzNTRjZTZkZmJlOGI3YTk1IjoiMzJhZmQ2ZDZmZGFiMjAxOWNlNDA3NzFiNTI5OGFhYWRmNzUzZDFjNGNiMjIxZjAxZTRkZmM4YjE5NjhmODk4MTg4ZmE0ZDQ0OGQ4MzY0NTEwYTdlNjhjNzM5MzE2OGVmYjRiNGVhZDFkYjFjMjU0YzVjZWE1NjhhODRhOTk3YTc2ZGJjOTI1YTZjMTlhOTA5MjAwMjYyOWYxZDljNTI3MzcwMDUyMzJlNWM3NjIwYjk1ZWQ2NDc0MTU5OGE2NWE5ZWM5NWYyYzk3YjZiNzhiZDg1MzgwODExYzExMzg2MDc0YjFlMWU2M2I5YTdlOTlkMWNiMjgwN2JmYWExN2YwZSI6OTY6ImUyMmRlYjEyNzZhNzNlMDVmZWIxYzZhMCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMWRjYmQyNzg0ODA0MzQxMzVmYjgzOGZmY2RjOGU3NzE2ZTk1ZWE5OWExY2MzNmQ1NDQwOTZkZmY5ZTlhZWJhMCI6ImRhM2I4YzllNGFhODQ0MzUzNWIzMjFjM2U5YmRlM2M2NzQyY2Q5ZjIyOGM5NzEyNTc0MzBiMjcyOTNlYmViNjM1OTE3ZDZjYmE5NzZjODE5MzRjMzA3NzkwMjkxMTE2OWU4YzYxOTdiMmQ1NmEwNDZiN2ZmMDNiNDgyYzM4MTcyYWNjYWM5OGFhY2M5MDA3NjM3MGRmMjhiYzhhMjA0NGMzOTNjNzU0MWI3YjY5YjBmYjg1Mjc0NmRjZjMxNDBhY2U0ZTc2ODYxOTc1ODE0ZDJiNTk2NmY3NzE0ZmI2Y2ZlM2U0Mjk5ZDc5MTgyZmM2M2EzNDUwNjdhMGFhNTRkOGIiOiJiNzM3YmNkZWU0ZWY4M2FhODNmMTI0Y2Y3MjA4YTY3MSI6IjQ5YTU0NGFhZTc2YjA0ZTYyMjExNDI4YTJjYzM3MTllNDQ1MWYzZGJmOWEyM2I2YWM4MjRmYzQ3MmU5NWUzODM4NmQyNjc0MTVjMTQ3MmE4YjA3MDdiMDU3M2I5ZWIyYTM5YTVkNWExMzQ2NDk0N2NjM2E3YTdkZDNiNzE5NmYxMWU4N2FiNTIzMzk0NGY3Y2VhM2Y0ZDYyYjA4OGZlYmY4YjgyYTQ0ZDRjYTYxNDhiZTFiYTI0OTA1NDMyYjdhYzJiYjRlYmFmMjJkM2JjZTk3YWMyYmQzNDE1OGI2MDExZmJhYzc3ZWUxZmE5NmNhMGM5YzllMDIwNzA0NGZiYmQiOiIwNjFiNDkxYjczZjkyNTA3OThhMGZiMWZkY2Q3MmE3MGVkZGM5Y2I0OGMxZjEwMTE5Mzg3ZDQ1YzUwZDVmYmI4Yjg1NTkyYTc5Nzc0ODdlNDUzNDJmZGRlYjhkNDgxZWVmM2I5OTQ2Mzk3MmY2NmFjYjM4ZmUwNDk1M2MyMjNjNWYzZTAyNjExYzhmMzNjYjlhZDc0NjY4NjA4OTVmYWU1ODVkNDBiYzc4ZWMxNGQxY2YxN2I0YzViNzVlNGQ4YzYzNDFmMWVhZjgwZGE0YTc4YWFhYTMwZDNiYzhiZmYxNWYyMzRhYWNiZWU0MDY3YTk0N2U0MjI3NWIxMmUwYmRiIjo5NjoiYjg5N2RhMzA2MWM3N2FhYjVlYjU0NjIyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyZTAwNDY3ZjE4NTM2ZWE2YjRkNTgyYjI0ODBlYmVlODgzZTRmNTZiZDkxYWYzYWQ3YTQ3Y2VlYTNlY2U5YWNjIjoiZDUzMzQzOTgzMThhZGU1OWU2YmRhNWNmY2U4ZTExYjI1YzljY2VmYTJmNjUxZWIxNmY2NmMwM2Q4NGRjYzkwMGRjN2M4NWU2ZDJiNzc4YjE1NWFlNDU5MWFmMDY5OGRmN2YzYjhiOWY2NGQ0NDQyZWNjODIwMzVmN2Q4ZTcxYTVmNjFjNTE1YTk2M2YyZmJhMDc3ZjNjYjgyNzZlOTFiMzFiM2Y4YWExOTM5ODhhMTZhODZjY2FlYzRhNjg4YWQ2OGI1MTQ2OTI1ZWMyMWQ1NWRlZDQwNzcwOWQzNGQxNDBmMzdlMWY4N2Q5NTU2MTk0NTNjMzcwNGU4MzkxODA4OCI6ImFhNjcxNmU2YjcxMDc4NzZhMzMyMWQ4MDdhODEwZTExIjoiNTYwNmEwYjc3Y2M5MDIwOTU1YzdlZmRhMzNiNzA4MGU5YzBlOWZkMzc0YzQyMDFiNDMyNGIzZTY1MjNiMDQwNzE3MTE0MWU4MjQ2ZDAxMjkyYTM0ZGM2OTMzMWY3MTc3ZDZiNzIzOGUxNmUwMzAzZTg1NzQxZjljZWE1Njk4ZTQyZmM3OTIxN2Q5ZTE0MTQ3NDA2OGQ2YzE5MjcxM2MwNGIxYmEzNTczZTkzNDgwZjY5ZTRjYmY3MjA5MGQ0NmQ2MmQ1YjUyZTRhNzYxM2FmOGZjZjAwMTBkMDAyNGVhMTFjMTljYjA0NTcxYzZkNzA0NWExMTU3Y2Y4MWRmMThkMSI6IjI0OTExOWFjZTRlMjkyZmZkZmViYjQzM2Q1YjU3ZmExNTE4YWYzMzg5ZWI4MzIxNDZjM2FkYzJkYzYyZmNjOTEyMWQ3ZjY0NjFhNTNlZTEwN2NlN2VkZjM2MmIzNjVkOGJjMThlNTBjZjljMzI4Y2I3YzdhYTdiNGU4YmZhMDdjMzRkYzgxYzM4ZmUwOTgyYmJjM2I1NDM0ODVlYTRiMGNlNWE3NmM5ODhjZGZjZDI0MTkxMWNkNjZmNWE1ZjllMGM5NzMzMmJiMGYzOTI2MTE3YzA0Mzc0NzA3MTdjNjM5NTdhZWJhMWM1NWQ5NmIxZmYwZjRkNjA0NWY5MDhjZDQiOjY0OiI3MGU5ODZmY2VkMDNhZTY3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhMTgyNDBmNjEzNWU3YjZlYWMwNzE1NDZlZTU4YmI1MjM5NGJjMzRhZDRlOTFlZTY3OGI3MmU0NTE0ZmRkY2Y3IjoiMDJmMjg4ZWVhNTU4OGU3YTAxMWY0ZDkxZWNhMjMyYWY3MGY2MGFlM2Q5MzAyY2FlNWE4YTU4Nzk4YzFiNGU5NzNlM2IxZDA3Njk1OTM0YWU4NzEyMDE2ODI1NTRlZjZhNWI5NDk3NmM2YTFhYTczZDM1NGYxZDY1ZTNmMDI1YmIyYTNmMWU5MzAwOWU4MjJhODc1OTBkYmZkMTk2NTkwNDIyMzA0OWM1YWMwZGE4NTk2OTU1MTk5ZmY3NjdiOTJkZjEwZDFmOWMwNWM0MGJkODIwNDg0NmM3MTljNTU5NDAwMGNhYmQ4NzM0MmYwNDQ3ZTRlNDY2YzM3ODg3MjNmOCI6IjE0OWRhODE4NmNhNzM5NDE1ODI1MzJlZGUxNmVkZjNkIjoiNGQ0NmUxZTg3MzIyY2E4NGQ1YmI5MmQ1ODY3MGY2NDQwODNkYjA2YmRmZmQ5OWZhYjAwNTVhNjJiNjRhMzBiNWE1NjczYTEwOGYwYjlmMTE0ZDM3OWQzZmU2M2ExZjYzNDA3ODgxYzViNWNiMDMxNDIxMDljMTU4YWY0MmEwMGViMjRkM2IxODczZWRkMjI4NGE5NGEwNmI3OWQ2NzJiYzhmMTMzNThmMzI0YWYyNjIyZTlhYTBkYTJiMTFlMzM1Njc5MjdlODFhZWEyNGYzNjA1MTY4ZTYwMmI1MzJmYTJjZjliZGU1ZjhjYzBiNTEzMjllMDkzMGNmMjJlMzc1MiI6IjM2Y2RkYWM5OWUyNjczNTg4YmE3ODNkM2MwODViOTkzNTYyNjY4N2EyZGJhYzlhZDEwZGViNDg2N2M1NzdkNmY4MDQ1MzI2NmIyNDAwYWZkNzczZTRlZGViNzQzYzMyNTYyZTg1ZjdmOGY0M2RmZDg3YjEwYTJkZDc5ZWRkZjZlNTgwYWViNGNlYTkyYWMyMWNmNDljYTk3Mzk4Y2MyM2MwMmIwY2E1OTI1NzY0M2ZiMmJjNjQ2MmI5Y2YwNDY1ODM1MmQ1M2MyZWU1MGQ4N2NjNWNhMmVjYjcyMmQ5NTBmMGRhZWNmYTBiN2MzM2FhYTJjOTFkZDhiMDkzOTE2Y2IiOjY0OiI3M2NiZTQwZGYzOTI3ZTgwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0YjY0YmRlZDZjNjU4MDkwYTg1YjVkODg5Njc5YzZhMDA1Nzk0OThhYTgyYmUxZTNhNjI4YTFjZDAwMWU1MmE2IjoiMTgyY2Q1OWRjMTkzNDE5OWQyZDJhMjcxMjE1NzQzOGMzNDdlMjg2ZjY2YjVhMmI4YjUxNDlhYTQxZmY3YmE4MmFkYzM3NTFiZTM3OTc0MTEyNGRmY2YwNWM1MzE0MTZhNjRmMjVmMGQyOGFiYjZmN2JmOThjODA3NjJmMGZhMzYzZGE2Nzk0Mzc2MjFkY2Y2MWJjZTQzZWY0ZDYzMTc4Nzc5ZDFhM2ViZmZiODIwNDRkNDI3ZWY1MjJjYmQyNjQzY2YxZjU2MTdhMGYyMzEwM2NkMmExNjRhNTlmMTgyYjE1MWY0N2IzMDNjNGViNzM4N2VlNWNiOTdjYWJkZjk4NSI6Ijk5YWE2ZjM1OTUzNGRhNDA5YTE4NTQwZDgyZmIzMDI2IjoiZjU1ZmQ2MjU1ZDhhMTg4Y2U5YTRhMjcyNzY5OWNlMTZjOGJjNWM2YWRiYTg4ZDk0MTA2MDM4Yjc0ZGViNzljOWQ0M2JmYWE0NzM3NTE0OGQ4NDNhNWNlMjQ4ZDcwMTkzYzgwMTcxOTY5NDFiMmQ5ZTJkZmQ0Mzc1YTMzOTBjMTlkMmY4MzNiMGIyNjVkYWIzMGYyNmFkZWUwN2FiMGFlZWI5MzBkYzNhOWZiY2Y3MTlhNzA3ZmFjNzI0ZGViMjhkZWUyYTY3ODhiMTdmYTM1MDUyOTBjMjc5N2M2ZGJmOTMwYjQxZWNhMWY2ZDU0ZDc1YjgyMGU2MmVjNzAyM2U5MyI6IjVhMTIxMTIxODE3NGU2MDY5MDMzNDg1NjQ4M2EzMDY2ZTJlOGQ5OTZmZThhYjg2ZDBmOGZlZjA5YWJhOWVmMGFjZmY5ZDNlMWU1Y2MyN2VmYjU0NjRiYzIzYmVhOWM3NzhmYzc0MjA2YWUzYTE2ZTVmZGJmOTk2OTRhYjcwOTZmMjNjNGIzOTVkN2E3YjhkNjY3NWU1NmI1NTA1ZmY2MmY1MmJmMTgzYmNjNDQzMzI5ODI5NmU0MTY2MmQ2NTE5ZDljMWYwYTVmYjMxNDAzNzZjODg5MDU0N2VhZTcyYWZlNzVjMzM4YmE5N2ZhZDlmMDE4NGRkMzExYmJkYWYzY2MiOjY0OiI4ZGJkYzA3NDYwNzRiNDg2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjYWRlZjM1MzEyMmNlYzFmZGJjMjM2YzBhYjE5NWZjNGQ3MzI2NTVjZWY0NDRjMDBiNmNiYTVjNjFlMDFjNjE0IjoiYTNkNWU1NWZhMzExMGEyNjhjZjE0MTRhNDgzYWRhYjZkNThlYzg3NjJhNmU2YmU4MTI2OWMwMzY5ZTg4NDAzMzM1MDNiYzM2ODhjN2JlMDAxY2RiODRkMTYzZmExZGZiMDVmM2IwMWZmZmYzMTE1MWYxYWY3ODBjNzk2ODIyZTNkNTY0Zjc4NTk2NGE1NDZiY2MyYTMyMGQ4MWEyYmM2MTA1ODY1MmE4NTk0YWU5YjliMDkxNzQwMGUwOGQ0YTk5ZmExNjEzNzZhYzUzY2JhNTRjOTI4ODlmZDM0OTdlMjMzYWZmNGUxMmNkODVkNTczNzVjN2M4OWU5MmNkZjVmNSI6ImQ3NjViNTk1NGU1YjQ4Njg4NWRjNzhjZTY4MDE1MTZlIjoiYmEwNDA1NzQ1OTcxZWFlYzVkMzM3ZmQyMmUwYWQyODc1NTFlNzA4NGYxYzljMzgyMzFkNjc1NzE5ZTM5ODAzNTZlMTgzYTk5YTNjNzYwZWNmN2E4ZWRlNWUwZGFjOGQyYmMxM2UxMzU1NzBmZjZlOTFhODU0ZWEzYjQ1NzI2M2IwZTc3ODk2ZmRmN2JkZjBiNTNjODI3NmNmZDFlYTNlOGUyMjQ1MGZmMjY2NWVhY2QyNGU1ZmIyYmU4OTM3MzM0OWZjOWUyOTY3NzYzZDQzY2JkN2FkYzlhMzc2YjFiNGFiOTU2ZGRmOGIxYTU2ZDkzODVmYjdlODYxYmMzNGRmNyI6IjliOTlmOTg0YWUyNmY5Y2FkNWIzYzgwNTg3NTdhMGE1Y2FlZjBmYjg2YjhlY2VmMGMxYmNhNmI5OWJjNzJiMGQ1MzQ1YTAwYWU3NWUzN2Q0ZTY1MTAwOGJiNzMzMTA1ZDIxNzJlZGFhZjViZGE0YWQ5NTBhNDlkZTU1YTUxNGU4ODJhNDcwZGNhN2M3YmJmZGRkZTQwZDM4ZmVmNGUxZjM4NjRmZDdlMjEyYmJjMDM4M2QwYmMyOWFiMjMwM2M4OTM1ZDQ5YzM1ZDdkNzNkZjJmYmEwZGFlYjVmMzdmOWFiMGQ1NDE3NjZkYTcxYjMzZGExMDE4YTNmMjg3YmEzMTIiOjMyOiJjMzc0Y2Q3NyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMGNmYzQyNzczZmUyZDE2YTU5ZGE1MjIzNGFmNTAxNTI3MTMzMjM0NDQ0OGMyMTRhMmI0YTBiYjUzYjA3YTBhMCI6ImRmYmY5ZWFhNDZjMzY4YjI4ZWY1MDIyN2RiOTdmMjliNWQ5ZWQ1OTk3NjBiYjgzZjVkNTJmOTJlZjU1MjI4MTVkNjk1MmViYjBkOWI0ZWZlODg0NDIxNmQzNzUxMDc0NmNhZjhjNzc1ZDJjODYyYmFkOGQ2N2VmZmUxMDlhMGNiY2RkMTRiYThlMzFmYTQyMGE0NzVlNTVhYzZiMDI5MDgzNDZhZDFiMDY0ZDViNmI4Njk1MDNlMDhkMDU3YWU2NWU5ZGMyYTJhMjYzNDU5MTdiMThkMWI3MTVhMjM3MmU4ZTExNGEwNzFlY2VkMGMyOWNjOTk2NmQ3MjA1YWUwMTAiOiI0NWFmYjNiYTJkYjkyODdmMDZjZjQ4NDA1NzY0YTk1NSI6IjE2ZDNhZDU1M2NjMGZkZTNmMzIxMTJiZGI0Nzg0NTBjNjVjODU0OTI3YjE5ODkxNDY0OWEyODIwYTllM2QwMTEzMWI2OTM3NjVkNDBiZDJiYjc0YTUwZWI0Y2Q3YmM4ZGQ4ZGJhYzljNmE2MWFjYWY1ZTRjZjgxNTcwODE0YjMwYTZhMTE4NzdhOGY5YzVkZjM0MmY3MDAwOGNiZjA1NzZiZDI3YTUwYmZhZjZlMjJhNDBiZDc3NDM1ZGExNmI2NjZhMDZkMTcyYWE5ODFiZGNhZTBkMjViOGFiMDAyYzZjMTk5NGEzNTZkM2MzYjdlNGRkN2I5OTg5MmIwNzg0ZjYiOiJlMjlkYjJjNGJjY2VmMmRkYTgyOGNlNjUyNzkxZDQyNGE4NmNkNTc5MGU2ZWNlNjdiYzAyOWJhOTUyMGJkOGYzNWEyMTRhNzNkOGI4NjU2NGRmMGVjY2RiNjBlYWZlZTQxNzBkYTI2OTRlYjU2M2U1YTg1NGIyNWQ3YmEwYTRjNTM0NjVmZGMxNWM2ZTI2N2JlMmU1NDI2M2Y5N2FhM2VkYmUyMzU4ZjNkOWI4ZDI4OTk3Mzg4YTU3YWE0MjdhMjM5YTc0NTM0MzkzNTkzMTk2MjUzZGUxYzI5NDZiN2E0MzdhMDA0ODBlY2IyZWIwOGRiZTU1Y2EyYjM2NDFjMzZmIjozMjoiMzllMDFmYTAiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjJhODQwZGY0YmUyMmM3MDc4NmM4NzMwNThkMmE2ZTE2ZGQ5ODk1Y2JmYjU1YjljOWU5OGY5NThjZmU2MmU2NWQiOiIzMTNlZGRjNTNmMzk4NjkyN2EyNjFmNDk4MjgzYjZkYzRhMzlkMjZmOThjNzQyODEyNzIzN2Q3OWExMWM1ZTYyNmUyZTljZGI2OGY3MmFhMzE2OGFiMjNkZmEyZjVlMDNiYzY1YTY4ZDc4MWYyM2ZiOWUyOTU5MDljZDlmMGYzZTU2NDhjZjgyZjNmNmIzYjUwOWIwYTMzM2NiN2Q5ZjJiNmU0NDRjMzUxYTMxOGY4ZjIwMGE5MjFjY2I0MDlkZWYyMWI4N2JjNTVlYzIxMWE3NmE1MTgzNTBlNmVlMjFkNzM3OWVkZDAwNGIzYmZkMWNlOTA4NmI5YzY2ZDgwZWMxIjoiZWJmMTU1ZjdjZjU1ZTZhYWJkYzExNzFjOTVjNDUyOTMiOiI4YWJiODg0M2RlMTc2NmNmYjhkNjQ3NDQ5NmFjZGEyZjdhMTRlNzhhNWU0Yzc4N2FjODllNmJjMDZjZmQ0MjE3M2MzNWIzYTc1ZGRmZjY0NGY0YTU4YWE3NTAyZmVkYWRhMzhhNzE1NjQ1NzM2NWI0YzNjMDdiYzEyYThmOTA2MTMzMTEzOWI5YTJiOGQ4NDA4MjliODc2YmViODRmMjdkNWE2NDA5M2MyNzBmZTZjMzEwY2EzYWZlOTg3YmJjNWVjNGRjMDYzNThkNWJmNzdjN2I0ZTRmZTQwNzhjNmQzZWMyOGU5YTI4MTMxOGRhODg5NDljNDc4MDk0YzAwNjViIjoiNzY5ODY5YTU1NzU0ZWI1ZDZkNDJlMjJhMmI1MjcxYjM4NTMzZmMwYzc5NjQyZTI1MDM0N2QzNDU2NmVlY2E3MzJlMDU2NWY4MDY3MjA1NGJkMTBjYmQzMDY3NzMwZGJjNTY3MDM5YzczMGQ4YmMzMmEyYmRhYWQwOTg4NTY1MTUzM2E0ZjAzMTc0ZDRlNjUxMDU0N2MxZTFkZDUxYmU2MDcwYWIwY2EwY2NlZWFjY2Y2NGE0NmQwZWY4N2MwMzExYmQwOTk3M2YzYjU4OGE0ZGZiMzljODUwODZlYTVkNjdkYzUzMWMyODdiODNjMTYxZGNiMjVlMDdiNjcxMzQzZiI6MzI6ImMzNjRjMDg5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNDYxNTY2Y2FjNzRmOTIyMGRmOTdjMWFiMmY4YmI3NDE4OWE2MzRiYzc1MmY3ZjA0NTI2OTIzZDMwNTA2OTQ5YyI6IiI6IjU0NmQ4MjFlNDM3MzcxMDYxY2YzMjA3ZjNkODY2YzE1IjoiIjoiIjoxMjg6IjQ0MTkzMDcyNzkxYzQzNWQ2ZThlYTc3NTZhMGJkN2JmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzczNmRiYjM4ZjFmZTM1MWE3ZmExMDFkOTFkYTYyMTI0YzIyYWMwMmVlMDZiOTQxM2Y1NjY5MTA2NzU3MmY3MyI6IiI6IjVmMDE3NzllNWU0NDcxY2Q5NWE1OTFmMDg0NDVlYjViIjoiIjoiIjoxMjg6IjFhMWYwOGM4ZjQwYjkzZTdiNWE2MzAwOGRmZjU0Nzc3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZWVkY2FlOTI0MTA1Yzg2MTkwMDMyNjUwZTJkNjZjZjY5MjdkZDMxNGRlOTZhMzM5ZGI0OGUyMDgxZDE5YWQ0YSI6IiI6ImEzOWQ0MDBlZTc2M2EyMmQyYTk3YzE5ODNhOGEwNmE2IjoiIjoiIjoxMjg6IjNiNDI5NGQzNDM1Mjc0M2M0YjQ4YzQwNzk0MDQ3YmVhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNzE0ZGY0YjY5ZGMwMDA2N2M0YWI1NTBmMzdmZjcyMzU4YjBhOTA1ZGVhMmMwMWYwMGJlMjhjZWMxMzAzMTNjMiI6IiI6ImM0NmQ2M2Q2ZmVhZDJjZWUwM2JkMDMzZmJjMmU2NDc4IjoiIjoiIjoxMjA6IjJhMDI3MWIwNjY2ODg5ZDJkMGIzNGU4MmJmMTdkOCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ1NDAyMWVjZTlhODdhOTU0M2ExNjI2ODIwZDM5ZWRkMWVmZjNkY2EzOGEyODdkOGZiNjhiZDMxNWE3YTI2NzciOiIiOiI1MWRlNTRiNjMzYTdjOWYzYjdiMmMxZTRiNDdkMjZhNCI6IiI6IiI6MTIwOiIxMTQ3MDgxMDJhNDM0ZTNhMzAwODhiNTk0NGMyNzIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkN2U5MGI1MzljOTllOGMyMTg3ZWQ3MjgyMzI1OGMxMTQ5ODkwYTY5YTljMDA4MWZmOGM2NmUxY2RlYTlmMmY2IjoiIjoiNmRiYTMyNzM1NjBmMzBmMTE4YTJlMDI1MWY3YjdkNzYiOiIiOiIiOjEyMDoiNWY0NWUwMDE4MWNkMmQ3ZmViNDcyM2UwY2RjYTI0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjk0ODIzM2VlYzliZjhhZGY3MjUwYjIwZDYyZGY5MjE5ZDMwZTMxNGM1OTMyMzgzMjAzODA1ZmY5ZjNkYzVjZiI6IiI6ImQ2YjhlNzIzMjcyZTI2OTIyYjc4NzU2ZDY2ZTAzNDMyIjoiIjoiIjoxMTI6IjE0YzlhOWEyMTdhMzNkNGMwYjhlNjI3NjQxZmUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjNzNmYjVlNzMyZWJjMWRjN2M5MWFjMjVkZTBkMDFkNDI3ZGUxMmJhZjA1ZmYyNTFjMDRkMzI5MGQ3N2MzNGQxIjoiIjoiYzMxMjIwODM1YjExZDYxOTIwYWUyYzkxZTMzNTkwN2UiOiIiOiIiOjExMjoiOWViMTgwOTdkM2U2YjZiN2Q1ZTE2MWFlNGU5NiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE0NmFmZjIxMjE4MjU4MTRjNjAzYjI1OGY3MWQ0N2JkOWM5ZDNkYjRjNmZlMGY5MDBlMGU5OWQzNmM4ZjhkNjYiOiIiOiI3Y2I1NTUwYTIwZDk1ODQ5MDczOWJlOGE1YzcyNDQwZiI6IiI6IiI6MTEyOiI4Yzc2ZWViZGEwZjFmZDU3ZjA1YTYyYzVmOTNkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjFhNjEyYzc2ZGU1NTFmNzk0YTE0Njk2MmQ5MTNmNjBmYmQ0NDMxMzY1YjcxMTIxN2FhYTRiZWFhMTE1ZjcyNiI6IiI6IjJkMjU0NjJjOTBhZDlhMjEwNzM3MjllNWVmYzk5OTU3IjoiIjoiIjoxMDQ6ImU0ZDNiMjc3ZGM5YTEwN2MwMzkyY2ExZTViIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGIyMzM0ODAyMzlmYWJkMjAzNWE3YzkyMDdhOGUxYWIyZGE0NWE5MGE0NzJiMzA4NDhmZTRiNDc1N2M2MjhkYiI6IiI6IjUwZDQ1MDk2YWZkMDU3MWUxNzFlMWFiMWZmYjM3MjBmIjoiIjoiIjoxMDQ6IjUzOTNiYzA2YjhjNWVjZWYxMjY0ZmQ2MDg0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGMwNTFhYzYzZTZiMDUxNTk0MTU4Mzk5MjkxZWQxMDFhM2VmYmIxNzAxYjk4ODE5YzQ4MzVhNDg2MzczNDM3MSI6IiI6IjFmMzA0ZDRkN2Y4NGFiNTYwMzY2MjE1NjQ5YjBhMDY0IjoiIjoiIjoxMDQ6IjEwODFkZGE5ZTBhNzkzOTE2ZGM4MmY3ODQ4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NWY3NmRmNzcyYWY4ZTMwMTlhNGMxNTg4YTdkNTk5MjVmODBjZTBkNTY0NzAzMGYyOTU0ODM3NGU3YmNjOWU4IjoiIjoiZDQwNzI2NGUwOWZiYzg1M2IxMzFjOGE5ZjgwOGYxZGUiOiIiOiIiOjk2OiJkNTE1NTIyZGI1MmJiODcyYTRkM2Y5ZDEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYwOGQ3NTkyYzA5NDMyMmIzMWQ0NTgzYTQzMDk4NmJkZjZhYTYzOWNjNGI0YTBiMzkwM2U1ODhiNDVjMzhkMzgiOiIiOiI2YTYzMTk1MmU0OTkwYWU2YmRkNTEwNTJlYjQwNzE2OCI6IiI6IiI6OTY6ImViODg1MWNmZGQ0ZmM4NDExNzNjNDk4NSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODZhOTA2MzFlNTM0MWU2N2RmYTU1ZTY4YjA3NTIyNTA3YjQzN2ZiYWI3ZjNlMmUyNmNmYzZlODllZjlkMjQxMCI6IiI6IjY3NzYzZWUxODkwZTRiYjQzMGFjM2MwZGJjMmFmOTk3IjoiIjoiIjo5NjoiYzZkMTE5MDFiNTNjZjZiMTNhYzAzY2M1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJiOGQxMjc4M2JhMjU0OGI0OTllYTU2ZTc3NDkxZDI3OTQwNTdlMDVmZDdhZjdkYTU5NzI0MWQ5MWQ4MzJiMzNhIjoiIjoiMDM2NTQzNjA5OWZlNTdiNGMwMjdjN2U1ODE4MmUwYjkiOiIiOiIiOjY0OiI0MWZjNDJkOGM5OTk5ZDhjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJlYjE3YzFiYmNkMzU2MDcwY2E1OGZjMzg5OWJiMzc1MWVlYTViOWYzNjYzYzhlNTFkMzJjMWZjMzA2MGI3YWMyIjoiIjoiYWNhNzZiMjM1NzVkNGVjMWE1MmEzZDcyMTRhNGRhMmYiOiIiOiIiOjY0OiJmYmNmZDEzYTIxMjZiMmFmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5MTZhZWE3YzMyODNhYWRiNjA5MDhlYzc0N2JjZjgyMzY0YzE4MjdlYzI5YmVkY2JhZGFjYmI5YjkzNTIyMWMxIjoiIjoiZTRhZWZlNmY4MTg3MjcyOWZmNWEzYWNmMTY0OTIyYWEiOiIiOiIiOjY0OiIyMDM1YTdjZTgxOGIxZWI0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0N2I0YjdmZWI5MTU4MmEyZjYxMjFkMTJmZDQ2NTk2NzM1MmU1OGQ5ZjNkMWJmMjc0NzhkYTM5NTE0NTEwMDU1IjoiIjoiMTM3YmMzMTYzOWE4YTVkNmIzYzQxMDE1MTA3OGM2NjIiOiIiOiIiOjMyOiI4MjI5NTViYSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwwLDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiODk1NWNkZGNlNjU5NzhiZDY0ZWY1MjI4MzA4MzE3YTFiYTZhOWZiYjVhODBjZjU5MDVmM2FlZDAzMDU4Yjc5NyI6IiI6IjEzNzBlNzJiNTZkOTdiOWI5NTMxZWMwMmUyYTVhOTM3IjoiIjoiIjozMjoiYjJmNzc5ZTgiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc3OTVkNjMxZjdlOTg4YmY1MzAyMGQyYjQ2MDdjMDRkMWZhYjMzOGE1OGIwOTQ4NGZlNjY1OWM1MDBmZDg0NmIiOiIiOiJmM2Y1Y2M3YzFlYzBiN2IxMTM0NDIyNjllNDc4ZWQ4MSI6IiI6IiI6MzI6ImU0ZTZkZmNjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjlhYWI1ZDJlYTAxYjlkYzM1YzcyOGFlMjRlMDdjNTRlNmQxNDUyZTQ5ZDk2NDQ3NzZmNjU4NzgxOTliYzVlNCI6IiI6Ijk2ZWMyMjUyZTUxZWJmYjczMWI2ODA3MjliZTczMjk3IjoiOTgzYTEwMmE2NzM1OWY0ZWVjYWM0NjViMGQ2NTkwOGE0ODdjOThjNTkzYmU4OTQ5NGEzOWI3MjE3MjhlZGM5OTE3MjZlMWZiYTQ5NjA3ZWVkMWY4YmE3NWFlOWFiODJhMWE5NWI2NWViZGY0OGQ3ZWUzYzRhMmI1NjgzMmYyMWE0ODNkNDhjODQwMGRlYTcxNTM3ZjRjNDU5ZDFjZmNmOWQyY2M5N2IzMmViN2M1MTQ2Y2JmNDRkN2U1YWM3NzllOWJlMGFlNzU4ZWFmZmYyMTM4ZDRjNTM3MGI4Y2I2MmQ3MGViYjcxM2RmZDJmZDc3NzJmYTI1MDU5MDYwOTg0NCI6IiI6MTI4OiI3NjZiNmRjZjQ5MWE1ODM2ZWY5MGY0N2FjNmFiOTFlYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImQ3MTNiMzNhZjU3NzYyZjkzM2Q2YWJmZWNiYWM3ZmIwZGMxZTU0NWRkN2MwMTYzOGIwZTE1MTBhZjcxOTc2OWEiOiIiOiI1ZGE1MjgzM2I2ZmM3M2MwZTRiMTQwM2UxYzNjMTBhMiI6IjM3NGRkNGViZGZlNzQ0NTBhYmUyNmQ5ZTUzNTU2MDkyYWJlMzZmNDdiYmI1NzRlODE4NGI0ZTBmNjRkMTZkOTllYWYwNjY2ZmEzZDliMDcyM2M4NjhjZjZmNzdlNjQxYzQ3YWM2MGYwZWUxM2RkMGMxMDQ2ZWYyMDJlNjUyYjY1MmY0YjVkZTYxMTk4OTIyM2IwYWNmMWVhZDliMzUzN2JiYTE3Y2NmODY1YTRhMGZkYTFhMjBiMDBlM2M4MjhiOTcyNmJiZDBiMGU5MmZhOGVkOTcwZWVkNTBjODg1ZTZkNjk2MDQyNzgzNzVhZjdiOWFlNDdmYmNlNGZlZDdkMDMiOiIiOjEyODoiNjE1MTk1NjE2MjM0OGViMzk3ZTJiMTA3N2I2MWVlMjUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3N2ExZTRkZGZiZTc3YTBjYTM1MTNmYzY1NGU3YzQxNjA5Y2I5NzRhMzA2MjM0YWRkMmZjNzc3NzBhNGE5ZTE2IjoiIjoiMzBkNmVjODg0MzNhNmJkZDc3ODZkYzRkMzY5M2JkZTgiOiI2OWJlZWY0ZGJkY2RmNGU4ZWViOWJmOGFlNmNhZmY4NDMzOTQ5YWZjMmZmZWY3NzdlMmI3MWE5OWZkZTk3NDc5N2RmZWQyMjU0Yjk1OTQzMGVjYzQ4ZGI3MmNlZTE2YzdlZjQxZmE0MTY1Y2U0YTA2MzZhZDRlNDA4NzVkMTkzYTNjNmM1NmE2YmNhNWE1NWJjZTNhMDU3YTJkM2FjMjIzZWJhNzZlMzBlNzQxNWYwMGU2YTc2NDNmZGE5YTFiZjRkNGI5NmNlNTk3ZmZlMzBjM2Y3ODBkZDc2N2NiNTY4MWJiN2EzZmQxMTY2ODM4MGUyNzJiZGQ3MGU2NmYxOGI2IjoiIjoxMjg6ImQ0YTNjOTFlMDJhOTRmZDE4M2NiMGM5ZGUyNDFjN2QxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzAzOTMwYjhiYTUwZjY1YTUwYzMzZWNjZDg3OTk5MGQ1ZDg3YjU2OWU0NmYxYTU5ZGI1NDM3MWZjYmRhN2ZkNiI6IiI6IjJiMmIyOGQ4YTVjOTRiNmY3ZWU1MGUxMzAyNjhhMDc4IjoiYzJmZjIwNDQxZDk2YmFlNGQyZDc2MGRjYmFlNjM2Y2E3ZTAxZDI2M2MyOGRiNWZhZWQyMDFiZGIzOWJjYWNjODJlYmRjOTQzOTY4YWEwYWNjZDkyMGQyNTg3MDljMjcwZGY2NWQ0NmQzZjA5OTEwZDJlYTcwMWMwMThlYzlhNjhhZjdmYjNkNzZhOWIzNjBkZTI2NmIyYWMwNWU5NWM1Mzg0MTdmZWM1OWNlYzFmMDdkNDdjMDM1MTE3NTE5NzhiYWViZDJlMGU0Zjc0ODNmNzM1MWI1ZTYxYzJhNjAxMzhjOTdiNzUxZjZhOGM4MzIzOTcwZjZiZTA1MzU3YWViMiI6IiI6MTIwOiJiNTk3NDkxZGZlNTk5ZWFhNDE0YjcxYzU0MDYzZWQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMjApICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxZTNiOTRmNTg4MzIzOWM0NWVkNGRmNjkzMGM0NTNjOWZmZDcwYjFjNmNlZTg0NWJiY2ZlNmYyOWE3NjI3MTNiIjoiIjoiNjExNTVmMjdjNjI5ZGNiNmNmNDliMTkyYjBiNTA1ZDYiOiI1Yjc0ODJlOWI2MzhjYjIzZGJhMzI3Y2MwODMwOWJkYjQwZDM4MTAwYTQwN2MzNjA5MTQ1Nzk3MWJhZDNhYjI2M2VmYThmMzZkOGQwNGZkYzRkZWEzODM2OWVmZTdhZTVlOGI5YzE5MGRhZDI2ODhiZGE4NTdlNDhkZmQ0MDA3NDhhMzU5Y2ZlMWIyYTNmM2Q1YmU3YWUwZjY0YTNmNDQ3MzhhN2M3Y2Y4NDBhMmU2YjkwZWM0M2Y4YzkzMjJjNjBkZDkxZTRmMjdmYTEyMTk3ZmFiN2VkMDkyOTkwODc5ZTk2NGNlMDE0ZjZiZTJhMWVmNzBiZmVmZTg4MGE3NWQ1IjoiIjoxMjA6IjcwMDNmMDRkNmI2ZDlkYzc5NGJlMjdiOWM1ZDVlNSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEyMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjkwODBlZmZiMjc5OTRlZjgzMTY4OWRhMTA2MDBlN2EyMTlkYjkzZDY5MDY0NzQ1NzcwMmMyMTdiMDgwNTdlYjMiOiIiOiJmNDU1MTQ2OTZmZjVlZTFlNmU1Nzk3ZjdiY2ZmMDVjMCI6IjUyNTFmODAwZjdjNzEwNmMwMDhjMDEyMjk3MWYwMDcwZDYzMjViNzM0M2E4MmZjMzVmMzg1M2QyNWM4NzgyMTVlN2E5MjliZjYzY2M4OTk2ZjBmZmI4MTcxNzRhMzUxYjcxZDY5MWYyMzAyMWY1ODc3N2Y5NjJmZDFkNDVmZjg0OWU0NjEyZTMzMDRhZTMzMDNhY2U3YjhjYTFhNDNmNTRlNjYyMDcxYzE4M2ExNjk1ODczZjU1NjczOTc1ODcyODM0MzNkMWU3NmNlYzExMDNlZTc2ZjhlMDQ3MjgxNDQyNGI4OTgxY2FlYTFmNjI0MTMxZmI3MzUzYWZjZDJjZDIiOiIiOjEyMDoiY2ZiNmQ5YmNjZjAzNzhmYWJhZTA4ZmQyMzBlZGMxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOGMyOTFmMGFkNzg5MDgzNzcwMzlmNTk1OTFkMGUzMDViZGM5MTVhM2U1YmZiMGI0MzY0ZTFhZjk5NDYzMzljMCI6IiI6ImE5ODMwZDU2NjM0MThhZGQ1ZjNjMGIxMTQwOTY3YjA2IjoiZTQzYzA0ZTFmNzMwNGMxZDgzMjM1MTIwZTI0NDI5YWY4ZGMyOWRjOTQzOTk0NzRkMDYwNDdmZDA5ZDYxZGRjNjgyNjg0Nzc2YzgxZWYwOGQ5N2YwNmRiNmU0Y2ZiMDJkYWVhNzI4ZWM2YWM2MzdlMWVjZmRiNWQ0OGYwNDQwZDhkOGZmZWU0MzE0NmY1OGEzOTZlNTE1MTcwMWIwZDYxZDVmNzEzYjI4MTZkM2Y1NmQ2ZWUxOWYwMzhjY2MzNjQ5M2Q5YWQxODA5YTQ5YWE1Nzk4ZTE4MTY3OWQ4MmNiYTIyYjBiNGUwNjRmNTZhZjVlYzA1YzAxMmIxMzJiZGE4NyI6IiI6MTEyOiIyNzU0ODA4ODllZmU1NWM0YjlhMDhjZWY3MjBiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTZjNzdjMTFhMzMzNmE0MWI2MWZmZGMxNzI0YTgwNzM1YmJlOTFkZDRjNzQxZmRiY2MzNmUyMWM1MzMzNTg1MiI6IiI6IjY1NTUwMmQ3MDExOTMyNjQwNWQ4Y2MwYTJjN2E1NzJjIjoiYzAxMDM0ZmM2Yjc3MDgxMjhmYmY0ZDZmZmE0YjRiMjgwYTE0OTNiOWUxZGQwNzA3OWY1MDk0NzliMzY1ZjU1YWU5MjkwNjg5ZjFjNGJkZmE0MzkzNDRlM2FiYjE3ZjNmZDNkNWUyZjhiMzE3NTE3NzQ3NzE0YTgyZjBhOWFjZTA0OTM4NTkxZDNhZGU2ZDYwOTU0OTFhNDQwMzIyZDM0N2U4NjM0MDA4Y2M0ZmQ4YWRkN2MxYzQ3NjRhZmRiMmIwOThiM2Y1NjA0ZTQ0OWU4MDQ5YTQ2YjYxOTI2NDdkMTljZjg4ZmE1ZWQxYWJhYjdmMzEzYjQyODU1NjBjYmE0NCI6IiI6MTEyOiJiNGQ1ODE0NjRjNGJiMjM0MzM2OTljNDE4ZGRjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTEyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZTJhMzk1NzM5MzY2OTI3OGYwNTJmZjJkZjRlNjU4ZTE3ZjJmZTMyODExZTMyYjNmNjJhMzFhMzkzODkzMDc2NCI6IiI6ImE2ZjVhMWYxZjFhYzc3YTFjYjAxMGQyZGQ0MzI1Y2JlIjoiY2U5YzI2ODQyOWNhOWMzNWM5NThjYTNlODE5MzVlYzYwMTY2YWVhMGJlMTU5NzViYWY2OTEwMzI1MWVmYWZkNTRjYmNjMGJlZDc2YThiNDRhNWI5NDcxOTljZDNjMmRlZTY4NzhkZDE0YTVhNDkxYTRhM2Q0NTc4ODQwNWQwMTI5MzU0ZTU5YzA0N2I1MzY3ZjExNThiY2Y0ZTA2NmEyNzY5NTFkMjU4NmJhZmMzYzExZjhhOTgyY2E3YzNiYTQ2NzdhOTM4NDk4YmQ1MTE3MTU1MmVhMDMyZmUxYmQ4NWNmZWFlYjg3ZTg3MTY4ZjdhMjhlOTc5YjA4MzU4Zjg0MSI6IiI6MTEyOiJjZDU5ODZkZjhlOTc2MWQ1MmNiNTc4ZTk2YjFiIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMmIxNzY1MmY3ZjA0MDczYWZlOWQ5ZWI4YjI2MTVjNzU1MDk2OGI5Nzc2YjEzOWZjYzRmOWIwMzAwOTEyY2JkYiI6IiI6IjlhOGFjMjNlYTc0YjI5MmI3Mzg2MTM4NjY2YTBmYjYwIjoiMjczMjEwNzI0MWU2MTM2ZjFkZDI4ZDIzMzM3MzA3OWQ3NWQ2YWMxMzgyOGFlN2FmYzc1MWI2ZjljNTdlNzcyNjhjNTJhZTkxZjRhYjMwMTZhZjI3NjQ1OTc5OTQ1NzNjZDZiNDFmNzJlMjFiNjBmZmJiM2FhZmM5NDg3YWMxOWQwZmZlOGRiMmFlMmM3NTA1YWU1OTYzYjAzMmQxZWUxYmZmYjRjNWJkODhiYjBjOWEzNTBiYTI2ZWUzZWI4ZGMwYTE1Nzk1NTMzM2U0ZjI4YzVlYzczNDljMzkyMjlkZmY5ZjQ0MGRhNzI5MDlmMjg3MGFlYTg3M2E3NjU0NWVlOCI6IiI6MTA0OiJmN2I5NDIyOTQzOTA4ODE0MjYxOWExYTZiYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDEwNCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE2ZmU1MDJlMjBkNjQ3M2VkOWEyNzU2OWI2M2E3NjhlY2Q0Mjg3Mzg5MDRjZjBiMzM3ZGY1MTA3NzU4MDQ2MTkiOiIiOiI0MzFhOGQ3OGI5MTQxNDczN2U3YzYxODgzMjhhNmQzNyI6IjkzNGJjYWNiYWMxMGVhNGZmNmVlOTRiMTdiZDczNzliODg0ODlmYmYxMjNiZjQ5NmM3OGM5YjZiMDJlZTk3ZGQ2MmVlZGQwNWI4ZjQ0ZjQ5MTI3NjQ5MjAxMjllNzExNzAxNjI4OTkxYTAwMDllYmM3MDE3YTFhMTliMTc3ZWM5YmMzYjBmMjgwZWVlZmFkZmEzMTA3MDhkZmUyMTQ0MjhhMTg0MTQ3YjQ1MjNlNjZmMmQ2MjYzMGQ0YTEyZmQzZTM2NmQyN2MzYjdkMTU2NjU1M2M5YjQzNGVkMTkzZGIwODMxNjBkYTFmMjQxZGUxOTBiY2JkMzZmNDM1ZTMwZjQiOiIiOjEwNDoiMWRkM2U2ZDYxMGYzNTljYzRlOThkMzYyNDQiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwxMDQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJjY2M1NDVmZDMzMGNmMTdlMjdkNzU1ODJkYjI4ODA3ZWM5NzJiODk3ZjgxMmQ2ZWQ0NzI2ZDJhMThkYWFjNzZhIjoiIjoiY2FmMmY1NjU4NGE1OWM0MmE1MWZkYmZlNGFkNzhmM2MiOiJlODVhZTZiMjc3Nzg4OTNmMzZmMTMwNjk0YWYwYjQwZjYyYTA1YWEzODZiMzBmYzQxNWUyOTI3NjFjYWIzNmZkYzM5YmY1Njg3YTUxM2UyNWVkMTQ5NDE0ZjA1OWU3MDZkOGE3MTliNzE2NTA0NGZjYmQ0OGM3NzNlYWU1NDYzODBiOGU2NjdiNTY4MjRlMjM2ODUxNzNhZDkwMTVhOTQ0OWJjMWNkMGI3Njc5ODFlZmUwOWRhNDNhMDdiZjFhZWVlMDhiYTA1ZDM4N2I4YTAwMTk5ZTE4Yzg3NGZiM2E5MWY3N2JhNDQ4YzNiZmY5NzE1OTNmOTQ3NDdmY2U5Y2JkIjoiIjoxMDQ6IjVjZjVjN2NhNmZiZmVlNjM4NTRmM2JjZDE1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4MzQwZDYwNDc3MGM3NzhlZTgzZDBmZGQ1NzAzYjFmYjMwNGMzYmZmZWI2ZjRjNjVlMmRkMGUxMmMxOWJkZGNjIjoiIjoiYzBhNTgwNDY1YjFiMmU4MzQ0Zjc5NWE2NTc4YTUxNTEiOiI3OTlmMjI4OTYyZWY4Nzg2NWRmY2ZhMGFkZGRlNzM2NmRlMmU0YWE3ODAyOWRiYzhkNTdkN2U1MGZhN2M3NDM0MzQ1OGRmMzQ2NTEwMzU1NmEzYmZjNWNlMjE3ZmJiYjViMjgzNWM5Zjc2YjcwMjQwYjQwZmQ2MDViY2ZhNmI3OTBkNTk4NWE4YmE1NDM1NGUwNjI1MjYzYzYyOGU4NzQ2YzQ1MTUwNGZjNThhMTc5ZjkwZjc3ZjJiMjkzZDhkYmY1NTgyYjAzMTA4MjAyNWM4MDZlNjAxNDNkYTllYmI2MTMzYWM4MzY3Mzc2ZDA1NzJiMzI1NjllZTc5OTU0MGFlIjoiIjo5NjoiMzE4ZjU2YmQwZjM4MzJkMDQzZWY3MDBhIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI3NGRlNDUyNjJmZTA5ZTEyYzllZTcxMDAwMzAzNTIxMTJhNjUzMmQxODc0Y2M2NzkyYjRkYTY5NTA2NzdlYjJhIjoiIjoiOWY3ZmM3MzY3ZjlhZmRiNjdmZDFhZmZmYWMwNThlMmEiOiIyODlhYzZmNWJlZWNiYmNiZGU1Y2IzYjBmZGY0YTI3YmEyMzdmY2EzMzcxOWY3NzRlZDMzYTVmZDM1ZDdlNDlmNzZkM2U4OGM1M2ZkMzU1NjE2NTVjMzU0NjlmM2VlZmI1YjJmNzc2ZmYyNzk5YWFiMzQ2NTIyZDNmMDAzMTU0ZTUzZjRlZjA3NWYwMTZhYWE1MDBjNzY4NzBlNjY1OWE1ZjlhZjE5N2M5YThmNWI5ZTA0MTZlZDg5NGU4Njg0NjNjYzQzODZhNzQ0MmJiMGMwODlhOWFiODQ5ODEzMTNjMDFmZWM0ZmMwYmEzNTgyOWIzY2Y0OWM2NDQ3ZjU2YTRiIjoiIjo5NjoiYmMxYjhiOTRmZjQ3OGQ5ZTE5NzU1MWNkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsOTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0NDFlYzhhZmNlNjMwODA1ZDBjZTk4YjIwMGU1OWY1NjU2YTVjZTE5ZTVlZjU4MjQxZTZlZjE2Y2FjNzY0NmI5IjoiIjoiYTFjYmVmZmFmNTU3MDhjMzc1ZGNmZWI0OTZiMjFmNGUiOiI1YTZiYTVkM2Y1YTdhNGIzMTdjNmM3MTY1NjRjNjQ4ZjBlNmJjNmIwZjlhNGMyN2FmZmNhNmQ1YWYwNGI3YjEzZDk4OWI3YTJjYjQyY2U4ZWVkZDcxMGJlNzBjMDRjMGU0MDk3N2NhMWMyZjUzNmFhNzA2NzcwMzhlNzM3MDY0ZmIwZTIzZDNkZDQ4YmMwMGViZGQ3Zjk4OGY1NzE0MWUxNjRlM2MxOGRiODFlOTU2NWE2MmUyOGM3Mzc3MDY2NmZmM2JmZDcyNWVlYmQ5ODk0NmZlZDAyZjMxZDUwMGIwYjdhYjRkYWZlYjE0ZThjYzg1NzMxYTg3ZjUwZDk1ZmFlIjoiIjo5NjoiYWE0YmIzZDU1NWRhYmFhZWI0ZDgxZmNkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJkNjQzMTExYzk3M2ZmYjdmNTZiZmJmMzk0ZWVkYWM1NGJlMmM1NTY5NjNiMTgxY2Y2NjFiYTE0NGY3ODkzYTYyIjoiIjoiNDU3NWIwMGI5YWYyMTk1YTBjYzc1ODU1ZDM5NmU0ZTgiOiJiMmM1M2VmZTU5Yzg0YzY1MTk3OWJjYzFiYzc2YjBiYmY1ZTUyYjVjMzExNTg0OWFiZGJjNDY5YTA2M2UyYjE2OTliZDI5MmU1ZmNiMzQ3NmU4NDljOWVkYmU2ZWExNGMyYWI5NDhlZDdkMjFhMjFmNjk0MDY2MjFkM2Q0MTJiMDQzZWFmODEzYmU3MjJkOTI3MzlhMzNhMzYxZWQ4MDgxYzBlYjAwNDAwYzNjN2Q0ZTMyOWY1YmE0ZjdiNzVkNTM0NTAwZjQyZjE3ODA0OGNmMmU5NWI3NjhmZmVkNzljMzUwZjJmZjcyY2IzNTVhYmRiMzBhZjBhMTM2M2MwYjRhIjoiIjo2NDoiOWQxZDE4MjYzMGQ3YWVlZSI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDY0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiOTEzMDFlZTBjYTY5NGFlNjk3MWVlNzA1ZjUzYzdlYzQ2N2Y0Yzg4MjU3ZDY0NjZmNmY4MTU5YTg5NzAzODRiOSI6IiI6IjM0NWZiNTdlODgxMjRhNDE0ODI4NzMwYTg1ZjU3ODcxIjoiYzEzNjIzODI0YTIwNDM4NWYzNTIzODgwOThmNWUyZGIyMzQyNmYwMGE3M2M2MGMxYmYxMDQ3Y2UyYzdjZGY3ZjdjYzg0NzU3ODFmZTcwNzVkMTIyNmFkMTg4NzFlMTJmMDE1NmYzNWU2Y2U3MDMyZWZlM2JhZGUxYzgwN2Y5ZWVkYzcyMGZmZjdhMjdhMmY0NjkwZjkwNGJlOWM5OWI1NGE2NTUwOWVhYjYwZTk3YzQyODM1OTZlZWVmYTJiMjUxN2U5NWRlNzYyMDM4MmUzZjc4MGVmYTFkYmY1ZDM5MDgzNzNhZGZlNzg0YTRmYWYyOTg2ODFlMTcxYmFkZTRiMyI6IiI6NjQ6IjMyNWQwOGM1Yjk2MDY4YzEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCw2NCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImI2YmE1YzExZGFlZDdmODY4ZGE5YmZkNzc1NGQ1NTVhMTQ3YTFmZmQ5OGM5NDBjMWNkNWQxMzY2ODBlMDVjMTAiOiIiOiJiMGM5MmI3OWQ3ODU0NzQ5NmQ3NzA2NzhlMWNlMTU1MiI6IjViMWFjOGZmNjg3ZjZmZDI0MjlkYzkwYTg5MTNmNTgyNmQxNDNhMTZhMzcyY2NhNzg3ODQ1Y2VhODZkOWI0Nzc4NzA4YmMwYWE1MzhmOThlMTAzMTg1MGY3YzFkOTdmYjY0ZmUyOWFkY2U2ZTFkNTFjYTdmNTIwM2ZjMDM1OGZlMGJjNTQzNDdlNzc3ZGRkZmUwNGUzZDdhNjZhMWQxZTJiZGI4Yjg5MjllMjEwMGRhZjA3Mzg0NWRiNWRjMGIyNDM4MTk3NTRjNGMwOGY0ZmMzNjMxZDFjYmQ3OWFjNzYwNDc0NmQ2NzdmZjAzNTkzMGZjZDZiZDY1MmU3ODY0ZGIiOiIiOjY0OiJiMTgxOWI2ZjJkNzg4NjE2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwwLDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1ZmNhZTE3NTkyMDllNzg0ZGFlNWE4Mjc4YjI2N2M0MTRhMDNjZTdjODAzZGYxZGI3ODE1YjI5MTBkMTBjZTE5IjoiIjoiMjRjNWMzNDliM2VmZmViZmQwNzZjODhhNTkxYjgzMDEiOiJjYTI3NzhlMzlmZmZjZTdmYmU4ZjkxMmU2OWQ1NTkzMTg0OGRkNWFiMGQxYmQzMmU3Yjk0YWY0NTMyNTFhNDdmNTQwOGViYWNkN2I1MGRkZDExMDNmYWIxYzcyYWNjMGEwMmY0MDRjNTY2MWQ4NDUwNzQ2ZDc4MWUyYzA4NjFiNjk3NGFkZTllZTI1MTVkYTg4YjQ3MGYxNmQ1ZjA2MDA3ZjM1Y2U5N2NmYzE3ZmQwMTVlNDM4YWYzOWNhNjEyN2RiMjQwYmFiZTljNDJlZDU3MTc3MTVmMTRlNzJmMGVmNmZmNGNlNTEyZGU5NWExNzllNjBkNjM5M2U3M2YyMTZhIjoiIjozMjoiOGU1OWYzMGIiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDAsMTAyNCwzMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjhkNzFhNzBmZDU4MTI1YjBkYThkZGRmOGQyM2RkYmUwYmM0NDc0Mzc1M2JkZjI1OTQ0OGQ1OGFhZTU0Nzc1YTYiOiIiOiJkMTViMDI1NzJkZWM5ODM5OGJhOWU2OGUxYTQ2MzczOCI6IjgxMzEzYmUxZWRhOWYyN2UwMWIzMDg3N2NhOTBlODI1ZjU1ZWY2MGIxNTU0OGM0NWM3ODZjNDRiMDI0ZTcxOThmMzMzYmU3ZGRkMmMzZjU5M2E5Yjc3YjY4ZTZhN2FjNGNmYzAxNWFlZWM2NmY0ODIzZDliZTcxNTJmMDJhNTMzZjM3NTU1NDMwOWE0ZGIwZmVhOGU3NjI1NTE0NDQ1OGU0ODhmZDE5MTA2ZDlhOTYxNGU4MjhhZTMwNmZlODJhZjg5ZTc5ODEzNjliMjI1OWM0OWJhZTc3ZjhlYzJiMWYxNjllZjA0NDlhZDA4M2QxMTkwNzIzNGI3MmVkMmU0NjQiOiIiOjMyOiI5OWRmMWI4ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMCwxMDI0LDMyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjUyMzk4YzdjNzVlMWIxNDZjYzk5OThlYjIwMzE1OTkyNWNmNmZjMGIxYzk5M2JhNDY1MjhlMmY4ZTgwODdmMCI6IiI6ImFmYzlhNjBhYjg0NDhiNzdmYjA1ZTg0MTBkMGEyNmU4IjoiNzcwYjM3ODJmMGUzYTE5ZDdkNmJiOThmYTNlYjBiOTE2OTI4YTI5NzA3MDFjMGY0YTM3MmEwZWNkNjM0OTk0NDRhZTAyZmQyNjlkZGI3ZDkyZTExYTllMTFkMGUwYjhiYzYwMDk2YTRiZTc5YTFlMDYzMTc0YjcxMGM1ZDczOWQ4ZDA1YWI1YzhiYTExOWZmNDA4NDNjZjhjNWRjNGUxYmQ2ZmNhZDgzODlkZTNiNjA2Mjg0YzkwMjQyMjEwOGQ4NWViMzU4OTUyNDc3NjY0MWIxNzU5NDZjOWFkZTE0NjVlMGQxMDY0YzVhZTA3M2JlOTBlMzI2MTg3OGE5YWY5OCI6IiI6MzI6IjMyZDZiNzU2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjc5Mzg2OTUxM2FjODg2ZWQ2NmU1ODk3YmNmYTI2Mzg3N2Q4NDY1ZmM3NjJiMWVkOTI5YmEzZDA4NjE1ZmRkNSI6ImNkYTQ1ZTI5ZjQ4N2YyMWI4MjBlMWFmMmM4ZTZkMzRhOGJkZjNmNzJkNTY0YTQ2MjVhNmUwNmY5YmFlMWMyZWFjM2JiZDVjNTk1OGZkNzVjZjM4OWExYTMxMzkxMjExNzQ1MDI5ZGNkNGNiMjU3NWY0MGFiMDQ3MTBhOTA5Yjg4YzJkNDMwY2RlZTI3OWY1NGNmN2MwZmY2NjM4ZDFlMGU2MzFmNTI2ZWUxOThjZmQ2ZTVjZGY3M2QxYTExYjY5ZGUwMWQ2NDBmMzg1ZmQ4Mjk2MTZjZDJjMGU3OGYwOWI1ZjY0MDEyZTQyZGVlOWViMDI0NWI3MmFiYTE0MDRlMGMiOiJhNDNkZTE1ZGFlMjVjNjA2ZGExZTdhNDE1MmYwZGY3MSI6IiI6IjM4NTgzNGM4NTM3NzJhZjcwNjc1YjZiZTJkNTA4N2RmODRmODhiNmEzMDNlYTU5NGExNzBlNmRkMDM5OGFlMjcwZmNlYzYxNjYxY2EzNzNmNDY1M2Q4ZGNjOWU3MTc2NzU2OGMwZmIwMzAyM2IxNjNiZGM5YWU4YTA4ZWE4NThjYmIwM2I4MTgyYjQ2NzQxNDdjYjM1ZmZkYTE0YTJmNTBlZDllYjQ4ZDUzNTFmMDBlYjJmYTQzM2ZkZmVkNmY5NDgzM2JjZjY1NmE3ZTM1MGViOTc4YTBhYWY3YTkxNjc0MTQ1ZjI4ZjY0NjkzMTk3YTExNmIyMTMyOGUyNzNkY2EiOjEyODoiMTU5ZmZkYjA1NjE1OTQxZTExZjBkYjQ2YWM4ZjIzZGUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5Zjc3YzE0MWIyMzQ5MDdiMzhmYjQ1ZjFiMzYwMmYzYzI5ZGUxZWQ4MzliYjdiYTUxZjYxOTJhYThiYWFhMjg3IjoiOTZkY2I3NGE3OGU5OTY3NmE3MTY3M2UzYzlmOTRjMzRiMzRkYWQyNzQ4YTZlNDJjYzcwZWE1MGU0MWVmOGI4NmI1OTkyMjk1ZDJjYmM4ZDYyMWZlZmNlMDllODk0OGRlN2U2OTZiOTc4ODM3N2Q1OTg3OTZhZmQwMDJhODJiNjI4ZDk4OTBkYjc4MzU5ZTFlZGMwNzVjYmMwZDNmMTFkNTQ0YmZkZjVjOGE4MzgzOTBjYjg1NjczNTk0MmRmZjI2MDE4OWMwMGFjY2ZhYmY3MjBlNWZlZjFkOWI3MTMxYTZiMmI3NjlmNjczNzQ2MDJkMWE3ZWQ5Yjg5OWIyYzM5OCI6IjFiNDkwMDU3ODgxNDg2NjVjZWYyMGQ4ZGNkZTQxODg5IjoiIjoiYjRjYTU5Y2FhYTk0NzQ5MzE3Nzg5YjkyMjU3ZjJlZjFkZDNkOWIxZjRlZTk1NDA5MjdhNmFlN2JmNWJiMGIzNDhmY2YyNWJhOGRkZGE3OWE4OWQzMTc0YWMxNzEzNDIxMjkxOTEwYzg5MjZjZmJiNGVjMWU1OWJlN2RkNTBlODE2ZmY1ODZmMTY1YzYwNTM3MWVlNjA3N2JhNGFjMGNlMTA0OTlmOWEyYTQ0ODY2Y2U2MzE5ZmNlMjI2NTIyMjYxNjRjYzBhODEzYzMxNDdjNDQ2MWRkMDQxMGUzNzAxZDQ2NDdkNWEwMDMwOTAwODJlMzY3Y2I5MjQ5Y2YxYmU0NyI6MTI4OiI4MDQ4YWUwYzM1YTY1NmZjYWEyZjRjMWI2YmUyNTBlMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI0MTlmZDlkYmU1ODY1NTEyMmFjMTAyMjk1NmEwMjM0NDZiN2Y0NzU2MTYzNzY5ZmMxYjk5ZWFmOGZiYTE0NzQiOiI5M2JjMzNkYzY0N2M3MzIxMTUyYjEyMzAzZjM4OTM3YmQxOTFhYjNjZTNiM2E0M2EyOWY2ODUzYjMzZTQxNTY2N2Q5NzE5MmZjYWIyZDFiYWEwMTcwNDJiMzAxZDAzYmFlMmY2NTc1MDVjYzU4ZTNhYTRiZDg0OWQxY2U4NWVkZTBlMTkyYTM3M2EzODk0YzQxYzU0ZWRiYWUyOWEyMDllMTZjODdjODE0NDVkNDM5Njg1OTUyOTdiNTBiNTU2NTlmOGI5MmQ3MjgyYTJiM2NhODVlNGI1ZDRhYzRmZjUwNjI2MzUxMDNmMmM3ODA2ZmNjNzM3OGQ1YzIwMTNiZTcyIjoiOTRlZjEzZGJmZTlmMzYyZGEzNTIwOWY2ZDYyYjM4YTQiOiIiOiIzZGIyM2MxNjFjZjM1MmJhMjY3ZGFiNmE1NWY2MTFlYjVmZmY3OGE3NTI4ODc3OWExNjdjZDBlNGRiNmU3NWQyMWYxMWY0ZmYyOTI4YWJjYjFiNDZkODJjMmEwYjFmNjQ3YzYwZGE2MWY5YTcyNTY1ZjYyOWIwNmE3YjNmZTk2ZTQxNDFhNjg4NjQzNjg1OWY2MTA3MjRiYmU0M2ZiOTlmYWM5Yjc4YjFlMDEzOGUyZDU3Y2U1ZmNmYWMxNTk5YmRiYTU3MDFjYjQyNDUzNWZhZDlhYzQ4MmFiMzgxZWFkY2EwNzRlNzM3NjEwMWI0YjQzNmY5YzQzZWQ3NjBhMGE2IjoxMjg6ImVjZDRhNzM3MDA5NmRjNzgxYzNlYjNmN2U1OTg1ZWYxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMDhlMTFhOGI0YjI0ZTYzMDYwYzUwMDI3MTM3MjViYjViNGE0MTJmMWQ3NmVhYzEzOTg5NzM4Y2U5NGUxOTY0MiI6ImQ1NTk4ZjRlMzcyNzRmM2I2MTdhYTRmOWNmNmI4NTQ3YjRlYjFlMGVhYzc5ZjZlZWRkNmNkNTM2NGY4ODkxZjY2YjhkMGNiMDlmNTQ3NzdkNDYxYmJmOTJkNmZkNzRiM2ZhYzQxMmI3N2YyYzQ4ZTEwMjRjZjA5YjgzYzFlNzFiYjg2ZjBhMjBmODJkMjk2ODgzZmZlZTYyYTRhMTkyYjE4NGJjNmQ3YmEwNDQ4YzE1MTkzMTBjODNiMThjMDBlNzExNTMxMzdhZmFkMTRmMDk2YjQzZDQ1NGYyMDViYTZiNmMyZWMxNjJhYTk5MmNlYmY1MDczNWRkOWJiMzdjN2MiOiJjNmYxZTZhMzljYWJkYTEwODkwNDhiNTM2ZTM5Y2Y2NyI6IiI6IjFmZGFmMDE1NjQ1NmI2YjJhNjhkNjYwOTFiZjIyNjA3OTI3NDhhY2YzZTdiYmI3OTA2YWY4ZTBkZjNiNTY5YTdjMDNlZTNhNDhiZGZkZmY3Y2NkNTI0MzNkMGJiZThjNWZlMzBkOTM2MzNiYjlkNTkxZGZhZDdkODFiZjhlZmQ0ZDRhM2M1YzBiZjJhYzk4MzJmMGE4Njg3ZjE2YmU2NDBmY2Y5YjE5MTY5YzI1MWY0NmI5NzE2N2Q5NTExNWFjZGVlM2Q0NDQzZGY0MTYyNzVmNTU5N2E1MmMxN2E0YjhjNGI3MjNkNGIzNWE3ZmQwYjM4MGZkZWJkNDRkZjhiZDUiOjEyMDoiY2I5ZjRkNDYxMGM2N2FjZmU2MTJhZjU1MDhiYjhjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGEyZGFlMDEwN2MyODRlYzJhYWY2ZTczMDY5NTlkZjFlOTJkMzkzMmI4ODk1NGYxMTlhYjY3N2M2YjlkY2RiNSI6IjI3NzY3NTA0NGNhZjE3MTMxMDlkNGQzYWJmNTBjNmZiNjdkYzY3ZjdmYTU4NGZiMWE0MWM4MzNmZWVhZDAzMTc3Y2Y0YjQyZWRhYzEzOTgwN2VkZTE2ZWIxZDliZWQyN2RiNzQxZjk1NDJkNDM3NzgxNDA1NjA4ZGUxODQxOGM5ZjcyNjlhYjNmZDg4ZjZhOTIyYTMxZWFiNWEzYjhiMmFhNzVlZTQzMTVmY2VhODBjNDk1NGVhNjYxM2IxMzYwYjFjN2M2YjZkYTgxNWUzZjZlNTBmNzJiN2U2OWMzYjZjYjNkMTU0ODU1ZTNmODNjYmQxOTQ3ZWI1NDAxODE1NWEiOiIyMDA1Zjc5ZDU1YjEyZTZkZmJhYjdmZWRlY2M1MGUyZCI6IiI6ImMyYWFhYjUyNGQxNzM4YjUyNDRhZjY0MmJiZDE2YjMyYmE5NTRlNjlhZTUxYWNjODA0YTZiMGY4OWY2Y2I3N2JhMmRiMmIwZTEwOWNkYTYwMzY3ODZmOWNlYzU1ODdiMDFlMzA2ZWU4YjNkNTg4NzQ4YzYxYWQ3ZmNlMTI2NjE2NTcyOWQwMTUzZWUxODk3NDZiMTA3Y2UxNWNlZDY2NzI3OWE0ODQyOTQ3MjVlMTIwZGMxODAzZDJjNzUxNzg0NDM2YWI4ZmYxZDVhNTM3NjI4ZWUzNTc0MmQxOTE3ZGM1MWY4Y2I0NmMyZDZiOTgzYmRlYzUwMmU5OWI4NWU1YjUiOjEyMDoiNTJiNGQ3ZjJjYzQ0ZjA3MjVlZTkwMzU1MWY2ODFkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTIwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNjM3ODA3YjNlNDcyZTIyODdiMDlkNWEzZWU2MmY3OTFhNDE2NDE5YmEzNWUxMWM0OWIyNGRiYWRjMjA5ZjBiYSI6ImU5MWEwYTczMjAzMjlkYWJiMGQwZmQ3ZjA5OWE0ZDMxMzcyNGFlZWViY2ZmZTZmY2VhNWIwMGFmMjdkMjU4Y2Y5Nzc0ODQ1ZDI5YWFmNWRhZDYzNGM2ZjA4N2MzMzExYjFjOTI3NzVmZGE4ZGY4ODIwYzkxMTg2ZGEzMGRjNzk3NDdiZTZlYzYyMzBmMmMyNjEwNjMxNDNmNGZjODlkOTRjN2VmYzE0NWU2OGJmZGJkNThmYjE0ZTg1NjU3OGVkNTdlZTViM2NiYTJjYzY3ZGQ2NDk3ZjA1ZDE1NzBlZmE0OTZiNDZmNWJjYmY4MmZmOWM2YTQxNGY3NmZjZjNmNWMiOiI0NjkwOWQ4ZGJhNmM4MmI4NmM3YTJhY2EzYzllNzFlMCI6IiI6IjEzYjRhZDljNTEwNjNhN2Y2OTdmM2ZjNjgwMzAxNDRhZWUwYWVlZjBiNWE1MmM5ZDQ5MjBhNzE4NWIwNDUyMTU5Y2YxM2U2NGNhMjE2ZmYxNjYzN2QwOTQ2YTc1ZmI1ZGEyODNmY2QyNjNkZDdlZjJjOGYxNGNmNzU1Mzc3NDJkMWYwZTQ4ODQ2ZmNkYmYwM2JjMzQzMjAzZjdjMzFjZjYxYjM2Mzc0MDMzNDYyYTdiODEzZjRkYmU5Mzg2ZTU3ODc0NTkxZmRlNjA2ZmJjMTUwZDQ5MTZjMzM5ZjE5NTBiMDliMTkxMWIxYjkxMTljM2ZmNDA1M2UwNTkxMGZmYjIiOjEyMDoiNmE1YzgzZjgwNzQwMWQxYTlhM2EyNjg4Mjg5ZjYxIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzM2MTNkYzZlMDI5ZGYwZjNhYjljYTY2ZmE5NmNkZWFhODRjMTI2MWRkNTg2NzIzYjFjZTg3MzU0NTU2NWY3YSI6Ijc3NTg2MmIzOWMyYTUwOWFmZDM0NzBhNTY4OTFmYmI3OWJkYjdkYWNmZGI5YWM3MmJhNDczMGNiOTM2ZDM2NGUxYWVkM2M5MmMwMWEwMThjZmNkNzk1M2Y3NTEwMDM5MzRjMTViZGZkZjI4MjZlOTk0N2VhOGU1MjFmNTVmZDJhMDRjNzUxNTZlNDkxMGYzODkzMmM5NzMyZWIzZTYwNDIzZTg0OWQzNGM1NWUzZmQwMGI0OGQ4MzAyOGUzYjRmMzU2ODYwMTYxMjZmZjE2Yzk0MmVjODU5ZDNjM2FhMmVlNmQzMjJhOTJkYzlmYTliMDI0NzQyMzQxNmY1YTRiNDciOiI1OTQ4NGZiYzI3Y2RiZDkxN2JiNTVmODE1ZjlmYWFiNiI6IiI6IjA2OWY4MDgyNmRiZWUwM2U2YTM0MzdlN2M2ZDE2ZWI2MDIyYmQxNDgyN2I4ZTQ1YmQ0NDBkOWIxYThkZGFlMDk5OTkzODhiYTBiMWJlMGE2YmFmZGI5NmYyNmRhZDUyM2EzNTkyZmE2MTBkNTA5MWY2ODM4MGY0YzFjM2ZhOWVmN2EwNzk2YWIxODNlOGE4MmMyYmYxZjc2MzAwZjk4Y2U5ODNlYWI3YTkzZGRiMThmMWMxMDUzNGZkYjYxYWNlODNjYWUzN2UyMjU5MzBhYjg3MGE0NjI4NWU3MzM3ODhlOTA3MjU1Y2EzOTE5NDVkNDA5ZDJlNTNkZDhhMjgzOTAiOjExMjoiOWYzMWY4Zjg0NTllYjAzZGMzNjU0Y2FiYTVjMiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDExMikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6Ijc1ZDgxMzJmNzBlZjNmMmQ4OTQ2ZDI5NmM4MzAxNDY4M2ViMmE0YTU4YjU1NWMwZjQ4ZTRiZmE1Nzc0ZDY2NzIiOiJhNWJlODhmZDQzZGM3NjE4MzhmM2E5YzdkNjI5MjNjMzg0MTRmYTYxYjM2NzgzMTNjYmM4ZmE5YzJlNWVmZmI2Y2FkN2Q1YmU1ZjM5YTcxYTI4ZmYzMjdiNjhhNjlmN2U2YTZiY2I5MGVjY2FjYWYzYTg2NTlhZWI5MDVkZDNlMzhlZmU1N2YyYmQwZDE5ZGFhY2FlMjM4YmFhMDFhNzA1MTA4NGRhNjU5OGZjNWEzNzgzYTE4ZGVjZWZjOGVmYzhkNDZjN2IxODg3Zjg3ZDZkNzBjOTA5ZGY0OTM0MGJjYzY4MDgzMmZhYWMzZGQyM2NhYjViY2Q4MDU1M2RkNDg1IjoiNWZmNDFmM2U3NWMyNWNlZGRhMWIwOGE0MWI4OWM0YjQiOiIiOiI5NTkzOTZiODY5MTMzMzdmMmIxZmIxOTc2N2I3ODdjMThmMDA2NjFjNWQ2MDFiYzY1ZTg4NGUxNWFjODA0MzA4MTQ1OWU4ODk0NTNlOTA2ZWUyNjdjYjVkMDRmYmFmMjUwMTQ0YTU2YzgyMGVjYTM0NDY5OTY3YzczZGFmNTA3OTYxODRlY2Y3NGYzYzA1NGJmYTYzYmRkMGMzMjQyNWE4ZTEwNTQ2YWMzNDJiYjhlMzhhMTg2ZTQyYTQwM2NiODAxMTBhZWZkNWYyZDBiY2RkMzUzZGFhNDQzMGI4ZTdlYzIxMzQ5MjVjNDU0NzQ1ZTJmNzA4Y2QwYjkwZDlkNjcyIjoxMTI6ImNhMDg4OWEwZWIxMjk5NTA3OWNmOWJhNzcwMTkiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI4ZDQ0MzQ0ZDJmZjlhMDJiMWM3NTc4NWJjODRmMTZlNGQyMzYxNGJmNDNiMmI5YTg3Nzk4YjQxOGU5MDVjNTMyIjoiZTU2ODljZWY5ZjgyNThhNzQ4YTYxNTA3MGZjYmY0MGVkMGIyNGMwNzdlMmY5YTM2MmNiNTM2NzM3ZmZiYzUzODNiY2FmZWQyNzhkNGM1ZTBmM2M4M2ZkZDVjZGU3OTQ4M2MyYzE3OGY2ZmVmMDVhYjUwZjJiOGRiNjgwMDI3YTE3NWJjNmQ3MDJkMjQ5ZWZjZDZjYmM0MjViNzM2ZjE5MDUzMDdjOTMwM2E0YmQ4YWNhNjIwYjU3ZTNiYjRiNjhmMmE1MTUyNTliMDZjZjUzNjViNjc1ZWRmZjM0NTdlMmU5MTVkN2RhMWUwODAyZjczMDBiM2Q1NmM0NjQ0ZjRhZCI6IjI1NmE5ODNjZDZkNmViNGU4MGI1YzFkMWNkMmE5ZjIxIjoiIjoiMTNlZWFkYmVjYzRjOTk5MWUyYWEwYjFjYTgxOTU3MmVmMjg1MTc1MjgzMjBkYjk3MDczOWExNjk5NGY4MmNkOGI1YmI1M2Q4ODlmMjk4ZjY1YzYzZGNjMDcwODlkYmY3ZTlkMDA2MTJkMmNjODIyMGI1NjMwY2EwMjYyYTY5ODgzNmQ5MDYyNTY4OTZlZWE0NDZmNmRlNDUwNmU1NThiNGYyMDk1MDUyOGM4YzM5N2I2YjViMDQ4OTAyMDRiNzdhMTYzZTQ2YzgwYzk2YjNlMjY4ZmQyNzU0ZTAzODBlNzMzMDc4MmQ2MDZjNzcxZDYwODViMzQyMDBhODAzMzVmMCI6MTEyOiJiMzNhYjFlNDAyOTk5OGUyNTY2NTgzZGQ1NTBkIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzk5OWE2YTM5NDk0M2JlM2Q2ZTU3MzJhZjVmYWYyNmNhZjQ4M2EzZmQ0MmMxM2I3ZjRmMDIxMzJlOTNhOTkwZCI6Ijg5MDdlODgzMjU1MzI2NGQ3ZTkyYWZhMTU5NTg0MmFjNjYxZGRmZWMzZjQyOTQ1NjdmYWEwYWY2MWIzZDBmZGY3NmE5MjJhMmYzYWZmYjM2YjNiM2I5N2YxOGQ1MTcyYWVjMGI4ZjZmMDEyMzliYjc1MGMwZmRkNWRhMWUxMjQ0NDczY2RmYWRlODM3OTcwMzdjYTQ2ZDgzMTIzZTYxMDVjNWM1NDA3MTk3MWYxOTBkYTBjNTk4MjFiMGJmODcyNDI1MDJiZDE5ZDE5YzdmNDYzMTQ1YmFiMGU2ODdhMThmZmIyMjE2YzRhMmFkMmNhZjk0ODg4MDFjMzNjNzhjMDMiOiI3NmUyYTUxNDFkMDk0YjNhNzc3NjViYTMyOGYzMzU3NiI6IiI6Ijk5NTE4OWEzOTY0ODZiNDUxZGIwMTY3Y2Y2OTkwNTU3Mjg3MDc0ZGVmNDZlZWY4NzJlNmNmZTFhMjk3ZTI1NmJkZmYyYjcxNjY4ZmYwMTg0ZWVkZjAwZmYxYTNlYzkxMzU4ODc0NzE4ZjBhZjg4YWNmMmJkYjE5MWU5NzMzMmRjNTQ0ZDk0MDQxMjM2Mzg0MGQ0YzAzYzdiMjIzMTg1MjM5M2M2MmQ2MjUwOTMwMTFlZjMxNGU0Zjc1NWIxZDBlZTM3NjkwYjRkZmI1NTE5NGExNDY1NzE0Y2MzY2JjZGY5M2FmMzllNjY2YmUwNDA3NTA4Yjg3NjRmN2VlOTVkM2MiOjEwNDoiODdjOGY2MWY0NTlmZDRhMDlkOWVlOGIzMzEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCwxMDQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI0MzU5YTYyZDU0YzQzNzcwYzNhMGQ1MWRhMjVjYzMyZmQ5ODVkOWI0MWMyODI4ODcyOTlkMmUzNDhhYTI1YTM2IjoiZjAyMGM5Y2FmYmEzOTkwMDliZDkyMGMzZmZjMTY1ZDRkYjQ3YTllZTE1Y2E4YzFmNTFjNjVlMzA2Y2NjY2QzZjFkNjk0MDcxYTNjNzY1YjUyNTVlYmE2ZWY2YTI4MGY2MDk1ZjhjMTk1ZWJkZmJlZTY5NjhiNTczNjZlNjJlMTZkMDViMTc2ODgyNWFiN2ZlNjYzMDA5NDEyNzBhYTEyMWI0ZmMwMmFiOTcwY2E2ZTMyMTcwY2RiY2NiNDZmYzU0ODYyMGZhMTc3NzA0OTM0M2IxNjAwYmZiMWJkZWNlYzY2ODJmMGFhNzI0NGEwODUyYWRiYzdhYWNlZGZiYTQ0NiI6IjVmZWZhODVjOTU4NDE3YjZiYzhhNjFiNTQ5NmZlYTkzIjoiIjoiM2I4ZjgyOWFhMWNjMTUzMmE0MzRiZmJiZDI1ZjQyNDgwMzExNjU3MjE1OTQ2YjkyMTY4NDY3MDRmZDVkYTVlODg2Y2E5ZDEzMGRmNDY2YzNiNThmNTI1OTEwMmVhNmI5YWQ3NTZlOWY0ODRhMzhkZDBlZDI4OWZlYTA4M2FiOTlmZWZiYzI3NDcxMDAwNzE3NDRmMTBlMzYyMzUxZDRmZmFjNmM3YzFmNWE0OWVmM2M3OGUyZGM2NjdmNmIzYmZkMGZlYzQ1NGM0ZTMxMzk0NDNkYTcxZTUxNDU0MGQ3YTIyOGRiMTkzYTRjMzVkNjM5ZWMxM2MxMTk4ZWU3ZjgxZSI6MTA0OiI1OTFkYjg2MWI5MDYwODY5ZWRiMjI4YTMyNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDEwNCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjBkNzk4YTM1N2RlNWE2ODZkMDZjMzI5ZTQ1MWQ3Mzg0YmZiZDQ2MjA2M2ZiOGVhN2Q3N2ExM2RmYTFmMmFhYzIiOiJkOTIwNzg1YmQ3ZDdiMWEyYzljMjAxMzkzODBhNmFjNWYyN2ExMWI2MTRhZTExMGRhMTQyMDMxNDZjMjYxNWQ4MWU5NzY0OWU5NWVkYjBlZGE3MWEwZmExNTg5MjQ0ZWQ0MmZkOTQ0OTk2MmE5Mjk0MmUzODAwMWFjNjRiMjEyYzdlMDZjMTEzMTI5NzEyYTAxNTU2NTc3YWUwMjMyNWEyNmViOTI1ODFjMGE2OTBhODk0MjI1ZTgzZmYxZTM2Nzc2ZjIyYjYwMDUwOGQ2ZDk2YTBkMWM1NTMxNmI1MThkZjhkMDk3NjlkZjVlODM0MGNiZWFiYWEwYmY3NzUyODcwIjoiNTBhMDAzYzBjYjUwYWU4YTMxODNjZDY0MGVhNGM2ZjYiOiIiOiI5YWY2YTUzNDFjZGU0YjdlMWI4ODM0NmVjNDgxMDI0YjQwYWQ5NWE1MTUzM2NkZDhlMDllNDgwOWEyMDY4NGYxOGVhZjI0M2UxZGY1NmYwMmFjZTk2NjcyNjRjYzFjNmFmNmIwOTE0ZjE1NGIzMzIyMzRmNjQ2OGNjNDcxZWNiMjA3OGE5ZjgxYzE3ZjRhZGU4M2QzMjZiNjcwNzk1NDU4ZDExMGU0YzRiNGNkN2ZlN2Y5ZjVmNGQ0ZmIyM2EwMzg5NjllNGZmNGY3NDgzOWIxZWRjMjcwZmM4MWZjZGM4YTBiMTViOWMyZjA1NjE1NjdjNDcxYjc4M2I0MzIyZWJmIjoxMDQ6IjZjMmYwMTI2NGY5ZGJmMjk5NjIxMjJkYWZmIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyOWIwMWI2ZDE1ZjZlNjhmYzJlNzA3OTQyOWRkZTUzNjM4ODhhNjQxMDE5MWQ2MDM5NDFiZWQyNzJkYWVmN2VkIjoiMTIzYjZkYTMwNjk3OGY3NDVkMWRkODZkN2RmMzJkOTQyMTUyM2E3ZjMyOWRkMjlhZDk4ZDJjMzA5MTQ1ODQ0MDEwMjk1ZWY0NDNhMThkMzdmZmUwOTMwODA2ODJmYjk2YmE5YzJjOTIxMDVkMzVkNzc4OTdiNTg5ZTJhYmM3MjY5YWJhODc1MmMyYTQ4Yzg0M2JlYmFkMmMwZmEyODEwMTViYTg1ZjVmNzA5ZjZhZWU5YjFkNDkyMzZkNTY5NWY3ZjdkMDE1NTRiMTkzYzg5YWRjZDFhOTE3NDkxMzg5NTJjYjNmMGVjOGI1ZjA0NjMyOGIzMTEzYWFhMDcxNWVmNCI6ImNiNGFjODM3M2JjYmYxYjE0Y2YyYTZhNmExNmE0MjJhIjoiIjoiY2FmNzFlMDkzOTVkNTk2ZDVhN2IwOTFjOWU4N2JhNmQ1MjJlOTc0NDUxZTQxZjMzZjNlN2RlZDU1NGYyNGRhYTlkYTcxOWU4Nzc5MzQyNGVjYTlhM2ViMzk3Mjk4MzM1NDA0MTA5MWJhNGIxNmM1YzhjMTQ5MTNlMWY2Y2JkYTA5Nzc5MTg4ZTliNTUxMjkxN2EwYWRmNGI0MzQ0ZjExOTczNmJhNjMyODg5NzcyNmEzMTc5ODljZGRjNjZmMTZiYWI2NDcwNzU2NGJiMDA2NGZlNmFiN2IyYjVjY2UxNDNlOTRkNGI2ZDczOWY1OGM0N2I2ZDQ4NTA2OTdmODEwMSI6OTY6ImY2MzVmZjNkOGJmYmZiNDk2OTRlMDVlYyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDk2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZjk2ZDhjZGNjMjE4ODRlMDUwZjc2MmMwNDk5MzBkNzgzNjBiNTZjZWY1Yjk5YWUyMzJjOWE4YzZlOGZhODlmNyI6IjljZjA1ZTUwNjU1MzFkMjUzOWQ5MmFlNzZhNDNkYTFmYTM2MTRmZmE0YjFjNzNkZGMyMzU4ZjhkNzEzNDVjMDEyNjAwNjAyMzllZGY2MjllZmMzNjUwZTBkMTMxNzRhZjQyOTRiNmRhMGYzOWNjN2ZiZWNmYTMyNGFmZmY4OWRkN2QyMDM0MTZiZDE0NGM1ZTAzZGY2MGEyODdmZDRhOGQ1NGVmOWI0YjQ0YjNkNmRlMWQ5ZGUwNzQxOGI4YTM0ZWM1YzI4Y2VjM2M1YjJmYjg2MTU4MzE3OGE2OGVhMGFmODlmMmRmYmZiZDg2ZjdjZjFlNTcyZTFjOGQ0YjA2NzUiOiI1YTdlYjk2NGI2YmM5ZTc1NDUwYjcyMWI0ZDFmOGY5MiI6IiI6IjU2NmFiYWEyM2I4ZDQ2NGQ2ZjEwNzY5OTQ1Mzc0MGU5ZTE4OTI1NDE0NWM1MTMyZmU0Njk4OWE2NjU0ZGUyOTczOTg5MTNkYWFjYjQwODNiMjlmN2IzMTgzMjA3OTYxNmU5YTQzYzljMjg3OGRmMWRmNDUxZTQ5ZjFlNjI5YzhiOWRlMmZiMGU0YWU5ZGY0OGUzZTg4ODBmM2YxZmY1YWNlODg0MmQyNjk1ZTcwMmRkMWI3YmZhN2MyNWIwNTM5YjhjODBkMzFhYzkxODU2Nzk2YmVjZWQwODJjMjEzZThiZTU2ZWZkNjQ2ZGFlOTMyZjViZjUwM2FmNDZmNDkxZDgiOjk2OiJjMDQ5Y2NlMjljNDAxZDNkMTk4NzczYjYiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw5NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjI1MzIzNGMzZGM5Y2IzZDUwYTgwNTk4YzVjZGUwZTM3YjZiMTNiZjgzNGYzNTk1YTk0NThkZWU2OThhNmQxOWIiOiI2ODZhZDI3NDBiZGFkNTA3ZWJlOTdhYTViZGJlZjI1YjhiMDMwYzRjZGNhY2NiMGQzYjY3NWNhOTEyNzlkYjNlYTc1YWEyMjJjMGFlOThmODZjMjRiMTAwMzhjYmI0ZmU5Zjg5N2UxMTQ1YjJmNThjZDNlOTEyMGY5YTU2MjBmMzhhYTFlMWY2MzkwNmY1NTdmZjRhNGMzMjIzZjViYjEzZGNhMzRmOGExYzY0MTllMjRlYTU3ZDExNGM2MmZlYzZmYjllZWU1OGExNmI5ZTZhNmJkOTMwYWE2ZmVkY2ZjNTkxMzExMjUwZTcxNjdkNDNjY2E1OTE2ZDViZWVhZDI3IjoiOWQxNTY0MTRhY2I2M2QxMWNiMzQ4NzBiOTM3YzgzN2QiOiIiOiI5NmFiZDU2ZDJmOGFlZmU2YzY4N2YwMzVkZjQ2YzNmOTUyYTk5MzNiOGE1MTY5OGU0N2Q5NzNiN2Q0N2M2NWNhM2JhMjQ3NGNiNDE5Yzg0YTRjM2NlZmI0OWU3OGNlZTE0NDNhOGZiYmRhYWVjZjczZTkwNTllZjM0YWM1YTBkZjNmYzE1MmVjZGUyMjg2ZGE4ODQwYWQ0NjE3ZmQ2ZWJjMWUxMjYzMTQyMDRiZGMwYTE3Yjk1ODQzMGViOWY3Mjc0OThmZjFkYjE3YWFiYmRhZjQzYWNjYTA5NDUzNDJkMmJhOTM0NmRhNTM3M2IyMzcyYjMwODE2MDVlODk1Yzk5Ijo5NjoiM2Q5OThlNWJlOWRmNDMzZGEwMDFhNjg2IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMDU0ZDQ4ZDUyNjkzZDI3OTdjODBkM2YxMDUwOWQxYzgwOGYzNmE0ZDY1ZThmZDk2OGU1ZDU2MjM5Zjg1NmJjIjoiYTcwOGU5ZDJkMjdlZDQyMjhlNWIyM2QzNTg1NjFhNzdkNjg0ZDg1NWRiOTgyN2JlMmJjMTAyZjIyNzhmMTk2MWQzZjA1NmZiNzZmNzYyMDRiMmM5NmI5MTZlYjVlNDA3Zjk4ZTU4ZWRmZWQwNmRlMjM4ODUyMTgzMmQ5NzIxMWQ4NTFkM2UyOTY1OGRmNzM4ZTNhMTU1OTNiOWRiMDE2ZDllNDZmZTlkZjk4Y2U5NzJkNTlmNzA1OGQ0ODQ4ODZmZmFlYzdiOWZkOTczYzU1NjQ0ODMxMjQxYzFjZTg1YmI0NzhlODNjY2VmZDI2Yjk3MThiZmU5MTBhYzMxMWVjYyI6Ijg3NjExYjkzNjg3M2I2M2FiZWFlYTk5MGQ2NjM3YTIyIjoiIjoiOTQ0NzNlODQ2NTliYzE4ZWRkY2ViZTMxMTJmNTU0MjZmNDhjYTRkNjcwMjkxZmRlZGQ0MmNjMTVhNzQxNWFhNjc5NWZiNzViMzk0MzQ4ODRlYjI2NjY3N2UxZmE3ZjUzMGM2ZjNhYWE3MzNjMGQ5YzA2MjkxYmQ3ZGZmNGM0ZTU4NTdiMmVlOWU5ZjFmNjFhODU1NzFhZDMyZGM5YTMyNTkwMTdhYmU5ZWI1MTExZTU2ZGYyOTEzNTM1NjY5ZjNiMmQ3MjJiZDM1ZmNkYmQ2NTQxOTE4ODg1ZDk2NzdjY2NhYTkwMmI5ZDM1OTljZDRmMGRmMWYzNWY0ZDExYjhjZiI6NjQ6IjliZDdjZmUxMDIzNDQ4YWMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMCw2NCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImE5NWRjNTEyN2I5Y2IxYzgyZDU1OGQ1YjI0YWUwNDllMjQ0NDdmZDY3NmE0OTM1MDA4OTk1MWFmZTAxZGM3OTciOiI0NWY4MWZhNDc4MGEyNTZjNDBhMGVmZWM5NTQ3MzEwNDA2OTA0ZDg5OTFiY2Y5NjRhYTM1ZWM5YWY0NTdlMmE2NDJjMTM0MzgyNzgzOWYxZjRiNDJmMmIyMjZkYTM1MTczMWY0MTZhNGI0MTUxZjA3OTI3YzI3OGIzNzE0MDRmMDI3YmIyMDU4ZTE3NjViMzY3ZjU0MzNhNDNmYTQxNTM4ODMzNTEwNDFkYjNmMDY2ZWYyODRhM2VhYmQ1ODRkMWQwYjFkNTk0YjRjZTdiNWJjYTE3MDhmYmM2NjFkOTVhOWFjMGQ3N2RjMjk1NDdmMDIyZWVkYzU4MmZjNzE1OGMzIjoiMGIxNzdkMDE5OTNlYzcyNmZmZjA4MmVjODhjNjRhMzEiOiIiOiIxNmM3N2I3ZjU0MWQyZGM0ZThkMzFkYTIzZTA0ZjE4ZjQyNTRhYTI4M2U4Y2VlNWI3NzZmM2Q5YTI3NTg0ZjQ1OWQwNzQ3OTU1ZWZmZjg5NDVmODA3MjA5ZGRhYTY0MjE4NDY2NDdkNDE5ODUzNGIyNDQ0OThmZTEzYTkwNzNkMzcyMTcxZDFiMmZjMzhhZjY2MjA0ZjNkZTA0MDAwYzA5M2ViZTY1OTE3M2I4ZDc4ZGNmYjhjYTkwMDNkMmNkNDRlZDE2OGU2YWFmNTVhMDZmMjllODNjZWIzMmI5OGJhZmI1OWYxMDk1OTlmODhiNWMwZjA1NTdiZDJiMjhmMDNmIjo2NDoiMTllYjVmODA4ZDY1OTg5ZCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwwLDY0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNTNkNjM5M2RkN2VjYzQwZjJkNTI0NjBlY2RiMDYwNzEzM2FkODQzZWY1M2YzODBjZDNhMjc1NWJmYTU2N2FiZSI6IjcyMTk5YzU0ZGQ1ZWZiMjhjMTA0ZTNiNzIxMDg1NTUwNmY2NTc3ZDE1YzRlY2NkYWE2YTYyMWE1NzJlMTVmNTg0NWQ2NDhjZjcxYjlmYWZlZjM0MTFmNmMxYTY2NGM3OTc0ZmU3MTEyNmE1Y2JhYjkwN2UyY2FhMzQyZDhkN2EwNWJjNjhhNzJjODI0ODk2ZWM0MGU1MjBlOTBiNzA0ZGVhNDQxZDIyYzU5MThmOTg4MDNhODgyOTMzODRmNjRmOTJmMTE2NTBjMmNmNGQzYjA2MmQzMGUxNGQxNDkxNjA3NDJmNTlhNDczZmFmOGZlMDBmNGJkYWI5MTI4YzMyODEiOiJkYjdlOTNkYTIxZjBjOTg0MGM1NGM1NmU5YzZjZWJhMyI6IiI6IjVlODNmNTU5ZmE1NDkyNmI3MzEzMzRmODE1NzgzOTE0NTMwYmJjYzQ3MmQ0YmJkNWU2NTkwOGZiMWM0MjE0NDJjYjRjNTczMjlmMmU0YmEzZDE0NmE2NDk5ZjM0ZDhmMWVjNmQ0M2UwY2Y5OGJkYmE5MjNmNDA0YjkxNDcwMGVkYjIzNWIwOGIwMzMwMDk3ZWE0MTYyZmQwYmFhMWI3MTc3ZWYwYjI5ZDVhNjY4OWJjNTZiOGY5NzVkNmI2MDY3YWRlNGI4YmFmMWQ0N2EyZWViNWIyZWQyOGViZWRlZDM4MWQ1NWQyODBjYjJmYjY1Y2U0ZDgyYjY5Y2NlMDU5NGQiOjY0OiI0ZTY1ZGRlODU3YTBmNWM3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJhYTRhNTNjNzc2NGEyNTRiMDZlMWQ4MDAzODEwMzAwYjcwZjU3MjkzMDZlZmZiYTlmYjYyMTBmOTc2NDhhNDk5IjoiMTlmM2E4YzI5ODQ3OGQ2ODY4YmYzYjMxNzg1ZWI2MmU4NDRjMzcyMDA2NzJlNmVmMWVjYzA1YzYxNmQ5ODFlMDJjMzMzZGJjM2Y4NmRiYjdhYjliYTQwZTllNTdlMTMzZTZkMWQ1OTVmY2M2ZDhlOTg4NmE4NDUxNzIxMjY2OWQ1ZDdjZTBmMTM4M2NiNTg2ODFiOTJkYzE4MGMwNmNhYTFhN2FjMWVjOTc0ZGNkN2YyYmNhN2FkMmFiMjc4OWM5YTNhNDg3ZDY0YzQ4NDMxOWJmZmE1NmQ4NTRhNmQ0MGM2MmIwMmQwYzc4OThmNjQxZjEwNmZmNTBkMjJhMTJlNyI6ImMzMjI4OGY5N2FmOWI2ZTMxYWE3ZTQwZDllZjhkMDE2IjoiIjoiMWZhNmFlYzdhMjg3NjdjODk2MTM2M2RjNDI2NGU2YWI5NzAxNDI2NGY2ZmUxZGRhN2U5ZGI4NjQ2Y2U5YTU0NjNmNjllOTFhYWQyZmNlNjk2ZjliNjQxZDc1NjM1YmZiMGY5N2VkMmQ3YmVhY2E5NDRjZjhiZDlkYmZmZmU3N2I1YWU5ZmQwMzI1NzVlNTMzM2M3Y2UyNzUzOGM2MDk5MjI4NDNkZTg3Yjk2MGViY2E3YzJhMmVmOTcwMmRkMGMzMmY3ODdiNGQ3ZGYyNDhmZGY1MjZkNTk0YTkwYmFkMGQ2YThkZmZlMjEyMjQ2YzM2ZGI3MWUyZDM0ODMyNjYyNCI6MzI6IjE2OTk0NDRlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmNDIwYjZlZjk2ZDliZmU0NmRjZjE4MjQ2ZWUyMzA3OTBhNmZjODU0ZTczMGYxZGQyZDFmZmQwZThiNWM0Nzc2IjoiNjU4YTk1NGQ2YzYxZDBkNmYwZTgxYTNjMWNjNjU2ODQ0ODNmZGM5NWYyODBiNmQ0Yzk2NDM1ODU5NmMyNWNhNDFjMzg5OTMyZDc0YTFhM2ExN2QwNDFlODliNzExMGVhMzE1ZmFkYjMxMjhjMmM0NjljMzUwYmY5YjQ3MjNhYTljOGFiZDkwNjVlYmJkMTJjMzE3YmZiNzA5MGYwOTYzM2Y4YzExODRmMGM0ZmJlMTBmNTQ4NmRiZmI4NDc1MzZjODg2ZjdkMTQ0ZWQwNzI3MmE3ZTYyZmI1MjNhMDQxMTFlNWVhOWUxYWI0MTVmZDE3ZTcyMTQzMDA2ZGIxNGU5ZSI6IjQ5ODJmNTAyYTM3ZWVhOGJjZjMxNmNlZDQ2NmM5ZmIxIjoiIjoiODYzMGFhNzhhYWJlMzVkOTM2MGE0NGJiMjA5NDIwOWI2ZjcwZDQ2ZDcxZTM5NDk4MDNjZjU0ZTMzZGFmZDU0YzZlNDllZGE5ZTI2ZGM1YzBjMWUzNDkwOGY1MjgxYzhjYjJhMWFlZWU4MTE4NmNmNDVkM2ViMjJmNDg2MzIwYzdlZTBmYjdiZjNjMjExYjIzMmE4NDI2ZTdlODJmM2UwNTg4MWJmN2Q5NDU0Y2RkZWM3ZjI4ZTUzNThjZDBlOWVhMmU5Y2ZmOTM4YmUwNDRjMWIyMTkxMWQ1MGIyYWUyM2FiMWFlZjM3NzUxMWVhNjU3YWRjYjU2MGMzNDIwOWY4YiI6MzI6IjNhYTkxYjczIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDAsMzIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI1MGYzYjgyMmRmYzcwMzgyZDg2OTU4MTFlNmIwYTI4OTZlYTJiY2Q0ZDUyNjg3NzhjZDQ4NDA1M2M4YTE5Mjg4IjoiMTViZmIzYTU2MmNlZDYzYzkyNTYxYTc4Mzc0YWY0MGM4OGEwOGNlMDIzOTI0MTllMDNkNzU0MzM2NWM1YjY1MjU5NTFlZjJkZWM1OTI3NDc0YTBlZjg1ZjUxOWU1ZWY3OTU4ODFkYjNlYWZhNzY1ZWMzOGU2YmU3YjU2NWE4NzhjMTNkOTBjMDI4ODlkYzUwY2JlODcwODFkOTIyNWE1MTU1MDRjN2JlMTViZjk3ZjVkNzJhNGQ4MWYyMThhMTQ4YTQ2ZmJkNDI5ODNhYjAwMmZjZTBhNTQ3MTliZmUzMDFiYjc2MTc1M2NiMzMwZGMyNWJlNTE3Yjg3ZDA0MjhkOSI6Ijk4MDgxMGMxMWFiZDNhZmY0MzQwOGVjOWE2OWFiY2IzIjoiIjoiMTI2MzIyOTZmMjdlYjI0MzkwMDlmNjAzMmEzZjY0ODM3MDMwM2RjZWJhYWMzMTFiNjg0ZGUyNDk2ZjM5OWIyNzEzNDdiMTllMDQ1YzEwNjA4MDJmM2Y3NDJiNmM3ODBkMjBiOWQ1ODljYzA4MmQ3ZDBkNTgwZGZiNzIzMTE3MWNmYjYxMjIyN2ZjZGVlN2ZlYWU0ZjhkZWZkMzRjODlmYjBkNjg1NzBlNzgyMTkyYTdiZGQ5YTU0NjRmMzVkYzZhNDI4MmNmOWNjM2ZkZmFjOTg4ZDEyOWVkZGY4ZTA3OTVjY2MyNGExMTNmODcyYWRhODg4MzRjOTc0ZGY4YmM2OSI6MzI6IjMyYzFjNGM1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMjkwNzJhYjViYWQyYzE0MjVjYThkZDBhZTU2ZjI3ZTkzZjhkMjZiMzIwYjA4Zjc3YjhiZDNmYTlkMDNlZGM2YyI6IjNjN2FmYzVjZmM1YTFlMTQxNTg3ZTkzZmVmODQyN2Q0ZjIxZDg5MmI5ODNiN2M5YjZlOWRlM2VlMTY4ODM3YTE1MzM4NDdjOGEyZTJhYjA3MDZhYzE0NzRlOWFhNTRhYjU3ZTc4NjBiY2E5ZWJiODNiZDZkM2FlMjZjYTUzODdhYmRiOWE2MGM0YTk5Mjg0ODQ3NDJhOTEyOTRiMTNhYjhmNTFlYjRmNTk5YTMwZTljYjE4OTRhY2EzMmE2MmE0YzI3OTNlZTY3OTNkZjQ3M2Y0MzIzNGM5ZWFmYjQ0ZDU4NWE3ZDkyYTUwYWViZWY4MGM3M2M4NmVmNjdmNWI1YTQiOiIwMjAxZWRmODA0NzVkMmY5NjlhOTA4NDhmNjM5NTI4YyI6IjRjOGZmM2VkZWFhNjhlNDdiYmM4NzI0YjM3ODIyMjE2ZDQyZTI2NjljYTEyN2RhMTRiN2I0ODhmZGUzMWE0OWM3ZDM1N2ZiOWFlY2MxOTkxYjNjNmY2M2E0Y2U0Mzk1OWEyMmRlNzA1NDVlNmFlZTg2NzRkODEyZWNhYWVmOTNhZDAzYjVkNGM5OWJkZWY2ZDUyZjIxZmM3ZmRiZWIxYzU2MjlhNzZkZjU5NjIwYWFlZmRhODFhOGU3M2NlYmU0YzY0NmJlZmZkN2Y0YTk4YTUyODNjYzdiYzVlNzhiMmE3MGY0M2UwY2FiMGI3NzcyZTAzYTVmMDQ4ZWM3NTA4MWEiOiJmMzc1NWFhZTY4MTNlNGU0Yjg0YTA4OWNhMTQ5NjU2NDY3NjY1NWJhM2M5NGU1OWM1ZjY4MmFkYmJmZWQyMWU3NmFlZDBkYjc4MzkwMjU4Y2Y1ZmJmMTVmMDZjNmI2NDY4NDE0Y2I2NDkzYzhiOWI5NTNiNDk1NGVjYWYwN2VjYWY4NTg2YWUwMDE3MTBkNDA2OWRhNmQyMTgxMGJjZGNiYjgzMWY3MDQxY2RiYjk4NGI3YzU1ODc4NTk4YTY2NTg4ODMxNzhkY2MwZmEwMzM5NDUxOWI4YjljM2JlZDBlNWMwNzM0MjlmNWRkMDcxYTkxODRiMDE1Y2JiYmM2MmUxIjoxMjg6IjA1NDlkZDlmMmExMjNiZDZkNThlNWNkMTZjMDYyNGExIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWE5OTk5YWY1MzcyMGQwYzEyODhmZDNmZTMwN2E0NzExNjA2MzUyODdlZWJmNDFkZDc3YzgyZDFmOWNjOWQ2MSI6IjZjZTZmMmRjMjAyNzUwMjE5ZTE1YTI0ZTFmZjA2NzhmZmRkZTU1YjI3Y2RjYWI2ZGExODhiZDUyMzVhM2JkYzY3N2Y3MmYxMDY1NzlkMDJjMjk3MGQ0NTQyZTRlMjM3Mjg4NmUxYTZkNzRjNTk2Y2U3MzVmNTFmMmVlNmFmZjRkNjJiZDI0MTEyZWM3Y2QxYWRjN2M2NjA1NjFmMTYzMTcwY2RmMDQ3YzI0MWM1M2I4YTViMmUwM2ZkZTQ4YzI0OWEzMTliYjkwYzI2OTNjNDY4YzlkZDEzNmU5NGUwNWYwNjdjZDFkNjgyNDRjZTUwYmUzMThhZTA0NjRiNzlhY2QiOiI2Mjk5ZDY1MWEwMzJiZGYzYTdlNmIyNWFjZTY2MGUzMCI6ImFmYWIwYTNkMTk2MGFjOTczZWUyZjQ0NjFkYWNkMTBkMTg5NDEyYjM3ZTU3MmNhZDc4ODhiYjRkMjQ1M2YxZWVmYmQ2NzI1YWFkZDVmOTgyMzkzZGZhNTljM2NmMWVlMzQyZGQ5MWUxZmJmYWIxMGE4MDJlM2EwZWRhMjI2ZmRlMjY4NmU3ZGIxMDE1NDA1YTNkMzNjOTIxZTVhYTg1N2JmZGE1M2NhM2FlZDNmZjBlMThjMjg5NDA2NzQwYTdjNWQ5Zjg2Y2U0M2RiNDBjOTAzMmU5OGFiMTI2YzdjMDM2NGUyZWZjMDA4MzEyYjc2NDFkMzY1MDNkMTgzZmE1YTUiOiJhODA1OWZlNmZmNzExNjE2YWZiNTkxYjVlNWRlNDk3YjNiNzgxM2Y5ZGU2NThjN2I0N2NjM2U3YjA3ZDA4MDVjMWJhMDU4NTZkOTgzNDE4NjliODM5NGYzYjVkZjI4NzZhZTE5ODM3ZWRiMzkzMWVlYmViMGYyNmViNmM0YTJlYTc4MDAzZDgyYTk4MTExMzA1MjA4Y2NhY2VhZjc3ZTVkNzE5OTZjY2E0ZjlhNWViNzEyZGQ5MTZiNzE0NTVmNzQxZWMyZGRlNTFmNTY4Mjg2NjdiN2EyZGEwMTVlMTg4NmZiYTcxZTQ5NmE1NDJkOTRhMzhlZmJjYjUzNTNmYjg5IjoxMjg6IjJmZjRkOGQwMDQwMGFkNjNhNmFlNzg0MmVlZmIxNmViIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMzE3MjFlNWUzYTc0OGE3ZjczNjlmM2RmZmMxY2JiNTcwY2VhYzg2OGVmOWQxZjI5Yjk0NGI3ZTg2YTI2ZDI3MyI6IjZhZmMxZDIyMjMzYTYwYzNlNjg1MTQ0N2RlODkxNTJhMGRiYWRjZDg3ZTM1ZmM5NDdjYTRiYzg4NmYxZjg3NTQ5ZWExMDZiMDk3ZTI2NTUxMzY4MzNkMDZkZmI4NzlhODU3MzIyOTg4NjBjMTQ5YzVlNWZmMDNiYjJhOTVkOWNkM2RlZWI4ZmZkZjk1MWVhNWY5N2UzMmMxZWQ3NTI3MWQyZWE1OGQxNThhZTZkNTY4YmYxOTdkNjkxMzA5NzdlMzMwZWJmZWYzM2YyMjJiZmQ1YjU2YmM2YjAzODJkYzk5YzRmMGU0MmIwYWE3YTExN2I0M2Y5NmQ0M2Y2ZTAyZGQiOiI1MjMyNDdkNTZjYzY3Yzc1MmIyMGVhYjdhMjhmODVmZSI6IjExZWI0MWFlYWUzNjExZjBkZTc3YmZhMTIyMWVmNWI3ZDI1NGZhZjg5M2RiZGFlYWQ5MjZhNjE2MDVmOGE4NmYyMGYxZmI4NGUwYzVhY2QxOTUxNDNiYzVhNGYyOTdiZjcyOTEyOWY4OThhMjAxMzE3NWIzZGI3MDA0MTE1YTYxMjAxMzRkOGUzNTRhZmUzNjY5OWE2YzY2MThkNzM5YzgwNWI1YjkxNzM5ZGY2N2RlNzY2NzcyOWYxZDZlYWUxYTA2MDk4OTc5OTlkNDc0YmU0ZDhiODI2ZGY5MDFjNmYzOWQ1MjI1NzBkMzhkMmQxYWE4MjgzODI5MzJhMTc3YjEiOiIzOWU3ZjMyYmIzZTg0MzZkOTdhMWQ4NmEyMjc1MDc2ODAwMWZlM2E4MDU1MTZkM2Y4MDAzNTIzMjNhZmQyMjE5OTExMDVkMTJkYTY5Y2U3NDMwNDAyZmE3OTIzOTU4YWQ1ZWQ4NTUwNmI5NjhjNGRkODk1MTZkNmUzZDAyZTcyMmRiMzk1NGNlMDk4ZWMzMjk5ZWY0ZjJlZDRhODlmMzgzNDA4ZGNlY2E5ZGFiYzZmOGVlZmU1YTFmODAwOTM5NjFjMjlhOTRiMjIyZDFhMDRkMmMxZTQ1M2QyZTAyOTc3ZjNkZDc3YTQ2NTllMmJkZTJmZGJiYThlMjgyOWRiNGYxIjoxMjg6IjUwNjg4M2RiNjc0ZmEwNDE3ZTA4MzJlZmMwNDAyMjdjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTIwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiMTAwYmQyYmY5YzhiMjRjYzJlOGQ1NzY5N2NkMTMxYzg0NmI1NWFkNmZmMGIyMTRjMGRlMTQxMDRiNDY1YjU4YiI6IjgxYzMzNzBkYTk4OWY3NzRjMTk2MmY2MGM1NzI5OTc0NzQ4MWJlYTBlNmI5MWRmODQ2ZTZlZjkzY2FkYTk3N2JjNzQyZWUzM2NlMDg1YWUzM2ViOWY3MzkzYTA5NDNiNjQ3MjA1YTdlMWZmYjJhNmE4MDNhMWNlN2E4ODkwMjQ1NmQ2NjYxMjM2Mjk2MmI5N2M3MTUyYjU3ZjFkNTRkZTk0YTM5ZjA3YzFhODA5OGRhNGVhNWU0OThkNDI2YjcwMzZjNjQyZmJlZWJlZmRhNTBiOGM0MjFhN2EzM2IxYTg0OTlkYzM1MDExZDgwYTUxZDM0Mjg1ODI0ZDZmMDE3MjIiOiIzNjNlOGFmNmYzODMwN2VjMTI2ZTQ2NmU3MDU2Y2M0NSI6IjQ3MWY3ZTlhMGI1MDViMTI5OTY3NDdlYzllMzI3MzFmMTE5MTFlZTk1ZDcwNzk1YmJkMWJiYTM0Y2Y3ODJkNDEwMGNlMzBhODViMjNmOWY4MTdmMzBlOGYzMTRlMWEyM2UxMDEyMDFjOTIwY2UxMmNlNzMyY2MzZmUwMWM3NGE5ZWU4ZDNlMTU5OWFhMjJmMjM5OGMzMjY1ZDRkYmRhNjI2YThmZjQyNjI4ODkwMDllMDg3ZmJlZjZiYWJlMzNkNzMwMGU1Y2ZjNGMwMDU2ZjM1NjJhOTEzZDI1OTRmZWU4ZTQ0OTU5Y2Y3Mjg1OTlhOWQzZTdlZTRhOWVjZDY2OTQiOiI5NDk0ZDAxOTY2YWM4ODdiODI5NWJkZTYxZjBlN2QwMDZlYTdiNWM5ODRhMjljZjVkODQ5MTk0ZjM1ZDdiMGY2ZGRiM2JiZDk2NDZkN2I5Yjk2MWM1MTUxNzk5MDFkMmIwNGNiN2NmN2I2Yzg3MzZkMWQ0NzJhZThiYjlhNmRjOTE5NGIwM2IzZjUzNzM1NTFhNWFlMGMwZjAyMzk2NzY2OWM4NzNmMGFjZmIwMmMwYWUzYTM4NGU3MGY3YTdjYTA1ODYxZjI1N2YzNmEyYWQ1ZmJiNTkxNDczZGZjM2FlMTI2NGRjYTBlODg5ZTBkZGJmOTNkYWRmNzVkYjIwNTliIjoxMjA6IjVjNzhkOTE0Y2FjNzhjNTE0ZTI3NWEyNDRkMGVhNCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDEyMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjYxNGRkMTc2MmRlYjVjNzI2ZWFkZjBlNjU4N2Y5ZjM4ZmE2M2QxNmJjYTE5MjY5NTU0MDRmMWI5ZjgzZTI0MWEiOiIxYWU4MjhhMTY5M2QzYzI0NjUxYWI4YmE1OWZiMTE4NWQwOGU2Y2M0YTk2NGYzMGRhYzU5Y2Q4MWZmNGJkZmNlODAyM2FiMWI2ZGZmYjU5NGE0MjUwZDI1ZjYxMTc2M2VmYjQxNTJjZDM1YjkzN2NhMTEzNzNkMjM3ZjFmOGIzYzBlMjFiOTQyYmViMWY0ZmZlNTAxNDE5OGM5ZmY1OTg5NmRkZmJiNTVlNjk5NjNlM2VmNmIwM2QzZmExMzQ5Nzc4NzBjZDZmM2FjMTBiYmY1OWJkY2M5ZjEwM2NjMmQ1OGYyOTRlZjVmMDA3YTlmOTAzYzdiYWRhMDhjYjQ1NGU2IjoiMTBkMDc5YTg2ODk0YjBjMTdiZmNjOGZmYzRlY2Y3YmMiOiJjNDAzNWY4MGI2ZDJlYTI4OGFmZDRkZGFlYzFlYjIzMmI3OGJlNWE4NjU4M2ZhODVmNzkxZDU0NjEwMmM5N2FjZTk3MTZjMjcwMjQ4M2Q3NjJjOGU0ZWRhMTJmM2RkMTBhOWE0OWEyZDcyY2Q0Njk0ZmE3OTQ0NzdiNTRiNDM2N2JlNmI1NDg2NzVhZWU0YzM1MWUzZjY2YzdlMTEzYWVjZmJjYzU3YjhiYmFiNGEwMzlmMjg0ODgyMzdjNzUzMTNlNjI2MTI4NDdiOTE1ZWY5YjU4MmUxNDZiMmJmYWJiZmNlNTc2YTk4NGY1Y2U0YmUwZTZiZmY1NDgwNTg0ZmMzIjoiYmY1ZmIwNDQ1YWFiNDZhYmE1MDQ4MDFkNTM1NjQ1NWYyOGM5OGYzMDA2NzBhNzMxYmRkMGM5MDFhMWQ1NTY0YWEzMWY1ZDQ2N2U1ZjgwZGFkYmZlY2E2MWQyYmY3MmI1NzBmMzkzNWJhMDRjNDVhMmZmNzk5NGJhYzZjYWJmODRkYjJhNDJjZDVkYjJhNGYxNjBjOTdjNzY4MTdjYzVjYjYyZDQwMDZkODk1ZmNkYjIxOGMxNDY0YjVjYWFhZGJkMWY2MTc3OTkzOGU5YTg0NDQwNjE1ZWFlMDUwY2Q2ZjE3MTNjZmJkNjk1ZDc4ODE4YjJhZjc4MTU3MzM5ZTlkOSI6MTIwOiI2ZDgxNWVlMTI4MTM4NzVjZTc0ZTNhZWQzYzdiNzMiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMjApICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIxMmU5N2ZhZmZmN2QzOTdlYTM0ZWZjMGE4NTI4YWZjZDUxYzFiMmNjZGE2ODBhZTkwNDllZGM4MzU5Yjc4ZWMwIjoiOWZiZjAxNDFjZDUwYmQxYjNjY2FmMTM3YjgwOGI2OTg1NzA2NDJhYjIwYzMyMTIwOTAxNjIyYjM0MTczZDdhZDExOWFiY2EzYzYxYmJmMWU2ZGQ1Y2IxODJhMDc5ZjNlMDFiMGU1MjYzZDk4NGM2MTg2ZjAxNzkyMTI1ZGQ2YzQ3YzMwMDMzMDA4Y2EyZTAzNzdmOTkwMjg1MDk0ZjY1MmM1NWEzNDgyNDJkZmFhNTlmNzY5ODlmY2Y4NjAzM2M4ZDljMGIyYTUyNmJmNDZjY2EyMDdlMDU1ZTFkYmM3Y2YzZDBiN2E4NDBjOGZiNWY4NTc4NGM5ZTQ1NjNmNzFkZSI6IjhlYjExYWJmZTM1MGMwZDVhNmIwMjQ3N2I0NDg2N2U5IjoiMGE4MzAwMjlkNDUwZTIwYWFlZjQ4NGQ0YWJlZTlkYWRlYWJiZDZmZWFmODAwYjNhNjkzYjQ3NDZkYjA1OWVmYjdkMTEwNDA1YjQ1ZTQ1YTllNWFjZjkwOTU3YzE1NDY3NGRmYjJjMWNkNzg3YWYzNzFlMDFiYWZjNGU4NDc1ZDAyNjhiOTY5ZDI1NzU2YTExMjFhNTE5YWZhNjFmM2Q2ZWNkZWQ0ZTA2NDBmMGRkZDQ3MWY1YjhlODIwMjlmZDI4ODdkZjRlNjVhZjk1ODAzOTBiNjkyNDAyMmUzOWFjZmVkZTc1MzBlNWYwZTU0ZjAyODViYTU2NWZmNDlhZjU0MiI6IjA2N2NkNmZmODQ2MWFjODAyMTdlZjcwYTkxZGNmNmVkYjJmYmRkMzE4NTY4MTVjZjM1NmZmZmE2M2JhM2Y1Y2IyOTNkN2YxZWQzMmFlNDAyNDg2OTM2MTdmMjc4MzlhMzRlODcxZmRkZTYzNWMwNGQxZTY2NzQzZjczMGEwNmUyYmUyNWNhZmUxZDY3ZDgwNDg3OWZlMzhlMDA5MjY4ZWM1MGEwMjk0ZGE0NDVjNzk1NzQyZmYxZTkyNDE3MGU0YzJlMGU5ZWYzYmRjMjZjMjUxZjU1MzcyMThkMjk1ZDkzZDU3YmFjY2M0ZGVlNjE4NWMyMzVkN2VjNWM5OTI2YTYiOjEyMDoiOTMxZjQ0ZjEwOTkzYzgzNmU1MzRhNTljMWFlYjk4IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTEyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzczMmRhMDAwMjYyZGU1NThiZDNlYTY1ZTY2ZTIwZTExNjA1MTcwYzkwYjY3NzA4YmRhNDNmNDBhYmVkNzRmZSI6IjdkNmM5ODFjMzBlZjg3YTQ2ZjUzYWVjYjRjOTcxMjRmYjk0YjQ1MDU3NjM1ZDViZjFkNGYzYTNiZGI1MzRlOWFiNjJiNGE0MjVkZTlkYzUyNTM3NTc1ZWQ5ZmY0MDZjZmJmNzU0MDNkM2Q5Y2RiZDlmY2Q1MjBkNjIwNjVmODE0ODM0MjdmYTI3OTY0NjQyY2MxYTA3ODIyZGEwZjYyMzRhNjg5ZWIzMGU4NDI1ZDc3MDlhYmZkMTg2NjZjNzZjOTYzZWVjZWYyMDUwM2VlNzdjOTY4MDJjMTIwYWJlYTE0MjhjYzY0YTA4ZmMyMDg2MDUyNzg1NGZlY2M1NzFhNmMiOiI1MjNkZDM0ZWEyNjNjMzFjMjIxNTA1Mzk4NjYyNmQwMiI6ImYxNzA1NTZhYzVkMzhmMDY2MWJhZTMzZTA4MjYzNTZjODQ4ODIxODkwM2ViYTFiZmE0OWIxNjg4MjUzN2VmNzgyODNmZDkzNTFmMzdmNDRhNzY4NzA0OWE2MDhjM2RkY2M4MjgxN2Q0YmE5NmE0MGQwNTgwN2EzOGVlM2YyZDVjYjhiMTEyMWRiNjEzMThmZTIyYmZkM2FmYjMxOWU4NGM0ZTJmOTQ1NzBhOTI0MzNkYjI5YmQyMTkzNDg1NDQ5YzcxOWEyYzYwMzA2OTZmNTNhYzcyOWRmOTA2NzhlYjAxODc4M2IyNTc0MGQ4MDZkMWVmNjk4MGUxMGQzOTY1OTUiOiIzNDcwZDQ1NDRmN2JmYTNhYzA2MjdhNTZlNjZjNTZmYTA2MjE4ODQ0MDgzNGI5MjM4YmQyMGU4OWRmYzcwMWZlNmNmZTBiZjRlYTIzODcwMTRiZDgzYzYzYWI3YzkxMmUxYzBkY2U3YzJkOTJlYWVhMTU1Zjg4NmI1NzRiYzk0YThmNGYyNzVkZmZlMmQ4NDE3M2EwNWI5OWQ4MDI5YzM2ZGQzYzM1YzEyNzA5ZDMzZjU1YzNiY2Q5NmU5YTgxNWY3N2E0ZmU4ZTUwNjM5ZDhmMTk1YTUyNjQ4NmYxMjA5ZDdiZjdlODZhYzNkZmM0YTFkMmNiZGRiNmQzMzBlNWRiIjoxMTI6IjU5MjRmM2NlZmYwMjA3ZmM4YmE4MTc5YTk5MjUiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwxMTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIyNjg0YmNjZjJiODQ1MzE0YTBjNGI4YjVhNzgwZjkxYWE3ZWQxMTc3NTM5MTIyZGM4NzE3YzE0YmI1MGUyZGZmIjoiMWE0MTc0ZDRlMThhZTBiNjQzNGYzNWRjZDljODZjZjE1OGM0MmNlMDBjZWIxMmY0MzU2ZWMxMThkNjU5ODIwNTE4YzMyNmExYjJhYjkyMjc5ZDk0OWY3NGM0NTIxOWM2NjBjYjg0ZmI2YjEwYjE0ZDU2YTUwMTE3M2ZkM2IxMjlhYzg5ZGIwZGUyMjg3NGQ5MmJlYzcyNGU5NDc1MWY5MWE4MTdhNDJhMjhlOGUxNTY3MjE3MmMwYjBkYjRlYWQ0NmIxNGQ0YmMyMWFkOGY1YmExZjllN2UwZmNjODY3NzAwNjgxMzQ5YjgxMDJhMjA4ZDc2YWU0ZWY3ZGY1YjU2ZSI6Ijg0MzNiNTliNDFmZTBjZGM1YjMwZTRlODdjNTAyOGVjIjoiMjgwMDI2ZWVlYmYwNWUyNmU4NDk1NWU0YTM2MzUyZDRmOTdmMzE5M2RjZTA3OTVkNTI2ZDA1NjQ1YmY1ZDJlZWM0YjkyZWU4ZGNlNTRkNzhmZDNmYzNlMzZiYzc5ZDViZjllZTNiMjY5OTMxMGE3NWRiYzUwMDdiZGFjYjRkYzg4ZDA2NTE1OTk1ZjhmNWIxYWE5MGNiOGZjMDM2Yjc2M2E1ZTgxOWRiNzBjMDkxODAyZmI3ZjI0YjljMmE2OGZmMTk0MDMyZmZmYzRlZjc5ODkzNmFhYmNjYmI0M2YyMmEyYmJkN2UxYWI5ZDA0MzRkNDQzZGFjNDkyOWI4NDE5MyI6ImNjMTU1ZTA0NDcyYzA4NzJkNWNjZjg5MTBkMzQ0OTZmMzgwOTU0ZGE3NjUzYTFlMWQzYzQ2MGZiYmM3OTFjOWI4MmUzNTE3NmU5MzhiN2UyMWViNDY5MGVkOWZjYTc0YmE0NWEwM2RhYzRhYmM0ZjYyNWZmZGZhZDAyZTFhY2NjZjE4YjVhMTg3OGY5MTFmYjZmNmUwOWNlMGQ0YzZhMGJiODcyMjZlOTE0ODc5YTFiMzA4NWMzMGU4MzI4YWE2ZTBkMWM0OWMyMWI3NjBiODJlNDY5OTgxYjQwZWExMDJmMzk5OGM4MWRkOTc5OWY0ODRhYjg5YjE5Mzk2YWI3ZTEiOjExMjoiNWE4MDAwOGU2ZGE0MGM3MWIzMTZiODRhZTI4NCI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDExMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjQ4NGEzM2JhMGI5N2MyODg3YTg2YTE0NzZmMjc0ZTIzNmViMzdhNzJlMDVmOWU3NDM0ODI0ODg3N2VhOTllOTgiOiI0ZDgxY2VjMTRiMzk4MjU3YTMxYWQxZTM1ODFjMDBkMDVlMTJiMzdiNzEyNjBiZGQ5NWJjMGI2OTgxYjYxNDU5OGZmYmJiM2VjNGJiN2RlYjU2NzNhMTAyMDEzOTg3NzEyMmY4ODUwNGM5YzUzMjY1NzA2ZmU3NjYyM2E5YjQ4OGEzZGZkZDRjYmMxYjdiNDZjN2ZjZTlkNzM3OGUxNjQ5NjRjMGEzNzczMzdhNWMxNzJlNWU0ZGU2MjA2Mzc1MTY0Y2Q3YmViMDMwNWQ3YTkwZjVjNzNlMTJmNDQ1MzI2ZTFiYzlhYzVhY2QxYmQ0YmNiZTQ2NjI1MjQ4OTFhMmU5IjoiYzNhNWNjMTlhZWY2ZDY0YjY1NmQ2NmZhZDY5N2I4MjkiOiIzMGYyNzZmOTZhNTBlMTdiNDUyZGNiNWUxYjRhYjY2NmRjN2M0YzcyZDBkOWFiMmFiYWY3N2VhZTJlM2JhYjdkYmU1YWMwMDVkN2VhYzU0ODBlMWJhZTEzNjQ2YjU5MTU1NTI4YWJkYzE0OGIzYjcxZjA2ZDAxN2M0YjEyZDY0YWEzOTkwY2M5Njk0MWVhYWMxNGI2MGViMzQ3ZTBiZTg3M2RlMmI2ZmUyYjg2ZTJjMmZjMDYzYjI5NTExYjcwMTQ0ZWNkMzE1Yjk0OTEwMDFiMTIyNzAxYjljOGNjMWQ4NTQyN2I2YzYwNjYzY2NkOWQxZmE4NGUxYzJmNjA5ZjM2IjoiNTc5ZmQ4ZmI1MGQ3OTViNWIyMDhjMmQ1YjBhOGIxODA0Zjc1NGEzMGExMDAzMDI1MzAxNjU1YWViY2RhMmQyZmYzMGQyOWExNmQwZmIxN2EyODQwMTEyNzc1MGZjODdjOWUzYWEwODU0MDgxNzIyOGIwNDljMzg3MjUzZWEyMzU5MDM1YjgwNjNhYjRiZjU0NTA0Y2E1YWQ5M2I1NGI4YWM1YmQwYzFlZjNjNjc2OWZiMWVkMjM5YmI3NmYzZTBiYzUxZDM1NmFhOTFiNDk0ZDIyNzQ5YzhlNGNkYjE2MjllOTNmN2M2ZTQ2ZmY5MTQ1OTE2YzEyNzU2NjlhZTViYSI6MTEyOiIxYzM5YWFjMWQ1ZmZlNzkxNmEwOGFiMmNlMjc5IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiNGE1ZjUzMjFiNTE1Y2ZjZGU0OTMxNDhlZTRjNDRjNjkzYjE5NzliM2EzYmE1MjJhMmE4MGU1ZDI3YzkzZmQxYiI6Ijk2MmI4NTA0ZmViNTdhZTczZTkzYzJlODk2MmM5NTYyZjQwOWM5MDhlNTFmOTkwNGRmMTYyM2VhYTBjNmI5OThkYjZlZTg5MTlkODA1YjZmZmNjMzdkYTUxMzAwYzFhZTE2YmNhMjFmOGY2ZjYzYWY5ODlhODEzYWU4ZmUyOGMzZmIwMTJmMDAzZGFiN2U3MWIwOGQ3NTc3OTkyMDg4MDYwNjJkNjJiNGFjOTM3NzEyNDA5ZjlmYWZmZjNlMzU3OWE0ZDkyZDQ0MzdhNmYwYjI2M2UxZGE3ZTQ2NTFlMGE1MjFiZTVmNmY0OWZmNWEwNzc4ZjA3YmQ1ZDNkYWM2OTYiOiJjMmNiMDE2NjA0NmJhZDBjZjBhMTA3YWY4MzkyMWQ3YSI6ImU0OGFiZmI2NTdhYjMzZjU4ZWVkYThjNThhMjBlN2UyOTliYzNlNzQ4MWY3MDRjMzI2NTI5NDA4NTgwZjlhNTEzMGNmNmY3MzY4NTAyZDIwYjAzYmE2YzNiOGY2ZjI4YzA3NmEzZWY3YjhlOTg3NzUwZGM5NzJiZTk1M2U3MTI0ODNlNmYzMjhkYTU3ZTRiNWM1MDFmYTdjNzIwNTkzZWI4OWZmOTY0NGZiZGM0NTQ3OGY4MGVlODlmMDk2Njk0ZGNiNDRhOWIzYTZhY2EwOTA0ZDRhYTRlNDc1YjRiMjQ3NzFkZjlmZDZlZjk1NTdmNGY1Yzg0MmFjMjQxYjIxMmYiOiIxMWJkNTVkOTY5NjAzZmYzZDQ2MzU1Y2IxOWM2OTU1N2I5OTgyNWE0YzIzZWVhZmM4ZWVkODQyMmRhYjUzN2MwZmE5NzUzMTkxYzQ5YTZmZDllMGQ2NzYwZWQ4MTZhNDllN2Y1NzA0YjU5MzZhNDk4NTQ0ZTJiYmJhNzg3NWM1MTNjMDMxZjExNTI3Y2ExYjliNTc5OTYwYmU2OTY0ZmJhOTExOWRjZWNlODIwNWMxNzRiZTA3ZWJmZmFkYTgzMzc1Njc4ZGU3NmZjMDEyYjBlZTE3OTc4N2I0YWE5ZmI2ZTJiNDU5NTc1MjYwZWIwMWYyMzc4NmRjMjRkMWQ0NWVmIjoxMDQ6IjM2ODUzYTAyOWI1MTYzY2E3NmM3MmQ0ZmVjIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYzhmN2I3ZTYyOTVmYzhlMzM3NDBiZjI4MDdjYWVhZjRiOTA4MTdjYzNlZjNkOWYzOGY3MDRkOWY2MTY0ZTQxZCI6IjRjMjZlNDg5MDY5YjQ4N2NlOWRjMGUyOTVkNWU4OTc2MDQwMTE4NTM3NDA0MWIwZWZjYTViYmY3NThlN2QwMTBjY2JmZTU5OTllMmE4MTc3NzZhYThmNDljMWU1ZDQzYmNkYWRlMjk4OWZlNWJlNjM1ZGFiNTRjYjBlMzkwYTIxYjgzMmIzMGY2ODg4NTdiOWUwOWMzNDZiY2M1Mzk3ZTUxY2Y3MWFjYmUxYmZjYWExZWNkN2U4N2ZlNWRmZGUxODBkOTUxOTIyZTYwZGQ4MjAzZmYyMTBjOTk1ZWI1NGJiOTgxZjdlOTMxZjBiMWY1MmRjZTBjZjFiMmViYTUwM2YiOiI5MDNiMmVlYjlkMGIzNzk0YWNiNzQzOWQzNDFjZmUwZCI6IjgzZTk5NDk3YmZiZTkzOTNiMDY1YjBiMThjMTNmOTliNjdmMWZkZDcyNGZkNWQ3MGNkY2NkMmI4ZGQ2NTg0OTljYjlmNTdlMWExZmUzOTYzNGFiMDg2OTE4MmRlMDg1NzIyYTc5ZWFhYmYwNTdhYWM3YjNmMzIzMGY1MWEyZjliNDhiNDlkNTkyZjAyMjQ2ZGFjYmU5MTVmZjlkOWE1M2Y3ZTUzMzJmN2E5ZDg5NjQ5MDUwYjA3NWMwN2U1ZTc0ZjI4MWNhMWEwZGJlNjMyYzBhZWNmM2IxOTExY2Q2ZWM0ZjhmYWNjMjc3N2QwZDE0Nzg0YmY1OTUxYTFjNjJjMzMiOiI2M2UyOTQxYmY0YTEzMzc0NjI3YmU2NmJkZDRlNTcxMTkxNDlmODFmNGMxYThhMzIxZDI3YTRhNzllN2Q2MWUyZGNlYzlkN2IxM2ZjY2NmMTJmNWIwNTljYzIwOWY4NDE0YWU4MTk2NjQ2MmEyNjZlOTJiNGIzYzI1MTk4ZWUyNDBlMGJjNmY2MTk3ZGYxZTI0ZThkNDM3OWZjYWU4OWU2MjQwYTdmOWM3YmFiODg2ZTc5OTkwYjg0NmU5OGU0YmFjYjhiM2IxNzQyMjI0OTk0M2U5OTczZGU0MmRhNWUzOGU0ZWI1MjgzMGIxZmFjY2U3NjZiMzM4OWE1MzEyNDc2IjoxMDQ6IjZlMzFjNWRiMzE0NmFlNDVlZjVkNTA0ODVlIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMTA0KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiZGVjMDYyZWZjMWJkMjU1NmI4N2E4MTE0M2QwMjVhYmJhYTUzMmM1ODZkNWViYjA2NTg1OWEyMDcxZjhmMDdlNCI6IjAyMTkxYmNiMDYwZTYxODI3ZGJkZGFjNmMyOTYxZGJhYjg4MTJjZGMyYWM3N2JmMDI3NTYyOGU4ZTM2YmFlMThhZDRkZWI3N2IyNjgyYWRlMGFlZjc2YWZkNDU5MjE3M2JhMjlkYWU0ZDA3MzU5NjNjODAzODU2ZWFhNmY2MGE2YzIxNzg1MzU4ZTg3ZjNjNGE5MWUzMjFjNTllMDRjMTUwMjk3ZGU4NzM2NzkxOTRiYTVjYTg1N2Y3ZDkxZmZjMzU4ZTczODEwZDU1NWViZDRkYmQxZmU0ZmJjNGZmYTRmZjM4ZTRiNDFkYjlhZjBhODRmZTk4Mjg3MDg2MzE0NjkiOiIxOWFiZDAzNjE0NDNjM2FjMmE0NmYyNjA2ZWViMWE2OSI6ImMzNzg1ZTdjMDA5NTcyNmZkMWYzY2E4NDIwNTdiMGVhMmJhZjljM2ZlMTExOWMyMTQ3NjA5MTU4YTIwMzlmMjZjZWRmOGE0NGUwNDY5NTViYTdlN2NhZDlmNDhjYjQ5Mjc0ZmM1M2IxMDlkNzg5N2UwODBhZjI1MmU3ZGM2NDgwN2MyNzZiY2Y2NjhkMmNkNTA1YzljZThlNTg0NjA5ZDI5M2ViZDJhNDUxNWJmYmFmNzhjNDEzZDZlMjlkYzkwOTc0ZGIzOGI1NjRmZmU5YTQwZDM5NTVkYmE5ZjE5YjZmMzliZjk0MjY2OWNmODBlNDY3NmQ2YzEwZGY1NjZjYTEiOiI5MWExNmM3ZmUwMjllM2ZkZGFjZjA4MDlkZGU3ZDA0MWM0Mzg5NzdiODkxOTJlNmZlZDc2MDVkMDEzM2YzZDllODEwMzU1ZDE4NjQzMmY2NTI5YmQyYzRjYjlkYWRiNGZlZGY1MTI4Y2I0NWUyNWEzYTQ2YmY3NGVkOTNmMzEzNDlmNjRhNjlkYmU4NjU5MmQ3NmU0Mzc5NDdmMWMxZDcyNzBkMWNmZmU4MGFmZTEwYWU4NTIzNTQxOTYxZWFjZWUxODM4YzE2OGEyYWI3NjcwM2VhNDY3NGE2OGE5NmI4YTI5OGE2NzJmZmMxNDBlOThlNDUyZDUwMWZkNTdmMDAwIjoxMDQ6IjViNDA3MWE0YmUwNTQzYWFhNTliNTZkZTM1IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsOTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5YjdiNzAwZDk3OGUzM2FlOTMxMWIyMDYzNDdmNDg4ZTI4MzJmYWQ1Y2U3ZTYwMjZhZDVlMjRmYjQ3MTA0ZmNiIjoiMzdhZWY2ZTQyMDBjNmFiYzNkMTYxZGFhZjlkZDZlZGUwMDJjZThjNjNkOWVkNTRlOGFjNTZiZGM4ZDM2OTA2YmVhNjYzZDI4NTdkOGQ1NDMxNjZiYTE1MDgyNzczNWVjNzhlMzdmOTJlNjgyMjc1ZTI2OGQzNzdiMTg4MDk3MGRmMjMyMTYyZTU1YzkzMTE4ODJmODg5ZTdkMTgzZTVjZjQ5NzI2OTFjODVmODFjNDdlMTIyNGI5Yzk3ZWUzOTYzZDc1YzZhMDMyMjcwYWQ2ZDcxM2M5OTk5MTNmMGI1OGEyZDRmNDJiODVhM2IwYjQwNTQxYTMxMzk4Y2RmYjRiMCI6ImQwYmJjMjg0YWY3NjdhZjlhMzFiODYzZDY2Y2I2MTM4IjoiZGZiODdhNjVhYjJkOTlkN2Q3NTMwNDJhYTQ3NDQ4YWQ4MzBlNTQ2ZDI5OGQ2YWQ1MmI4NTIwN2JiYjBjYmU4Y2YzY2RiMTJiMzU0NGYxZmMyMjhmZGFlMDRhMjQxYWJmOWU3MWRlOGFlMTRmMmRlMmMyNjE0NjljMzgzYzY4MmUxMzU4MmUwN2NkZGIxZWQ5YmZmMWZkMmFhMGJlNzk3ODA5NmE5MTQ2NzZkZmJlN2JlYzZlZGQ5MjczNjJmNjU2Y2UxZGU4NjIyOWJjNTExY2ZlYzRjZGE3N2ExZTc2MWU3YWI4NjY0ZTRkZjA4Y2I4MjBlYmRiNjA0YzJjZGJiMCI6ImRjZDU1NzVkOTRmZmZjNjQ3ZDRjMDgxZTNjZTAzOTI4NjUxNDE5YTMyYWRhMmFmMDJkZTJmNThkNjhmYTk4ZWIxZmQ1ZWY2NzE4NzU3MTlhOWM2NWI5ZWNjNjk1MTM0MDhhNzlhMGE1ZDU3Y2FiZDA0ZjhlNjUxZjViOGZjMWZmNDJjZTU4ZDhhMjEyYWMyYmNiODNjNWM1M2M1NDJjMjgyNTUzYTYyYjRlM2Q3ZDRmMDQ5YWIxMzE3MjczOWEwZjQ2ZTBhMmZkOWFlYzU0ZWIwYzg0MTQxYzZiMzQxNzgzNzU0MzcyZGY2OWQzOWU0OGNjMjRlYjNkOWRkYjIxYTkiOjk2OiI0YTdhYzc5ZGI5NGIyNzQ2OWI5MjM0M2EiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCw5NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6ImNlMTVlNjFlZGQ5MzIwY2VhY2JmMzk4NGQ4N2M3MDcxNTljYWE3MzhlN2U3NjI4NWJlMDBiNWE5NTk1NGI1MjMiOiI4YWY0YTdkOTI0NDFjZTkzMTgxNWZhNGUyNGQ2OWY2NjI1NmZlYzdlNjJmNzlhMDI5YjY4NGI1ZGIzMDRhNDZiMmEzZDNhN2VlOGQ2YjdhZTM4Y2FhN2RlNTI2ZDVjMGYyOGRjNjVhMDkxM2EzODNiN2VlMTY0MGNiZTI0OTk3YmE5NWI5YjEyZmExZTljZTlmOTEwMGQ4ODNjMTZiNjI4NmRjZTE3ZTM4MWFmMTUxMTNmNTYxOTdjOTdmZTZiNDViZTAwYTNkZjA1MDQ1ZjQ3NjgyOWQ3YjMwMzIxMWFjOTdjZjk4OWExOGMxNmUyN2ZiZjIzNTcwZDlkMThmMDRiIjoiYjEyNjljODQ5NWVhMTQ2OWZmNDFkODE1NGFlNjc2NWUiOiIwYWQyNmEwOGE1Y2MyZWM4MjUzNDdkN2ZmZDVhYWM3OTVlYjY4YWE3ZTIyOTcwZDk5MWM4NjNmYTZkMWZhNzIwMTM3YWE1Y2RlNGUzODI2MjVhMDAzOGU2ZWQ3MmRhM2I1MDAzYzFiMmE5NTNjMmIyMTM4ZTBjZjg3MGNjYTRhZmI1OTVjMDQ1MWFhNzkzZmIwYTJiYzQzODM0YTBhY2ExZTc2MDU5MGNjYTc2NWFkNjcyZWFkOTc1OTkzZjgyYWU2NzY1YzVhZmJkZGM2MDYyZDdjNGJhYmViZjY1MGFiMDk3ZGIxYTFkOWEyYTk5ZThmZDJlMGViOGE3YjkxNmY2IjoiYWQwYWI0ZTc3MjU3ODY2ZTRhNTdjZjQ0ZmE0MDQ5NDI4ZTU2YTZlOGI4ZmQ0N2I0Y2QwMGJmY2U4NGZhOGY1YTQzZjFkZjIwNjFiMGEzNzMxMWI0YTE0MzZiYWQwZDYxZDUyY2VkNWUyNjJlZDQxYTdlYjEyNWQ2MWNlYzJlM2ZiYWE5NWU1MzNiNDNmMzE4MDQ4MDk2ZWJjODQ2NmYwY2Q2MDliYjVlN2MzZmM2ZTU3MDFhYWNlNTQ2NjE4YTE3MGY4OGMwYjdlZDc2YjYzNzU5Y2E0ZTRiOTMxYTg2YWMzNzlkZDEyYWQyY2JhN2Q0N2ExOWEzYWU3YzI0MmZiMCI6OTY6ImZiMWU5ODhmOWM5NzM1OGExN2UzNWU2ZiI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDk2KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYWVmMjRiODIwNWQ0MDg1ZDk3ODUwNWYwNDcyNDI5M2MyODE5ZWY5ZjNmMDNhNmM3NTgwNzg2OTBmYzRiZjdjOCI6ImRiMjY0NTMxNzBkYjJmOTg0MzEyZTBjZjk2MWQxYTdkZjExNTRmMDUyNWMzMWYxNjZiZTVjOWY1MTY3MzY1MDFmOWYyZGQ4MDk2YTY5YjY0NDE4ODhjZTI3YWFjZWFjYjBiMzY1YTM4ZTRlMDFlMmUzNDAyN2MwMjMyMDZlODE0ZjIyZDQ2ZmQyZmE2OWY4NzUwOWRkY2VkNGI4ODUyYTc2YjI1MzJiOTJmMDY5YjhjOTIyYWMxM2IyYjdmMTljYjdjNTI0NjU3YTRlZTZlOTg5Y2YyNTk4YmVmNjc0YWEzMTU3Njc3Njg1M2ZiN2Y5YTI3MDRkNmIzZWU3ZmJjYmIiOiI4MTQ1NmJhYTMzN2MzZGZkMTYyZDljNWY3MmEyZTIxNiI6IjQ4NGE1ZjQ3NzI2NDNjZjc0Y2NkY2VkMGU1ZDgwODYyZjkzMDBmMjZhZTMxMzk5Njg2NDlkM2Q3YmI3NjFiMzEzZjJiYTYzNzk4YjIwNDBkMzk3YzNkMTU2OTI4NWZlZTg0OThmZDkyNTQ4NTFjMTViOThhZjViZDM1MWZhNzJlN2Q1NzRjNjJlZGUwZDcyOGUxMjc5ZThiNGU0Nzg0ZmQ2M2VhNzg1MWU5OWQxZDIzNTZiY2JmODY4NTI4ZjhkMGE5MGZjM2I4ODRlY2U2MzE2NDhkOTE2ZWM5N2FiYWRjYTFiMGRkNzY3MGU2YWQ0MjI0NTAyMTU3MDU4MmVjN2MiOiJkYTk1YzYxY2QyYmI4OGZlYTc4YzA1OWMyNTRkMmI5NDlkNGZjMjkxYzczYWMxNzhhY2U0NGMxZTZhMzM5ZjY0OTMxYzg1N2QzYTdjYjI3NmEwNDk5MzYyMGFkYjY5MThkZmQzZjkwODNlZGFkMzg0YThlNmMxZDQ3OTlkNTI2YTFjOTY5ZDhkZWIwZTI2NjdkNmQwNmY1NTliYWY5MTRiNDlmYzQ2MzI0NDUyOGFhNjUyMmQxOTY5OTA2NTQzOGQ5Mzk1MjFkN2Q3YmIxNDk4MzUyOThmMjA1NGJjYWFlNmQ3ODZmNmRkZTEzM2I2NDA2OTdhM2QzN2M2OTc1NzlhIjo5NjoiYmMxYzFjYmNhZDJlMWE2NmFjZTA3OWEyIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5Njg1YWVhOWFhZWJiZDY5MWU2Nzk3NzkwMzQ3MjkzMDZkNTg4N2JlZTRjMWY5MGY2ZWUzYTM5N2EwZmYzZWNlIjoiYWUzYjJmYTFlMjA5ZjcyYzE2N2ViMTZiYzE1Yjc2NjliODdkNGFiNTE2ZTQyODE1NzgxMGI4N2E4M2U5MGQ1NmUyNjdiZDQ5OTY1MjJiNWIyMmMyYTM0OWQzNzY1Y2EyN2VhMjcwNTdkZDcxZjdjMThkZGQwNTMwMzNiZDc4MGI2Y2I2ODlmNDhjMzgzZTljNzE3YjliMjY1Y2I5ZTMyYzcwYzRhN2Q4ZmI5MzNlOTg2ZDk5NmI1YWQ5MTRjZDY0NWI3NGM0N2FjM2EwZGU5NTJlZTNmYzczYWRhODNkODk2ZGE3Y2EwYjJhMGIxMGU0ZjcwMWZhMTNjYmE5ZWM1MCI6ImIxYmMxNDA1MzFhZThjNjllMmZmYzc4NGUwOTg4MDM4IjoiMjk0ZmY4NThmYTZlZmM4MmNhM2JlNGQwNTMzMmJiYjk1MWE3MWE3ZGRmYTRiNzg0NzJlMTU4MmI0NDUzMTJlZWMxMTc5M2Q4ZDZlMWU4NThkOWNiMDc4YjVmYzkwODNhYzhhM2UzYmQ4Mjk2NGNiMDdjMDg0NTA1Njc5MjIyOTlmNjhmZDQ3NjYzYzdhNzdjMjlmMmI1MzQ3ZjIyOTMwMTQzM2Q1YTc1MjYzMTU4YTBkODAwOTU4NTllN2U0NTQ3NmI5OWIyMzQxMjA0NmJmYmU0ZWFmZmY5Zjc4MjBiYTQ5OTE5ZDJjOTg3Y2YwMGMyODZjNzg0ZTc2NjlkOGZlOCI6IjY1NzUxMjhiNTc2ZTY4ZjdiMzcwOWUzMjViM2Q2MTY3ODNiNDJmZjdmNzYzMWViNjJiOTBjYjBjOGE4NmJkMzI0NzU2ZjQzYWY1M2MzM2NiZGFmOWNmNjRlYTk0Y2YxYjdmYWI1MDAzZjAwYzFkMDdmM2ZjOGViMTkzMWQ3NTlmOWM0MzQ3N2JhMjIzMTFhMTExNDg4MDkyYzQyYjc3ODZmYWNmNDJiODYxYTgyNGNkMWJjZGM2MDNhNzdkMTEyNTNmMTUyMDZhOTI5YTNlMTZlODczN2QwODBiOGU1ZjBkYTg4OTYyMjY5ODlhOTk2NGQ3MmU0OTExODcyNTA0NzIiOjY0OiJmNzhjNGRkMzdjMDZiMTk3IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiIzYWRmMGRhMjQzOTRhOThjN2JlYWUwMWQyOGYyNjFhOWNiZDg4N2FlZWVjYzBjMjllODQ1NDAyNjRkNWE2YmFkIjoiOGNmMDIzZDcxN2IwZjgyZjJiODE3NTBiNTNmYjY2NWMxYzkwZjQ3NDBhZjRhMzUzNGIzNmI4NDdkZjMzYmE1ZWVjMTllYjI0ZWFkNzBhNGI2MTNhODI1NzI4NzgyMTYxODFkNTliMGM0YzRkZjk5YmUwOGQwMjFjZjE4MjcyNGQ4ZmY1ZWM0ZTg1ODg0ZDBmNjljMTYyMzhmYmJkYmM1NTI5ZmZjYzRlNDE4NDA1ZTRlOTUxMzlmNzlkMzExNWExYWM1NjgyMGNkMzlmYzQxM2FiNzJmN2Q0NDdmOTQ3Y2IwNTQxZmMyYmUyNjFmMTI0NmMwYTc4NjE5OTAxM2IyMiI6ImFkNDEyODg4MTc1NzczMTZkZjJkODgxYWM5M2ZjZGVmIjoiYWQzM2NlOTIyMzcyZmJlMzUzMWMwZGVjZTY5Zjg1ZjE4ZWIxYmJmYjA5YTE3ODQwMzgzMjMwOGRlMGU1NGIxMDEwZGIyNjM2YzRiN2Q5Y2FhNDc4MTM4ZjYxZGI1MTQ5YzlmZDdmM2I0NWI3YTE4NzY3MjlmZTY3NjIyYTM3ZjBiMzIyZWY5Y2Y2MDQzYjMwMWE1ZDRjODFlNmYzNDdkMjJiZDNlNDA3MjIwNTlkM2JlOTQ1ODQ1YzZiMDYyOWZiY2ZjYWY4ODVjN2YzOTNhYTgxZjI0MmM0OGM2MWE0Mzk1NzQ3NjFlZjZiNjcxOTcyY2FjNjY0NDAzMjUwNzUwZSI6IjlkNDY1ZTljNDIyODMyMzk0NmIxMjYxODkyMjQzZDg0NTVlZGI5ZWI4NjMzZDAyNmQ0MDMzZmEzOTY1ZDIwNzMwOTc5YmE2OTUyYzBmNmYyYzU3NjhmMDNjMTkyNTZiNjRiYzc1OWQyZTdiOTI0MjRiYmM2NjgzMDg1MDRiYTM0Mzg0YzJiYjM3YmFhZjkxYTNhNGYwOTUyYTA1MGEzZDY5ODUzMTQxYjQ5ZTg2ZWRhM2JmMGM0ZGI0ZWJjZDFjNDFlN2YxM2VjYTIwYmY1NzRhNDdlYzQ1YjhjOThkZWYxN2MwNzQxODA1YmY4ZjM3OTIzYmEyYjUyMjE0Mjg1NzgiOjY0OiI1MDc2MThjZWM2ZDAzOTY0IjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsNjQpICMyCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiI5ZWY2NGI0MTMyZGI1NDY2ODU2OGUyYWU2NmFiNjFmNjJhODIwYzcwMDJhNjdhN2U0MjAwNjI4MGEzNzNmZWJhIjoiNGI5NmRjZTc1MzI3MzE4OGM0Y2NhMzM4NmE3NDE1ZDVkOTI2Mzc1NzM3NmUxZjMyNzk3ZGY0Nzk5MmU5MmUxYmMwYWIwODMzMzYzYjNhY2ZmZGUyMjYwMmQ0ZTQ3MzA3YmM4ZjI1Mjk0NDQxNGExNWUxMzk4NjkzZmQzYjhiZjRkODEwMWNkY2Y3MGNlMmM5ZGU4Y2I3ZjViYjE3Y2Q4M2YwOWIxYmM3OGJhMDdjMzRiOTIxNGUyNTBjNTk0MGU5Nzk0MTk5Y2IzOTIzMDkwMjdkNWFiNGYzMmI1MWM1MzNkYjY3MzIwMjRiZDQxMmYyY2IwYzUxNzhkNTI5NmFhNSI6IjA3YTg2ZGJlMmNjZTA0MGVjY2RhZDc5YjNkMjExZWNjIjoiYWY3YTc1NzQ4ZWUyOTMwMTViNjAwY2E4MmNjYzc3MThmNGVjYzIwYzNhMjM1N2VlMDJmYjcyNjMzMGEwZDc5Y2E4YmI5Nzk3OWJjMGM4OWY0YzYwZDcxNTRmOGJkMjliYTZlYzVmMmY0YmUyODZlYThhMjU4Y2Y2YmQzOWI0ZjQyZDZkYjhlNzBjOTllYzNhZjI2YmI0ZDgwMDNkYzZmZDBmZGZiYmM2MjBkNTExZDRkNWYwOWRkZjk3NWExNjYzYWMyOTc5YWUwOTc4YjBiYzFlN2JmY2Q2NjBhZTRhYzdmMWE4ZjZkOGVlMzU3NTJlZDU5YTYwNGYwN2RmZGE1MyI6ImUzZTg2MjE0NmI2ZmI0OGIwMWFiYWJjNDYyZGQ1NjAyOThlZWE3YmZlNWYzMjQ4ZTI4YTkwOGQxZGUwOGM3ZTkxZmNmNjM5MjJjMzk0ZTdhNTFiNjRmNDM4MjIyNTA5M2U3ODU5OGMwNTBlNTg4ZmY0YWQzOGYzZTgzZGMwN2I3N2NlNTY5YzZhYjhmOGE5Y2IwMDU2YjMxNTVhYTE1MDNjZWJlYjY0Yzg2ZDZkOWNkYmIxNzhlYTlhMDFhOGJhMzNhMWM0OGJlYjkyZWU0Y2Y2MGU3ZGVkZjk4NjAxOWUxOTA4OWNkMTg2Yzk4YzIyOWIwZmY0MmM5ZTFhY2E1NzEiOjY0OiI4NjE0YzIxNjA1NWMwNjYwIjowCisKK0FFUy1HQ00gTklTVCBWYWxpZGF0aW9uIChBRVMtMjU2LDEyOCwxMDI0LDEwMjQsMzIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQUVTOiJmMTRhYzc5ZjM1YmM1YTY4NTQzM2VlYTViYjdmZDY5ZmM5NTlhYWJkYTI0Y2JkOGI3Nzk1ZmIyZTQxZjkwYWIwIjoiOGEyMGRhMTQ4MTkwNzk5NjBiNzdlZDVlNTQ4ZDBhYTBiZGNmZmI3NTI4MTdjMWFiZTQxOTVlNjEyY2ZiYjU4YzhlNWE4YWY2OWY3NWJhZDEwZWU4YWZkZjBiMGQ1YzQ2YzRkYzExYzMyYmZmMTZkNWU3ZTgyZTc3ZmQ4MGU0NzVjNmE1YTBiZTM2NzE4YWYyMzI2OTdhYjIyMzE0MzA2YjhlZTMyNDg0YjM0NjFkYTY1NzcxMGMwNjE3MGU4MGE2YTg4NDRmODk4YzJiZTI5MzY2Yzg0MzBmMjM5MmQxMDBmZmQ0MTk2MDNjYmNlNDA2ZGM3MzE1NTc3ZTZlOWVlMiI6IjM1M2UxZDA4ZWRjZTQ0Yzk2NjQzMDUxM2NiN2EwMzgzIjoiY2IxZGRlNGZmNWE2ODY3MDM4YzE3MDE5MmZjMmQyOTJmNWJiMzQ5ZDViOWE5MDNjZjNkODhjMDljZTc4ZmIxZjRhNzc2ZmY3NTg4YTI1YWJiNWU1ZjZhNDQ3OTFkNzI5NmFmZWYzZjMyZWQzMWRiMWRlZjM3ZGQyNWJlMDU3MGEyMDQ5NTUxMjFmOWM2NWI3OWEzZWE4OGZjNDUyZGJjYjgyNzE5MjQzYzExYmMyN2UzNDA4YWRmODAyYjZlOGI0ZTcwMWVlNGU5ZGZkMTQwY2IzMjc3YmY2MDViZDVmYjc1N2QyMzI1Zjc4MDVmYzZmMGQxZWE1YTYyMDdmYWM1ZiI6IjQ5YjVlNGVhMDQyMTAzNGMwNzRjZGU2N2RkMzlhMDMxMGMzZjMxZTgxMzg2NzJiYTJlY2MwNzc3YmU1NDJmMWM2NTI5ODM2ZDUyMDZiNzlkYWM4M2Q5NmFhYjU2Nzg3YTM1YzU4NGIzMTIyOGYwMDdmMTE2MzAzMjhjM2Y0MGE1N2JlMzc0ODc2ODllZTViYWJiNTc2ZTdkMTRmZjBmMWYxYmE2ZTRiZTExNjM3MzUyYTQzMzYzMjc2ODEwNThiOTlkZjJlNDRmOTc3MmRlNGUwZTQ1NmQyZTM0ZGVjNWVlYjMzNWIyMzhlODYyODQxZDE2NmUwNjEyY2MwZjE4ZjMiOjMyOiI4OGFlZDY0MyI6MAorCitBRVMtR0NNIE5JU1QgVmFsaWRhdGlvbiAoQUVTLTI1NiwxMjgsMTAyNCwxMDI0LDMyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0FFUzoiYjU1YWM5MDllNzM5ODllMzEwYWUzN2QxM2M1NGJiZDVhMTI2ZjQxOWEzYjAxYTJhZDg5NjFkODliZDI0N2Y4MSI6IjhhNjYzZThiMjFhMDI3YzRhOTU0NWQxNDVkNDJkOWM2N2I0ZmNkNWQwZTM5YWE2ODgyMmFlZGJkNjA5ZTJjNjgxZjYwZTYzMTUwMzUzMjFkZTczOTg1OGIyYjA4MmJjMDU1NTFmZTliODQ1NmMyZTg5YzYxNTEyODJjNjA2OGI5MTVlYWU1NzYyZTRkNmQ3NjVkNjY3ZGU1OGEzMTVlMDYxYjNkNjAwMzVhZGE1MGY1OTI1OGViNmUyYTFjZDZiNTJlZWE3ZWI5ZDQwNGZkOTZlNzFmMTlmZWZmNjViNzRhNGI0ZjA3MDYxYWRmN2MxYjBlNTRlMmVjZTdhMmNkNDkiOiI5MzI4YWJhYjBkM2Y2M2M3NWRkYWZkODU1OWQ5NmI0ZiI6ImNiYWUyMGFhMTk5NmFiYjYyNDcxYWFjOTFjZDc4MDgwOTUzZmJlM2IxNjVkNGM5NDM1ODMyZWYxMTA2ZTdlMzQyNGRiODg1MGY0NGE0MzFjMjg5YWI0ZjJiYmJlYTllNWMwYzdhYWYyZThkZTY5YzBjZWQxNzYyODM2NjJjYWRkMjgwZDhmZGEwYzg1OTU1MWYwZjkwODkzY2E1NzY5NWM5NTgwM2ExNTQ2ODI2OTIyYWM3ODcwM2Q3Y2NhZTI4NWI3Y2NkNGJiYWI1NTE3NTZjY2NjNjg2OWRjZjM0YjZhZjhkOGI4MGMyNWM2ZmIxZDJjYWE3ZjI4MTYxZmI4NTQiOiI0NTdlMTNmZjRlZWFhYWU3NWQxNGJiZjFiZmY5MTcwNmMzMTY4YjliMTQ2YWVkMjlkYmUzMWIxMmFkOTBjMWMxNTg4MzNiZTk1NzAxMjI5YWM2ZTRhMTM5OTdlMGEyZDk2MWQ0YTAwMjFjNGQ4OTIwZWM1NGE5YTkzNWU1ZWE3M2IxN2U4ZmE2MDU1OWRmNzZiZDA3ZDk2NmRmYTdkODZkMWE3N2EzMTMyMjhiMmFlN2Y2NmI1YjY5NjcyNmMwMmFmMmM4MDhiZjc1ZTBiOTU5MWEyMjBlNzYyZjU3YzY4MGNhNjhmMjBiMmI1NDEzYjA3NzMxYmJkNDlkZTAzOWJmIjozMjoiNWRlMDQzNGEiOjAKKworQUVTLUdDTSBOSVNUIFZhbGlkYXRpb24gKEFFUy0yNTYsMTI4LDEwMjQsMTAyNCwzMikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9BRVM6IjE0NzdlMTg5ZmIzNTQ2ZWZhYzVjYzE0NGYyNWUxMzJmZmQwMDgxYmU3NmU5MTJlMjVjYmNlN2FkNjNmMWMyYzQiOiI3YmQzZWE5NTZmNGI5MzhlYmU4M2VmOWE3NWRkYmRhMTY3MTdlOTI0ZGQ0ZTQ1MjAyNTYwYmY1ZjBjZmZiZmZjZGQyM2JlM2FlMDhmZjMwNTAzZDY5OGVkMDg1NjhmZjZiM2Y2YjlmZGM5ZWE3OWM4ZTUzYTgzOGNjODU2NmE4YjUyY2U3YzIxYjJiMDY3ZTc3ODkyNWEwNjZjOTcwYTZjMzdiOGE2Y2ZjNTMxNDVmMjRiZjY5OGMzNTIwNzhhN2YwNDA5YjUzMTk2ZTAwYzYxOTIzNzQ1NGMxOTBiOTcwODQyYmI2NjI5YzBkZWY3ZjE2NmQxOTU2NTEyN2NiY2UwIjoiYzEwOWYzNTg5M2FmZjEzOWRiOGVkNTFjODVmZWUyMzciOiI4ZjdmOWY3MWE0YjJiYjBhYWY1NWZjZWQ0ZWI0M2M1NzQxNTUyNjE2MjA3MDkxOWI1ZjhjMDg5MDQ5NDIxODE4MjBkNTg0N2RmZDU0ZDliYTcwN2M1ZTg5M2E4ODhkNWEzOGQwMTMwZjdmNTJjMWY2MzhiMDExOWNmN2JjNWYyYjY4ZjUxZmY1MTY4ODAyZTU2MWRmZjJjZjljNTMxMDAxMWM4MDllYmEwMDJiMmZhMzQ4NzE4ZThhNWNiNzMyMDU2MjczY2M3ZDAxY2NlNWY1ODM3YWIwYjA5YjZjNGM1MzIxYTdmMzBhM2EzY2QyMWYyOWRhNzlmY2UzZjM3MjhiIjoiNzg0MWUzZDc4NzQ2ZjA3ZTU2MTQyMzNkZjcxNzU5MzFlM2MyNTdlMDllYmQ3Yjc4NTQ1ZmFlNDg0ZDgzNWZmZTNkYjM4MjVkM2FhMWU1Y2MxNTQxZmU2Y2FjOTA3NjlkYzVhYWVkZWQwYzE0OGI1YjRmMzk3OTkwZWIzNGIzOWVlNzg4MTgwNGU1YTY2Y2NjOGQ0YWZlOTA3OTQ4NzgwYzRlNjQ2Y2MyNjQ3OWUxZGE4NzQzOTRjYjM1MzdhOGYzMDNlMGFhMTNiZDNjYzM2ZjZjYzQwNDM4YmNkNDFlZjhiNmExY2RlZTQyNTE3NWRjZDE3ZWU2MjYxMWQwOWIwMiI6MzI6ImNiMTNjZTU5IjowCisKK0FFUy1HQ00gU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworZ2NtX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5jYW1lbGxpYS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5jYW1lbGxpYS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzM5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmNhbWVsbGlhLmRhdGEKQEAgLTAsMCArMSwyMTUgQEAKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEgKDEyOC1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6MTI4OiJmNTU3NGFjYzMxNDhkZmNiOTAxNTIwMDYzMTAyNGRmOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMyICgxMjgtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6ImRlZmUzZTBiNWM1NGM5NGI0ZjJhMGY1YTQ2ZjYyMTBkIjoxMjg6ImY2NzJiOTRkMTkyMjY2YzdjOGM4ZGJiNDI3Y2M5ODlhIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzMgKDEyOC1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOTFhYWZkMjU1IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoiZDBkOTRhMTNiNjMyZjMzN2EwY2M5OTU1Yjk0ZmEwMjBjODE1ZjkwM2FhYjEyZjFlZmFmMmZlOWQ5MGY3MjlhNmNjY2JmYTk4NmVmMmZmMmMzM2RlNDE4ZDlhMjUyOTA5MWNmMThmZTY1MmMxY2ZkZTEzZjgyNjA2MTRiYWI4MTUiOjEyODoiODZlMzE4MDEyZGQ4MzI5ZGM5ZGFlNmExNzBmNjFiMjQiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNCAoMTI4LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNiI6MTI4OiI5ZjQ1ODg2OTQzMTU3NmVhNmEwOTU0NTZlYzZiODEwMSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM1ICgxMjgtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6IjI4ZmQ3NDM0ZDVjZDQyNGE1MzUzODE4ZmMyMWE5ODI0NjBkMjBjZjYzMmViMWU2YzRmYmZjYTE3ZDVhYmNmNmE1MjExMTA4NjE2MmZlOTU3MGU3Nzc0YzdhOTEyYWNhM2RmYTEwMDY3ZGRhYWQ0MDY4ODY0NWJkZCI6MTI4OiJlODZmOGYyZTczMGM0OWQ1MzZmMDBmYjUyMjVkMjhiMSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM2ICgxMjgtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiMmU1ODJiODQxN2M5M2YyZmY0ZjZmN2VlM2MzNjFlNDQ5NmU3MTBlZTEyNDMzYmFhOTY0OTg3ZDAyZjQyOTUzZTQwMmU2ZjRhZjQwN2ZlMDhjZDJmMzUxMjM2OTYwMTRjMzRkYjE5MTI4ZGY0MDU2ZmFlYmNkNjQ3IjoxMjg6ImNlYWU1NTY5YjJhZjg2NDE1NzI2MjI3MzFhZWQzZTUzIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzcgKDE5Mi1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIiOjEyODoiYmE5YWU4OWZkZGNlNGI1MTEzMWUxN2M0ZDY1Y2U1ODciOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjOCAoMTkyLWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoiOGY5YzBhYTI1NDk3MTRjODhiYjI2NjVlOGFmODZkNDEiOjEyODoiNzgzY2ZmNWM1YWNhNzE5NzMyMDY1OGE3NDI3OWFiMzciOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjOSAoMTkyLWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOTFhYWZkMjU1IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoiMGYwMDllODg0MTBkODRhZDkzYzkwZDU1ZWZiZTIwZmZhODU1NDkyZjRkZmQwZmI0ODVjNGYwMmY1MzZmZWZmYmI0ZDk2NzcyOWU1YzY3ZjFkZTA3NTAyNTVjYzUwMDcxNmJhNDgzZWIzYjBhMmJmNjA3YWYyOGY2YTYwYmIyZTkiOjEyODoiOGQ2NDVhMGIwZTQ4ZDNjM2I2MGEwMTQxNTdjYjQ5YjQiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTAgKDE5Mi1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiMGYwMDllODg0MTBkODRhZDkzYzkwZDU1ZWZiZTIwZmZhODU1NDkyZjRkZmQwZmI0ODVjNGYwMmY1MzZmZWZmYmI0ZDk2NzcyOWU1YzY3ZjFkZTA3NTAyNTVjYzUwMDcxNmJhNDgzZWIzYjBhMmJmNjA3YWYyOGY2IjoxMjg6IjAxYjE1YmI1YWI2ZmFjMGM0MjIwMTRlOTFlYWNiZjJiIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzExICgxOTItZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOiI2NzhiM2RjYjI3MGZhYTIwNmRjNWY2ZmJiNTAxNDk5NmU4NmQ2ZjNlMzVjZGNkZmViMDNiMzdiOWIwNmZmNGZmMjY4MjI0ODgyM2JkM2M4NDEyNGRjNzZhZjdiZGUzZGQ0NDBjMjI4YjVlZmJjNzk1ZGQ4MGRmYjYiOjEyODoiZjg3NjE0M2Q5MzMyMTRhNTAzNWZmMGJiOTZmZjY1MGIiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTIgKDE5Mi1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiOTczM2VhNTY3YzNiYWQyMjU5Y2NkNjNlZjcwMTJmNWRlNzA5ZTUwYjFmZGMzMWYxYTE2ZGIwMmVkZTFiNjZmMTFkY2M0ZDk1M2YyZDRkNDY3MTU4N2I2NTg4MmFmYmY5NTQ1ZmRiNmRlYWIyMjQxM2QwOTFiNzAzIjoxMjg6IjRiNzJlNTIwYjI1MjFlNjNkMjQwZWQ1YzkwMzIxNmZhIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEzICgyNTYtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IiI6MTI4OiI5Y2RiMjY5YjVkMjkzYmM1ZGI5YzU1YjA1N2Q5YjU5MSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNCAoMjU2LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IjNkNGIyY2RlNjY2NzYxYmE1ZGZiMzA1MTc4ZTY2N2ZiIjoxMjg6IjI4NGI2M2JiMTQzYzQwY2UxMDBmYjRkZWE2YmI2MTdiIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE1ICgyNTYtZW4pCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2VuY3J5cHRfYW5kX3RhZzpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOTFhYWZkMjU1IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoiYWQxNDJjMTE1NzlkZDk1ZTQxZjNjMWYzMjRkYWJjMjU1ODY0ZDkyMGYxYjY1NzU5ZDhmNTYwZDQ5NDhkNDQ3NzU4ZGZkY2Y3N2FhOWY2MjU4MWM3ZmY1NzJhMDM3ZjgxMGNiMWE5YzRiM2NhNmVkNjM4MTc5Yjc3NjU0OWUwOTIiOjEyODoiYzkxMjY4NjI3MGEyYjk5NjY0MTVmY2EzYmU3NWM0NjgiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTYgKDI1Ni1lbikKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZW5jcnlwdF9hbmRfdGFnOk1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6ImFkMTQyYzExNTc5ZGQ5NWU0MWYzYzFmMzI0ZGFiYzI1NTg2NGQ5MjBmMWI2NTc1OWQ4ZjU2MGQ0OTQ4ZDQ0Nzc1OGRmZGNmNzdhYTlmNjI1ODFjN2ZmNTcyYTAzN2Y4MTBjYjFhOWM0YjNjYTZlZDYzODE3OWI3NyI6MTI4OiI0ZTRiMTc4ZDhmZTI2ZmRjOTVlMmU3MjQ2ZGQ5NGJlYyI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNyAoMjU2LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6IjZjYTk1ZmJiN2QxNjU3N2E5ZWYyZmRlZDk0ZGM4NWI1ZDQwYzYyOWY2YmVmMmM2NDk4ODhlM2NiYjBlZGVkYzc4MTBjMDRiMTJjMjk4M2JiYmJjNDgyZTE2ZTQ1YzkyMTVhZTEyYzE1YzU1ZjJmNDgwOWQwNjY1MiI6MTI4OiJlNjQ3MmI4ZWJkMzMxYmZjYzdjMGZhNjNjZTA5NDQ2MSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxOCAoMjU2LWVuKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9lbmNyeXB0X2FuZF90YWc6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoiZTBjZGRkNzU2NGQwOWM0ZGM1MjJkZDY1OTQ5MjYyYmJmOWRjZGIwNzQyMWNmNjdmMzAzMmJlY2I3MjUzYzI4NGExNmU1YmYwZjU1NmEzMDgwNDNmNTNmYWI5ZWViYjUyNmJlN2Y3YWQzM2Q2OTdhYzc3YzY3ODYyIjoxMjg6IjU3OTE4ODNmODIyMDEzZjhiZDEzNmZjMzZmYjk5NDZiIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEgKDEyOC1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiJmNTU3NGFjYzMxNDhkZmNiOTAxNTIwMDYzMTAyNGRmOSI6IiI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMyICgxMjgtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkZWZlM2UwYjVjNTRjOTRiNGYyYTBmNWE0NmY2MjEwZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiJmNjcyYjk0ZDE5MjI2NmM3YzhjOGRiYjQyN2NjOTg5YSI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzMgKDEyOC1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNjE0YmFiODE1IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoxMjg6Ijg2ZTMxODAxMmRkODMyOWRjOWRhZTZhMTcwZjYxYjI0IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5MWFhZmQyNTUiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNCAoMTI4LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDBkOTRhMTNiNjMyZjMzN2EwY2M5OTU1Yjk0ZmEwMjBjODE1ZjkwM2FhYjEyZjFlZmFmMmZlOWQ5MGY3MjlhNmNjY2JmYTk4NmVmMmZmMmMzM2RlNDE4ZDlhMjUyOTA5MWNmMThmZTY1MmMxY2ZkZTEzZjgyNjA2IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiI5ZjQ1ODg2OTQzMTU3NmVhNmEwOTU0NTZlYzZiODEwMSI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM1ICgxMjgtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiIyOGZkNzQzNGQ1Y2Q0MjRhNTM1MzgxOGZjMjFhOTgyNDYwZDIwY2Y2MzJlYjFlNmM0ZmJmY2ExN2Q1YWJjZjZhNTIxMTEwODYxNjJmZTk1NzBlNzc3NGM3YTkxMmFjYTNkZmExMDA2N2RkYWFkNDA2ODg2NDViZGQiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiJlODZmOGYyZTczMGM0OWQ1MzZmMDBmYjUyMjVkMjhiMSI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM2ICgxMjgtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiIyZTU4MmI4NDE3YzkzZjJmZjRmNmY3ZWUzYzM2MWU0NDk2ZTcxMGVlMTI0MzNiYWE5NjQ5ODdkMDJmNDI5NTNlNDAyZTZmNGFmNDA3ZmUwOGNkMmYzNTEyMzY5NjAxNGMzNGRiMTkxMjhkZjQwNTZmYWViY2Q2NDciOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6ImNlYWU1NTY5YjJhZjg2NDE1NzI2MjI3MzFhZWQzZTUzIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzcgKDE5Mi1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiYmE5YWU4OWZkZGNlNGI1MTEzMWUxN2M0ZDY1Y2U1ODciOiIiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjOCAoMTkyLWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjhmOWMwYWEyNTQ5NzE0Yzg4YmIyNjY1ZThhZjg2ZDQxIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoxMjg6Ijc4M2NmZjVjNWFjYTcxOTczMjA2NThhNzQyNzlhYjM3IjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjOSAoMTkyLWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNmE2MGJiMmU5IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoxMjg6IjhkNjQ1YTBiMGU0OGQzYzNiNjBhMDE0MTU3Y2I0OWI0IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5MWFhZmQyNTUiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTAgKDE5Mi1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiIwZjAwOWU4ODQxMGQ4NGFkOTNjOTBkNTVlZmJlMjBmZmE4NTU0OTJmNGRmZDBmYjQ4NWM0ZjAyZjUzNmZlZmZiYjRkOTY3NzI5ZTVjNjdmMWRlMDc1MDI1NWNjNTAwNzE2YmE0ODNlYjNiMGEyYmY2MDdhZjI4ZjYiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjAxYjE1YmI1YWI2ZmFjMGM0MjIwMTRlOTFlYWNiZjJiIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzExICgxOTItZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiNjc4YjNkY2IyNzBmYWEyMDZkYzVmNmZiYjUwMTQ5OTZlODZkNmYzZTM1Y2RjZGZlYjAzYjM3YjliMDZmZjRmZjI2ODIyNDg4MjNiZDNjODQxMjRkYzc2YWY3YmRlM2RkNDQwYzIyOGI1ZWZiYzc5NWRkODBkZmI2IjoiY2FmZWJhYmVmYWNlZGJhZCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiZjg3NjE0M2Q5MzMyMTRhNTAzNWZmMGJiOTZmZjY1MGIiOiJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NTY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTIgKDE5Mi1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiI5NzMzZWE1NjdjM2JhZDIyNTljY2Q2M2VmNzAxMmY1ZGU3MDllNTBiMWZkYzMxZjFhMTZkYjAyZWRlMWI2NmYxMWRjYzRkOTUzZjJkNGQ0NjcxNTg3YjY1ODgyYWZiZjk1NDVmZGI2ZGVhYjIyNDEzZDA5MWI3MDMiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjRiNzJlNTIwYjI1MjFlNjNkMjQwZWQ1YzkwMzIxNmZhIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEzICgyNTYtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiI5Y2RiMjY5YjVkMjkzYmM1ZGI5YzU1YjA1N2Q5YjU5MSI6IiI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNCAoMjU2LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIzZDRiMmNkZTY2Njc2MWJhNWRmYjMwNTE3OGU2NjdmYiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiIyODRiNjNiYjE0M2M0MGNlMTAwZmI0ZGVhNmJiNjE3YiI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE1ICgyNTYtZGUpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImFkMTQyYzExNTc5ZGQ5NWU0MWYzYzFmMzI0ZGFiYzI1NTg2NGQ5MjBmMWI2NTc1OWQ4ZjU2MGQ0OTQ4ZDQ0Nzc1OGRmZGNmNzdhYTlmNjI1ODFjN2ZmNTcyYTAzN2Y4MTBjYjFhOWM0YjNjYTZlZDYzODE3OWI3NzY1NDllMDkyIjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiIjoxMjg6ImM5MTI2ODYyNzBhMmI5OTY2NDE1ZmNhM2JlNzVjNDY4IjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5MWFhZmQyNTUiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTYgKDI1Ni1kZSkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiYWQxNDJjMTE1NzlkZDk1ZTQxZjNjMWYzMjRkYWJjMjU1ODY0ZDkyMGYxYjY1NzU5ZDhmNTYwZDQ5NDhkNDQ3NzU4ZGZkY2Y3N2FhOWY2MjU4MWM3ZmY1NzJhMDM3ZjgxMGNiMWE5YzRiM2NhNmVkNjM4MTc5Yjc3IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiI0ZTRiMTc4ZDhmZTI2ZmRjOTVlMmU3MjQ2ZGQ5NGJlYyI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNyAoMjU2LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiI2Y2E5NWZiYjdkMTY1NzdhOWVmMmZkZWQ5NGRjODViNWQ0MGM2MjlmNmJlZjJjNjQ5ODg4ZTNjYmIwZWRlZGM3ODEwYzA0YjEyYzI5ODNiYmJiYzQ4MmUxNmU0NWM5MjE1YWUxMmMxNWM1NWYyZjQ4MDlkMDY2NTIiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiJlNjQ3MmI4ZWJkMzMxYmZjYzdjMGZhNjNjZTA5NDQ2MSI6ImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1NjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxOCAoMjU2LWRlKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJlMGNkZGQ3NTY0ZDA5YzRkYzUyMmRkNjU5NDkyNjJiYmY5ZGNkYjA3NDIxY2Y2N2YzMDMyYmVjYjcyNTNjMjg0YTE2ZTViZjBmNTU2YTMwODA0M2Y1M2ZhYjllZWJiNTI2YmU3ZjdhZDMzZDY5N2FjNzdjNjc4NjIiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjU3OTE4ODNmODIyMDEzZjhiZDEzNmZjMzZmYjk5NDZiIjoiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTU2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEgKDEyOC1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiZjU1NzRhY2MzMTQ4ZGZjYjkwMTUyMDA2MzEwMjRkZjgiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzIgKDEyOC1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiJkZWZlM2UwYjVjNTRjOTRiNGYyYTBmNWE0NmY3MjEwZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6MTI4OiJmNjcyYjk0ZDE5MjI2NmM3YzhjOGRiYjQyN2NjOTg5YSI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMyAoMTI4LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImQwZDk0YTEzYjYzMmYzMzdhMGNjOTk1NWI5NGZhMDIwYzgxNWY5MDNhYWIxMmYxZWZhZjJmZTlkOTBmNzI5YTZjY2NiZmE5ODZlZjJmZjJjMzNkZTQxOGQ5YTI1MjkwOTFjZjE4ZmU2NTJjMWNmZGUxM2Y4MjYwNjE0YmFiODE1IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg5IjoiIjoxMjg6Ijg2ZTMxODAxMmRkODMyOWRjOWRhZTZhMTcwZjYxYjI0IjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM0ICgxMjgtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiZDBkOTRhMTNiNjMyZjMzN2EwY2M5OTU1Yjk0ZmEwMjBjODE1ZjkwM2FhYjEyZjFlZmFmMmZlOWQ5MGY3MjlhNmNjY2JmYTk4NmVmMmZmMmMzM2RlNDE4ZDlhMjUyOTA5MWNmMThmZTY1MmMxY2ZkZTEzZjgyNjA2IjoiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiI5ZjQ1ODg2OTQzMTU3NmVhNmEwOTU0NTZlYzZiODEwMCI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNSAoMTI4LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6IjI4ZmQ3NDM0ZDVjZDQyNGE1MzUzODE4ZmMyMWE5ODI0NjBkMjBjZjYzMmViMWU2YzRmYmZjYTE3ZDVhYmNmNmE1MjExMTA4NjE2MmZlOTU3MGU3Nzc0YzdhOTEyYWNhM2RmYTEwMDY3ZGRhYWQ0MDY4ODY0NWJkZCI6ImNhZmViYWJlZmFjZWRiYWQiOiJmZWVkZmFkZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6ImU4NmY4ZjJlNzMwYzQ5ZDUzNmYwMGZiNTIyNWQyOGIxIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICM2ICgxMjgtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IjoiMmU1ODJiODQxN2M4M2YyZmY0ZjZmN2VlM2MzNjFlNDQ5NmU3MTBlZTEyNDMzYmFhOTY0OTg3ZDAyZjQyOTUzZTQwMmU2ZjRhZjQwN2ZlMDhjZDJmMzUxMjM2OTYwMTRjMzRkYjE5MTI4ZGY0MDU2ZmFlYmNkNjQ3IjoiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTY4MDk1MzlmY2YwZTI0MjlhNmI1MjU0MTZhZWRiZjVhMGRlNmE1N2E2MzdiMzliIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiJjZWFlNTU2OWIyYWY4NjQxNTcyNjIyNzMxYWVkM2U1MyI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjNyAoMTkyLWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiYmE5YWU4OWZkZGNlNGI1MTEzMWUxN2M0ZDY1Y2U1ODYiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzggKDE5Mi1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiOGY5YzBhYTI1NDk3MTRjODhiYjI2NjVlOGFmODZkNDIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIiOjEyODoiNzgzY2ZmNWM1YWNhNzE5NzMyMDY1OGE3NDI3OWFiMzciOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzkgKDE5Mi1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmZmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIjoiMGYwMDllODg0MTBkODRhZDkzYzkwZDU1ZWZiZTIwZmZhODU1NDkyZjRkZmQwZmI0ODVjNGYwMmY1MzZmZWZmYmI0ZDk2NzcyOWU1YzY3ZjFkZTA3NTAyNTVjYzUwMDcxNmJhNDgzZWIzYjBhMmJmNjA3YWYyOGY2YTYwYmIyZTkiOiJjYWZlYmFiZWZhY2VkYmFkZGVjYWY4ODgiOiIiOjEyODoiOGQ2NDVhMGIwZTQ4ZDNjM2I2MGEwMTQxNTdjYjQ5YjQiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzEwICgxOTItYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6IjBmMDA5ZTg4NDEwZDg0YWQ5M2M5MGQ1NWVmYmUyMGZmYTg1NTQ5MmY0ZGZkMGZiNDg1YzRmMDJmNTM2ZmVmZmJiNGQ5Njc3MjllNWM2N2YxZGUwNzUwMjU1Y2M1MDA3MTZiYTQ4M2ViM2IwYTJiZjYwN2FmMjhmNiI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiMTFiMTViYjVhYjZmYWMwYzQyMjAxNGU5MWVhY2JmMmIiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzExICgxOTItYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyI6IjY3OGIzZGNiMjcwZmFhMjA2ZGM1ZjZmYmI1MDE0OTk2ZTg2ZDZmM2UzNWNkY2RmZWIwM2IzN2I5YjA2ZmY0ZmYyNjgyMjQ4ODIzYmQzYzg0MTI0ZGM3NmFmN2JkZTNkZDQ0MGMyMjhiNWVmYmM3OTVkZDgwZGZiNiI6ImNhZmViYWJlZmFjZWRiYWQiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQzIjoxMjg6ImY4NzYxNDNkOTMzMjE0YTUwMzVmZjBiYjk2ZmY2NTBiIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMiAoMTkyLWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiOiI5NzMzZWE1NjdjM2JhZDIyNTljY2Q2M2VmNzAxMmY1ZGU3MDllNTBiMWZkYzMxZjFhMTZkYjAyZWRlMWI2NmYxMWRjYzRkOTUzZjJkNGQ0NjcxNTg3YjY1ODgyYWZiZjk1NDVmZGI2ZGVhYjIyNDEzZDA5MWI3MDMiOiI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMjhhNzI4YzNjMGM5NTE1NjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiOiJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIjoxMjg6IjRiNzJlNTIwYjI1MjFlNjNkMjQwZWQ1YzkwMzIxNmZhIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxMyAoMjU2LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIjoiIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiIjoxMjg6IjljZGIyNjliNWQyOTNiYzVkYjljNTViMDU3ZDliNTkxIjoiRkFJTCI6MAorCitDYW1lbGxpYS1HQ00gdGVzdCB2ZWN0IGRyYWZ0LWthdG8taXBzZWMtY2FtZWxsaWEtZ2NtICMxNCAoMjU2LWJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DCitnY21fZGVjcnlwdF9hbmRfdmVyaWZ5Ok1CRURUTFNfQ0lQSEVSX0lEX0NBTUVMTElBOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjoiM2Q0YjJjZGU2NjY3NjFiYTVkZmIzMDUxNzhlNjY3ZmIiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiOiIiOjEyODoiMjg0YjYzYmIxNDNjNDBjZTEwMGZiNGRlYTZiYjYxN2IiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE1ICgyNTYtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiJhZDE0MmMxMTU3OWRkOTVlNDFmM2MxZjMyNGRhYmMyNTU4NjRkOTIwZjFiNjU3NTlkOGY1NjBkNDk0OWQ0NDc3NThkZmRjZjc3YWE5ZjYyNTgxYzdmZjU3MmEwMzdmODEwY2IxYTljNGIzY2E2ZWQ2MzgxNzliNzc2NTQ5ZTA5MiI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6IiI6MTI4OiJjOTEyNjg2MjcwYTJiOTk2NjQxNWZjYTNiZTc1YzQ2OCI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTYgKDI1Ni1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImFkMTQyYzExNTc5ZGQ5NWU0MWYzYzFmMzI0ZGFiYzI1NTg2NGQ5MjBmMWI2NTc1OWQ4ZjU2MGQ0OTQ4ZDQ0Nzc1OGRmZGNmNzdhYTlmNjI1ODFjN2ZmNTcyYTAzN2Y4MTBjYjFhOWM0YjNjYTZlZDYzODE3OWI3NyI6ImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCI6ImZmZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiNGU0YjE3OGQ4ZmUyNmZkYzk1ZTJlNzI0NmRkOTRiZWMiOiJGQUlMIjowCisKK0NhbWVsbGlhLUdDTSB0ZXN0IHZlY3QgZHJhZnQta2F0by1pcHNlYy1jYW1lbGxpYS1nY20gIzE3ICgyNTYtYmFkKQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0MKK2djbV9kZWNyeXB0X2FuZF92ZXJpZnk6TUJFRFRMU19DSVBIRVJfSURfQ0FNRUxMSUE6ImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDgiOiI2Y2E5NWZiYjdkMTY1NzdhOWVmMmZkZWQ5NGRjODViNWQ0MGM2MjlmNmJlZjJjNjQ5ODg4ZTNjYmIwZWRlZGM3ODEwYzA0YjEyYzI5ODNiYmJiYzQ4MmUxNmU0NWM5MjE1YWUxMmMxNWM1NWYyZjQ4MDlkMDY2NTIiOiJjYWZlYmFiZWZhY2VkYmFkIjoiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiI6MTI4OiJlNjQ3MmI4ZWJkMzMxYmZjYzdjMGZhNjNjZTA5NDQ2MiI6IkZBSUwiOjAKKworQ2FtZWxsaWEtR0NNIHRlc3QgdmVjdCBkcmFmdC1rYXRvLWlwc2VjLWNhbWVsbGlhLWdjbSAjMTggKDI1Ni1iYWQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQworZ2NtX2RlY3J5cHRfYW5kX3ZlcmlmeTpNQkVEVExTX0NJUEhFUl9JRF9DQU1FTExJQToiZmVmZmU5OTI4NjY1NzMxYzZkNmE5Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCI6ImUwY2RkZDc1NjRkMDljNGRjNTIyZGQ2NTk0OTI2MmJiZjlkY2RiMDc0MjFjZjY3ZjMwMzJiZWNiNzI1M2MyODRhMTZlNWJmMGY1NTZhMzA4MDQzZjUzZmFiOWVlYmI1MjZiZTdmN2FkMzNkNjk3YWM3N2M2Nzg2MiI6IjkzMTMyMjVkZjg4NDA2ZTU1NTkwOWM1YWZmNTI2OWFhNmE3YTk1Mzg1MzRmN2RhMWU0YzMwM2QyYTMxOGE3MjhjM2MwYzk1MTU2ODA5NTM5ZmNmMGUyNDI5YTZiNTI1NDE2YWVkYmY1YTBkZTZhNTdhNjM3YjM5YiI6ImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiOjEyODoiNTc5MTg4M2Y4MjIwMTNmOGJkMTM2ZmMzNmZiOTk0NmIiOiJGQUlMIjowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZ2NtLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmM3ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbgpAQCAtMCwwICsxLDEyNCBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9nY20uaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfR0NNX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGdjbV9lbmNyeXB0X2FuZF90YWcoIGludCBjaXBoZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2l2X3N0cmluZywgY2hhciAqaGV4X2FkZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgdGFnX2xlbl9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfdGFnX3N0cmluZywgaW50ICBpbml0X3Jlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzI1N107CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZF9zdHJbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHRhZ19zdHJbMTI4XTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgdGFnX291dHB1dFsxNl07CisgICAgbWJlZHRsc19nY21fY29udGV4dCBjdHg7CisgICAgdW5zaWduZWQgaW50IGtleV9sZW47CisgICAgc2l6ZV90IHB0X2xlbiwgaXZfbGVuLCBhZGRfbGVuLCB0YWdfbGVuID0gdGFnX2xlbl9iaXRzIC8gODsKKworICAgIG1iZWR0bHNfZ2NtX2luaXQoICZjdHggKTsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAyNTcpOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEyOCk7CisgICAgbWVtc2V0KGFkZF9zdHIsIDB4MDAsIDEyOCk7CisgICAgbWVtc2V0KHRhZ19zdHIsIDB4MDAsIDEyOCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQodGFnX291dHB1dCwgMHgwMCwgMTYpOworCisgICAga2V5X2xlbiA9IHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHB0X2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworICAgIGl2X2xlbiA9IHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBhZGRfbGVuID0gdW5oZXhpZnkoIGFkZF9zdHIsIGhleF9hZGRfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19nY21fc2V0a2V5KCAmY3R4LCBjaXBoZXJfaWQsIGtleV9zdHIsIGtleV9sZW4gKiA4ICkgPT0gaW5pdF9yZXN1bHQgKTsKKyAgICBpZiggaW5pdF9yZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19nY21fY3J5cHRfYW5kX3RhZyggJmN0eCwgTUJFRFRMU19HQ01fRU5DUllQVCwgcHRfbGVuLCBpdl9zdHIsIGl2X2xlbiwgYWRkX3N0ciwgYWRkX2xlbiwgc3JjX3N0ciwgb3V0cHV0LCB0YWdfbGVuLCB0YWdfb3V0cHV0ICkgPT0gMCApOworICAgICAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgcHRfbGVuICk7CisgICAgICAgIGhleGlmeSggdGFnX3N0ciwgdGFnX291dHB1dCwgdGFnX2xlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSB0YWdfc3RyLCBoZXhfdGFnX3N0cmluZyApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19nY21fZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBnY21fZGVjcnlwdF9hbmRfdmVyaWZ5KCBpbnQgY2lwaGVyX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfa2V5X3N0cmluZywgY2hhciAqaGV4X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9pdl9zdHJpbmcsIGNoYXIgKmhleF9hZGRfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnX2xlbl9iaXRzLCBjaGFyICpoZXhfdGFnX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHRfcmVzdWx0LCBpbnQgaW5pdF9yZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMjhdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsyNTddOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBhZGRfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciB0YWdfc3RyWzEyOF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTI4XTsKKyAgICBtYmVkdGxzX2djbV9jb250ZXh0IGN0eDsKKyAgICB1bnNpZ25lZCBpbnQga2V5X2xlbjsKKyAgICBzaXplX3QgcHRfbGVuLCBpdl9sZW4sIGFkZF9sZW4sIHRhZ19sZW4gPSB0YWdfbGVuX2JpdHMgLyA4OworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX2djbV9pbml0KCAmY3R4ICk7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTI4KTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMjU3KTsKKyAgICBtZW1zZXQoaXZfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldChhZGRfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldCh0YWdfc3RyLCAweDAwLCAxMjgpOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDEyOCk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgcHRfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisgICAgaXZfbGVuID0gdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIGFkZF9sZW4gPSB1bmhleGlmeSggYWRkX3N0ciwgaGV4X2FkZF9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggdGFnX3N0ciwgaGV4X3RhZ19zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2djbV9zZXRrZXkoICZjdHgsIGNpcGhlcl9pZCwga2V5X3N0ciwga2V5X2xlbiAqIDggKSA9PSBpbml0X3Jlc3VsdCApOworICAgIGlmKCBpbml0X3Jlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfZ2NtX2F1dGhfZGVjcnlwdCggJmN0eCwgcHRfbGVuLCBpdl9zdHIsIGl2X2xlbiwgYWRkX3N0ciwgYWRkX2xlbiwgdGFnX3N0ciwgdGFnX2xlbiwgc3JjX3N0ciwgb3V0cHV0ICk7CisKKyAgICAgICAgaWYoIHN0cmNtcCggIkZBSUwiLCBwdF9yZXN1bHQgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBNQkVEVExTX0VSUl9HQ01fQVVUSF9GQUlMRUQgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworICAgICAgICAgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHB0X2xlbiApOworCisgICAgICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBwdF9yZXN1bHQgKSA9PSAwICk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19nY21fZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIGdjbV9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZ2NtX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjA5NDcwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5mdW5jdGlvbgpAQCAtMCwwICsxLDMxOSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9obWFjX2RyYmcuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIHNpemVfdCBsZW47Cit9IGVudHJvcHlfY3R4OworCitpbnQgbWJlZHRsc19lbnRyb3B5X2Z1bmMoIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiApCit7CisgICAgZW50cm9weV9jdHggKmN0eCA9IChlbnRyb3B5X2N0eCAqKSBkYXRhOworCisgICAgaWYoIGxlbiA+IGN0eC0+bGVuICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgbWVtY3B5KCBidWYsIGN0eC0+cCwgbGVuICk7CisKKyAgICBjdHgtPnAgKz0gbGVuOworICAgIGN0eC0+bGVuIC09IGxlbjsKKworICAgIHJldHVybiggMCApOworfQorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19ITUFDX0RSQkdfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgaG1hY19kcmJnX2VudHJvcHlfdXNhZ2UoIGludCBtZF9hbGcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgb3V0WzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0IGN0eDsKKyAgICBlbnRyb3B5X2N0eCBlbnRyb3B5OworICAgIHNpemVfdCBsYXN0X2xlbiwgaSwgcmVwcyA9IDEwOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgbWVtc2V0KCBvdXQsIDAsIHNpemVvZiggb3V0ICkgKTsKKworICAgIGVudHJvcHkubGVuID0gc2l6ZW9mKCBidWYgKTsKKyAgICBlbnRyb3B5LnAgPSBidWY7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworCisgICAgLyogSW5pdCBtdXN0IHVzZSBlbnRyb3B5ICovCisgICAgbGFzdF9sZW4gPSBlbnRyb3B5LmxlbjsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmN0eCwgbWRfaW5mbywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZlbnRyb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggZW50cm9weS5sZW4gPCBsYXN0X2xlbiApOworCisgICAgLyogQnkgZGVmYXVsdCwgUFIgaXMgb2ZmIGFuZCByZXNlZWRfaW50ZXJ2YWwgaXMgbGFyZ2UsCisgICAgICogc28gdGhlIG5leHQgZmV3IGNhbGxzIHNob3VsZCBub3QgdXNlIGVudHJvcHkgKi8KKyAgICBsYXN0X2xlbiA9IGVudHJvcHkubGVuOworICAgIGZvciggaSA9IDA7IGkgPCByZXBzOyBpKysgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApIC0gNCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApIC0gNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMTYgKSA9PSAwICk7CisgICAgfQorICAgIFRFU1RfQVNTRVJUKCBlbnRyb3B5LmxlbiA9PSBsYXN0X2xlbiApOworCisgICAgLyogV2hpbGUgYXQgaXQsIG1ha2Ugc3VyZSB3ZSBkaWRuJ3Qgd3JpdGUgcGFzdCB0aGUgcmVxdWVzdGVkIGxlbmd0aCAqLworICAgIFRFU1RfQVNTRVJUKCBvdXRbc2l6ZW9mKCBvdXQgKSAtIDRdID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggb3V0W3NpemVvZiggb3V0ICkgLSAzXSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG91dFtzaXplb2YoIG91dCApIC0gMl0gPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBvdXRbc2l6ZW9mKCBvdXQgKSAtIDFdID09IDAgKTsKKworICAgIC8qIFNldCByZXNlZWRfaW50ZXJ2YWwgdG8gdGhlIG51bWJlciBvZiBjYWxscyBkb25lLAorICAgICAqIHNvIHRoZSBuZXh0IGNhbGwgc2hvdWxkIHJlc2VlZCAqLworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoICZjdHgsIDIgKiByZXBzICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBlbnRyb3B5LmxlbiA8IGxhc3RfbGVuICk7CisKKyAgICAvKiBUaGUgbmV3IGZldyBjYWxscyBzaG91bGQgbm90IHJlc2VlZCAqLworICAgIGxhc3RfbGVuID0gZW50cm9weS5sZW47CisgICAgZm9yKCBpID0gMDsgaSA8IHJlcHMgLyAyOyBpKysgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBvdXQsIHNpemVvZiggb3V0ICkgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAxNiApID09IDAgKTsKKyAgICB9CisgICAgVEVTVF9BU1NFUlQoIGVudHJvcHkubGVuID09IGxhc3RfbGVuICk7CisKKyAgICAvKiBOb3cgZW5hYmxlIFBSLCBzbyB0aGUgbmV4dCBmZXcgY2FsbHMgc2hvdWxkIGFsbCByZXNlZWQgKi8KKyAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmY3R4LCBNQkVEVExTX0hNQUNfRFJCR19QUl9PTiApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggZW50cm9weS5sZW4gPCBsYXN0X2xlbiApOworCisgICAgLyogRmluYWxseSwgY2hlY2sgc2V0dGluZyBlbnRyb3B5X2xlbiAqLworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9lbnRyb3B5X2xlbiggJmN0eCwgNDIgKTsKKyAgICBsYXN0X2xlbiA9IGVudHJvcHkubGVuOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggKGludCkgbGFzdF9sZW4gLSBlbnRyb3B5LmxlbiA9PSA0MiApOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfc2V0X2VudHJvcHlfbGVuKCAmY3R4LCAxMyApOworICAgIGxhc3RfbGVuID0gZW50cm9weS5sZW47CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmN0eCwgb3V0LCBzaXplb2YoIG91dCApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCAoaW50KSBsYXN0X2xlbiAtIGVudHJvcHkubGVuID09IDEzICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU8gKi8KK3ZvaWQgaG1hY19kcmJnX3NlZWRfZmlsZSggaW50IG1kX2FsZywgY2hhciAqcGF0aCwgaW50IHJldCApCit7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmY3R4ICk7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZjdHgsIG1kX2luZm8sIHJuZF9zdGRfcmFuZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfd3JpdGVfc2VlZF9maWxlKCAmY3R4LCBwYXRoICkgPT0gcmV0ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3VwZGF0ZV9zZWVkX2ZpbGUoICZjdHgsIHBhdGggKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGhtYWNfZHJiZ19idWYoIGludCBtZF9hbGcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgb3V0WzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDBdOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBpOworCisgICAgbWJlZHRsc19obWFjX2RyYmdfaW5pdCggJmN0eCApOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgbWVtc2V0KCBvdXQsIDAsIHNpemVvZiggb3V0ICkgKTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWRfYnVmKCAmY3R4LCBtZF9pbmZvLCBidWYsIHNpemVvZiggYnVmICkgKSA9PSAwICk7CisKKyAgICAvKiBNYWtlIHN1cmUgaXQgbmV2ZXIgdHJpZXMgdG8gcmVzZWVkICh3b3VsZCBzZWdmYXVsdCBvdGhlcndpc2UpICovCisgICAgbWJlZHRsc19obWFjX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbCggJmN0eCwgMyApOworICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZjdHgsIE1CRURUTFNfSE1BQ19EUkJHX1BSX09OICk7CisKKyAgICBmb3IoIGkgPSAwOyBpIDwgMzA7IGkrKyApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZjdHgsIG91dCwgc2l6ZW9mKCBvdXQgKSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGhtYWNfZHJiZ19ub19yZXNlZWQoIGludCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmVudHJvcHlfaGV4LCBjaGFyICpjdXN0b21faGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGQxX2hleCwgY2hhciAqYWRkMl9oZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dF9oZXggKQoreworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGVudHJvcHlbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGN1c3RvbVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkMVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkMls1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBteV9vdXRwdXRbNTEyXTsKKyAgICBzaXplX3QgY3VzdG9tX2xlbiwgYWRkMV9sZW4sIGFkZDJfbGVuLCBvdXRfbGVuOworICAgIGVudHJvcHlfY3R4IHBfZW50cm9weTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19jb250ZXh0IGN0eDsKKworICAgIG1iZWR0bHNfaG1hY19kcmJnX2luaXQoICZjdHggKTsKKyAgICBtZW1zZXQoIG15X291dHB1dCwgMCwgc2l6ZW9mIG15X291dHB1dCApOworCisgICAgY3VzdG9tX2xlbiA9IHVuaGV4aWZ5KCBjdXN0b20sIGN1c3RvbV9oZXggKTsKKyAgICBhZGQxX2xlbiA9IHVuaGV4aWZ5KCBhZGQxLCBhZGQxX2hleCApOworICAgIGFkZDJfbGVuID0gdW5oZXhpZnkoIGFkZDIsIGFkZDJfaGV4ICk7CisgICAgb3V0X2xlbiA9IHVuaGV4aWZ5KCBvdXRwdXQsIG91dHB1dF9oZXggKTsKKyAgICBwX2VudHJvcHkubGVuID0gdW5oZXhpZnkoIGVudHJvcHksIGVudHJvcHlfaGV4ICk7CisgICAgcF9lbnRyb3B5LnAgPSBlbnRyb3B5OworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKworICAgIC8qIFRlc3QgdGhlIHNpbXBsaWZpZWQgYnVmZmVyLWJhc2VkIHZhcmlhbnQgKi8KKyAgICBtZW1jcHkoIGRhdGEsIGVudHJvcHksIHBfZW50cm9weS5sZW4gKTsKKyAgICBtZW1jcHkoIGRhdGEgKyBwX2VudHJvcHkubGVuLCBjdXN0b20sIGN1c3RvbV9sZW4gKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfc2VlZF9idWYoICZjdHgsIG1kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgcF9lbnRyb3B5LmxlbiArIGN1c3RvbV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgbXlfb3V0cHV0LCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQxLCBhZGQxX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBteV9vdXRwdXQsIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDIsIGFkZDJfbGVuICkgPT0gMCApOworCisgICAgLyogY2xlYXIgZm9yIHNlY29uZCBydW4gKi8KKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBteV9vdXRwdXQsIG91dHB1dCwgb3V0X2xlbiApID09IDAgKTsKKworICAgIC8qIEFuZCBub3cgdGhlIG5vcm1hbCBlbnRyb3B5LWJhc2VkIHZhcmlhbnQgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmN0eCwgbWRfaW5mbywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20sIGN1c3RvbV9sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbV93aXRoX2FkZCggJmN0eCwgbXlfb3V0cHV0LCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQxLCBhZGQxX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBteV9vdXRwdXQsIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDIsIGFkZDJfbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG15X291dHB1dCwgb3V0cHV0LCBvdXRfbGVuICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgaG1hY19kcmJnX25vcHIoIGludCBtZF9hbGcsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICplbnRyb3B5X2hleCwgY2hhciAqY3VzdG9tX2hleCwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZDFfaGV4LCBjaGFyICphZGQyX2hleCwgY2hhciAqYWRkM19oZXgsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpvdXRwdXRfaGV4ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGVudHJvcHlbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGN1c3RvbVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkMVs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkMls1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgYWRkM1s1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBteV9vdXRwdXRbNTEyXTsKKyAgICBzaXplX3QgY3VzdG9tX2xlbiwgYWRkMV9sZW4sIGFkZDJfbGVuLCBhZGQzX2xlbiwgb3V0X2xlbjsKKyAgICBlbnRyb3B5X2N0eCBwX2VudHJvcHk7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBteV9vdXRwdXQsIDAsIHNpemVvZiBteV9vdXRwdXQgKTsKKworICAgIGN1c3RvbV9sZW4gPSB1bmhleGlmeSggY3VzdG9tLCBjdXN0b21faGV4ICk7CisgICAgYWRkMV9sZW4gPSB1bmhleGlmeSggYWRkMSwgYWRkMV9oZXggKTsKKyAgICBhZGQyX2xlbiA9IHVuaGV4aWZ5KCBhZGQyLCBhZGQyX2hleCApOworICAgIGFkZDNfbGVuID0gdW5oZXhpZnkoIGFkZDMsIGFkZDNfaGV4ICk7CisgICAgb3V0X2xlbiA9IHVuaGV4aWZ5KCBvdXRwdXQsIG91dHB1dF9oZXggKTsKKyAgICBwX2VudHJvcHkubGVuID0gdW5oZXhpZnkoIGVudHJvcHksIGVudHJvcHlfaGV4ICk7CisgICAgcF9lbnRyb3B5LnAgPSBlbnRyb3B5OworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIG1kX2FsZyApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19zZWVkKCAmY3R4LCBtZF9pbmZvLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJnBfZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSwgY3VzdG9tX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmVzZWVkKCAmY3R4LCBhZGQxLCBhZGQxX2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBteV9vdXRwdXQsIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDIsIGFkZDJfbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG15X291dHB1dCwgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMywgYWRkM19sZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBteV9vdXRwdXQsIG91dHB1dCwgb3V0X2xlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGhtYWNfZHJiZ19wciggaW50IG1kX2FsZywKKyAgICAgICAgICAgICAgICAgICBjaGFyICplbnRyb3B5X2hleCwgY2hhciAqY3VzdG9tX2hleCwKKyAgICAgICAgICAgICAgICAgICBjaGFyICphZGQxX2hleCwgY2hhciAqYWRkMl9oZXgsCisgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0X2hleCApCit7CisgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzUxMl07CisgICAgdW5zaWduZWQgY2hhciBjdXN0b21bNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDFbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFkZDJbNTEyXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs1MTJdOworICAgIHVuc2lnbmVkIGNoYXIgbXlfb3V0cHV0WzUxMl07CisgICAgc2l6ZV90IGN1c3RvbV9sZW4sIGFkZDFfbGVuLCBhZGQyX2xlbiwgb3V0X2xlbjsKKyAgICBlbnRyb3B5X2N0eCBwX2VudHJvcHk7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm87CisgICAgbWJlZHRsc19obWFjX2RyYmdfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmY3R4ICk7CisgICAgbWVtc2V0KCBteV9vdXRwdXQsIDAsIHNpemVvZiBteV9vdXRwdXQgKTsKKworICAgIGN1c3RvbV9sZW4gPSB1bmhleGlmeSggY3VzdG9tLCBjdXN0b21faGV4ICk7CisgICAgYWRkMV9sZW4gPSB1bmhleGlmeSggYWRkMSwgYWRkMV9oZXggKTsKKyAgICBhZGQyX2xlbiA9IHVuaGV4aWZ5KCBhZGQyLCBhZGQyX2hleCApOworICAgIG91dF9sZW4gPSB1bmhleGlmeSggb3V0cHV0LCBvdXRwdXRfaGV4ICk7CisgICAgcF9lbnRyb3B5LmxlbiA9IHVuaGV4aWZ5KCBlbnRyb3B5LCBlbnRyb3B5X2hleCApOworICAgIHBfZW50cm9weS5wID0gZW50cm9weTsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF9hbGcgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmN0eCwgbWRfaW5mbywgbWJlZHRsc19lbnRyb3B5X2Z1bmMsICZwX2VudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20sIGN1c3RvbV9sZW4gKSA9PSAwICk7CisgICAgbWJlZHRsc19obWFjX2RyYmdfc2V0X3ByZWRpY3Rpb25fcmVzaXN0YW5jZSggJmN0eCwgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tX3dpdGhfYWRkKCAmY3R4LCBteV9vdXRwdXQsIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDEsIGFkZDFfbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb21fd2l0aF9hZGQoICZjdHgsIG15X291dHB1dCwgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMiwgYWRkMl9sZW4gKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBteV9vdXRwdXQsIG91dHB1dCwgb3V0X2xlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgaG1hY19kcmJnX3NlbGZ0ZXN0KCApCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfaG1hY19kcmJnX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcubWlzYy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YmNlMDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm1pc2MuZGF0YQpAQCAtMCwwICsxLDgyIEBACitITUFDX0RSQkcgZW50cm9weSB1c2FnZSBTSEEtMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX2VudHJvcHlfdXNhZ2U6TUJFRFRMU19NRF9TSEExCisKK0hNQUNfRFJCRyBlbnRyb3B5IHVzYWdlIFNIQS0yMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX2VudHJvcHlfdXNhZ2U6TUJFRFRMU19NRF9TSEEyMjQKKworSE1BQ19EUkJHIGVudHJvcHkgdXNhZ2UgU0hBLTI1NgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfZW50cm9weV91c2FnZTpNQkVEVExTX01EX1NIQTI1NgorCitITUFDX0RSQkcgZW50cm9weSB1c2FnZSBTSEEtMzg0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19lbnRyb3B5X3VzYWdlOk1CRURUTFNfTURfU0hBMzg0CisKK0hNQUNfRFJCRyBlbnRyb3B5IHVzYWdlIFNIQS01MTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX2VudHJvcHlfdXNhZ2U6TUJFRFRMU19NRF9TSEE1MTIKKworSE1BQ19EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUgU0hBLTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19zZWVkX2ZpbGU6TUJFRFRMU19NRF9TSEExOiJkYXRhX2ZpbGVzL2htYWNfZHJiZ19zZWVkIjowCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0xCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfc2VlZF9maWxlOk1CRURUTFNfTURfU0hBMToibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IKKworSE1BQ19EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUgU0hBLTIyNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfc2VlZF9maWxlOk1CRURUTFNfTURfU0hBMjI0OiJkYXRhX2ZpbGVzL2htYWNfZHJiZ19zZWVkIjowCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0yMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTIyNDoibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IKKworSE1BQ19EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUgU0hBLTI1NgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfc2VlZF9maWxlOk1CRURUTFNfTURfU0hBMjU2OiJkYXRhX2ZpbGVzL2htYWNfZHJiZ19zZWVkIjowCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0yNTYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTI1Njoibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IKKworSE1BQ19EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUgU0hBLTM4NAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfc2VlZF9maWxlOk1CRURUTFNfTURfU0hBMzg0OiJkYXRhX2ZpbGVzL2htYWNfZHJiZ19zZWVkIjowCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS0zODQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTM4NDoibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IKKworSE1BQ19EUkJHIHdyaXRlL3VwZGF0ZSBzZWVkIGZpbGUgU0hBLTUxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfc2VlZF9maWxlOk1CRURUTFNfTURfU0hBNTEyOiJkYXRhX2ZpbGVzL2htYWNfZHJiZ19zZWVkIjowCisKK0hNQUNfRFJCRyB3cml0ZS91cGRhdGUgc2VlZCBmaWxlIFNIQS01MTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3NlZWRfZmlsZTpNQkVEVExTX01EX1NIQTUxMjoibm9fc3VjaF9kaXIvZmlsZSI6TUJFRFRMU19FUlJfSE1BQ19EUkJHX0ZJTEVfSU9fRVJST1IKKworSE1BQ19EUkJHIGZyb20gYnVmZmVyIFNIQS0xCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfYnVmOk1CRURUTFNfTURfU0hBMQorCitITUFDX0RSQkcgZnJvbSBidWZmZXIgU0hBLTIyNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfYnVmOk1CRURUTFNfTURfU0hBMjI0CisKK0hNQUNfRFJCRyBmcm9tIGJ1ZmZlciBTSEEtMjU2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19idWY6TUJFRFRMU19NRF9TSEEyNTYKKworSE1BQ19EUkJHIGZyb20gYnVmZmVyIFNIQS0zODQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX2J1ZjpNQkVEVExTX01EX1NIQTM4NAorCitITUFDX0RSQkcgZnJvbSBidWZmZXIgU0hBLTUxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfYnVmOk1CRURUTFNfTURfU0hBNTEyCisKK0hNQUNfRFJCRyBzZWxmIHRlc3QKK2htYWNfZHJiZ19zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9fcmVzZWVkLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTYyYTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaG1hY19kcmJnLm5vX3Jlc2VlZC5kYXRhCkBAIC0wLDAgKzEsMTIwMCBAQAorSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJlOTFiNjMzMDllOTNkMWQwOGUzMGU4ZDU1NjkwNjg3NWY1OTc0N2M0NjhiMGQwZGEiOiIiOiIiOiIiOiJiNzkyOGY5NTAzYTQxNzExMDc4OGY5ZDBjMjU4NWY4YWVlNmZiNzNiMjIwYTYyNmIzYWI5ODI1YjdhOWZhY2M3OTcyM2Q3ZTFiYTkyNTVlNDBlNjVjMjQ5YjYwODJhN2JjNWUzZjEyOWQzZDhmNjliMDRlZDExODM0MTlkNmM0ZjJhMTNiMzA0ZDJjNTc0M2Y0MWM4YjBlZTczMjI1MzQ3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImQwYzU3ZjdkYzAzMDgxMTViMWVhMzBlMmVhMmY3NzAyODljZWJkZGE2MTdkMTMyYyI6IiI6IiI6IiI6ImI3OTc2MTVhNzhkMWFmZTc0ZWJlZGI5ZDg5NDhkODJjZjJiYjU4NmVkODAxNDZiOTZkNDFhNzA5ZjY4OTE3OGI3NzJkZDM0MmQyOWFmNTQ0OTY5NGJmOGVhZjMzYTY2NGEyNGMwYWQyOWExMjUyOWVlYWJhNDc4YTc5OTkxN2FiNDY2NmRlMWI2ZWIyYzczMzIwMTdkNjdlZWE2ZmFiZDgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMjg2ZTlkOWUzOWU0MDI0ZGVhMGM4ODVmZDZmN2YxMDc1ODZiNmExYThhYzNhYzBlIjoiIjoiIjoiIjoiY2EyNWFhOWVmMjg2YTNjZDUyZDEwMWRiMDFjZGYwY2UxNGM3YWRkMTI0ZjFiNmE5YThiM2E0OGM3NDk4OWJhZjAxZjZmZjcwNGRhN2M1ZDU3ODViNmU5YzIxOTE0ODkyMTAyMzEzZTdhMTVjYjJmOTk3N2E1MTNhZGEwZDNmMjQyODE5YWVmMmMxNjk5YjcyY2JkMzU4YzU5NDM1MTAxZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI2YjIwZGRhNjVhOTZmNTY0ZmMwMjUzZDM4ZGJjMjkwYjgxM2U1MzhkMDQwZDhkZDkiOiIiOiIiOiIiOiI2NmI2ZWY1N2EzMjgyODM4ZGVhMDVkMTIyY2NkZmE4NDJkZGExOTMzM2RlZDIwMTVkMzgxMzk0ZGEzOGM4MzA5YTZlOTcwM2VjMDY1MzM1YjExNmVmYjk3ZGFhYWM5YzUzY2ViN2EyMThlZDBkYjYxYzNiYTk2OWRjNjI5Yjk1ZjU0MThlYWRmYTQzYzU4NzE0ZmIwMjE3NmJjMGIxN2VjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjMyMzM5ZmM4MmI2NTUwNTEwNDJlMzAzOGUzMTYxYzRmYjI1MmU0OTVmZjM5NmJlMiI6IiI6IiI6IiI6ImU5NWU0NTUxYTM3ZTMzOGZhYWU0NDE5ZTNhNzBlNGMxZTNkNTE2YmU3ZTU1NGNhYmIwMDAwN2M1OTFiYTdjYjZjMzI0Nzg4OWE5YjA4ZTQ2YzY2MTlmMTY2ZDk5NmU0ZTM0YmJmNmNkOGEzNTRkZTk5NjRkZTkwNjA0MWY3M2YyYWRlMmViODJjNmU4MjYyN2QzMjU3NzM4YzI4MjFmY2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZGVhYTlkMGMyY2E3YTA1Y2JhMTJlZWI3ZGIyNDI3N2UxNjA1ZTFkMDMwZDc2ZGRjIjoiIjoiIjoiIjoiYmFiNWJlNjAwMWRhNTk1MWMxZTc4NzNmNGUyYmUzMThlODc5MzcwZWFlOGE1MWVkODQyNGVkNmYxMmIyZDI5NGI0NWQwMDZiMWMyY2Q4YzFjZTA0N2ZkMTZmMmZiYmMwOTk1NGE4YjQ2NGNjOTg2ZjIzZTg2ZTFkOTM5OGQyMDc4MDE5MGFhNWJlMDUwNWNkZmM4MjZjN2EwMWRjYWI5OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI1ODk3NjZiZTNjMDNiMGEzNTFhODFiMTIwM2Y5NDRlMjkyOGU5NWY4YTNiYzc0NTIiOiIiOiIiOiIiOiI1YmVlMjQ4MjY2NzIyMDQ2MmFjNmQzYzIzNGY3MzMzNzAzYzVhYmNlZDJmZjJhZDkxZDUyMTkzZTg2YTYxY2ZhNDNiZTBiNGY3ZTgzMWUxZTU2M2UyNjAxNzhmMjM5NzZiMmYzZTEzMjM1NmFiNTQ1NjdiMzc1ODBiZjlkNzUxMjIzZmFkNzc5M2YwYWMxMWZjNDUwODE3NTM2MTE2YjFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjA3Y2M0ZDIyYjAxMDMzNTA0NWNjYTE0MmQ5MTQ5NGJmNGQ1ZTg0MmFmNDE1NWQxNyI6IiI6IiI6IiI6IjhlMTNhNTc0ZDE3ZGM4YjQ0MzgyZDNiMjYzZTg1N2Y1MDgxNjc1NTkxNzYwM2EwN2NhNDk4N2ZkNDAzNDAwNDJhMWU2YTgyYTIyNzY0NzEzMDMwNGQ3M2Q4NzA0ZmQ5YWQ0ZGIzYWU0MmRhYWE1NWIxZjkzOTQ4ZTcwYzQ1MWExMjcyNGZlZDg3MGUwMmExYThlYzRlZWFiNzE2YzY4NTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNjQyNTYyNGE5OGFiMzAxOGViNGVmODI3ZjVhNGZiYmFjMTAyMmQ3MDE1NWVmMzc1IjoiIjoiIjoiIjoiMTZmZDZhYmIxMGRiYTE2NTllZDU2ZDQyOTZiNjVmZTNmMjQ0OTk5NmJkYjhlZWU1Yzk0YjI0OWYwNDgwOGNkZDk1NjM1NjlhNDE1MmJkOTlhMzI1OTJkMzVkNmE0Y2M4MDZjMjI4Mjg0NDg3ZmMxZTA4OGIxNzhkNGM4ZWNiNmIwZTNjZmFhY2Q3ZDM5ZDc1NGQ4YmQ0ZTY2NjJmNDRhNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIwMWQxMWQyYjYzMWJlMjQwZGUyZjQxZDEwYmRjZTQ3Yzg5ZmEzMjQyNzQxMGNjNjEiOiIiOiIiOiIiOiI0NjQwYTA2M2U2NWVmMGMwZGU5N2Y5OGEzOTI5NzIxOWUyYTFlY2VlZDdlNjQyNjE5OTcxOTkxMWVkYmIzZDA2ZmJkZTZmYmFiODM4NzhlOWJhOWZhOGUxZDA0NGY3YTQwZjM2MjdkN2NmYzQ5ZDE3ZjEwMWVlNjRmNmI4YzZlNjE1NGEwMWI0ZDM5ZmI5YmE2YjMzY2EyYzI3ZjlmZDUyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI1ZTBhODliM2FiYTFjZjVlZDk0NzU2MDgzNzI2ZGU4ZGI1ZDc5MTYyZjczYTUwMzEiOiIiOiIiOiIiOiJjYWU3YjJjMjVkY2UxYzEyZTJjNGY2MWIzZTUzMTU1YjkxNzdlOTJiZmI4ZmFlZmM0MjVkMWNiYjUwNzcxMzkyMTM3OGVkODgwOTg2NzA5YmZiZDdjZGE2NmQxOGRiZTA3MzIxMzdhODZkNDdiN2U4MjIzZTM0NWFmMGNkOWEwMjE5YmEyOTAwNDBiYzZmZjQ0YzFkZTViMTZmMzJiOTMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIzYjc2ZDMyZDU5ODJkYWY2ZTIxNjQzNDA5NDFhMTcwNzQ0MWJiYjk5YTI2NjhiYTQiOiIiOiIiOiIiOiI2MzY0MGU0MDZlMTZiM2I4MjcyM2E2Y2IzODMwNjU3Yjc1NmZlNjFjZjJhZGE5NmY2NjdlMGYyZGYwYzlkMzNjNmYxNjRlZTc4ZDQ5NzYyODFhODRkMzAyNGZmNjcwNzRhY2VjZDY1MzkxYTg0YWFmYWVjOWQ2YjA4OGJjMzM2MTY1NDNiNjFhNGM2MDNlNWEyMWJkMzllMmE3MjQwMWM4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0NWZjYWZiYTIyNzhiZjhlNmQ0MzczOTZmNjBmMGU4NDY1NGRlNDRlMGJkNmNiOGEiOiIiOiIiOiIiOiI3ZTIzMjVjYjJjZWQzNzJiNjQwYzI0OTZhMzk3MGNiNzc3MWZkNDk0ZTQwYWUxNzIzOWJmZmZkOWVhMmFiMGVlNzRjMmQzYzM2OTMyOGEzYjQ2NWU2N2JjYmVhODZmNTBhMzJmOWZmODIwNTA1ZGY1YWRiYzAzMmQzYWRiODM1ODE0NDM4NzdmODVjNjBiM2I3MDFmNTliMWZjMzhjMDYzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0MjAxZGI5NzdlZjkwZDA4ZjAxN2M4ZTM4MjA0YzI5OTViYmI0N2VmZTlmYTRjYWQiOiIiOiIiOiIiOiIxMDFjNzMxOGUyNjY5M2JjMTFkNjRiNzgwZTliMzJkNGQ5NThjNzQ3NWFiOTlmZGQ2ZmU4NjU1NGRjZWY1NGNjZGMyY2E5ZjRlYzM1NWViMjVkN2IzZjU3MGZmOTVlYzdhYmMyZTllMmZiODc5YmIwNDVkZWJmNmM4YTk4ZmY0NjY2OGMwZGUyMWJkOGQ0ZDE4ZmI5ZTExNTUwODc4ZTMyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI1ZDgwODgzY2UyNGZlYjM5MTFmZGViOGU3MzBmOTU4ODZhNjNjMDE0NzhlY2Q2MmIiOiIiOiIiOiIiOiI5ZTM1MWI4NTMwOTFhZGQyMDQ3ZTllYTJkYTA3ZDQxZmE0YWNlMDNkYjNkNGE0MzIxN2U4MDIzNTJmMWM5NzM4MmVkN2FmZWU1Y2IyY2Y1ODQ4YTkzY2UwYTI1YTI4Y2RjOGU5NmNjZGYxNDg3NWNiOWY4NDU3OTA4MDBkNTQyYmFjODFkMGJlNTMzNzYzODViYWE1ZTdjYmUyYzNiNDY5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMzJjMWNhMTI1MjIzZGU4ZGU1Njk2OTdmOTJhMzdjNjc3MmQ0Y2M0ZjA1NDRkNDA5IjoiIjoiOWU5OGNjOGUwZjhlYjg0ZDE5MTFjMTc3NWE1NzAzYmIiOiI1OTNhYTNhMzAwZTVjOTA3YTAxMWRkNWEzZGNkNzdlMiI6Ijk0MjkwOWE5ZDM4MGFhNWQ0ZTNhZjY5MDkzYThmYTUxM2VlNTQ1YjliZjllMWI4MWM1ZjMwOTY2ZGIzZTVjYjUyZjhiMWI2ZmU0NDBkNTkyZTVmZTRhOTcyYzM2YWE0OTgwMzVlMjQ0MmY4MjkxMGM1Y2QwOTVjN2Y0YjRjN2U3NTU1YzQ2NjljY2E0ODFjZGZiZmRhMTY3YjVkNmY4ZDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIxNzJhMmQyNGVmMTI4ZGFkYzkzZTBiNzRmMjc3ZTdjMzY5MmY4NmU2Y2E1ZTExMTciOiIiOiI5M2I0YTFmZGJmOWRkMzA5OTYyOTg4MDRkZDg2YzBmNyI6IjY5ZDc5MmRjOWI2ZmUxNjAxZjMxYTY4ZTRkMDA3MTg3IjoiMTNmMzBiNDY5OGQ2ZTk3MzU1NmMzZjkyZGZmNjI0MWJiZmJkZTMwMGVkNThkMDdmZDVmNjRlZmRjZDBjMWI2MmNhM2RlNjM1OGQ1MDVkY2Y5NzJmZGNlMjBmN2I4OTFjNGNhYjQ5MzcyMWQ4MGNiMTA4ZmNlZTkxNTgzNWIwMmRlYTMzMDQxYjM4ZTI4MjUyYzMwYTcxZmFkODU4NzhlNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjRhMTdiODA2OWFlM2E3NGQ3N2M5Yzk0NTE0YmE5MGNkMmFiZmFjMDAwMmQyYzVkYSI6IiI6ImNjMzlkMWEyYTQyNWYwMGUyMjBkNzIxZmJmZDViNmU1IjoiMWNjZWUyNWY1ODY4ZTg2M2EwNWI3MmQ3NDRlNjRhZWIiOiJkNzg3YjM1NTYyOTc3OWZmMjkxNjM5N2Q2MDk0ZjQ0ZGVjMDYzMzc1NzFjY2IwYWJmNWExN2I2Y2ZhYmUwMDU1Nzg5NGU5ZGRhYjhjYWFmZWY0NjdmYWE0NTE0NTgyYjUwNzNlN2QxZDlmZGQ2ZmEzNGM1NjVkMWFjYTIzNzQyZWQ0ZTg3MTMzMjUzYTk2NjRlYzA4NWJjNmM3Njk2NWY0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZDYwYzQ4NjBkOWJhM2ViYjY0ZTIwOTUyMzFlMDc3OTJiYTZiNWU5ZTIyZTE0MDQzIjoiIjoiNzc2MjczYmIyMmY1ZTYyYTc5MzY5MjEyN2JjYmQ3ODUiOiI4Nzk1ZTQ1ZjgyMTYwY2IxMDk2YTUwOWZkMzU3MmY5MiI6IjMxMjJjMWQzYTZkZThiMjVmZDE4MGIxNTk3MzFmOTc1Zjc4NjAxMzYwMTU1ZTQzZjY5NGIyODk4MjJhMjU5NDhkMmMyMGE2NzNmMTgxYmUwNmI1OWM1NjY5NjAzMzlmMjUwMTVkMmFjYmY1YzdkM2Y2OGEyYmFkZTc3OWUwMGZhYTI0NjIzYzEzMTNkYTg4OGRjOGNlZTkwMWZhMDU1NzMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0OTQ5ODNjMDQ1ODFiODExZTBiMmI4NDZjNTRiZDMxODI0YmQ3MGZkMTgyNTU4ZjEiOiIiOiI5MzUyMDBhN2VkZjFlMjkwMzU4MWZlZGI3YzA0NTMzZCI6IjQ5YzAxMzNjY2EyNDU3ZmE3Y2JiZDRjNjhjYzVlNzhmIjoiMGZkMmVjNDdmYTJlMzEzMjZlZTliODk0ZmRkNjIyNDgxODE5MDE2ODY0MGQ5MWEyYTBjMjQ3YjFlMjdjY2ZhMzQzZTkzNzBkMTgyZDk1YjJiNWJkNzRiNGIwOWM0NGQwNDA5NDM2NGE2ZmQwMmJhNzBlZTJjNTVlMDRkNjVhZDljNmRhNjViOWMwNzQyZjlmYjVjYTk1ZGFhZmE0OGRmMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6Ijc3ZWE4NmNlNTlmMjQ2NmU1NWNlMjA1N2U3ODU1MDM1YzA5Mjk1YzAyZjFjNTFjYiI6IiI6ImYzNmQ2NWYyMmI1YWZkM2Y1MWUxM2VhMzhkY2ZmNTU1IjoiNmI2MTNiNTZlNDcwYjVjMmMzMGMzMGFhYjlhNzcyZTEiOiI0MWNkOGVmODI2MDkwMTJkMzNiNGU1YjUxYTM5ZWMxN2VkYTQzMTc5NjI2Mjc3OTZmNzg0NTA0NTkyMGJlY2Q3Y2FlZjU2ZDRhMmMzYThlODQ5ZTI5OWJhYmU5MjM2N2VmMzRhODkxMGJlYmQ0OTgyNDhjY2MyYjNmNWY2MzkyMGIzMWNmZTg1Njk3M2UxNWU0OGIwNjA4NzFhOWNmOWE3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMmRmZmIwMzcwMzAyM2Y2NWI3NTdiN2VlODc4OTlhMTRhOWM4Y2U3ODhmYjJiZGRjIjoiIjoiZGE0MmIyMTMwNzEyNTJhZGI3NTVhNmNiMjQwOTRjMTciOiJjODNmYzJiZWI2MGE3ZWU5YjM3NGYzZmI3YmZjODkwMCI6IjhmNTQyNzFlMzU3OGU2MGU4OTg5ZTQ5ZjViNDI2ZTFhMDI5NmFmYmZjYzdkYTBmZmJkZDVkZWE3MWVjNmIzMzliNmQ4NjZiZDM3NTZiYTc0NWU0MmM4Y2RkZjk5N2NhYzVmZWQ3MmIzM2FjODFlNWY0ZDZmMmQxNWYwMzBhNDFjNjg0NTUyZmM5NGQ0OGMwZDk3MzIzZWY3ZWI2NTY4NTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI4OTBlNzMyMzUwMjMxM2JjN2Q2MTc4MDUzNjBkNTk2OGI2YzY4YzAyODBjZWY1ZWQiOiIiOiIyNTdmMWY2MGNmMmQzNjkyNGMzZTdiNmU0Y2MzNTEzNSI6Ijg5MjM1Y2M0NzJjNmUyZTFlOTJjNzAzMjQ0NTlhOWQzIjoiNTUyODM0NTNlODI2NjJjOGQ5MmY1NGNiNGE1ZDc4NGU4M2IxYjM1MjdiYzVlNzFhNTNmMDQ1MDgxNzJlYjUxNTZiYTJhOWJhOTIxMTZjZGFjZWVkMTcxMThjNzYzN2FmNGI1NzRkMzY0MTg3YTUyY2YwYzIwZDc2OGRhNTE4MDIxYzNkOTVjYjVjZTZiYzEwOGIxYmVmMTliYWQ2NjY3NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDAsMTI4KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjE2N2NlNmJhZDE2NWViNjQwZWViZmVjZTdjYTY2OTBlYzVjNmI1ZjhjN2ZhOTMwNCI6IiI6ImMwZTdlZjEzMTM4ZWM0YTdkNTJiYWY4NTkyNDg0Y2EwIjoiNDcyYTQ3ZTNmYzA5OGM3Y2I5MmZiOTUzYTI2ZTI1YzYiOiJlMmFhMjY1MGM4NGJlNzllYzQxMGZmOWJhYzkzZTVjYWZmOGE0NmE4YzM5NDk1ODU2ZmY2NGM4YzUzOTllODE2NTRiYTkwYzhhOGIyNmNkY2EyODEwY2U2OGU0YWI2NDZlNTBhMWY2ZmE3YTgyOWNmZDcyYzlhNjFlMWEwYjQxNWMwMzEwNjdkY2Q0MTdiYWFjOTU1M2NmN2Q4NGE3NzQyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMCwxMjgpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNmI4YWVhZjcwNDYwZTgzYTEyNDg5OWQ3MDVkYzA5MDBhY2Q4MTE2OTg2NjlmY2VlIjoiIjoiOTRhNTM4MDhkZjVlYmFhNzY5MzkzNGQ3ZmRhOTJiOTUiOiI0ZDRlN2Q4OGY0NGZlNTU2YzVjY2RjNTZmOGIyZjA5OCI6IjE2NWFhZTZiY2RkNzk5ZmUzMjVkZGFmY2UzYjY0NTkwMGVhYmM4NzU1MmMwYmI0N2VlMmViNmFkNTE0NjJhOGE0ZjQ0OThjNGJkMjRmY2ZjNDZkZTVkMTIzNTExNDNkNWE4MzgwNjBmNjE3MjU4YzIxODAzNWE0ZjI5ZmIzNGE1NDY3MzIwNWIyZTFiMzYyOTkxNjkzZDdiOTk5NzI5NTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMDBmMzBmOTJiZDQ0YTliMmIwNGE2Y2FlNjc1MzNlZDg1YjRhZTEzMzViOTgxMDlhIjoiIjoiNzdlYzQyNzRmZTVmOGYyMmRiYjRhMWVkNjA1MDgxMWUiOiJlZjA0MWI2NTE2ODI1ZDUxYmY3NmQyZjY1MWE1NTU3NiI6IjhjNjY0MzU3YjAxNDI1NjY4ZWE1ZGFmMDdhMmI1YjhjNTBkYmJkNzFkOWY0OGM1MGYyNzVhMDJiNmNmYzQ3MTdlYjdkYjI4NmZhNDlmMTdkMDVkNDQyMzBmN2Q4MmMyNTFhNmYwZmUwYTJhZGQ1ZDJjYzlhOTJhNTI3ZjYzYTliZDNjOGVjOTNlOWE0MDRlMDgyOTYyOWM1ZWViOTk3YjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMmVhZmVlYmI1OGEyZmI1NDQ3NDI4MDExMmM1NjY4ZDYxYmUyYWE0ZGY5ODU5OGFmIjoiIjoiMzg5YTM2ZWNkNjg3MDgwYTVkMmNhY2U4YTMyNmYwM2EiOiI0OTU5NjViZGJiYjFiYjAxYmE2MTE5MWU5ZGQ0YjAzOCI6ImYxN2RiMDQ1YjBhZjQ5MTNkNzlmOTllMDE4YzFmNzI2ZjRmZTAyZjA4NDc3Y2NjYzBkNmEwNjhhODA4YmZjNmNjYjc5N2U2MDIyZGMzYjk5ZWExODA4NmE1NjQyODg4NDExMGM0OTEyOGE1MWUxMGMxNWY2ZWNiZmUwYTVhMWU5N2U3MmE1NzhmZWZlYTZjNjZjNDM2YzkxYTJiNjM5NWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiYjY0OTcxOTdiNzgzZDFmNDkzYTY0MzA3NDhiNDU5MzI4OTVlYTJhOWQ4MjA0ZjVkIjoiIjoiYWMyNjY2NWU3OTZkMWIwMDk1MWM3MjVkYTg4ZDk5MmYiOiI1ZjA4Yzc5NTExMDZkZmVjNTA5NmQ5MDA5NzQ0OWNjMiI6IjE3MGI1OGFjMzM0MmE5NjhjOTZhYTI5ZjFjZTgyMGRlYmU3OTM0ZDlkYjQ2MjE2YzAzYWUzYWZkMzA0MTg4Y2QzOGI2MjA4ZTFjYWQ1ZmNlNWMyNjE3OWEzMGE4NzcxMDE1YTk5ZDI5MDJkNTE4OTlhYjBjNDJlMGI0MDBkMThmMWU4OTQxMTI0OGRiOTZmOWQ2MmI0NjZmODI4ZGUxNTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNGZmYWZkMWYyMGRkMzg2OTliZmNhMDI5YzA1NTg0ODNmYmVlZDNjYjI5YWEwZWI4IjoiIjoiOTZhYmZjZWU4ODNkOGRjYWQ5NjdjMDcxYzEyZGRlMTkiOiI5ZmQ3Y2MyOTJjZDU1ZDgzNjQ4NjJmNWZkNjc1YzA4YiI6IjVlODYxMmM2Y2U4ZjViNjgzOGExZTRmYjllMTQzNzBmYjJkNjZiYzg4NWY2ZmU4YTNmZjIzMmYxNjM0MGMyYWY1OGViMjczNDQ5NGUwY2U5MjBmMzYwNDZiN2E4MDdmNGI1NWNhZjNhNDViZGNhZWZhNGJiMjNmMzUyNjAxYzA3Njk3NDlmMDI1NzQyODkxOGI5MzE2MDZjN2IzOTUxMzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwwLDEyOCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiODlhNmYwNzBhZmFkNWNjZjRkMTE3YzRlNDRiYWEyYzdiMjg5NDFmYTdlODI4YzA0IjoiIjoiNzIwNmEyNzE0OTlmYjJlZjkwODdmYjg4NDNiMWVkNjQiOiJmMTRiMTdmZWJkODEzMjk0YjNjNGIyMmI3YmFlNzFiMCI6IjQ5YzM1ODE0ZjQ0YjU0YmYxM2YwZGI1MmJkOGE3NjUxZDA2MGRkYWUwYjZkZGU4ZWRiZWIwMDNkYmMzMGE3ZmZlYTFlYTViMDhlYmUxZDUwYjUyNDEwYjk3MmJlYzUxZmQxNzQxOTA2NzFlZWNhZTIwMTU2OGI3M2RlYjA0NTQxOTRlZjVjN2I1N2IxMzMyMGEwYWM0ZGQ2MGMwNGFlM2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0OTA1OGU2NzczZWQyYjdhYjMwOWMwOTQ5ZmRmOWM5ZWE0NTdjYjhlYzBlN2ZkMDEiOiJkYzQ3NzY0MWQ4OWM3ZmM0YTMwZjE0MzAxOTdkZDE1OSI6IiI6IiI6IjRlODkxZjRlMjgxMTAwNDUzYjcwNzg4OTI5ZWM3NDNhM2M1ZWRkOWI4MWRjNzk4YmM5Mzc3MTM2OGMzOWI2MTIwMzdiNmY0MmY2MGM1ZDg5MjRiNjQ2ODQ4MTUxYjBjMjk1YmU0OTFkNGEyOGQxOTI3ZGVlZDUyM2ZkMDRkM2QyZGRhOTVlZDQyMTY2MzEyZTVjMzM5MmQyMjg5M2IwZGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI0Y2NjN2Q4MzAwOWEyOGRiMTRlODM5MTc2Nzc0ZDQ1ZDkzNDUzNThmMzM2YTE2MjIiOiJlNmRiMzI5NzZkOTI2MmIxZDNkYzQ4N2YyMmUxZjViMyI6IiI6IiI6IjVhMTcxZTlmMDA2NWVjZTM3YmE1M2RmODFhYzNkODgwNTRkNTNkMGNiNjk1YTkwMWUxYTFjYTkxMzUyNDIwYjUwOGM0NjFhYzkxMDk1Y2NlYTgxNjIxYjgwMGRkY2ZmOTA1MDIwZjk2ZGFkMmE1MDM3N2QzOTQ1MDQ3NDIwYzNiOTAyZThlMzYxZjQ1MjVjMWQ0YmZhOGFmMTY0OTI1ZDIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJmYzdkMGMzZWYxYzQwNGFkYTk2OGRhZTM1NTgxYjZjZDMxZTBhNDZjMzljZTQ5ZGMiOiIxNDE1OGE2NWZjOWIzYmMxYWMwNGM3ODU0NDkzODUyZCI6IiI6IiI6IjkxODQ5NGY0N2RhZGRhMjI2NjdkYzFkMDY2ZjQ0ZjNjY2JiNjFkM2Y4NGIyZWVhYjdkMjZmNGU5OTlhYWI5NGU3OWQyODIyODdhYjc2ZDRlM2VlZWVmMmVmNzljMmFkNTcxMzgyYWJkZWE1NWQ1ZDg2NDJmNjA0ZjhmMjdmM2Y3M2E1YmMxNDEzZGM4N2JmZGY5MWRhMWM2MDQ1ZWMyMjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIxZjBkZjc5MzNkYzk5ZWFmN2IyODRiMDJlZTc3M2VjNDY0NjFmZDc2MmM1OTU0MDgiOiJhYmQxZDhhZjRhZTQ2ZDdlNWYxZjRlMGI3MWI1NGVkYyI6IiI6IiI6ImYxZWJhNzU5NmM2YzIwMTE4Zjg2MDE3ZmY4NjUxNGQ3NDVjZTdlYTAyYzQ5NzE5MDk0ZTVjMmE5NmQzZGZhMWRkNTA3OWI4ZWZmODA3OGJhOTc5MzkwMGRiYTE0NWEyNjBlNjcyODM3NDIyYzM1MWMzZjIzMWMyMDFkZmFhMjFlNDhkM2Y3ZWUyOGJjZDA4ZGFjNjgwZTgwYmY4N2VjMjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIwOTk4OGEzNmFiYWQ3NGMzY2YzNzdkYjljOTIwMGJhZjZjMjdiZTRlMjE5MzIxNjYiOiIxN2I3YTQwZjRjMzc4OTRiYzk0ODQ1NmUzN2FkNDgyYSI6IiI6IiI6IjA5MWU1ZmI5YzZjMjE4ZjI0NjBjNTE0ZmEyMTUwNjE0NjBjYTkwY2ZiMzVjMWE5ZjVlYTEyNWZjNDlhYTBiMmJlYjQyZGNiMGZlZDg2NWY4NTEwYzMxNDFjZDUxZDFiMzMyMTZlMmU3MmNlYmNhYmQzZTFiYzBlYWIyMDFkOGU3MmEwZDFkZTFjMmI3OTE1YTBjZjI0MjcwODA5MmYyMTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJjZTE5MzRiNjU2MWViYWFhODUxYWNjZjhjZWFlNWIwZGM1ODc5MjJmZjY4ODM2YWEiOiI2MDJlOTA4NmY0NGQwM2NlNjEwMzljMmU4MWZlZDYyMCI6IiI6IiI6IjQ0MWRhNzU1MmIyZDQ1NTMzZmM5MjRlYTk4NWZkNGIwYjk1OTQyZmM3OTk3YTM3MTI4ZDNlOTZkNGMyNzkyYjI0MWRiZTkyMWQ2MWYzODk4ODUyZDRmOTM3NDBjYzM2NDljYjUyNzlhN2YwZjA5YmUzOTkwZTllZTU5OWZiMDcxN2MzMDhlN2E5MzlhNDQxYjVjM2JhMGNiOGFhMTk2NDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI1OGYxYTllYjkzNWZkMDhhNGMzYzg5NGEwNmFkMDBjYTA1NzY1ODk3MDBhNGQ1MGMiOiJiMTRmMmE3NGNiZTM4ODEwNjlmMzA1MDc5MTljNjg3MCI6IiI6IiI6ImFlOWM2YjQwZDk1MWFhYjljMmQ5Y2I5MjBhMDVmM2UxNTQ4OThjODNlMzkyZGZiZDdmZmNiZTIyODNlYjJiNzU4NDJmYTVlN2JkOTYyNmFkMTJlODE0ODc0ZjE5NjZmZWExZWI4MTc3OTNkMmViMGE5Y2I5MjcwY2M5YWE0MjY3MTE4ZmJhMGM3YjZmY2Y0ODdhOTdlYmNiYWRjNjc0OTYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIwYWJmMmY4NDUyOTViYjFkZDI4M2RhYTI0ZTc1ZmEwOGM5ZTkyMDI3OTNjNDc5YjMiOiJmODc0MmY0NDkzMmJhZTJkNjVhMDMyYWRhMmI3NjM4MiI6IiI6IiI6Ijg4NDc2OTZlOGVkZDJjN2I3NTFiNzgwYTZmYzY5ZDg0MzRhMzE0NDU5MzkzNjk0MzIxNzQ2NTM2MmIzYzNmN2IyNWI3NTE0OWY3YzY5ZDEwZWNkMTY5ZjAwZWQ5OGI1M2UwZTQ5OGFmNmQ5ZjYwMDQ0MWVlMmMwMWE5ZTc0ZWQ4NDVkMjRjZGFiNDU0M2RmZjdkMWY3ODAwYTI3ODY3MWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIwZjliYzY5MzVlN2JhZjE3ZDU2MDkzMWVjM2U3NWQ5ZmRhN2IxOTIxNGUwZmZiOWMiOiJjMTNiYjI2ZTkzNDlhNTY4NjZmODIxYzEwYTJhZTI4YyI6IiI6IiI6IjEyYTg0OTY1MWYzMTBmYmFlMDRjNGRhNDY4MGEyMWE1MGE5ODg5ODA2MTk0YmU0NzBiOGIxMTFhMzJlYTc0MTc5NGNiZTcyNWQ5OGFlOWQ0MGMwZDYwYzA0YzhiN2IzMjkxN2Y5ZGMxOGMyN2RmYjhjNjQ1NzlhMTc2YTJjNGIyM2NjMzJlNTIzN2ZhNWY5MDRhYjEyNDlhYWZhN2NkODgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiI3OWQ5NmZmNWVjOTJhZjlmZWUwYWY3ZWZmZGMxNWNlNTZiOWNiZGZiYmJlNWI0OWEiOiIyM2QxMjg4YWU0MWU2NWU1NmU3Yjc4M2Y4NWFlOGI0NyI6IiI6IiI6IjIwNmMyNTY0OTUwOTk1YWM2Y2E2ZDJhZDUxZTljYWNkNzU0MGYyNTRhMzM1ZDZkN2VlZDdlZjE3OTU2OTQ5Y2I1ZDdkM2Y0ZTE5N2U4MmFhNDQ0MmQwOGQxZDBmOTMzZTY0MWY3MDNiZTFiZTRhOWNhNTc0N2U1MjQ2ODdhN2EwMzQ3NjE0OTNkY2YyZTExMDE3ODlmMTM1ZGU1ZDNmNDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiOTRlODUyZmZiZmY0ZjIwMDc4MTgxMjIxYjVmYmI4MDQ4ZjNlOTVkZTMxM2E1MmMxIjoiMTg0MWRjYWJhZTI0YzE1NmExN2ExZDBlZGE2ZjhiYjIiOiIiOiIiOiIxNTMxOWIwNmMwNWQ0N2RlZWFlYWI1NDBlNjQ5Y2M2ZTI5ODk4NDNkZTA3ZGNhYTk2NmQ3OTlhMzY5MDJmNzI5NDM1ODVlMjc3MzkxMjA0MDE4NWFjMWVmYTA2MGM2ZWRlY2VmODAwZTMxMTZjNjZjY2ZlZWVjOWZlN2VlNzBmM2RhZTJhYzFjMDIxMDMxMGVhMTY0ZjRjNDQwMmQyZjc3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjQ3M2M3NDMyMDViYjM3NWZhZDE1ZjUzN2RmZWI0MDJkODc5NzU0YjJiNDk4N2NiZCI6IjRmODhmNGRiNTBhNjgwNmQ2ODk5ZjcxOTgxYmVlYzQ5IjoiIjoiIjoiNDZiMDY5NGJjOGFmYzZkODZkY2I4YjgwY2Y4ODE1MTA0MDA3ZWJlZGIwNjA1MGFlNjI1Yjg5MDA2MGM0ZGFkM2Q5ZTI2NjEwNDJkMjZhM2NmZGVkMDM4MzgyOWRkY2Y2MTZlYzg0ZDNmMzJkMzA3NDgwY2FmMGY4N2JhOWIwMGU4ODgxMmY1Y2IyYTRlOTRlMzU0MDkyZDBjNTBiOWJjNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIyMDIwOGM5YWM0ODMwNTEyNzg2ZmNlN2ViZGUzNDRhODJjZWUwZDdkN2E1NjA3ZDYiOiIyNjAyYzVmNTJjN2VlMjYyMDQ4NmNlNTYzNjZjYzhlYiI6IiI6IiI6ImIwYmQyYzA3MzllZDE2MDg4NDhkZDBlOWMxZGI5ZjU0N2M2NDI2ODc1NGFmMDk3MTZkYTQwYjI2ODJmYmM0NWY1NmRlOTU0Y2JjZTBkOGEzZjUzZWIyYzNhZmFjOWUzYWZlYWI0MDM4ZmUwNDJjODk3Nzg2ZmQzZGE3MGYyZDZiNjJiMTI5ODE2MzBiZjMwZDc2ZGQ4NzllMjkyNmFiNDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMzAxMWMzMWE0NGNjZmQxMjYwYWU5ZTQzMWRhNDFlODgzYjFhNmFjOTA2MGYyZmE0IjoiNmIzNmExZmNiMmEyMTczZmM3ZTBjMTIwYzI2MjdhNmYiOiIiOiIiOiJhNzgxZDk5NzBjNzI3MmU5OGQ5NDE0MzhkMzExY2Y3ZTgwZDJkNTZiMjllYjBiNGIxYzc2ZDAwOTA4NDAxZWM1YjRiYjFjNWYxNTlkYmY0MmFiMzAxMDA5MzNiMTYyOGZhYTkyZDJlMjViZDM3ZWFkNGMzMzU0YzgyMzAxM2NkOWUzMzFiZGY1ZTJjNWM3ZDExZDViZDlmNTBmZDExMGZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImVlNmQ1NzYzNWU1YWI0YjNkNzNhMjY1MmMxNDQzYjMyMjk2YmZlMzMxYjY1NzhlNiI6IjRmY2NiZjJkM2M3M2E4ZTFlOTIyNzNhMzNlNjQ4ZWFhIjoiIjoiIjoiOTBkYzZlMTUzMjAyMmE5ZmUyMTYxNjA0ZmM3OTUzNmI0YWZkOWFmMDZhYjhhZGJiNzdmNzQ5MGIzNTVkMGRiMzM2OGQxMDJkNzIzYTBkMGY3MGQxMDQ3NWY5ZTk5NzcxZmI3NzRmN2FkMGJhN2I1ZmUyMmE1MGJmZGE4OWUwMjE1YTAxNGRjMWYxNjA1OTM5NTkwYWE3ODMzNjBlYjUyZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiYzI3ZjgwYjFkMDg1ZGQxNWNiMTYzZjAzMzZkMDc3NDU3ZWNiM2YzMmE5MDI0MmY3IjoiNGRlYjYyMmEzMWI0YzUzMDM0OGI1ZjA4MDA4ZmI3ZWUiOiI1YTg0Zjk0ODA0ZTJkMDRlYWQ3NzNkMmEzMjRiMzRkNiI6IjIyNmQ5ZjRkNzIwZjU4MGMyYmU0NGQ0ZWFmMmVjOGRiIjoiNmRiNzZhMGEwMDNhNjRkZWM2ODAxZGQzMjcxZmFlOGE0M2FhOGNlMmUwZDIwNWUzODMwZTI2NzA3MmFiZTI4ZDJhNmY3MDc0OTRkMTU2Mzg1NTlmYTQyODI4NDM3NjBkYWE5MGVlYzVkMjg2NWVhMTFlODM2ZTYwMzQ1MTYwZDUxMTI0NDVhYjE3NTRiNTc4YjU1NDcxYTFkOWNhZjI3NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNTE3ZGFkYmQ2ZTIwZmQ4M2FlYWNlZDE5NzczMmIxZDVjZTIyMWE2MGY4MjEwNjg1IjoiYmQ5OTExYmMxOTJkYTQ1YzAwYzQ3ZDVlZTA3OTQ3M2QiOiIzMzI1NDE1NGZmZWI0OTgzZDI3YWMwODk4MGVjNDk0MyI6IjM0OWRiNTJmMDk0MjI4ODM1MzZkMTFhYzRhYWFmN2JhIjoiZGQ3YmU4MTFkM2E5ZmRkMTk0ZThmOGYxOGIzNWUxZDlmMTc4ODg0NGMzNzFkODExY2I4OThlYmM1NjFkMDAwY2MyODVhZmM4ZjQ4NmRhYmUzN2Q2Yzg1ZTYxNGQzZDE5NmM1NDRjYTU2MGFjNmUwMzM3YjA3MDBlMWRlZDhmYjI4OTAzZTY2MzI5YWZkZDU4OTMwOGQ1NmM1MGQ3MzgwMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiYzc2MzE0OWJhOTVlN2QwNTRkYTUyZTRkM2QwNjI4NzI1M2JjMmY0M2FlN2M5ZGEwIjoiMzA1ZDZhYTNjNjE0OGEwZWIyZTkxYjkzODVkZTU5MDMiOiJhMzY5MThlZGFmNWFkZDZmMGY4MWQzZjk5MWVlMzBhMSI6IjVjNjViMDllNzQ0MzE3ZGI4NmQ3OGFhZWZhNjZhZjQ0IjoiNTU2MGQyN2ZjNTViODg1YTI5YTQ0OWExZjg4MzU5NjY1NDljNDk1NmViYjAzOTNiYTlmZTc0OGU3NGE1YTMwM2YxNDc4YmIzZTUwN2E5ZGFhMTE1OWRkOGRkNmQxNzFiZmYyZTM4MzA1ODFkN2Y2ZmRiY2NkOTFhODc0OGQyMGMxZDk4MWNmOTA5YzMxZGI2ZWVkZjU1ODc3MjJhYzI1NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiYjQ3OWExNGQxMjVmZTQ2MDEwNTM5ODk0MzlmODUyMDBlMTk4ZGY3NTZhZmY3NTQzIjoiOGY1OTA2NzBmODhkOGMyYzcxM2Q2MzY0M2Y5M2JhNTUiOiJjZGE3YzdlZTc3ZTY2N2I5NmVmMGJhMzMwYzljYTZhYyI6ImE2MGZkMTQ3ZjZjZGZiNDA4ZDE2MGUzODhjMjBkOGQ4IjoiNWYwODhiY2ViZDgxNjU1MWM0YjIyYzMwMjRhZWFiMmY3NWM5MDZkYzhmZDBhYjBjODAwNTVlMDQ0NWMxZGMxNTFhMDZkZjgxYmQzOWI4NTM1MjYxYTdhNWRjZWRjN2Y5YjE3YzA2MmVlNmYxMjBmMjA5OWYyYWI1YWE5M2YyN2EwOGQ3YjVjZjEwMjdlMjZhZGY1NGE1MjA5MTZjMmNiNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiYmQ0NmZjMjUzZTkzMzRkNGFhOGJkZmY1ZTIxYzEyZTI2MTUxNTE1OWIwMWE0NTE2IjoiMTczNTQ4NmU1ZWE4YmU3NGZhMTU4YjJmZWE4ZTVjYWQiOiJjMzUxN2Q1OGNkYmQwMjYyNjU1MTc0Y2MxZDFlYjMyNCI6IjQwNGY3YjhlYjQ2MWQwNzczNjhlMmZmMDZkZGI0MTg5IjoiN2YxY2YxNzJiNjdlYzdjNTY2YzllMjRjMDcxYjc5YjVhNGExMzVhMzY5ZGVkNWU3OGI4Y2QyNDY3NzQ5ZTMwYzQwMWJmMTc2ZDg4Y2MwZTA1YTU4N2JiMmI4ZWQwOTIwNmJiMzE0ZGY1OTAwOWU4OGEwMWVmMDA3ZTYxZWJhMmU0MDA5M2FhMDAzZGFkYTQ4MzE0ODY5YzBmM2I5OWQ1MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNjAwYTMxYjhmNTVjODVjZTI3ZWNlNDcwNWU2ZmU4Y2QxN2EwMWU3ODI3ZWMyMzgzIjoiNmRlZWYwNmEwNzlhZDIwNjJlNzdkYmEyMWZlZjY0NDEiOiJjYTU1MTJhYjMyOWVlOTQxYjIyZjMyN2ZlMGRhZDQ5OSI6ImMxZmZjOTcyODlkOGQzNjM3MjlkYWExNjI4YTJjNzM1IjoiYTgxY2Y1NTYzOTQwZmZiYmVlOWRiZGNhZjdkYjFlN2U1M2I0MjdmZDNhMGU3OTVjMzVhMWI4ZWI2ZjYzMTZlNDNiODA0NjkwYTQ0ODk3ZTBmNDJmYmRmYThjOWYxNzc3MDI0ZDJhNTMwZWRhOTk0ZWQwMzhkZTYwYjkwNjAyNTQ1Y2VmOTliNjlmMzcxZjc5NjE5YmFiZGE5MzYwYzY2NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZjM4YjBjZDE2ZTk0MzRkYTkxNmI2M2U4YjdjZTFhOTE4ODNlYzIwOGMzYmFmNzZkIjoiNTM0Nzk5ZTNmZTUxYmMzNzBhZjY1NjgwNzJlMmU1NzkiOiI5NTIwYWQyNGE2MWQyOTcxNjM0MmQyYjdiZDM1ZGQ0NSI6ImM0ZTkyZDZkYTM3YTlmNjIzNmEzOTZmMzUyYzUzYzg2IjoiNWRjMGIzYmViZGU1YmFjNmQ0ZDI0ZWMwOGYxNTEwZGM4OGUxZTA2Yzk3YzMwMzFkYzk1MTlmMzM5MmU4M2EwOWUxYTdkYjk5YjIxNDhkOTkyYTkyOGJiNWMxZjY4MjY1MDg2ZjdhODRlNjk3YTdhMGFlZGE0YjQxNTkwNjA2ZWQxMzkwNjNkZWY0NmZhMmE2MjU2NTdiMTdmMTg4NDVjYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMDZhNWU3NmQwZWU5MGVkMDIwNmEwN2E5MTRkYzIwNzk2YThhMmZiMmMwZWJiZjE0IjoiMmE0OTMxMmFmOTE5MjZhMzdiNWY3YzAwOWU4MDQ3ZWYiOiIwY2RhNzIwOTBlYmIwMDdhYjI3MTU2OTU3ZTY0ZTdiZiI6IjI0Njk1YjIyMWY0MmE1YmU2ZDQzOTljNjQ0NGM0YWEzIjoiMmIwYWVjYTQ1ZWQ0NGNhMzRhMmZjNzQxYzVlNGUyMDkxZTExNWE0MTQ4ZTcxYmQ4ZmE5MDU4OGUzMjI1M2ZmY2YzNjBkZjIxM2I0OGExOWY2ZjQ1MTg2YjY3ZGNlZjYzMjc3MjlhYzhmM2MwOGQ2NThkZTg5ZTcxNTM5NzgzZmI2NmFlODM0NDU1NDA3ZTc4MjcxMTQzMTcyOTk4MzViYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiNmMxMmRmNWQyYmExZjZhNmUxZTczM2JhYWU0MmRhYWZlYjQ3Y2MxODhkMWIwYmUwIjoiZjUxMDEzOTU2MWIyOTJhN2ExYTAyOTJiN2RlNGIxNjIiOiJmNTdhMGMxZGM2OWVhZTc0NzMzOTRhZDFiOTUwZGM2MSI6IjlkZGVkNDc3OWZhYjBjODg0M2ZhNjkzMTQ2ODM3Njg5IjoiMmJlMTVkMmVhODcwOTlhOGMwNDMwYmE4ZTk0NTEyMDhhODk4Mzc5ZGEwNzUxNjk1NjgxOTZmNjU2ZWFkYmFiNTk2MzdjMWY5NDliNDUwNmE4NTFhZTAzOTRlMTM1NTQyMTM3YmQwZGFmMWMxODhkZWNmY2U5MmY2ZWYyMzk2YWE1YmIxMjVjZjMxODcyMzBhYzgxYzM4NjQ2MzJkOTIzNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiMGU2YTc4NDNlMjllNWYxNmQyYmJiNDAyMWQ2Mzg5YWU2OTIyOThiOWY2MmFkMjJkIjoiZjA0MzRmMTEyNjk5ZDExNmNmYTdlZGRhZDQ4NmM1NDQiOiIxNDZlYjA0MjM3N2NkZjZhMDgzMTU1OGFjMTdhZDk3MSI6ImIyOWMyNmQ0ODNmZGU4NDg5MjYzYWNjYWZjMTBkNjk4IjoiZWNmMDgxMmFlYmVlN2E0NTIzMzkwNzFkOTkwNjcwOWZlMDBmY2NiYjBkOTRjYzEwMWI1MDc2NDZmNTU0ZWJmMzYwMjQ1OWE0ZjIwYjgyMzI1YjBlMDgzY2ExODlmNTlkNjhjNTc1M2RiZTk0MjY0M2YwN2M3YWZjZGU5OWY5ZDBjYzI4ODM5MjNjYjgwNDU2ZmNlZGM1MzViZmE3ZDY0NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6ImI2YmM1N2Q2NjNiNjcxODY4MjY1ZmRiNzU2ZTE0MmZlNmRhOWMwN2RkMDgyMWM2ZSI6ImY0M2M1MjIzYmZlNzI2YTMxNjRhZmRjYWJlOTMxZWI3IjoiZGRmNDE5ZDhlMDc0YTRmZjJkYWYwNmExYWRhZDRiZWQiOiJlMDg2MmU3MWM0YWM1MjE5NGNkMzIwZDE5NmU0NDZhMiI6IjRmOWI5ZTlhYWI0OTM1NzExNjBjNzMyODgxZGMzNThmNzNhMDg0NTBhMTUyMTI0Nzc1ZTU1OTg4OWE5Mjk4ZDAzNGNlMTg4MmRkMjExNmY0ODYzZjE1MjQzOTNlMWEzZjFhY2VhZGNkOWM0MTYzZGFiN2M1NDNjZDM3NWMzZjRiNjFlZDcyNDc1ZDE4MTIwMTdhYzgzYmYyMjg0NmQxNGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiJmNTY0OWZjMTg0ZjMzYzYzY2Y4NDg0MDExZmEyNzU3OGMxNjUxZmNkMWEwNzgwYzYiOiIxNTNmN2IyYzliYzk0OTRhMjBlZDBiZjE2Yjk3ZmZkYyI6IjYxMDZmZDRmZTBlMWQ4OTQ4MzdiYTg2MjRjZWJiZTJmIjoiZmRjMjk4OGU2YjM1ODkyOTY0NWQyNzU5NGZhOThkZjgiOiI0OTEzMGE3NTBiNDc1OGU3ZThkZWM4ZDgyYmY2NmFlNzcxZDUxMTgxYzMzY2JiYTlkODQwOTNlZTRmODNmNmUzYWFkZDNmNDBmYmNjNDQxZmNmOTBlZDgzYjgzYzlkOTY3MWI5MDkyOTA3YTM2MjMxZWMzZTJjNTY3NzVjNTY5OWZjZTE2YWJhZDEwNGIyOTFkZDEzZjY3YWQ0ZTFmZjRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMSwxMjgrNjQsMTI4LDEyOCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMToiZmMzZGZiMmYyOWI2NDkzOTE0MzdhZmY2OTIwNzYwNjcxZTQ3MGViZjA5ZThmZDY4IjoiNGU3ZDQ4ZmU0OWVjZWZlYmVkNzQ5OTc5Yjk2NWQ4ZjYiOiJhZTc0MDVkZTQ5NTc5NDdkYzA5ZmIxYmUyMjI3Yzc2MyI6IjNmYTIyMTU4ZDliYjE5NDhjNjQxMDJmM2FjMDBiZmVkIjoiZmZiNDliZThjNzE0YjUwMjU5NWRhOTI0ODI0OGZiMDA5ZWFjZTI0ZmY3N2QyOThkZmU4YjA1ZWZlNjQ0MTM1MjIxM2JkMjM2YmRmNGIzZGUzNGZlZTM1YjA1MTc0N2Y0ZTU0OWY2OWJiYWQ4YzcyOWYzYjVjZjJkYjI5YTBhYjZhZWI1OTA4NTdlMGY0OGJhYmZmM2E5ZWEzZTQwNzliNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTEsMTI4KzY0LDEyOCwxMjgpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTE6IjMyMDE4YWZiMDdhNjE0MWU5YTZiYWRkYTliNjQ3ZjY1MDA5MGJhMzQ3NWQwMTQ5YiI6ImZhOTJmNjZiYjdhMDZhMTY1MmQ0MDg0YzE1ZDJmNzc4IjoiMTNjMzJjNDU2Yzc5OWNmMDgwOGUwMGM2ZGU3ZWZjZTAiOiI2OTM3MjgyMTM3OThkZGU4NDE3NmRhYmZiNTA0MzRkNSI6IjEyYzlkNjY4M2U2ZWJiNTEzNjI1M2RiNjBiMzliMzIwM2Y1MjYwN2U0NGQxM2FlODA3MDljZGYyZmE2MWZmNWJlZmIwODM4ZjU0NGUzOWUxMzU4MzBiNTczYWM1YTMxYjc1MzVjMGEyNTAyMzcwNDAwOTA2NjU4ZTZiMWU5YTBmNTc1NWYzNjBkOWJmZjY4ZmE1NWFkNjI4YjQ5YTg5MzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0xLDEyOCs2NCwxMjgsMTI4KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEExOiIzZTMyNWRhYWIzMzAxODU2MDQ0ZjQxNmYyNTBiNjE2MWU0NDdlNjNkODVjYTA4NGYiOiJhOWQyYTUzZGJkN2VmNGI5MTUwZGQwZWQ0ZDAwMmU1NiI6IjRkZTZjOTIzMzQ2ZDdhZGMxNmJiZTg5YjlhMTg0YTc5IjoiOWU5ZTM0MTI2MzVhZWM2ZmNmYjlkMDBkYTBjNDlmYjMiOiI0OGFjODY0NmIzMzRlNzQzNGU1ZjczZDYwYThmNjc0MWU0NzJiYWFiZTUyNTI1N2I3ODE1MWMyMDg3MmYzMzFjMTY5YWJlMjVmYWY4MDA5OTFmM2QwYTQ1YzY1ZTcxMjYxYmUwYzhlMTRhMWE4YTZkZjljNmE4MDgzNGE0ZjIyMzdlMjNhYmQ3NTBmODQ1Y2NiYjRhNDYyNTBhYjFiYjYzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImE3NmU3N2E5NjlhYjkyNjQ1MTgxZjAxNTc4MDI1MjM3NDZjMzRiZjMyMTg2NzY0MTA1MWVkNmJhMzkzNjgwMzNhZGM5M2Q0ZSI6IiI6IiI6IiI6Ijg5MjU5ODdkYjU1NjZlNjA1MjBmMDliZGRkYWI0ODgyOTJiZWQ5MmNkMzg1ZTViNmZjMjIzZTE5MTk2NDBiNGUzNGUzNDU3NTAzM2U1NmMwYThmNjA4YmUyMWQzZDIyMWM2N2QzOWFiZWM5OGQ4MTMxMmYzYTI2NTNkNTVmZmJmNDRjMzM3YzgyYmVkMzE0YzIxMWJlMjNlYzM5NDM5OWJhMzUxYzQ2ODdkY2U2NDllN2MyYTFiYTdiMGI1ZGFiMTI1NjcxYjFiY2Y5MDA4ZGE2NWNhZDYxMmQ5NWRkYzkyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjY1Y2RhYTVhYjE0N2QwYzc5ZmRkMDJiMjRmYzk0ZDBlNDI3ZjU5ZWY5YTMxZjQ0NzQ1OGM2YmVmZTBjMmNkZTVhNThjNmI3ZCI6IiI6IiI6IiI6IjBkMTY0NjgyYjViYjU1MmE1M2EyYTk0MjM3MzYzOWQ5ODU3NjQ1MGNhNjMyZmFlYmMxNTA2MDY5MWE0MjE5NDY3YzVhYTEwNjAzNGNkMTlhMjE0YTBhNGYzMWQ0MDJlNjhjNGM1NjVmNDliMzNiNjgwZDUyMmVmMjVmNTQxZTgyMDJiZTc3OTczMDM3NmZkY2Y1YjdiNThmZDZhYzk1OTIwNGE4OGY5MTAwODY1MWQyYzAyYWRhODI1MDVmOTE0ZDRkOWI5YWVhNzk2Nzc4NGU1MzIwZTE4NWUxMjQ4MjcwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjY1MDk5NmYxNDc3MTEyYWY3NjA0Mzg2YmU1YWNlNzgyMzI5MDQzMTVkOTlkODdkNzJhMDY3MDlkMzMxYTZmOTMwYjQ0N2NmNSI6IiI6IiI6IiI6ImQzMzQxZDc3NjdjZmQ5NTY0MGExMDdiM2FiYWVkN2I0ZTE4NTViMzQ4ZTNhZTViY2M1M2EwYjBkNDlkNGI0OTc2ODM3ZWM4ZjM3NmYzODMyNzEzNTU3OGVjYTdlZTU4MzIxNWJkNWM3OWViZjQ5OTgxNmY3OWFmY2M0MDJmZjFlOWZmYzRhZDBmODk2NzYxYzljZmY3NTA1MGJmODRiYWExOTRjMzU1NzYzYjE2YjVkMjY0OGQ0ODBhMmI0OGYyMjY2MjY4NWRlMzljN2NlZTkwYWEwYjZlZGY4MDYyZTQyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6Ijg5ODY0MGNlNDY3MjAxYTUzZTc3MzFiZGZiNTcyOTc3ZjdlYjNlNDkwNTBiYzFlMzY3Y2E3NGJmMGEyNzM3NmQzMzlkMDlmNCI6IiI6IiI6IiI6IjRmNWVlYTkyNzAyM2I0YWJhYjVkNGQ5OTQ0ZTg0Y2EwMDFlZTA4MWNiYzIxZDQwODBlMTUzNGVlNmQxZDhhNmY2MDM2MTAyOWZmYTk4M2JjYzc5YjVkNjVkNGFhYWFhZjk4OTgzZGUxM2RkZGUzOWE3MzlmOWQ5NTg3OGZiMzFmNTdmOTYxODRlNWYyZjNhZGY2NTRhNDY4YzYxNjIzN2ZjYmM2YjJjMTk0ZTI0NzE3OGNiOTAyOTRmNjMxYzQ0OWEwMWYxZmUwOWMwMjU4N2M0NjAzMDViZTlmYzcxYjVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImZlNDA1ZGQ3Mzk1NmJmNmVjODc1NTE1ZWViZDhjNWVjZDYwNTUzNjQzZGE3NTA5MTRjODNkZmM5MzYxMWQ1NzM5MGFmNzMyNCI6IiI6IiI6IiI6ImQ4YWUwZWI4MTkxM2ExOTBjNDM5ZjhmZmE1NmMwNjE1NWE3M2Y4NGIyMDYwOGIyYjJlOWVhYjMwNjEyMDJjZWJhZDE4YWI4YjNlYmE4MTY3MjE1MmMxYzAyZWY1NzNjZDZlODYyM2MzOTJmYWNiNmE4NTc0MjVjNjc5NWNkNzk5OWMxZTdmNTZmM2ZhOWFjY2NhMDE4MDc2ZTBiZmMxMDZkMDc1ZGY5OGY1ZmI2NmYyODkzMzIxNWU5Mjc2Nzc3ZGZjNDc5ZTcxYThkNTA2YTY2MTk3OTE4ZDliMGY3YThmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImIwNjg5MmY2ZjQ1NWFmZGRjOGViNjBhYWUzNWIzNWE2NGY2M2IyYWE4NWEyZGFlNGVmNDg5MjY2ZjdiYzM1NGY3MmQ2OGI3MSI6IiI6IiI6IiI6ImZjMTBjMDNmYzM3ZDNiZDVmYmE2NTkxYTk3ZjYzNTRhOWVkOGJhMmI2ODA2NzQ0NDMyODUxZjQzYTNjZTY0MThlMzljY2I0MTdiODUzOWUzNDlhY2VhNTg4ZTJhYmU1ZGEwNjE0N2M5ODI1YzZlNTBhMzFmODU4OWE1N2NhM2JmYjEwZjBkYTljOGU4OWZlMmUzNzJiNWFmMWNmOTZlMGZiZWVjNWQ5OTIyODc3MGM0MWE3NmU1ODdkYTdkODc2NGQ1ZjIzNWY1ZDFkNjE4OGQ4NGFlNjFjNTJjMjE2NGZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjkxNzRlMTc0ZTllMDMxZjYyYjJlMTlhZTVjMGJlZjIyZWVkN2Q1NTk4ZTZlNzM1MDQ3NTlhMmMxNWIwNWMyNDczYTcyMWQyNiI6IiI6IiI6IiI6IjE5NjJmMmQ0NzNiMzFhMjU3NmRiZDc4MDIyZjRlZWI5NzQ2NDFmYTJlOWNiNTgyZjAzYWI3NDE5MjlmNTFmMGY0NjYzMTI5ZTY4ZGRjMjQyZTFjMmNlYWZhY2VjM2RjY2I5N2UwOTUyN2FmZjQ2Yjk0OGYwYWJjZWExNDUxNjk5ZGMzYWU0ZDNmYjVlMDRjODQzMzdlMTdiNTA0YWYyZmI1ZjFhYTZlYzAwMzNkZGYxMzhhMTg4ZWUxNjJjNDk3NTI2NTYzYTY3ZGE4MDE1Mjc1ZDg5ZjBlMWU5MDJiMmVmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImViMWQ0NWJhMGQ4OTUxYjdiMWQ3Y2U5MjJiN2QxZjZlOTRkYThiODIxOTQwMTI2YzlkYTViMGI0MzgyNDI1OTMwNzQzYTA1MSI6IiI6IiI6IiI6IjMwNmIxZjczM2U2ZjY5YjZmMjZiN2JhYTU0NDFhZjQ5NjdhNWNhZDhmYWFkMTgwMjk0NDBhYTk4OWFlZjYwMjRkYmYzYmEwMmRmYzJjNjk0ZGFkNjQ5NmZmNzYwZDcyYWU2OTE0YTRkY2Q1ZTNhNDQzZjRiY2IxNGJmMmI2NDk4NmYzNWMzMjQ0OWYxNWUzMDg0ZDQ2ZmFkZmEyYWUyMTNkYTZiMjZmNzg3Y2VmODliNmEyMzA4NGE5Mjk2MDhhOWY2YWNkODMxNTgwOGMyOWY4YWU0MzVhNDAyMDJhMDEyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6Ijc4Y2RjMTU2N2NhZjJmZjUyOWVmOGUzNDc1YzBmYmIwOWE0OGI2ODdhNTQ0ZjczOTlmNTAzOTQ4NjIxZjI5Njg2ZmIxNTIxNiI6IiI6IiI6IiI6IjIzNjcwNjdkOGVjMTg5YjA4MTllZGEzNDYwMjc2OGEwNjk4YjRiNTQ1YzdkNTIxNGZhZDU4Yzk3ODdiODk4MDliOTdmM2FmNWY5MzQ5OTA3ZDI5NTRmOGMwZGNjYmRiZTYzY2MwMTliZGUzYTZmYWUxMDQ5N2FlNTdmMzNlOTFlZDU1YjZmYzRhODNmZThhMjQ2MzU1Mjc5NmQ1MTIwZGE4MDY2ZjcyODVhODM4ODk1ODgxN2IxMjE4ZTAwNmQ3ZmM2MTdmNDUzYWQwZjkyMTc5NjZhMDczMWJhOTlmMDkzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjI1ZjllZTI0ZWUyNWFkM2QyOWE5NzRmOGY1NTJiMTc4Y2IyOTJiODQ3YTZiZTgwNjk0MjEzYTZjMGIzM2UyNWUyOWZkM2VjYyI6IiI6IiI6IiI6IjMyZmUyNTFhNjE5ZDE2NGMyMTczNjViMTJhMzEzYTk0MmI2YTljM2RmMDA3NzUxYTVmYTlmMzU2NDEyZDExNDJjNzg1YzI5MmUzZGM5ZDBiMWQ3N2UwODA4OTJlNWQzOWI5MWM1OGZkMTQyNDU4YzcxMTgyMDYxOTIwYTA3MjFkYjQ1M2EzMmZlN2ZmYzhiMmMyMGJmMTE4OTRmYTM3ZDhmMGU5NDYzZWRkNDNhOTdmNjUzNjIyOTUxMTliZTAzZDVlMDZmNjE3ZmRmZjZhY2NhYWI4YzRkYTcyYWM4ZjgxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIwYjY0NDIyMTc4OGMyNjZhYWUwMGEzYjYzYTg3ZjMyY2E5NmE2YzMyYjExNmNkMzdjYWE0Zjc1ZmY1ZDdlNTZiZTNiNGUyMGYiOiIiOiIiOiIiOiJkYzkyNDVkYTc3NTAyY2FkZDFhOGFjNGQxY2Y2YTE5OWM4ZTUyOWRlZGExMGM4N2FiNmM2OWNlZWE2ZmRlZjM2ZDQ1ZjRkMDM2MDIxYjkzZmU1YjM0MmM1MmZlMWU3MWQ4MWU2MTdiZWJjNTg4MDRhZjMxMDliYWI5M2RiYjJlNWM1NDZlMTA4YmQwODkxNzEwMTI4YjVlOGU0YTRmMDFkZjIwMDNkMDM4ZmVjOGNlZjQyNmZhZDdmNzJkZDVlMDkxYjQ4NTBlOWJmNDkzMmQ2MGRlYWNiNmU5ZWEzYzVlNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiYTY2NzdiYWRmZjcwOTY2YTNjZDJmZWJhYWQ3ZGU3YWE1ODQ5YmE3NjM3ODliMjBkMGEzOWI2YzU2OTI2MWI4MjZjZGIxNWU4IjoiIjoiIjoiIjoiZTA0ODM4Yzk3MGY1ZDcyMDhhMmE3MzEwZGE4OTNkNjUzOTE2NjZhNWRjNjJkOWVkZTcxZmMzMDgxNmNmYzNlODA2NGFjNTljYzlhYWYzMDI4MzM1NjA3OGM4MTI2NzZjYTIwYmViMDQ0YTZkNzhkYjZjNWVmOTcxOGE4ODU1OTYwN2YyMjUwMDI0NTJjMDE0NTk5NDQ0MzMwMTNjZmZmZWE4NGQ2ZmU0MDRmYmJiYzJkNjZiYjUwYTJmYTAxZDhhNWQ2ZTRlYTliNDAyZGM1MjU2NzUyNDYxYmY2ZmNiN2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjIzMDFkOGMwNTMzMTJkYjA0ODgyZjQyODRjZjhiNDc5NjZjMWM5YjhjNDlkZTg0N2QwYzExZjE0YzVmNzBjZTE5MzQ2NTYyYiI6IiI6IiI6IiI6ImI0NjI0NjUyNmIyOGYzYWQ3ZjZkODczMmNhM2JmYzQwZjAwNWQ5N2E1MTk2NDBhNGNlNzI4NDg2ZDhiZjgzMGQ2NjFiZTVhOTdiMTExMTNlODkwOTZkOWJmMTVjYmVmNzNlYzI4YWMxM2UzZmJlYWRjOWJjYTUwMDkxOGJiZTkyZWEyM2UxMzFjYzYyMmRiZmZlMjI3MmRiMTZlYzVkNGNhMzBlOWJkOTg2ZDE3MDlhZTIyZDEwMTgwNTE0YmNkMTFiZDYyMThlYTFmYmFiYTEwMTQ0NDk0NWExN2E0YzRiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI3ODY0NGVhMWIwYzRjNTVjNGFkZGViNDc2ZmMzNDQ3MWVhMmM0MzkzNjk3YWE0ZjE3MDcyNjAxMGM0NDNiOGUxYzRhNmIzZWEiOiIiOiIiOiIiOiJlZjFiNDFiZDAzZWU4NDYwZDU1NzU5ZGI2NWE0Yzk3NzU4ZjQ4ZTNhMDkxMjdiZTA0YzdlZDA4YmJlZTVmYTVjZjExOTkyOWRmNDJjMTg3ZTJhMzQ3YThkZjk5YzUwMmI2OTNhN2FlNDE5NDZmNDkxOGQ4NDY4Njg4MGFlMjlkNmQ4ZmJiYzRmY2NjOWUyOTU4NzZhMjQ5Y2ZhNTllZmZkMzMxOTk0ZTg0NzE3YjRjNzY2MzdkZjM2YmViOTYwNzYxODgwZGFhYjNkNDMzNzYzNDE0MzlhZjJjZThlMzNjYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiNzFhY2I3MTIzNWU4OGUzYWE2ZDhiYmYyN2NjZWY4ZWYyODA0M2ViZTg2NjNmN2JjZjQ5Y2I2NDJiM2Q5MTVjZjAzYjkwZTY1IjoiIjoiIjoiIjoiMTQ0YWViNTZhMTFjYjY0OGI1ZWM3ZDQwYzI4MTZlMzY4NDI2NjkwZGI1NWI1NTlmNTYzM2Y4NTZiNzllZmU1Zjc4NDk0NDE0NDc1NjgyNWI4ZmQ3YmY5OGJlYjc1OGVmZTJhYzFmNjUwZDU0ZmM0MzZhNGJjZDdkZmFmM2E2NmMxOTJhNzYyOWVlYThhMzU3ZWVmMjRiMTE3YTZlN2Q1Nzg3OTc5ODBlYWVmY2Y5YTk2MTQ1MmM0YzEzMTUxMTljYTk2MGFkMDg3NjRmZTc2ZTI0NjJhZTFhMTkxYmFlY2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJjNWM4OWMyNmFjNGNhOGIxMTA2YmE5MGE4ZWY0ZDZkNjg3ZGZkODg3NDNjYWE1ZmJhZmE0NzQ1ZDljMWY4MzcxMTIwYjEwYzgiOiIiOiJkMzQ4M2FlNWY5ZWQ5N2VmZDNmODUyZTRhNmYyMGYyNWM5NDdhMDNmMzlhNGI3NWMiOiIyY2Q1MjNjNTk1OGNkZjQwM2NhYTYxYWJlNWM0NzM5Y2RiOWQ0MDE1MmYwZTc2OWEiOiIxZmVmNGU2YWJjMjc3OGQxYzNlM2NlMDBmZGI1ZWFlMWViZWJkZDVjZmYwYTcwODc2NDRjODU2NWQxZThiODc2YjJjMDUyNjRjYTgxNDk4NDY4ODUxZmM3YjllNWEyMTYzYTA2ZjM3N2QyZWQ3NTRjMDk1YWRjNTlkYzAxNWE3N2VkZDY5ZTRlZWNiZTQ4ZDlkYzEyN2VlZGZmZjVjYzczYWUzODEyN2FlM2E1MThmZTdmYTVhYmQxYTljNTNlZWFmMTQ0NDIwODczMzQxZTJlZmEzZDgxNDkzYzY5YjA0ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjY4NjBlNDRiZjU4MmRiOTgxOGZmYmU0YzY5OWQ0MjE4OTY1YzI5ZjQ2M2Q3YTAyZmUxZjM2Yzg0NDJiMGE1ZDEwM2RlZjdhMiI6IiI6ImU5ZjU5ODM1NzEwOWUyYTUzMmRjOTgwMzg4YjhhNTk5MTI1NjE2NmQ2N2MzYmMwMSI6IjU4ZWJiZjc0MDJiZTA0MTcyNDcwMWU1YzAxMzJhYmU2MDRjMTFhNjJhOWRlMWQyZiI6IjUyZmFkMzRiMjcxMTNjMTQ2NTk1YTY3NDBmNTA1YmMyZDNlZGY2NjE4OTc1Y2I5YzRhNTE1NTc4OGVhZjA4Yjk2ZDIzMjYxMGQ5YjRlZTA2MjY0ZmQ5MmYzMTlkZjVhNTJiOGY5ZTMxYjAxNmE2YzIxZDI3ZDMxZDlkNDJiYmI3NTg4YTcxNDJmMjZlY2UzZGRmMjExYzhjZjQ1MzA5NDdhZGVlMzAyYWE3MWMwZDdmZTkwNjBjMWIyNWYxYzFmMmUwNTM1OThhN2ZiNzJjNGRiNTVmYjFiMDIzNTJkNjBhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMjdiOWY3OGFlMDc4MjFmMmI1NjI1YzhmYzNhMDNjZWVjNGZjODA2MmJlODYwYzJkYjIwNDAzZGQ4OGE4NzUxZGNhZDU2MTU4IjoiIjoiMWI2Yzg0OGZjZTcwNmFiZDczNjEyZGQzZmQ0MjFjMWM3Y2U5ZjRjMmQwZWNjNjcwIjoiMTRhNDM2NDVjMWI2YWUzOTRmNzk1YWY2Y2EyZTkwODRlN2U3MDdmM2YyY2VkZDdhIjoiMzNjNTkyMDE3YWY1NDViM2E5Y2YzNDE5Y2UxYzYwNGU5YzdjNjg3ZWJmNjQxOGZiZWY0N2VjOTZlNjFmMTk1MTA2OGVlYzliNjAwMDVkMjQ1NzQzMTNmMDRmZmMxNmMzMDg3MmVjODNlNDFlMjQ4ZTNkNWM2OTUxOTMwZDZhODhiODkzMWQ1NTAyZDExNDJjZTUwNjc2YjNhZGY0ODQ1M2QxYTAwODE4OTY1OGRiODUxMWQxOWEwNmFjOTdiNGQ1Y2ZhYzE5YjU0ZThlNmI4OTlkNTAxNzE1ZjQwMWVmODUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI4ZDdjZjVjMmUzNjBlZjc1NWMxZTlmNWI3YTQ0YTFlMjlmMDljZWU3Y2E0NGUxNTkyNWZmZTlhNDdiMmQ1NWZkNzc1MGIzNTYiOiIiOiIwZTY5MWM5YTQzNTkzOWM2MTVmMDY4NmVhZTg4ZTA5MGJhNWM0YjNmNWU2ZTAwYzAiOiIxZTNhNDUyMjk1NjE3ZTVhOWU2Zjc4MjU2ZDI3ODFmZWViMzgxMjc1M2I0YWFkOWEiOiJhMzA3NTY5ZDhhZGYzZjdlNmVlNDU2N2E1YjJiZDMzOGJhZGI5MjM0ZTdiMjdjOTI0MjlmZmE3NWU0YzU2YzA1MjlmZGM2YzE1ZGY1ZDQ3YzQ2ZTNkMmVlYWRjZjFiOWU5M2E1ZGQ2Y2RlOTlhODJmMDRiMGQ5N2Y3YTNiZmQwNWMwZTFkODM3MDk4NzIyMjMxMGFiMThjOTgwY2U0OGIyNjc5MzYxYzNkOTAxMWRkMzU1YTliMDYzMzdjMDU0ZWUzNzkxM2Q1ZjRkZDMwZDFmYzk0MmNkNzMzYTBmYTVmOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjFhMGQyYzczNDkxOGM1MzljMWIzMDZhNDY0ZWI2YjU0ZjkyZTk1OGU4NjM2MDMyYWVjMjNiYThhZTgxN2JlYzQ4Mzg0NDYxZiI6IiI6ImI4YWQ5ZTYxM2E4OTFmZDBkYjg5NTcxZmRkZGE3NzgyNzM4MmU0MDZjZDNjZGY3ZSI6IjFlMTcyYTcwOGFhNGZmYTM2MThmZjBkN2IxZjliYTM0MWY0ODExNTA3ODUxZGZiNCI6IjY3NGRmMWYzMDk1ZDZjODdiYzU0ZGQ5YjJhYWEyYzc4NmJkNTBlNGRkYzAyNDkzNzQ1ZDgyMGRhZDg1NTIxMzFmYjNlMzg5ZTk5YjA3MDk0NzhiNjVkNDI2OGYyYTNiNDY4YTg0NDdkYzU3MmE2ZWUwMjRiZTZiZTliZTlkNDI4YzEyY2M5Mjg5NGQxNWRkMWM5NTlkNjIyMmRjOWVjMzA0NzhjN2EwYjU3ZjViZDhiZDUzODY4Yjk4ZDc2NzQ3MzhiNTRjZjc0MTAwYWUyMTU2OTNiYWJiNmRiM2IzODkwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiOTVhMzBhMGNhNzc5YTQwMzhlYTkyMGNjY2ZhNGNkZDgxNGNhMTdkNTYwZDUzYTc1Y2YxNzBmNDcxMjk5NGY5YmNiMmVmYjc0IjoiIjoiMWRhNmM4NzI2YmJmYTNjOGJlZTZkY2ZmNmY3NmYyZDU1ZDYwNTI3YzRmMGRiMjZiIjoiNTk1ZWJkOTAzYTU5NmExZjEyMTc1MDgwMTg1YmQ5NGMyMzM2ZWI4ZGQyOWEzODdkIjoiMzE3YzE5Y2Y0YTQ1YjhjZjNmNjQ1ZGEwODRhZGE1NGQxYjFmODEzNzkxNTI0MjRmZGRhZDIyYTZkYzliZDIyODQxZTBjNGM1YTM2YmZiNzg3OWVhZmJkMWE5MzkxMjE5MDVhOTM4YWUwMzRjN2ZjMDFhZmI1NjYwN2UzNWY4OTVmNDZmMTNlOTFjZTRlOGU3NWI2YTg3YTFlNTU0NGUxOGViMTk0ZmQ2NzU0YjA2ODg1YWMwNWUzMzJhMDVlZDQzNmU4ODk5NjVlNDA1ZTBmMjA2OWIwNGI0MGVhMGY2MzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI4YWY4OTMwNTYyNTEwMjMxYTU5MmE3MjU4N2ZhNmFkN2MyMzRlMTMzMDQ2OTY1OTA3NjQyZmJjNzg1YzBiODZjYmE4NDRmMGYiOiIiOiI5ZWU3YjIyMTA2NDk2NjU4MmRjODM2NDM3YjgyMzg2ZjUyMDRhMzAyYTQxNzkwNzkiOiI0NzNkOTE3ZjViNjZmMGY2ZTNmYjQ2NzBiYTA4YzJjYmQyZWE3NjViNDZiMTA4MzgiOiI1YzJmYzljYzcxNDhkYmU0MGE2OTJiMzYzNjc3OGViODAxODg5NDlkMTk4YmJhM2U4MzU1Mzg2Yjc4YjU0YmZiOTYzZjVmMmQ5MjAyOTg4ZGEyMGNjYmYzMzZhN2M3MzdhNjZjOTAxNDliOWU4ZTMwNjQ3NzE1MWM0ZDkxMmY3YzYxZTg3MmRlMGQwZTQ3NzAxY2JlNzY1ODY0ZGU1MzZkNTk5OTQ2YjhiZDY1ZTRkODlkNGU2MWRlYjUzZGU5OTc0ZmJiZTYzNDUwMTgwMGZlZWExMDBmZWE1NzNlMmU1MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjJiOTU1NGVjZjk0YzdkNjQ3YTRlMTE3ZjQzMzI2Y2FiNTQ0NjZlYmE1NmEwOWE1Mjc0MWIyNDQ1MDU3YzQ5MTkzNWMwNjdkMiI6IiI6IjAxNDRiZTY5NzhkYmE4NWFhNjQ1ZDc5M2MxODgxZGMyZGViMWJkMjEwODExZWM5ZSI6IjFjZDI2NWYzODEyNTY4Mjc0YjY0Mzk1NGM3MDkyM2E3NmRmY2M5ZjEyMzM2MDExMSI6ImY3NDU5YjBjMjM5NjZkYzFhNTNlMGM2NDA2YzllNzhlYmU3MjhlMzQ4NDIyNGNkODhiNmIyZWE1NTQ1MjJlNzVlYjRhMWM4YTNmZGM2NjU2MTQyNjQ2NGY1MGI4ZDBmZjk1YjI2NjY3N2Q5MTc3NmIzNDRhODIwZWI0ZmQ3ZDU1NDY3ODMwMDU1ODAxMWE3Y2Q4NWQyMmU5MmRjOGVjMmMyZmExNWM2MzMwYmExNTdjM2U3MTcyODMwNDQ0N2MxYWQ0ZDY0ZjNkYTRmYmYyNmQ5MmUxZTdjNThhMWIyODljIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMzM1ZWRlODYwM2ZjZGU3OGVhOTg2OWRhMmRiY2FiNGE2ZTcyZjFiNTM0MzlmMzA4NWQwNmI4NTZlNjI3NDExYTljZTFjMjk3IjoiIjoiZWRlZGM3M2ZlMjY4OTM1YzEwODMyYzQ2MzU0OWY4MjA0YTI5Y2YwZmUwMGE0ZDg3IjoiZWYxYjhhODBkZDQ5ZDJjMjYzOTk5ZGRjMGQ1YTFkOTIwNWMxYjFjNjYyMzlmZDgwIjoiMDViZmU5N2MzOThiMWUzM2VlMWM1NDdjMGVkYjViNjU0YjcwNjBiNzY2MDQxOTU0NDBkMDZkZDJmNjE0YTM5OGM2YzQzZjE4MDM4OTNjNGM4ODg4YmVkZWNkZjk5ODM2N2NmOTkyMzAxYTI1ZjI0YzI2M2Y1ZDM2YmJmYzZmZThiODM5Y2FkMjkzYjM2MTdjMWQyYzYwYTgxNGJkYTAzNTllM2Y3MTdmYTgwZmM3MzI0YWY4ODI3ZDQzOGM4ODY0Mjc1NGIzOWIxMGQxOGNmNWJmNDJmMTExNzdhMGJjNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI5YjAyNzVkODYxMTE3NTUzZWNkM2M0ZDdjZmU3NjJmODhkZjIyYzRjNDE5MGRhYzhlMGJlNTg3MjgxOGUyZGQ3NjUyNjFkNTgiOiIiOiJjZmMwYjA3MDgyZDUxNDQyNWIxN2NlM2NiMzM0ZWM2MmJjMWIzYmUwYmU1OGNhNGIiOiJkM2M3MGFiNWZmN2EzNjRhOWU2ZGM3NTEzMmFjNjdlMGQzNzNmYTJkZjMwMWFmYjUiOiIwOWZiNDFiY2NlYjAxNmU3NTQ3OTVlMWNjZTU4MmYwY2FlOTFkN2JiNTAyNDU5NzVlYjc1Mjc0ODE5ZTFlNGRjZGZiYzVlMmYxM2ZkMjZiOWE5ZjllOTQ1Y2Q4MDdmZmVjNGUyNzU2ODFlYTdiZDMzZWFlMTNlZmQ4YTAxZWRiZTAyNTYyZTc3YjQ0YjYzMTJmNDE2YzNkZDBiZTY0ZjJiYWUwYmE0YjliYjM2ZmMzYTQ0ODQxZDIxZDhiMzU3MWMwZWY2NDRkODhjZjNjYzNjODUxYjI1NmExNWY0ZDcxNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIxOTgxYzNmOWNhNThmZDEwZTgzNzdhOGQwZWIzY2YwMjEwMmFhYjZmN2EwMzNhZjMxMzU1MzNkOWZkODUwZTI5ZWNiOGRjOWIiOiIiOiJmOTk3OGJhNDFkZjIyODk0YWQ1ZjM4NDljMWJkZjIxZjdiYmMwMTI4Yzc4MmU3OWIiOiJiNGQ1N2RlNWUxOGQzOTMyNzNlZTlmM2VmOTczNjU5OWM2ZDYzOWY0MzcyMzkyMTkiOiJmZWUyM2RiMmZjYzcxNjI0ZmIzOWY1NzNlMzNhMTQ5MGVmYzcyMzBjMjdlOTI3ODE4ODI1MTYzNGY5YzA0NWJjYjI2ZTc5ZWNlNmExNzM0OTE0NzVhZTQ0YTk1N2M0MjY5NTcwZjU0NjkyMzRjYThiNjg3M2NjOTczYzhkOTcxNzhjNThjZWM2NThhMzUyYmFkMGQ0YzYwMDFjYWU1NjY0MjU4ZGI1OWFkNzZlYjYzMDRkMTY2MjY3ZWFmYjQ2ZjRkZDUzNmE5MTRmYTZkMWFjNTgzMTdlN2M1NTdkNDY1MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJjMTBkNGU1MjEzNTBmN2NkMTg1MzU3NmQwM2M0YmVjZTNlNThjOGM3NDA4NTllNGUxNjk3OTQ5OWVjMTM2NWZjMDczNzM2YTMiOiIiOiI3OGIyNDU1MjAxNTNiYWFjYzY2ODQ2ZTdhODNhMmE5MjVmODkyZDRjMmVlNjNjMGYiOiJjOGNhN2EzM2RlNTk5MWQ0NGQ3ZWY3ZGEyZDMzNjhjYzJjZGI5Mzg5NWMzOTRkNDEiOiJmOTJjMTVmNTgzMzgwMGIyOGRiYTJkMTM0ZDRkY2ZjNDFhYmY3MmY1YTcwMDQ2OTU1MWU4Y2NiODNiZGIwNzcyZDE0ZDZiMjZiYTY5NzgxNjllM2RkYmU1ZjIxNGQ1NzkzMGRmY2FkNzE5YmYxMGQzMDY3NDkyNDZkMjYyNGJlZGQ0YTE4ZDMyN2I4YWU2YmVlNjdjZjBiZmI1ZjY0OTgyNGJiZDA0NDBmMDQyMTQ2Yjk1YTgzZTU4NDVjZWQ2OWE1NWJhMDU1ZDVkZmM3MTgzYzNiYjI4ZDYxMzEyZDI3NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI3NjA4YjU2MTc3ODU5OTVhMWY3MTQ0ZWU1MjI5ZTRmOWMxMzhlNDE4YmNjM2I1ZTA2MWE0MjJlOGNmODc1ZjU4NjUwZTk5NmQiOiIiOiI5NjFjMmQzMzAzOWU2MGEyODcxZTFmNWI4MjA5N2Y2YjFjYjAzODM2ZGJhNWY0NDAiOiJiMThjYjUyZDM4NThhYzViZjU5ZjIxNmEyOGMwYWQ0OWYzZGM4OGM2N2I1ODcwZTAiOiI0YjAzMTNhZTg3M2NlNWViZjA4YWVjMTYwNDE2NDkyZTRjNGM3OTdhNTAxNzA2MWVhNDJhZWZhMDY4NWFiMTliNzRhN2FmMTFmMDE5YjlmYjYzMDcyYjc5N2Y3ZWEzMzU0ZWZkMzJjNGFiZDFlODY2NDA1YTMxOWVkMmZhMTNmYzgxMDE5ZDYxMzI2ZTcwZTUwMzE0MWI5Yzc3YjQ4NzlhNDVlOWYzNmYxMDFkYmZmZjQzNTkxNDcyODJlZjgxNDg4OGZlZTgxNjQwZGVmMjVmNTUxY2VlNDFkMTI2MDlhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJmZWY3YTQzZmVhMmZmMWEwZjYyNDA4Njk4NWU1MzU3NzhkN2E3M2RiYzQ3YmMyM2U5ZGE5MmVkZDVkMmYyNzNjZGJiYzAyNTEiOiIiOiI4MzY3MzFhNTc0OTdhNjllMzFmOGRiNGY3Mjk3NzRhZDY1ZjMxZDk2OGRiYzU1YTgiOiJiY2NhOTZkODA4YmE5OGJiNTBlOTBhZmU1OGZjODhlOTVkYzE0YzNlOTBjNTYwMDQiOiI0ZjJjNjRlY2QxNDY2ODkwNjRmYmY0ZmNmZmNlMmEyYWIzOTEwZTcyZWM0ZmFlYzI3N2Y3YjllOWVkNTEwMzgxMzEyYjAxZjIxNjUwZTE3NWViZTljNDVjMTFlOTc3Mjc2ZjEzYmUwMTUyNDNhMGNkMTZhMTkxYWJiYWM2NDYyYmE5NmU0ZTRhMTEyMGIyODA4M2RhOTMzNDE5ZThjOGYwMzA5OTkwNmViMWVlMDEyYWUyOTExMDRjNjUzMGY1MWI1ZTMyZTY2MzFjYWI4ZWY1YWFkNjhjMDA0NTI1NWJhOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIwMDE5N2M3MGIyZjBkM2U5OGU0YjM4N2VjNDJhNjVjNDEwNmExNjg5YWI1ZGU2MTEwMWVlNzZmNGI1ZTUzMGU3ZWZlYWY5NjQiOiIiOiIwMzAxNTMxMWNkZGQwOTYxZWM3YTc0Y2I4NGQ4MzVjMDU4YTY5Yjk2NGYxOGExYzEiOiI1ZTBkOTllMGU3YzU3NzY5YTQzZWE3NzFjNDY3ZmI1ZTJkZjZkMDZkYWUwMzVmZDYiOiI3MmU4Y2E3NjY2ZTQ0MGFjNmE4NGFiNmY3YmU3ZTAwYTUzNmQ3NzMxNWIxMTliNDllNTU0NGJmM2VhZDU2NGJkMDY3NDBmMDlmNmUyMDU2NDU0MmUwZDU5N2FjMTVhNDNiNWZiNWEwMjM5YTMzNjJiYzNhOWVmZTFjZTM1OGRkZDlkNGYzMGI3MmUxMmVkOWQ3ODM0MGM2NmIxOTRiZWI0YjEyZTk3MzIxMzkzMWI5Y2ZkMGNjYmRmNTQwZDJjMzZjZTA3NGUyYmVhYzdhNGRkYWM1OWUwNmU0YzcxNzhkMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImM1Yzg5YzI2YWM0Y2E4YjExMDZiYTkwYThlZjRkNmQ2ODdkZmQ4ODc0M2NhYTVmYmFmYTQ3NDVkOWMxZjgzNzExMjBiMTBjOCI6IiI6ImQzNDgzYWU1ZjllZDk3ZWZkM2Y4NTJlNGE2ZjIwZjI1Yzk0N2EwM2YzOWE0Yjc1YyI6IjJjZDUyM2M1OTU4Y2RmNDAzY2FhNjFhYmU1YzQ3MzljZGI5ZDQwMTUyZjBlNzY5YSI6IjFmZWY0ZTZhYmMyNzc4ZDFjM2UzY2UwMGZkYjVlYWUxZWJlYmRkNWNmZjBhNzA4NzY0NGM4NTY1ZDFlOGI4NzZiMmMwNTI2NGNhODE0OTg0Njg4NTFmYzdiOWU1YTIxNjNhMDZmMzc3ZDJlZDc1NGMwOTVhZGM1OWRjMDE1YTc3ZWRkNjllNGVlY2JlNDhkOWRjMTI3ZWVkZmZmNWNjNzNhZTM4MTI3YWUzYTUxOGZlN2ZhNWFiZDFhOWM1M2VlYWYxNDQ0MjA4NzMzNDFlMmVmYTNkODE0OTNjNjliMDRlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiNjg2MGU0NGJmNTgyZGI5ODE4ZmZiZTRjNjk5ZDQyMTg5NjVjMjlmNDYzZDdhMDJmZTFmMzZjODQ0MmIwYTVkMTAzZGVmN2EyIjoiIjoiZTlmNTk4MzU3MTA5ZTJhNTMyZGM5ODAzODhiOGE1OTkxMjU2MTY2ZDY3YzNiYzAxIjoiNThlYmJmNzQwMmJlMDQxNzI0NzAxZTVjMDEzMmFiZTYwNGMxMWE2MmE5ZGUxZDJmIjoiNTJmYWQzNGIyNzExM2MxNDY1OTVhNjc0MGY1MDViYzJkM2VkZjY2MTg5NzVjYjljNGE1MTU1Nzg4ZWFmMDhiOTZkMjMyNjEwZDliNGVlMDYyNjRmZDkyZjMxOWRmNWE1MmI4ZjllMzFiMDE2YTZjMjFkMjdkMzFkOWQ0MmJiYjc1ODhhNzE0MmYyNmVjZTNkZGYyMTFjOGNmNDUzMDk0N2FkZWUzMDJhYTcxYzBkN2ZlOTA2MGMxYjI1ZjFjMWYyZTA1MzU5OGE3ZmI3MmM0ZGI1NWZiMWIwMjM1MmQ2MGEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIyN2I5Zjc4YWUwNzgyMWYyYjU2MjVjOGZjM2EwM2NlZWM0ZmM4MDYyYmU4NjBjMmRiMjA0MDNkZDg4YTg3NTFkY2FkNTYxNTgiOiIiOiIxYjZjODQ4ZmNlNzA2YWJkNzM2MTJkZDNmZDQyMWMxYzdjZTlmNGMyZDBlY2M2NzAiOiIxNGE0MzY0NWMxYjZhZTM5NGY3OTVhZjZjYTJlOTA4NGU3ZTcwN2YzZjJjZWRkN2EiOiIzM2M1OTIwMTdhZjU0NWIzYTljZjM0MTljZTFjNjA0ZTljN2M2ODdlYmY2NDE4ZmJlZjQ3ZWM5NmU2MWYxOTUxMDY4ZWVjOWI2MDAwNWQyNDU3NDMxM2YwNGZmYzE2YzMwODcyZWM4M2U0MWUyNDhlM2Q1YzY5NTE5MzBkNmE4OGI4OTMxZDU1MDJkMTE0MmNlNTA2NzZiM2FkZjQ4NDUzZDFhMDA4MTg5NjU4ZGI4NTExZDE5YTA2YWM5N2I0ZDVjZmFjMTliNTRlOGU2Yjg5OWQ1MDE3MTVmNDAxZWY4NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjhkN2NmNWMyZTM2MGVmNzU1YzFlOWY1YjdhNDRhMWUyOWYwOWNlZTdjYTQ0ZTE1OTI1ZmZlOWE0N2IyZDU1ZmQ3NzUwYjM1NiI6IiI6IjBlNjkxYzlhNDM1OTM5YzYxNWYwNjg2ZWFlODhlMDkwYmE1YzRiM2Y1ZTZlMDBjMCI6IjFlM2E0NTIyOTU2MTdlNWE5ZTZmNzgyNTZkMjc4MWZlZWIzODEyNzUzYjRhYWQ5YSI6ImEzMDc1NjlkOGFkZjNmN2U2ZWU0NTY3YTViMmJkMzM4YmFkYjkyMzRlN2IyN2M5MjQyOWZmYTc1ZTRjNTZjMDUyOWZkYzZjMTVkZjVkNDdjNDZlM2QyZWVhZGNmMWI5ZTkzYTVkZDZjZGU5OWE4MmYwNGIwZDk3ZjdhM2JmZDA1YzBlMWQ4MzcwOTg3MjIyMzEwYWIxOGM5ODBjZTQ4YjI2NzkzNjFjM2Q5MDExZGQzNTVhOWIwNjMzN2MwNTRlZTM3OTEzZDVmNGRkMzBkMWZjOTQyY2Q3MzNhMGZhNWY4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMWEwZDJjNzM0OTE4YzUzOWMxYjMwNmE0NjRlYjZiNTRmOTJlOTU4ZTg2MzYwMzJhZWMyM2JhOGFlODE3YmVjNDgzODQ0NjFmIjoiIjoiYjhhZDllNjEzYTg5MWZkMGRiODk1NzFmZGRkYTc3ODI3MzgyZTQwNmNkM2NkZjdlIjoiMWUxNzJhNzA4YWE0ZmZhMzYxOGZmMGQ3YjFmOWJhMzQxZjQ4MTE1MDc4NTFkZmI0IjoiNjc0ZGYxZjMwOTVkNmM4N2JjNTRkZDliMmFhYTJjNzg2YmQ1MGU0ZGRjMDI0OTM3NDVkODIwZGFkODU1MjEzMWZiM2UzODllOTliMDcwOTQ3OGI2NWQ0MjY4ZjJhM2I0NjhhODQ0N2RjNTcyYTZlZTAyNGJlNmJlOWJlOWQ0MjhjMTJjYzkyODk0ZDE1ZGQxYzk1OWQ2MjIyZGM5ZWMzMDQ3OGM3YTBiNTdmNWJkOGJkNTM4NjhiOThkNzY3NDczOGI1NGNmNzQxMDBhZTIxNTY5M2JhYmI2ZGIzYjM4OTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiI5NWEzMGEwY2E3NzlhNDAzOGVhOTIwY2NjZmE0Y2RkODE0Y2ExN2Q1NjBkNTNhNzVjZjE3MGY0NzEyOTk0ZjliY2IyZWZiNzQiOiIiOiIxZGE2Yzg3MjZiYmZhM2M4YmVlNmRjZmY2Zjc2ZjJkNTVkNjA1MjdjNGYwZGIyNmIiOiI1OTVlYmQ5MDNhNTk2YTFmMTIxNzUwODAxODViZDk0YzIzMzZlYjhkZDI5YTM4N2QiOiIzMTdjMTljZjRhNDViOGNmM2Y2NDVkYTA4NGFkYTU0ZDFiMWY4MTM3OTE1MjQyNGZkZGFkMjJhNmRjOWJkMjI4NDFlMGM0YzVhMzZiZmI3ODc5ZWFmYmQxYTkzOTEyMTkwNWE5MzhhZTAzNGM3ZmMwMWFmYjU2NjA3ZTM1Zjg5NWY0NmYxM2U5MWNlNGU4ZTc1YjZhODdhMWU1NTQ0ZTE4ZWIxOTRmZDY3NTRiMDY4ODVhYzA1ZTMzMmEwNWVkNDM2ZTg4OTk2NWU0MDVlMGYyMDY5YjA0YjQwZWEwZjYzNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjhhZjg5MzA1NjI1MTAyMzFhNTkyYTcyNTg3ZmE2YWQ3YzIzNGUxMzMwNDY5NjU5MDc2NDJmYmM3ODVjMGI4NmNiYTg0NGYwZiI6IiI6IjllZTdiMjIxMDY0OTY2NTgyZGM4MzY0MzdiODIzODZmNTIwNGEzMDJhNDE3OTA3OSI6IjQ3M2Q5MTdmNWI2NmYwZjZlM2ZiNDY3MGJhMDhjMmNiZDJlYTc2NWI0NmIxMDgzOCI6IjVjMmZjOWNjNzE0OGRiZTQwYTY5MmIzNjM2Nzc4ZWI4MDE4ODk0OWQxOThiYmEzZTgzNTUzODZiNzhiNTRiZmI5NjNmNWYyZDkyMDI5ODhkYTIwY2NiZjMzNmE3YzczN2E2NmM5MDE0OWI5ZThlMzA2NDc3MTUxYzRkOTEyZjdjNjFlODcyZGUwZDBlNDc3MDFjYmU3NjU4NjRkZTUzNmQ1OTk5NDZiOGJkNjVlNGQ4OWQ0ZTYxZGViNTNkZTk5NzRmYmJlNjM0NTAxODAwZmVlYTEwMGZlYTU3M2UyZTUwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMmI5NTU0ZWNmOTRjN2Q2NDdhNGUxMTdmNDMzMjZjYWI1NDQ2NmViYTU2YTA5YTUyNzQxYjI0NDUwNTdjNDkxOTM1YzA2N2QyIjoiIjoiMDE0NGJlNjk3OGRiYTg1YWE2NDVkNzkzYzE4ODFkYzJkZWIxYmQyMTA4MTFlYzllIjoiMWNkMjY1ZjM4MTI1NjgyNzRiNjQzOTU0YzcwOTIzYTc2ZGZjYzlmMTIzMzYwMTExIjoiZjc0NTliMGMyMzk2NmRjMWE1M2UwYzY0MDZjOWU3OGViZTcyOGUzNDg0MjI0Y2Q4OGI2YjJlYTU1NDUyMmU3NWViNGExYzhhM2ZkYzY2NTYxNDI2NDY0ZjUwYjhkMGZmOTViMjY2Njc3ZDkxNzc2YjM0NGE4MjBlYjRmZDdkNTU0Njc4MzAwNTU4MDExYTdjZDg1ZDIyZTkyZGM4ZWMyYzJmYTE1YzYzMzBiYTE1N2MzZTcxNzI4MzA0NDQ3YzFhZDRkNjRmM2RhNGZiZjI2ZDkyZTFlN2M1OGExYjI4OWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDAsMTkyKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIzMzVlZGU4NjAzZmNkZTc4ZWE5ODY5ZGEyZGJjYWI0YTZlNzJmMWI1MzQzOWYzMDg1ZDA2Yjg1NmU2Mjc0MTFhOWNlMWMyOTciOiIiOiJlZGVkYzczZmUyNjg5MzVjMTA4MzJjNDYzNTQ5ZjgyMDRhMjljZjBmZTAwYTRkODciOiJlZjFiOGE4MGRkNDlkMmMyNjM5OTlkZGMwZDVhMWQ5MjA1YzFiMWM2NjIzOWZkODAiOiIwNWJmZTk3YzM5OGIxZTMzZWUxYzU0N2MwZWRiNWI2NTRiNzA2MGI3NjYwNDE5NTQ0MGQwNmRkMmY2MTRhMzk4YzZjNDNmMTgwMzg5M2M0Yzg4ODhiZWRlY2RmOTk4MzY3Y2Y5OTIzMDFhMjVmMjRjMjYzZjVkMzZiYmZjNmZlOGI4MzljYWQyOTNiMzYxN2MxZDJjNjBhODE0YmRhMDM1OWUzZjcxN2ZhODBmYzczMjRhZjg4MjdkNDM4Yzg4NjQyNzU0YjM5YjEwZDE4Y2Y1YmY0MmYxMTE3N2EwYmM2YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMCwxOTIpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjliMDI3NWQ4NjExMTc1NTNlY2QzYzRkN2NmZTc2MmY4OGRmMjJjNGM0MTkwZGFjOGUwYmU1ODcyODE4ZTJkZDc2NTI2MWQ1OCI6IiI6ImNmYzBiMDcwODJkNTE0NDI1YjE3Y2UzY2IzMzRlYzYyYmMxYjNiZTBiZTU4Y2E0YiI6ImQzYzcwYWI1ZmY3YTM2NGE5ZTZkYzc1MTMyYWM2N2UwZDM3M2ZhMmRmMzAxYWZiNSI6IjA5ZmI0MWJjY2ViMDE2ZTc1NDc5NWUxY2NlNTgyZjBjYWU5MWQ3YmI1MDI0NTk3NWViNzUyNzQ4MTllMWU0ZGNkZmJjNWUyZjEzZmQyNmI5YTlmOWU5NDVjZDgwN2ZmZWM0ZTI3NTY4MWVhN2JkMzNlYWUxM2VmZDhhMDFlZGJlMDI1NjJlNzdiNDRiNjMxMmY0MTZjM2RkMGJlNjRmMmJhZTBiYTRiOWJiMzZmYzNhNDQ4NDFkMjFkOGIzNTcxYzBlZjY0NGQ4OGNmM2NjM2M4NTFiMjU2YTE1ZjRkNzE2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjE5ODFjM2Y5Y2E1OGZkMTBlODM3N2E4ZDBlYjNjZjAyMTAyYWFiNmY3YTAzM2FmMzEzNTUzM2Q5ZmQ4NTBlMjllY2I4ZGM5YiI6IiI6ImY5OTc4YmE0MWRmMjI4OTRhZDVmMzg0OWMxYmRmMjFmN2JiYzAxMjhjNzgyZTc5YiI6ImI0ZDU3ZGU1ZTE4ZDM5MzI3M2VlOWYzZWY5NzM2NTk5YzZkNjM5ZjQzNzIzOTIxOSI6ImZlZTIzZGIyZmNjNzE2MjRmYjM5ZjU3M2UzM2ExNDkwZWZjNzIzMGMyN2U5Mjc4MTg4MjUxNjM0ZjljMDQ1YmNiMjZlNzllY2U2YTE3MzQ5MTQ3NWFlNDRhOTU3YzQyNjk1NzBmNTQ2OTIzNGNhOGI2ODczY2M5NzNjOGQ5NzE3OGM1OGNlYzY1OGEzNTJiYWQwZDRjNjAwMWNhZTU2NjQyNThkYjU5YWQ3NmViNjMwNGQxNjYyNjdlYWZiNDZmNGRkNTM2YTkxNGZhNmQxYWM1ODMxN2U3YzU1N2Q0NjUzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImMxMGQ0ZTUyMTM1MGY3Y2QxODUzNTc2ZDAzYzRiZWNlM2U1OGM4Yzc0MDg1OWU0ZTE2OTc5NDk5ZWMxMzY1ZmMwNzM3MzZhMyI6IiI6Ijc4YjI0NTUyMDE1M2JhYWNjNjY4NDZlN2E4M2EyYTkyNWY4OTJkNGMyZWU2M2MwZiI6ImM4Y2E3YTMzZGU1OTkxZDQ0ZDdlZjdkYTJkMzM2OGNjMmNkYjkzODk1YzM5NGQ0MSI6ImY5MmMxNWY1ODMzODAwYjI4ZGJhMmQxMzRkNGRjZmM0MWFiZjcyZjVhNzAwNDY5NTUxZThjY2I4M2JkYjA3NzJkMTRkNmIyNmJhNjk3ODE2OWUzZGRiZTVmMjE0ZDU3OTMwZGZjYWQ3MTliZjEwZDMwNjc0OTI0NmQyNjI0YmVkZDRhMThkMzI3YjhhZTZiZWU2N2NmMGJmYjVmNjQ5ODI0YmJkMDQ0MGYwNDIxNDZiOTVhODNlNTg0NWNlZDY5YTU1YmEwNTVkNWRmYzcxODNjM2JiMjhkNjEzMTJkMjc0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6Ijc2MDhiNTYxNzc4NTk5NWExZjcxNDRlZTUyMjllNGY5YzEzOGU0MThiY2MzYjVlMDYxYTQyMmU4Y2Y4NzVmNTg2NTBlOTk2ZCI6IiI6Ijk2MWMyZDMzMDM5ZTYwYTI4NzFlMWY1YjgyMDk3ZjZiMWNiMDM4MzZkYmE1ZjQ0MCI6ImIxOGNiNTJkMzg1OGFjNWJmNTlmMjE2YTI4YzBhZDQ5ZjNkYzg4YzY3YjU4NzBlMCI6IjRiMDMxM2FlODczY2U1ZWJmMDhhZWMxNjA0MTY0OTJlNGM0Yzc5N2E1MDE3MDYxZWE0MmFlZmEwNjg1YWIxOWI3NGE3YWYxMWYwMTliOWZiNjMwNzJiNzk3ZjdlYTMzNTRlZmQzMmM0YWJkMWU4NjY0MDVhMzE5ZWQyZmExM2ZjODEwMTlkNjEzMjZlNzBlNTAzMTQxYjljNzdiNDg3OWE0NWU5ZjM2ZjEwMWRiZmZmNDM1OTE0NzI4MmVmODE0ODg4ZmVlODE2NDBkZWYyNWY1NTFjZWU0MWQxMjYwOWFhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImZlZjdhNDNmZWEyZmYxYTBmNjI0MDg2OTg1ZTUzNTc3OGQ3YTczZGJjNDdiYzIzZTlkYTkyZWRkNWQyZjI3M2NkYmJjMDI1MSI6IiI6IjgzNjczMWE1NzQ5N2E2OWUzMWY4ZGI0ZjcyOTc3NGFkNjVmMzFkOTY4ZGJjNTVhOCI6ImJjY2E5NmQ4MDhiYTk4YmI1MGU5MGFmZTU4ZmM4OGU5NWRjMTRjM2U5MGM1NjAwNCI6IjRmMmM2NGVjZDE0NjY4OTA2NGZiZjRmY2ZmY2UyYTJhYjM5MTBlNzJlYzRmYWVjMjc3ZjdiOWU5ZWQ1MTAzODEzMTJiMDFmMjE2NTBlMTc1ZWJlOWM0NWMxMWU5NzcyNzZmMTNiZTAxNTI0M2EwY2QxNmExOTFhYmJhYzY0NjJiYTk2ZTRlNGExMTIwYjI4MDgzZGE5MzM0MTllOGM4ZjAzMDk5OTA2ZWIxZWUwMTJhZTI5MTEwNGM2NTMwZjUxYjVlMzJlNjYzMWNhYjhlZjVhYWQ2OGMwMDQ1MjU1YmE5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwwLDE5MikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjAwMTk3YzcwYjJmMGQzZTk4ZTRiMzg3ZWM0MmE2NWM0MTA2YTE2ODlhYjVkZTYxMTAxZWU3NmY0YjVlNTMwZTdlZmVhZjk2NCI6IiI6IjAzMDE1MzExY2RkZDA5NjFlYzdhNzRjYjg0ZDgzNWMwNThhNjliOTY0ZjE4YTFjMSI6IjVlMGQ5OWUwZTdjNTc3NjlhNDNlYTc3MWM0NjdmYjVlMmRmNmQwNmRhZTAzNWZkNiI6IjcyZThjYTc2NjZlNDQwYWM2YTg0YWI2ZjdiZTdlMDBhNTM2ZDc3MzE1YjExOWI0OWU1NTQ0YmYzZWFkNTY0YmQwNjc0MGYwOWY2ZTIwNTY0NTQyZTBkNTk3YWMxNWE0M2I1ZmI1YTAyMzlhMzM2MmJjM2E5ZWZlMWNlMzU4ZGRkOWQ0ZjMwYjcyZTEyZWQ5ZDc4MzQwYzY2YjE5NGJlYjRiMTJlOTczMjEzOTMxYjljZmQwY2NiZGY1NDBkMmMzNmNlMDc0ZTJiZWFjN2E0ZGRhYzU5ZTA2ZTRjNzE3OGQzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJlNDU0NzI2MWM5ZGRhNmJhZmU5ZmRkZjQzNWE4MGViYzk2MzU0YzdjMmM4ODQ3YzVkMjZjNmU3M2E5NjdiZmM0ZWJhZjg2MTMiOiI0Mjg0OWRjOGVlYzYxMWVhYTQ5MjUyMDY3ZmE2MGQ3ZDcyNjdkNzExZGMzNWI1NzYiOiI4MTVmNTBmYzIzM2YxNTdmOTZhZDA2MjdjMzU1YmNlNDA3YjI2OWRjYTkxYWY2NjEiOiI3NzVhMWM5ZGE2ZjU4ZDRlYjk1YjI3OTM1ZWNjMDFkZGUzMWZmMTdjZTJlNGU2NWQiOiIyNWFkYjc3NzUyM2E4MGE2ZGJiNmFjMWZkMDhlMDJiZmM0YjQ2ODZjZWM1ZWZlM2FlOWFhMmQ0NDY5ZWFlOGM5YzM2OTNmZGM4ZTBmYzEwNzcyMGI3Nzg5ZWY3MzMxZTIzZmUzNzk5NDEyZWM4Njg1N2ZmYmJhNTE1YTVhZjRkOTEwMTNiMmYxNzY2OTQyMWM4MjIwMDViNDc0Nzk0Mjc5MGExMWEyNGM0OTc0ZjI3ZDU0ZGU2OTcyN2IwZWQ1MDdiNmE0OGE5ZDZjNTNmOTNlMmYzZDMzZGY3M2RkNjQzZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMDZkNjc3MDAxZDliM2M5N2ZkYTRkMDk3NzhhZWUzZGUxMzFiNDEyMzY5NmIxMDlmODFiYjZiMGQ3ZmJjYWIzYzU4NDJiYjgzIjoiZjk5NjM4ZDJkNDM2NWI2NjJjZDgzYWI0ZTZhN2JiYjYyNGU2YzcyYjdiMzhlODFiIjoiMjBiN2Q1NmY2MjIyYmFmZWVlZWU1OWRiY2ExOTMzZDgwODYyMTg4OTFmM2E5YmZlIjoiOWRlNGYyODQ3ZmUyMzljYjFhM2RmNGI4ZmY2NGMyNWQ3YjA4NzBmM2M5ZWJlM2EzIjoiZTE4ZmYxOTgzN2NlMjFlNjg5NDQ2NTkzMjEzMTFiODU4NGRkNTE1ZWQ4YTZhMWYyYjBhYzA2ZTY5MDA5YzNkMGNmMDQ4OWFmODc2MjAxZWZhZDk2MmNmZDFiYTU0ZjU0MGI5NDEzMWQ3ODhkM2ZlYTc5N2M0YmMwNzk1OTNiYzc5MzJiYWE3MGFiYjE0NWEzNTU3NDFhOThjNTg0ZjBmYTMyOThiODMxMGIwMWUxYTZkZWJmNTM1OWQ3ZDAyYjFhNmM2NjMxMDBhY2I1Njk3NTQ1MGJlYzIwZTkxYjczNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImFiZDM4YzA0NjVjZGZlMDE4ZjM2ZmZiYjdhMGVlNTFkNjc2NzVhYjRmMGYxZDFlOTM0MThiYjRjZGY2NDk5YTM3MWFmNGQzYSI6IjlhMDdkNTU3MWQ4NDFlM2MxYTllYjNmYjQ4Y2RlM2IzZTA4MGUxYzJlMGRiNmE2ZCI6ImEzOTJmNzkwMjJhZWJiZWMwYzgyYjk4MTI5MzYyN2QxMzlkZmI1MjMyZWI0OTBiNCI6ImY1Y2UxZjZiMWU2NzE1YzQ5YmVhNDJmZjQzOWZkZWNkOWIzYjdmMmU1NzgxMzNjYyI6Ijg4NWM1NGFkMjU5OTJmYzM4MjYwNDk4ZDZmNGQ4YzczZDYxNTlhZjVmN2VmZWYwNjE3NGRhMDNhZmNkODM4NGNiMjg2OTBmZDlkZWQxZDI2ZTJkZmY3NGFlZTRkZDBjNDdhMGQ5OWM2ZmMxZWM4ZDhmYWNjYmRjZjZmZGIxMmE1Mjg1NjRhZDBkODEzMWJjZjUyMjJkN2U2YzY5YzUyZGExYWNiYTAxYjcyMWM5OGFjNWEzMzcyNTExMWYxMmY2ZDgxMDAwMDlkN2NjOWVmYjdhZDhkN2Q5NWVhNGU2MjBkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJiNTI2MjBlNThlMGI1MmI4ZWVkMGQ2YTZjNWY0ZmY2YzE0ODNjNjFmYzQxZGFjZjcyYmY0NzViMzdkMDY4ZDA2MWQxZWRjZWEiOiJlZjBkMjMzZGUwMGQyNDYyMmI3ZDRmZjQyMTVhYTcyMDc4N2ZlODBhYWViNjVkN2EiOiI4MWI3MzVhY2QzZGNiMTNlNjUyMzFjMmQ5ODBmYjQwY2E4NTAzNzA1ODFmMjMwZDIiOiJiMjMwMmQwMjRkOTJjZGFlZDRiMTJmNzliMGFlYjIwYzk4YjIzMjE3MTBmZWZhYjIiOiJhZTk0MjA0NjcwMTk2YmFmNzQwNzY4Zjk3YjNhMDk1MTM0YjM4NGFmZWE2NjdmZDkwYTc3YTE2YzhhZTM5MGE3MzJmZjQ5YTMwNzNhMjdkYjBmN2EyYzhhZDVkN2NiNTI3ZDMzNGEzN2FiZjA0NzJmMjkyYTIwZjJhMjhlNjY3ZDdjOWU5ZjdiOGZiZGQxNzdmMzZiZjkyZDY2MjIzYWVlM2Y3MTJiNmM5YjA2NGUwN2FiOTZmNmE3NzYxM2VhNTUwMDhmYjRmOGZiY2IyZjFjY2JiMGRhNzUzMTZjMWZhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiMjU5MmE1ZWQ4NmZmNjRiOWI0YzFmYmI4MTIyMmQxYmZiYzUzZjNhNjM5NTcxZWNjMzU2MDg0MDU4Yjg4NTUyMzdkYTE1YzUwIjoiYTYyNmM1MWVjOTllNzI0MzE0ODVkMmJhMDI3ZWQ5Y2FiY2FlN2I4NjExNmFiZTRmIjoiYzQzMDg3NjU1MmQyODc3NjU3MDkyM2M2Yjc0ZTQyYzMyMTBmMDExMDQwMDZiZjExIjoiZmUyZWJjMjM5NjkwYTRlYjE4YTBiNWU3NWQwODgzMWNjMmViMDdjOTgyYzYzOTczIjoiMDA1MDQ1YWRlN2NjMTU0NjdiNWVhNzg0NjQ5ZDk4MDQ1NDBhODQyZmZiYTRkYjhkNDRkZjRmNDRjNjk0ODBiZDRmZTk2NWI2NDVhZWQwOWQ2MjE5MGRhZWIyNjkzYTIxOTJhZWMzZDcxNDUzYTgyMThlNDcwMDIwMWFiOTIyYWMzNWQyNDFkOTUxNTBiNDdjYzdhMDUxODk3YmU0ZDk1OGYyZGE1YzJlYmJmY2ViMWM1NTBjYjY3YjMyZmY4M2NlNGZkODQ1ZmQ4MjZhMGQyNDY5YjUwNmY1MTU4NzY1ZmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjM3Njc4NWY1ZmY4YTgyY2ViMGFhZWIwMTA1MzNjYzEwODkwNTllYzU4M2MzMDJiMTRiYzQ3ZTJjYjhjMjcxMTgzOWNlN2Y2OCI6IjZkMzQ1ZTI0ODMzOWU4OTNmNzU2OTZjMDM5YWM0N2U1Njc4Njk2ZmQ0ODlhMzkzYyI6ImIwZjNmYTExMzFjM2ZkZDVjN2ZkMmRlOTM5MzFlNDVhNjZmYTAzMDQyMmFjNjVkYiI6ImM2NjM0MWUzZjlmYjgyZTNiYTg1ZjIyOWZjYjdkMzQ0NTdlNGE2YmE4Mzk2YjU0OCI6ImI5MmQxN2UxYmU5NGIwMzg1YThjYzNlMTYxODk4MTFmZWY3YjI4NGExYjBiNmIyNTIwZmRlNzlhZjc4MjZjNzQ1ZTc0NjQ4NmE3MGNkOGRkOTkzMGIxNjNkYTc1ZjdlZWE3YzIxNmU3NThkOWVkNmM3NDVkY2Q3YmRlMTliYjkzODJjMWY3YzM3Y2QxNWI3MDNiODg0ZDdkNDUyYzI1NWIyNTA0OGE4MzY4NDRjNWZmMjhhYWFjZjczM2E1MmMyODkwNGIzNmUxYjUxNzI5ZDdhZWQ4MWQ2MDFjMDg3MmRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiIyY2MyNTU3NTgyYzVhOTBjZDJhZDBjNGE1NTc4ZWIwYmJjOWJkZTQxYjEyNmU0NmQ4ZTljMzU2MzM0MWJhMjM4NDE0ZWI2MjgiOiI5ZDJmYmI5MTUzZTNmZmVmYWUwNzcwYzc5ZGUxMGRiMDY5YTVmZjlmNTBlMzE3ODciOiIyZTU0ZTMyNTM5ZTI3ZWY3NmFjMWVlYWUyZTMwYzIzODU2NDc2NTJlMjA5MDNiMzkiOiIxZjRlMDEyNTU5MDhjM2M4MDQ5NTIxZjg5NzJjMDFlZGU3ZGM3NmM0MjVjNTk2NDAiOiI3ZDZjY2RmYWIzM2YzMjI4OThjNDcwYmUwMmQ4MjU3ZTBlOTUyZGQxMGY0MDdiM2E4ZWFlZWJhNDdjNTQxZDk2OGQ3OWVjYTI5ZTE1NTQxYzE1MDVmZTRmMTlhNDE3OTdjOWNhMjI4MGMwNjI2MWZlOWQwYzU4YmFiNjVkMTZmNTc5NGI1NzU2NmI4Nzk1YzM4YzdiNDNkNDc2MWM4ZmQxMDdiZWI5NTE0N2EwZmU2MWFlOGRjMzFlMjVlYjI5NTdlNDRjMDQ2M2NhN2MxYjU4OWVhNTg3ZjBjYWUxNDI4YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiZTY3MGY4OTYzMjZiNzYwMzRlNDNjZDg1ZjZmNmYxMWZlNjU4MmQzNDcxYThlYjg4ZDM3YTIzMDJkZTAxMGFhYzBlNTU2ODYwIjoiNWUyMTgwOTFhYmVlMTk2MGVmODFmNGQ1YTgwNDE1ZTM4OGJkMGNjNzliZWQ3MGNmIjoiN2NmODRiOWZmMzBkYmQwZjYwOGZiMjE2NDZkN2M1YjU0MmZiYTUwYWRiMzhkNWRmIjoiYzFjNGFhYmU3NjE2YTRjOTdhNGRiZGFkYjA4YTliNjNjNmUxMGNlZjhkNDYzZmQ4IjoiZDhmYmQ1NTdmY2NmMzE4MjliNWVlMTFiMDVkMDM1M2U3MjViZmYxNWZkYWFjOTRkMjFjZTk1ZDQwZWZmNTVlZGQ4NTJiMjY0YjUxNWVjNjM4NGUyZDI4ZDAxNGU0N2EyZGYwZDRmNTZhNGVjNzkzMDliMDZhZmZjNjI5MTVlMjMxZDYyZDAyYmZjNjAyMjBjNzJiN2NhN2JhNTY3MWY4ODI4MzliNzkxZWY1MzRlNzA3YTA0ZTUyNzRjMTAxMWY3OTQxZmUxMDc1YTVkMDZhNDdhZjlmYjJmNjVjMWYyMTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjA1NzZiYjJkNGM2NjNiNzgxMTkzNTA5MjUxZTJmNzZiMGE4YmI3OTJlNzk0NDk2MDBjMmMxNTRmZWI3MGNmMzNjYTk0MjUwOCI6ImFkMTVlNGZjZTlmNGRlYTQzYzEyZmY5ZjlkNTBjOTYzYjMzNWEwMTMzMjU0MTE1NCI6IjNjOGE0ZDZhYjk2Y2ViZjlkMDJiNTY2M2RjYjBlMGRiMjM2OTk2MjM0NTVjZDRiNSI6IjQzZDJkM2E4ZDAyM2ZhMTc4NWNlNDc4MWExNWViMjBhZDc4NzY4NWE0N2RhMDhmMCI6ImE2OGU2NDhjYjA3ZGEyZWI3OTVhOGM4OThjODYzMWU1NjVmMzNjMmZlOWMzNWU2ODZkNmY4NWZlZjE0NTQ0NmNiNzliYjZkMTdiZGM4MjI0YmZlNDM3NDY4YTk2MzBlZDAzYzUxN2NhZjEyMjZjMjc4YWU1MTBjODY5ZDY3ZDUwYjZiZjFjYjM3OGEzNDAzNTA0MWYyOTBkOGRiYzEyMzY1MGFiNGZiZTVjZjYwNzRlZDBiYTkwZTQ1ZDlhOGFlMDg1NjZlYTNkM2EwMGVlMzc0MWM4ZWM4ZjU2ZGNjNzhjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJmNTk3Y2UwNWI5YTViMWNmMzg0N2JiZDQxNzFlNTA4NTM4NGNjMjU2Zjc3YWM2MTU3M2I0MzU3MjZjYmQ1MzhiOTNkZTlmNTUiOiI1NzNjZjg1OWY4ZmVhMDVmMTZjNmQwM2NiNGU1MjRiOTFlOTE3ZjM5ZWVlYjFkNjgiOiIyYTg0MjQ1NDg3MGMzZjc5MzZmODAzNmI0NTNkMjE5NTU3Y2EzNDFmMjYxZDI1MTkiOiI3YWZkOGNjMjY5ODk5YWNkODhmNWM1NWFmMjlmYjBjNGNlNjc4YTBkOGViZjkyNGYiOiI4MTYyYzE2YzFjZTNkNWM2YjdjOTZmMDI4MWY0MjIwNTY5YTg4MjI3NzkzNTc1MmI4NmU3ZDNmNTQ2NDZiMjc2Y2I3N2VkOTZkYTczNzk5OTExZmNhM2QxOWQzNGMxZjBiMjEwNjhhNDcyYWZjYjc3NDEwNDEyZWZmMmFiZDAzYzc1M2EwMDljZTAyYjBlOTk1NDc3NTQ2MzY2MDIwMjk0ZWZmMGVmMGRhNjZmMzFhNDEzMzEzZTI3NzRjYTA0ZjA5YTRkNTA3NmUwZTg1Y2E5N2Q1YmI2ZmFhYzRjMGMyNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6ImQ1YjUzNzRmZTE0MzAzNWM0ZmVhNDE2NjdiYzhiYzdkNDYwMDA5OThjYzgyYWIzMmEwMDQwYzcwNWUwMWY5YjM1NGU4ZjE2ZSI6ImVkOGJiMjE5ZTY3NTE1ODc0YzViOWUzZjZhZTZlNGRmYTljNDJkMWU2OTIwNGU4YiI6IjcwZjAzZmU2ZTc4Y2MzNGVjMTY3OGIyNzA4ZmNkOGFlMzMwMDE4M2VhMTVjY2ZjNyI6IjljNjQxZDdlNzNkMWEyYjgxOWUxMTM3NDdkNzRhOTc5Yjc0YzQ0NGVkMzZiNzM5MSI6ImQ1MGRmOGUzZTE3YzBmNWUxOTY3M2JhMjA5N2QxZDBjNGNmN2E5ZGVmNzQ2NWE1YjkxYWM4ZDQ5YWUxYjZhODIxZmU5ZWZkZTg0MWVjOTA2NDU1NWMwZTJkNmNkZmE0MWYxMDg5ZjIyYTVjMjcwOTBjNWExMzY2NjBkMWFmNTg2YTFlMTMxYTg1M2YxOWJjM2M4ZjRjNzlhYTA5ZTM5YzJmMjJiNDQ1NmM2NjdlYzkwN2UyYTQxMjQyMTg2NjVlN2NjZTUwMzk5YWUxZTE5YmE5YzIzOTlmNDcwNDQ0ODM5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiNzRkN2M4YzliMTcwZTU5ZTRmMTI4YzhkZjE5NTU4MzhkZjVjODA3MWE1ZTg1NDM5ZDcxZTc4NWM2OGIzN2UxMGVmYjM5YzlhIjoiYmUzZDU0MjAzYTEwNzhkMDUxNTE5MTM3Nzc0ZDVkODUxZTgxYmUwMjYxNTVlYjc4IjoiMjNmN2I2NzU4ZDc5ZGU1ODBlZDNlYjk5NWZjMTczZGE3NDkzOTgzN2FhOGQ5ZWI0IjoiNmYwZDVhMzMzZGRlYTBkMzgzNjJkZjBkYzNlYmFhMmJlMmZlNTgyNWRkYjBjZTg0IjoiNDQ2MmZjMzIxMTBiMjViMzc5N2M1Y2FmYWFkODMwZThhNDM0NmQ5MjcwZmVkOThiMzBmMTM0NWE3YThkZGUxOWJmNTM2NWQ2ZjM3ODhlN2Y3MTVmZWIyNzYyYWYyNjM4MzljOGM4MTg4OTA4YzYxMTIwNzQzZDk3N2Q3MWM1MWY2MzI0ZDg4N2JiZGEzODBmYzA3ZWZmMDlhMzFjMjMzMmU3YjFhYTE2OTJjNTljMzM3OWRiOTVmYzIxY2Y3MTFjMDA0YzRkMzg1ZmUxNGY0OGYyZjJhMzFiY2NlNmFhZWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yMjQsMTkyKzk2LDE5MiwxOTIpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjI0OiJlYWYyN2MzZjY5Mjc5ZmQ1MjNjMGMzYTFkYTVmYzRmMDFlZDY0YzI3ZmZjZmUzYzFjNTk2NDgyZjViYWFlMTQzNGU4YzY4N2MiOiJiMDM4ODI5ZmM5NWRjYmE4NjQ1Y2U0MGEzMDY0OTFjODkzZjQ4MTM5YWUzMGEwNzEiOiJmYmJmN2FiYjhjYzI2MTJlZWVhNmQ5NDYzZWZkNTVjNDcyNDVlMDE3MTMzMzJiZDYiOiJjY2Q3ZTgxZjUyOWRlMWZmNGU2NWZjNjNkMzRjMjYyZmZkZTdlZTQ5ZTY3MDcxOTciOiI5NmRmYjc0NDUwNTc2MzNiMmYwZGViNjkxMzVkMTBkMGEyZGM1M2ZhYTljZGVkNTVkZGZiOGVkYzYzZjU0MjRmOGZlYzc2Mjc1OTdhMzAzMjgxNzdkZGU3OTYzZjc2ZjllNTQxMmI1YjQ0MDI1NmM2YTNmMGM3YzdmYTAyY2E0OWUxOWVhMTc2YWJhYzAxMzY5NmU5ZDUyOWY2NWU1MWQ0YTczNDhlNDJkZDI1NGJiZjE5ZDk2MzJkNmM4NzViOGVjZDdhNDEzOWYxYmYwMjBhMTU5ZDJhMzBhZjhkNjQ1ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTIyNCwxOTIrOTYsMTkyLDE5MikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyMjQ6IjMxOWNiZjJiMTFiMzdjODMxYzY1NGI2Y2VjMjU3MGRjNmQ3YWJlZWFiMTg1MjcyYTUxOGVhZWYzMGZhYTVhY2Y1YzhiMjU0ZCI6IjllZmZhMTQxZjc0NjZiNjU5ZWFhNTBjMzJjOGU2ODNjMjY0MGY1NDAyN2FiNmFhNSI6IjYzYjNhY2MyMzc1ODhjZGY0MWMwZDRiZWYxNmM0ODkwY2YzZDQ1OGZjZjFkZThlYSI6IjU3M2Q2YTc5NjBhZWNjYzMyODBhOGFlZTRkNzJlNTg3ZTlkMTk2YjdiMjcwZTMyOSI6IjhhNTY4MDg2ZmRkOWYwMTIwNmE1YWFlZTM0ZDI1M2JiYzkzMzkxMTJkMzE3MDY5OWI5YTEzOTJlOTcwNjJkNWQwZjE2MjQwMTE0ZGMxNzg5MjY5MjE3YzViNGIyOTc0ODk1YjIwOTAzODkwZjdkYWNmZWY0NmZhNGE0ZDAyODkxYzcwNDI1YWIzYjQyZjUzZDcyZjg1MmZhZjM3MTNhYzdiODIwN2RjNDUzMjc5ZjRkZjM0NTA5MWI4YmZlYjU0OTgzMDk1YzJkMTkwMzU4MjkzYmE1MDdiZGZkYzM5YjI0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjI0LDE5Mis5NiwxOTIsMTkyKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTIyNDoiNTZmM2Y1YjA4ZGExMGVhZDBjOTg2ZGQyYWU1NTUzZTRiMmVlZWI0N2FkNWQyMjE5N2IxMmI4OWI0YTg3MWM1MWMwZDg1NTU0IjoiOTZjODYzMGExZjQxODdmYjA3OTQ2MDFjZjUxZTdlMzMzZTcxNzU2YTA0MjFmZjQzIjoiODc1ZTViYzk1NDg5MTdhODJiNmRjOTUyMDBkOTJiZjQyMThkYmE3YWIzMTZhNWZlIjoiNGQzZjU2NzhiMDBkNDdiYjlkMDkzNjQ4NmRlNjA0MDdlYWYxMjgyZmRhOTlmNTk1IjoiOTA5Njk5NjFlZjkyODNiOWU2MDBhZWFkNzk4NTQ1NWU2OTJkYjgxNzE2NTE4OTY2NWY0OThmMjE5YjFlNWYyNzdlNTg2YjIzNzg1MTMwNWQ1MjA1NTQ4YjU2NWZhZWIwMmJiN2I1ZjQ3N2M4MGJhOTRiMDU2M2UyNGQ5MzA5ZDI5NTdhNjc1ODQ4MTQwZjU2MDFmNjk4NDU5ZGI1ODk5YjIwZGRhNjhmMDAwY2NiMThkY2QzOWRmYWU0OTk1NWI4NDc4ZmQ1MGJiNTlkNzcyMDQ1YmViMzM4NjIyZWZhNWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImNhODUxOTExMzQ5Mzg0YmZmZTg5ZGUxY2JkYzQ2ZTY4MzFlNDRkMzRhNGZiOTM1ZWUyODVkZDE0YjcxYTc0ODg2NTliYTk2YzYwMWRjNjlmYzkwMjk0MDgwNWVjMGNhOCI6IiI6IiI6IiI6ImU1MjhlOWFiZjJkZWNlNTRkNDdjN2U3NWU1ZmUzMDIxNDlmODE3ZWE5ZmI0YmVlNmY0MTk5Njk3ZDA0ZDViODlkNTRmYmI5NzhhMTViNWM0NDNjOWVjMjEwMzZkMjQ2MGI2ZjczZWJhZDBkYzJhYmE2ZTYyNGFiZjA3NzQ1YmMxMDc2OTRiYjc1NDdiYjA5OTVmNzBkZTI1ZDZiMjllMmQzMDExYmIxOWQyNzY3NmMwNzE2MmM4YjVjY2RlMDY2ODk2MWRmODY4MDM0ODJjYjM3ZWQ2ZDVjMGJiOGQ1MGNmMWY1MGQ0NzZhYTA0NThiZGFiYTgwNmY0OGJlOWRjYjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6Ijc5NzM3NDc5YmE0ZTc2NDJhMjIxZmNmZDFiODIwYjEzNGU5ZTM1NDBhMzViYjQ4ZmZhZTI5YzIwZjU0MThlYTMzNTkzMjU5YzA5MmJlZjQxMjliYzJjNmM5ZTE5ZjM0MyI6IiI6IiI6IiI6ImNmNWFkNTk4NGY5ZTQzOTE3YWE5MDg3MzgwZGFjNDZlNDEwZGRjOGE3NzMxODU5Yzg0ZTlkMGYzMWJkNDM2NTViOTI0MTU5NDEzZTIyOTNiMTc2MTBmMjExZTA5Zjc3MGYxNzJiOGZiNjkzYTM1Yjg1ZDNiOWU1ZTYzYjFkYzI1MmFjMGUxMTUwMDJlOWJlZGZiNGI1YjZmZDQzZjMzYjhlMGVhZmIyZDA3MmUxYTZmZWUxZjE1OWRmOWI1MWU2YzhkYTczN2U2MGQ1MDMyZGQzMDU0NGVjNTE1NThjNmYwODBiZGJkYWIxZGU4YTkzOWU5NjFlMDZiNWYxYWNhMzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImIzNDA5MDc0NDViOTdhOGI1ODkyNjRkZTRhMTdjMGJlYTExYmI1M2FkNzJmOWYzMzI5N2YwNWQyODc5ZDg5OGQ2NWNiMjc3MzVkODNjMDcwOGY3MjY4NGVhNThmN2VlNSI6IiI6IiI6IiI6Ijc1MTgzYWFhZjM1NzRiYzY4MDAzMzUyYWQ2NTVkMGU5Y2U5ZGQxNzU1MjcyM2I0N2ZhYjBlODRlZjkwMzY5NGEzMjk4N2VlZGRiZGM0OGVmZDI0MTk1ZGJkYWM4YTQ2YmEyZDk3MmY1ODA4ZjIzYTg2OWU3MTM0MzE0MDM2MWY1OGIyNDNlNjI3MjIwODhmZTEwYTk4ZTQzMzcyZDI1MmIxNDRlMDBjODljMjE1YTc2YTEyMTczNGJkYzQ4NTQ4NmY2NWMwYjE2Yjg5NjM1MjRhM2E3MGU2ZjM4ZjE2OWMxMmY2Y2JkZDE2OWRkNDhmZTQ0MjFhMjM1ODQ3YTIzZmYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjhlMTU5ZjYwMDYwYTdkNmE3ZTZmZTdjOWY3NjljMzBiOThhY2IxMjQwYjI1ZTdlZTMzZjFkYTgzNGMwODU4ZTdjMzlkMzUwNTIyMDFiZGNjZTRlMTI3YTA0ZjA0ZDY0NCI6IiI6IiI6IiI6IjYyOTEwYTc3MjEzOTY3ZWE5M2Q2NDU3ZTI1NWFmNTFmYzc5ZDQ5NjI5YWYyZmNjZDgxODQwY2RmYmI0OTEwOTkxZjUwYTQ3N2NiZDI5ZWRkOGE0N2M0ZmVjOWQxNDFmNTBkZmRlN2M0ZDhmY2FiNDczZWZmM2NjMmVlOWU3Y2M5MDg3MWYxODA3NzdhOTc4NDE1OTdiMGRkN2U3NzllZmY5Nzg0YjljYzMzNjg5ZmQ3ZDQ4YzBkY2QzNDE1MTVhYzhmZWNmNWM1NWE2MzI3YWVhOGQ1OGY5NzIyMGI3NDYyMzczZTg0ZTNiNzQxN2E1N2U4MGNlOTQ2ZDYxMjBkYjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6Ijc0NzU1ZjE5NjMwNWY3ZmI2Njg5YjJmZTY4MzVkYzFkODE0ODRmYzQ4MWE2YjgwODdmNjQ5YTE5NTJmNGRmNmFjMzYzODdhNTQ0YTVmMmI3ODAwNzY1MWE3Yjc0Yjc0OSI6IiI6IiI6IiI6ImIyODk2ZjNhZjQzNzVkYWI2N2U4MDYyZDgyYzFhMDA1ZWY0ZWQxMTlkMTNhOWYxODM3MWIxYjg3Mzc3NDQxODY4NDgwNWZkNjU5YmZkNjk5NjRmODNhNWNmZTA4NjY3ZGRhZDY3MmNhZmQxNmJlZmZmYTlmYWVkNDk4NjUyMTRmNzAzOTUxYjQ0M2U2ZGNhMjJlZGI2MzZmMzMwODM4MDE0NGI5MzMzZGU0YmNiMDczNTcxMGU0ZDkyNjY3ODYzNDJmYzUzYmFiZTdiZGJlM2MwMWEzYWRkYjdmMjNjNjNjZTI4MzQ3MjlmYWJiZDQxOWI0N2JlY2ViNGE0NjAyMzYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjRiMjIyNzE4ZjU2YTMyNjBiM2MyNjI1YTRjZjgwOTUwYjdkNmMxMjUwZjE3MGJkNWMyOGIxMThhYmRmMjNiMmY3YWVkNTJkMDAxNmZjYWVmMGI2NDkyYmM0MGJiZTBlOSI6IiI6IiI6IiI6ImE2ZGEwMjliMzY2NWNkMzlmZDUwYTU0YzU1M2Y5OWZlZDM2MjZmNDkwMmZmZTMyMmRjNTFmMDY3MGRmZTg3NDJlZDQ4NDE1Y2YwNGJiYWQ1ZWQzYjIzYjE4Yjc4OTJkMTcwYTdkY2YzZWY4MDUyZDU3MTdjYjBjMWE4YjMwMTBkOWE5ZWE1ZGU3MGFlNTM1NjI0OWMwZTA5ODk0NjAzMGM0NmQ5ZDNkMjA5ODY0NTM5NDQ0Mzc0ZDhmYmNhZTA2OGUxZDY1NDhmYTU5ZTY1NjJlNmIyZDFhY2JkYThkYTAzMThjMjM3NTJlYmM5YmUwYzFjMWM1YjNjZjY2ZGQ5NjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImI1MTI2MzNmMjdmYjE4MmEwNzY5MTdlMzk4ODhiYTNmZjM1ZDIzYzM3NDJlYjhmM2M2MzVhMDQ0MTYzNzY4ZTBlMmMzOWI4NDYyOWEzZGU1YzMwMWRiNTY0M2FmMWMyMSI6IiI6IiI6IiI6ImZiOTMxZDBkMDE5NGE5N2I0OGQ1ZDRjMjMxZmRhZDVjNjFhZWRmMWMzYTU1YWMyNDk4M2VjYmYzODQ4N2IxYzkzMzk2YzZiODZmZjM5MjBjZmE4Yzc3ZTAxNDZkZTgzNWVhNTgwOTY3NmU3MDJkZWU2YTc4MTAwZGE5YWE0M2Q4ZWMwYmY1NzIwYmVmYTcxZjgyMTkzMjA1YWMyZWE0MDNlOGQ3ZTBlNjI3MGIzNjZkYzQyMDBiZTI2YWZkOWY2M2I3ZTc5Mjg2YTM1YzY4OGM1N2NiZmY1NWFjNzQ3ZDRjMjhiYjgwYTJiMjA5N2IzYjYyZWE0Mzk5NTBkNzVkZmYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImFhZTNmZmM4NjA1YTk3NWJlZmVmY2VhMGE3YTI4NjY0MmJjM2I5NWZiMzdiZDBlYjA1ODVhNGNhYmY4YjNkMWU5NTA0YzNjMGM0MzEwYzFjMDc0NmEwMzZjOTFkOTAzNCI6IiI6IiI6IiI6IjI4MTliZDNiMGQyMTZkYWQ1OWRkZDZjMzU0YzQ1MTgxNTNhMmIwNDM3NGIwN2M0OWU2NGE4ZTRkMDU1NTc1ZGZiYzlhOGZjZGU2OGJkMjU3ZmYxYmE1YzYwMDA1NjRiNDZkNmRkN2VjZDljNWQ2ODRmZDc1N2RmNjJkODUyMTE1NzVkMzU2MmQ3ODE0MDA4YWI1YzhiYzAwZTdiNWE2NDllYWUyMzE4NjY1YjU1ZDc2MmRlMzZlYmEwMGMyOTA2YzBlMGVjODcwNmVkYjQ5M2U1MWNhNWViNGI5ZjAxNWRjOTMyZjI2MmY1MmE4NmIxMWM0MWU5YTZkNWIzYmQ0MzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImI5NDc1MjEwYjc5Yjg3MTgwZTc0NmRmNzA0YjNjYmM3YmY4NDI0NzUwZTQxNmE3ZmJiNWNlM2VmMjVhODJjYzYyNGJhZjAzNTk5YzEwZGY2ZWY0NDA2NWQ3MTVhOTNmNyI6IiI6IiI6IiI6ImFlMTJkNzg0Zjc5NjE4M2M1MGRiNWExYTI4M2FhMzVlZDlhMmI2ODVkYWNlYTk3YzU5NmZmOGMyOTQ5MDZkMWIxMzA1YmExZjgwMjU0ZWIwNjJiODc0YThkZmZmYTMzNzhjODA5YWIyODY5YWE1MWE0ZTZhNDg5NjkyMjg0YTI1MDM4OTA4YTM0NzM0MjE3NWMzODQwMTE5M2I4YWZjNDk4MDc3ZTEwNTIyYmVjNWM3MDg4MmI3Zjc2MGVhNTk0Njg3MGJkOWZjNzI5NjFlZWRiZThiZmY0ZmQ1OGM3Y2MxNTg5YmI0ZjM2OWVkMGQzYmYyNmM1YmJjNjJlMGIyYjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjI3ODM4ZWI0NGNlY2NiNGUzNjIxMDcwM2ViZjM4ZjY1OWJjMzlkZDMyNzdjZDc2YjdhOWJjZDZiYzk2NGI2MjgzOWNmZTAyMTBkYjJlN2IwZWI1MmEzODc0NzZlN2VhMSI6IiI6IiI6IiI6ImU1ZTcyYTUzNjA1ZDJhYWE2NzgzMmY5NzUzNjQ0NWFiNzc0ZGQ5YmZmN2YxM2EwZDExZmQyN2JmNjU5M2JmYjUyMzA5ZjJkNGYwOWQxNDcxOTIxOTllYTU4NDUwMzE4MWRlODcwMDJmNGVlMDg1YzdkYzE4YmYzMmNlNTMxNTY0N2EzNzA4ZTZmNDA0ZDY1ODhjOTJiMmRkYTU5OWMxMzFhYTM1MGQxOGM3NDdiMzNkYzhlZGExNWNmNDBlOTUyNjNkMTIzMWUxYjRiNjhmOGQ4MjlmODYwNTRkNDljZmRiMWI4ZDk2YWIwNDY1MTEwNTY5Yzg1ODNhNDI0YTA5OWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJkNzEyOWU0ZjQ3MDA4YWQ2MGM5YjVkMDgxZmY0Y2E4ZWI4MjFhNmU0ZGViOTE2MDhiZjRlMjY0NzgzNTM3M2E1YTcyODgyNzczZjc4YzJmYzQ4NzgyOTU4NDBhNTMwMTIiOiIiOiIiOiIiOiIwY2JmNDg1ODVjNWRlOTE4M2I3ZmY3NjU1N2Y4ZmM5ZWJjZmRmZGUwN2U1ODhhODY0MTE1NmY2MWI3OTUyNzI1YmJlZTk1NGY4N2U5YjkzNzUxM2IxNmJiYTBmMmU1MjNkMDk1MTE0NjU4ZTAwZjBmMzc3MjE3NWFjZmNiMzI0MGEwMWRlNjMxYzE5YzVhODM0Yzk0Y2M1OGQwNGE2ODM3ZjBkMjc4MmZhNTNkMmY5ZjY1MTc4ZWU5YzgzNzIyMjQ5NGM3OTllNjRjNjA0MDYwNjliZDMxOTU0OWI4ODlmYTAwYTAwMzJkZDdiYTViMWNjOWVkYmY1OGRlODJiZmNkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNjdmZTVlMzAwYzUxMzM3MTk3NmM4MGRlNGIyMGQ0NDczODg5YzlmMTIxNGJjZTcxOGJjMzJkMWRhM2FiNzUzMmUyNTZkODg0OTc3MzhhMzM5MjNhYTAwM2E4ZDc4NDVjIjoiIjoiIjoiIjoiYjQ0NjYwZDY0ZWY3YmNlYmM3YTFhYjcxZjg0MDdhMDIyODVjNzU5MmQ3NTVhZTY3NjYwNTllODk0ZjY5NDM3M2VkOWM3NzZjMGNmYzg1OTQ0MTNlZWZiNDAwZWQ0MjdlMTU4ZDY4N2UyOGRhM2VjYzIwNWUwZjczNzBmYjA4OTY3NmJiYjBmYTU5MWVjOGQ5MTZjM2Q1ZjE4YTNlYjRhNDE3MTIwNzA1ZjNlMjE5ODE1NGNkNjA2NDhkYmZjZmM5MDEyNDJlMTU3MTFjYWNkNTAxYjJjMjgyNmFiZTg3MGJhMzJkYTc4NWVkNmYxZmRjNjhmMjAzZDFhYjQzYTY0ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImRlODE0MjU0MTI1NWM0NmQ2NmVmYzYxNzNiMGZlM2ZmYWY1OTM2Yzg5N2EzY2UyZTlkNTgzNTYxNmFhZmEyY2JkMDFmOTAwMmM0MDcxMjdiYzMyOTdhNTYxZDg5YjgxZCI6IiI6IiI6IiI6IjY0ZDEwMjA5MjlkNzQ3MTY0NDZkOGE0ZTE3MjA1ZDA3NTZiNTI2NDg2NzgxMWFhMjRkMGQwZGE4NjQ0ZGIyNWQ1Y2RlNDc0MTQzYzU3ZDEyNDgyZjZiZjBmMzFkMTBhZjlkMWRhNGViNmQ3MDFiZGQ2MDVhOGRiNzRmYjRlNzdmNzlhYWE5ZTQ1MGFmZGE1MGIxOGQxOWZhZTY4ZjAzZGIxZDdiNWYxNzM4ZDJmZGNlOWFkM2VlOTQ2MWI1OGVlMjQyZGFmN2ExZDcyYzQ1YzkyMTNlY2EzNGUxNDgxMGE5ZmNhNTIwOGQ1YzU2ZDgwNjZiYWIxNTg2ZjE1MTNkZTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI0YThlMGJkOTBiZGIxMmY3NzQ4YWQ1ZjE0N2IxMTVkNzM4NWJiMWIwNmFlZTdkOGI3NjEzNmEyNWQ3NzliY2I3N2YzY2NlNGFmOGM4Y2UzYzQ1YmRmMjNjNmIxODFhMDAiOiIiOiIiOiIiOiIzMjBjN2NhNGJiZWI3YWY5NzdiYzA1NGY2MDRiNTA4NmEzZjIzN2FhNTUwMTY1ODExMmYzZTdhMzNkMjIzMWY1NTM2ZDJjODVjMWRhZDlkOWIwYmY3ZjYxOWM4MWJlNDg1NDY2MTYyNjgzOWM4YzEwYWU3ZmRjMGMwYjU3MWJlMzRiNThkNjZkYTU1MzY3NjE2N2IwMGU3ZDhlNDlmNDE2YWFjYjI5MjZjNmViMmM2NmVjOThiZmZhZTIwODY0Y2Y5MjQ5NmRiMTVlM2IwOWU1MzBiN2I5NjQ4YmU4ZDM5MTZiM2MyMGEzYTc3OWJlYzdkNjZkYTYzMzk2ODQ5YWFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiNDUxZWQwMjRiYzRiOTVmMTAyNWIxNGVjMzYxNmY1ZTQyZTgwODI0NTQxZGM3OTVhMmYwNzUwMGY5MmFkYzY2NTJmMjhlNmVlOGRlNTg3OWRiMWVjY2Q1OGM5OTRlNWYwIjoiIjoiIjoiIjoiM2ZiNjM3MDg1YWI3NWY0ZTk1NjU1ZmFhZTk1ODg1MTY2YTVmYmI0MjNiYjAzZGJmMDU0M2JlMDYzYmNkNDg3OTljNGYwNWQ0ZTUyMjYzNGQ5Mjc1ZmUwMmUxZWRkOTIwZTI2ZDlhY2NkNDM3MDljYjBkOGY2ZTUwYWE1NGE1ZjNiZGQ2MThiZTIzY2Y3M2VmNzM2ZWQwZWY3NTI0YjBkMTRkNWJlZjhjOGFlYzFjZjFlZDNlMWMzOGE4MDhiMzVlNjFhNDQwNzgxMjdjN2NiM2E4ZmQ3YWRkZmE1MGZjZjNmZjNiYzZkNmJjMzU1ZDU0MzZmZTliNzFlYjQ0ZjdmZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJkM2NjNGQxYWNmM2RkZTBjNGJkMjI5MGQyNjIzMzcwNDJkYzYzMjk0ODIyM2QzYTJlYWFiODdkYTQ0Mjk1ZmJkMDEwOWIwZTcyOWY0NTczMjhhYTE4NTY5YTkyMjQ5MjEiOiIiOiIzYzMxMTg0ODE4M2M5YTIxMmEyNmYyN2Y4YzY2NDdlNDAzNzVlNDY2YTA4NTdjYzM5YzRlNDc1NzVkNTNmMWY2IjoiZmNiOWFiZDE5Y2NmYmNjZWY4OGM5YzM5YmZiM2RkN2IxYzEyMjY2Yzk4MDg5OTJlMzA1YmMzY2ZmNTY2ZTRlNCI6IjljN2I3NThiMjEyY2QwZmNlY2Q1ZGFhNDg5ODIxNzEyZTNjZGVhNDQ2N2I1NjBlZjVkZGMyNGFiNDc3NDlhMWYxZmZkYmJiMTE4ZjRlNjJmY2ZjYTMzNzFiOGZiZmM1YjA2NDZiODNlMDZiZmJiYWI1ZmFjMzBlYTA5ZWEyYmM3NmYxZWE1NjhjOWJlMDQ0NGIyY2M5MDUxN2IyMGNhODI1ZjJkMGVjY2Q4OGU3MTc1NTM4Yjg1ZDkwYWIzOTAxODNjYTYzOTU1MzVkMzQ0NzNhZjZiNWE1Yjg4ZjVhNTllZTc1NjE1NzMzMzdlYTgxOWRhMGRjYzM1NzNhMjI5NzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiZjk3YTNjZmQ5MWZhYTA0NmI5ZTYxYjk0OTNkNDM2YzQ5MzFmNjA0YjIyZjEwODE1MjFiMzQxOTE1MWU4ZmYwNjExZjNhN2Q0MzU5NTM1N2Q1ODEyMGJkMWUyZGQ4YWVkIjoiIjoiNTE3Mjg5YWZlNDQ0YTBmZTVlZDFhNDFkYmJiNWViMTcxNTAwNzliZGQzMWUyOWNmMmZmMzAwMzRkODI2OGUzYiI6Ijg4MDI4ZDI5ZWY4MGI0ZTZmMGZlMTJmOTFkNzQ0OWZlNzUwNjI2ODJlODljNTcxNDQwYzBjOWI1MmM0MmE2ZTAiOiJjNjg3MWNmZjA4MjRmZTU1ZWE3Njg5YTUyMjI5ODg2NzMwNDUwZTVkMzYyZGE1YmY1OTBkY2Y5YWNkNjdmZWQ0Y2IzMjEwN2RmNWQwMzk2OWE2NmIxZjY0OTRmZGY1ZDYzZDViNGQwZDM0ZWE3Mzk5YTA3ZDAxMTYxMjZkMGQ1MThjN2M1NWJhNDZlMTJmNjJlZmM4ZmUyOGE1MWM5ZDQyOGU2ZDM3MWQ3Mzk3YWIzMTlmYzczZGVkNDcyMmU1YjRmMzAwMDQwMzJhNjEyOGRmNWU3NDk3ZWNmODJjYTdiMGE1MGU4NjdlZjY3MjhhNGY1MDlhOGM4NTkwODcwMzljIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjBmMmYyM2Q2NGY0ODFjYWJlYzdhYmIwMWRiM2FhYmYxMjVjMzE3M2EwNDRiOWJmMjY4NDQzMDBiNjlkY2FjOGI5YTVhZTEzMjMyYjQzYWExOWNmZThkNzk1OGI0YjU5MCI6IiI6ImVjNGM3YTYyYWNhYjczMzg1ZjU2N2RhMTBlODkyZmYzOTVhMDkyOWY5NTkyMzFhNTYyODE4OGNlMGMyNmU4MTgiOiI2Yjk3YjhjNmI2YmI4OTM1ZTY3NmM0MTBjMTdjYWE4MDQyYWEzMTQ1Zjg1NmQwYTMyYjY0MWU0YWU1Mjk4NjQ4IjoiNzQ4MGEzNjEwNThiZDlhZmEzZGI4MmM5ZDc1ODZlNDIyNjkxMDIwMTNmNmVjNWMyNjliNmQwNWYxNzk4Nzg0Nzc0ODY4NDc2NmI0NDkxOGZkNGI2NWUxNjQ4NjIyZmMwZTA5NTQxNzhiMDI3OWRmYzlmYTk5YjY2YzZmNTNlNTFjNDg2MDEzMWU5ZTA2NDQyODdhNGFmZTRjYThlNDgwNDE3ZTA3MGRiNjgwMDhhOTdjMzM5N2U0YjMyMGI1ZDFhMWQ3ZTFkMThhOTVjZmVkZDdkMWU3NDk5NzA1MmJmNjQ5ZDEzMmRlYjllYzUzYWFlN2RhZmRhYjU1ZTZkYWU5MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI1M2M1NjY2MGM3ODQ4MWJlOWM2MzI4NGUwMDVmY2MxNGZiYzdmYjI3NzMyYzliZjEzNjZkMDFhNDI2NzY1YTMxZGM3YTE0ZDBlYjViMGIzNTM0ZTcxN2EwYjNjNjQ2MTQiOiIiOiIzYWE4NDg3MDZlY2I4NzdmNWJlZGY0ZmZjMzMyZDU3YzIyZTA4NzQ3YTQ3ZTc1Y2ZmNmYwZmQxMzE2ODYxYzk1IjoiOWE0MDFhZmE3MzliOGY3NTJmZGRhY2QyOTFlMGI4NTRmNWVmZjRhNTViNTE1ZTIwY2IzMTk4NTIxODlkMzcyMiI6IjVjMGViNDIwZTBiZjQxY2U5MzIzZTgxNTMxMGU0ZTgzMDNjZDY3N2E4YThiMDIzZjMxZjBkNzlmMGNhMTVhZWI2MzYwOTlhMzY5ZmQwNzRkNjk4ODk4NjVlYWMxYjcyYWIzY2JmZWJkYjhjZjQ2MGIwMDA3MjgwMmUyZWM2NDhiMTM0OWE1MzAzYmU0Y2NhYWRkNzI5ZjFhOWVhMTc0ODJmZDAyNmFhZWI5M2YxNjAyYmMxNDA0Yjk4NTNhZGRlNDBkNmMzNGI4NDRjZjE0OGJjMDg4OTQxZWNmYzE2NDJjOGMwYjk3NzhlNDVmM2IwN2UwNmUyMWVlMmM5ZTAzMDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiZjYzYzgwNDQwNDkwMmRiMzM0YzU0YmIyOThmYzI3MWEyMWQ3YWNkOWY3NzAyNzhlMDg5Nzc1NzEwYmY0ZmRkNzNlNDUwMDllYTljYjJhMzZiYTFhYTRiZjM5MTc4MjAwIjoiIjoiZDE2NWExM2RjOGNjNDNmM2YwOTUyYzNmNWQzZGU0MTM2OTU0ZDk4MzY4M2Q0YTNlNmQyZGM0Yzg5YmYyMzQyMyI6Ijc1MTA2YmM4NmQwMzM2ZGY4NTA5N2Y2YWY4ZTgwZTJkYTU5MDQ2YTAzZmE2NWIwNjcwNmI4YmJjN2ZmYzY3ODUiOiI2MzYzMTM5YmJhMzJjMjJhMGY1Y2QyM2NhNmQ0MzdiNTY2OWI3ZDQzMmY3ODZiOGFmNDQ1NDcxYmVlMGIyZDI0YzlkNWYyZjkzNzE3Y2JlMDBkMWYwMTBjYzNiOWM1MTVmYzlmNzMzNmQ1M2Q0ZDI2YmE1YzBkNzZhOTAxODY2NjNjODU4MmViNzM5YzdiNjU3OGEzMzI4YmY2OGRjMmNlYzJjZDg5YjNhOTAyMDFmNjk5M2FkY2M4NTRkZjBmNWM2OTc0ZDBmNTU3MDc2NWExNWZlMDNkYmNlMjg5NDJkZDJmZDE2YmEyMDI3ZTY4YWJhYzgzOTI2OTY5MzQ5YWY4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjJhYWNhOTE0N2RhNjZjMTc2NjE1NzI2YjY5ZTNlODUxY2MzNTM3ZjVmMjc5ZmU3MzQ0MjMzZDhlNDRjZmM5OWQ0ZTE3MWYwODBhZjlhNjA4MWJlZTlmMTgzYWM5ZTM0MCI6IiI6ImQ3NWEyYTZlYjY2YzM4MzNlNTBmNWVjM2QyZTQzNGNmNzkxNDQ4ZDYxODAyNmQwYzM2MDgwNmQxMjBkZWQ2NjkiOiJiNjQzYjc0YzE1YjM3NjEyZTY1NzdlZDdjYTJhNGM2N2E3OGQ1NjBhZjllYjUwYTQxMDhmY2E3NDJlODdiOGQ2IjoiNTAxZGNkYzk3N2Y0YmE4NTZmMjRlYWE0OTY4YjM3NGJlYmIzMTY2YjI4MDMzNGNiNTEwMjMyYzMxZWJmZmRlMTBmYTQ3Yjc4NDBlZjNmZTNiNzc3MjVjMjI3MmQzYTFkNDIxOWJhZjIzZTAyOTBjNjIyMjcxZWRjY2VkNTg4MzhjZjQyOGYwNTE3NDI1ZDJlMTllMGQ4Yzg5Mzc3ZWVjZmMzNzgyNDVmMjgzMjM2ZmFmYTQ2NmM5MTRiOTk2NzJjZWFmYWIzNjllODg4OWEwYzg2NmQ4YmQ2MzlkYjlmYjc5NzI1NDI2MmM2ZmQ0NGNmYTkwNDVhZDYzNDBhNjBlZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhMmU0Y2Q0OGE1Y2Y5MThkNmY1NTk0MmQ5NWZjYjRlODQ2NWNkYzRmNzdiN2M1MmI2ZmFlNWIxNmEyNWNhMzA2YmVmMDM2NzE2NDQwZGI2ZTZkMzMzZDlkNzYwYjdjYTgiOiIiOiJiZmE1OTFjNzI4N2YzZjkzMTE2OGY5NWUzODg2OTQ0MWQxZjlhMTEwMzVhZDhlYTYyNWJiNjFiOWVhMTc1OTFjIjoiYzAwYzczNTQ2M2JjYTIxNWFkYzM3MmNiODkyYjA1ZTkzOWJmNjY5NTgzMzQxYzA2ZDRlMzFkMGU1YjM2M2EzNyI6ImU3ZDEzNmFmNjk5MjZhNTQyMWQ0MjY2ZWUwNDIwZmQ3MjlmMmE0ZjdjMjk1ZDNjOTY2YmRmYTA1MjY4MTgwYjUwOGI4YTI4NTJkMWIzYTA2ZmQyYWIzZTEzYzU0MDA1MTIzZWYzMTlmNDJkMGM2ZDNhNTc1ZTZlN2UxNDk2Y2IyOGFhY2FkYmNmODM3NDBmYmE4ZjM1ZmNlZTA0YmIyZWQ4YTUxZGIzZDMzNjJiMDEwOTRhNjJmYjU3ZTMzYzk5YTQzMmYyOWZjZTY2NzZjZmZiYmNjMDUxMDdlNzk0ZTc1ZTQ0YTAyZDVlNmQ5ZDc0OGM1ZmJmZjAwYTAxNzhkNjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiOTVhNjc3NzFjYmE2OTAxMWE3OTc3NmU3MTMxNDVkMzA5ZWRhZTU2ZmFkNWZkNmQ0MWQ4M2VhZmY4OWRmNmU1ZWJlNWI1MTY0ZTMxZWNjNTFiYTZmN2MzYzUxOTllYjMzIjoiIjoiMDY1ZjY5M2IyMjlhN2M0ZmQzNzNjZDE1YjM4MDc1NTJkZDliZjk4YzU0ODVjZWYzNjE5NDlkNGU3ZDc3NGI1MyI6IjlhZmI2MjQwNmYwZTgxMmM0ZjE1NmQ1OGIxOWE2NTZjOTA0ODEzYzFiNGE0NWEwMDI5YWU3ZjUwNzMxZjgwMTQiOiJmNjFiNjFhNmU3OWE0MTE4M2U4ZWQ2NjQ3ODk5ZDJkYzg1Y2RhZjVjM2FiZjVjN2YzYmYzNzY4NTk0NmRjMjhmNDkyM2RjODQyZjJkNDMyNmJkNmNlMGQ1MGE4NGNiM2JhODY5ZDcyYTM2ZTI0NjkxMGViYTY1MTJiYTM2Y2Q3ZWQzYTU0MzdjOTI0NWIwMGEzNDQzMDhjNzkyYjY2OGI0NThkM2MzZTE2ZGVlMmZiZWM0MTg2N2RhMzEwODRkNDZkOGVjMTY4ZGUyMTQ4ZWY2NGZjNWI3MjA2OWFiZjVhNmFkYTFlYWQyYjcxNDZiYjc5M2ZmMWM5YzM2OTBmYTU2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImE0NTllMTgxNWNiY2E0NTE0ZWM4MDk0ZDVhYjI0MTRhNTU3YmE2ZmUxMGU2MTNjMzQ1MzM4ZDA1MjFlNGJmOTA2MjIyMTM5MmUyNTUyZTc2Y2QwZDM2ZGY2ZTYwNjhlYiI6IiI6IjBhMzY0MmIwMmIyM2IzZWY2MmM3MDFhNjM0MDExMjQwMjJmNWI4OTZkZTg2ZGFiNmU2Yzc0NTE0OTdhYTFkY2MiOiJjODA1MTQ4NjU5MDEzNzFjNDViYTkyZDlmOTVkNTBiYjdjOWRkMTc2OGNiM2RmYmM0NWI5NjhkYTk0OTY1YzZlIjoiNDY0ZTY5NzdiOGFkYWVmMzA3Yzk2MjNlNDFjMzU3MDEzMjQ5YzlmZmQ3N2Y0MDVmMzkyNWNlYmI2OWYxNTFjZThmYmI2YTI3NzE2NDAwMmFlZTc4NThmYzIyNGY2NDk5MDQyYWExZTYzMjJkZWVlOWE1ZDEzM2MzMWQ2NDBlMTJhNzQ4N2M3MzFiYTAzYWQ4NjZhMjQ2NzViYWRiMWQ3OTIyMGM0MGJlNjg5Zjc5YzJhMGJlOTNjYjRkYWRhM2UwZWFjNGFiMTQwY2I5MTk5OGI2ZjExOTUzZTY4ZjIzMTliMDUwYzQwZjcxYzM0ZGU5OTA1YWU0MWIyZGUxYzJmNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiIyNTJjMmNhZDYxM2UwMDI0NzgxNjI4NjE4ODA5NzllZTRlMzIzMDI1ZWViYjZmYjJlMGFhOWYyMDBlMjhlMGExZDAwMWJjOWE4ZjJjOGMyNDJlNDM2OWRmMGMxOTE5ODkiOiIiOiI5YmNmYzYxY2IyYmMwMDAwMzRiYjNkYjk4MGViNDdjNzZmYjVlY2RkNDA1NTNlZmYxMTMzNjhkNjM5Yjk0N2ZkIjoiOGIwNTY1Yzc2N2MyNjEwZWUwMDE0NTgyZTlmYmVjYjk2ZTE3MzAwNWI2MGU5NTgxNTAzYTZkY2E1NjM3YTI2ZSI6ImU5NmMxNWZlOGE2MDY5MmIwYTdkNjcxNzFlMDE5NWZmNmUxYzg3YWFiODQ0MjIxZTcxNzAwZDFiYmVlNzVmZWVhNjk1ZjZhNzQwYzk3NjBiYmUwZTgxMmVjZjQwNjFkOGYwOTU1YmMwMTk1ZTE4YzRmZDE1MTZlYmNhNTBiYTZhNmRiODY4ODE3MzdkYmFiODMyMTcwNzY3NTQ3OWI4NzYxMWRiNmFmMmM5N2VhMzYxYTU0ODQ1NTVlYWQ0NTRkZWZiMWE2NDMzNWRlOTY0ZmM4MDNkNDBmM2E2ZjA1Nzg5M2QyYWZjMjU3MjU3NTRmNGYwMGFiYzUxOTIwNzQzZGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjhiZTBjYTZhZGM4YjM4NzBjOWQ2OWQ2MDIxYmMxZjFkOGViOWU2NDkwNzNkMzVlZTZjNWFhMGI3ZTU2YWQ4YTU5ZDEyNjVmN2Q1MWZkYjY1Mzc3ZjFlNmVkZDZhZTBlNCI6IiI6ImRhODYxNjdhYzk5N2M0MDZiYjc5NzlmNDIzOTg2YTg0ZWM2NjE0ZDZjYWE3YWZjMTBhZmYwNjk5YTliMmNmN2YiOiJlNGJhYTNjNTU1OTUwYjUzZTJiZmRiYTQ4MGNiNGM5NGI1OTM4MWJhYzFlMzM5NDdlMGMyMmU4MzhhOTUzNGNmIjoiNjQzODRlY2M0ZWE2YjQ1OGVmYzIyN2NhNjk3ZWFjNTUxMDA5MjI2NTUyMGMwYTBkOGEwY2NmOWVkM2NhOWQ1ODA3NDY3MTE4OGM2YTdhZDE2ZDBiMDUwY2RjMDcyYzEyNWQ3Mjk4ZDNhMzFkOWYwNDRhOWVlNDBkYTAwODlhODRmZWEyOGNjN2YwNWYxNzE2ZGI5NTJmYWQyOWEwZTc3OTYzNWNiN2E5MTJhOTU5YmU2N2JlMmYwYTQxNzBhYWNlMjk4MTgwMmUyZmY2NDY3ZTViNDZmMGZmYmZmM2I0MmJhNTkzNWZkNTUzYzgyNDgyYWMyNjZhY2YxY2QyNDdkNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiZDQzYTc1YjZhZGYyNmQ2MDMyMjI4NGNiMTJhYzM4MzI3NzkyNDQyYWE4ZjA0MGY2MGEyZjMzMWIzM2FjNGE4ZjA2ODJmOGIwOTFmODExYWZhY2FhY2FlYzliMDRkMjc5IjoiIjoiN2ZkM2I4ZjUxMjk0MGRhN2RlNWQ4MDE5OWQ5YTdiNDI2NzBjMDRhOTQ1Nzc1YTNkYmE4Njk1NDZjYmI5YmM2NSI6IjI1NzVkYjIwYmM3YWFmYzJhOTBhNWRhYmFiNzYwZGI4NTFkNzU0Nzc3YmM5ZjA1NjE2YWYxODU4YjI0ZmYzZGEiOiIwZGE3YThkYzczYzE2MzAxNGJmMDg0MTkxM2QzMDY3ODA2NDU2YmJjYTZkNWRlOTJiODU1MzRjNjU0NTQ2NzMxMzY0OGQ3MWVmMTdjOTIzZDA5MGRjOTJjZmY4ZDRkMWE5YTJiYjYzZTAwMWRjMmU4YWIxYTU5Nzk5OWJlM2Q2Y2Y3MGZmNjNmZWU5OTg1ODAxMzk1ZmJkNGY0OTkwNDMwYzQyNTlmY2FlNGZhMWZjZDczZGMzMTg3Y2NjMTAyZDA0YWY3YzA3NTMyODg1ZTVhMjI2ZmM0MjgwOWM0OGYyMmVlY2Y0ZjZhYjk5NmFlNGZjYjE0NDc4Njk1N2Q5ZjQxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMCwyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI2NDM1MmYyMzZhZjVkMzIwNjdhNTI5YThmZDA1YmEwMGEzMzhjOWRlMzA2MzcxYTBiMDBjMzZlNjEwYTQ4ZDE4ZGY5OWVkMmM3NjA4Yzg3MDYyNGI5NjJhNWRjNjhhY2QiOiIiOiJkYTQxNjMzNWU3YWFmNjBjZjNkMDZmYjQzODczNWNlNzk2YWFkMDkwMzRmODk2OWM4ZjhjM2Y4MWUzMmZlZjI0IjoiYTI4YzA3YzIxYTIyOTczMTFhZGYxNzJjMTllODNjYTBhODc3MzFiZGZmYjgwNTQ4OTc4ZDJkMWNkODJjZjhhMyI6IjEzMmI5ZjI1ODY4NzI5ZTM4NTNkM2M1MWY5OWEzYjVmYWU2ZDQyMDRiZWE3MDg5MGRhZjYyZTA0MmI3NzZhNTI2YzhmYjgzMWI4MGE2ZDVkM2YxNTMyMzdkZjFmZDM5YjZmZDkxMzc5NjNmNTUxNmQ5Y2RkNGUzZjkxOTVjNDZlOTk3MmMxNWQzZWRjNjYwNmUzMzY4YmRlMTU5NDk3N2ZiODhkMGNhNmU2ZjVmM2QwNTdjY2FkYzdkN2RhYjc3ZGZjNDI2NThhMWU5NzJhYTQ0NmIyMGQ0MTgyODYzODZhNTJkZmMxYzcxNGQyYWM1NDg3MTMyNjhiMGI3MDk3MjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwwLDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjI4MmY0ZDJlMDVhMmNkMzBlOTA4N2Y1NjMzMDg5Mzg5NDQ5ZjA0YmFjMTFkZjcxOGM5MGJiMzUxY2QzNjUzYTU5MGE3ZGFmM2MwZGU5ZWEyODYwODFlZmM0YTY4NGRmYiI6IiI6IjI2MzBiNGNjYzcyNzFjYzM3OWNiNTgwYjBhYWVkZTNkM2FhOGMxYzdiYTAwMmNmNzkxZjA3NTJjM2Q3MzkwMDciOiJjMzFkNjlkZTQ5OWYxMDE3YmU0NGUzZDRmYTc3ZWNlYmM2YTliOTkzNDc0OWZjZjEzNmYyNjdiMjkxMTVkMmNjIjoiYzg5OTA5NDUyMGUwMTk3YzM3YjkxZGQ1MDc3OGUyMGE1Yjk1MGRlY2ZiMzA4ZDM5ZjFkYjcwOTQ0N2FlNDhmNjEwMWQ5YWJlNjNhNzgzZmJiODMwZWVjMWQzNTlhNWY2MWEyMDEzNzI4OTY2ZDM0OTIxM2VlOTYzODI2MTRhYTQxMzUwNThhOTY3NjI3MTgzODEwYzY2MjJhMjE1OGNhYmFiZTNiOGFiOTkxNjljODllMzYyMTA4YmY1OTU1YjRmZmM0NzQ0MGY4N2U0YmFkMGQzNmJjNzM4ZTczN2UwNzJlNjRkODg0MmU3NjE5ZjFiZTBhZjExNDFmMDVhZmUyZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDAsMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiMTNjNzUyYjllNzQ1Y2U3N2JiYzdjMGRiZGE5ODIzMTNkM2ZlNjZmOTAzZTgzZWJkOGRiZTRmZjBjMTEzODBlOWYxYTUzMzA5NWQ2MTc0MTY0YmQ3YzgyNTMyNDY0YWU3IjoiIjoiNGY1M2RiODliOWJhN2ZjMDA3NjdiYzc1MWZiOGYzYzEwM2ZlMGY3NmFjZDZkNWM3ODkxYWIxNWIyYjdjZjY3YyI6IjU4MmMyYTdkMzQ2NzkwODhjY2E2YmQyODcyM2M5OWFhYzA3ZGI0NmMzMzJkYzAxNTNkMTY3MzI1NjkwM2I0NDYiOiI2MzExZjRjMGM0Y2QxZjg2YmQ0ODM0OWFiYjllYjkzMGQ0ZjYzZGY1ZTVmNzIxN2QxZDFiOTFhNzFkOGE2OTM4YjBhZDJiM2U4OTdiZDdlM2Q4NzAzZGIxMjVmYWIzMGUwMzQ2NGZhZDQxZTVkZGY1YmY5YWVlYjUxNjFiMjQ0NDY4Y2ZiMjZhOWQ5NTY5MzFhNTQxMmM5N2Q2NDE4OGIwZGExYmQ5MDc4MTljNjg2ZjM5YWY4MmU5MWNmZWVmMGNiZmZiNWQxZTIyOWUzODNiZWQyNmQwNjQxMjk4ODY0MDcwNjgxNWE2ZTgyMDc5Njg3NmY0MTY2NTNlNDY0OTYxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjVjYWNjNjgxNjVhMmUyZWUyMDgxMmYzNWVjNzNhNzlkYmYzMGZkNDc1NDc2YWMwYzQ0ZmM2MTc0Y2RhYzJiNTU2Zjg4NTQ5NmMxZTYzYWY2MjBiZWNkOWU3MWVjYjgyNCI6ImU3MmRkODU5MGQ0ZWQ1Mjk1NTE1YzM1ZWQ2MTk5ZTlkMjExYjhmMDY5YjMwNThjYWE2NjcwYjk2ZWYxMjA4ZDAiOiIiOiIiOiJmMTAxMmNmNTQzZjk0NTMzZGYyN2ZlZGZiZjU4ZTViNzlhM2RjNTE3YTljNDAyYmRiZmM5YTBjMGY3MjFmOWQ1M2ZhZjRhYWZkYzRiOGY3YTFiNTgwZmNhYTUyMzM4ZDRiZDk1ZjU4OTY2YTI0M2NkY2QzZjQ0NmVkNGJjNTQ2ZDlmNjA3YjE5MGRkNjk5NTQ0NTBkMTZjZDBlMmQ2NDM3MDY3ZDhiNDRkMTlhNmFmN2E3Y2ZhODc5NGU1ZmJkNzI4ZThmYjJmMmU4ZGI1ZGQ0ZmYxYWEyNzVmMzU4ODYwOThlODBmZjg0NDg4NjA2MGRhOGIxZTcxMzc4NDZiMjNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjhkZjAxM2I0ZDEwMzUyMzA3MzkxN2RkZjZhODY5NzkzMDU5ZTk5NDNmYzg2NTQ1NDllN2FiMjJmN2MyOWYxMjJkYTI2MjVhZjJkZGQ0YWJjY2UzY2Y0ZmE0NjU5ZDg0ZSI6ImI1NzFlNjZkN2MzMzhiYzA3Yjc2YWQzNzU3YmIyZjk0NTJiZjdlMDc0MzdhZTg1ODFjZTdiYzdjM2FjNjUxYTkiOiIiOiIiOiJiOTFjYmE0Y2M4NGZhMjVkZjg2MTBiODFiNjQxNDAyNzY4YTIwOTcyMzQ5MzJlMzdkNTkwYjExNTRjYmQyM2Y5NzQ1MmUzMTBlMjkxYzQ1MTQ2MTQ3ZjBkYTJkODE3NjFmZTkwZmJhNjRmOTQ0MTljMGY2NjJiMjhjMWVkOTRkYTQ4N2JiN2U3M2VlYzc5OGZiY2Y5ODFiNzkxZDFiZTRmMTc3YTg5MDdhYTNjNDAxNjQzYTViNjJiODdiODlkNjZiM2E2MGU0MGQ0YThlNGU5ZDgyYWY2ZDI3MDBlNmY1MzVjZGI1MWY3NWMzMjE3MjkxMDM3NDEwMzBjY2MzYTU2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjU2NWIyYjc3OTM3YmE0NjUzNmIwZjY5M2IzZDVlNGE4YTI0NTYzZjllZjFmNjc2ZThiNWIyZWYxNzgyMzgzMmY0ZWYzMDY0ZWMyOWY1YjdmOTY4NmQ3NWEyM2QxNzBlMyI6IjNiNzIyNDMzMjI2YzlkYmE3NDUwODcyNzBhYjNhZjJjOTA5NDI1YmE2ZDM5ZjVjZTQ2ZjA3MjU2MDY4MzE5ZDkiOiIiOiIiOiJkMTQ0ZWU3ZjgzNjNkMTI4ODcyZjgyYzE1NjYzZmU2NTg0MTNjZDQyNjUxMDk4ZTBhN2M1MWE5NzBkZTc1Mjg3ZWM5NDNmOTA2MWU5MDIyODBhNWE5ZTE4M2E3ODE3YTQ0MjIyZDE5OGZiZmFiMTg0ODgxNDMxYjRhZGYzNWQzZDEwMTlkYTVhOTBiMzY5NmIyMzQ5YzhmYmExNWE1NmQwZjlkMDEwYTg4ZTNmOWVlZWRiNjdhNjliY2FhNzEyODFiNDFhZmExMWFmNTc2Yjc2NWU2Njg1OGYwZWIyZTRlYzQwODE2MDllYzgxZGE4MWRmMGEwZWIwNjc4NzM0MGVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImZjMzgzMmE5MWIxZGNkY2FhOTQ0ZjJkOTNjYmNlYjg1YzI2N2M0OTFiN2I1OWQwMTdjZGU0YWRkNzlhODM2YjZkNWU3NmNlOWVhYmFmZWQwNmUzM2E5MTNlMzk1YzVlMCI6ImZmYzVmNmVlZmQ1MWRhNjRhMGY2N2I1ZjBjZjYwZDdhYjQzZmM3ODM2YmNhNjUwMDIyYTBjZWU1N2E0M2MxNDgiOiIiOiIiOiIwZTcxM2M2Y2M5YTRkYmQ0MjQ5MjAxZDEyYjdiZjVjNjljM2UxOGViNTA0YmYzMjUyZGIyZjQzNjc1ZTE3ZDk5YjZhOTA4NDAwY2VhMzA0MDExYzJlNTQxNjZkYWUxZjIwMjYwMDA4ZWZlNGUwNmE4N2UwY2U1MjVjYTQ4MmJjYTIyM2E5MDJhMTRhZGNmMjM3NGE3MzlhNWRmZWFmMTRjYWRkNzJlZmE0ZDU1ZDE1MTU0Yzk3NGQ5NTIxNTM1YmNiNzA2NThjNWI2Yzk0NDAyMGFmYjA0YTg3YjIyM2I0YjhlNWQ4OTgyMTcwNGE5OTg1YmIwMTA0MDViYThmM2Q0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjgwMDllYjJjYjQ5ZmRmMTY0MDNiY2RmZDRhOWY5NTIxOTEwNjJhY2I5Y2MxMTFlY2EwMTlmOTU3ZmI5ZjQ0NTEzNTU1OTg4NjY5NTIzOTRiMWVkZGQ4NWQ1OWY4MWM5ZCI6IjA5ZmYxZDRiOTdkODNiMjIzZDAwMmUwNWY3NTRiZTQ4MGQxM2JhOTY4ZTVhYWMzMDZkNzFjYzlmYzQ5Y2MyZGQiOiIiOiIiOiI5NTUwOTAzYzJmMDJjZjc3YzhmOWM5YTM3MDQxZDAwNDBlZTFlM2VmNjViYTFhMWZiYmNmNDRmYjdhMjE3MmJkNmIzYWFhYmU4NTAyODFjM2ExNzc4Mjc3YmFjZDA5NjE0ZGZlZmVjZWNhYzY0MzM4YWUyNGExYmYxNTBjYmY5ZDk1NDExNzNhODJlY2JhMDhhYTE5Yjc1YWJiNzc5ZWIxMGVmYTQyNTdkNTI1MmU4YWZjYWM0MTRiYzNiYjVkMzAwNmI2ZjM2ZmI5ZGFlYTRjOGMzNTllZjZjZGJlZmYyN2MxMDY4NTcxZGQzYzg5ZGM4N2VkYTkxOTAwODY4ODhkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImE2ZTRjOWE4YmQ2ZGEyM2I5YzJiMTBhNzc0OGZkMDhjNGY3ODJmYWRiYWM3ZWE1MDFjMTdlZmRjNmY2MDg3YmRhY2RjNDdlZGYxZDNiMjFkMGFlYzc2MzFhYmI2ZDdkNSI6ImMxNmVlMDkwOGE1ODg2ZGNjZjMzMmZiYzYxZGU5ZWM3Yjc5NzJkMmM0YzgzYzQ3NzQwOWNlOGExNWM2MjMyOTQiOiIiOiIiOiJhNTJmOTNjY2IzNjNlMmJkZjA5MDM2MjJjM2NhZWRiN2NmZmQwNGI3MjYwNTJiOGQ0NTU3NDRjNzFiNzZkZWUxYjcxZGI5ODgwZGMzYzIxODUwNDg5Y2IyOWU0MTJkN2Q4MDg0OWNmYTkxNTFhMTUxZGNiZjMyYTMyYjRhNTRjYWMwMWQzMjAwMjAwZWQ2NmEzYTVlNWMxMzFhNDk2NTVmZmJmMWE4ODI0ZmY3ZjI2NTY5MGRmZmI0MDU0ZGY0NmE3MDdiOTIxMzkyNGM2MzFjNWJjZTM3OTk0NGM4NTZjNGY3ODQ2ZTI4MWFjODljNjRmYWQzYTQ5OTA5ZGZiOTJiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjU5ZDYzMDc0NjBhOWJkZDM5MmRmYzA5MDQ5NzM5OTFkNTg1Njk2MDEwYTcxZTUyZDU5MGE1MDM5YjQ4NDlmYTQzNGEwYWFmYjk1OTE3Y2JmOGMzOGZjNTU0ODM3M2MwNSI6IjA0MDdiN2M1N2JjMTEzNjE3NDdjM2Q2NzUyNmMzNmUyMjgwMjhhNWQwYjE0NWQ2NmFiOWEyZmU0YjA3NTA3YTAiOiIiOiIiOiIyOTlhYmEwNjYxMzE1MjExYjA5ZDI4NjE4NTVkMGI0YjEyNWFiMjQ2NDk0NjEzNDFhZjZhYmQ5MDNlZDZmMDI1MjIzYjMyOTlmMjEyNmZjYWQ0NGM2NzUxNjZkODAwNjE5Y2Y0OTU0MDk0NmIxMjEzODk4OTQxNzkwNDMyNGIwZGRhZDEyMTMyNzIxMWEyOTdmMTEyNTljOWMzNGNlNGM3MGMzMjJhNjUzNjc1Zjc4ZDM4NWU0ZTI0NDNmODA1OGQxNDExOTVlMTdlMGJkMWI5ZDQ0YmYzZTQ4YzM3NmU2ZWI0NGVmMDIwYjExY2YwM2ViMTQxYzQ2ZWNiNDNjZjNkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjlhZTM1MDZhYWRiYzgzNTg2OTZiYTFiYTE3ZTg3NmUxMTU3YjcwNDgyMzU5MjE1MDNkMzZkOTIxMWI0MzAzNDI5YWJmN2Q2NmFmZWU1ZDJiODExY2JhMzU4YmJjNTI3ZCI6IjBkNjQ1ZjYyMzhlOWNlYjAzOGU0YWY5NzcyNDI2Y2ExMTBjNWJlMDUyZjg2NzNiOGI1YTY1YzRlNTNkMmY1MTkiOiIiOiIiOiI1ZjAzMmM3ZmVjNjMyMGZlNDIzYjZmMzgwODVjYmFkNTlkODI2MDg1YWZlOTE1MjQ3YjNkNTQ2YzRjNmIxNzQ1NTRkZDQ4NzdjMGQ2NzFkZTk1NTRiNTA1MzkzYTQ0ZTcxZjIwOWI3MGY5OTFhYzhhYTZlMDhmOTgzZmZmMmE0YzgxN2IwY2QyNmMxMmIyYzkyOTM3ODUwNjQ4OWE3NWIyMDI1YjM1OGNiNWQwNDAwODIxZTdlMjUyYWM2Mzc2Y2Q5NGE0MGM5MTFhN2VkOGI2MDg3ZTNkZTVmYTM5ZmE2YjMxNGMzYmExYzU5M2I4NjRjZTRmZjI4MWE5N2MzMjViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6Ijk2YWUzYjg3NzViMzZkYTJhMjliODg5YWQ4Nzg5NDFmNDNjN2Q1MTI5NWQ0NzQ0MGNkMGUzYzQ5OTkxOTMxMDkxZmUwMjJhNmZjMDIzN2IwNTVkNGQ2YTcwMzZiMThkNSI6IjFlNDBlOTczNjJkMGE4MjNkMzk2NGMyNmI4MWFiNTM4MjVjNTY0NDZjNTI2MTY4OTAxMTg4NmYxOWIwOGU1YzIiOiIiOiIiOiJlNzA3Y2QxNGIwNmNlMWU2ZGJjY2VhZWRiZjA4ZDg4ODkxYjAzZjQ0YWQ2YTc5N2JkMTJmZGViNTU3ZDAxNTFkZjkzNDZhMDI4ZGVjMDA0ODQ0Y2E0NmFkZWMzMDUxZGFmYjM0NTg5NWZhOWY0NjA0ZDhhMTNjOGZmNjZhZTA5M2ZhNjNjNGQ5YzA4MTZkNTVhMDA2NmQzMWU4NDA0Yzg0MWU4N2I2YjJjN2I1YWU5ZDdhZmI2ODQwYzJmN2I0NDFiZjJkM2Q4YmQzZjQwMzQ5YzFjMDE0MzQ3YzE5NzkyMTNjNzYxMDNlMGJlY2UyNmFkNzcyMDYwMWVmZjQyMjc1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjMzZjUxMjAzOTYzMzZlNTFlZTNiMGI2MTliNWY4NzNkYjA1Y2E1N2NkYTg2YWVhZTI5NjRmNTE0ODBkMTQ5OTI2ZjFmNmU5ODA3YmE1MzkzZWRjZjNjYjRlNGJiNjExMyI6IjM3MDk2MDVhZjQ0ZDkwMTk2ODY3YzkyNzUxMmFhOGJhMzE4MzcwNjMzMzdiNDg3OTQwOGQ5MWEwNWM4ZWZhOWYiOiIiOiIiOiI4YjgyOTExMjZkZWQ5YWNlZjEyNTE2MDI1Yzk5Y2NjZTIyNWQ4NDQzMDhiNTg0Yjg3MmM5MDNjN2JjNjQ2NzU5OWExY2VhZDAwM2RjNGM3MGY2ZDUxOWY1YjUxY2UwZGE1N2Y1M2RhOTBkYmU4ZjY2NmExYTFkZGUyOTc3MjdmZWUyZDQ0Y2ViZDEzMDFmYzFjYTc1OTU2YTNmY2FlMGQzNzRlMGRmNjAwOWI2NjhmZDIxNjM4ZDJiNzMzZTY5MDJkMjJkNWJmYjRhZjFiNDU1OTc1ZTA4ZWVmMGViZTRkYzg3NzA1ODAxZTc3NzY1ODNjOGRlMTE2NzI3MjlmNzIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJhZDMwMGI3OTkwMDVmMjkwZmVlN2Y5MzBlZWJjZTE1OGI5OGZiNmNiNDQ5OTg3ZmU0MzNmOTU1NDU2YjM1MzAwMDZhYTI1MTRlNGJkMTE0ZWRmN2FjMTA1Y2ZlZjI3NzIiOiI4N2FkYTcxMTQ2NWU0MTY5ZGEyYTc0YzkzMWFmYjliNWE1YjE5MGQwN2I3YWYzNDJhYTk5NTcwNDAxYzNlZThhIjoiIjoiIjoiODBkN2M2MDZmZjQ5NDE1YTNhOTJiYTFmMjk0MzIzNWMwMTMzOWM4ZjljZDBiMDUxMWZiZmRmM2VmMjNjNDJmZmZmMDA4NTI0MTkzZmFhYTRiN2YyZjJlYjBjZmEyMjFkOWRmODliZDM3M2ZlNGUxNThlYzA2ZmFkM2VjZjFlYjQ4YjgyMzliMGJiODI2ZWU2OWQ3NzM4ODNhM2U4ZWRhYzY2MjU0NjEwZmY3MGI2NjA5ODM2ODYwZTM5ZWExZjNiZmEwNDU5NmZlZTFmMmJhY2E2Y2ViYjI0NDc3NGM2YzNlYjRhZjFmMDI4OTllYmE4ZjQxODhmOTE3NzZkZTE2ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiMTMwYjA0NGUyYzE1YWI4OTM3NWU1NGI3MmU3YmFhZTZkNGNhZDczNGIwMTNhMDkwZjRkZjA1N2U2MzRmNmZmMDY1ZmQ2YWM2MDJjZDQ0MTA3ZDcwNWRiYzA2NmU1MmI2IjoiZjM3NGFiYTE2ZjM0ZDU0YWFlNWU0OTQ1MDViNjdkMzgxOGVmMWMwOGVhMjQ5NjdhNzY4NzZkNDM2MTM3OWFlYyI6IiI6IiI6IjVkMTc5NTM0ZmIwZGJhMzUyNjk5M2VkOGUyN2VjOWY5MTUxODNkOTY3MzM2YmIyNDM1MmM2N2Y0YWI1ZDc5MzVkMzE2OGU1NzAwOGRhODUxNTE1ZWZiYWVjYjY5OTA0YjZkODk5ZDNiZmE2ZTk4MDU2NTlhZWYyOTQyYzQ5MDM4NzViOGZjYmMwZDFkMjRkMWMwNzVmMGZmNjY3YzFmYzI0MGQ4YjQxMGRmZjU4MmZhNzFmYTMwODc4OTU1Y2UyZWQ3ODZlZjMyZWY4NTI3MDZlNjI0MzliNjk5MjFmMjZlODRlMGY1NGY2MmI5MzhmMDQ5MDVmMDVmY2Q3YzIyMDQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjcxNjQzMGU5OTk5NjRiMzU0NTljMTc5MjFmZTVmNjBlMDliZDlhYjIzNGNiOGY0YmE0OTMyYmVjNGE2MGExZDU5NTMzYjcxMWUwNjFiMDdkNTA1ZGE3MDdjYWZiY2EwMyI6IjM3MmFlNjE2ZDFhMWZjNDVjNWFlY2FkMDkzOWM0OWI5ZTAxYzkzYmZiNDBjODM1ZWViZDgzN2FmNzQ3ZjA3OWQiOiIiOiIiOiJhODBkNmExYjJkMGNlMDFmZTBkMjZlNzBmYjczZGEyMGQ0NTg0MWNmMDFiZmJkNTBiOTBkMjc1MWE0NjExNGMwZTc1OGNiNzg3ZDI4MWEwYTljZjYyZjVjOGNlMmVlN2NhNzRmZWZmZjMzMGVmZTc0OTI2YWNjYTZkNmYwNjQ2ZTRlM2MxYTFlNTJmY2UxZDU3Yjg4YmVkYTRhNTgxNTg5NmYyNWYzOGE2NTJjYzI0MGRlYjU4MjkyMWM4YjFkMDNhMWRhOTY2ZGQwNGMyZTdlZWUyNzRkZjJjZDE4MzcwOTZiOWY3YTBkODlhODI0MzQwNzZiYzMwMTczMjI5YTYwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI3Njc5ZjE1NDI5NmU2ZDU4MDg1NDgyNjUzOTAwM2E4MmQxYzU0ZTJlMDYyYzYxOWQwMGRhNmM2YWM4MjA3ODliNTVkMTI5NDFiMDg5NjQ2MmU3ZDg4OGU1MzIyYTk5YTMiOiJiYTRkMWVkNjk2ZjU4ZWY2NDU5NmM3NmNlZTg3Y2MxY2E4MzA2OWE3OWU3OTgyYjlhMDZmOWQ2MmY0MjA5ZmFmIjoiIjoiIjoiMTBkYzdjZDJiYjY4YzJjMjhmNzZkMWIwNGFlMmFhMjg3MDcxZTA0YzNiNjg4ZTE5ODZiMDVjYzEyMDlmNjkxZGFhNTU4NjhlYmIwNWI2MzNjNzVhNDBhMzJiNDk2NjMxODVmZTViYjhmOTA2MDA4MzQ3ZWY1MTU5MDUzMDk0OGI4NzYxMzkyMDAxNDgwMmU1ODY0ZTA3NThmMDEyZTFlYWUzMWYwYzRjMDMxZWY4MjNhZWNmYjJmOGE3M2FhYTk0NmZjNTA3MDM3ZjkwNTBiMjc3YmRlYWEwMjMxMjNmOWQyMmRhMTYwNmU4MmNiN2U1NmRlMzRiZjAwOWVjY2I0NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiOGNhNGE5NjRlMWZmNjg3NTNkYjg2NzUzZDA5MjIyZTA5Yjg4OGI1MDBiZTQ2ZjJhMzgzMGFmYTkxNzJhMWQ2ZGE1OTM5NGUwYWY3NjRlMmYyMWNmNzUxZjYyM2ZmYTZjIjoiZWI4MTY0YjNiZjZjMTc1MGE4ZGU4NTI4YWYxNmNmZmRmNDAwODU2ZDgyMjYwYWNkNTk1ODg5NGE5OGFmZWVkNSI6IiI6IiI6ImZjNTcwMWI1MDhmMDI2NGY0ZmRiODg0MTQ3NjhlMWFmYjBhNWI0NDU0MDBkY2ZkZWRkZDBlYmE2N2I0ZmVhOGMwNTZkNzlhNjlmZDA1MDc1OWZiM2Q2MjZiMjlhZGI4NDM4MzI2ZmQ1ODNmMWJhMDQ3NWNlNzcwN2JkMjk0YWIwMTc0M2QwNzc2MDU4NjY0MjViMWNiZDBmNmM3YmJhOTcyYjMwZmJlOWZjZTBhNzE5YjA0NGZjYzEzOTQzNTQ4OTVhOWY4MzA0YTJiNTEwMTkwOTgwOGRkZmRmNjZkZjYyMzcxNDJiNjU2NjU4OGU0ZTFlODk0OWI5MGMyN2ZjMWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI1ZDMyODZiYzUzYTI1OGE1M2JhNzgxZTJjNGRjZDc5YTc5MGU0M2JiZTBlODlmYjNlZWQzOTA4NmJlMzQxNzRiYzU0MjIyOTRiNzMxODk1MmFjZTcwNTVhYjc1NzBhYmYiOiIyZGJhMDk0ZDAwOGUxNTBkNTFjNDEzNWJiMmYwM2RjZGU5Y2JmMzQ2OGExMjkwOGExYjAyNWMxMjBjOTg1YjlkIjoiNzkzYTdlZjhmNmYwNDgyYmVhYzU0MmJiNzg1YzEwZjhiN2I0MDZhNGRlOTI2NjdhYjE2OGVjYzJjZjc1NzNjNiI6IjIyMzhjZGI0ZTIzZDYyOWZlMGMyYTgzZGQ4ZDUxNDRjZTFhNjIyOWVmNDFkYWJlMmE5OWZmNzIyZTUxMGI1MzAiOiJkMDQ2NzgxOThhZTdlMWFlYjQzNWI0NTI5MTQ1OGZmZGUwODkxNTYwNzQ4YjQzMzMwZWFmODY2YjVhNjM4NWU3NGM2ZmE1YTVhNDRiZGIyODRkNDM2ZTk4ZDI0NDAxOGQ2YWNlZGNkZmEyZTlmNDk5ZDgwODllNGRiODZhZTg5YTZhYjJkMTljYjcwNWUyZjA0OGY5N2ZiNTk3ZjA0MTA2YTFmYTZhMTQxNmFkM2Q4NTkxMThlMDc5YTBjMzE5ZWI5NTY4NmY0Y2JjY2UzYjUxMDFjN2EwYjAxMGVmMDI5YzRlZjZkMDZjZGZhYzk3ZWZiOTc3Mzg5MTY4OGMzN2NmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiYzJhNTY2YTlhMTgxN2IxNWM1YzNiNzc4MTc3YWM4N2MyNGU3OTdiZTBhODQ1ZjExYzJmZTM5OWRkMzc3MzJmMmNiMTg5NGViMmI5N2IzYzU2ZTYyODMyOTUxNmY4NmVjIjoiMTNjZTRkOGRkMmRiOTc5NmY5NDE1NmM4ZThmMDc2OWIwYWExYzgyYzEzMjNiNjE1MzY2MDNiY2EzN2M5ZWUyOSI6IjQxM2RkODNmZTU2ODM1YWJkNDc4Y2I5NjkzZDY3NjM1OTAxYzQwMjM5YTI2NjQ2MmQzMTMzYjgzZTQ5YzgyMGIiOiJkNWM0YTcxZjlkNmQ5NWExYmVkZjBiZDIyNDdjMjc3ZDFmODRhNGU1N2E0YTg4MjViODJhMmQwOTdkZTYzZWYxIjoiYjNhMzY5OGQ3Nzc2OTlhMGRkOWZhM2YwYTlmYTU3ODMyZDNjZWZhYzVkZjI0NDM3YzZkNzNhMGZlNDEwNDBmMTcyOTAzOGFlZjFlOTI2MzUyZWE1OWRlMTIwYmZiN2IwNzMxODNhMzQxMDZlZmVkNjI3OGZmOGFkODQ0YmEwNDQ4MTE1ZGZkZGYzMzE5YTgyZGU2YmIxMWQ4MGJkODcxYTlhY2QzNWM3MzY0NWUxMjcwZmI5ZmU0ZmE4OGVjMGU0NjU0MDllYTBjYmE4MDlmZTJmNDVlMDQ5NDNhMmUzOTZiYmI3ZGQyZjRlMDc5NTMwMzUyNGNjOWNjNWVhNTRhMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImEzMzI4OGE5NmY0MWRkNTRiOTQ1ZTA2MGM4YmQwYzA5NGYxZTI4MjY3Y2MxZGNiYmE1MjA2M2MxYTlkNTRjNGQzNjkxOGM5NzdlMWE3Mjc2YTJiYjQ3NTU5MWMzNjdiNyI6IjZhYTUyOGM5NDA5NjI2MzhkYzIyMDE3Mzg4NTBmZDFmZTZmNWQwZWI5ZjY4N2ZmMWFmMzlkOWM3YjM2ODMwZDkiOiIzN2VlNjMzYTYzNWU0M2FmNTlhYmRiMTc2MmM3ZWE0NWJmZTA2MGVjMWQ5MDc3ZWNkMmE0M2E2NTg2NzNmM2M3IjoiMmViOTZmMmUyOGZhOWY2NzRiYjAzYWRlNzAzYjhmNzkxZWU1MzU2ZTJlZTg1YzdlZDViZGE5NjMyNTI1NmM2MSI6ImRiMmY5MTkzMjc2N2ViODQ2OTYxY2U1MzIxYzcwMDM0MzE4NzA1MDhlOGM2ZjhkNDMyY2ExZjljZWU1Y2RjMWFlZDZlMGYxMzNkMzE3ZWI2OTkwYzRiM2IwYTM2MGNkZmI1YjQzYTZlNzEyYmQ0NmJjYTA0YzQxNDg2OGZhYjIyYzZhNDljNGI4OWM4MTI2OTdjM2E3ZmJmYzhkZGYxMGM4YWE1ZWJmMTNhMDlmZDExNGViMmEwMmEwN2Y2OTc4NmYzY2U3ZmQzMDIzMWYyMjc3OWJjOGRiMTAzYjEzZmE1NDZkYmM0NWE4OWE4NjI3NTI4MTE3Mjc2MTY4M2QzODQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI1ZjM3YjZlNDdlMTc3NmU3MzVhZGMwM2Q0Yjk5OTg3OTQ3N2ZmNGEyMDYyMzE5MjQwMzNkOTRjMDExNGY5MTFiN2QxMmQ2MmM3OWM5ZjYyMzRhZTAzMTQxNTY5NDc0NTkiOiI5MmQ0ZDlmYWI1ZjhiZjUxMTlmMjY2M2E5ZGY3MzM0ZjUwZGNkZTc0ZmI5ZDc3MzJmN2ViYTU2NTAxZTYwZDU0IjoiYzlhZWYwZDdhOWJhNzM0NWQwOGI2ZDViNWNlNTY0NWM3NDk1Yjg2ODVlNmI5Mzg0NmZmY2Y0NzBmNWFiZDQwZCI6IjUwZDlkMWY1MDc0ZjdkOWYxYTI0YTljNjNhYTQ3Yjk0ZGE1YmE3OGRiMWIwZjE4ZTRkNGZlNDVjNjg3NTgxM2MiOiIyMGQ5NDJiYmQ3ZDk4NzAwZmFhMzdlOTRkNTNiZjc0ZjJkNmJkMWQ4Yzk1YzBiODhkODQyYzQ4NTc3OTdkNTllN2M4Nzg4YWVlYWMyOTc0MDEyMmYyMDhmNzAzYmYzNWRjMzJiMDAzNWRiMDY0ODM4NGZlYjZhYTE3YTMyNzRiYzA5YjJkMmI3NDZjNWEwNmZkODJmNDQ2OWZiODYxMzFhNDk0ODJjYjdiZTdkOWI0Yjk1MDQyMzk0Y2ZiMThiMTNmMzMzZWMwZmU1YzIyN2JmMWQ4ZjMzZWNiMmU0MmUzNThiNmMzZTAzNGNiNTg1MzMxYmQxZDI3ZjYzODAyOWI5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiMjMxMWM1YWZkNjRjNTg0NDg0YjI3MjllODRkYjgwYzBiNDA2M2ZlOWNhN2VkYzgzMzUwNDg4ZDdlNjcyNjRhMDZhNmRmZDk3NWEwZGM3YjcyZGYxZjEwN2M0YjNiM2E2IjoiMmFiZDg3MGVjNWZlMjZlZDE0ZGZhNTdhMzMwOWY5MjAxMzFiNzA1ODBjMzYzOWFmMjY0NWNkMWFmOTNkYjFiMSI6ImM2ZTUzMmEzYjI1NjUzYjYwMDJhZWQ1MjY5Y2MyMTE4NzQ5MzA2ZTczNmJkZTAzOWQ0ZDU2OWQ0Zjk2Nzc3M2YiOiI1ZTdkMjZjNGRhNzY5YzM3MzA5MmIyYjRmNzJiMTA5ZmUzNGJkYjdkMTY5ZWEzOGY3OGViYWU1ZGY0YTE1NzU5IjoiY2FjYWViMWI0YWMyMzA1ZDg3MTRlYjUwY2JlMWM2N2M1YTJjMGJiYzc5MzhmZGZkY2FmZWY3Yzg1ZmM0MGJlY2JmNzc3YTRjZmI2ZjE0YzZlZWUzMjA5NDNhNDkzZDJiMGE3NDRhNmViM2MyNTZlZTlhMzc2MzAzNzQzN2RmOWFkY2UzZTIyNjBmMGMzNWU5NThhZjBlZGI1YTgxZGViZDhiZGFmMmI4YmIyYjk4YjkxODZlNWEyMjJhMjE2MDlmZjU4ZGY0Y2JlMWQ0ODk4ZDEwZDZlN2M0NmYzMWY1Y2IxMDQxYmZkODNhNWZiMjdkNWM1NmM5NjFlOTE0MDNmYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjM2MmVjZTlkMzMwZTExNzJhOGY5ZTUwMjU4NDc2ZDBjNzljM2VlNTAzNDY1MjRiYTEyZDk3MGVlM2E2ZWY4YzVjZjExYmNiNGQ5ZDUxMzExY2VhY2ZjYTg3MDVlODMzZiI6ImFiYjVhOGVkZGUwMmU1MjY0NDkyODRlY2MzMWJjNzEzMzgzZGYzZWQwODVmNzUyZTNiNmEzMmYzMDU4NjFlZWQiOiI3NDYzMDJhYjFmNGE4NmIxNzU0NmJlYTc2MmU5MjkzNjBmMmU5NWM3Nzg4YTYzNTQ1YTI2NGVmOTk3YzhjNjVlIjoiYjkwN2M1YjJhODgzM2E0OGU1NmU4MTkyMjhjZTlhMDUwYjQxYjMzMDlmNWNhMzdiZWQ3MjAzMTFkOTJiMzNhZiI6IjczYzcxMzFhNTU4MzUwNTkwMDUzNTgwODczZWY5NTZmZjk1MmYyYWE2ZmYxYmVhNDUyZTAxM2QxYmMyYWZkZGVhMjMxMTc1NmRiZTc1NmU2M2JhNjI1ODQ4MGM0OGYzZjZjMTMxOWI1ZjU3MmY2N2NhNTMwYWYwOWUzOTQxM2QxZDQzMmJlYThmODkyMDY2MTk2MThjYjBlN2M4OGU5ZjIwMzM2MzlkMGViMGVmYzIwNjE2YjY0Zjk0MGRhOTliODgyMzE5ODRjM2ZiMjNmMTllODkwNTc2ZjU1NWZkZTM5NGRiZDQzNTFmMTdhN2ZmZDVjMzY5Mzc5MDAxYmRhMDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiJjZjYxNGJjMjk5NDZiYzAwOTVmNDE1ZThiZGVkYTEwYWFiMDUzOTJmOWNjOTE4N2E4NmVhNmVjOTVlZTQyMmUxNzdmYjVlYzIyZGMwNDMyY2MxM2Y0NjkzZTJlM2JkOWEiOiJlNGNlNzc5MTRmZmJjNWZkZGYxZmI1MWVkZmFmZGMxOTYxMDkxMzliODRjNzQxMzU0MTM1ZWM4ZDMxNGM3YzQzIjoiZTFlODNlZTEyMDVhY2FmNjE2NGRjMjg3YWVjMDhlNWIzMjc4OWU1YmU4MTgwNzhkYjM5ZTUzY2FkNTg5ZGI1MSI6IjRlMjBjMDIyNmQ1ZTFlN2U4MDU2NzlmMDNmNzI0NTJiNWJlYTJkMGJhNDFlMGMxMjMyOWJmNjBlYjMwMTZkZDEiOiI4MzhmZGYxNDE4YTc0NmFhNTJhZTQwMDVkOTBjM2ZkMzAxZjY0OGM1NzcwZmZlZjJhOWYzOTEyZTM3YTkzODUwY2M0YjhiZmNjZTkxMGFlYWQwY2I3NTk1ODgyM2IxYTYyZTI4MzkwMWM1ZTRhMzk4MGU0ZWEzNjI1NzQ1OGUyZTQ5NTM1NTU4MTliODg1MmEyNjQ4OWIxZDc0ODIxZjgwYzk5MDg0NjliNDNmMTI0ZmY3ZWE2MjQ5N2MzNjE1OWE0NzM1MzA5OGExYjllYzMyZTU0ODAwZDY3MDQzNzFjYzM3ZjM1N2FkNzRhYWNjMjAzZTliNmRiOTdmOTRkMGM0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiYThkYTFkM2UyMzNmMzkzZmQ0NGQyMDRjMjAwMjAyZjdkMDE4OTZlNzJjNWFjNjUyOTQwY2ZkMTViNWQ0YjBiZDBhMTEyYjRjYjA4OTBhZjBhNDk1ZTBmNDlmY2Y2ODc0IjoiZDJlMzI3OTliYzgyMmI4ZDAzMzI5OWJkZjYzZGMzNTc3NGY3NjQ5ZTkzNWQyNWJlNWIxMDUxMmM0MzBkMWJkYSI6IjkyMGE4MmQ3NmZjZDJjZDEwNmFkYTY0YmJhMjMyYjdiMjM0NGYzYWZlNmIxZDFkMjBlZTg3OTUxNDQ1NzEwMDkiOiJlZWFhYzU4NzgyNzUzNzIwMjVmODIzMWZlYmVkNjRkYjZhMTEyNzNjM2MwMGQ2MjVmYzgwYTk1ZjE4YWQ3ZDNmIjoiNWY2ZGFlNDg5YjUzZDg5MDI3YjJjYzMzM2M3MDBmMDkwMTUyZDc3YjNlYWYwMWQ0N2Y1NmNlNmVjYTk4OTNlZjg3N2I0Y2I1NjBmYWIwZmJkYjM0ZTNkMWM2Y2Q4NDgwYjMzYzA1M2QyNjYxYTEwYWE1MzFkZjQ5NjFiOTdkNjU5Yzc0OTI1ODQyMzY1ODJiM2ZlNzAxMDU1ZWZhNTljMzI4MTk0Y2QxZTA3ZmNmZmQ5MTBkOWVlMDFiN2I5ZThjOGZkYTdmN2FjMDFhOGUyMDNiOGIyNmViODA3OGE5YjlhNTAyMTU2MmM0NGFmMjQwODllM2VmODRjMWQ1YTZiZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImE3N2IxZWQ0ZWNhYTY1MDM3NGUxMDUyYzQwNWYxZDg4ODgxYzI1Yzg3ZDEzZGJlMTMzNGQ4YzFhODQ3ZmE3NmIwNWMxNDNlMmYxNDVkYjIxNmZlN2JlOWVkMjM2MzVkMCI6ImI1Yzc1MDk2OGZmMDllZDI1MWQ0YTFjMDUzNDJhYzg0M2RiNTI0NmIxOTA0NTcyOGE2MzRmYTRmNmU3NTJlNTQiOiJmZjU5MzdiY2QwMWEzNjM2OTZiZjhlNDBhZGM4ZTRhYjNlNTZkYmY3ZTdkMDk0NTFjOTllNTM4Nzg1ZmU2Njk3IjoiNGFjYjM0ZWVhODI2NmJhZGNmOGY2NTU3YTBlZWNmM2ViNGQ3YTI5NWM4NzZkNjE3NTU5OGNiNjZhMzg4ZWZiOCI6ImVjMTNlYWRmY2M4NGU3N2QyYTJlZmExYTJjZDhiMTM1NTU4N2NiMjdmZWIzZDE5ZDc1YjM3ZjA0NDYzMzNkZGI4MjM2ZTc1MWM2M2I3YTZlNTk1ZWMyNGEyNTA1MWE2OTZkYmU4YzA2MmRkODg5NmQxNDQ2ZGIyMjhhMmYxMGU4MDk0ZWUwN2U3ZWU2NDhlZDZiZWJiMmY1ZWM1YWFlMjRjOWM2NDA2NjVjMjgzNTVjYzExYzExNjc5NWVjYzA3MDc5MGY3ZmRmYzQzOTg5MDAzMTFiNjY5NWQ1ZGEwMTc1MDkxZWQxODI4ZDI3MzEwODViZmI0YTIwYmQ4NmNjZTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI0OTE2ODZjNzgxZTgzZWI0ZTIxZDk5ODllOGQ3MTgxMDBiMGQyMWEyYzU2Mjk1ODg4YmFlZjFhNjVmMjE5NjUxNDk5MDg1Mjk2ZDIxMDY1ZmVhYmYzMTA2MTAxYzhkNmYiOiJkMjA4YTcyZjlhZTM0ZjA4MTc2NjlmYjA0ZjQ5MjM5ZGQzMTcwMGYzZGM5YTkzZGI4ZDc1ZmI3OWY5YjY4NmMxIjoiOWZmYzYxODkzYTI5M2E4NjQwMDhmZGQ1NmQzMjkyNjAwZDllMmVjOGExZWE4ZjM0YWM1OTMxZTk2ODkwNWEyMyI6IjRmZjNhMzk3ZGZkYWUwOTEyMDMyYTMwMmE1ZTdhMDdkY2VjYThkOTAxM2EyMTU0NTY4OTMxOWI3YzAyNGNkMDciOiIzYzI1OGViZjIyMDNmY2EzYjMyMmFkMWIwMTZlMjFjN2Y1YzE0ODQyNWY4MWU0ZmIwYTBlNDYyZGNlOWRmYTU2OWMzN2EwMDY1Mjc3NjgyOTdhNWI2ODQ2MWIwODkxMjY0MmEzNDFiODhjODU1OTdlMzBlNzU2MTIwNjg4NjA5OGM0ZTJkODYxZjExNTEzZjBmZmRiYmM3OGQzYTJkZDYwYzEwNWFiYmIzM2M1ZTA1YWUyNzA4MWI2OTBmYjhiMzYxMDkxN2FhOWJmMWE0YWQ3NDQ4MWI1ZmY4MzM0ZjE0ZTVhZDZhNmExZWIyMjU5NDc2MDc4MDc2ZmI3ZTNhOTkyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6IjM2YTUyNjdlZWViNWExYTdkNDZkZTBmOGY5MjgxZjczY2Q5NjExZjAxMTk4ZmRhYTc4YzUzMTUyMDVlNWExNzdiNjZiNTMzNzk3MGRmMzYyMTkzMjFiYWRhY2M2MjRlYiI6ImMyYTdiMTY0OTQ5ZGExMDJiZWNlNDRhNDIzMTk3NjgyZmY5NzYyN2QxZmU5NjU0MjY2Yjg1MjdmNjRlNWIzODYiOiJhOTc3ZTJkODYzN2IwMTljNzQwNjNkMTYzYmIyNTM4N2RjNTZmNGViNDBlNTAyY2VmYzVhZTZhZDI2YTZhYmRjIjoiYzVjOTgxOTU1N2IxZTdkOGE4NmZhOGM2MGJlNDI5OTNlZGMzZWY1MzljMTNkOWE1MWZiNjRiMGRlMDZlMTQ1ZSI6ImI0NzE3MTFhNGZjN2FiNzI0N2U2NWQyYzJmZTQ5YTUwMTY5MTg3MTg3Yjc5NzhjZDJmZGIwZjgzMThiZTNlYzU1ZmM2OGVkNDU3N2FkOWI0MmNiYjU3MTAwYjVkMzVhYzg2YzI0NGM0YzkzYTViMjhjMWExMWMyZGZlOTA1ZDYwOGVjNzgwNGRlYzViYjE1Y2Y4ZDc5Njk1NTM0ZDVlMTNhNmE3ZTE4YTg4N2VjOWNmMTg0ZGEwY2JiYzYyNjdmM2E5NTJhNzY5NDAzYmFmY2RiYjU1OTQwMWJlMGQ4YjMzMDBlYTcyNThiNDAyNmZjODkyMTc1ZWZkNTViYTFhNjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiYTc2YjAzNjZkZjg5ZTQwNzNhNmI2YjljMDRkYTFkNjgxN2NlMjZmMWM0ODI1Y2FkNDA5N2JkZjRkN2I5NDQ1ZTc3M2QzY2MzMjkwMTc2NzczODQ3ODY5YmU1MjhkMWE0IjoiMWJmZDNiY2ZiOTI4N2E1YWQwNTVkMWIyYjg2MTVmYTgxYzk0YWMyNGJjMWMyMTlhMGY4ZGU1ODc4OWUwNDA0YSI6ImVkZDg3OWZhNTZmMjFkOTMwMjlkYTg3NWI2ODNjZTUwZjZmZGM0YzBkYTQxZGEwNTFkMDAwZWVkMmFmZWZlZmEiOiJmNTI4ZmZkMjkxNjAwMzkyNjAxMzNlZDk2NTQ1ODljZTYwZTM5ZTdmNjY3YzM0ZjgyY2RhNjVkZGNmNWZmZjE0IjoiMzlkMWZmODg0OGU3NGRkMmNkYzZiODE4YWQ2OTgyMzg3ODA2MjExNmZkZjE2Nzk5NDJmODkyYzdlMTkxYmUxYzRiNmVhMjY4ZWNkZmYwMDFiMjJhZjBkNTEwZjMwYzJjMjViOTBmYzM0OTI3ZjQ2ZTNmNDVkMzZiMGUxODQ4YjNhNWQ1NGMzNmM3YzY1ZWU3Mjg3ZDMyNWRmYmI1MWI1NmE0MzhmZWI2NjUwY2UxM2RmODhiZjA2Yjg3YWM0YTM1ZDJhMTk5ZWE4ODg2MjlmYjBkODNmODJmMGVhMTYwZGM3OWVkMjIwZDhlZjE5NWI5ZTgwYzU0MmY2MGMyZDMyMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTI1NiwyNTYrMTI4LDI1NiwyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMjU2OiI0NjU3MWUxZGY0M2U1ZTE0MTIzNWUyYTllYzg1YmIwZmFmMWRjMDU2NjAzMWUxNGQ0MWEyZmJkMDMxNTY1M2VjYjYwZWY2YTMzNDc5Njc1MTlhYWJlYWY3NDhlNGU5OTEiOiI3NTlmZDg1OTNlMzY4OGIyM2M0YTAwM2I2NTUzMTE3NzBkNjcwNzg5ODc4NTcwZWIzYjE1NWE4ZTZjMmQ4YzQ1IjoiMDMzMTI4NDYwYjQ0OWUxYWNjYjBlOWM1NDUwODc1OWRkYzI1MzhiYzY0YjUxZTYyNzc1NTNmMGM2MGEwMjcyMyI6ImE1ZTRhNzE3MjQwYmRlYWMxOGEwYzBlMjMxYTExZGMwNGE0N2Q3NTUwZjM0MmZhOWE3YTVmZjMzNGViOTMyN2QiOiI5ZDIyMmRmMWQ1MzBlYTdmOGYyMjk3YTBjNzlkNjM3ZGE1NzBiNDgwNDJlY2RkZGVkNzU5NTZiYmEwZjBlNzBiMjcxZmZhM2M5YTUzYmFkYTZlZTFiOGE0MjAzYzIyYmZkZTgyYTVlMmViMWIxNTBmNTRjNjQ4MzQ1ODU2OTQyMmMxYTM0YTg5OTdkNDJjYzA5NzUwMTY3YTc4YmY1MmEwYmQxNTgzOTdhZjlmODNjYWFiZTY4OTE4NWMwOTliZjBhOWE0ODUzZGQzY2Y4YjhlODllZmViYjZhMjdkYmE4NzNlNjVlOTkyNzc0MWIyMjk2OGYyODc1Nzg5YjQ0ZTAxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMjU2LDI1NisxMjgsMjU2LDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEyNTY6ImQ2Mzk4MGU2M2JiZTRhYzA4ZDJhYzU2NDZiZjA4NWI4MmM3NTk5NWUzZmRmYzIzYmI5Y2M3MzRjZDg1Y2E3ZDJkMzNlZDFkY2FlMTNmYjYzNGJhMDgyNzJkNjY5NzU5MCI6ImFjZDBkYTA3MDA3MmE1MzQwYzRmNWY0Mzk1NTY4ZTFhMzYzNzRlMDc0MTk2YWU4N2YzNjkyZWU0MDQ4N2UxZGYiOiJmNTY3Njc3YjVlMTJlMjZmMzU0NGJlM2RhOTMxNGM4OGZjNDc1YmY4NDgwNGE4OWE1MWYxMmIxOTEzOTJjMDJiIjoiYzAxY2M3ODczZTkzYzg2ZTJiZmI4ZmM5ODRjZmMyZWFiNWNjNThlZWVmMDE4ZmVkYjVjYmE1YWVkZDM4NjE1NiI6ImIxMzM0NDZmNjMzYmNiNDA3MjRiYmY5ZmExODdjMzlhNDRiOWMwOTRhMGEwZDQwZTk4OTc3ZTU0NjZkYzJjOWFkZjYyYTVmNDU1MWVlYjY0MDZhMTQ2NThkZThhMGVkNzQ4N2MzYmY2Mjc3ZTgxMTEwMTI4NGE5NDE3NDVjZTE2MTc2YWNjODc1ZjE0MzVlMTQxNjE3NzJmYTg0NjA5ZTgxMjNjNTNkZDAzY2JiODY4MDMwODM1YzBkMTFkOGQ2YWEwNGExYjZmOTA4MjQ4YjAyODk5NzczN2Y1NDczNWVjNGVkN2E4MWZjODY4MTk5ZmZiNjFhNzc5ZDkzNDAzMzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0yNTYsMjU2KzEyOCwyNTYsMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTI1NjoiM2Q5OWY5YjdhYzNhMmZiZTljZjE1ZDk2MGJmNDFmNTU4OGZjNGRiMWUwZDJhNWM5YzBmZTkwNTlmMDM1OTNmYjQxMWY1MDRiYjYzYTliM2FmYTdmZmExMzU3YmI0OGJlIjoiMGJiNWViZDU1OTgxYTI1YmE2OTE2NGRhNDlmYTkyZjI4NzFmZDNmYzY1ZWIzMGQwZjBkMGI4ZDc5OGE0ZjhmMiI6IjI4OGU5NDhhNTUxMjg0ZWIzY2IyM2UyNjI5OTk1NWMyZmI4ZjA2M2MxMzJhOTI2ODNjMTYxNWVjYWVkODBmMzAiOiJkOTc1YjIyZjc5ZTM0YWNmNWRiMjVhMmExNjdlZjYwYTEwNjgyZGQ5OTY0ZTE1NTMzZDc1ZjdmYTllZmM1ZGNiIjoiZWU4ZDcwN2VlYTliYzcwODBkNTg3NjhjOGM2NGE5OTE2MDZiYjgwODYwMGNhZmFiODM0ZGI4YmM4ODRmODY2OTQxYjRhN2ViOGQwMzM0ZDg3NmMwZjExNTFiY2NjN2NlODk3MDU5M2RhZDBjMTgwOTA3NWNlNmRiY2E1NGM0ZDQ2NjcyMjczMzFlZWFjOTdmODNjY2I3NjkwMTc2MmYxNTNjNWU4NTYyYThjY2YxMmM4YTFmMmY0ODBlYzZmMTk3NWFjMDk3YTQ5NzcwMjE5MTA3ZDRlZGVhNTRmYjVlZTIzYTg0MDM4NzQ5MjlkMDczZDdlZjA1MjZhNjQ3MDExYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiYTFkYzJkZmVkYTRmM2ExMTI0ZTBlNzVlYmZiZTVmOThjYWMxMTAxODIyMWRkYTNmZGNmOGY5MTI1ZDY4NDQ3YWJhZTVlYTI3MTY2NTQwNTE1MjY4YTQ5M2E5NmI1MTg3IjoiIjoiIjoiIjoiMjI4MjkzZTU5YjFlNDU0NWE0ZmY5ZjIzMjYxNmZjNTEwOGExMTI4ZGViZDBmN2MyMGFjZTgzN2NhMTA1Y2JmMjRjMGRhYzFmOTg0N2RhZmQwZDA1MDA3MjFmZmFkM2M2ODRhOTkyZDExMGE1NDlhMjY0ZDE0YTg5MTFjNTBiZThjZDZhN2U4ZmFjNzgzYWQ5NWIyNGY2NGZkOGNjNGM4YjY0OWVhYzJiMTViMzYzZTMwZGY3OTU0MWE2YjhhMWNhYWMyMzg5NDliNDY2NDM2OTRjODVlMWQ1ZmNiY2Q5YWFhZTYyNjBhY2VlNjYwYjhhNzliZWE0OGUwNzljZWI2YTVlYWY0OTkzYTgyYzNmMWI3NThkN2M1M2UzMDk0ZWVhYzYzZGMyNTViZTZkY2RjYzJiNTFlNWNhNDVkMmIyMDY4NGE1YThmYTU4MDZiOTZmODQ2MWViZjUxYmM1MTVhN2RkOGM1NDc1YzBlNzBmMmZkMGZhZjc4NjlhOTlhYjZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIwNjdmYTBlMjVkNzFlYTM5MjY3MWMyNGYzOGVmNzgyYWIzNTg3YTdiM2M3N2VhNzU2ZjdiZDQ5NmI0NDViN2EzY2U2YWNjNzIyNzY4Y2EwZTAzNzg0YjIyMTdiYzYwZTQiOiIiOiIiOiIiOiIxNmVhYTQ5NTEwZmZhZDhjYzIxZWMzMjg1ODY0MGEwZDZmMzRjYjAzZTg2NDkwMjJhYTVjM2Y1NjZiNDRlOGFjZTdjM2IwNTZjZjJhNDRiMjQyZGUwOWFlMjFkYmE0Mjc1NDE4OTMzNjExODc1ODQxYjRmMDk0NGE4MjcyODQ4YzVkYzFhYWQ2ODU5MzVlMTI1MTFkNWVlMjdlOTE2MmQ0YmI5NjhhZmFiNTNjNGIzMzgyNjljMWM3N2RhOWQ3ODYxNzkxMWVkNDM5MGNiMjBlODhiZjMwYjc0ZmRhNjZmZTA1ZGY1NTM3YTc1OTA2MWQzZmZkOTIzMWQ4MTFlOGIzNDIxM2YyMmFiMGIwZGRhZmZmNzc0OWE0MDI0M2E5MDFjMzEwNzc2ZTA5ZDJlNTI5ODA2ZDRkNmYwNjU1MTc4OTUzYzE2NzA3NTE5YzNjMTliOWFhYTBkMDlmYjY3NmE5ZDIzNTI1YzhiYzM4ODA1M2JmY2NmYmMzNjhlM2ViMDQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjlmNzY1MDNlODQ3MjcyOTdiYzcwNTZjN2FmOTE3YTFjOThiYWE3MjUyOTU0NTdkYjRmY2Y1NGVkMDlhZjdmMTVmMzljNDYxNDJiODVhNjdiNGIzMjM1OTRiN2U5N2JkZSI6IiI6IiI6IiI6IjdkNmE4YmM1YTdmMDU3Y2VlZDYxMDliZmFjMjQ4NmY4MGY4MTM3M2I2YjMxZDA2MmFhMWZhZDZkOWVkYTU4NzQ4NjdiOWVmMDA3YmE1YTkyYmE4ZjNmY2E2MjRiZmQ5ZjdlZTU3NzBiYmViMDM5MTM5NGZlZjc4M2MxNmE3ZjAwM2MwNmU1NDY5YmFiMDM0NDViYjI4YTIxMTFkZWY0MTVkMTYyZTQwNDcyZDNlNWFlNjI4YzVjNjMxNzBiYjE5Zjc0MWM3OWE1MzMxYzg4M2MxMmJjYTQyOWY1MThiZjcxYjE0NjgzYTA3MWI2YzZlMWU1NWQ4YzdhMGYzOTQyYmMxMmExMDM1NTZjNDljYTE3M2U0OThiM2I0YTE1MDI3MTQ1Y2RhZWIxOTViYzhhN2UxYWE4MmViZGY2ZWNkNTE2NDgxYTRkMjFmNDAwZDBkNzFiNTg5NDU0NTg4OGZlZThiZWVkODBkMzI1MTY0Nzk0N2Y1YWJjNDczNWI0N2ZkMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiZTI0MmU1YjNiNDlkODcyODlmZTAyODQwZGM3NDJhMmE2Y2Q5NDkwZmUyY2NlNTgxODMzZGRkYjFlZGMwZDEwM2Y5ODdmNWRlNWM2OGNkMzQ1YzgxYjAzMmVhNTVmMzZkIjoiIjoiIjoiIjoiM2E4NTgzNDVkZmFmMDBkZWZkZjZjODMxMTRiNzYwZWY1M2IxMzFmYmYxNGJjYzQwNTJjZDk0ODgyMGVlZTc4YTExY2JiZDhmNGJhYTMwOGUxZDE4N2ZjZWQ3NGNiZjAxOWMxMDgwZDllZmZmZDkzZmRhMDdkZjA1MTQzMzg3NmQ5OTAwYzFmOWFkMzZlYTFjYjA0OTg5YmIwYzU1ZmQ2ZDAxZTQ2OTIzZjNiYzg4ODdhYzAwZWJkNDcxMDIxMjExNDE2NTM1NTM2MWUyNDBiMDQyMzJkZjU1YTgxYWRkM2ZiMzYzZjBkNGM5YzVlM2QzMTNiYzdjYWFjN2Q0OWRjYTg1MTdjZWRhY2Y1NzFmZGU5Njg2YWU5M2Q5MDFmYjliMTcwOTdhNjM4YmI5ODk5Y2ZhYjBlYmM5ZDFmOGE0M2MyZWVkN2M5ZjMyNmE3MTFkMGY1YjljZmM1MTY2YzliNTYxODI0Y2JkNzc3NWVjNjAxY2E3MTJiM2RkYWFhMDViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI0MmNjMTczNjVmNWVhNWZkMjJiZGM0YWRlNzE1ZTI5MzA2NGQ2Nzk0ZDgyYmVkNWI3N2M0YzEwN2E3M2RlMWY3NmQ3NTllNGIxOTFiYTAxZTBlZDVkZWE3ODhhYjAxOGQiOiIiOiIiOiIiOiJkZTA2ZGVlOGM4ZmU0NTNhYTAzYWMyNTQ2YzM5ZjVjZGExMjQxMjg2NGQ1MmVkNWNiZDBkNDkwNWRkMjI2NzQ2ZDUwZDFhZjlmZDNlMWQ5MGRlMGYxNjI5NWNiN2Y2ZjRkMzI3MWVmMDA1NjQ3MDlkZjRiMDVlYjlmOGFkYzBmOGU4NTIyYjA1YjlmMzJjMzdkODUyNjgxMzg5OGI5ZjcxZGI1N2ZjODMyOGUzYjc5MTQ0NDgyZThhYTU1YzgzOTM0ZDZlMDk3ZTQzZWM2ZDBiYzMyZWRhZjhjMGU2Y2E0NDliMmU4Mzg4YjMyYjI4NmUyZDRmODUyNjZiMDYwNWZiOTlkMWE2NDc1NjVjOTVmZjc4NTdiY2FiNzM2NjJiNzIxODcxOTE4OWQ3OTI1MTRlZGNhMmIxZDBjZGNkOWI2MzQ3ZTEzMmVmNGMzMjNkYTI0YWQ1YWZkNWVkNmY5NmQyN2IwZjg3OTI4OGU5NjJmYTBiYWNhM2Q1YjcyYjVjNzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImQ1NzAyNGEyMzBiODI1YjI0MWMyMDZmN2I1NWUyMTE0NDYxZWNjOWI3NTM1M2YxMmFjMWQ5YWQ3ZTc4NzE0ODFmZTQwMWMzMjBmNzRhZmRiMDdmNTY2ZWE1MDBiMDYyOCI6IiI6IiI6IiI6ImU4OTMwYmQ1NWEwYTVhNmQ4M2E5YjNiMmNkZTcwODVjMmFlNDY3ZWE0YTJlNjVjYTMwMzY5N2Q0OTJjYTg3OGJjYjgwMTc2OWViMWI3ZWM1NjQ1ODZlYzhiMzZkMzUwZTE5MmM0ZmJmMDNhOThiZTBkZGVjZjU2ZDQ2NTkxNGJhMzUzZWQ3NzM0ZDE5YTY4MGZjNDU5M2Q5MjM0YzRhYzhjMjNiN2RmYTFlMjZiMDEzZjU5MGNjYTQzYjlmZWYxMjYxMjFiNDg0MjQ5NmIxMWRlYTNlZjVlOTgxY2IzNTczNDFmMDNmOTJhNTQ2YTYyNjA5MjM2ZGVkNmY3ZDgxNDQ1NmFjYzA1OTZkNTU1Y2JkYzAyY2JkNDdkYWUyY2FhMTg5NzgzMWVhNDY0MjI1OTIyYzY2MDBhOGJiOTJlNzExNjUzMDY3ZjgzYjIxZTFkZjA1NDMwOTg1ODk0OGMxMWExMzk5NzM2ZmM4MzkxYzViMGZjMzU2MjlhYmZhNTY1MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMDU5ZGVkNzkxMjViMmQ1NmQ5ZDUyYmNjOTUwYmY2MDhkMWEyMzczNTE1ZGFmY2M4MWVmYjY1ODgwMDVhNTcyMmQ4ZjVmNDE4MWY5ZjJhMzE2YzkzZmRmYmFkZjUwZTc1IjoiIjoiIjoiIjoiZGI2NWQyMDAwNjMyYzNkNzAwOWMyMjdlOTljMjEwZTU4OTdmNGQ3ZWRhZTYwOGEyNDJiNWE0ZjE3NzA4NjEzZjhjMTlhNGRkNjVkNmJjM2NhNTc3MzdjOWJmZGNjYTA2ODI4OGVlYTQ5NDQwYWY3NjhkMWZjOTc3YzMyYjA2NWJiNzFhYTNkOGM0ZDc3YzllOGU4YTYxNjZmMzMyYTI0Nzk3OGE2YzQxZWQyNTNhMWI2OGFkOTM0YTM0MTZiNDAzNDRhNjgxZGUyODYzOGYwMGIwYTBmZmI3NTUxNGMzZjYyMjUzMzcyZjgwOTkwNjA0M2RlMzVlNDgwNWI4ZTk2MmU1ZWI5NTdmMDQyMTI4MzVmODAyYjJjMGIzZTc2YzdjZjIzOWM4OWFkZjMxOTA5Y2Q2MjI0ZDU0MmQ5MjlmOWIyMGExMGFiOTlhN2M2MzFlNGU2MTg4ZmUyYmE4ZjU1MmM5Yzg4ZmRhZGI1Mjg2NzlmZTk1MDQzMTY0MWI4ZjM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI0NjMwNDA2YjQ3NWIxMjYzYjYwNzhlOTNlNWQ0MjgyMjA1OTU4ZDk0ZWI5N2QxZTY2YjQyOWZiNjllYzlmY2NkMGRkOTk4MmMzMzhkZjkzNWU5MjljNDJmYWI2NmFkYWYiOiIiOiIiOiIiOiI1ZDgwZWMwNzJmNTUwOTgxYmNhYWM2Nzg3YzA0ODhjYzQ3MDQwNjI0OWVjODBmNGJmMTEwNTA2MzAyMjdmOGI1YWM2YjNiMzY5ZGIyMzdkN2MyNGEwOTgwZGZmZThkM2FiZDliNjRmZDRlZmE0OTIzNDliZDRlYjY5MDJlZGI5NDU1MzU0NjExMDIyN2Q3ZGU1YTg2NGRkYWU4YjlmZWQ4ZGU5ZjBkZjljNTk2ZTM5ZGU5MDNmZGEzMjNlZTZmNzg4ODMxNDUyZWI5ZTQ5YzVlZWYzZTA1OGI1YmY4NGY2MWY3MzVhOTNlMDQyYmI5ZTQ1OGRmNmIyNWY0MmE2ZWI4ZmIwM2Q0MzdjZmFiNzU3ZmFiNDk5MGM3MjFhNzU3ZWFhNWU5MDQ4MjA4YWJiY2NlNmU1MmYxNzdiMjBkY2Y1MmYxZmE1NTFhOTJiNjhiY2RiMDE2ODA4NTViOGY3OTEzMTI2NjM3OGNkMWYwYzJhNDE0MWM5Njc1ZjAxZDFlNDgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjZlYTljNmY3ODRmMTJhOTcwN2NlYWM4YTcxNjJlZTUzODFkYzg5M2VlMTM5ZjhmNGI0ZDkzZGIyNjY4MjlkYjRhZTkyYmM1MmZmODYwZDhlY2RjOWZjMTZiZDA3MDEzMCI6IiI6IiI6IiI6IjIzNDM2NmYxNTkxY2ZlMjQ0OTU2Zjk0OTZjZGY0NDZlMGQzOTBiYTY0YmVhYTA2Njk0NWIxYjRjNTMzN2RkZWQyNjE5ZGQyYmQwMTMzYTVkNjEyYmFiN2MyNTFhYjc5ZTM5NTFjYjEzNDg5NGM0MjI1NTNmYzhjYzdiM2NjYjI5YzIwYWRiZjUyZGRhMzVhZjc3OTE0MmQ3ZWZjNzM1MzQyZGIyZWUwNjc2NDlmZGEyNWYzZThhNzRmOGU0ZjY2MjBjZjVhMTdjYjk0MzYwMjYwOWNhZmI4NWJkZjQ4Mjg3M2VmYTRjNzQ5MjhjYzBkNjk0NDRiNzJhYTZiYzcyNjk0YTNhMjFjNmE3MjFhYTRlMGZjY2FiMGE5OGFlZjM3NWEzN2EzZThhMTVkY2NhZDEzYjZkNzBiMzQ4MzU4MTAwNDY0MmQ4Nzk4MDRhYTAwY2JhMjA3YjUxYWZmY2E0MzQ5MGJiOThmNjc5NTMyNjU1NzQzNjZlYzM4MjllNjdhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNWMxMzA1NmJlOTJhN2Y3MTIzNmZjZmVmNDYwMjk4YWNjODU5NWRkNDc0MzEwNzI3ZjVjY2I5YTdhY2IyMjU0YWM3MjI2Zjg2MzQ5ZTIwZTJhY2E3MzcwNjhhYjBmMmNlIjoiIjoiIjoiIjoiMTZkNDE1ZWRkZWZhNGRjMjk1YTY0YWRjYmJjYjhjNmZlOGM4ZjEyM2M2YjA5ZGMwOGE1NmQ3MjNjZmY1OTc4Y2MxMjBmZDBhNjhhMmY0YzIwMmMyMjBkYjM3MmQzMTI4ZWY1MjM4NWQ1Nzg2YzEyZGZjNmU2MGVjZmMzNDYxYTA5ZmE4MDQ1M2UyYjFiNjM2NWVhZWI0ZGY2MDJkMTkyYWFjYjI1YWI2YjRhNTk2ODlkNGJmOGQxYzRjNDJhMzI3NzlmNjJiMDZiYWNhNjQ2MWYxNTRjZjQwOTAxZjU3ODdjMWFhMmJmNjdjYmZlNzU0NmVmNWIyYmRmZjIwNzkwZDhjNzJkMDc3ZDQ4YzU5YzkyZDFhZjkwYTkwY2NmY2RmNjQzZGQ5ZDZjZWUwYjFmYWY1ZjJmMzVjZmQwMWQyMDc3Y2VkNWUyZDAxM2VjMWUwOTMzNmRmYWI5ZDllNTFiYTlhM2EyODM3MzA2MjEzYmNhMmQ3OWFiZjhkYzMyODJjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMzhmMDhhMDk5ZmMyZDQwNWMzMmQxZTBmODY3ZTU0NTBkNWVlMGQ1Mzc4M2MzMWRlOWRkZWFlNDZkOTYyOTk5ZGEwMWYxM2E0MzMyMGM3MTU2MTJjZWRiOTIwY2YxMmViIjoiIjoiIjoiIjoiMDc5Y2U3YTViNTQwY2FlOTZjMjg4M2U5NWFjZGUzMDM5MDQ4YTZjNDVhMmQyNTljYzY0ODYzOWU3MjA1MzkyZDkxZmEzZWUwODBlNjE1ZjFlMDc0MWEwZTUzNmM5ZTA1ODQ0NjUxYjkzNDYxYmZjNTQ3ZmI0NTJmZWM2MWY4NTNlMWJkNmUwOGVhYmQwY2YxYzVmODRmODVlY2E5ZDQyYjUzZDFlNWJhZTUxYmU1ZmQzNTE4OWU0ZjFjMDJiODQzYzYzNjFmY2NmNGNhNjY0OGJmMzBhMjNjY2I4ZWJjMTZmY2YxNTg3NDZlYjM5Y2Q5NmYxOWQ0NjcwN2MwMDFlMTFjNGUwZThjY2JjODlmZWM2NmM2OWZjOTI4NDNiNmJiMmVlMWNjNzU5NWI2NWJhODljY2FjY2Q2MTMwYTg0MTdmYWY3MDVlOGUyMDNlOTBlZTY0YWU5NzBjNDA5Mzg5YjVjZDBjYTgwYTRlNDBiNjQyNjg5NzQxNjkxYjIwNjIxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMDg2M2M4NjhjMzI0NDJhMWE2NDA5NWE3MWFiNmFlMmY5ZTYxYzExOWI1OGRmYTRmMzRlZmQyNjU5M2JiYmY2OGJjNDA3OTA0YzQzMzAwNDUyZGQ0ZTYxZGY0N2ZhOThmIjoiIjoiIjoiIjoiNTg1MzM0ODI4Y2Y1MzE4MjhmYzcxMjdmZWUwYzkyNmY4NWI4ZTcxZTg1MjJlYTkyMTI5NmRjNjJiODNhMDlhMDAzOTdjZDQ1ZTA2NjRkMGYyNmZhMjRlZGQzZTNkOGVjZWY4ZmRkNzdhYjIyNDMxZDQwNjZmMGVmYWYzODgyYzk3ZjE3OWE3MDYwZWZlOWU4Y2JhNWQ4MTQ1YmViZDUwMmMwZTA5ZWU3OTEyMzFkNTM5OTgzYzA4ODYwZDc3ODNlZGI1ODQ0MGQxOTNlZDgyYmM3N2MyNzcyMzM4MWEwZGE0NWJiMWZjMmE2MDlmOGI3M2I5MDQ0NmUzOTg2OWE1YWY1MDM4YWZmNjAzYjQ0ZGI5NzcxMTEzOTI3YTUyOTdmZGMzNDUwZWFhMjI4ZTMxM2FmZTQzYzMxYjBhOTViNDc2YzVjYTMxMmI0ZjU4OWY4MDk3NDk0ODE3MjJjZWE5OTkwYzAyYjY0Nzk3NmFhNmM2ZjAyY2UxZTVlNmVhNmRmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiYTQxYWQyMjNlNDFlMmJiOWMxMzFlYzk0NWNhMzEwNjAwYWIwMGM1MWY2ZTRmY2RkZDgwM2JkOWFiOWJlOGFmNTQ4MzM3MzgzODg5NGQzMjc0NWE4MWJhOWQ2OTY3NzUxIjoiIjoiIjoiIjoiOTVjYTMxYTdlZWViZGQyMzQ4Y2YxZDQzNDExZDJjMzVmYWZmZGJjYWVkNDA1MmQ1MGNmOTJmMGU5ZDJlNzU3Njg2YjcyZDYzMWE1NmNhOThiNjgyMTVlNzAxNGNmZWQ5NDNhYmMxZTEzNDQxYzFkNjYwZjEzYWRmMjE4OGQwOTc1MTU0ZTFiNDJhNTkyYTYyYTQzYjU3ZjgyY2MyMWE0Mjg4NzNhOTJmZGE4M2FiZTQyMGVmYjUyMzMxNDBlNGQ2Yzc4NTJjZjgxZTg1OTYxZmE1YzYwNmM1ZjMzZTA2MDc3ZjQxNGIwZjgxNGNiYmU1MGNjNjA2YmZmYmQ0NzQzNjRlNjA4ODI1ZmRhYWY1ZTc0ZDg2Mjc5NTUzOWJlODY5N2UyY2UwNWQ3MTQ0Njg4MWUzZjY1YmI1NGVkOTVlOTQxNTg2OTg4ZjZlMGMzNGUxYmVlZjQyNjY5NmU5ZGJkOWEyMTQwMTNkODI2YThjOTlhMmE2ODZkODQwMmM1ODNmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNjJhMjZjMTMyN2MwZWJmOGI0MDY5MWZiNGM4ZjgxMmU4MWY1NDc0YjBjN2RiNzBhYTk0MjQxMTBmZWUzYTA1ZTQxYzBjZjJlODcyMTBlMzRkMGM2YmZmYzI2OWJmMmJhIjoiIjoiIjoiIjoiNmUyMGEwMGRmMWFmMzdlNmNjNTVlNTgwYmEyMTMzNTExMWViMzc1Mzk1MzQzNjE4ZGY3ZDYzMGI5ZGMyMzQ0OTZlMzk2NGNkNDVjNWRlMzRiZGE0NmEyODk2NGY2MTQ4NzA0YzMwOTI1ZmVlYWVjYWUwNTc0MDM4NDM0Y2QzM2MxZGQ5NDMyMDdhOGRiZGNkNzJkYzllY2I3NmEyNTcyOGIzYzJhOGFjMTNjMWRlM2ExMjZkN2Q0M2E0NmUxMmUwZDBjYTg5OTE0NjllNTgyYjc4ZWY2YWE2OTFiNWEwZTNlODVjYmE3ZDdhZWEzYzFlOGUwMzE2NzRlODVmNWFmMzY1NDZlYjJhMGEyOGQ0ZmZiYWEzMTZhOWE2Yzk0NGZjZTI5MWNjMGMyMzVlODQ5OTg4MmViNjJiMjJiNTQ4YWUwN2NmOTQzMDMyOWUwMDlmNDQ0M2NiOTRmN2ExNGU4NjYxMTY2YjBkNjgxZGNlYzg2NzIwNWFiZWQ0ODE0NWU5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiZmQ1NGNmNzdlZDM1MDIyYTNmZDBkZWM4OGU1OGEyMDdjOGMwNjkyNTAwNjY0ODEzODhmMTI4NDFkMzhhZDk4NTkxZjljMDJhMWQyMDVjZGJjZGY0ZDkzMDU0ZmRlNWY1IjoiIjoiIjoiIjoiZjZkNWJmNTk0ZjQ0YTFjN2M5OTU0YWU0OThmZTk5M2Y2N2Y0ZTY3ZWY0ZTM0OTUwOTcxOWI3ZmQ1OTczMTFmMmMxMjM4ODkyMDNkOTBmMTQ3YTI0MmNmYTg2M2M2OTFkYzc0Y2ZlNzAyN2RlMjU4NjBjNjdkOGVjZDA2YmNkMjJkZmVjMzRmNmI2YzgzOGU1YWFiMzRkODk2MjQzNzhmYjU1OThiOWYzMGFkZDJlMTBiZGM0MzlkY2IxNTM1ODc4Y2VjOTBhN2NmNzI1MTY3NWNjZmI5ZWUzNzkzMmIxYTA3Y2Q5YjUyM2MwN2VmZjQ1YTVlMTRkODg4YmU4MzBjNWFiMDZkY2Q1MDMyMjc4YmY5NjI3ZmYyMGRiZWMzMjJlODQwMzhiYWMzYjQ2MjI5NDI1ZTk1NDI4M2M0ZTA2MTM4M2ZmZTliMDU1OGM1OWIxZWNlMmExNjdhNGVlMjdkZDU5YWZlZWIxNmIzOGZiZGIzYzQxNWYzNGIxYzgzYTc1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjVlOTE5ZDM1MzM1NzY3MTU2NmQyYzZhYjZlMWFjZDQ2ZjQ3ZDBjODc4ZmUzNjExNGQ3ZmVhOWZlY2I4OGEzYTI3ZWZjYTllM2QxZTFiMDlkN2YxNjgzMmYzYWY3NTE0MSI6IiI6IjQ0MmYxN2NiM2NiMTQ4MmExOTcyOWJmZDU4ZjQ2ZjZlZjE2Mjg1NTU0ODkyYzAxYjA3MTg5NjhkNmUwMTEwODIiOiJmOTU1N2M5M2ViODQxYmZkN2I1ZDRiNzFkYTkyOGVmY2JlM2Y1NWUxODcwNDkzZWY5MGQxNmViMjM4MzgwZDY1IjoiMzY5MDIxMzRmMTk4OWNmZTdlYjUxOGE1NmMwNmFhZGE5ODk5N2Q5YmFjZDA0YWVlMjFmODc5YTU3YjUxNWNhM2I1ZTBjMmQ1ZmVkMDVjYTFhOGIwNTRlOGM0NmIzODlkOWQ5MTg2ZmViMGFiZThlMmU2MGIzYTI2NzI4MWNjNWI0YjczNDExMTZjZWQzNWEwZTA3YmMyYjAzMzBiYmZkOGIwN2YwNzI0OGZhNmQ4ZmM1YzlkZjEzNDQ1MzI0MTYyYmRmYTIyYTkxYmE3MTQ1M2FiMTIzYzkyZjkxYzcwYjhiZDU0MGIzYjE4MGIxMWFiNDVhZTJjNTllNTdjN2M0M2RhYjc1NzY1OTQ5NTlhOTZlYjUwMmQxODIyNjdjODY1NzZiMTg0NmNjZWUxYTY5NGNhYmRmYjQyZTBjODIxNDE5MmVmYjUwMjkyNmZhM2MyN2VlZDAyMGI3Y2M4ODY2YTVhZjlkODM4YTU3ZTc4YmY3YWNkMjMwZTFmNGQ4MzYxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjdhNWQxZWZjOWI3MDQzMDYwY2FiZDY3ZGU3ZmUyMjc0MGJjZDZhOGNlYjM1NWQ2OWYxMTg4MjlhMmIzYzkyMDA2YTU2MzNlNjEzZjg3NjljMTExNGIxODIyZmZiNTQwOCI6IiI6ImYyYWQ5NjJkOTkyNDM0NDY4NjgxYzY0NDU4NzYzOTkwMWZmNzRlMmJiZGQ4NzYxOTYxZWMzNGVkYzRhMGMzNmQiOiI3NWFhZTBkMWJjYTk0ODRjODlmYzRkZTNkMWIzNDI3NWVmMDY1Njc3NWYzZjhjOTZmMmJiYzUwNDAxYWFhNzE4IjoiNWNhMjFhZjRiMzk5ZGIzOGY4Yjc0YTQwNmFhY2U2OWY5OTQ2OTFmMjc2NWJiOWM0N2IyNDAwMDAxNTI3MzllMDU5YjE2M2NkMDA3ZGU1ZjI4YmJhMTdlNDg1ZmNmOWZmNmY0MWY3NmU5Mzk5ODUxMGUzMDIyODJjYmRiZGUwOWZlOGIxYTk2MTg3ZTU3YzlhM2RmOTRlMmU3NDhmMjAwMjY0NzZjYTY4MmRmYTg5MGI0NzhmN2EyMWY0OTI3Zjc0Zjk5YWVkZDlhZTc4MmJhMTBmY2RhMWRjMzRjMzFiNGY3ODQ3MjJlMDFjYzQ2Nzk3MzcyNzZmNTZkZjIzYzViZDhjNjk4NTc5N2I4M2MwY2NkZTJiNGM3YTY1YzY1Mjc0NWRlN2ZjOGEyMzVhZDdlZDBmNDU2ZjFlNzU2OGIyZGFkNDc1ZjBiYzQ2ZjAyYTdmMzVjMDVjZmVmOWQwZTJjNzczZmY4OTVlMjkxYTJjZmMyNDI0YjEwNjA5NmQ4ODY0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjYxMTU4NmVlNDBjYjNjYTRhOTIzOGNlMTEyYTIzNzQ0OWJiYTU0MjJhYzliMThlYTUzNDgwODc1MzM0ZDhmYTAyNmRhOWQ5NmM0ZTg3Zjk0YjJmOWE3YzI2MWJlM2VkYiI6IiI6IjJmODM1YzMzNmEzYWEwMDE5YjBiZjk0MGMyNDY0M2JjOGZjYTU4YzljZmE2NTA5YWE5MjQxZGU5ZTBlMWEwNDYiOiIxOTExYTU5YzVmMjU2ODg2MGFlNzFlODAzNjg4ODg5ZGM0NGQxNGZmYjBkOTNlMzI0YzM5ZjMyZDk1YzFjM2VhIjoiMjdiZjQyZjUwNDc2ZDhhMmNjMjNmNDU1ZTllZjQ3N2NiOGU5YzkwZjJlOTdjOGE0ODMwOTNlYmY1NWIyYWVlMDJlMDM1NmNmZjkxOWUyZWM5ODExYjQyYzczNDk4YTZjMmI5NmFhNWI3NjFlZjdlNzE1Y2JmNjZhZDJlM2ZmOGE2YzkyNDE5ZGJmMmU2NTNjZTcwYTg3YjUxZTI2ZDlmNjA3ZWIyNWI0NWI5MWY5NDdkMDAyNmEzODk3NzE0M2M4YmJkOTQwNzZlNjYzYjljZWUzNTUwNWI0OGU0NTNlN2NjYTgzZTU0MDk3NWFlOGE1M2YyNjM5MGFhNjNhYWYxZTI2Njk0MTBjYzgzNDI3ZWVhMDk0Mjg3NzZhMmQ1MjBlZWJkMTcwNjAyYzUyZGQ0OTFjOTgwNDIwMThhMDM3MmEwYjM5Y2I1NjVjYmU1ZTQ3NGY5MjdmOTE1MTVhNmE3NDQ0ZmRiZTFkODlkOGFlMmMyNDgyYTBkZWI4ZmYyMzZkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6Ijg1YjFlNWRhNTk5ZWZkNGEyMGZmY2VmZDQ3MzdmYTNlYTFkMmIxNGJlMzM4NjFjMmE0YWMzYWMyYTQ5ZDM5NDdiMTRjZjE4ZjRmZjQyNmNiNjM0NWYxYTc2NTNlOTYzMCI6IiI6ImNmNWJiZjk4ZDg1NzcwNzdiMGI4NDQ3NWRlZTBmMGU5YWE5NWVlZGQxZDkxNjUwN2I1MjMzYjY4OGJjYzg1NmMiOiJiMzMzZWMxMTFlMWU3ZDc4YzlhYzkxNmU0MjA3MDQ4MzI1MzlkMmRiNDZhY2EzYmRjNDczMmU4Y2U3MmI1ZTgwIjoiNDc3M2QzMmE5ZmJhMzdhY2M2OTAwZjNhYzcwZjY5NzhmZjFlNDAwMzlkNmUzMjg2YzI2NGZiN2ZjNTlmMWJmZTAxODhjNzk3OTM4MGM4OTIyYmRkMGUzNjNjOGUwOWE0OWZhZWY1OWVhODVhOWYwZTQwMGI5NGM3NGE4YTUwNjg3ZTRlNTFlMjUyNjZlYWJiODYyNzZmMjI2MjhkMGQyZTE5YzU2OTZjZDIyMWE5YjgwZjk0MDQ1ZDAwMWNhNGMyMGRjOTE2Y2EwZmYyMmM5M2E0MWZjODIyOTEyZGQ3ZTI0NzkyN2ZkNDU5ODJlOTRkM2QxZmRlNzdjYmU3OGJlZWNiYTgzMGI3NTMwNzkzMjZhZTMzMjc0ZjEzZmI3Y2Q4NzVlODVmYjVlOWU3MDNlNjFjYmQ0MWJjNGFkNDdkN2I0ZDE0YWZjODczYTM5ZGQ4MTBhZDhlZWQ5NWFkZmY4ZGNlM2FkYjc2NTliN2MxZDRlM2Y2MjQwMzc2Nzk0MGI0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjUwZjk4NmY2ZWZiNDEzZmJhM2U4ZTBiZWI4NGQ0OTQ4YzJkYjA2NjFhYjhlMDY0ZDlmZWU4YjNjMmYwYTkxMGZjMzVkMzc1MTJmODhiZGZjZmRlNzk3YTIxYTAwNmUwMSI6IiI6IjM3YzdiMDgyMjJiYTYzZjIxMzZiYjI4ZjVlYzA5YjlhODk5YjU2MzcxNjE1YmU0MWJlZjQ5YTBiNjQwNTkwZTQiOiI0YTFlMzRhNWQ2MGNhMDhlM2U2YzBmMWI4NjU0N2JhMmQxMmZhMjkzMjc1ZTdkNzVmODNhMGI4NDZkYWE0OGRmIjoiZTI3NzM4YzZmYWU2NjEyNWZjYWY0ZTcyNWEwODgxZDVhNDUwZmI1YjAyYTU1MDU3ZDZjYjdiYWJkOTFkNTAyYzRmNGE4NDMxYTgzMzUyZjQ3ZWE4ZTVmZDdlODE1ZjUwODBkMTQ0MzE4YTFkY2JjNzU1ZTBiOTM1Nzg1Y2Q1Mzk3OTU1ZGEyMmUzZmY2MzNiMzRhNjRhYzcyYjJlNmI3YzUxZTc4ZmY1NTM3MzFlNmU4ZGE5MTFkMTQ3YTZlMDViMzZiNzQ4OThjYWM2ZDMxNzFiYzg2NTBlNDQ1ZmZkMTllZGUyYWE4MjE4YmUxNzY3MTMyMWMxODY0NjVkODUyZGQ4MGQ3MzI5MDU0NmI4OGVmN2E5NzhiNDFjNGM1NDllOWM3ZmM2ZWY4NmU0NzA4NDc3OGZiNWFlZDVkNDFlNzk0ZWUwZTcwMGI3N2MwMzE0YTMwN2IxMGRmNjlkYWJhNjA1ZjNmZGJlMmRlYzcwOGJhMGIyMGQ2YjY1MGJlZmJkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjY0MWRiY2JmOTliNjE0MzdjMmJmNjVhMTNkYzNlMDMyNGViOTQwMzM1ZGExMjM4NzBkOTQyOTYzNmRmYzgyOTc5ZDBjYzkxM2M3M2U4YTYzMjFmYzNlYjllOTczYzBhYSI6IiI6IjcyNTgwYzExYTg3Y2U2YjQyMDc5MDhhYWY1YmNhYWExYmQyMTdmY2UzZThiYzA3MjY1NjhjNjQ2MzliNzA3NjciOiJjZjlmNDUyN2UwNzRiNzJiZTczNTU1OGRjYWExZmM4MmYyNmFlMjg2YmY5NDRiNDk2NDlmNzY5YmY2ZmFmNDlmIjoiMzQ1Mzk1NzIzZDA0OGMyMjcwYzBlYWM5OTA0OTg2ODliY2I4NjJhNDk5NmU4Mjk5NWI0ZTcxNjllNjcxZWIwM2JiMjI0MmM0NjY5Yzg3NGMxYWVhZmZlYzU4YWE2NTNjN2Q3NDMxYWJkMTY1MGYwY2JjZThjZjVkYjgzMTY2OTNmM2VkNTAxZmQ5YjQ4YzFhNDRiMzRmNzg3OGFhMzg2ZDY1YWZjMzFmOTRmOTA4YTMyMmIwM2QwNmMyYTEwNzRhMDNiZDJiNTc5Y2FmYjBmN2NlZTZkNjkzNDU4OGFlMWNlOWU0ZWQzN2IwMzczN2M1NTNjYTE5YWY0YjQ2YjVlNDM3NjdjZWUyZTQ1OWFiOTE0MDdkZjZjZmQxM2E2ZjE4NmFiZGIxNDhiODVhNWY0OWJmOTJhYzY2NzRmYjA1NWM3ZmUxMjNlOTM1NWEwZDMzZGUyODFjMDNhNTZmOTE4OTFkZDQ5NmRhYmZkNmVhYTZmZmY2YzljZmI0ZTY3YzQ0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImI5YzMwNWFkYTk0M2E2NGEyYjAwNDk0ZTg2OWY5YTY0MDE3M2ViMWMyNTE4ZGQ5YmU5M2FiYzNjOTNjN2U2YjViZDA2MjdhMTk5ZDE1Zjc3YjE4ODgyNGRmMDBkNTk5NyI6IiI6ImZmYzY3NjBmOWFmMDJkMzU2NjYyNzVjMDc0ZWRhMDNmNTNkYmNiNTY5MDU4MGJiMjU3NjhhNjU2NmIzMjhkZmIiOiJmMjZmNDM2YTgyMGVmNzE1OTdiNzUxMzRiOGQ5ZGNhNmU5YTZhZmQ5YjQyOTIyMmE0YzljODc4ZjNiOTI3MTZlIjoiZTU0MTNhMjM0ODU5NTExY2Q4MzczMTJiYjMxYWFjNGQzMTk2MmM1ZjdmMjdhZWM0NzQxN2YzNjdjYTk5Yjg0MDBhNDI4N2U2MDQxMmZjMzU2Y2I0MGQ5NmRkZjVjYjgwMTI4NWViY2E0MmIyZjZmZTRhNzExNDUxYzE1NzQxNzRjNThkY2NiMmNkMzM0MmI3MDkyYTE5NmFjN2QyODgxYTA4ZTdmNWRlOTM5Y2NjOGY0ZWVkYzhmODY3YzgxYWE4ODY1NWQ5NmFlNTBmNjE4Mjc5ZDUwMDliYTJhYzRiMWRmNGU2MzAzMGNjMGVjMzU0MWI2YTk0YmQ5YTJhZTVkMWZjZjRkODQ3MTE0YTc4M2M5OTdhN2M2YjlkNTQ5MDEwYmY3YjY0OWFiZWY2OTJjZGVhM2FhOGFkYTE0NTc0ZTBmNzhiN2ZjYmUxN2I1ODdhYzE0OTgwZTQwMjY0ZDZkZTAzMGU0Mjk1ODY1OTNkNWNlM2FlNTcxZjk1NDU0ZGNmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6Ijk4NzVkYmY1OWI3NjBlYWI5OTk4YmYzMzQxODQ3OTEwNTI2ZDEwMDcxZGMxNzlmOTYwODFkZDc5M2E2MDAxOTM2ODgxZTdmMzkwNzVjZDM4MjI5M2ExYWFhOGM4NDVkMiI6IiI6IjExOTY1ODNhOTlhZmUxZDM3N2IzNDQ1ODVjODI1MmEwNjkwNzA0YjhmN2EyYjc1ODIzODdlYzkxYTYwZmQ3ZTQiOiIyMDE0N2E4OGUwZjlmMWU4Y2FhOGNiMTQ0ODhjOWI1YzM4ZTU1MjBhMzZhZTkxM2I0NzAzZDE1YWYyNzIxOGRkIjoiYzgwOGY2ZjI5NjY4M2QyNjIwODM1OWE3NjZmZTYxYmM3MGVlOGI2ZWQ5ZmZiOTRjZTI2OTU3OGZiNTU2OGZlMjM1OGQ2MDM2MzgzMjRiNjNiMjliYjM2YWU3MWE1NDJlMzhlZTY5YTJiOTNhZDdlNGE4ODdhMjdhMjg1MmNkY2Q1NDFhNWZhNmQwYzhiMDg3YWExMTg1YmQ1Nzg4MjU2ZTdkOTVjMmFhMmQ1YzExNDA3YjdiZjc2MmY0MTZiMDFkOGU3NDdjNDUyOThmODc1MjAwYTJlNjc2NzlkNmQ1ZmY3YTdjMGU1MGEwMTA2OTBiMTkyMGRmMWJhZjBhZmNmYWVlN2FiMDg2MjAwNGUyM2I1YWExZmY0N2I4MjczZDUwM2JkNzRhNTRlN2IzOWFjN2U2ZDZmYjBhNTk0ZDMwNTMxY2FiOGE2N2IyMjc4MzQ3MGE2NWYyNGZhYmExYzIzMWIzYmE0NWVmYWU5ZjBiZTA0ZTIzMzg1MjljZmVjMDA4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImFjOTJhNmM3OTFhYmEwNDA2ZDZlYTgyNTVjM2MwOTAxZWI3MTFhNDI0NTAxYzJjMmM4NDcwNzZkNzhiZGNmYzMyNjZiN2MzYmM1NzhjNzUwMWRhYWM2ZGRhODM2NmQ0ZiI6IiI6IjEzMzc5YTc3ZDg0YTBjNGNlYzk1ZTYyYWM0YzhhOThjZWVkZTBkODliOGJkMzE3MzUyYTk1MzAwOTYzNDE1ZWQiOiIwNGQ0N2VjODlhM2UxYjdmMjI1ODAxNjczMzEyMjVhMDBmZjI1OGRhNzI0NDYyNDFhNmMwOWM1MTdlZTRkNDhjIjoiYzJlNjUyODU4NGM2ZGJlYzQzNmZmZWM0MDc1ZmQzYWViZTk1M2ZkYzBiNDZiNGIyMjVhM2MyODg2ZTYwZDIxODc5ZTZjY2NlMzc0NmQ4ODFmNmQ4MGUzMzg3NmFmYWQ0MzlhYjlmNjhmY2M0NTg0OTJkZTEyODExZmJkNTdhYzQ5ZDg2ODc1NGRhMTkyNzliNGMwYTM4OTc5MjAxYTU4ODg4NGRlZjU2NzczOTJkZWM5N2NhZmM5NGJjY2Y4OTE0ZDlmNzg1NzU3MTFiYjZmMmFkZjQxMTZkYjkxYzhiNTRlMzZlOWFjMmY1ZTAxY2FlYmQzMDBhY2Q3YmQ0NWVhZGE2OWQyMGYxYjQxMzkwMTNhOGE2MTQwNjkzMTVhMWM5OTEzN2E2ZjIzZTM4ZjkxYzIxMGUwYzE1NmM2ZmI0OTgwNTZlODIzZGM0MWEwNTM0OGFiNDNjMmY2ZjRjZTE4OGQ0ZTA1YTEzZDM4ZjgwMjU3MzFhYzE2NzA5NDlhMDQwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjYzOTU0YWM3YTBmOTg5YTQ1OGQyYjRhNmI3MDEzZGQ2NjY4MzYyNDU4NGI1NDUwNjBiZDAzYTU3YjkyODIyZWY0MjI3NjRiYmJjMzVmYTVkNDBkMzQxNDVhZmU0NGJlYyI6IiI6IjdiMjVkODc1ZGZiMDMzMzNjYzI3YjlkNDI4NmQwMGE4NWVhNTkyMWY0YjhhNDcxN2I5NTczNDllYjM1MDkwNTMiOiI4YjcwZDI4YzVjODAwODZjMGNiYmQwMTMzN2FkNDUyOTdhZjI3MWQ0YmFmYzc2NGIwZmM1NzA1NzAwY2Q0MTlkIjoiMjk3NzUyZTYxYzRlYmM0ZTFjNjgzOTEzMzVlMmNkYjQ5YjBmMTlkYWZlMzU5ZTQ1MWY4MTU4ZmI3OTU4ZDMyYTk4NDU1YTg1MjAwMmQ4ZjA1MTY5ZjQzODgxNmFlNmZjY2JhMWVhZTRkMWZkZDdhMTE3NmIwNDgzMWQ3Y2U4OTJmNzExZWM4MjUwNjJlYTFjNmIxMjE0NGJiZDNhMGFjYTdmOTI1MjBlYmI4N2FjNjA0NWQyYWMzYTRhNzRmYTU1OTkyNmYwZGFjZWI1OWQ0NGZkYjM5ZjVmYzNiODc3ZjM0MjQxNTMxZTg2M2MxNTMyODZmM2YxYjJiYTJkYjRlMmM4ZTIzNDRiZTQwYzJhN2E4Y2QwMWRhZjE2ODY5NmNlMTlmODNkZGI2NGQ1MGUyMzEzZTc4YzVkZmNmMDc3ZjI1ZTViNGQ2ZjY4NzI3OTExOWNlODU2ZDQxMzFhNjNhZDEzM2NlZGQwMjA4ODE5MzliZjcwZjgyZWFiZmU0NmRiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJkMDk0NGUwYTNmMzYwNGE1ODgyNzFjOGViNjU5MTNhZDliMDdlZTJiMjk2MjBmODEwNmNhNzBlYzEwYWViODk2YmM5YjJiNTE5Yzc3ZmVjNWZjNDE5ZTk1M2NlYjBiZTUiOiIiOiJkNTg1OTNmMjQ4OGYwYTI5MmFiNTUyZGFjMDA2Yzk0YjIwZmY1MDBkZDU3YWYzMmJlODA4OTIxYTVlZTI1MWMxIjoiZWE5ZTU3OWM5ZGNhNjdmMDdmZmQ2N2QyNDgzZWMxZmFjM2QyZWMyMmZlZmZmNzNjN2FjOWYxMjU4ODhkN2E0YiI6ImFlNzM2ZGE2NjMyYTdkOGJkY2M5ZTI3OWNiN2QzZjkxMDFhOGY3ZGRkZWZmMjUzMjc3ZDFkOTliNDVjNzZhMWE1YzE5MzMzNGU5MTJjM2RmZGZmMWJjMzg5YjIwOWMzYjI5MzU5YTRjYTUzNzY1YTFlNDBjYjkwMGM2MDU1ZDhhMjg1Y2Y2M2ViZWM3OWI0NjAxOWVmZTk1ZDUxOTlmMjE1ZjExOTYxZjMzMTlkMjI1YmYzZDYwNzM0ZmJmYmYzNTkzYWIxMDVjZWMyYTE3ZTMwOGFmNDY5YjMyMjBlZjdmMDU1Njc1Mzk2ZDI4OWU2ZjRmODAwOTg4MWM4YTJiNGU5ZGU4OGQ1M2FkMTNlOGJlZDhiMzhiZTZkODk4OGY2MTViNDU5MGZkZTNkOTFjYWY1MGE4NmVhYzNmYmYyOTkyNDc0MzE0NTgwMzk3OGQyNjExMzJiNTk3NWE5ZjEwODQ5OTI1MDMxNGUwOThlNTdjNTZlMmY5MzI3MzA3Y2ZmOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMWVmNTM0NjRiYzdhNDQxMjI3YTI3ZWE3YjVjNTU4ZGJiM2Y1MDlhYWY4ODAyMTNjZGVmN2U4ZjZhMWQyODdjMTczY2Q1YjMxNDhkNDZjNDhjODNjNWNhZDNjY2MxZjUwIjoiIjoiYjA1MmE2Njk5MmZkOGE4Y2IwMmM1OTNlZGZlNDc2NmZjYmNkMzUwNWFmMjlkNjk4ZTFmNGRiMzk4YWNmNzE3ZCI6IjM3MzMzNDQ4MzExYzJjNmVkZWUxOWFhZGI4ZjEwMzZjYjYwY2ZmMmE5NDVjMWEwZWEwODc3MTNiZmYzMWU5MTUiOiI0ZWE3MDU0NjU5Y2FlMWNjMTc4ZWY0MzFhZWJiNjRjMmM4ZGRhM2E5NjVlYTk0MGE4NGMwMGQ5NzkwZTJlM2EzMzUyMTM5NWNjNGQ0OTAzODk5NGFhNGM3ZGNhZjBiNTJiNDQzNzVkOTNiNjI1YWMyMjgxOTkxYTg1YTVhY2ViZjNkZTU1MjM1NWUxN2IzNTI4ZmFmMzlkMzkyZmVkOTgxNDAwZjI4NTQwZjVjYTY0YTRkMmVlYjk1MmM4ODg1NmM4ZjczODhhNDk2MTE4MTA5NDFiNDZiMTAwMGVlNGE4YWFhYWRjZDM5OTQ0YzRhYmNhOTExMGZkNjU4MDA5M2Y5MzAzZjg2YTZlMTI5ZDU2YjVhZWZmNTQyMmMyMjYxYWYzMzUyM2NjNmExNzRlMDc4MmUxM2EwMjZjMDAzYzE3NDMwYjgzNzFiYmZjM2Q1MWMzZTA2ZmJkYzMwNzY5YTI3OGIxMDkyMzhiYmUzODNjZDU1MjMwNTNmZTU4OWI3MmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwwLDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjE0MTQ4ZDY5ZDU4M2Q0YzE3NThjMzA3ZTBlYjBiNzYyNTExMTY1ODIzZmM1NDA5NmY5ZGE1NTEzZTg3ZGY1M2I5NmE3YmU4ZDMxYjhhMzhmMjRhODJkODQ2YjBlMTNlZiI6IiI6ImUwNWY4MWY2NDAyYzUyZGZmNWMyMjFhMmYxOTExNTViYjU2YWJlMTYwY2U3ZGM4YTZiZWRmYTAyOTE5NWE2MTIiOiIyMTQ3NzdlM2ZhZWU3ZDk1M2I1Yzc5NjY3NWUxMDZkNTBjZGMxMjgzNmIzMTE0ZDE0NDQ3YWU5MWNlYTNjMWRiIjoiZWIwNDk3YjMyYWY4YTkxZWQzOTU5YzMxYjA3OWI4Y2M1YzM5ZGIzMTAwOTEzMzMyZmZmYmI2YjFkNWViYmNkYzk3ZDZlNjdjOTM0ZjMzMzYxOTdjOWI3MzBkODA5OTVhN2Q3NDQ1ZTM2Y2YzMDQ3Y2FiMjI4OTVmMjQ0Y2FjODAzZWFiZDAwMWViMWZmNWQ1NjQ1YTgwM2M0MWVhNmRkZTZjOTcyYjQ3ZGUwMzcyY2U5MDE2NjdkMDNlMmUwMmFhMGE1YWVhODA5ZTBiZGM3NDMwNDQwMzY1OTA4NDE4Y2U2MDY2YzI0MTkxYWNlMDVkNmE3OTdlZjliOTQ0MDk5ODljYWNiYjlkOWVjMzFmM2NmMDExMmI3MmUxNDIwYjQ3ZTBjMTg0YThhYWNjMjE0ZDU1YTBkNWUwODY5ZDA5MzAzZTQwMTRkZTA0MzBjMDczODAwMDZlYTc1OTg0ZTZjMzJiMDYwNjdkN2Q3YjkzMWUyYjc0NjY2YjRiNTY5ZjcxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMCwyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIyN2Q0NzAyMGFjYzNhODBhNTUxNDlmYTBlZjQzZjY4NDg0M2JhODlmZGE0YmZmMWMyOWQyMGJhYTJiMjE5NTY3ODA1NjliN2ZhMGM0MDc4ZDlmZjcxYTM3OTBmMWJlM2YiOiIiOiJjMDNlYTBiODhlMmY5YjUzZjkwMmIyMjc0NmJmNGRkZTA5NDM5YzE5MGE3YTYzOGUzY2I5OTBkODY3MzlkYmVkIjoiM2VmMDVlNzE0ODdjZGJjMjA5YjVhYjZlODA4ZTU1ZjBhOTNiY2MwMmRmNzY2YjAxYzFjMWFlNTg3NWIxMDIzZSI6IjNlZTQ5ZTJhNThkODAwZDkyMmNmYjY2Mjg0ZGE4NGJiYjU5NDRjODVmMTk0ZDk1ZjExNTZiNjczMzkyMTMyYTQzMGU0N2FlNzRmMWVkN2MxZDBlNjMyZDhjYjYwNGM4ODc3NzQzN2Q4ZjM3ZTdkMDQyOGI4MzQ1NTVhOTY4MDA1NDBiZjViY2U2ZjQzMDMyOGZkMzI4YmFmNGIyMmI3ZjhlNjYzYzFkODU4M2JjMDExOTI0ODU4ODg0MDUxMGUxMTIwM2NmNDdkZmM0ZjZjZGY4MzQ0MTcwYTM0MWZiYjdkOTM5OTliYTg2YmUzZmI5NGQ5YzAzOTIyZmQzZDc1ZTNmZDViNDIzNjVhYTYyNjA2ZTM1MjY3NmIyYTBjNTFmYjAzMGQ4ZDU2MDVlOGFjNmJhYzJiNGY4NDE3ZDhlMDYwMTQ4ZTNkNGJhNjdiMzFlNWU3MDRkODY2YmM4Nzc0MWJhODc3ZDEyYjEwZThhOWIzN2YzZmVjYTkwOGZlMWZjNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDAsMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiODhiNjU1MGQ0OTE4MmNhNzMyMWQ4MDE1Zjc4MDEyMTIyM2E5MzM0M2RhYmFmMjE5NzhlZTI4MThlN2JjZTY1OTFkMzJiNDhlYjQ2NDIwNjlhZGNhYTU5ODYyMjRlNmQzIjoiIjoiODA5NjM5ZjQ4ZWJmNjc1NmE1MzBlMWI2YWFkMjAzNjA4MmIwN2IxM2VkM2MxM2U4MGRjMmI2ZWE1NmU3MGEwNCI6IjMzOTU5MDJlMDAwNGU1ODQxMjNiYjY5MjZmODk5NTRhNWQwM2NjMTNjM2MzZTNiNzBmZDBjYmU5NzVjMzM5YTciOiI0YTVhMjliZjcyNWM4MjQwYWU2NTU4NjQxYTZiOGYyZTU4NGRiMDMxZWYxNTgxMjRjNGQxMDQxZmU1Njk4OGZkYWVlOTFjYTEzOTI1ZmVlNmQ1ZTU3NDhiMjZjYzAyNzVkNDVlZjM1YWJiNTZhZDEyZTY1YWE2ZmUxZDI4YTE5OGY1YWE3OTM4ZmNhNDc5NGMxYTM1ZjlhNjBhMzdjNzM2MGJhZjg2MGVmZDIwMzk4YzcyYTM2YjNjNDgwNWM2N2ExODVlMmYwOTlmMDM0YjgwZDA0MDA4YzU0ZDZhNmU3ZWM3MjdiMWNhY2UxMmUwMTE5YzE3MWEwMjUxNWFiMThlYTNkMGEzNDYzNjIyZGQ4ODAyN2I0MDU2N2JlOTZlNWMzMDE0NjliNDdkODNmNWEyMDU2ZDFkYzkzNDFlMGRlMTAxZDZkNWYxYjc4YzYxY2M0YTZiZmQ2ZjkxODRlYmRlN2E5N2NjZjUzZDM5M2YyNmZkMmFmY2FlNWViZWRiN2UiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMmNkOTY4YmFjZGEyYmMzMTRkMmZiNDFmZTQzMzU0ZmI3NjExMzRlYjE5ZWVjNjA0MzFlMmYzNjc1NWI4NTEyNmUzZGVkZjJhZjkzODJhMWU2NTIxNDNlOTUyMjEyZDM5IjoiNTlmYTgyMzUxMDg4MjFhY2NiZDNjMTRlYWY3Njg1NmQ2YTA3ZjQzMzgzZGI0Y2M2MDM4MDQwYjE4ODEwZDUzYyI6IiI6IiI6IjA2MDUxY2U2YjJmMWMzNDM3OGUwOGNhZjhmZTgzNjIwMWZmN2VjMmRiOGZjNWEyNTE5YWRkMjUyNGQ5MDQ3MDE5NGIyNDdhZjNhMzRhNjczMjk4ZTU3MDcwYjI1NmY1OWZkMDk4NjMyNzY4ZTJkNTUxMzdkNmMxN2IxYTUzZmU0NWQ2ZWQwZTMxZDQ5ZTY0ODIwZGIxNDUwMTRlMmYwMzhiNjliNzIyMGUwNDJhOGVmYzk4OTg1NzA2YWI5NjM1NDUxMjMwYTEyOGFlZTgwMWQ0ZTM3MThmZjU5NTExYzNmM2ZmMWIyMGYxMDk3NzRhOGRkYzFmYWRmNDFhZmNjMTNkNDAwOTZkOTk3OTQ4ODU3YTg5NGQwZWY4YjMyMzVjMzIxM2JhODVjNTBjMmYzZDYxYjBkMTA0ZWNjZmNmMzZjMzVmZTVlNDllNzYwMmNiMTUzM2RlMTJmMGJlYzYxM2EwZWQ5NjMzODIxOTU3ZTViN2NiMzJmNjBiN2MwMmZhNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIwMjNmNTY3M2RhYzI5ZjYyMjQ1NTEwZDBhODY2NjI5YzQzYzY0YmYzNWEwYmFkMzBmMTI3MDA1MDg3NmNmYjFjZTgwYjYxNWE1YTQ3ZWNiNTEyMTdhNDYwNzllMTFmZDMiOiJhNmY3OTdiMTU1ZDZkYTAxZjVkMTU1Y2I3MjkxNDQyZTFiODJkNDE5MGU5M2UyNzlmZTViNGFhYTdkMDRlY2MwIjoiIjoiIjoiNTA3YjgyNDQ0M2FmNWRiMjhmNzQ2MjI5ZTAzYWIwMGM3M2NjM2VlNDk1NmFhMTRiMzNlZGEwMGRkMmI5YjY0NWMxMzJkYWI3ZGNkYmM2NTljOGJhMGUxYTM1NzVmZTdkYmM3Y2Y5NjkxZjliNzE0YWNiMWIzM2JlZjk2OTQzMDAzYzk5MmY2NjFlMDRmZTllOGI5ZjY0OGY0YWY5YTU4YTQ1YjA4YjhmYTdmYTM3MDRlNmJkYzI4OWFiYmUxNGE4YzdlMTc0N2E1MmFjOTE2YzMxZWQwNzlkZTBiOTAwNjcyZTY1OGEyMDEyNzk4MjRkMGQ3NWFlMzVkYmRkNDNhZWFiOTE1NjUzNzY1ZDgzZTQ2ZjM0N2ZjYjRmZTMzMjFmYzI4YWJkMmQwZDI2YTY2MjY2MTU4MmNlMjFiNmRjNGVhNmQxYjIzNmU5NjkyYTgzYzhiYTBmYjI5OTE1N2I4MDYyM2FkNGY0NDhkMjVkNTdmNTM3YjEwZTVlMzBmODBiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6Ijk2YjViYzE2Y2UwZDEwMWI5MGQ1NGRhNmM0YjNkODVhNzBlZTE5ZDU0Y2Y0Y2RlM2QwNDhhZmI1Zjc1OGE2YjUyZWEyYzEwYzE2ZmViNzFjZWRmYWI5YmZhOWU0NjJmOCI6IjJmZjQxNWUyNDMyZDJlNmM0Mjc5OTEwYTVlNTZjMGY1MzU0YTVhZjAwOTkxMzJkODkxOTQzYjRhODkwMWNhNmMiOiIiOiIiOiJlY2ViZTcxN2FmZTZkYzA4ZGJmZjNlZDYyNmJiMDZkZTBmOTc4NDI4M2I3MGUzNzhkZWMxOWQ0ZmJiNTBlNjFiN2JlNDhjZWI2OTg1MWIyYmI5NDY0MWFlYzUwMjdkNTNkMzE0YTk2NTAwYTliYmIzOGE4N2M5YWE0MmViZWI5NmEyM2NmMjlhMGZiZDVlNDhiMzk5ZGFhMWIyNGRiZGM4NTIyM2YyNGI3ZDc3MzMyYmIxYTEzN2VjNzA5ZDI3YzAwOGM3MDk2OTZjYmU0NGJiMmZjMTlmYjEwYTJmYWQ0ZmZkOGE5ZDg5NDkyYTkzOWYyMjY4ZDE1NTdmNDRiNmE2NGUyYTU3ODg3ODMwZmQ4YmNhMWI2MzA2YWFlZGJkN2YzZjQ3NmI4Mjc5OTVhMWVkMTIxMzg4NDk3ZWRjN2U2MzljODdkMDkyZjY1OTFhNDViNTY0N2M2YzA5MWMxNWVkMzlmNTk0YjdmYzRhZTkyMzMxZjk2ZGQ4ZTE3YmU5NzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiMzY0YTgzM2EyODNhM2UwYjhhNWI2ODFkYWE1MGRmOTZkODA2ZDRiNTQ4MjhmMmIwMTZkZTVkODg1OTdlNjI4N2Q5OGNiYThmZGE0NjRkMjFhYTFjZmI3YjI2YjliMjI2IjoiMzViMGU3NTM0MDE0ZGMyZDdlYjBmMjBmZjc4YTY5ZDU1NDhkMGE2NDEyMmQ0OTM2YTZlZDE3N2ZiM2VjNjZhNiI6IiI6IiI6ImRmNGM3OTljYWUzNzE3M2E4MWM1NDVkMDE5ZmZhMzM2ZWYyYzAzOWE1ODY1YWY0MjVlNWI2MGJjM2Q3MjAyZjRiYzFhYWM1YTg0MDIyYmY0MDg4MDYxYWJkNWMzOWQwZmIwNDdiYTgwMTYzZWI1ZGM4YjlkZDUxNTk0OGYxNjkxNTgzMmM2Zjc2YjQ1YWNjMjViOWMwMWU3ZjcwOTU1YzBlYjUxYmY1MGYwMGIyNGJiOGU3ZmY1M2JkN2MwNTFiNTNkOGIxYTgzN2ExN2EwMDM1NWQ3ZWIyMWU0M2IyYjViMjQ5ZGFkY2VkMzdkMDZlNzA0N2MyZmQxMjAxMjcwNWE1OWQwNTFhZmQyNjI0NWNlM2E1OWFjYjRiOTk2YjcxOGM3ZGMxYWU5NjRiZjEyYjFkYjAyZmQ2YzA2YWMyZmVjNmVlNWRlYjAyYzJjODMwMTEwZTliYmJkM2M3NzhhMTM2YjY0NmNlMmEwNzM4NTYzNTU1YTg5NDA5YzU2YjgxZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiJiYjRkMzhjNzc1YWNkZWVkNjYzMjU2YWJiNzQ3ZWMyNTE4MmJjMTZlZmQwZGUwMmNiNGIwNWU0YWQ0NzQ5YzkyYmU2ZjFlODU2ZTQyM2E4ZjNiZmIwYzBmMjdhZDgyMTAiOiIyMTU5MWU3OTZiN2U2OGU3OTEzZmVmYmVmNDg3MmFmOWMwNjJmMjFjODAyM2MwZGJmNDdlMDQwYzNhZWQzNzMzIjoiIjoiIjoiMTI1NzU3NzZlMWI5ZjU0YjBmYmMzOWU4NWE3N2I2OTEyMTYwYmFjZTRmMWU5ZjA0OWUzYTFjNWJjYjQ1MmNmOWJlNDJlYTEwYzAyOGMzY2MyNDk0MDFhYzIzNmRkM2JhYTUzZmYzMjc3MzU0MzVmNDg2OWQzMjg5YmM5NDY1Y2NmMTVmODI2ZTRlNGZmZjA5OTk4NmJkZGUwZDA5YmQxMmUzY2FkZGNmNDUyZWVkNmNhMTIwNmFlNDU2MWI4NDc3MGE5Y2M2ZTk2MjU2NzMwNGVmNzlkOGQzNjA4NTI5YTNiNWU0MDY3ZmE4M2M4YzM1YTA2ZjE4NTVkYTVmNWVhN2ViMTA2ZTRjNjAxODFkMTJiYTAwY2ZiZjdlYWM2MGJkYTAwNTcxZDk1YzQ1YzlkNzVjNDNiNDJlMjdhMjM4YWE1ZTBmMDJiYmQ5NmNkZTU5YTJlNTcyOTM0YTk5ZDA1YzM5OWZmZGYxNWM2NWYxNzM3NDg3MzRjNTE5OTlhMjllIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImY5ZDA0MWQyNDE1OGY0ODA2MDBjMzc0N2NiZmQ4NjhjM2Y3ZTlhYzdmNzRiMzc2MGVhZTUzMjA4MzllNGY1MTMwZjg0NzdkODhiMWQ5MTRjMGQ4YjM3NWQwODlhNGM4MyI6ImIxNDgwNDlmNDA5M2YwMDMyYzdmMTA1ZGFlMjE5YWE5ZTNmNzA0ODdjZTNhNmI2ZWNkOTk0MjlmNjZiZTU0MDYiOiIiOiIiOiI4NGM1OGJmNDczMDYxZGE5MmZhOGQ1NmFhYjNhNzU1OTg0MjhmMThkY2E1MDQxOTFhNTE3NDZlYjVmY2FkOGY3ODRlYWZhYzVlYTgxZDYzNmQ1NzllMzMwYmFmN2RiOTVjOGQ3MDY0MzJlOWY1ODVlODRkYTA5MGMwZWI0MGRjZDgxOWJmMTBlMGQ1Yjg2MDAxNTBkMTg2ZjczMmFmNTBiNDMxYzU5NmM5MjBlY2E3NDJlNjU1NTEyOWZkZjVkZjk2YjQ0MDA1MDgzZDdhMzMwODdiMTUwZDYzNTI5YmVlNGI2ZTFlZDQxODlhZTJkOTNjZWU4ZGM2NzFkNDdjMGU3NGJhMDQyMThkZmUyNzM0ODRhNGJiNTlhNTc3NDNlYTU2ODQzZDUxNmZmMmM3MmVmOTg0MTk5NmQzMWIwZDZjNWJlZWYzNjdhNmI0NGNjODRjZjRkNDAzYTA2YjQwNDA2ZTRjOWY0N2RhNDAxZTNjZjMxNDEyNjk0ZTYxNjRkY2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiYzE4ZjUxMWZmYzM0NzlhNTkzNTdjMTdjMmZiM2QxZTBlNmYwZWRkYTRjOGI1NjdmMjQxMzMyM2MyMDM3ZjJmZDE0MGZiMGNmMzNlYjU5NTI2ZDhjMGRiZDIxNjkzOWI1IjoiNzM4N2FhM2IwYjNkOTJhZmIyOTc2MWQzZDVlYTE2ZTMyYTY4Mjk3YjllYTY3NTFlMWQ1NGM4NjEyZjYzNTFjMSI6IiI6IiI6Ijk0OWJmMDM4Njg1NjNjN2QxNDk4YzY5YzMyNzY4NjY4MjY1NjM3NGIyZWZkZWY2MzQyZTY5YTM4ODIyOWM1ODBjYTIyMTdhOTMzMmQzYWU3N2MyZDEyMjNmNWRlZGY0YjM0ZWM1MGI3OWQ1YmFhNzI4MzE2OGVkN2NiZTcxYzZjM2M5MTkzYmJlMDFiNzZlMDExYzM5ZDJkNDYyMDE3YzJjNzRiN2U2OThmYTIxNDBlMTY4ODZhOWVjMGZjNmMzNmRlY2JhZTM3NTM3NjM4Y2NmMTc3NzdmMWNmYTQ5ZDJjMmM3YmEzYWFkZDBhMTU2NWQ2MTk0MmRlOTRhYTZmYTE2ZWNhZmMyZGFmYWJjOTA4MmYyM2U3NWEwZTJmOGY3OWQxYzBhMTVjZTU3ZmVmNzY1NWYxYTRmYzZmYzRkNGE2OTRiZjZjYTllMzMzOTU5ZjM1YWQzNTQ1MjRmNjE0OTA1YzZhNTJlZjhmNTI0Y2RmMDFjNWZhZGFkZjIwNzc3MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI2YjA5Mjk1MTEwMzg0ZWI1NjcyNmY2MTQ3NGJkYzUzMmZkYWNlMzFjZWFkYjVmYzIzZDU4NzM1NmNmYWM3NDMzOGFiNmY5ZDg5Mzk0YjkwN2VkYjY0NjY1MDg2NWEzZmMiOiI3Y2FmY2I0ZGIzMWFiNDExYzM5NjAxNWI4YmJiYzk5MDYwN2UwOGJkMWNlZjMzMzdkZmEwZTI5NWFlMDI0ZjllIjoiIjoiIjoiZTUxYmM1YjNhNmJiMmEyNjY3ZjVkNjJjMmZmOTkwMmRkMDdiNTY2ODcwYjRjMTQyNDI2MjdkYTc1ODE0NDllYzk4NTczOWNkYzJiYjVlZjAzNjAzM2ZhNzk4MTEyY2UyMGRmMDZkNDZkNjFhYWQ3MTIxYjgyODJmZTc1NTZiZGQzNjNjZGFiYmY0NzE4NGU1NWVkZDg1ZWUwYjdiMGJlMTdiOWE3ZjgyMmY0ZDg5MDY0NjViNTI1YzE2Mzg1ZDA4OTliNmMyNzcyOGZmMmE2MDA4NzBhZWY2NWY1OGY5ZDM3NzdlODk4N2Q4NmU1OWZkYjY5Y2QyMzJlNzI4OWZjNzVjZjIxNzQzMDQxMzdmOTg4YTE3YjYwYzU3YWY4NGNkOGU1NTZhYWFkNDU4ZjUxMWZjMGIzMDA5NTE2NDM1YzBjNjAwOThmMzVmYjZhNGE5MGQ5MGJjNjA3MWQzODAwMDcwM2VmNTdjYmMxOWQ2Yjc4YTBmNzk3ZjNiYTA0NGM5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImVjNmQwZjY4MjQwZjVjNDdlODIyZDkwODgzNjRjNmNkMDNjYTUzODA4MTYyYjRmMDZmNTk1NmRhNjUyOTA5NDZmNGQyNjY1M2QwNzllNTA2MDRmODM2YzFkNzk4MjQzZCI6ImI0MGI1NzM3Y2M3NmM1ZjZkMWRmMGYxM2JmYmFjN2UyNmY5MmFhOTMzMTI1NzA1YjYxOTdkOWJlZGIxMWYyZTEiOiIiOiIiOiIyMDc4MzNjZjY1NTk5ZTE0MDZkZGFmMzQ1MmYwNjBjODcyMDk5Y2JmNzQ4M2YxZjdmMTQwMzM0OTBmNzI1OGNhNWZkN2Y1MzM5ZjkxNDQ5OGI2ZTYxZmE0MjZjYjg3MmM4ODBhOWZkYTliOGJhNTkwY2Q4MDA2Yjk5MGFmN2FkNDEyZjYwYzhiMmFkOTY5YzJmOWNiMGU5ZDAwNTk0M2Q0ZGQyZGQ3YWY5Njk5MDQ2Y2U4OWQ2NDA1NTk3NzE2ZDQzYjlhZDU0NjQxYzIyNzhiMDRiMmJjYzViOGVjYmNkNWUyMDQ0ZTRlNmVjNWE2Mjg2MDVmY2JkNjcyNDllODEzYmI3NjlkN2RmMDFiNjA0MDRkMDMwZTY5ZTk2NzJiNGZkZWRkZjgyYTIyMDQyYjgzY2EwMzY1NzhiNjlmOWEwYWQ5NzAyYmNmOTVmZTg0NjcwNWI0OWIwYTA3OTVkZmJjNGY2NzFlMDE1OGRlZDYyNDJiZDhmOGZiYzI0MTBjNDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiZGY1OWFjMjI0ZTRiYTFiNmRmZjM0OGYxN2JjZjljNWE5NGEzMjM1YTU0ZjI3OTlhNmNhZTI5ZDg2NTRiNzlkMThiMDliNDQ0YTI4YTdkNTM3ZTFhMmJjODllOTVhYmQ4IjoiMTRhMGE5MWUwY2ZkNjNlZjVmY2JlMmU4YzdhNDRiY2Y1NzY5YzlmOTViNmM1MGJiZTlkM2I0OGI4MmEwOTA1MyI6IiI6IiI6IjY1NjQzOGU3NzM4ZDQ0MWI5YWMxMTYzNjFlOWYyNmFkYzBlMzAzZGE3ODg5Y2Y1NTk4NDFiM2U0NDEyNzMxOGVkZDM1NjA1MWJkMGIzZWNlYTc4ZmViMmI5MjgyMjc5MjFhMGMxODNjOWY1NmJmZDExZWYzMWIyOGRhNmM3OGYzODkxZDhhZTE4MDRiYzE1OGZhNTZlOGI3YTFhNDZiZTQ5NTRkZTQ5M2VmNjVhN2Y5YmViNDY5NDlhMzIzYTA0ZTk0NDAzNGRiMzBiMTljZWJkOGI3MGJmYzE1NTg4MmRkZmFjYTFiZDVhY2I5ODFjMmMxYjNlMDg2MmM2MjM0ZDEzMDkzZGRiY2RmZjE1MTI5ZDU4NmZjMjRlYTJmZDIwOTQ2ZmU0NWI0NjdiYmJjNzdhNmI2OTczZWI2ZWEwMjk5NDYwN2M2NTdlZWMyOWU0YzRiMzkxNWNiNzMwZGIwNTZiYWJmMTc3OTEyNzA0N2I0MDFlMjVmOTdmNjA2MDYzYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiOGRhMWFkNjgxMGMxZDZiN2VhZDIxMGU0OGY1MWMzNzBkNDUyMDU0N2EzMzBhNGQ1OTFlNjFhOTg0N2FhMDQzNDYzZjY5ZDFiMjM3OTk5ZmRhOWI1Njk3ZjFlN2FhYTA3IjoiMjkxYzUzNmRhYzcyNDA5ZTMxZTcxY2FmYjFiNWY1NWMxNDQyMWIyYzdhNDRkNzkyY2ZkYzY2M2RjOGY2MjY5MiI6IiI6IiI6ImMyYmZmNTcxNTU0YzI2YmJkNDQ0MmZiYjNiMGY4ZWI0ZGIwOTg0MDMzNzY1OGE3NDI1NjEzZTBmZDRmOTZlNjBkYTM5YjI1MGMzYTc3Mzc5YTUzMzI1YTU2ZWMwMjI0OGM0ZDY3ZmI5MTU0ZTNiMGViODk3MmEzMTA5YWVkNTMxZWNjYzAyNzcwNWIyNjdkMmI5YzAzN2RhNzk4NjBkNzZlNWU5ODBiNWIzMGI3ZWE1ODhmYTIyMWQyNGQ5NzNmNmQ0YzYyNWRlNjUxMjNlOTE2MTNhMTUyOGNkZWU1OTk5M2FhODI3ZjMxOWE3NTk0MTJmMjBhYWQ2YzUwZmE3OWEzZGViZWIzNDZhZDkyODA5NDcwZGFmMjI4Y2YzNDRlMDlmMDNjODM5YTI4ZDU4MGEyYjNkNzA1MDY4NWVmNTFlOTU2NDlhYmE3MjI4YTJmMGM4MmEyZGZkODljYWU2Y2U1NDllOGIyN2ZkNDZmMDJmZWI0NzM2NDU3NjUwMThlZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNWU4ZDY1NzFmNTE0NTE5ZGU2YzRjMGE3Y2M1Yjg1ZGY2MTY3MzViOGRkMDljM2JlZDIzNzc0OTlhYWFiYjI5NmE5YjJjOTQ2NDJkYTEwZThmYTczN2NkZmIzMTI5MzM0IjoiNmFlMjljNzFiNzZmYzQ4ZjE0YTNkNzMxYTBmNmYyNzZmNzNlNzY3MmVmZjYzMWRiYjFkMjJiMDY0NjNiYjIzNiI6IiI6IiI6IjVjYWRjMTI2NDMxNGZiNGJjN2VkN2ZhNzRiZmExNmFlZmE2MjRiZjJmZDYwYzk5MmQwY2JhMTA0MjljNTZlMDAyOGViYjQzMGIxYTFjNjY2MmE5YjNjN2Y2ZGUyNDRjYTAwMGFlNjNkYjk1NzBmMWFhM2U3ZmZiMWU5N2E5ZDg0ODAyMWQ4ZTYzMmZlZGMwMzc3MTJhMjlhYmVjNDA2M2I5ZDU3YzYwNzM4ZjBhZjBiMWFhYjM4NDRiMDNmN2FhY2M2NWQzOGJlYzkxYTExYjdjM2JmOGQ5NzBmMDFlMDBmZWQ5ZGJiZTllMmU0OTlhMjFjNzJhN2M1YTIyODY0MTI1MTMzZWNiMDczYTRjOWY2ZDlmZDQ2MDI0ZjVjMWVlN2ZhNDQ3MjA5YWZhNmNjZWYxZjk3YWU3N2NhNjdmY2E1OTU5ZGRlMjA5ZDI1OTdmODdhZjZlMTU0NDA4NTc5Y2VjNDJjNjlmYTliN2NjMDc1ZWUzZTM3ZWUzZDkxYWQ5ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiNWM5NDgxYjI2NDI4NTVmYWM4OTMxZWNjZDFiZDZjNWEwNWI1NjBhNTVmOTZkMzdlODY1ZjA1N2E5NTgxMmQ4MWZlNjVjODRjOTZhOTkwZWI3YTMwMmI1OGRlNzIzY2I0IjoiYjZhNjFiOWEzMTIwNzM2M2Q2MmMwYjg4ZjE2MzIyOTBmNGYxOGZlYjQxYTZkZWRiODViNzQ1MGZmOTE1NzAxNiI6IiI6IiI6IjljYzc3YjY4ZTFhYzIzZmRkMmUyYTZmZjY5NzA1M2Y4MTZiYjQ4YjM5YjExNjJmN2FhM2ZkZDJkZDE4NjdmNjhiMTM5ODBjOWU1OTg5ZDQ2MzFiNzk4MzI0ODUwMTczMTMyNmJkN2JmNmU5NjdiM2RlZTdkMmQ1NjI1ZDNjYzJlMTk4NjIzYWY5Zjc3Zjg2MTAzNDkxZWJiNGFlZmRhNWMzMzNiNTE1NTdiOGY2NDNlNmQ2YzU5M2ZkN2UyN2U0YmNjY2ExMzE0MGY2MTI5Y2JkMDI0ZGUwNzZlNDY4ODU2N2ZkN2U0MWRjN2IyYmQwYmQ5YjNlOTY2ZDVkM2M0NjE1MDIyMjFiNTJiMDAxYTRkMjEwMjg5NGRhMDQxNzJlZmI5MDAxNzFhMGVhYmFiMWZkMTM0MjE3NTgwY2ZjMzNhMGE5NGVkYzBiYzEzMmFmOTFkMDQ4YzZmNWVhNGUzNGViYzk2ODZhOTlmODFkMTkxMThiYTRkYTYzYWUzZGY3YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiYzQzZjg4M2QwYWRjMmI1Njk4NGQ0YTQ5N2E4YWQ3NjgxM2EwMWRmNWEwYmEyMmI1MzE0NDc2M2I2NWM3YmYzZjZmNzIyZTRjZWFjNTk5NjZhNmU0NGVkODk4ZTYxMDliIjoiNzY5YmFjZTJjMjYzZWRiODcxMDE3NDM2NzM3MjRlZjY3YTkzNWUxYWU5Y2FjZTg3MjAyYjYwMTVkMjBmZDljYSI6IiI6IiI6ImNlNjE0ODA5NTMxOTA0NTMyNDdkMDkxODM4ZGQ4MDExN2Y3Zjg1YTdlOWExMjM3YzkyZWRmMTBjZmEyNmI0MjM3MzU3ODhiMWU4OWYzMzYyNTQ4MGQ5ZmFhZTU3MTEyZWU2MmM4ZTQ4NDA0NzVhNmE3MzgwMThhZDNmZDRhNzdlZmRkOGYxNWZmYjYyMWM0Mjk0MTliNmFkYjIwNDMxZmQzNWY5ZDYyZmIzM2Q1MDBiODdiZWFjNDg1NmFhNDk3MWViODk3MTA1NzZiNjA5ZWNmZTc1OGYzNjgyZGQzMTZlN2VlOWQ2NTYwYjQ0NGMyNDQ2NjU2Yzg5NDFkY2E3ZDZlYWE3MGZkZjhhNzBmMTgzODZlZTVkNGM4NjczOGJjMjYxYzBlOGU1ZjUwOWRhYmZmZDA0MjVhODY4NThlYTNjNzFkZTViZTk4NTcwZGFiZDgwYTM3YjRmN2Y5NTQwMDI3MjdjMGI3MTJlNTg2OTM2MDNjMjMxMzBhNDVlOThkZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiZDA4M2Y3ZjhjNjUzNzQ2MjdkZGI1MTU4MmIzYTM5ZTJiZjA3NDUwOGQ1ZjI4ZWNjZTI1Nzg3ZjM4NjA1OGRlOGFmYWZhZjJhZDdlNjQ0OTMwOGUxNzZiZTAxZWRiYzU5IjoiZGRiNGNlZDE5MmY1MmJkZmExN2FhODIzOTFmNTcxNDJhYzUwZTc3ZjQyOGZhMTkxZTI5OGMyMzg5OTYxMWFhZCI6IiI6IiI6ImI5Nzg4MjZiODkwY2U4YTI2NGJmMWFkMWM0ODZhYWY1YTgwYWE0MDc0MjhjMDIwMWRkMDQ3ZmExYjI2ZTllYTlmZjI1YTkxNDkyMTViMDRjMmYzMmI2NWUwMDdlMDA1OWE4ZWZlMTE0ODE5MjY5MjUwNjFjNzQ4Njc4ODM1YzAwNjZmNTk2MzUyMTIzZjBiODgzZTBjNmFiMDI3ZGEyNDg2MjQ0ZGE1ZTYwMzM5NTNhZjllNDFlZWMwMmYxNWJlYmRiNGUxMjE1ZDk2NDkwNWU2N2M5ZTM5NDVlYzgxNzdiOGM0ODY5ZWZjNzBhMTY1NzE5YjhlMWYxNTNjNDE3NDRkNDRkM2M1NmExNTgyMmQ1MjJlNjliZDI3N2MwYzA0MzVmYTkzZTVlMWJjNDliYzlkMDJhZWUwNThhMDFhMDQ1ODBhNmNhZDgyMWU5Zjg1Y2Y3NjRmYzcwZGZhZTQ5NGNiZmE5MjRlYWIwZWZmNzg0MmUzNTQxYmMyOTE1NmY2YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImMyZmViOTAwMDMyZjJjY2E5OGQzZjYwNTM2ZjU2M2Q4YWM5YWY1ZmIyZTkwZGJhMzZjMzcxYzBhMWM1OGNmNWU0YTYwZjJiZTBmYTEzYjgyNjZiNzE1YmU4YWFkMTI4YyI6IjhlNmY5YmUwYzY5MjY0ODA3MmQxOWM3NTA4MDRiMTBlMmVjMzEzYzgwMTNhYmQzNjNkZTdhNDY3Nzg3ODU5ZjIiOiI3MmY1NGJhM2Y4ZTcxYWQ2OWEwNDBiYjg0OTMyODNhY2ZjODgxNWYxN2RiY2VhMjIwZWNkNjgzNzJhMmRmZmFlIjoiYWRjZTgxNTdlZjYwNDgyODQxZGQyYWM1YWM1MTJiZjc2NDkxMjBjMWRiYTgxZWE3NWYyYTcwYjc1MTJiYjZmMyI6ImU3NmU0MzI2YWM2OWRkYmM2YjI0MDhjNTI5YjA1YTk2NDI1YzY1Y2M2NTY3MTYwMTE5MTIzOGU5NDM0ZDJhMDE0N2YzYTI1Y2U5YjY4MTg3NzRmNTI2M2M5MjQ1OWJjYTQyMWQyYjQ5MmY5YTljMjk3MTM1OWJhYWExNDI2ZDZlMmMzNmQ4OTI0ZjM5ZDAyZWUyZmI1NTAyYzRlMGIyMDZkYmU5YWVlYWNkNTA4YWJlNmMwNTVkNTQ3YjVmOWYzNWRlNGZkYzljMDVhMmM2M2FkNjk5YTNhN2UyNjU1OThiOGY0MGE4YTI5NWQ3Mzc2Yjg4YzQ5YWY5ZWRjNzkwYjhhNWVlMjIxZTE5ODc3NjE2Njc4ZTJhNTEzNWQ3YjM3NTYxMDkyMDA0MzlkOWVjOGJmZTBjYzVmM2MzMzRjYTljMDIyYWI5MTkyZDVkNTU0ZGM3YWU3NmFmMWRjMDZkODE0NDI3ZjQ2YTdjZmEyZGNjNjJmNDc3N2QwN2ViZGU3ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImFkNTAwZWRiZTI4YjlhNDMzOGI1NTQ1MWI4MWM2NTI3OTdlYjQ4ZmJhNzUzYzE4NmNlMGFhOWFkMDJhODRlYTJjOTk1YjdhZGU2ZGUwZmI0ZWM5N2JjYmQ2MWI3MTFkNSI6IjU3NzBjNDE4MzJhNGNkYzQwMzlhOGMzMzJhNGI0NWU3YTdiMmRhYmI2NzhjY2QyZTU2NDUyYWFiZWFiMTQ5MjUiOiJkOGQ1NTE2ZDE1OGI0MWNiOWQ2NjU2NmI4ODA2NDkwMGFmNzgxODNmNzY1ZjJmNzJhMTk1NDhmYjc5NzM3N2IyIjoiNjBhM2EwMWE3MmU2YjNmMzNhMGMyMzZkYjA4MjM3ZTdkNjU2YmRmNGJhYjFkYjU3YWUyM2I3MzA1NTY5ZGVhNSI6ImM1YWMzZGY2NmJjNjY0ZThiZjg0Yzc1OGM3OTI2OTkyZjBlOGEwM2NkM2YzZjVmYjgyNzdjODViNGRhNTI2NjAxZTgxMzFmOWQyMDVmMzU1OTRlMTAxYTg2ZmI4M2NjZjRjMWU5OGM4ZTYwOTA2MjI1NjcwMWZmMjEzMmUzMzdjYjcyODdmMGVlMmU4ZmUzZWYxMWFlNzAzZDdlZmU1MmU2M2NmODkxMTljZWQwNTk1MGM1NWFhZTZjODIyYjZiMGE4ZTFiOTFiNTM3ZTViYjJkZTE2NWE0YjViNDNhMWM0MWZiZmQ2NWZmZjliYzUzMjlkMzAzY2FjYTg0ZjVkMWZjNmFjYWNlZTYyMjYyM2VkNWRkZTM2YWVkYTA4MTY3NDk1NTdjOTI0ZDZlZDI2Y2Q4MGU0NTZmZDBhZTIxNDY0NzdjY2I2M2EyMDNmZTE2YWMxZDBlYjJkMTJiNmEyY2FiYjIxZDQxMjQyMmU5NWYyZGY4Y2NkYzIzYjRlZjBkYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjUxYTI5YmFjNTM5NjE3OTIwNzdlODhlZDM2MDNkMzNiZDFmNTFiM2ZkYjJiNWNkMWVhMTMxYzZmNjQzYWY2NWRlODFlYjJlMjYwMzk2ZDJhNjliNDE4NGM0ZWI5OGExNSI6IjcyZTUyODViOTJjNGVhNDQ1OGU4YTIxNTk2ODdjZDQ2ZTdkZjljMWY0NTEzZDhiNzJjYzg4YmU0MWMyZTE1MjIiOiIxNmE2OWY3YWVlMzRjNTY3NTk1ZjNkMzYyY2NiZGJiN2I5ZTkzNzJjNGIxNzI5ZmJiODBkOWEwODllZWUzMWE0IjoiODI1MTk3MjYyYTQzZjY1MjMxODJmMGE5MTAwNWQ3MGIxN2Q4MWMyYmI2OTJlZGZkMDJhYjk4ODEzMGM3ZDViOSI6ImY2M2Y1MzFjMjQyYTI5NWQ3Nzk2YzNiNDg0NGZjNzQ4MjFhZjVhNTNlMGU3YWU4MjJjZDhhN2Y5ZGU5MWU2MTY0MTY0ZjM0NDhmZDdkMThmZWFmYjk3Yzk1MDBlMDYyNWQ1MDFkY2IzOTI3ZTZmYjM5ZWY2NWRkOTU4NmQxNTcwNzY0MzY0NTJiZDMwNjZjYjMwZDFmNDdkYzBhM2ZmYTVmMmU5YWI0ZTE4MzAxOGI0MGE4MmIzOWIwZDE3MGFhMjFiMDU2MDBlZWZlYTkwNjgzOGI5NTQ1NmUwNGNmMDQ2ODA4MDMwYTU2OTUxZDI1MDJjNWViNjI3MTIyODkwNWVkMDg1NDliYjE3MWQ2YzA0MDhkODgyNTA3ODVmNDJlMzQ5Y2UxZDllNzRhNmNkMDM2MGEwMDhlYzgwNGU3ZWNkY2I0ZDFmZTI0YWE1YTE4Y2JiNjVmNGRlMTYxOWEyOWM2MDYyYjQwOWEzODZlYTZmNDNlNjBhZGI5ZWEzZGQyOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImIzMGZmOWM2ZTViNmJkMjU4ZjFjZWEwZmQ1ZWY5YWRiODFmYmVjMjMzZmYyZmFiMDFlNzliNzQyMjg3OGIyZTk1MDYwNGUxMGFiODBkZGNlYjlkMmI5NjhkMGQzN2JhOSI6ImU4YWNkNGIzODBhYWNlMGIyNzU3MjA1N2VhYTk0N2UxMGU2YjQ5NTE2MTQwMTM5Yzc0YTFkNGY0NzIyMjFkYWMiOiIxZDJkZWQwMDAzNTIxZTJiYTZhNGEzZTczMmUwOTQ5YzFkODU4ZmRmMDkyNWZlZGQ5Y2ZkN2Y2MDNlMGU2OTJhIjoiNjg4YWM1ZTdiNDQwMGQ5NjJjMTA2ZmQyY2U3MTJhMWNkYTZhMGI4YWM1MTk2YWQ3MjdmOWI4ODIzMjlhM2Q1YSI6ImM1MjA4ZmVjMWQ2NzUxNzMxMWE0MmJlYzA3NzgyY2ViMjQ3ZTljODE4ZTRmNWYzYmQxNjBjOWU1M2Q0NjJiNjE4ODRmZWIyNzhjZGM4ZjY0ZTIyZjU5ZDI3ZGZhOThkM2E5MGRhOGM3YzViYTI4Y2E0MGJkMGQxODkzNDU5NWEzNzY1NTNkMWE4YTE5ZGUwN2E4M2UyZTlkYjQyNzQ4Yzk4MmNiY2JmNGE5NzVjMjAwODRlYTljYzZjNmE0MWI1NzFmYWY2NmIzNjRlNGI3ZTRkMzJlZmM4MGMzMGIyMTlkYTFjMDJhMWVhMDJmNjkyMmFkYmMzMWEwNTdmOTk5NjA1YTJkODI3ZjEwOTA3ODM1YzJiZGRlNDE1N2Q3YmYyOTA2YTBhZDI3YmI3MmYxMTNjNmVjNGYyMzYzMWEyYjg1MTdiYmNlOTFiNTYwZDkwZDczZmJmMDY5OWJhYjIxZGEyM2UyN2NmZWM1MTNiYjVlMzc1ZjUwMTA4MTk3ZDY2NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjU2NzE1ZGNiYWE0ZjViZGJkMTU3YmRkOTUwZDFjMWI0NmMxZjRmOGQ3ODE4YWIzMjFkNzJjMGZmM2MwYTkyODA2NGIwNDM5ZjdiZjAyMWRjZGM3ZmViZjIxMjZlNTQzMiI6ImNkNTU0Nzk5MWI1MjVmNzc5NWUwNzVhNTlhZjE3MDEzNzUxNzViZDc2MGRiOTlkMzE2YjkxNDYzZjg3ZjdmM2MiOiJiMmU0ZjAyZjFjMTQ4NjZmNTM4ZWRkYWI0MDIzNTZmZjNiNDA1YWJiYjkxNTRlODhiOTg0ODNhODNiZTcwZjdjIjoiYjhkYjMyMWFiMzAyODVlZWU3ZjllMzc3YWQ2MmRlZjZjYWFkYTQ0N2QwMGE0ZWM4ODIwODFkYWFmZTJlYzAwOSI6IjdlZDhjMmJlNThlMzU1M2ViNjU1MDgzNzdkNjNkN2YyNDUxOGQxYTcyMzVkZDRjNzQwYmQ5ODdkZDhiYzFjMWUzY2E5N2E2OWEzN2RjOWEyNzBhZDg4OTg5ZTQ4NjhlNmNmOGU0Y2YwMTcwM2MwYjFlYjZhZWQ4YzNmOGFmNDMxZDgxOWU2OGI2OTQ3YWUxMzRkMzYwZDg3ZTMzNjY4Y2RlZjBlNDVlMTFmNWNkNzkzMjlmZjk1ZWQwMGU0YTY5NTI3NTBmMTU3NGY0ODkzOTRiNWZkZTNjNmYwNzMxMWExZTVkOWM0ZTA3MGEwOTQzZWY5ZDRhMTMwYTllNGIwYTgwYzI1NmU5NmNhNTA0Mjk2MTc2Njg3NDg5OGVhMGY3NzJiNzhkMWEzM2U4NjYzNTFhNGViNDI1YjgyMmI1YWQ1OTZjZjI0OWJjZThjY2Q2ZGFmYjMzNGI3MWE1MDNmY2UyYzhmYTNmYmFjOTk0MzkxMGNlNWZmMDJlYmJlZGRlOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjFjNjBhMzE3NjAwMTllNmE1NzFlMjk4N2U1N2UxOWFkYmMxYWNjZjNlZGQ0NGU1MDEwNjFjYmVjMzMxYjE5N2ViNjhkMGZhOGZhNWUzMDcxZDZmOGI3YzljMGEzYzM1ZCI6ImQ0ZDg0ZGM3MzExMDk2NzkxZGQ5YzlkN2YyY2QyOTEwNzFmODc3YWZkODZiOTY0NDQyNzQ4MmQwOWFjOWRmNjQiOiI2NDczZjQ0MzAzOThkN2U1YTJkMjE4YmQwNWU2YWVkYWMxZTMxNzI2OWRmM2U0NzA1ZDU2YzIyZDZlN2FiYjBmIjoiMzc5NjQ5YjU2YTQ2Mzk5YjlhYjVmMzg4MGUxYTczOTkzYTU4Y2Y1MjgyMWQzY2FjODc4OTBhYTBlNjMyMmE5NCI6ImQzNDE1MmZhMTJmYTM0MWQwMzI2YTUyNWFhODM4NTU4NjMwMDEzODU3NzQ3ZjAyNjM0ZDI0ZTlkZWVjMmRhMTJmNTJmYjQwNWU3ZjFiOTczZGMyZDk4MmQyNmViMmRkYjRiNDljMzVhOTMwOGIwNjgwOTE3MWRjOTkwYTQyNDhlNmRhMGMzMjlhMjU5ZjQ5NTI0N2I5ZmE4YzczYWYwNjYwNGRiN2I2MjkxNjhlMzQwODE2OTZhMDQzOTc3ZGQyOWEzYzAzNjJkNTg5NWY5YWFjMjRiY2JhNThkZDc0MDc4ZWY2ZjhkMzNlYWM4NjRmMmU2Y2RjNDc5ZGEzZDIyNGJhZDgwOTlkMDExZTkxNGI2Y2NjMzYzMWE3MzY5NTg2ZTE4YzcxYTQwODdkZTBkNDdhN2MyOWEwOWMxMjQzOGM3ZGUyZDRiNDc3NjhmNDc2ODViNzQyYzI1Yjg2MGU3MTZjMzFlMmFmZTRjZTZkOTJiYzJmYjlmMzQ0MDA2MDJmOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6ImVlY2NjZTdmN2VkYzUyZjBlMjU1OTI1MGJlMzY1MjZjZDE4MzkxNTFhNzdjNTlkNTI3ZjY2ZmEyNGVhNGQ4NmIzZmIyOThjOGQ3MmI2YTBhOGUxOTFiNjAyNTlkMWZjMSI6IjI2ZDM1ODk1NzIzYmEzZDQzMTk5MWEwZTZmYjIxNTRhZTViZmY3ZTU4NjA5YzkyNmVlMzI2OWFmYzVjZDYzMWYiOiIyMjdiOWE3MWE2YzE3ZWNiZjYyNzE2MWZjNjI3ZjhmNmYxYTI4Y2UzOTc3MmI3YTNkMzYwNjRlMmNjNmRjNGQ1IjoiZWI1OWY3ODBjNWE5NTVlMTM1NWRmZTE1Y2M0YTRlOTBhNmVjNzU1ODRlNjNiZDBkZTczNDM5OWY0N2I5NTA3MCI6Ijc4YWM3NzY1N2RjNTZiMjNlNjE3YTliMzgxNjhkYTk0NWMxY2Y1MmI2MDYyYzJiMTBmMWQ3YTM4MTRkOWI5ZWZhNTU0NWRhMDUwYjBkYjVhNjVhMmQyZDJlMDJmYTEyZTk3ZWI5NzBmYThlODNjNTI0YmM4MDlkNjc1ZTBkYjM1Yzk3NjIzMjNmMzI3ZjFlZGI5YjUzNGNlMTZkMDI1MTk3NTBiNDFlYmU1MWY3NDdlOWRhNDNmZDFhZmM2MGU0NmM3YWJhNzJlMTVjYzdhMjJmYWQxOWVkNTUxODlmMjg3YTE0NzM3NDgzZWI2YjMyZDk2NmMzZTM5NjlkODE5OGYwMWYyZWQ4NDFmMjBkN2QyZTE1NmQ2Mjg1YTI5ZTA3ZjZkN2ZmZjQyYmQ1NzU4MDZjNDA5MjUyMmIwM2UwZDFiOGRmMGNjODhmNWI4MmQyNGE3ZmQwZmVmZjZhZGEwM2E2MGVmMjU0MWE0YWIwNDFhNDlhYTk3M2M3MTYzYmY5NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6Ijg2ZjgxMDRhMDgxYzk1NjVkZWE1NjUyZjIwMTQ1YTA2OGRhZGZmMTI1ZGViZjgxODI2MmQ4OTMxY2VjNmJhOTM3ZmQ1YjUxYWZmY2ViZWU5NTJmYjY3ZjI5ZjE5NzI2NyI6ImM3YmE1ZmY4Mjg4NTVlNmU3OGZhMTczMmQ2M2FhYzFmNDk3MDFmZjdhYzFmMzUwNmU5Nzk0MWY5OThiNGU5ZDIiOiI2OTE3YmNhMTVkYjUzYTUzNTllNWM0ZDMwYWI0ZDM3ZmM2YTFiYzY2MGZhYWYyZTc0ODY0Y2I0YWE1MmUwZTAyIjoiZWVhOGRiMGNmYzA0ZjhkZTE0ZDYwNTM0NDJiNWI0Zjg3MzNmODIyZGY0YmU1OTY2YTBkZThiMGY3ZDIwMzZmNiI6IjU2MmI4YjJmYTNiYjE1Y2ZjM2Y3ZTU3ZjMwOWUzMWIxM2M3OTBjOTI4YWQ2YjMyYTAwNWY1NDMxYzI4NTc2YzU3MDZjNGFjMGRjMmM3YTQ0MzViZWJmYTA2NTcxMjc4ZjQ4NTkzMmJkOTQzODJlZmNmNzI3YjMwMGIyMzBkYTliOWU5ZjM3N2QyNjU5YWM3NWRkODI0NzM1MWQ1ZWQ4MTg1ZWZmYTBmMjU1YTJhMjEzNmU2MzcxN2UwMjY1ZDU2MWEzNGM3NWVjZWUxYzc3NGMyNWUzM2ZkOTM4Njk2ODI1Njg2YWNmOWE0MTljMWRhM2ZhMWNlOGY2OTVlMjMxMDg3YWEwOTI3ZGRlNmFiNDg3ZGM2MTI5MWFkNDcwMGM1YzYwOGZhYjFhNDE4ZjZiMzBmZjk3YjhiOGYwMWVmODE2NDI4Nzg0OWE3N2IyMWJlNWQxMWQ4MmQwYzE5MDU2ZTA3ZDU5YTMwZjZjNTc2NzA1YzZjZWRjYjlmMjJkM2E4ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjBkYjZmNzNhYjZkMzFkZGY4Zjc4ZDc2OTYxMzEwZDY4ZjA4MWM5ZTZkNTk4NWUxODgzOTc4YzJkZWM0OGQ5ZjU4ODc1YWI2NThiM2E4Yjc5NWJmNDY0YWY5NDcwYTkwYyI6ImQ4ODY5MzZhZDM2NTQ5YTEwYjVkYzVkNmUyMTIwM2FiZDc1YWQ2M2Y4MjY3OTRiNGFkYWFkNDVhNzA0MjRjNWYiOiI3Njk5M2QzYmNjMzI1NDY0MzBlZmEzMGUzYjMwYWNjMzRjNzY3MmI2ZTE4YzdlMmU5YTFmMWNjMjZmN2Y3YTIyIjoiNTRjNzJjZjM0NTdlNmY1ZjZiMzVkYzE0MTY3ZmVlOTM4M2M0NGM4NjdmMjMzZWM5ZDgxZjE4N2JjZTQzOGMwZiI6ImMzNTIzODk0ZDI3M2M4NWQ2MDVkMzlmNWI4OWUzMzg4YWZhZDhjMjA3ODc4OTdiOTAzZDhkYjdlM2RlNzU5MDM0MDE3NGJlM2FiZDc1OThkYWJhNzgwNmFiOTM0ZTBmZWNhMDJiYmU2NjI4MmQ0NjllYzAxNDc2YmFkNWNjYmE1OWZjMTRjZDk1NDliZjRhZjQ5NjQxZjQzMjZiMTA1MmIxNzljODkxOTRkMjFiZWMwNTAxYzk3ZWYyYzI0YWFmMDQ1ZmQzNDhiNzY1OTEwZmU5MmMwMDM5NjEyZTM3YmFhZDI0NDViNTdkOWRiNmMxZTU1MGFkZjY2ODhhNzliMTE3ZjZiN2EzN2UwMjA5ZDg5ZjE5NGExYmZlMWZmMmUzYjI4ZjA0NTRiMzgzYWY4ODcyZjMyMzIyYmQ1MzEzYTNjOWNhNDhkMzNlYWI3YzM4MDdiYjk4ZjhmNDAyYzQzYjk5YjIxNzZmMGIzM2JlMDhjN2U4NGM4NmIyNmU5NzFhYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjNiMWZmYmZhZTZlYzU0YTE3NWE4MGEzM2M4NzY4ZmI2MGYyYWY5ZWUyYjg2MjBjNGU4MDBhMTdmYjkyNDFhZTQ3Zjc3ZGE0MTRmNjdiNWQ3YjI0ZGQxMDAzNTVkMmFmYiI6IjBkNTBjZjYxZTIwMjBhOTA5YmE2ZTM2YmE0ZDBhMzk0NTc5ZDNlNDM3N2NkNGJmMDA2ODk2N2U4ZDBmZTdhNzgiOiI1ZDRlZmIzZjZlNjUwM2M1ZDg1YTFjNDMzOThkMDQ0MWNlOGFlZmFmYWFiZTJmNmQ4Njk4OGEyNGUwMzNmNTAyIjoiY2ZiNjE1NmExYjEzOWFiZjIxYzczMDAxMjQwOTk3ZWUxYThjYWQ5MWE0YmQ3NzdjMDM3MmMxZThmY2ZkM2ZhYyI6ImQzZWY3NzZjOGQ3N2ZjYzVlOTQ3YmY1M2UwYmUxMTc3N2U2OWM3ZGNlMTM4ZjI0YzFhMzIxMmQxYjZiOTMyNTgwMzcxNDc5Yjc2MTlmYzgyZjAyOWQ5Mjk2OTYyOGY4MTBiNTRhOGZkYWI4ZWJhNzk5ZTc1MDk0NWYzNTQ1ZjZhOTYyMjZiYzc2MGFkNzM2MTAxNTE2ZWZmZjVkODU4MWY1ODY0YjM4YzI5ODg1ZDM5ODQzYTRhZGNhMTcwNDZlMWUzODhjODkwNTQyOTg4Nzk3YjU3NmRhNjQ4MDRlYjQxMDE2MzgzMjhkM2Y4YmZhMzk4ZmZhZjgzY2I3MjkwYTJjZmQzOWVhZDEzMjkwYWU3NzNhODk1OGIzMzkxNGNhMDJjOGZmNmEwNjlhYTI1YWM4YjM2ZjZmMGYxZGNkOGYxYzVmYzgzODA4M2E2NGFlN2FlMTFiODViZTNhOWZhODBlZDgzOTQ5YjYyMjAwMmU5MTc3NjI3M2ZhMzJkNmNmZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiIxOTc2N2NlMWYxOGFlYTM2NjUzOTY0MmZhZDQwMGEwM2E2NzViMmYzYzBiMWNmZDQ5OTI1ZTUzNWIyYzI3NzkwNDNjNWExYzU3ZWY1NTBhY2FlNzMzNzI5NTE2YWE2MmUiOiI2YmZhODgyYzFlODk1ZWVmZmJiODU1NzgxODI2NTNjMDIyYTQ3MDMwOTE1Mjk3ODBjMDc1Y2Q0ODI4MDliOTkwIjoiMTEyMzZkZjFkY2EzZGU2ZTNlM2E1N2QyNzQxZDFiNzdmMTVmNDViMDViZWI0N2NjNTAwMTAwYjMxMTg4YTQyZCI6Ijk4NzA4YTg4ZmFmYWU1NmM0ZjZmYTc4MGM2YzBlMzNjYThmMjU5Mjk4M2I1YWU2MDcxNDZjZDZlOTIyMDQ0MTYiOiJiNjUxNGEzNzc5ZGNlZjJjOWVhMGVkN2RkZmE4MDhkMDQ1YzU5MDczMTRjMzU4MzAyY2EzMmIyMDU1OTg3YTM4ZWY2MDE2MzdjZGNmNzdiMWI4ZjdlYWM0NzlmOGYxODk3MjAxM2MyZTFhNmRmZTYxMmU4YTU4NmRjNTI5ZWNlNDg2NTA1NTM0YzBmZjNkYzBiMjA0OWEwZTQ2ZDdhYzUwNGExZmRmYWE5YjA4ZDlmYTAxN2M1ODAzNDE1ZmEzOTFiYTdlZWI1NzZmZDZkZGJhNDQwNGZlYjQ2ZTdjZGU1NmUwOTBkZDI4MGJlNWVkYmE3ZDZkZjljNWJhN2QzNDU0YmNiZDRkNDQzYjA4ZmI1MWExMTdjMWQ1OTE2ZjIyNWRjZDZjMWMzZmUyYjI4ODBmNGQ0Mjk2MmJlZmUzYWI3NmJkYzA4NmUyOTM4MWRkOTg1MjA2ZTNlMDBjZTcyMmM5YzA0MGFmNWZmNGNkNGE4MTgzYjQ0NmQ5MWIzMTA4NDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiZjYzMjkyYmFiNTA2NjhlYjE0YjgzOTc1NDIyYTBjODUzZmU1NTcxNGE5ZWRmOWQ4YTgxN2JhMGIyZjI2ZWM0MDA2M2E4NmVlM2M3OWM2OTQyNzMzNDJhMDJmNjhlY2QwIjoiM2M1MjU5NTY4MzhlMjZiNzdiOGNmYzM3ZjAyNGVjMzk4ZWQ4MjUwNzZkYmI3NDljZjQ5YTdkODY4YzIwMWU2ZCI6ImQ5YTQxYjQ3YzNiZjg3NDMwOTlkYzhmZDIyOGY3N2RmZjAxYWUzMDQ3NjFlYWY1N2Q3NTFlMTFjZjA5NGJlZjEiOiJiNzkwYzM3ZGJkYTIwZmJlYWZlOWQxMzM5YTExNTExNDQyNTNiZGZiZmZlMTdiYTg3MjQwZWFlNDljNjA2YmYzIjoiMzU4NmI2MzMxNTAyMGIzYmExMTIxMzE0YTBmYTZjNjZkNTdkZTBlYzQ0YWJlZWY3YjczMjVlOTYwODMyYjc5NDRjYjBhODFhNzQ3ZWU1YzVkMzE2MzAwMTUzNmQzZTVhZDJlYzg2OWIwZTVjZWIxNGFlZTJlNjkxNTA3MzYxOTUyOGMxNDIxYjU5YjgwMjU0ZGZjM2NhYjA1ODQ4OThiMGJjYTcyYzc2YWUyNWY1MmI3NDA1YjlkYWQzOGNiMmI4NDFlMWQ2YTM0ZmM1YjI3NzEyOWRiNDk5MjhiMmY2YzBkZDIyOTAwZWU3ODZlYzEyODE2NGVkMTJlYjMyNGI1MDI0OTlmMWM1Yzg5YmUyMTAxOTAxNDc2YjM5YzU2MDM0Y2MyOTNlMzIwZTYzYTNlMDE5MTg2ZDRlYWY5YTA5ODEzNmU4YzBjZTdmNjMyNmY4NGVjOTU5OTJkZGUyNTg1YWQzOTQ1YTk1MzRhYTI5NTRiOGMxNWE0OGUzMzI0ZDc2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtMzg0LDI1NisxMjgsMjU2LDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEEzODQ6IjNkZjc0NjgzZjI5OGJhNDg2NDg3MTRlMzg0OTg5MTQ1YzFiODQyNDY3MzZkYzI3NTYzNjgwOWQ2NGM3NWZmNjAzMDU2ZTcwM2M0MzVlYWNmMjFjMGJiMTUyZDlmYzJhMCI6IjM3MTIxN2NhMjMzN2RiMDNjNGQwNjcxNDYyNGZhMTFmOTBkNWRjNTc1YmRiZTEyYTQ1N2M2MTBiZTA2NmRjMmIiOiJmMjZiOWNhYzhkZjU3YTMzZTRiNTg2OGMzNmYyYjkzMjI5OTRhOTgyNjlkY2JkNzk1NmI5M2QxNDdkZDBhYTI3IjoiMGE2ZGI4NmMzYWJkYzM5ODc4MDQ1YjhmYzJkNWYwZjc3YThlMjk4ZWZkYWNiNGNiOWY3NDc2MmZjMjNiOTZmYyI6ImZmNTI1MmI3YTM5NDYwYTczMDk0YjlkNjY4YjUzZDE5MzIyNDNjYWE4ODVjMGVjZDg1MDYxMmZkYmU3ZTQ2Y2IyNzVkMDc5YmI3NWE2YjA1MDE5MTI4MmNjYjExZWYyNTVkNTJjYjc2MzYxOGM0YjYyNDU2MGQ3OWJiOWE1YmM5OTMxOTc4M2RlNDNjMTUyZTdhYTdjNGNkODc5YTc1ODY5Mjg1MzIwYTliNzQ5Yzg5N2JmMDcyMjBjYzFiZWYxZWRjNDk0YmZmYTZhYjkzZGNmODM5ZGMxNWY2ZjJlNTA4YjllMjE2ZTJhMTc4NmI3NWFiZmIwMWJiN2JkZWRhNzIyYjQ3YWY4OTVmNTUxNjcwZjk1NjJkOWY5Yjc4ZTk4ZWU3ZWE1YzVjYTRmODM2YWY1YmYxNTM5MjViMmFlYzA1NWVlZTgxNjRlZGYzZjdiNzJlMjRiMTIwM2NmYWUxODM0NzA1Zjc0Y2FjOGM2MDQzYTNjMmFiZjZiZGYyOGZjOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTM4NCwyNTYrMTI4LDI1NiwyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBMzg0OiI1M2Q3MDY5MmYwZjRkYmRhMjNkNzg2NjBmMGYwOGM3ZTcwY2E5NDQ0MWYxNDQwMzQ4Zjc2MTA4ODc0ZDEzZWExNDY1MjcyNWFiZDFhOTRkMzE1MzY0NDE2YzkwZTY2MmEiOiI2ZGVlZTkxNmFkNjYwODExY2YwNWI1NjUyZjMyZGY0ZTk3ZjU0NGViYjU3NzYyNjE3MzU5MTU5Y2M5YTQyNWMyIjoiYWNkYTQyN2VlYTFjOGM2NzkxYmU2ZTRkMmI2MGJlMzAzMDJhYmM4NGQ1YzVhMTNiZTdkNTEwMDA0Yjg3MTBjOSI6ImQyN2Q3ZjU5OGExNDIwNWM0NTc4ODY2NWNkMDYyMTM1YjZiNjU1NDdkMzE4ODk1OWUzOGFiNjc1NDAxZDJiNjIiOiJmNzdmOWRlNjBlOTVkYTNmMWQwZDY3YjVkZGUyOWIzMWRmNTljZTk4MGViZGJhZDdiNWUwYTAwNTFmZWUzOWUxZDZmYzQzMTFmMjFlZmEwMTYwMzliYjA1ZjNiMDA5YjIyM2JlNmYyYzAwN2I0NjgzODhhOGExOWJiNDY4YzdiODJjYzkzZGFiM2UxNjBiMmI3MmZkYTEyNDBmY2NlZWEwMWMyNjM4ZTljOGJkMmQxZWQ5ZmY5YjU1YmY2OWZiYTRiNmFlOGU2OTRjMTUwODk2YWM2MjMzYjc1NTY3OTkzZjlhOWFkZjI1Y2EwZjA4MzViOTk5MWZmNGI4ZDNmNGYxYTNlNGM1Zjk4NjZkOThiN2E3NTE5NjgwNGY5OTY0OTJhNjFkYmFiNWJmNzJmODc2NThlMjMwMGExYjA3NzdlZjdmNDNmZmU4OTYyZjZiNjcwOGQyZDkxZGNkZjZiNDMwY2ZhYWNiMzI4OWY3NGNiMGY2NzM3MGJjYzlhZjI0OWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS0zODQsMjU2KzEyOCwyNTYsMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTM4NDoiODUxODY2NTA2OTRmNzQyYzNmNWYyMjhmOTQzNzg4ZjA1NjAyZDQ4Mjc1MTg5MDhmZDA5YTFmYjQ0NWQ4MzMzZGIyZDY1ZjM3NmQ0OGM2NmViOWUwNDk4OTk5ZTFmZjQ5IjoiNDk5OTI4YzQxODQxMzI0NzQ5MTQzYmU5Y2M3Njk4OTljMzhkNmY2ZTY5MzNlNTY4OTg4OTZmYWJjZDgwMjkzMSI6Ijk1NzRjYTUxZjIxODY1YzJmYjBlZmM3NWNjOWQ5MGVjNWU5YzQzMTA0OTc5Y2Q2NGQwMGVhNTU0NGVhMDFjOTYiOiJjMGRmODQwYTE4ZDc1ODRiNjJjNzBiMmYwNTdiZjgyNDE2OGVkYjY3M2NiNTE3Y2Q5ZGFjODlhMGZjODBjOWI0IjoiYjMxZTUwMjAyZjg4M2E4NTYzY2YxMjlhMGQ1ZjhhMzNhYmFkNzlkOGVjOGE5NzE2N2VkN2ZjYTc3OGU1ODkyNDgwNjE3Y2RmNTBiNWU1MTU0N2Y3ZWMxYmVkZTM1MDIwYTMxMTU3MmM2MWUzM2U5YzgyOTY4ZThmNjk1ODZkYWVhM2RjMTkwNjNiZWE1NjUwM2Y4Y2E0ODI5MThkMjI5OTQ5YWNkNmYxYzUyY2NjZGM1ZjdmNGNkNDM2MDJhNzJhNTM3NWYzYWFiZmQyODM0ZWUwNDk0ODIzYmVhZGEyZGFlY2NiZWQ4ZDQ2OTg0ZDE3NTZmZTIyMDdjYTkyMTg2YjUwNjExNWY2ZGU3ZDg0MGMwYjNiNjU4ZTRkNDIyZGJmMDcyMTBmNjIwYzcxNTQ1Zjc0Y2RmMzlmZjgyZGUyYjBiNmI1M2ZiZmEwY2Y1ODAxNDAzODE4NGQzNGZjOTYxN2I3MWNjZDIyMDMxYjI3YThmYzVjN2IzMzhlZWFmMGZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiIzNTA0OWYzODlhMzNjMGVjYjEyOTMyMzhmZDk1MWY4ZmZkNTE3ZGZkZTA2MDQxZDMyOTQ1YjNlMjY5MTRiYTE1ZjczMjg3NjBiZTYxNjhlNmFhOWZiNTQ3ODQ5ODlhMTEiOiIiOiIiOiIiOiJlNzY0OTFiMDI2MGFhY2ZkZWQwMWFkMzlmYmYxYTY2YTg4Mjg0Y2FhNTEyMzM2OGEyYWQ5MzMwZWU0ODMzNWUzYzljOWJhOTBlNmNiYzk0Mjk5NjJkNjBjMWE2NjYxZWRjZmFhMzFkOTcyYjgyNjRiOWQ0NTYyY2YxODQ5NDEyOGEwOTJjMTdhOGRhNmYzMTEzZThhN2VkZmNkNDQyNzA4MmJkMzkwNjc1ZTk2NjI0MDgxNDQ5NzE3MTczMDNkOGRjMzUyYzllOGI5NWU3ZjM1ZmEyYWM5ZjU0OWIyOTJiYzdjNGJjN2YwMWVlMGE1Nzc4NTllZjZlODJkNzllZjIzODkyZDE2N2MxNDBkMjJhYWMzMmI2NGNjZGZlZWUyNzMwNTI4YTM4NzYzYjI0MjI3ZjkxYWMzZmZlNDdmYjExNTM4ZTQzNTMwN2U3NzQ4MTgwMmIwZjYxM2YzNzBmZmIwZGJlYWI3NzRmZTFlZmJiMWE4MGQwMTE1NGE5NDU5ZTczYWQzNjExMDhiYmM4NmIwOTE0ZjA5NTEzNmNiZTYzNDU1NWNlMGJiMjYzNjE4ZGM1YzM2NzI5MWNlMDgyNTUxODk4NzE1NGZlOWVjYjA1MmIzZjBhMjU2ZmNjMzBjYzE0NTcyNTMxYzk2Mjg5NzM2MzliZWRhNDU2ZjJiZGRmNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNGNjODIxNGNkN2U4NWE3NmJmYTczNWJiYmZjZTkyNmMwMzIzZmMzNDhkZTZjMDVlZDE4MDBjMmM4ZjU4YzZiMTAwMWViMWY2YjI5YjM1MjQyYTNmOGZhMmU5MDAwM2Y0IjoiIjoiIjoiIjoiMWVmYTE1ZDY0NGUxYmRmMzRlYWRlM2ZmMmY1ZTljYTQ1MjAzY2NhYTFlNTM0YWM5YjQyODdhODQ2YjcxMjkyYjAzMTAyMjg2ZDk5ZjJiZTY0Yjg5OGZlOTA5MjM4ZjU0MGViYzI1ZjQ5NTIyZjYwZWY3MjNhNGM0MjhlYWQ1MzBhOTdjNjI0MDVjZDVkOWVjYzU0YWM1YmFhNDdhYzRmNjE5NWQ2Mzc4MzNmNDYyZDIxYTY1OWI0OTAzZDljZmE2YzlmZDQ1MTI0NDVmOWFiYjU3ODI4OTlhNmJiNjQ1OTJmM2MyYjNjNzQ1YjE4NjQ1MzAxZmRiMDlhNmEzMzFlOWZiNmQ5NjU0ZmM3OWMxNGVkODNhYzE2ODRjNzU1YjljYjIwOTg4NWY4NmZmMjkwYTcxZjA4YTg0OGI5NjAxNTJmMDViMWFhODU2NmJkMzgyZGRkNDU1MjEwNjI4MzFkN2EwZmIzYThiZDhlMTEyYTkxYjU5NjA2OTBjZDg1ODVjMWFhMTA0NTE0ZTNiOWNiZjUyZjYzODRlODRjMjdiZGEyODAyZmU5ZmI5NTJjYmYyYmQ2MDdmODY5ZDBhZWFhNmIxMzZjNmE1ZjZlOWIwNTIyYjYwMTliN2JhNmFmNmNmZjk5ZmRhNjEyZTAyNDg2N2RlY2Q4YzBjNmZkZTIwMzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImQwNDYyNzBlNmI3OTk3Y2Q1ZjRlOWVkMTE5M2U1NTM4MjE5MWY3ODU0N2E2NjA4NTRjZjYwYmIwM2QwMzlhMzk1MGNkMTQ3YTM0NDVmNmQzMmQxNGNiZmI5ZGEwYzMyNyI6IiI6IiI6IiI6ImNkZmE5NDQxYWE1ZWIxMWZlM2JhNTA1MjhlZDczMWM5ZmY5ZTcwYjc4ZGEwNzVkMDBjNTJkMGUyODFlM2E4NjhmNjZhNTNhMmE2YTI3MmQ3ZTBiMWEzMmI2MzM5ZjhhZmQxMDhiYjllNjZiMDRjM2Q2YmMwNjliN2UwMWI2OTg0NDMyMmRmN2RlYWM2NmU2MDVhOWUyZjQzNjY1Yjc5MzJjNjdjNDE4YTc3YTRjOWEzMDI3ODJkMGU3MzU3OTU3NTU2MTNhMWM1ZTkwMDg5Zjc1OWQ3ODBmYjNhOTg0ZGVlNGUwNmJhM2RjNWE4YzY1MjU0OTU4N2Q5NzVlNTg2YTk4YWM2YWJhNjU2M2UyNzY3ZjFhMzc5MjYxYjlkZDM3OTkyZWE5NjgxODgxZWE3OTMzYjVjNjQwOTMyMzRjODQ5MTQyY2VkODViYmU1OTU2ZjUyN2Q0NmVmMDkxZTRkMThkZjJhNjEwMjYyMWE5MWJjYTUxYmY3YWE0YjI0MjQxNGRjMTZlNzRhZTU5ZGZlNTYwYzE5ZGJlMzE1ZTdmOThiMTEwODZiYzI2ZTMzNmRjZWZjYjkxYzQ4Mjg2ODJkYTkwZDM5MjEzMzZhNDVmY2QzNmVhNGQxMjEzYTEzMjEzYTEzMmJmMjBhYTFhMzk5MWI2MGI2NWRlN2FiOWNjNjU2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI4YzdjODBiMTY5MTYwYzc4MTA0YzIwNWU0NDkyYTk0NzdlNmY3YmExYzNiYjRkYWE4NmQyMjJkZWI2MjQxYmZkMmQyZGNkNWM0MGI0NmZhNTUzY2E2YTJmNmJlOTY5OTEiOiIiOiIiOiIiOiIxNjU4YTc1NTJlNGNjOThjMjI4MDcyODAxZjliYTIzMDEyM2U3ZjFmN2RjYTdiYTgzOWY0NDBlNWY3NTcwZmQyOWMzOGI4NmEyYWFjYTA0Y2M4N2E1NjIwNWI0MWQxOWUzODk5OGI0N2QwZmZiZmJkOWJiNTZhNmViMzFiYmZkY2U4ZDAxZTg5OTFiODIzMTVjMzlmNjBjMjIyMjk4MTYwZThkOWYxNGIxYTYwMzhkOGVhZjE1ZWI3MzEwYjE4MGE4ZTJlOGQwNWVmMDI4NzgyYjU1ZDQ3ODJkNDc3NDE2MGEzOTg5NmQxYTg5NjgyM2Y4YjkyYTk5YWJiNTQ2ZWYwMmNmMTg5MjAwYTFhN2EyZmJiNzAxOWU0ZDhhOTM1MjI0YzIwZDExYTE4ZTBkODg5MDU0OTY2NmY2NTk5YzI2MTUzMmIwMzYwNTFjZjdhNjVkZDMzYmMwYWVhYjhmYTJhYzllZDUyMGY2ZGQ4OTNiOWRjM2NkM2I4N2QwMmEwNTQzZWNhMGJiNTJjNThiN2FjNGFiM2YwMDE3MWUyMWRmZDMzNjMyMjllZDM2MmY5NjBkOGE1ZmQwNmFmNWNhYTg2MDE4ZjlkY2U4MWFkZTYyMzRhNjk5MmJmYjllMjY2MGQwOGExMDNkYWRkN2Q5YWRlNGM0NWQ2OTFhYTM3OTljMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiY2QzOTQ1MDhkODZjMzg0YzBjOTk4YjU4Y2Y3MDE3YjcxMjQyNjk0MjhlNGNmMzk1MTliNTgxNWNjMmQ4ODczNGZkMmNiYzg3Yzc5MDYzZGI1ODhkOTBiOWNiMTU2OWYzIjoiIjoiIjoiIjoiN2M0ZGU1ZmE5NzM2MmU2M2U1MmU3OTBmYjY2ZDRiMDY3ZThjYzE3NDI5NzViYTZmOTE4NjI5NTgzMmQzMWM0ZTBjOTdiN2RmZmEyNjJiOTNiMTA5NjIxMDQ0YTRiYzg5YzlmYzgyMjExZjVjYjc2Mzk3NGViM2E4MTZmYTdkNzg1MzU3N2JlZTFjMzZjMmMzNmFhYmUyODU1OWQ1YmQ4NTY5MWMzZTNiZDYxMGU2MWU0YzNiNzZlMTY3NTI2ZDEzMzE0NTlkOGJmMDljZWI0MDMwNjJjYzk3ZTEyMjllYjNhNzBhZjYwNDlkMjkxYWFkYjAwMjc4NmU3ZDIxYjgxYzg3ZmE2OGE1MWExYjlhODkzOTQ3ODhiYWI3MDc4M2E4OGM4ODNjYTE3ZWNlYWJhNDU1ZjM1N2M2MTFmYjI3OWUzOGY2N2UzYzI3YzVhZGU1Zjk1NzIxZmE3OWZjMmRhMWJkNDRjYTdmMzA0MTYxMzU5ZGE0ZTQ1ZDdiODQ3NjcyYmMxODViYTUwMjEyM2E4MDI1MzVkYmQxNjdiMmM5M2JmOTAxNjI2ZTIzZmNhYmEwM2M0Zjg5NjI1YTkzMGNhYWFhMzA0MDA2NDU2ODBlNTkzMWUwOTRhYWM2ZjY0NjdiOTBiMTNjMmJlOWM5ODc0NGY4OWQxMTMxNTFjZDJmZmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImExNGJlNDE3MDAxMDMwZjZhOWM1NDNmODI5NzE1YjA3NWQwZWZkOGZhMzVhY2M3ZWVkMDJhMTQwMWM2ZjU5ZGZjODdiOGI5MjU1ZTYyZmNkYTZhMzVlNTJmYTRhNmY5ZCI6IiI6IiI6IiI6ImVkMjlhNDliZTU2ZTA4MWY1YjZhYmNkMmNhMWExNmRjMDk2MDcxOTg5ZGU3MmEzOWI4YmQ1NDRkMmEyYTJkYjVjODg2YzBjMjljZTQ1NGNmNjBhZGRiNTZjYjRmMjhmOTU5Y2NiNzE2MzI4MGVmODFlNDhkZDJhMDIwMjRjMzRhMTIwMzAxZDM1OWYwMzg0NGQxYWYwMWY0ODVhZmJlN2M5YjE3Mjg4Y2YzNDUxNzIyOTBmZGM0NGUxMjQ2NzBjNWNhOWU4NTkwZGY2ZjlmNjNkNjA4NDljNjJkMzkyMTAwMzUzMmRiZTNlM2U2YmRkNzVkMjgyMTEzNjVmNmM0ODk1OThhOTllNjA1Y2E2NzFmZjkxNTUyYjU5MTZlYTllMTIyNTk3MjNjMGUxYTYzM2JlMzQ5MzJkMGM4MTZjMzBiNTE5Yzc5NjU2YTcwMzY4YjI4ZmFkYWY1ZWIzMmViNmU0N2UwMGIwNGYxNTJhY2UyZWFmYzlhM2ViZDNiMWIzNzk1YWQ4NWUwODk3ZTQ2YWI1N2MzNjFmZWYyOTA4MDQxZDM2NWY3MzE4MGI1MDVhZTI0MjY2MDNkZWNkMGI3ZGQzM2UyZjdhYzg4NWFjZWQ0MTk0OTk5NjAyZDRkNjJhOTg0MjMzZDA2OTZmZmY4NmY3ZmE3YTZjZjk5M2ZiN2U1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJiOGNlZWUwODhmM2IxM2RiZDFlN2NmMjMwNDQ5ZjI0NmE0NTZmNTA0ZDYzZmQ0Mjg4ODM4YTUwYWI3NjU3NmEzZjQwMDUwMjkxM2NmNTdjYjIzNDFjNWU2YTYzZmU5ZmEiOiIiOiIiOiIiOiJiNGZlM2Y2Y2FlZGY0YWM3YjkzZmIxYzJmMzE2YmFmYTU4NDg3ZjI4YTM3Yjg0MDBmZDFmMzJjOTYzYjA0Y2IzYzdlYjYwMWQwZGQ4YTdlNDUzOGIxNDAzMGZiMGU5Nzc5NGM2MTczNjZjYTgyN2UzYWZkYjBmNzE0OTgzYTZhNzJiMjYxZGI4YmY5OGQ1ZmM0OGZiNTUxNTg2NjFmOTg3ZDA4ZTk1MjkxMzIxMjcxN2NmMjA0YTNlOGNmMTE3N2Y2M2UyYTQ2ZDkyMGZmY2VjNGI1ODBhMTM2MTI1M2E2ODliZjc2NTIwMGY0ZTkwZGM2YjM0YTU2ZTEwY2ZkYmY5MzJmYmMzYjc1ZGExZDU1Y2JhMGM1Mjg3ZjU1MmQ4ODM3NjNiODNhY2RmYzdmYzlkNzYyZjc5Nzc0NzAxZjdhY2U3MDFmMGIyNmM2NzIxN2UwMjJiZjZiNmUwNjAyZTBkNjhjYjEzNzdiNWViY2NiOWE4ZTQxMTg4ZGQxZGVhNjYyNjYzZThhYTA5Mzc4N2Q2NDkwYTRlODg3YTM0YTI3MzA5YzY0YzQwZTRhYjJmMGFjZmVjNGExYjhkNDE5ZDk5ZmI1NzhhYWE4MmRhOTE2NmE3ZDc4NzNlMjcyMjZkYjIwZDMxM2U4NjhiY2ZhNGZlMzg1NGQ2ZmIzNGRlZjdkNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiM2MxZThhMDE5OTc4NmZjMjY4ZWUwY2EwYzA0NDZkNzM2M2JkNzgxMDY5Y2YzYTNmYWVmMjU5MmNiYTA2Y2UxZTcwYzdjNjkxYWY3M2Q2ZDU5YWRkYmQ2ZTNmNjQ2ZDY0IjoiIjoiIjoiIjoiMDZmNDRiZWJjMmMxNzM2YjVjZWUyODNlNTMwYmI4NzdiMjg2NTFkNzA5ODNjMjcyYTEwZWZhODBlMzc5NGVlNDI4NjQ0MDQ4ZDY3MjQ1ZGQzY2E4Yjc2OWI2YmIxOTJjOTQ2OGE5ZmNmMmI3MWM0MTcyODM3MTNkMzllODAwMjI1YmE2NTljMzI3MzAyMmY1MTc3ZmQ3ODY3MTczZjQ1N2YzYmI2NmZmMmMyZTdiYjI1NzRkZmVlNTQ0MzhlMzVjOTg1MDZjMTc4ZDM1MjU5YjA0ZTdjNTQxMDE2ZjVjMmQ5ODAwNzRiNGVhODY1MjAzYWUyZTg5MzVkNzQ1YTAyYWI1Y2NlMDRkMjMzY2JjMTg3MTliMTkwMGYyZTdlOTgyMjliODUxZDE5ZmFjMDJmYTZlNWFjMWJjOTczYjIwYTE3NTA5NzM5YmQ5ODlkNGVmNWE2NmZkOWUxOWUzY2VlZjI0MTViNDk4ODQzZTkzNjMxYjJiMTY4MTY3YmRiYjhkYjMxM2VlZjRjOTY2OGQ1MDAxY2IzNDc2N2VlNDFkYjg3MjE2Mzk4N2MzYmRjMTQ0NjM3YjUyZGNiNzY3ZmZjMTliZjQ0ZmJhZDQ4N2IxZWVhZTc5NTdiNDk3ZmQ1OWE5NWYwOTg4MzE1ZWJhNzNhYjcyMDY1NDJmMzFjNDkyNjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6ImU4YTA5MjViZmNlNjZkZWU3ZTZhNTRmZTAzMTFkMjU5YmQ3ZjdhMjJiODU3NmQ2NDg0MGNjNTFjNzMxMjEyY2IxNzYzMzY1ZGVhYjNhYjgyZGU5OTk2ZTVjODU3MGViOSI6IiI6IiI6IiI6IjYzZGRmZDcwNTA4Y2ZhMjQ3NDA4ZWMyMzFkNTZkZjc5MDVmNjViNjJlNWU1YTgzMDlmZmY1MjM5NjIwZmFhMGYwNTVkN2I4ZmRiYzY0OGRlZDc4ZmQ1NjdjMzE0MWUxNzIzZDE5NzI5NmM5MmQ0M2ZkYzE4YWYwYzRhNTRmY2Q1MjYxMzI4NmM3OGJhN2JkZmQwZmNhY2M3YjExYjM3NDczOTA4ODMyM2JhOTVmMzA4NzJkNzdiNmFhZDIxMjI4MjUzMTMzZDc2ZDI5ZDBkNzQyYmEzNDk5NTZmZTcxZThiYmYzZmM3MTg2YTNmODVmMTQ0YTkwNDBjZWIwNTI5YTcxMzU4M2MxZmNkZWU3NTZkMDEzMGIzOGRmMDk2NGJmYzNiNjY5ZmFiYjZlYzY4NzRkMTdkOWVjZGE5ZmE1Njc4OTBlNDI1NDAxODVlZWIzNDk3YmE4ZGI4MGI4MDNmNjM4MDM0NDJhZWMxNDczNWU5ZWRhMTc3NDg0YWQ2MWJmMGM3NmMyODYyYjc2OTFiNGNjNzRlZmJlMzUyMDNmOGNmNGYyNGFhYWExZDgzMTAzMGYyOGVlZjhiNDllODViMjQ5ZTZmZTgzNTk2NGQ1M2FhNzRkZTZhMzE0MjRlYzNjODMzZjRiOGIzOTU1OTkzNGJmNWYyM2Q0YjFkNDUwYmMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJjNDkzYWQ5NmJiMjBiMjQ4MGJkMzEyMmI0YjFlYTUxMzc5ZjVmYTJiZmQ4YmMwZmVkNDA4MDk5NWIxNjJjNjA5YjZkNjE5N2Y0MzJjODU5NzE2M2ZlYjljNTQzOTUyNWQiOiIiOiIiOiIiOiI3NjRkM2U0NDU5NTA0YjQ5MGViMWRiN2I1YWI4ZTY0MTM2MDFlNDQ5NzUwNTM0ZjRjNGY3MDAyNTAyNmY4NzIxNzAxMGViMTQ3MDVlYWU2ZTUxMzc5NmM3ZjIwZWNhY2UzMmEwNjMyMzg4MjRiM2ZkNjk1NjgxMDA2NjkzMGJmNDI1YTFjNTg1MjIxYzhmNjFhYzY0YWVjY2ZlOGEzZTMzZDE2NGQwMmQ1NDM0ZTllNTk0YjdmZjQ1MTYwMTg3NGQyNjhhMmZkOGRlOTkyMmMzNmU2N2Q4MTQ2ZmU1NTM4ODlhMTVmNjI0ZDQ5OWEyMmY1MTA5ODk2NzU4ZjMwYmI5OGY3MGVhYzExZGExYWQ0OGU5OWJiNDQyMmFjYzViOTcyOTUwOTQzMjRlZWNmNTMwNTI1YzFiYTE1MDg4NmQwNTNjODQwMDRjMjY1NjkzYTQ0MTk2MDJlNWU1OWJmMTIwZGU2ZmYwNTRkMGM3Yzk2YmMxNGU5YjVmZTEyOTBjMDhlYmViY2RhMjE3NDRjMDRhMmU3ODk2NGNiMmI1MmY4ZTZhNzA5MzBmZDFkZWQxZjBlZGJkYTRkZWZmOTFhMzMxMDAxOWU5NjdkZjNmZGJmYTIyOGJlYzk4OTc0MTJhNzQ4MjAxNjQ5MzI4YjdkNzg0ODUxZmNiNWFjMTI1MWY4YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjFlODY4YzVmZTRiNTllNmQ0MjQ5ODU0MjI2YmYxMTIwYTc0Mzg2ZWE1OTBlOWMzNWM1OGQ3Y2NkZmFkNTZkNzFkYmY1NTdkYTY4NDI4OWU5NmNiZGQ2NmNiZDljYjg3OSI6IiI6IiI6IiI6IjIwMzI5NjNiZTI5YzBkMjRjMjYzMWIxY2Q4OTUxMjRiOTgwMWE0ZDVjMTRjMjhmYjM0Y2JmYjFjMjQ2NzEzNGY0OTkxNTNlMmEzZWM4MTdjYzRiMmU0ZTA2MDY4YWU3OGY1Njk2ZGNlZTk5MzM0YjBiNTFlOWYyOWU1NmEzZDNmZDVjNjVjNGNjNzBlMTBmOWUwY2VhMjU3MmMyOGVjNGFmZTA4OTZkNzY4OTMyMmQzYWZkOTMxZmY4MzZiZTQ4NWY3OGFhMTc5MTAwZDQzZDkxMDU2NGRkMWFkZmVkY2QzMmUzZTdlNTNiMDZjMGE0NmE5MGIxMTczZTRhNTE1MmNkOGFhMzhmMmE3ZTMyOWQwMWMwYjgxZTYyYmU2YzlmYzhkMWZmM2RiMDhmOGMzMWMxZTc3YzVkN2ZhZTYxOTU1NWMwZTAyYzY1ODQ4NmUzNWYyN2E3ZDU4Y2U2M2I5YjE1MmI5ZmY1MjhhYjZhNmNkOWI1OTI0MGY1YTdiNmI1MmRjM2Y2ZTQ3ZjlkYWEyY2I4Y2I1MjVkNjc2MGNmNDA5ZWJlMmM3NjQxYzNjMzJlMzMwNTQ1YmNkNzNkYTllZGEyMGI3NTkwZDg0ODMxZDRiZWM4MDdhNTY5OTQyNTliY2QyZmUyODEwNWYyZDdmY2RiM2VlYzUyM2ZkZWY3MDQ0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNTViYzFjNzM1OGRjMzM0YjI2NDEyYWI0NzJkY2Y0MjEwNzQwY2ZhMGVhNjg4ODEyZDhiMWE3ZmIyNTdiOTc5ZWRiYWIxNDI0MGNmNTlmY2M4YTcwMDc1NTNhYzQ4MGViIjoiIjoiIjoiIjoiNmE5ZDMwZDRjYTk3ZGJmYzJkMjg1MmJlZjA0NGJiZmI5NWFjMjUzYjI3ZTU4OGM2N2ZlMTc5ZjZhZGI4MTE0N2NjMWNiNmViYTZhMmM0YWZkNmY4YjNmMWM4ZDQ1YjUxYWYxNDM1ZWJmMWJhODU5NjgzMDMxNDM1M2M5YjRkOGFmZjk2MjBkYmEwMDk5ZmUwYTFlYTQxN2I5N2ZhNGMyODQ5MWZlNmQyYTYxOTE3MjEyN2YxODE1NTg0MGY5MDQ1NmJmYmYxZTdmZjU4N2ZiZTU2NmQ2YjhlYWRkNmNlNTk0YmZjYmFiZWRkYTM3ODU4YTc2MTBjODIzMGY1OTQ4NjE5ODRkYmYxZTNkZGM5ZWNjYzhiOWQyZWMzY2JhMTMwNmQxNzhmNzY3N2VkMzk5YjEwYjk5NWIzZWE1NTU4NjUxOWU1NzMwZTUyZWU4ODgwZWYwZTYzYzQ3NmYyYTgwZDc3YzZiYTgwMmM0N2U5MTc0Mjk3YjI3NTIwZmIwMjdkMTM0ZTE3Y2ZhNmY5OWQ1OWNjNWY1MzczN2NkYzJlNjYzZTFhYzU5YmY3NGE4N2FiMTA2NGU5YWNkNDgxMWMwNDA2ZWM1YTI5YTA4MWJkMGVmZDFlNTU3ZDZiNmM5YzdmZTYxMzFjNWMwMGZhZTgyMzM5YTFmYjkwZDNiZTJiNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJkODk0ODIwZDljYjI0Mzg1OTQ0N2NkM2EzZjZjZGQxMjVhOWM0ZmFlY2U2YWQ3NTZkMjg4YTE1YzVkMjRjMzlkNzc2YzVlYTk4MzhjNGMzNGYzOWYxMmMxYTlkZjY3MDAiOiIiOiIiOiIiOiJiYTIzZjdhYTBiN2Y2YTkzYmMwZGYzMmU2OGU3ODc4NmZmZmI1YWNkN2ZiYzI4NjQ0Njg1Njg3NTNlM2RkZjMxZmMyMTg3YjIwYzIyOWQwZDBiMjYxNTEwZjY0NDI4MTZkMjIyNjAyNGI1NzMwNmI0NzQwNzljOTJjNjZhMDBiZTQ4MmZjMTA0Y2RiY2NlZjA0NTBiM2YyY2U5NGY2YmI2YTUxMjVlMDc3NGEyOGEyYTA4M2Y4MDJkM2M0NWU5ZDQyNTMyOTVmODBjYTRiYzQzOWY1MzlhN2Y4MmVlYzZmZDQ1MGJkMTk2YWI0NjhlYzY5MDI3NTJkY2VkNDRhYjU1N2ZjZDNmNmE3MmM0N2MwZjE4Y2VjNjU0NWFjNjY5Y2Y0MzJlMmRiMzA4ZDcwYTczOTRlYzc3MmEzNGYxNGYyNmQ3YmY3ZDBiZDdlNDQzNzI0ODYxOGVmYTJjMDhhZGM3ZGU5MjMxZGRjYzk3NmVmOGJjYmQxMWJlNTRkZDE3Y2E5ZmE1MTVmZWU2ODI3YmY1ZWZiNjAyZmU4ZjFjZjVkNjcwNzhiMTc2MDE4MDNjNWJlMDVjMjRlZGNjYWQyODM3ZDBiZTE5MWY5MThkNmRjNjI3NDIyNDE3MjhhODY5MGRiNTgzNmMyMDQ1ZWM5ZjhiZmE4N2I3NjhmNGZlYmYyZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjE3ZmFjZGYyZmNhMmUxMTM0Njc0ZWE4ZThkYWE2MDliNDQ3N2Y0MTVjNmExM2E1YzE1N2YzZmI3NzI3ZGRhNmQzYzFkZDg5YWQ2M2U3ODE1ODhlNGIzZjhjYjFmMmY2ZSI6IiI6IiI6IiI6ImY0NzJiNGMyMGJmMDdjMTcwYjNjOGViNjgyNDY5ZTg4NjgwZDFmYTU1NjFkNzJiODY0YzVjNDM4Yzk1YzRjOGEzZTYxZjg5ZmMzMGQ1ZmI0ZTg0M2U1ZWQxMjMwNzc4YjQ4YzQ2N2ZhNDZlYmZiN2I1NjIyMGE2MTA0ODM4MjdmM2Y3ZjhhYzMwN2Y4YWE1N2E2ODkyMmEwNmM4ZmE1ZGU3MzJhMGQwNTgzNWNkNDg2OTBhMmIzZjczNGU0YjdlNzQ3OTlhZDc3NDU3OWE5ZWIyOTYxMTJmM2UyYmI2ODU1MWFmMGU5ZTBlNWUwYmJiMjE5Y2NiNmM3ODQ1OWRjNjhhMzY2Mzk4NzE1NmE1MGU3MmFlYmIyMTlhMWU0M2I1NjAzZGJkODA1NWJmMWU3NmE0NDY4Y2FlZTg2NDg5YWM5YTFhOWE2NmVlN2IxOTM0ODRmZjNiZWE4NDM0MWI2MmRhYjEyNGE0M2UzODk0NWNmYzk5ZjJjNGMxNTU5MGZlMTgwYmIzZTZlYWM1NDQ0ODNhZWY3MTAyNzgyMTNhODNkYTg1YTM4YjZkMTQwZjMzNjU0YzlkNGY2YjhhYjNlYWNlZjFjNTdmZDIyMzdkYmU4YWRmMjNiM2FlZjZhYjMwMzI3Y2ExMTliOWUxZTk1ZWNkMDY4YWFmYWUwZDA3YTA4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiMmMxM2U0NDY3NGU4OWFhMTA1ZmMxMWIwNWU4NTI2NzY5YTUzYWIwYjQ2ODhmM2QwZDljZjIzYWY0Yzg0NjliYjcwMGFjNmE2MTZjMWQxYmI3YmQ4ZmY3ZTk2YTRkMjUwIjoiIjoiIjoiIjoiZjc3ODE2MTMwNmZjNWYxZDllNjQ5YjJhMjY5ODNmMzEyNjZhODRiYzc5ZGQxYjAwMTZjOGRlNTM3MDZmOTgxMmM0Y2ViZGJkZTc4YTM1OTJiYzc3NTIzMDMxNTRhY2Q3ZjRkMjdjMmQ1NzUxZmM3YjFmZWU2MjY3N2E3MWZjOTBlMjU5ZGZiNGI2YTljMzcyNTE1ZmFjNmVmZTAxOTU4ZDE5OTg4OGMzNjA1MDRmZmE0YzdjZjQ1MTc5MThjNDMwZjU2NDBmZWRjNzM4ZTBjYzFmY2VjMzM5NDVhMzRhNjJjYTYxYTcxYTkwNjcyOThkMzRhYzRhOTM3NTFkZGNkOWEwZjE0Mjc0OGExZjBhODFhOTQ4YzZjNmExNjE3OWU3MGI2ZjEzNjMzZmQwM2I4MzhkYTIwZjgxNDUwYjRmZGMxNzUyZTk4ZTcxMjk2ZjE5NDFjYTU4ZTcxYjczZWE5M2U5OWE5OGY1OGQwODkyZmExNmRlNmExNmM2MDIwMzZhYzg1N2RkNzVmOWFjMmM5MTg1OTMyMTAzZGI1NDMwZTgwY2RlOTEzMWU4MTRhMGJmM2YzZTdhMjIwMGE3MTUyNDI0NDcyZmQyN2Y3OTFhODU0ZjI5YWVjYzQ0OGY4ZDNmY2EzZjkzMjkwMjY2ZGYzMTkzZDllMTNlMDg5MDdhYjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiYTNkYTA2YmM4OGUyZjJlYTUxODEyOTJjMTk0YTEwYjNkYjM4YTExZDAyYWMyZjljNjU5NTFkMGM3MWY2M2UzNmM3NGU1ZTNkN2JhMDE5M2JjZDY4MzllOWFlOTNkNzBkIjoiIjoiZGJiNzI3MDc2MGQ4ZDI2MjU1NzgwN2NlNzQ2ZmYzMTRmZDA2NTk4MTQzNjExYWI2OWJmYzdlMTBjYTU3ODRiMyI6IjhjZGVhODgyZjg5NGU1ZmRjNWYwYTBiMTZiN2Q5YWM4Y2RlMzVlZDE3YmNhZjI2NjU1NjRkNGVlNzQwNTllMjkiOiJjYjcwNmI5MGU4ODM4MGU1YzE4NjQ0NTg0NTQwMjc4MjFiNTcxZGZlYmEwZGE4M2Y3MTJlZmIxMDdiODc1MjA5OTUxNGVmODdiNDQ4OGZiZmEzNTA4YTAwOTU0YmIwMzA5MDc2NmQyYmJkMzk5ZTcxYzg2Yzc5NjdhNGU4ZGVkNTcwOTVhMjlkNGNmYTAxZjhkMjhjOTdlODFhNGNkNGZjNWJlN2ZiMzJhMGQ2YzIzMGNiODc2MGU2NTZiNzRmYTdlMThlMjA2M2ViZWU1Nzg3OTU4YjI3MmZjNWRlOTNmMGQ2ODM3ZTU1ZjBjMzYwZGM1OTNjODhmZmYzMGE0MjhjYWUzN2RlZDUyZjgyNTY0NmUwNDEzM2ExOTc5MGMzMDRlNGIxZjA0MGUxMDQzOWM1ZWRmNDU0ZTZmNzFiMjNlZWI0M2NkYmU3YjA2MzRiOGUyODNhOTc4MDYwNzNmN2YyOGE0M2RlMmQwZDk2OWIzZWRhMzgwYzE4NWI3ODViOTEwMWRjOTA1MDI1YzljZGI0OTllNTk0ZGUwZjBkM2ViNDE5MjJjMjA5OTRmZTJjNDAzZGQ1YmYwMWU0YjJjM2VlNjY1NGQ2YWI5Y2NhN2Q0ZDVhZTU5NTI1YTc5NjExOTU0N2VhZTZhM2NiZjhhZDBlOWIxZGUzYzRkNWE4MDRlNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0NjJjYjI3NGI3ZGVmMWFjMGY5ZGIxMzVjOGZhMmU0ODU5OWNmZTJiYWRmMmFlOWY2ZDA2ODg2YjI1ZGZiMGNjMjUwNDYxZjBkYWRkOWUyM2NjNmMwOGRkZjRhZTEyYjkiOiIiOiJiMDg3ZmY1ZTIzMDI4NGFlZjRjOTBiNWY5YzQ4ZmVjOTFiNDg2ZjNkOTM2ZDQyMjQ3NWEyYjEyZmY0N2EwNWIwIjoiMTUwYTRjYTM4M2MzODYzZDlhZTMyMTJkZTlhYjlkYTc0NDJmY2Q1MzY3YWYxNTc3MTRkNzRjMTQ5ZjY5ZWI5ZCI6IjEyZDQ3NDBkZDBjNTM1NmZhNzZjYzQ0MWY5MDg4ZTM2MWQzZTYzNmRjN2IxZWUyN2EyNmUyODIxOGVmZjQ3MGUyOGY1MWI3NjU0MDkzOWQ2MjRjYWNmMmUzZmFjZjA5NjdlNzM5NmE0MjAxN2Y2ODc4OWU1M2Y0YjFkMjE2ZmJhZTY3NTgwMWI4ODY5YjA2ZDE3M2Q0MjEyNmJmODhmYmJmZWY2MGFlYTZjNGJhMTU1MzhiMmQ2NGY4ZjIyZjM4OWVlMzVlMDFlNGVhODhmZDdjOWU0ZDEwYzE0NWE1ZjZlNGRkMzNhNTVmMmNhZmJkNWY1Njg1NmVhOTQ1YjNiNTk2YjQ5MDBjZjc4OTM2NzMyYmRhNDlhNTJiYzVhNjQ4YzY1NjFmNDhiODIwNjk5NTMzZDQ4ZmYwNGVjY2Q4MWFhYTViZDI1ZmEyNzdlZjMxNDAyNmVmZmUyZTY1YTljMzhkNDU4MzJjYmI4OTU3OTUzNTc4MmJmNjI5OTMyNzMzOTU5MWEzZTY2ZDgyYWVmNmZjZmEwYTIxYjZiNTBhMzk4YjczN2E4M2E2YTliMzRkZDQ2ZjNkMTUxNjJkZmE0ODhmY2FkZDE4ZGQwNmY4NTZmNmQ2YzRjYWMyNjc3ZWNhNjQxYmQ0ZTA0NGVmNGNkZGY2Yzk1ZjE3MjVmZDhjNjA2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjcyNzMzNzc2NWRiNzA0ZTdiOWQyM2RkMTM5ZTYzYjVhYzk3YWRlYTk5MGI3ZDA0ODgxYjZiMmRlMDQ1Yzk3NGEwMjY1MjEwYWE0ZTMzNmFjMzJmNGIwYTQyOGZmMjcyYSI6IiI6IjQ4YjQ1MmNiYWViOTkwYjZjYTRiYTY0YWU4ZjJhOTFkNzkyYWI4M2FkNDk5MDkzZDljNDU2NmVkOGM3Y2VlOWIiOiJlN2UzMjA5Njg3MzE4MGUwM2M5ZjdiYjMzYzVhZjRlZGMzZmI5YTM2MTEzMjc1ODM5MzAyZDQwZjA4OTBkYmFkIjoiMjFjN2Q0YzI1ODc3OGRjZTY3ZjFhMTM0NjcwYjg1OTVkYmJiMGUwMzZhZTc4NDg0ZDc5NTNmMjgwZjFmYWE1ZmIzYmQyMTNhNTQxMzJhMDg5YTlkNmYxMzc2Y2E4YjcwNjQ0MDI0MDkxODdhY2JkNWRlN2U0ZDcxNDZjMWYwMmY3MzA4N2E2YzYyY2E2YTdlNzM2OTAwYTllNDQ2NGFmMDM1MWJjYjcxYjJlMWYxY2MwNzQ0MGNkNzRmNTBhNjE3NTdmMGIzYmJiOTFmZGU5Yzg5OGU2MmE5Y2VjM2RjYWNhMGM5NGQ1ZDBhOGVkYWMwZjgyYjNjOTliNjVkNzM2ODg0ZmZkZDIzZmZmMWQ5ZDZlODE5OTI1NGU3ODQ1MTRmZTNjMzRkYjUxYTg2ZWViMDZlZjdkZmZjZmJhOWYxOTVjNTJjYzRiMmRiNTNlMGE2YjFiZGJlZDY4ZDg1ODIyYzZjMDM1NzE0ODJmZGI2NTM1ZWVlMWI2ZTI2Y2U3ZDMzNDMzZDNhMTI3MWM1YjkzY2U5YTMxYzlkN2M4MDVlMzYzNWU3OTY4MmZhNWY4ZTc4OTRkOGQxNmVhZDMyZTNmZThjNjI1MTc0YTEyYTdiODYyM2MwMDAwYTc1YzUwNmNkMzY3YmRiYzRlM2RhM2I0NjI5Mzg4NzUwNTBmZjIyNzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOGNlM2Y3N2M0YmE0ZjQwZDRlYjNlODBkMDNmOWIxMzhiZWE3MjVkNDRmN2E0N2Y0YTFmN2VlM2FmYjQ1YzJhMGU4ZmE3NTY4M2JhMDM5NjRhOGUzMzEyY2NjNmUxYjY2IjoiIjoiODMyNjA0MzA4NDNiNTg2Y2ZhNTBhYjUxMTIwZWE1Njc1ZDYzNDAyMDc0ZDQ1YjBiZjgwZGZiYmVjNzRmZGM2MyI6IjA2NDBiNjQyN2JkZDZlYWQ1MjU5NjJiMjI4MzkyYjNjMjhhYmUxMzE3MTlmZWIwYzBmNzM4Mjg4ZWU4N2FjYmIiOiJkMGE0MDJkYWM2NDhmN2E1M2I1ZmZiZWJiMWY1ZTZhMTI5OThjOTk5ODA5MDA3ZjM1N2RjNTY4ZDdjNjUzYmQzYjRkYTc5M2Q2ZDdlZjgwMjMzOGViMzZjN2U0NzQ1NjU1MDAxZjcwMGM0Y2E2OGNkYTA3ZDcyNmRkMDg4ZWQ5OTQ4YjJkNDlkOGI1MGE3MjUzMGRjOWRhYTMzODdjZDY5Y2UzMmNhNDlkZmE2Y2ZjYTk4ZjhhOGI2NDFjOTI5Zjg0YzVmNDA0NTU3OWRiZmQzZmRjZDk5NzA2OGJiMGY5MDVmOWE0YTAwYWNjZjA2YTQ4MzI4MmUyZWI5OWI5NGQ3OGJlNDZlMDdkYzg3OTAzMjA4YmFjMGZhNzUzMjM5MjA5OTdkOWM0ZjljMGZhNGNjYTVlNmIxZDY5ZmRiZmFlOGRiYjUyZDY1OTAyODM4NzQ3MmMxYTU0MjgzZDA3NDk1NDA5NGFlMTFiZDNhYTk3MzYwMDczZWUwMzNkNzAwOGU2M2I4OWUwZWZhNDc4OGVlZmE5NmFiNzI2YWY0YzI0MjJiNzQ3MmZhMWVmYjdkOTViZWM5M2ZjY2I3MzUxNzY4NjI1ZGUzMGQ5ZjUzNzc2MTAwMjZiNmY3Zjk1NjhhOTY1OTY0NGM3ZTY4NDgzNjcyY2E5YWM4ZDA5OTRlZmQ2OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI5NmIwZDNiMTNhNjVhZTEwMTBiZjQwZTZlMmRjNmU2NTg1ZGI4ZmRiOGZiZDJiMjcyNjExZTUxYzYyZTExMTFhZTkzYmFiZGUyMDdhNDI5ODBjOWFjOTAxOGFiMDExNTMiOiIiOiJiNjdjMmVjYmM0ZDRjNDZjMzU3Mzg4M2I2MTMxMWEyNjU1Y2RmZjBlMDFhMTJhMjBlYTBjZmE0ZTkxMDM0YzJiIjoiOWNhNjkxMDNkNWFmNTc3ZGEwNTZkNGQ1ZTk1ZjUzYmU4N2FhZTQ2ODk5MThiZGYwZDAxMTc4OWYyY2NiYTliNSI6IjYzZjA1YTk4MTVjMjY3MTI5OGU5Y2FhMDZiMDc0Njc2N2ZkY2MwMDg4NGViMWIzMGU1M2IxNjU5MzUwOGJiNzVkY2FmZjk5MzIyMzA5MTNmOWI2MmNkMDM2MWFmMTY4OTkzY2U3YjZiOTY3MTE0ZTI2MTJjOGY5YzM3NjEwNDYzM2FkNGVhZTJlOTY4ZTQ1NWI5NmQxZDVlZDY5MjhlZWU5YWNiMjFiYjhmZGVlN2JmNTI1ZjE0M2RjYzYyNGE2NmFkNDJmMWJkYmFmYzE5YjE2NTI4NGYyYzc3MWVkYzU3ZGM5MDkyZmZhZTZlZjhhY2I5ZjhmZGJhNDk2NjA3YzU0YjA3ZjNmZjRkMTcyMWY0NWRiNDNmOGVkNWM2OTU3MTZiNDA1YjU3MDM0Y2Y0Zjg3YWI0ODdhMDEwNTdlZDQ0OWJkOTE4MDkzYzUzMmZlODUwMTVmMGM1ODU2Y2JkN2E0NDBjMzNjNzk2OGRkMjUzMzBmNzhiNjYyNDg4NzM5NTk5NjdlMzA3ZjljOTY5NzgwM2U4YjA5MzlmYWU1MTg3MGVjNTMzZWY3ZDE3ZTIyN2RjYjY4Y2NmMjcwMjk5ZTY1ZWQ4NDgzYjkwNzc4MzFlMDEwZTlkZGEzYTUwZWY3YjAwOGEwNzYyYzhhYzVlZjQyYjdlMmVjYmE0NTBkN2Q2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjQ5OTEzZTA0YjY1M2Q4MmFiYzU0Y2JkZGNkZjg5OGM0MDk4MTlkYmRkYTRhZjkzYmM5N2I0MzRkZDFlMzE5NzA2NTA0YjFjNzZmMzRjYTZkOWRmYjE4MWM3MDU3ZWQ4YyI6IiI6IjY4YjhmNmY3NDlhZDU4OGZmMmM3NDc3ZmQ3YzU1YmU2NDgxMzRkNTdiZTY4NDY2NzRmMjY1OWQ3NTc4NWMzOWYiOiJjZDdiMmQ3YjI0MDcwZTUwMTg0M2YwY2FhMjA2NjZmYmY5NjM3NjA4OTNmNGUyNzdkOTQ0OTkxZWM5NjVmYmUzIjoiNjdiYTAxZmU2OTRkOGY5NjIxZDQ3YmUwZGQ5MTE5Yjg2NTRkMDI4ZTRjMDk1MzQ3NjI5YWZkMDJlOTZmYmU2ZTQ1MzVkMTY2NmVlMDMzMWE2ZGE3OWU3MDM1NzFlYTA5ODNhMGQwMjA1MWJkOTVkZDEzMGM3NzMzMDEyNDI0Yjc5YTBiZGZiY2Y3MmM5Y2IwYzZkNmVlNDA4ZTJmMGRlNDVjYjA4NGQ4MTgyZDFiOGI0ZDM4OWI3OGQwZTNmYmI3ZjNjODg5MWVmNTIyZjA3Nzg1MWIyNDYzYmRmMTM5OWQxNzhkYWUzMjk5YTQzYjAwZjQ4Y2QxMDY4ZTE3ZjQyNjE1YmQ1MDY4NzhlZWY1ZmNkNTk1MWMyNDY0MWI1OGY3YTU2MzI0MGFiYmFiNTc3OWRiMWU0NGJjMmM2NmRkNDhlYTdlNzQ2NjYwMDQyYmY5MmI3MjdkNjIyYmFmZWJjMDVkZTMwOWMyNDgyNGRkZDFkOWFlODYwMzRhODY5NGFlNTk2MmY2MWFiNmU3NmI0MzVjOWRjOGIzNzBkNzA4YWRjNGQ2ZmJiZmM0NDY0NGRhM2Y0ZDRmMjRkM2M5NWQ5NThkZTE0MzUzMWM4NGIxODg0NDViNjg0MDc3NTcyNmM4N2IxYjA1OGRkOGMxNGU0NjQ4OTczZDVhOTFhMTUyYmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNDY4NzEzNTc2MzU2ODQxOGY2ZjMwYWY0MDBkMzdkNzk0ZjcxMmIxMGE0MjA4N2ZkODMyZDg0MGI5ZThiMWY4MThkYWRkMWFiYTA5ZTc4YTE5MjVlY2Q5ZWUwZDEwNmYyIjoiIjoiYWMwMGRjNzI5YzU1MjY2OThmYjgwZjY4NWZmZTkzZTljMjViZjkzYjIyNDI0YzE1YzIwMDQzZTFmY2FmYmM3ZCI6Ijk0ODU1NWQ4YTZlMDQ3M2E3NjliNzAxOWU2OTA5YTg1NjVlMzg2YTYyNGE0N2ExZjljOTZmZjVlNjYwOWE4OTQiOiI0ZjA5Mzg0YmE4YTM0ZjgxOWEwZDQ0NzNjMzM4N2Y3NDI5OTc1M2ZkMTZlMzg2YmU1MWE1ZWU3MGQxYjE2NGJlNmZhNTNhM2ZhY2UwNjM3OWRhMmQ5NjFiZmQ2YmEyMWViNDM3YmM3N2I1Mjc5NjAzNTI3OTBiYmM5NzgyMTc1NDkwMDZlNzQwOWI4NmVlOTdkNmEwNDI5NTdkMjdhMDJmYTVmMDRkZTk0NzkxYmNkN2QwMmNjNjc5OGJjNjZkM2I2Y2Q4ODdmMmE5ODQyMjRiM2MyNzkzODI1NThmZjY0NDU5NzAzZDkzYjQwZmNkYmFhN2FiZTFiY2RmMGI5NWY0YzZlYzY1ODNhODZhNDFmODM3YzZjYmRlZmVlM2RlNDc2N2UzMzBjYjJmNGEwZDg5MTVmMTkyZjAyYzFlYmZjNzgzNDVmODBkNWUwZjIxMTg1YzY0NzM3NmQ1ODg5OTE0ODZjYTlhOGZlNWM2OGQwYjcxYTVmODFiMDhiYjExMmM1NmY2OWM4OTQxMmYwMjgyZWIxYmVkMGQwNWM5NTk2MDhkMWViNmIxZWI0YTc2YTc2YWU5MjdjZmQ4ZDY1MWE2NTFmZTgzNjY4ZjI0YmMwZDE5ZTVkZTg2ODEzYjE2YmZlOGM3NzFkYzlmMTZhN2Q2ZDA0NDFiMzI3OGRlMTM2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0Y2NjM2M2Y2Q3MzEwMWVmYjc4MzNjZTExOTViMjhiM2FhM2U1NjI4ZGIwMmJlMTY2ZjJhN2Y2YmY3ZThlZmRhZDVmZjNmMWMzNzVlZjk4MTMzNmFmMjgyNTI3NTY2NDciOiIiOiI4Mzk2ZWRhY2JlNjI5ODI2YmU0NDU0M2JlY2UxN2VkZTYwMGY3Zjg3N2QxMTM4YWY1ZTgzYzNlYzQ0YjhiMGRlIjoiOTg1NDVhZDYyNjhlNjA0ZmVkZWFjYWExMGI3MjdjZWQwYjBlMjg0YTAwYzI5MDgxYTQxYzBkMmUzNjc1YmFjZiI6ImMzN2VmOTI2NzVhZDk2M2NmNDFlZTVjMTRkODgyNjk4MDgyZThkZGE1YTBjZTlkNTBiODQwOWM5ZjBkMzBkMzI5NGM3YzYyNWVmMjljMzNmMzk1ZGUxNDA0MDVhNmY5Y2Q5ZDczN2EyOWQ4OTJiNjdlOTA0MjdhZjI0ZTIwMGJjOWNjN2I1ZDkyMGFhOGE5M2Q4ZGRkMGI2ZjY5Y2M5OGUzMDNjYTNhNTEyYjNkODgzZWM1NDI0MDNkNThiYWIxYjQyMzJjMzE2OTZlNzJhNzY0ZjJkYzdiMjc4YmJhMDJlZmRiZDU0MTNhMDg1NjM4MzNlZjdhMjgzYWE2ZTVhYjIyMWQxY2U1YzdkZDE0MzYzZWNiZWVlODc5ZDE1N2I2YWVmYzhiZmQyYWNjMDA0ZDE5ZWRhN2NiNGIzODJlNTRiYjcyNTcwNWIzZjUyY2E1YmUwOGRmNDQ1ZDhmNmViNDYzNTNlZjI2MjE3YmQzYzFiNTA4ZjA0OWU4MTBmYWJhY2MwYTc1ZDcxN2IyYmVhOWY2M2NkOGQyZmRmZmMyNzMyMmVhZmM5OGU3ZGUxOGE5MTFmZjQ0Y2QwZTU4NjRlMDg5N2YwNTUwZTNjNDg2NzRkMTFkYmVjYzlkNmQ0YzQyZjc1OTJmYmE0NDA2MDhhZDQ3OWVkMjk2YTZlYTZiMWIwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMCwyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6Ijg1ZWYzMzAzOGUwYmVlM2U0MGNlOGVlZmQzNjQ4ZTg5YzUyMWFkNTM3YjBjODAwMzYxNzgyNGIwOGExNTRiNzVjODlmMDM2ODQ1YTZmMjRmYjlhMTU1MTNlZDI4ZWRhMiI6IiI6IjJjNjc1MTEwYTJiYmNlZTVjNjA5NmNmZDhmMzYzNDQxZTM0NzM2NjRjZjA5NTc3YTk1OTk2OTI4NTE5YTkyOTIiOiJmMWRiMDk3YWJlZDc2Y2RiYjFmZTZhYWJhOTRiYjUxYzJhZjhmNDNjNWNkZDJlYWZkZjZiNDBhMjM0ZDM4OTdkIjoiYmVkYTcxNjJmYjNlMDdkOTZhNTc5NmYwOTEzODg5OTU4OTRmNjlhNTlmMDZhMGM3YzhlYjcwNGI1ZGZjYjgyZjcxNzFkMzQ2MjhiMTE2ZTFjZWIwYjE4MGU2MDUyZDAxZmNiMTM1MTBlZGQ0MDUwZTE1ZDZhOGJiMjdhNWJiYWM0NmQ4ODQ3OTcyZjI2Mzg5NjdkNTNkNWI3NzUyNDUyYmJmMGJlYmI5NTNhNGU0MDIxMmFiNTg3YjhlNzRhOTU5OTAyMWM5MzA3MWFjNTVhMDhmZWFiNzBlZTA0MGMzY2YzMjI0Njg1NzE2N2YxMzQ3M2QyMGEzOGM4ZDZkMzY0ZGE0ZDFmMDQzZTI0YTY1YjJkYzU4YWUyYTU2MjE1YTM0MDgxZmU5MWJkNTU0ZWRmODZhN2Q1ODJiMjI3MzE2NjYyZGFjNmE3MTY5MzgwNjU0NTc2MDA2MGZjMWEyMDRkZjQwZjFiNWRmOTJjN2IwNTYxNTA3ZWNkOTU2MDlmYTUzMTdiYzQzYjFlOWE0MDg4MGEyMzBmYjRkZWI3OWNmNGE3YTJiOTdiZWViOWNkNGM4Yzg0MWQ0ZWYyNjY4ZDg3MGVhYTExZjJmYmZhMGZiODk5YTQyNGYxNjAwYmQ0Njc3ODEzNmRlZGQxNDdmMTI0ZGRlNGQ2NDY5MzIzMzQ2MmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwwLDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNzdhNDhmY2Q4Y2JlYTFiZTE0NWE2NWM5ZTIwY2JjNGU2NjBkZDQzOWM3ZWM3ZTJkYWJjNmYwNDMwYzViYTcxNjE4MmYwNWU4MzRlODRlODk1NjU3MTRmZThjY2YwZGU2IjoiIjoiMWI4MzhkNDYwOTYxYjhmMTYyMzY2N2ZiMzE2NzcyY2Y1MGFhNDYyY2VlYjU4YzM2ZTJhNjQ4MmNlN2FhOWY5ZiI6ImNjZDQwNDhiYWU3ZjgxNjZjMzVlOTMyY2YzYTA5ZmViMmY5N2RiYjMxYWY2MWEzZmU1ZTRlZGI4ODFiYTY5MzAiOiJhZjVhZmJiOGQ2MGQ3N2MzNmMyMGE4ZjRjMjBiNjhjY2Q3ZmRkYjcwM2QxYWU4M2I1OTgxNjA1YzQ0ODNlNGYwOTIzMjliZDc1YWFlZWI2ZmI0ZTY1NTI1NDBiZDc3MmVkYmE1ZTVhOTZkZDIyN2FjZWY3MzI0MTI1N2ZlODc3NGY3NTdjNjczZGMzMzcwNDIzZGU1YTg1YjkxMThiNWFhOTg2ODJkYjZhODlmNTIwMTc0YTI1ZThlNGI3MWY4M2VmNDMyYTkxZGRkOGY2OWMxNDMxYzQwZDI4MmQ3ZTc4OTQyN2YxOGQ5YzU2NzMxMzFkNWQzNzk3ZDEzMzVmZmRhNjQzMTlkNjQyZjVlYTVjMTY0MTA5Mjg5M2E0MDA4ZjA3NmI2NDkxNzA5MTZhMDNlMDZmMDg1NDg0ODYwN2M2YzQ0YTlmMjdiZDNiMTdiMjkzYTkxNGE4NjEzOWU5YTFiMTFjODY1MmVhZTM3NTcxNjJmOWY3MTYxYTJlZTZmNDEyYTQwMDAyNzgxZThmYzhiODAyNDIzMzE1MjgyMjVlNzBiOWIyM2M2YjJjOTcwZGIxMmVhYjYxYmMyOTBmZWM5YjRjNmMxM2Q2NDU0ZDczMzZmNDM5ZDliNGIxZGY1OTI0OGFiODRlM2E3OWQ3ZjM3ZGYwN2U4OGMyMGY5ZWQ5MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNzFjZWExYmE3YTdkYzc5MmNhMzMyODhjY2ZiNjc1NzBkOWIxZWFiMzRlMzUyOTYyMDlkYjIwYzY2NzZmMTc0ZGY0ZTA2MmQxZjY2MDUyMjg4MWFlYjExYTY1MTU4MWYzIjoiIjoiYzk2NjdkMjg2MTRmYTA1ZjExMmVjMzE0ODdjZGIzZDkyNWYyY2IzMTIyMDJmN2Q4NTY5NWE4ZjczMzY1NzNiOSI6IjYzNjNkYzQ4NWRkYjliZGQ2MWRiMzNmYjFiZWFlOWJmZTJkMGU3Nzg4YTg2YjUwNzc0Zjg2NThiYWMwOTQyMTQiOiJlNjI0ODZlMWRjODU0ZjkwYjgwMzYzNWMxNzE4ZjA3NWNlY2Y3ZmQ0NGQxZDMwNGQwMTI3OTc5YjgzYmVlNWU0YWJkYWU5MDc2ZmM1ZWY4OWY2NDM1ZTRiNzJjZWUwNTYzNzJjNjAzZjE2YmVlZDM5YTJhZGY2ZGRjMjU3N2IzMmIyOTM5NmRiODFlOWNlNTdmYjY3YzI1MjVjMmE1OWRlYTI1OWFjZTRhN2I2NTYwZWUyMGNhOGUzZjQ3Njc4NmMzNDQ2NmZmNWY2YjQ1Y2NjOTE2NDc3ZjZmZTk2ZTdlNGJlMjM4NjdhOWZmOWZhMDc2MDlkOWQ4YTVkYjdmNWUxYTA2OGJhOWI5YzgyYmY3MmU3NmQxN2Y3MzUxOGFmZmQ1YzU4MzY4MjMyYmNhZmU2NTA5Njk2MmM1NjE2MTdmNDg5YzhkOTc4Y2IyODY3NmQ4OTMyYTNjMzQ4OWViMGYyZjQ4YTE5MzgyNmVlNzg1ZGM4NTBlNDFiMGNlZDM1OWVjZDI2MzZkOTZlODNmZGY4OTk2NjE3ZTZhMzllMTQxYzEyNGFkMWUyZTVmZGFkMjcxNDRlNjBiNTZlZDcwZDkxNTQzZjMwNDZhY2M4MzFhNmQ1NjkyNmFiMTYzNWRlN2UwNGExNDk5NThjOTM2NWE1M2MxNDQ5MDNkN2VhMzkyYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiM2EyMzY1M2EzNDMzNGRiN2QzYWJiZjc0N2Q5ZDQ3ZDZiMTg1ODlhYjM1MTZiMDYwMGJjOTM1MTdkMjA2YTFhOWM3NGE1MTc2NmJlZWMwNTYzZGI2NTUyNzNkNWRiY2Y5IjoiIjoiODk5MjJmNDVlNjYzN2U3ZmNhZTBhOThkN2NjZGNmMzY2NTBiYmY3ZmUzMjUzYjc3MTYwMTQwNDdhMDk4M2U5OCI6IjVkNzUxOWIzZjQ0MmUxMjQ2MTg1ZTFlN2E1NmZkMzc0NzNmMTg4MjRmM2M5ZDIxNjU2ZjU0ZjFmYThkMjk0N2YiOiJmYTQwYjY5Mzk3ZTEzZDVmMWNlYWYyOTRmYjFkM2ExNWRiOGIzNDUyODZlNTM1OWJiZmZlNWNkNzQzZWJhYjQxMjg0NWE5ZjVlNGVkODQ4MWNlYTE3OGQ3YjY0NzAxOWE3NzI5YzI2NDIyMDk5MWMzYWUyNzZmODJkNmMzMzQwMmYwNjFhYWJkMmUyOGNmZWQ2NDU2NWNjMmQ3ZjE3NzRlMjYyODFkMDgwOGIyODU3ZDFjMTQ0ZDVhYTM2OTQ0YTM4MzU4MTgxYjI4YjkxMTA0NzA2MDEyMDQwNzZjMDJlZDQ0ZWY0MTFjZDZhNzVmZWNmNTUyMjVlZWIzZWY0ZjE3MTdkM2Y1Y2RhZWM4M2Y1ZGVmZTgzNWQyYTIzNmViMWE4ZjAwMTY3YTcyNzMyOTE2M2VlZDM0YjNiMzRiYWRlNzg5NmUyZDBkZTFkYjFiMTVjN2MyYjE3M2VlOGQ0ZjBiZjc3ZjhlOGE5NzNiZTYxZTEwN2RhZjI0MGI5YjdlZGJjNTk5NDY5YjVmNDBlOThjMGQyZDQwYjA0OGNlNDQ2MmNkZWFkN2U4Zjg1ZDE3NWExZjM5ZjhiYWM2MWVjMDBmNGNiNGM4MDgxMjAxY2E2MzE5OTg0MjY0YWRjYTc0NWIxZDBmZWI0NzFiNWQ4ZmEzNWJkZWQwMzM1N2ZjZDdlMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiMjRjZDExZTc1ZjJiMGFiNjBjNWI3YTM1MDIwZDcxNmNlYTJlNGY1Yjc3NDgzMjdjMGNmMzU1YjExODA1MTg5MzM0ODg5ZGMzMTk4ZjEzYzM2Y2Y3YmViNDJiMmExYTZmIjoiIjoiY2Y5NTcxZmVjYWM1ZDc5ZDY1NjE3YTg4NTgxNTcwM2RlMzQ1OWNmNzM5ZGIwOTdmOGZmMmVlNTU3ZDBiMDc0NSI6IjIyODJjYmRiYTY0YWMyYTQwNTNjMDcwZWZkMWRkMDYzOGZjMzFkZmY5N2RmYTE1Zjc2YmMwNzdiZjE3M2E4MjEiOiIxYjA0NjZhZTU3N2MwYjllOTQzNjE2NDM3YzI0YjlkMzJjZWVhZWMxNWJjODM4NDE4NDM1ODVjNjI1NTUzNGE0YTcxYWM5NjY5OGY2MjhkOTA3MjU1ODk0ZjYxOTlmNmQ3YmY0MDVhZmIwZTQ2MzU5YWUwZGVjNzg4Y2E1MjExMTk1MGY4YWRmODhkMzI0ZjViOWE3NmQ3OWU2N2MzNTgxYjBjZjAzMTg5MDEzMzI4ODM3OTQzOThlNmFlYTBmN2RhMWY1NWYzMGNhMzRiMTExMjdlODg1ZTg2ZDc4N2Y4ZjhiM2ExMzQyZDcxZjM3MzhjODQ0NTcwN2UwZGVhNjg3YmFmNzU5YjI2MWVjZWI0ZDY2MWVjOWJiMDA2ZTlmMDhhZWIxY2MwMzU3Y2Q4ZGY1MjY5NDNkNzFhNmQ3M2M5YWU4MGNhNjlmY2MzMDA0YjkxZGZkYjJiNmI4ZDA0MjRjMWNhZDgxNjc3ZDUxMGFjN2E1MWMxY2U2ZjAyYjlhYjQxNDY2ZTM3YWUwYzJhZGZjNjNiMzFmYzJlNDY5M2U0NjdkMzM4NGZlMzU5ZTlmMGZkMGY0ZDA4ZjRhOTAzN2YzZmQ1NDk1ZDg5NWI2ZWQ0MTIxY2NhMDM3YzZhYTg3YTVjY2M1Yjg1NmVlNjE1MWE5MDA0NTlmZjBlYTc3NTUwZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNDkzMWQ3NmE3Y2ViMjIzOGMxZjBlZDc2YmUyNGQyZmUxYTkyNWQxMDg0YTM5MmZjOGM0M2Q5MzUzNWRhMGU5MzUxZTUyYWJiNThhOWJjMzRjNDZmMjU0YjgzMTNkMzg3IjoiIjoiOTJhOGViMDUwMzQ1NTU2ODBiYzkzN2QwZDk1OGU4MjBiMDk3ODUwMDllNWUwNTczOWYyOWQ5YWYxN2E2Mzk3NiI6ImQzNzQ2NWEzMGY4MzdmZTA1ZjA0ZjZiN2FkNGJiMWM4M2JiYWU4M2Y5Yzc4ZjAyN2I0ODMxZjVlMmFkMmRkNzgiOiJhNjE4OTRkM2MzMDA4MWM3ODM2ZGVlODUwNmNiOTdiZjdiYjRlNTZhOGE5NGM3MmQ5YzhiNjkwMGI2OWVhNjhiMzBjNDFhZDMzZGQyMTU1NDM2MWMxNzFjYjk1OWM1NTViYjY2ODQzNjI5M2UzZjFjMTAzYmI3MjUwOWU0M2YyYmFhMTk3NDJlZDhjMmQzZWI5ZDA3OTBjODQ1MDk3YTdmMGIyNzE1YjNkMTI3YTdmMDQzYzRiMjY1YjRkNmZiNGI5YWY5ZWRkMTI0MjdlMWI1YzhiNjgwYTEzNWEzMTU3NjFhYTRhOWVkNTk4YTc2MjBmMzM1ZmQ1OTVjNDBjOTMzNjk2Y2Y5NWI3ZWNhNTVlODUyMGU5MTU0ZjY5ZTM0NDZlYTRmYzNiNjlmMzZmYTFhZTdlYjQ1NmIzNTBjOTNhMWViZGUzNDJiZDQ1NzgxNDJkODMzODI2OGFmMWMyNDBjOTQ0NTc4ODhkMDQ1ZDczMTk2MzQ3MzE4Zjg5ZTI4MTg2NWI4MjY4MzdjYTc5ZGE1YTZkYmM4MTU2OWM0MmRhNDc1ZDk3YWI1NTAxYTFiMTNlOTkwNThjNDA4NDA5NTgzMzFiYjczYzc4ZTVlYzkwYWEwNDY0YjlmNjAzZjExYmM0YmFkZGMyOGI3MWM0MjI4MjE3NjY1NDQ1OGQyZmNhZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDAsMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZmZhNTk2ZWQ3MjVkYWVhOTIyNzM1MTljMjc5ZDBhMjZiZTdmNzdjZWUxZmM0ZmNhNDRkYzk5Yjk3YWQ4MTI1YTMxNzJlNWEzNmViYzY3MWRmMWZjYWFhNTRiZDcyMThhIjoiIjoiNmNmY2NkZDgyNTNjYzViMjg0NzAxZWY4ZDE2Zjg4ODhmNzkxMDAzNzNhN2RmNTBmNDNhMTIyNTkxYmJkZGFmYyI6IjU3OTVhZTViZTQ3YTdmNzkzNDIzODIwMzUyNTA1ZTM4OTBiYWMzODA1YzEwMjAyMGU0ODIyNmRlYWI3MDE0MGEiOiI0YTM5OGMxMTRmMmUwYWMzMzA4OTNkMTAzYjU4NWNhZGNmOWNkM2IyYWM3ZTQ2Y2RlMTViMmYzMmNjNGI5YTdjNzE3MmIxYTczZjg2ZDZkMTJkMDI5NzNlNTYxZmE3ZjYxNWUzMDE5NWY3NzE1MDIyZGY3NTE1N2Y0MWRjN2Y5YTUwMDI5MzUwZTMwOGUzMzQ1YzlhYjIwMjliZGMwZjFiNzJjMTk1ZGIwOThjMjZjMWFiMTg2NDIyNDUwNGM3MmY0OGE2NGQ3MjJlNDFiMDA3MDdjN2YyZjZjZGZlODYzNGQwNmFiZTgzOGM4NWI0MTljMDJiZjQxOWI4OGNkZTM1MzI0YjFiZmRhZGRmZjhiN2U5NWY2YWYwZTU1YjVmZjNmNTQ3NWZlYjM1NGYyYTdhNDkwNTk3YjM2MDgwMzIyMjY1YjIxMzU0MTY4MjU3MjYxNmYzZDMyNzZjNzEzYTk3ODI1OWQ2MDdjNmQ2OWVlYzI2ZDUyNGJhMzgxNjNhMzI5MTAzZTM5ZTNiMGE4ZWM5ODllY2E3NGYyODdkNmQzOWM3Y2VkYTRkZjg1NThmYWViOWQyNTE0OTk2MzQzMGYzM2IxMDhkYzEzNmE0ZjliZmE0MTZiM2NlYWE2NjMyY2Q1NTA1ZmUxNGZiMGQ3OGNmMTVmMmFjZmEwM2I5YzMwNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJlOTdhNDYzMWQwYTA4ZDU0OWNkZThhZjlhMWFhZTA1OGUzZTk1ODU1NzVhNzI2Yzc2YTI3YmM2MmJlZDE4YTRiMjI3MjIxZDVmZTVhNWRiOTgxMGY5YWZlNTZhM2VlNzgiOiI5NDA4NGIxMWQ1NWUwZjljMmVmNTc3NzQxNzUzYWY2NmFkN2EyNWIyODUyNGI1MGVhOTcwMTA1YzM1NDVlOTdkIjoiMjRjODFkNDc3MzkzODM3MWI5MDZjZjQ4MDE5NTdhYzIyZjg3NDMyYjljOGE4NGJjNWFjMDRhZDViMWNjM2Y1NyI6ImM4Yzg3ODQ1MWUyYjc2NTc3YzM2MzkzY2EyNTM4ODhjMTAzODg4NWJiZmRhY2Q4NTM5NjE1YTYxMWUyYWMwMGIiOiI3NjE0MjJkZWEyODMyNjI5OThjMGZmZmZlZmM3N2RlMmQzOTVjODE4YjljZjFhYzJiY2QxMTUzMjM1ZTBkOGI2MzE5OWM1MWUxOTUxMzVhNzVmMWY4N2I0NTQ0ODRlY2M1NjBjNTMyYzdiYTU5MjNjOTQ5MGE0MjNjMTc3NDUzNDU5ZDgxZWZjMzhjZTI5MzkyMjYwNDNjYjczMzA2MmVhZTMwM2EwMDliNDhlZTBjZjNjN2U0MGFiZTJiNTdhNzBhNjA2MmM2NjlhOWZiZmYyMGI0Yzk0YjRlY2JjNWY3NDRhODBkN2JlODEzNDM1OTU4MWQ0NDFkYTkyMTczN2IxMzI5NDcwYjIxNGYzZTY3OWZiN2FkNDhiYWYwNDZiYWM1OWEzNmI1NzcwODA2Y2RlZjI4Y2M0YThmZDBlMDQ5YjkyNGMzYzkyMTZlMDBiYTYzYzJmZjc3MWQ2NmI3NTIwZGQzM2E4NTM4MmE4NGI2MjI3MTdlNTk0ZTQ0N2M5MTk5MjZhNWIyZTk0ZDQ5MGVlNjI2ZGE5ZGY1ODdmZWQ2NzQwNjc5MTc5NjNmZDUxZDM4M2U1NTczMGMxN2ExMjQ1NTVlMmU0NmUxMzk1Yzk5MjBkMDdkYWU0ZDY3ZmZlZTVjNzU5YjZhMzI2ZWVjNmQ3YjNiYTZkZWUwMTJlNDgwNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI1Yzk2NjA5ZTlkZTgwN2VmZWQzMWQzYzJkNjNlMjg0YmU1YzQ0YzFiNWFiODQ2NzI2NjRkZThkOGQ4ZTJmODE4MWI5NWE1MjkwZmRhZmViMDVkYzkwMmE5YTdiZDYzOWIiOiIxMzVhYWZiM2JiYzg5ZWYxZTAwYTJhMzVlZjMyZjEyMmI3NTExY2M1NWQ4NmU3ODIyYTM0ODU5YjYzMGI0ZDI5IjoiMTE1Nzc0OTA0YTk1M2FmMDc5MzZlM2VmZGNmNjA1NGI0YzUzNGRjODY1NGY1NjNiYjEwNjEwNDQ0ZDMwNjI1ZiI6IjQ3MDVlYzc1MjVlNjM5MTlmNzQ4M2ZlNzZjZGY3Mzk3YjE5ZjIyZDJhOWQ1NGI2Y2YwZmY5YWJjZjBhN2M0NmQiOiJhZTJjZmJiMjlmZGUyM2U4YzIyZDc3ZDdhNTBiYTY2Nzk4ZGE5M2JlNGU0OWVmNzhiMzhjOWJlMjQxMWUyZDhhOTk1NGViMjlmYmFkMGE5NjdjNTFiMjZkOGQ3NDY4MDE1MzlhY2ViMzJlMjQ1OWQwN2JhYTk5NDg2OWQzYjZkYjJjODhmYjlkNzI1MGZhYzAwZGU4Zjc5OTkwZDUwMWFkOTg1NTkwMDMxZjdjNDVhMDBjZDliNmQxYjU1MzFiMjM4ZjNhMzFkMzMyMzdjNDBhM2RhMzEzNTYxNzFjYWZkNTJjYmI3OTI5ZTMyYjM4ZmU1MjNkODIxMmRlODAxZjU1NDM0OGEzY2M0NjhkYWNhNzBlMDVhZmZjOWFmOTdmMTcyYWJhMDBiMmFjYzUwZDdkY2I1ZjBlY2JjZTc0MWM3MWE2NWM2NTdlOWQwZjI1MGM0NGY3Mzg2NTk2MmIxYTBkMTk3MzhlOWZmZTlmMTdjM2UwMzM2M2JlZGY1MzEyYzQ0NDM3NTUyOWZhOGRmOWRkNzJiN2MwOWYyMGMyZWYzN2FiYjkzZTZmYTU3Y2FkYmNkN2IyMzAzNmJiOTkyNGZjZmI5YmY4M2IwOWVhMzYwZmQzOTg4NjM5MTUxYjFhYjIyOTM5ZTllYTFjZGM0MTNmN2EyY2YwNGNmMjc3ODM0NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0Y2JiZDA1Mzg1MzU5OTRjZjAwMzU0ZmY4NjA5ZGRmZDA0ZTgwZGM0MTc0Yjk1NDJjZGFiNTIzODVkZDk2OGRkYmVmODE1N2E2ZTNmMjZmMDQwMjI5YTQ1MGY4ZTU2NGYiOiJlZDgxNzI5ZDFhZWY1MjJmN2JmOWMxMjcyMDdkOGE2ODBjZTQ0MzI5NjRlZDQwMjViNWJiYjEyOTY0Mzc0ZjNlIjoiMTI1OTA3M2I1NzM1ODkzNWI3MTQ5ZmE0MzQ5NzkzYzVmZjI4ZDNjZTk4YjQ4M2VjNDg5ODZhYTI4NTQ1MWFiYyI6ImIzNTBhNGU5MzFiYjVkYjUwYTg2NmFhM2MwMWVhZDdkNDhkNTg1OWJiOTdiNjc1ZTc3ZWJiODQ0YWM4MzJlYjkiOiIyMTVjY2E1ODlmNzM3ZGY0OGQ2MDM2MGM0ODA2ZWQ1NDhkNDQ5MzhjMmJmNWIxNzA3MzEwZGY5ODdlZGRhNTFlNTA5MmE3ZDljYTQ5NTUzMDNhYzU5YmZhOTgwYmE2ZTE4MTllZDExNDE5NzhjM2Q3ZGYxMTI1ZjVjNGFiZWM1YjE1YmI4ZjVmZDBlZGIxZjI2YmNlYmVhNWFhN2M4ZDVkMzJlOGE1YjYwOGY2MDlkOWRmZDc2NTA3NGIyM2NjNTI0NTk2YTkxMjI2YjcyNmQ4OTllNDJiZGVlMDMyMWVlYjJkYmFmNjNkMzNjY2VkNjg5MGMxOWI0NjY2MzZkZjA1MDcyZjAwN2FlNjBhMjM2NGRkZTdmODIzMTVlM2UzMGU2MzI1OGI4YWJkMTJmMThiNmFiM2QzODRjYzkzNDllNTZkZmYwMGMzZjUzYTg2YTMwMWFhNzIwNTM5NDE5OWQzMjM4MjA5NmY2Y2Q5ZGI5NjQ2YTkyZTczYzNmZDFlNTNjMjhhOTE2ODMwMzFjMWFjNzJiYjg1YWY1MGJlNjY5ZDBlMWQ3YjA1YTNiZjFmYzk3MjAwMjVjMWUzOWUxZjA5ZDE4ZDJlOTI0N2Y3MjZhYzY5MWExYzIzMjFhNjY3ZTZiYWNkN2Q3N2E1N2NlNDYzOTdkYjFhOTFlNzkwOGFkNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI5YjJiYjBmMzRlNmYwYTMxZWZmMDBlNjYwNGU2Y2E3NzY0M2Y2OTg5NTg3N2Y3NzE5N2EwNmUyYjQyYmYwNDdiM2MxZWU1NWEyYTI4ZmIzNTc5MzI0YTU0NDU4MzEwYjIiOiI4OTVlNzA2MDk1Njc4NGU1ZWExMTNjYTc4NTIxNGJjZjYwOGUyYTUzYzE3NWU2ZWRmNWI3OGYxYWQ5MGU2N2M2IjoiYzBiMTk4MGQ1N2ZiNzk3YzQ5MDdhYWQxZmI1NjYyYmNjOGQ2ZWUzMGY2YmVkOTUxZTc3YzExZDE4OTMzNDZlOSI6ImFmMzM1N2ZkMjFmYzA0ZDFkMWJkMTYyYjk0YmYxMjljNDVkNDFmZWU5MDM2NmExODBkOThkNDEzMjUzMzZiNWMiOiI1MDk0MWNjMTA1YzY5NGRkMjZkNWJjNzNjMDgzOTkxNjhhMjcwNDI4ZWY1OTRhNjk2OGZkZTgzNGU4ODljZmJiZjBhODBkN2RhZDY1ZDJmY2EyMWJhODAxOWYxMDExMzEzZmU4Njk4M2E1NTVmYjNjY2I2NDNiYjc3MTcyNGUwNDExNGYzMjY2ZDcyYzJlMWE3NTM2M2FlYmRhOTg3MWMzYmFmY2VlM2YzODlmZjRjNmYxZjFiYjVlNmRhNTM4OWUwNGYyODIyZGE4MDBjYjA1OGRhOWNkNjk4YzY1ZDU0YjE2ZTc1NjJjODM1MDZiNjMyZTRiNWM3YTc4ZDZlMzZlYzMwN2U0OGNmZWM0ZmJjM2NhM2RkNjdjYTk1ZjliZDdmMWQ2MDllMGE2ZDhiNWJkM2ZlZWYwMGUwYzQxNjVlNzdkYTg0Zjk4OTIxMGM3OGRhZjYzM2FlZjY1Nzg1NWZjYTI2YjgzMjk5NDAwMGY5ODBjMjFkMzU1ZGIxMGY3MWY5Y2JiODA3OWM0OGFlYjY3M2M1YmEwOTdhMzI1ZDlhODllMDViYmY5NjBmZWQ0ZjhlYjA5N2NmMzdmNjE5MDBkYjgxNzE2ODUxMDdkNTNmODViYmQ4YzFhNGExYzcwNDVjOGI2ZTNhOGEyYzQxMTQ1NDIyOTI1NTU1ODVhMDkwZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI5YzgzMDZjNjk0MTA5ODQwOGM1NjUxOGE0NGQzMDc1YzIyZTAyZjE5YTYwNDFkMmU5YzRlMjk2ZmRhNDM1ZGI5MTdjOTlkNTM4YWI2NWY2ZjFiZmFiMGQ0NzlhMTgzM2EiOiIzYTgwZTlmNWI3MWIyNDJhZTA3Y2U3YjYxNzA1N2RhYmFlMTg5YzU0NjhkYTJjZjA0OWI1YjUyOWFiYzg3N2Q1IjoiM2MxNTFlOTJkZDMxMjFhOGQyZDExNjA0NjMyZGYwMGNmOTA3MDZkM2U4NDM3Mzc0NDVkZTBmMmZkZTFlYTkyNCI6ImY1M2NiNWZlNjczMjAxZjVlYWY0MTE1MzgyZDQ4YmE0NWJlNDA1YjM3YTMxYTU2ZTQxZDFkNzYyMDIwMzhiMDYiOiI5YmYzMTE1NmU1NGQ3MTQyNDkwZTYyMGFmZWMyMjE3OTMxZmIyMzg5MjE1YTM2MDliMzg0YjA1NTFiYjNjOWQ5MGMzYjMwNTMwNTQwNDZhMzI0ZGI5YjM0NjMzZTQxYjY2MTE0YmZhN2VlODZiYmQyMmQwOGQ1M2UzNDlhNGRjODc1MjY1YjMyMTUxZDNlNDc1ZGYzNDhhMjJkNTIyNjQ3ODE4NGYzNzJiMGJhM2JlOTJlYzFiMjg0ZmM2NmRmYTM2MDk0NjMyMTRiNmI0NjhiMjk0NzhhY2IwYzU1ZTFkNDY3NDg4MmNiNzVlM2VhYTNhNjZlYTBmNGQ3YjFhNTcxMjA2YTc2MWQ2MzZiZDM1MTlhZmI2ZjA1YTBmMWI2YmIzOGMwMGJkNjg1MzBhNmM5YjQ0NWI2YjRhOWM3NDU3YTA1NTYyN2I2MDZmNDUwOGVkNjc2ZmI1YmEwZDI3NTg5YjdmNDY0MjcxYzNlNTYxMjE1OTA1YzUwZWM0OGY1ZGRkMWI4NTQ5ZThkMTYzNDUzMDgzZGI5NmM3ZWM4ZWVlZGFmNjgwNDM2OWU3Njc2MGIwOGFiY2NhOTM3YzQ5NzkwMGJlMzg1ZGI4ODA0YjQ0M2U4YTE0ODliOGYzZTNlNGNmMzY3ZGFjM2UxNWNiOGU5NWNkYWJhZDA0ZjA4ODU2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI4N2E4ZmNlNTIxZGYwYTJlMjZmMWIxZjljN2VjOWU5ODk2ODQ3NDkxNWEwODVhOTVjYmRjYTdkOGM2NjllMDhhNjliOGMzYzNkZjA3ZjlhZGEzNjhiZTQ0ODkzOGJmOTIiOiJiMWJmYWVhZDA0NzQzYmRjZmRiMTkzZDMyMjYwOTE4ZmY4MDNhYmJjYzBkNWRkYzUwNDM5YmQwMWY2ZTQyYTNjIjoiMTJhMDczODRlOWM3NGZiM2YzM2RmMWEwODlkZGRiN2Q0MTYxNTFhMDI3MGQwYzAyMTZlMDg1ZjFlYzRjMjQ5YiI6IjliNDI1NjcwOTMxMTJjYjU4ODk3MDNiNzdiNGIzNzIyNzZiNWJiY2NhZGY4NmVlYjllZjZkM2NkMzk1YjJhY2QiOiI1YmE2NjIyNjBhYTBmNzQzYTMzYTliNTUyY2U0MWQ5MzMzNWE4NTVhNTVkZjExYjg3MGVmYWNiN2Y3NWUzOWM5NzhlNzMwYWNjZTM2NjRjODE0YWMxMGZhMTA5ODlmYjAwYTM5YjU4NGJiMTRjYWQyYzAyYzMwOTcwM2M4ZWE4NzY4ZDQ3OWQ5YjRlMTc0MDJlZTM4Y2I4MmM1ZjRkODAxMjVmM2U2NzRhYzFhZGI5MTljYzhhOTg4Zjc5ZjUzMWIwODI1M2ZiYWQwYTFiMjdmYjE5OTdhNGUyYzdiZDVmZjNhYmY2NjI4MWU4YjYwOTg3NTg3MzI3YTkxMDFiNzZjZDEzNzcxZTIzZWUyZjAyZGMzMzk1ODliOWFhYzRmNWFmNzQwYWZkYWY0OTQwMjFjMzUwNGZkZGE4ZjkzZjc3Y2RkODI2MmRmN2Q0YzQ4Zjg1YjZlYjAzYTdlNTI3OWRiNGQxOGY2NDVhNjNlYjZmNTNmOWZiMTIzYzUzYTc4Njg2ZjAxMTNhMjA5YjZlZWVmM2IxMGNkNDQ4OTg3NWEwN2FmODYzYzQ2N2YyNWI2OWNkMTNiOGU3Mjg0NzQ2NWZiYTAyNWUyNWZlN2JjYjQxNzQ1MzY5ZjI1NWRmMGVlZmZjM2U1ZjA2NjgxNWVmNzcxNTY4MGIxMDRlMjBhN2U5ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI2OWQ2NjdiZGU3OWU0MWNiNzg3NDI0MjZjYTVlYmQ0ODA4NmNmMWRlZDVjYWQ3MjkzZmNmOTEwZTVhYjIzY2M4Y2FkNzViZDk4OWMzZmZkMDU4MTdkMWFhYTU0OTNjMDUiOiI1ZjcyMzQ2ZWI1MGVhODJjYjExMWQ1YjNjOTFkYzliN2M2MWM5MmZhMWEwNjIxNzdkNTEzZmI2MTZiMTIyNmQ1IjoiMDQ2NWI4YWE4OWQ5Y2JiZThlMWNmYTJlNjRlNjRiOGQxZjVkYmVjN2Y3MTBhNmQzN2ZjZTg5OGUzZjgxZTU3YiI6IjE3MzEzNWYzMWMyMzIwY2NjZjUxM2U4OGEyMWYyZDIwN2UwMGNiZTQzMzBkMmY1NTBlMGJlNzc0MDVlZWY0N2EiOiIzNGEwOGQ3YTU2NDUxNWE5MThiY2U5M2NhZTA4NGYyN2E1NThmNmYyMTRjNGJjOTE2OWRiZjUwN2MzZjExZDAyZWM5N2JkZmQ3Nzc5NjBmNmI0YzQ1NDNjMWUxNDQ1NmQwMDc5MjE1MzIwYWI2MDdlMDRiNzUxOTA5MGViYWYzYTVmYmIwZDdhM2ZkYTFhZjZjZDhjNWQ3ODU1MjRiZGJhNzVhYmJlNTBlM2Q1OGU1ZjA1ZjhmNmIyYzI1NzBmMTE3OGFjZDJmNGMxMWE3YjFiOGI0ZWJlNGRkYjcxYTg1YmYxOWJiMmZiMjUyNDEzNzQ1MzBjYmM2YzA2MDUwNjZlMTEyOWEyZDM5ODM1NmNmMmVjMmY3YTI4NmM1Yjg2OWM3MDJhY2VkNjNmNGUxMmYzOWI3Y2UyNTA1NDdhOTIyODcyYzM2MjY4YTNhNDY0OWY2NjQxOTg3YmI3YzZiYWYxYTNlODJjZGYwNGQxMTE2MGJhMTFjNWEwMDJjZmJjZjRhODY5ODI4NmZmMzE4ZWMwMWZjMmM1ZjY2NjRlNTA1NjE5OTFhNTMzYWQxODNhMjFlN2I5N2UwMDUyYjAzNTBkMjEzNzM4YjBjNmU1NDIxYTUyNDg0NWE4NjFmNTM5OTMwNTQwY2M0MGM2ZWQ3OGM0NmJlOWMxMjJlNzk3NGQzNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJmMWY2ZTVhNTVmYjIxODBkZTQzNmQ0ODExNWFhMWFhMzhhNjI0MmVlYjA5NTlkZTM2OTBmMjU5YzFkODM5NWE1ODYyZDFhYzQ4NDM0MDRkMjUyMTVjODNiY2E5MGY0NGUiOiJmNDY3ZWYwODNjNzQ1YTFiZmM5YmU0NGYxZDQ2OGIyNTE4ZTNmZjFjMGNlZTY4MTlmZGRlMzU0ZDQwNzFiMTdlIjoiZmRkYTlmMDg4OGM0NDM5Y2RlZDE1YTc2ODMwMGQxNjNjMWUzMjZlZTU1NzFjMjJhYjk1YWIzZTQ0YjE2NzZkMiI6IjZiOGQ2MGM1NjU2MDRjOGZhOGQ3YWRhZjBiMDdlZDI2OGE0OTFmYjc5Nzk0ZDI3NzAzNTZlMTkxZGFhMWNiNTAiOiI1NWQwNzg4NjE0Yjc3MGY0YjhjM2QzYWMwYmJmNjI4ZjI5NGJhMmZkMTY2MTJiNjVkMGY0NjlkZWQ2NjVlM2M4YjgyYzk1ZGI4MGNjNmI0MTBiNWE2ZTYyNDE1MWZjNTBiZjAyZjI3OWZmYWJjMTlkZDA5NGNmZmIxN2JhNDRiMTEyMDliOTIzZGYzMjZkYjE0ZWVlMzVhOGJmMWVjYTM4MDdhZmFlOTE4MjA2ZTg0NGU1MTdlYjMyYzIwNzM0MjAwOGEwZGE3NDJlNzM0NDMzODY3ZmQ4NmZkODlkMjdlYzZlNTFhOWRiM2FkMWFkZWE2NDVmZGM1NzE3OWM0YjcxZGU4YjQ1NWFlMDBlZmMwOTMyOGEwYmZmZDhjNjFlMzg4MGMwMDc5MTU5OTdkYWVlZDRhZGJhNjFiNDQwNDBmNmY5YjZjNjQyN2UxYzIzMzU3YzhmN2UxOGI1Yzk3NGIzYzM0YTJmZDVjYjVlNzBmNDhkZjJkMTBjMWRlYWJkOTg3ZjgzOTBiYjMzODU4ZDlhNTEzM2E3YmQ3OThiMWM3NzQxNzI5Yjg1NjJmZWNiM2Q0ODMxZTljZTEwMWRlMTkyZDY0YmI1ZDc1N2NiYjIxMDkwZDY2OWFmYzU1NjZjMWQ2ZTI1NTg2Njc4YjVmMmZjN2Q2YzYxMTNhYzRlYjU0ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiIwZGI5ZDQzNzE1MzE0OWUxMDFkNTgxOGIyNjNiOTc1NzM1OTk0ZGZjMzNkOGIzZjE1OGEwNTc2MDg2Nzc1N2FiNDM4YTUwMjRlMWQ0MzAwNjIyNjAxOGMzNzhhZjU1ZDMiOiIyNzViZGM1ZmM3OGIwZDhhZmI1YzhhYTVmNzg1NGMzMTlhODFiYjhjYzkzMDAyMTBhOTk5MGZiNzkzM2EzNTJlIjoiODA5ZGE1NGQxODMwNTQ1NjcyZjE4MGZhM2UwNDQxYTBkM2ZlNDcyZTdjZDdhNmQ3MDdmZWU1YWY3ZTliMjFjMiI6ImViZTY2Y2VlNmVmYmY1ODNjODgxYTI1ZTM0NmNhN2Q5OTc0MWRhY2ZjZTBkODc4NWM2NTllOTI3NzRlMjZmZjIiOiI4NzhhM2QxMDlkODE0ZmY0YTQ5MzU2ODljYTk2YjNkNDQ0YmZjZWU5ZWRmY2Q5MDMxMjU1YWQyNTM4ODcxMDI3MjczYmFkNTIyNTg2NGU4NGYzYzJhZmFhMjJhNDBlN2Y2NzkzYWJiYzQ5YzhiMGRkYzdiMzBkOWRjN2I0MDg4ODhlNmI5OGY0YmM3OWUwODc3NWI1OTk2NjFlYTRiNTA2NjkxMzJjMjEyNzJmOGQxN2ZlYzlkMWU1MzEwMzM1YjBlNjQ4MGQ3MDc1YzgzMGE0NGVhNTI4OTAwZjk5ZGU2MTE5MWI1YTAwNmNhNDM0MDM1NmRiZjIwYzYyZThmZmQwNTc3ZDYyMzE0NmIxMjkzN2U4NGE2ZTE3YzBhZTA4ZWZkMzM5YzlhYTk3OWM3ZTIxZTljNTZlMDE5ZjdlNGYzNzViYjYwMWIxYTgzYzIxZjI3YTU1NGVjMDUxOTE3OTRiZWZlNTE0ZGZiZmY1YTNjOWEwYTljODBiZmU5YjZhZGM3ZGVmZmQzMWM3MGJhMTNmY2YxNzBhYmQ2YmYzZDM4NDM4MWUwYTMxZmE5YzgxYjFiZDIwN2VhMmUwYjQxNTNiNmExMjUyYTlmNzNmMTlmNmYwOTlmZGEwZjg3YmFiYTk5Yjk3MTFhMDBiNWY1MGFkODhkM2JjMWM0ZTgwNjQ2NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI0MTA2ZjZiYTZhMjkxZmE1NGU0ZWNmZDlmYTYxYjk2MTU1NGU0ZThlMDNlMTlkOWJmZDgyYmQzNWMzNDcxZThiYzViZGNkMmY4MTAwNzljMWJiZmU5MDY5MjllODhkMjciOiI1YTdlNjFiODZjYTcwOTM5ZTY0YWY2MTNhNjY3Njk1YzdjOTE1ZTY2N2M3OTk5OGU3NmU1NWViMzNmZWY2ZDg2IjoiODZjN2Q1ODgzYWVlNTY4YWE3NGQyNTc4MjAxOWZiZDZmNWFjZjQxOTY3NTJmZjNkMWRkOTZlYzFlNzQzNjQyNCI6IjNhNWQ4MGU3MzlmNWEzMGU2YmI1MDdkODJiNjBmZjk4N2Q1YmQ5Y2JiZmY0YjQ3ZGFmZjI3OGEzMjUyZGIzZWYiOiJmYjE0NjE0NmY4MjhlODgwYzZlYzdhYjVhNjVmYzhlYzRlNGQ3ZDk3NWM2ZDdjMGE5YmM3Y2UwNDFmNDk3OTliMTFlMjM1ZDdhYzVhNGVjNGVlYTcyMWMzMzIzNDQ4ZTY4NmFlOTY1NzkyMzNhZDY5OGE5ZDZmZTNmNWIzN2Q4N2NjZmNlNjQwMTkyZGNkYjUxYzdiZjM1NDA0YzkwYjcwNWJkOTc0ODJkOTVkMWMzZTNhNDAxNTJjODZhYjkyMzU4ODg0MmFiMDJmNGQ5MjIzMThhN2ZiODQ0NTNiMDcyYzc0OWE3ZjU0ZThhZDAwNWMyOWM0OGFmNmYwMWVjZGQ4ZmFjMTMyOTVlNDJiMjA3N2M3MGM3YmY1NGUyMTQzMTdmOTgwMDNlNGNkZTA3NzU1ZTk1YzkxZjE5NTNiMjliM2VlY2Q0OWRjNzUzZTc0YWFmMmIxYzgzZmVhZTg3NDI4YmU2YTVhYWEzMjYxZjBmNjU0OTFlMDRjMWZjZGZkNTQ4MWVhZGFiNjhmMDU3ZGYzYzgzNjk0Yzc0NTFmZGVkODZhMTg0NzBiMDZmMTc3OWMzOGVmY2FjNTRiNTc2ZTk5ZWNlZDNiNTU4MWViNWM5ZjdiMzM0MGFkNTY2N2QxZjBkM2ZlYWQ4Yjk0ODRhMDMyZDVmNzRkOTAwZmQ2NGQxMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNWQxZmNkYWJiNzBkYWQxNDI4YzhiZTI5MTcyMGM5MmI4NTY1ZjMzMWVlMzQzOGQ3OWJjZGRjOTY4ZWZlZGNkYjkzMTlmNWVlOTExMjRiOTNiOTY1ZDUwNDIxMWZlZjA0IjoiNmM4YzhhMDY2YzYyMDhkYmMxOGE0MGEzMGI5ZjY4OTA0ODg3N2UwMzhiZjc2ZDY1YWNiZGRlN2FlNGM1NjZmOCI6ImJmYTJlOWViZTBkNzBkM2I2MmNkYmQ3OGM3NzVhNjJlMGUyMmZhNzVmMTY4MTIzYTMzNmI2NmI5YTJiNjhjMDYiOiJlNDhiNTI0NWVhMjQxYmFlYjdmNjY1YTlkYWFhZDY2MmQ3YjI0MjJjM2UzNzExY2ZiZWQ4MWQ3MzY5MTg2NGVlIjoiMTU4NmUwNzYxYzRhMzkwMTNkY2I1NTJhMGUzNjNlNzA5ZjQzMDNjMGU1NzU2NTNjOWIyNDBiZTc0NDllYTI2ZTRiYjFkYzkzZjA2ZWM5NThiNmMwNjIxNzc1N2ZjNTUwYjM1NmMxMzUwNjNjMDBmY2U5ZDg1NmFlYzBlZGQyMDczNWI0NmI3YzlhOGU3ZGY3ODBkYjMwNzJmYzJiMzE0ZmE1Y2RhNjUzYmEzNjkwMTMyZjEwZDMwZWU5NGM4NDU4ODQ2YmU3NTY1OWVmMzg2ODA4NmJjZjU0ZmY1NWE4ZGIxZWE2NWMzZTc0N2E4ZGRhYjNmMjMwNDczOGUwYzc1YWRmYzEwYzIzYmE2NTFjY2YwZGU2NGEzOWNhYjNiZWVmNjY3ZjQ2NjM5MWE2MWE4N2E5ODFhZmU4ODNmMDljNGVkYmQzZWFlOThkNTFjZDNlN2IzMWVlMTc5ZjhhNGUxMGZlYWM5NmVhMjEwYTRiODQxNWM5ZjJjZmViMmJjOGJmNTFmMTM4MDFkYzU0MmJhMWJhZGRhMWMzMDE0MWQ3MmFiYjFiYmIzNWM5YmI0ODFkOTFkYjU2OTFjNDRiZjM1MjZhMDJkMGJmNzc2MzA0YTk1MTg1OGFhMmZjZjNmNDViYzY1NmFiY2FlZWE5NGNiZGM4NTFhOTE0YjRiM2EzZWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjlmYzU4ZDA3ODVhZGJmMDMzY2U2NjQyZGNjOWE4NjFkZjQ0YTM1ZTg5ZDA2YjM0NmIxNjUwNzRhMDQ4YjUwMDk5NGI0YzBiM2UyNzMwNmI4YzgwNWM5N2IwZWExNGJiNSI6ImUwMmY3YTg1NjI2NjE5NWZiNWY0ODEwMjMyY2Q1YzcxYTQ0NjVlMWQ5NTYyNWMwMWU4ZTdlYjY5YzYzZjY3OTYiOiI3Y2QxOGI4ZDAzNWI1N2JkMDE0NjQyODBhYmU4OTFiN2ZhZjU1ZjllZDk5MTBkOWExNDhiMDMwMzQwYzY3Y2RiIjoiOTE4YzRkNDNmZWNmOTkzMjI3ZjdjMTIwZDIzOWEzMGQzYzMxNTYwMjgwMGQ2ZDU4YjllOWUwNzE1OTY0Y2ZhMyI6ImI4YTM1ODFlYjRhMjA4ZDFhYjhmMGU4NGU5ZmYzZDJlMGJhNTc3MDNhN2I1YmUyZTRmM2EzZWRlMmUyNTE5ZjVlNjA2OGMyOGM0MTE3MTQ0NmNmYmM0MGI0OGE5N2JjN2E5YTFlNGQzYjAyZjQ4ZmJmNTViMWQ2M2RhN2NiYzViN2E5NWYzNTRhZmRhMjczZGJmNWJmMDk5OTYxZGI0YTRjNWYyOTYyODZkYzBhNTEwOTFhNTIyMzk4OTczZDU1MjdiMmU1NWUwNTIzYzIxZmZmZGQwZGQzODUyN2JjNDU5NTlkNWE3MTFkNTQxNjM0ZTMxMzk1NzczMTJkNjc4NDIxZWIzNzU1M2MxMjdiZWVjNjQ0MjIzMTZlNDg1NDJhOTA2Y2Q3ZWZlMGQ5NmVhZTNjNGYyZGI3NjY2MDgzZDkzNjVhNzZjZWU0YTIwN2Q3MTJkZGIwNGJmNzc1YmUyOWVkOWYwMzBlYWRlNDUzNzk2MTczN2UzOTM5YTE5ZTA3NjlhM2E4Yjk2ZDA1NTEyMGM0OTkyNWZlMWViYzRhMmFkNTQ0Njg0MjFkZDU0NjVlODc2MWIzZTJlMzg0MzczYTk3MWU0MDhkZDNhNTQ5MDc1MzhhN2Q4ODc5ODY2NzdlYjE5Mjc2MTk1OWE0MjkzNTIzZjgxNjQ3YTY1N2FhZWVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJkNDM5MjdkMWU2MzNmYzM0MzM1MzZjZDAzNjE3YTk3YTNhMTBhN2VjYWQzZjBjNzgxNjAyODI5ZjhlYzdmZWIyZGQ1OTIyZjJhMmRlZTUxZGI5M2JjZjM1MTAwYTgzNjQiOiIzMzM1YTAyYWJhMWVhMjhkMmU1Njk3M2UyMTEwOWUwYWRmYjUwNjg2MTNjNDQ3ZTYyNWZkODNhOGQwZTM0NDk0IjoiYmZkZTMzYzUyNDA3ZDMxMzcxMjM4MTJjNDgxOGNhMWU0YjYxODc4YjhmOWRiYWVjNDc5MzVlMzk0OGE4OGQwZCI6IjQyNTk3Y2YwM2JiZWUwZTAwM2Q4Njc3MTU5OTE4ZjUzMTg0MDJmNzMyOWYwOGUxZDkzYzg1MGUyYTJhMmYxYmIiOiJlNTNjN2QwYjM3NmE5NDgwOWY0NzI5NjFhY2ZmMzE0MDc5MDE0OTU4OTM1Y2Q2N2FjYzQ3NmFiZGQ5MTlhNDNjZDNmN2QxNDYyZDBkNmU2MjhlZjVkMGM4ZTA0YTZkMjQzODM4YzYxZWEzNmIwMTVlODRkN2FkNTllNDliNDVjOWIwNGY2ZWM3ODY4N2JhNDcxNTZlNDI5YjJmYjZkYzJjMGRhNGY1Njc3ZDFmNjg5Y2QyODYxMmNmYTZkOTU2MjhjMjZiNWIzZTAxMTg2MTUzYTFjMjVjMDJmNWNlNWZjMjg3NjIzMzU4Njg3ZDIwMzQzNDdiMjQzM2ZmYzE0NDVhMmQ5M2NiMDEwM2NjZGFmMGM1ODVmN2Y0ZTdkNDFhZWYzMTBiZTEyNzIwOGIzZGE5MDUyM2FjZWFjNWZhMTNmZmU3N2VhYTRkMWZkMDU4OTU3YzhkZDJmMzU1Y2FlN2Y5ZTNkOGYyOWVjNzA5OTU5OWJhNmM3NTU2ODlkNTNkNmNjZDg0ZTMzNDA3YTA2NjUwNmQ5N2RlY2Q3ZTMwNmQyMmNhNmUwZmFhN2I5NGY5MWY0ZWIwMDQ0MjJkZGY5ZGQ2YjFmNDliNjQwMGVhNTVkNDBlMjVjNjcxMDNhYjUwYmNjOTJkMTAwZTg5YmE1NjliNmQ1MWFhY2RkZjAyZGFmMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiMGJkNjljZTlhMGE2NmRmZmVmYmE4M2FlNTYzZThkZjBmYzZjN2Q3YmRmNDkxYmY1MmNiZjNmMzc3NzAyNWNkZjkyYjMyMjE3ZjU1MGExZmU3MzViODUxOWI0NGIwNDBkIjoiODIwZGEzMTg3YmM4NzljZDFmNDA0NzZmZDk2NzdmM2I2N2UwMmIzNWI2NjMyYWI2ODg5MWUyNWYxMDU1NWI2OSI6IjkwM2I4ODJkZTAxMzY5NWI0NjgzMzE2ZmZiZDdjNzgwOTI4OGQ1NGM3MmUzNjlmNzBjZjE3MmJmZjg1ZTU2MjkiOiJjZmI1ZjQ5NGU3NjQ4NmNlZWYxMmRmZTFiYWZkNmNjZjliMDc1NGQ4ZDIzMDZmYjBjNDFjMGY0ZTkyMTMxN2VmIjoiZWJhZDVlNWEzNThjZWFiODA2YWU1NTkwZDgwYmMwYmE1ZDQwNjFmNDlmNGNiNzlhOGE5ZGE0ZmQxZThjYjhmNDFjZDhlZGM2NTdjNTE4MGQxOGU2MmRhMmI1M2E1MDA4NWI3ZTE4Yjk1N2VhZjRlZGM5NzVjYTlkNDNlMzgwNDM0ZjUxNTQyZGNmYTk0N2MzMjJjNzA4ZjNkMzU5M2M1MjA3MTcyMzBkZjE3ZjkzNDFmMDJhNTU5NmIyMDU4YTI3YmEyM2Y3MmE4NjJiMzkxYmU4ODQ1NzBiMjJlMjBjODBkZDIwZDBhOTM1ZjA2ODQ2NWQ1NTRjODI5MWZjZDg4ZWZmNjA4ZTkyMjAwZjkwY2NjZGM4MmNiNTY5N2YwNDA2NjU0ZDk1ODJlOGRiNTQyMjVhYWEyODY5N2JmMmM0ZjQ3ZWJhMDg2YTU3NTI5OGI5OTEwOThjMjEyYzllOGQ5NWJmYTQ4ZjdlNTAwYzcyMjNkOWNiZmZkMWRmNmY3MjU5MDlhYjZlOWFhODM3ZmY5ZTY5MTU4YWY0MzRkMThlNWE3Zjk5ZDFhYWYxMDkzMWYzODBkODgzNDRhZDg0MTA2NDEzMGNhZTUwZWRmODY4NzYxNTc0MzczNWY4MDQ1N2EyMjg0NzViYWI3NTU5MDE1YzRmNDVmOTFiZGZhMzFkODciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjQ1Nzg0Njg0ZDYwMDQ3MzE2ODllMzNlNDViMzQ0ZDdiNjhkYzRmYTg0MTEzM2NiMmRkNjVjNGIzMjZkZmZhOTAxMTA5ZGZhYzJlNDhiZjE3ZjJmZWEzM2I0MTJkYzY1MyI6IjdjNmY0Njc1ZjdhMGI4YzQyNGQ1YmU5ZTgwOWVmYTMwNTQ5Mzg3NGQ5YTk1MGNiMzQzYWZkZmI2NGU3N2VjYjUiOiIyYjJkYmUzODM0ZDhiZTkzZjEzOTZiMTliZTgzYmQ5NjgyM2RkODI3NDBkYTcxYzVlZWI3YjIxODY1MDIxODg0IjoiNDljMzIyZmMxYmVjODZkM2UyMDYyOGQ5YmRjMTY0NGU2ZjVlMDIzN2M3YzY5NDc0NmJmZWUzMmEwMDE0NTY5NiI6IjkxMTBjZWM3ZDA3ZTZlMzI3MjRiZjA0M2U3MzAyMWIzY2EwZTQ1MTZiNjE5ZDAzNmFjOWEwMDkxNGUxMmYwMWVjZTcxOTg5ZjU1YzFjYWNjZDU0MmM2MGE5Y2NjZmZiOTFlMjAzZmQzOWRjYTJkOTJjOGViMDNlZTdlZTg4YWJmMjFkYzY4OTFkZTMyNmMzMTkwZjI1ZWU5YWI0NGNhNzJkMTc4ZGIwZjg0Njk2OTQ2NWIyNWEwN2RjYzgzNzc3ZTZiNjNhN2Y5ZjFhODI0NmRkMzFjZTUwY2Q5ZWI3MGU2ZTM4M2M5YWQ0ZGFlMTlmN2NlYzhiZmUwNzliMzZkMzA5YzI4YjEwMTYxYzI4YjhkNjZjMzU3YzdlZTAxZjA3NDAzYTU5NjM2NjcyNWZkNWJkM2E1ZGUzY2I0MGRjZjYwYWFjMTA2MzU2MTViODY2YWU2MzNmYmRiN2VjZTQxNjk1ZDUzMzc1N2Q5ZDE2YzZkNDRmZDE3MGZhZTc3YzE1Yjc0MjZlZDZlYzhjOWQ2ZTkyNDVjZDVlMTllOGRjM2M4YzdlNjcxMDA3Y2U4NDU0NDEzYmQwNzQwN2U4YTIyNDhiZWU5NWE3NjY5ZGI2ZWU0NzM3N2I0NDkwYTYyNTFhYmI2MGNkNGUyZTQwNGFiODhhYTQ5NDhlNzFlY2VjNTBjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZTk3YTQ2MzFkMGEwOGQ1NDljZGU4YWY5YTFhYWUwNThlM2U5NTg1NTc1YTcyNmM3NmEyN2JjNjJiZWQxOGE0YjIyNzIyMWQ1ZmU1YTVkYjk4MTBmOWFmZTU2YTNlZTc4IjoiOTQwODRiMTFkNTVlMGY5YzJlZjU3Nzc0MTc1M2FmNjZhZDdhMjViMjg1MjRiNTBlYTk3MDEwNWMzNTQ1ZTk3ZCI6IjI0YzgxZDQ3NzM5MzgzNzFiOTA2Y2Y0ODAxOTU3YWMyMmY4NzQzMmI5YzhhODRiYzVhYzA0YWQ1YjFjYzNmNTciOiJjOGM4Nzg0NTFlMmI3NjU3N2MzNjM5M2NhMjUzODg4YzEwMzg4ODViYmZkYWNkODUzOTYxNWE2MTFlMmFjMDBiIjoiNzYxNDIyZGVhMjgzMjYyOTk4YzBmZmZmZWZjNzdkZTJkMzk1YzgxOGI5Y2YxYWMyYmNkMTE1MzIzNWUwZDhiNjMxOTljNTFlMTk1MTM1YTc1ZjFmODdiNDU0NDg0ZWNjNTYwYzUzMmM3YmE1OTIzYzk0OTBhNDIzYzE3NzQ1MzQ1OWQ4MWVmYzM4Y2UyOTM5MjI2MDQzY2I3MzMwNjJlYWUzMDNhMDA5YjQ4ZWUwY2YzYzdlNDBhYmUyYjU3YTcwYTYwNjJjNjY5YTlmYmZmMjBiNGM5NGI0ZWNiYzVmNzQ0YTgwZDdiZTgxMzQzNTk1ODFkNDQxZGE5MjE3MzdiMTMyOTQ3MGIyMTRmM2U2NzlmYjdhZDQ4YmFmMDQ2YmFjNTlhMzZiNTc3MDgwNmNkZWYyOGNjNGE4ZmQwZTA0OWI5MjRjM2M5MjE2ZTAwYmE2M2MyZmY3NzFkNjZiNzUyMGRkMzNhODUzODJhODRiNjIyNzE3ZTU5NGU0NDdjOTE5OTI2YTViMmU5NGQ0OTBlZTYyNmRhOWRmNTg3ZmVkNjc0MDY3OTE3OTYzZmQ1MWQzODNlNTU3MzBjMTdhMTI0NTU1ZTJlNDZlMTM5NWM5OTIwZDA3ZGFlNGQ2N2ZmZWU1Yzc1OWI2YTMyNmVlYzZkN2IzYmE2ZGVlMDEyZTQ4MDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI1Yzk2NjA5ZTlkZTgwN2VmZWQzMWQzYzJkNjNlMjg0YmU1YzQ0YzFiNWFiODQ2NzI2NjRkZThkOGQ4ZTJmODE4MWI5NWE1MjkwZmRhZmViMDVkYzkwMmE5YTdiZDYzOWIiOiIxMzVhYWZiM2JiYzg5ZWYxZTAwYTJhMzVlZjMyZjEyMmI3NTExY2M1NWQ4NmU3ODIyYTM0ODU5YjYzMGI0ZDI5IjoiMTE1Nzc0OTA0YTk1M2FmMDc5MzZlM2VmZGNmNjA1NGI0YzUzNGRjODY1NGY1NjNiYjEwNjEwNDQ0ZDMwNjI1ZiI6IjQ3MDVlYzc1MjVlNjM5MTlmNzQ4M2ZlNzZjZGY3Mzk3YjE5ZjIyZDJhOWQ1NGI2Y2YwZmY5YWJjZjBhN2M0NmQiOiJhZTJjZmJiMjlmZGUyM2U4YzIyZDc3ZDdhNTBiYTY2Nzk4ZGE5M2JlNGU0OWVmNzhiMzhjOWJlMjQxMWUyZDhhOTk1NGViMjlmYmFkMGE5NjdjNTFiMjZkOGQ3NDY4MDE1MzlhY2ViMzJlMjQ1OWQwN2JhYTk5NDg2OWQzYjZkYjJjODhmYjlkNzI1MGZhYzAwZGU4Zjc5OTkwZDUwMWFkOTg1NTkwMDMxZjdjNDVhMDBjZDliNmQxYjU1MzFiMjM4ZjNhMzFkMzMyMzdjNDBhM2RhMzEzNTYxNzFjYWZkNTJjYmI3OTI5ZTMyYjM4ZmU1MjNkODIxMmRlODAxZjU1NDM0OGEzY2M0NjhkYWNhNzBlMDVhZmZjOWFmOTdmMTcyYWJhMDBiMmFjYzUwZDdkY2I1ZjBlY2JjZTc0MWM3MWE2NWM2NTdlOWQwZjI1MGM0NGY3Mzg2NTk2MmIxYTBkMTk3MzhlOWZmZTlmMTdjM2UwMzM2M2JlZGY1MzEyYzQ0NDM3NTUyOWZhOGRmOWRkNzJiN2MwOWYyMGMyZWYzN2FiYjkzZTZmYTU3Y2FkYmNkN2IyMzAzNmJiOTkyNGZjZmI5YmY4M2IwOWVhMzYwZmQzOTg4NjM5MTUxYjFhYjIyOTM5ZTllYTFjZGM0MTNmN2EyY2YwNGNmMjc3ODM0NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjRjYmJkMDUzODUzNTk5NGNmMDAzNTRmZjg2MDlkZGZkMDRlODBkYzQxNzRiOTU0MmNkYWI1MjM4NWRkOTY4ZGRiZWY4MTU3YTZlM2YyNmYwNDAyMjlhNDUwZjhlNTY0ZiI6ImVkODE3MjlkMWFlZjUyMmY3YmY5YzEyNzIwN2Q4YTY4MGNlNDQzMjk2NGVkNDAyNWI1YmJiMTI5NjQzNzRmM2UiOiIxMjU5MDczYjU3MzU4OTM1YjcxNDlmYTQzNDk3OTNjNWZmMjhkM2NlOThiNDgzZWM0ODk4NmFhMjg1NDUxYWJjIjoiYjM1MGE0ZTkzMWJiNWRiNTBhODY2YWEzYzAxZWFkN2Q0OGQ1ODU5YmI5N2I2NzVlNzdlYmI4NDRhYzgzMmViOSI6IjIxNWNjYTU4OWY3MzdkZjQ4ZDYwMzYwYzQ4MDZlZDU0OGQ0NDkzOGMyYmY1YjE3MDczMTBkZjk4N2VkZGE1MWU1MDkyYTdkOWNhNDk1NTMwM2FjNTliZmE5ODBiYTZlMTgxOWVkMTE0MTk3OGMzZDdkZjExMjVmNWM0YWJlYzViMTViYjhmNWZkMGVkYjFmMjZiY2ViZWE1YWE3YzhkNWQzMmU4YTViNjA4ZjYwOWQ5ZGZkNzY1MDc0YjIzY2M1MjQ1OTZhOTEyMjZiNzI2ZDg5OWU0MmJkZWUwMzIxZWViMmRiYWY2M2QzM2NjZWQ2ODkwYzE5YjQ2NjYzNmRmMDUwNzJmMDA3YWU2MGEyMzY0ZGRlN2Y4MjMxNWUzZTMwZTYzMjU4YjhhYmQxMmYxOGI2YWIzZDM4NGNjOTM0OWU1NmRmZjAwYzNmNTNhODZhMzAxYWE3MjA1Mzk0MTk5ZDMyMzgyMDk2ZjZjZDlkYjk2NDZhOTJlNzNjM2ZkMWU1M2MyOGE5MTY4MzAzMWMxYWM3MmJiODVhZjUwYmU2NjlkMGUxZDdiMDVhM2JmMWZjOTcyMDAyNWMxZTM5ZTFmMDlkMThkMmU5MjQ3ZjcyNmFjNjkxYTFjMjMyMWE2NjdlNmJhY2Q3ZDc3YTU3Y2U0NjM5N2RiMWE5MWU3OTA4YWQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOWIyYmIwZjM0ZTZmMGEzMWVmZjAwZTY2MDRlNmNhNzc2NDNmNjk4OTU4NzdmNzcxOTdhMDZlMmI0MmJmMDQ3YjNjMWVlNTVhMmEyOGZiMzU3OTMyNGE1NDQ1ODMxMGIyIjoiODk1ZTcwNjA5NTY3ODRlNWVhMTEzY2E3ODUyMTRiY2Y2MDhlMmE1M2MxNzVlNmVkZjViNzhmMWFkOTBlNjdjNiI6ImMwYjE5ODBkNTdmYjc5N2M0OTA3YWFkMWZiNTY2MmJjYzhkNmVlMzBmNmJlZDk1MWU3N2MxMWQxODkzMzQ2ZTkiOiJhZjMzNTdmZDIxZmMwNGQxZDFiZDE2MmI5NGJmMTI5YzQ1ZDQxZmVlOTAzNjZhMTgwZDk4ZDQxMzI1MzM2YjVjIjoiNTA5NDFjYzEwNWM2OTRkZDI2ZDViYzczYzA4Mzk5MTY4YTI3MDQyOGVmNTk0YTY5NjhmZGU4MzRlODg5Y2ZiYmYwYTgwZDdkYWQ2NWQyZmNhMjFiYTgwMTlmMTAxMTMxM2ZlODY5ODNhNTU1ZmIzY2NiNjQzYmI3NzE3MjRlMDQxMTRmMzI2NmQ3MmMyZTFhNzUzNjNhZWJkYTk4NzFjM2JhZmNlZTNmMzg5ZmY0YzZmMWYxYmI1ZTZkYTUzODllMDRmMjgyMmRhODAwY2IwNThkYTljZDY5OGM2NWQ1NGIxNmU3NTYyYzgzNTA2YjYzMmU0YjVjN2E3OGQ2ZTM2ZWMzMDdlNDhjZmVjNGZiYzNjYTNkZDY3Y2E5NWY5YmQ3ZjFkNjA5ZTBhNmQ4YjViZDNmZWVmMDBlMGM0MTY1ZTc3ZGE4NGY5ODkyMTBjNzhkYWY2MzNhZWY2NTc4NTVmY2EyNmI4MzI5OTQwMDBmOTgwYzIxZDM1NWRiMTBmNzFmOWNiYjgwNzljNDhhZWI2NzNjNWJhMDk3YTMyNWQ5YTg5ZTA1YmJmOTYwZmVkNGY4ZWIwOTdjZjM3ZjYxOTAwZGI4MTcxNjg1MTA3ZDUzZjg1YmJkOGMxYTRhMWM3MDQ1YzhiNmUzYThhMmM0MTE0NTQyMjkyNTU1NTg1YTA5MGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiI5YzgzMDZjNjk0MTA5ODQwOGM1NjUxOGE0NGQzMDc1YzIyZTAyZjE5YTYwNDFkMmU5YzRlMjk2ZmRhNDM1ZGI5MTdjOTlkNTM4YWI2NWY2ZjFiZmFiMGQ0NzlhMTgzM2EiOiIzYTgwZTlmNWI3MWIyNDJhZTA3Y2U3YjYxNzA1N2RhYmFlMTg5YzU0NjhkYTJjZjA0OWI1YjUyOWFiYzg3N2Q1IjoiM2MxNTFlOTJkZDMxMjFhOGQyZDExNjA0NjMyZGYwMGNmOTA3MDZkM2U4NDM3Mzc0NDVkZTBmMmZkZTFlYTkyNCI6ImY1M2NiNWZlNjczMjAxZjVlYWY0MTE1MzgyZDQ4YmE0NWJlNDA1YjM3YTMxYTU2ZTQxZDFkNzYyMDIwMzhiMDYiOiI5YmYzMTE1NmU1NGQ3MTQyNDkwZTYyMGFmZWMyMjE3OTMxZmIyMzg5MjE1YTM2MDliMzg0YjA1NTFiYjNjOWQ5MGMzYjMwNTMwNTQwNDZhMzI0ZGI5YjM0NjMzZTQxYjY2MTE0YmZhN2VlODZiYmQyMmQwOGQ1M2UzNDlhNGRjODc1MjY1YjMyMTUxZDNlNDc1ZGYzNDhhMjJkNTIyNjQ3ODE4NGYzNzJiMGJhM2JlOTJlYzFiMjg0ZmM2NmRmYTM2MDk0NjMyMTRiNmI0NjhiMjk0NzhhY2IwYzU1ZTFkNDY3NDg4MmNiNzVlM2VhYTNhNjZlYTBmNGQ3YjFhNTcxMjA2YTc2MWQ2MzZiZDM1MTlhZmI2ZjA1YTBmMWI2YmIzOGMwMGJkNjg1MzBhNmM5YjQ0NWI2YjRhOWM3NDU3YTA1NTYyN2I2MDZmNDUwOGVkNjc2ZmI1YmEwZDI3NTg5YjdmNDY0MjcxYzNlNTYxMjE1OTA1YzUwZWM0OGY1ZGRkMWI4NTQ5ZThkMTYzNDUzMDgzZGI5NmM3ZWM4ZWVlZGFmNjgwNDM2OWU3Njc2MGIwOGFiY2NhOTM3YzQ5NzkwMGJlMzg1ZGI4ODA0YjQ0M2U4YTE0ODliOGYzZTNlNGNmMzY3ZGFjM2UxNWNiOGU5NWNkYWJhZDA0ZjA4ODU2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6Ijg3YThmY2U1MjFkZjBhMmUyNmYxYjFmOWM3ZWM5ZTk4OTY4NDc0OTE1YTA4NWE5NWNiZGNhN2Q4YzY2OWUwOGE2OWI4YzNjM2RmMDdmOWFkYTM2OGJlNDQ4OTM4YmY5MiI6ImIxYmZhZWFkMDQ3NDNiZGNmZGIxOTNkMzIyNjA5MThmZjgwM2FiYmNjMGQ1ZGRjNTA0MzliZDAxZjZlNDJhM2MiOiIxMmEwNzM4NGU5Yzc0ZmIzZjMzZGYxYTA4OWRkZGI3ZDQxNjE1MWEwMjcwZDBjMDIxNmUwODVmMWVjNGMyNDliIjoiOWI0MjU2NzA5MzExMmNiNTg4OTcwM2I3N2I0YjM3MjI3NmI1YmJjY2FkZjg2ZWViOWVmNmQzY2QzOTViMmFjZCI6IjViYTY2MjI2MGFhMGY3NDNhMzNhOWI1NTJjZTQxZDkzMzM1YTg1NWE1NWRmMTFiODcwZWZhY2I3Zjc1ZTM5Yzk3OGU3MzBhY2NlMzY2NGM4MTRhYzEwZmExMDk4OWZiMDBhMzliNTg0YmIxNGNhZDJjMDJjMzA5NzAzYzhlYTg3NjhkNDc5ZDliNGUxNzQwMmVlMzhjYjgyYzVmNGQ4MDEyNWYzZTY3NGFjMWFkYjkxOWNjOGE5ODhmNzlmNTMxYjA4MjUzZmJhZDBhMWIyN2ZiMTk5N2E0ZTJjN2JkNWZmM2FiZjY2MjgxZThiNjA5ODc1ODczMjdhOTEwMWI3NmNkMTM3NzFlMjNlZTJmMDJkYzMzOTU4OWI5YWFjNGY1YWY3NDBhZmRhZjQ5NDAyMWMzNTA0ZmRkYThmOTNmNzdjZGQ4MjYyZGY3ZDRjNDhmODViNmViMDNhN2U1Mjc5ZGI0ZDE4ZjY0NWE2M2ViNmY1M2Y5ZmIxMjNjNTNhNzg2ODZmMDExM2EyMDliNmVlZWYzYjEwY2Q0NDg5ODc1YTA3YWY4NjNjNDY3ZjI1YjY5Y2QxM2I4ZTcyODQ3NDY1ZmJhMDI1ZTI1ZmU3YmNiNDE3NDUzNjlmMjU1ZGYwZWVmZmMzZTVmMDY2ODE1ZWY3NzE1NjgwYjEwNGUyMGE3ZTllIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNjlkNjY3YmRlNzllNDFjYjc4NzQyNDI2Y2E1ZWJkNDgwODZjZjFkZWQ1Y2FkNzI5M2ZjZjkxMGU1YWIyM2NjOGNhZDc1YmQ5ODljM2ZmZDA1ODE3ZDFhYWE1NDkzYzA1IjoiNWY3MjM0NmViNTBlYTgyY2IxMTFkNWIzYzkxZGM5YjdjNjFjOTJmYTFhMDYyMTc3ZDUxM2ZiNjE2YjEyMjZkNSI6IjA0NjViOGFhODlkOWNiYmU4ZTFjZmEyZTY0ZTY0YjhkMWY1ZGJlYzdmNzEwYTZkMzdmY2U4OThlM2Y4MWU1N2IiOiIxNzMxMzVmMzFjMjMyMGNjY2Y1MTNlODhhMjFmMmQyMDdlMDBjYmU0MzMwZDJmNTUwZTBiZTc3NDA1ZWVmNDdhIjoiMzRhMDhkN2E1NjQ1MTVhOTE4YmNlOTNjYWUwODRmMjdhNTU4ZjZmMjE0YzRiYzkxNjlkYmY1MDdjM2YxMWQwMmVjOTdiZGZkNzc3OTYwZjZiNGM0NTQzYzFlMTQ0NTZkMDA3OTIxNTMyMGFiNjA3ZTA0Yjc1MTkwOTBlYmFmM2E1ZmJiMGQ3YTNmZGExYWY2Y2Q4YzVkNzg1NTI0YmRiYTc1YWJiZTUwZTNkNThlNWYwNWY4ZjZiMmMyNTcwZjExNzhhY2QyZjRjMTFhN2IxYjhiNGViZTRkZGI3MWE4NWJmMTliYjJmYjI1MjQxMzc0NTMwY2JjNmMwNjA1MDY2ZTExMjlhMmQzOTgzNTZjZjJlYzJmN2EyODZjNWI4NjljNzAyYWNlZDYzZjRlMTJmMzliN2NlMjUwNTQ3YTkyMjg3MmMzNjI2OGEzYTQ2NDlmNjY0MTk4N2JiN2M2YmFmMWEzZTgyY2RmMDRkMTExNjBiYTExYzVhMDAyY2ZiY2Y0YTg2OTgyODZmZjMxOGVjMDFmYzJjNWY2NjY0ZTUwNTYxOTkxYTUzM2FkMTgzYTIxZTdiOTdlMDA1MmIwMzUwZDIxMzczOGIwYzZlNTQyMWE1MjQ4NDVhODYxZjUzOTkzMDU0MGNjNDBjNmVkNzhjNDZiZTljMTIyZTc5NzRkMzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9fcmVzZWVkOk1CRURUTFNfTURfU0hBNTEyOiJmMWY2ZTVhNTVmYjIxODBkZTQzNmQ0ODExNWFhMWFhMzhhNjI0MmVlYjA5NTlkZTM2OTBmMjU5YzFkODM5NWE1ODYyZDFhYzQ4NDM0MDRkMjUyMTVjODNiY2E5MGY0NGUiOiJmNDY3ZWYwODNjNzQ1YTFiZmM5YmU0NGYxZDQ2OGIyNTE4ZTNmZjFjMGNlZTY4MTlmZGRlMzU0ZDQwNzFiMTdlIjoiZmRkYTlmMDg4OGM0NDM5Y2RlZDE1YTc2ODMwMGQxNjNjMWUzMjZlZTU1NzFjMjJhYjk1YWIzZTQ0YjE2NzZkMiI6IjZiOGQ2MGM1NjU2MDRjOGZhOGQ3YWRhZjBiMDdlZDI2OGE0OTFmYjc5Nzk0ZDI3NzAzNTZlMTkxZGFhMWNiNTAiOiI1NWQwNzg4NjE0Yjc3MGY0YjhjM2QzYWMwYmJmNjI4ZjI5NGJhMmZkMTY2MTJiNjVkMGY0NjlkZWQ2NjVlM2M4YjgyYzk1ZGI4MGNjNmI0MTBiNWE2ZTYyNDE1MWZjNTBiZjAyZjI3OWZmYWJjMTlkZDA5NGNmZmIxN2JhNDRiMTEyMDliOTIzZGYzMjZkYjE0ZWVlMzVhOGJmMWVjYTM4MDdhZmFlOTE4MjA2ZTg0NGU1MTdlYjMyYzIwNzM0MjAwOGEwZGE3NDJlNzM0NDMzODY3ZmQ4NmZkODlkMjdlYzZlNTFhOWRiM2FkMWFkZWE2NDVmZGM1NzE3OWM0YjcxZGU4YjQ1NWFlMDBlZmMwOTMyOGEwYmZmZDhjNjFlMzg4MGMwMDc5MTU5OTdkYWVlZDRhZGJhNjFiNDQwNDBmNmY5YjZjNjQyN2UxYzIzMzU3YzhmN2UxOGI1Yzk3NGIzYzM0YTJmZDVjYjVlNzBmNDhkZjJkMTBjMWRlYWJkOTg3ZjgzOTBiYjMzODU4ZDlhNTEzM2E3YmQ3OThiMWM3NzQxNzI5Yjg1NjJmZWNiM2Q0ODMxZTljZTEwMWRlMTkyZDY0YmI1ZDc1N2NiYjIxMDkwZDY2OWFmYzU1NjZjMWQ2ZTI1NTg2Njc4YjVmMmZjN2Q2YzYxMTNhYzRlYjU0ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIE5vIFJlc2VlZCAoU0hBLTUxMiwyNTYrMTI4LDI1NiwyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub19yZXNlZWQ6TUJFRFRMU19NRF9TSEE1MTI6IjBkYjlkNDM3MTUzMTQ5ZTEwMWQ1ODE4YjI2M2I5NzU3MzU5OTRkZmMzM2Q4YjNmMTU4YTA1NzYwODY3NzU3YWI0MzhhNTAyNGUxZDQzMDA2MjI2MDE4YzM3OGFmNTVkMyI6IjI3NWJkYzVmYzc4YjBkOGFmYjVjOGFhNWY3ODU0YzMxOWE4MWJiOGNjOTMwMDIxMGE5OTkwZmI3OTMzYTM1MmUiOiI4MDlkYTU0ZDE4MzA1NDU2NzJmMTgwZmEzZTA0NDFhMGQzZmU0NzJlN2NkN2E2ZDcwN2ZlZTVhZjdlOWIyMWMyIjoiZWJlNjZjZWU2ZWZiZjU4M2M4ODFhMjVlMzQ2Y2E3ZDk5NzQxZGFjZmNlMGQ4Nzg1YzY1OWU5Mjc3NGUyNmZmMiI6Ijg3OGEzZDEwOWQ4MTRmZjRhNDkzNTY4OWNhOTZiM2Q0NDRiZmNlZTllZGZjZDkwMzEyNTVhZDI1Mzg4NzEwMjcyNzNiYWQ1MjI1ODY0ZTg0ZjNjMmFmYWEyMmE0MGU3ZjY3OTNhYmJjNDljOGIwZGRjN2IzMGQ5ZGM3YjQwODg4OGU2Yjk4ZjRiYzc5ZTA4Nzc1YjU5OTY2MWVhNGI1MDY2OTEzMmMyMTI3MmY4ZDE3ZmVjOWQxZTUzMTAzMzViMGU2NDgwZDcwNzVjODMwYTQ0ZWE1Mjg5MDBmOTlkZTYxMTkxYjVhMDA2Y2E0MzQwMzU2ZGJmMjBjNjJlOGZmZDA1NzdkNjIzMTQ2YjEyOTM3ZTg0YTZlMTdjMGFlMDhlZmQzMzljOWFhOTc5YzdlMjFlOWM1NmUwMTlmN2U0ZjM3NWJiNjAxYjFhODNjMjFmMjdhNTU0ZWMwNTE5MTc5NGJlZmU1MTRkZmJmZjVhM2M5YTBhOWM4MGJmZTliNmFkYzdkZWZmZDMxYzcwYmExM2ZjZjE3MGFiZDZiZjNkMzg0MzgxZTBhMzFmYTljODFiMWJkMjA3ZWEyZTBiNDE1M2I2YTEyNTJhOWY3M2YxOWY2ZjA5OWZkYTBmODdiYWJhOTliOTcxMWEwMGI1ZjUwYWQ4OGQzYmMxYzRlODA2NDY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgTm8gUmVzZWVkIChTSEEtNTEyLDI1NisxMjgsMjU2LDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNDEwNmY2YmE2YTI5MWZhNTRlNGVjZmQ5ZmE2MWI5NjE1NTRlNGU4ZTAzZTE5ZDliZmQ4MmJkMzVjMzQ3MWU4YmM1YmRjZDJmODEwMDc5YzFiYmZlOTA2OTI5ZTg4ZDI3IjoiNWE3ZTYxYjg2Y2E3MDkzOWU2NGFmNjEzYTY2NzY5NWM3YzkxNWU2NjdjNzk5OThlNzZlNTVlYjMzZmVmNmQ4NiI6Ijg2YzdkNTg4M2FlZTU2OGFhNzRkMjU3ODIwMTlmYmQ2ZjVhY2Y0MTk2NzUyZmYzZDFkZDk2ZWMxZTc0MzY0MjQiOiIzYTVkODBlNzM5ZjVhMzBlNmJiNTA3ZDgyYjYwZmY5ODdkNWJkOWNiYmZmNGI0N2RhZmYyNzhhMzI1MmRiM2VmIjoiZmIxNDYxNDZmODI4ZTg4MGM2ZWM3YWI1YTY1ZmM4ZWM0ZTRkN2Q5NzVjNmQ3YzBhOWJjN2NlMDQxZjQ5Nzk5YjExZTIzNWQ3YWM1YTRlYzRlZWE3MjFjMzMyMzQ0OGU2ODZhZTk2NTc5MjMzYWQ2OThhOWQ2ZmUzZjViMzdkODdjY2ZjZTY0MDE5MmRjZGI1MWM3YmYzNTQwNGM5MGI3MDViZDk3NDgyZDk1ZDFjM2UzYTQwMTUyYzg2YWI5MjM1ODg4NDJhYjAyZjRkOTIyMzE4YTdmYjg0NDUzYjA3MmM3NDlhN2Y1NGU4YWQwMDVjMjljNDhhZjZmMDFlY2RkOGZhYzEzMjk1ZTQyYjIwNzdjNzBjN2JmNTRlMjE0MzE3Zjk4MDAzZTRjZGUwNzc1NWU5NWM5MWYxOTUzYjI5YjNlZWNkNDlkYzc1M2U3NGFhZjJiMWM4M2ZlYWU4NzQyOGJlNmE1YWFhMzI2MWYwZjY1NDkxZTA0YzFmY2RmZDU0ODFlYWRhYjY4ZjA1N2RmM2M4MzY5NGM3NDUxZmRlZDg2YTE4NDcwYjA2ZjE3NzljMzhlZmNhYzU0YjU3NmU5OWVjZWQzYjU1ODFlYjVjOWY3YjMzNDBhZDU2NjdkMWYwZDNmZWFkOGI5NDg0YTAzMmQ1Zjc0ZDkwMGZkNjRkMTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNWQxZmNkYWJiNzBkYWQxNDI4YzhiZTI5MTcyMGM5MmI4NTY1ZjMzMWVlMzQzOGQ3OWJjZGRjOTY4ZWZlZGNkYjkzMTlmNWVlOTExMjRiOTNiOTY1ZDUwNDIxMWZlZjA0IjoiNmM4YzhhMDY2YzYyMDhkYmMxOGE0MGEzMGI5ZjY4OTA0ODg3N2UwMzhiZjc2ZDY1YWNiZGRlN2FlNGM1NjZmOCI6ImJmYTJlOWViZTBkNzBkM2I2MmNkYmQ3OGM3NzVhNjJlMGUyMmZhNzVmMTY4MTIzYTMzNmI2NmI5YTJiNjhjMDYiOiJlNDhiNTI0NWVhMjQxYmFlYjdmNjY1YTlkYWFhZDY2MmQ3YjI0MjJjM2UzNzExY2ZiZWQ4MWQ3MzY5MTg2NGVlIjoiMTU4NmUwNzYxYzRhMzkwMTNkY2I1NTJhMGUzNjNlNzA5ZjQzMDNjMGU1NzU2NTNjOWIyNDBiZTc0NDllYTI2ZTRiYjFkYzkzZjA2ZWM5NThiNmMwNjIxNzc1N2ZjNTUwYjM1NmMxMzUwNjNjMDBmY2U5ZDg1NmFlYzBlZGQyMDczNWI0NmI3YzlhOGU3ZGY3ODBkYjMwNzJmYzJiMzE0ZmE1Y2RhNjUzYmEzNjkwMTMyZjEwZDMwZWU5NGM4NDU4ODQ2YmU3NTY1OWVmMzg2ODA4NmJjZjU0ZmY1NWE4ZGIxZWE2NWMzZTc0N2E4ZGRhYjNmMjMwNDczOGUwYzc1YWRmYzEwYzIzYmE2NTFjY2YwZGU2NGEzOWNhYjNiZWVmNjY3ZjQ2NjM5MWE2MWE4N2E5ODFhZmU4ODNmMDljNGVkYmQzZWFlOThkNTFjZDNlN2IzMWVlMTc5ZjhhNGUxMGZlYWM5NmVhMjEwYTRiODQxNWM5ZjJjZmViMmJjOGJmNTFmMTM4MDFkYzU0MmJhMWJhZGRhMWMzMDE0MWQ3MmFiYjFiYmIzNWM5YmI0ODFkOTFkYjU2OTFjNDRiZjM1MjZhMDJkMGJmNzc2MzA0YTk1MTg1OGFhMmZjZjNmNDViYzY1NmFiY2FlZWE5NGNiZGM4NTFhOTE0YjRiM2EzZWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiOWZjNThkMDc4NWFkYmYwMzNjZTY2NDJkY2M5YTg2MWRmNDRhMzVlODlkMDZiMzQ2YjE2NTA3NGEwNDhiNTAwOTk0YjRjMGIzZTI3MzA2YjhjODA1Yzk3YjBlYTE0YmI1IjoiZTAyZjdhODU2MjY2MTk1ZmI1ZjQ4MTAyMzJjZDVjNzFhNDQ2NWUxZDk1NjI1YzAxZThlN2ViNjljNjNmNjc5NiI6IjdjZDE4YjhkMDM1YjU3YmQwMTQ2NDI4MGFiZTg5MWI3ZmFmNTVmOWVkOTkxMGQ5YTE0OGIwMzAzNDBjNjdjZGIiOiI5MThjNGQ0M2ZlY2Y5OTMyMjdmN2MxMjBkMjM5YTMwZDNjMzE1NjAyODAwZDZkNThiOWU5ZTA3MTU5NjRjZmEzIjoiYjhhMzU4MWViNGEyMDhkMWFiOGYwZTg0ZTlmZjNkMmUwYmE1NzcwM2E3YjViZTJlNGYzYTNlZGUyZTI1MTlmNWU2MDY4YzI4YzQxMTcxNDQ2Y2ZiYzQwYjQ4YTk3YmM3YTlhMWU0ZDNiMDJmNDhmYmY1NWIxZDYzZGE3Y2JjNWI3YTk1ZjM1NGFmZGEyNzNkYmY1YmYwOTk5NjFkYjRhNGM1ZjI5NjI4NmRjMGE1MTA5MWE1MjIzOTg5NzNkNTUyN2IyZTU1ZTA1MjNjMjFmZmZkZDBkZDM4NTI3YmM0NTk1OWQ1YTcxMWQ1NDE2MzRlMzEzOTU3NzMxMmQ2Nzg0MjFlYjM3NTUzYzEyN2JlZWM2NDQyMjMxNmU0ODU0MmE5MDZjZDdlZmUwZDk2ZWFlM2M0ZjJkYjc2NjYwODNkOTM2NWE3NmNlZTRhMjA3ZDcxMmRkYjA0YmY3NzViZTI5ZWQ5ZjAzMGVhZGU0NTM3OTYxNzM3ZTM5MzlhMTllMDc2OWEzYThiOTZkMDU1MTIwYzQ5OTI1ZmUxZWJjNGEyYWQ1NDQ2ODQyMWRkNTQ2NWU4NzYxYjNlMmUzODQzNzNhOTcxZTQwOGRkM2E1NDkwNzUzOGE3ZDg4Nzk4NjY3N2ViMTkyNzYxOTU5YTQyOTM1MjNmODE2NDdhNjU3YWFlZWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiZDQzOTI3ZDFlNjMzZmMzNDMzNTM2Y2QwMzYxN2E5N2EzYTEwYTdlY2FkM2YwYzc4MTYwMjgyOWY4ZWM3ZmViMmRkNTkyMmYyYTJkZWU1MWRiOTNiY2YzNTEwMGE4MzY0IjoiMzMzNWEwMmFiYTFlYTI4ZDJlNTY5NzNlMjExMDllMGFkZmI1MDY4NjEzYzQ0N2U2MjVmZDgzYThkMGUzNDQ5NCI6ImJmZGUzM2M1MjQwN2QzMTM3MTIzODEyYzQ4MThjYTFlNGI2MTg3OGI4ZjlkYmFlYzQ3OTM1ZTM5NDhhODhkMGQiOiI0MjU5N2NmMDNiYmVlMGUwMDNkODY3NzE1OTkxOGY1MzE4NDAyZjczMjlmMDhlMWQ5M2M4NTBlMmEyYTJmMWJiIjoiZTUzYzdkMGIzNzZhOTQ4MDlmNDcyOTYxYWNmZjMxNDA3OTAxNDk1ODkzNWNkNjdhY2M0NzZhYmRkOTE5YTQzY2QzZjdkMTQ2MmQwZDZlNjI4ZWY1ZDBjOGUwNGE2ZDI0MzgzOGM2MWVhMzZiMDE1ZTg0ZDdhZDU5ZTQ5YjQ1YzliMDRmNmVjNzg2ODdiYTQ3MTU2ZTQyOWIyZmI2ZGMyYzBkYTRmNTY3N2QxZjY4OWNkMjg2MTJjZmE2ZDk1NjI4YzI2YjViM2UwMTE4NjE1M2ExYzI1YzAyZjVjZTVmYzI4NzYyMzM1ODY4N2QyMDM0MzQ3YjI0MzNmZmMxNDQ1YTJkOTNjYjAxMDNjY2RhZjBjNTg1ZjdmNGU3ZDQxYWVmMzEwYmUxMjcyMDhiM2RhOTA1MjNhY2VhYzVmYTEzZmZlNzdlYWE0ZDFmZDA1ODk1N2M4ZGQyZjM1NWNhZTdmOWUzZDhmMjllYzcwOTk1OTliYTZjNzU1Njg5ZDUzZDZjY2Q4NGUzMzQwN2EwNjY1MDZkOTdkZWNkN2UzMDZkMjJjYTZlMGZhYTdiOTRmOTFmNGViMDA0NDIyZGRmOWRkNmIxZjQ5YjY0MDBlYTU1ZDQwZTI1YzY3MTAzYWI1MGJjYzkyZDEwMGU4OWJhNTY5YjZkNTFhYWNkZGYwMmRhZjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiMGJkNjljZTlhMGE2NmRmZmVmYmE4M2FlNTYzZThkZjBmYzZjN2Q3YmRmNDkxYmY1MmNiZjNmMzc3NzAyNWNkZjkyYjMyMjE3ZjU1MGExZmU3MzViODUxOWI0NGIwNDBkIjoiODIwZGEzMTg3YmM4NzljZDFmNDA0NzZmZDk2NzdmM2I2N2UwMmIzNWI2NjMyYWI2ODg5MWUyNWYxMDU1NWI2OSI6IjkwM2I4ODJkZTAxMzY5NWI0NjgzMzE2ZmZiZDdjNzgwOTI4OGQ1NGM3MmUzNjlmNzBjZjE3MmJmZjg1ZTU2MjkiOiJjZmI1ZjQ5NGU3NjQ4NmNlZWYxMmRmZTFiYWZkNmNjZjliMDc1NGQ4ZDIzMDZmYjBjNDFjMGY0ZTkyMTMxN2VmIjoiZWJhZDVlNWEzNThjZWFiODA2YWU1NTkwZDgwYmMwYmE1ZDQwNjFmNDlmNGNiNzlhOGE5ZGE0ZmQxZThjYjhmNDFjZDhlZGM2NTdjNTE4MGQxOGU2MmRhMmI1M2E1MDA4NWI3ZTE4Yjk1N2VhZjRlZGM5NzVjYTlkNDNlMzgwNDM0ZjUxNTQyZGNmYTk0N2MzMjJjNzA4ZjNkMzU5M2M1MjA3MTcyMzBkZjE3ZjkzNDFmMDJhNTU5NmIyMDU4YTI3YmEyM2Y3MmE4NjJiMzkxYmU4ODQ1NzBiMjJlMjBjODBkZDIwZDBhOTM1ZjA2ODQ2NWQ1NTRjODI5MWZjZDg4ZWZmNjA4ZTkyMjAwZjkwY2NjZGM4MmNiNTY5N2YwNDA2NjU0ZDk1ODJlOGRiNTQyMjVhYWEyODY5N2JmMmM0ZjQ3ZWJhMDg2YTU3NTI5OGI5OTEwOThjMjEyYzllOGQ5NWJmYTQ4ZjdlNTAwYzcyMjNkOWNiZmZkMWRmNmY3MjU5MDlhYjZlOWFhODM3ZmY5ZTY5MTU4YWY0MzRkMThlNWE3Zjk5ZDFhYWYxMDkzMWYzODBkODgzNDRhZDg0MTA2NDEzMGNhZTUwZWRmODY4NzYxNTc0MzczNWY4MDQ1N2EyMjg0NzViYWI3NTU5MDE1YzRmNDVmOTFiZGZhMzFkODciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBObyBSZXNlZWQgKFNIQS01MTIsMjU2KzEyOCwyNTYsMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vX3Jlc2VlZDpNQkVEVExTX01EX1NIQTUxMjoiNDU3ODQ2ODRkNjAwNDczMTY4OWUzM2U0NWIzNDRkN2I2OGRjNGZhODQxMTMzY2IyZGQ2NWM0YjMyNmRmZmE5MDExMDlkZmFjMmU0OGJmMTdmMmZlYTMzYjQxMmRjNjUzIjoiN2M2ZjQ2NzVmN2EwYjhjNDI0ZDViZTllODA5ZWZhMzA1NDkzODc0ZDlhOTUwY2IzNDNhZmRmYjY0ZTc3ZWNiNSI6IjJiMmRiZTM4MzRkOGJlOTNmMTM5NmIxOWJlODNiZDk2ODIzZGQ4Mjc0MGRhNzFjNWVlYjdiMjE4NjUwMjE4ODQiOiI0OWMzMjJmYzFiZWM4NmQzZTIwNjI4ZDliZGMxNjQ0ZTZmNWUwMjM3YzdjNjk0NzQ2YmZlZTMyYTAwMTQ1Njk2IjoiOTExMGNlYzdkMDdlNmUzMjcyNGJmMDQzZTczMDIxYjNjYTBlNDUxNmI2MTlkMDM2YWM5YTAwOTE0ZTEyZjAxZWNlNzE5ODlmNTVjMWNhY2NkNTQyYzYwYTljY2NmZmI5MWUyMDNmZDM5ZGNhMmQ5MmM4ZWIwM2VlN2VlODhhYmYyMWRjNjg5MWRlMzI2YzMxOTBmMjVlZTlhYjQ0Y2E3MmQxNzhkYjBmODQ2OTY5NDY1YjI1YTA3ZGNjODM3NzdlNmI2M2E3ZjlmMWE4MjQ2ZGQzMWNlNTBjZDllYjcwZTZlMzgzYzlhZDRkYWUxOWY3Y2VjOGJmZTA3OWIzNmQzMDljMjhiMTAxNjFjMjhiOGQ2NmMzNTdjN2VlMDFmMDc0MDNhNTk2MzY2NzI1ZmQ1YmQzYTVkZTNjYjQwZGNmNjBhYWMxMDYzNTYxNWI4NjZhZTYzM2ZiZGI3ZWNlNDE2OTVkNTMzNzU3ZDlkMTZjNmQ0NGZkMTcwZmFlNzdjMTViNzQyNmVkNmVjOGM5ZDZlOTI0NWNkNWUxOWU4ZGMzYzhjN2U2NzEwMDdjZTg0NTQ0MTNiZDA3NDA3ZThhMjI0OGJlZTk1YTc2NjlkYjZlZTQ3Mzc3YjQ0OTBhNjI1MWFiYjYwY2Q0ZTJlNDA0YWI4OGFhNDk0OGU3MWVjZWM1MGMiCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wci5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5ub3ByLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyZTU4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcubm9wci5kYXRhCkBAIC0wLDAgKzEsMTIwMCBAQAorSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiNzkzNDliYmY3Y2RkYTU3OTk1NTc4NjY2MjFjOTEzODMxMTQ2NzMzYWJmOGMzNWM4YzcyMTViNWI5NmM0OGU5YjMzOGM3NGUzZTk5ZGZlZGYiOiIiOiIiOiIiOiIiOiJjNmExNmFiOGQ0MjA3MDZmMGYzNGFiN2ZlYzVhZGNhOWQ4Y2EzYTEzM2UxNTljYTZhYzQzYzZmOGEyYmUyMjgzNGE0YzBhMGFmZmIxMGQ3MTk0ZjFjMWE1Y2Y3MzIyZWMxYWUwOTY0ZWQ0YmYxMjI3NDZlMDg3ZmRiNWIzZTkxYjM0OTNkNWJiOThmYWVkNDllODVmMTMwZmM4YTQ1OWI3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJlZTU3ZmMyMzYwMGZiOTAyOWE5ZWM2YzgyZTdiNTFlNDNlOTcyMWU0MzkzZWY5YWQ4NDFkMjc2Y2E5NTE5MDYxZDkyZDdkZGZhNjYyOGNhMyI6IiI6IiI6IiI6IiI6ImVlMjZhNWM4ZWYwOGExY2E4ZjE0MTU0ZDY3Yzg4ZjVlN2VkODIxOWQ5MzFiOTg0MmFjMDAzOWYyMTQ1NTM5ZjIxNDJiNDQxMTdhOTk4YzIyZjU5MGY2YzliMzhiNDY1Yjc4M2VjZmYxM2E3NzUwMjAxZjdlY2YxYjhhYjM5MzYwNGM3M2IyMzg5MzM2NjA5YWYzNDQwY2RlNDMyOThiODQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImViZmRhZDEzYzhmOTQxZDI3OWRiYjRkZThkNzcwNmRkZmRhYTI3OWY1ZTQ0MjhkNmY3ODVjNWIyZjgzM2I2OWIwOWI3MWE1N2NmNTcwMWQ0IjoiIjoiIjoiIjoiIjoiNjZlMzVmOWI4ZTA1YTg2MWEwYjNkMDFjNjZjNDE2ZDVlOGI3N2Q0ZDIxMzI4YzYyNWNmZjkxNjNmZmM5MmU3NTMwMTVhYTlkN2YzNmFlM2E5NjE2ODFkMzlmMjcxZDBiNjI3Nzg3ODY4Y2VjM2RlZGM1MjBlY2IzMDNmOTZhNDNjZWM2NzM2OTExN2FmMjY4YTE5ZjUyODQ4ODBjYjNiZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiNGZjMGVjNzc3ZWM1YTVmM2I5ZWEwNjgzMWEzNmFjYmI5ZTlhZGQwNTdkYmI3M2E4MzM2N2JhN2MxNjNmN2I5OWE1NmFiNjQyNzRlZTY0Y2QiOiIiOiIiOiIiOiIiOiI3OTEwYTgwMWI2OGEyMDU3MGFiMGU1OTNiZDU2NTAyMWM4YTU0M2JhMzk0MmJkNzI2MDIxYTcxOThmMWQ4NGM4ODA2YTZmOWNjMTJkMTk2ZTFjYmZlYmYzMjVkMGUxOTcxNzQ2OTIxYjRkNTU0ODNmYzM2NmQyY2E4MzdjNGZjOTc1MWZhZGVhN2IwNGMwYTQ3ZDFlMzc2NDlmN2JlYjZiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI4NWE0MWJhZmFhOTIzMjQwZGNmNjEzYTUzZTI4ZDg1MzU0NzRlMDVmYjU5YmExZWFjY2I1ZTI4YjFmMjQ5MzY3NWNjNGY2MzQ3NWE2OWIwZCI6IiI6IiI6IiI6IiI6IjI3MzVmYjY5YmZjYWM1YjJmN2Y2NGU3NDdjMjdkOTk1N2ZjNmEzY2QwYjNlZWU5ODQ2NDFiMjY3NzY1NTYwNmU2YjBhZDZjODc1YzdiZjEzMzNhYjFmOWIxNWFiMWQ1MjI5NjgwNTlmNzhlYWEwNWE3MDQzN2M2OTc0ZWM4ZTI5YzhjYTVhMGVhZTU0NjRiMzJlOTQ3NGU0ZmE1ZDQyMzYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImI2NDQxNmVhNDA2NzcyZjk1NWZiZDdkYTMwYzY3ZjZhNDJlMGI5YTg4OWQ1NTQ1NGUwM2E4ODIwNWVhYWZkZDU4NGRkNTRhNDBlYTVjN2RmIjoiIjoiIjoiIjoiIjoiNDRiYzI2NDgyYTQ5ZGE1MjQ5ZTg3ODVhNGU0NGQ5MWNjZGM2MTAzZmQ2NjZiNDgwMzUwZWEzYTA5ZDhhOGNmOWUzMGMxMDNmNTM1NTljYmY1NWUxMzA3OGI3YzY5NDllNGU5MGUxZWY3OWRkZDIzNDE2Njk4MWY3MTViODY0OTgzNGMyN2IxN2JkZjBmMDY4OWVkMThlYjg1MGI0M2U4NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYjNkNDA0MTIwMWY0MzQ1ZTBhODE4ZGUxMzZjNmFhN2U2YjA2MTJlMWFjNmIzZjJmMjZmNmVjMzI4YWM3Zjg5NjZkY2E5MGUxNjJjMjk3ZWYiOiIiOiIiOiIiOiIiOiJkOTI0NWE0YTBhYjBjYTk3ZTc0N2MwZDI5MDk4OTc5ZTgyNDhlNTNmMGVjNmI5MTY3ODk3MmYzYjU2OTFlNzk5NWFkMmViOTk2NDBkM2U5YTgzNjQ4OTFkMGZmMTc5NzMyZDYzM2Y3NjJkNjU5MmE0ZDQ5YzRlNjY3YzY5OWIyNjc4OTI5YzgxZDliZGZjNzRkNjU3NWY1YjcyN2Y0ZDY1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIwNmRiZjU3Njk5ZGY0MGZmNjcyODdlYzExNTczYjc1YjQ3ZTQwZTY0M2M0N2Y0ZGI4OWJiNDFhM2NiNjY0NDY0NDliNTAzYjM4YTFlMjFmZSI6IiI6IiI6IiI6IiI6IjBkMDZjNjYzZjkxMDUxOThhMzQyMjliMGUzZmNmZmQwZGU5YTQ0NWY0ZmM1ZDViYjU4YjU1ZTQzY2FjYWYwYzI3YzA3ZTVhOWMzNzM0ZThhOGUwODg1ZGQ3OGNkMWJkZTA3NzdlMzMzMGQyZmIzYjA0MjAzZjZjMjc0OWE0NWNiOTZiYWZiYTNiZjlkMTg3NWRjYmM0NmI2YWY1NTgyMjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImNjMWNhOTVlYWRiZDFiZGIyNDU5ZjQ0YzY2NTNjNDQxZjIyNTY4NTI0MDQzOGFmZjI2YTM0NDdlOGY1MDRiZTRjNDJiZWVlZmZkODg0NDU1IjoiIjoiIjoiIjoiIjoiZThmM2NiZThlMWY4NzM4YjRmZWY2YWU2NzY2MjUyNGM5OWNlZmRmN2I0MTZlYWZjMTU3NTAwNTRmZmQ3YzI4OGFmMWMxM2VlOWE2MWQxOWY3MTYzYWEyMWY5MjIwN2I2NjM0ODIyOGI1NmQ2NDQzOGFkN2VlYzU1NjcwODYwZmRhM2RhOWJiMDc3M2Y1NjQ3YzJiZDAzMzc4ZDc5NWM3MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZTY4YmJlNWM2YmIzYTM3MjA3ZTY3NDJkZGI3OWMwYjE2NDBmY2QzNTEyOTA5YWNkMTZhZWE4NDZjOGRiMWQ3NmVkZTUxZDU1NjJmMjA2MzkiOiIiOiIiOiIiOiIiOiI1Y2ZhZDIwNTQ2YTFjYzE5OTIyZjBiZTdiN2QwNGJhN2Q4MzM1Njg0MzU0NTQxYjFlYzhjZTBhZGYzNjA3NDQ2Yzg3NDJkNzczN2E1NjZjOTJmY2YzYjJmZGUyMDUxOTdlOWFhOTVjNzM5ZDY3NzYzMWUyODQwM2VhZmVkMWNmNDVmMjJmZTI5ZDM5NzkxMjZlYWFhNDZhNDA0MGE0YzU1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYWM3OWJlODdiZmJhYjM0NDc5N2ZhNmRhNzc1NTE2YmUwOTIzZGE2Y2E1MTc0MDdlNzkwZDFlM2NiMDUyOTgzMTQ2ZjlhNzU3ZmE5MTBjZTciOiIiOiIiOiIiOiIiOiI1YjQ0NDRjYjU4ZGY0NzUwMjM3NGZkNmJkYTA2NGNmMWQ3MGQyNTNiOTk0ZjFhNmU1ZDRlNjI3NDE4NDY0NzJkOWYxY2YxNGEyNDY4YWFmZDRjYTc4NzViMzE5ODdiOGJhMGRlOTE0NDY0OGE4MjYwMmMxOWUyOTNmMjY2OGM5NTE5YmUzZWI4YTEyZjE1NTQzMzk1MzQ4YWE1MTY5N2IyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiY2RkYzQzMzU1ZTY1MTI1NWRlZGYxNzFjOWFhMTMzNDQ1MmUzZTgzMGNjNGMyMTYwNWU5MjcwODU2NTdlNzQyMmI2OGJmZmFiNzRkOGY3OGUiOiIiOiIiOiIiOiIiOiJlNTdmMzJlNmE4YTg0N2YwMzM4MDJhOTJlNjI4MmM5NjdlYjE4ZjNjOTgzN2I4YmJlNWY1ZThkOWQ2ZmJjNGQ1NzE0MTJiODczOTQ0ZDIwYmI4YTM1NGY3ODdjMzAwNGQwYjVkZDVhOTJiZGJhYjYwMGY1NWQxY2NjNTIyNzU3MTVkZjIzOWExZTJhNzkwNDA4NjI2ODBmMzRmNWNkNGYxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZWIxYTMxYzk2NjgzMTI0OTg1YzliNDEyZDE2ZGQ4OTlkNWRhOGM0MzI3M2IzMTczNDE3Y2ExYTkzOTIyNjViMjczMjIxYmJlODc4MzE0NjYiOiIiOiIiOiIiOiIiOiI1OWU0ZDkxNTM0OTUxNGY0YWFjZTNkOWVlYmZkMzBiNThlODI0NmM3ZGNlMjNiZDRjNGU0N2JiOWFjOGMyNjk2NDQxZDViNWJiMmZiYjJhMWI1ODUzNzNlYzVlZTU1MDcxZjJlYTg2OGIyZGYzNDJiNWYyZGY0OGNkMDI2ZGRhYzkxMTRmOTE0MmRiOTk5ZmJjZGU3YTBjMjM0MDNmYjM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiNmEwODZlNjcxMzI3MDg3ZGRlOTEzOTZkZDczZDU0MDBkNTlhNGZjNWIyNmMwNTU4YjdkNTMyMWU0ZjIyNTg0NDA5YjdlNmUwMTRlN2QwNjIiOiIiOiIiOiIiOiIiOiI3MGUxN2NhNzFhZDc1ZTQwZWQzMTYyOWNhZTNmYTljMjMzNzRmNzhlMDIwYzU2ZTU1MTkwN2YyMjUyNzA2YmQ0Y2Q0YzQ3ZDA5OWRiYzA3MjQyOWFlNTNlMzRlZDIwOGZkYWU1ZTZlYzEzZTVjZDliNDM1YzFiMjVkY2JkMDk5MTMyNTcwNDkxZTdjMzU0NGNmOGZmMmZiYTU1M2MxOTdkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiOGI3MDg2ZWZhYzFlM2MzYzg3YzM3OTg0NzFkNGFmZDAyOGI4YmFiMDIxN2Q0MDNmYjYxMjA2NzE1ZDIxOWE5MzUwNWI2MmNkNjE5YmU1MWIiOiIiOiIiOiIiOiIiOiIwZGNkNTAyYzZlODg0YTM2NmI1MGYyMDhhMWI4YzU5ZmZiODVkYmNkNzJhNmUyZDc1YWVhOTRjOTY5MmE1NWE0NWZhN2MyOTAwYTI3N2RjZDM4Yjc5Y2Y0NjNhYzg5NjFmZTU0ZGY0N2JjZmU1YTYwNTU1ZWU0ZWEyYmU3NmZhZWZlZGFlM2NlNjVkYjRiM2YwNDMwMWNmNWM0M2FkYTQzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjdkNzA1MmE3NzZmZDJmYjNkNzE5MWY3MzMzMDRlZThiYmU0YTBjZWVkY2E4MDIwNzQ5MDQ3ZTg3OWQ2MTA5NTVlZWQ5MTZlNDA2MGUwMGM5IjoiIjoiZmQ4YmIzM2FhYjJmNmNkZmJjNTQxODExODYxZDUxOGQiOiI5OWFmZTM0NzU0MDQ2MWRkZjZhYmViNDkxZTA3MTViNCI6IjAyZjc3MzQ4MmRkN2FlNjZmNzZlMzgxNTk4YTY0ZWYwIjoiYTczNjM0Mzg0NGZjOTI1MTEzOTFkYjBhZGRkOTA2NGRiZWUyNGM4OTc2YWEyNTlhOWUzYjYzNjhhYTZkZTRjOWJmM2EwZWZmY2RhOWNiMGU5ZGMzMzY1MmFiNThlY2I3NjUwZWQ4MDQ2N2Y3NmE4NDlmYjFjZmMxZWQwYTA5ZjcxNTUwODYwNjRkYjMyNGIxZTEyNGYzZmM5ZTYxNGZjYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIyOWM2MmFmYTNjNTIyMDhhM2ZkZWNiNDNmYTYxM2YxNTZjOWViNTlhYzNjMmQ0OGJiZDg3YmU5OWQxODQxNjU0MTIzMTQxNDBkNDAyNzE0MSI6IiI6IjQzM2RkYWYyNTlkMTRiY2Y4OTc2MzBjY2FhMjczMzhjIjoiMTQxMTQ2ZDQwNGYyODRjMmQwMmI2YTEwMTU2ZTMzODIiOiJlZGMzNDNkYmZmZTcxYWI0MTE0YWMzNjM5ZDQ0NWI2NSI6IjhjNzMwZjA1MjY2OTRkNWE5YTQ1ZGJhYjA1N2ExOTc1MzU3ZDY1YWZkM2VmZjMwMzMyMGJkMTQwNjFmOWFkMzg3NTkxMDJiNmM2MDExNmY2ZGI3YTZlOGU3YWI5NGMwNTUwMGI0ZDFlMzU3ZGY4ZTk1N2FjODkzN2IwNWZiM2QwODBhMGY5MDY3NGQ0NGRlMWJkNmY5NGQyOTVjNDUxOWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMGMwZDFjMDMyOGEzODRlNjk3Njc4YWM4NzMwM2RkNjJjODc4MGI0YWMzM2YxODY3NGVhNGRjZTViMTkwZDRlMzgxZWI3YTViNWUxMmI0ZjEiOiIiOiIwNTU3YmMwNTJhYThlYWJhYjBiYWE0MmNhMzhmYmJlOSI6Ijk4NTg2NWMxODBlMGJmYjdjZGJlZDExYjU4YjVlNTA5IjoiZjQwNDUyZjhjNWI4ZjRjYmMxNjc1ZjcwYmI4MDM3NDAiOiI0YTFmNDQyZWFlNmM4NjFiNjIyMDE0YjA3OWRmZDQ3NTQzMTc2YjgyYmM2MDgyNmNmYTAyZDM5MjNlZjA1NjNmOGRlYmE4MzYyYzhkMTk1MGE3MGU4MGQ2NzE4OWZiNGQ5MDRiODU1ZWQwYWMzOTk0MmFhODY3M2UwOTUxYjQ4NzYzNTRiODQ5YTZjMWM1MWQwYzM1YTNmNGVkNGUyZjIyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjdjYWQ2NWU1Y2MyODg4YWU0ZTk2MGY1ZDE0M2MxNDI1ZmMwNzg1ZGI0NzFjYzU1ZTY2NDUxZDI5Y2Y2NWQ4OTlhMjgxOTA1ZmY5YjI5ZTg3IjoiIjoiODAwZDU4M2IyNTYwZDJhMjMwMDEzMmVlMmQxM2YxOWYiOiI0MmVhZTcwNWMyMjI1ZDIxMmZhMDU1NGFjNmFjNTY0YiI6IjcyMDgxZTdlNzAyMDBmMTk4MmMzYWQ5Y2IxZDNkZGJlIjoiOTUzZTkyMjU4YmU3ZmY2MWI5NzA3NzI1MmFiOTgzNTIzMWUzNjZkZmE1YjYzNWZiODg5YzMzNzU2MmEyNjQxZDNhYTllNDZmZWViMmE0ZWEwM2NiNzNmMWY4MDE1OTRjM2NjNzFkMjk0NWMxMWE1MmJiMGU5MzQxOWRmNWQwODU0YWQ1ZjJlMzZkMjIzYzExOWUxNDVjYWQ1MDc0OTVhNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiIzMDg0Yzg4MTE1NjQxNjhiZjc4MzRkOWE2YzlkMGFkMDgyMWIxM2EwYjY2ZGRkYzVlYzJjOTAyNzgyMzZjMDhiNmY2NTc2MTFhMTY2MzZkNyI6IiI6IjlhNzY2NWIzODgzYmVkMzdhNDhiMDdmOThlZmE0YjhiIjoiMjhiZmU5NjA1YmE4NTYwNzNlZTY5MTQ1Y2NkZGE0ZTAiOiJjMjZkN2M5NjI1NzRhYTU4N2IzZWI3YThjMjliMmUwOCI6IjM2OTA4YWRlZTRjMWU3ZWE0ZTJmMjY2YjY1YWE3ZDdiNTExM2U0YjQzNzdhZGFkZjQ0MDZiYzU3M2UwNDM3NGE3ZThiOWI5YjM2ZWIwMzg0ZTkzMzZhOWU3YjRmMzA4YjQ2M2JkN2FhOTQ3NjE1NGFiMTMxODFkYTVjMmRhOTY3NWEzNzZiOWM4MmFjZTUzOTFlMzc4ZmRkMGNkNGVmMjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYTA0MTBhMzI3MDM3MjBhYmYyZTI4ZTI1MmI1YjkxNzZjYjk2OTM1MDgyYmM5ZWY0Y2E3YmNhYjc4ZmNlN2RhOTdiMDE1ODM3OTA0MWJkNmMiOiIiOiJiNzA5ODJhZjdiNWUzMzdjZmU5ODk3MDNiZmZjMDllOSI6IjhkZjhiMDhmNjQ4NTE4Zjc1MjZjMjRiYjk1ZGYxZTQ0IjoiNjc3NTg2NWY0NTFlZTA1NWVkMjI0MjA3NmRlYmUyMzciOiI1NDhmNjZmMGFjZDllZDg4N2NlYjdmOTVkMWM5YTBjMjllMmY2MDA3YjkyYzU4MWU2MTUxMzkyNTZiZWE2M2QwZmNkN2E5Yjk1MGUzZTg5NDE5ZDIxNDJjNWQ4ZjViYmNjMmJhNWIwZGQ2NzY4OWI3YWRlMDFkOTg0ZTMwM2E1MjkxNjVkYmRkMTQwZWRkNjljM2VjNmE0ZGRkNjNlMDkxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImMyZTlhNmUyZTI5ZjQ3ZGVlMGU4MDg2NjBjNDQ2YTRmYWZmNDY1MDczYTk3ODYyYzJhYjY3ODcwOTVlOTQ0YzUyNzZkMjliYmJiZDdhNzc3IjoiIjoiMzU4ZmZlYWI2YTI0ZjkzMmFiZDRjOTU3N2Y4NGNiMTMiOiIzNzU3OGMyZDliNjhkNDNkNmM4MzE2NGE0YzQzY2UzNyI6IjAyYTdjOTU3NWQ5NTI3YTMzZGY5ZmI1NjYzNzNkYjNhIjoiZmNkMzE4YzgzNTYzZjcyZTVhMjFkNGE5M2E4NDI1NGUwYzNiYjZkM2RlZDU1YzNkNTkzOWRiZDVkMTUyNTA2MmZkNTg3YTQyMjAxMjQzN2FlYjg4NTg5ZTY2OWU1YTVkNTdmN2ViYjE2ZTMwNTkwZjZkZWJkMGVjZWQ4NGY4ZTU3ZDQ3YTNkMTIzYTUyMzYxMTQ1YThmYWIyNThlZDE5YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJjOTM4NTllN2ZlZDExNjNiMDcwYmJlZmNmNWZmYjBhNjZhNmY1Yjk4NjExNmFkYmQ5NTlkMzdlYTNiNzlhMTk3NDQ5MTY5YmIwMWUwMTQzZCI6IiI6ImM2Mjg0MDgxNmFlMDZlYjcyNWJlOWRkM2UyOTU0Y2Q1IjoiNWRjNjA1NzhhNmEzMDlmYWUzM2ViZjE2MmMyMmZhYjQiOiIwMGQwZmFjMTJhOWI2NmI3ZWE5MzY0MTFmMTY0NWQ0YiI6ImNhMmViMjEyYjI5ZDVhMzhjZjcyNDA5Y2Q4Y2I0YmM0MDFlYWNiYzZlNTljODQ1NTFjZGZhMTJjMWM4ZmIzOWMyOWM5ZDQ5OTA1YjI1OTUzZjcyN2FjMjQ0NTNjY2YxYzZmMjBhNGMzZmE3YzMzYjA1MmU0ZTgyYzdmY2JhYjcwYWRlODY1ZDI0OWI2YTI3ZTBiNWVkZGNjZjA1NjdkNmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMjM3YTU2NmU0YTQ2OTk0ZmIxM2FmNWIyZDQzMjFhMDNmZGY1Y2M1NGY0NjFkYWYzMDk0OWY4NmI3YjIyM2ZjMzQxZGRiZTUyNWM1MzMzMzkiOiIiOiJiYzI1MjkwMWY4ZjVjOTM1NzcyMmE0MjRiMGFmMWJiMSI6IjYwMjBkOTNkZjE2YjEwYzMxZDg4MDJmNmJiOWRkZmFjIjoiZjkxMDQxMTcxOTBkOTA1YTMwYzY1YzBhNzYxNDhjN2EiOiI3MGUwNjExZjFjZjcwYmE5M2UzY2M1M2RhODNmYzNkNjA2NGIyOTNlOTBjMTE3ZWMxMmNjNzljNWU0ZWRmODQ1YjZhNWUyYzRjZTc1ZmZjZTVkMThhNzVlMjRiZjUxMzAwYmFlNjQ0M2YwNGE3MTA0N2E4ZjUyMmVkYjM3MDY4OWVmMWIyY2MxMzc2OTg2NWI2OWRjMjMyOTYzZDkwNDE5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjgwYzJiNmZiZDU3NmNkNTdjMzhkMWQxMTk3YjllN2FkNDMyMTYxMTFhMWVjOGI1ZjMxZGZjMWE0ZTA1YzE1ZWQ5NjI4ODM4NmQwNzY4OTUxIjoiIjoiMWFmMjE1ZDliOTkxZTRmN2RkYzJhODlmZTIzMzg4YTEiOiJkODg5ZTQzNDEwZWViMmE4M2NiNjk4MmYzODA3Nzc1NiI6ImM3N2U3YmI5MzExNWMxMGE1NmRiMTI0NWU2MTBlOGI2IjoiYWY5ZjhjMzQ2NTRmNDRmNDI5MTQwNzBkY2YxZTk3MTg4NDkwMmI0MjhjNzMzMjkxM2RkZjJlMzQyZTc3NmUwMWRjMmZjNzNjZDgwM2IzYTQ5MmVkYjE1ZTdjYzc1NWJhYmMyM2Q4YTUwMDdiYjBiZWJkN2YwMmJkMTY4ZDA1NTk0OGU2YTViNjZhMzAxNjk1MTY5NzYxN2VhYWQzNzFhOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZDgwNDFlMzEyMTVmN2M4NDNlZmZhZWMzYWI3MjJlMWQyNzE3NTNhY2YyZWM5YWNlOGI1NzMwZTIxYzBjMzBmOWRhYTk4NTgwNjk1YzQ1NzIiOiIiOiIzNDdmYzg2MjI5ZTJlNmY2YWYyZWFkMTg2MjQ4YzJmOSI6ImEwOWMxYjgxM2ZkMTExMDJkZjM5MmQxMTZmMTI3ZGUxIjoiMGFiNmM1YzdmNjg5YmRhOGEzYTdmNDA2YmY2ZGYzM2QiOiJlMDk0MTRjOGY1ZmYyZDhkNmI2NTIzNzI5NTU2ZGMxYjRiYmE2ZTRjZmM3YTkyOWU0NTYxY2ZkMzJlNTQ4NDkxOGM3ZjIxZTBiNTMzYzNlMzgyN2JiOGUxMTVjYzZhMmFhNWRlZjNkOTQ2MDAxNTY0ZWRhOGNiMzZmYTVhYTc3MTY1MWU0ODM3YWU2MGJlYmEzMmUwMWY1ZDU5YzBiZTBjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJiMGY2OWEyMDUzMWM1YjE4NmJmOGMxNmIyNWZhMWRlOGQ2ODE3YmEzNjJhOWEwMGVhM2FhNTliMDE4YjdjZTg2NDhiN2Y4NGFiOTI1MDUwZiI6IiI6IjI5MDVlNGIwODAzZDIyMWNjZmJhNDNiYjRmMWUzMzM4IjoiMDQ2MGM0YmExNzM4ZGQ3YzY2MmUwZjQzMzdhNDU0YzUiOiJiNWE3ODcwZGM5OWY1YzJlYWQ5M2RhZTc3M2FiNTVjNiI6ImE1NDJhM2JhNTFmNDAyNGQzODc2YTMyZmQ2ZmRhYTEzNmMwMjRmZjM2Yjk2NjJlZDgyY2Y1ODBiYjFkMzNiNTMxYjEyNGMwZTI4ZmQwYjhlYzA2ZTUwZGNjMTExMzIwNjJhNTViZGI5NjFhOTA4Njg4ZGRjY2RhMTJiZThmMTI0MmY4YTVhZGE1MzkzOWUzMmQ4YzAzODEyNTAxMzQ2ODYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDAsIDEyOCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjE4OGFlNDJmYmUwZjRlOWUxN2M3YjA0MzI3MTJhYWVmYjE2NjcxNTcxMzJmOGQ2MjQwZmQ5ZDE5YmE5ZjVmNTZmNThiZDA4ZTk4NDJlMmExIjoiIjoiODg1NjA3MTIyNzdmNzNkNDU3ZjYyYjM3NjkxODkzODEiOiI4OTI5NTdiZmJhY2M2ODRhZjZkMzFjOGJlZmNhOGU0ZCI6ImE5ZTg5ODZmZjg5NDc5ZmE1MDY3ODBiMDdiMDljMmM5IjoiZTc3MTg3OTMwYWM2NjFiZDFhNDIyZTI5Y2FlNGM2NzM3MGQ5ZThhYjBlNDRlYTlkZDg2YjExYjJhMWM1MjcxMTYyNTEzNTg3ZWQwMmRmNGM5MWIwZTA0MTU4NDA2NzYzZTcyYTQ0M2ExOTZiNmEyZTIyYWY3MmVmMjczMmUzOTE2Y2FiZjUxOGZhNThhYjg5ZmVhNTUyODE1MzgxOGE2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMCwgMTI4KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYWQ0OTA4MTliYmI5ZTkzN2UwZDBhNzQ5ZWI4MzQ2NTQ3MGZlMTQ2YWQ5ZjNhZTBiMTA0ODEwYmJiMjg3NzNlNTM4YjQ2NjMxOWJlZjVkNmEiOiIiOiJlMDE4ODJjOGI5YmM1MmQ1ODQyNzQ5MTJkOTMzNjdlOCI6IjIwYTAzNzAwNDk5NDQ0MDI4ZGE0YzhmYzViYTQyZDhmIjoiNjU3NGJlMjY5ZDVjY2I1ZDEwYWQ1ZmQ2YWRkNzdlMmQiOiI1NjYyODQ1NzExYjVhNmMwNDcxNWRjYjMyOTNmMDkxNzA5ZDg3NzAzZjFhNDQ5ODU4ZjA3NDg1ODk1ODI2MGNjZDgzM2Q5Njk5ZmNkMGJjYmE3OTU2ZjkwMzY4MDg5ODQ4MjhhM2E5ZGIyMDQxNTU2Yzc3YjE2NDRhNzU2NmJkODg5MmVkNTNlNDE4Y2I3NGJjYTFhOGQ2NWY1NDVjM2UxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAwLCAxMjgpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJhYTRlYTAwMTE2MDQ0MTkxN2FjNjBmNjIzMTQ2OGY3ZGE5OTNlMTM2ZGNjZTgyMDgzY2M2YzgxYjY5ZTY3ZWFkMzkyNzIxZWE3OWI2M2U5NyI6IiI6IjUwZjg5NjA2ZTc5Mzc4NmExNGVkMTFiMzAyNjMxM2NlIjoiMjQ0NWQ3YjY3MGZkNzdiYjYyZTBjMWRiNzU2NzE4NjMiOiIzMmI3OTQ4OGI0NDA5M2VlN2ZkYjQ0NDFiYzMwMmI3MCI6IjFiODAzMzE0YzhlZDEyNGJmNjU1MGJjNjNiYWJmMDlmMTg5ZTU5ZGYzZDhkNDEwMzU2N2M0NDJiNjc4M2MzMmIyMzZhMTA3ZDRhY2NkN2FiM2U0NjVkMjlmNjIxNjM0OWJhYTI5OGViZWFmZDNjNWNjMTk4ZjA4ODA4NjhiOGM5YjY3ZDk0ZmQ1MzYyNjY1MTIwMGY1ZGZjOTM5ZDQxMjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMTFjMGE3ZTE0NzJjZWM3MGZhOGMxY2ExNTc1OWFjNWJiMWM3M2MyMmRiMzljZDdiYzZhYjU5ZmY3MDhhNWMxZjU5OGU3NWRmMDYwZTE5ODEiOiJiMjRlMzkyY2IxZjNjMThhZjJjYjUwZmVhYzczM2UzMiI6IiI6IiI6IiI6IjA3MGU2MDNjZDQ4ZDU2NDMwYTVhYjQ2MWE3NTFlYzJhNGE2YWE2ZmI2ZWU1MmVmZTlhNDFlNDYxMWVhZmRmYzk1NzE4NGI0N2JiYjAxN2U0ODRhYzM0YzdkZTU2Y2Q3ODEzZmViMzAxYjViZWZjZTU3M2FkMGEyNTRlNmNmZTM1Yjc3YzMwYmU2YjdjYjVlN2VmYTcyODEzYzc1NDZiYTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiZTA1MTQxYWRiNjc4YzI5N2VlYmQ4MTM2ODg1YjY3MzQ1YjljMGM1NGEwZmY3NGQ4MjZlMjZjOTMyM2EzZGEzYWY2ZTVhNWExZjM1MWNiNTQiOiI0ODE0ZWE3MWE4ZTExODQ1NzE2YjIyMDg1Y2M2NWYyYiI6IiI6IiI6IiI6IjVlZjI5YTJlN2U4MjFkNTI5ZDE5MjhlNmJhYjE2ZmI4MGQ2NDkxYTk4ZGQ1MzY5NTQ3M2RhZGVhZDRlNTE0MmMxNDZmMWUyOWIxMDFjNmIxYTU3ZDgzMTVjZTM0ZGIxNzA0MGMwMjU3MmM2NDU1ZDkwMjMwM2RjZmNiMmFkMzA1MjE2NmRlNzkwY2UwYzk0YWY3OGE1MTg2NGVmZDRiMTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiOTc0N2Y1YTJhMjdjNjViMGJkOTIwMmYwNzQzYWZiZmQyNDdiM2IwNWZjZTdkMzFjZDNlMzQ3NDJjZmZlMWM2ZDU1ZjhmOThkZmM1Nzk1M2MiOiJjM2ZjODQzMDk3MmRmYTg4MGUyYmZhNjY4NjJiZmZkZSI6IiI6IiI6IiI6IjkyMTM3ZWJmNzUxODM1NGJkNjVkODcyMzVhODFjNzllMTNjYjUzZTQ2YjQ3ZmEwOTFjZmUzNDJmMDI1M2U1ZWU0NjM0ZThmZTVmY2I5NjdiZmNkYmRmYWE2MDYxNGJmOTY4MjY4NzU2MDhjMGYxYjU1OTY3NjE5ZGI2ZGYyNGVmZWRjODY0OThjYWQ3MzNlMjllZTlkOWUzZDYyNzcyNzMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYTlhOGEwYTdiOGE1OGMyMzllMDgzZmExY2QyYThjOTY4Y2ZjNWYwNzRiYmMzMTQ3M2NiNzFmMjZiODJjZGFlNDIyM2ZhMzI3MDJmNTdlZTMiOiIzZmI0YzJmMzc3MTQwMzlhMWEyZTZjNjhlNDgxOGVlZSI6IiI6IiI6IiI6IjFiNTk4NmNjZGJhYzdkYTdmZTdlNzkyZGRkNDQ1Y2E4OTRiNmVjMDg0MjRhMTdmZWQ1Mzg1ZmY4YmQwM2JhNzgyYjQyYmM1YTk2NzZhY2Q1YmU4MDYxZDUzNTkzMGE0ODc5MDI5MjMxNDg3MTBmZjE3OTA4ZmNiMDNkYjdkZGMwZTRiMTBiZTE2YzBhMDM2NWRiMzg3NTI5YTIzOTg1NTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiOTlkMTgyMmJjMTZmMmU3YmJlYjY1NTZjNTIxNTQ4OWVhNjAzOWY1NGExNzVhZTg2YWFmNGNlZjdkODBmZmVkYzM3ZTNjNjhjN2RlMDNkZGQiOiJlODBmYTAzYmQ3YzhmNWFjZGRhNTc1NGVmMDBjZGI1YyI6IiI6IiI6IiI6IjIyMzY1NjgyNTJhMzg0YTdlNzVjZWZiYTA0YTk0MzgxOTQxMDM1YjI4ZGU3NjRkNWIyNTE4YTk4YmE0ZThmMWQ1MGU4MjMwOTUzZGY0MGRiNjAyYjg5NTllZThmMWI4ODMxYjI5NTE2ZjkzN2FhZjU2MTY3OWJhYzBmZmIxMTIwNzAzMGVmMzNiMjZkYTI4YWY5M2JhNTUyYzA4YmZmOTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMzA1YTQ0NzhiYjg1YjBjZGNiOTk2MThkODc1MzQ5NGJlZWU2MTdkNzBhZWMyNjUwMWVlZjJmNzUxY2FkMGIxY2RlNTA5ODA2ZDQwNjQ0MjIiOiJjM2ZhNDkwYTAxNTExZTg0MTA1NzcwMjFhMzA3YzMxYiI6IiI6IiI6IiI6ImYyM2NlYWRiODgxYjk0NTAyOWI3ODM2NmExNzNjMjBhZjkzZTQzZmQ4YzNiZTA1ODhmODExYWYzMWE3ZGRkNjUzNjEwY2RmYzNjZDg3NWEwZjExNGZjMWI4ODdlNGZlNTA0MmViMGRjMGMzNjc0Njk2MWIxYjcxMjY5NTBhZmY0YzAxMjQ1YzIxNTE1NjcxNWM3ZWZkMTRjNzY1MzlhMGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMTVjMTc4Mzc1YzgzOTg2NmFiMzFiMzhiOTAwYmE4ODkzMjViYWYxOWI4NGM4ZmFkZjJmNzhkYTM1OWFmMTBkYTY0YzQyMTMwZjc5ZjMwNTQiOiJhNGQ1MDQ5NjcxMWRjYWJkZThlMGZmMjFkM2RhNzUzNSI6IiI6IiI6IiI6IjNmMzgyNTczNzAzNTM2NzdkZWU5MTI3ODYyMzA1MTU4YjFjNWI2MDc3NDFkNjI5MDZjZWJmOGJhYmVlNGZjNmNmMWRlZTNmODIxZDFkNzUwYzY5ZjNmZjU2ODNkMjY2ZGYwYTY2OWQyOTFmNjgxNmQ4NmNkMjIyYjU2YTM1MWMyNDBhZmJiNDQzZTg4NmNhMTk0OTk0YjRkZWRkYzU0YmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiN2VmYjYzZWQxZTA3Y2Y4NTNmY2U4MDQ2ODA0OWRkNWVkNWU1NWE4YjU4YmJkZDMyMzQxZjEzNzg2N2M0NTFkOGQ0ZTMyNzczM2RlODljOTQiOiJkODkwMjhkMjFjZWUyYjIyM2Q2MzRhOTkyN2VjMDM2YiI6IiI6IiI6IiI6IjQ3N2ExNjEyYzE5YjFjMmZlZTIzMjM4NWNjZGI1YjJmMzJjODQ1YzA3ZmEyMTZlZTQxMGNjYTIwMjQ1MjM5ZDMyMjBhYzQ4NzcwMDE3YzRkNTJmOTlhMjY3ZDUzZTBhY2RmNjllOGY0YmQxZDc2ZDQ2M2U5YmRkZGMxNmJlZjdmYWY5ZDliYWE5YjlkZTNkMzk3ZDc0MGQ2ODVjMTU4YTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYzcyMDk3NTViOTJiZmY5M2EwNTlkYjc5ODgzYjI4NjZiNTFiYWUzMzdhZWVjOWU1OGM4N2U2OGRlMzM1NDVmYTIwODcwZTVlNzBhMTkwZjYiOiIzNGFlZTk2MWVjY2YwYjkyYjgzM2YyNDQ4NzIwYmRjOSI6IiI6IiI6IiI6IjI4NTY5MjQ2ODA1MzU0NzYzOGU2NWRmYjdjOGI2OWFhYzQzZTE2YmU1YTRjZTk4OThhZTBkMGM4ZjU2N2RjMjc5NDVlZjZlMjFmMzZkNDU2Y2EyNDg1Nzc4MjliOTBmOTZhODg3Zjk2ZTljMmE2ZmYyNjE2ZTIxYzdlYzkzMDkzZDY4ZjYwZDJjYjk5ZjJjNzYzMmY4NTZlMzNlYThmZjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiMWNlZWNlYmJjNDJmOWVhMWZhZjc0OTQwNzZmNzkzN2JhODI3YjQ2NjZkMDQzM2VjYzAyOGVlNzVkNGY1NWRlMmIyMjNlOTI2MjVlMzk5YWQiOiJiNDMxYTM2Yzk5NmNjZGI1ZTkzNmRhN2ViZDIxNmMyMCI6IiI6IiI6IiI6IjY0ZDRiYWNkZjE4NWRkOGY2ZWJhMzVkYzhmNzlmYTJjYWIxNTUxMTNlMDIwZDFmMTJiMzJiYmM0YmZiOWM4NTg4MTY5MmE1ZDg5MzNhNDBkOWZlOGY2NjI5Zjc0YmJhOGE5OWU4ZGIwMjI4YTEzYzhkNzc3NjQ1OWY3M2RiYThlNTllOTgyMGFlNzJmOGM0MjVhYzMwNDQwNzljMWViZmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImQ1YjI2NGNlYzFjN2FjZDc4YjkwMmRjMTRhNDU3ZDMwYjc5YWNkM2UwNmExMmY1N2NmMGMzZTFiOGZiMWJlZmI1YWJiOWFmMWY1OGNjOWVlIjoiMTJlNDEwMWQ2ZDQ1MDVjZDQzNzEwYjA1ZDUyYTkxOTQiOiIiOiIiOiIiOiJiNTNkM2JiZjRhOTU2MTkwNGFkOWUxMDBiMjYwMWRiMjY2MGY0MTVmYzVjYWViYmIxYTYyOGI3MDk1ZTZkZTRhMzg5NWFjNWRhNmYyYzFlMWM2NjU1ZDc2ZmE1YjhmNzVmNTJkZTQxNTY0ZDc5YjA5YzlkMmM3NmMxYzQ4NmY0NjJhNzE2NGVjZDc2ZjBkZmE3YjVmNTNjMGMyNWI3NzMwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJmNDQwNjcxYmNiYmIxYmRhZmIyMmMwNjQ4MmZmNjcwMzc0Y2RiZDY5NTM1ZDA3OTgwZjQzY2ZhZjEwYWFkMjQ1M2Q4ODRjZTU4NTJkYmIzMiI6IjhhNjkxNDRlYmVjYTU5YzMzMGM5YTRlMGU2NDRhN2FiIjoiIjoiIjoiIjoiYTViNDI0NDdmNGQwMjUwNDUzNmRmOWUwY2E4ZDk4NjQyYTIxYjY0YTZiODRiZGU0YjJiYzE4NmMyOGIwZjc0MGViZGYyZDYwYzY2NGQ0ZDg5YTg2NzIwN2JiOGQ0YzYyZjE3NDVjYjNjOTcxYjRiMjYyMjQyM2E0MjkxZTFjYzk3ZmNlNzEyOGUzZWNiM2VjMTNjZTA4OTg3ZjU5Yjc3YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiYmVmMzk5NWYwZDJiMTA1MTU1NGNmN2IzMjM1ODA5ZmNkMjk4OWNhZmJhZDA4MTYzMGM1MzhhN2JhMDY5NWZmZDk1ZjNhYmVhYmYyYTg2N2QiOiJlODA3Y2ZjNTI0OTQxMTkxODhmODZiZmVhODc4ZjJjZCI6IiI6IiI6IiI6IjUyN2JjYTZiOTQ1ZGI4ZjJjZGE3Zjc5NTc2M2ViNTc2N2NmYTFhNDE5NWE5ZDlhZTcwZGQ4MTI5MTU4MTM4ZTY4N2EwNTZiNjRmMDBkMjllMTFjMzdhOTc0MGQxOWZiZDE2NDI5Y2U0ZGFlNzkwMjkwMThiOTg0YTIyYzFhMmIyYjk4ODU1OGIxMzM2NTEyMzRiMzVmMjFmZjQyZWRjYjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjVmYzFjZWE5ODhhZGYxZjdjMDkwYjE0MzcwY2UxNjkzMDBhMDA4YTY4NzQ3NWM0NjRlYWI0NjExY2JmM2VhNTU4M2E5NjdlZjBjMGVlMmU3IjoiN2ZlZDAzOWQ5OThiYmZhM2FkNjJhYWI4NmMxNzZkNmEiOiIiOiIiOiIiOiJmMDk2ZjdmNjMxODgyZjVlNWE2ZTcwOGQ3MTUzNGMxOWVlYTIwYTU3ZmMyMTAxNTVkNDlmZTliODcyYjE4Y2MwNGE3M2NiNjUyYTAzZWNmYTBjNmRmYmMxNzQ4MTFlZmQwODk3ZjRiZDkyYzkxNmE1YzgzNWJkZmI1ZTEyNjA0OGY3YzE3ZGFmMDBhODQ1ZmYwMjQ2NDE0OTkwNDcwOTdkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI5Yzg4MDk5YWY0OGY5MDUzYWJlYzQ1NWI3YmJiMDE1MzY0ZmQ1OTNhMGY0MDE3NWQ5ZDdiNjMwMWQ4NmIyNTk2MDZmYmNhN2RlNzNjZTYzYSI6Ijc5ZTUwMWI3N2Y5NjdhNjc2ZmUzOThlYjdjODFjZGRlIjoiIjoiIjoiIjoiZThkNTNiZDExOWQyM2NjNTcyNDVhOGI5YjJkMTExODExZGM2NjE1NTVlMzg5MTgwZTM2N2U0MWY4YzgxNWFiNGU3YWFmNWEyMzg0NzkxMTc0MDJiYTE3ZWE0MWMxMTA0ZjQ3NWUxMWJiOTdjZGM0MTQ0MDlhYzUxNmIzYjI4YjYyZjI4NGM3ZDQwOTM5NzUyNzlkM2MzMTMyMGM2MTA2MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjAzZTdiNDFjOTU4MThlYjBiNjY3YmZhOGExNzVhODI0NjZhMWU0MTdhOWI2YjkyZmQxN2U5OGMyZTUwZWUwZGIwMGQyNWMzMzY0NDUxZTk1IjoiMTI2ZGRlZDVlYjBiYzgxYmUzN2MxMGJjZDlkNWY3OTMiOiJkYzU5NmQxODhlMjM0MzgwMjI0MGJjN2Y1Y2M2MDUxNiI6IjE0YzhlYzEwZjViZGRlNmI5ZTc1ODk4ZDdmOWYwM2QwIjoiMzFhYTg0MmFmY2MxZGFhOTQwOTgyNDFhODdkNmRkZmMiOiI0NzM5YjFiY2Y4NzQwNGEyMjkwODI5YmQ3YTYxZjBiMzkxYTc5NGM3MWMwNTVjN2NjNTEzYjI4ZGNiNWZkYzg4NjQ1YmM5Y2I0OTBmNDFmYWIxMzRjNmIzM2NlOTMzNjU3MTc2Mjc1NDM0Mzk2MWRlNjcxYjAyYTQ3OTYwYjRiNGUyM2M1YmZiODdkY2MxOWIyNjBiM2JjYjkyMWFlMzI1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiNTgxMDA0M2NhNjNlZjVlNTczZTExOGFiZDA5ZDVlOWNhYTg3M2QzYTJhMmExYzdlYjU3NDE2N2JhYjU2ZTRkMWFiNWMxNzI1NDIxYmUzYWEiOiIwZWYwMGZlM2U5MTI2YmM1M2RkNjFiOGQyY2I5YTJhNCI6IjRlMTlmMDEwMDFkMWY1NTBjZTBkZDBiZDRjZDNlMjE2IjoiNjg0MTgzNDI2ZmI2ZDEwMmY4ZTJjZTU1YzU5OWI3NDAiOiIxYTgwNzEwZTI1Yzc4Y2FmYjgxY2MxMTlhZGIwYTJmOSI6ImViNGM3MDU5NjEyZDBhYjYzYzBmMjhjZWI3YjhmODk3NjBjM2QyYjUwOGY5ODQ0MTQxMmJiZTBhYzEzM2NhZmE3ZTI5ODFhYzI3NTAyNzJlYmU1MDM2MjJiNDc3YzY3ZTg2OTMwYzkxOThmZTIxZjcyODgzOTRiMmUxMWE1MzAyZTNkYjAzYjU5NzgwYzQ5OTA3ZWY3MjAxOTllYTEzNjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJjMjdkMWFiYzVhZmQzMGEzMDI1ZDQyYmY5ZWZlYjhhNmYyNjA4NDcwZGI5YTkwZjhlYzRhZDJhMTI2Yjc5OTQwMmVjOGExZjIxMGQ3MDhkMSI6IjgwNDAwNDYwNzAxMmVkN2I0MGZmMGFkOGY1Y2EwODVjIjoiZWIyMzkzZGYwYmUwZmY0NzFkMzU0MzQzYzQzYmYyZWEiOiI5MjYxODMyMGNhY2U2YzA3NWRjZDY5YTYzNGU3NjY2NiI6ImRhNTQ3MzZkZjVkMmUwZGFlZjY2NGU5MDU4NjRjYzFiIjoiZWVmZjMxNzA1MGFhM2JkYTU3YmRmZWYyZDQ2NDA4YjNmYjJlNjRkMzRkNDY5NjI1NGM5ZDhhMDlmYTFiMzI1YmIzZTNhOTczZWZlNzkxOGViMDM0ODk4NjVmNWUxM2U5YTI4YTBiYmI0MzgyMmI5Y2EzYjIwOWNjYWExY2Q1YmZhNTEzOWZlNTllMTYyNDhlMWY0NjhmOTQ0YTAyMjhjZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjNmMzQ2ODA5MzliYTEyOGMwN2M1ZGM1YWExNjFhODcwM2E0NTQ0MGNhNjhjOGQ1YzJiNzA2ZTdhZjEwMWFlNGE2NjliNDZkZmEyNjJhZGEyIjoiZTQyM2RkMTFjZjkyYzUzNzUwOTQ5OWViODkxZWY1ZjMiOiJjZDMyYzg4YzU2ODU4Y2M1ZjZkMzkxOTlhYmFmNDU0MyI6IjJiMjRiYzZkYjFlY2U3YTMyY2ZlNTdkZjNmNmZmNzRjIjoiM2M2ZGM2ZmIzNTNjZTdlMTMxZjhkMDk2MzU0NjVkMmIiOiI5ZGNlMGI1YjNjODIwMWM5OGY1NDUwMWFmY2UxNTk1ZWFhYTZlM2U2Yjg5YWJiNmY2MTEyYjViZDVkMWZjZjU0OWJkMTNlNTFmZWU4N2YwYWFiMzQ1NTcxY2ZlN2Q3YjYxMDY5NjYwYmQ4Y2I4ZWEzMzQwNmI2MDI2YmEyOGQwMjQ1N2UyYmQzZWNiZTgzNjgyOWE0ZDkxNDgxZmMwZjc1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiOTRiMzFiNzE4YmM0MGIyOGNjNWE2N2VhNWU4OTFjMTRlMTY4M2QwZTI0M2M0ODY4ZGI3YTYxM2JlYWRmMTQzMzU1MDAwM2RjZWRiZDIyN2MiOiI1ZGQyN2FiM2VhOTRhYzVjMDRmNGY4YzEzYzc2NzM1NCI6ImZlMWZiYWFiZTdhMmJkZjRmZmRjZmFjMGU3ZTIxNGU0IjoiZDcxZDlmMmE2ODg3NjgxYmVmOTFmNWMxYWFjYTUwYjgiOiIwNmNmYzk5MDg3NDM3YWI3NzU0YzVkNjI2YmEwNzA4MyI6IjQxODZmMmE5NTE4MzcxZDEyMzQ3M2E0Yzk2ZDIzYTQ0Yzg5YWY5YmFmZTE3ZWIyZWE3MDI5MDJiNWE5NTVhNDJiMDUxODhiOGRhZjdlYzdiYWVlMzUyYjM2NWY0NmEzYjg4MDgxMGFmNWM5Njc4ZGY1NTAzYjVlMmNmOWQwMjg5N2JlODFlNDA5MTQ1YzBjZGJmYjgzOTQ5ZWYzMjdmNGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiI2YjkwZTBlMTQ5NmRlOTczNTIzOWFiNmVjMjg3NjY2NjljNjVlMWE0YmMwZjVjMDRlNDQ2Mzg4YTkwZDg2YTFmMDYwYWQ0MzY2NjYyMDRmYSI6Ijk5NDU1YTVkZjJiMTM0MTBkY2I5MTJmMzdjMjY2MDkzIjoiYTQ3ZjI0NWZhNmYwZDkyOGMxN2VkODk1NmQxNTM1YTYiOiJhODhjZGJmODIzNjJmMWEyZWE3OGVmNWJiY2JlYzdmMiI6ImViOGRhOGE0OWM0OTE3ZDcxZGY3ZmFjZDhlOTM5OWM0IjoiOTliMDlhMGJmNGQwMDUzOWY3YzFmM2MyOGI2MGNkODZiNDdhMzM5NjFkYTdhNjQ5ZTgxMGE5N2MxMzg4YmJkNzEyYzZlYjBmN2RmNGI2OGNjY2MwMWIyNWRlZmJlYzQyYjY3ZjRhMzQxYzA0NjBlN2IyMGFiNjdhYmIzNGNjMmEzY2U1YjVkN2QwNmExODZmNDhkOTVhNzYwN2JhMDUxMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjA1NDc0Y2YxYmZhMTVlMTJiYmVhN2NmYTk4NTJkMTUyZWEyOWY4NDQyMjkxYzY0YThjOWRkYTIyY2E2NTNmNzU1ZDVhNWYxMjg5NzJkNGE1IjoiNzBkMDBlMzdhODhiMzBjNDUwNTgwZWFlZDVkNGQ2MGIiOiI2NTFmOGFkNmQzZWQyYmYwNDI2MmRjNzllY2YxNjRhMyI6IjNlNjkzZGRmOTkzZDYzY2Q0YzlkNDY0ZjJjODRjOGExIjoiNTNkYjBjMGMxMjM2M2JhYjdiMWVkNTdkNDIwOTk4YWMiOiI1OTBlNzQ3OTU2ZTZkMDFlYWRkMWM5YjdiMTM4N2JmYjVjMjA2OTNkYWM4NGY3MGUyYzI5MzE0NTliM2NhOTUzNDMyNWQ4NGVlZWYxYjI0NWQxN2I4Y2QwNTllMDVhM2JmOTk4ZmZiNTE3ZmViYTBiMDQ3NTUzNjMzZGFkNjQyZThjY2U1YzRiNzExMGJmNTdhYTY0MTZlZGQyMDRmNzgwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMToiN2U5YTQ3MzJmNTg0MTYxNzM5NWVlMDRhZGUyMTNiODA3ODVkMmU0ZmVmMjY3ZDUxZmUxMzk3M2I2NzViZmFjMzA3MTZkNzUzY2YyZjYyMzIiOiIwZTcyNWY1ZTJlM2Y1YjljYjVlYzM2YzRhNGY5OWUwYSI6IjAyNTkyYWI4ZTRlMjA5NjczM2U2YjMwMGVhYzI3OGNhIjoiMmYzZjhlMjUwNGJmZTAwOGFhMWZlZTExNTBiNDdmMDUiOiIyNDkxMTc3ZTg0ZTA2YzNjNmI0ODIzNWIyOWMzMTZjNCI6ImNhNTBkYTA4MzlkZTU0YmQ5ZmVjMWE0YjFkNmVkYmExZTY4YjQ3OTcwYWRjMzZmYmY4OGU3NzU3YWY2OTYyZDliOGVhZDI2NmY4YWFkNjk2ZjkyMGExYmZjNzAyZDhjYTQzYzQ1MDRjZmE0MmQ3YTYwM2E1NWZhNTI0YzYyZmU0OWU2OThmMjFlZGE3MDI1YzliODQwZWMxYjk3OTUwNjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTEsIDEyOCwgMTI4KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEExOiJmYzE2ZDY5ZGY2MjU0YTliNzc0M2NhNDNhNjRlOWQxZjU5ODZkNzcxYjZjYjA2OWE2NTQ4NGZiNDMxMWE4MDQ3OWE0ZDAwYTQyY2UxNmNkNiI6IjgyZmRiYTVmYjRjMDRiZDU1MGViNWE4ZTJlNGIwYTMxIjoiOTk4YjI3YThlMzE0Yjk5YjRjYTA2NTkzYmY5ZDRhMTciOiJiOTc3MDZkNjA2OGNiZjhkZjM1YjI4YTJiY2JhM2I1NSI6ImMyNGUyMmNmNDc4YTYxZjFhZGY1YmVlY2U5NDdlMTZhIjoiMjk1NzNkNTRlODBlNDM2MjUwMjRkMTQ5ZTZlYTU1Y2NlNTcyOGJiNDU2ZTg2Yjc1MTc1ZDM4YWQ5NWFlYjRhZTVjNDcyNzBhZTc3NDM3NGNhNDRlMjIzMGM1ZDE4NjFmZjk1NGY5ZmQ0MzJhNWU4MzY3YWJlNDlhODhlZDhlZGE1MDRiOTkxNzQ3ZWE5YzRjZjQ0OGJhNTA0Y2I3ZGUxNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMSwgMTI4LCAxMjgpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImU5MTc1MzdlNTM0Zjk0MzNlNDBmODI3MWE3OTlmODU5NTI0Y2U5YmI4NGE1M2NhYWY5ZWVhOTk4NGQ4ZWJmZjcwMWViN2M1ZjYyNzA3NGJmIjoiNjgyMDg4ZjNjZTg5ZWU2MzVmNWM4ZWMyNWVhOGM4YzgiOiIwODVhOWQyMGEyZDAxN2M0ZDNlNTdkMjBjYmE1MjcxNCI6ImIwNzEyMmM4ZWViMjk5Mjk1ODU4YTJmZDFkM2I2MDk4IjoiMTYzNzI2MWI0YjNlNzc2MWI1OTIzMDQ4YTQ2ZDFlYjAiOiJiZTQwNzg2MTM5YWEzOTY2ZmNiODUxOThkODYxZjUyMzljYmY4ODg2YWU4ZTgxNDU3MTIxN2RkNDQ1NGM4NjQ2YzRjODQyODU1OGVlM2Q4MGM1Mjk3YWRkNjRkNmQxYTk5MWM0ZmRjZDcyY2Y0MmY4MmQ3M2E4OWI4YmQyMzY0Y2QxMTk4MjFiMWJmNTRmNjlhY2QwMWE3NTg2YzUzOTI1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6Ijg1ZWQ4NjExYWM1OGFmMmQ2Yjg3OGViY2E3NDI1NmQzZjJmMjBhN2E0ZjE3NDgyMmRlNmVhOGQwY2QwYmRmMThkMzk1Nzg1ZjA3OTdkMzcxIjoiZjI2MTIwODVjNWQ4MzM4YzliNzdiOWIxZWI4MDkyYWYiOiJmNDE0NjI5ZmU3YWUwYTIxYjIxMWUwOWZiNjY1MTJiOSI6ImI5NDMxOTFkMTg4MmEzOTAwMzIzMzliZGVmZDE5MzUxIjoiNGFkYWM5ODE2OTk4Y2IxMDVkMWM0ZjdjZDNkNTM3NjQiOiJkZDc5NDI2ZjYxZTgxZDg2NTYxYTk4ODUzYjdlMTg3ZWZmN2RiM2U4OTU4OTQ0Y2MxMGE3NGU3YjEyZGIzYjA4YmI0NDM2YmY2NDY5NGM1YjhiZjE4NTdlNzkxYWU3MTk0NTU0YWVmNmI0OGQyYjMzYWQ2ODU0YmQyZTk3NzFiYmVhM2UwOGMyYzA4M2E4MmNiMDdkNzI0MmNlMjJkYjJkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjY2NTJiMWMwNDAzZWYxNjQxNmRiODhlNDk0NTYxMTkxMTVkMzkwMWNkN2RjZTM0M2M3MTgzMjQyMjIwOTRjMjVkODVjMzM4NTdkYWY1YjI4IjoiYTU4MDYxM2RhOGZmN2IwNjU4MGRiOWE0MmJjMGNkYmIiOiI5MjMwMTQwMzljZDExN2Y5MjQ5MDBjZDMzMDYwN2QwZCI6IjhiNDJmOTNkMmNjZGZlYTI3MmY3YTAzYmYzN2I4MzFkIjoiMjhjZTk3NjY4ZDZjYzkyZGE4ZWUyNTA3N2NiMjVkZTkiOiJkMzFkZDU5MjM3YjNjOGIyODg1ODM4ODQwMjYxNzI3YWMxMTZiYWU2NzNiNTU0ZmU5YzhiMGM2NGIxNTczYTI1YmM0YTE0YzE5NDJkODA1NjNmYjQxNjVjNTdlMWFlZjVjOTRjMWY2YjFmODhlYzZiYjJiYmMxMGNjZDgxNDlkMTc1ZTQ5NjVkMDczNDFhYmEwNmE5NDI2ZGYwZDBmZWUzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6ImYyOTcxODZhYWI0ZjYzZjZmYjg1YzRmMjlkNjU5ZDZlNDhmYWIyMDA0MjRkNjdkZDUyZmNhY2ZlNzI1YWQ2NWMwYTQ3ZGUyNTY5MGMwYWM1IjoiOTQxNGY3MDJmZDA1MGY3ZWRiOWE2NDhjZDgzM2Y4YzkiOiI5MWQ1ZWI3OTYyZWMxMDUxMDA0MDQxZjVkMjNmZmMzNCI6Ijk0YWZjNzAyMzY1MGMyZWRjZDhjOTU3ZTMyMGIwNGYwIjoiYjZiNzlkZjgyNzgwMjk3MjYxZTAwZWYwNTM4OWI2OTMiOiJlYmJkZGU5MDQzNTBjNmQ4MDNmZTI1OGEzYWE3YTYzNjIyZjJlOTU0MGYwM2IxY2Y2ODdlMjBlZjM1ZmM1YmE2YjYxNjI1NDcxMGNkNDUxNWVhZjY5YWJmYmEwYmE3NzhiODdlNGNlMWY5ZjFmZWYzNDQwMmM2ZThkMjNlZmJkZWI3ZGE1M2EzZGI3MzNlNjk1MjdkMzZmMjQwMDAyNTFjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjkwODk5ZDJkYTk3NzU5Y2M2MDlmOTU2ZjVmMzkxYTBlZGJiNDIyZjQ1YWZhMGM3Mjc0YTJlZjVkYTYzNmZlYzcwYzZkOTI2YjI2NzBiODhkIjoiMjMyNjFjMGU3MjI2ZDc0OWEwZDdkMDE2NmU5MmRhZTkiOiI4ZWEyZTQxMTgyN2M1ZDhiNTRiMjRkYThhYjQxYTg0MSI6ImI5ZWUxYzk5MjMyNDA1MjNlN2U0NzQ1ZWY5MzU4MWJiIjoiYmIwZjc4NTk3MmNmNjgyMjJhNWVmZjRjN2RkM2UyOGUiOiIyYWYzNWIxZmJhMGM2MmFhZTk5MWMxMmQ1MGM4NmNlMmNjNjMzMjI0YjE1OGIxNTc0NTljNDFhNTQ0NDA3MmU5MThiNGM3NzdiZmM4NGY4MDAwYWEyMzhhNDZjNWQ1MjU4MDU3ODY2ZjI0ODQ5NzFkMjcwOGMzMzQ5NzE5MWEyNjg2ZjhlZTllMzY1NzYxNmUwMGRmY2E2MWUwZmZiOGZmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0xLCAxMjgsIDEyOCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTE6IjRlODIyN2U4NDIyZDY3NGNkYjc5ZTUyY2MzMGI3Yjg0ZjgxY2MwNWIwMzMzOTcwNGRiYTNlNzMxZmM4MTk0OWU2NzlhNDI1N2M1ZmQ2OGE3IjoiMmQ2ZTRhZjAyYWNhZjIzMGJmNzQ2MTU3ZWM2MjRiYTciOiJkZWViYjM2OGE3OWMxNzg4NTI4YjU4OTA1NmIxMTk0YiI6IjFkYmJjN2ExMzFlOTgzNDRmZDc0OGVkYzZmZWMxMWEwIjoiMDI2NmU4YTA2NmRjYWJhZjY5OTFjN2E5MWUxYzZlNTYiOiJlNTFmYzgzM2E2MGIwOTllNTY5OTZhNjY4MjAzNjhmNTMzMjgyMmM4ZjlkZmZlODQ1OWM4MGQyNTEyZDQ1MWUxNjY5ZWNmNmU1NjJhMWMyOTVmYTY5ODFmYTY1MWZkZDNkOGQ5MzZjMThmODhkNTg0NDM5M2EyYTM3MWFhYWM4ZjQ4NWNmZTkyOTI2ZjFhNTQ5ODA1MDBlZGM0M2EwYTZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIwOWVmZmEzOTA2YTVlOTNkMDU1MzBlZGM3MWU2MmIzOWM1ZTRkYTAyMDUzNzE3NmMyMzgyM2RhNTJkYmRiYWU4MzA3NjU2Y2RhZjhmODYxNDcxZGJhMTQ1MzNjODgwNTA1ODc0MDk4OTE3ZTMzOGYyMGVmOGQ4YTEiOiIiOiIiOiIiOiIiOiJkNWRlOGEzMzg4YjExZTQ1MDg1ZjZkOWEwMDk0NjI5NDc2MzFjNGU3NDUyMzA4MGNjZDAzYTAxOTZhYTU2YjYzYTkzYTI5MzlmNDkwZTk0NTZlOWZjZTNlOTAwMGU1ODE5MDk5MWI5YWVkNmQxNDVhYzE4ZjY1Y2YyYjFjMTdlYjAyMWFjYzUyNTZlYjZhN2U5MDIzZjYyYWVkODdkMTVlYTRlNGIzMjhmMjY1Y2MzNGFkYmMwNjJkNTQ1MjQzNjVjYzljNTA3M2E4MzcxZjM1ZGMyZjQ1OWUxZDAyNzUxNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMjlhNzA3MWU2ODY5MzZlNjBjMzkyMDYxZjcxYjY4NTAwZGQ2ZjExYzU2MzczMmZjYTlkZWMzYjJmODU5ZTA2YTg1N2ZkOTRlM2NhMTgxNzg3MmQ5NGMyYjdjMmYyODNhMGQyZDEyYTY0NDNlOTVmN2U3MDBhOTEwIjoiIjoiIjoiIjoiIjoiNzJjMGYzY2I3NzkyYmZlYmJjMWVlNmY2NWQ0MGQxMThhNmExYzRlMDRlNTg5YzhmNzAyNzNiNGM3YjcxOGM5ZGYzODM2NTg1NzJiODk0ODM4YTMxMWZjMGFhMmFhNjI1ODc1OGIzMzc4M2UxOTJiMGMzYzFkMzIyODA5Mzc1ZGM5MjVhMDU2MDVmZWQ4YzdlOGZiODc4ZmI2M2M4NGNlNjM5ZmQyNzdkOTk1NWY5MTYwMmE5ZjQ3NzdiN2MzYjE1NDA0YzRlNzYxZWM4ZDQ2NjY3NGUzMjEzNmM3YjhiZGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImFiZDNkYWZjODViMjMwMjU3OTJiY2RhZjlmNDEwODI5ZDMyMDFjMWU4Y2E0NTBlMjE3ZTEzZWMyZTNiNzQ0ZThjNTQxMDcxNzRhNmU2OWFkMDVmNjQzZWU1Y2VjNDljZDQ3ZWE4OGM4MGI5NmEwOTQ0MTU0YjQ1OCI6IiI6IiI6IiI6IiI6IjE1MjMzM2UxNmIwNDI4M2RmYjhjNDNkYmIzYmU0M2I1ZGIyZWM0OWEzOTlmYWNiNjVjZWJkZjdjYTNlZDI2Nzc5MmJhMzA4Y2RiMDY0OWIwYzE5Y2IxMTI2YjE0NGQ1NzY2YjVhZmVjYTk4MDM2YTFmODVjZDJjZmUzYjgwNzEwMTFiNjliMmFlYzM4MmY4NTYyZDlkZDQzMzFhNTU0ZjNhM2VlNjMyY2ZmMzA4NDg4YjMwYTc0MTZiZThiYmRlZTdlMjUwY2QxMmYzNzFkMDY5YTA5N2U5ZWFjNDMwMzFhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJjYWEyODZjMTYwZDIyYWYxMDkyMmVlNjA4OGMyNjlkMGM5NjMwMzRlNWZkMmE4NWQyZmMxNzFkMGM0YmEwODMzYjYzMGE2NGFiMDk5NjVmMTMyYTc0NDY1NjYzMWJmMmRkMjc0MzBjN2MyZDFlNTljZGNmNDNhOTciOiIiOiIiOiIiOiIiOiI0ZDYxMzJiOWNlNzA0NzBkZDM2ZjU1MTU4NGFkYTYzOWU3NGI4NWZiOWJkM2MzZTM1MDAxMWQ5OWYyZGMwMzcxZjg3NGU2YjlkOTJlYmEzZmNlYWZlMzRlNTc0YzE0NDFkMGQ0NzZjNDc1YjcwNDc1NWEyODczM2UzMTYzNzk2MmNhZTY3ZTg0OWJlZDE4ZDc3NTAxMzgzY2RiYzI3YWI2ZjYwZDVkOGQyNjYzNGVmMzllMmM2MGZjYmIwNGE5YmRkYThiY2ZiOWIyZDNhZWVjMTJhMjEyNzllZDU1MzM0MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZjc5MTU2YTIzMjFiYTkzMGUxNTEwOTUwMWVhZDgwYTNiMjZjMTc0N2I3YTlhZWI5MjJkMWE5ZDQ3NGRmNjRhMWZjMzQ4M2YxMGU4OGE3ZmNkZGU5MWRjMDY5NDBjNThiZjRkNzQ3YjVhOWNkOGNhZDJjMmU5ODcwIjoiIjoiIjoiIjoiIjoiMWIzYWVhZmY5NzNiMmUyMGNlZTk0N2ZmMjgzMjc3OTkxODQyYTIyZjQ1Y2NlOWQyMmMxNzA1ZGFhNTFhNTZhYjQzYWFhZTFiNTFiYWQ3YTczNjNlZGM3YjU0OGEwY2VjNmIzNzZiOTI1YTZlMzViYzdkYzNiNGEzM2E3ZjNiNTdkNjZiMWIzNTI1NjkwOGJkMmQ4ZjA0OTVjYWYyNTM5YmE0NDc1ZDc2NmMyMWMyYzJlNGFjZmY4N2ZlZmIwN2M2NjJlYjM0NGQ5Yzk5ZWQ0MDcxNjVmOGEwOWEyMjgxNmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjJkZmViNzBmYzQzMzQyNmUyMzM3OGQwNDhiODM2Zjg5OWNiZmY1MmQ0YTkyYzZkN2QyMThlM2FhNTRjMDY3OTMzMzlhNzUyZjg2ZjAzYjdmY2Y4OWJlZjcyNTMzOWYxNmFiMWNkMjhlYzg1YzIwNTk0YmJkZjNiZSI6IiI6IiI6IiI6IiI6ImQ0MDNkZDhhNmYzYTkxNDkzMzI1M2RiOWNkMDQzNDIxZTU0MjQzYTM0MDQzZjVlZTExYTNiNmE2MjdlMjVkOTQ0NDM0ZWFjMjJhMDAxNzJjYWE2MDdlYmY3ZGU1NWI0YzQzMDVjMmI5MzQyOGQ1ZmI0Y2YwYTY0OTQ1MWVjN2ZjNWRhNjVjNDg5NGNmNGQyZjNkNTJlOTA5OTM1NDQyMzdlNWM1ODc0NTQ0MWM5Y2IyZTA0NzUxM2ZmODFkOWNmOTgwZDhiMTI3NjljMjFjYzhjMDZmNmQ1ODNiOGJlM2RkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIyYzZiYTk4N2JiNjFjNDEzMTEzOGJiOGFjZDg3Nzc2M2MyYzdlMWY4NjI4OWE4MWI2YjU0ZDFkOGIzOTliNWE1YWM3MTcxYzBjOWMwYjU5NDNiZDdmNTRiZjcyYjIwMzA3ODM0ZTk3MWJiNjM3YjM1MWE3NTY4MjMiOiIiOiIiOiIiOiIiOiI3ZmYwMWRlZjg0NjI2ODI1ZmMyMmE2MmNmZTI4ZjVmOTU0MDNiYjI2MThlZmYyMjUyOWI2NTMxYWFmMTAzMjEwMDk0NGQ1Zjk3MDM0OTZkMTY1YzU3NTZjMGFhYzU1YjE4MTJhNzI5NDBhYTUzMTdmYjZhMjk0NGQxMjRlN2Y2NTc2NmYyMzFiNmJkYTA2MTAwYzVhZDBkMWIzN2M0ODhlMGU5ZjExYTZkOGY3ZTRjZjczMzdlMDRkMDk0ZWE5ZGUyZGIxYmJlY2Y0MGUwY2M4ZDFmYzFjZjVhMDFjZDA4MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiYmEwOGFjYzNhMDBiOWI0MGQyYmFkOGNjYTQ5MDlkM2JiZWM1NDcxZjc4ZDBiZjg5YTgwNWQ4MzliOGIyOWZiNzUzYzllNWQzNjc0MzY1YTcwNTVhMTg3YTIzOGVhMWNkMDRmNDgyZDI0ZDg1NmI2N2ViNTRkNzFhIjoiIjoiIjoiIjoiIjoiOWVjNmFkODQwMjcwMDUxMzEzYzU4MjUyOTVhNmY3NTI3YThiMWI5YjNlN2M4NjdlNTY0MmE5ODRiMTE5MTFiZTYwNjE0ZTU3MzdkM2EwZDEwOWVlYTQyMjNmMGQyZWU2M2NiMTliZTcwMjI5MWE3NzFiMmUyYzI3N2YyZDQ1NTkxNzZmYzVhZGNjZWE1MjQ5MmUzZDNiYTdkMTdiYWQ1YjVmNDg3ZDc4MzYzOTQ2Nzk5N2Q3NjY4Y2UyMTczZWY3NzdmOWUzMWRiZWNiNmVlNzE2YjVjZWRjOGJjNTA5OGEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6Ijk1NDEzMzQ1MjI4ZWFkYjg1YjY3Njc0Yjk5ODFhZjM0YmQ2YTRhZTA0ODY2MjI5OTIxYmU5MjhjMDZlNmE2YTZmZGU4ZDMxYTZhODhmMjRkNmExMTE0Y2NiZTA4ZGVkOWQ3YzUwYzMzNjBiY2I4OTA4YTYxNTM4MSI6IiI6IiI6IiI6IiI6ImQ0ZGMwOGUzNmY5NGU4OGY4YmZiMTkxOWMxMzE4NjEzOTU5MWVkYzY4MWFmZmI2MWM0MjFkMzJkZmRhNjllNTA3ZDU5NDk1YmNhZGQzOWI3M2M0MDM2ZWY0NDBkYzU5OGUzMzk0NzNjYWJhNjBlMDc3MGFjNDcyOTI2NGIxZGJmZGFmMzJjYTZkMTM2ZWY2ODEwYTY2NjBmYTVjYmFjOTE5NDBhMjgwNTNjMGZhNDA1YzdiNmNhNWUzZjE0N2I1ZTAwOTZmMzZiNjdkYTlmY2U2NDI0N2NmZGFhZDcwZmMwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI5YjZiYjk1ODlmNDFlOGVkNjk2OWRiZjFhM2IzZDI0MmRkNWUxMzM3MTFmNzI1NDkzMzRjNzQxOTBlNGVmYjFkMDQ1MjAxNmVkNGZmZmNhOTU2MWFhZjIxOWU2NzkzYmZiNmZkM2RkOTUwMGJkNjFlNmE2MmRiNjYiOiIiOiIiOiIiOiIiOiJjZWUwMmU0ZmUwOTgwYWZlNmNjYmIxYjBkODAwNDFiYTk4NDE0NjEzOTc0OTRmMGZhZTUxODgyMjhmYmU5ODIyZTNmZmM1Mzk3YjdjYWEyOTk1MGQ5NTUzNmU3MDAwZTEyNDllNWJiOTNhNTkzZTY1OWE0OTY4OWFkZDE2ZDJmNWUwMmZmMjUxYzc2NzE2ZGM0MjYwMTBjMjk2MWExNzZiZDYzYzI5Mzk3ZjZlMzZjZDRkZTJmMmIxMWUxMjYwYjlmOWEwMGJkNDliNGI2NjE3ZmIwNTZiODJjOTJjNDcxZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImYyNzZiYTBkYTA4Mjc0YTA4MmYzYjhhZDk4OWE3MTM5MDg4NzNiNzQyZjk2YmJiZjhjODFiNGUxYTdlNDg1N2JjOTlhZWNlYWJlNTM0YzQ1MTA1MzA2YjE0ODYwODgzY2Q1NmYyNDM4YTc4MTJiNDNmMGQ5MTFmNyI6IiI6IiI6IiI6IiI6IjI0ZGQzZWVhOWE4ZTFmOTkyOWViYmJjMmE2ODM3OWNhZWM3N2ZiNDI1MzFhOTdmN2YzYTc1ZDE2YWQwNTM3OTlmZmMyNWNhY2U0ZjQ1NTNjMjcxYWUzNjBlY2ExZjUxMzFlZjg3YmYwMzkwYjI2Nzg1ODgwZGIwZDkyYmIzNTFlNmUyMjQwOWQ2MDBmNmRhYjVjYmIyMjc4Yjg3ODRlNjdhNDBiZTRkOGVhNmQ5OTQxMTVjNjdiNzIyNGQ3MjFkMWIzYzdmYzViMjRlMTVmOTdlYjNiYmUzMzc5OGQxYmI4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZmE1ZWQ5MTg5ZjIxZDdlOTQ3NjRiZGRlZmYyMzA1MDExMjg2OGNmZTM1MjIwYjg2M2U4MTEyZjY5MWM1N2U2ZDZjNGE5MWM3NTJjNWYwYjM3Yjk3ZDVmM2UzODM0ODAwNTQ4NzdmMzE5YTU2OGIwNjRlNjU2MmE0IjoiIjoiIjoiIjoiIjoiNTVlYjVlZjEyNDhiNWEzNGM3NDFmMjA3NmVhNWQ1NjhkYTYzMGNlNDcyMGI3ZTJjODZhOWRkNTM1YjQ4ZmFlY2UyMjI5ODY2YTM2MDI0ZmQ0MTE0MjQ5YmU0NzMwZTU1NGI3NzJkNTU3Y2UzZjhiOWQ0ZDg2ZDkxMjAyNTgyMjEzYTY3NmEwNzZiODdmOTQxMzUxYzc2MDZhNDUyODE2ZGI1ZDBmODE5NDgyNWQ0MDJkMmZlN2ViYjI4MTU1MzIwOTFiMzgzMGE5NjE2OTE4YmIwZTMyOThmYWYwMzdiZjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJkMGM1MDAzYTYxNjgxNjNmNzA3YjI1MTkxYjUxMjExZGMxYWUzNjFkZjFlMDY5ZDBmMjg0ZjY2OTY3YWNhNDE5OTgwOWRjODkzNjgxNjQyMTNhZTE3Mjg1Njc0ZTU1NzQ4NTE1ODIzNzJmY2FlOGNkMjczM2JmNGEiOiIiOiIiOiIiOiIiOiIyNDkxMGUxYTkzMDQ0NzFkMDUzYWY0NThiYzNmZGVmNTI3ZTg3OTZlMzMxMzNmNWFmMDA1MTA2YjIwM2U4ZmRlZmIyNzRmMWMwZThmZjQ0ZTkyYzYzYmVmMzA4MmM2ZTU2MDdhNzk4MWE2MDc2ZjFhMWQxNTM2OGY0MzMwYzcwMTI1MDlkNWY2MWI0MzQ5MjI0YTg3OTYwYmNlOTg3MzcyNTE0NWYxODdhYTkzMTM5NGM0NDlmNTAyZDEyYjYwNjU1YTBhYjJhMjIxMTM0YTUxNzg2YzM2ODNmOWZmYTJiMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImJmNWI1ZDFjODkxZjdhNmYyZGQzZjRkNDg2ZDY5M2ZiZjY3ZjQ5NTg0YjdmMDUzYWE5NmRkYWNkOWZjMGNkZWEwZmFiODIwOWQ4ZjQzMzU4MjBjZTY4YmZhMDQ4OTliNjNjZGExNTI0MmU5Y2QzZjdhY2IxZjEwMyI6IiI6IiI6IiI6IiI6IjcxMGM4YjMzYWIwMzRiNTBhMjlkZTY1N2I5M2YzYzcxZGY0NzI3YTUyMTlhNDc0MzUwYzg4YjRlMzk3NGZmZDBkMzQ1MmU4YzRkMjZmNTc5ZTM0OGYzOWNmZTBkMjAwNDVhNzBhODY2YzVlMTZhMGMyMmFhMGQ2OWI3MzlmNzRjYmU4YjA0NmJjMTRjZjgyYjg2NDk4NDYwYmZiMjZhZjA3NzEzNzFjMjc1MGY3YzU5MzIwYzZmNmZlMWQwNGNmYjQwYzA0ODY4NmI2YzFiNjlkYzY0MWI4OTU3YzJjMzQxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNTI1NjE1MTY0ZGNlMGRhYzUzOTdiMzU3NTQ2YWFkMDQ5ZGJlNTk4MmRhMmMyMTVhMjMzNTU3NTUzNDYwZjg1MDVhM2U3YzgyMjRhZjU2MTE5MDA5OWVlMjFhMDZkNjJmOWYwMGUyODJiMzJiNDg2ZThkMGUzMzhmIjoiIjoiIjoiIjoiIjoiM2ZlOTZjOWIxMGM0YzhlNDNjZjNjZDc2Y2VkNGFkODVhZTU3NmYzMmVhNjY3MWVmMjg0ZjdjOTc0OTFiNzIxNTJhMThhMTA2MDE0NWU0ZjVlN2MwYzM3M2MzOTZjYjRjOGMwYjZkNjI1YzFmMGQyYWU5NWIwNjkxY2IxYzgwYTNkZDVlYWEyMTYzMmE4MmFhYTI4ZTA5YTJiYmRlZmY3ZmQ4ODEyZmFlNDZkZWFlMTRiYmIxNmRhMjRkMDY4NzhmYzQxN2IzNTU0ZmI0N2IwZWY5ZmUxOGQxYjlkNGY0Y2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiY2E4MTk1M2Q1MDQzMGJmYjA5NTM3YTMxOGExYTdiOTBhOTIwMDA3N2FiYjcyMWU1NWQ5YWMyODk0NmZiZjc1ZDljZWJjODFmMTFjZjZkNGRiNzEyYTNiOTFkNDc5ZTAwYmEzMGQ3MzZhNzYzY2JmZTQwYjkxNDQ4IjoiIjoiZTUwYWE4YmVjOTYzMzljZjI2MDhiYjgyY2YwMzhkNWZkNmJmOTNlNjUyNzFjYjcyIjoiNWM1ZWVkMGQ5OGM3ZmM3ZWIzMGFjZGRmZWUwMDJkNWI5OWM5NjU5NDlkNGUyMDk1IjoiYTFhN2NiYzc5YmZhZjQ1NzFjZDgwMjBkYTA5NDExOGQyNDFiM2YwMThlYzgyM2JhIjoiYzhiN2Q5YzE1NjI0YWUwMThhODYxMmVkZjY0NDQzNTRjNDVjNmE3ODgyNzIyODFjMTY1MjZjNjg5YTNkYWMzNjY3OWU0NGQ4OWM0YWNkN2ViNThmZjQwYTU3N2MzZDFhOWY0ZDAxNzVmZWVmOWFjNTY3NGMxMTVkNWU0Y2QxN2YyMzY5ZTAxMzVlMzNiMDE4YmRjOTllNDA5OTcxM2FjZTk4NmExNDVlZjU1ZTg2OGY3NDg0NmZlYjM1OTJkNDRjYTNlYmJhNjA0NGE5MjhlOTI4NGI1ZWE3NTA2M2FlODEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiYjk2Y2ExMjAyZmE5NTllZjU1YTY4M2E5MDIxMDY4ZTE0Yzc1Mzc2ZTE1ZDFmMDM5NGIxYzA5MWE4YjZkZDZiOThiNmY2Mzc0N2RhZTU4YzI5MTg2MTc5YjQxNTViODY4ZjVhODFjYTIwNmE1MDg2YTU3NTliMDI1IjoiIjoiYTM1MDk2MDg2YzFmZGViMWZiNjBkZDg0ZmE3MzBlY2NlZGQ1M2U1YjEyN2VlY2Y5IjoiYTMyNjlmYTc0OWU1NTg1MGQ0YWE5ZTQ2NmJjZWQwYmVhYjJlZGY4NmI5MjZjMmFlIjoiMjlmNjc5OWY3Yzc4ZmRmYTJkMGRiZGRlODM4MWFlYzVhZjI0OTU1NjkwM2Y2MzEzIjoiYzYzZWE3M2UxZGRjOWQ1NWJkNjRhNjNjZjczZjczMDEzNmFiNGY2ZDY4OGE5Y2Q1NmI5NDVmOTg3NWVmNGZmNDhjZGJkZDhiNzhiODk4NDg2YTY4NWQ4YWY4Y2NjYmMyYTgzNGE5ODA0ZTU2NmVlNzEzOGM3ZGJmNDg4ZDI2M2ZiZDM4NzA0MWY4MzVlYTQ2YWQyN2NiZDY2NzIxNDI4ZWQ1Nzk1ZjZlZDA0NGNkYjE3YzhlN2UzZWNiZjYxZGQ2ODIzOWU4ZmQ2NDRhZTg1Nzc2MDUwYWZiYWEwNmNhZjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNTlhZjEyMTNjZmNhZWVhMjllMzE0MDBhYjZiMzBmMTA4ZDRhOWE3N2QzYjM3MDk3MmQyOTAzMmNkYzYxMmI3YzM2MGM0MWYxNmIwYzlkNzk0MjE5MzAwZmUwNTUxZTBlNjZkNjM0YTRlZWMzOTZjNTBlYzk2MDRjIjoiIjoiNjZlZDkzNTJiZWQ3MzIyNGQzNTUwODc1NGFhYjY4ZmNlYTEwYWFjMDZkNjBlODg4IjoiMTk4YTM1MjZhNjdhMGNlMzFhZDAzNDhiYmRmZWNlZGU0ZjgyZDQyMDNkMWQ1Y2ExIjoiMDNmYWEyZjRjMzQ1NzdjZDhiMmVkNTNlMTBjNjhjODNjMWViYzhkODc3Mzc5MTc4IjoiNWUyNGYxYTkwODNmMTMyNzRlZDEwMjBhYjY5MzUyMjJjY2E2NDRkMDkyMDgzOWMyYjE0MmUyNzgwOTgzMjA0NDUzZDJlNmM1ODUxOGNiMzUxMTg4YmMzZTVlM2I2NDAxNTg4MjEzMGQ3NDU1MTFmMDA0Y2ZiNmI2NDgzMTEzOWUwMWFlNWJiYTY0Yjc0ZjFhMWVkZTdlMjIwYTZkMjliMTA2N2Q3YzY4YmEzNTQzZjRkZGEyZmM5N2EzZGQyMzU5MGMyYzE4Yjg1NjYyNjE4NDYyYmEyYzA1MjMxNTM0YjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZTZjYzk0YzcyZjM3OTk5ZjI4YjVmZTM1MGJmZjYyMmI0MzNhZTE5MTExNzg2Yzc0N2Q5NTRhZGFlY2JhNDdhYmFjZmVhOGNkZjVlYWIwNWUyZjc1MGMwYTY3OWNmYjljMmMyYzA3MTQ2MTE3OGEwNTRhZjQwOTY3IjoiIjoiMzAzMjUyODcwM2RkNjZlNDJjN2I2YjU4ODE0ODNlY2E0MWU5ZWVhNTAzODUyZWRhIjoiY2U4YzAzYjBhMDU5ODJjZWFkYjUxNmIxZmU1MTNkYTI0MDNhOWU2ZGNkN2EzOWYwIjoiM2Y3Y2NiNTUzNzZmMjNkZmFjMWRjMTNiZTYxNzg5NDkzMWY5YzEzZDE1ZmQzZGNiIjoiNTU4NjU2Y2FkN2RhMmFkODdhN2EyOWVjNWU2MTJhZGRjY2E5NmQ3MmFjN2IyMjRjZGU4MGNlMzg2YzZlZmRhMTIxMTNmZTlhYThlNTExNzE0YTQyZWRhYjUzZWEwMjg5Yzc1ZDM0YjQyZjIzMTNhYzM2NmY1MWY1ZGQzZjY5NjhiYmQ0YzA5ZWJmODQwZGZkMDM4NTJkZWRjMWUzYjYyMDlkOTMyODg5Y2IwNDA2MmM2NDQ0ODIxMDZjZjhiN2EyMzdkMjkzNzg0MGYwYzRkNzUyZDUyNzI1YjU1OTBkMTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiY2Q0ZGNjOGZiNTA2NzI2MTFmMTllMGNjOGFkY2Y5Mjg1ZjlkNzZlN2UyOGJjYWMzNGU5MzExNjNmODA1N2I5Zjg2NDI0ZTVkNTE0YTEzYzBhMjViYmI0OWVlNDg1NTAxZWM1ZTIxMDYxZTAwNmFkMTU2OWQyNjEwIjoiIjoiMjQ0ODAwOTRhNDQwNjdiODZlZjQ3ZGIzOGVjM2U2MjkxNDM1MTE5NjM1OGJkOWQ3IjoiYzZhYzNiODc5YWRiNmMxNTBhOGVlNDQ0MjhjMzMzNTc0ZWQ5YjBkNjgwNjg0OGQ4IjoiOTJiZGMxNTE0ZDg3ZGFhYTMyMTY1NWQ1NmM2MzAyODc4YzJiZGUzNzcwMDE2M2U4IjoiMjFjNTFhMTU2OGFhZmI1NmFmMWZkNDI0ZjZmYTE0NjExM2QxNGQ2ZDYzZTFhMjRlMzE2ODEzMGViYzEwZGQ4NDkyNWJjNDA3N2M0MTg5N2FhOGIzYzczYWViNWJjZjM5MmQ0OTZkZWRjYjY0ODczNzliZmIzZTEyYmMwN2ZjZjVjMTk2ZDU5ZmNjMWZhNzMwZTU1YzAwZWRhYTJiY2E3YjFlMzJhNDBiYTA2NTAwZWQzZGQ3ZmNhYjM2MTk5NTMxOTk3OWEwZmE5Y2RjNDA2YTRkMjA2NTA4MTRlOGJmYWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZmRjYTAwMzllODQ4NWEwNmU2YTlhZmJkZTViMDdhMWJiZTQ5ZTEzNjU5YTIxNjQwMzQyODk2MzlkMjNkY2YzZjk4NzRiOGZiMWExYWY4NDk1YjZiMjEyOWI4ODQ3NWNjNTI5Yzk2MjcxYmMxYmJiNWM3YzJlYTAzIjoiIjoiODQxZjc2NWVkNWYwMGJlODM4YTI3MDczMGNlNTkyNjY1OWNkN2NkOWQ1YjkzY2E1IjoiODI1ZmExM2VkNTU0OTczNzY4YWFiNTU5MTdjYzg4MDE4M2MzZWJiMzNhNTMyMzA1IjoiNzM2ZTlkZTkzMTE5OGRkMWM1ZjE4YTdkYTM4ODdmNjg1ZmJmYTIyYjFkNmFiNjM4IjoiZGQ4NTk2YTYyODQ3YTc3ZGE4MTgxOGRiYmVhZjAzOTNiZDVlMTM1MDY5YmExNjlmODk4N2YwMWRjNzU2Njg5MzQyY2JhNjFkODdhNzlkNGJjZTIzMTE3OTAwNjlkMTA3MDljM2E1M2RmOTc0YzdkNjc5M2FlMTI5ODI1M2YxM2VjZGJiNTY4MDkyODU3OWI3M2Q3M2FmZGNkMjRhNzAzZGM5YjM5MWYzMDNkODgzNWJhMTEyOWMzZDQ2MjM3ZWRlNWU0NDczMmE3NGY4ZjIzYjYwYTNhNDVjZTQyZjA0MmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZTI0NmUzZjk1ZDg5YzE2Njc2OGFhYzY5ZmM5NWZiNDllZWM0OWFhNjMzYWRiOTM4Y2UxNzA1YjY4OTg3YWViMGZhZTdmNTdiN2U5OWU0ZjNlM2UxYjFkYjJkMWZlZGY0NDNiZDI2MThlOTUxOTNjZWZkOTA1ZTFkIjoiIjoiMTMwNzAxZjg4Y2MxZTc1NDU5ODBlNmM2ZjZjYzc2YjAzMzZmMDg5YmI2NmNjMzQ3IjoiOTU1MzNmNGNjMjQ3Yzg4N2Q2YTdjYzBjYTc1MzAwOWJmMDM0YmE5NWI3YjFkM2IyIjoiNDY0ZmQxNmYwMTFlYjI5ODZkOTk4Mjg3OWQ3OTM0OWEzY2U0ZjU5MDViYmZlODMyIjoiMGQ0ZTZiMDNhZjdhNjQ4MzM3YWJlYzJlZmE1ODU5MDhhZjQwZTg4ZDFmMTA0YjNlOGMzNTJhYTI5YWM3OWZlOGU0NDhmMzZiMGRmZDcwMWExZmMwZjFkODZkY2FiN2U4YThlY2FkYTZiYTIxOGQ5YWFlYTFjNDBhYTQ0MmNhNTFmMzExNmNlZDNjOWI4YmE3NTQ2Njg4ZWQ0ZjNhMTM3OGY3NmI4YTI5ZWM3NjM3ODRmYzgyOTA2ZGMwZjY4OGM1ZTYwZDU5ZTZkNTI4NGZjZDk2ZjM2MWJjNWIyODU0NjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiY2IwNDA1ZTU4MjcwY2VjYjM0YTk5NTFhZGViNjk0YzU1MTNjNDk5Y2YzMTBmNmE5OTk4NWQ0ZmIzOTczNDYzZTkwNzcwNTc0MGUwMWFlZDRjYTIyMWQ0YjAzZWYzMGU2OWZkOGRiZmI0ZWE5MTlhOTEzODAwYTFhIjoiIjoiMGI1N2U2ODg0NzJlOWEwNWJhYTM5MjA0MTdhMmU4ZjlhOWMxMjU1NWZkMGFiYzAwIjoiY2FjMDVmNzlkOTgzN2M5N2JiMzlmNzUxNzkyNjI0OTgzYzM5N2ZkMjg4ZGQxZDk1IjoiMzQ0ZDJhYTJiM2JhZDE0ODU0MjliNjY2MDZiZjIxNWFjYjBhNjViZjJhMzE4ZjZkIjoiYjJhMTNkNzVhZDM4OTUxNDE0OTc2MzE5OWQ3MTEwOTJhOWIwZTRmMWU1MDgwOTM1NWNmZWZjMTg4NGE5NGY0ZDRhNTBhYzVjNWRhMGI0ZTliZDc1MzdlNDEzYmI0NTFmZGQyZmE3N2YxZjg5NDQ0NGNiNWM4MWU0YzQzOTc4ZWJmZDk2OTAwYTJjODk4NmM4ODVkMGZhZjg5YTJhZDVjNmVmOTIyZGZiYTFiNTIxOWIwZjNjNGFjMjA5NTM0MGMzYjhiZjBkYjAzNzE3MWI2NTQ1NzQxYzc2MjE3YjJhYTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZTM4ZWE3NTg0ZmVhMzFlNDhhYjA4NWM0NGY0NmI0Y2Y2OGZmMjRiNGE2YjBiMjU4Njc0NjNlNGE0NmRkYzlhNGRlMjNmNzI3MmFmMWU5YzRlMDM5MWFhOTQ5MWNlN2NkYjVmOTYyOTJlMGQ2NWNiOWE5YTRhM2NjIjoiIjoiYWZlMjY3ZTE0OTFkZTM5MzQwNTRiODQxOWI4OGIxNjczMTIxN2ViNGVlNzRjODU0IjoiYmQwZjNjNDMyMjlhMGZmYzllMTQzZTE2NzM4MTExZTE2ZDZhMDZlYmYzZWFhNWIwIjoiMjNiZDE0ZWY4Y2Y3OTdjZmY3ZmY3ODdkZjhlZDhiODc2ODRmZTdhOWEzM2JmNjk1IjoiYzI3YTZlZTViYWI4ZjhlOTM3ODM4NDBlNzI4OTRmM2IwMjRjN2QzMjA2YTRhMTg2OWNlNmZhOGI1Njc0YmNiZDI0ZDRhYWIzMGY5ODY2ZDc5N2Q4NTA0MjNjNTc2ODRiNzY5NzkxM2I5ZWY3YmMwYmU5MzNkMGUyMTUzNWJkNTBmZWEwZmVlYjI5Mzk4NTI2MWZiOWQ0ZWIxZWY5N2FiNWVjNmI2OTFhMDhkYjRjODE3MWU2Mzc0NWQxNGZiNGMzYTAzYzQxZjkwNmRhYWEyODc3Yjc2MjJiMjU0ZjA0NDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNzFkYzYyNTI0MmRjYjk0ZTZiYTJiZDAxM2JlYjIxMTJjZmNhNTc2Nzc0ZTEwMjgzMDUwM2I3YWVkYTI0YzJjOWQ4NjJmNTIxMjk3NWNjYzAxOWFkMmVhMDQ0MjU5NWY3NGQxZDM3ZGJjYmEwNzE5ZDhlYTMyYmExIjoiIjoiMGZlZjlmMDkzNGJiNDQ4NWJmYWIyNDMxZjg4MTFkOTYzZWM3ZmE3OTUzZmZjMjEzIjoiYTZhNzUwMWM0YTVhOTNjMzk2ZWY4Y2M5NjllYmQ5M2NhYzFjMzBiNDc4M2EwNjE3IjoiYzU4ZWEyMzNmMzVhMjJmZDliMDE1OTJjNjAyNmFhMTc5MjIwNzBiMzYwNGM3MTE4IjoiYTE0NTJkODU3OTliNTQzNzBjZmY2NWZkNmRkNzRiNTc1MTk5NjA2Y2M4ZmE2NDg4MGIyNjk3MmM5MTNjMzcyMDEwYjRjM2Y0Y2U5YjdiNTY1YThmNTMwNTA3MjQwNGM3YjlkNzBmN2FlZjZlMjcwOWMxNjk0ZWVmYWU2NmZmYTgwZjE2ZWI0YjkxZjgwNDFmNDQ4NzQyN2U2OWRhYTQzN2UxODNlODNkM2I5NzE4YmE2YTIzZmI5MDM2NTg4NDg5OWUwZDJmMGJlZjU2YjI3MjQ5ZjY1ZTFjMDBjNTQxMWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjM2YzFlMDQ4ZDE2ZjlkNjAzNWM2YjYyNTE1YWZiOTI5NjMzZjM1NmZlZDZhNjU0MjgyNjYzZTIyODRmZDQxMzIxMTZkMjFlZWY2NmQyOTYyOWJjNzEyOTY1ZDk2MGYxOGNmM2Y3ZGNiZjhhM2NjZDYxYjViNWZiNSI6IiI6IjkzYmIzNzJiN2FlMTAzNWRlNmYxM2IyYTM2YzNhZTU2ODJiOWEzZWE4ZjQ0NDM4MyI6Ijk3MTViNzJlNDc1NTk5Mzc2MmUxMWE5Mzg1N2YxZDUwYTA1MWU3MGQwOTQzMzlhNSI6IjJmMWU3Mzk0NTg2M2IyMzdmNDlkNmQyMGQwOTk5YTAyMDNmMjk1YjlhMDQ2ZGNhMiI6ImNhMTM1ODkxYjQ3ZjI3YzI2YWM4OTFkZjQ5YzgwZDA4NWY5MGMxM2QyMzZhNjBmMTM3MmVlZmQ4MWVhZmM1ODE5ZjRhZTVhZWU1YjMyZDQ2NjgxYmUwMTYyOWIwNzhhZTk2NWY2N2I4MWE1MjY4ZWYwYjMwM2QwOWUwNDhmNDQ0OWY1YWFhMTFhZjUxZjgwMTUxYjQ2OTdiMTM3MDA5MzAxNjdjZGNiM2I2ZTgyNjBlZWI4YmVjN2Y2YTY3YTIwNTBhNmVhNTY5YzgyNWQ2MWQ0ODU4YTFjZDE1ZjcwZmIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI1ODI0MjVlMTMzNTZlN2E4NDBjYWU5ZmE0MzViMjIwYWY2YTk2ZmI1M2FjOTFlN2VlMjIwMjNjZjZhMGVlZjM5MjM5MDc4ODNhZTU0MGJlODE2ZTA2MzFjODk0NTIwYjg2ZThjNmFkYjgxNTJlNTVjYjZhZWQ1YWQiOiIiOiIyMjc3NjJlMTM3ZjllZWM2ZDJiM2M2MzQ3NmI0MDRkYzViMGM2ODYxM2E5MzAzNGEiOiJmYmE3MmMwMWE5ZTUxYzkzYWMwMGMxMjMyYzcxN2QzMmZkNGQ0Yzc5MTU1NmU3MTYiOiJmNTI1OGJmMzE4NDU3NzY5YTkzZWY1YjNiYTk1ZmEyNzUzYWQxYzVjMWI4MWE3ODUiOiJjNzUzYTg0YmE3ZjQxYWYyYWI3NTdhYzFlNGM5YzQ1MGQyMTEyNzY3ZmY1NWE5YWY4ZjU4ZWRjMDVjMmFkY2FlZjdiNWJmNjk2ZTVjNjRmNzFkNTY4NTU5M2YyNTRhODc2MjUwNjVlZTBkZjUxYWI0ZjdiYmEzOGZhZjU3OTljNTY3ZDc4M2ZhMDQ3OTU3ZjNmOTY1NTcxYTdiNGNiNDc3NTY2ZDFjNDM0ZDZiMmUyMmFlMTZmZGY0NzNhNmMwMzA1N2Q5MzRhN2UyNWYwZWEzNTM3YmU5NzIzOGQ3NGJjNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAwLCAxOTIpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiODM2ZjVkNzUyMWYyNmQ4ODRkYzM0YWYyY2E1NmFiNGE3NTJlYTE4YjkwOTA4NWE4N2NiNmQwN2RiYTMyYjY1NDM5MGEyNWI2OGVhN2JhOGZiNzkwMjcxYzcxMmYzODcxNDUwNTJjYTQ2Y2I0MDUzNDM1NWMxNjY2IjoiIjoiOTlkOWFlYzMzNDY2NmQ3YzM5OWU0NTM0NTVlZjZhZTg4NGMyMTczZTEyZTMxY2YyIjoiZDc0ZDIwZGMyMmM1NWMzNWYwYjY2YTQ2NGRmYmU4ZjM0OTYxNjkxNmZjNzI2Mjk4IjoiNDA3YjA5NTE0MDQwNzlmYjNiNTQ1NTljMDI4NjE0M2Q5Y2IxODk1N2JlZDdmYjFkIjoiODA5ZjM3MmQxYWY2MGZmOTcyMDQ5MTkzZmU5ZjE3MzY4NGEyZmM5ODI4YjYwYjMyMTY0YzFiNjczOGUxYmE2YWExMmNmNzM5Mjg3YTc0YzZhZDUyOGEzZWMwMDA5NWI1OTBiNDQ3MDViNDk3NTIzNmEwYjdlYTAyYzEyMTNmMGU4MzBmMjc1ZjUzYmI3OWVmZDk4Njc5YzQ3NjZjYWQyNzczOGU2ZmI3NzdlOThjZGQ2MDZiOTcxZmE2MDc0NTI4OWQ1ZWY3MmE5OWUxOTE5Njg2YTUzYTI0MWZlMzZjZjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImU1NTVlZDZjN2FiMzQ0ZmVhNjhkNzNjNjQzMmU0ZTZkYTJlNjdkOGIzM2FiNzllNTcxOWEyZGVmMjU4YTg1MmQxN2Q5MzIxMjg0MDU4M2ZlMjM5MDA5NDljMzAxYTI5ZmM5MjA5NWY0NzE2MDE4MTQ0ZTY0NTgzYiI6IiI6IjUyNjJjY2NkMTM4MjU2ZmE4NDI0ODAxNDM1ZDExOGYzOWI5YWExZGI0ZDExY2E5ZiI6IjliNTVkNzZiNzQzYmQ3ZmM1NzAwZmRlOGZmY2E5NTZjMGVkNjA5MWRmMWEyMmFlZCI6ImY4Yzk5YWY4MDI5MTEwYzQxYTZhMDFmZDJkM2QxMmI3MTAzYWEzOWNiZWVhOTBjOCI6ImQxZWMwNmUzOGFmN2M2ZTBhNzBiNzNhYzYyYmMzNTU2MTgzZjk5YTQ3YmZlYTBmMGM0YTU5ZTdiYTRiMDcxOGRmNTQzOGUzNjliYTE0YmU4NGRiNDBkNWZmZThhMWE1OTUyZWRmYjgzZjYxZWU0ZDk4NGUzZDJmYTY3ZjU1N2FhY2M1ODI5MWNjNjg4ZmEyOWJlNTMwZTY2YzIyOGU2ODYwN2UyNWMwMTM0NzNiNGZmYmNmZWRhNzIxZWUzNWY1ZGZjODgwOTUyOGVhZGRhZDg5NjljZTcxOWE0MTEyMTZmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDAsIDE5MikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIxMmYyY2FiZDNiNmY2NDBkYWFmMjdlZDZjZjZiZDdkMDZlMmFjMzcyNzMzYzY5NzE3MzllMzZhZmUyYmExZWJmNGU3ZTVlOWY1NTkxNDgwZTNmYWU3NTJmYTU5YmI5OWExOTQ5YmRlY2NmMGMxMDBmNmFmZTg4NmQiOiIiOiI3NzY2YzM2ZTY1ODNjYzhlM2MyNmE4MDU4ZmEwOTIzYmZlYjNlZTIyMDMzZjQ2YzAiOiI2M2U2MGQxYmJhOWFhMjlhZGMzZjNiOGE1ZGI1M2YzYjcwM2M3YWU2OWJjYmMyZjciOiJmNDE2ZjM2NzE3YmE1ZjBhNzgxMjVjYTUyY2NkMDA0YjJmNGYyZGNkZDQwMWY1OTUiOiI2MTk2YjJiNGFkZmYxNGEyNmQ2NGY0NDBiNmMxNjAyMTAyNjZkN2Y1Yjc3ZDVlMjkyZTk0YjhjNjdiZDljYzc3NDI3NDc0MWU3YzBjOWE3YWIyMWMzMWYxMTk0ZWY0MjE4ZGRjYmJlOTQwNTkwNDJkMjJlZjQ0ZWNmZWNlZjIxNGE3M2RiNjQ1MDVkNDZkNTQ5M2Q3NDc1ZDA2ODRmYzBlNDMxYzUyNjVjMTJiMzUzMTBkNDQwNGIzYzRkYjYwMjlmYWNiYWVjODhiMGMwYWU5Nzk5ZTVhZjBhYTQ5ZTg0MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIyYzUwZGE5MGExZjc5ODdkNTIxNjk1MGVhMjI2ODk1ODRiMjM3NjQ3ZDk2YzEyMzlmOTI1MTk0MmY0ZDEzZDE2ZjQxOGIwY2Y3MjY1YjkxYzRhZDk3YTdhY2JiZGEwNjVhNDhiYzFiYzVjN2E5ZWUxNTIzYzUwZTMiOiJhNzRjMTA4ZmU4NzBiOTFhMmRlZmE5NzFmYTFlZmNiN2EyMDlmMjkzZDI5YmI1ZWEiOiIiOiIiOiIiOiI4ODUzZWI0N2M0YWRhOTRhM2Q1OGExYjUxNzc4NGJjY2M4ZjgzMWQwMmRkNTIzOWM3NDBmZDdjYWEzODY5YzVmZjdiYmY1MjJhNzhiZTJkNTEwYzQ5YzQ5NmE2NjU3YTA5ZjBlZGUwMGRhZWU5ZmQ3NzA2MWIwZjA0ZTczNDI1MThkYzZlYzFmNGE3ZmY5OWRkN2M3ODM4ODJiNThmNWU4YmM0Njc1MTZjNmI4NTk4NWZhYjY1YzY3NjFkNGZlNzU2ZmZjMjdmZDYyY2ZiOTI3NzgzOTFhMjU4ZDNiMGIwZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI0NjA2ZTNlMTlhOGE1M2U4YWJhMDVkOWQxZmRhMWRkZjE1ZTc3MDlhYTJiYWU4YjU0ZWZjNGExNGU3MzRiNDVhNWNiYmFkMDBhNzQ5ZDJiZGU1NDAyNThkZTc0ZmY4ZmU4ODZkMDU1NzAzMDBhZjIwODZkMGI5YTIiOiIyM2VmNWZiZGU0YjI3MGMwODRhNzQ1ZTBlMjk5YTVlYmEyMjhhMzcwNzRmZDRmMDciOiIiOiIiOiIiOiI4Y2FmODZkZjI1ZGU1Y2JjMzc0OWZlZTRiNjRmZTA0MWNmNGVmMjg1OWUyMDcwNGJiMDFhYmUxMjZhOTBlYWQ4Y2ZmYzQyN2MyZjk4YWFjNDAwYWFiOTcxODQ4NDYxMjVhMmE2Njg4OGRlYTljOGFhMTA4ZTk2ZTAzYjA1YmJkMzBlNTY2ZmI5MGM2NjFkYzE5OTBlYmZlNzVmNzNmNWIwZGU3YmU0MTljMjI1YmZjYmEzNzEzODA1NDU1ZGZmYmU1ZDZmY2M5ODE0MTc0M2I1OWMyY2JkNzBlNzhmNTk3NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIwOGUyZTIxNzVmYjM0ZTQxMTExNzlmYzI1ODBjMDVhZmExNmQyMjQ0NDBjYzdlZmYyNDA4MmJlYjE2MTMzYTk5MmZjNGY0ZTI3NjI2MzRmYmY2ODE3N2RjM2YxMWM0ZDA1N2I3MTY2MWFkZTU2ZTc3NjhhYjllNmIiOiIwYTRhZjMzZTI1MDFiYTQwOWIxMzI0NTliYTk3NjAzODg4ZTcyN2FjYTBhMGNlZTAiOiIiOiIiOiIiOiIzOWM2MGI2ZDlmODVjYjY5YjIxMjhiZGU4NmFjYTJiMDU1ZTIxZmZkNzcxNmQ3ODlmODM0ZWNhY2M2OWEwNDM4OTNiMDk0NTk5OTE3OTM1NzFkM2Q4MDcwZjAzMzgyYTExYmQxYzFiZjM4ZTg2ZmFlMTNhOTMyYzZkYzgyYzU0MGZhYjhjOGVmZjQ3OGU1OThkMzI5NTY2M2FiNzVlZThhNTYzNzZjMGQ2MDdmZTQzYjc0YWMzOTQ3OWI4ZjY5NGEzYTEzODI2YjFiOTYzNDRlYzY3YjllYjBhNTg1OGVlYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJiNDM2ZWJlZGExMTE5ZGUzZmIyYjJlNTMyZjdlYmY1OWZhYzYzMmE0ZDc4NGQ5MDRmODQ0YmI3M2YyY2FkZTVhODhkNDc5MGM4YzFkNTk3M2ZjNzNmNmI3ZjkyOTMwM2I2MmQzMGI2ODE4YTI1ZGRmNzA1YmRiOWUiOiIwN2RlNTU4OTcyNmM0OWRjNWE3NjRkZTliNDFiY2U3NDY3NWU0Y2EzYzcxNzY5YTYiOiIiOiIiOiIiOiIyMDk5ZmM3NTRlY2QxOWExOWRlOGFmZDIxZDJhZTJjZTQ1NmMzMmQ2Y2U3NzcyYTk4ZTM3ZWQ0N2Y1NDAwMWY0NGZhZDhlOWI1OTFhNzBkM2JiMjhmMTliY2EyMjk0MDMyMWJhMTdjMzMxOTM2MTNiN2I1YmUxZWM1NGVmYTQ3MGI3MGNiZDZiZTI5MzExOTNjMzVjYzczZDgwYzEzOWJiNGU2NzBlMWEyY2I3NGQzYmVkZDM2MTBlOWQwZjlkMTU0MzcyYTcwYjYwOGZlZjgyNGMzNDZmYjE2MjQxYjMwMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI0ZDNlOTkzYzI5NmM2Njk4M2I5Yzc1MWQyYzBhYTJkNTE5ZjgwMWE3NjRhYzlmMWZkOGQ4NmI1N2ViMjI2YmRkOWY2OWVmZDlhZDI5YmYxNmFmNDgzZTdkYzE3MGY4YWY2NWMxNjQyNmMyYWI3YzBmYTlkZjAxNzUiOiI1MmFlNGNmZTk4NTM0ODQwOGQzNjc4ZDYwMjU5YTc4MzY5YWFjMDI5NTM5MTFlNzQiOiIiOiIiOiIiOiJiZWFkMmNmYzI5MzE1MTMzZTZmNWJhMmU4NWJkNzc3OGRjZjk5MDgwODEwMzJlZTYzNGY5MGIwMTI0ZWQ5MzcxYzkwMDk0MTliOWUyYTQwOWZlNGFiZDYyOTVjYWQ1N2NkZGNiNjA0Mjk4NmNjOThmMmZhZmRmZjk5ZjdjYzExODVmM2JhMGQ1ZjFlNWY1NDUyZWU1ZjlkZjAzYzBlOGE0Zjg0MjZjYTI0NmFmYWZlODEwNzljMmYwZDE2NWI4NzA1NmU3Yzg1MjhlOGNjY2FjNWY0OWQwYmI1Y2NmYmVmYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJjN2M0ZTE4YzU2ZTkxOTFiYTQzYzk2N2NlYmU0OGU1NWJmOWFmZjRkNjQ0OWMzZTZhMWY5ODQ2YmZkN2Y5MmQ1MzViYjczODZjMDE1NWNkYzVhYTJiZWVjODg4ZGUwZDQzMmY2OTVlYzc5YjFjNzg4NDFhZDk0MWUiOiJjMzZhMzgxYjFiMzZlNmFiMDBlYTgwNTU3YjVlNzQ1MWVjOTc3MTEwMWRjMjI1ODAiOiIiOiIiOiIiOiJkYTc0YjIzZDMwOWZjN2NmNzY3MGQ3ZmViNmNiNmZmNGRhMWI3NjNhZTJlODYxNmVkZWVjMTJjNzE1MTFmNWEyNGI5YzQ2NjUzMjI4M2Y0MTUxYTkwMmZmYTVhZTIxMWQ3YzFlZmE4NDQ3N2I5M2ZjMzkzYWM5NTUyMmYzNjczZjk3YWE5ZTM3OWU0OGQxOThkNTkyOTY4NDg3NTE1MDYzM2ZjZjhhMDkxOGQyMDUwNTUxZDhkYWE5MTg4N2YzZDI2ODU3MzdiNjQ1NmQwYzYxYzBhMTE3NDEzZjE5MzM0NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI3ODQyNmY4NjU0ODNmZmJjYzYzMzBkYjJjY2Q2NWJmOGYyNDc3MDZjZWRmNjhkNGNiY2MyODliYWNiMWVmMzJlNWNhZjA1ZjI4YTIxMTQ2YTliMThlNzdiM2E3ZWQwZDI0YTA4MDNjOWFmNzI2NGZlNGUyM2Q2OTIiOiJlNTAyNjA5MGY5ODA2ZmY2ZjE1OGM0YTgzNDU4OGY2YTM5ZTliNGE0NGVmMmRmYTYiOiIiOiIiOiIiOiIxMTFjZDY0YTk5NTBjYzZmMjBhMWIzODgxMWZjZTRhMDg5MjljYTI2NTRiZWQ2NmMwY2RlYmFiMGI4MTU1MjgyNmMwNmVmMTJjZTQ2M2ZjOWM5MWM4MWEzNWQyY2EwNTUzOTA1OTIyYjlhNDk3NWZhOGZlZTJjN2Y5ZmZhOWYyZWQ4Y2IyNjA5ZjRiN2QzMmE0NDkyN2M3YjViYWE4ZjQzZGRhMTM3YWJhOWI0OWEyYjAzOTRmN2Y2N2QzN2I3ZjcxYTVlNGY0YzE1MWRiNmI5NmU4ZTRkZDljZDBiZDg0ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI0M2NhMTFkNTNhZDAxOThlNGRiNWUxMzZkZTgxMzZiYzQ2MTg1MWEzMGNlNTk1MjFmOTMxYWQwNTk2ZDEzMzY1YmQ4Mjk3YTY4ZGQ0MmI3ZGFiN2Y0MDgwOGIzY2U2YzEyZjE0ZDRkZTc0MWNlNDUxYjY2MzdhMTAiOiI1MzJiMDU4OTFmZTQwNmNlNzI0MjEwMTNhY2ViNDM0NTgxYmU4YTNhMTM1NDlkZmEiOiIiOiIiOiIiOiI0YzQyZjc5MWRjODMyMmQ3NzlmOWExZWQ5YTI4YjBjZjM1MjYwMWE0ZWY2ZDc0ZTRlODIyZWU1ZDllZWYwNmU3MDAzMTRhY2I3YTQ3ZGNiYjYyODA1YmFiZGNmZGQyMzZlMzAyMjM3NGRlZmQ0NGJiZjc0Nzc2NGY3MmZiZmNjYWUxMDg5M2I1NGIyOTk2NmFiYTQ0ODQzNTk4N2MyMmFjZTRjOTMxZDAxZGM5NDUwOTE4NjBjYWU3NzQ0MzY1YmQ5YjYxOTA1OWI4YjY0NmIyMjk4Nzg5NjYwNDljZjgzZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJkZGNiMzAyNGI2ODFlMzBlMTZlMDUwMjZkOGUyMzk3NzQ5N2ZkMGIyYzBhYzI0MDE3ZGUyNzQ0ZWRjYjA5N2QzYTEwNGQ0ZTNjNmI4YWRjYjU1NDc0NmY5YTQzNjcxZjA2OTJjMDFhOGY4OWZhOThlYzNhNTRhYzciOiJiZDllNDE5NzRmNjYyN2FjNWJiYjIxZWM2OTBlZWNlNDU5ZTFkY2VkZWZiMzI3ZjkiOiIiOiIiOiIiOiI3NDFiMmE4ZTgyYWEzY2E5ZjNhNjA5ZDA1YTZlMmQ1NzBiZTQ2M2VmOTU3ZjIzNTM0NGNkZjllMGY4OWIzNjEwOTUxYWExZWYwYjk0MDY3ODViNzVlNTljMmRlODM0OWQ0MzVlNGRiODJmYzJhNGE4Yjk0ZTM2NmY0ZWIxM2M0MzJmY2Y4ZmFjMDhmMGM3ZmRiZTY3YTQ0ZTgxNzA2YjUzYjQ2MGY3OGJlZmI4Y2I2ZGQyYTBmZmQxM2M4N2RmODRmOGE1MTk3ZWQ0NzE1OGNlZTE3MWU1MzIzNTkzZGY0ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJmODFjNGJhODYwNWRjMTQwNzJlMmJkYTJkMmVmNjRlNzFhZDg1NjA2MTA1NmI4ZDgzNzRmZmY1YTZmZDlhNTRhODE0ZmQ3MjViZGE4OTQ0MDM3MTk3NDkyYzUyYzYyYjk3ZWEwMmRmMzMzMjViMzViOTE3MjY4MzkiOiIyMTcxMzcwODRmNDUxOWQwNDZlYzg5NjE0NGNmMmMzMDFiYWY5MTFlMTQ0MDg1MmUiOiIiOiIiOiIiOiIxNGVmZDcxZmExM2RmYmQ0OThiYmUxM2ZmYTI0ZTY0NmQwNGVlMGVmMzJjOTljMTEwMDRjM2U5ZDhmNzQ4YWMyZjk1NmY5ODk5YTcyYzhkOTdhZTk4OGQwNjI3NTg1NWY3N2E5MmJjMzBmMWI5NTdkYmNmYzkzZmZmZWMzODUyNzE1YzIzOWM1MzEzZTc2NWFmZmJlZDI1N2QzMDJiNmQxYjc0OTc3YjgwMTI1MjJiNjk5MDJhZGI4NmVmYzFhZDc2OGQ5OWQ2NTdhNTM3NWRmZjcyMGI0Y2FkODg2ODc3YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiODE4MWZkMmNjNWY3YWUyZDRlZDJjOTZiOTUxMWFlZWVmMzNlNTBlY2YxNjRhZmM0ZWRkZWJhZjc2YTk2ZDk3YmZiNDAzNzc5NTllMWVkYzQ0ZDI0ZGYwNDE3NDllYzYyMzlmZjIyNmU0MGQ1YTVmZWNjZGJlZGE2IjoiN2Q2Y2E1YWI2NTJhMzdjZDc5MzY3ZDg0Mjk5ZjFmZjJjNWEzYzIzMzFjNzdiOThlIjoiIjoiIjoiIjoiNWEyY2FjODExMGEyNGUxZDhjNWY4YmZmM2U4Mjg1N2VjOGNmY2Q0NjljMzE2ZmExOGIwZjY1YTBkMzA4NjZlNDlmZWQyYTIyODEyMWY1MDkwMWRiYmJhNTYxNzMyYzRmZTgyYTk4ZjM0MWJiYzBhMzk3ZmQyNTdhNWY4YTRhOTEyMmM5OTE2NDhiMWE2NTA3YzgyZjg2NmQyNmY5YjIyZTBlZTdjOWE1MWM0ZDhlNTEwNGYwYjQ1NzAwNDNjOTI1N2JiOWRkNmYzNzMwZjFkYWY5NGY4MGJhZjg5MDdhY2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImEwYWQwMTJhOTc4YmVkMjI2OGQwNTA4NmI4MjNmNWQwZGM5YmI5OGVlMDM5ODBkNzU1YmNlOTY4ZjlhYzgxZGI4ODZhMmEwNWI1OWRmNDBkODM0NjMzNGEwMjc2YjczZjUyOGRiMDNhMTE4NTQ1YWNiN2YyZDcwZSI6IjFhOGFjYTNjMTE4ZjJiYzBjMjE5NmRmODFlZjIyYzI2N2QyMGVkN2M2MDdjZGFlMCI6IiI6IiI6IiI6ImI5ZGMwZWIxZTRhZWI0ODJkZWExYjRhNWU2ZjZlZjk2MzYzNjZmYWNlNjk2ODExZGIyZDkxMmU5NDMwYjMwM2YyM2FjOTVkNjU2ODI2OTRlZjk1MTNhYzViM2U1NmEwNTNiMmUxYTJmZmJjYjkwMWMzNzVjZDEyMmNhYjQ3ZDMxZmNhNWEwNjA2ZGFmOGNjMmU1ZTZlOTliOTBmYzhhYjRmYTY3Nzk0Y2FhZDkxOTg1Y2M5MmIyMTg3ZGQyOTY1YmUwOTgwMjQwZDliZTJmYjFjNGJmMDZlNjBmNThmNTQ3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiJmMjhiMTQzNDY4YWI4Nzc5NDIzMGNlZjQzNjFkMDQ3MjM2NDQ0MTgwZDBjZmRhNThjYmI5NDk0Y2QxYWQyMWJlOTYyOTdmZjc5OTAxMTA0MjAxMzc4OWE5MjhmMTg4MzFmZmIwMTY5MTI2ZGQwNDZjNzc0YTRmY2UiOiJlYTdmYzUwZTFlZWEzZDg0YmZmY2JmODNiMjQwZTkyMTM0OGI1MzJlN2IzM2YwOTQiOiIiOiIiOiIiOiI1YzIyZTkyZjI1YWNhZjk4ZjU1ZmYwNmUxYmQ4MGQzODJkYTc1NGQxZDMzY2ZmYjZmY2E5MzM1ODNiYTc1ODIwMDM1NzU1MTY0MGM0Mzk3NzBmNzdmODQzZTljZTFlOWEwNTRmNjk1ODhkNzZhY2I5Y2I5MmI3YTJmYTI5MDNiYzUxMzkxYmQ3MDAxY2NjMWRhNjdhNGNjZTllNWRkMDhjMmQ0ODkyOTVjMzZkZTJjMTQ4Y2UyNzMxMWQwNzg5MzEwZGUxY2FiMjY0MWU5MmY4NTliMDM2MzgzYTgwNThhNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiYjYyOGNiNDQ4ZTQ3N2NiNDM5YTJkZTY4Nzg2MWE5OTJlNzM4ZGI2YjJiMjVjYzZjMjdhYWRmYzNhMGE2NDBiMzQxMWRlNDljOTIwNDA3MzAzZTgwYWJkN2ExZDRmNDVjNDc0OTk4MGZlMTU1MGJmZjY5NTE4MjEwIjoiZDVmNGY4MjY2ZGE5YjdmMTdhYzk3NzM0MjAxNTQ0MTA0YTVjMGFjYjUzYzZiZjIyIjoiIjoiIjoiIjoiMzRhODM0ZGJiN2RhMGI2YTJlMjM1M2JkOTc5NWJlZjM2OWNkZGU0ZDE3MmIzZmVhZTdiMWQ5ZmRmYjA0NDY0NTRjZmIxYWRlZmY0MjNkMGExNDNjMzNjMGUwZDhlNzkwNWJkMTcyMDg4OWU4YjExMjFmMWVmODJjZjE1NDQzYzJmOWM4OTk5YzU1NzNlN2RmNjBiNTJlZjM5NWNhMWQxYjYwZTdlYjcyMWMwMTJjMzQ0ZDA2YjMzNmQ1MTlmYTJiN2I2ZGZiZWQ4MzgzNDU2NTA0YmQwYjQ4OTNiZjJiYTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjVjN2M5NjkwYTE5MjZhNDU4MGM2OTFjMmU1MzI3ZTczNmQ1YzNhZWMwY2U4ZjVkMzJkNDk0NmJjNGI2MDdmNzEyYTg3NTk0MjhiMDEwYmExYjI2OGIwZGU2NGZjNWViMzJkM2Y3ZmE5YjhkNGYyMGZhYjQ1YzcyZCI6IjAzMTBiMmQ4YjU2NTVjYmIwZmMyMDQxYWQxNWEyNDhhN2IxZjJhYzc4ODQ1ZTI5YiI6IiI6IiI6IiI6IjZmOGI2ZGY1NWQ5ZDhhY2Y4N2RjMmFmMjBiN2Y0NTEyZjk0MjU5ODc0OTVmNTEyOTc1ZGU4MDU5MTM1ZTdlYmI4Njk4Y2IwMzAxYTg4MTZlNzI5OWU3NjA1M2NiNjYwNTFjOGIzNWJkMmIwMGI0Njk1Y2ZmNDg0N2YxNjhkMmQ2MDY5NzQ5NWNkOTAwN2FiN2RkNzRlZTdmNjFlZTkwYjc4Mjc1NDNmNjI0YjdjMTQxMmJiYTNkNmRmMTI0MmU2ZmZkOTA1MzRlZDM5MzM0MTQyOWZjMDBiZDk3ZDliY2I3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiOTZhZTcwMmFmNTBjNTBjN2MzODgxOGE1MTMzOTM4YmQ3Y2U1MTE5N2ZjNzhlMjE4MTViNmM1YTdmZjljMDM5NWQ3NjQxNTlmNzA3ZDU4MTNlNWJmNDdjMWI4MjMyYjQ0YTAwN2JmN2RlY2ZlZjQ5OWQ3NThlZDUzIjoiZTk2NTU0NjQ0MDk3ZTk5MzI1ODViN2Y0YmIxNGQxMDFmMjRjOGIwMzc2ZjM4YzA1IjoiM2Y2OThhNWY2ZjRmZTY3ZWYyZGRmMjNiZDVhNjdjMWEyZGY0ZjNiMTk0MjVmYjg1IjoiZmUxZjZhOTBmYzBlZDM5NmJjYTIxYzBkNDBhMWJiNTgzZWI2M2RmNzhjOThhZGFjIjoiNTk0MmI1NjE0OGYyN2RkNTM4OGYwMGNhYTQ3ZmZkNDkyNWU4NTQyMzdmZTE0NDU0IjoiMTUwYjkyNjBjZTlhYTQxOWZlMTg2MDMzMmFlN2M5ZjQyZDlhZGExNjQ5Njc5YjUzZjQ2YmM5ZDIwZGUzNDMxMTg2YTU0YWZiNWRmN2I2MjY5Y2RjMDU1NDBhOTNmZGQ1MGEyY2QzYTg2MjM3MmQ4NjI4NDE3NjhkZjAyODQ2YjA1Nzk5M2RkNmFhMzJmODc0YjcyMjBhNWExZmQ5Y2I1NzNkNzIwYTU0YWY1NzE1Y2VkZmMxNmYwZDlhNDY3NzM1ZTI1M2IyYjFhNmU5NzQyMWZjZWUxZjJkNjcwZGVjMWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI0ODM0NzE3ZjY2OWQ5YjU5OWYwZWU1MjYxMjkwNTdiNWE3YzU2ODA3MjRhZTA0NTljZWIwZTBkNGVkYTIxZTVmZTkyZTYzZmQyM2YwOGY4YTBiMDk0YTg1ZjNmMzc3ZmRmMTAxOGFkYTBjNDYxYjVhMDVjMzM0ZTgiOiI4NzBiNzg1N2RhZTk3Y2QzNjFhMDA1YzMwMDUwMTNlNGRkNTVjYTc2ZTQ2YjYyYmQiOiI1MjI1MzRiYTFhMDljZjlhYmYyOWJkZTY2Y2UxZGFjZDBlMjczZTg5NTRlY2NhZmIiOiI0NWY1NDE2OTY2NWY1OWQ5MjIxMWYyNjY4OTIwMDk5NThlZTUxNWYxNGQwOTU4MWEiOiI0NjMzODE5YzJhZTgzYzcxMDU5ZWM4YWU0MWVkMmM2OGNhZGY5YjIwODVhNWI4YmIiOiI3YWZkNmNmYWZkOWE3YmFkMTU1YjU5YThiYjIwOTRmNzZiOTE1YjkzNzY0ZTkyODU4ODIxZDVjMzJmZjRhMjk0OTM3ODhkM2RjMTYyN2ZmZTc5ODA5NTAzOTQzNDllYmE4OGI5YzJmNjg2OWFjNTA4NjI5NjM2NmI2ZjRlZTM3ZTg1MjlkMjkxYzlkOTYyZTMwNjYyNDIzZmFmMzc1Yjc4MjBlMGI2NTBkYjAzZTNjOTk3OTFkODA0MmRhNzkwY2NlMWExOTk3ZWEyMTQ0MWRiYTRiOTM2YmQ4YjM5MzMwMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImY1ZDFkMjdlYjM0NGI2M2U5MDdkODJhMmU1NzQ5NGIyNWRhYmNhZTQ0MGFjODg3Mzg1MTJkOTYwMmFjOGJjYTI0MzAxOGYyNDk1NTk5ZTYxOGRkZTAyNjFlNDNlYTM4ZDQ1ZTdjMDljY2RjNGJmM2RkOGU1YzEwMCI6IjEyZmY4NDRlNWM1YmIzZmQ4NzFmZWIzN2FiNzk2MDAyODQ2ZmZhY2E1YTc0MWM1NCI6ImY2NDJjMTk2MDI3NTQ1ODRhZmEzMDgzZjU2N2Q4MGZkY2QxZTVjMjkyMDJhYzNhZCI6ImNiNmRiYWQ4Y2UxYTU2NzdiNDgyNWNjYTkzNDMzNmI5MzZjY2Y4NDFmZjk4ZDg5NCI6ImMxMWZjYzE1N2M2NDNhOTQzZTU0Mjc0ZjFkOTQyZDk5OGZkMWVhMDMzM2UyMTU4OCI6IjZmMjVhZThiZjhjMjZkNWYwYjlkMmE4MWFjYWYyMjE3OTBhMDkyNDFiNmU4M2M5ZTUyN2M3Nzg0ODgxZDFmNzM5OGMyZDc3NzExNzRmOTJhYWI0NTEzNGI0NjMzYWQ5NjQzMGRmMzBiMTMwYWUzNGFmNTJkZTkwYjQyNTQwNTk1OWJhMjRhNDE2ODVhMDRkMjQxMWUyZjBlODU2NGJmNWJmMzI4MGNiNmQ3NWQwYjkxMGQwNmM3M2E2MjVjZDU2NjQ2ZWViZmYxNGZjZmY4MTQxMWMwNTU5MjFjZGZiNGMwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNDlhMTA1NjlkODdhNzkwZDM0YmNjM2M4ZmQ3N2QwNzVhMWNlZjllZmYzMzdlODkyOWI1MWJkYjhkNmM1ZGYzYWQzMTA0NTY4NGZkMWRhYmIxZmU2ZjA1MmZjOTg4NjM4NGZlNDNjMGE3YWJjN2FkY2EwNDNkMzVlIjoiMzRkNmFkNDM0YTQzNmE2OTBlNzY0NGYwZGMyMjA3MTMxMTQ4MTkyY2ViMmU5MWI2IjoiODcwNzMyOGZjNWExNzIxZTRkNzJiMjNjMmI4Y2EzYzMwZGRkOTU2NjRhYzQ3OGFhIjoiODJjOGQ4M2E5ZjVkNTYzOWE2YTFjZTI2ZDI0NGJkMzBkY2ViMWNjOTc4NjI3ZTE5IjoiMmE1M2IwYjgwYjI5YzdkMDcxOTgzYjY1YmE4MzVlNGVkYTY2YmNmZTdiM2Q5MGI1IjoiMDhlMjRjY2FhZTNiNDRiNzI0OGIyZDczNWFmOTg1ZGNhZGI4NGY3NGQyMDJiY2E3MjZkZTFjZDY2M2JiNWVhMWJiNjdjNjY5MTI2YWM5NzIxOGE5Y2E0NTQ5MWRmOTBiZWIzODc2MTU0NzQyNDliYmExYWZkNDUzNGJlN2E3NGM2MWZlZjMwOGYxMzY2MWRkZmNjZTQwZjI0YjQxMGNmZmIxY2MzY2JiYTJjNmQyMGE1ZTRjNDgxNGQ0NGJlZjA3YmI2OTdjZmNmMWU5OTMyZTQzMzQ5Mzc2ZGMwNDg2NWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiI5YTQyMzJhNTljYzU3OTg2N2Y4MzMwYzI4OGE5MjE4MjUxMDMwYzAwZWJlNTBjOWNkOTdkNmNmZjZlNDlhZDA3OWRmNTA5NjQ0ZWMyZWJlM2FkNGU1MTU2NTRhZjM4M2RhMjY1ZDdiMzQ4ZGQ0Yjg5ZGRkNDljYmQiOiJiNDQ5OGEzMmY2NjRkNGI0ODljMmI0N2U2Nzg0NWQyZDJiZWQ1MDk2ZTg4Zjg2ZGUiOiJiODQ3MWVlODc1MzE4MTdkODFlZTMyNTc4ZDI3ZmEzYTE5MGRmMzM1NjFkYTdhMmQiOiIyZTc0MTk0YWE2MmVmOTExNTk5YjM3YTUxZmE3NDI4MTdlM2E0ZTZjMjU0ZWMxNzkiOiJhZmM3ZjEzYWU1NWU3MzhjY2ViOTc2ZWJkZDAxNjk4ZGU0ZDEwM2RiNzk3Zjc5OWIiOiIzNDBjMjhjYjdjZjRjM2UxNDNkYWMzZTEzM2RlODY0YjFmNDU4Yzc2ZTNkNDdmM2NiYjY4NDVmOTQwYmUxNzRiODgxOWZjNTM5ZjQyMDA1ZjQ0ODVmZGRjNjU3ZjA2NGMzNDg3MzA5NGUyNWE5YmY3ZWMzNDFhOThjYjk3MDE0YTFkNjk0YjE2OTQxNzBjYTVhODk3NmU4NmY2ZTRlNDEyMzJmNTI2ZWM4NTM2ZmFjZDAyMzk0ZjQ5MmZiY2M3YzI5OGVmMGVkZGIzYzVhMTQ4Mzk5ZGVkNzY3NzM2NmNmMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImI4OTc0NDAwOTc5M2QyYzExODM2NWIxZDJmMzQzZDZiNmM1OTM3NGI0MWRiZDgwNWU3OTNmMjc4ODI0NjdjNTM0MjAxNWNmOTY4YjA4MGE4OGExNWZkNmE3YmUzNzU3YjA1MzEzNTI4NTI1YWIxZTJjYmQwOGZmZCI6ImYzYzAyYmUwYTg4MGUxOTQwMTNjMjFiMDliNjcwM2E2MWE3Y2NmN2E3M2U4YTU0MSI6ImJjYTI3ZjEwMDYwYmI4ZDE2ZDQ5OWIzZjZjYTA1ZWQ4NDYyYjUxYjBiNDNhMWZkNyI6ImViNmZjZjc1ODg0YmU5MTEyMjE5ZDM1OTAxM2Y0NWZjYjE5NTllYTk3MWJkMGJjOCI6IjUwYTAzYmMzNjUyZjUwY2I5ZWQxMTY3ZWE3MGVjMWU3NGY4OTZmODFhODA5MDIxNiI6ImQyYTUyOTcyMjM2NWU3ZmYzZTY2MDk2NGVlYjI3MDQwYTBlOTJhNGQxOWJiZTk0NTkyY2ZlYmFkNzEwNDc0MTQ2NzZjYTZjYTcyMjM0ZjUxMjdmMzEzY2I3ZjViZTYxM2I0NGQ5ODlmZTE0MWM5YTBlYzFmMGI0ZDgzYzM2ZTc0NGNmYjFjNzJjMzJhMDJiNjhjMjFkMjg4MzJkYTAwOGM1NzY2NDA0NjI1NWVmMTg0ODhlZDc1MGVjNWU3M2IxOGVlYWQ5MzlmOTMyZDI4MDlmMTI5Mzk2NzBjM2MxMDMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiNmQyOTE4YzE1YmU3ODcxY2FkOTlkYzllMDZmNzMyNTNlZjkwNWQ5NzA1YzRlNGVjMzg2NjQwNDNiMDRmOWExNTBmZTU5NTNiZmE3YWViZDkyNmJlMTYyYjdlZGQ3MmZkYzE0ZmY5N2U2N2RhZTYyNTdhZDY1NGY0IjoiNDg5MjQzZWFhYzIxNWY3NmE1NzNiOTJmMDcwOWQxMTZiZDNjODE3ZWI5NWMyYzM5IjoiMGE4NGNhZDdhMWNkMjFhNWFmZTY1NTdkN2QyODc1ZDljNjIxODNjYmJmNDlhMTIzIjoiMGMxNDU3OGFjOTUwNDkwMmNiOWFhNjU0MDg2MjQ2ZDExMzAzOWY5MjZhODdiMzI1IjoiMWFhYWIxZTNhMjllMTQ0Y2VjODI1ZDI5YzNmNDJkYzk0NWNmMjc3MmVkMzBjYjViIjoiMzM0MzhiYTRlZGQwYzM4ZGI5OWYyYjZhNTBiMzVkZDg5YWVjYjM0OTE5OTBlYzRlNjA0NjBiYjMyZWIwMTg2ZmY5ZmRjOTczYjFiMGRmMjNhZTY1ZGEzMWI4YWY1YTM3YTY5ZjgxYWIzZTU3N2E0YzJjMzFlNTFjZmNjNGU4NDRiMDQ0ZmI1OTdlOTM3NTI0ZjU5YTAwMTlhZDUxMjBjNDYwMzI5Yzk4MmZjOTNlOGU3YTRiNGUxZGU1NjE5MTAzYjIzYTdhNTc5NjMzZmM5MjVkMTQ3ZDhmYjg1NmEyNzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjI0OiIxMzMwYzRhZWY1NGZmODQzODdlMDM3MmY3YzhkMjczY2VjZjBhZjJjZWIzMmVmNmVkYjZhNGYxYWNlODAyZjNiOTVmYTY5Y2Y1NzhlMmNkYTFkNjA2MGVjMjU1NGViMzE1MjUwNzM4N2YzMjVkOGUyNjAwOWJkODAiOiI4OWQ3YmY4ZjU3NTRjZWRjMmUxYTI0OWY2OTNlMjkyNzYxNzBmNjJjMjljNWVkYWUiOiJhNmI1OGYzM2Q1NzU3MGY0ZGYwNWJiZmI3OTJhMDAwODdkMzMxZTE3NDE3ZTA5ZWYiOiJmNTdmYzcwMWU0ZjhmNWNjMjE4MWI1MzU3ODI0ZjkzMmY2ZTA3Njc5ZWMwZDNjYzciOiI1ODZjNGU4YzU3NjkxNTZjYmI1NGMwMjVmYjAxYWFkMGI2MWFhNjIzOGMyMzE2NTYiOiIwYmNiNmFkNGYyYWNlZmI1NDljNDYyNzFkNWE0ZWQ0MWQ3ZGVjYzA5NTEzN2UyMDQ0YjYwMjczMzg4YzZjNmQ3OWNiODkwMTZhYmNhZDFkNmExMzg2MjE3MjBiNzFmYzExZWY4MmZhZTA0MDI2ZTA4OTI2ZTk0MDQyNjk0YTBjMDA4Zjk5MjgxZTAzZGE1ODBmYmI2NTQzYWNhMmI0NTk2ZDM5Njk5Yjk3ZjFmZTY1ZWM2MGE3MGI4ODc3MGViODI1YjcxNmExMGNlNDEzODNmMzFkYjU5NjA3OWE5ZDU0ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjI0LCAxOTIsIDE5MikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjNmMDU2NGI5Y2VlZTMyYzg5NDRjOGYyYmM0YjRkMjE3OWIzOGFjYzg4MGJkYjkxZWVkNDY2Yjg4MWUyY2MyMWRmNzdiYzM5MDFhYjVjZTVlY2YwMjlhMDY2Nzg0NTAzZjgwZDE4NTc5NzliMDljNDU2Mzk0NDQzMyI6IjVkNTRmYzcxNTU1NmMyMGY1YjJkMDFkNmIwOTkyZjFjNTk2ZTVhZDc3ZjgxZGE3NSI6IjM1Y2I2ZDA3ODYyZmJhYjRmNTAwMzgwOTdjYjQ2M2FhZGYxNGU1MTljODgzNDY1MSI6ImFiYjIxZTUwMWU4NWFkMWVkYzY2MTA4ZTNiODgzODBmZGRmODEwYjEwYjg4MzMxNyI6IjNjNjkwY2RkOTk3ZGZhOWM1Njc3YmVlOTc2ZmE5M2NhYzIxZjViYmYzODJmN2Y1MyI6ImJhZTg3MmM5ZDIyMWIxNTMxZjg1YzE1ZjQ2NmI3YTNhZjNmYTljOWM2YjcyYmI4ZjVkYWQ3N2YzZDEyZGY1MmQxMDM0N2JhNWQ2NTA0Y2QwYTI4NWMzYmU1NzhiYjY3ZjBhOWYwMTM3NDYzZGMwMWNkY2I4NDdlNzg1M2M1ZGI0Y2JiNmExMTVlYmZmN2I4MGRiMDQwNmJhY2NiMGUzZTY4YTRhNGE5NTM2NGMyZGEyOTQ2NmUxNjBmZWNlN2I4ZGRiNjVkZmFiMDAwYzY2Y2M4MTA5MzgwYTYwMWQ1ZWQ5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yMjQsIDE5MiwgMTkyKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMTE1Yzk3M2Q2ZGY0MWVhZDQ2NGUyMjU3MmRiZTA3NjFkY2RiOWFhZDkzMGIyZTU1YTU1NTgwNzVmYjdjNTFjOTRlZmM1ZjhmZTVkZmUyNGQzMDE3NWE4OWYxYmJjZjE0NjAzN2EwN2IzMjRmNTcyZDBkNGMyN2U0IjoiZDMwNzllZTNhM2M5YjJkNjllZTBmZDMxNmE2NDQ4YmM3ZDhlM2I3MzA5NDhjNDZkIjoiMjM0OGVlODdiZDVhM2JiNDVkNTFhN2I2YTEwOTA0M2E5YjZlZTNkYjAxMWRkYTI4IjoiOTM3ZmUxYTdhNzkwNzU0YmZmOTlhZDUxNzgyZThlZjViNDkyOGQwMDU3YjBjMzgwIjoiM2U4OTg5OWY0YWFkMjQxYTkxODlmZmExMjdjODdjMTViNWUzYmNmZDgwYmMzMTZkIjoiMGZmYzg4M2FhMTliM2NiZGViMzkwMzlmZDM3NjAxNjBhOTNjZDY2M2I4YjM1OGU5ZmJiNjMwMGRmMTY0Njg5MzAzZWU1ZjI0ODlhYjRhYjJkNTIyZjZhMzNjOTMzNTBlYWI1NTNhMjQ5OWIxNWY4Y2ExOTgzMDNmZjQ1ZTk0NmEwNmQ4YTQwOTU5ZjMzYTc1OWM1MzgxYjNhNTlkYTIyZTY4MDMyYWJmM2RhM2RhNmFhZGI0MTBjYjQxZjU0YjMxNDZjZTU3ZjliYjVkMjhiYzgyM2UzZTAzYzAyOTQ3OTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiYzI4NTQxNDI1YTdjZjMzZTI5YWRhYTkxZjMyNmYyMTZkZTg5OTc2MDMxOTc3ZjEwNGY0NGZjYmNkY2Y0NTc5MzM3NDM0NjEzODAxZmU0NjYxNjQyMzkyZGIyOWYxNWYwOTI0NTY2ZTcyYjU5NmIyM2ZmN2IxOGQ1IjoiNDQ2NTBhMjk5NzJhYTg1MjFkNmZiOWRmZmViMTVjMDA5MDNhMjgzZjIwZWE5OTE0IjoiNDNjZjRkZTAyNzY0ODNiZTEzODJmM2NlY2M2YTgwMzU1MWE0MDYwMjU4NGNkODRiIjoiMDNlYWExMDYxMjg5NWRiOGY2NmQ1MGEyMjEwZDczZDFmNTYzYzNjYTkyOWQ5ZjU0IjoiOGQyYjIwYWJjNGU4ODkwYzc3MmJjYWEwNWNiN2IzZWI1MDI1YWM0Y2FjYjVmN2NlIjoiYWVkMjdmZjhlYjU0YTdkMjc4N2U3M2VkMmE1MTg3N2MxMjUwYzBkNGVhZjEwYWFkZGIzMDQwOTYyNDI4OWE5Yjc3NDJjZGViYmE1NDIxOGM3YzQ0OGI1N2YyMDkxODJlMjE0MDE0Y2QxODA5MTZhOGMxMjVhZDQzOGFmMmU1ZjVjYTViMDBmOWNmMDYzZjBjMzA3NTYwZWQ0Mzc4MzgyYjQ1NzJiOTcwODhmOGQyNGUwYmRmMGZjMzQ4OWY2NDA3NGYxMTU1ZmJiMTE2M2I1NGM5MzA5OGI4NDEyNTdjMzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiZGZhNTIwODJhZmI0ZGQxMzdjYjUyMDlmNjc3MWYwNGVkYTI1Nzk0MjgwOTgzYmExZDhjZDJmM2Q3ZjlkZWU1NTZhYzI2ZDhhNWEzNjhkMjkwOTZlZDY0MzA4OWI2NWU5YWIxN2I1ZjU4ZWM4MTY1NzA0OTlmYmZmIjoiMTZjY2ZkMjA0MDgwODI4MjlhYWY4YTgxODg4NTE2NDU4MWM5YTFiZDA5ZTlmYzEyIjoiYWJlMTNkMTJhOWYwMTMzYmRlYmUxNDc4NWRmZWY1ZjA4YTEzM2E2Y2I1YzI2YTkyIjoiNDg1ZGFkNzgwNGRlNTk0MzU2Y2YzYzU3MWQ1ZjIyMjYzYzBiN2NiZDRkY2ExZjFiIjoiNTk2MWY4MTc3YjYwMTVhZTAxMTlkMjJlMGE0NWE0YWExYmNkYzU4MGY3ZTdmOTc1IjoiZWU0OGU1N2YxYjViZDcyYzk5YzkxMWQzMzUzOTUyYzJjMTQzNjg5YzNjZDliNDc0YTQ2ZTRhZGE4MzgxMWVmYzY3ZjI1NTdkMzIzNzIzNTI2ODA5ODI1YWEzMzhhODBlODMzYzk1Mjk3ZDZiMTY0OTBkYjYzM2FjMWYxNjQ4MDcxYzNhZDRjZGNlYTA1NmM0MWI0ZWIxNTdmZmM4M2MzNDU0YjBjZjAwMWYxZTAxYzMxZTQ4YTYxNTg3MzgxZTI5M2U2Y2ZmOTcyNzBjMWYxNTdiMDY5ZGYzZTU5MWMyZjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiOTVmM2ExYWVhY2QwNzIxOGEyY2NlZTQ0YzgwN2Y3OTBlNTY4ZTAwMzJhNDJmZGM3YzhkYzlhNzFmNzZiZDcyNWFhOTA5ZGRiZGY1NDU3ZjFkYzRlNjk3NDY0MjZhOWM1NmZiZWM2MDM4Njc2MzNlZTM2YTdmZTYyIjoiNjU4YjczMjZjZjZhZGJmNzIwOGQzN2NkNjk1NDc4MDViYzNmNThmZGQ4NzRlMTQzIjoiZDQ0MzUwYzdhNjY4ZTY0ODczZmY5N2MzMWQ3OWNiMjNiMGYxNjIwYWVkN2M5ZDIzIjoiZGZlZmZmODBmMTBjMzE0M2I4MmRlMzM5MmMzOTVhYjk0YWM4YTJmNGMwYTMwMDQ4IjoiYTZkMjFhNzYyYWFhZGRjZGJhZTliOWVjZWZiY2IzMTQ5ZDUxNGM5NGZlODNlYjIxIjoiNGY1ZTU0NDQ5MWI3MmI4NGEwZDA1MzJkN2Y5Y2UwMWVjMmRlNmEwNWFiNTA1NmZjNzVkOGY3M2JiY2FjNWZmYzM4ZTIwNzQ1ZDBlOGFhMWVhY2RlZmVhNmRjYmI5MjQ3NWI1Y2Y5Y2UwYTYxN2U1NjAzYjdiOWZlMzRmNGY0Y2IwNGFkZTJkYjM1Y2NlMWZkMzE1MTQwZTNlNGFiODQ3MjIxNmM3Y2ZkYWYwMDQxODEzNTFmMjEwYjM5N2MzMTQ3ZGNkMjc5ZjZmYzJlYmQ5NjA1MGU5OTZmNzdhZDZiYTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMjlhMTg5N2Q2ZWE1ZGU2NmU1NTFmOGMxMDZmNjAxZTQyMWRkZDk0MDgxMjUzMGRmMDBmNjM0NjgyZjI0OWFlYmRhZjg2OTM4Yzg5NWMxMWY5ZmNiMGJkMWZjZGIxODNiNGY4Y2Y4NmIzNDI5YTUzNzJjYWFmZTFkIjoiZDY1NWExNzllZGFmNGI4MzgxYTlmNmEzMzJlZDViNzU0ZGJmMzRmNjUwZDE5ODY3IjoiMzFjODdiZTY4NmI2ZjkwZjNkMWIwZWE5MGM1NDFlMTZmMzQzMDI5MmE1YzQ3NTVmIjoiZWQ0OTQwMzcwMGNlYmVjMzBkMTA1NzUwM2JlN2JhYWNiZWI0NWJjZGZkOWE0M2EyIjoiOTUyNzYzMzgwYWYzMjQzYzZjMzI3ZjIzY2I3NGY4MzY4OTE5ZTBiNmI5YzI1OTM0IjoiZmIyOTA2N2JkYjIzYzBmMDE1MzkzMjUyM2VkZjMyZDBlM2MxOGU0NjYxNmUwN2YzOWE0Yjc4MDkxZWNhOTAzNDlmNjM2ZmZjZjI2YjY4YTRjZDA5MDI0MzFmMmFkYTkxYmNjODZkYzIyM2RiNGFhN2E0MmU3Y2I1N2E4NTIwOTU3MDRhMjdmOWYwNzk2Mjg4MGE1MGQyY2UxNmMxMjViZTFlOGQ0ZjU0YTBjYzVlYWY2MzE1MGMzMjQwOGRiNmYzOWIyMmZjOTNiODUzY2FhYmE5ZTQ5NTgxZjEzYTg4MTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTIyNDoiMzg3ZTMxYmNmZmZhNTEzMjNhOTJkOTA3MTNiNDM4YTFmNGRlZDY5NzA3YmUzYWE1MTdlMWU3MmQ0NDhhYmJkZjBhMTc5ODliM2RlN2M0M2M2MjFlOTA0ZjUyZGI1MmFkODIzZGFhYmZmOWMxMGIzZmNhOTNhY2ZhIjoiZTA4ZmZmMzIwYTQ5M2Q3MGVhNGNjODVhNGNjNjA0NjY0YTBkZWVjOGY2Yzc2NjZkIjoiOTY5Y2FmYzMzZTk5OTY0ODMzYzRkMGY4OGY5MDZmNTQyOWI1ZGFhNTUyZjUzYmYwIjoiOGQ2ZTZmMDUzMDFlZjVjZWZiYTc1MmYzZDBlZjU4YTI1Nzc1ZDZiNjlmNmMxNWE0IjoiNzIyOTJhYWE2OWZiZWY2ZjAxMGZhNGQ1YmI2M2Q2ZDdhNTk1Mzk1ZDc5YThjMTEwIjoiNzdlYWQ5MDg0ODQwNDQ0ODJkYTUyOWY5YTZmNGNhNmU2ZDhkNDk5NTRkMmUyZDVjN2RjNDU1ZTAzYmViZjQ4NDAyMTY3MzcyN2JiYzQwYWRjODgxMjYwMDIwMWI4YzJkZThlNjU4MTkxNDIyYjgwZDIzNTAyMzI5Yzg0YzBjYTA2MWIyMTI5NTJmZGIyZWNmMzEwNmRkMjBlNjQ1NWYxZjIzMWUxZGFkMWNmYmYyZmEwMTlkZmU5YzE2MmE2NzBhZTIwYjI1MmFlMmU1YTRjYTBlYWFlMWM2NzlhN2ZkM2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjA2MDMyY2Q1ZWVkMzNmMzkyNjVmNDllY2IxNDJjNTExZGE5YWZmMmFmNzEyMDNiZmZhZjM0YTljYTViZDljMGQwZTY2ZjcxZWRjNDNlNDJhNDVhZDNjNmZjNmNkYzRkZjAxOTIwYTRlNjY5ZWQzYTg1YWU4YTMzYjM1YTc0YWQ3ZmIyYTZiYjRjZjM5NWNlMDAzMzRhOWM5YTVhNWQ1NTIiOiIiOiIiOiIiOiIiOiI3NmZjNzlmZTliNTBiZWNjYzk5MWExMWI1NjM1NzgzYTgzNTM2YWRkMDNjMTU3ZmIzMDY0NWU2MTFjMjg5OGJiMmIxYmMyMTUwMDAyMDkyMDhjZDUwNmNiMjhkYTJhNTFiZGIwMzgyNmFhZjJiZDIzMzVkNTc2ZDUxOTE2MDg0MmU3MTU4YWQwOTQ5ZDFhOWVjM2U2NmVhMWIxYTA2NGIwMDVkZTkxNGVhYzJlOWQ0ZjJkNzJhODYxNmE4MDIyNTQyMjkxODI1MGZmNjZhNDFiZDJmODY0YTZhMzhjYzViNjQ5OWRjNDNmN2YyYmQwOWUxZTBmOGY1ODg1OTM1MTI0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJhYWRjZjMzNzc4OGJiOGFjMDE5NzY2NDA3MjZiYzUxNjM1ZDQxNzc3N2ZlNjkzOWVkZWQ5Y2NjOGEzNzhjNzZhOWNjYzlkODBjODlhYzU1YThjZmUwZjk5OTQyZjVhNGQwM2E1Nzc5MjU0N2UwYzk4ZWExNzc2ZTRiYTgwYzAwNzM0NjI5NmE1NmEyNzBhMzVmZDllYTI4NDVjN2U4MWUyIjoiIjoiIjoiIjoiIjoiMTdkMDlmNDBhNDM3NzFmNGEyZjBkYjMyN2RmNjM3ZGVhOTcyYmZmZjMwYzk4ZWJjODg0MmRjN2E5ZTNkNjgxYzYxOTAyZjcxYmZmYWY1MDkzNjA3ZmJmYmE5Njc0YTcwZDA0OGU1NjJlZTg4ZjAyN2Y2MzBhNzg1MjJlYzZmNzA2YmI0NGFlMTMwZTA1YzhkN2VhYzY2OGJmNjk4MGQ5OWI0YzAyNDI5NDY0NTIzOTljYjAzMmNjNmY5ZmQ5NjI4NDcwOWJkMmZhNTY1YjllYjlmMjAwNGJlNmM5ZWE5ZmY5MTI4YzNmOTNiNjBkYzMwYzVmYzg1ODdhMTBkZTY4YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNjJjZGE0NDFkZDgwMmM3NjUyYzAwYjk5Y2FjMzY1MmE2NGZjNzUzODhkYzlhZGNmNzYzNTMwYWMzMWRmOTIxNDVmZGM4OTdhMGMxYzQ4MjIwNGVmMDdlMDgwNWMwMTRiYmQ5YmJmNzE3NDY3YmY0YjVkYjJhYTM0NGRkMGQ5MDk5N2M4MjAxYjIyNjVmNDQ1MTI3MDEyOGY1YWMwNWExYSI6IiI6IiI6IiI6IiI6IjdlNDFmOTY0N2E1ZTY3NTBlYjhhY2YxM2EwMmYyM2YzYmU3NzYxMWU1MTk5MmNlZGI2NjAyYzMxNDUzMWFmZjJhNmU0YzU1N2RhMDc3N2Q0ZTg1ZmFlZmNiMTQzZjFhOTJlMGRiYWM4ZGU4Yjg4NWNlZDYyYTEyNGYwYjEwNjIwZjE0MDlhZTg3ZTIyODk5NGI4MzBlY2E2MzhjY2RjZWVkZDNmY2QwN2QwMjRiNjQ2NzA0ZjQ0ZDVkOWM0YzNhN2I3MDVmMzcxMDRiNDViOWNmYzJkOTMzYWU0M2MxMmY1M2UzZTZmNzk4YzUxYmU1ZjY0MDExNWQ0NWNmOTE5YTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjZiZGM2Y2E4ZWVmMGUzNTMzYWJkMDI1ODBlYmJjOGE5MmYzODJjNWIxYzhlM2VhYTEyNTY2ZWNmYjkwMzg5YTM4Zjg0ODFjYzc3MzU4Mjc0NzdlMGU0YWNiN2Y0YTBmYTcyZWNhNmYxNTYwNzIwZTZiZDFmZjAxNTJjMTJlZWZmMWY5NTk0NjJmZDYyYzcyYjdkZGU5NmFiY2I3Zjc5ZmIiOiIiOiIiOiIiOiIiOiJkNWEyZTJmMjU0YjVhZTY1NTkwZDRmZDFmZjVjNzU4ZTQyNWJlNGJhY2RlZWRlNzk4OTY2OWYwYTIyZDM0Mjc0ZmRmYzJiZjg3MTM1ZTMwYWJkYWUyNjkxNjI5YzJmNmY0MjViZDRlMTE5OTA0ZDQ3ODVlY2Q5MzI4ZjE1MjU5NTYzZTVhNzFmOTE1ZWMwYzAyYjY2NjU1NDcxMDY3YjAxMDE2ZmRmOTM0YTQ3YjAxN2UwN2MyMTMzMjY0MTQwMGJiZTU3MTkwNTBkYmEyMmMwMjBiOWIyZDJjZGI5MzNkYmM3MGY3NmZlYzRiMWQ4Mzk4MGZkMWExM2M0NTY1ODM2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIwOTZlZjM3Mjk0ZDM2OWZhY2UxYWRkM2ViOGI0MjU4OTVlOTIxNjI2NDk1NzA1YzVhMDNlZTU2NmIzNDE1OGVjNmUyZTA4MjU1MzRkMjk4OTcxNWNjODU5NTZlMDE0OGQxYjRmNzEyNWY0NzJjMjUzODM3ZmE3ODdkNWFjZjAzODJhM2I4OWMzZjQxYzIxMWQyNjMwNTI0MDJkY2M2MmM1IjoiIjoiIjoiIjoiIjoiNDU0MWYyNGY3NTliNWYyYWMyYjU3YjUxMTI1MDc3Y2M3NDBiMzg1OWE3MTlhOWJhYjExOTZlNmMwY2EyYmQwNTdhZjlkMzg5MjM4NmExODEzZmM4ODc1ZDhkMzY0ZjE1ZTdmZDY5ZDFjYzY2NTk0NzA0MTUyNzgxNjRkZjY1NjI5NWJhOWNmY2VlNzlmNmNiZTI2ZWUxMzZlNmI0NWVjMjI0YWQzNzljNjA3OWIxMGEyZTBjYjVmN2Y3ODVlZjBhYjdhN2MzZmNkOWNiNjUwNjA1NGQyMGUyZjNlYzYxMGNiYmE5YjA0NWEyNDhhZjU2ZTRmNmQzZjBjOGQ5NmEyMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYTdkY2NkZDQzMWFlNTcyNmI4MzU4NWI1NGVhZTQxMDhmN2I3YTI1YzcwMTg3YzBhY2JiOTRjOTZjYzI3N2FhODk0YzhmNGI4ZTE5NWE0NzM1NmE4OWE1MGQxMzg5YWI1NTE3MzNlZWUyZTkyMmY0MDU1ZTUzOTM5ZTIyMmU3MWZhZTczMGViMDM3NDQzZGIyYzc2Nzk3MDhhYmI4NmE2NSI6IiI6IiI6IiI6IiI6Ijk5YmEyNjkxYTYyMmFmZWNjOTQ3MjQxOGU2YThmOWYxY2RjMWUzNTgzYzNiYzdhMmE2NTBhMWFiNzlkY2JjY2JkNjU2NjM2YzU3MzE3OTI3NmU3ODI1Njk0MjBjOTc0MzhjMDZiZTg5ODg2N2Y2MjhiMWMwMWViNTcwMjYzZDJjMGYwOWM3YWFiNTM2ZjZmYmE3ZGY2YWFkMTllMDVjMjM2YjY0NTY3NDY2N2MwM2QxYjZhMDRkN2ZjMTExNzdmZTc4OTMzYjMwOTY3OWY1YmYyNmE0NjMyYjlhMTNlMzE0YzRiZjQ1MzI0MjhkM2Q5NWM2ODkwMDJiNmRjMWZiYjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImMyODY0MjVlY2Y1NDNhNDliY2M5MTk2YjBkYjFhODBiYzU0ZTQ5NDhhZGJhNmY0MTcxMmEzNTBhMDI4OTFmYTY5NTdhNjU5YTRlYzJlMGI3YWQxODU0ODNjMjIwZmQ2MTA4YzIxMjk4MTNlZWEwNzc2ZmJhNzI3ODhmZGYyNzE4NzU5Y2MzYzQyMDdmYTIwYTVmZTIzYWM2ZTMyY2MyOGUiOiIiOiIiOiIiOiIiOiI4ZTEwMjBhNGZkODRjOTllMGZjN2UzZjdjZTQ4ZGU1ZWQ5ZWM5YTVjMmNjZDYyNGRiZTZmMzBlMmY2ODhhMzFkYzU1OTU3NjMwMzU3YTVkNDhjYTJhNDU2MjQxYTI4YmZiMTZkOGJiMDAwODc3Njk3YTdjZTI0ZDlhZDRkMjJiMGMxNTExNzk5NmYxZjI3MGI5NGY0NmQ3YTliZGZhNzYwOGZhMWRkODQ5MTc3YTliODA0OWU1MWI2YjdhMjc0MjYyMzg1NGExZmRkYjVlZmM0NDdlZWQxZWExYWVkNmYwMmI0YjI3NTRlY2Y3MWVhMDUwOWRhMmU1NGY1MjRhN2U3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIwMjgxOGJkN2MxZWM0NTZhY2U1NWJlZWJhOTlmNjQ2YTZkM2FhMGVhNzgzNTZlYTcyNmI3NjNmZjBkZDJkNjU2YzQ4MjY4N2Q1MDhjOWI1YzJhNzVmN2NlMzkwMDE0ZThjZjMxOWJmYTYzOTgwZTNjYjk5N2ZkMjg3NzFiYjU2MTRlM2FjYjExNDliYTQ1YzEzM2ZmYmJhYjE3NDMzMTkzIjoiIjoiIjoiIjoiIjoiMTlhMjMxZmYyNmMxODY1Y2U3NWQ3YTcxODVjMzBkZDBiMzMzMTI2NDMzZDBjOGNiZjFiZTBkMmIzODRkNGViM2E4YWZmMDM1NDBmYmZhNWY1NDk2NTIxYTRlNGE2NDA3MWI0NGM3OGJkMGI3ZTY4ZmFjOWU1Njk1YzVjMTNmZDNiOWRiZTdmNzczOTc4MWE0YzhmMGI5ODBmMWIxN2Q5OWJjZTE3Y2ViNTJiNTY4NjZhZTAyNDU2ZmZlZjgzMzk5YzhjZjc4MjZmM2M0NWM4YTE5MzE1ODkwOTE5ZDIwZjQwZmM0ZTE4ZDA3ZTljOGNjZDE2YzMzMjdiNTk4OGY3MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNzdhNWM4NmQ5OWJlN2JjMjUwMjg3MGY0MDI1ZjlmNzU2M2U5MTc0ZWM2N2M1ZjQ4MWYyMWZjZjJiNDFjYWU0YmVkMDQ0YWQ3MmVlODIyNTA2YTZkMGIxMjExNTAyOTY3Nzc4MTAwNzQ5ZjAxYTRkMzVjM2I0YTk1OGFhZmUyOTY4NzdlMGFjYWZkMDg5ZjUwYmM3Nzk3YTQyYTMzYWI3MSI6IiI6IiI6IiI6IiI6IjgzMWE0ZGE1NjZmNDYyODk5MDQ4OTNlZjFjYzFjZDRhZDE5ZWU0OGYzODU3ZTJiNjllOTM2ZDEwYWZiZGMyOTgyMmU4NWQwMjY2M2QzNDZlZjNlMDlhODQ4YjFkOWNjMDRmNGM0YzZlM2IzYjBlNTZhMDM0ZTIzMzRkMzRjYTA4ZjgwOTdiZTMwN2JhNDFkMDIwYmM5NGY4YzE5MzdmZTg1NjQ0ZWViNTU5MmMyYjVhMjEzOGY3ZGVkOWE1YjQ0YjIwMGM4YjViZWIyNzU5N2M3OTBmOTRkNjYwZWI2MWU4MjQ4MzkxZWRjM2FlMmQ3NzY1NmNiZTgzNTQyNzViMTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjBlYTQ1OGNmZjhiZmQxZGQ4YjFhZGRjYmE5YzAxMzE3ZDUzMDM5ZTUzMzEwNGUzMmY5NmU3ZDM0MmU2YzdiOWI5MzVhNGI2NmZjNzRjMmE0ODc1N2E5OWMzOTllNjRlMzZjNWYzNzA4ZTdiNzE0YzRlZDEzOWI0ZmE5ZThjNzYzYWYwMTc3MzQ4NDAwNTEwOWE4NWUzMzY1M2JiMGNlOTgiOiIiOiIiOiIiOiIiOiIzNzNhMzdhZjg0ZmRkZWMxMzY0NWE5NzY4ZDZhNzg1YWU1YTI1ODlkNjRjZDliMzc5ODBkZGUyNTQxNDk5MjEwYzRmNDA4MzM1ZGUxZDU4NTM0OTA2NGYzZjUzYTJiNGM1ZWM2ZGMyYTA5NTkxZjk5YWQ5ZmFkNTI4YWM4MzQ3NDE2NGI0NTQ5N2JmMTY3ZjgxZTY2ZmEwODQ2M2ZmZWE5MTdmNjg5MWU0OGYxNDlmYWZjMjA2MjJiYjExNzJmMzQ4ODZmZWI0NWMyNmZkNDQ2YTRhNGUyODkxYjRiYzU5NDE4Njg5NjE0MWFhYWVlYjMwMWI0OWU3YzFhMjZmZWM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYmZiNjhiZTRjZTE3NTZkMjViZGZhZDVlMGMyZjhiZWMyOTM2MDkwMWNjNGRhNTFkNDIzZDE1OTFjYzU3ZTFiYTk4YWZlNGJkMTk0YzE0M2UwOTk2ODBjNTA0Y2NlYWFiYjk3Y2FmMjEwZTgyNDk4YzM0MDg3OTBkNDFjMzIwZGQ0YTcyMDA3Nzc4Mzg5YjQ0YjdiYzNjMWM0YjhjNTNmOCI6IiI6IiI6IiI6IiI6IjQwOWUwYWE5NDlmYjNiMzgyMzFiZjg3MzJlNzk1OWU5NDNhMzM4ZWEzOTkwMjZiNzQ0ZGYxNWNiZmVmZjhkNzFiM2RhMDIzZGNjZTA1OWE4OGNmMGQ0Yjc0NzVmNjI4ZTQ3NjRjOGJlZjEzYzcwY2ZiYmJiNmRhMmExOGFhYmNhZDkxOWRiMDlkMDRmYzU5NzY1ZWRiMTY1MTQ3Yzg4ZGQ0NzNhMGYzYzVlZTE5MjM3Y2E5NTU2OTdlMDAxYmE2NTRjNWVlMGJkMjY3NjFiNDkzMzMxNTQ0MjZiYzYzMjg2Mjk4YThiZTYzNGZlMGQ3MmNmZGVlZjBmM2ZjNDhlY2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI0ZjY4ODBhNjQ2MTAwMDQ0NjMwMzFkNjdkNzkyNGZhNDQ2YzM5MTM4ZDRkNDEwMDdlOGRmM2Q2NTY5MWE5MzY3NmIzM2IyYzEzNjAwZjRiMWRmNmNhM2QxOTYwZThkZDQ1N2I4N2I4YzhmNDgzMTJiNTMzM2Q0M2IzNjc3MzBjMGE1YWQ0NzI1YTE2Nzc4ZmNiNTNmZTEzNmQxMzZjYmZkIjoiIjoiIjoiIjoiIjoiNzNkMGYzMjRlZDE4NmUyYWQwNmJkMTgwMGUyNjJiZGJkYTc5YmE1NGU2MjY3NjFiZDYwZjc0ZjQzZTNiYjYyOTU4ZWMxZTJmMWQ5NDBhZjE2M2UxY2FkYzEyNGU3ZWJhYmEyZjcyZTY3ZWZkNzQ2YzdmNmQwY2FkNTNlZjAzZDg1OWQ5M2NmZjc3OGEzMmVlNWJlMTcyZmU3ZmRiZGMyMzJkZWQzNjBkNzA0YTZmYTBmNzBiZWJlOTQyZTU2NDc4MzQ1NDkyZjQ5ZGM1YzZmYzM0NmI4OGE1ODk0N2FkMjUwZTY4OGU4YzYyNmZlMWVmZTc2MjQ2MjBlNTcxOTc2ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImFhZTM1MmUxMTE4NDMyMTljYWU4ZjcwZTdiOGY2ZWI5YmI1M2QyNDZjYmVjMWU0ZjA3ZDQyNzU3MTQzMjk1YjRiODQ0ODVkY2NkMWJmOTMyMTBlMzIyZWFmY2JlYmNkOWY5MjM3ZjAwZDc0NGQ4ZmJmZjIxYjlkMDA0M2MyNThlODczMTgxN2U2YTVmYjdiNGJmNTAxMTY4MGU1YmM2NDIiOiIiOiIiOiIiOiIiOiJjZmIyOGI5MzUyMmM3ZDYxZDhkM2NlM2YwODBlNDM1ZTRjODNjN2UxM2E5ZGFiNzg4ZGI4ZmVmMDQwNzI2N2ExNGZiYzkzMjRlMDkwZTI0ZGY1NDkxZmVkZmE4MTExNjg2OTk4MzkzOGQ0ZDRkNzMyNGEzMTBjM2FmMzNhNmY3OTM4ZjYwMmM1ZTRlNjNmMTc3MWNkYWFiZGFiMDc4MmI1YWZmYjU0ZWI1MzA0N2MxMDlhOTYwNjczOWRkMDA2NWJkMjFlY2EzMzEzMjk4NjU1NDg3ODM1NGY1ZjlmODUyZTY3NGRkNjkwMTYzYjBmZjc0YzdhMjVlNmJhZThjZTM5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNTg5ZTc5ZTMzOWI3ZDJhMWI4NzlmMGIwZTFhN2QxYWQyNDc0ZWFhODAyNWIwNzBmMWZmYTg3N2I3MTI0ZDRmZjA5NjFlZDY0ZGJkNjIwNjVkOTZlNzVkZTZkMmZmOWQ2ZTkyODM4OGQzYWY0OGMyOTY4NTI3YTRkMmY5YzI2MjZmYmMzZjNmNWE1ZDg0ZTA1ODNhYjZmNzhlN2Y4YjA4MSI6IiI6IiI6IiI6IiI6ImZjZTZjZWQxZWNmNDc0ZDE4MWFiMzMxZjc5YzNkMmNjOGE3NjhlYzI4MThkZTViM2ZjN2NmNDE4MzIyNzE2ZDZhNjg1MzczMzU2MWE0OTdjMGMyNWNiMjg4ZDJjOWZjZmJjYTg5MWJhZmQ1YTgzNGM4NWYzNjAzZjQwMmFjZjFhN2IxZWE5MmRiODQ3ZWQ1YzI1MmE4NjJhZDRhYjVlMjU5NzE1ZjFmYzgxZGE2N2Y1MjMwYmY4YmU1MGVlODA2OTc1ODA5NWY3ZDBlNTU5ZTAzZjJjNjA3MjI5MGU2MTc5NDQ1ODQzNzYwOWU0NzNlYjY2NTgwY2RkYWFkMTliNzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI3MTQyNzdkNDA4YWQ4N2ZkZTMxN2YwYTk0NzMyZmNlNjJmMTM1MmJkYzkwOTM2NjczYjRmMWRhYTA5MjVhYTI2ZDE2NTgyYTk5ZjIzMDEwYjQyNDhiODhkODY0ODU0MTliZDlmYzdjYjJmZDUwNjNiMmMzYzBjNGYzNDZhZDJlMzg3OTM3MWE5YzgwNWU1OWI5ZjJjZDJjYzJhNDA4OTRmIjoiIjoiIjoiIjoiIjoiNjJlZjdhNDMxMjg4MjUyZTBkNzM2YzFkNGUzNmNjOWFjMzcxMDdkY2QwZDBlOTcxYTIyNDQ0YTRhZGFlNzNhNDFlZmYwYjExYzg2MjVlMTE4ZGJjOTIyNjE0MmZkMGE2YWExMGFjOWIxOTA5MTliZGE0NGU3MjQ4ZDZjODg4NzQ2MTJhYmQ3N2ZiMzcxNmVhNTE1YTJkNTYzMjM3YzQ0NmUyYTI4MmU3YzNiMGEzYWVmMjdkMzQyN2NjN2QwYTdkMzg3MTQ2NTljMzQwMWRiYzkxZDM1OTUxNTkzMThlYmNhMDFhZTdkN2ZkMWM4OWY2YWQ2YjYwNDE3M2IwYzc0NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIwNWFjOWZjNGM2MmEwMmUzZjkwODQwZGE1NjE2MjE4YzZkZTU3NDNkNjZiOGUwZmJmODMzNzU5YzU5MjhiNTNkMmI4OWExNzkwNDkyMmVkOGYwMTdhNjMwNDQ4NDg1NDUyNzkxMTI2YjhiNTJlZTFmZDkzOTJhMGExM2UwMDgzYmVkNDE4NmRjNjQ5YjczOTYwN2FjNzBlYzhkY2VjZjliIjoiIjoiNDNiYWMxM2JhZTcxNTA5MmNmN2ViMjgwYTJlMTBhOTYyZmFmNzIzM2M0MTQxMmY2OWJjNzRhMzVhNTg0ZTU0YyI6IjNmMmZlZDRiNjhkNTA2ZWNlZmEyMWYzZjViYjkwN2JlYjBmMTdkYmMzMGY2ZmZiYmE1ZTU4NjE0MDhjNTNhMWUiOiI1MjkwMzBkZjUwZjQxMDk4NWZkZTA2OGRmODJiOTM1ZWMyM2Q4MzljYjRiMjY5NDE0YzBlZGU2Y2ZmZWE1YjY4IjoiMDJkZGZmNTE3M2RhMmZjZmZhMTAyMTViMDMwZDY2MGQ2MTE3OWU2MWVjYzIyNjA5YjExNTFhNzVmMWNiY2JiNDM2M2MzYTg5Mjk5YjRiNjNhY2E1ZTU4MWU3M2M4NjA0OTEwMTBhYTM1ZGUzMzM3Y2M2YzA5ZWJlYzhjOTFhNjI4NzU4NmYzYTc0ZDk2OTRiNDYyZDI3MjBlYTJlMTFiYmQwMmFmMzNhZGVmYjRhMTZlNmIzNzBmYTBlZmZkNTdkNjA3NTQ3YmRjZmJiNzgzMWY1NGRlNzA3M2FkMmE3ZGE5ODdhMDAxNmE4MmZhOTU4Nzc5YTE2ODY3NGI1NjUyNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIxYmVhMzI5NmYyNGU5MjQyYjk2ZWQwMDY0OGFjNjI1NTAwN2M5MWY3YzFhNTA4OGIyNDgyYzI4YzgzNDk0MmJmNzEwNzMxMzZhNWNjMWViNWI1ZmEwOWUxNzkwYTBiZWRkNzE0MzI5ZjNmYmVhMWRmOWQwYjBiMGQ4OGRmZTM3NzRiZWI2M2QwMTE5MzU5MjNkMDQ4ZTUyMWI3MTBkYzZmIjoiIjoiNGVmODcyZmQyMTFhNDI2ZWExMDg1YWIzOWViMjIwY2M2OThmZGZlYWJlNDliODgzNWQ2MjBhYjc4ODVkZTdhNCI6ImQ3NGQxNjY5ZTg5ODc1ODUyZDljY2JmMTFjMjBmZTNjMTNhNjIxZWJjYjNmN2VkZWVhMzlhMmIzMzc5ZmRjZjUiOiIwYzhhYTY3Y2EzMTBiZDhlNThjMTZhYmEzNTg4MGY3NDcyNjZkYmY2MjRlODhlYzhmOWVlOWJlNWQwOGZkZWIxIjoiY2U5NWI5OGYxM2FkY2RmN2EzMmFhMzQ3MDlkNmUwMmY2NThhZTQ5OGQyYWIwMWNlOTIwZjY5ZTdlNDJjNGJlMWQwMDVhY2YwY2E2YjE3ODkxZGZhZmM2MjBkZDRjZDM4OTRmODQ5MmE1Yzg0NjA4OWI5YjQ1MjQ4M2ViMGI5MWYzNjQ5ZWMwYjZmOThkMWFhYWJjMmU0MmNkMzljMmIyNTA4MWI4NWFiNTBjYjcyMzAwN2EwZmQ4MzU1MGYzMmMyMTBiN2M0MTUwYjVhNmJiM2IwYzllM2M5NzFhMDlkNDNhY2I0OGU0MTBhNzdmODI0Yjk1NzA5MmFhOGVmOThiYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJhN2VhNDQ5YjQ5ZGI0ODYwMWZjM2EzZDVkNzcwODFmYWIwOTJiOGQ0MjBlZDFiMjY2ZjcwNGY5NDM1MmRkNzI2ZDExYTE1OWI2MGFmOGQyMGEwZTM3ZDI3ZTZjNzRhYTM1MDkxNmFiNDdlOGNiNWRjODQzZjlmYmE4MDYzOTEwMzcxMWY4NmJlOGUzYWE5NGY4YTY0YTNmZTBlNmU1YjM1IjoiIjoiZTJiYjY3NjgxMjA1NTVlN2I5ZTBkNTczNTM3YTgyZjhmMzJmNTQ1NjBlMTA1MGI2YWJiMTU4OGZiMzQ0MWU2NiI6ImE1MGNlYzlkMWVjZGRiMmMxNjNkMjQwMTllODFjMzFhMmIzNTBjY2QzYWQ4MTgxZmQzMWJiOGQxZjY0ZmE1MGUiOiI1OTFkYmJkNDhiNTFhYmNlZDY3ZjljNjI2OWNmMDEzM2NkM2RjYmI1Y2ZhZmNiNmVmNzU4NTY5YzU1NWE1NzczIjoiMGE0NjRhYmNjODY4NTE1ODM3MmQ1NDQ2MzViOTUzZmNiMWQzODIxYzMwYWFhOTM5ODJmOWI3ODg5MzVmMDBmODgxMTVhYWQ2MWQ1Y2VlMDAzYjNkMWNiNTBmM2U5NjFhNTAxZTJkZDBmYzdlMTcyNDc3OGIxODRhNGJkZjlmNjRlMTEwZGRhNzQ0NmU1NTQ0YTMwYmQ0OWE0MDBlYTFhNTQxMTgwMGUxZWRmZWVhMzQ5MzIzNjE4YWZjNWRjNTc4MmRjNGI3MWQyZGE0ZDZhNDc4NWY4ZGQzNDZmZWI5Yzg3NDBmZmQyNmJmNjQ0ZTNlNDMyM2ZmMjRjMzBiOWYxMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIxNDY4M2VjNTA4YTI5ZDc4MTJlMGYwNGEzZTlkODc4OTcwMDBkYzA3YjRmYmNmZGE1OGViN2NkYWJjNDkyZTU4YjIyNDNlNzQ0ZWI5ODBiM2VjZTI1Y2U3NjM4M2ZkNDYxODU5MGUwZWY0ZWUyYmRhZTQ2MmY3NmQ5MzI0YjMwMDI1NTlmNzRjMzcwY2ZjY2Y5NmE1NzFkNjk1NTcwM2E3IjoiIjoiOWVhM2NjY2ExZThkNzkxZDIyZmNkYTYyMWZjNGQ1MWI4ODJkZjMyZDk0ZWE4ZjIwZWU0NDkzMTNlNjkwOWI3OCI6IjE2MzY2YTU3OGI1ZWE0ZDBjYjU0Nzc5MGVmNWI0ZmQ0NWQ3Y2Q4NDViYzhhN2M0NWU5OTQxOWM4NzM3ZGViYjQiOiJhNjhjYWEyOWE1M2YxYmE4NTdlNDg0ZDA5NTgwNWRjMzE5ZmU2OTYzZTRjNGRhYWYzNTVmNzIyZWJhNzQ2YjkyIjoiYzRlNzUzMmVlODE2Nzg5YzJkM2RhOWZmOWY0YjM3MTM5YTg1MTVkYmY4ZjllMWQwYmYwMGMxMmFkZGQ3OWViYmQ3NjIzNmY3NWYyYWE3MDVhMDlmNzk1NTAzOGViZmYwZDU2NjkxMWM1ZWExMzIxNGUyYzJlZWI0NmQyM2FkODZhMzNiNjBmN2I5NDQ4ZDYzZWVjM2UxZDU5ZjQ4YjM5NTUyODU3NDQ3ZGM1ZDc5NDQ2NjdhMjMwZTNkYmZhMzBjYTMyMmY2ZWFjYWY3NTM2YTI4NjcwNmE2MjdjNTA4M2MzMmRlMDY1OGI5MDczODU3YzMwZmIxZDg2ZWI4YWQxYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJmYTI2MWZiMjMwZTI4MjI0NTg1MzJjYTJkNWMzOTc1ODc1MGU2ODE5YTZmY2ViZWYxMDU3OWJhOTk1MDk2OTU5NTY0ZTFjOWZiY2IxMjg3OGRmMmJkNDkyMDJjYmY4MjFiZjdkZTI5ZTk5ZTdmMGUxYjlmOTZmM2IxOTAyZmI0MDQ5YzhjNjIzNGQyMGRlODMxNmViZTY2ZDk3NzI1NDU3IjoiIjoiOGI3MzI2NjIxZjZhZmJkNDRhNzI2ZGU0OGQwM2JjYzUzMzFmNzMwNjAyNmMyMjllYTk1MjM0OTdmYmVhYTg4ZCI6IjMzYjAwYjMxNjIzZDYxNjBjNGM2NzQwMzYzYTk2NDgxYmUxNGIxOWJjNDdiZTk1NjQxMjI3Mjg0YzM2NjkyMmEiOiIyZDgxMmM4MjAzNTc1NzkwYWQ2YjZmMmVkOTFhNDlkNTc0NjBkZTc3OWEzZTg4MWJlZjNiZTEyZTg3NjZkYzkxIjoiNTU3NGUwYjRlZmMxN2U4Y2UxMzZlNTkyYmVhYmZlMzI1NTEwNzJiZGRkNzQwOTI5ZTY5ODQ2N2I0MGIzOTkxZjAyOGEyMmM3NjBmNzAzNDg1M2NjNTMwMDdlMzc5M2UzYzRhNjAwZDllOWQ5NDUyOGY4ZGMwOWFlYmE4NjE0NmNkZGUyYjdmNzEyNTVhZTBlZmM1MjliNDliZTIyMDU5NzlkYmE2NTI1YmZlMTU1ZTg4MTllOGUyYWVlYWEyODU3MDQyNDJkYTkwYjRjNDUzNTEwMWNjNDdkOTRiMGUzODhhMWIyZTYzYWQwY2JlMTU4YjllMWJiYWU5Y2MwMDA3YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI2MWYxNDcxY2VkNTZhYTA0YzU3ZTFiNTEyMzA3ZDRjYjkyNDk3ZDk1OTJkN2U5ZTM1MzU2ZTk5ZDU4NWNhYjFiODQ3MTRlOTYwYzQwM2E0ZmFjMDZiMjgyOGNjNTY0ZDk3YmY5N2RiM2MxMDJlZGM4MTU5NmQ0NzU3MDQ1ZmU2YmRjMDA4ZjM1NzkyZmM2MjkwYjc3ZDg4OWMwOWMzM2E4IjoiIjoiNWI4YmRjNDFmNzZkOThjZmE3MWVkOTc2ZWEzOTk0NzA2Mzc1Yzg4NDFhZGI4YjZiM2I2NDE4ZTMxMzJlODgzMiI6Ijk0YzhhOGZkZjM4YTZjY2I4NTcxYzg5NDIwZDg5OWFkYWIxNjkyMTRiYjBkZmNkNDNhMDQ2MjJlMjg5OTM1YjIiOiI4YTRiNDZlMGE3YTU1OTA3MzY1ZjgyZDRhYjkzNzY1MDliZDQ0NzI4Y2FiOGNiYWZiMGRhOTAxMDEyYWQ4ZGNkIjoiOTMzZWIxNTlhNmFmNzQ1NWI2MGU0MDU4NmMwNjRmMDVmMTk3MGY1NjQyODFiMWViYzQ2NjI3MDFhYzFmMjk5ZTRlYjkwOGM0YWZjYjJlMDY1MTkxMjgxYWI1NzZmNjg0YWVmZWRkNjkwNGJhZDA0ZDk2YmQ5M2MwNTE2YzYyYTQ5NmMzMDczYTBjZGEwNjc2YTExY2MwODg2NmIwY2M3NGY2MmNiOWQzZGI0ODY3M2IyYzNmYmVhZGE2OWY5MjJiNGI3OTVjY2JhMjJkZjEyZWY3MTI1OTA5MzgxZjdkNjgxZjZiOWNhYmEwMmZiOTEzYzU0MzdiOThjMDQwYzU3NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJhMWQ1YmI3ZDcwNjIxZGVlNmI2NjhiMjhjNTZkNTYxMGMyZjhjZWQzMDI4NGNjM2UwZTQ4ZGUzMzFhZjA1MDYyODhhNDllM2U1NGM1ZWE1NGM5OGI5NWRlODFiY2M4MDdiNGUyNDI2ZTk4ZjZlZWQ5N2E2Y2RmNjkwYTg5ZWUxMDllODRjM2RjYTE2Yzg4M2MyNmZhNGFjNjcxNjM4ZDhkIjoiIjoiNWJkMWUwODZlZDIyOGNmZDhiNTVjMTczMWZlYTQwYzNhNjNkMDIyNTk5Y2EyZGE0YmIyMzExOGY0ODIxYmE2MiI6ImI3NTRiNTNhYzIyNmU4ZWJlNDdhM2QzMTQ5NmVjODIyZGUwNmZjYTJlN2VmNWJmMWRlYzZjODNkMDUzNjhlYzMiOiJmYTdlNzZiMjgwNWQ5MGIzZDg5ZmZmNTQ1MDEwZDg0ZjY3YWEzYTJjOWViMmJhMjMyZTc1ZjRkNTMyNjdkYWMzIjoiZGY2YjI0NjA2ODhmYTUzN2RmM2RkZmU1NTc1ZmNhNWViOGFiYWQ1NmNiYzRlNWE2MThhMmI0YTdkYWY2ZTIxNWMzYTQ5Nzk3NGM1MDJmOWQwZWMzNWRlM2ZjMmVhNWQ0ZjEwZGU5YjJhZWU2NmRjYzdlN2FlNjM1Nzk4MzA5NTk1OWI4MTdmMDM4M2UzMDMwNzcxYmQyZWQ5NzQwNmFjZjc4YTFhNGE1ZjMwZmEwOTkyMjg5YzkyMDJlNjllM2ViMWVhYmUyMjdjMTE0MDlmZjQzMGY2ZGZjYTFhOTIzYThiMTdiYzRiODdlOTA4MDA3ZjVlOTc1OWM0MTQ4MmIwMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI2OGYyMWQxNDUyNWQ1NjIzM2M3ZTI2MzQ4MmQzNDRjMzg4YTg0MDEwM2E3N2ZiMjBhYzYwY2U0NjNjYWJkYzc5NTlmYTgwYWU1NzBmM2UwYzYwYWM3ZTI1NzhjZWMzY2I3NTg0YjQxNjY1MzA0NDJmMDZlMjQxZGQ5MDRmNTYyMTY3ZTJmZGFlMzI0N2FiODUzYTRhOWQ0ODg0YTVmYTQ2IjoiIjoiZjZhNTQ4MmYxMzkwNDVjNTM4OWM5MjQ2ZDc3MmM3ODJjNGViZjc5YzNhODRiNWNmNzc5ZjQ1OGE2OWE1MjkxNCI6IjlkMzdiMWNlOTlmODA3OTk5M2RkZjBiZDU0YmFiMjE4MDE2Njg1YjIyNjU1YTY3OGNlNDMwMDEwNWYzYTQ1YjciOiI0Yzk3YzY3MDI2ZmY0M2MyZWU3MzBlN2IyY2U4Y2NlNDc5NGZkMDU4OGRlYjE2MTg1ZmE2NzkyZGRkMGQ0NmRlIjoiZTVmODg3NGJlMGE4MzQ1YWFiZjJmODI5YTdjMDZiYjQwZTYwODY5NTA4YzJiZGVmMDcxZDczNjkyYzAyNjVmNmE1YmY5Y2E2Y2Y0N2Q3NWNiZDlkZjg4YjljYjIzNmNkZmNlMzdkMmZkNDkxM2YxNzdkYmQ0MTg4N2RhZTExNmVkZmJkYWQ0ZmQ2ZTRjMWE1MWFhZDlmOWQ2YWZlN2ZjYWZjZWQ0NWE0OTEzZDc0MmE3ZWMwMGZkNjE3MGQ2M2E2OGY5ODZkOGMyMzU3NzY1ZTRkMzg4MzVkM2ZlYTMwMWFmYWI0M2E1MGJkOWVkZDJkZWM2YTk3OTczMmIyNTI5MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI3OTg4MTQ2Y2JmOTU5OGQ3NGNmODhkYzMxNGFmNmIyNWMzZjdkZTk2YWU5ODkyZmIwNzU2MzE4Y2VhMDE5ODdlMjgwYmMxYWU5YmZkZjhhNzNjMmRmMDdiODJhMzJjOWMyYmJjNjA3MDg1MjMyZTVlMTJjY2Y3YzBjMTlhNWRjODBlNDVlYjRiM2Q0YTE0N2ZlOTQxZmE2YzEzMzMzNDc0IjoiIjoiZjNmNWMxYmI1ZGE1OTI1Mjg2MTc1M2M0OTgwYzIzZjcyYmUxNzMyZjg5OWZkZWE3MTgzYjVjMDI0Yzg1OGExMiI6IjQ0ZDBjZmM0ZjU2YWIzOGZhNDY1YTY1OTE1MWIzNDYxYjY1YjI0NjJkMWFkNmIzNDYzYjVjZjk2YWQ5ZGM1NzciOiIzNGZiOWEzY2RhY2M4MzRmZjYyNDE0NzRjNGY2ZTczZWQ2ZjVkOWVhMDMzN2FiMmI3NDY4ZjAxYWQ4YTI2ZTkzIjoiNGNhZWM5ZTc2MGM0ZDQ2OGU0NzYxM2ZlNTBkZTRhMzY2YWUyMGJhNzY3OTM3NDRhNGUxNDQzM2VhNGRlNzlkYzE4ODYwMWViODZjODAzYjA5NDY0MWFiMjMzN2I5OWQ0NTlkMzdkZWNjN2QyNzQ3MzA1N2JlNDViYTg0ODg2OGVlMGZiNWYxY2YzMDNkMmZjZDBiM2UwYzM2ZjY1YTY1ZjgxYjNmZWU4Nzc4YTFmMjIzMDJlMjVkZmUzNGU2ZDU4N2ZhODg2NGU2MjExMjE4ODBmN2NkNTVmMzUwNTMxYzRjZTA1MzAwOTllZWMyZDAwNTk3MDZkY2Q2NTc3MDhkOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIxYzk3NGM5NTNmYTJhMDU3YzlmYzk0MDlhNjg0M2Y2ZjgzOWFhNTQ0YmNhNGZhMTFlNDhhZmQ3NzkzMWQ0NjU2ZWQ3YzA4Mjg1NDY0YWY3YTVkYmRjMTBiOTQ0YTEyNzA3ODE0NmFkMTM1YWNiODM2MzYwZDM2YWZjNTA2NTNkY2MzNmMyMTY2MmRhMmE2ZjZhZTA1MjIyZTc1ZjM0MDAwIjoiIjoiMjYzYzQ5ODRjMjM4ZGVkMzMzYzg2NDcyODY2MzUzODE3Mzc5NTAyMTU3MTcyY2ZhNTEzNzFkODJiMWVmZDdiNSI6Ijc5YjU5MTUyOWY5YTI2YTBkN2M4ZjhmZDY0ZTM1NGIwYzEzNGVmMWY3NTdlNDNmOTQ2M2IzZGJiN2EzZGExYWIiOiI3ZDhmNzIwNGIwYjU0MDFkZGNlOWU4OGRjZjVmYWNiOWE0NDY2MGE5ZjVmMWM4NjI3NDhlNzI2OWMyOWY3OTY0IjoiNzJlMmNhMjU3YjllZGFmNTliNTBlMDVhMTQ0ZjU2ZmI1MTc4MzJmYjlhZDM0ODliMWU2NjRlM2Q1NDEyY2JmNmIyODgzZTg5MTcwM2IyZTczYWZmOWFiNTZkYTEwMDlmY2RlZjAxMGFiNGNkYWI5OTY3OTVjOGY3YzQ3ZmIxMTkyYmIxNjAzNTM5OTdhZDM5ZDdkNWZkMGUyZWZjOTEwM2E3YzNmMTU4MjQ2YWZkNTNmZTUzY2E2NzgyZjgwOTY5OGVmNWYxZjBkODU1MzY3ODBhM2ZkNmE4YmFmYTQ3NTg5MWMwOTIxMzA4OGJkMWEzZGMxNjkyNTdjMzRhNTE3YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiNTYyMTZkNzE5ODRhNzcxNTQ1NjkxMjJjNzc3Y2U1N2UxZDEwMWE2MDI1YjI4MTYzYTI1OTcxZDM5YzFjNWQwZjVjZDE0OGJhN2U1NGY0OTc1YWM4ZTNlMGY5YjVkMDZhMzU4MGY4Y2E5NzQ2MjZjNzcyNTljNmUzNzM4M2NiODE1MGI0ZDBhYjBiMzBlMzc3YmVkMGRjOWQxZmYxYTFiZiI6IiI6IjE1NjMzZTNhNjJiMjE1OTRkNDlkM2QyNmM0YzM1MDlmOTYwMTFkNGRiYjlkNDhiYmJlYTFiNjFjNDUzZjZhYmUiOiI2MDY4ZWFjYTg1YzE0MTY1YjEwMWJiM2U4YzM4N2M0MWQzZjI5ODkxOGM3ZjNkYTJhMjg3ODZhYjA3MzhhNmZjIjoiZTM0ZjkyZDJiNmFlZWVlYTRmZjQ5YmZlN2U0YjFmNDYyZWFiYjg1M2YwZTg2ZmJhZTBlOGIzZDUxNDA5Y2U0OSI6IjU4N2ZkYjg1NmFiYzE5ZWRlOTA3ODc5N2VjYjQ0MDk5ZTA3YWFkY2Q4M2FjZGNiMmIwOTA2MDFkNjUzZjRhMTRjNjhhYjJlYmRkYTYzNTc4YzU2MzNhODI1YmFlNGMwYzgxOGY4OWFhYzU4ZDMwZmQ3YjBiNWQ0NTlhMGYzZDg2ZmNhZDc4ZjRiYjE0ZGZmZjA4YWQ4MWU0ZWE5ZjQ4N2NiNDI2ZTkxZDZlODBkZmVkNDM2YmEzOGZjZThkNmYyMWNhMjE1MWM5MmRkNWMzMjNiMDc3ZDYxMzljNjYzOTU1NThmMDUzNzAyNmM0YTAyOGFmZmEyNzFlZjRlN2VhMjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjgzZWI0OGJlZGMxZTkyOTQ4NjZhYjhlNTMyMmVmODNmNmYyNzFmODE4OGU4ZmRhYmU1ODE3Nzg4YmQzMTU3MGRkNmVkOTBiYzY5MjIzN2YxMzI0NDFlZGU4NTdhNjYyOWE0ZTVlMTI3Zjk5MmJkNWNhNzllZTU2YmI4YTliY2NmNzRjMjE4MTRiZmFmOTdmZmQwNTIyMTFlODAyZTEyZTQiOiIiOiI4NDEzNmU0MDNkOWVkN2Y0NTE1YzE4ODIxM2FiY2ZhY2EzNTcxNWZhNTVkZTZkNzM0YWVjNjNjNDYwNmE2OGYxIjoiZmU5ZDhlZjI2ZTJkMmU5NGI5OTk0MzE0ODM5MmIyYjMzYTU4MWI0Yjk3YThkN2EwZWNkNDE2NjBhNjFkZDEwYiI6IjU5NGRhZDY0MjE4M2NlMmNkYzk0OTRkNmJjYjM1OGUwZTdiNzY3YzVhMGZhMzNlNDU2OTcxYjg3NTRhOWFiZDUiOiI4NjcxNWQ0M2JhOTVmYmJjYTliNzE5M2VhOTc3YTgyMGY0YjYxYmExYjdlM2I4ZDE2MWI2YzUxYjA5ZGZkNTA0MGQ5NGMwNDMzOGIxNGQ5N2VkMjVhZjU3NzE4NmIzNmFlNzI1MWE0ODZjOGEyZDI0YTM1ZTg0YTk1Yzg5ZDY2OWQ0OWUzMDdiNGEzNjhiNzIxNjQxMzVhYzU0ZDAyMGE5NzBhMTgwZGZiZWQxMzVkMmM4NmYwMTI3MDg0NmQ1MzAxYmQ3M2RiMmM0MzFhOGFhMTBhMGEzZDAzZDE0NmU1ZmFmYjlhMmFhMGI0ZWZjODBlZGFiMDZmZjNiNTMyMjM2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDAsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJiYTJjOTQyMDNkYWIyZTY0OTlkOGM1MGRjYTdiNWMzNGE2YjQ3NjQ4MzRmOTgxNjYzMWFhMjFiOWY5YzM3MzYxNjdkYjEzM2JkZWZiMjVlMzk1MDg1YmNlZWU1YTBhZmNmYTg5ODRkMTZkMzUzMDJjZGEzNWEzYTM1NWFiOTI0MmVjOTZmZWMwNjUyZDM5MjgyZDRhMGFiZjBhODBkZjg3IjoiIjoiYjZmZWQxMDI1NWEzZmVhNjc3MmFlMWFlNmQ5ZjZjYmI5YmZhYTM0ODA0ZTU4YTViNzg2ZjliYzYwYjM0OGNjZCI6IjQ0NWUwNzIyNDRlZGM3MTZkMzUyOGYwZTBhMjBmZjBjZDhmODE5YzBkMDMxNzM2YzhkYTEyMjc0OGYyNGQ2YzYiOiIxZjg1NmU0MDNjNGZhMDM1YmFjOWFhODFhMjBlMzQ3YzdkOGIyMTNhYWI2OTlkNjlkOWQ2MTg2YTA2YWM0NWMxIjoiNzlmMzNmYzM2YjNiNDdkOWFjODA1YmRiYmU2OTk5MDlhOGQwYmViNjg5YThiMjcyM2MyOTFiZDViZjdmM2NlNjEzNDNkNDcyMmExNGU0YWRkMzYzMTJkYmIwNTk0OTEwYzg4MjhhZmYxYWJjMTU5OTE1ZDQ5ODEwNmY5ZmZiMzExNDc0NzhkOGM5ZWY3NWQxNTM2YmE1MDM2NTA2YjMxM2Y2ZTg1MDMzZjhmNmZlYTJhNGRlODE3Yzg2N2E1OTM3OGM1M2M3MGEyZjEwODI3NWRhZWRkNDE1YzA1YjYxYzRmZDVkNDhjNTRiZTlhZGI5ZGVhNmM0MGEyZWM5OWVlMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAwLCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMGRiNGM1MTQ5MmRiNGZlOTczYjRiYjFjNTJhMWU4NzNiNThmYzZiYjM3YTNhNGJmYzI1MmIwM2I5OTQ0OTVkMWEyYTM5MDBmMTY5YmJhM2Y3OGE0MjUyNmM3MDBkZTYyMjlkNWFhYjM1Njg3NjQ0N2UzYTIwZDgxYzdlM2ZjNjk3NWUyYjk4NDE4MGE5MTQ5MzA0NDQ0Mjk5OWUxY2EzYSI6IiI6IjQwYjM0MTgzYjRlNzJjZGZmNTk1MmIzMTdiM2Q0NTk0M2QwZmRjZmEwNTI3ZjM1NjMwNTVmN2M3M2FlOGY4OTIiOiJkYzk0MjIwYzk5ZmZiNTk1YzdjNGQ2ZGU4ZGU1YTZiYjRiMzg4NDcxNjllMjRhNTU3ZWY2ZDg3OWFkODQxNDlkIjoiYjIzNzY2MjZmZDJmNTIxOGIzZWQ0YTU2MDliNDNhYTI0ZDM3MWNkMjE3NmVhMDE3YzJiOTljZjg2ODA2MDAyMSI6ImYwYmQ2YmM0YzUwNmQ5NDI3YTA5MzUyZDljMTk3MGIxNDYzNjA3MzI4NDFhNjMyM2Y0Y2I2MDJjODdkZWRmYjVmZjdlNjk2NGI5MTQ0OTMzYWYzYzVjODMwMTdjY2Q2YTk0YmRjYTQ2N2E1MDQ1NjRhYWE3YjQ1MjU5MWExNmZmNmExZTdlOTRkZGM5OGY5YTU4MDE2Y2RjYjhjYWFlZDZjODA2NzFiYTQ4Y2M4MWE4MzJkMzQxMDkzZGRhMWQ0ZTUwMDFlYzZiZjY2MzQ4YjIxZTM2OTJhMTNkZjkyNTM4YWQ1NzJiYjIwMjM4MjIwNzJmYzk1Zjk1OTAyOTNmZmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjU5Mzg0NWYwYWRmZWZmYTdjMTY5ZjhhNjEwMTQ3YWU4YTA4YzAwNzJmYzBjMTRjMzk3N2QzZGUwZDAwYjU1YWY5ZTBlYjI1MDczNDJlZTAxYzAyYmVhZGVlN2QwNzdiZGFlZmU1OTE2OTdlYWI2NzhjNTJlMjAwMTNhYTQyNGI5NWNmZDIxN2IyNTk3NTdmYmUxNzMzNTU2M2Y1YjU3MDYiOiIiOiJjYmI1YmUwZWY5YmYwNTU1ZWU1ODk1NWM0ZDk3MWZiOWJhYTZkNjA3MGMzZjcyNDRhNGViODhiNDhmMDc5M2JmIjoiNmRkODc4Mzk0YWJkYzA0MDIxNDZiYTA3MDA1MzI3YzU1ZjRkODIxYmZlYmNhMDhkMDRlNjY4MjRlMzc2MGFiNCI6ImJhODZhNjkxZDZjYmY0NTJiMWUyZmQxZGZiNWQzMWVmOWVhNWI4YmU5MmM0OTg4ZGM1ZjU2MDczM2IzNzFmNjkiOiIwMDczNWNiZmFmYWM1ZGY4MmU1Y2IyOGZjNjE5YjAxZTJiYTk1NzFkYzAwMjNkMjZmMDljMzdmYjM3ZDBlODA5MDY2MTY1YTk3ZTUzMmJmODZmYTdkMTQ4MDc4ZTg2NWZlMWEwOWUyN2E2ODg5YmUxNTMzYjQ1OWNkOWNkMjI5NDk0YjVjZjRkMmFiZjI4YzM4MTgwMjc4ZDQ3MjgxZjEzODIwMjc2ZWM4NWVmZmI4ZDQ1Mjg0ZWI5ZWVmNWQxNzlhYjQ4ODAwMjNhYjJiZDA4ZWUzZjc2NmY5OTAyODZiZjMyNDMwYzA0MmY1NTIxYmJmZDBjN2VlMDllMjI1NGQ3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImZhMGVlMWZlMzljN2MzOTBhYTk0MTU5ZDBkZTk3NTY0MzQyYjU5MTc3N2YzZTVmNmE0YmEyYWVhMzQyZWM4NDBkZDA4MjA2NTVjYjJmZmRiMGRhOWU5MzEwYTY3YzllNWUwNjI5YjZkNzk3NWRkZmE5NmEzOTk2NDg3NDBlNjBmMWY5NTU3ZGM1OGIzZDc0MTVmOWJhOWQ0ZGJiNTAxZjYiOiJmMmU1OGZlNjBhM2FmYzU5ZGFkMzc1OTU0MTVmZmQzMThjY2Y2OWQ2Nzc4MGY2ZmEwNzk3ZGM5YWE0M2UxNDRjIjoiIjoiIjoiIjoiZjkyZDRjZjk5YTUzNWIyMDIyMmE1MmE2OGRiMDRjNWFmNmY1ZmZjN2I2NmE0NzNhMzdhMjU2YmQ4ZDI5OGY5YjRhYTRhZjdlOGQxODFlMDIzNjc5MDNmOTNiZGI3NDRjNmMyZjNmMzQ3MjYyNmI0MGNlOWJkNmE3MGU3YjhmOTM5OTJhMTZhNzZmYWI2YjVmMTYyNTY4ZTA4ZWU2YzNlODA0YWVmZDk1MmRkZDNhY2I3OTFjNTBmMmFkNjllOWEwNDAyOGEwNmE5YzAxZDNhNjJhY2EyYWFmNmVmZTY5ZWQ5N2EwMTYyMTNhMmRkNjQyYjQ4ODY3NjQwNzJkOWNiZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJjZmY3MmYzNDUxMTUzNzZhNTdmNGRiOGE1YzlmNjQwNTNlNzM3OTE3MWE1YTFlODFlODJhYWQzNDQ4ZDE3ZDQ0ZDFlOTcxZWM3OTVkMDk4YjNkYWUxNGZmY2JlZWNmZDk0NWVjODBmMGMwMGNhZDBmZjBiNzYxNmQyYTkzMGFmM2Y1Y2YyM2NkNjFiZTdmYmY3YzY1YmUwMDMxZTkzZTM4IjoiNmVjMGM3OThjMjQwZjIyNzQwY2FkN2UyN2I0MWY1ZTQyZGNjYWY2NmRlZjNiN2YzNDFjNGQ4MjcyOTRmODNjOSI6IiI6IiI6IiI6IjE3YTc5MDFlMjU1MGRlMDg4ZjQ3MjUxOGQzNzdjYzRjYzY5NzlmNGE2NGY0OTc1Yzc0MzQ0MjE1ZTQ4MDdhMTIzNGVlZmVmOTlmNjRjYjhhYmMzZmI4NjIwOWY2ZmM3ZGRkMDNlOTRmODM3NDZjNWFiZTUzNjBjZGRlNGYyNTI1Y2NmNzE2N2U2ZjBiZWZhZTA1YjM4ZmQ2MDg5YTJhYjgzNzE5ODc0Y2U4ZjY3MDQ4MGQ1ZjNlZDliZjQwNTM4YTE1YWFhZDExMmRiMTYxOGE1OGIxMDY4N2I2ODg3NWYwMGYxMzlhNzJiZGYwNDNmNzM2ZTRhMzIwYzA2ZWZkMmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYjcwOTliMDZmYzdhOGE3NGM1ODIxOTcyOWRiNmIwZjc4MGQ3YjRmYTMwN2JjM2QzZjlmMjJiZmI3NjM1OTZhM2I4NzcyMDU5YTEzNWE2YjYxZGE3MmYzNzU0MTFkZTI2OWFlYzRmNTZlYzVlOTZmYmQ5NjA0OGI5YTYzYWM4ZDA0N2FlZGJiZWVhNzcxMmUyNDExMzNiMWEzNTdlY2ZjNCI6IjJhYzFiZmIyNGUwYjhjNmFjMjgwM2U4OTI2MTgyMmI3ZjcyYTAzMjBkZjJiMTk5MTcxYjc5YmNiZGI0MGI3MTkiOiIiOiIiOiIiOiIwZTFmMmJmZWY3NzhmNWU1YmU2NzFlY2I0OTcxNjI0ZWM3ODRlZDI3MzJhYmM0ZmJiOThhOGI0ODJmYjY4NzM3ZGY5MWZkMTVhY2ZhZDI5NTE0MDNhYzc3YzVjYTNlZGZmYzFlMDMzOThhZTZjZjZhYzI0YTkxNjc4ZGI1YzcyOTBhYmMzZmEwMDFhYTAyZDUwMzk5MzI2Zjg1ZDJiODk0MjE5OWExNTc1ZjY3NDYzNjQ3NDBhNTkxMDU1MmM2Mzk4MDRkNzUzMGMwZDQxMzM5MzQ1YTU4ZmYwMDgwZWNjZjE3MTE4OTUxOTJhMzgxN2E4ZGMzZjAwZjI4Y2MxMGNjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjdiYTAyYTczNGM4NzQ0YjE1ZWY4YjQwNzRmZTYzOWIzMmU0NDMxNzYyYWI1YjdjZDRkNWRmNjc1ZWE5MDY3MmI4YTQyNGYzMjEwODYwN2M4ZjFmNDVkOTdmNTAwZWUxMmQ4ZjAyYjU5YjZhM2RkMjc2YmM2OWNiYTY4ZWZjZjExYWI4M2VhZDEzOTdhZmQ5ODQxNzg2YmQxYmI1ZGE5N2EiOiIzYWQ2Mjc0MzNmNDY1MTg3YzQ4MTQxZTMwYzI2NzgxMDYwOTFlN2E2ODAyMjlhNTM0Yjg1MWI4ZDQ2ZmViOTU3IjoiIjoiIjoiIjoiMWZiOTExODZiYTRiNDQ1OWQ5OTRiNGI5ZjRjYTI1MmM3YmU2Mjk0ZDZjZGI1ZmU1NmY4ZmY3ODRkNGIxOTBhMWM2NDU2ZTBhNDEyMjNiYmJkZjgzZWQ4ZTdjZmJmYTc2NWQ5ZDhiYzdlYTVmNGQ3OWVhN2VjY2I0OTI4MDgxYTIxZGU0Y2NhMzY2MjBkNjI2N2Y1NWQ5YTM1MmI3NmZjMGE1NzM3NTg4NDExMmMzMWY2NWZmMjhlNzZkMzE1Njk4YzI5ZTZjNGMwNWNiNThiMGEwN2FlNjYxNDNiNGFiYzc4YjlkMjVjNzhiNDEyMWUxZTQ1YmVmMWE2YzE3OTNlMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI5YTg4NjVkZmUwNTNhZTc3Y2I2YTkzNjViODhmMzRlZWMxN2VhNWNiZmIwYjFmMDRkMTQ1OWU3ZmE5YzRmM2NiMTgwYzBhNzRkYTNlYzQ2NGRmMTFmYWMxNzJkMWM2MzI3NWI5NTEwOGVmZjFmYWJlODM2MTNlMWM0ZGU1NzVlNzJhNWNkYzRiYjkzMTFkZDAwNmY5NzFhMDUyMzg2NjkyIjoiMzM2MzcyZWM4MmQwZDY4YmVmYWQ4MzY5MTk2NmVmNmZmYzY1MTA1Mzg4ZWIyZDZlZWQ4MjZjMjI4NTAzN2M3NyI6IiI6IiI6IiI6IjNjNjgzZjZkNGY4ZjVhNDAxOGQwMTYzM2RmZWU3NDI2NmFhYTY4ZWQ2ZmM2NDllODFiNjRkZmRmNWY3NWU3NWQ1YzA1OGQ2NmNmNWZkMDFhNGYxNDNhNmZmNjk1NTE3YTRhNDNiZDNhZGZkMWZiMmMyOGJhOWE0MTA2MzE0MGJlZGJmZmRiNGQyMWIxYWNlMTU1MGQ1OTIwOWVjNjFmMWUyZGJhY2IyYTkxMTZhNzljYjE0MTBiZjJkZWNhNTIxODA4MGFhY2Q5YzY4ZTFkNjU1NzcyMWE4OTEzZTIzZjYxN2UzMGYyZTU5NGY2MTI2N2Q1ZWQ4MTQ2NGVlNzMwYjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMjJjMWFmMmYyYTRjODg1ZjA2OTg4NTY3ZGE5ZmM5MGYzNGY4MGY2ZGQ1MTAxYzI4MWJlZWY0OTdhNmExYjJmODNmYWZkZWNmNzlhNDE3NDgwMWYxMzMxMzE2MjkwMzdiZjk1YTBlNGJkMjRmMGUyZTllNDQ0ZjUxMWI3NjMyODY4ZWFkMGQ1YmIzODQ2NzcxMjY0ZTAzZjhhYjhlZDA3NCI6IjgwMzI3ZGFjNDg2MTExYjhhOGIyYzhlODM4MWZiMmQ3MTNhNjc2OTVjMmU2NjBiMmIwZDRhZjY5NmNjM2UxZGUiOiIiOiIiOiIiOiI3N2E3ZmVhMmYzNWExODhmNmQxYmZkZDQ5YjU2OWQ4YzQ1ZTJkZDQzMWQzNWExOGM2ZjQzMmM3MjRmMWUzM2FlOTJjYjg5YTljZjkxNTE5ZTUwNzA1YTUzMTk5ZjViNTcyZGM4NWMxYWVmOGYyOGZiNTJkYzc5ODYyMjhmNjY5NTRkNTRlZGE4NGE4Njk2MmNmMjVjZjc2NWJkOTk0OTg3NjM0OTI5MWIxYWFlNWY4OGZjZjRiMzc2OTEyZDIwNWFkZDRmNTNiMjc3MGM2NTc5NDZjMGQ4MjQyODFmNDQxNTA5MTUzZjQ4MzU2ZDlkNDNmOGE5MjdlMDY5M2RiOGZjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImQwODQwZTNhOGQ2MjlkNWI4ODNkMzNlMDUzYTM0MWIyMWM2NzRlNjdlMTk5OWYwNjhjNDk3ZWNmYWFiZmQ2ZjYwNzFkZTcyNDRlY2IyZmRmN2FiMjdmMmQ4NGFhN2I3YTFkZDFhOGI1OTg1NmM0OWEzODhmNTk0YzVmNDJjYzJlNGE1NmIzY2NiOGE2NWU3MDY2ZTQ0YzEyZjQzNDRkNTAiOiI5MGQ2MDk1MjdmYWQ5NmZmZTY0YWIxNTM4NjAzNDZmM2QyMzdjODk0MDU1NWFlMTdiNDc4NDJkODJkM2IwOTQzIjoiIjoiIjoiIjoiN2FiMjhhOWIyZDNhZTk5OTE5NTU1M2U2NTUwY2NlZDRjMmRhY2NiZTdlYzlkY2JiMGQ0NjdmYWJiYTE4NWI3MjdmYmZkOTgzMDI0MmNkMDk4ZjRkYjNjZjRhODVlOGJmOGU4ZDU5NzRiNjJiMjg1NTA5MjJiMzJlZDViZmMxYTUyMmI2NjA1Y2Y5M2JmOGQ5MGJkZWMxYzViOWU1OWM2ZmMzN2E4MTdkNDM3MDY4YTg3MjU0YmUxZjdjNDYxOGFkYTQ2ZmJjM2EyZWZiMDJlNDQ1MjRlMjFkOTFiZTc1MzRjZjA1ZmJmZDg1ODMwNGI3MDZkNmE5MWVhMWNjNmFkNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIyZTJkZDU2ODY5MTA0NDkyNzY3YTU5Nzc4NjUyODMxOTE5ZTFjOGI5NzBmODRlODI0YWU0MTE2NTk3YTBhYjdmMDFjNDJhN2U5ODM2NDFkZTQ2YzgyZmQwOWI0ZjJmNzY3MzA2NTA3Y2QzY2E3ZWVjNjY3ZTY0MGQyNzBjZmJiMDMzMDYzZDk3NTIwYjZiN2UzOGZmM2NlYTBlNzlkMTJiIjoiYmNkOWUxNTA4ZmNjMjI4MjBhOGJlMDcxODBmZWE1MDQ1MzY3MzMzYjU2OWUxMTFiMDExY2Q1N2RjMTg1ODc2NSI6IiI6IiI6IiI6ImI5MTU3MjZjN2I4YzVkYzM5NzVmMWEzMzQ2ODRiOTczYWJmNmE5NDk1ZDkzMDA4OGNmNWQwNzE1NDhlNGZkMjlhNjdiNTVjYzU2MWVkNjk0OWFkMjgxNTBhOWZiNDMwN2MxZmE1Zjc4M2E3ZWE4NzJlOGQ3YzdlNjdmZjBjMjkwNjA4MWVlOTE1NzM3ZDgxM2MyNWJlNWMzMGI5NTJhMzZmMzkzZTZiYWE1NmFiMDFhZGMyYjQ3NzZhZDdiNWQwMzZhNTM2NTk4NzdjN2E0ZTUyMjBhODk3ZDZjMDc5OWFmMzdiZWVlZDkxMTczZmJlOWM2MTNjM2I2YjliYjI4ZTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiZDFhYWIwZjE2YmQ0N2E1Y2NkNjdjMjJlMDk0ZGFhMzczNWVhZTIxYWE1N2YwYmNkOWUwNTNkOWQwZDU0NWNiODE5OTMxMGRmZTFiMDEyNjViOGMwZDJiNDZkNmM3YzlmZjUwY2FiYWU0ZTA2MGYzOTcxMDk2Yjc4ZTU1MGNkYTI4MzdhMjZhNjkzZDkwNWRiMmQ5OTJkNTg5YjI2OGY0NCI6IjYyNWI0YjhmNGRlNzJlYTljYjZmNzA1NTYzMjJkYzJhMTlkNmIyYjMyZGU2MjNmNTU3ZTQxOWEwODRiYTYwZmQiOiIiOiIiOiIiOiI5ODdlMWZkZmUwMDRjNjE5Y2YxZTkwMzQ1NzY3MDdlY2NkODQ5NDAwZTE5Yzg3YTFmZWY1YjAxNzllYzUxYzQyYTJmOGM0NWQ3OTQyZDAwMjNhMDIzYzg5ZjE4OGIyNjM0MzYyNzAzOTg1Njk1MzY5ODYzMzIyZjU4NjE5YzUwYTczODVhMmRjOTFmYzc4Zjk0YjU5ZjAxMzFkYzJiNTZhMGQ3YzY5OWQ0MjcyODVkYTFjMTA0YjBhZDE3MzlkYTEwZDgwNzFjMjM5OTM3ODcwNDVkYzIxZjAwNzBlMWU5YWExNjU4ZmM4ZTNhZGQ3M2RhYzcyNjJlODBlMGFhMmVlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjQ0OTQ4MGVhYTEwMGFmZjZmNDhkYzYyODZhNWE4MWI5NzI4YjA4NDg2NGY3OGE5ZGE5OGY2MDZhMDBhNmE0MWZlNTNjNmM1YWMzZGE5ZjQ3MjYzODlhMDNmOTdiYjY0MDczYTZkNjRlMTk2NmFlMzI0Mzg4ZGMxMmMxNDU0NGU5ZGM1YWU0ZmNiMzMxZTk5ZDM1MGM0NTZmZjE2ZjlhYTAiOiI2YjhmZWRjMDg0ZDhlMjhkMzMzYWVmNmRiMzcwMmI2MzUxZjBkMjRlMzA5MDhjY2NiNjM3OTQyODI2NTU4ODZiIjoiIjoiIjoiIjoiYTA2OTEyZDM2MmRhN2ViMjU1OTg4NTdmNmQ2NTM0NGMzZTIzZWMzZGViODBjNmU0MzE1ODg0NWI5NWVhZWNhMjQxYzBiYmJkNjdhYzM4NWUyNDY5MzQ0NDQ1NWNjMWMyYzA4YzExMzRkOTU2YjhiYzkzYjI4YmU5YzJkMzMyMmIzZTA5MjUyOTc5ZGZiOGQzOWQwNGM5NGY4MWJlYmRhNWM3MzExMDYwNWEyMzdiNTYxMjE2YmRhOWVlOWJkZWUxY2MwYzc3MjhiY2M4MzA0NjgyMzM0Y2E5NDRlNDY3YTI3YTg1MzEzZmE1Mzk1YTljNzkwZTM1ZGVmZDJlZGIxMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiOWE2MTc0MTY2ZTk3YWE0OTgxZGRmNTgwYmMwMWM5Njc1NGI5ZjBiYTA0Mjc1MGFhYmZkYTFjZmZlNTZlODU4MWQ3NTEyZmY2YjdkYjdjZTE0MWIyYmIwMWRjZDA0MjVlNjg4OGI5Mjc3ZTU3ZGM1NzY2M2Q0MDJlYmE4ZDAzY2Y1NmEwNzBkYzg2OGU2YTEyOGIxODA0MDAwMmJhZjY5MCI6ImVkNzUyODhmMjMyNzVmOTQyMjQ0NGRhNWQzYjUzY2NiM2M0YWM4YWNmYjY1OWExZTliNzY1NWMyZGI1MmY4NzkiOiIiOiIiOiIiOiIwMzUxOWRmYjJmZjg4Y2MyYjUzZWVjYzQ4YWUyYTE4ZGRjZjkxYTVkNjlkNWFlZmNkZGE4NDQ0ZTZkZjc5MGE1MjQwZTY3YjJhNGRlNzViNGJiOGEzMWYwZjhhZWI1ZTc4NWZmYjdhMTM0MWJiNTJmZTAwYTA1ZWU2NmZhMmQ0NGVhOTk1NmUwNTVmOWZmYTY2NDdjM2JmZTg1MWFiMzY0YWRlNzFhMGQzNTZkZTcxMGRkYWZiNzYyMmIxZGExYmM1M2ZkNGQzMjEwNDA3Mjg5YzY4ZDhhZWIzNDZiZjE1ODA2ZGJlNzg3ZTc4MWI5NGY2M2RhM2UxZjYxYjVhYzYwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI5YzZhZTEwMDJlZTFiMGFkZDBiZTU2M2NlNTBmODk5ZGE5MzZlMTNlZmE2MjBkMDhjMjY4OGMxOTI1MTQ3NjNhZmRlN2RiNTE2MGM3MzA0NGJlNzNlOWQ0YzFiMjJkODZiY2MyOGZkNThlMzk3ZjUzZjQ5NGFkODEzMmRmODJjNWQ4YzRjMjJlYTBiNzEzOWJkODFlZWJhNjU2NjdiYjY5IjoiOGZkYWFlZmZkNjRlNTNmN2I0Mzc0ZDkwMmQ0NDEyMDk5NjRlMTJiNjVkMjlhZmVjMjU4ZTY1ZGI2ZGUxNjdjYSI6IiI6IiI6IiI6IjAyMWQ5MzhjOWI0ZGI3ODBjN2Q4MTM0YWVmZjEwNTNlNWI4ODQzMzcwYjhhZTlhNjc0OWZjYTcxOTlkODA5ODEwZjFiYzhkZmE0OTQyNjQ3MGMzMGMzNjE2ZjkwM2UzNWZiYWNiMjM0MjBhMzJmMWJlZTU2N2NjMzIzMDBmNzA0MjQ2ZGRjMDIxN2YyMzZlZjUyYzNlYzllMjQzM2NhNjZmMDVjMjU3MjFmNzY2MWM0M2YyMmMxYTEyNWVkNWRiNTMxYmQwODM2ZWI0MzVjMjdlZWZjNzQyNGNlOWQ4NDVlMWQ0Y2M0YzUwMzA5N2I0ZmZjYTc4OGU2NzRhNWNiNTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6ImZlOTZhODViNjlkNDZiNTQwOTE4OTI3YmI2MDlkYzU3NjQyZWVhZWZkNDZiYjVkYTIxNjNhMGJjNjAyOTRiNTgyMjE5NWE0MTBkMjRkYjQ1NTg5NDQ4ZGZlOTc5ZDNmZDA5Y2I4NzA4NzlkM2Y3MzQyMTRmNmE0YmQyZTA4YzYyYTJhOTU0YmViZTU1OTQxNmQ4YzM1NTFhYWZlNzFkNmEiOiIyMGY2OTg4MzNhNDQ3MmZkN2I3OGZiOWIwYzRlYjY4NjA0ZjE2NmEyNjk0YzRhZjQ4ZGFjMmIyMzc2NzkwZTFlIjoiIjoiIjoiIjoiZDNlOTZkYmUyOWUxZmNiOGVkODNiMTlkYmZiMjQwZTZmNDE2NzlmYmU4Mzg1M2FhNzE0NDY2MTdlNjNlNWFmNzhjZjk4YjMzMWQxNWJjY2I4YzY3M2M0ZTVkNWRjZWM0NjdhMWZlMjZhNmNkMTY5NmQwYzliYzQ5Zjc4MTM5ZDA1MTI4N2RmN2YzYWUwZGJiNGJiZjU4MWNiODIxMTkzMTA2M2MzZjQ2MTJjZWQ1M2Y1OWQxYjRlYmI4NzU3MjkxMzlmNWQyYTdkNjA2NDJlOGYyODM1ZWVkODg4YjdlM2U0OWMwZGZmZDAxMmNkNzQ2YWJmYTNlMWM1YzIzMDhjNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiYTRmZDY5M2ZmMGE4YWYyNGJjZWMzNTJkMzE5NjU0OWZkMGRhNWVlNWQ5OWNhNTg0MTZjYTAzY2U0YzUwZjM4ZThjZDY3ZjJiZjcxZDQzNjZjZTYxMzk2NjQyNTMxZmY1ODNkMmJlOWEwZDc0ZTZhNDIxNTlhZTYzMGFjZWJmNGUxNTI3MWVmN2YxNGYzZGUxNDc1MmJlMGUwZTgyMmIxMSI6IjM2ODk2OWMxNWE0ODQ5ZDc1OTNiZThiMTYyMTEzYjkyOThhNTM1YzE0OGZmNjY4YTllOGIxNDdmYjNhZjRlYmEiOiIiOiIiOiIiOiJlOTE4OGZjMGVhZWM3NGIyNjA4ZTIxZTNhNDBiZTk0YWFmNGFlMDhlYjY4NGRlOGY4YmJhMmQ1ZmQzYjA3M2FhNTUzMWM5MzhjMGZjNjI4ZGE2NTcyNWM1NGI1YzY4YmI5MWQ3ZDMyNjU2NWU5NjY4NWUwYTRlN2IyMjBjNTBlMGNhZjE2MjhlZGJhNWJkNzU1YjMxODk0ZjhjYjkwYWZhNzZlODhjNWViOWU2MWI0OTMyNDQ0YzEzOTdkZWUzZTMyMjQxYTNmYjcwYTM5MjllNDlmNmRhMDJlZWE1NDgxMmFiYjNkNmI1Y2VlMThmMDNhZjFlMGI0OTU4NDMwYWIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIyNTRmZjU2ODdhNmRhZDNmMWQyMzdkYzc2MmY1OGQyNGVmMmUyYzA4NGQwYTQ4ZDI2YTNkYzgxZTU0OTBjZGEzZjJlYzM5MmFjY2E0OTFlMDNjZTQ3Yjk1OTYzYTQ5ZmNiODQ5NGIxYzFmMTc1MmZiNmY4MGQ3MzJhODliMDgxMTU4NTdmN2NjOTZlN2RmZjA1ZWJiODIyNzA2ODg5OTE3IjoiZjgwNmI5YjRhNTY2ODJjNjFiNTVjYjZhMzM0Y2FmODdmZmUxMzVhZGZlYTZkMGMzZmMyMmIzOTg5OGZiZDA3OCI6IiI6IiI6IiI6IjBlNTI3ZTAwNDk0ZDU1NTY0ZjlkOWIyOGU3MTEwZjlhNjFjZTM2Yzg4M2I1YmUyZGNiMDU1NDQ0MTY0Y2RkZGQxYTlmMjczMTcxNmYyMmQ2ZmY0NzZjZTQxM2M3N2FiZmMwZTk0Njg3MWQ1NDgxMzQ1YzJlOTdiNGJmZGQxMmFjMDNkZjYwNmZjNTZiZGI5OWFjN2I3MWE2OWI1YjkxNjAzNzNiYmVjM2U5ZGRlNDc3MTgwYWY0NTRlN2FjYzZiYzU4ZGMwYWZiNDI4MWMwZGU0MzU0YzFiZjU5OTA1NGUzODAwYzZkNjBkODkyODU4ODY1YjUzNjFmNTBiZmNhOWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJjZGIwZDkxMTdjYzZkYmM5ZWY5ZGNiMDZhOTc1Nzk4NDFkNzJkYzE4YjJkNDZhMWNiNjFlMzE0MDEyYmRmNDE2ZDBjMGQwMWQxNTYwMTZkMGViNmI3ZTljN2MzYzhkYTg4ZWM2ZjdkNWE4ZTJlODhmNDM5ODZmNzBiODZlMDUwZDA3Yzg0YjkzMWJjZjE4ZTYwMWM1YTNlZWUzMDY0YzgyIjoiNmYwZmI5ZWFiM2Y5ZWE3YWIwYTcxOWJmYTg3OWJmMGFhZWQ2ODMzMDdmZGEwYzZkNzNjZTAxOGI2ZTM0ZmFhYSI6IjFhYjRjYTkwMTRmYTk4YTU1OTM4MzE2ZGU4YmE1YTY4YzYyOWIwNzQxYmRkMDU4YzRkNzBjOTFjZGE1MDk5YjMiOiIxNmUyZDA3MjFiNThkODM5YTEyMjg1MmFiZDNiZjJjOTQyYTMxYzg0ZDgyZmNhNzQyMTE4NzE4ODBkNzE2MmZmIjoiNTM2ODZmMDQyYTdiMDg3ZDVkMmVjYTBkMmE5NmRlMTMxZjI3NWVkNzE1MTE4OWY3Y2E1MmRlYWE3OGI3OWZiMiI6ImRkYTA0YTJjYTdiODE0N2FmMTU0OGY1ZDA4NjU5MWNhNGZkOTUxYTM0NWNlNTJiM2NkNDlkNDdlODRhYTMxYTE4M2UzMWZiYzQyYTFmZjFkOTVhZmVjNzE0M2M4MDA4Yzk3YmMyYTljMDkxZGYwYTc2Mzg0ODM5MWY2OGNiNGEzNjZhZDg5ODU3YWM3MjVhNTNiMzAzZGRlYTc2N2JlOGRjNWY2MDViMWI5NWY2ZDI0YzlmMDZiZTY1YTk3M2EwODkzMjBiM2NjNDI1NjlkY2ZkNGI5MmI2MmE5OTM3ODViMDMwMWIzZmM0NTI0NDU2NTZmY2UyMjY2NDgyN2I4OGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIzZTQyMzQ4YmY3NmMwNTU5Y2NlOWE0NDcwNDMwOGM4NWQ5YzIwNWI2NzZhZjBhYzZiYTM3N2E1ZGExMmQzMjQ0OWFmNzgzOTczYzYzMmE0OTBmMDNkYmI0YjQ4NTJiMWU0NTcxOGFjNTY3ZmQyNjYwYjkxYzhmNWYxZjhmMTg2YzU4YzYyODRiNjk2OGVhZGM5ODEwYjdiZWVjYTE0OGExIjoiMmU1MWM3YThhYzcwYWRjMzdmYzdlNDBkNTlhOGU1YmY4ZGZkOGY3YjAyN2M3N2U2ZWM2NDhiZDBjNDFhNzhkZSI6IjYzYTEwNzI0NmEyMDcwNzM5YWE0YmVkNjc0NjQzOWQ4YzJjZTY3OGE1NGZjODg3YzVhYmEyOWM1MDJkYTdiYTkiOiJlNDU3NjI5MWIxY2RlNTFjNTA0NGZkYzUzNzU2MjRjZWJmNjMzMzNjNThjNzQ1N2NhNzQ5MGRhMDM3YTk1NTZlIjoiYjVhM2ZiZDU3Nzg0YjE1ZmQ4NzVlMGIwYzVlNTllYzVmMDg5ODI5ZmFjNTE2MjBhYTk5OGZmZjAwMzUzNGQ2ZiI6ImM2MjRkMjYwODdmZmI4ZjM5ODM2YzA2N2JhMzcyMTdmMTk3N2M0NzE3MmQ1ZGNiN2Q0MDE5M2ExY2ZlMjAxNThiNzc0NTU4Y2JlZThlYjZmOWM2MmQ2MjllMWJjZjcwYTE0MzllNDZjNTcwOWJhNGM5NGEwMDZiYTk0OTk0Nzk2ZTEwNjYwZDZjYjFlMTUwYTI0M2Y3YmE1ZDM1Yzg1NzJmZDk2ZjQzYzA4NDkwMTMxNzk3ZTg2ZDNlZDg0NjdiNjkyZjkyZjY2ODYzMWIxZDMyODYyYzNkYzQzYmZiYTY4NmZlNzJmZGQ5NDdkYjI3OTI0NjNlOTIwNTIyZWI0YmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJiNjNmZGQ4M2M2NzQ2OTliYTQ3M2ZhYWI5YzM1ODQzNDc3MWM1ZmEwMzQ4Y2EwZmFmN2ViZDdjZjU4OTE4MjZiNWZkMjA0ZTI1OThkOTYyNmVkYWI0MTU4YThjZmQ5NWZhZGVhNWJhOTJmODAxMGJiMWE2YTRiNmZhZTJjYWEwYjM4NDE2NWFkZjcyMTI1M2FmZDYzNWQ2MDIxZjc2NGFmIjoiMmE1ZGZhZDg0OTQzMDZkOWQ0NjQ4YTgwNWM0NjAyMjE2YTc0NmFlMzQ5MzQ5MjY5M2E1MGE4NmQxYmEwNWM2NCI6IjA3YzY5ZDhkMmI4YWExNDU0YzVjNDgwODNkZDQxNDc3ZmRhNmJmY2YwMzg1NjM4Mzc5OTMzYTYwZWQyZTBhNzciOiJhMTRlOTAyMjQ3YTNkNjQ5M2QzZmJjODUxOTUxOGI3MWE2NjBlNTUwMmNmN2VjZmM3OTZjZmFhNWI0ZWU0YmFhIjoiNjBlNjkwZTRhMWViYTE0YWVjNTE4NzExMmEzODNlOTk5MTM0N2ZhYjdiYWM3Y2IyYTQwYTUyNTc5YTBkMjcxOCI6Ijc5MmI0N2I2ZWQyMjE2MjNiYjE4N2Q2M2UzZjAzOWM2OTgzZDk0ZWZkNTc3MWRjOWI0YzQwYmVlNjU5MjQ1MTM0ODVhNjMzMmJhZWRhNmE5NmY5YmI0MzFmNTkyZDczNDYyYjYxZDlkOTE0YTcyYjU2ZmE5ZDg3NTk3NDI2ZmIyNDY0MjRlYmNkN2FiZDUxYjJlZWZlYzhmNWI4MzljMGIzYzM0MDE1MzQyYWNlMjk2YjVmMjIxOGZhMTk0YjUwYWVhMWM4OTY2MzQ2MDI5MmM5MmM0NWYxMTJkZGJmNmI5NDA2ZjZlN2NjZWU5YzQ3ZWQyZDkwYTI3YmU1ZGQ3M2UiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJkYWI4NWY5OGVhZjBjZmJhMDEzYjk3ZGU0ZDljMjY0Y2E2ZmUxMjAzNjZjYjgzZThiMzExM2M2OGIzNGUzOWQ1ZDA1MTA4ZTEwMjhhZTY3YjRlYTYzYmRjNmQ3NWViODgxNzk0ODg1YTY0NDcwNzQ0MTk4YjdkMGJjMjQ0NzJmZmU4ZGFmM2M3ZWIyMTlkZjZkZGYxODBlNDg0ZmUwYWE1IjoiMDlmZWQzODIyZjZmNWU1YjllNTc1ZDMxZGMyMTVkZTE2MDdiMGRmYzkyNzQxMjYxOGMyZDhmNzkxNjZkYmFiYSI6IjhkNzRkMDFiNTgyZjcwYjkyZjUzYjQzNDY4MDg0ZTE1ODZkOWIzNjQ2NWQzMzNkNWZhYWY2OTExZTYyZmU0MGUiOiJlZjdmNmI2ZWI0NzlhYjA1YjNmOWFiNmRkNzJlYWM4YjFlODZkODg3ZjFiY2FlMzYzY2FlMzg2ZDAyNzVhMDZmIjoiNzQ0MmIyYTc5MmE2YTI5NTU5YmI4YTUxNWQ1NjkxNmVlMTgyMDA1ODBhYTAyZTEyMzdkZDM1ODYxOTM4MmQ4ZiI6IjQ5ZDJjYmZhMDg5N2I3ZDk2MWMyOTNjMWU1NzJmYjI2ZjI4ZTdiOTU2ZTc0NmY2ZWRhOTA0NTRjMTM3MGEyOWUyNTMwM2NlYWRjNzgzNzUxNGRjNjM4NTUzYjQ4N2VmOTQ4N2M5NzdjMTA2MjU0MDkxNzhhZDY1MDZkMTAzYzQ4N2E2NjY1NWQwODY1OWQ5MmE0ZDU5OTRkMWM4ZGRiMjhmZTYwZjJlNDk1NzdkNmU4MGNhZTE0NzgwNjhjOTgyNjhmNDVlNjI5M2M5MzI2YzdmNzI2ZWM4OTYwMTM1MWMwYTI2ZmQzYTY1NDlmOGE0MWM2ZjU4NjkyYzg2NTk0YzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIwZjBhYTg0ZWYxMmUxMGFlMmIyNzllNzk5YzY4MzQ0MTg2MjQ1N2I5YmMyNTU4MWMyY2QzZDViNThhNWIzMjQ2Zjc0ZjQyMzBjMjQyN2E1MmYwMWYzOWU4MjVkMjUwYWM1MjIyYjI2ZTc5ZjdjM2I3MDY2ZDU4MTE4NWIxYTFmNjM3Njc5NmYzZDY3ZjU5ZDAyNWRkMmE3YjE4ODZkMjU4IjoiZDAyYjJmNTNkYTQ4YjkyM2MyOTIxZTBmNzViZDdlNjEzOWQ3MDMwYWVhZDVhZWViZTQ2YzIwYjljYTQ3YTM4YSI6ImQxMTUxMjQ1N2JmM2I5MmQxYjFjMDkyMzk4OTkxMWY1OGY3NGUxMzZiMTQzNmYwMGJhZDQ0MGRkMWQ2ZjEyMDkiOiI1NGQ5ZWE3ZDQwYjcyNTVlZjNkMGFiMTZlYTlmZGYyOWI5YTI4MTkyMDk2MmI1YzcyZDk3YjBlMzcxYjlkODE2IjoiNjAxY2VmMjYxZGE4ODY0ZjFlMzAxOTZjODI3MTQzZTRjMzYzZDNmYTg2NWI4MDhlOTQ1MGIxM2UyNTFkNDdmYSI6ImU5ODQ3Y2VmZWEzYjg4MDYyZWE2M2Y5MmRjOWU5Njc2N2NlOTIwMmE2ZTA0OWM5OGRjMWRjYmM2ZDcwNzY4N2JkMGU5OGVkMmNjMjE1NzgwYzQ1NDkzNjI5MmU0NGE3YzY4NTZkNjY0NTgxMjIwYjhjOGNhMWQ0MTNhMmI4MTEyMDM4MGJmZDBkYTVmZjJiZjczN2I2MDI3Mjc3MDk1MjM3NDVjMmNlZDhkYWVmNmY0N2QxZTkzZWY5YmMxNDFhMTM1Njc0Y2JhMjMwNDVlMWY5OWFhNzhmOGNlYWQxMmVlZmZmZjIwZGUyMDA4ODc4YjFmODA2YTI2NTJkYjU2NWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiI2YTg2OGNlMzlhM2FkY2QxODliZDcwNDM0OGJhNzMyOTM2NjI4ZjA4M2RlODIwODY0MGRiZDQyNzMxNDQ3ZDRlZWZkZGU0ZTIyYjM3NmU1ZTczODVlNzkwMjQzNTA2OTkwMTc0ZjdmNDU2YWMwNmMxZDc4OWZhY2MwNzE3MDFmOGI2MGU5YWNjZWJjZWQ3M2E2MzRhNmFkMGUxYTY5N2Q0IjoiZjcyODVjZDU2NDdmZjBlMmM3MWE5YjU0YjU3ZjA0MzkyNjQxYTRiZGU0YTQwMjRmYTExYzg1OWZlY2FhZDcxMyI6IjU0NjNiYjIyNDFkMTBjOTcwYjY4YzNhYmMzNTZjMGZlNWVmODc0MzlmYzY0NTdjNWVlOTRiZTBhM2ZiODk4MzQiOiIzYWI2MmNkYmM2MzhjMWIyYjUwNTMzZDI4ZjMxYjE3NThjM2I4NDM1ZmUyNGJiNmQ0NzQwMDA1YTczZTU0Y2U2IjoiMmRiZjRjOTEyM2U5NzE3Nzk2OTEzOWY1ZDA2NDY2YzI3MmY2MGQwNjdmZWZhZGYzMjZjY2M0Nzk3MTExNTQ2OSI6IjhhZmNlNDlkY2NjNGZmNjRjNjVhODNkOGMwNjM4YmQ4ZTNiN2MxM2M1MmMzYzU5ZDExMGE4MTk4NzUzZTk2ZGE1MTJjN2UwM2FlZWQzMDkxODcwNmYzYWQzYjgxOWU2NTcxY2ZhODczNjljMTc5ZmI5YzliYmM4ODExMGJhYTQ5MDAzMmE5ZDQxZjk5MzE0MzRlODBjNDBhZTAwNTE0MDBiNzQ5ODgxMGQ3NjlmYjQyZGRkYmM3YWExOWJkZjc5NjAzMTcyZWZlOWMwZjVkMWE2NTM3MmI0NjNhMzExNzhjYmFlNTgxZmEyODdmMzljNGZiZjg0MzQwNTFiNzQxOWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJiYjZiMzM5ZWFlMjYwNzI0ODcwODRlYzllNGI1M2YyZjFkNDI2N2QyMDUwNDJlNzRjNzdmYjljYTA1OTFiYTUwYzBlN2JmNmViMDdmZWNjYmM0OTRhZjQwOThlNTlkMzBmNDdmYzYwYWZiZWI4MDcyMzZmNzk3NGQ4MzczMzViYzBiMjIyODhlZjA5ZGRmY2I2ODRlMTZiNGMzNmEwNTBiIjoiMzRhZWVjN2VkMGNhZTgzNzAxYjY0Nzc3MDljODY1NGExMTE0MjEyNDAxZGM5MWNiZTdkZTM5ZDcxZjBjMDZlMSI6ImU4MDcxY2NkODRhYzQ1MjdlNWM2ZTg1YjA3MDllZDg2Nzc3NmYyNWFlMGUwNDE4MGRjYjcxMDVlY2QzZTM0OTAiOiJmYmFjNDViNTk1MjIwMGFkN2M0MjMyNTAwZjI0MTdhMWMxNDcyM2JkZDFjYzA3ODgyMWJjMmZlMTM4Yjg2NTk3IjoiYzQyOTJkN2RiZWYzYmE3YzE4YmY0NmJjZjI2Nzc2YWRkMjJhYjhlZTIwNmQ2YzcyMjY2NWRlYzY1NzZiMWJjMCI6IjIyOGFhMmEzMTRmY2JmZTYzMDg5Y2U5NTNhYzQ1NzA5M2RlYWEzOWRkOWNlMmE0ZWNlNTZhNjAyOGE0NzZhOTgxMjliZTUxNmQ2OTc5ZWZmNTU4N2MwMzJjZGY0NzM5ZDdhYzcxMjk3MGY2MDBmYTc4MWE4ZTU0MmUzOTk2NjExODNlMzRlNGI5MGM1OWVjNWRjNWNhZDg2ZjkxMDgzNTI5ZDQxYzc3YjhmMzZjNWE4ZTI4YmExYTU0ODIyM2EwMmVhZWQ4NDI2ZjZmZTlmMzQ5ZWJlYzExYmM3NDNlNzY3NDgyZTM0NzJlYzI3OTljMWY1MzBlYmRjNmMwM2JjNGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJiZTY1OGU1NmY4MDQzNjAzOWUyYTljMGE2Mjk1MmRkN2Q3MDg0MjI0NGI1YWIxMGYzYjhhODdkMzYxMDRlNjI5MzNjOTYyNzQ1NWRmZGU5MTg2NWFlZTkzZTUwNzExNDdiZWYyNGRjOWE1YWEyMzAwM2QzODI1ZjliMmIwMGU3ZGFiNTcxZWE2YWQ4NjQxNWRiZDMwYzBiYmRjZTdiOTcyIjoiZDNhNmViMjliMTgwYjc5MTk4NGRlYjA1NmQ3MmMwNjA4YTJjOTA0NDIzN2FlY2YxMDBjY2IwMzcwMDA2NGM1ZSI6IjA0N2MyOWU0ZDE1ODRmYTcwY2I2NmUyYWExNDhhMmFhMjk4MzdjNWVlZTY0ZGNhYzYwZmRiYTM1NmNkZjkwYmIiOiI0MWM0NzkyMTYxYjFiMDBkNDEwY2I3OWNkNTZiZDMxMWE3MTRmYjc4ZGMzNDcxYzI1YmRkNzQ3OWYyZTlhOTUyIjoiY2Q0OTM2ZDdiYzNlYTBlNzIwMWJjYmVmYmM5MDgyMTVhOTc2ODBjYTZjZTg2NzIzNjBhZWE2MDBiNjU2NDMwOCI6IjJjMjU1NTdmNmRiMDdkYjA1N2Y1NmFkNWI2ZGMwNDI3ZDFhMGU4MjVjNDhjMTlhNTI2ZjlhNjUwODdjNmQxZWFkN2M3ODM2M2E2MTYxNmM4NGYxMDIyNjUzYWY2NTE3M2EzZjllYzMyNzVmMmIwYTBkMGJjNzUwMTk0NjczYzBlYWE2YzYyM2NkODhhYmIwYzg5NzliYWVlNGNkODViZmNlMmU0YTIwYmZlYmYyYzNiZTYxNjc2NTYzNzY3ZGZlMjI5ZTBiN2JlNjdhZDZmY2QxMTZkZDBiNDYwNzA4YjFiMGU1YzNkNjBmM2RkODEzODAzMDQwNGQxOTczNzVkNzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiJhZTUzN2YzMWEyOGNhMTQ1MDBlNzU5NzE2YmMyMDc5ODNiZmVhYjYwYjI1MDc5ZmEzMGI3N2I4ZDQxMjQ0Y2I5ZmNhOWUyN2Q4YWI4NGNmOWI5Y2U0OTFlYzVkOGNiNjcxZWI1Mjc3N2JlNDgwZjA1MTE1YWU2MzcwZjMwMTU5YTk0ZDUwZmZjYzY0NDU0Njc4YWIxZDFhYzZmMTY2ZmE3IjoiOGM5Y2IyYjE5YWEzYWJlODNjOGZlN2RhOTZlOWMxMTY0ODI1MjY1M2EyOWRjZDViZjBhYzMzNGFjNTg3ZjAzMiI6IjljZGY2ZjFhMmJjMDdhY2Q0YjBmNDNiNWYyYjg5MmExMTUzZTI2NjlmMjM3ZDI1NzkyMzYzNjA5NGZiNDBiNTQiOiI2OTJkNTEyNzIyZGU2YmE3MjBmZDIzYzg5OTRhYzYzMTc5YjVmN2U2MTFhZGRmOWNmYWNkNjBlMDZlMTQ0YTZhIjoiYmJlZWE3YjJiZWE4MjFmMzM5ZjQ5NDk0N2MwYjRiYWU4MDU2MTE5ZGI2OWEzY2JlZjIxOTE0OTUzNzI5Y2RlZiI6ImMwYzRmYjcwODBjMGZiZTQyNWMxYjc1NmZiM2EwOTBjYjBkMDhjNzAyN2QxYmI4MmVkM2IwNzYxM2UyYTc1N2Y4M2E3OGQ0MmY5ZDg2NTM5NTRiNDg5ZjgwMGE1ZTA1OGViYzRmNWExNzQ3NTI2NTQxZDg0NDhjYjcyZTIyMzJkYjIwNTY5ZGM5NjM0MmMzNjY3MmM0YmU2MjViMzYzYjQ1ODdmNDQ1NTdlNThjZWRiNDU5N2NiNTdkMDA2ZmRhMjdlMDI3ODE4YWU4OWUxNWI0YzYzODJiOWU3YTQ0NTMyOTBlYTQzMTYzYjRmOWNhZTM4YjEwMjNkZTZhNDdmN2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIyZjg5OTRjOTQ5ZTA4ODYyZGIwMjA0MDA4ZjU1ZDM1NjFmM2UwMzYyZGYxM2I5ZDlhNzBmZGEzOTkzOGYyZDMzMWJmM2U5NGVhODU4MTYwYjgzMmZlODVkMzAxMjU2ZjU1ZWNkYjFlOGZlMTIyNjBiOWJmZTEyZDZlNmYxNjE0NzRmYTIzMTFlMTJlMzliMGJlYjBmY2Q5MmE2NzM3YjczIjoiYjQ2NjcxY2Y3ZmExNDJlNzAxMmVkMjYxZTFmZTg2NzE0NzExYzI0NmM3ZDFjMDMzMGZhNjkyMTQxZTg2ZDVkMSI6IjNjZTlhMjlmMDIwN2QwNzllNmRjODFmYjgzMDM1NmU1NTVmOTZhMjNlYTcxNDI0OTcyZWE5MzA4OTY1Nzg2ZDMiOiJkYjk1MDAwMGMwNzc2Y2MwZTA0OTkyOWNlMDIxMDIwYWRjNDJkMjljZDliNWQ4ZjcxMTdmYmU2YmRlM2U1OTRmIjoiZmMxOGVlNmRkM2RhYzIzMDY3NzRmMGFjMzZjZDc4OWUzMzQ2MmQ3MmE4Yzc1ZGY5MDU3MTIzZGIzM2U1ZjdiYyI6Ijg1NDYzNjJjYzhhZjliNzhkZDZlOGViMmMzN2RiOTZlNzA3MDg4NTJiZmQ5MzgwYWJlZGM3ZjMyNDU3NWExNjdiZWExOGY2MzJmM2UxOWQwOTljZmJmMzEwNzczZjk3MTllZWMwMzZkMmUwOWYzOTNhMDIzYWRkOGViZGM0ZmI4N2FmNDNiMmZlNmM3ZWFhNGQzOWY4MDIyY2UyNDdhYTQ1ZmRjODRkMWI5MmNhY2NlNmVhZTgyNTJhMDNlYzJlYzUzMzBjMDFmNTZkMTEzZmQyZWMzZDAyNDBhZjBhZmNmMTNkZGRlMjA1YmI1ZTdjMmQ5MTJkY2I0YWVlNWRjZjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMGM4NWUzMTQ4N2RlMWQ3YmE0YTdiOTk4YWM1NmRjNDJjNmRjMGVhZTdiZjVjOGFhZjFlNGU3ODg3NWY1ZmI0N2RlODc4ZjcyOGY3M2Y4M2RjMmEyZjU1MGI5NmM4Yjk3MmQ1Y2E4YWYxYTcwY2ZkY2NkMDE1ZWUzYmYwNjY1ZGQxOTQxZmM2YTczMTdiOWQwZDA2NjU4ZjU3NDRjZmJkOSI6IjlhYWMzN2JjZTFhNmE4MWRjNzkzNGUyMzc0Nzk5MWUzY2Y0OGM1NWZmZTVhNTc3ODFjNDE3NjhhMzUyMjBhMDEiOiJkYjg4MWU2ZDBkYzNiNjI3OTNkN2RhNWZlNWExOGUzM2JlOWI5M2Y0YTYzYTAwYTg3OGRmYmVjZjBkMzgzYmQyIjoiZjc0M2NlMWI3MmYzZGU0YzkwMTM2OWVlZDU4MWM2MjZlZDMwODFjYTcwN2U2NjM0ZmRhZmY0NjcyMWNlMDg3OCI6ImNkNTJkYTNlYzhhODM5YzUzN2RhY2RlYTg1MDZhM2VlZWU4NzlkZTM4OGZmNWU1MTMzMjJkNmQxYmIzZmY2OTQiOiJhNWJkZDU3Y2I4ZmRlNjI5OGU3YzVlNTYzYWZjY2E2MGRkNDcyZWNhNDg0YmQ4YzNjYzE3ZjMzMDdiZTA5YjYwMTc0NGRkM2FiOWU4YTQ0MTA3YzU4Njg4MjQ1NzVmODUwYzBmMzk5YjI4MGNmMTk4MDA2ZjgzZWRlOGMwYjUzN2U5YmUyMjdmYTE0MGI2NTk5NWFkOWRmYTFmMjMwM2Q1NjBjM2I3ZjU5YmVkZDkzYzEyODJlYTI2MzkyNDQ2OTQxMWMyNjUzZjg3ZmQ4MTRjNzRjYjkxYzE0ODQzMDQ4MWQ2NGJhZDBmZWMzY2JiM2RkMWYzOWFhNTVjMzZmODFiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjkzMTYxYjJkYzA4Y2IwZmQ1MDE3MTE0MWM4NjVhODQxY2E5MzVjZmRkMmI1OTA3ZDZmZjhhYjAzNDhjNGNlYjA1Y2I5ZjZlNTkxMmI5MGMzMzQ5YTUwYWI4ODFiMzVhMWQ4ZTliZTQ0YjVmMjkzNDgyNTQ4ZDQ3ODc3NjJlYmZiMDNjNzNjNDBlNDUzODVlOGI5ODkwN2NkNjZmNDkzZGQiOiIwZGNlYjRhMzYzMjZjNGRmMTY4NWRmNDNmZGRlZWNiNWQwYzc2ZjAwZWI0NDgyNjY5NGYyN2U2MTAyOTBmNmUxIjoiMTA1YThmODVkNjk1OWYzZTA0M2VmNTA4Y2ZlYTIxZDUyMTIzZjAzYjdhZWE4MDM0YzRlZWM3NjFlYWJhMWZlZSI6ImJmNzgxZjdlNDg5ZDliNGI1YWE1ZWU2ZDE3OTY0NjhhZjY3MmE4ZDI1ZjMxMWVkZjNjNGI0ZGJmNDMzZDcwM2YiOiJjODFkNmJjZjFlNWJmMzdlMzlkZGExNzM1YzZmMTkzZGYxMTViMWE4NTRhMTJlN2NhZmUwNjBhZmU0NTg5MzM1IjoiNDMwNjYyODEyNGQwMTAwZmFkZTdlYWFmNWVkZjIyN2Q1MDc3MWY5ZTVmMmUxZTk4MzgwMGVlZjlhMzlmZGUwYjBjMjgwZTYzYzg3MjhkODM2YjViOTNlYTc5NGEzMmMxYzA0Y2ZjNTRiZDUzMDBlM2ZlYmI1ZmUyZTEwMjNlZGVkOGQ3Y2QxODAyNzlhNTk4Zjc2ODIzZThkNWE3ZGZmY2M5M2EwOWRlZWM1ZDFmODA4MzhlOTM4ZmJhNGRlOWY0N2U5NGI5OTM4MmFlNTVmMTE2ZGY5YzNiM2RkZjdlNTA1MTZlMjAzNjQ1ODUyYTQxNTc5NmYwM2E4NjQxODEwNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMjU2LCAyNTYsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMjU2OiIxYWUxMmE1ZTRlOWE0YTViZmE3OWRhMzBhOWU2YzYyZmZjNjM5NTcyZWYxMjU0MTk0ZDEyOWExNmViNTNjNzE2NTM5OWIzNDgxZmRmMjRkMzczMjIyMjY3NzkwYTBmZWM2ODE1NTRmZjcwMjY1ODEyMmU5MWJhMDE3NDUwY2ZkZmM4ZTNmNDkxMTE1M2Y3YmNjNDI4NDAzZTljN2I5ZDY4IjoiODI4MGNmZGNkN2E1NzU4MTZlMDE5OWUxMTVkYTBlYTc3Y2FlOWQzMGI0OWM4OTFhNmMyMjVlOTAzN2JhNjdlMiI6IjIyNjczMmI3YTQ1N2NmMGFjMGVmMDlmZDRmODEyOTY1NzNiNDlhNjhkZTVlN2FjMzA3MGUxNDhjOTVlOGUzMjMiOiI0NTk0MmI1ZTlhMWExMjhlODVlMTJjMzQ1OTYzNzRkZGM4NWZkNzUwMmU1NjMzYzczOTBmYzZlNmYxZTVlZjU2IjoiNmZjNTk5MjliNDFlNzcwNzI4ODZhZmY0NWY3MzdiNDQ5YjEwNWVkN2VhY2JkNzRjN2NiZmVkZjUzM2RiZWFhMSI6ImI3NTQ3MzMyZTE1MDk2NjNmY2ZlYTIxMjhmN2YzYTNkZjQ4NGNkOGRmMDM0YjAwMTk5MTU3ZDM1ZDYxZTM1ZjFhOWQ0ODFjN2QyZTgxMzA1NjE2ZDcwZmMzNzFlZTQ1OWIwYjIyNjdkNjI3ZTkyODU5MGVkY2FjMzIzMTg5OGIyNGVmMzc4YWE5YzNkMzgxNjE5ZjY2NTM3OWJlNzZjN2MxYmQ1MzU1MDVjNTYzZGIzNzI1ZjAzNDc4NmUzNWJkZDkwNDI5MzA1ZmQ3MWQ3YmY2ODBlOGNkZDZkNGMzNDhkOTcwNzhmNWNmNWU4OWRlZTJkYzQxMGZhZDRmMmEzMGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTI1NjoiMjllMjBkNzI0ZGZhNDU5OTYwZGYyMWM2ZWM3NmIxZTZjYWJkMjNhOWU5NDU2ZDZjNTkxZDdlNDUyOWRhMGVmODk1ZGYxZjgzN2ViYTQ3YTE2ODdhYTVjNGRkY2Y4YWFmMmEyYTMxMjYyNmNhM2UyMDAzNGZjNGYyODAzM2M3ZDU3M2Y2NmVmNjFhYjJlYTBjN2JmMDQxMWE5ZDI0NzI2NCI6IjM3MTNiNjAxZTE2NGIxYTUxZGRhMWNhOTI0MmZmNDc3NTE0NjQ4ZTkwZDMxMWEwNmUxMGNlNWFhMTVkYTVkN2YiOiJlYzY4YmUzM2FjOGZmM2RkMTI3ZTA1MTYwNDg5OGMwZjlhNTAxMjcxODU5Mzc2NjUzYTA1MTYzMzYxODA5OTNkIjoiOTkzNTQ5OTY2MWQ2OTlhMDBjNjIyYTg3NTQ0MWI0ZGY1MjA0OTU4ZmU5NTg5MmM4Y2U2N2Y3ZGZiMmJlM2U0YSI6IjI1NmE0YmE5ZThmNDM5ZDU0ODdmYTVlYjQ1ZWZjZjFiYzExMjA0OTE3MjRkYjNhYmUzMjhkOTUxZjI3MzlmYzkiOiI3MzExNGNiMzYyNGQ2ODdkNGNkNDlhNmU3NjlkZmM3YTNmODkwMWRjNDFmNmFkMWRmNGNlNDgwNTM2ZmE4MmU1MmFlOTU4ZDA1Mjg2NDBkOTJiOGJiOTgxYjc1NTA1OGUzMmM0NzMzNjgyZTVjNGMwZGY0MWYzNTA1YTE2NDNhMGRkNDljZmRlYWY3YTE4YWRmZmNhODgyNTZjNmQyY2NlYjgzOGFmNmM5MmE2NGJjMjFjYjdhNzYwYTAzOTEyOTFiZmUzNTc1ZTAxNGZjMTU2MzIzZjhlYjVlODY1MThjNjY5ZGFkOGQyOWFkNWZkNGVmNmUyOTZmNGEwNzY0YzI2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEyNTY6IjEzNTNmMzU0M2ViMTEzNDk4MGUwNjFmYzQzODIzOTQ5NzVkYmM3NGYxZjFlYTVlY2MwMjc4MGE4MTNhYzVlZTZjZjU4NGRiMjQ0N2FmYmUyYzhmYTBjMTU1NzVlZTM5MWJhNjAyMTkzMzJhNjdiOTVkOTBlYzlkZTZiODQ1M2Q0YzhhZjk5MWFlOTI3NzQ2MWZmM2FmMWI5MmZjOTg1ZDMiOiIzNDViMGNjMDE2ZjI3NjVhOGMzM2ZjMjRmMWRjZmExODJjYmUyOWQ3ZWFjYmNkYzliY2RhOTg4NTIxNDU4ZmMyIjoiNjk2NGI5Yjk4NDJhZWM5YzdlYzJhYWQ5MjZkNzAxZjMwZWVjNzZmZTY5OTI2NWFlMmE3NzY1ZDcxNjk1ODA2OSI6IjZhMDNjMjhhOTM2NWM1NThjMzNkM2ZkYzdlNWViZjBiNGQzMmNhYWM3MGRmNzE0MDNmZDcwY2VkMDk3NTc1MjgiOiJhNTg1NDZjNzJhMGI0ZDQ3YzliZDZjMTllN2NmNGFiNzNiMmQ3YmEzNmM2YzZkYzA4NjA2ZjYwODc5NWViZDI5IjoiNWIwMjllZjY4YjY3OTk4NjhiMDRkYzI4ZGJlYTI2YmMyZmE5ZmNjOGMyYjI3OTVhYWZlZWQwMTI3YjcyOTdmYTE5YTRlZjJiYTYwYzQyZmY4MjU5ZDVhNzU5ZjkyYmQ5MGZkZmIyNzE0NWU4MmQ3OThiYjNhYjdmZDYwYmZhZWZiN2FlZmIxMTZjYTJhNGZhOGIwMWQ5NmEwM2M0N2M4ZDk4N2ZkZDMzYzQ2MGU1NjBiMTM4ODkxMjc4MzEzYmI2MTlkMGMzYzZmOWQ3YzVhMzdlODhmY2U4M2U5NDk0MzcwNWM2ZmY2OGUwMDQ4NGU3NGFkNDA5N2IwYzllNWYxMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMDk2MzQ5NTA2ZjNhNzY1M2Q1NGRiN2VjMWQwOWU5MzQxM2VkZDE3NWI2ZGRiZWIwMGU1Njc1MmE1MjBhYzhmZmZjNzk4M2I5MThhY2FkYWE3MWE2N2UxNjI0ZjFiNTAyNDI2MGEwNDk1ZmRhYmE1OGFhZTQxZGY4MjUwNTAxMmQ0ODBjOGU0Zjc1MWZkN2ViYzM5ZjliZWNkNjk0YjJhMyI6IiI6IiI6IiI6IiI6ImY0YzdiZWMwYzI2Y2YzODkyZDIxNDU0OWFjNmYzZDgyZjM0YzY5NjZkNDI5NTA5OWVlNTYxNjZlODc5YTcwZWNhZTEzMDI1MWZhY2RhMzUxZTkwM2Q4NzdiNmM1ZWFiNTE1M2NlODdiYTZjN2NmOGJjYzYxY2JkMTRjZmJlMzRjZjFlZDQzNjc4YWVlNjljZDg3YjYwZTZiY2I2ZmY0OGViZDQ0Y2U5ZTMxOTgyZDhmZTIwYWVjMzRmYTUxZDYyNWY4NDVmNjEwNTY1NzU5NjliZjc4NWMyZmZhYjRkY2M3NTRmMTNkZTYzNDIzZTk0YmFkOGQ1ZTE2NmQ5NmE2MmE2MDJkM2VlNDA0NWRmMTYyMDI4Yjg5Y2FjNDVlNjIwN2Q5MDk3ZjJiM2FjMGFiMTc3MjkyNTE5ODVmMjc2ZjEyODdmNWM1NmNjOWJhMWE3OWZiZGJiMjkxZjNhOTQ1ZmJmZGJkNjNjZjEzYjgyZWM5MWY3YjEwODViMzMyNzllMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYWVjZTIwODdiNzEzOTkyZmY0OWQzYmY0MDRkY2RhMTg0MDNlMDE1NjMyYWMwMzczNWZlZDI5MTAyY2ZlYTZlYzFiNTc0OTUyNjg3YzliYWQwZTlhZWRjZmMxZGE1NjhiZTYzMjE2MmE4M2M4MDJhYjk0ZjMyYmJkODdmNmNmNGFmMWYyNzAzZjRhMDJhZjdkNjBlMjIzODNhNzcwYjlhYyI6IiI6IiI6IiI6IiI6ImMwMzQ0ODA3ZDVlM2VhMjlmZWY3M2FmYjJiODNkZmUwYWFlMTg2MDQ3ZmFiNmI2MDNkODYwOGRmNDk0NzZiZTE4YmYxZjBmNDcwNzE5OGZlZmExODgwNDQwNDg4N2VhM2M1OThkODg3ZTkzODQ0MGUxZmJiOGVkMGExYTMzMGNmZjg0ZDk1MmNjNjQwNWIxMmU3YmY1MWIwYzY3ZDVlNDg5NjAwNmRlZGI0NDYzN2UzOTNhOTc5MjU4OTBmZDUxNzYyNTJmNjlkNDM5MjAwNDM4NDRhOTFkMDg0MDg0NGQ4OWI4NzE1MDUyY2VjMzFlMjU3YzEyMWQzZmMwZWU4MDdiODRhZmFiZWU1OTYyNGEwMDcwM2Y0NjRiMDA3OWYxMjg4NGE2ZTg4OGFlNDk1OWM1NDIzNjA0ZjhhZTJlNmI1N2Y0NDI4ZTEwYjY4MGNiNzRjZjIwNDE3MzgwZGQ1Mzc4NDQ5YTI0ZWY5NWQ5NDM4YjBmZWUzODZiYWRlZTk2MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYzM5ZTc3ZDU3OTc1NWFhY2Q0NTRhYjdjYTY1Mjg1OTZjMzk3ZjI4YmNkNTQ2N2NjN2UwZmI0N2YzOThlODc1ZGE4Mzg5MmE4NDAzODFjMWJjMDNiN2EyMjNlOTI5MDRhNzE0ZGZmNDU3NTkxMjRmYTMzNDY0YTk3ZDdmMGQ3ZmQyZDFjNmMyMTY2M2QzMWZlODBhYmRhZDU5NDU4YzIyOCI6IiI6IiI6IiI6IiI6IjEwZjhlYzYzYTU1MGMzMWVjZGFmMmZiMWIzNzNmNzFmMThkMTQ2ZWEwMzNkZDY1Y2VjMmVjMGI3M2I1NWJiNmYzZmJiNzEzNmRkMDQ1ZTA5YzQwNzMyNDdmMDkzNDkzY2YyNmI2NjgzYmM5ZWJjOTgwMjVmNzVmYTQwNWZiOGRlZWNiZmZlYjAyMzZhMzNmMGVkNmM3NjAwZDk5MmNlNWEyNjhjODYwODVhZGFkZjY4MDQ3MTc4ZWQ4OWQ5M2Q3MzkzNTFmODkyNzIzZDhkNmU0ZjQyODk0NmU0ZTZkYWQxZDY0MGE5YzExZGUyM2NlOWI3OTMzMjRlMzFkZmFjZmQzNjdkODY4NTVhMjhjYzU0NGY4OGI4YTkxNTA2NzUzZmEwNjFjZWZjYjlkNzdiY2NjMTVhMjNhODRkYmE2NDQwODllZTAzZGI4Mzc0ZmVlOTFkYzIzYWY2NjcyMTU5YjBkMmRiMjE5ZmZkMDczOTBiNjk4Nzk5MTBiNWMzMzZhNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZDJlOGEyNTI0OWFjODUwZmQzYjAxZjYyY2QxZWFlM2RkOTRkMzhlNzI0ZjhlMjY0NGI3YmI1MTBjMzdmMjAzODkwMjQyYjExYmU3NzNiZWIyMDJlOWVlOTM4OTliNjBhMDBlYmYwOGRiMTY0OGM4NzUwYjE0ZDdiNzg0Y2RmMGE2ZDRlN2NkYzgxNjQ2OWNiZGMzYTA4ZDZkMzI1MDNiNyI6IiI6IiI6IiI6IiI6IjAxOWY3NGVlZWY2NzRlZjEwMGJhNGExODM1YmRkZWI5MjVmZTZmZmZhOTcxMTNkYzAwZDdkOGMwZWQ0ODZhNzNlODMxNTYxYWU0NGM1YmQ5MGUxODlmYmUyYmIxYmZiODRmM2U4MmVjODgwOTY5OWVlOGMyZmFkODBiNDY0YjZiMzQ0OTk5YzM2NDg2ODMwMGMxZWRiMDY1YWU4NjEwOWRjMjk1MTZmMmJkZmUyYTA0NmViYzg3MjUwNDRjMzgyZDkzOTkwZjFjYmExODVmNjFmNzFmZDIyZmJkMDc2ZDcyN2RlMzJhNmMxZDJmNDMwYmVkNDkxYzlkMDllYjZlZTY2OWExZGM0ZjgwNDhjN2JlMTk5YzdjYmI1YWE0ZjE0ZDE0MjNjOGE1NDc2Mzg2OWY1ZGVlOTQ3Zjc3NmVmMjU0M2ViYjg4ZDMwMDQ3MzkwODllZmQ4NmI3YjIyMzI3YWU5NTI3NDcwNjhiMzVkNGIzZDg2Y2FjMWRlYmNlM2U0MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiY2ZmYzZjNDQyNzllNjQxODU2YzM5ZjE0ZWQzNTQ0MGVhMmYxNDljNzc0NTkxMDZmOTYwY2FmOTEwYWYyMWMxMDkwNjdjMGY5NDQ1MzIwYWRmYzBhYWYwYzg2MTIwYTM4NTg0NzQ3YjQwNDk1ODhlNWQ5MzU2OWZjZWNkMzU4YzUxNTA3YmVkNTlmOTYxNDViYjhkYjZiZmI0YWRlM2EyZSI6IiI6IiI6IiI6IiI6IjkyOGQ2ZDlmOTEyOGIwYWY2NDAyOGQ1ZDJlOTQ0MTRhZjlmOGRkZGQzNTNlNDE1NWY0MmE1ZDA4ZjNlNTMwOTMwZTAxZWMwZGRkZjI1ZDY1ZGU3ZjQ5ZGU3MDI3OTEzNzJjNzFmY2FmNWYyMGJkYjI0ZWI5OTk3NTJiZmRmY2EyODUyNWIxNjMwOGQ0NmNlZmIwYmMzYjI2MDQ5MDExNTc3ODE2MWRiMmZhZWJiZDY4N2I5NDBiYTA5OGUzZDViZTY0MDU2NWI4MWVkOWQ0MzRiNjg2MWZiYjRjZjAzNGJhNzczODA1NjIxMTlhYTMxNjRkYzUzNjUzZDRlODJlYzg0Y2YzNTFjMzViMWI2NjgzNDNmYWYxN2YxNzJlYjRjMGNjMzk5OWQ3ZDI0YWFiYTU4ZGVkZjExMjI1MzM2YjViZDc0NzgyNWQyYWU5MTAwY2Y2ZGEzMjc2ZjI2Y2VjMTk4ZTUyZWRmOTE5NDE2MjQ4M2FhNGE0NWZhMzQ4ZDBjYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiM2ExZjA0NzRjMjc5NTQ4YzA4NmRlOWUxMmVkNzU0YzQ5YTAzMjJlNjYzMWY3ZjQ0MWM4MDI0ZmVhNjU0YmI2Y2UyNDVjMzU3YjEzYWU5NDA2NGQxYjQxYzIzZTVlMDQ5NjE5OWU4YWM5ZDUzNWY4ZDk1ZmNmODVmZGJkMzFlYjMzYzIwNzkzZjM1MDc1YzQxMmJhNzIxMzE5NGE4NzNmYiI6IiI6IiI6IiI6IiI6Ijk1NGI1ODA0MmQwMjhhYmQwMGY3Y2UzZDM5ZmRiNjFlMGNmZjZjNDAzOTFlZjg2MjllODcxMDE5MTU3NzFiOGQwYzdlMjQyOTI3NTFhYWIxMjE5NjQ1NzQzYzZmNTQzMDY4NjY3NzVlMjhiNTQ4MThjNzU5YTZiZjgwN2M0OTgyZWRkZDRiZTVlMjJmZTM1YTMwM2NkNTAzZDEyMmNjM2ZjNWNmZmU1MGIwMzExNzQ1N2UyZWZjMWZkOTFhOTc2ODk2NDU1MjExNjgxMWIwZTY1ODU2ZThmODI1NjY4MWM3MjJlYTI2NTJkZWFhMjQ5ODAyNWU4NDI2MmEzZmRkNzhiZDMzYmMzNmMwNTdlMTk4MzI3YTMzMjMyZWNkMzY1MDFhMGFjZjk5N2QwMTQ5YjRhODMzMTUzYjcxMGI5MGM4NzIyYjIzMmE1NzRkMjJlNzAyNmE4OWE0ZDljYzM1MDZjYzk5NDI3MDVhMTYyYjM0ZGI5ZjQ5MzAxYTA4N2RmZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZTVmNGZhNTAwOTgyYmRmOGIwMjM3ODhmOWE1NTMyNDgyYjI5YjEyZThhZTc3NjExMWFkYWE2MTdhOTU4Y2U4OTc3ODczY2FlZTZlODJjNTA5OGFlNzcyODdiZGUxZDgyOTViOGFhMTI1OTIzZGQ3ZjhlMDVkZjc4YWRjMjk4OTg4MzZiZTc2ZGY3YzVhYWZiYTY0OTNiMjExY2JmOGI5NCI6IiI6IiI6IiI6IiI6IjViM2ZjMWE3ZWE0MThkZWJlNzk5OTRiYzBhOGM4NmY0ODdlZDJmMzIwYzM0MjkzZGI5NTBhMWEwMjZjMjM5YjhkYTYyMjZkMWRlYTUwOWEwZmU3NmY1YTgxMWM5MzkxYTYyMjM0MzMyNGMyOTNhMDA5MDU4N2MxMDE5M2EyOTYxZTM1OGQxZTcxYzI2OTgyN2UwZDQ0ZTkzZDg3OTg0ZjQ3YWNmNWI0NzUxYzhjMDY2MTU2ZGExYzQ0NjYyYWY0ODI2Y2RmYjVmN2NmOThiMWYwMjAwZDNhMGQ3Yjk5ZmVhN2YxYjE3ZGVlN2FjZmE1YmFlZThmOTVhZTRlMGJjMDUwYmVlMmVlZWE3YzA5YmFhNzI5ZTZlMDJlZDE5NDc2YmEzZjhmNWE4YzE2NjBkZTAzNTNkZjg3MjNlZmNkOThmNWZjYWE1NmY2ZWRhNzdmMmQxNWM3NmQyNjk4OWFhOTk4YzRhZmRjNTNmZmNkZTQ3ZGFmYmE4ZmU1ODE4ZThlZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYjk0NDQzMzlhODczOGRmNmNmZTk1YjZkYzI4OTgwZDAyNzk5YjJlYzVjOGRiYTljYTk4ZmE4MDc1NjIxYTA0MTcyYjBjOWU0MTRlYTMzYzhiYzRiM2JlZWI1MzYxNjFjZGI5YTJhNTE2ZjNlODdiY2M5ZjkyZWJiZjRhYzFhOTAwNTU5NzU2OTAzYjcyYzRjMWI1ZjkwODJkOGIzNDFmNSI6IiI6IiI6IiI6IiI6IjA5NDY1MDA0ZjAwOWVkMzc4ZjQ0MGMxMGZiMTIyYTI2NWY0NjRkMzczZTdmMWExNzE5YzcxM2Y2YmYzOGQyOGZiNTQ0N2MyNjljMTI3YTBjMTAwODE1MzNhODQ3YzBlMTlmNGI2NDBiZTBiMWVkZjg0ZDk1MDI1ZDU2Njc5ZTU4ODA5MjJmMjljOTQyZTcyODQyOTZhOTMwOWI0ZmFiMWI1YmQ5OTU3ZDQ3MGRiMjhkM2QzNmEzNTg1ZmQzNzU3M2U4ZTMzNTVkMDM2OTAyNDFkNmY3MjExZDhjNmIwNTRhODEzYmEyNWY5Y2RhNzYyMDJkMzI3MGJmMTJmNjZkMmU1YmE1YTk0NmM3ZDI4ZGQyMmQ1NWQzNGEzMGEwNDBhYTk3ODJkMWU0OTQ2MDMxNDNkNDM2Y2JiMDIxMmZhMGRmNmQxYmJmNGYxOTgxOGI5OWE2OGQ5Y2IwNjJhYWVlOGZhMDU2MzZmYzYwYTA3MmVjNmU1ZWYyNDU2NmM2Yjk2YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMmFhODIyZWZhMjJkNGNkNjUzNTkxMDdjNDYzMDkwMzM5ODRiOGU5YzNlY2IxYjc3MDc4YTA5YWQ5ZWM3NDZlZjRmNjRiMjg3YmNjMzA2NDg2N2I2NzhmODFhYjIwOWRiM2VlMTMyYTExZjhjOTI0NmNlMGEzZDZkZWIzMzQ1ZjliMTVlNGNkMDQ4Mjg5OTkxYzY0YTIxYWZjNDZhYzk4ZSI6IiI6IiI6IiI6IiI6IjdiNzliYWYwMTI2NzgyYmViZjE3OTRmYjQ4NjMzZGM2OWJhODhkNjM1MDRkMjdhMjA2ZDk3NDg1NGQ0NDY3MzdkYTRjYTFmYzViYmM1NDM2ODk2NmI1ODNkYzQ0MWIxMDViYjMwYjNiZTE5ZjI3NzhlZDMxNTY0YWNmMzMzYjdjNGNiMTcyNzQ4MGFhOTg1YWZkODAzOTY4NjZlMTBmNmRhMzEyODdjY2UwNzM1OGQ2MzA4ZTU2ZTNiYmNlODYxM2JiZjQ3MmFlYWVjYjI3ZTY2MzA1ZTM0YWY1OTNjODYzMTUwOGNmN2QyYzUxMmRmN2M5YjNhYjA0YTRlZGU0MzZiOWQyZTY5MTljMDNhNTI1ZGNlYmExMGFmYmY2ZThhNjQxNTkxZDA5ZThhOTA1NDNmMTkwNWIwODUzN2I4ODY4MzM3Yzc3NGMyMGVkNDdkZjMyZDExNWE3ZjMzMDZkODA4YmI4MmQwNmJjYmRjODEwNDJkMGExNmEzZmM4ZDBiNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYTMyYWMwYWFhZWUwNWQ1N2NiM2E2MjZmZDI2ODU0ZWYwOGEzYWQ0MmEzYzY4OGVjNmE5ZjliNjdiYmZmMDJmODZkZjE1MGRiMGRlMmUzNjEyY2YxMDZkOWYxNThmYjU3MDkwMWUxZWZiMTIyNTI2NjZlN2E2ODA1MTNjZjIyYmMwMTcyYzRmOGMwZDhiMmVlY2ZhMWQ0NzFjMTBjOWVmOCI6IiI6IiI6IiI6IiI6IjgyNzFiZDdhYWE3OTViNThkOGY3NDFiYzIwNzMzMjMzNWE2OGZlYjY2YWM5YzNiZmQ1ZGFjNzJmMjA4MDcwMjlmNTU1YzNiY2FjNjI5ZDIyOGMzYTc3ZDU5NmQ5OWM1ZDU0NWE4ZGNkZDBhMmZiMmE1ZWVkNWMzNDkyNjE4ZGFiNGY3NjNlY2Q3YzY1ODA4MTdjNmE3YWNjYTQyZDgxODMxYmZjMTNmMzhlZDU2ZWQ0MjA1NTg3N2M3ZjMxZGZhZDM1YTczZWIyMDUyZjZmOTE4M2RmYzg5YjU5MjY2ODBkYzJhYTg1OTk1ZDQyYTBjMDczYzg4MWYxZWQzMzI3OTRhNzg0NTUzNDkzYmZkODQyMjI1MDMwZTAwNTZkNzZlNTI4MTAyMzZiMTdmNmYwNjdkMTI3MjM3MjM5NWZmZTljMmRmMzE0NWNjNjVlZDJjNmYyZjEyMWRmYzZjMWViOGZhNjEzMmI0NGVlMDM3M2M3YzAyN2FmODAzODNkNGE3ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImM1ODZlMGY1OTk5ZjEwNzI4MWRkNWM3Y2ExZmY4OGQ0NjE3YjRmZDFiYjYxMzEzODk1ZGQ0YmVkZTg3NWMyN2I1YjBlNmM1YmExNWU4NzI1ZWJhOGZhMDA5NDA2YWEzZDhiOGI2NmYxM2UwN2M4OTE4YzBmM2Y1NTI2MmRlYmZiZWRmYzY0MTMyOWUxZmNkNjQ0MmMyNDU2MjZjZmQyMDYiOiIiOiIiOiIiOiIiOiI5ZDRmNGY2ODg0MDZkOGU1N2Q5NjM2OTU1M2VlMzkyNjdhOWRmOTAyMGQ3ZmE3OGIzOWUxZjI0NjY3NWI3MGE4MDgwY2FjNWFhNjk2N2U3OGM1NTA3MTI0MWUyMGE5NDQ2YTgyNTA3YTIxNWE2YzVmYWEzYTJlYTNjMDVjMTI5MDU1NThkOThhOGVlZjkwYzhhYmZmZTZjZjhiODc0YzVlZjA1N2UzNjVmZGYxNzk0MzhkZTZhNzhiNGRjYzA3NWI0MWFhY2U4NzVhNWRkMzVhNDRmMmQyYjE3ZDZlZjZhYTkxZjc5MzU0OTMxYzRkNDg3MTQyZjdhYzIxMjBmZDc4Y2FhNmM3ZmY1Mjk4NzI5ZGUxNmMwZTgyODVkNzNhM2M2YTk1YWRhOTlmMzI5ZGM5YWEwOTI0YjAwNTlhNjU4NTg1MzI5Njc4OWI3ZTExMjk0MzJiYWVmNGJiZDIyNDBhOGVmN2IxOTA0NmZiYTEwNGE4NWQ0M2FlZTBlYmYwMjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJiY2FjNmMyMTYwNDU1ZTdkYjM4YTljOTRlYmQzMjljMWFjMDQzYjZmZjYwN2E5Yzc2YTg2MTU2OTc0ZDMwMjUxYjRmNGIxNGU2Y2YwMWQ0MDdjYjQyNmFkNjE2MDhkMTU5OWE2YjdiYTk0MDI3NTZiZWEyNzA5Y2YzYjE2MmNiZjA0MGQwZjVmMzhmYzQ1ODRjYjljZjRlNmE3YmIzOTg0IjoiIjoiIjoiIjoiIjoiMzdkNzZlYmJhYjBkNGM4MzU0MDg2YTVjNWVkZDVhYTYzMTRhNDc3MDc0OWQ0NjhiOWU1ZDM0NTRmMmRiYzliMjU0MzJmMmQ1ZDlmNGI4OGJlYTdmOTgzNWVkYjIyZjhhN2IwOWJkNjA0NzAzODcwYWJlZTExNjAzNjlkMDU3NWJkZDM4NDdlZTVmYTkzYTlmZTlhYWFhYzBkNDM2MDIyZjk0ZDFiOTY2NTVhYjAwZmViYTFmNDAyMDI0MjVlNTFiMDg0ZTM3MjI0OWZiYzM3ZjQ5NDEwZmM5ZDRkMTYxNzNhOWJjMjkxODFiNjJlMzQyYTg4MzVmODE4ZDI2NDdjNDViNmNlNmM1YjZmMjlhZGQxM2Q1N2U4MDUxM2Y3NjczMzk1NzU2NzFiY2NkY2NkYzlkMDkzZGJkNzJjOTFiYTA3ZDgxYzU4YWI1MjU2YjY3NDRhOTRmMGU3NTQ4MmUzODQ4ZGU4OTFkYWJmMzg0MzIyZDE0MTk4MTRjZmUxNTkwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNGI2NjdkMzVhNDgxNzc5YWQ5MTk5NTZjYTA2ZTA3MzY2YTk3NDczOGMwOWE1Njg1ZmEyM2IzZmNjMWE1NDI2MGNkMzlkNzI1YTdmMjY2MWVhODZhMmQ1N2NmY2QyYTkxZTA4NDE5NDc2YmRjNTUzNGRmNThjNmMzYjA3N2QzYWNkMjdhY2UwNDcyZjkxODU0YzE2NGRlN2Y3NmE5YjFhYyI6IiI6IiI6IiI6IiI6ImM4MmU1ZTJmYjA4MTcxYzIzMzY3MGU5ZTU0MDNiMDdjNjAwYmU0ZTkxZmY1YjU3YWUyODRjNGQ3MzMxMzliNTZlY2U3MjBlODJkM2Y5YWMxODVlMzdkMGY0NGQ1MjgxMjI0Y2I1ZjlkMjMwZGJkZmNhZjE3NTYzODlmZTc1MjU3NWEyNzY0ZjZhZTc3NWQwYTgyZjJlYjFkOTAxYWIwNGI1OWI1NGI1ZmFkYjJhY2M5YjlhZjNlODI5ZWYxOTU3MWRjNDE2NzUyYjFiYjA5MzVlYTJmM2FkNjlkYzQ1MjI4NWMyZjA4NDEyYjExNzk0MTM0YmEzYmRhMGExMDQyNTU3NmU4OGVhN2IwNjliNzRiNDM2YWNhOTNmZTlkZDFkYWZjNzhkYTEyMjdiMTNkNzAxNTdmNjBjOWJlZTY0NDQ1MWY4NzY1ZTRjOGJhZGRkYWQ2Yzc3OWQ2YjQyZDRlOGI1YmE2NTI2OTE4NmIwNGMzOGRiMzQ4YWI1ZjdhNDE0NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImMwZGI5NDUzZjg0YzJhYTc0YmY5M2VmMjFiOWU3ODAyYmI4OTk1ZjZmYTVlNjM0Y2Q0MDY0Y2EyYTAwNzUzMTlhOTY5YmFkMTM0NWJiNTQzMmRmNjM0MTI4MDdhNjQ2ZDIwMDgzOTRkODM5ODljYjRhNTA2OTkwZjU5ZjhkYTgwZTZiM2ExZGYzZmI4ZDcyNjYzOWQ1OWNiYWVkMTU2MmYiOiIiOiIiOiIiOiIiOiIxMjBiYzI2OGNhMGQzZjU1ZDVhZmY1YjM2MGNhNGQyOWE0YjhlYzVjYjYyNGY5Njc0ZWYwYTY3YjkwYmI3MGMyMzhiOTRiMmJmODA0ZmU3NGNhMThmODM2NGZmOGIxZTUwYjIzMTVmOGFhMGMzZmVhNjYzZTkzYzgwNTQ0Mjg0MTM2ZGUxZDE2MmU5MDc4ZTlhMDc0YTUwYjQ5M2JjYzdlMGM4M2EwMDQ3MTk5MTY0YTJkMzIxMzNkYjU3YWJiMDViNzUxYTM1N2FiZDNhZDUyOTg3NzNiZTIxYzUzNGY5ODY0NWU5NGYwOTM1YWZhNTM3Mjk0NjJhY2JlNTU5OTNiN2Q4MDFiZDZiMGNiYzhlZWI1YTFjNWYwYzBkNjkwNzAyZjhkZTBhMWE3OGRjY2E4ODYyNTM4MjAxZmFmYmVmZWU1NWNkNWJlNjJhZmE4ZTUxMTFjODlmMWY2OGQwZjE3NjBjZWNjODZiZjY2NzVjYjA5YjIwZTA5N2JhY2UwMzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIzMTgzNmQyOTJjYjQ2YWFkNTk0MTcxZTc2MjM3YTM0MjI4NDRmNjJmYjE0ZDBjZGY2M2JhNTg3ZTczNTAxMDUxYzdjYmIyODBkNGI0NjQxMmUxMDkyN2M5NTIzYmVkMWJlZWI1MTYzNzM3ZGI3ZjkxMGU0NDRlNWQ1MjIxYzU0Njk2NTVmZGE0YWI3MjE4ZTYzZTE0NTFmNDYxYjRmYzcwIjoiIjoiIjoiIjoiIjoiMWNmM2I0OWYyOGI3OTFlN2M4MTcwNmZiMWE4NzBmMWFmMTM0YTBmYjBkMmFhY2ZjZDZlNDQ2Y2FmMGE5MWMwNGRjMTYwZjA4MGViZDU1MDNmYjdjMTZhZDkyMjliZjBhN2JmZmNhYWQwNzMyOWQ1YmRlNDU3Njg3MDc1OGE0YmZmZWJiNmI1YzMwOTExNDY4OGRiOGU1OWE1NTQxM2I0YjM3Njg5ZGYzOGQ3MmJjNTM1ODI5MWJiY2MwYjA1YWY0ODdhMzM5MzRjZTYyNmVmZGU5MThkMGVkNWYyZGViNzVhMTdiZDg5MTJhMzFkY2NkNzgzMzU0NDc3ZmE4NTA1MjBjM2I5N2I1NmM2ZDJiOWU0YTA1ZDQ5YmMzNmU2NjgzMjcxZjIzMjJjOWE1NDZmY2E4OGM1MDIxODdhNWY0YTIwMzViZjVjNTI3YWEzMTJmMTZjMzU3YzM3MTYyZDcyMjUxMGI1MmZmODM1NzQ5MGEwOTY2OTI1NzJjZmQ4YjBmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImEwYzM0MWRkZjczZDk0MDQxNzdhNWZkZTMyY2JlMjEzMTljMzE4ZjM1Y2M5YWZjYTlhZDQxYTNiMDZlMTM0OTFlODQzY2M2YWZkZjJiY2QwMGNlNzdmZjA2Y2UzZDhhNTQ3NzJjNDZiYWYxNDJlNTY5ZWNkOTEzMWQ2MTg1YWYzNTc1YmI2MmE0MWNiNjQ2YmRjYWU4YTdhOWZlNjBjYzUiOiIiOiJiODM0OTFlYzFiZDg5ZjNmYzg0YWNmMWFhZDZmYmViOGVmNmFiOTQ5ZjQxYWRjNmQwZGVkYzUzNzIyYzE3MWZlIjoiYjc2Y2VjM2Q2MzAwZWNjNGEwMmU4MTAyOTZjN2U3MGJkOWI0ZTcxMjFmYzVlOTcxY2JiOTQzMzc5ODBmZGRiZCI6IjJhMjVjYjBlY2Y5MTM3NDlhZDQ2YjU4NWM3NjA5NzczOWExNGNhN2I1OWYxZjNjZTRmNzliYzhhNGFmZDEzNzgiOiI5OGMwMWQ0NTI3ZmQxMzFjYzMyN2U5NjMyMTA0ZDllZWUxMDQwN2NkNzNhYjYwNzIyOGQzN2I5YjcyY2EyYzk4N2FhNzk0ODA0ZDUwNWQwNzI1NjFjY2Q1MDE2YmQ0MTg5YWM5ZTNkYjkxODc4MjI4NzdkZDUzMzM0N2I1ZDIwNzE4MThiYjc2ODMzMTJlMWU4ODA2ZTliNzNiMDIxNzc3ZjdmODc4YmI3ZDMwNGVjNThjZTkyZTVlMzZkM2QwNWE3MzgzZGM3N2YzZmU2ZWI4NGI2MTVmM2YyOTBiZjhhNDNjMzRlZjU0NzhhMzBhNmFkNjE2MTU3YzlkN2RkMDQ2YWE2NmI1MjJiY2VmNjFjOWQxOTM4MmMzMjQyNWQzOGVkM2ZjMDQ5ZTczMDM1YWYxZThiOTczODhkZTIyYzRkY2JhMGJkYzA5ZmQzNmFiN2ViM2Y2NzY1OWNiZDkyYjhkN2Y2ZDc0YjU2ZmM4ZGFmMTcwNjhjNjVmYjAxNmUyOWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNzgxN2ZlODgwYzBhNDIyNGVhZWQwZGE1ZjM5NjI3MjdlNGIzYmU1NjcwMjFkMzdkM2I2ZDRjZDc3OTI3NDM3OGYxY2RhYjkxYzRlN2MxNDMzZGNkY2QwYWZiZTRiNDNjMzJhMmI1ZmZjNTIwYWMzNzIxYmZkNTM1MmZlZDAyM2QwNDQzOWMxNzYyODg1MjEzMTliNWUzMTViNmU1ZTg1YSI6IiI6ImM3NzA4YzI1MDAzZTY1ODdmYzhjODExNmM1MDBkMzcyOTlmNWQ1ZmZjYWQzNDA1MzQ5MzUxZDRmZWQ2MjM4NzQiOiI0NWY4OGYyZGY0M2M0YjljM2Q4MjliN2NmZTYxOTA0ZGRmNjU4YzE2MDQzMjcxZjAxYzVmMDZhZDNlYzdiYzMyIjoiODgzY2ZkNzE3YWQ4NDY2MDM1ZTZkM2YzYzA0ODEzZTIxNjU3YWQ2MmVlYWNhNDQ5Nzg1YWViMDgzNmFjOTRmOCI6IjZlMDYzM2M1MzIwOTllYmYwYjEwZDRhZDM1ZDc4YTQ4YjgyZmJjZTM3OTEzZTY1NTQ4NGFlNDBlMjk3NzJhMjU2MzBhN2FiMzdmMWQwZWNkY2UyNzc3M2EyY2U4ODUyMWIxNzE0MzJjMDdjMDIyNjlkZjE4MjJkMmI2Y2RlMGQ5Zjc2ODM3NWQ5YzYwZTY4OGY0OTdmYjdhZTI2MmNkZDVmN2U4Yjg0Yjg0NDExZDYxOWMzNjUyOWI0MTU3NmFjNDU2YTI0MGVkOTRkNzUwZmE3MjJkYjg3NDA5OGVmNzIwMGM3NGMzMjM0YTNlNWYyMWZjYmMyY2I1ZDUwYzQyOTdkMWU3MDkwMWI4OTM2OTY0Y2NkMjQyMDk4MDAyZjRjOGVkN2RiZjQ5ZGU4YzJhOTI0YzczN2YyNDhkNDZhYzE0NjlmNjc2Mzc3Y2E1MmNiYTEyZjI4ZDliNTM0NTA0ZDZlODQyM2I1NDA0YjdlMTRkZTk1NGI0MjI1YmI1MzU1MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJmMmJiNmVkZWMwMDA5ODJiZmRiMzAxZDFkODhhMjNjZTg0MGU0OTZhNGY1OTVhNjYyZTQxMjc1NzEyNjRmMWQ3ZTllMjgzYzU2N2YxMWU3ZTI2NjQ1OWZhNzgxYzZmZDk1MzM5MDE1ODM2ZWJkNjlhYTQyODU3MDEwZjQ0ZThhNzJiODFmNTAxYzk2OTMxZmI0OTFkYzExOTJmNmY2YTI3IjoiIjoiZWNkNWVhMzMxNDZjYjc0YTcwN2VlZGI4ZGY4ODFlZGRiMTc5N2NiYjdiMTZjMTZmOGQ3NDFkMjM3OTU3NzRmYyI6ImQ0MTBkNmUyZTg0OGYyMjQxZWU0NWM5ODcwMDY0YWMwMjE3ZDk3ZjU5YThlODBmNmI1MTA3ZmYwZTQyNDBiZDAiOiI4YThjNThmZGUzYjhjOTcxMTc1N2NiMTdlNDY1ODdkMGM1MTg3Zjc1OGQ2NDQ3OGU5OTY4NjA0YWYwMzY3MTM2IjoiOTkwYjFmNjgxNTJiMzYwN2YzMDExZjhkMDRlYTMzYTNlOGZjNDc5YzhhNmVhZWI1ODkxMzM1NjkwNDhmZTEyODRhYjQ0ZDUxYmRjZjRmMGNkNGM4ZDY0ZjRjNjMzN2NkYmU1ZjRmNDk3ZWE5MGVlNDIwNDg0NWJlYmNhMmZmZGU3ODMxY2Y0OTg5MjgyOTMyMjY0NGM0ZTIwYTQ1YTk4ODVmZjYxOWJkZjVlNzllZTUzYzI2ZjQ3MDcyZTIwYTQ2ZDJiMTA4ZDE4MGQ2YmE1ODU5YTY5NmY0NzJiZmFhODBiMmZjYzdlZGEzNzRhM2Y5MWFjMGIwNmM5ZjEzYWZhYzFhZjI0NGEzODljYWI0NDg5ZDBlZTA0YTA1OThmOWM1MTY4ZjM5YjQwZTcxMjdkYWQ5ZjIwZDY5ZWRlNmNhZTc2ODNiMjVkZWQxY2Y5ZDkwMzU0MWZiNGIwYTgwNGQ3YzE2M2FiMDY4ZDIyOTQ5ZjI4YThmNGU4NTNlNjkxZTUxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjY5NjhmNWI4NzAxOWI0Y2RhZmNjOWYzYTg5MzIxZjI1ZWY1ZDhkNzBmZDA3ODFjOWUzYmIwMWIzYWRhMThjOGI2MWQ5MTQyYjYzOWFhNzVmNWY5ZDc5OGNhNTM4NDc1ZDA5YjEyMTA0OGU4YTBjYzRiMjI4NmVmYTEyZmE4YjRiOTU5OTM4MjYxYTFlYzhlNjA3NTI2YjdhMjc5MzExOTEiOiIiOiJmYmU2YjhhZjY2ODU0MjJlZWVhZmMzMjMyN2E5OTEwNGI0NWNhNTYwMjUxM2FlZDBhNWM2MjM1MzI4ZThhN2E1IjoiMDRmMTM3MzkxZTI3Y2FmZmVjZDQ0MTNjNzc1MTE3ZmVkYTI3Y2FkODM5YWE5MDBmZjJhZjQ3YzcwMDAzNGIwOCI6ImYxODU5MjVjYzE4MGU1NTZhMDcwM2E1OTU2YWI2ZDg0NjEyMWY5ZDljZmY5N2Y2NWJiZWQzYmM0NDkwNGNiNWYiOiJjOGJiZTE2MTkyYmRhNzRlZjg5ZDk4NTliMjQ4YWM2NTg4OTZiZDQwYjU0OTFjOTBlOTIzY2FiNjgxNWVjM2QyMTI2YzYyNDEwMzcwZjVmNDRlMDFmYmYxZDE2NTMwNjRhZWQ4MzU2MDRkNWZkMDYzM2M4YjcxY2RkZTZjODMxY2Q5MWQ2OWU0MjBkYjgzZTZkNWQ4MmMyNmM0N2ExMWYyZWRlNjE2YTI4ODVhODg0ODM1Y2YyMTQyYTZhZTRjYWJlOTg5NzAwMTI1ZGYxMjkwMjM3NGJjY2UwNGYzZmQ3OGYwMzRlNTAzOThkOWJjZjQ2M2RkZTY3OTY2Mjc4MjBjNzVhN2VmZWU4MmZlNGUxNjM3NWFmNTdhZDMxNTQ5NzMwNDJlMGE5MjExMGVmNzQ1ZjQ2ODM3N2Y2Y2JlYzVmYTFhMTQ3MGVhYzgwNDA4ZjhlOTZkMzcyNDhiMTAwZWY4NDc2YzJhODVjY2NkZmNhNTY5NmZmZWZlZWVjZGE5ZTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZThlOTlmZmNmMDhhYWQ4ZTUwMzg2ZjVkMDc5ZDc5ZDNkYjc4M2E3NDE2NWM2MTI2YjQyYjMxNDBmNzQ0YTdjNzIzNTQxOTMwYzhjNzcyYWRiNjI5ODFkYmVmOGQwNTRlY2RjZjFjMzAyMjg5MDRiZDdiYTMxNzk4YmZiYmQ2NDc1N2FhMjUxYWM5YTFhZThjMjBhMDUwNjcwZmVhYzU5YiI6IiI6IjU0NmUwNDI0N2Q2Y2I1MjEyYTU3YjYyZjk5ZTFjY2E3NjdhNTc2OGNmNzkyOTZmNDVmMGRiMjQ3MzJiYTYzNjgiOiJmZDQ1ZjY2YzhkZWRlNDEzODczNzNjMzg2NzQ2MDVmM2UwNzVjOWI3Y2ZjNjYxMjNhNTQ3OGI4ZjhlM2FiMjc2IjoiMzk5MTFhNzljNmVkYmJjODA1YTUwZDJhYTAxODc0MjA5NDE3N2E4ZTIxNmQ2NDdjNjQ0MjhjMDAxNjlhYjJkNiI6Ijg3MTU3N2RkZjM0YjI5ZTVjYWYxMzJhYTgyZTFkMmYxNTg2Yjc2ZTM5YWFiNjJhY2QwMmY2ZDQ0NDA5MDhhNzcyYWM1ZjZmZDQ4YzVmNTVmMWViZTBlNzYyMjFhYzQ2YjgzNGE4YTRmNWRkOTk1ODcyMWVlMDUzYmEzYWVmMTU3NGViZDk4MGE1ZGE2YTk0NjkzNjYyNzE3ZWU1NDhhZjBmOTIxNDIxZDFhZmI4MTRlNGQxNzk5ZDM1MTg4OWQyYTFiZGQ1NzU3MGE5MTNlNDI4ZTY2MTNiMTZlMTU4YzFjZmVkMDM4ZjY1Nzg5MjBkNjBkYjczZGMxMGE0MGRhOWJjMzYzYTAyMDZiNGU3ZTQ5NjcwZWNjZWE4NjZlZmQ5YTA1YmMyMzcwNDJjZjA1MmYyYTQxNDBmOTM3N2UzYzY3OTJiODhlYTA2MzIzZmNlYmI5OWM2NDNmYzFjMzY1Mzc1OGQ2ODY2Y2RiMTQ4ODM3ZmIwZmRmNzdkZTE1NjRjZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJjNzc3NGUxOTliNWE4YzBiMzA2Y2EyMzYxNjMyNDkwNDRlYzIxNTNkYzg5YmQxYzE0NTljZmQ0MGNjNjA2OWZkMTkyMTgzN2FhYTgwZjRkZmYzNGE5N2I0ZGQ3ZTk0YzAxNDNlZmEyNGYzNDkyNGZhNTJhYmI0Mjc1YTYzY2FlNzA0OGE3ZmJiOGI3NjMwMGZhOGQxMDlmOTU2MWYxNjk5IjoiIjoiMWY0MzdmNzU4NTEyMDcxYmQyM2QwOTFjMmIxYWQ4ZDUxYjk5YWNjNjYzZTFkMDM3ZmM1NDIxMDkyY2JiMWE0NSI6ImM2MjJhYzEwNzFiNTBlNGY4OTllNDc2MGNmZWQ0NzZhZGMwMTNiNmZmOTVjOWI3YmU2NzFmNzljZDI0ODdiYTUiOiJmOTczZjQ1Zjc1ZmIwZDY4ZTBiYzVhNzIzYTcyZTcyMmU2YzhmM2ZlYTA4ZDc4NTE0MWM3ODc4NmRhNTEwMWM2IjoiOTQ3NWM2OTdhZjQzMGU5NGVkMzk2YzcwN2JiN2Q1ZWU1YmZmMTg0MDUxMzFhMGU4OThlZDM4MDY1YWJjMjhlYmRjMWRjMzNkNzY3YzRkYWI2OWM4NDZlMzM1MGJiNDE0ZWYyZDQzNzk4NzEwOTU4YTZmZjNlNmI1NWRlOTNjMmFjMzE3OTNhMWRkNGIwNzM3OWUzNjRjZTcyNTUzMzIzYjliY2FhODgzOWNiYmJkMzQ3YjRhODIwMTBiNzg5NjcyMTliODRjNmZlOWY5Mjg1ZmY3NDFhMDAzNmFiYTZiZmE3ZGQwZDVhNGZmYzE5MzYzNDFiMGUyYTMxMDgyMTIzYjZkMmFmNjc0MGNiM2ZmNDNiYjRhODdlZTc0ZWY3ZWIwNjAzMDc0NTQ1M2QyZWMyMjVjOGYzMWQyMTRmMWRlYWQwZjI5YWYwMWViZmU5MGQyZjhhOGJmNWUwMzEyNDJlYmZjYmQxMzZiM2UzZGIxZjYzYTQ2ZjY5YTI2ZDYxNTlmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6Ijg5ODk2M2QwMjM3YzU4ZTRiN2I2ZTg5NGFiMjcxNTU1NDA3ZDNhZThjMWM0NTk5ZjVmNTQ5MGFkNTcwMTk4NGE2ZTVkZGQ1OGQzMTFiNTQ3ZjZmZDJkNGQ2N2FkZGI0Y2E2Yjg2ODM5YjgzOTc4YmFlZjcyYjhjZmJkZDBjZjE4MDUxOGFmMGUzMmU1MmFkNGE3M2RiNDYwYWYwNWUxODciOiIiOiJjYmU1ZjE0NDQ1Y2QzMTBhZWNjOTcxMTMyMzJhMDEyMWVkMjA4MmYyYzQxNTJiNGJlNjg0NDhmMzZjOTFiMWY0IjoiZWZlMGVmMDI4ZTQxNzlhZTEwYjM3OGJjZGEzZDk2MDU2ZmYyMWQ5NDQwNGJmZTAyMmI1NjNjYjY2OTBhZDU2MyI6Ijk4Y2Y2YTc3MWMwNWY5MDRiNTNmZjliMTI3MDlkMjBiYzNmMTgyMTM4NWNmMjdhY2U3YTRhNTg0ZTczODY2YzIiOiI1NjgyYjZiZDY2N2I0NWRjZjE2NTI3YTgxNzg1MmI1MmE3ZjVkMGZhOGM5NjJmM2RkM2FmNjNlN2U3MTk5MGRhOTJiNzVlOWZjZjVkZTU5YjE1NjVmNTI1YTczNGU5NzhiYTc0ZGQ4MGZlODlhMmU1Mjc5NjBjZTQyMDdiOWNhNTE0ZDkzMzY3NmFkOTNlNmRmZjVkNTczMTRhNDU4ODk2MzdhNjIzZWI3ODMyODU0YzM4OTdmYWE1MTFlZDZkZDI0NmQyYjgyODBlN2QwNTI0NjQ3ZDRiZjc3MTViNTU0NmUwYTlhMWRlYzI0NmIxNjgwYWRlYTJlZWNkYzM1NGZiMzEyMjY1NDEwMmNkMGJmOTRhYzkzMzNjYWVmM2ZkYzM2OWU3NjQ5NjUzMzUyNzM5NzgzZDA0OGUwOGU4ZDIzMWIzMzJmYTE1NTg3NDVlMmNlODlkZDc2ZDFkYzQ0MmE3MWRjM2Q1ZWI3ZDM0ODE1NTg5NDFlMjYxZjk4OWIwOTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNDI2YmZkZDRlYWQ2NTY2MTFjZTQ5YmZkOWYyMTM4NDNjMTk0YmI2ODYzNTM0ZWJjMjU4NDE1MTQ4ZjQ1N2U2ZTY4NWZjZjUzOTkyMmFhZGUzNDhhMmFmNjc4MDM4NjEwYWY2NzYyNDY2MzJkZDcwOTIwZDY2MTUxOGQ0ZGM1MjIxMzgxYjJmYmYxYzJmM2JmZWQwMWNiYjkzMDM5ODA5NSI6IiI6Ijk3MTc4NWIxOGUyNDRkMDNlMjViOWE4MGMyYzIyMDRmNWJhYjZkY2JjYWVjOTg2MzQyNDUwZWI5YjM3NmJiNWUiOiI1ZGU1ODJjYmE0M2E2MTA4NjY1Nzg2MDRjOWYyYTU0MjgzMWY0MWMyNzdkNTBiMzI0ZjRlZGYxZTJlNWQ0OThiIjoiNDZlNGMzMjVkMmM0NWUwMGEzYzE3YWIzNTExNWI1MzcwYWJiYWU2MTMzN2ViMmRhNGU2YWE5MWY5NTFmNTVlOSI6ImYyZThiZTJlOTk0Yjc0YTQ5NDVmZWRhYmIxNjc3Nzg1MjM4NjVlZDI3ODI2ZjljMjZjYTJiNDliZjMyYWYxNjI2YWU2MmJmZWFhYjEzZTliYzUyYTA4MWYzNjUwNjJhNWNkYmVkMDg3MmY2NDc5Y2ZlYzVhNWU3OTE3MWQ5N2VhODk4ZThkMTBlZDcxMjAzODgyZDFkN2I3ZDI4YzVkNTliODg3Mjk4NWFiYzYyOGU3MzYyMmY2MTZjNGMwOTA0ZWNiMWU0NTE4YmU4YjQzOTg2NjJkZmY4ODA2YzNmNDM3NTBjYzliZTk1YWFhYzJhNDczMGY0MDMyM2Q2M2FmMTU3ZDEzNTU1ZDA0M2M0ZDBkN2NiNTNmMjAyZGYyODJmZGZjNTU0NGEyMzRmNzExMjFlODkzODE0ZjRiZmE5MjYzNTFjNWU5NDI3ZTkwZjExMTdhM2JjZTdhMTZmMGUwOGNkMDZjM2Q3YzQ1OGY5ZDA3Y2EzMjY5ZTAxNTczM2FhMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAwLCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJkZGZiM2QxZDkzZTk3N2FlY2QwOGVmYmQ3MWRkNDgxNjhlNjc2NThkOTM1OTZiNzQyNjcwZWQ3Yzg4MDRiZDNlNzMwZDM0YTgwY2ExZmI0YWQyNDcxZWUyMjQ2MWJiZGE2NzAzMzdkNjc1YTE3NzIxYWM2M2MzNzkzMTUzODMwYTI2YjE4NzFiMzE2YTNlMTBlNDljNTU1ZjQ0NzE5NTc3IjoiIjoiMzkwYzUzYTVlYzFkYjUyOTk2ZWIwNDJmOWE3NmU0NWYwYmNhNzZlZjZlYTMxYjQ2NDJmMDA2NTgzNDJlNjAxZCI6ImI1NDM2ZTg4MGMxNWYwM2MzYmI4NDZkOTBmM2VlNWZjNWJmNTM5Mzg2NWExMTJhNDMxN2Q3MjQ3MzhmNWRkMjUiOiJkMTkzZjkzMmFmODU4Njk4YWIwODZiZGEzNmQwNGRmZGJmYWY0ODdmYWU0Mjk4YjM4ZmVmOTdiY2NkZjYzZjM4IjoiYmRmOWUxYmExZmJhZmRiOGY0NjI4MDk4YWVmYWU0ODEwZWU3ZmQ1NjVkMGQyODVkZGMzODQwZjhlMjRhOTk4NWMyZGU1N2VkZjVhNTExMDc5YmE2Yzk1MmM5NWM2MjZlMjk2ZmQ2MmYzNTc5YWQwM2RiNTM2MjM4ZmU2OTE1ODMxN2M5YzI2ZDM3MzgxNjM0MzUwNWM2MGE0OGUwN2EwMGVkZmY4ZmJmZWYwY2U2OWVkMTc2ZTU0ODRkMDU2YWYwMmEyNzBiYjZmY2U3YmFlMGIyMjNiZmQ5OGFkMzU5ZDUzYjE1OWYzMjk1YmUzZmQ2MzBhNTY4ZDIzNjMxMjFjNzAyMWVjMjNiMTQ2OTNiZTQ4ZjViNTVlMDZiZTNkNzI5YzJhODA5NDgxOTRiMTI2NmRhOTYzMTdiYzU5MjM2MjgwOTQwOWE3NjY2ZDVjMTY4MTI1Yjk5ZGUyNmRhNzQxZjE3Y2E1MmQ2MzY4NWVlOGQ4MjYwZDQ1NzY0ZmM3OGVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDAsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjQ1N2U0OWE3MWRhODFhMmEwOGJiMTliOTdiYThlNjJhZTRiNWFkNGFlNjRkYWY3NThhODNhNzU1MDZmOTI1MTE0OWIyYmQ3MTgwZjY5YjkyMTczNDZmODE2NWI3Y2Q4ZjEwMGUwYjEwNjZlMjg3N2Y1ZTVkYTIxYjAzN2MyYmJmMTc4NjExZGFlNjI3ZDliZWFlZTY0YTlkMDE4NjQ2MmEiOiIiOiJjMzE4MWY2OTQ2OTVjMjE0MDU1ODhmNjAwYWMzMzg3MWI1MTllMmI4ZTNiODc2NDI0YjMyNzUzZGE0ODNkNmVjIjoiNjhlNzE3NDEwZjk5YWUxMzcxMjE3NWU0MDJiNTEwNThiNzYyNWI3ZGEyNzIyNDQxNGI0NzJmOTYyMmQxNjNkNSI6ImYyY2YxM2QwNWU4NTNhMTNlZDQ3YzVkMGVlYjljMDQxNjY4ODA1MDM0MmYwZDM0NWFjMWJiMjFkNWFlNjc1ZmUiOiJmYzIzYWFkMDI4NzA4ODUzOTRjYTgzMWI3MjIwMWQ3NmNmNzM2ZjA4ZjYxMzJiMTIxNzhlOGUzYjAxNmZlZjhkM2JiYjg0OWU1ZDkzNWFiNzMyMDU0Y2E3MDExNTRlN2QzZTg3ZDFiNTFiNzM5MmNjZmFhMTljNGFkMjg2MzhjNjdiZDE0OWZmNjdhOTNjMDllZTFmYTVjMmVmN2JmOWQ0MDg0NGJhYWU3OTE2OWU1MmU5OTkwYzkzZjA5OWUwMzZiNjNiMDAwZmI4ZWE2N2ExMzE2N2IwNDVjOGY5MTYzMDQ1YmVhYmUwNTc1ZmVmMDBiODlmZDkwMzkwYjAxMjQ5NjE2OThmNGFkODg4NGExZTFmYWY1NzZkZTdhMTc5YzAzMjIxNDAyMjc5YjMxYzkzMTM2Yjk0MzZmOWEwN2I1YTY3YjFjMTk5ZTdjNmNiZDBiNWY1M2VlNWJkMGVmODQ1MjQzMDc3YzZlZGEwZTAyMWFjOTIxOWY2ZGI1YWQ1MDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6Ijc5ZTk2Y2M4ZTc3ZDhmZTcyY2Q2YzY2YmVjYjUyNzUzY2VhMjhiZjcxNjgwZmE1NDFmMzQ1YjgzYmU3OTk3M2RiNDA4MTIwMWJmMjNjOTRkMTgyOGU5Y2ExZTgyNWFjMThhZWRjNWNlYjg3YTRjMWIwYzMzM2M4OGQ5N2UwZjEyZDYxYjMzOGU1YWNlNWUxNWY3MTI4M2QzMWExZWE5MGYiOiIiOiI0MzA0Y2NiMjY2NmIyMjdjOTJlMmIwMDY1OWNlMGIzNGRiYjUzNDUxNTkxZTMyOTE0YTYwZDZlNmNiYmJmZGQ2IjoiZDZlNzQ3NzdjMDIyNTJiMDYxMzM1N2I5YTU4MmY0ZDhjZDdlNDM2ZGFmMTY3NGE2NjM1NjFiNjJkOGVlNzE0MyI6IjBkZTEyMzg5N2Q1ZjA5MGI1MmRiODhlNGMwZjlmZTczNmNjZjI3YzEzNGIwZjVlYWM2MWIyMDBkMTVlMDc5ODYiOiI1NWEzNjlkMTM2ZTJkOTAzYzE3OTQ3MmVlYmZjNDVhZTIzNjk5NDY2OWM0NmNkMzE4NDAxYmM2NjJmMzhhMWY3MTRmNzhhYzlmMTVjODE5ZDJiZDg3NmE3YWY1MWU2Y2FlY2ZmM2M2NTBhM2U2NjFlNWQxMzdhMzU0Y2IxNmFlZDViMTU1NDU0NWJkZTA4YzEwYmFhYTViY2UyMjI4NDA4M2I0M2E2ZGQ5OTQxYTM3ZjFhMTg5MjljZWQ2MTE4MWMxMzdlOWUzOGM3OWQxMDc0NjVhNWExMmYyYTJmMzc3ODhjOGUzOThhYzQ4YjJiZTk0NGQ2ZGQzNTYyYzA1OTIyYzI1NTY5YzI2YTEyMDNmZGQyNDQ5MjBlNmMyNjgwMjhkYmNmNjgwN2MwNWJiZjE1NTk5Njk5ODE0NjdhNDc5ZDcxMTdhOTFmMjEwMTE4YzExNTk3NDlhMWRiY2U0ZDhhMGQ1ZjJmODIzMmM1MTUyY2JhYTY0NDE4NjVhYzNhODgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImIzNzE4MDg3NGRkNGE3ZTA4YjEyNTY5NjZlZDU4NDUwMDFiMDc3M2I1MTM2OTU2ZGNhNzE5NGNkMTJhOWQ5ZTFmMWRkMzU1MzRmNTc5MzA3ZGUxMWMxZTY0ODc1ZTkzNzcwODFkZTMwOTVkODNjZWQwZWEzZGYyZWU4ZDViZTRkYWVlNTQ1YjQzMWRjOTA4YmMxMGVmYzA0ZGIxNmFiNGUiOiIiOiJkM2M4YWE4OGNjOGQ1YjU5YWYzNjg1MTc3Y2YzODI2Y2Q2NzU4NTRkZWRkY2I5YjUwMWM0MGM0Mjg4Y2Q5Y2RmIjoiNjc4M2Y1YmQ4NmZlMTc4ZTZhNGQzMDMzNDIzNzRlZDMyODUzOTI1ZjE0M2E1YWQwODNjMDRhOWMyOThmZWI5OSI6IjQ3NzRlNWQwNjJlZGEwNGI2ODBkNzE3ZjY1MmQ4N2JmNWNmNjM1ZjU5NzI4N2I3NmZjMzVlMmQ1Y2U1OTNkMDgiOiJlNDc4ZDQ1ZmQzZWI2ZjRjMzk4YTBlYzg0ZjkzZWE2ODYxZjAwNjY2NzUzYzE0MzUwNmM1ZTQxNzEwMDA3N2UyYzRjOWVjZTQ1MGQ5OGM5MzcyZDY4YWVmZmU5ZTU3ZWY5MTc2ZDQwODRmOWM2ZDAyNDc5YjUxNjk0MmRkNDc5MmE5MGZmZTFlNGU0OWE4MTU2YmRkODcyZjFmMDVmYWNjMDZlNzFlNTgxZjkxOWNkOTRmYjk3MjA4NTE1YmEyODRmY2QyNTVlYTZmMWQxZWJiN2QzNTFlMWNlZWExY2RlZTYzMTA3MmQzZmMzZjRlZjlkNWZjNTdhOWNhOThjODhiODEwMDNkODU4Y2I1YmUwYTM1MjBjMzRlNTJkM2JlZWFkZjkxMzg4ZWM5YTQ5NWIxZmM3ZmY3YTY3OTlhYjBhZjIxMWFiZjUyYzE1NDY3Mjc0YzA0YmQxMDRkZjE0MDMzZGYwMDBkODYyNGFjZDI1M2E2Yzk1NGMwZDg5YjcyMzgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjI3NzlmMjBjMDJkMDg2ZDMwZDUzZGJkNmU3Mzk2YTM1ZTY3NzIxNDY1MGUzOWYyYWU4MzA3N2ZhZDcwYzA2ODAwNWZhZWYzNDdlN2Y3M2VmYjUzYTkyZjA2MjllMDEyYzdlMTI0NmQwN2I0ZTFiZWE3MDA4ZGQ4ZWNjNzU0NmUzZjBhNmUwZTk1MGUwODMzNzNmZGUzZmQ5OTRlMTE0YTQiOiIiOiI1NWVkYjg0MGI4NWIzOTFkNGYxOTQwYmU1MmEzZTM4MjQxMTkzNDljNzgwODExYzU3MGQyYzg4ZGJlZmNlYTE2IjoiZTgzZWY1NmYwOWY4MmFmNGRkOTFhMGI4ODdkM2YxODJkY2NkOTczNDM1Yjc0YjdiM2M0MzJiMzlhNjFmZTcyMCI6ImViOWYzMGYyODg2ZDA0ODZjNTI0MGY0MzEwNGU0MjZiMzZhYWUwMDA2YzRiOWM2NGRhYjFiYjcxM2JjZWY3ZTMiOiI2OGMzZmVkYTA2MTcyYTE5MTE4NGUwYmI3N2E4ZjNjOTA5NjA0OGJmNzFlZDk1YjIwY2JhMWIxNzI2NjYwOTAwZDdkOWY5N2I3YWM2NDhjNzZiNTBiOTIxYzI4ZWVlM2Q0MDFiYTgxYzhhNDZmYWJmODIzMDFmZGE4ZmZlOWQ3NmJkOTNjYjI3NTYzOGY3YzIwODhjZmRlODg2MjA2NjFlYjg0NGNmOTUzY2MxNDFiMzFlOTQ2MzM4YTAyMDNjOGFlNjdjMmFmMTMzMGE1MzI1MTgxOGFlYmVmODkzMDEwZjE2YTUxOWZjZjIyMDYwYTlhYTljNTk3ZjM0MDk0NjVjZjNjOWNjZjc1M2RiOGMwYmQzYjQ2NWIwMjhhZGZjNDQ3ZTM3YjUxMjljMTdhZTllOGJkMDFmNzYyNjYyYzQ2NjQ5MWZlNTczODQ4MjVjMTYzYWI4YTI2ZDY3ZWZkZGEwMWIwNTNjMTlkM2JjNjU0NWMzNjYxZjJhZDFkZjFlMzMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjcxYzlmYjJlYjhjY2E5ODg2MGY5NTVhOGJiMzY2OWM3MGI2ZjUzNzQyNTZkYTIzZmNiYzRmZmMyZTkwYmMwYTA0M2I4ZWNiZjFjYjBjN2I2NWEyY2I3YTQ3MjExNTQxZjI2NzU1MTIxMzg5NjRkMGRiODA3NDcyNzE1OGJmYjRmMGQzYzA5M2YxZTJjMmJmNjk3YTQ4YzJlYmQyNzE1M2IiOiIiOiIxM2IxZDU1MmUyYzhjODRmNjY5NjFhYzhjOTE5MTY2YTI0OGJjNjJmYjg5NmNmZjBiOGIwMDFjZDdlMTQ3YmQ3IjoiMjdkNjI2MTIxZWY1NzlkOTk2OTgwOTc2MmM3NzA2OGU0NTczYWY0NGI2ZTk0N2EyODkyMzM3YTExNDA0YzEzMyI6IjQ1NmVhMjA2YzM4NjYyNzUwYWYzOWFlZDVmZTBhMzk3NjBmNGRhYzg1YjgzZDdjY2JjMzM1ZjUzYTE2MGEwYzkiOiI0NjRhZWU4YWY0MmFlNjhlZTc3Njc4MDExMzgwNWNhZGUyNDZiODNhNjk4YzM0YmY0YzkyZTVkODFmMjg4MjllY2RiODA4ODg0YmM3ZDc4NDM5N2YyYjJmOGM3NmEyZTM1MTdiNTNiY2RjNzI1N2Y0NGVjOTM1N2QwMTRhZjRlOGRkYjQ0ZGY5OGRhNzI3NzU1NjczNTZmMzYzZmI4NTg4NWY4ZjIyNTA1ZTViNWE4MGM4MjRiNGEwYmM0ODAyOWUzNDE5ZDNkMmYxNjFiMTQ2OWNlYWQ3MzBjYjEyM2NhODM4N2EyYzgyNzY2MzVhOTFkMGRjYjIyMjA3OTdhZTI3MDI0Njg1ODdhYzNhNzBiOTI3NjI1ZjNhNmUyOTgwZDZmYWU2ZmRkZjRiMzgwY2EwZDkxZWI0YWVlMzdiOTg2NDRiZGVhYzM0NWY0OTUyM2EyNDFjYTM5Mjk3MmRhMDJkNzAzNjRmOTQwMWMyMWZjZjM5ZWVhZjQxNGEwOWZkZmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMCwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImM5ZTU0YmNlYmJiZGY0NDA1MWU4MGI5MWNkMTBjODdkYzI0MjY3OTIzMzUwYjY3NzA0MDY1NTFhNTA2OWVhMjI1NTIwMWYzZjE1YmMzYTJlNGNhYWYwYjQ1NTEwZjE5ZGIyOTlhNDFkYjhkNTZjZTk5M2FkZTQ0MzIzYzQ1NWZiMWEzZjUwNDEyNGMzNWE5ZTkwN2Q5NzY1ZTgxMGM5MzkiOiIiOiIyODE5YjNlZTI3OWQ1NzE0NWVhMTAyMGViYzc3YzQ2MDMxZDY5NTI0YTg0MzE1ODE5MmUwODFmMmFjOTE1MTJiIjoiMjY5YWM4NTNjY2QzMzJmZWY2MTMzMGFmN2U4MGEzMzc5MWVjNDRiNmNiYjgzMDA2ZTVjYTA2NzA1OTdiMzViMSI6ImZkZjAzMWIxZTBhODAxNmJkZjZhNmViYjUzM2RkZGFhZTFhM2E1YjE0YjljZjUyYTFhODAyOGNjNzIwYjEwYzQiOiJhMWM0YzFkNmU3MmRhZTVlNDcxNGJkZGY0YTFjYjhkMDFjZmY4YTM5NzNiMTIwMjIwMTEyNzBjMGRlN2NlYjg1ZmZiNmE2YWVkZmE1NGQwNTIxZmYzM2Q3NDhmZGVmOGYyOWM1MmM3YzQxNGU2OTJhMzBkZmQwMDEzNzc2YjU4ZjU4NDIxNjA1MzY5YzgzZDRkODkxYTE5Yzc4MmEyZDAzNmY5NjM4YWJhOWUyNGIwZWFjZGVlODdkNGE4MDExNjk5YjYzOGMyODdmMGExMmYxMWVkZTg2YTk0NmJlOWMwMGQyMWEzMTU4NGEyYTBkYTUzNmRjYmY4NmUyZGY2M2JlOWE3Yjc3MTk5OWM5YzdhNmI3NDhkZTcxM2I3ZGE3NTdkZTJkNzMxYThkOTgwYjc1MTM2YjBmZGM3NWNhN2FlZjQ3Y2QzNmJiOTM3MGM1Y2EwZWY4MWI5YTA0ZmRjNzg2OTg3MjBmNjhlNWQ1NGUxYTc3N2U1NTdhMWRmYjRjMjIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNGQ5NWYzMWI5NjA2YTVmNmQwNGRmZjFkODliNTBiZWNmZDA4ODJlNmNmNTFjMWM1ZDI0YWQ4NDNiYzEyZDk3N2ViYTQ1ODJjMzlkNzkzYTYzZWFkYjYzZjI5MjU2OGM3ZmM0MjcwZTZjOWFlYzgzMTg2YTIwODE5YTdkMzVlN2YxMTU1ZWExMDg3OTQzMDJkNTkzYzUzY2U5ZDI1NDIyYiI6IjQzYmY2ZjMyYjNiNWY1ODBiNTQxNzllNDEwMmQwNjM1MzZlN2M0NzY4MWQ2ZGUzY2ZlODhmZDhlYzY2ZTQ4NzMiOiIiOiIiOiIiOiJlOTkxZDAwMGIyNGViZGY4MzhiYTExZjk4NDk1OTFiMDAyOWZlZmYzMzYwNGJjNGQ3MWFjZDk0MzAxZjhkMDQ1ZWViMWY4MWYzYTEwMWEyOTc0MDNhMzU4NTkxMTNjMDk5OTM5NjM4NjgwZDQ4MWM4NjA2N2Y1NDc2Mjg5MmY4MjE0NmY2MWNjZTdiYzJjODVkMzk1MzQ4ZjNlYTJhYmE2YmIzZTU5ZGJjZjhlNDFhODE5MThiNmNhYjMwNGQ0NGVhMWUzMjU3M2NkNjkzNmYzOGNkYzExZDNjMmY5NjI5MGNjMjdiMGRmYTNiYmJhZmE5Mzk0YWNkZjJmNDQzNTE3MGI0Mjg1NjM0MjdjNGIwMmVkMjU5MjQyMjZlZGY4ZDVhNWVjYTRlZWM0YWVjZjk4ZWYyZTZmNzVjYWE3MGJkZDg0ODc3ZGYyZTYzN2I3ZmFkNjIxYzYxNzBjYTViZDg2ZTIxZDBiYjAxY2M5MGZlMmU3NjM1M2E5ZDU2ODdiZWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMTM3ODQ0M2RmZWMzYzAzZDM2YjE2YmFjYzQ4MGVkZmNiMWE0YTUwOWMxN2NmNGIzNTc4N2RhZTNiYzkxYWRlNmMxMTNhMWUwZGY5MjdhNDQ0OWZmOWUyZjRmMWNkOWEyN2IwN2Y1N2NjZDY3NzdmNmQ2YmJmYzk2NTVmMDY3NmQ3YjRmOTE3MTJlZmQ0MzMxNWJlN2M3ZjMwZTUxZGE4OSI6ImY2N2NkMzVhZmJjOTY3NTY0OTljNjhhNWVhMTk5OTFjZDFhZDQ4ODBmZGMxM2FmYWE4MTc2MDhhMTQxZTk2NDYiOiIiOiIiOiIiOiJiMzJkOTgzOGIzZjQ1ZTNjNGIzZWRlMTE4MWJmMGFhZGFiOTZkMjI3OTBkODUzNmY1OTEzZmU5NWMzZWMwMTc5ZGQxYzdhZTY5NDMwYmM4YzY4ZjRmMzAxMDUxOTliNzg1YTExYWRmN2FiZWMwMDdkMThhYmNlZTJlNjVkZjVhMjExYWRmZGEzNWZlZDhiOTM4OWE2MWQyZmFkMzNmZTAyMDExOWU3MmM3ODJhMzE2ZjE3ZjhhNTg4MjM5NTY3MzE1YmRhNDYxZjVmNDUxOGExYWVjZTRkMGFlMDI4YzE1M2Q2N2E4ZDRjZTYyMGU1NzFmYWEwNDAzYzU2YmNhYTg2NDgyMmU0ZDhhZTZkMTRmZWFmZWZjY2JlODc5Y2U0YmFlY2E3MGQ0MzYyMThlMGViM2E2MmJmMTVjMDE4ZmQ0Y2Y2NmE1MGUzZDlkN2NjOWU0NzQ0ZTI5ZTljOTQ1ZWFiZjAzYTZhMmM0Y2E1N2U1ODJiNjA5MTQ0MTdkYTU3ZjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNjllOTM5NmM1OGVkODY3ZWI1MmZjZDA0NjUwNDkyMmUyZTlhOWIwNTkyMzRjZGQzZjBhMDllZWU5ZmRmZDQ1ZGVkZjVkMzg2MGIyNTExNWY4YTNkMGUyZjNmNTQzODkwYTIzYTVhYTI3OGY4MzY1Nzc5NTY5NDRhMDk4ZDE4ZjA1OTAwZDFiMDc2ZDMwZWE3NDViZTc0NWI5ZWZjMGRjYyI6IjFiNmUxYmI2MTNkMTk5YTVlNmYxYjVjMmVkMDQxY2Y2ZjY2MzNlMmVmNGQ1MGVjYWQ4OWIyODEwMmJmNzA1NTQiOiIiOiIiOiIiOiJlZTA5ZjdiMjRjZGM2YjUxYTgyMTJjYTAwNjEzNjMzYzFhNWYwNDRmYTkyMWJlYzMxYmFmNjc5ZjViYTY2YmZkNzIzNzIxYTAzZTBmMjYwYTQ0YWQ1Y2M0YzU4MDA4MDY2N2E3ODE0MjdhMzRjM2QyZmRmYWNlYjRiMDQwZWU2NzU0OTFjNGRkMGMwZDEzYWJiZTgxMzM2Mzg0ODA2ZTM3ZjI3MjllN2ZkMDgwZmQ1NzAxMWI1NGI2NjRkNTg1MzRjODMxYzkwZDE4MmQ0ZDk1NTY3NjkzOGQ0ODQwODdiMDA4NmQyYmYyNzM3YTkxMmFmYjY2MTAxNTc1Y2EyYmM1YWNmODQ1ZjQ5NzBiYjFjZTQ0NDFlYjY2N2Q1MDk2MzE5ZDYyODI3MTRhOGE5NzA4ZWY5OTY0Y2FkZjU5NmFjM2U3YjFiYTE4ZmRlYzdlMmUyMmY1ZTYzNTJlODI1ZTk2NWE0OTRjYjg4MGFhZTc4NDc3YWEzYmNiYTk0MjgxMDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZDJmMzkwZmRlMGI1MGVhNGFmZTZiYWYyOWE3NWU2OThmYjAyNzVjMDRjNDgxZGYwMzkxMGQyMzhmNGU3MmM2ZjYzYTYyMzFkZjg5MTIzYzJkYmVjZmUwY2IwMzEzZGIzNDI4OGY0MTQzNjk0Y2UyZGYyNDg0ZDIwODg0ZGJjYTA5N2UzNWMzZmQ4ZGRlZTUyNzNiNTNjMTE0OWJmNTA3MCI6IjJiYzM4ZDg1MmQxZGRlZTJlODliNzE3NDAzMmQ5NmMwYjk3Zjk1NWUxNmJjNjE3MTZjNWM2NDI0OGViNjIzMmYiOiIiOiIiOiIiOiJlNjIzNDZjNzJlZjM5M2EyOTA0ZTk4MjE1ODk5MmRmNGNjYWIwMzE0MmM0MWQ4ZDI5YzE0NTQ3OTQ5MjZjNDg1NzBlZWYzNGJkMDIxZDQ0Y2M5MTA2NDAxZTljYmNlNmRkYmI2YzkyMjU3ZTg5YTc4NzQ5OWQ3ZjdhMmRkNTI3ODMzMzA3ZTAyZjQ0NjQ1ZGRiY2IxMzAzZjFkYTk1MzgyYzg5ODA1Yzc2YTJmMTJlYjEzZDJiMDIwNWI3ZWMwZWYyMWY1OTZjOThhZjYwOGEyZjJhMmM1ZTM1MzRlMDFhMjNiYTI1YmQ1ZmNiYTA0ODE0ODJlMWVjODEzOGZiMWM4Njg0MDA2MDkxOWQ3NjIwY2I3Yjg3OWQxMDk2ZjY0YWVjYWUxZWEwODVhNzkzYTlmNGRkNjY1NDQ5Y2U3M2NiMzAzNmRkNWYyYTQ5MTM4Y2U4OGM0NjFhMGE5ZTJmMGMxZmI4MzM4ZjVlZWE1M2FiMGEwY2E4YThkZjljMzE1YzQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMGNmODZmZmExNDU2YzQ1M2I1MzMwNTM1M2NlNDNhZDNiYTQ0ZWJmNGM2OTQzY2RlODYxM2NkYzQxN2VlOWY2ZTc1OWMwYmY0Njc2ZjFlYmQwNWM1MTllYjg0ZGZjZDNlMzc5Y2U2MTAxNmU0OGNjY2RlMjQ3NTM4NzhmN2Q4ZmQ1ZGE3MjUxODI1M2IyZjgzNmYzMmU1YjU5NGQ1NGFkNiI6IjA4OGM5MTdmODQ2Nzk2NDFmNDkxYWFmMTA1ZWVhMGYwMmQwYThhZTBiN2FkZDY5NjQ1ZDFlZjMwNGM3NGI0MTciOiIiOiIiOiIiOiI3OWU3MWQ5YTk3NGNiODhkOTAyMmQzNTk5NzAzMmJiNWZiZjhmMGRhZmY0MTE0NjcyMTc4MzdhODM2YWE0NGM0OTNmODY4YTMzM2QxZWJmNjY2ODk4OTViNTNjOWUwMWQ1ODAxOWRkMWRhMjM1NGZiOTY2Yzg4ZDJkNmFkYmU2NmFjMGI4OTAxNTk1YTI0ZGRkYmE2MDk0NzhlYzM2ZTQ5N2Y2ZmI2YjRiY2FhODhiMWU5YTljODcwODhmNjY2MTE0NDZlOGMyODczZTg5ZWUxMDA2YjZkOTJkMmVhYzU0NzE0ZmM2NDgxZTc3ODJiMzhlZDRiMThkNWY5NzE0YWU2YTU0NDExMGNiNjA2M2M4YTk5NjRjNTJhNzAyNmY1MmFmNDQ4NzgzYzM0MjcwOTJlMDMzOWVmZDdkMWE4NTIyODQ4YTJmYWE4YWExOWMyMTM2M2E1Mzc3NjZjMDU1MDVjYjk3OTI2OWM3M2VlOTA2NzlmZWFlZjhkZjEzYjY1MDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNzE3OWM0MzRiZmZhMzc3ZDliNjgyMWRhOTU3MTY2N2M4Yjk2MjE5NmY3ZDhhYWQwNjJlNzViNjA5MWEzNGE0NTRlOGY0ZDE0YTYwZmI1MjUzYWUzNzNjZjUwZWRjYTkzYjhkMmViMjA3NTA3NmVjOGM3YTQyYjdhZGJlNzcyM2E2YmE4YjUxYTU1ZmFkYjE2ZmMzYTZmZTlkYTAyMDQ4MiI6ImJjMWMzOWU2NDZhZmMxYmI2MjY4NWI3NDYwMDcxNDg0OTQyMDlhNDE5YjczM2U5MzhjMWE1ZDAyZTIzNTA4NjAiOiIiOiIiOiIiOiIzMDkzYTJlMWY1MDJkNDRkOGJlNGYzNWIzODY3NzQxNjJmMGUxMDg3MGY5Y2QzNGUzYjlkNGU3N2M3ZWM3Y2QxMGNkZmEwYmY4MjI4YmU5NmNiNTc0MWYwNjk0NDBhNmI2ZjllYzE1NWQ4OGJhNjZiN2ZhODQ5NTljNTNkMzU3NGJmMWNmOWYxNTYxMDA2Yzc3NjIyM2I4ODFkZDM5NmU5ZTk4MzBhZjJjMWI1Zjc0NTdmYzQ1ZTgyM2I0MTFjNWMyYmEzYjExMjE5YWVmZTU1MDhmNzVjYmRiNWU0MGVkZjZiMWY2MTQ1MzU0MWFjOThkYWQ5ZWQ1MDJiZjFhOGFmYTc5NjA0MjYxYzdhODllNzhjZjI5NDFkNTIwZTBjMTBiZWQxODgyMGRhNmMyM2E1ZWQxYzBkZmZiYjA0Y2RjYzljMzI4NGQ0MDA2NDRlOTM2NWM5OTVkOGM5OWVlYmY0NDRmMmNiMDUxYmI2MmYyMzEzMDFkMzFlYTgxNWMzMzgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYjA2MzMzMzEyOGE2YWI0ZjQzM2YxNTFhZThhZWM0MjgzYWI2ZDFjYmY0YTY5NDQ3ODUwZmExYTI1OTMwZWMwZjQyMDRkYTUyNzUyYTliZGM3ODhjNWNlZTZkOGI5MmUxYjg1MzBkYmUwYzgxYjFkMzQwMzdlZTUzZjIwNzU4ZDU3NTBkOTg2M2VkNjBjNzYyYWUyYThiNGM5NzNhY2MyMiI6IjA2NzcwOGIyNGRmN2EzNDgxMTk5M2Q1YzY1ZDUzNDhlZWE3M2U2YzY2ODAyOTNhZmFiNTgwNGI0MzI4ZTdhOTYiOiIiOiIiOiIiOiI1Zjc0YTFkMTk5ZjMwZmEyMmYyMDIwYmFmMDM2ZmM2MWIxY2MyYWNhYTgwYjQ4ZGRmZjFjZjg1ZmU1ZGQyMDBhOWFmYmQ4YmM1MWRkMTgyOTYzNmZhMzM1NjYwZjM2ZDVkMmE1MTZlNGMzOGU4ZWYwYzNjYWQ5NzllNzllN2UyMjZiODIwNjM0ZWYxZDc2YWU4MWJjM2UzODA3OTEzZWIwNzMxYjJlOTU5YzQzYWZhODNmZWIxZDhkYTMxZGNkY2IzZGMzYTRjZjhmNDU0YzRlYzQxYmJjODIyZTU4MDIzZjBkNzk3Yzg0NGJkOGYyMDAzNGIzMWQ5OTU3OWJmZjE0MmNmNTNkMjY1MWQ3YTMxYjIxMmQyYjlkNTcwNWIwNDg4NjBkNmM0ZTNmNDVlZjFiZjJkNWU0NjQzM2ZlYzU5M2I5ZjY4YmU4YjFlOTI4ZWEwNGRkYzRjZTJmY2VjYjczN2JiOGY5ZDA1NGMyYmE1MDYwZmFlNWU1ZmMyMWE2NTAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiZTIzZmEwYzg2YzhhN2I5OWJhMGQzZWMzY2E0NzM0OWE1Nzc5OGMwNzU4N2I2NjZjYzRhZTFjOWVmZjgzYjhjYmZmYjQ5ZDE5MTBiZjA1ZGIzYzdkMGRiN2UyNzI4NWFlOWY2YjQ0MTFkODQzNjRiMjdhNjYzOThmNWIwYTg5N2VlMjA4NTUyNmQzYWM0ZjY1ZTcwODAwMDY3ZDU3YTUxZSI6IjdmZmRlZjIxNjgzYTc1NDg0ZjZhYzMwNDgwMWMyMTNkYzhjYjdlM2NmMGY5NGMzNThhMmUxY2NjOTk2OWU4MzQiOiIiOiIiOiIiOiJmOTUyOTU2Y2I4YzUyOGVmZTJjODMxYzY3YjY5ZThhYTdlNzljMDEzMTYxNDk3YjljNTU0MTVmZDQwYzdmYWU3NzhhNmZhODIxMDlhNDBkZDcyZmIyZjRkOTJlMWNiYzQ3ZjUyZDA1NTQ4NWM5OWQ4OTNmYmVhMWNmMjhkYWIzNWJlMWYxNjI0OTRjYjc5ZWE0NWM0NGE2M2ExNjg1MjE3Y2QzNzMzZGNmYTg4YmI2ZGU2NWM2OGYyMzkwZTQ3OWMwZmNjNmIzOThkYzU0OThhYzkzMDAyZTdlN2YzNjA1MzVkMDgyYzhlNDYzODY2MTEwNzU2NjUwNjA4NDVjNGY4YmRlZTM4YzIzZDJmOTBkMmIxZDc4MjE3ZTg2NWVjZmI2ZGYwMjQ5OGRiODM3ZmU1ODFjNDMzODJjZDFkM2E1MDhiNmRjMDUyZWY3YzRkMjAzNDk2NzlkYjhkOGJmOGRlZGQ3NjNkYThlNWRmNzc1ZDEzMzk3MGJlMDYyYTljZWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNDg4OTAxMzMzM2NkMWUyYjNiOGM0MzY1YmRlNjkwYjY2ZTA2YmNjY2JlYTI1ZjA0MTMyYTA5NjJmMTNhN2Q0NThlODIzZjVlYzBlYTA5MWEwNzA2NTU5M2NhNDRmZTQ5NjExNjAyZDE2NWEzNWFhY2IzNTIyMDY4NDRhY2RmNDFkYzJjODhiNjNiMzY5MTJhZTgxODc1YmZkM2UwOThlMyI6ImI0NzYxZDgyYTkzZTE3ZDhhMGE0NjFlYzgyMDU5MzJlZGYyMTgxNTc0NTlhMjVhN2YyNmNlZGRiNTk5OTIxOTIiOiIiOiIiOiIiOiI3MmFhMzYwMTk4NmU2Yzk3MGI4YzIyNTMxMThiODM4MTI2NDU3N2UzOTFlNDhiZGRmZjBjY2VlYjUxMDE5NzUzOTFhMmM3MzFmNTYxMTMxNmIyNTVjMmE2YzA1NTRlZDZjYmY4YWNiYmNkODYwOWUzZjk5YzNjZWMzOGFhMDYwZWVkYjg2MzU2MzQ0MmI3YmViNzhmMzUyMjE3MzZjNjA4YTkzM2FlYjBkNGE3Y2MwNTBmYmNjYTM1MWNmNzgwZDQyYzUzODAyODRhNjE2MzUyMGE4MDg5NmVlN2Y3MWQyOTYxZDc2MjlkNjczNzkxZjhmYWMxMGJkMDFkMzJkOTVlOGVmYmQ2NTM4MTQyNGMzNzhiYmY1NGI1MzJhNzBjMjg1ZDk4YmRiYjU1OWM5ZjM3ZDZlYWU4ODliODJkNTAwNmZiYTI4OTJhZTE2YWNhYjEwM2FmZjFiMjQ3NzExZWY5MmRiYzZlNTE2YzkyZTM4OGZkYTQyNDM4MDhmOTUxNzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiY2MzMmVmM2VhM2IwZGI4OWM2OTMxMmNhZDU2YjFkZGVhNzNiYTRjMzAyYjg1ZmYzYzY2MDVkMTg5OWE5NmY0OTkwOWM2YTU0ZDk4YmFmMDk2ZWE1YmQ0NmFiYzI1MzUzMDk2NzZkOWQ2YmI5OTE3MjcxYmY4Yzg2Yzg4NTJlMjliZjNmZjViMmZlNTZhYzA5NGZhMzVkY2M1MTU0N2Y2MiI6ImNiODA5NDJiZmJjZDhmMTEyZWQ2MDFjYjEyYTVjYTUyY2MwZjI4MDUyMmRiMTFkYTkyYWM2Yzc2YmUzOTMyZmQiOiIiOiIiOiIiOiIyYzk3MmNmZTE1MzdiYWU0MmVjYzQ2YjFiNDFhNjkxMzUwZjZlNjNjMjAyMjQ1MzQ3ZTkxNjAyYjkzYTRjYmQ1Yzg4MjllNWE0ZjYzZjdlZTBlMjlhZGI2OTM4NmU4YjY1OWRjYTJlNjAwMGFhMDNiZWFiMTMyZGI2ZGFkYThkYzM1YWI2ODQzMzY3MWNmNjIxZmU0NTkzMDE4YjFlYWZkM2EyMTkxNTA3ZmUwMTVlMmE1Njk0ZmRmZTJjMzE4MmZhZGE3MWQxOGM1ZmRlZWQwNjUwODk4NjIyNDljNTUwOGYwNTVlYmVjZWI5ZmNmZTVkMTZlNDQ3OWRjMTdlMmI1OWI1YTBhYTMxY2YyMWZjNmI1OTI1NTY5YjBjYTYzZDFhNWNkMjY4YTRkNDA5ZjEwMzlkOTAyNTU2MjM2ZmIwNmU2MWMxYzA1NGVkMzc5OGNiZTRkOGMyYTdiMmQxODIwNjIxMjU5MTE3NGNlYzlkYTUxOWZiODc2YzU4M2EyMGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjE0MmJmZjkzMzJjNDgxMDMyMjEzNTkwNDBjZGE2NjMyYmFhOTJjZmJkMWFlN2Y4YjNkMGUzM2Q2YTgxOTM5MzlkOWQyMGQxN2ZkZjZlZGQxYjNjYTlmZjYwMGZlOTY1NzQ2YjBiYTFiNjFlOWFhNTE0MWVkYjc3YWRlMGYxOTFiODdmMGIzM2MwZjM2MjA4MDFhNzU1ZGNhMDI2OTg4ODMiOiI4ZGJiY2YwYzE5MDc4MzEyMmFhNmRhNmUwNWVjOWQ4MmVlMjlmOGU3NGU1OWY4ZmU2ZWI5NDkyZmU0MTBkZjZhIjoiIjoiIjoiIjoiMjUzN2E4NjM4ZDU3NTkyMDFjYmMyMjVlODQ0MjA4YzFkMDg0NDNiMDU1ZmFmZTIzMzI5YWVkNWViMmQ4MTQ3MDNiMGZkYmQwYTg5YzJkNjJmOGY0ZWE3NzQ2OTA1YjliZDkwNzA2YjczNDA2MGM5NmU0ZTQwNjY3NTU3NmJhZTg0MzE3YmYzNmQ4NTIzYmFiYWI3MjIzNmI3MWZjNjA4N2RmY2ZjYmU3NjVkZTEzY2QxZWQzMTZmNDk1ZTNiZDA4ZDc4MGNkNmE1ODg0OWM5MjllZjI0YjQxZTk1NjE4NjgxNTgwNDZmZmU4ZDJhODlkMTY5YmEzMTMzMTYxMWYwODcyYzZkMDc1Yjk5MzhlNTE3MGEzYjg2MTJmOWVjZmY0NzQzYzBkYjVhZTM2NWZkYzI2NzhlYzI2MmVlZDNiN2MzMzdlNjVkZDFmZjI0YTg2NzU3NGVlNDYwYmVjN2MzNzRmYzZiM2ZlOWIwZWI3YmQ5ZjU1MDdlYzU5ODhkMzEzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiI4MjFlZDQ0YmQ3OTNhNGFmMjIzYWViZjUyNDEzYmE1ZTBlMjMxYjIwMjliM2Q3MTQ3NWFjMDI4ZDhjMTBmODZkMjM4MmViOWM2MmJhYjU0MGJlODQ3ZTIyMzQ0NzA0ZDMzOWI3OTgyNDhkMGJmMjk5MGMwNjIxMzE2ZTNjOThlYzA3ZjA1YmJhODg4Nzc4M2FkYWViZThmY2VjYzQ4ZmVkIjoiOGQyYzhjZGIyZGRkNjkzNDI3MTk0MWYwNzFlYTQ3ZGZhYjg2OWE1NjcxZGZmOWQ0MjRiOTE2YzFjY2FiYjAyZCI6IiI6IiI6IiI6ImE1ZmNmMTNlNGE2Yjk4MjlhYzMwMTcxOTIwNDc4YTc4NzhhZWRhNjU4ODAzZjJlMzE0ZjllZjhjZjQyYzljMTkzM2NiZDhkZmU1MDUzYWJkMzBkZjY0NGNhMDYyMDcwNjYyZjRiN2U3ODUxZDI4ZmY4MDFjYzRiODc4NTIzYjQ2MTA4OTFhYmIyOWMwOTVhNzA2NjVkZTExOTkxODJmYTE5MzQzOTY2NWNiMTljYmRiMDBhYWYzZmQwZmVmYWEyMjc4MTk0ZTc5ZWJmNjUyNzEzYTI4YzM2ZjJjZGI4M2Y5NmM4ZWIxZTg1Yzk5NjkzODFiNTJiYzM0NDRlOGFkNWQ4MmM5NDk2NDU0NGIzZTY2NDlhZTNmNTMyZDI1YTJlMzcwZTlmYzhjNzc3NTMyMzlmMTMwMDkxYzQzNzIwZmZjZDJiYmNkYjcwYTc1MjIzY2ZkOTM0NjA5MWU4YzA1NjIyN2Y2NjY0ODk0MTU1MmVmYWE1YTBhMzY5MjkxZTllZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiOTc3YmFkNGM1ZDFkMTZhMjQzOTg2M2FmOGJiNmZkYmMyMDZhZDBiZjIwYzQwMzZjMDQ0NjQ1OTYyYzM2ZTJlODUzZjBkNzAyYTU0YjcwNDIxYTUwOWMyNWRlMTI0ZjI3ZTMzMGViYTU4MWZjODJlZmNhNTIyZTQzOTU2MTg3YzllZTRmNThmOTcxZTRiOTFlZDUxY2M4YWVlYTI2ZmRjMyI6IjUxY2I5MWNiN2ZmMWIzOWUxOGFhY2MwYmFhZDIwNDQzNTIyYmY4NjlmMjZkOWQ3MTgyMDA1YjVjYjFkMDE4ZGUiOiIiOiIiOiIiOiJkZjRhY2FmYmU0ZjI4ZWU0N2FjYzUxMzRlZjY2NWE1MGRlYjY4ZGU5YjNjN2UwNzViMjZkNTczMTA0OWYxM2ZmZDAwY2RhMDVmNjEyZjIwZmQ5MDFmZjEyNzI3N2YyNjljMDY5NjA3NDQyZWQ5ZjdiNDE4OTI3MTFhNzJiODNhYzU5MjA0OGJmYjI4YWIyYzY0YzZiOWY1ZWI0NDI3NDUwZjQ0NzViMWMwNGRkNDY2NTk5OGI2MzhkMDZmZThmNDYzZTJmMDdmZjQ2MDczMDAzMTMyYjY2YTVkNGQxOWE2NWJkMDgyMzBkMWRiMDIzNGZiZDA5YTk4ODY0ZjhjYTgyNGU3YTBjYTlmMWQxNjYyMDI3YTYwYzdlOTUzODIxMjI2NzRkODgyMjRmYjE5MmNmYzEyOTk1MmVkNjUxNTkxMmFkZWQ5YzcyYTQ5YTM5YTAwZjlmOWExNmFiYmQzNjFiMjBhMTJiNWYzYzRkZTU0MDEyYWViMWI0MmY2ZmEzYmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjMxMTZlZjA3Njg1ZWFmZmYxYzc3ZjE4NWZhODQwYmI1NjI3ZmI5YTVkNzlmNzJmODAwN2NkY2RmYmZlZmM1NmJiMTc2OTk5MWQ3OGU5ZTQ4ZmNhNGM5N2IwMWQ3MjBkMWQzZWE2ZmE2ZmZiZTI1NjlkYTk0YjZiYjM2Y2QzNGQ3MmMzN2QwMjE4YjNkMDJjMzkxZTA2NTNlMjg2YjI0YjgiOiJmMTM4Y2EzZWM4NjdjYjdlZDdkNWZkYjA4NjhkNzQ3MGRlNWY4MDJmZGI5NDFkYzQwMGFkNTI0ZDkwMzJlMjNhIjoiIjoiIjoiIjoiNTlmMDFlYzA2Yzk3YTQ5Y2M1ZGU0NjljYzJiMzljMjhkYjc2MTIwMjllMGUyNGUzYzJiMjRmOTJjMGFmMjM4M2JmYjlhMGRjY2JlZWZkYWVjNGJiZDI2MDdkYzU4MmVlN2VhYWU2YTRmZmFiMjUxNDA0ZTNjNTljOTVlNTQ2MGNjYzhkOGRlYTRkYjczZTkyNGNjZDc1Mjg3MDhlMWI2YTlkNjJkNDg1YzkzNzY0Njg2ZjkzZGY2ZmI4YTlhZTg2YmJkYTFlMDM4Njk3YjU0ODVlMjdlMGJhYzlhMTgxMjZiZmYxZTdiMTA0NDAxMzA2Y2M0MjRlNzgzZjU1ZWJlOTk0MDE3NmQ3MTIzZWY1OGM5NDYwZTVmYjgzMTFmNzQ1ZmRjY2QzOWNlNTUyNTQ3YWRjY2RjZDg1M2JmYmE4N2FlYjg3ZGZlOGFlNzIwODBmYjdiM2U1YzQ3MThlNzQzYzlmNTc2ZDc3NTJlM2RiMWZkYjI5ZjE2MGJkZTExNWYzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJmNWJhMjdjNDg3YTQwZGZlMzQyZmUxOGU3ZjljNzJiZWJjMWVhMjI5Yzc2MzRjY2U4N2RlZmQ3YWExMTQ0OGUzZjU4NGQxNzY5ZjNlNzZhMDE3NDMwZTZlOWJhZTZiYjZjNzkxNzA5MjVlMTE1NjI3NTMxMWQ4NmQ0YTAzY2ZlM2RmYmY4NWY4MGJiZDcwZWE5OGFmNzYyMjA4MzNhMGJlIjoiMzRmZDEyNGFhZDVhMTBiODUyYjJmZTg0ODFjZDBlYzQ2ZGMyZDAyZWQ5NTgzZjZlMjgyYTRjOTA4ZTMxOTAyNCI6IiI6IiI6IiI6Ijk3N2ZhNWI3MGY0Y2EzYzA0YjZmNDk1ZGUzYmZkYjRiOGFlZjkzYmQxNGM4MjY1M2UzMGEwMGE0Njc4YzYwMmFhODg5NzY2YWI3Y2FhNDM0ZDljMTViZDY4YmQxNGU2NmNkYzYwOTI4OWE2OTFkYmNiMzkxNjExYmU2NmMyMDU2ZjhlNjc1ZGU1ZGI5YjJlMmYxNWU1YTMzMGQwMGE4ODg2ZWI4YjhlZWQ0MDc2MzA2ZDQ0M2NhMjkyZDc4M2ZiMDU2MTg2YWE4NmUxZGM5ZjE4YTExM2UwMTVlNTM1ZGZmZWE5NTQzMTljZDI2ZTU1NzJmNDE3Mzc2NjIwN2VkN2Q5YjhiMmM0MmE3NDEzNDBjMTg1MGEwNzEzOWMwYjM1OGNhYjk0MmJlYzUxYjE1OWU1MGY1YWE5ZDhmYmU3Y2E5ZDFkMjEyN2E5OGZiZjBmOGMzMDk0YmVhNGUzMDM5ZjdmN2FiMDgzZmM5ZDA1MGUyOWU3ZDRjYzJkM2Q0NGNhZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImM0ODY4ZGI1YzQ2ZmRlMGExMDAwODgzOGI1YmU2MmMzNDkyMDlmZGVkNDJmYWI0NjFiMDFlMTE3MjNjODI0MmE2MThmYWJhNTRhY2JhMWUwYWZkNGIyN2NiZDczMWVkOWQzMDAxNmI1ODI3ZGMyYmZlNDAzNGM2NjU0ZDY5Nzc1ZmU5ODQzMmIxOWUzZGEzNzMyMTNkOTM5ZDM5MWY1NGEiOiIxMzUxMzJjZjJiOGE1NzU1NGJkYzEzYzY4ZTkwZGM0MzQzNTNlNGY2NWE0ZDVjYTA3YzNlMGExM2M2MmU3MjY1IjoiYTBiYmQwMmY2YWE3MWEwNmQxNjQyY2EyY2M3Y2RjNWU4ODU3ZTQzMWIxNzZiY2YxZWNkMjBmMDQxNDY3YmQyZCI6IjkzZWUzMGE5ZTdhMGUyNDRhYTkxZGE2MmYyMjE1YzcyMzNiZGZjNDE1NzQwZDI3NzA3ODBjYmJhZDYxYjliYTIiOiIzNmQ5MjJjYWNjYTAwYWU4OWRiOGYwYzFjYWU1YTQ3ZDJkZThlNjFhZTA5MzU3Y2E0MzFjMjhhMDc5MDdmY2UxIjoiMmFhYzRjZWJlZDA4MGM2OGVmMGRjZmYzNDg1MDZlY2E1NjgxODBmNzM3MGMwMjBkZWRhMWE0YzkwNTBjZTk0ZDRkYjkwZmQ4MjcxNjU4NDZkNmRkNmNiMjAzMWVlYzE2MzRiMGU3ZjNlMGU4OTUwNGUzNGQyNDhlMjNhOGZiMzFjZDMyZmYzOWE0ODY5NDZiMjk0MGY1NGM5NjhmOTZjZmM1MDhjZDg3MWM4NGU2ODQ1OGNhN2RjY2FiYzZkY2ZiMWU5ZmJlZjlhNDdjYWFlMTRjNTIzOWMyODY4NmUwZmMwOTQyYjBjODQ3YzlkOGQ5ODc5NzBjMWM1ZjVmMDZlYWE4Mzg1NTc1ZGFjYjFlOTI1YzBlZDg1ZTEzZWRiYjk5MjIwODNmOWJiYmI3OTQwNTQxMWZmNWRmZTcwNjE1Njg1ZGYxZjFlNDk4NjdkMGI2ZWQ2OWFmZThhYzVlNzZmZmFiNmZmM2Q3MWI0ZGFlOTk4ZmFmOGM3ZDViYzZhZTRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiNDZjODJjYjgxZGU0NzRhZTAyY2NjZmFjMTU1NWQwNmU1ZGM0NGI2ZWY1MjZlMGUyODM1NmZmYzhiYzZjMGZkMDYyOGQ0ZDk0MjgzNGI5NGZjOTc3NjA5YzhlYzBhNjM5MmMwNjkzMTMwYzYyMTVkNTVlMzdkYTQzZDY3ZGVmNzE5MDUxZTk5ODcxZGI2ODEyOGUyNDUyMTdkMmFhMzIzMCI6IjVkZTUxZTNmNDk5NTFiYWIzNjQ2MDcyNGE2M2YwNDZlNzVmNmY2MTBiZTc0MDVmNTUwMTZjOTNhNTlmMTg5MGEiOiI1ZGJiMTNmNWI0ZWIyNzVjYjc1NzUxM2U2YjhhZjZmZWZkN2M5YzllMGY1MzA0ZmRkOWI0YzA5Njg0NThmMjJiIjoiM2ViY2VmZjMyMzJlNzVjNmJlYjc5ZDk3Yzc4ZTkzMjQ0YTI1N2YwNzcyZjgyZTIzNDUxOGM1MGUzMjI2MzBlYiI6ImRjNjRlNWExZmM3YjMyZjAyOTRkYjEzOGRjMTMxOTQ2ZTU2MDIyNjZmNGNkZjAwMDM3ZmZlNTEzYTQ0ZmY4M2MiOiJlMzQ4MDU0NDAzNmEzNjg0YTg4ZTIzZmY0MWE0YmJkODEwZjgyNzAyMWNhNDVlODAwYWFhYTM2ZWQwYjliZmZjYmJjYzk5YTFlZjFmMTUyOGI0YmZlMzk1MTRjN2EzOTBiYTEzMmQxNjgxMTM4YzRiMWI5ZjFhMGZhMTc1ODgzN2RkZTM1ZDBmNmMzODY4M2JhNDdhOTA0OTM3ZGM1ZWUzZDNiNzVmOTA5ZTVmYjYzMTFjNmNkYTVlMTEyMWVkYzc3NGU2NjA5MmFhMWRiZGU4M2U0NjgwZmY5NWMwYmJjMjk0NmFhNGQ0Njc3MGYyNDdjYWE3YjcxYmRlZmFjOTY0MWVlOTk3MDBmYmQxZTU2MGY5ZjdmYmQ0NjJlZGU2NGUwMDljZWQ5MGM0NGM2ZmYwM2I4OTBlMTZjNzljN2I4Yzk1OWEyN2RlZmE2ZjA2MjE2ODg5MTk3N2M2MzdlYzIyZWNmZTIwNjAxZDQ5OTQ0M2YxZmIwZWNjN2Q5NTA1YjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJkZjgwNTNkZWYwMjYwYWU3MWY2N2UxOTdhZThiNTQ3YTIyOGU5YjY3YmE3OTA5ZmMxY2IzYWRjYTUxMDU4YjE1ZjZkNTk1MWYwYjYwYzk3MmQxMzliNzVkYzQ0YTM2ODAxMjdhODQ3OTlmZDc2NzJlNDI5ZjIwODc2YzE3NWQxMzVlNWY4OTRlZGM3YTRkYTMzNGViOGI3M2EzMzRiZTYxIjoiMjY4OTAwMzZhOWIxN2Q4ZTgwNWMzODU2ODYzMGUxYzE5NjA5MWZhYWQ1NDZiYThlYjk3NmYzYWEwMzFhODkwNSI6IjQwZWE2YmViYjBjYjk0YjdlNTI3Nzg3ZTE3ZWY5ZjdkM2VmYjg4OWZjMWU0N2U0OTg5M2FjNWM0YmJhOTg4YzIiOiIwOTAyNzFjMzA3YjQzYjk1MWMyMGFkM2YwODFkMjgzOGRmMDkzNmE0YmJkYzVlYjZmMmUxNmIxZGI0ODJiMWFjIjoiYzIwM2NjMWEzYWY2NjhlNDU2NTNiYWI2YjFhYTM5YmEwNjY5NDkxYTA2ZDAwY2QzOWM5N2I3NzdhOGJmZDRkNyI6IjBkNjhkOTAzYzg1YzAxNzI0MTlkYzlmNzgyYzVkNjdhMGIzMzY3ZDEzY2IyZjczNGZlZDk1YzdmYzA4MjI5MWVkYmY0ZmE4MzM1NGM2NTg4MjI3ZTQwYmJmZjA4MmJlMmRkMjc2YzI2NDgyM2E4ZjMxYmExOGIwMDk1NWQ3YTFmZDYxMmEyZjM3ZDgyNGJjODJjZGVjOTcyZDNmODM4NGRmYzc4YjUxZGNhNjFlODE1NzY2Yzg3N2VmM2QyMTEzNzA0YzgwNWEyNTBhZWU3YjU1Yjg0OWFmMDQ4ZmViMzUzNmZlNzNlYzRmMGJlZTk3MDA2ODgxZDVlZWQ4ZWEzOGJhMWI4ZDE2YTNiY2Q5MWZkYTc0OWI3N2Q2ODg5OTdiZmYwOWYxMDRhMmQ4Y2Q4ZTEzM2VhNGFhNzY0YjIzNzc4NzM1OGRhZGFlMWMyNTA5MmNmZTA5Zjc5ZWZlYjhlYjZlMjBjMzljYWZkY2VlZDkwZTYwMmYyMjFmZTZiMWQ2OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImIxYTFiNDY4ZTFkNTk3MTZhMjNmYjAyOGUyOTU1ODhmMTdiZTZhNzllNTg5MDI3MjM3NjgxZmU5Y2UzNTQ4NjBiMWNjMzM5MThhNjRjOGJlMTcxZTU5NWVlNmEzYjFlZjQ2YzJlZjIxZGYyODE1NTI4NDgyYWI0YzdhMzI0NDliOTdhYzc1YTUxZGZhMWM3ZTY3YTc2M2YxN2U5N2JjZDYiOiI3N2U1YTNlYjZhYjM4NDE5Zjg0YjU3OTk3NjI3YzZiZWE3OTcwM2M5NWJjMWNkMjRlYTczZWJhMmVkYmVkNTQwIjoiNTJhYTBiZTk1MTgxNmQyMWEyZWRlODlmNTM5MTNmNmQ1ZDcwY2M1ODBhMWNkYThhNDlmOGU0OWE2YmVmYTkwOSI6IjViZDhlNGFjNjFiZGZlNzUyYjVhNjZjZjJlMDQ4ZTgxMmE4YWVhZThlMjBjM2M4YzQzZjMxMTgwZTRiMTgzMDMiOiJhZjVlYWIyMWU0ZGQ5NDQzYjFiMTZmNDA0MTNmYWViZGIwZTA4Njk5MWRkM2M1M2M4YTUxYmM0MzQzNDgzMTFiIjoiZDQ3NzQwNGJjYWYwZWQ1Mzc4ODM1NDcwNWYwZmE5ZjQ2YzRlMmJlZjJjZDk0OTMyYjYxNGIzYzM0ZTBiMGM3YzI4ZDc0ODMwNzVjOTc0NWJmYmQ0ZTMxZTU4N2ZiMWRiNzdkNTU3ZmNkZmQzZmVhNDdkYTNmMDFlNDI2MzVlZDNmZDg3Y2Y2Yzk4YTJmMjBhYTgzM2ExYmI3NGExNWIxNThlNDc4NDFjZWJlNTNlNGQ1ZDhjODVjYWU3OGFkZTE1NmUwMjVhNzczN2FhOTE5N2IxMjJlNzNhMjljZTBhODgxYzdhZGM4ZWMyMjhmNGMxNGU1NmM3MjJhY2IwMTY1YjE1OTVmMDEwMjY2MTUxODAxODEyYzAzMWVmY2VlNGE3NzM5ODc2Nzc3ODE2YWY4YmFmNGQyOTQ5NjkxMmEwMTJmMWYzM2MwNzEwN2IyZGI1ZWJkNjgxNzIyZGZkNzZmM2E1OGU5ZDc0MjZlN2ZhNzVlMzI2ZWFhNDE2YzVkODIwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiMDk4YjhjMTA3ZmJmOTQzYmNkZDIxOTlkZmQxNWYxMzBhMjBkNTE4ZTk1ZGM4MTk4ODc0OGUxZjBlY2M1YzQ1Zjc0NjIyY2EyOTQwODA3ZGY4NmZiMDVmMGFhYjQ3Mjc1MjVmMTlkMWQzYmRhMWY3MDgyNWYzZTFmY2IxOGQyOWU4ZTQxMDYxNmMxMDVmZGE5MzI0ZjQ2MTdhZjM5ZjAyMSI6IjIyMGJiZjIzMzk0YzNjZWYxNTZmNjgzZDA1NzM5Yjc2ZjM3NTM4YTBkMzYwNjAwYmQ1MmYwMDc2NDI1YjVmNWYiOiJhZjg4ZjA3NmFiMzlkYjFkZDBlNzAwMmJhZTE4Nzk2NWNkMTQ0MzgyYTNkMWNhN2IxZWNkNjVkMzQ2ZjdjMDkwIjoiYmFiOWQwOWRjZTUwNzNkMTFmY2RmOTUzOTUwMWRjOTk4YjZmZmZhOGEwNzE2ZWRjZjU4M2E3ZDczODVmZjQxYyI6ImNhZjhkNGUxMDUxM2U1Y2VhY2FkNmY5ZjE0NWE2Zjc5ZTVjMjQ1YWVkNDk2NWFlODVlMmU3YzU5MTRmOTc1MTAiOiJmNTU2NDk0YjM4NDlkNzhiMDZhZTc1NTcxZjBiOWM4YzEwODg4NWZjYjA0MWRiZDc4OTJiZjYzOWQ4ZmY2YzgyZTE5ZThjZTJkNWFlYjU4ZThiOTY0Y2U0Zjc1OTc2YTBhOWM3ZjNlYzgzNzNiODMxNTBiODhkNmM1OGZmOWI4MTAxMjRkNGFjNjJkOTU1YWE2NGQxOTRhZmVmMmY3N2RlNjk5NDY0MmVjODZjZWU0MGFhN2E1NTkxZTk5YTYzZWRiZDhiYmRiMjJmYzNjMjUwNmJlZWU2ZDUwN2ZlMzRmZGI0ZDRmNTI1ZGNiZTMwYjU3NDdmZjkyMGExM2Y5ZTIzMDg5OWZmZmZiYzU2MTVlOTk0ZWU5NmExYmZkODg5MGNmNjA3Mzc5YmUxYTM5ZDE3MzY2MmQwOTY3YzlkZmVhMzNiMTRkNzhjYzg4MThjMmExOTU2MTk3Zjg1ZTkyYmMxMTEzM2FjNGY3NjU3ZjJkYjIwZWNlZWNhZThjYTYzNmEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiJmNTRlOWRmOTI3NTJkMzBlZWMwMWMzNzU2ZDU2OWJkYjM5YWJjZGVkYWI4MGIwYWFjYWM3NmFiNDA2NzIzZjQ4MGJiMzU5YTVmYzZjN2FlZWJiNjcxOWFiNDQxMTRhNzVhZmQzNDBhZjIwMmJlM2NhMzBlNGRlNzk0YjgyNjIzNzEwNTIwMmRjZmY1ZDEyOTFjZGFmMjY2NjczMjc1ODI1IjoiYjY5Zjc3ZDVhMDg4NTBhMTNmOGU2ZDA2ODQ3YzRiZWMxODFhYzBmNmI3MjBiZTNjMDZjMGI2N2Q0NDg0M2M2ZSI6IjQwZjE0YzMzNDBlNzA5MmI4OTg3NThlYTNjMzY3NTA5NDNhY2FjN2ZiYjZhODNmMGRmMzM5MmY3OTM2NzQ5Y2IiOiI1YmNmYjA3ODZjNDQ3Njc1MDMyZDJhMzJiMzA0ZjI1NzM3ZGU1OWNkMDdjODRkMzg3NWM0NTQ3NWIxNTc5N2Q0IjoiNjU2YWIyMDRlMmMxODM0ZjM0NmQ4OWMzN2EzMDE2NGRiNDE0ODI3ZDgzY2E3MzJjNzFlYzcxZWZhODE4MmMyOCI6IjZlYjhmMjc2YThmZjUxNmY3ODlkOTRkOTk3ZjMzYzJlNDBiMjI3Nzc2ZmFlMDY4MWM4M2ZkZTY1OTQ2MmI3MmQzN2NkNDhjOTU4OTk1MzBjYTA3MmJmMjQ3MDk4NmVmMjlkZmIxOTNiZTdlZTlhYjNmOGNkZTIzMTdjOWJmMDJhNWY5MDFjY2I2MmJiNjY1YmMzYTEwOWVhYjdlMzkxMDg4OGE1MjJjNzY1ZWI0OWIxMWQxYWQwZmJjYzQ1YWJlMzg0MWU5YmI0ZmMwZTczMTg4NDk3Y2ZmYmE1NGYzZmY4MjI2MDc2N2QwZjcwZWExNjY4ZjQ1MTkyZTY3MTkxMDJlNzVhYTVjYzQzMDg0YzUwYmRiZDFiYTQ5MWJiNjFlZTllNTE3NTA5MmMxZjUwZDU2YmZiNjg5NzdhNTY3ZTQxYzFlMDVkMmQxNTIzYzE5OGRlZDczNzA3OTEzMWZiMTJkY2Y4NDcyMTlkNzFmYmVkYjU2NTk0MTFkN2FmZjJiYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjJjYzMzMGIzNGM5NzZjODU5OTM2YzIxZTJhZDg4YmI2MGZmMTUzZTQxMTMxNTY3ZjU4YWQzNGJmZjVjOWNiNDE4OTM5ZmVkNTYzNTZhZjdmZTIxNTk4NmE1ZDBlZDhlOWEwNzhkY2IxZDNmY2VlNmI5OTcxNGVlYTNiZmNlZmIzN2EzNDRhNjlkNDE0OTY1NTM5ZGRjZTlkZjIzOWJlMmYiOiJiZjUzMTA4M2YzNTA2NmViZmFlYWJkNjdiODJkMzkyZWY2YjEyMWU3ZDk2MDNhNTQwN2M1YmM3NGNkNTk2MDIzIjoiNTFmMjIzZGM0NjFhYzJkZjFjNDg3N2Y2NWNhODc2ZDYzNWQ1MDkzOWZhOWRkNTg2YzE3NmQ4YWI3M2M2ZDYwNSI6ImZmOWQ2ODA3ZDcxZGVkMTMwNWQ5ZTJjZGM4MTFkYWMyZDczNzQ2YjAwMWI1M2VjOGE1NTA5YzRjZTBhMDdlZmEiOiJmNTIyMmM4OTY2NjU5OTc0ZGQ4YTcyNDRkMmNlZTU4OGI2YzlhMjcwMGYzMzg2ODNmZmY5Y2NjNDViNmQzODA3IjoiOTgxYWJkYTBlNDA1Yzk3NjQzNWVjN2Y5Mzg1NzBkOTExZTViYmIzMmFkZDUyYThiOTRlNTI4NDg2ZTlkYWZhZTEzOWViMTVjYzJiNTZmZWRmYjllNGIyZDEwZGJjYWE1ZTZhYjk4NWJlMTZjNjJiOWI3NWEwMzc2ODQ5ODY4NDNhN2EwZTNiYWFiYzM0ODU5MjUzZGYyYTA1M2RjYjAzNTJhMDU1NGZkMmQ0NTMwZGUwMjUxYjFiODUyZDFkM2I2ZTA4NTQ4ZTIxNTkwMmVjOGRjNDZlZTg5ZjNmYzI2MmM3YTM1YWVmODIxNmIzZGVmNjViZDU2ZjA0ODJhMThhMzI5Zjk2ODYzYWZkOTUxMzA3NzQwZmQ4NjUzZDMzM2Y5MzI5NDBlMmE4NzUyM2FmYmMxNjJjNWMxZDJiYmUxNmYzM2E0YjBlZTBlYzc1YmNmYTZhZWU2ZDgzNDgyNjU5Mzg3MzhiZTYzOGY3ODUwNmFiNzMxZDNlOWFiMzQ1NTUxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTM4NDoiYjRlNWFhZDliZjRmYjAzZGVkNjRlNGJmNDBlY2M2ZmUyMjE0MDQ5YmQ1ODg5YTVhZWVhMGJmNDdiZTg2NzBkMzI5ZTZlZDA0NTM4ZGQ2ZDIwNzc2N2MzNjc0MDZkNDgyYmE3YWQyOTIzMWZkOTQ0ZjAwYjhkOWI3NjI5MzViOTM4MTllYzYyZTBjY2ZkNDhmNjE5YWM0MGM5YzIwODMwNCI6IjY3ODI2ZDJiZjk2NTE0MDRkNWRmNGRiODRlYTY0ZGNhYjEwNjk3ZWNiOTBjNjgwNDFmNDIxNDUyMTA5YWYzYzMiOiI2N2Q2OTgzNDY1ZmFjZjMzMzY5ZWViZTBiZTEyZGM2NWZlNzM2OTY5ZThmNDE0NzhlNDRlYzI1ZDQ2MWU0NDM1IjoiNjVmOTdjOTkxNDBjOGM5YmEyY2UzNzcxMGIwNmY4MjJjYzBlYWEwMzU4OTE1N2EzYjU3NWJjOWM0MjNhZmMzZiI6IjE5YzM3ODg2ZDYxM2QyNGIwNTkyZWEwYjNhNDY1ZWM4ZjhhOTIyOWFiZGUzZmI1ZTAxMjIwMzJlMWFjOGRmYzUiOiIwNTc3NzQ4N2JjMTUyMjYwYTg1MmUxYjMxYTA5MWY4ZTkyOWVkMjJkOGE2NTJhNzdlNDM5MWFiY2U3ZWZjZjA1NzBkZjNkNDY2ZDU2ZGM1MWVmMTRiYmM1NTMwOWM2ODMxNjU1YmE5N2M2MDUwZTU2MzA4M2ZkMWYyZmU2NWI0M2QwY2Y4NzYyZWY2NTk4ZDk2N2I0NzNiNjhjNDE0MzI4N2Y3MGQwOTZhNmVhMTIwZTNjMDdmMmE5NWI4MGIzOTNmZmVhZmFjMmQwMzA5ZDM0OWJmZjAxN2E0OWI5ZWE1NDdhNTc3NmI1YzM4YjllOTgxZWQwYTQ4MjU4NTNjYWZjZGYwZjE3MjY5YjlkZjYxODlmYWJjMzAzODhhMzgzZTNjMjg5NDk2MjVlZjNkNTlhMmMzNzFlZjQxNmFjZTg2NThhZGMwZTBiMDEwNGYxYWNkNGIzNDliOTFiNjYwZDY0NDEyMTY4ZDNjOWUyOTY4MGE1ZTMyNGU0ZDBhYjkyNTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBMzg0OiIyN2FlMjEyMDgyNGYzZDQxNmJiZWExZjk4NzQ0MGM1MDdhNGYwMWZlZDA4YTFiZTI3ZTZlYzE2MzkwYzkyYzRmOGRhYjA0MjAzNTQzY2FhMzk4MTM3M2ZiOTkxZDg1NTM0MGMyOWJhZjQzOWYyM2JmYjU5OWE1ZWViOTVlYzIwNTlhZjI0ZGQ4NmMwODI1OTU3ZWE4MzkyY2UzZDk4MGYxIjoiY2Q2NDZiMGQxOTcxZjI0OWY0YzRkMWVhYTE3ZTYwYzMxMWQ4MTMwNTdlMGI3MTgxOWE1MDNhYTQxZTVjNmIyMSI6IjkwZWUyZDBiZjA2Y2I5NDE5MGU2NTA1YTc1ZDEyZGQ3N2MyNjY0OTdkYzk5YzVmODliZGU2MGJlNjc4OTA5OWUiOiI3ZDgyYjUwY2RmYWFiOWI1ZDIzZmI2NjE4YjU5ZGQyOGNmMWE4M2M3N2ZmMjk5M2Q5ZjFlZGI4N2VkN2JjMzg4IjoiZjdmNzI4ZDhlZjZhZjhjNWU3N2NlZjFlODM3MDMwYTZhYTVjMTJiYzgxNDIzYjBlY2IwN2EyZGI5NWEzMmEyOCI6IjRiMjVhYWY0MzZlYjYwMGExMDNkM2ZhZThlMzAxZDI3NTUxMzJiM2RlM2M4YjRjNDQyMTI5YTg4ZWJiM2FiMjBjNGQzYTU0MDc4ZWNjNDE5Nzk5NGZmMDRiZjBlNDYwOTE5OTc4ZDQ3ZTQ1YzdkMTBkNzZhMWU2M2FlMzQ2MjRlMmY2NDEyNWFlMWJlZjMwNGVmYjFhZjY4OGYyMGQ4ZTIxMmY2ZGY0ZTExMjQzYTQ5MTc3ZTRiNjQ1NjAxMGQ3ODRkMGU0YTk0ZTc1MzcxYTc1YzQwNTBiMjdlNDgzNTk1NDlmODI2OGRkMmEyMjkwZWJkZTIyMjgyZDk2YjJmMzhlM2YwNjEwM2RhZmFlNWY1NGYwMDE5YmZiMDEzZGYzOWE3NjQ4MmVjN2Y4NzhkMjZlZjBlMzRjOWMyMWU2N2ZiY2MzNDEyYWEwNzM5ZTg3NWRhMGU5ZWExMzQwNTkyMTQ0ZWIyMzIzODVmYzdlNjA1ZWNkMTBmZWU0NTUyNDcxOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtMzg0LCAyNTYsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImRiZDVmNTA4ZTgyMjZhY2I5NTdiYmM0OTE0YWIxMzgxMGI5YjViMmI1MWExYjU1Y2Q0YWM2MGY2YjZkNGMzNzA5NjM0NDhmZDMyMzk2OGMyN2Q5N2UwMDViMWEwNzljOWUzYmExNTE4ODcwMDZjNTY1OTNlY2E3ODA5YjIzY2I3NjhmNWIzNzAxYjQ1NmJkYzg1ZmI1NjcyYTgxZGIyZDkiOiIwY2RhNWQ1MDEwNzJjZjQ4MmQzYzU2YzQ5YTNjOTI5YjQyM2Y2ZTE1YTNlODM1ODg4YjNhOTg3MzY0N2ZmZGRjIjoiZDNmMzhjYTVjMGJiY2VmNDY5NzZjNmE1OTY1YTg0OTNmNzE0YWEyYzhhMmM4MTc1NzZjYmMwYmQ2NjUyYmViMCI6IjIwMDE0NDIxZjlhZjI1OTg5MmYwMTdkZDUzOTJjYzk3M2YxMDNkNDczNmYzODY2ZTY2MzI5ZTVlNzcwNGUwZjgiOiI2ODZhYmE2YzljNmMyMjFiMmI0YTdkZTc2Njk2M2U0ZDk4ODA2NzZlN2U2YWM4ZTY0NGRkMjczZmNlZTUxOWJjIjoiYjcyMGM3YzU2ZTEwYzllNDM2MDM2ZmE4ZTFmMWQxYzBjMGI3MjQ2YzI4YmQzNmU1ZjNlODhmOTg4Njg0Yjk1YTAxMTI3YmM2NGNiY2YxMmI5Njg5ZjcxOGJhYTUyMDQyYjA4MzdmZWE3OTEzOTFlZTJhZTQyZTU0YWNjNTcxMjM5ZTViNjU0NDg2YTAyNWFjMjVmNDZmMTAyODBlY2RjNjVlZDA5OGU2NWUwN2RjMzg3MGIxN2FmOGJmZDU4ZWRiYTAyNmRjMTJiNGZmMDQ4MzBlZjEzMmQwN2RjZDdjNjJmNjcxNzJjYWYyNjIwYTIwNDg2OWE4MWUzOTgwOWRiN2JlZmEyNWM1ZWQ4YTc0YjZkMzA2YzIxY2ZkMzc3ODE4MGQ0NDRiZDk5MzE0YTQzMGZmNGVmNmI3MDYxODMyZGY5YjgyNjAzZDZhMGY2NDZiMzk4ZTdkY2Q4YmIzM2E3OTI2YmRmYTA4NWE0NTBkM2RlNjhjMWU4Y2IyZWU0NTI0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjcwOTMyMjRkNmJjZjA5MTVlYjc1MzYwYWI0YmI3ODljMTU4MzRhMzcxYmFhMjRkZWVjZWIzM2Y4NmU4YmZiNDZmNGUzNDMyNWRkY2JlZTY3MWY5ZTQ1Zjc4ODdjMTQ4MTIzODk5M2VjNGEzMDllMTBkM2Y4ZTM5NTJjODQwZDU2NDY0NDA2MjUzNGY5ODVhNmI0ZTM4Njg4ZDJjODAwYTMiOiJlN2NmMWYzMmJhMzY5Y2Y1NTQ1ZWU2NzJjZDY3NDZlYTlhMzM2ZGU3MDM5ZWNiYjI1NDE5MjU5ZWFiZGZhNDRjIjoiYmIxODZhNDYwMzg3YmFhZTI3YzExYWE4YzY1ZDZlZTAwMzU3N2VhYzQ3YjI1OTI1NGE5MzNmODJhYzY4MzI1MCI6ImQ4MjM1MzVlZDk3NGI3ZmY5ZjE5ZGMzOGI5NDk0YWE5OWY4ODE0M2UzMzgzYjVhMTgzZWMwMGM5MjViZGZlZGYiOiI1NjU0OGFmNzk3ZjRhMDdlYzQyMjczZjg5NTgyMmQ4NzdhMzExYmYxZjhkZDVjOTZmZDg0NDk3MzJhMTNhOTIxIjoiMTU5YzY5MjNmYjcxZjk2NzBkYjRlZWYxMmRhZGQxNDNlZTcwMWJlYzliMGY3NmI1NmU5YjFiOGM0NzNlZWNjM2UzOGNmMDZjOGYzYjBjM2Q0OTU4MGU0OWNhZWFjMGZkNDhkYTVmNTNkMGQzZTljODI5YzI1M2ZhYzRlNGYwOTczMDE3N2E2M2UwZTc1OWYwNDMxNjllOTE0NTljOWNmOTU5ZDIyMzBjN2I5NGJlMTY4Y2Y0ZmEwMjU4OGQ3OGFlZmJjODU1ZDU1ZTQ0NGQ2NzFhNjlkMjc0YzY2YWQxODUxYzU2YzBkODgwNDE2YmNiYWQwODUyM2NlZmEyZmIzODRkZDBmOWYxODhlOGE2MDFjZTBhOTJkNDJmYWFlZDBhMjk5ZDZhOWM4Njk1ODg1NDcxMjQyN2IzNWU3M2EwODE3MTkzYjUwZjM1NTdlNjZkNjRhZDgwZmE5ZmY4NzQyN2I3ZGU1YjdlNjMxMmQxZDk5ODhiYTc3YmU5MGQ0Y2NhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6ImVhOTZmODc4NzQ1OGU1MDVmNTg1OGUzMWJiODViNmUzMzUyMDZmNmQ2ZDA0YmQ5ZDMzMzAyOTE5M2JkMmEwNGU1Zjg1YWQxNTI2NzVlY2MwOTAxMTlhZmY3NzIwNzM5YmRiZTM0NTUxZWJiZWYxMGU4MjJjZDI5ZTlhZGUxNDg4YzIxZmQ5ZTc5ODM2OWQ1ODVkNmY1ODE2OGQ1MDlkOTQiOiJiYTQ1ZGYxYTE0ZTIzMzYxMjAxYTQ2N2QyY2ZiN2EzZGNlMzEyODA2OWE4YTU5YTlhMzg4YjhlMzFjNDhlZmI0IjoiZDU1MTI3MmU1YTYwYWExMjMyZmNiNDc2NWU4NTNkZTJjY2VjMDg5NDFhY2M3NTE4OGVjYTM3MTIwZmE0OWFhYyI6ImMxYjM0MzQ3NjkxYWU5ZjFiZjZiZTM5NmU4YjQ5YWFlZGIzODMwNzUyNjYyNzM5OWZjMTBjNDg3NDhjM2E3YmMiOiI3MjJjMGVmYTQ0NTI2MmY1ODAwYWJmNzVlNDNkOWRhYTQ0ZTNkY2VlN2E3NTI4ZjczMTNlZTUyZmNhOWYxODAzIjoiZTJmODczNzU4YzRlNzE3MDRkODU0NWRkMWVhYjUxMjA2YWMxMWRmZGIwMGRmZDFlYzllNTNiZGM3ZjZiNTdmNTIwOTcyNzA0OWQ0ZDc4MTA1OWIwYmM0YjYwOTFjOWJkZWU5NDcxMjdiOGM4ZjAzZjFlZTVmMzY2NTcyMGE0ZjZjNjc3NzY4MmVmMTkzNzcxOTA1MjI1NGFlYjk3ZTNhMTdiNmI1NTJiY2JjOTE1NDU1MWE3ZWQ0MWQ4MzdhMjdiNmMzN2I0MjY1MDg0MDliNzUyMzZjYzE1NmRhZDg5ZDg5NmYyNWM1NDQ2N2ZkNDVmOTY5OGExMWM3Y2UwMWJmYjFmZTE3MWU0ZDMzZmFmNzNhMzBjODk5MmM1MWE4MzhlOWMwNTM3MzU0MzcxYmY3OTE0NmE3OWE2ZDQyZDRlOTg3Yjk3NzMzNzdmYmYzODQ5Nzk2OTBiMmMwNGMzMzJmMjI1NjdmYjA5MjFjM2UzMzA4OGQzYjAxMTkyMWZjYTZhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjkyYWMxOWIxMzMzOThiN2Q4ZGRmYmEzYzYwNDY0MjFiMzYxODkyMzI0MTA5N2I4ZjY4YjZjNzQzMGI2ZDIzMmFlOWFkOGY4NjRmMzU4YWZhN2NhYzcyYmJjNGZkOTBmMTZlYmM5YzE1OTEzYzExMDk0YmY3YWFhNTEwZTYyNDFmYWNlMDE2YTk5Y2EwOGRlNjUyNWE1NzBiZDE3NDFkYzciOiIwNTE3ZWE3NDEwYmRlNjRlZGNjNzBkZjQ4ZjNjODdmNTc4YjM4YjhjNzA4N2RlZjE2MDMxZTUyNzYwMDM3ZGYwIjoiNDM5Yzk3ZjYyZDZiN2FhZGFjNjQwNTdjMDAwM2E0MWE0NGVlNTQ5ZjYwYWZhOTI3OTdlZTdjOWFlYmZjODE2NCI6IjY2OWQ0MmY5OTAxZTAyOWJjZTc1ODRiYmQyMmExM2E3NGU2ZjZiYTUwNDQxYTI2MzM3NzNiZjVhYzc0NTEyMmEiOiI4YmYzYzFhMDhiMmQ4NDU5ZGY5NmQ2YWJmYTkwNzI1ZjFhNzM1ODA5ZGE3OGJmOTlmN2ZkZWQwMjMwNzcxODA0IjoiM2I4MzJhN2YxZGY1OTFiYmE1NzFiZjc2NjI5MTRiMGU1YTNiMzRkMzgyMjhlMzc3ZTRlN2RjYjRiOWNiMzk2YWMyNjhkNzFmYmZkMmUxYTVjZmY0NDI5ZmViYTM2ZjU1YzdlNDVjZGFjNDlhNWZjOGE3ODcyOTIwMTFjNjFmNGYxMDJiYjlhNWQ5YzhmZTFjZjA0Nzk1NmYyMWM3NDk4N2Q4MDk2OGQyZTRjZmEyOWJkOTJhMzVjYjk2ZGQzNzJkOWJhYWVkOGQzMWJhMzQ2MmI0MjA4NGRjMTg0MWE0MDQyMzExYWJmZTRiMzM1OGY1NmM5ZTBjNjllMjMzNjM4ZDNiZTU2ZDBkMjY5Y2YxMTBkNTIwMDc1OWVjZWI2M2ZkZjNiMGFkMjU5Mzc4NTdkMTI5YjY4ZjAzOGZjNzNhODQyMDQ2Y2M3YzQ1MjkyZDZlYzM3NjZhYWZiYzIyZjE0OTE3NzQ2MjQ3NTFmMmM1MGZlZTgzMGUyNGEzNGEyN2I1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjdhMzQ2YmQ2ZDg1MzgwM2QwNzg0NGNhMzQ4ZjNjNDgzN2ZjZTNlM2E3MjdmNzEyMjIzZGEyNDhjZDgyZGI2ZWQ0YTk3MTBjZDhiOWYyZTdiNTkzY2NhNDJkYTdiMWExMjg1YTc4ZDBjNzY0YjI0YzNlNGIyMWQyNTkxOWM1NDAwYjRhZGFmMDY4NGM3ODczMjZjMTkwMTA3MjhiYzZmOTQiOiIzZThkZTM5YWIyMDZlZDE2NmIyMDNjOTcxMDMwNTllNmE5MzE3ZDQ3ZjdhNzZiZjQ1MTE4MjljYzJlMjdhNGNjIjoiMzI3OTc2YWVmMjM5YjIwODMzZDM2YjdmMzUyZThlNjU3MGY4ZjMyNWI1Njg5NzVhNjYxYjU0YjhhZGE0OTEyOCI6Ijk0MTljZGYxYzU5YWJjMDMwMTNkN2Q0NDNjNzM0YWZmNTdhNmQ5N2M4NzBhMDM3NjJjNTBiNDU5ZDM4ZjVlMDkiOiJmMmM5YzQ5Yzc2YmQ2ODNkNDJkZDlkZTlkNDVhOTdiNzg3MTBmMzlmMmVlNDgyZTg3N2UzYjA4NDQ2NDdmOWUxIjoiMjRhODM5OTFmOTQ1NWEwNDEwMjEzY2MxMzg2OTZjZjRlZWNlN2IyY2FjYTBhNjI3YzZjZTAyM2I3ZjkxMmMxMTU3NjhhYjhhYWQwZmIxMGUzNTU5MWQzNzBlMDM3MmZlMDIwODIzMzY1YjViYmU3MTM0MTdiYzJmMDUwY2JmODZmZDYyNmNhZjkxMzIzMjcxZWVlYmQ1ZjJhYWUzNmZkMGFjZWQ2Mzc3OTU2NTYwNGVmMjY1M2EwNzcwZmU0ZTQyNjQ5ZWNlYjYwODliYjc2NjJjYTNkNzQ0ZmUxNzhmNWFjNWJjMjBjZTdhOTAzMjU0OTdmNTVmZmQ5YjI1YzU5YTZiODJmMDc1NTNjMDgwZjBjNDVmZWQyM2NlNDdkOTcyNjA1YTJmNjAzYjcyZDA5ZDYwODU0OGEwNDAzMWRkMmJiYWU5ZmY4OTgyMDFlNDQ2MDQ3OTU0OGQ3MGIxNzZlOTE3ZmYzZTM2ODNlNDlmMzMzMGNmYTc3YTI1Y2M0OGZlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS0zODQsIDI1NiwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEEzODQ6IjJkOGZiODc5NmQ4YTE3NjRmOGM4MjRjNTViODgwYzUzZDIyMDU1NTlhZmJkZjFjZWNkYTNkYzJkMDViZjAwMWU2MjUyMDc2ZGFjMDEzYzcwOTRhZTcyY2E4MGNhZmNlMmNhYjMwYTE2MGNlNDlkYmQ2NDY3MTBiYzQyOWMxNjMyMzFkNzNmZTBlMTIxZjhjZWY4YzAyZjcwNTk4ZmE4NTMiOiJmZWVhOGFlMGIyOTlkNWY3OTMxNTM4M2Q5MzhiY2Y5YjUzNmQxMWUwMzZiMjgwNTZiY2JiYzdmY2VkZTIxY2ZjIjoiMWEwZmM0N2ZhOTVjZGFmZDIwMzZlYjUzMTRlMGY1NjI2NmU1OGFiYjBmMDNiNWU2Nzk2Mzg5NDViMWZiY2Q1OCI6IjMwNzA3ZjM3NjMzM2RmMjAzZWFmYmE3ZmM1MmI0MGQ4ZjFkOTc1MjFhNzFkNTc5YzhiODQ1N2FjMTMyOGNhY2MiOiJmMTc5YzE5ZTQ1YzRhNGYzY2FkOGI1NDVkMTE2Y2EyOWU0NWYzMjI1ODBiN2ZjOTcxNTMxM2JlNTNmMDQ3NjU4IjoiZWFmNzUyM2I5MTBiNjUzYTMwNWY5MTIyMzYzZDk2ZTE3ZmQyMmNjYjliNjE1OGNjNDJhY2VlYTQwYzM0ZWFjNzNlNDk2ODI3ZGQ1ZmU0MzEyZjEwMmJhNmFhN2FlZTkzNGQxZjQxNjA5YmYzZTE0YzI5YWEzYWNhMjEwZTNjYWJlNzA3NDRhMDlmNGMxODBmM2QxZGRmOGJlMGI1MzA0MDNjNTIzODc2MTIyNmYyYzJjN2FlMjliMjQ0MzlhZmQ2NWQ2ZDVhMGFhOGRhYTExYWJjZTM2ZGYwMmNlNjFkMzUyYWIwODk2NTEyMmUxNjcwODczMWQ3MmE5ZmI1ZGUwNzFjMjBjNmNiMDM5MjczNDk4ZmYxNTg4YzkwMWQ5OTcxNTFlZGJiZDQxODcwMDMxZWUzMzdiMzgyMzNlZGZkNzhhYWIzODlmYWUyYmQyODBlNGJjODVkMWJkNjY1NTI2OWMzMzU5NzUzYjE3ZmRhYzUwMmMzYTJlODcxMTQ5ZmJmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI0OGMxMjFiMTg3MzNhZjE1YzI3ZTFkZDliYTY2YTlhODFhNTU3OWNkYmEwZjViNjU3ZWM1M2MyYjllOTBiYmY2YmJiN2M3Nzc0MjgwNjhmYWQ5OTcwODkxZjg3OWIxYWZlMGZmZWZkYWRiOWNjZjk5MDUwNGQ1NjhiZGI0ZDg2MmNiZTE3Y2NjZTZlMjJkZmNhYjhiNDgwNGZkMjE0MjFhIjoiIjoiIjoiIjoiIjoiMDVkYTZhYWM3ZDk4MGRhMDM4ZjY1ZjM5Mjg0MTQ3NmQzN2ZlNzBmYmQzZTM2OWQxZjgwMTk2ZTY2ZTU0YjhmYWRiMWQ2MGUxYTBmM2Q0ZGMxNzM3NjlkNzVmYzM0MTA1NDlkN2E4NDMyNzBhNTRhMDY4YjRmZTc2N2Q3ZDlhNTk2MDQ1MTBhODc1YWQxZTk3MzFjOGFmZDBmZDUwYjgyNWUyYzUwZDA2MjU3NjE3NTEwNmE5OTgxYmUzN2UwMmVjN2M1Y2QwYTY5YWEwY2E2NWJkZGFlZTFiMGRlNTMyZTEwY2ZhMWY1YmY2YTAyNmU0NzM3OTczNmEwOTlkNjc1MGFiMTIxZGJlMzYyMmI4NDFiYWY4YmRjYmU4NzVjODViYTRiNTg2YjhiNWI1N2IwZmVjYmVjMDhjMTJmZjJhOTQ1M2M0N2M2ZTMyYTUyMTAzZDk3MmM2MmFiOWFmZmI4ZTcyOGEzMWZjZWZiYmNjYzU1NmMwZjBhMzVmNGIxMGFjZTJkOTZiOTA2ZTM2Y2JiNzIyMzMyMDFlNTM2ZDNlMTNiMDQ1MTg3YjQxN2QyNDQ5Y2FkMWVkZDE5MmUwNjFmMTJkMjIxNDdiMGExNzZlYThkOWM0YzM1NDA0Mzk1YjY1MDJlZjMzM2E4MTNiNjU4NjAzNzQ3OWUwZmEzYzZhMjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijg4MDJkNDNmNzAyOTRmNTMyZDJhZjBiZTA4NTJiN2E5ZWY2NTg0ZThiMTYzMTg0NTMwNmI1ODNhYjA1OTExMWMwYTg4Y2M2NzBiOGE4MjdlNTA1N2I5MDI1NjM4NDBiNmJhNmY2OTE5Mjk1ZjIyMDZiYzg3MzhlZWUyYjRlN2I0ZDNkNDkyYjk0NTE1MGM3NmVkZjQ2NmNkZmVkZTQ4NjgiOiIiOiIiOiIiOiIiOiJjYWEzYTVmOTgyMmY0OTdmYzMzMzVjM2E0MjYyMjk0ODQ2Y2Q0YTY4NDJjZGIyOTBhMDExYTk0YjZjM2MyN2E4MzYyMmRmYzdlNWM5OTU0ZTkxZmVhZTVjYTgwMzQwODNlMmZjYjQ5M2UyMTBlNWNhZjMxY2ViNjNhN2YzZDU5ZGNmYzNhODU5ZGFjNWMyNTA5ODFmN2I2NjNlNGVmNzIyMmVkZWQzNTNjN2Y0MjkyM2M2YzZkYjAwNmU5MjdiNGI1ZjQ0YjczZTk4NmRkYzQxNzZhYzAzYTVlYzYxOWIzZWJjOTIzZDRhNmQ5NDMwZTViOWFkZjc1YTUyOThlNzZhMTEwZDBhMmE0ZTJmNzg0MWY5MDBjNDA2N2NmN2VlNjhjMzU2YzRmNWQxM2JlODg4NTgwMWQxZTU3OGNhNGQyY2MzMmQ0OGI1ZTYzMDNhMGJjNDE3YWZhYzAzMzc1OGYzZTgxMjY5M2M0OTEyOGUwZGIxYmM5ZWEyZmEyZjJjNDVjYjM1NzkyMTIzYWY2M2Y0MmRkYTNhYmM3Y2Y4YmY1ZGFjMTc5ODcxNzhjYzBhNjRiMGZkZTVjOWZmMjAxMmJjZjU3ZTkzMTAzZjA4ZGIxZTNhOWY3MjdlMWNmNzUzZWE0NGQ2MmVhZDJhYTU0MTBiOWUzNzgxMmM0M2Q2MGViMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYTUzYWRjZDhjOGVhMTZiYTgwYTU3ZDlhNTU5NTUxOTdjZTBkOTU3YmM5MmQ4YTBiNTQ4YmVkY2ExNDlkNzhmZmE5ZGRkYjY0NzEwZDVkZWU4OWYxZWRkMzdkOGI1NWRjMmY1MGJkNjdlNGE2YWQwZjNhMDE5NDdlMzY3M2IxMDY4ODE3ODcxMGJhMmU3YmI1ZjNkYmQ4MjZjNzkyYzlkOCI6IiI6IiI6IiI6IiI6IjdmODlkYjNkMGQ2Y2Y3YzU1NTdiNDU5OWQ3ZjRjOGI1MjM1YzAwYzljYzM5M2Y3MzRhZDdiYTk4Y2I4ZTc2N2NlYWE1Mjk4OTJkYzMwZDI4ODVmMTYxZjQ3YjljODFkYzI4MTFiYWYxMmYxMjBiYjk0NTgwOTZjMTgzYWUzNWUxOThlMWE1MGZiOTFmODYzYzVkODJiMjdlZDEwODY0ZGQ2ZmQ2MDFmNGExZmNiMDdiYzgzOWJkYTE4NWE5YjE4Y2U0NWQ4MDAwNDliZDJmNDFmZDkwOWExMmViMmZlOGFiM2UxZDJmMGYxMTg3MTA5ZDYxZTJhZjZkZjBjNWNiOWZiODAxY2ViMzE5ZDBhYTlmZWE5MThhZTk5OTE3MjBlNGQ5ZDc5Y2VkODI4NTc3NDM4MmE0ZDg5MDAxZmNmYjg5OWE3YzNmYjg2NGYxYWQyZGViZjVmNWMzOWFiMDQ0OTZmZmUzODNlOWVmZGEwZWFiYTQ4MzI1NTE0YjA5YTI1MzY0MGYzODZmZTEyZmQxYjI1ZGEzYjIzNzNlZTE0ZWU5ZjJmZjA2ZmUwNjNmNzcxNjI0ZjUzOGMwZTU2MjAwMjliOTQ5MGYzM2U1ZTRmZjFhOWJjYWJhNzYwMDVjODI5ZTAxMTdkMzQ1YjczZjk4NmQ3YzgyNzZjYjU0ZmQ4N2U0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJlZGNkZGMxMzYwNGUwMzZmMTY2ODdlMzZiYjU3NmNlY2Q3MWIyMGRjNzhmMDcwMDMzZDhiNmYxZjgxMjViYTJkMmQzZWZkZDlmMDFhOTM5MTBlYzI5ZmM0NzE4NDIwYTIxMzg1Zjg3OTgyMThlMWFlYmI4MTAzNzlhMDg3MWI1MzRlMDY3YjA0ZDZlYzlkNTIzZjdjZGM4ZDQ1YmVkNGQyIjoiIjoiIjoiIjoiIjoiZGYwMmVjOWJjY2MyNWZlYjdhYTQ3ODdmNWY2M2E5MmVjMDViMmNjMTNmYjkyYzIwOTI0YWJhOWUxNzIzNDM2NDY5Yzg3NjczYjg5ODdlZjE5YmU5OWViYWZkZTkxZDI5M2NhNmVjN2MxZmE0Y2M4OTAyYTU3NDE3MzM4NTM4ZmJmODk3NzcyY2I5NjA4NTc2OGU4OTNjNWEwOTMyNzM1NDAwNjA3NDk5MmNkNmE1MTdkNmM1N2M3YWY1NDk1YTNkNjQ1Nzk4ZWIxOTYyYzBiNTZmZjBjOGM5OGUxOGMwOTYzZTVhNTgxMjMwOTA5OTgxYjMwMTc5N2Q3Nzk3MDNmMzFiMjY0ZjkwZDY0ODNlYWJkOGE0MWZlYzhlYTY5YTU3YmVmZTFmNTNkNDcwZmM4MmJjMzUwMjlhNGQwODllZWM3Y2EzOTg2NDg1YTUxYWQxZTU2Y2RmMmRlYTVmYzNkMzlhYTk5N2E1M2E5OTI0Nzc3ZWI2ZjNiZjEwNTZhNTc4ZmQzMmFjYTEyNWE3NGM4ZDI0YWNiN2I5OWMzN2YzNDA4MTg1MDcxMmVkZjFiNjg1MWYwYTVlNjQwYWU3MTkzZDNmNDlmMzY1NGFhZDNjZDEwNmU0MWU3OGYxZTkzYThhMmQwMWFjZGUwZTZjZWIzZjE5ZTBhYjQ5ZjRiY2JlNDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjdlZTAzNzhlYjU5NGJkMmVmMTI5ZjM1YzljMWQ4NzcyN2M3MWFlNDcyMzYzYTU5NjQ2N2EyZDcxODcxODYzZDg0NzZiNjM2ZTJmZmRjMGRiNzBiZTVmNzc5MmFlOGE4Y2Q0MGQzZjAzMzQ3NzAwZDNjYTUxNTg4MGNmZDc5NjJmOGNlMWRjZGZjNWZmMTM0ZGFmNTUyZjhjMmE5MTE3NTgiOiIiOiIiOiIiOiIiOiJjYzE0YzBlNzJmMTg2MzkyZTQ2MWY2NWEwYzA3MTFlMzJlNGIzM2E0MDc5NTMyMTU5NDFmYzVkMDYyNzlkMDg3NzBiM2QxNjVkNTY4YjJmZGRiOTQyOTlkZTJlN2E2ZGYwODIwYTY0ZTg3Nzk4OTMzOTBhYzE3MzgwMWVmODUxNzBhNTJiOWMwMzM0YjRmZGU1NWZlMDhlOTBiNzljZmYxMzY2YmM0M2MwZmE4ZjVmODIwNmNjNDY4OTg3YTM4MTIzYmJlMGQyN2U3ZWEyZDIxZTZhMWYwMjYxOWI4YzI3MGE1ZTQxNmVkNTBmZjdlNDJkOWZhYTJmOGQzODNlZGE1NTg5OWQ4NTMwMjU5MDYyMmFkYTljY2Y1ZDE0NDMxM2U1ZGY5NTY4OGZkMWE5YzQ4ZGRjYWY3YWYwMzA2OGUxMTcyOWFhZGQ2MjY3NjFmM2JlMWNkMzYxODhjODlkMDhlM2Q4YTA5MGU3ZWNkNzM5NDA3N2JiYmQyYzdlMTc2NjY2MmVjODgyOTAxOTQxZTA5YmU5OTQzYTcyYTM0ODE3MTQxNjExZWY4NGMwZjE4NDhlZmRiY2YyNDUyMTVmMjkwNDI3YTYyNDcxNzRjZjNhMDhlNDExMGQzZWVhMDViYjg1NDg0Zjc1ZTE1NmUyZmU1ZWEwYzY3MjNkM2Y4ZjA0NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZmIzNWYzYWQ2Yjc2MTg3MzVkZGQyNzNkOTViNDQyYTM2MmI2ODIyNTAyYTIxN2U4OTNiZTNlMzZmZDdiZTQ1NTNjZmRlMGVkZjVkOWI1ZjE1YmU5Mjg4ZmY3OGZkMGMwOWViYWM0OWU3MTQ4NDE2OTE3MGYzNDNmNGIyMWUyNDRkMTM5MWY5NjMxMTJkYzA2MTA3NWQ5YjdkMjZjZDE3MSI6IiI6IiI6IiI6IiI6IjZmNjgxNGY1NWM3ZTIyNmFkYjc2ODdkNzNlYjRlOWI5MDlkNDdmNGI1NzY5M2NlMmM1NDM0MzYzMThmYWVhOTIzNzFlOTUxZDVkMzM4YzA2YmQ5NWYwZTdkZWJkOTE1ZTIxNzliZWVjYTk4NzhmYWYzZGJlYWZlYWJlM2M5YmM4ZDY0NDVmODYzNjQ5YzY2ZTljMzYwOWI4YTNkNTQwODBiNjhjZTE0NWIyZmQ0ZWNiM2M5MzgwMWMzMDdjNTU0NTEzYTIxMGU0OWRlZTEzODI4YjIwZGZmMDkyZGUyZjMxMmZkNjBiMmFhMGFmNGVkN2U1NjRmMDZhZGVhNmIzZGZhNzQ2MzZlN2FkMTZkZWIxOWU5NWRmNzFkMjg2MGFlZWU3NTMyYWE5ZmYyYTA4Yzc2OGYxMDg2YWJlZmI2MGQ4NjA2NTdjOGJkNzk3MmVjN2JlMzc0MDI5M2I2NDcxY2M1NTI2MmNjMTIwZjk3YzBjMDhkZTc4YjcwNTA2OGRjYmIyZDBjNjU2Y2NiOGUyYzZlM2ZlZDE5OWVmYzg4ODQ5MmVjNjQxZDRhNTQxNTIzNjZkZWU5NjAwOGE4MDc5NGNiM2I0ZjVhMzZhMzRkODMyNDQ2ZDAzOTkxZTQzNzQzMTVjNjdjMzM2YWFkMzE3OTIwYjk5ZjljMzVhNDkzNTgyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJhOGRiNjEyMzQ3MjNkYTJmMDg4MzIyNDU2M2ExYmMwNGM3YjRkMDQwYTdkZTNiNjU5ZGVhMDA4NmJhYjdmNDU0YzczZDFmOTE4ZmYyOWUyZjk4Y2VlNTYyZTA1ZjVhZDZmMjc4MWY1Nzg2MjI4Y2YwY2JiNTBkMmM4ZDk0YTEzMDczODNkNDEyMjlhOTBjMGRjZjE0MmI5NGI3MDRjNTZhIjoiIjoiIjoiIjoiIjoiMGZhNWZjMDA4YzU2Y2E0NzAyNDY5MmZmNTVmNTAwZTMxMjQyMzgxOGQxZWViNzdiMWEzNDQyMDU4NzE4ODg1NDc5YjQwNTc2N2I4Nzk5NDNlNzNmYjE2OTU2ZWUyMjkzYjIzZGNiOTNjZmRhNDIwYTRmMzdjYTVlYmExYWFmY2I4NzAwY2Y2ZjM4ZjJhY2FjODg2OThmMWMwYWJlYTk3NTI3MGRkNDQzNjI5MmM4Y2E2MDU3NjY5MGRmZDkxMzcwODBkYjJiM2E0MjEwN2VjZWE1YTYzMWFjNDEzMzg0YTkzMjlkNjBhMzU4ZDJjNTg2NDdlZWRjYWMxNjRkZjUwODIwZTg3OTM3NGJjMmUwOGQ5NzFiZjVkYzY1YWZhMzNlY2Q0NzJlNWZlOTY3NzYzNWE3OWFkNThiNDg5OTMzZmU5YzFmOTkyNDI5ZTVkMTZkYzk1NGQyZGUwNTliNzBiOGYxNzBkZWNkMWYyMmMzNmIwMzRlNWYxNzUxMzg4NDY5MDFmNmZkN2ZjZWExNDkxODQ2OTg0Y2VkOGI1OTVjNDExYTlmNmQyMWYzZjE1ZmE1YTA3M2VmYjVmODI5ZjNiMzRkNjAxYWE5MWVkOGNjNDMzNDU4NjkyZjQ0ZWMxOTMwZjNhYzU3ODFlYTAwMWEzYjc5ZGY3YzNlODJhZTUzNjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijk1ZDc4NTFiY2Q0M2ZjNzFjZDk2NTY3MzdhMGIwNWI1ZjgzZTU1NDUxYzQ2NzIwNjEyMzBiOWIzNGJmZjcxYzAyNWJkNTFjY2MzZjRjMmExNDQwN2Q1ZDU2OWQyNTBiODQwZTI0ODI4YzMxOWMxYjdmZTA5M2U1NTUxZjhhY2QyMDE2N2IyODM5YzhkNWNlOTcxMDUzMmQ2OTgxMmI4YTYiOiIiOiIiOiIiOiIiOiIzNThiMzZiNGI3ZjExOWZhZmNiZmRkNjE5YWRiZjk1OTMwNDhlZDczNjQzNzc3NTJkZWYzNDE5Yjg1ZWFiZDQ0NGU4N2QxZTk1MmM0NWY3YzliZWEzZDI5Zjg0NWYyOTdkYmI0OGMyMzM2Y2Y0NDIxNmZkZDJlNWMxNjRjODFhYzY4OGZlZWJjZjQ2MDkxMGVjYjhiOGY2YzNiMDE1MDE5NWIyYzdmMWZiOTk4OGViNjBjMDU2NGYwZTA4OWU0YzI2OWNkMTk0MTRmNjcxODEyMGFkMzc0MmY5NjczMDIzM2RhZGQzZmI3ZDllODk4Y2UzOGI1YjgyNDRiMGFmNjJkZGIxZTI2ODllOWFhZjI3MDE3ZWEyODY5OWQwOGI5MzNmOTIxOTY3NmE5OGY4MTc0MjFjMzYzYTUyNjc5ODgzM2Y5ZTc2M2RkMTkzNDFmNTY1OTljYjU5NGYyNzQwNTExNTFiODdiZjIxOWQ0Yjg3YjcyZWVlNWJmNGJjNzgwNTNhNTlhYTUwNDBhZDMzNGUwODI4M2UwNjBiN2I1MjhhOTA4OWYyNGIyODczMzQwNzA4NTNjMTgwMDIxYjUwNTk1ZTBmYmJkZTE4NDIyMTI3YjBlZjdlZmU5MmI5ODc4OGQ2ZTg1NjgzZDk3YjY3OTg2MTE1NDg2M2ZiMGQ0ZjlhMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZWU3YTYyZWZjODQwM2EwZjk4ODcxMTQzNmVmYWNjNDRiNTA5OGY5YTM1MjZkYWM0OWFkOTM0M2M4MGM5OGVlYzUxZjA2NDk2OGViMzdkMWE4YmM4NjA0ZTMzMjRlNWE2NGE5OTMxNTQwMWEyZGY4ZDg5MzVlOTRmZWEzZmM1OTkwMTA3YmFlMTlhZjg4NjQxNWVkZDZlY2NjOTVlZTk0MiI6IiI6IiI6IiI6IiI6IjdlM2EwYTMyZDY5NTRiYWQ1NzlkNTRmMTM2NTk0YWRkNmNkMzA2MjhiZGQ1M2RjYjA5YmFhOTg4ODQ1NDdiY2YzYzhlODRlNGMwMWIwNjYwZDYyZGQ4YjQ0YWU2Y2U4MzA0NDdjNTQ4MGYzMDk0MmU3NDJiZGU1MDA5ZmE3NjllYTg2NjJhOGJkMjYxMzViYjQ1ZTVhMzgwNDM5ZDViMWIwMTE0OTY5ZjQyYmFmZTRkMWQ3YjdjOWE3Yjc2NTU3MzUzOGE3ZjU5MTdhZjg1YmZhMWZjNTc3MTBlMTBlYjRhMDAwNjJjMTc2YjkzZjRiMDIyNTU2MDZhMTEwODQwYmZiYjkxMzFhYTI5MDYzNWZhYzUyYjI2MDE5MGU5MTcyY2ZlZjk0N2YxNTIxMTNmZjNjYjNkZTczZTIyZWVkZmM0NGYxNDNiOWMyM2MxNjcwYTA1N2NkZWRhZWMyOGIxNDVhYzJlNjk5ZjM2NmQ1ZDY5NWQxY2JkMjU4YjU5ZDRjODhiZDhkMTA2MmVhNTc4Yzc1OGQ1ODIzYzQzYTg1YjVmZTFhYWE4ZjNlNGI2ODA5MmQ0MTA3ZDZiMTFlZWI2MTNlZDA1ODc0NzI1OWZmMGViNjg1YmRkNDJiOWRlZTU0YzFiZTliNjEzYTRlZjY3MmM0ZDMxZmY4NGE3M2Y1NTNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJiZjAyNzU1ZTRjM2RiOThjZDI2YzBhYmVkZWRiNWNlMzYwNDk1YzFhMmVjZjE5NGU5MjJkODdkZWNlZjQxNzM1ODRhMzc4OGRhZDViMzA4YzUwZTdjMGEwYTEwYzdhNDJmM2M3YjJhNTJkZjIyMzBjYjhkYzdiZDcxYzM1ZDQ0OGZjNWIxZWI0ZjkwM2VjNjM0MmNkZTExOGFjMjg0YzJmIjoiIjoiIjoiIjoiIjoiY2UyODA2NTk0ZGE3YTZmMjczODU1OTNiMTQ2NjliNWM2M2I2YTViMDI0MGQxNTBhYmYwZWE0ZGFmMzI1NzQ2MDRmY2RmMTBjNDk2NWE5MjIwYzI4NTg4NWFlMmQyY2MxZGU4YTg2Nzk2MzU3NzQxNjQ1OTY0ZjEwMmU2NTE1MGQxMTA2Y2I1YjhjNWJlYmY1ZmRjZDVlNjRkY2VkOWU0ODljMTg4YjYxOWMyZWNmOTZlN2Y5Njg2MWRhZGNmMGU3MzgxYjRkNjI4MTY1ZGEwZWM1YjdjOTBkMzY5YWZiNzA1YzM5OTg2ZTQ4ODRhZGJlMDVmYjdiNzRhOWJhM2IzNTRlODU4Njk3YTFkYjUzMWFlMzJhZTgxODQ2NTg2ODgwMTJhYWVhYTRmNjliODViODAyZjVhZGFlNjRmMDQ5ODU3ZDEzMTRjNzUzMmJkNDAwNDNlNjFhZjQ3Y2RjN2VjOGU4NWZlNjE4MjdkZTM5YzJmMTgyNWZiMDI1M2VlNzNjYTI0MjM1NDRiYjY0ZjhkMmFmZTg0ZGI1Y2M4YWQ3Njk0ZTE3NzQ2OGRjYjI5MDkyYjRjODVkMDY5YWQ3YjFjNDFlMTM5NjQyMDc2YjgwNzVhYjAyMjhmNTQyZmNkMmE3YTYzNDA5MTdmODJiN2UzNTZlNTY1MmVjYTI0YjMwMzEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJhMTg4MDY1YzllZTkzNjM4NGM1NTcyYjA5MTAzNjBlY2Q5ODRjZDBlYTkyNmM4NmIyNjlmMzhmMTA0MGQ0MTY3OWJmOWE5MWJkNGU5ODZmNTAwMDM2Y2ZhZmM1ODNlZGZmZjExNzBjZWE5ZjIyYTMxNDBlN2Y0ZDE5ODYzMGZhMzUzNjI2NTE4MDYyMzQwZmQyZjViMGY2YjRmZTdlMjE3IjoiIjoiIjoiIjoiIjoiZWExOWNjOTFkODBkMzdiOGYxNjM4OGZhNjJmZThlMWYxMTRmMzJmMmE2MTA4MTQwYjYwYzE5OTQ0MzJiMTg0NDVjZGMxMzFiMjFjODg0Yzc0ZDE1NWFlYTJhYTdmNjJjN2ZmZGYxMjg4ODZjZGVlYmIzOTVlNWI4ODE5ZGRkYzhjNzgzNDQ3NWQxOTE2MmNkNmE5YzAzNzk5NWUzZjkzODFjZDU4MmVhZGE0MjRlYTZiNjdhZDczNGMyMTZmODM4MGJmYzhmNWRjMGU3YTFkOTNjNDA2ODcwYmQ2NGExOTBhNjcwYThjYTk0ZGZjMGMwMmI2MTM2NWExZDkwOGE2Yjk4MDYyN2FmNmJjZTAyYTQyZGQ5ZGVlOTBkYmE3MjJjZjZiZDdhYjg2Y2M0MjAwYWY5M2VkMjI2Y2RhZTE0ZjI4ZTI0MmM2Zjk2ZGI4NjY2MzFiMjU4YmUwMTBkNDdjMmViOTVmMDFmY2JhNGZkNzE2NDZlNmRiNTQ5NDdhMGQ0ZGZmODZhMTA3ZTIyNmIxZTQzNDNkOGExZDIzMzM2OWY4YjU2MGY3OGM4NjU0MjZkMzQxZjVmMDcxMzc0OGIzYWM0MDMxZDNkODRiYjA1N2NkZWQ2MGIxMWRlNDRjYjIyMTg2OWU0MmJiMDU0MTI3Mzg4NzQwZTUyNTM1YTExYWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI1OGViY2VjNDUzOWY0YWYxYjMyYTg1NDE4MWRkMGY1MTJiOGM3MDRmYTQ3NTM3MDk2YTc2OWVmZjI4YzU5MTY1YTE4MjI2Y2ZjNzc5ZWZjOTU1MGY3YmUwMjAwNmQ4M2MyMzBjZDZlNjkwOWUzMDFkMWU5OWVjZDFmZmYyYjJjZDAwYTU2YzdhNjg0Yzg5MDdiYmIxM2NlM2U5YTBjYmNlIjoiIjoiIjoiIjoiIjoiNmY0ZTg2ZjMwOWY2OTE0NDYwMzk2MWM1MzY2ZTRmOWIxNmQxMGMxMDU5M2VhNjg5YThlNzQzNWEzMjdkMjUyNGY0NDY4ODEzZWE3ZjMyNDhkOGQ0YmJlMTdiMTc1Y2ZjNDA2MTcxNDk5ODM5MjhiMjY3ZGMwYzRkYjQ2ZDJjMTdmZThiYzA3NjQzODY3NThhZjFhODI0ZTEyZWI4OTdmZWFmYzFjN2VmNjZmODBmZmNkOTkzYWEwMTZlMTM5OTkxY2RlODQzNWVlNmJiMGRlNDVhN2ZiNjFlYjFhNmJlYjc2ZTAxMmI4NDhlYTAwM2Y2ODc1MzdlNGJkMDBjZWQzN2VmZGRhNjYzMzNiNTNhOGRkNTIyMGMyODFmYmY2OGJmZDllNzIyODVlNzgxOTc4ODFlZmM1NDBkYTRjMWJhODBhMjI2MDEzYTJkNzA5OGQzNGFmNDExMmU3YjhjODY1YWYxNTQwOWY2OTAxYjk1MmZlZTRhNDc0ZTQwMjcwNTFlMWRjZTg3OWRkZjVlODRmMzk0N2RjOWI5NDExOWQ2N2U2YjQ4ZWQ2ZmQ2YjFmODEzYzEzZDNmZjMwZTEyMWVmY2U3OTE4NTMzOTI1ZjUwYzhlMzgxZTg3ZWE2ODVmOTkzNjE5YmFjYzllZmMwYWViYzg4NGI0NTA2NDZlZWFhNWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJhY2FkNjA2MTU0ZjZhZTA2NzM4ZDY3ZjUxN2NlZjRjOGRkOGRiYjJlYTMzM2JhYzllNjliYzBhNGNiOTg4NzdiZmNhM2Q5MDY3MzlkNDQyNjA4YmZlNjZjYTQ4YzNkN2QwMWY3ZDQxMGY0Njc2NGJmMmJhNDI2ODcxM2JhNzZiZjcwMjYyMDNlMzUzMTNlZTc1YWRkNjA4NTA5ZGU4NjdjIjoiIjoiIjoiIjoiIjoiZjY2MjFiYjgyZDg4MzA3MDdmZGNjNmY1OGE3Y2VjYzc1MDFhNTZmNDRjNmJhNzgzZjZmODE4N2IyMWY1ZjNlYWZkMWYzOGFlNzgwNTg0YmE0YWNhNTk0NjZmNmY1ZmRlZTFlODJiMjhiNWY4ZGI0YzRkY2FhMjhmMDMwNDM3ZGU0MDdiNWZhYzYzMmM5NmU0M2ExMmQxM2I1NDkwMWZiN2MxMTJkYWVlMjY5OWQ4MjU2YzZlZTI2ZDYwYmIyNjdkZmRhMmM2ZDZiNjFjOWM2N2NkNWE1YjA1NWEyODNmYTAyZDA2Y2JiOGI5YjFjMzEzMWQ3ZGVjY2U0ZGI2MTI0MzczOGFmNGY2NjUyYmYyYmUyM2Q0YjQ5YTFhN2JmYzcxMTA5MmNkZjY1NTUyN2VlNzg1YTg1ZTkwYjU4ZmU0NzhhNDYyYjY1ZmQ5ODY4ZjgyMWZmYmE1NjA4MDA2NGQ3NDcyNGQ4YzJmOThjZWJkOWViOGZjNWJmMTMzOTliMDRjZjE1ODYzMzQ5MTNlOGU5MjMyZTEzYmExMGY5ZjJjMzY1ZTUwMTU0ZWU5MWEwMGQ5ODFkNGZkN2E0ZDQ5YzNhMmNjMDk4OGQ0ZDcxMjA3NDkxOGYxMWMzNzhjNDBlNzYyYjYxMGM5ZjRkZjNlZjU4ZDcyOGEyM2RmZjNlMDM1ZGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJkMjcxNTk0N2I0MjBjYTEzNmE0Y2Q1YzkyMWI4ZmFlMjA5MDA2NzlkODdmZmRlNWJkYWRjN2IwZmI1MzJmMzVlMTAwZDhkMGI1OTgxMGJmMzIyMmIwN2ZhYzNhM2MzMzRlNGZmZDk2OTgzZTUxYWQwNGMyYzViYjdmZWExNWU4YTAzZTM2YjkyZjQ4N2IzMTRhMTkxYjVhZTQ4NjJjZmU5IjoiIjoiIjoiIjoiIjoiNzU3NTFkZDM0NjNjYzIwZDNmMjdlM2VjMDg1YWI2ZmNjMzcyODUwMzBmYWJiMmE2ZTQzYzBkNDM4YzdkMjEzMzQ2ZDIxOGQzNGUzZmRiYWJiMzQxMWJlMjMzNzA3MjU3MjkwNTk5YmJjNjk1MTJhZDk3MWNlYzI0MzE1MThmMzgwMjI4MTZiOWY3OTRlMjMyOGIzOWE4Y2Y2YWZlYWZjNGQxZjQwOGY2ZTA1ODYzYjY1NDM2OWRhYzA4NjdmZWVlMGMxNzAzNGQ2ZDA3ZWYyMmRkMjE3ZjVhZDBmMWVmMjVhYzgyZmNlMDE4NTczZDBhMmIwZDVhOTI0YWViYzVmZDljM2ViOWNiZTM4YWUzZDYwZTBlOTJmZjgwMGM5YjEwOGZiZDg1YjJjZGUxYjY1MWUwODBlNjYyNWVjYWVlYzliZTY4NGYxZjdkOThjYWVlYzlhYTVlMTQ0NWU1YzNkZTZhZmI1OTBmYjNiZTMwNThiNDAzZGY2YzU1Njk2M2U5OGNkYjMwNDYwYTNjNjg4NDg1YmZhZTI4NzAzYjM4YTVjNDI0NTRkOTE5MzVmYzc1MTllMWUzYjMxMWJhMTE3YjFiY2ZkNDgwYzAxNWNmOGU1MzVhZjY2NTIxY2IzNTgzMzYyMWJmMTAyNjEzOTE2NDA1MmFmZjZhYTRlNTFmZGMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJlMWQyZDcyZTc5MDdlNzIxNGNiMjY2ZjFlZjY0MTM5NWU1NGIzOWU4MzY1MzA0NjYxYjBiZWUzNzFmMzI0NjUyODQxN2ZmZDU4NDIwZTQ4ZWMwNjNkZTVkZjQ0NjJlMzllNmNhZTFiNWYzYTNhMTJmYWFhZjM5Yjk4ZWU1OTJjOGQ0ZjU2YjlkNDUzNGFkZDUxMDRiMzU3ZDc4OGMyM2FiIjoiIjoiIjoiIjoiIjoiNjI2YTA4NjMzMjFhYzc1ZTBiNjI0MGVhNmE2MTk0NTg2MzRhOTc4MjQ1YzE1MzM4MTljOTcxMTRlNjM5MTQwMDljOWNhYjczMmYxMzEwZjYwZjY0ZjAzM2IwMDcyOTQyNDIyODY3MWYzMzQyNTA5OTgyMGFiMTA4NDEyZDQ2MGYzMmMwMDE1YjczOTg3ZTkzN2I5YmJkZDI5ZTViZmI4ZGJiNmM5NWQyYjY5ZmNjYmMyNmIwNjBjZjBhNWRjMDk5MmZiMGU3NmIzOGJjZDY0ZmQ3YTcyNjcxNGU4Yzg1NDJkNDRiMmY5YzVkMmYyZjhjYjM3MGI5NWUwODZiMDdlODhmNDkyZjUxZmU2YzI4OGQ3OGI3NmQwYzNhNjE0NmM5ZGZjZTUzZTc2Y2RiYmQxNThkMjk0NGRkMTAxOTcyNDcwMDQ5NTRkOTJmNmIxZGY0YmFkZWI0YmIxYzk4ZDdkM2RhMjA1NGUzMzAwZjZkOGRkYTg4NjM0MjJlNmEwNDJjMmQ4NGIyYmJlZDZiZTg4ZjA3MDQ3NjM0MTA3NzFiMzc4NmQyZjZkOTY4YjZjMjI0ZTBjZjUzNWU4ZDAyYzE3OGIyZTBiOTBlOGE3ZmNhMGM0MzFiN2YzY2Y0MWIwYTdjMTc3NzhmZThjMmVlYjQ0MmM5MTBiYTg4YzdjMzY0Y2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNDY4NmE5NTllMTdkZmI5NmMyOTRiMDljMGY3YTYwZWZiMzg2NDE2Y2ZiNGM4OTcyYmNjNTVlNDRhMTUxNjA3YTUyMjY1NDNiNGM4OTMyMWJiZmIwZjExZjE4ZWUzNDYyNWVmNTBkYWFmMjk5MjkwNDc4NzAyMzVjMTc3NjJmNWRmNWQ5YWIxYWY2NTZlMGUyMTVmY2M2ZmQ5ZmMwZDg1ZCI6IiI6ImQyMzgzYzNlNTI4NDkyMjY5ZTZjM2IzYWFhMmI1NGZiZjQ4NzMxZjVhYTUyMTUwY2U3ZmM2NDQ2NzlhNWU3YzYiOiJjODQxZTdhMmQ5ZDEzYmRiODY0NGNkN2Y1ZDkxZDI0MWEzNjllMTJkYzZjOWMyYmU1MGQxZWQyOTQ4NGJmZjk4IjoiOTA1NGNmOTIxNmFmNjZhNzg4ZDNiZjY3NTdiODk4N2U0MmQ0ZTQ5YjMyNWU3MjhkYzY0NWQ1ZTEwNzA0ODI0NSI6ImI2MGQ4ODAzNTMxYjJiODU4M2QxN2JkZjNhYzdjMDFmM2M2NWNmOWIwNjk4NjJiMmQzOWI5MDI0YjM0YzE3MmI3MTJkYjA3MDRhY2IwNzhhMWFiMWFlYzAzOTBkYmFlZTJkZWM5YmU3YjIzNGU2M2RhNDgxZmQ0NjlhOTJjNzdiYzdiYjJjZmNhNTg2ODU1NTIwZTBmOWU5ZDQ3ZGNiOWJkZjJhMmZkZmE5ZjJiNDM0MmVmMGVhNTgyNjE2YjU1NDc3NzE3Y2ZkNTE2ZDQ2ZDYzODMyNTc3NDM2NTZmN2NmOGIzODQwMmJhNzk1YThjOWQzNWE0YWE4OGJlYzYyMzMxM2RhZDZlYWQ2ODlkMTUyYjU0MDc0ZjE4M2IyZmVlNTU2ZjU1NGRiMzQzNjI2Y2VhODUzNzE4ZjE4ZDM4NmJjOGJlYmIwYzA3YjNjNWU5NmNlYjM5MWZmY2VlY2U4ODg2NGRiZDNiZTgzYTYxMzU2MmM1YzQxN2EyNDgwN2Q1ZjkzMzI5NzRmMDQ1ZTc5YTlhZGUzNjk5NGFmNmNmOWJiZWViNzFkMDAyNWZjYjRhZDUwZjEyMWNiYzJkZjdjZDEyZmY1YTUwY2RkZmQ5YTRiYmM2ZDk0MmQ3NDNjOGI4ZmJlYmUwMGVlY2NlYTNkMTRlMDdmZjg0NTRmYTcxNWRhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjBiZmQ3M2E1NWM5NmVjYmI2MTA0ZmMxZjkxZDg2MDFlN2I1N2NkZjg1ZDZlNmI1MzYwOTIwYjRlN2QxY2QwMjYyOWJiMWM1NWU2MzdmYWUxNjA4ZjM4OWQxNzlmNGZkMjY1MDI1MWEzN2FkMjdjMmI1MjY0YjE2MDVlZDVhNTFkZjk0OTA4NmMxMGVjZTMxMjU1NzAxNzMzZWUxYzg1MzkiOiIiOiIxNWIzODE2MzkyMjg1ZmM2NjU1NzJjNDhhMTY4MDY4YTEwOTk0Y2JlNGNlYWExOTU1ZjA3MDc1MDM5YzczYjRhIjoiMzc0MjQxY2YzMDczZTJmODI5NTZjNzY4OTc5NDRhZTljNDM5MDdmZDY3ODEyMDJiMTBlOTUzYzNhYWIxY2ZiMSI6IjRkNDM0MDMxZTJhMmIxZTFhYzVlYzk4MDgxYmU0NmQwNWRlMWI0ZDI1ZTNiNGRiYzhmMDQwYjYyN2Y4YTZmN2YiOiJmNDI4M2FiYzdjMGY0MDQ3OGJiZjAyMzRlMmY3NjU2YjdjNmQxZDM1NmMxMmEzZTFmNzY2NjZiYWExOWU4YTA1ZmMxNTM3YmRkMmZlODU1YWRiZWM0ZWQ0ZDI4N2ZiZjU3MTYxNWY0MTU4NjdhMmUxODhhYjYwYjMzOTAwNTNiMjdiZDhiZjQ3NDU4ODdjOTNlNjhkMGRmZDAxNjA4ZDZiMzA2YWYyNzNiNjZkYjY0MDBkYWVhZTk2Mjg4MmM0YzZhMTliMzYzZjI0ZDRiZDU0M2E4YmNjNzkzNWYwNzg2MDJjZWUxY2YzYzdiMzAzNDNhZTJhZTBkNWFiMTExNzY0ZDcxOTIwNWZjMzAzMjViMmY5MzhiNGVjNGQwZjFmZWUyZjQzMWU3MGNiMWFhMWU3ZDgyNmQ1NGI3YjRmYzUwNTYwNDUzMzQ5ZDJjNTJmMDlkNmY1ZWFhYzcyYjViOWNhOWIwMDE0MmQ0NWFiYzU1MGVmZjI2ZjFkZmI4MjI5YmZkMWViMjFlNDU2NzE0NWQ3Y2E0N2M4NDAwMWFiZDdmNWY1ZTcxMDFiOTk0MTMwMjkyOWEzN2YyMTUwNjIwYjg5OTkwN2Y3MjE2ZjNlMmJiMWZkMDI4YjE5NjAzMTY5MmJkYmMwZDI3NjljNDQ4YjAyNDg4MGExMzFlZDk4NjEyZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJkYTU1ODllN2ZlZTBhMDIzZTAxYTUwYWE1NDk4N2M1YjZkNzA1MDNiNzg0MDM3NjJjZGI1M2M5YWU3ZWM2NWY4NTNkZjE0Y2Q3ZTMwYmEwZWI3MDNiOTEyMzg3NDY5YmY3ZjAwMGU1ZGQ3OGRkODA3MjJlMTk0YTQ2MTZhYTM3M2JlMmUwOTNkMjNmMmE0ZTcyMjRiODQxZWY1NTA3NzJkIjoiIjoiNGM3NGE0NjU1ZGNiZWJkMTMzMWI4NmJjMjI0YmUzMGU2YzMzODZiYTg0NDcxNmQxYTY5Mzg0NDdjYTdhMzE3ZCI6IjYzOTdlOGZlMTNiM2ViYjA4YzBiN2NlNDYwYjVhMTQ5YjIzNDMzZTExMGI4ODFhOWMwOTVjZjI0ZDIzNmNlZTkiOiI2YWJhMzU5ZmFhYjQ3M2QwZDUxZjIxYmJlN2IyZmZlZjNhMDNiNjQzNjQ3NzdhNDhmODA2OTg2NDNkOWIyNTA0IjoiNDljN2VhOGUyNzQwZmVkYWZkOGQzMTU3MWEyNDBmMTc1YWI1ZWI4M2IyMTA0ZjczOGYzYmRjZTQxYzE2MGMxOWVkZjdiMmUyYzA2MDNkOWU3ZjRmMjZmMTMyZjZiOGJkOGM2MWZiMGViMzkxYTViNGI2ZDIzZTNkYjIwNTg0ZTA4YmU4NzY0ODk4NGQwYjlmM2IwNWM3NjM2NjViMTEwZDU4ZmJhOGQzYjdjNjM1YTc4ZWQ4ZjU2Y2UwNTQxNGI4YmY0ZTA5ODVlMWZmMGI0ZjU1ZWRhOGNkNTE2ODM2MDk5ZGVkMmI2MDkyYzlhMWQ1MzJiYmEzNjNlMDgxMWNmNTA3YTIyMTg5Y2QzZDIwYWM2ZTY2MzgwZmM4ZGRlMzJkY2E1NGVjNzYxMzBjYmRjMGFhNzBiNWJmM2I1ODJjZTE0MDVjNjlkYzBlMjZmNjVkOTE2NDRjNTU3ZDFiNTVlZjljZDg5MzM1NWU3ODM2ZWZjZjUzZGFjMmQ0NjhjNDkwOWUxNTM4ZWMxNTU1Yzk0YzA0YjYyNDQ4MDkyZjQ0ZTgxYmU3YzA5ODRiZWMxM2E1M2E5NTNlZmRjMTZkMzQ5N2IxZWY1ZmNhMzkyMzFmZWZmNDg2Yzg0ZmE3NzU2NDE5YmM5MDljODc4MjU1OTk1MWQ5NzExNTc0NDEwNDdiODAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiOGEzNmFmNjYzZGZjYmJlY2U5NjUzYmU1MWM4ZGVkZDdjZWIxMjVkNTlkYmQxNDNhYjRjMzdmMjFkOGNjYTQ2NDkyMGRkMTYxMjQ1ODM1ZWQ4MWZmMWVmMWQwOWUzNjdlZDQzMTE4OTEwYzJiNjJkNGJiOTgwZDBlNDMwNWIwN2U4YjMyMWM1YTA0YjQ2ZDRhN2RkNDYxMWFhMzI4NTQzYiI6IiI6IjU5Yzk2ZDZlYzRlNDliODE4NWYyNzUwNTcwNDcxNTNlZjYyNjQ1NjA4NWRkNzdhMDFjYjg5Y2RhMDYwYmNmM2EiOiIxNDkyZGFmZjQ4ZDhjN2M5ZTllOGYzODEzMGI4YWIyZGU2ZTAyYzZjZGNjYzI1ZmJjZDkyZDhhZmYxZmRjNjZiIjoiZDJmNDBlN2RiZGZhY2UzMjA4MjVkMGI3NjZkMDMxN2Y0N2M3NGZiNTVhNWEzMjVkNjZhNTgzNGRiNzBkNWVjYSI6IjQzNWVkODAzY2FmM2U1Yzk0YmNmNmFiNjE5NjliY2M0ZTgzZjFjZjdlNzNlNDgxNDk0ZDQ5NGZhYTllMzNjZGQ4OTBmMTEyYzg5YmQyMzVkNmQxZGFjYmJjYjczZmIxYzlhNTRhNGIyODIwMzJjYzAxNzg3YmZhOWJmODU1ZWRkOTExODA0MzJjMjdkOThhMmY3OTgzOTMzMTQwZjYzNjg4Y2E1OTVlN2E5ZmJlMzhkMTIyODAwMjNkMzgzODkxZjBmYjhiYTNmYjA3ZDgzNWEwZDQ4ZjNmOTA4NjAwNDA3MThkMzQxZmU1ZGNjMTAxYjUxMjQzMDgxNTYzNTg5YjAwYTNlN2MyMDk1MTE4YzEzYjg3ODRiMzg3YzFkNjM3NjdjM2M2NTUwMjUwMjFiMGVhYWM4ODZkMjFlYjVmYWFlMGUzNWZkMDczY2ZlZjQzNTRjN2I3ZTRlYTEzODZkODU1ZTcxYmNlMDFiMzAxNTE2MjlhNzAwOWI4NTFmYmM0MDQ3MzE4NDFiZDI0ZmFjMTU1YTkxMmQ3YjdmN2E2MDFiZjY1NTllNDM4MzY3ZmRkODk4Mzc5YjI4NjRjNTQ4YmM4ZTJjMDg4MzQ4NjI0ZTMzYzgyOTkwYzc0Zjk5NDA1NmQyMmFkZDE4ZTYxMTY2NWYxYjQ1OTEzYTYyZjkwODQ1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImRkYTY5ZGQ1YWYwNTI1NzBhN2NiYzJmZDM3OGVlYWU5MzZjZDMwMWIxOTdkMjNkY2YyMWNlMDYxNjFmNDExMzIwNTY2Y2YxZjIzMTExMWMxZWY4ODNhODhmMzU2ZDk0ZjJiYTdlNDJkODQ1NzRmMzliYTE5NDY0NTBmZTczOTRlNWYzYjlhMjEwMDVkNzk3ZGQwM2YyN2UwNDc3YmE3NGEiOiIiOiIwY2M3OTZjZWVlNzhkZmQ2NjdjMzA5NDk5ZGM0Y2ExMDAzYjJkOTIzMDI2YzY1ODI2ZjI4MDk0NmU5ZjNmMWYwIjoiMjQ4MzY0MGFkNmIyNDJlNWM2NTc2ZGYxOGRiMTM3YTNjZjBlNGEzZWI0NGJmZGVhZGI5YmI2NTBlYzgxNjIwMCI6ImVkOTc4YzNmNTBjM2ViYmY0YjcwYTc1NzcxYTk0MGYwM2VhZjdjNDY4ZTljNGU5YWY1ZjhiZjlmOTQ3YTkzNTIiOiI5YmY3ODVjNGExMDA2ZGEyMWY2NmFlMzA4ZTZmMjNkZTJkMWIwMTUyMWM0MDQwNGRhOWI2MDVlMWZmMTU3N2NhMWQxMzAwZjBlNDdlOTIyZDAyMzMxYzc5YjdjMGIxZTA2MDkyNjU2NDk3OWUwZWJmNzdlZTNlMWY1NDkwNzc3MGJhYTgwZWE4ZGVkYjdhZWQxOTQ4ZGY1NTBiNmVlOTVmMmY3MWEyOGVjMmViNWJhYTc2ZWVhZjAwNjJlNzU3NTAwZWMyNTUzNjlhOWRiNzVjMjQyOTI0ZDY0YTM5MWFmMTUzNmMzYTlhNjk1MWFhOTkxZjAyYjc0MTVhMmNhNzc1ODJlOGQyNWJiZGQwMjNlNGQwYTA1MzdjMDA3NGY1YWJlM2FkMzRkMjRmNWI5OGFhYzI5YTYyYzFjMjY0OGViMTI0YWYxOGM2MTlkY2RhNzAxZTdhMjc3ZmYxZTAwYThhMjY3MzkyNDE5ZGZjMWZkZGU0ZWU4NjVjOWYzNzQ0ZDkyZmI4NmI4YWFhODcyYjAxNDI3NjJiZmNiN2Y5YTQ1ZGNkZjViZWU5M2JkNjMxYjczZTNhY2Y5ZWRmZGU3NDRlNzQ5MmI3N2ZlMzhhZGJlNjMxZTdmZmIyZDE3MDhmMjEzMTM2NDgzY2U2ODQ1Mzk4NDA5Yjg1NTBlNzQ2N2I2YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIzNDZlMjdiYWQyYjBjMDAyOTE0OGM1ZGI1NDE5YTEyNDU4M2QyMDIxZmI3NDY3N2IzN2IxM2U4NjQzZWU3YWE5ZTliYzUyZjVjMjY4OWFlMmJhY2RiN2M4YzhkMjJmNWE0YmJkMmYwYWQzNDc5ZGVjZjJkZmUyZTkzMTJkYmQ2ODJkOTZlMTk5ZTA3ZjVmZDRkMjJkZWVkZDgzYzc3NjczIjoiIjoiNjUyNjJlMWJkYTcwMTQ4NjY3OTQ3MTNjZTZiYzFhZTRmMGRjZTUyM2M4MmNlNDNlNmUwY2Y5YTY0OTgzOTY0ZiI6ImM2OGM1NGJmMmNhZDAyN2NkYTA4YTMzODBmM2JkNTI1ZTM1NGM0Mjg4YTdiZWRhMWE3ZWQ4ZDYyOTMxYWFjOGEiOiJjYmQwMDQ5ZDY1NDZiYWYwYThkZjJkZTVmMTViMjliNzdhZDA3ZjU5YjRkZmU2YTg3MmYwYmMxY2FkNzE3NzFjIjoiYjhjMzQ0YTgwMDQwNzJmNzY1ODJlNDk0ZjcwYWQwZjdkMjFmZGQxM2NjY2MzODc2MjJlZjA0Y2EwM2EwYTE0ZmFkZGJjZWNmODg2OWUwZjIzYjZmMTNmZTU4ZDlkNzY5ZjNhYzk2YWI5Yjk5NjcxNTBmYjgxY2I1ZDc3M2NhNDQ5NjBlOTI2N2U4NThlYzlkZjIzMjI4ZmUyZGMyMzljYWFmZjBmOTQ4ZDE4OTI0OGY1YzA3NWMzMjUwMjcwYWY3MDMxZGMwYWViYjMyN2IwMDRkODRkMGRlNjk5ZjViMDJkYTFhZjQ0OGRmMGQxM2FlMTlmNzc1ODZkYjIyZWRlM2Y2ZDNkMDMyZDEwZWYyZDdlMmVmZGRlMmNlNjZhOGJkYzA3MTI2Y2Q0OTI0MWZhZmYwOTdkMTQ2N2Q4NjJlZmMyYTJlMTk4ZTc0YjJlMzI5M2Q0YTk5YmFjNzVlMzI4YTFkZWEzNDc3ZjNmNGM5NWVkYWNkZWU0OGIxNGQyNmIwNTRiNWEyNjhlMjQyYTI5MDg0NDkxMzU4MjVmYWE3YjRmYzBjOWM4NzdmZmU3YmI5MGZhYTdjM2YxMzZiMmI0Yzc4ZmFkOWY0NGM4MjliYmY3ZWI4Zjc0N2Q1MDFlMTUwYmVkY2RmNGNkZDZmY2M4NmZjNDA5YTIxZTZlOTBlODYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiMDk1ODdhZTBjY2Y1YzU4MGI0NGUzOTBlNjhlNmEwYTZkYWY0NWU3MTYyZWEwNDE4MTM1ODI4NTk5OTE4ZWNlZjlhYmRlY2JhNzNkOGM2ZDU2YmRmZTAwNTQ4NWJlM2IxZmYyODRhODViMTI3YjAwMTg1ZjJmOTM1MzU2YzNmODdkMDc2NTk5ZjZiMGZiN2Y5M2FiZjQ1ZjBkMGJmZmIzZiI6IiI6IjRlNzAzZjVmNTljZWNkOTI2ZmMwZDk0MTAwZDFjNTRmYzhiMTlkMTY1YmZlZjE2NDM3ZDdiZTkyODAyYjM4ZDUiOiI1OWNjZGFmYzcyZTU3MjdlMzAzZDIyODRiODBlOTIyNGM5NWNlNWVkMGVkY2Q4MTZjMThhNTVhZWY2ODFiMjAzIjoiMzZkNzI3NTFlNGQ2YTdjNmNiMmVhZDEyZWVmMTkxMjU0ZGY1MzYyMmY2YzBmZDFmMzMxODdmMDllODc4ODBlOSI6ImMxZmExNTY1NTkxYTEyMjVlMGE2MWUxY2FmMGZiNmU0YzE3NzQwYzFiMTA4OGY0N2I5MGQ5MWEwZjk5OTc4MDY4YzE2MmYxNGNmODJhMWNhOTM2ZWMzMzEyZWNkZWMyZjRiNzk0NDEyOTcyMjY1N2FlMjAwNTVhMGMyOTNiYjY3ODc3MWI0NTc5NDBkZjIzZmVkYWE2OWViMWMxZDQ4N2FmN2M3NzkwYjQzNTliZmM4NGZjODNlOWY2NGI4MWI3OGI1NjE3ZDgwNzRkOGM3ZmJiNDQzZDNiYzY3MWY4ZDJiYjYwMGMzZmZmMjIzMWUwZDM2M2I0MWYzZjU1OGVjZWMwMmIwZjFkNTlhNjNiMzlmNWI4MmI1OWJmODhhMGZjOWE4MzhhODAyODc1ZTdiYmMwNmVjZDAwMjliZDYyNzk2ZTIwNDdkZjQ5MTM5YmQ1YzM0ZWY2N2RjOTMwYjE4MTE0MjhjNGI1NDdhNmY2NzQwNDAxMmE1Yjk3ZjkzYjI4OTVkYzJjMjM4OTA3MDIyMGEwNzhkMmZjZDgyNDRhMjQxY2FhYTk4YTljMGM3YWVmNjBmYzg1NmM2MWEzYjhhYWI0NmZmZDNmMGNmZDc2OGQ2YjQxZTk3MTQ5Njk1ODdjZjM2M2IzZWJkNjBjOGMzMzE0MzVlOWNkNzk0MzA3NjdmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjFhZDAzN2RhZWE4YWUyYjkxMzFmNDQ5MGNjYjQ1M2I2NzA1OTY5NzhlMDk3YzdiMjM0MmM1YWQ4YmRhNTNkZTEwZjY5NmUwN2JmOTFiYjA5MWMyMTg5OGExZjcyOGJmNTg3MzA4OTg0MGI1ZjAyMjQ0MWIzNTVmOGU1Y2VlNzU5MTc0MDBjNWNhNTk3ZDZmZGI4ZjUyODc0Y2JhMWZmYWUiOiIiOiIyN2I0MTc3OTU3ZmJiNDBiY2NiNDgzMmZkOTViZTc1ZWQ4ZGYyMzA3YmUzY2RkNjkyZTg4NzhiYWQxNGNhOGNiIjoiYzdkZDgzYmMyZTk5YzI0MjhiYjI0M2MzNWUyNTQ0YjEwODU3NjIwZmNkZjg5NjRiNjViNjJjNThiNTA2OWExNiI6ImJhNTdkZTE0NTVhMjVjNjZkZmVkM2Y4ZDJlM2UxOThmYzZlYmZkNzkyN2Y1OTBjNzAyZDNhNWFlODFlODBhYzkiOiI3Njk1N2IxMGY2N2E2OTBjMzNkOWE1NjUyNTE0ZWZmN2IzYjVkZGQzNWFjZjQyNGQwNzA2NzI1ZDMzMTQxMWY2Y2FiY2MzNTgxN2UzZGQxYjUxMDUzZGUzMGNjYjAyMTBiZjQyOGNhZjBmZDZlOWU3OTg4NzBlMmNhYzAyNDY0M2Y1ZTE1ZjZjNTU5MWU5MjFlNzUzMWU2MGM0MDJiZWM3MzJlNzlmNTVmMzU0ZWViNWNlZDVmYjc0NTEzYWM4YTQ4Y2Q2ZGQ5MmE4ZjcyY2UyNmQ4N2RlMjVmZmVmZDUxMTk3NGQ2MjlkMTcwNDhmMTBhNjMxNWQxZTA2MTAzZjU4ZjhkM2EwNDM5MTIzOWQ4YjFlNThjYmFjM2ViN2Q4ZWU0ZmU5ZGFhMTk0Y2RkZmFmODkxYTIwOWY3ZTNmNzAzYTRjMThmZTQ3MzRkNTMyZDliNjQ4ZDU1ZDkyZDZjY2Y3YjFjZDVkYWFkOWVlNDAwYTUyYmM0NjRlYzMwMGU0ZGNhZWVlZDZlZDlkNzQxYmU0YzU0OGU0NWE2YjljN2Y3M2ZlNGIzOTRmZjI4NWI2MjlmY2FmMDMxYTlhYjM1OTNkNTM1ODQyOGRiNjA4NTBkZTBhMmZkYmM1MWQ1YzYzZjk1NmQ2YjY2MjUyMDdlMmEwZTQwMTg5MWE5MmVmOTUzYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJmZDJkMWIxZjQxNTBjYmJmNmVlM2Q4NjY3ZTdmNTA4YjM0MWIzYzI1MWM4YjBhYmYzMTc4ZDJmYTVhODBlZDE3MGExNWJmNTVhNjU3MGY5NzkwODBlYWQyMTZlZmZhNTgwMmIyZTc0MDRhZDkzYzVjYzQxZTE3ZWI3ODE2ODg1OTM4ODczOGZhOTM1ZDFjZDZiMDY0MjI4NjdhMzBiNTUyIjoiIjoiODkzN2MzODlmYzFiOTA1NjYwODYxYTQwNjJjNGU2NTQyY2MyYzU4NzI4NGEyNzljYmM4NmM0MzJlZGY1NDFmOSI6ImMxZjc5Zjg4M2Y1MWUxZGU5NWFmZGVhODM5MmUxMjFhOTU5MTY3NDA2MzQxMWJhNzliMDk4ZTA4NjlkYmNlMzMiOiIwZWY4NDc5MjRkMmZmZmJiZGVhNGYxMmFjZDQ0MWU1MmFkMzlmZjI5MWU4MGM3YTI0ODAyYzRmMDNmMDljOGU5IjoiMjZhMTdiNTQ2ZDJkYzNiMTUyOGVmYjUzYjBiMGY4N2U5MTcxMTZmMDM2NThmZjZlNmZjMTY1ZmI4OTFmNDgzYWY4ZWRlN2ZlZjhhZTQ0YWI5YWQwNzk2MWI0YTIyZjUwZmJkZjE3MTQ3MjA3MDRkZTRkODBlZGQxYjFmYmFiNDQ0M2U5NjFhNDQxY2U0ZTc5NTliYWU1NThlMzMzMjYzZjc5ZGFmZjhkOGY5ZTNhYjBkNzNlZGE5ZjRkM2UzMWQ1MzVjNjdlZGJhM2Q3ODhlYTcyNTA1ODQ2OTQ2MjhlZWI1NWRmOTdiMDFmNWM3MGIwNTEzNTZiNWQwODliMGEzNjhkOThiYmFjMzZjNjkwZTE4OGU1OGVlZmM5YjVlMmI1OWZkY2FkMDViNzFiYzExMWI3ODY1MTJkMTNmYzBhZDRiOWY3OTkyODdmMDMxOThhNTNiOGJlNGEyMTgzZTcwOTZhMGI5ZmRlNzI4ZGM0MDk0MTQ3NTMwNzdlNDM2ZmUxYWY5NGE5MzI0MTAyMWRlODc3OGQ2NWE0NzA4MTAyYTQ5ODc1NDE2MTcwYjMwYTZmZWEyOTBkNjg4MmM0MWVkOGM4MzgzODhjYmI3ZmU4ODFhNDc3NWNiMzIzZGUzNTMwMzJjNmUyOWFhMDU3YmY4MTYxOWUxNjcwODIzYTBhZTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZDRmNjRkOWM2MzcwOGY5Mjk0ZmUxYjFkZTgyZTE2MDI3NGRjN2VhODU3ZjhhYjZmNGVkNjI5Y2M1YzRmZWQ5NGJkMmNhMTY1NzAxMzQ4MTBlNzFhM2E3YTM4ZmRlZTRlNGFhZjNhYTgyODcxMTQyZWZlNmI3ZDdhNDg4OGI0ZjBjNzQ1YmRmNjQ5ZjZjODRmZTVhNjUxOWFjZTYzMzZjMyI6IiI6ImE4YWNlZmUzM2M3ZDc5MzNjYTZmYzNjODQ5NWJiMzE1YmQ0ZWRkOTQ2NjgwODRkZTNhNGY3NDJhYzVjYTFmYTEiOiIwOTUwMDZmMTVhYzZmOGY2NDlhYjIxN2RmYWRkNDI2YTYwZGRhYjcwYzExNGNmN2Q1MmY1ZTY3NjJhNDdlNjc5IjoiOWYwOTUwODRiMThkNmVlYzE4YmI2YmE3ZmY2YTg3NjM0NGYwZDZkNzkxNmMxMGJkNTEwZTJlMGQ1NDZjNGEzZSI6IjNkM2UyZDA4NWEyM2YzYjA4YzBjZjFlNDkyNTI4NTg4NTVmMjhhZmRiZmFkM2E1ODk4M2IxZDgxNWIyNjQzYTk2OGRlODkwYWY4ZjNkODA0OTY5ZDcxNmRiYWFmMjA2OTg1ZDQxM2UyNTM0ZWM2ZjJjOWUxNDRiZTBjZjA5NzU5MGUzZGU5ZDYzZDVjNTMwNjY5ZDFiMjg3Zjk5ZDc2OWU3ZmI2ZTJjNzE5NzNjMWVhMDJjYWY0OWQzZTQwMGJkMzFkNTc4MzEzZDVjNzNiYjUyNTM1YTg2YjI4ZjQyNTJjOGY2YmJjOTc3MDU1NGUyOTRkMDE4MTkwNDg4MWQ1MjI0Y2QzMGJiOTVkODVhOTUyOTEzZjYzZTJiY2IyYzllMjRlOWE5OTlhNmM3NDMxYzVlNmUyZDc2ZTRlYTY0NDgwODE5ZWY5NWY0MGI3MmRiYTBmODQxY2ZmYzY3YmRlM2M5NzMyYWFjOWJjNGRmZGU2ZTk3ODk0ODdhYjllMmZhODcxMDMxNTU0MTFlYWI0YzJlOWI2NDBjNWZmNDE3MzA3NDY3YWI3ZDliNjAzNmM4ZTgxYTUxNjcwNTI1ZjFjYTIzNGZhNGVjMjNhYmU2ZGRkZWFjMGMwMjlhNGI1OGQyZmM4YzI0YzNmNTdlMmMyMDgxMTM3YzkyZmRjMzczZDIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJmMzA3MjNiYzkzYTNmYWM1NDYyODZjMmVjOGZhZjU0NDk4ZWVhNmY4ZDcyM2MzMmM3YjY0ODI2NWRjNzVkOGRjMTQ2MzQyODFmN2E3ZDE4NzAyMDhiYWM0ODk2ZTIyZmM3MmJlYzM1M2NlM2JiZTRmZTI2NzJjMGI5ZjYyNjY0MDgwMDhkMGQxZmZmNmM5Yzc5N2U5M2NjZGJjNzJkZDk1IjoiIjoiZWJjMmI1NzJmMzY1YTcyNjUzMWIzZGRmNzM0NDU5MGNjNWY3Nzk3NzExMzRlZjdiZDdhZWM0YWY5NWJmYjUzMiI6IjA5NDEzMDNjZmFiYTIwZjdjN2M0ZWU3NDVlYzY1YmUzYzRmNmQyMTdmOGU2YzlhMWY1ZTZkYjk0OTQ5NjQ1YTUiOiI2MDM5Y2M5OTkyNjhmMWZkZDVlZTI5NzllNzZiNTg0Yjg1MDY5ZjE0NDUwNzcyM2UyYTQ3ZTNhZjFkOGMyMzU1IjoiZWI3Nzk3YTQ2NzQzZTU1MmU2ODJjMGM3ZmYwMmUxYTA2ZDVhYWNjYmQxYTU0MDc1Y2IxYTkzMzJlNzY1NzBkNmFhNWRkNzQyM2RhYjVmMTJiMWJiZmNiYThiNjM5NmYyYmJjNWExYmM0YzdmMWZjMzA2YjMyMDM3YjUwM2ExYTI2YjUwOWU3YzczNmIwMzUxMDhmOTBlNGIzYWU4ODBiY2IxZWFkYTcyNjQ0MTE5ZjlhZTlhNzNlYWRhMjFmOWRlMWQyYjEzNTZhOTBmODNjNmZmOTc5NzhiZGNlMDhhYTY0MTI1MzViNDAxZGRhOThjNGNlNzI1MzRmNmVkNzUzODNkNTE5MjJlMGE0NzYzYzU5MDNiYWFmNzVlNWJhYWEzNTViMzQ0OGUxMDFjYTMyMjlmNWVlY2QzNDZmNDUwYzJmMmIxMTUwM2JiZjIzYmY1ZDhmNzkzOTJjZjE0MjVhZTFjYmNkZDViY2U1M2NhN2VlMGI1OTY0N2EwYTRiOGNiYWJkZTI4YTczNjhmZDQ2OTY1ZWMwZjU1YzhjZmYwMzRhYjNiNzMzZDE5Y2VlZGYyYjhmMzhlNTQxZGEyYmJiNTFlMDRjYzU1MDZkMWVmOGFiMGVjM2I0M2MzNGRjYTcyMmU4MzBkNzQ1Y2U2MzE2NTI5NzZkZDZmZDlhNmFhZGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjA3MGE2ZGE3ZjRmNTlkYTllY2JiYTJkYWY2OTBlZTlhZDBjOWNhZDMzMDYwMGI3Y2U3Yjk1ZDVjMTMzNmM5NmI0N2JjYmJmOGViNGQ4OTE4Y2ViZTg2MWU5NTlkNjhkN2U1ZmE3Y2UzNGFkYWEzOGRlM2UzNmY0MjU4MzJlNmJiMGEyM2ZlMjFkMTBjNzg4MDA1MDZkOTA1NDc2NmNlNTIiOiIiOiIzYjRkMDU5NjNjMmZiODMxNTM3MWMyZjM1ZjM3NWI2ZTM5ZmZlYzY2NzMwM2NkOTY2NDJmZGY2ZmY1Zjk5MTAyIjoiNDE4OWNjOTNjMDIxYmMyZjk1OGRhYTczN2ExN2Y3OGMwM2NhMDlhMWE0YTczZmFhOGE3NGYzZjEwOWJmMjgwMCI6IjVkYTJkM2E2OWYxMGNmOWEyZjUyNzZkM2Q1NGJiYmE0ZWMwMjgyNmY2ZWUwNDQwNjA4ZmY0ZmQ2YjFlYzk2MmMiOiJmOGQ2ZDVkN2FlZTU3MWE5ZDc1OTIzYzZhMmVkNzNmM2U3NzkwMWNiMDI1ZDNlNjA5YzdjYmY4M2I2NDc4ODk5YjQxMDc1NmY2NjU0NmJiZjM4YWMzMzA5ZjAyZmM4NzBlMDU2NzcyZTU2YWJlNzZhOTlhMTQ3ZDEyZjFmYzYwZWY1MGNmODdiYWFkMjFmNWNjZGI0M2JhNDNlZjBlZDc3N2JlNWRlMzBjYTMxMmY4MTRmZjA1ZWJiOTNiZDUyMzcxNmI4ZjhhZDA0MTFhYTczMmQyMTE2MDQwZDQ2Y2ZmZDliYzJlNDYzNjY0NDMzZWYxZjdmYzU2MTA1YjM5MzkxNTEwNmQ4YWU4NjBhZWFhZmE5MzQ5NzVkNDQ2ZWY5NWQ2OTdlMTc2MTAxN2JmMTAyZTllMTc1YzdkNmQzYTNhZWUwY2U4NzdmMWNlNzcwOWQwOGMyYzg0YTM0ZDg1ZDE3Zjc3ZTA2YTVmNzIyNjljOWYxOGY5NGE5ZDllNjM1YmExYTFiNjJjYTU0OTllNzE3NDIzYWU0YmFiNDc3ZWJhNDgxNDMwMjhlYTc4MThkNjQ1NjNiZGVhM2ZkZTU4N2RhZWZkNTlmZTcwNTlmNGY2ZGIxNmE2MTgzNzg3Njk0NmVlYmNkODQ2ZmI1YWNmMDc1MDdjMzg0MTBlMmFjM2YyMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAwLCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiMDliNzUyODRiNzM4ZDYwMGRjZDMzMjJiOTFkMzgwZGI0NWQzZWZkZjJkYzhlOWZlYzY0Y2YwN2Q3YTYwNjUzMWFiNDFmMDVkODVlM2VlZDVmNjJkNTVjNTEzMmM3NWYxNTE0MzdkNGY5M2RjYjQxMTQ1YjJmOTUxMjVkMWRhYTdkZDFmNzVkYWQ2ZGMzMmU5ZTQyYTIxZGZhZjM1NzI2YiI6IiI6IjdlYmZmYTA0ZjdmMGM5MzllMWJmYjRjODY4NmViZTRmZmQ3YTFlYzNmYjRhYTExNDk0NmE2NjUwZjJiNDQ5ZWEiOiI4ZDljY2YzNTI2YjY1NWNiOTIzYWUzZTE0MTZlODRhZjVlNDU4YTJhZTRiZDU1YWE5OGU5MDAzNTNmOGJjZTY1IjoiZDc4ZWRmMmY3MjExZjQ5YjcwZGI3NzhiMGZiMGVhYTIxNzg2MGY5MTk3YWQxMjQyY2RhMjY0YzNmZmEzZTJkYiI6IjFmODAyZDBhOTUyNjAxN2E1NmM0M2ViZWI3ODJjMTkxNDM1NzFmOTc5YjE0MWI2NDQ2MTJmMDM2NGNiNTUzMWY4ZmNkNTI3NTc4Y2VmODkyNjNjNmZjNWFiMjZiYWYxMzY0MThmZTIwM2RmZTMxMTMxMjQzNjNjNzY4ODEyZDNlNjBhNjZiMTRmZTEzYzQzODkxZTA3NTZmZGFiNmY4ZGQyYTI4Y2Y5YTYzNDFiN2IzOWQ5OTYzNTNjZjQzNTcyNmIyYTAyNTYwZTBiNWY4MDM1YzJhNTBiMTBkZTQxZmZlMzg5ZjBiMGU0NzhkNzgzZmU4ZGE4ZDcyOWYxYTdiNDFlMDlkM2UzY2M1ZjkzY2UyNGFkNzZiNTY1MGFlNjE3MDEwMzVkMmFiZmMwNWJkZWQ2MWFmYjM2ZGZkOTEwYmU0N2M4Nzg4YWYxZjc0Y2QxMDE3NDYyMDc3MjJlZTI3NjFlNTQ3NDJkOGYyMTg4NDc5NGZhOWIwNzEyNjQ1ZmRkOTYyY2E1Y2YyZDMwNzBmNGEyYzFkYjZmNGMxYWFkYmNkNDE1NDg2NzM1ZWExYmY2ODk0MTQ2ZTA5YzZjYmRhYjM2ZDI4MmUyMGNlMGU4NDA4NzFhMGI0MzVjM2U4MDBiYWQ2NzM3NTRjYWU1MGFiNGU3ODU1ZTI2OGQ5YmNjYmNhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDAsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI3NzNhMTIzMTgyNjVjMmRlNGQ2YTgwY2U5MzZkNGM4YTEzZDgxYjY0NmZiMTk3ZDdhZGU4ZDhkY2EzODk4OGU2YmY0ZmUyNWQzMmMxMzdmZjUwZjVlMjBlOTg3Y2E4YzVjN2NhNGMyYmZjOWY2OGMxYTc5ZThhMGY5YmYyYTFkY2UwYzA5ZGVlNDEzNGIzOWYxZTUxZjBiYzEwMzU5ZmNhIjoiIjoiNGQ5OTVkOWFkZGI4MTYxMjJiNzAyMjZhMDY4YzQ1N2VkNDYzNWU3YWM5Y2U0MWYxNTk0ZmY4NDE2MGMxYzA2ZCI6ImYwNjg0OTdkMjY5NjZkZmRkNTdkNWE4ZWExYTA1YzFkYjJhYzJkNzIyNDhkZDU5ZDE3YmNhOWM2ZmZmMjg4MTciOiI2NDFkNTQ4MmZhZDc4MDkzMjEwZjdlNTQyZjQ1YThkMTdmZGM4NTZiZTU4NjBjNDU0NjViMDc3NWJjNDVlZDdhIjoiNGQ0N2ZhMDZhZTU0ZjYwMTAyYmQyNDIzMDlkNTM2NmE5NTNlNzJhMjYyMmQwMjVmOWJhYmY2ZjYzNDM0MjllNDE1ODY5MWJiZTM2MjllNzAxZjA3YTQ4ZWQyMzllNzM0YTc4YTQwMDQ2MzEzOWNiZmViNDVkNjUxNWJiNjkwZjEyMTFlZTAzZTkwOGNjNDQ2YWJjZmVkMjliOTU1YjkyZTdmOWMzYWFlMTQ5MTk1ZTE3NGQzNGYxMGUzMDMzM2ZjZTk5Y2YzNjJjNWE0MmE3OWVjOTA3ZDkwZmI1ODA2YzFkMDljOTY5MGQ0YWVmMDYwZjBmZDFiMGIxODc3Y2NmYzM3N2RkNjc1Nzc4YWRhZTQwZTg3NTg4ZTUwODBkM2NmM2ViMWY3MTBmMDE5NjExMjY3YjIyNDkwMDdhMDFiM2U2OTk5YTNiYWIyOTQ3NjZjOTMzYjA5NTM3ZTk5ZWY3MjUxYzU4ODcyOGVlMWJmOGM2NGZmYzY0ZGU2YTcwYTUyMWViNzQ1YjRjYTYzMDdiZDI0Y2U1NjYxZGVmMWQ3Mzc0YWZiMWM0NGE5NjRmMTRlZGViMWZlNDU3NDY1YzBiNDVkNjJhMzNjNWM1YmQxNjI4ZDUyOGIyMDE1NGQ3M2E5NDZjNDQzNjNhYWFmMjBkZDQxMjQ0ZmJjODFkZDA0NzUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImVhZGIzMzIyOTc5MzA4MDc1ZDRiYWZiNjljYWZjNmRmZjVkNTViOTdjNGE3M2RkOTk0M2EwYTllNGFjMDFiNzhjZWQ1YWI5MTUwOGI5NzE4ZjZkZTlkYTQ3ZmQ3YmQ1NDc5N2NkNWE1ZjYzNjVjMjhiMWE1NmNkNWQ3NDcyMWFmYzQ0MjRhN2NhNTNlZDhlOTdhMmMxNWE3MjdhNjgyZTYiOiIiOiI4Y2VkODYwZDc0MDQwZGNlZWRjMGZkMGYzYmQzNmVjYWYzNmY5MWU0YzU2MzcyZWQxYTU0ZDI1ZDY1MTgwZDQyIjoiYTE5OTgwYTFjODZlOWVlNGRiNDFmNjQ2NzE0NGIwZGZmNGMwNjkyMTQxOTE2ZDQ2YmRiN2MyYWI3OTk5MjExNiI6IjFjZGVlMzY2ZTdjM2U3ZTg1M2NhYWJjNDMyMGNhMmI2MzYxNmFlODYzNDNmYzVlYzJhMjFiNmMyNGMwNGVjMzkiOiI4NDQzMmMzZjAwYWQyM2JmMWJhNGI0NjRjZWVlZDhkYTA3NjAzMTkxNDFjMjE0ZDZjMzEzNDRmZWFkMTEwMTFjYTFiMTBmMTlkZTVhMzUxNGM4ZGYwYjY5ZmI4NWU4NzA2ZGIyNzJkMGUxZTZiZmQ1MTJjYWRjYjRkZjdmZTc0NWFhYWFhOGZkZDZlMTk0YzM4YjA2M2MwMzBkZTNkYTUzYWU2NTk2ODM0Yjk5YTQ2YWQyMDU2OTA1MTFlM2FhNjljZjViZmQ5ZWQ3OGQ2ZDMzZTM1NzUyNGRjYzk0Mjc4YjEyN2U4OWUxODllNTJkYjAwYjQyNjQ5OWEzODgyNDFlOTQ1NWRlZWZkZGJjZDM5NzQyMzZjNjdjNjIwN2E2ZjljNGM1ZDE0MDNjMDJjODI4NDg4ZTcwNWZhNGY4NWZhMjc3MWExZjNkZjdiMmQ1ZDRiMWJkMjU3ODhiOGUyOWM2NzkwNDRlNTU3YWU0Y2M1ZGZhODY1NTliNmVjM2I1YTMxNGQ0ZGU4YWZmZDJkNTc2YzNjYjI2MDQxMzQwM2UzZWE0MzllZDRkZjM1MDFhY2I4NWRiYTk4MzA2Y2Q3MDU1MDI3YzdiYzMzOTg3ODk5OGUyM2Y3MDY4MGE4NTU0NzkwNjAxODYzMzUyMTdkYmNiMjI5Y2ZjNTRiNjYxMzBjMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI5N2FlZjkzNWVhMzM3MTdlOGU4NjQ0YmI4YzQ3ODlmMzc1YzQ4YTk0NWRlZDA4NzcxMTQ5ZTgyOGEyMmRjODY2ODI1ODBmNTEwNzBiYTFlOTkxZDk4MDNmNTFmZDlhNmY2M2NkOTFjMWViYjJjYWExNWYyODM3ZGY4ZjM1Y2JiNmZlOTZkZjI2NzRhMTM2OTkwYTU5NzZjYmJhYjYzYmMxIjoiMjEyMzAwZjkzODk5ZmY3Y2IxNDRmMjA0MjYwMjhiOTc2MzgwYTM0ODI1M2JjYzNmZjQyYjUyOGNkMTk3MjU0OSI6IiI6IiI6IiI6IjBlODUzM2Y2NGI2MGMyM2EyNjU1ODI3MDM3ZGIyMThjMmZlOWNlNDMwZmE0ZWQ2ZWQ5YmUzNDljNGJkYzZmNDAwMThiNDJmNDg2ZmEwNDI4OGIzYjBjNjJhMTI4MTJlNzZlMDhjNzYwNjJhNTEwY2M2MDg0MWYxNjU4NjllZmFjZWVmOTA4MDViZGRlMmZkNjZjMzZjMzhhMmFjOWMzY2I4NmJmZDMwNDA2NTY5ZTBhZmQyNDUxMDJmMmVhMmQ0OWU0ZWU1ZjY5MTg3MjI3YTNmMGVkZmJjMTI1OWNiNjU2NGEyZDRlODI5YjNmYzNiNjk5NmUzNzU0NmYxZDhhMTZmY2Q4MjAxZDFhZDI4NjYxYmJiMDAxMmRhYWQ1NWQ1NDAzZTgzM2Q4YTAwNjhkMjE2Yzg3OWJjZWJjMDU0ZGYwYzljYmExNGRhZDQ4NjNlZTFmNzViNzhiYzQ4ODY2MmNiMGM5MWNhNGZkZmNlN2RmNTkxNmI0ZTYyNTgwOTAyYzYwMWJlNzA2ZGNjNzkwMzg1OGU2Yjk5MjA3MzViZGFhNjM1YWRkNWMwNjA4MGQ4MjI2NTM0NWI0OTAzN2EzMmZjZjBhN2M5ZWE2MDY5ZTMzNjlmOWI0YWE0NTQ5M2VmZDczMThkYTJhZTliNGZjMzAwNDk4MjQ4YWZhYWQ4ZDQ5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjU0OWFkYThkZTYzOTgyZmNiZWMxZDI3MTYyYTUxNzY0ZGJkNzcwZjFkYTQ2ZDg3NzU5YjJjZWQ1MmQwYWIyZThkMWU4YjI4ODNmZGViMjIxMzgwZTE3ZWEzODdiM2EwNjVjZDZkYmI2NzFmMWNhZWI3YjVhNGJhYjViOTAxMDg4ZjA4MWFmY2RkZTVlY2VhMTBhY2Q4MTA3MzViOTU1MzIiOiIwZTdmMDY2NGVlOTVlM2RlOWVmNGY5ZDhmYWFkYTA4NTFiZDFkZTNhM2E3NjdmODVhNzRiYTI2ZjdmZTgyMDFkIjoiIjoiIjoiIjoiYzg3NjAwMTg1NTQ4NGI3M2RjNDZiYWJkNTcwMDEzOTkzNDEzMjE1ZjY2MTdjZTcxYmU3Yzc3YTQxODQ5NGY3N2FkYzU2ZjVjMjZiMzkzZGUzNDBhNTE0YjQwYmY5YTBhOWUyNjI5Yjc2OGVkMzI5Y2EwODNkZDRhZjVlY2Q2ZjQ1Zjg3OGE1NWQ1YjAyZmI5YmYzZmUwNDNlZTllNzA1OGFjYjgzZDNhYWYzOWVhZDdlMTFkODI3MjViZGZmODI3MmQ3YTIyY2RkNmVmY2ZiZGQ2MDQ1ODIzNWU1MjNiYTBlYzFiNDkwOTk0ZmMzOTQxMjNmZGY2NWQ3MmFkYTM5MjE1ZWE2YzdmOGJkNmM4YWE0Y2U5NDc5ODg0NDJjNjZjZjUzZjE5NmRiNDAxZTI3NTA5OGQ5MjYwZTIxNjJmNTcyNmYwYzczYjIwMWI2MWZlOWY3YjU4NjA1Nzc4MGE4Nzg2MWQzMWNhNWIyMWJhNjJlZWNhNmY1Mzg3YzVmNDIxNDdkNTVhNjFlMWM3ZDM5Mzk4YTgyZWJiY2JmNGYxNTM5NjJmNmE2YmI1NDYxZDU4NDc2YjQ4MTEwNTFjY2FiYjAwY2Q5YTc4ZGViZWQzNDVjN2U4NTRmYTA2NGY5OTBhNmQwZGM4MjdjMzljMzgyMzdiZGM1ZTliMWI0NGI2YTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZDNmMmFmODNlZDEwNzFlNjg5NWIxZDU3ZDA5NjllYzdmYmEzZDYzMTZkZjUwMzFlNDUyYzI2ZGFhYmFiZGFiYjU4MTA3ODQ2YTJhNjkyMWNlMzUwMjYxNGFlNmNjOTRiOWQyNDZhOGNlZWVjZTZhOWNlYWQ5NGNkMjk3ODM4Y2E5NmI3NGE4OGRjYmUyNDAwMGY4ZWI3MTlmOTM5YTNiYyI6IjBkNDIyMzI4NWU1M2M5ZTdkNzQzZGZhZmQwOGZhNzVjODE1ODJkMGM1MDdjMzhjZGFhNmZhMWIzOThlMzQyZTgiOiIiOiIiOiIiOiI5YjgzMDE4ZmI1YTRiMmQyYjc2Y2Y1ZTgyNThlN2QzZjY5NDNhNDk0YTljZjdkZmUxNmY5YzUxYmViNmQ5Yjg0OWNkZGFiZmQ1OTdmYmE0MmQ2ZmNhNDA5NmU0NThjOGMwZTM1M2RhNGZkNmFmOTI5NzU4M2U5N2E5MTBiY2JmMTI1OGE4M2RhNDY1ZDM0YWQxM2VlYWNjMGU1N2YxNDVhOGNiZTA5YWQ5MTI5MzAyZTY0YTRkNmNjOTE2NmUzNTc2ZDI1NmI3YjNjNjQ1NDAxMDBlYTRiMGM2ZjdmOTJmZjEzYWY3MzJmNmZjZTY1MTZmMmZmZWNjYWFhMGFmOTA2ZDRlZmI4Yjc2MjVjYzkxYzUzNThlNWZkMjkyZGUxNTlkYmFjMWNjOWYwYWZiYTYyYmE3ZDU3MzM0OTE1MzhkMTQ0NjdmOWYyNDJmYTY2ZTc5YjQ0NGYzOGNhOWE2ZTc0NzJlNDFjYmU4YTYzOTY3YjJlOWFkMGQ4ZmFiNGRjMTczYTNiYjQ1ZTM2NTRhZDQ5ZDhkOGQ1MzQ1MTQ2YjMzZmM1NWM1MmUyMDFmZDQwNGY3YmE2NGMzMzFkOTJjMzEwOWRkOGZkYjcwMTE2ZDBlODQzMDQ3NzIyMTdhZDhmZTY1YmIwMjE1ZWNhNWM4NDJjYjEwZDU5MWM5Yjg4N2YwZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI0M2RlNDI4YjkwZGRmMmRkYTMyODBmYzM2MjhjMjg5ZWE3ZTYyM2I2M2EwYWQ1ZjU2OGM0NTllYjdkNjJmNzM5YzEwNjMyN2MwZjNhOGY1OWU1YmVkNjYxMjI0ZTQzMzU5NGY3OGIzNjA0YjEwZmEwNDhlMDQxODFlZWQ4ODVkYjk2NjVjNGViOTJkMGNiODI5NjlhMWU1ZGJkZjExZmJmIjoiZTljZjY1YzFjMWQ4ZDFmYjA3YTBhNjY4MjFiODEwZmU4ODkzMzM5OTQ5YjUwOTA5ZmI5YjcyODgzYTUzMGZmZCI6IiI6IiI6IiI6IjI2OThhMjkxMjRjNmFjNDBmMjQxNjc3OGE1NGVhMDgwMDE0YTMyNTgyMTFkMjEzNmNjODJlODNlMTk5MjQzZTdiNjQ4M2YzNjNmZmI2MzdlM2E0OThlY2RhNjkyNmU5MWNmYzE5ZTYxZjY2ZjMzZDNjODMwZjJjZTlhOTM3OWYzYWI1ZWFiOTAwMDFhMDZiNzcxM2E1YWI1YzVlZDQ2MWQxYzk5ODI0ZTFhNTA2NDgyZmMwNGI2ZmYwMTI5ODQ3ZmU4NGIwZTM2ZWM3Mjg0ZGMwMjhmMmFlMzI2ZjM5ZTdiMmIxN2I2Y2JjMjFhMjlmMWYwYzhlYTA2OWJlNWEyZGVmYTU3OTQ4ODBmYjM3ZWQxMjk4NDljYjRlN2JjOTk4YTgwZTZiZGJmNmVlN2Q3YmQ3OGVkZDZhN2FkNDE1ZTU3MWRhNDI0ODFmMDBhODU3YzU3MzA4Y2I3ZTI0ZWZhZjM5OTM1ODdkMzk5MWFlNDFhYmE5NzQzOWY1ZTBmZWI1MjUwMDEzZDg0NjE5ZmFkYTkxMGVjYmMxODZlOTc2MDI2YjE0NTFiNjAyZDIwZTYwNjc5ZTc4Yzg5NDBiM2M4OTQ2NDU0Y2IwNDA5YTgzYzJhYTdlMmQxZjkyZjU0OGZjYThkMDg5ZTE1YzQ3YTJjODAzZTdlMWU3ODQyOWZkMDFkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImFmMGFiZjNkMjIxZjRhZjRhNDU3MWVhZTA2Mjg3Yzk5NGJlZWZmY2Q4ZjVkZjVkYTcyZWFiMDNjZjEwOGQ2N2Y3MWI5MWZmMmQ3MDY5OGE4NTc4ZDA1OGMxODFiZmU3MTVkMjQ0ZjUzMjE2NjBkY2VjMDI1ODk3ZDllOWIwMzdiZGI0MDZiZDk3ZmE5YzNjZTVlNmQwMWQwODQwY2ZiZmQiOiI3ZWUyOTVjODQ0ODhjM2Y1ZDNiMjc5ODc3N2Y5MmFmY2ZjZmFjMTc1YTkzN2NiNTA0NDQ4MzFjYTYwYTU4NjUwIjoiIjoiIjoiIjoiZTU3MGEzMjhmNGFhNzA1ZjQwNjBmOWE2ZmYzOGUxNjAwN2U1OTUzM2UxZDk0ZDAzOWMyNzRkMTA1ZDdiYzhjMmZmNzc5MjA3NDg1NzlkZTVjMzNjMTQ2NWQ0NDQxMzMyYmE1MWQzMGJkOGVlZmE5MGFlOGE0MjFjYTY2MjU1MTk1N2UxODc1ZDY1MTVhZGJhNTBhMGQyOTc2NDAyNDhlMGE4M2MwMzJiNTE1NTIwMjIwZWQ4ODA3MDE2NTBjOTc3MjdkNmI1ZTVmOTk4MGYwZWFmYTRkNzA5YmNiY2E3NmQzMWMyOTE3NTBmNTJiNzVhMTY1MDIzYWU0MGRkZjRhZDY2ZjM5NWQ0Y2ZiMWY1YTU4NzM3NDMwMzFkMmVhMmEwOTNiMmRhNGVhMTc1YmFlNDVjZGFiZTAwNjg3NTI0YTM4MTRmMTUzYzUxNGUxYzNkNTBhYmFhOTYxNTk1MTZiZGU3Mzg3OGEwMjFiMmU5Yjg4OWMxMzBjYjNkMDE2NTYwYWE5YWMxZWYyZTRmZWRiNjdhYmJkMmVkY2FiM2QyZDc0ZGUzZjhlOWZiMTEyMDQ3MzY4NzkwMmZhYmI0NmViMTgzZDc0ZjIyZTViM2JmY2I5ZGMxZDFlZGQ5NTM2MGViYzEzMTA2NTFlZmJhY2QwZTYwM2IzNzg0NWYyYTkwNjgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNTRjMDEyODExM2E0ZjNlNzYzMTE3MzZjODM1ODFlNmMzZmE0NTY1OWMyMGJjNjIyMTMyY2U0ZjlkY2MzNDhlNzY1NzVkYTRiMDE0MmJlZGRiZGNmNTE5MDRkMWZlYmIyNDhhMTE2Mzc4YmM2OWFjZjZkMWI0YjI1ZDk0ZTlkNzYxNDVmZWE3M2Y4YmVlNDQ4OTY0NDg2YzM5ZTg4MDM0YyI6ImIxNDcyNTNiYzFkMjhlOTg4Zjk5YTUzYTczZjViODY4NjhiNDNjNmNhNzNlYzdkNTU5ZjQwZjU3MmYyYmI3NGUiOiIiOiIiOiIiOiIyOTYzYjI5MzJlODY2ODBiZjBlYjY5MDc3NzdlODhmNmNiNTFjMzhiMzY3OTRhMDI1NGU5ODQ0MzFlYzEyOTVhYWEyNmY5MWQ1YmJkMzg3NGM3NzMzNDY2ZTA0ZmE0MTgwZmRiOTIyYjEwNjA0MjgwYTFlMzRiYTUwYjRmNTg2N2E5ZmQwNjkwMjgzMDMzNjQ1NjZmZmE2Zjc0MTBhZTIxOTRlZTUxYmM5NTFiMTlkN2JlMWNjZTM1OGUwMDJhNGI5NDA4NWNhMzRmODQ1YmM3NTk4ZWQ1MDM2YzIzYTFhMTA5NzgwOWM3NDIxZmUwYjZiZDEwZTkwZDFmOGZmZDFjZGNmYWYzNzU1YmRmZGRlNjk1YjAzMjE3Mzg2MWZmM2JhZWY3YTE5NGI1ZTQ2YzNiMGEzODg4ZjRlNDY5NmVlNWRkMjQxNGExMGMxNmViMzcyZjY3YTc1Mzg3ODJkNjFiZTBmNzU3NDY0NmM3YzA1ZjZmM2Q4MWVhZTEzYjJmNTMyN2I4YWI5NGQyYzIxNzJlYTE2OGEwZjJjNmI3OTQ5NGI0OTdkYTM3NTYwNmM3ZDA0YmMyZDhkNDE2MThkOTI1MTQwYjgzNWI5MGVlMjI0ZmZjZTA0MTY5N2FmNjY5YjBhOTQ0ZDM0MjUyNGZiMTMzZTE5M2E1NGY0YjUyOGZiYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIyMGY0Njg3YjcxN2EzMWY1ZTgxOGM4NzI5NTIzODVjZDlhYzIxMzdhYmQyZTQ5Yjk4NDlmMDFjYzI1NTFkY2Q3ZjUzZGRkYjI0NDljMWE5ZTc5M2ZiOGEwNDQ3YjMwM2RkNmRhNjExMDc2OGY1ZDMyNzY2ZTNlM2YxNzEzMDVmYzY4YzQ5NDhkYzY3NjJkM2M0ZDI3YzY2ZmRmOTYyY2VmIjoiMDUxNmQ2MzcwOWRlZWU3MmNjNjc1MTE5MWVhMDVkNmFhZTdlZjAxNmRlZTFhZDYyMTU5YWYxNjdhNzg1YjM1MyI6IiI6IiI6IiI6IjgyZWYzMTEwMjAwZjRmMzIyNzY0ZjkxZmU1YjExOTQ5MmI4NjI3ZWNlMjExZTc5ZTJlZDY5MDQ0ZTYxMmY2MDU1M2U1ZTUwYWJkYjFhMTE0NGU0YTdhZmUwNTI3NmM4MGI3ZDFlMzk5MmI2MDljNDk2NmY2MWJlYjAyZmY4ZWM4ODlmZjk0ODg5YjY5ZTRlNjU0NGJlOWVjNzYwYjI2MGVkZTdlNGI1ZTk2YjMzM2ZjNDYwMzkyZWZiMTgzM2E2NDY3YjE3NWFhN2Q2NjAyYWJlMTc1YmExNmQ5NDE1MWZlZmEwZmQxMzk2OTYwYWE4YzcyYTZiNzc4ZjNmMDY3NGM4NmNiZWRmZjI1MGI1YTYwOWQzMGUwYjQwZWJlYWIyYTUyNGNlZWU3YWE4NjFiMjc0YmM1NTU0MWRjYmNlNzczNjFhY2I4ZGQzOWZkZmNhYTAyODIwOTUwOTMyMjQ1YmQzNzk4NmQ1YzE0MDcwOThlMTNiNTc5MzY2NmQwNzk5NjliMDU0NTg5ZTcwNzEyZDUwYmUwNGJiYTQ4NGNiNjUxYzA3OTcxYmU3MjJlMTNiODI2MDAzNThkZWM4NmM3ZjA0YzBjNGUyNTZiYTEyNTQyZjgwYWU3ZGU3NDVmNTBiZmIwN2FhMjhlMzg1N2JjYjFmMzcxZjAxZDkzYjEyYTJhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImVmNDEwNjdhN2NhOWI2OTQ2MTU1MjQ3Y2U4ZGJiNjE5Nzk1ZjAyOGQ2NzhjY2Y4ZjVmNWI0MGUzM2U4Y2QxNTYzNGRiOGM5MTQxYmMyY2IwNTkwYTU0NWNjZDAyY2VmNmUxZTk2ZmVhMTRmYjhhNTU0MTFkOWViZjAzNjMzZGFlMGFkNDQ5YTIxMjFkMWM3OGZiYzBlOWNkOGE3OGEzNGIiOiI3YjkwYTJiYWE0YzEzOWUyOWM0OGRiNmM1YjUxY2NmMDg4ZmRhNTRlNDE4NzYxMWRhYjQ0NDA5Y2UxYzM2ZjRiIjoiIjoiIjoiIjoiMmExMzEyNmU4OTQ3Mjc4Y2ZjZTExY2IwMmVjMzFhY2NjZWU1MzE5ZDQ3OGE0OTM3ZThmYjVlNjQ4M2Y1ODc0ZmIyMGExN2U5ZDQ1OTlkMjU2YjRkODczMThmZmYzOTNmOTk5ZTdmM2Q4NjEyZmMxYjYwNjMxNzVhNWQwNzA4MDVkNTNmNzUwNjYzMmYwM2QzN2FhNDNiNGU3N2UzMjNhYzBkNWMyNDFkOTU4MWQ3ZTExMGZhZDIxZGVjODNkMWRjOWQxMTlkMWEwNjg2NjM2YWNkMDg0NmY1OGI0MmJjMTJhNGU3ZTlkNWRkYmRjMDUxNTE1ZTg2MzZmZDM0NzBhM2I0YzJlZmFmOTc3NGQ3OGYzZDMyOTkxZjljYTUwNTg1ZjkzOWQyMWExNWM1Y2FlNmRlZmIxNzAyZjliNjA2ZWJmZDczMDhlNTVlNjY5MDMxMGUzNWRhZGM0OGY5YWE4NzNmMTQyMzk3ZjM2ZGU5MGZjZmMxZGQwYjg3NDc0OTY1NDhiNDY4ODg5OWRmNGQ5ZDEzODU3Mjc0NzQxMjkwYTM5Yzg2ZDViOTJkMzc1Yjc5ZWZjZWI3ZjZjZjJhYzBjOGM0MWU2ZDNjMDVmN2U5ODA2MjhmMzMwYjVhYWQxMzI4ZmI0YjA2MjEyNzhiMTkwNzU4ZmFmYzkzZGEzNTlhM2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNGQxYTcyYTdhN2VmYWI2MDljNmVhMTZlNGExMTUwYThjMWY4YmNmMTllYzMyMjVhZDJlYjEwYzc2MTI2OGQ2ZDJjOWIwOWY5ODI3MTA3NjhhYWZmOWQ1ZTMzMzdiMDI4NTk2ZjMxODQyZmQyM2U3NWE2NjgwNjNiZGIwM2NmMWQ3ZTFmZjQxOTI1MmQ0NDMzNTcxMmYxNjcyMGFmZjUyYiI6ImU1Yzk3MTJlYzU4M2IyZGJiZmU3NmQ1ZWVhOTBiOWUzYjY4MTVjMmUzODc4MjE5Mjk4M2M2YTAyZWZkOTFhZmEiOiIiOiIiOiIiOiJmNGQ5OTQ2NjJhY2IyNjQ0ZTM4OWI0MWM3MTEyMjA1M2IyYTliYzY4MzAzZjRjNzc4NzBlNDI2YWMzOGMxYjIwZDEyY2JkOGFkYWZmYjYxMWUzYTMzNjVkZWZhZDgyY2M4YzJhMjdkNDBmNTdlODAzNWUxNjQ3NjQ0MmNlNGM0YmVlZTlkODIxMmQyMzBmNzk2ZmQ5MmIwMmQ3OTc1NzkwMTIwYmJmN2E2YWY4MTE1YzA2NDU3ZDc2N2M1NTQzYTZjMTc0MmZmNzQ1OTk5ZjhlODE1ZjVjYWVmYzkyYjk1NDBhNmZkMTlhZTk3M2M1MmIzMjFlN2Q0ZDdkOWI2YWI0OTAwZDEzYjdmNjMzYTdiOGYxYWJlM2UxYTA1NDBiNTgwM2I4OWQ3MWIzYzRkM2E1ZGM3YzRjMDc1MWUwODhmMjdiNzQ4NDQwZGY5ZGYxNGZlMjUwOTZmZGNhZmExYzNlMTZkNDkyMzVkZWZiYTgyZWQ2ZGRkMWZjOGE1ZmU5ZjVkMzYwYmQ3MmUwZDE5YjIxY2JlY2UyOTczNzAzNzgzMmI5ZWYxOGI5NjU4MGJhNTBjMzQ0Njk1ZDkzZDA3YjEwNWYzOWMxN2NkOTFlYmMyOTE2MThjODg2MmNkNDc0NTk5NDZmNzM1ZmE3ZmM3NzhiNDQ4OWI1NzRkNmU3N2VlMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI1YzlmNWRlMWUzYmJiNTE5M2JiZGFiYzYyMTFlNzk3ZGQ4OWVhYzA5Mjk5NWE1NTM5ZWRlNWVlM2Y3NjljNGMzZTIyMWU2NWVmZDZkYWViYWYyYjY4ZTQzNTNjMjNkMDhiYmZlMjZiNjlhYmQ4ZGJkYThlNDFmNGY5MDU3YWQ3MTQ4NTQxY2NhMjhhYjBjM2VhNTEyYWFkY2M2NWVlZjI4IjoiMTdmNzAzYzU0NDk5ZmU1M2U2ODhjNmQ0OGI0YTA2MDRlZDlmNmM3MWIxY2I0ZmI5Y2RlMzdlYjhmZDJhMmVlMCI6IiI6IiI6IiI6IjExYzQwZjIwOTMwYTlhZTA4N2Q1YWU0Y2Q5M2M2ZDhkZWZjMDczODg4ZjRmOGUxNTNiMTYzZTdkZWQyNWEzMzEzYTU1YjM0MWQ0MDMxNWQ3ODUyN2FlODdjOTMyYzkwNzFhZDY0MTY4MjNkMjY2ZmUyMzAwMGUxZTMzNDYzZDJmNjdjNzNjNjg4M2FhMzAxZTVmMTI4MjA2NDBmZmI1MGI2ODBjM2FkZWQxZjZiOTNkMjFjM2MxYTllYTAxZWNjOTY0MmYxZTY1MzU1MWQ2ZThmYThhZjZhOGVmNjI2ZGVmNjljNjU1NzFmNGEyNmE3ZDhiN2JhZDEyNmQ5NDU5NjE3OTdjODE0N2MzZWNhZDQ2MzdmOTE1ZjhhM2E3M2IzZmYyMzVhYTNjNzEyNzNmMGNjMGUwMjNmYTI2YjhhNTY3ZGI1NmE0NTZkNTg1MzY4MDc4MTdkNWY5YjA0ZmJiYjk5ZGNhMTYxNjQ2NTI1MjZiNGU4NDc4MWYwOGYxNTAxMzY0YTFlM2I3MDk4OTRmMDEwNjkzNTIzZmFjZDBlYzljNjFjNDFhZDk4NDdhOWFlNDdmM2I1ZWU1N2NkZDYzYWExNzljYWYxY2M0OTU3YjU5NDYxYWZmMDFmMDgxODBhNTMzMzRlZDQzNjY5NzY4OGM1NTYwOGExMmZkZGY3MjM5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJjNWRlMzVjYTQ4NDg2MTU2OTc2OTNkODM5NjE2YTQyNzI5MDBkYjVjODk0YmIxM2ZhM2E0M2FmYjllMmE3MTRjNDdhNjE4NzFiZWQ0MmM2YzJhOWQxOTBiOTQ2ZjcyMDFiNjcxOTkxYzQzZTVkYTQzMjU2NjZiMTQwYmY5NmYwNTQ4YTcyMjBlZGYyZGJkOWJmMGJkZTcxOTA2MWMxMWU2IjoiMDY3ODc4OWY5NTRlYTMxNGRhYmZjZTQ4ZDA5MGJmOTNhY2FhMmY4OWY3ZTFhOTJlNmVlMGY3YWZiMTk3ODhmZCI6IiI6IiI6IiI6IjdkNGYyOWZlOTRiYTg3NDhkNTM0ZjNmYmZkZDZkZDhjYTAwZjM2MmVlZDRhODRiMmVhNGMwZWE4MzI2NzI0NjM0MzI3MWJjOWQ0OGQ2ZTVjMDI2NWRhN2MxMWVhMGE0MGJhOGNlZjllYTc2YzY0OTQyNmQ5MDg5ZjBmZDgxYjY5YTMyOGVjNTExY2Y5NmU3Y2E3OWU3Y2Y1MWI5ZmNlNGE2MmE4ZmRjNTY4YTRmZjE5NjA0NTQxYmEyZWE0MjhlYjI4YWU0OTY0NWRjMDQ1MTcwOGZkNTNlZTdlNmU2Y2I4ZWY3NjA3Nzc3Zjk1OWExZWZkYzE3MmMxMGUyOTBmMmY3ZjNiMmNlZTJjZTVlOWE4M2MzOTI4YzU1Y2VlMTgwYmZhMTgzNTlkZmQ5Y2ZhZDEzNzdjYzBmZWQzMjFlYzlkMTNlNGJhYmMyM2U0ZWZjODk3NTQ2NDhlOWM2ZWJlN2Q3ZjY5YWNkYTg1YTU2NTAxYjhhYTg4ODdmOWI4MDliMjljN2QzYjAyYThhZmM4YzFlYTliZGYyNjE3OWI0NTQ3YjQ4MDEwMGM5ZTZmN2QwNWVkZDYyMDU5OWQzYmE4NWM5NjU0OWEyMGRlYzgwODRkYWU0Yzk4ZGNhNTU0YTJjZmYwOTRhZmVkOTY2YTFiMzEwOWRiYmQ4YWM1YzUyMzA0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJjZjcyZGM4NzE1NDUwMDMzNDhjYjJlNDU4YzZmNGZkNmRmNTIyMGNlMzg5YTc5MmY4NTQ0OThjYWJmZjFiNWM4OGUzNzMyZjZhYTk1ZWFjYTJiMzE4YTRkMjlkMmQzM2YzYTI4OWNlYjFiZDg1OGUzYzg2Yzc0MDQ4MjVjMGMwYTgxMjA2NGEwNTMyNWUwOWQzNDU1M2E2OTFhNjAxODY2IjoiZDhkZjMxN2U1MDVhZjAxNmU4NjI5N2YwMmZiYTk0MDU5YjRjZDMxNTI5ZDhjMWVlMWIzMzEwN2RmNzUzZDg5ZCI6IiI6IiI6IiI6IjE4MTg1MWViMzhhNjdkOTU1MmM4NzkwMmQyNWM2N2FmZDM3N2FlZTU4N2RhMTIzODZhNDYxNDhjNGNhYjQ0ZWQ1YjYxNzc3YzIyNDdkMGQzOWUwOTkxZmE2NDYyNDc1ZGE5NzYzZDMwZjFhZGM5YTFkMmY5MGVlMzczM2NmMzM1NjQ4NzA2YmM3YmEwNmM4NjJlYzk5NjlhMGFlMzhiN2IxZTE0ODE3ZTBkMWRkMDZiYmE3N2E3MzcxZjYwZTA4NjdmZDc3NDRiMGI0YjdlMzZjYzFlMjgwMjM2ZmNiNTE5M2M3M2EyZDAwY2QwYzI1NmI0NGViNjQ5N2VjZDY5ZDE2NjlhZDNlZWM4YTRlNGM4YjczMGQ4NWUxMmQxZDljNDAwNzBlNjQ1MDIwZDdhZTIzNjBjZDBkMzlkNTU5NzEzYjRmMDEwYTMxOGRmYTkxZTQ0NTQ5ZmQ4NWU1YWU4N2JmZjE1NDczMDViZTViNzg4YjU3NTBlYmFmMTFhNjBiMGNlNmQyNmRkNjlkMjE5YWVmMWE5YTAzOGRkYWVlMGU4MTM1YTQ0MjgwNjI4MzdhZjVlMGFhMWJlODIxYWYwMjQ2YzYwNzZiYTlhZGE0ZTBhYTdmNzQyMDJlMTA4MDI4NzkxNDJjZDEwOWNkMjdhMjkyZDA0ZTZjNTNlMzNkYjBkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJjODlkYzE1NDY3YWUwOWQ1YzUxNGEwOTQxZjM5NDViMWY0YTE2NzBhNGRmOTkxMGQxNGM2OGFhNmQzYzM2ZThmNWJhZTBhYmFlZmQ4ZmU1MzAwYjU2YTdiYzM4MDgzYjU1NjAyMDI1YzIyMWUxZjBkMTY3MWYyYWU5MmJiMGM4NmZkZTU3MWNjZmU4YjhiNWJlOGE5NGYzZjFkMDI3ZWUyIjoiODEwOWRkYjI5ZDgzOTVlOTM4YWEyMTA4NTJkYTZiZjFmMWEzZDAwYmU5ZGY3NGIzNzJlMDgxZDUzODk4MzE3NCI6IiI6IiI6IiI6ImUxYzVkMmI0ZWYyOWIyYmZhNDk4NTQxYmUwODdmMjEwNzViMGI3NDQ5YWM3ZmQyMzRkOGU2YWY0NTY4MDkyMGJiZTFkYWUzNTg1MGNmMjc0NjkyMDkxNjJkNDE3NWVjNDJjM2Q1Y2Q2Yjc5NjVmOTU5NDhkOWM0OWVlYTJkYjlkY2E4M2QxYmQ4YmI0OTA5M2VhMGFmMTI0OTdiZGRkOGNhZGEyMGJkYzk0YTQ1Mzc5MjgwMGNjNjZkMDFjZGY1ZTBhZmRmYmRlZjNjZWFkMjkxZTViODhiMTE2ZmI0N2I4MmI0YjE4ZDZmYjM2M2Q3MzM3MTg0OTZlYTIwY2EyNjE0Y2FlZDYxZDgyM2NhOTkyM2ZjZDJmNTcwYTljMDM4MjcxODdiMGNmZWQxOWJjZDJjMmU4N2Y1ODUwOGRhOGUxMDk2ZWI5ZWI0YzJiYTIyM2NkZWQ1MDY0YTZhOWI1ZWVkOGNlZjZmYWJlM2FhYWNiODhiNThmYWI1NzBhNTZlODBjYWRlMWJlOGM4MmYzYjY5MThhN2U1NzRjOTFkYzRmZGRhYzQ5N2YxY2YyNmE4MDFkNmNmMjRjZTQ5ZWQ1ZThiYWZiZWUwOWVjZWIzOWUxZjgxODIxZWY1NDc3ZmEwMzk0OTkyYzg0OGZkMmNlZGQ4Zjg2YzRjNGEzOTZlYjNlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIxYTEwMGVjMGRhOTU0NDMyNjI4NmIzODcwNTUyM2FjOTcwYjg5NmVmNmU2MzA2YjIxMjRlMjgzYTg4NTFlNDZkM2E0YjJiYzZhODE1MmVjOWIwZjg4ZDBlMmJkMTUyOGIxM2VhMzA3YTMzODRjMTBkMWZlYWQ2MGI5MGJmMjVjMzA1YTkxNTU4YzE1MzdlMmE3YWM3NGE4NTI0MDIwOGY0IjoiMDA1NjEyZDg3YjZkZjAyMDRjM2Q4NzliNWNhMzBiZmM0OWRmNGUxODkyODUzMDdlMjkyNmIzNjdlYmFjMzBmZiI6IiI6IiI6IiI6IjAxZjU2YzNhMzI1YTM5YTJiYzg1ZTZlMDc3YjdhMjg2NDkyMWE0YjIyM2M3ZmU5OThhZTI1NWQ3MjRhNzU5YTY2OTcxMDg0MDQ3YjQ0ZmMxYjhhZDAxM2U5NzZhYjhiMjU1OTMwMzM3ZWRhODc2MTIzNjRkNjA1ZjI0MTA5NTIwMGY4YTg1MTNhNjEyYmQ4NDdhZWExMTZiNzMwNzgzNDliN2NmNjBjZDI1ODhhOGY3NDMxNjcxYzNiM2M2YWIyZTRkYmE5Nzk2YjFkZGViMmUxZWRkNGNiM2M0ZGQ2N2NmNzIyNjc5Y2Y2NGM1YjIwYzY0ZTI4YmUxYWM4N2Y4Y2Q5ZjE3YjU5ZWQ2OTZmNjFhNGE0NzJmZGYzN2FhOTBhMmYxNmVkZDNkNTRjNWFiZTdkY2IwZTk2NGJiZmJjMTEzZTY2YjE4ODdlMGRhYTIxNTE2MzViODAzYzAzNDBiYTU1ZTNlNTgxN2NkZTI2NjJhZDQ1MTMzYzI3NzUwMjQwMGI3ODI3Mjc4NmM3YWE0MGM1NDIxOWEwNmI1YTMyZTA4OGJhZjA2MTNmYzUzNWRiZWY2NjI0MWJlZmEwOTcyMmYzNzMwYmM4NWMwNDM0YzczM2FiMTdkY2M3YzQ3M2Q4YjlmMzE2NTE5MjE0MDdkODUzNjliNmY2ZmI2MDlkNTNmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI0N2M0MmRmNjJiNGRkNTcwZWZkM2MyNzIyYWQzOWEyZGY1Zjk2OWExM2Y2NDVmZDI3YjUyOTA4NzdiYTcwOTE2YzU5MTkzNGQ0ZjY2MDAwZWJmOGM1MDhmYWZjNDRmNzVkMTZhMmM3MmM2MzU4MGI5YmNmMTU2ODYyMjE0NTMzYTQ3YjE2ODZjODcxYTAxNjU2MDRmZGQwMGE0MTJhNDg0IjoiOTQ4MjI5MDNjYjVjMjAwM2MzMWM2ZDA3MmFiMGRkYTQzNWFkZDBkZTdkOGY5ZDVmMDhiNWNiYTQxMGQ4ODhmZCI6IiI6IiI6IiI6ImY3OGU2MWI0NDNiNWE5N2I3ZTQ5M2E4Y2UzNWE0MzU0NTI5MGRkMzNkMTViYTRiZjBmZjc4ZjM0YTI1YzQ2YzRmZjRjZDQ4NTk2NGNjOTZlOTBmZTg0N2Q5ZmM5ZTQyZDk2ZTRmNWFhY2NmOTc2YTg0ZTNlMTIxMDBjMjhiMGY3YWRkYjFjNzZmODk2NjNlMTE4OTBmMDllNGJlZWZlOTI4YTFlMGIzMDRmMWQ5ZGQwNDE0Y2QxMTVhMDFiNjQxZmQ2OWM3MDcxZjJjYTdjN2YyZTUzNTYwZjRlOTEwMTBiYTExOTQ4MTk1YmM1ZGViNTU2Njg2ZmViMGJiOTJmZTYxYjMxNzFlNjM5ZWY0NzQxOGYwMmJlMzc3OTZlZmRiNjkyMDk1MmYzYThjNzY2YjUyZmNjZmE3NTdlOTIzZTM4MDI4YTg0ZjliZTFiODAyYzFmYmJiYjRhZWY4MjVmNGM1ZTRmYzFiZjZlOTZmMzNhYjkwZWE0ODY3MTA3MThjOWU0ZjMyNDdiMmE1NWNjZWY1YTVkMzQyY2FjNzU3ZjBiOWY5MGJjZGNjOGMyZWMzYTQzMTQ5YmJkMzkyNGM4NWYwYjViN2FlNDIxNTFmNGRlZDgyNmVlNmQ0Nzg0OWVmNGU4YWY2NGFkZjY4NjM5ODI1MDNjMjNjNGEwNTE0Y2UwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiZGE3NDBjYmMzNjA1N2E4ZTI4MmFlNzE3ZmU3ZGZiYjI0NWU5ZTVkNDk5MDhhMDExOWM1ZGJjZjBhMWYyZDVhYjQ2NTYxZmY2MTIyMTdiYTNmZjkxYmFhMDZkNGI1NDQwMWQ2MWQ0ZDhhNDFjMzI1NGI5MjEwNGZkNTU1YWRhZTA1NjlkMTgzNWJiNTI2NTdlYzdmYmJhMGZlMDM1NzljNSI6ImZjMjI3MjkzNTIzZWNiNWIxZTI4Yzg3ODYzNjI2NjI3ZDk1OGFjYzU1OGE2NzJiMTQ4Y2UxOWUyYWJkMmRkZTQiOiJiOWVkOGUzNWFkMDE4YTM3NWI2MTE4OWM4ZDM2NWIwMDUwN2NiMWI0NTEwZDIxY2FjMjEyMzU2YjViYmFhOGIyIjoiYjc5OTg5OThlYWY5ZTVkMzRlNjRmZjdmMDNkZTc2NWIzMWY0MDc4OTlkMjA1MzU1NzNlNjcwYzFiNDAyYzI2YSI6IjIwODlkNDlkNjNlMGM0ZGY1ODg3OWQwY2IxYmE5OThlNWIzZDFhNzc4NmI3ODVlN2NmMTNjYTVlYTVlMzNjZmQiOiI1YjcwZjNlNGRhOTUyNjQyMzNlZmJhYjE1NWI4MjhkNGUyMzFiNjdjYzkyNzU3ZmVjYTQwN2NjOTYxNWE2NjA4NzFjYjA3YWQxYTJlOWE5OTQxMmZlZGE4ZWUzNGRjOWM1N2ZhMDhkM2Y4MjI1YjMwZDI5ODg3ZDIwOTA3ZDEyMzMwZmZmZDE0ZDE2OTdiYTA3NTZkMzc0OTFiMGE4ODE0MTA2ZTQ2Yzg2NzdkNDlkOTE1NzEwOWM0MDJhZDBjMjQ3YTJmNTBjZDVkOTllNTM4Yzg1MGI5MDY5MzdhMDVkYmI4ODg4ZDk4NGJjNzdmNmNhMDBiMGUzYmM5N2IxNmQ2ZDI1ODE0YTU0YWExMjE0M2FmZGRkOGIyMjYzNjkwNTY1ZDU0NWY0MTM3ZTU5M2JiM2NhODhhMzdiMGFhZGY3OTcyNmI5NWM2MTkwNjI1N2U2ZGM0N2FjZDViNmI3ZTRiNTM0MjQzYjEzYzE2YWQ1YTBhMTE2M2MwMDk5ZmNlNDNmNDI4Y2QyN2MzZTY0NjNjZjVlOWE5NjIxZjRiM2QwYjNkNDY1NDMxNmY0NzA3Njc1ZGYzOTI3OGQ1NzgzODIzMDQ5NDc3ZGNjZThjNTdmZGJkNTc2NzExYzkxMzAxZTliZDZiYjBkM2U3MmRjNDZkNDgwZWQ4ZjYxZmQ2MzgxMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImMyZmY5MTFiNGM5Mzg0NmQwN2UwZDAwZWVlYWQzNDIzODQ1YzcyMTVjOGI1ZmUzMTVhYTYzODc0NWU2M2NhMjZmMTA2MjMyMTMxODA4N2JmMDQ1OTAzY2Q0ZjVjYzllNjFhMzE4YzI4NjFjNmE5Mzk0OGQ3NzlhYjQ1ZjE0ZDQ1MWJjZWYyZDQzYTVhYzc1Mjk5NWJjMGIzNjViYzNmYmMiOiJiNjJmOGVkMjhhNzJjMjhkODBiNDFlMDE2ZjU1OWJiZGEwYTJhNDQ3ZjhlMTQ2ZWI5M2E1MDliMzAyZTAzYzQyIjoiNzdhYTFmZjc3YmYwMzdhZTI2ZTYwZDQxMmYzMzQxNzE1YWZjYzFmY2QzYmY5NzFhNDgxYTE1ZDQ1Yzc5NDMzMSI6IjU1Y2E4M2RmZjA3NWY0ZGU1NzU4OGRjZWM5YmNmMGZkMWZhMjY3YmMyODBkM2M0OGYxZjFmNzQ5ZTE5OTdjYzIiOiJlNDJlNGFlY2E2NzE2MTgxYzcxZWJkNDYyMDgyMzA5ODY4ZjZmYWFmYjVkOWM4MjM1N2M3ODUyODNmNmQ1Mjg1IjoiMzg0MzgzYzQxYjRkZjIwNWQxOWZlNjhlNTYzZGJmY2QyZjZlZGJkMTc2NTc0MjQ4ZjNkMWVlNDQxNDNiNzBhYTVkZWE2OTViODdiYjZjODIzNzg5NTNhNzE0MDg0ZWJiNTYxOWFjYTdkNjNlMGRmYmZmYzI1M2EzMzZlZGY4MGFjYmQ1ODRjZDNmOTE2ZDYxMjY5NjhkNTY0YzFkYWJmN2IzNDc5YTYyZTdkZmNlNTYwYjgwYTUxMDQzODliY2Q3NzFlMjAxMzhkYWQ0YzU5ZjI5MGE0NTI1YjAwZjY3OThmYjJhM2M4ZjQ0NjA1YTI0NzY1M2QyNGM3NzJkMjA3ZjBjY2RjMTlhMDcwMzc0MjljN2U3OTc3MWM2YTZiNGNhMjE5YTFmOGVkOWJiYWQ5YzRjYjI3NDE1ZDE4YjcyNzg1NTJlNTBlYzZlMjU2MTdjZWZhNzMyNGFkNzg2YWFlY2E4MTFjM2FhYTM1YWUwMGQyZjIxNTJmYjZkOThkY2E4MmViZTU3OWJlZGJiNTBhNDBlNjJhZjllMjI5ZGJmOWI5YjJiYzY1MzJiNWQ3OGU2MzMzY2ZlYjFhZDAxZTE5MjQ5MTE5M2M5NDU5Yjc4ZDRlOWM2ZThlZmU2OWNmMGM3MDIyOThlMzI1ZjEyOTAyNzE0NWFmOTIxNzBiODQzYTUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJlMWEzMzNmZmU0YmNlN2I5ZjZiYmM4ZGFkODc4N2E4MmFkNjZjYTliMjVhNjRmMDRiMTY2ZmFjZTk0NWMyNDliNWY0NWNkZDMxOGMwNTg4YzdjYmNkMTQ4NDY1MjM5NDNhNTkxMTk2ODM2MjgwMjBlOTAxYTBhN2ZlZmMyMTYyNTg2NGVjYjFkNzZlYzExOWExMDgyMWI0OWEzNDMxMzQ4IjoiY2UxNDY2MDYzZGUyMjFjNGZhMWNjMzA4NDQyZGI0NzZhY2ZkOGZmMzRiMmEwZGJiYmUwZWNlZWFmZjIxMDI5MyI6ImQ0ODFlMDIyYTgwZjNlNjA2ODdiZjE1MzUyNGEzM2JkNmZlNDJjNTRjMzlhMzc3YTlmYzI3ZTA0N2RmNTNmMTQiOiIyNmE4OGFjZjY3ZDVlZDAwMTg0YmFhZDY2NGM2YjJkNGE5MWQ0MzdhMTIxYzNjYWQ5ZWFiZjNkN2U2NzZiMGQwIjoiNTI0ZTQ4OTZhMjJiZWRjNjI4MjBjNTAwZWQ3ZGEyYmJiYjRjMWVmOWYwN2I1ZjM3NGQwZmI0YWU5YmJlNTBlMSI6IjNjM2NmZGViY2EwNjBmNTM0YTk1MmU0OTMzYzJjMDBmOWVlMGZjYjgyNWE1OGFiYjZhZWJjOTUyZTE2MDY2OGY3MTEwNjg4ODFiYThhNjgxNzUwMGJiYTFjMjg4NjdjZjIxYTEyYTUwZTQ2NzkyYWJlYjlmNDFiYzAyMzIyYmNlMWU3N2QyMzZiN2E0NWE3ODA3ZmUyMmI4ZWE5ZTI4NTlkMmIwMTY0NzgzZDM2NGY2YWQ4NGY0YjkzNDFjNTc2Y2Q2YWIyYWIyNDkyNDZiZDc2OTEwZTBhYmYxMTVlNGM1OWUzNzA3NGRlNWY0ZGVmZDAzZmE2MWNlMTczM2UzM2M5ODg0OWVjMjhjYTYxYjg0NTAzNTIxOGFmYTdlZTI4NjdiMzJiYTFlZmM1MDkwN2Q3NmNjY2E1YTdiYTY5ZTk3MDA4NzViMjAwY2VjNWQxZmFkYWFjNzdhMDk2MGM0ZWI4OTljMDYxMzRjZDljYjY2M2M2MmI2OTQ0NmE0NjBiYzllM2RmN2VhZjJhMzRkZjAwZmNkODM4ZTg4MmY1YWYxYWE3MDFkMzVkYWNlYzBjYWZiZTc0Y2Y2ZGRlNzg5M2I4ODAwNzFkM2YxYzllNTNiMjA1YmRmZGU5ODA3OTk5ZTczNDY4MjY0ZDYxNzJjOTUyYTdmNWY4OGE4MzZiMWMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiNzNjYzhjYWVhN2YxZjIxMjliZDAzNWI3N2JiYTIzMDljYTNiZWM3M2U5Zjk5M2ZiY2NlN2UzZjE0ODY3MGJjYTY1NmUzZjE3ZTVhOGNlOWJmZTM2NjVmNGI2Y2E4YWM4MTExZmUwNTFlZTBlNzYwYjI5NWI3MzQ3MGRhMjcwODFmZjE3YmZjZDZmZjkwODVjNWUwNjRhYjg0NDkyN2Y4NCI6ImVlZjMzOGViZGY0ZDkzOTk0NDE2NTUwOTAxMzZiZWNiY2FmMjc3ZTVhYzczNDI2Zjc5NTUyYjNmMjc4MTlhYjYiOiIyMTE0ZDMyMGI2NWE1OTA2ZDA0YzUxNjZlZTgyZTcyN2NjNTNmMGJhMzNlZDU0YTMyMjlhZDk1OTI5OTU2OTVkIjoiZTNmY2U0NmNkNWM5MDkzNmYyMDI1MmUwMDY1ZGVlMTk0MGM3OTAyMTk4YWUxMDUwMTdhOGY1MGQxNDNhNTBmNiI6IjdhZDI3ZWE5NGRlNmVjN2FkN2NjMTg5NTM4MWM3MzVmMDA3ZjYwODdkNjg4YTA3MGI0Y2RmYWVjZGQyYTMzNDUiOiI4NTgxMDhmZTFhZGY5MGZiMzIzODM2M2NlMzUzMjM2MjY3NWE0NjI1NjNlNWMxMmRmOTdkMDU0MjY3ZGYwYjIwNWVkMzk2MGQ4Njg5M2M5M2QyYjE5OTdkOTVhYmQ5MTc5NTEyMjg5Mjk3YjAwY2FjZDFhNTEyMDI5MjNjNDIyNDU2MWU5OTg2ZDAyNDJmNTBlYTQ2NjdmZDY0MDJlMjlkMThjMTg0MDI4Y2M2Yzg1ODM2YjE0NTVlMmQyZTliMzg5ZTBkNjViY2QyYzc4ZDVlNDJhZDllNDc3MDdjOWRkNDYxN2U2ZWYyZDY0NTkwZDBlMGJlNWU0NDY1ZWI2MTFkOTFiMWE0NWJjYTFhZjA0NjMyZmM4ZGQwNDVhNWY1YmEzZWMxZmMwOWUzYWFhMWQwMzcxOTE4MWUxMWM4MGRjZDFjNGQxYWFjM2NhNjlkODliOWQyYzZmZjc1NzVkNzg4NDNmYzQ2OTVjMTk1NGZjNjYzNzMyNDE4YmRkYmE0YjIwNDM5ZGEwM2QwNDI4ZmEwNDdmOTlhMzc4NDQ3ZjllNTYzZmU0MDVmZDhmOWMzMmQ1ODBhYTZkYzE1NjBiOWRmMTUzMGZjYzdiMzM3MDcyY2I2MDAwN2I0ZTI3NjJkYzYxYTA4ZTY1MTFlN2M5M2I5MTMwM2FhM2Q0NmMxNDQ4MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjVlZWRkMDM5NzY0ZTdhZjk2YzNlZjdkOWUwOTRlODYxZGMwODM5YzJhMjY0MmM0MDgyYWZkMDlmMjc2MWMzOTJhNGViOGZiNjA3Y2E3YzVkN2Q0ZWI4ZTg3MWFhOTk1MDM3YTI5N2FmMDdiYTM2YTU5NTcyZTM5NzUxMzhmY2ZlYTY2N2UwNmQ5YTRiZmQyZTljNTcwZTYxZmJjMDkwMDYiOiI5MmEyNThjMGNhNWE5YzAzMGRkNDY5Y2E1ZDg4ODNhZTVmM2ZkYWY3ZDhlMGZiMjM4NjdkMTUwZjNkMjRhMGE5IjoiOTU0YTk0MzFhNGY5YjM0ZjZjMjhmYzQxYmUwNWZlZmEzNDQ5YzhjZTAyNjVhMTliOGE0MjI5MzU2OTBiNTBjNyI6IjE3NjVjNzAxYjI3OWNkZTM4YjQ2OWJmMDk0OGY1MDBiNWFmZWE4ZjdlYWFjM2YxMDBhZTVmMGIxNDcwMDVlYTIiOiIxZjZkMzgyYjhhODk2N2VmYjlmZWZmYjg1NTdmMWNmNDBmNGY2NWI1ZmE3ZDk4NDZjYWIwNjAxZjUxNTA0MzBiIjoiYmJhOGY0OTZkNDdlYzk3ZDkwNTMzNjUwMjc1MjQzZmU3Njg0NGI2MDZkNzE0YzhiZGYzN2RiMWUzZjgwNDVkZTQ0NDgyZDY1YTk5YjZkNjBlZTRhZWNkYWYwZDI2MmQ5NmMwNThkYmQ3MDRlZTk2ZTRhZTUyYmQzZWE1NmU5MDYyYjkzZTJiMDQ0MTI0YjdlOTMwNGRmYTIzN2U2MjNkN2U3YmNlZGY1OWJmZmZlZTFjNTgxYzdlNDFhNDAxODMyNDQzYWU4MGM2ZjRiNzY0MzU5MWJkNzgyNTQ5OTYyMzVkMDExMjMzYjE4ZDk5M2I5NTBjY2YwOWJmMjliMmFlMTBiODVlNGNjNGZlYmE1NTAzZjhlODFiMGQwZTdiNTBlN2ViMWEzNTg3MjYzNjllNGFmMDdlZjY0YWE4MzgxM2U2MTM1MDA2ODAyNjE2MWEzY2NiYTgwOGE5OWQxMWU3ZGU1YWZkZDkxMTM3ZmVjOWI3N2RlOGI1OWRlZDYyODZlNTkwZmZhYjIxZmRlMTkxMzYyYWYxMzJiYWMxZTgxNzBmMzZmOTVkNTM1OTNlNzNkMTc3NTYwOWEwZWYwNGQ5YTc1YTRiYWIyNmY5N2QyNTNiOGUwMGNhNDMwODQxY2I1YmJhNDQzOTEyNGFiZDM3ZmI0M2YzNTEwYmQ1NjkwYmMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiI5NWUzM2UzZTFlNWQyNGRjZmJjNWE1MzRhZDBlNmFiNmFiMTVkZDZiMDk0Yjc2NDJlMjE4N2FiYTlhMzAzMTM3YjViN2RjM2Q3MDI1M2MzYThiNDQ2YjU5MWZhYjY5NTBjNGY2YTMzZGU1MjU3ZmRjNDc0YTQ2ZWJiZDM2NzQ2NTEyN2U2YTllYWE5N2UxNzg1MWY5YTRkNTVmZTRlOTU0IjoiNzA4MGM3ZDRkZGQ4ZTMyZmRhNDJlYTIzYWRkZGY3YTRkMzg5M2JlMmNiODdkNmM3MjkzYmZmNTIxYzI1MjE4OSI6IjYxMWVjMzBiODdkZGQxMDk2Mzk2ZDUzOWVjOTczZGNiN2M0MDhhNjJlNmMzN2JmYmU1NjNkYmI2MGQ5ZjQ5MzIiOiI4YTRhMGY5ZWVlNjdjNTRlM2RmZDg0NmVhOTI5ODFjZDc2OWE4YzdmZjRmMjY0NmM4NWU4MGEwM2ZjNTU2YmMzIjoiMDVkYzM2YjVkMzU0ZjRjM2I5NTAwNTNmOTI1NjE2YzI3ZTIzMTdmODg2ZDJhZjA5ZWMxZWI3YWM1Mzk3OTc3YSI6IjkwZmU5NzhmZWM1Y2IxNGFkMTgwZTFjYThkM2UyNjY2NThlZmQ5YjBmYzk1MzUzZDRlZGQwNmM0NjgyNTcyYTQ2ZTkxOGQxYmY0MjY5ZDM4ZjViMDA1NjkxZjRiNWE4ZGVkMDg5ODNkMzA3YTBkN2RlNjRlNjgxYTMwMmVhNmQwZmY4ZGRiODdiY2I1YWIwODcxNzc5YjEwNzQ0ZDgxODhmN2JmMmQ2NDk4YTRlZTk5OGRhOTNkMWEyZmRmM2QzZGE2MzVjNTJjYzI2OTc3YjI1ZGZlMTdhNWY1ZGNjODBmZDcyZDA2NmRiN2NkYmVkYTU1N2JhNTI1NTRlMWVmNWEwNzVkN2E0MGNlY2E4M2NkODM0NzdkOTk1OTEyMjhmNGFlMzMxNjNkNzMwNDVkMzViZGY4OTJjZDIxMDgzYjhkNzBhMzI5NzIxMmVkZWVhNTdlYmZiNjZiYWY3YWYzODgzM2U3MjExMzAwMWMyNDg5ZWE0YmVhZTU3OTk1MTY5YTEzNTQxMzFhN2Y2MDdhMTU1MTY0M2QyN2Y1NmNlOGU5NjE0M2E3OGIyYTE5ZjlmZDcyY2FlOTA1NDUzM2ZkZjE2ODI1ZDg1MmM5OTBkYmNmMzQ3ZDMyNTI5OTUyNDQ1Y2FjYzU1Yzc5YTc5YzU1ZWJkZGE3NmYyMjZiYWI4MGQ2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYjQzMzAxYzFhZjAyNGJhNmNkN2VhZGY5ODVjYjFjNmMzMDM0NzllYzNhYjQ3Nzk3MzkyZDQyMjA3ODhmNGRhZWMyYjFmNWFjNjEzOGJjYjgzZTkzOGJlNjZiMzIzMmY3ZjAyMmY0ZTU0OGI5M2U3YThhYTRkODUzZmMxYjRjNDJlZDliMTgyYWU1ODJmNjg3NmJlYjI2OGJhMjNjNDEwNSI6ImFkN2ZjYmExZjkwYjI0MzY4OWI4NWE0ZWExZGMxNTBiYmVjYTQwOTNkZDhiOWEwYTQ5MWE2NzgwMTFhZDgwN2QiOiIwNDEwNTI3NTg5ZTcyMDI0NDkxZDRiNTMyOGI1NjU5YTMzMGQ5YjE2N2ExYTI3MjUxMzYzZTI2MmYzOTNlYjU3IjoiNWRlOGZhYzYyMDYzYTY3NjkwNGFhOTYyODA0NmZlNzFmMDgwY2UyODVlZjk2NGFjZGNkMTEyNjA3MzRmMmQ5MCI6IjJmMTRhMzI3YmRiYjliZTRkOWE4MTNkZDczNDQ1YzhhOGM5MTFhODc0ZGFmMDhhNTUxZTg2N2Y1NDk4M2RlMmYiOiI0MWQ1NTNhZGNkMDY5YzdkMmIyNjU3OThmODg5MTMyOWIxZGJjYWJlMmU3YzAzNTAyNTQyYjMyMmQxM2VhNzFjZDgyNzJlZWVjNjVkMzE1MjA3ODIzNTFhMzM5MTVkZWNjZmI4ZTEwY2I2NGQ1ZjljZDg4ZWIzMDYwOGY3YjEzNjQ4NmI1OTcyYTY4Yjk4MWUwYjliNzI5OGJiNjcwYWNlNTY4Yjk4Yzg4ZDM1YjRhNDBjMjViZWRlYzk0ZWZmOTkyYzAwODNlNTM5YWRjY2MzN2NhNWE0MDkzYWM5NmFhMTNjODNhNTljMDgwYmJlMDJlMzdhODEzMDM1MDAyMjRkYWE0ZjM4MGQyYjg4Y2I4NGViYWFjMzQyYmZlNTc4OTY1ODU4NWQyODkyY2VmMmJjOWFiNmYxYWQ1MWZiMjkyZTUzMWJjMzMxODZlMzliOTNmYjY3ZDRhYzYzM2EyZjRmOGM2ODFjN2Y4MmE4MWE0N2I3NDkwNTYxM2JmMTBlYmQzYzU3ZmQ2Yzg2MjRiYzdlNTViMzhlMmFkMDYzYWVhOTBmYWEwMzhkNjcxZjg2YzZiMTdkNDM0MTAzMmUxMWUxM2M1MjZjNDgxOGRmYzQyY2RhNDk2ZWNjMDYwZDlhMWFjNDVhZTBlNzJhNmUwNWJjM2E4YWE4NTFhZjUyMTRiMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6IjgzN2U5MDQ4ZTU1NjRkZjAyZTI1ZjdiNzU4NWFjNTYwMGNlNGNkNmE2ZGU4MzExYzZiM2M2MDg0MzU2YWQwZjlmY2RkYWQ0N2U3YmI2YWQ3YWM5ZjMzMTQ1ZGUxMzU2MDU4NjY2MTFjMmIwODNmZDFmOWU1Y2VhOThmMjcyNWNkY2ZiMGQyZmY2ZjBhZGI3NGQ2ZmI2MWY4YTZjYTAyYjAiOiIxZDE5NGQ2OTg5N2M1YTdlOGMzNmNjNGNkOTc3ODQzMTJjOWI2NTk5Mjc0ZTNiMjBkMDIyYjEzNDlhYzQ1YzU4IjoiYjZhODg4MGQ0MTVjYzRiMmFhZGFhZDZkN2QyZGM3MzQ4NGI3MDkwOTM0NWJkMjA5NTIwYzA1ZmU3ZjVjZGM4MCI6IjMxYmQzZmMyNjRjMjUyYmQzZjgxMDI1Mjk3NjNkNWFkM2U0NWE0ZTA2ODY3NzQyM2U2OTgxNjBkYjI4NGJmMTEiOiIwYjg0NWNmODQyZDFjY2MxNWMyZmE3MjI0YWQxMjFiOWI1ZjhhY2QxZTA3YjE2YzE0M2M5MzFkYTU2NjIwOTA2IjoiN2E2ZGFiMjhhZTcyMzFlMmRiYmQ4MjZjNGVlZGQ4Y2UwNjJkZjMxZmZmYmIwYzBlYzA0NWIwY2QwYTRlMzQ1N2ZmOTc4YmYzOTQyNWU0OGNiZWE0ODg0ZmM1OWU5NTY2NTA2ODM2MWE4ZWU5MTc1YTQ4ZWYwOTQ4MDZmYzE0NmNjZmMzYzQwM2E3NzBhYmQwYzZiYzg0MzliZjY4YTg5ZjEzYjA3MjVhNzlkYmFmOTc2ZGJhOTU3MjVhNDM5OWM1OGQxNWM0NzU4YTUxNTM0NmNkMGQ2MjA4ZmIwYmNjYzA2NTY4NjQyZWIzZTBjM2E5YTFkZjk1NjdlZWFhODY5MjQxNTdjY2ZlNWIyZjhlOGVjOTQ2ODcxZGFkMzNmNDBmNjU4NDcwODhjOWU1MDBmYWY4ZTI1NDM5YmU4YTFlNzdkZjEyYTJiMjFiOWY3MzI0NGI4MjE3NmU0YmVhNGVkMzNkMjY3MWVhY2ZhNWM0YjU5MWNkMGJkOTNkYWI3ZGM2MmY3MjMxODQwOTA5Y2EzMTkyNzgxODVmODczZDAwODIwZmJjMjM5YzMwOTJkMWRjMWEzY2Q5YzY5MmVkNmQzNzE5MmJjNTg3ZjhiM2VlMjFjMTRmYjIwYzUyMGZhNzg5OWJjZDJhMWE1MzI4OGE0MmNmNzBjNmZlZmU3ZWY3YjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiJmODQwYzc1Y2UwY2RiMjAwYTNiZDk4MGQ2Y2VkZjFjNzMyMWU1ZjMwM2NkMDQ0NmM3YWZkMmQyZDY2NjU3NDQ3YjIxNTMzM2IxNWQ1NTMyNmJjOWJlYmFlNmFlMzZlZmVhM2EzMzdjNmZiZWI2YTk3OWE0NzgzZjJiN2YwZjBkZDZkM2E5ZDM3NDdkZTYzOWE5MDQ3MjQ4YTA0YTE5ZjViIjoiNmQ1Y2E0YjFlZGY2YzBhZmJkY2UwMmVjYjMwOTIzYjJmNGYyYjMzMTIxZTIxYjJmZmVlOTY0Y2M3ZGUxYWJlOCI6ImY1NmQyYjE1ODRiYTJmMTI5Yzc3YjI5NTkwYzRlMWRmZGFiNTUyN2IxNzkxZTNlNDQ1NzUwY2E2ZDRhZTM1NDIiOiIwNWJkNzk5MjQ5NDExYjM3YjgwNTkwZDQ5ZjMzNDg2MzFiMDZhMjQwOGE2MTYzNWM3MDY4NzAwM2E4NDg1MzAyIjoiMTJkMjZhYzNiODc5MjRjZGE1ZDc4YTNlM2MwYmQ4MTI4MGUzNDA3MjM2NDNlZDFiMmViZjJkZmQ1MmY1ZGM0MyI6ImI0OGMxM2FmN2E5YjZmYTYzODVhN2VlNWQyYWI5N2RjZWJmNzFhNzE1ZGM0NjVmNDEzY2IwOTYyMjkyZGY4NGM5YzgzYzQwOTMzMDlmNzQ5MzU5YjBhMGRkY2MxMzE2MmNiNGFiOGZmN2IzYTYzMzYzNTFlZDc5ZWJmNDc3MzBmOTdhY2NiNmE5NjBhOWM1YzI1ZTA5MjBhMDZjY2NjM2IzZjYyYjYxNmMxNWNhMThkN2UwYjVjMmU3ZDhhZDI1MThkMWVmMGJlZjUxNWFmODY2ODkzZTkzNzhiNTZkZWVjMzI4MjVmZTBhMmM1YTk3MjlmNjU4OTE1Yjk5YWIyMmEwM2I3MTg3ZTgzZDJkMGY0MWI5NDY3YzgzMjZmN2JjODcxODlkZDhhZGUxOGIzYTdlZGYwYzBlYTQ2MmRjMjIxMDllYzkxMjk0Y2Y4Y2U2OWM4Y2QwYzEyOWI0MjNlZGFkZGE4ZmJkMjVmNDk4M2E3MGQ3NTAwMTU3NmEyNjQwNTE4OGJiMDI4NDk3NTIwMzY5NGMzMThmM2FhN2ZlNDdlYzA0MWJjNGMxMWM5YmNlYjFiMTMxZjc0YWRjZDcyZmM0ZDI4MTM1NjRkZTZkNDcxMTAxNzgwMDM3N2JlOWU0YzU3OWU4ODQ2NGQ2N2VhNmU0NTdhMzBmOGY2NTIzNzVhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiYzkxZGI4NmUzOTg0ZGJhYTI1YWU1ZDg1MWVmMzQxZWI2NDdiZDFkZjA1MTdlMTcxZmI4NjA2OWNmNjE4M2MxOWEzODY3NDZjY2QwYTdlODFmMzU1NzAzODcxMWRiNzI1OTkyNjA4OTMxN2FiNzE0MmQ2YWI2MDUwYjFmN2RmYzIxMDgwOTEwZDQzYTcwMmNjZTkzY2IxZDNiMTU1ZDIyZSI6ImE0NTg1YzEzYzgzZjk2MmRmNzJiNTgyMzBlYTEyMzg0NmRmNjUyYjI4MTA3NjZiYjY3MWY2NzViOTYxMjVhNGQiOiJmYjMxMzE5YjRlNjIyZGVkYWE4OGI2NGFlZDkzYmIxMDgzNjIyMzRjM2QzZWNlZmM3OGY3OTZhZWFkZDljOGU4IjoiODc3YmFmYmFiM2JmOWMyMGIxYTg1YTVmNGIzZGQxMWE1YzQ4NjA0MmI4MDdjMzlkNTlmZGUxZWFlZDg5Y2NlZCI6Ijg5YTVhZjMzMjcxODQxODc1ODEyOWI4MjEyNjQzNzUwNTQyYmY5NTdiZjM1YzY0ZDZiMGEyNzYyMzhjODA4ZjMiOiI5MzFlNDNiMTYwN2Y0MzI2MGNhNGZlYzMyMDViYWZkOTBjY2Y5OTE2ZDcyMWQ5ZWRjMzg0MjUwZjkzNDY1MjVjNzY1NmNjN2I1YWVkOGFjZjkyYjhkODQzMTA4ODU1YWMxM2Y0ZjA5MDNlNTFhYTRhYjc4NDZhODM5Y2U3MGI3ZGU4OGUwZDUyNTkwZWRlMTQ0MzdiNTQ5M2I2YzJkOTQ1OGQyMjFiNzcxMTA3ZWMxNjZmNjZlZDk5MzczOTYwNGM0ODdmYjRjZTk0YmQ3OTVlOWNmZjYwYjRmODM2NWM3NThjMjdmZDc2NzEzNWI5MGIzMzcyNTcwYThlMGUzYjNhMjNkYTM3ZTY5MzgyYWZiYjc2MTY4YWNlM2NhNzg4NTJiZjk5YTBkM2E3ZTJiZjE5MmQ4ZDkyOWRmZjViMDc3MzBlMDBhOGM1ZmE1YWUyNDNjODllNzFmZDUyOTA3ZWVjMGI0YzQ5ZmI4NmI4MTM5NGUzOGE2YjA1MjNhODljMGZjODY2YzJjM2NmNzZmMzM2ZTk0MzhkNGY3NzNjZDVjZWVhNGRkNDdiMzcxNmE5OTg2MTUzZjcxODE3N2QyYzhlYmNmY2I5MGI5ODYzMzBmODE3MzM0ZDI5YWViOWM5M2U5ZGE1ZGIzMGI0ODNmOGY0MzRmMjgwN2JkZGVjNjg1MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIzZTRjNDBiOWIzMzA2M2VkYmZkMjFiYzRlMzRjNWJjMWY0NTRkN2VkMTc2ZTRmNmVkYzNhYjA1NmEzYjBkMWE3OTE3MDQ3OWZkOTFkNmUzMGNhZjk5MTY2ODQyZTAxNzViMjk0MWE3MTg2ZDhjM2Y1NGU2ZjVmOTg4NGU0N2RkMjJhMTYxYTNmYzVlMDBjMWM5Y2E1YTc0NGM2YTdmN2IyIjoiN2EzZDc1MTFiOTM4NDIxNTkxNjIxNzZiNzAxNjEwNmU2MTU3M2FhNDJjNTdhY2E3YmJmYzk3YjMzODhjMjhiMyI6ImQ4ODc4MWIzYWZlMmUxNTAwYjY4ODFhYTljYzIzZGQxNTAwNTRkYTU3YmUwY2ExMjdlMTAxYTlmYmM0ZGVjY2UiOiI2MjMxYjBmNWNmMTgyYzZmMTA4NDkxYzViN2ViZWQ5YjJhMDE1ZTk2OThlODYwNjIzZTlhMTJlNjkxYTM4ODk5IjoiYmRhNjY2YzVhYzAwNmQ2ZWZjMmFhMGRhNTJlNzRlZGVkODg5NTVmOGYwNjRiZmFhNTJkOWYyNTI0YTE5NWY1OSI6IjJkN2Q2MjMxMGJmYzRhMzM0NzEyMmUyMzY1NWExMGRmYzU0ZmFjNTEzNDlmMGM4ZDU4NmFhZDM5MjM2YTIwMzY4ZjRkOTY2MjNlNTg5ODdmN2MxMTg0MTQ4ZDU4NjAyMmE0Yjk2OTc2ZjcyNjM2ZWIxYWE5MmFkMjIxYzU4NjZiNmM2ODAzY2JmNmM5ODJlMWRlMTJiYzg5NjE4YWViM2Y4NDRiMmE1MThhNTc4NzE0ZTIzODAwNzVhY2I4Mjg2ODVhNTc2ODMxNzk3NTNmZDFlYmQyZDhhYTE2NzI5NDA0NDY3NTY4MjlkNmFjMWNhZmJiMjE4NTg0NjU3ODlhZGMwMjRiOGZhNTQ0YmVhMDljZDRmMWYzZWQzNWYyOThkNDYxOWE1ZjkyYTZlNGY3MTJhMDAzMjMwN2VkNzgxMTY2ZDdhNmFmMmEzNTI2OTRiZTdmZDNiYzhhMTUxZWE4NDhmOGIxNGRhODE1MGViMjJlMjY0ZDc2ZTY1NWZkYjM2MzhiZjI1MDU0NmViMjlmZjI3ODUwZDJiNTY5NzkzMmM2YTg3Njc0MzU2MWUwODk0YTAxY2U4NDM1Y2VmNzQ4MDBmMTFlNGJmNDRmYTUxNDlhNmZhNGY0Y2E0MzI2N2E0N2QzODQxNzIyYWU3ZWZkMDk2NzZmMzQxYTU0ZmYxYmM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImZlNGY1MjQ3ZGM0MDVjMTIxMzNlOWNmN2ZlMDA0ODM2NDlkMGU3YjcwZmRiMWIzOWY4ZThlZDBhNDc4OWEwYzlhYjc4NDE3ODE2YjU0ZDQ3Y2Y5OGMwYWE0MjQ2YWIwZDY4MDI4ZDFlNzQ0MWFiNzdjNWVhYWY5YWJhMGYyYWM2ZTFiZTJhZjQ4MDAyNmQ0NGQ1ZWVjMGU0NmZkZDMxYjEiOiI1YzVhNWU1MTdiM2FjYjZkNmQ3NTc0MmJjMjkzZTRkMDkxZDdiMGJmMzc1NTlmNzVkZjk4ZDYzMDZiY2MyZDIyIjoiNWY1NmRjNDgwMDI5N2EzZmE4ZTJiMzg0ODNjMjk1MDU0ODU2Mjg4NjZmZjE3NWIxOWQ0YWJhZjQ1MjZiYWQ5MiI6ImQ5YmMwODEwMjZlYTVlMzVhNTJiOWQxODY4Njg4ZTAzYWVkNzg1YWYyMDFlMzU1Y2Y1MWU2ZThjZWM5MTdjMzQiOiJiY2VjNjU1ZWU4YzQ4MmU3MjVjNWI5MTViNDA4NWE5ZDY3OGVhMjZiNzFjMWNlMGE4NWY3NDFmOWZiM2MzNjA3IjoiNDExZWRjYWRiNzkxNTA3ZjQwYmZkMDBmM2M3NjRhMmM3NTg3MjlmM2JlYTExNmJhMGM4MjBlZmUwOWVkMzc5MDk1Zjc4NzdjZGQ2YzY5NGM0MzY1NzJmNGRkMWI5MDUzMDFlZDZlNWZhMTM2MGFjODExMjg2MDMwNzk1OGM3YjY0MzcyZWFlOGY0MTIyZDg0ZmYyZDRiNjkwNDE5ZTMwNDNiOGE2MTgzYWZkZThmMDg0ZmExMTBjMzg0MDNhZGJjODc4YjliMTM5ZjZkZjVjZjQ3YWRiZWMyZDFmMDNjYmNmZWNjYzQxMjk0MjM0NmZjNDJmMGFmNzdkNTJjZjkxMjdkZmIwMmJlYWU0NzM3NWFhYzEwMWJhYWMzOGQwYjQ3ZDhmMDRmODNhN2VmZjQ4MmVhZDkzNzIzODI3NTMwODY5MzkwNjMwMzc5NzY3ZGYxZjQwYjczOTMyNzg5NTgzZGEzMjdlMmYzNjNiYTQyMWEyNTNkMzVkMjA1YjAwOTQ1ZDlmNTUyMTU4MDM1MGY2MzFjYjI0YzdiY2RmN2NkZGE3Y2YyOGJhZjYyNWZkOWQ2MTEzNGVjN2E2ZDFjZjRjODBkMDU0NDE3MjJkMDgxZDRhZWExMDc0NzEyZjM3ODg0ZmUxNWRkYjNjZWJkYWRiMjBlNzFjZjNhYjQxNjc2ZmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBGYWxzZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfbm9wcjpNQkVEVExTX01EX1NIQTUxMjoiOWQxMjkxNDJiYTQ2NmMyN2YzNDhkNTk0OWZhZmI3OTY3NWUzMzRmYzNhMTk0OGU1ZDAwOGVlMjY1MDc2NDY3YmZhNDM1NTk2YjY2MWM1MjdhODJlNWEwNjRmZDU2Y2I2ZjE3ZjU0OWM3N2EwYTZhOTk4NzEyZWYwZTFmNDFiYTRlZWIzNTRmNzc1NjVmN2E3NjI3ZWFlYWI4M2VhNDhmZSI6ImFjMjNjNDIzMTVmMmJiZTU0ZWJhNTM1YTcyOTkxMTNjZmM4ODIxNjcyN2VkZTlmMTU0ZDdiZGRkODgwNDEyNTkiOiI3ZjAyOWQyNDMwZDQ5ZGU0OTA5YTc1OGEyYmRhNGYyMTlkMzdlZmYwMWM5NmRlN2NhMmE0MDcxZDEyOGExYzlkIjoiNGI2YTQ0MzMxMmYxMDM0OGY2YWJhMDg4ZDFmODEyMDZjNjk2NTA4YTc1ODM2ZTk4OTUxNjA0ZTkzZmE2ZGI1MSI6ImJjMTI4MDUxZGRjOTZlZWY5ZmJjM2EyM2ZmNDU4MjQwZDExYTIyOWQxYTc1ODg4ZDYyMmNlYjc1MTllMWRiNmEiOiIwM2JiZjllMmMwYzFhYmMxYWQ3MTUwNmZlOTFkNDgzNDgxZmM1ODNhNzNlZDJlYjRjODgzNGE4NzExODA4OGIyMDQ3NGI3OGUwNjM2NmIyZjMyYTVmNTBlNjQyNWJlODQxZTE4ODVhNzJhYTEwNmQ1YTAwMWUzOTA5YjFhYzJhMjk5NDBkZWQ4M2YwNzI0NTE0ODAwYWEwZGJiYjE4ZGE2ZDU3M2FhOTdjN2RlNDcwZTExNWU5MzMyMTc5Y2Y4YjMyMWZkYzgzMjY1YjRkNThlZDM5YzI4ZDA5NzgzNTkwNzA0YWI5YWRmMDA3ZWU0NGQ0ZDc0YWY0Mzc4NTE3MzRkNDcwMDg1ZDQ1MjUyNTg4ZDc1NDQ4YWJjNjA4YmUwMzYzMDE1MjU4MmUwMzQ0ZTFhNzUyMmE4N2MzZGFlYmVlZmJjNzk0OTc3NTc4MzVmMDc5ZGQ5OTI2MGVkN2Q3ZTNlMDBiZGYwNDZmNGRhYjNjYTg0YjIwM2Y4YzkzY2RlOTk3NTVjMmY1YjE2YzAwZDAwZjM3MDcxNWYxODhlODBmM2YzNTNmMmQyMTgzNTBmZTFhOWY2ODY3M2VhOGU5MzAxMzMzZmU1Y2E3YzcwM2QyMWFhMmQwZGYwMjBkYjI4ZDgzNDBiNWUyYzA3Y2U1YmZiY2RlNzE5NDM5OWI2Zjc1MiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIEZhbHNlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19ub3ByOk1CRURUTFNfTURfU0hBNTEyOiIyZmJhOGVkNWIyYmU5YWY5NWZiMDIxODNjYThhZTBkY2NhOTBiMjA5YmU3MzUxMWE1ZGFiMzFlYzgxZTkzOTExN2U1MjlmY2E0Zjk1YTQ4M2JkMzA3ODM4ZWYwZDc3OWRiYmZlNzdkZjQ4MWQ4MDdiMzA5ZGE5MjlmMzE5YjM5Mjg3ZDNhZTA5OTRmNzdmZjYxNmYwYTc2M2YzNWQ0NGEzIjoiMmRlNjk4ZDMyMDEwNjE4YzI1ZWQ4NmNjY2FkMmVhNGQ5ZmI5YWRmN2IzZGM0MDBhMmIxYjRjOTc1NjUxZDEwMyI6ImY5ZmZjZmQ1YmM5YTA4ZjZmOTA1OWY0YmI3ZjQ5ZTA5M2Y0MDRhYTdmZTczNmJiZjQwMTg3MzQwNzFjMjYzMzQiOiJhMzA5ZmIxZjQzYTUyMGEyMjk0NmE2NDE4NTAwOTI5ZTE5ZDJiMzMxNmZiMWE4YzFhYTVkMDQ3ZGRmZGI4ZDQ5IjoiYzFkYmZkYjliZGQ0YTMzMjEwNzRiNTdlMTFlNWVjNmRmYzM3NDI0OGE5MTgyNDJmYjNlMjJjYzY2MTJiMzIzOSI6IjNlZWUxYmRiNjM0MzNjNTU5NzEyOTdlMTVhYzE2OTFjYmRmZWQ1NzZiMWQyYWRhMjdjYWIzM2U2NjBhM2M4NTc1ZmU5ODllZjczZTEzMDU4YzlhMzc3N2MzNWJmZjFkYWIyNWUxOTkxYjc4Y2M0NDY3MzhjY2NlNzIzZWIwMjEzNmZjYjI0YTBkZDI1OTdjM2ZkMGE3NTc3NGM0YTIxNDA5Njg5ZTkzMDllOTYyYmUxZThiMDk2YzJkZGU1OWFkOWRjNjc1MDA1MTA1OGZmNmExOGQ1N2ExOWVjMjc3NTg4MmVhMGFmNjViMTcyZWQ3MTg2NzhkODQxZmI1MTQzN2FhMzEzM2IyYjMyOGRmMGY0YWM5MTZhMDFkODhjNzQwOTgxYmY3MWM0NjY0Nzg5Y2E0ZTlkM2Y3ZmRiZTczNzkyMzFiNjQ2ODNmYzg5MWM1MjIyZjhiMzk2YTQ0NmYzYjUwZGRlODIzZjk1MTc3YjcyODQ2NjM0MDJmZTU0NTJmZTdiZGVlMzA0YWJlMzRkNzExNzIxNzBmZjNhOTExNzgyYjcyYjI1NTZmMjMzN2QxZDIzZDlkNjMyYmY2ODMxZDNjMTczZmVhM2NhOGViNWQ3OTkzYTU4YTRiOWY4ZjY0ZDVjODkzMTlhY2JjODQ3NTc2YjM4M2ZhZTAxNzhhMDk3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgRmFsc2UgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX25vcHI6TUJFRFRMU19NRF9TSEE1MTI6ImE5ZmQxODc2NDkwMDc2OGI3OTA5ZGI4N2RkNGM3Yjg3YmFhMmNhZTZiMGY2MmE4YzJlZTNlNGM1NTAwNDFjYTc0MzVjN2IzNWVjYzZlZjM3M2RkZTNkOTg5NDIwYjkyYzJiYjMyZjlmYzhjNzY2YWI4NDBmNWQwYzczNTU4ZGNhYzg3ZTIxMDJjMjgxOTNlN2ZmZDMzODFiYzMwZTFkMzEiOiI4YmZjNWE2NWZhMjEzOTYwODFkOTJjM2Q3MjA2ZjkyNjM3Mzg5YzYwY2Q3YTE0ZjExODExYzkxNTM1YzAwODNlIjoiNDA0MjM2YmZlMjRiNDcxYWM3ZGY5MzhiZTZhOTZiOGViZjhiYzc1ODc4NzcxNGQyMjZjZTcyN2U5ZDJiNGJkNiI6IjgxNTFhZTMyMzdjYTA2Y2E1YjAzNzMwMzk2ODFhOWQzY2Y3OTllOThjM2ZhMmVmYjU3NjgyMmYxZmUwYWFhMDYiOiIxMWYwZjhhMmMxNmIxYmMxNWZjOTNmZjQ3OTM4OTRmMjJkNzQ5NGQxMWM5NGRkZTVlYWQyZjBmYjA5YmFlNmNiIjoiOWM2MzZjMzIyODQzMmZiNzBkNTIxZWFlZDNiYThlNDM2NTA3ZTI5MTYzZGUwZjViN2UwYWE5YTUxNzdhYTFhMzkzMGI5NWY3MmZiMDU2MTM1M2RiNzIxM2NkZTllYmRiZDk0ODVhNWRmOTNmZjQxNjk2NmUwOWMxZTYxZDhmODA1ZTZhMDgyZDYzNzJkNTgzMDE2NjBhOWEwMTgxZTJlZjkwNmE1YThhOTk5Yzg4MDAyZWI0YjQxMzJiMzRlZmQyMTYxODg3MWNlMjhiZTVlNjZhNjVhMTc4MmRlMTFlOGUxMWM1N2EyZGViYzg1YjAwNjhhYjU1MzQwMGIyNmEwYTBmOTQ4Y2NiNGU4YmJjMTE3M2RjZGFiMzg4YzIwZWY2ZTJjOWFjNzk2ZDg4MTY1NzJlYmMxMzQzOTZkMzhkNzFiYThlOTg2ZWViMDYzYTdiYWY1Y2NkY2Y1ODNhNzIzYmE1NmJlYzM4ZDRjZDNlN2JlYTU2M2I0MTMyZjE5YjczMDE4OWY1NTkzMDAwOTFlOTE3MWE2MTQ2OTQ2MGNhODJkMzliNTE0OGU0ZDI4ODAzN2Y2OTI2ZTk2ZjM4NGVhYWEwZWZkYWNmMmFkOTNmMGRhNGZkY2EwYmM1ZWMwZjBkN2MwZThkYWRmZmFlNGU0NmFlOTZhNjUxMTczNWE4MGUiCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcucHIuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9obWFjX2RyYmcucHIuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI1YmE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2htYWNfZHJiZy5wci5kYXRhCkBAIC0wLDAgKzEsMTIwMCBAQAorSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYTBjOWFiNThmMWUyZTVhNGRlM2ViZDRmZjczZTljNWI2NGVmZDhjYTAyOGNmODExNDhhNTg0ZmU2OWFiNWFlZTQyYWE0ZDQyMTc2MDk5ZDQ1ZTEzOTdkYzQwNGQ4NmEzN2JmNTU5NTQ3NTY5NTFlNCI6IiI6IiI6IiI6IjlhMDBhMmQwMGVkNTliZmUzMWVjYjEzOTliNjA4MTQ4ZDE5NjlkMjUwZDNjMWU5NDEwMTA5ODEyOTMyNWNhYjhmY2NjMmQ1NDczMTk3MGMwMTA3YWE0ODkyNTE5OTU1ZTRiYzYwMDFkN2Y0ZTZhMmJmOGEzMDFhYjQ2MDU1YzA5YTY3MTg4ZjFhNzQwZWVmM2UxNWMwMjliNDRhZjAzNDQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjA3YmRkYWIwNmNmM2Q3ZjA5NGNjMjMwMmFiZDcwMGE5ZDY3NDIxYWViNzExZjRiYmU2NmY1OWUyOGE0Njc5NDIxM2JmM2QwYzNhMmNiYmIwOTIwNWI5MGUwZWYyMTJjNzY3OWIzNzUyNmE4MDY3ODkiOiIiOiIiOiIiOiJmNzZmZDJhNDlkOTU3NGMzZjkwODY0ZjM1ZjMyMjUzYjgzMDk4ZWUwNGE0YzhkYmE0NjRhODAzNWY2NjVjYTE2NWM4YTAzOGJlNWUxYjEwMGQ1Njc1MmFkY2Y1OWJlYTE2N2UxNWIxZDAxYzQxOTk0OGQyZDBhODViZTY2ZDE5YmI0MGU1ZTBhNjZjZmQ3NmJhNzU0N2ViYTYyNzZlYTQ5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI2ZDI4M2U3NzA1YTJhYTRiMWFiZmMxZmY4NTU5YzllNzk2MmRmOTIyOTAwMGI4ZTQzMmFjNDBiYWQzNDc5NzM0NWYxZWQ2ZDdhMGZkZWE4ZWMwMWU3YTIwZGM0MzZhYTFkNjIxNTM4MTNkNTlkNDRhIjoiIjoiIjoiIjoiNjBkZGNlNTdiZTQ1NjNiODdiYjU5ZTg0ODQ5NmY0MmZjZWY5ZWQ3OTc5OTA0MGUwZWVlNjhmZDg5YjMzMDEwOWNkM2IzZjc2MTM0OGZjNzAzNmMwY2Y1ZDY5YWVmZWNmOTFlODlhN2FlMDQyOTU5MDU2OWE4ODkyMmFlZmYyNDllYTc4M2YwMGY3OTVhYWRjYTcyOWY5Njk5NmVlZjc2ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMTA4YTFmYTUzOWZjNDcxZTBhMjZhOGQzOTYzM2M4OGQxZTg0YzI2YTYyODk0ZTdkZWMxNWZjYmVkYTlkY2QxZTQwNjE5ZGMwM2M3ZDNkZDJkYjM5YmM4ZjQ5NjQ5NDliMTczN2I5Y2Q2OWE4ZmY5NyI6IiI6IiI6IiI6ImIwZmJlM2Y2YjY2NjdiODhlMmE0OGYzNjc5ZjIxYWQ4M2YyODEwNzY3NWQ0M2QyYTUxODZkZDZhMDI1NmFmYzZhY2FmOTk1YjNmMDc2OTEzMjU1NDNiMzdkZGQ1YmZiNDkzNGY0NmZmOTc4MzU5N2I2OWM3MjdjOWNhZTFjNmI4MzYwMWEzOTIyN2M1M2M5OTE4MWVjMThkNWJlNjBkNWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjFkYjZmZTIwOWE1MTEyNGY5ZWJhM2FlN2E1NjkwYTMxYzkzODNiMGQ2MmFiZTAyMzdmYTZjZTJiMzRiMzIwYjY4ZDI0OTI3ZDkyNDVhMTBmNzIxNmRlZDcwMWMzOWY0ZDEwZGQ2ZWI0YWU5MTJiNzgiOiIiOiIiOiIiOiIxMGU5NjYxYmJlMTRhMGM3NjhmMDk4NDA5NzkyMzM4NjUyOTZmYTgwMWVlOGJhOTcxMDYwNDNjMDY3ZDNiMDFhNWQzYTg2NmViOWIyMWY3MzBjM2VjMWYxMWYwMjI4MjBhMmEyZGI0Y2QwNzA2MWFjYjg1YjA5ODdlMzM4OTIwNjRiNTY2MjZjOTYyZDFmZWJlMWViOTdhZjZiOTlhYzIyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJkYWM3Y2I1ZDY1OTY0NjI0NmEyYzNjZDZjYmI4YjdiYjllZGUzMGM4ODM1NTcyNWMxNjU3NmNhNzU2N2Y1MmI1MWVhM2Y3ZTVkNDU2YjBlOGI3YTMzZmFmMjExNTBlNWIzOTk5OWVlNTNmZDA1YjJmIjoiIjoiIjoiIjoiNzExN2ZlMGMwYTlhZmE3NWMwNzhiMTY0MWJhNjM3ZWQyYTQ1MDFlNzBiZjM4NDY1OTE0ZWExODVkYTVhNjIwNDg5MTAwNDBlNzBmMjc5Y2E5ZjJmZDVlNDc4ZmZkNzY0ODRmNTJhZmE2MmEyOWNhOWQ2NDlmMjUyZjI3YThlZWNhMWVjOTVkNzg5OGY3MDU0MjFjOTJiNjA0OTNlNWM3NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYTQyMmUxMWQ0MWVkOTFlNDU4YjFkZmY3ODQ0ZTdhMDZlYjgwN2IwNDJmZWM3YzQyZGE5YTdkNjRhZWE2ZWM4NDNjYmI1ZGFjZjg1MTdjM2Y3MjE0ZDAyZDQzMmZjNjQ3NjZmNmJkNDBmNTQyOTBjNSI6IiI6IiI6IiI6ImU2ZTFiNTlkNDdhYTQ3ZWJkODYyZmEyMzM2ZDUwYTkyMGY3N2FmZjZkNDI5NDJhMjkzOTQ3YzI0YjA0NDc1NmM5Nzc3MjMxYWEwY2U4YTY3ZDI5MTYxMzZjZjQ0NzdkZGU3OGI2ZmE3ODliNGE1NzA0NjA1MzhhM2RhMTk5YzJjNjQxNTU2OTJiYzFhZWYzZmE5NGNlOGJhNGE0M2JjYWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjgwMjBjY2QyM2U2NzMzZjc2MzhhNmQ2OGI0OTU0YjcwMWRkMmUzYjMzMTc2ZDVkMWExNGI2Y2Q4YWVhZDRlMTUyZTA3MjZkZDE2YjRkNzZkZDljYWU2MGU2OTAyM2QwZmQ4MmIwYjY5YjdjYmFmNzUiOiIiOiIiOiIiOiJjMmIyMjQxMGRkYmEwNDY2YjY2MzVhYjk4Zjc2OTA1NzJkNzE1OWQ2NmI0ZjAzN2ZhNzU4NjkyNzY5NTBlYTRhYjRhOTJlMzAxMWQ3YzNkNTBmOTIxYTM5ODg5MDY0ODY1OTA3MDZjOGUwZWVlYjQ4N2FjODVjYTkyNGQ4YjNhNDQ0NWUyYWY0OTM2NWMxMGM2ZTk5ZWIxN2Q5MzI4NmMzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJkNjZlZjVkMTJjNzc4ZDhiNzgxMzQ3MDRlMzQ1YjA4YzY4Mzk0NzFlYjkwM2JkMDQ4MDE2OWQ0MDY5ZDczYTY2OWExN2RmZjJlMWQ2ZmMyM2YwNjg4ZmRmNzg2N2Y3MmEwMjRhZTQ0NTk2OTQ1OGZiIjoiIjoiIjoiIjoiOTFlZjJiYWNiZmZhY2JlZGMxMWRhNThkMjc1NDQ4NjkyYWUyNmJiOTkyMGMwYjE0ZDg2YTQyYTY1YTlhNzk0MjJlZDc3YzNhOGY5NDFiNDI4NTUyY2FmNmQxNWUwNTdjMmRkOGI1Y2RlZTY3MGVlMTUxZjY3NGI0YTgyZmY5NzU0Y2IwNjdjMWExYTI3MzAyYmVmMmQzOTUzNzlkNjAwOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiY2I0Y2EwZDZlMDdiMzQxZWEwZDEwNWU1MTI4YmNkNmI2ZmMzMTdiZWM0OTM5NGE4M2M0ODVjZTRmODIwNTM2MTM3NDQ4NGFjMDE3M2VmM2YwOGZkNjVkMGExMWFmMmIzZjkwZWU4YmQzZmNkYzA4YiI6IiI6IiI6IiI6IjE3MjdhN2Y1ODBhMjY3NDkyNjQ2ZmMyYzE4ZTM1MzlhMTMxYjUyZmEzZDgyYWM4Y2IzNjIyN2ViYjk0YTM5NmIxMzljMGE3MDkzMDFiNGYwMGI0OWVjNjNkN2Y0ODEyNWU0Njk0NDNiNTdiMTZiZGFiNjZiZGFmMDY4NGRhNDI1ZTYzYTU5NjE4MmRlNDY3NDQxNmFkZTE3ZjBjZWY0OWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI3Y2VjMDEyMDI2MWJiZWRkZDM0ZWI3NzY0NjRjOWI4MDY2N2RhNzMyY2M4MmMzNjVhNDkyYjRkZWYyMThiYTJjYWQ1OWY3YjRiYzFhZmFlZjAwODYxYzliNjJiNTgxNDQ0Zjc5Yjg5NzdlOWZiZjhmIjoiIjoiIjoiIjoiM2FkMTI4YTc1YWY4MTQ0Y2RmNWNhY2U2ODE2NmRhYmNhOWRiNWQ1Y2FjNmVlYWEwYzNkNjA4ZDk5ZDVkYTRhMmNhOTBmYzA4MGQ4MzJlNWY5NzA2MGFiMjI0N2RjNWRjMjBiYzEwYmU0N2U2YWIwM2VmZWI2NjJmYzlkNTJjODlkOGRiMzQwY2M0OTAzYmU1OWRmZDA4NmY2ZDAxODQ2OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjI5ZGMwNzU1M2JiNzdjYWQ2ZjMyMWJjZGQ1YzVjNzU4YjZhNzc1ODhlZTQzZDBhZmIxNWMwZDk4MWUzNjhjYjI0ODI2NjNhZWE5M2RlZDk1ZDgyYTFhMmEyMmNkYmRmOGRlOTM2OTU4NjJjZDk0MjkiOiIiOiIiOiIiOiI1ZTFkNTNkOGRiODk1MTFmYTk5NmNjZjUxM2JhYWNlZTI2MTJkYTIwMWMyMWQ1MWUyOTI3ZGNiOTljYWYzMTMyZjZkMmNjYzMzNzZkYmY5NTUyMDAxODUxNWIwNzg0ZTk4YjQyMjY2NzFjYjNmMWM3OTE1NzU3ZDJlNTlmMWM0ZTg0M2VhOWM5ODAwNDEwODExOGI0ZWI1M2JlZjJiYWFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNzQ4Nzc3MzE2MTYwZmMxNzVlYWZmZjU3ODQ4MTQwMmNjZDVhMzg1MDhlNGFjMDYwM2Y4NjI4MTU3NmM5NzBkMzMxNmVlNThhMzZmODA5YThkZjllZjI0MTg2MWMwNDA5M2EyODRkMTE2Mzg0ZDIwNCI6IiI6IiI6IiI6IjA1ZjE3OWM3MTY5MWMwYzJjNjRlZGE1OGI2M2EyNzc3MjIxMGYwYzJjNjk3MzcwOGE1Zjg0ZTZiNDlmNTQ3MTY5YTgzOWYyZTk3Y2UxOGFjOTQ2OTYzMzdhOWQxYzFkNDUwYmYyN2I3ZmRhZjE3NjFlZThkYTliNTVkNTkwMzFhODUxNmVlYWViYjFiZDQ4YTFlM2JkMDcwYzVmYjRlZGEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIxMWUyZTM5MzRkMjMyMzlhYTZiZjFhYmIwN2FhZGFmOGRmMDU4OTJkMTI2Y2Q0YmUxM2YyOTY1YmRjZmNjODM5NmRjYjE2ZDg3NDJlZWQxYjI3NmI1NjI3MDI5MTVmYmI1OWMwMWNhZmI3MDQ0MDIyIjoiIjoiIjoiIjoiNmVjMWNhYTc2MmI1Yjg3Y2U5MmVmN2QyNTQ1MzZmOTRkNDFlZDVhOTg2OTZkYTVjMTRmYTJkMjlhYTk1MTgyOTI3YjNlMmE1ZWU5ZTIwMTJjOTExZWNjNWUyNDRhZjFhODIwMGRlMzdjYmZmMmIyNmQwYzIyNzE2NTliY2UwNzRkNWIzYzA2NzQzZjA4ZDY0OTUyODYwNjhhMWU1NDM1ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAwKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImVjMTFlMTkyOWU3NDMwYjkxNGIzODUyODU4MDFlMjdkZjRhYTY3ODNmYTFlMzQwNWFlNzA2ZTc0MGRkYTUwMjA5YjIwYWNmOTBkZmE4Y2VjYjRkNGI0YmM3Y2JhNGRhYTI4NWZmODhjZTllOGQ0NTEiOiIiOiIiOiIiOiI3NGFjYmE0OGYwMjE2MDg3ZjE4MDQyZmYxNDEwMTcwN2MyN2QyODFlNWRkYmMxOWM3MjJiZWMzZjc3YmYxN2NhMzEyMzkzODJmNGZjMWQ0ZGQwZjQ0YzI5NmJjMmYxMGY3NDg2NDk1MWY3ZGExOWEyM2UzZTU5OGFjNDNmYjhiYmRkMWZjYTgwNDdiOTg2ODllZjFjMDViYzgxMTAyYmI1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImQ5MmIzOWZmNjEwZGI2NjQyNzYxM2MxMTFjMDAyYjc1MzI5NzM0MzcyODQ3YTg4ZjUzYzFkMjg5YjMwZDM1ODRkMzRlZmI4ODRjZTZkMWQ3MTc0YTNjMjA1MDhjYTAxNzFlZDk2MTA2MjJkNDU0ZmQiOiIiOiI5OTgwZDk3YzY1Y2M4YjNjNjFiMzkwZTQ4YWJjNjUyMyI6Ijc2MjEzMzU2ZTM1OWU5NDk4NGNmYTdkYjE1MjIwNTE4IjoiZTBiMjk4ZjdjZDExMTI1MjdhNTA2MjAxZTM4ZjdlNjBkNzYyZjU5MTYwM2RiNzJhY2EzYTJjZDFiOWQxMTVjM2RkYmM3ZGNiNzY0M2YyZjQwZjUzZTk2ZTZjYTE1OTBjYTI3YWJiNzdhNjIzNDc1NGZmMWVkZWY4NmY3NWZkNWYyOTg4NzJhZDE1NDRmYjg4YTYyOTM2ZTIzOGYyMmFlZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIzYzU2YmQ2NzMzZTljZjlkNzY1ZjNkNTkwNmM2MDgwN2JkMWM5YzExZjRhMTI5M2JiNGFiYWVmZTZhNjVjOTc4ZDljNzVhNzA0MjM5ZTUwMDMxOWQ5YjRiOGY5ZjEyMWNhZWY3ZmUzYzQ5ZjlhYjM3IjoiIjoiMzY1ZjE2MTJlY2I3OGFkN2IxMTQwZGM2NjA4MmFiMzAiOiIwZTVkMjAxMzc4MjE5MTU4MWU0YTc2ZTBhMmI1YmVjNCI6IjBlNTA5YjdiNDM2ZDA4NWMxMDgwYzNkOWU2ZWUzY2M1NjM5NDRiYmEwZmFkMzUyZDEzMTgyYzg3YzhjM2EwZjBiYTcxZTg2Njc2NzI5ZGEwZDJmNGFjYzJiNTdlNDMwYjg3OTFjNGYzMGQyMzJhMGZlNDhiZjkxZDU4MjQyNDJmYjhlMzYzMzM4MzcxNzNkNzAyZTY3MzgyOTFiNTdlZmQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiOTFhNDRmM2U0MTJkMDMxYmQ0N2VjODkwN2UzMmYwNDM0YTIwZDc4NGRiM2Y2ZmZkNzhiMDEzY2EwYjAwNTUzNjk4YTExM2Q3NWQ4ZWJiZTg1NjU1NGM3MWFhNGIwZDQ4YWY3NGJiZWJjOTdhZmFiNCI6IiI6IjlmNGIzYjNmMWUyZDg0OTc1M2QyY2VkYzhkOGM1ZDE3IjoiNjRhMWY0ZDJiMTBjZjk3YTI2OGNhZTcwMzRjYTRkOGMiOiIyMzJhZGUzMjZkZTIzZWM5NzBmNjZlNmE1NDBmMzA2ZDk2Mjc2OWQxYjI0YjA2NzUxMDljYTc1MTRkYmM1MjAwM2QxNTQ2ODdmNTI1ZjRhMjIyMDUwMWQ2ZGM5MjU1MWRmOTExMWM4ZGQzOTgzNTZjNTYwY2U0NGYxOTU5MzAxZGVkYmIxOTdjMDE2MWZjYWQwMjk5YTllZWYzZTc5OWUyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImZiYWE1ZTY1Y2U1NTgwZDc3NDczOTM0MGUwMjVlYWM0NjU1MGI1ZDM4NjU4MjllYWVmOWI1OWVhMzdkMDk0NjkyYjlmZDE1Y2EyNTQ2OGZjZjdlMzhmN2RjZWNkNWZkODVjNjg2MDU3ZTFhYjliYWIiOiIiOiJmMGU3MjIxOTA5OTRjNjZmNjRmZjcyNWU4YTliM2JlMCI6IjU0OGVkM2JiY2NjOGY5Zjc5YzcwYjJlODVlZTBlNjI2IjoiMmMwN2QyOTk0ZmJmMGJiZWZiYmFmNjBlMGRiYzcxMmYxMmY4ZGRjM2FhNmQ5NGVhOWU5ZDMwODMyMDllYzM1YzRjZjNlNjJiY2ViOWFiMDQyZTYwMDUwNTIwZTA0Njk5NjFkYmRhZWUwNzg3ZmRhNmYxYzQ5NzU1ODU1NzUyNzUzYjFlODcwMzFhNjgyMWMwNGNkYTg4N2NkZWRlY2M1NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIxMzc0NzQyMWExOTg1NTcwOWYzYzQ2OGE1YjFmNzdjMTllYjU4OWEwYjE4YzA2ZGEzYWFlMDA3OGI4NWVlMTBjNzlkMTkyNWY1YWIyMDQ1ZWFjMWYyZmZkZDg1MGU3NjAyY2RhN2RlYmViMDQyYmVhIjoiIjoiM2M5NWZmMjIxY2NmODJmNDA0MWZjZjRlOGE1NmRlMjkiOiIzNDcxYTdhYjQyMzRmYzZlODY3OGQzNjEzZWUxMDgzNSI6ImMzNDZlZmQ0NDNjZWM2ZjIxZWNhMjZlYjUyODllMGJlYzVlYjNmN2MzNzg1ODQyZTc2OTBkNWQzNWVkZGM4N2Q3OTA0MWFhMGE5ZDVlNGVlOWVjNjlhNGI2N2IyNmNjYjcwZWVjYjU5ZGY1ODIzMTZiOGYxYjk0NWEyNWM2NGI4NjFhNmRlY2I1OWFkYzE0NDdjZWEyMTk5NDdmNmFhNzIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNGY3MmQ4ODQ2MjhjOTAyNjFmZGZhOWI4N2JkYmJjZTkzZGFhZjE3NWQwMjkwYWU3ZjcyNWU4YTlmOWI4Yzk4ODA3YjU3YTU5MWQ0ZThiMmE1YjY5MmE2ZTMxMGM0ODUxYmM0YTZkOTg2ZWJhOWNlZiI6IiI6IjhiM2E3NDAxODAwZWUxYmY1ZmRjNzYyNDNiMzEzMjQ0IjoiY2MxOTlmNGY0MzAzNmIwYWY2M2ZlM2Y4ZWY0YWIzZDIiOiI2OTUwYTg5NzU5YjUyYjZjODQxNjYwMGY5ZTBkNTZkMTlmYWIxMmI0MjNkNzQ2YWY5ZDAwYTY2NTdmM2I4ZjNhMzY4MWMwOTEwMzQzNTY5NTQ0YjhiNTM3Mjk0YWE2MTBlODliOTc3YzRkYjIxYTMyNDMxNzU4N2JlOGI5MjMyYjM4ZDM1NGViM2U0MDMyY2FjZDU2MWRmZTQyZTcyZDIzIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjU5YzIzYjQwNzNlN2M5ZDI4NzFkNWQ4ODI5NTNhMzNiMTdlYjJhOGIwYjliMDY4ODcwYzA3MGRlYjlmMTMyNGI4ZmMyOWZkYjYxMmM1MmRkMzAwODg5OTEzYWIxMjA1MzZjZjlhMzg5NDg1ODU5YmIiOiIiOiJhNjQ4M2E5ZTUxMTNhNDVhODRmNjYzMDg2OTI5MTQ2MSI6ImI5M2JiYjc5ZGE3NzUwZjQ0ZTQ1NjEwODFhYzRmMjllIjoiNmEyOTg4NTZjOWIyNWIyMGRlMDE1OTg5MDEzNWJlZGRjNDE1ODAyMzA3Yjg3NTA3ZDYyYjJhZDMyYjE4ODNlNGJhMDM2MzA4YTY2NjlhMDYyNDZkNGFmYzQzYTI5ZTE4M2NhMTQxZjE1NmY3YjE5NzUwOTViZjE0Y2NlYWY3MWNkMjgzMWZhYzg4NzBkOTBmZTBlMTA2NzQzNDc4M2E1ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJhNGI2MjBhYmUxOWFmZjU3NmNkZGI4ZjZkMWU4M2I1OWMyNmQ0YmE3OWZiODM0Njk3NGNhODQxZGIzM2UyODBkNTllMjhlMTEwY2ZlYWZjNGYwMzNjNmE0NWY0NDNmNTI4YTMyNmVkNGMyZGU1Y2Q5IjoiIjoiYmUyNjc2MGNmYzIzYzBjYWQxYWQwOTc4YzNlYzhmMDkiOiJlNzY3Y2M2Njk0MjQyYjAwM2Q2ZDM3OTU0MTUzODliOCI6Ijg5ZDc5MjExZGI2OTY3OWMyMjY5ZGZiMmU1OTk3NDBmZjY0NmViOWViZDVmMjhhNjhiNzY2NjVlNjA4N2QxNWZiODg4YmJmODk5ZTNkMTZkNzExYzNkYjYzZTNkYmY5Y2Q5YmNhYWQ2OTg0YmUwNGFmZTViNDFjMjI3MDQzMTk0OGRkZjQ0ODYyNzJmMTM2ZjFjNWJkZjM3Y2QyYTcwZTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiOTk0ZTQ1NWM0ODE1ZmZkNGE5ZWUxNjhkMWZjY2QzYjY2MWRhODI3YzRlODFiMTAyZGIwYjI4OTc3YzgxYmM0ZGQ1OGQwNjgxOWUyOTM5ODgzOTgzZjllYmYxMzU2YjBkMDFlNmRjMDI3MzU1OTZjYSI6IiI6IjAyOWNhYTY2NTQ0ZjZhZThmNmNjNWJkMzc5MWY4NmYwIjoiN2YxNGMwNWM1ZDg4YWNhZmFiMjIwYWE0NjdlM2UzY2EiOiJmZGU5M2UxOWY3MWZhOTdmYzM2OGY1ZjQ0NTRkZjhhMzliM2ZjZTQyYmQ0YTgwMTcyNmIyOTY4MzhjM2RjYzY2NzhiYjM4NzY4N2UyYzk0M2VkYWI4NjkwMmUzNzdhNjE5OTUwZDM2ZmU3OGNkN2JhM2M2N2FhZWNhZmRkOWY3ZmFhMjA3NmQ3MWZhNzk2NDY5MzMzODdiZDZiZWUxNDdhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjI3MTNlYjA2M2QzODc2ZGQ2YzNhNTkwM2ExZWY1Nzc0YTE4MGM0MTIzZWVlZWE4YTRhYTQ3MmNmMDdjMjc4YWMzNjdhOWE0OTBjN2RkZWYwNThkNmJmMzRlYzlkYjMxNGFiYjExOWExYTAxN2ExN2UiOiIiOiI0NDUyMzYyZWVkNmI5YzMwYTAxZjc4NGE5YTA2ZGM1ZCI6ImU1OTc4MGYyOTE0NjFkMjY2NTkyNGYzYWY4YmNiNmUwIjoiNzQzZjUyOWJlZTA0OGQwYmU2ZjEwZGEwMTAxYzYzYzc0NmZiZWVkMzdjNmNkMGMwYWU5Nzg1NDg5M2EwMGM4MmI2NWFjYzllNmU2ZWMwNDM1N2U1ZTRiMzE1OWE0ZWYzZTVlNTdhMzhkYTJlMDBmMGViM2MxNTM4YTI2ZWUxYTUxOGY3MTE2OWQ1OWIwZDllOGEwMjFmM2Q2MjNiOGZjNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiZmYyY2I0OTMwZDI2YjBlZTc1YmQ5ZWRmYjc3ZTA5ZjUwYzgwMDQ5Zjc1YmE5NWE1MTM3ZWE4NjJkMDg2ZDY1MjNiZGZkZTIwM2JiOGMyYTliYjU4OGVmMjQyOGExNzM0NTMxMzZiZGVkZWMzN2ViMyI6IiI6ImE1Mjc3NWMwNjZiNmU5Zjc1MDhiMzBjYTIyOTQ0Mjk2IjoiNWU0YWQ1NTRlNjVhNDk2ODVlODUyN2Y5MjNjYmMwY2MiOiI0ZTkxMzRkYjgwOWJkMDdhNDZmNDBiYzFhMWY2ZDgzMDgwODEyMWVlZDI1ZDE3ZDdjZTNlYjgxYmI4OGVjNjYwYjdkZDk0NWViZTlmZWY4YmRjY2RhOTIxMzlmNDc3MGFiOGE0NjdlMDExOGYyNDY4MGM2ZjZlNWI5YWQ2ZWU5NGEwODYxMThiNmNmNjlhY2ViOGNkODA5ZDkxNDI5YWE2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI3Mjk3MWQxM2Q2MzU2ZTY4ZmE2MWQ5NGFlMWQ3NmE5MWI2OWQ4YjM5NDk5MzkzZmU5ZWIyODg5ZDE0ZDkxYTc0ODgyMDdiZDhlZTUzNmQ0ODFiMzcyMzdiMDk5NWEyMThmYjU2ZGQxNzQwMzM1OTkyIjoiIjoiMGU1OWI3NGQ0YWM1YWI4YmI1MWM3ZjRiOTlmZjg1OWUiOiIyMzJkZWM2MDYyOGE0MzIxNmI3NTgzOWFjODIwZmU0ZCI6IjFmMWFkYjg1YjhkN2QxZTAyMmQ1YTY1OTRjZTA3NDI0MjY4Mzk5M2VlNGQzYzUxNjZhMmFhZjQwYzIzOTgzMDU4N2IxMTEyYWYyYTQzMTNlMzYzZWE0YTk4MGIwNmYyMGM1ZWUzMjA3ZGUwMjZhYWVhOTE5N2M5NWQwZTc3MWY0ZjE2YTJjYWI0MWMwNjg0YzE1ZTY0NjJjYjdhNWE3MWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMCwgMTI4KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6Ijk3NWMxMDkzM2Y3MzUxMjYyYTQyOTZhYTYxNzU0NzFmYTM0ZTdjOWIzNDM3YjVjNzAxM2UyMmQyYTkwMDJlOWU0MmQyNzIwMmUwNTE4YjUzZGEyMzAxNmQxZjViN2I2M2M0NmMxMzkxODg2OTM0ZDUiOiIiOiJiNzA2M2Q2YmEzNzQwZDVjMjU4MzAzZDUzOTNmOGYzYiI6IjkxNjE3ODBiYTZiZWYwNWRhNzI5MGE3NzQxNjc2N2JhIjoiYjY4YjRlYmI2ODU2YWY3MzM3NzQ1ZTBhNTBjYWExZDM0YWJlMjc1OTRkNTZkODQ2Nzk0YzE1YmMwMzk3M2Q2N2Q1NDhiYmQyNjgwZGM3NDljNTE3MTM3MmUyN2FmMTY5MDBkNmJmNzI5YTg0ZTZkNzYyNjU2M2VmMGI0YzkwYzI3NWQ5MTEyNTY3YjhjYTZlMDA5M2IzNGEwOTY2ZjI3ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAwLCAxMjgpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiZTFkZmE3OTk5MDA2YWVlMTJhMjM0OWFlMWQ1ODBmNWNhMmE0MzdkYzBiYzI5NGY0NDlmMjY3MGFmYzU1ZThmYTgxNTJjNzg3YTAxNDg4MGY2NzBjNTg1Y2ZjYTU3NGVhMmQxM2YyOGU2YTBlYTY3NyI6IiI6ImQ3N2E4MzBmNjUwYTMzMzFhNzJmMGE0YjE0NzFkYWI2IjoiMzdhZWY4MWU3MjllZDBiOTFiZjA1NGNlOThkZjRhNzYiOiJjMDA5YTY5MmQ3ZTU2NmI1OGNjNTRhNDVmN2Q2OTg3YTQ4ZDk2YzM2NjRmNjAzNGFlM2FjMGRhZTllZDVjMjIwYzQ2ZWYwYzYzOGM3NTM1M2FjNzkwMTI0ZDg4Y2E1NGZlNDM3OTdmMWE3MDQyMjYwNDUwN2EyYWI0NThmZWQ1NzZjY2Y2ZDI1Y2Y1MjFkYThkMGMzYjdiZmExNmVlNmY2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDAsIDEyOCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIzMTBkOGQwODY4NzU0NWU0ODQ5M2RiMTc5ZTZlOTJhMTc2Y2JhNTNmZjE3Y2Q3ODNiYTVkMzhkYTVmMmU1MTQ2OGIwYTk0ODljODhiOGRiMGJlNGEyYzg3Yzg3NWJlMGUxYmUwMWFhZGYyZWZlZWY2IjoiIjoiYTE4MjRiMDdlMGQyYWRhMGZhZGVjMjliZWI1M2E5ZjciOiJjY2RiM2Y3ZDdmNmE0ZDE2OWY1ZjJlMjRlYzQ4MWZjYiI6ImJmY2M4ZjJlY2UyM2QyMjU0NWVjMjE3NmFhYmQwODM4NTU5MjNjYTlhNjczYjU0YjY2YTNlMjU2MjIxMmFhZDNjYzc0YzRjODk3NmRlMjU5Y2M5NWEyZjA5YTg1YjdhY2QxZjE4YzM0M2VmZjAzNjhhODBlNzNhNTQ3ZWZkY2Q5NTQ4MTZiMzhkZjFjMTk1NTZkNzE0ODk3ZTMxN2Q2OWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiZGI4MTI4YzI3ZWFmM2EzOWQ1MDE5Nzg1YWEzNWIyMGMzOTc3NDM3ZmQ3NWU4MDMyZWQzNDBkZGJlMWIyOWViOWJlZGIzMDQ4YTNmZGQwNmFhOTU3YzVjZmYwMGViODc1NDljMzA3NDAwZDQwNTlkMCI6IjRmODA2MDUwNmRhZjQwODE5YzdjNTg2MzAxNTFlZGM3IjoiIjoiIjoiNGFjOTMzYjdkZTgwM2MyNjY0NjE0OTNhMTlkYmIwMGU5ZGIyNWVlNzY4MTY1NzgxZmM5YTcwYzY3YzRlOGE5MmRiMzY0NzFlM2NiMTcxNGZiYjY1ZTE3ZDc0NzcwMDYxYjBhYmFlNTJiZTM0YTYwNGQ4N2U1NmE0YWUxZTkwYzY1MzNjYzc2NGFhNzQxOWI1NDM5ZTNlZmExOTM5MzRiYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI4N2M4MGE1ZTMzNGUwMmEzNmY1OTMyNGJlZmI0ZmFlMTllNWI3M2FlZjY5MWQ0NWU4OTczZjU4YTQ4N2I0NTdkNzNjNDMxMmZmODkwYjA1MzQ3MmQ5NWRlNTM4ZjE1MTJmNjQzMjIzM2I3ZDljMDU4IjoiNmNjNTU1MzQzNDE0ODQ5OWQ2NWY4ZTRhYjczMzQ5MzgiOiIiOiIiOiI1Y2NkY2IzZDAyMmViNGQ3MmMyMTE1OTRjOTE2ZGQyZDg4M2QyZWNjMTkwZjZlNzhlZDc2ZjQzODU2MjA1OWU2Zjg4MDBjZTZkMTFiM2I4NjAzMjQzZjRhNTZmMzhkNDE2NzI5MzVhY2U4ZDZmYWI4MjVjYjY5NzhhMmQwODI3YWE2NWM3MDUyM2M0OGY3YjlhOGY2ZmU0M2NjMmJhOTI3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjgzYzExM2RhYmQ0MzIyOWQ0YTczMzMxNDdjN2Q4NGY0OGZjMjllYTNkODEzYzBmMWQ0NWM1MTg0OTA2YTAyZWE0YzZmMTFiMTQ5ZGI3Zjk4ODEyOTA0YmUzZWU5NmRlMjVhYzlhNzhjY2RmZGRlYjMiOiI3N2RjNDVkMzdkNmQ0MDFlNDVjOTgyZjJjNDk2MGZkNiI6IiI6IiI6ImU0ZjA4MDg3ZWFhZTExZmNhOTRiZDdkZjgxNjk4MGU2NjA4ZTIwODAzMmY5NDRmMWVmYzUwYWM4ZDQ3ODM0YjlmMTBjMDA5NTg4Mzc2MzNlNjFmM2VkMjM1MWM2ODg1NDQ2YjcyZDI2MzRiZjZiNjlmOWQ3YjdhMzZmM2ZiOGU5ODI5NGYxZTlkOTJhNGE3MjU0NjJlNjAzMjVkYzQxY2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYWVjODA5YzFiN2VlZjkxNjU2OWNjYTI0N2NkOWU3YjA3MmRmNjY5NDU4YzhhZjRkMjlmZWNiYTBjNDYxMzBiYTkyMGZjOGJmN2QyOWNmYWVkYTQ3NjYwN2YzMzI1NTY2ZWY1MmZiNjlhM2RlZmM1NCI6IjgyNGIxMWFjN2UxM2Y2NTRmZjQyMzhlMGYyOGEyZjYwIjoiIjoiIjoiNTE0ZjFhZGFlYjk5ZGQyODMzZjcxNGE1MzgwNGFjYTQzYTk5ZmNlNDVjYWY1ZGIxNjZiMTVhY2IwNDYwZjVlN2UyM2M2OTZmZGFhOGVjZDEzOGE5MzczNjc0ODNkYzdiYjdhNmFmNTFhNjExYWE3YjA2NzE1NTlhZWQxNDEwOTEzMzczOGUwNmJmMjE5MGJiODVhYmVmM2E2NzRlNDg4YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJiMmY1Y2FjZGY4NzFlNzQyYzI2MmM3NjcxYjU5YTc0YzZhNDEyNDJiMjIyNWYyNTJjYmE3ZGIzYmY3N2Q2NjE5YWY0NjUzMmViOWMwMWI3MmNkZTI5NzhlYzM5ZTRmZTUyNDdhYzVmMGZlYTU1OWQ4IjoiMmNiZmI5YmM2YzMxODIxOWRmODZlMDhhYjExNDE5ZTIiOiIiOiIiOiI2N2QzOTNjODRkMDU5ODNmNWFjZmI4ODgzZWQ0NGUyNDQwNmYyMTZlZmEzZDY2NTA4MDdmYWJkMzAyOGZiMWY3NjJkNmM2N2ZmYjBhYWJlODE0M2ZkM2RkZmRhOGNhMmM3ZWYxMzU0NmRjZmZjNGRjZjk1YjYxMGEyOGY3Y2MyYTI1YWM0ZTdlYzA5NDRkNjU1YzU2YzExMGZhOTMxZmY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjU0ZWY1NGQwNDI1ZjhjZWJkMTI3ZmVkMGYzOTU4ODQ2MTNkYzE5NDYzNjY0ZDE5ZDAyYWY2YmFmMDZkZTEyNmI1NWZiYjNkN2YxMTQ3MjhiYjQ2NTA4MzlmMTMzNWY4YzJjM2JlMThlYTNiZWVhNzUiOiJmMGNlZjI2MGEyZjc0YTQyNWQwNjJiYjI1YzY4YzUzOSI6IiI6IiI6ImRkOGI5NmE1ZjNmYmQwZjVmNjk0NzdjNWI3ZTcxMDk5YjIxMTM4ODhmY2ZhNmFjY2U3MTNhMTNmMDQwYjBiNWZkNTUxMDBhM2QwZDNhMzQ0NzA2YTMxZTc5NmQ2OTk5ZjYzY2M2MzU3ZjViYTM4NmYzOGQ0NmJjYTljNDJhMjVjNGEzOWFmZGM3ZGI4ZDg0M2EwMzJlZjM1YmY0YjE1ZWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNGExNzgxYzQ4M2VhZTA3ZTBhOWRkZDkxYjkwOGZiMDBhMjFhNGY1ZTFjNmU5ZGE1OGYzODBmNDA3ZGJjYzk4MmNkMDc2MWU1ZjBmZDZkMzM5YTY0NmJkYzYxMzJhZGRiN2FjMGNkZWZiMWI5MWY3ZCI6ImM0YjcwODRkNzNkMzk5YzEyOGUwYTExOTIxN2M3OTNmIjoiIjoiIjoiZTQ2NWNiYzE1MDI3MDk0OTNkZTFkMzM0N2EwN2Y4NTViMmRkNjQzNWE0ZWJhYWYwMGU3NzU2YzE0MzkyMTk1NDZlNWZjNjcwOTNmMGVhYzEwNTVkMjIxZmRlNTEyOTdjZGM5ZmY0MTEyMWQ1ODI1MTRjNzVlOTkwNjg3MGY5OWQ1ODgwNmYxODczZjAxODMyNzc1MTBjZjFmMDY3YTg0MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiIzNjk3NGE3YzI3NmUxOGVkMjcwNGVlZGVmNmI2MjdmOGU1N2U3NTVkNTU0YjgwZWZkMGYwNjVjMjM2Zjc4OTY0Y2ZkM2I2NjE0MDViOTg2NDA2MzFmZGExOWZlZmE4YjViMDAzZThiNzUyZWYwNjBiIjoiNjI2YThiYzBkMWZhYjA4YzhjNmFmY2RjM2RjNmFjMzMiOiIiOiIiOiI2YjlhZTM0MGU1ZTc1ZTFkY2Y2ZjE4MTU4OWExZmRiYTM5NTE0MTdjMzA0NjdiZTRiNDFlOWZmNGNlMDMwNzNlZjFiYTBhMTlkMTYwYWJjOGU1ZTIzZWQ0MzNiY2M0MjFmZjFmNDI4NzgwNDU0ZGVmYjY2NTExZmM5NDc5NGYzZWMxYzQ4YzAxNGQ3ODNiYjE3M2RiMTAyMjc1YjY0YjFmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjA1ZjkzNGQ2NjhlOTYzMGExMzFhYzUxZTI1NjBlNDVhNzhjZWI4ZWY2ZmFkNzE5MDA0NWNkOTk1MDM5YmZiM2RiNjI0ZjQ2ODczMDI0NDVmYWQwODgyOTgxNWU3NDA3ZmM5NjJhZmUyNzc5NTg5ZjUiOiI4NTM2MjIzZWUwMTg0ZWI0M2U4NGEwN2NmNzFkNDQ1ZCI6IiI6IiI6Ijk3MTQyNDE0MjUyNTU2ZjVkNWVmYWZkMzk4NTJkN2E4NGU3MDMxNmEwYWZmNzk4NWVkNjc2MTc5OGVlYzU3NjIxMjcxOTc3YmI5NTAxODdhMjkwZGQ0ZGQ1MTRiN2E4MDFjOTgxMDNkNGZkNDAxMmFmZGZlMGYyNjRiZmUzZjZlNTg0NzY4NTAzODMxZWEwMjExZmUwNDE1YTBmNTkzMjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiZTJlZTViMzk3MGFjNGNiODMwNjFlNTY5MmIzNDlkZjg2NDNiNjEwMGFhYzU1YWIyOTZmY2FmN2EyZWY3ZTNhMWFhNTRjM2ZiMTk2M2RmZDkzNzgxY2EzNGE5NWQ2ZmMzMjUwNzYyYmQxZDMxYjBiNCI6IjcxYTQzMTZlYTg4MzQxZGNmM2M5MjgwYTVjYjU0YjdmIjoiIjoiIjoiYmY3NjdlZDdlNWYxMWFiZjFhNmFhNWM0NTNmYTEyNDQwMTI5N2UzMmYyMzI3MGM4ZDc4NDIzYTk4ZjVlNjc4M2YzZThlODM1YWE3MzRiMzZjMmYxMWJlMzBhY2YwYjU5OGM3YTIzYWM0MGNlODk0Njg5YTI0ZmQ4ZGUzZTA4MTJlOWE1Y2MxNzkxMDkxYzk4MWJmYTllYzIxNjhkYWY5MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMzJiZDYwZGY1ZTJiNDM1YzkyMmE5ZTQzNGY1Zjk5YmU5YzU0MzdmZjE1OWM3ZTVlNjdiODFiODJmN2I1ZWNkZjZlNjBlYzQ3ODk4MjBkMzdhMTA3MWQ3YjkxY2YxZTNkMTRmMTBlZjdmMzQ5MjJjZCI6ImM3NTllNGFiNmM4ZmU4YTExYTFmODQ3MmIwNmVlZTBmIjoiIjoiIjoiMzI5Y2M4MTEwNTM0M2JkNzRmMjRjMGE1OWI5NzI4OTJlNzg5ZWEyMGU0NmVhZDFhNzRlN2FmMDM2YTgzNmQ0NmM3MDQ2MWM1MmRmNTAzODI4MmU1M2UyZGI0NDE0MzU5MGQ2MDE1ODA5ZGI1Njc1NGI3NzhhMmE3Mjc4ZDUwNTBlZWVjOTMzMmZkNzMyYzljNzE0YTY3NjU2M2M4YzNlZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYWM1MjRlYzA5NzYxNjcwYjk2NTYzODAzMjE4YTdkMzU4OWJkOGU2ODJiMmE1Y2VmNjRkOTZiOTY4ZWM5ODgzOWE5N2E0NzA0YTdhNWIyYjg1OWYzZWQ2YzM3MDAzMWYxMDI3ZGVmOGZhMDY3MmEyNiI6IjE1MzFhMTdkM2Q4OWMxZDA3NzVmM2E2MzBiYTczMGI4IjoiIjoiIjoiNDdlM2JmYWEyY2JlNGIwODU2MDM5OTFhYTczOTM2M2E2MzliMDY0ZGQ5MTIwZTAxNDljYjViYTJiYTA1MzljNDE0Nzg5N2EzNGQ5ODUzODkzNWZlMjVhYjM2Y2Y1MGY2YTFjM2FhMjg5MmUyYzA2NTkxZTRjMmJjY2ZhOTkwZjYzMTc3MzJkNTU4MTk0NGM4ZDJlZjk2ZDAzMjlhYzU3NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMmM5YTQzZWYxNDk2MzUyZWE2MmNlZDFjMzQ1ZGU0MDkwYTljZWE2ODk4YjhhNTNhYmIyZjAxYTQzNWVjNmQyMDUwYTY5MmI0NGZhMTUyYmZjNDJjZTRlYTMwZWY3NjEyOTdjMWVmMTMyODM5ZDQxMSI6IjAwYmZiMmZmMjYwMGZlMWRjNmEyZDg1NjQyZTllY2VkIjoiIjoiIjoiMTkzZDA4YmZiMjIxMjFkZWIyMmU4MDc5ODk1NzAzZTJhNTE4Yjc5YmZjMzEwNDAzOGMyYTIyMGY2YmFiZWI4ZjI4ZjU2NTJkNWQxYjNhOGI0NjhkOGE0ZWQwY2IzMmM2OWM1NTE5ZGVkODVkZGMwZmVhNjJkNzdlYzUxNThiNmE1NWNhZWMzYmJkZjFmNmI5M2U0NDlkNmYxNWNjZTI2YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMGYxNWVjMGM4ZDNjMTg0ZDliMmE0N2JmOWZmYTIwOTgyNjg1MTYxYmVjOTFmYWQyYzU1ODA4Y2NhZmQ0NmVjZDE4MDgxNzM4Y2Y4MzVlMTM0N2U3ZGY3ZTNmODc5ZjNmYmI3NTljMjA1MWUzNDIxNyI6ImVhZWYyNzIxNTQ2N2Q3ODc4MTA2YmE5ZGFlOTkwYmVmIjoiIjoiIjoiYmNmNzlhZDUwMjAxZjM0OThjZjE4Mjg4ZGMzMGMzMmRmYmYyNzM5NDkwYzc0ODYyZDVlOWM2NmIxNjE5NTU5MDA3NWNmZTA5NDk1NmUyYmNiYTIwMDliNjRhNWY4YjYyZDE0NDE1ODE4MDgzNWE3ZjUxYjcwNmExMjg4NGUzMDlhYjRlYzE5OGY1YmQwN2VmZmZkNTkxZDVjYzg1NjllMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiNTZhMGI2MTk0MTUzZTBkMjczN2Y0OWY0ZTVjYjc3YmE0ZDhmYmY5OTE0NDA1ODMzZjMyNGMwOWY5NjQzNGNlZWE3ZTc1NmZjMmY1NWEwYjNmMDQzYjZlMTFmYzJmNjcxZWMwMGY0ZDQ3OGI3OTFjNiI6IjgxYTg1Y2IyYjZhZmE5OWExZjYwOWY4M2MzYjE1MTA1IjoiIjoiIjoiNDBlODdiODIyYjEwMDA0NDE4ODRhMzhiODc3NmJhYTY5ZmJlYTk5OTYyNTcxZThhMjBkOGFmMDEyZDUwYzhjMjExODYwYWQ1Nzk4NjllYzg4MDMyMGVhODA1N2Q1Y2IwZGU5NDk2ZWM1N2Q4YjU5NGNhOGJlNWI5NDIxOWVhYTgwMGFmNzIwNWY4YTgzYjY2Yzg3ZTBmZWU5YWE5NzMyZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjY4MGZhY2U5MGQ3YmNhMjFkNGEwZWRiNzc5OWVlNWQ4YjdiZTllZWRkZDBlM2I0YjdjYWZlMjMxNjMwYWE5NWE3NDJjNGU1ZjVmMjJjNmE0MWMwZDc3OTI4OTg4Mjc5NDhhNTg5ZjgyMmQxYWY3YTYiOiJmNThjNDBhZTcwZjdhNTU2NDhhOTMxYTBhOTMxM2RkNyI6ImRjMzY2M2YwNjI3ODljZDE1Y2JiMjBjM2MxOGNkOWQ3IjoiZmU4NWIwYWIxNGM2OTZlNjljMjRlN2I1YTEzNzEyMGMiOiI2ODAwNGIzYTI4ZjdmMDFjZjllOWI1NzEyMDc5ZWY4MDg3MWIwOGI5YTkxYmNkMmI5ZjA5NGRhNDg0ODBiMzRjYWZkNTU5NmIwYzBhNDhlMTQ4ZGFiYzZmNzdiOGZmYWYxODcwMjhlMTA0MTM3YTRmZWIxYzcyYjBjNDRmZThiMWFmYWJhNWJjZmQ4NjY3ZjJmNTViNDYwNjYzMmUzY2JjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiYjQ4MTA0MWE3NWIwM2NkYWEwNzc4NGUzNzJiMzc2ODk3ZmE5ZTc5MmUxZmE1ZTA3OGQ0YzcyMzRmYjlkYzNmOTgwNGI0ZTQ4YTMyYTVkYjc0OTkwMzMzYzQ5NTFkMDI4MjM3NjVmOTBhMGFhODg1MCI6ImY4ZjBmMWVkM2YwYmRhMTY0ZTU5NmViZTEyM2I3Zjc1IjoiMzEyMGUzMjlmMWQ1NWE4YzA3ZTc0NzJhYzc3ZTE3MjAiOiIyYjlmZjMxMGU2M2M2N2I1ZTBhZWI0N2ZmN2ExMDJmYSI6IjdkNmIzYWI4NGJiNmMwMTRkZDQ0ZWIxMjY2ZmIzOTU0ZjFlOGZmNmM0OGE0ZDkxNTE0ZjY4NWYwNjQyNDk3Y2IxOTM2YTBhZmM0MGM4ZGRkMTU0NTIwNGUxMjhmZDA2ZDRkMThiYmEwNWQxMjk0ZTY0ZDU3YTA1OTNiODAzYTMxMWIzN2NjMmQ2MzE0ODdhYjAzYTAwZmUyODhlNWU3NDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiJhZWY5ZDMxMGNmY2VkMjk4NzNiN2UyYjdiZTM3NTcyYjc2ZWQ4NGIwNDMzNjRjY2E2MTE5MTdmOWIxMjA1M2Y5MTljZGY2MGFjOWMwYjM2NDkwOWYwOTYyMDRmMjFiNThiMGJiZGNmMzhhM2JlN2U5IjoiNjdlNWFhODNmYTU3MmNhMjdhY2ZjZDI3ZDRmNWU0OWIiOiI3YWU5MGY3ZGMyMjBiZjViMzg3ZWQ0NGMyNDI1YWYyOSI6IjlkNzUwZGMxM2MxOWFjZjNjZGJhMTAxNTVkM2NhNWE3IjoiODkyNzc2YmZiMDA5ZmUwYjE3OTNjMGViYjJiYTU0OWNiY2M0YTI5ZDAzNzQwNzA2ODM5OTBjM2YyYzYyMmVlMDg5NzdmZTkzNjFjNTk4MzhmMDY4ZjY3NThkN2YzZjc2YzM4M2Q5ZjU5ZGVkODUwMWYyNWVmZjliZTRhMWUyZGUzZWU0ODRhMmU4MDY5YzUxZTg4NmE3NWEyMjlhZTE1ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImI2ODY4NmI4Y2Y4MTdkYTljOTNjZmNkN2FhZTQxMGMwMmQzYThlYWZmNTdjNmVjZjk5MGYyMGY3MGM1ODcxNjYyOTJiNWY1NmNlZjFjY2M1MDE4YzM4YTYwMmY4MTFjN2NkYzE2ZWQ1OWZhYWY0MDUiOiIwM2NkNTk4NTg1YTNhODBmOWE4MWUyNzgwYzY5OTI2OSI6ImRjNzYxMjQ2ZTBhNzQzMzlhZGI3NmM3MjllYzE0MTRiIjoiYjI5MzYwMjI5MjIyMDI3NTdlYWU0ZTVkNTllYjI5ZTMiOiI2ZTk3MzViODJhOWRhMjA3NGY5M2I1NDU4MGFlYjc2YmM3NTI2NWU1MjVmMWI1MGE4ZWUwZDY4NTEzMTdiZWI2NGY0NzdmM2IzNDU3Y2E5YzEyMGNkOGVhYjZkMzc0MDBhZTYyMzMyYmM5MWNhYjgwM2IwYzQ0ZTA3MDY2NmY5Mzg5YTlkMGZiZThiYWFiOWNjNWMwY2Q1NGEzOTdjOGUxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiY2I2OGViOTViYjAwYmViODk2MDQ4ZDVkMzIzZDczNzk0MmIxYTQ3OTU4MDZmYzZiYmNmNjdkMTk1ODYyMTcyZjQ5YmIzMTllNjA5OTY1ZmVkYTI5MzcxNjViOGRmZmE2NTYwZTFmZDQzNGE1ZWEwZiI6IjcwMGRjNzcyNTMyMWEwYTIxYTcwZmY2YWViZTMwZDgyIjoiZDU3YzNkZmJjYjE4ZTI4MGNlZjgxYzcxMThhNTIwZjIiOiI2ZTU2OTc3NmI4YTI2ZDhlN2QzYzg3Zjk5ZjkzMmFhYyI6ImIwMTdlYjk4YzVkNzgyNDY5NjU4ZDQ3NTY5NDUzYjgzMjJhOGRiN2EyYWJlNzViNGU2ODYzN2EzOTVmN2M2N2JlZTc1YTQyYjM5ZGVmM2FhY2IwYjFhMDM2NzdhMGJiNGQzMTI1Nzk2NGY0NjdiN2IzOTYyZDkxMmRhZjZkODQ0MWU1OTUyYWFhNDI3YzI0NmExZjFhNjIzYTg0OThhNTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI4MWU3ZWNjZjQ2YWNkMTQ1ZDQzNWI4MGYyYTZlNzJlYjFiMjM2ZDAyZjEyNTU0MjcwYzI2ZThiYTEzZTkzMDY4NTZkNjIxOWFkMDRhOGYxYmUzZmE0MzZiZjI4MGY1NzljMjJiNjRjOTFhYzcwMGIyIjoiMzNhMTg2YWZiYzQ0ZjNhZGVjNTkwZDdlMzZiZDk5MDUiOiJiY2ZkOTlkNjkzMWVhOWRmNjc5ZDE5NmQ4NDEyYzlhZCI6IjZkZDYxYWYwZjUwNzdkZjUzMWMxNTFmMmRiZTJiYWQyIjoiNDFlNmNlZDM0YTk3YWZlZTcyMTY2MjM5NDU1ZDgyZmUwMjBmNTQ2NGNjYmM4ZTg3NWUwNmEwNTg3NWNhODQ0ZDhiN2ZhM2VjMzYwZDMxYWU1N2Y1MzI0NWU3YzRiZWQ1MDFlYmI2ZjliNGFmMzUwZmY5Y2Q4NmE1NzEzNjA4MDRkM2EzNGI5ZGMxMWViNGJlNjQyN2Y1MjFiZDE0Zjg5MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjFiNzZiYjhhMGRjNzA2N2FmYTE5M2JmNWRhZTFjZDdjMDNkY2MzN2I1Nzg4ZDIyZmUwZjRhZGRhOTlkYzZkNzc2ZmE1NDVhYWJmYjc2NzI1NTAwMTA2M2RkZDk5YzdlZjY1NmExNmU3NjA0YzUxMDIiOiJiMDZiYjY4M2RjNTAxOGYwNjc4YzE0Yjk3NTQ3OTQ0ZSI6Ijg3ZWE0ZjcxMzU2MmIxMjkwNzliNDk5NTZlYjg4YWJiIjoiNTY1MGVmMjgxMzIzYjZhY2VjMzRjNTE3OTVjNjcxNjAiOiJhZmVhZTAyOGEzNTg3MDI3NDNiMTRkZDY0NDE0ZDMzNTBlYjFkZTc4NzAyNjc3ZTMwZjdmZjllNzFkNmY5YjM2OGM1M2U3OWIwYTM1M2E0M2VjMDZlOTAyMGM3MjM0MjMyYTA3ZDUwNGMxNjNkN2E4YTYzNDk2YmRhZjY3MGVmY2YyNTk3YjY2YmQwZGVhMmI4MjdlMGE0Y2U1MTM0MjVlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMToiMTE3YWQzZjY4MjQ4NTU1YTJiOTk0MWNmMGE1NjcyNmNhMTYyYmY5YjUzMWYyNmUzNDE2YmUwMDRiY2M2ZmMzNWJlODM2MmM2ZGJkOTc3MWQ0MmJkNmUxODc4NjhkNTk4ZjZlMjY0N2I1MzZjOTcyOCI6IjE2MTY4YzJhNTRkOGRkNzE1MGNkN2YxMjI0ODJhNzIzIjoiNGU0Y2IwMDAxYzUyODhjMTUzOGRjY2I4MGJlMDFlNDEiOiI4MTc3YzFkNGRlZjZiZGUwOTNmMjdhOTg5NGQzNDVlZSI6IjFlNDA3ZGQ4YzFkZDE0MzYwNjRmMjAxNWVhYjljNWZiOWI4OGI2ZGQwMTdlMTE5NmNlNzBmZDllYzg3OGE4Y2IwMmUyZDIyMWY0MDk2ZTc5OThkYmZmYmYwYjM5MmU3ZjRkOTdlMGQxY2RmODE3NTU1MDdjMDRiNWE2MjU0MDg2YjQwZDE1M2IxMGZhZjAwMTE5ODBiYzA5MTEyNzUxNDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMSwgMTI4LCAxMjgpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEExOiI1NGJhZGEwYjg5ZDlmNWJiZWE3OGFhOGM0MDlkY2NkMDM5YWNmZDdiMTY0NWEwZWYxOTNiNjBjYWM5NzE5NmU0Y2Y5Nzk1ZmVkZTlkODk4ZDA4MmE5NzMxYThjZTIxNjhhMTA0MjBjNWQ2YmQ5YTBjIjoiMWM4ZmViMTQ5ZDk4ZmFmMTViNzM2MjIxNjcwNjQwODgiOiJhNzFlZThhNTIyZDY3MTk0YmQxNzU2YzJlMjg5ODExNSI6IjY2OWVmMDc2NzlmMzM2ZjUyOTA1ODY3MmY4NjFiMGYzIjoiZDcyZDQzZmY4NzA0MjQ4YTBkNTlhMTExYjY0MTI4ZmE2YmZmMjY1YzUyYmRhZTM4NTA3Y2U1ZjMwMjE1OGJlOTAyZDgzODBmZTI0N2FiYzAyNzVkYmJiNTAyODY3ZjdhZDFjZGRkZTBlNDA0ZmQ5ZDY0ZWM0OTRkYWFjNWQwODg0MDFiNGRhNjk2ZjQ3YTMxYjQ0MzVhYmJlYTcxYzM4NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0xLCAxMjgsIDEyOCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjhjZDQwN2ZjN2EzNjMxNWYxY2ZlZjE0ODlhMmVjZGVjNDMzYjJjYmMxZmRhNGFlMWQ5NjdlMTkyZWE4OTQyYWVjYWExNjlkZWNhNGMyNjgyNDZlZGI0MjFhMDA5MmExMjA5MTQ5N2E1ZmExNTkzMjciOiIxMTRhNGYzNDQ2ZWIzYzk4YWE5YzE4MmQzMjliMjg1NiI6ImYyOTk5NGEzOTgwNDAwNGU3YWM1MDY0MmY5OWM0MDNiIjoiNDA3ODJjZjNkMDAyYWE2MDMwMjZlMjZkM2JiYzZkZDEiOiJjZjM4MTM5MjU2N2Y5ZTBkMWY1NWM2NDJiYzY0MDc1Njk5MjU0ZGY2YjRiMzc1ZmZmOGY4NjlmN2ExMDE4ODA0NjI3NmRjZjQxMDc2YzU1OTkwYjZiOTk3ZGIxODJmY2M4OGNiYWNjNDc4MjM0N2I5ZjRjZTM5MzUxYjc3ZTM3ODkzMWQ1Y2QwMjZkOTk3YWIxMDRiOGI3Nzg3YjJmOTJiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImRjOGQ3MDUxODBlMjJmOGJlOTFhYTRiZDU3YTAyY2FhMzBmZTgzNDBhNTNjNjRhZDJkNDYwZTQwOWMzYTJkYjlmZGZkZTkwMzRhNGM4ZjMwNjE5NWZhNjY1M2RjMjlkODRkMjZhZjUxMThmYjYwYWYiOiI0YjUxZGVkMTk4ZDFiMTZmODBiYTllNTM2YTJhMDQ2ZCI6ImNlYWNiNWIzN2NhNzZkZTI0MGE5ZjRkZWE4OWEwMzg5IjoiNzNjNjE0YjhlMjczZWE5MjAzNjgzZDFiMGNiMmQ3YTYiOiI2YTEzNmQ0MjE4MjU1YzcwOTEzYjczYWY0ODBhZjg2Y2Q4Y2NiNmYzMTk5MzdlMDc1MzY1ZWYwMTQxODdjMzEyZjkwNjlmMWZkMDVjNmUwYzQ0YTFiN2JhOWRkMjVlOTQ4YWMxNTU0NjFlNDI1ZDg2NGNjODNiNjNiZDg0Mjg5Yjc2ODA1OGY3NjQ3YTg5MjFlMjNiZmE3YzczYjQ0NzZhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjE3OTY2NDZiNDhhMmI5ODJmY2Y3YTRmNDlmZWU3ZTNkNmJlNjczMTA2YTRhMjkzNzFlYjhkMzU5ODg4OGQ1M2Y1OTU3MmM2M2MwZTRiYjE4M2IxN2UwZjY3ZDgxYTExY2M4NzhlZjYwMGQxYmI4MTAiOiI1Mjk3YWVkYmNhODY2ZDE3NTRjNGI2YWY0NDNhYjI0YyI6Ijc3MTY4ODU3NGI1MjE1NDgzN2JkZmY2ZGRjZjI0ZDUyIjoiZjZjNjI3YmM4NGIyYzAxYTljMDU1ZDQ2MzJlYzk1NWMiOiI5ZDFjNzk2YTIzNDNlZTg1NTg1OWUwNGVkNzAyZmEyMzNkYTJmNzNhYzlhZDYzMmZkMTdjOGM1YWZlMTVjNTYwMGM2YWIyNDk1MDE4ZjgwOGIxY2ViYzU0YjE0YWUyYjFmOTI5MzQ3YmU0YWVkOTgzNmUwYjQ1ZGQyMzUyYjIzY2IyOGQ3NTMwNDVmMWFlNmFmZjc1OThhOWExYzM1MGE3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6ImM1YWEzYjBlOWQ4ZjkxNmYxOGU3M2RhYTBjYjg4YTQ0N2Y3NTEwYWY0MGY5ZGQ1NDBmOGFlNGQ2MmJlMmM1NzU0ZjZlYjEwNDEwYzEyMTM4ODIzMzIwMWZmOWM4MTIxYTM2YWU3N2UwNDJhOTgyMTEiOiIwNmMzNWM0NDZlMjhmMjFmYjFjZGYyZDQwYWY1M2RjNiI6IjQxMDE1YzNlZjNhZGI5NmVkYmZhZWE2ZWI4ZTBkZWE2IjoiZTZiNjAwMTZiYjk5NDE1NjQwNTA2ODUxYzBmZTNmYjciOiIwMjdmZjFhYjRjNDA2YzA0OGRhNmE4YzI0ZjA0ZDEyYTVhMzVhNTE5MWI2MmI0OTY0NTliNzUwYjEwMDY2Y2ZiYWM1MDJiMWFjNjEyYjU4NTI3NzQ0ZjZhYzUwMDVkMjJkM2Y4NmMxYWRlYjFjMWJmMWEyNjkwMjQ3NGQwOGJmODg2ZWQ1YmIyNmU2ZDFiNTI5ZGYwMTQzMTI4YjM5N2Y0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjU3YzdlMjllMDMwNWU2YTgwM2E1NjhmNDdhY2FlZDYwZDEzZTE5MmMxZTE2YmQ5YmM1MGVmNWViYjUyYzU0OTNiY2M0ZDdhMGU1YmU2NGQwNjRiNzM1ZGVhYmJmNjdlOTQzOTU1NDQ0OTdlNDgxNmMiOiI4OTE5OWJiOTYwYWM3NDEwODJjNWZlNWVhMzRlYTJmMyI6IjUzYjViMjc4M2Q4MTkxYWQ0ZWFlM2VkODdiYzA1OWVkIjoiZmNlNGQ3ZjVmMGNiMjExNWQ0YzRiZTIyOTRkZWNhNTYiOiJiOTg4MzlhOTYyZGI4ZGU3YTE3ZDM1YzM1YmRhMDZjNDEzOWRiMzkzM2M0ZWU2MGJmMTc3OWIxNmQ4MDRkN2M2MDBhNjJmOWM1N2NlZjkzYTc5ZmYyODE5ODlkOTA0ODFkYjg2M2QyM2NkMjRjNGI1NjZkNzRlMWRlNjU5NmI3Y2NlZWZjZWYxZjE2MWU1YTUxZDExNTEyOGUwYjIzYzViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTEsIDEyOCwgMTI4KSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTE6IjU2N2QzZjRjMGRlMzk2ZWQ2NzU2OWMwNzBkODdmMmI1MzVlYzg3NGU4ODE0MTg5ODNlYzQyY2ViMjk1YjdkMzEyZTcxNWU0NmI5NmY5ZGE1OTk4ZjljZGU0NWIxZGMyMmRiNmQyZDdiZmQ0ZjM5MzAiOiI0M2MxNmFiNDljYTUxNzRmOTA3ZDc4OTllYmQyNDJlOSI6IjZjMGI0NzlkOWU4NDdkZmJlYWUyMzBiZDQ2MDFkMGRiIjoiMGQ1YTIxODNjOWY5Y2E2OTQxZjZhNjE3ODkyZjVlNDciOiI5MzRmZTgyYjA5NTFiOTdkYWZjNWJhMTZlODdiMDQ1OTY5MTE1NmI0MmZmMmRiYmJkOGY2ZWQ5YjA0YmU5NTJhZjI2N2M2YTE3ZmJmYzg2ZGU5MWY5ZjA3ZWVkNDgyYTUzNjJiMTc2MjE2YTg5NjNhZjQ4NTUwM2JhOTNiMmU4MmMwM2EzZWU2MjI1MDc3ZDkwY2Q5NjFlMjRmNjAyNmY2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJmM2E3MDliYjQ3YTM2ODM4Y2I5OThmYjY5ODZmZjA3NGM1NzkzMmE2Njk2NzA1NzBmZjZjZDFiMjAyZWUxZGEwMTRhMDExZjQzZmMwMmM1MWZmY2I0MDQ4Y2MwNjA3NjNmMmM1OGRlMmVkZDQ5NDI3NWRhMTQxMThjOWNiN2ZkNTA0NzVjNjZjYzdlNzkyNDA2MjEzYTdkMDBjZjc2MjNkOTMxYTU5NDciOiIiOiIiOiIiOiJiYmUzZGFlZmE2MWZlMzAyYmRhYTZkNGQzNzk2ODBhY2ZkMGQ0NTZiNWQzNWYxMzdjMTQ1YjcyNjI2ZjJmY2YzOWZkZjdmMzcwOGQ5ZTg4YzE3MTA0MDhhM2Q3ZWNlM2IwMjYxZmY1Mzg4NDZmZDU0NTIxNDk5NjAyMTVjMGMyMmJlYWZlNmNkMjRhN2MzOTJkNTg0NTc3NGI4NzUyODkxMmMzMjIxMTlhMmFkZjRkMzVhMGJhNjFkZDM2ZmZjOGE3ZTc0NzVhZmVjNThhZDRhOGNmMzQzYWZiNjc3ZjA4NyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMGY1MDhjNjMzMGI5NjczZTk0ODYxYWUyMDU3ZTIwMGFlOGYyYjMzMGI3NDYzNGQ3OWZlOGE0YzY5ODIxMTA4MGRiMDdlNThiNzYyYTIzODczNzlmMGMwZTJkMDFiMmNhNDBlZjgyZmVjMzVlYjgxYTU0OTNjY2VmNzA5ZGJhYTBiMGU0NDk0ZTQ2MDUzMDA2MmM4ZGI3NDQ2YmM2YWYyZDg1MmZkODc1IjoiIjoiIjoiIjoiNTgzMzY3YmRlMDAzZWIyMDYxY2RiNmY1MWRiOWM2ODI3Y2JjZWZiZmYwNDk3YmE4MjNlMTEyZWRiZjdmMjA2NmZjZmZhM2U5MmQxZThjNTMxMDA3NzgzNTU0ZTZhYThhNjMzYmM5MjU2OTBjYTZkNTc5ZmJlZGJmOWNjNGQ2Y2IwODEzM2QwY2Y4ZDRjMjVmY2QzYjZmZWQ5NWYwMGIxYmIxNzQ3N2NmNjdiOTdhNTU3ZTdkYTkzM2JkYzEyMTQ4MTc1NWY2MjhmZGYwZjBiMTE4OWEwOTdjNzE0NzE2OWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjkwODI4NzFlNzNiMDk4YmJjNThmMzI0ZjEyZjZhODNjMzIxMzYwYzlmNWI0MDBkMDBhOWJiODY1ZWY1MjY1MDgzZDkzMDk2NTdjNDBhYzk0YjU3OTk5NTkwMmRmMGUyMDg0ZWI0YTY0MTBjYWM2MDVlNDgyZWE0YWJlNWM4ZWI3M2JjNjNmNjhiYWFlYWE1NmQ0N2Y3ZDc0OTc0ZDk0MDU1NWZkMzg2MSI6IiI6IiI6IiI6IjY3YzJmZDQzOTdhZjc5Mjk3NzgyYWY5YmFhZDJhMjZiOTkzZWZhNDhjNjg5YTc0NTMxNDE3YWUxMDJkNGVhMWQ2YTgyY2IwMzIxYWVlM2RjMjU3MmFkMjcyOTllODFhN2E3N2YxY2Y4MzcxMTllNzQ2OTg4ZjJlYzYwYmIwMWViMmFjM2QxMTBhOTQ4YzFjMzNlODY4MzM3NTdlMjY3MGNjMzk0NzY1OGYzYjJkMzJhYzU5MjQyZjE1MmU4ODlkMDNkMDMwNTZmMGEyNjVlZTc1OWQzYTQ0ODhiNTVjNjNhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI0NzAxZjM0MzI2OTMwY2Y5M2RlYWViM2E5YzE5NmUzMDdhODkwYzhjY2Y0NGE1NWY4NDU5M2IzMzg4YTE5NjIzOGZkZDk3ZDIwMTk5OGVjNzM0ODIxOTk4ZTdkNmJlZjdiMzFmYTJhODEzNDM5MTgwNTZjMDFkNjVmNTE5Yzg1NzZlNDEyMGEzZDZiOWNlMjhjY2Y1N2VlYWJkMDEyZDJjMTRlNDcwNDUiOiIiOiIiOiIiOiJiNDk5Yjg2YjBhMjVhMGZjODRhOWExYjkwMjk3MmUyYmI1YWFmOWI4NGYxMzgwNGQ2MTgwNDkxMjg1YjkzMTYyMThjZGUwZTczZWFjZjcyMmI1YzY2NGY0ZTYxODYyNWVkMzVjNWZhY2JmY2ExNTNjYzE4NDMwOTc1NGVjYWFkOWMzNjc4Y2U1MWFkZTk2ZGZlMzI5MGUxMjVkNjYxZTJhZmJkYWRmYTczMjQwYzI0OTM5YmMzMWQxNzE3MTJjN2M5ODdiZmI0MzRmMWRiNmVkNDRiMzIxYmNkMjM3ZjE0OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYTkxMmI2NzU1Y2QyZDY3N2Q2MzI2OGE1MjAzNzM5YjA3ODVkN2Q5NTY3MzhhNTk2ZTI2OTEyOGE1ODM5MjFhYWNiYmExYWRiN2M2ZDE3MTRjMTY0MTQzYzhmNDRlNzY3MTE5NjU1MTQ2NTE2ODAyMzUwNjg0NzZhYjEzN2Q1OTYyZTVlNTg3MmYzYjg5OWQwZTljYTVhZThmZTcxYmRjZmFlZjFkMjQxIjoiIjoiIjoiIjoiMGY0MTAzMDRiNmQ4OGU1MmM4ZDYwMzljYTY3NGEwNmM0OWE1ZmExMDk0Y2YzNDFjNDAzNGUzOTk5MDIzNmQ5ZTViYjhlYmI2ZTU5ODQ5ZTdkZjgyZTJkMDI5ODFkOGRmMjFlNGJhMzM4MWU2MDZiOTljMTZkZTYyODYwYTQ3MDEwOWMwMTIzYzY5ZWJhZjk3MDYwM2Y0NTFmOWU2YWNmODNlMWM1OTUxYzNjYjg3MTcwZWYzMTlkOWE3OTExMTBhZWEwYzBkYWU1NjIzYzI4N2Q0YzQ1NGVjOTMyMjc2NTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjU0ZmIzNzY3MDdkZTAyYTFjMzg1YTNkYTc4NTIzNDg1MTExYTBhMDk5MDY2MjA2ZjIxMGFkODQ4ZjI5ZDNjMjcwZDJmZDJmNjY4Y2RkM2E1N2NhYmVkNzFmOWQ3ODRjMjA5MjU5ZDFlNGEzZWVlMjA0Njg0NmE1NWE0Njk2NWU0OTVlYjI5NzI1YTg2YmQ2MzBkYzQzY2Q2MGRkYjRmYzkzYzU5OTgwZCI6IiI6IiI6IiI6ImEyZTNhYjUzOTBiNWI3OTc4NmVjN2I0MzRkZTQ4ZTQ1ZjU5MGI4NTUxMzEwNjAwODQ3OWQ4YTNiN2IyMzZjODg0YjBmODcxZDhkZWU1MzljNzEyNTA5YmQ3MGRlMzUxZjM4ODFjZDg3YzljZjc3YzFhOWQ4ODc5OTg2ZmYwZjY2Nzg1NDljNWM2YWNkMTVhZWI2YmJlNjUzYTliYzc2ODI5ZGYyZjE5NGM1ZjZlOGM3ZGQzMDU4OTcxY2UxNTI3M2EyZDU1OWMxYWM2MGEwMDE0ZTVlMzIzNTJkNmJlMmExIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiIzYTBjMjRiNWE2MTA2ZDI4YzAyOTU3NTM4ZTc2ZTk2YjNlY2VjZmE4MGJhNGM3ZDAxZmU2NDJhODhmYzgyMjg4NGNjMzZhYzI3MDNlODk1MmVlNjM1OTQ4NzE1Zjc4YzU0MmU2ZTMyNzBmMjc1N2YxNjUyNDc0ZGY0NzA2NDkwYjE4ZTY0OWZmZDk1ZGM1MThhOGI0MjU5ZGExOTM2MDBhZjVkNWJkZTEiOiIiOiIiOiIiOiI1NWRjMjQyMDZhYTU5ZDM0ZWE5OTBhYzZiMzEyNTBmMTVhYzA1NmM4ZWNkNTJlMTU5ZjM0NjRjMzhlMWYyODg0MGVlYzRjNjQyM2IwZmQ5OTcxZDExYzVhYjk5MjI1ZWRhNWQxNzNjMDhmOTQzOWJiNTZlYjFjYzQ4N2ZkYWVhOTM0ZmE4MTZmOWM5ZTBkNjI4ZjExMWNiZTYwYTY0N2UwMzg5MjA4NGY4MDc3NTI0OGQ0MWNiNTg3NjE3NjcxZDk5YjUwODY0NDQ3NmI2NmMxYzk2OTc5ZTUwNjFlMDI1YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYWU3ZmY3MGJiNjljOTY0ZjA1Yzk5YzBlNzg2ODIxMGQ1NjdiY2I1ZWIwMmRiNzcwOGRlMTYyZTZiYmZkOTFmYTE3ZjMwNjU2NDIwZGFkMWNhNjlkMzU2Y2JhYjgwNDU2Y2VmOTIyYTkyMDZmMDdkMzJjM2YxOThjMWE2OGU2NzNjNTU4MzY3NGJiMWRmMWYyYTY5YzU1NGZkZDM0MTFjODFhOTBjODNmIjoiIjoiIjoiIjoiZjFmM2Y3OWIxZDdmOTg4ZDRjYWY3MzA4NDE2ZjNkMDIzNzFjYzAyOWEyOGViNGYwMjQ3Yzg2MjVjNDY4MGEyZGNiZTlmM2Q1NmQ5MmRlNmVlNGQ0MDMxYTI1NGJkYThhNjU3YmMxNDdmYjkwYzJmNzc4M2E4ZTM3NDliNjA2MzNlNWE5MjFkMDE1Yjg0NmIzY2IzODgzMGJjNzU1NDMwOGFmMDhlZTgyMTllNWFjZDFiNjk5ZjFhYzUzODkzMGQyNTdkYTRlZjU2N2NhNTcwYTc5NTFiZmIyMzZkNGQzNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6Ijg2NzA0YWQwMjg2Zjg4ZGJjNjBiYWViYzJlZDA1NzFkZTdiNWFiNjRiYzg1NTRiYTg2NDU1NTdmYTEwMTU5ZWMwM2NjOWY2ZjI5OWMxYzMwMTFjNzNiMjU2M2U1NzFmYzI0ZjViNWI1MGI0YmVlNTE0ZDdjODA4ODczY2E4MDRiMTQ3MjAxYmE3ZWQ0MzQzMGQ4OWIwNjZjMDRiMDBiMGExNzY5NDUyMyI6IiI6IiI6IiI6IjZiMWEyNmQ3ZDIxMzA4ZDIxN2JjODk4ODA2N2VmM2UyMWY1YmMxMGQzNGU4OTkzN2YyYTg5ZjhkYTI1NmFjZWY1MGI2ZWE3ZDllYTg3N2JjMWQxNTAwMmIxNzY2ZTliYzdmZWEzZDY4MWIxNDdlNDIzNTljZTI5ZDZkNGY4YzczZTdjMjliOWVjMTQyNzdmY2UyZjZhMGM1MThkMjRhZWFkYTQ0OTkwZjdmOTJiMGQxMTg0ZmY5NmIyMGM3NmQ1MDZmNmY5ZDk2MzM5MWFiZWM1YmMyNDdhMmFjNmIyNGM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJkMGIzMDM0MWI0ZmQ0ODI4MWY3NmE4M2Q3ZGU1NzY5ZDA1ZDVjYjllNTY1YjIxM2M4ZTJiYzhkNGFkY2JhZTkwMTA3ZmMxMmZjMWVkMmExOWYyMGJlYjU2M2RlOGYwNWJjNWM0Mzc2MzcxNDgxNTRhMTJiMTYwNmJmZjA3MWRiYjM2NjQ1OGI3NGEwN2ExYzE0MTE0ZmFiNDg3NzcyZDQzNmQ0Y2UxNTkiOiIiOiIiOiIiOiJmZTJhN2NlZDE5NjVmMDEzZDQ3NTcyNGVhYTdkMzFiNjI3NDBiZTQxMWQ4OTlhZmE3OWY5ZmE2ZTczZjE4ZWJlMDkwN2YyZjIxMzg4YjY0OThjZDM2NTc5OGYyN2Y4ODJhMmM1YzI3NDRhOWIyNWU4ZDM1MWU3N2I5ZmE0NDcxY2ViMWRkNmM3MmZkZWY3NTk3N2U0ZTRhMjQ2ZTI0ZjU2YTYxNTE4OWUxYjJhOGQ2NzgyZThjNTA2MmI3NDRhNjVlYmUxZjdjNWZiY2FiMzMzZmRjMTU1YmZlZTMwMDUwMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjRhMWE2OTdlNDE1MzdmMjhiMzgxZTA1ZjExZWJjOTA1YmQ2NmMyYzFkOTA1ZDhjMGI3OGMxMGMyNmNkZjU0N2ExYjZmODVmZjU4ZjQ4Mjk4YTExYmJhNDFlM2VjMDE1ZDQxYTI0ZDllMzM1ZTZlMTNiMDZiODRiOWY1NmIzZTgwM2JhYzU2OWRhZTJkNzRjNDQ0YmI1OGIzYTYzNDRiZmJiOWVlZTc2NSI6IiI6IiI6IiI6IjE1MDYwYjJiYzgyN2RiZWVmYTIxNzBhZGU2MzNiMGYwMDc1YTRiOWIwM2ZjMjRmNzM1MjIxNzRiZTRlNGIwOGI5M2I0MjFmYTk4YzdjNWE0NDVjM2FhZmVkNDdhMmVlZWVkNjNmMTllZjRmNjdlNzcyNmQ4ZmY4NGJkOTRkYWEzMzM4ZTM5N2Q1MmFiZWE0YzdkMTE5MWUzMGYzZThhMTE4NjRmMTBmZjU2YjJkYmVmZDg2MDY1NWQzNGNmNjNlYTIyYmJiNTRkZmQwYzVmNjQyODRjMzAzYTJiYTJmNDllIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiZTgwYjhjODg5NjU1N2Q1OTZlMTkyYzMyMjYzNDdjMzM2ZGFlNDU1YjUwYmYzMmE3OGM2MWI5YTk4Yzk0OTA5NmJlNTE1MzhlMjkzZDMzOGE0NjRlYWUwZWIxOGYxYWIyMWY5OTAzZDA3YThiOThlYTJhZDdmNDFmZTdmZmRjNGI0YmQwZmQwNjEzOGE4NGRjNTIxN2NjOGZlMzliOTJmOTU1OGFhNjE5IjoiIjoiIjoiIjoiNTU1NzQ0OTFkMDdkYjNhZmY5NGRjYjcxZjUxOWNmZmUyZjk2ZWY1NzIxOTI2Mjg2MGMzYzAzZjlhNWI4YTFlYjg4ODY5ZTY5NTg3ZjhiYzA2OTNjOTkxOWJiMjc3ZGM4NGZhNTUxODdjMGRiYjIwMTAxZjBjNGUzMDFkY2QyZmUyMTY2NGU1YTJmMGRkYTNlYjRmMTFkZjM4NzhjNWJlY2RkYmZjM2NhMDMyYTE3Zjc0MGQ0MjRiOTliZTBhOWJlZGZkOTk5MDcyMjllY2NjYmY0NTlmNTQ5NTUzMzU2MGUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI1YzI1ZjAyYmVmMWYxMzE5Y2I2ODY4ZDgzNmM5Y2JjMTgyZmQ4ZDg2ZWNkODdiYzVjYmE0MWMxNjM3MTAwNzRlODBkMWEzMGRkZmQwZjVkODhjNjY4MjI5MmNkNTBjNjg5NjZkMTVlNmZmOTVlMTE3ZDM0MmQ5NzRmZjA3NGVlODcyNzE5ZDE1NzQ1ZGE2MjRmODUwM2E2MTQxYjBhYzRiODg3ZWFkNWYiOiIiOiIiOiIiOiI5YzUyMDRkNTQ3MWMyNTIwM2YxZDk3ODZkMzhmNzEwODFhODcyZjFjNTY2MDRkYzc1NzBjYWE1NDM5ZjE3Y2RkYjdmZWZmMDFjYWRhYWM4ZTBmMzVlN2E1NDMzY2JiY2QyZGQ0ZjExY2M3ZGQxNGY2YWY2MjlmZDcyYTMxNDVkYjY5MjRkMmJkZWZjMjYyNjYyMzY3YjcyNThjZmYzNjE3MjI2MzQ2MGY0ZGQ1MmRkMDhmYWVkMzQ2MGJiZmZlMThlYjEwZmY1YjNjNmE5N2ZhZGRmNjViM2UyMWVjYzk4YyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjY4YjRlMWRkZmQxNmExYzFlY2IwZjQyMjEzMDZlNzdhZDAyYjA3OTkzNDU3ZWFjZTA4NmY2NjU2NmFmYzVmMTI0ODk2MzNjNjA1ZDExZDUzOTE2ZWVlOTZlZDc3OGQ2ZDY1MThjNTY4MWYwZmE5YjAxNjBkYTFjNzE3NDBhOTRhYjMzMzEwYmMyMGExODcxMDAxNWFmMjVkM2Q2NjdjNDBkYzYxOWYzNCI6IiI6IiI6IiI6IjVjNGM5YjMyNzZkNTQ2ZDNiNjI3N2EzYTIwODlkNDk2OTE0NmQ4MzNlMGFjZTNlMWRkYmQ5Zjc5ZmEyMTU4NTMxZjhiYjI2YTI4YjA4ZGM2NGJiMWU2MTBmMTNlYjE0YzlmYjIzNTU5ZGMyZjM4MzI2ZTE0NWFiNTA5YjlmNjkyNTlhMGQxYTMyZjQ3MWQ1YWJmMTU0YTI1ODUyODgwNjM4NDVmOTkzMDZmOWJiODc1Y2NiMGQzMmU5ZDQ5YjQyOTAwMjU3ZWJhYTUzMmU4ZWMyMjNhZWE2MGFiYzk3MTRkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMCkgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiZDVlZTVlMmU2MjllYTE3NDg3ZTU5MzkxNDAxMjU3NWRhYThiYWYyZDBlOTY3MWUxYjhhYWQxNjUyNGRiZGY3ZDA0YzExMTMwY2RjMTBlNTBjNjMwY2NiMjM1NTc5YTcyYjZlYjQ1MDJmZTE0NmFhYmRhYjYyYTA4NWM4MjBlYTQ2YmI5MDkxMDU0ZDc1YTg5MmE4M2MzODUwZGEwYTMxYzE1ZTBkMDIxIjoiIjoiIjoiIjoiZTMyYzA3OThiMjA0MDYyMGZiYzVkMmE0NGVjN2ZhODAzODQ0NGMxOTEwZmQ0YTI0MzEyYzhjOGVhZGI1N2E3ODYwNjQ0OWNmMDVhYzUxYTNiYzRkNThjZTc4NzQyYzFiZTNhMGZhYjZlM2Y1ZWJjOTJiODJiNWQ1ZDY0Y2UyOWU4YzI3ODdhY2UwZjRlNzE4YTdmNmNiNjY5YTBhNDNiYTFhZWUwZDlhZWY1NWNiN2M2ZjVkZmY1N2M4YWNmZTg4M2ZmZDhhNDk2ZDQ0YWZlMDY4MDNlNGM5ZmY2MmRmMDQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNmU1MzE4NDJiOWI3ZmUyYzBlZTY2ODk5YTEyNTUxMzVmNzg0YTJkNTI1OWM5M2FiM2Q2M2E1Y2I3MDhlMmU2Y2JhOTU1ODk3ZDliNjZjN2ZhYjI3NGFhMzg4YTVkYjY5NzEzYzg2ZmFhNGExOTcwOWU5YWFiMDQ2MzhjNjcwZmZhYTgzODA2YWJmNzlhNDNlNjEzZTYyY2NjYWZjNjM3ZTFhMWMwYzE0IjoiIjoiZTYyOGRiMDU3MjUwZmJjNmZjNWFiYTAxYjZjOGI0NzA2MmVjNTYzMmE4NTY2NzMwIjoiYmQxMmU2MWUzZDUyMThlZmIwYzEwM2RjNDk0MDI4MDBjZmI4NjNlYzg5MjVlNzZhIjoiMDM3NjUwZGRmNjZlZDQyZWEzOGNmNDRhYWE5NDg4NGVmZmM1ZjgzMWM1OTNmYjM1ODg2YjVkNjAxYTU4Zjc0Zjg2OGQ4OWYyZGJhNDUwYjljMTYwZTI4ZjY5ZmQyNGUzMGZiN2E0NDE4OTgxMGUyOWFmZDBkMTE3NjJkM2VmMDdiNDUyN2Y0MTM0ZDZjNTNiZGM5YjAyNGNlYmI2YjQwZmJhY2Q2OGI2YWNkNGJiNGQwMTFkNjcwNWNlMjJmOTBkOTEwYWM0MDE3ZDI0MjZkYjdhNDhkYjMyNDIxNjFhYTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiM2ZhZGFiZDJkODg3OWJkMjI5OGY1M2M1NGI1NzNkYjI1ODQ2NTVlMDhhODMyODljYjU4YTRmZjUxNzBmZGMzMGQ3MWJiMjRlZmJiNWE1MGRlZjMxNWRjNjkxNDYxMTE0NjJlMjA0Mjg5YTY0Y2U3Mjc2NzQ5OWYyOTljNzRjOTM0ZjAwMDdkZGIzNGJmNTE4M2JjMWU1YWZkOGMxNWVlYmRlYmJhODgyIjoiIjoiNzQyZjcwMjI4OTJjMjEyM2U2MjM3OWU5MzY3Nzg3MzAyZmQxOGRjMzgzNWRlMGJkIjoiYjYwMzI1MTM2ZmRlN2M4NTgwNTQ5ODNhOTc3MjYyYjYzOTBhNDg0MTk3MjVmZWJlIjoiM2JmYTQxOWY5YmFkMjU5Yjg3MTcwMzY4MTI4NGM1Mzk2ZmE5NGEzMjNkNjQ2ZGRiZjUzMzkzOThjNGQ4MzE0YTk5OWMyMzA4OTRhYzYwYmYyMzE3NjJhY2FkYTY3MmY1ODE1NGE4NmY4MGE4YzRlM2JiYzY3MTMyZTIyZWY1MGMwMzc3MTkzY2IwZDEzYzdlMmM5N2NiMjRjZTViYjY5YzczYmUyZTVjZDNhMDdjYTJiMDAwYjJkN2VlYTk0MDA1MzE1NmJmNTVkODQ2MTgxZTM3NDhhOTFjMzQyZTE5MWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMDc4NGE0OTk0MjRkZDFjMmMxM2Y3NjVlOWVkODhkNzUyZmVmYTgzY2VjNjExNTRmODJiM2ZkNjQ1ZjY0MmZmMTAzZGI5YzhkMWMxMGI1OTc5YzU2YTIyZDU4MzI0NjY5ZDRhY2UzOTk0OTI3MjIyZmE4N2ZkMDQ5NTU4YTQ4YWRjYmQ2YWQ1YTIzODBkMmQ5MjdiZTU3ZmZmYWFlMDM3YmY4YTM0Mzg0IjoiIjoiOWY4NTNkYjU3YzNkYTA0MjE5MTRkMmY3MWY5MzE3ODE3NTgwYzFkZTRjYTQzZDUwIjoiMjcwNzFhZDQ3NWI4NTQxYzFhODAyMzRiYjJkMTEwNjM3ZmNmNGI0ZTIwZTA2YTdhIjoiMmM4NzlhMDNiZDcxOTU5NTIxMWI1MjYxMDFmZTg1NzAyMTYxNzExYzY3YTgxMTg0Y2M0MmMxZjlkYTU3NjFlODUzZmY0YjhkMTlkZWI5NWEyZjMzMjNkMWNkNThhMmUwNjZjNjZlN2EzMDA1OTczMmViYTQzYTRiZjNiMjJmZmZhNWJlYTUxNjFmZDc3NTE2MGRjNTNkN2NiYjRjODkyYmMxMjJlNGUwMTM5ZjhmNTUwMjE5Y2Y2ZmJjY2Y1NWQxNmQ4YTRkOGQ3Nzc2YWExNDNjMDBkOWU3YmQxYzg0N2EiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYWRkYjM2YmM5YWQxMzRjN2I4ZmE1NDg4MWRiMWIxOGUwNDBkZTRmMjUzYmUyOGVmYmQzNmIxMmJmY2Y0NzIxYjA4YzU4MzNlYjBhOTdjNjY4YzdhZGJjN2YwNGE5ZTAyOTk1NDkxMjYxNzJlMjViOWU2MjQyODJjOGU2M2VjY2YzNThjMGVmMWE3MWY4ZmQwYThmYzQ5NDUxZGI3NzU3ZWFlMzQ0ZTQ4IjoiIjoiZTMyNTQwNDE4ZWY2OGMzZGNjYTFlN2EwNTQ2ZTVkYzdkNGM1ZTkyMDE5YjhjYjBmIjoiMzI3ZTMxYTA2MTkzMDVjOTNlOWI1ZWVmODcxMDJkNDQ3ZDIxZTIxZTJkOGMxY2MyIjoiMTc4YmVlNDA1OWFmMDI4Mjg1NGM4MzNlMTFlN2JiYTkyM2ExZTJmMTEyNmZlOGNkN2UxNjk0NjAyYzE4MDgwMmQ2N2I4NDVhODhmZjc4NjE0N2YyMmE3NGU2ZmZiMGY4Yjg2ZDM1MmNlYzI3MTRmZjhmMzA4YjFmOTcwNTYwM2ZhZjViMDRiZWEzYzc1Yzg3YzkxZDVlNmNmNzU4M2I1YzQ1ZWI1ZjVhNzRkMmJhYzQ5MGM4NDE1ZDJmZTA3NzI2YmMzMzRjODhlM2ZiNzI4NDA1OGIwMDZmODJlODlhZTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNDEyNDMxYmFkY2YwNmY4NzU1MWVjNjNjMzg2MGJhZjRiNTk2NjdjYjQ3NTMzNjNkMGY4MmZlN2M5NjhlYTZmOGJjNWQwMTU0MThhZGVhZTIwNjAwNTcyNWRkOTY5M2FmNmY3MDYwYTJkNWJhNTNmNjZkZDQ5ZGMxNDhkZTU4MTczN2I2N2FjZDRiYjcwZmYyZjRjZjIwYWJjMDAxYWUxZWI1MGNiNzVmIjoiIjoiZDY3Zjk0YTk1M2U3ZTRlNGJjMGNiZDUxN2Y5NjNlNTk5ZDY4ODUxY2MzMzM2NDRhIjoiMzg1MjgxOTYxZWNmMmQ4MTc1YzBhNzE4MzQ3ZDIxMzJmMDU5OTY0YzU1ZjM5ZjU3IjoiMzU3ODc2ZTc4YTY5Y2Q0YmM0ZTA2YjJjNTJhZDI4NDM0NTIwZDU0YTRhMzEwZWUwZWIwMjZiODc5OTM1MTRiYTE0NDJlMjVlYjFhZTIyYTNjZTk4NTI5NjI1ZDhkYjliMGU1YjY4MGQ3ZTAyNzUyM2IwYmEwMTg0ZDNmMmU0YjljZGVlMDI3OTYwYWMxNjEyMjk1YmNkYmY1NzA5MTJlZDA1MTA4NTQxYjk3ZTNiYjMwYWUwYTEyMmQ3NGNiNTM2ZTVkYjM0YjdkNWVlNWEwNDI4OTdkNWQyOWZhM2MxMjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYWU5MTRjM2Q3NGFjYjZlMmQ5Yjg0ODc5MjdkYjc5OTJiODM4ZWRlNzNkYzkxOGI2MGJjYzk0ZjBmNDU2ZjQ1NGE2ZDEwMGM5MGUxMTkzNDIxNTRiYzNkZGIwNTlmNDhkYjNhOGQ3YjcyODhlYjQyZDBjZWIwNzUzMmEyYTM1N2QyMDUwNmVhZDI4ZDliZDRhMTI3ZDQzN2E2NTdhNjFmNWQzMGIwNGNmIjoiIjoiMmFmYjUzN2MxM2ZlZTljNDEwM2NjNmFiYjExMjI1MDQ2ZDk0ZGYyZTk4MzhmNzNmIjoiNmE5ZjY3MGNiNDljZDlhZDk4YTE3Y2MxOWQwMGQ0NzY2MzQ0MTA4ZjBjODY4MDRiIjoiMmVkMGM0MTQwNDIwYzZlMzc5OGExM2Y5MTdjZDk5OGIyY2U2Zjk4YmFjMjdmMGZkYjA5ZTI1MzhmNTczY2FmZjE2OTA0ZWRiMzcxZjk4ZjUwOTY0YjdkZTU1MmU5OTcwMDdmY2QyNjdiMzZhYmVkMTJjZDk1ZDlhMDg4NTJhNGNhODYyODcyZWRkMzJjNzA3ZTdhNjBlMTFmZTBhN2RiNGMwZDM0ZjRjNzBmZjE2ZTVjNzVlNmY1ZDdmZmFlYzNiZTM4M2I4NzkwZWYwZmYzYTBkOWY3OTg1MGM5NzQ5YzAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMzhhOTNjM2VkZTE0OGM5MWViN2YwY2QzMjdjYmU4YjI3ZmYwZTU2OWJjNTI2MmFhZjMwYjg2ZDMxYmUzNWY4M2I0ZmY1MGI4NGI1ZGZkNjQ5OTA4ZDBjNTVjZDViZTdhZDM2ZDRmNWY3ZjIyY2NlMDY2ZDNiNTg5YWRlZjgwNGJmYWY1MjI1M2EwZTRjNmJiMDNlMDAwZDY0OTU0MWU1MjNhZTUyZjFkIjoiIjoiZTEyYzA1ZjJiZjQ2M2QyNGRhOWFiZTg5MzAxZDJhY2VmYjc5NTdkYzFiYWI5ZWY4IjoiZDcwMDY1ZmE3MTNlMmQ2OTFiZjU1NGEwMGQwNjMyMjI3NTVlNzIwNGEzZTUzOTY4IjoiM2U1YWQ3ZTk2YzhjZWU4OTk4ODk2NDBkODI2OGNiZWEyOTZhZWU5NmZjYTdiYjYwMzA4YmNkYzA4ZWVkMzZiZGM4YTViMzEyNmVkOGJlOTAwNTc3ZTYwZWMwZjhiM2QzMDE0ZGVlYzQxYWM2NTA0ODBlMDhkZDNhNDI1ODQzYjM3ZmE1ZDFkNjIxYjUwNTNiYTRiMmZjMTgwNGQ0MDc4NDlhODRlOWViNWJmY2Y5NGYyN2MyYTUzNWUyNzU2YjgyMDJlZGUxZjE4ZTgxZjY1ZTNmN2Y1MWEwNjRiNDAxYTQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMzg0ZDZmNDNlN2Q3N2EzODFiYzZiZmJmYmZlMWExN2FhMzU1MjViZWYwMWJlOGFhZjZjNDg4YzQ2NTE3ZDliOTQzODBjNzNkM2ZiNDVhNGYxYjRkNzAzNzUwMjFjN2RmNzhlYWRiNjFkZjVkOWVmYzZlMDhmZTJkODFmZmE2NWRmMzM2NjdjMjNlM2NjNWM4OTg5Mzk4OGYwNGJlMWQzNjM0Y2VkNDQzIjoiIjoiYTAyNzFmZDI1NTJlMDM3NTY4Y2M4NTdhNjBhNTUwZGIwNTA2ODBmYzAzOTA0ZmNlIjoiZWMwOTVjYzllM2JjMzAxMDcxYTkwMWQwMjg5YjU0YWVmYzc5NmJmZmFkNmZkYThlIjoiYWNhMjU3MWE5Y2Y2YmNkMTA0MjllMTQ2ZTZlOTRkMWFlNDNhMDBkYjI4YmVlMmI2MGViNmExYmMxY2RlM2Q0NTJkZDZlMDQ2MTdhYWU3YTNmODEzZmVhZGRjMGY4ZmQyNTg5MDAwNDYwN2Y0NWVjOTk1ZGY5NzBlMWEzYWJiMTdiNDE2YmRiZjYyYjZiYTU2MjVhODBjYjEwMGUyYjg3MjYwYTczZmZlMTVkOWU2ZjI0YWJmZTllNmY5YmE2NmJkZmJmZTcxMzgwZDgzMjQxOGUyYTRiNDYwZGQ3NDE1ZjQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiOThjOGRmODY3ZDIzNDU1M2U1MDRmY2RmODA3ZmI4YmJhNTFkMjNhYzY1ZGQ4YjE2MDk0M2JkNDUxODE3NjRjZjZkZjAwNDljYWQyM2U2YWNhNDkwZGI1N2QxMmRjNmM2MzE2MDRjOTQzZjE1MzkyN2Q2ZDA0YWYwNDJlMWRhMWIyMjVlYjhiZGY0ZWU5OWRkNDA1ZTM1ODZhY2Y4ZTQ0YmIwMTg0ZDY4IjoiIjoiMzMzOGJhZWE3OWMwNmYwZDQ4ZWMyZDQ3MDA0ZTYxYzFjMWU1MDU2YmY4YmJlY2QzIjoiNzkwMDdiZmNlMTA5YTY4MmI3NDZkZjA3NGU4N2M4NDVlZWJkNjY1NTMyODY3ZmEyIjoiYmE3MDQwMTkzZTM4YzQ0OTU5NzE4MjdmYjFkZGI3NDdlYTgwY2QwYmIxZmQ2YWFhYmY4NWVjMTk1OWMyOWViYThmODE4ZWY1NWFhZGFkYzhjMzRiNmE3YzAwZjIxMGE4OTkwOTJiOTcwNGYyZTAzYWJmM2U1ZThmZTZkMTI3Y2FjMDQzNjQ0MWQwYTZmMWIwMmEwMGU1ZmU5NDg1MzljNjZhOGM3OGU3MGYzNWNmZWI2MDBlMWNjNjhjMDY1NTNmNDdjYTA1M2I2NGEwNTM0YTAyOGE3M2QwODkwMDM0ZmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNjE1MGI3MjgwYjMxMDViODZiNjZjMmEzOWExZjA0NjFjZmJjZTE3ZTc0Njc5MWFmYjI0MWIyOTg3NDE0NTRlMTc0NjUwYWIxZTdmMDg1MDBiZDdlYjA5NmU0MGQ4MTE0ZTVhNjA2Njg2MzZiNmZmNjZkMjYyMjE1NGI3ZDIzOWVhZWZjOWFiMmFhMzM1MWVkYTJhZjRmZTUxZGUzNmUyMmU3MDIzNWZiIjoiIjoiNmVjZThhYTQ0N2QyY2Y1MWQ4NDk3ZTMwM2MxYTIwMmUzOWUwNmJkNzIzYzg0N2I3IjoiMjFkODkwNjY2ZDJjOGNlNDQ0MGJiNDUzZjQyODRjMzkyODY1MGY4Y2YzODU3NmQ3IjoiNzU1NGI4Y2M4ZTc5MzMwYWU1NTU3NWY5MTU3Y2QxMGQ4ZWViNThhZjMwZWVlYmU5ZGFhMDIxZjRiNTVjZTM2NWZiZGYzNjI5YmU3NTQ3YTg5Yzc4YmI5ZGY3OWQzNTE3OWU1ZDI5MjRhYTAzMmU2MGQ1YTAwMjgxZjE5ZWUyMjU1YzE3YTY5MzQ1ZWQ4NmJmMzZlY2ZkNjk0YmUwNDA1YzhiNmMwNzdiNDNhOGM4YmJlYTYwM2RkYzYzMmExYWVhNjc3MWE2YmMxMTdkYmRjMzY1ZTI3MTRiZGFhOGIzNzciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImNiMjVlZWY3MjMwYWMyZGEyNDlmZTMwZWE5NGQzYTMzMzIxNDcwMjJiYjIyMDdhYWI0YTUwODIyYjE1NjRjMjRhMDQ3ZWJiNDZkNTdmNDVmNjY4MGY5MDk2MjliNDMxMjk4NzZjNzUzODFlM2I3YzZkMDY4ODdmNjgwODNmYzQyM2YwNmVjYmExNTlhOTBlZGQzOTRjYzBjYTk0NzNlOWNkMGYyM2M4OSI6IiI6IjJmMzBiMDA1ZWE1ZDU5NjU0MzliZjE1MjIwYjFjMDEwZTZjNzkzMDZlNzAwZTZmZSI6Ijk5MzdiZjNlZGIzNjAzY2JiZTE5MGYzNjE2YjAyMWZhZDY1MjAxMTg1NGU2ZjZkMCI6IjA0MGEzMGI4Mjk4MWY3MWU0NjA3YzIwYzFmMmQ2ZTY4NTQ4MjRjOTBiMTI3NTE3ZjY1YjZjN2RhOTlmZDMzZGVlMzJkYzUyYmQwZGJlOTAyNTA5YzUwNDkyYTg4ZTU5NjNiMmI2ZTI3ZDA0NjMzNGIzNTZlNTkwOWY4NTc2M2FmMmRlNzBlOTNhODlkNmEwMGUyZWY4MWRkZDc0ZjRhMzNkM2Y4NDA2ZDA1YjM4M2ZkYTU2OWE1YTU3NGZiNWUzYzBjODZhNTA5NmU5NDE3NGI3OWIyYTRlYWRlYmNjYzJjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiIxZDdkYmU0ZTgzOTEzYmFkM2ZhOTE4MjYyYWIwZjQ1Y2RiOWU0ZTYxNjY3Njk0ZjM2MWRkZWNhY2UwNmJmMzUyYjE4ZGZhYjRjMzJiZmY5YTAxM2QzYjkyYTJkYThlZDY5ODE2ODE1NWRkYzQ5MmY4YWQ1ZDY1Y2RhOGVlZDIxMjc5M2NkOWFlYzhhY2RlN2UwMGY5NTJiYjVkMDBjNTNjNWMxODFlODkiOiIiOiJmOWM1MWZmOGYyNjRjYWU3MjI3MzQ1MDJmNjc5OWU0ZmM1YmVlNzczZDMxZTNlMzEiOiI2YTE3MWEwYTg4MDEwMTdhMWQ5MjRmODBmYzVkOWQ2NTkyYjhiMjhhMzQyZjMwZGUiOiI0MjUwMjRiZDFkMWE2NmQ0NTI3YTNlOGE4MzA3YjMyMDY5MjNiYzFkNjkzZjViN2Y5MDE3ZjBkNTUyN2NkNjU5MTAxNjc1ODc5NGFjODllMmY2ODJjYjJkNjZmOGQyOGY5YTJmNWFlMjk3NGE3NWY0ZDBkZTE3ZGNkMDJlOTNiZjI5YzY5MTc1ZmNlYmEyNjIzNzhiYWZiZTNlYjdlM2RhYmU5NzQ4ODkzMDZkMGEyZWJkMGFkOWQ5MzRjMzdiMWFkODlhYzFmYzI4NDkzZTZiMWY2ZjI0NjIwZTQwZWFmNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDAsIDE5MikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYTY4ODdmZTQxZWQ1YTYxNWViMDMwYjMxYjg2MzE1ZDMyZDEzZGQ1YWQ1MDY1NjZlYTIzZWEzYjE2MmI4ZGQ2MjExMjk3MzZjOGRkZTMxNzA4YTdmYTRhNGM2MDZkYzIxMmIzNDQwNjE3MTExZTk0YTVjNjcyMmMzYTcyOWQ4NGQyZTU4NThjMjNiYThiYjI0OTQ1NmExMWQ2M2RiYTlkNDI2MGE3MjEzIjoiIjoiYTUyMDM2ZGFhODE3MjExMWU4OWM4OTkxY2E4MThiZGQ3MTEwOTVhMTYwMmYyZjE1IjoiY2JhNDI3YTJiN2JiNjQwMDJlMWRhMzE1OWQ2NDNlMDAyNTE2YmVkMjc5ZTBkNDQyIjoiY2YwZjU4ODEwMzI2MDZjMjFhOGVhMjBhZGJhNmE3MmUxNzZlOTY4ZjEwYjA4YWI2ZDA4Zjk5N2IyNGZjMmEyNGYyYzVkNDRkMWI5OWRlYjdkYjRmMzg4ZGM4YWMyNjhmOTY2YTM0Yzg1N2NjNWY0M2VmYzYwMTY3NGJjNTQ4ZmZlYWVlMWMxMzQxNWRmNmQwMjQwODM1ODMyY2I3NTg0MGI2MDcxMWNiNjM2ZjUwOWRkOWI4N2I2OTg2MTU5NTk2ODhlOWFmZWZmYTUwNjcxYWRhMDVmYWE1NjRjODdhZDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAwLCAxOTIpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImE1NjM0NTk4ODljYTI5YjcxMTA4NmFkZmJmMThmMjg0ZmRkMTg2MDFmZjY5OTE2YWYxY2U0NzUxMGQzM2YyMDVkNGRjZDAwODBmOWRmZWRiMmJjMWUyZTYwZmEwYjljYWUwOTQxMDJiYzdhNzA1Y2MyMjMyNzllMGZjM2IwMDIwYjRmYWNhZmMyYjMxYjliY2E5MjM4MmYzODEwZDVhNGUzZWY2MjZhOSI6IiI6IjVmYzgzZjFmNmRjMGFkNDU0YmJhY2YyZGYzNjZjODAzY2MxZDJmZDQ2YmY3OGQzMiI6IjFhOTY1NDY2N2NmZDZhZDBhYWQ5MzgzYmUwNGVjMTQ4MGE0OTQyNjJiM2ZlZTgyMyI6ImNiNDVjZTk2YTk3MzcyOGJkYWRlNTFmOTEwMDRhYzA5ZTE1NTE3Mzc2OTA2M2IzZmI0NzEyNDkzZDg4NzdmMDg4MTI3YTM0OTI1ODhlOTlmZWY2NDhhMTAxY2YxYzIzOGZkZWZkNzk4ZGQ0OTI4YjViYjNhODUxZWVkNjkzZjM3ZDY3MzYwYTI4YTJiMjdjNDQwNmU5ZGRlZmRmZmJhNjYyNTI5YjkxYTk4MGJiZTRlYjM4MWNmOTczNGIzMzZlMmI2NGU3NDgyZTAzMjhjMmUyYmY4MWUzOWVkYzMwZDk3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMCwgMTkyKSAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI4ODZkMDk4NzMxYWJmMzE0MGQ1MTJlMGQzNDhhMzg0ZDI1MzcyNjY3ZmU3ZTRmMGNlNzEzYjFkMmVjYTdiMmFkOTM5YjI1YWYwM2Y3OGVkYWQ3NWJmMGFiOTViNDExMDcxMGQwZTEyZTcxNGUwM2Y3ZGYzNWRiNTlmYzRlZjI5MDZjZjM2YzZjODg5N2I4MDIyMDBhODNlNjBkMTZmN2ZiMDY0YWJkMmEiOiIiOiJhNGY0MmQ4M2E0OTJkYjNmYzA1M2QxMjc1YzZmMjY0NzA2ZmE5MzI5NTVjM2RhNjIiOiI0NTA1YzA2NjRlNTliYjQzODgwMjA0NzA4MzhiYjA5OGM0YWUxMzM4YzI2OGFkZjIiOiI0ZjljM2M2MGVlMzIwNDI3MzVjYzUzOWI5YTIzZDA0YzJiYzZiY2Q2OGRiMDRhNTgyNDAzMDVmMTY1YmNjZWJiYjk4ZTBmNDc5NmIyODNhMGQ3OGJkYWNjZmNjOGRhZjE5ZjIxYTcyOTQ1YmUwNzk5NmJiYjBiNjA2NjQzYzc3NTNmNzZlZTYzNzEyOTJkM2U2ODE0NjhiNzE0ZTE2YmMzMmRiMTRhZDZkNzc3Njc3MTM3ZWJkMzczMTE4NmVhNzJiODQwYjhjNGFlNzllY2IyYzYxMzUyZWEwNTZkMmQ2YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJhMjZhZjkzNTcxYmE4NGI1OGUxNGU5MjFhNmJhZGE3MzA4M2VjMTdmMjE1ODBhMTUyNzAzZTE3NDEzOTJmYzljZTYwNDZmNzdkNmVkYTUwMDBmMzIyNWVmMjg0MjVlMzBjZWMxMzhhMTZiMGViZDg4NWZlZjA3NGM2ZGEyYTdiMTI2ZmNkMWYwNTZlM2E1ZmQ1NjI3MzY4YzYzNjgxY2MxMGZiZjc1MGIiOiIwNjI3ZDEwYjFlNWI0ZjBmZmY5NmQwYzdlNjg0ZGViOWZiNmE0ZTQ4OTU5ZGJjMjkiOiIiOiIiOiI5OGQ2YmM3ZWM3Y2Q3MmRhNGM3NTBkOTE3MzUxOGE5YTE3MTIwZmU5YWYxMGNkMWE3ZDg3MmZhYzUwNWQ5Mjc2YzU1MWI4MjFhODY4Y2I4YjRkOGIxMGViM2IwNTg0NTgyNzcxN2QyOTc1ODE0YjUwODBhMmY0YWE1MGM1YjExMmJkMDFiODY1MmYyZDFiNTZhODhjNmM4OTFkYjVmM2Y0MGQxZDFmMDY0OGQ4NGU2Y2UyMTM4YzJjODc5ODg0ZWI0ODQ3ODU2MTk4NTc5ZWFjNzU5YTA2NWE1ZDM4NGM0NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI1ZmQwODkzMGJhNDA0ZDEzYTcyNzUyMjc2NjA4NjllN2VmZjEwZTEwMzU0OGU2ZWExNWYwODE2ZWE5M2I2NDlmNmFiYTQwOGFjNzEwYzQ5ZWFkZGVhMGI0ZDFlMjE5NTc3ZTZmNmJhNGYxOTMzODYyMjhmNmZkZjljZGNjNTBkNWJkY2Y2ZDFmMjQ5ZTljYWUwYTA5N2JiMzQxZTJiYTM1ODFhM2YyY2EiOiI3YTQ2Mzk1ODMwMjEwOWQ1ZmI5ZmVmMWEyMzJiNWFlYTEzYmE1OGE2MGI3MDkxMWMiOiIiOiIiOiJhMWE1YzlkOTBmOTM0MGM4MDdlZmEyMDY4YzZhMGI4NzJhNGFkNTFhN2NmOTBlMTRiNDc5N2RkODk0MzYxNzEyZmM5NTA3YmQ2MWQ4YmE5ODRlY2YxMzQ1ZmEzY2JjZjMwMzFlMmJjNDMwMjM1NGNkZjNmNjE1YzNhMWJmNDNmNjBhNDY0Njk4ZTI1MDcyNmMzN2E3YTlhMjNlMWZmN2U4ZDk2ZGYwMzk1N2UzYTBiNWU2YzRjNGZkYmRjZmY0ODdlNDY3YjEyZGJjMjFlMDdlYjhhN2M0Y2Q3Zjc3OTkxMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI2MjVkNmE1MDllYzQzYzU1YmJlYzQ1YjQyNDRmYTBiY2UyNGM3NGNjMjcwODUxZjJkMzJlNGJiNGYxOTYxNDc2YWY0MDA4OGI1ZWE4MWY3YTg2ZWZiYTc4YWJkZmI1MGJlMDllMWE2ODg1MTg5OWUwZTlhY2Q5NWY3N2YxNmU4YjBhZWE1YTliZjI5YmMxYTE4ZDMyMTU4Y2Y2OWM3OTRmM2Y0N2ZlNjEiOiJiY2ZhMjU5YzkxOWY2ZTU2Yzc3OTE0YTI3Mjk1OWNkYTZkMmNhZmVhZmY4N2Q5MWIiOiIiOiIiOiJiNWJjMWYwMzA5OTU0N2NlMWEzNTliZWRlMWY5ZjNiNzZiMzhlOGI5Y2M3ODFmYjM5MDk4OTkxNDRmNGQwYTRiYTkzMjcyNTUyYmZiMGRkY2RhNTExNjVkMGNhM2VhZTQ3ZDEwOTYxYTYyNjkyYmQ5ZWRmMmE5MzM5YzhhZDE0NDY5ZjE4MzRlZWUzYzNmYzEwNzRjYjE0OTMwNTRmODQyNzNlNGFkYzczZTVlZWM2Y2JhMjg0YzViN2ZkODAwNWYxMGNiNjdiMGZlMTZhZTBiNGZmMzBkNTBjYTI0NWM1ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJiYzBjODNkZTMxMjE3ZmY2YjIyYzcxOWRlOGM2NjUzZmNiZDhhZmY3OTI1ZjA0NjI0Yzc2ZjU4NmVkM2JhYjMyNGI2NGZhOGExZWMxNGVmYThkOGQwYjQxZWI2NzM1ZDUxN2Y2YzY0N2VmOGJlZGYzMDM2YTZjYTkwZmExZDJjNTI4NzIyZGUzM2Y3NmY3Mzc1NzExYjZiNDEyN2I4NmZlMDk2ZTcyY2QiOiJkN2VmNmI1ZGQwOWMwODQzNzMxMzg3MTA3OGFjNzMwYzJmODVhNWFiYWU2ZDZlMjQiOiIiOiIiOiI2ZDQxNWFmYzAxNTFjM2NiNDI2ZWIzYjkwYzIwOWZlYjcyNmMwMWUyODc4NTY3OGJiMGI4ZDkxNDNkNGI3ZjMxYWUwN2UzODQ4MTYwNzJlMmRmMzEzNTBiMTMzYThmNGUzZWUxOGYwNGIxNTRkMTk0NTEzZDliMDcyYTY5NWU1MmJmMDNlZWI0YzlhMWRmODVkZDZlZjk4ZDI0NTNkYzM5MzkwYmMzYTE3ZjNjZTQ5OWQ5YjE4MmM4OWQwNTkxZGMzZGJkYjdhZWNiNjI2YjA3ZjBhZDI3MzdiZjgyMDBiMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJjYWNhMmI4NjMxNTAyZmJkOGJlYzMzZTg5MDY2ZTc3Yjk3YTU3YjA5ZDIxYTkyZGNjN2I2NTg5N2U1MGQ3YTMxMmYyODc5MzJjNTI5ZjZhNmZkOGJlNmZhZDVjNDY3ZjZjMTVmOWJjMGYzOTY1M2E2ZTQ5NjNjMGQ0YzRiYWE5ZDZhZDM5ZjRhZDJhMWQ2NTg3Mzc3ZWMzODk4ZTYzZTAyY2MwYzQ1NGYiOiIzMzY5MWRhNzQ2MWQzMzU1NjU5YzRjYTkyN2I0ZDNlM2JiZmQ4ZTc3NWI1MzU1MzgiOiIiOiIiOiI4OWFiZThlNjU2NjY3Mjk5NzA1YzRjOGIyMDhmMGZjNDAwODk3Mzk3ZDE1YWEzNTc0Y2Y4NmMwYTY0MTVkZDMwYWM1ZDdkOGJjNjI5ZDhiYTUyZTZlNWFmNjM4MTg0NzU4NzQyNjZlOThhNDNhYjVkMzA4NWQyODU2OTUwZThkNDg3ZWEyMmUwMWY5YWI3ZmUxODYyYmUxZmRiOWE5N2NjMjRlYjlhZDA1YmVlYmIyMDI3MTY2MDdlOGIxNjRjZjYzY2FjYjkyNTA0ZTgwZTY4ZTY0MWFmNzFhZDZlZTQ3ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI1ZDk3ZGU5N2Q2ZjgxYTg1OGFkNmFlMDI2MmU1ODE2OWIyN2MyNWFkZmMyYmZmNTA2ODU0ZTZiZmQzN2YzYTRkOGM0YjQ2Y2Q3OGQwYTc2YjBkYzY3ZTBkM2Y5MGZiMDRjMjEzMWJjMzEyMzlkZWZjOGVhYmU5YmUwZmM1ODlhNTU0YTRiNzdmYTc5YzY0YzAzYmJmODdhMzIwMzE1MzBkOTliYmUzOTciOiJhMGQ4YmUzMGEwOTcyMDAyZjIxY2UyZDdjZjNjOGU4NDkwN2M2MzhlMDA5MzM1NGQiOiIiOiIiOiI2NzUzNmQ3MzUyYTQ5YTFhNDkxMTBhMWRjMWI3N2RkMTkyNGJlMzQxMjNlMDI3YWVhMGJhNjA2NGFlMGFhMDUxZDQ0NzBjY2JmOTIzZTBjOTZjODZmMmQ0NDBmMTdmNDViNjdjNGM3Nzg1YTZmNTAwNmJmMGNhZGMxMzI2OTU0MGIyYzU5YmI3NWY2NDJlOTY2OGZlYjYwMWZjNjBjMThiOTRkNjVlYmVhMGRmZTVmYjI4NGUwMDNhNTg4MzdmOWU5ZTEyMDQ4MWVjMmJhOTcyYzc1NWM2YTkxMzRhZjY4MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI5Y2E3MTQ5YjBjNWNjYjdhMGY3ZWM1Mzk5YzY0NGRiYTk4YzQxODM3MzQ2MGM1OTk3OGQ5MWRiNTdmZjcxNDg5N2VlNzFjYWY0NTljMWRjMTY0NjU1MTQwODEwOTkyZmE2Y2JiYjcwOGJhMmU2MTA1M2Q1ODY2YmE2YTFiYmRiYzYzOWZkMjFiZTQzODNiZWI0YTRkMzcwZTg2ZDBlOTczOWVmODQ5YWUiOiIyYWRlMmZmYzE5ZGU3ZmM5NDc2NzE5MzIyM2FhMWZiMzQ2MWNiMjlkOTcwYzhmMDUiOiIiOiIiOiJiMzlkNmRiNTI5ZmJiM2M2YTkwZDZiNzA1Nzc1OWMyNmE5ZmEyNjAyNGQyYjY1ZTNiZjQ1OTg4MWZmMGY4OGE1YjkzYjg3ZTA3Nzk2MzUwMjJjZWE4MWRiMzEzMzI5YjYxNjEzNzQyY2M4MmI1MmZmZjFhMmU2ZTI0YWUwZWViYzA5MTdkNWU0NTczNDY2ZTRhZWUzZjBlZTAwNTM0NDU1NjZlYWEwODBjM2U3MDFiYzM1ZDQwY2U1MTA1YjRiNjU3MmJhYTdiNGM4NGExNmU0YWFiNTAxZTZlZjY3MDE2NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJjYzc1MTE3MWQ4MjhkYmEwMjNmNDMwYjNmNWE3MTM0ZjczM2Y0Y2MxZWM3NjQ5NWU5OGE2ZGMyYTYyN2Q5NzkyNDcxNmQ3ZTZiMDQzY2YxNWM2MmNlOGRhMWRkYTJhOTMwYzg4ZDZkNGQxMmNhOTkyYTUwMWY3NzNkZmY1ZDM4ZTQyZjE1MGYxYzU1ZWUzNThhYmExZTczY2JlYmY0NjViYWY5ZmQwYTYiOiI0YmE1MGE3NTQyNDk3MDUyNjAyMmM3MzUxODMxYzU4ZWU3NWYxZTNhYTBjNDc3NDkiOiIiOiIiOiI4YjM4N2U1NWI5YzEwZDBjYzMzNmY1NDQ1NzU1YzBiNmRiZTk3MWJmNjlhMDQ2ODJiMjFjOTMwM2E2NmUwOTNiN2RjY2YzM2ZjNjg1NzY1YzZkMmJjZmEzMDIwODkyZWQwOWNlNmVhM2UzMzU1YjNiYzE2NzQxZjM0ZDQwYjVjOTZiYjA4NWMxNTc0ODAxZDE0YjRmNzFjOTdjZjY0ZTc1ZGNjMzMwZmFmYTFkMWU2MjY4MjI2MDlhOWFmNjJjODk0ZGJkZDU2MzA3Y2NmMWViYmI3ZWMwOWQ1MDAwOTZhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiIxZjJjY2QyOWJjMzhlODM2NGE0YmViMGU4OTk4NGI4OGQ2MWRjZDMxZDQ4ZTMxMGFlNjkxYzBlMTQ2ZjQ5NWI5ZDhjZjQ0M2VkMTJmM2FkMmRhN2M1OWMyYTJmNmI4ZGY0ZTAyMDI0MTQ3OTFlMTA2YzFmODc5ODc5YjdhNDZhYzIwN2Y0NWI1ZmVkNjljMzgzMDlhZGYxNWRmZDBkZDc1NzQyYzBkZjAiOiJlMGM0OWFlZTcxYzRjMDYwYWFjMWJhYjFmNDM4ZjllMmIwYzk2ZDcxMGViZmVmNzciOiIiOiIiOiI1OTM2NzdmNjVjYTQzMzljMGRkOGIxYWU5Mjc4Y2M0OWFkYWVmMWNmODg5NzYwYjQ2MzFhMzc5ZDgyYmMyNTEyM2RmZDJlMTQzNmQwYjZiODkwZDQxNTVlMzIzNmZjMWUyY2VmNjdkOGJjMDQ1NDA5OTA1MWUyMjBkNjkyNWIzN2M0NzQwOGZkYWNkZmQ1NGNhYjdiZTcwZjhiM2IzZGZjNWE4NmYxODFkZDU1OWZmNzE4MmYyMjVmN2RlODdkZDhiZDY5MTQzYmUyNzBjZTc2ZDI1NjJjNmUwMWJhNGM0ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJmMWJlZTljYWVjZmQwMzk3YTZjZDc2ZjM1NmVjYWNmMTA1Mzk4MWM2NGQzMTVkYjRhNTFhMjQ0ZmUzYjIyZWY5OTczOTJmNjVkYzEzY2YzMGY1YjhmNWVkYjdmOGY1NTg2M2EzMDE1NjcyMjUzNmQwMjQ0MGU1ZjA2ZTUwMzc5NWQyNDAxNzc1YTU2MDY4NWYyYWQzYzk4YWFhYTIyNzI2Y2Q2ZWM0NWEiOiI5ZDQyNjcwZWE0MTEzYWUwMjMwMmNkY2M2NjBiNDk3ZjNmZmIxOWI5YWNhOGJhYmYiOiIiOiIiOiI3OGYzMWEyNGNkYTQzYWNmYmM0ZGI3ZjE3YzU3ODA1YTRiNTMzNTNkNjY4NTk2MjQ3MzU4YjQ3ZThmOGRlZWFjYTMxMmE3ZjljZTc4ODMyYmMxZGEyZDZiMzcyN2ZjYjg0N2NhNGZlYjE2OTVhMmVkZmQyYWIyNGM0ODZkYTEyNWJlMWMxYWY0Zjc4Yjc0OWFmZGI1N2Y5N2I0YThiODkyZmQ4NzIyOGYxMTZiYTEwZmE3MzkwNTk1ODEyNTZkZTRmYjg2NWQxMTE1YzU4Mjg0Y2I5ODUwYTI0ZTViNzYxNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMTdiMzE0NmVhM2FjMWFmZGNhNDQ2Mjc1ZjNiNzUzOWE1MTc3NjZiOTBlMmRhMmM0Yzg1ZGI0ODAyOTQzZWZjZDgwMDlhOWZmZGQwNTQ0NDBkYTE2ZWRiNjQxYTA1MGZjZTNmM2NhYjNkNWYwM2Q1NTAxMTFkYWVhYTg4NDFhOWM4MTRkZWY3NmVlYzljNGU5MTA3ODhjNzEwNTYyNDI4YTM5Y2QwOTg3IjoiZjM4MzFjMWJjODU5ZmFkNDUyYTc2Y2U1MTM1NzVhMjNlOGI3OTBjOTBkZTQ1NzVjIjoiIjoiIjoiYzZjODU5MzZjZDUyYjUyNzFhNmU3MDQxMGUwYjlkOTYwZDc2ZjMyMzZiNTQ4Y2ZkNGZlYTI2NTA0Y2E4YTc4ZTU4ZWU5MTRjNmNmMjQ4ZjMwZDdlZTM1NDdlZWRkM2E0ZDk4NjliMTVlMzI2YzkxMWFhZWNiN2YwYzIyMWY4ZWI5MjA4YTliMzU1ZTRiMWNjNzkyNjM4MGQyNWJiNzc2ZjNlODk5MDQ5NDNiM2ZkZjMwNjAxMmZjOTVkMDZiM2I3YzQ0ZWY1NWM5ZWVlNjc1MTUwYjMzMmUyMTgxZjJhMzIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImZhYmU1MjYxNzdkY2Q0NzZiZTk5NTAyMzNlYzU2ZjkxMjJhOWIwODNlNTg5YzkyNjRhZGQzMDJkNDc2OGMwNjAyMGNmNTNlNzcwOGJjNzI4NTgyMzYwY2JmMDZhMThkZTM4ZTNkYTI2NDJkZDY3NTFhYTY4NmRiZjExNzM0YmQ3NWE0MjI1NzFjOWYyNDIwOTE1ZDdkNzlkOWVmZWE4NzBlNzJkMjYyZCI6ImJhNTg1ODM0MGU2YTgyYjJlY2ZlMTE5MDIxNWJkOGRhOTk1ZWU4ZWY1NzJlZWQ4YiI6IiI6IiI6IjEwMjYwZGZjMmYyMzIyZjUzMDE5MmU5NmEyMzk2Njk0ZGVhZDYyZjliMjA2MTM3MTA4NjY2Y2QxOTk5MzkxODQ1MDNkYTc1NTk4ZjU0YTg5ZGZmODg1YTk4NTYxNDBiNTY2ODczNDdjMmMwNjZhMTU5M2JmZTAyYjhiZDJjZDkzZTkzOWM0MjRiMzM2ODNhMTM2NzhiYTVmMzRkZjNmMmY1ZjUwYjJhNzA4ZDFkNWEwNDY4M2RiMDBhNjA3ZTJmODBlNWZlYjIwMDg2ZTNkNjQyOTRlOTczMmIwNzc2YzUxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiJiN2M5YTFkMjIxZmUxMDU1MmJiMGI3OTllMThkMTJjZmZkMWY3NmQ2YTFlNmRjNzlhMzY1ODRhYzdlMTNjMzU1YjkzMjNkMGVmMmY5N2ZjMmQ4YTI2ZTZjMzcyMDlhNDg1OTYzNzg4YWVhYjA4NGU5MjNhMzc5NGM2MzcxM2MyZWUyODhiYTNhOTlmMmQ0MDdhZGZjMWI4N2JhNjRmY2M1YTdmOThlNGUiOiJlNTYzZjhjODMxODg2MmM3MTE3YWY4OTQ2ODIzZTg1NzBlYmM2NGIzZGUxYjI5M2UiOiIiOiIiOiIxMDBjNDYwYzEyZTVhYjEyYTcyYmQ0MzUxZjdiNjA4ZjU1NzgwNjBiMjYyZjIxZDczNWZlNzlkMTNjOTQyMDM1YTc2ZjAwMWFkZmQzOWZlOTNjYWEyMmI2Mjc0YmVjMjgyZTY0MDQ2OWQzZjQ1NGQxMDg5OTFhMWI3M2Q4YWNiM2QzOTI3MzJmYzI0Y2FmYjE1ZmJlMjQ4NDQxNDYyYmIyYzEyNzg4ODM2MTBiYTI4NDg2ZWY4MmVjMmZmM2QyMGViOTYwMTg2NmM3ZGM0ZWFmNDRjZGQ3M2U1YjVhYzE0ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNzhlNWQ0ODE4OTY0ZDc0ODI4MmZhOGRkMzg2ZWE5YzkyMGM0ZmM1ZGRiOWQyMjA0YTNmNjI4NTA4MmI4MDY1ZGQzOTQ0Y2UxOTM3MjJlOTczZjgzMDA3ODNlMzc5OTFlNmM0YTYyODZhMWEwZmUzNzAzZGQ3OGFlOTUxYzg4YTBjZTQ3YjFhMjNkOTFlMDkyNjM1ODIyMTcxMzY3MGE3ODczMmQ1NDcwIjoiZmEwNTg1ODZkMzVmMGQ3NGQyYzQ3M2UwMDVlN2Y4ZGRjMzNhMWY2ZDViYzc5ZDc1IjoiIjoiIjoiNmI2MDNiMDk4Y2E3NGI3ZmNmM2M4ZjliNDJkZGU1YjNiNTFlODRjYWI0ZjY3ZjRkODdiYzY1NzVhZDRmYTNmMWUwZWUyNzA4NWY4OGUyYTVlY2Y0ZjU3ZjliYTkyNjM4ZTUyOTQxNTM1ODA2ZDJjZDFiNWFlYjViN2M4MWIzZDQ0ZDQxY2Y1YjgwNzNiNjQ2YTljYzFiMGE5ZjdlMTgzYjA4MmU5ZjIyNzBhY2Q5Mjg2MjNlOGE0NmI0NjI1N2UxYjgyN2U4Yjg4YjU1Yzg4YTNhM2EwNjdjZmNiOWIyYjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6IjUwMjQxNzM5ZTNmMDhjOTEwYmFlYTdmOWJhNDgxNTExYjZlZTVkNjliYjFhMmRkMzRmMzk4N2EyMzFjYzI1ZjM5YTFhOTY2MzkwZTM5MWEzM2RjMjEyODEzNzI1ODllMmE2NjdjZGJiZTQyNjc3MTBkNTI0NGZkMzQyYzk1OWI3MjcyYjM5ZTVjZGY2NzcwMWQ0NzY2NWI2MTc4MjU0MWU5NGFhMjI0ZiI6IjZhN2QyZjJkY2ZjYWU4YTI4NDgwMmM5N2Q3NzkxN2U4N2M2Y2Y4NDE3YzJiMTZiZCI6IiI6IiI6IjQ0MDJhZmVlMTIwNDhjMWM2YTQ0NjI0ZDJkZjAyNjc5ODkzMGVjNzMyODg0ODk5ZmZkMjBkMTdmMWM4ZDdjMjIxY2Y1ZWRhYzg2NzlhMjFlZTExYjE3N2VjZmQ2MTkyN2Q0Y2NiYjE3NWVlNmI0OWNjNmYzNzE0NTA5MDRjMjY2NmFhZjJlNmNiMzZjZDU1Y2FlM2FmNzcyYmViODA5NTVjZjY3YjRlOGJlMWZjZTExMjUwYTM5NjkzZWNiN2Y4YWMwNWFhMjNiOTQ5YWM3NGJjOWE2NzA2MGNkNjBjYzc3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYzMwMDVjZGM1YzViN2IyNWVkNzhjOTY4NGYzZmFmNjI3OGY5YTljNWE5ZmIyMDIwMTRhMjk4ODJlNTBiMjFlNTZlYzhiNzk0N2ZlODcxZGFlYzI2MjZmMzIzNzIxMjNmNDRhODcyMWZmNDMzOWUwYTIwZjk3OGVhMjc2MDllYjQ5NWMyMzQyZTliYTcxOWJiZDJiNDRmZjUwM2RiMjMyMmFkYTFjOTgyIjoiYzQ1MDYxMDk5MzdlMGY5MzUyZmM4ODFiMDM5NmIwYTEwMzYyNmExNWFkZGZlNTI1IjoiNmVlNDljNzZkMTM4ZWFhM2ZjMTBjZjQxMWUwYjhhZDU0ODhkNzdmNzRmYWFjZjEzIjoiODgyNTEyMmI1MDZkZDZmM2E1ODgxMWZlNmM5YTdlOTI3MWE2ZTY4ZGNkZDU5MGUyIjoiZTgxODg4N2NhMWM4NDcxN2UyNzdiYWYwMDkxM2Q2NWVkNThhOGY5MGI4NzI4MDgwYTAzMDQzYmIyYWI1M2Y1NWZhNjA1YmEwY2ZhYjI5YjRjYjY5NGY2YWFlNjU5NGRlZGNiZTZmNzRlMWY3NTczYzI5NDRmMzcwM2I4OWE1Mjc4OWIwMTcwMDc3ZWE4ZTY2ZDgyOTliYTVjYzEzOTk0M2FiOTYyNTQwNjVhMjdhYmNhMjA5OGE4NTE2MmZiMDFkMjk0ZDg2NzFiMDAyMDZiN2Y3ODQzMTkzODRlMDFiM2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI5YmYyYWIxOWFhN2U5ZmZjMzQ2MTUyMmYzY2Y4NWIzMjkyYjU0YmQzZTEwOTlhNDJkZDZmNTM0OWQxNjlkNTlhMTUyYjJkY2U2NzU4NzRiNjY1ZmNmZjgwMjI2MGVhODRiMzU4ZjZmY2Y4MDExYjUxMTgzNGU4NDQ3YTczYzFmNjc1Yjc1OThkODM2ZGM5ZmJmNDBmMWRkMGY0ODFmNDdmOTVmM2VmNGQiOiIzOGQ3YTIxMDljNmZhZDkyMDVhYmMyMmI5ZmY3MDViN2Y2NzFjNGJkZTViNjYyZDQiOiJiNDZlOTI4Y2I1OWVhYzBjYmVkNjU2NDU3NjdlOTZmZDgyNGZhOTVjYjk2YTFjZDciOiI1MzJjOGQzNzQ4MjA1Y2ZhYTgyNmZiYTdmMjQwZTk5MjZjZDM4MTFkYThmZDFhNWEiOiJiYzM2NzgzOWQxNTEwMzE2YWMzYmExN2ZiN2JmNjMzYTZlYjRiNjFkYzBiMDNjZjFjY2E1NjRkYjgyNDhjZWQwYjQ3Y2NiMzZlNzMwYzAyMzdiMDgxMmFmMzAzNjFiNWRjZTY2MjYzNmIyM2Y4N2Q2YWNlODJjZDNlMzRkNDVhMTEzM2IzNWZmOWI4YmRlOGZiMjlmZTgyMjk4ODIwYzBjODdmMGUzMDg4N2RkYjE1Yzk2NDRiZmIxMjU3OGYwODc4YTcxMDc3MWFkMjJmZTE2OTM1YzY2NjgxMzc4ZjVmOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImEzYmZiZWQ1NTljMzk2YjgwN2ZmYTgwNDA5ZmM0ZTJjMjNiYTk1MmY2NGE0MWMwN2QzYWY1ZTViNzhkOGVmODgxNzFiZDUwMjJkM2UwMmVmZWZhNjQ0ZjRmZGRiZTIwN2U1OTM5NzYwNWEwNDA4YjAyMDFmNmE4ODJkZWY2NGQ5NzNjMDcxNDU1NWQyYzdlMGE2ZmRkZjQ5NTU4ZmQxMzI4MDc0Y2E3OSI6IjRjNjNiZWY3OWY3MWZhODIxNjg5Mjg2MTljZDA5YjAwM2FlYjJiYTJiMDQxNTBkMiI6ImM4NWJiMzY4YTgyZDU3YzcwY2Q1YWQ2MzI3MTg3Yzg1NTBmN2MxMDM4MGIyZjAzMCI6IjVkNDY3ZTljMDZlZTA1OGNhMDY2ZGFkZDZmNmVjNmIwZGE1OWVjYmFhNGRkZDEyZSI6IjFjZTMxMWM5MTljNjdlMTUxYjUxY2UzMDYwMzg0Y2E5NWMwNzFhMjk1ZjAxZTU0MzQ5YWJhYTJkYThlZjQ5N2VhMTM2NDQ1NDEzM2QyMGY1N2RhMjg5ODViZmM2ZDFkMmY1OGY4NGQxNDRjODVkYmUzYzlmZDVlODk1OGNlMDZmMmY1YWQ1YWY3ZTE2YmY5MGRkYjRhMWUyOTQ3Zjc4MDA4NDY3ZmNjMzhiNWEwODJlYjE2MTJkNjhlMzZlM2MwYWJmYmZiM2EzMjFlZWYzNzU0YWMxNmM0MWY5NmJkNjM1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiMWIyYzI0MTllODUzODY3MTYxMzViM2MxNDJkNzQ5ZjFmNWJjMjNlZGJmOGMwYTFjNTNiNzJmNDc0NDg0YzU0NTc2MWIyMWFlZmYwNWNkZDM1NjIxZDEwNGVlMzkzZTc5MTczN2M0OGM1YTZlNmIyNWI1OGM1YzViZTI4ZWNmMTdjNDEwYzljOWMzYzNhYTJiNjM4NWY2Njc1OWYzMWI2MWY5ZmUwMjg2IjoiYjY5MDExZjQ0NmU1MDg4MGExNWJiMGRkMDAyMjlmNzY1YmY3N2IyYTQwMDQwMTA5IjoiNjdlYjYzYTE2OGFhZDg3MTJhMGU3ZTBmMTYyYWY3YWM3ODkzZTkwMmYxYWE3MmNkIjoiMjNiYjc1MmU2MjMyMTQ0NjMwZTNkM2E2ZGFhYTFlNThhNWNhMzE1ZjIxZmUxZDhiIjoiY2Q4ZTZjNmI4YTFmN2Y5OGY1ZDc5NjAyM2ZkZDRmMWRhMmQ3MmVlZGI5NmE4ZTg1Y2FjNjYxZGEyNGRkMGE3ODEwZmEwNGJlMDQ5MWM2OWRiNzYxNzcxMjU4MmI0M2VjNGJmMTEyZDllMjkzMjI4OGYyNWI2NGZiN2EyYTA5YWM4NzQ3YjhmNzFjZTc1ZTNjODBiODU0MzM2YTA0NTdiODAxM2VjNmRjMTI2OGI0YzdlOGY3ZDM0MjJhNGE1ZDQzMmY4ZDk3MDVkNmEyNzNhMDliOWY5MjczZjQ5MjhjNGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiI2MmQwNTllM2VjYjY5NTE2N2U5M2IzY2ZkNzdmOTZlNjgxOTg1YWI1ZDY4ZjE1NDczYTg5ZjljYmM0MDEyZTFjMDkwYTVhOWU2NWY3MzhiZTkzOGY0NGZkNmNiMTU3ZmQ5YjczN2Q5Mzg5ZTRlNTZiNjkwM2Q0ZDAxNWY5ZDgwZDk2MzM2NzMwZmRmNTc3ODcyOTZkNDQ3ZWE5MWRlN2U2ODZjN2E4MWUiOiJkOGYxMjFiMmJiZGI4NTMwYzYzMTVjNjNlMGE1MmUzODNjMTYzYzAzM2QzYjA4NTQiOiI4MzBlMmNhYjExMzMxYjc2MWFlZDU1ZGI2MTY4MWZmZmFkM2E2MWExYTA2YWRmZWMiOiJjNzc4M2Q3MzU3ZmYzMGU4OGNmZGJjOTA1NjlkYWYwM2QzZmVjOGNhZjg5NjE5ZmYiOiJlNDRjOWIzNWQzYjg0N2E5Mjg3NDgwOTRiYTY3NTRkMWM1ZGUzY2JlM2Q5MGQ0ZTJiZDBjMGYxOWRjNWFlZDcyMjhjNTQxMDQ0YjJiMTRkN2U2N2RjYzE0OGFiMDRhYmZmN2MyMmE4ZjFmZGJlYzRkNjhhZDI0YTdjNGIwZjBlNTA3YmQ3ZjJiNDg0NTU5MzM2M2RhNDg0YjQ4MTkwNmZiNzIwNzg0NDU5NzIzOGI5ZDQwYzE0MjM3MDA0ZTI3NTU3MmFhYzZhNmQ4NGQxNTFmYTU4YWJjMDk4N2U1NGUxOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImZjZjM4ODdiNDUwNWY3YTEyNzNhZDViMzJlMDY0ZmY1MTY4MmJjYTIzZWQ5NzRjYTk4MTg3MWE1YjdmNjNlNWNlZWU1ODEzMWY5YTAxZmE3YzM3YWIxNDE1MGM5MzIzYTAzZjY5NGU0NjM0OTZjNDE1OWViOGU1ZDNlYmM2MmY0MTI2NGJlYjkzMDk4YTQyYTNkZDQwNmI5ODNlMWZiMDQwZDEwOGY5MyI6IjliM2U5N2VlZDA3NzE1NWNmMTgxODI5MjMzODY4ZDI3ZWI3NzNjMzk4NTc1ZGZiMiI6Ijc1YTc1YTE1YzYyMmU2OWViYTY5OGEwNjRiMGI0MWM4YmM4MGVmODAzZGYwZjI5ZSI6IjdiNmEyMGEyMjJhODFkZmE2ZmQxNjRkZWY4MTZjMmI2NzA4YmQ0Yzc2MWIyYmI4ZiI6IjBiM2Q1MDFmNzI4ZDJmMWQ4YjBkN2RmZmRhMDE2MDE1N2IzMGQwZDk3OTMyMzE1Zjc3MDIyZDFhNmZiMzBkOWEwZWU0MzgzZjJmNjMzNzdhYzZlNTdiMTZiMGM3NDgwYTZmNWRkMTJlZDNlYzBiYzZmMTA0YTI2Yzg2NTkyZGFhM2Y2OGE0OTk1NzA3MDMzMDZlMmMyNDQ4ZTc4NGI2N2NkNmVmZGI0YWU2NGEyZThmZmE1OTI5ZTc0Yzk1YjY2M2M5YjdmZTg5MTYzM2YwN2Q3YjUwZjVmMTZlOWZlNTY3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiN2E2YTA3NzRmMmNiNWRkY2U2YjUyNDI3ODJmZDNkN2I1YzdjN2UzMWNiNWZlOTUzNjdjMDZmMjlhNTQ4OGZhMzdmZWIzNGQ2ODljNjQ2Y2RiMTYyZTI1OGFkNjM2YTAzMGZmNzRmNmE3ZmY4NzY0MTdmYjA4ZjVjNWRlY2RjYzk4NjkyNTM4YmViZjk5NThjNjI3YWQ4Mjg3NjMzZjk4YzU4N2NkYWVjIjoiZmIxNmFlYTcyOTY3YzQzYjg4MDNiY2RkM2U3OTQ5MTFmNmQ1M2YyY2I3OTQ2Y2VlIjoiNjdkODk5NDczOTYzMjJjYTI0M2UyYzU5MWEzYWRjOGZkOWYxZWY0NDg0MTRmY2E4IjoiYTBkNTY4ZjRmY2U4NjJlNWUxYjIyYWNjYTI5ZTYwZDdiYzZjZGNmNmNjMjc3Nzk0IjoiNzU4YjQ2ODViMGRiMTA5M2VlYmRlMDdiYTExMDg1YTlkY2FiNjRjOGQ1YWRhY2RhMDcwZmQyYjI5MmJlYzQ5MjQwZjI1ZTE1OGZjOTZjYjFkMGVjYzllYmNjY2MzNjBiOTgxZDE0MGUzY2RiYTU0ZmM2OTczMTMwMTQ0NTBhOWFmMjlkOWQ1NWRjYmM1YmI5YTM4ZTRmMTBjNmEzZTQxODc0ZDVjNjY4OGYyMmQwYzU3MTQzMDEwODNjYmJkMDAxNDg4MGFmMGY3ZDA4OGRhYmViNGU4NGE2NGYyNmQyYjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjI0OiIxOWJiYmJmY2I3NTVjZDlkYzAwMGFiZmMwMzM0M2VmNjQxOTMxNDFjM2QzZjQzMTIwZjU1Njc0NjE2ZTNkOTZiNjA4NmFkZjQ3YzkwNjk4MTkyM2M5OGVmN2RkMGZiYjJmN2FmMGVjYmJkMmRlODQ4ZjJiMjVjYmE4NjUxYjdlM2FlYWEwYzU5YjYwNWU2ZDQ3MTBhMDE0MDY1NjVlYTMwZDBjNGY2OGQiOiJlNzdjY2U5ZDI2ZDI4M2JiNWQ2ZTgzMDBhZDBmNjlkZjcyMzMyNGQyMzkyOGM2ZjciOiIwNTg2Yzc2MDUxNDYyZDA0ODMwNzEyMTM4MDQzODVkMDFhMDdiY2IyN2RiMDVlMDYiOiIxYzkzNjNkMGIzZTlmNDJiNmM3MjJiOGQ2MmY5YzYzMzA2NjU4NzU3N2ZlNzY2ZTMiOiI2ZDQ1ODA3OTI2NGQ1ZjM5NDBkMDk4YWFlMDkyNjkwYjdkMDRjZDQ2ZDZkNWRkZTc1MzA2M2I3MTk0MTE4YWI2N2QzODQ4NDU5MTU2YjhmMDIxNmQ4NWI1YzU4M2ExYmZjMDAwZTY4MTExYmU0NTk3NDMxNzVmZDExNDI1M2NjMjRkYjcyZWNjOTc4ZmY4NjIwMzAxZWNiZjE4ZjQyZmM0Njk3ZDkxMTUwNjQ5YTgyNTRhOTg1MGQ1YzI4ZjljNGUxODdlNDA5ZTQ5NmUyYTY1OWIyZTc5YzA2MDc0YzVjOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yMjQsIDE5MiwgMTkyKSAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyMjQ6ImMyYjU3N2JmZDgwMmI4ZjU5OWNhMTRiZGQ1ZmU1MDAzZWUyOGFlNjljYTVjMjQ2ZGY0ZjYyZDllMjFhNzc5MzI4MWM0OGY3M2ZmZWExNWYzYzNkNDQ0YmE0ODM2N2ZkZTA0Y2RmNmQ2MjQ5OGI4YWZiMjQ5NjZhODY2MjQ2MTAxNTEzNWNiNTUwMzRhNjM1NzFhMDMyZDNjZDJjMWU2Y2Y0YTY4NTVlZiI6ImYwZGUyOWQ0NTMwYjRhZjc1YjhkZWZlOWIzYjI0ZGNiN2NlMGFkZDRhZWQ2ZjcyZCI6IjkwYWMwNTcwM2E4ZTBjNjA1N2RkMmQ4YjFhNmYxNmYwMDU5ZTdjNzA2Nzk5MTlkZiI6IjE2OTM1ZjcwMGRlOWZlNTI5YTJiYmU4MTFkY2NhZDQzMGUyN2RiYzYwNTQ5YzNlNSI6IjU2OTg4ZjkzMjhhOTEzMTRlNGIzYWUwMjdiYzZmNDNhMDFmZTQ3MTYxNWYzYTMxOWFmZDliYjYzZjU1YjEzZTY4MWFjMGFlODMwZDRkMzA1Nzg4MmZlMjQ3Y2E0ZGVjYmIyNmFmODExMjgyZjU5ZWU4OWVhMzg2NDJlNGZmYWQ5YmRmYWU0NGJjZGJjM2EyODliZjQzMWUwYmZjNjgxNDhjMTJjZWQxODUzZTY5OGU3NGY3NGUyNGFhNDM0OTM3MzkwZmQ0MWNiNGU3OGY4MjNhMjYyOTAwZjJmNDRjMWZhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTIyNCwgMTkyLCAxOTIpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYjVjNGFjYzYzYWU1YzY4Y2E0MDRiZGVkMmQzNmEzOTFlOGIyZTllZjNiMzJlYjU5OGFhOTRmZDZiNWVkZTZjM2Q5YzMzZWM3N2ExOTVhYmI2ZjhjYmNhZmI2YzQ5MmExZDc4ZjA0NDM5YmRjNDQyMTY4ZDFlY2NjNzgzZDUzYTkyZTE2YjkwY2NiZGIwMjg0YjM4M2NiOTZhZjA0ZTgxNzI4ZDFjZGEwIjoiYjNlNmRmNWU5YWUxMGM2M2RhNDI2OWRlMTcwNTUwYjkyZGRlN2M2ZTMzYWYyMjhlIjoiYzk3ODdiNjQxYjVjODgxZGFlNTNhNjllMmIzNTE0Y2UyZWE4MWU1ODc5NzY1YmQxIjoiZTRhYmVkY2ZjNGNjNjlkYTQ1NDY3YmYyYmZiMDNkODIzYWJjMTlhNzQ2ZTNjNTgyIjoiZTE0ZjQ2ZGNhYjBiYTM5OTY1ZjE3MGYwMWEwNzMwODA5MGIwNTExMjc2ODVhZGE2NjAxMTEyYWEyMzYwOTNmN2E3NjA1MzBmODU2NjE3ZDllMDI3YzgyNzllZjMzZDlmYmM0YjYyNGFlMjZhMjc3YjllNjA3N2FjNzFlMmQyZjEwMWI4NGViZWQwMDdkZGVkZGI0Mjg2YWE0NzI5Y2IzYjI4Nzk4Mzg3Yjc1N2Q4ZTk5YTdiNmQyNjMxNjAxZmU3YWI0Y2FhZDc5ODNkZWRlNTliOTRmNGM5MjBlZjFiMjkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNzMwMmVhNDBlMjE0MzA4MTM2Yjg0MjdlNjAxYWQ2MTEzMmQxOTVmODcwZjJhODYxYzdiOGNlMWY2ODZiZjMyNWExNTVkMGFhZTEyMTE0MDFiYjg0NDg5M2RiYTI5MDkwNjBjNzZjZjljZGE3NTdkOWUyY2IyNGY1NjAyZmVkZjZhNzQxMmY0OTQ5N2M4Mjg2NmE4YzliNTZlMmJiYWY5MTJmNzYwMjU1IjoiNThlZmFhNzdjOWJmNDQ2Y2U4ZDNmM2NlNzNiN2QxZjAxNGJkZWZmZWEyYTJmZGRlIjoiNjhmOWVhYjE4OTMxODZkN2U1Y2YzYThjMzdiZjFjMjI5MzQ0YWJkY2VlY2Q5ZGU1IjoiYTBkM2JmMWRlNjMyZmIxOWNhNTMyNmQ5MzZmNzlhYWZlNTlhMGU4MDliMTNmMTBjIjoiZjJjNmE3MTdhYjEwYTljYzg5ZjZkM2EwN2JmNjA3N2ZhMzNjMmU1ZDY3NDc1ZWJjZGQxYjg5NWZkMDA2Nzk0MWVkM2ZkOGYyNTEzNTI0MDNjMjY4MGRmMjMxOWE4ODJmMzlhOTFmOGNjYjdkZjJjMDZhMTMwMzdmMDU3OTYyZTIzYjhlYTA2NTRlZjliZmMxOWI2ZWM5ODJlNTM5ZWE2YWZjZDExNDVjZWU1ODJkMjdiNzA4NjkxMzU0YjRjMzk3YTUxZDAwNGM2MTY4N2MxYzljOTQ4NTc2MDA5MDAyZWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNDhjZTMzNGZjZGVhZTYwM2M1NGZjMjI4NDYxZTcxNzM2ODFhOGU4Mzg3ZTBjMDQ4YzJhY2ZkZDZhNzhjOTU1ZGViN2RjMjViZWE0ZTk5MjRjNGEyYWUyMmQ5ZmI2YjIyNzQ1MmFkZGQwYjZlZGE3NzY5ZjljZWFhZjJjYTM0NTY4YjNjMTk4ZWJkY2Y1ZjZlZDExZjg2MzA5N2JkNTZmNDJkNjQ4ODYyIjoiNmJmNGMxNzNkMjY0ZGNlMDNlNDc1ZmIzYmRlOWZjYTI0NzQ4Nzc2MjdiZmIwYzVkIjoiMmE3MjhmNDYxY2UxMDY3ZGQzODg5NjAwMjcyNGI0OTY3YzFhOWNmZWNlY2QzNDM3IjoiMmI4NjJjZDdhOTRjMTc3NmIyNjAyMmMyN2MwZTRmMmQxOTljY2I3ODJjYWFlNmRkIjoiMDdmODAzMjZlYTc4MWJkOTVlZmU3Mjk4NjdkNmMzOTQ2NTIxM2JiNjk4YjVlNDg2ZTZjNWYyN2QzZmFjNGZkYTNjZmI3YzgzMWZlNjI5MTA2MmQ0ZGIyYWZmNTk3ODFlZmI0ZjRjZjQyODIzNmFhZDZhNTUxMTFiOTY5ODg1YTZiODUxZDU0NjIyNzhkMDg2MzkwOWEwNzc5NmU1ZTBlODQ0OGZjMGQ2NzRhNDQwOGNkOWU5MWU5OGUzYWRjZWMyMDY0YWQzN2RjYzU2NmZhYTgwMTQ5NTE5ZjVlYTI2MWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYjIzYzc0OGE5YzlkMjA2ZWQ0Y2U2YjhiYWNiNmY3ZTE3Y2FjZjU2NDllYThkMWUxMTQ0YTk2ZTk3N2E0Y2IyMmMwZjM3MTM5YzNlZWRiY2M4YjkwMjRjNmYyMTQxMmYxNjAwZmNkZTE0ODhmOTU3NDQ0NDZkZjdiNmUyMWE4NTgyMjRiOTI5NGE3NTgyOWEwMTQ2OTdjYzRiMzYzYzNhZDBlMTUyY2E2IjoiMzI1YmRiZDhjMTRiNzY2ZDRhN2ZmMGUxNDEyODU4NWIyMWFmNzZkZTdjYTMwZmYxIjoiMmUwMDJhNDA2YmI4MDkwZWFlNmM5NTA5NDRhNGQ2NzY4Yzg5ZDQzY2MwZDhiZDE3IjoiNDgyODYyMmZmNTZkMDg2N2JiYWQwM2JhYzUxYjhjOTM5YTVkZmEzM2EzNjJiMTI5IjoiNThjZWJkZjQ2NzZhMjFkZWQ1ZWJhNGRkMTk0NTJmNWRlYzkwOWM1ODk3NTE4NzllYTQyNDlhNGM5ZmVmODM0ZDg1ZGNmYzk1YWRhODJmN2ZiYTE0NzY0NTE3NzQwMzYyNDZkN2E0OTZkNGQ0MjdmMzc2NDdlYmMxMGZjMmUxMTI1YjBiNzFkYTFmYTVmMTQ3OWM1NjgxZTlkN2FjYzliODhiNTI3MzkwNzM0ZDk0M2JmZjZhNzZjNGIyMmJiNGY2YWMzMzFmNzcxMGI5NWY2ODA2ZmEzNWEyOWEyZmEzNWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiNjA2ZjM4OGU4YWUzNWZhZjk3OTQzNDY1NjE0NDM3MDk5MWU4OWI3NDU3Y2E1YjU1ZDViZjJiNDhmZThjYjY0ZjU0OWY0OGE4MTJlZGJiYjRjZmY4OTVlZmIyMWM5MGViMjZjMWRiMjM5ZWQ3MmRhNDM1MDRhMWUwOWM1NmZlMTQ0ZjJkMDkyNDJmMjY3MGRiZTI1NjE0NTZkOTM4MzUyMTI1YjE5MTMxIjoiNWUwMzlmMzhkNmY5YTljNGVjYzY3MTU4ZjQwZDNjOGRlNjE4MDhmZDc0NzZmYmY3IjoiMjFjN2Q5NzZkYTcxYmNkZTUxYTNiNGJjMWI5YTc5Y2M2YzRjYTUxZWM5OTJlNDc5IjoiYmFjMWM1OTA0ODE2YzMwNDBlYjUzMjYyMmYxMjdhYzNlMjhjZDc4YmE2ODQwNGE5IjoiNWY5NTFkZDc3NGJjMWEwODE4YjI0OWZmYzUxMzQ4YmYxZjM2YWE0YjlkNmEzMzQ4ZDM2ZGY4NGI1ZDNlODI0YWRjZGY4Yjg3ZmZlY2ZlYzEzZmUzNmNhMzU0NjI1YWU4ZGI4YTY5NzIyMjU0YzNmNmU3MDI3Yjg2NmM1MjlmOWJlZDI1MzYwZTBjZWU3Y2U0MWY5OTZkNTBkMjI0YTA4ZTk2NWUwZTVkZDY3YTc3MTQyZTJhM2RlMGQ1NTliOWRhZTg5MTlhZDAzODdiYTVmZGVmNjk5ZTQyMDE2ZDcyOTEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjI0LCAxOTIsIDE5MikgIzE0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTIyNDoiYmUxNmNhNTI1NTFhNmEwNjU2YzQwNTM5ZTMxNTVlZWJiYzQxNmNiZmUyMTIxMDFmOGVkYzJmNzExODQ3MjkwN2FlOWIyYjk1NzRhYmU4MTI1NzUzMzExNTQ3MjYxMGFiNDAxZDFjZTFmODk5ODg4NGFmNDNmYTU3NzZhNTlhZTM4Yzg4NjMxYTA2NmZhODVkMjRkZmM5YjI1NDdjYWFlNTk4Y2QwZmE3IjoiZWQwMDBhZDJlNDc5NTEzODYxMDE0ZThmZjQ1YTQ4MWE0OTRhZjMxMmQyZGQ1NTYzIjoiZmViMjk1Yzc0OTc1ZjFlMWM3Mzg5ODhmYzcwYjlkMjYwM2M3ZGE5MzgzMjE1NGExIjoiNzY0NzA1NjgxYjc3ODE1NzNhZjgxMWZhNzc1MWRiYzI3ZDY2N2FmN2ExZTU5ZGNlIjoiYmE0YTA1ODNkOGQ2YzViNDIxNmEwODc1Y2ZhZDU5NDQ4NTg1OGRjN2Y5ZWYyNjVkNGVkMGMwZjBmYmZjYWFmNWFlMzE4ZGYyZDdmYzUzMDMwMTgxM2Q5ZjQ5ODI2MDMwNjI1ZjdlYTAyZDA2MzBiMzU3M2M0ODZiMWZhMGVmNDI2OWNiZmI2ZmI4NjY3NWMxMWZiN2MwNTcwY2Y3ZmY0ZmM3YWZmZGIwMDYyNWFjNDUzYzIzYzIyOWE0ZWE1ZjU0MGM2NmYwMzFhYjM0NjJmN2QxMjY1OWVlYzk5MDUwMWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6Ijk5NjllNTRiNDcwM2ZmMzE3ODViODc5YTdlNWMwZWFlMGQzZTMwOTU1OWU5ZmU5NmIwNjc2ZDQ5ZDU5MWVhNGQwN2QyMGQ0NmQwNjQ3NTdkMzAyM2NhYzIzNzYxMjdhYmM2MGYyOTk5MTAwZjczOGMxMGY3NDc5MjY3NmEzZmM0YTI2MmQxMzcyMTc5ODA0NmUyOWEyOTUxODE1NjlmNTRjMTFkNDUyNGM5MDcxYmQzMDk2MDE1ZmNmN2JjMjRhNjA3ZjIyZmEwNjVjOTM3NjU4YTJhNzdhODY5OTA4OWY0IjoiIjoiIjoiIjoiYWJjMDE1ODU2MDk0ODAzYTkzOGRmZmQyMGRhOTQ4NDM4NzBlZjkzNWI4MmNmZWMxNzcwNmI4ZjU1MWI4Mzg1MDQ0MjM1ZGQ0NGI1OTlmOTRiMzliZTc4ZGQ0NzZlMGNmMTEzMDljOTk1YTczMzRlMGE3OGIzN2JjOTU4NjIzNTA4NmZhM2I2MzdiYTkxY2Y4ZmI2NWVmYTIyYTU4OWMxMzc1MzFhYTdiMmQ0ZTI2MDdhYWMyNzI5MmIwMWM2OThlNmUwMWFlNjc5ZWI4N2MwMWE4OWM3NDIyZDQzNzJkNmQ3NTRhYmFiYjRiZjg5NmZjYjFjZDA5ZDY5MmQwMjgzZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMzcxZDJkM2E1MGQ4ZmVmNDY1YjAyZDU3ZjBmMTAyZTgyMGM2MjRiMGUxMTcwM2JiODFiYWRmOGIwY2ExODQxNTk0YjBiZDE2YzFmYzBlNWUxMjM1ZGZkNDE0MDgxMTY0YzU0ZmZkMDU2YzljZGY2ODgyODRmNjE1Y2ZiNDgxNGNmMjhhYzZkYWMwNTc1NmUwN2U2YmM5ZjU2MDMzNjY2YWUzNTgxOWFlMzU5ZDUzYWFkMTRhZGM5MTk5ZWExNTRlNDVlZTJiMDY0OTU1YThmMzM0YjlmNjJjZWEyM2QwYjAiOiIiOiIiOiIiOiJiNDc0ZGRjNjZlNGNhYzJmZGJhMTk1Y2I5YzVlZTUyMWY0YTNlYmMyNGUzNzIyZGYyODE3NzRiN2M5YWNmYTg3YmQ1Yjg1YzFlNGU1NTllMjg1OWYyMzgyZWNjM2E4MjBkNzZjYWNkZjEwYWQ1NTk2OTFiNzA1OWI0ZTdmM2Q5YTQ0NTNmZmEyNDE2MjdhM2EyNThiMzQzOWFiN2Y1OTJlOTU3NTFjODI2YjZmODljOTJkMWY4NWZjODU1ZDIzMTA0NWM0MDU5NDFiOWE4YjUxMDFmNzZlNmFmZWQ5YzIwMzI3MTJlYjVjNjBjMTZhN2VjZmMyNmJhMGQ0N2FkZjA0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI2MGU1Y2MzYjI2MGEwZmRiOWU5OTRiYjdjN2I3ZmMzMmVmMDExNzgxM2EzM2I0ZjZhZjEzZWQ4MWE2MWVkYzNjNzIwOWJlYjkzMzY4NTVmZTIwN2ZjZmI3NzM1Njg5NGI0ZmJhMGI3YzNhOTNjZjZjZGZkYWZkYjRiNTZjZjA5MzhmMmNjMThlZDU0YTAyYTM1NTEyNDdlZTEwZTYwNmIwYWFhOGQzMGNiZTBiZGQzNzgxYTFiMjM4ZTE5Y2JkODZhMmRiZGNhYTlmOTRjM2QzOWY5ZGViOGM0YTY4MDFlNyI6IiI6IiI6IiI6IjYyOGFkMjBiYWQ4OGU1YjBlZTMwMTA3NjQwMjQ4YTgxZjdjMWVmNzdmNzU3YTQwZTUzOTI3ZDNiMTBhZGM1YjczNGQzNzlkNzFhMjhiM2ZiYzA3ODdkNjA1NGNmYTkyNmE1YTc0YjQ2NGI4MThmOGQxODU0MzA3NzNlN2FiMDU1Zjk2NDdlZWMwMWE3MWRjZjY4MGFiZjc1ODkzMjllMTI0OGFkOWRmMjA1ZDEwY2VjY2QxYmRmZTRjOWIzZjZkN2I4MDRjNTExNGMxNDA2ZGI4M2M5MjFjODI4ZGYzNmY1NzU1ZTk4OTUyMDI3NDY2OWY3ZjA2ZjU1NTBjOTdkNGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjViOTMyMDc0OGIxYzRjNDQ2MjRiMjY1MDRlOWU5NzY1YTEzNmY5NjVjNWE4ZDc4NzU4NTM5MTc4MmM3NDMyZTMzZTVkOTdhNGMwNTM5NGQ1NzA0MDJiOTA4ZjU0YjgwY2FmZTliZTdlYmE2YzRjNDQyNGZmNTNhZGNhNTBiNTIyYTBlYzFiNTFlZmVhMzViZjQ3NGZjNmEwZDZhYTY3ZDQ0NTgyYzAxZjI4N2Y4YThhOWNhZWI1NzFlMjZmODYxMDA5OTBlNTYzMzEzOWI1NmY0YzczM2NkNWFkMDhjNGRmIjoiIjoiIjoiIjoiNzA4ODMzMDBlZjU3OGY3OTZkOGY4NWEzMGNkOGI5ZTRlMmMyOWY4NGI3YjEyNzgzNjQ1MDU3MTQwOGM5MmI1YTFiNWJiMDQwZjgzYmNlZDUwOGYyNmQ3MDY2ZWUwYjZlNjM2NGVlYjFjNjM5YTUyOTIwNTBmNzU1ZmM3OGU4MjhjMDgwNTRiMTRlM2E5OTkzYzI2ODU3OTFlMmViMWRiZjI1OGNiNzYyZWNkZTFhYTJlZDQxZmMwMDRhYzk4OWUwZmMyNmUyNDVlYzg3YTk2MDA0YzViMjhjNDVkOGQ5ZTA4MjliZGI2OTYxMzdmOWM5NDRmNTM4YzI4YmUzNGIwNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMzVhMTdkMTI1MTYyOGY4MmRhOGI0YjM1Yjk3OTc4M2Y1MGU3NmIyY2Q3N2UwM2FiMmY2NGQyOWQyNmIyMmQ4MmE3Yjg5Y2M4YmE4NWM3MGUxMGQ0MmFkYzgwZGEwMTRhMTFjYmFjNTM0MmQ0NjYzNGRjYmIzM2JhZWEyNzdhNjdhZmVjMjNiM2Y1MDg3NWU0Yjk2NWIzNTY1ZGU2NmUzNjAyNWUwZGIyNTJiMWIzMWU0NTY4M2E5Njc2YjU1ZjQ2MmFiYmY2ODg3ZmNkNzcwNTk5YjEyM2YxMDllNWM5ZmQiOiIiOiIiOiIiOiI4NmUyYmIwZjVkZGQ5Mzg5Nzg2OTJlZjkzZDE5ZDM0ODY1YTA0NDg0Y2Y4MmFhYWNmNDU0NjM3OGUyMTk4YTJkODA1MGRkZjUzYWI2MThmYjk4ZjliYzU5YTYxNGUzZDYwYmUwNmE1NGVjY2M3ZTNlNTRiY2U3YWZhZjk3OWE2ZmY0ZDdmYTE5YTlkNzY2OTY1NmZhMjFmYmVmYTlhNzBiMTM0YzAxODQ0YzBiODVhODZiOWY5OGExNDI1NTE1OGFlOGY1ODIyZWU1MDZmODhlODFmMDk3NjA4MTBiMTlmNDEyOWQ2YjQ3YTEwZDg4MzdkNjMzNjcxNTU4ZWMzNzcxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIzZDZjNDBjY2VlYWNhMDYzM2MyZGM3MWI3MTM1YmU5ZDY0ZDA3YWE4MGU2ZjNhODZmNDM3NzU4NTVmMTRkM2E0ZjViNzAyZWM2MjJlMGM4NGViM2ZkNDY2MmFlMTUwZWMzNjRkMzQzZmQ4MDY4Yjg3YThiMjllOWRhN2YxODFiOTFhYTAwMjYzOTk4MGRhNTQ4OTcyMDA2ODgxNmRmMTQ0Y2UxYzAxZWEzODkxNWI2MjA3Mzc0Y2FlNjI2ZjcxOTlhNDJkNDdjOTIzMjA5NGQxNmEwNGMzNjhmMGMxMWQzMCI6IiI6IiI6IiI6Ijc1ZWI3YTc0MGI2Mjg0MzU4ZjFiMmY3YzhjMTg3NWMwMjdlZWIwNWUwMzUwMTc5ZjdiZmRiYTIzZGM4MjMyODVjYmMzM2NmYTZjYTIyYzhlNzBiYmEwMGU5MDNkM2Y3MWNhNjZhMWQ3MDgxZjc0MjU3NDYxM2MyZTg4NTRhMGQwZTU5Y2JhYzE3MzU2YjFhYmI2NWI1MzNiZjU2M2Q4MTY5NzAwZTE5NmQ3ZDFlMjViZThlNGVkNDUwMjI5OGIyMWRiYThlZjgyMmM1NjU0NDNjNDZhOGVjMDhiZjNjYmUxMWFjNTFlYjc2NWU1M2QyYjAzNWE4YWZhMjllZDExNDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjYxNzRlYTEyNTEwMWUzNDg1MGUxMWRjYmIwZTQ4ZGZlZDc4MzRlZmQ0NWRjOWQxOTZhNDJlOWJiZWJjOWYwMDg1MzQ2NzU3MGJhZGYzOWFjMzM2NjA4NDY4MjQ5MTQ3OWVjNWU4MGFmNmQ1ZTczZTBjZWE0M2QxY2UxNWMyNzdjY2Y1YmVlMjU0YzJkNGU1NzYyM2ExNzY1M2Q0OGJkODJkODAxYjBjYWIyZGYyN2Y4MDRlMjNlNGRjMWRhZTBiN2ViNjE2MDI2NGM4Y2E0NzEyZDc3NTk3MGE4NzU2YTBlIjoiIjoiIjoiIjoiYTlkMjY5YzM3NzFlMWZkM2NmMmE1ZjQ0NzBjN2U2NTYwYzRkYjAwOGNjZTBmNGMwZDFlZDkzOTE1NzU2N2NiZmNjMjM1M2MxOWU1YzFiNTM1YzAyZDU2MDFiNDVlYTJhMWQ4MDQ1YjQyZGY2NTA4YjczODlmZGYzNTBjMTA3ZGFlMDVkYTRlNmUxYzA3OGEyNmFlYzNkMGVlNTIyNWE2ODBjMTVjNTYzZTM3MjdkMzUyYmMyNTdkM2E0ZGVmZGE0OGU2ZGZkZDVjNzAwMTQzOWNjNTg3ZmYwMzNjNWFmZDNiMWZiN2M2MThiMjExMzczNmEzNjIwNThhZGYxMjk2OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNmE3ZGYxZWE4YjZkOTJmYjRmMWI2NmI2MDE0Yzk3NDY2YTliOWVkZmM2OGRlNjQ3YThhNGMzNmRjYjBmNGQ3NzZiYjM1M2JiZDVjMThkZGM1YWEyNzRmZjI5YWJlY2M5NDZlZWFlN2ViN2U5MzE2NzNjMWJhODhlYzk5ZDMxMDUwNTlkZDFmOWE3YmE4MTQ1ZTBiYzg2NDU5ZTUyNTAyOGRjZTYyNTY0YTdiYmI1NDc5MzIwZDc1Y2FmZTQwYjRjN2EwZGFhYTJiZWQ1YTQ4YTBlYWVhYWE4ZDZjNzZkMWIiOiIiOiIiOiIiOiIzMmU2Njg3MmZmYmM2ZDkzZGE3ZjkyM2Y4MjU3NGUzMjczYzgxYTI4OTI1NzI0NmQzZTY5Yjk0MzY1MTE1ZTJiOTFkZGNiMDc3MDM0OTE0ZjBiZjNiNTg3MWI2MmFiNzczZGVjZDAwMTIxYzg3NDM5YWQ1MzE4YWRlYWMzMWFjMDI0YjQ2ZTdiNDljZWU1ZmUwZjFkYWU5M2E0YjkzZDQyNDVjMDE2YWU2YTdiYTdlOWU5ODU3YTM4YjRjMjIwYzNhMzA5MDNlYWJhYTMyMTBkOTNhMDhmNzAzNjI2ZWFkMDc4ZDU5YjI4YTQyZDc2MDgxZTliNjdkN2FiNjhiMzY2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIwYTkwNTYzMTk3MzUxOTFkNGVhYjNiNzBmNTMzZTU5YjBhNWE3MGFlZWI1YzAwY2RlYWE1ZGQyNmJhN2FmMDlmMmUyNTliZDRlMDRjYzlmNWJhOGI1YzhkZWRmN2IxNTVhMWFkODExMmQ2YjFkYWVhZDM2Y2RkMzM3MjY2ZmFiNjVjODU4MjRmODc4MjE5ZTYxMWQ0OGM0ZjczYWM3YzBiOTZlNDA3NjJjODdkMWE3OGU2M2UzYjI2NmY1ZmQ3YjljZTg2MjUyYjliZjQ2YjA4NTUyMzg2MDJjMDk4MjA0ZSI6IiI6IiI6IiI6IjBlYTE2NjJmMGI5NWI2YzFjYmViODJmN2I3NTIzZWJhM2Y1Njk1NDRiMDg0MWY3OGIxYzA1ODA5ZmRmZmI3NzZlYWE2ZDFjNzdhOGI2MGRkYzY4MGMxOGVhZjkwOTYwMTNkMmY0YmJkNDE2MTdlM2M0ODJkMjlhY2E4ZDg0ODIyYzA3YjU1ODI1ZTQ2YTI2YWJlN2MzOWZlMTdkMjIyOGUzOTljYjg4ZTM2ZTQzNTQzOGNhOTE5YjM3YTBmODY4ZmI1MjQzYWZkYzJjY2NlYTNiMDZmZDMxM2FiYTY3ZGM2ODgyMDM4NzhkMmJlMGY0Zjg4NjRkODMxNjIyYjZmNGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjllZTNmY2E3NzZmNGU3MzM2ZjUzMzZlNDI2ZDgyMDg4NDhjODU0YzdiMGIyNzFkNmVjODRkZDNlODZhODZmYWI0MmMwODI1Y2YyYmU3NjlmN2UzMTkyNGIzNGEzYTc2MGM5NGQwZGI3MTRiMmEwOWNjYmUyNmIyYWNjODA3MWYwODMzMzJjM2VmNTA4MDJiMmFlZTFlZWYxOTViNzRlOWViYTUyZmE0OTkwMWQ2NzU4NWE3NjZhOTQ2NWQzZGI4NDNkM2YwYTRhM2E5ZDUzNWRkOTc2ZGQ5OGFlZGQ5ZGY4IjoiIjoiIjoiIjoiMWMxMTUxZTk3NmJkYjk0N2JkZjdiZWQxMDhjNzQyNDI4YWFiMmU2ZjVhYzdjYmNjYTZmY2YyNDU5ZDI0MTBiZjZhZDg5NjM2YjAyMzM3YTQ1M2EyMWJmMWFhNzJmMzkzZGVhZGM5MjVmOWE0ZGM3ZmY5NzhiYTgzN2M1OGVhMzAyNjdjZmU2MWRiY2E0YTM2NmI5YWI5OTA0Y2E2MjIzZjc2ZDJkMzNkOGQzZGViOTU5YzZjNTdiYWJhMzY4ZTllNjdmMmQ5ZDRkMzc1OGQwNzJkZjg2OGQyYWViZWJlZGZjYTNiZmNjMDE4Y2RiMTliYTM3YjU5M2EwYWU4MGM2ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjEwMDZlM2IxNjFmZGQxZjMwNDQyMzQ2ZmM5MWIzMzcxYTI5NTMxYmM5OTY0Zjg0ZDNmZWZkMGVhM2EzNDBlZmMwNjA5Njk3NGJiZDYwMGNiNjQ0ZGI2NmI3MzhmZmNlYzA1Njk2YTk4MWU1MGM3ZjY4NjRhODI3OWU4Mzk4NWRkZDQyYTljNzRhZmZkZmRjODQ1MmFjMjU1NzVkZWYzYWYzMjUwZGE5NWYwMTgyMzMxZGNjN2QyZDUwZmY3MWRjZGUwMGY5MmI2ODc0ZWU5MDJlNjEzNzc5ZGUwNzg5ZGRlIjoiIjoiIjoiIjoiM2JlZTlmZTZkMDg4OTlmYzdlYjZlMWYwOTc4YzY4ZjVkYzlkY2M3NmZiZmFlYTdhNjUyZDBhZDIyNjMyMzk2ZDZlMDY1ZmVmMTRhYWZhYzdkM2FmYjA2NmVhNzQzZjBjZmJhODA0Y2M5Njg2NDA1YWM5NjZiYTdhMjkxZjVkYmQ1NGRkZTVkNmEzMzAzODNiMjM1NTMxOWUzZWY0MDU2Yjg1NjM4NmNmODM3OGE1ZTExZDlkMzZiMDIwN2UyY2Q0MTRmOWFkZTJhZjA1N2M1M2M4YzMxZTcyZmU3NjVmMDU4MmRhNWE2ODVlYjQyYTBmZDk2OWRiZGUyNjQyYzRmNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjgzZDA1NDZkMjBmZTE4MTg0YzVlZTc5YmVhNmY1ODE4ODgxZDE1OGRjYzc3ODBjMDM1MGJhYWQ3NjYyZDNiMDU3OGJmZTU1OTBiOTkyM2MzNTAwY2NmOTZhNzk3ZDlmYjI0NmYzMWU2YjI0NTRjNmE0NDMyMzNjZTAyNjRmY2MwZmZkNDFmMGEzYmRjY2RkOTQxN2QxNjE0YWVlNTk2ODgwNTcxZWE1ZjJlNjJmZDZjNmU1NTU2MTMwMjQyNjJhMjZhMTY5ZjE3MzgwYTE5ZjJlNTAyMGFkMzM1OWU0ODQyIjoiIjoiIjoiIjoiMGU0NTNhM2UwYTRkNThmNDE4MDE4ZjA5YzFiN2VlNWUzZGY4MWQzMDllNTRiNzc1NjdiMTgwNDM3YzI1OGI4NzAwNjljMDI1N2JiOGRiMzMyZTlkNzkwZWQzMjU2MzMyNjA5NjdlODk4ZTc5MzNkMzg4MzJmZTdhNjc3Yzk0ODQ5OTI5MTg0MjFjNzVkNzA3MmI5YzA0MTYyYjIwMjg3MjIwMGUyOGRiM2MwM2QxNTdjOGFkYjA3N2M0YzhhNjYxYzUzNGZmNWMxYmRjY2U4MGVmMDQ3ZWIxOTdiMGJmMzkzOWRhYThiZTMxZDYxNTZlOWQ1NzNjY2E0YjExMDA4ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImZiMDliMDIwMTFiNTRmOWZhMmEzMDc4MzE0MWE1MjBlMTFmZTNlMmRkNTViMjU3OTljMTliZTlmYTdiZjNjMjBlOGZiYjhmZTllNDMwMTQ1MTZkMjVjNjkzMDg2NWMyNzI3ODI3Y2MwMTQwNmFhYTE4MjdiZjJkOTI3MmViZTE4YTQ0Y2E3NGQ2M2IzYjc4ZmQ2N2U2MWQ1ZDk2ZGI1MDlhNzdjODU3YWUwNGUwNmJkY2ViYjdhYTQ5MWQxYjlhOTlhMGVjYjhjN2RjM2Q3YmM2OTc3NTcyMWI3NTI4OWFhIjoiIjoiIjoiIjoiZWY4NzgzZjAwMTU2YzQ5Nzc5NmQ3ODdjMDE4YzljMDFjZmVmOTM1N2NmZjJiYThmMDQ3MTA5YTBkMTdmNzE5YWM0Njk1MmE3MTQ3ZTdmZThkNjBmZGViZTJjNzQ0ZTUwNTIyZTA5YWEwZDE4ZGUyNTg0NTk4NDBhZTMyMGQ0OGNiNzFiYTExNDMyMTY5ZGRjZGQxNWNlMDgxZjNlZTk3MTljYWU0YmE2MDFiZGExY2JiYWY5ZWJlODI1NTliNjkxMDcxMTFjOTZlNDY4ZDIzZTAyNjhlNTNjOTQzMGNlYmU3Y2IwMmI1NDdkNjkxM2I3NmU0YzE2NDNiMmEyMDQ1YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjA3ZGU5ZTVlNTczNjhlNzgzMzE3NzA2NmM4MDQ1NzVkOTg0YmJmOWNhNGJmMDNlYTMxMThkY2UwNjMwMjdiMmExZGExZTkzMGIzNTY3MjJlYTBjMGYwMmUwOWRiNmU5MmY0MDdmZDYwNmZiZGRiY2IzZTU3NGYwZWY1NDhjMTJiOTc0NjBlMjA3OWEwMDRjMWI1ZjQ2MTJjZWQ5ZjUwMzRkOGVkOTJkNWU5OGViMTc2ZGIyZWJhODk4OTE1ZjMxYWY3Y2QwNzYzZTdkYTFlNjRiYTEzMmEwOGRlYjgyODY0IjoiIjoiIjoiIjoiZTc4MGFhNjc0NGY1OTJkYTNmZWY2OTBlNzhmZThjNGZkNDBjMzY0Y2Y1ZjFhOGJlMzRmMjNmNzMyNGFiMzg3YjA5YWEzYjVjMTI2YmJiNWZiMjVmZGQyNmQ0ZTUzNmYyZWFjYThmMGVhOGM5M2FjODYzYzFjNWQ4MDMxNDQ4MGZkOWUyMzgyZWUxZDliMTc4MjhiN2YzNzE2ZWU2NjliOWYzNjk2NTUwOTFmMGVlMjMxNjM5OTZjN2M4MTVjM2Y1ZTcwNWM5ZTQ4YzI1ZmVjMDVhNDg1ZWIzOWYzODE0MDY1MjgzZGQxZDBjMzdjZGI3NzEzYWNmMjRlMzQ4NGFmYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjU5NTcwNjllYjE0M2MxNTI2ODI2YzE1MzU4ZTBlOTQ5MDk2MTA4ZmM2ZTA5NTM3Y2YzZDY0MjZlMTU1YjQxNzhiZmY4YThiN2M1N2MzY2JmOGY5Yzc4YjUyZDc2NTA5YzFlYzA4OWUwODNiMjljMGFkYmQ3ZDcwM2IzZTBiZWViMjExOGEwNTI1NDhmYjFlMzA0NTViMDgwYzExMWNiZGE2YjQ5MzBlOGZiN2RhZjQzMTA2MDc3ODQ0NWJhZDdkOWMzZjc4ZGJmODExZTZjOWM1ODQ5Mzg0NGQ5MGU3M2M3IjoiIjoiIjoiIjoiMmY1YjdlMTcyYzVlMjkxZjY4ZDlmNTlmMGQxNGVjNTE2ZTdlODBjMmVlZTM2ZDFhYTA3MzRlM2Y4MTlhOTc2Yzc0YTU2NWFkMDMzMzRmYmYxYzYwZGFjYjFhNmQxNTBjZTEzMTZiNWMyNTZjYTg1YzgwZmNlZTZjZTBjNzAwNGEwYTBjYThiZTVkY2UxOWEzYjY4ZjkyZjNmNmI3ZjhlOWM0YTMxNzdiOTM1MjliMzJiNzhhMmQwY2ExOGIyN2ZlODBiNDI1NDZkMTIxMTU4N2FjZWUyYmQ1YTYzZjNhZTY2YjVlNWQ2NmE1MjE1NGI1MmJlYTJiNzFjYjA1YjllYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIyY2FkODhiMmI2YTA2ZTcwM2RlNDYxODVjY2IyZGRjZjVlMGVlMDMwOTk1ZWJkZjk1Y2M0ZmJjMzg0NDFmMTdmMzIzMTA3NzBlMDQxNzJjMGNmOTFmNjU5MGNjZTQ0YTQ0NDhiZmJjNWNlOWUzYjlkYTNlOTY0MmRhZWNkOTk0ZGZlMzczZTc1MjUzZThlYjU4NTE0MTIyNGVjYTdhZDdiYWZiNTdmNjk3OTljMGI4OTJiMzAxNTk5MGUxMzM2OThkNTQzYWE4NzgyOWFjZTg2OGU0YTVlOTUyNWQ2MjM1NyI6IiI6ImVmNmRhNWU2NTMwZTBkNjIxNzQ5YWIxOTJlMDYzMjdlOTk1YzNhYzBjMzk2M2FiOGM4Y2QyZGYyODM5YWI1ZGYiOiI0NDI3OGIzMWVkODUzZjBhNTEwYmQxNDY1MGFjNGI0OTcxZDhiNDI2Nzk5YTQzNTExZDAxNmJlNjhkZWRiYjhkIjoiNGM3ZGZiZTUwOWRjNWEzYWMyNjk5ODcyM2M2YTQ0Y2FkMjBiMTk3ZmM4NjExN2M3NzhkMTU2OGFiODI4OTIzODYyODg1ZTk3MTk4Zjc3YTFjYjQ1MTEzZjVkNzg3MjZhMGYxMjBhZWM5NGFmYzQ1ZjU3YzhkY2MxY2IwOTJiMzQzNDgwMDEyODU4ZWY1YmM1NTlmNTcwMjM0NDIyMDkzMjZlYzRhNTRkOTFjYTNhNzdkZmRmOWU3NWYxMTdjZWY1MGU2ZmQyZGM5YWY2ZGRjZThlNjUxNWI0YTk3MzU3YTk3YjZjZDI3NGY2OGEwNDJmYTQxYmJkN2I3MjYxYjAzNCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJiOTFmZTllZmRkOWI3ZDIwYjZlY2UwMmZkYjc2MjRjZTQxYzgzYTRhMTI3ZjNlMmZhZTA1OTllYWI1MDY3MTBkMGM0Y2I0MDUyNmM2YmRmNTdmMmEzZGYyYjU0OTdiZGFlZjY3NTA5Y2E3N2RkZmI3MmQ4MTAxYTQ2MjgxNmE2OTViYjMzNzQ1YTczNDhlMjY0NmQ5MjZhMjE5ZDQ5NDQzOTc3NTUzNTNiYWI0YTZiMjkxNjA3MTc5ZDE2YjRhMjQ5YTM0NjZjYzMzYWIwNzk4NTE3ODcyYjI3OWZkMmNmZiI6IiI6IjE3YzE1NmNiY2M1MGQ2MDM3ZDQ1NzZhMzc1NzZjMTRhNjYxYjJlZGZiMDJlN2Q1NjZkOTkzYmM2NThkYTAzZjYiOiI3YzdiNGE0YjMyNWU2ZjY3MzRmNTIxNGNmOTk2ZjliZjFjOGM4MWQzOWI2MDZhNDRjNjAzYTJmYjEzMjAxOWI3IjoiOWNkYzYzOGExOTIzMjI2NjBjYzViOWQ3ZmIyYWIwMzFlMzhhMzZhODVhYTgxNGRhMWVhOWNjZmViODI2NDQ4MzlmZjZmZmFhYzg5OGI4MzAzNTNiM2QzNmQyNDlkNDQwNjIwYTY1MTA3NjU1ZWZjMDk1OWNhN2RhM2ZjZmI3N2JjNmUxMjg1MmZjMGNlMjM3MGQ4M2E3NTE0YjMxNDczY2UxM2NhZTcwMDFjOGEzZDNjMmFjNzc5Y2QxNjg3NzliNTgyNzNiYTUwZmMyN2E4YjA0NjU2MmQ1ZThkNmZlMmFhZmQzZDNmZWJkMThmYmNkY2Q2NmI1MDE2OTY2YTAzYyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJhNDYzNjdmMGNhMDM0YTg2NjA0MDAzZmFlZDJiYTUyNGI2YzBiYmE4NDE4ZmIxNThiYTEzYThmNzMwZDkxZWM0OWIzYTdlMzVjNjE5ZjBlMWFiZGE2ZDE0MGIwOGFmODVlM2NmZTQwMmI2MmEyZTg5M2ZlMDI0NGU4OGI5YTQ4OWExMDM1ZDI4Nzk0NzEzOWFmNzg3M2U1ZjdkMDQ4NWU4NzIzOGJiMTFkNGY2MzEwOTBjMzQzNjUyMjJlYjk1YmFmN2I4NjViZTVmNjQxMGVhMGFhMDQ4NGUzZGU1NTQ4MyI6IiI6ImFhMDIwYTFhYTkyZjhhNDI2YzVkMGQ0NDE5MWM2YjQ2ZjY4YzFhYmJkNWRjYmNmZjBkZjJjOGUwMjRhMzI4OGMiOiIzODk2NWFkNWYxNjNmNjYzYjNkOTBkNGY1YjY3ZWQyZjRkYjIyYzkwZTU4NzhiZGRjZDRmMjMwZGM3N2Y0YjBhIjoiNmM3ZWRmMzc1MjgxYjc1MTM4MzIxMWEzZTA5ZTQ2YzYxYTljNDI1ZmUzMjYwNDEwNjNmMGYwM2UxY2ZjMDFlOGE4MzBmOWM0YmY3NzM3N2M0YTk5NDZjNjFhOGI3Y2M2NjRiMjI5NzNjNTU2NDM3YzlmNTU1N2IxYTEyMjJjNDU3ODllYjcwMGUxMTg0ZDVkNmU1MmY1OTdiYTViMWRlYWUzZGQzY2IyZDgzMjVlZDViMzkyOTk0NmUzZmNmOWU0ZjE5OTExNWVhZmJhOWFiYzg3NTU4ZmNlY2M2MzcyM2NkOGNkYzhkZmJhNDhhM2M2NGU4YTcwOTk1YjBjN2VjZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIwOGI5ZGI4MmYxNzkwNTU4NzIzODNmNTgyMDNhYWI0YjliNzAxYzZkN2ExY2Q0MjhiYzE4NjBjYzcwZTQxMTFkZDVjZmY5NjI3MjViMjBkODEyMWZiNGY0ODRhODQ2YzhmY2FlOTM4NjgzY2MxNjAyYjY5MmFkODhiMmVkYjVlYzFjOGRkNDA4ZjRjMTBlZTc3YTQ2MGJiYzQwYzhlMzY1ZDViMGJhYjhiNmM4ZmIzZDZhZThmNjVkYzkxNzUwNjAwNTkyZDFmMGY5ZmY2NjFkMzk0MzYzMjkyNjNiOTIxMyI6IiI6Ijg4ZWJhYTI5NjU5OGRkNzFkMjJhZDVjZGJkMTY2MDNlMTk4MmQzYjAwMzkxZTBlODM4NjJkNzY1MTQ4MTczZGEiOiI0ZmU5NzUyYTVhODhlYzFlYmE1ZTdkODViMTkzOTEwZjE3MTdkMTY2ZWQxNmUxMjY3NmNmOWRkNDE3ZDk2ZjJiIjoiYjRiMDJiZTU1ZmFkOGRhZTIyNzE2Zjk1MDM4Y2NlMzRmNjU0YzNkY2VhYzU5YTM5ZWU4NWM1NWM2YTEwODY0ZTE5ZGZhNTcxMDIzMTEzOGVmZGZjZmE3MzY1MmU5OWZhM2ZlYmRlOGIwNmFkMDZhZjIzZGVkNDJkNzhiZDdlMDVmZmVkNmI0MDNkZjIzMjBkZTQxOWEwODA2NWRkMjU0ZTVjNjc2YzE2YWVjM2I4Mjc3NGYwMTQ4MTFjYjZmMzJmOTZiYjI0MGJjYTkxZmI5ZjA1YjU3Yzc3NmQ0NDc0ZDMwOWNiMDhhNzMwYzI2OTYyN2I2Mzg1ODgyMTY1N2U4YiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI3NmIwYmE1OTkyZGFhYjFhYTQwZWJlMzc3Y2EyZTBmNjQwN2ViMTcyOTk2MTE1MWQyMTZhOTk4OWI0OTczM2MyZjc4OTJlZWVlNjQzMzhkOGZmMTUxZGIyN2IyMGU2NjY4NDAxNWJiMWI0MzNhMDFmZDc1NzBlMjQzNGJmMzlkOTI0ZDE5MDk2MTk5ZTM2N2RjZGE4N2FmN2FjOGI5ZjJhMDY0ZThhN2JjMjkxYTkwNGZjNWE0MGNmZmIzMDYwMjBkNzE4ZGUxMWQzY2RjNTQ0MjcyNGY0NTM4ZDgzNWY3NiI6IiI6ImY4YjYzZGE5OWEzNWNkNjMzMzRjN2YwZjEwMWE4MGIxMDE5OTBmNzY0NmQzMWViNThiZDRjYWMyNTFmNDM0YzIiOiI0NmE0MTdmNDkzOGQ4ODQwNmQzYWM2NWRmZmZmZmY3ZTNjNDEwYjA5OTllOWM2ZGM3Nzg3YWM0NmEwYjFiZTc3IjoiZDU1N2IwMDY0YzZkOGZlYWRiMjNmOTc1MmNkYWY1ZTQ0M2EyOTViYTk3ZTVmZTNkYjhiZGMzYTUwMmIxMjM5NDk1MWU2OTQ5NzYzOGE3NThlNzMxNTMyM2M0ZDk0NDNlYzhmMTQ0ZjlkZmY0MjFiMGZlYWI4ZDU0MWZkYzNiNTk5M2RhZTZkYjRhNzMyZDU3M2QyN2Y0MzgzZjgyNTc4M2I4ZDBiOTM5NTE3MTliOTVkZGVmNzAzZjM2YzFkOTUwMzRiNGMwYjEyNjE1YWVkOTMxNDA2N2MzNWE1NWEwOTFmZGJjM2E0NTlhMjJhNzViNmQxNjE2ZTc5ZDU1MWIyYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJlODI5NjA0ODljMDE0NjgyNjNlOGZlNTlhYzM0MWFmMWNlZGM1NTk1ZWYxNjc3YzAwMTkwZjg3ZjEwNjc5Mjk1YjBkNjQyNzFlODYwZTVlMWJjMmI3YzI0YzIxMjdjOTQ1N2FiNmRiMjQ5NWQ0MjJkMjRmMzU2MGE5MDk1MTM2MjZjYzBlMGU4ZDc0MTcxY2E1MWQzZDFkMzE3NzdmY2QxYjc3MWY1YjE4NjUxNmQ0NWEyNzBhN2M1Yzk2ZjA5OGM1MDUxY2Q3OWZmYjA0Yzc5ODFjZGEzNmE2OGVlZjM0NyI6IiI6IjlkNTQ0NTMwZWUxMmU5Y2IwNjE3MmQ3OWFlMjkxOTMyZTE3YjI0MGY5Y2Q5MjY5OGI2YTJlYzA2MWZjMTMyY2YiOiJkZDFhZDE2YTFmOWRlY2MwY2I4NzVjZTM1YzdhZDFhMzEwNTgxODY3OWExMmIyMjE0OWI1YTdkZDBhMWI3ZDg3IjoiOWEwOGQ5NDFlOWExYmZkOWMzZTA1OWRkMDZjYWYwMDhjNjM2Y2EwOGJiMmUxMzZkMGJkZjE2MmM0MzMyMTgwNDUyMjRiZmQ4ZDc1YjgyNDEwMjVmOTNjNGE4MjAzYzZlYTFmY2U2M2MzN2JiMjA0NDRjNWQ0YTY4YjEzZWU2NjNiMjYyYzY4NTYzMGQyYTZjNDBlYzIyNDAyN2Q3NWJmZDNkYzczZTFkNTM4NDAwNzg5ZjIyMjFmZmUwZmYxYmZmOGY1MTRjMDIyOWU2ODQ0MjJkNzdiMmIwMjk4YzBiYThhMmFiMDI2MTBlODgwMjMyYmY1MTZmOGFiNTA3YzQ2MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJhMTk4MmM4ZWE2YWE3NWU1YzA0ODZiYjI2YWI4YzlkY2YzZDEzMDM0MzcyMjA3YmNmMTAzYWRjYTk4MmJkOTAyYjEzODhhZmQzNzQ1YTAwYmUxOWFiYmRlYjEyMjI1ZGIzNWFiNDE0NzFkOTNjMDJhYWEyNDE0MzU0NjI2MjQ2YjNlYTNkOTMyZGQ1MjJlNWZmMGZhODFjOWJiN2JiMWYzNzJkODUxYjU3MDQzNzg5YWJjMTgzN2QzM2Q1Mjc3OWI2MzhhYTJiZDE2OTNjYWE1MmVjN2IwODI0YWRiODQ3MCI6IiI6IjJkMDExM2M0ZjIyNWU0N2I1OTEwY2JkYTdkMjdkOThmZTJiY2MyM2Q3YmMyOTNkYTEwMjhlMjA4NDg4MDQzNTMiOiJmNmQ5MmZlMDYwM2UyNTQ4ZmMxM2E1NjBmNGIxMDA5YTJjZjYzZmY5MWM3NGIxN2NiNGYyNTY2MTExNzNlZjE3IjoiZDI2YjQ2OTkyMGVjMjZkNjg5MWQ1MjQzZDNjMTMxZjEyOTgzMjY5NWExMzAzODY1MTFmMDJhNjZlOTJkNTM4YmQxNjVkOWJjYjcwYmE1ZThkZjQ3OTU3NmI0MzQyYTI3ZjNjZTExMzU4NGUwMjYyZjhlZWM4MTRmMGM5N2Q0ODk4OGMzOWJhNTQ4ZTRkYTc4NjAxMTAzYWJmOWM2YTQ3ZmYzNzA1ZmNmYjdkMWExNTA1MzVkNGFmMmZhMjE5NTA5ZTk0YmQ4ZTc0ZjNhOTBmZDBmZmE2MzE1OWI0YjYyZWI1MzMxOTNmOWRmM2M4Njg2NGY5YjVmMDUyNDkxNzVhMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJmZWVjZmIzZWNiMWIxMzIyYjM0ZDkwZjI1ZmZmYTJmZjBjMmFmMDEwYTk0MmEwNDY3YzA0ZTkzMzg4MzJjM2MwZTVjNTg3NmRkZjBlM2RiZGMyZDYzNDE2ZmQ3N2RhZjYxNzBkNjdmZDZiN2ZmNjIxYjFlODQ0OTE0NzExODE3ZWNlOTNlNWVkZjQyOGE2ZTYzMjUxOTNkNDJiZDY3NjU5OGVmNDY3MmNmMWU0ZGU0YjU0ZGY2OGQwZmE4ZDI2ODg2ODgxMzE2MmZhNzEyZDI5NDQ5MWQzMzhiNjVmMjdmOCI6IiI6ImQxZTNkYTU5Njc0ZDBjZTMzY2MzZTZlNTYyOTJlZjQ3ZmMxYjNmNDk1ODcxZjVhNzRhOGMzZjYxZWRlYjU5M2UiOiI3NGQ0OTE2OTdkNzI2ODlhMTljNTg5ODI2MjFlNjhhMzM2YmE5ZjcxNDNjMTk5ZGFjYzNmMzc1MDhlZjVmM2E3IjoiNzhkZTg5NjMwMTk2MTFmZGUxNWVlMGM4YzdiOGEzNWMxNmE1ZWExZTg2ZmRiNDM1YzQyMjE4NGNmMGY3YmJjZTNkNmRkN2FhZTExYjYzOTdjYTIxM2MwYWNhNjMxODhkMzk4MmMyNDUxNDAxODQ1ZDAyZmEwODIyYWQyZjkxOTAwMjJmNmMwOTlkMTM3YzVhNDRkOWQ3NGE3N2M3NWJiYTIzNTBmMTI2OWI2YmY5MDUwNzczNmQ4NTc2YjUzZGZhMTRjY2Y3YzY4NWVhMGFjYzg0ODRkNmE1ZDMxMGIxNWJmMzk0MTY2NjE3ODQxNGFhZTNkNzZkNmQ1ZjRhZWE5YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIxZDZiZGVmMTU4MTE3MzFmNmUzMGQ2NmM3OTEwNDIyNGM1ZWQ5ZDQ1NWJmOWZhMmQzNDQyZThkNjEzOTVkNTNjYTZlM2Q1YjM4NjJmZDBkMGIyZWNmMzU3N2UyZGRkMTI0ZjdlMzNiZjExYTdlY2ViY2QyYjI2YTExN2MzODA1YmM5M2I5OGVlMGU3MGI4ZWQ1MWI5MjljZjc2ZjJmYTcyYjQzMzc1N2RhNDdiMWVjOTJjMTFmZDkxOTIxYjE3MWZmNTFhNDFhOTk2ODY2ZThjMjg3ZWExMzBmMDZjZDk1ZiI6IiI6ImYyNTM0N2Y4OGZiNDFkNjU2MDJiOTlhMzcwYmU3YzhjZTFkZDZhMjlhMGE3NDAxYjRhMzI3OWIzZTU2M2NmNGIiOiI0ZTVjODBiZDdmZmM5MzFmYjU3NjMyOTM1ZmFmZjJmMjhjNGY3NTMzNmZkMjhmMTRmN2ZjMjdhMTJjN2NiNDFiIjoiNTRhMjgwOTYyYWYxYTgzOWI0NzBiNDI0NTZhNDM4MWViOGNjMjZmMTYzMDNiYjk3YjZmNzA5ZjkxYTkxNGVkNzJhOGI4NWQxNmFkNGQyNmE5MDBjOGZlYzQxNDhjYzQyZjk0MTZkZDE5ZjMxZmQxYWZkNTI3ZjVmYjI2NmI2YWZmMTAwZjg5MGI1N2M4YTNmOTIyODQ2MmQ0ZGQ5MmRiZDVhZjJmOWRhZjA1ZTVlZTI4NDNlNTZmMGUxODBlYmE4YTJjYWJhYjM2ZjczOWE3ZmQzYzA0MjI4ZWMwMDdlZjQzZWJiYzI1ODQxYjczNzNmMmMwNmZkZmJjNjZmODMyMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIyOTRjNjQ1OTk1ODQyNWQzMDlkNGRmNjYxNzQxMGYzNGU5NmVmYmMxZTYwOTE3OGY0MTA1MDcxMTcxZDI3MWNiYjY5OGI3OWM3ZjgzODUxYWIwYTRlMjlhNzU2YjA1ODU4NGNkNWQ0NDZhMjVmNzc3NDllNDE1NDYyOGMzZDY5NjNjMzY5NTg1YTc3NjhiYWVjYTBmZTIxY2M0MGIwMGE4NzE0NGNiZGFlYmE4MTJiYjFkZDhhMThlNGQ3ZTUwZTgxMDg4NWFjNTIwZTQ0YzM5OGQxYjNjNDFmY2FmNmMzNiI6IiI6IjBlNDMzYjhhMzkyMGViZTAwNTNlMzg4ZDBmMjU4ODEyM2M2Y2U2NDQyODBkYmE3NzYzMmJlYThkZTFiNmZkOWQiOiI0MTFhMzk5MjFhZDg5MmRiN2QzOGY1MWM1MTE0ODI5NmNiZjUxMGE1OWZjZjRmZDI3ODVjMmFjZjMxMGZhZTZmIjoiMDRjNjRhM2M0ZWY4Y2QzYWEzMjI1OTZjZmUwOGUzNGI0MzViYjU1OTQzYzZiYTdhYmY3MmI1NDlkNGEwNTdlM2JmZWI1M2ZhNGUyYWRiZWU2M2M4ODY4NGJiZDViODRjNGMxMzU4YzljMGZmMGZmZWIxYzhmYzk3MmM0ZTc5NjQxYzlhNGVhMDkwMWQ5Yzg1ZmI5YWM1ZWViNWQ1ZGJkZDMyNDY0OWMwZGI1NDJlMDk0NmQ5NmNlYzhhOTkwMTQ3YmU4MGY0NjY4NWNmODI3OGI4Y2Y4OWM5MjU1YmFhNTY2NzQwYzRmZDEyZTZiYzE2M2JlNmU1MmFiNzc5OWMyYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMTk0MGMzMTYzN2RhMmExYTRhM2FkNjY4MjZlMDc0YTBkNWNlNjlkZGU1MGI3NWE1NWI1ZTA5ZGFmMjNjMDk3YmIzMWE0ZTlkMzYzZjNjNzE2Y2Q5ZTg5OWNkOThiYmRhZjY3ZTZmOTA5MDc3YzcwNTFiMDY3ZDlmMmE2ZWNhY2UzNmU1MDUzYjJlNjMyOWZmZDM2NGU1ODk0MDNhMGJlMWFmMmIyN2QyNThjOTBlMWNiMmQ4MjYxYmNjN2JkNWY5MTBmMTU4NTFhODc0NDJjYWZlODdhYTQyMDMxYmVmZDUiOiIiOiIwZTIxYjJlYWUwZDk0NmMxZGExNDE1M2Q5YTM5NDU4OTRmNDNhZTUzMzFhYjk1YTA3YTcyN2IwNWJmZmU5ZjM1IjoiNjk2NDZhYzc0OTE4NWRhMDA2Mzg2NTRjODEzZDQ1ZTBkY2M4NDIyMDI4NDVjYmIwYTgxNThiMjYwOTczMzE0NiI6ImY1ZGM5YTg4YmNiMTlmNzQxMDFmYjQ2MzA0YmZkNjZmZTBlMjQ1MzU3YjY1NmU3NTFhOWVkNTM1YmVkM2E1YjQ3ZjRmODRjMDEwNjg3NjNhM2ZlYWQyMmMyOWQ3ZGVmNWQxOGUzMjQ1M2Y4MDY0MjQxNzcwODJkMWQ2NWRiZTNlZTVkOTc2NWZkNTM2NGExY2Y1NWRjNjRlZTlmM2YzMTM2OTdjMjYyNTMyNzM3MzI5ODgwN2E2MGJiNDUzNmMzMDQwZTc2Yzk5OTVjZmM2ZWVmMjI1YTEyMmM5ODg0OTk4MGQ0MGVhMGY4NmExMjI3NTZkNDM5MDA5NmI0ZDhmYWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjgzYTQ0YzM4ZjY5OWE4ODNhOTFlY2JiZDlkYjk1MmE2MmI2NWNiZjc1ZTcyYTFhMjQ5NzgxMGE3M2VhNzQzYzRkMTVmZmNiYTA2Y2Q3YTMzMzhiMzI5NGFmYjUwNDYyYjFlYjRkZjIxZGJlNzEwN2E4YjRjNmE0MWI0MTk3N2YzOGMzM2IxYWRhODI5NTE3ZDA5MDJhM2JjMDgzNmJmODk5YzI1NzIzNGY3ZjYzMjE5YWNkY2RjZGZhNTEwZDI4NGU3MzgwMzQ4Mjk2ZWFhYjQwNzRjY2ZhOTAzN2U2YjY4IjoiIjoiM2Y2ZjhmNzdmMzA1MWM5NDVhZmFkOTk2OWFmNzY0ZmNmNGJhNWI1NjdjMGEwOTZiZWMzNmY3MTJmMDQwNTUzOSI6IjIxMGFiNzg1OWIxMzU0ZjUzZTE0M2U4YjA2YWZlODRiMTJmYzFiMTZhYTRlM2U4MThkYzU2MjkyNjU2ZWIzZjMiOiJhZGMwMDQzOTRhNWJmOThiZTFhYzQwMTIzYWIxZTQzMGJmOTMwNDZkZjg3ZDIwYjA0YzIzNWQxNjU0M2M5YTJiODBmOTlmODQxYTk0NmU5MWE0YzZmMTAxNDlmN2E3MDM5NjdkZTY1MWUzYWYyMDhkNjAwZWJjMmM2ZTJjMWZiYzg5NTc2MGRlNTM3YTRkYTI4NzBlMTI4ZmIxMGQ4ZmExZjA2ODcwZDc1OGI5ODA0YzQ5YzJhYjgxZjkwMTE4MDQyZjc4YTg5ODA5YjkyYzJhYmNlODdiMjMwNTg3NzM5YWNiZmZkMDgyYWFiYTQyMmM4OGU3Y2UxOTk2OTFkZDg3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMCwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI3YTQ1ZDA3YTJiZWMwNzhjMDYwMzFiNzllOTRiYTZiMzRlYTE1MjI1MDRmNjJkZjNjNzU0M2Q2YTkwMmEzNTJmYWVhNTI1MTU4NmE4YmRjNTYyYWViZmQ5ZjcxNzVhMDI1NDA2NTI1ZGFiMDIyMzUwZDg0NTJjZjNlMTg3ZTMwY2I1NDMyMGZlOWYxM2EzNTFlMDAzNzI3Mjc4ZmRkMTJjMmFjMWJmNTY1NTYzMTdhZDViZmZiM2MyZjg5MDY5YzdjNzQyYmU0NDJmNjQ5NzIzMDRhM2E5N2FkNDA0ODFjYiI6IiI6IjE2Mzg0ZjhjOWViNzQ5ZmI0OWZlZDRhNjY3MzM5ZjIyODQ2MzRhNWY3OTEzNjk3MzlkMDQwMWE4NGQ0MzUzNzMiOiIxYjgxZjBkMjFhM2RhNDYyZWMyZjgxZDBiZmRhMWZjMDE0MzY3M2I4MGJjN2VjZGJlNTI0Y2ViYTlhZTk2ZGRmIjoiYTM0NjIzZTAxYTE0Yjg3YzQwMGY2ODFhNmZiNGFlNjZiOTdhZmJmZTA0MDc1OGI5OWRjODA3ZmJhYzczZDIyYTVjYWRhZDI2MmYyM2VhNWQyN2Y3MjY5OTNjODIyMDkyMTEyNWNjNzhkMTdhOTkwMTQ1YmY2ODQ1Yzc3MTliY2JkZDE5NTM0OGM0MGRhOTZmY2Q2MGE1NGNlZTI1YWY4OWMzYjEzMTJkODg2MzUyMjNlYThjMjc1NjRlOTE4Mjg5ZmQwMTIwYjQzN2M0MmQ5OWEzNWYxOThkZTNlOWMwOTJjNDkzYTk3MWM4YWNlOGM0OGFiNjI1YTVhOTJkNmZkMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDAsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiNjQ2ZDFjMWU3YzM2M2M0Y2JhZTdlNmE0ZjYwNmM5NTgxMmE3ZTBmMmZiODZlMzNmMTc4ZjViNTAyYzY0NTdkM2I1NzY0NGIzYmMxYWI2Y2ViMDk1ODk4NzBjN2Q1NGNhMTlmZTc2M2I0ODEzMDhhNjQ2Njc5MTNjZmUyNTEwM2ZlNzM4ZmMwYTgwMDkyMGYwYWZlYzcwZWY4NmNiOGEwZWEyZDlkZmQzODk1Y2JmOTIxYzg3ZTY0OTA1ZjgxZWY2MWRjMjMxYjZjZDdhMDEzNTAwMzcyNjQ1MWNhYjk1ZjIiOiIiOiI3ODU2NmIyZmZkMzI1Mjc3MmUzYmJhNzFmMzQ0NTQ5N2EyMTUwYWZkNDhiYzEzMDI1MWJhZWI0MzMyZGE4YTI3IjoiODg4YjMzYzZhYmRjZDQ3NTU4NmUwMGVlZjE4NWE2OTcyNmViOWIwMjRiZTQ0N2U5Mjk4Yjk1M2ZkODAyMTkwNiI6ImU2NTlkNjBkMTdkYTE0MDQzY2I5MTk3MDliYmI1YjNjYzVhMjAzNTE3MzUzYzhiYWRjMDYzNGVmMmYyZWEyZGFiNmZiMmIzMjdlMjk2ZWQ2MzQxZGM0YmY0MzFjMGMxNGVjMDQxZGU1MDM5NWQyNWE0YTRjZDY0YTY0MjAxNTNhNTBhZjg4NmY0OGEyOTczNTIzYTRlYzViYWZmNDM1MjY1NTY5NTlhMzdmM2IyNDUyZDU3NTNmNGQyYTNjMDUwYjJlOGY5ZjZhYzI1Nzc5NTlmMzQ2YWIzNzQwNGQwMjljYTUxYTc4OWE1NTIxZWU2NjA4NDVmOTEzZDI0NTIwMzMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAwLCAyNTYpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImJkZTJkZTJiOGQzYzRiNWM0YWYyOTk4ZDcwZGE5YTIxMzQwYjk4Yzc2MzBkNjg3ZDY4NWE3MWVhZmNjZWM0NDZlMDE5NGQyNDVkMjgxMWE1NGVmNTIyZGNmZDk2YWJjYTJlY2VhNmQ3ODkyZGRkYWE0ZGNhY2Y3ZTVlZjNmYjM0NWMzM2IyM2EzZGU2ODdhYjU3OGFhYzhlNjc1NzU0N2ExYjNjMTI3YTYzM2U1ODkwM2U4MzY3YTgwNTg0MDAyMGQyY2UzZjZmMDM3Mjk5MWQ3YzdmMjM0YzNiMzExMThiIjoiIjoiZDkwM2EyMjcxZjFjZTI0ZjIwMjIyMTIwZjhmZWUzYjg3MDljZTRmYzdiYTg1Yjc3ZDZmZjA0OWU4MWQ3YTM3ZiI6IjAzYmZmZTM4ZWY4ODMzOTdjZmU1M2VkZjZjNzllNjg0OTNiN2E2MzdkMWNlZWVkOWQ1NjlhYzYxOTViOGU0ZGIiOiJjYzMxN2Y4MWMzYTZjYWI0MjkzM2QxNzMzY2ZjNDUwNGRjMGIyMzJkYzAwNTAyZDI5YjhlNmZlNzhhZTExZDFkMWFlNGExYzVjNmE3Zjk5NTQzYTg0NGVjNTQxM2I2ZGMzYzIyZTNiZjBjYmYxMmU3YjU3YTQ4MDE4Yzc1ZjZhYjI1ZmU3OGI3ODZkMmQwMzVkZTdhZGFhM2EzYjdjZjFjYTU2NGYzNDJmZmY0ZjllNmIzYzlkMmFmMzg0Y2I3MGY1YWJjZDI4Yzk5YTVkMTBmMTc2ZGQyZjcwMjU3NWJmYjgxYTk4NGRiMjUwNzQzNGI0YTNjOGMyODZlM2RmYzY4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImY3YjkwYzc5N2E0YTM3NmNkZDlmNWM0MzVmNTk4NWU3N2YzNmVjMWRmMTE0NWExMjA3MmNiYjJhMGRhMzc4ZmNkOTUyMDI5ODZkNDU4OTZlOWY0YTY1ZjJmMzUzZmEzNTEzMGFiNjRmNDFhNWQ0OWQ2YTI0MWUwMjYwYjRiYjhhNDZhMTZjNmFjOWUyMzRjODRiNWIyNmNkYjUxOGQ0NTlmNzY3MGU4MTdhYzA2MWFjNjA0MzliZTYwOTgyNDkyMDAwZGM1ZGE4YmM2NjM2YmRhYzhiMWNhYjAzMTk4ZGZkIjoiNjE1MzVjNWMwNDVlNzg0MjY3ZmQwZDg1ZjI4NjE3NzhmYTUzYzhlODU4NmFmNjdjZjVjOWYyMWEyOGViYjY1NiI6IiI6IiI6IjhkZjRlMzQ5ZjllYTQzY2M1MDllY2IyYjExMjQzNThjZGEyZGUxZjVjYzkzMTVlZGNhNjM2MTBhNDEzNDc4ZDY4YjhiYjQ5YzI4MTRjODJjZTU3MWY2ZTBhNjc4MGZhMjFjNGI1NzA2MTBlZTBjMDRkM2VkYjkyMTI0ZjU4MGY5NjJkNzQxMzMwMjAwYzE5ODg1Y2E3MTY1MDIyMjMyNDdiNzI4ZDY2ZmJiZWI3YzZjYzI1Y2ZlOTg2NmIxNDUwYjM0NjIyN2M3NjYzMDc0YzhiMTVkMTg5ZjFjNmVkYmExNzJhNTNjNzMzZDY3YzFjNjliZDdhY2E3ZTYyMDEzY2QiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMTM1NDk2ZmMxYjdkMjhmMzE4YzlhNzg5YjZiM2M4NzJhYzAwZDQ1OTM2MjUwNWFmYTVkYjk2Y2IzYzU4NDY4N2E1YWFiZjIwM2JmZTIzMGVkMWM3NDEwZjNmYzliMzY3ZTJiZGI3NDgwODA2ZjNlMTkzM2NhYzc5YTcyYjExZGFlMzJlZTE5MWE1MDIxOTU3MjAyOGFkZjI2MGQ3Y2Q0NThiZDQ2OWZjZmY1OTk1OTVjNjUxZGU3MTY4NWZmY2Y5NGFhYmVjNWFjYmJlZDM2NjFmZmE3NGQzYWNhNjc0NjAiOiI2NGI2ZmM2MGJjNjE3NjIzNmQzZjRhMGZlMWI0ZDUyMDllNzBkZDAzNTM2ZGJmY2VjZDU2ODBiY2I4MTVjOGFhIjoiIjoiIjoiMWY5ZWFmZTRkMjQ2Yjc0NzQxNGM2NTk5MDFlOTNiYmI4MzBjMGFiMGMxM2FlMmIzMzE0ZWViOTM3M2VlMGIyNmMyNjNhNTc1NDU5OWQ0NWM5ZmExZDQ0NTg3NmIyMDYxNDBlYTc4YTUzMmRmOWU2NjE3YWZiMTg4OWUyZTIzZGRjMWRhMTM5Nzg4YTViNjVlOTAxNDRlZWYxM2FiNWNkOTJjOTc5ZTdjZDdmOGNlZWE4MWY1Y2Q3MTE1NDk0NGNlODNiNjA1ZmI3ZDMwYjU1NzJjMzE0ZmZjZmU4MGI2YzAxMzBjNWI5YjJlOGYzZGZjYzJhMzBjMTExYjgwNWZmMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJkNzhlYWI1MzI5ZmUzOGEyNmNlMmU1NGVmY2Y4ZjBjMTVjZDc0NjJhNTg3ODUzN2ExZTM2MTVkMDk4YjE4Njk3NGY0ODAwMzE3MmM3MjA0ZmU2ZGQ3N2M4OWZhOTJmYmFkNGU4MTQxMmM4ZDE2N2JkZTM4NTdiOWUwNDViY2I1YzY2NmQ2NGFhOTkwYTdkOTJlNDZjYTUzM2I5M2RlNTQ0MjM4Yjc5YjZhOTU1MWVhN2RjNTJiZmExNTU3ZmQ5NzNiZjZlNTk0YWQ0YmMwZTYzYjY1MWQ1OTU1ZGEzN2Y2YSI6ImU5MzRiZWMxOGNmOGU5YjkyOTMwMjlkOWVkNjBlY2RlMWQ0NjYyMTQzOWMzMjIyMDNmN2MyMmM2YjJkNzc1NDQiOiIiOiIiOiIyODVkZjY5NzM2MWMyODQ3NTNjOTQ4NjUwODFjM2MyNWZmY2JjNzc3MDlmYzUxZjM3YTA5NjI0YmJhNjcxNDkxNTZhMDg3ZWZhOTJhZTcwOWVmZjFiZDUwYmVkNDY0ZjRmMzFjNGI2NmMxY2RiNzFhNTA2Nzc5YjUwNjQ1YzE2NWEwOTk3MThkNTk5ZmM5YTE2NmYzNDVhYmFmOGIwYjJmOWU3MDBjMjUzYTQ1NGNlYTQ5MjYyYTMzNGQ3OWEwMWMyMDhjYWFkNTA3MzY0NGIyNTdiMmIxNTc3ZGQ5NzM4NjJjNmZjN2ZjYzMzMjBlMjRlMWUzMTA2M2ZlNmU5NGJhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImZhZDZhMGZjZGRlZWZiMjYzYzI3NDMyZWNjNjQ3MGU0NGYyNmFlZmYyODQwZThkYjY4MmNhMTRhYjQ1YzMxY2M4OTQwMmE2OThmZmQzNmNhOGZmY2U5ODY1NjhmNzI4YWZjMDhiYzAwNzdjOTVjZTRjZjA4YmNjZjUwY2RhZmMxOTAwNGFiYzNjNWNlZDFjYzNlN2NlMmNmYzkzOGMxNjAwYTkzZmQ1MGZlZjEyNDVlN2I5Y2FlMjgzNGU3MTA0MzM1ZjhhZWFjMDgwZDRhNGZkM2UwYzBlZjBkNjdiNjkwIjoiMzUyMjcwYzg2N2MzNGIzZmIyOTdjYjJlNWQzYTgwN2IwODdjNzIwMDI2NTc2YWE0NGZhZDU3N2VjODIwMTVhOSI6IiI6IiI6IjM2MjI5NzdmOGFhMGEwY2E1ZjhlMTIzNWQwM2I3NmY5MmIyZjI2ZWIxNzJiODgzMjM1NThlOGYzYzc1NmM1MzljZTEwNjFkZTEyNzI0N2NhNzU1MzQwMmMzZDVjOTQzOWI0YzlhZmJiNGM0MTk4NjdiYWVlMDZlYWZkODU2YWY5ODQ3YTY5MjQ3ZGRmNjY0MGEwOWEzNjBjOTM1NzdiZmMzNTNjZGVjNzMxMmU1NDliYzc4NzNmNzc3OTZlMDYyYWQwNThlYzdmM2U1MmRkMWRkYWZiNGJiMTE4NmIwNWI1MzYwMjAwZTZlYTc4NGJlMjdiOGYyMDVkZTgwYmExNDUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiYmU5MGEwN2FlNjE2NTc0ZDM2ZjgzNjZkMzlkNmJmMTQwODYyNjQ2NmQ0MDk4MmQ5NzM4MGU0NDMzMWY5ZTE4ODVhMjdjYWIwOGM2YTg1OTU4OTRkZTIyYTkwOWRjMjQ3OWNmMTU5NzNhMGYwYjcxYzBiYTkxMTk1MWY5YjQ0NDA1MDgyNWE5NzZjMzkxZTYyMWM1OGZkNGI1OWE3YTIyYTdkZDY2ZDhmNTlhNjBjMDAxMGZhOGFhYWNjZTk5YmMyYWExZjM2NTY1M2RjMGNkNTdiNDg5ZWRjMjM0OTE3N2IiOiI5OWI4OGFjMTk1OGQ1ZDYyYWEzOWVjYThiOGY4ZTU5OGE1NWMwOGI0OWU4OTU3MzdkNzRiODc5MmNhMzQzYTM2IjoiIjoiIjoiZWU3NmM1YTZiNmI0ZWFmOWNlOGRjNGFjMGVlOTFjYWQxNDNmMDM2OWEyYmZkZjQwYjcwZmNmMTRlM2ViMjg4NTVlM2M1OWEwMWRkZWU2ODRiZjljZTQxNTJiZTVjNzBkMjkwYjhiNzgwNzg0ZWFkYjQ0ODU0YjAzY2QwYTMyZDBhYThiOGYwZGIxYmQ0NzUwMmQyYWE2MWE1NGUzZGU3ZmQ3YmRiNWM3NGM3MTVhZTJhYWRmZTMyOGI0ZDExMjhiYjE5Y2U3ZDgxNjZjNGMxNzE5Yzk4YjZiZmViMWNlMzEzMDU0ZDhmMWI2YTRjNWFmODQyY2YzY2JlYTE3YzcxMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIzMWM3YjhmMGFhZmE3MGI0YjY3MGYwNTZlMjRiZjE0MWYwYmQ2NjgzNDUzZDE3ZTliMDlhZGQzZDIzMWNlZTFjYWZlODE4ZGZkN2Q3MzQzZjhlYjFiNDEwMGQ4MGM0ZDljOGU3ZTRkNWFmY2QzYWI4Mjk2NGYxMjE4NDdkNDQ2NjQ3MWRmMzhiODQ5YzU5NjMwOTAwMTcxNTgwOTQ4ZjUzYzQxNDI1MDQ1ZGM0ZGIwNDkzNWFhNTI2NDg5MWFmMDMxYjA4Y2Q0ODY3MGIyYjE3MjA2OTJjYzZiZWQzZTdiMSI6Ijc2OWYyYjNlMzA0MDg4NTZmNDZmYzNhM2ZjZmUwNTI5NWQ4NzY0MTU1NTU5MDZlY2Y4NTNkNTliYWRkNDhlZWYiOiIiOiIiOiI5YjNkYzc2N2UxYmQ5ZGQ2NzAwM2VjOTljMzM0Yjk0ZGQ5N2M0OGNjY2JkYmZiMmVlZDRkZDViZGU5NmIxZTBlYTRjMjRjYjBlZGFkY2M1Mzg2ZjdiZWM1NGFjNWVmMTQ5Mzc0ZjYyMjVhYTdlNzg0NjZjMzRiMWVhMGIyODY0OTllNGUyYTI5NDM4MWU2ZTA2NWFiZWFiNjc1NTNjNGEyY2QwZmJkYTE5YzU5NDE1ZmVlNWNjMTI0OTY5Mjc2OGFlYmM4MGVjMzVjODMzMWY2OGYxYjcyNDU2MDJiM2ViZmYxZWFjYTJmZWQ1ODk4MjEzZmJlYzA5YWNkYjYwY2QxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjM4NDhiYWQyYjA2MzE0MTFmOTE2OGJmODE4YTJjM2NhYzEwYjZkODNhODJkNTgwMTEzNjc2ODhjOGQzMGQzZmE3N2ZlNDYwZGQ0NTljN2RhN2Q2OWEzYmE1NTc2YjJiYzhkYzE1YTBkZTE4ZjUyZjc5YjkxMjBiMDNhNWJkOWJiNGI0NTU0N2I5NGIzMDFjZjNjZTI0NDJhZTUwODNjNWMwOGI0NTVlMDZmYzNmODBiZTk3MmUyODY4ZWEwMTkzNzZmZGYwNDcyMTQ3ODI4OTQ0MDQ5MTc0NGRmNWNjMWYwIjoiZTVhM2ViYzdkNTMzYzIxNGY0Y2Q2NmQzN2YxZGQ0ZmY3MTg4OTFkYWVmNTU5NTk5MTU5MzhhMTc3ZGQ5NzA4OCI6IiI6IiI6Ijk1OWJmMzYwOTI2MjI5MjNlOTZlZjVjMDM4Y2EzMTgwNDhmOTQ0NzAwMzYyNmE5ZjVmMGM1MDgyZjY1ZGFmNWM1ZWJkYzczMjhlMDkwZmQ2OGVlNWQzYzE2MTUwNmI4NjU5MGUyMjI5YTQ3OWRlN2JiYzM5MjA4NTI2NDdkYjJhMzUyNzJjMzA1ZTlhMzA5YzA0ZGExYjhlNThlZTE4NTE4MzY4MWNjYTg5ZjFiOTUzNGMwZTE1YzE4OGY2OWNiZWQ4NzMyNmE4M2NhZmZjYWJiODAwZTI2NzI2OTFiNzY0MjcwMDY1OWViY2NmZjM3NWYyODRlYWUxNzI5ZWRjYzkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiZGNkNzRkNWRkYTNhZGZmY2JiNTRiZTBlN2M0ODY4MjE3NGIxYjQ2MDYyMmI1MmFkNGYzMmJkYjJiMTY0MDMyYmMzMjc3NmRhMWFkMzkxMzYyNmQ5ZTYxZjViOWY5ODc3YzhiZGJjNjJkOTg0NzUzNTYwZjJjMjkyZWMwZWNlOGNmMGUzNjliNjRlMTRlY2I5MTA5OTdiN2ZkODFhOGVlYzYyZTllZjc4YjFkMGRlNjY0MmQ4NDA0Y2M0Y2I3YmQ1NDRmYzVhM2IzNTg4YTE2YzRlMzQyZGM1MDAzZDY2MDgiOiJlN2FhMDdjZjRhM2Y5MDE2N2I0ODZjMWM0ZmZkZDVhZTQ1YWE1OTIwMGU0YTk0Y2FkZWQwYjg1YWFhZThmZWYyIjoiIjoiIjoiZjkzMWIwZGFlNDM3MDNmN2VjMjBiYjZjNTY2NzE5MTM4MGU3ZTI2M2VmYmYzMGJmNGJkNGNmNmUzY2Q1OTc2MDk1ZWI0OGRkY2ZlOWY3MmMyOTlkYzA1YWIyZDg4NDZlMjI1OTYwMGZlMzcyMzc0NGY0ZWUxOWM3NTgzNWMwN2JmYjIwN2U3MGNlYWFmYTM1NWJiNmM2YjBhNDIzNmQwZTA4MzA3NTljYzY2NzNhZjJiNGRlZTlhM2VmZTQ5NmU3MDIwNTU2YjRmOGVkMGMwOGNiZDRjYWM2MTgzMWJhYjJmNWE4MWE4MTIxYjI0MGE5YzZkMzc0MTcyZTVhODdlMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJiNzJkNTYwNDQwMWIxNTQ3N2I2NTlhMzczY2FhZTUzYThmZTk4M2UyMTk5MTg3NTQ2NzU2ZTAzOWU3MmVmYjdmMmFkNDcyZWU5MDQ0N2Y2MTZiN2FkNWJiMWRjNjkyZmQxYjllMTAwMGVlNmM4YmE2NWYzOWE4MzdmMjdhNGU1Y2RlOGNiZGVhNThlY2YxMTQ1ZDUzYzIxOTM2OWZhODY0MDJhYzA1ZTNmZTNkNTJmZDU0MzQzMTc5ZjIzN2FlMjA1NTI3N2Q3NmQ5Mjc2YmJmODNmOTc5MDEyMzJiYTZjNCI6ImM5MDM4YjBkNDY4MTUzZTg1MjkwODljM2RiNDE4ZmJiZTQyYWZhZTU2MTNhOGVlYTdjOGUzYzJhMzA3YzQxNTkiOiIiOiIiOiI5YzJhOWRjMjUwNGUyZDk0M2Q4NWUxYzA2OGY3ZTU3ODM1MGRmZWQ2NjFjYjVkODJjZDI2Y2UyMmQwODNmNmUxNThhMzkxNjFmMzAzMzcwZWU4NDRiNGY3NTcyM2ZmYjQ1MTMxMjIzYmVlOGVmYzMyNzI2YmJkYmI5YmEyYTBkODE3N2U5MGU0ZTFjOGYxZDNhMjJlOWE5ZWFlZjhiN2NhNGNiYWYxNDJhYTFkYTE4ODZkMmVmOWMxZGMzNjkyYmIxNTc4NGNmYzkwNmUxMmI0ODQ2MDk0MDM1MTU1NTBjYzQ0ZTNiMGVkZDQyYWU5YzNmMjY3YWU5ZGQ3MzdlZjI4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAwKSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImM1ZjVlNTE5MjgzZjdkMzIxNmYyZWQ3NzY1YWUyYzBkZDFlMjI1OTZkNzc2MmMxZjA3MDdhYzk5YWQzZjZiYTZiOTIwZTZkMGVjMTU4NTIxODZiNzdjM2U5MzE4OTA0YjI1MmFhMGUyZGFmYzI5MDFhNTE3NzQ0OTAzMmE3NzI3ZTUyM2QzM2Q2ZjRiNWYzNTA1NDVlNWJmMjFhMmFiNmNlYTIzZjQzYzczYzJjYzA5ODI1NDFjMjk4ZTA1ZTRiMmRjYzZmYzVkMWQ1MDcyMzJkNzM1YjAxZWQyNTM2MzE3IjoiOTgzNWFjODRjOGY4Y2MwMDQ2NGNlNzU4OTEwNzRlMjBmMDUwYjE2MmY3M2M5ZTkxNDM1YWFkNTkyOWI0NzNjMCI6IiI6IiI6Ijg1YTc0NzczMTYzOGUwOWVjMDI1NGU3YWEzOGUwODQzOTQ1N2U2NTA0ZGU5NGQwMDQwNWQ0MTczMjZmM2FkNDdmMTU2YjVlMjExMjA0YTgzNjM0MzY5YmVmZmMxMjhmMzYxNGU4OWUyZTI4OGQyZGUxMWY3YjkwYmNjMmI4ZDI5ZjE0OWUxM2EzY2JjOGQ3MTFkMjQ3NjVmNDgwYmQ2NTk2YzhlZjYwNWNkNzJmYTY0ZWQ4YWIxZjlhMThiMmQwYjgxYzBkZTA4YTE2N2Q1MzdiM2QxYzUxYzJhMGM5ZWE5MTI0YzZlNDE2MTNiMzgzZjEzZjFkMjBlMWVhZjIyODgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImZiOTEyZmNhZDI3YmJiMjUzODE2NGY3NWE3OWEzZDc2NTFjNDJhYmE1NDdkYWQ2NDAzN2I0OTJhODdlMzAxODA5ZTE1NGYwYjhiMDk5YTJmNTg0NjQzZTRlNDBhYjM0ZmExNDY2Njc5ZmQwYThhMWY4Mjc3MmFlMGM4ZTlkZTJhNDYxZDgyMGNmMzdiMmU5YmQ3N2E2MDlkYzM2N2I0NDllYmFlY2ZkMGFmZjU5Y2FiYWYyMjRkNTYxMDA2OWM4ODg3NjJmOTJhMTY1NTNkODJjOTE3NTUzYTllNzIzMTc3IjoiZTNjOGVhYjM1ZmJmOTBjYWQyYTY5Y2M3NGE2OGFjMGJkMGZjNTE1ODUyMzFmYjljM2VlY2I0OWEwNjQwNDNiYyI6IiI6IiI6IjA5YjRhNDc1MTlkNGFjZmRhNTA2ZDY0YzBiNTUzNmZiOWU3MmNiMWI2YjQwOGRhODJiNGI4MGZmNzk0ZjQ1YmViMjA3MGIwNWRlNjc3NTliODMxN2Y0MGU3OThiZjM3ZDM5MmNiNTljYmJmZWNjMzA1NjI1OWM5NDI2NDE1ZGY1MjZiZjNjYjYyZjQ2MzY1NDI2ODk1Mzc2MjljMGU5MWE5YmVjMmE2MDBlZGUzZGNhZTgyMDc5Y2VhYTM1MjI1MjRmYzAwMmU4MmMyODA3MjRjNDE3OWUwMGRmZGQzNzRlZmZhMDVhNzFmYzg1NmNlYjIxNTQyYmUwYmRiNjJiZjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImVhZDdmYTMyZGFmYWVjMDYzNDc0NjkzZTk4MjMwYmZkZDYxZWQ1ZWU4OGM3YTkzNzE4ZmRmMTdkYjc3MTY3M2YyYzNkMTJkNjNhMDhiOWFjYzJlZjIxNTMxNDEyZGNkYWMzN2M1ODI4ZDRhYjI2YzFlMzY1YzA0M2FhZDIxYzUyZWY5YzE0NDMwNWU5MTdkZWU4YTE1ZGQ2Y2Q3NTFjMmM0NWEyZDZlMTQ2OTM1NDU4ZmQyY2ViYTY4YjQ5Yjc0YmNlY2E0MzI5YWM1ZDMwYzdhNjdmNjE0ZDNiOTNhNmZkIjoiZmQzZGE1YmIwMWVhNzVkN2UzMmMwMjNlZWMyMzBmM2JhY2JjMTYzNzY4YzFjMjQyMTYwMjhlODI2NjBlMWJmMiI6IiI6IiI6IjhmYzc4YTQyNWY5ZTg0NmVjMmM3NTdlOThmMGUxZjY3MDg1YmRlMDE4NGY5YmE5ZTg2OTc4MTFmNmM1MDkyOGRlN2VjOTc2N2E0ZmJlYzhiYjA5OWY1MzRjYWJhZTRiY2RlNjlmMjYzMmZlNGQxYzU4MmNiOTE4ZTMzNzBjYWJiMjE1M2ExZDE2OGZjZTIzZmFmZGU5NTY2MGU2OTg3ZDJlOGZjZWZiZGZlYjIxMzk4YTUwNzRlZTc2ZjczMTVjZDdjNTE3ZDNhNGRmOGFmMjZmMTg1N2IwZDNlNTcwNGI3YTNlNWMxNWFkYzVmM2M2NzQ1YzA2M2Q0NWEyYmYxZWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjVkNzljNmNjZWUwNTBiM2MyZWQ1MmVkY2MxNmZjMjZlYTdiNmYzZmQyYjkxOTlmZDY1YzdkYzIzNDVkNjU2NmU5YTBjNmUwMTcxMGU0YzcxYjI4MjBmN2FhOTIwM2RhMjM1MTVlYWI4NWE1ODEyYzY2NzU2NjM0ODA0ZTNmNTgxN2QzMmY1MWRhYjNhZTAwNDQzYzY5NGM1OWI3MmQ1MjZmODQwYTE2NmU1NjZiN2Y2MzNjN2QyNDYxOTJlZjgyNDE5ZTNjZDczM2EwMjY4NGQ2YTRjYTA5MTE3OGNjYzc2IjoiZWU0YzNjZmE1Yzc5YjFmZjFkZWM0YjlmOWZmNGVhNDVjOTE2ZTQ2ODg5MTMwY2ZmZDdmMTM3ZTY1NzlhZjUyZCI6IiI6IiI6IjRmNTNmNzI0NjJkN2U5MjQ3ZTdhZDExMzgyN2QzZWE3NDFjMzU2OTBmYTBiZTAyN2I4NjY2MGU5MzdjMTE5ZTcyMzdiYmM2NzRlODI2ZjQyZGQ2ZGZhNWY1NGQ5MDU0MmVkMmJhZDIxNjgzYWY0YjFmODc0MWVjYjc1YjQ2NDM0NTExMWNjM2QzODNjOGI3ZDA4ODcxOGEzNTNjMmQ0YWY5M2ZmNTkwNTc3NDVhODA4MjAzZDA4ZWJhMjQ1MmExYTlhZGU3NWNhZGQwZjQ5ZmNkMjdhYzNjMDI0YzA0YzA5MzZjMDIzN2ZjMjlkY2QwNjFiNjJmYmI3M2FkYWE4ZWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6IjM1ZjljM2IwZTU5NDdhNzRkOTA2MDllNmFiNjYwYjRiNDYxNzdhMTI4ODZjYzc3YTE5YWE5ZWFlZTg2NTAwYTllYWVjNWRlNTY3MmM1ZWU1Njc3MWQ3NzhmNWFhOTYzNzEzZmZkMzlmYWU4ZTA1ZWM5MDg0MzUwNWQ1ODMyZWM4ZDk5OWYyNzE4MTJkNDFkYjRmMjIzYTVkODQ2Nzk0NGYwODA4M2E4MWMyOWQ5YTU1OWE5NjBmODM0OWZiMDE3NGE4ZGJjZmExNzFiZTM5YThjMzZiY2I3NzQzYzVjNWI5IjoiYjRiNWZhZmZmMzY5OTk3MDc0YTgyZTA2NDI5ODg1OWFkMjc3NWViNWM1OTc5ZjgxZDIxMThkYTk2ZTg0MDkzMCI6IiI6IiI6Ijg3YWZkMzE0N2U2MWM0OWQyMDI5Yjg4NDgyZWFjZGFjZTU2ZjI3Y2NkYTI5Mjc3OTlhN2RkMDFmZjYzZDY4NzM4MDRlN2I1NjM1NjQ1ZmYzZjY1YjAwZTFiZDY1MjU0OTMzZTdlNTdiNTYxNzdkYjgxNTQ4ZmJhYzM3MzA1ZDNkY2I3MGE1Zjc2YTIyMjk5OWQ2YmE5YzczNjcwYWU5MzFiNDljY2M5N2I0ZjI1MjAzZWU5NWNkNjhmYTc5ZTI4MjRlMmVhZDhiZDQ3NTVhNWJiNDY1OGUwMjc4OGI5Y2VkMTY2ZWE5ZWM1MzczOTU0YWQ4ZGE4ODc5MWU4ZjEwNDciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImNkMDgzNjNlNjBlMTdiYmMxMmQ1Nzk1NGVmOTJlYTM4YWYxMDk1ZmZlYzQxN2E3ZjMwNWI3YzEwZDQ0ZjFlNjUwMDY0OTc4NmQ1MTQxNzkzZjdlZTMzYTkxM2IwOGY2MDQ1N2NkZjYzMTYzNTcwMzVhYmY1N2MyZTJiMTliYWU2OTczZDAxZTllOTNkYWMyNDkxOTgxODhiZTJmNjg0OWU1YTk2MzZkNmI2YmY3ZDFjMDFjMTZjMDM2NjlhYjdiNWFlYTgyODAxNzk4OWM4NzBjYWM2ODU3YmYzMjdiNzQ4IjoiYjU2MTE4MDdkMzA3MDIwMGZjNjI1N2NjMmIxM2E4NGY4NDJhZDQ1Y2UxMTZmYzkxZWRhNzlmZjE0ZjNmMjVmMyI6IiI6IiI6IjI4MWU5Y2ViNWE0NjU3OGRmYTI5MTdkOTg4M2YxODE5YmJiZGM5OTAxZDQ0ZjNhYjQ4Y2NmY2I4MDdlYjU5NmUyMGZjMDUwNjBkNmE3N2Q5MmE2ZjYzMGJkMmEwMTJiNDEyMzJkY2U0MTFlYTA0Njc5NGFiMDA5NmI4NjQ5MWQzY2EyYTU5ZDQ0MDVlMjgzMWIxZjlmNjllNTU1NDJhZWM4OTQxN2VlN2VjZDdhMDUwZWIyOGZkNGQ3ZDI3MzlhZWY3YWE2ZjMwZmExN2M1YjJiYzFjNjllYmIxMDE2MzQyNmI4YzYwMzNlYzc3MzNjYzlmZmNhZTJmMjM5ODZlNjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI0Mjk0NjcxZDQ5M2RjMDg1YjUxODQ2MDdkN2RlMmZmMmI2YWNlYjczNGExYjAyNmY2Y2ZlZTdjNWE5MGYwM2RhZDA3MTU0NGU1OTkyMzVkNWViMzhiNjRiNTUxZDJhNmVkYjliNDc5MGI2MjMzNmZiYjlhNjg0YjgyOTQ3MDY1MzkzZWVlZjhmNTdiZDI0NzcxNDFhZDE3ZTc3NmRhYzM0NGE5YWJlODBmNmY1MjJmMjk4NzhiZWRmODI0NWIyNzk0MGE3NjQ3MTAwNmZiNGE0MTEwYmViNGRlY2I2YzM0MSI6IjYzYmM3NjlhZTFkOTVhOThiZGU4NzBlNGRiNzc3NjI5NzA0MWQzN2M4YTVjNjg4ZDRlMDI0Yjc4ZDgzZjRkNzgiOiIyODg0OGJlY2QzZjQ3Njk2ZjEyNGY0YjE0ODUzYTQ1NjE1NmY2OWJlNTgzYTdkNDY4MmNmZjhkNDRiMzllMWQzIjoiOGJmY2UwYjcxMzI2NjFjM2NkNzgxNzVkODM5MjZmNjQzZTM2Zjc2MDhlZWMyYzVkYWMzZGRjYmFjYzhjMjE4MiI6ImU1ODBkYzk2OTE5NGIyYjE4YTk3NDc4YWVmOWQxYTcyMzkwYWZmMTQ1NjI3NDdiZjA4MGQ3NDE1MjdhNjY1NWNlN2ZjMTM1MzI1YjQ1NzQ4M2E5ZjljNzBmOTExNjVhODExY2Y0NTI0YjUwZDUxMTk5YTBkZjNiZDYwZDEyYWJhYzI3ZDBiZjY2MThlNmIxMTRlMDU0MjAzNTJlMjNmMzYwM2RmZThhMjI1ZGMxOWIzZDFmZmYxZGMyNDVkYzZiMWRmMjRjNzQxNzQ0YmVjM2Y5NDM3ZGJiZjIyMmRmODQ4ODFhNDU3YTU4OWU3ODE1ZWYxMzJmNjg2Yjc2MGYwMTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJjN2NjYmM2NzdlMjE2NjFlMjcyYjYzZGQzYTc4ZGNkZjY2NmQzZjI0YWVjZjM3MDFhOTBkODk4YWE3ZGM4MTU4YWViMjEwMTU3ZTE4NDQ2ZDEzZWFkZjM3ODVmZTgxZmI3YmExOTE1YjNjMDRjNDFiMWQxOTJmMWExODgxNjAzYzZjNjI5MWI3ZTlmNWNiOTZiYjgxNmFjY2I1YWU1NWI2OTkyY2M3Nzg3ZTNiODgxMmVmYmVkM2QyN2QyYWE1ODZkYThkNTg3MzRhMGFiMjJlYmI0YzdlZTM5YWI2ODFjMSI6ImJjNTVhYjNjZjY1MmIwMTEzZDdiOTBiODI0YzkyNjRlNWExZTc3MGQzZDU4NGFkYWQxODFlOWY4ZWIzMDhmNmYiOiIxOGU4MTdmZmVmMzljNzQxNWM3MzAzMDNmNjNkZTg1ZmM4YWJlNGFiMGZhZGU4ZDY4Njg4NTUyOGMxNjlkZDc2IjoiYWMwN2ZjYmU4NzBlZDNlYTFmN2ViOGU3OWRlY2U4ZTdiY2YzMTgyNTc3MzU0YWFhMDA5OTJhZGQwYTAwNTA4MiI6Ijk1NmY5NWZjM2JiN2ZlM2VkMDRlMWExNDZjMzQ3ZjdiMWQwZDYzNWU0ODljNjllNjQ2MDdkMjg3ZjM4NjUyM2Q5ODI3NWVkNzU0ZTc3NTUwNGZmYjRkZmRhYzJmNGI3N2NmOWU4ZWNjMTZhMjI0Y2Q1M2RlM2VjNTU1NWRkNTI2M2Y4OWRmY2E4YjRlMWViNjg4Nzg2MzVjYTI2Mzk4NGU2ZjI1NTliMTVmMmIyM2IwNGJhNTE4NWRjMjE1NzQ0MDU5NGNiNDFlY2Y5YTM2ZmQ0M2UyMDNiODU5OTEzMDg5MmFjODVhNDMyMzdjNzM3MmRhM2ZhZDJiYmEwMDZiZDEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIyMGY2OWJjNGEzMDhkMWZhNDAxNDZiZmI4YTMxNzFlODFhNjZlYmY0YzgzZmQ0NmIyYzhhM2IzNGRmNDk5YTZjOTJmNGJjOTY5OWJmNmQxOWQ1YzNmNDUyNDViYjBmYjA4MzEwZWI3YTljZTUxODgzYjBjMzYyNzFiNWZmMGExYzAwMjE5YTA0YTZiNTcxMzYyYzdhMThjYWJjNDhmMmZhYjBjZGYzNDM0YzlmNzJjZjVlZjZhNjFmZWVlZGM5NGM3MmUyOGZiNWE5OTM0NWRiYzc5MzlhM2I4ZTI3N2M1ZSI6Ijg4MmJmMGVkYmI2NmViYjI4OGNlNzQxOTk3ZmZjZDMzODAwNDlmNTAwN2IzMGU3NDBlY2UxOTBhMDE2MTJkZWEiOiJjYTFkYTMxODEwYmZhNmMwMmI1ODYzZjg3ZDM5NjY4ZDc5NjEwNTQzMGM0NDVkYjE1N2M0MWEwMTUyYTBkMjAwIjoiYzM0NGIwYmZlODAxZGEzN2UyMzIwZDM2YjllNjQ1MjIzNWU2ZjZmNGNmMzE5MGQ0MTRlODU5ZjRlZTkwZTVkZSI6IjhlY2FjN2E2NWNiZmI3YTg0OTYwNDUwNWQ0MDNhY2FlYzQxYzZmZmRhMzAwOWY2MDgwYmRhNzllMjZkMWRlM2JkZmQ4OGZjOWJiOWNhMWRkMWNkOGQ0OWUzZDBjZmIwZjBhMmU3MGFlMTgzNGU4ZjdkN2Y3OTM4MjU5MWU4YmVhMGEwMzg2YWQ0MGM5OGQwOTcxMjJkZGUwZGMyZjRmZDMyNThkNDBkY2RkODA0ZmRjYjcyZDYyZWY5MDQxNTE4YzM0ZmQ4YTM3Njg0YmNhYmUyZjU5NTk0MzgyNzY3YzI2MzNiZjI1NTEyMWFjNzM1ODUyZmVjZjE0NDQwY2I2MjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIwYTEzZGEyZWRkOWVkMDk3NjMxODYwZGMyOWNiMmQ3ZWZmMzUxOTkxMDgwOGU3ZWIwYzZmZjE0ODVjZGY3NThkOTc5M2NhNjk3NzkxMTdhNjNhNDdlMzg2NDMzZjE4Yjg4MmVhOGM4ZDMxNzlkY2MxYjI2M2ZiMjYzYmRiZjJhYjgxODc3NWE4ODE5NjRhNTY5MGE2ZTlhZjU5MmRiNTk0YTM5YTk2MGUzNDNiZDRlZGI3NzQ3ZDc1ODY2ZTFjYTcxMjU3OTdkMmJmNmE2NDRhZWQ2ZTNjODQ0M2Y5NDI3NCI6IjQ4NDQ1YjFiNjgwN2IyNjFkMTA1NjlhYjRiNWQ4YWI1ZDk3ZWJkM2Q5ZTgxOTQwODhiMTA0NjNhYmYxMWEyZGYiOiI2Yjc0MmQwN2M0NWEwMzE3OTVhNzc3MWVhY2U4OWZhYjc4MmVmZjZhNzQ1NTVmYzJlYWJiYTAwZDFkN2I3YzE1IjoiY2QwNDkzYWE4NGM5NDFjMWI3ZmNlMzdkMmUzOGMxOTlmYjhjODZlYTBjNWI2YTUzNjExOGFlNDIzY2E3YWI1MCI6ImZhMDA1YzkxMTlhODk4ZjJmZWEzNWI4MDVhMmJkOGJlODhjNDhjYmRhYTg1ODIzMzdmMWY0MDdjZTNlNDlkZWU4MDExYmIxZTRhZTMzMzE3Y2E2ZDVjYjY0NTY4N2E2MmFlZDg2ZDU4MDM1ODNhMDEyZDk2YjgyZTdiYmZiZWJmNTlmZGZjMWRiMGE5MjU4NmE4NDNmNmU1NzA1NmY0OTcyNmU4OWJmOThiNjQxZWE2MGEzYzkxODE1ZWRiYWY0MTViMmM0ZWI3YmI4YzU2Y2E1ZDg0YTM1ODdjNjRhOTQ1YTZlM2Q2MjViNjc2MzA4NGMyYTA5MTdkZTZiZDY3NDYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJmZmZjYWFhN2FlNzc4N2UxMmU5NjUyMWEzZTI5YTdjNDBhZTA4YTdjZGVhOTk3NGNmY2I4OTQzNTI5NTVlNjVhMjdjOGIwMTQ5MGM5ZmE3NTkzNzM0ZWMyN2FlMjQyYTIwZDAzNzFjM2M2NjRiZGVjN2YzNjhiZjUzYTkzMGNmYjA5MzNkZTVkNTA4NjVjZDc1N2I2M2ZhMzUwMzQxMzc1ZjEzMmRkMmJmOWJmOGM2ZDlkMmNhNTM1NGUyODRiYmFjNjc3YzI2OTI5OGUxYTViZWY1MzYwOTEwODE0NDZiYiI6IjViMWMxYTE5YjI4YjA5ZDA4YmY5Y2RlODdiNGE2ODgxZDM4YTc5NjFiZDdiYTY4ODhkZTA2ZDBjNzhmYmVmMTMiOiI1ZWJjNzZhZTU3NzlmZTU2MzM2MmM2Zjk5YmJhMzViNGI1MGVhY2FmNzE5MmM2OGI4MmEzNzZmYjdmMmI2MWRlIjoiOTU4MzE5NDkxNzAxMDVlOWMwMjJhNzcxMTgwM2Y5ZjdkNjE3YThhMTM3MTQ1YjRjMmY2ZGRkYTdlYmNmM2M1YSI6IjYzM2NiNjY5NmI5N2YyZDQxMTlmZTI0MjQ4NmU4YWZmZGYxYjNlMjVhOTRlNDM0NTkyY2FmMDI3MDU2M2IyMTBkZjZhOWY5NDA1YzJjMzNjYmJiNzUwYzAyMThmNzE4MTE2YjY3MjMyZGI4NzQ2MjE4MzJiYTc4YjA0MDUyM2IyZWJmNzE1MDgyZmQyM2ZlN2UzMjU5OTQwMmFmOTUxNTZlYmVkYTk4ZWZmMmE4ZjJhNGUyOTViOWFmYjdmYWRjZTk1NmNhYmZjMTE4M2YyMGU0ZTA1OWQ5MTYwNGZhNWQ3NzA2NWM0YTAwNmIzZmIyYzE1NzUwMjA2ZWM5MzZlOTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJhZThhNmEyNWIyNjYwNTFjZDQxZmQ1ZWNjNjgyYjg0NGFhM2EwOTMyNzIxNmViNmFjNjMzOTAyNTA2MjAxMTMxMjQxNDUwMzNiOTk4OTZjMjFmOGRjZjYwMjcxYmE2ODExNTY0MDZmZjI2OTE4ODY5NzJmNTNjMmU0YjQ0OWRjOTRmYjA5YTI5NjBhMzQyM2QyZjRhYzY2Zjk3M2I0YTg5ZjgwYzAwYWY2ZmJlNGIwYmJkNDMwYjEyYTcxNGQ0MGUxNzJlOTlmOTA5OTE2YTI3MjIxMDIwZmM3MjI1OWNiMSI6IjBhY2JhZTNjMDg1ZDJlNWU3NjBiMDYzMWM2YWQ5N2Q5MzVlOTZiMGE5MGVkNGE5ODY3ZjYyNjk1MTU5NmRlZDIiOiIyZDc0ZDA3ZTgyYTAzM2MwYmY2NTY0M2E2NDc4ODU2YzkyZjMzZWU1NWEyNjgyYzE3ZTdjNDI4NTdlOGU2ZmE3IjoiYTFiMzk3Y2Q4MjZhZjNmYjFiOTQ5NDUzZTk2ODc4ZTU5ZjA2OTczNTI5MjliMTVjZDY3ODE0MjQ1MzQ3OWU1NSI6ImMzMDk1NjdlZGIzZDQwZmQ4ZDgyODU1MTExNzk2NGUyMDA0MWIwMzFlOGViNDFhOGM2ZTk1ZTI1ZTBmNDMzNzI1ODU4NTQyMDJjNWQ1Nzk2Y2E0ZmQzOGI3Yjc4OWI0NDQxMGJhM2UzYWI3MDE2Y2I2NzkzNjI1YmUyN2M2YzhkMzk0OTljNDAyZTRkNTJiZjJjMGJjZTIxYTVmNGYxNmQ4MGQ1NDQ5ZDUyMjJhZWExOWI2NGRlMjVmOGY1ZWI4MWJlYTdjNDkxYTMyOWNhMDc5YTk5YzllYTAwY2JmMzM1NGI1ZmVmNDM1ZThkNGNiY2JmZWE3NDg2ZDM3OWEyYTIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiJlNjAzYjAyY2NkMWIzZTJjZjI3YTJhNWNiYmI2ZThmZDIwNWVkMzUzMWFiMDhjZTkxMmY5MTUzMjhlYTFjNzNiYTdhMDc1YTlkZmQ5ODA1MTAxYmEyZjBmNmU0MmViZmY3MjAyNjg3ZTk5ZTFjYzkxNDAzNjE0NmUxODdjMTZiODM5OTlkZjQ0MmYwZmY4N2I5ZDgyZmM3ODMxNzE0ZDgyMGMyNDdmMWEyYzNlY2E5ZDMyZWYwMDM5YzRhMmViYjk5NjJkODQ0ZTAwMzJhNThjNjA0ZDYzMGYxMjg4NDc0MiI6IjI3ZTg2M2MyZjlmOTFlOTU0MGYwMjAxZGJhMGZjNjNjM2M2MjNhYzg5ZDYzMzY4MDkzZGVjMmYxN2I2ODY4YmMiOiI5M2U5NjdmNzM5MjlmMmJlMzM5NDQ4NzM1Yzc0YjU3MWE4YjgwYzEwYmRhMmVhN2ZiZWE4MjRiMTg4YTdkYjkzIjoiMWZmM2E0Mzk2NmE4ZjY0YzQyZGVlODg4OWNlMjYyNmJiMzcwYWZlZjRjMDIyMmI5MjZhYmUxYmU3MTk0MjdmYyI6IjdjYTY4NjdlZjU2OGM4YzMyM2QyMTZkYjk2YjY0MjU3NmRlMWY1ZTgyZDA4Yjg0ZTZhMjc1MjAwMGM1MTc1Y2Y0OWQ2MDk2ZGZmN2I3MTRhNDVhNzJhNjllNDY3ZWUzNzhmNGVhYmIxNDJlZGRjYTkyNmEzZDAxMTIwOTYwY2Q3YWFlZjFlMzc3ZjQ0N2IwYmNmOGVlNzMzZDk2MWQwYzM2YmU5MDFjN2Y0MDZhMWRjODFjYjJhZTJlOWY2ODg2ZjViYTFlNDgxZTdjMTM5NmQyYzg5YWE0NTZiMmZiMzRmMDJhOTFkMGVkYTg3ODRjMjZhZDVhNjg5MmJhNWZmYTMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIyMjJkY2I0YjMxYzdiYzM3ZDg4MTNiZTc4ZDk1ZTlkOGMwZjAyMTM2Mzg2MmM2YmVlNWIwMWU2YzlkYmRiYThjMmFlODFjNTJiOTBkNGNmZWI4MDY5N2ZjZjA1Y2FhMDhiZjgxNzAyYTkyYTZiYzkwYjUzMWIzNjNkYjVhNWZlNGY1MDQxMjYyMWJhMzkwYzFjZDIxMWE5NjgzYzQ3ZWM3ZWQ2ZDE1NTEzYmQ0OWQxMDQ0OWYwYzQ1MDE4M2Y1YTdiMTY0NjZhMzdkZjVmYzc5YTRkZGQzZWM2YmQwYzU2ZiI6ImJjYzE5ZWI0NzZhYzk2NTY3ZGExMGRhOGZiNzE0YzJmOWZiZGZmMjhiN2M3NGE1Y2JhYzgwY2E0ODBlNjFkZTYiOiI0NmZlOGJkNGM0Nzg5YzM3MzcwNzA1MGQwZTcwMGU1MGQ2OTJiYTEwZmYyZmNiYTIwMDQ1YzllZmZmNzM3M2Y1IjoiNjhjOTU2YTk1ZjZhMmM5Y2RkMDZlNDYxODA1ZDUyNzBiMGRmM2M5ZmNkZWJiZWZmYjMwZGFkMWE4NTJmYjM1YSI6IjhhNTRmYTk4MTg2MDIwMzI3NjJhNDVjOWY2N2Y2Njg4NjBlZDYwNWUzNzFhNjM4MjA4MjUwOTI0OTMzMGZjMjRkMTNjNGFjZjI3NzgyYTdkMmJlNDI3MjFiYmI5YzgwYzYzMzhhY2I1N2E3MTVlZDE3YzAwODkyODE2NmY5YTA5MDMzMWRiNGZlNjJhMTFhYjQ3Yzk2NmJjM2MyNGE4YmU5NDJlMzUwYTJkZWU3YzdlOWY2MjAzODZkODlhMWUwYmQ1Mjk4ZDAwZjk0ZjlhOTMxZTUwODM0YTJhODVjMDE3NTMwOGJjNzRhMzRhYzM3YWIyMTMwNWM1MTE4NjYyNjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI3ODdjMWZlMTQ5OGJhY2NhMjkxZjAyMGY4MGQ2YjU1NmU0ZjBkNGZhNWFkY2YyMTUzMWM0NDdmMjhlMTQyNjZlNGYyZTlkZTNlMTI1NTc3NTYzNDhkOGIwYzczYTEzMDFmNDNjZTQxMDM4Y2JiN2RhYzYwZDgyNjk0OTViNjJjYTc0NTJhOWM0ZWRjYjU0ZTdkNDc3ZjBjNmM2YjdhZjYxYjNhMzc4NGM3NzVhNTg4NGNjNTM2ZjYwMTMyZTY2Mzg2ZGJiOTExNTc3YWVmNzVmYzBhNjg1MDg0MzJlMjU1YSI6IjkxZjE4ZGQ3NTg1OWMyOTM4ZWRiMGQ4MWY5ZDYwOTVhMmJjNzU2NWI2NzQwM2E4Nzc3Y2QwNTlmMjYzMWM5NTgiOiI5MmQyZDgwOTFjYzRmZTlmNWNkZjJkZWQyZTM1OGZhMDVhN2Q4ZTQ1MjUzMzNiNGMwMDY5N2FiMThkZDFmOTk1IjoiMjI2M2NiYjZlMjliYjliZGJkODAzYzcyMjRhYTAzOTA3N2JhNDNkMTY0M2Q0NzU0NzQ1Zjg5ZDhiYjZmODg4ZCI6IjYyMDg1MWQyYTRjOGI2NTU4ZTE4YWE1ZTJkNDU0Y2VjODM4NTZkMjVlNjE5ZTY5OTI4YjU3OGVhNGQ0ZTQxYzY2MmE0Y2QwYWU2NGVlNzU2YjE4NDc0MjE1NGQ5ZTdhNjI4M2Q3OGJiOGI2Y2U1M2UyZmQyY2U5M2NjMTJhZDc4NzQ5Y2FiNTMwYTdmOTk2YzgzMTE3ZGY2ZDIxNzE3MDkyN2Q3NWEwYzk4MzE5NDgxNmQyZTIxZjkyODQwNzkxMjkyNzEwMTc4YjNmN2Q5ZmUxMDAzMDQxZDJkOWU3YzU5OTQzYjE0NDA5YWJkNzk1NmJkNWMzMTE5MGE1NGJhMGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiIxNTM3ZjkzODBkOTdlOThmNmUwMmY0YjEwMTgyYjgzNWYyMjRjY2EyMjc4ZjM3YThjYjE0MTFhMWM2Y2I4OWVhYmNmMzdhOGIxNTljZGVlM2E1NTMyOWIzODE2ZjhjNjU2YzdmNjM4MzVmODYwYjRhNWUzYzQ1MGEyYWZiNWI4OTJiNGRhNzA4ZDM5NjE0OTIxYTgyZDM2Y2YyMzUxODYxOGM5YmIwZjUzMzI0OTJjMTc0MGZiMzg1ZTk2OWQ3N2Q1ZDdlMGFhMGE0MDY2Y2I2YmJiYTRlNGM3ZmE4YWU3MyI6IjZkODkxOTBhZWJkMTYwYjE1NWQ1ZGZmOGNjNDM5M2YwOTU5ODhhMTU1MWJiMTU0ZmFlNjIxNzM5YTQzNzg0MzAiOiIwNGE1MTFmMWQ4ZTE5OTQ4NzllMjM3MjE2M2I1YTQ1Mjg5OTY2ZGY2ODAzNTBiYmFmOWJhZWE1MjMzM2U2NTJiIjoiZGZkOGM4ZTQ2NzYyOGRlNmMxMjFjNDAzODE2YTY1YmRjYTAxZGNlZGQwNTc3OGI5MjUyODNmOTJkM2NiNTI1MSI6IjYxZWRmYjQ1NzU0NjQ5M2E0M2ZlMTM5MWI4Zjg2ZGEwMWMxMjQyYjMyOTdmM2M0ZWUwMmUwNGUzNzE2MTcyNWY0MTgyYjE0NDYwOTMzNWYwMTgzYjQ3Nzc0NGNlMzM3MGZmNjRhZTg2MWM3MjhlNzUyNjE0OGVhYzNmYjA3NDAzYTI3YzNmODJmYmE1Y2U1MDUyMzNhNGUzOGI4ZDQwYzNmNDRjZmUzY2M2NWM2YTg5MTI3ZjgwM2IxMWEzZjI0Mzk3YTIwNDA5YjU5NGUxOTNlNDQzMTkwMTU1ZGE1MGZmMTEzNGM4YjFhZGM1MDA2YzdhZDIwMTg4N2U2YzFhZDMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiODQyZGFhM2Q2NGIzYzI1MjEwY2IwZWNiYjI1MTMzM2MyZWU0ZTA5MGE5OTIxMzhhNWQ2ZjljNDU1YThhNWYwZDI4YmU5ZmI1MWFkMjIzZWQxOTZkNWMyNDVlZWVhOTQwZjgyMjk1MmJiY2YxZTJiYTdkM2RiZjUyNmFlNDRhZDdlNjBlOWQ5OWE4MzNiM2YzNzJmNzdhZGM0NDA4NTBmM2ZkZWVjZjQ4OTQxZGJjZWNmNmY3MTBkOTlhZTU0OTM5ZjliZjM1YzNlZjJiN2I2MTM2ZDc3NzhiOTU4NDZhZjUiOiJiYjkzNzZiNzljZTJjZWRlMTUwMDM2YzA2MjZkZGFmOGJiZDk2MGVjMDRhZGUyNjk0YmU2YWVhNmNlODk0NmUzIjoiNDE0MzFiNzUzNzk2OGEyZmZlZGQ2ZDc5NDJlZTIxNTY1ZjM0YTUxNTVkZTZlMDk2NjQ2ZmM3ZDQxMzAyZWQ5NiI6Ijk0NmIxOTBlODU1YWEyZDRmYTc1NDRlOTg1OGVjNzBjYTlhYzE5YWQ1MTBiZDdkNjI1ZjE0ZDE2YTgwODk2YmIiOiJiMGQ0NTYzMWExMDRjMjQ2YTFhZjMxYzhiY2Y3ZjdiZWE5MmNkZTNjMjU5ZmMwMjkwNzJjNTFlNjYyYTMzYzA0MGNmYjFkMjYyYzcwNTMyMGI3MDIwYmQxMzY1Mjg4YzFiYTliM2JkZTlkMGE5ZGY4YjllNzI3NWU4NjM3Y2U5YTE4OTY4NzdlMzQzMjNhYmU4Y2EzZGQwMjYyZDNkNzVlZTNhNWFmNTA1MjM1ZTM1NGFhYjQ5MWRjZmNlMTEyODdiN2M3M2RmYzRjOTdjNDdmMDM3M2NiOTNiYWFmM2RlZjIxODZhNTMwOTVmZThiMDUwYzk0YjFjZWYxMDljMDdjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImFhYmEyOWMxMmFhYTAxMTYxOWMwN2VmY2E3NWExODY3MTRkOTdlYWMxOGQ3NWZkYzhiNWIzNmE5ZWYyNDdiZWYwZjE1MmI3NThjZGJkNjkyNTZiZDg2OTdmY2U1M2QyYjU5YWUxMjEwYTM1MDMxOTgzNGQ2NzIxZTlkYTZiMmNjMWMwZTU1OWEyNjgwNGQ0Nzk1M2UwYmQ1ZGY2NmVhMmEwYzQ0OWZjMGE4ZGNjMTZiOWIwYTgyZjVlNmY4NWEyMThjZGRkYWVmNDBjMjU0YzEwMzBhOWJmYTMzMjE0YWU4IjoiMDI0NzBkNjg5OGJjZDExOWNhYjQ5MjQyYzk1ZmE5N2I1NmE0OTVmNmQxYzViMjZkMWU4NzdiNzBiOTU0ZTNiMyI6ImU0ZTQyOTMxNDhjMzFjYTZiYmQ3MzcwNmUyZGQyZjM2YTIyZDNhZjNmODYyZGRhZTQwYWQzNWQ1MWRkNjc4MWUiOiIzNGM2NTA1ZWViZjAxODY3NmEwMzlmMjAxNTA3ZmEzODMzODU5NGNkMDE1ZmI0ZDk2MmQxNTc3YmVmYzYzZWM2IjoiZTE1NTZhOGJjYTM4ZDVjMjA4N2I1YzYxMTU2YWI5MTU2NmE1ZGE3ODQ2NDdlMjIwYmY0ZWEwMzc0ZTE4N2Q0YTRiYzM3M2VjODkxNDcyZGFhMzFhYTBkY2NkYjU2YThiNDJmYjI4MDVlNzQyNTE5NzZmZmU1ZTAyYjQ0NmFmOGFjNmE5ZjBkNmYzNmQ4NTdmZTZkMzc3MmQ5ZmFlN2FiMDhiMzYwZThkZTI1MjlkZWM4MGRkMzFhNWE1NDY4MDM0YWE1M2IxMGI2YTczMDY4ZmQ5ZTA0NmI3MGUyZjAzZmRlZDhiZDg1ZjdkZjQzMjJkNGZhNTMzOGM5Y2RlMDQ3MSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0yNTYsIDI1NiwgMjU2KSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMjU2OiI3NDJmYmY5ZjM5ZjlkOGM0Mjc5MTQzZjg4YTZkMzAzMDc0OTI2ODFjY2Q1OGU4NDIyMjc3MjU5YTBiZjg3YWNhMjRjNWQ2ZGM0ZjY1MGYzOWMzNDAzZmUxZWFjMWVjYjA3OWU3YjlmMzYzZWI0NDU1OTE3NzcwMWY5M2RhOTNhYTMwZGM1ZjRiOTMzMjA5MDczYzgyNWFiMmIzOWI1MmVjMjNjYWYwNDlmNzYwYWEzODVmNTg5ODNkOWFmMzAwZWM1ZjgzMWYyNDQ5ZDI1MDhiYjU4MjRhYmI2MjJlMDBkZCI6ImMyYzQyZTYzZDQzYTc2NWMyYTQ5ZDJiMzVjOGJhOThhN2E2Nzc2NWEwYzQ1M2QyMzUyZDlmMjI0YWViMDYxNzYiOiI3OTQwODMxODVlNzljZjkxOGZhYTg0NmJkMTIyODdlOGZmMWU2MjA3NzBlMGUwOGIzM2U4ZTFkYThkMjNjZmRhIjoiZWQ3YjkwMmViNTViN2JkYjJiOGJmNzA3MTFjMWY3YTRiYzAwYzRkYWRlOTJjOWQyNDU5ZGIwNjA1NTEzMzZhZiI6ImM4M2FmOTBhOGM3ODc5ZTk4YjI1NWU5YzZiMTg1MmJkNzU5Y2NmOGY5YzViZTRlYTVlOWEzNTZkZjRjNDNlZmNhNDEzMDNkNWEzMjJhN2U0MmVkMTJiOGIwYjcxNWUxZDIzMjU3YWFhMzY2YmIyNjFlMzlmMTk4MzRjMzhhN2E4ODNiZjJmMDFjNDdhNzgyZWRiNzkwNWNjNjE3NDJiODE2Njk3NGY1OTkwMzMwYTA4MTY4ZTI1ZDRhYWI2NzQwYjk2NDkzZmY4N2E0MjRhYzZlZDQ0N2FkNjU1YWZjZmRlMWQyZWM2YWIyYmE4MTEzNTEzODVlYTBmOGI2NmUzMTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMjU2LCAyNTYsIDI1NikgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTI1NjoiMTQzNzk1OGZiYzkzYzcwMWNkZDA5ZmU4MWE5MGFmNTVmMDIyMTk1Mzg4MjY0ZWYwMzc1OGZjMDhiZmQwZGQ4MGY2M2M3YmMwNjk0NWVlZGQ1ODg5M2RmMmI1ZjVmNjJiMjIyZWU0MjNkYmNjNTQ5MWQxYTU3MTU1ODkxNDA2Yzc5ZThlZjUxZmU3NTc1ZGI4MDc0YzRlNDBmNTAwMjRkYWYxNzc1NDhlYjEzMGE4YzI0OGMyYjdkZjk5YjY2MjZlZTA2MmNkNWU4MjA0ODAxOWIzMmNkNmM3MzE5ZWVjZGQiOiJjNDQzZjg5MTUzNGMzMGQ4ZDJiMWUyMDcyY2I1YjgyNGU2ZDNkZGZkZDFlNmM3NzU3ZTU0MzcyZDQ0MjBiNWVkIjoiMzlmN2FiZDMwNmYxMjdiYWFmOGNiODMyYjY3YzI1NjQyODdlZmE0MzNkZjhlY2FiYzQwYjk3NDQ2MzdlNmJmYSI6ImVkYTY5NTAwMDJjODY2YzYxZDJlMmRmY2Q5ZDY5ZThjNTE1NGI0NWY3NjJlZmQ2ODhlMjYwNDRhZGMzOTU3YzIiOiI4ZmI3NThiNDk4ZmViMWMwZTk2MWE4Zjg2YjgyMWJkZGRlMzg3ZGFjMjIxYTgxOTFmNzFiNmE2NGNhYTJiY2M0YTQ3NTQ2MDgyMzk5NmY4MjYxYjhlMjIxMjVkZmVhYzVjOWRiZGEyNTUyNWRhYjI0OWNiZTQ2OWM1ZTIyNDQ3ODk2NDc5M2JmODIyNDQ2NzIxYmY1YmM4NWU1ZGE2ZWYzNGRkY2I3Yzk0ZjEwOTE5M2M0NzU5MDQwOTliMDZlMmE3ZjUzYmE2ZGQ5NDQ4MGRkNWJjOWZmZjkwMTUwMjg2YzRkM2NjZWE5NzU5MjVjYzhlZDRlZjk4MzAzODliOWJjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTI1NiwgMjU2LCAyNTYpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEyNTY6ImVmOTI5MmY0YTdhNjdhYzRkNGViYTQ4OTM2MzkxYmI0NWY4ODEwYzJhYjAyYmE0MjRjYzhlNGFkZDUzZDFjNTE0NjExZTMyMzNjZDhjYzhmNmQ2OTQ5NGRjMzM2Y2JlMWNiYzY3YzE3NTIwYWY0NDI5MzNhMjM1YzZhYTZiOGY5ODEyOGM2NmZjZGQ3Nzg0M2FlMzJlMDZiN2EzMTY4OWM5YTZhM2M1NDBhMTkwODFiY2JlODUwMjc4ZDUwYWRmYWMzNjM4ZWM4Y2Y4NTE0OGEwNTQ3ZDI4ZDBhNzAyNWRiIjoiZjRhODcyMWEyYTg3M2Y4ZmU5NGU0YjNlMTM3ZTg2NmM3OTIxMmY5YzE0Zjg5YmUxNTZjNDdhNWZiYjlhYWVjYiI6ImIzOGE2NjI4NjQ3YTAyYzBkZTViN2FjYjkzOWQwZDE4OTZjOWM3MzAxMDZjODY2N2Q4MTBiZDQ4NjZlYmFlZTQiOiIzNjYzNzA4OTliMmEwZDZmMDQ5ZTdkODIwMDYxNTk5YTY3NWNiYTVkM2JjODJhZDc0N2ZhNzMxYmVhZDhlZmIzIjoiMTk0N2Q0NjhhZTRmYTRkYTdmNDVjZmFmMzJkNjJhNDM2OTc5NmU1MzJmMWIwM2IxNDk1NTg3ZTZiYjk1ZDgzMzBmNWI3Yzk2MmE5YjBhMmI3MTVkOWRlZjc5MTk0NzQxODcwZTVjNDdkMTVhNzMwODg0M2UxMDYxNmI4OTFmYzllNWNhYjdkYjkwMWUwZjFlZmJlMTIxN2RkNjI3YzcxYjU0Yzk4Y2VjMGZlMWIyNWE4NGNhYTU2ZjBiZGUyNDdhOWQ5MTgzNTg3NzQyYTM4ODI1MjM0YjZiNmNjODA4YWZkZTM2ZWY1ZTE3YmNkYjJjNzJjNzY0NTk0OTI4OTM2OSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNTFlYzQ5ODdkZGFjYmNmNjM0OGU0YTg5MWZhNTcxYzZlM2FlYzAyODc5ZWIwMTgxYTEyMWE0ODQ2MzQ0YTY4N2NkZmY5Nzk4NzYxODc1MzIwMjU2ZTVhNTliYzk0NjYzZmFhYjg4NjRjYzBiYjFlNjQzNDNjMGI5NzhmY2MwZDZlODRkMGQxN2MxYzFmNDA5M2ZhYzNiNGMwMTgzN2M2YjM3ZDE4OWQ3NjA4ZjBjMzM1ZWIzOGZlMWY0MzU3M2UwYzUyNTA5M2Y2MGVmNjE4YmFiMjk3YjhhNGQ5ZDhjMTYiOiIiOiIiOiIiOiJhZGUwNDczMDA1OTQ3MWIxODI5YmVjOGRmYmIwZWM3MDhiZTdiNGU3N2Q2ODhjZTdjZmJhOWRkZGUwNTlhNTJmOTY5NDA3MjkxNDQwYWE3OTQ5MmY4MjdmZTFhMmY2NTY4OTg5ZmQzNmI0ZmQ4NGU2Njk5MTUyNTM2YmZmMTUzODhhZjMxOWZiMzA2ZjA3ZGU0MzA5ZWI5MmJhM2RhNWY3MDA3OTQ4MzM1OTkzNjk4ZDM5OGJhYzQyMDI5OTEyYmVjNmJhMzkyMjZjMmJmMjM4NzMzYjUwODFhYTBhMmNhMzkyYTcxOTM4NTE4NGJlNjE5ZDljYTU2NzcxZDhlMzcxNmE0NmNmYjMzOWY5M2ZmNDhhYmU0MDZlZjc4OGRiMmFkYTQ1YWI1ZmNiN2Y2ODliZDgwMWE1Y2NhZDg1NWI1MmNkNGJmMWQ2ZTMzOGYyYzNlYWM5NGNlOWZkZDBkZDA2NjMyZDAxZGVkMzc1M2U4Nzk1N2U4NTY5YTY3ZWNjYWQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImY4ZGZhNzA1MjRkNDZmMzU0NWRiM2M2ODdmZTg1YThlYTM1ZTMyZWRhNDcwYjRlMTRiOGIxMmY0ZTljNmJiZjZjMDhlZmE5YWUxZGY5MGFlNmYxNGI4OTVjMzQyYWUwN2I1ZThkNTYzMTk5YTE0MWMzNGU3MDljNmU3NDMyNjBiNTczZjg4MTg2ZjQwZjgwMGM0YzBlYzlmOWZiZWJhNDlmMTAzYmZhMmQ2MmQ3ZWQ4ZmM5ZmY4OGNiMWRkYzVkNGNhNGQwNzRlMDA1M2MwNjkzOTNkNzBhNWIzZjFkZjNlIjoiIjoiIjoiIjoiMDVmNGU2MDliMDg1ZDI4OTU4ZjU3MDJlYjdiOTlmMmUwYzdhODBmMDk1OTA3YWJkNWI3MzI5NjI4YWE2ZGNlMmUyZjhiZGI3YTI5OTIyNjFlYTQxNGU2NDM0ZGM5ODE2MmQwMmM1MTkzNjU0MjIxOGEzMWM2MDcyZWQ1NWM5ZWQ4M2M3OTY5OGRlN2ZmZDM4MzVkNWU0ZDBmM2EwYzJhNzBiZWYyYjZjNjAyZDFlMGNjODE0YzcxYjJmYjFhMDAxZmI4M2EwZTJiZWZkZWM3ZTQ3NDk2Mjk2OTM2MjllYTIzOTdiMjk5Y2RmNDkxNDE1ZGRhNDQ2ODE3ZGQ3ZDI4ZGE0MzFmOTUxNjJkZTgzZDkxN2Y5ZTkzMjU3NzRlMmY3ZWYwMmZlODA2N2NmNGJhYzQ3ZTJmNjFiYTIzNWI1MzJhZjNhYTk1YTY1MTdlOWYxMjg2ZTA2NWNjZjliM2VlZmE2Y2FiNGM5NDBjODNlZTlhMTFkYTU1ZWUyMWM4ZDA2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI3YWI3ZGE0N2ZmN2E5NWViZjIzNjdkZTBhMjVjNzg4NWQ4MDkzMTQ0N2QyZjVjYzczYWU3ZjY2ODQ0OTEwZTQ4MWUwNWY1M2NhOTkzYjAyNjZiN2NkZTg5OTYwZDY4MWEzZDNjNTY4ZDlhNmUzNTM0N2NmNTJkMmUwZmY3YWQxMTQyOTgzZmQ3ZDJjODQ4Njc0MzE1ZWQzZTAwOWFkYjcxNTRmZGUxZjJkOTAwMTljYWMyMTBkYmZjMDYyNzlkNDhmYzdjMmU5MDA2NTJiNWNiNjM4YzEyNjBhY2Q4OTZlYSI6IiI6IiI6IiI6ImYwMDcxNGRmMjQzMTAzZjU0YjRjMGM1MTZhN2E2MzE0MzFkYmVmZGVjYzMwYzA5ZThlODM0ZjA5ODgyMTAwYzFkMDI3NjI3MzU2OGNjNjM1MmMzMDI4YzE1NjM3MTM4OTA3ODIzNmFmZTU3ZDAwZWRhYTIyNjI2MmYxYTdmNmUwMDExYmE0OGQ0YjhmMDg5Y2QyNTdiNmI3Y2ZlODBjYTJiYmVlZTk5NjM1YzI3NzI1NDU0NmQ0YWRiZjA0NjkzNTc5MWJlMjFjNDhhNzg4MmVmNmNiODFmN2JjY2RmY2Y5YmM0MzBkMjFjZWYxZDc4OGQ0ZjRkZjZiZDZlZjViY2JmNDhlMzVmMTE2ZDQ4MmQ4ODBmNTk3YmNiY2ZiYmY2OGJjNzdmNTkxYmQ3MzQ2ZDdhMTA4NWZiYzFjMjcwN2MxN2JiMjg4Y2U2YmZiMGE3OGE1NDczMTQyMTc2MmYxODE0Mjk3NWI4YjNiNzlkZWMwZDg1MmRjYTgwZjE2MzhiMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNDBlODNjYjFmYmJlZmI0NDQyNjM1MDkxNmIwOTk1ZmI2YTFjNTM5NGYyZmQ2MjU3NzQ0NTk1NDhjZmFiMjdmMmY5MmUyZTg4OWQzZGVlYjMzZGZkNmM0MGY2MTBiNzFiNzAzODdhZjhkNzA3NjhjNTJiMzZiYjJhNTlmM2FkOWExNmJlOThjNzI2YzJkNjVhZjQ1N2IyZjdkODFjNzVmYWU4MjUyM2M5NzdjYmRmNjEzOGIxY2JlNWE5YjNhZDQwMmJhMTk3YTMwMDlkYmE0NTlkM2Y1MzRlYTE0M2U1ZGMiOiIiOiIiOiIiOiI1MmNmZDRhNDc0MWI2NTc1NTc4YTFiN2FhYjkxYTM2NjM0MWNmZDQ4Mzc5OWNhMDhiODUxYmIwZGMyZjJiZjY0MGU5MGMxNDA2ZmQwOWZiZjkxNjZiZDU1ZDQ2YWFhZWYzOGUwNDQ5YjcxODdkMDE5ZTY4YTNiOThhN2RkOWNkYWM2M2FlOWM5NjZkYjRkOTAxZDM3Y2MxNDc4MzVkMDE3OTE1OTAyNjIxMjE2YmMxODM1ZDcwZGMyMTAxYWU1MGUwNTQxZjc5NmJkNmJjYTJlNTMyNjBiYTMzNTNlNmFhNGVlZTU2ZjgwYWEzMjkxNzNlMzQ3ZDgzZDA1MGRkZWI0NjVkOGUxYWE1NDUwZTZlN2ViNTE1YTkyZmJjZGZkODUzMGYwNGZhZTNkMWE0MWIxMzE1MWE0ODI3ZjA2MzRkNmU4MDQyNGMxZTkzNGNlMGUyMDc3ZjVmMzFmZDE3N2U5YTQyYWNmY2FhNjdkNDA0M2ZkMzFhOGVjNzJhMzllNmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjM5OTI3ZDRmZDBjM2ViYTIwNDQwMDJlNjViNjBkMzk5NGMzYWFkMGM3MDViY2UyZTllNDFhY2EzMGE3YzJmMDNlN2I0OTY4ZDhlNzI5ZTg2OGY1ZmQ1N2I0OWE0Yjg2MmIwYmQxNjlhNGUyZDc3YmQ1OTc0NWU3NzhjYTZmZDc2MjkwMWFlM2MwZmNjNDhhMGQ2ZWUyMmJjODUyMGVjNDUwNjMwMDU1YjNiNjZiZGQyZGRlOWY1MjE1ZDI0MWZhMjY2ZDI0MzQyYjUwZDQyZTJkYjU0MzZhNDc4YzdlYmFmIjoiIjoiIjoiIjoiOTYxOTRkZDFiNmFjNWVmYjNkNDc4N2JkMWZiNGM5Y2MzMmMyOWI2N2VlMzQzNjlhN2FhZDlhNTZmNjRmNTM1MjZlOTIwN2MxZDRjNTQxYzZlMGRmNDk2MGM1NGUxMDE2ODI4NDg5MTg0MWZlNTU0YWRhYTUwMTJmMzI1YjNhZWE3OWZhNGRiOGMzNmU2N2EwZjkxNGQ5YWIzNjFkOGJhMGIzZDZjYTQ5MDQxMDNmMTRhMzBhOTBkZDZmZDdjM2Y2NzljMjcyZGVlN2YwMTExMGY3MjI5ZjRmNWI2ZWQxNTJhMDE0OWRjNWE3MTg1YmY2MzdkMTA4OTliY2E0MTdjYmE4ZjkxOWEyODAwZDhhNzJkNTU3NWYwYzE3NGY5OGY3N2ExYWZhZDg1MDMzNDIwNGU2NjE1NmVmZjQ1NzJhNjcwM2FhYjUwYjg1MGE4ZGY0OThkMWQ5NmIxZTJiYzFhYzM0YWE0Mzk5ZjNiMTNlOTdiNDk4OTUzOWNhNzhlOTdhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJhZDEwZGJiZWRmOTgwYTBjMzM1NzZmNzYwNmUxNDc4NWIyYTkwMzc4OGI5YjdjYjRjMjljZjc0YThiYmVjODc3OTk5Y2EyOGMzNmM4MzViNjA2ODBiYWI5MDA1ZDhlNGYzNDFiOTcyMTNmZGI2YTUyZTc4M2QxOTg1MDkwNmNiNjQzYmNmNDhjMjkxY2QxODZlYmNiZjBhMjg3ZTQ1OWQxNzk1ZTI5ZmZiMGM3Yzg0YjBmNmRmYmUyMTliNGY4NWQ5ZmI4OTNjMGNmOTEzNDI2M2E5ZTZhMzZjNzZkMDJhOSI6IiI6IiI6IiI6IjVkYjI2OTcxNGM0YWI3NzRjMmViMTRlYjk1ZTliNjBjNmNjYWE2ZTkwZjlmODc5ZTI5NWNjMDA3MDY5ZGQyMzE4OTRjZDhmZTBjMDliZjc0OGUyNjk0MDE2MGNkMGNhZDc1ZGQyZTMwNWVkMWYyNTI3YmE4NTdjNDJjM2QwNjYyZDI1Y2JiY2ZlMzQyOTEwNDk4Y2VkMzA5Y2RhMTg5NGExMTg2YWI5MzVmYjYxNDY0NmQyOTljYTU2Zjg2ZGVmZGQwYTBmNTJiYWVlMWI5YjliZTA1ZGY4NWEwNWMyMjU0NzVhN2NlMWNjNThlYmM0ODhhNGY1N2ZkMWY5ODM4ODE3NTRkY2ZlM2JkNzhjYWM1MjllOTk0NWM4OTM4M2UzMzFmMDE3N2U3MjE2NDRiM2E4ZDgyZGVlZjU0OGQxNjFlMDg1Y2ZmNTk2NDVhMzQ1Y2Y3YWYzZjM1ODJiZWQ1YjgxYzdkZTdhNmEyMTY0MDNiYjg4ODA0ZjdkMTZjZWVjOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiZTk1MDZkZDA1YmFjNDc1MGY1ZDViNDNlMDY2M2VjYmE2NDQ0NDU1YWI2ZjY2MjgwMjg5N2E0OTNjYTExZmYwNWY3NjA0NWI2MjEwMDRmNGE4OGZjNmIxYmE4NTlhZTc5NWU0ODQ2ZjE3YzNiMWMxMjdhOGVmMTZkMzIzODFlMjdlZWNhNzdlYzA2MmE4YThmODExZjVkZDdmOTA3MzcxNDdmNWZjYTJiN2NjODkwMDliMDM1MDI5MmI4OGQxZGU1ZGU5NGUxZTgyYmQ1ZjdiZjJlMDY4ODJhOTI1OTc3Y2UiOiIiOiIiOiIiOiJhYmMzZDY4YmI5YjBkMjk2NTVlZTIwNTdhNjBlNTlmYjg0YWZiYWY5Yzc1YWM1ZDE0NmE5ODU2Mzg0MDIyZTQ4NzNhNmFiYjk2M2Q4Nzk1ZGVkNWNlMzNmOGRmOTI3NWY4YWU0YzNkYTAwMzc5NzM0ODczNDg2NDU0MTVlZDUxNDU4NTI5YmQ3YzQ5OTYxMjhjOTQzZGRmYTIxNDg0NTIxZmM2NDU3MjM4MDIzMThmZmQ1MTkxZTk1N2VjNDUzYThlOTIyZDQ4YjFlODM2ODFjMTQ2M2EwM2MzNDE3NWE1ZDYxMGY4ZjM3MDliMzA0NGY0NTA4NGY5MDE3MDQ1NDdlMzAxZjk4MDdhN2Q5MjAzNmUwOGEzZWVmNzkxZjY3NjU5ODE2ZmNiMjg5MjJiOWI1MmUyYTRhMmU4MWNiODQ4ZjlhZTU3OWNiYTM0NmIwNTA3ZTkxZjI2YjcwZDE5OWFjYjZkYTVkMzU0NGI4Y2FlYTc2MmY2ZjMwMTc4NjM2ZDgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImYxZjAwZWJiN2NiNGJiYjNiMGEwODNhMjkwZDRkM2NjNGRiNTNhYTllYjNmMmZlYjFkNDI4Y2Y2ZDgxMDRiZGM1NmIyYTMwZTc1NzgyNjkzZDc1NjVjNWQxYWQ2ZWRkNmNjMjI5NjdlZWI1ZjE1OTk4OWMyZWQ3ZmRiNjIxMDNjMDU1NDU2ZjVlMWEzMTYzYmZhMDM0YzUwMmNjYmQ5YWE3NTM4NWQ0Nzc3ZDAzYTgyNjA2YTg5MGM4OWEyMDc0OTRkMDgyYmVjYzIyZWZhZDhmZTY5YzM2N2ZhOWUzMzUwIjoiIjoiIjoiIjoiNmI3NWFhMTRjMTI5ZDAxMTE5MWI5MDE2YjA4OWFmMTViODA2YTQ5NGU4ZTc2M2E3ZmU5MDI0NzkxNTU3MDRlMWE5MmVhYjQ4Y2UyOWZkMGYxZTlkNWEyMDE0NzU3YzNjZGE2ZTAyMWRlZmRiOTFjNzk2Y2JhZDcwOTY1OGVkYWQ2YzhmN2FiNmFlYmU5NzhkNTA3NDU5MTk4ZTA3MTllZWM0OWIxOTI2YTdjNGUzM2UzNGU4ZTM2Njk2NmUwZTRlN2YzY2UwYWVkNmU1MWQ3ODA0ZDgwM2FhYjU3MjU3ZmYxMjUwYWU4Yjc2YmZjNDhhNTA1ZDQ2MDBiY2NkZDk5MmQ1NjRiMzljMzUxOWRiMGM3ZGQyNmY1ZGJhYmRmM2MwOTg3MzU2ODhhYWQxYWY4NTI1ZThhNmEzNDM4MzViZWQwOTQ3MDhiNzhmYWEzMDBjMDg2MDBlNjM4ZTZmMjRmNGIyYjc4ZGYwZDc0N2ZmYmI5NTIxY2M2Nzg2YjljODlkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIxZjNiYWRlODZmNjRkYzA3NzBkYWZkNmE0OTAwZjYxYmFmMDAzYzZkY2NlYzQ5Njg1NmI3YjA4Y2I5OWRiOGYzNzFmMWM5NjA2NjAyYWQzOTdlMGM3NTdmNTZlYzYxNzZjMDRlODMyMzAyZmQ2ZmJhYzM1MTlhZjZkMmNiOWRhNWE4NWVlNzBlZmMxOWM3MzUwMTQ1ZTkwNGE3ZmE5ZDMxOTllMWY2MjEzOTk5ZWUzYmJkYmNkMTIwMGI0ZGQ0ZTdhOGYxMTJmM2EzNzg2NWU0OTRiZjg1NDkzNDllOWU3OCI6IiI6IiI6IiI6IjFhNDIwYzUxMDUyNTM0ZDVkNzczNDdlZDU3NTFlNDQ4MTc4MjRlZDc1NDY3NzkxYzk3MTc4NzVkYWRjYmNlZmYyZmZlMDI0OTUyOTU4ZDQ3MThiMmI0MDI4YWY4M2VjZjM2M2Q1NzM0OWEzNjQ3NmMwMjAzZmNkZjQ5NTI3OTRhYTY2YjM2OTJlN2IwODEwY2UwNjA2MDE4MTdhZDA3OTQ1NzRiMWNlMTJkNmE3YjZlYzFkMGIxZTBhY2IyYTZjNDUzYmU4MWJmMmQxN2UxZmNhN2RjMWM5YWM1ZmU0YTY0MDY5Mjg1YThjYjk0MDgwNTFiYTVhZTRkYzBjODg5N2I0YTIxNjEwOWIyMmVjNTZhYWNlOTk1YTQ1M2YyOGRkN2QyYzM4YzdkNDQ3MzliOWYwOWNhMGU1MmQ2MmYyMDRlN2Y0YTA5YzNlMjMxYzhjZGFmNTRmOTQxZThkNTU2NWIyNTE1NWJlMjFjYjMxNjQxN2E0YzAwNWY3ZTgzNGQwZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMWIyODhjOTRhOGFhNzQ5OTg1MGQ3YmY4MjE3NzAyNGYyMGU4Y2NkNTAyYjdiMGY1MjljNDcxODVhYWQ0ZWI4MmNhMWVmYzAxMDRmOTNjYzM1ODg1ZTk4OTQ2NzFiOWQ3NGZhODIzN2Y1ZDc0MGZlYzA5ZTkwYjg4YmM3NTEyNGU1NjRmMWYxOTgwODFkNTFjOTUwZGJlZjZhNmViYjJiNWUxYWVjMDA4ZDhhNWE0YzY5MmY2NDY3Yzc0MGY1MDI2ODA3YmFmYzA3MTBkYzhlOTE5N2FlZTQzNzJiNDI5Y2YiOiIiOiIiOiIiOiIzZGFmNzJkOTQwNTZlNmM3MTM4Nzg3MDA0ZjQwYTRhMGM4MWEyNDRjOGFhMTRjMzMyNjc1ZTk3NzMzMGI2MzMxNTkxNmQ4ZmU2YmE4ZjBhZWE1YTIyZGVmMzQyZDQxMzZkMWQ2Yzc4N2IzYTZjNmMwNWE0NGVlMWNmOWIyZDg5MTE5NzQ5NzRjYmY3YTE0ZWQ1YjgzZmNlYjhkZDhkM2VkNTkxOTRkM2ZiNmNjZTU3OWE5NzI0NDA5MTczMWE0YzFjYTFkNmU0YzlkMjYyM2E0MWRlNjY1ZWUzYzgyMzZlMGRhODcxMDIwOGNlZTk0OGYyNDgzMjk3ODFmNDBmNmY0YjQwMTA1MDhjMjE5NzU1YjZkZjc1MmI5NTIzZWQwYzk2NDRiMTcyNTBiYmM4OGI0MzM4YzY4OGU5N2U5NTJhOTI0ZGE4OTRmYzk4NmY3ZTgwN2ZjYTQ0NzdiZTk0ZGVjOTkzY2Q2OTEwNzA5ZDgwMzJmZDNhNWI5NzYxMmNkNjUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIxZTE4MzdiNDY0ODZiNmU2NTcxMzMyNzI0MGJmYWM2YzYxOGU4MTc3ODdjMjc3Yjk5NWM5MmRiZTAzYjliMDFkZThlMTAwYjMwM2NlNWJmNTA0OGRjY2ZjZTRkMjQwODc4ZmZkNWRkY2I2NzU0MjkyMjkxZDFhNzllZTFlNjJiNmRhNmIyM2Q3YTgzZDBmZTllODQ3NTdkY2ZhNTFkMDU3MDlkNTQxNDJiNDJkYzg3NjUwNjg3NmIxMzZiNmRmMzRiNDg1YzBjMTI5NTgxOTcyYmNiYzY3NGI4OTNhZDYxYiI6IiI6IiI6IiI6IjIzYzI1OGI5M2Q0ZTk5NDM3ODNlODhiMjQ0YTUyY2RlNjc0N2Q4ZDdmZjI4Yjc3ZTJkZGZhYTJlZGNiYjI5ZWFmNDFkYzc1Y2RjMmM1YjU4MWIzYTU5ZmUyMGU3MDUyMjNiZGQ5MGU3ODZmNmM2NDk4MzMwZWM5YmQ3Y2E3MzAzZTUzYzBiMjFhYmVmMTQ5NzIxMGY4MjIyODUwY2E3ZjAxZTBhZjRmZWZkMzZkODJlNzExZmIxN2Y1ODFiOTUxZTk0OTg3NmE1ZWYwYTIxMmZiNzNhZjRkMzJmNmJmOWZlOGM5ZTYwODQ5ZmQyMzExZjNiNWNiOGE0YWJlODU2YjNkZDYyOWZiYWM0MWU2ZGZiNTAyZDE4OTQwODhmYzUyODMyY2VmZmY4MDc1NTU0NTdjMDNiYTdiN2RhYWYwMjgzMGQ5ZmY4YzllOGVkMDlkZGJiNjhkNjUzMGFmMGNjNWFlOTM4M2FjZDM0Yzg5ZWMxODlmNWE5N2FiYmYzZWQ1ZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjY3YjJhNmUwOWJmMzFlY2VlOGZlOWM3MTk0OTFiYWYzYzZlZmMwZTI3NTE5MTU1Zjk5Yzk0NjY3ZDcyNzQyMDI2NTI1NGVlNmQzNGM2YjljMDM0MTQ0NTJkNjg5Mjk4MTJmMWQyM2FjYTQ0YWRmYWY2YjAyZjUxOWRmYzNmMDM0YmMzMmMxYjc2M2ExMjlhOTdjNzI1OGU1ZTc3YmE2OWQ2ZWI0NTliZTJjYzk2ZmQ2MTUwYjYwNDBiYWJjYzQwNjE0M2JkYzJjMTg2MmM3YmY2NjA3YjRiZTk1ZjMxNTFmIjoiIjoiIjoiIjoiZDBmNzFlNTZlOTc1ZTQ0M2JkNzM2NGVhZmZhOWRiZmI2MGE4MmJkMGVhNjQwNWRlMGIxMzAxOTExNDQ5YWU2YWMwZGM4NzkyYWNkMmIwY2EzZTY4YzJhYmI5ODIzNjJlYjJhN2E4Zjk1ZDI5NjA1NzlmOTkzMjA3MGM5Y2Q3YWJkNTdhMzY3NTliMmM2ZjEyZTIwZGJkYThhMTZhMTdjMjliNzBmNWJiOGRiMGVmYTk0NTFkOWEzNDliOTkxN2I3YmMzOWFmNmM2YmU4MjE3ZTBhNmZiNTJlNmE0YzQ2ZGZlNDFlNmE5Y2ZiYTg0MzM1ZDAyNTRjYWQwNzU1N2ZkN2FhM2ZlYTE4NWM4Yzg4YTkyMWVhNjY1ZTQxMDA2NzM5NTc5MTc4NWViZGYxNzkzMDM4Y2VlZjZjNTkwZTY0YWYwMGFjNGNlNjlhYzNkMGI0OTdmZWI5M2I0ZmVlN2Q1NWNmMGZhNDBkZDQ5ZWE3NDhiMzNmMDM4YjUwOTc1NzhjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMzc5ZDBhMzhjODg5N2E2NTI0ZDZhNTlkZjRmMDliYTk3NWMxNDZiZTdhMzk4YzNjYmRlOGMyMjJmY2Y5OTgxMDJlOTgyMjNiODFkZmNhN2ZiNWJjOTJiMTY0YWZiYWY1MGY1OGI4ZGYwNDg4OWRiZDY5YWNkNTlmN2Q1YWMwOGY4MTk4NDkxMGVlMjBhNGQ1OGM1MTUxMmEzZWQ4OTNkN2I3MzZkYTg5NGEwYjUyZjc1YzUyMDhkMTRmODU4ZGZkNDIyOTBmNDE4MWI3YWEyNDkwOTdiOTNmYjJiY2VhYjgiOiIiOiIiOiIiOiIxNjZmNjQzNjA5ZGNiODk1MTE2MWNhMTViMzY2MDc1OWI2OWRhNjE2YjQ1NzYxYjhjZmVjMDFhOGE3ZjUxYTBiYjFjZjI1NmM5ZmFiZTY5YjI5NTUyZjhlODYxY2JiMzE2MGI5MDVkMjQ4NDVkMzY4YTE3ZWJmOTExYTgzOTM4NGMzYjNhYTZjOGRlZGYxZmRlMTIzODRlYzk1MzVhYjlkMDA4NzI4OTc4Y2E1OGFkODg3ODBjZGMzZDI3MmQxZGNmMjA1OWI5YmRjMGQyMzExODEyZmIxYjU1OWUzMWY4ZTVhODllZmNiMmIzM2M3MDU1NTVlZTBlZmIyM2QyYzRkMzEyZmUwMmI5OThlYjc4YWY4NWUzODM5OTYzYWZkOThjMWM2NDRlZDQ0OTNjM2YxYWYwY2IyMTBlNjYwNzQ4Y2FkY2ZjOWVmODVmYTNiNWZhZmUzNDU3NTZjYTM0ZTdiN2Y4OGQzYWZmODc4M2U5MmRhMDBkYmVhZDVkNTFmODkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI5NjA0MWMyMTFlOTdkNDgwZDE0OWU3NWM4NzY4ODZhNzhmZWUxNzFlMGYzOTVhOTUyYTBlODczYWY0ZGMyMmI0NmNkYjY4YTYwZGQxZDU3NTMwMjdlNTQ0NjQzYzU3NjRjZDY1ZTIwMmViODIxODA0MzAwZWE2MThlOGZmOTc4NWYzYmYyZmJmMWIxMDQ4Y2Q0NDUwMzk5ZTJmNjQyYWYzOGJjZTQxZGY4ZmRlMzIwODA1NWUzNGQzNTZiMWFhMWIwMTgwNjczZTg1MDdhZjIwMzVmNzVlOWZlNjI5Zjk3OSI6IiI6IiI6IiI6IjUxNDc1ZmZiYTMyOTkxNzgxYjE3ZTM4ZWE1OGIwOGJkZTQwZjAzYjY0ODI0MTg3Yjk1MDYxNTNmNDFjMjMzZjM0ZGJkYzUyYjYzY2ZjNzFiMTIwYjRmZTZjMjg2NmQxMWU5YWFmNDRmODJkZWRkYWY5OThjYWE1NmE0ZGQ1OGE2ZWEyZThmNWUzYzRlYzdmZWY3M2U1NjIwY2I2YTc3MzEzYTRiYzBiMTM1YzU3ZDE4MDg1MDEwYTRhMDI2MDU5YzJhYmQ0YjZkMjA0ODM5M2M1NDAwMzQxOTI4ZjVlZTZjNWEwNjNkNjc5ZTE4NWViOWJlMjgzNGExMDA5ZDAzZDI5OGI5YWJiMDlmOTkzYThlZGU1NGJkYzRkOWE5NWMyYWY1NTUyYWVkOWZiMDJjZjU5OGExOGI1Y2ZlNmM4MTFkMWNhNGVkNzY0ZDA3NTZmZGZjYjVkMDNhYWMxZWQ4MGZjODY1OTU1MzljMTA1ZGE2YjY2YTAwYTkxY2FmNDRmZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjQyM2NmNmZiNDQ2MDVjZjAzZTMwNjNiY2ViOTJjMTU2ZTM4YzViYWRmYWFjMzU1OTMxMzlkZjQ2ZDMyNTI0MmM4NDkwOGJhZWYyZjgyNGJmM2VhNjZlNzRiYjQxMjdhMGM1NjUwYzMzZjY4YjVkMzM1MDJiMWY1NWUwNmZlMmMxMTY5ZmIzNDY4OGEwOTI5MWQxZTEyZTUzOTBhNzNkYTEyNWJlNGNmMTU2OTJlM2U2YWQwYWI2ZmZiMjJjZjNmNzdiMDAzMzM1MTdlY2IyMjM5YzliODFlNTlhNzJkMDg3IjoiIjoiIjoiIjoiNDFmMzM1Y2Y3MjdmZmVjOWViZmU3Y2IzNDhkMTFjZGI0ZTVlNDlhOWEwNDdkODM0MmE2NjU2ZTVkMjM1MjE5YTVkODA3MTUxNjY2OThjYzFmMTZlMzRmNzQzODExYjgyMGU2ZWE1NWMyYmRkMGRiMWI5N2VhMjI2OWZiZjYwYzczOWZlZWQ4MTgyODJmNDQ3YmZlMmJkMGI5YTdjNDc5MTQ0ZjAwMTY3MDNhZmY0NTBhYmJkODdhNTBlNWU1YWYwZDJkOTQ2OTE3NTU0MjczN2JkMTE2ZGUyYTczYWNiYjc0ZDlmMDA3N2EyMjc3MDRmMjcxZmUwNjk2ZjA3MTkxNGRjYjljMGYwMTkxZmVlMzVlYjY2MjQ4ZWIxNzk5MWI1Mzg2NDk0NTdkNWQ1ZjlkNGJiOWNkODFjMzNhMTRkMmJlY2NlMDAzYzE0M2M5Y2ZlMzljY2FjNTEwNDhlZjE2OWY2YTIyMTQzZWNhNzIxZDA0ZjZlMTQ3NzQ5YTQ0YTc1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjBiMjMwN2MzMmYzNGQzZjNjM2Q2ODg3ZmIxN2ZmNjhiMDFmMTU4ZWYwNzQzOGE0MWNkZTI3ZDJkNjcyNTI3N2YzM2Y2MDg4OGFhMzJiOWI3NDA2Zjc4ZjQ3YmQ4NzdhMTc5NTQ5NmY3NTlkNjkzZjNmOGJiZDY1Y2I1YjI1NjJjNGE4ZDRhNzE3YjZiYjhlZWFiYzRkOGY1NjExOGE5N2QzNzg3ZDMwNjVmMWUyMGU2ZDcxYTFkZWU1NjNmZGIyZDU2NTYxMTI4ZmE4M2Q4NjAyZmUwZGEzZTg5YjAxOWUxIjoiIjoiMTY4MTViZjU0ODJhYmM5NjkxNzkxNTJmNzlhYTM0YTA0YzI4ZDQ4M2U2YWM4MWFhZTE0ZjdlMGUwNTFhNTY2MiI6IjkzOGMzNjNkZjI3NDBiYTljY2QzOTE2OGY5YmJjZDdkNDIxNTY2OTU1ZjE0MWUxM2VkMDM5YzRkODYxOTUzOTIiOiI5NTk1MTdlMGIyN2Q0NjFkNjc4YmEyZGQ1MjhiZmI3ZTg0NGY3YmYxNGExNWZiMTc2ZWZhYmIzYTUyMDBmZjJiMzczYzdjMDY4M2YwOTU3OTg5NTFkYzdmZmQ2MmIxNzJlZDgxNDk1NGM0NDA4N2ZjN2E2Njk1YTVhMjc1YmM4YWVjZDNhMmNhOGVkNjMxYTllYmY1ZTFkMWM1MTU1NDJjNjdmMzFlMTZmZDNlYmM3ZTIzMzNjN2RmZmNmMzg1ZjBkNmViZTE2YjllZDQyOTk0YmU5ZjgzZDBjYzFlMmIzYjU3NzNjZDI5NjM2MzlhYzc0Y2U2NGEzMTFhYzA3MjYwMTRiY2QyMTM4MThjZWNmNWQ1NjJjZDFjNWU5N2JlNDAyOGY2NDQwMGNmZjMxZmNkNTg3YTAwNGNmNjBmMDNjNmYzMjIyZTRkYWJhZTVjNGJkZWY4ODE5NjcwZjc3ZjkyMjdlYWY1NWViYTUyMzhmOTBjNGJlYTRmMDM1ODhiNjYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMDYyZjJhYTdiNDhjOTgzYzFjNmQwMGQwNmFhNTIzYTY3ZDRlODZlNWJkMjY2NDUxYmIyODZkY2M1ODg4ZjBmNDk0MGMzYjAyMmNjNzZkNjhlMTcwNmQ2MmZlYTg0ZDA1MmEwMTliOTIxMzM1ZjY5ZWQ1ZGNkOTAyNjMyMTE2NzU5YjY4ZTA5YjUzMWRlMjc2YzkyMzhmYWYzYTk4MDI4MDY3NTA0NTRhNTI2MGJkODA4Yjc5NmNiMTIxMTYzNTRiOWE3YWI5Y2UzM2Y4ZGJkNDBhZTdlNzRhMDdjZmNhMDIiOiIiOiI0YTIxN2JmMTM2YzM4OTRmZjdhM2NhMDdlYWZhZmEyODZmYWZjOGE4MjczMjhiMTA1YjNhOGFmZjI4ZTQ5ZDE0IjoiZTQzMzQ2MGU5NDE0YjIxZmMzZDVlMjcwNWMwOGEyMWEzNmFjZGU0NDU4ZTI0Yjc4ZGNjNTExOTliOTdjN2E5YSI6IjVjOTgwMjQ3YTFmYTE2ZWEwODZkNTQwODQyODFjNWZkMTE0Nzc3ZWQyMTQ3OGJlZWU5ZWRiMTc1YmU3YzQwNjZiMTk3MDY1ZGE1ZjRjMTU3NTA3ODMwMzllYjRiNWUyY2Q0Y2NkYzJhNDVjNDljZTUzNWYwM2EzNjY1N2YyMThmYzYxNmIzZThlZjBjODRiNzhiMGNkMWM1NzQ3NzI0MmJiZGRiYmRlMDk4YmU1NzNlMjBkNmRkYzc2NjQ5ZDcwNmU3ZjZjN2NhM2Y0NGM4NDVjMmM5YzlkMzE2YWM4YjczODlmNzI2NGM2ZjhjZDZjNTZjYTU1MDNlNWIzN2Y1MmQxOWU4ZDQ3Y2M4NWEwNGEwMTk2YjkzODc0MzNiY2EzYzE4ZGMzMGI0NzAzMGZkMjk3NzA1MTAxODI2ODQwOTkxZWFmNWI4NTZhNWFiNzVkMmJiYjcwY2IxM2UwZGQxODc2ODAyZmMyYmQ3NzZhNTE4YjlkY2I5NDg0YzQ5OTY0NCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIwZmM3OTU3NmJkYmE3N2E4MTUxMDhiYzljZDJkMTY4ZWUzMGY5YWI3NmRiNzA2MDBhYzk1ZmM0MGMxZjZiNzI0MDY4YzEyYjk5Y2I0OTI4MjQ3ZTY0YjJlYThlNzVjNzI4Y2NiM2RlMThhZGZlYmUyNGVmOTllMTRhZDU0YmMxYjNhNDg2ODkxYjAwYjFjNTUxNzJkMTZhZGIwMGFlNThjOWQ4YWUwZmE5ODA5MjQ1YTU2YzkxMTgwNDgxOTk3NjdkMzVjMDI2ZTY2NjQ3NzM1NjJhZjAxMWMyY2E3MDI1ZCI6IiI6ImIwYzIwMGI2Zjg1NDg2NDM1MjlmZDQxNGM2OTMwNTRkNGZlMDRkOGY3NmMzZmI4Y2NjNjk5MmZmYzI1ZTZiMTkiOiJiOTFiZjE4OGNiYWY0YjAxMzUwZDcyNjU4NWM2ZjM2MDFhMjZiMzY1NGRiMmUyNjkwYTE0ZjE5ODlmODNhZDg1IjoiN2M2NGU1MDNlZWE1YjNkZjQ0ZGMwZWI5ODYxODhjMzEyYTBmNWZlMWYxMTMyMzk5ODQ2MDhhNjljY2FkY2U4YTdjN2YzMTM2MTY5ZTA3NWIwYzYxODEyYjFlNzRkZmU2YWIyZTdkNmYyNDdmNzM4NTlkYTVhMTA2OGM5MmVmOGU2YWVkZDk0YzM5MDRiOTczYWI4ODdjYTNjMzhkZTcwYjhiMzEyZTMyYTcwMjcxMDgyOWRkZjk2MmYwZTA4Nzc5ZWQ5NzcwOTc1NTM2NTU3ZTNmOTEyZWYwZDVjNDk2OTIwMmFmNTAyNTIxMTdlY2E4MTgyYzMwMzg5YzliODRmZGE5NTExOGY4Yzc0OGYwYjE3NTJjMWU1OGI4ZTBhZjUzMDM3NmFhMzRjZDg3NGNmNDk2MjhiZWJiZDczNTNhYjRhNWY2NGJiYzhlMzUzNzc2MmZkNTU1NmM2ODAyOTBiMmM1MjMxNTM0MzJhMmUwZGYxNjU4ZjJhNTUwN2EzMGE2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImZmZGU3ZTI3MjZlODljY2U4MTZhYjNlMjI1NzJmZTMxNDM0ZjMxODFkMDU3OGQ1MTE2MWNjNzczMDVlMjU2MmI3NTUwMDhjN2U0Y2NjOGVjNjI4MDZiZGZiY2Q4NTA4YWU0MThmY2IwYjU3YTRkMTAwNzQ2OWVlM2Q5NTlhMDdlOTQ5MDk0YjBhM2U1YWY2OWFlYTNhOTBhMjIyNjMwOTc4YWY5MTM5MDI3YTY1NjE1MTIyNWEyMTgzYjkyZTk4MGZmZjliYTk4NzY4MjRiYWZjZjE4ZDYzYzkxNmZlN2FlIjoiIjoiYmRhMTc0MWIwYjM5ZDkyNDhkZDA2Mjg3MDMzNGUzM2NlY2RlNWM1ZjYzYTA3YTMwMzBmOThiMDIxYzY4NDlmYSI6IjFiNTMzNmZjYmIwZWQxODNlMGY4MGNkMzFlZGU0ZjMyNDk5N2ZmYjg0MmE4Mzk1N2Y0MWQyOTE2MTJjNTVlOGEiOiI2MWQ1NDJlNDc5NGU5YmQ0YWNlZmVmNGIzMjVkOTU0YzhlYzZhMjkxMzg0NzZhYjFiYjAzNzUwN2NmNTJjMTdlZGJkNTExNTc5YmU1YzIzMmE2NzI2OWVmNDIzNjRjZmI0ZTJhYWVmYjMxZDllOGUyNjBhMDRlNTFkOTVjMmVkNmM1ZTBmMDk1ZWZkOTJmYmQzNmVkY2FlNDM5MzY1OWFmNmJiOThiMGI3MWIyODFlOTFlMWRmMzdjMzUzOTg3YTZhOWUyNTlmMjczNWZkMTZiOGMxMjc3ZGY2NTFiMjZhYzNkOWYyOTJjOTI1MmJlN2ZlMDlhYjc4NTFmNTE1MzI1YTA3OGNkNjlhNzU3M2E0ODEwYWI0NjBjNGM5ZTc2MDRlNTQyNDJhYjk1NmZlNDcxZTkwZjg2NjEzZWNlNzM3MmYxYWE5MzRhNTBkYmQwNDU3MDMzODQzYjg4N2MyNzlmMTRhZDZiNDk2MGY0MDFiN2ZiNzc3MjUzY2E1ZTI5NWYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNzk0NmZlN2FkYTRiNTQ1MDkwZDc2NDdjOTlmNzE1OTRmYTA5NDU5MzExNWMyMzg4ODE0NmIyN2E3Y2NiZmQ3N2NlMzA1YzFhZTRmZGRiYjc1YTY1ZGJhNGYwZWExODg5N2JiN2U5YWZmMzEzOGJhMDMwMDA1YTdkMWM1ODAyODM4ZWJiMjA4NDhmOGU4MWU3ZTgwMThjZDBkMGRkOTIxMjQzYzA5NGFhNzEwZjZiMGIyZWEwMDRiZDY4NDc5OWUzY2FlZDhjM2M4OTQ0ZDVkYTk5NWI4OGZhMDcxZDc1MjYiOiIiOiJiMjlhNTA2YzdiYzhiMjI4MjU3MDIyMzIzMDY2NDE5MzIxNmRkNDdmN2QyMGNjZGQzNTk0M2E4OGM1OGMwNTAzIjoiM2E0YzAwY2QyZjI3OGYwZTgyNDk4ZDMzZmI2YWU5ZTAyMGY0ZDM3OTNlODMyYWZjOTg2NGMwYjdiNmNkYTQzYyI6IjhjMDY2N2Q5MTNiMTM4NjZjN2VhYjk4NDcxMTA5ZDk2NjkwMWZkYzY2ZmE0ZGZmODk5NmNlODFlYzUxODVjZTM3NGIxMThkYTM0ZTA3YmQ4MjgzM2YyMGZhNGU0NGVmMTU5ZjliMGM0N2MwNDYzMDdhNDg0YjNmNTI4MjJhNTk2YmNmYjQ5YjU1NWVjOGQ0ODFmYjMwZTEzZGM5ODk4ZjA5M2QzNGNiYjRkNjk2ZDcwMTYxMzE1YzQ4ZGVmNzNiYjFjOGI0OTQ3YzhkZGFiMTAxZDQ5MThmNWNjMDBiODkwYjc0NTBlNGUxMGMxN2M0NmVhN2Y1ZTBhMWRmNjVhMWZlNzRhZDI1NzdlNTkyZTdiZGRlYWRiMjQ2ZmE2MmNmYTViYjg2MjAyMjBiMThmZmYyOTZhMTlhNWEzYWU2YjgzMzMyMWNhNzc5YjdjYjViNTU2NTg5MzE2MTBkOGI3Nzc2MDg3YzQxZWU0ZDA3NzQwMDc1MzY4MWM3ZGE1YzVhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI1NDU5NTAwZDVhNzA5Yjg4YmYwNjdiNGMzOTA4MzdlZWY1YWUyZTVmMTA5YzExMGE4NGNmMzJmNTYxZDI2ZGRjNTY3YzVmNGNmMGY0MThjYmMyYTU2ZDQzMjViMjcyN2Y4NzVjYjFjZWVkMzE2NzEzNmYwZDkzOTQwNDE3ZjYxNmEzODQzYjY4NmFiNGY1ZGQzZDgwODgwMTA1NGM1MTBmY2E1ZWE4ZmEwNDY1ZjlkMWFmZDhlMGM2OGFmZmExMGY1YWY2MWU1OTRlNjZiMmJkYjIzNzJjYWEwNzEyYmZmMSI6IiI6ImVhZWM3Yjc1ZWUwM2NkZjA1MDhjMGNhMTcxYjAwNTA3Nzk1NGUyY2VjNzIzMGIwYWVkZmUzMmExNWNiMWM4NTUiOiJjZGFmZTQwOWI4NzE2MjVhYjFiMDZhOTNjNGQ1YTFmODE5Njc3NzM3MGRmMTg2NDNmOTcwNTBkNzc1NmFkZWNkIjoiNDg2YWE0MDYzYjM4NDBmMDQxNzAzNGM2NTY3NmQyMGRhMjJjNTEwZDI4MWJiZjQwNzg1NWNiNThhODdhYzliMzM1MTFkNjkyMzE1ZDg4ZDI3YmQ1ZDFhZDVjMzVlYzhiOTkwMThiNWNhNjQ4OTdhZmY0ODU0NGE1ZTU3ODEyNGRkYzAwZjc4NWRlYjYwYjBhNjBkYzQ4NzNmYTlhMTQ4ZGE0ZGZhMTU1N2JhYTNhYWZhMjI2ODBhNDBmNjUwZTQ5OTJkMjFlMzVmYWIzYmU1NDU4ZGFlMTNlYjJjYWVkZGQ4NzA0ZDY2MmIyMjFiZGEwMWFjNjMyOWUyYzQ1MWU4NjVhZjk3MDFhN2NjYjY5YzBlZDBiYWViMjI2ZTZmYmQyYjg3MWI5OTQyMDk0OTU3MGJmNWZjNjFjNjczYWFjYjU4ZmVhYmRiMzA0Zjg3MDkzOWQ3MDU0MjZhYWU1NWNiM2EyZjMyMDZjMzNhYmQ0NTNlMDc3YzQ1NjVjNjAzYTE4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjdlNzRiMGE1NDEzZWUyYWQ4ZGU4MTRlYTFmNTU2Y2E1YzU0YzZmMTExNTlmMWZiYzc4ZmFhODZhNzRjNDg3MWExMTY1OGU5MTdmZWQzNDhlNzc5YWFlNTEwZDM4MzI5MGJjNmM0ZjEzMzkxNzA5ZjhhYTliZDc5ZjM4ZjMxMGUyZmZiZTdmYjFiZTNlNmUzYWFjOWQ4NzlmMWU1ZmIzZWIxZmU4MTY3NWNiZGQwOThjZDI4N2Y2NmZiOWIyOGQ1MGUxMmE2NGI5ZTA4ZjI4YTQwZWQ0NDZmYzNhMTI1ODVjIjoiIjoiZDE1MmIwYWExOTQ2Y2YxNzdhYWZjN2Q0NzMyMmY4Yzc1NjgzMTU1MGVjNzlhZGI0MGYzNDY4MWZkNmIzODQwZiI6IjE1MjIyOTM4OGNhZjVkYzUwNDU0YzI1MTRkOWZmMWE0YjcwZTNkMWQ5YjhiMjlhMjI4ZDU5Y2U2N2U4YmM1ODYiOiJhMWUyMDQ2NzI5ZTg0OTQ4MmJkNjkzZTIxNzc5ZTE4MzcwYTU0MmUyZmM3YmFlZGJlZDA1NDQ3NmYzNTQ0N2UwNjliZmRhMzNmYTI3MjNhZDQyNTcxN2MwMjdlOGIzMGQ1N2RkMmZjYThjZjI2ODg0OTM1ODM1NDQ3OGNkOGJiNDJlOGY5YTczN2MyZTNkNTQ5MDk5MWU0OTAyYTUyZTg2ZDFiYWZjMTc1MWY1OTA4YTM2YWZjYTJiNmI0NjYzY2NjOWYxYWE0NmU4NTdlMmVlNjFlNGRjMTlkMTU0MDI5ZGE0OGQ1OTUxOWRkZTY0NDEwYjFkN2RhZWI1YjdiOTMyMTNjYmExYmIwNTk2MzcwMjNmOTI4ZjE2ZTU5NDRlMGVkMmNhMDdiZTM2NzRmZWQ2ZTBkYTcyMzEzYjNjYjgwYjdhMmQ2NTMzZmM4Nzg1NTg3MzY2Y2ExYjY3NjlkYjgwM2Q2ZDg0MGM1ZDFiNmM0NTg5MjcyYTNmZTkzNzFiMGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNzBiNWNhYjYzMzkxYzU3NzdlNGU2MDUxNmI3MDk1ZGVhM2NmMjZkNzJiMjdjMTlmNWEwOGRlNjYzNDMwNmQ5OTJkZTRjM2Y3MGJmMjg0OWE0YzNkYmVhZmIxNjNmNWQ1MGRjYmJjYzhlNmY0YmQ5NzM2MzZkYTk1ZDcxZDM5ZDZmZmM5ZTY3MzMyMDg4YmY5MDY5MjFiOWM0OGE3ZTNkZTE1ODc0MGE5YzBmMjlhN2I2OWQ1NTQ1ZTM5MDAzMDk2NWUzMDVhYzE2NTM5NTgzNjBkMDE2MDdiY2JjMzlmYjkiOiIiOiJhYjA0MmQyM2FjY2Y5YTk0NzNiNDNlODI2ODNlMzBmNDM2ZmE0OTJiYTRhODkxMWU0ZWQyNjIyZDQ4MWUwY2QxIjoiYjcwN2UyZDVhNTAyMGQzNzY1NjAwOTcxM2JiMTAwYzU1ODE5YTk4ZTIyMGZiZGZkOTIxYzZjMDcyNGJhNzIzOCI6ImYzZjgyYjdhYTA2MzliY2FiZWNlZmM3YjA3YjNlZWNjOTk2Mjg4NDI1MGZhZDExYjkzNTEyMjZmMTM4ZTA2ZTNlOTUzZTA1Mjc5MmQwMTI3NjE4YTI4YWFhYTFiZjUzNzRhMDYzOTNjMThhMzI2ZjhkMzQ3MTAxMGY5ODQwZGQxNmVjOTk3ZjUzZmI5ODFhYTJiNjg5YmYxY2RiZjI2NWI0YWI2OThmOWU4ZTljMDU0MjU1MTQ3ZTA0NjU0YjhmYjFkMGZkM2EwYjY0ZDM4ODBlZTZlOWZhODdlMDE4NGY2YmEzMDdmNGQzZmVhNjUxNTU2ZTBiYWVlYjc1ZjMwOGZhMzI5MjVmOGM1NWFlMGYzNTVmOGRiODQ5NWVjNmM0NjAwMzc2M2FkNGVmMzY1OTBlYzQwMjM5YjVlODUzMGFhZGFhYzkzMWZlZWZjOGUzOTJjNTUwYWQ0ZDg5ZjViMzE0YTUzYTA2MzNjN2E5M2JjMDViNTg4MjczZTZkMWQ1NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDAsIDI1NikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJjMTc5MTRkZDZiNzNkNjVlNWFmMTEyNTM2ZjUyYjA0NmQ0OTYzZjljOTA5OGM3N2Q5ZGZlMzVjYTdlZTYzNjZkNGMwZmVkNTc2YmE0Y2QxNGNhYTNkMGM0MDZmZmZhZDJmMDc0ODM2MjE2Njk3NWY1YmNiOWEzOTVkNTY4YjhkYmRlMzM4M2M1NjU0YmQyNGYyNjg5MGIyMWVlMWYxY2IxMGYzYzkzY2YyZGY2NGNkNzY0MTg3Yzg0MDU5MGE1NGJhYmM5YzI4MWRlODhhZDFhMWRiYzI2NzdmYTg2ODdmOSI6IiI6IjRhNjFlZTkzNDlkNTNmOGIzYzFhZjM2ZmUwYTkzMDNlZjg5NzA1ZmQ4N2UwNmU1ZjM0YjYxZTEzNTAxMTEyNzkiOiJhOWFkMWNhZDRjYTdhNWFmNGJmYjgzNjgwZDRiOTE0YzIzYTZjZDU1MWU4YjAwMmM1MGYzMGJlMGQ4NjkzZWRmIjoiOWFiMzBlMzcyOWRkOGIyYWY5ODdkY2I3OTNkN2EzZTFmYzRlYmNmZTBhNGFjOTc2ZDkxYmQzODk3Nzc3ZWZmYjIxMGM4MDc2ZTlmZDEzNTk5MWU1NGFiYjRiYjhjN2IxODNhODBlZjM3MDc3NjkyZTUxOWQzOGRmNGEwNDMwNGZkODNmZTFkNjdkMzIxNDdmZTBhMjQ5YTZjOGJjNjAzZDk5ODc4MDM5Yjg3MzU4OGMzNzgxYTE5MzQzN2YwOTgwOTRmZDhjMTI5NDVlZjk5MDM2NDQyYzgwY2QxZjU0NDcyNTA0MGRmOTgwYzU0OGYwYTY3NWFmYWY2MmExYjdjMjI1YzljZGYwNzAzZTYxM2M3YTVkNzJjOGIwMGQ4YmExOTliOGVjYjQ4YjZlMGIwZDEwM2EzYjBmNTdmZjFhNGI5MTg5YTIwZGVkZWFjNmViMjZiMWY2NmVhMGMzNGRkZGVkMTBhZjJiMDEzM2Y0YjViOTVhYzIyMzlkZDk0OTE5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMCwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjJhYTU0MjMyNzBkMDg1OWE2ZTNhYTMwNjlhODhmM2FjNGMzMGVkYTdmNmU1MmFhODkxZTRmOTk1MjQ0YTgwZDczZDczZjc4OTU2MWIwMGNlZGRmNzIxZWE1OWE3ZWRhMzE1NzA5MGVjMTkyYzU3OGZjNTNkMjMyYzM2NDUzYzVlOGJjM2M5YzIyZjNhZWRiNmE5M2Y3YWE2Mzk3NWQ5YmQzMzY5Y2Q1MThlNTcwZjZhZjBhYjE2MmU0YzkzOGQxN2RjZDRmM2FlNDZkN2NkNTAyZWY3M2IyZDQwZjUwZTJhIjoiIjoiMzJjYWUzZmY3NTdiNzlmMjMwNWE4YjVmNWZmZjVhNzdhZmI1ODFmYWY1YTM3OTZjNWVkNzA1NGQ3YzA0ODAxNyI6IjYzMmViNmYxYzgyN2NmMjk5ZjM0MDNiZjgwYWY3MjFmZTVmZjgyNDUzMzFmMWNjZmJiOGY0ZTYxZWY1ZWRhZGYiOiIxYTg1YzM2MTMxYThjMjcxZDZjODA1MjMzMDk4YmIyOWY5MTA0ZTYyNTRlMDY4MGM2ZTI2NGE3NmY3OWVjMTdjN2FjNjVjOGE5NzYxMGEwYTdlNTMwNGIzN2QxZWJkYmUwMmNmOWRhYTllNDViODFkNzVkOGM2MTNhZmI5NzRlYjM4ZGM0OTA0MWVhZmE3NDYyYjRjMjcyZmRkM2Q3ZmQ0YjA1YjFlNjE0MjMwNWZmZDZmYTYzNGRkZGU5MGUyNzNiNTFiMDJjMGI2OGI4MjNjNzdkZGYzZTkzYTJhYjk0MzZkMGY0ODAxZjA4YTExM2VlZmVlZmVmYjk1OTI2ODM5ODE0MjNmODMyMzVmOGU1NjNlY2RiNGU0NGRhYTlhZmE1ZTE3MjgyMDRkZGUxYmQyNTRjNzk4NWU2ZDU2ODk3YzU3MGIwYzYzMDdmZDQ5YWU0ZGNlMThlYTU1ZWFlODQ2YWYyYTVhY2FhZTE3YTcxZjgzNjliNjRmNDdiMGU1NGQiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImM2OWM2MTY4OWQxZjc3NjNkNDNiMjJiNmJjMjI2MmMzNzdjNjJkYjYwODM1MTE0NDQyZmQ1YmQ2NWM2NjU3MDViNTU2M2IzYjZlOWU3OTNkMGY0MTI4Njk2ZWVmYzVhYzYwM2IzZWRiMzViNzA1YWUzOTg0NWNlZmRmOGZkZTIzZjU0NzlhZTRmMDMzNDQyYWE5NThlOTc5Yzg5YmM0MWRkZTY4ZDkyZjA1YjI4YzM2NDQxMzNkMTk3ODg2MjRiYzk3MDAxOWExMGY2YjNjNmM1YjhkZDIyYjBjZWUzZTI2IjoiIjoiMTVjZDY5ODRmYWI2YWU3ZGI3MmE0YzA5OWEwNjRjZGZiZDE0MWRjZTM2MWZhYjAwMjE4NzJjOTFiMWJiNjVmZiI6Ijg2YzI5NWZjYzdmOWMyZWM5ZmFkMzc3ZTBlNGQwMTE5MzM0MDgwZjU5ZmE2OGMyMWMxOWQ3YTEyMTJkY2UwM2IiOiI5N2I5NzFlYzEzZGIwNDljY2Q3MmJjNTk3ZWJjMmUzM2ZlNGRhNjQ3ZDBmNzQ4NTVmMjQyODg0ZDM1ZGNmOTJkMDM0OWZkYjM1MjdjODdjNTQzMWMxMGZhODU1NjkyODUwOTZkMzM2OWJkMTkxN2M4YzdjODY1MDAyNGFjYjg4ZTViMTdjNDJiNTBhNzU0MTllMjk3NTdhOWUxYWUwOTA1M2NmMGI1MWRhYzQzNzg4M2NmM2Y1YjFhYmI0MGE3MWY0MGQyNzliYzlkNTk2ZDBmNTlmNGM3MGY4MTA4N2I0NDQ2YzQwMjI3OWY0NDg2MTk4ZWUzMjk0ZDBhNWY3MmViYTdiYTUyY2Q1NTI5MDYzNzFhZWVlZGI0NzEyMmJmZmIwZDVlZDI3YzNjYmI4NmE2ZmMyZDgzYWI0ZGI3YjZlMWVlNDY3ZGQxZWMyMGRjMTViY2VlMTY4ZjJlMjAwMTc5NzE0Y2ZjMDRlYWM2NTFhNDk1YTcxOGUxZWQ5ODViZmIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjRkY2M3NDI3ZGZmNDZiN2RiN2UyZDMyNzNlMDYwNWNlODVjNDYwY2ZkNDI2OWZjZTljYTNiMTAzOTliOTllMTc4YjEyZjI4Nzg2YjllM2RmNDU3YWMwMDE1MDA0ODQ0ZDZmNmJlZjI5ZWE1NjI4NTZlZTgyMjQ2ZDI0OTgyMzkzZjc3MGQwYjY1ZDBmZmM2NjBkOWQ4MzU5ZjEwOTA0ZmQ4Y2JiNzZlNjQ4ZGY2MGVjNDMyMzdmZjdkYzQ2YmMzNDkyMGJiYTYzN2EyYzE2NDNhNTNlOGE4OGJiN2JiOTdiIjoiIjoiNGMwYWI2N2I5NTIxODZmMmY4NWEwZGJkNGIyYzFiMGRkMDA5ZGQ3OTQyNjBlZTdmMzIxYjJkMmIzZDk5NGUwOSI6ImY1YmU2NjAwOWI3OWY1MWY2YWEwY2QxYTVhMjRhNzJjNmE2YzQyNjMyNjNjYmNmODBlOGUwZDUxNGEyYmJiMWUiOiIyMTFjYTU3YTMyMWNhZTJjNmQxYWQ3NTVhYzkyNGM5MmRkMDliYjFjNjMzNGVjYzU0M2JhNzhhMTg2MDg0Nzk0NTdiZWJkYTYzZjcwN2ZjMjgxOTBiMmQ1NmU0Y2ZkOTZkOGM0OWZkMTQ2YWNlODY3MjM2YzU3NzYxZWEyODMyNmUzZDI0MWQxZGMzNWQ3Y2E5NzFkZjlkMjkyZjI1NjNkMzNjNWYzMmFiZTg2MzY3Y2Y1ZjJmMDY2MjgzNzY3NTJiMzUzZjcyYjUwMWZmYTk0YTUwZjE0NmI4MTc0Y2I3OTQ2YWI4YzhiZTM4MjIzNzMzNGYzNzU5NDQxODg1MGEyMzNjNTM2ZDcyNzYzZjEwYjA2ZjcyOGUzZTYwZDNiNGYwMzc3ZDUxYjBkZTExZDExMGEyOGI2ZmNiN2M0MmI3N2U1ZjZiNzcxYzhlNWQ3MTNhMGY2YzRkODJhYjIzMTFjYWRmMTZiN2NiNDQxYTQxN2IyZjU5NWYzMmVhODIyZWEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImI3MmYzNGJmODIwOWEyODE2OGFlNzY5MmU0YzdkNmYxOWZlYWI5MzQ2OTcxYjg1ZmI5ZjM3N2Y2ZTRhNzdkZmIzNzBhMTBhZGRhZTc0NGFjMDNmMmYyNzdjODU0MjM5NDVmNDg2ODMwY2Q0MTBmMjZlMjJjMjNhMTM2ZDQxODAwODUwMTEzMzM5MjQyZTFhMDU1MGJlZjgxYTIzOWEyODlhOGQwMjBjMTQyOTg4NTRmMGIxN2FiYjBiYzQ2MWVkNmQzOWFiMmQ5Y2ZiMDNiODM1OTE2YzJhOGU5MzcxMGEwIjoiIjoiZTkxOWQ5ODNiZWFlNGI2ODdiYjM5M2Q5MGFkNDEwNDE0NmU4NjU2NDg0NTgwMGVjZjgyMDg1ZDViMjY5ZjFkYyI6ImFiYzhiNTE5ZGIwNWMxZGU4Nzk0MjQ4YzU3NDE2MjdjYzAwZWUzNWE5NzJlY2RlYzA0NWEwY2M1NTdhMmQ5NjciOiI5Nzc3NTA0NDczYWRhZGFkZTE0ZWVmYzAyNzlmODM0N2JiMTc4YTM2ZGJiNWZiMDI4ZjAzMTViNDMwOWZhZDRlZjU1NGJmMzRiMDQxNDZiYTRiYzI2MGE4OWNmNzgxOTVhZDFjMjNjNmU0NzNhMTQzODVjNjZiYTJhMWMwMDVjZGZlMzM2OTk5MjQ1ZjAwZmZlYWE0MWRmYTNkOWU2ODI5NGU1ZDY3NmYwMWYyMTNjNmQyZDhhNjliNDNlMzZmMmE1Njg5OTljMGE4YzA3ZTk2ZDdkYWY5MGYzZTJlNjY4ZWI5ZmM4ZTVjODEyYTQ5YTM5NTA3ZDE5M2ViN2M5NWI5NDdhYWZlNjU4YTEwNjVlZmU5MzcwY2Y4MTAxNGU0ZmZkNTRlZmZmZTVmODYzZTZlNGI3ZDg3NTU2NTYxN2Q4YjcyODU0ZWNmMDkyNjNjNTVkMWMzZjFhNGY0ODYyMjE0ZmFmZTdmMDNkYTU1NzIwOTVhN2JlZmNmZDhlNmVlNjMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjM1ZDVhNmNhZTVhZWZkYmM2MmYxZWZiNjM4YzE1ZGRhMzg3YThmNjUxODEwYmYwNjhhOGQ5MjYwMWZkMzdlMGVmZmZkOTUxOTZjMDljNjY4ZGRiMDVlZWYzZGUzMzkyMjJhMGJkMGQzYjcyMWEyN2UyZjI5YmU4NGE4NDZjMzk2NGViOWE4NGNmNjliMjE0ZjYxMmRmM2I0MTQ3MjlkZjQ5OWRhNGQzYWQ4YmYzNjEzYmRhZDNhNzBjNzNjYWU4MDU1NmMxNmY4YWI4M2FkZjBmMmJjOTM5MTA5NGJmZDk4IjoiIjoiY2Q2MDM4MTJhODQ0NDkyNTk5M2YyYzFhMDY5MWJiNDQ1OWZhZWRkODcyZjQzODUyZjk5NzA2NzVmNTc5YTFlYiI6IjE0NDFiNmQ0ODc2YjA1MGZhNGQ5NjlmMTg0NWQzZjExOWNmNWQ4NzIwYzM1ZGE5YzQ4OTAwMGU2YjcxNjVkYjQiOiIyNTk4MjhkMDViOGU3MzVmYWQ2OTUyN2NkMjMyMmY5NGU4ZTdhYzI3OTE2MDdjY2YyYTc0ZDA3MGJmN2Q1NTc0ZmZkOGQ2ZTQ0N2NiNGUwMmJiMTVhODdhYTg4ZDhmMTY2N2VkYzA5MDU0NTViMTE2ZWY3ZjA4Y2U3MjdkOGYyNjY5NjUyNDJlMDA0MjgxMGY5NDZlNTJhY2NhNjM0OGQ3MGUwMTJkOTk4MzIyYTE4YTJmM2I0YzRjNmQ2YjY2Y2ZlNjUzODUzMTIzNDRlM2VlZDE0YzZlNzI3N2VhYzlhNGQwOWRkYzVkY2Y4ZmNjZTZmNzlhMjNkMzRjODBjYjc4YWFhZjEzNDdlY2NlOGMxM2VmZDQ1MGQ1OTUwNjUxM2U2MmY1MjcxNzliOTViOWI1ZDlkZjgyMWMzMjUzOGY4ZTFjY2IxN2U5MTE4MjZlOTQ0ZWM0NDk0M2FkOGU3MjZkNTRmYTk4ZWJjNGQwMTJkMzRhMjM3NzFiYTQ5N2NhMmUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAwLCAyNTYpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjY2YWJmMTdkOTA3YTEzNDIzMmZhYWZmOTNiZmUzNjEyMjNiNWI3NzM5ODBjYzI2MWZkMTljYWFjYTAyMmZkMGEwODFjMTFlZmVlMDFmYjFmN2FiZDAxNDViMzJhNTFiMzIzN2Q2YWNlODc3Y2E2MzkyYmNhZTJmZDJhYTViODY1YWFiZmIxZDFkMWRhMzNmNDIzMTlhMDg4YzhkYmVkMTEyNGE3MWQzOWU2MjdkNWVmYWExZThmM2U1ZjcwMTE0YmIwM2I3MWNlNTRlNGY4ZDM0ZTgzODEwNmIyNDY3Y2NhIjoiIjoiMWU1MWYyYjY3NTM4Zjg0NDQwOTEyYzZmYTIwZmJmMDA5MTAwZmMzMDA4YjViOGUxMzA4ZDk1ZTdjYTUzYjQ2MCI6IjMwMWY5MWM2NTlmNzNiNjE4Y2I0NmE0MzQzNzcyZjFlZWU5ZmI0OTQ5ZWM2MzI4MTA5ODIzNzQ5YmQ4YjBiMTEiOiIzNGM1MzIwODI5MjZlNmQ1MzBiM2E1ODI4MmViNDY2NmFjNzM3NGU4YmVmYWE0OTk5ZGZjOWY0MDllNDBmZjk2NjY1MjI5NWQyOTQwZGI5NzA2MTgwMDU4M2JjN2Q0N2IwNTM1NTNhZDI5Yzg5ZWU2MTgwM2MxMDg5ZDMwNTkyMjcwZDI5MjcwMzEzNTM1OTJkNGFhNzFmNTlhNGJmM2YyMTQ3Y2I0MDYzMjIzNjc1NDRjMzhmYTVhM2M4Y2NiNTM0YmQ4ODQzNTViMDYxNDVkYjYyMTYxMjYwMTYyMDkxYzc5NTg3NGEyZTk5ZTAxMjkyYTJlMzllMTA3NzM4ODE4YTIxMTc1MGY4NThlZGJlMGMyZWE0NzM0YWQxNGYxYzQ1YmNjOWY3MzNmMDI3NjE2OTI2NTU4NTg3ZjczMzJiZTU1MDQ0ZGZkNmZjZGI2MjhmZjdkN2Q1ODE4MjBhMjE3YmM2NGFhMDkyZTQ1MDcyMjY4NmUwY2IyOTFlY2E0NWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMzdkYzIxYzcyZGM3YzgyZDVlMTNjNTFlY2FmNWE4YWUwNjQwMjUwMGQ5MmNhZjk2YzA1NTVhOTUwNjlmNGYwMTQ0YTk2MWVhZDVkNmQ5YmMzMTdhZmM4MjA2MjAyYmRkZDU3ZmMwMmEyYTUwMGRmMWZiNWM0ZDlkODgzN2I1MmE1MjIwZmRmMDY4ZmUyYjhiNGJjYzYzZmJjOWJmYzk0YzhlMjFkOTg3ZThiNmNiMGY0Y2QzN2IxNDRjNjY4ZjE4YjdhMzZlZDRlOTc1OGVlN2I5NjAyOWFhMGFiMjE5NmEiOiI0MWUzYjg5MzQ3YmQwMzViZGU1MTBhYjhmZjgzZDVmZGNjOWQ1ZjJkZTY0OGJkYjQ2OGE3MTRmMmMxMDgzYzUyIjoiIjoiIjoiYTkyOWVlMjNjNTgzMmU1YWI5M2NjYWE0MGJmNzc1NTkzZDdkMDRhMWE4NDExZGZhMDdiNGM4YTJkYTJkYzkxYjFiY2I5YzI3YTBiYTVhNzE1MmNlNWRlZDVmNzZjZjZiODNjMDRjMGY4YTRmNmI0MzM4M2FlM2U3ZDQ5NzI4MGMwZjk0NGJlOTFiMGJjYTZhNTZkZjJkMDA2NDFiZmMxZWM1NDliNTM4ODk4ZTU1OTQwN2IwNzYxNjQyNzhjMGViN2FmYjZkNmY0NDk1YTUwZDRkYTE3OGMwNGIyNTlkMjFiYjc0NTY5MmQzYmQxODZlZGY1YmIzZGE2ZjY2YjQ0MThmYzNkOWIwODViMGE2YzFhNWU1NDY5NjI3MmMzMDVjNGI4ODg3NTk1YjM5MWRkNmVkOGRhMDNkYzlmZGIyNzI4ZDhjNDBhMmRlZmQ4YWYwNWVmMWM0NDNhNzIzMjNmMmUwYjBkMjY4MTA5ZmI3ZTdlZTcwMTkyZmEwNmJjNmMyIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjBkY2JlYjY2MGNmZjcwM2UwNTk5MTNlZWJmZjRmNjM5YTI0YjYxMWEwNzhiYWU4ZjAxMzIwZWE0YWY1ZThlMGVkOTNiOGRjNGU4NGQyMjQwMzZiNWRhNjQ1YzE0NzM1OWM2MTIzYzU0Y2MyMzY3MjYyYTc1OTRiYzlhN2RjNjlmNzY1NDlhYjgwM2FmNjZkZThmMjUzZDMzOGQ0OGFiODI3YjJiMTkxOGQ2MzZkNmVjOTJiZmQ5MTIzZjFmNWZiNTliNmMzN2VhZGNhMGNhNzc5MmUyYjc5MzJlMWRkYzMzIjoiMWRlYmVlZDliYTU3OTA0MzdhNmM1NmRkM2M5ZTJmNmRmMDkxMmFhMGNlMmU1N2ZhOGVlYzk2NTJlMmVjY2ZjMSI6IiI6IiI6IjViZDgxNWIzYzNiYjczYTQ1ZGJhNzJjNjg0NTdjY2MxNzIxMmFmOTA1NjA3ZDgyN2U4YjVkZGJmZmEzNGEwNThlYzM2MGFiYmViNmM4YmExNmM3NzBhZTQ4MjYxMzVhYzdlNGZhZjIwOGRhOGI1ZmUzYjI2YzE2ZmE3YzdlZjQwMDBjM2RmZTFiOGI3MDdkZGU2NGI0MTVjNjcxYzQ2MTVkNTZlMjY0ODkwOGUwNDdhYzk3OGEzODllMzQ2Y2ViZTkyMjhkYWE3YmNkZjVlMzQxZjcyYzNjN2ZmNzQ2NzJlZGQ2MGM3YzYzNDE3MjY0NTBmZmJmOWUzZTdhMTY1ODBlN2U2MDJmOWRkZDNmMzU1NjEyOTA1MmRlMDU5OTE5MDdkODFhODc0NjdmZjU4NDJjNmU1ZGNmZjQ1NDNlMjRlZTQ4MTQ5ZjE2ZTkxMDdhOWFhNDBjYmNlMzY3ZDRiNzYwNDJkNzdlZjE3OTBiMGE3NzAxYjJmMDQ4NzNkMjQ1ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJkOWJkOTkxMjhmZTI3NzE5MThhZmM2ZGI2YjI1MTRlZWEwYjYxN2Q5YmQ0NTk5YTIzOGQ5ZDk5YTdjZTE4OTk1ZThkODU1NDJmM2Y5ZGQ4OTkyMGIwZjc5Yjk0ZDdmNTUxZmVmNGEzMzBlOWRlMjRlYjE5N2JjNzU2NzdiYzEzZDgzNjExMDQ5OTdhZjk5ZWEyYzZkYTAzZjRlNzFjODllMDMxOTFiYzVlMzIwZjA1N2FmZWU5OGU5OGZhY2I5OWQxNTE0MmM2MWRkZDcxNjY2Y2RjMzgxNDZmYmMzZWE0ZCI6ImViNzAxYTlkMTE5Y2M2ZGMwZDczNTI1NDA2N2RmZTE2MWIxMDUyYmEzZjkzYWIwZDZiY2MxOWNjMDM4NzAyN2EiOiIiOiIiOiI2N2I4NjIxM2E4NDc3OGE5YTM4ZWI5OTEzYjlkYjg1MDhiNTNhYzBhODFmZjg1ZGM3OGM5NjZkNjM4MjU1ZjhmN2M2M2NlMDZkNGE2NmY1ZDkyMTNlYzJiMzJmN2U2M2NlNWRjZjAxYjU5ZDNiMzA0MzNmMGNmNGMwNmMxNzFkODM5OTUzZGU5MTMwOTNlYzg0NTY3MGIzOGVjYWNkODExNjJkZDczNTAxYjJlNGMyZDlkYzY5Yjk3ZDQ5YmQ2ZDlmNjI1MDA3MGVmNmIzNjAzMDVmY2M1ZmYzOTJkMWFkYWQ5OGQ2YmZkYTY3ZDEwYjcyNWM3Y2M4ZWY2YjRmYzIwNmZkZTE4NzE3MTJiOTZkY2JjMmRmNGYwOGQ3OWYxYWRmN2ZiYjAxYmZkOGYyMGU3Njk1NmVkNGI5ZGQxZDdlNWZiNGY5MjJhZDJhNTI5YmQ4NzE0OTBlNzQxODQzZDgzOWU4NzZjNGI0NzVlMmZhMTQwZjI4YWM4ZDM0N2EwN2IiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMGRlM2ZlZDNiMzYzZDIwZWM1MDE4ZDRhZWFmYjI1YzhlMGU2YWE0MmVlOGI1Njg0MzA0M2Y4ZDljNDBiOWJkYzhlZDQyN2QyOWM0NjlkODk3NmE1Yjc4NWQwNTBmM2QyZTVlYjI4N2EwNjRjNTQzMTFiYWIzMmRjZDVmMjQwNjgyYmFiZWY1OWM2ZmZhNjAyNjY5ZjNjZTQ1OTBiMDU0ZTI1NTA0NDRmMjQ5YjU2NjY2YjdiMmZiZWMyOWIzM2QxYjI5ZWU2NTNlMzg4ZjlmYjU0YjAwNjM1ZmY1MjZkZDkiOiI4MmI2YTQ0YjBmMzVmOTQ2ZmEwZmQ0NjI4NzM4ZTYxYTBiZGQ0MjFhOGRlNzNmM2QyZWZhMjUyMTZjNzg5MDgwIjoiIjoiIjoiMWY3Yjk1MWQxNDdkZGJmMjFmZWY5ZDQ4NDkwNDRjNDRiNzU3MzA5ZGE4ZjAyNDRmNzFlNGQ4MzAxZTFmZDUwYzVlNDY0MDdmNWJjYmVkODNlYWVmZGY4OTgzYzMzMGRkMGE2NzU2OGU4NjZiMjBiNDhjMmJjOTdkYzYzYTdjMGQzZWI2MGYyNDg4YjFlZWZkZmFhN2I4ZGQ0MzEzMjUxMWI0YTJjYTgwYmM5ZTgyODUxNTg0ZWM0YWU0NjM0NDRhYWRkM2M4ZTZkYjJkNDQ2OWFkOTc1MGUxOGEzMTMzNzYxMzk3NWIzZmEwNjI5YjlhMjJiY2NiMjM1ZDIwMTU3YTQ0MjdhY2Q2MTkzMjRlODgxZTY4ZjU2MTVjNjVlNTlhNTY2YTczZTRjZTlkNDg0ZmM1YjBiMjkxMzdjNGYzMzliZTg0NzgxY2FkNjdkMTdkZTAzMDk5YjFkMDNhYzQ1MTA2YzFmMmViNWIzODBlYzg0MzkyYjdiYTVjOTFkZjRjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImFiZGMyYWMyNGJhN2Q5MmVkOWY1MThkOTU3NjUxMDk2OWY4ZDIyMDc0YmVkOWI3NjM5Mjk5ZDIxMzc1MzJjNTBmYWE0OWI1ZTg0M2Y0MTc2OTNhMmVlYmQwZmZkM2YyN2MwYWQyZDhiYmZkYjkxMmVkNGQxZWM4NTE2NWQ0YWU1NzdhOTJiMWFmZmFiNjMwNzBlMjVkY2E4YmIxYjAzNWM4YmJjNWQzYTA3YjRmZTA5NDY5MGU0YTQ1Yjk5ZjllNWJiNmIwYmZlODIzZjNjMmExNDg3MzJmZDQzZGI1ZTVkIjoiOGM3YjE4Y2UzODk2NjRmYjcyZTc3N2U3MGI1MzNjZWQ0YzA0YjBjMjkwZmRkNDViODZiNmI5NTcwOGQ3NDE4NyI6IiI6IiI6ImMzZDE0MjAwNTVmNzFhNDMyNjRhYjhkYTkyODI5ZmExYjg5MzczNDYzNzUzNDlkMmUyNTY3MDVkOTMzYTIxMzUyZGRiNGVlY2ViMzZjZGVhYjM4Y2FlNThkYTgxYmNiZTZkZWFmZWNhNWQ3ZjAxOGEwNTE0YmJjMjg1ZjQzNmI1NzRmZmFjMjU0N2QyNmEzZjlhZWYyMWI2NmMxZTcwYjQ1ZDM3MmU0ZGMyMjgxMTgyYWU5NDY2N2U0NDJmMzllMWI5YjJmYzJhZWUwNmFiMzA2MDk1YTkwNDYxNDYxM2I1MTNjZjFhZjVhOWRmMTJiOTk2Y2JlODhjYzNiMjU0MDE3OTAwMzRhZDA2MjJkZjQzYWY0Y2RiZjljYjY4MTUzOGM3OTE4OWE4MjYwY2Y5YzM1Mzc4OTU1ZjJlYTg1OWZhYTc4NzczODU0ODgzY2Q5NGJkZTRjMGY1MGQ0Yzk5OGMyNzhlNDc3ODdlM2Y3NGYzZGJiOThmNzEwMzY2ZDMxNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJkMjAzNTNlMTc1ZjRlYmQwZWY1ZmU3N2Y3ZjZmYmY1MzQwYmEwNzkzNDgyOGRkMjk2YzA0MWE2M2RlODQxMDAyZGIwZDIxZWNiZmQ1ZWRhMmJjZTgwYmVkNmY3M2MyM2QzZjE4OTAwYmNjMDI3OTFiYTljYWU2NjhmYzMzZmM2MGJhODRjNmViNDBhZmJiZmZmMThiZTVjNDk2MGNlNTdhZDY3ZGZjOGMxZWFiZTYxYTI5OTg4MWMwZjMyNmY3MDkzYzFhMjMyYzgwNDY3NzcyZTcwN2RiZTc1YjU1NThkNCI6ImYzOGYyMzQ2MWM0NzExODFhNDE3OTMyM2FlZDI0NzI5OWRmMTFjZTE0NWZiYWI5ODM0Yjg1YjNjYjQyYTEwZjUiOiIiOiIiOiI3NmE0OTk0ZWRiYTNkMGQ5ZmZlZTljY2I3ZTEyYTc1ZTc5YzVlYzEyMTNmNDVjYTRjNTBhZDYyOWFjNTMzZTVlNmRiZjU4ZjhmYWMxOTM3NTVlNzRmOWU3YTc1ZWVkZjg5NDcyZTkxZDM5NGUzMmVhZWQ4NmVmYTRmYjJmOWU3ZmU0YmVjMWQ5YzdhMzBmZTliZDE3YzJjZGE3M2QxMzZlNzUyYTliODE4Y2VlNmYxMjYyMDI4MDMxYmMwOWNiODFiODkxNTYxMzhiNTcxZjAzYWZhNjlkZDM4OGE4MDdhOGNiZTljNGRlNjZjYWQ3NjQxMTRmOWE0YTY0MTllYTcwY2NiYmJmZjlkZDc3NGFlYThhMmQ2YjFkMjBkMGE1NzdjNTk5NTM2NjFmMGE4N2I0ZDc5NWMyNjI2YTAyNWQ3MzNmNDNiYjVjZDFkZjM3ZjVjZjU0MmM3YzhiNmJkYTA2MWNmNDY5M2UwMzg0MDYwZTYzMDkwNDE1ZDc0NzBjYjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiYTU4Y2E1MTU0NjU5YmE1OGZjMWI0NjhjOTA5YzY2N2UxYjUwODc4ODRjMDFhYjE1Zjg2ZmI1YTQzMWU5ODJjMWMwNDFiZTBhYTAxNGZiMzEwMDE5ZmZmNjVmNDBmZjEzZDQ0NjliMTIzMjIzYWU0NGY0ZjRhYzBmYjY4NzdhNzg5MGY5NjlkMzkwNDdlMzlhYjIzODgyY2Q3ODM4ZTE2ZTY0YmMzNjFmZTE4MTM2NDcxZGVhMmU3MWE4NmVmMmQ5ZjhmN2UxZDI0NjQzZDdkZjI5MjQwOWZmOGNiYTBmMTMiOiJkYzA1OTgwZTQwZjA3YTAyZmRiMTUwYWY1ODBhN2QxOTViYTI2ZjRmYTcyYTFmZTUxM2NjYzJjZjZlNGY2OTlmIjoiIjoiIjoiNmFkNDU0M2MyMThjYjZhYWZlNjVlNmE1MGM0ZjllZTlkNWM3YTNiOWEwMTEyYmNlMjYyZjQ5ZjViMGQyMGRhYjcyMjVmZDBhY2ZmYTI1MTY1NzI5ZDhmYmJhMDM4ZWI2NWY3ZTcyZjEzNmU1YmI4MmU4ZDk0Njk4ZGQ5Yjc2M2MzOGYzMDQxY2NlY2UzYjA0MTg5YWFhYmVkNzllNGQ0MjEzZTI0MjE4YzVmY2NmNWY5YTBjMzkwMjg3NTU2NDQzMWY0ZDY3MGU2ZTYwZTFkYmFiY2M0NjQyYzNlZjg5NWMxMTVlMjg3MDI5MjdjYjk4ZDUwOWY5MzQxYWM3YWUyYzZlZjZjMmRjNDUzN2U5MDljODFhOTgwNDA1N2I2ZTI0ZmE2M2VjNWVkY2U4MzVlNjI0OTY5YTk2OWUyYzQ3YzZkY2I3ZTliY2IyYmI4ZjM0NGQyYjk4NTVhNDNlMjZjMDYwNjQ2Njg4N2IyOGI2N2ZmZDdmOTlkMzc0ODEyZDExIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjlkNmU5OWExMWQ2M2NhYjVhYWJiMTQ2MmFiZWY2NmJlZjMxYTI4ODZjZDE3MjY1MWJiZjMwZjY1YjE2ZmI4ZjNiOTNiNTA0MmE5MDg1MTBkODUxODMzMDUzOGEwNjI1Mzk1OWRhNTU3ZDJiMzkwYzZmZTBiN2FjNmIxODU5MWU1NzkxZDI3NWM3ZTNkNTU4NjkwNzE5ZDU5NjdkMDI2YTgwNjA0YTM4OTk0NmUyYTU1NDg2YjVjNDljMjk4NDk5MGEyZTE0ODI0YWEyOTIyZTZhNTk4OTJjNWU2ZDk2OWZiIjoiYWY2MzFlNzk5MDM5NDg4OWI4NGQ4NTE5MjBjZTg4Nzc5MzRlNzA2Yjc4MDkwOGEwNzIxMWQ0NWIyNDc1ODRhNiI6IiI6IiI6IjlmMzNiYTkwODNjN2Y0MDg4Yzk1MDU2MjJjZDViNDkzN2I3MTg5YjBjYmNkY2YzNTJjNTRlZjcyMDU3NTk0Yjg1NjhjZDRiMTNhNGJmZWI2MTI2MWQyN2Y1ZmViYmYyY2JiZjkwMmE4ZDU1ZjZiZGY2NjkyMzhhZTg0YjhhYmM1ODgyNjg0MWY3ZjYyYTBjNWJkOWY3NDEyNWNlY2JmOGUzYjRjMWVjODg2NjMxMTRlN2MyNDhjNDFjY2U5MmU3M2IwNWViM2Y4MjYxMDBjMWIyNjgzY2JiYTk4NWQyYWI2OTRiNWRlMWVkODYyNDYyODkxN2VjOWJiOTc3MzNmMzM3Mjk4YzA0NTlmMTk4YzdhMTM4ZjE2NzBkZmFjMGQ1OGYyODdiODI0NGYwNjA1Zjk3NDA2ZWY1MjgwOTlhYTJlZjI5MGRiMjAyYmFhN2ZiMjIxYTg1MjMzNDRhZDgzNmM5YTJiYjI1ZTFmZjNmYjRkYzIwZjY5ZWJjOWYwZmRkOSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJkZjdjNTc1MTlhZTM5MTRjNzUxNzRiMzEwN2I3ZGRhYjk1ZGY5MzZjNWNkN2MyOTZiMWNiMWVhMDYyNDk5MTVjZGEyMmJhYzE5Y2NmMmQ1MjIxMzc5ODlkNWE0MjU0OTgwOTI3N2JhMTU1ZDA0YjMzNTM1MjBmNGI1YzJmMTgxMjBiYjRiODQ0MjEzMGRiNThlOWQ0NmExYTQxZjU2MjdjNDBhNmI2NWE0ZjkwNzU0NjBiNzA1MzIwMmE2ZTViMTJiOWUwN2FlNmVlOWI0OTQ1ZDQyMzVkMGI3MzZlODhmMiI6IjEwYTE5OGIwNTgzMGNmZjJmYjRmNWIwMzE3YzI1ODEyOTM5NmVkYjk0Mzc2OTI5Mjc1MzA5NWI1OGJjOGZlY2UiOiIiOiIiOiIxN2I5ZmM2NDE5YzE3NTM0ZWUxNmFhY2YzMjU1MGNiZjU4ZWExZjA3M2I4ZTcyZmI5YWU2ZTk0MDk0ZTc5N2YyMTY3MDNkYTQyODM5NGExZGE4MjM2ZjcyNWIxOTFjYmVjMTE1MzFhMWY4Nzk0NmM3MGZiMTQ0MGE1NWJlN2Q3ZDE4YzliNTA4NWQ2MjZkZDBjZDliM2JkNjNhOTAxNGU1ZDE0ZWVmNjM2YmViNjk0ZGZhN2Y3ODFlODNmM2MxYjRmZTU1MTlhYjFhNTA1ZDFiZTViODEyNTE0ZjNhMzk4MTQ2MDFkYjEwNGFmZTU3MjYwODZmNmJhY2I2MWMwMGFiODIxMDIzOWIyODkxOTM4ZTk3ZmM1M2RlMDY5ZjE4YTY0Njk5OTk3MjdhOTA0NDAzYmM1M2M2YzczYzdiM2E1ZjlmMzdmMzgwNTYzZjEyODFjZGFhMWI0YmI0YTYzNmY4NDk3MTdjMzA3ODQ4NzQ4MTcyYWUwMTkxOTk3YWJkYTgiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMmU0MDNjMzA3YTAzZDc2NmI2MTAwMTg0MmY4NWNhZjkxYTVlZWM5N2E0OTkzNDU0N2IyY2U2MzQxMTkxNjQ5NWYzZTEwMmQzMzMyNjllMDQzODFiYmYxNDBhMjhhMmQ2MWZhNmE1ZjIyODYwNzk2MTlmNGY0ZmFmZWI1YzUyMGM2MDJkMGFjMzE5MGZkNTAwYTM0MDJlN2MwNjQ3YWM3NmM5MDFlN2M1OGUwMTJjZDZiOWU4M2QyYTk2OWYwZDBhZTRlMDhlZDVjYjYwMWZjNzI1OTZhNzJiNDg1NGYyNDYiOiJmZjFkOWVlZDhjZjU5ZjU3MDhlNDE5MjRjZjEzZmQ1ZDMwY2NiN2RlZGNlMzA2MmRmYmIyYzRiYjRkMzZiNjViIjoiIjoiIjoiZTVlMjBmMmNiMDYzYzE1ODc1ODNhMzgxNTM2YWVjYmYwYjBjYjQ0MDBjOTlhNzRiYmI2YWExNWYzMzhiM2U2NzE4NzMxNjg2NWNmOTBlNjkxZDk5NDY2ZTM0YmQ2NjEyOTg1NTc1MTIyYzZjNzk4NDhkNGUyZjI2ODAxZDk4ZTQ5YzAwMmY0MDYzMDE5Mzk0ZjRiM2VlZTkwOGYyZDZiNTY3NDljMjYwZTU2ZWNlNGUwNDMxNjUwYThiZDk3MzU4NzllZTZjOWJmYWE1ZDQ0YzA3ZTdmZjY5Nzg4ODNjMzY1OTdjMzExMjYzODZkYWZiYmUwMzU1Nzk4MTkwNjhiYjA2MDM0ODYyOWY3NDQyMGJkNDExZjJkYzg1OGQ0NmRmZjBiYjRmNzk5NDZhZjk2MDQ2ZGEyYzJjYjMyZTBhYWRlZDRlYjFlYmM4NzQ4ZjI3NzMxN2Y5ZmZiOWFhZGFjMWJmNWU2NjU0YWU3MTMxZDVlZTBjNzY1ZmYzZDQ5ZDllIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI0YjEyNDBjZWRiODRlZTNmMzk1MzE3ZTE3N2VmY2YwM2IwZmI1N2JlMWUwMWUzYzIwNjE3MDg3N2EwNmVjMmNjMDc3ZTk3NTFiNGVlYzk2NGE0NDIyZDAxMGVmMTQ4NzQ1NmZjMTZiM2U2ZTdjY2I4YTA2MjMwMTQ0NTM1Mjc0MjE1ZjAwYWZlMTc1ZDM5NGNiMDQ1MThiNjMwYmE3MjU1YWRhMGM2Njc2ODg1ODAxYThmNTAzYzU1YzM4ODUwZGU2Zjc5MDRiNDBjZjAzZmExOTVjZDE2ZWEyOTk5MzQ3YyI6IjkwNDNlZjNjNzc1ZjMyZGNlMTkwMmI5ZWZkYzQ4MWY2MWYyOTIyMGVjYTUzYmI5MDQxNTVmMmFhY2MzYjM3MDYiOiIiOiIiOiI0ZmFjZDJmZmYxODI4YjlmNGE2M2Y2Mzk1MDNjZjY1MzNhNGQyNDJmMzE2ZWY3MTY4ZmJhNDRiNTJiODc2MDU2YmIwZmQwNDBkNWUzMzFkMjc0NjE2OWNkYzg4Y2NlZjc0ZGNmNmM2NDJjMWQxYTBkYjQxMzBmOGJlOWZmODg1NTVkZTRjMmE3YTU4MjRmMDA1Y2NjZGZhNjA3NGRmMzM4NTY3MmVjYTU3YTQ1Njc5ZDY5ZGZlYzIzMmNjOGIxYmNhODdmNmY5YzZjYWMyZjYzMDQ5OGQ1MjQ0OWE1ZDFiMzI4YTZkMmFjMWE5MDU0YTA2NThiZTU4OWJjMjc3Yjc3NTBhYjVkNjQ3YTczYTE1YTA1OWQ3MjYwOGY5ZDI5OWQxMWY5ZmI0MTdhMzdkZGMxYjUyYzhiODg1OWMyOTQ5ZTVlYmFlNjUwYjljZjhiNGZkNzcxMjg4ZTU4MmRlZTM4MTc4YjE1NGU2ODFlYWY3NGQ0ZDNmMzVkYWYwMGEzMDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImMyMDI3ZDhjMDg0ZTJjNmZjNWQ1MzU3MjYzMTJiYzYzNjIzNzI4NzJjZDM3YmYwN2NjMWMzODcwZjNiNTlhOTcwYzYyYjg0YTEwZDE0OThiMmUwMjAyN2Q4NTRmZDg0ZGQ2MTVlMjllN2MyMDQ1Nzk5Njg1NjkzODZiNmYwODM5MzMyMmM0ZmIzNmRhNDM5OGVjNDg4MWNhOWMxNzkwNWI3YjJmYTI4NzIyYzk4ZDQwNGU5M2ZiYWFkYjE2NTQxMWQ0MTI1NmEwZGZjODA2YTE5ZGYwZjUyNjU3MWM4MGYwIjoiOGM1YzkzNTgzZGJiYTAxNjUzMWFlY2MxZGE3YjAxMGI5NTU5Nzg1YjJlOGNmNjYwY2UxNzAyMmY4ZDg2YmU3OCI6IiI6IiI6IjU0MDc0Y2YxODQwNDBmNTc3MTZlOWVlZjgwZWQwZTAwNmNkMDI5Yjk5Y2E1NjhmZDc2MzljNGMxYjBmNzQzMTkzMzUxNjgzMGY1Zjg3YjE1N2ZkYmJiMmFmN2FiNTdmNmZhYTI2MzIzZjA5NmM4ZTg2MTM2ZTQ5ZDgzMzY2NWE2Y2IzYTIyZjdkNWQzODI5MGMyZTlhMjNjNjJkZWE2YzUxYjk1ODQ2MGIyNjM1NjZjNWMwZTRiZTlhZGNiMWMxMjNiNTU4NzlmNDA1ZjExYjNjMzRjMjQ4NTJkMzNjNjRkNjU2M2VlNDZjYWQxNGNlMDhkNTkxOWRkYmZmZGZhYWQwYmVmOGQ4ZWQ5OTc0ZjFkOTU5MTdlMmIxMDhkOTUxOWIxM2M0ZjY5Mjk0MjlkMmRjNDRlY2FjZTc3OTk4MzlmZmNhZTAzNTkwNGI1NzZlNzFlOTJiMGE4OWYzOWUzYjM0NDRiNzVlZTA3MDU0MTljM2IzNTMzYzc5MzYwNWViNiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMCkgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMDJlZjY0MGI5ZjA4N2ZhNDg0NTc5MThkN2JkNmU5MTBkNzM3OWJkZDg5ZTE1NDkxMThlYzY3ODgwZGMzYzRiZTNhZDk1Mzk3YjhmYzg4YmZjZWQ1YWE3Njk0MTcxNmJmNGMyNjY5NmU5NTQwZDc1OWM4YzZiODYwM2Q1YzQwZGYyNjcwNTZjNzliZDhhMzQ5N2I3NzA1MmU0OTg5NTM0OTNlYjg1M2I1NmM0MWYzMjg2YzA5ZjFlYzg4NjM3Zjk1YTFjYjdlNmUwZWZkM2FjYjhhOGZhNGRlNjNkMTA3MjciOiIzOGU2NjRiOTMwZmIwNzIxMTJlNmQ0N2JmYzU1MzhiMGQ0ODY3MmExMjc2OWYzZWI4NjAyNDNiYmMxYzVkYjc1IjoiIjoiIjoiYzM5OWU4YzM5YWIxNzRmYThjYWJiN2U3Mzg0NWQ4ZDQzNGRjZWJjMjEwNjJlZGM2OWQwMjkyOGIwZGU0NDcxNTE3NDk2MzY1YmJkNTkwNjJhNDM0MDgyMTVmNWIwZjM1OTcxZjRjNDgwNzc2MjM4NjAyMDZlMGU2YWY4ZGU3NTFlNmZlNDVlYjY2NDhhNjZlOGFjNWU2MDMwNDNjNTM2NWJlMzAxNWFmODU4ZmEyNzA5YzZjN2IxY2QyMjcwMWRiYmY0ZWYyN2ZhNDVlNmQ3ZjlkZjRlOGE1NTg1MTdhMzhlMjZiZGQ4Mjk2MGRiOWE5MmEwZGVlZTk4NjU3YWI1MTQ5MTNmMTM0Y2I5MzYyNzU2YTc4YWU0YWZlZDNhNmM4OWU4NjM0MWE4ZmIyMGI1Y2RmY2Q1NjkzMzM2M2Y4M2U4YzU1YzY5YWRiZjhlOGQ3MTk5YmM0ZjkzYjcyYWUxYzRkMDkzOWI1NjRkOThlN2YwNTJjNjZlMWUwOTg4Y2E1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAwKSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiIyZjI4MGZmZTMzMDY3NjQ4Mzk4OTlmYWE4OTIxMzEzOWE0MDQ2MjAzOWY0ZDljNTVmZWFlZjY3MjhjMjRjYzYzNjgxOTM1N2Y2ZWE2NWJhZGM4ZTQ5M2I5OWQ1YWYxZDk5NWQxNGQ4MWUzOTgwMjcxMTk3N2QwYTFjNTc4M2JmZTNjMjkwYmM0NjliYjlhZjUyMGIwZmFhMDZmMjMwZmU2YzRiYTM4MDRlMzllMzIyNmYwNzMxZjA5NTc5ZTEwNWQ3MjZiMDg5ZDFjMzdjNzJlM2ZhZWIzMzc2OGQzZjIwZSI6ImUzZDk5ODYwZThiMWU5Mjk3YzYwYjE3OTA0YmU4NTI1YmU4MzFkNzFkYmQzZjQ1NGYwODVkMTc1OGViZTcxNjAiOiIiOiIiOiI0NTQwMGVjNzAwYTRjZjgzMDlmYmVhOTRhYTRmY2JkZDIyYzg1OWUwZjdkZWZhNzQ2MDg1YTJmNGRkYjlkYjE2ZWZiYjBjMmZmZjc5OGM5OWZmNGU5ZTExOTg2ZjRjMzMwZjM2NThlMzRhMTQ2ZjhkOTA3MTQ2NzIyOGUzYjBlYTQ4NmNmYmM4MWRhM2U3MzlhMzAxZmU1MWI2MjBkN2QyN2ZlOWRhMGU0Yjg3NWVmZTNjMmJkMGZkZTMxZjYwODAxNWFkNzFjYWM5Yzk1YmNlMzNlNTE2YzYyZmM0NWE5ZmM4NWE3OGMxNDI0MTZkN2ZiZmYzYTgzNjAyZGNjZTNhZGQ2MzAxY2E2YjliZTU2NWUzY2YwNmFkNmYyMjg1NWQ1N2Q5YzE4NGVkNzIxNGFkYzFiYjAxNGExYjZkYWZiODY5ODkyODNmYTNhNGJlMTBjNDEwNDQyZDc2MWM5OGQyZDNmOTRiYjBkOTdiYTFkNWM4OTY2ZWI0N2IwZmU2ZWMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjhmM2RkYzQyMzBmODMyMGJkMThjZjA3OGMwNGM2MmUyNDhmY2MzMjY5ODAzMDExNzQ2MTdhOWU1NDM1MWM2NjdiYTRjMzFhNGMwZTdkYmQ3MzM2YzI3YzBiOGEwMzRmNmZkOTQ3YjBhMjFlNTgwZTZjMmRiZmJkNDRkMDFmNWZiNGE1MWRjZDIxOTlkZjlmMTgwM2YyNGM1ZTc3NGYwNDg4MTUzMDJlMDE2YWFkMzMyNTRkMzA4YzU0NTdmMzY4OTY1YzE1YjYyMDRlMTkxYzJhMjUyZTRmZTg4ZGZiOTc4IjoiOWJmZTliYzA1NWIzMjE1NTYwY2QyODU1NTMzNzJjNDdjY2E0MjJmY2E1NzRjMGQyMmQ3Y2U1ZjJkZDQwYjA4NCI6IiI6IiI6IjM0ZjU1MDIzMWQzMWMxYjNhM2RiMzMxZDM0MWFkYTNiOTg3MTIwZDk0ZTQzMTgzMWVlYTY3ZThkMjA4ZjljZjE4MDA1NDlkNDQ1ZmM3YmVmYmRjYzI0ODhjYzdmNDM0MDU2MGQ1NzRmY2QyMzk2ZTllY2M5YTIzMmYxMDE1Y2ZiMjZkYjQ1MTYyM2ZlNDdlYzhiYWNlZTE3NTY1NzNlNzRlNTE5YWRjNjJiMjNjZTg2ZmMxOTFlYTVlMTNkYTljN2ExNDQ5NjQyNmM2YzUzZGZhN2M3Y2NkYjY3ZDYxNjRkYmU4OGNiYmU3ZjQ4ZDQ5NzE5OTMwMDNhYjI0ZjNlZmYxOGJkNTJjMjY2MTk5MmU4ZjhkYTkzYmZkZDI4ZjAxZmMzMmVkYjQzOWFkMTMwMzUyNDYzMDg0MDQxZTk4NzFjNDMxYmEyNmM2NzZlY2Q3ODEyOTkxODMzMTEzY2JiZTY4NzY1MWU5M2FlYjIyYTZhNDRjZmZjN2EzZmIyMTRiMiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjhiMjg1Y2U2YjRkYTcwYzgzZmQ3MmFhYjFiNGJlNjIxMDFiZjliMjllMTY4NzI2ZWEyZjY3MGFhYjBkZWFlZmM1ZGEzNDA0YzQ5NGM2MDE5ZWEzMzY3OWUzN2NlYzMwOGRhYjEzZTBjYjA2MGY2NmMxYzgzZmM2ZmJhNDY0NzdkMWEzYzgwMmVkZDc1OTRkYjBiMjk3ZGVkYjljY2JjODAwYzgxN2YwNTY1OGZiOWI0Yzk5OTM4YWUyMTQwMTYwYzRhMTZkNTQ4NjM0YTM1M2JjMjg1Y2IzOGQwZTkzMjQzIjoiNzIzYzBmMjg3ZGI0YWYyODVjMTk1Y2ViYjExMDRhMTA2ZjIyZThiMjQzZmRjZDA1NjYyMjhhYjVmMjI3YTllMyI6Ijg4MWExODc0YzgwMGRiMDY4YjU5MTNkMTk1MDU4ZDA3MjY0NThkZTM3ODJmZjUzMGFmMWE3NjFmOTYyODU0N2YiOiIwYzI3Y2YyNzFiZDc5MzFkMTg3ZWM2ZjU2MDM4NTE5Njc0NDY4ZmEyZTdlNmY5OTQ5MDRjOWYxYWZhMzQ2OTM5IjoiNTFlMDQyZGQ1NmExOTM5MDhjOTAxOGMyNWYxYzFhOGI1ZTI3MzRiMDU1YzNiN2ZkZTZhOGJhOWVjMmI5NTkzNDlkZjI5Mjk1YWJiMGEyNGI0NzE1Zjk4ZDMxZGUwYTM2OWU2MjYyYzJiMmNkNDljNTQ2MmI3YWUyODRlOTIxZjVhZDJlYzAxM2VkYzE2MTEzNDNjMjI4NjgzZjQxNzBmMzRhNzU4NTRiMWI2NTZkMjI2ZTI5NDE3MmQ0ODhjMTBhNDE1ZjA5ZGVlNzA5ODRiOWM0OWU4ZDM2ODYzMTkyMzAxZDE3NjIxNDVlMGQ5ZTk0ZTk5YmQzMGNlODQ5MDQzOGVkMDUwZjQxOGNmNGJhMGIwN2ZlOTBhODJkMWNjZjM4NTc4ZDk5ZWRmMDUxOGM0YTc1OGExOTlkYjRkMzUzM2M0ZGJjNTViMWRhMTk4NDBiOGYzNjVhNTc0YWEwMTY0NzgxOTAzMmRjMGFkNjQxMzg4YzIwOTNlYmQ0YWI1ZDk5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiNWI1YzY3MGQzZTBlOTdhMjFjZmQ1YmMzZDAzOGYwYzNkMjU3OGNmMzE0N2Y1NTQ1ZTUxMThhMDRjNGVhYzcyN2I1MDczNDkzOWUyZmQwYWJhNzA0OTMyY2NhYWM0MmFmMzE2NTI1ZTNmYzVmMWRkMjI0MTMxZDY1ZjhkNDRmZjg0MjA4OTFjMGFmN2M3OGY5Y2Y3NjYwOTdmYmYwZjhiZmRkMTMxZGIxODAxMjc1YzI4MDgxZTYwNjNjMGM0ZDYyNDJmOTZlNDBmYzUxMzYwODI4OWYzNzhiYzRmMTg1MTgiOiI0Y2IwZTU5MGExZDU3NWI2YTJkZjljYjAyNDM4OTUyNjNjODk0YTk5MGI2Nzk4NDI0YmVhOWVmMTk5NzYxZDA4IjoiZmVhYmNlY2YwNjQ4NjY1YjA4YTdjNjkwYWRkNmZmNzU3NDRkZTM5MTZkNTU3MzE0NWMzNTUxNzgwODYwNWJlYiI6ImZlODFjZjg5Nzg3OTgzMTFlZTZkMWM1ZDYxNDViMzgzMmQ5YWQxYTEyNjZmZGFjMGY0ZmEyMzBjNjMxZTliYTAiOiI2MmFhNWU5YjhhMDdiZWQyYTVkM2VlZjBjNzNiYmM4NDFiYjhjYmY1NDRkMzJhMjg4OTgwNmJhNTAxYzY3NjhhY2E5OGMxOWI4M2ZkNGZiMmNhYmYxMjBjMDU3MTZiOWVhYzliNzdkNTYxZmZkZDY5NjgyMzA4ZjgwZmNmMWM3ODQwOWYzYjIxNzQ5YmY3MWFiZGIyMDk2NjA3MTZhMzljMjU2MmU4YWUxYjM0Nzg4MjhiZjM1ZWM5ZDNmOTcxMmQ5NWY0OWEzNmI5ZWFkZGFmMWIyNDlmMDIzYzM2ZDA5ZmYxYjZmM2RmNmQxMGU0ZTMzNjc2M2VkZWY5NTAxODI3ZDUxNzFjNTA3ZWVjNDA1YmFlNTJkNTZmZDYyZjkwZjVjNThhMmYxYTczMTA1MzBkZjE1Y2E2Yjc4NDFhMjg3MWEzN2NhZTU4M2U2YjM4ODk3OGMxMThiOTYwMDg0MGY1NTQwYWY1MjliY2UwYTI0ZGE4ZjkwNmY2MDFmYzI3MGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI2NGNmNDdlNTJmNzU4ZGY4MDJjMmIzN2E0ODQxYzczYTMyMjg3MzhkMTRiNDM5YTdkMDJiMTNmYTMwMjQ3MTVjNzQ0NzIxZTQ5ZjI1YTBlNzNlODIxZjY5Nzg2ZmUyZDkxZWMxY2NlMWQxY2JmMmRjYmU1YmRkMjM3MWMwYTVkZjA1MDg0MWI2ZjA3YjFhMmMwZDA2NGJjNWUwNmVjZjJmZjk5MDQ5MjhmZWJlMGJmYWYzNjI2ZGY1YmZiNzlmZWUxNDc0Y2M4ZGZjM2FlMjY4NTcwZGYyODExYmMzYmEzYiI6ImMzZjBiMDQ3MWQ1MjczZjQwZTc0Y2NkNzE3MTIwNzFmYTQxMWI3MmIwZjVhOThjOWVlYTlhNWY3ZjE3Njk2N2UiOiI0ZGY5MDAzOWJiYjU0ZDg3NTNiMTljY2I2MjUwZmZjZWI3Mjc5YzA1ZjZkNjliNWM0NzgwMWM2ZmRlYjFkZGY4IjoiMTgxZDEyYmIxMjZlYTg0MGJiZjllNmZmNWU2OGY4ZWY1M2Y2OTA3MWQyMjNiZmY1OTNhNjNlNGUwYzY1ZWUxYiI6IjhjZWM0OTBlYmUwYjQ4MzdmMDQwNjYzZGUyOWUyYzZkYzgwMWQ3OTUzY2IyNDE2ZDI0NWVmNjYxNzNlNWQ3YmFhZmJiNzdmZDJjNWNlNjliNGI4OTk1YmZlNTFmNWYzM2NmZmZkOWU5YjEyODRmYjg2NTdiYjdhM2MyNmY1YWFjNTAwY2M3ZDM3MzdmYzgxNDE4Yzk0ZDNkYjFhNjNmNDkyMmNhNDk4MDNjMDRmZGJjOTQ4OGUyMWQ5YzRiYzM4MWM0OGJkOWY3ZTVjZDFlZDZjNmZhOWU4ODllNDYzZGZjM2EzMTM4MTIyNDVhNjZiZTIyMDI2NjcwN2E1MzU4ZTI1ODA3Y2NiMTFmMjQ3ODBlNWVmODJjODRhODgwM2Y3MmRiZDIxZjU1ZDk2MzYyZDdjZDhhYmJmZDlkMjFmNGUzZGZhYzMzMzI2YTRlNTM4NDc2NTA4YWZkODdlMDMwZDkyMzI4YTkxYzkxZmZiMTZiMDU0NzQwZGMzZDBhMjEzMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjY5MGE4YmU5MDRjNzVlNDEzNDJjOGUyNTQ4YWJkZTJlNDY1NjEyYTYzMjcxMDE3OWNjYjljMWRhYjc2YzQ2MTViZGFlZGExNTg3NzcyNjM4YTYxNzQ3NzM4Yjk2Y2ZjOTQ4NzkzMjVkMmNmMWNjMDI2OWQ4NzdlYWI4YWEyMzNiYThkN2YxZmY0NGU5MTE4YTEyOGJjZDhjYzY4N2VlZjU4OTQwMzQzZDI3YmExZDgwMGFlZDllMmU5MTFhOGM4M2I4NDYwZjlkNzJjN2I5Mjg1MmNjMTc4ZDNkMGJhZjZhIjoiNWRkMDMxZmIyZGY1NmM1MTBiM2NjM2MwMmZkY2Y2Y2YzZmZhNGE4ODFlNzQ3NWE4NjMxMDczYjNlZDVlM2M2MiI6ImEwYTg2MTIzOGIyYjllYTAzNTgyZWI0NzAzYmMzMzkyMWI1Mzc2YzI3MDA0NzEwZDQxNmZmOTIxZDZlNmZjNjAiOiIzY2VmNjZmNzVhYTY4MmFkNTQzMGJkZjBmMDFkZDFmMmMzNDkyZmNhY2M2ZjgwYWIzNTFjZmFjYzFjNmI2Y2UwIjoiOTJiMzM3YTMzNjQwNTlhY2ZjYWVmNzg5YWMxYWUwOWM5ZWQwNWZkZjY5ZjVkNWRhN2ExYzliNjk2MmQzYTNjNzFhNDA0MWRjMjM0ZjdiZTU4ZmRiYjcyOGY4ZjVmYjEwNDA0NTU4ZjIxZDliNGM4MThmY2FkZjVkNmJhYzhiY2IwNDRlNWIyZmJkMjZlZTA4Mzk4ZGM4OTA0YzI3MWU4ZDNkMTg0YmJmNjFmNzdjNjJmZDNjOGYxY2MxZWUyZjhjNDYyMGM1MTNmM2FiZjVlMzEyYjQzMWU4NjA4YjI5Y2RmNTI4ZDg5MmZmMDNiYzBhOWNiZDIwMmI5ZGExZDA1MmFlMmJjMmRkODcyMzE5OGExYjMwMTdhZGUyODAzYzNkYzg3MzNhYzMzZGRiZGNlZjdhOTk0OGQ2NGY3MmRhMDcxNmIzMmRjNmVlYTIyNGJkNDlhNzM0OWExYzMyZThlMzI1YWMxMWU1ZmFkODM1M2NmODVkOWViNGI3MmIxOTU0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiMGViYTdiMDYzMDlmMGRjNGUyYmZhYmVhNTdlMWQwMWE1YTNlNzExMzk4MzIwOTI1NjQ3MDA4YWJmMTljYWUxOTRlZmJmZjkzOTY4YzBhN2QxYzc2MjNlZTFlMzk4N2NkOTVjM2RiZDFiMmJhOTRkMGIyZDQxNmZlMmYyZjZmYWVhYjQ2NjQ2YTM3OGU5MzFiYjVkYWFjMDQ5MzMzMTI5Y2U3ZTIwZTUzMTE3YTBmNjhiYWY0Yzg2YTNlZTVlNzg3YjAyYjUzYjFlMDE0MDQzMGU3N2NhODZmMjQyZDdmOTAiOiI2OWFkYzY5ZTAzY2QxMTNjMzRhZTZiODljN2MyZmNmYmU5ODdlNDI2ZGE4NjVmN2M4ZTA1MmRhNGJhZGUzNDNhIjoiNzI5NDg5Y2M3YmE0ZjNmOTZmNzdmZjM2NWZkNTM4MGNkODNjYzdiMTdiMTUwZDMyN2M1Yjc2MzJmMWNiMDQ2MCI6IjU5ODkyZmNmOTljZTcxOTgxOTc3NDUzOWVkNGYxMGVkYjdjZDM1Y2Q2Njk2OTEzN2E4OGViZTYzMzZkYTkwZjkiOiI1NjVlM2UzOTJhOWYzNjRkZjBiNTc1ZDk0NDRhYWMyNjJmNThjZTEyMzEyZDVhYzk4MzJhZTYzNTFiNmFhZTAzOThlMGJlZGQzMDc0ZjU3YmQ0ZTlmMGU4OWE1MGQ2MjdlY2ZlMTFmZTlhZWEwOWZjZTU2M2ViMzRlZmQyNzYxMGEzMjU1ZjgxZjk1M2JiM2YyMjJiMTVjMDE5YjlkODEyMTUwZjdhMWYxOTEyNjk5NGM1MDVkOWNlNWM5NDg4ODJhMWY2YzVjZGJjNzA1MDQ2MWNjZGJiYjdhYWU1OTdkYWI1M2ExMmVhNmJmYWE0ZDQ3MTAxODhkNjkwZmIwYTBhMzRkZjdmYjZiYmE5NDlmZDZhODU2NWZkZWQ4ZTQ4MzJmZjdmNmIwOGE2NTNhNzJiOGI4ODc4MmI4ZDc3YzFmMjE3ZTg0ODcxNjNmZGJkZGNjODhhODNkOGJkYWQ0NzljYTc1ZmRiY2FmMDIyNTBkYjM5NTI4NDU2OTQyMTE5ZjEiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiI5ZGVhNWYyNzExOTNhZWY2MWJkNzJjNzZhNTgxZDY1ZWFkYzgwMDJiMjU4YTRkNTQ4YzdhZDFjYjU4N2E1ZjY4MWU5NzA5ZWFiNWUxNDY4MzNiMDFhNzlhMzRjMzUyYWE2NDJhN2EzNzY1OTUzNDdjMDIwM2E4YTA0NTZhZjRlOTg1OWFlYTYyYzg4NzE2NmIzNDgzZTBjN2FjZGQ1Yjk5YTFiMWE0NjZkYzA3MDljYzZiYTEzM2FiZTI5ZWNmM2YzMTUwZDY2NGQwNGJhZWY4ODU0ZmQ4NmE1ZDhjYWIxOSI6Ijg5NWU1MDM5ZWViM2VhMWQxOTc2MTRhNjgzYzg0ZDc3ODBhYzg3MjQxOTJiZDZjMzVmZTgxMTM3YmMyM2U0YmQiOiI5ZTg2NjlhNjdiZjgwYzY5NTg4OWE3ZTg3NWE5YWQxOTU0YjkxZTRiZGRkMDg0ODMxM2I0ZWZiNGIwMGIxNGZjIjoiMmU5M2E4Yjk2YWUxOTY2ZTJhMDUyZGIwZDVjMmQ1Yjc2Y2Q3Y2QyMzQ5NGJiMTE3MGEzM2E5ZGRmMzliMjFjZSI6IjcxYTBlYThiOTg4NGU5NzlmNGVkNTQ2Y2VlMzY4OGViYzM5OWI0MWJlMzg1NzhmMTViOTlkOTYyMWRlMGRhM2U2NzExODJmNmRhNjEyMzM0ZWRiOGQzYTZkNWUzNGMyODcyZTI3Nzk0Mjg1NDM1MDUyNmMzZTAwMDgzNGJiZTE4Y2Q1ZjJmMzM2YmNmYWJiNDJjNGFhZWIxOWI4Y2VmYTNmNzA2NmE4OTU5Mzk2MGZhYmJhMjQ0ODEyZDE1YzVmYTdhNzI4MTA2N2M3ODk3NDUxMjdlZTJiNjNiMTQyMzcxMzZjNTQ4NjRiZjg2YWI3YzM3NzQxNGE3OTMzYjgyOWZjMzA1MmU4YzI2YzY5ODQ1OWE4M2IxOTkwYzA5MzMwNTM3MmFhNjA4Yzk2N2JmZGE3MTllOThjNGMxNzc3NjRiNzJkMTg0NTg2ZjdiNjNhOGU3NWY3OGM5ZTVlMWRjMDQ1YzNlYjViMzBjNzE0N2M2OTEwMGMyY2Y5MTBkNGYzYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjJiNGM4NWFhYzUyOGY1Y2Y0NGU5MDE4Nzk1YTFlOGY4MTAyMjBjZTMxOGFhMTc0YmVkOWRiMzcyNjAyYzAwZjY4YWMzMzYyNTczOWYyOTkyNDFkMWE4MzgxMzcyNTM3YmFjMzkyNDExYTFkNjg0OWFhNjYxMGExNzc3NDNhZmRmNDVjYzUyNDgzOGZhZGYxYjVmZWFhYTk5ODNjYTc5YTQ1MDhiNWU0YTI3NTUxNGVmNGMwNGMyMzNjM2RiYmNhMzJhMDBkMGExNjI4MzIzYjkxZGFjYmU0OTljMWJhOTI4IjoiNzk5YTRiM2M5ZjYyYzJmNmFhOWU5MTYwNGU3NDJkZDA2ZmY5Zjc3YjE1ZDM3OTk2ODRlMWRmY2YwMjlkODA3YiI6IjFkMTVmNTljYjNlMTAyZDVmZjQ3YWQ0YzBhYWUxMzYzMWVjNGQzMDBkZTQyNDcxMzdhZWM1YjQzZTVhYTRmNzkiOiJmNDM4MDE4NTE5NDZmOTcyMDg5MDlmMWFkMGY3OWQ2NTc3ZWVkYTcwMDY3ODg2YjI3MGY1NWQ2MjZkOTY2ZmJlIjoiZjA1ZTUwMTkyNTI4YmExMTg1Y2I5NjQzMjQxNDFjMWQxOTVmNmUyNmM0MjE2NDA1MmE3YjcyNDQ3OTdjMzA4NGQ0OGJjNWU2ZTFhMjdlNjQ1NjJjZjJmYTM2YjRkZTMwMTMyYTA4MmRlMmY5MjcwNTk3MzFkMDg0ZTIwNDJlYjc3MjA5MzJhZThlMTc0MWYwNWY0Yzc1MDc5NTg2OTI0Y2M0M2E2Y2YzZjU1MjVlMDM3YjA4OTY3NDEyMWMyNzQxZjgzNjM3MmYyMTlhMzNiZmNkOTEwODg0YWJiMTY2ZWVlZWQxODQwNjcyNjYzZTA0NTViMThiYzdjOWZjZjIwOTY3YjI1ZGQ3N2ViMzdlMDBkOGZjNDBiMDc4OGMwODI4MGIwYmQ4ODc4YzUwNGQ5ODJkYjRkM2QyNDc2ZjVmZTY3ODViMTk1OWQxYmZhMjc2MmMwMGVmZTQzNmNkMjE3YjZkMDFhZGJmN2RhMDhkMjMyNTRmMWJlMTk5MWQyMDBhIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTM4NDoiYTcxNmFmOWUwNThlZWRiZTkzN2VmNzllZTIxY2JhZjRhYzFlZDBlMmY0ODYzZWVmNGNhMWUzZTk3MmYzMzMyNmViNmVjZmE3YmM5YmFjZDNkOTAyMTVhM2RiODQzYjI0MzQzZWRmN2FkYTllNDQwYTIwNmRmN2YzOGY4Y2JkMWQzODE1OWI4NTExZjJhOTNkMWYwYjVhY2U4YTg5YzBkODIzZmUwMDE2NTZjM2RkZTY1OTg3NGRmODhkZDYwMDU2Y2VkMjkzY2M0OWQ2NGE3MWVlNmIyMzE5OWM5YjIwZTYiOiI2NDhhYTMwY2IyNjg3ZDg1N2QzMDlmNzAyZjZkYWUxZjMwZWRjODI0NDkzZDZlODNhOWUyNmQ5NGYyODk0OGEyIjoiMzljNWE2NTE0ZjNkMzk5YWM0MWIyNjQwZmQ2MTkzMTIzMzJmZTA1M2FiZjFiMmExOTQ3MmE1OGMyODM0NTM0NyI6ImM5MTJhMWJiODRmN2FlZWVmNzlkNzMzNDcwOTdlMDlmNmI4ZmI3ZWM1OTMxNzZjZWJiYmI1NmFmODY2YmMzMDkiOiI1Mzg3Njc0Y2VjNTJkYTJhOTc0M2IyNTU2ZmE5ODc0YzA4NjZlNTc5MDc5OTU0Y2IzNTdmMTdmYzA2OWMyZTM0NWMxY2E4MDA4MTA0MGQ2MjBmYmExNTBjMjJlYjFiOGIyYzdkZjA4MmY2Mzc4NTVjMzk2YWQ2NDE3ZmQzODNmOGU5M2I3YmQ5MTY5MzQwOGU5NTFiNzU3MjI2OWMwYWU2NWJlOGJjYzk4NDRmOWZkODQwMWU2OGY2ZmFmZGNlMTk1MTYyMTU0YjM0ZmRkNWRiODU1OWRjMTFjZmQzY2JkM2QzOTFhNDUwNjU3NjEzNzJmNjBjNTE4MmZlNGNjMTYyMzA0MDYxZjg2ZTY2NjMyNmMzMzMyMDEwZmQzODg2MjZjZmE5Y2UxMjUyOTgyY2FlN2I2ZWIxYjgyMDhjNzliN2I2ODlhYWU5MDg0ZmQxODBkMDA5NjJmYTRlZWE3OWY2MTJhYjdlYzVmYjUxMzk0ZjZmNDk4NTI4YWQ1ODYwZTciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtMzg0LCAyNTYsIDI1NikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBMzg0OiJhZjQwNWI0MmY4YTY3YzM0OWJjMTBkNGQwYjk3ZjU2Y2NlNDMzZTFkMzRjZWJjYzc1YzI4NTAwMTBkMjBjZjc0ZjYxYjIzZTFkMmY5NjRhZDZjOWE4ZDY1YzlmODc3NDlkYTI3OTkwMmQ1YzMwZmI2NzIwN2Q3MmJlNTU0NTEzMzdmMzRhYWE4ZTU5OGI5ZWY1NWZkMzYyMjRlYmVlNGI1NTI0YTkzZjE1MTNmYzIxZmE5ODRmMGE3NmMyYmNjOThkZGYzOTgyM2QwYTg3ZDUwMWIzNTE1ZTNlZTlmZDRkNiI6IjFjYmQ5NjNkNDliMjU1M2E5NzExNjg3YmM1MDc0M2Q4MjA1ODgwNDljZjA5N2MxMDA3MzlmODU3YjM5MjhmYzAiOiJlMGQzMzZlYTU1MmE2ZGJjMTMyZjE5NGFjOWFiODBhMzRhNTRmNGQzMzFhNTVhMDcwZGRlNjYwMWQ2ZDkwODRlIjoiOTFlODgyZGFhYTMwNDg3NGZiMGMwNjM3MTg5ODRhYzUzZTFmMDcxNmNhOGM5MjEwYmRjZGRkYzE0MmM4NDA4MiI6IjBhY2IxOWYyYTY1YmYwZTFkOWY5NTYxZDg3MzFmZTBmMGMxNzg0NDNmMDBmYWY0Mjc5NzNhZDQ1ZjJkZjRmNGQyMWE0ZmRlY2RmOTZjMzRiZTI4ZTM4OWQ4Y2FlZDk2YjUxNWVjYjIxNWNhOTE1YjM4YzcxNTAxNWUxYjA3OTQ5MjYzZmI2NTUxN2VhNGJjYWUzNjFkNzZjNDE4Y2QyYzU4ZDI5MDEwZWE3OWI5NDIwZDFjZWRmOTM3ZDNhYWFlN2UyOWMyMTcwYmE4OGM4MzI4NjY0ZDg4NGFjZTkwZTg4YzY2MjAwMDMzZDE5ZmZkNTJmNjY4YjAwYjBkZjA4OGI3OTQyMzc3YzFhZWMzN2IzYzMwNDUyMWMzOTRlYzc0OWVmYmIyNTI2NjllMGMwNDE1YjhiMDRiOTk1ZmMyMjQ5MDNiMDg0M2ZiYWYwYmUxY2U4MDRjOWYxNGE1ZTk3YWZhNzBkMGZjYTljYjcwOGFkMjAzODg3MzBhYTlkZTAyMCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS0zODQsIDI1NiwgMjU2KSAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImU5ZWNkMDBlZmFmZWJhNGZhOWNiYWIyMmIxYjUyODhjOThhMzZmZjFkNjg1NjU5MmEyODgzMjU5NjhjMzFkN2Q4OGZkMmJlNWM4MmQ3OTQxM2IzM2MxZGJlOTcyODU5ODIyY2EyYzhhOTJlNzgxMjQ3OWMxNGZhMjkyYTYyN2E4OTA5YzNhOTUzYTI3NThkNDJmMjJhMTg2ODJmZmEyMTlhYTk5MDhlMDZmNTIxYmU4ZmI1OWFkNThlNTY1MWFhOWQ2Yjk1OTgzZTIzZTU0Y2Q1N2RmYzgyYjIwNzdiZjk2IjoiYWRmMWY1MGEyOTVkODhmNjhlOGMwN2ExODA4OTdkOGU3YjQ5ZjdjYzZjYjc4YTNiMjVlZTEwYjA1ODNhMGYwYiI6IjgyZGU2YTczNTY4YWRlNWU1YjBkOGFlMzdjNDBmZjI1ZTg1OGE3MDU1MzQ2MDIwYzVlNDdmZWRkZmVmNzU2ODAiOiJjZDBlMTVkNzY0ZDIzNTVhYzlmMWNiZDVlYTUxOWVkMTc1NmEzYmZhYTU1ZTM3ODNiNzM4YzAzYmRiNDJlMzcxIjoiMWU1OTJlNTAwM2ZjMGYzZjgxYTdhZWYyMjcyNTI3OTgwY2M1YTlhYzcyODZhNjIxNTEzYjljN2NlMmVhOTRmYmZhMjU1ZWYyNjU0ZDY3M2JiOGNkMTNmM2EwMzNhNzcwMTMwNGFjYmJlOGQxOWI4MmE2MWQyZTc3ZTcyNTFmOThiMGUyOGUxYTY5NGY5Y2JhMmM4NmM3YzhjYjIwZDljMjk4NmU1MjA1MmY3MDE1OTZlM2M4MzdhZjk1YjE2NmNkMjI3ZjJmYzAwZWRkM2VhNjJiNTdmNjAyNjI3MTJiMmY3MTQ3OTU2OWMxMTljYmNlOWQ3NzFmOGEyY2ZkZjgzMmFhOGQ3MGUwYTkxMjk3OGZiMmJiMzNiMjdhMTg1ZmIzYTRjYWEzYTE4OTEzYWVhYjA5NWFjMDg4ZDE0MzgxODAyMTE3YWYwY2MxZDk3YzA2ZmU5NzMwYmViYmZmMGFkZjJmZmFjNTk5NWQyOTllNGRlZmIwNzIyYmQ5M2YwNzk5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6Ijg5OGE2YzQ3YTVjZmY1MDBlYTBmNWIxOGI1ZjBiNGJjZjdlNzVkNmQ3YzkyMDI1Zjk5MjBjNjY2ZGJjMWM1ZmZjNDg5NzJlMWQ1MTk0MjhmOGQ2MWRmYjVlMzAwYjQ4ZjI2NjBmZjUzZTFmZmFhMzk1MGNmZmM1MGUxN2E4NzQxODIyMzZmYmI1NTVkMzVjZWQzMzMwMmVmODdiODRjMGFkMzFlODc0NDFhZTM2NTM1MDQ1MmEzOTQ3MDU2N2JjMDA5ODcxYTNjOTc4NWJkYTQ1NjlhZjMzZDAzZDQ2ZjA4IjoiOWUxNjU2OGEyMjViODBlOTAxMTU3MWYzYjU1MTAyY2Y2MzYyZTI2YjhhNjBmZDMzNjgwZDRlNjYyNTczOGU1ZiI6ImIxYzY1ZDZlNTFiYTA0M2Y2M2I0MjUxZWQ1OGU5YThlZWJmYzI4OWY2Mjg1NzA1ZjhlZjQ0YzIwMmM5YjRhMjIiOiIyNDVlZTc0MWEyMDQxZWRhMjJjZTcwNTNmODU3NmMwYTQzZWFlODY4ZmQ5NWFkN2Q1OGJiOTIxYzE1NWIxYjUzIjoiYjA3NjIxMDY4OGIwNmFiNmI1N2VkZjY4MTI2ZGNkZmNlODJiNmY5Mjg1ZGRlYzEwMmVkNjA3MzBhYTc1MzA4NjMwNzYxODZhM2Y3YWZmYmRkNGVmMDgxYjdmNWEzMmZiNDYxYmM1NzU1YWI0Zjg2MDAxMjYzMWI3NGFlMzU3ZmJjM2NiZDY0ZjBlZWY4Nzg5YzZjOWRjYTg5NGE0MWEwMDVkMjcyYjRhNTdlNzYxZjkxZDIyMTYzNmQwZWM3YTQ5ZjEwYmIxYjQyNjQ5Mzg2MDRmZjRkYzdiYzk3ZWI3OTljZWE5ZTNlMWQ3YTliNGJkNjZkODhkMjQ0ZTIyMTIwYmIzMTFmNTAyZTY2ZTYwYzVjOWU0MjczMWFkMzIwYjIzZDZiMDZhZTkyYTEzMmIwOTNhZDkyNGExYTdlMDhiNWRjY2RjNTBlMjU3YmZkYjYzYmY1NzA1MzUwNTg4ZjYxZTkzZTRmYzUwNDJhMmNhZDFiZDZkOWZiYzgyZTg3NWNmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6IjhlOTI4MzZkYzVlNGJiZjk1OTg4MDNlZmIwZDM4NzFlNTQxOGNmMThmMzc5NDc5YmJjYmQ5MjYyNTU4YWY2Y2I2ZDk3ZTczZGVjYjg3ODFjMzBmNjliNjFjMWY1YzkxYTVlYTFmMTBmYjFlZWY3NGI0ODBlNTgzNzEwZDlhNmEyZTU3ZjhjZmM5ZDAyMTVmYTczZDFjZTljMTU2MmYzY2MzNGJlMTg3OTQwY2QzMTdiNjkxMzlhYjlhYTU4ZDA2NGI2YmNhNTllZTY0NjBjM2RiNGU4YjU3ZmFiMDE4NmYxIjoiNmQ5YWZjNzY5OTg1MjE4NzQ1MjM1ZTVhZjI4MGViNDVjZWM4MWEyZTkyMGMyODRlZDVjNzcxMDU0ODllOGY0YiI6IjcxMTY3MmYyY2ExMmU3ZDhmMzI0NDVhODcxNjNiYzAwZjVkMGY1MmMyZjY3OTliYTUxM2I2OGMwN2MzNTBkZTUiOiI0MjZhZWFiMmNmYTU2Y2QzMTQ2YzBlYjlmYWNmYmMwNDhhNTA0ZWVjMzI3MzI1NmI1ZTRkYjNkNjZjODk1NjBmIjoiNTYzMjUzNzMwOTlmYzFkZDE5NDU1NWMzYTFlNjkzNThmYzdmODBmZTY2MTA0MTJjYjMxYzE0Y2RjNzBjNzNhNzRkMDQwNzQ2YzZjZjM4OGZiOTcxOGU3NDQ2ODg4YzYxNjJkZTczYWMwOTdjMzJmOGI0YjAwZGQ3ZjExNWZlZDE4MjFkMzc4NmJhYWExZjY0ODg1Y2I5M2M3NTUzMWU5OTE3MWY5OGQzYzM1NzYzMzdjMWM0MWM1YmZlODNmOTRjZWYyYWRlYmM4OGMwNzkwMzk4ZDRjMDcxNDg4Njk5ZWRkNTk5Nzk3YzFmOGYzOTRiM2UwMGU2NmJjNGI2OGE3Y2FjZDIwOTY5NTk2MTcxM2MzYmYyYzlhNWM4NTg5ZDkzNWUxNzFmNzc1ZjM2NjIxN2UyNjM0ZGRmMGRiNWYwMWFiMzE3NjBlYmQ5ZWQ5NzI0MjkyYmVjODlkYjA2ZDAxNDVmYjgyNGE3NjI5MmEzNWYzOWIwMWEwNmM0MzUxMGE2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImE0ZjFmZDgzZTUzYTQwNjE2Mzg2MjI2MGZiOWUyZWM2NGQ0YWY3NGY1ZmE0MWZmNTZjMDdjNzkxYjZiYjZhYmJkYjIwMzY3MGIxODQ5YWZiZjA5MzEyMDZhZDYzOTM3OThmZjA2ZmJhOGRjYTMzMThjMjlkOTE2MWMwZWMxOGVjNWQ3ZDY2ODQ3YjFhNjE4YmIwZTRmNjlmYTEzMzFmZDFkYjVkNWZmZmRlZWM1YTJlMDQ1YzU4OGRjOTVhNWQ1ZWFjNmQzNTUwMmViZTJlNmE1NzMxOGYxNWFmNTNlMDAxIjoiMzlkZDc5Mzk3ZjkxYTk3NDMyZTUxMjRlN2I5Yjg1OTI4ZjYyYzU5OGVjZDE5NjI2MDcwYTgxYTVhOGVkNTY0YSI6Ijk4NTcyNDU0MWQ0NGM4Yjg2NTY3Mjc1OWM4ZDM2ZGVkNzVjMjE4OWMyMjgxNzMxODg4YTc0MWIzMDVlYjQxNjEiOiJlMmRhZTc1OTUwZTQxN2MxOGYxYzNlNWZiZDY2YjFjYzlmYTYxN2FhNjk1YzlkMDNkODc2OGI5ZTE5N2ZlYTgwIjoiNzAzYWIxZjZhNTMzMmYwMWZhNzg4Y2Y3MzkyMmE5ZjZjZjg1NjMxOTc3MmVlYWIwN2I0Nzk1NzAyNTYyY2RlMzUwYThjZjkzOTU5NzZmZDIyN2IwODEzNGZlYjQ2OWNhMzRmNjc1YzliNmYxNzZhZDY4NGE1YjBkMDJiNGMxMzVhNzE3NGJmMDYwNGExNTQ2ZTdkOGQ5NzhlY2ZkOGNiNmFlNWVmY2UzYjIyOGRjOTVjYjQxM2IwMTA3MzJjM2U3ZjllZjhlNTQ3YTkzNTQwZTVlNGFhYWEzYjBlNWE4ZjQ1YjgzYmIxMTIwOWEwMzg4M2M1NGY0MWU0OTRmY2JjNjZjMmQ1N2MwMTAwMjEzNzU2N2VhMmY5OWY3YTFlZDZjNGM2MDgwYmRhYTI5OWQxOGY1N2JiM2IzODYyNzhhNzhiMmVmMjNhMDMwNDNlODUwYmQ5ZmQ3NDI1MjdjNDUzMDhlNWI5MTBmYzU4NmY5ZjIxZGU3MDIyZDAyYjE0OTNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMxMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImYzMzFlYmNkYmMwZDJkZmJmNTQ3NTg2ODBkZDQ5ZGQwYmQ2NjZkMDUwNWVmNmJhMWM0YmJmYjdkZWU2MmVkYzM0ZWE5MDYzNjMyYzhlNjcxOWJiZTE0MGMzYzg0MGFhYmQ2NmU3NzAyYzM4NDcwMDkyMWRjMTgzOGM2YzVhODMyYzY1MGE0NzRlNzQyNzBjMzc4YWJmZjAyMWQ2MGQxYTE4ODQ5MzliYmRjNTFjNTQ3YzcyYzkyOWMwYzczY2E3Zjc4NjY4ZDMzZmJhMTk3NjQyYmU4YWMyZDQxY2VmZGU0IjoiZWMyOTllNDU2Y2QxOTg1YTNmMTAyMmQ1YzA1ZjBlZjkwNDBjYzhiODI5N2JhNWU0MDRkOTJhNmQzNmMzNTc4ZiI6Ijk1NGY0NjQ4NzdmNzI1OGY5OWFjYmZiOWFkZmU0ZWVkYzg5ZGE3MWNhODJlMzU4MWZiNWJhZDEyN2IyMDY5ZTciOiI1MTVmOWU3NDZjNzQwNzE5NjYxMGJiYWU5NjNiOWJjMTViMTY1ODk3MmEzMGU2MmJlNmY3OGNhZWUxMjg3ZTg4IjoiNWFhMzBhNzk2ZDQ2ZTc4OWM0OTgzNTJhZGUxNzlmMGNkMzMzNjQxOGZiZWFmYWUwZDEwZmJmNzc5ODkxNzY3MjI4OGIzYjJhMTIyNjdmYzA0MzVkODhiNGU5OTgwOWMxZTMwNjdmMGQ2NWM5MTBiMTJhMzMwMzM0YjZhMjNkNmQzMDkxMGQzMDE0MzhjMmM5OTkzNTNlMWY3ODAxOWJhN2IyMGVhZjY4YjQ5OWZmMWU4OGRiMDQzMTMxMmE2NmYzNTMwNWM0ZjNjM2EyNzUwYzk1YmJjMDdjY2JkZjFlNGQxMjNlZWMzNzhiOWJlODg5NGI1OTdiY2MwMjljNjY0ZTU5ZTJiM2MyM2ZkNzI4NDFhZjBkZGM5Mzc0ZWNlZjIxODg1YTBiNTRkMTMxODZkYzBhNjZlZDNjM2NhY2E5ZTQxNzUzODEzYWU2MTAxNWE5NTIxNDJiZDRkN2ViYmFhMzE5MzU5OGJlMTI2N2JlOTM3NzQ1ZmIwZGUwOWFhNzBkIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTM4NCwgMjU2LCAyNTYpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEEzODQ6ImQ5OWRkYmQ4MmNlOTkzN2NkYTA4M2UzMGIzZGE0N2E2ZTZjYTA4YjhmNTlmMmZjOTM0YmIzZjc4ZTc0OGJiMjhjZmFiZGRiMzc1ZWZjNWYyMDI1YTUzZmQwNzNhODliMGZiZWMzOTEyOTA4NjNhZDg2MmFhNTZmZTZkOTQ1MDQ0ZTg3OWNhMDVjM2MwMTkzMTNmODEwZGQ1NTlmYTBlNjgyZDZiNzdmZjdlNjEyYzdjNDBjZDUyMzFlZWNlNDAxOGM1YjNjMGQ4MTgxYWI0NDcwM2Y3YTA0YzBhMWM3YzVlIjoiZWJjMjE5M2Q0YTk3Yjk3ZDI5OGYxMzA1YjJmN2E1NGRhYjQ2NmY3YzRlNDQ0ODMxNjUxY2FjMjlhNmM1YmQ4OCI6IjY4MjZhYWQ0MWY4YWMyOWUyNzI4ODRjYjZkMjEzMDBjN2IwYjNjYTM3MjA1ZTE3MjBhZmFmOWY3MTZmMzM3ZWMiOiI1YTc0MzQ2NDhkZTgyYTM1NTJlMTJhZmY4MDAwOTM3NzZjYTNlODY1NjViMjljMGIzYWQ2YzBiYzMxODA2MjNmIjoiY2ZjNzlhODlhMGE1NWRjOWM2YzZlY2NkZmFiNWE5OTM1MzM1ZTgwNmI3M2JhYjdmNWVmZjVmOWZlYTZhYTNmNDdiZjMxZjA2ZDk4N2E5NGUyYmMyYTRhNjE0NGViZTk0ZDZmNWFhOGZjYWFiYmY4NmEzN2M4ZDQxMjIwNzg2NDMyMmQzMDU3Yjg5ZmVmMzU4NzQwYzU5NjJjZjllN2MzNzA3Mjg0N2ZjYWE2ZGI2OTNhNTIzOGVmMjcwZTg0MTRlMmIyOTQ0OGJiY2MzN2RjZWFhNzU0NzljMmFjNWZlZTJkNmZlOWVkNjg1MTZmNmRiZDkwMTM1ZGRjYWU4YTEyZDFjMTU5NWUwZWRjMzRlYTJiZjAwYmVlN2FlNzczYzI0MGMyYmMxZWQ4MjhiN2ZmOTFhNjc2ODkxMTczZWVjMWRhYmVlY2IyMTg0ZGY5MTg2YzNiZDgzM2UzNDkzNTE0ODE2NTViZGE5MWJjMGY0ZTQxOWZiNzhlNDI2ZGU2YjM5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI2NGE4YWZiNzE5NzUyNTZiNjE5NmYzZjkzMDM4YmE4YjdhNGQ3MDg5ZjdmMjY4MTM0Y2IzZjU5MjY4NjhlNGQxMDRjNjBiNDRmYmYzYmMxOThmNGJjNThiZjEyNjBkMTIzYTVhYWY4NzQ5MTM2YTg2YzRlNWFiYTgxNjkyZDU4NzEzM2QyOWQzYjdhNjNmYTYyMDRlZDg0ZTkzYmU2YWViZjUwNDcyZDMxM2VmNTc5N2QxYTI5MGE3Y2FlMDg2MDUyYjU3ZThkNWEyMGVkMjJlYzc3MDJkZDQyNGQ5MzVlYSI6IiI6IiI6IiI6IjRmNjFmNmI1ZDQ2ZWEzNTFkYzZmOGZmNTViY2I5MTVkOTk4YzhlODcxYjVlMTIyZGQ5NTE5NmRhMjQxYzQ5YTExNzBiMWZjMTZmZmEzMWE2ZGM0ZjBjNDA2OGVjYzZlNWNjMGZhNjk2NmFlZGY3MmJjYjE5ZTY2NmIxOTE5NzlmMjI1ODBiNjUwNWMwOWE3ODRlNzZmNThkMzBhZjNhYmNiZTg0MDQ5N2FkODg2MjFhODkzZmZlMTNhZjZhZWYwZjgyNzZmOTU0MDA2ODk0M2JiNmJjNTE0OThhNDY1MTI5ODgwZGY0YzUxN2Y3ZmU3MGVjMjM5YzA1NTEwMmE3OGI4YjBmMjZkMzZiYzI2MzRhMGU2MWExNDMxODUwOTgwYzI1ODMyNjE5N2NjODBkMDdjM2NhZmM0OWEyMDMxNmEwZmEyNzAzZjg1MGI2NmNlMjc0ZTgzOWQ2ZGRkYmE0ZDNlNzQ0MzA2ZDc2OGI3NDM3ZWM5YzU0ZWQ4NjRjN2JjYTRlYThkMDk4N2Q4MTVlNjRmNjg1ZTA3MjZlYjQyMjNhYTVlYWMxYTA5NzlmYjMzNTI0OGVlNTk4MTljMzZjN2M5NGRhZGYxNDQ3NGM3ZTJmMTA2NzhkYTU5ZjI1NTQ3NGVhNTBjM2VkNWNjZjg2YTM5OWJhN2Y1NGFlOTZiZmYwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJlNWI4ZGJlYTY1NGI1NTlmMDI1YzAwOGMxZjNiMmVmZjkyZmU5ODkzMmIwMjcxMjI4ZTNmNGVmYTMzMDNjZDRmMTEyNjYwZjQ4MDU3ZmM1NmVkMGVlYmFjZjU1OWNkZDE0ZjUyM2EzZTk0OGU4MDM3NDI3ZTY1ZGQyNWMxZWI0MTU2MGYyZjc4ZGVlMTM5YjNkNzIxYmExYzI3OGMzODU1YWVlYzNmZDNhNDRhNTMzMWM4ZjU0Mzk2ZWMzYjliYTczYzIyZGE4YWUxYWRjOTc0ODE3OGQ3ZDIxMzQxZjdjOSI6IiI6IiI6IiI6IjliYzVhOGMxMTFkNDU4NjEzMWZhZWY2MzY4OWQwYTczNDJiZjYwMWYwNDkyNmYxOGNjYTdhZWViOGVkYjEyOWUzM2NhZTEwZTllMDhmZDQ0MDY1ZGIyYWVkNDQ4MGI3NTg3OGM2ZDE0MDBkMzhmYTJjOWU4MzZlNGE2YmMxZDY2ZGY1NzFmZmExZGQwYTA3M2I4OTU4MDAwNWEwOWQxY2U4MTQ5MjEzMTc3MWVjNGZmOTg3Y2Y4YTMyNjBjOWY5MGZiM2VjMDdiODJhYjFkYjUyNmI5N2FlODU2MjgyZmY3YzYyZWZlYjJjZWRhYWNiNzVmZGEwYjc0ZGY1ZTBlNzY2YTM1NzNhODI5YzMyZjUzZWYzYjE2ZmZiOWQ0Y2MxY2ZlZmM4NGUwOGFhMTg2NGY1ZDBmYmU1OTNhYmIyNmI0ODhjOTBlMzUxODE2ZTJkMTA3M2JjYmI1OTliNjViMTk2YjMzZGFiOTA5NWJiMjg5ODMxNzJmM2E2MWM5OTJkNDQzNDVmMjk0N2UxYWNkMmRmOTZjY2FlYTNmNmJjNGMwMjRhNGUzNjg2OGUzNThlNWJmYjkwNDdmZjExZGFlYjM0NTcxMDUxZjA4MjMyNjVhMTViZTllNGU0ZDY0ZjcwNzNiZDVkYzNiNDNhZDBhNGIzOWE1ZmI2YmY0YjE1NGViIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJhYmU3MTIxYzc2ODIwOGYxNzRlZTllNTQ1MjUwMDE0ZDAzMWViYzY0NzQ5N2E2MGUxOGUzNDYyNTE3MDI3ZmVhMWMwZTM4NTRjZmU1NDI5YmMxMDU5MTZlNjNhMGQ1YTc1ODVjZmJhNzM3Zjg4Nzg1MmYyM2E0MTAzOWNjYTZlMzNkZTk0OTAxY2MxYWFlOTFhYzQyZGIwY2EzNDcyNGIwNzM2OGIxYTNhYjczM2RhZDI0YWVlMDNiYWI1MGVhYWYyYWNmMTVjMmM3MDBlNWUwNzAwOTcxMzJhOTJhZTdiZCI6IiI6IiI6IiI6IjdlMDgyY2NlNjc3NGEzZDIxZmYzOWRiMWVmOWVkMDI1MWE2NDM0NDYyYWZkMjlmYjhlMDU0NThiOWNhN2JkMTgxYTllMzYyYWI0OTg2YzE5ZmExYWE5YmIxZDAwZjFjMzQ3OWIyYjRiZTE1MTJiMmI1ZWI5NGI5ZWMwNDkzMjY2YjZlZmNlNzNkMDJkNmFjYzY1M2RiOWU0YzE5NGM3ZDE2OTc4MWFhNzhkZTc4MzllMDEwYWRjN2ZkNThlZmM5ODhhNWVlYzJmZWI4OWYyZDBkYzQ1YWM2YTdkNGJlZGYxMWJjMTI5NGI0ZjMxMmM3MjNhY2JkNjY0ZjI4Zjg1ZjY3NmYzZmViN2QyZDJkYjE0YjBhY2NhMmFjNmQ4M2QyODc3MzE5Y2VkYmY4MTYzNzgzNjVkYzUxMzY4ZTE2ODZmMmUzY2IwYmQ2NzBjMTI1Y2Y0ODRjY2E3ZDI4Y2JhMDRhMjU0NzlkY2ZjM2Y4MDkxMDQyMmE1ODNjMzU1NTNhYzdkZDZkNWE0M2M2Y2VjNDY1ZGQ2YzdlYzMzNzEyYzlmMjI4OTIwNmIwZjFlNjIwZWQyM2EzMzVhOTVhMTM5MmQxNDNmY2VmZmJjMmY0M2ExOGMzNDI2ZGUwZjJmMTcxNmY3MjM0YmRjODgwZjYxZTNhMWMxYzJjNTdmZTI5MzM2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIwN2U1NzBmYTdjZjA3OWUwNjZjNWMzMGI2ZDI0ZmQzNzkwNmFiN2FhMDdiMTU1MWJlNjA1YjMxZjg2ZGJjM2NiM2U5NWEwNzIzZTkzNDQ5MjJkMTQxODU4MjRjNDgzYmM1ZGM4MzQxZjEwZDY5ODYyOTczNjgzOGZhZDZhMTkwODI1YTI0NDgyNDEzYjM4ODI2NWZiMjBiMmE4ZTdjMDc4YjkxMDkwYzk3ZGIwMWU2YzZhNzJkMWMwNjdiZWRkNzNkYTFkN2IxNTc1YjA1ODcwYjhlZWU0MzQzYmM0MjIxMyI6IiI6IiI6IiI6IjNjZjYwOTk0ODlkMmVhYTZiYzQyN2NhZTJiYmI0YTFiMTIxMDQxYmNlMmE0ZjhlNzQ3YTNiNDIxNzkxMDkwNTE1NjE4OTQyMGZhOGI5Njk4YThhMzE2YzUzNzIyOWE0MjUwOWJlOWU3NWY3ZGJkNTI0MWRlOTMyNDc1MTE0ZmM5MjMyYzMzMjVlZThkOTIxYWFhNjgwMDc4NDkzODU2YzJkMGIxNGU2NTkzYmMzZjM2ZTA2MTUxNDNmYzMzNjA1NDQ0MmUxOTZkZDE1MmY1MzYzNGEyZmEzZTc0NDE3YWEyZGZlY2Y0MzY3Y2JjMTU4NGNhZmNmNTgzY2JkZGYxMjgzYjczYjM1ZjlkMWYxZWNkYjcxMDRiODBiODM4ZjJjMTQ2NGVkZTUwYmNhMDVlOTYwZWZjNmI2MmY1NTQ2YTBkMDJlMzQyMGNiODU3MDUwYjQ5Y2IxZTNiNGZmOGE5MzZhZTRhYTdiMWQ3NzQwODljNjQxZDk2YTczMjE2NGVlNWIwY2Y3N2YyZjcyOTMwM2M1M2RlNjZlOWQxYjZmNWVhYmRlN2ZkZDU1YmI3MDMwNjcxYTI3NGUzZjdhNDEwNDdkODRmMzA3ZGMxOTk2ZDZlZmI2NzFkZjhhMDFjYTZmZmVmODE5NTBiZWFiOThhM2U0ODBjZGRhNTI0MWI2ZDY5IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5OWZhODgyZWE1YWE1NWVjOTY4MjcxOTcyMWE4ZTc5ZDZhZmVlYzVjYmIzNTc3ZjFkZjdmZTk3ZTRlZGM0NzkwNDBlZmExZTUxZjg4OTMyMTBjMzAyZjJhMmEzYWJiYWMyZGRiM2ZhMzE3NThjODQ3M2E2ZjdjNTBkOThlNDIzY2NmMzYwYTJmNmE1ZDk0ZjdlYzZhZjA0ZjY1NmFkMDZkMjBlMmJlN2UwOWY3MjhiNjRmODFkNzM2YWMzZmI4MjYzYjBmNzgwOGFiZDVkN2IwYmJhZTFkNGIzZjQ0NTk1NyI6IiI6IiI6IiI6IjU4MDdmNDc4Mzk5ZWIxNzE1OWIwOTZmN2JlNzc4ODc2OWNmNTZiZWVhOGNmNDYwNDQwMGY3N2IxMDM1Y2UwYjNjNWQ5YWZjMjU2ODUwNDQ1Mzk3ZDVjNzVkMDg3ZGUxMmYxMDg4OTY0OWQ0ZTc0OWNhODkxZjMwYmMzOTdiNThhOWIzYzYzMjFhMDhiODk4NDVlMTg2ZTlhNjk3Mzc3YWViZTM2NDg2ODg2Zjc0YWMzYmMzNTNmMDMzZDQ1OGJhNWQ5NDYzNGIxNjIwODZiNGI3NDU2Mzg2MGYxZjA3OWJlMzI3ODlmOGJmZGQ1NjFlNDg2ODM5OTk2ZGI4ZTFkZTI1NTgzZTJlNjRiZTkxNDMyOWJkYmIwYTQyYTEzZDY2OGU0N2U0ZmY2MzVkMDFhMWRhYWFhMjlhZTg0NTk3NTJkMDRiN2M4ZmY1MzQwZmM4Yzk3MjkzZjJiN2I5MWMyYzhlM2YwNTE5ODc4YzgyYTYxYTMyNjg3ZjY5M2E2NGMzYzFhMjIyYjY2NGI4MzU3MGViZWRkOTZlODcyMmJhNjEyNWYwNGE4ZWJiMDc5NTk3Mzk0ZGU5ZGUzNmNhNDJkODI4ZjkwYzdhNWZjNzRkMWFiMDNiZTczZjdjNWZmZDMzMmI5MDUxN2FhNmVmOGMxOWFlZmVkMTgyZGU2ODhjZjVmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI3NTMzNmZiMDAwNmY3YWFkOTk1YWUwMWIzZjNlYzI0Y2VmNDZkM2Y3YWQwNzc5OGU1MmY2MDllYzM0YjI2NmYxY2I1MTg2NTgxNzI4MTEwM2IzYmUyYzJiZWNlODU0ODdlOTc5ZjNhMzFiYTc1ZDZlNmU0YjM1NzgxMWI0YWFmNWZjOTU4NDA2NzIxNjkzZWVlYzIxZThjOTgwOGNlZWZiZDE3YTBhNmQ1NjY0MTYyZTdiOTg4YzE5ZGJjOTExYjZlM2I2OGU5MGExZTZhM2M5YzVhNDY2MmQ5NTRlZjVjNSI6IiI6IiI6IiI6IjdlMTM3ODhjMzYyZWJiNmU2YWU3OTRlYzUwZDM5YzJjZjJiZDI1ZDg3NjllZTkxZGY1ZDIxMGIzYmFlNTAyMTgwMWUwZDU5ZWU1MDNlYTE3N2RjMDFiM2M2MDZkYWY2N2EyZmM4YWZhOWYwNmIyZDAzNzU5ZTIxOTFkNmRkMGU5MTZiNWQyMTEyNTMyMmJiZTk4MDIyNTkzNjZhNDNkNjRmOTRjNTQwOGU2MjcwOWQ4MDY5NzBhODNkZmZjNGQ3OGZmODZkYmNjNzU0MGYzNGRiZjAyNmRkMzA4ZWUyODk3MWVlNWU4ODY4MWIzNDJkMTVkYmJiYWZmOTJhNTFlNGI0MGU0YzUwZTBiMWU0OGQxNTNkNWQ2ZTk1MGRlOGEzNzMyNmRkYWY1MDQzODJlMjBmZmE4NWJjYzkxZmIzZjdmNTYxMzBhZDY3MjUwYzdhOWYxZWU1Zjc2Y2IyNjVkNTY3ZDQ0OGM1MGVlYzRmMzVjMjIyMzMxYmYyZGJhMmIwMGNjNjYwZTcwMTVmYzFlNmE3MTYxYTAxY2NjZTAyYjU4MDBjYzE1MTZjMzMwZTc2ZjMzNzg5ZmI0N2VlOGUxMzg3MGVkNTg4ZDE0NWMwMTZjM2Y3M2M2YjY0ODkyYjRmYWE3ZGVhNGZlNTM2YzUzNDlmZGQxNzEwMTk0NDI2ODBjIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJmNmQ3NDAxNjYzNTQ3NjYxNTYzZTViMmRhMjA4ZjFmOGE0YTBjMTdiOTdkZGYwZDRhNGMxYTE3YzIzZWU4YzdkMDBkMDM3ODM5ZjJkOTVkZGU2YTk2ODg2Y2Q2N2M5YTkyZmI3ZmJmNzdjYTA4OGQxZTQ2ZjJkYzM4NmUxNmZiNmYxZDE3OGY3YzFhM2RmZTIwMmYwNWQ1MmNhMjBmZTI5YjgwODRhOWQ1OTdmZDZiMGU1M2Y0MWExM2ZjZWZiYjhhYTVkNTM5YzdiMDlkOGU3YjhmNjg3YjNkZjkyYzYwNiI6IiI6IiI6IiI6IjRmZTZhYWJjYzQwZTE1ODMxNmU0OTE2MGFjNTIzYzQxZDRkZjhjYjA0MWUxMTU0OWRlYzBhNDBjYzg1NGZlNGIxNjBmZTM4YTFjYzIyYjc3OTc4OWVmMDcwMTI3MzVmNDU3ZmNkMmE1NTk0YjM0NDc4M2NmNjY2MWQ4M2IwNDZjYzQwM2IxZmViOTZjZjgxYjA1MDM4ZGZkYjQwZDJhMDI3ZWE0YmE5M2NhZjc3ZjUzZmRjYWJjMzYxY2U0OGFiYmE3ODRmZDlmZWI3MjJjNDc3Y2I5ZDk2NTFkOWRiNmQwODhlMDk3YTkzZTFkYmFhMmMzZGIxNTAzZDY1NjgwYmQ0YjQ3MzUyYjA0Mzg3ZjljMTVhMWMzYTQzNGU5M2VjYzM5NjQ3ZGFkODEwZWQ5Njk5N2YxMDdlNTEzMTEwMWNlMjBkNGJlODJjYzY3ZDA1MzA5MzczNzkyZTE1ZTI5NzRhYWE5YWE5YmM5ZTY4MTgxNWUwNzExMWYxZjk4MGZjOGNhODgyNDc4YzMyZmNjMzc2NWI4ZTQyMmE1MzY5ZGJmMzZmNzIzOTBhYzhkM2I3MjhiOGU1ZGViM2Q0OGU5ZWE4NWEzMWEwNDMyYjgxMzQ3MWU2YjAyZTRhMTJlZDFhZWUwYWI5ZGJiM2MzZTY2MjE3YzQ1YTE3NGY5YjRlZDNlIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5OGJkMjI1Y2ZhYTgxZTIxMTFmODNiNGIzYjJkZmRmMzUwN2ZlMThhYTk3MTAwMDYyYmNiNWExZjY2NWMwOTEwMDJmYmEzZDg0ZTM4ODYwNDhmNjdiYzdmMDY3NTBhMTlhNjU1MDNkODNhNDgwNDVjZDliMTI4YzU2YzNlNDc0YjdkNjU4ZmM1OTAzNDhiZDljMTQwMTNmZDIwZDJkZjMyZGJlOWY5YjczZDQ3ZTQzZTU4YTZlY2I1Zjg1ZjkzYjM1NDY4MTcxMzQ3NDYwMTZmNjg4NmY2YjYzYmU4MzBlMSI6IiI6IiI6IiI6IjA1Y2RkYjYzOTFjNWMyZGUzZGI5OTk0MjZmMzEyMzhiNWQzZTE0YTM1NjIzMjcyZDZhNzJjNzM5NDdiMzUyMTAxN2NlZjM3NzQxNWRjZGYwOWVkZWRjMGQzNGQ5ODgwYjljNDRmMjgwOTlmMjcwODQ0ZTU4ZjlhOTdmNzM4OGRmODM3MTdhZDQ4OTcyMDM2OTY4ZTYzZjI4MWZjMGFiZTUzMTM1ODY3Y2FjZTBlNDI3Y2NhYjA0ZTBkZmE4MTA4ZDg3YTBiN2NmN2JlMTRhYjUwZTU5ZTRhZWM4ZDM2N2Y1NDgwNWM1MzRhOWZmYTJmMzY4NjcxMmNhYWVhZDUxNGNhYTMwYjFjYTA2YzY2OGI1ZjI3MWFkOGZkODQ5MDllZjEyMmQyZmFiZGU3YjUyNGQ0MmI5MjVhMDY4ZDBiYjI2NWNiZDdjNjUwNWE0YzJjMGJmZjdkNDcwNjhiNzZmMzUwZmM4NWM3NDVkMDk5Yzc4YmM3M2Y5ZWEwNzk2MzgxOTAzZTBkMzUxMjI4M2I3ZmFkMDU4NTBlMWJkZjYzYjljZDUyZWViZmVkMjcwZjE2MjJmMDU3ZjEwMmQ2YWIxOWM2M2VkNTljZjJjYzFlNTg3NjI1N2FiMDNlMjBlNjJmM2E3Nzc2MWRhMzJhNWUxYzJmOGM5NWJjYzc1MzRlZTAwIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI3YTMyNGE2NDZiNTNmMjg4MDhmN2M0NDMwMzIyMWFiMzYzMjRkMWM5NzY2MGY3YzMzM2IzYmFhNzUzN2QxZTFlYTAzOGI4Y2E2YzE1OWQ5MWQwMmYzYjIwNmViOTI3NTcwYWFjODU2NzRiNTlmNDE5YWYyNjYwY2NhOGViMGVmOTk2YmFjNjVkYzMzYzA4YTk0NmZiMmFiYjkzNDhkZDdlYmNlNGM3MWNiOWRlMTFiOGQ1OWFjZWFlZTJjOWEyOWIxNTQ2MzNkZjY0M2YzNzg3YzI2NzJlYTdlNzg5YTJiNiI6IiI6IiI6IiI6IjNjMDlmNTBiZGMzNWUwZWU4YmMwMzNkYTcxNmY2OGZiNzFhNjhhMzM5ZTI2NzExZTYzZjU2NDcyM2E3MGEwYjliNGIwMWFlNTQyMmM4Y2U3Y2VhN2JlMGIzNWY2YmJjYmVhMTEwYWZjOWM0NDhkODVlN2E4N2Q0M2M1NGNlMTE3ZGJhODZkNGI5NWE3NTRjNzdhNGM4ZWY1ZmJjMTFjMjUyNTE3M2FlZjgyZjExZjQ4MjYxMWM0MjY4ODc2NDNkYTZkYWY1MWJiM2JjNDYyYmQ1ZWZjNjhiNGI1ZTdlMDdjN2NkOTkxYTJmZDg2NzJhOGE1ZDg0OTBhNDUxZDhkZjkyMDU3ZGYwYmJiOGE2MDYzNDg5Yjg0YmJiMGE3NTgxM2ZmY2Q0OThiMTQ2ZjExYzVmMTY1ODBkZmZkMzg4MTJlMzA1Y2FmNjBkMTMzNjc5YzJiOGM5NTY0YWJhMDQ0YWUwMTkyYTlhNTc4OWM5OWNmNWVjNDBhM2M3NzVkNTk3NjM5MWQ2YWRmOWU0Yzc3ZWNiMGE4ZjMxNjliYjNjYjdlNWYyMTEyZTE4YzQ0ZmI3NTA1ZTdkNWM0ZTZjMGY0MjVlOGU1NTJmNzVhMzQwOTIzYTMxODZlNDlkN2RmMWEzZGNhM2RmOTA3MTE1YzA3NWQzOTg0NDU0OGRjYmM3NjU1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI1OWI4NGNmNWEyOWI0NWEzZjhlMGFjMzg0YmVkMjBkOTcwZjJiNmQ4OTY2MWJiZTJhZjkwZWYwNzNlYjA2MWNiZjMyM2ExM2QwNjQzZGNkYmE5MDJkZjE2OGRlZDdiNjA5NGUxODM4MTE4MWQ5MWQzNzM0Y2ZiNGU0NGNkNDQ2MmRlODFhYWUwNjRhOWFlOWQxNTZiYmIxNDA3OWI3OGUyZjYxMmMyZTA5NjVkMTViMjU2M2Q4ODhlMjAzNGQwNmU1NWY5MzlhYzIzNDVjMjYzODQ0M2Y4M2I1OTE1MjY5NiI6IiI6IiI6IiI6Ijg4Y2ViNjAwZDBjMzE5YzVmMjJlNGU5MWM1YTEzMTlmYmM3NTJhZTMxNDg2OGYxZmJjNmE0ZDFjMGFhNGI1YzcwNTRkNjQ5MjRmODQxZDA2MzkyMjk0ODY2Y2UzOTlkOWZhMjQ3NWE0ZjUzZjQyODUzYjY4Zjk4NTFkYjAwMjY1NWRjOTZjYzc5OWZkNmVlMWQ0NDk4ZjAwNWUyNWY3NmVmYjRjMDQ3ODk1N2RlNGIyNmRlYjMxMDJjNjAyZmEwODE3OWM4ZWYyNmVlMjllOWM5ZTg5NmMxMjJlMDI2NTBkY2FmNjIyZmZmNzI5ODI1YWE4NzAyNmVkOGRmYTk2ZTlmYjE1MTBkOWJlNDQxMjNkY2E1Yjk1MjFlZjk1MDBmNmUzODMyYTc4OTdhNWU1MTNlOTcxZjE4NzI2ZDMyODQ4YTY0NTJmZjczNDdkNWQ4ZGY2ZDQwMWVjYTJiODNjNzFhMWQ4MDZhNTM3NGJmNmU2YTk4MDEzYmVlY2RlZWJhOWI2MzdmMjM4MDhlYmQzOWZjNzI2MDYxYWQzY2U0NGIwMmY3M2IyZTZlN2M1NThiNzRiZDRhMDg1YzQ0NTEwMGM2MjdmMmI3MWM1NGU1YTQzYjdkMzZjMTMxMjc0YzA0YTA5NDFmZDhjYjU4NGRmZjQ0NTAzN2Y2MjJmNGQ2OWM1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNjQ2ODg2NDBhMWQzZjYxMDUyOGVhYmUyOTQ4ZTJlYWIyYjQ1M2E4Y2JiY2NmNThiYjAyYTcyYjFiYjQ2NmI4Mjc3ZjJjMmY4MjlmZWM2Njg3MmNjOGQ2YzAzMjgwYjUwNzQxMzZlN2YzZTEyM2Q2ZmI3Mjc4NmZjMjlkMWI1NTc4MmI3MjgzMjg1Y2I1M2M0MTg1ODAxZDJkNzMzM2I4Y2U3NmMxYzY2MWMxZWY2NTg2NGI4ZGRkY2U3ODFmNWRiNTIwYzY2NmZlMDdmY2JlNGJkNWNjYWNjMTE1ZmJiZGIiOiIiOiIiOiIiOiJhN2RlYTQ1YmZjYTljNmZlNGNlNTY1MDM2OWVlZTQwMmI3NDcwMzRjZTkzMjcyZmZjNDRlYjcxNWU0OWU2ZmZmODNjZTg4NDk1NmVkNGVhYzNjNzZiNWU2NjQ0MDMwNDBjY2UwZDUzNDM5MTZhOTNiYmMxNjkzM2ZiNDUxNDMyZjE0ODkxNDczYzkzYmUyZTE3ODEzZjgxMTlmNTc5YmY3MjA3MzQ4MDIwYjJhZWI3Y2Y3MjVhMTg2ZGIyMWZhOWMxNmMyN2Q2M2FlMjhiNWQ1Mjk5ZjE2M2NlOGQyODczOWExZDU4MzU3OWExYzQ2MmYwZjczYWIyYjZiMGViYTViNDkzYzJkYmM3ZDlkNmUwODE5ZDgwODY4YTZiMDAxOTcxZThjMjA1Y2MzYjQ3MmFiNjJjYmVkMWUzYTFhMGMwYTZmOTVjNTY5NGY1MTM2NTRkN2EyNDBiYjY2NzJlYWJiNzQ1YmM2MDAyNGNkZmNkODE3OWZkM2Q1MzAwYjg3OGVjOTNkZjRkYTM4ZTAwZmQ2NjgwOWJjZDhmOWJlODM4NGNiMTZhZWFkNzdkZTgzM2U5MGMwMzRjZTI0YjE4YjA5NmE4NGJmMDI4MWUwNDYyZTllM2E0MzQ5NzUxNGI4ZWIyODNlZGRlMjEwOGQ0MjU4MzlhYWRjOWU2OGVhNDcyOCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImQ3Nzk4NWQ4NWUxMzBmYTAyZWUxM2I1NWNjNzM3MmMyMzU2NWE1NmY1ODhjNzAxNTRiN2Q4MWRiZmI4ZWY2NmVlODYxYzc4MWZhMjU4MDE5ZWY5MWQxMDEzNjc3MjZjYTQ2YTYwYzcwNWUwZTNhMzA1YWI2YTdjNTE3OWU2YTE0YzZlN2RlOTNlNWM5NTk1NjY2MGJhNzM1NzAwM2YwOGEyNWE0MmU5YmZjMzhmYzg4MmEwNjM1ODYyODVlZWJlYWQ3NGE3ODI5NmM3YzNlODExMjA2MmQ3ZmUxYWRiMjMyIjoiIjoiIjoiIjoiOTQzMDdiOTkxY2M4M2Y5MTljYWVlNjRjMjVkYjIzYmQzZjQ1NjU4NWI2ZWRiZDZjODI1NmNiZDlkMTJiODQzMGQwZjNiZTg1N2Q0MmYxNDM3MjI4YmUxM2FkNTAxM2U0NTM5YmVmNTkxYTgxOGM1ZWZjNzY0NGRhMjcwODU3ZjYxMzczMDA4YzYxNGEwNmE2ZmQ1ZmI1ODk1ZjA4ZDVhYzRjODRiNTA2MDQ5OGFmNjM0NTk2MjlhZDAzOGQyZjQzNmNiNWVmYmYyNThmOWQyZjFlNDkxZWM2ZDBiYzA0NTBjMDkyOTM5YjU2YTQ4OWE4OTY0OWMxZWE3MDBmYWRmY2Q5YzM2Yjg4NTQzMjAwMTNkZTZjNTY5MjM0ZjhjYTBhYjE3MWIyNWFlOTMwNDhmZTc3ZTcyYTA3MzBmNmIzZWRjMmZlMTAzYzgyYjc4Njk4YzQ5N2RiNTM0MDAwZGIyNDEwYzc5NDVjYjM2ZGE1YTQ1MTgzNGFiZDUwMzViMGQ0YTY5MzgxMTZlYjQ2MDE0MzY4YWFiNzU4MjM1MmUyNzg4NjkxYWRlMWRkMzM3ZDc2MTBjYmMzMjdmMzY2NDQxNWM4NzBhMDIyZjc1ZDI5MGM4M2Q5MTdjMjEyYWU1MTczMzlkNTk2YzNhMWNjNGExY2M4M2NjN2ExYmQ5NGQ2YjciCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJhZDMyMTA5NWM4MzVmMmM0OWYzYWJkZDBmOTExN2NmOGVhMzBiMjM3ZGMzZjFlZmY3NzI4ZmE5YjA4ZDRjMGZjMDczYzgyYmZhZTFiNTc3MTcyODkxN2FlNzhkNWUyMmY0OTg5MDE5YjEzYzVmMDRhNDIwZjEzNGQxY2ZjZjFiZTgxNDA4YTE0M2UxMzcyYTQ2OGMxMzAzMjkyZjcxN2RhZjRmMThjY2RjYjgxZDhjN2FjNjU2MmRlYjRlMDdhOWUxNDY5MDAxMjNmMzllZjQ5YTkxZTMwZTIyY2RjYTIyYyI6IiI6IiI6IiI6ImJlNjgwNzE1ZGM5ODlmNWYxYzQ1OTY5NTYwM2IyYjk3NjQ0ZGZlMTdmMzA1YmVhZGY3Y2QzZmYyM2E1MjNhYTYxZjMwNzRmNWM1MzNjZjhlODhjZTc0ODg4Zjk1Y2M1ZTQ2M2RlNGNjZWMzYWVhMTA0OThlZmMwYzMzNTY5MmZhNjQ4YTFkN2ViNzc0MDM3Yjk5M2Y3NjIyYTQzZjlmYzRjNzVlZjNkMWE0NzNjMTgyMTY3NDZkYzczNDFkYzlkNzhlNzQzMTI5MTQ2N2FmOWE4Yzk1ZDg2ZmY0MDczMzUyMjY2MDE1NDFkYTFmYzEyMjBiNTM4NWQxODgzM2Y3OTJlZTEzZjExNjQxZTJlZmI1NjIzN2FlOWI3YWI5YzFhODdhYTAzYTQ0MmYwNmNkN2ExOGQ4NTE4YTAyOWUzNmU4NTM2OWMyYjUyZTM1MWQzYjQzNTU3OTkzOGEwNWZlZTg3YzQ0NDk2YzRmZjA0NGYyNjdmMzFlNmQ4MGYxNDlkNTRjYmJlZjRjZmU1ZjI0OWE2NzI0YzUzZjBhMjA4Mjg2NWVlYzAxY2I3OGRkYjA3NjY3YjQwZWM3MzkxY2E3N2ZiNDgyNDdiMzFiNmRiYzE1ZmRlZmFiYWE2Y2M5N2QwYmY4ZWJkMzRlZjc1Y2M0OGQ1YWM0Nzg5OWM4OTgwMGUxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNjc1Njk3MjFmZjAyYzM4NjJjZWZhNjgyODNlY2I1YjlhZmJmZWI4Mzk1YWU5NDRjNTVlNWRhMWIyMWI2YzIyNzBmMDEwMGIyY2YwMTRjZWY3YTJlODVkYmYyNzM4ZTk3ZjhlZTk3ZWNhNjkyMTMwZDY1NDFmYTkwMGVlZWY2Yjk4NTg0OTdmYWEyY2Q0N2M2ODc0NTkwMTkwZGE2ZDVmYmQzNmQyYTFlMTI0YTk0MzExYzg1MDhiOWY3MGYzNGI5N2MzMmRmMzk0N2FhNGEwYmYxOTdiMWFiMzUxNzIyMzMiOiIiOiIiOiIiOiI4NTQzYWEwODY3Nzc0MTUxODhlZjk5NWZkNGJmNWNlNTI3NzZjNjU3NGI3Yjc2OWFhNjFkMWU4M2E0YzNhYzQ0ODNiZjkwYjQ5MjM0MTQ0M2Q2YzkyZTE0ZmU3MTE0NTU4ZDE4NTU4MjZlNDE3NzJlZWZkNTQzNTJhMzhkYTk0MjkzZTMxN2UwYTA1MzQ1YTU2N2UzMGUyMjk5YWVkZGM0OTgwYjNlNzk3YjdjOTgwYjgyMmZmNjI1ZGIzZmZlZDFmMGFjYzMxNGMxMWUyYjYyOTcyNzUwYjBmNDQ4Y2JlZWIwOGI3ZGNmZjIxNzYxYjE3ZmI2M2ZkMTY1NWVmYWRiZGQ2NzkzZTI3YzQ3NTg4NjM4YzAzMzQ4YWQwZmJjOGI3NzcyYjdmNzg4MmI2NmI5Y2Y0OTQ3YzkzNDQzZjc5M2RlNWMyYTQxMzFkY2JmZTk4MmVkMjc4N2E1Y2IwZDk5YWUwMDE3MDdkMTJjYWRmNTA1OWViNGYzNzNlN2I1ZTRhOTlhMjhmZjE4ODQxZjllZGFlZDc1NThhYzBkMDYyNTg5Y2IzY2NlY2FhZDRkOWQ2ZGMxYTdkYmNiMzVhZWY3YTE3MzhjNmM2NmJhMDRlMDhmNjkzZDI4Zjc0OTlmNTdiZDhiMDJkOTdlYjNmYjM2ZDhiZDc2N2VlZWUwNzA5NiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImIxOWQ2OTE2ZGQzOWVhYjExMTY1ZmYyMDY2ZmVhNTNmNzI0ODhhNzhlYmE0NzNhMGUxNDFkZTFkNWIxM2ZlY2Q3OWU2NzhiNGIxMDhjNjVmOWMzOGZiMmEyZTVjMjljNGVhOWRkNDUwNTkzYjZiM2M3YmU3NmVkMmNmOGJhYTFiNDQ3OTRlYmVmMWMxMTA1YTQ0NWI3OWFhZmU0NzFkOWY5ODgxYmU3ZTgxMjgyYmVjNDY0MzFiNTA1Y2E4YmM1MDQ5ZGE1MmNkNGNiMDc1Y2M4MThiYjc5Njk3YjczOWUwIjoiIjoiIjoiIjoiYWJmMjljYWE5YmNhZTEwN2FjMzgyMjA0YmFhMmY0NmNhMjc0MjA5MGEzYzg5NWU0MWIzNDVhNmNkYTg2NjBlNDQwMDA5ODQxNzNmNTdlNzljYzdhYjg2OWQ4ZDlmN2YyZDg1NWIxNzFjMzAwN2ZmOWM4MmYyYTUyOTFkNTA5YjY1ODRmMDQzNDYzNjFkZTlhYTM3M2Y1ODdiNmNlOGNjNDNkNTg5ZDg3NmM5NWU4MTM4OTBjMjZjZWFlNjFiYmUwYjg4MDcyY2FjZDBiODU3ZDZiMzNhZDllNTYyYzhlMWFhMTU5MmZmMTZjZjY4M2U4MTE0MmNhZjQ5Mzg5NmZkYjMyNWVlZjVhYjZlZjMyMzhjYzNlYjNiYWVhMDU4MjVlNTc1MzNhZDhjYjcwN2IzNzNkMmQwYTJjMDQ4YTA3YmI0MGE1YTY4ZDE0ZDIxYTc5NmZhOTdkYjA2MzMxYjQ4MGJkYzM5NzAxYmYyMjk4ZmQzNDA1YTQyZjVmNmI3NmI5ZjQwZGM4NjcxZGI2MzJjNTg4YmE4OTIxMDc2N2JjMTY1Y2U4OGFjY2M3ODQyNDIxNmUzNTdjZWY1MmEzMWU3NjAxZDNmMWNjZTFiNWI1ZDcxYzNkNjIyYzlmNjgwOTJmNjY3ODdiMzJkMjQxNzE2OTk2YjIzOTIzNzZjNDg5MDkiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNzNhZmFkZmRmNDZhYzljNTI4MDU5ZWM1ZTRmOTQwZjEyMGMxOWJlZGE4ZDViMTJhZTY5MmMxZDNiMTI1MjY3NTRjZTUzMmMyOTFjOGNlODIzYWVhZjkyM2IzYmU4YzQzOGQ4YjJhODIxNjJiY2UwMjAyMzc0NDBkMzQ0NWQ0ZWY5MTc5M2I5ODMyMDJiMGY4NTMyYmUyZDc4YzM0NDY5ZDJjNjdmZWEwNTQ5NWZlZWM2N2I3NjYxNTk2N2VmYTZmNmJjZGU1YmNmMTgyODVkZDNkOGY5Yjk3YjM0NjM4MTMiOiIiOiI3MTcyNjE5YmY3OGMwODhjNGYwZDViMzU4ZjYzY2JjYzAxOTYyMGM2ZWE5ZmZhMzFlMDQwZWMwZDUxNjY1OTg5IjoiYTA2NzBhNmRmMjAzM2NiMTliMDgyYTNjODNmZDJlZWNkZGQ5YjljYWViZjNhZWQwYjc4MWFlOWQ0YWM4YmJlMiI6IjM4ZWJjMjQyZjI0MDU2OWY3OTIzNzlhZmUzOTNhNzY2OThmZDA3ZGMwNWQ1Yzg2ZDAwNzkxYzFiOWQxZDc5ZjE4MGM0MzYwZmM4ZjJlNTMzMmE5NjExOThkNzQ4Njc1MDY3MWUxNGQzOWEyYjQ4NTJhZWRlMmFlOTc0NTQ4NGNhMDVkNzQyMTE5MTU3MWQzMzRjZDcxNGI5NDMzYmEwMjZhMDU4Y2FiNTYxOTIwOGYyZTU0ZjJkNDgyODZlNDliZDBiNTI4ZDA1Nzg1YmViNGZmODk1M2ZlODc1Y2QyYzkyMjc3NDk0ZjJlMzE1YWIyNzkwYTFjZDU4ZjAyMjI0Mzg3NDcwYmQ3ZWRiMzE4MWQyYjU4N2U1YzMxOWEyNjJjNzgwNmY4Yjc1ZTU5ZjI4NTc4NzFkOGExODJiYTAzNjZjZDNhOTY4MDIzYzIyNTgyZWM3YmFkMmEyMDRkZTBlYmEzZDI0NTY2ZjIxM2MxZDg4Y2EyYjJjYThjYWZkODE0OTE5Mzk0OWRhODg1YmQ3NDQzMjNmMzFiMzk5NTZmZGVhN2JjY2IxZDY0ZDNmMTRhZmQwM2UxNzU1OTYyZDlkZjFmMjUwNzA5ODQ1NTU4NDM1OGU5NTFmN2ZmODYxOWYxYWFiOTZlMTQ4MWVkZTUyODkyMjQwNTNmNjAzYTk4YWU2IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImNkNDUzYzMyOGFlNjgxNTJlMDc0ZTE4YjY2MGYwMzY2OGNmMjY0ZWFhNDEwOWFmYjk0MTgxNmY3YmYxZjczY2Q0MDQzZDQ2OTI5NDI0NzI0ODJmNDRlN2Q2YmE1NDg2ZGJlZWExY2YxZGU2YmE2ZWExNjA2Y2FjNDFhOTJlMzQ4MzlmYjI2YjVhOWJlZTVmNGY0NzU1NThhNWQ4ZjY3M2Q4MzgyNDdhYjgxYWFlZWIyYTcyYmU0MDVjM2QyNGE2MjVkZjc0NzZiMTEzM2I1NmY2ZTdhZWIxODRmNzNlYWZiIjoiIjoiYzZjMjNjZGRkZWQxNDBhMzAwNzlmMzVjZjllMmRkYTZiYjJiMjc3ZDhhMjEyZDJmY2ExYTgzYjUwNzgwOGU3OSI6ImVkYjhjODY1Nzg4M2ExNzA5M2ZmZDM1NWU4MTQ1ZTI2ZjY1Y2U3MDcxYmEzOGM4OWZjMDMxMDQwOTk2YTk3MDUiOiI2MzVhN2RiYjdmZjFkYzRhOTBjZTkxYmExM2Q3OWUwOTgxOWVjNzM4N2MyNzdjOTE5NDZiNTlmYWQ0YmY1ZDYwNmZhNzVjZjAzYjY5MDRjNjBmOWE3MDY5N2U2NjJhZWVlYmM3YmEyZTZlOTQ2MzJjNGM1ZjNlMTY4NmU2ZTk0OTc5NDVjODg4OTI0MzcxOWFkMDY2ODQ3ZGMxMWVmYWMxNDFlNThhYzI5ZDZkMjc3OWY3MDJjZDFkNWZkMGQ4MmQyMzJhMDA0ZGZkYzEzYzA5MTQ3YTc3ZDcxNzc0NzYxYWI0ZTc2MGE5ZDI3MTRlOWZmYzUyNDAyNjMzYzhjMzAyMGI3Yjk4MjJiMTc3OTc2ZjIxYjdlOThjY2NlYTRhN2VlYmUxY2Y5YTYwNGJkZmEzNmYxOWU0NGNmNDMwODE3MjI1ODU3NmMzNjE1Y2MyNjQxOGU4NmE3MjY5ZTBmODhhZjdmMTVhMTE0YzViOGM2Zjk2YjhiZTA5ODU3MmFlYzQxMjlmYWMzNzE3MzZiMmZhMGE4OGYxYjU0ODBjN2M4NjU3ZGQ1MTU0MTdlZGJjZDkwMmIzZDNlOWY3ZTEwZGY0NTE2MGEzNzI4NDkzM2RhYzVmYjEwNWRhMTQ1ZmYxM2Y2NzdkOTljNDk0ZTI3OWIwYjE5OTAyMzRmYjhlZDlkMyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIzYzRmZWQzYTI2NTgxOGY2YTMyM2I5ZDUyYzA0YTkyNjk4MjIzZjMxMzZjNzc0MjhiMjllMWNkNmZkZGM3ZTRkYTQ4ZDkxMTVjNWFkMThhNDE4MmRmNDgwZWRkZDUyOWYzNWUyYmQxOTA4ZGZkMDU5NjRjYzNmZWZlNTNjMzg2MTVmMDRjYTVlMTJjMDY4NzJhNjk1OTcxZjkxNDRmNmI5N2JkMzJjNjIwMDgzYTM3OWQ0ZjU2ZTgyMDEwNWM1ZjViMGY5ODUzOTkzNmQwNWQ1N2Y2YWZkYzE5MWNjZTdmNCI6IiI6IjcyNzFhZmJlZDFiMWYyYmU1NjQzYzViZGYwYjYyMTgyNDdhNjEyOGJmYmUyZmY0ZDc0NWE5MjZhM2YzNWQwZmUiOiIwMDAyMmQ4YWNlYzA5MjY2YTg0NjczZDA1NmU3YjIzNWYwNjA4ZDE1OTg5ZGRmZDcwNTk2NDc1MjJjZjNjM2U0IjoiNjEwOTAxMzk5ZjQ1ZWY1YTFiNzQ3YzU3YjczNzA2NTA5ZjU2OWUzYTJkYzg0YzY2MDNmNDAzY2Q0OWU5OWUyODhjOWFiNzdkMDBlOTc0ZWVhNjI1NDM1ZGQxMjZlOWU3ODM1NjZhNzEzOTZiMWJmNjM2NGIzNjMwNWQxOTg2MTU3ZWI1OWZkMjMxYjZhYWUzNTE5MDM0N2UxNTYwZjkxYmIzODg4MjM1MDRlNTYzY2Q2OWY4NDUzNTU1OWE0NDZlZjgzYWU2MjVjYmQxYzVhNGQxMTRmZjM5NGQ0MDdmMTljOGY5ZjkwNjI5MGRjZDAzYTdiNDcwOTFhZDA3ZjNiMTkwYjgzZGU1Nzg3ZGZmNDdjYzU0YTNkNTNkZDMxZjc1NmViNWRlOWY3Yzk2NWQ3MDE3NmE4ZWU3MWZlODY5ZTk2MGFkMzNjYzQ5MmU5NTY4ZTU3NDhmOWNhODY5ZmYxNDMyNTJmNGM5ZWM4YTBiZjkzN2YxMzhmN2FkMjY4YWJlZWQyN2UxZDgwYmVkMGNiN2I3NDQxMTk4OWIzMTMwNDNiMWM2NWM4ODQ3Y2MzZGQ2ZDQ4NTA5ODUyZDMzOTAzMjUzY2ViMDc0ZGJjM2QxMjQ3NDlkOGE4ZTQxZDI3Zjk2ZjdmYmM5OTA4ZDRlY2JmMDRmNjAxODdmMWE0MmMzM2MiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMjI5YjMzMThjYjI1MTg5ZTEyY2U5ZWYyNWFjZDA4YmY1NmM2MzFjNjA1OGRhYWU2ZjM3N2Q1OGY3NTc0NTc2YTRjMGI3YzYzNGUxMWRhNWNjYzAyYmU4MjRlNmVmZmI4ZWJjMGQ1NDAzZDc5YmIzMDU3MmJlNDdhNWVmODhmZTM1YTA0MjFkY2Y5NTQ3NDM3Y2QzYTU2M2I2YmU3YTE1OGE3ZjYwMWY3NTM0NzUwOWExMmRiYThkN2YyYWJjN2FmZGY4OWM0M2ZjNTUzODMxODY1NGZiYzkwYzNmNTFjNWEiOiIiOiJmOGY5OGM2NWJhMWY2MTlkMzc2ZDQxZDFkZDQ4MGQ0YTA0NDZkZTU2ZTBiM2RkMDA3ZWY3ZTFjYzJiYjk4ZGVmIjoiYjNiZWQ3YzRjMmUxYTc2MjIwOWIxZmQyY2U5ZGRkYThmZTQ3ZWI3MDIyNWU2MGQ1YzU4ODdhNjFiZGVmMDAwOSI6IjI0Njc5NzhiMjkzYWZlMzNhOTZhNzI5MTI4NmVlYWUyYjFjOGI1NzUzZWQ0ZDQ1YjNkNWJlOTA2Y2YzMGE2MDUxMDk1Y2JjYTc5ZDI4NzEzMzRlMDQ5YjcyOTA2ODkyNGEwMzZlYTkxNGE1MjQ0ZmM3MTAwNTM4NWVkNmFkN2M3Y2RhYWJjMjY3YThlZjAwNzRiMTQxODk3NjNiNWRlMjExNWQzMGRhNzBlYjgxNTI2MmFhNTExZTk4NTliOWQxY2YyODEwYzkxMGJjZTE4ZDE3OWEwMzA4ZmVkNmY2ZjkxMWNkZTc5MDMxZWFkMzlmNDk5ZWY4NWY3NTI1MTQwZjFjNDk3ZmFiZDg3OWFlMTMwZjczZmJiZmU4YzNmYTc0OWRmNDhlNDg0Y2MyZmMzMTNkMjM0YjVkMGI0OTY5MDk4ODQyMTYxMTIwNjA1OWI0MmY2ZDcyYjBlNWZkZTZiYzExMjkxYjg1MzNhOWFhMmM1MjFlNTQ3NDliYzE5MjliNzFmZjA1ZGZjOGYxNzE2YzlmYjEzY2RhZDE2YjM1ZDE5NGE0OGFlMzc3NjI1MzAwZGY0NzlkM2ZhY2QyMGMzYjhmZGYxOGI4OGI1Nzc1MzA2NWU1NDJmMTQ3MjQ4MDY0Mjc4NjExZTk5YWI5MmIzM2M2OGFhYmM0ZGEwOGE0OWJmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjRjZmJmZGEzZmU4YWU3ZmZkZDg0NTBhNTJjNzgzODhhNmM5ZDkzYzZlM2FiNTM3YzkxZGZmZTIzYjU2OTMxNThiNzkxOWU4NzVkOWVkNjgyN2EzM2Q1ZWM1YmRjZjA2MWMzMTFhZWUzNjk1M2QxM2MxNmYwZTUwZjQ1NTcwNWE5YWI3YTQzNmIwMzk1NTExODdhMGY0MmU1ZjkwYjQwY2JkNDRlOThjZDUyOTU1NTBjYzQ2ZTMzYmU2ZjA3M2E5ZTZjMDJhY2U2YjBmODk2ZjllYzU2YWI3ZThiZTdhMDdiIjoiIjoiOWQxNTVkNjc1NGRkY2ViYWEzZGQyOGJhMjc5NDZjZTNlMjJkZTI5ZGMxZGI4MzU5Mzc4MzkwMjk1ZTVhYTI4NyI6ImVjNjM0ZmM4NmJmYjQ1ZjQ5YTExOTdhNzA4NzVkN2FkZGViMjU3ZjEyNDUzNzVhYTFmMDFiM2JjMzU5ZWQ3M2IiOiI0NmY1YTY0MDJlYTllOGEwMDg5MjVjOGY1NTQwYzQzNjZjNTk5MTY2YmFhZThhYzc2MmRhMTAxNTUwMzUyZjM1ZWQ5ZDM0ZjgyZTdlMmNlMDQyY2QzNTY5YmU1NTdlMDJhYTg3MTYzZDFlNDUzOTA0YzVmY2M5OThmYTY0YzhlMThmZGU2MWE4ZTU0YzIxYWQ0ZGEwNjA5NDNhYTc5ZGUxNDMxNzI3NjQxNGU3MWE4YzEzMjA1M2M0ZGQzNWRhMGRhMWZiZjdmMGNmZmQyNjRkODg3YzhhZTRmMzU4YWZlN2U4YTFiZWM2MGZlN2I0Njk2YTZiMWMwMGZiYjQ2MDEyOTM3YjcxNWJhOGViMTczZTA5YzEzMTZjYzM2MTgxOWIyNGY3Mjg0Zjk4M2I2ODI0YzM5ZWRkZjNkMGJhNThlODJhMmM2MDNkODU0Y2FkYzQxZDViMTJhZjBhNjdiMzY3ZjQxMWM1YzkxODIwZTQxNGUzMGIzZDJjZmRlNjg3NmEzZDE0NGE5MDBlYjJkY2ZjYjc1MGJkY2YwOWMwYTAxZGI3OWFhYmY1M2U3ZjA0NWI5YzgyNGM4NjYyMjgzYmQ0Mzc2YzcxNzkwOTZjNWM5Yzc4NGQ2YzNiOTk4YzRkMTFiN2ViYzAxYTRhNTYyODUyYjliODJiZDMxM2ZhZTBhYSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIzMzUxYTA4M2MxZjYwMzNiZTVjYzg3OWVhZjM0ZTI1NTQyZWJhYmIyNjcxYjY1ZjcyNmU3NmVkNzExYWUwNzNlOWJkN2VmNmQ3ODg4ZDZmYzMxZTUxZGM3ZjYwZThiMDdjYzZmZTk0ZWEwZjIyY2VhMWFkNTRmZmFkMDk3MDA1OTZmNjMyMGQ5ODA0ODhhZDQ4NTI3ZjRlMDA5MzdiNmY3MzZlYmYxYjkxNjZlMjBjNWI4MTJjOGI4NWEyYTI5ZDkxZWJiMDIxYjE5ZDIzNzRlZDRlMjg5NWQxNTE4ZTZjZiI6IiI6Ijk0OTdhMWM4NTc5Njg0NmRlOGQ4YjcwZDY2ZDM2OWVmNTliZDkxMjAzNjYwZDZkZjI5MzUwMDBlOGJmY2ZlNzEiOiI4YTY4MWQ2Y2JlMWNkYTVlMGY5ZWVhZWQxMmZkYWM3NWI3YmIzM2QyOGQ2ODU1ZDQ5OGI2YzYxY2Q3ZWJjYTU3IjoiNTE0OGZjZDdjMDFlZWQxZGExZDhmNjhhNzA2MjY4YjUwMjhlNGYzNDM1YWM1YmNlZjkyMzFjYzgxYzZiNjgyMzE1NmZmNzQzMmU1MTY1MWQwZDAyZDkyZTIyMjk3ZGZkMTJhOWQ1MDdkZDMxMzdjYThlZjIxNmY5NjlhYjY3ZjU0YzhkNWZkNWMyMmM5MTU0YjZjYWJhNGExNDdjZTRhYTIwNjQ3ZTJiY2RhY2I3MjdjYjA4MTBlNDEwNjQ5NGRiMGUyNWU3ZTZmOTM5ZDI5MTI5YjBjNWNmNDdhZGIzNTYyOTAwNmU2ZjVjN2MxOTQ2YzFlNjQ3ZDlhZWNhYzdmY2M0ODhhMWM4NjgzNzhlMDE0ZmM2OGFmYjY4NGUxZTA0M2Y1M2ZkYTQ0MzFmZjAzMTEwN2NjMjM4MzM5NzViZGFjMDYwNzgzZjljZGJlOTZjYTE2NGVkNzVjMzI4MGZmMzU1ZTI1ZTE2NWViMzZjZGQ0ZDY1MWNkYmVjMDUzYTM4YjY0MDZjMjZhYjZmMTZjZDBmZmUxZThlNWEwMTdlMjVjNWM5M2ZjN2JhMTEzODUxNjQzMzdkNTQxMjNiYTAzZTY1YzI2MWU4Mzc5ZjJhYjI0YWEwZDI3ZjU3YjlkN2UwZmE4MjVmMDY5ODZhNGZiOWI5OTczYWRiODc5MTRjYzYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMzQzOWI1N2EyZDE5ZGI4YjdlMTBmZjlhMzRhYzFkMjliOGQ3ODliMDVmNGNkMmJjYjAzNzZjNmUxODRjZmRjNjk1YzZlMjZhMGIxNWIxMWE2ODU0MzhmNDhkYmQ3NDMzZDYzMTE5ZmZmYjVlMzE3ZDk3YTViM2UyM2ZhNjIyODIyMWNhYWRkMTYzYjY2ZTM2ZTQxZDFkZjg5NDczYWQzYTExNGQyNWM4MDkzMTI4ZTIyMTlhN2YyMjA2NjIxYjk5ZWJlNjczYmJjYWE5YTM2OWFhZDMzMzk5Mjc3NzNiNTciOiIiOiJkZDE2MDJmODMzMDU3Yjc3YThjNzYzZWM1YWEzMDIzMjY5MjBiYzJkZGE0NmI0YjgzYjM2MDA2NzNjMWY0NjI3IjoiZTIzMjhhMTA5YTQ1NDZmNDMxMWJiZTNkZWNiNTNiM2ExMDI4OTg0YWU3M2VmODg0OWJmNjgyZWMyOWM5YjVhZiI6ImUwMjMyNmI0NzcyNzEzNjYxMjhjZmYyYzg4YjcwMzgxNGM1MjU0NzkzNmJhOTBlNzc2ZTM4MzYyMGVhYTZmMmEwYWFlMWNiYzZiZjlmZThjMzk1YzA4OGVkZjI3ZWQzYTNlZTZmMjQyZGQ2YTZjM2RlZWIxOWZiZDdhYjNlN2QyNmI4YzZmNDJmODY4MDNiODg1YzczM2FhZmJkMWM1OWU3N2U0MzI3N2UyNDRjMGU5YWZiMDYyOWFmNTEwZDAzZjZlYjU0N2JiMGQ0NTUxNjNkMTRiZWNhNTNhZmI0ZTc1NmI4MmFiNTYxMDUwMmMxZDc0NDA2MjIyMTQyZjFjYzFhNDFiNDE4OGQ3OTk0Mzk3YTdlZTcxOTU0ODJmMjJjZmQ5OTdhNjExODE2ZTMzMWNjNjIzODdjOGQyODE3N2VhNjcyN2ZjNzczYzE2Mjc4MTk0YjQxOWY3ZTk5ZmZmMjU5M2JiMGU2NjQ0YWQ2NTNiNjNkZTgzYjI0NGZjZjUzMWViNmRiNTcxNmU2MGRjMjYwNTEwOTIwNzU0NTA0MTQ2ZTRjNzI3YWEyOWI1NjU5YWE5N2EzZWM2M2QwN2Y5Mzg3Mjc3ZDQ4N2U0Yjg1NWE2ZWMwNTMyODlhZjZlMTcyODRhNmRlYWVmYmQ1MjZkYzNhMzc5ZTVlZjQ0MzRjNjk4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImY3YzQ5OTUzNzkwNzllMDM2YjliMTBkYjZmMTYzZGIyM2JjZTczOTlmYThiNjI2ODA5OWZhNWYyNzk1YjY3ZWYwNmVjNjc0MTk3YzczZmU0N2VhZjBjNDk4NmRkMzU2NjA1NWViMTQ5MzRiYzhkNTI3MmJhYTc1MTI2N2MxZGFiMWQ1MmRhNjIwNGFjZTZjODY5YmVmNTZlYWMwMDZhYmU4ZWVkNTY1NjkzZTE4NTQ2MTkyNjZkNDAwY2QzZjcwMjIyYjZjNjcxMTIwMTczZmU5MThkMjI5ZDVlNTY2ODg2IjoiIjoiMjNlYzdkNmJhOWE2NjZhYjQ5ZGY0NWVlYWMwMDZhZDFmNGYwZTJhYTRkYTIwNjFkMDQyOWI1MTBlYTQzZDkzZCI6IjI5OTI1M2ZmYjA0ODFkMmExZGMyY2NmYTY2NjEyM2EzYmRhNjUyNjY2YTc3YjUyYTMyZTRjZjkyYTY1ZjBkNjEiOiI0ZTQ1NzM4MzNmNGVlNWRjZmM0ZmIwNTdlM2ZmOGE3Y2Q2MjFiMWM3YTUxZmE0ZGI4ZDAyZTZiNjI0NjJlYTlhYjYyNDE0Y2ZjMzI2MjU2OTE5MmE1OTYwZjhjM2FiMTY0ZWYyOTc0ZWUwMzgxNTI4MTE1OWVlNTAyNzI3MzA4ODFkOTk3YTI4ZWEyZjliYmIyZDdmMmVlYTcxOTQxNmI4MGM3MzU5OGU1MjRmNWZkOWI0MWQxN2YzODZhMzBjMTk0ZTI3ODgyNzhhNjFmZTNmNTYzMzM5NWUyOGE4ZjE0MmU4OTdkM2I2Y2YzNGMwMGZjODRhNDQwN2UwODE2NTE4YjIxOGViMDhhOWQxNjE5ODFjODRiZmQzZTQ3ZjNiYTM2ZjU0NTg3ZDYyMDYwZTBmY2E2NTMyNGEzMzJhOWFiYTdjYzFkMGU4NDJiZGJjYzhiMWJjNTc0MzJmOWQ3MGU2NDc1OTU5ZGEyZmZmMjU5MDQzOGJkN2I0ZmFmMTllYmJhYWIxNzU2NTUxODkwNTA3ODFiN2M3YTI3ZTk4NjcwNzNlMWVmZTQ1YjQ3YmEzZjg2NDE0MjI5ZjVkMmNjMDhhMWQ4MDFmNzMxYzMwOTliNzQ3YzY4YzFlNmNhODYzYTgyMjY1ZDNiMjgxOWNiMGQyZDRlODAwNzhlZTc1ODRlNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIzNzY4MjlhYTkyOWFhNGZjYWQzN2I0MWYzYTIzYmVjMjgzODYzMjljYTY4OTMxN2M0OWJkYzJiZWNjZDUwNjZiOTJlNzYzZGJlOGE4MGZhMWExZDIxYzM4MTMwZmQ5OTlkZjA1NDQ2YmJmMTI4YmYyMzgzNGQ4YzdjZjg5Y2ViNWVlNmIyMTEyNGViNmQ0OTY2ZjBmNWNkZmE1OWVmNTg1OTJkZDJkZWRhMmY2MTFiNmMxYWM4ZWExYjFkZmIzYTUxZGM1NzYwYzNhN2U4MmZlZTZmMDljYzJiN2E3NGQ3YSI6IiI6ImYxNGMwN2UwY2E4ODYzNzNjNTYzY2E1NDRjM2VkMDY5ZGU2OTdjNTM4YWZhZjAwOWJiZmJkOTM1OTk1OTU1ZjYiOiI0ZDcxNTc4ZmI1YTMyMTFkM2JkZGE4MjM5NjUwN2ZlNTE5M2QyMWEyZjcwZTZjMmIwMzgyOGZmZjUzZjVmNmE0IjoiZjZkZjk4ZjljNGY3ZGM2NDIwOGFhNTgwNGJlODQzYWU5YTk4OWJhYjczZjZhMzZiNjAzZDE1NDliYTBhNThjYjY1MTFiZjU3NzZhNzg2MTQxZTQ4MzA1ODU2YjFkYjZmNjQxOTc1ZDBjYjUxMDJiNTFiNTM5NDk2NDM4Y2Y0Y2I5MDU3MzhjOTE5ZTFiMDYwOTJmMWFmODkzODJmY2FiNGUzNjU2ODhhZGRkZjAyZmM3ZmY2NDBlMTExZDVmM2JiMmMwNmRhOTFhNzcyNDJlMTA1NWMwYjU2ZjE3YWJlMDgwN2IxOGY2YTkzZjYxMzg5OWQzNzc2MmJhYjYwN2MwNTQ2N2RjODllNThiMjFhYzUwYmMwMWZhNTJkMWU2NDliZjc0ODQxYjk2NDNhZGI0Njk5ZWM2ZWMwYmI0ZDI5N2MxMzhmY2VjMWY0MjQ5YjlmOWFiNjBjMjc0M2FiMThlYTVlMjAyMTE0MjYwZWRmZjkzZjQxNDhjYTc3MmY5NDU3MjM5OGJiMzg3Yjc4Y2NmNTBkNjIwMGY3MzY5YmRlYzQ0YmE2NDAzYWUzNjNmM2I3MTBkNDY0YjZmOTM4OTM1OTAzMGI2MWIyYjYyNjFhZGRmNDg4NDgzZTBjNWU0Y2Y4NTRkOWI2MDFhMWIxYWFkYTgwM2FmOGZlZWNhOTEzZGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOTgxZGE4MjBmYTUzZTcxODRhMWEyMTRhMTE0YTk0Mzk1M2VlZGIzOWU1YmYyYzNhYTcwMjhhYWZlNTdlNDgyYmY0YzBkYmRmODYyZDU1YWZiZDBmMGE5N2Y2YzYxMjA0NzExYjQ2YThmNWQxYTY5MDg5YWRkNzg5ZjM5Y2MzZDZkYzdmZDE5YWY2YTYzMGYwM2IxNDk2ZDg0YWE4M2YxZWIyNGMwZDM1NDQwN2ZhOTY2NGVlNWY0YzhkZTRlYTc1ZjA1YTE3NjIxYWE5ZGM1OGVmMzhjZGI5MTg0ZDI0YjEiOiIiOiIyZjRkNmI0NzI0Y2I3MTViMGQ1NTNhZTFjYTZmMzA1NWQ3YzM5OGMxYzAzMWEzYTY5OTQ2ZjA5OTExNmQxM2Y2IjoiNzZjMWQ2Nzk3ODZmMTc1MmJjZGUxMTA4Yjk5NzczMTFmNGFmOWUzZDVmNWZiOWViNTI1NjVkMGVmZjkwYjRmMCI6ImE1YjUzMWE1MWU4MTE4ZjMzYjIwZWRjNzZhZGNjMzZmYjBiYThlN2Y3NTI1MThiODRjZTcxMjQ3OWNlNzQ5ZWE4OTNmZDMxMzY4YjEwZGQ2ODMyZjlmMmJkYmFlNDg4ZGQ5NjY4YTgwYzgwOTFkZGU2MWU1ODMzNmE4MTYwZmQ3YTE2N2FhZTdhMWQwZjBhZjA3N2Y2MDBiNWVhMjFlNjQ4NDc5MDFiYTY1OGZlNDBmMjAwODM5MDdiMjViMzBjYWQzMTRjYmQzZjE5NGY4YmU0MDczNTliOTRiZTc0YjM0ZTJiNGUyY2U3MzcxYzEyYzI4YzdjN2JmMDAzMmMwMzM3MWE2MjQ3YjYwYTExM2Q1NmNmOTM4ZDFlNGVlZjg1Nzg1ZmVhOTBlZDQ1YTFiNTBmYTQwMjI4ZmIyM2YxNTQxNzVmYjBkNDM2YWQ3MjYzMDY2NTllMmU5YjZhODE2ZTlmMDcxNjc4MWE3NzRiMmMzMzg2ODEyZTg3MmZlYTkxOTJmZDlmZTE0OGJmZDdhOTg3Zjc0ZDFjN2U3YjYwYTAwYmRlM2U0YWI1M2QzZmJhNWRmMGUyY2I3YTNjYzZiZDQ2MmU0M2I5Mzg3MWIzZTIzODYzNDE3NDMyMmE4ODA3OGNmMzg2ZmIyMTBhYTRkZjJjNjljZWQ4YTRmNzJiMmQxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5MDlmMzBmNzE4NmJmYmFlMDYxNWE3MDFlM2ZjMzYyZmM2ZThjZTQyMTYyY2QxNmZlZDExZWNmZjcwNzYwZDdkMDY3OWUwYjc5ZmVjMzNmODNiZDcyMmYyYmNhMzM5ZTc5MWU1ZGI3YWYxNmZhNjI5Yzg0ZDFmNDc3OGQxYjFkYzI0Yzk4MTM3MTE1MDczNDljMjYzMTllMTgwODQ3NTVjYzM5MmM5YzJmMjI0MTQwNmViZWYzOTg1YTRjY2I0NmIyZDdjNWY4Yjc5MzIxMTYzYmRmYzNiNWUyMWVhZGM4OSI6IiI6IjFmY2ZmYjliMDQ3ZjJlOTA0ODk5ZWI2YWE4MTViMmViNTFlZDY5NmRiMjQ3ODExOGM0MjI1YjdiMzA4Y2UwNjkiOiJiZWNmMGM0MWQzOTMwZjE1MjI2MGUwZTZmMDYzNTViZDBjMTcwMWI4MWU2OTlmZmY3ZDhlNWE3NTBkNTdiOTgwIjoiNDA1Y2IxODE4NWUyOTVlMzViYjhmNzU4YjAzOTJkOGUzMjM1NTU1MjliODRlMWRkMDgyMzU4NmRjMzVmMjVlMjdjNWEyNmRhODdjYTU3YjE1NDRkMDRiOTRjY2E5NjdkZjdkN2Q4OWUwMGQzYzkxOTk2MGU0ODZlNmY0Y2VjNmVhYzE5NTEwNjRlZmIzMzExZTRiZTM0ODU1OGJiNjkzNDM4NzUzNDYwYzY1YWNlMTQ0NzlmY2M0NDkxNWRjNmIyMjM5MDBmYzg0YWRkMDRjNDhjNTdiMmU5YWExM2M2OWEyY2YyYjBiZGQyYjJjYzcwYzQ5YTMyZTVmYTA2MDZmYjE1MjNiMWRhODk0ZGQ3ZjY5NzMwNTA0NzFhNzI2ZmFiM2JhOTlkZTMwMzNlYTVhMGMyMWU2ODdhNWVjOWQ2NmNhODQ2MGQ3NGU1YjFiOTkxNDNkZGZkNGFmNmQ5NWY2NjgzYjEwMzEzM2NhYWU3NzY0OWYwMDY1MmYxZTc4Mjk1MTM0ZWU0MmNmMzViY2ViN2Q1MmY2Y2FjYjQxZWZmYmIyZWQ2NjFkOGY4OWJhYjUxYTkwYzcwODYyZWU1ZmQ1ZDNjNjA2MGJhMGI1YTU4OTdmNzk2ZjQxMDdlZmIwOGU1ZDgyNTAxNjkyNDAxNzMyYWJmNTIzN2UwNTg1Yzk0ODMiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijk1ODZlYmUyN2RlMDg5MjE4NDMzMTQzZmFkYzc0ZWVjNmVmN2M4ZDA3NzUzNmY3ZWNiNjJkNDEyZWYwZTE2MzQzN2Y2ZDg0ZThiYzZlOTdlYzAyMDk3ODE1YTk5YzMzOGM4ZjM0MzRiMjg2ZWYyNmIxYzIzNGViZjFiYjFkMjE2YjE0YjRjM2IzZGY0OGFjMzI4M2IzZWM5ZTUwYzkxMjRhNzE3ZWIzOTg5NDFlYzA4MDFmOTViYTYxMDhiZDlmODlkOWZiZDcyZDYyNDhhZTUwOTYxMzU0MjgwZDkyZGYzIjoiIjoiNjVkMDhkYTdhMWZjMzkwZjI0MDBlZmI1NzUyMGUxNmRhOTMyYmJkMzI4YTIzNjE2M2M0MGE1NDBkZTU4NTQ4OCI6ImExZmZjMjE3ZTcxZDFmMTA0N2E5NjU3ZDYxZmZhZDU1OWRhM2ViYjc1ZDVhZjc0ZjNhMWNhOWZjNWI5NjRmNzYiOiIwZTI5NTgxNjliNDEzMDQ0OTE3MTI0Zjg2N2Q4ZmQ0Yjg2NTU4NzUwNWQ0YTE4MDQwMDEyMzE5ZGJkNDcyNjg4YmQ5MGEyODcwNmM1NmJkMTU0OTI3MWIxMjM3YTVjYmZmMTg0NGI4ZTE5NDdhYjk3ZDBiMWQzM2JlYzVlYTMyYmEzYmJiNWIwOTg2ZDk1YjhhZWJmZWFhODBiMGExMzJjY2VmZTkwMTNjZWU0ZmU4NDU5N2NkMmMzZGVlYzQ2ZTVjNDQxOWNlMjA2MDQzM2NmYjY5NmUzNGM2ZjNkNjI5OGY1MDFhNTZkZmQ4NWFiOGE5YWU4MTYzZTVkMDljNzA3Y2Q2OWEzZGIwYTFlZjRhMWNiZDlhNzUzOTZmN2ZhY2U1ZWFlOWQ2Mzg3NTg5ODEwN2UzMDQzY2RmZjdmNmE3ZmVkNDgzNjI3OTJiN2E0Mzc3MWYwNmQ5NzA4NTUyNWY1ZjM4YWFmMzhkNWI2NjhkYmY4NDI3NmMyNTgwMjljZWE3NDM1YWExMDczMzRlNjllY2Q1MGRkZGRmYzhjZjU5MjM3M2ZkZDdjYzI4ZWI3M2U5ZmQyZDJkNTQxZDBkODhmOWZhMWJiNjJlZGUxNzY2N2Y0YzMyY2M5YWUyMDM4ZmI3NzYzYjkyMmMzNGQ3MGQ1ODA1ZDM4OTZiZjgzMTljZCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDAsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiOTBiODI0YjdhYTE2YjQ5NTRkOTljM2ZkZWQ2NjlhODNkNjc0NjBjYTJmYTg2MTQ2OGYwZmY2ZThlZjYxYWFjN2VmZjg3OGFjMzRjMmJjNTlhMTRkYWM5NjU5Y2I1NThiMTE5ODlmOGUzNGQxZjI3YzY4Y2NkNzFmNDVmN2E4NDhjOTRjZWQwYjE4YzE3NWM3ZTFlYjUwZmUwMjA0Y2Y2MzBlMzliYTNkZWRkZWFlNWRlNGYyYzNkMjU0ZDZkOWE3NDdmNDg2ZTIwMTA2ZjVhNmQ3YjA1YTY3ZmU0NzRlNTciOiIiOiJhNzZiYTJhYzIzMmEyODJiMzgyOWQ5NDQyNTg3ZmNmZjQ2OTMzNTAyMzJlOTc2NDM5YjViOWRjYmMxYjcwNGM5IjoiMDZlYWRhNDQ2MDBmNWQ1ZWVhYzA0NmUxNmNmNTc2ZDU5YzFiYmU2YzYwOGQ3Njg0NDUzZjM1M2E2NDRjZDAzMSI6ImM2ZDUxZjlhYTIxNzY1NWJlODlhN2I4NTI0MWRhYzBjZjRmNTlkOTgzMzAzYzNjNWU3YzI3OWNlZGYyOTgwNzJmYTFjZDcwYTIxODBjM2IzYTU4ZjU1M2Q2ZDdkZmRkMDFmOTk1NDAxOTkzZWQ2ZjJjYzM3NzhmNzgwMjYyZjkzNzU1YzlmOGQ1NGQ5NGU3MDJkZDZkZjgyYTczN2Q1N2NiNTc4NGYwMzVlN2IyOTgzZTYyNTNkMGIyYzI2ZTRkYzcxODJkNWQwNjYyOGJmN2ZmOGJlMTEwZjI4YjI3NGJmMmI5Y2RiYzE0ZDE2ZmExYzlmMmZhMDIwYjA0NzBiYjc3NDRkMDQzMzJjMjNiYjE5OGQyZDdmOThmMTVmZGFiMWFlOGJmMzEwZGMzYjkwZDEzMmQ3MjJhYjE4M2Y4MDZjZGIzMjRjNTAzODk4ZjkxZDljZTEyZjhkZDE5NDI4NjdiMWExNjkwODljZjI0ZjE1MDgwNzlkYjYxODRhYjRmYmM4MDI5MmM0MzlmN2ZjMjIzMGMyMmJjZjAyMmFhOGVmMjlmMjNmZDNjYjhlZmY4ZmQ5ZjAzM2I1NjIwZDU4NDVkNGVjNWQwYzhmNWQ0ZjdkMDJkY2QyZTlmZWIxNDNmYTYyODg1YmYxNDBhYWNjN2EzMTYwNTA4ZWJhZTgxODNiIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMCwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIwYWQwZWRiNTBiY2NmYzBmYjY4YjVlN2I1ZWRmOGNhMzM4ZTU0NTdjZmU0NGFmM2ZiNWQ2ODNkYjEyMGM2YTA5Yjk5MDdkY2NmMTM1YzVjZDBhOTcyMDBhYmUyNDVlMTQ0ZmE3MDM2NWNkYjA2ZGRkZDdiNTlhNTU3ODMxZWM5YzNhYzE0YjNkZTc5MTQyMWNiYWFjYzYwOWJiNzY1OWM0ZTE3OGE3MTU4ZDc2NTEzNjk2NTVmOWM1NzA2NzRmZWUyYzVhZWQ5NjFmM2M2YmFhMGEwOTIzNjNiMzg4YWRkNSI6IiI6ImY5ODgwYzAwMjM0ODZjOGM4ZGNhYzJiNDAxMDBhNmUyYmQ3OGI5Mjg5ZTIwYTcyZjRjYmY0NmZjMTU2NjE5ZjYiOiJmNWJmMTkxMzA5ZDI5OGNlNGEzOWRhYTY2OGQ4Yzk5OTM1ZGY5YWUzMWY1YmQxZmJlNzdhMzY4Mjg1OGQ1YzBjIjoiZmViZWZhOWEyM2ViNGYyMzZkMTMyMWQ5YWJlZGJlMGJkYTVkZTZmYjhhZTQyNTk1MTJkYmUzZjRkZjdlMDA2ZTU3MWQ4YjU1ZGI2YTQzOGRlNjM5MTdhMmU0NzY0MzVlZGU1YWY3NzYzMDI0MWU3YTIxMzAwNWYyMDVkMzg1NzM0OGI4MjgyZTc5MDk3MmU0YTU5ODMwMDllMDUyY2JjNmJmZDAwYzA4MzA2ZDM0NmMzNTFmMzJhN2MwMWU1MTQyY2M2NWQ1ZTk1MWZkOTE4NmEwOThmNmYyMmE1ZTRkNWFiZDgwOTgyZDFkYTg2YzM5YjE1MjllMzZkMjM0MWUxODg1OTUxOGE0MjVjYmMxOThlOWRiYTg5NTU5MWExYWUzOTViMTQ4ZjAzM2UxMzc1OTAzZmRjYjQ3OGU4NDM4ZTA2MjI1NDRkNmNkOTkwZTVhNDYzMzY5OGRlZTUwYTYyM2EyYjdkODU5NmNjZDY0N2RiOWJlMWMyZTZmMzgzZTUzMTYwODFmMmMwNzZkY2M5ODQ4MzI3OWU4NzU5NGRkY2E1ZWM0ZWY0ZjlmNTI0Mzk1NzFmNjcxMDg3YmJhMDI3MDhhZjEwN2I3NzFjZjU5YmRkMzhmNGY1YjZjMzZhYWU4MTEyZjg1YTliMjgyOGUwNDg5ODhiY2VjNjgwOTg2NjAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAwLCAyNTYpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjA0MjU3NTRkMTYxMGMxNGY2YmU5Mjg2MDhlYTNjZTczMWFlODE4YjIwMGM1NDM0MWFlYjE3OGY2OWUxNDVmYzZiZDM4NDczOTI4ZGEwZDM2MzhiMDYyNWQwNmY2Yjk0ZmEwMDlkOTIwMjM4YjU5MWM5N2VmNDhiZGFjOTAyMWZkODVmMTljZTgwOWE5NjI3MTgzZTNiNjIxMDM2ZmQ3ZTNiZmUxZGNmNTFiMDdhZDQ1ZWE5MjRlMmQ5MzNmMTVjMTE3MjQzMmIzNTlhZDcyMTQ5ZTUxZTg2ZTU2YmE3NzY4IjoiIjoiZjc0NmU4NTQzMzhkODFkODllODFiYTM2NTVlYWM1NjU4NjZiNTZiMmZhY2NkYzUwYTM2MTU2ZmUyZmFhNjYxYiI6IjA2ZTgxYzJmZjYxYjdjN2U1MWY1MjM4YmFiYzM4ODg3YmMxMGQ1ZmVjZDg2YjdhNmQ3YzQ4YmFmNGFhNWFkY2YiOiJjZjliZGFhYThiZTA2MDM5ZGU5ODgzM2NhOTI5NDdhZWU4NGFiNWE0M2I3MWE5MDg1NWIyYmNkZTliNmU2OTI1NWE1YTVlMjRjMWJjOGFkZTJiNjMzOGJhYmFjOGZjMGI5MDY3NGJiNzAwMDgwOTUxNDI1Y2U2N2M1MTYzNmYzNTAyNTE3MWY1ODRmNjJjYTQ5OTMzZjExODgzYzlmZWM2NjYzMDVkODhhZDJkMzU5YWMyZTBmMjQ3MmUzNjgzMzJkYTJmNWExNWY4NTdjOGU4YmM3YjQ4OTdmN2UxMjE4N2FkOTM5NWE0N2E5ZjI3MTU0MTUzN2FlMWJiMjE3Zjg4ZjliNjg5OTMzZTVjNmZjYmJjMmMzOWY1OTI0ODYyYTRhNjhlMDY4ZDA2YTQ4NWYyZDgwNTgzZWI2NjA2ZjE3N2Y5Y2E3NjE4ZTBlYzAxODU5NmUwYjk4Mzc2Yzk1ZmMxNTlmZDY4YWZmMWEwZWYzNTE0NTI5ZDRhNzE3YjhlZmI3YjQ3NjRkMTFjMDYxOWZmYjBiMjAxMDZhNWE1NDFjZmQ0ZTY4YzAwMmI5OWJhZTg1ZjBlOTk2MjdjOTFiM2RjN2YyN2MyNDE1ZjdjZWVkMjFjNTQyYWYxNzBiYjEzOTgzMzgwNDFjMTgxZGE0MGRjOTViYjBkZWVjNmRlY2I0OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJkN2QyYTlhMGI5N2Y0NTY0ZTA1ZGU2ZGI3YmYxNzBkMmE3MjZlMGY1ZWIyOTcwODM5YzRhMGM2ODZlZjM3MmZhYWE1ZDhhZmMwN2Q3ZTlhNDQ5MDRmZTlmNzM1OWQ4YjYyMDVjN2NlMDYwMjFmNWRkNjA2NTYyNDc1MDM2OTQ5NjBjNzhhYTVlM2IzZjUwMDhkNDhjNmEyNjRiYjk0ZTFjMjk1MGY3MzQ2MTFlM2UxMDI5MWNkYzAxOTlhYjkwMDBhOWMyZWI3NDA4MWIzYzJjYjQ0NjFhZDY0MDZhMzhlNyI6ImRiOTk0ODgwODk1MjQyY2VkMDZlYjI5MTU3NzU2YjI1MDUyMjU3YmQ0OWNhMDhjNzIwOGQ1MWU3YjBkZGVlYjciOiIiOiIiOiI2YTQ1NjM5MzYwMTMwZDBhNjc5ZjlhZGRjYmY2ZjQ2Yjk5NDViM2IxZTVhNzJlYjE3NTE0NGU2Mjc4NmRiY2JjODA3M2NjMmJlOGNhYzQyMWI5NTc2ZWM0OTY0NTJlY2MxYTYxMWIxZTVhYzQxNTAwYzQyMTM0MDRhMjMxMTI0N2M1ZTgyODczOGE4Y2I1NWY2N2I5N2YzOWQwNWUzNmViMjk4NzFlM2Q3MDlmM2JjN2M3MjU2N2U3NzZhZTczNmI2M2MwNmY1YjU3YzExMjdlMzA1Mzg3YjExNWYxMTdlMzAyNzI3ZDA0MmMyYzA5NzliNzBlMmEwNjc0YWNlMjkyMmJjYzI4MzljMWE3NTA0NGY3NDA3OTBiNjJiMDc4YmMzY2IwNTZhMzRhOWFkNzI3MWUwMmExZmE4NmVjODUyMjZlY2JiOWIxMjZjNGE5YjNiMGIwZjRhYzY5MTVjNjQxYWYyOGIzNGQ3YjdkYTZiYmY0Y2UyODA2NzFjNTJlYjkxOTEwMGUxOThhM2ZlZWQ2YjRmZDQ4YzAxZDgzNmMzNjM5MDRkNjQwZTQ3NWUwZDBlNmM2Y2U1ZjI1ZDBiMTc0YzU2MWVjYmJhZTIwMWJhYzUzZDg0OTk3MDZkODNkYTQzYzI2OGJjMmM1N2UyNDA1ZWQwMTZkNjE5ODk2NGM2MCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI4MjAzNzU4NGY4MDI2Njk4OGVmNmQxNWZhNjAwMzQ3OGMyMGQzMzI2NTUzMGMxNzY3ZTNjMjNmMGEwYTk1ZDYxYzkyNjJjMjZkYmQzNzA4MzA2NmJhY2NlNWY5M2RjODZlMmNiOTU1MjFmYTZkY2M5ZTRkMDFjNDY5YzRhM2ZlZTMzNTc5YzIxMDU4OTc1ZGQ5MWY5MDQzZDVkZGIxNTRmNTM5MGM0Y2EyYzgxMzkzOGE4MjcwYjk1NGE3YzcxOTdlYzM4MmYwMmM1MGRkMTk1OTgwMTdkMmFiZDFlNDVlYyI6IjUyYTZjYzlmZTg5MTk0NWU1MDM5ZTk1MjcxY2NjNDRiYTlhYjU3ZjYyMDg2ODM3ZWU2NDQwOWQwZmNhZjE5NzMiOiIiOiIiOiJjNjBmM2JjYTVkNmIxMTMwYzZmYmE5M2UzZGE5YjgxZGQ3NjM4MjhjYWE1Y2U4MWZhNTI4ZTEzMjZiNjc1NTg1YmNlYzFiNDI4NGQ5ZWNkNDYzNDMwMDBjMWUyZDZlYTA2ZjJkOTVmNDgzZmZlYTE5MDJmYTM5MzViZWEwZTlhZGM0MGU4NWRmZDFiNTlhNTk3ZjJjNDk4MDY4YWYwZWY0YzE1YjUxZDUzNWU0ZWQxZGUyOGIxYjEyNTA5NjNkYzAwYTcwZTE5OWI0OGQ4ZDc5MjFiZjZjYmFmMjY4ZTgwMWViMjQxYmY2NTlkZDM4NjQzZjM5ZGU4YjllMDcxMGMyMmViNDU3ODAwMzZlZDNhODZmZDRiOWM3NDVkMjZlMmQzYTViN2U4N2VmNmFjNTRkOGQ0ZjlkN2QwMTQxMmQ5NDAyOTlmYTE5Nzk3MTZkZTBlYmQ3YjI2YmI2ZDhiYTQyMTdkYzRhNjYwZWUyNGE2ODM0NDBhMTJiMDBhYzMxMGIxYWNjNjQ4MWQ0MjY1NmFkMGIwOGVlYmU0ODgzZGI3MWE2YzY0NjAzZTA3ZjQwMjgyOWMyNjc3NjYzZWM2OGZlMWU3NjIwYjZmZWQyM2I3Y2YyZGEwZjA5NzczYjg1ZGI2MzIyMWZiYzY1NTBhNzE4MmQ3YjlkOGI3MmVmMWFkMSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI1YWViZTIyNzM2NTc3ZTY5YzUwMjdjYmQxZGNjOTUxNDZmOGRjY2FkZjk2MTAyMGNhZTIzNTYyZDcwZTlmMDE1NWJmY2VkMGNlMjA1MzExNDk3MjYxNGE0NTkzMmVlZDhhNmI0ZjRlNzQ2ZDhkOWU4YjI1Y2M5ZDlmYTY3ZWUwYjE1Y2M1YjNlM2EyZTQzNzFhNDQ4YzlmNmJjZmZhY2I4YTBhOGYyYzA1ZThhM2EwYWJmZDVkODAzYTc3YTgwZmJhNzVmZjEyY2MwNjQ5YWY5YmNiOTRmYTVhZTJlZGQyYSI6IjM0MjIxOTFlZTY4ZGUwMGM3Nzk0MzRhYmEyMzllM2NkN2FkNTM1YzEzZDExOGJiMjI2ZTFlMDEzZWE2ZTk1MTEiOiIiOiIiOiI2YmJhZWZkYzFhYTMwN2FkNDAxYjYwNDBkYTIwMzZkNmJlYjVjNTNiYWI0NWQ3MmY0YzY3OWJjODhjOTExZmQyNzU0YTA5ZjJmNGI0ZmYzN2U3ZmUzY2JkOWNkNzg4ZWE4OTQzNmJmNzg4MTdmY2IzYTY0NzIxOThiNjc1YzgzNzYyNGRlODUyNWRlZGI3YTNiNzkwMWZhZjhkZDA5ZGIxMjE2ZjU1MjA1ZTM3MTlkMzExMDMzNzlhYmFjM2EwODA2ZmNhZDA0NzRiOWJkZGQ4MWUzZmVjMzM0ODg4OTNlYWQ4MjhlMDgyOTFiMGZiYjM3YTEyYjc0MzQ3ZDM1MTMxZjFiZDUxYWE0ZTQ4NzMwOTZiMWEzNWVlM2RiN2IwMjdmYzU2NTRlNWEwMzUyYzIyZWUzNWQ3MGY2NWIzOWE1YjhmNGEyMDY5NzAxNDNkNTVmMGU1MzhmZTI4MTE0ZmUzOTYzY2ZmNzMzMWU1OWRkMjVjMTY3NmJjZWE0MGM3MDc0MDczYTk1YjljYjA0NGUxMTQ0NTYwNzk1OTRkNWM1NzBkYTRlOTQ4YmMzNWJlNDRhNTI0ZDc5YmY0YzgxNTU3MjA0MThiOGU3YWQ2MDk5MGJlYmY2N2VjNWZjMDgzZGZmMGZhZGQzZTk0YmExMTBkZTIzZThiYTY5OWM4MTU0OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJmNTM0MGYxZmVhMDg4NzdlZGIzMDliOWI0MzIyOGYxMWRmY2EyNmYzNDBmYTQzM2YwYjE4ZWI5ZTZlMDdjY2JlOTZmN2ExZDc0NWE5YjI5MTBlMjFiYzk1MjJhOTg5ZGJiMmRiNjQyYzVlNGIyZDU5ZmZlZWQ2YzllNjY3YjM3ODU4ODg0OTMzOGIzODU2MjVmMDNhMjI2Mzg5MDgxODU4ZTg2YTIyMjg3NmYxOGEwZDdmZjY5ZDBmZWRlNjIwYTgzY2FmMjU0ZWI5Mzc2ZGFjOGVmOTk4MzdkYzQ5MWRkNCI6Ijk4ZjViN2FmMzhjMWZiYWM0M2ZhOWNiMzU4YmVjMTE5MjNkMTAzNzIwYTczNTkxZGUyYzZlZDI0NWU4NmUwMjgiOiIiOiIiOiI1MjkzY2U2ODkxYjU2NDFhMzMxOTljMGE1MmMyYjVhYzQ2YjI2MWVkMzExZDE1YTZlYWE4ZGY2NDc4YjIxN2FlZWMyMjFkNDg4YWY3NGEzNDdhYzlhMTRkNTFlMDdhMjM5YzJhNTJkMmRiNmQ3NWRjZDkwMTQ1MmZhM2IzNDAzYTE1YzQ0OWMyZjFmOTc3MDUwMWZlMTA4ODRkZGMzZWY2ZGIyZDg5ZWFkMTc2ZGQ5ZDI0MDQ0NmI1ZWFlZjM3Mzc2NjY3NTBmNTZkY2M0MzcwNzIwNDE5MTM2YjBlNjI2OGVmYTUzOGM3NDY4ZjZiMjE2OTlkNjhmYmNhNTFhM2M5NDFkZjQ2ZmU5NTY0ZDM5NWM1NGQ4MjlhNjgxODY0ODM3ZmIyYjZlZWVjYzk5NDQ3ODIxMDMxN2Q1OTA4ODg2ZjYwNTYyOTNkNTM1MDFhNzI2Y2Y0ZTc4NmM2Mjk0MzgxZmM0YWY2ZTExMDkxODY3NTllYzkwOTk5ZDhhMjFhYjA5MDUzOTM4ZmI1NDU2OTJhYzAzYzc3NjgwMzg2ODEzNGMzZTRmN2VkODdjOTI4NGNmMTZhNzY1MTQ1OGQ3ZTY4YjYyNTI3MjY4Nzk0NGUyZTZjN2NjYjRmZThlMDAzYWJiYWU5M2Y5OGY2OTRhODM4NWEyOTVjMzM2YjVhNDA0ZiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI4MjczOGQxMjM0YTkzOTNmYWI5NGFiOTliODQxMzcxZjcwNDZjNjg1MmJjZGZjZTFiMmQ1NjgyNWY1YzU4Nzg2ZTU5OTAwNWE4YTc5YTMwZDg5YTQyNTFkM2E3OTdjYWI4YjNmMzA5NTBiOWExNWQ2ODZmMTI1OWExMWE1MTZkMzk5NTUxOTI4Y2QzY2I1NzM0Yzc4Mzk4NDdiZDU4NGMzNjRiOTViOGZlYjM5MDU2N2NiMmVjMjM3NDY1NDNhY2UxMzcxYTA4OWVkOTdmOTk2OGU4M2U3NTYzNjIwMzU3NCI6IjNmYTMxOWI5MGExMDM4YjU0NDkxNjEyMzUzNGFhNWNiMTBmNGRhMTZjYjEyYzNlMDBiYzEzMDY0MjM3NDJiYWQiOiIiOiIiOiI5YmJhNmMzY2VmMjgzOGQxMTVmMTAzMDkyNWEwMWRiNzg4MWRmN2U3YjVkNDYxYTVmOGRmYTJhNDA3OTUzMjJkZjc0NmEyNWViYmVmZjI3MmQwNjRhY2E5YWUyODRiNTBiNmY5M2ZhNTY2ZWE1MTllNzEyYzgyZjVjZWI0ODFmMmZmODczZTczMDQzMzUyYzc2NDcyMzhmZTMzOTMzNmNkN2FhMzc2NTg4MjQyOWEwOTI5MzI2NzYxM2UyOWJjY2UxNzUzNWVmZDFjYmRiZTVlNDBiYjIxYmRkZTQwMmU2YmE3ZDU1NGIzMDYzNWQwNWY1ODFkZDFiZmVmMDU2NWMzZjVkZWRjODIxMGI1YTAxYTEwYjU4MTMwNDQyZTNmOGViMTFiOWE0MGU1OTllYzhkNWUxMDg5ZWYxZjVlNjU4N2I0MTIwZDFmYzM5NTc2MjgyYzgwYzgyNWU2ZTk1MDdhMGNlYjNkMDQ2MDgzMmZmYTA3OWZiODQ5MmEzNTE4ZjI3ZjA5YzBiYmYwNmY2ZWMwMGQ4MGUxNDViNWU4NDhiNjg4NDE4NDE5Y2VjOGFlNTJjZGE3NjZkYTg0YTg1NmY5NGE0YmZiZWMyNmE5N2UyODEwZmIxZGVjM2I0OGYyODVmYTRiMGUyNzk0ZmNkMjg0NTViYjE3OGIzZDU1MzQwZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJlNTU0Mjg3NTg3MTMxY2MzMjk3YjA1YzhhZGFiNDYxMGNjM2QxNjM0ZWFiNjUxMTlkOGM1NDZkMTNlOTk2MTU5NGY5ZTZjYzYxOGVhMGQ3ODI1NDdkNTRhYWU0NjZmYTI0M2MyMjY1YWFlNmQ1NzVmOGZlMjJlZGNmNzFiM2U3N2ZkOWY5ZWJiMTFjOWUyZTgxYzcwYWJmYjE5MzIzOWFkYjczZTRmZDE0YzkzYmQ4NGJmNzljMzI4YTg2YTQzMzQyN2IzMDVhNjQyNWRkNTcxMWQ4MzAwNmRkMmRiOTVkNiI6IjJhNTc0MWNkOTMwNDFiZTM4MTYzNmMwODFmNDRhOTQxMDY0Nzk2MWNlNTI2NTIxMWJhNjllMDliZWI2ZTVjZDMiOiIiOiIiOiJhYjBmODVlNjRlMzM0YmJjNzQxYjA2NGEzMWFhOWNkYTkwNDlkZWUwZDZlYTY4ZDE0ODNhNjBlMGY0ODk5OTUyNzA0MmI3OTk0ZDdhNzEzMTQyM2JiZDVhNmNhYmIzNWI5Yzc4NjI4MDM0ZmUzMWU1Y2MyYjhlYTJiOTRjOTFhNDg4ZmQzNGZkMzQ0YmRjODYyZGIwMGUyMzQ2NzdmZDBmYjUxNTVhYzg5MmMzMDQzNjFlMGY1NDUzY2QyNTk4MTE1Y2ZmNmEzMzQxMjAwYWQ3NDY5ZmM1ZWExZWRkYmQ4NTUxMWNmMjBiODQyYzk5N2RiZGY5NWU0ODQxYWFmMGQzNjUwODBhMjRmYWEwMDNmYmE5MjI2YmJiZjYwOTA4NmE2YTM3OGU1YTVjMjY4MmZmZDkzMjM0ZGFmYTY5YzI1OTRjYjUzZTc3ZDA0YmE4MDM2N2VlNWRjOTJjYzYwNmZkZjEwMmQyNjVkNTJhODM1MTFlMmNjMWQxNjZmM2I4NDU4NmIyZmIwMWY4YzdlZDM5YTM0NGE0MGZmODg0ZTZhM2Y5N2Y5NDc0OTc3Yjc0MzE4ZDg4YTZjNzBiOGNiN2QyNDg5ZTY1NTE4OWZjOTdjZjEzODRjZjM5MjdmNjA4YTFmNDUxYzc3MDYwZjQzMDlmZjkxM2Y4OWQyMTM5ODkxNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJlZTA3MWUzZjA5NTUyYTUzYjhiZDk4ZDllNGI0YjQ2MDU3N2JhZTg2MjljYTZlODQ2MTExMWExZWMwOGQ1MTg4NjU0MDQyMTQ4ZGZlZGFiYzQwOWNhZWI1YTAzYjI2ZTQyMjExM2Q3OTcyOWU3NWNjYmUyNDY2YWU4MTk3Y2Y4ZWQxNGRkMmE5MzgyNTk2ZGE2ZGFlZTMzMTRiMTJiYTQyY2Q5ZWQ5MGFhZmI5MTE1OThkMTg2M2M5YTcyNjI1ZDBiYTlkNzExZDFmZDNkYzQ2MjUxNmE2YjYyODY2NDRkYyI6ImZkYmRjMTFhNGY3MTY2N2JkMTU2MWU4N2VlMzRkOTI1YjEzZDFlNzk5NjdmY2VjZWU4YjI2NTZmMDRkNmQzNzkiOiIiOiIiOiJhY2YzNDJmNjUzN2MxYzNhOGYwNTAzNTk3MzBjMTg1ZTJiZWFhYmE1Njg2ZDJmZmMwMTAxZTNlYjJiMTUzY2M4MGVkNWU4NDA0YmM4NDllMzMwZTk4MGMwYzJlZTVkZjZlNjMwYjBkMmUyOGVhNTBmOWY4YzA2YWNjMGM4ODAzMDRlMzIxZWQ3MjA1ZTY3M2U0YmI0NGNjZjEyZWUyN2JjNmYxNjhiNjM2ZDQyOTdkNTM0NjJkYjFjNDgxNmFjNWFkNjg0ZTUzMmYzNWEyMWNjYzYyMjZkYzY0ODFkNjQ5MTU4ZTc1YTZlYjAxMmViOTVmZjRiNDYwYjQxZjhlZTEzMzVmY2M0M2YwY2I5YjVlZTc2YTQ3MTI4M2ZmZTA4ODBlNWNmYTJhYzIwMGIxODE0OTcxMmFhMTBiNzZmZTM4NTBkZWMyMmVmNDYzOWJlZWVkNjlmMDFhNGMyNWNlNjExMGEyZWIwYTY5YzQ3OWM5N2E2ZmYyYmU0YWRmM2M3MjU1MTFmOTMyZjg2NDE5ZmZmZmQwMzA2YmNiYTE0OTM5MGUxZDMwNjc5YzRkNzBkMTU2Mzc2NjU0MTlkMTdlNTA4YzA1MDliYzRhMWU3MzQ0OGMyOWRmNjk0NGMwMGNlOGUzMmNhODk2NDQxODczOTczNGU4YmEwYWE0ZGUyMDU4NSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJlMGJjOGMwYjUzYWNkOGNmNWU0Yzg3YWQyNDQ1NWJjMzRkNDU2MzY3YmQyZTcxNjc0ZDVhYzU5ZDA5MDFhMDdhYmI1MmM0ZjI2NGIwNjA3YmI4ZjFhYzBlZmE0Zjk3NDk0N2JhZDQyYjQ4Mjg2OGQ4NDIwOGYwNjRmYTI3ZjQ2NTg2NWI5MTBkOGU1MzZmMDExMDk3YmMwY2ZlYTA3YTkzNGFlNTAyM2FjNzA5ODk4NWM0ZTFlMmQxNzNiYzgzNWY3ZjZmY2EzMjAwZTM4NDgyYTM2Yzg3MTM4NmZmOWIwZCI6ImJjOThmZGNhMTEzM2EyMWEyYjQ0MzUxMDViMWY5NmJlMTYzMzNmNWVjYzY2MThjNTRkMjhhYWI1OTliNzk1NDkiOiIiOiIiOiJlYzYxNjk5M2E2MGQ3OTcxODU4YWIyZWNiZjg2ZjYxM2FkMGQ5ZWRmYWVkODg2NDU1NjUxNTlkZWQ5MGNiZGNhZWNhM2RlYzA4MWY1NTg1N2RmNzdhMzcyNGYzNGU3OTc3Mjk0OTNlOTk1NTk0ZGU4MWJkMWQxNGY1NWZjNzZmZjFjOTllODZmNGJhYjViMDFjYzg0OTE4MGJjMDcyMWJjZDdhMWM2OTRhNTIzYmFhZWQ0MzY5NDk4ODJkYWVmZGI5ZjU1NWJhMTYzYmMwMTc4MDgzMWMwNmZkYWZmNWJjZDU4YzYxYzA4YjM5ZDA1MWRhOTQzYTFhM2Y4MzE4MDhhZTk4MmUzYmRkZjQwY2RkNDdkNTgwZDNiZTY2MDNjNzgxODYxNGViMGNiZjMwM2M2ZTZmN2I1MjE4M2UwM2U0MmI1NzE1M2U5ZTA2NDRjNWNjZDEwMThlMjQyZmIzODRkODMyNzQ3NWI2YzUxYzMyYjNkY2E1ZjMyMDY5NTM5NjMxNzQ3NzU3MzAxMDUxYTBlYjRjMmU0YmZlNjU3NmFjZTA4ZWZjNWI0YWQ4ODhhNGI4MTM3Nzk3Y2M3NDYyNWI4NDdhNWI2ZmU1MTVjZTE4NmZiZmU3YTY4ZWUxZGQ1Nzk2ZTdhYTk0ZTc4YTg1YzViZDQ2OTUzZDhjNGZjMGVhNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5YzYxYTczMGEwYWIzODgzMGYzNmE0NDE4MTk4OGFmYTI0ZmE1ZGU1ZjI5OGRiMDU4ZmI0YTM0NDNkM2I3MTQxMmViZTM1ODUxYTEyZjk0MmI3ZmMzNzljYTFlMTRjNjMxOWNiNDg1ZTEyNWRkZTI0ODJjNTYzMjk3NmEyYTljMTEyMjFhOWZiNmU2NWJhZDk5MGE1Yjc3YjU1YjJiODYyM2E1NTA5Y2Q5MTk4MTllN2Y4YWRiMjNhOTliMjdjMmQwNWZiNmEzZmIzOTM2ZDVmYmZkNDRjZjJiMjRhN2E4NyI6ImE2MGI4OTYyYjE4ZDY4NmVhMTQxZTBmNGYwMTU3MmEyNWI2OWFjZjE5NzQwYmRlOTU4OGVhNjNhMTFlOTA0YmEiOiIiOiIiOiJiY2FkMzIxNjhkOGJlYzAxNDgyNTM0ZWY3ZGNmMjdlYTExMWQ2YjJhMTEzMTE1NzJlMDliYzJjZGIzNzZmMzAxNTdlZDE5YjkwYmFmOGU0ZTNjNjFlNmY4ZGNjMDU4MzlmYjFiM2YxYTcyM2MzYmE5ZGQxYzdjZDQ5NDYzMjc4YTZiMjE5MGRkZThlZTAzMjQyZDFiZTlhNDBiNTcwZGQ0YzMwNDM3ZjBiMTU3OTg4NzRhYzk0MGRkYTViZWQyYzkzMzIzZjFlNzlkNTRhZTliYzg2ZDgyNjAxOTg3ZjA0ODk3NmE1NTdjNjE3M2Y5ZDNlYjE2NjQ5YmYwMDQ0OTQ3MjA2ZjM5NThhZjJjZGE3NDNmYzQwNDE2ZTY0NWI5NTk2YjFlZjRlNzA2MGM2OTBkNzVlZmI0YWNhZDI0OTc2ODY5NjI3YzIwOTkzZDg5MzU5ZDM5Y2IzYTk3Nzk5ZjljOWQzN2RkNzlkMjEyYzY5MGNiMTQ4ZDJiMzAwNmNhYjZkNDNlNzk4YWFlMmEzNWU4MDk0YTIxZDYzMmJiMDVhODlhYjFiNjg1M2YyN2I3ZTA2NDA0MWYxNDA4NzBhNmJkOTUxM2JhZTRjMThlNzkxZTJkOGYxYjNjN2JjZmJmODJkMjhjOWQ2Y2Q4YWUyMjQwMzRjMzA2ZTUxZDM2MmU5ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJlM2QxODZhOWE0ZDk1MzA5MDZjNThmOWQxZjNiNDE1ZDFiNjBlMmYxMmNhMzRhNDI4ZDE2ZmRlMDljNzAwZGM1ZWE5ZDEwNGE5MjgzMTkzNjEzNjY5MTIzMmVmNjRjODg3YjcxMzgzYmUxNTIzNDc4YzY3Mzg3NDQxYzY3ZmQ3NzYxZTlmNzVmYTA2MzZlNWEzY2FhODQ1MjE5ZjM1ODJiZGRiZDAwMTdiOWI5NTk4NGNlYTZhM2RkYmViMDgyMGY0ZjU1ZmYxNWUyMmMwMGU4ZGI3ZGQ4ZmJlYThmNjUyNiI6ImMzMzY1NWEwZTI5NzNiYTEzNzg1ZmU0ZWRmYjc1NzQ5ZDg0ZDgxODc1MmY3NjU4MDE0NDQ4Yjc3MTk5ODI3MjYiOiIiOiIiOiJlMDAyMjAzZTlkY2IxOTFjNWMwYzNjYTJlMTQzZTY4OWNhOTkyNTMzN2FlMDRjMjk1NDdhNTZkNDE0NGIyNjU3ZjgyNjc0MmMyYWY2MGEyZWY1NmI0Zjc2ZTY4ZWNkNDIzY2EwNGViNzllOTI0NzNjMmIyMDk2MDcyOTE4YTIzOTBiNWUxZWY1OTZlZDZhNDMwMmMxODFiMDMyNTdmOWRlZmFjZDU4Nzk2ZTEwYjU2MDFiYTlhMWJlNzY3NDQwYWMwYWFkZDRmNjQ3YmJkODFhMDg0YmJkOGJlZDVhMDA5MTg5MmJhZmJhNjEyNTlhNDZjZWE5NWY3YmU2YWM3NjQ5MmE1Mjk1N2ViNjJlMGM5NmY1ZGM3NGRjM2Q5NDllNzQzMTBiZTY2NGNjMjFiOWM3NmQzOTEwMWI3NmI3MTMwZjJjZGY0NDRlMDdiZGZjYTAwMDgxOWRmZWZjMmVlZGY4OTdiMWRlMGFiOTJlM2QwNGY2ZGJlOTQzOGM3MTExNWU1ZDE0ZmI2NjNkNzEyMDI3YmU0YzEzNDhjYzNjNWMzMGJmOGRjMGY3ZjVhMjQ1NjE1OWE1NDJlNThhZWQ1ZDEwYWZmZGZlZDViNmVhZTc3ZjNhZjYwNzM1NGRkZmM0ZjFkN2FmZWQ5MDQ2MzQ4NmY2MGRkOWZiZjEwYjMyZjZiYiIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMzhlY2NlZTk2NTUwNWJhNTEzNmE4YWI4NjhlZDFlNzQxZDM0M2FkNzEzMDc1MjMzYmZlYmUxOTZmY2VmNmY0MDU3YTIxZDhiMmQ2YzY4YWJkZjUyNjMzZDU0ZDk2MDllODc1NDJlZmE4ZjRiNDZmNDBhNGU2MGEyZGJjZjMzMzgxMzhkNDZjMWUxNGQ2Zjc1Mjk1NGE4ZmI5OTJmYjAyNjBjYTg4OTAzMDA1NTZjYTcwOTJhNzY2MWI2NWZiYmJmMGM1NmUyZDQ5ODc1NTI4YWVkMWViYjAxMzNmMTNjNTUiOiI3YmYyOTE0YWZhOGZmOWMzYjM4NGNiNDk1ZDBhMDhiZjdkOGYwYjcxOThkZjk2ZGI3MzcxZGZlOTg3YjJiNzNlIjoiIjoiIjoiODMwYTlmNjFlOGFmNGYzMjJhNDZmM2U3NWQ0NzVmOWY2ZDA3NjcxM2FiOThiMmI5ZDExOTZlOGZlYTA5OGJiN2E4NDBjYTRkN2YzMmE4NTBjYmQ3NDE3Mjk3MjExZmMzN2I0N2IwNjhhYmEzNDlkMjZhNDdiMmQ2ZDQxZTU4ODNmNjU2YzI4NzgwNGZiYzg1NDUyMTk4OWM1ZGU5OWI2MWM1OGQ1MTQ0NDQwY2NmZmVhNGEwZDljNDU1YTQwZDQ3MThjYzFlOWRiZGM5Yzc3YzQ4NDhmNDY2MjU3Zjk5YWI2MDczZGVlODNjZjg2MjUxMWI2OGMyYmJhOGJjOTA3Yjg4ODIyZmIxYmEzMTBiMzkwMWQ3YWVlMWViM2VlZWIwYWU1ZThkYTM4Mjc2ODg2Y2Q4YTIxOGQyNmE4ZDg5OWFmZGMyMzM5NDRjOTdiYWY3YjI3NDQ0ZTI3ZjlmMzYwMGI2ZDkwOGZiMTc5ZTUwNGM1MDkxZTJmZWJiNzQ3OGIzNGJjZjg4MWM1NWZkOWZjNzRlOWVhZTEyMDNlMDk3Y2E2N2ZjZDYyZjAzYTE1NzlkODk4ZDg5MGM1NzQ0NWQ5ZjZlZTFiNjViMmUxNTQyZjQ5MDUwMTM4NGE4Yjk4Y2M1OThkYzhlYWNmZTIyNjBkYjZkNjVjNTRlZjkxNWYyZGIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjE5MjIyZjc4ODY3NjY2NDJkYTRhODBiOTdiOWFiOGIxNTdiNThlZDYzZGNlYTI1MTJmMDg4NjQ0NzkxNDc1YTVjNmEzM2EyY2NlMzk0ZDQ1ZGEyZjg0YjAyYTBhYmNhYWVjYTQ2OThkNTBkNWJkYTQzNTc3OGI4MDgzOTczMTU2NTQ4NzhlODY2YmEwMTM2ZjljNGUyMDZmNzc0OWI2MGRlZDQxOThkNjlkMWQwNzc1NjRhODk0Mzc1MjkxOTkxZWIxMjVkMzk0NTQ3ZDIyNmMyZGExN2U4Y2Q5ODg1M2UxIjoiYWYzNDc2M2MxNDFiYzIxMjI3MWQ1MmEyNjBjNmQ2ZDQwZTlmNDBhOGE0Y2MzZmI3Y2U2MzU5YmM3MTk0MWY4OSI6IiI6IiI6IjU5MTRkZjk3Y2EzNmFjY2ZlNDAwMDlmMDMzYmM2Y2QyMTk1ZDBiMWQzNTQ5NjBkMTUyMTU3ZjJiODY4ZGI0Y2JiNzM2Y2RkMGYwNzdmMjMwNDQyYmEwMTAxNzg5YzVjYzJhYzcyN2IwNzA0YTEwYjQxYzg3ZDc5YzhhZWY3NDg1NjdhMmViNmU2MWE3YzQ5OWE2YTFjZDZhOWQ5NThjYWMxODU4NWIyZTY5N2RhZTRmZjkyYmY5MTM0ODA5NjhmM2IyYjhjYTJlMGNkODVmMWQ5MzAzZTNhMWEzODMwYTMwZDZlZjBhMWUwMmM2ODI5NThmZDE4NmUxYmU4ZmZiMmE0YTY5ZDM0YmNiZTYxN2MzZWNjYTBhNzdkNDYwZTM3ODJjZjEwMTQzZGYzNGFkZWFhN2NmNzRkMWQ4NmZiMWVkMzVkYTIxN2YwMGNkZjI3ZjE2MzdkMmExODhjM2NlN2NlNmNmYWZkYTNhZGVmNDQ2M2EwZTdlNjY4ZWIxMjY4YWRhODQ2NWNlOTA5ZjM2OGEwYjEyYTQzOWViNGQ0M2E4N2NiZjk4ZjgzYTRmOGM0MjJhYzkwODUxZWQwODFkNzRmMjEyYzg1NDUyMjQzN2IyNjU1OTU5YzA4MWZkYzhjYTI5NDUyNzE4MjExODI2OTFmNmVlNWZhMGMxM2RjY2E4IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAwKSAjMTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJmMzE0ZWJhNzQ1MWEwYjcyMTYyMmJlMjk4NjU5YTNkMjUzZWE1OTI1ZjU5MTIxOTZjNjJlZDE0OWRhYTExZTI2Y2Q5NGU4ZTY0N2RhMzhiY2JiZWVlZjFkYTIxYWQ5MmUwYjlhNWYxYWQ3MjgyNmJmNTUwOTc2MjEzMTRmOTg1OWY4ZjhkNGQ2MmNjOWEwMGIzZTlkOTVlOTk2NTA5ZDc3NDEzNDQ5YWFjOGY5ZDhiMzExNTc3YTA4M2Y4MDM2NGFkMWQ0ODkyNjIwNThhYTExY2U5ZmQzZGNjNmIxZTRjYyI6ImY4YjFlOTdlYzY4MGY2MzdhNDc5MmEwZDUwZmZmOWEwZWRiMDI4NjE5YTlkYWMwNWI4YmE2ZDU3ZTU1YTFhNGEiOiIiOiIiOiI5M2RiNWE3ZWQ0OGE4MTllOWEyMzdhZDRlYWEzMzk0Njg4MGFlODUyNjY0MThhMjY0ZWMxN2I0MWE4Yzk3YzE2YzQ0NmY5MWM2ZDkwMTg3MWU3MGI2ZDljMTBhYWEwNzA3N2MxZDQwMjQyY2I3YzVjYjg5YTEzNzA5NGFhODE2MjgyNzhiOWU0NTNkN2YwZjAzNDcyNDExMGFjZjhhMDhmYTI0NGRhMjU2YmYzZTQxOTYwMDEzZTcwOTc0ZGM4YzIyODIxOGNkODhhYzRkNzQ0OGJkMTNhNDM0Mzg2NmI2NTZiMTZhYWY0MmZmNjc4ZGZiOTYwNTIzY2I5NTc3NmJmYWRkZTI0ZTE2YWIwMDcwMzA1ZTA4NGNkOTcwMDkzZmNkMDg0MzFiODE1Zjg1ZmRjNGY2YTQzZmNhZDEwNTk2NWI2ZmIxNjYxYzc3MDlhMTY2YWU2ZjNkMWZiNDYzNjg5Zjc1MjgxMWZlN2Q2NjY1Njg5YTA2YzYwYWFlOGEwNTFhYmZiYWRhNDBmYzYwMmZlYTJjZWQ1MWFhOTEwYzA5Yjc4ZDk3YTRlODUyNDJjM2QyMDZjZjMxY2NmZWUxMWM1ZGMxNDFlYmI1Mjc4YjU1ZGU3ZTdhYTlhMDgwNDhkNWNhZDA3MmRhMzJjNDQ5YmQwZGFkMmY3ZDYxODhhNWI5YSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMCkgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiODQxY2Q3YmZjNWQ4N2EwZmE2MjRmNDc0YWY2ZDhhZTlmMmI1YTE0MjZjZjFiNzUyZGRmMTFmNzkyMTY5ZjJmMmMwYjYwNDI3YmY2MmRmMWIzNzMzMDJkOTFmYThkZDg5MWZkNzU0MmJmNjQyNWE3MzA4ZjY0ZTk2YjBjM2UzNzJkNGFkZGM3NDc4OTg3MzE1MTdhNDE4MjEwODEzZjZmMTRkNTY2NTFiMjU5OWJiMjg5OWIxMDliOWMyMTM2NzEyNmVkNWJmMDk5ZjQ1NWFiNWI2N2Y0N2ExYTNhYmMzZjYiOiJjMzU3MjYyMDZkMThmOWZkM2I4NDIzZmE5ZWUyZmM1YTg5NmEwMTNhOTVkMDUyZmY0OTViOWNjNjc1OWQ1OGY3IjoiIjoiIjoiYjNlYjExM2MxOWYzM2VlZWUzZGQ1M2ZlNThhY2JlZjY4YjY1MjEyMWYzOWU5Yjg4NDcyZTkxNjJmMzQyOWM4ZDk4NzkwNDA1YWZlMTM2ODYxOTM2NmM4OGE0ODc1MThlMWJhNzg5NmVlZTJiNDYyNWE5ODdkMTM4NTY5ODkyYjhmOTc3Nzk4ZDY5MzFiNWQyZmRhNmI4Y2RmMzE0MDYzZTQ1YTIyYzk1N2ExYjk2YTI0OWM0MzFiZmNjMjg2NGZjMDAxNTdmZTZjMmNlZDk5YTFjZWE0NjY5NDRmNjc1ZTUyY2I4ZmEwMDI3Y2U3OGY0ZTNlZDcyZDE5ZjEyNTA0NWFhODI0YjU3NTI2ZWQyMGQ1MjdkMzcxNDc1ZjM4OWM2NmExNWUzNWMyYWQxYmI4YTc5ODQyMjE3YTQyMmU0YjczYTNhYjViYzhjZGFjMzJlYjRiMTIwNDUyMDJiMWZmMTMyM2E2ODE2YzI5YWQwZDY1YzlkZmM4ZTliYjg0MWFlMGM4MTNjMGJjZWQwOTc4NzdiZjIyMDk2MWMwNDQ3MTYyMjYyYTk2Yjk1ZGQ5M2VlNzA3MzkzZmE1ZWJhNGFiYTI5Mjk4MmMyMTZiMDVhOGMyY2YxNjViNTRlMWJiNTBhOWVjMjAxNTFiMjI5ZGYzZDMyZjU0ZWE2MjY0OGIzNDAiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDApICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImRkNjJlZDBkNTRkOTMwZmVkMWNkNzU4MmUzNzZhYjQ3ZGEzMTM4Zjc3ZGFhZGVkYTMyZmFiOTViZjg4MWZlOTBkOWFiNGRjNWIxY2YwNjQxYWQ5NjZiYTE3NjFhYWVkZWJhZDllYmMzZjNiMjQ2ODhlMTYyNTFjNDA5MjY3YmVjOWIwMmNjYTZiOGVhNzk2OWE1OTkxZWY2NDdmZGJlMjhkMzEyNmM1MDViYzBkOWY4MjQxZmRjNDllODY3NGZmZDZiYmRjYzVmOTljNmUyMGQ0MjcxYjQyMTVlMjI0MTU2IjoiMzY2YzhmZjY2NmMyYjQyZDczNWRjY2E1YzBiMTJlMzUyYWZhNDgzZDQ4ZDU3YzkwOGI1MjYzYWQzZDJhZmZiZSI6IiI6IiI6ImE3NzQ1NjQyOTVjMzE4NjE1ZTRkNjZlMGQ4NTdkZDYyOTBhZTA3NGNiMzhiNjMyMmQ4ODY3ZjJjN2JmYjdiM2JmYzUwYzcxNWMwOTA3OTRkNzk0YWFlMTJiNmFhMWE5MWNlNTAzYjU0OWQ3OTQzNWZkMWY0MDdmZGJlMjg2ZTRkNjA3YzYyNGI0NGI1ZjBiOTFlNjVhYTU5YTg4MGM2OTVhMGZjMmM5ZDUzZGZlMDY2Mjk0NGFkNDU4ZWU2YzM2NGU1NmU2NTM3Y2NiNjJkZWFiZjEzMjFlODQ0M2NkYjU4ZTg4MzNiNzA4ODA3ZTUzYWQ4NmVjYTk4ZTdjZWRiOWJjYWJjZDk5OGY5NzViOWI4NzIyMTI1ZGEyZDdmOGU2MTFiNDhlN2RmNjNjY2Q0NDQzOWM2MTVmYzNiZjIzNzU2MTM0NWQ4NTM3OGEzNGM0NmI2NWJmNWNhZGEyZTFjNTkxZjVhNWFlNGNhZTA2YmQyMzE0YmI1ZTViYTA2N2ViNjUyMDVhYTJlNGY2MjViZTk3MzIxYTkxZDk2NGM0YmU5ODk2ZWNhZjIwYWE3ODMzODYyN2VhOTA1NzhjYzkwMGQyYWJmZjRiNTBhY2E0NGIyNDA4ODc0N2U3ZTI3YmE5NjA1YmJkNmYzMGM5OWQ2Njk3YmU0NjBkYTY1M2ExZjM3IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiM2FjYTZiNTU1NjE1MjEwMDdjOWVjZTA4NWU5YTY2MzVlMzQ2ZmE4MDQzMzVkNmFkNDJlYmQ2ODE0YzAxN2ZhOGFhN2ZkM2MzZGQ1ZDAzZDliOGVmYzdmNzA1NzQ1ODFmNGNjMTlmYWU1YTQ1NmY4YTUzYTY1NmQyM2EwYjY2NWQ2ZGRmN2Y0MzAyMGE1ZmViYmI1NTI3MTRlNDQ3NTY1ZDYzNzM4NmIzYWIzM2Y3OGZkOTc1MWM3YjdlNjdlMWUxNWY2ZTUwZGRjNTQ4YTFlYjU4MTNmNmQwZDQ4MzgxYmYiOiI0YmM5YTQ4NWVjODQwZDM3N2FlNDUwNGFhMWRmNDFlNDQ0YzQyMzE2ODdmM2Q3ODUxYzI2YzI3NWJjNjg3NDYzIjoiYjM5YzQzNTM5ZmRjMjQzNDMwODVjYmI2NWI4ZDM2YzU0NzMyNDc2ZDc4MTEwNGMzNTVjMzkxYTk1MTMxM2EzMCI6ImI2ODUwZWRkNDYyMjY3NWVmNWE1MDdlYWI5MTFlMjQ5ZDYzZmNmNjJmMzMwY2M4YTE2YmIyY2NjNTg1OGRlNWQiOiI1NDY2NjQwNDJiZWYzMzA2NGRhMjhhNTcxOGYyYzJlNWY3MmQ3NzI1ZTNmYmU4N2FkMmVlOTBmYmZlNmMxMTRlZDM2NDQwZmJiY2NmMjk2OThiNDM2MGJjNGFkNzQ2NTBkZTEzODI1ODM4MTA2YWRjNTMwMDJiYzM4OWVlOTAwNjkxNjQ5Yjk3MmYzMTg3Yjg0ZDA1Y2VjYzhmZDAzNDQ5N2RkOTljNmM5OTdkMTkxNGI0ZWY4MzhkODRhYmYyM2ZhZTdmM2FjOWVmZGNkYzA0YzAwM2FjNjQyYzUxMjZiMDBmOWYyNGJmMTQzMWE0ZjE5ZWYwYjVmM2QyMzBhYWIzZmRmMDkxYmEzMWI3ZGRjYWNkZjI1NjZmMmNmYWIzMGY1NWIzMTIzZTczMzgyOWI2OTdiN2M4YjI0ODQyMGFiOThiYTZmMTFiMDE3MTc1MjU2MzY4ZThkODM2MTEwMmM5ZTZkNTczODZiZWNiZWFiZGEwOTJkZDU3YWVjNjViYzIwZWJlZTc4ZWVhNzI5NDU3MWUxNjhjNDU0MDY2ZDI1NmI4MWJiOGI3YmI0NjkyMDdhMThlYmVkYmI0MzQ4ZmJlOTdhNGQ4NmQyYmQwOTVjNDFmNmRlNTlhYTA4MDBlMTMxZTk4MTgxODg2YTI2MzNjZGNjNTUwOTE0ZDgzYjMyNyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjI1MzFjNDFhMjM0ODIxZWVjNDZmOGFhN2RhZThlM2FlMTJkMTY3ZDI4OWJmYmZkY2E5Mjg2NDNiMzQzZWI5NTEwMTVjMDY2ZTJkMjc4ZWEzOWQyYTQ1OWU2NDM0ZTIzNGU1NWZhMTE0NTU4M2VkZTc0ZTYzMmVlOGJlZjJhMmZmNzZjYTNiOGM5Yzk3N2E1ODEzYzQwNDFmM2Y5MzI4YmU2YzY3ZjE2ODlkODc4ZThhZDYxYmZlNmEzOWY1YjAzNGI3NWM0MGM5YjMwNWMxZWViOTJhM2Y0MTY5YWUxNzIwIjoiZDE5NTJiN2QwYzRjOTQxODVhZGMwMjVlNjdhMjlmZGE1MGY1Nzc3NzAxMTVjMDkzMWJmYjAzZTgxMDFkMWQzZSI6IjBiZTNmNjFlY2UzODBkNjNjNjhmZjBkNGJkZTM2ZjU4MjMzMzU4Y2U2MmM3YmM1ODg3MjhjZjFiYWJiZDQzNDIiOiIwMWU3NmEwYzlhZGRiNGRjMjAwMWJlYzIzMWI3MmUyMDk4YTZlOWU4ZDM5YWRhMTNmZjBjNDkzYWVjOGJhNjVhIjoiMTIzMzY3NThmYmVjMTFlZTI2NGIwNjk2OWJiMzdmZjFkMzcwMzRiNjZmOGI4MjM2OTA3NThkYTA3NGQ0ZTA5ZDg0ZmZiNDkzZDA2MTBiNWMzMmY2OGIxYTE0NGNhNjU0YWI0ZjBlODljODljNmVlNmI4NzJiNmJlNGVkMDZhNzdiOTgwOWU2ODMyOWFkZGY0ZWJjY2I5ODZkZDQ4Y2YzMzQ2OTM2MmFmOWQ4ZjdiMjRhYTFjYzY1YmRiODE0YzJlMDRiNzk4NjBmMmQ1M2IzODk1YjVmOTI1MDJiZWZlMzE3MjllNDBjZWFlZWVjZWY0NTZkYmQ3MjNmNDg1MDgyYWQ0NzVlNDZmNjAyM2RhYjZiYWIwZWVmNjEzOTQ4MjMxMjJjMjYyYmFmNTYyZDU1YzY4N2MzYzM0MDhjODM3ZTYzODNlMTE1MzVlOTUwZTYwNGRmNTljYzBhZjExNzcyODNmZWRiNWZlMzA5NjY0NjBkY2Y2YjE2MjViMzliNTkwZDQ1NWI5MTgyMDk3Y2ZjMTQzMjkwNTU2ZDY4MTU4ZmUyMDIxMWVmZmFiOTMwMzExNWViYzViNjk5ZGMxNjEzYzE5NTk1NmRjNjEzNDhiYmI1MjVlNTcxYzU0MDczMjZhNmUxNjI4NTE1YzkyNzVhNmE1ZTM1NjUwYzk1M2Q2OGYiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI0ZDY1ZmYyZmQyNjBlYjYyOTBiMDJiMWZkNzFjZmZlYzg0MGNjMDE4MDdlOTg0ZjA3ZGE2NGU2YWQ4MGFkMzdmYjU4MTBlZDAxMmQyY2VlYzNhMDQxODAwM2EwMzM0MzUwMjIxOWJkNDIyYzA4ZTAzMjFiYmI4NmQ5MjNiYmQwNDA4MmY5MzlkZWQ0MjE2NTdmOTI5YjM3ZTIxNjA0YTI2NjhiNTdkNTYwNmFjMzY0NTZkYTkxNmRmODJhODc1M2QyMjRiNGY3YzgyOWQyODUyNTRlOWU4NTE5MzdiNTRhZiI6ImQ3NTYxNmFhMDE5MGE1NmFmNTczZTQzNjA1MTU3YzBlMGQ1Mjc1YmNhOTU5ZjJjNzVkMGU3Nzc5NDNiMjAwZTIiOiI5NTRmZGM2NTJkMGJkOGVlYTM3MzQyZjU1NDcyNDFhZmI2N2Y4ZDRjNTg3YmMyNDAyYzQzNWEyNjAxNDRhY2QxIjoiZWQwN2ZlYTNhMDdlODg0NmI0YzNhYWU4Y2VjMGJmNmRmN2M4YmE3ODE3ZTNlOTY5OTk0M2UyZDJlNzc4YzRhYyI6IjIwYzFjNDFjMDgwOWU2OTRiNWRkY2I4MDg5OTQ2ZDc0NTcxMTQ0NDczZGNkNjhhZjY4Y2VhNTg4MTg1OWFjODAzYzAxOTIzMDQ5NjZhM2E2ZjRjMjRkZTA0NTE0NTExMjg2NjNiYWZjMjBjOTg0MmJjZjcyZjNkNjI5NGRjNTliODUwZGRlNzdlYzliN2IzN2Q4ZTVhOTllZjE3MTlhYzI5YmQ1NDAyNzI3OGRiMTU5NDc2ODQ5ZDIyZDJiNDZkZGMwMDhjZjc2ODc4ZWFjOGM3MDkwNjZhYWI1ZjEwNDNlYTU4ODgxNWFhNDg0NTZkODlkMjY1N2QyOTA1NDIyODU3ZjZiNzQxMjE4ZDIyZmI3YTJhNjdlN2VmZTVjMmM1NmM5MjI0MTcwYTc1ZGIxMGI5ZDdiOTM1MDlhNmIxYzVlOWI2ZDVmYWYzNTRmNzkzOTQxNTFlYWVhNzFjODNjOGZhNTM0NDZlZWRmNzA1ODJjNDk3NmE0YzE2MzExZjkyY2Y3ZDE3NThjMWQxZjQ4ZTZkNThiNTg4YjNjZWM1ZjJhN2Y4NTUyZGNkN2E3MmNmYThmMTA5YzNmNzM0YTcwODMwNGJkY2RkNmIyNWFjYzAwODk5NzE3YTA1ZmU5ODQzM2YxMDRiNmZkMjY4Mzc5MDUxYWYzNmIxMTFiYTE3OWY0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiMzEzNjgwYTZlZjVjYzg1OTI0NTc1MTk1NjA4ZjNiOWNkODUyMDA0MzQzYWI3MDhlODlkNjFjMjQ2OTYyNDYxNjZiMGRiY2RmNjFjNTliMDA0MWZkMmM1NWE4MjljOTljZjg0Njg1NTJhYWJkZGQ5OTM2ODdjMmI0YTYwMTcwMjRjNDExMDA1MTBlZTEwMDM0YmE0ZjY2NTYzZGI0ZDMzODhhN2Y2ZDQ3NWUwODBmYWEyM2VkNDNjNjc0MjU0YmY5ZWQyNWY3MzEwOTYzMDY0N2ZhM2M4NTU3NTcyN2QyZTEiOiJjZGEwOGNkNzZmM2JhYzJjMzBiZGEyMDY5YTFhN2E0NjFmMjQ2MmFkMmIyYWI2YTcyN2RhNjgzNjg5NmE0ZDJmIjoiNDMxYzRmZGVkZGQzZGExZGU2ZmNmMTlhMjVkNzRhZjgxMWY3MmZjMjM2N2E3ZjMzY2ZjZGYxN2NmMzhmY2I2ZSI6IjQ3NTAzNDRjMjNlNDY4NmIyYmZlMmRiZDkzMDE3MDVkMDY5NjlmZWRiYzc3ODQxYmY2NTkxNTQwYWViZmViZDciOiI0MGRlYWRjZDg3YThlMDdlYTczYmIxZjI5MTU3YzdhZThhMzVlMDJlZTYwZjlmNjJlYmUzZWM0YmIzMjVjODFjMmExN2JjZjZiODYzY2FkNmFlMjkzNTZjMGU3ZjNkODIwNTI4MDJmZDdhMTRkYzczOTU0Yzc4ZWZkNDliMmQzMmYwNzJiMTM3YWYxNmEwNWJjOTcwMzRiMjEwMmMyNWQ2YWU2OGRmNzE0MWIxMDFmNDY4ZDc5MDc4MDMzMDE1NzYzMzI2ZGMzY2U4YmIyZTk2MGU3ZmVkMDk5MDUwNDRiYTIxNjRkZWNlYWZlZmQ1NDVlNjdhNTcxNWZlN2U1YTFmZTUxY2MzNTYwOTYzNDQyNDVkNDMxZGMxOWVmZjk5YjQwMjk4MWI4NTMxYTg3MDJmMmZmMWJmMjY4NzE2NzkzMzY3ZGI4ZDBmNmY0NTRkYjU3YjZhZTkxNjQ1OTY4NTA4MTFmYTJiZjAxZGZkZjkxNzk5YjFiNTRjOTc3M2RkYWEyMzE2NDQ4NGZkZGMyY2M3ODFjMWZmMzEzOTNlYTIwMzQyMGFiMmNkZmVmZTUxNGQzMDg5ZGYxYjIwZWJhMzJjMDAzNTc2ZGE1YTk3MTJjNWMwYWQ3NDRmYTAzZGYxOTdmMmNhODQ2M2RmNDRkMTYxMzVmMDVlMWVhYjAxNDA3MyIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijk1YjY5OGE0NTQwNzA2MDNlZmUxNWNiNGMzNTlhZTk0NmRhNzU2ZDEyNDkzOWY5MTZkNjdkNzdhYWEwNjA4ZDhlNTc3YjVmNTU2N2JhM2MwNzUxMjhiNTI4YTZlY2JjYzJmZjZkOGQxNWRkZDY4MDM5MTczYzRiNzBkZjM2NTFmNGNiNWFjNjI5NTc3ODFhYzkxNTYzMzI0YTU2YjQ3NDA5YjAyNjk5NjYyZjY4MDIyYmUyZDkzZWFjMzY3YTIxMDI2YWU5NWZmMGNiYTY3YTYzMGU0YmQ4ZTUzNDY5MjE1IjoiZGU0MDFhZDFkMmMzMzk5MzRhNDc4MjI0MjFlYmEwZmI3OWM4OTg2M2QxZGYwZWY1ZDQ3ZTZiZTViYjNhOGM0OCI6ImEwMDI5NTRhZTVmNzY3NmEzMjMwNTMzZGJkZjU5MjUyZWYwNTFhY2M3NjU3NGJkNTE5YWQ1Njg4MmJiZjQ2ZTYiOiI1ZTNkZTJiNTM5MzZhNzg5MGRiNzI0ODgwMmJiOTVlOTA5M2Q5ZDdhMTVhOTM3OGQ4ZjRiYTQyYzUyZTY3OWRkIjoiNzcyYTA1YzI3OWM3ZmQ4NTc1MDc5M2VlODFiZmMzMjcxOTU3M2VjNTE5ZjViNjRiMDM4NmU2NDE0YjczYjE1MzE2M2ZkZDFkYWI2ZDIyYzYzNzM5N2EzMGFkZjg2NTk0ZGU5MGMzMmY2NDgyZDUwNTM5ZWFlODc3NTc5OWI4OWU0YzY0NzE0OTNkZjRmOTBjZTBiNjk0ZmUxYTgxZmI1YjkzYmZkMjcxOWVlNjljYzU3NmU2MzJjYzg4NjgyNGRlYjc2MjJkNDg3YWY0NTBlOTViZDU1YTYwOWFjMzBlOTVhZGRlNDdiODNhYzY1NDQ3NGMxOGY2MTVkYmZkYTY4MjY3Y2VjOGJjZjcwZDA5NGRmNjMwMWU4NThkMzA3NmRiMmE4NWIyYjRiM2Q5NGRlODJhNmUwNzIwZDUzNWQzNmQ2ZTk1MjgxMWNjMzcxYjFlODI4Yjg2ZmUwMDg3MGFhNWM1NWU1NzVhNjkwMzMwM2Y5ZTJkYmNhNDBlNWI2NjMyNjE5MmYxNzI4YmI4OWZhN2Q3N2U2ZDMyY2JmNWYxOGIzMzA2MjA2YzM5Njk3YjcxYzQwNGUzOGQ0OTZjNTI2MzlmOThlZWY5MjAzYmFmZjUyODM3YTg3MmY3Njg4YjUzMzE4Yzg3MGQzYjhjYjAyNGM4NjVjODFjM2FkOGI3MWUiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJkN2QzZTgzZGQ5NzliY2ZiNTI0MDc0ZjEyYTkwZjc4ODczZTk4M2MyYWE5MGUwMjQxZjAwZDJjNjkxYTQ3MDJiYjQ1MmRiY2M2OWE3NzkzY2MyMDgxYjk4NDAzMzI5NWM0NDM1NDk1NzEzYzIwMjk1YWE5N2JmNDJiYWJiNjZlZGI0ODU2MzcwYjk3MDEwMjBhOGE3OWRmNzM4MTY1MGZkN2EzYWE1YWNlNGJmNTRiMzMzMWE4ZDQwOTJjMTlmZGUwOGNkNTFhMDYxNDZjZGZhYjllM2EzMmU1Y2QwMmIzNSI6IjU2MTJlZDdkNzkwNDE5ZGNlYWI0YmVmZGNlNmU0ZTY4N2QzMzVhM2FhOTcyZDg4MDlkYjYyOTFlMzAwMWY4MjUiOiI5MTUwMjhkMDYxMDE2MGEyNTE2ZTkyNmYwNmVkMzRiMThhZDEwNjRiNmVmZDU2NTY2NDk0YTkyYTNmYTBlZWE1IjoiODZjZjViZGYwNjE3MTFkMjM2MWFiNmQ3OWM3MzFjMmZjZjlhYTQ3YWU1YmI1ZjYyOTQ0ODZhMTQwODFiMTg2MiI6ImNmMWIwZGJmYzNmNmYzYWI1MjYyOTliN2Y3ZDhjZTFhOTQ1YmRlYjBjMGY2MzA1Y2RkNjg3NmQ0MGQ1NjQ5YWNlOWU3OGZiZTJlMWRmNjUxMTE0NTYzNWY1YWNhZTkwYjZiOWEzODM5M2RiNGJkYWJjYjJmYzVlOTNkMjUyYTIwOThmYzA4MjkxN2IxNDg1ZDM4N2FjNWUyZWZkYjVmY2UwZTgyYmYyMDBjZTBkMWY2YzdiNWQyMmZiYTA2MjU3NGQ5MjM0ZmM5MTg1ZjA5Njg0OGQxMDE0MWFkMzk1NzEwMzViMzc2OWE1MjExNjVmN2I2M2EwMDUwYTIyNDg1ZDhhNDc4NzAwMjhkM2YzYjY0Mzc5MzhjM2NiNTE3ODFkYjlmZGE2NDAxOWMwNDlkYmI3MzM1ZGNmN2M5YzcxZjFjY2YyN2NmZjRkMzc5YTI3NGZlYTBkMDI2ZjVkZTFkYzg4NjZmMWRjZjg4M2UyZTBmZGI2MzE2MDU5ZDUxNzJhNmMxZmFhMzIwMzk2OTk2OWRlZmNkOGYzNjdjZTg1OWFlYmY5OTgzNDliYTk3OWFmYTVlNjNkOTQ1ODhmZjAyZTNhNDI4ZTkzYjk4NDY0OTk3ODI5Y2RkNGI2MDVhNDQzOTMwNTdmYTI3YTJmYjc4MGI3ZGFmZjRiNjRhZDczYjkxIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiYzFlNjRiOTkzOTRlMTI0MWIzMWZmYjdiNDgyY2ZhYWFjZjVmMmZiYzI1MWY5NTRlN2UzZGMwODY2YWE4MTg1NmExNmNlODNkOWNlNzBiNzE0NzlhZTljY2Q2YzU5ZWE0ZTk5OTg2ZDFlMDlhYjE2ZWIxZjQ4Yjk5Y2I5YmM5ZDYzNzAxZjZhOWExYWYwYjFkODA1NzMzOWQ1ZDdmZmVhY2M4ZTU3MjkxMzRlZjIxNDg2NjMyMjdlMzQ4ZGMzMWI5ZDU2NjI2YzBkNDM0NzhkNWQ1M2JmZTk5OGZiODViMWYiOiI0MmJlNzQzZjhhOWMwMTg3ZDJkNTRiNTk2Y2FmNjRkZmE2MzBkNjBiZDhjNmRlMGIxMjZkNmExNTFkODIzY2RjIjoiZTkyNTY4NDc5M2JmNTFhOGE0YTQ2YzJhYzViOTFlZDQwODQzZWZkMDg3ODMzNmY5ODNmMTAwMTcyMjIzMWYxZCI6ImRmMDE5ZTc4ZWZjNWQzYTg1ZmJkOTA1NmFkMDVmOTdkZTgxYmUwNWMwNjliMzJlNjg3OTJiYThmNWE3NzVmYjMiOiJjYzNkZjZmMWNiYjBlMWJkOTM3ZTY0YjJkOGJlMTJjMDdjYjI1NjM2OTA0MGQ4MzQwMzcyMjZiOTZlNGI4ZTcyMzJjMmFiZmNiYmRjMGJjMmM0MzI0MTQ4NDVjNWViYmMzNWZhNGU5MDNkNWRmMTlhZWY2MmRjNzAyYjIwZDAzNDZkYWYyMGNhZWJkODgxOWRmOTIxMGE3MjFiZTM0ZDlkZjcyNjAzYTQzNzBjMGM2YTY1Mzk3OWQxOTI4MjUwNWQ2NGFlMDllMDkyMjE0OTc1OWNhMGY1MzI0ZjY2NWViODNjZWFmNmRkNDY3NzFjNTIwYjk2ODg1YTg1MDNiNmJlMzMzZWY2YWE4ZDgzZDM3MGVkZjEwMGVkYjEzYjg2NzI0MjM0NDQyYTE1Y2MyM2Y4OTM1OWY2MjlhMmExNWI2NDVjMjUxMDA5OWMwMjYzZDI1ZTMxMDU2N2Q4MjJiZjAzYWViYmQ0YmFjMzkyYjk5OTQxNGJkMDEzZmRiMDBiNGZiYThlMzBhZmIxN2Y1MDE0NWQxMTMwMmQ3MWRkZGFkMzBjZTY2NzhmYmVkZTgzZTU2N2E5N2Y0ZGViM2IxNzU5ZTE5MTMxOTY5N2VmZDk0ODZmMmI1MDJhOTRlMDFjMDBhOWI1Yjc2MjMwMDM2NjY1ZmM1ZDg3ZjhjOWUyZmI0ZSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6IjA3MWI0NmQ1MjA4NWE2NTgzMDlmMmMzNWJkYWI0NDNlMTUwOWFjYTE1OWMxZmI5YzIyMjk1MWFmZmFmMWEyNDNkMGJkY2ZiY2FhMjQ3ZmNiOGRhNTNmZWQ4ZTVmOGIzZWVkMmZkMDIyYzk2YmRkNmU4NmJmZjg5YmVhYTk5ZjJiYzM0OTYzZDNlZjExOGRmOWE1NTI1YTkxMGM5NTQwYWVhYzUxNjZmNjVmNWQwNWM2Mjc3MjYwMDgxYWE5YjcxYWM1OGNiYjVmMWJhNTAwMGQ0ZDgwNzhjNWEzMGQyODJjIjoiN2NhMzNlMzM0NWJiMzMzYTViMWY0MTJhNmQ1N2Y4ZWJhZDY1YjQyN2NjYmJkN2ZlM2FjODM3NjkxZGEzOTIxOSI6IjYwZWZiM2M3NWFlYjJmNGZiMjA4NjU5ZjIwZTc5ZWI0MWQ4ZDliNDIyMDY2YzIzNWExNGI5NDIwYmRmNmYxNzIiOiI0ZTI2NzVjODAwOWI1YmRlOTg4MmNlOTQwZDQyZGFlZmU0MDJmYjExMzc5ZTA3ZGI5YTRjMGM3NjNlOTdmMzE5IjoiODBiNTZhNGJiZWEwOGIyYmIwOWZkYTljYjA0YjFlZTdiZGEwMTY0YzJmMTIyNzFkODg1N2VlM2FmMTAyYWIyNWM1NjgzNjM1NDA1MmUzZDg1YmIwMmNmMTM2MDdkNzQ2YTYyYjI0ZWFmYzk4OWIzNWQ0YmEyNTQ0OTgyM2JjMWU3YjE0OTM3NTIzZjk2NzEzYzkwOThlZjJhYzNmOTc2NTA3MDA3NmYyOGQ3NmM3ZTNjMmEwZmU3YjZhZmQwYWMyMTY3YWUwNzBhN2ZmMTljNWJiY2U1Mjk0OGFiYmU5NGYwZDU1YTVkMWJlYjMxYTY2NWU5N2Y1NmYzYjkyMzE0Y2FkOWJhNzY0Y2MyZTNkMGMwMDA2NGNhMWI0ZjNlZmRhMTRlN2UwYWNhNDMxYjQyN2RmZWYyNDQzZDllM2I4YTY1NjdjMjZlYjBkZGIxNjZmOWRkMjQ3MzcxNDA3Njc2YzZhNDZmY2FhMGY5ZjY3ZjQ5Mjc2Njc2MzY5YjcyNWRhMjlhYTllYmI3YzNlMTg2ZGU0NjA0NTJjYzgxYzAyMjY2YmI2ZTc5YTExOWM1NGY0YmVkOGJjM2RlNzA5YmY2YTYyNTkzMjczZjQ2ODAxMzZlOTVkNmQxMjE3MjdkOWZhZDU1YzRhMTEwYTA4YmUxZTBhMDZjZGVmOThhYTA0ZWIiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiIwNmM3YThhNzRiNmZlOWUxNGZhMjQ3NWVmOGI4YTFmZjk2MTBiZmMxYjRiOTNjZjUzYThjODQ0ZDdkYmFjMDhmZjc0M2VhMWJmYzZjMTBkNzcwN2I1MTcyYTI5YWYwNTQ0OTFiNTczZGMyY2RlMWEzZTc0MjYyZjRmZDJlOWVjODE5ZWNhZTgzMGRiNGYwYzcwMjEwMjg3MzdmZmM1YmMwMjVhMjE2ZjY1ODA2NWUyNzMxNGMzMGMwNDkyNTA1MWMwZDdjYWY2ZWY0NDBjYWUyNjNmNDkxNDhjMDM5ODAwNyI6IjFhMzM3OTNkMjU1Mzg2ZDQ3OTUyYmZjMWY2M2VjMTVjYWZmMzYwM2Q1YzI4YjJhY2RkNzk5NjczYWZmYWI1ODkiOiI3ZWFkZTk4ZTcxN2FhYTMyZjc0YjAzMzE2M2FkNzY0ODlhN2Q2ODI3ODNkMmRiNjdiOTY5NmVjYzdiOWJlNTdhIjoiNTgzNjlhMjQxMTY2YmNjODdlNzEzYjI4YjRhZTIxNmE4ZTYxZjhjYmE4Mzk2OWQ0MmI5MWU1NTI4MzI4NmFmNiI6IjdiYzg0NTQ0YjY4ZWFkYWM5Y2YxY2E5MDdkOTE2NmUwOTQ4NDRiMzk2ZTVkNTQ2NzJlYzg4ZGFjNTczNDE4MTI1ZDUwYmVmZTEwOTdlMmYzNDM4YWFhZjNmMTMxODJjY2Y0NTkzYmRkZDUyZDZhNDFhNWU1OGYyNjdjNmYwODE3ZDhkMWNlMzMyN2E2MTFmOWZjNTkxYWU2NGM3YzE4ZDYxOTU4YTU5OGUwZWM0MzgzZTI1YjQ2ZGZkMzRkYjEwZjYwOWNmNTNlZDc2Yzg2MTE2MDE4ZmM4ZTkwMjdhYTJmMGIwZmIzZjIyZDZiODZiMTEzMTFkYWE1ZTc4ZDFmNDEwNWFlNGFjNjdmNjM3MDc0MDBiMGYwNTRiNmYzZDcxZjI2Y2E1ZDQ2MzE5Mjk1MmZiMzlhZTAwMzI2ZGI5Y2IxZGMwMjg1MjVjMzFhYTliZWI3YzNkMjk5MDcwY2MzZWQ4Mjc5YjhjYTMyOTQwYjIxMjczYWZlODAxNmQ4MDY5YTU3N2FjZGJhNmJmNmQyZmUzMjdiMmY2ZGM5YzVjNzg3NWRhNmMzZjU4NDUxNmRiMDM2NWQxNjY3MGRiNmQ5MGNjMWU1YmI1MzA5Y2U5ZmM4MjM0MzI2ZGRkNjg3MDZlMWQ3NjgzMDIwMmNkYmE3NzBiZDQwMDQ2Yjc1MWYzYzE1IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiZDU1NTJlZmJiN2YzMzQ4MWE1NzQ1ODljNGJiNTZkYmU0MzAwMGZmZTllYTY3ZmQwYzhkNTYzODA5MmM4NDY5OTQ0YTE1MGIwZGMxMzE1YWIwNDg0OTc2YjEyOGNjYzk2MTczNGQyMjZkNjZjNzdkYWIzYzIyNTU4ZmYyMjI1ZTMyMTkxYWEyZGNlYzhlNDdhNTZmNzU3ZjcxYzA4MWFjYWY1ZGYzNTdjMDc5NTJjZjZkZTJlMzU2NDgxM2RlZDk4MmY3MjA2OWVkMWJjZmY2YjQ4YmE0YjQ2MjViYTI0N2IiOiIzNDViNGFjYjJiMGNhYzgyMTM5ZmQ1MTZlYzNkMzkyOTI0MzhhOTE2ZDJkMmM4ZTk3ZWYyNjVhMTE5MmE2NWE5IjoiNzMyNDUxY2U3YmY1YWNjODRhMDVkZTM0NzRiNjIyZDA3YmQzZDAxZWI2ZTM3MjQ1MzhlNDU0YzRkNjY5YTk5NCI6IjdjN2VmNjYwY2ViZWU5NmI0MjU0ODUyOTZhOGU4OGMzN2M2NmUzODVlYjFjZjczODlhOTVjNDZmYTY4YTM0ZjYiOiJkODI0NzNkYjNiZDU1NGNkY2IyYWFkYmFhYTljOTE5MDg3ZDliN2JjOGQ4ODNmOTliYzk1YTE5ZmNmOTZmMjU2OThmY2E4YTEzNGNlNDQxNDE0ODUyMTY2OTk4YTZlZTJmNmExOGY5ZjY2NzkwN2Y4ZjhiY2QwZDJhZGU3ZGZjYzAzY2JkNmVjYmNmM2RlYzQ2NTU4MTU0ZGFiNTk3MTdmMzg2YmIzM2M5ZGY5NDU2YjI1OGZlZWE1OTNhZTFkOWJmZTcwNzk5ZmNlNGIyNWNkNmZmZDA4MTVlODQ5Y2Y5M2I0OTZkNmVmMzZjY2U0ZTE0ZmMzZGUxNTA2ZGJmMzRmNzExMWI0ODAyN2NlMmFkZWQ0MTQwYmVhODMxMWQ1ZGU5ZGY1MjkwZTgwZmI2NTQ2MmZjNTQzM2UwMGMzNDRhMzY1N2Y0N2Y2YTdiOTkyYzZhZTM2MmFmZDQ2MjI4MGU3ODMwZDMxNzE5MmJkOGRkMjZkZmVmZTc3OWRmZDY5ZWJmY2EzNDAzOGIwNzhjMDE2NDQ4NTdjNjBjMWY2ZGI5ZGE5ODc3Y2JkMjcyMWQwYjI2YTY3YzRlZWUxYmM0M2Y2ZDYzMjExMDc1OWUxZTMxZTdjM2Q2MTA1ZTNkYTMwZDI5N2I2OWViMDRlODgwZDFmMmJmZjJhNTRlYTc5ODE3OCIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiJiZWU1ZGQ3MjgyODgwNjkyOTc1N2FmYTAyYTkyYzVjNTRkODZjNTAxNTA0NzM3OWI3MTdjNjYwOGE3MTIzOWIxNTI1NWRlNWEyYmQyN2U5YzZlZjIzMDQ2YzhhODIxN2JkODk3NDQ1NTIxMzdiMjRkOTNlNWVkNDEyNTBlY2JjZjZlYzc3NzM0ZmVkN2E0MDY4MGU4MDFlYTI3N2U4YzZlYWU1N2I0MzI4YWNiMWUxZGZhMDRkMGI1Zjc5OWNlMWUyZjExMWMzZmU4YzlmOTU0ZmRhZDZhY2VhYzdkMjdjZCI6IjRjM2M1NDI4NDg0NWZiMmE0OTRkMWU0NTJiMmJhMWViMGQzNDU2Y2ZhOTU2MGNhN2M2MDg3OGU4NDU4ZWI3ZjMiOiJhOGEzMzM1MjdhMjE1OGEwODc4NzlhNmY5NTBkMmFmOGQwOTNjNGY2Nzk0NWExNDA1NDlhNWU5M2U0MDViODg2IjoiYmZhMDAyNWFjOTc3NGFjNzY3YTRkMzgxMGMyN2EzYzhlM2U0ODc4MGNkMDU5N2E1YTQwMWY2YzliMDA2N2U3ZSI6ImVmNGMxNjlmZTVmZGIzNzE0MmM3MTczNGI1YjVjODU1YTNiNzY5M2EwZDc4ZjQ4ZDc2MTk5YWFmYTNkMzk5YjA1N2VhNzhiMmYxMTg3YmJkMzIxNWJjYTUyZTNiY2RmYmI3NGQxZDBjMWZiZjkxZTdhODFmN2MzZjZkOGZmNTI3NmNhOTA2NzA0ZDJkMzU1NmVjOGVjMWQ2ZDdiYTllN2RkNzM3MzhhN2U5MGIxMzk4ZDgwMDYxN2YzYTU0ODcxNzk0MzllMjVkMGE5ZDRlYzRlMzg2OTliMzcwMzAyMGE5OWM1MzNhNjI4MjAwMDU0NDI5NmU2M2I2ZmZlMTJkY2FmMzg2NGE4NTAyYTY4NDgyZjkwZmE3ZmU5YWJhNmNhOWU5YTc0YzZlM2Y4OTU0MWQxOGYyYTkwOTczNzI4MGFjOGU3NzJmY2NlNmExMTc0MTFmMzZjOWU4MmYyZDc3ZmM3YTAzZTJmMTNmOTdkYTViZmQ2YmY2OWYxZDQ2YTY0YzUxOTA0NmU2ZDBkMzc5OTY0NzIzYmFiMmI4OWJlOWVjOTFhM2U1YTMzYzUzYTczMzA0YzFlODk2MjAxODhhYTJlMGI4ZTQxMTJjNTY5OWU2YTk5ZDY2YjM5NWNmYmQyNTAyZTU2N2EwYTllMzVlZGUxNDA2ODFiMmZmZDk1ZmU0IgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6Ijc1NGU1NDJkYmI0NTNmMTBmNDFlMTM2MTE2NGY1ZTFmZmRhNjdhMDI0YmEyNjcwMWNjODYwNjZjYWYyZjk0NzdhMDc0NjkwZmFhMDY5Y2ZlYzZmYTM4ZDhiMjUwNmFjYTM0ZmQyN2Q2NjcwODg3NmYyOGQ4YWMwOGQyOGVlZWZjYjcyOGZiNjIyNjU1OWQ1YTA2NDZhOGUxODM4MDdhOGUwODQ2OWNjNTUzNTcxMmE0NDI2ZGRjNWEzNDBiNmM3MTYwN2VlMWUyZGY0ODk1MjhhMjY2YjE0MWQ3Yzk3N2NhIjoiM2E5MTkzZmJiNjdhMGZkZDczMmE3ODhkM2FlNTc4M2RlODQ5Njg3OTRiOGM0YzBiNWFkNGRlMDY3YTVkMWZlNSI6IjAzNGRiM2M0MGMyYzE4MWNiNGQ2MzVhYWYwOGYwNWU3MjRmNDE4ZWNmN2IzZDJiYTY4NjNlOWVkZTYxNjg1N2YiOiI1MDA1OGJjZGQ1M2M5ZDI1N2RhYjc4NDZmZWRjYTRlZjk5ZWQwNjk2MDQwMDJjZjU4YWIyNzAxNGNhNzEwMGMwIjoiMWQzMDkwNGQ4Y2Q0ZTM3MzU3YjFiOWI0YWQwNjBmYWMxMmQxY2YxZDA1ZTJiNWIyZmNjNDhiZmYxMjY0M2I2MGY1ZTQwYTNmM2U1NDJlNDY4MDRkZGI5MDQ1ODFjYmQ1NzZmMGRiYjRiODNiNDlhZjgzYzQ4YjZjNjgwNTFkN2M3ZjRiYmYwOWQzYTRmOTk5ZGI0Nzc2MDg5Y2JlZDU3ZGQyYTc1YmU4MjZlZTM0ZTEzZGQ4MDJkN2RmYTQ0NDJhMGEwZmUxNTRlYzllZmU2Njg0ZDZhNDAwZDA0ZmE0MDQxMjNiYTU0ZDZiODliN2RmZWNhNGQ0NTQ3ZTMxOTcyMThkYzM2YmU1YzAxMzdjOTRiODg5YzFhYTIyYjc1Njc4ODc1NTFlYWIxNjhkMzY1ZDExYTVmYmQwZWIxNTExNmU5Mjk0NjhlOGViNDQ1NjA4ZDkxMzg4YTliM2IwNWM5NWI5NzMzYmIzZmYwOGQ5NmMwODk5YjUwYjQ3YzU3MGQ3NTMyM2M0ZDI0MDYyODIwYjBhOWFmYzdiYjI3NzFmZTE2M2RkY2ViNDExNDcwZjMzNTU0ODIyZTMwZGZjZWVlZmQwNzk4YWM5ZTRhNDhiOGQzMGM4ZjcyNWE0ZGY2NTY4ZDE1YTc1MDEzMTk5OGUyNTJkYmY5MTk5MTM1ZjgxN2YiCisKK0hNQUNfRFJCRyBOSVNUIENBVlMgMTQuMyBQUiBUcnVlIChTSEEtNTEyLCAyNTYsIDI1NikgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK2htYWNfZHJiZ19wcjpNQkVEVExTX01EX1NIQTUxMjoiNDI4MjRiZDg5NDRmNDk0NzlmMDdjZjZhZjhmMDJhZWViZGEzYWMwNzRhYjcyYTllY2E4ODUwYzk5YjkwOWQwODFmMjM4MmQ0ZWNjOWU5MjNiZjFhNTg4ZjhkYjEwYmRjZTYxYzZmNDUyYzhlMTVjMGYwMDNkMjIzMWNlNWNiNjkyOTJhZTFhMzdjNjAyYWE4ODlmMGQ1NmRmMDQ5NzE3YmQ5OTAwNWZmMzUzYzA4ZWIyOWViYjhjZWUzYWFmZWI1MmIzODY3YTYxYTc2MzM1ZDg2YzJkNzgwOGFjOTRiYmEiOiIyYjU3MzM0NWM0ZmJkYjgzODJiYmRhYzFkM2UyYzM4ZmJhZmJjYjU5OWM2NzQxMjI5NmZiNjkxMmUxYTY0MGFjIjoiYTVmNDNhYmI0NjM0YmVkZjFiMTk5ZGNmNjM5NGJkMzUwNGZmYTBjZGMxNTFiNGU1M2NkMDc3MmQ4NmE0M2Y2MCI6ImEyZjFhYzUyZWM0NmQ5M2IzYjk0NDA1NWI3MjA1ZGE4ZmVlOTVjOWEzMjQxNDE4Y2ZiZGZiMGU5ZWNlOTE0M2EiOiJjNzUxMjQwMjgzZWMyNDgwZjZjNzcyMGMzMWUxZjlmNzBjMjM5MDdiMzg2MDJmZjc0ZjcwN2ExNGFjMTA5ODllMjlkMWVjMmU4MWQ0Y2Y4NWE5YmQzNDQwZjQ0NWZkYjllZjc5NTViZGQyYmVlY2I1ZjNjNjk0NzViNzFhYmZiNGViZDUxMzQxNDRiMjRiMDExZTJmYTYwMjZkODRmOGZiNTExYzdhNDRmMmFkN2NkMjEyYWNmMDg5ZGVhNGJmMmRiNWJlOWEyNGNkZWQ1YmU4YWQwYjhlZDE3YmJmMGM1NjY4ZmQ2NDRkYWE4NjM2MTZmNjgyNzhiNWY2ZGQ5NWFiMjM4NDUxOTY2YmI1YWU2Njc5ZDFlOTliYWQ2MTBiZWZkNDE5YWM2YmRhYjM0NDBiNzAwMTEzOWFmOGEyZmNhMzVjNzRhZTY1ZDA1ZjQ5MGE0ODBjYWFmYTFlMzQ4N2I3ODQ1MGE1YmE1OWZjMGE1OTIyMDM5NWUxNDY4NWQwMmY2YjQxODBjNzI5NzdmMDk1ZTMzYzVjYjUwNDhiNjNiY2NhMjc2NzA2MWM5N2M2MTZmNDk0Yzc3NWM1ZDM3YTY3YzVjZTk5NmU5NGJiOGZmZGU0YThkZDNkZTk3Yjc0NDkzYzliMmQ5ODVhMjQ5MmUxZjk3ZmJhOTQ3ZDI5NDBjNSIKKworSE1BQ19EUkJHIE5JU1QgQ0FWUyAxNC4zIFBSIFRydWUgKFNIQS01MTIsIDI1NiwgMjU2KSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworaG1hY19kcmJnX3ByOk1CRURUTFNfTURfU0hBNTEyOiI5ZDg5OWE1NmEwNjYwZjE4Yjk4YzkyMWIwZDQwOTU1MGZjMjI1ZmZjZmI5NzVlOWVjNmIyMzE1YmM5YTFlYjNmNjhmYzc3YWJjMzQ1MjM4MGUzMGFjNzYxYTIwYTkxNTY1ZjVjZTg3NWE4MmVlMDhhNDZhMWZjNWQ0YWFhODkxOGZiMjM5NzA0MjhjODYzZGQxYjI0NjA2YjAxMTg0NzZiMTUwZjdhNDdmMzk2MmRmZGQ4ZGRlYzkzZmM4ZjgyZGY3Y2RhNThjYjNiYjU2MjM2MTBlZWM2OWJkZDA3MjJhMCI6IjY3YmY2MWIzZWNhOTQwMTNmYzE2NWIxMTBlYWZjYjkxMjY5MTdhMGNlN2UyZDliZGY3ZWYxYjM4YmFiNmNhNGIiOiJkYjE0NGY1MzFjZWU1ZWZhZGM1MDVmNGQzN2E2ZTU0MTNmNjM4ZDQ2ZDQxOWZiYWM3NmY4MWVjYjYzZWEyODA5IjoiZDczN2IyYmE2MmMxZWMxYzc2NmYzMGE1ZGVhNzM2M2I1YzU3MGMxZTdhMzNmYjY1YzNmYjg5ZWFiNDFmNzQ4ZSI6ImRlNTE4YWMzMDM0ODU5YTQzY2Y2NzAxNzIyNTU1YmU5MjlhNWFiMjY1OGRlMzI2Njk2MDY4Yjk3MGZmMmY3N2M3NTA4M2ZlZTQ1YTY2NjBiODJmZDFlOTYwYjQ3MmE1MGQ5NjUzNTU1OWY2MGIzZTMxMzFhMmUwNTFhZjExODA2M2MxY2M4YjEzNTYwMTQ1MzhlNmVkMGUyZGEwNWM5MGJhYTA0MTA4NWY4ZjE1NzVmYzMxMDMyOTNhMDMwMzc1MTA3NzQzOGEwODFmYTNiYzVjNjRhZWVlYTVjNGIzNGZiNjk1N2U5MWRiNDdiYzNmNzM3MTAwODdkYjk4NDNlZmExYTYyZTlmNjE1ODQzZjY5ZjNmNDUwZDZjNThiMzNiMWE0ZDU1NTA5ZGYyZjM0YjhhMTQ0MDdjZDFhODdkYzk1ODFkYmUxODBlMmQ4Mzk0MTdhNGY2Y2E2YTczMWFhZTNmMDhiNTE1ZGY4MjAwODkwYmFhZTliNzlkYjc5OGM4ZTUzMGI2YTAzYWQxM2MzYzA4YmFhNGNmZjBiMDU1ZjM1ZGJiYzZjZDA4ZmJjYWM3YzBmYjc4Zjg3NTQ5MjFlMDAwZTYyMmNlMzA0MmU3NDBjNjRiYzkzNWFjYTg1ZDcxMzI3MjNkZTg0NTNjNTQzZDVjZDVhNDA3NDhlMjg2YjhmIgorCitITUFDX0RSQkcgTklTVCBDQVZTIDE0LjMgUFIgVHJ1ZSAoU0hBLTUxMiwgMjU2LCAyNTYpICMxNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitobWFjX2RyYmdfcHI6TUJFRFRMU19NRF9TSEE1MTI6ImFlNzY3OTU5Mzc4ZTlmMDMxYzhmNjhkNzc4Y2ZjMGRjZTFmOWI0Y2MxNzZjNWY5ZjlmNGM5YzNhZWQ5NDM1ZjQ4MjU4NWEwNzExODEyYzNjNzliZGE2MTliOTQyYzZlYjhmNWFiYmU4NTQwYWFlZWVkZWFhZWI1MmMxNTZkMDdkODY2OTE3OWZjNjk2Nzg4NGRiNjljMTcxODZjYjhmYzk2ZjJkZTliMGFjNTkyMmFiNTNjNTk1ZGYxZTM1MTNiYjNmMjY0MmI0NThkOTZlMzc4MmRiYjk3NWE4YjRmYWVkIjoiODMwZjE3OGNmNWY1NDQxNDBkMmQ4YzA3Mzc3OTBiOTdiYzZmMTUwNzg0ODY1NTQ4ZDczZjFmMzdhNWEzOWE2NSI6ImNiMTJhMmI5YTAyYWFhZWFlNGM3Yzc2Y2FkOWUwMDYxODZkOTc4YmMwNDZjMWVhODE1MzJiYzUxNjAxZWRlMDAiOiIyZDNkZGUzYjM1ODFiODYzZTE1OTBiZGM2MzhjMzNiZmQxNzA1NTU0NDVlMjI1ZjNhNDUwZDllOTc2MmFiZWMxIjoiZmRkZjdmMWI5MDY4NjFkNDlkYTk2NjBlNzcxNmI1ZWY5ODcxNjNlN2UyZjUxZjRmZWYyY2IzZThkMDFiNzM2MDY3NzY1YWFlYTExYTdkMTkzMjY2YjJlMDA3MWU0ZDRjOGNjNzc2Mzk5NDY0NTYzYWRiOWRlYWUyMmJkNzIxZWQwM2IxNDg1MTYxMDBiOWYzNDBhMDBkMjYzMmM4MGM1YjNlMWY5MzgyNWZmZWIxMTJmYjkwZTY1OGQ2Mzg3NDBlNjJkODAzMWZhYmZlNDBmNzljMjA1MzJlNjY3YWVhY2M2YmU2MzVmNjRhMDU4MDIzNmQ3ZDk3OGM1ZGIwMTdjNzZhNjc2N2RjNDE5YmEyZjg5MTAyYTg4ZTUzMjU0ZjQxMjA1ODY2ZTg3NTIyNTM4MGFlMDQ5NDNiY2M4ZjE1MmM5ZmQ3OWE2ODA1NTdkMWYyYTBhOGFjN2IyNzkwMGJiYTMzZGI2M2UyNmUwZDczNjMwMzRhZjE0MzBiNjU0NmEzY2UyYzAxYzhjZmUwZTE1MmYxMDZiYWE1YjJmYWUxZmUwMGNlZjEwMTU0YjczNWZkZmFlMzU0ZWNlY2M3ZGE0NGM5MTRiMDU0Y2Q5N2Q5OTg2NmE5ZDVkZjQyNzY1Y2Q2MmVhZjFiOGFkYzg4NWZhMjI2MzkxMWM4MzdiNDY0M2YiCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21kLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkMWY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5kYXRhCkBAIC0wLDAgKzEsMTIyNSBAQAorTUQgcHJvY2VzcworbWJlZHRsc19tZF9wcm9jZXNzOgorCitNRCBOVUxML3VuaW5pdGlhbGlzZWQgYXJndW1lbnRzCittZF9udWxsX2FyZ3M6CisKK0luZm9ybWF0aW9uIG9uIE1EMgorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF9pbmZvOk1CRURUTFNfTURfTUQyOiJNRDIiOjE2CisKK0luZm9ybWF0aW9uIG9uIE1ENAorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF9pbmZvOk1CRURUTFNfTURfTUQ0OiJNRDQiOjE2CisKK0luZm9ybWF0aW9uIG9uIE1ENQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9pbmZvOk1CRURUTFNfTURfTUQ1OiJNRDUiOjE2CisKK0luZm9ybWF0aW9uIG9uIFJJUEVNRDE2MAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF9pbmZvOk1CRURUTFNfTURfUklQRU1EMTYwOiJSSVBFTUQxNjAiOjIwCisKK0luZm9ybWF0aW9uIG9uIFNIQTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2luZm86TUJFRFRMU19NRF9TSEExOiJTSEExIjoyMAorCitJbmZvcm1hdGlvbiBvbiBTSEEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaW5mbzpNQkVEVExTX01EX1NIQTIyNDoiU0hBMjI0IjoyOAorCitJbmZvcm1hdGlvbiBvbiBTSEEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaW5mbzpNQkVEVExTX01EX1NIQTI1NjoiU0hBMjU2IjozMgorCitJbmZvcm1hdGlvbiBvbiBTSEEzODQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaW5mbzpNQkVEVExTX01EX1NIQTM4NDoiU0hBMzg0Ijo0OAorCitJbmZvcm1hdGlvbiBvbiBTSEE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaW5mbzpNQkVEVExTX01EX1NIQTUxMjoiU0hBNTEyIjo2NAorCitnZW5lcmljIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dDoiTUQyIjoiIjoiODM1MGU1YTNlMjRjMTUzZGYyMjc1YzlmODA2OTI3NzMiCisKK2dlbmVyaWMgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMgorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF90ZXh0OiJNRDIiOiJhIjoiMzJlYzAxZWM0YTZkYWM3MmMwYWI5NmZiMzRjMGI1ZDEiCisKK2dlbmVyaWMgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMworZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF90ZXh0OiJNRDIiOiJhYmMiOiJkYTg1M2IwZDNmODhkOTliMzAyODNhNjllNmRlZDZiYiIKKworZ2VuZXJpYyBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM0CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHQ6Ik1EMiI6Im1lc3NhZ2UgZGlnZXN0IjoiYWI0ZjQ5NmJmYjJhNTMwYjIxOWZmMzMwMzFmZTA2YjAiCisKK2dlbmVyaWMgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjNQorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF90ZXh0OiJNRDIiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6IjRlOGRkZmYzNjUwMjkyYWI1YTQxMDhjM2FhNDc5NDBiIgorCitnZW5lcmljIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dDoiTUQyIjoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiJkYTMzZGVmMmE0MmRmMTM5NzUzNTI4NDZjMzAzMzhjZCIKKworZ2VuZXJpYyBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM3CitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX3RleHQ6Ik1EMiI6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiZDU5NzZmNzlkODNkM2EwZGM5ODA2YzNjNjZmM2VmZDgiCisKK2dlbmVyaWMgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0OiJNRDQiOiIiOiIzMWQ2Y2ZlMGQxNmFlOTMxYjczYzU5ZDdlMGMwODljMCIKKworZ2VuZXJpYyBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHQ6Ik1ENCI6ImEiOiJiZGU1MmNiMzFkZTMzZTQ2MjQ1ZTA1ZmJkYmQ2ZmIyNCIKKworZ2VuZXJpYyBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHQ6Ik1ENCI6ImFiYyI6ImE0NDgwMTdhYWYyMWQ4NTI1ZmMxMGFlODdhYTY3MjlkIgorCitnZW5lcmljIG1iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfdGV4dDoiTUQ0IjoibWVzc2FnZSBkaWdlc3QiOiJkOTEzMGE4MTY0NTQ5ZmU4MTg4NzQ4MDZlMWM3MDE0YiIKKworZ2VuZXJpYyBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHQ6Ik1ENCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiZDc5ZTFjMzA4YWE1YmJjZGVlYThlZDYzZGY0MTJkYTkiCisKK2dlbmVyaWMgbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNgorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF90ZXh0OiJNRDQiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6IjA0M2Y4NTgyZjI0MWRiMzUxY2U2MjdlMTUzZTdmMGU0IgorCitnZW5lcmljIG1iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzcKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfdGV4dDoiTUQ0IjoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiJlMzNiNGRkYzljMzhmMjE5OWMzZTdiMTY0ZmNjMDUzNiIKKworZ2VuZXJpYyBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHQ6Ik1ENSI6IiI6ImQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgorCitnZW5lcmljIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dDoiTUQ1IjoiYSI6IjBjYzE3NWI5YzBmMWI2YTgzMWMzOTllMjY5NzcyNjYxIgorCitnZW5lcmljIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dDoiTUQ1IjoiYWJjIjoiOTAwMTUwOTgzY2QyNGZiMGQ2OTYzZjdkMjhlMTdmNzIiCisKK2dlbmVyaWMgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0OiJNRDUiOiJtZXNzYWdlIGRpZ2VzdCI6ImY5NmI2OTdkN2NiNzkzOGQ1MjVhMmYzMWFhZjE2MWQwIgorCitnZW5lcmljIG1iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzUKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfdGV4dDoiTUQ1IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiJjM2ZjZDNkNzYxOTJlNDAwN2RmYjQ5NmNjYTY3ZTEzYiIKKworZ2VuZXJpYyBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICM2CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHQ6Ik1ENSI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiZDE3NGFiOThkMjc3ZDlmNWE1NjExYzJjOWY0MTlkOWYiCisKK2dlbmVyaWMgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0OiJNRDUiOiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6IjU3ZWRmNGEyMmJlM2M5NTVhYzQ5ZGEyZTIxMDdiNjdhIgorCitnZW5lcmljIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzEKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dDoiUklQRU1EMTYwIjoiIjoiOWMxMTg1YTVjNWU5ZmM1NDYxMjgwODk3N2VlOGY1NDhiMjI1OGQzMSIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICMyCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6ImEiOiIwYmRjOWQyZDI1NmIzZWU5ZGFhZTM0N2JlNmY0ZGM4MzVhNDY3ZmZlIgorCitnZW5lcmljIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzMKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dDoiUklQRU1EMTYwIjoiYWJjIjoiOGViMjA4ZjdlMDVkOTg3YTliMDQ0YThlOThjNmIwODdmMTVhMGJmYyIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM0CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6Im1lc3NhZ2UgZGlnZXN0IjoiNWQwNjg5ZWY0OWQyZmFlNTcyYjg4MWIxMjNhODVmZmEyMTU5NWYzNiIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM1CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiZjcxYzI3MTA5YzY5MmMxYjU2YmJkY2ViNWI5ZDI4NjViMzcwOGRiYyIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM2CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6ImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIjoiMTJhMDUzMzg0YTljMGM4OGU0MDVhMDZjMjdkY2Y0OWFkYTYyZWIyYiIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM3CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiYjBlMjBiNmUzMTE2NjQwMjg2ZWQzYTg3YTU3MTMwNzliMjFmNTE4OSIKKworZ2VuZXJpYyBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM4CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHQ6IlJJUEVNRDE2MCI6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiOWI3NTJlNDU1NzNkNGIzOWY0ZGJkMzMyM2NhYjgyYmY2MzMyNmJmYiIKKworZ2VuZXJpYyBITUFDLU1EMiBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfaG1hYzoiTUQyIjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6ImQ1NzMyNTgyZjQ5NGY1ZGRmMzVlZmQxNjZjODVhZjljIgorCitnZW5lcmljIEhNQUMtTUQyIEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWJlZHRsc19tZF9obWFjOiJNRDIiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6IjI3MGZjZjExZjI3YzI3NDQ4NDU3ZDcwNDlhN2VkYjA4NGEzZTU1NGUwYjJhY2Y1ODA2OTgyMjEzZjBhZDUxNjQwMmU0Yzg2OWM0ZmYyMTcxZTE4ZTM0ODliYWEzMTI1ZDJjMzA1NmViYjYxNjI5NmY5YjZhYTk3ZWY2OGVlYWJjZGMwYjZkZGU0Nzc3NTAwNDA5NmEyNDFlZmNmMGE5MGQxOWIzNGU4OThjYzczNDBjZGM5NDBmOGJkZDQ2ZTIzZTM1MmYzNGJjYTEzMWQ0ZDY3YTdjMmRkYjhkMGQ2OGI2N2YwNjE1MmExMjgxNjhlMWMzNDFjMzdlMGE2NmM1MDE4OTk5YjcwNTliY2MzMDBiZWVkMmMxOWRkMTE1MmQyZmUwNjI4NTMyOTNiOGYzYzhiNSI6IjU0YWI2ODUwM2Y3ZDFiNWM3NzQxMzQwZGZmMjcyMmE5IgorCitnZW5lcmljIEhNQUMtTUQyIEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWJlZHRsc19tZF9obWFjOiJNRDIiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiZDg1MGU1ZjU1NDU1OGNmMGZlNzlhMDYxMmUxZDAzNjUiCisKK2dlbmVyaWMgSE1BQy1NRDQgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2htYWM6Ik1ENCI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJlYWJkMGZiZWZiODJmYjAwNjNhMjVhNmQ3YjhiZGMwZiIKKworZ2VuZXJpYyBITUFDLU1ENCBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ0IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiIyNzBmY2YxMWYyN2MyNzQ0ODQ1N2Q3MDQ5YTdlZGIwODRhM2U1NTRlMGIyYWNmNTgwNjk4MjIxM2YwYWQ1MTY0MDJlNGM4NjljNGZmMjE3MWUxOGUzNDg5YmFhMzEyNWQyYzMwNTZlYmI2MTYyOTZmOWI2YWE5N2VmNjhlZWFiY2RjMGI2ZGRlNDc3NzUwMDQwOTZhMjQxZWZjZjBhOTBkMTliMzRlODk4Y2M3MzQwY2RjOTQwZjhiZGQ0NmUyM2UzNTJmMzRiY2ExMzFkNGQ2N2E3YzJkZGI4ZDBkNjhiNjdmMDYxNTJhMTI4MTY4ZTFjMzQxYzM3ZTBhNjZjNTAxODk5OWI3MDU5YmNjMzAwYmVlZDJjMTlkZDExNTJkMmZlMDYyODUzMjkzYjhmM2M4YjUiOiJjZWMzYzVlNDIxYTdiNzgzYWE4OWNhY2Y3OGRhZjZkYyIKKworZ2VuZXJpYyBITUFDLU1ENCBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ0IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6ImFkNWYwYTA0MTE2MTA5YjM5N2I1N2Y5Y2M5YjZkZjRiIgorCitnZW5lcmljIEhNQUMtTUQ1IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiNDI1NTI4ODJmMDBiZDQ2MzNlYTgxMTM1YTE4NGIyODQiCisKK2dlbmVyaWMgSE1BQy1NRDUgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiMjcwZmNmMTFmMjdjMjc0NDg0NTdkNzA0OWE3ZWRiMDg0YTNlNTU0ZTBiMmFjZjU4MDY5ODIyMTNmMGFkNTE2NDAyZTRjODY5YzRmZjIxNzFlMThlMzQ4OWJhYTMxMjVkMmMzMDU2ZWJiNjE2Mjk2ZjliNmFhOTdlZjY4ZWVhYmNkYzBiNmRkZTQ3Nzc1MDA0MDk2YTI0MWVmY2YwYTkwZDE5YjM0ZTg5OGNjNzM0MGNkYzk0MGY4YmRkNDZlMjNlMzUyZjM0YmNhMTMxZDRkNjdhN2MyZGRiOGQwZDY4YjY3ZjA2MTUyYTEyODE2OGUxYzM0MWMzN2UwYTY2YzUwMTg5OTliNzA1OWJjYzMwMGJlZWQyYzE5ZGQxMTUyZDJmZTA2Mjg1MzI5M2I4ZjNjOGI1IjoiYTE2YTg0Mjg5MTc4NmQwMWZlNTBiYTc3MzFkYjc0NjQiCisKK2dlbmVyaWMgSE1BQy1NRDUgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJlOTdmNjIzOTM2Zjk4YTdmNzQxYzRiZDA2MTJmZWNjMiIKKworSE1BQy1NRDIgQm91bmN5IENhc3RsZSB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfaG1hYzoiTUQyIjoxNjoiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYiI6IjQ4NjkyMDU0Njg2NTcyNjUiOiJkYzE5MjNlZjVmMTYxZDM1YmVmODM5Y2E4YzgwNzgwOCIKKworSE1BQy1NRDQgQm91bmN5IENhc3RsZSB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ0IjoxNjoiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYiI6IjQ4NjkyMDU0Njg2NTcyNjUiOiI1NTcwY2U5NjRiYThjMTE3NTZjZGMzOTcwMjc4ZmY1YSIKKworSE1BQy1NRDUgQm91bmN5IENhc3RsZSB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ1IjoxNjoiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYiI6IjQ4NjkyMDU0Njg2NTcyNjUiOiI1Y2NlYzM0ZWE5NjU2MzkyNDU3ZmExYWMyN2YwOGZiYyIKKworZ2VuZXJpYyBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ1IjoxNjoiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIiOiI0ODY5MjA1NDY4NjU3MjY1IjoiOTI5NDcyN2EzNjM4YmIxYzEzZjQ4ZWY4MTU4YmZjOWQiCisKK2dlbmVyaWMgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6IjRhNjU2NjY1IjoiNzc2ODYxNzQyMDY0NmYyMDc5NjEyMDc3NjE2ZTc0MjA2NjZmNzIyMDZlNmY3NDY4Njk2ZTY3M2YiOiI3NTBjNzgzZTZhYjBiNTAzZWFhODZlMzEwYTVkYjczOCIKKworZ2VuZXJpYyBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ1IjoxNjoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiJkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIjoiNTZiZTM0NTIxZDE0NGM4OGRiYjhjNzMzZjBlOGIzZjYiCisKK2dlbmVyaWMgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6IjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5IjoiY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZCI6IjY5N2VhZjBhY2EzYTNhZWEzYTc1MTY0NzQ2ZmZhYTc5IgorCitnZW5lcmljIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzUKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9obWFjOiJNRDUiOjEyOiIwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYyI6IjU0NjU3Mzc0MjA1NzY5NzQ2ODIwNTQ3Mjc1NmU2MzYxNzQ2OTZmNmUiOiI1NjQ2MWVmMjM0MmVkYzAwZjliYWI5OTUiCisKK2dlbmVyaWMgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjNgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2htYWM6Ik1ENSI6MTY6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiI1NDY1NzM3NDIwNTU3MzY5NmU2NzIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDRiNjU3OTIwMmQyMDQ4NjE3MzY4MjA0YjY1NzkyMDQ2Njk3MjczNzQiOiI2YjFhYjdmZTRiZDdiZjhmMGI2MmU2Y2U2MWI5ZDBjZCIKKworZ2VuZXJpYyBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICM3CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfaG1hYzoiTUQ1IjoxNjoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6IjU0NjU3Mzc0MjA1NTczNjk2ZTY3MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNGI2NTc5MjA2MTZlNjQyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDRmNmU2NTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDQ0NjE3NDYxIjoiNmY2MzBmYWQ2N2NkYTBlZTFmYjFmNTYyZGIzYWE1M2UiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzEKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiIjoiNDg2OTIwNTQ2ODY1NzI2NSI6IjI0Y2I0YmQ2N2QyMGZjMWE1ZDJlZDc3MzJkY2MzOTM3N2YwYTU2NjgiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzIKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiI0YTY1NjY2NSI6Ijc3Njg2MTc0MjA2NDZmMjA3OTYxMjA3NzYxNmU3NDIwNjY2ZjcyMjA2ZTZmNzQ2ODY5NmU2NzNmIjoiZGRhNmMwMjEzYTQ4NWE5ZTI0ZjQ3NDIwNjRhN2YwMzNiNDNjNDA2OSIKKworZ2VuZXJpYyBITUFDLVJJUEVNRDE2MCBUZXN0IHZlY3RvciBSRkMgMjI4NiAjMworZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2htYWM6IlJJUEVNRDE2MCI6MjA6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiJkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIjoiYjBiMTA1MzYwZGU3NTk5NjBhYjRmMzUyOThlMTE2ZTI5NWQ4ZTdjMSIKKworZ2VuZXJpYyBITUFDLVJJUEVNRDE2MCBUZXN0IHZlY3RvciBSRkMgMjI4NiAjNAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2htYWM6IlJJUEVNRDE2MCI6MjA6IjAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5IjoiY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZCI6ImQ1Y2E4NjJmNGQyMWQ1ZTYxMGUxOGI0Y2YxYmViOTdhNDM2NWVjZjQiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzUKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiIwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjIjoiNTQ2NTczNzQyMDU3Njk3NDY4MjA1NDcyNzU2ZTYzNjE3NDY5NmY2ZSI6Ijc2MTk2OTM5NzhmOTFkOTA1MzlhZTc4NjUwMGZmM2Q4ZTA1MThlMzkiCisKK2dlbmVyaWMgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzYKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9obWFjOiJSSVBFTUQxNjAiOjIwOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiNTQ2NTczNzQyMDU1NzM2OTZlNjcyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0YjY1NzkyMDJkMjA0ODYxNzM2ODIwNGI2NTc5MjA0NjY5NzI3Mzc0IjoiNjQ2NmNhMDdhYzVlYWMyOWUxYmQ1MjNlNWFkYTc2MDViNzkxZmQ4YiIKKworZ2VuZXJpYyBITUFDLVJJUEVNRDE2MCBUZXN0IHZlY3RvciBSRkMgMjI4NiAjNworZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2htYWM6IlJJUEVNRDE2MCI6MjA6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiI1NDY1NzM3NDIwNTU3MzY5NmU2NzIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDRiNjU3OTIwNjE2ZTY0MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0ZjZlNjUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0NDYxNzQ2MSI6IjY5ZWE2MDc5OGQ3MTYxNmNjZTVmZDA4NzFlMjM3NTRjZDc1ZDVhMGEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTURfQzpNQkVEVExTX01EMl9DCittZF90ZXh0X211bHRpOiJNRDIiOiIiOiI4MzUwZTVhM2UyNGMxNTNkZjIyNzVjOWY4MDY5Mjc3MyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoiYSI6IjMyZWMwMWVjNGE2ZGFjNzJjMGFiOTZmYjM0YzBiNWQxIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMworZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittZF90ZXh0X211bHRpOiJNRDIiOiJhYmMiOiJkYTg1M2IwZDNmODhkOTliMzAyODNhNjllNmRlZDZiYiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoibWVzc2FnZSBkaWdlc3QiOiJhYjRmNDk2YmZiMmE1MzBiMjE5ZmYzMzAzMWZlMDZiMCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzUKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiI0ZThkZGZmMzY1MDI5MmFiNWE0MTA4YzNhYTQ3OTQwYiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzYKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiJkYTMzZGVmMmE0MmRmMTM5NzUzNTI4NDZjMzAzMzhjZCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzcKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfdGV4dF9tdWx0aToiTUQyIjoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiJkNTk3NmY3OWQ4M2QzYTBkYzk4MDZjM2M2NmYzZWZkOCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfdGV4dF9tdWx0aToiTUQ0IjoiIjoiMzFkNmNmZTBkMTZhZTkzMWI3M2M1OWQ3ZTBjMDg5YzAiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6ImEiOiJiZGU1MmNiMzFkZTMzZTQ2MjQ1ZTA1ZmJkYmQ2ZmIyNCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWRfdGV4dF9tdWx0aToiTUQ0IjoiYWJjIjoiYTQ0ODAxN2FhZjIxZDg1MjVmYzEwYWU4N2FhNjcyOWQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM0CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6Im1lc3NhZ2UgZGlnZXN0IjoiZDkxMzBhODE2NDU0OWZlODE4ODc0ODA2ZTFjNzAxNGIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiZDc5ZTFjMzA4YWE1YmJjZGVlYThlZDYzZGY0MTJkYTkiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM2CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiMDQzZjg1ODJmMjQxZGIzNTFjZTYyN2UxNTNlN2YwZTQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM3CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX3RleHRfbXVsdGk6Ik1ENCI6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiZTMzYjRkZGM5YzM4ZjIxOTljM2U3YjE2NGZjYzA1MzYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHRfbXVsdGk6Ik1ENSI6IiI6ImQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiJhIjoiMGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX3RleHRfbXVsdGk6Ik1ENSI6ImFiYyI6IjkwMDE1MDk4M2NkMjRmYjBkNjk2M2Y3ZDI4ZTE3ZjcyIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiJtZXNzYWdlIGRpZ2VzdCI6ImY5NmI2OTdkN2NiNzkzOGQ1MjVhMmYzMWFhZjE2MWQwIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImMzZmNkM2Q3NjE5MmU0MDA3ZGZiNDk2Y2NhNjdlMTNiIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6ImQxNzRhYjk4ZDI3N2Q5ZjVhNTYxMWMyYzlmNDE5ZDlmIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF90ZXh0X211bHRpOiJNRDUiOiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6IjU3ZWRmNGEyMmJlM2M5NTVhYzQ5ZGEyZTIxMDdiNjdhIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjMQorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0X211bHRpOiJSSVBFTUQxNjAiOiIiOiI5YzExODVhNWM1ZTlmYzU0NjEyODA4OTc3ZWU4ZjU0OGIyMjU4ZDMxIgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjMgorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0X211bHRpOiJSSVBFTUQxNjAiOiJhIjoiMGJkYzlkMmQyNTZiM2VlOWRhYWUzNDdiZTZmNGRjODM1YTQ2N2ZmZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzMKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoiYWJjIjoiOGViMjA4ZjdlMDVkOTg3YTliMDQ0YThlOThjNmIwODdmMTVhMGJmYyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzQKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoibWVzc2FnZSBkaWdlc3QiOiI1ZDA2ODllZjQ5ZDJmYWU1NzJiODgxYjEyM2E4NWZmYTIxNTk1ZjM2IgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjNQorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0X211bHRpOiJSSVBFTUQxNjAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImY3MWMyNzEwOWM2OTJjMWI1NmJiZGNlYjViOWQyODY1YjM3MDhkYmMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBtYmVkdGxzX3JpcGVtZDE2MCBUZXN0IHZlY3RvciBmcm9tIHBhcGVyICM2CitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21kX3RleHRfbXVsdGk6IlJJUEVNRDE2MCI6ImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIjoiMTJhMDUzMzg0YTljMGM4OGU0MDVhMDZjMjdkY2Y0OWFkYTYyZWIyYiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIG1iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzcKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfdGV4dF9tdWx0aToiUklQRU1EMTYwIjoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiJiMGUyMGI2ZTMxMTY2NDAyODZlZDNhODdhNTcxMzA3OWIyMWY1MTg5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjOAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF90ZXh0X211bHRpOiJSSVBFTUQxNjAiOiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6IjliNzUyZTQ1NTczZDRiMzlmNGRiZDMzMjNjYWI4MmJmNjMzMjZiZmIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1EMiBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21kX2htYWNfbXVsdGk6Ik1EMiI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJkNTczMjU4MmY0OTRmNWRkZjM1ZWZkMTY2Yzg1YWY5YyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQyIEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfaG1hY19tdWx0aToiTUQyIjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiIyNzBmY2YxMWYyN2MyNzQ0ODQ1N2Q3MDQ5YTdlZGIwODRhM2U1NTRlMGIyYWNmNTgwNjk4MjIxM2YwYWQ1MTY0MDJlNGM4NjljNGZmMjE3MWUxOGUzNDg5YmFhMzEyNWQyYzMwNTZlYmI2MTYyOTZmOWI2YWE5N2VmNjhlZWFiY2RjMGI2ZGRlNDc3NzUwMDQwOTZhMjQxZWZjZjBhOTBkMTliMzRlODk4Y2M3MzQwY2RjOTQwZjhiZGQ0NmUyM2UzNTJmMzRiY2ExMzFkNGQ2N2E3YzJkZGI4ZDBkNjhiNjdmMDYxNTJhMTI4MTY4ZTFjMzQxYzM3ZTBhNjZjNTAxODk5OWI3MDU5YmNjMzAwYmVlZDJjMTlkZDExNTJkMmZlMDYyODUzMjkzYjhmM2M4YjUiOiI1NGFiNjg1MDNmN2QxYjVjNzc0MTM0MGRmZjI3MjJhOSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQyIEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWRfaG1hY19tdWx0aToiTUQyIjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6ImQ4NTBlNWY1NTQ1NThjZjBmZTc5YTA2MTJlMWQwMzY1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDQgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittZF9obWFjX211bHRpOiJNRDQiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiZWFiZDBmYmVmYjgyZmIwMDYzYTI1YTZkN2I4YmRjMGYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENCBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX2htYWNfbXVsdGk6Ik1ENCI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiMjcwZmNmMTFmMjdjMjc0NDg0NTdkNzA0OWE3ZWRiMDg0YTNlNTU0ZTBiMmFjZjU4MDY5ODIyMTNmMGFkNTE2NDAyZTRjODY5YzRmZjIxNzFlMThlMzQ4OWJhYTMxMjVkMmMzMDU2ZWJiNjE2Mjk2ZjliNmFhOTdlZjY4ZWVhYmNkYzBiNmRkZTQ3Nzc1MDA0MDk2YTI0MWVmY2YwYTkwZDE5YjM0ZTg5OGNjNzM0MGNkYzk0MGY4YmRkNDZlMjNlMzUyZjM0YmNhMTMxZDRkNjdhN2MyZGRiOGQwZDY4YjY3ZjA2MTUyYTEyODE2OGUxYzM0MWMzN2UwYTY2YzUwMTg5OTliNzA1OWJjYzMwMGJlZWQyYzE5ZGQxMTUyZDJmZTA2Mjg1MzI5M2I4ZjNjOGI1IjoiY2VjM2M1ZTQyMWE3Yjc4M2FhODljYWNmNzhkYWY2ZGMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENCBIYXNoIEZpbGUgT3BlblNTTCB0ZXN0ICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21kX2htYWNfbXVsdGk6Ik1ENCI6MTY6IjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxIjoiYjkxY2U1YWM3N2QzM2MyMzRlNjEwMDJlZDYiOiJhZDVmMGEwNDExNjEwOWIzOTdiNTdmOWNjOWI2ZGY0YiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IEhhc2ggRmlsZSBPcGVuU1NMIHRlc3QgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxNjoiNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjEiOiJiOTFjZTVhYzc3ZDMzYzIzNGU2MTAwMmVkNiI6IjQyNTUyODgyZjAwYmQ0NjMzZWE4MTEzNWExODRiMjg0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6IjI3MGZjZjExZjI3YzI3NDQ4NDU3ZDcwNDlhN2VkYjA4NGEzZTU1NGUwYjJhY2Y1ODA2OTgyMjEzZjBhZDUxNjQwMmU0Yzg2OWM0ZmYyMTcxZTE4ZTM0ODliYWEzMTI1ZDJjMzA1NmViYjYxNjI5NmY5YjZhYTk3ZWY2OGVlYWJjZGMwYjZkZGU0Nzc3NTAwNDA5NmEyNDFlZmNmMGE5MGQxOWIzNGU4OThjYzczNDBjZGM5NDBmOGJkZDQ2ZTIzZTM1MmYzNGJjYTEzMWQ0ZDY3YTdjMmRkYjhkMGQ2OGI2N2YwNjE1MmExMjgxNjhlMWMzNDFjMzdlMGE2NmM1MDE4OTk5YjcwNTliY2MzMDBiZWVkMmMxOWRkMTE1MmQyZmUwNjI4NTMyOTNiOGYzYzhiNSI6ImExNmE4NDI4OTE3ODZkMDFmZTUwYmE3NzMxZGI3NDY0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgSGFzaCBGaWxlIE9wZW5TU0wgdGVzdCAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MSI6ImI5MWNlNWFjNzdkMzNjMjM0ZTYxMDAyZWQ2IjoiZTk3ZjYyMzkzNmY5OGE3Zjc0MWM0YmQwNjEyZmVjYzIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX2htYWNfbXVsdGk6Ik1ENSI6MTY6IjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiIjoiNDg2OTIwNTQ2ODY1NzI2NSI6IjkyOTQ3MjdhMzYzOGJiMWMxM2Y0OGVmODE1OGJmYzlkIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjMgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiI0YTY1NjY2NSI6Ijc3Njg2MTc0MjA2NDZmMjA3OTYxMjA3NzYxNmU3NDIwNjY2ZjcyMjA2ZTZmNzQ2ODY5NmU2NzNmIjoiNzUwYzc4M2U2YWIwYjUwM2VhYTg2ZTMxMGE1ZGI3MzgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX2htYWNfbXVsdGk6Ik1ENSI6MTY6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCI6IjU2YmUzNDUyMWQxNDRjODhkYmI4YzczM2YwZThiM2Y2IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiIwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOSI6ImNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2QiOiI2OTdlYWYwYWNhM2EzYWVhM2E3NTE2NDc0NmZmYWE3OSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtTUQ1IFRlc3QgVmVjdG9yIFJGQzIyMDIgIzUKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWRfaG1hY19tdWx0aToiTUQ1IjoxMjoiMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMiOiI1NDY1NzM3NDIwNTc2OTc0NjgyMDU0NzI3NTZlNjM2MTc0Njk2ZjZlIjoiNTY0NjFlZjIzNDJlZGMwMGY5YmFiOTk1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1NRDUgVGVzdCBWZWN0b3IgUkZDMjIwMiAjNgorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittZF9obWFjX211bHRpOiJNRDUiOjE2OiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiNTQ2NTczNzQyMDU1NzM2OTZlNjcyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0YjY1NzkyMDJkMjA0ODYxNzM2ODIwNGI2NTc5MjA0NjY5NzI3Mzc0IjoiNmIxYWI3ZmU0YmQ3YmY4ZjBiNjJlNmNlNjFiOWQwY2QiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLU1ENSBUZXN0IFZlY3RvciBSRkMyMjAyICM3CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21kX2htYWNfbXVsdGk6Ik1ENSI6MTY6ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOiI1NDY1NzM3NDIwNTU3MzY5NmU2NzIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNDI2YzZmNjM2YjJkNTM2OTdhNjUyMDRiNjU3OTIwNjE2ZTY0MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0ZjZlNjUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0NDYxNzQ2MSI6IjZmNjMwZmFkNjdjZGEwZWUxZmIxZjU2MmRiM2FhNTNlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzEKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYiI6IjQ4NjkyMDU0Njg2NTcyNjUiOiIyNGNiNGJkNjdkMjBmYzFhNWQyZWQ3NzMyZGNjMzkzNzdmMGE1NjY4IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzIKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiNGE2NTY2NjUiOiI3NzY4NjE3NDIwNjQ2ZjIwNzk2MTIwNzc2MTZlNzQyMDY2NmY3MjIwNmU2Zjc0Njg2OTZlNjczZiI6ImRkYTZjMDIxM2E0ODVhOWUyNGY0NzQyMDY0YTdmMDMzYjQzYzQwNjkiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVJJUEVNRDE2MCBUZXN0IHZlY3RvciBSRkMgMjI4NiAjMworZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF9obWFjX211bHRpOiJSSVBFTUQxNjAiOjIwOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCI6ImIwYjEwNTM2MGRlNzU5OTYwYWI0ZjM1Mjk4ZTExNmUyOTVkOGU3YzEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVJJUEVNRDE2MCBUZXN0IHZlY3RvciBSRkMgMjI4NiAjNAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF9obWFjX211bHRpOiJSSVBFTUQxNjAiOjIwOiIwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOSI6ImNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2RjZGNkY2QiOiJkNWNhODYyZjRkMjFkNWU2MTBlMThiNGNmMWJlYjk3YTQzNjVlY2Y0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzUKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYyI6IjU0NjU3Mzc0MjA1NzY5NzQ2ODIwNTQ3Mjc1NmU2MzYxNzQ2OTZmNmUiOiI3NjE5NjkzOTc4ZjkxZDkwNTM5YWU3ODY1MDBmZjNkOGUwNTE4ZTM5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1SSVBFTUQxNjAgVGVzdCB2ZWN0b3IgUkZDIDIyODYgIzYKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWRfaG1hY19tdWx0aToiUklQRU1EMTYwIjoyMDoiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI6IjU0NjU3Mzc0MjA1NTczNjk2ZTY3MjA0YzYxNzI2NzY1NzIyMDU0Njg2MTZlMjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNGI2NTc5MjAyZDIwNDg2MTczNjgyMDRiNjU3OTIwNDY2OTcyNzM3NCI6IjY0NjZjYTA3YWM1ZWFjMjllMWJkNTIzZTVhZGE3NjA1Yjc5MWZkOGIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVJJUEVNRDE2MCBUZXN0IHZlY3RvciBSRkMgMjI4NiAjNworZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittZF9obWFjX211bHRpOiJSSVBFTUQxNjAiOjIwOiJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIjoiNTQ2NTczNzQyMDU1NzM2OTZlNjcyMDRjNjE3MjY3NjU3MjIwNTQ2ODYxNmUyMDQyNmM2ZjYzNmIyZDUzNjk3YTY1MjA0YjY1NzkyMDYxNmU2NDIwNGM2MTcyNjc2NTcyMjA1NDY4NjE2ZTIwNGY2ZTY1MjA0MjZjNmY2MzZiMmQ1MzY5N2E2NTIwNDQ2MTc0NjEiOiI2OWVhNjA3OThkNzE2MTZjY2U1ZmQwODcxZTIzNzU0Y2Q3NWQ1YTBhIgorCitnZW5lcmljIE1EMiBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWJlZHRsc19tZF9maWxlOiJNRDIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiYjU5M2MwOTg3MTJkMmUyMTYyOGM4OTg2Njk1NDUxYTgiCisKK2dlbmVyaWMgTUQyIEhhc2ggZmlsZSAjMgorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DCittYmVkdGxzX21kX2ZpbGU6Ik1EMiI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzIiOiIzYzAyN2I3NDA5OTA5YTRjNGIyNmJiYWI2OWFkOWY0ZiIKKworZ2VuZXJpYyBNRDIgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfTUQyX0MKK21iZWR0bHNfbWRfZmlsZToiTUQyIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6IjZiYjQzZWIyODVlODFmNDE0MDgzYTk0Y2RiZTI5ODlkIgorCitnZW5lcmljIE1EMiBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19NRDJfQworbWJlZHRsc19tZF9maWxlOiJNRDIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiODM1MGU1YTNlMjRjMTUzZGYyMjc1YzlmODA2OTI3NzMiCisKK2dlbmVyaWMgTUQ0IEhhc2ggZmlsZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2ZpbGU6Ik1ENCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzEiOiI4ZDE5NzcyYzE3NmJkMjcxNTNiOTQ4NjcxNWUyYzBiOSIKKworZ2VuZXJpYyBNRDQgSGFzaCBmaWxlICMyCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0MKK21iZWR0bHNfbWRfZmlsZToiTUQ0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMiI6ImYyYWM1M2I4NTQyODgyYTVhMDAwN2M2Zjg0YjRkOWZkIgorCitnZW5lcmljIE1ENCBIYXNoIGZpbGUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQworbWJlZHRsc19tZF9maWxlOiJNRDQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8zIjoiMTk1YzE1MTU4ZTJkMDc4ODFkOWE2NTQwOTVjZTRhNDIiCisKK2dlbmVyaWMgTUQ0IEhhc2ggZmlsZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DCittYmVkdGxzX21kX2ZpbGU6Ik1ENCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzQiOiIzMWQ2Y2ZlMGQxNmFlOTMxYjczYzU5ZDdlMGMwODljMCIKKworZ2VuZXJpYyBNRDUgSGFzaCBmaWxlICMxCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfZmlsZToiTUQ1IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSI6IjUyYmNkYzk4M2M5ZWQ2NGZjMTQ4YTc1OWIzYzdhNDE1IgorCitnZW5lcmljIE1ENSBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQworbWJlZHRsc19tZF9maWxlOiJNRDUiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiZDE3ZDQ2NmYxNTg5MWRmMTA1NDIyMDdhZTc4Mjc3ZjAiCisKK2dlbmVyaWMgTUQ1IEhhc2ggZmlsZSAjMworZGVwZW5kc19vbjpNQkVEVExTX01ENV9DCittYmVkdGxzX21kX2ZpbGU6Ik1ENSI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzMiOiJkOTQ1YmNjNjIwMGVhOTVkMDYxYTJhODE4MTY3ZDkyMCIKKworZ2VuZXJpYyBNRDUgSGFzaCBmaWxlICM0CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfbWRfZmlsZToiTUQ1IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6ImQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgorCitnZW5lcmljIFJJUEVNRDE2MCBIYXNoIGZpbGUgIzAgKGZyb20gcGFwZXIpCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfZmlsZToiUklQRU1EMTYwIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNSI6IjUyNzgzMjQzYzE2OTdiZGJlMTZkMzdmOTdmNjhmMDgzMjVkYzE1MjgiCisKK2dlbmVyaWMgUklQRU1EMTYwIEhhc2ggZmlsZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2ZpbGU6IlJJUEVNRDE2MCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzEiOiI4MmYxZDA3MmYwZWMwYzJiMzUzNzAzYTdiNTc1YTA0YzExM2FmMWE2IgorCitnZW5lcmljIFJJUEVNRDE2MCBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQworbWJlZHRsc19tZF9maWxlOiJSSVBFTUQxNjAiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiOTk2ZmJjOGI3OTIwNmJhNzM5M2ViY2QyNDY1ODQwNjliMWMwOGYwZiIKKworZ2VuZXJpYyBSSVBFTUQxNjAgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0MKK21iZWR0bHNfbWRfZmlsZToiUklQRU1EMTYwIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6Ijg2NTNiNDZkNjU5OThmYThjODg0NmVmYTE3OTM3ZTc0MjUzM2FlNDgiCisKK2dlbmVyaWMgUklQRU1EMTYwIEhhc2ggZmlsZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DCittYmVkdGxzX21kX2ZpbGU6IlJJUEVNRDE2MCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzQiOiI5YzExODVhNWM1ZTlmYzU0NjEyODA4OTc3ZWU4ZjU0OGIyMjU4ZDMxIgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgRklQUy0xOThhICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjIwOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZiI6IjUzNjE2ZDcwNmM2NTIwMjMzMSI6IjRmNGNhM2Q1ZDY4YmE3Y2MwYTEyMDhjOWM2MWU5YzVkYTA0MDNjMGEiCisKK2dlbmVyaWMgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBGSVBTLTE5OGEgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMSI6MjA6IjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDMiOiI1MzYxNmQ3MDZjNjUyMDIzMzIiOiIwOTIyZDM0MDVmYWEzZDE5NGY4MmE0NTgzMDczN2Q1Y2M2Yzc1ZDI0IgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgRklQUy0xOThhICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjIwOiI1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiMyI6IjUzNjE2ZDcwNmM2NTIwMjMzMyI6ImJjZjQxZWFiOGJiMmQ4MDJmM2QwNWNhZjdjYjA5MmVjZjhkMWEzYWEiCisKK2dlbmVyaWMgSE1BQy1TSEEtMSBUZXN0IFZlY3RvciBGSVBTLTE5OGEgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMSI6MTI6IjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwIjoiNTM2MTZkNzA2YzY1MjAyMzM0IjoiOWVhODg2ZWZlMjY4ZGJlY2NlNDIwYzc1IgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiI3YjEwZjQxMjRiMTVjODJlIjoiMjdkY2I1YjFkYWY2MGNmZDNlMmY3M2Q0ZDY0Y2E5YzY4NGY4YmY3MWZjNjgyYTQ2NzkzYjE3OTBhZmE0ZmViMTAwY2E3YWFmZjI2ZjU4ZjBlMWQwZWQ0MmYxY2RhZDFmNDc0YWZhMmU3OWQ1M2EwYzQyODkyYzRkN2IzMjdjYmU0NmIyOTVlZDhkYTNiNmVjYWIzZDQ4NTE2ODdhNmY4MTJiNzlkZjJmNmIyMGYxMWY2NzA2ZjUzMDE3OTBjYTk5NjI1YWFkNzM5MWQ4NGY3ODA0M2QyYTBhMjM5YjE0Nzc5ODRjMTU3YmJjOTI3NjA2NGU3YTFhNDA2YjA2MTJjYSI6IjRlYWQxMmMyZmUzZDZlYTQzYWNiIgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiI0ZmU5ZmI5MDIxNzJhMjFiIjoiNGNlYjNhN2MxMzY1OWMyMmZlNTExMzRmMDNkY2U0YzIzOWQxODFiNjNjNmIwYjU5ZDM2NzE1N2ZkMDVjYWI5ODM4NGY5MmRmYTQ4MmQyZDVlNzhlNzJlZWYxYjE4MzhhZjQ2OTYwMjZjNTQyMzNkNDg0ZWNiYmU4N2Y5MDRkZjU1NDY0MTlmODU2N2VhZmQyMzJlNmMyZmNkM2VlMmI3NjgyYzYzMDAwNTI0YjA3OGRiYjIwOTZmNTg1MDA3ZGVhZTc1MjU2MmRmMWZlM2IwMTI3ODA4OWUxNmYzYmU0NmUyZDBmN2NhYmFjMmQ4ZTZjYzAyYTJkMGNhOTUzNDI1ZiI6IjU2NDQyOGE2N2JlMTkyNGI1NzkzIgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiJkMWYwMTQ1NWY3OGM0ZmI0IjoiMDBkNDBmNjdiNTc5MTRiZWM0NTZhM2UzMjAxZWYxNDY0YmUzMTlhOGQxODhjMDJlMTU3YWY0YjU0ZjliNWE2NmQ2N2Y4OThhOWJkYmIxOWZmNjNhODBhYmE2ZjI0NmQwMTM1NzU3MjFkNTJlYjFiNDdhNjVkZWY4ODQwMTFjNDliMjU3YmNjMjgxN2ZjODUzZjEwNmU4MTM4Y2UzODZkN2E1YWMzMTAzZGUwYTNmYTBlZDZiYjdhZjlmZjY2ZWJkMWNjNDZmYjg2ZTRkYTAwMTNkMjBhM2MyZGNkOGZiODI4YTRiNzBmN2YxMDRiNDFiZjNmNDQ2ODJhNjY0OTdlYSI6IjU2YTY2NWE3Y2RmZTYxMGY5ZmM1IgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiI0ZTVlZjc3ZmRmMDMzYTViIjoiZTU5MzI2NDY0ZTMyMDFkMTk1ZTI5ZjJhMzQ0NmVjMWIxYzlmZjMxMTU0ZTJhNGQwZTQwZWQ0NjZmMWJjODU1ZDI5Zjc2ODM1NjI0ZmEwMTI3ZDI5YzliMTkxNTkzOWEwNDZmMzg1YWY3ZTVkNDdhMjNiYTkxZjI4YmQyMmY4MTFlYTI1OGRiYmYzMzMyYmNkMzU0M2I4Mjg1ZDVkZjQxYmQwNjRmZmQ2NGEzNDFjMjJjNGVkYjQ0ZjljOGQ5ZTZkZjBjNTlkYmY0YTA1MmE2YzgzZGE3NDc4ZTE3OWE2ZjM4MzljNjg3MGZmOGNhOGI5NDk3ZjlhYzFkNzI1ZmRkYSI6Ijk4MWMwYTdhODQyM2I2M2E4ZmE2IgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiJiY2Q5ZmY4YWE2MGJlMmJlIjoiNTFiZTRkMGViMzdiYWI3MTRmOTJlMTllOWQ3MDM5MDY1NWIzNjNlOGNkMzQ2YTc0ODI0NWU3MzFmNDM3NzU5Y2I4MjA2NDEyYzhkYWIyZWYxZDRmMzZmODgwZjQxZmY2OWQ5NDlkYTQ1OTRmZGVjYjY1ZTIzY2FjMTMyOWI1OWU2OWUyOWJmODc1YjM4YzMxZGY2ZmE1NDZjNTk1ZjM1Y2MyMTkyYWE3NTA2NzlhOGE1MWE2NWUwMGU4MzlkNzNhOGQ4YzU5OGE2MTBkMjM3ZmJlNzg5NTUyMTM1ODlkODBlZmNiNzNiOTViODU4NmY5NmQxN2I2ZjUxYTcxYzNiOCI6Ijg0NjMzZjlmNTA0MGM4OTcxNDc4IgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiI0YTY2MWJjZTZlZDg2ZDIxIjoiNWZmNmM3NDRmMWFhYjFiYzI5Njk3ZDcxZjY3NTQxYjhiM2NlYzNjNzA3OTE4M2IxMGE4M2ZiOThhOWVlMjUxZDRiYWMzZTFjYjU4MWNhOTcyYWFlZDhlZmQ3YzI4NzVhNmZiNGM5OTExMzJmNjdjOTc0MmQ0NWU1M2JjN2U4ZWFhOTRiMzViMzdhOTA3YmU2MTA4NmI0MjZjZDExMDg4YWMxMTg5MzRlODVkOTY4Yzk2NjdmZDY5ZmM2ZjZlYTM4YzBmZTM0NzEwYjdlY2U5MTIxMWI5YjdlYTAwYWNkMzFmMDIyYWE2NzI2MzY4Zjk5MjhhMTM1MmYxMjIyMzNmMSI6IjczOWRmNTkzNTNhYzY2OTRlNTVlIgorCitnZW5lcmljIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2htYWM6IlNIQTEiOjEwOiIxMjg3ZTE1NjVhNTdiNTQ3IjoiMzkwZmZkY2NjNjE3MWMxMTU2OGQ4NWI4ZjkxM2UwMTliZjRjZDk4MmNhOWNkMjFlYTczMGQ0MWJkZjNmY2MwYmM4OGZmNDhiYTEzYThmMjNkZWIyZDk2ZWMxMDMzZTdiMmE1OGNhNzJiMGMxZTE3YmYwMzMzMGRiMjVkMWUzNjBmYTY5MTgwMDljNDI5NGJkMTIxNWI1Y2NkMTU5YThmNThiYzNkYzNkNDkwZWI3YzNiOWY4ODdlOGM5OGRiYmIyNzRhNzUzNzNkY2I2OTVhNTlhYmQwMjE5NTI5ZDg4NTE4YTk2ZjkyYWJjMGJiY2JkYTk4NWMzODhmMWZiYmNjOSI6ImQ3OGRkZjA4MDc3YzdkOWUyYmE2IgorCitnZW5lcmljIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyMjQiOjE0OiJlMDU1ZWI3NTY2OTdlZTU3M2ZkMzIxNDgxMWE5ZjdmYSI6IjM4NzU4NDcwMTJlZTQyZmU1NGEwMDI3YmRmMzhjY2E3MDIxYjgzYTJlZDA1MDNhZjY5ZWY2YzM3YzYzN2JjMTExNGZiYTQwMDk2YzU5NDdkNzM2ZTE5YjdhZjNjNjhkOTVhNGUzYjhiMDczYWRiYmI4MGY0N2U5ZGI4ZjJkNGYwMDE4ZGRkODQ3ZmFiZmRmOWRkOWI1MmM5M2U0MDQ1ODk3NzcyNWY2YjdiYTE1ZjA4MTZiYjg5NWNkZjUwNDAxMjY4ZjVkNzAyYjdlNmE1ZjlmYWVmNTdiODc2OGM4YTNmYzE0ZjlhNGIzMTgyYjQxZDk0MGUzMzdkMjE5YjI5ZmYiOiI0MGE0NTMxMzMzNjFjYzQ4ZGExMWJhZjYxNmVlIgorCitnZW5lcmljIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyMjQiOjE0OiI4OGU1MjU4YjU1YjE2MjMzODVlYjk2MzJmYTdjNTdkNiI6ImFkYTc2YmI2MDRiZTE0MzI2NTUxNzAxY2YzMGU0OGE2NWVlZTgwYjQ0ZjBiOWQ0YTA3YjE4NDQ1NDNiNzg0NGE2MjEwOTdmZGM5OWRlNTczODc0NThhZTkzNTQ4OTliNjIwZDA2MTdlYWJjYWVmYTllZWYzZDQxM2EzMzYyODA1NDMzNWNlNjU2YzI2ZmEyOTg2ZTBmMTExYTYzNTEwOTZiMjgzMTAxZWM3ODY4ODcxZDc3MGIzNzA5NzNjNzQwNTk4M2Y5NzU2YjMwMDVhM2VhYjQ5MmNmZDBlN2ViNDJlNWMyZTE1ZmE2YmU4NzE4YzBhNTBhY2M0ZTU3MTcyMzAiOiI4MWM3ODNhZjUzODAxNWNlZjNjNjAwOTVkZjUzIgorCitnZW5lcmljIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyMjQiOjE0OiI4NWQ0MDJkODIyMTE0ZDMxYWJmNzU1MjZlMjUzODcwNSI6IjgwMjBkOGQ5OGNjMmUyMjk4YjMyODc5YzUxYzc1MWUxZGQ1NTU4ZmUyZWFiYjhmMTU4NjA0Mjk3ZDZkMDcyY2UyMjYxYTFkNjgzMGI3Y2ZlMjYxN2I1N2M3MTI2Zjk5Yzk0NzYyMTFkNjE2MWFjZDc1ZDI2NmRhMjE3ZWM4MTc0YjgwNDg0YzlkYzZmMDQ0OGEwYTAzNmEzZmM4MmU4YmY1NGJkYjcxNTQ5MzY4MjU4ZDVkNDFmNTc5NzhhNGMyNjZiOTJlODc4M2VmNjYzNTAyMTU1NzNkOTliZTQwODkxNDRiMzgzYWQ4ZjMyMjJiYWU4ZjNiZjgwZmZiMWJiMmIiOiIyYWEwMzQwYWM5ZGVhZmUzYmUzODEyOWRhY2EwIgorCitnZW5lcmljIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyMjQiOjE0OiI1NDVjNmVlY2M1ZWU0NmZhMTdjNTlmOTFhOTRmODFhZSI6IjhmYjdmMzU2NTU5MzE3MDE1MmRkYjIwMjE4NzQ3ODRlOTUxOTc3Y2ZkZDIyZjhiNzJhNzJhNjEzMjBhOGYyYTM1Njk3YjVlOTEzZjcxNzgwNTU1OWIxYWYxODYxZWUzZWQ0MmZiNzg4NDgxZTRmZDI3NmIxN2JkYmVmY2FlN2I0NTAxZGM1ZDIwZGU1Yjc2MjZkZDVlZmRjZDY1Mjk0ZGI0YmRmNjgyYzMzZDlhOTI1NWM2NDM1MzgzZmE1ZjFjODg2MzI2YTNhY2JjNmJkNTBhMzNhYjViMmRiYjAzNGNlMDExMmQ0ZTIyNmJiY2Q1N2UzNzMxYTUxOWFhMWQ3ODQiOiIzZWI1NjZlYWM1NGM0YTNhOWVmMDkyNDY5ZjI0IgorCitnZW5lcmljIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyMjQiOjE0OiI0NDY2YWI0ZGM0Mzg4NDFhOTc1MGM3ZjE3M2RmZjAyZSI6IjI1MzRjMTFjNzhjOTljZmZhZWM4ZjcyMmYwNGFkYzcwNDVjNzMyNGQ1OGNlOThlMzdjZmE5NGI2ZWQyMWVkN2Y1OGNlNTUzNzllZjI0YjcyZDZkNjQwZWU5MTU0Zjk2YzYxNDczNGJlOWM0MDhlMjI1ZDdiYTRjZWNjMTE3OWNjOWY2ZTE4MDhlMTA2N2FhOGYyNDRhOTliZDBjMzI2NzU5NGMxODg3YTQwZDE2N2Y4YjdjZjc4ZGIwZDE5Zjk3YjAxZmM1MGI4Yzg2ZGVmNDkwZGZhN2E1MTM1MDAyYzMzZTcxZDc3YThjY2U4ZWEwZjkzZTA1ODA0MzlhMzM3MzMiOiI1OWY0NGE5YmJlZDQ4NzViODkyZDIyZDZiNWFiIgorCitnZW5lcmljIEhNQUMtU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyMjQiOjI4OiIwZTNkZDliYjVlNGNmMGYwOWE0YzExNjAwYWY1NmQ4ZCI6ImY0NTg5ZmE3NmMzMjhlYTI1Y2Y4YmFlNTgyMDI2YmE0MGE1OWQ0NWE1NDZmZjMxY2Y4MGViODI2MDg4ZjY5YmI5NTRjNDUyYzc0NTg2ODM2NDE2ZGVlOTBhNTI1NWJjNWQ1NmQzYjQwNWIzNzA1YTUxOTcwNDU2ODhiMzJmYTk4NGMzYTNkZmJkYzljMjQ2MGEwYjVlNjMxMmE2MjQwNDhiYjZmMTcwMzA2NTM1ZTliMzcxYTNhYjEzNGEyNjQyYTIzMGFkMDNkMmM2ODhjY2E4MGJhZWFlZTlhMjBlMWQ0YzU0OGIxY2VkZTI5YzZhNDViZjRkZjJjOGM0NzZmMWEiOiIxMjE3NWI5M2UzZGE0YzU4MjE3MTQ1ZTRkYzBhMWNmMTQyZmFiOTMxOWJiNTAxZTAzN2IzNTBiYSIKKworZ2VuZXJpYyBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjI0IjoyODoiY2RhNTE4N2IwYzVkY2IwZjhlNWE4YmVlZDIzMDY1ODQiOiI5MDExYWUyOWI0NGM0OWIzNDc0ODdjZTk3Mjk2NWYxNmFkZTNjMTViZTA4NTZjZTljODUzYTk3MzlkYmEwN2U0ZjIwZDU5NGRkYzFkZmUyMTU2MGE2NWE0ZTQ1OGNmYTE3NzQ1NTc1YjkxNWEzMGM3YTk0MTJmZjhkMWQ2ODlkYjk2ODBkZDI0MjhjMjc1ODhiYjBkYzkyZDJjZDk0NDVmZThmNDRiODQwYTE5N2M1MmMzYzQzMzNmZmY0NTUzMzk0NTEzNDM5OGRmNjQzNjUxM2NmYWIwNmM5MjQwNDZiOGM3OTVhNWJkOTJlOGQ1ZjJkZTg1YmYzMDZmMmVlZDY3IjoiNGFhYmE5MmI0MGUyYTYwMGZlYWIxNzZlYjliMjkyZDgxNDg2NDE5NWMwMzM0MmFhZDZmNjdmMDgiCisKK2dlbmVyaWMgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2htYWM6IlNIQTI1NiI6MTY6ImNkZmZkMzRlNmIxNmZkYzAiOiJkODNlNzhiOTlhYjYxNzA5NjA4OTcyYjM2ZTc2YTU3NTYwM2RiNzQyMjY5Y2M1ZGQ0ZTdkNWNhNzgxNmUyNmI2NTE1MWM5MjYzMjU1MGNiNGM1MjUzYzg4NWQ1ZmNlNTNiYzQ3NDU5YTFkYmQ1NjUyNzg2YzRhYWMwMTQ1YTUzMmYxMmMwNTEzOGFmMDRjYmI1NTgxMDFhN2FmNWRmNDc4ODM0YzIxNDY1OTRkZDczNjkwZDAxYTRmZTcyNTQ1ODk0MzM1ZjQyN2FjNzAyMDQ3OTgwNjhjYjg2YzVhNjAwYjQwYjQxNGVkZTIzNTkwYjQxZTExOTIzNzNkZjg0ZmUzIjoiYzZmMGRkZTI2NmNiNGEyNmQ0MWU4MjU5ZDMzNDk5Y2MiCisKK2dlbmVyaWMgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2htYWM6IlNIQTI1NiI6MTY6IjZkOTdiYjU4OTIyNDViZTIiOiIxM2MyYjM5MWQ1OWMwMjUyY2E1ZDIzMDJiZWFhZjg4YzRiY2Q3NzliYjUwNWFkOWExMjIwMDNkZmFlNGNjMTIzYWQyYmQwMzZmMjI1YzRmMDQwMDIxYTZiOWZiOGJkNmYwMjgxY2YyZTI2MzFhNzMyYmRjNzE2OTNjYzQyZWY2ZDUyYjZjNjkxMmE5ZWY3N2IzMjc0ZWI4NWFkN2Y5NjVhZTZlZDQ0YWMxNzIxOTYyYTg4NGVjN2FjZmI0NTM0YjE0ODhiMWMwYzQ1YWZhNGRhZThkYTFlYjdiMGE4OGEzMjQwMzY1ZDdlNGU3ZDgyNmFiYmRlOWY5MjAzZmQ5OWQ3IjoiMzE1ODhlMjQxYjAxNTMxOWE1YWI4YzQ1MjcyOTY0OTgiCisKK2dlbmVyaWMgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2htYWM6IlNIQTI1NiI6MTY6IjNjN2ZjOGE3MGI0OTAwN2EiOiI2MDAyNGU0MjhhMzljOGI4YmIyZTk1OTFiYWQ5ZGMyMTE1ZGZiZmQ3MTZiNmViN2FmMzBhNmViMzQ1NjBjYWNjYmJmYTQ3YjcxMGZhOGQ1MjNhY2E3MWU5ZTViYTEwZmMxZmViMWE0MzU1NmQ3MWYwN2VhNGYzMzQ5NmYwOTMwNDRlOGNhZjFkMDJiNzllNDZlYjEyODhkNTk2NGE3YTc0OTRmNmI5MjU3NGMzNTc4NGVlY2UwNTRjNjE1MTI4MWQ4MDgyMmY3ZDQ3YjgyMzFjMzVkMDdmNWNiNWNmNDMxMGRkYzg0NDg0NWEwMWM2YmZhYjUxNGMwNDhlY2NhZjlmIjoiMWM5OGM5NGEzMmJlYzlmMjUzYzIxMDcwZjgyZjg0MzgiCisKK2dlbmVyaWMgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2htYWM6IlNIQTI1NiI6MjQ6IjM2OWYzM2Y4NWI5MjdhMDciOiJhZThlMmE5NGNhMzg2ZDQ0OGNiYWNkYjBlOTA0MGFlM2NiMjk3YzI5NjM2MzA1MmNjMTU3NDU1ZGEyOWEwYzk1ODk3MzE1ZmMxMWUzZjEyYjgxZTI0MThkYTFlYzI4MGJjY2JjMDBlODQ3NTg0Y2U5ZDE0ZGVlYmE3YjNjOWI4ZGJhOTU4YjA0YmJhMzc1NTFmNmM5YmE5YzA2MGJlMWE0YjhjZjQzYWE2MmU1MDc4Yjc2YzY1MTJjNTYxOWI3MWE2YTdjZjU3MjcxODBlMWZmMTRmNWExYTNjMTY5MWJmOGI2ZWJhZDM2NWMxNTFlNThkNzQ5ZDU3YWRiM2E0OTg2IjoiNjBiOTAzODMyODY1MzNkMzA5ZGU0NjU5M2U2Y2UzOWZjNTFmYjAwYThkODgyNzhjIgorCitnZW5lcmljIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9obWFjOiJTSEEyNTYiOjI0OiJlNTE3OTY4NzU4MmI0ZGM0IjoiY2UxMDNiZGFjZGYzMmY2MTRmNjcyN2JjYjMxY2ExYzI4MjRhODUwZDAwZjU1ODViMDE2ZmIyMzRmZTFlZjJjZDY4N2YzMDJkM2M2YjczOGVkODlhMjQwNjBkNjVjMzY2NzVkMGQ5NjMwN2M3MmVmM2U4YTgzYmZhODQwMmUyMjZkZTlkNWQxNzI0YmE3NWM0ODc5YmY0MWE0YTQ2NWNlNjE4ODdkOWY0OWEzNDc1Nzg0OWI0OGJhZTgxYzI3ZWJlZDc2ZmFhZTJhZDY2OWJjYTA0NzQ3ZDQwOTE0OGQ0MDgxMjc3NmUwYWUyYzM5NWIzY2I5Yzg5OTgxY2U3MmQ1YyI6IjUwOTU4MWY2ODE2ZGY0YjhjYzlmMmNmNDJiN2NjNmU2YTVhMWUzNzVhMTZmMjQxMiIKKworZ2VuZXJpYyBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMjU2IjoyNDoiNjNjZWM2MjQ2YWViMWI2MSI6ImMxNzhkYjkwOGE0MDVmYTg4YWEyNTViOGNhZDIyYjQwNTcwMTY1ODVmMTM5ZWU5MzAzODhiMDgzZDg2MDYyZmEwYjNlYTFmMjNmOGE0M2JkMTFiZWU4NDY0YmNiZDE5YjVhYjlmNmE4MDM4ZDUyNDU1MTZmODI3NGQyMGM4ZWUzMDMzYTA3YjkwOGRhNTI4ZmEwMDM0M2JiNTk1ZGVlZDUwMGNhYjk3NDVjNGNiNjM5MWMyMzMwMGYwZDM1ODRiMDkwYjMzMjZjNGNmYTM0MjYyMGI3OGY5ZjViNGYyN2Y3MzA3ZWQ3NzA2NDNlYzE3NjRhZWFlM2RjZjFhM2VjNjkiOiI2NGYzZGQ4NjFiN2M3ZDI5ZmNlOWFlMGNlOWVkOTU0YjVkNzE0MTgwNmVlOWVlYzciCisKK2dlbmVyaWMgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTM4NCI6MzI6IjkxYTc0MDE4MTczODY5NDhjYTk1MmY5YTIwZWU1NWRjIjoiMmZlYTViOTEwMzVkNmQ1MDFmM2E4MzRmYTE3OGJmZjRlNjRiOTlhODQ1MDQzMmRhZmQzMmU0NDY2YjBlMWU3NzgxMTY2ZjhhNzNmN2UwMzZiM2IwODcwOTIwZjU1OWY0N2JkMTQwMGExYTkwNmU4NWUwZGNmMDBhNmMyNjg2MmU5MTQ4YjIzODA2NjgwZjI4NWYxZmU0ZjkzY2RhZjkyNGMxODFhOTY1NDY1NzM5YzE0ZjIyNjhjOGJlOGI0NzE4NDdjNzRiMjIyNTc3YTEzMTBiY2RjMWE4NWVmMTQ2OGFhMWEzZmQ0MDMxMjEzYzk3MzI0Yjc1MDljOTA1MGEzZCI6IjZkN2JlOTQ5MDA1OGNmNDEzY2MwOWZkMDQzYzIyNGMyZWM0ZmE3ODU5YjEzNzgzMDAwYTlhNTkzYzlmNzU4MzgiCisKK2dlbmVyaWMgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTM4NCI6MzI6ImQ2Y2FjMTk2NTcwNjFhYTkwYTZkYTExY2QyZTllYTQ3IjoiOWY0ODJlNDY1NTE3MzEzNWRmYWEyMmExMWJiYmU2YWYyNjNkYjQ4NzE2NDA2YzVhZWMxNjJiYTNjNGI0MWNhZDRmNWE5MTU1ODM3NzUyMTE5MWM3MzQzMTE4YmVlZTY1OTgyOTI5ODAyOTEzZDY3YjZkZTVjNGJkYzNkMjcyOTliZDcyMjIxOWQ1YWQyZWZhNWJkYjlmZjdiMjI5ZmM0YmJjM2Y2MDcxOTMyMGNmMmU3YTUxY2FkMTEzM2QyMWJhZDJkODA5MTliMTgzNmVmODI1MzA4YjdjNTFjNmI3Njc3YWM3ODJlMmJjMzAwMDdhZmJhMDY1NjgxY2JkZDIxNSI6ImYzZDVmM2MwMDgxNzUzMjFhYTdiMmVhMzc5ZWFhNGY4YjlkY2M2MGY4OTVlYzg5NDBiODE2MmY4MGE3ZGZlOWYiCisKK2dlbmVyaWMgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTM4NCI6MzI6ImUwNjM2NmFkMTQ5Yjg0NDJjZDRjMWFiZGRkZDBhZmRlIjoiMmQxNDBhMTk0YzAyYTU1OThmNjkxNzQ4MzQ2NzliODM3MTIzNGEwZDUwNTQ5MWYxYmQwM2UxMjhkZDkxYThiY2EyZmI4MTJlOWQ1ZGE3MTYxM2I1YjAwOTUyZWE3OGJmNDUwZDViNzU0N2RlYTc5MTM1OTI1MDg1YzdkM2U2ZjUyMDA5YzUxY2EzZDg4YzZjMDllOWQwNzRiMGVlMTEwNzM2ZTBlYzliNDc4YjkzZWZiMzRkN2JmMWM0MWI1NGRlY2VjNDNlYWIwNzdhM2FhNDk5OGVkZTUzZjY3YjRlYTM2YzI2Njc0NWY5NjQzZDUzNjBiZGM4MzM3YzcwZGFiZiI6ImMxOWM2N2VkYTZmZTI5ZjM2NjdiZWUxYzg5N2MzMzNjZTc2ODMwOTRhZTc3ZTg0YjRjMTYzNzhkMjkwODk1YTEiCisKK2dlbmVyaWMgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTM4NCI6NDg6IjAxYWM1OWY0MmY4YmI5MWQxYmQxMGZlNjk5MGQ3YTg3IjoiM2NhZjE4YzQ3NmVkZDU2MTVmMzQzYWM3YjdkM2E5ZGE5ZWZhZGU3NTU2NzJkNWJhNGI4YWU4YTc1MDU1MzllYTJjMTI0ZmY3NTVlYzA0NTdmYmU0OWU0MzQ4MGIzYzcxZTdmNDc0MmVjMzY5M2FhZDExNWQwMzlmOTAyMjJiMDMwZmRjOTQ0MDMxMzY5MTcxNmQ1MzAyMDA1ODA4YzA3NjI3NDgzYjkxNmZkZjYxOTgzMDYzYzJlYjEyNjhmMmRlZWVmNDJmYzc5MDMzNDQ1NmJjNmJhZDI1NmUzMWZjOTA2NmRlN2NjN2U0M2QxMzIxYjE4NjZkYjQ1ZTkwNTYyMiI6IjE5ODVmYTIxNjNhNTk0M2ZjNWQ5MmYxZmU4ODMxMjE1ZTdlOTFmMGJmZjUzMzJiYzcxM2EwNzJiZGIzYThmOWU1YzUxNTc0NjNhM2JmZWIzNjIzMTQxNmU2NTk3M2U2NCIKKworZ2VuZXJpYyBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBMzg0Ijo0ODoiZmQ3NGI5ZDllMTAyYTNhODBkZjFiYWYwY2IzNWJhY2UiOiIxYTA2ODkxNzU4NDgxM2QxNjg5Y2NiZDAzNzBjMjExNGQ1MzdjZGM4Y2M1MmJmNmRiMTZkNTUzNWY4ZjdkMWFkMGM4NTBhOWZhMGNmNjIzNzNmZmJmNzY0MmIxZjFlODE2NDAxMGQzNTA3MjFkNzk4ZDlmOTllOTcyNDgzMDM5OWMyZmNlMjYzNzdlODNkMzg4NDU2NzU0NTc4NjVjMDNkNGEwN2Q3NDFhNTA1ZWYwMjgzNDNlYjI5ZmQ0NmQwZjc2MWYzNzkyODg2OTk4YzFlNWMzMmFjM2JjN2U2ZjA4ZmFlZDE5NGIzNGYwNmVmZjRkNWQ0YTViNDJjNDgxZTBlIjoiYTk4MWVhZjVkZTNkNzhiMjBlYmQ0NDE0YTRlZGQwNjU3ZTM2NjdjZDgwOGEwZGJjNDMwY2Y3MjUyZjczYTViMjRlZmExMzYwMzkyMDdiZDU5ODA2ODk3NDU3ZDc0ZTBjIgorCitnZW5lcmljIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEEzODQiOjQ4OiI5ZmU3OTRmMGUyNmI2NjlmYTVmNjg4MzE0OTM3N2M2YyI6IjYwMTBjOTc0NWU4ZjFkNDRjZmRjOTllN2UwZmQ3OWJjNDI3MTk0NGMyZDFkODRkYmE1ODkwNzNkZmM0Y2E1ZWI5OGM1OTM1NmY2MGNkODdiZWYyOGFlYjgzYTgzMmJkZTMzOWIyMDg3ZGFmOTQyYWExZjY3ODc2YzVkNWVkMzM5MjRiZWQ0MTQzYmMxMmEyYmU1MzJjY2FmNjRkYWE3ZTJiYzNjODg3MmI5ODIzYjA1MzNiNmY1MTU5MTM1ZWZmZThjNjE1NDU1MzY5NzVkN2MzYTYxYmE3MzY1ZWMzNWYxNjViYzkyYjRkMTllYjkxNTZhZGUxN2RmYTFiYjQxNjEiOiI5MTVhZTYxZjg3NTQ2OThjMmI2ZWY5NjI5ZTkzNDQxZjg1NDFiZDQyNThhNWUwNTM3MmQxOTEzNmNmYWVmYzA0NzNiNDhkOTYxMTkyOTFiMzhlYjFhM2NiMTk4MmE5ODYiCisKK2dlbmVyaWMgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTUxMiI6MzI6ImM5NWExN2MwOTk0MGE2OTFlZDJkNjIxNTcxYjBlYjg0NGVkZTU1YTkiOiI5OWNkMjgyNjJlODFmMzQ4NzhjZGNlYmY0MTI4ZTA1ZTIwOThhNzAwOTI3OGE2NmY0Yzc4NTc4NGQwZTU2NzhmM2YyYjIyZjg2ZTk4MmQyNzNiNjI3M2EyMjJlYzYxNzUwYjQ1NTZkNzY2ZjE1NTBhN2FlZGZlODNmYWVkYmM0YmRhZTgzZmE1NjBkNjJkZjE3ZWI5MTRkMDVmZGFhNDg5NDA1NTFiYWM4MWQ3MDBmNWZjYTcxNDcyOTVlMzg2ZTgxMjBkNjY3NDJlYzY1YzZlZThkODlhOTIyMTdhMGY2MjY2ZDBkZGM2MGJiMjBlZjY3OWFlODI5OWM4NTAyYzJmIjoiNmJjMTM3OWQxNTY1NTlkZGVlMmVkNDIwZWE1ZDVjNWZmM2U0NTRhMTA1OWI3YmE3MmMzNTBlNzdiNmU5MzMzYyIKKworZ2VuZXJpYyBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBNTEyIjozMjoiM2IxMGI4ZmE3MTg4NDBkMWRlYThlOWZjMzE3NDc2YmNmNTU4NzVmZCI6ImYwNGY1YjcwNzNkN2QwMjc0ZTgzNTQ0MzNiMzkwMzA2YzU2MDc2MzJmNWY1ODljMTJlZGI2MmQ1NTY3M2FmZjIzNjZkMmU2YjI0ZGU3MzFhZGY5MmU2NTRiYWEzMGIxY2ZkNGEwNjk3ODhmNjVlYzFiOTliMDE1ZDkwNGQ4ODMyMTEwZGJkNzRlYWUzNWE4MTU2MmQxNGNlNDEzNmQ4MjBhZDBhNTVmZjU0ODliYTY3OGZiYmMxYzI3NjYzZWMxMzQ5ZDcwZTc0MGYwZTBlYzI3Y2ZiZTg5NzE4MTlmNDc4OWU0ODZiNTBhMmQ3MjcxZDc3ZTJhYWVhNTBkZTYyZmQiOiJmYzNjMzhjN2ExN2UzY2UwNmRiMDMzZjFjMTcyODY2ZjAxYTAwMDQ1ZGI1NWYyZTIzNGY3MWM4MjI2NGYyYmEyIgorCitnZW5lcmljIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEE1MTIiOjMyOiI0ODAzZDMxMTM5NDYwMGRjMWUwZDhmYzhjZWRlYjhiZGUzZmU3YzQyIjoiYTEwYzEyNWRkNzAyYTk3MTUzYWQ5MjNiYTVlOTg4OWNmYWMxYmExNjlkZTM3MGRlYmU1MWYyMzM3MzVhYTZlZmZjYzk3ODVjNGI1YzdlNDhjNDc3ZGM1YzQxMWFlNmE5NTkxMTg1ODRlMjZhZGM5NGI0MmMyYjI5YjA0NmYzY2YwMWM2NWIyNGEyNGJkMmU2MjBiZGY2NTBhMjNiYjRhNzI2NTViMTEwMGQ3Y2U5YTRkYWI2OTdjNjM3OTc1NGI0Mzk2YzgyNWRlNGI5ZWI3M2YyZTZhNmMwZDAzNTNiYmRlYWY3MDY2MTI4MDBlMTM3Yjg1OGZkYjMwZjMzMTFjNiI6IjdjZDgyMzZjNTUxMDJlNjM4NWY1MjI3OTUwNmRmNmZjYzM4OGFiNzUwOTJkYTIxMzk1Y2UxNGE4MmIyMDJmZmEiCisKK2dlbmVyaWMgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2htYWM6IlNIQTUxMiI6NDg6ImFlYjJmM2I5NzdmYTZjOGU3MWUwN2M1YTVjNzRmZjU4MTY2ZGUwOTIiOiIyMjQ1NzM1NWRjNzYwOTVhYmQ0Njg0NmI0MWNmZTQ5YTA2Y2U0MmFjODg1N2I0NzAyZmM3NzE1MDhkZmIzNjI2ZTBiZmU4NTFkZjg5N2EwN2IzNjgxMWVjNDMzNzY2ZTRiNDE2NmMyNjMwMWIzNDkzZTc0NDBkNDU1NGIwZWY2YWMyMGYxYTUzMGU1OGZhYzhhZWJhNGU5ZmYyZDQ4OThkOGEyODc4M2I0OWNkMjY5YzI5NjVmZDdmOGU0ZjJkNjBjZjFlNTI4NGYyNDk1MTQ1YjcyMzgyYWFkOTBlMTUzYTkwZWNhZTEyNWFkNzUzMzZmYjEyODgyNWMyM2ZiOGIwIjoiZmEzOWJkOGZjYzNiZmEyMThmOWRlYTVkM2IyY2UxMGE3NjE5ZTMxNjc4YTU2ZDhhOWQ5MjdiMWZlNzAzYjEyNWFmNDQ1ZGViZTlhODlhMDdkYjYxOTRkMjdiNDRkODVhIgorCitnZW5lcmljIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9obWFjOiJTSEE1MTIiOjQ4OiI0Mjg1ZDNkNzc0NGRhNTI3NzViYjQ0Y2E0MzZhMzE1NGY3OTgwMzA5IjoiMjA4ZjBiNmYyZGUyZTVhYTVkZjExOTI3ZGRjNmRmNDg1ZWRjMTE5MzE4MWM0ODRkMGYwYTQzNGE5NTQxODgwMzEwMWQ0ZGU5ZmRiNzk4ZjkzNTE2YTY5MTZmYTM4YTgyMDdkZTE2NjZmZTUwZmUzNDQxYzAzYjExMmVhYWFlNjk1NGVkMDYzZjdhYzRlM2MxZTNmNzNiMjBkMTUzZmU5ZTQ4NTdmNWU5MTQzMGYwYTcwZWU4MjA1MjlhZGFjMjQ2NzQ2OWZkMThhZGYxMGUyYWYwZmVhMjdjMGFiYzgzYzVhOWFmNzdjMzY0YTQ2NmNmZmNlOGJhYjRlMmI3MGJjMSI6ImZlNzYwM2YyMDViMjc3NGZlMGYxNGVjZmEzZTMzOGU5MDYwOGE4MDZkMTFjYTQ1OWRmZjVjZTM2YjFiMjY0ZWNkM2FmNWYwNDkyYTc1MjFkOGRhMzEwMmJhMjA5MjdhNSIKKworZ2VuZXJpYyBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfaG1hYzoiU0hBNTEyIjo0ODoiOGFiNzgzZDVhY2YzMmVmYTBkOWMwYTIxYWJjZTk1NWU5NjYzMGQ4OSI6IjE3MzcxZTAxM2RjZTgzOTk2M2Q1NDQxOGU5N2JlNGJkOWZhM2NiMmEzNjhhNTIyMGY1YWExYjhhYWRkZmEzYmRlZmM5MWFmZTdjNzE3MjQ0ZmQyZmI2NDBmNWNiOWQ5YmYzZTI1ZjdmMGM4YmM3NTg4ODNiODlkY2RjZTZkNzQ5ZDk2NzJmZWQyMjIyNzdlY2UzZTg0YjNlYzAxYjk2ZjcwYzEyNWZjYjNjYmVlNmQxOWI4ZWYwODczZjkxNWYxNzNiZGIwNWQ4MTYyOWJhMTg3Y2M4YWMxOTM0YjJmNzU5NTJmYjc2MTZhZTZiZDgxMjk0NmRmNjk0YmQyNzYzYWYiOiI5YWM3Y2E4ZDFhZWZjMTY2YjA0NmU0Y2Y3NjAyZWJlMTgxYTBlNTA1NTQ3NGJmZjViMzQyMTA2NzMxZGEwZDdlNDhlNGQ4N2JjMGE2ZjA1ODcxNTc0Mjg5YTFiMDk5ZjgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIEZJUFMtMTk4YSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MjA6IjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmIjoiNTM2MTZkNzA2YzY1MjAyMzMxIjoiNGY0Y2EzZDVkNjhiYTdjYzBhMTIwOGM5YzYxZTljNWRhMDQwM2MwYSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgRklQUy0xOThhICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9obWFjX211bHRpOiJTSEExIjoyMDoiMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MyI6IjUzNjE2ZDcwNmM2NTIwMjMzMiI6IjA5MjJkMzQwNWZhYTNkMTk0ZjgyYTQ1ODMwNzM3ZDVjYzZjNzVkMjQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIEZJUFMtMTk4YSAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MjA6IjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzIjoiNTM2MTZkNzA2YzY1MjAyMzMzIjoiYmNmNDFlYWI4YmIyZDgwMmYzZDA1Y2FmN2NiMDkyZWNmOGQxYTNhYSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTEgVGVzdCBWZWN0b3IgRklQUy0xOThhICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9obWFjX211bHRpOiJTSEExIjoxMjoiNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTAiOiI1MzYxNmQ3MDZjNjUyMDIzMzQiOiI5ZWE4ODZlZmUyNjhkYmVjY2U0MjBjNzUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6IjdiMTBmNDEyNGIxNWM4MmUiOiIyN2RjYjViMWRhZjYwY2ZkM2UyZjczZDRkNjRjYTljNjg0ZjhiZjcxZmM2ODJhNDY3OTNiMTc5MGFmYTRmZWIxMDBjYTdhYWZmMjZmNThmMGUxZDBlZDQyZjFjZGFkMWY0NzRhZmEyZTc5ZDUzYTBjNDI4OTJjNGQ3YjMyN2NiZTQ2YjI5NWVkOGRhM2I2ZWNhYjNkNDg1MTY4N2E2ZjgxMmI3OWRmMmY2YjIwZjExZjY3MDZmNTMwMTc5MGNhOTk2MjVhYWQ3MzkxZDg0Zjc4MDQzZDJhMGEyMzliMTQ3Nzk4NGMxNTdiYmM5Mjc2MDY0ZTdhMWE0MDZiMDYxMmNhIjoiNGVhZDEyYzJmZTNkNmVhNDNhY2IiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6IjRmZTlmYjkwMjE3MmEyMWIiOiI0Y2ViM2E3YzEzNjU5YzIyZmU1MTEzNGYwM2RjZTRjMjM5ZDE4MWI2M2M2YjBiNTlkMzY3MTU3ZmQwNWNhYjk4Mzg0ZjkyZGZhNDgyZDJkNWU3OGU3MmVlZjFiMTgzOGFmNDY5NjAyNmM1NDIzM2Q0ODRlY2JiZTg3ZjkwNGRmNTU0NjQxOWY4NTY3ZWFmZDIzMmU2YzJmY2QzZWUyYjc2ODJjNjMwMDA1MjRiMDc4ZGJiMjA5NmY1ODUwMDdkZWFlNzUyNTYyZGYxZmUzYjAxMjc4MDg5ZTE2ZjNiZTQ2ZTJkMGY3Y2FiYWMyZDhlNmNjMDJhMmQwY2E5NTM0MjVmIjoiNTY0NDI4YTY3YmUxOTI0YjU3OTMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6ImQxZjAxNDU1Zjc4YzRmYjQiOiIwMGQ0MGY2N2I1NzkxNGJlYzQ1NmEzZTMyMDFlZjE0NjRiZTMxOWE4ZDE4OGMwMmUxNTdhZjRiNTRmOWI1YTY2ZDY3Zjg5OGE5YmRiYjE5ZmY2M2E4MGFiYTZmMjQ2ZDAxMzU3NTcyMWQ1MmViMWI0N2E2NWRlZjg4NDAxMWM0OWIyNTdiY2MyODE3ZmM4NTNmMTA2ZTgxMzhjZTM4NmQ3YTVhYzMxMDNkZTBhM2ZhMGVkNmJiN2FmOWZmNjZlYmQxY2M0NmZiODZlNGRhMDAxM2QyMGEzYzJkY2Q4ZmI4MjhhNGI3MGY3ZjEwNGI0MWJmM2Y0NDY4MmE2NjQ5N2VhIjoiNTZhNjY1YTdjZGZlNjEwZjlmYzUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6IjRlNWVmNzdmZGYwMzNhNWIiOiJlNTkzMjY0NjRlMzIwMWQxOTVlMjlmMmEzNDQ2ZWMxYjFjOWZmMzExNTRlMmE0ZDBlNDBlZDQ2NmYxYmM4NTVkMjlmNzY4MzU2MjRmYTAxMjdkMjljOWIxOTE1OTM5YTA0NmYzODVhZjdlNWQ0N2EyM2JhOTFmMjhiZDIyZjgxMWVhMjU4ZGJiZjMzMzJiY2QzNTQzYjgyODVkNWRmNDFiZDA2NGZmZDY0YTM0MWMyMmM0ZWRiNDRmOWM4ZDllNmRmMGM1OWRiZjRhMDUyYTZjODNkYTc0NzhlMTc5YTZmMzgzOWM2ODcwZmY4Y2E4Yjk0OTdmOWFjMWQ3MjVmZGRhIjoiOTgxYzBhN2E4NDIzYjYzYThmYTYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6ImJjZDlmZjhhYTYwYmUyYmUiOiI1MWJlNGQwZWIzN2JhYjcxNGY5MmUxOWU5ZDcwMzkwNjU1YjM2M2U4Y2QzNDZhNzQ4MjQ1ZTczMWY0Mzc3NTljYjgyMDY0MTJjOGRhYjJlZjFkNGYzNmY4ODBmNDFmZjY5ZDk0OWRhNDU5NGZkZWNiNjVlMjNjYWMxMzI5YjU5ZTY5ZTI5YmY4NzViMzhjMzFkZjZmYTU0NmM1OTVmMzVjYzIxOTJhYTc1MDY3OWE4YTUxYTY1ZTAwZTgzOWQ3M2E4ZDhjNTk4YTYxMGQyMzdmYmU3ODk1NTIxMzU4OWQ4MGVmY2I3M2I5NWI4NTg2Zjk2ZDE3YjZmNTFhNzFjM2I4IjoiODQ2MzNmOWY1MDQwYzg5NzE0NzgiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6IjRhNjYxYmNlNmVkODZkMjEiOiI1ZmY2Yzc0NGYxYWFiMWJjMjk2OTdkNzFmNjc1NDFiOGIzY2VjM2M3MDc5MTgzYjEwYTgzZmI5OGE5ZWUyNTFkNGJhYzNlMWNiNTgxY2E5NzJhYWVkOGVmZDdjMjg3NWE2ZmI0Yzk5MTEzMmY2N2M5NzQyZDQ1ZTUzYmM3ZThlYWE5NGIzNWIzN2E5MDdiZTYxMDg2YjQyNmNkMTEwODhhYzExODkzNGU4NWQ5NjhjOTY2N2ZkNjlmYzZmNmVhMzhjMGZlMzQ3MTBiN2VjZTkxMjExYjliN2VhMDBhY2QzMWYwMjJhYTY3MjYzNjhmOTkyOGExMzUyZjEyMjIzM2YxIjoiNzM5ZGY1OTM1M2FjNjY5NGU1NWUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaG1hY19tdWx0aToiU0hBMSI6MTA6IjEyODdlMTU2NWE1N2I1NDciOiIzOTBmZmRjY2M2MTcxYzExNTY4ZDg1YjhmOTEzZTAxOWJmNGNkOTgyY2E5Y2QyMWVhNzMwZDQxYmRmM2ZjYzBiYzg4ZmY0OGJhMTNhOGYyM2RlYjJkOTZlYzEwMzNlN2IyYTU4Y2E3MmIwYzFlMTdiZjAzMzMwZGIyNWQxZTM2MGZhNjkxODAwOWM0Mjk0YmQxMjE1YjVjY2QxNTlhOGY1OGJjM2RjM2Q0OTBlYjdjM2I5Zjg4N2U4Yzk4ZGJiYjI3NGE3NTM3M2RjYjY5NWE1OWFiZDAyMTk1MjlkODg1MThhOTZmOTJhYmMwYmJjYmRhOTg1YzM4OGYxZmJiY2M5IjoiZDc4ZGRmMDgwNzdjN2Q5ZTJiYTYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTIyNCI6MTQ6ImUwNTVlYjc1NjY5N2VlNTczZmQzMjE0ODExYTlmN2ZhIjoiMzg3NTg0NzAxMmVlNDJmZTU0YTAwMjdiZGYzOGNjYTcwMjFiODNhMmVkMDUwM2FmNjllZjZjMzdjNjM3YmMxMTE0ZmJhNDAwOTZjNTk0N2Q3MzZlMTliN2FmM2M2OGQ5NWE0ZTNiOGIwNzNhZGJiYjgwZjQ3ZTlkYjhmMmQ0ZjAwMThkZGQ4NDdmYWJmZGY5ZGQ5YjUyYzkzZTQwNDU4OTc3NzI1ZjZiN2JhMTVmMDgxNmJiODk1Y2RmNTA0MDEyNjhmNWQ3MDJiN2U2YTVmOWZhZWY1N2I4NzY4YzhhM2ZjMTRmOWE0YjMxODJiNDFkOTQwZTMzN2QyMTliMjlmZiI6IjQwYTQ1MzEzMzM2MWNjNDhkYTExYmFmNjE2ZWUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTIyNCI6MTQ6Ijg4ZTUyNThiNTViMTYyMzM4NWViOTYzMmZhN2M1N2Q2IjoiYWRhNzZiYjYwNGJlMTQzMjY1NTE3MDFjZjMwZTQ4YTY1ZWVlODBiNDRmMGI5ZDRhMDdiMTg0NDU0M2I3ODQ0YTYyMTA5N2ZkYzk5ZGU1NzM4NzQ1OGFlOTM1NDg5OWI2MjBkMDYxN2VhYmNhZWZhOWVlZjNkNDEzYTMzNjI4MDU0MzM1Y2U2NTZjMjZmYTI5ODZlMGYxMTFhNjM1MTA5NmIyODMxMDFlYzc4Njg4NzFkNzcwYjM3MDk3M2M3NDA1OTgzZjk3NTZiMzAwNWEzZWFiNDkyY2ZkMGU3ZWI0MmU1YzJlMTVmYTZiZTg3MThjMGE1MGFjYzRlNTcxNzIzMCI6IjgxYzc4M2FmNTM4MDE1Y2VmM2M2MDA5NWRmNTMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTIyNCI6MTQ6Ijg1ZDQwMmQ4MjIxMTRkMzFhYmY3NTUyNmUyNTM4NzA1IjoiODAyMGQ4ZDk4Y2MyZTIyOThiMzI4NzljNTFjNzUxZTFkZDU1NThmZTJlYWJiOGYxNTg2MDQyOTdkNmQwNzJjZTIyNjFhMWQ2ODMwYjdjZmUyNjE3YjU3YzcxMjZmOTljOTQ3NjIxMWQ2MTYxYWNkNzVkMjY2ZGEyMTdlYzgxNzRiODA0ODRjOWRjNmYwNDQ4YTBhMDM2YTNmYzgyZThiZjU0YmRiNzE1NDkzNjgyNThkNWQ0MWY1Nzk3OGE0YzI2NmI5MmU4NzgzZWY2NjM1MDIxNTU3M2Q5OWJlNDA4OTE0NGIzODNhZDhmMzIyMmJhZThmM2JmODBmZmIxYmIyYiI6IjJhYTAzNDBhYzlkZWFmZTNiZTM4MTI5ZGFjYTAiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTIyNCI6MTQ6IjU0NWM2ZWVjYzVlZTQ2ZmExN2M1OWY5MWE5NGY4MWFlIjoiOGZiN2YzNTY1NTkzMTcwMTUyZGRiMjAyMTg3NDc4NGU5NTE5NzdjZmRkMjJmOGI3MmE3MmE2MTMyMGE4ZjJhMzU2OTdiNWU5MTNmNzE3ODA1NTU5YjFhZjE4NjFlZTNlZDQyZmI3ODg0ODFlNGZkMjc2YjE3YmRiZWZjYWU3YjQ1MDFkYzVkMjBkZTViNzYyNmRkNWVmZGNkNjUyOTRkYjRiZGY2ODJjMzNkOWE5MjU1YzY0MzUzODNmYTVmMWM4ODYzMjZhM2FjYmM2YmQ1MGEzM2FiNWIyZGJiMDM0Y2UwMTEyZDRlMjI2YmJjZDU3ZTM3MzFhNTE5YWExZDc4NCI6IjNlYjU2NmVhYzU0YzRhM2E5ZWYwOTI0NjlmMjQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTIyNCI6MTQ6IjQ0NjZhYjRkYzQzODg0MWE5NzUwYzdmMTczZGZmMDJlIjoiMjUzNGMxMWM3OGM5OWNmZmFlYzhmNzIyZjA0YWRjNzA0NWM3MzI0ZDU4Y2U5OGUzN2NmYTk0YjZlZDIxZWQ3ZjU4Y2U1NTM3OWVmMjRiNzJkNmQ2NDBlZTkxNTRmOTZjNjE0NzM0YmU5YzQwOGUyMjVkN2JhNGNlY2MxMTc5Y2M5ZjZlMTgwOGUxMDY3YWE4ZjI0NGE5OWJkMGMzMjY3NTk0YzE4ODdhNDBkMTY3ZjhiN2NmNzhkYjBkMTlmOTdiMDFmYzUwYjhjODZkZWY0OTBkZmE3YTUxMzUwMDJjMzNlNzFkNzdhOGNjZThlYTBmOTNlMDU4MDQzOWEzMzczMyI6IjU5ZjQ0YTliYmVkNDg3NWI4OTJkMjJkNmI1YWIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTIyNCI6Mjg6IjBlM2RkOWJiNWU0Y2YwZjA5YTRjMTE2MDBhZjU2ZDhkIjoiZjQ1ODlmYTc2YzMyOGVhMjVjZjhiYWU1ODIwMjZiYTQwYTU5ZDQ1YTU0NmZmMzFjZjgwZWI4MjYwODhmNjliYjk1NGM0NTJjNzQ1ODY4MzY0MTZkZWU5MGE1MjU1YmM1ZDU2ZDNiNDA1YjM3MDVhNTE5NzA0NTY4OGIzMmZhOTg0YzNhM2RmYmRjOWMyNDYwYTBiNWU2MzEyYTYyNDA0OGJiNmYxNzAzMDY1MzVlOWIzNzFhM2FiMTM0YTI2NDJhMjMwYWQwM2QyYzY4OGNjYTgwYmFlYWVlOWEyMGUxZDRjNTQ4YjFjZWRlMjljNmE0NWJmNGRmMmM4YzQ3NmYxYSI6IjEyMTc1YjkzZTNkYTRjNTgyMTcxNDVlNGRjMGExY2YxNDJmYWI5MzE5YmI1MDFlMDM3YjM1MGJhIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyMjQiOjI4OiJjZGE1MTg3YjBjNWRjYjBmOGU1YThiZWVkMjMwNjU4NCI6IjkwMTFhZTI5YjQ0YzQ5YjM0NzQ4N2NlOTcyOTY1ZjE2YWRlM2MxNWJlMDg1NmNlOWM4NTNhOTczOWRiYTA3ZTRmMjBkNTk0ZGRjMWRmZTIxNTYwYTY1YTRlNDU4Y2ZhMTc3NDU1NzViOTE1YTMwYzdhOTQxMmZmOGQxZDY4OWRiOTY4MGRkMjQyOGMyNzU4OGJiMGRjOTJkMmNkOTQ0NWZlOGY0NGI4NDBhMTk3YzUyYzNjNDMzM2ZmZjQ1NTMzOTQ1MTM0Mzk4ZGY2NDM2NTEzY2ZhYjA2YzkyNDA0NmI4Yzc5NWE1YmQ5MmU4ZDVmMmRlODViZjMwNmYyZWVkNjciOiI0YWFiYTkyYjQwZTJhNjAwZmVhYjE3NmViOWIyOTJkODE0ODY0MTk1YzAzMzQyYWFkNmY2N2YwOCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaG1hY19tdWx0aToiU0hBMjU2IjoxNjoiY2RmZmQzNGU2YjE2ZmRjMCI6ImQ4M2U3OGI5OWFiNjE3MDk2MDg5NzJiMzZlNzZhNTc1NjAzZGI3NDIyNjljYzVkZDRlN2Q1Y2E3ODE2ZTI2YjY1MTUxYzkyNjMyNTUwY2I0YzUyNTNjODg1ZDVmY2U1M2JjNDc0NTlhMWRiZDU2NTI3ODZjNGFhYzAxNDVhNTMyZjEyYzA1MTM4YWYwNGNiYjU1ODEwMWE3YWY1ZGY0Nzg4MzRjMjE0NjU5NGRkNzM2OTBkMDFhNGZlNzI1NDU4OTQzMzVmNDI3YWM3MDIwNDc5ODA2OGNiODZjNWE2MDBiNDBiNDE0ZWRlMjM1OTBiNDFlMTE5MjM3M2RmODRmZTMiOiJjNmYwZGRlMjY2Y2I0YTI2ZDQxZTgyNTlkMzM0OTljYyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaG1hY19tdWx0aToiU0hBMjU2IjoxNjoiNmQ5N2JiNTg5MjI0NWJlMiI6IjEzYzJiMzkxZDU5YzAyNTJjYTVkMjMwMmJlYWFmODhjNGJjZDc3OWJiNTA1YWQ5YTEyMjAwM2RmYWU0Y2MxMjNhZDJiZDAzNmYyMjVjNGYwNDAwMjFhNmI5ZmI4YmQ2ZjAyODFjZjJlMjYzMWE3MzJiZGM3MTY5M2NjNDJlZjZkNTJiNmM2OTEyYTllZjc3YjMyNzRlYjg1YWQ3Zjk2NWFlNmVkNDRhYzE3MjE5NjJhODg0ZWM3YWNmYjQ1MzRiMTQ4OGIxYzBjNDVhZmE0ZGFlOGRhMWViN2IwYTg4YTMyNDAzNjVkN2U0ZTdkODI2YWJiZGU5ZjkyMDNmZDk5ZDciOiIzMTU4OGUyNDFiMDE1MzE5YTVhYjhjNDUyNzI5NjQ5OCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaG1hY19tdWx0aToiU0hBMjU2IjoxNjoiM2M3ZmM4YTcwYjQ5MDA3YSI6IjYwMDI0ZTQyOGEzOWM4YjhiYjJlOTU5MWJhZDlkYzIxMTVkZmJmZDcxNmI2ZWI3YWYzMGE2ZWIzNDU2MGNhY2NiYmZhNDdiNzEwZmE4ZDUyM2FjYTcxZTllNWJhMTBmYzFmZWIxYTQzNTU2ZDcxZjA3ZWE0ZjMzNDk2ZjA5MzA0NGU4Y2FmMWQwMmI3OWU0NmViMTI4OGQ1OTY0YTdhNzQ5NGY2YjkyNTc0YzM1Nzg0ZWVjZTA1NGM2MTUxMjgxZDgwODIyZjdkNDdiODIzMWMzNWQwN2Y1Y2I1Y2Y0MzEwZGRjODQ0ODQ1YTAxYzZiZmFiNTE0YzA0OGVjY2FmOWYiOiIxYzk4Yzk0YTMyYmVjOWYyNTNjMjEwNzBmODJmODQzOCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaG1hY19tdWx0aToiU0hBMjU2IjoyNDoiMzY5ZjMzZjg1YjkyN2EwNyI6ImFlOGUyYTk0Y2EzODZkNDQ4Y2JhY2RiMGU5MDQwYWUzY2IyOTdjMjk2MzYzMDUyY2MxNTc0NTVkYTI5YTBjOTU4OTczMTVmYzExZTNmMTJiODFlMjQxOGRhMWVjMjgwYmNjYmMwMGU4NDc1ODRjZTlkMTRkZWViYTdiM2M5YjhkYmE5NThiMDRiYmEzNzU1MWY2YzliYTljMDYwYmUxYTRiOGNmNDNhYTYyZTUwNzhiNzZjNjUxMmM1NjE5YjcxYTZhN2NmNTcyNzE4MGUxZmYxNGY1YTFhM2MxNjkxYmY4YjZlYmFkMzY1YzE1MWU1OGQ3NDlkNTdhZGIzYTQ5ODYiOiI2MGI5MDM4MzI4NjUzM2QzMDlkZTQ2NTkzZTZjZTM5ZmM1MWZiMDBhOGQ4ODI3OGMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2htYWNfbXVsdGk6IlNIQTI1NiI6MjQ6ImU1MTc5Njg3NTgyYjRkYzQiOiJjZTEwM2JkYWNkZjMyZjYxNGY2NzI3YmNiMzFjYTFjMjgyNGE4NTBkMDBmNTU4NWIwMTZmYjIzNGZlMWVmMmNkNjg3ZjMwMmQzYzZiNzM4ZWQ4OWEyNDA2MGQ2NWMzNjY3NWQwZDk2MzA3YzcyZWYzZThhODNiZmE4NDAyZTIyNmRlOWQ1ZDE3MjRiYTc1YzQ4NzliZjQxYTRhNDY1Y2U2MTg4N2Q5ZjQ5YTM0NzU3ODQ5YjQ4YmFlODFjMjdlYmVkNzZmYWFlMmFkNjY5YmNhMDQ3NDdkNDA5MTQ4ZDQwODEyNzc2ZTBhZTJjMzk1YjNjYjljODk5ODFjZTcyZDVjIjoiNTA5NTgxZjY4MTZkZjRiOGNjOWYyY2Y0MmI3Y2M2ZTZhNWExZTM3NWExNmYyNDEyIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9obWFjX211bHRpOiJTSEEyNTYiOjI0OiI2M2NlYzYyNDZhZWIxYjYxIjoiYzE3OGRiOTA4YTQwNWZhODhhYTI1NWI4Y2FkMjJiNDA1NzAxNjU4NWYxMzllZTkzMDM4OGIwODNkODYwNjJmYTBiM2VhMWYyM2Y4YTQzYmQxMWJlZTg0NjRiY2JkMTliNWFiOWY2YTgwMzhkNTI0NTUxNmY4Mjc0ZDIwYzhlZTMwMzNhMDdiOTA4ZGE1MjhmYTAwMzQzYmI1OTVkZWVkNTAwY2FiOTc0NWM0Y2I2MzkxYzIzMzAwZjBkMzU4NGIwOTBiMzMyNmM0Y2ZhMzQyNjIwYjc4ZjlmNWI0ZjI3ZjczMDdlZDc3MDY0M2VjMTc2NGFlYWUzZGNmMWEzZWM2OSI6IjY0ZjNkZDg2MWI3YzdkMjlmY2U5YWUwY2U5ZWQ5NTRiNWQ3MTQxODA2ZWU5ZWVjNyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBMzg0IjozMjoiOTFhNzQwMTgxNzM4Njk0OGNhOTUyZjlhMjBlZTU1ZGMiOiIyZmVhNWI5MTAzNWQ2ZDUwMWYzYTgzNGZhMTc4YmZmNGU2NGI5OWE4NDUwNDMyZGFmZDMyZTQ0NjZiMGUxZTc3ODExNjZmOGE3M2Y3ZTAzNmIzYjA4NzA5MjBmNTU5ZjQ3YmQxNDAwYTFhOTA2ZTg1ZTBkY2YwMGE2YzI2ODYyZTkxNDhiMjM4MDY2ODBmMjg1ZjFmZTRmOTNjZGFmOTI0YzE4MWE5NjU0NjU3MzljMTRmMjI2OGM4YmU4YjQ3MTg0N2M3NGIyMjI1NzdhMTMxMGJjZGMxYTg1ZWYxNDY4YWExYTNmZDQwMzEyMTNjOTczMjRiNzUwOWM5MDUwYTNkIjoiNmQ3YmU5NDkwMDU4Y2Y0MTNjYzA5ZmQwNDNjMjI0YzJlYzRmYTc4NTliMTM3ODMwMDBhOWE1OTNjOWY3NTgzOCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBMzg0IjozMjoiZDZjYWMxOTY1NzA2MWFhOTBhNmRhMTFjZDJlOWVhNDciOiI5ZjQ4MmU0NjU1MTczMTM1ZGZhYTIyYTExYmJiZTZhZjI2M2RiNDg3MTY0MDZjNWFlYzE2MmJhM2M0YjQxY2FkNGY1YTkxNTU4Mzc3NTIxMTkxYzczNDMxMThiZWVlNjU5ODI5Mjk4MDI5MTNkNjdiNmRlNWM0YmRjM2QyNzI5OWJkNzIyMjE5ZDVhZDJlZmE1YmRiOWZmN2IyMjlmYzRiYmMzZjYwNzE5MzIwY2YyZTdhNTFjYWQxMTMzZDIxYmFkMmQ4MDkxOWIxODM2ZWY4MjUzMDhiN2M1MWM2Yjc2NzdhYzc4MmUyYmMzMDAwN2FmYmEwNjU2ODFjYmRkMjE1IjoiZjNkNWYzYzAwODE3NTMyMWFhN2IyZWEzNzllYWE0ZjhiOWRjYzYwZjg5NWVjODk0MGI4MTYyZjgwYTdkZmU5ZiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBMzg0IjozMjoiZTA2MzY2YWQxNDliODQ0MmNkNGMxYWJkZGRkMGFmZGUiOiIyZDE0MGExOTRjMDJhNTU5OGY2OTE3NDgzNDY3OWI4MzcxMjM0YTBkNTA1NDkxZjFiZDAzZTEyOGRkOTFhOGJjYTJmYjgxMmU5ZDVkYTcxNjEzYjViMDA5NTJlYTc4YmY0NTBkNWI3NTQ3ZGVhNzkxMzU5MjUwODVjN2QzZTZmNTIwMDljNTFjYTNkODhjNmMwOWU5ZDA3NGIwZWUxMTA3MzZlMGVjOWI0NzhiOTNlZmIzNGQ3YmYxYzQxYjU0ZGVjZWM0M2VhYjA3N2EzYWE0OTk4ZWRlNTNmNjdiNGVhMzZjMjY2NzQ1Zjk2NDNkNTM2MGJkYzgzMzdjNzBkYWJmIjoiYzE5YzY3ZWRhNmZlMjlmMzY2N2JlZTFjODk3YzMzM2NlNzY4MzA5NGFlNzdlODRiNGMxNjM3OGQyOTA4OTVhMSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBMzg0Ijo0ODoiMDFhYzU5ZjQyZjhiYjkxZDFiZDEwZmU2OTkwZDdhODciOiIzY2FmMThjNDc2ZWRkNTYxNWYzNDNhYzdiN2QzYTlkYTllZmFkZTc1NTY3MmQ1YmE0YjhhZThhNzUwNTUzOWVhMmMxMjRmZjc1NWVjMDQ1N2ZiZTQ5ZTQzNDgwYjNjNzFlN2Y0NzQyZWMzNjkzYWFkMTE1ZDAzOWY5MDIyMmIwMzBmZGM5NDQwMzEzNjkxNzE2ZDUzMDIwMDU4MDhjMDc2Mjc0ODNiOTE2ZmRmNjE5ODMwNjNjMmViMTI2OGYyZGVlZWY0MmZjNzkwMzM0NDU2YmM2YmFkMjU2ZTMxZmM5MDY2ZGU3Y2M3ZTQzZDEzMjFiMTg2NmRiNDVlOTA1NjIyIjoiMTk4NWZhMjE2M2E1OTQzZmM1ZDkyZjFmZTg4MzEyMTVlN2U5MWYwYmZmNTMzMmJjNzEzYTA3MmJkYjNhOGY5ZTVjNTE1NzQ2M2EzYmZlYjM2MjMxNDE2ZTY1OTczZTY0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9obWFjX211bHRpOiJTSEEzODQiOjQ4OiJmZDc0YjlkOWUxMDJhM2E4MGRmMWJhZjBjYjM1YmFjZSI6IjFhMDY4OTE3NTg0ODEzZDE2ODljY2JkMDM3MGMyMTE0ZDUzN2NkYzhjYzUyYmY2ZGIxNmQ1NTM1ZjhmN2QxYWQwYzg1MGE5ZmEwY2Y2MjM3M2ZmYmY3NjQyYjFmMWU4MTY0MDEwZDM1MDcyMWQ3OThkOWY5OWU5NzI0ODMwMzk5YzJmY2UyNjM3N2U4M2QzODg0NTY3NTQ1Nzg2NWMwM2Q0YTA3ZDc0MWE1MDVlZjAyODM0M2ViMjlmZDQ2ZDBmNzYxZjM3OTI4ODY5OThjMWU1YzMyYWMzYmM3ZTZmMDhmYWVkMTk0YjM0ZjA2ZWZmNGQ1ZDRhNWI0MmM0ODFlMGUiOiJhOTgxZWFmNWRlM2Q3OGIyMGViZDQ0MTRhNGVkZDA2NTdlMzY2N2NkODA4YTBkYmM0MzBjZjcyNTJmNzNhNWIyNGVmYTEzNjAzOTIwN2JkNTk4MDY4OTc0NTdkNzRlMGMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTM4NCI6NDg6IjlmZTc5NGYwZTI2YjY2OWZhNWY2ODgzMTQ5Mzc3YzZjIjoiNjAxMGM5NzQ1ZThmMWQ0NGNmZGM5OWU3ZTBmZDc5YmM0MjcxOTQ0YzJkMWQ4NGRiYTU4OTA3M2RmYzRjYTVlYjk4YzU5MzU2ZjYwY2Q4N2JlZjI4YWViODNhODMyYmRlMzM5YjIwODdkYWY5NDJhYTFmNjc4NzZjNWQ1ZWQzMzkyNGJlZDQxNDNiYzEyYTJiZTUzMmNjYWY2NGRhYTdlMmJjM2M4ODcyYjk4MjNiMDUzM2I2ZjUxNTkxMzVlZmZlOGM2MTU0NTUzNjk3NWQ3YzNhNjFiYTczNjVlYzM1ZjE2NWJjOTJiNGQxOWViOTE1NmFkZTE3ZGZhMWJiNDE2MSI6IjkxNWFlNjFmODc1NDY5OGMyYjZlZjk2MjllOTM0NDFmODU0MWJkNDI1OGE1ZTA1MzcyZDE5MTM2Y2ZhZWZjMDQ3M2I0OGQ5NjExOTI5MWIzOGViMWEzY2IxOTgyYTk4NiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBNTEyIjozMjoiYzk1YTE3YzA5OTQwYTY5MWVkMmQ2MjE1NzFiMGViODQ0ZWRlNTVhOSI6Ijk5Y2QyODI2MmU4MWYzNDg3OGNkY2ViZjQxMjhlMDVlMjA5OGE3MDA5Mjc4YTY2ZjRjNzg1Nzg0ZDBlNTY3OGYzZjJiMjJmODZlOTgyZDI3M2I2MjczYTIyMmVjNjE3NTBiNDU1NmQ3NjZmMTU1MGE3YWVkZmU4M2ZhZWRiYzRiZGFlODNmYTU2MGQ2MmRmMTdlYjkxNGQwNWZkYWE0ODk0MDU1MWJhYzgxZDcwMGY1ZmNhNzE0NzI5NWUzODZlODEyMGQ2Njc0MmVjNjVjNmVlOGQ4OWE5MjIxN2EwZjYyNjZkMGRkYzYwYmIyMGVmNjc5YWU4Mjk5Yzg1MDJjMmYiOiI2YmMxMzc5ZDE1NjU1OWRkZWUyZWQ0MjBlYTVkNWM1ZmYzZTQ1NGExMDU5YjdiYTcyYzM1MGU3N2I2ZTkzMzNjIgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9obWFjX211bHRpOiJTSEE1MTIiOjMyOiIzYjEwYjhmYTcxODg0MGQxZGVhOGU5ZmMzMTc0NzZiY2Y1NTg3NWZkIjoiZjA0ZjViNzA3M2Q3ZDAyNzRlODM1NDQzM2IzOTAzMDZjNTYwNzYzMmY1ZjU4OWMxMmVkYjYyZDU1NjczYWZmMjM2NmQyZTZiMjRkZTczMWFkZjkyZTY1NGJhYTMwYjFjZmQ0YTA2OTc4OGY2NWVjMWI5OWIwMTVkOTA0ZDg4MzIxMTBkYmQ3NGVhZTM1YTgxNTYyZDE0Y2U0MTM2ZDgyMGFkMGE1NWZmNTQ4OWJhNjc4ZmJiYzFjMjc2NjNlYzEzNDlkNzBlNzQwZjBlMGVjMjdjZmJlODk3MTgxOWY0Nzg5ZTQ4NmI1MGEyZDcyNzFkNzdlMmFhZWE1MGRlNjJmZCI6ImZjM2MzOGM3YTE3ZTNjZTA2ZGIwMzNmMWMxNzI4NjZmMDFhMDAwNDVkYjU1ZjJlMjM0ZjcxYzgyMjY0ZjJiYTIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTUxMiI6MzI6IjQ4MDNkMzExMzk0NjAwZGMxZTBkOGZjOGNlZGViOGJkZTNmZTdjNDIiOiJhMTBjMTI1ZGQ3MDJhOTcxNTNhZDkyM2JhNWU5ODg5Y2ZhYzFiYTE2OWRlMzcwZGViZTUxZjIzMzczNWFhNmVmZmNjOTc4NWM0YjVjN2U0OGM0NzdkYzVjNDExYWU2YTk1OTExODU4NGUyNmFkYzk0YjQyYzJiMjliMDQ2ZjNjZjAxYzY1YjI0YTI0YmQyZTYyMGJkZjY1MGEyM2JiNGE3MjY1NWIxMTAwZDdjZTlhNGRhYjY5N2M2Mzc5NzU0YjQzOTZjODI1ZGU0YjllYjczZjJlNmE2YzBkMDM1M2JiZGVhZjcwNjYxMjgwMGUxMzdiODU4ZmRiMzBmMzMxMWM2IjoiN2NkODIzNmM1NTEwMmU2Mzg1ZjUyMjc5NTA2ZGY2ZmNjMzg4YWI3NTA5MmRhMjEzOTVjZTE0YTgyYjIwMmZmYSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIEhNQUMtU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaG1hY19tdWx0aToiU0hBNTEyIjo0ODoiYWViMmYzYjk3N2ZhNmM4ZTcxZTA3YzVhNWM3NGZmNTgxNjZkZTA5MiI6IjIyNDU3MzU1ZGM3NjA5NWFiZDQ2ODQ2YjQxY2ZlNDlhMDZjZTQyYWM4ODU3YjQ3MDJmYzc3MTUwOGRmYjM2MjZlMGJmZTg1MWRmODk3YTA3YjM2ODExZWM0MzM3NjZlNGI0MTY2YzI2MzAxYjM0OTNlNzQ0MGQ0NTU0YjBlZjZhYzIwZjFhNTMwZTU4ZmFjOGFlYmE0ZTlmZjJkNDg5OGQ4YTI4NzgzYjQ5Y2QyNjljMjk2NWZkN2Y4ZTRmMmQ2MGNmMWU1Mjg0ZjI0OTUxNDViNzIzODJhYWQ5MGUxNTNhOTBlY2FlMTI1YWQ3NTMzNmZiMTI4ODI1YzIzZmI4YjAiOiJmYTM5YmQ4ZmNjM2JmYTIxOGY5ZGVhNWQzYjJjZTEwYTc2MTllMzE2NzhhNTZkOGE5ZDkyN2IxZmU3MDNiMTI1YWY0NDVkZWJlOWE4OWEwN2RiNjE5NGQyN2I0NGQ4NWEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBITUFDLVNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2htYWNfbXVsdGk6IlNIQTUxMiI6NDg6IjQyODVkM2Q3NzQ0ZGE1Mjc3NWJiNDRjYTQzNmEzMTU0Zjc5ODAzMDkiOiIyMDhmMGI2ZjJkZTJlNWFhNWRmMTE5MjdkZGM2ZGY0ODVlZGMxMTkzMTgxYzQ4NGQwZjBhNDM0YTk1NDE4ODAzMTAxZDRkZTlmZGI3OThmOTM1MTZhNjkxNmZhMzhhODIwN2RlMTY2NmZlNTBmZTM0NDFjMDNiMTEyZWFhYWU2OTU0ZWQwNjNmN2FjNGUzYzFlM2Y3M2IyMGQxNTNmZTllNDg1N2Y1ZTkxNDMwZjBhNzBlZTgyMDUyOWFkYWMyNDY3NDY5ZmQxOGFkZjEwZTJhZjBmZWEyN2MwYWJjODNjNWE5YWY3N2MzNjRhNDY2Y2ZmY2U4YmFiNGUyYjcwYmMxIjoiZmU3NjAzZjIwNWIyNzc0ZmUwZjE0ZWNmYTNlMzM4ZTkwNjA4YTgwNmQxMWNhNDU5ZGZmNWNlMzZiMWIyNjRlY2QzYWY1ZjA0OTJhNzUyMWQ4ZGEzMTAyYmEyMDkyN2E1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgSE1BQy1TSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9obWFjX211bHRpOiJTSEE1MTIiOjQ4OiI4YWI3ODNkNWFjZjMyZWZhMGQ5YzBhMjFhYmNlOTU1ZTk2NjMwZDg5IjoiMTczNzFlMDEzZGNlODM5OTYzZDU0NDE4ZTk3YmU0YmQ5ZmEzY2IyYTM2OGE1MjIwZjVhYTFiOGFhZGRmYTNiZGVmYzkxYWZlN2M3MTcyNDRmZDJmYjY0MGY1Y2I5ZDliZjNlMjVmN2YwYzhiYzc1ODg4M2I4OWRjZGNlNmQ3NDlkOTY3MmZlZDIyMjI3N2VjZTNlODRiM2VjMDFiOTZmNzBjMTI1ZmNiM2NiZWU2ZDE5YjhlZjA4NzNmOTE1ZjE3M2JkYjA1ZDgxNjI5YmExODdjYzhhYzE5MzRiMmY3NTk1MmZiNzYxNmFlNmJkODEyOTQ2ZGY2OTRiZDI3NjNhZiI6IjlhYzdjYThkMWFlZmMxNjZiMDQ2ZTRjZjc2MDJlYmUxODFhMGU1MDU1NDc0YmZmNWIzNDIxMDY3MzFkYTBkN2U0OGU0ZDg3YmMwYTZmMDU4NzE1NzQyODlhMWIwOTlmOCIKKworZ2VuZXJpYyBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleDoiU0hBMSI6IiI6ImRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiJhOCI6Ijk5ZjJhYTk1ZTM2Zjk1YzJhY2IwZWFmMjM5OThmMDMwNjM4ZjNmMTUiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiIzMDAwIjoiZjk0NGRjZDYzNWY5ODAxZjdhYzkwYTQwN2ZiYzQ3OTk2NGRlYzAyNCIKKworZ2VuZXJpYyBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleDoiU0hBMSI6IjQyNzQ5ZSI6ImE0NDQzMTllOWI2Y2MxZTg0NjRjNTExZWMwOTY5YzM3ZDZiYjI2MTkiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiI5ZmMzZmUwOCI6IjE2YTBmZjg0ZmNjMTU2ZmQ1ZDNjYTNhNzQ0ZjIwYTIzMmQxNzIyNTMiCisKK2dlbmVyaWMgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiJiNWMxYzZmMWFmIjoiZmVjOWRlZWJmY2RlZGFmNjZkZGE1MjVlMWJlNDM1OTdhNzNhMWY5MyIKKworZ2VuZXJpYyBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleDoiU0hBMSI6ImVjMjk1NjEyNDRlZGU3MDZiNmViMzBhMWMzNzFkNzQ0NTBhMTA1YzNmOTczNWY3ZmE5ZmUzOGNmNjdmMzA0YTU3MzZhMTA2ZTkyZTE3MTM5YTY4MTNiMWM4MWE0ZjNkM2ZiOTU0NmFiNDI5NmZhOWY3MjI4MjZjMDY2ODY5ZWRhY2Q3M2IyNTQ4MDM1MTg1ODEzZTIyNjM0YTlkYTQ0MDAwZDk1YTI4MWZmOWYyNjRlY2NlMGE5MzEyMjIxNjJkMDIxY2NhMjhkYjVmM2MyYWEyNDk0NWFiMWUzMWNiNDEzYWUyOTgxMGZkNzk0Y2FkNWRmYWYyOWVjNDNjYjM4ZDE5OGZlNGFlMWRhMjM1OTc4MDIyMTQwNWJkNjcxMmE1MzA1ZGE0YjFiNzM3ZmNlN2NkMjFjMGViNzcyOGQwODIzNWE5MDExIjoiOTcwMTExYzRlNzdiY2M4OGNjMjA0NTljMDJiNjliNGFhOGY1ODIxNyIKKworZ2VuZXJpYyBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleDoiU0hBMSI6IjVmYzJjM2Y2YTdlNzlkYzk0YmU1MjZlNTE2NmEyMzg4OTlkNTQ5MjdjZTQ3MDAxOGZiZmQ2NjhmZDlkZDk3Y2JmNjRlMmM5MTU4NGQwMWRhNjNiZTNjYzlmZGZmOGFkZmVmYzNhYzcyOGUxZTMzNWI5Y2RjODdmMDY5MTcyZTMyM2QwOTRiNDdmYTFlNjUyYWZlNGQ2YWExNDdhOWY0NmZkYTMzY2FjYjY1ZjNhYTEyMjM0NzQ2YjkwMDdhOGM4NWZlOTgyYWZlZDc4MTUyMjFlNDNkYmE1NTNkOGZlOGEwMjJjZGFjMWI5OWVlZWVhMzU5ZTVhOWQyZTcyZTM4MmRmZmE2ZDE5ZjM1OWY0ZjI3ZGMzNDM0Y2QyN2RhZWVkYThlMzg1OTQ4NzMzOTg2NzgwNjVmYmIyMzY2NWFiYTkzMDlkOTQ2MTM1ZGEwZTRhNGFmZGFkZmYxNGRiMThlODVlNzFkZDkzYzNiZjlmYWY3ZjI1YzgxOTRjNDI2OWIxZWUzZDk5MzQwOTdhYjk5MDAyNWQ5YzNhYWY2M2Q1MTA5ZjUyMzM1ZGQzOTU5ZDM4YWU0ODUwNTBlNGJiYjYyMzU1NzRmYzAxMDJiZThmN2EzMDZkNmU4ZGU2YmE2YmVjZjgwZjM3NDE1YjU3Zjk4OThhNTgyNGU3NzQxNDE5NzQyMmJlM2QzNmE2MDgwIjoiMDQyM2RjNzZhODc5MTEwN2QxNGUxM2Y1MjY1YjM0M2YyNGNjMGYxOSIKKworZ2VuZXJpYyBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleDoiU0hBMSI6IjBmODY1ZjQ2YThmM2FlZDJkYTE4NDgyYWEwOWE4ZjM5MGRjOWRhMDdkNTFkMWJkMTBmZTBiZjVmMzkyOGQ1OTI3ZDA4NzMzZDMyMDc1NTM1YTZkMWM4YWMxYjJkYzZiYTBmMmY2MzNkYzFhZjY4ZTNmMGZhM2Q4NWU2YzYwY2I3YjU2YzIzOWRjMTUxOWEwMDdlYTUzNmEwN2I1MThlY2NhMDJhNmMzMWI0NmI3NmYwMjE2MjBlZjNmYzY5NzY4MDQwMTgzODBlNWFiOWM1NThlYmZjNWNiMWM5ZWQyZDk3NDcyMmJmOGFiNjM5OGYxZjJiODJmYTUwODNmODVjMTZhNTc2N2EzYTA3MjcxZDY3NzQzZjAwODUwY2U4ZWM0MjhjN2YyMmYxY2YwMWY5OTg5NWMwYzg0NDg0NWIwNmEwNmNlY2IwYzZjZjgzZWI1NWExZDRlYmM0NGMyYzEzZjZmN2FhNWUwZTA4YWJmZDg0ZTc4NjQyNzkwNTdhYmM0NzFlZTRhNDVkYmJiNTc3NGFmYTI0ZTUxNzkxYTBlYWRhMTEwOTNiODg2ODFmZTMwYmFhM2IyZTk0MTEzZGM2MzM0MmM1MWNhNWQxYTYwOTZkMDg5N2I2MjZlNDJjYjkxNzYxMDU4MDA4Zjc0NmYzNTQ2NTQ2NTU0MGFkOGM2YjhiNjBmN2UxNDYxYjNjZTllNjUyOTYyNTk4NGNiOGM3ZDQ2ZjA3ZjczNWJlMDY3NTg4YTAxMTdmMjNlMzRmZjU3ODAwZTJiYmU5YTE2MDVmZGU2MDg3ZmIxNWQyMmM1ZDNhYzQ3NTY2YjhjNDQ4YjBjZWU0MDM3M2U1YmE2ZWFhMjFhYmVlNzEzNjZhZmJiMjdkYmJkMzAwNDc3ZDcwYzM3MWU3Yjg5NjM4MTJmNWVkNGZiNzg0ZmIyZjNiZDFkM2FmZTg4M2NkZDQ3ZWYzMmJlYWVhIjoiNjY5MmE3MWQ3M2UwMGYyN2RmOTc2YmM1NmRmNDk3MDY1MGQ5MGU0NSIKKworZ2VuZXJpYyBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEwCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXg6IlNIQTEiOiI4MjM2MTUzNzgxYmQyZjFiODFmZmUwZGVmMWJlYjQ2ZjVhNzAxOTExNDI5MjY2NTE1MDNmMWIzYmIxMDE2YWNkYjllN2Y3YWNjZWQ4ZGQxNjgyMjZmMTE4ZmY2NjRhMDFhODgwMDExNmZkMDIzNTg3YmZiYTUyYTI1NTgzOTM0NzZmNWZjNjljZTljNjUwMDFmMjNlNzA0NzZkMmNjODFjOTdlYTE5Y2FlYjE5NGUyMjQzMzliY2IyM2Y3N2E4M2ZlYWM1MDk2ZjliMzA5MGM1MWE2ZWU2ZDIwNGI3MzVhYTcxZDdlOTk2ZDM4MGI4MDgyMmU0ZGZkNDM2ODNhZjljNzQ0MjQ5OGNhY2JlYTY0ODQyZGZkYTIzOGNiMDk5OTI3YzZlZmFlMDdmZGY3YjIzYTRlNDQ1NmUwMTUyYjI0ODUzZmUwZDVkZTQxNzk5NzRiMmI5ZDRhMWNkYmVmY2JjMDFkOGQzMTFiNWRkYTA1OTEzNjE3NmVhNjk4YWI4MmFjZjIwZGQ0OTBiZTQ3MTMwYjEyMzVjYjQ4ZjhhNjcxMDQ3M2NmYzkyM2UyMjJkOTRiNTgyZjlhZTM2ZDRjYTJhMzJkMTQxYjhlOGNjMzY2Mzg4NDVmYmM0OTliY2UxNzY5OGMzZmVjYWUyNTcyZGJiZDQ3MDU1MjQzMGQ3ZWYzMGMyMzhjMjEyNDQ3OGYxZjc4MDQ4MzgzOWI0ZmI3M2Q2M2E5NDYwMjA2ODI0YTViNmI2NTMxNWIyMWUzYzJmMjRjOTdlZTdjMGU3OGZhYWQzZGY1NDljN2NhOGVmMjQxODc2ZDlhYWZlOWEzMDlmNmRhMzUyYmVjMmNhYWE5MmVlOGRjYTM5Mjg5OWJhNjdkZmVkOTBhZWYzM2Q0MWZjMjQ5NGI3NjVjYjNlMjQyMmM4ZTU5NWRhYmJmYWNhMjE3NzU3NDUzZmIzMjJhMTMyMDNmNDI1ZjYwNzNhOTkwM2UyZGM1ODE4ZWUxZGE3MzdhZmMzNDVmMDA1Nzc0NGUzYTU2ZTE2ODFjOTQ5ZWIxMjI3M2EzYmZjMjA2OTllNDIzYjk2ZTQ0YmQxZmY2MmU1MGE4NDhhODkwODA5YmZlMTYxMWM2Nzg3ZDNkNzQxMTAzMzA4Zjg0OWE3OTBmOWMwMTUwOTgyODZkYmFjZmMzNGMxNzE4YjJjMmI3N2UzMjE5NGE3NWRkYTM3OTU0YTMyMGZhNjg3NjQwMjc4NTI4NTVhN2U1YjUyNzRlYjFlMmNiY2QyNzE2MWQ5OGI1OWFkMjQ1ODIyMDE1ZjQ4YWY4MmE0NWMwZWQ1OWJlOTRmOWFmMDNkOTczNjA0ODU3MGQ2ZTNlZjYzYjE3NzBiYzk4ZGZiNzdkZTg0YjFiYjE3MDhkODcyYjYyNWQ5YWI5YjA2YzE4ZTVkYmJmMzQzOTkzOTFmMGY4YWEyNmVjMGRhYzdmZjRjYjhlYzk3YjUyYmNiOTQyZmE2ZGIyMzg1ZGNkMWIzYjlkNTY3YWFlYjQyNWQ1NjdiMGViZTI2NzIzNTY1MWExZWQ5YmY3OGZkOTNkM2MxZGQwNzdmZTM0MGJiMDRiMDA1MjljNThmNDUxMjRiNzE3YzE2OGQwN2U5ODI2ZTMzMzc2OTg4YmM1Y2Y2Mjg0NWMyMDA5OTgwYTRkZmE2OWZiYzdlNWEwYjFiYjIwYTU5NThjYTk2N2FlYzY4ZWIzMWRkOGZjY2NhOWFmY2QzMGEyNmJhYjI2Mjc5ZjFiZjY3MjRmZiI6IjExODYzYjQ4MzgwOWVmODg0MTNjYTliMDA4NGFjNGE1MzkwNjQwYWYiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiIiOiJkMTRhMDI4YzJhM2EyYmM5NDc2MTAyYmIyODgyMzRjNDE1YTJiMDFmODI4ZWE2MmFjNWIzZTQyZiIKKworZ2VuZXJpYyBTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTIyNCI6ImZmIjoiZTMzZjlkNzVlNmFlMTM2OWRiYWJmODFiOTZiNDU5MWFlNDZiYmEzMGI1OTFhNmI2YzYyNTQyYjUiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiI5ODRjIjoiMmZhOWRmOTE1N2Q5ZTAyN2NmYmM0YzZhOWRmMzJlMWFkYzBjYmUyMzI4ZWMyYTYzYzVhZTkzNGUiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiI1MGVmZDAiOiJiNWE5ODIwNDEzYzJiZjgyMTFmYmJmNWRmMTMzNzA0M2IzMmZhNGVhZmFmNjFhMGM4ZTljY2VkZSIKKworZ2VuZXJpYyBTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTIyNCI6ImU1ZTA5OTI0IjoiZmQxOWU3NDY5MGQyOTE0NjdjZTU5ZjA3N2RmMzExNjM4ZjFjM2E0NmU1MTBkMGU0OWE2NzA2MmQiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiIyMWViZWNiOTE0IjoiNzhmNGE3MWMyMWM2OTQ0OTljZTFjNzg2NjYxMWIxNGFjZTcwZDkwNTAxMmMzNTYzMjNjN2M3MTMiCisKK2dlbmVyaWMgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4OiJTSEEyMjQiOiJmYzQ4ODk0N2MxYTdhNTg5NzI2YjE1NDM2YjRmM2Q5NTU2MjYyZjk4ZmM2NDIyZmM1Y2RmMjBmMGZhZDdmZTQyN2EzNDkxYzg2ZDEwMWZmZTZiNzUxNGYwNjI2OGY2NWIyZDI2OWIwZjY5YWQ5YTk3ODQ3ZWZmMWMxNmEyNDM4Nzc1ZWI3YmU2ODQ3Y2NmMTFjYjhiMmU4ZGNkNjY0MGIwOTViNDljMDY5M2ZlM2NmNGE2NmUyZDliN2FkNjhiZmYxNGYzYWQ2OWFiZjQ5ZDBhYmEzNmNiZTA1MzUyMDJkZWI2NTk5YTQ3MjI1ZWYwNWJlYjM1MTMzNWNkN2JjMGY0ODBkNjkxMTk4YzdlNzEzMDVmZmQ1M2IzOWQzMzI0MmJiNzljZmQ5OGJmZDY5ZTEzN2I1ZDE4YjJiODlhYzlhY2UwMWM4ZGJkY2YyNTMzY2NlMzY4MmVjYzUyMTE4ZGUwYzEwNjJlYzIxMjZjMmU2NTdkNmVhM2Q5ZTIzOThlNzA1ZDRiMGIxZjFjZWVjYjI2NmRmZmM0ZjMxYmY0Mjc0NGZiMWU5MzhkYzIyYTg4OTkxOWVlMWU3M2Y0NjNmNzg3MWZlZDcyMDUxOWUzMjE4NjI2NGI3ZWYyYTBlNWQ5YTE4ZTZjOTVjMDc4MTg5NGY3Nzk2N2YwNDg5NTFkZWMzYjRkODkyYTM4NzEwYjFlMzQzNmQzYzI5MDg4ZWI4YjNkYTE3ODljMjVkYjNkM2JjNmMyNjA4MTIwNmU3MTU1ZDIxMGE4OWI4MGNhNmVhODc3YzQxZmY5OTQ3YzBmMjU2MjVkY2IxMTgyOTRhMTYzNTAxZjYyMzljMzI2NjYxYTk1OGZkMTJkYTRjZDE1YTg5OWY4Yjg4Y2M3MjM1ODkwNTZlYWVjNWFhMDRhNGNmNWRiYjZmNDgwZjk2NjA0MjNjY2YzOGM0ODZlMjEwNzA3ZTBmYjI1ZTFmMTI2Y2ViMjYxNmY2M2UxNDdhNjQ3ZGFiMGFmOWViZTg5ZDY1NDU4YmY2MzYxNTRhNDZlNGNhYjk1ZjVlZTYyZGEyYzc5NzRjZDE0YjkwZDNlNGY5OWY4MTczM2U4NWIzYzFkNWRhMmI1MDhkOWI5MGY1ZWVkN2VmZjBkOWM3NjQ5ZGU2MmJlZTAwMzc1NDU0ZmVlNGEzOTU3NmE1YmJmZGFlNDI4ZTdmODA5N2JkZjc3OTdmMTY3Njg2Y2I2ODQwN2U0OTA3OWU0NjExZmYzNDAyYjYzODRiYTdiN2U1MjJiZDJiYjExY2U4ZmQwMmVhNGMxNjA0ZDE2M2FjNGY2ZGRlNTBiOGIxZjU5M2Y3ZWRhYWRlYWMwODY4ZWQ5N2RmNjkwMjAwNjgwYzI1ZjBmNWQ4NTQzMWE1MjllNGYzMzkwODlkY2RlZGExMDVlNGVlNTFkZWFkNzA0Y2RmNWE2MDVjNTVmYjA1NWM5YjBlODZiOGJhMWI1NjRjMGRlYTNlYjc5MGE1OTVjYjEwM2NiMjkyMjY4YjA3YzVlNTkzNzFlMWE3ZWY1OTdjZDRiMjI5NzdhODIwNjk0YzlmOWFlYjU1ZDlkZTNlZjYyYjc1ZDZlNjU2ZTMzMzY2OThkOTYwYTM3ODdiZjhjZjViOTI2YTdmYWVlZjUyYWUxMjhiY2I1ZGM5ZTY2ZDk0YjAxNmM3YjhlMDM0ODc5MTcxYTJkOTFjMzgxZjU3ZTZhODE1YjYzYjVlZTZhNmQyZmY0MzViNDlmMTRjOTYzOTY2OTYwMTk0NDMwZDc4ZjhmODc2MjdhNjc3NTdmYjM1MzJiMjg5NTUwODk0ZGE2ZGNlNDgxN2E0ZTA3ZjRkNTY4NzdhMTEwMmZmY2M4YmVmYTVjOWY4ZmNhNmE0NTc0ZDkzZmY3MDM3NmM4ODYxZTBmODEwOGNmOTA3ZmNlNzdlY2I0OTcyOGY4NmYwMzRmODAyMjRiOTY5NTY4MmUwODI0NDYyZjc2Y2RiMWZkMWFmMTUxMzM3YjBkODU0MTkwNDdhN2FhMjg0NzkxNzE4YTQ4NjBjZDU4NmY3ODI0Yjk1YmM4MzdiNmZkNGY5YmU1YWFkZTY4NDU2ZTIwMzU2YWE0ZDk0M2RhYzM2YmY4YjY3YjllOGY5ZDAxYTAwZmNkYTc0Yjc5OGJhZmE3NDZjNjYxYjAxMGY3NWI1OTkwNGIyOWQwYzgwNDE1MDQ4MTFjNDA2NWY4MmNmMmVhZDU4ZDJmNTk1Y2JkOGJjM2U3MDQzZjRkOTQ1NzdiMzczYjdjZmUxNmEzNmZlNTY0ZjUwNWMwM2I3MGNmZWI1ZTVmNDExYzc5NDgxMzM4YWE2N2U4NmIzZjVhMmU3N2MyMWU0NTRjMzMzYWUzZGE5NDNhYjcyM2FiNWY0Yzk0MDM5NTMxOTUzNGE1NTc1ZjY0YWNiYTBkMGVjYzQzZjYwMjIxZWQzYmFkZjcyODljOWIzYTdiOTAzYTJkNmM5NGUxNWZhNGMzMTBkYzRmYTdmYWEwYzI0ZjQwNTE2MGExMDAyZGJlZjIwZTQxMDVkNDgxZGI5ODJmNzI0M2Y3OTQwMGE2ZTRjZDk3NTNjNGI5NzMyYTQ3NTc1ZjUwNGIyMGMzMjhmZTlhZGQ3ZjQzMmE0ZjA3NTgyOWRhMDdiNTNiNjk1MDM3ZGM1MTczN2QzY2Q3MzE5MzRkZjMzM2NkMWE1M2ZjZjY1YWEzMWJhYTQ1MGNhNTAxYTZmYWUyNmUzMjIzNDdlNjE4YzVhNDQ0ZDkyZTlmZWM1YTgyNjFhZTM4Yjk4ZmVlNWJlNzdjMDJjZWMwOWRkY2NkNWIzZGU5MjAzNiI6IjEzMDIxNDlkMWUxOTdjNDE4MTNiMDU0Yzk0MjMyOWQ0MjBlMzY2NTMwZjU1MTdiNDcwZTk2NGZlIgorCitnZW5lcmljIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjU2IjoiIjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6ImJkIjoiNjgzMjU3MjBhYWJkN2M4MmYzMGY1NTRiMzEzZDA1NzBjOTVhY2NiYjdkYzRiNWFhZTExMjA0YzA4ZmZlNzMyYiIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6IjVmZDQiOiI3YzRmYmY0ODQ0OThkMjFiNDg3YjlkNjFkZTg5MTRiMmVhZGFmMjY5ODcxMjkzNmQ0N2MzYWRhMjU1OGY2Nzg4IgorCitnZW5lcmljIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjU2IjoiYjBiZDY5IjoiNDA5NjgwNDIyMTA5M2RkY2NmYmY0NjgzMTQ5MGVhNjNlOWU5OTQxNDg1OGY4ZDc1ZmY3ZjY0MmM3Y2E2MTgwMyIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6ImM5OGM4ZTU1IjoiN2FiYzIyYzBhZTVhZjI2Y2U5M2RiYjk0NDMzYTBlMGIyZTExOWQwMTRmOGU3ZjY1YmQ1NmM2MWNjY2NkOTUwNCIKKworZ2VuZXJpYyBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXg6IlNIQTI1NiI6IjgxYTcyM2Q5NjYiOiI3NTE2ZmI4YmIxMTM1MGRmMmJmMzg2YmMzYzMzYmQwZjUyY2I0YzY3YzZlNDc0NWUwNDg4ZTYyYzJhZWEyNjA1IgorCitnZW5lcmljIFNIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleDoiU0hBMjU2IjoiODM5MGNmMGJlMDc2NjFjYzc2NjlhYWM1NGNlMDlhMzc3MzNhNjI5ZDQ1ZjVkOTgzZWYyMDFmOWIyZDEzODAwZTU1NWQ5YjEwOTdmZWMzYjc4M2Q3YTUwZGNiNWUyYjY0NGI5NmExZTk0NjNmMTc3Y2YzNDkwNmJmMzg4ZjM2NmRiNWMyZGVlZTA0YTMwZTI4M2Y3NjRhOTdjM2IzNzdhMDM0ZmVmYzIyYzI1OTIxNGZhYTk5YmFiYWZmMTYwYWIwYWFhN2UyY2NiMGNlMDljNmIzMmZlMDhjYmM0NzQ2OTQzNzVhYmE3MDNmYWRiZmEzMWNmNjg1YjMwYTExYzU3ZjNjZjRlZGQzMjFlNTdkM2FlNmViYjExMzNjODI2MGU3NWI5MjI0ZmE0N2EyYmIyMDUyNDlhZGQyZTJlNjJmODE3NDkxNDgyYWUxNTIzMjJiZTA5MDAzNTVjZGNjOGQ0MmE5OGY4MmU5NjFhMGRjNmY1MzdiN2I0MTBlZmYxMDVmNTk2NzNiZmI3ODdiZjA0MmFhMDcxZjdhZjY4ZDk0NGQyNzM3MWM2NDE2MGZlOTM4Mjc3MjM3MjUxNmMyMzBjMWY0NWMwZDZiNmNjYTdmMjc0YjM5NGRhOTQwMmQzZWFmZGY3MzM5OTRlYzU4YWIyMmQ3MTgyOWE5ODM5OTU3NGQ0YjU5MDhhNDQ3YTVhNjgxY2IwZGQ1MGEzMTE0NTMxMWQ5MmMyMmExNmRlMWVhZDY2YTU0OTlmMmRjZWI0Y2FlNjk0NzcyY2U5MDc2MmVmODMzNmFmZWM2NTNhYTliMWExYzQ4MjBiMjIxMTM2ZGZjZTgwZGNlMmJhOTIwZDg4YTUzMGM5NDEwZDBhNGUwMzU4YTNhMTEwNTJlNThkZDczYjBiMTc5ZWY4ZjU2ZmUzYjVhMmQxMTdhNzNhMGMzOGExMzkyYjY5MzhlOTc4MmUwZDg2NDU2ZWU0ODg0ZTNjMzlkNGQ3NTgxM2YxMzYzM2JjNzliYWEwN2MwZDJkNTU1YWZiZjIwN2Y1MmI3ZGNhMTI2ZDAxNWFhMmI5ODczYjNlYjA2NWU5MGI5YjA2NWE1MzczZmUxZmIxYjIwZDU5NDMyN2QxOWZiYTU2Y2I4MWU3YjY2OTY2MDVmZmE1NmViYTNjMjdhNDM4Njk3Y2MyMWIyMDFmZDdlMDlmMThkZWVhMWIzZWEyZjBkMWVkYzAyZGYwZTIwMzk2YTE0NTQxMmNkNmIxM2MzMmQyZTYwNTY0MWM5NDhiNzE0YWVjMzBjMDY0OWRjNDQxNDM1MTFmMzVhYjBmZDVkZDY0YzM0ZDA2ZmU4NmYzODM2ZGZlOWVkZWI3ZjA4Y2ZjM2JkNDA5NTY4MjYzNTYyNDIxOTFmOTlmNTM0NzNmMzJiMGNjMGNmOTMyMWQ2YzkyYTExMmU4ZGI5MGI4NmVlOWU4N2NjMzJkMDM0M2RiMDFlMzJjZTllYjc4MmNiMjRlZmJiYmViNDQwZmU5MjllOGYyYmY4ZGZiMTU1MGEzYTJlNzQyZThiNDU1YTNlNTczMGU5ZTZhN2E5ODI0ZDE3YWNjMGY3MmE3ZjY3ZWFlMGYwOTcwZjhiZGU0NmRjZGVmYWVkMzA0N2NmODA3ZTdmMDBhNDJlNWZkMTFkNDBmNWU5ODUzM2Q3NTc0NDI1YjdkMmJjM2IzODQ1YzQ0MzAwOGI1ODk4MGU3NjhlNDY0ZTE3Y2M2ZjZiMzkzOWVlZTUyZjcxMzk2M2QwN2Q4YzRhYmYwMjQ0OGVmMGI4ODljOTY3MWUyZjhhNDM2ZGRlZWZmY2NhNzE3NmU5YmY5ZDEwMDVlY2QzNzdmMmZhNjdjMjNlZDFmMTM3ZTYwYmY0NjAxOGE4YmQ2MTNkMDM4ZTg4MzcwNGZjMjZlNzk4OTY5ZGYzNWVjN2JiYzZhNGZlNDZkODkxMGJkODJmYTNjZGVkMjY1ZDBhM2I2ZDM5OWU0MjUxZTRkODIzM2RhYTIxYjU4MTJmZGVkNjUzNjE5OGZmMTNhYTVhMWNkNDZhNWI5YTE3YTRkZGMxZDlmODU1NDRkMWQxY2MxNmYzZGY4NTgwMzhjOGUwNzFhMTFhN2UxNTdhODVhNmE4ZGM0N2U4OGQ3NWU3MDA5YThiMjZmZGI3M2YzM2EyYTcwZjFlMGMyNTlmOGY5NTMzYjliOGY5YWY5Mjg4YjcyNzRmMjFiYWVlYzc4ZDM5NmY4YmFjZGNjMjI0NzEyMDdkOWI0ZWZjY2QzZmVkYzVjNWEyMjE0ZmY1ZTUxYzU1M2YzNWUyMWFlNjk2ZmU1MWU4ZGY3MzNhOGUwNmY1MGY0MTllNTk5ZTlmOWU0YjM3Y2U2NDNmYzgxMGZhYWE0Nzk4OTc3MTUwOWQ2OWExMTBhYzkxNjI2MTQyNzAyNjM2OWEyMTI2M2FjNDQ2MGZiNGY3MDhmOGFlMjg1OTk4NTZkYjdjYjZhNDNhYzhlMDNkNjRhOTYwOTgwN2U3NmM1ZjMxMmI5ZDE4NjNiZmEzMDRlODk1MzY0NzY0OGI0ZjRhYjBlZDk5NWUiOiI0MTA5Y2RiZWMzMjQwYWQ3NGNjNmMzN2YzOTMwMGY3MGZlZGUxNmUyMWVmYzc3Zjc4NjU5OTg3MTRhYWQwYjVlIgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiIjoiMzhiMDYwYTc1MWFjOTYzODRjZDkzMjdlYjFiMWUzNmEyMWZkYjcxMTE0YmUwNzQzNGMwY2M3YmY2M2Y2ZTFkYTI3NGVkZWJmZTc2ZjY1ZmJkNTFhZDJmMTQ4OThiOTViIgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiYWIiOiJmYjk0ZDViZTExODg2NWY2ZmNiYzk3OGI4MjVkYTgyY2ZmMTg4ZmFlYzJmNjZjYjg0YjI1MzdkNzRiNDkzODQ2OTg1NGIwY2E4OWU2NmZhMmUxODI4MzQ3MzY2MjlmM2QiCisKK2dlbmVyaWMgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEEzODQiOiI3YzI3IjoiM2Q4MGJlNDY3ZGY4NmQ2M2FiYjllYTFkM2Y5Y2IzOWNkMTk4OTBlN2YyYzUzYTYyMDBiZWRjNTAwNjg0MmIzNWU4MjBkYzRlMGNhOTBjYTliOTdhYjIzZWYwNzA4MGZjIgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiMzFmNWNhIjoiNzhkNTRiOTQzNDIxZmRmN2JhOTBhN2ZiOTYzN2MyMDczYWE0ODA0NTRiZDg0MWQzOWZmNzJmNDUxMWZjMjFmYjY3Nzk3YjY1MmMwYzgyMzIyOTM0Mjg3M2QzYmVmOTU1IgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiN2JkZWUzZjgiOiI4YmRhZmJhMDc3N2VlNDQ2YzM0MzFjMmQ3YjFmYmI2MzEwODlmNzFkMmNhNDE3YWJjMWQyMzBlMWFiYTY0ZWMyZjFjMTg3NDc0YTZmNDA3N2QzNzJjMTRhZDQwN2Y5OWEiCisKK2dlbmVyaWMgU0hBLTM4NCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWRfaGV4OiJTSEEzODQiOiI4ZjA1NjA0OTE1IjoiNTA0ZTQxNGJmMWRiMTA2MGYxNGM4Yzc5OWUyNWIxZTBjNGRjZjE1MDRlYmJkMTI5OTk4ZjBhZTI4M2U2ZGU4NmUwZDNjN2U4NzljNzNlYzNiMTgzNmMzZWU4OWMyNjQ5IgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiNjY1ZGE2ZWRhMjE0IjoiNGMwMjJmMTEyMDEwOTA4ODQ4MzEyZjhiOGYxMDcyNjI1ZmQ1YzEwNTM5OWQ1NjJlYTFkNTYxMzA2MTlhN2VhYzhkZmMzNzQ4ZmQwNWVlMzdlNGI2OTBiZTlkYWE5OTgwIgorCitnZW5lcmljIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBMzg0IjoiN2Y0NmNlNTA2ZDU5M2M0ZWQ1M2M4MmVkZWI2MDIwMzdlMDQ4NWJlZmJlZTAzZjdmOTMwZmU1MzJkMThmZjJhM2Y1ZmQ2MDc2NjcyYzgxNDVhMWJmNDBkZDk0ZjdhYmFiNDdjOWFlNzFjMjM0MjEzZDJhZDEwNjljMmRhYzBiMGJhMTUyNTdhZTY3MmI4MjQ1OTYwYWU1NWJkNTAzMTVjMDA5N2RhYTNhMzE4NzQ1Nzg4ZDcwZDE0NzA2OTEwODA5Y2E2ZTM5NjIzN2ZlNDkzNGZhNDZmOWNlNzgyZDY2NjA2ZDhiZDZiMmQyODNiMTE2MDUxM2NlOWMyNGU5ZjA4NGI5Nzg5MWY5OWQ0Y2RlZmMxNjlhMDI5ZTQzMWNhNzcyYmExYmJhNDI2ZmNlNmYwMWQ4ZTI4NjAxNGU1YWNjNjZiNzk5ZTRkYjYyYmQ0NzgzMzIyZjhhMzJmZjc4ZTBkZTM5NTdkZjUwY2UxMDg3MWY0ZTA2ODBkZjRlOGNhMzk2MGFmOWJjNmY0ZWZhOGViMzk2MmQxOGY0NzRlYjE3OGMzMjY1Y2M0NmI4ZjJmZjVhYjFhNzQ0OWZlYTI5N2RmY2ZhYmZhMDFmMjhhYmJiNzI4OWJiMzU0YjY5MWI1NjY0ZWM2ZDA5OGFmNTFiZTE5OTQ3ZWM1YmE3ZWJkNjYzODBkMTE0MTk1M2JhNzhkNGFhNTQwMTY3OWZhN2IwYTQ0ZGIxOTgxZjg2NGQzNTM1YzQ1YWZlNGM2MTE4M2Q1YjBhZDUxZmFlNzFjYTA3ZTM0MjQwMjgzOTU5Zjc1MzBhMzJjNzBkOTVhMDg4ZTUwMWMyMzAwNTlmMzMzYjA2NzA4MjUwMDllN2UyMjEwM2VmMjI5MzU4MzBkZjFmYWM4ZWY4NzdmNWYzNDI2ZGQ1NGY3ZDExMjhkZDg3MWFkOWE3ZDA4OGY5NGMwZTg3MTIwMTMyOTViOGQ2OWFlNzYyM2I4ODA5NzhjMmQzYzZhZDI2ZGM0NzhmOGRjNDdmNWMwYWRjYzYxODY2NWRjM2RjMjA1YTkwNzFiMmYyMTkxZTE2Y2FjNWJkODliYjU5MTQ4ZmM3MTk2MzM3NTIzMDNhYTA4ZTUxOGRiYzM4OWYwYTU0ODJjYWFhNGM1MDdiODcyOWE2ZjNlZGQwNjFlZmIzOTAyNmNlY2M2Mzk5ZjUxOTcxY2Y3MzgxZDYwNWUxNDRhNTkyOGM4YzJkMWFkNzQ2N2IwNWRhMmYyMDJmNGYzMjM0ZTFhZmYxOWEwMTk4YTI4Njg1NzIxYzNkMmQ1MjMxMWM3MjFlM2ZkY2JhZjMwMjE0Y2RjM2FjZmY4YzQzMzg4MGUxMDRmYjYzZjJkZjdjZTY5YTk3ODU3ODE5YmE3YWMwMGFjOGVhZTE5Njk3NjRmZGU4ZjY4Y2Y4ZTA5MTZkN2UwYzE1MTE0N2Q0OTQ0Zjk5ZjQyYWU1MGYzMGUxYzc5YTQyZDJiNmM1MTg4ZDEzM2QzY2JiZjY5MDk0MDI3YjM1NGIyOTVjY2QwZjdkYzVhODdkNzM2MzhiZDk4ZWJmYjAwMzgzY2EwZmE2OWNiOGRjYjM1YTEyNTEwZTVlMDdhZDg3ODkwNDdkMGI2Mzg0MWExYmI5Mjg3MzdlOGIwYTBjMzMyNTRmNDdhYThiZmJlMzM0MWEwOWMyYjc2ZGJjZWZhNjdlMzBkZjMwMGQzNGY3Yjg0NjVjNGY4NjllNTFiNmJjZmU2Y2Y2OGIyMzgzNTlhNjQ1MDM2YmY3ZjYzZjAyOTI0ZTA4N2NlNzQ1N2U0ODNiNjAyNWE4NTk5MDNjYjQ4NDU3NGFhM2IxMmNmOTQ2ZjMyMTI3ZDUzN2MzM2JlZTMxNDFiNWRiOTZkMTBhMTQ4YzUwYWUwNDVmMjg3MjEwNzU3NzEwZDY4NDZlMDRiMjAyZjc5ZTg3ZGQ5YTU2YmM2ZGExNWY4NGE3N2E3ZjYzOTM1ZTFkZWUwMDMwOWNkMjc2YThlNzE3NmNiMDRkYTZiYjBlOTAwOTUzNDQzODczMmNiNDJkMDA4MDA4ODUzZDM4ZDE5YmViYTQ2ZTYxMDA2ZTMwZjdlZmQxYmM3YzI5MDZiMDI0ZTRmZjg5OGExYjU4YzQ0OGQ2OGI0M2M2YWI2M2YzNGY4NWIzYWM2YWE0NDc1ODY3ZTUxYjU4Mzg0NGNiMjM4MjlmNGIzMGY0YmRkODE3ZDg4ZTJlZjNlN2I0ZmMwYTYyNDM5NWIwNWVjNWU4Njg2MDgyYjI0ZDI5ZmVmMmIwZDNjMjllMDMxZDVmOTRmNTA0YjFkM2RmOTM2MWViNWZmYmFkYjI0MmU2NmMzOWE4MDk0Y2ZlNjJmODVmNjM5ZjNmZDY1ZmM4YWUwYzc0YThmNGM2ZTFkMDcwYjkxODNhNDM0YzcyMmNhYWEwMjI1ZjhiY2Q2ODYxNGQ2ZjA3MzhlZDYyZjg0ODRlYzk2MDc3ZDE1NWMwOGUyNmM0NmJlMjYyYTczZTM1NTE2OThiZDcwZDhkNTYxMGNmMzdjNGMzMDZlZWQwNGJhNmEwNDBhOWMzZTZkN2UxNWU4YWNkYTE3ZjQ3N2MyNDg0Y2Y1YzU2YjgxMzMxMzkyN2JlODM4N2IxMDI0Zjk5NWU5OGZjODdmMTAyOTA5MWMwMTQyNGJkYzJiMjk2YzJlYWRiN2QyNWIzZTc2MmEyZmQwYzJkY2QxNzI3ZGRmOTFkYjk3YzU5ODQzMDUyNjVmMzY5NWE3ZjU0NzJmMmQ3MmM5NGQ2OGMyNzkxNGYxNGY4MmFhOGRkNWZlNGUyMzQ4YjBjYTk2N2EzZjk4NjI2YTA5MTU1MmY1ZDBmZmEyYmYxMDM1MGQyM2M5OTYyNTZjMDFmZGVmZmIyYzJjNjEyNTE5ODY5Zjg3N2U0OTI5YzZlOTVmZjE1MDQwZjE0ODVlMjJlZDE0MTE5ODgwMjMyZmVmM2I1N2IzODQ4ZjE1YjE3NjZhNTU1Mjg3OWRmOGYwNiI6ImNiYTllM2ViMTJhNmY4M2RiMTFlOGE2ZmY0MGQxMDQ5ODU0ZWUwOTQ0MTZiYzUyN2ZlYTkzMWQ4NTg1NDI4YThlZDYyNDJjZTgxZjY3NjliMzZlMjEyM2E1YzIzNDgzZSIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6IiI6ImNmODNlMTM1N2VlZmI4YmRmMTU0Mjg1MGQ2NmQ4MDA3ZDYyMGU0MDUwYjU3MTVkYzgzZjRhOTIxZDM2Y2U5Y2U0N2QwZDEzYzVkODVmMmIwZmY4MzE4ZDI4NzdlZWMyZjYzYjkzMWJkNDc0MTdhODFhNTM4MzI3YWY5MjdkYTNlIgorCitnZW5lcmljIFNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBNTEyIjoiOGYiOiJlNGNkMmQxOTkzMWI1YWFkOWM5MjBmNDVmNTZmNmNlMzRlM2QzOGM2ZDMxOWE2ZTExZDA1ODhhYjhiODM4NTc2ZDZjZTZkNjhlZWE3YzgzMGRlNjZlMmJkOTY0NThiZmE3YWFmYmNiZWM5ODFkNGVkMDQwNDk4YzNkZDk1ZjIyYSIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6ImU3MjQiOiI3ZGJiNTIwMjIxYTcwMjg3YjIzZGJjZjYyYmZjMWI3MzEzNmQ4NThlODYyNjY3MzJhN2ZmZmE4NzVlY2FhMmMxYjhmNjczYjVjMDY1ZDM2MGM1NjNhN2I5NTM5MzQ5ZjVmNTliZWY4YzBjNTkzZjk1ODdlM2NkNTBiYjI2YTIzMSIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6ImRlNGM5MCI6IjMzY2U5ODI4MTA0NWE1YzRjOWRmMDM2M2Q4MTk2ZjFkN2RmY2Q1ZWU0NmFjODk3NzZmZDhhNDM0NGMxMmYxMjNhNjY3ODhhZjViZDQxY2VmZjE5NDFhYTU2Mzc2NTRiNDA2NGM4OGMxNGUwMDQ2NWFiNzlhMmZjNmM5N2UxMDE0IgorCitnZW5lcmljIFNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBNTEyIjoiYTgwMWU5NGIiOiJkYWRiMWI1YTI3ZjlmZWNlOGQ4NmFkYjJhNTE4NzliZWIxNzg3ZmYyOGY0ZThjZTE2MmNhZDdmZWUwZjk0MmVmY2FiYmY3MzhiYzZmNzk3ZmM3Y2M3OWEzYTc1MDQ4Y2Q0YzgyY2EwNzU3YTMyNDY5NWJmYjE5YTU1N2U1NmUyZiIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6Ijk0MzkwZDM1MDIiOiJiNjE3NWM0YzRjY2NmNjllMGNlNWYwMzEyMDEwODg2ZWE2YjM0ZDQzNjczZjk0MmFlNDI0ODNmOWNiYjdkYTgxN2RlNGUxMWI1ZDU4ZTI1YTNkOWJkNzIxYTIyY2RmZmUxYzQwNDExY2M0NWRmMTkxMWZhNTUwNjEyOWI2OTI5NyIKKworZ2VuZXJpYyBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXg6IlNIQTUxMiI6IjQ5Mjk3ZGQ2M2U1ZiI6IjFmY2MxZTZmNjg3MDg1OWQxMTY0OWY1ZTUzMzZhOWNkMTYzMjljMDI5YmFmMDRkNWE2ZWRmMjU3ODg5YTJlOTUyMmI0OTdkZDY1NmJiNDAyZGE0NjEzMDdjNGVlMzgyZTJlODkzODBjOGU2ZTZlNzY5N2YxZTQzOWY2NTBmYTk0IgorCitnZW5lcmljIFNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleDoiU0hBNTEyIjoiOTkwZDFhZTcxYTYyZDdiZGE5YmZkYWExNzYyYTY4ZDI5NmVlZTcyYTRjZDk0NmYyODdhODk4ZmJhYmMwMDJlYTk0MWZkOGQ0ZDk5MTAzMGI0ZDI3YTYzN2NjZTUwMWE4MzRiYjk1ZWFiMWI3ODg5YTNlNzg0Yzc5NjhlNjdjYmY1NTIwMDZiMjA2YjY4Zjc2ZDkxOTEzMjc1MjRmY2MyNTFhZWI1NmFmNDgzZDEwYjRlMGM2YzVlNTk5ZWU4YzBmZTRmYWVjYTgyOTM4NDRhODU0N2M2YTlhOTBkMDkzZjI1MjY4NzNhMTlhZDRhNWU3NzY3OTRjNjhjNzQyZmI4MzQ3OTNkMmRmY2I3ZmVhNDZjNjNhZjRiNzBmZDExY2I2ZTQxODM0ZTcyZWU0MGVkYjA2N2IyOTJhNzk0OTkwYzI4OGQ1MDA3ZTczZjM0OWZiMzgzYWY2YTc1NmI4MzAxYWQ2ZTVlMGFhOGNkNjE0Mzk5YmIzYTQ1MjM3NmIxNTc1YWZhNmJkYWVhYWZjMjg2Y2IwNjRiYjkxZWRlZjk3YzYzMmI2YzExMTNkMTA3ZmE5M2EwOTA1MDk4YTEwNTA0M2MyZjA1Mzk3ZjcwMjUxNDQzOWEwOGE5ZTVkZGMxOTYxMDA3MjFkNDVjOGZjMTdkMmVkNjU5Mzc2ZjhhMDBiZDVjYjlhMDg2MGUyNmQ4YTI5ZDhkNmFhZjUyZGU5N2U5MzQ2MDMzZDZkYjUwMWEzNWRiYmFmOTdjMjBiODMwY2QyZDE4YzI1MzJmM2E1OWNjNDk3ZWU2NGMwZTU3ZDhkMDYwZTUwNjliMjhkODZlZGYxYWRjZjU5MTQ0YjIyMWNlM2RkYWVmMTM0YjMxMjRmYmM3ZGQwMDAyNDBlZmYwZjVmNWY0MWU4M2NkN2Y1YmIzN2M5YWUyMTk1M2ZlMzAyYjBmNmU4YjY4ZmE5MWM2YWI5OTI2NWM2NGIyZmQ5Y2Q0OTQyYmUwNDMyMWJiNWQ2ZDcxOTMyMzc2YzZmMmY4OGUwMjQyMmJhNmE1ZTJjYjc2NWRmOTNmZDVkZDA3MjhjNmFiZGFmMDNiY2UyMmUwNjc4YTU0NGUyYzM2MzZmNzQxYjZmNDQ0N2VlNThhOGZjNjU2YjQzZWY4MTc5MzIxNzZhZGJmYzJlMDRiMmM4MTJjMjczY2Q2Y2JmYTQwOThmMGJlMDM2YTM0MjIxZmEwMjY0M2Y1ZWUyZTBiMzgxMzVmMmExOGVjZDJmMTZlYmM0NWY4ZWIzMWI4YWI5NjdhMTU2N2VlMDE2OTA0MTg4OTEwODYxY2ExZmEyMDVjN2FkYWExOTRiMjg2ODkzZmZlMmY0ZmJlMDM4NGMyYWVmNzJhNDUyMmFlYWZkM2ViYzcxZjlkYjcxZWVlZWY4NmM0ODM5NGExYzg2ZDViMzZjMzUyY2MzM2EwYTJjODAwYmM5OWU2MmZkNjViM2EyZmQ2OWUwYjUzOTk2ZWMxM2Q4Y2U0ODNjZTkzMTllZmQ5YTg1YWNlZmFiZGI1MzQyMjI2ZmViYjgzZmQxZGFmNGIyNDI2NWY1MGM2MWM2ZGU3NDA3N2VmODliNmZlY2Y5ZjI5YTFmODcxYWYxZTlmODliMmQzNDVjZGE3NDk5YmQ0NWM0MmZhNWQxOTVhMWUxYTZiYTg0ODUxODg5ZTczMGRhM2IyYjkxNmU5NjE1MmFlMGM5MjE1NGI0OTcxOTg0MWRiN2U3Y2M3MDdiYThhNWQ3YjEwMWViNGFjN2I2MjliYjMyNzgxNzkxMGZmZjYxNTgwYjU5YWFiNzgxODJkMWEyZTMzNDczZDA1YjAwYjE3MGIyOWUzMzE4NzA4MjZjZmU0NWFmMjA2YWE3ZDAyNDZiYmQ4NTY2Y2E3Y2ZiMmQzYzEwYmZhMWRiN2RkNDhkZDc4NjAzNjQ2OWNlNzI4MjA5M2Q3OGI1ZTFhNWIwZmM4MWE1NGM4ZWQ0Y2VhYzFlNTMwNTMwNWU3ODI4NGFjMjc2ZjVkNzg2MjcyN2FmZjI0NmUxN2FkZGRlNTBjNjcwMDI4ZDU3MmNiZmMwYmUyZTRmOGIyZWIyOGZhNjhhZDdiNGM2YzJhMjM5YzQ2MDQ0MWJmYjVlYTA0OWYyM2IwODU2M2I0ZTQ3NzI5YTU5ZTU5ODZhNjFhNjA5M2RiZDU0ZjhjMzZlYmU4N2VkYWUwMWYyNTFjYjA2MGFkMTM2NGNlNjc3ZDdlOGQ1YTRhNGNhOTY2YTcyNDFjYzM2MGJjMmFjYjI4MGU1ZjllOWMxYjAzMmFkNmExODBhMzVlMGM1MTgwYjlkMTZkMDI2Yzg2NWIyNTIwOThjYzFkOTliYTczNzVjYTMxYzc3MDJjMGQ5NDNkNWUzZGQyZjY4NjFmYTU1YmQ0NmQ5NGI2N2VkM2U1MmVjY2Q4ZGQwNmQ5NjhlMDE4OTdkNmRlOTdlZDMwNThkOTFkZCI6IjhlNGJjNmY4YjhjNjBmZTRkNjhjNjFkOWIxNTljODY5M2MzMTUxYzQ2NzQ5YWY1OGRhMjI4NDQyZDkyN2YyMzM1OWJkNmNjZDZjMmVjOGZhM2YwMGE4NmNlY2JmYTcyOGUxYWQ2MGI4MjFlZDIyZmNkMzA5YmE5MWE0MTM4YmM5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiIiOiJkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiJhOCI6Ijk5ZjJhYTk1ZTM2Zjk1YzJhY2IwZWFmMjM5OThmMDMwNjM4ZjNmMTUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleF9tdWx0aToiU0hBMSI6IjMwMDAiOiJmOTQ0ZGNkNjM1Zjk4MDFmN2FjOTBhNDA3ZmJjNDc5OTY0ZGVjMDI0IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiI0Mjc0OWUiOiJhNDQ0MzE5ZTliNmNjMWU4NDY0YzUxMWVjMDk2OWMzN2Q2YmIyNjE5IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiI5ZmMzZmUwOCI6IjE2YTBmZjg0ZmNjMTU2ZmQ1ZDNjYTNhNzQ0ZjIwYTIzMmQxNzIyNTMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleF9tdWx0aToiU0hBMSI6ImI1YzFjNmYxYWYiOiJmZWM5ZGVlYmZjZGVkYWY2NmRkYTUyNWUxYmU0MzU5N2E3M2ExZjkzIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittZF9oZXhfbXVsdGk6IlNIQTEiOiJlYzI5NTYxMjQ0ZWRlNzA2YjZlYjMwYTFjMzcxZDc0NDUwYTEwNWMzZjk3MzVmN2ZhOWZlMzhjZjY3ZjMwNGE1NzM2YTEwNmU5MmUxNzEzOWE2ODEzYjFjODFhNGYzZDNmYjk1NDZhYjQyOTZmYTlmNzIyODI2YzA2Njg2OWVkYWNkNzNiMjU0ODAzNTE4NTgxM2UyMjYzNGE5ZGE0NDAwMGQ5NWEyODFmZjlmMjY0ZWNjZTBhOTMxMjIyMTYyZDAyMWNjYTI4ZGI1ZjNjMmFhMjQ5NDVhYjFlMzFjYjQxM2FlMjk4MTBmZDc5NGNhZDVkZmFmMjllYzQzY2IzOGQxOThmZTRhZTFkYTIzNTk3ODAyMjE0MDViZDY3MTJhNTMwNWRhNGIxYjczN2ZjZTdjZDIxYzBlYjc3MjhkMDgyMzVhOTAxMSI6Ijk3MDExMWM0ZTc3YmNjODhjYzIwNDU5YzAyYjY5YjRhYThmNTgyMTciCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21kX2hleF9tdWx0aToiU0hBMSI6IjVmYzJjM2Y2YTdlNzlkYzk0YmU1MjZlNTE2NmEyMzg4OTlkNTQ5MjdjZTQ3MDAxOGZiZmQ2NjhmZDlkZDk3Y2JmNjRlMmM5MTU4NGQwMWRhNjNiZTNjYzlmZGZmOGFkZmVmYzNhYzcyOGUxZTMzNWI5Y2RjODdmMDY5MTcyZTMyM2QwOTRiNDdmYTFlNjUyYWZlNGQ2YWExNDdhOWY0NmZkYTMzY2FjYjY1ZjNhYTEyMjM0NzQ2YjkwMDdhOGM4NWZlOTgyYWZlZDc4MTUyMjFlNDNkYmE1NTNkOGZlOGEwMjJjZGFjMWI5OWVlZWVhMzU5ZTVhOWQyZTcyZTM4MmRmZmE2ZDE5ZjM1OWY0ZjI3ZGMzNDM0Y2QyN2RhZWVkYThlMzg1OTQ4NzMzOTg2NzgwNjVmYmIyMzY2NWFiYTkzMDlkOTQ2MTM1ZGEwZTRhNGFmZGFkZmYxNGRiMThlODVlNzFkZDkzYzNiZjlmYWY3ZjI1YzgxOTRjNDI2OWIxZWUzZDk5MzQwOTdhYjk5MDAyNWQ5YzNhYWY2M2Q1MTA5ZjUyMzM1ZGQzOTU5ZDM4YWU0ODUwNTBlNGJiYjYyMzU1NzRmYzAxMDJiZThmN2EzMDZkNmU4ZGU2YmE2YmVjZjgwZjM3NDE1YjU3Zjk4OThhNTgyNGU3NzQxNDE5NzQyMmJlM2QzNmE2MDgwIjoiMDQyM2RjNzZhODc5MTEwN2QxNGUxM2Y1MjY1YjM0M2YyNGNjMGYxOSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiMGY4NjVmNDZhOGYzYWVkMmRhMTg0ODJhYTA5YThmMzkwZGM5ZGEwN2Q1MWQxYmQxMGZlMGJmNWYzOTI4ZDU5MjdkMDg3MzNkMzIwNzU1MzVhNmQxYzhhYzFiMmRjNmJhMGYyZjYzM2RjMWFmNjhlM2YwZmEzZDg1ZTZjNjBjYjdiNTZjMjM5ZGMxNTE5YTAwN2VhNTM2YTA3YjUxOGVjY2EwMmE2YzMxYjQ2Yjc2ZjAyMTYyMGVmM2ZjNjk3NjgwNDAxODM4MGU1YWI5YzU1OGViZmM1Y2IxYzllZDJkOTc0NzIyYmY4YWI2Mzk4ZjFmMmI4MmZhNTA4M2Y4NWMxNmE1NzY3YTNhMDcyNzFkNjc3NDNmMDA4NTBjZThlYzQyOGM3ZjIyZjFjZjAxZjk5ODk1YzBjODQ0ODQ1YjA2YTA2Y2VjYjBjNmNmODNlYjU1YTFkNGViYzQ0YzJjMTNmNmY3YWE1ZTBlMDhhYmZkODRlNzg2NDI3OTA1N2FiYzQ3MWVlNGE0NWRiYmI1Nzc0YWZhMjRlNTE3OTFhMGVhZGExMTA5M2I4ODY4MWZlMzBiYWEzYjJlOTQxMTNkYzYzMzQyYzUxY2E1ZDFhNjA5NmQwODk3YjYyNmU0MmNiOTE3NjEwNTgwMDhmNzQ2ZjM1NDY1NDY1NTQwYWQ4YzZiOGI2MGY3ZTE0NjFiM2NlOWU2NTI5NjI1OTg0Y2I4YzdkNDZmMDdmNzM1YmUwNjc1ODhhMDExN2YyM2UzNGZmNTc4MDBlMmJiZTlhMTYwNWZkZTYwODdmYjE1ZDIyYzVkM2FjNDc1NjZiOGM0NDhiMGNlZTQwMzczZTViYTZlYWEyMWFiZWU3MTM2NmFmYmIyN2RiYmQzMDA0NzdkNzBjMzcxZTdiODk2MzgxMmY1ZWQ0ZmI3ODRmYjJmM2JkMWQzYWZlODgzY2RkNDdlZjMyYmVhZWEiOiI2NjkyYTcxZDczZTAwZjI3ZGY5NzZiYzU2ZGY0OTcwNjUwZDkwZTQ1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTEgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWRfaGV4X211bHRpOiJTSEExIjoiODIzNjE1Mzc4MWJkMmYxYjgxZmZlMGRlZjFiZWI0NmY1YTcwMTkxMTQyOTI2NjUxNTAzZjFiM2JiMTAxNmFjZGI5ZTdmN2FjY2VkOGRkMTY4MjI2ZjExOGZmNjY0YTAxYTg4MDAxMTZmZDAyMzU4N2JmYmE1MmEyNTU4MzkzNDc2ZjVmYzY5Y2U5YzY1MDAxZjIzZTcwNDc2ZDJjYzgxYzk3ZWExOWNhZWIxOTRlMjI0MzM5YmNiMjNmNzdhODNmZWFjNTA5NmY5YjMwOTBjNTFhNmVlNmQyMDRiNzM1YWE3MWQ3ZTk5NmQzODBiODA4MjJlNGRmZDQzNjgzYWY5Yzc0NDI0OThjYWNiZWE2NDg0MmRmZGEyMzhjYjA5OTkyN2M2ZWZhZTA3ZmRmN2IyM2E0ZTQ0NTZlMDE1MmIyNDg1M2ZlMGQ1ZGU0MTc5OTc0YjJiOWQ0YTFjZGJlZmNiYzAxZDhkMzExYjVkZGEwNTkxMzYxNzZlYTY5OGFiODJhY2YyMGRkNDkwYmU0NzEzMGIxMjM1Y2I0OGY4YTY3MTA0NzNjZmM5MjNlMjIyZDk0YjU4MmY5YWUzNmQ0Y2EyYTMyZDE0MWI4ZThjYzM2NjM4ODQ1ZmJjNDk5YmNlMTc2OThjM2ZlY2FlMjU3MmRiYmQ0NzA1NTI0MzBkN2VmMzBjMjM4YzIxMjQ0NzhmMWY3ODA0ODM4MzliNGZiNzNkNjNhOTQ2MDIwNjgyNGE1YjZiNjUzMTViMjFlM2MyZjI0Yzk3ZWU3YzBlNzhmYWFkM2RmNTQ5YzdjYThlZjI0MTg3NmQ5YWFmZTlhMzA5ZjZkYTM1MmJlYzJjYWFhOTJlZThkY2EzOTI4OTliYTY3ZGZlZDkwYWVmMzNkNDFmYzI0OTRiNzY1Y2IzZTI0MjJjOGU1OTVkYWJiZmFjYTIxNzc1NzQ1M2ZiMzIyYTEzMjAzZjQyNWY2MDczYTk5MDNlMmRjNTgxOGVlMWRhNzM3YWZjMzQ1ZjAwNTc3NDRlM2E1NmUxNjgxYzk0OWViMTIyNzNhM2JmYzIwNjk5ZTQyM2I5NmU0NGJkMWZmNjJlNTBhODQ4YTg5MDgwOWJmZTE2MTFjNjc4N2QzZDc0MTEwMzMwOGY4NDlhNzkwZjljMDE1MDk4Mjg2ZGJhY2ZjMzRjMTcxOGIyYzJiNzdlMzIxOTRhNzVkZGEzNzk1NGEzMjBmYTY4NzY0MDI3ODUyODU1YTdlNWI1Mjc0ZWIxZTJjYmNkMjcxNjFkOThiNTlhZDI0NTgyMjAxNWY0OGFmODJhNDVjMGVkNTliZTk0ZjlhZjAzZDk3MzYwNDg1NzBkNmUzZWY2M2IxNzcwYmM5OGRmYjc3ZGU4NGIxYmIxNzA4ZDg3MmI2MjVkOWFiOWIwNmMxOGU1ZGJiZjM0Mzk5MzkxZjBmOGFhMjZlYzBkYWM3ZmY0Y2I4ZWM5N2I1MmJjYjk0MmZhNmRiMjM4NWRjZDFiM2I5ZDU2N2FhZWI0MjVkNTY3YjBlYmUyNjcyMzU2NTFhMWVkOWJmNzhmZDkzZDNjMWRkMDc3ZmUzNDBiYjA0YjAwNTI5YzU4ZjQ1MTI0YjcxN2MxNjhkMDdlOTgyNmUzMzM3Njk4OGJjNWNmNjI4NDVjMjAwOTk4MGE0ZGZhNjlmYmM3ZTVhMGIxYmIyMGE1OTU4Y2E5NjdhZWM2OGViMzFkZDhmY2NjYTlhZmNkMzBhMjZiYWIyNjI3OWYxYmY2NzI0ZmYiOiIxMTg2M2I0ODM4MDllZjg4NDEzY2E5YjAwODRhYzRhNTM5MDY0MGFmIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyMjQiOiIiOiJkMTRhMDI4YzJhM2EyYmM5NDc2MTAyYmIyODgyMzRjNDE1YTJiMDFmODI4ZWE2MmFjNWIzZTQyZiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiZmYiOiJlMzNmOWQ3NWU2YWUxMzY5ZGJhYmY4MWI5NmI0NTkxYWU0NmJiYTMwYjU5MWE2YjZjNjI1NDJiNSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiOTg0YyI6IjJmYTlkZjkxNTdkOWUwMjdjZmJjNGM2YTlkZjMyZTFhZGMwY2JlMjMyOGVjMmE2M2M1YWU5MzRlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyMjQiOiI1MGVmZDAiOiJiNWE5ODIwNDEzYzJiZjgyMTFmYmJmNWRmMTMzNzA0M2IzMmZhNGVhZmFmNjFhMGM4ZTljY2VkZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiZTVlMDk5MjQiOiJmZDE5ZTc0NjkwZDI5MTQ2N2NlNTlmMDc3ZGYzMTE2MzhmMWMzYTQ2ZTUxMGQwZTQ5YTY3MDYyZCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21kX2hleF9tdWx0aToiU0hBMjI0IjoiMjFlYmVjYjkxNCI6Ijc4ZjRhNzFjMjFjNjk0NDk5Y2UxYzc4NjY2MTFiMTRhY2U3MGQ5MDUwMTJjMzU2MzIzYzdjNzEzIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTIyNCBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyMjQiOiJmYzQ4ODk0N2MxYTdhNTg5NzI2YjE1NDM2YjRmM2Q5NTU2MjYyZjk4ZmM2NDIyZmM1Y2RmMjBmMGZhZDdmZTQyN2EzNDkxYzg2ZDEwMWZmZTZiNzUxNGYwNjI2OGY2NWIyZDI2OWIwZjY5YWQ5YTk3ODQ3ZWZmMWMxNmEyNDM4Nzc1ZWI3YmU2ODQ3Y2NmMTFjYjhiMmU4ZGNkNjY0MGIwOTViNDljMDY5M2ZlM2NmNGE2NmUyZDliN2FkNjhiZmYxNGYzYWQ2OWFiZjQ5ZDBhYmEzNmNiZTA1MzUyMDJkZWI2NTk5YTQ3MjI1ZWYwNWJlYjM1MTMzNWNkN2JjMGY0ODBkNjkxMTk4YzdlNzEzMDVmZmQ1M2IzOWQzMzI0MmJiNzljZmQ5OGJmZDY5ZTEzN2I1ZDE4YjJiODlhYzlhY2UwMWM4ZGJkY2YyNTMzY2NlMzY4MmVjYzUyMTE4ZGUwYzEwNjJlYzIxMjZjMmU2NTdkNmVhM2Q5ZTIzOThlNzA1ZDRiMGIxZjFjZWVjYjI2NmRmZmM0ZjMxYmY0Mjc0NGZiMWU5MzhkYzIyYTg4OTkxOWVlMWU3M2Y0NjNmNzg3MWZlZDcyMDUxOWUzMjE4NjI2NGI3ZWYyYTBlNWQ5YTE4ZTZjOTVjMDc4MTg5NGY3Nzk2N2YwNDg5NTFkZWMzYjRkODkyYTM4NzEwYjFlMzQzNmQzYzI5MDg4ZWI4YjNkYTE3ODljMjVkYjNkM2JjNmMyNjA4MTIwNmU3MTU1ZDIxMGE4OWI4MGNhNmVhODc3YzQxZmY5OTQ3YzBmMjU2MjVkY2IxMTgyOTRhMTYzNTAxZjYyMzljMzI2NjYxYTk1OGZkMTJkYTRjZDE1YTg5OWY4Yjg4Y2M3MjM1ODkwNTZlYWVjNWFhMDRhNGNmNWRiYjZmNDgwZjk2NjA0MjNjY2YzOGM0ODZlMjEwNzA3ZTBmYjI1ZTFmMTI2Y2ViMjYxNmY2M2UxNDdhNjQ3ZGFiMGFmOWViZTg5ZDY1NDU4YmY2MzYxNTRhNDZlNGNhYjk1ZjVlZTYyZGEyYzc5NzRjZDE0YjkwZDNlNGY5OWY4MTczM2U4NWIzYzFkNWRhMmI1MDhkOWI5MGY1ZWVkN2VmZjBkOWM3NjQ5ZGU2MmJlZTAwMzc1NDU0ZmVlNGEzOTU3NmE1YmJmZGFlNDI4ZTdmODA5N2JkZjc3OTdmMTY3Njg2Y2I2ODQwN2U0OTA3OWU0NjExZmYzNDAyYjYzODRiYTdiN2U1MjJiZDJiYjExY2U4ZmQwMmVhNGMxNjA0ZDE2M2FjNGY2ZGRlNTBiOGIxZjU5M2Y3ZWRhYWRlYWMwODY4ZWQ5N2RmNjkwMjAwNjgwYzI1ZjBmNWQ4NTQzMWE1MjllNGYzMzkwODlkY2RlZGExMDVlNGVlNTFkZWFkNzA0Y2RmNWE2MDVjNTVmYjA1NWM5YjBlODZiOGJhMWI1NjRjMGRlYTNlYjc5MGE1OTVjYjEwM2NiMjkyMjY4YjA3YzVlNTkzNzFlMWE3ZWY1OTdjZDRiMjI5NzdhODIwNjk0YzlmOWFlYjU1ZDlkZTNlZjYyYjc1ZDZlNjU2ZTMzMzY2OThkOTYwYTM3ODdiZjhjZjViOTI2YTdmYWVlZjUyYWUxMjhiY2I1ZGM5ZTY2ZDk0YjAxNmM3YjhlMDM0ODc5MTcxYTJkOTFjMzgxZjU3ZTZhODE1YjYzYjVlZTZhNmQyZmY0MzViNDlmMTRjOTYzOTY2OTYwMTk0NDMwZDc4ZjhmODc2MjdhNjc3NTdmYjM1MzJiMjg5NTUwODk0ZGE2ZGNlNDgxN2E0ZTA3ZjRkNTY4NzdhMTEwMmZmY2M4YmVmYTVjOWY4ZmNhNmE0NTc0ZDkzZmY3MDM3NmM4ODYxZTBmODEwOGNmOTA3ZmNlNzdlY2I0OTcyOGY4NmYwMzRmODAyMjRiOTY5NTY4MmUwODI0NDYyZjc2Y2RiMWZkMWFmMTUxMzM3YjBkODU0MTkwNDdhN2FhMjg0NzkxNzE4YTQ4NjBjZDU4NmY3ODI0Yjk1YmM4MzdiNmZkNGY5YmU1YWFkZTY4NDU2ZTIwMzU2YWE0ZDk0M2RhYzM2YmY4YjY3YjllOGY5ZDAxYTAwZmNkYTc0Yjc5OGJhZmE3NDZjNjYxYjAxMGY3NWI1OTkwNGIyOWQwYzgwNDE1MDQ4MTFjNDA2NWY4MmNmMmVhZDU4ZDJmNTk1Y2JkOGJjM2U3MDQzZjRkOTQ1NzdiMzczYjdjZmUxNmEzNmZlNTY0ZjUwNWMwM2I3MGNmZWI1ZTVmNDExYzc5NDgxMzM4YWE2N2U4NmIzZjVhMmU3N2MyMWU0NTRjMzMzYWUzZGE5NDNhYjcyM2FiNWY0Yzk0MDM5NTMxOTUzNGE1NTc1ZjY0YWNiYTBkMGVjYzQzZjYwMjIxZWQzYmFkZjcyODljOWIzYTdiOTAzYTJkNmM5NGUxNWZhNGMzMTBkYzRmYTdmYWEwYzI0ZjQwNTE2MGExMDAyZGJlZjIwZTQxMDVkNDgxZGI5ODJmNzI0M2Y3OTQwMGE2ZTRjZDk3NTNjNGI5NzMyYTQ3NTc1ZjUwNGIyMGMzMjhmZTlhZGQ3ZjQzMmE0ZjA3NTgyOWRhMDdiNTNiNjk1MDM3ZGM1MTczN2QzY2Q3MzE5MzRkZjMzM2NkMWE1M2ZjZjY1YWEzMWJhYTQ1MGNhNTAxYTZmYWUyNmUzMjIzNDdlNjE4YzVhNDQ0ZDkyZTlmZWM1YTgyNjFhZTM4Yjk4ZmVlNWJlNzdjMDJjZWMwOWRkY2NkNWIzZGU5MjAzNiI6IjEzMDIxNDlkMWUxOTdjNDE4MTNiMDU0Yzk0MjMyOWQ0MjBlMzY2NTMwZjU1MTdiNDcwZTk2NGZlIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiIiOiJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiJiZCI6IjY4MzI1NzIwYWFiZDdjODJmMzBmNTU0YjMxM2QwNTcwYzk1YWNjYmI3ZGM0YjVhYWUxMTIwNGMwOGZmZTczMmIiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXhfbXVsdGk6IlNIQTI1NiI6IjVmZDQiOiI3YzRmYmY0ODQ0OThkMjFiNDg3YjlkNjFkZTg5MTRiMmVhZGFmMjY5ODcxMjkzNmQ0N2MzYWRhMjU1OGY2Nzg4IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiJiMGJkNjkiOiI0MDk2ODA0MjIxMDkzZGRjY2ZiZjQ2ODMxNDkwZWE2M2U5ZTk5NDE0ODU4ZjhkNzVmZjdmNjQyYzdjYTYxODAzIgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiJjOThjOGU1NSI6IjdhYmMyMmMwYWU1YWYyNmNlOTNkYmI5NDQzM2EwZTBiMmUxMTlkMDE0ZjhlN2Y2NWJkNTZjNjFjY2NjZDk1MDQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittZF9oZXhfbXVsdGk6IlNIQTI1NiI6IjgxYTcyM2Q5NjYiOiI3NTE2ZmI4YmIxMTM1MGRmMmJmMzg2YmMzYzMzYmQwZjUyY2I0YzY3YzZlNDc0NWUwNDg4ZTYyYzJhZWEyNjA1IgorCitnZW5lcmljIG11bHRpIHN0ZXAgU0hBLTI1NiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzcKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWRfaGV4X211bHRpOiJTSEEyNTYiOiI4MzkwY2YwYmUwNzY2MWNjNzY2OWFhYzU0Y2UwOWEzNzczM2E2MjlkNDVmNWQ5ODNlZjIwMWY5YjJkMTM4MDBlNTU1ZDliMTA5N2ZlYzNiNzgzZDdhNTBkY2I1ZTJiNjQ0Yjk2YTFlOTQ2M2YxNzdjZjM0OTA2YmYzODhmMzY2ZGI1YzJkZWVlMDRhMzBlMjgzZjc2NGE5N2MzYjM3N2EwMzRmZWZjMjJjMjU5MjE0ZmFhOTliYWJhZmYxNjBhYjBhYWE3ZTJjY2IwY2UwOWM2YjMyZmUwOGNiYzQ3NDY5NDM3NWFiYTcwM2ZhZGJmYTMxY2Y2ODViMzBhMTFjNTdmM2NmNGVkZDMyMWU1N2QzYWU2ZWJiMTEzM2M4MjYwZTc1YjkyMjRmYTQ3YTJiYjIwNTI0OWFkZDJlMmU2MmY4MTc0OTE0ODJhZTE1MjMyMmJlMDkwMDM1NWNkY2M4ZDQyYTk4ZjgyZTk2MWEwZGM2ZjUzN2I3YjQxMGVmZjEwNWY1OTY3M2JmYjc4N2JmMDQyYWEwNzFmN2FmNjhkOTQ0ZDI3MzcxYzY0MTYwZmU5MzgyNzcyMzcyNTE2YzIzMGMxZjQ1YzBkNmI2Y2NhN2YyNzRiMzk0ZGE5NDAyZDNlYWZkZjczMzk5NGVjNThhYjIyZDcxODI5YTk4Mzk5NTc0ZDRiNTkwOGE0NDdhNWE2ODFjYjBkZDUwYTMxMTQ1MzExZDkyYzIyYTE2ZGUxZWFkNjZhNTQ5OWYyZGNlYjRjYWU2OTQ3NzJjZTkwNzYyZWY4MzM2YWZlYzY1M2FhOWIxYTFjNDgyMGIyMjExMzZkZmNlODBkY2UyYmE5MjBkODhhNTMwYzk0MTBkMGE0ZTAzNThhM2ExMTA1MmU1OGRkNzNiMGIxNzllZjhmNTZmZTNiNWEyZDExN2E3M2EwYzM4YTEzOTJiNjkzOGU5NzgyZTBkODY0NTZlZTQ4ODRlM2MzOWQ0ZDc1ODEzZjEzNjMzYmM3OWJhYTA3YzBkMmQ1NTVhZmJmMjA3ZjUyYjdkY2ExMjZkMDE1YWEyYjk4NzNiM2ViMDY1ZTkwYjliMDY1YTUzNzNmZTFmYjFiMjBkNTk0MzI3ZDE5ZmJhNTZjYjgxZTdiNjY5NjYwNWZmYTU2ZWJhM2MyN2E0Mzg2OTdjYzIxYjIwMWZkN2UwOWYxOGRlZWExYjNlYTJmMGQxZWRjMDJkZjBlMjAzOTZhMTQ1NDEyY2Q2YjEzYzMyZDJlNjA1NjQxYzk0OGI3MTRhZWMzMGMwNjQ5ZGM0NDE0MzUxMWYzNWFiMGZkNWRkNjRjMzRkMDZmZTg2ZjM4MzZkZmU5ZWRlYjdmMDhjZmMzYmQ0MDk1NjgyNjM1NjI0MjE5MWY5OWY1MzQ3M2YzMmIwY2MwY2Y5MzIxZDZjOTJhMTEyZThkYjkwYjg2ZWU5ZTg3Y2MzMmQwMzQzZGIwMWUzMmNlOWViNzgyY2IyNGVmYmJiZWI0NDBmZTkyOWU4ZjJiZjhkZmIxNTUwYTNhMmU3NDJlOGI0NTVhM2U1NzMwZTllNmE3YTk4MjRkMTdhY2MwZjcyYTdmNjdlYWUwZjA5NzBmOGJkZTQ2ZGNkZWZhZWQzMDQ3Y2Y4MDdlN2YwMGE0MmU1ZmQxMWQ0MGY1ZTk4NTMzZDc1NzQ0MjViN2QyYmMzYjM4NDVjNDQzMDA4YjU4OTgwZTc2OGU0NjRlMTdjYzZmNmIzOTM5ZWVlNTJmNzEzOTYzZDA3ZDhjNGFiZjAyNDQ4ZWYwYjg4OWM5NjcxZTJmOGE0MzZkZGVlZmZjY2E3MTc2ZTliZjlkMTAwNWVjZDM3N2YyZmE2N2MyM2VkMWYxMzdlNjBiZjQ2MDE4YThiZDYxM2QwMzhlODgzNzA0ZmMyNmU3OTg5NjlkZjM1ZWM3YmJjNmE0ZmU0NmQ4OTEwYmQ4MmZhM2NkZWQyNjVkMGEzYjZkMzk5ZTQyNTFlNGQ4MjMzZGFhMjFiNTgxMmZkZWQ2NTM2MTk4ZmYxM2FhNWExY2Q0NmE1YjlhMTdhNGRkYzFkOWY4NTU0NGQxZDFjYzE2ZjNkZjg1ODAzOGM4ZTA3MWExMWE3ZTE1N2E4NWE2YThkYzQ3ZTg4ZDc1ZTcwMDlhOGIyNmZkYjczZjMzYTJhNzBmMWUwYzI1OWY4Zjk1MzNiOWI4ZjlhZjkyODhiNzI3NGYyMWJhZWVjNzhkMzk2ZjhiYWNkY2MyMjQ3MTIwN2Q5YjRlZmNjZDNmZWRjNWM1YTIyMTRmZjVlNTFjNTUzZjM1ZTIxYWU2OTZmZTUxZThkZjczM2E4ZTA2ZjUwZjQxOWU1OTllOWY5ZTRiMzdjZTY0M2ZjODEwZmFhYTQ3OTg5NzcxNTA5ZDY5YTExMGFjOTE2MjYxNDI3MDI2MzY5YTIxMjYzYWM0NDYwZmI0ZjcwOGY4YWUyODU5OTg1NmRiN2NiNmE0M2FjOGUwM2Q2NGE5NjA5ODA3ZTc2YzVmMzEyYjlkMTg2M2JmYTMwNGU4OTUzNjQ3NjQ4YjRmNGFiMGVkOTk1ZSI6IjQxMDljZGJlYzMyNDBhZDc0Y2M2YzM3ZjM5MzAwZjcwZmVkZTE2ZTIxZWZjNzdmNzg2NTk5ODcxNGFhZDBiNWUiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IiI6IjM4YjA2MGE3NTFhYzk2Mzg0Y2Q5MzI3ZWIxYjFlMzZhMjFmZGI3MTExNGJlMDc0MzRjMGNjN2JmNjNmNmUxZGEyNzRlZGViZmU3NmY2NWZiZDUxYWQyZjE0ODk4Yjk1YiIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleF9tdWx0aToiU0hBMzg0IjoiYWIiOiJmYjk0ZDViZTExODg2NWY2ZmNiYzk3OGI4MjVkYTgyY2ZmMTg4ZmFlYzJmNjZjYjg0YjI1MzdkNzRiNDkzODQ2OTg1NGIwY2E4OWU2NmZhMmUxODI4MzQ3MzY2MjlmM2QiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IjdjMjciOiIzZDgwYmU0NjdkZjg2ZDYzYWJiOWVhMWQzZjljYjM5Y2QxOTg5MGU3ZjJjNTNhNjIwMGJlZGM1MDA2ODQyYjM1ZTgyMGRjNGUwY2E5MGNhOWI5N2FiMjNlZjA3MDgwZmMiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IjMxZjVjYSI6Ijc4ZDU0Yjk0MzQyMWZkZjdiYTkwYTdmYjk2MzdjMjA3M2FhNDgwNDU0YmQ4NDFkMzlmZjcyZjQ1MTFmYzIxZmI2Nzc5N2I2NTJjMGM4MjMyMjkzNDI4NzNkM2JlZjk1NSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleF9tdWx0aToiU0hBMzg0IjoiN2JkZWUzZjgiOiI4YmRhZmJhMDc3N2VlNDQ2YzM0MzFjMmQ3YjFmYmI2MzEwODlmNzFkMmNhNDE3YWJjMWQyMzBlMWFiYTY0ZWMyZjFjMTg3NDc0YTZmNDA3N2QzNzJjMTRhZDQwN2Y5OWEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IjhmMDU2MDQ5MTUiOiI1MDRlNDE0YmYxZGIxMDYwZjE0YzhjNzk5ZTI1YjFlMGM0ZGNmMTUwNGViYmQxMjk5OThmMGFlMjgzZTZkZTg2ZTBkM2M3ZTg3OWM3M2VjM2IxODM2YzNlZTg5YzI2NDkiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTM4NCI6IjY2NWRhNmVkYTIxNCI6IjRjMDIyZjExMjAxMDkwODg0ODMxMmY4YjhmMTA3MjYyNWZkNWMxMDUzOTlkNTYyZWExZDU2MTMwNjE5YTdlYWM4ZGZjMzc0OGZkMDVlZTM3ZTRiNjkwYmU5ZGFhOTk4MCIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleF9tdWx0aToiU0hBMzg0IjoiN2Y0NmNlNTA2ZDU5M2M0ZWQ1M2M4MmVkZWI2MDIwMzdlMDQ4NWJlZmJlZTAzZjdmOTMwZmU1MzJkMThmZjJhM2Y1ZmQ2MDc2NjcyYzgxNDVhMWJmNDBkZDk0ZjdhYmFiNDdjOWFlNzFjMjM0MjEzZDJhZDEwNjljMmRhYzBiMGJhMTUyNTdhZTY3MmI4MjQ1OTYwYWU1NWJkNTAzMTVjMDA5N2RhYTNhMzE4NzQ1Nzg4ZDcwZDE0NzA2OTEwODA5Y2E2ZTM5NjIzN2ZlNDkzNGZhNDZmOWNlNzgyZDY2NjA2ZDhiZDZiMmQyODNiMTE2MDUxM2NlOWMyNGU5ZjA4NGI5Nzg5MWY5OWQ0Y2RlZmMxNjlhMDI5ZTQzMWNhNzcyYmExYmJhNDI2ZmNlNmYwMWQ4ZTI4NjAxNGU1YWNjNjZiNzk5ZTRkYjYyYmQ0NzgzMzIyZjhhMzJmZjc4ZTBkZTM5NTdkZjUwY2UxMDg3MWY0ZTA2ODBkZjRlOGNhMzk2MGFmOWJjNmY0ZWZhOGViMzk2MmQxOGY0NzRlYjE3OGMzMjY1Y2M0NmI4ZjJmZjVhYjFhNzQ0OWZlYTI5N2RmY2ZhYmZhMDFmMjhhYmJiNzI4OWJiMzU0YjY5MWI1NjY0ZWM2ZDA5OGFmNTFiZTE5OTQ3ZWM1YmE3ZWJkNjYzODBkMTE0MTk1M2JhNzhkNGFhNTQwMTY3OWZhN2IwYTQ0ZGIxOTgxZjg2NGQzNTM1YzQ1YWZlNGM2MTE4M2Q1YjBhZDUxZmFlNzFjYTA3ZTM0MjQwMjgzOTU5Zjc1MzBhMzJjNzBkOTVhMDg4ZTUwMWMyMzAwNTlmMzMzYjA2NzA4MjUwMDllN2UyMjEwM2VmMjI5MzU4MzBkZjFmYWM4ZWY4NzdmNWYzNDI2ZGQ1NGY3ZDExMjhkZDg3MWFkOWE3ZDA4OGY5NGMwZTg3MTIwMTMyOTViOGQ2OWFlNzYyM2I4ODA5NzhjMmQzYzZhZDI2ZGM0NzhmOGRjNDdmNWMwYWRjYzYxODY2NWRjM2RjMjA1YTkwNzFiMmYyMTkxZTE2Y2FjNWJkODliYjU5MTQ4ZmM3MTk2MzM3NTIzMDNhYTA4ZTUxOGRiYzM4OWYwYTU0ODJjYWFhNGM1MDdiODcyOWE2ZjNlZGQwNjFlZmIzOTAyNmNlY2M2Mzk5ZjUxOTcxY2Y3MzgxZDYwNWUxNDRhNTkyOGM4YzJkMWFkNzQ2N2IwNWRhMmYyMDJmNGYzMjM0ZTFhZmYxOWEwMTk4YTI4Njg1NzIxYzNkMmQ1MjMxMWM3MjFlM2ZkY2JhZjMwMjE0Y2RjM2FjZmY4YzQzMzg4MGUxMDRmYjYzZjJkZjdjZTY5YTk3ODU3ODE5YmE3YWMwMGFjOGVhZTE5Njk3NjRmZGU4ZjY4Y2Y4ZTA5MTZkN2UwYzE1MTE0N2Q0OTQ0Zjk5ZjQyYWU1MGYzMGUxYzc5YTQyZDJiNmM1MTg4ZDEzM2QzY2JiZjY5MDk0MDI3YjM1NGIyOTVjY2QwZjdkYzVhODdkNzM2MzhiZDk4ZWJmYjAwMzgzY2EwZmE2OWNiOGRjYjM1YTEyNTEwZTVlMDdhZDg3ODkwNDdkMGI2Mzg0MWExYmI5Mjg3MzdlOGIwYTBjMzMyNTRmNDdhYThiZmJlMzM0MWEwOWMyYjc2ZGJjZWZhNjdlMzBkZjMwMGQzNGY3Yjg0NjVjNGY4NjllNTFiNmJjZmU2Y2Y2OGIyMzgzNTlhNjQ1MDM2YmY3ZjYzZjAyOTI0ZTA4N2NlNzQ1N2U0ODNiNjAyNWE4NTk5MDNjYjQ4NDU3NGFhM2IxMmNmOTQ2ZjMyMTI3ZDUzN2MzM2JlZTMxNDFiNWRiOTZkMTBhMTQ4YzUwYWUwNDVmMjg3MjEwNzU3NzEwZDY4NDZlMDRiMjAyZjc5ZTg3ZGQ5YTU2YmM2ZGExNWY4NGE3N2E3ZjYzOTM1ZTFkZWUwMDMwOWNkMjc2YThlNzE3NmNiMDRkYTZiYjBlOTAwOTUzNDQzODczMmNiNDJkMDA4MDA4ODUzZDM4ZDE5YmViYTQ2ZTYxMDA2ZTMwZjdlZmQxYmM3YzI5MDZiMDI0ZTRmZjg5OGExYjU4YzQ0OGQ2OGI0M2M2YWI2M2YzNGY4NWIzYWM2YWE0NDc1ODY3ZTUxYjU4Mzg0NGNiMjM4MjlmNGIzMGY0YmRkODE3ZDg4ZTJlZjNlN2I0ZmMwYTYyNDM5NWIwNWVjNWU4Njg2MDgyYjI0ZDI5ZmVmMmIwZDNjMjllMDMxZDVmOTRmNTA0YjFkM2RmOTM2MWViNWZmYmFkYjI0MmU2NmMzOWE4MDk0Y2ZlNjJmODVmNjM5ZjNmZDY1ZmM4YWUwYzc0YThmNGM2ZTFkMDcwYjkxODNhNDM0YzcyMmNhYWEwMjI1ZjhiY2Q2ODYxNGQ2ZjA3MzhlZDYyZjg0ODRlYzk2MDc3ZDE1NWMwOGUyNmM0NmJlMjYyYTczZTM1NTE2OThiZDcwZDhkNTYxMGNmMzdjNGMzMDZlZWQwNGJhNmEwNDBhOWMzZTZkN2UxNWU4YWNkYTE3ZjQ3N2MyNDg0Y2Y1YzU2YjgxMzMxMzkyN2JlODM4N2IxMDI0Zjk5NWU5OGZjODdmMTAyOTA5MWMwMTQyNGJkYzJiMjk2YzJlYWRiN2QyNWIzZTc2MmEyZmQwYzJkY2QxNzI3ZGRmOTFkYjk3YzU5ODQzMDUyNjVmMzY5NWE3ZjU0NzJmMmQ3MmM5NGQ2OGMyNzkxNGYxNGY4MmFhOGRkNWZlNGUyMzQ4YjBjYTk2N2EzZjk4NjI2YTA5MTU1MmY1ZDBmZmEyYmYxMDM1MGQyM2M5OTYyNTZjMDFmZGVmZmIyYzJjNjEyNTE5ODY5Zjg3N2U0OTI5YzZlOTVmZjE1MDQwZjE0ODVlMjJlZDE0MTE5ODgwMjMyZmVmM2I1N2IzODQ4ZjE1YjE3NjZhNTU1Mjg3OWRmOGYwNiI6ImNiYTllM2ViMTJhNmY4M2RiMTFlOGE2ZmY0MGQxMDQ5ODU0ZWUwOTQ0MTZiYzUyN2ZlYTkzMWQ4NTg1NDI4YThlZDYyNDJjZTgxZjY3NjliMzZlMjEyM2E1YzIzNDgzZSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleF9tdWx0aToiU0hBNTEyIjoiIjoiY2Y4M2UxMzU3ZWVmYjhiZGYxNTQyODUwZDY2ZDgwMDdkNjIwZTQwNTBiNTcxNWRjODNmNGE5MjFkMzZjZTljZTQ3ZDBkMTNjNWQ4NWYyYjBmZjgzMThkMjg3N2VlYzJmNjNiOTMxYmQ0NzQxN2E4MWE1MzgzMjdhZjkyN2RhM2UiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6IjhmIjoiZTRjZDJkMTk5MzFiNWFhZDljOTIwZjQ1ZjU2ZjZjZTM0ZTNkMzhjNmQzMTlhNmUxMWQwNTg4YWI4YjgzODU3NmQ2Y2U2ZDY4ZWVhN2M4MzBkZTY2ZTJiZDk2NDU4YmZhN2FhZmJjYmVjOTgxZDRlZDA0MDQ5OGMzZGQ5NWYyMmEiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6ImU3MjQiOiI3ZGJiNTIwMjIxYTcwMjg3YjIzZGJjZjYyYmZjMWI3MzEzNmQ4NThlODYyNjY3MzJhN2ZmZmE4NzVlY2FhMmMxYjhmNjczYjVjMDY1ZDM2MGM1NjNhN2I5NTM5MzQ5ZjVmNTliZWY4YzBjNTkzZjk1ODdlM2NkNTBiYjI2YTIzMSIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleF9tdWx0aToiU0hBNTEyIjoiZGU0YzkwIjoiMzNjZTk4MjgxMDQ1YTVjNGM5ZGYwMzYzZDgxOTZmMWQ3ZGZjZDVlZTQ2YWM4OTc3NmZkOGE0MzQ0YzEyZjEyM2E2Njc4OGFmNWJkNDFjZWZmMTk0MWFhNTYzNzY1NGI0MDY0Yzg4YzE0ZTAwNDY1YWI3OWEyZmM2Yzk3ZTEwMTQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6ImE4MDFlOTRiIjoiZGFkYjFiNWEyN2Y5ZmVjZThkODZhZGIyYTUxODc5YmViMTc4N2ZmMjhmNGU4Y2UxNjJjYWQ3ZmVlMGY5NDJlZmNhYmJmNzM4YmM2Zjc5N2ZjN2NjNzlhM2E3NTA0OGNkNGM4MmNhMDc1N2EzMjQ2OTViZmIxOWE1NTdlNTZlMmYiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6Ijk0MzkwZDM1MDIiOiJiNjE3NWM0YzRjY2NmNjllMGNlNWYwMzEyMDEwODg2ZWE2YjM0ZDQzNjczZjk0MmFlNDI0ODNmOWNiYjdkYTgxN2RlNGUxMWI1ZDU4ZTI1YTNkOWJkNzIxYTIyY2RmZmUxYzQwNDExY2M0NWRmMTkxMWZhNTUwNjEyOWI2OTI5NyIKKworZ2VuZXJpYyBtdWx0aSBzdGVwIFNIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21kX2hleF9tdWx0aToiU0hBNTEyIjoiNDkyOTdkZDYzZTVmIjoiMWZjYzFlNmY2ODcwODU5ZDExNjQ5ZjVlNTMzNmE5Y2QxNjMyOWMwMjliYWYwNGQ1YTZlZGYyNTc4ODlhMmU5NTIyYjQ5N2RkNjU2YmI0MDJkYTQ2MTMwN2M0ZWUzODJlMmU4OTM4MGM4ZTZlNmU3Njk3ZjFlNDM5ZjY1MGZhOTQiCisKK2dlbmVyaWMgbXVsdGkgc3RlcCBTSEEtNTEyIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittZF9oZXhfbXVsdGk6IlNIQTUxMiI6Ijk5MGQxYWU3MWE2MmQ3YmRhOWJmZGFhMTc2MmE2OGQyOTZlZWU3MmE0Y2Q5NDZmMjg3YTg5OGZiYWJjMDAyZWE5NDFmZDhkNGQ5OTEwMzBiNGQyN2E2MzdjY2U1MDFhODM0YmI5NWVhYjFiNzg4OWEzZTc4NGM3OTY4ZTY3Y2JmNTUyMDA2YjIwNmI2OGY3NmQ5MTkxMzI3NTI0ZmNjMjUxYWViNTZhZjQ4M2QxMGI0ZTBjNmM1ZTU5OWVlOGMwZmU0ZmFlY2E4MjkzODQ0YTg1NDdjNmE5YTkwZDA5M2YyNTI2ODczYTE5YWQ0YTVlNzc2Nzk0YzY4Yzc0MmZiODM0NzkzZDJkZmNiN2ZlYTQ2YzYzYWY0YjcwZmQxMWNiNmU0MTgzNGU3MmVlNDBlZGIwNjdiMjkyYTc5NDk5MGMyODhkNTAwN2U3M2YzNDlmYjM4M2FmNmE3NTZiODMwMWFkNmU1ZTBhYThjZDYxNDM5OWJiM2E0NTIzNzZiMTU3NWFmYTZiZGFlYWFmYzI4NmNiMDY0YmI5MWVkZWY5N2M2MzJiNmMxMTEzZDEwN2ZhOTNhMDkwNTA5OGExMDUwNDNjMmYwNTM5N2Y3MDI1MTQ0MzlhMDhhOWU1ZGRjMTk2MTAwNzIxZDQ1YzhmYzE3ZDJlZDY1OTM3NmY4YTAwYmQ1Y2I5YTA4NjBlMjZkOGEyOWQ4ZDZhYWY1MmRlOTdlOTM0NjAzM2Q2ZGI1MDFhMzVkYmJhZjk3YzIwYjgzMGNkMmQxOGMyNTMyZjNhNTljYzQ5N2VlNjRjMGU1N2Q4ZDA2MGU1MDY5YjI4ZDg2ZWRmMWFkY2Y1OTE0NGIyMjFjZTNkZGFlZjEzNGIzMTI0ZmJjN2RkMDAwMjQwZWZmMGY1ZjVmNDFlODNjZDdmNWJiMzdjOWFlMjE5NTNmZTMwMmIwZjZlOGI2OGZhOTFjNmFiOTkyNjVjNjRiMmZkOWNkNDk0MmJlMDQzMjFiYjVkNmQ3MTkzMjM3NmM2ZjJmODhlMDI0MjJiYTZhNWUyY2I3NjVkZjkzZmQ1ZGQwNzI4YzZhYmRhZjAzYmNlMjJlMDY3OGE1NDRlMmMzNjM2Zjc0MWI2ZjQ0NDdlZTU4YThmYzY1NmI0M2VmODE3OTMyMTc2YWRiZmMyZTA0YjJjODEyYzI3M2NkNmNiZmE0MDk4ZjBiZTAzNmEzNDIyMWZhMDI2NDNmNWVlMmUwYjM4MTM1ZjJhMThlY2QyZjE2ZWJjNDVmOGViMzFiOGFiOTY3YTE1NjdlZTAxNjkwNDE4ODkxMDg2MWNhMWZhMjA1YzdhZGFhMTk0YjI4Njg5M2ZmZTJmNGZiZTAzODRjMmFlZjcyYTQ1MjJhZWFmZDNlYmM3MWY5ZGI3MWVlZWVmODZjNDgzOTRhMWM4NmQ1YjM2YzM1MmNjMzNhMGEyYzgwMGJjOTllNjJmZDY1YjNhMmZkNjllMGI1Mzk5NmVjMTNkOGNlNDgzY2U5MzE5ZWZkOWE4NWFjZWZhYmRiNTM0MjIyNmZlYmI4M2ZkMWRhZjRiMjQyNjVmNTBjNjFjNmRlNzQwNzdlZjg5YjZmZWNmOWYyOWExZjg3MWFmMWU5Zjg5YjJkMzQ1Y2RhNzQ5OWJkNDVjNDJmYTVkMTk1YTFlMWE2YmE4NDg1MTg4OWU3MzBkYTNiMmI5MTZlOTYxNTJhZTBjOTIxNTRiNDk3MTk4NDFkYjdlN2NjNzA3YmE4YTVkN2IxMDFlYjRhYzdiNjI5YmIzMjc4MTc5MTBmZmY2MTU4MGI1OWFhYjc4MTgyZDFhMmUzMzQ3M2QwNWIwMGIxNzBiMjllMzMxODcwODI2Y2ZlNDVhZjIwNmFhN2QwMjQ2YmJkODU2NmNhN2NmYjJkM2MxMGJmYTFkYjdkZDQ4ZGQ3ODYwMzY0NjljZTcyODIwOTNkNzhiNWUxYTViMGZjODFhNTRjOGVkNGNlYWMxZTUzMDUzMDVlNzgyODRhYzI3NmY1ZDc4NjI3MjdhZmYyNDZlMTdhZGRkZTUwYzY3MDAyOGQ1NzJjYmZjMGJlMmU0ZjhiMmViMjhmYTY4YWQ3YjRjNmMyYTIzOWM0NjA0NDFiZmI1ZWEwNDlmMjNiMDg1NjNiNGU0NzcyOWE1OWU1OTg2YTYxYTYwOTNkYmQ1NGY4YzM2ZWJlODdlZGFlMDFmMjUxY2IwNjBhZDEzNjRjZTY3N2Q3ZThkNWE0YTRjYTk2NmE3MjQxY2MzNjBiYzJhY2IyODBlNWY5ZTljMWIwMzJhZDZhMTgwYTM1ZTBjNTE4MGI5ZDE2ZDAyNmM4NjViMjUyMDk4Y2MxZDk5YmE3Mzc1Y2EzMWM3NzAyYzBkOTQzZDVlM2RkMmY2ODYxZmE1NWJkNDZkOTRiNjdlZDNlNTJlY2NkOGRkMDZkOTY4ZTAxODk3ZDZkZTk3ZWQzMDU4ZDkxZGQiOiI4ZTRiYzZmOGI4YzYwZmU0ZDY4YzYxZDliMTU5Yzg2OTNjMzE1MWM0Njc0OWFmNThkYTIyODQ0MmQ5MjdmMjMzNTliZDZjY2Q2YzJlYzhmYTNmMDBhODZjZWNiZmE3MjhlMWFkNjBiODIxZWQyMmZjZDMwOWJhOTFhNDEzOGJjOSIKKworZ2VuZXJpYyBTSEExIEhhc2ggZmlsZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9maWxlOiJTSEExIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMSI6ImQyMWM5NjViMWU3NjhiZDdhNmFhNjg2OWY1ZjgyMTkwMWQyNTVmOWYiCisKK2dlbmVyaWMgU0hBMSBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMSI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzIiOiIzNTNmMzQyNzFmMmFlZjQ5ZDIzYTg5MTNkNGE2YmQ4MmIyY2VjZGM2IgorCitnZW5lcmljIFNIQTEgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTEiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8zIjoiOTM2NDBlZDU5MjA3NjMyODA5NjI3MGM3NTZkYjJmYmE5YzQ4NmIzNSIKKworZ2VuZXJpYyBTSEExIEhhc2ggZmlsZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19tZF9maWxlOiJTSEExIjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6ImRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkiCisKK2dlbmVyaWMgU0hBLTIyNCBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyMjQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiODYwNmRhMDE4ODcwZjBjMTY4MzRhMjFiYzMzODU3MDRjYjE2ODNiOWRiYWIwNGM1ZGRiOTBhNDgiCisKK2dlbmVyaWMgU0hBLTIyNCBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyMjQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiNzMzYjJhYjk3YjZmNjNmMmUyOWI5YTIwODk3NTZkODFlMTRjOTNmZTRjYzk2MTVjMGQ1ZThhMDMiCisKK2dlbmVyaWMgU0hBLTIyNCBIYXNoIGZpbGUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyMjQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8zIjoiZTFkZjk1ODY3NTgwZTJjYzIxMDBlOTU2NWJmOWMyZTQyYzI0ZmU1MjUwYzE5ZWZlMzNkMWM0ZmUiCisKK2dlbmVyaWMgU0hBLTIyNCBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyMjQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiZDE0YTAyOGMyYTNhMmJjOTQ3NjEwMmJiMjg4MjM0YzQxNWEyYjAxZjgyOGVhNjJhYzViM2U0MmYiCisKK2dlbmVyaWMgU0hBLTI1NiBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyNTYiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiOTc1ZDBjNjIwZDM5MzY4ODZmOGEzNjY1ZTU4NWEzZTg0YWEwNTAxZjQyMjViZjUzMDI5NzEwMjQyODIzZTM5MSIKKworZ2VuZXJpYyBTSEEtMjU2IEhhc2ggZmlsZSAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTI1NiI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzIiOiIxMWZjYmYxYmFhMzZjYTQ1NzQ1ZjEwY2M1NDY3YWVlODZmMDY2ZjgwYmEyYzQ2ODA2ZDg3NmJmNzgzMDIyYWQyIgorCitnZW5lcmljIFNIQS0yNTYgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMjU2IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6IjlhZTRiMzY5ZjlmNGYwM2I4NjUwNWI0NmE1NDY5NTQyZTAwYWFmZjdjZjc0MTdhNzFhZjZkNmQwYWJhM2I3MGMiCisKK2dlbmVyaWMgU0hBLTI1NiBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc19tZF9maWxlOiJTSEEyNTYiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSIKKworZ2VuZXJpYyBTSEEtMzg0IEhhc2ggZmlsZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTM4NCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzEiOiJlMGEzZTYyNTlkNjM3ODAwMWI1NGVmODJmNWRkMDg3MDA5YzVmYWQ4NmQ4ZGIyMjZhOWZlMWQxNGVjYmUzM2E2ZmM5MTZlM2E0YjE2ZjVmMjg2NDI0ZGUxNWQ1YThlMGUiCisKK2dlbmVyaWMgU0hBLTM4NCBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEEzODQiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiZWZmNzI3YWZjODQ5NWM5MmUyZjM3MGY5N2EzMTdmOTNjMzM1MDMyNGIwNjQ2YjBmMGUyNjQ3MDhiM2M5N2QzZDMzMmQzYzUzOTBlMWU0NzEzMGY1YzkyZjFlZjRiOWNmIgorCitnZW5lcmljIFNIQS0zODQgSGFzaCBmaWxlICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfbWRfZmlsZToiU0hBMzg0IjoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfMyI6IjZmYzEwZWJkYTk2YTFjY2Y2MTc3N2NhYzcyZjYwMzRmOTI1MzNkNDIwNTJhNGJmOWY5ZDkyOWM2NzI5NzNjNzFlNWFlYjEyMTMyNjgwNDNjMjE1MjdhYzBmN2YzNDljNCIKKworZ2VuZXJpYyBTSEEtMzg0IEhhc2ggZmlsZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX21kX2ZpbGU6IlNIQTM4NCI6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzQiOiIzOGIwNjBhNzUxYWM5NjM4NGNkOTMyN2ViMWIxZTM2YTIxZmRiNzExMTRiZTA3NDM0YzBjYzdiZjYzZjZlMWRhMjc0ZWRlYmZlNzZmNjVmYmQ1MWFkMmYxNDg5OGI5NWIiCisKK2dlbmVyaWMgU0hBLTUxMiBIYXNoIGZpbGUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEE1MTIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8xIjoiZDgyMDdhMmUxZmYyYjQyNGYyYzQxNjNmZTFiNzIzYzliZDQyZTQ2NDA2MWViNDExZThkZjczMGJjZDI0YTdhYjM5NTZhNmYzZmYwNDRhNTJlYjJkMjYyZjllNGNhNmI1MjQwOTJiNTQ0YWI3OGYxNGQ2ZjljNGNjOGRkZjMzNWEiCisKK2dlbmVyaWMgU0hBLTUxMiBIYXNoIGZpbGUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEE1MTIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8yIjoiZWNiYjdmMGVkOGE3MDJiNDlmMTZhZDMwODhiY2MwNmVhOTM0NTE5MTJhNzE4N2RiMTVmNjRkOTM1MTdiMDk2MzBiMDM5MjkzYWVkNDE4ZDRhMDA2OTU3NzdiNzU4YjFmMzgxNTQ4YzJmZDdiOTJjZTVlZDk5NmIzMmM4NzM0ZTciCisKK2dlbmVyaWMgU0hBLTUxMiBIYXNoIGZpbGUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEE1MTIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV8zIjoiN2NjYzliMmRhNzFmZmRlOTk2NmMzY2U0NGQ3ZjIwOTQ1ZmNjZjMzYjFmYWRlNGRhMTUyYjAyMWYxYWZjYzcyOTMzODI5NDRhYTZjMDllYWM2N2FmMjVmMjIwMjY3NThlMmJmNmJlZDg2YWUyYTQzNTkyNjc3ZWU1MGY4ZWVhNDEiCisKK2dlbmVyaWMgU0hBLTUxMiBIYXNoIGZpbGUgIzQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19tZF9maWxlOiJTSEE1MTIiOiJkYXRhX2ZpbGVzL2hhc2hfZmlsZV80IjoiY2Y4M2UxMzU3ZWVmYjhiZGYxNTQyODUwZDY2ZDgwMDdkNjIwZTQwNTBiNTcxNWRjODNmNGE5MjFkMzZjZTljZTQ3ZDBkMTNjNWQ4NWYyYjBmZjgzMThkMjg3N2VlYzJmNjNiOTMxYmQ0NzQxN2E4MWE1MzgzMjdhZjkyN2RhM2UiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWQuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWQuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjODM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5mdW5jdGlvbgpAQCAtMCwwICsxLDQwMSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19NRF9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21kX3Byb2Nlc3MoICkKK3sKKyAgICBjb25zdCBpbnQgKm1kX3R5cGVfcHRyOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICppbmZvOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNTBdOworCisgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4ICk7CisKKyAgICAvKgorICAgICAqIFZlcnkgbWluaW1hbCB0ZXN0aW5nIG9mIG1iZWR0bHNfbWRfcHJvY2VzcywganVzdCBtYWtlIHN1cmUgdGhlIHZhcmlvdXMKKyAgICAgKiB4eHhfcHJvY2Vzc193cmFwKCkgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHZhbGlkLiAoVGVzdGluZyB0aGF0IHRoZXkKKyAgICAgKiBpbmRlZWQgZG8gdGhlIHJpZ2h0IHRoaW5nIHdob3VsZCByZXF1aXJlIG1lc3Npbmcgd2l0aCB0aGUgaW50ZXJuYWwKKyAgICAgKiBzdGF0ZSBvZiB0aGUgdW5kZXJseWluZyBtYmVkdGxzX21kL3NoYSBjb250ZXh0LikKKyAgICAgKgorICAgICAqIEFsc28gdGVzdHMgdGhhdCBtYmVkdGxzX21kX2xpc3QoKSBvbmx5IHJldHVybnMgdmFsaWQgTURzLgorICAgICAqLworICAgIGZvciggbWRfdHlwZV9wdHIgPSBtYmVkdGxzX21kX2xpc3QoKTsgKm1kX3R5cGVfcHRyICE9IDA7IG1kX3R5cGVfcHRyKysgKQorICAgIHsKKyAgICAgICAgaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoICptZF90eXBlX3B0ciApOworICAgICAgICBURVNUX0FTU0VSVCggaW5mbyAhPSBOVUxMICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3NldHVwKCAmY3R4LCBpbmZvLCAwICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9wcm9jZXNzKCAmY3R4LCBidWYgKSA9PSAwICk7CisgICAgICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWRfbnVsbF9hcmdzKCApCit7CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICppbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggKiggbWJlZHRsc19tZF9saXN0KCkgKSApOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzFdID0geyAwIH07CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2dldF9zaXplKCBOVUxMICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2dldF90eXBlKCBOVUxMICkgPT0gTUJFRFRMU19NRF9OT05FICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfZ2V0X25hbWUoIE5VTEwgKSA9PSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBOVUxMICkgPT0gTlVMTCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIE5VTEwsIDAgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3NldHVwKCBOVUxMLCBpbmZvLCAwICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3N0YXJ0cyggTlVMTCApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfc3RhcnRzKCAmY3R4ICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3VwZGF0ZSggTlVMTCwgYnVmLCAxICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIGJ1ZiwgMSApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9maW5pc2goIE5VTEwsIGJ1ZiApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfZmluaXNoKCAmY3R4LCBidWYgKSA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQoIE5VTEwsIGJ1ZiwgMSwgYnVmICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19GU19JTykKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9maWxlKCBOVUxMLCAiIiwgYnVmICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKyNlbmRpZgorCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoIE5VTEwsIGJ1ZiwgMSApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZjdHgsIGJ1ZiwgMSApCisgICAgICAgICAgICAgICAgID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggTlVMTCwgYnVmLCAxICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJmN0eCwgYnVmLCAxICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2htYWNfZmluaXNoKCBOVUxMLCBidWYgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmY3R4LCBidWYgKQorICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX0VSUl9NRF9CQURfSU5QVVRfREFUQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hY19yZXNldCggTlVMTCApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJmN0eCApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9obWFjKCBOVUxMLCBidWYsIDEsIGJ1ZiwgMSwgYnVmICkKKyAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX3Byb2Nlc3MoIE5VTEwsIGJ1ZiApID09IE1CRURUTFNfRVJSX01EX0JBRF9JTlBVVF9EQVRBICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfcHJvY2VzcyggJmN0eCwgYnVmICkgPT0gTUJFRFRMU19FUlJfTURfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIC8qIE9rLCB0aGlzIGlzIG5vdCBOVUxMIGFyZyBidXQgTlVMTCByZXR1cm4uLi4gKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9OT05FICkgPT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoICJubyBzdWNoIG1kIiApID09IE5VTEwgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWRfaW5mbyggaW50IG1kX3R5cGUsIGNoYXIgKm1kX25hbWUsIGludCBtZF9zaXplICkKK3sKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKyAgICBjb25zdCBpbnQgKm1kX3R5cGVfcHRyOworICAgIGludCBmb3VuZDsKKworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtZF90eXBlICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvID09IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggbWRfbmFtZSApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9nZXRfdHlwZSggbWRfaW5mbyApID09IChtYmVkdGxzX21kX3R5cGVfdCkgbWRfdHlwZSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgPT0gKHVuc2lnbmVkIGNoYXIpIG1kX3NpemUgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBtYmVkdGxzX21kX2dldF9uYW1lKCBtZF9pbmZvICksIG1kX25hbWUgKSA9PSAwICk7CisKKyAgICBmb3VuZCA9IDA7CisgICAgZm9yKCBtZF90eXBlX3B0ciA9IG1iZWR0bHNfbWRfbGlzdCgpOyAqbWRfdHlwZV9wdHIgIT0gMDsgbWRfdHlwZV9wdHIrKyApCisgICAgICAgIGlmKCAqbWRfdHlwZV9wdHIgPT0gbWRfdHlwZSApCisgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgVEVTVF9BU1NFUlQoIGZvdW5kID09IDEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWRfdGV4dCggY2hhciAqdGV4dF9tZF9uYW1lLCBjaGFyICp0ZXh0X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgY2hhciBtZF9uYW1lWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IE5VTEw7CisKKyAgICBtZW1zZXQoIG1kX25hbWUsIDB4MDAsIDEwMCApOworICAgIG1lbXNldCggc3JjX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBzcmNfc3RyLCB0ZXh0X3NyY19zdHJpbmcsIHNpemVvZiggc3JjX3N0ciApIC0gMSApOworICAgIHN0cm5jcHkoIChjaGFyICopIG1kX25hbWUsIHRleHRfbWRfbmFtZSwgc2l6ZW9mKCBtZF9uYW1lICkgLSAxICk7CisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyhtZF9uYW1lKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZCggbWRfaW5mbywgc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1kX2hleCggY2hhciAqdGV4dF9tZF9uYW1lLCBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2hhc2hfc3RyaW5nICkKK3sKKyAgICBjaGFyIG1kX25hbWVbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgaW50IHNyY19sZW47CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBOVUxMOworCisgICAgbWVtc2V0KCBtZF9uYW1lLCAweDAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIHNyY19zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBtZF9uYW1lLCB0ZXh0X21kX25hbWUsIHNpemVvZiggbWRfbmFtZSApIC0gMSApOworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIG1kX25hbWUgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWQoIG1kX2luZm8sIHNyY19zdHIsIHNyY19sZW4sIG91dHB1dCApICk7CisKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWRfdGV4dF9tdWx0aSggY2hhciAqdGV4dF9tZF9uYW1lLCBjaGFyICp0ZXh0X3NyY19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgY2hhciBtZF9uYW1lWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBpbnQgaGFsZndheSwgbGVuOworCisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBOVUxMOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eCwgY3R4X2NvcHk7CisKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHggKTsKKyAgICBtYmVkdGxzX21kX2luaXQoICZjdHhfY29weSApOworCisgICAgbWVtc2V0KCBtZF9uYW1lLCAweDAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIHNyY19zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgc3JjX3N0ciwgdGV4dF9zcmNfc3RyaW5nLCBzaXplb2Yoc3JjX3N0cikgLSAxICk7CisgICAgc3RybmNweSggKGNoYXIgKikgbWRfbmFtZSwgdGV4dF9tZF9uYW1lLCBzaXplb2YobWRfbmFtZSkgLSAxICk7CisgICAgbGVuID0gc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICk7CisgICAgaGFsZndheSA9IGxlbiAvIDI7CisKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKG1kX25hbWUpOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9zZXR1cCggJmN0eCwgbWRfaW5mbywgMCApICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfc2V0dXAoICZjdHhfY29weSwgbWRfaW5mbywgMCApICk7CisKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9zdGFydHMoICZjdHggKSApOworICAgIFRFU1RfQVNTRVJUICggY3R4Lm1kX2N0eCAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLCBoYWxmd2F5ICkgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9jbG9uZSggJmN0eF9jb3B5LCAmY3R4ICkgKTsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eCwgc3JjX3N0ciArIGhhbGZ3YXksIGxlbiAtIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IGNsb25lICovCisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eF9jb3B5LCBzcmNfc3RyICsgaGFsZndheSwgbGVuIC0gaGFsZndheSApICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfZmluaXNoKCAmY3R4X2NvcHksIG91dHB1dCApICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eF9jb3B5ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1kX2hleF9tdWx0aSggY2hhciAqdGV4dF9tZF9uYW1lLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIGNoYXIgbWRfbmFtZVsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBpbnQgc3JjX2xlbiwgaGFsZndheTsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IE5VTEw7CisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4LCBjdHhfY29weTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eF9jb3B5ICk7CisKKyAgICBtZW1zZXQoIG1kX25hbWUsIDB4MDAsIDEwMCApOworICAgIG1lbXNldCggc3JjX3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIHN0cm5jcHkoIChjaGFyICopIG1kX25hbWUsIHRleHRfbWRfbmFtZSwgc2l6ZW9mKCBtZF9uYW1lICkgLSAxICk7CisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyhtZF9uYW1lKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIG1kX2luZm8sIDAgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3NldHVwKCAmY3R4X2NvcHksIG1kX2luZm8sIDAgKSApOworCisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworICAgIGhhbGZ3YXkgPSBzcmNfbGVuIC8gMjsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3N0YXJ0cyggJmN0eCApICk7CisgICAgVEVTVF9BU1NFUlQgKCBjdHgubWRfY3R4ICE9IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIHNyY19zdHIsIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2Nsb25lKCAmY3R4X2NvcHksICZjdHggKSApOworCisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBzcmNfc3RyICsgaGFsZndheSwgc3JjX2xlbiAtIGhhbGZ3YXkpICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfZmluaXNoKCAmY3R4LCBvdXRwdXQgKSApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKKworICAgIC8qIFRlc3QgY2xvbmUgKi8KKyAgICBtZW1zZXQoIGhhc2hfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3VwZGF0ZSggJmN0eF9jb3B5LCBzcmNfc3RyICsgaGFsZndheSwgc3JjX2xlbiAtIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eF9jb3B5LCBvdXRwdXQgKSApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHggKTsKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZjdHhfY29weSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21kX2htYWMoIGNoYXIgKnRleHRfbWRfbmFtZSwgaW50IHRydW5jX3NpemUsIGNoYXIgKmhleF9rZXlfc3RyaW5nLAorICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2hhc2hfc3RyaW5nICkKK3sKKyAgICBjaGFyIG1kX25hbWVbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBpbnQga2V5X2xlbiwgc3JjX2xlbjsKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9IE5VTEw7CisKKyAgICBtZW1zZXQoIG1kX25hbWUsIDB4MDAsIDEwMCApOworICAgIG1lbXNldCggc3JjX3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIGtleV9zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBtZF9uYW1lLCB0ZXh0X21kX25hbWUsIHNpemVvZiggbWRfbmFtZSApIC0gMSApOworICAgIG1kX2luZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIG1kX25hbWUgKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisKKyAgICBrZXlfbGVuID0gdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgc3JjX2xlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQgKCBtYmVkdGxzX21kX2htYWMoIG1kX2luZm8sIGtleV9zdHIsIGtleV9sZW4sIHNyY19zdHIsIHNyY19sZW4sIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cm5jbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcsIHRydW5jX3NpemUgKiAyICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtZF9obWFjX211bHRpKCBjaGFyICp0ZXh0X21kX25hbWUsIGludCB0cnVuY19zaXplLCBjaGFyICpoZXhfa2V5X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgY2hhciBtZF9uYW1lWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleV9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9zdHJbMTAwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgaW50IGtleV9sZW4sIHNyY19sZW4sIGhhbGZ3YXk7CisgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kX2luZm8gPSBOVUxMOworICAgIG1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KCBtZF9uYW1lLCAweDAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIHNyY19zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBrZXlfc3RyLCAweDAwLCAxMDAwMCApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOworCisgICAgc3RybmNweSggKGNoYXIgKikgbWRfbmFtZSwgdGV4dF9tZF9uYW1lLCBzaXplb2YoIG1kX25hbWUgKSAtIDEgKTsKKyAgICBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBtZF9uYW1lICk7CisgICAgVEVTVF9BU1NFUlQoIG1kX2luZm8gIT0gTlVMTCApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX3NldHVwKCAmY3R4LCBtZF9pbmZvLCAxICkgKTsKKworICAgIGtleV9sZW4gPSB1bmhleGlmeSgga2V5X3N0ciwgaGV4X2tleV9zdHJpbmcgKTsKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisgICAgaGFsZndheSA9IHNyY19sZW4gLyAyOworCisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZjdHgsIGtleV9zdHIsIGtleV9sZW4gKSApOworICAgIFRFU1RfQVNTRVJUICggY3R4Lm1kX2N0eCAhPSBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgsIHNyY19zdHIsIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LCBzcmNfc3RyICsgaGFsZndheSwgc3JjX2xlbiAtIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmY3R4LCBvdXRwdXQgKSApOworCisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKyAgICBURVNUX0FTU0VSVCggc3RybmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZywgdHJ1bmNfc2l6ZSAqIDIgKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IGFnYWluLCBmb3IgcmVzZXQoKSAqLworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIDEwMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOworCisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY19yZXNldCggJmN0eCApICk7CisgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgsIHNyY19zdHIsIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LCBzcmNfc3RyICsgaGFsZndheSwgc3JjX2xlbiAtIGhhbGZ3YXkgKSApOworICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmY3R4LCBvdXRwdXQgKSApOworCisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKyAgICBURVNUX0FTU0VSVCggc3RybmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZywgdHJ1bmNfc2l6ZSAqIDIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTyAqLwordm9pZCBtYmVkdGxzX21kX2ZpbGUoIGNoYXIgKnRleHRfbWRfbmFtZSwgY2hhciAqZmlsZW5hbWUsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgY2hhciBtZF9uYW1lWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0gTlVMTDsKKworICAgIG1lbXNldCggbWRfbmFtZSwgMHgwMCwgMTAwICk7CisgICAgbWVtc2V0KCBoYXNoX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAgKTsKKworICAgIHN0cm5jcHkoIChjaGFyICopIG1kX25hbWUsIHRleHRfbWRfbmFtZSwgc2l6ZW9mKCBtZF9uYW1lICkgLSAxICk7CisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3N0cmluZyggbWRfbmFtZSApOworICAgIFRFU1RfQVNTRVJUKCBtZF9pbmZvICE9IE5VTEwgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kX2ZpbGUoIG1kX2luZm8sIGZpbGVuYW1lLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21keC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21keC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDAzYjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWR4LmRhdGEKQEAgLTAsMCArMSw5OCBAQAorbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjMQorbWQyX3RleHQ6IiI6IjgzNTBlNWEzZTI0YzE1M2RmMjI3NWM5ZjgwNjkyNzczIgorCittYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICMyCittZDJfdGV4dDoiYSI6IjMyZWMwMWVjNGE2ZGFjNzJjMGFiOTZmYjM0YzBiNWQxIgorCittYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICMzCittZDJfdGV4dDoiYWJjIjoiZGE4NTNiMGQzZjg4ZDk5YjMwMjgzYTY5ZTZkZWQ2YmIiCisKK21iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzQKK21kMl90ZXh0OiJtZXNzYWdlIGRpZ2VzdCI6ImFiNGY0OTZiZmIyYTUzMGIyMTlmZjMzMDMxZmUwNmIwIgorCittYmVkdGxzX21kMiBUZXN0IHZlY3RvciBSRkMxMzE5ICM1CittZDJfdGV4dDoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOiI0ZThkZGZmMzY1MDI5MmFiNWE0MTA4YzNhYTQ3OTQwYiIKKworbWJlZHRsc19tZDIgVGVzdCB2ZWN0b3IgUkZDMTMxOSAjNgorbWQyX3RleHQ6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IjoiZGEzM2RlZjJhNDJkZjEzOTc1MzUyODQ2YzMwMzM4Y2QiCisKK21iZWR0bHNfbWQyIFRlc3QgdmVjdG9yIFJGQzEzMTkgIzcKK21kMl90ZXh0OiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6ImQ1OTc2Zjc5ZDgzZDNhMGRjOTgwNmMzYzY2ZjNlZmQ4IgorCittYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICMxCittZDRfdGV4dDoiIjoiMzFkNmNmZTBkMTZhZTkzMWI3M2M1OWQ3ZTBjMDg5YzAiCisKK21iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzIKK21kNF90ZXh0OiJhIjoiYmRlNTJjYjMxZGUzM2U0NjI0NWUwNWZiZGJkNmZiMjQiCisKK21iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzMKK21kNF90ZXh0OiJhYmMiOiJhNDQ4MDE3YWFmMjFkODUyNWZjMTBhZTg3YWE2NzI5ZCIKKworbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNAorbWQ0X3RleHQ6Im1lc3NhZ2UgZGlnZXN0IjoiZDkxMzBhODE2NDU0OWZlODE4ODc0ODA2ZTFjNzAxNGIiCisKK21iZWR0bHNfbWQ0IFRlc3QgdmVjdG9yIFJGQzEzMjAgIzUKK21kNF90ZXh0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImQ3OWUxYzMwOGFhNWJiY2RlZWE4ZWQ2M2RmNDEyZGE5IgorCittYmVkdGxzX21kNCBUZXN0IHZlY3RvciBSRkMxMzIwICM2CittZDRfdGV4dDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOiIwNDNmODU4MmYyNDFkYjM1MWNlNjI3ZTE1M2U3ZjBlNCIKKworbWJlZHRsc19tZDQgVGVzdCB2ZWN0b3IgUkZDMTMyMCAjNworbWQ0X3RleHQ6IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIjoiZTMzYjRkZGM5YzM4ZjIxOTljM2U3YjE2NGZjYzA1MzYiCisKK21iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzEKK21kNV90ZXh0OiIiOiJkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSIKKworbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjMgorbWQ1X3RleHQ6ImEiOiIwY2MxNzViOWMwZjFiNmE4MzFjMzk5ZTI2OTc3MjY2MSIKKworbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjMworbWQ1X3RleHQ6ImFiYyI6IjkwMDE1MDk4M2NkMjRmYjBkNjk2M2Y3ZDI4ZTE3ZjcyIgorCittYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICM0CittZDVfdGV4dDoibWVzc2FnZSBkaWdlc3QiOiJmOTZiNjk3ZDdjYjc5MzhkNTI1YTJmMzFhYWYxNjFkMCIKKworbWJlZHRsc19tZDUgVGVzdCB2ZWN0b3IgUkZDMTMyMSAjNQorbWQ1X3RleHQ6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjoiYzNmY2QzZDc2MTkyZTQwMDdkZmI0OTZjY2E2N2UxM2IiCisKK21iZWR0bHNfbWQ1IFRlc3QgdmVjdG9yIFJGQzEzMjEgIzYKK21kNV90ZXh0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6ImQxNzRhYjk4ZDI3N2Q5ZjVhNTYxMWMyYzlmNDE5ZDlmIgorCittYmVkdGxzX21kNSBUZXN0IHZlY3RvciBSRkMxMzIxICM3CittZDVfdGV4dDoiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOiI1N2VkZjRhMjJiZTNjOTU1YWM0OWRhMmUyMTA3YjY3YSIKKworbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjMQorcmlwZW1kMTYwX3RleHQ6IiI6IjljMTE4NWE1YzVlOWZjNTQ2MTI4MDg5NzdlZThmNTQ4YjIyNThkMzEiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzIKK3JpcGVtZDE2MF90ZXh0OiJhIjoiMGJkYzlkMmQyNTZiM2VlOWRhYWUzNDdiZTZmNGRjODM1YTQ2N2ZmZSIKKworbWJlZHRsc19yaXBlbWQxNjAgVGVzdCB2ZWN0b3IgZnJvbSBwYXBlciAjMworcmlwZW1kMTYwX3RleHQ6ImFiYyI6IjhlYjIwOGY3ZTA1ZDk4N2E5YjA0NGE4ZTk4YzZiMDg3ZjE1YTBiZmMiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzQKK3JpcGVtZDE2MF90ZXh0OiJtZXNzYWdlIGRpZ2VzdCI6IjVkMDY4OWVmNDlkMmZhZTU3MmI4ODFiMTIzYTg1ZmZhMjE1OTVmMzYiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzUKK3JpcGVtZDE2MF90ZXh0OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI6ImY3MWMyNzEwOWM2OTJjMWI1NmJiZGNlYjViOWQyODY1YjM3MDhkYmMiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzYKK3JpcGVtZDE2MF90ZXh0OiJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSI6IjEyYTA1MzM4NGE5YzBjODhlNDA1YTA2YzI3ZGNmNDlhZGE2MmViMmIiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzcKK3JpcGVtZDE2MF90ZXh0OiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI6ImIwZTIwYjZlMzExNjY0MDI4NmVkM2E4N2E1NzEzMDc5YjIxZjUxODkiCisKK21iZWR0bHNfcmlwZW1kMTYwIFRlc3QgdmVjdG9yIGZyb20gcGFwZXIgIzgKK3JpcGVtZDE2MF90ZXh0OiIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCI6IjliNzUyZTQ1NTczZDRiMzlmNGRiZDMzMjNjYWI4MmJmNjMzMjZiZmIiCisKK01EMiBTZWxmdGVzdAorbWQyX3NlbGZ0ZXN0OgorCitNRDQgU2VsZnRlc3QKK21kNF9zZWxmdGVzdDoKKworTUQ1IFNlbGZ0ZXN0CittZDVfc2VsZnRlc3Q6CisKK1JJUEVNRDE2MCBTZWxmdGVzdAorcmlwZW1kMTYwX3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21keC5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwZWU0NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZnVuY3Rpb24KQEAgLTAsMCArMSwxMTQgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvbWQyLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcmlwZW1kMTYwLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01EMl9DICovCit2b2lkIG1kMl90ZXh0KCBjaGFyICp0ZXh0X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clszM107CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdOworCisgICAgbWVtc2V0KCBzcmNfc3RyLCAweDAwLCBzaXplb2Ygc3JjX3N0ciApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIHNpemVvZiBoYXNoX3N0ciApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2Ygb3V0cHV0ICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBzcmNfc3RyLCB0ZXh0X3NyY19zdHJpbmcsIHNpemVvZihzcmNfc3RyKSAtIDEgKTsKKworICAgIG1iZWR0bHNfbWQyKCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBzaXplb2YgIG91dHB1dCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01ENF9DICovCit2b2lkIG1kNF90ZXh0KCBjaGFyICp0ZXh0X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clszM107CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdOworCisgICAgbWVtc2V0KCBzcmNfc3RyLCAweDAwLCBzaXplb2Ygc3JjX3N0ciApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIHNpemVvZiBoYXNoX3N0ciApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2Ygb3V0cHV0ICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBzcmNfc3RyLCB0ZXh0X3NyY19zdHJpbmcsIHNpemVvZihzcmNfc3RyKSAtIDEgKTsKKworICAgIG1iZWR0bHNfbWQ0KCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBzaXplb2YgIG91dHB1dCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01ENV9DICovCit2b2lkIG1kNV90ZXh0KCBjaGFyICp0ZXh0X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clszM107CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTZdOworCisgICAgbWVtc2V0KCBzcmNfc3RyLCAweDAwLCBzaXplb2Ygc3JjX3N0ciApOworICAgIG1lbXNldCggaGFzaF9zdHIsIDB4MDAsIHNpemVvZiBoYXNoX3N0ciApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2Ygb3V0cHV0ICk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBzcmNfc3RyLCB0ZXh0X3NyY19zdHJpbmcsIHNpemVvZihzcmNfc3RyKSAtIDEgKTsKKworICAgIG1iZWR0bHNfbWQ1KCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBzaXplb2YgIG91dHB1dCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JJUEVNRDE2MF9DICovCit2b2lkIHJpcGVtZDE2MF90ZXh0KCBjaGFyICp0ZXh0X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0cls0MV07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjBdOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIHNpemVvZiBzcmNfc3RyKTsKKyAgICBtZW1zZXQoaGFzaF9zdHIsIDB4MDAsIHNpemVvZiBoYXNoX3N0cik7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgc2l6ZW9mIG91dHB1dCk7CisKKyAgICBzdHJuY3B5KCAoY2hhciAqKSBzcmNfc3RyLCB0ZXh0X3NyY19zdHJpbmcsIHNpemVvZihzcmNfc3RyKSAtIDEgKTsKKworICAgIG1iZWR0bHNfcmlwZW1kMTYwKCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCBzaXplb2Ygb3V0cHV0ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfTUQyX0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgbWQyX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZDJfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgbWQ0X3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZDRfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgbWQ1X3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZDVfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUklQRU1EMTYwX0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgcmlwZW1kMTYwX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yaXBlbWQxNjBfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZW1vcnlfYnVmZmVyX2FsbG9jLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYy5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzgxM2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWVtb3J5X2J1ZmZlcl9hbGxvYy5kYXRhCkBAIC0wLDAgKzEsMTggQEAKK01lbW9yeSBidWZmZXIgYWxsb2Mgc2VsZiB0ZXN0CittYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc2VsZl90ZXN0OgorCitNZW1vcnkgYnVmZmVyIGFsbG9jIC0gZnJlZSBpbiBtaWRkbGUsIGFsbG9jIGF0IGVuZAorbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlX2FsbG9jOjEwMDoxMDA6MTAwOjA6MDoxOjA6MDoyMDA6MAorCitNZW1vcnkgYnVmZmVyIGFsbG9jIC0gZnJlZSBpbiBtaWRkbGUsIHJlYWxsb2MKK21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZV9hbGxvYzoxMDA6MTAwOjEwMDowOjA6MTowOjA6MTAwOjAKKworTWVtb3J5IGJ1ZmZlciBhbGxvYyAtIGZyZWUgaW4gbWlkZGxlLCBtZXJnZSwgcmVhbGxvYworbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlX2FsbG9jOjEwMDoxMDA6MTAwOjEwMDowOjE6MTowOjIwMTowCisKK01lbW9yeSBidWZmZXIgYWxsb2MgLSBmcmVlIGF0IGVuZCwgbWVyZ2UsIHJlYWxsb2MKK21lbW9yeV9idWZmZXJfYWxsb2NfZnJlZV9hbGxvYzoxMDA6NjQ6MTAwOjEwMDowOjA6MDoxOjIwMDowCisKK01lbW9yeSBidWZmZXIgYWxsb2MgLSBPdXQgb2YgTWVtb3J5IHRlc3QKK21lbW9yeV9idWZmZXJfYWxsb2Nfb29tX3Rlc3Q6CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZW1vcnlfYnVmZmVyX2FsbG9jLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21lbW9yeV9idWZmZXJfYWxsb2MuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjNzBkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZW1vcnlfYnVmZmVyX2FsbG9jLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjM0IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKyNkZWZpbmUgVEVTVF9TVUlURV9NRU1PUllfQlVGRkVSX0FMTE9DCisKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fU1VJVEVfSEVMUEVSUyAqLworc3RhdGljIGludCBjaGVja19wb2ludGVyKCB2b2lkICpwICkKK3sKKyAgICBpZiggcCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgaWYoIChzaXplX3QpIHAgJSBNQkVEVExTX01FTU9SWV9BTElHTl9NVUxUSVBMRSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCAtMSApOworCisgICAgcmV0dXJuKCAwICk7Cit9CisvKiBFTkRfU1VJVEVfSEVMUEVSUyAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3NlbGZfdGVzdCggKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2Nfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfTUVNT1JZX0RFQlVHICovCit2b2lkIG1lbW9yeV9idWZmZXJfYWxsb2NfZnJlZV9hbGxvYyggaW50IGFfYnl0ZXMsIGludCBiX2J5dGVzLCBpbnQgY19ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJlZV9hLCBpbnQgZnJlZV9iLCBpbnQgZnJlZV9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmVlX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVfYnl0ZXMsIGludCBmX2J5dGVzICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgICB1bnNpZ25lZCBjaGFyICpwdHJfYSA9IE5VTEwsICpwdHJfYiA9IE5VTEwsICpwdHJfYyA9IE5VTEwsICpwdHJfZCA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICpwdHJfZSA9IE5VTEwsICpwdHJfZiA9IE5VTEw7CisKKyAgICBzaXplX3QgcmVwb3J0ZWRfYmxvY2tzOworICAgIHNpemVfdCBhbGxvY2F0ZWRfYnl0ZXMgPSAwLCByZXBvcnRlZF9ieXRlczsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBidWYsIHNpemVvZiggYnVmICkgKTsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9zZXRfdmVyaWZ5KCBNQkVEVExTX01FTU9SWV9WRVJJRllfQUxXQVlTICk7CisKKyAgICBpZiggYV9ieXRlcyA+IDAgKQorICAgIHsKKyAgICAgICAgcHRyX2EgPSBtYmVkdGxzX2NhbGxvYyggYV9ieXRlcywgc2l6ZW9mKGNoYXIpICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfYSApID09IDAgKTsKKworICAgICAgICBhbGxvY2F0ZWRfYnl0ZXMgKz0gYV9ieXRlcyAqIHNpemVvZihjaGFyKTsKKyAgICB9CisKKyAgICBpZiggYl9ieXRlcyA+IDAgKQorICAgIHsKKyAgICAgICAgcHRyX2IgPSBtYmVkdGxzX2NhbGxvYyggYl9ieXRlcywgc2l6ZW9mKGNoYXIpICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfYiApID09IDAgKTsKKworICAgICAgICBhbGxvY2F0ZWRfYnl0ZXMgKz0gYl9ieXRlcyAqIHNpemVvZihjaGFyKTsKKyAgICB9CisKKyAgICBpZiggY19ieXRlcyA+IDAgKQorICAgIHsKKyAgICAgICAgcHRyX2MgPSBtYmVkdGxzX2NhbGxvYyggY19ieXRlcywgc2l6ZW9mKGNoYXIpICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfYyApID09IDAgKTsKKworICAgICAgICBhbGxvY2F0ZWRfYnl0ZXMgKz0gY19ieXRlcyAqIHNpemVvZihjaGFyKTsKKyAgICB9CisKKyAgICBpZiggZF9ieXRlcyA+IDAgKQorICAgIHsKKyAgICAgICAgcHRyX2QgPSBtYmVkdGxzX2NhbGxvYyggZF9ieXRlcywgc2l6ZW9mKGNoYXIpICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfZCApID09IDAgKTsKKworICAgICAgICBhbGxvY2F0ZWRfYnl0ZXMgKz0gZF9ieXRlcyAqIHNpemVvZihjaGFyKTsKKyAgICB9CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfY3VyX2dldCggJnJlcG9ydGVkX2J5dGVzLCAmcmVwb3J0ZWRfYmxvY2tzICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcG9ydGVkX2J5dGVzID09IGFsbG9jYXRlZF9ieXRlcyApOworCisgICAgaWYoIGZyZWVfYSApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9hICk7CisgICAgICAgIHB0cl9hID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzIC09IGFfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgaWYoIGZyZWVfYiApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9iICk7CisgICAgICAgIHB0cl9iID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzIC09IGJfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgaWYoIGZyZWVfYyApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9jICk7CisgICAgICAgIHB0cl9jID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzIC09IGNfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgaWYoIGZyZWVfZCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9kICk7CisgICAgICAgIHB0cl9kID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKKyAgICAgICAgYWxsb2NhdGVkX2J5dGVzIC09IGRfYnl0ZXMgKiBzaXplb2YoY2hhcik7CisgICAgfQorCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2N1cl9nZXQoICZyZXBvcnRlZF9ieXRlcywgJnJlcG9ydGVkX2Jsb2NrcyApOworICAgIFRFU1RfQVNTRVJUKCByZXBvcnRlZF9ieXRlcyA9PSBhbGxvY2F0ZWRfYnl0ZXMgKTsKKworICAgIGlmKCBlX2J5dGVzID4gMCApCisgICAgeworICAgICAgICBwdHJfZSA9IG1iZWR0bHNfY2FsbG9jKCBlX2J5dGVzLCBzaXplb2YoY2hhcikgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGNoZWNrX3BvaW50ZXIoIHB0cl9lICkgPT0gMCApOworICAgIH0KKworICAgIGlmKCBmX2J5dGVzID4gMCApCisgICAgeworICAgICAgICBwdHJfZiA9IG1iZWR0bHNfY2FsbG9jKCBmX2J5dGVzLCBzaXplb2YoY2hhcikgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGNoZWNrX3BvaW50ZXIoIHB0cl9mICkgPT0gMCApOworICAgIH0KKworICAgIC8qIE9uY2UgYmxvY2tzIGFyZSByZWFsbG9jYXRlZCwgdGhlIGJsb2NrIGFsbG9jYXRlZCB0byB0aGUgbWVtb3J5IHJlcXVlc3QKKyAgICAgKiBtYXkgYmUgYmlnZ2VyIHRoYW4gdGhlIHJlcXVlc3QgaXRzZWxmLCB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgdGhlIHJlcG9ydGVkCisgICAgICogYnl0ZXMsIGFuZCBtYWtlcyBpdCBoYXJkIHRvIGtub3cgd2hhdCB0aGUgcmVwb3J0ZWQgc2l6ZSB3aWxsIGJlLCBzbworICAgICAqIHdlIGRvbid0IGNoZWNrIHRoZSBzaXplIGFmdGVyIGJsb2NrcyBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQuICovCisKKyAgICBpZiggcHRyX2EgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9hICk7CisgICAgICAgIHB0cl9hID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisgICAgfQorCisgICAgaWYoIHB0cl9iICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfYiApOworICAgICAgICBwdHJfYiA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworICAgIH0KKworICAgIGlmKCBwdHJfYyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggcHRyX2MgKTsKKyAgICAgICAgcHRyX2MgPSBOVUxMOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSgpID09IDAgKTsKKyAgICB9CisKKyAgICBpZiggcHRyX2QgIT0gTlVMTCApCisgICAgeworICAgICAgICBtYmVkdGxzX2ZyZWUoIHB0cl9kICk7CisgICAgICAgIHB0cl9kID0gTlVMTDsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisgICAgfQorCisgICAgaWYoIHB0cl9lICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19mcmVlKCBwdHJfZSApOworICAgICAgICBwdHJfZSA9IE5VTEw7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworICAgIH0KKworICAgIGlmKCBwdHJfZiAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZnJlZSggcHRyX2YgKTsKKyAgICAgICAgcHRyX2YgPSBOVUxMOworICAgIH0KKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCAmcmVwb3J0ZWRfYnl0ZXMsICZyZXBvcnRlZF9ibG9ja3MgKTsKKyAgICBURVNUX0FTU0VSVCggcmVwb3J0ZWRfYnl0ZXMgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19NRU1PUllfREVCVUcgKi8KK3ZvaWQgbWVtb3J5X2J1ZmZlcl9hbGxvY19vb21fdGVzdCgpCit7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF07CisgICAgdW5zaWduZWQgY2hhciAqcHRyX2EgPSBOVUxMLCAqcHRyX2IgPSBOVUxMLCAqcHRyX2MgPSBOVUxMOworICAgIHNpemVfdCByZXBvcnRlZF9ibG9ja3MsIHJlcG9ydGVkX2J5dGVzOworCisgICAgKHZvaWQpcHRyX2M7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYnVmLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfc2V0X3ZlcmlmeSggTUJFRFRMU19NRU1PUllfVkVSSUZZX0FMV0FZUyApOworCisgICAgcHRyX2EgPSBtYmVkdGxzX2NhbGxvYyggNDMyLCBzaXplb2YoY2hhcikgKTsKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfcG9pbnRlciggcHRyX2EgKSA9PSAwICk7CisKKyAgICBwdHJfYiA9IG1iZWR0bHNfY2FsbG9jKCA0MzIsIHNpemVvZihjaGFyKSApOworICAgIFRFU1RfQVNTRVJUKCBjaGVja19wb2ludGVyKCBwdHJfYiApID09IDAgKTsKKworICAgIHB0cl9jID0gbWJlZHRsc19jYWxsb2MoIDQzMSwgc2l6ZW9mKGNoYXIpICk7CisgICAgVEVTVF9BU1NFUlQoIHB0cl9jID09IE5VTEwgKTsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCAmcmVwb3J0ZWRfYnl0ZXMsICZyZXBvcnRlZF9ibG9ja3MgKTsKKyAgICBURVNUX0FTU0VSVCggcmVwb3J0ZWRfYnl0ZXMgPj0gODY0ICYmIHJlcG9ydGVkX2J5dGVzIDw9IHNpemVvZihidWYpICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIHB0cl9hICk7CisgICAgcHRyX2EgPSBOVUxMOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfdmVyaWZ5KCkgPT0gMCApOworCisgICAgbWJlZHRsc19mcmVlKCBwdHJfYiApOworICAgIHB0cl9iID0gTlVMTDsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX3ZlcmlmeSgpID09IDAgKTsKKworICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCAmcmVwb3J0ZWRfYnl0ZXMsICZyZXBvcnRlZF9ibG9ja3MgKTsKKyAgICBURVNUX0FTU0VSVCggcmVwb3J0ZWRfYnl0ZXMgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY192ZXJpZnkoKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbXBpLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbXBpLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2NWI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tcGkuZGF0YQpAQCAtMCwwICsxLDczMSBAQAorQXJndW1lbnRzIHdpdGggbm8gdmFsdWUKK21waV9udWxsOgorCitCYXNlIHRlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMxCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6IjEyOCI6MTA6IjEyOCI6MTAwOjA6MAorCitCYXNlIHRlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICMyCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6IjEyOCI6MTY6IjgwIjoxMDA6MDowCisKK0Jhc2UgdGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzMgKFJlYWQgemVybykKK21waV9yZWFkX3dyaXRlX3N0cmluZzoxMDoiMCI6MTA6IjAiOjEwMDowOjAKKworQmFzZSB0ZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjMyAoTmVnYXRpdmUgZGVjaW1hbCkKK21waV9yZWFkX3dyaXRlX3N0cmluZzoxMDoiLTIzIjoxMDoiLTIzIjoxMDA6MDowCisKK0Jhc2UgdGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzMgKE5lZ2F0aXZlIGhleCkKK21waV9yZWFkX3dyaXRlX3N0cmluZzoxNjoiLTIwIjoxMDoiLTMyIjoxMDA6MDowCisKK0Jhc2UgdGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzMgKE5lZ2F0aXZlIGRlY2ltYWwpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6Ii0yMyI6MTY6Ii0yMyI6MTAwOjA6MAorCitUZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjMSAoSW52YWxpZCBjaGFyYWN0ZXIpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6ImEyOCI6MDoiIjoxMDA6TUJFRFRMU19FUlJfTVBJX0lOVkFMSURfQ0hBUkFDVEVSOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzIgKElsbGVnYWwgaW5wdXQgcmFkaXgpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTk6ImEyOCI6MDoiIjoxMDA6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzMgKEJ1ZmZlciBqdXN0IGZpdHMpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6Ii0yMyI6MTY6Ii0yMyI6NDowOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzQgKEJ1ZmZlciB0b28gc21hbGwpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6Ii0yMyI6MTY6Ii0yMyI6MzowOk1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICM1IChJbGxlZ2FsIG91dHB1dCByYWRpeCkKK21waV9yZWFkX3dyaXRlX3N0cmluZzoxNjoiLTIzIjoxNzoiLTIzIjo0OjA6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK1Rlc3QgbXBpX3JlYWRfd3JpdGVfc3RyaW5nICM2IChPdXRwdXQgcmFkaXggb2YgMTUpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTA6IjI5IjoxNToiMWUiOjEwMDowOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzcKK21waV9yZWFkX3dyaXRlX3N0cmluZzoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiOjE2OiIwOTQxMzc5ZDAwZmVkMTQ5MWZlMTVkZjI4NGRmZGU0YTE0MmY2OGFhOGQ0MTIwMjMxOTVjZWU2Njg4M2U2MjkwZmZlNzAzZjRlYTU5NjNiZjIxMjcxM2NlZTQ2YjEwN2MwOTE4MmI1ZWRjZDk1NWFkYWM0MThiZjQ5MThlMjg4OWFmNDhlMTA5OWQ1MTM4MzBjZWM4NWMyNmFjMWUxNThiNTI2MjBlMzNiYTg2OTJmODkzZWZiYjJmOTU4YjQ0MjQiOjIwMDowOjAKKworVGVzdCBtcGlfcmVhZF93cml0ZV9zdHJpbmcgIzggKEVtcHR5IE1QSSAtPiBoZXgpCittcGlfcmVhZF93cml0ZV9zdHJpbmc6MTY6IiI6MTY6IjAwIjo0OjA6MAorCitUZXN0IG1waV9yZWFkX3dyaXRlX3N0cmluZyAjOSAoRW1wdHkgTVBJIC0+IGRlYykKK21waV9yZWFkX3dyaXRlX3N0cmluZzoxNjoiIjoxMDoiMCI6NDowOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5ICMxCittYmVkdGxzX21waV9yZWFkX2JpbmFyeToiMDk0MTM3OWQwMGZlZDE0OTFmZTE1ZGYyODRkZmRlNGExNDJmNjhhYThkNDEyMDIzMTk1Y2VlNjY4ODNlNjI5MGZmZTcwM2Y0ZWE1OTYzYmYyMTI3MTNjZWU0NmIxMDdjMDkxODJiNWVkY2Q5NTVhZGFjNDE4YmY0OTE4ZTI4ODlhZjQ4ZTEwOTlkNTEzODMwY2VjODVjMjZhYzFlMTU4YjUyNjIwZTMzYmE4NjkyZjg5M2VmYmIyZjk1OGI0NDI0IjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkgIzEKK21iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeToxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiOiIwOTQxMzc5ZDAwZmVkMTQ5MWZlMTVkZjI4NGRmZGU0YTE0MmY2OGFhOGQ0MTIwMjMxOTVjZWU2Njg4M2U2MjkwZmZlNzAzZjRlYTU5NjNiZjIxMjcxM2NlZTQ2YjEwN2MwOTE4MmI1ZWRjZDk1NWFkYWM0MThiZjQ5MThlMjg4OWFmNDhlMTA5OWQ1MTM4MzBjZWM4NWMyNmFjMWUxNThiNTI2MjBlMzNiYTg2OTJmODkzZWZiYjJmOTU4YjQ0MjQiOjIwMDowCisKK1Rlc3QgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5ICMxIChCdWZmZXIganVzdCBmaXRzKQorbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5OjE2OiIxMjMxMjMxMjMxMjMxMjMxMjMxMjMxMjMxMjMiOiIwMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzMTIzIjoxNDowCisKK1Rlc3QgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5ICMyIChCdWZmZXIgdG9vIHNtYWxsKQorbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5OjE2OiIxMjMxMjMxMjMxMjMxMjMxMjMxMjMxMjMxMjMiOiIxMjMxMjMxMjMxMjMxMjMxMjMxMjMxMjMxMjMiOjEzOk1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9yZWFkX2ZpbGUgIzEKK21iZWR0bHNfbXBpX3JlYWRfZmlsZToxMDoiZGF0YV9maWxlcy9tcGlfMTAiOiIwMWY1NTMzMmMzYTQ4YjkxMGY5OTQyZjZjOTE0ZTU4YmVmMzdhNDdlZTQ1Y2IxNjRhNWI2YjhkMTAwNmJmNTlhMDU5YzIxNDQ5OTM5ZWJlYmZkZjUxN2QyZTFkYmFjODgwMTBkN2IxZjE0MWU5OTdiZDY4MDFkZGFlYzlkMDU5MTBmNGYyZGUyYjJjNGQ3MTRlMmMxNGE3MmZjN2YxN2FhNDI4ZDU5YzUzMTYyN2YwOSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSAjMSAoRW1wdHkgZmlsZSkKK21iZWR0bHNfbXBpX3JlYWRfZmlsZToxMDoiZGF0YV9maWxlcy9oYXNoX2ZpbGVfNCI6IiI6TUJFRFRMU19FUlJfTVBJX0ZJTEVfSU9fRVJST1IKKworVGVzdCBtYmVkdGxzX21waV9yZWFkX2ZpbGUgIzIgKElsbGVnYWwgaW5wdXQpCittYmVkdGxzX21waV9yZWFkX2ZpbGU6MTA6ImRhdGFfZmlsZXMvaGFzaF9maWxlXzMiOiIiOjAKKworVGVzdCBtYmVkdGxzX21waV9yZWFkX2ZpbGUgIzMgKElucHV0IHRvbyBiaWcpCittYmVkdGxzX21waV9yZWFkX2ZpbGU6MTA6ImRhdGFfZmlsZXMvbXBpX3Rvb19iaWciOiIiOk1CRURUTFNfRVJSX01QSV9CVUZGRVJfVE9PX1NNQUxMCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV93cml0ZV9maWxlICMxCittYmVkdGxzX21waV93cml0ZV9maWxlOjEwOiI1NjEyNTY4MDk4MTc1MjI4MjMzNDE0MTg5NjMyMDM3MjQ4OTQ5MDYxMzk2MzY5MzU1NjM5MjUyMDgxNjAxNzg5MjExMTM1MDYwNDExMTY5NzY4MjcwNTQ5ODMxOTUxMjA0OTA0MDUxNjY5ODgyNzgyOTI5MjA3NjgwODAwNjk0MDg3Mzk3NDk3OTU4NDUyNzA3MzQ4MTAxMjYzNjAxNjM1MzkxMzQ2MjM3Njc1NTU1NjcyMDAxOTgzMTE4NzM2NDk5MzU4NzkwMTk1Mjc1NzMwNzgzMDg5NjUzMTY3ODcyNzcxNzkyNCI6MTY6ImRhdGFfZmlsZXMvbXBpX3dyaXRlIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbHNiICMxCittYmVkdGxzX21waV9sc2I6MTA6IjU2MTI1NjgwOTgxNzUyMjgyMzM0MTQxODk2MzIwMzcyNDg5NDkwNjEzOTYzNjkzNTU2MzkyNTIwODE2MDE3ODkyMTExMzUwNjA0MTExNjk3NjgyNzA1NDk4MzE5NTEyMDQ5MDQwNTE2Njk4ODI3ODI5MjkyMDc2ODA4MDA2OTQwODczOTc0OTc5NTg0NTI3MDczNDgxMDEyNjM2MDE2MzUzOTEzNDYyMzc2NzU1NTU2NzIwMDE5ODMxMTg3MzY0OTkzNTg3OTAxOTUyNzU3MzA3ODMwODk2NTMxNjc4NzI3NzE3OTI0IjoyCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9sc2IgIzIKK21iZWR0bHNfbXBpX2xzYjoxMDoiMjQiOjMKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2xzYiAjMworbWJlZHRsc19tcGlfbHNiOjE2OiIyNCI6MgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbHNiICM0CittYmVkdGxzX21waV9sc2I6MTY6IjIwMDAiOjEzCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9iaXRsZW4gIzEKK21iZWR0bHNfbXBpX2JpdGxlbjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzQxNDE4OTYzMjAzNzI0ODk0OTA2MTM5NjM2OTM1NTYzOTI1MjA4MTYwMTc4OTIxMTEzNTA2MDQxMTE2OTc2ODI3MDU0OTgzMTk1MTIwNDkwNDA1MTY2OTg4Mjc4MjkyOTIwNzY4MDgwMDY5NDA4NzM5NzQ5Nzk1ODQ1MjcwNzM0ODEwMTI2MzYwMTYzNTM5MTM0NjIzNzY3NTU1NTY3MjAwMTk4MzExODczNjQ5OTM1ODc5MDE5NTI3NTczMDc4MzA4OTY1MzE2Nzg3Mjc3MTc5MjQiOjc2NAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYml0bGVuICMyCittYmVkdGxzX21waV9iaXRsZW46MTA6IjI0Ijo1CisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9iaXRsZW4gIzMKK21iZWR0bHNfbXBpX2JpdGxlbjoxMDoiMSI6MQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYml0bGVuICM0CittYmVkdGxzX21waV9iaXRsZW46MTA6IjE1Ijo0CisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9iaXRsZW4gIzUKK21iZWR0bHNfbXBpX2JpdGxlbjoxMDoiMTYiOjUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2JpdGxlbiAjNgorbWJlZHRsc19tcGlfYml0bGVuOjEwOiIxMCI6NAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYml0bGVuICM3CittYmVkdGxzX21waV9iaXRsZW46MTA6IjAiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9pbnQgIzEKK21iZWR0bHNfbXBpX2NtcF9pbnQ6NjkzOjY5MzowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfaW50ICMyCittYmVkdGxzX21waV9jbXBfaW50OjY5Mzo2OTI6MQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2ludCAjMworbWJlZHRsc19tcGlfY21wX2ludDo2OTM6Njk0Oi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfaW50IChOZWdhdGl2ZSB2YWx1ZXMpICMxCittYmVkdGxzX21waV9jbXBfaW50Oi0yOi0yOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9pbnQgKE5lZ2F0aXZlIHZhbHVlcykgIzIKK21iZWR0bHNfbXBpX2NtcF9pbnQ6LTI6LTM6MQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2ludCAoTmVnYXRpdmUgdmFsdWVzKSAjMworbWJlZHRsc19tcGlfY21wX2ludDotMjotMTotMQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX21waSAjMQorbWJlZHRsc19tcGlfY21wX21waToxMDoiNjkzIjoxMDoiNjkzIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpICMyCittYmVkdGxzX21waV9jbXBfbXBpOjEwOiI2OTMiOjEwOiI2OTIiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9tcGkgIzMKK21iZWR0bHNfbXBpX2NtcF9tcGk6MTA6IjY5MyI6MTA6IjY5NCI6LTEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9tcGkgKE5lZ2F0aXZlIHZhbHVlcykgIzEKK21iZWR0bHNfbXBpX2NtcF9tcGk6MTA6Ii0yIjoxMDoiLTIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9tcGkgKE5lZ2F0aXZlIHZhbHVlcykgIzIKK21iZWR0bHNfbXBpX2NtcF9tcGk6MTA6Ii0yIjoxMDoiLTMiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9tcGkgKE5lZ2F0aXZlIHZhbHVlcykgIzMKK21iZWR0bHNfbXBpX2NtcF9tcGk6MTA6Ii0yIjoxMDoiLTEiOi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpIChNaXhlZCB2YWx1ZXMpICM0CittYmVkdGxzX21waV9jbXBfbXBpOjEwOiItMyI6MTA6IjIiOi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfbXBpIChNaXhlZCB2YWx1ZXMpICM1CittYmVkdGxzX21waV9jbXBfbXBpOjEwOiIyIjoxMDoiLTMiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9tcGkgKE1peGVkIHZhbHVlcykgIzYKK21iZWR0bHNfbXBpX2NtcF9tcGk6MTA6Ii0yIjoxMDoiMzEyMzEyMzEyODk3OTgiOi0xCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9jbXBfYWJzICMxCittYmVkdGxzX21waV9jbXBfYWJzOjEwOiI2OTMiOjEwOiI2OTMiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgIzIKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6IjY5MyI6MTA6IjY5MiI6MQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2FicyAjMworbWJlZHRsc19tcGlfY21wX2FiczoxMDoiNjkzIjoxMDoiNjk0IjotMQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2FicyAoTmVnYXRpdmUgdmFsdWVzKSAjMQorbWJlZHRsc19tcGlfY21wX2FiczoxMDoiLTIiOjEwOiItMiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2FicyAoTmVnYXRpdmUgdmFsdWVzKSAjMgorbWJlZHRsc19tcGlfY21wX2FiczoxMDoiLTIiOjEwOiItMyI6LTEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKE5lZ2F0aXZlIHZhbHVlcykgIzMKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6Ii0yIjoxMDoiLTEiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKFplcm8gYW5kIFplcm8pICM0CittYmVkdGxzX21waV9jbXBfYWJzOjEwOiIwIjoxMDoiMCI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2FicyAoTWl4IHZhbHVlcykgIzEKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6Ii0yIjoxMDoiMiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfY21wX2FicyAoTWl4IHZhbHVlcykgIzIKK21iZWR0bHNfbXBpX2NtcF9hYnM6MTA6IjIiOjEwOiItMyI6LTEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NtcF9hYnMgKE1peCB2YWx1ZXMpICMzCittYmVkdGxzX21waV9jbXBfYWJzOjEwOiItMiI6MTA6IjEiOjEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2NvcHkgIzEKK21iZWR0bHNfbXBpX2NvcHk6MDoxNTAwCisKK0Jhc2UgdGVzdCBtcGlfY29weV9zZWxmICMxCittcGlfY29weV9zZWxmOjE0CisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zd2FwICMxCittYmVkdGxzX21waV9zd2FwOjA6MTUwMAorCitUZXN0IG1iZWR0bHNfbXBpX3NocmluayAjMQorbWJlZHRsc19tcGlfc2hyaW5rOjI6Mjo0OjQKKworVGVzdCBtYmVkdGxzX21waV9zaHJpbmsgIzIKK21iZWR0bHNfbXBpX3Nocmluazo0OjI6NDo0CisKK1Rlc3QgbWJlZHRsc19tcGlfc2hyaW5rICMzCittYmVkdGxzX21waV9zaHJpbms6ODoyOjQ6NAorCitUZXN0IG1iZWR0bHNfbXBpX3NocmluayAjNAorbWJlZHRsc19tcGlfc2hyaW5rOjg6NDo0OjQKKworVGVzdCBtYmVkdGxzX21waV9zaHJpbmsgIzUKK21iZWR0bHNfbXBpX3Nocmluazo4OjY6NDo2CisKK1Rlc3QgbWJlZHRsc19tcGlfc2hyaW5rICM2CittYmVkdGxzX21waV9zaHJpbms6NDoyOjA6MgorCitUZXN0IG1iZWR0bHNfbXBpX3NocmluayAjNworbWJlZHRsc19tcGlfc2hyaW5rOjQ6MTowOjEKKworVGVzdCBtYmVkdGxzX21waV9zaHJpbmsgIzgKK21iZWR0bHNfbXBpX3Nocmluazo0OjA6MDoxCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiAjMQorbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbjorMToiMDEiOisxOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduICMyCittYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduOisxOiJGRjAwMDAwMDAwMDAwMDAwMDAwMSI6KzE6IjAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24gIzMKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ246KzE6IjAxIjorMToiRkYwMDAwMDAwMDAwMDAwMDAwMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiAjNAorbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbjorMToiMDEiOi0xOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduICM1CittYmVkdGxzX21waV9zYWZlX2NvbmRfYXNzaWduOi0xOiIwMSI6KzE6IjAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24gIzYKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ246LTE6IjAxIjotMToiMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAgIzEKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwOisxOiIwMSI6KzE6IjAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwICMyCittYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcDorMToiRkYwMDAwMDAwMDAwMDAwMDAwMDEiOisxOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCAjMworbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXA6KzE6IjAxIjorMToiRkYwMDAwMDAwMDAwMDAwMDAwMDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAgIzQKK21iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwOisxOiIwMSI6LTE6IjAyIgorCitUZXN0IG1iZWR0bHNfbXBpX3NhZmVfY29uZF9zd2FwICM1CittYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcDotMToiMDEiOisxOiIwMiIKKworVGVzdCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCAjNgorbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXA6LTE6IjAxIjotMToiMDIiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9hZGRfYWJzICMxCittYmVkdGxzX21waV9hZGRfYWJzOjEwOiIxMjM0NTY3OCI6MTA6IjY0MjUzMSI6MTA6IjEyOTg4MjA5IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYWRkX2FicyAjMgorbWJlZHRsc19tcGlfYWRkX2FiczoxMDoiLTEyMzQ1Njc4IjoxMDoiNjQyNTMxIjoxMDoiMTI5ODgyMDkiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9hZGRfYWJzICMzCittYmVkdGxzX21waV9hZGRfYWJzOjEwOiIxMjM0NTY3OCI6MTA6Ii02NDI1MzEiOjEwOiIxMjk4ODIwOSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9hYnMgIzQKK21iZWR0bHNfbXBpX2FkZF9hYnM6MTA6Ii0xMjM0NTY3OCI6MTA6Ii02NDI1MzEiOjEwOiIxMjk4ODIwOSIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfYWJzICMxCittYmVkdGxzX21waV9hZGRfYWJzOjEwOiItNjQzODA4MDA2ODAzNTU0NDM5MjMwMTI5ODU0OTYxNDkyNjk5MTUxMzg2MTA3NTM0MDEzNDMyOTE4MDczNDM5NTI0MTM4MjY0ODQyMzcwNjMwMDYxMzY5NzE1Mzk0NzM5MTM0MDkwOTIyOTM3MzMyNTkwMzg0NzIwMzk3MTMzMzM1OTY5NTQ5MjU2MzIyNjIwOTc5MDM2Njg2NjMzMjEzOTAzOTUyOTY2MTc1MTA3MDk2NzY5MTgwMDE3NjQ2MTYxODUxNTczMTQ3NTk2MzkwMTUzIjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzM0OTgwODgzMTM1Njg5MzUwNTEzODM4MzM4Mzg1OTQ4OTk4MjE2NjQ2MzE3ODQ1NzczMzcxNzExOTM2MjQyNDMxODEzNjAwNTQ2Njk2Nzg0MTA0NTUzMjkxMTI0MzQ1NTI5NDI3MTcwODQwMDM1NDEzODQ1OTQ4NjQxMjk5NDAxNDUwNDMwODY3NjAwMzEyOTI0ODMzNDAwNjg5MjM1MDYxMTU4NzgyMjExODk4ODY0OTExMzI3NzI3Mzk2NjE2NjkwNDQ5NTg1MzExMzEzMjc3NzEiOjEwOiI1NjEyNTY4MDk4MTc1MjI4MjMzNDE0MTg5NjMyMDM3MjQ4OTQ5MDYxMzk2MzY5MzU1NjM5MjUyMDgxNjAxNzg5MjExMTM1MDYwNDExMTY5NzY4MjcwNTQ5ODMxOTUxMjA0OTA0MDUxNjY5ODgyNzgyOTI5MjA3NjgwODAwNjk0MDg3Mzk3NDk3OTU4NDUyNzA3MzQ4MTAxMjYzNjAxNjM1MzkxMzQ2MjM3Njc1NTU1NjcyMDAxOTgzMTE4NzM2NDk5MzU4NzkwMTk1Mjc1NzMwNzgzMDg5NjUzMTY3ODcyNzcxNzkyNCIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfYWJzICMyIChhZGQgdG8gZmlyc3QgdmFsdWUpCittcGlfYWRkX2Fic19hZGRfZmlyc3Q6MTA6IjEyMzEyMyI6MTA6IjEyMzEyMyI6MTA6IjI0NjI0NiIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfYWJzICMzIChhZGQgdG8gc2Vjb25kIHZhbHVlKQorbXBpX2FkZF9hYnNfYWRkX3NlY29uZDoxMDoiMTIzMTIzIjoxMDoiMTIzMTIzIjoxMDoiMjQ2MjQ2IgorCitSZWdyZXNzaW9uIG1iZWR0bHNfbXBpX2FkZF9hYnMgKGFkZCBzbWFsbCB0byB2ZXJ5IGxhcmdlIE1QSSB3aXRoIGNhcnJ5IHJvbGxvdmVyKQorbWJlZHRsc19tcGlfYWRkX2FiczoxNjoiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4IjoxNjoiMDgiOjE2OiIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitSZWdyZXNzaW9uIG1iZWR0bHNfbXBpX2FkZF9hYnMgKGFkZCBzbWFsbCB0byB2ZXJ5IGxhcmdlIE1QSSB3aXRoIGNhcnJ5IHJvbGxvdmVyKQorbWJlZHRsc19tcGlfYWRkX2FiczoxNjoiMDgiOjE2OiJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjgiOjE2OiIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYWRkX21waSAjMQorbWJlZHRsc19tcGlfYWRkX21waToxMDoiMTIzNDU2NzgiOjEwOiI2NDI1MzEiOjEwOiIxMjk4ODIwOSIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgIzIKK21iZWR0bHNfbXBpX2FkZF9tcGk6MTA6Ii0xMjM0NTY3OCI6MTA6IjY0MjUzMSI6MTA6Ii0xMTcwMzE0NyIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgIzMKK21iZWR0bHNfbXBpX2FkZF9tcGk6MTA6IjEyMzQ1Njc4IjoxMDoiLTY0MjUzMSI6MTA6IjExNzAzMTQ3IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfYWRkX21waSAjNAorbWJlZHRsc19tcGlfYWRkX21waToxMDoiLTEyMzQ1Njc4IjoxMDoiLTY0MjUzMSI6MTA6Ii0xMjk4ODIwOSIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfbXBpICMxCittYmVkdGxzX21waV9hZGRfbXBpOjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5MzY2MTYwNjMxNDQwODgxNzMzMTIzNzI4ODI2NzcxMjM4Nzk1Mzg3MDk0MDAxNTgzMDY1NjczMzgzMjgyNzkxNTQ0OTk2OTgzNjYwNzE5MDY3NjY0NDAwMzcwNzQyMTcxMTc4MDU2OTA4NzI3OTI4NDgxNDkxMTIwMjIyODYzMzIxNDQ4NzYxODMzNzYzMjY1MTIwODM1NzQ4MjE2NDc5MzM5OTI5NjEyNDk5MTczMTk4MzYyMTkzMDQyNzQyODAyNDM4MDMxMDQwMTUwMDA1NjM3OTAxMjMiOjEwOiI1MzE4NzIyODkwNTQyMDQxODQxODUwODQ3MzQzNzUxMzMzOTk0MDgzMDM2MTM5ODIxMzA4NTY2NDUyOTk0NjQ5MzA5NTIxNzg2MDYwNDU4NDg4NzcxMjkxNDc4MjAzODc5OTY0MjgxNzU1NjQyMjgyMDQ3ODU4NDYxNDEyMDc1MzI0NjI5MzYzMzk4MzQxMzk0MTI0MDE5NzUzMzg3MDU3OTQ2NDY1OTU0ODczMjQzNjUxOTQ3OTI4MjIxODk0NzMwOTIyNzM5OTM1ODA1ODc5NjQ1NzE2NTk2NzgwODQ0ODQxNTI2MDM4ODEwOTQxNzY5OTU1OTQ4MTMzMDIyODQyMzIwMDYwMDE3NTIxMjgxNjg5MDEyOTM1NjAwNTE4MzM2NDY4ODE0MzYyMTkiOjEwOiI3MzU4MjkxNjc0MTA2MDYxNjE1OTA4NTA2MDEzMDQxNjc5NzY2ODg0OTc2MDcyOTY0NzkxMTk3NDAwNzIxMTEzODQyMzUyNDEzMjg3NDcxMjY1MTAwNjU3NjM4ODM1MzIwODQ2MDE0ODc5MzcxMTA4ODE5MDk3MjU2Nzk5MTY5MzI2MjEyNDI5MDcxNzI0Njc2OTE1NTY0NzUwMzcwNzE4NjY1NTMzNjE5MjczNjE0Mzk0MTE5MTA2Mjc4ODAzNDU4ODUxMjIxNDI2OTI2MTAyNTA5MDM4MDQ1NTQyNjc4NjA0NzkxMTU5NjQ2Njg5OTg2NDM1Mjg4MDYyNjM1MzQxNDkzMjU4Mzc5NzE0MzI0NDMxODE1MzczNjMxNTU4NDg2NDc0NDUyMjYzNDIiCisKK1Rlc3QgbWJlZHRsc19tcGlfYWRkX21waSAjMgorbWJlZHRsc19tcGlfYWRkX21waToxMDoiNjQzODA4MDA2ODAzNTU0NDM5MjMwMTI5ODU0OTYxNDkyNjk5MTUxMzg2MTA3NTM0MDEzNDMyOTE4MDczNDM5NTI0MTM4MjY0ODQyMzcwNjMwMDYxMzY5NzE1Mzk0NzM5MTM0MDkwOTIyOTM3MzMyNTkwMzg0NzIwMzk3MTMzMzM1OTY5NTQ5MjU2MzIyNjIwOTc5MDM2Njg2NjMzMjEzOTAzOTUyOTY2MTc1MTA3MDk2NzY5MTgwMDE3NjQ2MTYxODUxNTczMTQ3NTk2MzkwMTUzIjoxMDoiNTYxMjU2ODA5ODE3NTIyODIzMzM0OTgwODgzMTM1Njg5MzUwNTEzODM4MzM4Mzg1OTQ4OTk4MjE2NjQ2MzE3ODQ1NzczMzcxNzExOTM2MjQyNDMxODEzNjAwNTQ2Njk2Nzg0MTA0NTUzMjkxMTI0MzQ1NTI5NDI3MTcwODQwMDM1NDEzODQ1OTQ4NjQxMjk5NDAxNDUwNDMwODY3NjAwMzEyOTI0ODMzNDAwNjg5MjM1MDYxMTU4NzgyMjExODk4ODY0OTExMzI3NzI3Mzk2NjE2NjkwNDQ5NTg1MzExMzEzMjc3NzEiOjEwOiI1NjEyNTY4MDk4MTc1MjI4MjMzNDE0MTg5NjMyMDM3MjQ4OTQ5MDYxMzk2MzY5MzU1NjM5MjUyMDgxNjAxNzg5MjExMTM1MDYwNDExMTY5NzY4MjcwNTQ5ODMxOTUxMjA0OTA0MDUxNjY5ODgyNzgyOTI5MjA3NjgwODAwNjk0MDg3Mzk3NDk3OTU4NDUyNzA3MzQ4MTAxMjYzNjAxNjM1MzkxMzQ2MjM3Njc1NTU1NjcyMDAxOTgzMTE4NzM2NDk5MzU4NzkwMTk1Mjc1NzMwNzgzMDg5NjUzMTY3ODcyNzcxNzkyNCIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgaW5wbGFjZSAjMQorbWJlZHRsc19tcGlfYWRkX21waV9pbnBsYWNlOjEwOiIxMjM0NTY3OCI6MTA6IjI0NjkxMzU2IgorCitUZXN0IG1iZWR0bHNfbXBpX2FkZF9tcGkgaW5wbGFjZSAjMiAKK21iZWR0bHNfbXBpX2FkZF9tcGlfaW5wbGFjZToxMDoiNjQzODA4MDA2ODAzNTU0NDM5MjMwMTI5ODU0OTYxNDkyNjk5MTUxMzg2MTA3NTM0MDEzNDMyOTE4MDczNDM5NTI0MTM4MjY0ODQyMzcwNjMwMDYxMzY5NzE1Mzk0NzM5MTM0MDkwOTIyOTM3MzMyNTkwMzg0NzIwMzk3MTMzMzM1OTY5NTQ5MjU2MzIyNjIwOTc5MDM2Njg2NjMzMjEzOTAzOTUyOTY2MTc1MTA3MDk2NzY5MTgwMDE3NjQ2MTYxODUxNTczMTQ3NTk2MzkwMTUzIjoxMDoiMTI4NzYxNjAxMzYwNzEwODg3ODQ2MDI1OTcwOTkyMjk4NTM5ODMwMjc3MjIxNTA2ODAyNjg2NTgzNjE0Njg3OTA0ODI3NjUyOTY4NDc0MTI2MDEyMjczOTQzMDc4OTQ3ODI2ODE4MTg0NTg3NDY2NTE4MDc2OTQ0MDc5NDI2NjY3MTkzOTA5ODUxMjY0NTI0MTk1ODA3MzM3MzI2NjQyNzgwNzkwNTkzMjM1MDIxNDE5MzUzODM2MDAzNTI5MjMyMzcwMzE0NjI5NTE5Mjc4MDMwNiIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfbXBpIGlucGxhY2UgIzMgCittYmVkdGxzX21waV9hZGRfbXBpX2lucGxhY2U6MTY6ImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIjoxNjoiMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZSIKKworVGVzdCBtYmVkdGxzX21waV9hZGRfaW50ICMxCittYmVkdGxzX21waV9hZGRfaW50OjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5Ijo5ODcxMjMyOjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDIyNjQ3NTYxIgorCitUZXN0IG1iZWR0bHNfbXBpX2FkZF9pbnQgIzIKK21iZWR0bHNfbXBpX2FkZF9pbnQ6MTA6IjIwMzk1Njg3ODM1NjQwMTk3NzQwNTc2NTg2NjkyOTAzNDU3NzI4MDE5Mzk5MzMxNDM0ODI2MzA5NDc3MjY0NjQ1MzI4MzA2MjcyMjcwMTI3NzYzMjkiOi05ODcxMjMyOjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDAyOTA1MDk3IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjMSAoVGVzdCB3aXRoIGxhcmdlciBzZWNvbmQgaW5wdXQpCittYmVkdGxzX21waV9zdWJfYWJzOjEwOiI1IjoxMDoiNyI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjMiAoVGVzdCB3aXRoIGxhcmdlciBzZWNvbmQgaW5wdXQpCittYmVkdGxzX21waV9zdWJfYWJzOjEwOiItNSI6MTA6Ii03IjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICMzIChUZXN0IHdpdGggbGFyZ2VyIHNlY29uZCBpbnB1dCkKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTA6Ii01IjoxMDoiNyI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9ORUdBVElWRV9WQUxVRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjNCAoVGVzdCB3aXRoIGxhcmdlciBzZWNvbmQgaW5wdXQpCittYmVkdGxzX21waV9zdWJfYWJzOjEwOiI1IjoxMDoiLTciOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfTkVHQVRJVkVfVkFMVUUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzEKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTA6IjciOjEwOiI1IjoxMDoiMiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjMgorbWJlZHRsc19tcGlfc3ViX2FiczoxMDoiLTciOjEwOiItNSI6MTA6IjIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzMKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTA6Ii03IjoxMDoiNSI6MTA6IjIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzQKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTA6IjciOjEwOiItNSI6MTA6IjIiOjAKKworVGVzdCBtYmVkdGxzX21waV9zdWJfYWJzICMxCittYmVkdGxzX21waV9zdWJfYWJzOjE2OiJGRkZGRkZGRkZGIjoxNjoiMDEiOjE2OiJGRkZGRkZGRkZFIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfc3ViX2FicyAjMgorbWJlZHRsc19tcGlfc3ViX2FiczoxNjoiRkZGRkZGRkZGMCI6MTY6IjAxIjoxNjoiRkZGRkZGRkZFRiI6MAorCitUZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzMKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTY6IkZGMDAwMDAwMDAiOjE2OiIwRjAwMDAwMDAwIjoxNjoiRjAwMDAwMDAwMCI6MAorCitUZXN0IG1iZWR0bHNfbXBpX3N1Yl9hYnMgIzQKK21iZWR0bHNfbXBpX3N1Yl9hYnM6MTY6IkZGMDAwMDAwMDAiOjE2OiIwRjAwMDAwMDAxIjoxNjoiRUZGRkZGRkZGRiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfc3ViX21waSAjMSAoVGVzdCB3aXRoIG5lZ2F0aXZlIHJlc3VsdCkKK21iZWR0bHNfbXBpX3N1Yl9tcGk6MTA6IjUiOjEwOiI3IjoxMDoiLTIiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfbXBpICMyIChUZXN0IHdpdGggbmVnYXRpdmUgaW5wdXRzKQorbWJlZHRsc19tcGlfc3ViX21waToxMDoiLTUiOjEwOiItNyI6MTA6IjIiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9zdWJfbXBpICMzIChUZXN0IHdpdGggbmVnYXRpdmUgYmFzZSkKK21iZWR0bHNfbXBpX3N1Yl9tcGk6MTA6Ii01IjoxMDoiNyI6MTA6Ii0xMiIKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX3N1Yl9tcGkgIzQgKFRlc3Qgd2l0aCBuZWdhdGl2ZSBzdWJ0cmFjdGlvbikKK21iZWR0bHNfbXBpX3N1Yl9tcGk6MTA6IjUiOjEwOiItNyI6MTA6IjEyIgorCitUZXN0IG1iZWR0bHNfbXBpX3N1Yl9tcGkgIzEKK21iZWR0bHNfbXBpX3N1Yl9tcGk6MTA6IjUzMTg3MjI4OTA1NDIwNDE4NDE4NTA4NDczNDM3NTEzMzM5OTQwODMwMzYxMzk4MjEzMDg1NjY0NTI5OTQ2NDkzMDk1MjE3ODYwNjA0NTg0ODg3NzEyOTE0NzgyMDM4Nzk5NjQyODE3NTU2NDIyODIwNDc4NTg0NjE0MTIwNzUzMjQ2MjkzNjMzOTgzNDEzOTQxMjQwMTk3NTMzODcwNTc5NDY0NjU5NTQ4NzMyNDM2NTE5NDc5MjgyMjE4OTQ3MzA5MjI3Mzk5MzU4MDU4Nzk2NDU3MTY1OTY3ODA4NDQ4NDE1MjYwMzg4MTA5NDE3Njk5NTU5NDgxMzMwMjI4NDIzMjAwNjAwMTc1MjEyODE2ODkwMTI5MzU2MDA1MTgzMzY0Njg4MTQzNjIxOSI6MTA6IjIwMzk1Njg3ODM1NjQwMTk3NzQwNTc2NTg2NjkyOTAzNDU3NzI4MDE5Mzk5MzMxNDM0ODI2MzA5NDc3MjY0NjQ1MzI4MzA2MjcyMjcwMTI3NzYzMjkzNjYxNjA2MzE0NDA4ODE3MzMxMjM3Mjg4MjY3NzEyMzg3OTUzODcwOTQwMDE1ODMwNjU2NzMzODMyODI3OTE1NDQ5OTY5ODM2NjA3MTkwNjc2NjQ0MDAzNzA3NDIxNzExNzgwNTY5MDg3Mjc5Mjg0ODE0OTExMjAyMjI4NjMzMjE0NDg3NjE4MzM3NjMyNjUxMjA4MzU3NDgyMTY0NzkzMzk5Mjk2MTI0OTkxNzMxOTgzNjIxOTMwNDI3NDI4MDI0MzgwMzEwNDAxNTAwMDU2Mzc5MDEyMyI6MTA6IjMyNzkxNTQxMDY5NzgwMjIwNjc3OTMxODg2NzQ0NjA5ODgyMjEyODEwOTYyMDY2Nzc4MjU5MzU1MDUyNjgxODQ3NzY2OTExNTg4MzM0NDU3MTI0NDE5MjUzMTc1NzI0MzkwODI1NDg2MzE5MTM0NTUyNzY2MTk2NjYwMjQ5ODEzMjMwNDYyOTc3MjQ5NTgxMTEzMzI0NzQ3NTY0MDMzOTcyMjczOTgyOTA0NzI4NzI5MDk3NzY3NTAxNjQ5ODYwMDI5OTQyNTg0NDQ2ODU2NTY3ODIzOTUxNDgwMTkwMTEwNzgyNjA5MTc5NzUxOTM1NTM0NzY2MDgyMDM0MTAzNDMxNDY4NjE2NTUzMjgyMzg5NDYyMTA0OTc1Njk0NzgxODY0NjMxNzY0NjA5NiIKKworVGVzdCBtYmVkdGxzX21waV9zdWJfbXBpICMyIChUZXN0IGZvciBuZWdhdGl2ZSByZXN1bHQpCittYmVkdGxzX21waV9zdWJfbXBpOjEwOiI2NDM4MDgwMDY4MDM1NTQ0MzkyMzAxMjk4NTQ5NjE0OTI2OTkxNTEzODYxMDc1MzQwMTM0MzI5MTgwNzM0Mzk1MjQxMzgyNjQ4NDIzNzA2MzAwNjEzNjk3MTUzOTQ3MzkxMzQwOTA5MjI5MzczMzI1OTAzODQ3MjAzOTcxMzMzMzU5Njk1NDkyNTYzMjI2MjA5NzkwMzY2ODY2MzMyMTM5MDM5NTI5NjYxNzUxMDcwOTY3NjkxODAwMTc2NDYxNjE4NTE1NzMxNDc1OTYzOTAxNTMiOjEwOiI1NjEyNTY4MDk4MTc1MjI4MjMzMzQ5ODA4ODMxMzU2ODkzNTA1MTM4MzgzMzgzODU5NDg5OTgyMTY2NDYzMTc4NDU3NzMzNzE3MTE5MzYyNDI0MzE4MTM2MDA1NDY2OTY3ODQxMDQ1NTMyOTExMjQzNDU1Mjk0MjcxNzA4NDAwMzU0MTM4NDU5NDg2NDEyOTk0MDE0NTA0MzA4Njc2MDAzMTI5MjQ4MzM0MDA2ODkyMzUwNjExNTg3ODIyMTE4OTg4NjQ5MTEzMjc3MjczOTY2MTY2OTA0NDk1ODUzMTEzMTMyNzc3MSI6MTA6Ii01NjEyNTY4MDk4MTc1MjI4MjMzMjg1NDI4MDMwNjc2NTM4MDYxMjE1MzcwMzk4MzYzMzQwNzEyMjUxMzI0NTY3NzA0MzMyMzczODI3NTU1MDgwMzY1NzIyMTc4OTgyNzMwNzc4MDM5Mzk1OTM5NzAzOTgxMzgwODYyNjE2MTA2NjIwODc5NDIxMDE0MzczMjgwNjgwOTA3MzUzNzUwMzcwODY3MTUwNDMwMzM4MjI5MDI5MjIxMTkyNTI1NTAxNDc3OTM5NDM2MzU5MjcyMjAxNTUwNzE5MzM4NTM4MzUzNDkzNzYxOCIKKworVGVzdCBtYmVkdGxzX21waV9zdWJfaW50ICMxCittYmVkdGxzX21waV9zdWJfaW50OjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5IjotOTg3MTIzMjoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAyMjY0NzU2MSIKKworVGVzdCBtYmVkdGxzX21waV9zdWJfaW50ICMyCittYmVkdGxzX21waV9zdWJfaW50OjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5Ijo5ODcxMjMyOjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDAyOTA1MDk3IgorCitUZXN0IG1iZWR0bHNfbXBpX3NoaWZ0X2wgIzEKK21iZWR0bHNfbXBpX3NoaWZ0X2w6MTA6IjY0IjoxOjEwOiIxMjgiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2hpZnRfbCAjMgorbWJlZHRsc19tcGlfc2hpZnRfbDoxMDoiNjU4Mzg1NTQ2OTExNzMzNTUwMTY0NTE2MDg4NDA1MjM4OTYxNDYxODgwMjU2MDI5ODM0NTk4ODMxOTcyMDM5NDY5NDIxNzU1MTE3ODE4MDEzNjUzNDk0ODE0NDM4OTMxOTU3MzE2NDAzMTExNjg5MTg3NjkxNDQ2OTQxNDA2Nzg4ODY5MDk4OTgzOTI5ODc0MDgwMzMyMTk1MTE3NDY1MzQ0MzQ0MzUwMDA4ODgwMTE4MDQyNzY0OTQzMjAxODc1ODcwOTE3NDY4ODMzNzA5NzkxNzMzMjgyMzYzMzIzOTQ4MDA1OTk4MjY5NzkyMjA3IjozNzoxMDoiOTA0ODc4MjA1NDg2MzkwMjA2OTE5MjIzMDQ2MTk3MjMwNzYzMDU0MDA5NjE2MTAxMTk4ODQ4NzI3MjMxOTA2Nzg2NDI4MDQxNjgzODIzNjc4NTY2ODYxMzQ1MzE4NjU2NDMwNjY5ODMwMTcyNDk4NDYyODY0NTAyNTEyNzIzNjQzNjU2MDUwMjI3NTA5MDA0Mzk0Mzc1OTUzNTUwNTI5NDUwMzU5MTU1NzkyMTY1NTczMzA1MDU0Mzg3MzQ5NTUzNDA1MjYxNDU0NzY5ODgyNTAxNzExODE0MDQ5NjY3MTgyODkyNTk3NDMzNzg4ODM2NDA5ODExOTI3MDQiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2hpZnRfciAjMQorbWJlZHRsc19tcGlfc2hpZnRfcjoxMDoiMTI4IjoxOjEwOiI2NCIKKworVGVzdCBtYmVkdGxzX21waV9zaGlmdF9yICMyCittYmVkdGxzX21waV9zaGlmdF9yOjEwOiIxMjA4MTU1NzA5Nzk3MDE0ODQ3MDQ5MDY5NzcwMDA3NjA1NjcxODI4NzE0MjkxMTQ3MTIwNjk4NjE1ODkwODQ3MDY1NTA2MjY1NzU5Njc1MTY3ODc0MzgwMDg1OTM0OTA3MjI3NzkzMzc1NDczOTQxMjA3MTgyNDg5OTU5MDAzNjMyMDk5NDcwMjUwNjMzMzY4ODI1NTk1MzkyMDg0MzAzMTkyMTY2ODg4ODkxMTcyMjI2MzMxNTU4Mzg0Njg0NTgwNDcwNTYzNTUyNDE1MTU0MTUxNTk3MzY0MzY0MDM0NDU1Nzk3Nzc0MjUxODk5NjkiOjQ1OjEwOiIzNDMzNzg1MDUzMDUzNDI2NDE1MzQzMjk1MDc2Mzc2MDk2MTUzMDk0MDUxNDA1NjM3MTc1OTQyNjYwNzc3NjcwNDk4Mzc5OTIxMzU0MTU3Nzk1MjE5NTc4MjY0MTM3OTg1NjQ5NDA3OTgxNjUxMjI2MDI5OTAzNDgzNDMzMjY5MDkzNzIxNTc4MDA0Mjg3MjkxNjc4MzI0OTgyMjk3ODYwOTQ3NzMwMDEyMjE3MDI4MzQ5NjI4OTk5Mzc4MzA5NjMwNjAxOTcxNjQwNTg3NTA0ODgzNzg5NTE4ODk2ODE3NDU3IgorCitUZXN0IG1iZWR0bHNfbXBpX3NoaWZ0X3IgIzQKK21iZWR0bHNfbXBpX3NoaWZ0X3I6MTY6IkZGRkZGRkZGRkZGRkZGRkYiOjYzOjE2OiIwMSIKKworVGVzdCBtYmVkdGxzX21waV9zaGlmdF9yICM0CittYmVkdGxzX21waV9zaGlmdF9yOjE2OiJGRkZGRkZGRkZGRkZGRkZGIjo2NDoxNjoiMDAiCisKK1Rlc3QgbWJlZHRsc19tcGlfc2hpZnRfciAjNgorbWJlZHRsc19tcGlfc2hpZnRfcjoxNjoiRkZGRkZGRkZGRkZGRkZGRiI6NjU6MTY6IjAwIgorCitUZXN0IG1iZWR0bHNfbXBpX3NoaWZ0X3IgIzcKK21iZWR0bHNfbXBpX3NoaWZ0X3I6MTY6IkZGRkZGRkZGRkZGRkZGRkYiOjEyODoxNjoiMDAiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tdWxfbXBpICMxCittYmVkdGxzX21waV9tdWxfbXBpOjEwOiI1IjoxMDoiNyI6MTA6IjM1IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbXVsX21waSAjMgorbWJlZHRsc19tcGlfbXVsX21waToxMDoiLTUiOjEwOiI3IjoxMDoiLTM1IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbXVsX21waSAjMworbWJlZHRsc19tcGlfbXVsX21waToxMDoiNSI6MTA6Ii03IjoxMDoiLTM1IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbXVsX21waSAjNAorbWJlZHRsc19tcGlfbXVsX21waToxMDoiLTUiOjEwOiItNyI6MTA6IjM1IgorCitUZXN0IG1iZWR0bHNfbXBpX211bF9tcGkgIzEKK21iZWR0bHNfbXBpX211bF9tcGk6MTA6IjI4OTExNzEwMDE3MzIwMjA1OTY2MTY3ODIwNzI1MzEzMjM0MzYxNTM1MjU5MTYzMDQ1ODY3OTg2Mjc3NDc4MTQ1MDgxMDc2ODQ1ODQ2NDkzNTIxMzQ4NjkzMjUzNTMwMDExMjQzOTg4MTYwMTQ4MDYzNDI0ODM3ODk1OTcxOTQ4MjQ0MTY3ODY3MjM2OTIzOTE5NTA2OTYyMzEyMTg1ODI5OTE0NDgyOTkzNDc4OTQ3NjU3NDcyMzUxNDYxMzM2NzI5NjQxNDg1MDY5MzIzNjM1NDI0NjkyOTMwMjc4ODg4OTIzNDUwMDYwNTQ2NDY1ODgzNDkwOTQ0MjY1MTQ3ODUxMDM2ODE3NDMzOTcwOTg0NzQ3NzMzMDIwNTIyMjU5NTM3IjoxMDoiMTY0NzE1ODE4OTE3MDE3OTQ3NjQ3MDQwMDk3MTkwNTczNDk5OTYyNzAyMzk5NDg5OTM0NTIyNjg4MTI5NzUwMzcyNDA1ODYwOTk5MjQ3MTI3MTUzNjY5Njc0ODY1ODc0MTc4MDM3NTM5MTYzMzQzMzEzNTU1NzM3NzY5NDUyMzg4NzE1MTIwMjY4MzI4MTA2MjYyMjYxNjQzNDYzMjg4MDc0MDc2NjkzNjYwMjk5MjYyMjE0MTUzODM1NjA4MTQzMzg4Mjg0NDk2NDIyNjUzNzc4MjI3NTk3NjgwMTE0MDY3NTcwNjEwNjM1MjQ3NjgxNDA1Njc4NjczNTAyMDg1NTQ0MzkzNDIzMjA0MTA1NTEzNDE2NzUxMTkwNzgwNTA5NTMiOjEwOiI0NzYyMjE1OTkxNzk0MjQ4ODc2Njk1MTU4MjkyMzEyMjMyNjM5MzkzNDIxMzU2ODE3OTE2MDU4NDI1NDA0MjkzMjEwMzgxNDQ2MzMzMjM5NDEyNDg3MDY0MDUzNzU3MjM0ODI5MTI1MzUxOTIzNjM4NDUxMTYxNTQyMzY0NjUxODQxNDc1OTk2OTc4NDEyNzM0MjQ4OTE0MTAwMDI3ODE5Njc5NjIxODYyNTI1ODMzMTExMTU3MDgxMjgxNjcxNzEyNjIyMDY5MTk1MTQ1ODc4OTk4ODM1NDcyNzk2NDcwMjU5NTI4Mzc1MTYzMjQ2NDk2NTY5MTM1ODA0MTE2MTEyOTczMTI2Nzg5NTU4MDE4OTk1MzY5Mzc1Nzc0NzY4MTk2Njc4NjEwNTMwNjM0MzI5MDYwNzEzMTU3Mjc5NDg4MjYyNzYwOTI1NDU3Mzk0MzIwMDU5NjI3ODE1NjI0MDM3OTU0NTUxNjI0ODMxNTkzNjI1ODUyODEyNDgyNjUwMDU0NDE3MTUwODAxOTc4MDAzMzU3NTc4NzE1ODgwNDU5NTk3NTQ1NDc4MzY4MjU5NzcxNjkxMjU4NjYzMjQxMjg0NDk2OTk4NzcwNzY3NjIzMTY3NjgxMjc4MTYwNzQ1ODc3NjY3OTkwMTg2MjYxNzkxOTk3NzYxODg0OTAwODcxMDM4NjkxNjQxMjI5MDY3OTE0NDAxMDE4MjI1OTQxMzk2NDg5NzM0NTQ3MTYyNTYzODMyOTQ2OTA4MTc1NzYxODg3NjEiCisKK1Rlc3QgbWJlZHRsc19tcGlfbXVsX2ludCAjMQorbWJlZHRsc19tcGlfbXVsX2ludDoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOSI6OTg3MTIzMjoxMDoiMjAxMzMwNTY2NDI1MTgyMjYwNDIzMTA3MzAxMDEzNzYyNzg0ODM1NDcyMzkxMzAxMjM4MDYzMzgwNTUzODc4MDM5NDMzNDI3MzgwNjMzNTk3ODIxMDc2NjczMjgiOiI9PSIKKworVGVzdCBtYmVkdGxzX21waV9tdWxfaW50ICMyIChVbnNpZ25lZCwgdGh1cyBmYWlsdXJlKQorbWJlZHRsc19tcGlfbXVsX2ludDoxMDoiMjAzOTU2ODc4MzU2NDAxOTc3NDA1NzY1ODY2OTI5MDM0NTc3MjgwMTkzOTkzMzE0MzQ4MjYzMDk0NzcyNjQ2NDUzMjgzMDYyNzIyNzAxMjc3NjMyOSI6LTk4NzEyMzI6MTA6Ii0yMDEzMzA1NjY0MjUxODIyNjA0MjMxMDczMDEwMTM3NjI3ODQ4MzU0NzIzOTEzMDEyMzgwNjMzODA1NTM4NzgwMzk0MzM0MjczODA2MzM1OTc4MjEwNzY2NzMyOCI6IiE9IgorCitUZXN0IG1iZWR0bHNfbXBpX211bF9pbnQgIzMKK21iZWR0bHNfbXBpX211bF9pbnQ6MTA6Ii0yMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5Ijo5ODcxMjMyOjEwOiItMjAxMzMwNTY2NDI1MTgyMjYwNDIzMTA3MzAxMDEzNzYyNzg0ODM1NDcyMzkxMzAxMjM4MDYzMzgwNTUzODc4MDM5NDMzNDI3MzgwNjMzNTk3ODIxMDc2NjczMjgiOiI9PSIKKworVGVzdCBtYmVkdGxzX21waV9tdWxfaW50ICM0IChVbnNpZ25lZCwgdGh1cyBmYWlsdXJlKQorbWJlZHRsc19tcGlfbXVsX2ludDoxMDoiLTIwMzk1Njg3ODM1NjQwMTk3NzQwNTc2NTg2NjkyOTAzNDU3NzI4MDE5Mzk5MzMxNDM0ODI2MzA5NDc3MjY0NjQ1MzI4MzA2MjcyMjcwMTI3NzYzMjkiOi05ODcxMjMyOjEwOiIyMDEzMzA1NjY0MjUxODIyNjA0MjMxMDczMDEwMTM3NjI3ODQ4MzU0NzIzOTEzMDEyMzgwNjMzODA1NTM4NzgwMzk0MzM0MjczODA2MzM1OTc4MjEwNzY2NzMyOCI6IiE9IgorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjMQorbWJlZHRsc19tcGlfZGl2X21waToxMDoiMTAwMCI6MTA6IjEzIjoxMDoiNzYiOjEwOiIxMiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjMiAoRGl2aWRlIGJ5IHplcm8pCittYmVkdGxzX21waV9kaXZfbXBpOjEwOiIxMDAwIjoxMDoiMCI6MTA6IjEiOjEwOiIxIjpNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTworCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjMworbWJlZHRsc19tcGlfZGl2X21waToxMDoiMTAwMCI6MTA6Ii0xMyI6MTA6Ii03NiI6MTA6IjEyIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjMQorbWJlZHRsc19tcGlfZGl2X21waToxMDoiMjAxMzMwNTY2NDI1MTgyMjYwNDIzMTA3MzAxMDEzNzYyNzg0ODM1NDcyMzkxMzAxMjM4MDYzMzgwNTUzODc4MDM5NDMzNDI3MzgwNjMzNTk3ODIxMDc2NjczMjgiOjEwOiIzNCI6MTA6IjU5MjE0ODcyNDc3OTk0NzgyNDc3Mzg0NTAwMjk4MTY1NTI0OTUxNjA5NTI2ODUzMzA1MzEyNzU4OTg2NDM0NzE3NDgwNDE5ODE3ODMzNDExMTIzODQ2MDgwMyI6MTA6IjI2IjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZGl2X21waSAjMgorbWJlZHRsc19tcGlfZGl2X21waToxMDoiNDc2MjIxNTk5MTc5NDI0ODg3NjY5NTE1ODI5MjMxMjIzMjYzOTM5MzQyMTM1NjgxNzkxNjA1ODQyNTQwNDI5MzIxMDM4MTQ0NjMzMzIzOTQxMjQ4NzA2NDA1Mzc1NzIzNDgyOTEyNTM1MTkyMzYzODQ1MTE2MTU0MjM2NDY1MTg0MTQ3NTk5Njk3ODQxMjczNDI0ODkxNDEwMDAyNzgxOTY3OTYyMTg2MjUyNTgzMzExMTE1NzA4MTI4MTY3MTcxMjYyMjA2OTE5NTE0NTg3ODk5ODgzNTQ3Mjc5NjQ3MDI1OTUyODM3NTE2MzI0NjQ5NjU2OTEzNTgwNDExNjExMjk3MzEyNjc4OTU1ODAxODk5NTM2OTM3NTc3NDc2ODE5NjY3ODYxMDUzMDYzNDMyOTA2MDcxMzE1NzI3OTQ4ODI2Mjc2MDkyNTQ1NzM5NDMyMDA1OTYyNzgxNTYyNDAzNzk1NDU1MTYyNDgzMTU5MzYyNTg1MjgxMjQ4MjY1MDA1NDQxNzE1MDgwMTk3ODAwMzM1NzU3ODcxNTg4MDQ1OTU5NzU0NTQ3ODM2ODI1OTc3MTY5MTI1ODY2MzI0MTI4NDQ5Njk5ODc3MDc2NzYyMzE2NzY4MTI3ODE2MDc0NTg3NzY2Nzk5MDE4NjI2MTc5MTk5Nzc2MTg4NDkwMDg3MTAzODY5MTY0MTIyOTA2NzkxNDQwMTAxODIyNTk0MTM5NjQ4OTczNDU0NzE2MjU2MzgzMjk0NjkwODE3NTc2MTg4NzYyIjoxMDoiMjg5MTE3MTAwMTczMjAyMDU5NjYxNjc4MjA3MjUzMTMyMzQzNjE1MzUyNTkxNjMwNDU4Njc5ODYyNzc0NzgxNDUwODEwNzY4NDU4NDY0OTM1MjEzNDg2OTMyNTM1MzAwMTEyNDM5ODgxNjAxNDgwNjM0MjQ4Mzc4OTU5NzE5NDgyNDQxNjc4NjcyMzY5MjM5MTk1MDY5NjIzMTIxODU4Mjk5MTQ0ODI5OTM0Nzg5NDc2NTc0NzIzNTE0NjEzMzY3Mjk2NDE0ODUwNjkzMjM2MzU0MjQ2OTI5MzAyNzg4ODg5MjM0NTAwNjA1NDY0NjU4ODM0OTA5NDQyNjUxNDc4NTEwMzY4MTc0MzM5NzA5ODQ3NDc3MzMwMjA1MjIyNTk1MzciOjEwOiIxNjQ3MTU4MTg5MTcwMTc5NDc2NDcwNDAwOTcxOTA1NzM0OTk5NjI3MDIzOTk0ODk5MzQ1MjI2ODgxMjk3NTAzNzI0MDU4NjA5OTkyNDcxMjcxNTM2Njk2NzQ4NjU4NzQxNzgwMzc1MzkxNjMzNDMzMTM1NTU3Mzc3Njk0NTIzODg3MTUxMjAyNjgzMjgxMDYyNjIyNjE2NDM0NjMyODgwNzQwNzY2OTM2NjAyOTkyNjIyMTQxNTM4MzU2MDgxNDMzODgyODQ0OTY0MjI2NTM3NzgyMjc1OTc2ODAxMTQwNjc1NzA2MTA2MzUyNDc2ODE0MDU2Nzg2NzM1MDIwODU1NDQzOTM0MjMyMDQxMDU1MTM0MTY3NTExOTA3ODA1MDk1MyI6MTA6IjEiOjAKKworVGVzdCBtYmVkdGxzX21waV9kaXZfbXBpICMzCittYmVkdGxzX21waV9kaXZfbXBpOjEwOiIxMDAwIjoxMDoiNyI6MTA6IjE0MiI6MTA6IjYiOjAKKworVGVzdCBtYmVkdGxzX21waV9kaXZfbXBpICM0CittYmVkdGxzX21waV9kaXZfbXBpOjEwOiI3NzciOjEwOiI3IjoxMDoiMTExIjoxMDoiMCI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZGl2X2ludCAjMQorbWJlZHRsc19tcGlfZGl2X2ludDoxMDoiMTAwMCI6MTM6MTA6Ijc2IjoxMDoiMTIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2Rpdl9pbnQgIzIgKERpdmlkZSBieSB6ZXJvKQorbWJlZHRsc19tcGlfZGl2X2ludDoxMDoiMTAwMCI6MDoxMDoiMSI6MTA6IjEiOk1CRURUTFNfRVJSX01QSV9ESVZJU0lPTl9CWV9aRVJPCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9kaXZfaW50ICMzCittYmVkdGxzX21waV9kaXZfaW50OjEwOiIxMDAwIjotMTM6MTA6Ii03NiI6MTA6IjEyIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfZGl2X2ludCAjMQorbWJlZHRsc19tcGlfZGl2X2ludDoxMDoiMjAxMzMwNTY2NDI1MTgyMjYwNDIzMTA3MzAxMDEzNzYyNzg0ODM1NDcyMzkxMzAxMjM4MDYzMzgwNTUzODc4MDM5NDMzNDI3MzgwNjMzNTk3ODIxMDc2NjczMjgiOjM0OjEwOiI1OTIxNDg3MjQ3Nzk5NDc4MjQ3NzM4NDUwMDI5ODE2NTUyNDk1MTYwOTUyNjg1MzMwNTMxMjc1ODk4NjQzNDcxNzQ4MDQxOTgxNzgzMzQxMTEyMzg0NjA4MDMiOjEwOiIyNiI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2Rpdl9pbnQgIzIKK21iZWR0bHNfbXBpX2Rpdl9pbnQ6MTA6IjIwMTMzMDU2NjQyNTE4MjI2MDQyMzEwNzMwMTAxMzc2Mjc4NDgzNTQ3MjM5MTMwMTIzODA2MzM4MDU1Mzg3ODAzOTQzMzQyNzM4MDYzMzU5NzgyMTA3NjY3MzI4IjotMzQ6MTA6Ii01OTIxNDg3MjQ3Nzk5NDc4MjQ3NzM4NDUwMDI5ODE2NTUyNDk1MTYwOTUyNjg1MzMwNTMxMjc1ODk4NjQzNDcxNzQ4MDQxOTgxNzgzMzQxMTEyMzg0NjA4MDMiOjEwOiIyNiI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX21waSAjMQorbWJlZHRsc19tcGlfbW9kX21waToxMDoiMTAwMCI6MTA6IjEzIjoxMDoiMTIiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9tcGkgIzIgKERpdmlkZSBieSB6ZXJvKQorbWJlZHRsc19tcGlfbW9kX21waToxMDoiMTAwMCI6MTA6IjAiOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTworCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX21waSAjMworbWJlZHRsc19tcGlfbW9kX21waToxMDoiLTEwMDAiOjEwOiIxMyI6MTA6IjEiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9tcGkgIzQgKE5lZ2F0aXZlIG1vZHVsbykKK21iZWR0bHNfbXBpX21vZF9tcGk6MTA6IjEwMDAiOjEwOiItMTMiOjEwOiItMSI6TUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfbXBpICM1IChOZWdhdGl2ZSBtb2R1bG8pCittYmVkdGxzX21waV9tb2RfbXBpOjEwOiItMTAwMCI6MTA6Ii0xMyI6MTA6Ii0xMiI6TUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfaW50ICMxCittYmVkdGxzX21waV9tb2RfaW50OjEwOiIxMDAwIjoxMzoxMjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfaW50ICMyIChEaXZpZGUgYnkgemVybykKK21iZWR0bHNfbXBpX21vZF9pbnQ6MTA6IjEwMDAiOjA6MDpNQkVEVExTX0VSUl9NUElfRElWSVNJT05fQllfWkVSTworCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjMworbWJlZHRsc19tcGlfbW9kX2ludDoxMDoiLTEwMDAiOjEzOjE6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjNCAoTmVnYXRpdmUgbW9kdWxvKQorbWJlZHRsc19tcGlfbW9kX2ludDoxMDoiMTAwMCI6LTEzOjA6TUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfaW50ICM1IChOZWdhdGl2ZSBtb2R1bG8pCittYmVkdGxzX21waV9tb2RfaW50OjEwOiItMTAwMCI6LTEzOjA6TUJFRFRMU19FUlJfTVBJX05FR0FUSVZFX1ZBTFVFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9tb2RfaW50ICM2IChCeSAxKQorbWJlZHRsc19tcGlfbW9kX2ludDoxMDoiMTAwMCI6MTowOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX21vZF9pbnQgIzcgKEJ5IDIpCittYmVkdGxzX21waV9tb2RfaW50OjEwOiIxMDAxIjoyOjE6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfbW9kX2ludCAjOCAoQnkgMikKK21iZWR0bHNfbXBpX21vZF9pbnQ6MTA6IjEwMDAiOjI6MDowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9leHBfbW9kICMxCittYmVkdGxzX21waV9leHBfbW9kOjEwOiIyMyI6MTA6IjEzIjoxMDoiMjkiOjEwOiIiOjEwOiIyNCI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAjMiAoRXZlbiBOKQorbWJlZHRsc19tcGlfZXhwX21vZDoxMDoiMjMiOjEwOiIxMyI6MTA6IjMwIjoxMDoiIjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9leHBfbW9kICMzIChOZWdhdGl2ZSBOKQorbWJlZHRsc19tcGlfZXhwX21vZDoxMDoiMjMiOjEwOiIxMyI6MTA6Ii0yOSI6MTA6IiI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAjNCAoTmVnYXRpdmUgYmFzZSkKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTA6Ii0yMyI6MTA6IjEzIjoxMDoiMjkiOjEwOiIiOjEwOiI1IjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9leHBfbW9kICM1IChOZWdhdGl2ZSBleHBvbmVudCkKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTA6IjIzIjoxMDoiLTEzIjoxMDoiMjkiOjEwOiIiOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2V4cF9tb2QgIzcgKE5lZ2F0aXZlIGJhc2UgKyBleHBvbmVudCkKK21iZWR0bHNfbXBpX2V4cF9tb2Q6MTA6Ii0yMyI6MTA6Ii0xMyI6MTA6IjI5IjoxMDoiIjoxMDoiMCI6TUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK1Rlc3QgbWJlZHRsc19tcGlfZXhwX21vZCAjMQorbWJlZHRsc19tcGlfZXhwX21vZDoxMDoiNDMzMDE5MjQwOTEwMzc3NDc4MjE3MzczNTcyOTU5NTYwMTA5ODE5NjQ4NjQ3MDE2MDk2NTYwNTIzNzY5MDEwODgxMTcyODY5MDgzMzM4Mjg1NTczNzU2NTc0NTU3Mzk1ODYyOTY1MDk1MDE2NDgzODY3ODEzMDQzNjYzOTgxOTQ2NDc3Njk4NDY2NTAxNDUxODMyNDA3NTkyMzI3MzU2MzMxMjYzMTI0NTU1MTM3NzMyMzkzOTM4MjQyMjg1NzgyMTQ0OTI4NzUzOTE5NTg4NjMyNjc5MDUwNzk5MTk4OTM3MTMyOTIyMTQ1MDg0ODQ3IjoxMDoiNTc4MTUzODMyNzk3NzgyODg5NzE1MDkwOTE2Njc3ODQwNzY1OTI1MDQ1ODM3OTY0NTgyMzA2MjA0MjQ5MjQ2MTU3Njc1ODUyNjc1NzQ5MDkxMDA3MzYyODAwODYxMzk3NzU1MDU0NjM4Mjc3NDc3NTU3MDg4ODEzMDAyOTc2MzU3MTUyODY5OTU3NDcxNzU4MzIyODkzOTUzNTk2MDIzNDQ2NDIzMDg4MjU3MzYxNTkzMDM4NDk3OTEwMDM3OTEwMjkxNTY1NzQ4Mzg2Njc1NTM3MTU1OTgxMTcxODc2Nzc2MDU5NDkxOTQ1Njk3MTM1NDE4NDExMzcyMSI6MTA6IjU4MzEzNzAwNzc5NzI3NjkyMzk1Njg5MTIxNjIxNjAyMjE0NDA1MjA0NDA5MTMxMTM4ODYwMTY1Mjk2MTQwOTU1NzUxNjQyMTYxMjg3NDU3MTU1NDQxNTYwNjc0NjQ3OTEwNTc5NTgzMzE0NTU4Mzk1OTYyMjExNzQxODUzMTE2NjM5MTE4NDkzOTA2NjUyMDg2OTgwMDg1NzUzMDQyMTg3MzI1MDExNDc3MzIwNDM1NDk2Mzg2NDcyOTM4Njk1NzQyNzI3NjQ0ODY4MzA5MjQ5MTk0NzU2Njk5MjA3NzEzNjU1MzA2NjI3MzIwNzc3NzEzNDMwMzM5NzcyNDY3OTEzODgzMzEyNjcwMDk1NyI6MTA6IiI6MTA6IjExNDU5NzQ0OTI3NjY4NDM1NTE0NDkyMDY3MDAwNzE0Nzk1MzIzMjY1OTQzNjM4MDE2MzQ2MTU1MzE4Njk0MDExMzkyOTc3NzE5NjAxODE2NDE0OTcwMzU2NjQ3MjkzNjU3ODg5MDk5MTA0OTM0NDQ1OTIwNDE5OTg4ODI1NDkwNzExMzQ5NTc5NDczMDQ1MjY5OTg0MjI3MzkzOTU4MTA0ODE0MjAwNDgzNDMzMDM2OTQ4MzgxMzg3NjYxODc3MjU3ODg2OTA4MzI0ODA2MTYxNjQ0NDM5MjA5MTY5Mzc4NzAzOTYzNjMxNjg0NTUxMjI5MjEyNzA5Nzg2NTAyNjI5MDE3MzAwNDg2MDczNiI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2V4cF9tb2QgKE5lZ2F0aXZlIGJhc2UpCittYmVkdGxzX21waV9leHBfbW9kOjEwOiItMTAwMDAwMDAwMDAiOjEwOiIxMDAwMDAwMDAwMCI6MTA6Ijk5OTk5IjoxMDoiIjoxMDoiOTk5OTgiOjAKKworVGVzdCBtYmVkdGxzX21waV9leHBfbW9kIChOZWdhdGl2ZSBiYXNlKQorbWJlZHRsc19tcGlfZXhwX21vZDoxNjoiLTlmMTMwMTJjZDkyYWE3MmZiODZhYzg4NzlkMmZkZTRmN2ZkNjYxYWFhZTQzYTAwOTcxZjA4MWNjNjBjYTI3NzA1OWQ1YzM3ZTg5NjUyZTJhZjI1ODVkMjgxZDY2ZWY2YTlkMzhhMTE3ZTk2MDhlOWU3NTc0Y2QxNDJkYzU1Mjc4ODM4YTIxNjFkZDU2ZGI5NDcwZDRjMWRhMmQ1ZGYxNWE5MDhlZTJlYjg4NmFhYTg5MGYyM2JlMTZkZTU5Mzg2NjYzYTEyZjFhZmJiMzI1NDMxYTNlODM1ZTNmZDg5Yjk4Yjk2YTZmNzczODJmNDU4ZWY5YTM3ZTFmODRhMDMwNDVjODY3NmFiNTUyOTFhOTRjMjIyOGVhMTU0NDhlZTk2YjYyNmI5OTgiOjE2OiI0MGE1NGQxYjllODY3ODlmMDZkOTYwN2ZiMTU4NjcyZDY0ODY3NjY1YzczZWU5YWJiNTQ1ZmM3YTc4NTYzNGIzNTRjN2JhZTViOTYyY2U4MDQwY2Y0NWYyYzFmM2QzNjU5YjJlZTVlZGUxNzUzNGM4ZmMyZWM4NWM4MTVlOGRmMWZlNzA0OGQxMmM5MGVlMzFiODhhNjhhMDgxZjE3ZjBkOGNlNWY0MDMwNTIxZTk0MDAwODNiY2VhNzNhNDI5MDMxZDRjYTc5NDljMjAwMGQ1OTcwODhlMGMzOWE2MDE0ZDhiZjk2MmI3M2JiMmU4MDgzYmQwMzkwYTRlMDBiOWIzIjoxNjoiZWVhZjBhYjlhZGIzOGRkNjljMzNmODBhZmE4ZmM1ZTg2MDcyNjE4Nzc1ZmYzYzBiOWVhMjMxNGM5YzI1NjU3NmQ2NzRkZjc0OTZlYTgxZDMzODNiNDgxM2Q2OTJjNmUwZTBkNWQ4ZTI1MGI5OGJlNDhlNDk1YzFkNjA4OWRhZDE1ZGM3ZDdiNDYxNTRkNmI2Y2U4ZWY0YWQ2OWIxNWQ0OTgyNTU5YjI5N2JjZjE4ODVjNTI5ZjU2NjY2MGU1N2VjNjhlZGJjM2MwNTcyNmNjMDJmZDRjYmY0OTc2ZWFhOWFmZDUxMzhmZTgzNzY0MzViOWZjNjFkMmZjMGViMDZlMyI6MTY6IiI6MTY6IjIxYWNjNzE5OWUxYjkwZjliNDg0NGZmZTEyYzE5ZjAwZWM1NDhjNWQzMmIyMWM2NDdkNDhiNjAxNWQ4ZWI5ZWM5ZGIwNWI0ZjNkNDRkYjQyMjdhMmI1NjU5YzFhN2NjZWI5ZDVmYThmYTYwMzc2MDQ3OTUzY2U3Mzk3ZDkwYWFlYjc0NjVlMTRlODIwNzM0Zjg0YWE1MmFkMGZjNjY3MDFiY2JiOTkxZDU3NzE1ODA2YTExNTMxMjY4ZTFlODNkZDQ4Mjg4YzcyYjQyNGE2Mjg3ZTljZTRlNWNjNGRiMGRkNjc2MTRhZWNjMjNiMDEyNGE1Nzc2ZDM2ZTVjODk0ODMiOjAKKworQmFzZSB0ZXN0IEdDRCAjMQorbWJlZHRsc19tcGlfZ2NkOjEwOiI2OTMiOjEwOiI2MDkiOjEwOiIyMSIKKworQmFzZSB0ZXN0IEdDRCAjMgorbWJlZHRsc19tcGlfZ2NkOjEwOiIxNzY0IjoxMDoiODY4IjoxMDoiMjgiCisKK0Jhc2UgdGVzdCBHQ0QgIzMKK21iZWR0bHNfbXBpX2djZDoxMDoiNzY4NDU0OTIzIjoxMDoiNTQyMTY3ODE0IjoxMDoiMSIKKworVGVzdCBHQ0QgIzEKK21iZWR0bHNfbXBpX2djZDoxMDoiNDMzMDE5MjQwOTEwMzc3NDc4MjE3MzczNTcyOTU5NTYwMTA5ODE5NjQ4NjQ3MDE2MDk2NTYwNTIzNzY5MDEwODgxMTcyODY5MDgzMzM4Mjg1NTczNzU2NTc0NTU3Mzk1ODYyOTY1MDk1MDE2NDgzODY3ODEzMDQzNjYzOTgxOTQ2NDc3Njk4NDY2NTAxNDUxODMyNDA3NTkyMzI3MzU2MzMxMjYzMTI0NTU1MTM3NzMyMzkzOTM4MjQyMjg1NzgyMTQ0OTI4NzUzOTE5NTg4NjMyNjc5MDUwNzk5MTk4OTM3MTMyOTIyMTQ1MDg0ODQ3IjoxMDoiNTc4MTUzODMyNzk3NzgyODg5NzE1MDkwOTE2Njc3ODQwNzY1OTI1MDQ1ODM3OTY0NTgyMzA2MjA0MjQ5MjQ2MTU3Njc1ODUyNjc1NzQ5MDkxMDA3MzYyODAwODYxMzk3NzU1MDU0NjM4Mjc3NDc3NTU3MDg4ODEzMDAyOTc2MzU3MTUyODY5OTU3NDcxNzU4MzIyODkzOTUzNTk2MDIzNDQ2NDIzMDg4MjU3MzYxNTkzMDM4NDk3OTEwMDM3OTEwMjkxNTY1NzQ4Mzg2Njc1NTM3MTU1OTgxMTcxODc2Nzc2MDU5NDkxOTQ1Njk3MTM1NDE4NDExMzcyMSI6MTA6IjEiCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pbnZfbW9kICMxCittYmVkdGxzX21waV9pbnZfbW9kOjEwOiIzIjoxMDoiMTEiOjEwOiI0IjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pbnZfbW9kICMyCittYmVkdGxzX21waV9pbnZfbW9kOjEwOiIzIjoxMDoiMCI6MTA6IjAiOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaW52X21vZCAjMworbWJlZHRsc19tcGlfaW52X21vZDoxMDoiMyI6MTA6Ii0xMSI6MTA6IjQiOk1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaW52X21vZCAjNAorbWJlZHRsc19tcGlfaW52X21vZDoxMDoiMiI6MTA6IjQiOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworVGVzdCBtYmVkdGxzX21waV9pbnZfbW9kICMxCittYmVkdGxzX21waV9pbnZfbW9kOjE2OiJhYTRkZjVjYjE0YjRjMzEyMzdmOThiZDFmYWY1MjdjMjgzYzJkMGYzZWVjODk3MTg2NjRiYTMzZjk3NjI5MDdjIjoxNjoiZmZmYmJkNjYwYjk0NDEyYWU2MWVhZDljMjkwNmEzNDQxMTZlMzE2YTI1NmZkMzg3ODc0YzZjNjc1YjFkNTg3ZCI6MTY6IjhkNmE1YzFkN2FkZWFlM2U5NGI5YmNkMmM0N2UwZDQ2ZTc3OGJjODgwNGEyY2MyNWMwMmQ3NzVkYzNkMDViMGMiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIwIjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMyCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIxIjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMzCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIyIjowCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMyI6MAorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzUKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjQiOk1CRURUTFNfRVJSX01QSV9OT1RfQUNDRVBUQUJMRQorCitCYXNlIHRlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzYKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjUiOjAKKworQmFzZSB0ZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM3CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIyNyI6TUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFCisKK0Jhc2UgdGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjOAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiNDciOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMWEKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjgzNzI2NzI4ODgzMTQ2MTUxOTc5NjY4MjQzMzI2MDk3MDQ5Mjg5MjA4NDgyOTg3Njg1OTY1Mjc2NDM5MTU3MTYyMzM3NDc2NDc3NTgxIjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMWIKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjgxMjQ4NjM3NDEwNTg0OTIxNDU0ODY5MzA4NDg4ODk5MjY3MDk2NTMwNjQzNjMyNzMwMjU4MjAxMjU2MDkyNTgyMjgxMjYzMjQ0NjQxIjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMmEKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjgyNzEzMTUwNzIyMTY1NDU2MzkzNzgzMjY4NjY5NjIwMDk5NTU5NTgzNTY5NDQzNzk4MzY1ODg0MDg3MDAzNjU4NjEyNDE2ODE4Njk2Nzc5NjgwOTExNzc0OTA0NzQzMDc2ODgyNTgyMjg1NzA0MjQzMjcyMjgyODA5Njc3OTA5ODQ5ODE5MjQ1OTgxOTMwNjMyMTA3Mzk2ODczNTE3NzUzMTE2NDU2NTMwNTYzNTI4MTE5ODE0ODAzMjYxMjAyOTc2NzU4NDY0NDMwNTkxMjA5OSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMyYgorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiODI3MTMxNTA3MjIxNjU0NTYzOTM3ODMyNjg2Njk2MjAwOTk1NTk1ODM1Njk0NDM3OTgzNjU4ODQwODcwMDM2NTg2MTI0MTY4MTg2OTY3Nzk2ODA5MTE3NzQ5MDQ3NDMwNzY4ODI1ODIyODU3MDQyNDMyNzIyODI4MDk2Nzc5MDk4NDk4MTkyNDU5ODE5MzA2MzIxMDczOTY4NzM1MTc3NTMxMTY0NTY1MzA1NjM1MjgxMTk4MTQ4MDMyNjEyMDI5NzY3NTg0NjQ0MzA1OTEyMDAxIjpNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMworZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMjgzMzQxOTg4OTcyMTc4NzEyODIxNzU5OSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM0CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIxOTU4NDU5ODI3Nzc1Njk5MjYzMDI0MDA1MTEiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjNQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiNDc3NjkxMzEwOTg1MjA0MTQxODI0ODA1NjYyMjg4MjQ4ODMxOSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM1CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI3Njg2MTQzMzY0MDQ1NjQ2NTEiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjNgorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMjAxNDg3NjM2NjAyNDM4MTk1Nzg0MzYzIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzcKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6Ijg0NTEwMDQwMDE1MjE1MjkzNDMzMTEzNTQ3MDI1MSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM4CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiI1NjcxMzcyNzgyMDE1NjQxMDU3NzIyOTEwMTIzODYyODAzNTI0MyI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICM5CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIyMDM5NTY4NzgzNTY0MDE5Nzc0MDU3NjU4NjY5MjkwMzQ1NzcyODAxOTM5OTMzMTQzNDgyNjMwOTQ3NzI2NDY0NTMyODMwNjI3MjI3MDEyNzc2MzI5MzY2MTYwNjMxNDQwODgxNzMzMTIzNzI4ODI2NzcxMjM4Nzk1Mzg3MDk0MDAxNTgzMDY1NjczMzgzMjgyNzkxNTQ0OTk2OTgzNjYwNzE5MDY3NjY0NDAwMzcwNzQyMTcxMTc4MDU2OTA4NzI3OTI4NDgxNDkxMTIwMjIyODYzMzIxNDQ4NzYxODMzNzYzMjY1MTIwODM1NzQ4MjE2NDc5MzM5OTI5NjEyNDk5MTczMTk4MzYyMTkzMDQyNzQyODAyNDM4MDMxMDQwMTUwMDA1NjM3OTAxMjMiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjUzMTg3MjI4OTA1NDIwNDE4NDE4NTA4NDczNDM3NTEzMzM5OTQwODMwMzYxMzk4MjEzMDg1NjY0NTI5OTQ2NDkzMDk1MjE3ODYwNjA0NTg0ODg3NzEyOTE0NzgyMDM4Nzk5NjQyODE3NTU2NDIyODIwNDc4NTg0NjE0MTIwNzUzMjQ2MjkzNjMzOTgzNDEzOTQxMjQwMTk3NTMzODcwNTc5NDY0NjU5NTQ4NzMyNDM2NTE5NDc5MjgyMjE4OTQ3MzA5MjI3Mzk5MzU4MDU4Nzk2NDU3MTY1OTY3ODA4NDQ4NDE1MjYwMzg4MTA5NDE3Njk5NTU5NDgxMzMwMjI4NDIzMjAwNjAwMTc1MjEyODE2ODkwMTI5MzU2MDA1MTgzMzY0Njg4MTQzNjIxOSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxMQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMzE5NzA1MzA0NzAxMTQxNTM5MTU1NzIwMTM3MjAwOTc0NjY0NjY2NzkyNTI2MDU5NDA1NzkyNTM5NjgwOTc0OTI5NDY5NzgzNTEyODIxNzkzOTk1NjEzNzE4OTQzMTcxNzIzNzY1MjM4ODUzNzUyNDM5MDMyODM1OTg1MTU4ODI5MDM4NTI4MjE0OTI1NjU4OTE4MzcyMTk2NzQyMDg5NDY0NjgzOTYwMjM5OTE5OTUwODgyMzU1ODQ0NzY2MDU1MzY1MTc5OTM3NjEwMzI2MTI3Njc1MTc4ODU3MzA2MjYwOTU1NTUwNDA3MDQ0NDYzMzcwMjM5ODkwMTg3MTg5NzUwOTA5MDM2ODMzOTc2MTk3ODA0NjQ2NTg5MzgwNjkwNzc5NDYzOTc2MTczIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzEyCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIyMDA2MDM4MjIxOTUzMjQ2NDIzOTM1MTYyOTQwMTI5MTc1OTg5NzI5Njc0NDkzMjAwNzQ5OTk2NjcxMDM0MzQzNzE0NzA2MTYwMDA2NTIwMzY1NzAwMDk5MTIwMjEzMzI1Mjc3ODgyNTIzMDA5MDE5MDUyMzY1Nzg4MDEwNDQ2ODA0NTY5MzAzMDUzNTA0NDA5MzM1Mzg4NjczODMxMzAxNjU4NDExMTgwNTA3ODEzMjYyOTEwNTk4MzA1NDU4OTE1NzA2NDgyNDMyNDE3OTU4NzEiOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTMKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjgyNzEzMTUwNzIyMTY1NDU2MzkzNzgzMjY4NjY5NjIwMDk5NTU5NTgzNTY5NDQzNzk4MzY1ODg0MDg3MDAzNjU4NjEyNDE2ODE4Njk2Nzc5NjgwOTExNzc0OTA0NzQzMDc2ODgyNTgyMjg1NzA0MjQzMjcyMjgyODA5Njc3OTA5ODQ5ODE5MjQ1OTgxOTMwNjMyMTA3Mzk2ODczNTE3NzUzMTE2NDU2NTMwNTYzNTI4MTE5ODE0ODAzMjYxMjAyOTc2NzU4NDY0NDMwNTkxMjA5OSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxNAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiOTY0Mjc0MDQ3MjQ4NDE4Nzk3MTQ1MDkwOTgzMTU3MTk3OTgwODU1MDc4OTY2ODgyMjc2NDkyNTcyNzg4NTMyOTU0OTA0MTEyNjU1MzM4NDM5MzYxMzA2MjEzODk4NTY5NTE2NTkzNzQ0MjY3MzkxNzU0MDMzMzA2NDY1MTI1OTE5MTk5NjkyNzAzMzIzODc4NTU3ODMzMDIzNTczMzEyNjg1MDAyNjcwNjYyODQ2NDc3NTkyNTk3NjU5ODI2MTEzNDYwNjE5ODE1MjQ0NzIxMzExIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzE1CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIxNzAxNDExODM0NjA0NjkyMzE3MzE2ODczMDM3MTU4ODQxMDU3MjciOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTYKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6IjIxNDc0ODM2NDciOjAKKworVGVzdCBtYmVkdGxzX21waV9pc19wcmltZSAjMTcKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfaXNfcHJpbWU6MTA6Ijk2MTc0ODk0MSI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMxOAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiMTc5NDI0NjkxIjowCisKK1Rlc3QgbWJlZHRsc19tcGlfaXNfcHJpbWUgIzE5CitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2lzX3ByaW1lOjEwOiIzMjQ1Mjg2NyI6MAorCitUZXN0IG1iZWR0bHNfbXBpX2lzX3ByaW1lICMyMAorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9pc19wcmltZToxMDoiNDk5Nzk2ODciOjAKKworVGVzdCBtYmVkdGxzX21waV9nZW5fcHJpbWUgKFRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfZ2VuX3ByaW1lOjI6MDpNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworVGVzdCBtYmVkdGxzX21waV9nZW5fcHJpbWUgKE9LLCBtaW5pbXVtIHNpemUpCitkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUKK21iZWR0bHNfbXBpX2dlbl9wcmltZTozOjA6MAorCitUZXN0IG1iZWR0bHNfbXBpX2dlbl9wcmltZSAoTGFyZ2VyKQorZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FCittYmVkdGxzX21waV9nZW5fcHJpbWU6MTI4OjA6MAorCitUZXN0IG1iZWR0bHNfbXBpX2dlbl9wcmltZSAoU2FmZSkKK2RlcGVuZHNfb246TUJFRFRMU19HRU5QUklNRQorbWJlZHRsc19tcGlfZ2VuX3ByaW1lOjEyODoxOjAKKworVGVzdCBiaXQgZ2V0dGluZyAoVmFsdWUgYml0IDI1KQorbWJlZHRsc19tcGlfZ2V0X2JpdDoxMDoiNDk5Nzk2ODciOjI1OjEKKworVGVzdCBiaXQgZ2V0dGluZyAoTGFyZ2VyIGJ1dCBzYW1lIGxpbWIpCittYmVkdGxzX21waV9nZXRfYml0OjEwOiI0OTk3OTY4NyI6MjY6MAorCitUZXN0IGJpdCBnZXR0aW5nIChMYXJnZXIgYW5kIG5vbi1leGlzdGluZyBsaW1iKQorbWJlZHRsc19tcGlfZ2V0X2JpdDoxMDoiNDk5Nzk2ODciOjUwMDowCisKK1Rlc3QgYml0IGdldHRpbmcgKFZhbHVlIGJpdCAyNCkKK21iZWR0bHNfbXBpX2dldF9iaXQ6MTA6IjQ5OTc5Njg3IjoyNDowCisKK1Rlc3QgYml0IGdldHRpbmcgKFZhbHVlIGJpdCAyMykKK21iZWR0bHNfbXBpX2dldF9iaXQ6MTA6IjQ5OTc5Njg3IjoyMzoxCisKK1Rlc3QgYml0IHNldCAoQ2hhbmdlIGV4aXN0aW5nIHZhbHVlIHdpdGggYSAxKQorbWJlZHRsc19tcGlfc2V0X2JpdDoxMDoiNDk5Nzk2ODciOjI0OjE6MTA6IjY2NzU2OTAzIjowCisKK1Rlc3QgYml0IHNldCAoQ2hhbmdlIGV4aXN0aW5nIHZhbHVlIHdpdGggYSAwKQorbWJlZHRsc19tcGlfc2V0X2JpdDoxMDoiNDk5Nzk2ODciOjI1OjA6MTA6IjE2NDI1MjU1IjowCisKK1Rlc3QgYml0IHNldCAoQWRkIGFib3ZlIGV4aXN0aW5nIGxpbWJzIHdpdGggYSAwKQorbWJlZHRsc19tcGlfc2V0X2JpdDoxMDoiNDk5Nzk2ODciOjgwOjA6MTA6IjQ5OTc5Njg3IjowCisKK1Rlc3QgYml0IHNldCAoQWRkIGFib3ZlIGV4aXN0aW5nIGxpbWJzIHdpdGggYSAxKQorbWJlZHRsc19tcGlfc2V0X2JpdDoxMDoiNDk5Nzk2ODciOjgwOjE6MTA6IjEyMDg5MjU4MTk2MTQ2MjkyMjQ2ODU4NjMiOjAKKworVGVzdCBiaXQgc2V0IChCaXQgaW5kZXggbGFyZ2VyIHRoYW4gMzEgd2l0aCBhIDApCittYmVkdGxzX21waV9zZXRfYml0OjE2OiJGRkZGRkZGRkZGRkZGRkZGIjozMjowOjE2OiJGRkZGRkZGRUZGRkZGRkZGIjowCisKK1Rlc3QgYml0IHNldCAoQml0IGluZGV4IGxhcmdlciB0aGFuIDMxIHdpdGggYSAxKQorbWJlZHRsc19tcGlfc2V0X2JpdDoxNjoiMDAiOjMyOjE6MTY6IjAxMDAwMDAwMDAiOjAKKworVGVzdCBiaXQgc2V0IChJbnZhbGlkIGJpdCB2YWx1ZSkKK21iZWR0bHNfbXBpX3NldF9iaXQ6MTY6IjAwIjo1OjI6MTY6IjAwIjpNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworTVBJIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUCittcGlfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbXBpLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTRjODg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5mdW5jdGlvbgpAQCAtMCwwICsxLDg4MiBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9iaWdudW0uaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfQklHTlVNX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1waV9udWxsKCApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2dldF9iaXQoICZYLCA0MiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNiKCAmWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfYml0bGVuKCAmWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc2l6ZSggJlggKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbXBpX3JlYWRfd3JpdGVfc3RyaW5nKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfQSwgaW50IG91dHB1dF9zaXplLCBpbnQgcmVzdWx0X3JlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdF93cml0ZSApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBjaGFyIHN0clsxMDAwXTsKKyAgICBzaXplX3QgbGVuOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSByZXN1bHRfcmVhZCApOworICAgIGlmKCByZXN1bHRfcmVhZCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV93cml0ZV9zdHJpbmcoICZYLCByYWRpeF9BLCBzdHIsIG91dHB1dF9zaXplLCAmbGVuICkgPT0gcmVzdWx0X3dyaXRlICk7CisgICAgICAgIGlmKCByZXN1bHRfd3JpdGUgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCBzdHIsIGlucHV0X0EgKSA9PSAwICk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIHVuc2lnbmVkIGNoYXIgc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDBdOworICAgIHNpemVfdCBsZW47CisgICAgc2l6ZV90IGlucHV0X2xlbjsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBpbnB1dF9sZW4gPSB1bmhleGlmeSggYnVmLCBpbnB1dF9YICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZYLCBidWYsIGlucHV0X2xlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfd3JpdGVfc3RyaW5nKCAmWCwgcmFkaXhfQSwgKGNoYXIgKikgc3RyLCBzaXplb2YoIHN0ciApLCAmbGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIHN0ciwgaW5wdXRfQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBjaGFyICppbnB1dF9BLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0X3NpemUsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFg7CisgICAgdW5zaWduZWQgY2hhciBzdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAwMF07CisgICAgc2l6ZV90IGJ1ZmxlbjsKKworICAgIG1lbXNldCggYnVmLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBzdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworCisgICAgYnVmbGVuID0gbWJlZHRsc19tcGlfc2l6ZSggJlggKTsKKyAgICBpZiggYnVmbGVuID4gKHNpemVfdCkgb3V0cHV0X3NpemUgKQorICAgICAgICBidWZsZW4gPSAoc2l6ZV90KSBvdXRwdXRfc2l6ZTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZYLCBidWYsIGJ1ZmxlbiApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCkKKyAgICB7CisgICAgICAgIGhleGlmeSggc3RyLCBidWYsIGJ1ZmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBzdHIsIGlucHV0X0EgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTyAqLwordm9pZCBtYmVkdGxzX21waV9yZWFkX2ZpbGUoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9maWxlLCBjaGFyICppbnB1dF9BLAorICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIHVuc2lnbmVkIGNoYXIgc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwMDBdOworICAgIHNpemVfdCBidWZsZW47CisgICAgRklMRSAqZmlsZTsKKyAgICBpbnQgcmV0OworCisgICAgbWVtc2V0KCBidWYsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHN0ciwgMHgwMCwgMTAwMCApOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsKKworICAgIGZpbGUgPSBmb3BlbiggaW5wdXRfZmlsZSwgInIiICk7CisgICAgVEVTVF9BU1NFUlQoIGZpbGUgIT0gTlVMTCApOworICAgIHJldCA9IG1iZWR0bHNfbXBpX3JlYWRfZmlsZSggJlgsIHJhZGl4X1gsIGZpbGUgKTsKKyAgICBmY2xvc2UoZmlsZSk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSByZXN1bHQgKTsKKworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBidWZsZW4gPSBtYmVkdGxzX21waV9zaXplKCAmWCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmWCwgYnVmLCBidWZsZW4gKSA9PSAwICk7CisKKyAgICAgICAgaGV4aWZ5KCBzdHIsIGJ1ZiwgYnVmbGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIHN0ciwgaW5wdXRfQSApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPICovCit2b2lkIG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgb3V0cHV0X3JhZGl4LAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3V0cHV0X2ZpbGUgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFk7CisgICAgRklMRSAqZmlsZV9vdXQsICpmaWxlX2luOworICAgIGludCByZXQ7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKworICAgIGZpbGVfb3V0ID0gZm9wZW4oIG91dHB1dF9maWxlLCAidyIgKTsKKyAgICBURVNUX0FTU0VSVCggZmlsZV9vdXQgIT0gTlVMTCApOworICAgIHJldCA9IG1iZWR0bHNfbXBpX3dyaXRlX2ZpbGUoIE5VTEwsICZYLCBvdXRwdXRfcmFkaXgsIGZpbGVfb3V0ICk7CisgICAgZmNsb3NlKGZpbGVfb3V0KTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKKworICAgIGZpbGVfaW4gPSBmb3Blbiggb3V0cHV0X2ZpbGUsICJyIiApOworICAgIFRFU1RfQVNTRVJUKCBmaWxlX2luICE9IE5VTEwgKTsKKyAgICByZXQgPSBtYmVkdGxzX21waV9yZWFkX2ZpbGUoICZZLCBvdXRwdXRfcmFkaXgsIGZpbGVfaW4gKTsKKyAgICBmY2xvc2UoZmlsZV9pbik7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZZICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2dldF9iaXQoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcG9zLCBpbnQgdmFsICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2V0X2JpdCggJlgsIHBvcyApID09IHZhbCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3NldF9iaXQoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcG9zLCBpbnQgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfWSwgY2hhciAqb3V0cHV0X1ksIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgb3V0cHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NldF9iaXQoICZYLCBwb3MsIHZhbCApID09IHJlc3VsdCApOworCisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlkgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2xzYiggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCBucl9iaXRzICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9sc2IoICZYICkgPT0gKHNpemVfdCkgbnJfYml0cyApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2JpdGxlbiggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCBucl9iaXRzICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9iaXRsZW4oICZYICkgPT0gKHNpemVfdCkgbnJfYml0cyApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2djZCggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLCBjaGFyICppbnB1dF9ZLAorICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgQSwgWCwgWSwgWjsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmQSApOyBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJlosICZYLCAmWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2NtcF9pbnQoIGludCBpbnB1dF9YLCBpbnQgaW5wdXRfQSwgaW50IHJlc3VsdF9DTVAgKQoreworICAgIG1iZWR0bHNfbXBpIFg7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNldCggJlgsIGlucHV0X1ggKSA9PSAwKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX2ludCggJlgsIGlucHV0X0EgKSA9PSByZXN1bHRfQ01QKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9jbXBfbXBpKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlkgKSA9PSBpbnB1dF9BICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfY21wX2FicyggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9ZLCBjaGFyICppbnB1dF9ZLAorICAgICAgICAgICAgICAgICAgaW50IGlucHV0X0EgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX2FicyggJlgsICZZICkgPT0gaW5wdXRfQSApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2NvcHkoIGludCBpbnB1dF9YLCBpbnQgaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZYLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9sc2V0KCAmWSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNldCggJkEsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApICE9IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlksICZBICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jb3B5KCAmWSwgJlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlksICZBICkgIT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1waV9jb3B5X3NlbGYoIGludCBpbnB1dF9YICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNldCggJlgsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NvcHkoICZYLCAmWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX2ludCggJlgsIGlucHV0X1ggKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc2hyaW5rKCBpbnQgYmVmb3JlLCBpbnQgdXNlZCwgaW50IG1pbiwgaW50IGFmdGVyICkKK3sKKyAgICBtYmVkdGxzX21waSBYOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ3JvdyggJlgsIGJlZm9yZSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggdXNlZCA8PSBiZWZvcmUgKTsKKyAgICBtZW1zZXQoIFgucCwgMHgyYSwgdXNlZCAqIHNpemVvZiggbWJlZHRsc19tcGlfdWludCApICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NocmluayggJlgsIG1pbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggWC5uID09IChzaXplX3QpIGFmdGVyICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggaW50IHhfc2lnbiwgY2hhciAqeF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeV9zaWduLCBjaGFyICp5X3N0ciApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWFg7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlkgKTsgbWJlZHRsc19tcGlfaW5pdCggJlhYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCAxNiwgeF9zdHIgKSA9PSAwICk7CisgICAgWC5zID0geF9zaWduOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIDE2LCB5X3N0ciApID09IDAgKTsKKyAgICBZLnMgPSB5X3NpZ247CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NvcHkoICZYWCwgJlggKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc2FmZV9jb25kX2Fzc2lnbiggJlgsICZZLCAwICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJlhYICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NhZmVfY29uZF9hc3NpZ24oICZYLCAmWSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZZICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZYWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCggaW50IHhfc2lnbiwgY2hhciAqeF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlfc2lnbiwgY2hhciAqeV9zdHIgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFhYLCBZWTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlhYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZWSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgMTYsIHhfc3RyICkgPT0gMCApOworICAgIFgucyA9IHhfc2lnbjsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCAxNiwgeV9zdHIgKSA9PSAwICk7CisgICAgWS5zID0geV9zaWduOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NvcHkoICZYWCwgJlggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NvcHkoICZZWSwgJlkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc2FmZV9jb25kX3N3YXAoICZYLCAmWSwgMCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZYWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlksICZZWSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zYWZlX2NvbmRfc3dhcCggJlgsICZZLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWSwgJlhYICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJllZICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlhYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZWSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9zd2FwKCBpbnQgaW5wdXRfWCwgIGludCBpbnB1dF9ZICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbHNldCggJlgsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2xzZXQoICZZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9sc2V0KCAmQSwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZZICkgIT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJkEgKSA9PSAwICk7CisgICAgbWJlZHRsc19tcGlfc3dhcCggJlgsICZZICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmWSApICE9IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlksICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2FkZF9tcGkoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgICAgIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBaLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfYWRkX21waSggJlosICZYLCAmWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2FkZF9tcGlfaW5wbGFjZSggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2FicyggJlgsICZYLCAmWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX2ludCggJlgsIDAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9hZGRfYWJzKCAmWCwgJlgsICZYICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJkEgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9hZGRfbXBpKCAmWCwgJlgsICZYICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJkEgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9hZGRfYWJzKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2FkZF9hYnMoICZaLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtcGlfYWRkX2Fic19hZGRfZmlyc3QoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9ZLCBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2FkZF9hYnMoICZYLCAmWCwgJlkgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZYLCAmQSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtcGlfYWRkX2Fic19hZGRfc2Vjb25kKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X1ksIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfYWRkX2FicyggJlksICZYLCAmWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlksICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX2FkZF9pbnQoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgaW5wdXRfWSwgaW50IHJhZGl4X0EsCisgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBaLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2FkZF9pbnQoICZaLCAmWCwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3N1Yl9tcGkoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgICAgIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBaLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX21waSggJlosICZYLCAmWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3N1Yl9hYnMoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgICAgIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BLCBpbnQgc3ViX3Jlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgWiwgQTsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKworICAgIHJlcyA9IG1iZWR0bHNfbXBpX3N1Yl9hYnMoICZaLCAmWCwgJlkgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzID09IHN1Yl9yZXN1bHQgKTsKKyAgICBpZiggcmVzID09IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3N1Yl9pbnQoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgaW5wdXRfWSwgaW50IHJhZGl4X0EsCisgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBaLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZaLCAmWCwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX211bF9tcGkoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgICAgIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBZLCBaLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX21waSggJlosICZYLCAmWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZaICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX211bF9pbnQoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgaW5wdXRfWSwgaW50IHJhZGl4X0EsCisgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9BLCBjaGFyICpyZXN1bHRfY29tcGFyaXNvbiApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWiwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfaW50KCAmWiwgJlgsIGlucHV0X1kgKSA9PSAwICk7CisgICAgaWYoIHN0cmNtcCggcmVzdWx0X2NvbXBhcmlzb24sICI9PSIgKSA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZaLCAmQSApID09IDAgKTsKKyAgICBlbHNlIGlmKCBzdHJjbXAoIHJlc3VsdF9jb21wYXJpc29uLCAiIT0iICkgPT0gMCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWiwgJkEgKSAhPSAwICk7CisgICAgZWxzZQorICAgICAgICBURVNUX0FTU0VSVCggInVua25vd24gb3BlcmF0b3IiID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9kaXZfbXBpKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSwgaW50IHJhZGl4X0IsIGNoYXIgKmlucHV0X0IsCisgICAgICAgICAgICAgICAgICBpbnQgZGl2X3Jlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgUSwgUiwgQSwgQjsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZRICk7IG1iZWR0bHNfbXBpX2luaXQoICZSICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlgsIHJhZGl4X1gsIGlucHV0X1ggKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWSwgcmFkaXhfWSwgaW5wdXRfWSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkIsIHJhZGl4X0IsIGlucHV0X0IgKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc19tcGlfZGl2X21waSggJlEsICZSLCAmWCwgJlkgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzID09IGRpdl9yZXN1bHQgKTsKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZRLCAmQSApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZSLCAmQiApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJlkgKTsgbWJlZHRsc19tcGlfZnJlZSggJlEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlIgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmQSApOyBtYmVkdGxzX21waV9mcmVlKCAmQiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9kaXZfaW50KCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGlucHV0X1ksIGludCByYWRpeF9BLAorICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfQSwgaW50IHJhZGl4X0IsIGNoYXIgKmlucHV0X0IsIGludCBkaXZfcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBRLCBSLCBBLCBCOworICAgIGludCByZXM7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsgbWJlZHRsc19tcGlfaW5pdCggJlEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlIgKTsgbWJlZHRsc19tcGlfaW5pdCggJkEgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmQiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkIsIHJhZGl4X0IsIGlucHV0X0IgKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc19tcGlfZGl2X2ludCggJlEsICZSLCAmWCwgaW5wdXRfWSApOworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gZGl2X3Jlc3VsdCApOworICAgIGlmKCByZXMgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlEsICZBICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlIsICZCICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmUSApOyBtYmVkdGxzX21waV9mcmVlKCAmUiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZCICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX21vZF9tcGkoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgcmFkaXhfWSwgY2hhciAqaW5wdXRfWSwKKyAgICAgICAgICAgICAgICAgIGludCByYWRpeF9BLCBjaGFyICppbnB1dF9BLCBpbnQgZGl2X3Jlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWCwgWSwgQTsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlksIHJhZGl4X1ksIGlucHV0X1kgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmQSwgcmFkaXhfQSwgaW5wdXRfQSApID09IDAgKTsKKyAgICByZXMgPSBtYmVkdGxzX21waV9tb2RfbXBpKCAmWCwgJlgsICZZICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSBkaXZfcmVzdWx0ICk7CisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJkEgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZZICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX21vZF9pbnQoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgaW5wdXRfWSwgaW50IGlucHV0X0EsCisgICAgICAgICAgICAgICAgICBpbnQgZGl2X3Jlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX3VpbnQgcjsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICByZXMgPSBtYmVkdGxzX21waV9tb2RfaW50KCAmciwgJlgsIGlucHV0X1kgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzID09IGRpdl9yZXN1bHQgKTsKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHIgPT0gKG1iZWR0bHNfbXBpX3VpbnQpIGlucHV0X0EgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfZXhwX21vZCggaW50IHJhZGl4X0EsIGNoYXIgKmlucHV0X0EsIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9SUiwgY2hhciAqaW5wdXRfUlIsCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IGRpdl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIEEsIEUsIE4sIFJSLCBaLCBYOworICAgIGludCByZXM7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJkEgICk7IG1iZWR0bHNfbXBpX2luaXQoICZFICk7IG1iZWR0bHNfbXBpX2luaXQoICZOICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlJSICk7IG1iZWR0bHNfbXBpX2luaXQoICZaICk7IG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworCisgICAgaWYoIHN0cmxlbiggaW5wdXRfUlIgKSApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJlJSLCByYWRpeF9SUiwgaW5wdXRfUlIgKSA9PSAwICk7CisKKyAgICByZXMgPSBtYmVkdGxzX21waV9leHBfbW9kKCAmWiwgJkEsICZFLCAmTiwgJlJSICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSBkaXZfcmVzdWx0ICk7CisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWiwgJlggKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZBICApOyBtYmVkdGxzX21waV9mcmVlKCAmRSApOyBtYmVkdGxzX21waV9mcmVlKCAmTiApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZSUiApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmWCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX21waV9pbnZfbW9kKCBpbnQgcmFkaXhfWCwgY2hhciAqaW5wdXRfWCwgaW50IHJhZGl4X1ksIGNoYXIgKmlucHV0X1ksCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfQSwgY2hhciAqaW5wdXRfQSwgaW50IGRpdl9yZXN1bHQgKQoreworICAgIG1iZWR0bHNfbXBpIFgsIFksIFosIEE7CisgICAgaW50IHJlczsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmWSApOyBtYmVkdGxzX21waV9pbml0KCAmWiApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZZLCByYWRpeF9ZLCBpbnB1dF9ZICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc19tcGlfaW52X21vZCggJlosICZYLCAmWSApOworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gZGl2X3Jlc3VsdCApOworICAgIGlmKCByZXMgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlosICZBICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmWCApOyBtYmVkdGxzX21waV9mcmVlKCAmWSApOyBtYmVkdGxzX21waV9mcmVlKCAmWiApOyBtYmVkdGxzX21waV9mcmVlKCAmQSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfR0VOUFJJTUUgKi8KK3ZvaWQgbWJlZHRsc19tcGlfaXNfcHJpbWUoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgZGl2X3Jlc3VsdCApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBpbnQgcmVzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIHJlcyA9IG1iZWR0bHNfbXBpX2lzX3ByaW1lKCAmWCwgcm5kX3N0ZF9yYW5kLCBOVUxMICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyA9PSBkaXZfcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0dFTlBSSU1FICovCit2b2lkIG1iZWR0bHNfbXBpX2dlbl9wcmltZSggaW50IGJpdHMsIGludCBzYWZlLCBpbnQgcmVmX3JldCApCit7CisgICAgbWJlZHRsc19tcGkgWDsKKyAgICBpbnQgbXlfcmV0OworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlggKTsKKworICAgIG15X3JldCA9IG1iZWR0bHNfbXBpX2dlbl9wcmltZSggJlgsIGJpdHMsIHNhZmUsIHJuZF9zdGRfcmFuZCwgTlVMTCApOworICAgIFRFU1RfQVNTRVJUKCBteV9yZXQgPT0gcmVmX3JldCApOworCisgICAgaWYoIHJlZl9yZXQgPT0gMCApCisgICAgeworICAgICAgICBzaXplX3QgYWN0dWFsX2JpdHMgPSBtYmVkdGxzX21waV9iaXRsZW4oICZYICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIGFjdHVhbF9iaXRzID49IChzaXplX3QpIGJpdHMgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIGFjdHVhbF9iaXRzIDw9IChzaXplX3QpIGJpdHMgKyAxICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2lzX3ByaW1lKCAmWCwgcm5kX3N0ZF9yYW5kLCBOVUxMICkgPT0gMCApOworICAgICAgICBpZiggc2FmZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZYLCAxICk7IC8qIFggPSAoIFggLSAxICkgLyAyICovCisgICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaXNfcHJpbWUoICZYLCBybmRfc3RkX3JhbmQsIE5VTEwgKSA9PSAwICk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19tcGlfc2hpZnRfbCggaW50IHJhZGl4X1gsIGNoYXIgKmlucHV0X1gsIGludCBzaGlmdF9YLCBpbnQgcmFkaXhfQSwKKyAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0EpCit7CisgICAgbWJlZHRsc19tcGkgWCwgQTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmWCApOyBtYmVkdGxzX21waV9pbml0KCAmQSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmWCwgcmFkaXhfWCwgaW5wdXRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZBLCByYWRpeF9BLCBpbnB1dF9BICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zaGlmdF9sKCAmWCwgc2hpZnRfWCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfY21wX21waSggJlgsICZBICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZYICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZBICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfbXBpX3NoaWZ0X3IoIGludCByYWRpeF9YLCBjaGFyICppbnB1dF9YLCBpbnQgc2hpZnRfWCwgaW50IHJhZGl4X0EsCisgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9BICkKK3sKKyAgICBtYmVkdGxzX21waSBYLCBBOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZBICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZYLCByYWRpeF9YLCBpbnB1dF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJkEsIHJhZGl4X0EsIGlucHV0X0EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZYLCBzaGlmdF9YICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmWCwgJkEgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlggKTsgbWJlZHRsc19tcGlfZnJlZSggJkEgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBtcGlfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BlbS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BlbS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3M2M5MjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGVtLmRhdGEKQEAgLTAsMCArMSwxNyBAQAorU3RhbmRhcmQgUEVNIHdyaXRlCittYmVkdGxzX3BlbV93cml0ZV9idWZmZXI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG4iOiItLS0tLUVORCBURVNULS0tLS1cbiI6IjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiItLS0tLVNUQVJUIFRFU1QtLS0tLVxuQUFFQ0F3UUZCZ2NJQ1FvTERBME9Ed0FCQWdNRUJRWUhDQWtLQ3d3TkRnOD1cbi0tLS0tRU5EIFRFU1QtLS0tLVxuIgorCitQRU0gd3JpdGUgKHplcm8gZGF0YSkKK21iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlcjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbiI6Ii0tLS0tRU5EIFRFU1QtLS0tLVxuIjoiIjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbi0tLS0tRU5EIFRFU1QtLS0tLVxuIgorCitQRU0gd3JpdGUgKG9uZSBieXRlKQorbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyOiItLS0tLVNUQVJUIFRFU1QtLS0tLVxuIjoiLS0tLS1FTkQgVEVTVC0tLS0tXG4iOiIwMCI6Ii0tLS0tU1RBUlQgVEVTVC0tLS0tXG5BQT09XG4tLS0tLUVORCBURVNULS0tLS1cbiIKKworUEVNIHdyaXRlIChtb3JlIHRoYW4gbGluZSBzaXplKQorbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyOiItLS0tLVNUQVJUIFRFU1QtLS0tLVxuIjoiLS0tLS1FTkQgVEVTVC0tLS0tXG4iOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzhBQVFJREJBVUdCd2dKQ2dzTURRNFBcbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzg9XG4tLS0tLUVORCBURVNULS0tLS1cbiIKKworUEVNIHdyaXRlIChleGFjdGx5IHR3byBsaW5lcykKK21iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlcjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbiI6Ii0tLS0tRU5EIFRFU1QtLS0tLVxuIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGIjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzhBQVFJREJBVUdCd2dKQ2dzTURRNFBcbkFBRUNBd1FGQmdjSUNRb0xEQTBPRHdBQkFnTUVCUVlIQ0FrS0N3d05EZzhBQVFJREJBVUdCd2dKQ2dzTURRNFBcbi0tLS0tRU5EIFRFU1QtLS0tLVxuIgorCitQRU0gd3JpdGUgKGV4YWN0bHkgdHdvIGxpbmVzICsgMSkKK21iZWR0bHNfcGVtX3dyaXRlX2J1ZmZlcjoiLS0tLS1TVEFSVCBURVNULS0tLS1cbiI6Ii0tLS0tRU5EIFRFU1QtLS0tLVxuIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMDAiOiItLS0tLVNUQVJUIFRFU1QtLS0tLVxuQUFFQ0F3UUZCZ2NJQ1FvTERBME9Ed0FCQWdNRUJRWUhDQWtLQ3d3TkRnOEFBUUlEQkFVR0J3Z0pDZ3NNRFE0UFxuQUFFQ0F3UUZCZ2NJQ1FvTERBME9Ed0FCQWdNRUJRWUhDQWtLQ3d3TkRnOEFBUUlEQkFVR0J3Z0pDZ3NNRFE0UFxuQUE9PVxuLS0tLS1FTkQgVEVTVC0tLS0tXG4iCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGVtLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BlbS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTYyYmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BlbS5mdW5jdGlvbgpAQCAtMCwwICsxLDQwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcGVtLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1BFTV9XUklURV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3BlbV93cml0ZV9idWZmZXIoIGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIGNoYXIgKmJ1Zl9zdHIsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzUwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgKmNoZWNrX2J1ZiA9IE5VTEw7CisgICAgaW50IHJldDsKKyAgICBzaXplX3QgYnVmX2xlbiwgb2xlbiA9IDAsIG9sZW4yID0gMDsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICBidWZfbGVuID0gdW5oZXhpZnkoIGJ1ZiwgYnVmX3N0ciApOworCisgICAgcmV0ID0gbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBzdGFydCwgZW5kLCBidWYsIGJ1Zl9sZW4sIE5VTEwsIDAsICZvbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBNQkVEVExTX0VSUl9CQVNFNjRfQlVGRkVSX1RPT19TTUFMTCApOworCisgICAgY2hlY2tfYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgbWJlZHRsc19jYWxsb2MoIDEsIG9sZW4gKTsKKyAgICBURVNUX0FTU0VSVCggY2hlY2tfYnVmICE9IE5VTEwgKTsKKworICAgIG1lbXNldCggY2hlY2tfYnVmLCAwLCBvbGVuICk7CisgICAgcmV0ID0gbWJlZHRsc19wZW1fd3JpdGVfYnVmZmVyKCBzdGFydCwgZW5kLCBidWYsIGJ1Zl9sZW4sIGNoZWNrX2J1Ziwgb2xlbiwgJm9sZW4yICk7CisKKyAgICBURVNUX0FTU0VSVCggb2xlbjIgPD0gb2xlbiApOworICAgIFRFU1RfQVNTRVJUKCBvbGVuID4gc3RybGVuKCAoY2hhciopIHJlc3VsdF9zdHIgKSApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBzdHJuY21wKCAoY2hhciAqKSBjaGVja19idWYsIChjaGFyICopIHJlc3VsdF9zdHIsIG9sZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19mcmVlKCBjaGVja19idWYgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGsuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYTdmYTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGsuZGF0YQpAQCAtMCwwICsxLDE1MiBAQAorUEsgdXRpbHM6IFJTQQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfR0VOUFJJTUUKK3BrX3V0aWxzOk1CRURUTFNfUEtfUlNBOjUxMjo2NDoiUlNBIgorCitQSyB1dGlsczogRUNLRVkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfdXRpbHM6TUJFRFRMU19QS19FQ0tFWToxOTI6MjQ6IkVDIgorCitQSyB1dGlsczogRUNLRVlfREgKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfdXRpbHM6TUJFRFRMU19QS19FQ0tFWV9ESDoxOTI6MjQ6IkVDX0RIIgorCitQSyB1dGlsczogRUNEU0EKK2RlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa191dGlsczpNQkVEVExTX1BLX0VDRFNBOjE5MjoyNDoiRUNEU0EiCisKK1JTQSB2ZXJpZnkgdGVzdCB2ZWN0b3IgIzEgKGdvb2QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1Citwa19yc2FfdmVyaWZ5X3Rlc3RfdmVjOiIyMDZlZjRiZjM5NmM2MDg3ZjgyMjllZjE5NmZkMzVmMzdjY2I4ZGU1ZWZjZGIyMzhmMjBkNTU2NjY4ZjExNDI1N2ExMWZiZTAzODQ2NGE2NzgzMDM3OGU2MmFlOTc5MTQ1Mzk1M2RhYzFkYmQ3OTIxODM3YmE5OGU4NGU4NTZlYjgwZWQ5NDg3ZTY1NmQwYjIwYzI4YzhiYTVlMzVkYjFhYmJlZDgzZWQxYzc3MjBhOTc3MDFmNzA5ZTM1NDdhNGJmY2FiY2E5Yzg5YzU3YWQxNWMzOTk2NTc3YTBhZTM2ZDdjN2I2OTkwMzUyNDJmMzc5NTQ2NDZjMWNkNWMwOGFjIjpNQkVEVExTX01EX1NIQTE6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiI1YWJjMDFmNWRlMjViNzA4NjdmZjBjMjRlMjIyYzYxZjUzYzg4ZGFmNDI1ODZmZGRjZDU2ZjNjNDU4OGYwNzRiZTNjMzI4MDU2YzA2MzM4ODY4OGI2Mzg1YTgxNjc5NTdjNmU1MzU1YTUxMGUwMDViOGE4NTFkNjljOTZiMzZlYzYwMzY2NDQwNzgyMTBlNWQ3ZDMyNmY5NjM2NWVlMDY0ODg4MjkyMTQ5MmJjN2I3NTNlYjljMjZjZGJhYjM3NTU1ZjIxMGRmMmNhNmZlYzFiMjViNDYzZDM4YjgxYzBkY2VhMjAyMDIyYjA0YWY1ZGE1OGFhMDNkNzdiZTk0OWI3IjowCisKK1JTQSB2ZXJpZnkgdGVzdCB2ZWN0b3IgIzIgKGJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK3BrX3JzYV92ZXJpZnlfdGVzdF92ZWM6ImQ2MjQ4YzNlOTZiMWE3ZTVmZWE5Nzg4NzBmY2M0Yzk3ODZiNGU1MTU2ZTE2YjdmYWVmNDU1N2Q2NjdmNzMwYjhiYzRjNzg0ZWYwMGM2MjRkZjUzMDk1MTNjM2E1ZGU4Y2E5NGMyMTUyZTA0NTk2MTg2NjZkMzE0ODA5MjU2MmViYzI1NmZmY2E0NWIyN2ZkMmQ2M2M2OGJkNWUwYTBhZWZiZTQ5NmU5ZTYzODM4YTM2MWIxZGI2ZmMyNzI0NjRmMTkxNDkwYmY5YzAyOTY0M2M0OWQyZDljZDA4ODMzYjhhNzBiNGIzNDMxZjU2ZmIxZWI1NWNjZDM5ZTc3YTljOTIiOk1CRURUTFNfTURfU0hBMToxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMyI6IjMyMDNiNzY0N2ZiN2UzNDVhYTQ1NzY4MWU1MTMxNzc3ZjFhZGMzNzFmMmZiYTg1MzQ5MjhjNGU1MmVmNjIwNmE4NTY0MjVkNjI2OTM1MmVjYmY2NGRiMmY2YWQ4MjM5Nzc2OGNhZmRkOGNkMjcyZTUxMmQ2MTdhZDY3OTkyMjI2ZGE2YmMyOTFjMzE0MDRjMTdmZDRiN2UyYmViMjBlZmYyODRhNDRmNGQ3YWY0N2ZkNjYyOWUyYzk1ODA5ZmE3ZjIyNDFhMDRmNzBhYzcwZDMyNzFiYjEzMjU4YWYxZWQ1YzU5ODhjOTVkZjdmYTI2NjAzNTE1NzkxMDc1ZmVjY2QiOk1CRURUTFNfRVJSX1JTQV9WRVJJRllfRkFJTEVECisKK0VDRFNBIHZlcmlmeSB0ZXN0IHZlY3RvciAjMSAoZ29vZCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX2VjX3Rlc3RfdmVjOk1CRURUTFNfUEtfRUNEU0E6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwNDZGREQzMDI4RkE5NEE4NjNDRDRGNzhEQkZGOEIzQUE1NjFGQzZEOUNDQkJDQTg4RTBBRTZGQTQzN0Y1NDE1Rjk1NzU0MkQwNzE3RkY4Qjg0NTYyREFFOTk4NzJFRjg0MSI6IjU0Njg2OTczMjA3MzY4NkY3NTZDNjQyMDYyNjUyMDc0Njg2NTIwNjg2MTczNjgyMDZGNjYyMDYxMjA2RDY1NzM3MzYxNjc2NTJFMDAiOiIzMDM1MDIxODE4NUIyQTdGQjVDRDlDOUE4NDg4QjExOUI2OEI0N0Q2RUM4MzM1MDlDRTlGQTFGRjAyMTkwMEZCN0QyNTlBNzQ0QTIzNDhCRDQ1RDI0MUEzOURDOTE1QjgxQ0MyMDg0MTAwRkEyNCI6MAorCitFQ0RTQSB2ZXJpZnkgdGVzdCB2ZWN0b3IgIzIgKGJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX2VjX3Rlc3RfdmVjOk1CRURUTFNfUEtfRUNEU0E6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwNDZGREQzMDI4RkE5NEE4NjNDRDRGNzhEQkZGOEIzQUE1NjFGQzZEOUNDQkJDQTg4RTBBRTZGQTQzN0Y1NDE1Rjk1NzU0MkQwNzE3RkY4Qjg0NTYyREFFOTk4NzJFRjg0MSI6IjU0Njg2OTczMjA3MzY4NkY3NTZDNjQyMDYyNjUyMDc0Njg2NTIwNjg2MTczNjgyMDZGNjYyMDYxMjA2RDY1NzM3MzYxNjc2NTJFMDAiOiIzMDM1MDIxODE4NUIyQTdGQjVDRDlDOUE4NDg4QjExOUI2OEI0N0Q2RUM4MzM1MDlDRTlGQTFGRjAyMTkwMEZCN0QyNTlBNzQ0QTIzNDhCRDQ1RDI0MUEzOURDOTE1QjgxQ0MyMDg0MTAwRkEyNSI6TUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKworRUMoRFNBKSB2ZXJpZnkgdGVzdCB2ZWN0b3IgIzEgKGdvb2QpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19lY190ZXN0X3ZlYzpNQkVEVExTX1BLX0VDS0VZOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMToiMDQ2RkREMzAyOEZBOTRBODYzQ0Q0Rjc4REJGRjhCM0FBNTYxRkM2RDlDQ0JCQ0E4OEUwQUU2RkE0MzdGNTQxNUY5NTc1NDJEMDcxN0ZGOEI4NDU2MkRBRTk5ODcyRUY4NDEiOiI1NDY4Njk3MzIwNzM2ODZGNzU2QzY0MjA2MjY1MjA3NDY4NjUyMDY4NjE3MzY4MjA2RjY2MjA2MTIwNkQ2NTczNzM2MTY3NjUyRTAwIjoiMzAzNTAyMTgxODVCMkE3RkI1Q0Q5QzlBODQ4OEIxMTlCNjhCNDdENkVDODMzNTA5Q0U5RkExRkYwMjE5MDBGQjdEMjU5QTc0NEEyMzQ4QkQ0NUQyNDFBMzlEQzkxNUI4MUNDMjA4NDEwMEZBMjQiOjAKKworRUMoRFNBKSB2ZXJpZnkgdGVzdCB2ZWN0b3IgIzIgKGJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX2VjX3Rlc3RfdmVjOk1CRURUTFNfUEtfRUNLRVk6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxOiIwNDZGREQzMDI4RkE5NEE4NjNDRDRGNzhEQkZGOEIzQUE1NjFGQzZEOUNDQkJDQTg4RTBBRTZGQTQzN0Y1NDE1Rjk1NzU0MkQwNzE3RkY4Qjg0NTYyREFFOTk4NzJFRjg0MSI6IjU0Njg2OTczMjA3MzY4NkY3NTZDNjQyMDYyNjUyMDc0Njg2NTIwNjg2MTczNjgyMDZGNjYyMDYxMjA2RDY1NzM3MzYxNjc2NTJFMDAiOiIzMDM1MDIxODE4NUIyQTdGQjVDRDlDOUE4NDg4QjExOUI2OEI0N0Q2RUM4MzM1MDlDRTlGQTFGRjAyMTkwMEZCN0QyNTlBNzQ0QTIzNDhCRDQ1RDI0MUEzOURDOTE1QjgxQ0MyMDg0MTAwRkEyNSI6TUJFRFRMU19FUlJfRUNQX1ZFUklGWV9GQUlMRUQKKworRUNEU0Egc2lnbi12ZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19zaWduX3ZlcmlmeTpNQkVEVExTX1BLX0VDRFNBOjA6MAorCitFQyhEU0EpIHNpZ24tdmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfc2lnbl92ZXJpZnk6TUJFRFRMU19QS19FQ0tFWTowOjAKKworRUNfREggKG5vKSBzaWduLXZlcmlmeQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19zaWduX3ZlcmlmeTpNQkVEVExTX1BLX0VDS0VZX0RIOk1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0g6TUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSAorCitSU0Egc2lnbi12ZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0dFTlBSSU1FCitwa19zaWduX3ZlcmlmeTpNQkVEVExTX1BLX1JTQTowOjAKKworUlNBIGVuY3J5cHQgdGVzdCB2ZWN0b3IKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3BrX3JzYV9lbmNyeXB0X3Rlc3RfdmVjOiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiYjBjMGIxOTNiYTRhNWI0NTAyYmZhY2QxYTljMjY5N2RhNTUxMGYzZTNhYjcyNzRjZjQwNDQxOGFmZDJjNjJjODliOThkODNiYmMyMWM4YzFiZjFhZmU2ZDhiZjQwNDI1ZTA1M2U5YzAzZTAzYTNiZTBlZGJlMWVkYTA3M2ZhZGUxY2MyODZjYzAzMDVhNDkzZDk4ZmU3OTU2MzRjM2NhZDdmZWI1MTNlZGI3NDJkNjZkOTEwYzg3ZDA3ZjZiMDA1NWMzNDg4YmIyNjJiNWZkMWNlODc0N2FmNjQ4MDFmYjM5ZDJkM2EzZTU3MDg2ZmZlNTVhYjhkMGEyY2E4Njk3NTYyOWEwZjg1NzY3YTQ5OTBjNTMyYTdjMmRhYjE2NDc5OTdlYmIyMzRkMGIyOGEwMDA4YmZlYmZjOTA1ZTdiYTViMzBiNjA1NjZhNWUwMTkwNDE3NDY1ZWZkYmY1NDk5MzRiOGYwYzVjOWYzNmI3YzViNjM3M2E0N2FlNTUzY2VkMDYwOGExNjFiMWI3MGRmYTUwOTM3NWNmN2EzNTk4MjIzYTZkN2I3YTFkMWEwNmFjNzRkMzQ1YTliYjdjMGU0NGM4Mzg4ODU4YTRmMWQ4MTE1ZjJiZDc2OWZmYTY5MDIwMzg1ZmEyODYzMDJjODBlOTUwZjllMjc1MTMwODY2NmMiOjAKKworUlNBIGRlY3J5cHQgdGVzdCB2ZWN0b3IgIzEKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3BrX3JzYV9kZWNyeXB0X3Rlc3RfdmVjOiJhNDJlZGE0MWU1NjIzNWU2NjZlN2ZhYWE3NzEwMDE5N2Y2NTcyODhhMWJmMTgzZTQ4MjBmMGMzN2NlMmM0NTZiOTYwMjc4ZDYwMDNlMGJiY2Q0YmU0YTk2OWY4ZThmZDkyMzFlMWY0OTI0MTRmMDBlZDA5ODQ0OTk0Yzg2ZWMzMmRiN2NkZTNiZWM3ZjBjM2RiZjZhZTU1YmFlYjI3MTJmYTYwOWY1ZmMzMjA3YTgyNGViM2RhY2UzMTg0OWNkNmE2MDg0MzE4NTIzOTEyYmNjYjg0Y2Y0MmUzYzZkNmQxNjg1MTMxZDY5YmI1NDVhY2VjODI3ZDJiMGRmZGQ1NTY4YjdkY2M0ZjVhMTFkNjkxNjU4M2ZlZmE2ODlkMzY3ZjhjOWUxZDk1ZGNkMjI0MDg5NWE5NDcwYjBjMTczMGY5N2NkNmU4NTQ2ODYwYmQyNTQ4MDE3NjlmNTRiZTk2ZTE2MzYyZGRjYmYzNGQ1NjAzNTAyODg5MDE5OWUwZjQ4ZGIzODY0MmNiNjZhNDE4MWUwMjhhNjQ0M2E0MDRmZWEyODRjZTAyYjQ2MTRiNjgzMzY3ZDQwODc0ZTUwNTYxMWQyMzE0MmQ0OWYwNmZlZWE4MzFkNTJkMzQ3YjEzNjEwYjQxM2M0ZWZjNDNhNmRlOWYwYjA4ZDJhOTUxZGM1MDNiNiI6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI0RTYzNkFGOThFNDBGM0FEQ0ZDQ0I2OThGNEU4MEI5RiI6MAorCitSU0EgZGVjcnlwdCB0ZXN0IHZlY3RvciAjMgorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorcGtfcnNhX2RlY3J5cHRfdGVzdF92ZWM6ImE0MmVkYTQxZTU2MjM1ZTY2NmU3ZmFhYTc3MTAwMTk3ZjY1NzI4OGExYmYxODNlNDgyMGYwYzM3Y2UyYzQ1NmI5NjAyNzhkNjAwM2UwYmJjZDRiZTRhOTY5ZjhlOGZkOTIzMWUxZjQ5MjQxNGYwMGVkMDk4NDQ5OTRjODZlYzMyZGI3Y2RlM2JlYzdmMGMzZGJmNmFlNTViYWViMjcxMmZhNjA5ZjVmYzMyMDdhODI0ZWIzZGFjZTMxODQ5Y2Q2YTYwODQzMTg1MjM5MTJiY2NiODRjZjQyZTNjNmQ2ZDE2ODUxMzFkNjliYjU0NWFjZWM4MjdkMmIwZGZkZDU1NjhiN2RjYzRmNWExMWQ2OTE2NTgzZmVmYTY4OWQzNjdmOGM5ZTFkOTVkY2QyMjQwODk1YTk0NzBiMGMxNzMwZjk3Y2Q2ZTg1NDY4NjBiZDI1NDgwMTc2OWY1NGJlOTZlMTYzNjJkZGNiZjM0ZDU2MDM1MDI4ODkwMTk5ZTBmNDhkYjM4NjQyY2I2NmE0MTgxZTAyOGE2NDQzYTQwNGZlYjI4NGNlMDJiNDYxNGI2ODMzNjdkNDA4NzRlNTA1NjExZDIzMTQyZDQ5ZjA2ZmVlYTgzMWQ1MmQzNDdiMTM2MTBiNDEzYzRlZmM0M2E2ZGU5ZjBiMDhkMmE5NTFkYzUwM2I2IjoyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK0VDIG5vY3J5cHQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQworcGtfZWNfbm9jcnlwdDpNQkVEVExTX1BLX0VDS0VZCisKK0VDLURIIG5vY3J5cHQKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQworcGtfZWNfbm9jcnlwdDpNQkVEVExTX1BLX0VDS0VZX0RICisKK0VDRFNBIG5vY3J5cHQKK2RlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DCitwa19lY19ub2NyeXB0Ok1CRURUTFNfUEtfRUNEU0EKKworUlNBX0FMVCBjb25zaXN0ZW5jeQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfR0VOUFJJTUUKK3BrX3JzYV9hbHQ6CisKK1ZlcmlmeSBleHQgUlNBICMxIChQS0NTMSB2Mi4xLCBzYWx0X2xlbiA9IEFOWSwgT0spCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjIxOk1CRURUTFNfU0hBMjU2X0MKK3BrX3JzYV92ZXJpZnlfZXh0X3Rlc3RfdmVjOiI1NDY1NzM3NDIwNmQ2NTczNzM2MTY3NjUiOk1CRURUTFNfTURfU0hBMjU2OjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6IjBkMmJkYjA0NTZhM2Q2NTFkNWJkNDhhNDIwNDQ5Mzg5OGY3MmNmMWFhZGRkNzEzODdjYzA1OGJjM2Y0YzIzNWVhNmJlNDAxMGZkNjFiMjhlMWZiYjI3NTQ2MmI1Mzc3NWMwNGJlOTAyMmQzOGI2YTJlMDM4N2RkZGJhODZhM2Y4NTU0ZDI4NTgwNDRhNTlmZGRiZDU5NDc1M2ZjMDU2ZmUzM2M4ZGFkZGI4NWRjNzBkMTY0NjkwYjExODIyMDlmZjg0ODI0ZTBiZTEwZTM1YzM3OWYyZjM3OGJmMTc2YTlmN2NiOTRkOTVlNDRkOTAyNzZhMjk4Yzg4MTBmNzQxYzkiOk1CRURUTFNfUEtfUlNBU1NBX1BTUzpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6MAorCitWZXJpZnkgZXh0IFJTQSAjMiAoUEtDUzEgdjIuMSwgc2FsdF9sZW4gPSBBTlksIHdyb25nIG1lc3NhZ2UpCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjIxOk1CRURUTFNfU0hBMjU2X0MKK3BrX3JzYV92ZXJpZnlfZXh0X3Rlc3RfdmVjOiI1NDY1NzM3NDIwNmQ2NTczNzM2MTY3NjYiOk1CRURUTFNfTURfU0hBMjU2OjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6IjBkMmJkYjA0NTZhM2Q2NTFkNWJkNDhhNDIwNDQ5Mzg5OGY3MmNmMWFhZGRkNzEzODdjYzA1OGJjM2Y0YzIzNWVhNmJlNDAxMGZkNjFiMjhlMWZiYjI3NTQ2MmI1Mzc3NWMwNGJlOTAyMmQzOGI2YTJlMDM4N2RkZGJhODZhM2Y4NTU0ZDI4NTgwNDRhNTlmZGRiZDU5NDc1M2ZjMDU2ZmUzM2M4ZGFkZGI4NWRjNzBkMTY0NjkwYjExODIyMDlmZjg0ODI0ZTBiZTEwZTM1YzM3OWYyZjM3OGJmMTc2YTlmN2NiOTRkOTVlNDRkOTAyNzZhMjk4Yzg4MTBmNzQxYzkiOk1CRURUTFNfUEtfUlNBU1NBX1BTUzpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6TUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQKKworVmVyaWZ5IGV4dCBSU0EgIzMgKFBLQ1MxIHYyLjEsIHNhbHRfbGVuID0gMCwgT0spCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjIxOk1CRURUTFNfU0hBMjU2X0MKK3BrX3JzYV92ZXJpZnlfZXh0X3Rlc3RfdmVjOiI1NDY1NzM3NDIwNmQ2NTczNzM2MTY3NjUiOk1CRURUTFNfTURfU0hBMjU2OjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6IjdmYzUwNmQyNmNhM2IyMjkyMmExY2UzOWZhYWVkZDI3MzE2MWI4MmQ5NDQzYzU2ZjFhMDM0ZjEzMWFlNGExOGNhZTE0NzQyNzFjYjRiNjZhMTdkOTcwN2NhNThiMGJkYmQzYzQwNmI3ZTY1YmJjYzliYmJjZTk0ZGM0NWRlODA3YjQ5ODliMjNiM2U0ZGI3NGNhMjkyOTgxMzc4MzdlYjkwY2M4M2QzMjE5MjQ5YmM3ZDQ4MGZjZWFmMDc1MjAzYTg2ZTU0YzRlY2ZhNGUzMTJlMzlmOGY2OWQ3NjUzNDA4OWEzNmVkOTA0OWNhOWNmZDVhYjFkYjFmYTc1ZmU1YzgiOk1CRURUTFNfUEtfUlNBU1NBX1BTUzpNQkVEVExTX01EX1NIQTI1NjowOjAKKworVmVyaWZ5IGV4dCBSU0EgIzQgKFBLQ1MxIHYyLjEsIHNhbHRfbGVuID0gbWF4LCBPSykKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMjE6TUJFRFRMU19TSEEyNTZfQworcGtfcnNhX3ZlcmlmeV9leHRfdGVzdF92ZWM6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjoiMGQyYmRiMDQ1NmEzZDY1MWQ1YmQ0OGE0MjA0NDkzODk4ZjcyY2YxYWFkZGQ3MTM4N2NjMDU4YmMzZjRjMjM1ZWE2YmU0MDEwZmQ2MWIyOGUxZmJiMjc1NDYyYjUzNzc1YzA0YmU5MDIyZDM4YjZhMmUwMzg3ZGRkYmE4NmEzZjg1NTRkMjg1ODA0NGE1OWZkZGJkNTk0NzUzZmMwNTZmZTMzYzhkYWRkYjg1ZGM3MGQxNjQ2OTBiMTE4MjIwOWZmODQ4MjRlMGJlMTBlMzVjMzc5ZjJmMzc4YmYxNzZhOWY3Y2I5NGQ5NWU0NGQ5MDI3NmEyOThjODgxMGY3NDFjOSI6TUJFRFRMU19QS19SU0FTU0FfUFNTOk1CRURUTFNfTURfU0hBMjU2Ojk0OjAKKworVmVyaWZ5IGV4dCBSU0EgIzUgKFBLQ1MxIHYyLjEsIHdyb25nIHNhbHRfbGVuKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6TUJFRFRMU19NRF9TSEEyNTY6MzI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitWZXJpZnkgZXh0IFJTQSAjNiAoUEtDUzEgdjIuMSwgTUdGMSBhbGcgIT0gTVNHIGhhc2ggYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiYzA3MTllOWE4ZDVkODM4ZDg2MWRjNmY2NzVjODk5ZDJiMzA5YTNhNjViYjlmZTZiMTFlNWFmY2JmOWEyYzBiMSI6TUJFRFRMU19NRF9OT05FOjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6IjBkMmJkYjA0NTZhM2Q2NTFkNWJkNDhhNDIwNDQ5Mzg5OGY3MmNmMWFhZGRkNzEzODdjYzA1OGJjM2Y0YzIzNWVhNmJlNDAxMGZkNjFiMjhlMWZiYjI3NTQ2MmI1Mzc3NWMwNGJlOTAyMmQzOGI2YTJlMDM4N2RkZGJhODZhM2Y4NTU0ZDI4NTgwNDRhNTlmZGRiZDU5NDc1M2ZjMDU2ZmUzM2M4ZGFkZGI4NWRjNzBkMTY0NjkwYjExODIyMDlmZjg0ODI0ZTBiZTEwZTM1YzM3OWYyZjM3OGJmMTc2YTlmN2NiOTRkOTVlNDRkOTAyNzZhMjk4Yzg4MTBmNzQxYzkiOk1CRURUTFNfUEtfUlNBU1NBX1BTUzpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6MAorCitWZXJpZnkgZXh0IFJTQSAjNyAoUEtDUzEgdjIuMSwgd3JvbmcgTUdGMSBhbGcgIT0gTVNHIGhhc2ggYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiYzA3MTllOWE4ZDVkODM4ZDg2MWRjNmY2NzVjODk5ZDJiMzA5YTNhNjViYjlmZTZiMTFlNWFmY2JmOWEyYzBiMSI6TUJFRFRMU19NRF9OT05FOjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6IjBkMmJkYjA0NTZhM2Q2NTFkNWJkNDhhNDIwNDQ5Mzg5OGY3MmNmMWFhZGRkNzEzODdjYzA1OGJjM2Y0YzIzNWVhNmJlNDAxMGZkNjFiMjhlMWZiYjI3NTQ2MmI1Mzc3NWMwNGJlOTAyMmQzOGI2YTJlMDM4N2RkZGJhODZhM2Y4NTU0ZDI4NTgwNDRhNTlmZGRiZDU5NDc1M2ZjMDU2ZmUzM2M4ZGFkZGI4NWRjNzBkMTY0NjkwYjExODIyMDlmZjg0ODI0ZTBiZTEwZTM1YzM3OWYyZjM3OGJmMTc2YTlmN2NiOTRkOTVlNDRkOTAyNzZhMjk4Yzg4MTBmNzQxYzkiOk1CRURUTFNfUEtfUlNBU1NBX1BTUzpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworVmVyaWZ5IGV4dCBSU0EgIzggKFBLQ1MxIHYyLjEsIFJTQVNTQS1QU1Mgd2l0aG91dCBvcHRpb25zKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YyMTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQVNTQV9QU1M6LTE6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOk1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBCisKK1ZlcmlmeSBleHQgUlNBICM5IChQS0NTMSB2Mi4xLCBSU0Egd2l0aCBvcHRpb25zKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQTpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6TUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEKKworVmVyaWZ5IGV4dCBSU0EgIzEwIChQS0NTMSB2Mi4xLCBSU0Egd2l0aG91dCBvcHRpb25zKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX1JTQTotMTpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitWZXJpZnkgZXh0IFJTQSAjMTEgKFBLQ1MxIHYyLjEsIGFza2luZyBmb3IgRUNEU0EpCitkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DCitwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYzoiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjpNQkVEVExTX01EX1NIQTI1NjoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOiIwZDJiZGIwNDU2YTNkNjUxZDViZDQ4YTQyMDQ0OTM4OThmNzJjZjFhYWRkZDcxMzg3Y2MwNThiYzNmNGMyMzVlYTZiZTQwMTBmZDYxYjI4ZTFmYmIyNzU0NjJiNTM3NzVjMDRiZTkwMjJkMzhiNmEyZTAzODdkZGRiYTg2YTNmODU1NGQyODU4MDQ0YTU5ZmRkYmQ1OTQ3NTNmYzA1NmZlMzNjOGRhZGRiODVkYzcwZDE2NDY5MGIxMTgyMjA5ZmY4NDgyNGUwYmUxMGUzNWMzNzlmMmYzNzhiZjE3NmE5ZjdjYjk0ZDk1ZTQ0ZDkwMjc2YTI5OGM4ODEwZjc0MWM5IjpNQkVEVExTX1BLX0VDRFNBOi0xOk1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWTpNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENICisKK1ZlcmlmeSBleHQgUlNBICMxMiAoUEtDUzEgdjEuNSwgZ29vZCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK3BrX3JzYV92ZXJpZnlfZXh0X3Rlc3RfdmVjOiIyMDZlZjRiZjM5NmM2MDg3ZjgyMjllZjE5NmZkMzVmMzdjY2I4ZGU1ZWZjZGIyMzhmMjBkNTU2NjY4ZjExNDI1N2ExMWZiZTAzODQ2NGE2NzgzMDM3OGU2MmFlOTc5MTQ1Mzk1M2RhYzFkYmQ3OTIxODM3YmE5OGU4NGU4NTZlYjgwZWQ5NDg3ZTY1NmQwYjIwYzI4YzhiYTVlMzVkYjFhYmJlZDgzZWQxYzc3MjBhOTc3MDFmNzA5ZTM1NDdhNGJmY2FiY2E5Yzg5YzU3YWQxNWMzOTk2NTc3YTBhZTM2ZDdjN2I2OTkwMzUyNDJmMzc5NTQ2NDZjMWNkNWMwOGFjIjpNQkVEVExTX01EX1NIQTE6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiI1YWJjMDFmNWRlMjViNzA4NjdmZjBjMjRlMjIyYzYxZjUzYzg4ZGFmNDI1ODZmZGRjZDU2ZjNjNDU4OGYwNzRiZTNjMzI4MDU2YzA2MzM4ODY4OGI2Mzg1YTgxNjc5NTdjNmU1MzU1YTUxMGUwMDViOGE4NTFkNjljOTZiMzZlYzYwMzY2NDQwNzgyMTBlNWQ3ZDMyNmY5NjM2NWVlMDY0ODg4MjkyMTQ5MmJjN2I3NTNlYjljMjZjZGJhYjM3NTU1ZjIxMGRmMmNhNmZlYzFiMjViNDYzZDM4YjgxYzBkY2VhMjAyMDIyYjA0YWY1ZGE1OGFhMDNkNzdiZTk0OWI3IjpNQkVEVExTX1BLX1JTQTotMTpNQkVEVExTX1JTQV9TQUxUX0xFTl9BTlk6MAorCitDaGVjayBwYWlyICMxIChFQywgT0spCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfcGtfY2hlY2tfcGFpcjoiZGF0YV9maWxlcy9lY18yNTZfcHViLnBlbSI6ImRhdGFfZmlsZXMvZWNfMjU2X3Bydi5wZW0iOjAKKworQ2hlY2sgcGFpciAjMiAoRUMsIGJhZCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc19wa19jaGVja19wYWlyOiJkYXRhX2ZpbGVzL2VjXzI1Nl9wdWIucGVtIjoiZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSI6TUJFRFRMU19FUlJfRUNQX0JBRF9JTlBVVF9EQVRBCisKK0NoZWNrIHBhaXIgIzMgKFJTQSwgT0spCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfcGtfY2hlY2tfcGFpcjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnB1YmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOjAKKworQ2hlY2sgcGFpciAjNCAoUlNBLCBiYWQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfcGtfY2hlY2tfcGFpcjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnB1YmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMi5rZXkiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK0NoZWNrIHBhaXIgIzUgKFJTQSB2cyBFQykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1JTQV9DCittYmVkdGxzX3BrX2NoZWNrX3BhaXI6ImRhdGFfZmlsZXMvZWNfMjU2X3B1Yi5wZW0iOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjpNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENICisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGEyNjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrLmZ1bmN0aW9uCkBAIC0wLDAgKzEsNDkwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3BrLmgiCisKKy8qIEZvciBlcnJvciBjb2RlcyAqLworI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKworc3RhdGljIGludCBybmRfc3RkX3JhbmQoIHZvaWQgKnJuZ19zdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuICk7CisKKyNkZWZpbmUgUlNBX0tFWV9TSVpFIDUxMgorI2RlZmluZSBSU0FfS0VZX0xFTiAgIDY0CisKK3N0YXRpYyBpbnQgcGtfZ2Vua2V5KCBtYmVkdGxzX3BrX2NvbnRleHQgKnBrICkKK3sKKyAgICAoKHZvaWQpIHBrKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX0dFTlBSSU1FKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCBwayApID09IE1CRURUTFNfUEtfUlNBICkKKyAgICAgICAgcmV0dXJuIG1iZWR0bHNfcnNhX2dlbl9rZXkoIG1iZWR0bHNfcGtfcnNhKCAqcGsgKSwgcm5kX3N0ZF9yYW5kLCBOVUxMLCBSU0FfS0VZX1NJWkUsIDMgKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggbWJlZHRsc19wa19nZXRfdHlwZSggcGsgKSA9PSBNQkVEVExTX1BLX0VDS0VZIHx8CisgICAgICAgIG1iZWR0bHNfcGtfZ2V0X3R5cGUoIHBrICkgPT0gTUJFRFRMU19QS19FQ0tFWV9ESCB8fAorICAgICAgICBtYmVkdGxzX3BrX2dldF90eXBlKCBwayApID09IE1CRURUTFNfUEtfRUNEU0EgKQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJm1iZWR0bHNfcGtfZWMoICpwayApLT5ncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMSApICkgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgIHJldHVybiBtYmVkdGxzX2VjcF9nZW5fa2V5cGFpciggJm1iZWR0bHNfcGtfZWMoICpwayApLT5ncnAsICZtYmVkdGxzX3BrX2VjKCAqcGsgKS0+ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfcGtfZWMoICpwayApLT5RLCBybmRfc3RkX3JhbmQsIE5VTEwgKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4oIC0xICk7Cit9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCitpbnQgbWJlZHRsc19yc2FfZGVjcnlwdF9mdW5jKCB2b2lkICpjdHgsIGludCBtb2RlLCBzaXplX3QgKm9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRwdXRfbWF4X2xlbiApCit7CisgICAgcmV0dXJuKCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCAobWJlZHRsc19yc2FfY29udGV4dCAqKSBjdHgsIE5VTEwsIE5VTEwsIG1vZGUsIG9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIG91dHB1dCwgb3V0cHV0X21heF9sZW4gKSApOworfQoraW50IG1iZWR0bHNfcnNhX3NpZ25fZnVuYyggdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcsCisgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIG1iZWR0bHNfbWRfdHlwZV90IG1kX2FsZywgdW5zaWduZWQgaW50IGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgY2hhciAqc2lnICkKK3sKKyAgICByZXR1cm4oIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oIChtYmVkdGxzX3JzYV9jb250ZXh0ICopIGN0eCwgZl9ybmcsIHBfcm5nLCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kX2FsZywgaGFzaGxlbiwgaGFzaCwgc2lnICkgKTsKK30KK3NpemVfdCBtYmVkdGxzX3JzYV9rZXlfbGVuX2Z1bmMoIHZvaWQgKmN0eCApCit7CisgICAgcmV0dXJuKCAoKGNvbnN0IG1iZWR0bHNfcnNhX2NvbnRleHQgKikgY3R4KS0+bGVuICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19SU0FfQyAqLworLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19QS19DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa191dGlscyggaW50IHR5cGUsIGludCBzaXplLCBpbnQgbGVuLCBjaGFyICpuYW1lICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXAoICZwaywgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggdHlwZSApICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBwa19nZW5rZXkoICZwayApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCAoaW50KSBtYmVkdGxzX3BrX2dldF90eXBlKCAmcGsgKSA9PSB0eXBlICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfY2FuX2RvKCAmcGssIHR5cGUgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2dldF9iaXRsZW4oICZwayApID09ICh1bnNpZ25lZCkgc2l6ZSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2dldF9sZW4oICZwayApID09ICh1bnNpZ25lZCkgbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggbWJlZHRsc19wa19nZXRfbmFtZSggJnBrKSwgbmFtZSApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0ZTX0lPICovCit2b2lkIG1iZWR0bHNfcGtfY2hlY2tfcGFpciggY2hhciAqcHViX2ZpbGUsIGNoYXIgKnBydl9maWxlLCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcHViLCBwcnYsIGFsdDsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJnB1YiApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBydiApOworICAgIG1iZWR0bHNfcGtfaW5pdCggJmFsdCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2VfcHVibGljX2tleWZpbGUoICZwdWIsIHB1Yl9maWxlICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZwcnYsIHBydl9maWxlLCBOVUxMICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfY2hlY2tfcGFpciggJnB1YiwgJnBydiApID09IHJldCApOworCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUKQorICAgIGlmKCBtYmVkdGxzX3BrX2dldF90eXBlKCAmcHJ2ICkgPT0gTUJFRFRMU19QS19SU0EgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXBfcnNhX2FsdCggJmFsdCwgbWJlZHRsc19wa19yc2EoIHBydiApLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19yc2FfZGVjcnlwdF9mdW5jLCBtYmVkdGxzX3JzYV9zaWduX2Z1bmMsIG1iZWR0bHNfcnNhX2tleV9sZW5fZnVuYyApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfY2hlY2tfcGFpciggJnB1YiwgJmFsdCApID09IHJldCApOworICAgIH0KKyNlbmRpZgorCisgICAgbWJlZHRsc19wa19mcmVlKCAmcHViICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcHJ2ICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmYWx0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQyAqLwordm9pZCBwa19yc2FfdmVyaWZ5X3Rlc3RfdmVjKCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRSwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICBpbnQgbXNnX2xlbjsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggcmVzdWx0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfc2V0dXAoICZwaywgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19QS19SU0EgKSApID09IDAgKTsKKyAgICByc2EgPSBtYmVkdGxzX3BrX3JzYSggcGsgKTsKKworICAgIHJzYS0+bGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EtPk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLT5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHJlc3VsdF9zdHIsIHJlc3VsdF9oZXhfc3RyICk7CisKKyAgICBpZiggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICkgIT0gTlVMTCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSwgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfdmVyaWZ5KCAmcGssIGRpZ2VzdCwgaGFzaF9yZXN1bHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ciwgbWJlZHRsc19wa19nZXRfbGVuKCAmcGsgKSApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQyAqLwordm9pZCBwa19yc2FfdmVyaWZ5X2V4dF90ZXN0X3ZlYyggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBpbnQgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0UsIGNoYXIgKnJlc3VsdF9oZXhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGtfdHlwZSwgaW50IG1nZjFfaGFzaF9pZCwgaW50IHNhbHRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYTsKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgbWJlZHRsc19wa19yc2Fzc2FfcHNzX29wdGlvbnMgcHNzX29wdHM7CisgICAgdm9pZCAqb3B0aW9uczsKKyAgICBpbnQgbXNnX2xlbjsKKyAgICBzaXplX3QgaGFzaF9sZW47CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9yZXN1bHQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHJlc3VsdF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwKCAmcGssIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfUlNBICkgKSA9PSAwICk7CisgICAgcnNhID0gbWJlZHRsc19wa19yc2EoIHBrICk7CisKKyAgICByc2EtPmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLT5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+RSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCByZXN1bHRfc3RyLCByZXN1bHRfaGV4X3N0ciApOworCisgICAgaWYoIGRpZ2VzdCAhPSBNQkVEVExTX01EX05PTkUgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApLAorICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworICAgICAgICBoYXNoX2xlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1lbWNweSggaGFzaF9yZXN1bHQsIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuICk7CisgICAgICAgIGhhc2hfbGVuID0gbXNnX2xlbjsKKyAgICB9CisKKyAgICBpZiggbWdmMV9oYXNoX2lkIDwgMCApCisgICAgeworICAgICAgICBvcHRpb25zID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb3B0aW9ucyA9ICZwc3Nfb3B0czsKKworICAgICAgICBwc3Nfb3B0cy5tZ2YxX2hhc2hfaWQgPSBtZ2YxX2hhc2hfaWQ7CisgICAgICAgIHBzc19vcHRzLmV4cGVjdGVkX3NhbHRfbGVuID0gc2FsdF9sZW47CisgICAgfQorCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfdmVyaWZ5X2V4dCggcGtfdHlwZSwgb3B0aW9ucywgJnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QsIGhhc2hfcmVzdWx0LCBoYXNoX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ciwgbWJlZHRsc19wa19nZXRfbGVuKCAmcGsgKSApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DICovCit2b2lkIHBrX2VjX3Rlc3RfdmVjKCBpbnQgdHlwZSwgaW50IGlkLCBjaGFyICprZXlfc3RyLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGFzaF9zdHIsIGNoYXIgKiBzaWdfc3RyLCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNrZXk7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzEwMF0sIHNpZ1s1MDBdLCBrZXlbNTAwXTsKKyAgICBzaXplX3QgaGFzaF9sZW4sIHNpZ19sZW4sIGtleV9sZW47CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgbWVtc2V0KCBoYXNoLCAwLCBzaXplb2YoIGhhc2ggKSApOyAgaGFzaF9sZW4gPSB1bmhleGlmeShoYXNoLCBoYXNoX3N0cik7CisgICAgbWVtc2V0KCBzaWcsIDAsIHNpemVvZiggc2lnICkgKTsgICAgc2lnX2xlbiA9IHVuaGV4aWZ5KHNpZywgc2lnX3N0cik7CisgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsgICAga2V5X2xlbiA9IHVuaGV4aWZ5KGtleSwga2V5X3N0cik7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnBrLCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCB0eXBlICkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19jYW5fZG8oICZwaywgTUJFRFRMU19QS19FQ0RTQSApICk7CisgICAgZWNrZXkgPSBtYmVkdGxzX3BrX2VjKCBwayApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZlY2tleS0+Z3JwLCBpZCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoICZlY2tleS0+Z3JwLCAmZWNrZXktPlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBrZXlfbGVuICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfdmVyaWZ5KCAmcGssIE1CRURUTFNfTURfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBoYXNoX2xlbiwgc2lnLCBzaWdfbGVuICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DICovCit2b2lkIHBrX3NpZ25fdmVyaWZ5KCBpbnQgdHlwZSwgaW50IHNpZ25fcmV0LCBpbnQgdmVyaWZ5X3JldCApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs1MF0sIHNpZ1s1MDAwXTsKKyAgICBzaXplX3Qgc2lnX2xlbjsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisKKyAgICBtZW1zZXQoIGhhc2gsIDB4MmEsIHNpemVvZiBoYXNoICk7CisgICAgbWVtc2V0KCBzaWcsIDAsIHNpemVvZiBzaWcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwKCAmcGssIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIHR5cGUgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggcGtfZ2Vua2V5KCAmcGsgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zaWduKCAmcGssIE1CRURUTFNfTURfU0hBMjU2LCBoYXNoLCBzaXplb2YgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLCAmc2lnX2xlbiwgcm5kX3N0ZF9yYW5kLCBOVUxMICkgPT0gc2lnbl9yZXQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3ZlcmlmeSggJnBrLCBNQkVEVExTX01EX1NIQTI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YgaGFzaCwgc2lnLCBzaWdfbGVuICkgPT0gdmVyaWZ5X3JldCApOworCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJnBrICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQyAqLwordm9pZCBwa19yc2FfZW5jcnlwdF90ZXN0X3ZlYyggY2hhciAqbWVzc2FnZV9oZXgsIGludCBtb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleCwgaW50IHJldCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzEwMDBdOworICAgIHNpemVfdCBtc2dfbGVuLCBvbGVuLCByZXNfbGVuOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0ICpyc2E7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHBrOworCisgICAgbWVtc2V0KCAmcm5kX2luZm8sICAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisgICAgbWVtc2V0KCBtZXNzYWdlLCAgICAwLCBzaXplb2YoIG1lc3NhZ2UgKSApOworICAgIG1lbXNldCggb3V0cHV0LCAgICAgMCwgc2l6ZW9mKCBvdXRwdXQgKSApOworICAgIG1lbXNldCggcmVzdWx0LCAgICAgMCwgc2l6ZW9mKCByZXN1bHQgKSApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlLCBtZXNzYWdlX2hleCApOworICAgIHJlc19sZW4gPSB1bmhleGlmeSggcmVzdWx0LCByZXN1bHRfaGV4ICk7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwKCAmcGssIG1iZWR0bHNfcGtfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfUEtfUlNBICkgKSA9PSAwICk7CisgICAgcnNhID0gbWJlZHRsc19wa19yc2EoIHBrICk7CisKKyAgICByc2EtPmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLT5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+RSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2VuY3J5cHQoICZwaywgbWVzc2FnZSwgbXNnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb2xlbiwgc2l6ZW9mKCBvdXRwdXQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKSA9PSByZXQgKTsKKyAgICBURVNUX0FTU0VSVCggb2xlbiA9PSByZXNfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggb3V0cHV0LCByZXN1bHQsIG9sZW4gKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DICovCit2b2lkIHBrX3JzYV9kZWNyeXB0X3Rlc3RfdmVjKCBjaGFyICpjaXBoZXJfaGV4LCBpbnQgbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICppbnB1dF9RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNsZWFyX2hleCwgaW50IHJldCApCit7CisgICAgdW5zaWduZWQgY2hhciBjbGVhclsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlclsxMDAwXTsKKyAgICBzaXplX3QgY2xlYXJfbGVuLCBvbGVuLCBjaXBoZXJfbGVuOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICBtYmVkdGxzX21waSBQMSwgUTEsIEgsIEc7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhOworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJlAxICk7IG1iZWR0bHNfbXBpX2luaXQoICZRMSApOyBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworCisgICAgbWVtc2V0KCAmcm5kX2luZm8sICAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisgICAgbWVtc2V0KCBjbGVhciwgICAgICAwLCBzaXplb2YoIGNsZWFyICkgKTsKKyAgICBtZW1zZXQoIGNpcGhlciwgICAgIDAsIHNpemVvZiggY2lwaGVyICkgKTsKKworICAgIGNsZWFyX2xlbiA9IHVuaGV4aWZ5KCBjbGVhciwgY2xlYXJfaGV4ICk7CisgICAgY2lwaGVyX2xlbiA9IHVuaGV4aWZ5KCBjaXBoZXIsIGNpcGhlcl9oZXggKTsKKworICAgIC8qIGluaXQgcGstcnNhIGNvbnRleHQgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnBrLCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCBNQkVEVExTX1BLX1JTQSApICkgPT0gMCApOworICAgIHJzYSA9IG1iZWR0bHNfcGtfcnNhKCBwayApOworCisgICAgLyogbG9hZCBwdWJsaWMga2V5ICovCisgICAgcnNhLT5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+TiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZyc2EtPkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICAvKiBsb2FkIHByaXZhdGUga2V5ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcnNhLT5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnJzYS0+USwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmcnNhLT5QLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZyc2EtPlEsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2NkKCAmRywgJnJzYS0+RSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmcnNhLT5EICwgJnJzYS0+RSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmcnNhLT5EUCwgJnJzYS0+RCwgJlAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmcnNhLT5EUSwgJnJzYS0+RCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmcnNhLT5RUCwgJnJzYS0+USwgJnJzYS0+UCApID09IDAgKTsKKworICAgIC8qIGRlY3J5cHRpb24gdGVzdCAqLworICAgIG1lbXNldCggb3V0cHV0LCAwLCBzaXplb2YoIG91dHB1dCApICk7CisgICAgb2xlbiA9IDA7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZGVjcnlwdCggJnBrLCBjaXBoZXIsIGNpcGhlcl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm9sZW4sIHNpemVvZiggb3V0cHV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gcmV0ICk7CisgICAgaWYoIHJldCA9PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBvbGVuID09IGNsZWFyX2xlbiApOworICAgICAgICBURVNUX0FTU0VSVCggbWVtY21wKCBvdXRwdXQsIGNsZWFyLCBvbGVuICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtfZWNfbm9jcnlwdCggaW50IHR5cGUgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBwazsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRbMTAwXTsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgc2l6ZV90IG9sZW4gPSAwOworICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIOworCisgICAgbWJlZHRsc19wa19pbml0KCAmcGsgKTsKKworICAgIG1lbXNldCggJnJuZF9pbmZvLCAgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworICAgIG1lbXNldCggb3V0cHV0LCAgICAgMCwgc2l6ZW9mKCBvdXRwdXQgKSApOworICAgIG1lbXNldCggaW5wdXQsICAgICAgMCwgc2l6ZW9mKCBpbnB1dCApICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zZXR1cCggJnBrLCBtYmVkdGxzX3BrX2luZm9fZnJvbV90eXBlKCB0eXBlICkgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19lbmNyeXB0KCAmcGssIGlucHV0LCBzaXplb2YoIGlucHV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm9sZW4sIHNpemVvZiggb3V0cHV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gcmV0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19kZWNyeXB0KCAmcGssIGlucHV0LCBzaXplb2YoIGlucHV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJm9sZW4sIHNpemVvZiggb3V0cHV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICkgPT0gcmV0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmcGsgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtfUlNBX0FMVF9TVVBQT1JUICovCit2b2lkIHBrX3JzYV9hbHQoICkKK3sKKyAgICAvKgorICAgICAqIEFuIHJzYV9hbHQgY29udGV4dCBjYW4gb25seSBkbyBwcml2YXRlIG9wZXJhdGlvbnMgKGRlY3J5cHQsIHNpZ24pLgorICAgICAqIFRlc3QgaXQgYWdhaW5zdCB0aGUgcHVibGljIG9wZXJhdGlvbnMgKGVuY3J5cHQsIHZlcmlmeSkgb2YgYQorICAgICAqIGNvcnJlc3BvbmRpbmcgcnNhIGNvbnRleHQuCisgICAgICovCisgICAgbWJlZHRsc19yc2FfY29udGV4dCByYXc7CisgICAgbWJlZHRsc19wa19jb250ZXh0IHJzYSwgYWx0OworICAgIG1iZWR0bHNfcGtfZGVidWdfaXRlbSBkYmdfaXRlbXNbMTBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaFs1MF0sIHNpZ1sxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1s1MF0sIGNpcGhbMTAwMF0sIHRlc3RbMTAwMF07CisgICAgc2l6ZV90IHNpZ19sZW4sIGNpcGhfbGVuLCB0ZXN0X2xlbjsKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSDsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZyYXcsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCBNQkVEVExTX01EX05PTkUgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZyc2EgKTsgbWJlZHRsc19wa19pbml0KCAmYWx0ICk7CisKKyAgICBtZW1zZXQoIGhhc2gsIDB4MmEsIHNpemVvZiBoYXNoICk7CisgICAgbWVtc2V0KCBzaWcsIDAsIHNpemVvZiBzaWcgKTsKKyAgICBtZW1zZXQoIG1zZywgMHgyYSwgc2l6ZW9mIG1zZyApOworICAgIG1lbXNldCggY2lwaCwgMCwgc2l6ZW9mIGNpcGggKTsKKyAgICBtZW1zZXQoIHRlc3QsIDAsIHNpemVvZiB0ZXN0ICk7CisKKyAgICAvKiBJbml0aWxpYXplIFBLIFJTQSBjb250ZXh0IHdpdGggcmFuZG9tIGtleSAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwKCAmcnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wa19pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19QS19SU0EgKSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggcGtfZ2Vua2V5KCAmcnNhICkgPT0gMCApOworCisgICAgLyogRXh0cmFjdCBrZXkgdG8gdGhlIHJhdyByc2EgY29udGV4dCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jb3B5KCAmcmF3LCBtYmVkdGxzX3BrX3JzYSggcnNhICkgKSA9PSAwICk7CisKKyAgICAvKiBJbml0aWFsaXplIFBLIFJTQV9BTFQgY29udGV4dCAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3NldHVwX3JzYV9hbHQoICZhbHQsICh2b2lkICopICZyYXcsCisgICAgICAgICAgICAgICAgIG1iZWR0bHNfcnNhX2RlY3J5cHRfZnVuYywgbWJlZHRsc19yc2Ffc2lnbl9mdW5jLCBtYmVkdGxzX3JzYV9rZXlfbGVuX2Z1bmMgKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IGFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucyAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2Nhbl9kbyggJmFsdCwgTUJFRFRMU19QS19SU0EgKSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2dldF9iaXRsZW4oICZhbHQgKSA9PSBSU0FfS0VZX1NJWkUgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19nZXRfbGVuKCAmYWx0ICkgPT0gUlNBX0tFWV9MRU4gKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19nZXRfdHlwZSggJmFsdCApID09IE1CRURUTFNfUEtfUlNBX0FMVCApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIG1iZWR0bHNfcGtfZ2V0X25hbWUoICZhbHQgKSwgIlJTQS1hbHQiICkgPT0gMCApOworCisgICAgLyogVGVzdCBzaWduYXR1cmUgKi8KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19zaWduKCAmYWx0LCBNQkVEVExTX01EX05PTkUsIGhhc2gsIHNpemVvZiBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcsICZzaWdfbGVuLCBybmRfc3RkX3JhbmQsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHNpZ19sZW4gPT0gUlNBX0tFWV9MRU4gKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa192ZXJpZnkoICZyc2EsIE1CRURUTFNfTURfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YgaGFzaCwgc2lnLCBzaWdfbGVuICkgPT0gMCApOworCisgICAgLyogVGVzdCBkZWNyeXB0ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZW5jcnlwdCggJnJzYSwgbXNnLCBzaXplb2YgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoLCAmY2lwaF9sZW4sIHNpemVvZiBjaXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfc3RkX3JhbmQsIE5VTEwgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZGVjcnlwdCggJmFsdCwgY2lwaCwgY2lwaF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QsICZ0ZXN0X2xlbiwgc2l6ZW9mIHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9zdGRfcmFuZCwgTlVMTCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggdGVzdF9sZW4gPT0gc2l6ZW9mIG1zZyApOworICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIHRlc3QsIG1zZywgdGVzdF9sZW4gKSA9PSAwICk7CisKKyAgICAvKiBUZXN0IGZvcmJpZGRlbiBvcGVyYXRpb25zICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZW5jcnlwdCggJmFsdCwgbXNnLCBzaXplb2YgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoLCAmY2lwaF9sZW4sIHNpemVvZiBjaXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfc3RkX3JhbmQsIE5VTEwgKSA9PSByZXQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa192ZXJpZnkoICZhbHQsIE1CRURUTFNfTURfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBzaXplb2YgaGFzaCwgc2lnLCBzaWdfbGVuICkgPT0gcmV0ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfZGVidWcoICZhbHQsIGRiZ19pdGVtcyApID09IHJldCApOworCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZyYXcgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZyc2EgKTsgbWJlZHRsc19wa19mcmVlKCAmYWx0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2E0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmRhdGEKQEAgLTAsMCArMSwzNSBAQAorUlNBRVMtVjE1IEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgSW50Citwa2NzMV9yc2Flc192MTVfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDkiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmNjdjNjY5NzM1MWZmNGFlYzI5Y2RiYWFiZjJmYmUzNDY3Y2MyNTRmODFiZThlNzhkNzY1YTJlNjMzMzlmYzk5YTY2MzIwZGI3MzE1OGEzNWEyNTVkMDUxNzU4ZTk1ZWQ0YWJiMmNkYzY5YmI0NTQxMTBlODI3NDQxMjEzZGRjODc3MGU5M2VhMTQxZTFmYzY3M2UwMTdlOTdlYWRjNmI5NjhmMzg1YzJhZWNiMDNiZmIzMiI6IjZjNWViY2E2MTE2YjFlOTEzMTY2MTNmYmI1ZTkzMTk3MjcwYTg0OTEyMmQ1NDkxMjJkMDU4MTVlMjYyNmY4MGQyMGY3ZjNmMDM4Yzk4Mjk1MjAzYzBmN2Y2YmI4YzM1Njg0NTVjNjdkZWM4MmJjYTg2YmU4NmVmZjQzYjU2YjdiYTJkMTUzNzVmOWE0MjQ1NGMyYTJjNzA5OTUzYTZlNGE5Nzc0NjJlMzVmZDIxYTljMmZiM2MwYWQyYTM3MGY3NjU1MjY3YmY2ZjA0ODE0Nzg0OTgyOTg4ZTY2M2I4NjlmYzg1ODg0NzVhZjg2MGQ0OTllNWE2ZmZkZmMyYzZiZmQiOjAKKworUlNBRVMtVjE1IERlY3J5cHRpb24gVGVzdCBWZWN0b3IgSW50Citwa2NzMV9yc2Flc192MTVfZGVjcnlwdDoxMDI0OjE2OiJlZWNmYWU4MWIxYjliM2M5MDg4MTBiMTBhMWI1NjAwMTk5ZWI5ZjQ0YWVmNGZkYTQ5M2I4MWE5ZTNkODRmNjMyMTI0ZWYwMjM2ZTVkMWUzYjdlMjhmYWU3YWEwNDBhMmQ1YjI1MjE3NjQ1OWQxZjM5NzU0MWJhMmE1OGZiNjU5OSI6MTY6ImM5N2ZiMWYwMjdmNDUzZjYzNDEyMzNlYWFhZDFkOTM1M2Y2YzQyZDA4ODY2YjFkMDVhMGYyMDM1MDI4YjlkODY5ODQwYjQxNjY2YjQyZTkyZWEwZGEzYjQzMjA0YjVjZmNlMzM1MjUyNGQwNDE2YTVhNDQxZTcwMGFmNDYxNTAzIjoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5IjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjI4ODE4Y2IxNDIzNmFkMThmNDUyN2U3ZjFmNzYzM2U5NmNlZjAyMWJjMzIzNDQ3NWQ3ZjYxZTg4NzAyYjYzMzViNDJhMzUyZWQzZjMyNjdhYzdjM2U5YmE0YWYxN2U0NTA5NmM2M2VlZmQ4ZDlhN2NiNDJkZmM1MmZmZmIyZjViOGFmYjMwNWI0NjMxMmMyZWI1MDYzNDEyM2I0NDM3YTIyODdhYzU3Yjc1MDlkNTlhNTgzZmI3NDE5ODlhNDlmMzI2MjVlOTI2N2I0NjQxYTY2MDdiNzMwM2QzNWM2ODQ4OWRiNTNjOGQzODdiNjIwZDBkNDZhODUyZTcyZWE0M2MiOjAKKworUlNBRVMtVjE1IEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgRGF0YSBqdXN0IGZpdHMKK3BrY3MxX3JzYWVzX3YxNV9lbmNyeXB0OjEwMjQ6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiI0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMThjZGIxNjFmNDBhMTg1MDlhMzUwMWI3ZThlYzFjNzUyMmUyNDkwMzE5ZWZlZTg1ODExNzliNWJjZjM3NTBmODNhODY1OTUyZDA3OGVmZDQ4ZjU4ZjgwNjBiMGQ0M2Y5ODg4YjQzYTA5NGZlMTUyMDk0NTE4MjZlZjc5NzE5NTg4NWZmOWZhM2UyNjk5NGVlZTg1ZGJlNWRkMDQwNGE3MTU2NTcwODI4NjAyN2I0MzNjODhjODVhZjU1NWI5NmMzNGMzMDRkYzdjODI3ODIzMzY1NGMwMjJlZjM0MDA0MmNmZmY1NWU2YjE1YjY3Y2ZlYThhNWEzODRlZjY0YTZhYyI6MAorCitSU0FFUy1WMTUgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciBEYXRhIGp1c3QgZml0cworcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQ6MTAyNDoxNjoiZWVjZmFlODFiMWI5YjNjOTA4ODEwYjEwYTFiNTYwMDE5OWViOWY0NGFlZjRmZGE0OTNiODFhOWUzZDg0ZjYzMjEyNGVmMDIzNmU1ZDFlM2I3ZTI4ZmFlN2FhMDQwYTJkNWIyNTIxNzY0NTlkMWYzOTc1NDFiYTJhNThmYjY1OTkiOjE2OiJjOTdmYjFmMDI3ZjQ1M2Y2MzQxMjMzZWFhYWQxZDkzNTNmNmM0MmQwODg2NmIxZDA1YTBmMjAzNTAyOGI5ZDg2OTg0MGI0MTY2NmI0MmU5MmVhMGRhM2I0MzIwNGI1Y2ZjZTMzNTI1MjRkMDQxNmE1YTQ0MWU3MDBhZjQ2MTUwMyI6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiI0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMThjZGIxNjFmNDBhMTg1MDlhMzUwMWI3ZThlYzFjNzUyMmUyNDkwMzE5ZWZlZTg1ODExNzliNWJjZjM3NTBmODNhODY1OTUyZDA3OGVmZDQ4ZjU4ZjgwNjBiMGQ0M2Y5ODg4YjQzYTA5NGZlMTUyMDk0NTE4MjZlZjc5NzE5NTg4NWZmOWZhM2UyNjk5NGVlZTg1ZGJlNWRkMDQwNGE3MTU2NTcwODI4NjAyN2I0MzNjODhjODVhZjU1NWI5NmMzNGMzMDRkYzdjODI3ODIzMzY1NGMwMjJlZjM0MDA0MmNmZmY1NWU2YjE1YjY3Y2ZlYThhNWEzODRlZjY0YTZhYyI6MAorCitSU0FFUy1WMTUgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciBEYXRhIHRvbyBsb25nIDEKK3BrY3MxX3JzYWVzX3YxNV9lbmNyeXB0OjEwMjQ6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJiODQyOTNjZWNjODA5NTIzMmFlNTk1Yjg0YzE1ZWMyNmYzNWNmNWZkZTg4YWU3YTlhYWE3MTdiY2IxZWNjNGRlNDk4ZGE4MWRiOTc0MjUwMDA3NzA4MTdiNWRkZTVlZWQwMWNhMzc0NWZmNWFiODk0ZDBmYzA5MjFlNWExMGIwODE0OTAxMjlkOGNjYmFhMTU0YWQzZGQ0NjEzOTdhZjhlYzk2NGVmOTk0MDJkNjBhNzU5MWVlNDRiOGNlMWMxNmVmODhmY2IyNzE3MDc2YzczMGQ4ODIyMzg5M2JkZDgwMDBiMjNkODdkMzhhYiI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIwNWFiZGVkNjc1MWQ2MjBhOTUxNzdhYmRiYTkxNTAyN2I1OGRkNmVlY2Y0ZWJlNzFmNzFjNDAwYjExNWUxZDllMTI0NjVhY2U0ZGIzY2MwM2ViNTdmY2JiZmUwMTc3NzBmNDM4Y2Y4NGMxMGJhZDUwNTkxOWFlZmViZmEwNzUyMDg3ZjYzNzZiMDU1YmVhYmYwZTA4OWZiYjkwZTEwZjk5Yzc5NWQyZDU2NzZlZWExOTZkYjdmOTRhOGZkMzRhZWRhYmEzOWZiMjMwMjgxYmI5OTE3Y2M5MTc5M2ViMzdmODRkZWRiMjQyMWU5NjgwYzM5Y2ZkYTM0ZDRhMDEyMTM0IjpNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKworUlNBRVMtVjE1IERlY3J5cHRpb24gVGVzdCBWZWN0b3IgUGFkZGluZyB0b28gc2hvcnQgNyAKK3BrY3MxX3JzYWVzX3YxNV9kZWNyeXB0OjEwMjQ6MTY6ImVlY2ZhZTgxYjFiOWIzYzkwODgxMGIxMGExYjU2MDAxOTllYjlmNDRhZWY0ZmRhNDkzYjgxYTllM2Q4NGY2MzIxMjRlZjAyMzZlNWQxZTNiN2UyOGZhZTdhYTA0MGEyZDViMjUyMTc2NDU5ZDFmMzk3NTQxYmEyYTU4ZmI2NTk5IjoxNjoiYzk3ZmIxZjAyN2Y0NTNmNjM0MTIzM2VhYWFkMWQ5MzUzZjZjNDJkMDg4NjZiMWQwNWEwZjIwMzUwMjhiOWQ4Njk4NDBiNDE2NjZiNDJlOTJlYTBkYTNiNDMyMDRiNWNmY2UzMzUyNTI0ZDA0MTZhNWE0NDFlNzAwYWY0NjE1MDMiOjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiYjg0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMDVhYmRlZDY3NTFkNjIwYTk1MTc3YWJkYmE5MTUwMjdiNThkZDZlZWNmNGViZTcxZjcxYzQwMGIxMTVlMWQ5ZTEyNDY1YWNlNGRiM2NjMDNlYjU3ZmNiYmZlMDE3NzcwZjQzOGNmODRjMTBiYWQ1MDU5MTlhZWZlYmZhMDc1MjA4N2Y2Mzc2YjA1NWJlYWJmMGUwODlmYmI5MGUxMGY5OWM3OTVkMmQ1Njc2ZWVhMTk2ZGI3Zjk0YThmZDM0YWVkYWJhMzlmYjIzMDI4MWJiOTkxN2NjOTE3OTNlYjM3Zjg0ZGVkYjI0MjFlOTY4MGMzOWNmZGEzNGQ0YTAxMjEzNCI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0FFUy1WMTUgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciBEYXRhIHRvbyBsb25nIDMKK3BrY3MxX3JzYWVzX3YxNV9lbmNyeXB0OjEwMjQ6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJhYTFhYjg0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiMTBkNjBiODA0MGQ1N2Q4NzAxYmFjYjU1ZjJmMjgzZDU0NjAxZWMyNGQ0NjU2MDFhYzdmN2Q1YTJmNzVjYWMzODBiYTc4Y2E0YWI2ZjNjMTU5ZjNhOWZkNjgzOWY1YWRkZTAzMzM4NTJlYmY4NzZjNTg1NjY0YzFhNThhMWU2ODg1MjMxOTgyZjIwMjdiZTZkN2YwOGZmMTgwN2QzY2VkYThlNDFhZDFmMDJkZGY5N2E3NDU4ODMyZmQxM2ExZjQzMWRlNmE0YWI3OWUzZDRiODhiYjFkZjJjNWM3N2ZjZGU5ZTdiNWFhMWU3YmIyOTExMmVhZTU4NzYzMTI3NzUyYSI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQUVTLVYxNSBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIFBhZGRpbmcgdG9vIHNob3J0IDUgCitwa2NzMV9yc2Flc192MTVfZGVjcnlwdDoxMDI0OjE2OiJlZWNmYWU4MWIxYjliM2M5MDg4MTBiMTBhMWI1NjAwMTk5ZWI5ZjQ0YWVmNGZkYTQ5M2I4MWE5ZTNkODRmNjMyMTI0ZWYwMjM2ZTVkMWUzYjdlMjhmYWU3YWEwNDBhMmQ1YjI1MjE3NjQ1OWQxZjM5NzU0MWJhMmE1OGZiNjU5OSI6MTY6ImM5N2ZiMWYwMjdmNDUzZjYzNDEyMzNlYWFhZDFkOTM1M2Y2YzQyZDA4ODY2YjFkMDVhMGYyMDM1MDI4YjlkODY5ODQwYjQxNjY2YjQyZTkyZWEwZGEzYjQzMjA0YjVjZmNlMzM1MjUyNGQwNDE2YTVhNDQxZTcwMGFmNDYxNTAzIjoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImFhMWFiODQyOTNjZWNjODA5NTIzMmFlNTk1Yjg0YzE1ZWMyNmYzNWNmNWZkZTg4YWU3YTlhYWE3MTdiY2IxZWNjNGRlNDk4ZGE4MWRiOTc0MjUwMDA3NzA4MTdiNWRkZTVlZWQwMWNhMzc0NWZmNWFiODk0ZDBmYzA5MjFlNWExMGIwODE0OTAxMjlkOGNjYmFhMTU0YWQzZGQ0NjEzOTdhZjhlYzk2NGVmOTk0MDJkNjBhNzU5MWVlNDRiOGNlMWMxNmVmODhmY2IyNzE3MDc2YzczMGQ4ODIyMzg5M2JkZDgwMDBiMjNkODdkMzhhYiI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIxMGQ2MGI4MDQwZDU3ZDg3MDFiYWNiNTVmMmYyODNkNTQ2MDFlYzI0ZDQ2NTYwMWFjN2Y3ZDVhMmY3NWNhYzM4MGJhNzhjYTRhYjZmM2MxNTlmM2E5ZmQ2ODM5ZjVhZGRlMDMzMzg1MmViZjg3NmM1ODU2NjRjMWE1OGExZTY4ODUyMzE5ODJmMjAyN2JlNmQ3ZjA4ZmYxODA3ZDNjZWRhOGU0MWFkMWYwMmRkZjk3YTc0NTg4MzJmZDEzYTFmNDMxZGU2YTRhYjc5ZTNkNGI4OGJiMWRmMmM1Yzc3ZmNkZTllN2I1YWExZTdiYjI5MTEyZWFlNTg3NjMxMjc3NTJhIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQUVTLVYxNSBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIERhdGEgdG9vIGxvbmcgOAorcGtjczFfcnNhZXNfdjE1X2VuY3J5cHQ6MTAyNDoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImE1YTM4NGVmNjRhNmFjYjg0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiNzJmOThkMTJkZGMyMzA0ODQxNzllYzMwMjJkMTFiMzcxOTIyMmRhYWEwZGMwMTZmYzNkYmQ2NzcxYTNmMmM5ZmRkMDU2MGY4NmQ2MTZkZDUwZWYxZmE1YjhjN2UxZmM0MGI1YWJmN2I4NDVkNzc5NWIzYTZhZjAyNDU3Yjk3Zjc4MzM2MDU3NWNkZTc0OTdiZGY5YzEwNDY1MGQ0ZTlhOGY0MDM0NDA2ZGUxYWY5NWFjZTM5YmVmMmI5ZTk3OWI3NGQ5YTJjMGE3NDFkOGEyMTIyMWQ5YWZjOTg5OTI3NzZjYWQ1MmQ3MzE1MTYxM2RiYzEwZGE5YmQ4MDM4NzUxYSI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQUVTLVYxNSBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIFBhZGRpbmcgdG9vIHNob3J0IDAgCitwa2NzMV9yc2Flc192MTVfZGVjcnlwdDoxMDI0OjE2OiJlZWNmYWU4MWIxYjliM2M5MDg4MTBiMTBhMWI1NjAwMTk5ZWI5ZjQ0YWVmNGZkYTQ5M2I4MWE5ZTNkODRmNjMyMTI0ZWYwMjM2ZTVkMWUzYjdlMjhmYWU3YWEwNDBhMmQ1YjI1MjE3NjQ1OWQxZjM5NzU0MWJhMmE1OGZiNjU5OSI6MTY6ImM5N2ZiMWYwMjdmNDUzZjYzNDEyMzNlYWFhZDFkOTM1M2Y2YzQyZDA4ODY2YjFkMDVhMGYyMDM1MDI4YjlkODY5ODQwYjQxNjY2YjQyZTkyZWEwZGEzYjQzMjA0YjVjZmNlMzM1MjUyNGQwNDE2YTVhNDQxZTcwMGFmNDYxNTAzIjoxNjoiYmJmODJmMDkwNjgyY2U5YzIzMzhhYzJiOWRhODcxZjczNjhkMDdlZWQ0MTA0M2E0NDBkNmI2ZjA3NDU0ZjUxZmI4ZGZiYWFmMDM1YzAyYWI2MWVhNDhjZWViNmZjZDQ4NzZlZDUyMGQ2MGUxZWM0NjE5NzE5ZDhhNWI4YjgwN2ZhZmI4ZTBhM2RmYzczNzcyM2VlNmI0YjdkOTNhMjU4NGVlNmE2NDlkMDYwOTUzNzQ4ODM0YjI0NTQ1OTgzOTRlZTBhYWIxMmQ3YjYxYTUxZjUyN2E5YTQxZjZjMTY4N2ZlMjUzNzI5OGNhMmE4ZjU5NDZmOGU1ZmQwOTFkYmRjYiI6MTY6IjExIjpNQkVEVExTX01EX1NIQTE6ImE1YTM4NGVmNjRhNmFjYjg0MjkzY2VjYzgwOTUyMzJhZTU5NWI4NGMxNWVjMjZmMzVjZjVmZGU4OGFlN2E5YWFhNzE3YmNiMWVjYzRkZTQ5OGRhODFkYjk3NDI1MDAwNzcwODE3YjVkZGU1ZWVkMDFjYTM3NDVmZjVhYjg5NGQwZmMwOTIxZTVhMTBiMDgxNDkwMTI5ZDhjY2JhYTE1NGFkM2RkNDYxMzk3YWY4ZWM5NjRlZjk5NDAyZDYwYTc1OTFlZTQ0YjhjZTFjMTZlZjg4ZmNiMjcxNzA3NmM3MzBkODgyMjM4OTNiZGQ4MDAwYjIzZDg3ZDM4YWIiOiJhYWZkMTJmNjU5Y2FlNjM0ODliNDc5ZTUwNzZkZGVjMmYwNmNiNThmIjoiNzJmOThkMTJkZGMyMzA0ODQxNzllYzMwMjJkMTFiMzcxOTIyMmRhYWEwZGMwMTZmYzNkYmQ2NzcxYTNmMmM5ZmRkMDU2MGY4NmQ2MTZkZDUwZWYxZmE1YjhjN2UxZmM0MGI1YWJmN2I4NDVkNzc5NWIzYTZhZjAyNDU3Yjk3Zjc4MzM2MDU3NWNkZTc0OTdiZGY5YzEwNDY1MGQ0ZTlhOGY0MDM0NDA2ZGUxYWY5NWFjZTM5YmVmMmI5ZTk3OWI3NGQ5YTJjMGE3NDFkOGEyMTIyMWQ5YWZjOTg5OTI3NzZjYWQ1MmQ3MzE1MTYxM2RiYzEwZGE5YmQ4MDM4NzUxYSI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0FTU0EtVjE1IFNpZ25pbmcgVGVzdCBWZWN0b3IgSW50Citwa2NzMV9yc2Fzc2FfdjE1X3NpZ246MTAyNDoxNjoiZDE3ZjY1NWJmMjdjOGIxNmQzNTQ2MmM5MDVjYzA0YTI2ZjM3ZTJhNjdmYTljMGNlMGRjZWQ0NzIzOTRhMGRmNzQzZmU3ZjkyOWUzNzhlZmRiMzY4ZWRkZmY0NTNjZjAwN2FmNmQ5NDhlMGFkZTc1NzM3MWY4YTcxMWUyNzhmNmIiOjE2OiJjNmQ5MmI2ZmVlNzQxNGQxMzU4Y2UxNTQ2ZmI2Mjk4NzUzMGI5MGJkMTVlMGYxNDk2M2E1ZTI2MzVhZGI2OTM0N2VjMGMwMWIyYWIxNzYzZmQ4YWMxYTU5MmZiMjI3NTc0NjNhOTgyNDI1YmI5N2EzYTQzN2M1YmY4NmQwM2YyZiI6MTY6ImEyYmE0MGVlMDdlM2IyYmQyZjAyY2UyMjdmMzZhMTk1MDI0NDg2ZTQ5YzE5Y2I0MWJiYmRmYmJhOThiMjJiMGU1NzdjMmVlYWZmYTIwZDg4M2E3NmU2NWUzOTRjNjlkNGIzYzA1YTFlOGZhZGRhMjdlZGIyYTQyYmMwMDBmZTg4OGI5YjMyYzIyZDE1YWRkMGNkNzZiM2U3OTM2ZTE5OTU1YjIyMGRkMTdkNGVhOTA0YjFlYzEwMmIyZTRkZTc3NTEyMjJhYTk5MTUxMDI0YzdjYjQxY2M1ZWEyMWQwMGVlYjQxZjdjODAwODM0ZDJjNmUwNmJjZTNiY2U3ZWE5YTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg1OWVlZjJmZDc4YWNhMDAzMDhiZGM0NzExOTNiZjU1YmY5ZDc4ZGI4ZjhhNjcyYjQ4NDYzNGYzYzljMjZlNjQ3OGFlMTAyNjBmZTBkZDhjMDgyZTUzYTUyOTNhZjIxNzNjZDUwYzZkNWQzNTRmZWJmNzhiMjYwMjFjMjVjMDI3MTJlNzhjZDQ2OTRjOWY0Njk3NzdlNDUxZTdmOGU5ZTA0Y2QzNzM5YzZiYmZlZGFlNDg3ZmI1NTY0NGU5Y2E3NGZmNzdhNTNjYjcyOTgwMmY2ZWQ0YTVmZmE4YmExNTk4OTBmYyI6ImUzYjVkNWQwMDJjMWJjZTUwYzJiNjVlZjg4YTE4OGQ4M2JjZTdlNjEiOiIyMTU0ZjkyODYxNWU1MTAxZmNkZWI1N2JjMDhmYzJmMzVjM2Q1OTk2NDAzODYxYWUzZWZiMWQwNzEyZjhiYjA1Y2MyMWY3ZjVmMTFmNjJlNWI2ZWE5ZjBmMmI2MjE4MGU1Y2JlN2JhNTM1MDMyZDZhYzgwNjhmZmY3ZjM2MmY3M2QyYzNiZjVlY2E2MDYyYTE3MjNkN2NmZDVhYmI2ZGNmN2U0MDVmMmRjNTYwZmZlNmZjMzdkMzhiZWU0ZGM5ZTI0ZmUyYmVjZTNlM2I0YTNmMDMyNzAxZDNmMDk0N2I0MjkzMDA4M2RkNGFkMjQxYjMzMDliNTE0NTk1NDgyZDQyIjowCisKK1JTQVNTQS1WMTUgVmVyaWZpY2F0aW9uIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhc3NhX3YxNV92ZXJpZnk6MTAyNDoxNjoiYTJiYTQwZWUwN2UzYjJiZDJmMDJjZTIyN2YzNmExOTUwMjQ0ODZlNDljMTljYjQxYmJiZGZiYmE5OGIyMmIwZTU3N2MyZWVhZmZhMjBkODgzYTc2ZTY1ZTM5NGM2OWQ0YjNjMDVhMWU4ZmFkZGEyN2VkYjJhNDJiYzAwMGZlODg4YjliMzJjMjJkMTVhZGQwY2Q3NmIzZTc5MzZlMTk5NTViMjIwZGQxN2Q0ZWE5MDRiMWVjMTAyYjJlNGRlNzc1MTIyMmFhOTkxNTEwMjRjN2NiNDFjYzVlYTIxZDAwZWViNDFmN2M4MDA4MzRkMmM2ZTA2YmNlM2JjZTdlYTlhNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODU5ZWVmMmZkNzhhY2EwMDMwOGJkYzQ3MTE5M2JmNTViZjlkNzhkYjhmOGE2NzJiNDg0NjM0ZjNjOWMyNmU2NDc4YWUxMDI2MGZlMGRkOGMwODJlNTNhNTI5M2FmMjE3M2NkNTBjNmQ1ZDM1NGZlYmY3OGIyNjAyMWMyNWMwMjcxMmU3OGNkNDY5NGM5ZjQ2OTc3N2U0NTFlN2Y4ZTllMDRjZDM3MzljNmJiZmVkYWU0ODdmYjU1NjQ0ZTljYTc0ZmY3N2E1M2NiNzI5ODAyZjZlZDRhNWZmYThiYTE1OTg5MGZjIjoiZTNiNWQ1ZDAwMmMxYmNlNTBjMmI2NWVmODhhMTg4ZDgzYmNlN2U2MSI6IjIxNTRmOTI4NjE1ZTUxMDFmY2RlYjU3YmMwOGZjMmYzNWMzZDU5OTY0MDM4NjFhZTNlZmIxZDA3MTJmOGJiMDVjYzIxZjdmNWYxMWY2MmU1YjZlYTlmMGYyYjYyMTgwZTVjYmU3YmE1MzUwMzJkNmFjODA2OGZmZjdmMzYyZjczZDJjM2JmNWVjYTYwNjJhMTcyM2Q3Y2ZkNWFiYjZkY2Y3ZTQwNWYyZGM1NjBmZmU2ZmMzN2QzOGJlZTRkYzllMjRmZTJiZWNlM2UzYjRhM2YwMzI3MDFkM2YwOTQ3YjQyOTMwMDgzZGQ0YWQyNDFiMzMwOWI1MTQ1OTU0ODJkNDIiOjAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MTUuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjEwIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrY3MxX3JzYWVzX3YxNV9lbmNyeXB0KCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRSwgaW50IGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBjaGFyICpzZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJuZF9idWZbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IG1zZ19sZW47CisgICAgcm5kX2J1Zl9pbmZvIGluZm87CisKKyAgICBpbmZvLmxlbmd0aCA9IHVuaGV4aWZ5KCBybmRfYnVmLCBzZWVkICk7CisgICAgaW5mby5idWYgPSBybmRfYnVmOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIGhhc2ggKTsKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4ICsgKCAoIG1vZCAlIDggKSA/IDEgOiAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdCggJmN0eCwgJnJuZF9idWZmZXJfcmFuZCwgJmluZm8sIE1CRURUTFNfUlNBX1BVQkxJQywgbXNnX2xlbiwgbWVzc2FnZV9zdHIsIG91dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Flc192MTVfZGVjcnlwdCggaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1EsIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoYXNoLCBjaGFyICpyZXN1bHRfaGV4X3N0ciwgY2hhciAqc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBzaXplX3Qgb3V0cHV0X2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgKCh2b2lkKSBzZWVkKTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgaGFzaCApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4ICsgKCAoIG1vZCAlIDggKSA/IDEgOiAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LlAsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LkQgLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUCwgJmN0eC5ELCAmUDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFEsICZjdHguRCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LlFQLCAmY3R4LlEsICZjdHguUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0KCAmY3R4LCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sIE1CRURUTFNfUlNBX1BSSVZBVEUsICZvdXRwdXRfbGVuLCBtZXNzYWdlX3N0ciwgb3V0cHV0LCAxMDAwICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cm5jYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciwgc3RybGVuKCByZXN1bHRfaGV4X3N0ciApICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Fzc2FfdjE1X3NpZ24oIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLCBpbnQgcmFkaXhfUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9RLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwgaW50IGRpZ2VzdCwgaW50IGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBjaGFyICpzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcm5kX2J1ZlsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBtYmVkdGxzX21waSBQMSwgUTEsIEgsIEc7CisgICAgc2l6ZV90IG1zZ19sZW47CisgICAgcm5kX2J1Zl9pbmZvIGluZm87CisKKyAgICBpbmZvLmxlbmd0aCA9IHVuaGV4aWZ5KCBybmRfYnVmLCBzYWx0ICk7CisgICAgaW5mby5idWYgPSBybmRfYnVmOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlAxICk7IG1iZWR0bHNfbXBpX2luaXQoICZRMSApOyBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjE1LCBoYXNoICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RLCByYWRpeF9RLCBpbnB1dF9RICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJmN0eC5QLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHguUSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5EICwgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFAsICZjdHguRCwgJlAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRRLCAmY3R4LkQsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5RUCwgJmN0eC5RLCAmY3R4LlAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgaWYoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApICE9IE5VTEwgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICksIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9zaWduKCAmY3R4LCAmcm5kX2J1ZmZlcl9yYW5kLCAmaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwgZGlnZXN0LCAwLCBoYXNoX3Jlc3VsdCwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrY3MxX3JzYXNzYV92MTVfdmVyaWZ5KCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9FLCBpbnQgZGlnZXN0LCBpbnQgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgY2hhciAqc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBtc2dfbGVuOworICAgICgodm9pZCkgc2FsdCk7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgaGFzaCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCByZXN1bHRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCByZXN1bHRfc3RyLCByZXN1bHRfaGV4X3N0ciApOworCisgICAgaWYoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApICE9IE5VTEwgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZCggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICksIG1lc3NhZ2Vfc3RyLCBtc2dfbGVuLCBoYXNoX3Jlc3VsdCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoICZjdHgsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywgZGlnZXN0LCAwLCBoYXNoX3Jlc3VsdCwgcmVzdWx0X3N0ciApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxNmJlYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MjEuZGF0YQpAQCAtMCwwICsxLDc4OSBAQAorUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIEludAorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjQ6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OSI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIxMjUzZTA0ZGMwYTUzOTdiYjQ0YTdhYjg3ZTliZjJhMDM5YTMzZDFlOTk2ZmM4MmE5NGNjZDMwMDc0Yzk1ZGY3NjM3MjIwMTcwNjllNTI2OGRhNWQxYzBiNGY4NzJjZjY1M2MxMWRmODIzMTRhNjc5NjhkZmVhZTI4ZGVmMDRiYjZkODRiMWMzMWQ2NTRhMTk3MGU1NzgzYmQ2ZWI5NmEwMjRjMmNhMmY0YTkwZmU5ZjJlZjVjOWMxNDBlNWJiNDhkYTk1MzZhZDg3MDBjODRmYzkxMzBhZGVhNzRlNTU4ZDUxYTc0ZGRmODVkOGI1MGRlOTY4MzhkNjA2M2UwOTU1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciBEYXRhIGp1c3QgZml0cworcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjQ6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjMwODJmMjI4OGZmZjI3NTIxM2Q1MzE2OGYwYTI3MjU3M2NmZjgxODM3YzI0OWRjMWYzODBhMTJhYzEyNGM4ZjIxN2I3MDA3MDhhMWNlN2RjZTE1NDI2NWYzMWExMjZlYmRkOWVkM2VmOTE0NWFlMjkxMjRhMjVmNGU2NWFhNTJjNWE5ZmYzNGY2Y2Y0ZGU5YmE5MzdhZTQwNmRjN2QxZjI3N2FmNGY2ZmI3ZWE3M2JmYmFiMmJkMzk3YjZiMmM1MzU3MGUxNzNmZmNmM2I5ZjBiYjk2ODM3NjIzYTRmODdiZDgxYjQxNDQ2YzU5ZTY4MWEyZjNkYTgxMjM5ZTliZGYiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIERhdGEgdG9vIGxvbmcKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJiYmY4MmYwOTA2ODJjZTljMjMzOGFjMmI5ZGE4NzFmNzM2OGQwN2VlZDQxMDQzYTQ0MGQ2YjZmMDc0NTRmNTFmYjhkZmJhYWYwMzVjMDJhYjYxZWE0OGNlZWI2ZmNkNDg3NmVkNTIwZDYwZTFlYzQ2MTk3MTlkOGE1YjhiODA3ZmFmYjhlMGEzZGZjNzM3NzIzZWU2YjRiN2Q5M2EyNTg0ZWU2YTY0OWQwNjA5NTM3NDg4MzRiMjQ1NDU5ODM5NGVlMGFhYjEyZDdiNjFhNTFmNTI3YTlhNDFmNmMxNjg3ZmUyNTM3Mjk4Y2EyYThmNTk0NmY4ZTVmZDA5MWRiZGNiIjoxNjoiMTEiOk1CRURUTFNfTURfU0hBMToiZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDAwIjoiYWFmZDEyZjY1OWNhZTYzNDg5YjQ3OWU1MDc2ZGRlYzJmMDZjYjU4ZiI6IjEyNTNlMDRkYzBhNTM5N2JiNDRhN2FiODdlOWJmMmEwMzlhMzNkMWU5OTZmYzgyYTk0Y2NkMzAwNzRjOTVkZjc2MzcyMjAxNzA2OWU1MjY4ZGE1ZDFjMGI0Zjg3MmNmNjUzYzExZGY4MjMxNGE2Nzk2OGRmZWFlMjhkZWYwNGJiNmQ4NGIxYzMxZDY1NGExOTcwZTU3ODNiZDZlYjk2YTAyNGMyY2EyZjRhOTBmZTlmMmVmNWM5YzE0MGU1YmI0OGRhOTUzNmFkODcwMGM4NGZjOTEzMGFkZWE3NGU1NThkNTFhNzRkZGY4NWQ4YjUwZGU5NjgzOGQ2MDYzZTA5NTUiOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMV8xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNDoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI2NjI4MTk0ZTEyMDczZGIwM2JhOTRjZGE5ZWY5NTMyMzk3ZDUwZGJhNzliOTg3MDA0YWZlZmUzNCI6IjE4Yjc3NmVhMjEwNjlkNjk3NzZhMzNlOTZiYWQ0OGUxZGRhMGE1ZWYiOiIzNTRmZTY3YjRhMTI2ZDVkMzVmZTM2Yzc3Nzc5MWEzZjdiYTEzZGVmNDg0ZTJkMzkwOGFmZjcyMmZhZDQ2OGZiMjE2OTZkZTk1ZDBiZTkxMWMyZDMxNzRmOGFmY2MyMDEwMzVmN2I2ZDhlNjk0MDJkZTU0NTE2MThjMjFhNTM1ZmE5ZDdiZmM1YjhkZDlmYzI0M2Y4Y2Y5MjdkYjMxMzIyZDZlODgxZWFhOTFhOTk2MTcwZTY1N2EwNWEyNjY0MjZkOThjODgwMDNmODQ3N2MxMjI3MDk0YTBkOWZhMWU4YzQwMjQzMDljZTFlY2NjYjUyMTAwMzVkNDdhYzcyZThhIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAxXzIKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MmY2MmFlODMzYzQwYmYyNTg0MmU5ODRiYjc4YmRiZjk3YzAxMDdkNTViZGI2NjJmNWM0ZTBmYWI5ODQ1Y2I1MTQ4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6Ijc1MGM0MDQ3ZjU0N2U4ZTQxNDExODU2NTIzMjk4YWM5YmFlMjQ1ZWZhZjEzOTdmYmU1NmY5ZGQ1IjoiMGNjNzQyY2U0YTliN2YzMmY5NTFiY2IyNTFlZmQ5MjVmZTRmZTM1ZiI6IjY0MGRiMWFjYzU4ZTA1NjhmZTU0MDdlNWY5YjcwMWRmZjhjM2M5MWU3MTZjNTM2ZmM3ZmNlYzZjYjViNzFjMTE2NTk4OGQ0YTI3OWUxNTc3ZDczMGZjN2EyOTkzMmUzZjAwYzgxNTE1MjM2ZDhkOGUzMTAxN2E3YTA5ZGY0MzUyZDkwNGNkZWI3OWFhNTgzYWRjYzMxZWE2OThhNGMwNTI4M2RhYmE5MDg5YmU1NDkxZjY3YzFhNGVlNDhkYzc0YmJiZTY2NDNhZWY4NDY2NzliNGNiMzk1YTM1MmQ1ZWQxMTU5MTJkZjY5NmZmZTA3MDI5MzI5NDZkNzE0OTJiNDQiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDFfMworcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjQ6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDk0YWUwODMyZTY0NDVjZTQyMzMxY2IwNmQ1MzFhODJiMWRiNGJhYWQzMGY3NDZkYzkxNmRmMjRkNGUzYzI0NTFmZmY1OWE2NDIzZWIwZTFkMDJkNGZlNjQ2Y2Y2OTlkZmQ4MThjNmU5N2IwNTEiOiIyNTE0ZGY0Njk1NzU1YTY3YjI4OGVhZjQ5MDVjMzZlZWM2NmZkMmZkIjoiNDIzNzM2ZWQwMzVmNjAyNmFmMjc2YzM1YzBiMzc0MWIzNjVlNWY3NmNhMDkxYjRlOGMyOWUyZjBiZWZlZTYwMzU5NWFhODMyMmQ2MDJkMmU2MjVlOTVlYjgxYjJmMWM5NzI0ZTgyMmVjYTc2ZGI4NjE4Y2YwOWM1MzQzNTAzYTQzNjA4MzViNTkwM2JjNjM3ZTM4NzlmYjA1ZTBlZjMyNjg1ZDVhZWM1MDY3Y2Q3Y2M5NmZlNGIyNjcwYjZlYWMzMDY2YjFmY2Y1Njg2YjY4NTg5YWFmYjdkNjI5YjAyZDhmODYyNWNhMzgzMzYyNGQ0ODAwZmIwODFiMWNmOTRlYiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMV80Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNDoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1MmU2NTBkOThlN2YyYTA0OGI0Zjg2ODUyMTUzYjk3ZTAxZGQzMTZmMzQ2YTE5ZjY3YTg1IjoiYzQ0MzVhM2UxYTE4YTY4YjY4MjA0MzYyOTBhMzdjZWZiODVkYjNmYiI6IjQ1ZWFkNGNhNTUxZTY2MmM5ODAwZjFhY2E4MjgzYjA1MjVlNmFiYWUzMGJlNGI0YWJhNzYyZmE0MGZkM2QzOGUyMmFiZWZjNjk3OTRmNmViYmJjMDVkZGJiMTEyMTYyNDdkMmY0MTJmZDBmYmE4N2M2ZTNhY2Q4ODg4MTM2NDZmZDBlNDhlNzg1MjA0ZjljM2Y3M2Q2ZDgyMzk1NjI3MjJkZGRkODc3MWZlYzQ4YjgzYTMxZWU2ZjU5MmM0Y2ZkNGJjODgxNzRmM2IxM2ExMTJhYWUzYjlmN2I4MGUwZmM2ZjcyNTViYTg4MGRjN2Q4MDIxZTIyYWQ2YTg1ZjA3NTUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDFfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjQ6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiOGRhODlmZDllNWY5NzRhMjlmZWZmYjQ2MmI0OTE4MGY2Y2Y5ZTgwMiI6ImIzMThjNDJkZjNiZTBmODNmZWE4MjNmNWE3YjQ3ZWQ1ZTQyNWEzYjUiOiIzNmY2ZTM0ZDk0YThkMzRkYWFjYmEzM2EyMTM5ZDAwYWQ4NWE5MzQ1YTg2MDUxZTczMDcxNjIwMDU2YjkyMGUyMTkwMDU4NTVhMjEzYTBmMjM4OTdjZGNkNzMxYjQ1MjU3Yzc3N2ZlOTA4MjAyYmVmZGQwYjU4Mzg2YjEyNDRlYTBjZjUzOWEwNWQ1ZDEwMzI5ZGE0NGUxMzAzMGZkNzYwZGNkNjQ0Y2ZlZjIwOTRkMTkxMGQzZjQzM2UxYzdjNmRkMThiYzFmMmRmN2Y2NDNkNjYyZmI5ZGQzN2VhZDkwNTkxOTBmNGZhNjZjYTM5ZTg2OWM0ZWI0NDljYmRjNDM5IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAxXzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI0OjE2OiJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MmY2MmFlODMzYzQwYmYyNTg0MmU5ODRiYjc4YmRiZjk3YzAxMDdkNTViZGI2NjJmNWM0ZTBmYWI5ODQ1Y2I1MTQ4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjI2NTIxMDUwODQ0MjcxIjoiZTRlYzA5ODJjMjMzNmYzYTY3N2Y2YTM1NjE3NGViMGNlODg3YWJjMiI6IjQyY2VlMjYxN2IxZWNlYTRkYjNmNDgyOTM4NmZiZDYxZGFmYmYwMzhlMTgwZDgzN2M5NjM2NmRmMjRjMDk3YjRhYjBmYWM2YmRmNTkwZDgyMWM5ZjEwNjQyZTY4MWFkMDViOGQ3OGIzNzhjMGY0NmNlMmZhZDYzZjc0ZTBhZDNkZjA2YjA3NWQ3ZWI1ZjU2MzZmOGQ0MDNiOTA1OWNhNzYxYjVjNjJiYjUyYWE0NTAwMmVhNzBiYWFjZTA4ZGVkMjQzYjlkOGNiZDYyYTY4YWRlMjY1ODMyYjU2NTY0ZTQzYTZmYTQyZWQxOTlhMDk5NzY5NzQyZGYxNTM5ZTgyNTUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfMQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjU6MTY6IjAxOTQ3YzdmY2U5MDQyNWY0NzI3OWU3MDg1MWYyNWQ1ZTYyMzE2ZmU4YTFkZjE5MzcxZTNlNjI4ZTI2MDU0M2U0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkMGE2N2YxNGIxNjk0YzVmMDM3OTQ1MWE0M2U0OWEzMmRkZTgzNjcwYjczZGE5MWExYzk5YmMyM2I0MzZhNjAwNTVjNjEwZjBiYWY5OWMxYTA3OTU2NWI5NWEzZjE1MjY2MzJkMWQ0ZGE2MGYyMGVkYTI1ZTY1M2M0ZjAwMjc2NmY0NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4ZmYwMGNhYTYwNWM3MDI4MzA2MzRkOWE2YzNkNDJjNjUyYjU4Y2YxZDkyZmVjNTcwYmVlZTciOiI4YzQwN2I1ZWMyODk5ZTUwOTljNTNlOGNlNzkzYmY5NGU3MWIxNzgyIjoiMDE4MWFmODkyMmI5ZmNiNGQ3OWQ5MmViZTE5ODE1OTkyZmMwYzE0MzlkOGJjZDQ5MTM5OGEwZjRhZDNhMzI5YTViZDkzODU1NjBkYjUzMjY4M2M4YjdkYTA0ZTRiMTJhZWQ2YWFjZGY0NzFjMzRjOWNkYTg5MWFkZGNjMmRmMzQ1NjY1M2FhNjM4MmU5YWU1OWI1NDQ1NTI1N2ViMDk5ZDU2MmJiZTEwNDUzZjJiNmQxM2M1OWMwMmUxMGYxZjhhYmI1ZGEwZDA1NzA5MzJkYWNmMmQwOTAxZGI3MjlkMGZlZmNjMDU0ZTcwOTY4ZWE1NDBjODFiMDRiY2FlZmU3MjBlIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAyXzIKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI1OjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMmQiOiJiNjAwY2YzYzJlNTA2ZDdmMTY3NzhjOTEwZDNhOGIwMDNlZWU2MWQ1IjoiMDE4NzU5ZmYxZGY2M2IyNzkyNDEwNTYyMzE0NDE2YThhZWFmMmFjNjM0YjQ2Zjk0MGFiODJkNjRkYmYxNjVlZWUzMzAxMWRhNzQ5ZDRiYWI2ZTJmY2QxODEyOWM5ZTQ5Mjc3ZDg0NTMxMTJiNDI5YTIyMmE4NDcxYjA3MDk5Mzk5OGU3NTg4NjFjNGQzZjZkNzQ5ZDkxYzQyOTBkMzMyYzdhNGFiM2Y3ZWEzNWZmM2EwN2Q0OTdjOTU1ZmYwZmZjOTUwMDZiNjJjNmQyOTY4MTBkOWJmYWIwMjQxOTZjNzkzNDAxMmMyZGY5NzhlZjI5OWFiYTIzOTk0MGNiYTEwMjQ1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBUZXN0IFZlY3RvciAyXzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI1OjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNzRmYzg4YzUxYmM5MGY3N2FmOWQ1ZTlhNGE3MDEzM2Q0YjRlMGIzNGRhM2MzN2M3ZWY4ZSI6ImE3Mzc2OGFlZWFhOTFmOWQ4YzFlZDZmOWQyYjYzNDY3ZjA3Y2NhZTMiOiIwMTg4MDJiYWIwNGM2MDMyNWU4MWM0OTYyMzExZjJiZTdjMmFkY2U5MzA0MWEwMDcxOWM4OGY5NTc1NzVmMmM3OWYxYjdiYzhjZWQxMTVjNzA2YjMxMWMwOGEyZDk4NmNhM2I2YTkzMzZiMTQ3YzI5YzZmMjI5NDA5ZGRlYzY1MWJkMWZkZDVhMGI3ZjYxMGM5OTM3ZmRiNGEzYTc2MjM2NGI4YjMyMDZiNGVhNDg1ZmQwOThkMDhmNjNkNGFhOGJiMjY5N2QwMjdiNzUwYzMyZDdmNzRlYWY1MTgwZDJlOWI2NmIxN2NiMmZhNTU1MjNiYzI4MGRhMTBkMTRiZTIwNTMiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfNAorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjU6MTY6IjAxOTQ3YzdmY2U5MDQyNWY0NzI3OWU3MDg1MWYyNWQ1ZTYyMzE2ZmU4YTFkZjE5MzcxZTNlNjI4ZTI2MDU0M2U0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkMGE2N2YxNGIxNjk0YzVmMDM3OTQ1MWE0M2U0OWEzMmRkZTgzNjcwYjczZGE5MWExYzk5YmMyM2I0MzZhNjAwNTVjNjEwZjBiYWY5OWMxYTA3OTU2NWI5NWEzZjE1MjY2MzJkMWQ0ZGE2MGYyMGVkYTI1ZTY1M2M0ZjAwMjc2NmY0NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJhN2ViMmE1MDM2OTMxZDI3ZDRlODkxMzI2ZDk5NjkyZmZhZGRhOWJmN2VmZDNlMzRlNjIyYzRhZGMwODVmNzIxZGZlODg1MDcyYzc4YTIwM2IxNTE3MzliZTU0MGZhOGMxNTNhMTBmMDBhIjoiOWE3YjNiMGU3MDhiZDk2ZjgxOTBlY2FiNGZiOWIyYjM4MDVhODE1NiI6IjAwYTQ1NzhjYmMxNzYzMThhNjM4ZmJhN2QwMWRmMTU3NDZhZjQ0ZDRmNmNkOTZkN2U3YzQ5NWNiZjQyNWIwOWM2NDlkMzJiZjg4NmRhNDhmYmFmOTg5YTIxMTcxODdjYWZiMWZiNTgwMzE3NjkwZTNjY2Q0NDY5MjBiN2FmODJiMzFkYjU4MDRkODdkMDE1MTRhY2JmYTkxNTZlNzgyZjg2N2Y2YmVkOTQ0OWUwZTlhMmMwOWJjZWNjNmFhMDg3NjM2OTY1ZTM0YjNlYzc2NmYyZmUyZTQzMDE4YTJmZGRlYjE0MDYxNmEwZTlkODJlNTMzMTAyNGVlMDY1MmZjNzY0MSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMl81Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNToxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjJlZjJiMDY2Zjg1NGMzM2YzYmRjYmI1OTk0YTQzNWU3M2Q2YzZjIjoiZWIzY2ViYmM0YWRjMTZiYjQ4ZTg4YzhhZWMwZTM0YWY3ZjQyN2ZkMyI6IjAwZWJjNWY1ZmRhNzdjZmRhZDNjODM2NDFhOTAyNWU3N2Q3MmQ4YTZmYjMzYTgxMGY1OTUwZjhkNzRjNzNlOGQ5MzFlODYzNGQ4NmFiMTI0NjI1NmFlMDdiNjAwNWI3MWI3ZjJmYjk4MzUxMjE4MzMxY2U2OWI4ZmZiZGM5ZGEwOGJiYzljNzA0Zjg3NmRlYjlkZjlmYzJlYzA2NWNhZDg3ZjkwOTBiMDdhY2MxN2FhN2Y5OTdiMjdhY2E0ODgwNmU4OTdmNzcxZDk1MTQxZmU0NTI2ZDhhNTMwMWI2Nzg2MjdlZmFiNzA3ZmQ0MGZiZWJkNmU3OTJhMjU2MTNlN2FlYyI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gVGVzdCBWZWN0b3IgMl82Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNToxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhhN2ZiMzQ0YzhiNmNiMmNmMmVmMWY2NDNmOWEzMjE4ZjZlMTliYmE4OWMwIjoiNGM0NWNmNGQ1N2M5OGUzZDZkMjA5NWFkYzUxYzQ4OWViNTBkZmY4NCI6IjAxMDgzOWVjMjBjMjdiOTA1MmU1NWJlZmI5Yjc3ZTZmYzI2ZTkwNzVkN2E1NDM3OGM2NDZhYmRmNTFlNDQ1YmQ1NzE1ZGU4MTc4OWY1NmYxODAzZDkxNzA3NjRhOWU5M2NiNzg3OTg2OTQwMjNlZTczOTNjZTA0YmM1ZDhmOGM1YTUyYzE3MWQ0MzgzN2UzYWNhNjJmNjA5ZWIwYWE1ZmZiMDk2MGVmMDQxOThkZDc1NGY1N2Y3ZmJlNmFiZjc2NWNmMTE4YjRjYTQ0M2IyM2I1YWFiMjY2Zjk1MjMyNmFjNDU4MTEwMDY0NDMyNWY4YjcyMWFjZDVkMDRmZjE0ZWYzYSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAzXzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI2OjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMDg3ODIwYjU2OWU4ZmE4ZCI6IjhjZWQ2YjE5NjI5MDgwNTc5MGU5MDkwNzQwMTVlNmEyMGIwYzQ4OTQiOiIwMjZhMDQ4NWQ5NmFlYmQ5NmI0MzgyMDg1MDk5Yjk2MmU2YTJiZGVjM2Q5MGM4ZGI2MjVlMTQzNzJkZTg1ZTJkNWI3YmFhYjY1YzhmYWY5MWJiNTUwNGZiNDk1YWZjZTVjOTg4YjNmNmE1MmUyMGUxZDZjYmQzNTY2YzVjZDFmMmI4MzE4YmI1NDJjYzBlYTI1YzRhYWI5OTMyYWZhMjA3NjBlYWRkZWM3ODQzOTZhMDdlYTBlZjI0ZDRlNmY0ZDM3ZTUwNTJhN2EzMWUxNDZhYTQ4MGExMTFiYmU5MjY0MDEzMDdlMDBmNDEwMDMzODQyYjZkODJmZTVjZTRkZmFlODAiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgM18yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjQ2NTNhY2FmMTcxOTYwYjAxZjUyYTdiZTYzYTNhYjIxZGMzNjhlYzQzYjUwZDgyZWMzNzgxZTA0IjoiYjQyOTFkNjU2NzU1MDg0OGNjMTU2OTY3YzgwOWJhYWI2Y2E1MDdmMCI6IjAyNGRiODljNzgwMjk4OWJlMDc4Mzg0Nzg2MzA4NDk0MWJmMjA5ZDc2MTk4N2UzOGY5N2NiNWY2ZjFiYzg4ZGE3MmE1MGI3M2ViYWYxMWM4NzljNGY5NWRmMzdiODUwYjhmNjVkNzYyMmUyNWIxYjg4OWU4MGZlODBiYWNhMjA2OWQ2ZTBlMWQ4Mjk5NTNmYzQ1OTA2OWRlOThlYTk3OThiNDUxZTU1N2U5OWFiZjhmZTNkOWNjZjkwOTZlYmJmM2U1MjU1ZDNiNGUxYzZkMmVjYWRmMDY3YTM1OWVlYTg2NDA1YWNkNDdkNWUxNjU1MTdjY2FmZDQ3ZDZkYmVlNGJmNSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAzXzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI2OjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDk0Y2QwZTA4ZmE0MDRlZDg5IjoiY2U4OTI4ZjYwNTk1NTgyNTQwMDhiYWRkOTc5NGZhZGNkMmZkMWY2NSI6IjAyMzliY2U2ODEwMzI0NDE1Mjg4NzdkNmQxYzhiYjI4YWEzYmM5N2YxZGY1ODQ1NjM2MTg5OTU3OTc2ODM4NDRjYTg2NjY0NzMyZjRiZWQ3YTBhYWIwODNhYWFiZmI3MjM4ZjU4MmUzMDk1OGMyMDI0ZTQ0ZTU3MDQzYjk3OTUwZmQ1NDNkYTk3N2M5MGNkZGU1MzM3ZDYxODQ0MmY5OWU2MGQ3NzgzYWI1OWNlNmRkOWQ2OWM0N2FkMWU5NjJiZWMyMmQwNTg5NWNmZjhkM2Y2NGVkNTI2MWQ5MmIyNjc4NTEwMzkzNDg0OTkwYmEzZjdmMDY4MThhZTZmZmNlOGEzYSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAzXzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI2OjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNmNjNjQxYjZiNjFlNmY5NjM5NzRkYWQyM2E5MDEzMjg0ZWYxIjoiNmUyOTc5ZjUyZDY4MTRhNTdkODNiMDkwMDU0ODg4ZjExOWE1YjlhMyI6IjAyOTk0YzYyYWZkNzZmNDk4YmExZmQyY2Y2NDI4NTdmY2E4MWY0MzczY2IwOGYxY2JhZWU2ZjAyNWMzYjUxMmI0MmMzZTg3NzkxMTM0NzY2NDgwMzlkYmUwNDkzZjkyNDYyOTJmYWMyODk1MDYwMGU3YzBmMzJlZGY5YzgxYjlkZWM0NWMzYmRlMGNjOGQ4ODQ3NTkwMTY5OTA3YjdkYzU5OTFjZWIyOWJiMDcxNGQ2MTNkOTZkZjBmMTJlYzVkOGQzNTA3YzhlZTdhZTc4ZGQ4M2YyMTZmYTYxZGUxMDAzNjNhY2E0OGE3ZTkxNGFlOWY0MmRkZmJlOTQzYjA5ZDlhMCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAzXzUKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI2OjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZGY1MTUxODMyYjYxZjRmMjU4OTFmYjQxNzJmMzI4ZDJlZGRmODM3MWZmY2ZkYmU5OTc5MzkyOTVmMzBlY2E2OTE4MDE3Y2ZkYTExNTNiZjdhNmFmODc1OTMyMjMiOiIyZDc2MGJmZTM4YzU5ZGUzNGNkYzhiOGM3OGEzOGU2NjI4NGEyZDI3IjoiMDE2MjA0MmZmNjk2OTU5MmE2MTY3MDMxODExYTIzOTgzNGNlNjM4YWJmNTRmZWM4Yjk5NDc4MTIyYWZlMmVlNjdmOGM1YjE4YjAzMzk4MDViZmRiYzVhNGU2NzIwYjM3YzU5Y2ZiYTk0MjQ2NGM1OTdmZjUzMmExMTk4MjE1NDVmZDJlNTliMTE0ZTYxZGFmNzE4MjA1MjlmNTAyOWNmNTI0OTU0MzI3YzM0ZWM1ZTZmNWJhN2VmY2M0ZGU5NDNhYjhhZDRlZDc4N2IxNDU0MzI5ZjcwZGI3OThhM2E4ZjRkOTJmODI3NGUyYjI5NDhhZGU2MjdjZThlZTMzZTQzYzYwIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDNfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjY6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIzYzNiYWQ4OTNjNTQ0YTZkNTIwYWIwMjIzMTkxODhjOGQ1MDRiN2E3ODhiODUwOTAzYjg1OTcyZWFhMTg1NTJlMTEzNGE3YWQ2MDk4ODI2MjU0ZmY3YWI2NzJiM2Q4ZWIzMTU4ZmFjNmQ0Y2JhZWYxIjoiZjE3NDc3OWM1ZmQzY2ZlMDA3YmFkY2I3YTM2YzliNTViZmNmYmYwZSI6IjAwMTEyMDUxZTc1ZDA2NDk0M2JjNDQ3ODA3NWU0MzQ4MmZkNTljZWUwNjc5ZGU2ODkzZWVjM2E5NDNkYWE0OTBiOTY5MWM5M2RmYzA0NjRiNjYyM2I5ZjNkYmQzZTcwMDgzMjY0ZjAzNGIzNzRmNzQxNjRlMWEwMDc2MzcyNWU1NzQ3NDRiYTBiOWRiODM0MzRmMzFkZjk2ZjZlMmEyNmY2ZDhlYmEzNDhiZDQ2ODZjMjIzOGFjMDdjMzdhYWMzNzg1ZDFjN2VlYTJmODE5ZmQ5MTQ5MTc5OGVkOGU5Y2VmNWU0M2I3ODFiMGUwMjc2ZTM3YzQzZmY5NDkyZDAwNTczMCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA0XzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI3OjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNGE4NjYwOTUzNGVlNDM0YTZjYmNhM2Y3ZTk2MmU3NmQ0NTVlMzI2NGMxOWY2MDVmNmU1ZmY2MTM3YzY1YzU2ZDdmYjM0NGNkNTJiYzkzMzc0ZjNkMTY2YzlmMGM2ZjljNTA2YmFkMTkzMzA5NzJkMiI6IjFjYWMxOWNlOTkzZGVmNTVmOTgyMDNmNjg1Mjg5NmM5NWNjY2ExZjMiOiIwNGNjZTE5NjE0ODQ1ZTA5NDE1MmEzZmUxOGU1NGUzMzMwYzQ0ZTVlZmJjNjRhZTE2ODg2Y2IxODY5MDE0Y2M1NzgxYjFmOGY5ZTA0NTM4NGQwMTEyYTEzNWNhMGQxMmU5Yzg4YThlNDA2MzQxNmRlYWFlMzg0NGY2MGQ2ZTk2ZmUxNTUxNDVmNDUyNWI5YTM0NDMxY2EzNzY2MTgwZjcwZTE1YTVlNWQ4ZThiMWE1MTZmZjg3MDYwOWYxM2Y4OTY5MzVjZWQxODgyNzlhNThlZDEzZDA3MTE0Mjc3ZDc1YzY1Njg2MDdlMGFiMDkyZmQ4MDNhMjIzZTRhOGVlMGIxYTgiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNF8yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNzoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImIwYWRjNGYzZmUxMWRhNTljZTk5Mjc3M2Q5MDU5OTQzYzAzMDQ2NDk3ZWU5ZDlmOWEwNmRmMTE2NmRiNDZkOThmNThkMjdlYzA3NGMwMmVlZTZjYmUyNDQ5YzhiOWZjNTA4MGM1YzNmNDQzMzA5MjUxMmVjNDZhYTc5Mzc0M2M4IjoiZjU0NWQ1ODk3NTg1ZTNkYjcxYWEwY2I4ZGE3NmM1MWQwMzJhZTk2MyI6IjAwOTdiNjk4YzYxNjU2NDViMzAzNDg2ZmJmNWEyYTQ0NzljMGVlODU4ODliNTQxYTZmMGI4NThkNmI2NTk3YjEzYjg1NGViNGY4MzlhZjAzMzk5YTgwZDc5YmRhNjU3OGM4NDFmOTBkNjQ1NzE1YjI4MGQzNzE0Mzk5MmRkMTg2YzgwYjk0OWI3NzVjYWU5NzM3MGU0ZWM5NzQ0MzEzNmM2ZGE0ODRlOTcwZmZkYjEzMjNhMjA4NDc4MjFkM2IxODM4MWRlMTNiYjQ5YWFlYTY2NTMwYzRhNGI4MjcxZjNlYWUxNzJjZDM2NmUwN2U2NjM2ZjEwMTlkMmEyOGFlZDE1ZSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA0XzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI3OjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYmY2ZDQyZTcwMTcwN2IxZDAyMDZiMGM4YjQ1YTFjNzI2NDFmZjEyODg5MjE5YTgyYmRlYTk2NWI1ZTc5YTk2YjBkMDE2M2VkOWQ1NzhlYzlhZGEyMGYyZmJjZjFlYTNjNDA4OWQ4MzQxOWJhODFiMGM2MGYzNjA2ZGE5OSI6ImFkOTk3ZmVlZjczMGQ2ZWE3YmU2MGQwZGM1MmU3MmVhY2JmZGQyNzUiOiIwMzAxZjkzNWU5YzQ3YWJjYjQ4YWNiYmUwOTg5NWQ5ZjU5NzFhZjE0ODM5ZGE0ZmY5NTQxN2VlNDUzZDFmZDc3MzE5MDcyYmI3Mjk3ZTFiNTVkNzU2MWNkOWQxYmIyNGMxYTlhMzdjNjE5ODY0MzA4MjQyODA0ODc5ZDg2ZWJkMDAxZGNlNTE4Mzk3NWUxNTA2OTg5YjcwZTVhODM0MzQxNTRkNWNiZmQ2YTI0Nzg3ZTYwZWIwYzY1OGQyYWMxOTMzMDJkMTE5MmM2ZTYyMmQ0YTEyYWQ0YjUzOTIzYmNhMjQ2ZGYzMWM2Mzk1ZTM3NzAyYzZhNzhhZTA4MWZiOWQwNjUiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNF80Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyNzoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImZiMmVmMTEyZjVlNzY2ZWI5NDAxOTI5NzkzNDc5NGY3YmUyZjZmYzFjNThlIjoiMTM2NDU0ZGY1NzMwZjczYzgwN2E3ZTQwZDhjMWEzMTJhYzViOWRkMyI6IjAyZDExMGFkMzBhZmI3MjdiZWI2OTFkZDBjZjE3ZDBhZjFhMWU3ZmEwY2MwNDBlYzFhNGJhMjZhNDJjNTlkMGE3OTZhMmUyMmM4ZjM1N2NjYzk4YjY1MTlhY2ViNjgyZTk0NWU2MmNiNzM0NjE0YTUyOTQwN2NkNDUyYmVlM2U0NGZlY2U4NDIzY2MxOWU1NTU0OGI4Yjk5NGI4NDljN2VjZGU0OTMzZTc2MDM3ZTFkMGNlNDQyNzViMDg3MTBjNjhlNDMwMTMwYjkyOTczMGVkNzdlMDliMDE1NjQyYzU1OTNmMDRlNGZmYjk0MTA3OTgxMDJhOGU5NmZmZGZlMTFlNCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA0XzUKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI3OjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMjhjY2Q0NDdiYjllODUxNjZkYWJiOWU1YjdkMWFkYWRjNGI5ZDM5ZjIwNGU5NmQ1ZTQ0MGNlOWFkOTI4YmMxYzIyODQiOiJiY2E4MDU3ZjgyNGIyZWEyNTdmMjg2MTQwN2VlZjYzZDMzMjA4NjgxIjoiMDBkYmI4YTc0MzlkOTBlZmQ5MTlhMzc3YzU0ZmFlOGZlMTFlYzU4YzNiODU4MzYyZTIzYWQxYjhhNDQzMTA3OTkwNjZiOTkzNDdhYTUyNTY5MWQyYWRjNThkOWIwNmUzNGYyODhjMTcwMzkwYzVmMGUxMWMwYWEzNjQ1OTU5ZjE4ZWU3OWU4ZjJiZThkN2FjNWMyM2QwNjFmMThkZDc0YjhjNWYyYTU4ZmNiNWViMGM1NGY5OWYwMWE4MzI0NzU2ODI5MjUzNjU4MzM0MDk0OGQ3YThjOTdjNGFjZDFlOThkMWUyOWRjMzIwZTk3YTI2MDUzMmE4YWE3YTc1OGExZWMyIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDRfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjc6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmMjIyNDI3NTFlYzZiMSI6IjJlN2UxZTE3ZjY0N2I1ZGRkMDMzZTE1NDcyZjkwZjY4MTJmM2FjNGUiOiIwMGE1ZmZhNDc2OGM4YmJlY2FlZTJkYjc3ZThmMmVlYzk5NTk1OTMzNTQ1NTIwODM1ZTViYTdkYjk0OTNkM2UxN2NkZGVmZTZhNWY1Njc2MjQ0NzE5MDhkYjRlMmQ4M2EwZmJlZTYwNjA4ZmM4NDA0OTUwM2IyMjM0YTA3ZGM4M2IyN2IyMjg0N2FkODkyMGZmNDJmNjc0ZWY3OWI3NjI4MGIwMDIzM2QyYjUxYjhjYjI3MDNhOWQ0MmJmYmM4MjUwYzk2ZWMzMmMwNTFlNTdmMWI0YmE1MjhkYjg5YzM3ZTRjNTRlMjdlNmU2NGFjNjk2MzVhZTg4N2Q5NTQxNjE5YTkiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNV8xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyODoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImFmNzFhOTAxZTNhNjFkMzEzMmYwZmMxZmRiNDc0ZjllYTY1NzkyNTdmZmMyNGQxNjQxNzAxNDViM2RiZGU4IjoiNDRjOTJlMjgzZjc3Yjk0OTljNjAzZDk2MzY2MGM4N2QyZjkzOTQ2MSI6IjAzNjA0NmE0YTQ3ZDllZDNiYTlhODkxMzljMTA1MDM4ZWI3NDkyYjA1YTVkNjhiZmQ1M2FjY2ZmNDU5N2Y3YTY4NjUxYjQ3YjRhNDYyN2Q5MjdlNDg1ZWVkN2I0NTY2NDIwZThiNDA5ODc5ZTVkNjA2ZWFlMjUxZDIyYTVkZjc5OWY3OTIwYmZjMTE3Yjk5MjU3MmE1M2IxMjYzMTQ2YmNlYTAzMzg1Y2M1ZTg1M2M5YTEwMWM4YzNlMWJkYTMxYTUxOTgwNzQ5NmM2Y2I1ZTVlZmI0MDg4MjNhMzUyYjhmYTA2NjFmYjY2NGVmYWRkNTkzZGViOTlmZmY1ZWQwMDBlNSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA1XzIKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI4OjE2OiIwYWFkZjNmOWMxMjVlNWQ4OTFmMzFhYzQ0OGU5OTNkZWZlNTgwZjgwMmI0NWY5ZDdmMjJiYTUwMjFlOWM0NzU3NmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OGQxYzIzNDQ2NzE2NmIyYTJiODQ5YTA1YTg4OWMwNjBhYzBkYTBjNWZhZThiNTVmMzA5YmE2MmU3MDM3NDJmYTAzMjZmMmQxMGIwMTEwMjE0ODlmZjQ5Nzc3MDE5MGQ4OTVmZDM5ZjUyMjkzYzM5ZWZkNzNhNjk4YmRhYjlmMTBlZDkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYTNiODQ0YTA4MjM5YThhYzQxNjA1YWYxN2E2Y2ZkYTRkMzUwMTM2NTg1OTAzYTQxN2E3OTI2ODc2MDUxOWE0YjRhYzMzMDNlYzczZjBmODdjZmIzMjM5OSI6ImNiMjhmNTg2MDY1OWZjZWVlNDljM2VlYWZjZTYyNWE3MDgwM2JkMzIiOiIwM2Q2ZWI2NTRlZGNlNjE1YmM1OWY0NTUyNjVlZDRlNWExODIyM2NiYjliZTRlNDA2OWI0NzM4MDRkNWRlOTZmNTRkY2FhYTYwM2QwNDljNWQ5NGFhMTQ3MGRmY2QyMjU0MDY2YjdjN2I2MWZmMWY2ZjY3NzBlMzIxNWM1MTM5OWZkNGUzNGVjNTA4MmJjNDhmMDg5ODQwYWQwNDM1NGFlNjZkYzBmMWJkMThlNDYxYTMzY2MxMjU4YjQ0M2EyODM3YTZkZjI2NzU5YWEyMzAyMzM0OTg2Zjg3MzgwYzljYzlkNTNiZTlmOTk2MDVkMmM5YTk3ZGE3YjA5MTVhNGE3YWQiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNV8zCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyODoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjMwOGIwZWNiZDJjNzZjYjc3ZmM2ZjcwYzVlZGQyMzNmZDJmMjA5MjlkNjI5ZjAyNjk1M2JiNjJhOGY0YTNhMzE0YmRlMTk1ZGU4NWI1ZjgxNmRhMmFhYjA3NGQyNmNiNmFjZGRmMzIzYWUzYjljNjc4YWMzY2YxMmZiZGRlNyI6IjIyODVmNDBkNzcwNDgyZjlhOWVmYTJjNzJjYjNhYzU1NzE2ZGMwY2EiOiIwNzcwOTUyMTgxNjQ5ZjlmOWYwN2ZmNjI2ZmYzYTIyYzM1YzQ2MjQ0M2Q5MDVkNDU2YTlmZDBiZmY0M2NhYzJjYTdhOWY1NTRlOTQ3OGI5YWNjM2FjODM4YjAyMDQwZmZkM2UxODQ3ZGUyZTQyNTM5MjlmOWRkOWVlNDA0NDMyNWE5YjA1Y2FiYjgwOGIyZWU4NDBkMzRlMTVkMTA1YTNmMWY3YjI3Njk1YTFhMDdhMmQ3M2ZlMDhlY2FhYTNjOWM5ZDRkNWE4OWZmODkwZDU0NzI3ZDdhZTQwYzBlYzFhOGRkODYxNjVkOGVlMmM2MzY4MTQxMDE2YTQ4YjU1YjY5NjciOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNV80Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyODoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjE1YzViOWVlMTE4NSI6IjQ5ZmE0NWQzYTc4ZGQxMGRmZDU3NzM5OWQxZWIwMGFmN2VlZDU1MTMiOiIwODEyYjc2NzY4ZWJjYjY0MmQwNDAyNThlNWY0NDQxYTAxODUyMWJkOTY2ODdlNmM1ZTg5OWZjZDZjMTc1ODhmZjU5YTgyY2M4YWUwM2E0YjQ1YjMxMjk5YWYxNzg4YzMyOWY3ZGNkMjg1ZjhjZjRjZWQ4MjYwNmI5NzYxMjY3MWE0NWJlZGNhMTMzNDQyMTQ0ZDE2MTdkMTE0ZjgwMjg1N2YwZjlkNzM5NzUxYzU3YTNmOWVlNDAwOTEyYzYxZTJlNjk5MmJlMDMxYTQzZGQ0OGZhNmJhMTRlZWY3YzQyMmI1ZWRjNGU3YWZhMDRmZGQzOGY0MDJkMWM4YmI3MTlhYmYiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNV81Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyODoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjIxMDI2ZTY4MDBjN2ZhNzI4ZmNhYWJhMGQxOTZhZTI4ZDdhMmFjNGZmZDhhYmNlNzk0ZjA5ODVmNjBjOGE2NzM3Mjc3MzY1ZDNmZWExMWRiODkyM2EyMDI5YSI6ImYwMjg3NDEzMjM0Y2M1MDM0NzI0YTA5NGM0NTg2Yjg3YWZmMTMzZmMiOiIwN2I2MGUxNGVjOTU0YmZkMjllNjBkMDA0N2U3ODlmNTFkNTcxODZjNjM1ODk5MDMzMDY3OTNjZWQzZjY4MjQxYzc0MzUyOWFiYTZhNjM3NGY5MmUxOWUwMTYzZWZhMzM2OTdlMTk2Zjc2NjFkZmFhYTQ3YWFjNmJkZTVlNTFkZWI1MDdjNzJjNTg5YTJjYTE2OTNkOTZiMTQ2MDM4MTI0OWIyY2RiOWVhYzQ0NzY5ZjI0ODljNWQzZDJmOTlmMGVlM2M3ZWU1YmY2NGE1YWM3OWM0MmJkNDMzZjE0OWJlOGNiNTk1NDgzNjE2NDA1OTU1MTNjOTdhZjdiYzI1MDk3MjMiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNV82Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyODoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjU0MWUzN2I2OGI2Yzg4NzJiODRjMDIiOiJkOWZiYTQ1Yzk2ZjIxZTZlMjZkMjllYjJjZGNiNjU4NWJlOWNiMzQxIjoiMDhjMzZkNGRkYTMzNDIzYjJlZDY4MzBkODVmNjQxMWJhMWRjZjQ3MGExZmFlMGViZWZlZTdjMDg5ZjI1NmNlZjc0Y2I5NmVhNjljMzhmNjBmMzlhYmVlNDQxMjliY2I0YzkyZGU3Zjc5NzYyM2IyMDA3NGUzZDljMjg5OTcwMWVkOTA3MWUxZWZhMGJkZDg0ZDRjM2U1MTMwMzAyZDhmMDI0MGJhYmE0Yjg0YTcxY2MwMzJmMjIzNWE1ZmYwZmFlMjc3YzNlOGY5MTEyYmVmNDRjOWFlMjBkMTc1ZmM5YTQwNThiZmM5MzBiYTMxYjAyZTJlNGY0NDQ0ODM3MTBmMjRhIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDZfMQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjk6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0MDQ2Y2E4YmFhMzM0N2NhMjdmNDllMGQ4MWY5Y2MxZDcxYmU5YmE1MTdkNCI6ImRkMGY2Y2ZlNDE1ZTg4ZTVhNDY5YTUxZmJiYTZkZmQ0MGFkYjQzODQiOiIwNjMwZWViY2QyODU2YzI0Zjc5ODgwNmU0MWY5ZTY3MzQ1ZWRhOWNlZGEzODZhY2M5ZmFjYWVhMWVlZWQwNmFjZTU4MzcwOTcxOGQ5ZDE2OWZhZGY0MTRkNWM3NmY5Mjk5NjgzM2VmMzA1Yjc1YjFlNGI5NWY2NjJhMjBmYWVkYzNiYWUwYzQ4MjdhOGJmOGE4OGVkYmQ1N2VjMjAzYTI3YTg0MWYwMmU0M2E2MTViYWIxYThjYWMwNzAxZGUzNGRlYmRlZjYyYTA4ODA4OWI1NWVjMzZlYTc1MjJmZDNlYzhkMDZiNmEwNzNlNmRmODMzMTUzYmMwYWVmZDkzYmQxYTMiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgNl8yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAyOToxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjVjYzcyYzYwMjMxZGYwM2IzZDQwZjliNTc5MzFiYzMxMTA5Zjk3MjUyN2YyOGIxOWU3NDgwYzcyODhjYjNjOTJiMjI1MTIyMTRlNGJlNmM5MTQ3OTJkZGFiZGY1N2ZhYThhYTciOiI4ZDE0YmQ5NDZhMTM1MTE0OGY1Y2FlMmVkOWEwYzY1M2U4NWViZDg1IjoiMGViYzM3Mzc2MTczYTRmZDJmODljYzU1YzJjYTYyYjI2YjExZDUxYzNjN2NlNDllODg0NWY3NGU3NjA3MzE3YzQzNmJjOGQyM2I5NjY3ZGZlYjlkMDg3MjM0YjQ3YmM2ODM3MTc1YWU1YzA1NTlmNmI4MWQ3ZDIyNDE2ZDNlNTBmNGFjNTMzZDhmMDgxMmYyZGI5ZTc5MWZlOWM3NzVhYzhiNmFkMGY1MzVhZDljZWIyM2E0YTAyMDE0YzU4YWIzZjhkMzE2MTQ5OWEyNjBmMzkzNDhlNzE0YWUyYTFkMzQ0MzIwOGZkOGI3MjJjY2ZkZmIzOTNlOTgwMTFmOTllNjNmIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDZfMworcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjk6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiMjBlNjUxMzAzMDkyZjRiY2NiNDMwNzBjMGY4NmQyMzA0OTM2MmVkOTY2NDJmYzU2MzJjMjdkYjRhNTJlM2Q4MzFmMmFiMDY4YjIzYjE0OTg3OWMwMDJmNmJmM2ZlZWU5NzU5MTExMjU2MmMiOiI2YzA3NWJjNDU1MjBmMTY1YzBiZjVlYTRjNWRmMTkxYmM5ZWYwZTQ0IjoiMGE5OGJmMTA5MzYxOTM5NDQzNmNmNjhkOGYzOGUyZjE1OGZkZThlYTU0ZjM0MzVmMjM5YjhkMDZiODMyMTg0NDIwMjQ3NmFlZWQ5NjAwOTQ5MjQ4MGNlM2E4ZDcwNTQ5OGM0YzhjNjhmMDE1MDFkYzgxZGI2MDhmNjAwODczNTBjOGMzYjBiZDJlOWVmNmE4MTQ1OGI3YzgwMWI4OWYyZTRmZTk5ZDQ5MDBiYTZhNGI1ZTVhOTZkODY1ZGM2NzZjNzc1NTkyODc5NDEzMGQ2MjgwYTgxNjBhMTkwZjJkZjNlYTdjZjlhYTAyNzFkODhlOWU2OTA1ZWNmMWM1MTUyZDY1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDZfNAorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjk6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI2ODRlMzAzOGM1YzA0MWY3IjoiM2JiYzNiZDY2MzdkZmUxMjg0NjkwMTAyOWJmNWIwYzA3MTAzNDM5YyI6IjAwOGU3YTY3Y2FjZmI1YzRlMjRiZWM3ZGVlMTQ5MTE3ZjE5NTk4Y2U4YzQ1ODA4ZmVmODhjNjA4ZmY5Y2Q2ZTY5NTI2M2I5YTNjMGFkNGI4YmE0Yzk1MjM4ZTk2YTg0MjJiODUzNTYyOWM4ZDUzODIzNzQ0NzlhZDEzZmEzOTk3NGIyNDJmOWE3NTllZWFmOWM4M2FkNWE4Y2ExODk0MGEwMTYyYmE3NTU4NzZkZjI2M2Y0YmQ1MGM2NTI1YzU2MDkwMjY3YzFmMGUwOWNlMDg5OWEwY2YzNTllODgxMjBhYmQ5YmY4OTM0NDViM2NhZTc3ZDM2MDczNTlhZTlhNTJmOCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA2XzUKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDI5OjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMzI0ODhjYjI2MmQwNDFkNmU0ZGQzNWY5ODdiZjNjYTY5NmRiMWYwNmFjMjlhNDQ2OTMiOiJiNDZiNDE4OTNlOGJlZjMyNmY2NzU5MzgzYTgzMDcxZGFlN2ZjYWJjIjoiMDAwMDM0NzQ0MTZjN2I2OGJkZjk2MWMzODU3Mzc5NDRkN2YxZjQwY2IzOTUzNDNjNjkzY2MwYjRmZTYzYjMxZmVkZjFlYWVlYWM5Y2NjMDY3OGIzMWRjMzJlMDk3NzQ4OTUxNGM0ZjA5MDg1ZjYyOThhOTY1M2YwMWFlYTQwNDVmZjU4MmVlODg3YmUyNmFlNTc1YjczZWVmN2YzNzc0OTIxZTM3NWEzZDE5YWRkYTBjYTMxYWExODQ5ODg3YzFmNDJjYWM5Njc3ZjdhMmY0ZTkyM2Y2ZTVhODY4YjM4YzA4NGVmMTg3NTk0ZGM5ZjdmMDQ4ZmVhMmUwMjk1NTM4NGFiIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDZfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMjk6MTY6IjEyYjE3ZjZkYWQyZWNkMTlmZjQ2ZGMxM2Y3ODYwZjA5ZTBlMGNmYjY3N2IzOGE1MjU5MjMwNWNlYWYwMjJjMTY2ZGI5MGQwNGFjMjllMzNmN2RkMTJkOWZhZjY2ZTA4MTZiYjYzZWFkMjY3Y2M3ZDQ2YzE3YzM3YmUyMTRiY2EyYTIyZDcyM2E2NGU0NDQwNzQzNmI2ZmM5NjU3MjlhZWZjMjU1NGYzNzZjZDVkY2VhNjgyOTM3ODBhNjJiZjM5ZDAwMjk0ODVhMTYwYmJiOWU1ZGMwOTcyZDIxYTUwNGY1MmU1ZWUwMjhhYTQxNjMzMmY1MTBiMmU5Y2ZmNWY3MjJhZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1MGJhMTRiZTg0NjI3MjAyNzljMzA2YmEiOiIwYTI0MDMzMTJhNDFlM2Q1MmYwNjBmYmMxM2E2N2RlNWNmNzYwOWE3IjoiMGEwMjZkZGE1ZmM4Nzg1ZjdiZDliZjc1MzI3YjYzZTg1ZTJjMGZkZWU1ZGFkYjY1ZWJkY2FjOWFlMWRlOTVjOTJjNjcyYWI0MzNhYTdhOGU2OWNlNmE2ZDg4OTdmYWM0YWM0YTU0ZGU4NDFhZTVlNWJiY2U3Njg3ODc5ZDc5NjM0Y2VhN2EzMDY4NDA2NWM3MTRkNTI0MDliOTI4MjU2YmJmNTNlYWJjZDUyMzFlYjcyNTk1MDQ1MzczOTliZDI5MTY0YjcyNmQzM2E0NmRhNzAxMzYwYTQxNjhhMDkxY2NhYjcyZDQ0YTYyZmVkMjQ2YzBmZmVhNWIxMzQ4YWI1NDcwIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDdfMQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMzA6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0N2FhZTkwOSI6IjQzZGQwOWEwN2ZmNGNhYzcxY2FhNDYzMmVlNWUxYzFkYWVlNGNkOGYiOiIxNjg4ZTRjZTc3OTRiYmE2Y2I3MDE0MTY5ZWNkNTU5Y2VkZTJhMzBiNTZhNTJiNjhkOWZlMThjZjE5NzNlZjk3YjJhMDMxNTM5NTFjNzU1ZjYyOTRhYTQ5YWRiZGI1NTg0NWFiNjg3NWZiMzk4NmM5M2VjZjkyNzk2Mjg0MGQyODJmOWU1NGNlOGI2OTBmN2MwY2I4YmJkNzM0NDBkOTU3MWQxYjE2Y2Q5MjYwZjllYWI0NzgzY2M0ODJlNTIyM2RjNjA5NzM4NzE3ODNlYzI3YjBhZTBmZDQ3NzMyY2JjMjg2YTE3M2ZjOTJiMDBmYjRiYTY4MjQ2NDdjZDkzYzg1YzEiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgN18yCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMDoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjFkOWIyZTIyMjNkOWJjMTNiZmI5ZjE2MmNlNzM1ZGI0OGJhN2M2OGY2ODIyYTBhMWE3YjZhZTE2NTgzNGU3IjoiM2E5YzNjZWM3Yjg0ZjliZDNhZGVjYmM2NzNlYzk5ZDU0YjIyYmM5YiI6IjEwNTJlZDM5N2IyZTAxZTFkMGVlMWM1MGJmMjQzNjNmOTVlNTA0ZjRhMDM0MzRhMDhmZDgyMjU3NGVkNmI5NzM2ZWRiYjVmMzkwZGIxMDMyMTQ3OWE4YTEzOTM1MGUyYmQ0OTc3YzM3NzhlZjMzMWYzZTc4YWUxMThiMjY4NDUxZjIwYTJmMDFkNDcxZjVkNTNjNTY2OTM3MTcxYjJkYmMyZDRiZGU0NTlhNTc5OWYwMzcyZDY1NzQyMzliMjMyM2QyNDVkMGJiODFjMjg2YjYzYzg5YTM2MTAxNzMzN2U0OTAyZjg4YTQ2N2Y0YzdmMjQ0YmZkNWFiNDY0MzdmZjNiNiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA3XzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMwOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDk3NmZjIjoiNzZhNzVlNWI2MTU3YTU1NmNmODg4NGJiMmU0NWMyOTNkZDU0NWNmNSI6IjIxNTVjZDg0M2ZmMjRhNGVlOGJhZGI3Njk0MjYwMDI4YTQ5MDgxM2JhOGIzNjlhNGNiZjEwNmVjMTQ4ZTUyOTg3MDdmNTk2NWJlN2QxMDFjMTA0OWVhODU4NGMyNGNkNjM0NTVhZDljMTA0ZDY4NjI4MmQzZmI4MDNhNGMxMWMxYzJlOWI5MWM3MTc4ODAxZDFiNjY0MGYwMDNmNTcyOGRmMDA3YjhhNGNjYzkyYmNlMDVlNDFhMjcyNzhkN2M4NTAxOGM1MjQxNDMxM2E1MDc3Nzg5MDAxZDRmMDE5MTBiNzJhYWQwNWQyMjBhYTE0YTU4NzMzYTc0ODliYzU0NTU2YiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA3XzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMwOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZDQ3Mzg2MjNkZjIyM2FhNDM4NDNkZjg0Njc1MzRjNDFkMDEzZTBjODAzYzYyNGUyNjM2NjZiMjM5YmRlNDBhNWYyOWFlYjhkZTc5ZTNkYWE2MWRkMDM3MGY0OWJkNGIwMTM4MzRiOTgyMTJhZWY2YjFjNWVlMzczYjNjYiI6Ijc4NjYzMTRhNmFkNmYyYjI1MGEzNTk0MWRiMjhmNTg2NGI1ODU4NTkiOiIwYWIxNGMzNzNhZWI3ZDQzMjhkMGFhYWQ4YzA5NGQ4OGI5ZWIwOThiOTVmMjEwNTRhMjkwODI1MjJiZTdjMjdhMzEyODc4YjYzNzkxN2UzZDgxOWU2YzNjNTY4ZGI1ZDg0MzgwMmIwNmQ1MWQ5ZTk4YTJiZTBiZjQwYzAzMTQyM2IwMGVkZmJmZjgzMjBlZmI5MTcxYmQyMDQ0NjUzYTRjYjljNTEyMmY2YzY1ZTgzY2RhMmVjM2MxMjYwMjdhOWMxYTU2YmE4NzRkMGZlYTIzZjM4MGI4MmNmMjQwYjhjZjU0MDAwNDc1OGM0Yzc3ZDkzNDE1N2E3NGYzZmMxMmJmYWMiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgN181Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMDoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImJiNDcyMzFjYTVlYTFkM2FkNDZjOTkzNDVkOWE4YTYxIjoiYjIxNjZlZDQ3MmQ1OGRiMTBjYWIyYzZiMDAwY2NjZjEwYTdkYzUwOSI6IjAyODM4N2EzMTgyNzc0MzQ3OThiNGQ5N2Y0NjAwNjhkZjUyOThmYWJhNTA0MWJhMTE3NjFhMWNiNzMxNmIyNDE4NDExNGVjNTAwMjU3ZTI1ODllZDNiNjA3YTFlYmJlOTdhNmNjMmUwMmJmMWI2ODFmNDIzMTJhMzNiN2E3N2Q4ZTc4NTVjNGE2ZGUwM2UzYzA0NjQzZjc4NmI5MWEyNjRhMGQ2ODA1ZTJjZWE5MWU2ODE3N2ViN2E2NGQ5MjU1ZTRmMjdlNzEzYjdjY2VjMDBkYzIwMGViZDIxYzJlYTJiYjg5MGZlYWU0OTQyZGY5NDFkYzNmOTc4OTBlZDM0NzQ3OCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA3XzYKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMwOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMjE4NDgyNzA5NWQzNWMzZjg2ZjYwMGU4ZTU5NzU0MDEzMjk2IjoiNTI2NzNiZGUyY2ExNjZjMmFhNDYxMzFhYzFkYzgwOGQ2N2Q3ZDNiMSI6IjE0YzY3OGE5NGFkNjA1MjVlZjM5ZTk1OWIyZjNiYTVjMDk3YTk0ZmY5MTJiNjdkYmFjZTgwNTM1YzE4N2FiZDQ3ZDA3NTQyMGIxODcyMTUyYmJhMDhmN2ZjMzFmMzEzYmJmOTI3M2M5MTJmYzRjMDE0OWE5YjBjZmI3OTgwN2UzNDZlYjMzMjA2OTYxMWJlYzBmZjliY2QxNjhmMWY3YzMzZTc3MzEzY2VhNDU0Yjk0ZTI1NDllZWNmMDAyZTJhY2Y3ZjZmMmQyODQ1ZDRmZTBhYWIyZTVhOTJkZGY2OGM0ODBhZTExMjQ3OTM1ZDFmNjI1NzQ4NDIyMTZhZTY3NDExNSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA4XzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMxOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMDUwYjc1NWU1ZTY4ODBmN2I5ZTlkNjkyYTc0YzM3YWFlNDQ5YjMxYmZlYTZkZWZmODM3NDdhODk3ZjZjMmM4MjViYjFhZGJmODUwYTNjOTY5OTRiNWRlNWIzM2NiYzdkNGExNzkxM2E3OTY3IjoiNzcwNmZmY2ExZWNmYjFlYmVlMmE1NWU1YzZlMjRjZDI3OTdhNDEyNSI6IjA5YjM2ODNkOGEyZWIwZmIyOTViNjJlZDFmYjkyOTBiNzE0NDU3Yjc4MjUzMTlmNDY0Nzg3MmFmODg5YjMwNDA5NDcyMDIwYWQxMjkxMmJmMTliMTFkNDgxOWY0OTYxNDgyNGZmZDg0ZDA5YzBhMTdlN2QxNzMwOWQxMjkxOTc5MDQxMGFhMjk5NTY5OWY2YTg2ZGJlMzI0MmI1YWNjMjNhZjQ1NjkxMDgwZDZiMWFlODEwZmIzZTMwNTcwODdmMDk3MDA5MmNlMDBiZTk1NjJmZjQwNTNiNjI2MmNlMGNhYTkzZTEzNzIzZDJlM2E1YmEwNzVkNDVmMGQ2MWI1NGI2MSI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA4XzIKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMxOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNGViNjhkY2Q5M2NhOWIxOWRmMTExYmQ0MzYwOGY1NTcwMjZmZTRhYTFkNWNmYWMyMjdhM2ViNWFiOTU0OGMxOGEwNmRkZWQyM2Y4MTgyNTk4NmIyZmNkNzExMDllY2VmN2VmZjg4ODczZjA3NWMyYWEwYzQ2OWY2OWM5MmJjIjoiYTM3MTdkYTE0M2I0ZGNmZmJjNzQyNjY1YThmYTk1MDU4NTU0ODM0MyI6IjJlY2YxNWM5N2M1YTE1YjE0NzZhZTk4NmIzNzFiNTdhMjQyODRmNGExNjJhOGQwYzgxODJlNzkwNWU3OTIyNTZmMTgxMmJhNWY4M2YxZjdhMTMwZTQyZGNjMDIyMzI4NDRlZGMxNGEzMWE2OGVlOTdhZTU2NGEzODNhMzQxMTY1NjQyNGM1ZjYyZGRiNjQ2MDkzYzM2N2JlMWZjZGE0MjZjZjAwYTA2ZDhhY2I3ZTU3Nzc2ZmJiZDg1NWFjM2RmNTA2ZmMxNmIxZDdjM2YyMTEwZjNkODA2OGU5MWUxODYzNjM4MzFjODQwOTY4MGQ4ZGE5ZWNkOGNmMWZhMjBlZTM5ZCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA4XzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMxOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiODYwNGFjNTYzMjhjMWFiNWFkOTE3ODYxIjoiZWUwNjIwOTA3M2NjYTAyNmJiMjY0ZTUxODViZjhjNjhiNzczOWY4NiI6IjRiYzg5MTMwYTViMmRhYmI3YzJmY2Y5MGViNWQwZWFmOWU2ODFiNzE0NmEzOGYzMTczYTNkOWNmZWM1MmVhOWUwYTQxOTMyZTY0OGE5ZDY5MzQ0YzUwZGE3NjNmNTFhMDNjOTU3NjIxMzFlODA1MjI1NGRjZDIyNDhjYmE0MGZkMzE2Njc3ODZjZTA1YTJiN2I1MzFhYzlkYWM5ZWQ1ODRhNTliNjc3YzFhOGFlZDhjNWQxNWQ2OGMwNTU2OWUyYmU3ODBiZjdkYjYzOGZkMmJmZDJhODVhYjI3Njg2MGYzNzc3MzM4ZmNhOTg5ZmZkNzQzZDEzZWUwOGUwY2E5ODkzZiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA4XzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxMDMxOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZmRkYTVmYmY2ZWMzNjFhOWQ5YTRhYzY4YWYyMTZhMDY4NmY0MzhiMWUwZTVjMzZiOTU1Zjc0ZTEwN2YzOWMwZGRkY2MiOiI5OTBhZDU3M2RjNDhhOTczMjM1YjZkODI1NDM2MThmMmU5NTUxMDVkIjoiMmU0NTY4NDdkOGZjMzZmZjAxNDdkNjk5MzU5NGI5Mzk3MjI3ZDU3Nzc1MmM3OWQwZjkwNGZjYjAzOWQ0ZDgxMmZlYTYwNWE3YjU3NGRkODJjYTc4NmY5Mzc1MjM0ODQzOGVlOWY1YjU0NTQ5ODVkNWYwZTE2OTllM2U3YWQxNzVhMzJlMTVmMDNkZWIwNDJhYjlmZTFkZDlkYjFiYjg2ZjhjMDg5Y2NiNDVlN2VmMGM1ZWU3Y2E5YjcyOTBjYTZiMTViZWQ0NzAzOTc4OGE4YTkzZmY4M2UwZThkNjI0NGM3MTAwNjM2MmRlZWY2OWI2ZjQxNmZiM2M2ODQzODNmYmQwIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDhfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjEwMzE6MTY6IjViZGYwZTMwZDMyMWRkYTUxNDdmODgyNDA4ZmE2OTE5NTQ4MGRmOGY4MGQzZjZlOGJmNTgxODUwNGYzNjQyN2NhOWIxZjU1NDBiOWM2NWE4ZjY5NzRjZjg0NDdhMjQ0ZDkyODAyMDFiYjQ5ZmNiYmU2Mzc4ZDE5NDRjZDIyN2UyMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MzEzNTljZDIyNjY5NjQ3ZmJiMTcxNzI0NjEzNGVkN2I0OTdjZmZmYmRjNDJiNTljNzNhOTZlZDkwMTY2MjEyZGZmNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0YTVmNDkxNGJlZTI1ZGUzYzY5MzQxZGUwNyI6ImVjYzYzYjI4ZjA3NTZmMjJmNTJhYzhlNmVjMTI1MWE2ZWMzMDQ3MTgiOiIxZmI5MzU2ZmQ1YzRiMTc5NmRiMmViZjdkMGQzOTNjYzgxMGFkZjYxNDVkZWZjMmZjZTcxNGY3OWQ5MzgwMGQ1ZTJhYzIxMWVhOGJiZWNjYTRiNjU0Yjk0YzNiMThiMzBkZDU3NmNlMzRkYzk1NDM2ZWY1N2EwOTQxNTY0NTkyMzM1OWE1ZDdiNDE3MWVmMjJjMjQ2NzBmMWIyMjlkMzYwM2U5MWY3NjY3MWI3ZGY5N2U3MzE3Yzk3NzM0NDc2ZDVmM2QxN2QyMWNmODJiNWJhOWY4M2RmMmU1ODhkMzY5ODRmZDFiNTg0NDY4YmQyM2IyZTg3NWYzMmY2ODk1M2Y3YjIiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOF82Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTAzMToxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhlMDdkNjZmN2I4ODBhNzI1NjNhYmNkM2YzNTA5MmJjMzM0MDlmYjdmODhmMjQ3MmJlIjoiMzkyNWM3MWIzNjJkNDBhMGE2ZGU0MjE0NTU3OWJhMWU3ZGQ0NTlmYyI6IjNhZmQ5YzY2MDAxNDdiMjE3OThkODE4YzY1NWEwZjRjOTIxMmRiMjZkMGIwZGZkYzJhNzU5NGNjYjNkMjJmNWJmMWQ3YzNlMTEyY2Q3M2ZjN2Q1MDljN2E4YmFmZGQzYzI3NGQxMzk5MDA5Zjk2MDllYzRiZTY0NzdlNDUzZjA3NWFhMzNkYjM4Mjg3MGMxYzM0MDlhZWYzOTJkNzM4NmFlM2E2OTZiOTlhOTRiNGRhMDU4OTQ0N2U5NTVkMTZjOThiMTc2MDJhNTliZDczNjI3OWZjZDhmYjI4MGM0NDYyZDU5MGJmYTliZjEzZmVkNTcwZWFmZGU5NzMzMGEyYzIxMCI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA5XzEKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxNTM2OjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZjczNWZkNTViYTkyNTkyYzNiNTJiOGY5YzRmNjlhYWExY2JlZjhmZTg4YWRkMDk1NTk1NDEyNDY3ZjljZjRlYzBiODk2YzU5ZWRhMTYyMTBlNzU0OWM4YWJiMTBjZGJjMjFhMTJlYzliNmI1YjhmZDJmMTAzOTllYjYiOiI4ZWM5NjVmMTM0YTNlYzk5MzFlOTJhMWNhMGRjODE2OWQ1ZWE3MDVjIjoiMjY3YmNkMTE4YWNhYjFmYzhiYTgxYzg1ZDczMDAzY2I4NjEwZmE1NWMxZDk3ZGE4ZDQ4YTdjN2YwNjg5NmE0ZGI3NTFhYTI4NDI1NWI5ZDM2YWQ2NWYzNzY1M2Q4MjlmMWIzN2Y5N2I4MDAxOTQyNTQ1YjJmYzJjNTVhNzM3NmNhN2ExYmU0YjE3NjBjOGUwNWEzM2U1YWEyNTI2YjhkOThlMzE3MDg4ZTc4MzRjNzU1YjJhNTliMTI2MzFhMTgyYzA1ZDVkNDNhYjE3NzkyNjRmODQ1NmY1MTVjZTU3ZGZkZjUxMmQ1NDkzZGFiN2I3MzM4ZGM0YjdkNzhkYjljMDkxYWMzYmFmNTM3YTY5ZmM3ZjU0OWQ5NzlmMGVmZjlhOTRmZGE0MTY5YmQ0ZDFkMTlhNjljOTllMzNjM2I1NTQ5MGQ1MDFiMzliMWVkYWUxMThmZjY3OTNhMTUzMjYxNTg0ZDNhNWYzOWY2ZTY4MmUzZDE3YzhjZDEyNjFmYTcyIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDlfMgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjE1MzY6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4MWI5MDY2MDUwMTVhNjNhYWJlNDJkZGYxMWUxOTc4OTEyZjU0MDRjNzQ3NGIyNmRjZTNlZDQ4MmJmOTYxZWNjODE4YmY0MjBjNTQ2NTkiOiJlY2IxYjhiMjVmYTUwY2RhYjA4ZTU2MDQyODY3ZjRhZjU4MjZkMTZjIjoiOTNhYzlmMDY3MWVjMjlhY2JiNDQ0ZWZmYzFhNTc0MTM1MWQ2MGZkYjBlMzkzZmJmNzU0YWNmMGRlNDk3NjFhMTQ4NDFkZjc3NzJlOWJjODI3NzM5NjZhMTU4NGM0ZDcyYmFlYTAwMTE4ZjgzZjM1Y2NhNmU1MzdjYmQ0ZDgxMWY1NTgzYjI5NzgzZDhhNmQ5NGNkMzFiZTcwZDZmNTI2YzEwZmYwOWM2ZmE3Y2UwNjk3OTVhM2ZjZDA1MTFmZDVmY2I1NjRiY2M4MGVhOWM3OGYzOGI4MDAxMjUzOWQ4YTRkZGY2ZmU4MWU5Y2RkYjdmNTBkYmJiYmNjN2U1ZDg2MDk3Y2NmNGVjNDkxODlmYjhiZjMxOGJlNmQ1YTA3MTVkNTE2YjQ5YWYxOTEyNThjZDMyZGM4MzNjZTZlYjQ2NzNjMDNhMTliYmFjZTg4Y2M1NDg5NWY2MzZjYzBjMWVjODkwOTZkMTFjZTIzNWEyNjVjYTE3NjQyMzJhNjg5YWU4IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDlfMworcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjE1MzY6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmZDMyNjQyOWRmOWI4OTBlMDliNTRiMThiOGYzNGYxZTI0IjoiZTg5YmIwMzJjNmNlNjIyY2JkYjUzYmM5NDY2MDE0ZWE3N2Y3NzdjMCI6IjgxZWJkZDk1MDU0YjBjODIyZWY5YWQ3NjkzZjVhODdhZGZiNGI0YzRjZTcwZGYyZGY4NGVkNDljMDRkYTU4YmE1ZmMyMGExOWUxYTZlOGI3YTM5MDBiMjI3OTZkYzRlODY5ZWU2YjQyNzkyZDE1YThlY2ViNTZjMDljNjk5MTRlODEzY2VhOGY2OTMxZTRiOGVkNmY0MjFhZjI5OGQ1OTVjOTdmNDc4OWM3Y2FhNjEyYzdlZjM2MDk4NGMyMWI5M2VkYzU0MDEwNjhiNWFmNGM3OGE4NzcxYjk4NGQ1M2I4ZWE4YWRmMmY2YTdkNGEwYmE3NmM3NWUxZGQ5ZjY1OGYyMGRlZDRhNDYwNzFkNDZkNzc5MWI1NjgwM2Q4ZmVhN2YwYjBmOGU0MWFlM2YwOTM4M2E2Zjk1ODVmZTc3NTNlYWFmZmQyYmY5NDU2MzEwOGJlZWNjMjA3YmJiNTM1ZjVmY2M3MDVmMGRkZTlmNzA4YzYyZjQ5YTljOTAzNzFkMyI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSA5XzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoxNTM2OjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZjE0NTliNWYwYzkyZjAxYTBmNzIzYTJlNTY2MjQ4NGQ4ZjhjMGEyMGZjMjlkYWQ2YWNkNDNiYjVmM2VmZmRmNGUxYjYzZTA3ZmRmZTY2MjhkMGQ3NGNhMTliZjJkNjllNGEwYWJmODZkMjkzOTI1YTc5Njc3MmY4MDg4ZSI6IjYwNmYzYjk5YzBiOWNjZDc3MWVhYTI5ZWEwZTRjODg0ZjMxODljY2MiOiJiY2MzNWY5NGNkZTY2Y2IxMTM2NjI1ZDYyNWI5NDQzMmEzNWIyMmYzZDJmYTExYTYxM2ZmMGZjYTViZDU3Zjg3YjkwMmNjZGMxY2QwYWViY2IwNzE1ZWU4NjlkMWQxZmUzOTVmNjc5MzAwM2Y1ZWNhNDY1MDU5Yzg4NjYwZDQ0NmZmNWYwODE4NTUyMDIyNTU3ZTM4YzA4YTY3ZWFkOTkxMjYyMjU0ZjEwNjgyOTc1ZWM1NjM5Nzc2ODUzN2Y0OTc3YWY2ZDVmNmFhY2ViN2ZiMjVkZWM1OTM3MjMwMjMxZmQ4OTc4YWY0OTExOWEyOWYyOWU0MjRhYjgyNzJiNDc1NjI3OTJkNWM5NGY3NzRiODgyOWQwYjBkOWYxYThjOWVkZGYzNzU3NGQ1ZmEyNDhlZWZhOWM1MjcxZmM1ZWMyNTc5YzgxYmRkNjFiNDEwZmE2MWZlMzZlNDI0MjIxYzExM2FkZGIyNzU2NjRjODAxZDM0Y2E4YzYzNTFlNGE4NTgiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgOV81Citwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MTUzNjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjUzZTZlOGM3MjlkNmY5YzMxOWRkMzE3ZTc0YjBkYjhlNGNjY2EyNWYzYzgzMDU3NDZlMTM3YWM2M2E2M2VmMzczOWU3YjU5NWFiYjk2ZThkNTVlNTRmN2JkNDFhYjQzMzM3OGZmYjkxMWQiOiJmY2JjNDIxNDAyZTllY2FiYzYwODJhZmE0MGJhNWYyNjUyMmM4NDBlIjoiMjMyYWZiYzkyN2ZhMDhjMmY2YTI3Yjg3ZDRhNWNiMDljMDdkYzI2ZmFlNzNkNzNhOTA1NTg4MzlmNGZkNjZkMjgxYjg3ZWM3MzRiY2UyMzdiYTE2NjY5OGVkODI5MTA2YTdkZTY5NDJjZDZjZGNlNzhmZWQ4ZDJlNGQ4MTQyOGU2NjQ5MGQwMzYyNjRjZWY5MmFmOTQxZDNlMzUwNTVmZTM5ODFlMTRkMjljYmI5YTRmNjc0NzMwNjNiYWVjNzlhMTE3OWY1YTE3YzljMTgzMmYyODM4ZmQ3ZDVlNTliYjk2NTlkNTZkY2U4YTAxOWVkZWYxYmIzYWNjYzY5N2NjNmNjN2E3NzhmNjBhMDY0YzdmNmY1ZDUyOWM2MjEwMjYyZTAwM2RlNTgzZTgxZTMxNjdiODk5NzFmYjhjMGUxNWQ0NGZmZmVmODliNTNkOGQ2NGRkNzk3ZDE1OWI1NmQyYjA4ZWE1MzA3ZWExMmMyNDFiZDU4ZDRlZTI3OGExZjJlIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDlfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjE1MzY6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiNmIyOGVhMjE5OGQwYzEwMDhiYzY0IjoiMjNhYWRlMGUxZTA4YmI5YjlhNzhkMjMwMmE1MmY5YzIxYjJlMWJhMiI6IjQzOGNjN2RjMDhhNjhkYTI0OWU0MjUwNWY4NTczYmE2MGUyYzI3NzNkNWIyOTBmNGNmOWRmZjcxOGU4NDIwODFjMzgzZTY3MDI0YTBmMjk1OTRlYTk4N2I5ZDI1ZTRiNzM4ZjI4NTk3MGQxOTVhYmIzYThjODA1NGUzZDc5ZDZiOWM5YTgzMjdiYTU5NmYxMjU5ZTI3MTI2Njc0NzY2OTA3ZDhkNTgyZmYzYTg0NzYxNTQ5MjlhZGIxZTZkMTIzNWIyY2NiNGVjOGY2NjNiYTljYzY3MGE5MmJlYmQ4NTNjOGRiZjY5YzY0MzZkMDE2ZjYxYWRkODM2ZTk0NzMyNDUwNDM0MjA3ZjlmZDRjNDNkZWMyYTEyYTk1OGVmYTAxZWZlMjY2OTg5OWI1ZTYwNGMyNTVjNTVmYjcxNjZkZTU1ODllMzY5NTk3YmIwOTE2OGMwNmRkNWRiMTc3ZTA2YTE3NDBlYjJkNWM4MmZhZWNhNmQ5MmZjZWU5OTMxYmE5ZiI6MAorCitSU0FFUy1PQUVQIEVuY3J5cHRpb24gRXhhbXBsZSAxMF8xCitwa2NzMV9yc2Flc19vYWVwX2VuY3J5cHQ6MjA0ODoxNjoiYWU0NWVkNTYwMWNlYzZiOGNjMDVmODAzOTM1YzY3NGRkYmUwZDc1YzRjMDlmZDc5NTFmYzZiMGNhZWMzMTNhOGRmMzk5NzBjNTE4YmZmYmE1ZWQ2OGYzZjBkN2YyMmE0MDI5ZDQxM2YxYWUwN2U0ZWJlOWU0MTc3Y2UyM2U3ZjU0MDRiNTY5ZTRlZTFiZGNmM2MxZmIwM2VmMTEzODAyZDRmODU1ZWI5YjUxMzRiNWE3YzgwODVhZGNhZTZmYTJmYTE0MTdlYzM3NjNiZTE3MWIwYzYyYjc2MGVkZTIzYzEyYWQ5MmI5ODA4ODRjNjQxZjVhOGZhYzI2YmRhZDRhMDMzODFhMjJmZTFiNzU0ODg1MDk0YzgyNTA2ZDQwMTlhNTM1YTI4NmFmZWIyNzFiYjliYTU5MmRlMThkY2Y2MDBjMmFlZWFlNTZlMDJmN2NmNzlmYzE0Y2YzYmRjN2NkODRmZWJiYmY5NTBjYTkwMzA0YjIyMTlhN2FhMDYzYWVmYTJjM2MxOTgwZTU2MGNkNjRhZmU3Nzk1ODViNjEwNzY1N2I5NTc4NTdlZmRlNjAxMDk4OGFiN2RlNDE3ZmM4OGQ4ZjM4NGM0ZTZlNzJjM2Y5NDNlMGMzMWMwYzRhNWNjMzZmODc5ZDhhM2FjOWQ3ZDU5ODYwZWFhZGE2YjgzYmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiOGJiYTZiZjgyYTZjMGY4NmQ1ZjE3NTZlOTc5NTY4NzBiMDg5NTNiMDZiNGViMjA1YmMxNjk0ZWUiOiI0N2UxYWI3MTE5ZmVlNTZjOTVlZTVlYWFkODZmNDBkMGFhNjNiZDMzIjoiNTNlYTVkYzA4Y2QyNjBmYjNiODU4NTY3Mjg3ZmE5MTU1MmMzMGIyZmViZmJhMjEzZjBhZTg3NzAyZDA2OGQxOWJhYjA3ZmU1NzQ1MjNkZmI0MjEzOWQ2OGMzYzVhZmVlZTBiZmU0Y2I3OTY5Y2JmMzgyYjgwNGQ2ZTYxMzk2MTQ0ZTJkMGU2MDc0MWY4OTkzYzMwMTRiNThiOWIxOTU3YThiYWJjZDIzYWY4NTRmNGMzNTZmYjE2NjJhYTcyYmZjYzdlNTg2NTU5ZGM0MjgwZDE2MGMxMjY3ODVhNzIzZWJlZWJlZmY3MWYxMTU5NDQ0MGFhZWY4N2QxMDc5M2E4Nzc0YTIzOWQ0YTA0Yzg3ZmUxNDY3YjlkYWY4NTIwOGVjNmM3MjU1Nzk0YTk2Y2MyOTE0MmY5YThiZDQxOGUzYzFmZDY3MzQ0YjBjZDA4MjlkZjNiMmJlYzYwMjUzMTk2MjkzYzZiMzRkM2Y3NWQzMmYyMTNkZDQ1YzYyNzNkNTA1YWRmNGNjZWQxMDU3Y2I3NThmYzI2YWVlZmE0NDEyNTVlZDRlNjRjMTk5ZWUwNzVlN2YxNjY0NjE4MmZkYjQ2NDczOWI2OGFiNWRhZmYwZTYzZTk1NTIwMTY4MjRmMDU0YmY0ZDNjOGM5MGE5N2JiNmI2NTUzMjg0ZWI0MjlmY2MiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgMTBfMgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjIwNDg6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImU2YWQxODFmMDUzYjU4YTkwNGYyNDU3NTEwMzczZTU3IjoiNmQxN2Y1YjRjMWZmYWMzNTFkMTk1YmY3YjA5ZDA5ZjA5YTQwNzljZiI6ImEyYjFhNDMwYTlkNjU3ZTJmYTFjMmJiNWVkNDNmZmIyNWMwNWEzMDhmZTkwOTNjMDEwMzE3OTVmNTg3NDQwMDExMDgyOGFlNThmYjliNTgxY2U5ZGRkZDNlNTQ5YWUwNGEwOTg1NDU5YmRlNmM2MjY1OTRlN2IwNWRjNDI3OGIyYTE0NjVjMTM2ODQwODgyM2M4NWU5NmRjNjZjM2EzMDk4M2M2Mzk2NjRmYzQ1NjlhMzdmZTIxZTVhMTk1YjU3NzZlZWQyZGY4ZDhkMzYxYWY2ODZlNzUwMjI5YmJkNjYzZjE2MTg2OGE1MDYxNWUwYzMzN2JlYzBjYTM1ZmVjMGJiMTljMzZlYjJlMGJiY2MwNTgyZmExZDkzYWFjZGIwNjEwNjNmNTlmMmNlMWVlNDM2MDVlNWQ4OWVjYTE4M2QyYWNkZmU5ZjgxMDExMDIyYWQzYjQzYTNkZDQxN2RhYzk0YjRlMTFlYTgxYjE5Mjk2NmU5NjZiMTgyMDgyZTcxOTY0NjA3YjRmODAwMmYzNjI5OTg0NGExMWYyYWUwZmFlYWMyZWFlNzBmOGY0Zjk4MDg4YWNkY2QwYWM1NTZlOWZjY2M1MTE1MjE5MDhmYWQyNmYwNGM2NDIwMTQ1MDMwNTc3ODc1OGIwNTM4YmY4YjViYjE0NGE4MjhlNjI5Nzk1IjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDEwXzMKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoyMDQ4OjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1MTBhMmNmNjBlODY2ZmEyMzQwNTUzYzk0ZWEzOWZiYzI1NjMxMWU4M2U5NDQ1NGI0MTI0IjoiMzg1Mzg3NTE0ZGVjY2M3Yzc0MGRkOGNkZjlkYWVlNDlhMWNiZmQ1NCI6Ijk4ODZjM2U2NzY0YThiOWE4NGU4NDE0OGViZDhjM2IxYWE4MDUwMzgxYTc4ZjY2ODcxNGMxNmQ5Y2ZkMmE2ZWRjNTY5NzljNTM1ZDlkZWUzYjQ0Yjg1YzE4YmU4OTI4OTkyMzcxNzExNDcyMjE2ZDk1ZGRhOThkMmVlODM0N2M5YjE0ZGZmZGZmODRhYTQ4ZDI1YWMwNmY3ZDdlNjUzOThhYzk2N2IxY2U5MDkyNWY2N2RjZTA0OWI3ZjgxMmRiMDc0Mjk5N2E3NGQ0NGZlODFkYmUwZTdhM2ZlYWYyZTVjNDBhZjg4OGQ1NTBkZGJiZTNiYzIwNjU3YTI5NTQzZjhmYzI5MTNiOWJkMWE2MWIyYWIyMjU2ZWM0MDliYmQ3ZGMwZDE3NzE3ZWEyNWM0M2Y0MmVkMjdkZjg3MzhiZjRhZmM2NzY2ZmY3YWZmMDg1OTU1NWVlMjgzOTIwZjRjOGE2M2M0YTczNDBjYmFmZGRjMzM5ZWNkYjRiMDUxNTAwMmY5NmM5MzJiNWI3OTE2N2FmNjk5YzBhZDNmY2NmZGYwZjQ0ZTg1YTcwMjYyYmYyZTE4ZmUzNGI4NTA1ODk5NzVlODY3ZmY5NjlkNDhlYWJmMjEyMjcxNTQ2Y2RjMDVhNjllY2I1MjZlNTI4NzBjODM2ZjMwN2JkNzk4NzgwZWRlIjowCisKK1JTQUVTLU9BRVAgRW5jcnlwdGlvbiBFeGFtcGxlIDEwXzQKK3BrY3MxX3JzYWVzX29hZXBfZW5jcnlwdDoyMDQ4OjE2OiJhZTQ1ZWQ1NjAxY2VjNmI4Y2MwNWY4MDM5MzVjNjc0ZGRiZTBkNzVjNGMwOWZkNzk1MWZjNmIwY2FlYzMxM2E4ZGYzOTk3MGM1MThiZmZiYTVlZDY4ZjNmMGQ3ZjIyYTQwMjlkNDEzZjFhZTA3ZTRlYmU5ZTQxNzdjZTIzZTdmNTQwNGI1NjllNGVlMWJkY2YzYzFmYjAzZWYxMTM4MDJkNGY4NTVlYjliNTEzNGI1YTdjODA4NWFkY2FlNmZhMmZhMTQxN2VjMzc2M2JlMTcxYjBjNjJiNzYwZWRlMjNjMTJhZDkyYjk4MDg4NGM2NDFmNWE4ZmFjMjZiZGFkNGEwMzM4MWEyMmZlMWI3NTQ4ODUwOTRjODI1MDZkNDAxOWE1MzVhMjg2YWZlYjI3MWJiOWJhNTkyZGUxOGRjZjYwMGMyYWVlYWU1NmUwMmY3Y2Y3OWZjMTRjZjNiZGM3Y2Q4NGZlYmJiZjk1MGNhOTAzMDRiMjIxOWE3YWEwNjNhZWZhMmMzYzE5ODBlNTYwY2Q2NGFmZTc3OTU4NWI2MTA3NjU3Yjk1Nzg1N2VmZGU2MDEwOTg4YWI3ZGU0MTdmYzg4ZDhmMzg0YzRlNmU3MmMzZjk0M2UwYzMxYzBjNGE1Y2MzNmY4NzlkOGEzYWM5ZDdkNTk4NjBlYWFkYTZiODNiYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiY2RkMTkwZGEzYjdkMzAwZGY5YTA2ZTIyY2FhZTJhNzVmMTBjOTFmZjY2N2I3YzE2YmRlOGI1MzA2NGEyNjQ5YTk0MDQ1YzkiOiI1Y2FjYTZhMGY3NjQxNjFhOTY4NGY4NWQ5MmI2ZTBlZjM3Y2E4YjY1IjoiNjMxOGU5ZmI1YzBkMDVlNTMwN2UxNjgzNDM2ZTkwMzI5M2FjNDY0MjM1OGFhYTIyM2Q3MTYzMDEzYWJhODdlMmRmZGE4ZTYwYzY4NjBlMjlhMWU5MjY4NjE2M2VhMGI5MTc1ZjMyOWNhM2IxMzFhMWVkZDNhNzc3NTlhOGI5N2JhZDZhNGY4ZjQzOTZmMjhjZjZmMzljYTU4MTEyZTQ4MTYwZDZlMjAzZGFhNTg1NmYzYWNhNWZmZWQ1NzdhZjQ5OTQwOGUzZGZkMjMzZTNlNjA0ZGJlMzRhOWM0YzkwODJkZTY1NTI3Y2FjNjMzMWQyOWRjODBlMDUwOGEwZmE3MTIyZTdmMzI5ZjZjY2E1Y2ZhMzRkNGQxZGE0MTc4MDU0NTdlMDA4YmVjNTQ5ZTQ3OGZmOWUxMmE3NjNjNDc3ZDE1YmJiNzhmNWI2OWJkNTc4MzBmYzJjNGVkNjg2ZDc5YmM3MmE5NWQ4NWY4ODEzNGM2YjBhZmU1NmE4Y2NmYmM4NTU4MjhiYjMzOWJkMTc5MDljZjFkNzBkZTMzMzVhZTA3MDM5MDkzZTYwNmQ2NTUzNjVkZTY1NTBiODcyY2Q2ZGUxZDQ0MGVlMDMxYjYxOTQ1ZjYyOWFkOGEzNTNiMGQ0MDkzOWU5NmEzYzQ1MGQyYThkNWVlZTlmNjc4MDkzYzgiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgMTBfNQorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjIwNDg6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImE3ZGQ2YzdkYzI0YjQ2ZjlkZDVmMWU5MWFkYTRjM2IzZGY5NDdlODc3MjMyYTkiOiI5NWJjYTllMzg1OTg5NGIzZGQ4NjlmYTdlY2Q1YmJjNjQwMWJmM2U0IjoiNzUyOTA4NzJjY2ZkNGE0NTA1NjYwZDY1MWY1NmRhNmRhYTA5Y2ExMzAxZDg5MDYzMmY2YTk5MmYzZDU2NWNlZTQ2NGFmZGVkNDBlZDNiNWJlOTM1NjcxNGVhNWFhNzY1NWY0YTEzNjZjMmYxN2M3MjhmNmYyYzVhNWQxZjhlMjg0MjliYzRlNmY4ZjJjZmY4ZGE4ZGMwZTBhOTgwOGU0NWZkMDllYTJmYTQwY2IyYjZjZTZmZmZmNWMwZTE1OWQxMWI2OGQ5MGE4NWY3Yjg0ZTEwM2IwOWU2ODI2NjY0ODBjNjU3NTA1YzA5MjkyNTk0NjhhMzE0Nzg2ZDc0ZWFiMTMxNTczY2YyMzRiZjU3ZGI3ZDllNjZjYzY3NDgxOTJlMDAyZGMwZGVlYTkzMDU4NWYwODMxZmRjZDliYzMzZDUxZjc5ZWQyZmZjMTZiY2Y0ZDU5ODEyZmNlYmNhYTNmOTA2OWIwZTQ0NTY4NmQ2NDRjMjVjY2Y2M2I0NTZlZTVmYTZmZmU5NmYxOWNkZjc1MWZlZDllYWYzNTk1Nzc1NGRiZjRiZmVhNTIxNmFhMTg0NGRjNTA3Y2IyZDA4MGU3MjJlYmExNTAzMDhjMmI1ZmYxMTkzNjIwZjE3NjZlY2Y0NDgxYmFmYjk0M2JkMjkyODc3ZjIxMzZjYTQ5NGFiYTAiOjAKKworUlNBRVMtT0FFUCBFbmNyeXB0aW9uIEV4YW1wbGUgMTBfNgorcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0OjIwNDg6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImVhZjFhNzNhMWIwYzQ2MDk1MzdkZTY5Y2Q5MjI4YmJjZmI5YThjYThjNmMzZWZhZjA1NmZlNGE3ZjQ2MzRlZDAwYjdjMzllYzY5MjJkN2I4ZWEyYzA0ZWJhYyI6IjlmNDdkZGY0MmU5N2VlYTg1NmE5YmRiYzcxNGViM2FjMjJmNmViMzIiOiIyZDIwN2E3MzQzMmE4ZmI0YzAzMDUxYjNmNzNiMjhhNjE3NjQwOThkZmEzNGM0N2EyMDk5NWY4MTE1YWE2ODE2Njc5YjU1N2U4MmRiZWU1ODQ5MDhjNmU2OTc4MmQ3ZGViMzRkYmQ2NWFmMDYzZDU3ZmNhNzZhNWZkMDY5NDkyZmQ2MDY4ZDk5ODRkMjA5MzUwNTY1YTYyZTVjNzdmMjMwMzhjMTJjYjEwYzY2MzQ3MDliNTQ3YzQ2ZjZiNGE3MDliZDg1Y2ExMjJkNzQ0NjVlZjk3NzYyYzI5NzYzZTA2ZGJjN2E5ZTczOGM3OGJmY2EwMTAyZGM1ZTc5ZDY1Yjk3M2YyODI0MGNhYWIyZTE2MWE3OGI1N2QyNjI0NTdlZDgxOTVkNTNlM2M3YWU5ZGEwMjE4ODNjNmRiN2MyNGFmZGQyMzIyZWFjOTcyYWQzYzM1NGM1ZmNlZjFlMTQ2YzNhMDI5MGZiNjdhZGYwMDcwNjZlMDA0MjhkMmNlYzE4Y2U1OGY5MzI4Njk4ZGVmZWY0YjJlYjVlYzc2OTE4ZmRlMWMxOThjYmIzOGI3YWZjNjc2MjZhOWFlZmVjNDMyMmJmZDkwZDI1NjM0ODFjOWEyMjFmNzhjODI3MmM4MmQxYjYyYWI5MTRlMWM2OWY2YWY2ZWYzMGNhNTI2MGRiNGE0NiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgSW50Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNDoxNjoiZWVjZmFlODFiMWI5YjNjOTA4ODEwYjEwYTFiNTYwMDE5OWViOWY0NGFlZjRmZGE0OTNiODFhOWUzZDg0ZjYzMjEyNGVmMDIzNmU1ZDFlM2I3ZTI4ZmFlN2FhMDQwYTJkNWIyNTIxNzY0NTlkMWYzOTc1NDFiYTJhNThmYjY1OTkiOjE2OiJjOTdmYjFmMDI3ZjQ1M2Y2MzQxMjMzZWFhYWQxZDkzNTNmNmM0MmQwODg2NmIxZDA1YTBmMjAzNTAyOGI5ZDg2OTg0MGI0MTY2NmI0MmU5MmVhMGRhM2I0MzIwNGI1Y2ZjZTMzNTI1MjRkMDQxNmE1YTQ0MWU3MDBhZjQ2MTUwMyI6MTY6ImJiZjgyZjA5MDY4MmNlOWMyMzM4YWMyYjlkYTg3MWY3MzY4ZDA3ZWVkNDEwNDNhNDQwZDZiNmYwNzQ1NGY1MWZiOGRmYmFhZjAzNWMwMmFiNjFlYTQ4Y2VlYjZmY2Q0ODc2ZWQ1MjBkNjBlMWVjNDYxOTcxOWQ4YTViOGI4MDdmYWZiOGUwYTNkZmM3Mzc3MjNlZTZiNGI3ZDkzYTI1ODRlZTZhNjQ5ZDA2MDk1Mzc0ODgzNGIyNDU0NTk4Mzk0ZWUwYWFiMTJkN2I2MWE1MWY1MjdhOWE0MWY2YzE2ODdmZTI1MzcyOThjYTJhOGY1OTQ2ZjhlNWZkMDkxZGJkY2IiOjE2OiIxMSI6TUJFRFRMU19NRF9TSEExOiJkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OSI6ImFhZmQxMmY2NTljYWU2MzQ4OWI0NzllNTA3NmRkZWMyZjA2Y2I1OGYiOiIxMjUzZTA0ZGMwYTUzOTdiYjQ0YTdhYjg3ZTliZjJhMDM5YTMzZDFlOTk2ZmM4MmE5NGNjZDMwMDc0Yzk1ZGY3NjM3MjIwMTcwNjllNTI2OGRhNWQxYzBiNGY4NzJjZjY1M2MxMWRmODIzMTRhNjc5NjhkZmVhZTI4ZGVmMDRiYjZkODRiMWMzMWQ2NTRhMTk3MGU1NzgzYmQ2ZWI5NmEwMjRjMmNhMmY0YTkwZmU5ZjJlZjVjOWMxNDBlNWJiNDhkYTk1MzZhZDg3MDBjODRmYzkxMzBhZGVhNzRlNTU4ZDUxYTc0ZGRmODVkOGI1MGRlOTY4MzhkNjA2M2UwOTU1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAxXzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI0OjE2OiJkMzI3MzdlNzI2N2ZmZTEzNDFiMmQ1YzBkMTUwYTgxYjU4NmZiMzEzMmJlZDJmOGQ1MjYyODY0YTljYjlmMzBhZjM4YmU0NDg1OThkNDEzYTE3MmVmYjgwMmMyMWFjZjFjMTFjNTIwYzJmMjZhNDcxZGNhZDIxMmVhYzdjYTM5ZCI6MTY6ImNjODg1M2QxZDU0ZGE2MzBmYWMwMDRmNDcxZjI4MWM3Yjg5ODJkODIyNGE0OTBlZGJlYjMzZDNlM2Q1Y2M5M2M0NzY1NzAzZDFkZDc5MTY0MmYxZjExNmEwZGQ4NTJiZTI0MTliMmFmNzJiZmU5YTAzMGU4NjBiMDI4OGI1ZDc3IjoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI2NjI4MTk0ZTEyMDczZGIwM2JhOTRjZGE5ZWY5NTMyMzk3ZDUwZGJhNzliOTg3MDA0YWZlZmUzNCI6IjE4Yjc3NmVhMjEwNjlkNjk3NzZhMzNlOTZiYWQ0OGUxZGRhMGE1ZWYiOiIzNTRmZTY3YjRhMTI2ZDVkMzVmZTM2Yzc3Nzc5MWEzZjdiYTEzZGVmNDg0ZTJkMzkwOGFmZjcyMmZhZDQ2OGZiMjE2OTZkZTk1ZDBiZTkxMWMyZDMxNzRmOGFmY2MyMDEwMzVmN2I2ZDhlNjk0MDJkZTU0NTE2MThjMjFhNTM1ZmE5ZDdiZmM1YjhkZDlmYzI0M2Y4Y2Y5MjdkYjMxMzIyZDZlODgxZWFhOTFhOTk2MTcwZTY1N2EwNWEyNjY0MjZkOThjODgwMDNmODQ3N2MxMjI3MDk0YTBkOWZhMWU4YzQwMjQzMDljZTFlY2NjYjUyMTAwMzVkNDdhYzcyZThhIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAxXzIKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI0OjE2OiJkMzI3MzdlNzI2N2ZmZTEzNDFiMmQ1YzBkMTUwYTgxYjU4NmZiMzEzMmJlZDJmOGQ1MjYyODY0YTljYjlmMzBhZjM4YmU0NDg1OThkNDEzYTE3MmVmYjgwMmMyMWFjZjFjMTFjNTIwYzJmMjZhNDcxZGNhZDIxMmVhYzdjYTM5ZCI6MTY6ImNjODg1M2QxZDU0ZGE2MzBmYWMwMDRmNDcxZjI4MWM3Yjg5ODJkODIyNGE0OTBlZGJlYjMzZDNlM2Q1Y2M5M2M0NzY1NzAzZDFkZDc5MTY0MmYxZjExNmEwZGQ4NTJiZTI0MTliMmFmNzJiZmU5YTAzMGU4NjBiMDI4OGI1ZDc3IjoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI3NTBjNDA0N2Y1NDdlOGU0MTQxMTg1NjUyMzI5OGFjOWJhZTI0NWVmYWYxMzk3ZmJlNTZmOWRkNSI6IjBjYzc0MmNlNGE5YjdmMzJmOTUxYmNiMjUxZWZkOTI1ZmU0ZmUzNWYiOiI2NDBkYjFhY2M1OGUwNTY4ZmU1NDA3ZTVmOWI3MDFkZmY4YzNjOTFlNzE2YzUzNmZjN2ZjZWM2Y2I1YjcxYzExNjU5ODhkNGEyNzllMTU3N2Q3MzBmYzdhMjk5MzJlM2YwMGM4MTUxNTIzNmQ4ZDhlMzEwMTdhN2EwOWRmNDM1MmQ5MDRjZGViNzlhYTU4M2FkY2MzMWVhNjk4YTRjMDUyODNkYWJhOTA4OWJlNTQ5MWY2N2MxYTRlZTQ4ZGM3NGJiYmU2NjQzYWVmODQ2Njc5YjRjYjM5NWEzNTJkNWVkMTE1OTEyZGY2OTZmZmUwNzAyOTMyOTQ2ZDcxNDkyYjQ0IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAxXzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI0OjE2OiJkMzI3MzdlNzI2N2ZmZTEzNDFiMmQ1YzBkMTUwYTgxYjU4NmZiMzEzMmJlZDJmOGQ1MjYyODY0YTljYjlmMzBhZjM4YmU0NDg1OThkNDEzYTE3MmVmYjgwMmMyMWFjZjFjMTFjNTIwYzJmMjZhNDcxZGNhZDIxMmVhYzdjYTM5ZCI6MTY6ImNjODg1M2QxZDU0ZGE2MzBmYWMwMDRmNDcxZjI4MWM3Yjg5ODJkODIyNGE0OTBlZGJlYjMzZDNlM2Q1Y2M5M2M0NzY1NzAzZDFkZDc5MTY0MmYxZjExNmEwZGQ4NTJiZTI0MTliMmFmNzJiZmU5YTAzMGU4NjBiMDI4OGI1ZDc3IjoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJkOTRhZTA4MzJlNjQ0NWNlNDIzMzFjYjA2ZDUzMWE4MmIxZGI0YmFhZDMwZjc0NmRjOTE2ZGYyNGQ0ZTNjMjQ1MWZmZjU5YTY0MjNlYjBlMWQwMmQ0ZmU2NDZjZjY5OWRmZDgxOGM2ZTk3YjA1MSI6IjI1MTRkZjQ2OTU3NTVhNjdiMjg4ZWFmNDkwNWMzNmVlYzY2ZmQyZmQiOiI0MjM3MzZlZDAzNWY2MDI2YWYyNzZjMzVjMGIzNzQxYjM2NWU1Zjc2Y2EwOTFiNGU4YzI5ZTJmMGJlZmVlNjAzNTk1YWE4MzIyZDYwMmQyZTYyNWU5NWViODFiMmYxYzk3MjRlODIyZWNhNzZkYjg2MThjZjA5YzUzNDM1MDNhNDM2MDgzNWI1OTAzYmM2MzdlMzg3OWZiMDVlMGVmMzI2ODVkNWFlYzUwNjdjZDdjYzk2ZmU0YjI2NzBiNmVhYzMwNjZiMWZjZjU2ODZiNjg1ODlhYWZiN2Q2MjliMDJkOGY4NjI1Y2EzODMzNjI0ZDQ4MDBmYjA4MWIxY2Y5NGViIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAxXzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI0OjE2OiJkMzI3MzdlNzI2N2ZmZTEzNDFiMmQ1YzBkMTUwYTgxYjU4NmZiMzEzMmJlZDJmOGQ1MjYyODY0YTljYjlmMzBhZjM4YmU0NDg1OThkNDEzYTE3MmVmYjgwMmMyMWFjZjFjMTFjNTIwYzJmMjZhNDcxZGNhZDIxMmVhYzdjYTM5ZCI6MTY6ImNjODg1M2QxZDU0ZGE2MzBmYWMwMDRmNDcxZjI4MWM3Yjg5ODJkODIyNGE0OTBlZGJlYjMzZDNlM2Q1Y2M5M2M0NzY1NzAzZDFkZDc5MTY0MmYxZjExNmEwZGQ4NTJiZTI0MTliMmFmNzJiZmU5YTAzMGU4NjBiMDI4OGI1ZDc3IjoxNjoiYThiM2IyODRhZjhlYjUwYjM4NzAzNGE4NjBmMTQ2YzQ5MTlmMzE4NzYzY2Q2YzU1OThjOGFlNDgxMWExZTBhYmM0YzdlMGIwODJkNjkzYTVlN2ZjZWQ2NzVjZjQ2Njg1MTI3NzJjMGNiYzY0YTc0MmM2YzYzMGY1MzNjOGNjNzJmNjJhZTgzM2M0MGJmMjU4NDJlOTg0YmI3OGJkYmY5N2MwMTA3ZDU1YmRiNjYyZjVjNGUwZmFiOTg0NWNiNTE0OGVmNzM5MmRkM2FhZmY5M2FlMWU2YjY2N2JiM2Q0MjQ3NjE2ZDRmNWJhMTBkNGNmZDIyNmRlODhkMzlmMTZmYiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI1MmU2NTBkOThlN2YyYTA0OGI0Zjg2ODUyMTUzYjk3ZTAxZGQzMTZmMzQ2YTE5ZjY3YTg1IjoiYzQ0MzVhM2UxYTE4YTY4YjY4MjA0MzYyOTBhMzdjZWZiODVkYjNmYiI6IjQ1ZWFkNGNhNTUxZTY2MmM5ODAwZjFhY2E4MjgzYjA1MjVlNmFiYWUzMGJlNGI0YWJhNzYyZmE0MGZkM2QzOGUyMmFiZWZjNjk3OTRmNmViYmJjMDVkZGJiMTEyMTYyNDdkMmY0MTJmZDBmYmE4N2M2ZTNhY2Q4ODg4MTM2NDZmZDBlNDhlNzg1MjA0ZjljM2Y3M2Q2ZDgyMzk1NjI3MjJkZGRkODc3MWZlYzQ4YjgzYTMxZWU2ZjU5MmM0Y2ZkNGJjODgxNzRmM2IxM2ExMTJhYWUzYjlmN2I4MGUwZmM2ZjcyNTViYTg4MGRjN2Q4MDIxZTIyYWQ2YTg1ZjA3NTUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDFfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjQ6MTY6ImQzMjczN2U3MjY3ZmZlMTM0MWIyZDVjMGQxNTBhODFiNTg2ZmIzMTMyYmVkMmY4ZDUyNjI4NjRhOWNiOWYzMGFmMzhiZTQ0ODU5OGQ0MTNhMTcyZWZiODAyYzIxYWNmMWMxMWM1MjBjMmYyNmE0NzFkY2FkMjEyZWFjN2NhMzlkIjoxNjoiY2M4ODUzZDFkNTRkYTYzMGZhYzAwNGY0NzFmMjgxYzdiODk4MmQ4MjI0YTQ5MGVkYmViMzNkM2UzZDVjYzkzYzQ3NjU3MDNkMWRkNzkxNjQyZjFmMTE2YTBkZDg1MmJlMjQxOWIyYWY3MmJmZTlhMDMwZTg2MGIwMjg4YjVkNzciOjE2OiJhOGIzYjI4NGFmOGViNTBiMzg3MDM0YTg2MGYxNDZjNDkxOWYzMTg3NjNjZDZjNTU5OGM4YWU0ODExYTFlMGFiYzRjN2UwYjA4MmQ2OTNhNWU3ZmNlZDY3NWNmNDY2ODUxMjc3MmMwY2JjNjRhNzQyYzZjNjMwZjUzM2M4Y2M3MmY2MmFlODMzYzQwYmYyNTg0MmU5ODRiYjc4YmRiZjk3YzAxMDdkNTViZGI2NjJmNWM0ZTBmYWI5ODQ1Y2I1MTQ4ZWY3MzkyZGQzYWFmZjkzYWUxZTZiNjY3YmIzZDQyNDc2MTZkNGY1YmExMGQ0Y2ZkMjI2ZGU4OGQzOWYxNmZiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhkYTg5ZmQ5ZTVmOTc0YTI5ZmVmZmI0NjJiNDkxODBmNmNmOWU4MDIiOiJiMzE4YzQyZGYzYmUwZjgzZmVhODIzZjVhN2I0N2VkNWU0MjVhM2I1IjoiMzZmNmUzNGQ5NGE4ZDM0ZGFhY2JhMzNhMjEzOWQwMGFkODVhOTM0NWE4NjA1MWU3MzA3MTYyMDA1NmI5MjBlMjE5MDA1ODU1YTIxM2EwZjIzODk3Y2RjZDczMWI0NTI1N2M3NzdmZTkwODIwMmJlZmRkMGI1ODM4NmIxMjQ0ZWEwY2Y1MzlhMDVkNWQxMDMyOWRhNDRlMTMwMzBmZDc2MGRjZDY0NGNmZWYyMDk0ZDE5MTBkM2Y0MzNlMWM3YzZkZDE4YmMxZjJkZjdmNjQzZDY2MmZiOWRkMzdlYWQ5MDU5MTkwZjRmYTY2Y2EzOWU4NjljNGViNDQ5Y2JkYzQzOSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMV82Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNDoxNjoiZDMyNzM3ZTcyNjdmZmUxMzQxYjJkNWMwZDE1MGE4MWI1ODZmYjMxMzJiZWQyZjhkNTI2Mjg2NGE5Y2I5ZjMwYWYzOGJlNDQ4NTk4ZDQxM2ExNzJlZmI4MDJjMjFhY2YxYzExYzUyMGMyZjI2YTQ3MWRjYWQyMTJlYWM3Y2EzOWQiOjE2OiJjYzg4NTNkMWQ1NGRhNjMwZmFjMDA0ZjQ3MWYyODFjN2I4OTgyZDgyMjRhNDkwZWRiZWIzM2QzZTNkNWNjOTNjNDc2NTcwM2QxZGQ3OTE2NDJmMWYxMTZhMGRkODUyYmUyNDE5YjJhZjcyYmZlOWEwMzBlODYwYjAyODhiNWQ3NyI6MTY6ImE4YjNiMjg0YWY4ZWI1MGIzODcwMzRhODYwZjE0NmM0OTE5ZjMxODc2M2NkNmM1NTk4YzhhZTQ4MTFhMWUwYWJjNGM3ZTBiMDgyZDY5M2E1ZTdmY2VkNjc1Y2Y0NjY4NTEyNzcyYzBjYmM2NGE3NDJjNmM2MzBmNTMzYzhjYzcyZjYyYWU4MzNjNDBiZjI1ODQyZTk4NGJiNzhiZGJmOTdjMDEwN2Q1NWJkYjY2MmY1YzRlMGZhYjk4NDVjYjUxNDhlZjczOTJkZDNhYWZmOTNhZTFlNmI2NjdiYjNkNDI0NzYxNmQ0ZjViYTEwZDRjZmQyMjZkZTg4ZDM5ZjE2ZmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMjY1MjEwNTA4NDQyNzEiOiJlNGVjMDk4MmMyMzM2ZjNhNjc3ZjZhMzU2MTc0ZWIwY2U4ODdhYmMyIjoiNDJjZWUyNjE3YjFlY2VhNGRiM2Y0ODI5Mzg2ZmJkNjFkYWZiZjAzOGUxODBkODM3Yzk2MzY2ZGYyNGMwOTdiNGFiMGZhYzZiZGY1OTBkODIxYzlmMTA2NDJlNjgxYWQwNWI4ZDc4YjM3OGMwZjQ2Y2UyZmFkNjNmNzRlMGFkM2RmMDZiMDc1ZDdlYjVmNTYzNmY4ZDQwM2I5MDU5Y2E3NjFiNWM2MmJiNTJhYTQ1MDAyZWE3MGJhYWNlMDhkZWQyNDNiOWQ4Y2JkNjJhNjhhZGUyNjU4MzJiNTY1NjRlNDNhNmZhNDJlZDE5OWEwOTk3Njk3NDJkZjE1MzllODI1NSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMl8xCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNToxNjoiMDE1OWRiZGUwNGEzM2VmMDZmYjYwOGI4MGIxOTBmNGQzZTIyYmNjMTNhYzhlNGEwODEwMzNhYmZhNDE2ZWRiMGIzMzhhYTA4YjU3MzA5ZWE1YTUyNDBlN2RjNmU1NDM3OGM2OTQxNGMzMWQ5N2RkYjFmNDA2ZGIzNzY5Y2M0MWE0MyI6MTY6IjAxMmI2NTJmMzA0MDNiMzhiNDA5OTVmZDZmZjQxYTFhY2M4YWRhNzAzNzMyMzZiNzIwMmQzOWIyZWUzMGNmYjQ2ZGIwOTUxMWY2ZjMwN2NjNjFjYzIxNjA2YzE4YTc1YjhhNjJmODIyZGYwMzFiYTBkZjBkYWZkNTUwNmY1NjhiZDciOjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiOGZmMDBjYWE2MDVjNzAyODMwNjM0ZDlhNmMzZDQyYzY1MmI1OGNmMWQ5MmZlYzU3MGJlZWU3IjoiOGM0MDdiNWVjMjg5OWU1MDk5YzUzZThjZTc5M2JmOTRlNzFiMTc4MiI6IjAxODFhZjg5MjJiOWZjYjRkNzlkOTJlYmUxOTgxNTk5MmZjMGMxNDM5ZDhiY2Q0OTEzOThhMGY0YWQzYTMyOWE1YmQ5Mzg1NTYwZGI1MzI2ODNjOGI3ZGEwNGU0YjEyYWVkNmFhY2RmNDcxYzM0YzljZGE4OTFhZGRjYzJkZjM0NTY2NTNhYTYzODJlOWFlNTliNTQ0NTUyNTdlYjA5OWQ1NjJiYmUxMDQ1M2YyYjZkMTNjNTljMDJlMTBmMWY4YWJiNWRhMGQwNTcwOTMyZGFjZjJkMDkwMWRiNzI5ZDBmZWZjYzA1NGU3MDk2OGVhNTQwYzgxYjA0YmNhZWZlNzIwZSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMl8yCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNToxNjoiMDE1OWRiZGUwNGEzM2VmMDZmYjYwOGI4MGIxOTBmNGQzZTIyYmNjMTNhYzhlNGEwODEwMzNhYmZhNDE2ZWRiMGIzMzhhYTA4YjU3MzA5ZWE1YTUyNDBlN2RjNmU1NDM3OGM2OTQxNGMzMWQ5N2RkYjFmNDA2ZGIzNzY5Y2M0MWE0MyI6MTY6IjAxMmI2NTJmMzA0MDNiMzhiNDA5OTVmZDZmZjQxYTFhY2M4YWRhNzAzNzMyMzZiNzIwMmQzOWIyZWUzMGNmYjQ2ZGIwOTUxMWY2ZjMwN2NjNjFjYzIxNjA2YzE4YTc1YjhhNjJmODIyZGYwMzFiYTBkZjBkYWZkNTUwNmY1NjhiZDciOjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMmQiOiJiNjAwY2YzYzJlNTA2ZDdmMTY3NzhjOTEwZDNhOGIwMDNlZWU2MWQ1IjoiMDE4NzU5ZmYxZGY2M2IyNzkyNDEwNTYyMzE0NDE2YThhZWFmMmFjNjM0YjQ2Zjk0MGFiODJkNjRkYmYxNjVlZWUzMzAxMWRhNzQ5ZDRiYWI2ZTJmY2QxODEyOWM5ZTQ5Mjc3ZDg0NTMxMTJiNDI5YTIyMmE4NDcxYjA3MDk5Mzk5OGU3NTg4NjFjNGQzZjZkNzQ5ZDkxYzQyOTBkMzMyYzdhNGFiM2Y3ZWEzNWZmM2EwN2Q0OTdjOTU1ZmYwZmZjOTUwMDZiNjJjNmQyOTY4MTBkOWJmYWIwMjQxOTZjNzkzNDAxMmMyZGY5NzhlZjI5OWFiYTIzOTk0MGNiYTEwMjQ1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBUZXN0IFZlY3RvciAyXzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI1OjE2OiIwMTU5ZGJkZTA0YTMzZWYwNmZiNjA4YjgwYjE5MGY0ZDNlMjJiY2MxM2FjOGU0YTA4MTAzM2FiZmE0MTZlZGIwYjMzOGFhMDhiNTczMDllYTVhNTI0MGU3ZGM2ZTU0Mzc4YzY5NDE0YzMxZDk3ZGRiMWY0MDZkYjM3NjljYzQxYTQzIjoxNjoiMDEyYjY1MmYzMDQwM2IzOGI0MDk5NWZkNmZmNDFhMWFjYzhhZGE3MDM3MzIzNmI3MjAyZDM5YjJlZTMwY2ZiNDZkYjA5NTExZjZmMzA3Y2M2MWNjMjE2MDZjMThhNzViOGE2MmY4MjJkZjAzMWJhMGRmMGRhZmQ1NTA2ZjU2OGJkNyI6MTY6IjAxOTQ3YzdmY2U5MDQyNWY0NzI3OWU3MDg1MWYyNWQ1ZTYyMzE2ZmU4YTFkZjE5MzcxZTNlNjI4ZTI2MDU0M2U0OTAxZWY2MDgxZjY4YzBiODE0MTE5MGQyYWU4ZGFiYTdkMTI1MGVjNmRiNjM2ZTk0NGVjMzcyMjg3N2M3YzFkMGE2N2YxNGIxNjk0YzVmMDM3OTQ1MWE0M2U0OWEzMmRkZTgzNjcwYjczZGE5MWExYzk5YmMyM2I0MzZhNjAwNTVjNjEwZjBiYWY5OWMxYTA3OTU2NWI5NWEzZjE1MjY2MzJkMWQ0ZGE2MGYyMGVkYTI1ZTY1M2M0ZjAwMjc2NmY0NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI3NGZjODhjNTFiYzkwZjc3YWY5ZDVlOWE0YTcwMTMzZDRiNGUwYjM0ZGEzYzM3YzdlZjhlIjoiYTczNzY4YWVlYWE5MWY5ZDhjMWVkNmY5ZDJiNjM0NjdmMDdjY2FlMyI6IjAxODgwMmJhYjA0YzYwMzI1ZTgxYzQ5NjIzMTFmMmJlN2MyYWRjZTkzMDQxYTAwNzE5Yzg4Zjk1NzU3NWYyYzc5ZjFiN2JjOGNlZDExNWM3MDZiMzExYzA4YTJkOTg2Y2EzYjZhOTMzNmIxNDdjMjljNmYyMjk0MDlkZGVjNjUxYmQxZmRkNWEwYjdmNjEwYzk5MzdmZGI0YTNhNzYyMzY0YjhiMzIwNmI0ZWE0ODVmZDA5OGQwOGY2M2Q0YWE4YmIyNjk3ZDAyN2I3NTBjMzJkN2Y3NGVhZjUxODBkMmU5YjY2YjE3Y2IyZmE1NTUyM2JjMjgwZGExMGQxNGJlMjA1MyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMl80Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNToxNjoiMDE1OWRiZGUwNGEzM2VmMDZmYjYwOGI4MGIxOTBmNGQzZTIyYmNjMTNhYzhlNGEwODEwMzNhYmZhNDE2ZWRiMGIzMzhhYTA4YjU3MzA5ZWE1YTUyNDBlN2RjNmU1NDM3OGM2OTQxNGMzMWQ5N2RkYjFmNDA2ZGIzNzY5Y2M0MWE0MyI6MTY6IjAxMmI2NTJmMzA0MDNiMzhiNDA5OTVmZDZmZjQxYTFhY2M4YWRhNzAzNzMyMzZiNzIwMmQzOWIyZWUzMGNmYjQ2ZGIwOTUxMWY2ZjMwN2NjNjFjYzIxNjA2YzE4YTc1YjhhNjJmODIyZGYwMzFiYTBkZjBkYWZkNTUwNmY1NjhiZDciOjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYTdlYjJhNTAzNjkzMWQyN2Q0ZTg5MTMyNmQ5OTY5MmZmYWRkYTliZjdlZmQzZTM0ZTYyMmM0YWRjMDg1ZjcyMWRmZTg4NTA3MmM3OGEyMDNiMTUxNzM5YmU1NDBmYThjMTUzYTEwZjAwYSI6IjlhN2IzYjBlNzA4YmQ5NmY4MTkwZWNhYjRmYjliMmIzODA1YTgxNTYiOiIwMGE0NTc4Y2JjMTc2MzE4YTYzOGZiYTdkMDFkZjE1NzQ2YWY0NGQ0ZjZjZDk2ZDdlN2M0OTVjYmY0MjViMDljNjQ5ZDMyYmY4ODZkYTQ4ZmJhZjk4OWEyMTE3MTg3Y2FmYjFmYjU4MDMxNzY5MGUzY2NkNDQ2OTIwYjdhZjgyYjMxZGI1ODA0ZDg3ZDAxNTE0YWNiZmE5MTU2ZTc4MmY4NjdmNmJlZDk0NDllMGU5YTJjMDliY2VjYzZhYTA4NzYzNjk2NWUzNGIzZWM3NjZmMmZlMmU0MzAxOGEyZmRkZWIxNDA2MTZhMGU5ZDgyZTUzMzEwMjRlZTA2NTJmYzc2NDEiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIFRlc3QgVmVjdG9yIDJfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjU6MTY6IjAxNTlkYmRlMDRhMzNlZjA2ZmI2MDhiODBiMTkwZjRkM2UyMmJjYzEzYWM4ZTRhMDgxMDMzYWJmYTQxNmVkYjBiMzM4YWEwOGI1NzMwOWVhNWE1MjQwZTdkYzZlNTQzNzhjNjk0MTRjMzFkOTdkZGIxZjQwNmRiMzc2OWNjNDFhNDMiOjE2OiIwMTJiNjUyZjMwNDAzYjM4YjQwOTk1ZmQ2ZmY0MWExYWNjOGFkYTcwMzczMjM2YjcyMDJkMzliMmVlMzBjZmI0NmRiMDk1MTFmNmYzMDdjYzYxY2MyMTYwNmMxOGE3NWI4YTYyZjgyMmRmMDMxYmEwZGYwZGFmZDU1MDZmNTY4YmQ3IjoxNjoiMDE5NDdjN2ZjZTkwNDI1ZjQ3Mjc5ZTcwODUxZjI1ZDVlNjIzMTZmZThhMWRmMTkzNzFlM2U2MjhlMjYwNTQzZTQ5MDFlZjYwODFmNjhjMGI4MTQxMTkwZDJhZThkYWJhN2QxMjUwZWM2ZGI2MzZlOTQ0ZWMzNzIyODc3YzdjMWQwYTY3ZjE0YjE2OTRjNWYwMzc5NDUxYTQzZTQ5YTMyZGRlODM2NzBiNzNkYTkxYTFjOTliYzIzYjQzNmE2MDA1NWM2MTBmMGJhZjk5YzFhMDc5NTY1Yjk1YTNmMTUyNjYzMmQxZDRkYTYwZjIwZWRhMjVlNjUzYzRmMDAyNzY2ZjQ1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjJlZjJiMDY2Zjg1NGMzM2YzYmRjYmI1OTk0YTQzNWU3M2Q2YzZjIjoiZWIzY2ViYmM0YWRjMTZiYjQ4ZTg4YzhhZWMwZTM0YWY3ZjQyN2ZkMyI6IjAwZWJjNWY1ZmRhNzdjZmRhZDNjODM2NDFhOTAyNWU3N2Q3MmQ4YTZmYjMzYTgxMGY1OTUwZjhkNzRjNzNlOGQ5MzFlODYzNGQ4NmFiMTI0NjI1NmFlMDdiNjAwNWI3MWI3ZjJmYjk4MzUxMjE4MzMxY2U2OWI4ZmZiZGM5ZGEwOGJiYzljNzA0Zjg3NmRlYjlkZjlmYzJlYzA2NWNhZDg3ZjkwOTBiMDdhY2MxN2FhN2Y5OTdiMjdhY2E0ODgwNmU4OTdmNzcxZDk1MTQxZmU0NTI2ZDhhNTMwMWI2Nzg2MjdlZmFiNzA3ZmQ0MGZiZWJkNmU3OTJhMjU2MTNlN2FlYyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gVGVzdCBWZWN0b3IgMl82Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNToxNjoiMDE1OWRiZGUwNGEzM2VmMDZmYjYwOGI4MGIxOTBmNGQzZTIyYmNjMTNhYzhlNGEwODEwMzNhYmZhNDE2ZWRiMGIzMzhhYTA4YjU3MzA5ZWE1YTUyNDBlN2RjNmU1NDM3OGM2OTQxNGMzMWQ5N2RkYjFmNDA2ZGIzNzY5Y2M0MWE0MyI6MTY6IjAxMmI2NTJmMzA0MDNiMzhiNDA5OTVmZDZmZjQxYTFhY2M4YWRhNzAzNzMyMzZiNzIwMmQzOWIyZWUzMGNmYjQ2ZGIwOTUxMWY2ZjMwN2NjNjFjYzIxNjA2YzE4YTc1YjhhNjJmODIyZGYwMzFiYTBkZjBkYWZkNTUwNmY1NjhiZDciOjE2OiIwMTk0N2M3ZmNlOTA0MjVmNDcyNzllNzA4NTFmMjVkNWU2MjMxNmZlOGExZGYxOTM3MWUzZTYyOGUyNjA1NDNlNDkwMWVmNjA4MWY2OGMwYjgxNDExOTBkMmFlOGRhYmE3ZDEyNTBlYzZkYjYzNmU5NDRlYzM3MjI4NzdjN2MxZDBhNjdmMTRiMTY5NGM1ZjAzNzk0NTFhNDNlNDlhMzJkZGU4MzY3MGI3M2RhOTFhMWM5OWJjMjNiNDM2YTYwMDU1YzYxMGYwYmFmOTljMWEwNzk1NjViOTVhM2YxNTI2NjMyZDFkNGRhNjBmMjBlZGEyNWU2NTNjNGYwMDI3NjZmNDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiOGE3ZmIzNDRjOGI2Y2IyY2YyZWYxZjY0M2Y5YTMyMThmNmUxOWJiYTg5YzAiOiI0YzQ1Y2Y0ZDU3Yzk4ZTNkNmQyMDk1YWRjNTFjNDg5ZWI1MGRmZjg0IjoiMDEwODM5ZWMyMGMyN2I5MDUyZTU1YmVmYjliNzdlNmZjMjZlOTA3NWQ3YTU0Mzc4YzY0NmFiZGY1MWU0NDViZDU3MTVkZTgxNzg5ZjU2ZjE4MDNkOTE3MDc2NGE5ZTkzY2I3ODc5ODY5NDAyM2VlNzM5M2NlMDRiYzVkOGY4YzVhNTJjMTcxZDQzODM3ZTNhY2E2MmY2MDllYjBhYTVmZmIwOTYwZWYwNDE5OGRkNzU0ZjU3ZjdmYmU2YWJmNzY1Y2YxMThiNGNhNDQzYjIzYjVhYWIyNjZmOTUyMzI2YWM0NTgxMTAwNjQ0MzI1ZjhiNzIxYWNkNWQwNGZmMTRlZjNhIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDNfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjY6MTY6IjAxYmYwMWQyMTZkNzM1OTVjZjAyNzBjMmJlYjc4ZDQwYTBkODQ0N2QzMWRhOTE5YTk4M2Y3ZWVhNzgxYjc3ZDg1ZmUzNzFiM2U5MzczZTdiNjkyMTdkMzE1MGEwMmQ4OTU4ZGU3ZmFkOWQ1NTUxNjA5NThiNDQ1NDEyN2UwZTdlYWYiOjE2OiIwMThkMzM5OTY1ODE2NmRiMzgyOTgxNmQ3YjI5NTQxNjc1OWU5YzkxOTg3ZjViMmQ4YWVjZDYzYjA0YjQ4YmQ3YjJmY2YyMjliYjdmOGE2ZGM4OGJhMTNkZDJlMzlhZDU1YjZkMWEwNjE2MDcwOGY5NzAwYmU4MGI4ZmQzNzQ0Y2U3IjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjA4NzgyMGI1NjllOGZhOGQiOiI4Y2VkNmIxOTYyOTA4MDU3OTBlOTA5MDc0MDE1ZTZhMjBiMGM0ODk0IjoiMDI2YTA0ODVkOTZhZWJkOTZiNDM4MjA4NTA5OWI5NjJlNmEyYmRlYzNkOTBjOGRiNjI1ZTE0MzcyZGU4NWUyZDViN2JhYWI2NWM4ZmFmOTFiYjU1MDRmYjQ5NWFmY2U1Yzk4OGIzZjZhNTJlMjBlMWQ2Y2JkMzU2NmM1Y2QxZjJiODMxOGJiNTQyY2MwZWEyNWM0YWFiOTkzMmFmYTIwNzYwZWFkZGVjNzg0Mzk2YTA3ZWEwZWYyNGQ0ZTZmNGQzN2U1MDUyYTdhMzFlMTQ2YWE0ODBhMTExYmJlOTI2NDAxMzA3ZTAwZjQxMDAzMzg0MmI2ZDgyZmU1Y2U0ZGZhZTgwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDNfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjY6MTY6IjAxYmYwMWQyMTZkNzM1OTVjZjAyNzBjMmJlYjc4ZDQwYTBkODQ0N2QzMWRhOTE5YTk4M2Y3ZWVhNzgxYjc3ZDg1ZmUzNzFiM2U5MzczZTdiNjkyMTdkMzE1MGEwMmQ4OTU4ZGU3ZmFkOWQ1NTUxNjA5NThiNDQ1NDEyN2UwZTdlYWYiOjE2OiIwMThkMzM5OTY1ODE2NmRiMzgyOTgxNmQ3YjI5NTQxNjc1OWU5YzkxOTg3ZjViMmQ4YWVjZDYzYjA0YjQ4YmQ3YjJmY2YyMjliYjdmOGE2ZGM4OGJhMTNkZDJlMzlhZDU1YjZkMWEwNjE2MDcwOGY5NzAwYmU4MGI4ZmQzNzQ0Y2U3IjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjQ2NTNhY2FmMTcxOTYwYjAxZjUyYTdiZTYzYTNhYjIxZGMzNjhlYzQzYjUwZDgyZWMzNzgxZTA0IjoiYjQyOTFkNjU2NzU1MDg0OGNjMTU2OTY3YzgwOWJhYWI2Y2E1MDdmMCI6IjAyNGRiODljNzgwMjk4OWJlMDc4Mzg0Nzg2MzA4NDk0MWJmMjA5ZDc2MTk4N2UzOGY5N2NiNWY2ZjFiYzg4ZGE3MmE1MGI3M2ViYWYxMWM4NzljNGY5NWRmMzdiODUwYjhmNjVkNzYyMmUyNWIxYjg4OWU4MGZlODBiYWNhMjA2OWQ2ZTBlMWQ4Mjk5NTNmYzQ1OTA2OWRlOThlYTk3OThiNDUxZTU1N2U5OWFiZjhmZTNkOWNjZjkwOTZlYmJmM2U1MjU1ZDNiNGUxYzZkMmVjYWRmMDY3YTM1OWVlYTg2NDA1YWNkNDdkNWUxNjU1MTdjY2FmZDQ3ZDZkYmVlNGJmNSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSAzXzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI2OjE2OiIwMWJmMDFkMjE2ZDczNTk1Y2YwMjcwYzJiZWI3OGQ0MGEwZDg0NDdkMzFkYTkxOWE5ODNmN2VlYTc4MWI3N2Q4NWZlMzcxYjNlOTM3M2U3YjY5MjE3ZDMxNTBhMDJkODk1OGRlN2ZhZDlkNTU1MTYwOTU4YjQ0NTQxMjdlMGU3ZWFmIjoxNjoiMDE4ZDMzOTk2NTgxNjZkYjM4Mjk4MTZkN2IyOTU0MTY3NTllOWM5MTk4N2Y1YjJkOGFlY2Q2M2IwNGI0OGJkN2IyZmNmMjI5YmI3ZjhhNmRjODhiYTEzZGQyZTM5YWQ1NWI2ZDFhMDYxNjA3MDhmOTcwMGJlODBiOGZkMzc0NGNlNyI6MTY6IjAyYjU4ZmVjMDM5YTg2MDcwMGE0ZDdiNjQ2MmY5M2U2Y2RkNDkxMTYxZGRkNzRmNGU4MTBiNDBlM2MxNjUyMDA2YTVjMjc3YjI3NzRjMTEzMDVhNGNiYWI1YTc4ZWZhNTdlMTdhODZkZjdhM2ZhMzZmYzRiMWQyMjQ5ZjIyZWM3YzJkZDZhNDYzMjMyYWNjZWE5MDZkNjZlYmU4MGI1NzA0YjEwNzI5ZGE2ZjgzMzIzNGFiYjVlZmRkNGEyOTJjYmZhZDMzYjRkMzNmYTdhMTRiOGMzOTdiNTZlM2FjZDIxMjAzNDI4Yjc3Y2RmYTMzYTZkYTcwNmIzZDhiMGZjNDNlOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJkOTRjZDBlMDhmYTQwNGVkODkiOiJjZTg5MjhmNjA1OTU1ODI1NDAwOGJhZGQ5Nzk0ZmFkY2QyZmQxZjY1IjoiMDIzOWJjZTY4MTAzMjQ0MTUyODg3N2Q2ZDFjOGJiMjhhYTNiYzk3ZjFkZjU4NDU2MzYxODk5NTc5NzY4Mzg0NGNhODY2NjQ3MzJmNGJlZDdhMGFhYjA4M2FhYWJmYjcyMzhmNTgyZTMwOTU4YzIwMjRlNDRlNTcwNDNiOTc5NTBmZDU0M2RhOTc3YzkwY2RkZTUzMzdkNjE4NDQyZjk5ZTYwZDc3ODNhYjU5Y2U2ZGQ5ZDY5YzQ3YWQxZTk2MmJlYzIyZDA1ODk1Y2ZmOGQzZjY0ZWQ1MjYxZDkyYjI2Nzg1MTAzOTM0ODQ5OTBiYTNmN2YwNjgxOGFlNmZmY2U4YTNhIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDNfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjY6MTY6IjAxYmYwMWQyMTZkNzM1OTVjZjAyNzBjMmJlYjc4ZDQwYTBkODQ0N2QzMWRhOTE5YTk4M2Y3ZWVhNzgxYjc3ZDg1ZmUzNzFiM2U5MzczZTdiNjkyMTdkMzE1MGEwMmQ4OTU4ZGU3ZmFkOWQ1NTUxNjA5NThiNDQ1NDEyN2UwZTdlYWYiOjE2OiIwMThkMzM5OTY1ODE2NmRiMzgyOTgxNmQ3YjI5NTQxNjc1OWU5YzkxOTg3ZjViMmQ4YWVjZDYzYjA0YjQ4YmQ3YjJmY2YyMjliYjdmOGE2ZGM4OGJhMTNkZDJlMzlhZDU1YjZkMWEwNjE2MDcwOGY5NzAwYmU4MGI4ZmQzNzQ0Y2U3IjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjZjYzY0MWI2YjYxZTZmOTYzOTc0ZGFkMjNhOTAxMzI4NGVmMSI6IjZlMjk3OWY1MmQ2ODE0YTU3ZDgzYjA5MDA1NDg4OGYxMTlhNWI5YTMiOiIwMjk5NGM2MmFmZDc2ZjQ5OGJhMWZkMmNmNjQyODU3ZmNhODFmNDM3M2NiMDhmMWNiYWVlNmYwMjVjM2I1MTJiNDJjM2U4Nzc5MTEzNDc2NjQ4MDM5ZGJlMDQ5M2Y5MjQ2MjkyZmFjMjg5NTA2MDBlN2MwZjMyZWRmOWM4MWI5ZGVjNDVjM2JkZTBjYzhkODg0NzU5MDE2OTkwN2I3ZGM1OTkxY2ViMjliYjA3MTRkNjEzZDk2ZGYwZjEyZWM1ZDhkMzUwN2M4ZWU3YWU3OGRkODNmMjE2ZmE2MWRlMTAwMzYzYWNhNDhhN2U5MTRhZTlmNDJkZGZiZTk0M2IwOWQ5YTAiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgM181Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNjoxNjoiMDFiZjAxZDIxNmQ3MzU5NWNmMDI3MGMyYmViNzhkNDBhMGQ4NDQ3ZDMxZGE5MTlhOTgzZjdlZWE3ODFiNzdkODVmZTM3MWIzZTkzNzNlN2I2OTIxN2QzMTUwYTAyZDg5NThkZTdmYWQ5ZDU1NTE2MDk1OGI0NDU0MTI3ZTBlN2VhZiI6MTY6IjAxOGQzMzk5NjU4MTY2ZGIzODI5ODE2ZDdiMjk1NDE2NzU5ZTljOTE5ODdmNWIyZDhhZWNkNjNiMDRiNDhiZDdiMmZjZjIyOWJiN2Y4YTZkYzg4YmExM2RkMmUzOWFkNTViNmQxYTA2MTYwNzA4Zjk3MDBiZTgwYjhmZDM3NDRjZTciOjE2OiIwMmI1OGZlYzAzOWE4NjA3MDBhNGQ3YjY0NjJmOTNlNmNkZDQ5MTE2MWRkZDc0ZjRlODEwYjQwZTNjMTY1MjAwNmE1YzI3N2IyNzc0YzExMzA1YTRjYmFiNWE3OGVmYTU3ZTE3YTg2ZGY3YTNmYTM2ZmM0YjFkMjI0OWYyMmVjN2MyZGQ2YTQ2MzIzMmFjY2VhOTA2ZDY2ZWJlODBiNTcwNGIxMDcyOWRhNmY4MzMyMzRhYmI1ZWZkZDRhMjkyY2JmYWQzM2I0ZDMzZmE3YTE0YjhjMzk3YjU2ZTNhY2QyMTIwMzQyOGI3N2NkZmEzM2E2ZGE3MDZiM2Q4YjBmYzQzZTkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZGY1MTUxODMyYjYxZjRmMjU4OTFmYjQxNzJmMzI4ZDJlZGRmODM3MWZmY2ZkYmU5OTc5MzkyOTVmMzBlY2E2OTE4MDE3Y2ZkYTExNTNiZjdhNmFmODc1OTMyMjMiOiIyZDc2MGJmZTM4YzU5ZGUzNGNkYzhiOGM3OGEzOGU2NjI4NGEyZDI3IjoiMDE2MjA0MmZmNjk2OTU5MmE2MTY3MDMxODExYTIzOTgzNGNlNjM4YWJmNTRmZWM4Yjk5NDc4MTIyYWZlMmVlNjdmOGM1YjE4YjAzMzk4MDViZmRiYzVhNGU2NzIwYjM3YzU5Y2ZiYTk0MjQ2NGM1OTdmZjUzMmExMTk4MjE1NDVmZDJlNTliMTE0ZTYxZGFmNzE4MjA1MjlmNTAyOWNmNTI0OTU0MzI3YzM0ZWM1ZTZmNWJhN2VmY2M0ZGU5NDNhYjhhZDRlZDc4N2IxNDU0MzI5ZjcwZGI3OThhM2E4ZjRkOTJmODI3NGUyYjI5NDhhZGU2MjdjZThlZTMzZTQzYzYwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDNfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjY6MTY6IjAxYmYwMWQyMTZkNzM1OTVjZjAyNzBjMmJlYjc4ZDQwYTBkODQ0N2QzMWRhOTE5YTk4M2Y3ZWVhNzgxYjc3ZDg1ZmUzNzFiM2U5MzczZTdiNjkyMTdkMzE1MGEwMmQ4OTU4ZGU3ZmFkOWQ1NTUxNjA5NThiNDQ1NDEyN2UwZTdlYWYiOjE2OiIwMThkMzM5OTY1ODE2NmRiMzgyOTgxNmQ3YjI5NTQxNjc1OWU5YzkxOTg3ZjViMmQ4YWVjZDYzYjA0YjQ4YmQ3YjJmY2YyMjliYjdmOGE2ZGM4OGJhMTNkZDJlMzlhZDU1YjZkMWEwNjE2MDcwOGY5NzAwYmU4MGI4ZmQzNzQ0Y2U3IjoxNjoiMDJiNThmZWMwMzlhODYwNzAwYTRkN2I2NDYyZjkzZTZjZGQ0OTExNjFkZGQ3NGY0ZTgxMGI0MGUzYzE2NTIwMDZhNWMyNzdiMjc3NGMxMTMwNWE0Y2JhYjVhNzhlZmE1N2UxN2E4NmRmN2EzZmEzNmZjNGIxZDIyNDlmMjJlYzdjMmRkNmE0NjMyMzJhY2NlYTkwNmQ2NmViZTgwYjU3MDRiMTA3MjlkYTZmODMzMjM0YWJiNWVmZGQ0YTI5MmNiZmFkMzNiNGQzM2ZhN2ExNGI4YzM5N2I1NmUzYWNkMjEyMDM0MjhiNzdjZGZhMzNhNmRhNzA2YjNkOGIwZmM0M2U5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjNjM2JhZDg5M2M1NDRhNmQ1MjBhYjAyMjMxOTE4OGM4ZDUwNGI3YTc4OGI4NTA5MDNiODU5NzJlYWExODU1MmUxMTM0YTdhZDYwOTg4MjYyNTRmZjdhYjY3MmIzZDhlYjMxNThmYWM2ZDRjYmFlZjEiOiJmMTc0Nzc5YzVmZDNjZmUwMDdiYWRjYjdhMzZjOWI1NWJmY2ZiZjBlIjoiMDAxMTIwNTFlNzVkMDY0OTQzYmM0NDc4MDc1ZTQzNDgyZmQ1OWNlZTA2NzlkZTY4OTNlZWMzYTk0M2RhYTQ5MGI5NjkxYzkzZGZjMDQ2NGI2NjIzYjlmM2RiZDNlNzAwODMyNjRmMDM0YjM3NGY3NDE2NGUxYTAwNzYzNzI1ZTU3NDc0NGJhMGI5ZGI4MzQzNGYzMWRmOTZmNmUyYTI2ZjZkOGViYTM0OGJkNDY4NmMyMjM4YWMwN2MzN2FhYzM3ODVkMWM3ZWVhMmY4MTlmZDkxNDkxNzk4ZWQ4ZTljZWY1ZTQzYjc4MWIwZTAyNzZlMzdjNDNmZjk0OTJkMDA1NzMwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDRfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjc6MTY6IjAyNzQ1OGMxOWVjMTYzNjkxOWU3MzZjOWFmMjVkNjA5YTUxYjhmNTYxZDE5YzZiZjY5NDNkZDFlZTFhYjhhNGEzZjIzMjEwMGJkNDBiODhkZWNjNmJhMjM1NTQ4YjZlZjc5MmExMWM5ZGU4MjNkMGE3OTIyYzcwOTViNmViYTU3MDEiOjE2OiIwMjEwZWU5YjMzYWI2MTcxNmUyN2QyNTFiZDQ2NWY0YjM1YTFhMjMyZTJkYTAwOTAxYzI5NGJmMjIzNTBjZTQ5MGQwOTlmNjQyYjUzNzU2MTJkYjYzYmExZjIwMzg2NDkyYmYwNGQzNGIzYzIyYmNlYjkwOWQxMzQ0MWI1M2I1MTM5IjoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjRhODY2MDk1MzRlZTQzNGE2Y2JjYTNmN2U5NjJlNzZkNDU1ZTMyNjRjMTlmNjA1ZjZlNWZmNjEzN2M2NWM1NmQ3ZmIzNDRjZDUyYmM5MzM3NGYzZDE2NmM5ZjBjNmY5YzUwNmJhZDE5MzMwOTcyZDIiOiIxY2FjMTljZTk5M2RlZjU1Zjk4MjAzZjY4NTI4OTZjOTVjY2NhMWYzIjoiMDRjY2UxOTYxNDg0NWUwOTQxNTJhM2ZlMThlNTRlMzMzMGM0NGU1ZWZiYzY0YWUxNjg4NmNiMTg2OTAxNGNjNTc4MWIxZjhmOWUwNDUzODRkMDExMmExMzVjYTBkMTJlOWM4OGE4ZTQwNjM0MTZkZWFhZTM4NDRmNjBkNmU5NmZlMTU1MTQ1ZjQ1MjViOWEzNDQzMWNhMzc2NjE4MGY3MGUxNWE1ZTVkOGU4YjFhNTE2ZmY4NzA2MDlmMTNmODk2OTM1Y2VkMTg4Mjc5YTU4ZWQxM2QwNzExNDI3N2Q3NWM2NTY4NjA3ZTBhYjA5MmZkODAzYTIyM2U0YThlZTBiMWE4IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDRfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjc6MTY6IjAyNzQ1OGMxOWVjMTYzNjkxOWU3MzZjOWFmMjVkNjA5YTUxYjhmNTYxZDE5YzZiZjY5NDNkZDFlZTFhYjhhNGEzZjIzMjEwMGJkNDBiODhkZWNjNmJhMjM1NTQ4YjZlZjc5MmExMWM5ZGU4MjNkMGE3OTIyYzcwOTViNmViYTU3MDEiOjE2OiIwMjEwZWU5YjMzYWI2MTcxNmUyN2QyNTFiZDQ2NWY0YjM1YTFhMjMyZTJkYTAwOTAxYzI5NGJmMjIzNTBjZTQ5MGQwOTlmNjQyYjUzNzU2MTJkYjYzYmExZjIwMzg2NDkyYmYwNGQzNGIzYzIyYmNlYjkwOWQxMzQ0MWI1M2I1MTM5IjoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImIwYWRjNGYzZmUxMWRhNTljZTk5Mjc3M2Q5MDU5OTQzYzAzMDQ2NDk3ZWU5ZDlmOWEwNmRmMTE2NmRiNDZkOThmNThkMjdlYzA3NGMwMmVlZTZjYmUyNDQ5YzhiOWZjNTA4MGM1YzNmNDQzMzA5MjUxMmVjNDZhYTc5Mzc0M2M4IjoiZjU0NWQ1ODk3NTg1ZTNkYjcxYWEwY2I4ZGE3NmM1MWQwMzJhZTk2MyI6IjAwOTdiNjk4YzYxNjU2NDViMzAzNDg2ZmJmNWEyYTQ0NzljMGVlODU4ODliNTQxYTZmMGI4NThkNmI2NTk3YjEzYjg1NGViNGY4MzlhZjAzMzk5YTgwZDc5YmRhNjU3OGM4NDFmOTBkNjQ1NzE1YjI4MGQzNzE0Mzk5MmRkMTg2YzgwYjk0OWI3NzVjYWU5NzM3MGU0ZWM5NzQ0MzEzNmM2ZGE0ODRlOTcwZmZkYjEzMjNhMjA4NDc4MjFkM2IxODM4MWRlMTNiYjQ5YWFlYTY2NTMwYzRhNGI4MjcxZjNlYWUxNzJjZDM2NmUwN2U2NjM2ZjEwMTlkMmEyOGFlZDE1ZSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA0XzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI3OjE2OiIwMjc0NThjMTllYzE2MzY5MTllNzM2YzlhZjI1ZDYwOWE1MWI4ZjU2MWQxOWM2YmY2OTQzZGQxZWUxYWI4YTRhM2YyMzIxMDBiZDQwYjg4ZGVjYzZiYTIzNTU0OGI2ZWY3OTJhMTFjOWRlODIzZDBhNzkyMmM3MDk1YjZlYmE1NzAxIjoxNjoiMDIxMGVlOWIzM2FiNjE3MTZlMjdkMjUxYmQ0NjVmNGIzNWExYTIzMmUyZGEwMDkwMWMyOTRiZjIyMzUwY2U0OTBkMDk5ZjY0MmI1Mzc1NjEyZGI2M2JhMWYyMDM4NjQ5MmJmMDRkMzRiM2MyMmJjZWI5MDlkMTM0NDFiNTNiNTEzOSI6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJiZjZkNDJlNzAxNzA3YjFkMDIwNmIwYzhiNDVhMWM3MjY0MWZmMTI4ODkyMTlhODJiZGVhOTY1YjVlNzlhOTZiMGQwMTYzZWQ5ZDU3OGVjOWFkYTIwZjJmYmNmMWVhM2M0MDg5ZDgzNDE5YmE4MWIwYzYwZjM2MDZkYTk5IjoiYWQ5OTdmZWVmNzMwZDZlYTdiZTYwZDBkYzUyZTcyZWFjYmZkZDI3NSI6IjAzMDFmOTM1ZTljNDdhYmNiNDhhY2JiZTA5ODk1ZDlmNTk3MWFmMTQ4MzlkYTRmZjk1NDE3ZWU0NTNkMWZkNzczMTkwNzJiYjcyOTdlMWI1NWQ3NTYxY2Q5ZDFiYjI0YzFhOWEzN2M2MTk4NjQzMDgyNDI4MDQ4NzlkODZlYmQwMDFkY2U1MTgzOTc1ZTE1MDY5ODliNzBlNWE4MzQzNDE1NGQ1Y2JmZDZhMjQ3ODdlNjBlYjBjNjU4ZDJhYzE5MzMwMmQxMTkyYzZlNjIyZDRhMTJhZDRiNTM5MjNiY2EyNDZkZjMxYzYzOTVlMzc3MDJjNmE3OGFlMDgxZmI5ZDA2NSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA0XzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI3OjE2OiIwMjc0NThjMTllYzE2MzY5MTllNzM2YzlhZjI1ZDYwOWE1MWI4ZjU2MWQxOWM2YmY2OTQzZGQxZWUxYWI4YTRhM2YyMzIxMDBiZDQwYjg4ZGVjYzZiYTIzNTU0OGI2ZWY3OTJhMTFjOWRlODIzZDBhNzkyMmM3MDk1YjZlYmE1NzAxIjoxNjoiMDIxMGVlOWIzM2FiNjE3MTZlMjdkMjUxYmQ0NjVmNGIzNWExYTIzMmUyZGEwMDkwMWMyOTRiZjIyMzUwY2U0OTBkMDk5ZjY0MmI1Mzc1NjEyZGI2M2JhMWYyMDM4NjQ5MmJmMDRkMzRiM2MyMmJjZWI5MDlkMTM0NDFiNTNiNTEzOSI6MTY6IjA1MTI0MGI2Y2MwMDA0ZmE0OGQwMTM0NjcxYzA3OGM3YzhkZWMzYjNlMmYyNWJjMjU2NDQ2NzMzOWRiMzg4NTNkMDZiODVlZWE1YjJkZTM1M2JmZjQyYWMyZTQ2YmM5N2ZhZTZhYzk2MThkYTk1MzdhNWM4ZjU1M2MxZTM1NzYyNTk5MWQ2MTA4ZGNkNzg4NWZiM2EyNTQxM2Y1M2VmY2FkOTQ4Y2IzNWNkOWI5YWU5YzFjNjc2MjZkMTEzZDU3ZGRlNGM1YmVhNzZiYjViYjdkZTk2YzAwZDA3MzcyZTk2ODVhNmQ3NWNmOWQyMzlmYTE0OGQ3MDkzMWI1ZjNmYjAzOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmYjJlZjExMmY1ZTc2NmViOTQwMTkyOTc5MzQ3OTRmN2JlMmY2ZmMxYzU4ZSI6IjEzNjQ1NGRmNTczMGY3M2M4MDdhN2U0MGQ4YzFhMzEyYWM1YjlkZDMiOiIwMmQxMTBhZDMwYWZiNzI3YmViNjkxZGQwY2YxN2QwYWYxYTFlN2ZhMGNjMDQwZWMxYTRiYTI2YTQyYzU5ZDBhNzk2YTJlMjJjOGYzNTdjY2M5OGI2NTE5YWNlYjY4MmU5NDVlNjJjYjczNDYxNGE1Mjk0MDdjZDQ1MmJlZTNlNDRmZWNlODQyM2NjMTllNTU1NDhiOGI5OTRiODQ5YzdlY2RlNDkzM2U3NjAzN2UxZDBjZTQ0Mjc1YjA4NzEwYzY4ZTQzMDEzMGI5Mjk3MzBlZDc3ZTA5YjAxNTY0MmM1NTkzZjA0ZTRmZmI5NDEwNzk4MTAyYThlOTZmZmRmZTExZTQiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNF81Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyNzoxNjoiMDI3NDU4YzE5ZWMxNjM2OTE5ZTczNmM5YWYyNWQ2MDlhNTFiOGY1NjFkMTljNmJmNjk0M2RkMWVlMWFiOGE0YTNmMjMyMTAwYmQ0MGI4OGRlY2M2YmEyMzU1NDhiNmVmNzkyYTExYzlkZTgyM2QwYTc5MjJjNzA5NWI2ZWJhNTcwMSI6MTY6IjAyMTBlZTliMzNhYjYxNzE2ZTI3ZDI1MWJkNDY1ZjRiMzVhMWEyMzJlMmRhMDA5MDFjMjk0YmYyMjM1MGNlNDkwZDA5OWY2NDJiNTM3NTYxMmRiNjNiYTFmMjAzODY0OTJiZjA0ZDM0YjNjMjJiY2ViOTA5ZDEzNDQxYjUzYjUxMzkiOjE2OiIwNTEyNDBiNmNjMDAwNGZhNDhkMDEzNDY3MWMwNzhjN2M4ZGVjM2IzZTJmMjViYzI1NjQ0NjczMzlkYjM4ODUzZDA2Yjg1ZWVhNWIyZGUzNTNiZmY0MmFjMmU0NmJjOTdmYWU2YWM5NjE4ZGE5NTM3YTVjOGY1NTNjMWUzNTc2MjU5OTFkNjEwOGRjZDc4ODVmYjNhMjU0MTNmNTNlZmNhZDk0OGNiMzVjZDliOWFlOWMxYzY3NjI2ZDExM2Q1N2RkZTRjNWJlYTc2YmI1YmI3ZGU5NmMwMGQwNzM3MmU5Njg1YTZkNzVjZjlkMjM5ZmExNDhkNzA5MzFiNWYzZmIwMzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMjhjY2Q0NDdiYjllODUxNjZkYWJiOWU1YjdkMWFkYWRjNGI5ZDM5ZjIwNGU5NmQ1ZTQ0MGNlOWFkOTI4YmMxYzIyODQiOiJiY2E4MDU3ZjgyNGIyZWEyNTdmMjg2MTQwN2VlZjYzZDMzMjA4NjgxIjoiMDBkYmI4YTc0MzlkOTBlZmQ5MTlhMzc3YzU0ZmFlOGZlMTFlYzU4YzNiODU4MzYyZTIzYWQxYjhhNDQzMTA3OTkwNjZiOTkzNDdhYTUyNTY5MWQyYWRjNThkOWIwNmUzNGYyODhjMTcwMzkwYzVmMGUxMWMwYWEzNjQ1OTU5ZjE4ZWU3OWU4ZjJiZThkN2FjNWMyM2QwNjFmMThkZDc0YjhjNWYyYTU4ZmNiNWViMGM1NGY5OWYwMWE4MzI0NzU2ODI5MjUzNjU4MzM0MDk0OGQ3YThjOTdjNGFjZDFlOThkMWUyOWRjMzIwZTk3YTI2MDUzMmE4YWE3YTc1OGExZWMyIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDRfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjc6MTY6IjAyNzQ1OGMxOWVjMTYzNjkxOWU3MzZjOWFmMjVkNjA5YTUxYjhmNTYxZDE5YzZiZjY5NDNkZDFlZTFhYjhhNGEzZjIzMjEwMGJkNDBiODhkZWNjNmJhMjM1NTQ4YjZlZjc5MmExMWM5ZGU4MjNkMGE3OTIyYzcwOTViNmViYTU3MDEiOjE2OiIwMjEwZWU5YjMzYWI2MTcxNmUyN2QyNTFiZDQ2NWY0YjM1YTFhMjMyZTJkYTAwOTAxYzI5NGJmMjIzNTBjZTQ5MGQwOTlmNjQyYjUzNzU2MTJkYjYzYmExZjIwMzg2NDkyYmYwNGQzNGIzYzIyYmNlYjkwOWQxMzQ0MWI1M2I1MTM5IjoxNjoiMDUxMjQwYjZjYzAwMDRmYTQ4ZDAxMzQ2NzFjMDc4YzdjOGRlYzNiM2UyZjI1YmMyNTY0NDY3MzM5ZGIzODg1M2QwNmI4NWVlYTViMmRlMzUzYmZmNDJhYzJlNDZiYzk3ZmFlNmFjOTYxOGRhOTUzN2E1YzhmNTUzYzFlMzU3NjI1OTkxZDYxMDhkY2Q3ODg1ZmIzYTI1NDEzZjUzZWZjYWQ5NDhjYjM1Y2Q5YjlhZTljMWM2NzYyNmQxMTNkNTdkZGU0YzViZWE3NmJiNWJiN2RlOTZjMDBkMDczNzJlOTY4NWE2ZDc1Y2Y5ZDIzOWZhMTQ4ZDcwOTMxYjVmM2ZiMDM5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImYyMjI0Mjc1MWVjNmIxIjoiMmU3ZTFlMTdmNjQ3YjVkZGQwMzNlMTU0NzJmOTBmNjgxMmYzYWM0ZSI6IjAwYTVmZmE0NzY4YzhiYmVjYWVlMmRiNzdlOGYyZWVjOTk1OTU5MzM1NDU1MjA4MzVlNWJhN2RiOTQ5M2QzZTE3Y2RkZWZlNmE1ZjU2NzYyNDQ3MTkwOGRiNGUyZDgzYTBmYmVlNjA2MDhmYzg0MDQ5NTAzYjIyMzRhMDdkYzgzYjI3YjIyODQ3YWQ4OTIwZmY0MmY2NzRlZjc5Yjc2MjgwYjAwMjMzZDJiNTFiOGNiMjcwM2E5ZDQyYmZiYzgyNTBjOTZlYzMyYzA1MWU1N2YxYjRiYTUyOGRiODljMzdlNGM1NGUyN2U2ZTY0YWM2OTYzNWFlODg3ZDk1NDE2MTlhOSI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA1XzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI4OjE2OiIwM2IwZDM5NjJmNmQxNzU0OWNiZmNhMTEyOTQzNDhkY2YwZTdlMzlmOGMyYmM2ODI0ZjIxNjRiNjA2ZDY4Nzg2MGRhZTFlNjMyMzkzY2ZlZGY1MTMyMjgyMjkwNjllMmY2MGU0YWNkN2U2MzNhNDM2MDYzZjgyMzg1ZjQ4OTkzNzA3IjoxNjoiMDJlNGMzMmUyZjUxNzI2OWI3MDcyMzA5ZjAwYzBlMzEzNjVmN2NlMjhiMjM2YjgyOTEyZGYyMzlhYmYzOTU3MmNmMGVkNjA0YjAyOTgyZTUzNTY0YzUyZDZhMDUzOTdkZTVjMDUyYTJmZGRjMTQxZWY3MTg5ODM2MzQ2YWViMzMxZiI6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJhZjcxYTkwMWUzYTYxZDMxMzJmMGZjMWZkYjQ3NGY5ZWE2NTc5MjU3ZmZjMjRkMTY0MTcwMTQ1YjNkYmRlOCI6IjQ0YzkyZTI4M2Y3N2I5NDk5YzYwM2Q5NjM2NjBjODdkMmY5Mzk0NjEiOiIwMzYwNDZhNGE0N2Q5ZWQzYmE5YTg5MTM5YzEwNTAzOGViNzQ5MmIwNWE1ZDY4YmZkNTNhY2NmZjQ1OTdmN2E2ODY1MWI0N2I0YTQ2MjdkOTI3ZTQ4NWVlZDdiNDU2NjQyMGU4YjQwOTg3OWU1ZDYwNmVhZTI1MWQyMmE1ZGY3OTlmNzkyMGJmYzExN2I5OTI1NzJhNTNiMTI2MzE0NmJjZWEwMzM4NWNjNWU4NTNjOWExMDFjOGMzZTFiZGEzMWE1MTk4MDc0OTZjNmNiNWU1ZWZiNDA4ODIzYTM1MmI4ZmEwNjYxZmI2NjRlZmFkZDU5M2RlYjk5ZmZmNWVkMDAwZTUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNV8yCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyODoxNjoiMDNiMGQzOTYyZjZkMTc1NDljYmZjYTExMjk0MzQ4ZGNmMGU3ZTM5ZjhjMmJjNjgyNGYyMTY0YjYwNmQ2ODc4NjBkYWUxZTYzMjM5M2NmZWRmNTEzMjI4MjI5MDY5ZTJmNjBlNGFjZDdlNjMzYTQzNjA2M2Y4MjM4NWY0ODk5MzcwNyI6MTY6IjAyZTRjMzJlMmY1MTcyNjliNzA3MjMwOWYwMGMwZTMxMzY1ZjdjZTI4YjIzNmI4MjkxMmRmMjM5YWJmMzk1NzJjZjBlZDYwNGIwMjk4MmU1MzU2NGM1MmQ2YTA1Mzk3ZGU1YzA1MmEyZmRkYzE0MWVmNzE4OTgzNjM0NmFlYjMzMWYiOjE2OiIwYWFkZjNmOWMxMjVlNWQ4OTFmMzFhYzQ0OGU5OTNkZWZlNTgwZjgwMmI0NWY5ZDdmMjJiYTUwMjFlOWM0NzU3NmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OGQxYzIzNDQ2NzE2NmIyYTJiODQ5YTA1YTg4OWMwNjBhYzBkYTBjNWZhZThiNTVmMzA5YmE2MmU3MDM3NDJmYTAzMjZmMmQxMGIwMTEwMjE0ODlmZjQ5Nzc3MDE5MGQ4OTVmZDM5ZjUyMjkzYzM5ZWZkNzNhNjk4YmRhYjlmMTBlZDkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYTNiODQ0YTA4MjM5YThhYzQxNjA1YWYxN2E2Y2ZkYTRkMzUwMTM2NTg1OTAzYTQxN2E3OTI2ODc2MDUxOWE0YjRhYzMzMDNlYzczZjBmODdjZmIzMjM5OSI6ImNiMjhmNTg2MDY1OWZjZWVlNDljM2VlYWZjZTYyNWE3MDgwM2JkMzIiOiIwM2Q2ZWI2NTRlZGNlNjE1YmM1OWY0NTUyNjVlZDRlNWExODIyM2NiYjliZTRlNDA2OWI0NzM4MDRkNWRlOTZmNTRkY2FhYTYwM2QwNDljNWQ5NGFhMTQ3MGRmY2QyMjU0MDY2YjdjN2I2MWZmMWY2ZjY3NzBlMzIxNWM1MTM5OWZkNGUzNGVjNTA4MmJjNDhmMDg5ODQwYWQwNDM1NGFlNjZkYzBmMWJkMThlNDYxYTMzY2MxMjU4YjQ0M2EyODM3YTZkZjI2NzU5YWEyMzAyMzM0OTg2Zjg3MzgwYzljYzlkNTNiZTlmOTk2MDVkMmM5YTk3ZGE3YjA5MTVhNGE3YWQiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNV8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyODoxNjoiMDNiMGQzOTYyZjZkMTc1NDljYmZjYTExMjk0MzQ4ZGNmMGU3ZTM5ZjhjMmJjNjgyNGYyMTY0YjYwNmQ2ODc4NjBkYWUxZTYzMjM5M2NmZWRmNTEzMjI4MjI5MDY5ZTJmNjBlNGFjZDdlNjMzYTQzNjA2M2Y4MjM4NWY0ODk5MzcwNyI6MTY6IjAyZTRjMzJlMmY1MTcyNjliNzA3MjMwOWYwMGMwZTMxMzY1ZjdjZTI4YjIzNmI4MjkxMmRmMjM5YWJmMzk1NzJjZjBlZDYwNGIwMjk4MmU1MzU2NGM1MmQ2YTA1Mzk3ZGU1YzA1MmEyZmRkYzE0MWVmNzE4OTgzNjM0NmFlYjMzMWYiOjE2OiIwYWFkZjNmOWMxMjVlNWQ4OTFmMzFhYzQ0OGU5OTNkZWZlNTgwZjgwMmI0NWY5ZDdmMjJiYTUwMjFlOWM0NzU3NmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OGQxYzIzNDQ2NzE2NmIyYTJiODQ5YTA1YTg4OWMwNjBhYzBkYTBjNWZhZThiNTVmMzA5YmE2MmU3MDM3NDJmYTAzMjZmMmQxMGIwMTEwMjE0ODlmZjQ5Nzc3MDE5MGQ4OTVmZDM5ZjUyMjkzYzM5ZWZkNzNhNjk4YmRhYjlmMTBlZDkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMzA4YjBlY2JkMmM3NmNiNzdmYzZmNzBjNWVkZDIzM2ZkMmYyMDkyOWQ2MjlmMDI2OTUzYmI2MmE4ZjRhM2EzMTRiZGUxOTVkZTg1YjVmODE2ZGEyYWFiMDc0ZDI2Y2I2YWNkZGYzMjNhZTNiOWM2NzhhYzNjZjEyZmJkZGU3IjoiMjI4NWY0MGQ3NzA0ODJmOWE5ZWZhMmM3MmNiM2FjNTU3MTZkYzBjYSI6IjA3NzA5NTIxODE2NDlmOWY5ZjA3ZmY2MjZmZjNhMjJjMzVjNDYyNDQzZDkwNWQ0NTZhOWZkMGJmZjQzY2FjMmNhN2E5ZjU1NGU5NDc4YjlhY2MzYWM4MzhiMDIwNDBmZmQzZTE4NDdkZTJlNDI1MzkyOWY5ZGQ5ZWU0MDQ0MzI1YTliMDVjYWJiODA4YjJlZTg0MGQzNGUxNWQxMDVhM2YxZjdiMjc2OTVhMWEwN2EyZDczZmUwOGVjYWFhM2M5YzlkNGQ1YTg5ZmY4OTBkNTQ3MjdkN2FlNDBjMGVjMWE4ZGQ4NjE2NWQ4ZWUyYzYzNjgxNDEwMTZhNDhiNTViNjk2NyI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA1XzQKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDI4OjE2OiIwM2IwZDM5NjJmNmQxNzU0OWNiZmNhMTEyOTQzNDhkY2YwZTdlMzlmOGMyYmM2ODI0ZjIxNjRiNjA2ZDY4Nzg2MGRhZTFlNjMyMzkzY2ZlZGY1MTMyMjgyMjkwNjllMmY2MGU0YWNkN2U2MzNhNDM2MDYzZjgyMzg1ZjQ4OTkzNzA3IjoxNjoiMDJlNGMzMmUyZjUxNzI2OWI3MDcyMzA5ZjAwYzBlMzEzNjVmN2NlMjhiMjM2YjgyOTEyZGYyMzlhYmYzOTU3MmNmMGVkNjA0YjAyOTgyZTUzNTY0YzUyZDZhMDUzOTdkZTVjMDUyYTJmZGRjMTQxZWY3MTg5ODM2MzQ2YWViMzMxZiI6MTY6IjBhYWRmM2Y5YzEyNWU1ZDg5MWYzMWFjNDQ4ZTk5M2RlZmU1ODBmODAyYjQ1ZjlkN2YyMmJhNTAyMWU5YzQ3NTc2YjVhMWU2ODAzMWJhOWRiNGU2ZGFiZTRkOTZhMWQ2ZjNkMjY3MjY4Y2ZmNDA4MDA1ZjExOGVmY2FkYjk5ODg4ZDFjMjM0NDY3MTY2YjJhMmI4NDlhMDVhODg5YzA2MGFjMGRhMGM1ZmFlOGI1NWYzMDliYTYyZTcwMzc0MmZhMDMyNmYyZDEwYjAxMTAyMTQ4OWZmNDk3NzcwMTkwZDg5NWZkMzlmNTIyOTNjMzllZmQ3M2E2OThiZGFiOWYxMGVkOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIxNWM1YjllZTExODUiOiI0OWZhNDVkM2E3OGRkMTBkZmQ1NzczOTlkMWViMDBhZjdlZWQ1NTEzIjoiMDgxMmI3Njc2OGViY2I2NDJkMDQwMjU4ZTVmNDQ0MWEwMTg1MjFiZDk2Njg3ZTZjNWU4OTlmY2Q2YzE3NTg4ZmY1OWE4MmNjOGFlMDNhNGI0NWIzMTI5OWFmMTc4OGMzMjlmN2RjZDI4NWY4Y2Y0Y2VkODI2MDZiOTc2MTI2NzFhNDViZWRjYTEzMzQ0MjE0NGQxNjE3ZDExNGY4MDI4NTdmMGY5ZDczOTc1MWM1N2EzZjllZTQwMDkxMmM2MWUyZTY5OTJiZTAzMWE0M2RkNDhmYTZiYTE0ZWVmN2M0MjJiNWVkYzRlN2FmYTA0ZmRkMzhmNDAyZDFjOGJiNzE5YWJmIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDVfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjg6MTY6IjAzYjBkMzk2MmY2ZDE3NTQ5Y2JmY2ExMTI5NDM0OGRjZjBlN2UzOWY4YzJiYzY4MjRmMjE2NGI2MDZkNjg3ODYwZGFlMWU2MzIzOTNjZmVkZjUxMzIyODIyOTA2OWUyZjYwZTRhY2Q3ZTYzM2E0MzYwNjNmODIzODVmNDg5OTM3MDciOjE2OiIwMmU0YzMyZTJmNTE3MjY5YjcwNzIzMDlmMDBjMGUzMTM2NWY3Y2UyOGIyMzZiODI5MTJkZjIzOWFiZjM5NTcyY2YwZWQ2MDRiMDI5ODJlNTM1NjRjNTJkNmEwNTM5N2RlNWMwNTJhMmZkZGMxNDFlZjcxODk4MzYzNDZhZWIzMzFmIjoxNjoiMGFhZGYzZjljMTI1ZTVkODkxZjMxYWM0NDhlOTkzZGVmZTU4MGY4MDJiNDVmOWQ3ZjIyYmE1MDIxZTljNDc1NzZiNWExZTY4MDMxYmE5ZGI0ZTZkYWJlNGQ5NmExZDZmM2QyNjcyNjhjZmY0MDgwMDVmMTE4ZWZjYWRiOTk4ODhkMWMyMzQ0NjcxNjZiMmEyYjg0OWEwNWE4ODljMDYwYWMwZGEwYzVmYWU4YjU1ZjMwOWJhNjJlNzAzNzQyZmEwMzI2ZjJkMTBiMDExMDIxNDg5ZmY0OTc3NzAxOTBkODk1ZmQzOWY1MjI5M2MzOWVmZDczYTY5OGJkYWI5ZjEwZWQ5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjIxMDI2ZTY4MDBjN2ZhNzI4ZmNhYWJhMGQxOTZhZTI4ZDdhMmFjNGZmZDhhYmNlNzk0ZjA5ODVmNjBjOGE2NzM3Mjc3MzY1ZDNmZWExMWRiODkyM2EyMDI5YSI6ImYwMjg3NDEzMjM0Y2M1MDM0NzI0YTA5NGM0NTg2Yjg3YWZmMTMzZmMiOiIwN2I2MGUxNGVjOTU0YmZkMjllNjBkMDA0N2U3ODlmNTFkNTcxODZjNjM1ODk5MDMzMDY3OTNjZWQzZjY4MjQxYzc0MzUyOWFiYTZhNjM3NGY5MmUxOWUwMTYzZWZhMzM2OTdlMTk2Zjc2NjFkZmFhYTQ3YWFjNmJkZTVlNTFkZWI1MDdjNzJjNTg5YTJjYTE2OTNkOTZiMTQ2MDM4MTI0OWIyY2RiOWVhYzQ0NzY5ZjI0ODljNWQzZDJmOTlmMGVlM2M3ZWU1YmY2NGE1YWM3OWM0MmJkNDMzZjE0OWJlOGNiNTk1NDgzNjE2NDA1OTU1MTNjOTdhZjdiYzI1MDk3MjMiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNV82Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyODoxNjoiMDNiMGQzOTYyZjZkMTc1NDljYmZjYTExMjk0MzQ4ZGNmMGU3ZTM5ZjhjMmJjNjgyNGYyMTY0YjYwNmQ2ODc4NjBkYWUxZTYzMjM5M2NmZWRmNTEzMjI4MjI5MDY5ZTJmNjBlNGFjZDdlNjMzYTQzNjA2M2Y4MjM4NWY0ODk5MzcwNyI6MTY6IjAyZTRjMzJlMmY1MTcyNjliNzA3MjMwOWYwMGMwZTMxMzY1ZjdjZTI4YjIzNmI4MjkxMmRmMjM5YWJmMzk1NzJjZjBlZDYwNGIwMjk4MmU1MzU2NGM1MmQ2YTA1Mzk3ZGU1YzA1MmEyZmRkYzE0MWVmNzE4OTgzNjM0NmFlYjMzMWYiOjE2OiIwYWFkZjNmOWMxMjVlNWQ4OTFmMzFhYzQ0OGU5OTNkZWZlNTgwZjgwMmI0NWY5ZDdmMjJiYTUwMjFlOWM0NzU3NmI1YTFlNjgwMzFiYTlkYjRlNmRhYmU0ZDk2YTFkNmYzZDI2NzI2OGNmZjQwODAwNWYxMThlZmNhZGI5OTg4OGQxYzIzNDQ2NzE2NmIyYTJiODQ5YTA1YTg4OWMwNjBhYzBkYTBjNWZhZThiNTVmMzA5YmE2MmU3MDM3NDJmYTAzMjZmMmQxMGIwMTEwMjE0ODlmZjQ5Nzc3MDE5MGQ4OTVmZDM5ZjUyMjkzYzM5ZWZkNzNhNjk4YmRhYjlmMTBlZDkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNTQxZTM3YjY4YjZjODg3MmI4NGMwMiI6ImQ5ZmJhNDVjOTZmMjFlNmUyNmQyOWViMmNkY2I2NTg1YmU5Y2IzNDEiOiIwOGMzNmQ0ZGRhMzM0MjNiMmVkNjgzMGQ4NWY2NDExYmExZGNmNDcwYTFmYWUwZWJlZmVlN2MwODlmMjU2Y2VmNzRjYjk2ZWE2OWMzOGY2MGYzOWFiZWU0NDEyOWJjYjRjOTJkZTdmNzk3NjIzYjIwMDc0ZTNkOWMyODk5NzAxZWQ5MDcxZTFlZmEwYmRkODRkNGMzZTUxMzAzMDJkOGYwMjQwYmFiYTRiODRhNzFjYzAzMmYyMjM1YTVmZjBmYWUyNzdjM2U4ZjkxMTJiZWY0NGM5YWUyMGQxNzVmYzlhNDA1OGJmYzkzMGJhMzFiMDJlMmU0ZjQ0NDQ4MzcxMGYyNGEiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNl8xCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyOToxNjoiMDRhNmNlOGI3MzU4ZGZhNjliZGNmNzQyNjE3MDA1YWZiNTM4NWY1ZjNhNThhMjRlZjc0YTIyYThjMDVjYjdjYzM4ZWJkNGNjOWQ5YTlkNzg5YTYyY2QwZjYwZjBjYjk0MWQzNDIzYzk2OTJlZmE0ZmUzYWRmZjI5MGM0NzQ5YTM4YiI6MTY6IjA0MDRjOWE4MDMzNzFmZWRiNGM1YmUzOWYzYzAwYjAwOWU1ZTA4YTYzYmUxZTQwMDM1Y2RhY2E1MDExY2M3MDFjZjdlZWJjYjk5ZjBmZmUxN2NmZDBhNGJmN2JlZmQyZGQ1MzZhYzk0NmRiNzk3ZmRiYzRhYmU4ZjI5MzQ5YjkxZWQiOjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNDA0NmNhOGJhYTMzNDdjYTI3ZjQ5ZTBkODFmOWNjMWQ3MWJlOWJhNTE3ZDQiOiJkZDBmNmNmZTQxNWU4OGU1YTQ2OWE1MWZiYmE2ZGZkNDBhZGI0Mzg0IjoiMDYzMGVlYmNkMjg1NmMyNGY3OTg4MDZlNDFmOWU2NzM0NWVkYTljZWRhMzg2YWNjOWZhY2FlYTFlZWVkMDZhY2U1ODM3MDk3MThkOWQxNjlmYWRmNDE0ZDVjNzZmOTI5OTY4MzNlZjMwNWI3NWIxZTRiOTVmNjYyYTIwZmFlZGMzYmFlMGM0ODI3YThiZjhhODhlZGJkNTdlYzIwM2EyN2E4NDFmMDJlNDNhNjE1YmFiMWE4Y2FjMDcwMWRlMzRkZWJkZWY2MmEwODgwODliNTVlYzM2ZWE3NTIyZmQzZWM4ZDA2YjZhMDczZTZkZjgzMzE1M2JjMGFlZmQ5M2JkMWEzIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDZfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjk6MTY6IjA0YTZjZThiNzM1OGRmYTY5YmRjZjc0MjYxNzAwNWFmYjUzODVmNWYzYTU4YTI0ZWY3NGEyMmE4YzA1Y2I3Y2MzOGViZDRjYzlkOWE5ZDc4OWE2MmNkMGY2MGYwY2I5NDFkMzQyM2M5NjkyZWZhNGZlM2FkZmYyOTBjNDc0OWEzOGIiOjE2OiIwNDA0YzlhODAzMzcxZmVkYjRjNWJlMzlmM2MwMGIwMDllNWUwOGE2M2JlMWU0MDAzNWNkYWNhNTAxMWNjNzAxY2Y3ZWViY2I5OWYwZmZlMTdjZmQwYTRiZjdiZWZkMmRkNTM2YWM5NDZkYjc5N2ZkYmM0YWJlOGYyOTM0OWI5MWVkIjoxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjVjYzcyYzYwMjMxZGYwM2IzZDQwZjliNTc5MzFiYzMxMTA5Zjk3MjUyN2YyOGIxOWU3NDgwYzcyODhjYjNjOTJiMjI1MTIyMTRlNGJlNmM5MTQ3OTJkZGFiZGY1N2ZhYThhYTciOiI4ZDE0YmQ5NDZhMTM1MTE0OGY1Y2FlMmVkOWEwYzY1M2U4NWViZDg1IjoiMGViYzM3Mzc2MTczYTRmZDJmODljYzU1YzJjYTYyYjI2YjExZDUxYzNjN2NlNDllODg0NWY3NGU3NjA3MzE3YzQzNmJjOGQyM2I5NjY3ZGZlYjlkMDg3MjM0YjQ3YmM2ODM3MTc1YWU1YzA1NTlmNmI4MWQ3ZDIyNDE2ZDNlNTBmNGFjNTMzZDhmMDgxMmYyZGI5ZTc5MWZlOWM3NzVhYzhiNmFkMGY1MzVhZDljZWIyM2E0YTAyMDE0YzU4YWIzZjhkMzE2MTQ5OWEyNjBmMzkzNDhlNzE0YWUyYTFkMzQ0MzIwOGZkOGI3MjJjY2ZkZmIzOTNlOTgwMTFmOTllNjNmIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDZfMworcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjk6MTY6IjA0YTZjZThiNzM1OGRmYTY5YmRjZjc0MjYxNzAwNWFmYjUzODVmNWYzYTU4YTI0ZWY3NGEyMmE4YzA1Y2I3Y2MzOGViZDRjYzlkOWE5ZDc4OWE2MmNkMGY2MGYwY2I5NDFkMzQyM2M5NjkyZWZhNGZlM2FkZmYyOTBjNDc0OWEzOGIiOjE2OiIwNDA0YzlhODAzMzcxZmVkYjRjNWJlMzlmM2MwMGIwMDllNWUwOGE2M2JlMWU0MDAzNWNkYWNhNTAxMWNjNzAxY2Y3ZWViY2I5OWYwZmZlMTdjZmQwYTRiZjdiZWZkMmRkNTM2YWM5NDZkYjc5N2ZkYmM0YWJlOGYyOTM0OWI5MWVkIjoxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImIyMGU2NTEzMDMwOTJmNGJjY2I0MzA3MGMwZjg2ZDIzMDQ5MzYyZWQ5NjY0MmZjNTYzMmMyN2RiNGE1MmUzZDgzMWYyYWIwNjhiMjNiMTQ5ODc5YzAwMmY2YmYzZmVlZTk3NTkxMTEyNTYyYyI6IjZjMDc1YmM0NTUyMGYxNjVjMGJmNWVhNGM1ZGYxOTFiYzllZjBlNDQiOiIwYTk4YmYxMDkzNjE5Mzk0NDM2Y2Y2OGQ4ZjM4ZTJmMTU4ZmRlOGVhNTRmMzQzNWYyMzliOGQwNmI4MzIxODQ0MjAyNDc2YWVlZDk2MDA5NDkyNDgwY2UzYThkNzA1NDk4YzRjOGM2OGYwMTUwMWRjODFkYjYwOGY2MDA4NzM1MGM4YzNiMGJkMmU5ZWY2YTgxNDU4YjdjODAxYjg5ZjJlNGZlOTlkNDkwMGJhNmE0YjVlNWE5NmQ4NjVkYzY3NmM3NzU1OTI4Nzk0MTMwZDYyODBhODE2MGExOTBmMmRmM2VhN2NmOWFhMDI3MWQ4OGU5ZTY5MDVlY2YxYzUxNTJkNjUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNl80Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyOToxNjoiMDRhNmNlOGI3MzU4ZGZhNjliZGNmNzQyNjE3MDA1YWZiNTM4NWY1ZjNhNThhMjRlZjc0YTIyYThjMDVjYjdjYzM4ZWJkNGNjOWQ5YTlkNzg5YTYyY2QwZjYwZjBjYjk0MWQzNDIzYzk2OTJlZmE0ZmUzYWRmZjI5MGM0NzQ5YTM4YiI6MTY6IjA0MDRjOWE4MDMzNzFmZWRiNGM1YmUzOWYzYzAwYjAwOWU1ZTA4YTYzYmUxZTQwMDM1Y2RhY2E1MDExY2M3MDFjZjdlZWJjYjk5ZjBmZmUxN2NmZDBhNGJmN2JlZmQyZGQ1MzZhYzk0NmRiNzk3ZmRiYzRhYmU4ZjI5MzQ5YjkxZWQiOjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNjg0ZTMwMzhjNWMwNDFmNyI6IjNiYmMzYmQ2NjM3ZGZlMTI4NDY5MDEwMjliZjViMGMwNzEwMzQzOWMiOiIwMDhlN2E2N2NhY2ZiNWM0ZTI0YmVjN2RlZTE0OTExN2YxOTU5OGNlOGM0NTgwOGZlZjg4YzYwOGZmOWNkNmU2OTUyNjNiOWEzYzBhZDRiOGJhNGM5NTIzOGU5NmE4NDIyYjg1MzU2MjljOGQ1MzgyMzc0NDc5YWQxM2ZhMzk5NzRiMjQyZjlhNzU5ZWVhZjljODNhZDVhOGNhMTg5NDBhMDE2MmJhNzU1ODc2ZGYyNjNmNGJkNTBjNjUyNWM1NjA5MDI2N2MxZjBlMDljZTA4OTlhMGNmMzU5ZTg4MTIwYWJkOWJmODkzNDQ1YjNjYWU3N2QzNjA3MzU5YWU5YTUyZjgiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgNl81Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAyOToxNjoiMDRhNmNlOGI3MzU4ZGZhNjliZGNmNzQyNjE3MDA1YWZiNTM4NWY1ZjNhNThhMjRlZjc0YTIyYThjMDVjYjdjYzM4ZWJkNGNjOWQ5YTlkNzg5YTYyY2QwZjYwZjBjYjk0MWQzNDIzYzk2OTJlZmE0ZmUzYWRmZjI5MGM0NzQ5YTM4YiI6MTY6IjA0MDRjOWE4MDMzNzFmZWRiNGM1YmUzOWYzYzAwYjAwOWU1ZTA4YTYzYmUxZTQwMDM1Y2RhY2E1MDExY2M3MDFjZjdlZWJjYjk5ZjBmZmUxN2NmZDBhNGJmN2JlZmQyZGQ1MzZhYzk0NmRiNzk3ZmRiYzRhYmU4ZjI5MzQ5YjkxZWQiOjE2OiIxMmIxN2Y2ZGFkMmVjZDE5ZmY0NmRjMTNmNzg2MGYwOWUwZTBjZmI2NzdiMzhhNTI1OTIzMDVjZWFmMDIyYzE2NmRiOTBkMDRhYzI5ZTMzZjdkZDEyZDlmYWY2NmUwODE2YmI2M2VhZDI2N2NjN2Q0NmMxN2MzN2JlMjE0YmNhMmEyMmQ3MjNhNjRlNDQ0MDc0MzZiNmZjOTY1NzI5YWVmYzI1NTRmMzc2Y2Q1ZGNlYTY4MjkzNzgwYTYyYmYzOWQwMDI5NDg1YTE2MGJiYjllNWRjMDk3MmQyMWE1MDRmNTJlNWVlMDI4YWE0MTYzMzJmNTEwYjJlOWNmZjVmNzIyYWYiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiMzI0ODhjYjI2MmQwNDFkNmU0ZGQzNWY5ODdiZjNjYTY5NmRiMWYwNmFjMjlhNDQ2OTMiOiJiNDZiNDE4OTNlOGJlZjMyNmY2NzU5MzgzYTgzMDcxZGFlN2ZjYWJjIjoiMDAwMDM0NzQ0MTZjN2I2OGJkZjk2MWMzODU3Mzc5NDRkN2YxZjQwY2IzOTUzNDNjNjkzY2MwYjRmZTYzYjMxZmVkZjFlYWVlYWM5Y2NjMDY3OGIzMWRjMzJlMDk3NzQ4OTUxNGM0ZjA5MDg1ZjYyOThhOTY1M2YwMWFlYTQwNDVmZjU4MmVlODg3YmUyNmFlNTc1YjczZWVmN2YzNzc0OTIxZTM3NWEzZDE5YWRkYTBjYTMxYWExODQ5ODg3YzFmNDJjYWM5Njc3ZjdhMmY0ZTkyM2Y2ZTVhODY4YjM4YzA4NGVmMTg3NTk0ZGM5ZjdmMDQ4ZmVhMmUwMjk1NTM4NGFiIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDZfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMjk6MTY6IjA0YTZjZThiNzM1OGRmYTY5YmRjZjc0MjYxNzAwNWFmYjUzODVmNWYzYTU4YTI0ZWY3NGEyMmE4YzA1Y2I3Y2MzOGViZDRjYzlkOWE5ZDc4OWE2MmNkMGY2MGYwY2I5NDFkMzQyM2M5NjkyZWZhNGZlM2FkZmYyOTBjNDc0OWEzOGIiOjE2OiIwNDA0YzlhODAzMzcxZmVkYjRjNWJlMzlmM2MwMGIwMDllNWUwOGE2M2JlMWU0MDAzNWNkYWNhNTAxMWNjNzAxY2Y3ZWViY2I5OWYwZmZlMTdjZmQwYTRiZjdiZWZkMmRkNTM2YWM5NDZkYjc5N2ZkYmM0YWJlOGYyOTM0OWI5MWVkIjoxNjoiMTJiMTdmNmRhZDJlY2QxOWZmNDZkYzEzZjc4NjBmMDllMGUwY2ZiNjc3YjM4YTUyNTkyMzA1Y2VhZjAyMmMxNjZkYjkwZDA0YWMyOWUzM2Y3ZGQxMmQ5ZmFmNjZlMDgxNmJiNjNlYWQyNjdjYzdkNDZjMTdjMzdiZTIxNGJjYTJhMjJkNzIzYTY0ZTQ0NDA3NDM2YjZmYzk2NTcyOWFlZmMyNTU0ZjM3NmNkNWRjZWE2ODI5Mzc4MGE2MmJmMzlkMDAyOTQ4NWExNjBiYmI5ZTVkYzA5NzJkMjFhNTA0ZjUyZTVlZTAyOGFhNDE2MzMyZjUxMGIyZTljZmY1ZjcyMmFmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjUwYmExNGJlODQ2MjcyMDI3OWMzMDZiYSI6IjBhMjQwMzMxMmE0MWUzZDUyZjA2MGZiYzEzYTY3ZGU1Y2Y3NjA5YTciOiIwYTAyNmRkYTVmYzg3ODVmN2JkOWJmNzUzMjdiNjNlODVlMmMwZmRlZTVkYWRiNjVlYmRjYWM5YWUxZGU5NWM5MmM2NzJhYjQzM2FhN2E4ZTY5Y2U2YTZkODg5N2ZhYzRhYzRhNTRkZTg0MWFlNWU1YmJjZTc2ODc4NzlkNzk2MzRjZWE3YTMwNjg0MDY1YzcxNGQ1MjQwOWI5MjgyNTZiYmY1M2VhYmNkNTIzMWViNzI1OTUwNDUzNzM5OWJkMjkxNjRiNzI2ZDMzYTQ2ZGE3MDEzNjBhNDE2OGEwOTFjY2FiNzJkNDRhNjJmZWQyNDZjMGZmZWE1YjEzNDhhYjU0NzAiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgN18xCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMDoxNjoiMDc0OTI2MmMxMTFjZDQ3MGVjMjU2NmU2YjM3MzJmYzA5MzI5NDY5YWExOTA3MWQzYjljMDE5MDY1MTRjNmYxZDI2YmFhMTRiZWFiMDk3MWM4YjdlNjExYTRmNzkwMDlkNmZlYTc3NjkyOGNhMjUyODViMGRlMzY0M2QxYTNmOGM3MSI6MTY6IjA2YmMxZTUwZTk2YzAyYmY2MzZlOWVlYThiODk5YmJlYmY3NjUxZGU3N2RkNDc0YzNlOWJjMjNiYWQ4MTgyYjYxOTA0YzdkOTdkZmJlYmZiMWUwMDEwODg3OGI2ZTY3ZTQxNTM5MWQ2Nzk0MmMyYjJiZjliNDQzNWY4OGIwY2IwMjMiOjE2OiIzMTExNzlmMGJjZmM5YjlkM2NhMzE1ZDAwZWYzMGQ3YmRkM2EyY2ZhZTk5MTFiZmVkY2I5NDhiM2E0NzgyZDA3MzJiNmFiNDRhYTRiZjAzNzQxYTY0NGRjMDFiZWMzZTY5YjAxYTAzM2U2NzVkOGFjZDdjNDkyNWM2YjFhZWMzMTE5MDUxZGZkODk3NjJkMjE1ZDQ1NDc1ZmZjYjU5ZjkwODE0ODYyM2YzNzE3NzE1NmY2YWU4NmRkN2E3YzVmNDNkYzFlMWY5MDgyNTQwNThhMjg0YTVmMDZjMDAyMTc5M2E4N2YxYWM1ZmVmZjdkY2FlZTY5YzVlNTFhMzc4OWUzNzMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNDdhYWU5MDkiOiI0M2RkMDlhMDdmZjRjYWM3MWNhYTQ2MzJlZTVlMWMxZGFlZTRjZDhmIjoiMTY4OGU0Y2U3Nzk0YmJhNmNiNzAxNDE2OWVjZDU1OWNlZGUyYTMwYjU2YTUyYjY4ZDlmZTE4Y2YxOTczZWY5N2IyYTAzMTUzOTUxYzc1NWY2Mjk0YWE0OWFkYmRiNTU4NDVhYjY4NzVmYjM5ODZjOTNlY2Y5Mjc5NjI4NDBkMjgyZjllNTRjZThiNjkwZjdjMGNiOGJiZDczNDQwZDk1NzFkMWIxNmNkOTI2MGY5ZWFiNDc4M2NjNDgyZTUyMjNkYzYwOTczODcxNzgzZWMyN2IwYWUwZmQ0NzczMmNiYzI4NmExNzNmYzkyYjAwZmI0YmE2ODI0NjQ3Y2Q5M2M4NWMxIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDdfMgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzA6MTY6IjA3NDkyNjJjMTExY2Q0NzBlYzI1NjZlNmIzNzMyZmMwOTMyOTQ2OWFhMTkwNzFkM2I5YzAxOTA2NTE0YzZmMWQyNmJhYTE0YmVhYjA5NzFjOGI3ZTYxMWE0Zjc5MDA5ZDZmZWE3NzY5MjhjYTI1Mjg1YjBkZTM2NDNkMWEzZjhjNzEiOjE2OiIwNmJjMWU1MGU5NmMwMmJmNjM2ZTllZWE4Yjg5OWJiZWJmNzY1MWRlNzdkZDQ3NGMzZTliYzIzYmFkODE4MmI2MTkwNGM3ZDk3ZGZiZWJmYjFlMDAxMDg4NzhiNmU2N2U0MTUzOTFkNjc5NDJjMmIyYmY5YjQ0MzVmODhiMGNiMDIzIjoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjFkOWIyZTIyMjNkOWJjMTNiZmI5ZjE2MmNlNzM1ZGI0OGJhN2M2OGY2ODIyYTBhMWE3YjZhZTE2NTgzNGU3IjoiM2E5YzNjZWM3Yjg0ZjliZDNhZGVjYmM2NzNlYzk5ZDU0YjIyYmM5YiI6IjEwNTJlZDM5N2IyZTAxZTFkMGVlMWM1MGJmMjQzNjNmOTVlNTA0ZjRhMDM0MzRhMDhmZDgyMjU3NGVkNmI5NzM2ZWRiYjVmMzkwZGIxMDMyMTQ3OWE4YTEzOTM1MGUyYmQ0OTc3YzM3NzhlZjMzMWYzZTc4YWUxMThiMjY4NDUxZjIwYTJmMDFkNDcxZjVkNTNjNTY2OTM3MTcxYjJkYmMyZDRiZGU0NTlhNTc5OWYwMzcyZDY1NzQyMzliMjMyM2QyNDVkMGJiODFjMjg2YjYzYzg5YTM2MTAxNzMzN2U0OTAyZjg4YTQ2N2Y0YzdmMjQ0YmZkNWFiNDY0MzdmZjNiNiI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA3XzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMwOjE2OiIwNzQ5MjYyYzExMWNkNDcwZWMyNTY2ZTZiMzczMmZjMDkzMjk0NjlhYTE5MDcxZDNiOWMwMTkwNjUxNGM2ZjFkMjZiYWExNGJlYWIwOTcxYzhiN2U2MTFhNGY3OTAwOWQ2ZmVhNzc2OTI4Y2EyNTI4NWIwZGUzNjQzZDFhM2Y4YzcxIjoxNjoiMDZiYzFlNTBlOTZjMDJiZjYzNmU5ZWVhOGI4OTliYmViZjc2NTFkZTc3ZGQ0NzRjM2U5YmMyM2JhZDgxODJiNjE5MDRjN2Q5N2RmYmViZmIxZTAwMTA4ODc4YjZlNjdlNDE1MzkxZDY3OTQyYzJiMmJmOWI0NDM1Zjg4YjBjYjAyMyI6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJkOTc2ZmMiOiI3NmE3NWU1YjYxNTdhNTU2Y2Y4ODg0YmIyZTQ1YzI5M2RkNTQ1Y2Y1IjoiMjE1NWNkODQzZmYyNGE0ZWU4YmFkYjc2OTQyNjAwMjhhNDkwODEzYmE4YjM2OWE0Y2JmMTA2ZWMxNDhlNTI5ODcwN2Y1OTY1YmU3ZDEwMWMxMDQ5ZWE4NTg0YzI0Y2Q2MzQ1NWFkOWMxMDRkNjg2MjgyZDNmYjgwM2E0YzExYzFjMmU5YjkxYzcxNzg4MDFkMWI2NjQwZjAwM2Y1NzI4ZGYwMDdiOGE0Y2NjOTJiY2UwNWU0MWEyNzI3OGQ3Yzg1MDE4YzUyNDE0MzEzYTUwNzc3ODkwMDFkNGYwMTkxMGI3MmFhZDA1ZDIyMGFhMTRhNTg3MzNhNzQ4OWJjNTQ1NTZiIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDdfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzA6MTY6IjA3NDkyNjJjMTExY2Q0NzBlYzI1NjZlNmIzNzMyZmMwOTMyOTQ2OWFhMTkwNzFkM2I5YzAxOTA2NTE0YzZmMWQyNmJhYTE0YmVhYjA5NzFjOGI3ZTYxMWE0Zjc5MDA5ZDZmZWE3NzY5MjhjYTI1Mjg1YjBkZTM2NDNkMWEzZjhjNzEiOjE2OiIwNmJjMWU1MGU5NmMwMmJmNjM2ZTllZWE4Yjg5OWJiZWJmNzY1MWRlNzdkZDQ3NGMzZTliYzIzYmFkODE4MmI2MTkwNGM3ZDk3ZGZiZWJmYjFlMDAxMDg4NzhiNmU2N2U0MTUzOTFkNjc5NDJjMmIyYmY5YjQ0MzVmODhiMGNiMDIzIjoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImQ0NzM4NjIzZGYyMjNhYTQzODQzZGY4NDY3NTM0YzQxZDAxM2UwYzgwM2M2MjRlMjYzNjY2YjIzOWJkZTQwYTVmMjlhZWI4ZGU3OWUzZGFhNjFkZDAzNzBmNDliZDRiMDEzODM0Yjk4MjEyYWVmNmIxYzVlZTM3M2IzY2IiOiI3ODY2MzE0YTZhZDZmMmIyNTBhMzU5NDFkYjI4ZjU4NjRiNTg1ODU5IjoiMGFiMTRjMzczYWViN2Q0MzI4ZDBhYWFkOGMwOTRkODhiOWViMDk4Yjk1ZjIxMDU0YTI5MDgyNTIyYmU3YzI3YTMxMjg3OGI2Mzc5MTdlM2Q4MTllNmMzYzU2OGRiNWQ4NDM4MDJiMDZkNTFkOWU5OGEyYmUwYmY0MGMwMzE0MjNiMDBlZGZiZmY4MzIwZWZiOTE3MWJkMjA0NDY1M2E0Y2I5YzUxMjJmNmM2NWU4M2NkYTJlYzNjMTI2MDI3YTljMWE1NmJhODc0ZDBmZWEyM2YzODBiODJjZjI0MGI4Y2Y1NDAwMDQ3NThjNGM3N2Q5MzQxNTdhNzRmM2ZjMTJiZmFjIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDdfNQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzA6MTY6IjA3NDkyNjJjMTExY2Q0NzBlYzI1NjZlNmIzNzMyZmMwOTMyOTQ2OWFhMTkwNzFkM2I5YzAxOTA2NTE0YzZmMWQyNmJhYTE0YmVhYjA5NzFjOGI3ZTYxMWE0Zjc5MDA5ZDZmZWE3NzY5MjhjYTI1Mjg1YjBkZTM2NDNkMWEzZjhjNzEiOjE2OiIwNmJjMWU1MGU5NmMwMmJmNjM2ZTllZWE4Yjg5OWJiZWJmNzY1MWRlNzdkZDQ3NGMzZTliYzIzYmFkODE4MmI2MTkwNGM3ZDk3ZGZiZWJmYjFlMDAxMDg4NzhiNmU2N2U0MTUzOTFkNjc5NDJjMmIyYmY5YjQ0MzVmODhiMGNiMDIzIjoxNjoiMzExMTc5ZjBiY2ZjOWI5ZDNjYTMxNWQwMGVmMzBkN2JkZDNhMmNmYWU5OTExYmZlZGNiOTQ4YjNhNDc4MmQwNzMyYjZhYjQ0YWE0YmYwMzc0MWE2NDRkYzAxYmVjM2U2OWIwMWEwMzNlNjc1ZDhhY2Q3YzQ5MjVjNmIxYWVjMzExOTA1MWRmZDg5NzYyZDIxNWQ0NTQ3NWZmY2I1OWY5MDgxNDg2MjNmMzcxNzcxNTZmNmFlODZkZDdhN2M1ZjQzZGMxZTFmOTA4MjU0MDU4YTI4NGE1ZjA2YzAwMjE3OTNhODdmMWFjNWZlZmY3ZGNhZWU2OWM1ZTUxYTM3ODllMzczIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImJiNDcyMzFjYTVlYTFkM2FkNDZjOTkzNDVkOWE4YTYxIjoiYjIxNjZlZDQ3MmQ1OGRiMTBjYWIyYzZiMDAwY2NjZjEwYTdkYzUwOSI6IjAyODM4N2EzMTgyNzc0MzQ3OThiNGQ5N2Y0NjAwNjhkZjUyOThmYWJhNTA0MWJhMTE3NjFhMWNiNzMxNmIyNDE4NDExNGVjNTAwMjU3ZTI1ODllZDNiNjA3YTFlYmJlOTdhNmNjMmUwMmJmMWI2ODFmNDIzMTJhMzNiN2E3N2Q4ZTc4NTVjNGE2ZGUwM2UzYzA0NjQzZjc4NmI5MWEyNjRhMGQ2ODA1ZTJjZWE5MWU2ODE3N2ViN2E2NGQ5MjU1ZTRmMjdlNzEzYjdjY2VjMDBkYzIwMGViZDIxYzJlYTJiYjg5MGZlYWU0OTQyZGY5NDFkYzNmOTc4OTBlZDM0NzQ3OCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA3XzYKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMwOjE2OiIwNzQ5MjYyYzExMWNkNDcwZWMyNTY2ZTZiMzczMmZjMDkzMjk0NjlhYTE5MDcxZDNiOWMwMTkwNjUxNGM2ZjFkMjZiYWExNGJlYWIwOTcxYzhiN2U2MTFhNGY3OTAwOWQ2ZmVhNzc2OTI4Y2EyNTI4NWIwZGUzNjQzZDFhM2Y4YzcxIjoxNjoiMDZiYzFlNTBlOTZjMDJiZjYzNmU5ZWVhOGI4OTliYmViZjc2NTFkZTc3ZGQ0NzRjM2U5YmMyM2JhZDgxODJiNjE5MDRjN2Q5N2RmYmViZmIxZTAwMTA4ODc4YjZlNjdlNDE1MzkxZDY3OTQyYzJiMmJmOWI0NDM1Zjg4YjBjYjAyMyI6MTY6IjMxMTE3OWYwYmNmYzliOWQzY2EzMTVkMDBlZjMwZDdiZGQzYTJjZmFlOTkxMWJmZWRjYjk0OGIzYTQ3ODJkMDczMmI2YWI0NGFhNGJmMDM3NDFhNjQ0ZGMwMWJlYzNlNjliMDFhMDMzZTY3NWQ4YWNkN2M0OTI1YzZiMWFlYzMxMTkwNTFkZmQ4OTc2MmQyMTVkNDU0NzVmZmNiNTlmOTA4MTQ4NjIzZjM3MTc3MTU2ZjZhZTg2ZGQ3YTdjNWY0M2RjMWUxZjkwODI1NDA1OGEyODRhNWYwNmMwMDIxNzkzYTg3ZjFhYzVmZWZmN2RjYWVlNjljNWU1MWEzNzg5ZTM3MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiIyMTg0ODI3MDk1ZDM1YzNmODZmNjAwZThlNTk3NTQwMTMyOTYiOiI1MjY3M2JkZTJjYTE2NmMyYWE0NjEzMWFjMWRjODA4ZDY3ZDdkM2IxIjoiMTRjNjc4YTk0YWQ2MDUyNWVmMzllOTU5YjJmM2JhNWMwOTdhOTRmZjkxMmI2N2RiYWNlODA1MzVjMTg3YWJkNDdkMDc1NDIwYjE4NzIxNTJiYmEwOGY3ZmMzMWYzMTNiYmY5MjczYzkxMmZjNGMwMTQ5YTliMGNmYjc5ODA3ZTM0NmViMzMyMDY5NjExYmVjMGZmOWJjZDE2OGYxZjdjMzNlNzczMTNjZWE0NTRiOTRlMjU0OWVlY2YwMDJlMmFjZjdmNmYyZDI4NDVkNGZlMGFhYjJlNWE5MmRkZjY4YzQ4MGFlMTEyNDc5MzVkMWY2MjU3NDg0MjIxNmFlNjc0MTE1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDhfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzE6MTY6IjBhMDJlZjg0NDhkOWZhZDhiYmQwZDAwNGM4YzJhYTk3NTFlZjk3MjFjMWIwZDAzMjM2YTU0YjBkZjk0N2NiYWVkNWEyNTVlZTllOGUyMGQ0OTFlYTE3MjNmZTA5NDcwNGE5NzYyZTg4YWZkMTZlYmI1OTk0NDEyY2E5NjZkYzRmOWYiOjE2OiIwOTJkMzYyZTdlZDNhMGJmZDllOWZkMGU2YzAzMDFiNmRmMjkxNTljZjUwY2M4M2I5YjBjZjRkNmVlYTcxYTYxZTAwMmI0NmUwYWU5ZjJkZTYyZDI1YjVkNzQ1MmQ0OThiODFjOWFjNmZjNTg1OTNkNGMzZmI0ZjVkNzJkZmJiMGE5IjoxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjA1MGI3NTVlNWU2ODgwZjdiOWU5ZDY5MmE3NGMzN2FhZTQ0OWIzMWJmZWE2ZGVmZjgzNzQ3YTg5N2Y2YzJjODI1YmIxYWRiZjg1MGEzYzk2OTk0YjVkZTViMzNjYmM3ZDRhMTc5MTNhNzk2NyI6Ijc3MDZmZmNhMWVjZmIxZWJlZTJhNTVlNWM2ZTI0Y2QyNzk3YTQxMjUiOiIwOWIzNjgzZDhhMmViMGZiMjk1YjYyZWQxZmI5MjkwYjcxNDQ1N2I3ODI1MzE5ZjQ2NDc4NzJhZjg4OWIzMDQwOTQ3MjAyMGFkMTI5MTJiZjE5YjExZDQ4MTlmNDk2MTQ4MjRmZmQ4NGQwOWMwYTE3ZTdkMTczMDlkMTI5MTk3OTA0MTBhYTI5OTU2OTlmNmE4NmRiZTMyNDJiNWFjYzIzYWY0NTY5MTA4MGQ2YjFhZTgxMGZiM2UzMDU3MDg3ZjA5NzAwOTJjZTAwYmU5NTYyZmY0MDUzYjYyNjJjZTBjYWE5M2UxMzcyM2QyZTNhNWJhMDc1ZDQ1ZjBkNjFiNTRiNjEiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOF8yCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMToxNjoiMGEwMmVmODQ0OGQ5ZmFkOGJiZDBkMDA0YzhjMmFhOTc1MWVmOTcyMWMxYjBkMDMyMzZhNTRiMGRmOTQ3Y2JhZWQ1YTI1NWVlOWU4ZTIwZDQ5MWVhMTcyM2ZlMDk0NzA0YTk3NjJlODhhZmQxNmViYjU5OTQ0MTJjYTk2NmRjNGY5ZiI6MTY6IjA5MmQzNjJlN2VkM2EwYmZkOWU5ZmQwZTZjMDMwMWI2ZGYyOTE1OWNmNTBjYzgzYjliMGNmNGQ2ZWVhNzFhNjFlMDAyYjQ2ZTBhZTlmMmRlNjJkMjViNWQ3NDUyZDQ5OGI4MWM5YWM2ZmM1ODU5M2Q0YzNmYjRmNWQ3MmRmYmIwYTkiOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNGViNjhkY2Q5M2NhOWIxOWRmMTExYmQ0MzYwOGY1NTcwMjZmZTRhYTFkNWNmYWMyMjdhM2ViNWFiOTU0OGMxOGEwNmRkZWQyM2Y4MTgyNTk4NmIyZmNkNzExMDllY2VmN2VmZjg4ODczZjA3NWMyYWEwYzQ2OWY2OWM5MmJjIjoiYTM3MTdkYTE0M2I0ZGNmZmJjNzQyNjY1YThmYTk1MDU4NTU0ODM0MyI6IjJlY2YxNWM5N2M1YTE1YjE0NzZhZTk4NmIzNzFiNTdhMjQyODRmNGExNjJhOGQwYzgxODJlNzkwNWU3OTIyNTZmMTgxMmJhNWY4M2YxZjdhMTMwZTQyZGNjMDIyMzI4NDRlZGMxNGEzMWE2OGVlOTdhZTU2NGEzODNhMzQxMTY1NjQyNGM1ZjYyZGRiNjQ2MDkzYzM2N2JlMWZjZGE0MjZjZjAwYTA2ZDhhY2I3ZTU3Nzc2ZmJiZDg1NWFjM2RmNTA2ZmMxNmIxZDdjM2YyMTEwZjNkODA2OGU5MWUxODYzNjM4MzFjODQwOTY4MGQ4ZGE5ZWNkOGNmMWZhMjBlZTM5ZCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA4XzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMxOjE2OiIwYTAyZWY4NDQ4ZDlmYWQ4YmJkMGQwMDRjOGMyYWE5NzUxZWY5NzIxYzFiMGQwMzIzNmE1NGIwZGY5NDdjYmFlZDVhMjU1ZWU5ZThlMjBkNDkxZWExNzIzZmUwOTQ3MDRhOTc2MmU4OGFmZDE2ZWJiNTk5NDQxMmNhOTY2ZGM0ZjlmIjoxNjoiMDkyZDM2MmU3ZWQzYTBiZmQ5ZTlmZDBlNmMwMzAxYjZkZjI5MTU5Y2Y1MGNjODNiOWIwY2Y0ZDZlZWE3MWE2MWUwMDJiNDZlMGFlOWYyZGU2MmQyNWI1ZDc0NTJkNDk4YjgxYzlhYzZmYzU4NTkzZDRjM2ZiNGY1ZDcyZGZiYjBhOSI6MTY6IjViZGYwZTMwZDMyMWRkYTUxNDdmODgyNDA4ZmE2OTE5NTQ4MGRmOGY4MGQzZjZlOGJmNTgxODUwNGYzNjQyN2NhOWIxZjU1NDBiOWM2NWE4ZjY5NzRjZjg0NDdhMjQ0ZDkyODAyMDFiYjQ5ZmNiYmU2Mzc4ZDE5NDRjZDIyN2UyMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MzEzNTljZDIyNjY5NjQ3ZmJiMTcxNzI0NjEzNGVkN2I0OTdjZmZmYmRjNDJiNTljNzNhOTZlZDkwMTY2MjEyZGZmNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI4NjA0YWM1NjMyOGMxYWI1YWQ5MTc4NjEiOiJlZTA2MjA5MDczY2NhMDI2YmIyNjRlNTE4NWJmOGM2OGI3NzM5Zjg2IjoiNGJjODkxMzBhNWIyZGFiYjdjMmZjZjkwZWI1ZDBlYWY5ZTY4MWI3MTQ2YTM4ZjMxNzNhM2Q5Y2ZlYzUyZWE5ZTBhNDE5MzJlNjQ4YTlkNjkzNDRjNTBkYTc2M2Y1MWEwM2M5NTc2MjEzMWU4MDUyMjU0ZGNkMjI0OGNiYTQwZmQzMTY2Nzc4NmNlMDVhMmI3YjUzMWFjOWRhYzllZDU4NGE1OWI2NzdjMWE4YWVkOGM1ZDE1ZDY4YzA1NTY5ZTJiZTc4MGJmN2RiNjM4ZmQyYmZkMmE4NWFiMjc2ODYwZjM3NzczMzhmY2E5ODlmZmQ3NDNkMTNlZTA4ZTBjYTk4OTNmIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDhfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjEwMzE6MTY6IjBhMDJlZjg0NDhkOWZhZDhiYmQwZDAwNGM4YzJhYTk3NTFlZjk3MjFjMWIwZDAzMjM2YTU0YjBkZjk0N2NiYWVkNWEyNTVlZTllOGUyMGQ0OTFlYTE3MjNmZTA5NDcwNGE5NzYyZTg4YWZkMTZlYmI1OTk0NDEyY2E5NjZkYzRmOWYiOjE2OiIwOTJkMzYyZTdlZDNhMGJmZDllOWZkMGU2YzAzMDFiNmRmMjkxNTljZjUwY2M4M2I5YjBjZjRkNmVlYTcxYTYxZTAwMmI0NmUwYWU5ZjJkZTYyZDI1YjVkNzQ1MmQ0OThiODFjOWFjNmZjNTg1OTNkNGMzZmI0ZjVkNzJkZmJiMGE5IjoxNjoiNWJkZjBlMzBkMzIxZGRhNTE0N2Y4ODI0MDhmYTY5MTk1NDgwZGY4ZjgwZDNmNmU4YmY1ODE4NTA0ZjM2NDI3Y2E5YjFmNTU0MGI5YzY1YThmNjk3NGNmODQ0N2EyNDRkOTI4MDIwMWJiNDlmY2JiZTYzNzhkMTk0NGNkMjI3ZTIzMGY5NmUzZDEwZjgxOWRjZWYyNzZjNjRhMDBiMmE0YjY3MDFlN2QwMWRlNWZhYmRlM2IxZTlhMGRmODJmNDYzMTM1OWNkMjI2Njk2NDdmYmIxNzE3MjQ2MTM0ZWQ3YjQ5N2NmZmZiZGM0MmI1OWM3M2E5NmVkOTAxNjYyMTJkZmY3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImZkZGE1ZmJmNmVjMzYxYTlkOWE0YWM2OGFmMjE2YTA2ODZmNDM4YjFlMGU1YzM2Yjk1NWY3NGUxMDdmMzljMGRkZGNjIjoiOTkwYWQ1NzNkYzQ4YTk3MzIzNWI2ZDgyNTQzNjE4ZjJlOTU1MTA1ZCI6IjJlNDU2ODQ3ZDhmYzM2ZmYwMTQ3ZDY5OTM1OTRiOTM5NzIyN2Q1Nzc3NTJjNzlkMGY5MDRmY2IwMzlkNGQ4MTJmZWE2MDVhN2I1NzRkZDgyY2E3ODZmOTM3NTIzNDg0MzhlZTlmNWI1NDU0OTg1ZDVmMGUxNjk5ZTNlN2FkMTc1YTMyZTE1ZjAzZGViMDQyYWI5ZmUxZGQ5ZGIxYmI4NmY4YzA4OWNjYjQ1ZTdlZjBjNWVlN2NhOWI3MjkwY2E2YjE1YmVkNDcwMzk3ODhhOGE5M2ZmODNlMGU4ZDYyNDRjNzEwMDYzNjJkZWVmNjliNmY0MTZmYjNjNjg0MzgzZmJkMCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA4XzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxMDMxOjE2OiIwYTAyZWY4NDQ4ZDlmYWQ4YmJkMGQwMDRjOGMyYWE5NzUxZWY5NzIxYzFiMGQwMzIzNmE1NGIwZGY5NDdjYmFlZDVhMjU1ZWU5ZThlMjBkNDkxZWExNzIzZmUwOTQ3MDRhOTc2MmU4OGFmZDE2ZWJiNTk5NDQxMmNhOTY2ZGM0ZjlmIjoxNjoiMDkyZDM2MmU3ZWQzYTBiZmQ5ZTlmZDBlNmMwMzAxYjZkZjI5MTU5Y2Y1MGNjODNiOWIwY2Y0ZDZlZWE3MWE2MWUwMDJiNDZlMGFlOWYyZGU2MmQyNWI1ZDc0NTJkNDk4YjgxYzlhYzZmYzU4NTkzZDRjM2ZiNGY1ZDcyZGZiYjBhOSI6MTY6IjViZGYwZTMwZDMyMWRkYTUxNDdmODgyNDA4ZmE2OTE5NTQ4MGRmOGY4MGQzZjZlOGJmNTgxODUwNGYzNjQyN2NhOWIxZjU1NDBiOWM2NWE4ZjY5NzRjZjg0NDdhMjQ0ZDkyODAyMDFiYjQ5ZmNiYmU2Mzc4ZDE5NDRjZDIyN2UyMzBmOTZlM2QxMGY4MTlkY2VmMjc2YzY0YTAwYjJhNGI2NzAxZTdkMDFkZTVmYWJkZTNiMWU5YTBkZjgyZjQ2MzEzNTljZDIyNjY5NjQ3ZmJiMTcxNzI0NjEzNGVkN2I0OTdjZmZmYmRjNDJiNTljNzNhOTZlZDkwMTY2MjEyZGZmNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiI0YTVmNDkxNGJlZTI1ZGUzYzY5MzQxZGUwNyI6ImVjYzYzYjI4ZjA3NTZmMjJmNTJhYzhlNmVjMTI1MWE2ZWMzMDQ3MTgiOiIxZmI5MzU2ZmQ1YzRiMTc5NmRiMmViZjdkMGQzOTNjYzgxMGFkZjYxNDVkZWZjMmZjZTcxNGY3OWQ5MzgwMGQ1ZTJhYzIxMWVhOGJiZWNjYTRiNjU0Yjk0YzNiMThiMzBkZDU3NmNlMzRkYzk1NDM2ZWY1N2EwOTQxNTY0NTkyMzM1OWE1ZDdiNDE3MWVmMjJjMjQ2NzBmMWIyMjlkMzYwM2U5MWY3NjY3MWI3ZGY5N2U3MzE3Yzk3NzM0NDc2ZDVmM2QxN2QyMWNmODJiNWJhOWY4M2RmMmU1ODhkMzY5ODRmZDFiNTg0NDY4YmQyM2IyZTg3NWYzMmY2ODk1M2Y3YjIiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOF82Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTAzMToxNjoiMGEwMmVmODQ0OGQ5ZmFkOGJiZDBkMDA0YzhjMmFhOTc1MWVmOTcyMWMxYjBkMDMyMzZhNTRiMGRmOTQ3Y2JhZWQ1YTI1NWVlOWU4ZTIwZDQ5MWVhMTcyM2ZlMDk0NzA0YTk3NjJlODhhZmQxNmViYjU5OTQ0MTJjYTk2NmRjNGY5ZiI6MTY6IjA5MmQzNjJlN2VkM2EwYmZkOWU5ZmQwZTZjMDMwMWI2ZGYyOTE1OWNmNTBjYzgzYjliMGNmNGQ2ZWVhNzFhNjFlMDAyYjQ2ZTBhZTlmMmRlNjJkMjViNWQ3NDUyZDQ5OGI4MWM5YWM2ZmM1ODU5M2Q0YzNmYjRmNWQ3MmRmYmIwYTkiOjE2OiI1YmRmMGUzMGQzMjFkZGE1MTQ3Zjg4MjQwOGZhNjkxOTU0ODBkZjhmODBkM2Y2ZThiZjU4MTg1MDRmMzY0MjdjYTliMWY1NTQwYjljNjVhOGY2OTc0Y2Y4NDQ3YTI0NGQ5MjgwMjAxYmI0OWZjYmJlNjM3OGQxOTQ0Y2QyMjdlMjMwZjk2ZTNkMTBmODE5ZGNlZjI3NmM2NGEwMGIyYTRiNjcwMWU3ZDAxZGU1ZmFiZGUzYjFlOWEwZGY4MmY0NjMxMzU5Y2QyMjY2OTY0N2ZiYjE3MTcyNDYxMzRlZDdiNDk3Y2ZmZmJkYzQyYjU5YzczYTk2ZWQ5MDE2NjIxMmRmZjciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiOGUwN2Q2NmY3Yjg4MGE3MjU2M2FiY2QzZjM1MDkyYmMzMzQwOWZiN2Y4OGYyNDcyYmUiOiIzOTI1YzcxYjM2MmQ0MGEwYTZkZTQyMTQ1NTc5YmExZTdkZDQ1OWZjIjoiM2FmZDljNjYwMDE0N2IyMTc5OGQ4MThjNjU1YTBmNGM5MjEyZGIyNmQwYjBkZmRjMmE3NTk0Y2NiM2QyMmY1YmYxZDdjM2UxMTJjZDczZmM3ZDUwOWM3YThiYWZkZDNjMjc0ZDEzOTkwMDlmOTYwOWVjNGJlNjQ3N2U0NTNmMDc1YWEzM2RiMzgyODcwYzFjMzQwOWFlZjM5MmQ3Mzg2YWUzYTY5NmI5OWE5NGI0ZGEwNTg5NDQ3ZTk1NWQxNmM5OGIxNzYwMmE1OWJkNzM2Mjc5ZmNkOGZiMjgwYzQ0NjJkNTkwYmZhOWJmMTNmZWQ1NzBlYWZkZTk3MzMwYTJjMjEwIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDlfMQorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjE1MzY6MTY6ImZjOGQ2YzA0YmVjNGViOWE4MTkyY2E3OTAwY2JlNTM2ZTJlOGI1MTlkZWNmMzNiMjQ1OTc5OGM2OTA5ZGY0ZjE3NmRiN2QyMzE5MGZjNzJiODg2NWE3MThhZjg5NWYxYmNkOTE0NTI5ODAyNzQyM2I2MDVlNzBhNDdjZjU4MzkwYThjM2U4OGZjOGM0OGU4YjMyZTNkYTIxMGRmYmUzZTg4MWVhNTY3NGI2YTM0OGMyMWU5M2Y5ZTU1ZWE2NWVmZCI6MTY6ImQyMDBkNDVlNzg4YWFjZWE2MDZhNDAxZDA0NjBmODdkZDVjMTAyN2UxMmRjMWEwZDc1ODZlODkzOWQ5Y2Y3ODliNDBmNTFhYzA0NDI5NjFkZTdkMjFjYzIxZTA1YzgzMTU1YzFmMmFhOTE5MzM4N2NmZGY5NTZjYjQ4ZDE1M2JhMjcwNDA2ZjliYmJhNTM3ZDQ5ODdkOWUyZjk5NDJkN2ExNGNiZmZmZWE3NGZlY2RkYTkyOGQyM2UyNTlmNWVlMSI6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmNzM1ZmQ1NWJhOTI1OTJjM2I1MmI4ZjljNGY2OWFhYTFjYmVmOGZlODhhZGQwOTU1OTU0MTI0NjdmOWNmNGVjMGI4OTZjNTllZGExNjIxMGU3NTQ5YzhhYmIxMGNkYmMyMWExMmVjOWI2YjViOGZkMmYxMDM5OWViNiI6IjhlYzk2NWYxMzRhM2VjOTkzMWU5MmExY2EwZGM4MTY5ZDVlYTcwNWMiOiIyNjdiY2QxMThhY2FiMWZjOGJhODFjODVkNzMwMDNjYjg2MTBmYTU1YzFkOTdkYThkNDhhN2M3ZjA2ODk2YTRkYjc1MWFhMjg0MjU1YjlkMzZhZDY1ZjM3NjUzZDgyOWYxYjM3Zjk3YjgwMDE5NDI1NDViMmZjMmM1NWE3Mzc2Y2E3YTFiZTRiMTc2MGM4ZTA1YTMzZTVhYTI1MjZiOGQ5OGUzMTcwODhlNzgzNGM3NTViMmE1OWIxMjYzMWExODJjMDVkNWQ0M2FiMTc3OTI2NGY4NDU2ZjUxNWNlNTdkZmRmNTEyZDU0OTNkYWI3YjczMzhkYzRiN2Q3OGRiOWMwOTFhYzNiYWY1MzdhNjlmYzdmNTQ5ZDk3OWYwZWZmOWE5NGZkYTQxNjliZDRkMWQxOWE2OWM5OWUzM2MzYjU1NDkwZDUwMWIzOWIxZWRhZTExOGZmNjc5M2ExNTMyNjE1ODRkM2E1ZjM5ZjZlNjgyZTNkMTdjOGNkMTI2MWZhNzIiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOV8yCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTUzNjoxNjoiZmM4ZDZjMDRiZWM0ZWI5YTgxOTJjYTc5MDBjYmU1MzZlMmU4YjUxOWRlY2YzM2IyNDU5Nzk4YzY5MDlkZjRmMTc2ZGI3ZDIzMTkwZmM3MmI4ODY1YTcxOGFmODk1ZjFiY2Q5MTQ1Mjk4MDI3NDIzYjYwNWU3MGE0N2NmNTgzOTBhOGMzZTg4ZmM4YzQ4ZThiMzJlM2RhMjEwZGZiZTNlODgxZWE1Njc0YjZhMzQ4YzIxZTkzZjllNTVlYTY1ZWZkIjoxNjoiZDIwMGQ0NWU3ODhhYWNlYTYwNmE0MDFkMDQ2MGY4N2RkNWMxMDI3ZTEyZGMxYTBkNzU4NmU4OTM5ZDljZjc4OWI0MGY1MWFjMDQ0Mjk2MWRlN2QyMWNjMjFlMDVjODMxNTVjMWYyYWE5MTkzMzg3Y2ZkZjk1NmNiNDhkMTUzYmEyNzA0MDZmOWJiYmE1MzdkNDk4N2Q5ZTJmOTk0MmQ3YTE0Y2JmZmZlYTc0ZmVjZGRhOTI4ZDIzZTI1OWY1ZWUxIjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjgxYjkwNjYwNTAxNWE2M2FhYmU0MmRkZjExZTE5Nzg5MTJmNTQwNGM3NDc0YjI2ZGNlM2VkNDgyYmY5NjFlY2M4MThiZjQyMGM1NDY1OSI6ImVjYjFiOGIyNWZhNTBjZGFiMDhlNTYwNDI4NjdmNGFmNTgyNmQxNmMiOiI5M2FjOWYwNjcxZWMyOWFjYmI0NDRlZmZjMWE1NzQxMzUxZDYwZmRiMGUzOTNmYmY3NTRhY2YwZGU0OTc2MWExNDg0MWRmNzc3MmU5YmM4Mjc3Mzk2NmExNTg0YzRkNzJiYWVhMDAxMThmODNmMzVjY2E2ZTUzN2NiZDRkODExZjU1ODNiMjk3ODNkOGE2ZDk0Y2QzMWJlNzBkNmY1MjZjMTBmZjA5YzZmYTdjZTA2OTc5NWEzZmNkMDUxMWZkNWZjYjU2NGJjYzgwZWE5Yzc4ZjM4YjgwMDEyNTM5ZDhhNGRkZjZmZTgxZTljZGRiN2Y1MGRiYmJiY2M3ZTVkODYwOTdjY2Y0ZWM0OTE4OWZiOGJmMzE4YmU2ZDVhMDcxNWQ1MTZiNDlhZjE5MTI1OGNkMzJkYzgzM2NlNmViNDY3M2MwM2ExOWJiYWNlODhjYzU0ODk1ZjYzNmNjMGMxZWM4OTA5NmQxMWNlMjM1YTI2NWNhMTc2NDIzMmE2ODlhZTgiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOV8zCitwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTUzNjoxNjoiZmM4ZDZjMDRiZWM0ZWI5YTgxOTJjYTc5MDBjYmU1MzZlMmU4YjUxOWRlY2YzM2IyNDU5Nzk4YzY5MDlkZjRmMTc2ZGI3ZDIzMTkwZmM3MmI4ODY1YTcxOGFmODk1ZjFiY2Q5MTQ1Mjk4MDI3NDIzYjYwNWU3MGE0N2NmNTgzOTBhOGMzZTg4ZmM4YzQ4ZThiMzJlM2RhMjEwZGZiZTNlODgxZWE1Njc0YjZhMzQ4YzIxZTkzZjllNTVlYTY1ZWZkIjoxNjoiZDIwMGQ0NWU3ODhhYWNlYTYwNmE0MDFkMDQ2MGY4N2RkNWMxMDI3ZTEyZGMxYTBkNzU4NmU4OTM5ZDljZjc4OWI0MGY1MWFjMDQ0Mjk2MWRlN2QyMWNjMjFlMDVjODMxNTVjMWYyYWE5MTkzMzg3Y2ZkZjk1NmNiNDhkMTUzYmEyNzA0MDZmOWJiYmE1MzdkNDk4N2Q5ZTJmOTk0MmQ3YTE0Y2JmZmZlYTc0ZmVjZGRhOTI4ZDIzZTI1OWY1ZWUxIjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImZkMzI2NDI5ZGY5Yjg5MGUwOWI1NGIxOGI4ZjM0ZjFlMjQiOiJlODliYjAzMmM2Y2U2MjJjYmRiNTNiYzk0NjYwMTRlYTc3Zjc3N2MwIjoiODFlYmRkOTUwNTRiMGM4MjJlZjlhZDc2OTNmNWE4N2FkZmI0YjRjNGNlNzBkZjJkZjg0ZWQ0OWMwNGRhNThiYTVmYzIwYTE5ZTFhNmU4YjdhMzkwMGIyMjc5NmRjNGU4NjllZTZiNDI3OTJkMTVhOGVjZWI1NmMwOWM2OTkxNGU4MTNjZWE4ZjY5MzFlNGI4ZWQ2ZjQyMWFmMjk4ZDU5NWM5N2Y0Nzg5YzdjYWE2MTJjN2VmMzYwOTg0YzIxYjkzZWRjNTQwMTA2OGI1YWY0Yzc4YTg3NzFiOTg0ZDUzYjhlYThhZGYyZjZhN2Q0YTBiYTc2Yzc1ZTFkZDlmNjU4ZjIwZGVkNGE0NjA3MWQ0NmQ3NzkxYjU2ODAzZDhmZWE3ZjBiMGY4ZTQxYWUzZjA5MzgzYTZmOTU4NWZlNzc1M2VhYWZmZDJiZjk0NTYzMTA4YmVlY2MyMDdiYmI1MzVmNWZjYzcwNWYwZGRlOWY3MDhjNjJmNDlhOWM5MDM3MWQzIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDlfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjE1MzY6MTY6ImZjOGQ2YzA0YmVjNGViOWE4MTkyY2E3OTAwY2JlNTM2ZTJlOGI1MTlkZWNmMzNiMjQ1OTc5OGM2OTA5ZGY0ZjE3NmRiN2QyMzE5MGZjNzJiODg2NWE3MThhZjg5NWYxYmNkOTE0NTI5ODAyNzQyM2I2MDVlNzBhNDdjZjU4MzkwYThjM2U4OGZjOGM0OGU4YjMyZTNkYTIxMGRmYmUzZTg4MWVhNTY3NGI2YTM0OGMyMWU5M2Y5ZTU1ZWE2NWVmZCI6MTY6ImQyMDBkNDVlNzg4YWFjZWE2MDZhNDAxZDA0NjBmODdkZDVjMTAyN2UxMmRjMWEwZDc1ODZlODkzOWQ5Y2Y3ODliNDBmNTFhYzA0NDI5NjFkZTdkMjFjYzIxZTA1YzgzMTU1YzFmMmFhOTE5MzM4N2NmZGY5NTZjYjQ4ZDE1M2JhMjcwNDA2ZjliYmJhNTM3ZDQ5ODdkOWUyZjk5NDJkN2ExNGNiZmZmZWE3NGZlY2RkYTkyOGQyM2UyNTlmNWVlMSI6MTY6ImNmMmNkNDFlMzRjYTNhNzI4ZWE1Y2I4YWZmNjRjMzZkMjdiZGVmNTM2NGUzMzZmZDY4ZDMxMjNjNWExOTZhOGMyODcwMTNlODUzZDUxNTZkNThkMTUxOTU0NTIwZmI0ZjZkN2IxN2FiYjY4MTc3NjU5MDljNTc2MTE5NjU5ZDkwMmIxOTA2ZWQ4YTJiMTBjMTU1YzI0ZDEyNDUyOGRhYjllZWFlMzc5YmVhYzY2ZTRhNDExNzg2ZGNiOGZkMDA2MmViYzAzMGRlMTIxOWEwNGMyYThjMWI3ZGQzMTMxZTRkNmI2Y2FlZTJlMzFhNWVkNDFhYzE1MDliMmVmMWVlMmFiMTgzNjRiZTU2OGNhOTQxYzI1ZWNjODRmZjlkNjQzYjVlYzFhYWFlMTAyYTIwZDczZjQ3OWI3ODBmZDZkYTkxMDc1MjEyZDllYWMwM2EwNjc0ZDg5OWViYTJlNDMxZjRjNDRiNjE1YjZiYTIyMzJiZDRiMzNiYWVkNzNkNjI1ZCI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOiJmMTQ1OWI1ZjBjOTJmMDFhMGY3MjNhMmU1NjYyNDg0ZDhmOGMwYTIwZmMyOWRhZDZhY2Q0M2JiNWYzZWZmZGY0ZTFiNjNlMDdmZGZlNjYyOGQwZDc0Y2ExOWJmMmQ2OWU0YTBhYmY4NmQyOTM5MjVhNzk2NzcyZjgwODhlIjoiNjA2ZjNiOTljMGI5Y2NkNzcxZWFhMjllYTBlNGM4ODRmMzE4OWNjYyI6ImJjYzM1Zjk0Y2RlNjZjYjExMzY2MjVkNjI1Yjk0NDMyYTM1YjIyZjNkMmZhMTFhNjEzZmYwZmNhNWJkNTdmODdiOTAyY2NkYzFjZDBhZWJjYjA3MTVlZTg2OWQxZDFmZTM5NWY2NzkzMDAzZjVlY2E0NjUwNTljODg2NjBkNDQ2ZmY1ZjA4MTg1NTIwMjI1NTdlMzhjMDhhNjdlYWQ5OTEyNjIyNTRmMTA2ODI5NzVlYzU2Mzk3NzY4NTM3ZjQ5NzdhZjZkNWY2YWFjZWI3ZmIyNWRlYzU5MzcyMzAyMzFmZDg5NzhhZjQ5MTE5YTI5ZjI5ZTQyNGFiODI3MmI0NzU2Mjc5MmQ1Yzk0Zjc3NGI4ODI5ZDBiMGQ5ZjFhOGM5ZWRkZjM3NTc0ZDVmYTI0OGVlZmE5YzUyNzFmYzVlYzI1NzljODFiZGQ2MWI0MTBmYTYxZmUzNmU0MjQyMjFjMTEzYWRkYjI3NTY2NGM4MDFkMzRjYThjNjM1MWU0YTg1OCI6MAorCitSU0FFUy1PQUVQIERlY3J5cHRpb24gRXhhbXBsZSA5XzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoxNTM2OjE2OiJmYzhkNmMwNGJlYzRlYjlhODE5MmNhNzkwMGNiZTUzNmUyZThiNTE5ZGVjZjMzYjI0NTk3OThjNjkwOWRmNGYxNzZkYjdkMjMxOTBmYzcyYjg4NjVhNzE4YWY4OTVmMWJjZDkxNDUyOTgwMjc0MjNiNjA1ZTcwYTQ3Y2Y1ODM5MGE4YzNlODhmYzhjNDhlOGIzMmUzZGEyMTBkZmJlM2U4ODFlYTU2NzRiNmEzNDhjMjFlOTNmOWU1NWVhNjVlZmQiOjE2OiJkMjAwZDQ1ZTc4OGFhY2VhNjA2YTQwMWQwNDYwZjg3ZGQ1YzEwMjdlMTJkYzFhMGQ3NTg2ZTg5MzlkOWNmNzg5YjQwZjUxYWMwNDQyOTYxZGU3ZDIxY2MyMWUwNWM4MzE1NWMxZjJhYTkxOTMzODdjZmRmOTU2Y2I0OGQxNTNiYTI3MDQwNmY5YmJiYTUzN2Q0OTg3ZDllMmY5OTQyZDdhMTRjYmZmZmVhNzRmZWNkZGE5MjhkMjNlMjU5ZjVlZTEiOjE2OiJjZjJjZDQxZTM0Y2EzYTcyOGVhNWNiOGFmZjY0YzM2ZDI3YmRlZjUzNjRlMzM2ZmQ2OGQzMTIzYzVhMTk2YThjMjg3MDEzZTg1M2Q1MTU2ZDU4ZDE1MTk1NDUyMGZiNGY2ZDdiMTdhYmI2ODE3NzY1OTA5YzU3NjExOTY1OWQ5MDJiMTkwNmVkOGEyYjEwYzE1NWMyNGQxMjQ1MjhkYWI5ZWVhZTM3OWJlYWM2NmU0YTQxMTc4NmRjYjhmZDAwNjJlYmMwMzBkZTEyMTlhMDRjMmE4YzFiN2RkMzEzMWU0ZDZiNmNhZWUyZTMxYTVlZDQxYWMxNTA5YjJlZjFlZTJhYjE4MzY0YmU1NjhjYTk0MWMyNWVjYzg0ZmY5ZDY0M2I1ZWMxYWFhZTEwMmEyMGQ3M2Y0NzliNzgwZmQ2ZGE5MTA3NTIxMmQ5ZWFjMDNhMDY3NGQ4OTllYmEyZTQzMWY0YzQ0YjYxNWI2YmEyMjMyYmQ0YjMzYmFlZDczZDYyNWQiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiNTNlNmU4YzcyOWQ2ZjljMzE5ZGQzMTdlNzRiMGRiOGU0Y2NjYTI1ZjNjODMwNTc0NmUxMzdhYzYzYTYzZWYzNzM5ZTdiNTk1YWJiOTZlOGQ1NWU1NGY3YmQ0MWFiNDMzMzc4ZmZiOTExZCI6ImZjYmM0MjE0MDJlOWVjYWJjNjA4MmFmYTQwYmE1ZjI2NTIyYzg0MGUiOiIyMzJhZmJjOTI3ZmEwOGMyZjZhMjdiODdkNGE1Y2IwOWMwN2RjMjZmYWU3M2Q3M2E5MDU1ODgzOWY0ZmQ2NmQyODFiODdlYzczNGJjZTIzN2JhMTY2Njk4ZWQ4MjkxMDZhN2RlNjk0MmNkNmNkY2U3OGZlZDhkMmU0ZDgxNDI4ZTY2NDkwZDAzNjI2NGNlZjkyYWY5NDFkM2UzNTA1NWZlMzk4MWUxNGQyOWNiYjlhNGY2NzQ3MzA2M2JhZWM3OWExMTc5ZjVhMTdjOWMxODMyZjI4MzhmZDdkNWU1OWJiOTY1OWQ1NmRjZThhMDE5ZWRlZjFiYjNhY2NjNjk3Y2M2Y2M3YTc3OGY2MGEwNjRjN2Y2ZjVkNTI5YzYyMTAyNjJlMDAzZGU1ODNlODFlMzE2N2I4OTk3MWZiOGMwZTE1ZDQ0ZmZmZWY4OWI1M2Q4ZDY0ZGQ3OTdkMTU5YjU2ZDJiMDhlYTUzMDdlYTEyYzI0MWJkNThkNGVlMjc4YTFmMmUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgOV82Citwa2NzMV9yc2Flc19vYWVwX2RlY3J5cHQ6MTUzNjoxNjoiZmM4ZDZjMDRiZWM0ZWI5YTgxOTJjYTc5MDBjYmU1MzZlMmU4YjUxOWRlY2YzM2IyNDU5Nzk4YzY5MDlkZjRmMTc2ZGI3ZDIzMTkwZmM3MmI4ODY1YTcxOGFmODk1ZjFiY2Q5MTQ1Mjk4MDI3NDIzYjYwNWU3MGE0N2NmNTgzOTBhOGMzZTg4ZmM4YzQ4ZThiMzJlM2RhMjEwZGZiZTNlODgxZWE1Njc0YjZhMzQ4YzIxZTkzZjllNTVlYTY1ZWZkIjoxNjoiZDIwMGQ0NWU3ODhhYWNlYTYwNmE0MDFkMDQ2MGY4N2RkNWMxMDI3ZTEyZGMxYTBkNzU4NmU4OTM5ZDljZjc4OWI0MGY1MWFjMDQ0Mjk2MWRlN2QyMWNjMjFlMDVjODMxNTVjMWYyYWE5MTkzMzg3Y2ZkZjk1NmNiNDhkMTUzYmEyNzA0MDZmOWJiYmE1MzdkNDk4N2Q5ZTJmOTk0MmQ3YTE0Y2JmZmZlYTc0ZmVjZGRhOTI4ZDIzZTI1OWY1ZWUxIjoxNjoiY2YyY2Q0MWUzNGNhM2E3MjhlYTVjYjhhZmY2NGMzNmQyN2JkZWY1MzY0ZTMzNmZkNjhkMzEyM2M1YTE5NmE4YzI4NzAxM2U4NTNkNTE1NmQ1OGQxNTE5NTQ1MjBmYjRmNmQ3YjE3YWJiNjgxNzc2NTkwOWM1NzYxMTk2NTlkOTAyYjE5MDZlZDhhMmIxMGMxNTVjMjRkMTI0NTI4ZGFiOWVlYWUzNzliZWFjNjZlNGE0MTE3ODZkY2I4ZmQwMDYyZWJjMDMwZGUxMjE5YTA0YzJhOGMxYjdkZDMxMzFlNGQ2YjZjYWVlMmUzMWE1ZWQ0MWFjMTUwOWIyZWYxZWUyYWIxODM2NGJlNTY4Y2E5NDFjMjVlY2M4NGZmOWQ2NDNiNWVjMWFhYWUxMDJhMjBkNzNmNDc5Yjc4MGZkNmRhOTEwNzUyMTJkOWVhYzAzYTA2NzRkODk5ZWJhMmU0MzFmNGM0NGI2MTViNmJhMjIzMmJkNGIzM2JhZWQ3M2Q2MjVkIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImI2YjI4ZWEyMTk4ZDBjMTAwOGJjNjQiOiIyM2FhZGUwZTFlMDhiYjliOWE3OGQyMzAyYTUyZjljMjFiMmUxYmEyIjoiNDM4Y2M3ZGMwOGE2OGRhMjQ5ZTQyNTA1Zjg1NzNiYTYwZTJjMjc3M2Q1YjI5MGY0Y2Y5ZGZmNzE4ZTg0MjA4MWMzODNlNjcwMjRhMGYyOTU5NGVhOTg3YjlkMjVlNGI3MzhmMjg1OTcwZDE5NWFiYjNhOGM4MDU0ZTNkNzlkNmI5YzlhODMyN2JhNTk2ZjEyNTllMjcxMjY2NzQ3NjY5MDdkOGQ1ODJmZjNhODQ3NjE1NDkyOWFkYjFlNmQxMjM1YjJjY2I0ZWM4ZjY2M2JhOWNjNjcwYTkyYmViZDg1M2M4ZGJmNjljNjQzNmQwMTZmNjFhZGQ4MzZlOTQ3MzI0NTA0MzQyMDdmOWZkNGM0M2RlYzJhMTJhOTU4ZWZhMDFlZmUyNjY5ODk5YjVlNjA0YzI1NWM1NWZiNzE2NmRlNTU4OWUzNjk1OTdiYjA5MTY4YzA2ZGQ1ZGIxNzdlMDZhMTc0MGViMmQ1YzgyZmFlY2E2ZDkyZmNlZTk5MzFiYTlmIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDEwXzEKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoyMDQ4OjE2OiJlY2Y1YWVjZDFlNTUxNWZmZmFjYmQ3NWEyODE2YzZlYmY0OTAxOGNkZmI0NjM4ZTE4NWQ2NmE3Mzk2YjZmODA5MGY4MDE4YzdmZDk1Y2MzNGI4NTdkYzE3ZjBjYzY1MTZiYjEzNDZhYjRkNTgyY2FkYWQ3YjQxMDMzNTIzODdiNzAzMzhkMDg0MDQ3YzlkOTUzOWI2NDk2MjA0YjNkZDZlYTQ0MjQ5OTIwN2JlYzAxZjk2NDI4N2ZmNjMzNmMzOTg0NjU4MzM2ODQ2ZjU2ZTQ2ODYxODgxYzEwMjMzZDIxNzZiZjE1YTVlOTZkZGM3ODBiYzg2OGFhNzdkM2NlNzY5IjoxNjoiYmM0NmM0NjRmYzZhYzRjYTc4M2IwZWIwOGEzYzg0MWI3NzJmN2U5YjJmMjhiYWJkNTg4YWU4ODVlMWEwYzYxZTQ4NThhMGZiMjVhYzI5OTk5MGYzNWJlODUxNjRjMjU5YmExMTc1Y2RkNzE5MjcwNzEzNTE4NDk5MmI2YzI5Yjc0NmRkMGQyY2FiZTE0MjgzNWY3ZDE0OGNjMTYxNTI0YjRhMDk5NDZkNDhiODI4NDczZjFjZTc2YjZjYjY4ODZjMzQ1YzAzZTA1ZjQxZDUxYjVjM2E5MGEzZjI0MDczYzdkNzRhNGZlMjVkOWNmMjFjNzU5NjBmM2ZjMzg2MzE4MyI6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjhiYmE2YmY4MmE2YzBmODZkNWYxNzU2ZTk3OTU2ODcwYjA4OTUzYjA2YjRlYjIwNWJjMTY5NGVlIjoiNDdlMWFiNzExOWZlZTU2Yzk1ZWU1ZWFhZDg2ZjQwZDBhYTYzYmQzMyI6IjUzZWE1ZGMwOGNkMjYwZmIzYjg1ODU2NzI4N2ZhOTE1NTJjMzBiMmZlYmZiYTIxM2YwYWU4NzcwMmQwNjhkMTliYWIwN2ZlNTc0NTIzZGZiNDIxMzlkNjhjM2M1YWZlZWUwYmZlNGNiNzk2OWNiZjM4MmI4MDRkNmU2MTM5NjE0NGUyZDBlNjA3NDFmODk5M2MzMDE0YjU4YjliMTk1N2E4YmFiY2QyM2FmODU0ZjRjMzU2ZmIxNjYyYWE3MmJmY2M3ZTU4NjU1OWRjNDI4MGQxNjBjMTI2Nzg1YTcyM2ViZWViZWZmNzFmMTE1OTQ0NDBhYWVmODdkMTA3OTNhODc3NGEyMzlkNGEwNGM4N2ZlMTQ2N2I5ZGFmODUyMDhlYzZjNzI1NTc5NGE5NmNjMjkxNDJmOWE4YmQ0MThlM2MxZmQ2NzM0NGIwY2QwODI5ZGYzYjJiZWM2MDI1MzE5NjI5M2M2YjM0ZDNmNzVkMzJmMjEzZGQ0NWM2MjczZDUwNWFkZjRjY2VkMTA1N2NiNzU4ZmMyNmFlZWZhNDQxMjU1ZWQ0ZTY0YzE5OWVlMDc1ZTdmMTY2NDYxODJmZGI0NjQ3MzliNjhhYjVkYWZmMGU2M2U5NTUyMDE2ODI0ZjA1NGJmNGQzYzhjOTBhOTdiYjZiNjU1MzI4NGViNDI5ZmNjIjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDEwXzIKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoyMDQ4OjE2OiJlY2Y1YWVjZDFlNTUxNWZmZmFjYmQ3NWEyODE2YzZlYmY0OTAxOGNkZmI0NjM4ZTE4NWQ2NmE3Mzk2YjZmODA5MGY4MDE4YzdmZDk1Y2MzNGI4NTdkYzE3ZjBjYzY1MTZiYjEzNDZhYjRkNTgyY2FkYWQ3YjQxMDMzNTIzODdiNzAzMzhkMDg0MDQ3YzlkOTUzOWI2NDk2MjA0YjNkZDZlYTQ0MjQ5OTIwN2JlYzAxZjk2NDI4N2ZmNjMzNmMzOTg0NjU4MzM2ODQ2ZjU2ZTQ2ODYxODgxYzEwMjMzZDIxNzZiZjE1YTVlOTZkZGM3ODBiYzg2OGFhNzdkM2NlNzY5IjoxNjoiYmM0NmM0NjRmYzZhYzRjYTc4M2IwZWIwOGEzYzg0MWI3NzJmN2U5YjJmMjhiYWJkNTg4YWU4ODVlMWEwYzYxZTQ4NThhMGZiMjVhYzI5OTk5MGYzNWJlODUxNjRjMjU5YmExMTc1Y2RkNzE5MjcwNzEzNTE4NDk5MmI2YzI5Yjc0NmRkMGQyY2FiZTE0MjgzNWY3ZDE0OGNjMTYxNTI0YjRhMDk5NDZkNDhiODI4NDczZjFjZTc2YjZjYjY4ODZjMzQ1YzAzZTA1ZjQxZDUxYjVjM2E5MGEzZjI0MDczYzdkNzRhNGZlMjVkOWNmMjFjNzU5NjBmM2ZjMzg2MzE4MyI6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImU2YWQxODFmMDUzYjU4YTkwNGYyNDU3NTEwMzczZTU3IjoiNmQxN2Y1YjRjMWZmYWMzNTFkMTk1YmY3YjA5ZDA5ZjA5YTQwNzljZiI6ImEyYjFhNDMwYTlkNjU3ZTJmYTFjMmJiNWVkNDNmZmIyNWMwNWEzMDhmZTkwOTNjMDEwMzE3OTVmNTg3NDQwMDExMDgyOGFlNThmYjliNTgxY2U5ZGRkZDNlNTQ5YWUwNGEwOTg1NDU5YmRlNmM2MjY1OTRlN2IwNWRjNDI3OGIyYTE0NjVjMTM2ODQwODgyM2M4NWU5NmRjNjZjM2EzMDk4M2M2Mzk2NjRmYzQ1NjlhMzdmZTIxZTVhMTk1YjU3NzZlZWQyZGY4ZDhkMzYxYWY2ODZlNzUwMjI5YmJkNjYzZjE2MTg2OGE1MDYxNWUwYzMzN2JlYzBjYTM1ZmVjMGJiMTljMzZlYjJlMGJiY2MwNTgyZmExZDkzYWFjZGIwNjEwNjNmNTlmMmNlMWVlNDM2MDVlNWQ4OWVjYTE4M2QyYWNkZmU5ZjgxMDExMDIyYWQzYjQzYTNkZDQxN2RhYzk0YjRlMTFlYTgxYjE5Mjk2NmU5NjZiMTgyMDgyZTcxOTY0NjA3YjRmODAwMmYzNjI5OTg0NGExMWYyYWUwZmFlYWMyZWFlNzBmOGY0Zjk4MDg4YWNkY2QwYWM1NTZlOWZjY2M1MTE1MjE5MDhmYWQyNmYwNGM2NDIwMTQ1MDMwNTc3ODc1OGIwNTM4YmY4YjViYjE0NGE4MjhlNjI5Nzk1IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDEwXzMKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoyMDQ4OjE2OiJlY2Y1YWVjZDFlNTUxNWZmZmFjYmQ3NWEyODE2YzZlYmY0OTAxOGNkZmI0NjM4ZTE4NWQ2NmE3Mzk2YjZmODA5MGY4MDE4YzdmZDk1Y2MzNGI4NTdkYzE3ZjBjYzY1MTZiYjEzNDZhYjRkNTgyY2FkYWQ3YjQxMDMzNTIzODdiNzAzMzhkMDg0MDQ3YzlkOTUzOWI2NDk2MjA0YjNkZDZlYTQ0MjQ5OTIwN2JlYzAxZjk2NDI4N2ZmNjMzNmMzOTg0NjU4MzM2ODQ2ZjU2ZTQ2ODYxODgxYzEwMjMzZDIxNzZiZjE1YTVlOTZkZGM3ODBiYzg2OGFhNzdkM2NlNzY5IjoxNjoiYmM0NmM0NjRmYzZhYzRjYTc4M2IwZWIwOGEzYzg0MWI3NzJmN2U5YjJmMjhiYWJkNTg4YWU4ODVlMWEwYzYxZTQ4NThhMGZiMjVhYzI5OTk5MGYzNWJlODUxNjRjMjU5YmExMTc1Y2RkNzE5MjcwNzEzNTE4NDk5MmI2YzI5Yjc0NmRkMGQyY2FiZTE0MjgzNWY3ZDE0OGNjMTYxNTI0YjRhMDk5NDZkNDhiODI4NDczZjFjZTc2YjZjYjY4ODZjMzQ1YzAzZTA1ZjQxZDUxYjVjM2E5MGEzZjI0MDczYzdkNzRhNGZlMjVkOWNmMjFjNzU5NjBmM2ZjMzg2MzE4MyI6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6IjUxMGEyY2Y2MGU4NjZmYTIzNDA1NTNjOTRlYTM5ZmJjMjU2MzExZTgzZTk0NDU0YjQxMjQiOiIzODUzODc1MTRkZWNjYzdjNzQwZGQ4Y2RmOWRhZWU0OWExY2JmZDU0IjoiOTg4NmMzZTY3NjRhOGI5YTg0ZTg0MTQ4ZWJkOGMzYjFhYTgwNTAzODFhNzhmNjY4NzE0YzE2ZDljZmQyYTZlZGM1Njk3OWM1MzVkOWRlZTNiNDRiODVjMThiZTg5Mjg5OTIzNzE3MTE0NzIyMTZkOTVkZGE5OGQyZWU4MzQ3YzliMTRkZmZkZmY4NGFhNDhkMjVhYzA2ZjdkN2U2NTM5OGFjOTY3YjFjZTkwOTI1ZjY3ZGNlMDQ5YjdmODEyZGIwNzQyOTk3YTc0ZDQ0ZmU4MWRiZTBlN2EzZmVhZjJlNWM0MGFmODg4ZDU1MGRkYmJlM2JjMjA2NTdhMjk1NDNmOGZjMjkxM2I5YmQxYTYxYjJhYjIyNTZlYzQwOWJiZDdkYzBkMTc3MTdlYTI1YzQzZjQyZWQyN2RmODczOGJmNGFmYzY3NjZmZjdhZmYwODU5NTU1ZWUyODM5MjBmNGM4YTYzYzRhNzM0MGNiYWZkZGMzMzllY2RiNGIwNTE1MDAyZjk2YzkzMmI1Yjc5MTY3YWY2OTljMGFkM2ZjY2ZkZjBmNDRlODVhNzAyNjJiZjJlMThmZTM0Yjg1MDU4OTk3NWU4NjdmZjk2OWQ0OGVhYmYyMTIyNzE1NDZjZGMwNWE2OWVjYjUyNmU1Mjg3MGM4MzZmMzA3YmQ3OTg3ODBlZGUiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgMTBfNAorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjIwNDg6MTY6ImVjZjVhZWNkMWU1NTE1ZmZmYWNiZDc1YTI4MTZjNmViZjQ5MDE4Y2RmYjQ2MzhlMTg1ZDY2YTczOTZiNmY4MDkwZjgwMThjN2ZkOTVjYzM0Yjg1N2RjMTdmMGNjNjUxNmJiMTM0NmFiNGQ1ODJjYWRhZDdiNDEwMzM1MjM4N2I3MDMzOGQwODQwNDdjOWQ5NTM5YjY0OTYyMDRiM2RkNmVhNDQyNDk5MjA3YmVjMDFmOTY0Mjg3ZmY2MzM2YzM5ODQ2NTgzMzY4NDZmNTZlNDY4NjE4ODFjMTAyMzNkMjE3NmJmMTVhNWU5NmRkYzc4MGJjODY4YWE3N2QzY2U3NjkiOjE2OiJiYzQ2YzQ2NGZjNmFjNGNhNzgzYjBlYjA4YTNjODQxYjc3MmY3ZTliMmYyOGJhYmQ1ODhhZTg4NWUxYTBjNjFlNDg1OGEwZmIyNWFjMjk5OTkwZjM1YmU4NTE2NGMyNTliYTExNzVjZGQ3MTkyNzA3MTM1MTg0OTkyYjZjMjliNzQ2ZGQwZDJjYWJlMTQyODM1ZjdkMTQ4Y2MxNjE1MjRiNGEwOTk0NmQ0OGI4Mjg0NzNmMWNlNzZiNmNiNjg4NmMzNDVjMDNlMDVmNDFkNTFiNWMzYTkwYTNmMjQwNzNjN2Q3NGE0ZmUyNWQ5Y2YyMWM3NTk2MGYzZmMzODYzMTgzIjoxNjoiYWU0NWVkNTYwMWNlYzZiOGNjMDVmODAzOTM1YzY3NGRkYmUwZDc1YzRjMDlmZDc5NTFmYzZiMGNhZWMzMTNhOGRmMzk5NzBjNTE4YmZmYmE1ZWQ2OGYzZjBkN2YyMmE0MDI5ZDQxM2YxYWUwN2U0ZWJlOWU0MTc3Y2UyM2U3ZjU0MDRiNTY5ZTRlZTFiZGNmM2MxZmIwM2VmMTEzODAyZDRmODU1ZWI5YjUxMzRiNWE3YzgwODVhZGNhZTZmYTJmYTE0MTdlYzM3NjNiZTE3MWIwYzYyYjc2MGVkZTIzYzEyYWQ5MmI5ODA4ODRjNjQxZjVhOGZhYzI2YmRhZDRhMDMzODFhMjJmZTFiNzU0ODg1MDk0YzgyNTA2ZDQwMTlhNTM1YTI4NmFmZWIyNzFiYjliYTU5MmRlMThkY2Y2MDBjMmFlZWFlNTZlMDJmN2NmNzlmYzE0Y2YzYmRjN2NkODRmZWJiYmY5NTBjYTkwMzA0YjIyMTlhN2FhMDYzYWVmYTJjM2MxOTgwZTU2MGNkNjRhZmU3Nzk1ODViNjEwNzY1N2I5NTc4NTdlZmRlNjAxMDk4OGFiN2RlNDE3ZmM4OGQ4ZjM4NGM0ZTZlNzJjM2Y5NDNlMGMzMWMwYzRhNWNjMzZmODc5ZDhhM2FjOWQ3ZDU5ODYwZWFhZGE2YjgzYmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiYmNkZDE5MGRhM2I3ZDMwMGRmOWEwNmUyMmNhYWUyYTc1ZjEwYzkxZmY2NjdiN2MxNmJkZThiNTMwNjRhMjY0OWE5NDA0NWM5IjoiNWNhY2E2YTBmNzY0MTYxYTk2ODRmODVkOTJiNmUwZWYzN2NhOGI2NSI6IjYzMThlOWZiNWMwZDA1ZTUzMDdlMTY4MzQzNmU5MDMyOTNhYzQ2NDIzNThhYWEyMjNkNzE2MzAxM2FiYTg3ZTJkZmRhOGU2MGM2ODYwZTI5YTFlOTI2ODYxNjNlYTBiOTE3NWYzMjljYTNiMTMxYTFlZGQzYTc3NzU5YThiOTdiYWQ2YTRmOGY0Mzk2ZjI4Y2Y2ZjM5Y2E1ODExMmU0ODE2MGQ2ZTIwM2RhYTU4NTZmM2FjYTVmZmVkNTc3YWY0OTk0MDhlM2RmZDIzM2UzZTYwNGRiZTM0YTljNGM5MDgyZGU2NTUyN2NhYzYzMzFkMjlkYzgwZTA1MDhhMGZhNzEyMmU3ZjMyOWY2Y2NhNWNmYTM0ZDRkMWRhNDE3ODA1NDU3ZTAwOGJlYzU0OWU0NzhmZjllMTJhNzYzYzQ3N2QxNWJiYjc4ZjViNjliZDU3ODMwZmMyYzRlZDY4NmQ3OWJjNzJhOTVkODVmODgxMzRjNmIwYWZlNTZhOGNjZmJjODU1ODI4YmIzMzliZDE3OTA5Y2YxZDcwZGUzMzM1YWUwNzAzOTA5M2U2MDZkNjU1MzY1ZGU2NTUwYjg3MmNkNmRlMWQ0NDBlZTAzMWI2MTk0NWY2MjlhZDhhMzUzYjBkNDA5MzllOTZhM2M0NTBkMmE4ZDVlZWU5ZjY3ODA5M2M4IjowCisKK1JTQUVTLU9BRVAgRGVjcnlwdGlvbiBFeGFtcGxlIDEwXzUKK3BrY3MxX3JzYWVzX29hZXBfZGVjcnlwdDoyMDQ4OjE2OiJlY2Y1YWVjZDFlNTUxNWZmZmFjYmQ3NWEyODE2YzZlYmY0OTAxOGNkZmI0NjM4ZTE4NWQ2NmE3Mzk2YjZmODA5MGY4MDE4YzdmZDk1Y2MzNGI4NTdkYzE3ZjBjYzY1MTZiYjEzNDZhYjRkNTgyY2FkYWQ3YjQxMDMzNTIzODdiNzAzMzhkMDg0MDQ3YzlkOTUzOWI2NDk2MjA0YjNkZDZlYTQ0MjQ5OTIwN2JlYzAxZjk2NDI4N2ZmNjMzNmMzOTg0NjU4MzM2ODQ2ZjU2ZTQ2ODYxODgxYzEwMjMzZDIxNzZiZjE1YTVlOTZkZGM3ODBiYzg2OGFhNzdkM2NlNzY5IjoxNjoiYmM0NmM0NjRmYzZhYzRjYTc4M2IwZWIwOGEzYzg0MWI3NzJmN2U5YjJmMjhiYWJkNTg4YWU4ODVlMWEwYzYxZTQ4NThhMGZiMjVhYzI5OTk5MGYzNWJlODUxNjRjMjU5YmExMTc1Y2RkNzE5MjcwNzEzNTE4NDk5MmI2YzI5Yjc0NmRkMGQyY2FiZTE0MjgzNWY3ZDE0OGNjMTYxNTI0YjRhMDk5NDZkNDhiODI4NDczZjFjZTc2YjZjYjY4ODZjMzQ1YzAzZTA1ZjQxZDUxYjVjM2E5MGEzZjI0MDczYzdkNzRhNGZlMjVkOWNmMjFjNzU5NjBmM2ZjMzg2MzE4MyI6MTY6ImFlNDVlZDU2MDFjZWM2YjhjYzA1ZjgwMzkzNWM2NzRkZGJlMGQ3NWM0YzA5ZmQ3OTUxZmM2YjBjYWVjMzEzYThkZjM5OTcwYzUxOGJmZmJhNWVkNjhmM2YwZDdmMjJhNDAyOWQ0MTNmMWFlMDdlNGViZTllNDE3N2NlMjNlN2Y1NDA0YjU2OWU0ZWUxYmRjZjNjMWZiMDNlZjExMzgwMmQ0Zjg1NWViOWI1MTM0YjVhN2M4MDg1YWRjYWU2ZmEyZmExNDE3ZWMzNzYzYmUxNzFiMGM2MmI3NjBlZGUyM2MxMmFkOTJiOTgwODg0YzY0MWY1YThmYWMyNmJkYWQ0YTAzMzgxYTIyZmUxYjc1NDg4NTA5NGM4MjUwNmQ0MDE5YTUzNWEyODZhZmViMjcxYmI5YmE1OTJkZTE4ZGNmNjAwYzJhZWVhZTU2ZTAyZjdjZjc5ZmMxNGNmM2JkYzdjZDg0ZmViYmJmOTUwY2E5MDMwNGIyMjE5YTdhYTA2M2FlZmEyYzNjMTk4MGU1NjBjZDY0YWZlNzc5NTg1YjYxMDc2NTdiOTU3ODU3ZWZkZTYwMTA5ODhhYjdkZTQxN2ZjODhkOGYzODRjNGU2ZTcyYzNmOTQzZTBjMzFjMGM0YTVjYzM2Zjg3OWQ4YTNhYzlkN2Q1OTg2MGVhYWRhNmI4M2JiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6ImE3ZGQ2YzdkYzI0YjQ2ZjlkZDVmMWU5MWFkYTRjM2IzZGY5NDdlODc3MjMyYTkiOiI5NWJjYTllMzg1OTg5NGIzZGQ4NjlmYTdlY2Q1YmJjNjQwMWJmM2U0IjoiNzUyOTA4NzJjY2ZkNGE0NTA1NjYwZDY1MWY1NmRhNmRhYTA5Y2ExMzAxZDg5MDYzMmY2YTk5MmYzZDU2NWNlZTQ2NGFmZGVkNDBlZDNiNWJlOTM1NjcxNGVhNWFhNzY1NWY0YTEzNjZjMmYxN2M3MjhmNmYyYzVhNWQxZjhlMjg0MjliYzRlNmY4ZjJjZmY4ZGE4ZGMwZTBhOTgwOGU0NWZkMDllYTJmYTQwY2IyYjZjZTZmZmZmNWMwZTE1OWQxMWI2OGQ5MGE4NWY3Yjg0ZTEwM2IwOWU2ODI2NjY0ODBjNjU3NTA1YzA5MjkyNTk0NjhhMzE0Nzg2ZDc0ZWFiMTMxNTczY2YyMzRiZjU3ZGI3ZDllNjZjYzY3NDgxOTJlMDAyZGMwZGVlYTkzMDU4NWYwODMxZmRjZDliYzMzZDUxZjc5ZWQyZmZjMTZiY2Y0ZDU5ODEyZmNlYmNhYTNmOTA2OWIwZTQ0NTY4NmQ2NDRjMjVjY2Y2M2I0NTZlZTVmYTZmZmU5NmYxOWNkZjc1MWZlZDllYWYzNTk1Nzc1NGRiZjRiZmVhNTIxNmFhMTg0NGRjNTA3Y2IyZDA4MGU3MjJlYmExNTAzMDhjMmI1ZmYxMTkzNjIwZjE3NjZlY2Y0NDgxYmFmYjk0M2JkMjkyODc3ZjIxMzZjYTQ5NGFiYTAiOjAKKworUlNBRVMtT0FFUCBEZWNyeXB0aW9uIEV4YW1wbGUgMTBfNgorcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0OjIwNDg6MTY6ImVjZjVhZWNkMWU1NTE1ZmZmYWNiZDc1YTI4MTZjNmViZjQ5MDE4Y2RmYjQ2MzhlMTg1ZDY2YTczOTZiNmY4MDkwZjgwMThjN2ZkOTVjYzM0Yjg1N2RjMTdmMGNjNjUxNmJiMTM0NmFiNGQ1ODJjYWRhZDdiNDEwMzM1MjM4N2I3MDMzOGQwODQwNDdjOWQ5NTM5YjY0OTYyMDRiM2RkNmVhNDQyNDk5MjA3YmVjMDFmOTY0Mjg3ZmY2MzM2YzM5ODQ2NTgzMzY4NDZmNTZlNDY4NjE4ODFjMTAyMzNkMjE3NmJmMTVhNWU5NmRkYzc4MGJjODY4YWE3N2QzY2U3NjkiOjE2OiJiYzQ2YzQ2NGZjNmFjNGNhNzgzYjBlYjA4YTNjODQxYjc3MmY3ZTliMmYyOGJhYmQ1ODhhZTg4NWUxYTBjNjFlNDg1OGEwZmIyNWFjMjk5OTkwZjM1YmU4NTE2NGMyNTliYTExNzVjZGQ3MTkyNzA3MTM1MTg0OTkyYjZjMjliNzQ2ZGQwZDJjYWJlMTQyODM1ZjdkMTQ4Y2MxNjE1MjRiNGEwOTk0NmQ0OGI4Mjg0NzNmMWNlNzZiNmNiNjg4NmMzNDVjMDNlMDVmNDFkNTFiNWMzYTkwYTNmMjQwNzNjN2Q3NGE0ZmUyNWQ5Y2YyMWM3NTk2MGYzZmMzODYzMTgzIjoxNjoiYWU0NWVkNTYwMWNlYzZiOGNjMDVmODAzOTM1YzY3NGRkYmUwZDc1YzRjMDlmZDc5NTFmYzZiMGNhZWMzMTNhOGRmMzk5NzBjNTE4YmZmYmE1ZWQ2OGYzZjBkN2YyMmE0MDI5ZDQxM2YxYWUwN2U0ZWJlOWU0MTc3Y2UyM2U3ZjU0MDRiNTY5ZTRlZTFiZGNmM2MxZmIwM2VmMTEzODAyZDRmODU1ZWI5YjUxMzRiNWE3YzgwODVhZGNhZTZmYTJmYTE0MTdlYzM3NjNiZTE3MWIwYzYyYjc2MGVkZTIzYzEyYWQ5MmI5ODA4ODRjNjQxZjVhOGZhYzI2YmRhZDRhMDMzODFhMjJmZTFiNzU0ODg1MDk0YzgyNTA2ZDQwMTlhNTM1YTI4NmFmZWIyNzFiYjliYTU5MmRlMThkY2Y2MDBjMmFlZWFlNTZlMDJmN2NmNzlmYzE0Y2YzYmRjN2NkODRmZWJiYmY5NTBjYTkwMzA0YjIyMTlhN2FhMDYzYWVmYTJjM2MxOTgwZTU2MGNkNjRhZmU3Nzk1ODViNjEwNzY1N2I5NTc4NTdlZmRlNjAxMDk4OGFiN2RlNDE3ZmM4OGQ4ZjM4NGM0ZTZlNzJjM2Y5NDNlMGMzMWMwYzRhNWNjMzZmODc5ZDhhM2FjOWQ3ZDU5ODYwZWFhZGE2YjgzYmIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMToiZWFmMWE3M2ExYjBjNDYwOTUzN2RlNjljZDkyMjhiYmNmYjlhOGNhOGM2YzNlZmFmMDU2ZmU0YTdmNDYzNGVkMDBiN2MzOWVjNjkyMmQ3YjhlYTJjMDRlYmFjIjoiOWY0N2RkZjQyZTk3ZWVhODU2YTliZGJjNzE0ZWIzYWMyMmY2ZWIzMiI6IjJkMjA3YTczNDMyYThmYjRjMDMwNTFiM2Y3M2IyOGE2MTc2NDA5OGRmYTM0YzQ3YTIwOTk1ZjgxMTVhYTY4MTY2NzliNTU3ZTgyZGJlZTU4NDkwOGM2ZTY5NzgyZDdkZWIzNGRiZDY1YWYwNjNkNTdmY2E3NmE1ZmQwNjk0OTJmZDYwNjhkOTk4NGQyMDkzNTA1NjVhNjJlNWM3N2YyMzAzOGMxMmNiMTBjNjYzNDcwOWI1NDdjNDZmNmI0YTcwOWJkODVjYTEyMmQ3NDQ2NWVmOTc3NjJjMjk3NjNlMDZkYmM3YTllNzM4Yzc4YmZjYTAxMDJkYzVlNzlkNjViOTczZjI4MjQwY2FhYjJlMTYxYTc4YjU3ZDI2MjQ1N2VkODE5NWQ1M2UzYzdhZTlkYTAyMTg4M2M2ZGI3YzI0YWZkZDIzMjJlYWM5NzJhZDNjMzU0YzVmY2VmMWUxNDZjM2EwMjkwZmI2N2FkZjAwNzA2NmUwMDQyOGQyY2VjMThjZTU4ZjkzMjg2OThkZWZlZjRiMmViNWVjNzY5MThmZGUxYzE5OGNiYjM4YjdhZmM2NzYyNmE5YWVmZWM0MzIyYmZkOTBkMjU2MzQ4MWM5YTIyMWY3OGM4MjcyYzgyZDFiNjJhYjkxNGUxYzY5ZjZhZjZlZjMwY2E1MjYwZGI0YTQ2IjowCisKK1JTQVNTQS1QU1MgU2lnbmluZyBUZXN0IFZlY3RvciBJbnQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJkMTdmNjU1YmYyN2M4YjE2ZDM1NDYyYzkwNWNjMDRhMjZmMzdlMmE2N2ZhOWMwY2UwZGNlZDQ3MjM5NGEwZGY3NDNmZTdmOTI5ZTM3OGVmZGIzNjhlZGRmZjQ1M2NmMDA3YWY2ZDk0OGUwYWRlNzU3MzcxZjhhNzExZTI3OGY2YiI6MTY6ImM2ZDkyYjZmZWU3NDE0ZDEzNThjZTE1NDZmYjYyOTg3NTMwYjkwYmQxNWUwZjE0OTYzYTVlMjYzNWFkYjY5MzQ3ZWMwYzAxYjJhYjE3NjNmZDhhYzFhNTkyZmIyMjc1NzQ2M2E5ODI0MjViYjk3YTNhNDM3YzViZjg2ZDAzZjJmIjoxNjoiYTJiYTQwZWUwN2UzYjJiZDJmMDJjZTIyN2YzNmExOTUwMjQ0ODZlNDljMTljYjQxYmJiZGZiYmE5OGIyMmIwZTU3N2MyZWVhZmZhMjBkODgzYTc2ZTY1ZTM5NGM2OWQ0YjNjMDVhMWU4ZmFkZGEyN2VkYjJhNDJiYzAwMGZlODg4YjliMzJjMjJkMTVhZGQwY2Q3NmIzZTc5MzZlMTk5NTViMjIwZGQxN2Q0ZWE5MDRiMWVjMTAyYjJlNGRlNzc1MTIyMmFhOTkxNTEwMjRjN2NiNDFjYzVlYTIxZDAwZWViNDFmN2M4MDA4MzRkMmM2ZTA2YmNlM2JjZTdlYTlhNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODU5ZWVmMmZkNzhhY2EwMDMwOGJkYzQ3MTE5M2JmNTViZjlkNzhkYjhmOGE2NzJiNDg0NjM0ZjNjOWMyNmU2NDc4YWUxMDI2MGZlMGRkOGMwODJlNTNhNTI5M2FmMjE3M2NkNTBjNmQ1ZDM1NGZlYmY3OGIyNjAyMWMyNWMwMjcxMmU3OGNkNDY5NGM5ZjQ2OTc3N2U0NTFlN2Y4ZTllMDRjZDM3MzljNmJiZmVkYWU0ODdmYjU1NjQ0ZTljYTc0ZmY3N2E1M2NiNzI5ODAyZjZlZDRhNWZmYThiYTE1OTg5MGZjIjoiZTNiNWQ1ZDAwMmMxYmNlNTBjMmI2NWVmODhhMTg4ZDgzYmNlN2U2MSI6IjhkYWE2MjdkM2RlNzU5NWQ2MzA1NmM3ZWM2NTllNTQ0MDZmMTA2MTAxMjhiYWFlODIxYzhiMmEwZjM5MzZkNTRkYzNiZGNlNDY2ODlmNmI3OTUxYmIxOGU4NDA1NDI3Njk3MThkNTcxNWQyMTBkODVlZmJiNTk2MTkyMDMyYzQyYmU0YzI5OTcyYzg1NjI3NWViNmQ1YTQ1ZjA1ZjUxODc2ZmM2NzQzZGVkZGQyOGNhZWM5YmIzMGVhOTllMDJjMzQ4ODI2OTYwNGZlNDk3Zjc0Y2NkN2M3ZmNhMTY3MTg5NzEyM2NiZDMwZGVmNWQ1NGEyYjU1MzZhZDkwYTc0N2UiOjAKKworUlNBU1NBLVBTUyBWZXJpZmljYXRpb24gVGVzdCBWZWN0b3IgSW50Citwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI0OjE2OiJhMmJhNDBlZTA3ZTNiMmJkMmYwMmNlMjI3ZjM2YTE5NTAyNDQ4NmU0OWMxOWNiNDFiYmJkZmJiYTk4YjIyYjBlNTc3YzJlZWFmZmEyMGQ4ODNhNzZlNjVlMzk0YzY5ZDRiM2MwNWExZThmYWRkYTI3ZWRiMmE0MmJjMDAwZmU4ODhiOWIzMmMyMmQxNWFkZDBjZDc2YjNlNzkzNmUxOTk1NWIyMjBkZDE3ZDRlYTkwNGIxZWMxMDJiMmU0ZGU3NzUxMjIyYWE5OTE1MTAyNGM3Y2I0MWNjNWVhMjFkMDBlZWI0MWY3YzgwMDgzNGQyYzZlMDZiY2UzYmNlN2VhOWE1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NTllZWYyZmQ3OGFjYTAwMzA4YmRjNDcxMTkzYmY1NWJmOWQ3OGRiOGY4YTY3MmI0ODQ2MzRmM2M5YzI2ZTY0NzhhZTEwMjYwZmUwZGQ4YzA4MmU1M2E1MjkzYWYyMTczY2Q1MGM2ZDVkMzU0ZmViZjc4YjI2MDIxYzI1YzAyNzEyZTc4Y2Q0Njk0YzlmNDY5Nzc3ZTQ1MWU3ZjhlOWUwNGNkMzczOWM2YmJmZWRhZTQ4N2ZiNTU2NDRlOWNhNzRmZjc3YTUzY2I3Mjk4MDJmNmVkNGE1ZmZhOGJhMTU5ODkwZmMiOiJlM2I1ZDVkMDAyYzFiY2U1MGMyYjY1ZWY4OGExODhkODNiY2U3ZTYxIjoiOGRhYTYyN2QzZGU3NTk1ZDYzMDU2YzdlYzY1OWU1NDQwNmYxMDYxMDEyOGJhYWU4MjFjOGIyYTBmMzkzNmQ1NGRjM2JkY2U0NjY4OWY2Yjc5NTFiYjE4ZTg0MDU0Mjc2OTcxOGQ1NzE1ZDIxMGQ4NWVmYmI1OTYxOTIwMzJjNDJiZTRjMjk5NzJjODU2Mjc1ZWI2ZDVhNDVmMDVmNTE4NzZmYzY3NDNkZWRkZDI4Y2FlYzliYjMwZWE5OWUwMmMzNDg4MjY5NjA0ZmU0OTdmNzRjY2Q3YzdmY2ExNjcxODk3MTIzY2JkMzBkZWY1ZDU0YTJiNTUzNmFkOTBhNzQ3ZSI6MAorCitSU0FTU0EtUFNTIFNpZ25pbmcgVGVzdCBWZWN0b3IgSGFzaCB0b28gbGFyZ2UKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJkMTdmNjU1YmYyN2M4YjE2ZDM1NDYyYzkwNWNjMDRhMjZmMzdlMmE2N2ZhOWMwY2UwZGNlZDQ3MjM5NGEwZGY3NDNmZTdmOTI5ZTM3OGVmZGIzNjhlZGRmZjQ1M2NmMDA3YWY2ZDk0OGUwYWRlNzU3MzcxZjhhNzExZTI3OGY2YiI6MTY6ImM2ZDkyYjZmZWU3NDE0ZDEzNThjZTE1NDZmYjYyOTg3NTMwYjkwYmQxNWUwZjE0OTYzYTVlMjYzNWFkYjY5MzQ3ZWMwYzAxYjJhYjE3NjNmZDhhYzFhNTkyZmIyMjc1NzQ2M2E5ODI0MjViYjk3YTNhNDM3YzViZjg2ZDAzZjJmIjoxNjoiYTJiYTQwZWUwN2UzYjJiZDJmMDJjZTIyN2YzNmExOTUwMjQ0ODZlNDljMTljYjQxYmJiZGZiYmE5OGIyMmIwZTU3N2MyZWVhZmZhMjBkODgzYTc2ZTY1ZTM5NGM2OWQ0YjNjMDVhMWU4ZmFkZGEyN2VkYjJhNDJiYzAwMGZlODg4YjliMzJjMjJkMTVhZGQwY2Q3NmIzZTc5MzZlMTk5NTViMjIwZGQxN2Q0ZWE5MDRiMWVjMTAyYjJlNGRlNzc1MTIyMmFhOTkxNTEwMjRjN2NiNDFjYzVlYTIxZDAwZWViNDFmN2M4MDA4MzRkMmM2ZTA2YmNlM2JjZTdlYTlhNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBNTEyOiJkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMzJhN2M4YTA1YmJjOTBkMzJjNDlkNDM2ZTk5NTY5ZmQzMmE3YzhhMDViYmM5MGQzMmM0OWQ0MzZlOTk1NjlmZDMyYTdjOGEwNWJiYzkwZDMyYzQ5ZDQzNmU5OTU2OWZkMDAiOiJlM2I1ZDVkMDAyYzFiY2U1MGMyYjY1ZWY4OGExODhkODNiY2U3ZTYxIjoiIjpNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJlN2U4OTQyNzIwYTg3NzUxNzI3M2EzNTYwNTNlYTJhMWJjMGM5NGFhNzJkNTVjNmU4NjI5NmIyZGZjOTY3OTQ4YzBhNzJjYmNjY2E3ZWFjYjM1NzA2ZTA5YTFkZjU1YTE1MzViZDliM2NjMzQxNjBiM2I2ZGNkM2VkYThlNjQ0MyI6MTY6ImI2OWRjYTFjZjdkNGQ3ZWM4MWU3NWI5MGZjY2E4NzRhYmNkZTEyM2ZkMjcwMDE4MGFhOTA0NzliNmU0OGRlOGQ2N2VkMjRmOWYxOWQ4NWJhMjc1ODc0ZjU0MmNkMjBkYzcyM2U2OTYzMzY0YTFmOTQyNTQ1MmIyNjlhNjc5OWZkIjoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiY2RjODdkYTIyM2Q3ODZkZjNiNDVlMGJiYmM3MjEzMjZkMWVlMmFmODA2Y2MzMTU0NzVjYzZmMGQ5YzY2ZTFiNjIzNzFkNDVjZTIzOTJlMWFjOTI4NDRjMzEwMTAyZjE1NmEwZDhkNTJjMWY0YzQwYmEzYWE2NTA5NTc4NmNiNzY5NzU3YTY1NjNiYTk1OGZlZDBiY2M5ODRlOGI1MTdhM2Q1ZjUxNWIyM2I4YTQxZTc0YWE4Njc2OTNmOTBkZmIwNjFhNmU4NmRmYWFlZTY0NDcyYzAwZTVmMjA5NDU3MjljYmViZTc3ZjA2Y2U3OGUwOGY0MDk4ZmJhNDFmOWQ2MTkzYzAzMTdlOGI2MGQ0YjYwODRhY2I0MmQyOWUzODA4YTNiYzM3MmQ4NWUzMzExNzBmY2JmN2NjNzJkMGI3MWMyOTY2NDhiM2E0ZDEwZjQxNjI5NWQwODA3YWE2MjVjYWIyNzQ0ZmQ5ZWE4ZmQyMjNjNDI1MzcwMjk4MjhiZDE2YmUwMjU0NmYxMzBmZDJlMzNiOTM2ZDI2NzZlMDhhZWQxYjczMzE4Yjc1MGEwMTY3ZDAiOiJkZWU5NTljN2UwNjQxMTM2MTQyMGZmODAxODVlZDU3ZjNlNjc3NmFmIjoiOTA3NDMwOGZiNTk4ZTk3MDFiMjI5NDM4OGU1MmY5NzFmYWFjMmI2MGE1MTQ1YWYxODVkZjUyODdiNWVkMjg4N2U1N2NlN2ZkNDRkYzg2MzRlNDA3YzhlMGU0MzYwYmMyMjZmM2VjMjI3ZjlkOWU1NDYzOGU4ZDMxZjUwNTEyMTVkZjZlYmI5YzJmOTU3OWFhNzc1OThhMzhmOTE0YjViOWMxYmQ4M2M0ZTJmOWYzODJhMGQwYWEzNTQyZmZlZTY1OTg0YTYwMWJjNjllYjI4ZGViMjdkY2ExMmM4MmMyZDRjM2Y2NmNkNTAwZjFmZjJiOTk0ZDhhNGUzMGNiYjMzYyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNDoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiY2RjODdkYTIyM2Q3ODZkZjNiNDVlMGJiYmM3MjEzMjZkMWVlMmFmODA2Y2MzMTU0NzVjYzZmMGQ5YzY2ZTFiNjIzNzFkNDVjZTIzOTJlMWFjOTI4NDRjMzEwMTAyZjE1NmEwZDhkNTJjMWY0YzQwYmEzYWE2NTA5NTc4NmNiNzY5NzU3YTY1NjNiYTk1OGZlZDBiY2M5ODRlOGI1MTdhM2Q1ZjUxNWIyM2I4YTQxZTc0YWE4Njc2OTNmOTBkZmIwNjFhNmU4NmRmYWFlZTY0NDcyYzAwZTVmMjA5NDU3MjljYmViZTc3ZjA2Y2U3OGUwOGY0MDk4ZmJhNDFmOWQ2MTkzYzAzMTdlOGI2MGQ0YjYwODRhY2I0MmQyOWUzODA4YTNiYzM3MmQ4NWUzMzExNzBmY2JmN2NjNzJkMGI3MWMyOTY2NDhiM2E0ZDEwZjQxNjI5NWQwODA3YWE2MjVjYWIyNzQ0ZmQ5ZWE4ZmQyMjNjNDI1MzcwMjk4MjhiZDE2YmUwMjU0NmYxMzBmZDJlMzNiOTM2ZDI2NzZlMDhhZWQxYjczMzE4Yjc1MGEwMTY3ZDAiOiJkZWU5NTljN2UwNjQxMTM2MTQyMGZmODAxODVlZDU3ZjNlNjc3NmFmIjoiOTA3NDMwOGZiNTk4ZTk3MDFiMjI5NDM4OGU1MmY5NzFmYWFjMmI2MGE1MTQ1YWYxODVkZjUyODdiNWVkMjg4N2U1N2NlN2ZkNDRkYzg2MzRlNDA3YzhlMGU0MzYwYmMyMjZmM2VjMjI3ZjlkOWU1NDYzOGU4ZDMxZjUwNTEyMTVkZjZlYmI5YzJmOTU3OWFhNzc1OThhMzhmOTE0YjViOWMxYmQ4M2M0ZTJmOWYzODJhMGQwYWEzNTQyZmZlZTY1OTg0YTYwMWJjNjllYjI4ZGViMjdkY2ExMmM4MmMyZDRjM2Y2NmNkNTAwZjFmZjJiOTk0ZDhhNGUzMGNiYjMzYyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjQ6MTY6ImU3ZTg5NDI3MjBhODc3NTE3MjczYTM1NjA1M2VhMmExYmMwYzk0YWE3MmQ1NWM2ZTg2Mjk2YjJkZmM5Njc5NDhjMGE3MmNiY2NjYTdlYWNiMzU3MDZlMDlhMWRmNTVhMTUzNWJkOWIzY2MzNDE2MGIzYjZkY2QzZWRhOGU2NDQzIjoxNjoiYjY5ZGNhMWNmN2Q0ZDdlYzgxZTc1YjkwZmNjYTg3NGFiY2RlMTIzZmQyNzAwMTgwYWE5MDQ3OWI2ZTQ4ZGU4ZDY3ZWQyNGY5ZjE5ZDg1YmEyNzU4NzRmNTQyY2QyMGRjNzIzZTY5NjMzNjRhMWY5NDI1NDUyYjI2OWE2Nzk5ZmQiOjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4NTEzODRjZGZlODE5YzIyZWQ2YzRjY2IzMGRhZWI1Y2YwNTliYzhlMTE2NmI3ZTM1MzBjNGMyMzNlMmI1ZjhmNzFhMWNjYTU4MmQ0M2VjYzcyYjFiY2ExNmRmYzcwMTMyMjZiOWUiOiJlZjI4NjlmYTQwYzM0NmNiMTgzZGFiM2Q3YmZmYzk4ZmQ1NmRmNDJkIjoiM2VmN2Y0NmU4MzFiZjkyYjMyMjc0MTQyYTU4NWZmY2VmYmRjYTdiMzJhZTkwZDEwZmIwZjBjNzI5OTg0ZjA0ZWYyOWE5ZGYwNzgwNzc1Y2U0MzczOWI5NzgzODM5MGRiMGE1NTA1ZTYzZGU5MjcwMjhkOWQyOWIyMTljYTJjNDUxNzgzMjU1OGE1NWQ2OTRhNmQyNWI5ZGFiNjYwMDNjNGNjY2Q5MDc4MDIxOTNiZTUxNzBkMjYxNDdkMzdiOTM1OTAyNDFiZTUxYzI1MDU1ZjQ3ZWY2Mjc1MmNmYmUyMTQxOGZhZmU5OGMyMmM0ZDRkNDc3MjRmZGI1NjY5ZTg0MyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNDoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODUxMzg0Y2RmZTgxOWMyMmVkNmM0Y2NiMzBkYWViNWNmMDU5YmM4ZTExNjZiN2UzNTMwYzRjMjMzZTJiNWY4ZjcxYTFjY2E1ODJkNDNlY2M3MmIxYmNhMTZkZmM3MDEzMjI2YjllIjoiZWYyODY5ZmE0MGMzNDZjYjE4M2RhYjNkN2JmZmM5OGZkNTZkZjQyZCI6IjNlZjdmNDZlODMxYmY5MmIzMjI3NDE0MmE1ODVmZmNlZmJkY2E3YjMyYWU5MGQxMGZiMGYwYzcyOTk4NGYwNGVmMjlhOWRmMDc4MDc3NWNlNDM3MzliOTc4MzgzOTBkYjBhNTUwNWU2M2RlOTI3MDI4ZDlkMjliMjE5Y2EyYzQ1MTc4MzI1NThhNTVkNjk0YTZkMjViOWRhYjY2MDAzYzRjY2NkOTA3ODAyMTkzYmU1MTcwZDI2MTQ3ZDM3YjkzNTkwMjQxYmU1MWMyNTA1NWY0N2VmNjI3NTJjZmJlMjE0MThmYWZlOThjMjJjNGQ0ZDQ3NzI0ZmRiNTY2OWU4NDMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzMKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI0OjE2OiJlN2U4OTQyNzIwYTg3NzUxNzI3M2EzNTYwNTNlYTJhMWJjMGM5NGFhNzJkNTVjNmU4NjI5NmIyZGZjOTY3OTQ4YzBhNzJjYmNjY2E3ZWFjYjM1NzA2ZTA5YTFkZjU1YTE1MzViZDliM2NjMzQxNjBiM2I2ZGNkM2VkYThlNjQ0MyI6MTY6ImI2OWRjYTFjZjdkNGQ3ZWM4MWU3NWI5MGZjY2E4NzRhYmNkZTEyM2ZkMjcwMDE4MGFhOTA0NzliNmU0OGRlOGQ2N2VkMjRmOWYxOWQ4NWJhMjc1ODc0ZjU0MmNkMjBkYzcyM2U2OTYzMzY0YTFmOTQyNTQ1MmIyNjlhNjc5OWZkIjoxNjoiYTU2ZTRhMGU3MDEwMTc1ODlhNTE4N2RjN2VhODQxZDE1NmYyZWMwZTM2YWQ1MmE0NGRmZWIxZTYxZjdhZDk5MWQ4YzUxMDU2ZmZlZGIxNjJiNGMwZjI4M2ExMmE4OGEzOTRkZmY1MjZhYjcyOTFjYmIzMDdjZWFiZmNlMGIxZGZkNWNkOTUwODA5NmQ1YjJiOGI2ZGY1ZDY3MWVmNjM3N2MwOTIxY2IyM2MyNzBhNzBlMjU5OGU2ZmY4OWQxOWYxMDVhY2MyZDNmMGNiMzVmMjkyODBlMTM4NmI2ZjY0YzRlZjIyZTFlMWYyMGQwY2U4Y2ZmYjIyNDliZDlhMjEzNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYTRiMTU5OTQxNzYxYzQwYzZhODJmMmI4MGQxYjk0ZjVhYTI2NTRmZDE3ZTEyZDU4ODg2NDY3OWI1NGNkMDRlZjhiZDAzMDEyYmU4ZGMzN2Y0YjgzYWY3OTYzZmFmZjBkZmEyMjU0Nzc0MzdjNDgwMTdmZjJiZTgxOTFjZjM5NTVmYzA3MzU2ZWFiM2YzMjJmN2Y2MjBlMjFkMjU0ZTVkYjQzMjQyNzlmZTA2N2UwOTEwZTJlODFjYTJjYWIzMWM3NDVlNjdhNTQwNThlYjUwZDk5M2NkYjllZDBiNGQwMjljMDZkMjFhOTRjYTY2MWMzY2UyN2ZhZTFkNmNiMjBmNDU2NGQ2NmNlNDc2NzU4M2QwZTVmMDYwMjE1YjU5MDE3YmU4NWVhODQ4OTM5MTI3YmQ4YzljNGQ0N2I1MTA1NmMwMzFjZjMzNmYxN2M5OTgwZjNiOGY1YjliNjg3OGU4Yjc5N2FhNDNiODgyNjg0MzMzZTE3ODkzZmU5Y2FhNmFhMjk5ZjdlZDFhMThlZTJjNTQ4NjRiN2IyYjk5YjcyNjE4ZmIwMjU3NGQxMzllZjUwZjAxOWM5ZWVmNDE2OTcxMzM4ZTdkNDcwIjoiNzEwYjljNDc0N2Q4MDBkNGRlODdmMTJhZmRjZTZkZjE4MTA3Y2M3NyI6IjY2NjAyNmZiYTcxYmQzZTdjZjEzMTU3Y2MyYzUxYThlNGFhNjg0YWY5Nzc4ZjkxODQ5ZjM0MzM1ZDE0MWMwMDE1NGM0MTk3NjIxZjk2MjRhNjc1YjVhYmMyMmVlN2Q1YmFhZmZhYWUxYzliYWNhMmNjMzczYjNmMzNlNzhlNjE0M2MzOTVhOTFhYTdmYWNhNjY0ZWI3MzNhZmQxNGQ4ODI3MjU5ZDk5YTc1NTBmYWNhNTAxZWYyYjA0ZTMzYzIzYWE1MWY0YjllODI4MmVmZGI3MjhjYzBhYjA5NDA1YTkxNjA3YzYzNjk5NjFiYzgyNzBkMmQ0ZjM5ZmNlNjEyYjEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjQ6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImE0YjE1OTk0MTc2MWM0MGM2YTgyZjJiODBkMWI5NGY1YWEyNjU0ZmQxN2UxMmQ1ODg4NjQ2NzliNTRjZDA0ZWY4YmQwMzAxMmJlOGRjMzdmNGI4M2FmNzk2M2ZhZmYwZGZhMjI1NDc3NDM3YzQ4MDE3ZmYyYmU4MTkxY2YzOTU1ZmMwNzM1NmVhYjNmMzIyZjdmNjIwZTIxZDI1NGU1ZGI0MzI0Mjc5ZmUwNjdlMDkxMGUyZTgxY2EyY2FiMzFjNzQ1ZTY3YTU0MDU4ZWI1MGQ5OTNjZGI5ZWQwYjRkMDI5YzA2ZDIxYTk0Y2E2NjFjM2NlMjdmYWUxZDZjYjIwZjQ1NjRkNjZjZTQ3Njc1ODNkMGU1ZjA2MDIxNWI1OTAxN2JlODVlYTg0ODkzOTEyN2JkOGM5YzRkNDdiNTEwNTZjMDMxY2YzMzZmMTdjOTk4MGYzYjhmNWI5YjY4NzhlOGI3OTdhYTQzYjg4MjY4NDMzM2UxNzg5M2ZlOWNhYTZhYTI5OWY3ZWQxYTE4ZWUyYzU0ODY0YjdiMmI5OWI3MjYxOGZiMDI1NzRkMTM5ZWY1MGYwMTljOWVlZjQxNjk3MTMzOGU3ZDQ3MCI6IjcxMGI5YzQ3NDdkODAwZDRkZTg3ZjEyYWZkY2U2ZGYxODEwN2NjNzciOiI2NjYwMjZmYmE3MWJkM2U3Y2YxMzE1N2NjMmM1MWE4ZTRhYTY4NGFmOTc3OGY5MTg0OWYzNDMzNWQxNDFjMDAxNTRjNDE5NzYyMWY5NjI0YTY3NWI1YWJjMjJlZTdkNWJhYWZmYWFlMWM5YmFjYTJjYzM3M2IzZjMzZTc4ZTYxNDNjMzk1YTkxYWE3ZmFjYTY2NGViNzMzYWZkMTRkODgyNzI1OWQ5OWE3NTUwZmFjYTUwMWVmMmIwNGUzM2MyM2FhNTFmNGI5ZTgyODJlZmRiNzI4Y2MwYWIwOTQwNWE5MTYwN2M2MzY5OTYxYmM4MjcwZDJkNGYzOWZjZTYxMmIxIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV80Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNDoxNjoiZTdlODk0MjcyMGE4Nzc1MTcyNzNhMzU2MDUzZWEyYTFiYzBjOTRhYTcyZDU1YzZlODYyOTZiMmRmYzk2Nzk0OGMwYTcyY2JjY2NhN2VhY2IzNTcwNmUwOWExZGY1NWExNTM1YmQ5YjNjYzM0MTYwYjNiNmRjZDNlZGE4ZTY0NDMiOjE2OiJiNjlkY2ExY2Y3ZDRkN2VjODFlNzViOTBmY2NhODc0YWJjZGUxMjNmZDI3MDAxODBhYTkwNDc5YjZlNDhkZThkNjdlZDI0ZjlmMTlkODViYTI3NTg3NGY1NDJjZDIwZGM3MjNlNjk2MzM2NGExZjk0MjU0NTJiMjY5YTY3OTlmZCI6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImJjNjU2NzQ3ZmE5ZWFmYjNmMCI6IjA1NmYwMDk4NWRlMTRkOGVmNWNlYTllODJmOGMyN2JlZjcyMDMzNWUiOiI0NjA5NzkzYjIzZTlkMDkzNjJkYzIxYmI0N2RhMGI0ZjNhNzYyMjY0OWE0N2Q0NjQwMTliOWFlYWZlNTMzNTljMTc4YzkxY2Q1OGJhNmJjYjc4YmUwMzQ2YTdiYzYzN2Y0Yjg3M2Q0YmFiMzhlZTY2MWYxOTk2MzRjNTQ3YTFhZDg0NDJlMDNkYTAxNWIxMzZlNTQzZjdhYjA3YzBjMTNlNDIyNWI4ZGU4Y2NlMjVkNGY2ZWI4NDAwZjgxZjdlMTgzM2I3ZWU2ZTMzNGQzNzA5NjRjYTc5ZmRiODcyYjRkNzUyMjNiNWVlYjA4MTAxNTkxZmI1MzJkMTU1YTZkZTg3IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMV80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI0OjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJiYzY1Njc0N2ZhOWVhZmIzZjAiOiIwNTZmMDA5ODVkZTE0ZDhlZjVjZWE5ZTgyZjhjMjdiZWY3MjAzMzVlIjoiNDYwOTc5M2IyM2U5ZDA5MzYyZGMyMWJiNDdkYTBiNGYzYTc2MjI2NDlhNDdkNDY0MDE5YjlhZWFmZTUzMzU5YzE3OGM5MWNkNThiYTZiY2I3OGJlMDM0NmE3YmM2MzdmNGI4NzNkNGJhYjM4ZWU2NjFmMTk5NjM0YzU0N2ExYWQ4NDQyZTAzZGEwMTViMTM2ZTU0M2Y3YWIwN2MwYzEzZTQyMjViOGRlOGNjZTI1ZDRmNmViODQwMGY4MWY3ZTE4MzNiN2VlNmUzMzRkMzcwOTY0Y2E3OWZkYjg3MmI0ZDc1MjIzYjVlZWIwODEwMTU5MWZiNTMyZDE1NWE2ZGU4NyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjQ6MTY6ImU3ZTg5NDI3MjBhODc3NTE3MjczYTM1NjA1M2VhMmExYmMwYzk0YWE3MmQ1NWM2ZTg2Mjk2YjJkZmM5Njc5NDhjMGE3MmNiY2NjYTdlYWNiMzU3MDZlMDlhMWRmNTVhMTUzNWJkOWIzY2MzNDE2MGIzYjZkY2QzZWRhOGU2NDQzIjoxNjoiYjY5ZGNhMWNmN2Q0ZDdlYzgxZTc1YjkwZmNjYTg3NGFiY2RlMTIzZmQyNzAwMTgwYWE5MDQ3OWI2ZTQ4ZGU4ZDY3ZWQyNGY5ZjE5ZDg1YmEyNzU4NzRmNTQyY2QyMGRjNzIzZTY5NjMzNjRhMWY5NDI1NDUyYjI2OWE2Nzk5ZmQiOjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJiNDU1ODE1NDdlNTQyNzc3MGM3NjhlOGI4MmI3NTU2NGUwZWE0ZTljMzI1OTRkNmJmZjcwNjU0NGRlMGE4Nzc2YzdhODBiNDU3NjU1MGVlZTFiMmFjYWJjN2U4YjdkM2VmN2JiNWIwM2U0NjJjMTEwNDdlYWRkMDA2MjlhZTU3NTQ4MGFjMTQ3MGZlMDQ2ZjEzYTJiZjVhZjE3OTIxZGM0YjBhYThiMDJiZWU2MzM0OTExNjUxZDdmODUyNWQxMGYzMmI1MWQzM2JlNTIwZDNkZGY1YTcwOTk1NWEzZGZlNzgyODNiOWUwYWI1NDA0NmQxNTBjMTc3ZjAzN2ZkY2NjNWJlNGVhNWY2OGI1ZTVhMzhjOWQ3ZWRjY2NjNDk3NWY0NTVhNjkwOWI0IjoiODBlNzBmZjg2YTA4ZGUzZWM2MDk3MmIzOWI0ZmJmZGNlYTY3YWU4ZSI6IjFkMmFhZDIyMWNhNGQzMWRkZjEzNTA5MjM5MDE5Mzk4ZTNkMTRiMzJkYzM0ZGM1YWY0YWVhZWEzYzA5NWFmNzM0NzljZjBhNDVlNTYyOTYzNWE1M2EwMTgzNzc2MTViMTZjYjliMTNiM2UwOWQ2NzFlYjcxZTM4N2I4NTQ1YzU5NjBkYTVhNjQ3NzZlNzY4ZTgyYjJjOTM1ODNiZjEwNGMzZmRiMjM1MTJiN2I0ZTg5ZjYzM2RkMDA2M2E1MzBkYjQ1MjRiMDFjM2YzODRjMDkzMTBlMzE1YTc5ZGNkM2Q2ODQwMjJhN2YzMWM4NjVhNjY0ZTMxNjk3OGI3NTlmYWQiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzUgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjQ6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImI0NTU4MTU0N2U1NDI3NzcwYzc2OGU4YjgyYjc1NTY0ZTBlYTRlOWMzMjU5NGQ2YmZmNzA2NTQ0ZGUwYTg3NzZjN2E4MGI0NTc2NTUwZWVlMWIyYWNhYmM3ZThiN2QzZWY3YmI1YjAzZTQ2MmMxMTA0N2VhZGQwMDYyOWFlNTc1NDgwYWMxNDcwZmUwNDZmMTNhMmJmNWFmMTc5MjFkYzRiMGFhOGIwMmJlZTYzMzQ5MTE2NTFkN2Y4NTI1ZDEwZjMyYjUxZDMzYmU1MjBkM2RkZjVhNzA5OTU1YTNkZmU3ODI4M2I5ZTBhYjU0MDQ2ZDE1MGMxNzdmMDM3ZmRjY2M1YmU0ZWE1ZjY4YjVlNWEzOGM5ZDdlZGNjY2M0OTc1ZjQ1NWE2OTA5YjQiOiI4MGU3MGZmODZhMDhkZTNlYzYwOTcyYjM5YjRmYmZkY2VhNjdhZThlIjoiMWQyYWFkMjIxY2E0ZDMxZGRmMTM1MDkyMzkwMTkzOThlM2QxNGIzMmRjMzRkYzVhZjRhZWFlYTNjMDk1YWY3MzQ3OWNmMGE0NWU1NjI5NjM1YTUzYTAxODM3NzYxNWIxNmNiOWIxM2IzZTA5ZDY3MWViNzFlMzg3Yjg1NDVjNTk2MGRhNWE2NDc3NmU3NjhlODJiMmM5MzU4M2JmMTA0YzNmZGIyMzUxMmI3YjRlODlmNjMzZGQwMDYzYTUzMGRiNDUyNGIwMWMzZjM4NGMwOTMxMGUzMTVhNzlkY2QzZDY4NDAyMmE3ZjMxYzg2NWE2NjRlMzE2OTc4Yjc1OWZhZCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDFfNgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjQ6MTY6ImU3ZTg5NDI3MjBhODc3NTE3MjczYTM1NjA1M2VhMmExYmMwYzk0YWE3MmQ1NWM2ZTg2Mjk2YjJkZmM5Njc5NDhjMGE3MmNiY2NjYTdlYWNiMzU3MDZlMDlhMWRmNTVhMTUzNWJkOWIzY2MzNDE2MGIzYjZkY2QzZWRhOGU2NDQzIjoxNjoiYjY5ZGNhMWNmN2Q0ZDdlYzgxZTc1YjkwZmNjYTg3NGFiY2RlMTIzZmQyNzAwMTgwYWE5MDQ3OWI2ZTQ4ZGU4ZDY3ZWQyNGY5ZjE5ZDg1YmEyNzU4NzRmNTQyY2QyMGRjNzIzZTY5NjMzNjRhMWY5NDI1NDUyYjI2OWE2Nzk5ZmQiOjE2OiJhNTZlNGEwZTcwMTAxNzU4OWE1MTg3ZGM3ZWE4NDFkMTU2ZjJlYzBlMzZhZDUyYTQ0ZGZlYjFlNjFmN2FkOTkxZDhjNTEwNTZmZmVkYjE2MmI0YzBmMjgzYTEyYTg4YTM5NGRmZjUyNmFiNzI5MWNiYjMwN2NlYWJmY2UwYjFkZmQ1Y2Q5NTA4MDk2ZDViMmI4YjZkZjVkNjcxZWY2Mzc3YzA5MjFjYjIzYzI3MGE3MGUyNTk4ZTZmZjg5ZDE5ZjEwNWFjYzJkM2YwY2IzNWYyOTI4MGUxMzg2YjZmNjRjNGVmMjJlMWUxZjIwZDBjZThjZmZiMjI0OWJkOWEyMTM3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxMGFhZTlhMGFiMGI1OTVkMDg0MTIwN2I3MDBkNDhkNzVmYWVkZGUzYjc3NWNkNmI0Y2M4OGFlMDZlNDY5NGVjNzRiYTE4Zjg1MjBkNGY1ZWE2OWNiYmU3Y2MyYmViYTQzZWZkYzEwMjE1YWM0ZWIzMmRjMzAyYTFmNTNkYzZjNDM1MjI2N2U3OTM2Y2ZlYmY3YzhkNjcwMzU3ODRhMzkwOWZhODU5YzdiN2I1OWI4ZTM5YzVjMjM0OWYxODg2YjcwNWEzMDI2N2Q0MDJmNzQ4NmFiNGY1OGNhZDVkNjlhZGIxN2FiOGNkMGNlMWNhZjUwMjVhZjRhZTI0YjFmYjg3OTRjNjA3MGNjMDlhNTFlMmY5OTExMzExZTM4NzdkMDA0NGM3MWM1N2E5OTMzOTUwMDg4MDZiNzIzYWMzODM3M2QzOTU0ODE4MTg1MjhjMWU3MDUzNzM5MjgyMDUzNTI5NTEwZTkzNWNkMGZhNzdiOGZhNTNjYzJkNDc0YmQ0ZmIzY2M1YzY3MmQ2ZmZkYzkwYTAwZjk4NDg3MTJjNGJjZmU0NmM2MDU3MzY1OWIxMWU2NDU3ZTg2MWYwZjYwNGI2MTM4ZDE0NGY4Y2U0ZTJkYTczIjoiYThhYjY5ZGQ4MDFmMDA3NGMyYTFmYzYwNjQ5ODM2YzYxNmQ5OTY4MSI6IjJhMzRmNjEyNWUxZjZiMGJmOTcxZTg0ZmJkNDFjNjMyYmU4ZjJjMmFjZTdkZThiNjkyNmUzMWZmOTNlOWFmOTg3ZmJjMDZlNTFlOWJlMTRmNTE5OGY5MWYzZjk1M2JkNjdkYTYwYTlkZjU5NzY0YzNkYzBmZTA4ZTFjYmVmMGI3NWY4NjhkMTBhZDNmYmE3NDlmZWY1OWZiNmRhYzQ2YTBkNmU1MDQzNjkzMzE1ODZmNThlNDYyOGYzOWFhMjc4OTgyNTQzYmMwZWViNTM3ZGM2MTk1ODAxOWIzOTRmYjI3M2YyMTU4NThhMGEwMWFjNGQ2NTBiOTU1YzY3ZjRjNTgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxXzYgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjQ6MTY6ImE1NmU0YTBlNzAxMDE3NTg5YTUxODdkYzdlYTg0MWQxNTZmMmVjMGUzNmFkNTJhNDRkZmViMWU2MWY3YWQ5OTFkOGM1MTA1NmZmZWRiMTYyYjRjMGYyODNhMTJhODhhMzk0ZGZmNTI2YWI3MjkxY2JiMzA3Y2VhYmZjZTBiMWRmZDVjZDk1MDgwOTZkNWIyYjhiNmRmNWQ2NzFlZjYzNzdjMDkyMWNiMjNjMjcwYTcwZTI1OThlNmZmODlkMTlmMTA1YWNjMmQzZjBjYjM1ZjI5MjgwZTEzODZiNmY2NGM0ZWYyMmUxZTFmMjBkMGNlOGNmZmIyMjQ5YmQ5YTIxMzciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjEwYWFlOWEwYWIwYjU5NWQwODQxMjA3YjcwMGQ0OGQ3NWZhZWRkZTNiNzc1Y2Q2YjRjYzg4YWUwNmU0Njk0ZWM3NGJhMThmODUyMGQ0ZjVlYTY5Y2JiZTdjYzJiZWJhNDNlZmRjMTAyMTVhYzRlYjMyZGMzMDJhMWY1M2RjNmM0MzUyMjY3ZTc5MzZjZmViZjdjOGQ2NzAzNTc4NGEzOTA5ZmE4NTljN2I3YjU5YjhlMzljNWMyMzQ5ZjE4ODZiNzA1YTMwMjY3ZDQwMmY3NDg2YWI0ZjU4Y2FkNWQ2OWFkYjE3YWI4Y2QwY2UxY2FmNTAyNWFmNGFlMjRiMWZiODc5NGM2MDcwY2MwOWE1MWUyZjk5MTEzMTFlMzg3N2QwMDQ0YzcxYzU3YTk5MzM5NTAwODgwNmI3MjNhYzM4MzczZDM5NTQ4MTgxODUyOGMxZTcwNTM3MzkyODIwNTM1Mjk1MTBlOTM1Y2QwZmE3N2I4ZmE1M2NjMmQ0NzRiZDRmYjNjYzVjNjcyZDZmZmRjOTBhMDBmOTg0ODcxMmM0YmNmZTQ2YzYwNTczNjU5YjExZTY0NTdlODYxZjBmNjA0YjYxMzhkMTQ0ZjhjZTRlMmRhNzMiOiJhOGFiNjlkZDgwMWYwMDc0YzJhMWZjNjA2NDk4MzZjNjE2ZDk5NjgxIjoiMmEzNGY2MTI1ZTFmNmIwYmY5NzFlODRmYmQ0MWM2MzJiZThmMmMyYWNlN2RlOGI2OTI2ZTMxZmY5M2U5YWY5ODdmYmMwNmU1MWU5YmUxNGY1MTk4ZjkxZjNmOTUzYmQ2N2RhNjBhOWRmNTk3NjRjM2RjMGZlMDhlMWNiZWYwYjc1Zjg2OGQxMGFkM2ZiYTc0OWZlZjU5ZmI2ZGFjNDZhMGQ2ZTUwNDM2OTMzMTU4NmY1OGU0NjI4ZjM5YWEyNzg5ODI1NDNiYzBlZWI1MzdkYzYxOTU4MDE5YjM5NGZiMjczZjIxNTg1OGEwYTAxYWM0ZDY1MGI5NTVjNjdmNGM1OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfMQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjU6MTY6IjAxNjYwMWU5MjZhMGY4YzllMjZlY2FiNzY5ZWE2NWE1ZTdjNTJjYzllMDgwZWY1MTk0NTdjNjQ0ZGE2ODkxYzVhMTA0ZDNlYTc5NTU5MjlhMjJlN2M2OGE3YWY5ZmNhZDc3N2MzY2NjMmI5ZTNkMzY1MGJjZTQwNDM5OWI3ZTU5ZDEiOjE2OiIwMTRlYWZhMWQ0ZDAxODRkYTdlMzFmODc3ZDEyODFkZGRhNjI1NjY0ODY5ZTgzNzllNjdhZDNiNzVlYWU3NGE1ODBlOTgyN2FiZDZlYjdhMDAyY2I1NDExZjUyNjY3OTc3NjhmYjhlOTVhZTQwZTNlOGEwMWYzNWZmODllNTZjMDc5IjoxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJkYWJhMDMyMDY2MjYzZmFlZGI2NTk4NDgxMTUyNzhhNTJjNDRmYWEzYTc2ZjM3NTE1ZWQzMzYzMjEwNzJjNDBhOWQ5YjUzYmMwNTAxNDA3OGFkZjUyMDg3NTE0NmFhZTcwZmYwNjAyMjZkY2I3YjFmMWZjMjdlOTM2MCI6IjU3YmYxNjBiY2IwMmJiMWRjNzI4MGNmMDQ1ODUzMGI3ZDI4MzJmZjciOiIwMTRjNWJhNTMzODMyOGNjYzZlN2E5MGJmMWMwYWIzZmQ2MDZmZjQ3OTZkM2MxMmU0YjYzOWVkOTEzNmE1ZmVjNmMxNmQ4ODg0YmRkOTljZmRjNTIxNDU2YjA3NDJiNzM2ODY4Y2Y5MGRlMDk5YWRiOGQ1ZmZkMWRlZmYzOWJhNDAwN2FiNzQ2Y2VmZGIyMmQ3ZGYwZTIyNWY1NDYyN2RjNjU0NjYxMzE3MjFiOTBhZjQ0NTM2M2E4MzU4YjlmNjA3NjQyZjc4ZmFiMGFiMGY0M2I3MTY4ZDY0YmFlNzBkODgyNzg0OGQ4ZWYxZTQyMWM1NzU0ZGRmNDJjMjU4OWI1YjMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAyXzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjU6MTY6IjAxZDQwYzFiY2Y5N2E2OGFlN2NkYmQ4YTdiZjNlMzRmYTE5ZGNjYTRlZjc1YTQ3NDU0Mzc1Zjk0NTE0ZDg4ZmVkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjN2M3YThiNDc3ZGNlODI5ZTg4NDRmNjI1YjExNWU1ZTljNGE1OWNmOGY4MTEzYjY4MzQzMzZhMmZkMjY4OWI0NzJjYmI1ZTVjYWJlNjc0MzUwYzU5YjZjMTdlMTc2ODc0ZmI0MmY4ZmMzZDE3NmEwMTdlZGM2MWZkMzI2YzRiMzNjOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZGFiYTAzMjA2NjI2M2ZhZWRiNjU5ODQ4MTE1Mjc4YTUyYzQ0ZmFhM2E3NmYzNzUxNWVkMzM2MzIxMDcyYzQwYTlkOWI1M2JjMDUwMTQwNzhhZGY1MjA4NzUxNDZhYWU3MGZmMDYwMjI2ZGNiN2IxZjFmYzI3ZTkzNjAiOiI1N2JmMTYwYmNiMDJiYjFkYzcyODBjZjA0NTg1MzBiN2QyODMyZmY3IjoiMDE0YzViYTUzMzgzMjhjY2M2ZTdhOTBiZjFjMGFiM2ZkNjA2ZmY0Nzk2ZDNjMTJlNGI2MzllZDkxMzZhNWZlYzZjMTZkODg4NGJkZDk5Y2ZkYzUyMTQ1NmIwNzQyYjczNjg2OGNmOTBkZTA5OWFkYjhkNWZmZDFkZWZmMzliYTQwMDdhYjc0NmNlZmRiMjJkN2RmMGUyMjVmNTQ2MjdkYzY1NDY2MTMxNzIxYjkwYWY0NDUzNjNhODM1OGI5ZjYwNzY0MmY3OGZhYjBhYjBmNDNiNzE2OGQ2NGJhZTcwZDg4Mjc4NDhkOGVmMWU0MjFjNTc1NGRkZjQyYzI1ODliNWIzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl8yCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNToxNjoiMDE2NjAxZTkyNmEwZjhjOWUyNmVjYWI3NjllYTY1YTVlN2M1MmNjOWUwODBlZjUxOTQ1N2M2NDRkYTY4OTFjNWExMDRkM2VhNzk1NTkyOWEyMmU3YzY4YTdhZjlmY2FkNzc3YzNjY2MyYjllM2QzNjUwYmNlNDA0Mzk5YjdlNTlkMSI6MTY6IjAxNGVhZmExZDRkMDE4NGRhN2UzMWY4NzdkMTI4MWRkZGE2MjU2NjQ4NjllODM3OWU2N2FkM2I3NWVhZTc0YTU4MGU5ODI3YWJkNmViN2EwMDJjYjU0MTFmNTI2Njc5Nzc2OGZiOGU5NWFlNDBlM2U4YTAxZjM1ZmY4OWU1NmMwNzkiOjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImU0Zjg2MDFhOGE2ZGExYmUzNDQ0N2MwOTU5YzA1ODU3MGMzNjY4Y2ZkNTFkZDVmOWNjZDZhZDQ0MTFmZTgyMTM0ODZkNzhhNmM0OWY5M2VmYzJjYTIyODhjZWJjMmI5YjYwYmQwNGIxZTIyMGQ4NmUzZDQ4NDhkNzA5ZDAzMmQxZThjNmEwNzBjNmFmOWE0OTlmY2Y5NTM1NGIxNGJhNjEyN2M3MzlkZTFiYjBmZDE2NDMxZTQ2OTM4YWVjMGNmOGFkOWViNzJlODMyYTcwMzVkZTliNzgwN2JkYzBlZDhiNjhlYjBmNWFjMjIxNmJlNDBjZTkyMGMwZGIwZWRkZDM4NjBlZDc4OGVmYWNjYWNhNTAyZDhmMmJkNmQxYTdjMWY0MWZmNDZmMTY4MWM4ZjFmODE4ZTljNGY2ZDkxYTBjNzgwM2NjYzYzZDc2YTY1NDRkODQzZTA4NGUzNjNiOGFjYzU1YWE1MzE3MzNlZGI1ZGVlNWI1MTk2ZTlmMDNlOGI3MzFiMzc3NjQyOGQ5ZTQ1N2ZlM2ZiY2IzZGI3Mjc0NDQyZDc4NTg5MGU5Y2IwODU0YjY0NDRkYWNlNzkxZDcyNzNkZTE4ODk3MTkzMzhhNzdmZSI6IjdmNmRkMzU5ZTYwNGU2MDg3MGU4OThlNDdiMTliZjJlNWE3YjJhOTAiOiIwMTA5OTE2NTZjY2ExODJiN2YyOWQyZGJjMDA3ZTdhZTBmZWMxNThlYjY3NTljYjljNDVjNWZmODdjNzYzNWRkNDZkMTUwODgyZjRkZTFlOWFlNjVlN2Y3ZDkwMThmNjgzNjk1NGE0N2MwYTgxYThhNmI2ZjgzZjI5NDRkNjA4MWIxYWE3Yzc1OWIyNTRiMmMzNGI2OTFkYTY3Y2MwMjI2ZTIwYjJmMThiNDIyMTI3NjFkY2Q0YjkwOGE2MmIzNzFiNTkxOGM1NzQyYWY0YjUzN2UyOTY5MTc2NzRmYjkxNDE5NDc2MTYyMWNjMTlhNDFmNmZiOTUzZmJjYmI2NDlkZWEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAyXzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjU6MTY6IjAxZDQwYzFiY2Y5N2E2OGFlN2NkYmQ4YTdiZjNlMzRmYTE5ZGNjYTRlZjc1YTQ3NDU0Mzc1Zjk0NTE0ZDg4ZmVkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjN2M3YThiNDc3ZGNlODI5ZTg4NDRmNjI1YjExNWU1ZTljNGE1OWNmOGY4MTEzYjY4MzQzMzZhMmZkMjY4OWI0NzJjYmI1ZTVjYWJlNjc0MzUwYzU5YjZjMTdlMTc2ODc0ZmI0MmY4ZmMzZDE3NmEwMTdlZGM2MWZkMzI2YzRiMzNjOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZTRmODYwMWE4YTZkYTFiZTM0NDQ3YzA5NTljMDU4NTcwYzM2NjhjZmQ1MWRkNWY5Y2NkNmFkNDQxMWZlODIxMzQ4NmQ3OGE2YzQ5ZjkzZWZjMmNhMjI4OGNlYmMyYjliNjBiZDA0YjFlMjIwZDg2ZTNkNDg0OGQ3MDlkMDMyZDFlOGM2YTA3MGM2YWY5YTQ5OWZjZjk1MzU0YjE0YmE2MTI3YzczOWRlMWJiMGZkMTY0MzFlNDY5MzhhZWMwY2Y4YWQ5ZWI3MmU4MzJhNzAzNWRlOWI3ODA3YmRjMGVkOGI2OGViMGY1YWMyMjE2YmU0MGNlOTIwYzBkYjBlZGRkMzg2MGVkNzg4ZWZhY2NhY2E1MDJkOGYyYmQ2ZDFhN2MxZjQxZmY0NmYxNjgxYzhmMWY4MThlOWM0ZjZkOTFhMGM3ODAzY2NjNjNkNzZhNjU0NGQ4NDNlMDg0ZTM2M2I4YWNjNTVhYTUzMTczM2VkYjVkZWU1YjUxOTZlOWYwM2U4YjczMWIzNzc2NDI4ZDllNDU3ZmUzZmJjYjNkYjcyNzQ0NDJkNzg1ODkwZTljYjA4NTRiNjQ0NGRhY2U3OTFkNzI3M2RlMTg4OTcxOTMzOGE3N2ZlIjoiN2Y2ZGQzNTllNjA0ZTYwODcwZTg5OGU0N2IxOWJmMmU1YTdiMmE5MCI6IjAxMDk5MTY1NmNjYTE4MmI3ZjI5ZDJkYmMwMDdlN2FlMGZlYzE1OGViNjc1OWNiOWM0NWM1ZmY4N2M3NjM1ZGQ0NmQxNTA4ODJmNGRlMWU5YWU2NWU3ZjdkOTAxOGY2ODM2OTU0YTQ3YzBhODFhOGE2YjZmODNmMjk0NGQ2MDgxYjFhYTdjNzU5YjI1NGIyYzM0YjY5MWRhNjdjYzAyMjZlMjBiMmYxOGI0MjIxMjc2MWRjZDRiOTA4YTYyYjM3MWI1OTE4YzU3NDJhZjRiNTM3ZTI5NjkxNzY3NGZiOTE0MTk0NzYxNjIxY2MxOWE0MWY2ZmI5NTNmYmNiYjY0OWRlYSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjU6MTY6IjAxNjYwMWU5MjZhMGY4YzllMjZlY2FiNzY5ZWE2NWE1ZTdjNTJjYzllMDgwZWY1MTk0NTdjNjQ0ZGE2ODkxYzVhMTA0ZDNlYTc5NTU5MjlhMjJlN2M2OGE3YWY5ZmNhZDc3N2MzY2NjMmI5ZTNkMzY1MGJjZTQwNDM5OWI3ZTU5ZDEiOjE2OiIwMTRlYWZhMWQ0ZDAxODRkYTdlMzFmODc3ZDEyODFkZGRhNjI1NjY0ODY5ZTgzNzllNjdhZDNiNzVlYWU3NGE1ODBlOTgyN2FiZDZlYjdhMDAyY2I1NDExZjUyNjY3OTc3NjhmYjhlOTVhZTQwZTNlOGEwMWYzNWZmODllNTZjMDc5IjoxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI1MmExZDk2YzhhYzM5ZTQxZTQ1NTgwOTgwMWI5MjdhNWI0NDVjMTBkOTAyYTBkY2QzODUwZDIyYTY2ZDJiYjA3MDNlNjdkNTg2NzExNDU5NWFhYmY1YTdhZWI1YThmODcwMzRiYmIzMGUxM2NmZDQ4MTdhOWJlNzYyMzAwMjM2MDZkMDI4NmEzZmFmOGE0ZDIyYjcyOGVjNTE4MDc5ZjllNjQ1MjZlM2EwY2M3OTQxYWEzMzhjNDM3OTk3YzY4MGNjYWM2N2M2NmJmYTEiOiJmY2E4NjIwNjhiY2UyMjQ2NzI0YjcwOGEwNTE5ZGExN2U2NDg2ODhjIjoiMDA3ZjAwMzAwMThmNTNjZGM3MWYyM2QwMzY1OWZkZTU0ZDQyNDFmNzU4YTc1MGI0MmYxODVmODc1Nzg1MjBjMzA3NDJhZmQ4NDM1OWI2ZTZlOGQzZWQ5NTlkYzZmZTQ4NmJlZGM4ZTJjZjAwMWY2M2E3YWJlMTYyNTZhMWI4NGRmMGQyNDlmYzA1ZDMxOTRjZTVmMDkxMjc0MmRiYmY4MGRkMTc0ZjZjNTFmNmJhZDdmMTZjZjMzNjRlYmEwOTVhMDYyNjdkYzM3OTM4MDNhYzc1MjZhZWJlMGE0NzVkMzhiOGMyMjQ3YWI1MWM0ODk4ZGY3MDQ3ZGM2YWRmNTJjNmM0IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl8zICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI1OjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjUyYTFkOTZjOGFjMzllNDFlNDU1ODA5ODAxYjkyN2E1YjQ0NWMxMGQ5MDJhMGRjZDM4NTBkMjJhNjZkMmJiMDcwM2U2N2Q1ODY3MTE0NTk1YWFiZjVhN2FlYjVhOGY4NzAzNGJiYjMwZTEzY2ZkNDgxN2E5YmU3NjIzMDAyMzYwNmQwMjg2YTNmYWY4YTRkMjJiNzI4ZWM1MTgwNzlmOWU2NDUyNmUzYTBjYzc5NDFhYTMzOGM0Mzc5OTdjNjgwY2NhYzY3YzY2YmZhMSI6ImZjYTg2MjA2OGJjZTIyNDY3MjRiNzA4YTA1MTlkYTE3ZTY0ODY4OGMiOiIwMDdmMDAzMDAxOGY1M2NkYzcxZjIzZDAzNjU5ZmRlNTRkNDI0MWY3NThhNzUwYjQyZjE4NWY4NzU3ODUyMGMzMDc0MmFmZDg0MzU5YjZlNmU4ZDNlZDk1OWRjNmZlNDg2YmVkYzhlMmNmMDAxZjYzYTdhYmUxNjI1NmExYjg0ZGYwZDI0OWZjMDVkMzE5NGNlNWYwOTEyNzQyZGJiZjgwZGQxNzRmNmM1MWY2YmFkN2YxNmNmMzM2NGViYTA5NWEwNjI2N2RjMzc5MzgwM2FjNzUyNmFlYmUwYTQ3NWQzOGI4YzIyNDdhYjUxYzQ4OThkZjcwNDdkYzZhZGY1MmM2YzQiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAyXzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI1OjE2OiIwMTY2MDFlOTI2YTBmOGM5ZTI2ZWNhYjc2OWVhNjVhNWU3YzUyY2M5ZTA4MGVmNTE5NDU3YzY0NGRhNjg5MWM1YTEwNGQzZWE3OTU1OTI5YTIyZTdjNjhhN2FmOWZjYWQ3NzdjM2NjYzJiOWUzZDM2NTBiY2U0MDQzOTliN2U1OWQxIjoxNjoiMDE0ZWFmYTFkNGQwMTg0ZGE3ZTMxZjg3N2QxMjgxZGRkYTYyNTY2NDg2OWU4Mzc5ZTY3YWQzYjc1ZWFlNzRhNTgwZTk4MjdhYmQ2ZWI3YTAwMmNiNTQxMWY1MjY2Nzk3NzY4ZmI4ZTk1YWU0MGUzZThhMDFmMzVmZjg5ZTU2YzA3OSI6MTY6IjAxZDQwYzFiY2Y5N2E2OGFlN2NkYmQ4YTdiZjNlMzRmYTE5ZGNjYTRlZjc1YTQ3NDU0Mzc1Zjk0NTE0ZDg4ZmVkMDA2ZmI4MjlmODQxOWZmODdkNjMxNWRhNjhhMWZmM2EwOTM4ZTlhYmIzNDY0MDExYzMwM2FkOTkxOTljZjBjN2M3YThiNDc3ZGNlODI5ZTg4NDRmNjI1YjExNWU1ZTljNGE1OWNmOGY4MTEzYjY4MzQzMzZhMmZkMjY4OWI0NzJjYmI1ZTVjYWJlNjc0MzUwYzU5YjZjMTdlMTc2ODc0ZmI0MmY4ZmMzZDE3NmEwMTdlZGM2MWZkMzI2YzRiMzNjOSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYTcxODJjODNhYzE4YmU2NTcwYTEwNmFhOWQ1YzRlM2RiYmQ0YWZhZWIwYzYwYzRhMjNlMTk2OWQ3OWZmIjoiODA3MGVmMmRlOTQ1YzAyMzg3Njg0YmEwZDMzMDk2NzMyMjM1ZDQ0MCI6IjAwOWNkMmY0ZWRiZTIzZTEyMzQ2YWU4Yzc2ZGQ5YWQzMjMwYTYyMDc2MTQxZjE2YzE1MmJhMTg1MTNhNDhlZjZmMDEwZTBlMzdmZDNkZjEwYTFlYzYyOWEwY2I1YTNiNWQyODkzMDA3Mjk4YzMwOTM2YTk1OTAzYjZiYTg1NTU1ZDllYzM2NzNhMDYxMDhmZDYyYTJmZGE1NmQxY2UyZTg1YzRkYjZiMjRhODFjYTNiNDk2YzM2ZDRmZDA2ZWI3YzkxNjZkOGU5NDg3N2M0MmJlYTYyMmIzYmZlOTI1MWZkYzIxZDhkNTM3MWJhZGFkNzhhNDg4MjE0Nzk2MzM1YjQwYiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDJfNCAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNToxNjoiMDFkNDBjMWJjZjk3YTY4YWU3Y2RiZDhhN2JmM2UzNGZhMTlkY2NhNGVmNzVhNDc0NTQzNzVmOTQ1MTRkODhmZWQwMDZmYjgyOWY4NDE5ZmY4N2Q2MzE1ZGE2OGExZmYzYTA5MzhlOWFiYjM0NjQwMTFjMzAzYWQ5OTE5OWNmMGM3YzdhOGI0NzdkY2U4MjllODg0NGY2MjViMTE1ZTVlOWM0YTU5Y2Y4ZjgxMTNiNjgzNDMzNmEyZmQyNjg5YjQ3MmNiYjVlNWNhYmU2NzQzNTBjNTliNmMxN2UxNzY4NzRmYjQyZjhmYzNkMTc2YTAxN2VkYzYxZmQzMjZjNGIzM2M5IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJhNzE4MmM4M2FjMThiZTY1NzBhMTA2YWE5ZDVjNGUzZGJiZDRhZmFlYjBjNjBjNGEyM2UxOTY5ZDc5ZmYiOiI4MDcwZWYyZGU5NDVjMDIzODc2ODRiYTBkMzMwOTY3MzIyMzVkNDQwIjoiMDA5Y2QyZjRlZGJlMjNlMTIzNDZhZThjNzZkZDlhZDMyMzBhNjIwNzYxNDFmMTZjMTUyYmExODUxM2E0OGVmNmYwMTBlMGUzN2ZkM2RmMTBhMWVjNjI5YTBjYjVhM2I1ZDI4OTMwMDcyOThjMzA5MzZhOTU5MDNiNmJhODU1NTVkOWVjMzY3M2EwNjEwOGZkNjJhMmZkYTU2ZDFjZTJlODVjNGRiNmIyNGE4MWNhM2I0OTZjMzZkNGZkMDZlYjdjOTE2NmQ4ZTk0ODc3YzQyYmVhNjIyYjNiZmU5MjUxZmRjMjFkOGQ1MzcxYmFkYWQ3OGE0ODgyMTQ3OTYzMzViNDBiIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl81Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNToxNjoiMDE2NjAxZTkyNmEwZjhjOWUyNmVjYWI3NjllYTY1YTVlN2M1MmNjOWUwODBlZjUxOTQ1N2M2NDRkYTY4OTFjNWExMDRkM2VhNzk1NTkyOWEyMmU3YzY4YTdhZjlmY2FkNzc3YzNjY2MyYjllM2QzNjUwYmNlNDA0Mzk5YjdlNTlkMSI6MTY6IjAxNGVhZmExZDRkMDE4NGRhN2UzMWY4NzdkMTI4MWRkZGE2MjU2NjQ4NjllODM3OWU2N2FkM2I3NWVhZTc0YTU4MGU5ODI3YWJkNmViN2EwMDJjYjU0MTFmNTI2Njc5Nzc2OGZiOGU5NWFlNDBlM2U4YTAxZjM1ZmY4OWU1NmMwNzkiOjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg2YTgzZDRhNzJlZTkzMmE0ZjU2MzBhZjY1NzlhMzg2Yjc4ZmU4ODk5OWUwYWJkMmQ0OTAzNGE0YmZjODU0ZGQ5NGYxMDk0ZTJlOGNkN2ExNzlkMTk1ODhlNGFlZmMxYjFiZDI1ZTk1ZTNkZDQ2MWYiOiIxNzYzOWE0ZTg4ZDcyMmM0ZmNhMjRkMDc5YThiMjljMzI0MzNiMGM5IjoiMDBlYzQzMDgyNDkzMWViZDNiYWE0MzAzNGRhZTk4YmE2NDZiOGMzNjAxM2QxNjcxYzNjZjFjZjgyNjBjMzc0YjE5ZjhlMWNjOGQ5NjUwMTI0MDVlN2U5YmY3Mzc4NjEyZGZjYzg1ZmNlMTJjZGExMWY5NTBiZDBiYTg4NzY3NDA0MzZjMWQyNTk1YTY0YTFiMzJlZmNmYjc0YTIxYzg3M2IzY2MzM2FhZjRlM2RjMzk1M2RlNjdmMDY3NGMwNDUzYjRmZDlmNjA0NDA2ZDQ0MWI4MTYwOThjYjEwNmZlMzQ3MmJjMjUxZjgxNWY1OWRiMmU0Mzc4YTNhZGRjMTgxZWNmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl81ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI1OjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg2YTgzZDRhNzJlZTkzMmE0ZjU2MzBhZjY1NzlhMzg2Yjc4ZmU4ODk5OWUwYWJkMmQ0OTAzNGE0YmZjODU0ZGQ5NGYxMDk0ZTJlOGNkN2ExNzlkMTk1ODhlNGFlZmMxYjFiZDI1ZTk1ZTNkZDQ2MWYiOiIxNzYzOWE0ZTg4ZDcyMmM0ZmNhMjRkMDc5YThiMjljMzI0MzNiMGM5IjoiMDBlYzQzMDgyNDkzMWViZDNiYWE0MzAzNGRhZTk4YmE2NDZiOGMzNjAxM2QxNjcxYzNjZjFjZjgyNjBjMzc0YjE5ZjhlMWNjOGQ5NjUwMTI0MDVlN2U5YmY3Mzc4NjEyZGZjYzg1ZmNlMTJjZGExMWY5NTBiZDBiYTg4NzY3NDA0MzZjMWQyNTk1YTY0YTFiMzJlZmNmYjc0YTIxYzg3M2IzY2MzM2FhZjRlM2RjMzk1M2RlNjdmMDY3NGMwNDUzYjRmZDlmNjA0NDA2ZDQ0MWI4MTYwOThjYjEwNmZlMzQ3MmJjMjUxZjgxNWY1OWRiMmU0Mzc4YTNhZGRjMTgxZWNmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl82Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNToxNjoiMDE2NjAxZTkyNmEwZjhjOWUyNmVjYWI3NjllYTY1YTVlN2M1MmNjOWUwODBlZjUxOTQ1N2M2NDRkYTY4OTFjNWExMDRkM2VhNzk1NTkyOWEyMmU3YzY4YTdhZjlmY2FkNzc3YzNjY2MyYjllM2QzNjUwYmNlNDA0Mzk5YjdlNTlkMSI6MTY6IjAxNGVhZmExZDRkMDE4NGRhN2UzMWY4NzdkMTI4MWRkZGE2MjU2NjQ4NjllODM3OWU2N2FkM2I3NWVhZTc0YTU4MGU5ODI3YWJkNmViN2EwMDJjYjU0MTFmNTI2Njc5Nzc2OGZiOGU5NWFlNDBlM2U4YTAxZjM1ZmY4OWU1NmMwNzkiOjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjA0OWY5MTU0ZDg3MWFjNGE3YzdhYjQ1MzI1YmE3NTQ1YTFlZDA4ZjcwNTI1YjI2NjdjZjEiOiIzNzgxMGRlZjEwNTVlZDkyMmIwNjNkZjc5OGRlNWQwYWFiZjg4NmVlIjoiMDA0NzViMTY0OGY4MTRhOGRjMGFiZGMzN2I1NTI3ZjU0M2I2NjZiYjZlMzlkMzBlNWI0OWQzYjg3NmRjY2M1OGVhYzE0ZTMyYTJkNTVjMjYxNjAxNDQ1NmFkMmYyNDZmYzhlM2Q1NjBkYTNkZGYzNzlhMWMwYmQyMDBmMTAyMjFkZjA3OGMyMTlhMTUxYmM4ZDRlYzlkMmZjMjU2NDQ2NzgxMTAxNGVmMTVkOGVhMDFjMmViYmZmOGMyYzhlZmFiMzgwOTZlNTVmY2JlMzI4NWM3YWE1NTg4NTEyNTRmYWZmYTkyYzFjNzJiNzg3NTg2NjNlZjQ1ODI4NDMxMzlkN2E2IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMl82ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI1OjE2OiIwMWQ0MGMxYmNmOTdhNjhhZTdjZGJkOGE3YmYzZTM0ZmExOWRjY2E0ZWY3NWE0NzQ1NDM3NWY5NDUxNGQ4OGZlZDAwNmZiODI5Zjg0MTlmZjg3ZDYzMTVkYTY4YTFmZjNhMDkzOGU5YWJiMzQ2NDAxMWMzMDNhZDk5MTk5Y2YwYzdjN2E4YjQ3N2RjZTgyOWU4ODQ0ZjYyNWIxMTVlNWU5YzRhNTljZjhmODExM2I2ODM0MzM2YTJmZDI2ODliNDcyY2JiNWU1Y2FiZTY3NDM1MGM1OWI2YzE3ZTE3Njg3NGZiNDJmOGZjM2QxNzZhMDE3ZWRjNjFmZDMyNmM0YjMzYzkiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjA0OWY5MTU0ZDg3MWFjNGE3YzdhYjQ1MzI1YmE3NTQ1YTFlZDA4ZjcwNTI1YjI2NjdjZjEiOiIzNzgxMGRlZjEwNTVlZDkyMmIwNjNkZjc5OGRlNWQwYWFiZjg4NmVlIjoiMDA0NzViMTY0OGY4MTRhOGRjMGFiZGMzN2I1NTI3ZjU0M2I2NjZiYjZlMzlkMzBlNWI0OWQzYjg3NmRjY2M1OGVhYzE0ZTMyYTJkNTVjMjYxNjAxNDQ1NmFkMmYyNDZmYzhlM2Q1NjBkYTNkZGYzNzlhMWMwYmQyMDBmMTAyMjFkZjA3OGMyMTlhMTUxYmM4ZDRlYzlkMmZjMjU2NDQ2NzgxMTAxNGVmMTVkOGVhMDFjMmViYmZmOGMyYzhlZmFiMzgwOTZlNTVmY2JlMzI4NWM3YWE1NTg4NTEyNTRmYWZmYTkyYzFjNzJiNzg3NTg2NjNlZjQ1ODI4NDMxMzlkN2E2IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgM18xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNjoxNjoiMDFiZDM2ZTE4ZWNlNGIwZmRiMmU5YzlkNTQ4YmQxYTdkNmUyYzIxYzZmZGMzNTA3NGExZDA1YjFjNmM4YjNkNTU4ZWEyNjM5YzlhOWE0MjE2ODAxNjkzMTcyNTI1NThiZDE0OGFkMjE1YWFjNTUwZTJkY2YxMmE4MmQwZWJmZTg1MyI6MTY6IjAxYjFiNjU2YWQ4NmQ4ZTE5ZDVkYzg2MjkyYjNhMTkyZmRmNmUwZGQzNzg3N2JhZDE0ODIyZmEwMDE5MGNhYjI2NWY5MGQzZjAyMDU3YjZmNTRkNmVjYjE0NDkxZTVhZGVhY2ViYzQ4YmYwZWJkMmEyYWQyNmQ0MDJlNTRmNjE2NTEiOjE2OiIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3NGUyODBkYTIxZmVkZWQxYWU3NDg4MGNhNTIyYjE4ZGIyNDkzODUwMTI4MjdjNTE1ZjBlNDY2YTFmZmE2OTFkOTgxNzA1NzRlOWQwZWFkYjA4NzU4NmNhNDg5MzNkYTNjYzk1M2Q5NWJkMGVkNTBkZTEwZGRjYjY3MzYxMDdkNmM4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0NDMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjU5NGIzNzMzM2JiYjJjODQ1MjRhODdjMWEwMWY3NWZjZWMwZTMyNTZmMTA4ZTM4ZGNhMzZkNzBkMDA1NyI6ImYzMWFkNmM4Y2Y4OWRmNzhlZDc3ZmVhY2JjYzJmOGIwYThlNGNmYWEiOiIwMDg4YjEzNWZiMTc5NGI2Yjk2YzRhM2U2NzgxOTdmOGNhYzUyYjY0YjJmZTkwN2Q2ZjI3ZGU3NjExMjQ5NjRhOTlhMDFhODgyNzQwZWNmYWVkNmMwMWE0NzQ2NGJiMDUxODIzMTNjMDEzMzhhOGNkMDk3MjE0Y2Q2OGNhMTAzYmQ1N2QzYmM5ZTgxNjIxM2U2MWQ3ODRmMTgyNDY3YWJmOGEwMWNmMjUzZTk5YTE1NmVhYThlM2UxZjkwZTNjNmU0ZTNhYTJkODNlZDAzNDViODlmYWZjOWMyNjA3N2MxNGI2YWM1MTQ1NGZhMjZlNDQ2ZTNhMmYxNTNiMmIxNjc5N2YiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjY6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNTk0YjM3MzMzYmJiMmM4NDUyNGE4N2MxYTAxZjc1ZmNlYzBlMzI1NmYxMDhlMzhkY2EzNmQ3MGQwMDU3IjoiZjMxYWQ2YzhjZjg5ZGY3OGVkNzdmZWFjYmNjMmY4YjBhOGU0Y2ZhYSI6IjAwODhiMTM1ZmIxNzk0YjZiOTZjNGEzZTY3ODE5N2Y4Y2FjNTJiNjRiMmZlOTA3ZDZmMjdkZTc2MTEyNDk2NGE5OWEwMWE4ODI3NDBlY2ZhZWQ2YzAxYTQ3NDY0YmIwNTE4MjMxM2MwMTMzOGE4Y2QwOTcyMTRjZDY4Y2ExMDNiZDU3ZDNiYzllODE2MjEzZTYxZDc4NGYxODI0NjdhYmY4YTAxY2YyNTNlOTlhMTU2ZWFhOGUzZTFmOTBlM2M2ZTRlM2FhMmQ4M2VkMDM0NWI4OWZhZmM5YzI2MDc3YzE0YjZhYzUxNDU0ZmEyNmU0NDZlM2EyZjE1M2IyYjE2Nzk3ZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjY6MTY6IjAxYmQzNmUxOGVjZTRiMGZkYjJlOWM5ZDU0OGJkMWE3ZDZlMmMyMWM2ZmRjMzUwNzRhMWQwNWIxYzZjOGIzZDU1OGVhMjYzOWM5YTlhNDIxNjgwMTY5MzE3MjUyNTU4YmQxNDhhZDIxNWFhYzU1MGUyZGNmMTJhODJkMGViZmU4NTMiOjE2OiIwMWIxYjY1NmFkODZkOGUxOWQ1ZGM4NjI5MmIzYTE5MmZkZjZlMGRkMzc4NzdiYWQxNDgyMmZhMDAxOTBjYWIyNjVmOTBkM2YwMjA1N2I2ZjU0ZDZlY2IxNDQ5MWU1YWRlYWNlYmM0OGJmMGViZDJhMmFkMjZkNDAyZTU0ZjYxNjUxIjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4Yjc2OTUyODg4NGEwZDFmZmQwOTBjZjEwMjk5M2U3OTZkYWRjZmJkZGQzOGU0NGZmNjMyNGNhNDUxIjoiZmNmOWYwZTFmMTk5YTNkMWQwZGE2ODFjNWI4NjA2ZmM2NDI5MzlmNyI6IjAyYTVmMGE4NThhMDg2NGE0ZjY1MDE3YTdkNjk0NTRmM2Y5NzNhMjk5OTgzOWI3YmJjNDhiZjc4NjQxMTY5MTc5NTU2ZjU5NWZhNDFmNmZmMThlMjg2YzI3ODMwNzliYzA5MTBlZTljYzM0ZjQ5YmE2ODExMjRmOTIzZGZhODhmNDI2MTQxYTM2OGE1ZjVhOTMwYzYyOGMyYzNjMjAwZTE4YTc2NDQ3MjFhMGNiZWM2ZGQzZjYyNzliZGUzZThmMmJlNWUyZDRlZTU2Zjk3ZTdjZWFmMzMwNTRiZTcwNDJiZDkxYTYzYmIwOWY4OTdiZDQxZTgxMTk3ZGVlOTliMTFhZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4Yjc2OTUyODg4NGEwZDFmZmQwOTBjZjEwMjk5M2U3OTZkYWRjZmJkZGQzOGU0NGZmNjMyNGNhNDUxIjoiZmNmOWYwZTFmMTk5YTNkMWQwZGE2ODFjNWI4NjA2ZmM2NDI5MzlmNyI6IjAyYTVmMGE4NThhMDg2NGE0ZjY1MDE3YTdkNjk0NTRmM2Y5NzNhMjk5OTgzOWI3YmJjNDhiZjc4NjQxMTY5MTc5NTU2ZjU5NWZhNDFmNmZmMThlMjg2YzI3ODMwNzliYzA5MTBlZTljYzM0ZjQ5YmE2ODExMjRmOTIzZGZhODhmNDI2MTQxYTM2OGE1ZjVhOTMwYzYyOGMyYzNjMjAwZTE4YTc2NDQ3MjFhMGNiZWM2ZGQzZjYyNzliZGUzZThmMmJlNWUyZDRlZTU2Zjk3ZTdjZWFmMzMwNTRiZTcwNDJiZDkxYTYzYmIwOWY4OTdiZDQxZTgxMTk3ZGVlOTliMTFhZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjY6MTY6IjAxYmQzNmUxOGVjZTRiMGZkYjJlOWM5ZDU0OGJkMWE3ZDZlMmMyMWM2ZmRjMzUwNzRhMWQwNWIxYzZjOGIzZDU1OGVhMjYzOWM5YTlhNDIxNjgwMTY5MzE3MjUyNTU4YmQxNDhhZDIxNWFhYzU1MGUyZGNmMTJhODJkMGViZmU4NTMiOjE2OiIwMWIxYjY1NmFkODZkOGUxOWQ1ZGM4NjI5MmIzYTE5MmZkZjZlMGRkMzc4NzdiYWQxNDgyMmZhMDAxOTBjYWIyNjVmOTBkM2YwMjA1N2I2ZjU0ZDZlY2IxNDQ5MWU1YWRlYWNlYmM0OGJmMGViZDJhMmFkMjZkNDAyZTU0ZjYxNjUxIjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxYWJkYmE0ODljNWFkYTJmOTk1ZWQxNmYxOWQ1YTk0ZDllNmVjMzRhOGQ4NGY4NDU1N2QyNmU1ZWY5YjAyYjIyODg3ZTNmOWE0YjY5MGFkMTE0OTIwOWMyMGM2MTQzMWYwYzAxN2MzNmMyNjU3YjM1ZDdiMDdkM2Y1YWQ4NzA4NTA3YTljMWI4MzFkZjgzNWE1NmY4MzEwNzE4MTRlYTVkM2Q4ZDhmNmFkZTQwY2JhMzhiNDJkYjdhMmQzZDdhMjljOGYwYTc5YTc4MzhjZjU4YTk3NTdmYTJmZTRjNDBkZjliYWExOTNiZmM2ZjkyYjEyM2FkNTdiMDdhY2UzZTZhYzA2OGM5ZjEwNmFmZDllZWIwM2I0ZjM3YzI1ZGJmYmNmYjMwNzFmNmY5NzcxNzY2ZDA3MmYzYmIwNzBhZjY2MDU1MzI5NzNhZTI1MDUxIjoiOTg2ZTdjNDNkYmI2NzFiZDQxYjlhN2Y0YjZhZmM4MGU4MDVmMjQyMyI6IjAyNDRiY2QxYzhjMTY5NTU3MzZjODAzYmU0MDEyNzJlMThjYjk5MDgxMWIxNGY3MmRiOTY0MTI0ZDVmYTc2MDY0OWNiYjU3YWZiODc1NWRiYjYyYmY1MWY0NjZjZjIzYTBhMTYwNzU3NmU5ODNkNzc4ZmNlZmZhOTJkZjc1NDhhZWE4ZWE0ZWNhZDJjMjlkZDlmOTViYzA3ZmU5MWVjZjhiZWUyNTViZmU4NzYyZmQ3NjkwYWE5YmZhNGZhMDg0OWVmNzI4YzJjNDJjNDUzMjM2NDUyMmRmMmFiN2Y5ZjhhMDNiNjNmN2E0OTkxNzU4Mjg2NjhmNWVmNWEyOWUzODAyYyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxYWJkYmE0ODljNWFkYTJmOTk1ZWQxNmYxOWQ1YTk0ZDllNmVjMzRhOGQ4NGY4NDU1N2QyNmU1ZWY5YjAyYjIyODg3ZTNmOWE0YjY5MGFkMTE0OTIwOWMyMGM2MTQzMWYwYzAxN2MzNmMyNjU3YjM1ZDdiMDdkM2Y1YWQ4NzA4NTA3YTljMWI4MzFkZjgzNWE1NmY4MzEwNzE4MTRlYTVkM2Q4ZDhmNmFkZTQwY2JhMzhiNDJkYjdhMmQzZDdhMjljOGYwYTc5YTc4MzhjZjU4YTk3NTdmYTJmZTRjNDBkZjliYWExOTNiZmM2ZjkyYjEyM2FkNTdiMDdhY2UzZTZhYzA2OGM5ZjEwNmFmZDllZWIwM2I0ZjM3YzI1ZGJmYmNmYjMwNzFmNmY5NzcxNzY2ZDA3MmYzYmIwNzBhZjY2MDU1MzI5NzNhZTI1MDUxIjoiOTg2ZTdjNDNkYmI2NzFiZDQxYjlhN2Y0YjZhZmM4MGU4MDVmMjQyMyI6IjAyNDRiY2QxYzhjMTY5NTU3MzZjODAzYmU0MDEyNzJlMThjYjk5MDgxMWIxNGY3MmRiOTY0MTI0ZDVmYTc2MDY0OWNiYjU3YWZiODc1NWRiYjYyYmY1MWY0NjZjZjIzYTBhMTYwNzU3NmU5ODNkNzc4ZmNlZmZhOTJkZjc1NDhhZWE4ZWE0ZWNhZDJjMjlkZDlmOTViYzA3ZmU5MWVjZjhiZWUyNTViZmU4NzYyZmQ3NjkwYWE5YmZhNGZhMDg0OWVmNzI4YzJjNDJjNDUzMjM2NDUyMmRmMmFiN2Y5ZjhhMDNiNjNmN2E0OTkxNzU4Mjg2NjhmNWVmNWEyOWUzODAyYyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfNAorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjY6MTY6IjAxYmQzNmUxOGVjZTRiMGZkYjJlOWM5ZDU0OGJkMWE3ZDZlMmMyMWM2ZmRjMzUwNzRhMWQwNWIxYzZjOGIzZDU1OGVhMjYzOWM5YTlhNDIxNjgwMTY5MzE3MjUyNTU4YmQxNDhhZDIxNWFhYzU1MGUyZGNmMTJhODJkMGViZmU4NTMiOjE2OiIwMWIxYjY1NmFkODZkOGUxOWQ1ZGM4NjI5MmIzYTE5MmZkZjZlMGRkMzc4NzdiYWQxNDgyMmZhMDAxOTBjYWIyNjVmOTBkM2YwMjA1N2I2ZjU0ZDZlY2IxNDQ5MWU1YWRlYWNlYmM0OGJmMGViZDJhMmFkMjZkNDAyZTU0ZjYxNjUxIjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4ZmI0MzFmNWVlNzkyYjZjMmFjN2RiNTNjYzQyODY1NWFlYjMyZDAzZjRlODg5YzVjMjVkZTY4M2M0NjFiNTNhY2Y4OWY5ZjhkM2FhYmRmNmI5ZjBjMmExZGUxMmUxNWI0OWVkYjM5MTlhNjUyZmU5NDkxYzI1YTdmY2UxZjcyMmMyNTQzNjA4YjY5ZGMzNzVlYyI6ImY4MzEyZDljOGVlYTEzZWMwYTRjN2I5ODEyMGM4NzUwOTA4N2M0NzgiOiIwMTk2ZjEyYTAwNWI5ODEyOWM4ZGYxM2M0Y2IxNmY4YWE4ODdkM2M0MGQ5NmRmM2E4OGU3NTMyZWYzOWNkOTkyZjI3M2FiYzM3MGJjMWJlNmYwOTdjZmViYmYwMTE4ZmQ5ZWY0YjkyNzE1NWYzZGYyMmI5MDRkOTA3MDJkMWY3YmE3YTUyYmVkOGI4OTQyZjQxMmNkN2JkNjc2YzlkMThlMTcwMzkxZGNkMzQ1YzA2YTczMDk2NGIzZjMwYmNjZTBiYjIwYmExMDZmOWFiMGVlYjM5Y2Y4YTY2MDdmNzVjMDM0N2YwYWY3OWYxNmFmYTA4MWQyYzkyZDFlZTZmODM2YjgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzQgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjY6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOGZiNDMxZjVlZTc5MmI2YzJhYzdkYjUzY2M0Mjg2NTVhZWIzMmQwM2Y0ZTg4OWM1YzI1ZGU2ODNjNDYxYjUzYWNmODlmOWY4ZDNhYWJkZjZiOWYwYzJhMWRlMTJlMTViNDllZGIzOTE5YTY1MmZlOTQ5MWMyNWE3ZmNlMWY3MjJjMjU0MzYwOGI2OWRjMzc1ZWMiOiJmODMxMmQ5YzhlZWExM2VjMGE0YzdiOTgxMjBjODc1MDkwODdjNDc4IjoiMDE5NmYxMmEwMDViOTgxMjljOGRmMTNjNGNiMTZmOGFhODg3ZDNjNDBkOTZkZjNhODhlNzUzMmVmMzljZDk5MmYyNzNhYmMzNzBiYzFiZTZmMDk3Y2ZlYmJmMDExOGZkOWVmNGI5MjcxNTVmM2RmMjJiOTA0ZDkwNzAyZDFmN2JhN2E1MmJlZDhiODk0MmY0MTJjZDdiZDY3NmM5ZDE4ZTE3MDM5MWRjZDM0NWMwNmE3MzA5NjRiM2YzMGJjY2UwYmIyMGJhMTA2ZjlhYjBlZWIzOWNmOGE2NjA3Zjc1YzAzNDdmMGFmNzlmMTZhZmEwODFkMmM5MmQxZWU2ZjgzNmI4IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgM181Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNjoxNjoiMDFiZDM2ZTE4ZWNlNGIwZmRiMmU5YzlkNTQ4YmQxYTdkNmUyYzIxYzZmZGMzNTA3NGExZDA1YjFjNmM4YjNkNTU4ZWEyNjM5YzlhOWE0MjE2ODAxNjkzMTcyNTI1NThiZDE0OGFkMjE1YWFjNTUwZTJkY2YxMmE4MmQwZWJmZTg1MyI6MTY6IjAxYjFiNjU2YWQ4NmQ4ZTE5ZDVkYzg2MjkyYjNhMTkyZmRmNmUwZGQzNzg3N2JhZDE0ODIyZmEwMDE5MGNhYjI2NWY5MGQzZjAyMDU3YjZmNTRkNmVjYjE0NDkxZTVhZGVhY2ViYzQ4YmYwZWJkMmEyYWQyNmQ0MDJlNTRmNjE2NTEiOjE2OiIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3NGUyODBkYTIxZmVkZWQxYWU3NDg4MGNhNTIyYjE4ZGIyNDkzODUwMTI4MjdjNTE1ZjBlNDY2YTFmZmE2OTFkOTgxNzA1NzRlOWQwZWFkYjA4NzU4NmNhNDg5MzNkYTNjYzk1M2Q5NWJkMGVkNTBkZTEwZGRjYjY3MzYxMDdkNmM4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0NDMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImZlZjQxNjFkZmFhZjljNTI5NTA1MWRmYzFmZjM4MTBjOGM5ZWMyZTg2NmY3MDc1NDIyYzhlYzQyMTZhOWM0ZmY0OTQyN2Q0ODNjYWUxMGM4NTM0YTQxYjJmZDE1ZmVlMDY5NjBlYzZmYjNmN2E3ZTk0YTJmOGEyZTNlNDNkYzRhNDA1NzZjMzA5N2FjOTUzYjFkZTg2ZjBiNGVkMzZkNjQ0ZjIzYWUxNDQyNTUyOTYyMjQ2NGNhMGNiZjBiMTc0MTM0NzIzODE1N2ZhYjU5ZTRkZTU1MjQwOTZkNjJiYWVjNjNhYzY0IjoiNTAzMjdlZmVjNjI5MmY5ODAxOWZjNjdhMmE2NjM4NTYzZTliNmUyZCI6IjAyMWVjYTNhYjQ4OTIyNjRlYzIyNDExYTc1MmQ5MjIyMTA3NmQ0ZTAxYzBlNmYwZGRlOWFmZDI2YmE1YWNmNmQ3MzllZjk4NzU0NWQxNjY4M2U1Njc0YzllNzBmMWRlNjQ5ZDdlNjFkNDhkMGNhZWI0ZmI0ZDhiMjRmYmE4NGE2ZTMxMDhmZWU3ZDA3MDU5NzMyNjZhYzUyNGI0YWQyODBmN2FlMTdkYzU5ZDk2ZDMzNTE1ODZiNWEzYmRiODk1ZDFlMWY3ODIwYWM2MTM1ZDg3NTM0ODA5OTgzODJiYTMyYjczNDk1NTk2MDhjMzg3NDUyOTBhODVlZjRlOWY5YmQ4MyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDNfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNjoxNjoiMDJmMjQ2ZWY0NTFlZDNlZWJiOWEzMTAyMDBjYzI1ODU5YzA0OGU0YmU3OTgzMDI5OTExMTJlYjY4Y2U2ZGI2NzRlMjgwZGEyMWZlZGVkMWFlNzQ4ODBjYTUyMmIxOGRiMjQ5Mzg1MDEyODI3YzUxNWYwZTQ2NmExZmZhNjkxZDk4MTcwNTc0ZTlkMGVhZGIwODc1ODZjYTQ4OTMzZGEzY2M5NTNkOTViZDBlZDUwZGUxMGRkY2I2NzM2MTA3ZDZjODMxYzdmNjYzZTgzM2NhNGMwOTdlNzAwY2UwZmI5NDVmODhmYjg1ZmU4ZTVhNzczMTcyNTY1YjkxNGE0NzFhNDQzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmZWY0MTYxZGZhYWY5YzUyOTUwNTFkZmMxZmYzODEwYzhjOWVjMmU4NjZmNzA3NTQyMmM4ZWM0MjE2YTljNGZmNDk0MjdkNDgzY2FlMTBjODUzNGE0MWIyZmQxNWZlZTA2OTYwZWM2ZmIzZjdhN2U5NGEyZjhhMmUzZTQzZGM0YTQwNTc2YzMwOTdhYzk1M2IxZGU4NmYwYjRlZDM2ZDY0NGYyM2FlMTQ0MjU1Mjk2MjI0NjRjYTBjYmYwYjE3NDEzNDcyMzgxNTdmYWI1OWU0ZGU1NTI0MDk2ZDYyYmFlYzYzYWM2NCI6IjUwMzI3ZWZlYzYyOTJmOTgwMTlmYzY3YTJhNjYzODU2M2U5YjZlMmQiOiIwMjFlY2EzYWI0ODkyMjY0ZWMyMjQxMWE3NTJkOTIyMjEwNzZkNGUwMWMwZTZmMGRkZTlhZmQyNmJhNWFjZjZkNzM5ZWY5ODc1NDVkMTY2ODNlNTY3NGM5ZTcwZjFkZTY0OWQ3ZTYxZDQ4ZDBjYWViNGZiNGQ4YjI0ZmJhODRhNmUzMTA4ZmVlN2QwNzA1OTczMjY2YWM1MjRiNGFkMjgwZjdhZTE3ZGM1OWQ5NmQzMzUxNTg2YjVhM2JkYjg5NWQxZTFmNzgyMGFjNjEzNWQ4NzUzNDgwOTk4MzgyYmEzMmI3MzQ5NTU5NjA4YzM4NzQ1MjkwYTg1ZWY0ZTlmOWJkODMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAzXzYKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI2OjE2OiIwMWJkMzZlMThlY2U0YjBmZGIyZTljOWQ1NDhiZDFhN2Q2ZTJjMjFjNmZkYzM1MDc0YTFkMDViMWM2YzhiM2Q1NThlYTI2MzljOWE5YTQyMTY4MDE2OTMxNzI1MjU1OGJkMTQ4YWQyMTVhYWM1NTBlMmRjZjEyYTgyZDBlYmZlODUzIjoxNjoiMDFiMWI2NTZhZDg2ZDhlMTlkNWRjODYyOTJiM2ExOTJmZGY2ZTBkZDM3ODc3YmFkMTQ4MjJmYTAwMTkwY2FiMjY1ZjkwZDNmMDIwNTdiNmY1NGQ2ZWNiMTQ0OTFlNWFkZWFjZWJjNDhiZjBlYmQyYTJhZDI2ZDQwMmU1NGY2MTY1MSI6MTY6IjAyZjI0NmVmNDUxZWQzZWViYjlhMzEwMjAwY2MyNTg1OWMwNDhlNGJlNzk4MzAyOTkxMTEyZWI2OGNlNmRiNjc0ZTI4MGRhMjFmZWRlZDFhZTc0ODgwY2E1MjJiMThkYjI0OTM4NTAxMjgyN2M1MTVmMGU0NjZhMWZmYTY5MWQ5ODE3MDU3NGU5ZDBlYWRiMDg3NTg2Y2E0ODkzM2RhM2NjOTUzZDk1YmQwZWQ1MGRlMTBkZGNiNjczNjEwN2Q2YzgzMWM3ZjY2M2U4MzNjYTRjMDk3ZTcwMGNlMGZiOTQ1Zjg4ZmI4NWZlOGU1YTc3MzE3MjU2NWI5MTRhNDcxYTQ0MyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZWZkMjM3YmIwOThhNDQzYWVlYjJiZjZjM2Y4YzgxYjhjMDFiN2ZjYjNmZWIiOiJiMGRlM2ZjMjViNjVmNWFmOTZiMWQ1Y2MzYjI3ZDBjNjA1MzA4N2IzIjoiMDEyZmFmZWM4NjJmNTZlOWU5MmY2MGFiMGM3NzgyNGY0Mjk5YTBjYTczNGVkMjZlMDY0NGQ1ZDIyMmM3ZjBiZGUwMzk2NGY4ZTcwYTVjYjY1ZWQ0NGU0NGQ1NmFlMGVkZjFmZjg2Y2EwMzJjYzVkZDQ0MDRkYmI3NmFiODU0NTg2YzQ0ZWVkODMzNmQwOGQ0NTdjZTZjMDM2OTNiNDVjMGYxZWZlZjkzNjI0Yjk1YjhlYzE2OWM2MTZkMjBlNTUzOGViYzBiNjczN2E2ZjgyYjRiYzA1NzA5MjRmYzZiMzU3NTlhMzM0ODQyNjI3OWY4YjNkNzc0NGUyZDIyMjQyNmNlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgM182ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI2OjE2OiIwMmYyNDZlZjQ1MWVkM2VlYmI5YTMxMDIwMGNjMjU4NTljMDQ4ZTRiZTc5ODMwMjk5MTExMmViNjhjZTZkYjY3NGUyODBkYTIxZmVkZWQxYWU3NDg4MGNhNTIyYjE4ZGIyNDkzODUwMTI4MjdjNTE1ZjBlNDY2YTFmZmE2OTFkOTgxNzA1NzRlOWQwZWFkYjA4NzU4NmNhNDg5MzNkYTNjYzk1M2Q5NWJkMGVkNTBkZTEwZGRjYjY3MzYxMDdkNmM4MzFjN2Y2NjNlODMzY2E0YzA5N2U3MDBjZTBmYjk0NWY4OGZiODVmZThlNWE3NzMxNzI1NjViOTE0YTQ3MWE0NDMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImVmZDIzN2JiMDk4YTQ0M2FlZWIyYmY2YzNmOGM4MWI4YzAxYjdmY2IzZmViIjoiYjBkZTNmYzI1YjY1ZjVhZjk2YjFkNWNjM2IyN2QwYzYwNTMwODdiMyI6IjAxMmZhZmVjODYyZjU2ZTllOTJmNjBhYjBjNzc4MjRmNDI5OWEwY2E3MzRlZDI2ZTA2NDRkNWQyMjJjN2YwYmRlMDM5NjRmOGU3MGE1Y2I2NWVkNDRlNDRkNTZhZTBlZGYxZmY4NmNhMDMyY2M1ZGQ0NDA0ZGJiNzZhYjg1NDU4NmM0NGVlZDgzMzZkMDhkNDU3Y2U2YzAzNjkzYjQ1YzBmMWVmZWY5MzYyNGI5NWI4ZWMxNjljNjE2ZDIwZTU1MzhlYmMwYjY3MzdhNmY4MmI0YmMwNTcwOTI0ZmM2YjM1NzU5YTMzNDg0MjYyNzlmOGIzZDc3NDRlMmQyMjI0MjZjZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfMQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjc6MTY6IjAyOTIzMjMzNmQyODM4OTQ1ZGJhOWRkNzcyM2Y0ZTYyNGEwNWY3Mzc1YjkyN2E4N2FiZTZhODkzYTE2NThmZDQ5ZjQ3ZjZjN2IwZmE1OTZjNjVmYTY4YTIzZjBhYjQzMjk2MmQxOGQ0MzQzYmQ2ZmQ2NzFhNWVhOGQxNDg0MTM5OTUiOjE2OiIwMjBlZjVlZmU3YzUzOTRhZWQyMjcyZjdlODFhNzRmNGMwMmQxNDU4OTRjYjFiM2NhYjIzYTlhMDcxMGEyYWZjN2UzMzI5YWNiYjc0M2QwMWY2ODBjNGQwMmFmYjRjOGZkZTdlMjA5MzA4MTFiYjJiOTk1Nzg4YjVlODcyYzIwYmIxIjoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI5ZmIwM2I4MjdjODIxN2Q5IjoiZWQ3Yzk4Yzk1ZjMwOTc0ZmJlNGZiZGRjZjBmMjhkNjAyMWMwZTkxZCI6IjAzMjNkNWI3YmYyMGJhNDUzOTI4OWFlNDUyYWU0Mjk3MDgwZmVmZjQ1MTg0MjNmZjQ4MTFhODE3ODM3ZTdkODJmMTgzNmNkZmFiNTQ1MTRmZjA4ODdiZGRlZWJmNDBiZjk5YjA0N2FiYzNlY2ZhNmEzN2EzZWYwMGY0YTBjNGE4OGFhZTA5MDRiNzQ1Yzg0NmM0MTA3ZTg3OTc3MjNlOGFjODEwZDllM2Q5NWRmYTMwZmY0OTY2ZjRkNzVkMTM3NjhkMjA4NTdmMmIxNDA2ZjI2NGNmZTc1ZTI3ZDc2NTJmNGI1ZWQzNTc1ZjI4YTcwMmY4YzRlZDljZjliMmQ0NDk0OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNzoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI5ZmIwM2I4MjdjODIxN2Q5IjoiZWQ3Yzk4Yzk1ZjMwOTc0ZmJlNGZiZGRjZjBmMjhkNjAyMWMwZTkxZCI6IjAzMjNkNWI3YmYyMGJhNDUzOTI4OWFlNDUyYWU0Mjk3MDgwZmVmZjQ1MTg0MjNmZjQ4MTFhODE3ODM3ZTdkODJmMTgzNmNkZmFiNTQ1MTRmZjA4ODdiZGRlZWJmNDBiZjk5YjA0N2FiYzNlY2ZhNmEzN2EzZWYwMGY0YTBjNGE4OGFhZTA5MDRiNzQ1Yzg0NmM0MTA3ZTg3OTc3MjNlOGFjODEwZDllM2Q5NWRmYTMwZmY0OTY2ZjRkNzVkMTM3NjhkMjA4NTdmMmIxNDA2ZjI2NGNmZTc1ZTI3ZDc2NTJmNGI1ZWQzNTc1ZjI4YTcwMmY4YzRlZDljZjliMmQ0NDk0OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjc6MTY6IjAyOTIzMjMzNmQyODM4OTQ1ZGJhOWRkNzcyM2Y0ZTYyNGEwNWY3Mzc1YjkyN2E4N2FiZTZhODkzYTE2NThmZDQ5ZjQ3ZjZjN2IwZmE1OTZjNjVmYTY4YTIzZjBhYjQzMjk2MmQxOGQ0MzQzYmQ2ZmQ2NzFhNWVhOGQxNDg0MTM5OTUiOjE2OiIwMjBlZjVlZmU3YzUzOTRhZWQyMjcyZjdlODFhNzRmNGMwMmQxNDU4OTRjYjFiM2NhYjIzYTlhMDcxMGEyYWZjN2UzMzI5YWNiYjc0M2QwMWY2ODBjNGQwMmFmYjRjOGZkZTdlMjA5MzA4MTFiYjJiOTk1Nzg4YjVlODcyYzIwYmIxIjoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwY2EyYWQ3Nzc5N2VjZTg2ZGU1YmY3Njg3NTBkZGI1ZWQ2YTMxMTZhZDk5YmJkMTdlZGY3Zjc4MmYwZGIxY2QwNWIwZjY3NzQ2OGM1ZWE0MjBkYzExNmIxMGU4MGQxMTBkZTJiMDQ2MWVhMTRhMzhiZTY4NjIwMzkyZTdlODkzY2I0ZWE5MzkzZmI4ODZjMjBmZjc5MDY0MjMwNWJmMzAyMDAzODkyZTU0ZGY5ZjY2NzUwOWRjNTM5MjBkZjU4M2Y1MGEzZGQ2MWFiYjZmYWI3NWQ2MDAzNzdlMzgzZTZhY2E2NzEwZWVlYTI3MTU2ZTA2NzUyYzk0Y2UyNWFlOTlmY2JmODU5MmRiZTJkN2UyNzQ1M2NiNDRkZTA3MTAwZWJiMWEyYTE5ODExYTQ3OGFkYmVhYjI3MGY5NGU4ZmUzNjlkOTBiM2NhNjEyZjlmIjoiMjJkNzFkNTQzNjNhNDIxN2FhNTUxMTNmMDU5YjMzODRlM2U1N2U0NCI6IjA0OWQwMTg1ODQ1YTI2NGQyOGZlYjFlNjllZGFlYzA5MDYwOWU4ZTQ2ZDkzYWJiMzgzNzFjZTUxZjRhYTY1YTU5OWJkYWFhODFkMjRmYmE2NmEwOGExMTZjYjY0NGYzZjFlNjUzZDk1Yzg5ZGI4YmJkNWRhYWMyNzA5Yzg5ODQwMDAxNzg0MTBhN2M2YWE4NjY3ZGRjMzhjNzQxZjcxMGVjODY2NWFhOTA1MmJlOTI5ZDRlM2IxNjc4MmMxNjYyMTE0YzU0MTRiYjAzNTM0NTVjMzkyZmMyOGYzZGI1OTA1NGI1ZjM2NWM0OWUxZDE1NmY4NzZlZTEwY2I0ZmQ3MDU5OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNzoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwY2EyYWQ3Nzc5N2VjZTg2ZGU1YmY3Njg3NTBkZGI1ZWQ2YTMxMTZhZDk5YmJkMTdlZGY3Zjc4MmYwZGIxY2QwNWIwZjY3NzQ2OGM1ZWE0MjBkYzExNmIxMGU4MGQxMTBkZTJiMDQ2MWVhMTRhMzhiZTY4NjIwMzkyZTdlODkzY2I0ZWE5MzkzZmI4ODZjMjBmZjc5MDY0MjMwNWJmMzAyMDAzODkyZTU0ZGY5ZjY2NzUwOWRjNTM5MjBkZjU4M2Y1MGEzZGQ2MWFiYjZmYWI3NWQ2MDAzNzdlMzgzZTZhY2E2NzEwZWVlYTI3MTU2ZTA2NzUyYzk0Y2UyNWFlOTlmY2JmODU5MmRiZTJkN2UyNzQ1M2NiNDRkZTA3MTAwZWJiMWEyYTE5ODExYTQ3OGFkYmVhYjI3MGY5NGU4ZmUzNjlkOTBiM2NhNjEyZjlmIjoiMjJkNzFkNTQzNjNhNDIxN2FhNTUxMTNmMDU5YjMzODRlM2U1N2U0NCI6IjA0OWQwMTg1ODQ1YTI2NGQyOGZlYjFlNjllZGFlYzA5MDYwOWU4ZTQ2ZDkzYWJiMzgzNzFjZTUxZjRhYTY1YTU5OWJkYWFhODFkMjRmYmE2NmEwOGExMTZjYjY0NGYzZjFlNjUzZDk1Yzg5ZGI4YmJkNWRhYWMyNzA5Yzg5ODQwMDAxNzg0MTBhN2M2YWE4NjY3ZGRjMzhjNzQxZjcxMGVjODY2NWFhOTA1MmJlOTI5ZDRlM2IxNjc4MmMxNjYyMTE0YzU0MTRiYjAzNTM0NTVjMzkyZmMyOGYzZGI1OTA1NGI1ZjM2NWM0OWUxZDE1NmY4NzZlZTEwY2I0ZmQ3MDU5OCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjc6MTY6IjAyOTIzMjMzNmQyODM4OTQ1ZGJhOWRkNzcyM2Y0ZTYyNGEwNWY3Mzc1YjkyN2E4N2FiZTZhODkzYTE2NThmZDQ5ZjQ3ZjZjN2IwZmE1OTZjNjVmYTY4YTIzZjBhYjQzMjk2MmQxOGQ0MzQzYmQ2ZmQ2NzFhNWVhOGQxNDg0MTM5OTUiOjE2OiIwMjBlZjVlZmU3YzUzOTRhZWQyMjcyZjdlODFhNzRmNGMwMmQxNDU4OTRjYjFiM2NhYjIzYTlhMDcxMGEyYWZjN2UzMzI5YWNiYjc0M2QwMWY2ODBjNGQwMmFmYjRjOGZkZTdlMjA5MzA4MTFiYjJiOTk1Nzg4YjVlODcyYzIwYmIxIjoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIyODgwNjJhZmMwOGZjZGI3YzVmODY1MGIyOTgzNzMwMDQ2MWRkNTY3NmMxN2EyMGEzYzhmYjUxNDg5NDllM2Y3M2Q2NmIzYWU4MmM3MjQwZTI3YzViM2VjNDMyOGVlN2Q2ZGRmNmE2YTBjOWI1YjE1YmNkYTE5NmE5ZDBjNzZiMTE5ZDUzNGQ4NWFiZDEyMzk2MmQ1ODNiNzZjZTlkMTgwYmNlMWNhIjoiNGFmODcwZmJjNjUxNjAxMmNhOTE2YzcwYmE4NjJhYzdlODI0MzYxNyI6IjAzZmJjNDEwYTJjZWQ1OTUwMGZiOTlmOWUyYWYyNzgxYWRhNzRlMTMxNDU2MjQ2MDI3ODJlMjk5NDgxM2VlZmNhMDUxOWVjZDI1M2I4NTVmYjYyNmE5MGQ3NzFlYWUwMjhiMGM0N2ExOTljYmQ5ZjhlMzI2OTczNGFmNDE2MzU5OTA5MDcxM2EzZmE5MTBmYTA5NjA2NTI3MjE0MzJiOTcxMDM2YTcxODFhMmJjMGNhYjQzYjBiNTk4YmM2MjE3NDYxZDdkYjMwNWZmN2U5NTRjNWI1YmIyMzFjMzllNzkxYWY2YmNmYTc2YjE0N2IwODEzMjFmNzI2NDE0ODJhMmFhZCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNzoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIyODgwNjJhZmMwOGZjZGI3YzVmODY1MGIyOTgzNzMwMDQ2MWRkNTY3NmMxN2EyMGEzYzhmYjUxNDg5NDllM2Y3M2Q2NmIzYWU4MmM3MjQwZTI3YzViM2VjNDMyOGVlN2Q2ZGRmNmE2YTBjOWI1YjE1YmNkYTE5NmE5ZDBjNzZiMTE5ZDUzNGQ4NWFiZDEyMzk2MmQ1ODNiNzZjZTlkMTgwYmNlMWNhIjoiNGFmODcwZmJjNjUxNjAxMmNhOTE2YzcwYmE4NjJhYzdlODI0MzYxNyI6IjAzZmJjNDEwYTJjZWQ1OTUwMGZiOTlmOWUyYWYyNzgxYWRhNzRlMTMxNDU2MjQ2MDI3ODJlMjk5NDgxM2VlZmNhMDUxOWVjZDI1M2I4NTVmYjYyNmE5MGQ3NzFlYWUwMjhiMGM0N2ExOTljYmQ5ZjhlMzI2OTczNGFmNDE2MzU5OTA5MDcxM2EzZmE5MTBmYTA5NjA2NTI3MjE0MzJiOTcxMDM2YTcxODFhMmJjMGNhYjQzYjBiNTk4YmM2MjE3NDYxZDdkYjMwNWZmN2U5NTRjNWI1YmIyMzFjMzllNzkxYWY2YmNmYTc2YjE0N2IwODEzMjFmNzI2NDE0ODJhMmFhZCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfNAorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjc6MTY6IjAyOTIzMjMzNmQyODM4OTQ1ZGJhOWRkNzcyM2Y0ZTYyNGEwNWY3Mzc1YjkyN2E4N2FiZTZhODkzYTE2NThmZDQ5ZjQ3ZjZjN2IwZmE1OTZjNjVmYTY4YTIzZjBhYjQzMjk2MmQxOGQ0MzQzYmQ2ZmQ2NzFhNWVhOGQxNDg0MTM5OTUiOjE2OiIwMjBlZjVlZmU3YzUzOTRhZWQyMjcyZjdlODFhNzRmNGMwMmQxNDU4OTRjYjFiM2NhYjIzYTlhMDcxMGEyYWZjN2UzMzI5YWNiYjc0M2QwMWY2ODBjNGQwMmFmYjRjOGZkZTdlMjA5MzA4MTFiYjJiOTk1Nzg4YjVlODcyYzIwYmIxIjoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI2ZjRmOWFiOTUwMTE5OWNlZjU1YzZjZjQwOGZlN2IzNmM1NTdjNDlkNDIwYTQ3NjNkMjQ2M2M4YWQ0NGIzY2ZjNWJlMjc0MmMwZTdkOWIwZjY2MDhmMDhjN2Y0N2I2OTNlZSI6IjQwZDJlMTgwZmFlMWVhYzQzOWMxOTBiNTZjMmMwZTE0ZGRmOWEyMjYiOiIwNDg2NjQ0YmM2NmJmNzVkMjgzMzVhNjE3OWIxMDg1MWY0M2YwOWJkZWQ5ZmFjMWFmMzMyNTJiYjk5NTNiYTQyOThjZDY0NjZiMjc1MzlhNzBhZGFhM2Y4OWIzZGIzYzc0YWI2MzVkMTIyZjRlZTdjZTU1N2E2MWU1OWI4MmZmYjc4NjYzMGU1ZjlkYjUzYzc3ZDlhMGMxMmZhYjU5NThkNGMyY2U3ZGFhODA3Y2Q4OWJhMmNjN2ZjZDAyZmY0NzBjYTY3YjIyOWZjY2U4MTRjODUyYzczY2M5M2JlYTM1YmU2ODQ1OWNlNDc4ZTlkNDY1NWQxMjFjODQ3MmYzNzFkNGYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzQgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjc6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNmY0ZjlhYjk1MDExOTljZWY1NWM2Y2Y0MDhmZTdiMzZjNTU3YzQ5ZDQyMGE0NzYzZDI0NjNjOGFkNDRiM2NmYzViZTI3NDJjMGU3ZDliMGY2NjA4ZjA4YzdmNDdiNjkzZWUiOiI0MGQyZTE4MGZhZTFlYWM0MzljMTkwYjU2YzJjMGUxNGRkZjlhMjI2IjoiMDQ4NjY0NGJjNjZiZjc1ZDI4MzM1YTYxNzliMTA4NTFmNDNmMDliZGVkOWZhYzFhZjMzMjUyYmI5OTUzYmE0Mjk4Y2Q2NDY2YjI3NTM5YTcwYWRhYTNmODliM2RiM2M3NGFiNjM1ZDEyMmY0ZWU3Y2U1NTdhNjFlNTliODJmZmI3ODY2MzBlNWY5ZGI1M2M3N2Q5YTBjMTJmYWI1OTU4ZDRjMmNlN2RhYTgwN2NkODliYTJjYzdmY2QwMmZmNDcwY2E2N2IyMjlmY2NlODE0Yzg1MmM3M2NjOTNiZWEzNWJlNjg0NTljZTQ3OGU5ZDQ2NTVkMTIxYzg0NzJmMzcxZDRmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNF81Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyNzoxNjoiMDI5MjMyMzM2ZDI4Mzg5NDVkYmE5ZGQ3NzIzZjRlNjI0YTA1ZjczNzViOTI3YTg3YWJlNmE4OTNhMTY1OGZkNDlmNDdmNmM3YjBmYTU5NmM2NWZhNjhhMjNmMGFiNDMyOTYyZDE4ZDQzNDNiZDZmZDY3MWE1ZWE4ZDE0ODQxMzk5NSI6MTY6IjAyMGVmNWVmZTdjNTM5NGFlZDIyNzJmN2U4MWE3NGY0YzAyZDE0NTg5NGNiMWIzY2FiMjNhOWEwNzEwYTJhZmM3ZTMzMjlhY2JiNzQzZDAxZjY4MGM0ZDAyYWZiNGM4ZmRlN2UyMDkzMDgxMWJiMmI5OTU3ODhiNWU4NzJjMjBiYjEiOjE2OiIwNTRhZGI3ODg2NDQ3ZWZlNmY1N2UwMzY4ZjA2Y2Y1MmIwYTMzNzA3NjBkMTYxY2VmMTI2YjkxYmU3Zjg5YzQyMWI2MmE2ZWMxZGEzYzMxMWQ3NWVkNTBlMGFiNWZmZjNmZDMzOGFjYzNhYThhNGU3N2VlMjYzNjlhY2I4MWJhOTAwZmE4M2Y1MzAwY2Y5YmI2YzUzYWQxZGM4YTE3OGI4MTVkYjQyMzVhOWE5ZGEwYzA2ZGU0ZTYxNWVhMTI3N2NlNTU5ZTljMTA4ZGU1OGMxNGE4MWFhNzdmNWE2ZjhkMTMzNTQ5NDQ5ODg0OGM4Yjk1OTQwNzQwYmU3YmY3YzM3MDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImUxN2QyMDM4NWQ1MDE5NTU4MjNjM2Y2NjYyNTRjMWQzZGQzNmFkNTE2OGI4ZjE4ZDI4NmZkY2Y2N2E3ZGFkOTQwOTcwODVmYWI3ZWQ4NmZlMjE0MmEyODc3MTcxNzk5N2VmMWE3YTA4ODg0ZWZjMzkzNTZkNzYwNzdhYWY4MjQ1OWE3ZmFkNDU4NDg4NzVmMjgxOWIwOTg5MzdmZTkyM2JjYzlkYzQ0MmQ3MmQ3NTRkODEyMDI1MDkwYzliYzAzZGIzMDgwYzEzOGRkNjNiMzU1ZDBiNGI4NWQ2Njg4YWMxOWY0ZGUxNTA4NGEwYmE0ZTM3M2I5M2VmNGE1NTUwOTY2OTE5MTVkYzIzYzAwZTk1NGNkZWIyMGE0N2NkNTVkMTZjM2Q4NjgxZDQ2ZWQ3ZjJlZDVlYTQyNzk1YmUxN2JhZWQyNWYwZjRkMTEzYjM2MzZhZGRkNTg1ZjE2YThiNWFlYzBjOGZhOWM1ZjAzY2JmM2I5YjczIjoiMjQ5N2RjMmI0NjE1ZGZhZTVhNjYzZDQ5ZmZkNTZiZjdlZmMxMTMwNCI6IjAyMmE4MDA0NTM1MzkwNGNiMzBjYmI1NDJkN2Q0OTkwNDIxYTZlZWMxNmE4MDI5YTg0MjJhZGZkMjJkNmFmZjhjNGNjMDI5NGFmMTEwYTBjMDY3ZWM4NmE3ZDM2NDEzNDQ1OWJiMWFlOGZmODM2ZDVhOGEyNTc5ODQwOTk2YjMyMGIxOWYxM2ExM2ZhZDM3OGQ5MzFhNjU2MjVkYWUyNzM5ZjBjNTM2NzBiMzVkOWQzY2JhYzA4ZTczM2U0ZWMyYjgzYWY0YjkxOTZkNjNlN2M0ZmYxZGRlYWUyYTEyMjc5MWExMjViZmVhOGRlYjBkZThjY2YxZjRmZmFmNmU2ZmIwYSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDRfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyNzoxNjoiMDU0YWRiNzg4NjQ0N2VmZTZmNTdlMDM2OGYwNmNmNTJiMGEzMzcwNzYwZDE2MWNlZjEyNmI5MWJlN2Y4OWM0MjFiNjJhNmVjMWRhM2MzMTFkNzVlZDUwZTBhYjVmZmYzZmQzMzhhY2MzYWE4YTRlNzdlZTI2MzY5YWNiODFiYTkwMGZhODNmNTMwMGNmOWJiNmM1M2FkMWRjOGExNzhiODE1ZGI0MjM1YTlhOWRhMGMwNmRlNGU2MTVlYTEyNzdjZTU1OWU5YzEwOGRlNThjMTRhODFhYTc3ZjVhNmY4ZDEzMzU0OTQ0OTg4NDhjOGI5NTk0MDc0MGJlN2JmN2MzNzA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlMTdkMjAzODVkNTAxOTU1ODIzYzNmNjY2MjU0YzFkM2RkMzZhZDUxNjhiOGYxOGQyODZmZGNmNjdhN2RhZDk0MDk3MDg1ZmFiN2VkODZmZTIxNDJhMjg3NzE3MTc5OTdlZjFhN2EwODg4NGVmYzM5MzU2ZDc2MDc3YWFmODI0NTlhN2ZhZDQ1ODQ4ODc1ZjI4MTliMDk4OTM3ZmU5MjNiY2M5ZGM0NDJkNzJkNzU0ZDgxMjAyNTA5MGM5YmMwM2RiMzA4MGMxMzhkZDYzYjM1NWQwYjRiODVkNjY4OGFjMTlmNGRlMTUwODRhMGJhNGUzNzNiOTNlZjRhNTU1MDk2NjkxOTE1ZGMyM2MwMGU5NTRjZGViMjBhNDdjZDU1ZDE2YzNkODY4MWQ0NmVkN2YyZWQ1ZWE0Mjc5NWJlMTdiYWVkMjVmMGY0ZDExM2IzNjM2YWRkZDU4NWYxNmE4YjVhZWMwYzhmYTljNWYwM2NiZjNiOWI3MyI6IjI0OTdkYzJiNDYxNWRmYWU1YTY2M2Q0OWZmZDU2YmY3ZWZjMTEzMDQiOiIwMjJhODAwNDUzNTM5MDRjYjMwY2JiNTQyZDdkNDk5MDQyMWE2ZWVjMTZhODAyOWE4NDIyYWRmZDIyZDZhZmY4YzRjYzAyOTRhZjExMGEwYzA2N2VjODZhN2QzNjQxMzQ0NTliYjFhZThmZjgzNmQ1YThhMjU3OTg0MDk5NmIzMjBiMTlmMTNhMTNmYWQzNzhkOTMxYTY1NjI1ZGFlMjczOWYwYzUzNjcwYjM1ZDlkM2NiYWMwOGU3MzNlNGVjMmI4M2FmNGI5MTk2ZDYzZTdjNGZmMWRkZWFlMmExMjI3OTFhMTI1YmZlYThkZWIwZGU4Y2NmMWY0ZmZhZjZlNmZiMGEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA0XzYKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI3OjE2OiIwMjkyMzIzMzZkMjgzODk0NWRiYTlkZDc3MjNmNGU2MjRhMDVmNzM3NWI5MjdhODdhYmU2YTg5M2ExNjU4ZmQ0OWY0N2Y2YzdiMGZhNTk2YzY1ZmE2OGEyM2YwYWI0MzI5NjJkMThkNDM0M2JkNmZkNjcxYTVlYThkMTQ4NDEzOTk1IjoxNjoiMDIwZWY1ZWZlN2M1Mzk0YWVkMjI3MmY3ZTgxYTc0ZjRjMDJkMTQ1ODk0Y2IxYjNjYWIyM2E5YTA3MTBhMmFmYzdlMzMyOWFjYmI3NDNkMDFmNjgwYzRkMDJhZmI0YzhmZGU3ZTIwOTMwODExYmIyYjk5NTc4OGI1ZTg3MmMyMGJiMSI6MTY6IjA1NGFkYjc4ODY0NDdlZmU2ZjU3ZTAzNjhmMDZjZjUyYjBhMzM3MDc2MGQxNjFjZWYxMjZiOTFiZTdmODljNDIxYjYyYTZlYzFkYTNjMzExZDc1ZWQ1MGUwYWI1ZmZmM2ZkMzM4YWNjM2FhOGE0ZTc3ZWUyNjM2OWFjYjgxYmE5MDBmYTgzZjUzMDBjZjliYjZjNTNhZDFkYzhhMTc4YjgxNWRiNDIzNWE5YTlkYTBjMDZkZTRlNjE1ZWExMjc3Y2U1NTllOWMxMDhkZTU4YzE0YTgxYWE3N2Y1YTZmOGQxMzM1NDk0NDk4ODQ4YzhiOTU5NDA3NDBiZTdiZjdjMzcwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYWZiYzE5ZDQ3OTI0OTAxOGZkZjRlMDlmNjE4NzI2NDQwNDk1ZGUxMWRkZWVlMzg4NzJkNzc1ZmNlYTc0YTIzODk2YjUzNDNjOWMzOGQ0NmFmMGRiYTIyNGQwNDc1ODBjYzYwYTY1ZTkzOTFjZjliNTliMzZhODYwNTk4ZDRlODIxNjcyMmY5OTNiOTFjZmFlODdiYzI1NWFmODlhNmExOTliY2E0YTM5MWVhZGJjM2EyNDkwM2MwYmQ2NjczNjhmNmJlNzhlM2ZlYWJmYjRmZmQ0NjMxMjI3NjM3NDBmZmJiZWZlYWI5YTI1NTY0YmM1ZDFjMjRjOTNlNDIyZjc1MDczZTJhZDcyYmY0NWIxMGRmMDBiNTJhMTQ3MTI4ZTczZmVlMzNmYTNmMDU3N2Q3N2Y4MGZiYzJkZjFiZWQzMTMyOTBjMTI3NzdmNTAiOiJhMzM0ZGI2ZmFlYmYxMTA4MWEwNGY4N2MyZDYyMWNkZWM3OTMwYjliIjoiMDA5MzhkY2I2ZDU4MzA0NjA2NWY2OWM3OGRhN2ExZjE3NTcwNjZhN2ZhNzUxMjVhOWQyOTI5ZjBiNzlhNjBiNjI3YjA4MmYxMWY1YjE5NmYyOGViOWRhYTZmMjFjMDVlNTE0MGY2YWVmMTczN2QyMDIzMDc1YzA1ZWNmMDRhMDI4YzY4NmEyYWIzZTdkNWEwNjY0ZjI5NWNlMTI5OTVlODkwOTA4YjZhZDIxZjA4MzllYjY1YjcwMzkzYTdiNWFmZDk4NzFkZTBjYWEwY2VkZWM1YjgxOTYyNjc1NjIwOWQxM2FiMWU3YmI5NTQ2YTI2ZmYzN2U5YTUxYWY5ZmQ1NjJlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNF82ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI3OjE2OiIwNTRhZGI3ODg2NDQ3ZWZlNmY1N2UwMzY4ZjA2Y2Y1MmIwYTMzNzA3NjBkMTYxY2VmMTI2YjkxYmU3Zjg5YzQyMWI2MmE2ZWMxZGEzYzMxMWQ3NWVkNTBlMGFiNWZmZjNmZDMzOGFjYzNhYThhNGU3N2VlMjYzNjlhY2I4MWJhOTAwZmE4M2Y1MzAwY2Y5YmI2YzUzYWQxZGM4YTE3OGI4MTVkYjQyMzVhOWE5ZGEwYzA2ZGU0ZTYxNWVhMTI3N2NlNTU5ZTljMTA4ZGU1OGMxNGE4MWFhNzdmNWE2ZjhkMTMzNTQ5NDQ5ODg0OGM4Yjk1OTQwNzQwYmU3YmY3YzM3MDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImFmYmMxOWQ0NzkyNDkwMThmZGY0ZTA5ZjYxODcyNjQ0MDQ5NWRlMTFkZGVlZTM4ODcyZDc3NWZjZWE3NGEyMzg5NmI1MzQzYzljMzhkNDZhZjBkYmEyMjRkMDQ3NTgwY2M2MGE2NWU5MzkxY2Y5YjU5YjM2YTg2MDU5OGQ0ZTgyMTY3MjJmOTkzYjkxY2ZhZTg3YmMyNTVhZjg5YTZhMTk5YmNhNGEzOTFlYWRiYzNhMjQ5MDNjMGJkNjY3MzY4ZjZiZTc4ZTNmZWFiZmI0ZmZkNDYzMTIyNzYzNzQwZmZiYmVmZWFiOWEyNTU2NGJjNWQxYzI0YzkzZTQyMmY3NTA3M2UyYWQ3MmJmNDViMTBkZjAwYjUyYTE0NzEyOGU3M2ZlZTMzZmEzZjA1NzdkNzdmODBmYmMyZGYxYmVkMzEzMjkwYzEyNzc3ZjUwIjoiYTMzNGRiNmZhZWJmMTEwODFhMDRmODdjMmQ2MjFjZGVjNzkzMGI5YiI6IjAwOTM4ZGNiNmQ1ODMwNDYwNjVmNjljNzhkYTdhMWYxNzU3MDY2YTdmYTc1MTI1YTlkMjkyOWYwYjc5YTYwYjYyN2IwODJmMTFmNWIxOTZmMjhlYjlkYWE2ZjIxYzA1ZTUxNDBmNmFlZjE3MzdkMjAyMzA3NWMwNWVjZjA0YTAyOGM2ODZhMmFiM2U3ZDVhMDY2NGYyOTVjZTEyOTk1ZTg5MDkwOGI2YWQyMWYwODM5ZWI2NWI3MDM5M2E3YjVhZmQ5ODcxZGUwY2FhMGNlZGVjNWI4MTk2MjY3NTYyMDlkMTNhYjFlN2JiOTU0NmEyNmZmMzdlOWE1MWFmOWZkNTYyZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfMQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjg6MTY6IjAzZjJmMzMxZjQxNDJkNGYyNGI0M2FhMTAyNzlhODk2NTJkNGU3NTM3MjIxYTFhN2IyYTI1ZGViNTUxZTVkZTlhYzQ5NzQxMWMyMjdhOTRlNDVmOTFjMmQxYzEzY2MwNDZjZjRjZTE0ZTMyZDA1ODczNDIxMGQ0NGE4N2VlMWI3M2YiOjE2OiIwMzRmMDkwZDczYjU1ODAzMDMwY2YwMzYxYTVkODA4MWJmYjc5Zjg1MTUyM2ZlYWMwYTIxMjRkMDhkNDAxM2ZmMDg0ODc3NzFhODcwZDA0NzlkYzA2ODZjNjJmNzcxOGRmZWNmMDI0YjE3YzkyNjc2NzgwNTkxNzEzMzljYzAwODM5IjoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIzMGM3ZDU1NzQ1OGI0MzZkZWNmZGMxNGQwNmNiN2I5NmIwNjcxOGM0OGQ3ZGU1NzQ4MmE4NjhhZTdmMDY1ODcwYTYyMTY1MDZkMTFiNzc5MzIzZGZkZjA0NmNmNTc3NTEyOTEzNGI0ZDU2ODllNGQ5YzBjZTFlMTJkN2Q0YjA2Y2I1ZmM1ODIwZGVjZmE0MWJhZjU5YmYyNTdiMzJmMDI1Yjc2NzliNDQ1Yjk0OTljOTI1NTUxNDU4ODU5OTJmMWI3NmY4NDg5MWVlNGQzYmUwZjUxNTBmZDU5MDFlM2E0YzhlZDQzZmQzNmI2MWQwMjJlNjVhZDUwMDhkYmYzMzI5M2MyMmJmYmZkMDczMjFmMGYxZDVmYTlmZGYwMDE0YzJmY2IwMzU4YWFkMGUzNTRiMGQyOSI6IjA4MWIyMzNiNDM1Njc3NTBiZDZlNzhmMzk2YTg4YjlmNmE0NDUxNTEiOiIwYmEzNzNmNzZlMDkyMWI3MGE4ZmJmZTYyMmYwYmY3N2IyOGEzZGI5OGUzNjEwNTFjM2Q3Y2I5MmFkMDQ1MjkxNWE0ZGU5YzAxNzIyZjY4MjNlZWI2YWRmN2UwY2E4MjkwZjVkZTNlNTQ5ODkwYWMyYTNjNTk1MGFiMjE3YmE1ODU5MDg5NDk1MmRlOTZmOGRmMTExYjI1NzUyMTVkYTZjMTYxNTkwYzc0NWJlNjEyNDc2ZWU1NzhlZDM4NGFiMzNlM2VjZTk3NDgxYTI1MmY1Yzc5YTk4YjU1MzJhZTAwY2RkNjJmMmVjYzBjZDFiYWVmZTgwZDgwYjk2MjE5M2VjMWQiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzEgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjg6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMzBjN2Q1NTc0NThiNDM2ZGVjZmRjMTRkMDZjYjdiOTZiMDY3MThjNDhkN2RlNTc0ODJhODY4YWU3ZjA2NTg3MGE2MjE2NTA2ZDExYjc3OTMyM2RmZGYwNDZjZjU3NzUxMjkxMzRiNGQ1Njg5ZTRkOWMwY2UxZTEyZDdkNGIwNmNiNWZjNTgyMGRlY2ZhNDFiYWY1OWJmMjU3YjMyZjAyNWI3Njc5YjQ0NWI5NDk5YzkyNTU1MTQ1ODg1OTkyZjFiNzZmODQ4OTFlZTRkM2JlMGY1MTUwZmQ1OTAxZTNhNGM4ZWQ0M2ZkMzZiNjFkMDIyZTY1YWQ1MDA4ZGJmMzMyOTNjMjJiZmJmZDA3MzIxZjBmMWQ1ZmE5ZmRmMDAxNGMyZmNiMDM1OGFhZDBlMzU0YjBkMjkiOiIwODFiMjMzYjQzNTY3NzUwYmQ2ZTc4ZjM5NmE4OGI5ZjZhNDQ1MTUxIjoiMGJhMzczZjc2ZTA5MjFiNzBhOGZiZmU2MjJmMGJmNzdiMjhhM2RiOThlMzYxMDUxYzNkN2NiOTJhZDA0NTI5MTVhNGRlOWMwMTcyMmY2ODIzZWViNmFkZjdlMGNhODI5MGY1ZGUzZTU0OTg5MGFjMmEzYzU5NTBhYjIxN2JhNTg1OTA4OTQ5NTJkZTk2ZjhkZjExMWIyNTc1MjE1ZGE2YzE2MTU5MGM3NDViZTYxMjQ3NmVlNTc4ZWQzODRhYjMzZTNlY2U5NzQ4MWEyNTJmNWM3OWE5OGI1NTMyYWUwMGNkZDYyZjJlY2MwY2QxYmFlZmU4MGQ4MGI5NjIxOTNlYzFkIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV8yCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyODoxNjoiMDNmMmYzMzFmNDE0MmQ0ZjI0YjQzYWExMDI3OWE4OTY1MmQ0ZTc1MzcyMjFhMWE3YjJhMjVkZWI1NTFlNWRlOWFjNDk3NDExYzIyN2E5NGU0NWY5MWMyZDFjMTNjYzA0NmNmNGNlMTRlMzJkMDU4NzM0MjEwZDQ0YTg3ZWUxYjczZiI6MTY6IjAzNGYwOTBkNzNiNTU4MDMwMzBjZjAzNjFhNWQ4MDgxYmZiNzlmODUxNTIzZmVhYzBhMjEyNGQwOGQ0MDEzZmYwODQ4Nzc3MWE4NzBkMDQ3OWRjMDY4NmM2MmY3NzE4ZGZlY2YwMjRiMTdjOTI2NzY3ODA1OTE3MTMzOWNjMDA4MzkiOjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImU3YjMyZTE1NTZlYTFiMjc5NTA0NmFjNjk3MzlkMjJhYzg5NjZiZjExYzExNmY2MTRiMTY2NzQwZTk2YjkwNjUzZTU3NTA5NDVmY2Y3NzIxODZjMDM3OTBhMDdmZGEzMjNlMWE2MTkxNmIwNmVlMjE1N2RiM2RmZjgwZDY3ZDVlMzlhNTNhZTI2OGM4ZjA5ZWQ5OWE3MzIwMDViMGJjNmEwNGFmNGUwOGQ1N2EwMGU3MjAxYjMwNjBlZmFhZGI3MzExM2JmYzA4N2ZkODM3MDkzYWEyNTIzNWI4YzE0OWY1NjIxNWYwMzFjMjRhZDViZGU3ZjI5OTYwZGY3ZDUyNDA3MGY3NDQ5YzZmNzg1MDg0YmUxYTBmNzMzMDQ3ZjMzNmY5MTU0NzM4Njc0NTQ3ZGIwMmE5ZjQ0ZGZjNmU2MDMwMTA4MWUxY2U5OTg0N2YzYjViNjAxZmYwNmI0ZDU3NzZhOTc0MGI5YWEwZDM0MDU4ZmQzYjkwNmU0Zjc4NTlkZmIwN2Q3MTczZTVlNmY2MzUwYWRhYzIxZjI3YjIzMDc0NjkiOiJiZDBjZTE5NTQ5ZDA3MDAxMjBjYmU1MTA3N2RiYmJiMDBhOGQ4YjA5IjoiMDgxODBkZTgyNWU0YjhiMDE0YTMyZGE4YmE3NjE1NTU5MjEyMDRmMmY5MGQ1ZjI0YjcxMjkwOGZmODRmM2UyMjBhZDE3OTk3YzBkZDZlNzA2NjMwYmEzZTg0YWRkNGQ1ZTdhYjAwNGU1ODA3NGI1NDk3MDk1NjVkNDNhZDllOTdiNWE3YTFhMjllODViOWY5MGY0YWFmY2RmNTgzMjFkZThjNTk3NGVmOWFiZjJkNTI2ZjMzYzBmMmY4MmU5NWQxNThlYTZiODFmMTczNmRiOGQxYWYzZDZhYzZhODNiMzJkMThiYWUwZmYxYjJmZTI3ZGU0Yzc2ZWQ4Yzc5ODBhMzRlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV8yICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI4OjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImU3YjMyZTE1NTZlYTFiMjc5NTA0NmFjNjk3MzlkMjJhYzg5NjZiZjExYzExNmY2MTRiMTY2NzQwZTk2YjkwNjUzZTU3NTA5NDVmY2Y3NzIxODZjMDM3OTBhMDdmZGEzMjNlMWE2MTkxNmIwNmVlMjE1N2RiM2RmZjgwZDY3ZDVlMzlhNTNhZTI2OGM4ZjA5ZWQ5OWE3MzIwMDViMGJjNmEwNGFmNGUwOGQ1N2EwMGU3MjAxYjMwNjBlZmFhZGI3MzExM2JmYzA4N2ZkODM3MDkzYWEyNTIzNWI4YzE0OWY1NjIxNWYwMzFjMjRhZDViZGU3ZjI5OTYwZGY3ZDUyNDA3MGY3NDQ5YzZmNzg1MDg0YmUxYTBmNzMzMDQ3ZjMzNmY5MTU0NzM4Njc0NTQ3ZGIwMmE5ZjQ0ZGZjNmU2MDMwMTA4MWUxY2U5OTg0N2YzYjViNjAxZmYwNmI0ZDU3NzZhOTc0MGI5YWEwZDM0MDU4ZmQzYjkwNmU0Zjc4NTlkZmIwN2Q3MTczZTVlNmY2MzUwYWRhYzIxZjI3YjIzMDc0NjkiOiJiZDBjZTE5NTQ5ZDA3MDAxMjBjYmU1MTA3N2RiYmJiMDBhOGQ4YjA5IjoiMDgxODBkZTgyNWU0YjhiMDE0YTMyZGE4YmE3NjE1NTU5MjEyMDRmMmY5MGQ1ZjI0YjcxMjkwOGZmODRmM2UyMjBhZDE3OTk3YzBkZDZlNzA2NjMwYmEzZTg0YWRkNGQ1ZTdhYjAwNGU1ODA3NGI1NDk3MDk1NjVkNDNhZDllOTdiNWE3YTFhMjllODViOWY5MGY0YWFmY2RmNTgzMjFkZThjNTk3NGVmOWFiZjJkNTI2ZjMzYzBmMmY4MmU5NWQxNThlYTZiODFmMTczNmRiOGQxYWYzZDZhYzZhODNiMzJkMThiYWUwZmYxYjJmZTI3ZGU0Yzc2ZWQ4Yzc5ODBhMzRlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV8zCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyODoxNjoiMDNmMmYzMzFmNDE0MmQ0ZjI0YjQzYWExMDI3OWE4OTY1MmQ0ZTc1MzcyMjFhMWE3YjJhMjVkZWI1NTFlNWRlOWFjNDk3NDExYzIyN2E5NGU0NWY5MWMyZDFjMTNjYzA0NmNmNGNlMTRlMzJkMDU4NzM0MjEwZDQ0YTg3ZWUxYjczZiI6MTY6IjAzNGYwOTBkNzNiNTU4MDMwMzBjZjAzNjFhNWQ4MDgxYmZiNzlmODUxNTIzZmVhYzBhMjEyNGQwOGQ0MDEzZmYwODQ4Nzc3MWE4NzBkMDQ3OWRjMDY4NmM2MmY3NzE4ZGZlY2YwMjRiMTdjOTI2NzY3ODA1OTE3MTMzOWNjMDA4MzkiOjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjhkODM5NmUzNjUwN2ZlMWVmNmExOTAxNzU0OGUwYzcxNjY3NGMyZmVjMjMzYWRiMmY3NzU2NjVlYzQxZjJiZDBiYTM5NmIwNjFhOWRhYTdlODY2ZjdjMjNmZDM1MzE5NTQzMDBhMzQyZjkyNDUzNWVhMTQ5OGM0OGY2Yzg3OTkzMjg2NWZjMDIwMDBjNTI4NzIzYjdhZDAzMzU3NDViNTEyMDlhMGFmZWQ5MzJhZjhmMDg4N2MyMTkwMDRkMmFiZDg5NGVhOTI1NTllZTMxOThhZjNhNzM0ZmU5Yjk2MzhjMjYzYTcyOGFkOTVhNWFlOGNlM2ViMTU4MzlmM2FhNzg1MmJiMzkwNzA2ZTc3NjBlNDNhNzEyOTFhMmUzZjgyNzIzN2RlZGE4NTE4NzRjNTE3NjY1ZjU0NWYyNzIzOGRmODY1NTdmMzc1ZDA5Y2NkOGJkMTVkOGNjZjYxZjVkNzhjYTVjN2Y1Y2RlNzgyZTZiZjVkMDA1NzA1NmQ0YmFkOThiM2QyZjk1NzVlODI0YWI3YTMzZmY1N2IwYWMxMDBhYjBkNmVhZDdhYTBiNTBmNmU0ZDNlNWVjMGI5NjZiIjoiODE1Nzc5YTkxYjNhOGJkMDQ5YmYyYWViOTIwMTQyNzcyMjIyYzljYSI6IjA1ZTBmZGJkZjZmNzU2ZWY3MzMxODVjY2ZhOGNlZDJlYjZkMDI5ZDlkNTZlMzU1NjFiNWRiOGU3MDI1N2VlNmZkMDE5ZDJmMGJiZjY2OWZlOWI5ODIxZTc4ZGY2ZDQxZTMxNjA4ZDU4MjgwZjMxOGVlMzRmNTU5OTQxYzhkZjEzMjg3NTc0YmFjMDAwYjdlNThkYzRmNDE0YmE0OWZiMTI3ZjlkMGY4OTM2NjM4Yzc2ZTg1MzU2Yzk5NGY3OTc1MGY3ZmEzY2Y0ZmQ0ODJkZjc1ZTNmYjk5NzhjZDA2MWY3YWJiMTc1NzJlNmU2M2UwYmRlMTJjYmRjZjE4YzY4Yjk3OSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyODoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4ZDgzOTZlMzY1MDdmZTFlZjZhMTkwMTc1NDhlMGM3MTY2NzRjMmZlYzIzM2FkYjJmNzc1NjY1ZWM0MWYyYmQwYmEzOTZiMDYxYTlkYWE3ZTg2NmY3YzIzZmQzNTMxOTU0MzAwYTM0MmY5MjQ1MzVlYTE0OThjNDhmNmM4Nzk5MzI4NjVmYzAyMDAwYzUyODcyM2I3YWQwMzM1NzQ1YjUxMjA5YTBhZmVkOTMyYWY4ZjA4ODdjMjE5MDA0ZDJhYmQ4OTRlYTkyNTU5ZWUzMTk4YWYzYTczNGZlOWI5NjM4YzI2M2E3MjhhZDk1YTVhZThjZTNlYjE1ODM5ZjNhYTc4NTJiYjM5MDcwNmU3NzYwZTQzYTcxMjkxYTJlM2Y4MjcyMzdkZWRhODUxODc0YzUxNzY2NWY1NDVmMjcyMzhkZjg2NTU3ZjM3NWQwOWNjZDhiZDE1ZDhjY2Y2MWY1ZDc4Y2E1YzdmNWNkZTc4MmU2YmY1ZDAwNTcwNTZkNGJhZDk4YjNkMmY5NTc1ZTgyNGFiN2EzM2ZmNTdiMGFjMTAwYWIwZDZlYWQ3YWEwYjUwZjZlNGQzZTVlYzBiOTY2YiI6IjgxNTc3OWE5MWIzYThiZDA0OWJmMmFlYjkyMDE0Mjc3MjIyMmM5Y2EiOiIwNWUwZmRiZGY2Zjc1NmVmNzMzMTg1Y2NmYThjZWQyZWI2ZDAyOWQ5ZDU2ZTM1NTYxYjVkYjhlNzAyNTdlZTZmZDAxOWQyZjBiYmY2NjlmZTliOTgyMWU3OGRmNmQ0MWUzMTYwOGQ1ODI4MGYzMThlZTM0ZjU1OTk0MWM4ZGYxMzI4NzU3NGJhYzAwMGI3ZTU4ZGM0ZjQxNGJhNDlmYjEyN2Y5ZDBmODkzNjYzOGM3NmU4NTM1NmM5OTRmNzk3NTBmN2ZhM2NmNGZkNDgyZGY3NWUzZmI5OTc4Y2QwNjFmN2FiYjE3NTcyZTZlNjNlMGJkZTEyY2JkY2YxOGM2OGI5NzkiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI4OjE2OiIwM2YyZjMzMWY0MTQyZDRmMjRiNDNhYTEwMjc5YTg5NjUyZDRlNzUzNzIyMWExYTdiMmEyNWRlYjU1MWU1ZGU5YWM0OTc0MTFjMjI3YTk0ZTQ1ZjkxYzJkMWMxM2NjMDQ2Y2Y0Y2UxNGUzMmQwNTg3MzQyMTBkNDRhODdlZTFiNzNmIjoxNjoiMDM0ZjA5MGQ3M2I1NTgwMzAzMGNmMDM2MWE1ZDgwODFiZmI3OWY4NTE1MjNmZWFjMGEyMTI0ZDA4ZDQwMTNmZjA4NDg3NzcxYTg3MGQwNDc5ZGMwNjg2YzYyZjc3MThkZmVjZjAyNGIxN2M5MjY3Njc4MDU5MTcxMzM5Y2MwMDgzOSI6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMzI4YzY1OWUwYTY0Mzc0MzNjY2ViNzNjMTQiOiI5YWVjNGE3NDgwZDViYmM0MjkyMGQ3Y2EyMzVkYjY3NDk4OWM5YWFjIjoiMGJjOTg5ODUzYmMyZWE4Njg3MzI3MWNlMTgzYTkyM2FiNjVlOGE1MzEwMGU2ZGY1ZDg3YTI0YzQxOTRlYjc5NzgxM2VlMmExODdjMDk3ZGQ4NzJkNTkxZGE2MGM1Njg2MDVkZDdlNzQyZDVhZjRlMzNiMTE2NzhjY2I2MzkwMzIwNGEzZDA4MGIwOTAyYzg5YWJhODg2OGYwMDljMGYxYzBjYjg1ODEwYmJkZDI5MTIxYWJiODQ3MWZmMmQzOWU0OWZkOTJkNTZjNjU1YzhlMDM3YWQxOGZhZmJkYzkyYzk1ODYzZjdmNjFlYTllZmEyOGZlYTQwMTM2OWQxOWRhZWExIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI4OjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjMyOGM2NTllMGE2NDM3NDMzY2NlYjczYzE0IjoiOWFlYzRhNzQ4MGQ1YmJjNDI5MjBkN2NhMjM1ZGI2NzQ5ODljOWFhYyI6IjBiYzk4OTg1M2JjMmVhODY4NzMyNzFjZTE4M2E5MjNhYjY1ZThhNTMxMDBlNmRmNWQ4N2EyNGM0MTk0ZWI3OTc4MTNlZTJhMTg3YzA5N2RkODcyZDU5MWRhNjBjNTY4NjA1ZGQ3ZTc0MmQ1YWY0ZTMzYjExNjc4Y2NiNjM5MDMyMDRhM2QwODBiMDkwMmM4OWFiYTg4NjhmMDA5YzBmMWMwY2I4NTgxMGJiZGQyOTEyMWFiYjg0NzFmZjJkMzllNDlmZDkyZDU2YzY1NWM4ZTAzN2FkMThmYWZiZGM5MmM5NTg2M2Y3ZjYxZWE5ZWZhMjhmZWE0MDEzNjlkMTlkYWVhMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjg6MTY6IjAzZjJmMzMxZjQxNDJkNGYyNGI0M2FhMTAyNzlhODk2NTJkNGU3NTM3MjIxYTFhN2IyYTI1ZGViNTUxZTVkZTlhYzQ5NzQxMWMyMjdhOTRlNDVmOTFjMmQxYzEzY2MwNDZjZjRjZTE0ZTMyZDA1ODczNDIxMGQ0NGE4N2VlMWI3M2YiOjE2OiIwMzRmMDkwZDczYjU1ODAzMDMwY2YwMzYxYTVkODA4MWJmYjc5Zjg1MTUyM2ZlYWMwYTIxMjRkMDhkNDAxM2ZmMDg0ODc3NzFhODcwZDA0NzlkYzA2ODZjNjJmNzcxOGRmZWNmMDI0YjE3YzkyNjc2NzgwNTkxNzEzMzljYzAwODM5IjoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmMzdiOTYyMzc5YTQ3ZDQxNWEzNzZlZWM4OTczMTUwYmNiMzRlZGQ1YWI2NTQwNDFiNjE0MzA1NjBjMjE0NDU4MmJhMTMzYzg2N2Q4NTJkNmI4ZTIzMzIxOTAxMzAyZWNiNDViMDllYzg4YjE1MjcxNzhmYTA0MzI2M2YzMDY3ZDlmZmU5NzMwMzJhOTlmNGNiMDhhZDJjN2UwYTI0NTZjZGQ1N2E3ZGY1NmZlNjA1MzUyN2E1YWViNjdkN2U1NTIwNjNjMWNhOTdiMWJlZmZhN2IzOWU5OTdjYWYyNzg3OGVhMGY2MmNiZWJjOGMyMWRmNGM4ODlhMjAyODUxZTk0OTA4ODQ5MGMyNDliNmU5YWNmMWQ4MDYzZjViZTIzNDM5ODliZjk1YzRkYTAxYTJiZTc4YjRhYjZiMzc4MDE1YmMzNzk1N2Y3Njk0OGI1ZTU4ZTQ0MGMyODQ1M2Q0MGQ3Y2ZkNTdlN2Q2OTA2MDA0NzRhYjVlNzU5NzNiMWVhMGM1ZjFlNDVkMTQxOTBhZmUyZjRlYjZkM2JkZjcxZjFkMmY4YmIxNTZhMWMyOTVkMDRhYWViOWQ2ODlkY2U3OWVkNjJiYzQ0M2UiOiJlMjBjMWU5ODc4NTEyYzM5OTcwZjU4Mzc1ZTE1NDlhNjhiNjRmMzFkIjoiMGFlZmE5NDNiNjk4Yjk2MDllZGY4OThhZDIyNzQ0YWMyOGRjMjM5NDk3Y2VhMzY5Y2JiZDg0ZjY1Yzk1YzBhZDc3NmI1OTQ3NDAxNjRiNTlhNzM5YzZmZjdjMmYwN2M3YzA3N2E4NmQ5NTIzOGZlNTFlMWZjZjMzNTc0YTRhZTA2ODRiNDJhM2Y2YmY2NzdkOTE4MjBjYTg5ODc0NDY3YjJjMjNhZGQ3Nzk2OWM4MDcxNzQzMGQwZWZjMWQzNjk1ODkyY2U4NTVjYjdmNzAxMTYzMGY0ZGYyNmRlZjhkZGYzNmZjMjM5MDVmNTdmYTYyNDNhNDg1Yzc3MGQ1NjgxZmNkIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNV81ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI4OjE2OiIwZDEwZjY2MWYyOTk0MGY1ZWQzOWFhMjYwOTY2ZGViNDc4NDM2NzlkMmI2ZmIyNWIzZGUzNzBmM2FjN2MxOTkxNjM5MWZkMjVmYjUyN2ViZmE2YTRiNGRmNDVhMTc1OWQ5OTZjNGJiNGViZDE4ODI4YzQ0ZmM1MmQwMTkxODcxNzQwNTI1ZjQ3YTRiMGNjOGRhMzI1ZWQ4YWE2NzZiMGQwZjYyNmUwYTc3ZjA3NjkyMTcwYWNhYzgwODJmNDJmYWE3ZGM3Y2QxMjNlNzMwZTMxYTg3OTg1MjA0Y2FiY2JlNjY3MGQ0M2EyZGQyYjJkZGVmNWUwNTM5MmZjMjEzYmM1MDciOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImYzN2I5NjIzNzlhNDdkNDE1YTM3NmVlYzg5NzMxNTBiY2IzNGVkZDVhYjY1NDA0MWI2MTQzMDU2MGMyMTQ0NTgyYmExMzNjODY3ZDg1MmQ2YjhlMjMzMjE5MDEzMDJlY2I0NWIwOWVjODhiMTUyNzE3OGZhMDQzMjYzZjMwNjdkOWZmZTk3MzAzMmE5OWY0Y2IwOGFkMmM3ZTBhMjQ1NmNkZDU3YTdkZjU2ZmU2MDUzNTI3YTVhZWI2N2Q3ZTU1MjA2M2MxY2E5N2IxYmVmZmE3YjM5ZTk5N2NhZjI3ODc4ZWEwZjYyY2JlYmM4YzIxZGY0Yzg4OWEyMDI4NTFlOTQ5MDg4NDkwYzI0OWI2ZTlhY2YxZDgwNjNmNWJlMjM0Mzk4OWJmOTVjNGRhMDFhMmJlNzhiNGFiNmIzNzgwMTViYzM3OTU3Zjc2OTQ4YjVlNThlNDQwYzI4NDUzZDQwZDdjZmQ1N2U3ZDY5MDYwMDQ3NGFiNWU3NTk3M2IxZWEwYzVmMWU0NWQxNDE5MGFmZTJmNGViNmQzYmRmNzFmMWQyZjhiYjE1NmExYzI5NWQwNGFhZWI5ZDY4OWRjZTc5ZWQ2MmJjNDQzZSI6ImUyMGMxZTk4Nzg1MTJjMzk5NzBmNTgzNzVlMTU0OWE2OGI2NGYzMWQiOiIwYWVmYTk0M2I2OThiOTYwOWVkZjg5OGFkMjI3NDRhYzI4ZGMyMzk0OTdjZWEzNjljYmJkODRmNjVjOTVjMGFkNzc2YjU5NDc0MDE2NGI1OWE3MzljNmZmN2MyZjA3YzdjMDc3YTg2ZDk1MjM4ZmU1MWUxZmNmMzM1NzRhNGFlMDY4NGI0MmEzZjZiZjY3N2Q5MTgyMGNhODk4NzQ0NjdiMmMyM2FkZDc3OTY5YzgwNzE3NDMwZDBlZmMxZDM2OTU4OTJjZTg1NWNiN2Y3MDExNjMwZjRkZjI2ZGVmOGRkZjM2ZmMyMzkwNWY1N2ZhNjI0M2E0ODVjNzcwZDU2ODFmY2QiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA1XzYKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI4OjE2OiIwM2YyZjMzMWY0MTQyZDRmMjRiNDNhYTEwMjc5YTg5NjUyZDRlNzUzNzIyMWExYTdiMmEyNWRlYjU1MWU1ZGU5YWM0OTc0MTFjMjI3YTk0ZTQ1ZjkxYzJkMWMxM2NjMDQ2Y2Y0Y2UxNGUzMmQwNTg3MzQyMTBkNDRhODdlZTFiNzNmIjoxNjoiMDM0ZjA5MGQ3M2I1NTgwMzAzMGNmMDM2MWE1ZDgwODFiZmI3OWY4NTE1MjNmZWFjMGEyMTI0ZDA4ZDQwMTNmZjA4NDg3NzcxYTg3MGQwNDc5ZGMwNjg2YzYyZjc3MThkZmVjZjAyNGIxN2M5MjY3Njc4MDU5MTcxMzM5Y2MwMDgzOSI6MTY6IjBkMTBmNjYxZjI5OTQwZjVlZDM5YWEyNjA5NjZkZWI0Nzg0MzY3OWQyYjZmYjI1YjNkZTM3MGYzYWM3YzE5OTE2MzkxZmQyNWZiNTI3ZWJmYTZhNGI0ZGY0NWExNzU5ZDk5NmM0YmI0ZWJkMTg4MjhjNDRmYzUyZDAxOTE4NzE3NDA1MjVmNDdhNGIwY2M4ZGEzMjVlZDhhYTY3NmIwZDBmNjI2ZTBhNzdmMDc2OTIxNzBhY2FjODA4MmY0MmZhYTdkYzdjZDEyM2U3MzBlMzFhODc5ODUyMDRjYWJjYmU2NjcwZDQzYTJkZDJiMmRkZWY1ZTA1MzkyZmMyMTNiYzUwNyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiYzYxMDNjMzMwYzFlZjcxOGMxNDFlNDdiOGZhODU5YmU0ZDViOTYyNTllN2QxNDIwNzBlY2Q0ODU4MzlkYmE1YTgzNjljMTdjMTExNDAzNWU1MzJkMTk1Yzc0ZjQ0YTA0NzZhMmQzZThhNGRhMjEwMDE2Y2FjZWQwZTM2N2NiODY3NzEwYTRiNWFhMmRmMmI4ZTVkYWY1ZmRjNjQ3ODA3ZDRkNWViYjZjNTZiOTc2M2NjZGFlNGRlYTMzMDhlYjBhYzJhODk1MDFjYjIwOWQyNjM5ZmE1YmY4N2NlNzkwNzQ3ZDNjYjJkMjk1ZTg0NTY0ZjJmNjM3ODI0ZjBjMTMwMjgxMjliMGFhNGE0MjJkMTYyMjgyIjoiMjMyOTFlNGEzMzA3ZThiYmI3NzY2MjNhYjM0ZTRhNWY0Y2M4YThkYiI6IjAyODAyZGNjZmE4ZGZhZjUyNzliZjBiNGEyOWJhMWIxNTc2MTFmYWVhYWY0MTliODkxOWQxNTk0MTkwMGMxMzM5ZTdlOTJlNmZhZTU2MmM1M2U2Y2M4ZTg0MTA0YjExMGJjZTAzYWQxODUyNWUzYzQ5YTBlYWRhZDVkM2YyOGYyNDRhOGVkODllZGJhZmJiNjg2Mjc3Y2ZhOGFlOTA5NzE0ZDZiMjhmNGJmOGUyOTNhYTA0YzQxZWZlN2MwYTgxMjY2ZDVjMDYxZTI1NzViZTAzMmFhNDY0Njc0ZmY3MTYyNjIxOWJkNzRjYzQ1ZjBlN2VkNGUzZmY5NmVlZTc1OGU4ZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDVfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyODoxNjoiMGQxMGY2NjFmMjk5NDBmNWVkMzlhYTI2MDk2NmRlYjQ3ODQzNjc5ZDJiNmZiMjViM2RlMzcwZjNhYzdjMTk5MTYzOTFmZDI1ZmI1MjdlYmZhNmE0YjRkZjQ1YTE3NTlkOTk2YzRiYjRlYmQxODgyOGM0NGZjNTJkMDE5MTg3MTc0MDUyNWY0N2E0YjBjYzhkYTMyNWVkOGFhNjc2YjBkMGY2MjZlMGE3N2YwNzY5MjE3MGFjYWM4MDgyZjQyZmFhN2RjN2NkMTIzZTczMGUzMWE4Nzk4NTIwNGNhYmNiZTY2NzBkNDNhMmRkMmIyZGRlZjVlMDUzOTJmYzIxM2JjNTA3IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJjNjEwM2MzMzBjMWVmNzE4YzE0MWU0N2I4ZmE4NTliZTRkNWI5NjI1OWU3ZDE0MjA3MGVjZDQ4NTgzOWRiYTVhODM2OWMxN2MxMTE0MDM1ZTUzMmQxOTVjNzRmNDRhMDQ3NmEyZDNlOGE0ZGEyMTAwMTZjYWNlZDBlMzY3Y2I4Njc3MTBhNGI1YWEyZGYyYjhlNWRhZjVmZGM2NDc4MDdkNGQ1ZWJiNmM1NmI5NzYzY2NkYWU0ZGVhMzMwOGViMGFjMmE4OTUwMWNiMjA5ZDI2MzlmYTViZjg3Y2U3OTA3NDdkM2NiMmQyOTVlODQ1NjRmMmY2Mzc4MjRmMGMxMzAyODEyOWIwYWE0YTQyMmQxNjIyODIiOiIyMzI5MWU0YTMzMDdlOGJiYjc3NjYyM2FiMzRlNGE1ZjRjYzhhOGRiIjoiMDI4MDJkY2NmYThkZmFmNTI3OWJmMGI0YTI5YmExYjE1NzYxMWZhZWFhZjQxOWI4OTE5ZDE1OTQxOTAwYzEzMzllN2U5MmU2ZmFlNTYyYzUzZTZjYzhlODQxMDRiMTEwYmNlMDNhZDE4NTI1ZTNjNDlhMGVhZGFkNWQzZjI4ZjI0NGE4ZWQ4OWVkYmFmYmI2ODYyNzdjZmE4YWU5MDk3MTRkNmIyOGY0YmY4ZTI5M2FhMDRjNDFlZmU3YzBhODEyNjZkNWMwNjFlMjU3NWJlMDMyYWE0NjQ2NzRmZjcxNjI2MjE5YmQ3NGNjNDVmMGU3ZWQ0ZTNmZjk2ZWVlNzU4ZThmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl8xCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyOToxNjoiMDRmMDU0OGM5NjI2YWIxZWJmMTI0NDkzNDc0MWQ5OWEwNjIyMGVmYTJhNTg1NmFhMGU3NTczMGIyZWM5NmFkYzg2YmU4OTRmYTI4MDNiNTNhNWU4NWQyNzZhY2JkMjlhYjgyM2Y4MGE3MzkxYmI1NGE1MDUxNjcyZmIwNGVlYjU0MyI6MTY6IjA0ODNlMGFlNDc5MTU1ODc3NDNmZjM0NTM2MmI1NTVkMzk2MmQ5OGJiNmYxNWY4NDhiNGM5MmIxNzcxY2E4ZWQxMDdkOGQzZWU2NWVjNDQ1MTdkZDBmYWE0ODFhMzg3ZTkwMmY3YTJlNzQ3YzI2OWU3ZWE0NDQ4MGJjNTM4YjhlNWIiOjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjBhMjBiNzc0YWRkYzJmYTUxMjQ1ZWQ3Y2I5ZGE2MDllNTBjYWM2NjM2YTUyNTQzZjk3NDU4ZWVkNzM0MGY4ZDUzZmZjNjQ5MThmOTQ5MDc4ZWUwM2VmNjBkNDJiNWZlYzI0NjA1MGJkNTUwNWNkOGNiNTk3YmFkM2M0ZTcxM2IwZWYzMDY0NGU3NmFkYWJiMGRlMDFhMTU2MWVmYjI1NTE1OGM3NGZjODAxZTZlOTE5ZTU4MWI0NmYwZjBkZGQwOGU0ZjM0Yzc4MTBiNWVkODMxOGY5MWQ3YzhjIjoiNWI0ZWEyZWY2MjljYzIyZjNiNTM4ZTAxNjkwNGI0N2IxZTQwYmZkNSI6IjA0YzBjZmFjZWMwNGU1YmFkYmVjZTE1OWE1YTExMDNmNjliM2YzMmJhNTkzY2I0Y2M0YjFiN2FiNDU1OTE2YTk2YTI3Y2QyNjc4ZWEwZjQ2YmEzN2Y3ZmM5Yzg2MzI1ZjI5NzMzYjM4OWYxZDk3ZjQzZTcyMDFjMGYzNDhmYzQ1ZmU0Mjg5MjMzNTM2MmVlZTAxOGI1YjE2MWYyZjkzOTMwMzEyMjVjNzEzMDEyYTU3NmJjODhlMjMwNTI0ODk4NjhkOTAxMGNiZjAzM2VjYzU2OGU4YmMxNTJiZGM1OWQ1NjBlNDEyOTE5MTVkMjg1NjUyMDhlMjJhZWVjOWVmODVkMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyOToxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwYTIwYjc3NGFkZGMyZmE1MTI0NWVkN2NiOWRhNjA5ZTUwY2FjNjYzNmE1MjU0M2Y5NzQ1OGVlZDczNDBmOGQ1M2ZmYzY0OTE4Zjk0OTA3OGVlMDNlZjYwZDQyYjVmZWMyNDYwNTBiZDU1MDVjZDhjYjU5N2JhZDNjNGU3MTNiMGVmMzA2NDRlNzZhZGFiYjBkZTAxYTE1NjFlZmIyNTUxNThjNzRmYzgwMWU2ZTkxOWU1ODFiNDZmMGYwZGRkMDhlNGYzNGM3ODEwYjVlZDgzMThmOTFkN2M4YyI6IjViNGVhMmVmNjI5Y2MyMmYzYjUzOGUwMTY5MDRiNDdiMWU0MGJmZDUiOiIwNGMwY2ZhY2VjMDRlNWJhZGJlY2UxNTlhNWExMTAzZjY5YjNmMzJiYTU5M2NiNGNjNGIxYjdhYjQ1NTkxNmE5NmEyN2NkMjY3OGVhMGY0NmJhMzdmN2ZjOWM4NjMyNWYyOTczM2IzODlmMWQ5N2Y0M2U3MjAxYzBmMzQ4ZmM0NWZlNDI4OTIzMzUzNjJlZWUwMThiNWIxNjFmMmY5MzkzMDMxMjI1YzcxMzAxMmE1NzZiYzg4ZTIzMDUyNDg5ODY4ZDkwMTBjYmYwMzNlY2M1NjhlOGJjMTUyYmRjNTlkNTYwZTQxMjkxOTE1ZDI4NTY1MjA4ZTIyYWVlYzllZjg1ZDEiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzIKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDI5OjE2OiIwNGYwNTQ4Yzk2MjZhYjFlYmYxMjQ0OTM0NzQxZDk5YTA2MjIwZWZhMmE1ODU2YWEwZTc1NzMwYjJlYzk2YWRjODZiZTg5NGZhMjgwM2I1M2E1ZTg1ZDI3NmFjYmQyOWFiODIzZjgwYTczOTFiYjU0YTUwNTE2NzJmYjA0ZWViNTQzIjoxNjoiMDQ4M2UwYWU0NzkxNTU4Nzc0M2ZmMzQ1MzYyYjU1NWQzOTYyZDk4YmI2ZjE1Zjg0OGI0YzkyYjE3NzFjYThlZDEwN2Q4ZDNlZTY1ZWM0NDUxN2RkMGZhYTQ4MWEzODdlOTAyZjdhMmU3NDdjMjY5ZTdlYTQ0NDgwYmM1MzhiOGU1YiI6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMmFhZmY2NjMxZjYyMWNlNjE1NzYwYTllYmNlOTRiYjMzMzA3N2FkODY0ODhjODYxZDRiNzZkMjljMWY0ODc0NmM2MTFhZTFlMDNjZWQ0NDQ1ZDdjZmExZmU1ZjYyZTFiM2YwODQ1MmJkZTNiNmVmODE5NzNiYWZiYjU3Zjk3YmNlZWY4NzM5ODUzOTViODI2MDU4OWFhODhjYjdkYjUwYWI0NjkyNjJlNTUxYmRjZDlhNTZmMjc1YTBhYzRmZTQ4NDcwMGMzNWYzZGJmMmI0NjllZGU4NjQ3NDFiODZmYTU5MTcyYTM2MGJhOTVhMDJlMTM5YmU1MGRkZmI3Y2YwYjQyZmFlYWJiZmJiYWE4NmE0NDk3Njk5YzRmMmRmZDViMDg0MDZhZjdlMTQxNDQ0MjdjMjUzZWMwZWZhMjBlYWY5YThiZThjZDQ5Y2UxZjFiYzRlOTNlNjE5Y2YyYWE4ZWQ0ZmIzOWJjODU5MGQwZjdiOTY0ODhmNzMxN2FjOWFiZjdiZWU0ZTNhMGU3MTUiOiI4MzE0NmE5ZTc4MjcyMmMyOGIwMTRmOThiNDI2N2JkYTJhYzk1MDRmIjoiMGEyMzE0MjUwY2Y1MmI2ZTRlOTA4ZGU1YjM1NjQ2YmNhYTI0MzYxZGE4MTYwZmIwZjkyNTc1OTBhYjNhY2U0MmIwZGMzZTc3YWQyZGI3YzIwM2EyMGJkOTUyZmJiNTZiMTU2NzA0NmVjZmFhOTMzZDdiMTAwMGMzZGU5ZmYwNWI3ZDk4OWJhNDZmZDQzYmM0YzJkMGEzOTg2YjdmZmExMzQ3MWQzN2ViNWI0N2Q2NDcwN2JkMjkwY2ZkNmE5ZjM5M2FkMDhlYzFlM2JkNzFiYjU3OTI2MTUwMzVjZGFmMmQ4OTI5YWVkM2JlMDk4Mzc5Mzc3ZTc3N2NlNzlhYWE0NzczIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl8yICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI5OjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjJhYWZmNjYzMWY2MjFjZTYxNTc2MGE5ZWJjZTk0YmIzMzMwNzdhZDg2NDg4Yzg2MWQ0Yjc2ZDI5YzFmNDg3NDZjNjExYWUxZTAzY2VkNDQ0NWQ3Y2ZhMWZlNWY2MmUxYjNmMDg0NTJiZGUzYjZlZjgxOTczYmFmYmI1N2Y5N2JjZWVmODczOTg1Mzk1YjgyNjA1ODlhYTg4Y2I3ZGI1MGFiNDY5MjYyZTU1MWJkY2Q5YTU2ZjI3NWEwYWM0ZmU0ODQ3MDBjMzVmM2RiZjJiNDY5ZWRlODY0NzQxYjg2ZmE1OTE3MmEzNjBiYTk1YTAyZTEzOWJlNTBkZGZiN2NmMGI0MmZhZWFiYmZiYmFhODZhNDQ5NzY5OWM0ZjJkZmQ1YjA4NDA2YWY3ZTE0MTQ0NDI3YzI1M2VjMGVmYTIwZWFmOWE4YmU4Y2Q0OWNlMWYxYmM0ZTkzZTYxOWNmMmFhOGVkNGZiMzliYzg1OTBkMGY3Yjk2NDg4ZjczMTdhYzlhYmY3YmVlNGUzYTBlNzE1IjoiODMxNDZhOWU3ODI3MjJjMjhiMDE0Zjk4YjQyNjdiZGEyYWM5NTA0ZiI6IjBhMjMxNDI1MGNmNTJiNmU0ZTkwOGRlNWIzNTY0NmJjYWEyNDM2MWRhODE2MGZiMGY5MjU3NTkwYWIzYWNlNDJiMGRjM2U3N2FkMmRiN2MyMDNhMjBiZDk1MmZiYjU2YjE1NjcwNDZlY2ZhYTkzM2Q3YjEwMDBjM2RlOWZmMDViN2Q5ODliYTQ2ZmQ0M2JjNGMyZDBhMzk4NmI3ZmZhMTM0NzFkMzdlYjViNDdkNjQ3MDdiZDI5MGNmZDZhOWYzOTNhZDA4ZWMxZTNiZDcxYmI1NzkyNjE1MDM1Y2RhZjJkODkyOWFlZDNiZTA5ODM3OTM3N2U3NzdjZTc5YWFhNDc3MyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjk6MTY6IjA0ZjA1NDhjOTYyNmFiMWViZjEyNDQ5MzQ3NDFkOTlhMDYyMjBlZmEyYTU4NTZhYTBlNzU3MzBiMmVjOTZhZGM4NmJlODk0ZmEyODAzYjUzYTVlODVkMjc2YWNiZDI5YWI4MjNmODBhNzM5MWJiNTRhNTA1MTY3MmZiMDRlZWI1NDMiOjE2OiIwNDgzZTBhZTQ3OTE1NTg3NzQzZmYzNDUzNjJiNTU1ZDM5NjJkOThiYjZmMTVmODQ4YjRjOTJiMTc3MWNhOGVkMTA3ZDhkM2VlNjVlYzQ0NTE3ZGQwZmFhNDgxYTM4N2U5MDJmN2EyZTc0N2MyNjllN2VhNDQ0ODBiYzUzOGI4ZTViIjoxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwZjYxOTVkMDRhNmU2ZmM3ZTJjOTYwMGRiZjg0MGMzOWVhOGQ0ZDYyNGZkNTM1MDcwMTZiMGUyNjg1OGE1ZTBhZWNkN2FkYTU0M2FlNWMwYWIzYTYyNTk5Y2JhMGE1NGU2YmY0NDZlMjYyZjk4OTk3OGY5ZGRmNWU5YTQxIjoiYTg3YjhhZWQwN2Q3YjhlMmRhZjE0ZGRjYTRhYzY4YzRkMGFhYmZmOCI6IjA4NmRmNmI1MDAwOThjMTIwZjI0ZmY4NDIzZjcyN2Q5YzYxYTVjOTAwN2QzYjZhMzFjZTdjZjhmM2NiZWMxYTI2YmIyMGUyYmQ0YTA0Njc5MzI5OWUwM2UzN2EyMWI0MDE5NGZiMDQ1ZjkwYjE4YmYyMGE0Nzk5MmNjZDc5OWNmOWMwNTljMjk5YzA1MjY4NTQ5NTRhYWRlOGE2YWQ5ZDk3ZWM5MWExMTQ1MzgzZjQyNDY4YjIzMWY0ZDcyZjIzNzA2ZDk4NTNjM2ZhNDNjZThhY2U4YmZlNzQ4NDk4N2ExZWM2YTE2YzhkYWY4MWY3YzhiZjQyNzc0NzA3YTlkZjQ1NiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyOToxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwZjYxOTVkMDRhNmU2ZmM3ZTJjOTYwMGRiZjg0MGMzOWVhOGQ0ZDYyNGZkNTM1MDcwMTZiMGUyNjg1OGE1ZTBhZWNkN2FkYTU0M2FlNWMwYWIzYTYyNTk5Y2JhMGE1NGU2YmY0NDZlMjYyZjk4OTk3OGY5ZGRmNWU5YTQxIjoiYTg3YjhhZWQwN2Q3YjhlMmRhZjE0ZGRjYTRhYzY4YzRkMGFhYmZmOCI6IjA4NmRmNmI1MDAwOThjMTIwZjI0ZmY4NDIzZjcyN2Q5YzYxYTVjOTAwN2QzYjZhMzFjZTdjZjhmM2NiZWMxYTI2YmIyMGUyYmQ0YTA0Njc5MzI5OWUwM2UzN2EyMWI0MDE5NGZiMDQ1ZjkwYjE4YmYyMGE0Nzk5MmNjZDc5OWNmOWMwNTljMjk5YzA1MjY4NTQ5NTRhYWRlOGE2YWQ5ZDk3ZWM5MWExMTQ1MzgzZjQyNDY4YjIzMWY0ZDcyZjIzNzA2ZDk4NTNjM2ZhNDNjZThhY2U4YmZlNzQ4NDk4N2ExZWM2YTE2YzhkYWY4MWY3YzhiZjQyNzc0NzA3YTlkZjQ1NiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfNAorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMjk6MTY6IjA0ZjA1NDhjOTYyNmFiMWViZjEyNDQ5MzQ3NDFkOTlhMDYyMjBlZmEyYTU4NTZhYTBlNzU3MzBiMmVjOTZhZGM4NmJlODk0ZmEyODAzYjUzYTVlODVkMjc2YWNiZDI5YWI4MjNmODBhNzM5MWJiNTRhNTA1MTY3MmZiMDRlZWI1NDMiOjE2OiIwNDgzZTBhZTQ3OTE1NTg3NzQzZmYzNDUzNjJiNTU1ZDM5NjJkOThiYjZmMTVmODQ4YjRjOTJiMTc3MWNhOGVkMTA3ZDhkM2VlNjVlYzQ0NTE3ZGQwZmFhNDgxYTM4N2U5MDJmN2EyZTc0N2MyNjllN2VhNDQ0ODBiYzUzOGI4ZTViIjoxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIzMzdkMjVmZTk4MTBlYmNhMGRlNGQ0NjU4ZDNjZWI4ZTBmZTRjMDY2YWJhM2JjYzQ4YjEwNWQzYmY3ZTAyNTdkNDRmZWNlYTY1OTZmNGQwYzU5YTA4NDAyODMzNjc4ZjcwNjIwZjkxMzhkZmViN2RlZDkwNWU0YTZkNWYwNWM0NzNkNTU5MzY2NTJlMmE1ZGY0M2MwY2ZkYTdiYWNhZjMwODdmNDUyNGIwNmNmNDIxNTdkMDE1Mzk3MzlmN2ZkZGVjOWQ1ODEyNWRmMzFhMzJlYWIwNmMxOWI3MWYxZDViZiI6ImEzNzkzMmY4YTc0OTRhOTQyZDZmNzY3NDM4ZTcyNGQ2ZDBjMGVmMTgiOiIwYjViMTFhZDU0OTg2M2ZmYTljNTFhMTRhMTEwNmMyYTcyY2M4YjY0NmU1YzcyNjI1MDk3ODYxMDVhOTg0Nzc2NTM0Y2E5YjU0YzFjYzY0YmYyZDVhNDRmZDdlOGE2OWRiNjk5ZDVlYTUyMDg3YTQ3NDhmZDJhYmMxYWZlZDFlNWQ2ZjdjODkwMjU1MzBiZGFhMjIxM2Q3ZTAzMGZhNTVkZjZmMzRiY2YxY2U0NmQyZWRmNGUzYWU0ZjNiMDE4OTFhMDY4YzllM2E0NGJiYzQzMTMzZWRhZDZlY2I5ZjM1NDAwYzQyNTJhNTc2MmQ2NTc0NGI5OWNiOWY0YzU1OTMyOWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA2XzQgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMjk6MTY6IjE2NGNhMzFjZmY2MDlmM2EwZTcxMDFiMDM5ZjJlNGZlNmRkMzc1MTlhYjk4NTk4ZDE3OWUxNzQ5OTY1OTgwNzFmNDdkM2EwNDU1OTE1OGQ3YmUzNzNjZjFhYTUzZjBhYTZlZjA5MDM5ZTU2NzhjMmE0YzYzOTAwNTE0YzhjNGY4YWFlZDVkZTEyYTVmMTBiMDljMzExYWY4YzBmZmI1YjdhMjk3ZjJlZmM2M2I4ZDZiMDUxMDkzMWYwYjk4ZTQ4YmY1ZmM2ZWM0ZTdiOGRiMWZmYWViMDhjMzhlMDJhZGI4ZjAzYTQ4MjI5Yzk5ZTk2OTQzMWY2MWNiOGM0ZGM2OThkMSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMzM3ZDI1ZmU5ODEwZWJjYTBkZTRkNDY1OGQzY2ViOGUwZmU0YzA2NmFiYTNiY2M0OGIxMDVkM2JmN2UwMjU3ZDQ0ZmVjZWE2NTk2ZjRkMGM1OWEwODQwMjgzMzY3OGY3MDYyMGY5MTM4ZGZlYjdkZWQ5MDVlNGE2ZDVmMDVjNDczZDU1OTM2NjUyZTJhNWRmNDNjMGNmZGE3YmFjYWYzMDg3ZjQ1MjRiMDZjZjQyMTU3ZDAxNTM5NzM5ZjdmZGRlYzlkNTgxMjVkZjMxYTMyZWFiMDZjMTliNzFmMWQ1YmYiOiJhMzc5MzJmOGE3NDk0YTk0MmQ2Zjc2NzQzOGU3MjRkNmQwYzBlZjE4IjoiMGI1YjExYWQ1NDk4NjNmZmE5YzUxYTE0YTExMDZjMmE3MmNjOGI2NDZlNWM3MjYyNTA5Nzg2MTA1YTk4NDc3NjUzNGNhOWI1NGMxY2M2NGJmMmQ1YTQ0ZmQ3ZThhNjlkYjY5OWQ1ZWE1MjA4N2E0NzQ4ZmQyYWJjMWFmZWQxZTVkNmY3Yzg5MDI1NTMwYmRhYTIyMTNkN2UwMzBmYTU1ZGY2ZjM0YmNmMWNlNDZkMmVkZjRlM2FlNGYzYjAxODkxYTA2OGM5ZTNhNDRiYmM0MzEzM2VkYWQ2ZWNiOWYzNTQwMGM0MjUyYTU3NjJkNjU3NDRiOTljYjlmNGM1NTkzMjlmIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl81Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyOToxNjoiMDRmMDU0OGM5NjI2YWIxZWJmMTI0NDkzNDc0MWQ5OWEwNjIyMGVmYTJhNTg1NmFhMGU3NTczMGIyZWM5NmFkYzg2YmU4OTRmYTI4MDNiNTNhNWU4NWQyNzZhY2JkMjlhYjgyM2Y4MGE3MzkxYmI1NGE1MDUxNjcyZmIwNGVlYjU0MyI6MTY6IjA0ODNlMGFlNDc5MTU1ODc3NDNmZjM0NTM2MmI1NTVkMzk2MmQ5OGJiNmYxNWY4NDhiNGM5MmIxNzcxY2E4ZWQxMDdkOGQzZWU2NWVjNDQ1MTdkZDBmYWE0ODFhMzg3ZTkwMmY3YTJlNzQ3YzI2OWU3ZWE0NDQ4MGJjNTM4YjhlNWIiOjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg0ZWM1MDJiMDcyZTgyODc3ODlkOGY5MjM1ODI5ZWEzYjE4N2FmZDRkNGM3ODU2MTFiZGE1ZjllYjNjYjk2NzE3ZWZhNzAwNzIyN2YxYzA4Y2JjYjk3MmU2NjcyMzVlMGZiN2Q0MzFhNjU3MDMyNmQyZWNjZTM1YWRiMzczZGM3NTNiM2JlNWY4MjliODkxNzU0OTMxOTNmYWIxNmJhZGI0MTM3MWIzYWFjMGFlNjcwMDc2ZjI0YmVmNDIwYzEzNWFkZDdjZWU4ZDM1ZmJjOTQ0ZDc5ZmFmYjllMzA3YTEzYjBmNTU2Y2I2NTRhMDZmOTczZWQyMjY3MjMzMDE5N2VmNWE3NDhiZjgyNmE1ZGIyMzgzYTI1MzY0YjY4NmI5MzcyYmIyMzM5YWViMWFjOWU5ODg5MzI3ZDAxNmYxNjcwNzc2ZGIwNjIwMWFkYmRjYWY4YTVlM2I3NGUxMDhiNzMiOiI3Yjc5MGMxZDYyZjdiODRlOTRkZjZhZjI4OTE3Y2Y1NzEwMTgxMTBlIjoiMDJkNzFmYTliNTNlNDY1NGZlZmI3ZjA4Mzg1Y2Y2YjBhZTNhODE3OTQyZWJmNjZjMzVhYzY3ZjBiMDY5OTUyYTNjZTljN2UxZjFiMDJlNDgwYTk1MDA4MzZkZTVkNjRjZGI3ZWNkZTA0NTQyZjdhNzk5ODg3ODdlMjRjMmJhMDVmNWZkNDgyYzAyM2VkNWMzMGUwNDgzOWRjNDRiZWQyYTNhM2E0ZmVlMDExMTNjODkxYTQ3ZDMyZWI4MDI1YzI4Y2IwNTBiNWNkYjU3NmM3MGZlNzZlZjUyMzQwNWMwODQxN2ZhZjM1MGIwMzdhNDNjMzc5MzM5ZmNiMThkM2EzNTZiIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl81ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDI5OjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg0ZWM1MDJiMDcyZTgyODc3ODlkOGY5MjM1ODI5ZWEzYjE4N2FmZDRkNGM3ODU2MTFiZGE1ZjllYjNjYjk2NzE3ZWZhNzAwNzIyN2YxYzA4Y2JjYjk3MmU2NjcyMzVlMGZiN2Q0MzFhNjU3MDMyNmQyZWNjZTM1YWRiMzczZGM3NTNiM2JlNWY4MjliODkxNzU0OTMxOTNmYWIxNmJhZGI0MTM3MWIzYWFjMGFlNjcwMDc2ZjI0YmVmNDIwYzEzNWFkZDdjZWU4ZDM1ZmJjOTQ0ZDc5ZmFmYjllMzA3YTEzYjBmNTU2Y2I2NTRhMDZmOTczZWQyMjY3MjMzMDE5N2VmNWE3NDhiZjgyNmE1ZGIyMzgzYTI1MzY0YjY4NmI5MzcyYmIyMzM5YWViMWFjOWU5ODg5MzI3ZDAxNmYxNjcwNzc2ZGIwNjIwMWFkYmRjYWY4YTVlM2I3NGUxMDhiNzMiOiI3Yjc5MGMxZDYyZjdiODRlOTRkZjZhZjI4OTE3Y2Y1NzEwMTgxMTBlIjoiMDJkNzFmYTliNTNlNDY1NGZlZmI3ZjA4Mzg1Y2Y2YjBhZTNhODE3OTQyZWJmNjZjMzVhYzY3ZjBiMDY5OTUyYTNjZTljN2UxZjFiMDJlNDgwYTk1MDA4MzZkZTVkNjRjZGI3ZWNkZTA0NTQyZjdhNzk5ODg3ODdlMjRjMmJhMDVmNWZkNDgyYzAyM2VkNWMzMGUwNDgzOWRjNDRiZWQyYTNhM2E0ZmVlMDExMTNjODkxYTQ3ZDMyZWI4MDI1YzI4Y2IwNTBiNWNkYjU3NmM3MGZlNzZlZjUyMzQwNWMwODQxN2ZhZjM1MGIwMzdhNDNjMzc5MzM5ZmNiMThkM2EzNTZiIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgNl82Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAyOToxNjoiMDRmMDU0OGM5NjI2YWIxZWJmMTI0NDkzNDc0MWQ5OWEwNjIyMGVmYTJhNTg1NmFhMGU3NTczMGIyZWM5NmFkYzg2YmU4OTRmYTI4MDNiNTNhNWU4NWQyNzZhY2JkMjlhYjgyM2Y4MGE3MzkxYmI1NGE1MDUxNjcyZmIwNGVlYjU0MyI6MTY6IjA0ODNlMGFlNDc5MTU1ODc3NDNmZjM0NTM2MmI1NTVkMzk2MmQ5OGJiNmYxNWY4NDhiNGM5MmIxNzcxY2E4ZWQxMDdkOGQzZWU2NWVjNDQ1MTdkZDBmYWE0ODFhMzg3ZTkwMmY3YTJlNzQ3YzI2OWU3ZWE0NDQ4MGJjNTM4YjhlNWIiOjE2OiIxNjRjYTMxY2ZmNjA5ZjNhMGU3MTAxYjAzOWYyZTRmZTZkZDM3NTE5YWI5ODU5OGQxNzllMTc0OTk2NTk4MDcxZjQ3ZDNhMDQ1NTkxNThkN2JlMzczY2YxYWE1M2YwYWE2ZWYwOTAzOWU1Njc4YzJhNGM2MzkwMDUxNGM4YzRmOGFhZWQ1ZGUxMmE1ZjEwYjA5YzMxMWFmOGMwZmZiNWI3YTI5N2YyZWZjNjNiOGQ2YjA1MTA5MzFmMGI5OGU0OGJmNWZjNmVjNGU3YjhkYjFmZmFlYjA4YzM4ZTAyYWRiOGYwM2E0ODIyOWM5OWU5Njk0MzFmNjFjYjhjNGRjNjk4ZDEiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijk5MDZkODlmOTdhOWZkZWRkM2NjZDgyNGRiNjg3MzI2ZjMwZjAwYWEyNWE3ZmNhMmFmY2IzYjBmODZjZDQxZTczZjBlOGZmN2QyZDgzZjU5ZTI4ZWQzMWE1YTBkNTUxNTIzMzc0ZGUyMmU0YzdlOGZmNTY4YjM4NmVlM2RjNDExNjNmMTBiZjY3YmIwMDYyNjFjOTA4MmY5YWY5MGJmMWQ5MDQ5YTZiOWZhZTcxYzdmODRmYmU2ZTU1ZjAyNzg5ZGU3NzRmMjMwZjExNTAyNmE0YjRlOTZjNTViMDRhOTVkYTNhYWNiYjJjZWNlOGY4MTc2NGExZjFjOTk1MTU0MTEwODdjZjdkMzRhZWRlZDA5MzJjMTgzIjoiZmJiZTA1OTAyNWI2OWI4OWZiMTRhZTIyODllN2FhYWZlNjBjMGZjZCI6IjBhNDBhMTZlMmZlMmIzOGQxZGY5MDU0NjE2N2NmOTQ2OWM5ZTNjMzY4MWEzNDQyYjRiMmMyZjU4MWRlYjM4NWNlOTlmYzYxODhiYjAyYTg0MWQ1NmU3NmQzMDE4OTFlMjQ1NjA1NTBmY2MyYTI2YjU1ZjRjY2IyNmQ4MzdkMzUwYTE1NGJjYWNhODM5MmQ5OGZhNjc5NTllOTcyN2I3OGNhZDAzMjY5ZjU2OTY4ZmM1NmI2OGJkNjc5OTI2ZDgzY2M5Y2IyMTU1NTA2NDVjY2RhMzFjNzYwZmYzNTg4ODk0M2QyZDhhMWQzNTFlODFlNWQwN2I4NjE4MmU3NTEwODFlZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDZfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAyOToxNjoiMTY0Y2EzMWNmZjYwOWYzYTBlNzEwMWIwMzlmMmU0ZmU2ZGQzNzUxOWFiOTg1OThkMTc5ZTE3NDk5NjU5ODA3MWY0N2QzYTA0NTU5MTU4ZDdiZTM3M2NmMWFhNTNmMGFhNmVmMDkwMzllNTY3OGMyYTRjNjM5MDA1MTRjOGM0ZjhhYWVkNWRlMTJhNWYxMGIwOWMzMTFhZjhjMGZmYjViN2EyOTdmMmVmYzYzYjhkNmIwNTEwOTMxZjBiOThlNDhiZjVmYzZlYzRlN2I4ZGIxZmZhZWIwOGMzOGUwMmFkYjhmMDNhNDgyMjljOTllOTY5NDMxZjYxY2I4YzRkYzY5OGQxIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI5OTA2ZDg5Zjk3YTlmZGVkZDNjY2Q4MjRkYjY4NzMyNmYzMGYwMGFhMjVhN2ZjYTJhZmNiM2IwZjg2Y2Q0MWU3M2YwZThmZjdkMmQ4M2Y1OWUyOGVkMzFhNWEwZDU1MTUyMzM3NGRlMjJlNGM3ZThmZjU2OGIzODZlZTNkYzQxMTYzZjEwYmY2N2JiMDA2MjYxYzkwODJmOWFmOTBiZjFkOTA0OWE2YjlmYWU3MWM3Zjg0ZmJlNmU1NWYwMjc4OWRlNzc0ZjIzMGYxMTUwMjZhNGI0ZTk2YzU1YjA0YTk1ZGEzYWFjYmIyY2VjZThmODE3NjRhMWYxYzk5NTE1NDExMDg3Y2Y3ZDM0YWVkZWQwOTMyYzE4MyI6ImZiYmUwNTkwMjViNjliODlmYjE0YWUyMjg5ZTdhYWFmZTYwYzBmY2QiOiIwYTQwYTE2ZTJmZTJiMzhkMWRmOTA1NDYxNjdjZjk0NjljOWUzYzM2ODFhMzQ0MmI0YjJjMmY1ODFkZWIzODVjZTk5ZmM2MTg4YmIwMmE4NDFkNTZlNzZkMzAxODkxZTI0NTYwNTUwZmNjMmEyNmI1NWY0Y2NiMjZkODM3ZDM1MGExNTRiY2FjYTgzOTJkOThmYTY3OTU5ZTk3MjdiNzhjYWQwMzI2OWY1Njk2OGZjNTZiNjhiZDY3OTkyNmQ4M2NjOWNiMjE1NTUwNjQ1Y2NkYTMxYzc2MGZmMzU4ODg5NDNkMmQ4YTFkMzUxZTgxZTVkMDdiODYxODJlNzUxMDgxZWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMwOjE2OiIwN2VlZmI0MjRiMGUzYTQwZTQyMDhlZTVhZmIyODBiMjIzMTczMDgxMTRkZGUwYjRiNjRmNzMwMTg0ZWM2OGRhNmNlMjg2N2E5ZjQ4ZWQ3NzI2ZDVlMjYxNGVkMDRhNTQxMDczNmM4YzcxNGVlNzAyNDc0Mjk4YzYyOTJhZjA3NTM1IjoxNjoiMDcwODMwZGJmOTQ3ZWFjMDIyOGRlMjYzMTRiNTliNjY5OTRjYzYwZTgzNjBlNzVkMzg3NjI5OGY4ZjhhN2QxNDFkYTA2NGU1Y2EwMjZhOTczZTI4ZjI1NDczOGNlZTY2OWM3MjFiMDM0Y2I1ZjhlMjQ0ZGFkZDdjZDFlMTU5ZDU0NyI6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOWVhZDBlMDE5NDU2NDA2NzRlYjQxY2FkNDM1ZTIzNzRlYWVmYThhZDcxOTdkOTc5MTNjNDQ5NTdkOGQ4M2Y0MGQ3NmVlNjBlMzliZjljMGY5ZWFmMzAyMTQyMWEwNzRkMWFkZTk2MmM2ZTlkM2RjM2JiMTc0ZmU0ZGZlNjUyYjA5MTE1NDk1YjhmZDI3OTQxNzQwMjBhMDYwMmI1Y2E1MTg0OGNmYzk2Y2U1ZWI1N2ZjMGEyYWRjMWRkYTM2YTdjYzQ1MjY0MWExNDkxMWIzN2U0NWJmYTExZGFhNWM3ZWNkYjc0ZjZkMDEwMGQxZDNlMzllNzUyODAwZTIwMzM5N2RlMDIzMzA3N2I5YTg4ODU1NTM3ZmFlOTI3ZjkyNDM4MGQ3ODBmOThlMThkY2ZmMzljNWVhNzQxYjE3ZDZmZGQxODg1YmM5ZDU4MTQ4MmQ3NzFjZWI1NjJkNzhhOGJmODhmMGM3NWIxMTM2M2U1ZTM2Y2Q0NzljZWIwNTQ1ZjlkYTg0MjAzZTBlNmU1MDgzNzVjYzllODQ0Yjg4YjdhYzdhMGEyMDFlYTBmMWJlZTlhMmM1Nzc5MjBjYTAyYzAxYjlkODMyMGU5NzRhNTZmNGVmYjU3NjNiOTYyNTVhYmJmODAzN2JmMTgwMmNmMDE4ZjU2Mzc5NDkzZTU2OWE5IjoiYjc4NjdhNTk5NThjYjU0MzI4Zjg3NzVlNjU0NmVjMDZkMjdlYWE1MCI6IjE4N2YzOTA3MjNjODkwMjU5MWYwMTU0YmFlNmQ0ZWNiZmZlMDY3ZjBlOGI3OTU0NzZlYTRmNGQ1MWNjYzgxMDUyMGJiM2NhOWJjYTdkMGIxZjJlYThhMTdkODczZmEyNzU3MGFjZDY0MmUzODA4NTYxY2I5ZTk3NWNjZmQ4MGIyM2RjNTc3MWNkYjMzMDZhNWYyMzE1OWRhY2JkM2FhMmRiOTNkNDZkNzY2ZTA5ZWQxNWQ5MDBhZDg5N2E4ZDI3NGRjMjZiNDdlOTk0YTI3ZTk3ZTIyNjhhNzY2NTMzYWU0YjVlNDJhMmZjYWY3NTVjMWM0Nzk0YjI5NGM2MDU1NTgyMyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMDoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI5ZWFkMGUwMTk0NTY0MDY3NGViNDFjYWQ0MzVlMjM3NGVhZWZhOGFkNzE5N2Q5NzkxM2M0NDk1N2Q4ZDgzZjQwZDc2ZWU2MGUzOWJmOWMwZjllYWYzMDIxNDIxYTA3NGQxYWRlOTYyYzZlOWQzZGMzYmIxNzRmZTRkZmU2NTJiMDkxMTU0OTViOGZkMjc5NDE3NDAyMGEwNjAyYjVjYTUxODQ4Y2ZjOTZjZTVlYjU3ZmMwYTJhZGMxZGRhMzZhN2NjNDUyNjQxYTE0OTExYjM3ZTQ1YmZhMTFkYWE1YzdlY2RiNzRmNmQwMTAwZDFkM2UzOWU3NTI4MDBlMjAzMzk3ZGUwMjMzMDc3YjlhODg4NTU1MzdmYWU5MjdmOTI0MzgwZDc4MGY5OGUxOGRjZmYzOWM1ZWE3NDFiMTdkNmZkZDE4ODViYzlkNTgxNDgyZDc3MWNlYjU2MmQ3OGE4YmY4OGYwYzc1YjExMzYzZTVlMzZjZDQ3OWNlYjA1NDVmOWRhODQyMDNlMGU2ZTUwODM3NWNjOWU4NDRiODhiN2FjN2EwYTIwMWVhMGYxYmVlOWEyYzU3NzkyMGNhMDJjMDFiOWQ4MzIwZTk3NGE1NmY0ZWZiNTc2M2I5NjI1NWFiYmY4MDM3YmYxODAyY2YwMThmNTYzNzk0OTNlNTY5YTkiOiJiNzg2N2E1OTk1OGNiNTQzMjhmODc3NWU2NTQ2ZWMwNmQyN2VhYTUwIjoiMTg3ZjM5MDcyM2M4OTAyNTkxZjAxNTRiYWU2ZDRlY2JmZmUwNjdmMGU4Yjc5NTQ3NmVhNGY0ZDUxY2NjODEwNTIwYmIzY2E5YmNhN2QwYjFmMmVhOGExN2Q4NzNmYTI3NTcwYWNkNjQyZTM4MDg1NjFjYjllOTc1Y2NmZDgwYjIzZGM1NzcxY2RiMzMwNmE1ZjIzMTU5ZGFjYmQzYWEyZGI5M2Q0NmQ3NjZlMDllZDE1ZDkwMGFkODk3YThkMjc0ZGMyNmI0N2U5OTRhMjdlOTdlMjI2OGE3NjY1MzNhZTRiNWU0MmEyZmNhZjc1NWMxYzQ3OTRiMjk0YzYwNTU1ODIzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgN18yCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAzMDoxNjoiMDdlZWZiNDI0YjBlM2E0MGU0MjA4ZWU1YWZiMjgwYjIyMzE3MzA4MTE0ZGRlMGI0YjY0ZjczMDE4NGVjNjhkYTZjZTI4NjdhOWY0OGVkNzcyNmQ1ZTI2MTRlZDA0YTU0MTA3MzZjOGM3MTRlZTcwMjQ3NDI5OGM2MjkyYWYwNzUzNSI6MTY6IjA3MDgzMGRiZjk0N2VhYzAyMjhkZTI2MzE0YjU5YjY2OTk0Y2M2MGU4MzYwZTc1ZDM4NzYyOThmOGY4YTdkMTQxZGEwNjRlNWNhMDI2YTk3M2UyOGYyNTQ3MzhjZWU2NjljNzIxYjAzNGNiNWY4ZTI0NGRhZGQ3Y2QxZTE1OWQ1NDciOjE2OiIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxOGFkMTI2NDdjZWZhYTBjNGIzMTg4YjIyMWM1MTUzODY3NTliOTNmMDIwMjRiMjVhYjkyNDJmODM1N2Q4ZjNmZDQ5NjQwZWU1ZTY0M2VhZjZjNjRkZWVmYTcwODk3MjdjOGZmMDM5OTMzMzM5MTVjNmVmMjFiZjU5NzViNmU1MGQxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhYjMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjhkODBkMmQwOGRiZDE5YzE1NGRmM2YxNDY3M2ExNGJkMDM3MzUyMzFmMjRlODZiZjE1M2QwZTY5ZTc0Y2JmZjdiMTgzNmU2NjRkZTgzZjY4MDEyNDM3MGZjMGY5NmM5YjY1YzA3YTM2NmI2NDRjNGFiMyI6IjBjMDk1ODIyNjZkZjA4NjMxMDgyMWJhN2UxOGRmNjRkZmVlNmRlMDkiOiIxMGZkODk3NjhhNjBhNjc3ODhhYmI1ODU2YTc4N2M4NTYxZjNlZGNmOWE4M2U4OThmN2RjODdhYjhjY2U3OTQyOWI0M2U1NjkwNjk0MWE4ODYxOTRmMTM3ZTU5MWZlN2MzMzk1NTUzNjFmYmJlMWYyNGZlYjJkNGJjZGI4MDYwMWYzMDk2YmM5MTMyZGVlYTYwYWUxMzA4MmY0NGY5YWQ0MWNkNjI4OTM2YTRkNTExNzZlNDJmYzU5Y2I3NmRiODE1Y2U1YWI0ZGI5OWExMDRhYWZlYTY4ZjVkMzMwMzI5ZWJmMjU4ZDRlZGUxNjA2NGJkMWQwMDM5M2Q1ZTE1NzBlYjgiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzA6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiOGQ4MGQyZDA4ZGJkMTljMTU0ZGYzZjE0NjczYTE0YmQwMzczNTIzMWYyNGU4NmJmMTUzZDBlNjllNzRjYmZmN2IxODM2ZTY2NGRlODNmNjgwMTI0MzcwZmMwZjk2YzliNjVjMDdhMzY2YjY0NGM0YWIzIjoiMGMwOTU4MjI2NmRmMDg2MzEwODIxYmE3ZTE4ZGY2NGRmZWU2ZGUwOSI6IjEwZmQ4OTc2OGE2MGE2Nzc4OGFiYjU4NTZhNzg3Yzg1NjFmM2VkY2Y5YTgzZTg5OGY3ZGM4N2FiOGNjZTc5NDI5YjQzZTU2OTA2OTQxYTg4NjE5NGYxMzdlNTkxZmU3YzMzOTU1NTM2MWZiYmUxZjI0ZmViMmQ0YmNkYjgwNjAxZjMwOTZiYzkxMzJkZWVhNjBhZTEzMDgyZjQ0ZjlhZDQxY2Q2Mjg5MzZhNGQ1MTE3NmU0MmZjNTljYjc2ZGI4MTVjZTVhYjRkYjk5YTEwNGFhZmVhNjhmNWQzMzAzMjllYmYyNThkNGVkZTE2MDY0YmQxZDAwMzkzZDVlMTU3MGViOCI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzA6MTY6IjA3ZWVmYjQyNGIwZTNhNDBlNDIwOGVlNWFmYjI4MGIyMjMxNzMwODExNGRkZTBiNGI2NGY3MzAxODRlYzY4ZGE2Y2UyODY3YTlmNDhlZDc3MjZkNWUyNjE0ZWQwNGE1NDEwNzM2YzhjNzE0ZWU3MDI0NzQyOThjNjI5MmFmMDc1MzUiOjE2OiIwNzA4MzBkYmY5NDdlYWMwMjI4ZGUyNjMxNGI1OWI2Njk5NGNjNjBlODM2MGU3NWQzODc2Mjk4ZjhmOGE3ZDE0MWRhMDY0ZTVjYTAyNmE5NzNlMjhmMjU0NzM4Y2VlNjY5YzcyMWIwMzRjYjVmOGUyNDRkYWRkN2NkMWUxNTlkNTQ3IjoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4MDg0MDVjZGZjMWE1OGI5YmIwMzk3YzcyMDcyMmE4MWZmZmI3NjI3OGYzMzU5MTdlZjljNDczODE0YjNlMDE2YmEyOTczY2QyNzY1ZjhmM2Y4MmQ2Y2MzOGFhN2Y4NTUxODI3ZmU4ZDFlMzg4NGI3ZTYxYzk0NjgzYjhmODJmMTg0M2JkYWUyMjU3ZWVlYzk4MTJhZDRjMmNmMjgzYzM0ZTBiMGFlMGZlM2NiOTkwY2Y4OGYyZWY5IjoiMjgwMzlkY2ZlMTA2ZDNiODI5NjYxMTI1OGM0YTU2NjUxYzllOTJkZCI6IjJiMzFmZGU5OTg1OWI5NzdhYTA5NTg2ZDhlMjc0NjYyYjI1YTJhNjQwNjQwYjQ1N2Y1OTQwNTFjYjFlN2Y3YTkxMTg2NTQ1NTI0MjkyNmNmODhmZTgwZGZhM2E3NWJhOTY4OTg0NGExMWU2MzRhODJiMDc1YWZiZDY5YzEyYTBkZjlkMjVmODRhZDQ5NDVkZjNkYzhmZTkwYzNjZWZkZjI2ZTk1ZjA1MzQzMDRiNWJkYmEyMGQzZTU2NDBhMmViZmI4OThhYWMzNWFlNDBmMjZmY2U1NTYzYzJmOWYyNGYzMDQyYWY3NmYzYzcwNzJkNjg3YmJmYjk1OWE4ODQ2MGFmMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfMyAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMDoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4MDg0MDVjZGZjMWE1OGI5YmIwMzk3YzcyMDcyMmE4MWZmZmI3NjI3OGYzMzU5MTdlZjljNDczODE0YjNlMDE2YmEyOTczY2QyNzY1ZjhmM2Y4MmQ2Y2MzOGFhN2Y4NTUxODI3ZmU4ZDFlMzg4NGI3ZTYxYzk0NjgzYjhmODJmMTg0M2JkYWUyMjU3ZWVlYzk4MTJhZDRjMmNmMjgzYzM0ZTBiMGFlMGZlM2NiOTkwY2Y4OGYyZWY5IjoiMjgwMzlkY2ZlMTA2ZDNiODI5NjYxMTI1OGM0YTU2NjUxYzllOTJkZCI6IjJiMzFmZGU5OTg1OWI5NzdhYTA5NTg2ZDhlMjc0NjYyYjI1YTJhNjQwNjQwYjQ1N2Y1OTQwNTFjYjFlN2Y3YTkxMTg2NTQ1NTI0MjkyNmNmODhmZTgwZGZhM2E3NWJhOTY4OTg0NGExMWU2MzRhODJiMDc1YWZiZDY5YzEyYTBkZjlkMjVmODRhZDQ5NDVkZjNkYzhmZTkwYzNjZWZkZjI2ZTk1ZjA1MzQzMDRiNWJkYmEyMGQzZTU2NDBhMmViZmI4OThhYWMzNWFlNDBmMjZmY2U1NTYzYzJmOWYyNGYzMDQyYWY3NmYzYzcwNzJkNjg3YmJmYjk1OWE4ODQ2MGFmMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfNAorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzA6MTY6IjA3ZWVmYjQyNGIwZTNhNDBlNDIwOGVlNWFmYjI4MGIyMjMxNzMwODExNGRkZTBiNGI2NGY3MzAxODRlYzY4ZGE2Y2UyODY3YTlmNDhlZDc3MjZkNWUyNjE0ZWQwNGE1NDEwNzM2YzhjNzE0ZWU3MDI0NzQyOThjNjI5MmFmMDc1MzUiOjE2OiIwNzA4MzBkYmY5NDdlYWMwMjI4ZGUyNjMxNGI1OWI2Njk5NGNjNjBlODM2MGU3NWQzODc2Mjk4ZjhmOGE3ZDE0MWRhMDY0ZTVjYTAyNmE5NzNlMjhmMjU0NzM4Y2VlNjY5YzcyMWIwMzRjYjVmOGUyNDRkYWRkN2NkMWUxNTlkNTQ3IjoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmMzM3YjliYWQ5MzdkZTIyYTFhMDUyZGZmMTExMzRhOGNlMjY5NzYyMDI5ODE5MzliOTFlMDcxNWFlNWU2MDk2NDlkYTFhZGZjZWYzZjRjY2E1OWIyMzgzNjBlN2QxZTQ5NmM3YmY0YjIwNGI1YWNmZjliYmQ2MTY2YTFkODdhMzZlZjIyNDczNzM3NTEwMzlmOGE4MDBiODM5OTgwN2IzYTg1ZjQ0ODkzNDk3YzBkMDVmYjcwMTdiODIyMjgxNTJkZTZmMjVlNjExNmRjYzc1MDNjNzg2Yzg3NWMyOGYzYWE2MDdlOTRhYjBmMTk4NjNhYjFiNTA3Mzc3MGIwY2Q1ZjUzM2FjZGUzMGM2ZmI5NTNjZjNkYTY4MDI2NGUzMGZjMTFiZmY5YTE5YmZmYWI0Nzc5YjYyMjNjM2ZiM2ZlMGY3MWFiYWRlNGViN2MwOWM0MWUyNGMyMmQyM2ZhMTQ4ZTZhMTczZmViNjM5ODRkMWJjNmVlM2EwMmQ5MTViNzUyY2VhZjkyYTMwMTVlY2ViMzhjYTU4NmM2ODAxYjM3YzM0Y2VmYjJjZmYyNWVhMjNjMDg2NjJkY2FiMjZhN2E5M2EyODVkMDVkMzA0NGMiOiJhNzc4MjFlYmJiZWYyNDYyOGU0ZTEyZTFkMGVhOTZkZTM5OGY3YjBmIjoiMzJjN2NhMzhmZjI2OTQ5YTE1MDAwYzRiYTA0YjJiMTNiMzVhMzgxMGU1NjgxODRkN2VjYWJhYTE2NmI3ZmZhYmRkZjJiNmNmNGJhMDcxMjQ5MjM3OTBmMmU1YjFhNWJlMDQwYWVhMzZmZTEzMmVjMTMwZTFmMTA1Njc5ODJkMTdhYzNlODliOGQyNmMzMDk0MDM0ZTc2MmQyZTAzMTI2NGYwMTE3MGJlZWNiM2QxNDM5ZTA1ODQ2ZjI1NDU4MzY3YTdkOWMwMjA2MDQ0NDY3MjY3MWU2NGU4Nzc4NjQ1NTljYTE5YjIwNzRkNTg4YTI4MWI1ODA0ZDIzNzcyZmJiZTE5IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgN180ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDMwOjE2OiIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxOGFkMTI2NDdjZWZhYTBjNGIzMTg4YjIyMWM1MTUzODY3NTliOTNmMDIwMjRiMjVhYjkyNDJmODM1N2Q4ZjNmZDQ5NjQwZWU1ZTY0M2VhZjZjNjRkZWVmYTcwODk3MjdjOGZmMDM5OTMzMzM5MTVjNmVmMjFiZjU5NzViNmU1MGQxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhYjMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImYzMzdiOWJhZDkzN2RlMjJhMWEwNTJkZmYxMTEzNGE4Y2UyNjk3NjIwMjk4MTkzOWI5MWUwNzE1YWU1ZTYwOTY0OWRhMWFkZmNlZjNmNGNjYTU5YjIzODM2MGU3ZDFlNDk2YzdiZjRiMjA0YjVhY2ZmOWJiZDYxNjZhMWQ4N2EzNmVmMjI0NzM3Mzc1MTAzOWY4YTgwMGI4Mzk5ODA3YjNhODVmNDQ4OTM0OTdjMGQwNWZiNzAxN2I4MjIyODE1MmRlNmYyNWU2MTE2ZGNjNzUwM2M3ODZjODc1YzI4ZjNhYTYwN2U5NGFiMGYxOTg2M2FiMWI1MDczNzcwYjBjZDVmNTMzYWNkZTMwYzZmYjk1M2NmM2RhNjgwMjY0ZTMwZmMxMWJmZjlhMTliZmZhYjQ3NzliNjIyM2MzZmIzZmUwZjcxYWJhZGU0ZWI3YzA5YzQxZTI0YzIyZDIzZmExNDhlNmExNzNmZWI2Mzk4NGQxYmM2ZWUzYTAyZDkxNWI3NTJjZWFmOTJhMzAxNWVjZWIzOGNhNTg2YzY4MDFiMzdjMzRjZWZiMmNmZjI1ZWEyM2MwODY2MmRjYWIyNmE3YTkzYTI4NWQwNWQzMDQ0YyI6ImE3NzgyMWViYmJlZjI0NjI4ZTRlMTJlMWQwZWE5NmRlMzk4ZjdiMGYiOiIzMmM3Y2EzOGZmMjY5NDlhMTUwMDBjNGJhMDRiMmIxM2IzNWEzODEwZTU2ODE4NGQ3ZWNhYmFhMTY2YjdmZmFiZGRmMmI2Y2Y0YmEwNzEyNDkyMzc5MGYyZTViMWE1YmUwNDBhZWEzNmZlMTMyZWMxMzBlMWYxMDU2Nzk4MmQxN2FjM2U4OWI4ZDI2YzMwOTQwMzRlNzYyZDJlMDMxMjY0ZjAxMTcwYmVlY2IzZDE0MzllMDU4NDZmMjU0NTgzNjdhN2Q5YzAyMDYwNDQ0NjcyNjcxZTY0ZTg3Nzg2NDU1OWNhMTliMjA3NGQ1ODhhMjgxYjU4MDRkMjM3NzJmYmJlMTkiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA3XzUKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMwOjE2OiIwN2VlZmI0MjRiMGUzYTQwZTQyMDhlZTVhZmIyODBiMjIzMTczMDgxMTRkZGUwYjRiNjRmNzMwMTg0ZWM2OGRhNmNlMjg2N2E5ZjQ4ZWQ3NzI2ZDVlMjYxNGVkMDRhNTQxMDczNmM4YzcxNGVlNzAyNDc0Mjk4YzYyOTJhZjA3NTM1IjoxNjoiMDcwODMwZGJmOTQ3ZWFjMDIyOGRlMjYzMTRiNTliNjY5OTRjYzYwZTgzNjBlNzVkMzg3NjI5OGY4ZjhhN2QxNDFkYTA2NGU1Y2EwMjZhOTczZTI4ZjI1NDczOGNlZTY2OWM3MjFiMDM0Y2I1ZjhlMjQ0ZGFkZDdjZDFlMTU5ZDU0NyI6MTY6IjM3YzlkYTRhNjZjOGM0MDhiOGRhMjdkMGM5ZDc5ZjhjY2IxZWFmYzFkMmZlNDg3NDZkOTQwYjdjNGVmNWRlZTE4YWQxMjY0N2NlZmFhMGM0YjMxODhiMjIxYzUxNTM4Njc1OWI5M2YwMjAyNGIyNWFiOTI0MmY4MzU3ZDhmM2ZkNDk2NDBlZTVlNjQzZWFmNmM2NGRlZWZhNzA4OTcyN2M4ZmYwMzk5MzMzMzkxNWM2ZWYyMWJmNTk3NWI2ZTUwZDExOGI1MTAwOGVjMzNlOWYwMWEwYTU0NWExMGE4MzZhNDNkZGJjYTlkOGI1YzVkMzU0ODAyMmQ3MDY0ZWEyOWFiMyI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNDUwMTNjZWJhZmQ5NjBiMjU1NDc2YThlMjU5OGI5YWEzMmVmYmU2ZGMxZjM0ZjRhNDk4ZDhjZjVhMmI0NTQ4ZDA4YzU1ZDVmOTVmN2JjYzk2MTkxNjMwNTZmMmQ1OGI1MmZhMDMyIjoiOWQ1YWQ4ZWI0NTIxMzRiNjVkYzNhOThiNmE3M2I1Zjc0MTYwOWNkNiI6IjA3ZWI2NTFkNzVmMWI1MmJjMjYzYjJlMTk4MzM2ZTk5ZmJlYmM0ZjMzMjA0OWE5MjJhMTA4MTU2MDdlZTJkOTg5ZGIzYTQ0OTViN2RjY2QzOGY1OGEyMTFmYjdlMTkzMTcxYTNkODkxMTMyNDM3ZWJjYTQ0ZjMxOGIyODA1MDllNTJiNWZhOThmY2NlODIwNWQ5Njk3YzhlZTRiN2ZmNTlkNGM1OWM3OTAzOGExOTcwYmQyYTBkNDUxZWNkYzVlZjExZDk5NzljOWQzNWY4YzcwYTYxNjM3MTc2MDc4OTBkNTg2YTdjNmRjMDFjNzlmODZhOGYyOGU4NTIzNWY4YzJmMSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMDoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI0NTAxM2NlYmFmZDk2MGIyNTU0NzZhOGUyNTk4YjlhYTMyZWZiZTZkYzFmMzRmNGE0OThkOGNmNWEyYjQ1NDhkMDhjNTVkNWY5NWY3YmNjOTYxOTE2MzA1NmYyZDU4YjUyZmEwMzIiOiI5ZDVhZDhlYjQ1MjEzNGI2NWRjM2E5OGI2YTczYjVmNzQxNjA5Y2Q2IjoiMDdlYjY1MWQ3NWYxYjUyYmMyNjNiMmUxOTgzMzZlOTlmYmViYzRmMzMyMDQ5YTkyMmExMDgxNTYwN2VlMmQ5ODlkYjNhNDQ5NWI3ZGNjZDM4ZjU4YTIxMWZiN2UxOTMxNzFhM2Q4OTExMzI0MzdlYmNhNDRmMzE4YjI4MDUwOWU1MmI1ZmE5OGZjY2U4MjA1ZDk2OTdjOGVlNGI3ZmY1OWQ0YzU5Yzc5MDM4YTE5NzBiZDJhMGQ0NTFlY2RjNWVmMTFkOTk3OWM5ZDM1ZjhjNzBhNjE2MzcxNzYwNzg5MGQ1ODZhN2M2ZGMwMWM3OWY4NmE4ZjI4ZTg1MjM1ZjhjMmYxIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgN182Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAzMDoxNjoiMDdlZWZiNDI0YjBlM2E0MGU0MjA4ZWU1YWZiMjgwYjIyMzE3MzA4MTE0ZGRlMGI0YjY0ZjczMDE4NGVjNjhkYTZjZTI4NjdhOWY0OGVkNzcyNmQ1ZTI2MTRlZDA0YTU0MTA3MzZjOGM3MTRlZTcwMjQ3NDI5OGM2MjkyYWYwNzUzNSI6MTY6IjA3MDgzMGRiZjk0N2VhYzAyMjhkZTI2MzE0YjU5YjY2OTk0Y2M2MGU4MzYwZTc1ZDM4NzYyOThmOGY4YTdkMTQxZGEwNjRlNWNhMDI2YTk3M2UyOGYyNTQ3MzhjZWU2NjljNzIxYjAzNGNiNWY4ZTI0NGRhZGQ3Y2QxZTE1OWQ1NDciOjE2OiIzN2M5ZGE0YTY2YzhjNDA4YjhkYTI3ZDBjOWQ3OWY4Y2NiMWVhZmMxZDJmZTQ4NzQ2ZDk0MGI3YzRlZjVkZWUxOGFkMTI2NDdjZWZhYTBjNGIzMTg4YjIyMWM1MTUzODY3NTliOTNmMDIwMjRiMjVhYjkyNDJmODM1N2Q4ZjNmZDQ5NjQwZWU1ZTY0M2VhZjZjNjRkZWVmYTcwODk3MjdjOGZmMDM5OTMzMzM5MTVjNmVmMjFiZjU5NzViNmU1MGQxMThiNTEwMDhlYzMzZTlmMDFhMGE1NDVhMTBhODM2YTQzZGRiY2E5ZDhiNWM1ZDM1NDgwMjJkNzA2NGVhMjlhYjMiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjIzNTgwOTcwODZjODk5MzIzZTc1ZDljOTBkMGMwOWYxMmQ5ZDU0ZWRmYmRmNzBhOWMyZWI1YTA0ZDhmMzZiOWIyYmRmMmFhYmUwYTViZGExOTY4OTM3ZjlkNmViZDNiNmIyNTdlZmIzMTM2ZDQxMzFmOWFjYjU5Yjg1ZTI2MDJjMmEzZmNkYzgzNTQ5NGExZjRlNWVjMThiMjI2YzgwMjMyYjM2YTc1YTQ1ZmRmMDlhN2VhOWU5OGVmYmRlMTQ1MGQxMTk0YmYxMmUxNWE0YzVmOWViNWMwYmNlNTI2OWUwYzNiMjhjZmFiNjU1ZDgxYTYxYTIwYjRiZTJmNTQ0NTliYjI1YTBkYjk0YzUyMjE4YmUxMDlhNzQyNmRlODMwMTQ0MjQ3ODlhYWE5MGU1MDU2ZTYzMmE2OTgxMTVlMjgyYzFhNTY0MTBmMjZjMjA3MmYxOTM0ODFhOWRjZDg4MDU3MjAwNWU2NGY0MDgyZWNmIjoiM2YyZWZjNTk1ODgwYTdkNDdmY2YzY2JhMDQ5ODNlYTU0YzRiNzNmYiI6IjE4ZGEzY2RjZmU3OWJmYjc3ZmQ5YzMyZjM3N2FkMzk5MTQ2ZjBhOGU4MTA2MjAyMzMyNzFhNmUzZWQzMjQ4OTAzZjVjZGM5MmRjNzliNTVkM2UxMTYxNWFhMDU2YTc5NTg1Mzc5MmEzOTk4YzM0OWNhNWM0NTdlOGNhN2QyOWQ3OTZhYTI0ZjgzNDkxNzA5YmVmY2ZiMTUxMGVhNTEzYzkyODI5YTNmMDBiMTA0ZjY1NTYzNGYzMjA3NTJlMTMwZWMwY2NmNjc1NGZmODkzZGIzMDI5MzJiYjAyNWViNjBlODc4MjI1OThmYzYxOWUwZTk4MTczN2E5YTRjNDE1MmQzMyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDdfNiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMDoxNjoiMzdjOWRhNGE2NmM4YzQwOGI4ZGEyN2QwYzlkNzlmOGNjYjFlYWZjMWQyZmU0ODc0NmQ5NDBiN2M0ZWY1ZGVlMThhZDEyNjQ3Y2VmYWEwYzRiMzE4OGIyMjFjNTE1Mzg2NzU5YjkzZjAyMDI0YjI1YWI5MjQyZjgzNTdkOGYzZmQ0OTY0MGVlNWU2NDNlYWY2YzY0ZGVlZmE3MDg5NzI3YzhmZjAzOTkzMzMzOTE1YzZlZjIxYmY1OTc1YjZlNTBkMTE4YjUxMDA4ZWMzM2U5ZjAxYTBhNTQ1YTEwYTgzNmE0M2RkYmNhOWQ4YjVjNWQzNTQ4MDIyZDcwNjRlYTI5YWIzIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIyMzU4MDk3MDg2Yzg5OTMyM2U3NWQ5YzkwZDBjMDlmMTJkOWQ1NGVkZmJkZjcwYTljMmViNWEwNGQ4ZjM2YjliMmJkZjJhYWJlMGE1YmRhMTk2ODkzN2Y5ZDZlYmQzYjZiMjU3ZWZiMzEzNmQ0MTMxZjlhY2I1OWI4NWUyNjAyYzJhM2ZjZGM4MzU0OTRhMWY0ZTVlYzE4YjIyNmM4MDIzMmIzNmE3NWE0NWZkZjA5YTdlYTllOThlZmJkZTE0NTBkMTE5NGJmMTJlMTVhNGM1ZjllYjVjMGJjZTUyNjllMGMzYjI4Y2ZhYjY1NWQ4MWE2MWEyMGI0YmUyZjU0NDU5YmIyNWEwZGI5NGM1MjIxOGJlMTA5YTc0MjZkZTgzMDE0NDI0Nzg5YWFhOTBlNTA1NmU2MzJhNjk4MTE1ZTI4MmMxYTU2NDEwZjI2YzIwNzJmMTkzNDgxYTlkY2Q4ODA1NzIwMDVlNjRmNDA4MmVjZiI6IjNmMmVmYzU5NTg4MGE3ZDQ3ZmNmM2NiYTA0OTgzZWE1NGM0YjczZmIiOiIxOGRhM2NkY2ZlNzliZmI3N2ZkOWMzMmYzNzdhZDM5OTE0NmYwYThlODEwNjIwMjMzMjcxYTZlM2VkMzI0ODkwM2Y1Y2RjOTJkYzc5YjU1ZDNlMTE2MTVhYTA1NmE3OTU4NTM3OTJhMzk5OGMzNDljYTVjNDU3ZThjYTdkMjlkNzk2YWEyNGY4MzQ5MTcwOWJlZmNmYjE1MTBlYTUxM2M5MjgyOWEzZjAwYjEwNGY2NTU2MzRmMzIwNzUyZTEzMGVjMGNjZjY3NTRmZjg5M2RiMzAyOTMyYmIwMjVlYjYwZTg3ODIyNTk4ZmM2MTllMGU5ODE3MzdhOWE0YzQxNTJkMzMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxMDMxOjE2OiIwOGRhZDdmMTEzNjNmYWE2MjNkNWQ2ZDVlOGEzMTkzMjhkODIxOTBkNzEyN2QyODQ2YzQzOWIwYWI3MjYxOWIwYTQzYTk1MzIwZTRlYzM0ZmMzYTljZWE4NzY0MjIzMDViZDc2YzViYTdiZTllMmY0MTBjODA2MDY0NWExZDI5ZWRiIjoxNjoiMDg0N2U3MzIzNzZmYzc5MDBmODk4ZWE4MmViMmIwZmM0MTg1NjVmZGFlNjJmN2Q5ZWM0Y2UyMjE3Yjk3OTkwZGQyNzJkYjE1N2Y5OWY2M2MwZGNiYjlmYmFjZGJkNGM0ZGFkYjZkZjY3NzU2MzU4Y2E0MTc0ODI1YjQ4ZjQ5NzA2ZCI6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODEzMzJmNGJlNjI5NDg0MTVlYTFkODk5NzkyZWVhY2Y2YzZlMWRiMWRhOGJlMTNiNWNlYTQxZGIyZmVkNDY3MDkyZTFmZjM5ODkxNGM3MTQyNTk3NzVmNTk1Zjg1NDdmNzM1NjkyYTU3NWU2OTIzYWY3OGYyMmM2OTk3ZGRiOTBmYjZmNzJkN2JiMGRkNTc0NGEzMWRlY2QzZGMzNjg1ODQ5ODM2ZWQzNGFlYzU5NjMwNGFkMTE4NDNjNGY4ODQ4OWYyMDk3MzVmNWZiN2ZkYWY3Y2VjOGFkZGM1ODE4MTY4Zjg4MGFjYmY0OTBkNTEwMDViN2E4ZTg0ZTQzZTU0Mjg3OTc3NTcxZGQ5OWVlYTRiMTYxZWIyZGYxZjUxMDhmMTJhNDE0MmE4MzMyMmVkYjA1YTc1NDg3YTM0MzVjOWE3OGNlNTNlZDkzYmM1NTA4NTdkN2E5ZmIiOiIxZDY1NDkxZDc5Yzg2NGIzNzMwMDliZTZmNmYyNDY3YmFjNGM3OGZhIjoiMDI2MmFjMjU0YmZhNzdmM2MxYWNhMjJjNTE3OWY4ZjA0MDQyMmIzYzViYWZkNDBhOGYyMWNmMGZhNWE2NjdjY2Q1OTkzZDQyZGJhZmI0MDljNTIwZTI1ZmNlMmIxZWUxZTcxNjU3N2YxZWZhMTdmM2RhMjgwNTJmNDBmMDQxOWIyMzEwNmQ3ODQ1YWFmMDExMjViNjk4ZTdhNGRmZTkyZDM5NjdiYjAwYzRkMGQzNWJhMzU1MmFiOWE4YjNlZWYwN2M3ZmVjZGJjNTQyNGFjNGRiMWUyMGNiMzdkMGIyNzQ0NzY5OTQwZWE5MDdlMTdmYmJjYTY3M2IyMDUyMjM4MGM1IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOF8xICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDMxOjE2OiI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmYmJiY2RmODVkZmY2NGUwZDk3MjAwM2FiMzY4MWZiYmE2ZGQ0MWZkNTQxODI5YjJlNTgyZGU5ZjJhNGE0ZTBhMmQwOTAwYmVmNDc1M2RiM2NlZTBlZTA2YzdkZmFlOGIxZDUzYjU5NTMyMThmOWNjZWVhNjk1YjA4NjY4ZWRlYWFkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczM2YiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjgxMzMyZjRiZTYyOTQ4NDE1ZWExZDg5OTc5MmVlYWNmNmM2ZTFkYjFkYThiZTEzYjVjZWE0MWRiMmZlZDQ2NzA5MmUxZmYzOTg5MTRjNzE0MjU5Nzc1ZjU5NWY4NTQ3ZjczNTY5MmE1NzVlNjkyM2FmNzhmMjJjNjk5N2RkYjkwZmI2ZjcyZDdiYjBkZDU3NDRhMzFkZWNkM2RjMzY4NTg0OTgzNmVkMzRhZWM1OTYzMDRhZDExODQzYzRmODg0ODlmMjA5NzM1ZjVmYjdmZGFmN2NlYzhhZGRjNTgxODE2OGY4ODBhY2JmNDkwZDUxMDA1YjdhOGU4NGU0M2U1NDI4Nzk3NzU3MWRkOTllZWE0YjE2MWViMmRmMWY1MTA4ZjEyYTQxNDJhODMzMjJlZGIwNWE3NTQ4N2EzNDM1YzlhNzhjZTUzZWQ5M2JjNTUwODU3ZDdhOWZiIjoiMWQ2NTQ5MWQ3OWM4NjRiMzczMDA5YmU2ZjZmMjQ2N2JhYzRjNzhmYSI6IjAyNjJhYzI1NGJmYTc3ZjNjMWFjYTIyYzUxNzlmOGYwNDA0MjJiM2M1YmFmZDQwYThmMjFjZjBmYTVhNjY3Y2NkNTk5M2Q0MmRiYWZiNDA5YzUyMGUyNWZjZTJiMWVlMWU3MTY1NzdmMWVmYTE3ZjNkYTI4MDUyZjQwZjA0MTliMjMxMDZkNzg0NWFhZjAxMTI1YjY5OGU3YTRkZmU5MmQzOTY3YmIwMGM0ZDBkMzViYTM1NTJhYjlhOGIzZWVmMDdjN2ZlY2RiYzU0MjRhYzRkYjFlMjBjYjM3ZDBiMjc0NDc2OTk0MGVhOTA3ZTE3ZmJiY2E2NzNiMjA1MjIzODBjNSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfMgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzE6MTY6IjA4ZGFkN2YxMTM2M2ZhYTYyM2Q1ZDZkNWU4YTMxOTMyOGQ4MjE5MGQ3MTI3ZDI4NDZjNDM5YjBhYjcyNjE5YjBhNDNhOTUzMjBlNGVjMzRmYzNhOWNlYTg3NjQyMjMwNWJkNzZjNWJhN2JlOWUyZjQxMGM4MDYwNjQ1YTFkMjllZGIiOjE2OiIwODQ3ZTczMjM3NmZjNzkwMGY4OThlYTgyZWIyYjBmYzQxODU2NWZkYWU2MmY3ZDllYzRjZTIyMTdiOTc5OTBkZDI3MmRiMTU3Zjk5ZjYzYzBkY2JiOWZiYWNkYmQ0YzRkYWRiNmRmNjc3NTYzNThjYTQxNzQ4MjViNDhmNDk3MDZkIjoxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlMmY5NmVhZjBlMDVlN2JhMzI2ZWNjYTBiYTdmZDJmN2MwMjM1NmYzY2VkZTlkMGZhYWJmNGZjYzhlNjBhOTczZTU1OTVmZDllYTA4IjoiNDM1YzA5OGFhOTkwOWViMjM3N2YxMjQ4YjA5MWI2ODk4N2ZmMTgzOCI6IjI3MDdiOWFkNTExNWM1OGM5NGU5MzJlOGVjMGEyODBmNTYzMzllNDRhMWI1OGQ0ZGRjZmYyZjMxMmU1ZjM0ZGNmZTM5ZTg5YzZhOTRkY2VlODZkYmJkYWU1Yjc5YmE0ZTA4MTlhOWU3YmZkOWQ5ODJlN2VlNmM4NmVlNjgzOTZlOGIzYTE0YzljOGYzNGIxNzhlYjc0MWY5ZDNmMTIxMTA5YmY1YzgxNzJmYWRhMmU3NjhmOWVhMTQzMzAzMmMwMDRhOGFhMDdlYjk5MDAwMGE0OGRjOTRjOGJhYzhhYWJlMmIwOWIxYWE0NmMwYTJhYTBlMTJmNjNmYmJhNzc1YmE3ZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfMiAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMToxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlMmY5NmVhZjBlMDVlN2JhMzI2ZWNjYTBiYTdmZDJmN2MwMjM1NmYzY2VkZTlkMGZhYWJmNGZjYzhlNjBhOTczZTU1OTVmZDllYTA4IjoiNDM1YzA5OGFhOTkwOWViMjM3N2YxMjQ4YjA5MWI2ODk4N2ZmMTgzOCI6IjI3MDdiOWFkNTExNWM1OGM5NGU5MzJlOGVjMGEyODBmNTYzMzllNDRhMWI1OGQ0ZGRjZmYyZjMxMmU1ZjM0ZGNmZTM5ZTg5YzZhOTRkY2VlODZkYmJkYWU1Yjc5YmE0ZTA4MTlhOWU3YmZkOWQ5ODJlN2VlNmM4NmVlNjgzOTZlOGIzYTE0YzljOGYzNGIxNzhlYjc0MWY5ZDNmMTIxMTA5YmY1YzgxNzJmYWRhMmU3NjhmOWVhMTQzMzAzMmMwMDRhOGFhMDdlYjk5MDAwMGE0OGRjOTRjOGJhYzhhYWJlMmIwOWIxYWE0NmMwYTJhYTBlMTJmNjNmYmJhNzc1YmE3ZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzE6MTY6IjA4ZGFkN2YxMTM2M2ZhYTYyM2Q1ZDZkNWU4YTMxOTMyOGQ4MjE5MGQ3MTI3ZDI4NDZjNDM5YjBhYjcyNjE5YjBhNDNhOTUzMjBlNGVjMzRmYzNhOWNlYTg3NjQyMjMwNWJkNzZjNWJhN2JlOWUyZjQxMGM4MDYwNjQ1YTFkMjllZGIiOjE2OiIwODQ3ZTczMjM3NmZjNzkwMGY4OThlYTgyZWIyYjBmYzQxODU2NWZkYWU2MmY3ZDllYzRjZTIyMTdiOTc5OTBkZDI3MmRiMTU3Zjk5ZjYzYzBkY2JiOWZiYWNkYmQ0YzRkYWRiNmRmNjc3NTYzNThjYTQxNzQ4MjViNDhmNDk3MDZkIjoxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJlMzVjNmVkOThmNjRhNmQ1YTY0OGZjYWI4YWRiMTYzMzFkYjMyZTVkMTVjNzRhNDBlZGY5NGMzZGM0YTRkZTc5MmQxOTA4ODlmMjBmMWUyNGVkMTIwNTRhNmIyODc5OGZjYjQyZDFjNTQ4NzY5YjczNGM5NjM3MzE0MjA5MmFlZDI3NzYwM2Y0NzM4ZGY0ZGMxNDQ2NTg2ZDBlYzY0ZGE0ZmI2MDUzNmRiMmFlMTdmYzdlM2MwNGJiZmJiYmQ5MDdiZjExN2MwODYzNmZhMTZmOTVmNTFhNjIxNjkzNGQzZTM0Zjg1MDMwZjE3YmJiYzViYTY5MTQ0MDU4YWZmMDgxZTBiMTljZjAzYzE3MTk1YzVlODg4YmE1OGY2ZmUwYTAyZTVjM2JkYTk3MTlhNyI6ImM2ZWJiZTc2ZGYwYzRhZWEzMmM0NzQxNzViMmYxMzY4NjJkMDQ1MjkiOiIyYWQyMDUwOWQ3OGNmMjZkMWI2YzQwNjE0NjA4NmU0YjBjOTFhOTFjMmJkMTY0Yzg3Yjk2NmI4ZmFhNDJhYTBjYTQ0NjAyMjMyM2JhNGIxYTFiODk3MDZkN2Y0YzNiZTU3ZDdiNjk3MDJkMTY4YWI1OTU1ZWUyOTAzNTZiOGM0YTI5ZWQ0NjdkNTQ3ZWMyM2NiYWRmMjg2Y2NiNTg2M2M2Njc5ZGE0NjdmYzkzMjRhMTUxYzdlYzU1YWFjNmRiNDA4NGY4MjcyNjgyNWNmZTFhYTQyMWJjNjQwNDlmYjQyZjIzMTQ4ZjljMjViMmRjMzAwNDM3YzM4ZDQyOGFhNzVmOTYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzMgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzE6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZTM1YzZlZDk4ZjY0YTZkNWE2NDhmY2FiOGFkYjE2MzMxZGIzMmU1ZDE1Yzc0YTQwZWRmOTRjM2RjNGE0ZGU3OTJkMTkwODg5ZjIwZjFlMjRlZDEyMDU0YTZiMjg3OThmY2I0MmQxYzU0ODc2OWI3MzRjOTYzNzMxNDIwOTJhZWQyNzc2MDNmNDczOGRmNGRjMTQ0NjU4NmQwZWM2NGRhNGZiNjA1MzZkYjJhZTE3ZmM3ZTNjMDRiYmZiYmJkOTA3YmYxMTdjMDg2MzZmYTE2Zjk1ZjUxYTYyMTY5MzRkM2UzNGY4NTAzMGYxN2JiYmM1YmE2OTE0NDA1OGFmZjA4MWUwYjE5Y2YwM2MxNzE5NWM1ZTg4OGJhNThmNmZlMGEwMmU1YzNiZGE5NzE5YTciOiJjNmViYmU3NmRmMGM0YWVhMzJjNDc0MTc1YjJmMTM2ODYyZDA0NTI5IjoiMmFkMjA1MDlkNzhjZjI2ZDFiNmM0MDYxNDYwODZlNGIwYzkxYTkxYzJiZDE2NGM4N2I5NjZiOGZhYTQyYWEwY2E0NDYwMjIzMjNiYTRiMWExYjg5NzA2ZDdmNGMzYmU1N2Q3YjY5NzAyZDE2OGFiNTk1NWVlMjkwMzU2YjhjNGEyOWVkNDY3ZDU0N2VjMjNjYmFkZjI4NmNjYjU4NjNjNjY3OWRhNDY3ZmM5MzI0YTE1MWM3ZWM1NWFhYzZkYjQwODRmODI3MjY4MjVjZmUxYWE0MjFiYzY0MDQ5ZmI0MmYyMzE0OGY5YzI1YjJkYzMwMDQzN2MzOGQ0MjhhYTc1Zjk2IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOF80Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTAzMToxNjoiMDhkYWQ3ZjExMzYzZmFhNjIzZDVkNmQ1ZThhMzE5MzI4ZDgyMTkwZDcxMjdkMjg0NmM0MzliMGFiNzI2MTliMGE0M2E5NTMyMGU0ZWMzNGZjM2E5Y2VhODc2NDIyMzA1YmQ3NmM1YmE3YmU5ZTJmNDEwYzgwNjA2NDVhMWQyOWVkYiI6MTY6IjA4NDdlNzMyMzc2ZmM3OTAwZjg5OGVhODJlYjJiMGZjNDE4NTY1ZmRhZTYyZjdkOWVjNGNlMjIxN2I5Nzk5MGRkMjcyZGIxNTdmOTlmNjNjMGRjYmI5ZmJhY2RiZDRjNGRhZGI2ZGY2Nzc1NjM1OGNhNDE3NDgyNWI0OGY0OTcwNmQiOjE2OiI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmYmJiY2RmODVkZmY2NGUwZDk3MjAwM2FiMzY4MWZiYmE2ZGQ0MWZkNTQxODI5YjJlNTgyZGU5ZjJhNGE0ZTBhMmQwOTAwYmVmNDc1M2RiM2NlZTBlZTA2YzdkZmFlOGIxZDUzYjU5NTMyMThmOWNjZWVhNjk1YjA4NjY4ZWRlYWFkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczM2YiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImRiYzVmNzUwYTdhMTRiZTJiOTNlODM4ZDE4ZDE0YTg2OTVlNTJlOGFkZDljMGFjNzMzYjhmNTZkMjc0N2U1MjlhMGNjYTUzMmRkNDliOTAyYWVmZWQ1MTQ0NDdmOWU4MWQxNjE5NWMyODUzODY4Y2I5YjMwZjdkMGQ0OTVjNjlkMDFiNWM1ZDUwYjI3MDQ1ZGIzODY2YzIzMjRhNDRhMTEwYjE3MTc3NDZkZTQ1N2QxYzhjNDVjM2NkMmE5Mjk3MGMzZDU5NjMyMDU1ZDRjOThhNDFkNmU5OWUyYTNkZGQ1ZjdmOTk3OWFiM2NkMThmMzc1MDVkMjUxNDFkZTJhMWJmZjE3YjNhN2RjZTk0MTllY2MzODVjZjExZDcyODQwZjE5OTUzZmQwNTA5MjUxZjZjYWZkZTI4OTNkMGU3NWM3ODFiYTdhNTAxMmNhNDAxYTRmYTk5ZTA0YjNjMzI0OWY5MjZkNWFmZTgyY2M4N2RhYjIyYzNjMWIxMDVkZTQ4ZTM0YWNlOWM5MTI0ZTU5NTk3YWM3ZWJmOCI6IjAyMWZkY2M2ZWJiNWUxOWIxY2IxNmU5YzY3ZjI3NjgxNjU3ZmUyMGEiOiIxZTI0ZTZlNTg2MjhlNTE3NTA0NGE5ZWI2ZDgzN2Q0OGFmMTI2MGIwNTIwZTg3MzI3ZGU3ODk3ZWU0ZDViOWYwZGYwYmUzZTA5ZWQ0ZGVhOGMxNDU0ZmYzNDIzYmIwOGUxNzkzMjQ1YTlkZjhiZjZhYjM5NjhjOGVkZGMzYjUzMjg1NzFjNzdmMDkxY2M1Nzg1NzY5MTJkZmViZDE2NGI5ZGU1NDU0ZmUwYmUxYzFmNjM4NWIzMjgzNjBjZTY3ZWM3YTA1ZjZlMzBlYjQ1YzE3YzQ4YWM3MDA0MWQyY2FiNjdmMGEyYWU3YWFmZGNjOGQyNDVlYTM0NDJhNjMwMGNjYzciOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA4XzQgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjEwMzE6MTY6IjQ5NTM3MGExZmIxODU0M2MxNmQzNjMxZTMxNjMyNTVkZjYyYmU2ZWVlODkwZDVmMjU1MDllNGY3NzhhOGVhNmZiYmJjZGY4NWRmZjY0ZTBkOTcyMDAzYWIzNjgxZmJiYTZkZDQxZmQ1NDE4MjliMmU1ODJkZTlmMmE0YTRlMGEyZDA5MDBiZWY0NzUzZGIzY2VlMGVlMDZjN2RmYWU4YjFkNTNiNTk1MzIxOGY5Y2NlZWE2OTViMDg2NjhlZGVhYWRjZWQ5NDYzYjFkNzkwZDVlYmYyN2U5MTE1YjQ2Y2FkNGQ5YTJiOGVmYWIwNTYxYjA4MTAzNDQ3MzlhZGEwNzMzZiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZGJjNWY3NTBhN2ExNGJlMmI5M2U4MzhkMThkMTRhODY5NWU1MmU4YWRkOWMwYWM3MzNiOGY1NmQyNzQ3ZTUyOWEwY2NhNTMyZGQ0OWI5MDJhZWZlZDUxNDQ0N2Y5ZTgxZDE2MTk1YzI4NTM4NjhjYjliMzBmN2QwZDQ5NWM2OWQwMWI1YzVkNTBiMjcwNDVkYjM4NjZjMjMyNGE0NGExMTBiMTcxNzc0NmRlNDU3ZDFjOGM0NWMzY2QyYTkyOTcwYzNkNTk2MzIwNTVkNGM5OGE0MWQ2ZTk5ZTJhM2RkZDVmN2Y5OTc5YWIzY2QxOGYzNzUwNWQyNTE0MWRlMmExYmZmMTdiM2E3ZGNlOTQxOWVjYzM4NWNmMTFkNzI4NDBmMTk5NTNmZDA1MDkyNTFmNmNhZmRlMjg5M2QwZTc1Yzc4MWJhN2E1MDEyY2E0MDFhNGZhOTllMDRiM2MzMjQ5ZjkyNmQ1YWZlODJjYzg3ZGFiMjJjM2MxYjEwNWRlNDhlMzRhY2U5YzkxMjRlNTk1OTdhYzdlYmY4IjoiMDIxZmRjYzZlYmI1ZTE5YjFjYjE2ZTljNjdmMjc2ODE2NTdmZTIwYSI6IjFlMjRlNmU1ODYyOGU1MTc1MDQ0YTllYjZkODM3ZDQ4YWYxMjYwYjA1MjBlODczMjdkZTc4OTdlZTRkNWI5ZjBkZjBiZTNlMDllZDRkZWE4YzE0NTRmZjM0MjNiYjA4ZTE3OTMyNDVhOWRmOGJmNmFiMzk2OGM4ZWRkYzNiNTMyODU3MWM3N2YwOTFjYzU3ODU3NjkxMmRmZWJkMTY0YjlkZTU0NTRmZTBiZTFjMWY2Mzg1YjMyODM2MGNlNjdlYzdhMDVmNmUzMGViNDVjMTdjNDhhYzcwMDQxZDJjYWI2N2YwYTJhZTdhYWZkY2M4ZDI0NWVhMzQ0MmE2MzAwY2NjNyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzE6MTY6IjA4ZGFkN2YxMTM2M2ZhYTYyM2Q1ZDZkNWU4YTMxOTMyOGQ4MjE5MGQ3MTI3ZDI4NDZjNDM5YjBhYjcyNjE5YjBhNDNhOTUzMjBlNGVjMzRmYzNhOWNlYTg3NjQyMjMwNWJkNzZjNWJhN2JlOWUyZjQxMGM4MDYwNjQ1YTFkMjllZGIiOjE2OiIwODQ3ZTczMjM3NmZjNzkwMGY4OThlYTgyZWIyYjBmYzQxODU2NWZkYWU2MmY3ZDllYzRjZTIyMTdiOTc5OTBkZDI3MmRiMTU3Zjk5ZjYzYzBkY2JiOWZiYWNkYmQ0YzRkYWRiNmRmNjc3NTYzNThjYTQxNzQ4MjViNDhmNDk3MDZkIjoxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwNGRjMjUxYmU3MmU4OGU1NzIzNDg1YjYzODNhNjM3ZTJmZWZlMDc2NjBjNTE5YTU2MGI4YmMxOGJkZWRiODZlYWUyMzY0ZWE1M2JhOWRjYTZlYjNkMmU3ZDZiODA2YWY0MmIzZTg3ZjI5MWI0YTg4ODFkNWJmNTcyY2M5YTg1ZTE5Yzg2YWNiMjhmMDk4ZjlkYTAzODNjNTY2ZDNjMGY1OGNmZDhmMzk1ZGNmNjAyZTVjZDQwZThjNzE4M2Y3MTQ5OTZlMjI5N2VmIjoiYzU1OGQ3MTY3Y2JiNDUwOGFkYTA0Mjk3MWU3MWIxMzc3ZWVhNDI2OSI6IjMzMzQxYmEzNTc2YTEzMGE1MGUyYTVjZjg2NzkyMjQzODhkNTY5M2Y1YWNjYzIzNWFjOTVhZGQ2OGU1ZWIxZWVjMzE2NjZkMGNhN2ExY2RhNmY3MGExYWE3NjJjMDU3NTJhNTE5NTBjZGI4YWYzYzUzNzlmMThjZmU2YjViYzU1YTQ2NDgyMjZhMTVlOTEyZWYxOWFkNzdhZGVlYTkxMWQ2N2NmZWZkNjliYTQzZmE0MTE5MTM1ZmY2NDIxMTdiYTk4NWE3ZTAxMDAzMjVlOTUxOWYxY2E2YTkyMTZiZGEwNTViNTc4NTAxNTI5MTEyNWU5MGRjZDA3YTJjYTk2NzNlZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfNSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTAzMToxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwNGRjMjUxYmU3MmU4OGU1NzIzNDg1YjYzODNhNjM3ZTJmZWZlMDc2NjBjNTE5YTU2MGI4YmMxOGJkZWRiODZlYWUyMzY0ZWE1M2JhOWRjYTZlYjNkMmU3ZDZiODA2YWY0MmIzZTg3ZjI5MWI0YTg4ODFkNWJmNTcyY2M5YTg1ZTE5Yzg2YWNiMjhmMDk4ZjlkYTAzODNjNTY2ZDNjMGY1OGNmZDhmMzk1ZGNmNjAyZTVjZDQwZThjNzE4M2Y3MTQ5OTZlMjI5N2VmIjoiYzU1OGQ3MTY3Y2JiNDUwOGFkYTA0Mjk3MWU3MWIxMzc3ZWVhNDI2OSI6IjMzMzQxYmEzNTc2YTEzMGE1MGUyYTVjZjg2NzkyMjQzODhkNTY5M2Y1YWNjYzIzNWFjOTVhZGQ2OGU1ZWIxZWVjMzE2NjZkMGNhN2ExY2RhNmY3MGExYWE3NjJjMDU3NTJhNTE5NTBjZGI4YWYzYzUzNzlmMThjZmU2YjViYzU1YTQ2NDgyMjZhMTVlOTEyZWYxOWFkNzdhZGVlYTkxMWQ2N2NmZWZkNjliYTQzZmE0MTE5MTM1ZmY2NDIxMTdiYTk4NWE3ZTAxMDAzMjVlOTUxOWYxY2E2YTkyMTZiZGEwNTViNTc4NTAxNTI5MTEyNWU5MGRjZDA3YTJjYTk2NzNlZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDhfNgorcGtjczFfcnNhc3NhX3Bzc19zaWduOjEwMzE6MTY6IjA4ZGFkN2YxMTM2M2ZhYTYyM2Q1ZDZkNWU4YTMxOTMyOGQ4MjE5MGQ3MTI3ZDI4NDZjNDM5YjBhYjcyNjE5YjBhNDNhOTUzMjBlNGVjMzRmYzNhOWNlYTg3NjQyMjMwNWJkNzZjNWJhN2JlOWUyZjQxMGM4MDYwNjQ1YTFkMjllZGIiOjE2OiIwODQ3ZTczMjM3NmZjNzkwMGY4OThlYTgyZWIyYjBmYzQxODU2NWZkYWU2MmY3ZDllYzRjZTIyMTdiOTc5OTBkZDI3MmRiMTU3Zjk5ZjYzYzBkY2JiOWZiYWNkYmQ0YzRkYWRiNmRmNjc3NTYzNThjYTQxNzQ4MjViNDhmNDk3MDZkIjoxNjoiNDk1MzcwYTFmYjE4NTQzYzE2ZDM2MzFlMzE2MzI1NWRmNjJiZTZlZWU4OTBkNWYyNTUwOWU0Zjc3OGE4ZWE2ZmJiYmNkZjg1ZGZmNjRlMGQ5NzIwMDNhYjM2ODFmYmJhNmRkNDFmZDU0MTgyOWIyZTU4MmRlOWYyYTRhNGUwYTJkMDkwMGJlZjQ3NTNkYjNjZWUwZWUwNmM3ZGZhZThiMWQ1M2I1OTUzMjE4ZjljY2VlYTY5NWIwODY2OGVkZWFhZGNlZDk0NjNiMWQ3OTBkNWViZjI3ZTkxMTViNDZjYWQ0ZDlhMmI4ZWZhYjA1NjFiMDgxMDM0NDczOWFkYTA3MzNmIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwZWEzN2RmOWE2ZmVhNGE4YjYxMDM3M2MyNGNmMzkwYzIwZmE2ZTIxMzVjNDAwYzhhMzRmNWMxODNhN2U4ZWE0YzlhZTA5MGVkMzE3NTlmNDJkYzc3NzE5Y2NhNDAwZWNkY2M1MTdhY2ZjN2FjNjkwMjY3NWIyZWYzMGM1MDk2NjVmMzMyMTQ4MmZjNjlhOWZiNTcwZDE1ZTAxYzg0NWQwZDhlNTBkMmEyNGNiZjFjZjBlNzE0OTc1YTVkYjdiMThkOWU5ZTljYjkxYjVjYjE2ODY5MDYwZWQxOGI3YjU2MjQ1NTAzZjBjYWY5MDM1MmI4ZGU4MWNiNWExZDljNjMzNjA5MmYwY2QiOiI3NmZkNGU2NGZkYzk4ZWI5MjdhMDQwM2UzNWEwODRlNzZiYTlmOTJhIjoiMWVkMWQ4NDhmYjFlZGI0NDEyOWJkOWIzNTQ3OTVhZjk3YTA2OWE3YTAwZDAxNTEwNDg1OTNlMGM3MmMzNTE3ZmY5ZmYyYTQxZDBjYjVhMGFjODYwZDczNmExOTk3MDRmN2NiNmE1Mzk4NmE4OGJiZDhhYmNjMDA3NmEyY2U4NDc4ODAwMzE1MjVkNDQ5ZGEyYWM3ODM1NjM3NGM1MzZlMzQzZmFhN2NiYTQyYTVhYWE2NTA2MDg3NzkxYzA2YThlOTg5MzM1YWVkMTliZmFiMmQ1ZTY3ZTI3ZmIwYzI4NzVhZjg5NmMyMWI2ZThlNzMwOWQwNGU0ZjY3MjdlNjk0NjNlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOF82ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxMDMxOjE2OiI0OTUzNzBhMWZiMTg1NDNjMTZkMzYzMWUzMTYzMjU1ZGY2MmJlNmVlZTg5MGQ1ZjI1NTA5ZTRmNzc4YThlYTZmYmJiY2RmODVkZmY2NGUwZDk3MjAwM2FiMzY4MWZiYmE2ZGQ0MWZkNTQxODI5YjJlNTgyZGU5ZjJhNGE0ZTBhMmQwOTAwYmVmNDc1M2RiM2NlZTBlZTA2YzdkZmFlOGIxZDUzYjU5NTMyMThmOWNjZWVhNjk1YjA4NjY4ZWRlYWFkY2VkOTQ2M2IxZDc5MGQ1ZWJmMjdlOTExNWI0NmNhZDRkOWEyYjhlZmFiMDU2MWIwODEwMzQ0NzM5YWRhMDczM2YiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjBlYTM3ZGY5YTZmZWE0YThiNjEwMzczYzI0Y2YzOTBjMjBmYTZlMjEzNWM0MDBjOGEzNGY1YzE4M2E3ZThlYTRjOWFlMDkwZWQzMTc1OWY0MmRjNzc3MTljY2E0MDBlY2RjYzUxN2FjZmM3YWM2OTAyNjc1YjJlZjMwYzUwOTY2NWYzMzIxNDgyZmM2OWE5ZmI1NzBkMTVlMDFjODQ1ZDBkOGU1MGQyYTI0Y2JmMWNmMGU3MTQ5NzVhNWRiN2IxOGQ5ZTllOWNiOTFiNWNiMTY4NjkwNjBlZDE4YjdiNTYyNDU1MDNmMGNhZjkwMzUyYjhkZTgxY2I1YTFkOWM2MzM2MDkyZjBjZCI6Ijc2ZmQ0ZTY0ZmRjOThlYjkyN2EwNDAzZTM1YTA4NGU3NmJhOWY5MmEiOiIxZWQxZDg0OGZiMWVkYjQ0MTI5YmQ5YjM1NDc5NWFmOTdhMDY5YTdhMDBkMDE1MTA0ODU5M2UwYzcyYzM1MTdmZjlmZjJhNDFkMGNiNWEwYWM4NjBkNzM2YTE5OTcwNGY3Y2I2YTUzOTg2YTg4YmJkOGFiY2MwMDc2YTJjZTg0Nzg4MDAzMTUyNWQ0NDlkYTJhYzc4MzU2Mzc0YzUzNmUzNDNmYWE3Y2JhNDJhNWFhYTY1MDYwODc3OTFjMDZhOGU5ODkzMzVhZWQxOWJmYWIyZDVlNjdlMjdmYjBjMjg3NWFmODk2YzIxYjZlOGU3MzA5ZDA0ZTRmNjcyN2U2OTQ2M2UiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA5XzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxNTM2OjE2OiJmOGViOTdlOThkZjEyNjY0ZWVmZGI3NjE1OTZhNjlkZGNkMGU3NmRhZWNlNmVkNGJmNWExYjUwYWMwODZmNzkyOGE0ZDJmODcyNmE3N2U1MTViNzRkYTQxOTg4ZjIyMGIxY2M4N2FhMWZjODEwY2U5OWE4MmYyZDFjZTgyMWVkY2VkNzk0YzY5NDFmNDJjN2ExYTBiOGM0ZDI4Yzc1ZWM2MGI2NTIyNzlmNjE1NGE3NjJhZWQxNjVkNDdkZWUzNjciOjE2OiJlZDRkNzFkMGE2ZTI0YjkzYzJlNWY2YjRiYmUwNWY1ZmIwYWZhMDQyZDIwNGZlMzM3OGQzNjVjMmYyODhiNmE4ZGFkN2VmZTQ1ZDE1M2VlZjQwY2FjYzdiODFmZjkzNDAwMmQxMDg5OTRiOTRhNWU0NzI4Y2Q5Yzk2MzM3NWFlNDk5NjViZGE1NWNiZjBlZmVkOGQ2NTUzYjQwMjdmMmQ4NjIwOGE2ZTZiNDg5YzE3NjEyODA5MmQ2MjllNDlkM2QiOjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImE4OGUyNjU4NTVlOWQ3Y2EzNmM2ODc5NWYwYjMxYjU5MWNkNjU4N2M3MWQwNjBhMGIzZjdmM2VhZWY0Mzc5NTkyMjAyOGJjMmI2YWQ0NjdjZmMyZDdmNjU5YzUzODVhYTcwYmEzNjcyY2RkZTRjZmU0OTcwY2M3OTA0NjAxYjI3ODg3MmJmNTEzMjFjNGE5NzJmM2M5NTU3MGYzNDQ1ZDRmNTc5ODBlMGYyMGRmNTQ4NDZlNmE1MmM2NjhmMTI4OGMwM2Y5NTAwNmVhMzJmNTYyZDQwZDUyYWY5ZmViMzJmMGZhMDZkYjY1YjU4OGEyMzdiMzRlNTkyZDU1Y2Y5NzlmOTAzYTY0MmVmNjRkMmVkNTQyYWE4Yzc3ZGMxZGQ3NjJmNDVhNTkzMDNlZDc1ZTU0MWNhMjcxZTJiNjBjYTcwOWU0NGZhMDY2MTEzMWU4ZDVkNDE2M2ZkOGQzOTg1NjZjZTI2ZGU4NzMwZTcyZjljY2E3Mzc2NDFjMjQ0MTU5NDIwNjM3MDI4ZGYwYTE4MDc5ZDYyMDhlYThiNDcxMWEyYzc1MGY1IjoiYzBhNDI1MzEzZGY4ZDc1NjRiZDI0MzRkMzExNTIzZDUyNTdlZWQ4MCI6IjU4NjEwNzIyNmMzY2UwMTNhN2M4ZjA0ZDFhNmEyOTU5YmI0YjhlMjA1YmE0M2EyN2I1MGYxMjQxMTFiYzM1ZWY1ODliMDM5ZjU5MzIxODdjYjY5NmQ3ZDlhMzJjMGMzODMwMGE1Y2RkYTQ4MzRiNjJkMmViMjQwYWYzM2Y3OWQxM2RmYmYwOTViZjU5OWUwZDk2ODY5NDhjMTk2NDc0N2I2N2U4OWM5YWJhNWNkODUwMTYyMzZmNTY2Y2M1ODAyY2IxM2VhZDUxYmM3Y2E2YmVmM2I5NGRjYmRiYjFkNTcwNDY5NzcxZGYwZTAwYjFhOGEwNjc3NzQ3MmQyMzE2Mjc5ZWRhZTg2NDc0NjY4ZDRlMWVmZmY5NWYxZGU2MWM2MDIwZGEzMmFlOTJiYmYxNjUyMGZlZjNjZjRkODhmNjExMjFmMjRiYmQ5ZmU5MWI1OWNhZjEyMzViMmE5M2ZmODFmYzQwM2FkZGY0ZWJkZWE4NDkzNGE5Y2RhZjhlMWE5ZSI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDlfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MTUzNjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJhODhlMjY1ODU1ZTlkN2NhMzZjNjg3OTVmMGIzMWI1OTFjZDY1ODdjNzFkMDYwYTBiM2Y3ZjNlYWVmNDM3OTU5MjIwMjhiYzJiNmFkNDY3Y2ZjMmQ3ZjY1OWM1Mzg1YWE3MGJhMzY3MmNkZGU0Y2ZlNDk3MGNjNzkwNDYwMWIyNzg4NzJiZjUxMzIxYzRhOTcyZjNjOTU1NzBmMzQ0NWQ0ZjU3OTgwZTBmMjBkZjU0ODQ2ZTZhNTJjNjY4ZjEyODhjMDNmOTUwMDZlYTMyZjU2MmQ0MGQ1MmFmOWZlYjMyZjBmYTA2ZGI2NWI1ODhhMjM3YjM0ZTU5MmQ1NWNmOTc5ZjkwM2E2NDJlZjY0ZDJlZDU0MmFhOGM3N2RjMWRkNzYyZjQ1YTU5MzAzZWQ3NWU1NDFjYTI3MWUyYjYwY2E3MDllNDRmYTA2NjExMzFlOGQ1ZDQxNjNmZDhkMzk4NTY2Y2UyNmRlODczMGU3MmY5Y2NhNzM3NjQxYzI0NDE1OTQyMDYzNzAyOGRmMGExODA3OWQ2MjA4ZWE4YjQ3MTFhMmM3NTBmNSI6ImMwYTQyNTMxM2RmOGQ3NTY0YmQyNDM0ZDMxMTUyM2Q1MjU3ZWVkODAiOiI1ODYxMDcyMjZjM2NlMDEzYTdjOGYwNGQxYTZhMjk1OWJiNGI4ZTIwNWJhNDNhMjdiNTBmMTI0MTExYmMzNWVmNTg5YjAzOWY1OTMyMTg3Y2I2OTZkN2Q5YTMyYzBjMzgzMDBhNWNkZGE0ODM0YjYyZDJlYjI0MGFmMzNmNzlkMTNkZmJmMDk1YmY1OTllMGQ5Njg2OTQ4YzE5NjQ3NDdiNjdlODljOWFiYTVjZDg1MDE2MjM2ZjU2NmNjNTgwMmNiMTNlYWQ1MWJjN2NhNmJlZjNiOTRkY2JkYmIxZDU3MDQ2OTc3MWRmMGUwMGIxYThhMDY3Nzc0NzJkMjMxNjI3OWVkYWU4NjQ3NDY2OGQ0ZTFlZmZmOTVmMWRlNjFjNjAyMGRhMzJhZTkyYmJmMTY1MjBmZWYzY2Y0ZDg4ZjYxMTIxZjI0YmJkOWZlOTFiNTljYWYxMjM1YjJhOTNmZjgxZmM0MDNhZGRmNGViZGVhODQ5MzRhOWNkYWY4ZTFhOWUiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA5XzIKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxNTM2OjE2OiJmOGViOTdlOThkZjEyNjY0ZWVmZGI3NjE1OTZhNjlkZGNkMGU3NmRhZWNlNmVkNGJmNWExYjUwYWMwODZmNzkyOGE0ZDJmODcyNmE3N2U1MTViNzRkYTQxOTg4ZjIyMGIxY2M4N2FhMWZjODEwY2U5OWE4MmYyZDFjZTgyMWVkY2VkNzk0YzY5NDFmNDJjN2ExYTBiOGM0ZDI4Yzc1ZWM2MGI2NTIyNzlmNjE1NGE3NjJhZWQxNjVkNDdkZWUzNjciOjE2OiJlZDRkNzFkMGE2ZTI0YjkzYzJlNWY2YjRiYmUwNWY1ZmIwYWZhMDQyZDIwNGZlMzM3OGQzNjVjMmYyODhiNmE4ZGFkN2VmZTQ1ZDE1M2VlZjQwY2FjYzdiODFmZjkzNDAwMmQxMDg5OTRiOTRhNWU0NzI4Y2Q5Yzk2MzM3NWFlNDk5NjViZGE1NWNiZjBlZmVkOGQ2NTUzYjQwMjdmMmQ4NjIwOGE2ZTZiNDg5YzE3NjEyODA5MmQ2MjllNDlkM2QiOjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImM4YzljNmFmMDRhY2RhNDE0ZDIyN2VmMjNlMDgyMGMzNzMyYzUwMGRjODcyNzVlOTViMGQwOTU0MTM5OTNjMjY1OGJjMWQ5ODg1ODFiYTg3OWMyZDIwMWYxNGNiODhjZWQxNTNhMDE5NjlhN2JmMGE3YmU3OWM4NGMxNDg2YmMxMmIzZmE2YzU5ODcxYjY4MjdjOGNlMjUzY2E1ZmVmYThhOGM2OTBiZjMyNmU4ZTM3Y2RiOTZkOTBhODJlYmFiNjlmODYzNTBlMTgyMmU4YmQ1MzZhMmUiOiJiMzA3YzQzYjQ4NTBhOGRhYzJmMTVmMzJlMzc4MzllZjhjNWMwZTkxIjoiODBiNmQ2NDMyNTUyMDlmMGE0NTY3NjM4OTdhYzllZDI1OWQ0NTliNDljMjg4N2U1ODgyZWNiNDQzNGNmZDY2ZGQ3ZTE2OTkzNzUzODFlNTFjZDdmNTU0ZjJjMjcxNzA0YjM5OWQ0MmI0YmUyNTQwYTBlY2E2MTk1MWY1NTI2N2Y3YzI4NzhjMTIyODQyZGFkYjI4YjAxYmQ1ZjhjMDI1ZjdlMjI4NDE4YTY3M2MwM2Q2YmMwYzczNmQwYTI5NTQ2YmQ2N2Y3ODZkOWQ2OTJjY2VhNzc4ZDcxZDk4YzIwNjNiN2E3MTA5MjE4N2E0ZDM1YWYxMDgxMTFkODNlODNlYWU0NmM0NmFhMzQyNzdlMDYwNDQ1ODk5MDM3ODhmMWQ1ZTdjZWUyNWZiNDg1ZTkyOTQ5MTE4ODE0ZDZmMmMzZWUzNjE0ODkwMTZmMzI3ZmI1YmM1MTdlYjUwNDcwYmZmYTFhZmE1ZjRjZTlhYTBjZTViOGVlMTliZjU1MDFiOTU4IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV8yICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxNTM2OjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImM4YzljNmFmMDRhY2RhNDE0ZDIyN2VmMjNlMDgyMGMzNzMyYzUwMGRjODcyNzVlOTViMGQwOTU0MTM5OTNjMjY1OGJjMWQ5ODg1ODFiYTg3OWMyZDIwMWYxNGNiODhjZWQxNTNhMDE5NjlhN2JmMGE3YmU3OWM4NGMxNDg2YmMxMmIzZmE2YzU5ODcxYjY4MjdjOGNlMjUzY2E1ZmVmYThhOGM2OTBiZjMyNmU4ZTM3Y2RiOTZkOTBhODJlYmFiNjlmODYzNTBlMTgyMmU4YmQ1MzZhMmUiOiJiMzA3YzQzYjQ4NTBhOGRhYzJmMTVmMzJlMzc4MzllZjhjNWMwZTkxIjoiODBiNmQ2NDMyNTUyMDlmMGE0NTY3NjM4OTdhYzllZDI1OWQ0NTliNDljMjg4N2U1ODgyZWNiNDQzNGNmZDY2ZGQ3ZTE2OTkzNzUzODFlNTFjZDdmNTU0ZjJjMjcxNzA0YjM5OWQ0MmI0YmUyNTQwYTBlY2E2MTk1MWY1NTI2N2Y3YzI4NzhjMTIyODQyZGFkYjI4YjAxYmQ1ZjhjMDI1ZjdlMjI4NDE4YTY3M2MwM2Q2YmMwYzczNmQwYTI5NTQ2YmQ2N2Y3ODZkOWQ2OTJjY2VhNzc4ZDcxZDk4YzIwNjNiN2E3MTA5MjE4N2E0ZDM1YWYxMDgxMTFkODNlODNlYWU0NmM0NmFhMzQyNzdlMDYwNDQ1ODk5MDM3ODhmMWQ1ZTdjZWUyNWZiNDg1ZTkyOTQ5MTE4ODE0ZDZmMmMzZWUzNjE0ODkwMTZmMzI3ZmI1YmM1MTdlYjUwNDcwYmZmYTFhZmE1ZjRjZTlhYTBjZTViOGVlMTliZjU1MDFiOTU4IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV8zCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTUzNjoxNjoiZjhlYjk3ZTk4ZGYxMjY2NGVlZmRiNzYxNTk2YTY5ZGRjZDBlNzZkYWVjZTZlZDRiZjVhMWI1MGFjMDg2Zjc5MjhhNGQyZjg3MjZhNzdlNTE1Yjc0ZGE0MTk4OGYyMjBiMWNjODdhYTFmYzgxMGNlOTlhODJmMmQxY2U4MjFlZGNlZDc5NGM2OTQxZjQyYzdhMWEwYjhjNGQyOGM3NWVjNjBiNjUyMjc5ZjYxNTRhNzYyYWVkMTY1ZDQ3ZGVlMzY3IjoxNjoiZWQ0ZDcxZDBhNmUyNGI5M2MyZTVmNmI0YmJlMDVmNWZiMGFmYTA0MmQyMDRmZTMzNzhkMzY1YzJmMjg4YjZhOGRhZDdlZmU0NWQxNTNlZWY0MGNhY2M3YjgxZmY5MzQwMDJkMTA4OTk0Yjk0YTVlNDcyOGNkOWM5NjMzNzVhZTQ5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDNkIjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwYWZhZDQyY2NkNGZjNjA2NTRhNTUwMDJkMjI4ZjUyYTRhNWZlMDNiOGJiYjA4Y2E4MmRhY2E1NThiNDRkYmUxMjY2ZTUwYzBlNzQ1YTM2ZDlkMjkwNGUzNDA4YWJjZDFmZDU2OTk5NDA2M2Y0YTc1Y2M3MmYyZmVlMmEwY2Q4OTNhNDNhZjFjNWI4YjQ4N2RmMGE3MTYxMDAyNGU0ZjZkZGY5ZjI4YWQwODEzYzFhYWI5MWJjYjNjOTA2NGQ1ZmY3NDJkZWZmZWE2NTcwOTQxMzkzNjllNWVhNmY0YTk2MzE5YTVjYzgyMjQxNDViNTQ1MDYyNzU4ZmVmZDFmZTM0MDlhZTE2OTI1OWM2Y2RmZDZiNWYyOTU4ZTMxNGZhZWNiZTY5ZDJjYWNlNThlZTU1MTc5YWI5YjNlNmQxZWNjMTRhNTU3YzVmZWJlOTg4NTk1MjY0ZmM1ZGExYzU3MTQ2MmVjYTc5OGExOGExYTQ5NDBjZGFiNGEzZTkyMDA5Y2NkNDJlMWU5NDdiMTMxNGUzMjIzOGEyZGVjZTdkMjNhODliNWIzMGM3NTFmZDBhNGE0MzBkMmM1NDg1OTQiOiI5YTJiMDA3ZTgwOTc4YmJiMTkyYzM1NGViN2RhOWFlZGZjNzRkYmY1IjoiNDg0NDA4ZjM4OThjZDVmNTM0ODNmODA4MTllZmJmMjcwOGMzNGQyN2E4YjJhNmZhZThiMzIyZjkyNDAyMzdmOTgxODE3YWNhMTg0NmYxMDg0ZGFhNmQ3YzA3OTVmNmU1YmYxYWY1OWMzOGUxODU4NDM3Y2UxZjdlYzQxOWI5OGM4NzM2YWRmNmRkOWEwMGIxODA2ZDJiZDNhZDBhNzM3NzVlMDVmNTJkZmVmM2E1OWFiNGIwODE0M2YwZGYwNWNkMWFkOWQwNGJlY2VjYTZkYWE0YTIxMjk4MDNlMjAwY2JjNzc3ODdjYWY0YzFkMDY2M2E2YzU5ODdiNjA1OTUyMDE5NzgyY2FmMmVjMTQyNmQ2OGZiOTRlZDFkNGJlODE2YTdlZDA4MWI3N2U2YWIzMzBiM2ZmYzA3MzgyMGZlY2RlMzcyN2ZjYmUyOTVlZTYxYTA1MGEzNDM2NTg2MzdjM2ZkNjU5Y2ZiNjM3MzZkZTMyZDlmOTBkM2MyZjYzZWNhIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV8zICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxNTM2OjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjBhZmFkNDJjY2Q0ZmM2MDY1NGE1NTAwMmQyMjhmNTJhNGE1ZmUwM2I4YmJiMDhjYTgyZGFjYTU1OGI0NGRiZTEyNjZlNTBjMGU3NDVhMzZkOWQyOTA0ZTM0MDhhYmNkMWZkNTY5OTk0MDYzZjRhNzVjYzcyZjJmZWUyYTBjZDg5M2E0M2FmMWM1YjhiNDg3ZGYwYTcxNjEwMDI0ZTRmNmRkZjlmMjhhZDA4MTNjMWFhYjkxYmNiM2M5MDY0ZDVmZjc0MmRlZmZlYTY1NzA5NDEzOTM2OWU1ZWE2ZjRhOTYzMTlhNWNjODIyNDE0NWI1NDUwNjI3NThmZWZkMWZlMzQwOWFlMTY5MjU5YzZjZGZkNmI1ZjI5NThlMzE0ZmFlY2JlNjlkMmNhY2U1OGVlNTUxNzlhYjliM2U2ZDFlY2MxNGE1NTdjNWZlYmU5ODg1OTUyNjRmYzVkYTFjNTcxNDYyZWNhNzk4YTE4YTFhNDk0MGNkYWI0YTNlOTIwMDljY2Q0MmUxZTk0N2IxMzE0ZTMyMjM4YTJkZWNlN2QyM2E4OWI1YjMwYzc1MWZkMGE0YTQzMGQyYzU0ODU5NCI6IjlhMmIwMDdlODA5NzhiYmIxOTJjMzU0ZWI3ZGE5YWVkZmM3NGRiZjUiOiI0ODQ0MDhmMzg5OGNkNWY1MzQ4M2Y4MDgxOWVmYmYyNzA4YzM0ZDI3YThiMmE2ZmFlOGIzMjJmOTI0MDIzN2Y5ODE4MTdhY2ExODQ2ZjEwODRkYWE2ZDdjMDc5NWY2ZTViZjFhZjU5YzM4ZTE4NTg0MzdjZTFmN2VjNDE5Yjk4Yzg3MzZhZGY2ZGQ5YTAwYjE4MDZkMmJkM2FkMGE3Mzc3NWUwNWY1MmRmZWYzYTU5YWI0YjA4MTQzZjBkZjA1Y2QxYWQ5ZDA0YmVjZWNhNmRhYTRhMjEyOTgwM2UyMDBjYmM3Nzc4N2NhZjRjMWQwNjYzYTZjNTk4N2I2MDU5NTIwMTk3ODJjYWYyZWMxNDI2ZDY4ZmI5NGVkMWQ0YmU4MTZhN2VkMDgxYjc3ZTZhYjMzMGIzZmZjMDczODIwZmVjZGUzNzI3ZmNiZTI5NWVlNjFhMDUwYTM0MzY1ODYzN2MzZmQ2NTljZmI2MzczNmRlMzJkOWY5MGQzYzJmNjNlY2EiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA5XzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxNTM2OjE2OiJmOGViOTdlOThkZjEyNjY0ZWVmZGI3NjE1OTZhNjlkZGNkMGU3NmRhZWNlNmVkNGJmNWExYjUwYWMwODZmNzkyOGE0ZDJmODcyNmE3N2U1MTViNzRkYTQxOTg4ZjIyMGIxY2M4N2FhMWZjODEwY2U5OWE4MmYyZDFjZTgyMWVkY2VkNzk0YzY5NDFmNDJjN2ExYTBiOGM0ZDI4Yzc1ZWM2MGI2NTIyNzlmNjE1NGE3NjJhZWQxNjVkNDdkZWUzNjciOjE2OiJlZDRkNzFkMGE2ZTI0YjkzYzJlNWY2YjRiYmUwNWY1ZmIwYWZhMDQyZDIwNGZlMzM3OGQzNjVjMmYyODhiNmE4ZGFkN2VmZTQ1ZDE1M2VlZjQwY2FjYzdiODFmZjkzNDAwMmQxMDg5OTRiOTRhNWU0NzI4Y2Q5Yzk2MzM3NWFlNDk5NjViZGE1NWNiZjBlZmVkOGQ2NTUzYjQwMjdmMmQ4NjIwOGE2ZTZiNDg5YzE3NjEyODA5MmQ2MjllNDlkM2QiOjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjFkZmQ0M2I0NmM5M2RiODI2MjliZGFlMmJkMGExMmI4ODJlYTA0YzNiNDY1ZjVjZjkzMDIzZjAxMDU5NjI2ZGJiZTk5ZjI2YmIxYmU5NDlkZGRkMTZkYzdmM2RlYmIxOWExOTQ2MjdmMGIyMjQ0MzRkZjdkODcwMGU5ZTk4YjA2ZTM2MGMxMmZkYmUzZDE5ZjUxYzk2ODRlYjkwODllY2JiMGEyZjA0NTAzOTlkM2Y1OWVhYzcyOTQwODVkMDQ0ZjUzOTNjNmNlNzM3NDIzZDhiODZjNDE1MzcwZDM4OWUzMGI5ZjBhM2MwMmQyNWQwMDgyZThhZDZmM2YxZWYyNGE0NWMzY2Y4MmIzODMzNjcwNjNhNGQ0NjEzZTQyNjRmMDFiMmRhYzJlNWFhNDIwNDNmOGZiNWY2OWZhODcxZDE0ZmIyNzNlNzY3YTUzMWM0MGYwMmYzNDNiYzJmYjQ1YTBjN2UwZjZiZTI1NjE5MjNhNzcyMTFkNjZhNmUyZGJiNDNjMzY2MzUwYmVhZTIyZGEzYWMyYzFmNTA3NzA5NmZjYjVjNGJmMjU1Zjc1NzQzNTFhZTBiMWUxZjAzNjMyODE3YzA4NTZkNGE4YmE5N2FmYmRjOGI4NTg1NTQwMmJjNTY5MjZmY2VjMjA5ZjllYTgiOiI3MGYzODJiZGRmNGQ1ZDJkZDg4YjNiYzdiNzMwOGJlNjMyYjg0MDQ1IjoiODRlYmViNDgxYmU1OTg0NWI0NjQ2OGJhZmI0NzFjMDExMmUwMmIyMzVkODRiNWQ5MTFjYmQxOTI2ZWU1MDc0YWUwNDI0NDk1Y2IyMGU4MjMwOGI4ZWJiNjVmNDE5YTAzZmI0MGU3MmI3ODk4MWQ4OGFhZDE0MzA1MzY4NTE3MmM5N2IyOWM4YjdiZjBhZTczYjViMjI2M2M0MDNkYTBlZDJmODBmZjc0NTBhZjc4MjhlYjhiODZmMDAyOGJkMmE4YjE3NmE0ZDIyOGNjY2VhMTgzOTRmMjM4YjA5ZmY3NThjYzAwYmMwNDMwMTE1MjM1NTc0MmYyODJiNTRlNjYzYTkxOWU3MDlkOGRhMjRhZGU1NTAwYTdiOWFhNTAyMjZlMGNhNTI5MjNlNmMyZDg2MGVjNTBmZjQ4MGZhNTc0NzdlODJiMDU2NWY0Mzc5Zjc5Yzc3MmQ1YzJkYTgwYWY5ZmJmMzI1ZWNlNmZjMjBiMDA5NjE2MTRiZWU4OWExODNlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxNTM2OjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjFkZmQ0M2I0NmM5M2RiODI2MjliZGFlMmJkMGExMmI4ODJlYTA0YzNiNDY1ZjVjZjkzMDIzZjAxMDU5NjI2ZGJiZTk5ZjI2YmIxYmU5NDlkZGRkMTZkYzdmM2RlYmIxOWExOTQ2MjdmMGIyMjQ0MzRkZjdkODcwMGU5ZTk4YjA2ZTM2MGMxMmZkYmUzZDE5ZjUxYzk2ODRlYjkwODllY2JiMGEyZjA0NTAzOTlkM2Y1OWVhYzcyOTQwODVkMDQ0ZjUzOTNjNmNlNzM3NDIzZDhiODZjNDE1MzcwZDM4OWUzMGI5ZjBhM2MwMmQyNWQwMDgyZThhZDZmM2YxZWYyNGE0NWMzY2Y4MmIzODMzNjcwNjNhNGQ0NjEzZTQyNjRmMDFiMmRhYzJlNWFhNDIwNDNmOGZiNWY2OWZhODcxZDE0ZmIyNzNlNzY3YTUzMWM0MGYwMmYzNDNiYzJmYjQ1YTBjN2UwZjZiZTI1NjE5MjNhNzcyMTFkNjZhNmUyZGJiNDNjMzY2MzUwYmVhZTIyZGEzYWMyYzFmNTA3NzA5NmZjYjVjNGJmMjU1Zjc1NzQzNTFhZTBiMWUxZjAzNjMyODE3YzA4NTZkNGE4YmE5N2FmYmRjOGI4NTg1NTQwMmJjNTY5MjZmY2VjMjA5ZjllYTgiOiI3MGYzODJiZGRmNGQ1ZDJkZDg4YjNiYzdiNzMwOGJlNjMyYjg0MDQ1IjoiODRlYmViNDgxYmU1OTg0NWI0NjQ2OGJhZmI0NzFjMDExMmUwMmIyMzVkODRiNWQ5MTFjYmQxOTI2ZWU1MDc0YWUwNDI0NDk1Y2IyMGU4MjMwOGI4ZWJiNjVmNDE5YTAzZmI0MGU3MmI3ODk4MWQ4OGFhZDE0MzA1MzY4NTE3MmM5N2IyOWM4YjdiZjBhZTczYjViMjI2M2M0MDNkYTBlZDJmODBmZjc0NTBhZjc4MjhlYjhiODZmMDAyOGJkMmE4YjE3NmE0ZDIyOGNjY2VhMTgzOTRmMjM4YjA5ZmY3NThjYzAwYmMwNDMwMTE1MjM1NTc0MmYyODJiNTRlNjYzYTkxOWU3MDlkOGRhMjRhZGU1NTAwYTdiOWFhNTAyMjZlMGNhNTI5MjNlNmMyZDg2MGVjNTBmZjQ4MGZhNTc0NzdlODJiMDU2NWY0Mzc5Zjc5Yzc3MmQ1YzJkYTgwYWY5ZmJmMzI1ZWNlNmZjMjBiMDA5NjE2MTRiZWU4OWExODNlIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV81Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MTUzNjoxNjoiZjhlYjk3ZTk4ZGYxMjY2NGVlZmRiNzYxNTk2YTY5ZGRjZDBlNzZkYWVjZTZlZDRiZjVhMWI1MGFjMDg2Zjc5MjhhNGQyZjg3MjZhNzdlNTE1Yjc0ZGE0MTk4OGYyMjBiMWNjODdhYTFmYzgxMGNlOTlhODJmMmQxY2U4MjFlZGNlZDc5NGM2OTQxZjQyYzdhMWEwYjhjNGQyOGM3NWVjNjBiNjUyMjc5ZjYxNTRhNzYyYWVkMTY1ZDQ3ZGVlMzY3IjoxNjoiZWQ0ZDcxZDBhNmUyNGI5M2MyZTVmNmI0YmJlMDVmNWZiMGFmYTA0MmQyMDRmZTMzNzhkMzY1YzJmMjg4YjZhOGRhZDdlZmU0NWQxNTNlZWY0MGNhY2M3YjgxZmY5MzQwMDJkMTA4OTk0Yjk0YTVlNDcyOGNkOWM5NjMzNzVhZTQ5OTY1YmRhNTVjYmYwZWZlZDhkNjU1M2I0MDI3ZjJkODYyMDhhNmU2YjQ4OWMxNzYxMjgwOTJkNjI5ZTQ5ZDNkIjoxNjoiZTZiZDY5MmFjOTY2NDU3OTA0MDNmZGQwZjViZWI4YjliZjkyZWQxMDAwN2ZjMzY1MDQ2NDE5ZGQwNmMwNWM1YjViMmY0OGVjZjk4OWU0Y2UyNjkxMDk5NzljYmI0MGI0YTBhZDI0ZDIyNDgzZDFlZTMxNWFkNGNjYjE1MzQyNjgzNTI2OTFjNTI0ZjZkZDhlNmMyOWQyMjRjZjI0Njk3M2FlYzg2YzViZjZiMTQwMWE4NTBkMWI5YWQxYmI4Y2JjZWM0N2IwNmYwZjhjN2Y0NWQzZmM4ZjMxOTI5OWM1NDMzZGRiYzJiMzA1M2I0N2RlZDJlY2Q0YTRjYWVmZDYxNDgzM2RjOGJiNjIyZjMxN2VkMDc2YjgwNTdmZThkZTNmODQ0ODBhZDVlODNlNGE2MTkwNGE0ZjI0OGZiMzk3MDI3MzU3ZTFkMzBlNDYzMTM5ODE1YzZmZDRmZDVhYzViODE3MmE0NTIzMGVjYjYzMThhMDRmMTQ1NWQ4NGU1YThiIjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIxYmRjNmU3Yzk4ZmI4Y2Y1NGU5YjA5N2I2NmE4MzFlOWNmZTUyZDlkNDg4ODQ0OGVlNGIwOTc4MDkzYmExZDdkNzNhZTc4YjNhNjJiYTRhZDk1Y2QyODljY2I5ZTAwNTIyNmJiM2QxNzhiY2NhYTgyMWZiMDQ0YTRlMjFlZTk3Njk2YzE0ZDA2NzhjOTRjMmRhZTkzYjBhZDczOTIyMjE4NTUzZGFhN2U0NGViZTU3NzI1YTdhNDVjYzcyYjliMjEzOGE2YjE3YzhkYjQxMWNlODI3OWVlMTI0MWFmZjBhOGJlYzZmNzdmODdlZGIwYzY5Y2IyNzIzNmUzNDM1YTgwMGIxOTJlNGYxMWU1MTllM2ZlMzBmYzMwZWFjY2NhNGZiYjQxNzY5MDI5YmY3MDhlODE3YTllNjgzODA1YmU2N2ZhMTAwOTg0NjgzYjc0ODM4ZTNiY2ZmYTc5MzY2ZWVkMWQ0ODFjNzY3MjkxMTg4MzhmMzFiYThhMDQ4YTkzYzFiZTQ0MjQ1OThlOGRmNjMyOGI3YTc3ODgwYTNmOWM3ZTJlOGRmY2E4ZWI1YTI2ZmI4NmJkYzU1NmQ0MmJiZTAxZDlmYTZlZDgwNjQ2NDkxYzkzNDEiOiJkNjg5MjU3YTg2ZWZmYTY4MjEyYzVlMGM2MTllY2EyOTVmYjkxYjY3IjoiODIxMDJkZjhjYjkxZTcxNzk5MTlhMDRkMjZkMzM1ZDY0ZmJjMmY4NzJjNDQ4MzM5NDMyNDFkZTg0NTQ4MTAyNzRjZGYzZGI1ZjQyZDQyM2RiMTUyYWY3MTM1ZjcwMTQyMGUzOWI0OTRhNjdjYmZkMTlmOTExOWRhMjMzYTIzZGE1YzY0MzliNWJhMGQyYmMzNzNlZWUzNTA3MDAxMzc4ZDRhNDA3Mzg1NmI3ZmUyYWJhMGI1ZWU5M2IyN2Y0YWZlYzdkNGQxMjA5MjFjODNmNjA2NzY1YjAyYzE5ZTRkNmExYTNiOTVmYTRjNDIyOTUxYmU0ZjUyMTMxMDc3ZWYxNzE3OTcyOWNkZGZiZGI1Njk1MGRiYWNlZWZlNzhjYjE2NjQwYTA5OWVhNTZkMjQzODllZWYxMGY4ZmVjYjMxYmEzZWEzYjIyN2MwYTg2Njk4YmI4OWUzZTkzNjM5MDViZjIyNzc3YjJhM2FhNTIxYjY1YjRjZWY3NmQ4M2JkZTRjIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgOV81ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToxNTM2OjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjFiZGM2ZTdjOThmYjhjZjU0ZTliMDk3YjY2YTgzMWU5Y2ZlNTJkOWQ0ODg4NDQ4ZWU0YjA5NzgwOTNiYTFkN2Q3M2FlNzhiM2E2MmJhNGFkOTVjZDI4OWNjYjllMDA1MjI2YmIzZDE3OGJjY2FhODIxZmIwNDRhNGUyMWVlOTc2OTZjMTRkMDY3OGM5NGMyZGFlOTNiMGFkNzM5MjIyMTg1NTNkYWE3ZTQ0ZWJlNTc3MjVhN2E0NWNjNzJiOWIyMTM4YTZiMTdjOGRiNDExY2U4Mjc5ZWUxMjQxYWZmMGE4YmVjNmY3N2Y4N2VkYjBjNjljYjI3MjM2ZTM0MzVhODAwYjE5MmU0ZjExZTUxOWUzZmUzMGZjMzBlYWNjY2E0ZmJiNDE3NjkwMjliZjcwOGU4MTdhOWU2ODM4MDViZTY3ZmExMDA5ODQ2ODNiNzQ4MzhlM2JjZmZhNzkzNjZlZWQxZDQ4MWM3NjcyOTExODgzOGYzMWJhOGEwNDhhOTNjMWJlNDQyNDU5OGU4ZGY2MzI4YjdhNzc4ODBhM2Y5YzdlMmU4ZGZjYThlYjVhMjZmYjg2YmRjNTU2ZDQyYmJlMDFkOWZhNmVkODA2NDY0OTFjOTM0MSI6ImQ2ODkyNTdhODZlZmZhNjgyMTJjNWUwYzYxOWVjYTI5NWZiOTFiNjciOiI4MjEwMmRmOGNiOTFlNzE3OTkxOWEwNGQyNmQzMzVkNjRmYmMyZjg3MmM0NDgzMzk0MzI0MWRlODQ1NDgxMDI3NGNkZjNkYjVmNDJkNDIzZGIxNTJhZjcxMzVmNzAxNDIwZTM5YjQ5NGE2N2NiZmQxOWY5MTE5ZGEyMzNhMjNkYTVjNjQzOWI1YmEwZDJiYzM3M2VlZTM1MDcwMDEzNzhkNGE0MDczODU2YjdmZTJhYmEwYjVlZTkzYjI3ZjRhZmVjN2Q0ZDEyMDkyMWM4M2Y2MDY3NjViMDJjMTllNGQ2YTFhM2I5NWZhNGM0MjI5NTFiZTRmNTIxMzEwNzdlZjE3MTc5NzI5Y2RkZmJkYjU2OTUwZGJhY2VlZmU3OGNiMTY2NDBhMDk5ZWE1NmQyNDM4OWVlZjEwZjhmZWNiMzFiYTNlYTNiMjI3YzBhODY2OThiYjg5ZTNlOTM2MzkwNWJmMjI3NzdiMmEzYWE1MjFiNjViNGNlZjc2ZDgzYmRlNGMiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA5XzYKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoxNTM2OjE2OiJmOGViOTdlOThkZjEyNjY0ZWVmZGI3NjE1OTZhNjlkZGNkMGU3NmRhZWNlNmVkNGJmNWExYjUwYWMwODZmNzkyOGE0ZDJmODcyNmE3N2U1MTViNzRkYTQxOTg4ZjIyMGIxY2M4N2FhMWZjODEwY2U5OWE4MmYyZDFjZTgyMWVkY2VkNzk0YzY5NDFmNDJjN2ExYTBiOGM0ZDI4Yzc1ZWM2MGI2NTIyNzlmNjE1NGE3NjJhZWQxNjVkNDdkZWUzNjciOjE2OiJlZDRkNzFkMGE2ZTI0YjkzYzJlNWY2YjRiYmUwNWY1ZmIwYWZhMDQyZDIwNGZlMzM3OGQzNjVjMmYyODhiNmE4ZGFkN2VmZTQ1ZDE1M2VlZjQwY2FjYzdiODFmZjkzNDAwMmQxMDg5OTRiOTRhNWU0NzI4Y2Q5Yzk2MzM3NWFlNDk5NjViZGE1NWNiZjBlZmVkOGQ2NTUzYjQwMjdmMmQ4NjIwOGE2ZTZiNDg5YzE3NjEyODA5MmQ2MjllNDlkM2QiOjE2OiJlNmJkNjkyYWM5NjY0NTc5MDQwM2ZkZDBmNWJlYjhiOWJmOTJlZDEwMDA3ZmMzNjUwNDY0MTlkZDA2YzA1YzViNWIyZjQ4ZWNmOTg5ZTRjZTI2OTEwOTk3OWNiYjQwYjRhMGFkMjRkMjI0ODNkMWVlMzE1YWQ0Y2NiMTUzNDI2ODM1MjY5MWM1MjRmNmRkOGU2YzI5ZDIyNGNmMjQ2OTczYWVjODZjNWJmNmIxNDAxYTg1MGQxYjlhZDFiYjhjYmNlYzQ3YjA2ZjBmOGM3ZjQ1ZDNmYzhmMzE5Mjk5YzU0MzNkZGJjMmIzMDUzYjQ3ZGVkMmVjZDRhNGNhZWZkNjE0ODMzZGM4YmI2MjJmMzE3ZWQwNzZiODA1N2ZlOGRlM2Y4NDQ4MGFkNWU4M2U0YTYxOTA0YTRmMjQ4ZmIzOTcwMjczNTdlMWQzMGU0NjMxMzk4MTVjNmZkNGZkNWFjNWI4MTcyYTQ1MjMwZWNiNjMxOGEwNGYxNDU1ZDg0ZTVhOGIiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg4YzdhOWYxMzYwNDAxZDkwZTUzYjEwMWI2MWM1MzI1YzNjNzVkYjFiNDExZmJlYjhlODMwYjc1ZTk2YjU2NjcwYWQyNDU0MDRlMTY3OTM1NDRlZTM1NGJjNjEzYTkwY2M5ODQ4NzE1YTczZGI1ODkzZTdmNmQyNzk4MTVjMGMxZGU4M2VmOGUyOTU2ZTNhNTZlZDI2YTg4OGQ3YTljZGNkMDQyZjRiMTZiN2ZhNTFlZjFhMDU3MzY2MmQxNmEzMDJkMGVjNWIyODVkMmUwM2FkOTY1MjljODdiM2QzNzRkYjM3MmQ5NWIyNDQzZDA2MWI2YjFhMzUwYmE4NzgwN2VkMDgzYWZkMWViMDVjM2Y1MmY0ZWJhNWVkMjIyNzcxNGZkYjUwYjlkOWQ5ZGQ2ODE0ZjYyZjYyNzJmY2Q1Y2RiY2U3YTllZjc5NyI6ImMyNWYxM2JmNjdkMDgxNjcxYTA0ODFhMWYxODIwZDYxM2JiYTIyNzYiOiJhN2ZkYjBkMjU5MTY1Y2EyYzg4ZDAwYmJmMTAyOGE4NjdkMzM3Njk5ZDA2MTE5M2IxN2E5NjQ4ZTE0Y2NiYmFhZGVhY2FhY2RlYzgxNWU3NTcxMjk0ZWJiOGExMTdhZjIwNWZhMDc4YjQ3YjA3MTJjMTk5ZTNhZDA1MTM1YzUwNGMyNGI4MTcwNTExNTc0MDgwMjQ4Nzk5MmZmZDUxMWQ0YWZjNmI4NTQ0OTFlYjNmMGRkNTIzMTM5NTQyZmYxNWMzMTAxZWU4NTU0MzUxN2M2YTNjNzk0MTdjNjdlMmRkOWFhNzQxZTlhMjliMDZkY2I1OTNjMjMzNmIzNjcwYWUzYWZiYWM3YzNlNzZlMjE1NDczZTg2NmUzMzhjYTI0NGRlMDBiNjI2MjRkNmI5NDI2ODIyY2VhZTlmOGNjNDYwODk1ZjQxMjUwMDczZmQ0NWM1YTFlN2I0MjVjMjA0YTQyM2E2OTkxNTlmNjkwM2U3MTBiMzdhN2JiMmJjODA0OWYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSA5XzYgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjE1MzY6MTY6ImU2YmQ2OTJhYzk2NjQ1NzkwNDAzZmRkMGY1YmViOGI5YmY5MmVkMTAwMDdmYzM2NTA0NjQxOWRkMDZjMDVjNWI1YjJmNDhlY2Y5ODllNGNlMjY5MTA5OTc5Y2JiNDBiNGEwYWQyNGQyMjQ4M2QxZWUzMTVhZDRjY2IxNTM0MjY4MzUyNjkxYzUyNGY2ZGQ4ZTZjMjlkMjI0Y2YyNDY5NzNhZWM4NmM1YmY2YjE0MDFhODUwZDFiOWFkMWJiOGNiY2VjNDdiMDZmMGY4YzdmNDVkM2ZjOGYzMTkyOTljNTQzM2RkYmMyYjMwNTNiNDdkZWQyZWNkNGE0Y2FlZmQ2MTQ4MzNkYzhiYjYyMmYzMTdlZDA3NmI4MDU3ZmU4ZGUzZjg0NDgwYWQ1ZTgzZTRhNjE5MDRhNGYyNDhmYjM5NzAyNzM1N2UxZDMwZTQ2MzEzOTgxNWM2ZmQ0ZmQ1YWM1YjgxNzJhNDUyMzBlY2I2MzE4YTA0ZjE0NTVkODRlNWE4YiI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiODhjN2E5ZjEzNjA0MDFkOTBlNTNiMTAxYjYxYzUzMjVjM2M3NWRiMWI0MTFmYmViOGU4MzBiNzVlOTZiNTY2NzBhZDI0NTQwNGUxNjc5MzU0NGVlMzU0YmM2MTNhOTBjYzk4NDg3MTVhNzNkYjU4OTNlN2Y2ZDI3OTgxNWMwYzFkZTgzZWY4ZTI5NTZlM2E1NmVkMjZhODg4ZDdhOWNkY2QwNDJmNGIxNmI3ZmE1MWVmMWEwNTczNjYyZDE2YTMwMmQwZWM1YjI4NWQyZTAzYWQ5NjUyOWM4N2IzZDM3NGRiMzcyZDk1YjI0NDNkMDYxYjZiMWEzNTBiYTg3ODA3ZWQwODNhZmQxZWIwNWMzZjUyZjRlYmE1ZWQyMjI3NzE0ZmRiNTBiOWQ5ZDlkZDY4MTRmNjJmNjI3MmZjZDVjZGJjZTdhOWVmNzk3IjoiYzI1ZjEzYmY2N2QwODE2NzFhMDQ4MWExZjE4MjBkNjEzYmJhMjI3NiI6ImE3ZmRiMGQyNTkxNjVjYTJjODhkMDBiYmYxMDI4YTg2N2QzMzc2OTlkMDYxMTkzYjE3YTk2NDhlMTRjY2JiYWFkZWFjYWFjZGVjODE1ZTc1NzEyOTRlYmI4YTExN2FmMjA1ZmEwNzhiNDdiMDcxMmMxOTllM2FkMDUxMzVjNTA0YzI0YjgxNzA1MTE1NzQwODAyNDg3OTkyZmZkNTExZDRhZmM2Yjg1NDQ5MWViM2YwZGQ1MjMxMzk1NDJmZjE1YzMxMDFlZTg1NTQzNTE3YzZhM2M3OTQxN2M2N2UyZGQ5YWE3NDFlOWEyOWIwNmRjYjU5M2MyMzM2YjM2NzBhZTNhZmJhYzdjM2U3NmUyMTU0NzNlODY2ZTMzOGNhMjQ0ZGUwMGI2MjYyNGQ2Yjk0MjY4MjJjZWFlOWY4Y2M0NjA4OTVmNDEyNTAwNzNmZDQ1YzVhMWU3YjQyNWMyMDRhNDIzYTY5OTE1OWY2OTAzZTcxMGIzN2E3YmIyYmM4MDQ5ZiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzEKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoyMDQ4OjE2OiJjZmQ1MDI4M2ZlZWViOTdmNmYwOGQ3M2NiYzdiMzgzNmY4MmJiY2Q0OTk0NzlmNWU2Zjc2ZmRmY2I4YjM4YzRmNzFkYzllODhiZDZhNmY3NjM3MWFmZDY1ZDJhZjE4NjJiMzJhZmIzNGE5NWY3MWI4YjEzMjA0M2ZmZWJlM2E5NTJiYWY3NTkyNDQ4MTQ4YzAzZjljNjliMWQ2OGU0Y2U1Y2YzMmM4NmJhZjQ2ZmVkMzAxY2ExYWI0MDMwNjliMzJmNDU2YjkxZjcxODk4YWIwODFjZDhjNDI1MmVmNTI3MTkxNWM5Nzk0YjhmMjk1ODUxZGE3NTEwZjk5Y2I3M2ViIjoxNjoiY2M0ZTkwZDJhMWIzYTA2NWQzYjJkMWY1YThmY2UzMWI1NDQ0NzU2NjRlYWI1NjFkMjk3MWI5OWZiN2JlZjg0NGU4ZWMxZjM2MGI4YzJhYzgzNTk2OTI5NzFlYTZhMzhmNzIzZmNjMjExZjVkYmNiMTc3YTBmZGFjNTE2NGExZDRmZjdmYmI0ZTgyOTk4NjM1M2NiOTgzNjU5YTE0OGNkZDQyMGM3ZDMxYmEzODIyZWE5MGEzMmJlNDZjMDMwZThjMTdlMWZhMGFkMzc4NTllMDZiMGFhNmZhM2IyMTZkOWNiZTZjMGUyMjMzOTc2OWMwYTYxNTkxM2U1ZGE3MTljZiI6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiI4ODMxNzdlNTEyNmI5YmUyZDlhOTY4MDMyN2Q1MzcwYzZmMjY4NjFmNTgyMGM0M2RhNjdhM2FkNjA5IjoiMDRlMjE1ZWU2ZmY5MzRiOWRhNzBkNzczMGM4NzM0YWJmY2VjZGU4OSI6IjgyYzJiMTYwMDkzYjhhYTNjMGY3NTIyYjE5Zjg3MzU0MDY2Yzc3ODQ3YWJmMmE5ZmNlNTQyZDBlODRlOTIwYzVhZmI0OWZmZGZkYWNlMTY1NjBlZTk0YTEzNjk2MDExNDhlYmFkN2EwZTE1MWNmMTYzMzE3OTFhNTcyN2QwNWYyMWU3NGU3ZWI4MTE0NDAyMDY5MzVkNzQ0NzY1YTE1ZTc5ZjAxNWNiNjZjNTMyYzg3YTZhMDU5NjFjOGJmYWQ3NDFhOWE2NjU3MDIyODk0MzkzZTcyMjM3Mzk3OTZjMDJhNzc0NTVkMGY1NTViMGVjMDFkZGYyNTliNjIwN2ZkMGZkNTc2MTRjZWYxYTU1NzNiYWFmZjRlYzAwMDY5OTUxNjU5Yjg1ZjI0MzAwYTI1MTYwY2E4NTIyZGM2ZTY3MjdlNTdkMDE5ZDdlNjM2MjliOGZlNWU4OWUyNWNjMTViZWIzYTY0NzU3NzU1OTI5OTI4MGI5YjI4Zjc5YjA0MDkwMDBiZTI1YmJkOTY0MDhiYTNiNDNjYzQ4NjE4NGRkMWM4ZTYyNTUzZmExYWY0MDQwZjYwNjYzZGU3ZjVlNDljMDQzODhlMjU3ZjFjZTg5Yzk1ZGFiNDhhMzE1ZDliNjZiMWI3NjI4MjMzODc2ZmYyMzg1MjMwZDA3MGQwN2UxNjY2IjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfMSAodmVyaWZ5KQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnk6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6Ijg4MzE3N2U1MTI2YjliZTJkOWE5NjgwMzI3ZDUzNzBjNmYyNjg2MWY1ODIwYzQzZGE2N2EzYWQ2MDkiOiIwNGUyMTVlZTZmZjkzNGI5ZGE3MGQ3NzMwYzg3MzRhYmZjZWNkZTg5IjoiODJjMmIxNjAwOTNiOGFhM2MwZjc1MjJiMTlmODczNTQwNjZjNzc4NDdhYmYyYTlmY2U1NDJkMGU4NGU5MjBjNWFmYjQ5ZmZkZmRhY2UxNjU2MGVlOTRhMTM2OTYwMTE0OGViYWQ3YTBlMTUxY2YxNjMzMTc5MWE1NzI3ZDA1ZjIxZTc0ZTdlYjgxMTQ0MDIwNjkzNWQ3NDQ3NjVhMTVlNzlmMDE1Y2I2NmM1MzJjODdhNmEwNTk2MWM4YmZhZDc0MWE5YTY2NTcwMjI4OTQzOTNlNzIyMzczOTc5NmMwMmE3NzQ1NWQwZjU1NWIwZWMwMWRkZjI1OWI2MjA3ZmQwZmQ1NzYxNGNlZjFhNTU3M2JhYWZmNGVjMDAwNjk5NTE2NTliODVmMjQzMDBhMjUxNjBjYTg1MjJkYzZlNjcyN2U1N2QwMTlkN2U2MzYyOWI4ZmU1ZTg5ZTI1Y2MxNWJlYjNhNjQ3NTc3NTU5Mjk5MjgwYjliMjhmNzliMDQwOTAwMGJlMjViYmQ5NjQwOGJhM2I0M2NjNDg2MTg0ZGQxYzhlNjI1NTNmYTFhZjQwNDBmNjA2NjNkZTdmNWU0OWMwNDM4OGUyNTdmMWNlODljOTVkYWI0OGEzMTVkOWI2NmIxYjc2MjgyMzM4NzZmZjIzODUyMzBkMDcwZDA3ZTE2NjYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF8yCitwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MjA0ODoxNjoiY2ZkNTAyODNmZWVlYjk3ZjZmMDhkNzNjYmM3YjM4MzZmODJiYmNkNDk5NDc5ZjVlNmY3NmZkZmNiOGIzOGM0ZjcxZGM5ZTg4YmQ2YTZmNzYzNzFhZmQ2NWQyYWYxODYyYjMyYWZiMzRhOTVmNzFiOGIxMzIwNDNmZmViZTNhOTUyYmFmNzU5MjQ0ODE0OGMwM2Y5YzY5YjFkNjhlNGNlNWNmMzJjODZiYWY0NmZlZDMwMWNhMWFiNDAzMDY5YjMyZjQ1NmI5MWY3MTg5OGFiMDgxY2Q4YzQyNTJlZjUyNzE5MTVjOTc5NGI4ZjI5NTg1MWRhNzUxMGY5OWNiNzNlYiI6MTY6ImNjNGU5MGQyYTFiM2EwNjVkM2IyZDFmNWE4ZmNlMzFiNTQ0NDc1NjY0ZWFiNTYxZDI5NzFiOTlmYjdiZWY4NDRlOGVjMWYzNjBiOGMyYWM4MzU5NjkyOTcxZWE2YTM4ZjcyM2ZjYzIxMWY1ZGJjYjE3N2EwZmRhYzUxNjRhMWQ0ZmY3ZmJiNGU4Mjk5ODYzNTNjYjk4MzY1OWExNDhjZGQ0MjBjN2QzMWJhMzgyMmVhOTBhMzJiZTQ2YzAzMGU4YzE3ZTFmYTBhZDM3ODU5ZTA2YjBhYTZmYTNiMjE2ZDljYmU2YzBlMjIzMzk3NjljMGE2MTU5MTNlNWRhNzE5Y2YiOjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiZGQ2NzBhMDE0NjU4NjhhZGM5M2YyNjEzMTk1N2E1MGM1MmZiNzc3Y2RiYWEzMDg5MmM5ZTEyMzYxMTY0ZWMxMzk3OWQ0MzA0ODExOGU0NDQ1ZGI4N2JlZTU4ZGQ5ODdiMzQyNWQwMjA3MWQ4ZGJhZTgwNzA4YjAzOWRiYjY0ZGJkMWRlNTY1N2Q5ZmVkMGMxMThhNTQxNDM3NDJlMGZmM2M4N2Y3NGU0NTg1NzY0N2FmM2Y3OWViMGExNGM5ZDc1ZWE5YTFhMDRiN2NmNDc4YTg5N2E3MDhmZDk4OGY0OGU4MDFlZGIwYjcwMzlkZjhjMjNiYjNjNTZmNGU4MjFhYyI6IjhiMmJkZDRiNDBmYWY1NDVjNzc4ZGRmOWJjMWE0OWNiNTdmOWI3MWIiOiIxNGFlMzVkOWRkMDZiYTkyZjdmM2I4OTc5NzhhZWQ3Y2Q0YmY1ZmYwYjU4NWE0MGJkNDZjZTFiNDJjZDI3MDMwNTNiYjkwNDRkNjRlODEzZDhmOTZkYjJkZDcwMDdkMTAxMThmNmY4Zjg0OTYwOTdhZDc1ZTFmZjY5MjM0MWIyODkyYWQ1NWE2MzNhMWM1NWU3ZjBhMGFkNTlhMGUyMDNhNWI4Mjc4YWVjNTRkZDg2MjJlMjgzMWQ4NzE3NGY4Y2FmZjQzZWU2YzQ2NDQ1MzQ1ZDg0YTU5NjU5YmZiOTJlY2Q0YzgxODY2ODY5NWYzNDcwNmY2NjgyOGE4OTk1OTYzN2YyYmYzZTMyNTFjMjRiZGJhNGQ0Yjc2NDlkYTAwMjIyMThiMTE5Yzg0ZTc5YTY1MjdlYzViOGE1Zjg2MWMxNTk5NTJlMjNlYzA1ZTFlNzE3MzQ2ZmFlZmU4YjE2ODY4MjViZDJiMjYyZmIyNTMxMDY2YzBkZTA5YWNkZTJlNDIzMTY5MDcyOGI1ZDg1ZTExNWEyZjZiOTJiNzljMjVhYmM5YmQ5Mzk5ZmY4YmNmODI1YTUyZWExZjU2ZWE3NmRkMjZmNDNiYWFmYTE4YmZhOTJhNTA0Y2JkMzU2OTllMjZkMWRjYzVhMjg4NzM4NWYzYzYzMjMyZjA2ZjMyNDRjMyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzIgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJkZDY3MGEwMTQ2NTg2OGFkYzkzZjI2MTMxOTU3YTUwYzUyZmI3NzdjZGJhYTMwODkyYzllMTIzNjExNjRlYzEzOTc5ZDQzMDQ4MTE4ZTQ0NDVkYjg3YmVlNThkZDk4N2IzNDI1ZDAyMDcxZDhkYmFlODA3MDhiMDM5ZGJiNjRkYmQxZGU1NjU3ZDlmZWQwYzExOGE1NDE0Mzc0MmUwZmYzYzg3Zjc0ZTQ1ODU3NjQ3YWYzZjc5ZWIwYTE0YzlkNzVlYTlhMWEwNGI3Y2Y0NzhhODk3YTcwOGZkOTg4ZjQ4ZTgwMWVkYjBiNzAzOWRmOGMyM2JiM2M1NmY0ZTgyMWFjIjoiOGIyYmRkNGI0MGZhZjU0NWM3NzhkZGY5YmMxYTQ5Y2I1N2Y5YjcxYiI6IjE0YWUzNWQ5ZGQwNmJhOTJmN2YzYjg5Nzk3OGFlZDdjZDRiZjVmZjBiNTg1YTQwYmQ0NmNlMWI0MmNkMjcwMzA1M2JiOTA0NGQ2NGU4MTNkOGY5NmRiMmRkNzAwN2QxMDExOGY2ZjhmODQ5NjA5N2FkNzVlMWZmNjkyMzQxYjI4OTJhZDU1YTYzM2ExYzU1ZTdmMGEwYWQ1OWEwZTIwM2E1YjgyNzhhZWM1NGRkODYyMmUyODMxZDg3MTc0ZjhjYWZmNDNlZTZjNDY0NDUzNDVkODRhNTk2NTliZmI5MmVjZDRjODE4NjY4Njk1ZjM0NzA2ZjY2ODI4YTg5OTU5NjM3ZjJiZjNlMzI1MWMyNGJkYmE0ZDRiNzY0OWRhMDAyMjIxOGIxMTljODRlNzlhNjUyN2VjNWI4YTVmODYxYzE1OTk1MmUyM2VjMDVlMWU3MTczNDZmYWVmZThiMTY4NjgyNWJkMmIyNjJmYjI1MzEwNjZjMGRlMDlhY2RlMmU0MjMxNjkwNzI4YjVkODVlMTE1YTJmNmI5MmI3OWMyNWFiYzliZDkzOTlmZjhiY2Y4MjVhNTJlYTFmNTZlYTc2ZGQyNmY0M2JhYWZhMThiZmE5MmE1MDRjYmQzNTY5OWUyNmQxZGNjNWEyODg3Mzg1ZjNjNjMyMzJmMDZmMzI0NGMzIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfMworcGtjczFfcnNhc3NhX3Bzc19zaWduOjIwNDg6MTY6ImNmZDUwMjgzZmVlZWI5N2Y2ZjA4ZDczY2JjN2IzODM2ZjgyYmJjZDQ5OTQ3OWY1ZTZmNzZmZGZjYjhiMzhjNGY3MWRjOWU4OGJkNmE2Zjc2MzcxYWZkNjVkMmFmMTg2MmIzMmFmYjM0YTk1ZjcxYjhiMTMyMDQzZmZlYmUzYTk1MmJhZjc1OTI0NDgxNDhjMDNmOWM2OWIxZDY4ZTRjZTVjZjMyYzg2YmFmNDZmZWQzMDFjYTFhYjQwMzA2OWIzMmY0NTZiOTFmNzE4OThhYjA4MWNkOGM0MjUyZWY1MjcxOTE1Yzk3OTRiOGYyOTU4NTFkYTc1MTBmOTljYjczZWIiOjE2OiJjYzRlOTBkMmExYjNhMDY1ZDNiMmQxZjVhOGZjZTMxYjU0NDQ3NTY2NGVhYjU2MWQyOTcxYjk5ZmI3YmVmODQ0ZThlYzFmMzYwYjhjMmFjODM1OTY5Mjk3MWVhNmEzOGY3MjNmY2MyMTFmNWRiY2IxNzdhMGZkYWM1MTY0YTFkNGZmN2ZiYjRlODI5OTg2MzUzY2I5ODM2NTlhMTQ4Y2RkNDIwYzdkMzFiYTM4MjJlYTkwYTMyYmU0NmMwMzBlOGMxN2UxZmEwYWQzNzg1OWUwNmIwYWE2ZmEzYjIxNmQ5Y2JlNmMwZTIyMzM5NzY5YzBhNjE1OTEzZTVkYTcxOWNmIjoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6IjQ4YjJiNmE1N2E2M2M4NGNlYTg1OWQ2NWM2NjgyODRiMDhkOTZiZGNhYWJlMjUyZGIwZTRhOTZjYjFiYWM2MDE5MzQxZGI2ZmJlZmI4ZDEwNmIwZTkwZWRhNmJjYzZjNjI2MmYzN2U3ZWE5YzdlNWQyMjZiZDdkZjg1ZWM1ZTcxZWZmZjJmNTRjNWRiNTc3ZmY3MjlmZjkxYjg0MjQ5MWRlMjc0MWQwYzYzMTYwN2RmNTg2YjkwNWIyM2I5MWFmMTNkYTEyMzA0YmY4M2VjYThhNzNlODcxZmY5ZGIiOiI0ZTk2ZmMxYjM5OGY5MmI0NDY3MTAxMGMwZGMzZWZkNmUyMGMyZDczIjoiNmUzZTRkN2I2YjE1ZDJmYjQ2MDEzYjg5MDBhYTViYmIzOTM5Y2YyYzA5NTcxNzk4NzA0MjAyNmVlNjJjNzRjNTRjZmZkNWQ3ZDU3ZWZiYmY5NTBhMGY1YzU3NGZhMDlkM2ZjMWM5ZjUxM2IwNWI0ZmY1MGRkOGRmN2VkZmEyMDEwMjg1NGMzNWU1OTIxODAxMTlhNzBjZTViMDg1MTgyYWEwMmQ5ZWEyYWE5MGQxZGYwM2YyZGFhZTg4NWJhMmY1ZDA1YWZkYWM5NzQ3NmYwNmI5M2I1YmM5NGExYTgwYWE5MTE2YzRkNjE1ZjMzM2IwOTg4OTJiMjVmZmFjZTI2NmY1ZGI1YTVhM2JjYzEwYTgyNGVkNTVhYWQzNWI3Mjc4MzRmYjhjMDdkYTI4ZmNmNDE2YTVkOWIyMjI0ZjFmOGI0NDJiMzZmOTFlNDU2ZmRlYTJkN2NmZTMzNjcyNjhkZTAzMDdhNGM3NGU5MjQxNTllZDMzMzkzZDVlMDY1NTUzMWM3NzMyN2I4OTgyMWJkZWRmODgwMTYxYzc4Y2Q0MTk2YjU0MTlmN2FjYzNmMTNlNWViZjE2MWI2ZTdjNjcyNDcxNmNhMzNiODVjMmUyNTY0MDE5MmFjMjg1OTY1MWQ1MGJkZTdlYjk3NmU1MWNlYzgyOGI5OGI2NTYzYjg2YmIiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF8zICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiNDhiMmI2YTU3YTYzYzg0Y2VhODU5ZDY1YzY2ODI4NGIwOGQ5NmJkY2FhYmUyNTJkYjBlNGE5NmNiMWJhYzYwMTkzNDFkYjZmYmVmYjhkMTA2YjBlOTBlZGE2YmNjNmM2MjYyZjM3ZTdlYTljN2U1ZDIyNmJkN2RmODVlYzVlNzFlZmZmMmY1NGM1ZGI1NzdmZjcyOWZmOTFiODQyNDkxZGUyNzQxZDBjNjMxNjA3ZGY1ODZiOTA1YjIzYjkxYWYxM2RhMTIzMDRiZjgzZWNhOGE3M2U4NzFmZjlkYiI6IjRlOTZmYzFiMzk4ZjkyYjQ0NjcxMDEwYzBkYzNlZmQ2ZTIwYzJkNzMiOiI2ZTNlNGQ3YjZiMTVkMmZiNDYwMTNiODkwMGFhNWJiYjM5MzljZjJjMDk1NzE3OTg3MDQyMDI2ZWU2MmM3NGM1NGNmZmQ1ZDdkNTdlZmJiZjk1MGEwZjVjNTc0ZmEwOWQzZmMxYzlmNTEzYjA1YjRmZjUwZGQ4ZGY3ZWRmYTIwMTAyODU0YzM1ZTU5MjE4MDExOWE3MGNlNWIwODUxODJhYTAyZDllYTJhYTkwZDFkZjAzZjJkYWFlODg1YmEyZjVkMDVhZmRhYzk3NDc2ZjA2YjkzYjViYzk0YTFhODBhYTkxMTZjNGQ2MTVmMzMzYjA5ODg5MmIyNWZmYWNlMjY2ZjVkYjVhNWEzYmNjMTBhODI0ZWQ1NWFhZDM1YjcyNzgzNGZiOGMwN2RhMjhmY2Y0MTZhNWQ5YjIyMjRmMWY4YjQ0MmIzNmY5MWU0NTZmZGVhMmQ3Y2ZlMzM2NzI2OGRlMDMwN2E0Yzc0ZTkyNDE1OWVkMzMzOTNkNWUwNjU1NTMxYzc3MzI3Yjg5ODIxYmRlZGY4ODAxNjFjNzhjZDQxOTZiNTQxOWY3YWNjM2YxM2U1ZWJmMTYxYjZlN2M2NzI0NzE2Y2EzM2I4NWMyZTI1NjQwMTkyYWMyODU5NjUxZDUwYmRlN2ViOTc2ZTUxY2VjODI4Yjk4YjY1NjNiODZiYiI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzQKK3BrY3MxX3JzYXNzYV9wc3Nfc2lnbjoyMDQ4OjE2OiJjZmQ1MDI4M2ZlZWViOTdmNmYwOGQ3M2NiYzdiMzgzNmY4MmJiY2Q0OTk0NzlmNWU2Zjc2ZmRmY2I4YjM4YzRmNzFkYzllODhiZDZhNmY3NjM3MWFmZDY1ZDJhZjE4NjJiMzJhZmIzNGE5NWY3MWI4YjEzMjA0M2ZmZWJlM2E5NTJiYWY3NTkyNDQ4MTQ4YzAzZjljNjliMWQ2OGU0Y2U1Y2YzMmM4NmJhZjQ2ZmVkMzAxY2ExYWI0MDMwNjliMzJmNDU2YjkxZjcxODk4YWIwODFjZDhjNDI1MmVmNTI3MTkxNWM5Nzk0YjhmMjk1ODUxZGE3NTEwZjk5Y2I3M2ViIjoxNjoiY2M0ZTkwZDJhMWIzYTA2NWQzYjJkMWY1YThmY2UzMWI1NDQ0NzU2NjRlYWI1NjFkMjk3MWI5OWZiN2JlZjg0NGU4ZWMxZjM2MGI4YzJhYzgzNTk2OTI5NzFlYTZhMzhmNzIzZmNjMjExZjVkYmNiMTc3YTBmZGFjNTE2NGExZDRmZjdmYmI0ZTgyOTk4NjM1M2NiOTgzNjU5YTE0OGNkZDQyMGM3ZDMxYmEzODIyZWE5MGEzMmJlNDZjMDMwZThjMTdlMWZhMGFkMzc4NTllMDZiMGFhNmZhM2IyMTZkOWNiZTZjMGUyMjMzOTc2OWMwYTYxNTkxM2U1ZGE3MTljZiI6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiIwYjg3NzdjN2Y4MzliYWYwYTY0YmJiZGJjNWNlNzk3NTVjNTdhMjA1Yjg0NWMxNzRlMmQyZTkwNTQ2YTA4OWM0ZTZlYzhhZGZmYTIzYTdlYTk3YmFlNmI2NWQ3ODJiODJkYjVkMmI1YTU2ZDIyYTI5YTA1ZTdjNDQzM2UyYjgyYTYyMWFiYmE5MGFkZDA1Y2UzOTNmYzQ4YTg0MDU0MjQ1MWEiOiJjN2NkNjk4ZDg0YjY1MTI4ZDg4MzVlM2E4YjFlYjBlMDFjYjU0MWVjIjoiMzQwNDdmZjk2YzRkYzBkYzkwYjJkNGZmNTlhMWEzNjFhNDc1NGIyNTVkMmVlMGFmN2Q4YmY4N2M5YmM5ZTdkZGVlZGUzMzkzNGM2M2NhMWMwZTNkMjYyY2IxNDVlZjkzMmExZjJjMGE5OTdhYTZhMzRmOGVhZWU3NDc3ZDgyY2NmMDkwOTVhNmI4YWNhZDM4ZDRlZWM5ZmI3ZWFiN2FkMDJkYTFkMTFkOGU1NGMxODI1ZTU1YmY1OGMyYTIzMjM0YjkwMmJlMTI0ZjllOTAzOGE4ZjY4ZmE0NWRhYjcyZjY2ZTA5NDViZjFkOGJhY2M5MDQ0YzZmMDcwOThjOWZjZWM1OGEzYWFiMTAwYzgwNTE3ODE1NWYwMzBhMTI0YzQ1MGU1YWNiZGE0N2QwZTRmMTBiODBhMjNmODAzZTc3NGQwMjNiMDAxNWMyMGI5ZjliYmU3YzkxMjk2MzM4ZDVlY2I0NzFjYWZiMDMyMDA3YjY3YTYwYmU1ZjY5NTA0YTlmMDFhYmIzY2I0NjdiMjYwZTJiY2U4NjBiZThkOTViZjkyYzBjOGUxNDk2ZWQxZTUyODU5M2E0YWJiNmRmNDYyZGRlOGEwOTY4ZGZmZTQ2ODMxMTY4NTdhMjMyZjVlYmY2Yzg1YmUyMzg3NDVhZDBmMzhmNzY3YTVmZGJmNDg2ZmIiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF80ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMGI4Nzc3YzdmODM5YmFmMGE2NGJiYmRiYzVjZTc5NzU1YzU3YTIwNWI4NDVjMTc0ZTJkMmU5MDU0NmEwODljNGU2ZWM4YWRmZmEyM2E3ZWE5N2JhZTZiNjVkNzgyYjgyZGI1ZDJiNWE1NmQyMmEyOWEwNWU3YzQ0MzNlMmI4MmE2MjFhYmJhOTBhZGQwNWNlMzkzZmM0OGE4NDA1NDI0NTFhIjoiYzdjZDY5OGQ4NGI2NTEyOGQ4ODM1ZTNhOGIxZWIwZTAxY2I1NDFlYyI6IjM0MDQ3ZmY5NmM0ZGMwZGM5MGIyZDRmZjU5YTFhMzYxYTQ3NTRiMjU1ZDJlZTBhZjdkOGJmODdjOWJjOWU3ZGRlZWRlMzM5MzRjNjNjYTFjMGUzZDI2MmNiMTQ1ZWY5MzJhMWYyYzBhOTk3YWE2YTM0ZjhlYWVlNzQ3N2Q4MmNjZjA5MDk1YTZiOGFjYWQzOGQ0ZWVjOWZiN2VhYjdhZDAyZGExZDExZDhlNTRjMTgyNWU1NWJmNThjMmEyMzIzNGI5MDJiZTEyNGY5ZTkwMzhhOGY2OGZhNDVkYWI3MmY2NmUwOTQ1YmYxZDhiYWNjOTA0NGM2ZjA3MDk4YzlmY2VjNThhM2FhYjEwMGM4MDUxNzgxNTVmMDMwYTEyNGM0NTBlNWFjYmRhNDdkMGU0ZjEwYjgwYTIzZjgwM2U3NzRkMDIzYjAwMTVjMjBiOWY5YmJlN2M5MTI5NjMzOGQ1ZWNiNDcxY2FmYjAzMjAwN2I2N2E2MGJlNWY2OTUwNGE5ZjAxYWJiM2NiNDY3YjI2MGUyYmNlODYwYmU4ZDk1YmY5MmMwYzhlMTQ5NmVkMWU1Mjg1OTNhNGFiYjZkZjQ2MmRkZThhMDk2OGRmZmU0NjgzMTE2ODU3YTIzMmY1ZWJmNmM4NWJlMjM4NzQ1YWQwZjM4Zjc2N2E1ZmRiZjQ4NmZiIjowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIEV4YW1wbGUgMTBfNQorcGtjczFfcnNhc3NhX3Bzc19zaWduOjIwNDg6MTY6ImNmZDUwMjgzZmVlZWI5N2Y2ZjA4ZDczY2JjN2IzODM2ZjgyYmJjZDQ5OTQ3OWY1ZTZmNzZmZGZjYjhiMzhjNGY3MWRjOWU4OGJkNmE2Zjc2MzcxYWZkNjVkMmFmMTg2MmIzMmFmYjM0YTk1ZjcxYjhiMTMyMDQzZmZlYmUzYTk1MmJhZjc1OTI0NDgxNDhjMDNmOWM2OWIxZDY4ZTRjZTVjZjMyYzg2YmFmNDZmZWQzMDFjYTFhYjQwMzA2OWIzMmY0NTZiOTFmNzE4OThhYjA4MWNkOGM0MjUyZWY1MjcxOTE1Yzk3OTRiOGYyOTU4NTFkYTc1MTBmOTljYjczZWIiOjE2OiJjYzRlOTBkMmExYjNhMDY1ZDNiMmQxZjVhOGZjZTMxYjU0NDQ3NTY2NGVhYjU2MWQyOTcxYjk5ZmI3YmVmODQ0ZThlYzFmMzYwYjhjMmFjODM1OTY5Mjk3MWVhNmEzOGY3MjNmY2MyMTFmNWRiY2IxNzdhMGZkYWM1MTY0YTFkNGZmN2ZiYjRlODI5OTg2MzUzY2I5ODM2NTlhMTQ4Y2RkNDIwYzdkMzFiYTM4MjJlYTkwYTMyYmU0NmMwMzBlOGMxN2UxZmEwYWQzNzg1OWUwNmIwYWE2ZmEzYjIxNmQ5Y2JlNmMwZTIyMzM5NzY5YzBhNjE1OTEzZTVkYTcxOWNmIjoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6ImYxMDM2ZTAwOGU3MWU5NjRkYWRjOTIxOWVkMzBlMTdmMDZiNGI2OGE5NTVjMTZiMzEyYjFlZGRmMDI4Yjc0OTc2YmVkNmIzZjZhNjNkNGU3Nzg1OTI0M2M5Y2NjZGM5ODAxNjUyM2FiYjAyNDgzYjM1NTkxYzMzYWFkODEyMTNiYjdjN2JiMWE0NzBhYWJjMTBkNDQyNTZjNGQ0NTU5ZDkxNiI6ImVmYThiZmY5NjIxMmIyZjRhM2YzNzFhMTBkNTc0MTUyNjU1ZjVkZmIiOiI3ZTA5MzVlYTE4ZjRkNmMxZDE3Y2U4MmViMmIzODM2YzU1YjM4NDU4OWNlMTlkZmU3NDMzNjNhYzk5NDhkMWYzNDZiN2JmZGRmZTkyZWZkNzhhZGIyMWZhZWZjODlhZGU0MmIxMGYzNzQwMDNmZTEyMmU2NzQyOWExY2I4Y2JkMWY4ZDkwMTQ1NjRjNDRkMTIwMTE2ZjQ5OTBmMWE2ZTM4Nzc0YzE5NGJkMWI4MjEzMjg2YjA3N2IwNDk5ZDJlN2IzZjQzNGFiMTIyODljNTU2Njg0ZGVlZDc4MTMxOTM0YmIzZGQ2NTM3MjM2ZjdjNmYzZGNiMDlkNDc2YmUwNzcyMWUzN2UxY2VlZDliMmY3YjQwNjg4N2JkNTMxNTczMDVlMWM4YjRmODRkNzMzYmMxZTE4NmZlMDZjYzU5YjZlZGI4ZjRiZDdmZmVmZGY0ZjdiYTljZmI5ZDU3MDY4OWI1YTFhNDEwOWE3NDZhNjkwODkzZGIzNzk5MjU1YTBjYjkyMTVkMmQxY2Q0OTA1OTBlOTUyZThjODc4NmFhMDAxMTI2NTI1MjQ3MGMwNDFkZmJjM2VlYzdjM2NiZjcxYzI0ODY5ZDExNWMwY2I0YTk1NmY1NmQ1MzBiODBhYjU4OWFjZmVmYzY5MDc1MWRkZjM2ZThkMzgzZjgzY2VkZDJjYyI6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSBFeGFtcGxlIDEwXzUgKHZlcmlmeSkKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOiJmMTAzNmUwMDhlNzFlOTY0ZGFkYzkyMTllZDMwZTE3ZjA2YjRiNjhhOTU1YzE2YjMxMmIxZWRkZjAyOGI3NDk3NmJlZDZiM2Y2YTYzZDRlNzc4NTkyNDNjOWNjY2RjOTgwMTY1MjNhYmIwMjQ4M2IzNTU5MWMzM2FhZDgxMjEzYmI3YzdiYjFhNDcwYWFiYzEwZDQ0MjU2YzRkNDU1OWQ5MTYiOiJlZmE4YmZmOTYyMTJiMmY0YTNmMzcxYTEwZDU3NDE1MjY1NWY1ZGZiIjoiN2UwOTM1ZWExOGY0ZDZjMWQxN2NlODJlYjJiMzgzNmM1NWIzODQ1ODljZTE5ZGZlNzQzMzYzYWM5OTQ4ZDFmMzQ2YjdiZmRkZmU5MmVmZDc4YWRiMjFmYWVmYzg5YWRlNDJiMTBmMzc0MDAzZmUxMjJlNjc0MjlhMWNiOGNiZDFmOGQ5MDE0NTY0YzQ0ZDEyMDExNmY0OTkwZjFhNmUzODc3NGMxOTRiZDFiODIxMzI4NmIwNzdiMDQ5OWQyZTdiM2Y0MzRhYjEyMjg5YzU1NjY4NGRlZWQ3ODEzMTkzNGJiM2RkNjUzNzIzNmY3YzZmM2RjYjA5ZDQ3NmJlMDc3MjFlMzdlMWNlZWQ5YjJmN2I0MDY4ODdiZDUzMTU3MzA1ZTFjOGI0Zjg0ZDczM2JjMWUxODZmZTA2Y2M1OWI2ZWRiOGY0YmQ3ZmZlZmRmNGY3YmE5Y2ZiOWQ1NzA2ODliNWExYTQxMDlhNzQ2YTY5MDg5M2RiMzc5OTI1NWEwY2I5MjE1ZDJkMWNkNDkwNTkwZTk1MmU4Yzg3ODZhYTAwMTEyNjUyNTI0NzBjMDQxZGZiYzNlZWM3YzNjYmY3MWMyNDg2OWQxMTVjMGNiNGE5NTZmNTZkNTMwYjgwYWI1ODlhY2ZlZmM2OTA3NTFkZGYzNmU4ZDM4M2Y4M2NlZGQyY2MiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF82Citwa2NzMV9yc2Fzc2FfcHNzX3NpZ246MjA0ODoxNjoiY2ZkNTAyODNmZWVlYjk3ZjZmMDhkNzNjYmM3YjM4MzZmODJiYmNkNDk5NDc5ZjVlNmY3NmZkZmNiOGIzOGM0ZjcxZGM5ZTg4YmQ2YTZmNzYzNzFhZmQ2NWQyYWYxODYyYjMyYWZiMzRhOTVmNzFiOGIxMzIwNDNmZmViZTNhOTUyYmFmNzU5MjQ0ODE0OGMwM2Y5YzY5YjFkNjhlNGNlNWNmMzJjODZiYWY0NmZlZDMwMWNhMWFiNDAzMDY5YjMyZjQ1NmI5MWY3MTg5OGFiMDgxY2Q4YzQyNTJlZjUyNzE5MTVjOTc5NGI4ZjI5NTg1MWRhNzUxMGY5OWNiNzNlYiI6MTY6ImNjNGU5MGQyYTFiM2EwNjVkM2IyZDFmNWE4ZmNlMzFiNTQ0NDc1NjY0ZWFiNTYxZDI5NzFiOTlmYjdiZWY4NDRlOGVjMWYzNjBiOGMyYWM4MzU5NjkyOTcxZWE2YTM4ZjcyM2ZjYzIxMWY1ZGJjYjE3N2EwZmRhYzUxNjRhMWQ0ZmY3ZmJiNGU4Mjk5ODYzNTNjYjk4MzY1OWExNDhjZGQ0MjBjN2QzMWJhMzgyMmVhOTBhMzJiZTQ2YzAzMGU4YzE3ZTFmYTBhZDM3ODU5ZTA2YjBhYTZmYTNiMjE2ZDljYmU2YzBlMjIzMzk3NjljMGE2MTU5MTNlNWRhNzE5Y2YiOjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiJhZDhiMTUyMzcwMzY0NjIyNGI2NjBiNTUwODg1OTE3Y2EyZDFkZjI4IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgRXhhbXBsZSAxMF82ICh2ZXJpZnkpCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeToyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiJhZDhiMTUyMzcwMzY0NjIyNGI2NjBiNTUwODg1OTE3Y2EyZDFkZjI4IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjAKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgdmVyaWZ5IG9wdGlvbnMgIzEgKE9LKQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDoiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiI2ZDNiNWI4N2Y2N2VhNjU3YWYyMWY3NTQ0MTk3N2QyMTgwZjkxYjJjNWY2OTJkZTgyOTU1Njk2YTY4NjczMGQ5Yjk3NzhkOTcwNzU4Y2NiMjYwNzFjMjIwOWZmYmQ2MTI1YmUyZTk2ZWE4MWI2N2NiOWI5MzA4MjM5ZmRhMTdmN2IyYjY0ZWNkYTA5NmI2YjkzNTY0MGE1YTFjYjQyYTkxNTViMWM5ZWY3YTYzM2EwMmM1OWYwZDZlZTU5Yjg1MmM0M2IzNTAyOWU3M2M5NDBmZjA0MTBlOGYxMTRlZWQ0NmJiZDBmYWUxNjVlNDJiZTI1MjhhNDAxYzNiMjhmZDgxOGVmMzIzMmRjYTlmNGQyYTBmNTE2NmVjNTljNDIzOTZkNmMxMWRiYzEyMTVhNTZmYTE3MTY5ZGI5NTc1MzQzZWYzNGY5ZGUzMmE0OWNkYzMxNzQ5MjJmMjI5YzIzZTE4ZTQ1ZGY5MzUzMTE5ZWM0MzE5Y2VkY2U3YTE3YzY0MDg4YzFmNmY1MmJlMjk2MzQxMDBiMzkxOWQzOGYzZDFlZDk0ZTY4OTFlNjZhNzNiOGZiODQ5ZjU4NzRkZjU5NDU5ZTI5OGM3YmJjZTJlZWU3ODJhMTk1YWE2NmZlMmQwNzMyYjI1ZTU5NWY1N2QzZTA2MWIxZmMzZTQwNjNiZjk4ZiI6MDowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICMyIChjdHhfaGFzaCBub25lKQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9OT05FOk1CRURUTFNfTURfU0hBMToyMDoiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiI2ZDNiNWI4N2Y2N2VhNjU3YWYyMWY3NTQ0MTk3N2QyMTgwZjkxYjJjNWY2OTJkZTgyOTU1Njk2YTY4NjczMGQ5Yjk3NzhkOTcwNzU4Y2NiMjYwNzFjMjIwOWZmYmQ2MTI1YmUyZTk2ZWE4MWI2N2NiOWI5MzA4MjM5ZmRhMTdmN2IyYjY0ZWNkYTA5NmI2YjkzNTY0MGE1YTFjYjQyYTkxNTViMWM5ZWY3YTYzM2EwMmM1OWYwZDZlZTU5Yjg1MmM0M2IzNTAyOWU3M2M5NDBmZjA0MTBlOGYxMTRlZWQ0NmJiZDBmYWUxNjVlNDJiZTI1MjhhNDAxYzNiMjhmZDgxOGVmMzIzMmRjYTlmNGQyYTBmNTE2NmVjNTljNDIzOTZkNmMxMWRiYzEyMTVhNTZmYTE3MTY5ZGI5NTc1MzQzZWYzNGY5ZGUzMmE0OWNkYzMxNzQ5MjJmMjI5YzIzZTE4ZTQ1ZGY5MzUzMTE5ZWM0MzE5Y2VkY2U3YTE3YzY0MDg4YzFmNmY1MmJlMjk2MzQxMDBiMzkxOWQzOGYzZDFlZDk0ZTY4OTFlNjZhNzNiOGZiODQ5ZjU4NzRkZjU5NDU5ZTI5OGM3YmJjZTJlZWU3ODJhMTk1YWE2NmZlMmQwNzMyYjI1ZTU5NWY1N2QzZTA2MWIxZmMzZTQwNjNiZjk4ZiI6MDowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICMzIChjdHhfaGFzaCBkaXZlcmdpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMToyMDoiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiI2ZDNiNWI4N2Y2N2VhNjU3YWYyMWY3NTQ0MTk3N2QyMTgwZjkxYjJjNWY2OTJkZTgyOTU1Njk2YTY4NjczMGQ5Yjk3NzhkOTcwNzU4Y2NiMjYwNzFjMjIwOWZmYmQ2MTI1YmUyZTk2ZWE4MWI2N2NiOWI5MzA4MjM5ZmRhMTdmN2IyYjY0ZWNkYTA5NmI2YjkzNTY0MGE1YTFjYjQyYTkxNTViMWM5ZWY3YTYzM2EwMmM1OWYwZDZlZTU5Yjg1MmM0M2IzNTAyOWU3M2M5NDBmZjA0MTBlOGYxMTRlZWQ0NmJiZDBmYWUxNjVlNDJiZTI1MjhhNDAxYzNiMjhmZDgxOGVmMzIzMmRjYTlmNGQyYTBmNTE2NmVjNTljNDIzOTZkNmMxMWRiYzEyMTVhNTZmYTE3MTY5ZGI5NTc1MzQzZWYzNGY5ZGUzMmE0OWNkYzMxNzQ5MjJmMjI5YzIzZTE4ZTQ1ZGY5MzUzMTE5ZWM0MzE5Y2VkY2U3YTE3YzY0MDg4YzFmNmY1MmJlMjk2MzQxMDBiMzkxOWQzOGYzZDFlZDk0ZTY4OTFlNjZhNzNiOGZiODQ5ZjU4NzRkZjU5NDU5ZTI5OGM3YmJjZTJlZWU3ODJhMTk1YWE2NmZlMmQwNzMyYjI1ZTU5NWY1N2QzZTA2MWIxZmMzZTQwNjNiZjk4ZiI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORzowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICM0IChtZ2YxX2hhc2ggZGl2ZXJnaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MjA0ODoxNjoiYTVkZDg2N2FjNGNiMDJmOTBiOTQ1N2Q0OGMxNGE3NzBlZjk5MWM1NmMzOWMwZWM2NWZkMTFhZmE4OTM3Y2VhNTdiOWJlN2FjNzNiNDVjMDAxNzYxNWI4MmQ2MjJlMzE4NzUzYjYwMjdjMGZkMTU3YmUxMmY4MDkwZmVlMmE3YWRjZDBlZWY3NTlmODhiYTQ5OTdjN2E0MmQ1OGM5YWExMmNiOTlhZTAwMWZlNTIxYzEzYmI1NDMxNDQ1YThkNWFlNGY1ZTRjN2U5NDhhYzIyN2QzNjA0MDcxZjIwZTU3N2U5MDVmYmViMTVkZmFmMDZkMWRlNWFlNjI1M2Q2M2E2YTIxMjBiMzFhNWRhNWRhYmM5NTUwNjAwZTIwZjI3ZDM3MzllMjYyNzkyNWZlYTNjYzUwOWYyMWRmZjA0ZTZlZWE0NTQ5YzU0MGQ2ODA5ZmY5MzA3ZWVkZTkxZmZmNTg3MzNkODM4NWEyMzdkNmQzNzA1YTMzZTM5MTkwMDk5MjA3MGRmN2FkZjEzNTdjZjdlMzcwMGNlMzY2N2RlODNmMTdiOGRmMTc3OGRiMzgxZGNlMDljYjRhZDA1OGE1MTEwMDFhNzM4MTk4ZWUyN2NmNTVhMTNiNzU0NTM5OTA2NTgyZWM4YjE3NGJkNThkNWQxZjNkNzY3YzYxMzcyMWFlMDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjA6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjNSAod3JvbmcgbXNnX2hhc2gpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDoiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiI2ZDNiNWI4N2Y2N2VhNjU3YWYyMWY3NTQ0MTk3N2QyMTgwZjkxYjJjNWY2OTJkZTgyOTU1Njk2YTY4NjczMGQ5Yjk3NzhkOTcwNzU4Y2NiMjYwNzFjMjIwOWZmYmQ2MTI1YmUyZTk2ZWE4MWI2N2NiOWI5MzA4MjM5ZmRhMTdmN2IyYjY0ZWNkYTA5NmI2YjkzNTY0MGE1YTFjYjQyYTkxNTViMWM5ZWY3YTYzM2EwMmM1OWYwZDZlZTU5Yjg1MmM0M2IzNTAyOWU3M2M5NDBmZjA0MTBlOGYxMTRlZWQ0NmJiZDBmYWUxNjVlNDJiZTI1MjhhNDAxYzNiMjhmZDgxOGVmMzIzMmRjYTlmNGQyYTBmNTE2NmVjNTljNDIzOTZkNmMxMWRiYzEyMTVhNTZmYTE3MTY5ZGI5NTc1MzQzZWYzNGY5ZGUzMmE0OWNkYzMxNzQ5MjJmMjI5YzIzZTE4ZTQ1ZGY5MzUzMTE5ZWM0MzE5Y2VkY2U3YTE3YzY0MDg4YzFmNmY1MmJlMjk2MzQxMDBiMzkxOWQzOGYzZDFlZDk0ZTY4OTFlNjZhNzNiOGZiODQ5ZjU4NzRkZjU5NDU5ZTI5OGM3YmJjZTJlZWU3ODJhMTk1YWE2NmZlMmQwNzMyYjI1ZTU5NWY1N2QzZTA2MWIxZmMzZTQwNjNiZjk4ZiI6TUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQKKworUlNBU1NBLVBTUyBTaWduYXR1cmUgdmVyaWZ5IG9wdGlvbnMgIzYgKHdyb25nIGV4cGVjdGVkX3NhbHRfbGVuKQorcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0OjIwNDg6MTY6ImE1ZGQ4NjdhYzRjYjAyZjkwYjk0NTdkNDhjMTRhNzcwZWY5OTFjNTZjMzljMGVjNjVmZDExYWZhODkzN2NlYTU3YjliZTdhYzczYjQ1YzAwMTc2MTViODJkNjIyZTMxODc1M2I2MDI3YzBmZDE1N2JlMTJmODA5MGZlZTJhN2FkY2QwZWVmNzU5Zjg4YmE0OTk3YzdhNDJkNThjOWFhMTJjYjk5YWUwMDFmZTUyMWMxM2JiNTQzMTQ0NWE4ZDVhZTRmNWU0YzdlOTQ4YWMyMjdkMzYwNDA3MWYyMGU1NzdlOTA1ZmJlYjE1ZGZhZjA2ZDFkZTVhZTYyNTNkNjNhNmEyMTIwYjMxYTVkYTVkYWJjOTU1MDYwMGUyMGYyN2QzNzM5ZTI2Mjc5MjVmZWEzY2M1MDlmMjFkZmYwNGU2ZWVhNDU0OWM1NDBkNjgwOWZmOTMwN2VlZGU5MWZmZjU4NzMzZDgzODVhMjM3ZDZkMzcwNWEzM2UzOTE5MDA5OTIwNzBkZjdhZGYxMzU3Y2Y3ZTM3MDBjZTM2NjdkZTgzZjE3YjhkZjE3NzhkYjM4MWRjZTA5Y2I0YWQwNThhNTExMDAxYTczODE5OGVlMjdjZjU1YTEzYjc1NDUzOTkwNjU4MmVjOGIxNzRiZDU4ZDVkMWYzZDc2N2M2MTM3MjFhZTA1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMToiMjVmMTA4OTVhODc3MTZjMTM3NDUwYmI5NTE5ZGZhYTFmMjA3ZmFhOTQyZWE4OGFiZjcxZTljMTc5ODAwODViNTU1YWViYWI3NjI2NGFlMmEzYWI5M2MyZDEyOTgxMTkxZGRhYzZmYjU5NDllYjM2YWVlM2M1ZGE5NDBmMDA3NTJjOTE2ZDk0NjA4ZmE3ZDk3YmE2YTI5MTViNjg4ZjIwMzIzZDRlOWQ5NjgwMWQ4OWE3MmFiNTg5MmRjMjExN2MwNzQzNGZjZjk3MmUwNThjZjhjNDFjYTRiNGZmNTU0ZjdkNTA2OGFkMzE1NWZjZWQwZjMxMjViYzA0ZjkxOTMzNzhhOGY1YzRjM2I4Y2I0ZGQ2ZDFjYzY5ZDMwZWNjYTZlYWE1MWUzNmEwNTczMGU5ZTM0MmU4NTViYWYwOTlkZWZiOGFmZDciOiI2ZDNiNWI4N2Y2N2VhNjU3YWYyMWY3NTQ0MTk3N2QyMTgwZjkxYjJjNWY2OTJkZTgyOTU1Njk2YTY4NjczMGQ5Yjk3NzhkOTcwNzU4Y2NiMjYwNzFjMjIwOWZmYmQ2MTI1YmUyZTk2ZWE4MWI2N2NiOWI5MzA4MjM5ZmRhMTdmN2IyYjY0ZWNkYTA5NmI2YjkzNTY0MGE1YTFjYjQyYTkxNTViMWM5ZWY3YTYzM2EwMmM1OWYwZDZlZTU5Yjg1MmM0M2IzNTAyOWU3M2M5NDBmZjA0MTBlOGYxMTRlZWQ0NmJiZDBmYWUxNjVlNDJiZTI1MjhhNDAxYzNiMjhmZDgxOGVmMzIzMmRjYTlmNGQyYTBmNTE2NmVjNTljNDIzOTZkNmMxMWRiYzEyMTVhNTZmYTE3MTY5ZGI5NTc1MzQzZWYzNGY5ZGUzMmE0OWNkYzMxNzQ5MjJmMjI5YzIzZTE4ZTQ1ZGY5MzUzMTE5ZWM0MzE5Y2VkY2U3YTE3YzY0MDg4YzFmNmY1MmJlMjk2MzQxMDBiMzkxOWQzOGYzZDFlZDk0ZTY4OTFlNjZhNzNiOGZiODQ5ZjU4NzRkZjU5NDU5ZTI5OGM3YmJjZTJlZWU3ODJhMTk1YWE2NmZlMmQwNzMyYjI1ZTU5NWY1N2QzZTA2MWIxZmMzZTQwNjNiZjk4ZiI6MDpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICM3ICh3cm9uZyBleHBlY3RlZF9zYWx0X2xlbikKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoyMDQ4OjE2OiJhNWRkODY3YWM0Y2IwMmY5MGI5NDU3ZDQ4YzE0YTc3MGVmOTkxYzU2YzM5YzBlYzY1ZmQxMWFmYTg5MzdjZWE1N2I5YmU3YWM3M2I0NWMwMDE3NjE1YjgyZDYyMmUzMTg3NTNiNjAyN2MwZmQxNTdiZTEyZjgwOTBmZWUyYTdhZGNkMGVlZjc1OWY4OGJhNDk5N2M3YTQyZDU4YzlhYTEyY2I5OWFlMDAxZmU1MjFjMTNiYjU0MzE0NDVhOGQ1YWU0ZjVlNGM3ZTk0OGFjMjI3ZDM2MDQwNzFmMjBlNTc3ZTkwNWZiZWIxNWRmYWYwNmQxZGU1YWU2MjUzZDYzYTZhMjEyMGIzMWE1ZGE1ZGFiYzk1NTA2MDBlMjBmMjdkMzczOWUyNjI3OTI1ZmVhM2NjNTA5ZjIxZGZmMDRlNmVlYTQ1NDljNTQwZDY4MDlmZjkzMDdlZWRlOTFmZmY1ODczM2Q4Mzg1YTIzN2Q2ZDM3MDVhMzNlMzkxOTAwOTkyMDcwZGY3YWRmMTM1N2NmN2UzNzAwY2UzNjY3ZGU4M2YxN2I4ZGYxNzc4ZGIzODFkY2UwOWNiNGFkMDU4YTUxMTAwMWE3MzgxOThlZTI3Y2Y1NWExM2I3NTQ1Mzk5MDY1ODJlYzhiMTc0YmQ1OGQ1ZDFmM2Q3NjdjNjEzNzIxYWUwNSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MTk6IjI1ZjEwODk1YTg3NzE2YzEzNzQ1MGJiOTUxOWRmYWExZjIwN2ZhYTk0MmVhODhhYmY3MWU5YzE3OTgwMDg1YjU1NWFlYmFiNzYyNjRhZTJhM2FiOTNjMmQxMjk4MTE5MWRkYWM2ZmI1OTQ5ZWIzNmFlZTNjNWRhOTQwZjAwNzUyYzkxNmQ5NDYwOGZhN2Q5N2JhNmEyOTE1YjY4OGYyMDMyM2Q0ZTlkOTY4MDFkODlhNzJhYjU4OTJkYzIxMTdjMDc0MzRmY2Y5NzJlMDU4Y2Y4YzQxY2E0YjRmZjU1NGY3ZDUwNjhhZDMxNTVmY2VkMGYzMTI1YmMwNGY5MTkzMzc4YThmNWM0YzNiOGNiNGRkNmQxY2M2OWQzMGVjY2E2ZWFhNTFlMzZhMDU3MzBlOWUzNDJlODU1YmFmMDk5ZGVmYjhhZmQ3IjoiNmQzYjViODdmNjdlYTY1N2FmMjFmNzU0NDE5NzdkMjE4MGY5MWIyYzVmNjkyZGU4Mjk1NTY5NmE2ODY3MzBkOWI5Nzc4ZDk3MDc1OGNjYjI2MDcxYzIyMDlmZmJkNjEyNWJlMmU5NmVhODFiNjdjYjliOTMwODIzOWZkYTE3ZjdiMmI2NGVjZGEwOTZiNmI5MzU2NDBhNWExY2I0MmE5MTU1YjFjOWVmN2E2MzNhMDJjNTlmMGQ2ZWU1OWI4NTJjNDNiMzUwMjllNzNjOTQwZmYwNDEwZThmMTE0ZWVkNDZiYmQwZmFlMTY1ZTQyYmUyNTI4YTQwMWMzYjI4ZmQ4MThlZjMyMzJkY2E5ZjRkMmEwZjUxNjZlYzU5YzQyMzk2ZDZjMTFkYmMxMjE1YTU2ZmExNzE2OWRiOTU3NTM0M2VmMzRmOWRlMzJhNDljZGMzMTc0OTIyZjIyOWMyM2UxOGU0NWRmOTM1MzExOWVjNDMxOWNlZGNlN2ExN2M2NDA4OGMxZjZmNTJiZTI5NjM0MTAwYjM5MTlkMzhmM2QxZWQ5NGU2ODkxZTY2YTczYjhmYjg0OWY1ODc0ZGY1OTQ1OWUyOThjN2JiY2UyZWVlNzgyYTE5NWFhNjZmZTJkMDczMmIyNWU1OTVmNTdkM2UwNjFiMWZjM2U0MDYzYmY5OGYiOjA6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjOCAobm9uLWRlZmF1bHQgc2FsdF9sZW46IG1heCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQworcGtjczFfcnNhc3NhX3Bzc192ZXJpZnlfZXh0OjEwMjQ6MTY6IjAwZGQxMThhOWY5OWJhYjA2OGNhMmFlYTNiNmE2ZDU5OTdlZDRlYzk1NGU0MGRlZWNlYTA3ZGEwMWVhYWU4MGVjMmJiMTM0MGRiOGExMjhlODkxMzI0YTVjNWY1ZmFkOGY1OTBkN2M4Y2FjYmM1ZmU5MzFkYWZkYTEyMjM3MzUyNzk0NjFhYmFhMDU3MmI3NjE2MzFiM2E4YWZlNzM4OWIwODhiNjM5OTNhMGEyNWVlNDVkMjE4NThiYWI5OTMxYWVkZDQ1ODlhNjMxYjM3ZmNmNzE0MDg5Zjg1NjU0OWYzNTkzMjZkZDFlMGU4NmRkZTUyZWQ2NmI0YTkwYmRhNDA5NSI6MTY6IjAxMDAwMSI6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19NRF9TSEEyNTY6OTQ6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6IjBkMmJkYjA0NTZhM2Q2NTFkNWJkNDhhNDIwNDQ5Mzg5OGY3MmNmMWFhZGRkNzEzODdjYzA1OGJjM2Y0YzIzNWVhNmJlNDAxMGZkNjFiMjhlMWZiYjI3NTQ2MmI1Mzc3NWMwNGJlOTAyMmQzOGI2YTJlMDM4N2RkZGJhODZhM2Y4NTU0ZDI4NTgwNDRhNTlmZGRiZDU5NDc1M2ZjMDU2ZmUzM2M4ZGFkZGI4NWRjNzBkMTY0NjkwYjExODIyMDlmZjg0ODI0ZTBiZTEwZTM1YzM3OWYyZjM3OGJmMTc2YTlmN2NiOTRkOTVlNDRkOTAyNzZhMjk4Yzg4MTBmNzQxYzkiOjA6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjOSAobm9uLWRlZmF1bHQgc2FsdF9sZW46IDApCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2OjA6IjU0NjU3Mzc0MjA2ZDY1NzM3MzYxNjc2NSI6IjdmYzUwNmQyNmNhM2IyMjkyMmExY2UzOWZhYWVkZDI3MzE2MWI4MmQ5NDQzYzU2ZjFhMDM0ZjEzMWFlNGExOGNhZTE0NzQyNzFjYjRiNjZhMTdkOTcwN2NhNThiMGJkYmQzYzQwNmI3ZTY1YmJjYzliYmJjZTk0ZGM0NWRlODA3YjQ5ODliMjNiM2U0ZGI3NGNhMjkyOTgxMzc4MzdlYjkwY2M4M2QzMjE5MjQ5YmM3ZDQ4MGZjZWFmMDc1MjAzYTg2ZTU0YzRlY2ZhNGUzMTJlMzlmOGY2OWQ3NjUzNDA4OWEzNmVkOTA0OWNhOWNmZDVhYjFkYjFmYTc1ZmU1YzgiOjA6MAorCitSU0FTU0EtUFNTIFNpZ25hdHVyZSB2ZXJpZnkgb3B0aW9ucyAjMTAgKG5vbi1kZWZhdWx0IHNhbHRfbGVuOiAwLCBBTlkpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfUlNBX1NBTFRfTEVOX0FOWToiNTQ2NTczNzQyMDZkNjU3MzczNjE2NzY1IjoiN2ZjNTA2ZDI2Y2EzYjIyOTIyYTFjZTM5ZmFhZWRkMjczMTYxYjgyZDk0NDNjNTZmMWEwMzRmMTMxYWU0YTE4Y2FlMTQ3NDI3MWNiNGI2NmExN2Q5NzA3Y2E1OGIwYmRiZDNjNDA2YjdlNjViYmNjOWJiYmNlOTRkYzQ1ZGU4MDdiNDk4OWIyM2IzZTRkYjc0Y2EyOTI5ODEzNzgzN2ViOTBjYzgzZDMyMTkyNDliYzdkNDgwZmNlYWYwNzUyMDNhODZlNTRjNGVjZmE0ZTMxMmUzOWY4ZjY5ZDc2NTM0MDg5YTM2ZWQ5MDQ5Y2E5Y2ZkNWFiMWRiMWZhNzVmZTVjOCI6MDowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICMxMSAoTUdGMSBhbGcgIT0gTVNHIGhhc2ggYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQ6MTAyNDoxNjoiMDBkZDExOGE5Zjk5YmFiMDY4Y2EyYWVhM2I2YTZkNTk5N2VkNGVjOTU0ZTQwZGVlY2VhMDdkYTAxZWFhZTgwZWMyYmIxMzQwZGI4YTEyOGU4OTEzMjRhNWM1ZjVmYWQ4ZjU5MGQ3YzhjYWNiYzVmZTkzMWRhZmRhMTIyMzczNTI3OTQ2MWFiYWEwNTcyYjc2MTYzMWIzYThhZmU3Mzg5YjA4OGI2Mzk5M2EwYTI1ZWU0NWQyMTg1OGJhYjk5MzFhZWRkNDU4OWE2MzFiMzdmY2Y3MTQwODlmODU2NTQ5ZjM1OTMyNmRkMWUwZTg2ZGRlNTJlZDY2YjRhOTBiZGE0MDk1IjoxNjoiMDEwMDAxIjpNQkVEVExTX01EX05PTkU6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOiJjMDcxOWU5YThkNWQ4MzhkODYxZGM2ZjY3NWM4OTlkMmIzMDlhM2E2NWJiOWZlNmIxMWU1YWZjYmY5YTJjMGIxIjoiN2ZjNTA2ZDI2Y2EzYjIyOTIyYTFjZTM5ZmFhZWRkMjczMTYxYjgyZDk0NDNjNTZmMWEwMzRmMTMxYWU0YTE4Y2FlMTQ3NDI3MWNiNGI2NmExN2Q5NzA3Y2E1OGIwYmRiZDNjNDA2YjdlNjViYmNjOWJiYmNlOTRkYzQ1ZGU4MDdiNDk4OWIyM2IzZTRkYjc0Y2EyOTI5ODEzNzgzN2ViOTBjYzgzZDMyMTkyNDliYzdkNDgwZmNlYWYwNzUyMDNhODZlNTRjNGVjZmE0ZTMxMmUzOWY4ZjY5ZDc2NTM0MDg5YTM2ZWQ5MDQ5Y2E5Y2ZkNWFiMWRiMWZhNzVmZTVjOCI6MDowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICMxMiAoTUdGMSBhbGcgIT0gTVNHIGhhc2ggYWxnLCBjdHggd3JvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfTk9ORTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOiJjMDcxOWU5YThkNWQ4MzhkODYxZGM2ZjY3NWM4OTlkMmIzMDlhM2E2NWJiOWZlNmIxMWU1YWZjYmY5YTJjMGIxIjoiN2ZjNTA2ZDI2Y2EzYjIyOTIyYTFjZTM5ZmFhZWRkMjczMTYxYjgyZDk0NDNjNTZmMWEwMzRmMTMxYWU0YTE4Y2FlMTQ3NDI3MWNiNGI2NmExN2Q5NzA3Y2E1OGIwYmRiZDNjNDA2YjdlNjViYmNjOWJiYmNlOTRkYzQ1ZGU4MDdiNDk4OWIyM2IzZTRkYjc0Y2EyOTI5ODEzNzgzN2ViOTBjYzgzZDMyMTkyNDliYzdkNDgwZmNlYWYwNzUyMDNhODZlNTRjNGVjZmE0ZTMxMmUzOWY4ZjY5ZDc2NTM0MDg5YTM2ZWQ5MDQ5Y2E5Y2ZkNWFiMWRiMWZhNzVmZTVjOCI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORzowCisKK1JTQVNTQS1QU1MgU2lnbmF0dXJlIHZlcmlmeSBvcHRpb25zICMxMyAoTUdGMSBhbGcgIT0gTVNHIGhhc2ggYWxnLCBhcmcgd3JvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3BrY3MxX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dDoxMDI0OjE2OiIwMGRkMTE4YTlmOTliYWIwNjhjYTJhZWEzYjZhNmQ1OTk3ZWQ0ZWM5NTRlNDBkZWVjZWEwN2RhMDFlYWFlODBlYzJiYjEzNDBkYjhhMTI4ZTg5MTMyNGE1YzVmNWZhZDhmNTkwZDdjOGNhY2JjNWZlOTMxZGFmZGExMjIzNzM1Mjc5NDYxYWJhYTA1NzJiNzYxNjMxYjNhOGFmZTczODliMDg4YjYzOTkzYTBhMjVlZTQ1ZDIxODU4YmFiOTkzMWFlZGQ0NTg5YTYzMWIzN2ZjZjcxNDA4OWY4NTY1NDlmMzU5MzI2ZGQxZTBlODZkZGU1MmVkNjZiNGE5MGJkYTQwOTUiOjE2OiIwMTAwMDEiOk1CRURUTFNfTURfTk9ORTpNQkVEVExTX01EX1NIQTI1NjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19SU0FfU0FMVF9MRU5fQU5ZOiJjMDcxOWU5YThkNWQ4MzhkODYxZGM2ZjY3NWM4OTlkMmIzMDlhM2E2NWJiOWZlNmIxMWU1YWZjYmY5YTJjMGIxIjoiN2ZjNTA2ZDI2Y2EzYjIyOTIyYTFjZTM5ZmFhZWRkMjczMTYxYjgyZDk0NDNjNTZmMWEwMzRmMTMxYWU0YTE4Y2FlMTQ3NDI3MWNiNGI2NmExN2Q5NzA3Y2E1OGIwYmRiZDNjNDA2YjdlNjViYmNjOWJiYmNlOTRkYzQ1ZGU4MDdiNDk4OWIyM2IzZTRkYjc0Y2EyOTI5ODEzNzgzN2ViOTBjYzgzZDMyMTkyNDliYzdkNDgwZmNlYWYwNzUyMDNhODZlNTRjNGVjZmE0ZTMxMmUzOWY4ZjY5ZDc2NTM0MDg5YTM2ZWQ5MDQ5Y2E5Y2ZkNWFiMWRiMWZhNzVmZTVjOCI6MDpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MjEuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMWZmNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uCkBAIC0wLDAgKzEsMjY3IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjIxOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrY3MxX3JzYWVzX29hZXBfZW5jcnlwdCggaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0UsIGludCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgY2hhciAqc2VlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBybmRfYnVmWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBtc2dfbGVuOworICAgIHJuZF9idWZfaW5mbyBpbmZvOworCisgICAgaW5mby5sZW5ndGggPSB1bmhleGlmeSggcm5kX2J1Ziwgc2VlZCApOworICAgIGluZm8uYnVmID0gcm5kX2J1ZjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBoYXNoICk7CisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoICZjdHgsICZybmRfYnVmZmVyX3JhbmQsICZpbmZvLCBNQkVEVExTX1JTQV9QVUJMSUMsIG1zZ19sZW4sIG1lc3NhZ2Vfc3RyLCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtjczFfcnNhZXNfb2FlcF9kZWNyeXB0KCBpbnQgbW9kLCBpbnQgcmFkaXhfUCwgY2hhciAqaW5wdXRfUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUSwgY2hhciAqaW5wdXRfUSwgaW50IHJhZGl4X04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBjaGFyICpzZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIHNpemVfdCBvdXRwdXRfbGVuOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICAoKHZvaWQpIHNlZWQpOworCisgICAgbWJlZHRsc19tcGlfaW5pdCggJlAxICk7IG1iZWR0bHNfbXBpX2luaXQoICZRMSApOyBtYmVkdGxzX21waV9pbml0KCAmSCApOyBtYmVkdGxzX21waV9pbml0KCAmRyApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBoYXNoICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDggKyAoICggbW9kICUgOCApID8gMSA6IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHguUCwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmY3R4LlEsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2NkKCAmRywgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguRCAsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRQLCAmY3R4LkQsICZQMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUSwgJmN0eC5ELCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguUVAsICZjdHguUSwgJmN0eC5QICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoICZjdHgsICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwgJm91dHB1dF9sZW4sIG1lc3NhZ2Vfc3RyLCBvdXRwdXQsIDEwMDAgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RybmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyLCBzdHJsZW4oIHJlc3VsdF9oZXhfc3RyICkgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHBrY3MxX3JzYXNzYV9wc3Nfc2lnbiggaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsIGludCByYWRpeF9RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICppbnB1dF9FLCBpbnQgZGlnZXN0LCBpbnQgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGNoYXIgKnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBybmRfYnVmWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIG1iZWR0bHNfbXBpIFAxLCBRMSwgSCwgRzsKKyAgICBzaXplX3QgbXNnX2xlbjsKKyAgICBybmRfYnVmX2luZm8gaW5mbzsKKworICAgIGluZm8ubGVuZ3RoID0gdW5oZXhpZnkoIHJuZF9idWYsIHNhbHQgKTsKKyAgICBpbmZvLmJ1ZiA9IHJuZF9idWY7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7IG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMjEsIGhhc2ggKTsKKworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4ICsgKCAoIG1vZCAlIDggKSA/IDEgOiAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LlAsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LkQgLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUCwgJmN0eC5ELCAmUDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFEsICZjdHguRCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LlFQLCAmY3R4LlEsICZjdHguUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBpZiggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICkgIT0gTlVMTCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSwgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oICZjdHgsICZybmRfYnVmZmVyX3JhbmQsICZpbmZvLCBNQkVEVExTX1JTQV9QUklWQVRFLCBkaWdlc3QsIDAsIGhhc2hfcmVzdWx0LCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4pOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcGtjczFfcnNhc3NhX3Bzc192ZXJpZnkoIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X0UsIGludCBkaWdlc3QsIGludCBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBjaGFyICpzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IG1zZ19sZW47CisgICAgKCh2b2lkKSBzYWx0KTsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBoYXNoICk7CisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9yZXN1bHQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHJlc3VsdF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4ICsgKCAoIG1vZCAlIDggKSA/IDEgOiAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHJlc3VsdF9zdHIsIHJlc3VsdF9oZXhfc3RyICk7CisKKyAgICBpZiggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICkgIT0gTlVMTCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSwgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeSggJmN0eCwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLCBkaWdlc3QsIDAsIGhhc2hfcmVzdWx0LCByZXN1bHRfc3RyICkgPT0gcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwa2NzMV9yc2Fzc2FfcHNzX3ZlcmlmeV9leHQoIGludCBtb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1zZ19kaWdlc3RfaWQsIGludCBjdHhfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWdmX2hhc2gsIGludCBzYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdF9zaW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdF9mdWxsICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciByZXN1bHRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBtc2dfbGVuLCBoYXNoX2xlbjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIE1CRURUTFNfUlNBX1BLQ1NfVjIxLCBjdHhfaGFzaCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCByZXN1bHRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gOCArICggKCBtb2QgJSA4ICkgPyAxIDogMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IDAgKTsKKworICAgIG1zZ19sZW4gPSB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCByZXN1bHRfc3RyLCByZXN1bHRfaGV4X3N0ciApOworCisgICAgaWYoIG1zZ19kaWdlc3RfaWQgIT0gTUJFRFRMU19NRF9OT05FICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBtc2dfZGlnZXN0X2lkICksCisgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3N0ciwgbXNnX2xlbiwgaGFzaF9yZXN1bHQgKSA9PSAwICk7CisgICAgICAgIGhhc2hfbGVuID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtY3B5KCBoYXNoX3Jlc3VsdCwgbWVzc2FnZV9zdHIsIG1zZ19sZW4gKTsKKyAgICAgICAgaGFzaF9sZW4gPSBtc2dfbGVuOworICAgIH0KKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoICZjdHgsIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX2RpZ2VzdF9pZCwgaGFzaF9sZW4sIGhhc2hfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3RyICkgPT0gcmVzdWx0X3NpbXBsZSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3JzYXNzYV9wc3NfdmVyaWZ5X2V4dCggJmN0eCwgTlVMTCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19kaWdlc3RfaWQsIGhhc2hfbGVuLCBoYXNoX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZ2ZfaGFzaCwgc2FsdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ciApID09IHJlc3VsdF9mdWxsICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzNS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3M1LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwOWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzNS5kYXRhCkBAIC0wLDAgKzEsMTI2IEBACitQQktERjIgUkZDIDYwNzAgVGVzdCBWZWN0b3IgIzEgKFNIQTEpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitwYmtkZjJfaG1hYzpNQkVEVExTX01EX1NIQTE6IjcwNjE3MzczNzc2ZjcyNjQiOiI3MzYxNmM3NCI6MToyMDoiMGM2MGM4MGY5NjFmMGU3MWYzYTliNTI0YWY2MDEyMDYyZmUwMzdhNiIKKworUEJLREYyIFJGQyA2MDcwIFRlc3QgVmVjdG9yICMyIChTSEExKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworcGJrZGYyX2htYWM6TUJFRFRMU19NRF9TSEExOiI3MDYxNzM3Mzc3NmY3MjY0IjoiNzM2MTZjNzQiOjI6MjA6ImVhNmMwMTRkYzcyZDZmOGNjZDFlZDkyYWNlMWQ0MWYwZDhkZTg5NTciCisKK1BCS0RGMiBSRkMgNjA3MCBUZXN0IFZlY3RvciAjMyAoU0hBMSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK3Bia2RmMl9obWFjOk1CRURUTFNfTURfU0hBMToiNzA2MTczNzM3NzZmNzI2NCI6IjczNjE2Yzc0Ijo0MDk2OjIwOiI0YjAwNzkwMWI3NjU0ODlhYmVhZDQ5ZDkyNmY3MjFkMDY1YTQyOWMxIgorCitQQktERjIgUkZDIDYwNzAgVGVzdCBWZWN0b3IgIzUgKFNIQTEpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DCitwYmtkZjJfaG1hYzpNQkVEVExTX01EX1NIQTE6IjcwNjE3MzczNzc2ZjcyNjQ1MDQxNTM1MzU3NGY1MjQ0NzA2MTczNzM3NzZmNzI2NCI6IjczNjE2Yzc0NTM0MTRjNTQ3MzYxNmM3NDUzNDE0YzU0NzM2MTZjNzQ1MzQxNGM1NDczNjE2Yzc0NTM0MTRjNTQ3MzYxNmM3NCI6NDA5NjoyNToiM2QyZWVjNGZlNDFjODQ5YjgwYzhkODM2NjJjMGU0NGE4YjI5MWE5NjRjZjJmMDcwMzgiCisKK1BCS0RGMiBSRkMgNjA3MCBUZXN0IFZlY3RvciAjNiAoU0hBMSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK3Bia2RmMl9obWFjOk1CRURUTFNfTURfU0hBMToiNzA2MTczNzMwMDc3NmY3MjY0IjoiNzM2MTAwNmM3NCI6NDA5NjoxNjoiNTZmYTZhYTc1NTQ4MDk5ZGNjMzdkN2YwMzQyNWUwYzMiCisKK1BCRVMyIERlY3J5cHQgKE9LKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMTQwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDg4QTRGQ0M5RENDMzk0OTEwIjoiNzA2MTczNzM3NzZmNzI2NCI6IjFCNjAwOThENDgzNENBNzUyRDM3QjQzMEU3MEI3QTA4NUNGRjg2RTIxRjQ4NDlGOTY5REQxREY2MjMzNDI2NjI0NDNGOEJEMTI1MkJGODNDRUY2OTE3NTUxQjA4RUY1NUE2OUM4RjJCRkZDOTNCQ0IyREZFMkUzNTREQTI4Rjg5NkQxQkQxQkZCOTcyQTEyNTEyMTlBNkVDNzE4M0IwQTRDRjJDNDk5ODQ0OUVENzg2Q0FFMjEzODQzNzI4OUVCMjIwMzk3NDAwMEMzODYxOURBNTdBNEU2ODVEMjk2NDkyODQ2MDJCRDE4MDYxMzE3NzJEQTExQTY4MjY3NERDMjJCMkNGMTA5MTI4RERCN0ZEOTgwRTFDNTc0MUZDMERCNyI6MDoiMzA4MTg3MDIwMTAwMzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDQ2RDMwNkIwMjAxMDEwNDIwRjEyQTEzMjA3NjAyNzBBODNDQkZGRDUzRjYwMzFFRjc2QTVEODZDOEEyMDRGMkMzMENBOUVCRjUxRjBGMEVBN0ExNDQwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGMDYwNjA2MDYwNjA2IgorCitQQkVTMiBEZWNyeXB0IChiYWQgcGFyYW1zIHRhZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IiI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBLREYgQWxnSWQ6IG5vdCBhIHNlcXVlbmNlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRzoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgS0RGIEFsZ0lkOiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMDEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQToiIgorCitQQkVTMiBEZWNyeXB0IChLREYgIT0gUEJLREYyKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAwQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEQiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0ZFQVRVUkVfVU5BVkFJTEFCTEU6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIFBCS0RGMiBwYXJhbXM6IG5vdCBhIHNlcXVlbmNlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAwRDA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMTAwIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUc6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIFBCS0RGMiBwYXJhbXM6IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAwRDA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIFBCS0RGMiBwYXJhbXMgc2FsdDogbm90IGFuIG9jdGV0IHN0cmluZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMEUwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwMTA1MDAiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRzoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgUEJLREYyIHBhcmFtcyBzYWx0OiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMEUwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAwMTA0MDEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQToiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgUEJLREYyIHBhcmFtcyBpdGVyOiBub3QgYW4gaW50KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxOTA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBDMDQwODJFRDdGMjRBMUQ1MTZERDcwMzAwIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUc6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIFBCS0RGMiBwYXJhbXMgaXRlcjogb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDE5MDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMEMwNDA4MkVEN0YyNEExRDUxNkRENzAyMDEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQToiIgorCitQQkVTMiBEZWNyeXB0IChPSywgUEJLREYyIHBhcmFtcyBleHBsaWNpdCBrZXlsZW4pCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDFFMDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMTEwNDA4MkVEN0YyNEExRDUxNkRENzAyMDIwODAwMDIwMTE4MzAxNDA2MDgyQTg2NDg4NkY3MEQwMzA3MDQwODhBNEZDQzlEQ0MzOTQ5MTAiOiI3MDYxNzM3Mzc3NmY3MjY0IjoiMUI2MDA5OEQ0ODM0Q0E3NTJEMzdCNDMwRTcwQjdBMDg1Q0ZGODZFMjFGNDg0OUY5NjlERDFERjYyMzM0MjY2MjQ0M0Y4QkQxMjUyQkY4M0NFRjY5MTc1NTFCMDhFRjU1QTY5QzhGMkJGRkM5M0JDQjJERkUyRTM1NERBMjhGODk2RDFCRDFCRkI5NzJBMTI1MTIxOUE2RUM3MTgzQjBBNENGMkM0OTk4NDQ5RUQ3ODZDQUUyMTM4NDM3Mjg5RUIyMjAzOTc0MDAwQzM4NjE5REE1N0E0RTY4NUQyOTY0OTI4NDYwMkJEMTgwNjEzMTc3MkRBMTFBNjgyNjc0REMyMkIyQ0YxMDkxMjhEREI3RkQ5ODBFMUM1NzQxRkMwREI3IjowOiIzMDgxODcwMjAxMDAzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwNDZEMzA2QjAyMDEwMTA0MjBGMTJBMTMyMDc2MDI3MEE4M0NCRkZENTNGNjAzMUVGNzZBNUQ4NkM4QTIwNEYyQzMwQ0E5RUJGNTFGMEYwRUE3QTE0NDAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkYwNjA2MDYwNjA2MDYiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBQQktERjIgcGFyYW1zIGV4cGxpY2l0IGtleWxlbjogb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0MKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDFEMDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMTAwNDA4MkVEN0YyNEExRDUxNkRENzAyMDIwODAwMDIwMSI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBOiIiCisKK1BCRVMyIERlY3J5cHQgKE9LLCBQQktERjIgcGFyYW1zIGV4cGxpY2l0IHByZl9hbGcpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMUEwNDA4MkVEN0YyNEExRDUxNkRENzAyMDIwODAwMzAwQTA2MDgyQTg2NDg4NkY3MEQwMjA3MzAxNDA2MDgyQTg2NDg4NkY3MEQwMzA3MDQwODhBNEZDQzlEQ0MzOTQ5MTAiOiI3MDYxNzM3Mzc3NmY3MjY0IjoiMUI2MDA5OEQ0ODM0Q0E3NTJEMzdCNDMwRTcwQjdBMDg1Q0ZGODZFMjFGNDg0OUY5NjlERDFERjYyMzM0MjY2MjQ0M0Y4QkQxMjUyQkY4M0NFRjY5MTc1NTFCMDhFRjU1QTY5QzhGMkJGRkM5M0JDQjJERkUyRTM1NERBMjhGODk2RDFCRDFCRkI5NzJBMTI1MTIxOUE2RUM3MTgzQjBBNENGMkM0OTk4NDQ5RUQ3ODZDQUUyMTM4NDM3Mjg5RUIyMjAzOTc0MDAwQzM4NjE5REE1N0E0RTY4NUQyOTY0OTI4NDYwMkJEMTgwNjEzMTc3MkRBMTFBNjgyNjc0REMyMkIyQ0YxMDkxMjhEREI3RkQ5ODBFMUM1NzQxRkMwREI3IjowOiIzMDgxODcwMjAxMDAzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwNDZEMzA2QjAyMDEwMTA0MjBGMTJBMTMyMDc2MDI3MEE4M0NCRkZENTNGNjAzMUVGNzZBNUQ4NkM4QTIwNEYyQzMwQ0E5RUJGNTFGMEYwRUE3QTE0NDAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkYwNjA2MDYwNjA2MDYiCisKK1BCRVMyIERlY3J5cHQgKGJhZCwgUEJLREYyIHBhcmFtcyBleHBsaWNpdCBwcmZfYWxnIG5vdCBhIHNlcXVlbmNlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxRDA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDEwMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMxMDAiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRzoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQsIFBCS0RGMiBwYXJhbXMgZXhwbGljaXQgcHJmX2FsZyBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMUQwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAxMDA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDAxIjoiIjoiIjpNQkVEVExTX0VSUl9QS0NTNV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEE6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkLCBQQktERjIgcGFyYW1zIGV4cGxpY2l0IHByZl9hbGcgIT0gSE1BQy1TSEExKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDFBMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMEEwNjA4MkE4NjQ4ODZGNzBEMDIwOCI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRToiIgorCitQQkVTMiBEZWNyeXB0IChiYWQsIFBCS0RGMiBwYXJhbXMgZXh0cmEgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19ERVNfQworbWJlZHRsc19wa2NzNV9wYmVzMjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6IjMwMjgwNjA5MkE4NjQ4ODZGNzBEMDEwNTBDMzAxQjA0MDgyRUQ3RjI0QTFENTE2REQ3MDIwMjA4MDAzMDBBMDYwODJBODY0ODg2RjcwRDAyMDcwMCI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSDoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgZW5jX3NjaGVtZV9hbGc6IG5vdCBhIHNlcXVlbmNlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMxMDAiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRzoiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgZW5jX3NjaGVtZV9hbGc6IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMDEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQToiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgZW5jX3NjaGVtZV9hbGc6IHVua25vd24gb2lkKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMEEwNjA4MkE4NjQ4ODZGNzBEMDNGRiI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfRkVBVFVSRV9VTkFWQUlMQUJMRToiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgZW5jX3NjaGVtZV9hbGcgcGFyYW1zOiBub3QgYW4gb2N0ZXQgc3RyaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMEMwNjA4MkE4NjQ4ODZGNzBEMDMwNzA1MDAiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUOiIiCisKK1BCRVMyIERlY3J5cHQgKGJhZCBlbmNfc2NoZW1lX2FsZyBwYXJhbXM6IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMEMwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDEiOiIiOiIiOk1CRURUTFNfRVJSX1BLQ1M1X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQToiIgorCitQQkVTMiBEZWNyeXB0IChiYWQgZW5jX3NjaGVtZV9hbGcgcGFyYW1zOiBsZW4gIT0gaXZfbGVuKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMTMwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDc4QTRGQ0M5RENDMzk0OSI6IiI6IiI6TUJFRFRMU19FUlJfUEtDUzVfSU5WQUxJRF9GT1JNQVQ6IiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIHBhc3N3b3JkKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCittYmVkdGxzX3BrY3M1X3BiZXMyOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRToiMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTA1MEMzMDBFMDQwODJFRDdGMjRBMUQ1MTZERDcwMjAyMDgwMDMwMTQwNjA4MkE4NjQ4ODZGNzBEMDMwNzA0MDg4QTRGQ0M5RENDMzk0OTEwIjoiRjA2MTczNzM3NzZmNzI2NCI6IjFCNjAwOThENDgzNENBNzUyRDM3QjQzMEU3MEI3QTA4NUNGRjg2RTIxRjQ4NDlGOTY5REQxREY2MjMzNDI2NjI0NDNGOEJEMTI1MkJGODNDRUY2OTE3NTUxQjA4RUY1NUE2OUM4RjJCRkZDOTNCQ0IyREZFMkUzNTREQTI4Rjg5NkQxQkQxQkZCOTcyQTEyNTEyMTlBNkVDNzE4M0IwQTRDRjJDNDk5ODQ0OUVENzg2Q0FFMjEzODQzNzI4OUVCMjIwMzk3NDAwMEMzODYxOURBNTdBNEU2ODVEMjk2NDkyODQ2MDJCRDE4MDYxMzE3NzJEQTExQTY4MjY3NERDMjJCMkNGMTA5MTI4RERCN0ZEOTgwRTFDNTc0MUZDMERCNyI6TUJFRFRMU19FUlJfUEtDUzVfUEFTU1dPUkRfTUlTTUFUQ0g6IjMwODE4NzAyMDEwMDMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzA0NkQzMDZCMDIwMTAxMDQyMEYxMkExMzIwNzYwMjcwQTgzQ0JGRkQ1M0Y2MDMxRUY3NkE1RDg2QzhBMjA0RjJDMzBDQTlFQkY1MUYwRjBFQTdBMTQ0MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRjA2MDYwNjA2MDYwNiIKKworUEJFUzIgRGVjcnlwdCAoYmFkIGl0ZXIgdmFsdWUpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK21iZWR0bHNfcGtjczVfcGJlczI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOiIzMDFCMDYwOTJBODY0ODg2RjcwRDAxMDUwQzMwMEUwNDA4MkVEN0YyNEExRDUxNkRENzAyMDIwODAxMzAxNDA2MDgyQTg2NDg4NkY3MEQwMzA3MDQwODhBNEZDQzlEQ0MzOTQ5MTAiOiI3MDYxNzM3Mzc3NmY3MjY0IjoiMUI2MDA5OEQ0ODM0Q0E3NTJEMzdCNDMwRTcwQjdBMDg1Q0ZGODZFMjFGNDg0OUY5NjlERDFERjYyMzM0MjY2MjQ0M0Y4QkQxMjUyQkY4M0NFRjY5MTc1NTFCMDhFRjU1QTY5QzhGMkJGRkM5M0JDQjJERkUyRTM1NERBMjhGODk2RDFCRDFCRkI5NzJBMTI1MTIxOUE2RUM3MTgzQjBBNENGMkM0OTk4NDQ5RUQ3ODZDQUUyMTM4NDM3Mjg5RUIyMjAzOTc0MDAwQzM4NjE5REE1N0E0RTY4NUQyOTY0OTI4NDYwMkJEMTgwNjEzMTc3MkRBMTFBNjgyNjc0REMyMkIyQ0YxMDkxMjhEREI3RkQ5ODBFMUM1NzQxRkMwREI3IjpNQkVEVExTX0VSUl9QS0NTNV9QQVNTV09SRF9NSVNNQVRDSDoiMzA4MTg3MDIwMTAwMzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDQ2RDMwNkIwMjAxMDEwNDIwRjEyQTEzMjA3NjAyNzBBODNDQkZGRDUzRjYwMzFFRjc2QTVEODZDOEEyMDRGMkMzMENBOUVCRjUxRjBGMEVBN0ExNDQwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGMDYwNjA2MDYwNjA2IgorCitQS0NTIzUgU2VsZnRlc3QKK3BrY3M1X3NlbGZ0ZXN0OgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3M1LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3M1LmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWJlYzAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczUuZnVuY3Rpb24KQEAgLTAsMCArMSw4NyBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy9wa2NzNS5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19QS0NTNV9DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBwYmtkZjJfaG1hYyggaW50IGhhc2gsIGNoYXIgKmhleF9wYXNzd29yZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc2FsdF9zdHJpbmcsIGludCBpdF9jbnQsIGludCBrZXlfbGVuLAorICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2tleV9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgcHdfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzYWx0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworCisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICppbmZvOworCisgICAgaW50IHB3X2xlbiwgc2FsdF9sZW47CisgICAgdW5zaWduZWQgY2hhciBrZXlbMTAwXTsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmN0eCApOworCisgICAgbWVtc2V0KHB3X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc2FsdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisKKyAgICBwd19sZW4gPSB1bmhleGlmeSggcHdfc3RyLCBoZXhfcGFzc3dvcmRfc3RyaW5nICk7CisgICAgc2FsdF9sZW4gPSB1bmhleGlmeSggc2FsdF9zdHIsIGhleF9zYWx0X3N0cmluZyApOworCisKKyAgICBpbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggaGFzaCApOworICAgIFRFU1RfQVNTRVJUKCBpbmZvICE9IE5VTEwgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tZF9zZXR1cCggJmN0eCwgaW5mbywgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa2NzNV9wYmtkZjJfaG1hYyggJmN0eCwgcHdfc3RyLCBwd19sZW4sIHNhbHRfc3RyLCBzYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdF9jbnQsIGtleV9sZW4sIGtleSApID09IDAgKTsKKworICAgIGhleGlmeSggZHN0X3N0ciwga2V5LCBrZXlfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgcmVzdWx0X2tleV9zdHJpbmcgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcGtjczVfcGJlczIoIGludCBwYXJhbXNfdGFnLCBjaGFyICpwYXJhbXNfaGV4LCBjaGFyICpwd19oZXgsCisgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhX2hleCwgaW50IHJlZl9yZXQsIGNoYXIgKnJlZl9vdXRfaGV4ICkKK3sKKyAgICBpbnQgbXlfcmV0OworICAgIG1iZWR0bHNfYXNuMV9idWYgcGFyYW1zOworICAgIHVuc2lnbmVkIGNoYXIgKm15X291dCA9IE5VTEwsICpyZWZfb3V0ID0gTlVMTCwgKmRhdGEgPSBOVUxMLCAqcHcgPSBOVUxMOworICAgIHNpemVfdCByZWZfb3V0X2xlbiwgZGF0YV9sZW4sIHB3X2xlbjsKKworICAgIHBhcmFtcy50YWcgPSBwYXJhbXNfdGFnOworICAgIHBhcmFtcy5wID0gdW5oZXhpZnlfYWxsb2MoIHBhcmFtc19oZXgsICZwYXJhbXMubGVuICk7CisKKyAgICBkYXRhID0gdW5oZXhpZnlfYWxsb2MoIGRhdGFfaGV4LCAmZGF0YV9sZW4gKTsKKyAgICBwdyA9IHVuaGV4aWZ5X2FsbG9jKCBwd19oZXgsICZwd19sZW4gKTsKKyAgICByZWZfb3V0ID0gdW5oZXhpZnlfYWxsb2MoIHJlZl9vdXRfaGV4LCAmcmVmX291dF9sZW4gKTsKKyAgICBteV9vdXQgPSB6ZXJvX2FsbG9jKCByZWZfb3V0X2xlbiApOworCisgICAgbXlfcmV0ID0gbWJlZHRsc19wa2NzNV9wYmVzMiggJnBhcmFtcywgTUJFRFRMU19QS0NTNV9ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdywgcHdfbGVuLCBkYXRhLCBkYXRhX2xlbiwgbXlfb3V0ICk7CisgICAgVEVTVF9BU1NFUlQoIG15X3JldCA9PSByZWZfcmV0ICk7CisKKyAgICBpZiggcmVmX3JldCA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXlfb3V0LCByZWZfb3V0LCByZWZfb3V0X2xlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX2ZyZWUoIHBhcmFtcy5wICk7CisgICAgbWJlZHRsc19mcmVlKCBkYXRhICk7CisgICAgbWJlZHRsc19mcmVlKCBwdyApOworICAgIG1iZWR0bHNfZnJlZSggcmVmX291dCApOworICAgIG1iZWR0bHNfZnJlZSggbXlfb3V0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgcGtjczVfc2VsZnRlc3QoICkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa2NzNV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrcGFyc2UuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3BhcnNlLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiMzk2OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3BhcnNlLmRhdGEKQEAgLTAsMCArMSwyMjggQEAKK1BhcnNlIFJTQSBLZXkgIzEgKE5vIHBhc3N3b3JkIHdoZW4gcmVxdWlyZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvdGVzdC1jYS5rZXkiOiJOVUxMIjpNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRAorCitQYXJzZSBSU0EgS2V5ICMyIChDb3JyZWN0IHBhc3N3b3JkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5IjoiUG9sYXJTU0xUZXN0IjowCisKK1BhcnNlIFJTQSBLZXkgIzMgKFdyb25nIHBhc3N3b3JkKQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5IjoiUG9sYXJTU0xXUk9ORyI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKKworUGFyc2UgUlNBIEtleSAjNCAoREVTIEVuY3J5cHRlZCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL2tleWZpbGUuZGVzIjoidGVzdGtleSI6MAorCitQYXJzZSBSU0EgS2V5ICM1ICgzREVTIEVuY3J5cHRlZCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX0RFU19DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL2tleWZpbGUuM2RlcyI6InRlc3RrZXkiOjAKKworUGFyc2UgUlNBIEtleSAjNiAoQUVTLTEyOCBFbmNyeXB0ZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19BRVNfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9rZXlmaWxlLmFlczEyOCI6InRlc3RrZXkiOjAKKworUGFyc2UgUlNBIEtleSAjNyAoQUVTLTE5MiBFbmNyeXB0ZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19BRVNfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9rZXlmaWxlLmFlczE5MiI6InRlc3RrZXkiOjAKKworUGFyc2UgUlNBIEtleSAjOCAoQUVTLTI1NiBFbmNyeXB0ZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19BRVNfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9rZXlmaWxlLmFlczI1NiI6InRlc3RrZXkiOjAKKworUGFyc2UgUlNBIEtleSAjOSAoUEtDUyM4IHdyYXBwZWQpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19QRU1fUEFSU0VfQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvZm9ybWF0X2dlbi5rZXkiOiIiOjAKKworUGFyc2UgUlNBIEtleSAjMTAgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS0zREVTKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTMTJfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfM2Rlcy5rZXkiOiJQb2xhclNTTFRlc3QiOjAKKworUGFyc2UgUlNBIEtleSAjMTAuMSAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLTNERVMsIHdyb25nIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTMTJfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3Citwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmtleSI6IlBvbGFyU1NMVGVzIjpNQkVEVExTX0VSUl9QS19QQVNTV09SRF9NSVNNQVRDSAorCitQYXJzZSBSU0EgS2V5ICMxMC4yIChQS0NTIzggZW5jcnlwdGVkIFNIQTEtM0RFUywgbm8gUFcpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1MxMl9DCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmtleSI6IiI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfUkVRVUlSRUQKKworUGFyc2UgUlNBIEtleSAjMTEgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS0zREVTIERFUikKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxMl9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8zZGVzLmRlciI6IlBvbGFyU1NMVGVzdCI6MAorCitQYXJzZSBSU0EgS2V5ICMxMiAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLTJERVMpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1MxMl9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVfc2hhMV8yZGVzLmtleSI6IlBvbGFyU1NMVGVzdCI6MAorCitQYXJzZSBSU0EgS2V5ICMxMi4xIChQS0NTIzggZW5jcnlwdGVkIFNIQTEtMkRFUywgd3JvbmcgUFcpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1MxMl9DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX1BBRERJTkdfUEtDUzcKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzJkZXMua2V5IjoiUG9sYXJTTFRlc3QiOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX01JU01BVENICisKK1BhcnNlIFJTQSBLZXkgIzEyLjIgKFBLQ1MjOCBlbmNyeXB0ZWQgU0hBMS0yREVTLCBubyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzEyX0MKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExXzJkZXMua2V5IjoiIjpNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRAorCitQYXJzZSBSU0EgS2V5ICMxMyAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLVJDNC0xMjgpCitkZXBlbmRzX29uOk1CRURUTFNfQVJDNF9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTMTJfQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlX3NoYTFfcmM0XzEyOC5rZXkiOiJQb2xhclNTTFRlc3QiOjAKKworUGFyc2UgUlNBIEtleSAjMTMuMSAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLVJDNC0xMjgsIHdyb25nIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzEyX0MKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExX3JjNF8xMjgua2V5IjoiUG9sYXJTU0xUZSI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKKworUGFyc2UgUlNBIEtleSAjMTMuMiAoUEtDUyM4IGVuY3J5cHRlZCBTSEExLVJDNC0xMjgsIG5vIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0FSQzRfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzEyX0MKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZV9zaGExX3JjNF8xMjgua2V5IjoiIjpNQkVEVExTX0VSUl9QS19QQVNTV09SRF9SRVFVSVJFRAorCitQYXJzZSBSU0EgS2V5ICMxNCAoUEtDUyM4IGVuY3J5cHRlZCB2MiBQQkRGSzIgM0RFUykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzVfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworcGtfcGFyc2Vfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvcGtjczhfcGJlczJfcGJrZGYyXzNkZXMua2V5IjoiUG9sYXJTU0xUZXN0IjowCisKK1BhcnNlIFJTQSBLZXkgIzE1IChQS0NTIzggZW5jcnlwdGVkIHYyIFBCREZLMiAzREVTLCB3cm9uZyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUEtDUzVfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3Citwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5rZXkiOiJQb2xhclNTTFRlcyI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKKworUGFyc2UgUlNBIEtleSAjMTYgKFBLQ1MjOCBlbmNyeXB0ZWQgdjIgUEJERksyIDNERVMsIG5vIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19QS0NTNV9DCitwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5rZXkiOiIiOk1CRURUTFNfRVJSX1BLX1BBU1NXT1JEX1JFUVVJUkVECisKK1BhcnNlIFJTQSBLZXkgIzE3IChQS0NTIzggZW5jcnlwdGVkIHYyIFBCREZLMiAzREVTIERFUikKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1M1X0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmRlciI6IlBvbGFyU1NMVGVzdCI6MAorCitQYXJzZSBSU0EgS2V5ICMxOCAoUEtDUyM4IGVuY3J5cHRlZCB2MiBQQkRGSzIgM0RFUyBERVIsIHdyb25nIFBXKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzVfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9QQURESU5HX1BLQ1M3Citwa19wYXJzZV9rZXlmaWxlX3JzYToiZGF0YV9maWxlcy9wa2NzOF9wYmVzMl9wYmtkZjJfM2Rlcy5kZXIiOiJQb2xhclNTTFRlcyI6TUJFRFRMU19FUlJfUEtfUEFTU1dPUkRfTUlTTUFUQ0gKKworUGFyc2UgUlNBIEtleSAjMTkgKFBLQ1MjOCBlbmNyeXB0ZWQgdjIgUEJERksyIDNERVMgREVSLCBubyBQVykKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1M1X0MKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl8zZGVzLmRlciI6IiI6TUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUCisKK1BhcnNlIFJTQSBLZXkgIzIwIChQS0NTIzggZW5jcnlwdGVkIHYyIFBCREZLMiBERVMpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1BLQ1M1X0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK3BrX3BhcnNlX2tleWZpbGVfcnNhOiJkYXRhX2ZpbGVzL3BrY3M4X3BiZXMyX3Bia2RmMl9kZXMua2V5IjoiUG9sYXJTU0xUZXN0IjowCisKK1BhcnNlIFB1YmxpYyBSU0EgS2V5ICMxIChQS0NTIzggd3JhcHBlZCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX1BFTV9QQVJTRV9DCitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9yc2E6ImRhdGFfZmlsZXMvZm9ybWF0X2dlbi5wdWIiOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjMSAoUkZDIDU0ODAsIERFUikKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfcHViLmRlciI6MAorCitQYXJzZSBQdWJsaWMgRUMgS2V5ICMyIChSRkMgNTQ4MCwgUEVNKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3B1Yi5wZW0iOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjMyAoUkZDIDU0ODAsIHNlY3AyMjRyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyMjRSMV9FTkFCTEVECitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY18yMjRfcHViLnBlbSI6MAorCitQYXJzZSBQdWJsaWMgRUMgS2V5ICM0IChSRkMgNTQ4MCwgc2VjcDI1NnIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjXzI1Nl9wdWIucGVtIjowCisKK1BhcnNlIFB1YmxpYyBFQyBLZXkgIzUgKFJGQyA1NDgwLCBzZWNwMzg0cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfMzg0X3B1Yi5wZW0iOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjNiAoUkZDIDU0ODAsIHNlY3A1MjFyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY181MjFfcHViLnBlbSI6MAorCitQYXJzZSBQdWJsaWMgRUMgS2V5ICM3IChSRkMgNTQ4MCwgYnJhaW5wb29sUDI1NnIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVECitwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19icDI1Nl9wdWIucGVtIjowCisKK1BhcnNlIFB1YmxpYyBFQyBLZXkgIzggKFJGQyA1NDgwLCBicmFpbnBvb2xQMzg0cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9CUDM4NFIxX0VOQUJMRUQKK3BrX3BhcnNlX3B1YmxpY19rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX2JwMzg0X3B1Yi5wZW0iOjAKKworUGFyc2UgUHVibGljIEVDIEtleSAjOSAoUkZDIDU0ODAsIGJyYWlucG9vbFA1MTJyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorcGtfcGFyc2VfcHVibGljX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfYnA1MTJfcHViLnBlbSI6MAorCitQYXJzZSBFQyBLZXkgIzEgKFNFQzEgREVSKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfcHJ2LnNlYzEuZGVyIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzFhIChTRUMxIERFUiwgbm8gb3B0aW9uYWwgcGFydCkKK2RlcGVuZHNfb246UE9MQVJTU0xfUEVNX1BBUlNFX0M6UE9MQVJTU0xfRUNQX0M6UE9MQVJTU0xfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5ub29wdC5kZXIiOiJOVUxMIjowCisKK1BhcnNlIEVDIEtleSAjMiAoU0VDMSBQRU0pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wcnYuc2VjMS5wZW0iOiJOVUxMIjowCisKK1BhcnNlIEVDIEtleSAjMyAoU0VDMSBQRU0gZW5jcnlwdGVkKQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX01ENV9DCitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLnB3LnBlbSI6InBvbGFyIjowCisKK1BhcnNlIEVDIEtleSAjNCAoUEtDUzggREVSKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5wazguZGVyIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzUgKFBLQ1M4IFBFTSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjX3Bydi5wazgucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzYgKFBLQ1M4IGVuY3J5cHRlZCBERVIpCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19wcnYucGs4LnB3LmRlciI6InBvbGFyIjowCisKK1BhcnNlIEVDIEtleSAjNyAoUEtDUzggZW5jcnlwdGVkIFBFTSkKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfcHJ2LnBrOC5wdy5wZW0iOiJwb2xhciI6MAorCitQYXJzZSBFQyBLZXkgIzggKFNFQzEgUEVNLCBzZWNwMjI0cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjI0UjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY18yMjRfcHJ2LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICM5IChTRUMxIFBFTSwgc2VjcDI1NnIxKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfMjU2X3Bydi5wZW0iOiJOVUxMIjowCisKK1BhcnNlIEVDIEtleSAjMTAgKFNFQzEgUEVNLCBzZWNwMzg0cjEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY18zODRfcHJ2LnBlbSI6Ik5VTEwiOjAKKworUGFyc2UgRUMgS2V5ICMxMSAoU0VDMSBQRU0sIHNlY3A1MjFyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitwa19wYXJzZV9rZXlmaWxlX2VjOiJkYXRhX2ZpbGVzL2VjXzUyMV9wcnYucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzEyIChTRUMxIFBFTSwgYnAyNTZyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQMjU2UjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19icDI1Nl9wcnYucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzEzIChTRUMxIFBFTSwgYnAzODRyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19icDM4NF9wcnYucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzE0IChTRUMxIFBFTSwgYnA1MTJyMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRAorcGtfcGFyc2Vfa2V5ZmlsZV9lYzoiZGF0YV9maWxlcy9lY19icDUxMl9wcnYucGVtIjoiTlVMTCI6MAorCitQYXJzZSBFQyBLZXkgIzE1IChTRUMxIERFUiwgc2VjcDI1NmsxLCBTcGVjaWZpZWRFQ0RvbWFpbikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZLMV9FTkFCTEVEOk1CRURUTFNfUEtfUEFSU0VfRUNfRVhURU5ERUQKK3BrX3BhcnNlX2tleWZpbGVfZWM6ImRhdGFfZmlsZXMvZWNfcHJ2LnNwZWNkb20uZGVyIjoiTlVMTCI6MAorCitLZXkgQVNOMSAoSW5jb3JyZWN0IGZpcnN0IHRhZykKK3BrX3BhcnNlX2tleV9yc2E6IiI6IiI6TUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUCisKK0tleSBBU04xIChSU0FQcml2YXRlS2V5LCBpbmNvcnJlY3QgdmVyc2lvbiB0YWcpCitwa19wYXJzZV9rZXlfcnNhOiIzMDAxMDAiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitLZXkgQVNOMSAoUlNBUHJpdmF0ZUtleSwgdmVyc2lvbiB0YWcgbWlzc2luZykKK3BrX3BhcnNlX2tleV9yc2E6IjMwMDAiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitLZXkgQVNOMSAoUlNBUHJpdmF0ZUtleSwgaW52YWxpZCB2ZXJzaW9uKQorcGtfcGFyc2Vfa2V5X3JzYToiMzAwMzAyMDEwMSI6IiI6TUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUCisKK0tleSBBU04xIChSU0FQcml2YXRlS2V5LCBjb3JyZWN0IHZlcnNpb24sIGluY29ycmVjdCB0YWcpCitwa19wYXJzZV9rZXlfcnNhOiIzMDA0MDIwMTAwMDAiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVAorCitLZXkgQVNOMSAoUlNBUHJpdmF0ZUtleSwgdmFsdWVzIHByZXNlbnQsIGxlbmd0aCBtaXNtYXRjaCkKK3BrX3BhcnNlX2tleV9yc2E6IjMwMWMwMjAxMDAwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMCI6IiI6TUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUCisKK0tleSBBU04xIChSU0FQcml2YXRlS2V5LCB2YWx1ZXMgcHJlc2VudCwgY2hlY2tfcHJpdmtleSBmYWlscykKK3BrX3BhcnNlX2tleV9yc2E6IjMwMWIwMjAxMDAwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEwMjAxMDEiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrcGFyc2UuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtwYXJzZS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFhNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrcGFyc2UuZnVuY3Rpb24KQEAgLTAsMCArMSwxNDEgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19CSUdOVU1fQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfRlNfSU8gKi8KK3ZvaWQgcGtfcGFyc2Vfa2V5ZmlsZV9yc2EoIGNoYXIgKmtleV9maWxlLCBjaGFyICpwYXNzd29yZCwgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IGN0eDsKKyAgICBpbnQgcmVzOworICAgIGNoYXIgKnB3ZCA9IHBhc3N3b3JkOworCisgICAgbWJlZHRsc19wa19pbml0KCAmY3R4ICk7CisKKyAgICBpZiggc3RyY21wKCBwd2QsICJOVUxMIiApID09IDAgKQorICAgICAgICBwd2QgPSBOVUxMOworCisgICAgcmVzID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmY3R4LCBrZXlfZmlsZSwgcHdkICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID09IHJlc3VsdCApOworCisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfY2FuX2RvKCAmY3R4LCBNQkVEVExTX1BLX1JTQSApICk7CisgICAgICAgIHJzYSA9IG1iZWR0bHNfcGtfcnNhKCBjdHggKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoIHJzYSApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19wa19mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX0ZTX0lPICovCit2b2lkIHBrX3BhcnNlX3B1YmxpY19rZXlmaWxlX3JzYSggY2hhciAqa2V5X2ZpbGUsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBjdHg7CisgICAgaW50IHJlczsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJmN0eCApOworCisgICAgcmVzID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJmN0eCwga2V5X2ZpbGUgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gcmVzdWx0ICk7CisKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19yc2FfY29udGV4dCAqcnNhOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19jYW5fZG8oICZjdHgsIE1CRURUTFNfUEtfUlNBICkgKTsKKyAgICAgICAgcnNhID0gbWJlZHRsc19wa19yc2EoIGN0eCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCByc2EgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19FQ1BfQyAqLwordm9pZCBwa19wYXJzZV9wdWJsaWNfa2V5ZmlsZV9lYyggY2hhciAqa2V5X2ZpbGUsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBjdHg7CisgICAgaW50IHJlczsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJmN0eCApOworCisgICAgcmVzID0gbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJmN0eCwga2V5X2ZpbGUgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gcmVzdWx0ICk7CisKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNrZXk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2Nhbl9kbyggJmN0eCwgTUJFRFRMU19QS19FQ0tFWSApICk7CisgICAgICAgIGVja2V5ID0gbWJlZHRsc19wa19lYyggY3R4ICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wdWJrZXkoICZlY2tleS0+Z3JwLCAmZWNrZXktPlEgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfcGtfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19FQ1BfQyAqLwordm9pZCBwa19wYXJzZV9rZXlmaWxlX2VjKCBjaGFyICprZXlfZmlsZSwgY2hhciAqcGFzc3dvcmQsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBjdHg7CisgICAgaW50IHJlczsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJmN0eCApOworCisgICAgcmVzID0gbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmY3R4LCBrZXlfZmlsZSwgcGFzc3dvcmQgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgPT0gcmVzdWx0ICk7CisKKyAgICBpZiggcmVzID09IDAgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpciAqZWNrZXk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX2Nhbl9kbyggJmN0eCwgTUJFRFRMU19QS19FQ0tFWSApICk7CisgICAgICAgIGVja2V5ID0gbWJlZHRsc19wa19lYyggY3R4ICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2VjcF9jaGVja19wcml2a2V5KCAmZWNrZXktPmdycCwgJmVja2V5LT5kICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DICovCit2b2lkIHBrX3BhcnNlX2tleV9yc2EoIGNoYXIgKmtleV9kYXRhLCBjaGFyICpyZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgdW5zaWduZWQgY2hhciBidWZbMjAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjAwMF07CisgICAgaW50IGRhdGFfbGVuOworICAgICgodm9pZCkgcmVzdWx0X3N0cik7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZwayApOworCisgICAgbWVtc2V0KCBidWYsIDAsIDIwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMCwgMjAwMCApOworCisgICAgZGF0YV9sZW4gPSB1bmhleGlmeSggYnVmLCBrZXlfZGF0YSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2Vfa2V5KCAmcGssIGJ1ZiwgZGF0YV9sZW4sIE5VTEwsIDAgKSA9PSAoIHJlc3VsdCApICk7CisgICAgaWYoICggcmVzdWx0ICkgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggMSApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3dyaXRlLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGt3cml0ZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmYxNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGt3cml0ZS5kYXRhCkBAIC0wLDAgKzEsMzkgQEAKK1B1YmxpYyBrZXkgd3JpdGUgY2hlY2sgUlNBCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19CQVNFNjRfQworcGtfd3JpdGVfcHVia2V5X2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEucHVia2V5IgorCitQdWJsaWMga2V5IHdyaXRlIGNoZWNrIFJTQSA0MDk2CitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19CQVNFNjRfQworcGtfd3JpdGVfcHVia2V5X2NoZWNrOiJkYXRhX2ZpbGVzL3JzYTQwOTZfcHViLnBlbSIKKworUHVibGljIGtleSB3cml0ZSBjaGVjayBFQyAxOTIgYml0cworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK3BrX3dyaXRlX3B1YmtleV9jaGVjazoiZGF0YV9maWxlcy9lY19wdWIucGVtIgorCitQdWJsaWMga2V5IHdyaXRlIGNoZWNrIEVDIDUyMSBiaXRzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19CQVNFNjRfQzpNQkVEVExTX0VDUF9EUF9TRUNQNTIxUjFfRU5BQkxFRAorcGtfd3JpdGVfcHVia2V5X2NoZWNrOiJkYXRhX2ZpbGVzL2VjXzUyMV9wdWIucGVtIgorCitQdWJsaWMga2V5IHdyaXRlIGNoZWNrIEVDIEJyYWlucG9vbCA1MTIgYml0cworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECitwa193cml0ZV9wdWJrZXlfY2hlY2s6ImRhdGFfZmlsZXMvZWNfYnA1MTJfcHViLnBlbSIKKworUHJpdmF0ZSBrZXkgd3JpdGUgY2hlY2sgUlNBCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19CQVNFNjRfQworcGtfd3JpdGVfa2V5X2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IgorCitQcml2YXRlIGtleSB3cml0ZSBjaGVjayBSU0EgNDA5NgorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfQkFTRTY0X0MKK3BrX3dyaXRlX2tleV9jaGVjazoiZGF0YV9maWxlcy9yc2E0MDk2X3Bydi5wZW0iCisKK1ByaXZhdGUga2V5IHdyaXRlIGNoZWNrIEVDIDE5MiBiaXRzCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19CQVNFNjRfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRAorcGtfd3JpdGVfa2V5X2NoZWNrOiJkYXRhX2ZpbGVzL2VjX3Bydi5zZWMxLnBlbSIKKworUHJpdmF0ZSBrZXkgd3JpdGUgY2hlY2sgRUMgNTIxIGJpdHMKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0JBU0U2NF9DOk1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMV9FTkFCTEVECitwa193cml0ZV9rZXlfY2hlY2s6ImRhdGFfZmlsZXMvZWNfNTIxX3Bydi5wZW0iCisKK1ByaXZhdGUga2V5IHdyaXRlIGNoZWNrIEVDIEJyYWlucG9vbCA1MTIgYml0cworZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfQkFTRTY0X0M6TUJFRFRMU19FQ1BfRFBfQlA1MTJSMV9FTkFCTEVECitwa193cml0ZV9rZXlfY2hlY2s6ImRhdGFfZmlsZXMvZWNfYnA1MTJfcHJ2LnBlbSIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3dyaXRlLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3Brd3JpdGUuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyMDY0MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa3dyaXRlLmZ1bmN0aW9uCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvcGsuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1BLX1dSSVRFX0M6TUJFRFRMU19CSUdOVU1fQzpNQkVEVExTX0ZTX0lPCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUEVNX1dSSVRFX0MgKi8KK3ZvaWQgcGtfd3JpdGVfcHVia2V5X2NoZWNrKCBjaGFyICprZXlfZmlsZSApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IGtleTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGNoZWNrX2J1Zls1MDAwXTsKKyAgICBpbnQgcmV0OworICAgIEZJTEUgKmY7CisgICAgc2l6ZV90IGlsZW47CisKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgIG1lbXNldCggY2hlY2tfYnVmLCAwLCBzaXplb2YoIGNoZWNrX2J1ZiApICk7CisKKyAgICBtYmVkdGxzX3BrX2luaXQoICZrZXkgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19wYXJzZV9wdWJsaWNfa2V5ZmlsZSggJmtleSwga2V5X2ZpbGUgKSA9PSAwICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3BrX3dyaXRlX3B1YmtleV9wZW0oICZrZXksIGJ1Ziwgc2l6ZW9mKCBidWYgKSk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CisKKyAgICBmID0gZm9wZW4oIGtleV9maWxlLCAiciIgKTsKKyAgICBURVNUX0FTU0VSVCggZiAhPSBOVUxMICk7CisgICAgaWxlbiA9IGZyZWFkKCBjaGVja19idWYsIDEsIHNpemVvZiggY2hlY2tfYnVmICksIGYgKTsKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBpbGVuID09IHN0cmxlbiggKGNoYXIgKikgYnVmICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCAoY2hhciAqKSBidWYsIChjaGFyICopIGNoZWNrX2J1ZiwgaWxlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZrZXkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1BFTV9XUklURV9DICovCit2b2lkIHBrX3dyaXRlX2tleV9jaGVjayggY2hhciAqa2V5X2ZpbGUgKQoreworICAgIG1iZWR0bHNfcGtfY29udGV4dCBrZXk7CisgICAgdW5zaWduZWQgY2hhciBidWZbNTAwMF07CisgICAgdW5zaWduZWQgY2hhciBjaGVja19idWZbNTAwMF07CisgICAgaW50IHJldDsKKyAgICBGSUxFICpmOworICAgIHNpemVfdCBpbGVuOworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICBtZW1zZXQoIGNoZWNrX2J1ZiwgMCwgc2l6ZW9mKCBjaGVja19idWYgKSApOworCisgICAgbWJlZHRsc19wa19pbml0KCAma2V5ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSggJmtleSwga2V5X2ZpbGUsIE5VTEwgKSA9PSAwICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3BrX3dyaXRlX2tleV9wZW0oICZrZXksIGJ1Ziwgc2l6ZW9mKCBidWYgKSk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CisKKyAgICBmID0gZm9wZW4oIGtleV9maWxlLCAiciIgKTsKKyAgICBURVNUX0FTU0VSVCggZiAhPSBOVUxMICk7CisgICAgaWxlbiA9IGZyZWFkKCBjaGVja19idWYsIDEsIHNpemVvZiggY2hlY2tfYnVmICksIGYgKTsKKyAgICBmY2xvc2UoIGYgKTsKKworICAgIFRFU1RfQVNTRVJUKCBpbGVuID09IHN0cmxlbiggKGNoYXIgKikgYnVmICkgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCAoY2hhciAqKSBidWYsIChjaGFyICopIGNoZWNrX2J1ZiwgaWxlbiApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZrZXkgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmRhdGEgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxNjg4MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9yc2EuZGF0YQpAQCAtMCwwICsxLDM3MiBAQAorUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiZDYyNDhjM2U5NmIxYTdlNWZlYTk3ODg3MGZjYzRjOTc4NmI0ZTUxNTZlMTZiN2ZhZWY0NTU3ZDY2N2Y3MzBiOGJjNGM3ODRlZjAwYzYyNGRmNTMwOTUxM2MzYTVkZThjYTk0YzIxNTJlMDQ1OTYxODY2NmQzMTQ4MDkyNTYyZWJjMjU2ZmZjYTQ1YjI3ZmQyZDYzYzY4YmQ1ZTBhMGFlZmJlNDk2ZTllNjM4MzhhMzYxYjFkYjZmYzI3MjQ2NGYxOTE0OTBiZjljMDI5NjQzYzQ5ZDJkOWNkMDg4MzNiOGE3MGI0YjM0MzFmNTZmYjFlYjU1Y2NkMzllNzdhOWM5MiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiMzIwM2I3NjQ3ZmI3ZTM0NWFhNDU3NjgxZTUxMzE3NzdmMWFkYzM3MWYyZmJhODUzNDkyOGM0ZTUyZWY2MjA2YTg1NjQyNWQ2MjY5MzUyZWNiZjY0ZGIyZjZhZDgyMzk3NzY4Y2FmZGQ4Y2QyNzJlNTEyZDYxN2FkNjc5OTIyMjZkYTZiYzI5MWMzMTQwNGMxN2ZkNGI3ZTJiZWIyMGVmZjI4NGE0NGY0ZDdhZjQ3ZmQ2NjI5ZTJjOTU4MDlmYTdmMjI0MWEwNGY3MGFjNzBkMzI3MWJiMTMyNThhZjFlZDVjNTk4OGM5NWRmN2ZhMjY2MDM1MTU3OTEwNzVmZWNjZCI6TUJFRFRMU19FUlJfUlNBX1ZFUklGWV9GQUlMRUQKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMjA2ZWY0YmYzOTZjNjA4N2Y4MjI5ZWYxOTZmZDM1ZjM3Y2NiOGRlNWVmY2RiMjM4ZjIwZDU1NjY2OGYxMTQyNTdhMTFmYmUwMzg0NjRhNjc4MzAzNzhlNjJhZTk3OTE0NTM5NTNkYWMxZGJkNzkyMTgzN2JhOThlODRlODU2ZWI4MGVkOTQ4N2U2NTZkMGIyMGMyOGM4YmE1ZTM1ZGIxYWJiZWQ4M2VkMWM3NzIwYTk3NzAxZjcwOWUzNTQ3YTRiZmNhYmNhOWM4OWM1N2FkMTVjMzk5NjU3N2EwYWUzNmQ3YzdiNjk5MDM1MjQyZjM3OTU0NjQ2YzFjZDVjMDhhYyI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIzIjoiNWFiYzAxZjVkZTI1YjcwODY3ZmYwYzI0ZTIyMmM2MWY1M2M4OGRhZjQyNTg2ZmRkY2Q1NmYzYzQ1ODhmMDc0YmUzYzMyODA1NmMwNjMzODg2ODhiNjM4NWE4MTY3OTU3YzZlNTM1NWE1MTBlMDA1YjhhODUxZDY5Yzk2YjM2ZWM2MDM2NjQ0MDc4MjEwZTVkN2QzMjZmOTYzNjVlZTA2NDg4ODI5MjE0OTJiYzdiNzUzZWI5YzI2Y2RiYWIzNzU1NWYyMTBkZjJjYTZmZWMxYjI1YjQ2M2QzOGI4MWMwZGNlYTIwMjAyMmIwNGFmNWRhNThhYTAzZDc3YmU5NDliNyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIyMDZlZjRiZjM5NmM2MDg3ZjgyMjllZjE5NmZkMzVmMzdjY2I4ZGU1ZWZjZGIyMzhmMjBkNTU2NjY4ZjExNDI1N2ExMWZiZTAzODQ2NGE2NzgzMDM3OGU2MmFlOTc5MTQ1Mzk1M2RhYzFkYmQ3OTIxODM3YmE5OGU4NGU4NTZlYjgwZWQ5NDg3ZTY1NmQwYjIwYzI4YzhiYTVlMzVkYjFhYmJlZDgzZWQxYzc3MjBhOTc3MDFmNzA5ZTM1NDdhNGJmY2FiY2E5Yzg5YzU3YWQxNWMzOTk2NTc3YTBhZTM2ZDdjN2I2OTkwMzUyNDJmMzc5NTQ2NDZjMWNkNWMwOGFjIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTE6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiI1YWJjMDFmNWRlMjViNzA4NjdmZjBjMjRlMjIyYzYxZjUzYzg4ZGFmNDI1ODZmZGRjZDU2ZjNjNDU4OGYwNzRiZTNjMzI4MDU2YzA2MzM4ODY4OGI2Mzg1YTgxNjc5NTdjNmU1MzU1YTUxMGUwMDViOGE4NTFkNjljOTZiMzZlYzYwMzY2NDQwNzgyMTBlNWQ3ZDMyNmY5NjM2NWVlMDY0ODg4MjkyMTQ5MmJjN2I3NTNlYjljMjZjZGJhYjM3NTU1ZjIxMGRmMmNhNmZlYzFiMjViNDYzZDM4YjgxYzBkY2VhMjAyMDIyYjA0YWY1ZGE1OGFhMDNkNzdiZTk0OWI3IjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiODY3YWMyNmUxMWExM2I3YWMzNGE0MmExZTE3NzY0ODY5Mjg2MTIyNmVmZmI1NWJiNTk3ZmJkZTEwZjI5OWJmN2ZmZmQ2ZmM4ZGRiMmE0NmE3M2I5N2I2NzM4N2E0NjFiMjNlMWQ2NWRjMTE5MzY2Mjg2OTc5YWRkNjE1YjkyNmI5MjcyODMyZmMwYzA1OGI5NDZmYzc1MmRjZmZjZWNhMTIyMzNmNGM2M2Y3ODk3Y2JhYTA4YWE3ZTA3Y2YwMmI1ZTdlM2U1ZWNlMjUyYmYyZmU2MWQxNjNiY2U4NGMwZTAzNjg0NTRhOThlOWZkZWJmNmVkYmQ3MGIyOTBkNTQ5YiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyMjQ6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiIzYmI3YjFjNWYzMzkxZGU0NTQ5ZTJlOTZmZDMzYWZhNGQ2NDdkZDkwZTMyMWQ5ZDU3NmYzODA4ZTMyMjEzZTk0OGI2OTdlZjRmZDJkZDEyOTIzZGU2ZWMzZmZkNjI1MDc4YTU3Zjg2YWYzOGRjMDcwNTJiYjUwNTQ3YzYxNmVkNTFmYTEzNTJiM2FiNjY3ODg0MDgxNjhkMjEyNjNlZjJkMzM4OGQ1NjdkMmNlOGNmNjc0ZjQ1NDkxYWIyYjAzMTlkNDdiZTEyNjZiZGEzOWUzNDNiMmEzOGVhMmQ2YWFhZWU2YzQ0NjVhZWUxZDdiYjMzZTkzYTFjNDBhOGUzYWU0IjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICM1CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiY2Q4MTBlOTdkYzIxMDk1ZWE3YTAyMzgwMjdhN2JhZmQzNDNlMDE0NDQ3ODVlYTkxODRhNDRhNzlmODA0MzhjNDFmYzBiNTdhYTk1NjkzNDA3ZGEzOGZlNWZmMGVjMTM5OGUwMzM2MWU1MWEzZGJlMTM0Yjk5Y2NhMmRmMGNlZjFjNDQ0Y2E1NGQyYjdkYjI3ODk0NTViNmJiNDE5MThjMjQwMDFmZDgyZmMyMGVlMDg5ZGUzZjM0ZjA1MzY5OWMxYzVmNzk1NGNlMGFhYWJiOWQyNmZjZTM5ZDAzMjg5NDE1MjIyOWQ5OGNmNjRlY2FmYzcwODk1MzAwNzNjNjFkOSI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyNTY6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiI3YjVmYmE3MGVjNWI1MjE2MzhmMTgyYmNhYjM5Y2VjMzBiNzZlN2JjMDE3YmRiZDEwNTk2NThhOWExZGIwOTY5YWI0ODJkY2UzMmYzZTk4NjU5NTJmMGEwZGUwOTc4MjcyYzk1MWUzYzAxNTMyOGVhMzc1OGY0NzAyOWEzNzlhYjQyMDA1NTBmYmE1OGYxMWQ1MTI2NDg3ODQwNmZjNzE3ZDVmN2I3MmIzNTgyOTQ2ZjE2YTdlNTMxNGEyMjA4ODFmYzgyMGY3ZDI5OTQ5NzEwMjczNDIxNTMzZDhhYzBhNDQ5ZGM2ZDBmZDFhMjFjMjI0NDRlZGQxYzBkNWI0NGQzIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNDQ2MzdkM2I4ZGU1MjVmZDU4OTIzN2JjODEyMjljODk2NmQzYWYyNDU0MDg1MGMyNDAzNjMzMGRiODAwN2U2ZDE5YTE5NDg2MDE4YjJiMDIwNzRkYTU5MGFhYmE5ZDJjODg0OGMwYTJkMWI2ZGU0ZGZhZjI0MDI1YjYzOTNkZjkyMjgwMDhmODNmMTNjYzc2YTY3Y2ZiZWQ3N2E2ZTM0MjkzNDI4MjRhMGI2YTliOGRkODg0MDk0YWNjNmE1NGJiYzhjODgyOTkzMGM1MmZlMzljZTVlMGRjZDAyZDk1NTNlZjg5OWQyNmViNmNhZTA5NDBiNjM1ODRlMmRhZWIzYiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiIzOGZjNGY2ZjA0MzBiYjNlYTlmNDcwYTRjMGY1Y2ViZGFiYWM0ZGJlYjNiOWM5OWQ0MTY4ZTdiMDBmNWViMjk0ZWMwZWNlMTkwOGVkZWQxZjNlMTRmMWU2OWQxMGY5ZmViNDI1YmRhMGM5OThhZjk0NWVmODY0Mjk4YTYwYTY3NWYwYmI1YzU0MGE3YmUzZjUzNGQ1ZmFkZGZmOTc0ZWVhOGJmZmUxODJhNDRlMmVlMWY0ZjY1M2U3MTk2N2ExMTg2OWVlMWE4NTBlZGIwM2NiNDRhMzQwMzc4Y2I3YTFiYzk2MTZkMzY0OWI3ODAwMmIzOTBhMDVhN2U1NGVkZWM2IjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiZDAzZjEyMjc2ZjZiYTc1NDViOGZjZTcxOTQ3MWJkMjUzNzkxODc4ODA5Njk0ZTg3NTRmM2IzODlmMjZjOTI1M2E3NThlZDI4YjRjNjI1MzVhOGQ1NzAyZDdhNzc4NzMxZDU3NTlmZjJiM2IzOWIxOTJkYjY4MGU3OTE2MzI5MThiNjA5M2MwZThjYTI1YzJiZjc1NmEwN2ZkZTQxNDRhMzdmNzY5ZmU0MDU0NDU1YTQ1Y2I4Y2VmZTQ0NjJlN2E5YTQ1Y2U3MWYyMTg5YjRmZWYwMWI0N2FlZTg1ODVkNDRkYzlkNmZhNjI3YTNlNWYwODgwMTg3MTczMWYyMzRjZCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiJkOTNhODc4YzFjZTg2NTcxNTkwYjBlNDM3OTRiM2VkYjIzNTUyNzk3YzRiOGM5ZTNkYTRmZTFjYzRhYzA1NjZhY2QzYjEwNTQxZmU5YTdhNzlmNWVhNDg5MmQzMDY5Y2E2OTAzZWZiNWM0MGM0N2ViOGE5Yzc4MWViNDI0OTI4MWQ0MGMzZDk2YWFlMTZkYTFiYjRkYWFlY2U2YTI2ZWNhNWY0MWMwNjJiNDEyNGE2NGZjOWQzNDBjYmE1YWIwZDFmNWFmZmZmNjUxNWE4N2YwOTMzNzc0ZmQ0MzIyZDJmYTQ5N2NkNmY3MDhhNDI5Y2E1NmRjYjFmZDNkYjYyM2QwIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICM4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiYjJmMmU2ZTA5ZmQxOWIwYThjMDY0NDc1NTRkNmEyMzZjNjllMmIzMzQwMTc0ODg4ODFkOGMwMmFiODFkNzRjYWUwYzY0ZWZkNTBhMzc0OTk4ZWVlYzE2MjY1MTk3NWU2MzdjYjJiYTU5NDI1MGM3NTBhNDk0MzI1M2YxZGIwNjEzZTRjZTFkNTBmOGUzZTk2OGEyYTgzYmQ2Y2I5NzQ1NWFiMmNjYzc3MDcxMDc2YjNlMjExZmZiMjUxYmQ0YzFhNzM4Yjg4YjIwMjFjNjFjNzI3YzA3NGNlOTMzYzA1NGFjYmNiZjRmMGMzNjJlYzA5YWYzOGRlMTkxNjg2YWViZSI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjMiOiJhODUzZTY3ZjkyODI4MWQxMTUwNmM5ZDM5ZTVlYTliMmQ3NDI3ODJjNjYzYzM3ZDBhN2M5ZTlmZTE1Mzc5Y2RlMWU3NWQ5NGFkYmZiMWNhMDg2OTFmMzIwYWY0ZmYyYjBhMjlhNGQyZWExMGEyMGNiOTVkODVmM2RhYmFjM2Q1NmNjYTkwMzljODUxZDAxODE0MDhjMDBiMzg1ZmM4MmNhZmE0Y2ZhNzM4MGQwYzJjMDI0ZmI4M2ZlYzU5ZDVlZTU5MWQ2MzgwNmRjYjE4YjIxZWE0NDBjM2QzZjEyYzFlNzc5NWViMTViN2NlNGM0YjI4OGQ2NDZjZjFkMzRiZGYxIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICM5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjY0NzU4NmJhNTg3YjA5YWE1NTVkMWI4ZGE0Y2RmNWM2ZTc3N2UwODg1OTM3OWNhNDU3ODkwMTlmMjA0MWU3MDhkOTdjNDQwOGQ0ZDY5NDNiMTFkZDdlYmUwNWM2YjQ4YTliNWYxYjAwNzk0NTJjYzQ4NDU3OWFjZmE2NmEzNGMwY2YzZjBlNzMzOWIyZGJkNWYxMzM5ZWY3OTM3YTgyNjE1NDc3MDVhODQ2ODg1YzQzZDhlZjEzOWE5YzgzZjU2MDRlYTUyYjIzMTE3NmE4MjFmYjQ4YzQ1ZWQ0NTIyNmYzMWJhN2U4YTk0YTY5ZjZjNjVjMzliNzI3OGJmM2YwOGYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMToxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMTAwMDEiOiJlMjdhOTBiNjQ0YzNhMTFmMjM0MTMyZDY3MjdhZGEzOTc3NzRjZDdmZGY1ZWIwMTYwYTY2NWZmY2NlZGFiYjhhZTllMzU3OTY2OTM5YTcxYzk3M2U3NWU1ZmY3NzFmYjAxYTY0ODNmY2FmODJmMTZkZWU2NWU2ODI2MTIxZTJhZTljNjlkMmM5MjM4N2IzM2E2NDFmMzk3Njc2Nzc2Y2RlNTAxZTczMTRhOWE0ZTc2YzBmNDUzOGVkZWVhMTYzZThkZTdiZDIxYzkzYzI5OGRmNzQ4YzZmNWMyNmI3ZDAzYmZhMzY3MWYyYTc0ODhmZTMxMTMwOWU4MjE4YTcxMTcxIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1NTAxM2E0ODllMDliNjU1MzI2MmFhYjU5ZmIwNDFiNDk0MzdiODZkNTI4NzZmOGU1ZDVlNDA1Yjc3Y2EwZmY2Y2U4ZWEyZGQ3NWM3YjNiNDExY2Y0NDQ1ZDU2MjMzYzViMGZmMGU1OGM0OTEyOGQ4MWI0ZmVkZDI5NWUxNzJkMjI1YzQ1MWUxM2RlZmIzNGI4N2I3YWVhNmQ2ZjBkMjBmNWM1NWZlYjcxZDJhNzg5ZmEzMWYzZDlmZjQ3ODk2YWRjMTZiZWM1Y2UwYzlkZGEzZmRlMTkwZTA4Y2EyNDUxYzAxZmYzMDkxNDQ5ODg3Njk1Zjk2ZGFjOTdhZDZhMzBlIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTE6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjEwMDAxIjoiZGQ4MmI3YmU3OTFjNDU0ZmJiZjZmMWRlNDdjYmU1ODVhNjg3ZTRlOGJiYWUwYjZlMmE3N2Y4Y2E0ZWZkMDZkNzE0OThmOWE3NGI5MzFiZDU5YzM3N2U3MWRhZjcwOGE2MjRjNTEzMDNmMzc3MDA2YzY3NjQ4N2JhZDU3ZjcwNjdiMDliN2JiOTRhNjE4OTExOWFiOGNmNzMyMWMzMjFiMmRjN2RmNTY1YmZiZWM4MzNhMjhiODY2MjVmYjVmZDZhMDM1ZDRlZDc5ZmYwZjlhZWU5ZmE3ODkzNWVlYzY1MDY5NDM5ZWU0NDlkN2Y1MjQ5Y2RhZTZmZGQ2ZDhjMmE2MyI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiJmNGE5OTBiOGQ0MzRhNTkxNDM0MGMwY2EzY2E0ZTRhNzA4NTZjNTVlMTNlOTM4YzFmODU0ZTkxY2RlZjU0YzYxMDdkNmQ2ODJhNjJlNmMxZmYxMmIxYzYxNzhlZTBiMjZiNWQ4YWU1ZWU0MDQzZGI0MTUxNDY1NzI3ZjMxM2U5ZTE3NGQ3YzY5NjFhYmU5Y2I4NmEyMTM2N2E4OWU0MWI0NzI2N2FjNWVmM2E2ZWNlYWFjYTViMTlhZTc1NmIzOTA0Yjk3ZWMzNWFlYjQwNGRjMmEyZDBkYTM3M2JhNzA5YTY3OGQyNzI4ZTdkNzJkYWFlNjhkMzM1Y2JmNmM5NTdkIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTIyNDoxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMTAwMDEiOiJkOGVmN2JkYzBmMTExYjEyNDlkNWFkNjUxNWI2ZmUzN2YyZmYzMjdmNDkzODMyZjEzODVjMTBlOTc1YzA3YjAyNjY0OTc3MTZmY2I4NGY1MDM5Y2Q2MGY1YTA1MDYxNGZkZTI3ZjM1NGE2YzQ1ZThhN2Q3NGY5ODIxZTJmMzAxNTAwYWMxOTUzZmVhZmViOWQ5OGNmODhkMmM5Mjg0MTNmMzM3ODEzMTM1YzY2YWJmYzNkYzdhNGQ4MDY1NWQ5MjViZjk2ZjIxODcyY2EyYjNhMjY4NGI5NzZjYTc2OGZlMzdmZWFlMjBhNjllZWVjM2NjOGYxZGUwZGIzNGIzNDYyIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImM4MWYwNGM3OTk4Mjk3MWZhMTc2ZDY0ZThmN2Y4ODEyZjg2YTk0YzQ5ZTg0NjcyZmYxMDk5NmEyZDZkZmM0NDRhODg0YzdhODdjNDYwNmExYWFiMjI1NTg4OTRlZTU5Yjc5OGI0NTc4MjdmNWVlMGIwY2FkY2Q5NDM3MTkwMmNjNGRkYWY5N2FjZWZlZDY0MTk5NzcxN2JjYjNjYzc0Y2Q0NDBmMGEzMWUyMGZiOTU4MTJjZWNiNzQwYzM2ZDZkMWJmMDdlMzY0MTUxNGNmYTY3OGFmZjJhMzk1NjJmZjRkNjBlMDJiMTc1ODNhOTJiZjBjNTZkNjZiZGU5ZTA5ZjgiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjEwMjQ6MTY6ImUyOGExMzU0ODUyNWU1ZjM2ZGNjYjI0ZWNiN2NjMzMyY2M2ODlkZmQ2NDAxMjYwNGM5Yzc4MTZkNzJhMTZjM2Y1ZmNkYzBlODZlN2MwMzI4MGIxYzY5YjU4NmNlMGNkOGFlYzcyMmNjNzNhNWQzYjczMDMxMGJmN2RmZWJkYzc3Y2U1ZDk0YmJjMzY5ZGMxOGEyZjdiMDdiZDUwNWFiMGY4MjIyNGFlZjA5ZmRjMWU1MDYzMjM0MjU1ZTBiM2M0MGE1MmU5ZThhZTYwODk4ZWI4OGE3NjZiZGQ3ODhmZTk0OTNkOGZkODZiY2RkMjg4NGQ1YzA2MjE2YzY1NDY5ZTUiOjE2OiIxMDAwMSI6IjUyMTExZjQ3OThkYTNjMTFiM2M3NDM5NDM1ODM0OGFiMGZjNzk3YmRlOTkwODBmMjM4ZDMzYTY5YjA0YjA4YWMyYmQ3NjdiMzM4NzI0NzM5NDNlMjNhZjI3Y2EzMmZkNTY4YTQzYThjN2Q2Y2M1NWI0ZmJiMzgwMjEyZmRmY2I2MDQ4N2UyMDY5NGQ0Mjg3ZTIzM2VmZGY3YjA0NzM3YzAwMzdhNTkyZDAzMDc3ODAxODI4YjA1MTk5OGM0MmI5ZjllMjQyMDA2MzMzMWQ1YjIzNDk5MThhNjRkOGI2NWIyMWEyMDExZWU3MzE4ZmNlZjQ4YWNlZDk1YjhkZGY1MDEiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzEzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiYTk3ODI0ODcxNzcwYjc5ZGE5NzlhMTExZjZkZWNmYjFkZDExYmQ5NDZjZmE4MDBiMDA4ZjBhZDVhZWE1YWE5MmUyMDVkMjdhNDZjMzFkNGZlNmNiOTA5MDkxYmQyMWYwODJmYjc1MDc0MDAwZWU0NmMyZjNlNTMwZDc3YjM0YzdjNWQ2Zjg0NTMwMjU5NTBkM2UwYWZhZTFmOTc1MjY1NWY1YmJlYTg0MzJlOWYxMDE0MzU3ZmYxMWIwODA3NjE3OWExMDFlNGY5ZDNmMjViZmZiNWU2NTZiZjZhZmU2Yzk3ZDdhYTQ3NDBiNWQ5MjI0Y2RlNGRlZGUwMzVhNzc2OCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTAyNDoxNjoiZTI4YTEzNTQ4NTI1ZTVmMzZkY2NiMjRlY2I3Y2MzMzJjYzY4OWRmZDY0MDEyNjA0YzljNzgxNmQ3MmExNmMzZjVmY2RjMGU4NmU3YzAzMjgwYjFjNjliNTg2Y2UwY2Q4YWVjNzIyY2M3M2E1ZDNiNzMwMzEwYmY3ZGZlYmRjNzdjZTVkOTRiYmMzNjlkYzE4YTJmN2IwN2JkNTA1YWIwZjgyMjI0YWVmMDlmZGMxZTUwNjMyMzQyNTVlMGIzYzQwYTUyZTllOGFlNjA4OThlYjg4YTc2NmJkZDc4OGZlOTQ5M2Q4ZmQ4NmJjZGQyODg0ZDVjMDYyMTZjNjU0NjllNSI6MTY6IjEwMDAxIjoiZDVkY2QyN2M3NGUwNDBlYTg2ZjEwNmI2M2QzMjc1ZmE3YjdlOThkMmRkNzAxZjM4ZWMxNWZjNzMwMWI3MmRmMTI3ZjZkM2JkNTU3MTI1M2EwYjllMGU3MTlkN2Q1MjI4OTM4OTY5NDFhMWFlY2NjNjk3OTEyMjgyYjUzMDhkODI5YjkxOTA1YjVkZDdiN2UxYjhmZTI3ZTJiZDQwMDNiMDlkZmU3ZmUyOTVmOGE0M2MwNzZjMGNiNTJmMmFhYzA2N2U4N2RlN2ZmZTNhMjc1ZDIxYTg3MGMzZGZjOWIxZDA2ZDdmMDE4NjY3ZGU5ZWIxODdiZGY1M2QyODJlNWQ4YiI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTQKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI0Y2U2MTkzMGM3OWRjMDE3YzJkZWEwYzUwODVkNzNhM2IwZTRhNmYzNDFlOWE1MDYxYTY2NThhZjExZTVlZGY5NWJkYWQ5MTVhYzM2MTk5NjllMzliZWUxNTc4OGE4ZGU2NjdmOTJmNGVmYzg0ZjM1MDgyZDUyZDU2MmFhNzRlMTJjYzdmMjJkMzQyNWI1OGY1MDU2ZDc0YWZjZjE2MmNkNDRlNjViOWVlNTEwZmY5MWFmMDk0YzNkMmQ0MmMzYjA4ODUzNmQ2MmE5OGYxYzY4OWVkY2YzZWEzZmMyMjhkNzExYzEwOWQ3NmFlODNkODJkNmEzNGRjZmJhZDU2M2NmIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTUxMjoxMDI0OjE2OiJlMjhhMTM1NDg1MjVlNWYzNmRjY2IyNGVjYjdjYzMzMmNjNjg5ZGZkNjQwMTI2MDRjOWM3ODE2ZDcyYTE2YzNmNWZjZGMwZTg2ZTdjMDMyODBiMWM2OWI1ODZjZTBjZDhhZWM3MjJjYzczYTVkM2I3MzAzMTBiZjdkZmViZGM3N2NlNWQ5NGJiYzM2OWRjMThhMmY3YjA3YmQ1MDVhYjBmODIyMjRhZWYwOWZkYzFlNTA2MzIzNDI1NWUwYjNjNDBhNTJlOWU4YWU2MDg5OGViODhhNzY2YmRkNzg4ZmU5NDkzZDhmZDg2YmNkZDI4ODRkNWMwNjIxNmM2NTQ2OWU1IjoxNjoiMTAwMDEiOiIyNzI4MGI5MmVhYjVjYmYwZDc4N2ZmNmZhNmIwMTUxZDY2MTBhZGZkMjUxMTYxMTNmMmYxODZmM2Y4ZDM5NzM2ZDkxYWU1MTBlYzJiZDk2ZjJkZTEzNWFlZmRhNzkxNzgxMzg2OTZkY2M2ZDMwMmU0YTc5ZGRhYmJlMTZlMzlhYjk2MDc1Nzc2YWZjZTg2M2U4NGEyZTYwMTNjYjQ1N2U0MDQ3ZTIyZDQzZjY3YmY2NGFlNWUxZDg0NGE3YzEyYWM2OTZlZmJiM2NkYTdjMGUwYWNhNzFmOGE3YWRhOWEwNTQ3YmZhZWZlMWJhMmUwNDA1OGM2NzJjODAzNzIwZGQ5IjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIyMjRlY2QzYjYzMDU4MWRhOTQ4MjE2MzY2Yzc0MTAxNWE5NzIzYzVlYTQzZGU2N2UyODQ1NGQwYTg0NmY1NGE2ZGYxNjdhMjVjYzUwMGNmMjFmNzI5YWFlZmVkNmE3MWEzYmRiYTQzOGUxMmUyMGFkMGM0ODM5NmFmZTM4NTY4YjcwYTMxODdmMjYwOThkNmFjNjQ5YTdjN2VhNjhlZDUyNzQ4ZTcxMjUyMjUxMDIyMTYyMzZhMjhmNjc3NTNiMDc3Y2ZkOGQ5MTk4Yjg2YjBiMzMxMDI3Y2I1OWIyNGI4NWZkOTI4OTZlOGYyZmY1YTFkMTE4NzJjMmU2YWY2YWUyIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTE6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMyI6IjFmNzkzOGIyMGE5Y2Q4YmI4Y2EyNmJhZDllNzllYTkyMzczMTc0MjAzZjNhYjIxMmEwNmRlMzRhOWEzZTE0ZTEwMmQxOWE4ODc4YzI4YTJmYzgwODNhOTdjMDZiMTljMWFlNjI2NzgyODlkNWQwNzFhOTA0YWVkMWQzNjQ2NTVkOWUyZDE2NDgwYTZmZDE4ZjRjOGVkZjIwNDg0NGEzNGQ1NzNiMWI5ODhiODJkNDk1Y2FlZmQ5Mjk4YzE2MzUwODNlMTk2YTExZjRhN2RmNmE3ZTNjYzRkYjdiOTY0MmU3NjgyZDIyZWM3MDM4YzNiYWQ3OTFlMTM2NWZlODgzNjk3NjA5MjQ2MGU2ZGY3NDlkYzAzMmJhZjFlMDI2Njg0ZjU1OTM2YmViOTM2OTg0NWM1M2MzZDIxNzk0MWMxZjhkOGY1NGEzMjMzM2E0YzA0OWMzZjJkNTI3MTI1Nzc4MDMyZjVkMzkwMDQwZDFkNGNjZTgzZGMzNTNjZTI1MDE1MiI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTYKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI2ZWNjNzIyZDIzM2RhZDFhY2E0NWU2YmMzZTFhMGI5OWZiMWY4OWMwZWM2M2JjNjU3ZTZhYWFjYmY5MzFmMjY3MTA2Y2ZmNDJiNzEyODE5ZjM0MWIxZWRlNzk4OTY0YTBiMWE1MDMyYzE5OGIzOTExMTFlODhkMGQ3MzAzYzAyZTIzZmEwMTM3ZTc0ZTYwNDU3OWEyODViMmRiYzBhMjNhZWJkZGE2NWMzNzFlYjQwMzEyNWJkMzY2ZTgyMmU3MmRjZWZmZTBkNTVkZmEzMTU1YzE2MjgzMDIwZGM5YWJiMGQxNTBkYTFhZWYyNTE0ODRhYTQ5ZTQ5ZTAwOTc0ZGFjIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTIyNDoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIzIjoiMzM5ZGNlM2ExOTM3NjY5ZDlmYjE0YzRmNjUyMzc4ODYxZmQ1YWRjNGRhODhlYWY4MzNiMTYwMjBiNTVhMjRkZGM4M2I3YWUzMzk1YTlhNDliNDI2YmI5YTQxNzBjYjc2NWIwMjY1MmZhYTk1OTRiNDU3YWVlZmRhZTRmODAyZTkzZDhlNjVjNjg3ZGRjNzIzNzAxNDY1YTVlZjE5MjQ5ZWQ1ZDI2MTdiNTEyMWM1ODU1N2IzNGViOTlhNjYzYmJjZjQ0NTNhNmUxZGI1ZDg4NzIzZGU0NDlmY2Y1OGNhOGVmNTE0ZGFmMDhjZmRjNzFiZTE1NWJiM2QwNzI0ZGYwYzBhNmZkNWFhNzczNzQzM2NjMzc2NjQwYjliOGI0YzdkZGQwOTc3NmJhZTAyNDU3MjljZGRiNTZlMzZmMjhlZGFkNmFlY2FlZDA4MjFlYzhkODQzYTk2MzQ4ZTcyMmJmMGE4NGNmMDYwYTc5M2EyMTc5ZjA1NDEzOGY5MDdkMGMzIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMxNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjcyZjBiMWFlMjdlMWY1ZTViZmExNWRlZDIwNGMyYzU0YjQ3YjI0MjA3NTBhM2ViNTQ3MWY5ZmY5OGI2N2M4YjVmMWEzMGQzZjhkNjQ0ODU2MmUxMmNlNGRlYjMzYTI2Y2ZlZWFlOTkzZDZiZTllMjA2NzlkODcxM2M1MjE2ODcwZjExMjc2ZTVmMjJiMGVhZDI4MjFhN2I0ZGVlMTA2ZmMxZTE5YjEzZmM5ZmJhNWQ2ZTczZTRiZDkzYjY1YTk4ODFhNDNkNWU5N2ViZmIwYjM1N2Q1ZDA2YjIxZGRiZWNkYmIxMDYyNmQ3NzQ4YmI5ZTZlMDdkNDkzMTZiYmYzYzQiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjMiOiI4MTE3YTY4OTdlMTRjMTgzNzM3NjYxY2Y1NzQxMzUwYTg0YWUwMDQ5NWNkOWVlOGZiMDMzNTgyZTU1OWY3OTcwMWFiNDI0NzA2NjYwNTE1ZWU1ODIxYTY5YTY4NTA2NDdlYzY0MTY3NmE2MjVkMWEzODk5OTMyYWFhNTIxNjFmYmMwYzBhODI1ZGI4MmZkZTA1ODViM2M5YjljMTZkZTQzZTI2ZGE2YTMwZmU1YTYwMWRhZTY4YmRlZDFlMjllYzM0NTU3YjVmNjk2MmVmYjEwYjk0NTBkNmYwOTY2NTVmNjhlODQ5OWNmYTE2YTBhZGViOTA3NWU3YjkxODUxZmVmODQyNDMxMzJkMDgyNzNkMzVkMDFhZDg5YzE3ZTFlNmU0ZGVhZjFjYjIzMzA1MGIyNzVmYTlkMmNhZTU3ZTllMWEwZTIzMTM5MjY3MDQwYWEzOWI2YWJkOGYxMGZhMWNlYzM4Y2UyMTgzNTczZGRjMTE2MjZmYzI2MmUxYTBjZWQiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzE4CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiZjgwYzk0YTJiNTM3MzY5NzhhZGYwNDE4ODZhZDk3YWIyYWViOWU5MWMwOGJkNGVlZWY2YjJmMmI4ZGQ3NWE5OWI0NTA2NjU3MTg4YmJkNzU5N2JkNTc1OTEyMTYzMDYyN2M4YmY5Y2MzMGQ5MGRkNDg4YzdhODFjYWJhYjUzNTBhNjJmYTMwYWJmNTUyM2YzMDViOThmMmMyYzE3NDNlYzk4MGNmMjZhYjgyMTliZmQ5NTA1Yjk4MWFiMWFiYmZlZjczM2IzODQ1MTlkNTI1OWZjNWMxNDU3N2NiNmI4OGZhN2Y2ZjMzMmZmNmE2NWIyM2ZhZWNjMjQzNDJjNzhlOSI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMyI6IjZiNDk1NTNlZDk2NGFlMTk2YTQxZWEyODFmNGQyYTI1MGNlN2QxZTc0MzRlNDVjZjZhODJmN2JlZDE3NTU0ZjM5YzNmMDI0MWUwMzY0NzAyZmNiODc0NzVlYjBjMDgzOWZmZDIxODA4OTBmYTA1YjRiYmYzMWJiZmE0YmY1MTE5ZGVhMGM5Zjg4ZTFlOTYxN2ZjZGFkYWJjNmZhMTk0NTEzNmNjNjZlMDM5YjkwNWQ3OGVkMzY1YzU4MDZkMzhhZWM4OGIzZWRmYjg2YzA1ZmY0NDZkYmZkNTFkN2NkNzVjYmY4ZDNiODUxNTRjNzgzNzY1Mzg2ZjUxNjM3NTMyMjIxZjUyNDI5ZGI1NjEyZGNjMDM0OTY4YmI4ZmVhYjdkYzZmNWVkMWYyZmViNTU3ZjZkZDQ5Yzk4MDI5NjExN2JlMmM0MTk1ZWM3YjYxMDFlYTc2N2RmOWQxNmE1NmZjOTcwOWI0OTMwOGE1NGRhYjYzZGJjNGQ2MDlmOTU5Y2UxNyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMTkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI0ZWI5NzA5NGJiNDJhYWE1OGIwNDBiZDA2YThmMzI0Mzk2YjllY2E5ZTM5MzU5YjcwMzljNGEwMTA0MzRlZTEzMWE1M2FlYmQ5ZjdhNTVhZTU4ZWE3NDQ0ZmExNTA1YTNlYzUyNGUwNTRmZDQwODUxM2NkZGMxZWU0YzJmN2ZkOTVlYzRhNmY1OTRiZTFiYTM5ZmExYWE5MzNkYzBhNWRhZmZmNWNlNDQ1MDk1NzdlYmIzYTNlODA4NGM0NDAxMGFhMjczMjFlNWEzZjY0NmFkZTk5MTc1NjMzYjc5NWMwZjU3MGIzNjBlZWViZWVmYWVmMTU3ODhmODBiNWNiZWNkIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTUxMjoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIzIjoiMmI4Yjc5NGE4NjIxZDQ5MmVlYzE4YTRlZmQyMzllMGUwNzdjODkzNDBhMzRiMGZkYmY0NjdmMmJmMzExMmM3ZjMzZDAwZWU3MzZmMjk4OGFmODU2OWMxYTc0ODkxZWZiZWZhODM5ZTI5NWZmZmRmNGQ5MDhjMWVkZTYxYTg2MWE0ZDI0YjE1NGEwOWQxYjNmOTIzZmQyYmI3OTA2OTk0Y2Y4MmE5N2RhMjg1YmY0OGU2MWY5MGNjMzU5NmY5MzUwYWI5YjY2YTIxNmZmY2EzMjMxOTViYjIxM2Y1YTc3ZmU4YzY5NzQ3NTU5NWExODU3ZGJlZTU4MTI4Y2JmMWJlN2NiMjIwMjI5Y2U1Mjc2NmZlZmQ4OGNjMTI5YWQ1Y2JiZGNkMzFmYjRlZWRlNmM0ZmRkMzE5M2E5YWFhYTU0MzYyYmNlYTQwODI5ODFkOWI3YzQwNDgzODE0ODI4ZjMyOTdkOTVhZDkzM2M3NmYzMWM0N2UzN2E5M2ZmYWYwZDRhIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMyMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiJhM2VkYjBmNTJjNjE2NmQ3Yjc2ZTcxNjM0NzYxZjQwMjMzN2MzZTk2Njc1NDlkMDBjZDc4NzdlNjA1NTM5NmIzNWM1NGM0ZGZmYzRjOTg3MDYwMTc4ZmMxMGI3ZTVlODI3YTVjODcwMDU3MDAyYmE2ZWZkMzFmYzRlNjNhNDI5MDI5YmUwZDZiMjU2YjZiNjUzNzc1Y2IwMjYzMjI3NDNmNDhlMzE5ZDA1M2M0YWVhYzM0MDc3YWNiOGUwYzZjMmVmMzc1YjIyMTBmODc4OGJkMjNkMjRlYjBiNjE0ZGU0MTg3NWIxYzhlYzU2YWNmMTg4MjVlYWY4MjY2OTFiZTk2IjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTE6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiIxODA2MzBkMmY0ZGM5MWRkYjExNTk5NzhlMjc4Y2RhN2FjNGIxNzhlODI0NzdmOTc3MGM0ZDJlMWM1MDE3ZDJmMjIyMzQ4NjU4MDQ0YzFiZTRjZGEyNGNlM2M5YmEzZDQyMzUzNmEzOWJmNjAzMjRjMWIzMGVhYmRhZDcwMGIwOTgyZTU4MDcyZjdlMTgyMTZlN2U0YzA3ZTE3Njc0ZWMzZWFiY2ZiYWZjZTMxN2QyZjUzOWYxMjk5MDJkODAwMzFjYTIwMWE4YjMyNTYyOWE5NmNhNGE3MGI1MTI5NGMyZmRkZDFkMGFjYTE1MzdkN2Q4Yjc4MGUxZTYyZDM0YmUyZjk4MTA0ZDg3NmE0OTkwMzk2Yzg2MjhlNjQ5OGQ5NjUxZjQ2OGJkZjExMzk2NjRlYWJlOTE2NmVmYmU5MDliZjg3ZDczMDVkNWY2MGYxYWNjMzU5OWVkMzM5ZmNmNGUwMDlmYmFkNDA1OWFmMWE1MDI2NGNiMGE0ZWMxZDIzZjMiOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzIxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImFjNThmZDAyNDIwOGQ3ZjA0NWQ4MWE1NmNkNTVhYWQ0MGFiODZiMGQyMTZhYjU1MTM2YzcwMjdhY2EyM2VhMTM0ODBhNTJjMGRhY2NlMGQ5ODEzOWIyNTk2NWFhNGZmNzZhNDFkZDkyMDM3MTk1ZDI0YmMwNzUwZDUyY2IzNDY3YjQ4YjdiM2U3MWQ4NTJjNWY4MmJkOWVlODVhODM4OGVhZDVjZDhiYzM4YzNkNDc5MmU4ZGFhOTczNGExMzdkMzE5NjNlMjQ1YWQzMjE3ZmFkMjM1ZjdkZmQ1NTg0ZGUwZmU5MWM0NTI2NTY4NTg4ZTA4YjYwYmRmMWJhZGQ5OWYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMToxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMDAwMSI6ImExNDJiMGQ5NDU2ZjhmNDc3MjY3NTI2NWEwODYxM2E2NmM0MTZiZDFhZTcxMjk3NWM2OWQ5Y2E1ZmI4YzFiZTljMjQzNTlhMDRmZDE1NDYwYmY2MTM2YThhMTFmMTNlM2NlMmRlMjE3MTUyNGYxMGNiNzE1ZjBkNzFlM2RiMTUyODFhYjk5ZWFkYmU4NmNmOGM1YzUxODE2MmM2MzhlZjI3YTRmN2JmYjRhMWEzODczZjNjMzg0YTViMWMzYjQ5NjZjODM3YjlkOGQxOTJhYzM0ZTAzOTQzYjdhZTE5MTM1NWFhMWZmM2I5Y2QwNDFiYjI2NjhmMWY4MWNmMGQwMTViM2QzNjA4Y2Q5YWM3OTM5ODIxMmMwZjEzMmYxYmQ0NWQ0Nzc2OGI5OTlmY2YzYzA1ZmUyMDY5NTkzY2VlY2VkYzg1MWE3ZmM0NjVhYmNmZWYwZmFiYmE5Yjk0NjAxNTNmNmJhODcyM2E1YzZlNzY2YzgzYTQ0NmFlZjNlZTMyNyI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjIKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIwMjdmNzY3OTI4YTU4MjFlMjcyM2Q2ZjM2YzQzZTZiNDk4YjZmMGIzODE4NTI1NzE3OTRhMDk2YmQ0OWYxYzM2YTRkN2JhY2VjN2VjNDAyYzI0Yjk3MDE2MzE2OTE3M2JiOTMwZWM3ZmRjMzliYzk0NTdkZmM0Y2EwNTFmNWYyOGE2NGRlMWJiZTAwN2MyMmU4MzY4ZmY5YjExN2RiZGExN2VmZDJmYjczNDM0YmJiZjVhNDE1OGRmNTY4MTNiOGM5MDRiYjJlNzc5ZGU1MDRkY2Q5NzRhMjkxNTY4MjEwZDZmODU4MTAyOTE2MDZhMWMwY2Q4OGQ1MWNlYWRmOThhIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTIyNDoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMDAwMSI6IjA2NzZlNjRkYWFhMThmNGFmNDZlOWRmYmUyMzRkYjM4OWI4YTUyN2IwZmUxZGI5N2ViN2Y0MDRlMzE1NTIyNmNiYTcwZDMxODgwMGY4MzE2MGZhMWFhMTk5MTZlNWMwOWYwNzkzMzEwNzlmMThjYjhhYjFhNGI4ODRjYjI4NTAxODI0OTc0ZjY4M2VkMmI5YmFiYWU5ZjhjMTViZWEzMDgwMjgwNWM2YjIxNTIxMTk3NjQ4MTFiYmY1ZjM5OTRkMmU5N2ZhMmZlOGM1YWIxNWEyM2MxNGQ3YWU1NmJlMDBlYWE4YmMyNjY3ODQ4MWZmNWJhNTliMGFjZmIwZTQzMzQxYmZmOWZjNjM4ZTU2MjU0ODBhNzNkYmM1ZDhkMTNiZDJiOWU2NDAzN2M2Yjc5ZGYwYzYwODY5OTgwYzZhMjJlYzQ2ZjgwZmI4NTljYjRlZTVkMjAzMmFjMWZlNTM4Y2ZkODVjNzBhN2YzM2I0YWY1MGE5MzM5NTkxN2MyY2ZiNiI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjMKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIwNmRjZDlkNGMwNTZiNmE0NWI5ZWQyYWU1ZjZjMWNmYTQzYWFlMDZmZTAxZWUwOTgyNjRhYTdhODBlOTAxYWJiY2Y5YTUwNWU1NWY5YTM1MmVmMGMwNzhkNDgyNDliODI5OGU1N2VhMjFiZjBlNDIzYzNiZjY5MDAyYWNmYTU0MWNhMDUwMDdjNzA0YmM3OWNlZTdhODBlMTEwN2M3YjI4ZDJiMmFhNmRkMDkzYjI4ZWZlOTY0MjUxOTk1MmE0YTk1ZWU0OTIzNWY5OTI0YTBhYzBhZWU1YjJhMWJjZTQ3NDU5ZDcwY2Q2ZTc1MDc0NjE0MTk5ZGNhNDQ1NjE0MDdjIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTIyNDoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMDAwMSI6IjVlMDhmMzk5MjU4ZTZkZTA3NWI2N2EwYTZhODIyY2ViMjFiMWViN2EwMzQyZWNhNmE0Mjk1NzM5ZjY0NDU0N2RlZTM0NTYyNDNjZjMyYmQ2ZWE2ZjM1N2M4ODYzMjUwODQ1NzEzMGYzZGFlMDRmNzgwNmVmYWVkNDNkMWQ1MDFlMTZjOTYxZGZiZDZjNzFhNDJiNDgwZTk1YzcwMjdmODI3NTA2M2QwNWE5YWFjM2VlZjA1MjA4NjdiOTg5NmViZThlYzM1OGY3ZDEyMWJlYjRlNjFkZGZkYzNkY2Q4MzVkZmUyNjVmMmJhNjhkMzAwZWY1NjZlZDEyODRmOWYzZDdiMWFmMzYzZWQ0N2JmYTJlNWYwNDkyOTI1NDQ0ZGY3ZTVmY2IxZTc5ZTY5MGM3NDYxMTc2NTBiNTQzYTVlODJjMzk1NTM1NTJmMGY0NGU2MTdiNWNmNzczYzUzMzA1MGY0MTI5ZTg5M2FjMjJhZjY5YjFlYjlhZmI0YjViYTVmNSI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIxMjQwMDI4YzZkN2FiMzk5MmFkYTBlNWNhNTVlZTRmM2Q2MmY4ZGU1NzUzMDJkNTg2MWQ3MzY4NTQyM2MyZTZhNmQ2ZmIzYmUwOTBmYmMyYTcwMTgyMWI2ZDhmZDVlODIzM2Y3OTRiNjU0OWNkMGJiNTJiMzkwYWMzMTQ3ODMwN2JmZmE5MWE5YmQ5YzFiZjkzZmZjODQ2MzU2ZmVmMDA4ZWJlZTRiYjNlZTE0OGUwZmIxODkzZDE4OGU0OTM0ZDBkMDg4YTQzM2QxNGE1OTZjNWYyZTNlNDk2NDhhMjJlZGM2YmRiY2M1OGRjMWVkYmQ0NDAwNDZiM2ExNjljYTJiIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTI1NjoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMDAwMSI6ImEwMDNhZTljZjA3MDRkNTg3NjNiMjE0ZjIwNDQ2ZWNjNDA5OWM1NjZmMjUzODRlMjhkMGRkNjU0MGM1ODcwNWZjOGQwYmZlMWNlYWEwNjA5NmVkMWUyMzAxNDZlZGI4MjA1NmUzOWU2NzI3YWJlYzA5ZjI1ZTQ0MDc5YjZjZTFjYTJjNmE1NDBkZWM3YWEzNDQ0NGQ3ZDQzNWY0MWU1ZmNhOWIwYmJhNjI3NTlhZTI3ODA2MzhlNTE2MGUwMzFiYjYwNDA5YzJlODU2NzRhYzdhNzc2YjQ0NGIzN2I5ZDdmNGRiYWE1NTdlODhiODU2MmE1ODRmMmRiZTkwNzI5YjI0MWFlZGU5NWRmY2M3ZTA1YjEwZGVlZjA2MjU1Y2I4OWYwZTdjY2ZmMjMzNTQ4MTg3NTZhMWY4YmI5ZjAwZmQxOGY2Y2QyMmNhMWI0YmZjMzgwMjc1NjJiYjM3NTYyYzc3Yzc4ODNiNWQ3MzUxNzBkNzU1MjExOTVmZDNmMmJkMyI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI2NzkyMmE4YjljYmM5NWNmN2M1NTVmZjJkNzNjZmM2MmVlMDRjM2YwZGY5YmZjOGY2NDI5M2E1OGJkM2JlYmQyZWIyMTJkNzExZjk0ZTM1YzcyOWQwODczZDZiMjQ0OTE0ZDIxYmQwZTU5YjIzMDg5YjM4NzQwZTQzZjQ4MGU4ZjQwN2QwOTBhYzkzYjA4YTU3NDAzOTY4YjU1ZTc4Y2ZlMzFlZWU2ZTRlY2JhY2Y4MzQxNjhmZTg5YjZiODQ1NGZjZTZlNjc1ZTgwZjgyYjMzZTg1MGFlM2YzZDI0ZmQzMjAzMzVlMzc5ODFmZDAwMDU3Njk0MWI0ZjA4ZDRiYTk5IjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTM4NDoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMDAwMSI6IjJjNmIzMDE4NTJjYzU1YTk5M2E5MzNlMmMwODBlYjlkYWJmZTE5ZTlkYzM1NzEwNjZjYWVhYmVkMTQ5MmQzNTAxY2Q4MzhkZTFjMDE3ODQ5MzJkZjdhNWFkNWJiZmI0OGM3OGY1M2E0NWY3NmU5ODEyZDA0NmYyM2JkOTY4NDk1ZWY3ZTk4MWU1YWRkNGFjZmM1MzhmZTMzYTUyMDVkZTc0YmIzN2QzZDliNmI4N2IyZDE3NGU4NWE3M2YyMTZmZDY3ZDU3MzhmYzQ2OWRmZjdlYTZiODUyZThkZDA4YmM4ZGYwMzY1OTczNzJkNGQ1MTE4NWU2ZjQ3YTQ1ZmJlMWI5YmRiMDZhNDAxODc4MzQyNWVjOTUyOTRkZTQxZjI3MjM1YWQzYjMyNjNhODkwYjhiNjJiMTc0MTBhOWJiMDg2NzMzOTNmZjIwNWE4NjZlZTIwNTdlOTljNjUxN2M2YmJjODRmOGQ4NzcxN2I4M2Q2ZjY0ZGU3ZWUyMTVlMWU4ZCI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjYKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiIxNDI4YjRhNDQ5Njk4YTk5NGVmODRjNDZhNTE3YzNhYTYzNTljNDhlNDI2NGVmNjVmMWY2OWQ3N2FlMjYxMzNlMTdlZGZjMTAzZGU0MTZmZmZiNGYyYmZlODY1YjQzNDU0NGE0MThmNmUyZmFjYTAwYTE2NWQ0NDNmMDY2M2ZmNjQwODAxNTQ2MTRmNzE5NDA1N2Q4YjVmMWYzMzkzNGNjOWZjMjMxNGNmODZkNGZkYWQ0ODkyYmYwZDMwNThmN2YzN2ViZTk4ZWY1MmJmYjI0MGI5YWQzNjkxNTNhZmUwODFiYmNmOWQ3YWU0M2U4YmEzMzZiOGFjNTdlOGE2ZGEwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTUxMjoxNTM2OjE2OiJhNTlkOWI3MjY5YjEwMmI3YmU2ODRlYzVlMjhkYjc5OTkyZTZkMzIzMWU3N2M5MGI3ODk2MGMyNjM4YjM1ZWY2ZGJkYWMxYWM1OWU3MjQ5ZDk2ZDQyNmU3Zjk5Mzk3ZWFiYzZiODkwM2ZlMTk0MmRhNTgwMzIyYjk4YmFmYWNkODFiYjkxMWMyOTY2NmY4Mzg4NmEyYTI4NjRmMzU1MjA0NDMwMGU2MGNlZGQ1YThjMzIxYzQzZTI4MDQxM2RjNDE2NzNjMzlhMTFiOThhODg1NDg2ZjgxODdhNzBmMjcwMTg1YzRjMTJiYzQ4YTE5NjgzMDUyNjk3NzZjMDcwZWY2OWQ0OTEzNTg5YTg4N2M0ZDBmNWU3ZGQ1OGJkODA2ZDBkNDlhMTRhMTc2MmMzODY2NWNlZjQ2NDZmZjEzYTBjZDI5YzNhNjA0NjA3MDNjM2QwNTFkNWIyOGM2NjBiZmZiNWY4YmQ0M2Q0OTVmZmE2NDE3NWY3MmI4YWJlNWZkZGQiOjE2OiIxMDAwMSI6IjhlMTBhMWFlNDcwZTZlNTdhOGQyMzQxODVmNzhmZGI2MDBjYzYzNmM0MTU2NWE5ZjM2OTRhODRhZTEwMmY2MjUxOTg0ZjU0ZDExYTc3ODVmZGNmZGZhZjgwYTgyMWUwNWQ1N2VmNmI4ZWRjMDNkOTA3Njc1NTc3OTMyMmZkNTNlYjk4YzgwNWRhNzdkYzkzMTY3NDRlMzkzYzJmZWNkMjkxYTdlNjA0M2IxY2E4OWZkODI0OGY2NjFlMWQ1MzExMDIxMWI5MWVkYjQxYjMxZTg0OGNkZTExMTVkOGFmZDk5NjNlYmNjMzZhZmY1YTI3MDg1OTQ5ZjA3ODFiYzY5MTY3YzE0MGVjZmU3MWM0NGFhY2FmNDEyM2U1NTdlYWYyYjUyOGM2ZDBlYTg3NWI0Y2VlZmE5NDJmZTMzOGFmOGRmMTA1NjJjNDM4YWYwNGNkNzUyMWRhOTEyYjNlMzg5OWNlZjBkNzU3MjIxNjFiZTZhYmVkNWU0ZTkwMDlkYmY0MCI6MAorCitSU0EgUEtDUzEgVmVyaWZ5IHYxLjUgQ0FWUyAjMjcKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNDg3MWFkYzA1ZjZiM2VjZjI5NjY4MGIwZGQ4ZDg2NzE1YjBkNTI2NGMwNjQwMDgwMzdkYzQxMDUxMjUyMGI1ZjE5M2M4ZjRkMjFlYjZjNDJlMTBkMjIwYzAyNzVjOWIzNzUxZjAzYTQwOTZlMmYwZTNkYjlkZjhkNTIwNjhjMDZhNTE1ODlkMjNjYTEzNjFlOWZlMjc2OTFlOTU2NjMzMDFlYzE0MDdmYmY3M2FlZTk5Y2M5MjM2MmVhZjY5OTRiOTUwMzgzOTZkODE1MDUyYTBhZWY2NDg5YmJiN2JjYjBmZmZkZjEzZjBhZjllN2Q5ZmQxNGY2Y2UwMGFiOThmNyI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEExOjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjExIjoiMTgwY2FmMDM3ODFiMzkxYWFjZWJlNWIzZjVlMWQzYjAxYzY4YTAwZGY0ZWNmYjZjNGJmMTQyMTdhZWQ3Y2ZjYTBhZGFjMDk5ZWMxZDZlMWYwYjQzYjA5Yjg2Nzg4NTMzZmVlNjY5MWQ3NzM4MDdhZjBkZjZjYzNiYmRkZTNjZjM0YmY1Yjg0OGZhNTljOGJjMTAyMjdjYzNlYmEzNDUyYTg1ZTA1MjBmY2NkYjJkOGQzMmRkOTk2NzJkMzAyNzU2YTJkN2Y3ZjI2OTNkYjNhNDhiZTE3YmQzNGQ5ZDg5MWY0YmE0NDQ0OWM1YmFkMWRlOTFiNzg4ZjUyNDUwMGE3NzAzY2NjYmFhNzdiOWZlODc5MWY1YzhhYTdiOGYwNTUzMzZmMjhmY2ZjMDE3MzM3MTJlMzNjZmIzZDMzZmU3MWRkYjljZWQyYTMxOTMxZWMzODAwN2Y1YWQ0YTBkMTlhY2M0MjgxMjRiMGU1ZWU2ZTA3NDZmYjMzYzFhNGQ5MGM4IjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMyOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjNiYmE2NGRlMzg0MzhhNzFiOTVhYjljOTQ1MzlkNTg3MGMxZmIwOGQ3YTk5Mzc2MDBjMDBlOWQwNjM0MzhlZGM5N2U2MjVkMGNkNGIxZWIwMGMzMWM5ZDk0YzdhMGZlNmQwMzE2MGQxYjZjYmVjNWFjZGFkMTZhZGE2ZWYyNTNmZWU2MDNkZjlmYWNhOGY5OGE0NzdjYzU0NTZmM2RmYmY2NDE0ZGJmMTlmMzgzMmUyMjdjZTI5MTc4MDE4ODg4MWU4MmU5NmEyZTg0NzQ0ZjEyYTM0YTk4MDhhMmRhZWRjNmZkMDBiMzQ1YzY3NzJiZWMyNmEwOTU3MTk0NTFlNmEiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjI0OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjExIjoiOGM4NDZlNzVlMzJjZTVmOTk2NGJkZDhmNmRjZjFkMjk5NmE2NDZiMjMzYmNmMWJkNjM5NGUxM2U4NTY2OTFiODliZWRkMTgyOTBhMGY5ZjdjOTBkY2EzMDcyNzFiMzEwOGU3OTUzNDA0OTA1MTNiMjVlNjc4OWU5MzcyMmM2NWVjMDY0YjRjNDM0NTcyOTVhMzFkMWYwN2RkNjA1ZTEzM2ZkNmVhYWZjNThjZGExMzJkZjI5MzlmNWY2OTNlMDIwNWFmMzQ1NTBhZmFhMTM3ZjNlNDgyODg1ZTUwZGZiNDgzMzNhMTVjMDgyMWU3YTE5NjQyYWNkZGRjNmZlYTNjNzQ4N2M2OTEyNDZhMmIwODNkYWM0Mzk4ODlkNWFlNzQxYjdlMDhjNDc5Mzc1MzBiNGIwNjlmMWEyNjBjZDA3ZmU0YTBkZGQ1MzBhYjExNTM0ZmI4MDVlOWI1NjIxMThlZTBlOTc5MzI5NjYwMDhhYWRmYzgzZjNiOGExMGRlOGVlIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMyOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImY3ODU3Y2UwNGJmNDI5MmVhMTc1NWY5ZTU4NzgyMjM3MmY0ZGNkZjEwYmRkZmMwZmY0OThhOGFmNjBhZTk0YTBiNDgyZTg3MzA4NWMxY2Q1MmE1ZDE4MWNlNmI5OWExZjg1MjBkNzRiOTQ3ZDY1ZjNlN2UzNThlOGRkYzRhYzRhZTQ2NWUzOWQ0MDhlZWUxZjA5ODY1MTU5NzMzZjgzZjU1M2NkOTNjZmRlMWMxMTRmYjNlMzJjZjUxY2Q0MTgzNTkwMTZiMzg2N2RmNDY3YjY0NWQ3NTI4MDg2NzFhNDYwOWYzYzQ5YTY3MDIzYzljYTYxN2U2Y2ZmYTU0NGExMGEiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjExIjoiOTY3NzMwMGJiZWUwMDNiZTNjNDQ1NjM0ZjhlZDViZWIxNTJiNjNmNDZmODRjZjVhOGU3MjFlMGZhZmU4ZjNmN2U5OWE2ZDUwNzQxZjIzZjQ0OWQzMDI2ZGEzZThhN2FjMzZiZTk5YWI0NDgzMTgwMzQ4NmFlNTUyZjdhYTAxZjA3NTI4NzgyOWIyMzFkMmQwODQwOTA4ZTA5MDgxYWUxNzdlZDg4OGZlNDZhOWQ5MzdhMDg3MWViNWQ1MmVjNTQxYzg0MTFjNGNiZjdlZmVhNmNhMjEzYjEyY2VhNTEzYjA3MzllZWRjYTdjOTQ3M2UxMGE3Nzk2OTM2ZjRlYWEwYzVkM2E5MDEzY2E1NTM2NzgxYWM2OGViMmNhNTc3OTE0NGRlMjNkYTJlOTg3NTExNGFjYTg4NWIzMjE5ZGZjMjkyZDczOTQwYzU5OTJlYTNjNDg4Mjg4OWU3NTQzNDMwNjUyODYwZTQ0MWEwMWE0NWQ5ZjQwMDVhMDEyNDIxNDkzIjowCisKK1JTQSBQS0NTMSBWZXJpZnkgdjEuNSBDQVZTICMzMAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6ImNhMzEyNzc0ZjI3NTZhYzIwMTlmMjEzYTAxYTYzYzlhMGI0YTQ5Y2NhZmVjZjI1ZTk3YTRjNjMyNjY4ZTNjNzdlNjY0ZjRkNzYzNTI0MWYyNTIwNWU1MGMzNzA2MWIwMmM1NDZkYjgzNDZmYTU5N2MzZGE4Y2ZkNDRhODI3YzVhNGZmNGVjZmNkMTc5N2IzOWExYjIxNWQ5YmJiOTNmZGI2ZWIzNWJhZmJkYTQyN2E1MDY4ODg4YTZlMTlmODYyMjRiMDg5NzQ5MDQ5MTIwN2UzNWNlMzkwODU2NjhiMTBiNGZiODUxYjdkZDk0NjVjMDM4Njk3OTBlZjM4YTYxYjUiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjE1MzY6MTY6ImE1OWQ5YjcyNjliMTAyYjdiZTY4NGVjNWUyOGRiNzk5OTJlNmQzMjMxZTc3YzkwYjc4OTYwYzI2MzhiMzVlZjZkYmRhYzFhYzU5ZTcyNDlkOTZkNDI2ZTdmOTkzOTdlYWJjNmI4OTAzZmUxOTQyZGE1ODAzMjJiOThiYWZhY2Q4MWJiOTExYzI5NjY2ZjgzODg2YTJhMjg2NGYzNTUyMDQ0MzAwZTYwY2VkZDVhOGMzMjFjNDNlMjgwNDEzZGM0MTY3M2MzOWExMWI5OGE4ODU0ODZmODE4N2E3MGYyNzAxODVjNGMxMmJjNDhhMTk2ODMwNTI2OTc3NmMwNzBlZjY5ZDQ5MTM1ODlhODg3YzRkMGY1ZTdkZDU4YmQ4MDZkMGQ0OWExNGExNzYyYzM4NjY1Y2VmNDY0NmZmMTNhMGNkMjljM2E2MDQ2MDcwM2MzZDA1MWQ1YjI4YzY2MGJmZmI1ZjhiZDQzZDQ5NWZmYTY0MTc1ZjcyYjhhYmU1ZmRkZCI6MTY6IjMiOiJhMjAyYzMzZWI4MzFiOWQ4ZTgxOGI2YzNiY2RiNDI4MThlMWQ5YzIyYTA2ZGRkNzNhMTdhMjFlNDlkMThjZGE0NGRmMzQ5YTA2NjQ3N2NhZTA2OGUxYTVkMmI1MThiMDg4NWU4ODllZjc5NmNhOWU2ZjQyYTY5YWM3NTViOGE2NDA1ZmJhZWY5M2ZlMDEzMGQ5OGRlMzVkNjg5YWRkZmVlM2VlY2QyNjY1ODkwM2Y3NzRiZGE0ODFjM2Y0MGVlMGU5NTY5YTNjM2UyZGE3YWQ1NzZjN2RlODIxNTlkOTMzZTM2ZmEyOWNmZWY5OTM2NzAwNWUzNGFiNTA4MmQ4MGY0ODI3NmQzN2RhYmM4OGRiYjAyM2JkMDE1ODUzMjlkMmNjZjQxN2Y3OGVjNTA4YWFhMjk3NTEwMDdkMzFmMTY2OTI5NmI5ODFkNDRjOGZhOTkxMzBjNWRmN2EwNzE3MjViNDk2ODU5MzE0YWFmOWJhZjBlYmM3ODAzNTU5MTQyNDkiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiMmFiZTA3OTA3NzI5MGNlYjZjODBhYzVjNjEwNjJjZThkYTgxNGIxZmI5OWExYTlmYjI4NjBlZDkwMGU2NTQxODU2ZWM2NGJmMTljMGQ5ZDFjYzIyODBiN2NjNTBhZjNlM2QyYWQ4ZTA0NDk0NWQ0NDc2MWNhNjA4OTFkZDcyYmQ2YWEyNmEzMzI3NGZmY2Y3YWU3ZDY2MWI1ZTY1MTEzNWZjZmYyMWFhZjA2YjRhMmRiMThmZTU4MjdlMDI0Mzg4NGYyODQxNzYwYjlmMWM2NWZiZGE4NzBmN2YwY2ZiZDZmZjQ4NGYwODI1ZTY4ODYxNDkyOGYyZDEyZDFlNzA4MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTAwMDEiOiI0MDI2MzFmM2NkZGZiMDJjYzRkOWNiNThlZjFhYjY3MjZiZDc4N2E1MGUxMmU5ODU2N2M5NzAyYmZkZjQ3YWY4NTkwNGFlYzVhMmY2YzVkZjlhMTBmMDhmOTBmOTM3MjhlYjA5MGFlMmFjMjFkZWQ5ZjM4ZmFlY2Q4MTk1ZjNlYjNkNDEwNzUyMWIxY2VlOTU2ZTdhMjE0MjQ1YjAzOGFkYWU5MTJmYTM1ZWM5N2NiM2JkYzQxMzUyZThhYWZmODAxNzM1NjEyODRjYjc0MGY5OTlhM2NkNjY1M2E2YzNkNWEzZjkxMWE0MTZmNDFlMjE1NTA4Mzk4MmM5OWViNTk5OGEwYTc0ZDc3ZjFhZTk5OWQ5MDFlZTI0YTdmMmM0MjQxNzlhM2Y5MmIwN2RjMGIzNDk4YzE4ODRlNjA2NzdiZWUwMTc1ZTgxMGI0MjZjNGFkMDA4ZDI3NDNjZDE5YjAwYjMzMTc3YmY4YmUzZmVkN2Y3NDA2ZTFiY2UwYzJlYTMiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzMyCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiZGE5NTA1ODA5ZGM5MmNmZDhlMDFhMTg1N2RkZTUyZGY2Njc3YzQwZDk4ZjQ1NzdjMTY1OWNhN2QzZTlmMDFmOWE4MDkwNjVmNTFiNTRmZTJmOTcyM2ZlMmM5ZDFlZWE3Mzk3ZjJkNTUzMWQxYzUxYzZlYTEwMGIwMjg1OTZiZjlmMjRkZDkwYmUxNGVhYjU4ZjA3YjRmMjRhMzViMDczYWViMjllY2RlNGE2ZjMyMDIzN2Q3YWRiZGM0M2Q5NGY4N2UwODg2NmI5NWJiY2FjODNkYzdkYjM1NTNhNDI0MDA0NDFmMDg4ZTJiZjYyNTk1MzlhMmRhOGI1YTc0MDY1ZiI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTEiOiI1N2VkZDA1NjBkZjk4NDBhMjVjMjhmZjZkMjU0ZTQzMjM5NWE1Y2QyZDkyMjQ4YjNiNDRkN2VhYjBmYzY1YjNjNGU1NDVhOTE2YThlOTBjZTg5NzQ1MTE5ZGI5ZWM5Nzk5YWE4ODkwZjUyNTBmYjU4OWNmYzEyZGFjMWI2ZTQwNmEzOWJjM2IzNjYzODkyZGE1MzU0YmE0NTNjYmQ1ZTRjODliZGNlODJkMGZmZTk3MDUyYTAzYTVjMzMwODgxOWMxMTM5ZWJjNzgwYzEzY2Y2ZGMxNDc3ZmFmNzM0YWJjYjFkYjNmYWZhZWQ2ZjIyODg1YzljMDIyMmZmNWRlYWNiOGNjNmQwMjdmMmU5NTljMzA3NTAxMWIzODJlODhjNGIyN2I4M2I0ZjJlNmZkYTAyMmUzMzFjMzYwMmQxOWY1YWM3YmNjZmU5NWVhMWU5M2Q3MzZkYmQ5MThhZTViMWY0NjhjZDBiNWI1MzZhMmY5MThkNWUyN2EwNzU3ZTc1YjciOjAKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiZDBjZDAzOGM2NWIzYWNjYTQ1ODIyZWFmOTFlYTUxNzZlODIwNDMyNjg4NzZkZWMwYjYyZTJhYmQ2MTkwMjNiNzAyM2FiYzY3YzZiODIzY2ZlZjU0NDdiODc3MmY5ODVmZjc5MTBkNmNjODdlNmMyMzY4OGFjNmRlMWZlZTQwYmJlMmRhMWE5Mjc3MGRlOTJhZGFhNDI3YWNlMDJmZWU1NzFhMGEwMTc2ZmNlYjBjOGYzZWI3MmRkZTgzOWFiMjAxMzk1NjI1ZjVjMGRiODY0MWNlMTlkNzcxMTIxMmRlYzYxNzMzMjYyYzZjZTQ0NzZjMDI1ZTY3YTNkNWJjMDFmMyI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTEiOiIyZjMwNjI5YzExMTdkMDEzYmIzNmU2MDk5ZGVlOTMxZGNhZjBhMTAzMmIwN2VjMjNlMmIyNjI4OThhODk0NWU1NjljOTU3M2Q4MWUyMmJiMGE1ZjhhMjhiMGQ3YjhmZjAxMzY3ZGQ3ZjA4OWM2OGVkMWRhYTExY2Y1M2E5NmVlOTFiMzhlNmI4MzliNmU5MGJlYTM0ZDE0Yjc4ZjVkMmM3NjI5YjY4YzViNGYyZWNmZmY2NmI0ODNiMjIzM2NiMTRmOTVkZjUzM2M4NjdhMmI2MTBhZWJjZGJiN2VhMzEwOWFhZjJmNTc2MmFiM2VkYzI1NzFkZWNjYzdkYTBjOWE1YjQ0M2NhMmI5MjRjMGYxOGRlN2JiYjczNmEwOGZlZDM5MTY3OTUwMThhNDM2YTNhZTYyYzg1ZDU1NGE1M2E2ZDQ4NjIzOTA4ZTA2ZTdkMjc1ZjQyNTFkM2IzYmQ1MzBiZDExZTE1NWRjZjJiNWMyYWRmMDMwY2RmOTMxYWU3NDkiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFZlcmlmeSB2MS41IENBVlMgIzM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTUzNjoxNjoiYTU5ZDliNzI2OWIxMDJiN2JlNjg0ZWM1ZTI4ZGI3OTk5MmU2ZDMyMzFlNzdjOTBiNzg5NjBjMjYzOGIzNWVmNmRiZGFjMWFjNTllNzI0OWQ5NmQ0MjZlN2Y5OTM5N2VhYmM2Yjg5MDNmZTE5NDJkYTU4MDMyMmI5OGJhZmFjZDgxYmI5MTFjMjk2NjZmODM4ODZhMmEyODY0ZjM1NTIwNDQzMDBlNjBjZWRkNWE4YzMyMWM0M2UyODA0MTNkYzQxNjczYzM5YTExYjk4YTg4NTQ4NmY4MTg3YTcwZjI3MDE4NWM0YzEyYmM0OGExOTY4MzA1MjY5Nzc2YzA3MGVmNjlkNDkxMzU4OWE4ODdjNGQwZjVlN2RkNThiZDgwNmQwZDQ5YTE0YTE3NjJjMzg2NjVjZWY0NjQ2ZmYxM2EwY2QyOWMzYTYwNDYwNzAzYzNkMDUxZDViMjhjNjYwYmZmYjVmOGJkNDNkNDk1ZmZhNjQxNzVmNzJiOGFiZTVmZGRkIjoxNjoiMTEiOiIwYjRkOTZmNDExYzcyN2EyNjJkNmQwYWRlMzQxOTViNzg2MDM1NTEwNjE5MTdkMDYwZjg5YWRkNDdiMDlkZmU4NzE1ZjRmOTE0N2QzMjdkYzI1ZTkxZmU0NTdlNWQxYTJmMjJjZDhmZTZmZThlMjlkMjA2MDY1ODMwN2M4N2E0MDY0MDY1MGZlZjNkNGIyODlhNmMzZmViYzVhMTAwYjI5YThiNTY2MjNhZmIyOWZkM2MxM2VhMzcyYmYzYzYzOGMxZGIyNWY4YmQ4Yzc0YzgyMWJlZWM3YjVhZmZjYWNlMWQwNWQwNTZhNmMyZDMwMzU5MjZjN2EyNjhkZjQ3NTFhNTRiYzIwYTZiOGNmZDcyOWE3Y2JhMzA5YWU4MTdkYWNjYmVmOTk1MGE0ODJjZjIzOTUwYThjYTFkM2ExM2RkYjdkOGQwZjg3YWQ1NTg3ZDRkOWViZTE5ZmU5MzQ1NzU5N2E3YmRkMDU2YzJmZDRjZWE3ZDMxZTRhMGU1OTVhN2IiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzEgKFNIQTUxMiwgMTUzNiBiaXRzIFJTQSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfc2lnbjoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEE1MTI6MTUzNjoxNjoiYzhjNjdkZjg5NGM4ODIwNDVlZGUyNmE5MDA4YWIwOWVhMDY3MjA3N2Q3YmM3MWQ0MTI1MTFjZDkzOTgxZGRkZThmOTFiOTY3ZGE0MDQwNTZjMzlmMTA1ZjdmMjM5YWJkYWZmOTI5MjM4NTk5MjBmNjI5OWU4MmI5NWJkNWI4Yzk1OTk0OGY0YTAzNWNiZDY5M2FkODMwMTQyOTRkMzQ5ODEzZDFhZDU3OTExYTYzNTVkMDczMWZlM2EwMzRlOWRiIjoxNjoiZjE1MTQ3ZDBlN2MwNGExZTNmMzdhZGRlODAyY2RjNjEwOTk5YmY3YWIwMDg4NDM0YWFlZGEwYzBhYjM5MTBiMTRkMmNlNTZjYjY2YmZmZDk3NTUyMTk1ZmFlOGIwNjEwNzdlMDM5MjA4MTRkOGI5Y2ZiNWEzOTU4YjNhODJjMmE3ZmM5N2U1NWRiNTk3OGI0N2E5MjIxNTZlYjhhM2U1NWMwNmE1NGE0NWQxNjcwYWJkZmI5OTU0ODljNGQwMDUxIjoxNjoiYmQ0MjliYjdjM2IwMGJiZWExOWJhNjY0YzBmODE3MmQxYTczYzNjZmEwNWUyZWQ2NTZkNTcwYzE1OTA5MThiYjdlMzcyZWQyNWUyY2Q3MTM5NWJhMGE5YjFhMzBmM2VlMDEyZmZiMDU0NmNhYjhlMzU4MWZlM2UyM2Y0NGFiNTdhOGFlZTk3MTdlNzFhOTM2YTU4MGZhODU3MmQ0NTBmYjAwMzM5YTZmNjcwNGI3MTdkZjBjMTQ5YTQ2NWJhYjc2OGM2MTUwMGNkOTNiNjExMTNmZjNlNDM4OTE2N2Y3YjJjOGUzYzBkYTJkNDc2NTI4NmJlZTU1NWIwYmNiNDk5OGY1OWIxNGZhZDAzMTgwYTE3YzhiNGY2OWJjZDEyMzRmNGFlODU5NTAxMzc2NjVhYzJiYTgwYjU1Y2M5YjFhYWZiNDU0YjgzNzcxYWE3NTVhY2QyYTAwZTkzZGRiNjVlNjk2ZGJlZDhiZGNhNjlmYjVlMGM1YzIwOTdiOWNmZTRiIjoxNjoiMyI6IjkzYjZmYTk5NDg1YzExNmNhNmVmZGQ0MjAyZWExY2Y0OWY0YzYzNDVmYWU2OTI1ODQ0MTM3NDNjZTViNjU1MTBlOGU0NjkwYWVlOWExOWVhMWZmMTBkNTdmMjJhYTM1NDhkODM5ZjI4YTg1MjVhMzQzNTRlOWU1OGUwZjM5NDdlMDU2Y2UyNTU0ZTIxYmYyODdlMjIwYjk4ZGIzYjU1MTI1OGNkNDJiNDk1ZTVkMWEzYmJjODNjOWQxYTAyZjJhMzAwZWY2ZDg2NmVhNzUxMDhlNDRlYmIzZTE2YjQ3ZGYyZjZkZTI4ZmViMmJlMzg3NGRiYmYyMTU5OTQ1MTA4MmQ4NmU5ZjJmNDYyNTc1YTgxODVjNjlhYTFmMWZjYjZhMzYzYzVkNzFhZWJhMjEwMzQ0OWVhZjM4NDUyODUyOTExNDhkNWY3OGQxNjQ2YjhkYzk1Y2JjYzQwODJmOTg3ZDk0OGIwZTdkNGU4MGI2MDU5NWY4YTc1MTc1ODRlMTY0MyI6MAorCitSU0EgUEtDUzEgU2lnbiAjMSBWZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTUxMjoxNTM2OjE2OiJiZDQyOWJiN2MzYjAwYmJlYTE5YmE2NjRjMGY4MTcyZDFhNzNjM2NmYTA1ZTJlZDY1NmQ1NzBjMTU5MDkxOGJiN2UzNzJlZDI1ZTJjZDcxMzk1YmEwYTliMWEzMGYzZWUwMTJmZmIwNTQ2Y2FiOGUzNTgxZmUzZTIzZjQ0YWI1N2E4YWVlOTcxN2U3MWE5MzZhNTgwZmE4NTcyZDQ1MGZiMDAzMzlhNmY2NzA0YjcxN2RmMGMxNDlhNDY1YmFiNzY4YzYxNTAwY2Q5M2I2MTExM2ZmM2U0Mzg5MTY3ZjdiMmM4ZTNjMGRhMmQ0NzY1Mjg2YmVlNTU1YjBiY2I0OTk4ZjU5YjE0ZmFkMDMxODBhMTdjOGI0ZjY5YmNkMTIzNGY0YWU4NTk1MDEzNzY2NWFjMmJhODBiNTVjYzliMWFhZmI0NTRiODM3NzFhYTc1NWFjZDJhMDBlOTNkZGI2NWU2OTZkYmVkOGJkY2E2OWZiNWUwYzVjMjA5N2I5Y2ZlNGIiOjE2OiIzIjoiOTNiNmZhOTk0ODVjMTE2Y2E2ZWZkZDQyMDJlYTFjZjQ5ZjRjNjM0NWZhZTY5MjU4NDQxMzc0M2NlNWI2NTUxMGU4ZTQ2OTBhZWU5YTE5ZWExZmYxMGQ1N2YyMmFhMzU0OGQ4MzlmMjhhODUyNWEzNDM1NGU5ZTU4ZTBmMzk0N2UwNTZjZTI1NTRlMjFiZjI4N2UyMjBiOThkYjNiNTUxMjU4Y2Q0MmI0OTVlNWQxYTNiYmM4M2M5ZDFhMDJmMmEzMDBlZjZkODY2ZWE3NTEwOGU0NGViYjNlMTZiNDdkZjJmNmRlMjhmZWIyYmUzODc0ZGJiZjIxNTk5NDUxMDgyZDg2ZTlmMmY0NjI1NzVhODE4NWM2OWFhMWYxZmNiNmEzNjNjNWQ3MWFlYmEyMTAzNDQ5ZWFmMzg0NTI4NTI5MTE0OGQ1Zjc4ZDE2NDZiOGRjOTVjYmNjNDA4MmY5ODdkOTQ4YjBlN2Q0ZTgwYjYwNTk1ZjhhNzUxNzU4NGUxNjQzIjowCisKK1JTQSBQS0NTMSBTaWduICMyIChTSEEyNTYsIDIwNDggYml0cyBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNWFlZTJiOWRiYzAyYTZhMmQ4N2ZmNjRhNjQxNjVkYzBiOWNlNzBjNzliYWIyZDI4NzkzOWUyNjAxYzMyMjNlMDQ5Mzk4OGQ1NDY4NzMxYWU0ZWRjN2Q1ZjVkNDQ5MzM1YzIwNGZkYjBlMTkyYzE5MTVjOWQ2OTRkM2E2MWMzYmUxNGRmNzljNGIzNGQ2YWM3MzcwNzgyOTAyNGQyNjNjOTRmOTEwN2ZhOTNmMzc4M2RlMzk2NTUyMjMzNmUxOGQxZTAxYTE0MmI1MTAzNDUxYmI5NzgzOWVhZjJmNDQ3MDNhNjMwNTBhMzZiNzhhZWY0MDcyZWExYThkYWFhZjFhMjkxOGZjMDNlZTk1N2E5YzA5ZWZkYzcyODdiY2I0ZDZhZWM0NzIzMjkwMjk0YjI0OWIzZTNkYzYzMTU3YjU2MGFkOWM4NjczMjNhNzNlYmViMzYwY2M5ZTQ4MjExMTY0M2IwZDg2YzRlMzNkY2YxNzAxNTU1OTBmMGViYTdkMTcwNzg5ZTg0ZGUzMzZiN2ZlMmY2Y2Y0ODVkZGNhOTQ2MDdhNGZmMzc5ZmM0OWQzNzVjNzMwMjQ5ZGQxYTIxMGU3ZGNjZDc2MmQxYzIzYzc1MzJlNzY5YzZhYTg4ZTM4ZTg2NTRmZjkwZjdiMzRkZjRjMDdiYTkwZTg5MDk5ZWMxZWQiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzIgVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyNTY6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiNWFlZTJiOWRiYzAyYTZhMmQ4N2ZmNjRhNjQxNjVkYzBiOWNlNzBjNzliYWIyZDI4NzkzOWUyNjAxYzMyMjNlMDQ5Mzk4OGQ1NDY4NzMxYWU0ZWRjN2Q1ZjVkNDQ5MzM1YzIwNGZkYjBlMTkyYzE5MTVjOWQ2OTRkM2E2MWMzYmUxNGRmNzljNGIzNGQ2YWM3MzcwNzgyOTAyNGQyNjNjOTRmOTEwN2ZhOTNmMzc4M2RlMzk2NTUyMjMzNmUxOGQxZTAxYTE0MmI1MTAzNDUxYmI5NzgzOWVhZjJmNDQ3MDNhNjMwNTBhMzZiNzhhZWY0MDcyZWExYThkYWFhZjFhMjkxOGZjMDNlZTk1N2E5YzA5ZWZkYzcyODdiY2I0ZDZhZWM0NzIzMjkwMjk0YjI0OWIzZTNkYzYzMTU3YjU2MGFkOWM4NjczMjNhNzNlYmViMzYwY2M5ZTQ4MjExMTY0M2IwZDg2YzRlMzNkY2YxNzAxNTU1OTBmMGViYTdkMTcwNzg5ZTg0ZGUzMzZiN2ZlMmY2Y2Y0ODVkZGNhOTQ2MDdhNGZmMzc5ZmM0OWQzNzVjNzMwMjQ5ZGQxYTIxMGU3ZGNjZDc2MmQxYzIzYzc1MzJlNzY5YzZhYTg4ZTM4ZTg2NTRmZjkwZjdiMzRkZjRjMDdiYTkwZTg5MDk5ZWMxZWQiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzIgVmVyaWZ5IChGYWlsKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjU2OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjVhZWUyYjlkYmMwMmE2YTJkODdmZjY0YTY0MTY1ZGMwYjljZTcwYzc5YmFiMmQyODc5MzllMjYwMWMzMjIzZTA0OTM5ODhkNTQ2ODczMWFlNGVkYzdkNWY1ZDQ0OTMzNWMyMDRmZGIwZTE5MmMxOTE1YzlkNjk0ZDNhNjFjM2JlMTRkZjc5YzRiMzRkNmFjNzM3MDc4MjkwMjRkMjYzYzk0ZjkxMDdmYTkzZjM3ODNkZTM5NjU1MjIzMzZlMThkMWUwMWExNDJiNTEwMzQ1MWJiOTc4MzllYWYyZjQ0NzAzYTYzMDUwYTM2Yjc4YWVmNDA3MmVhMWE4ZGFhYWYxYTI5MThmYzAzZWU5NTdhOWMwOWVmZGM2Mjg3YmNiNGQ2YWVjNDcyMzI5MDI5NGIyNDliM2UzZGM2MzE1N2I1NjBhZDljODY3MzIzYTczZWJlYjM2MGNjOWU0ODIxMTE2NDNiMGQ4NmM0ZTMzZGNmMTcwMTU1NTkwZjBlYmE3ZDE3MDc4OWU4NGRlMzM2YjdmZTJmNmNmNDg1ZGRjYTk0NjA3YTRmZjM3OWZjNDlkMzc1YzczMDI0OWRkMWEyMTBlN2RjY2Q3NjNkMWMyM2M3NTMyZTc2OWM2YWE4OGUzOGU4NjU0ZmY5MGY3YjM0ZGY0YzA3YmE5MGU4OTA5OWVjMWVkIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBTaWduICMzIChTSEEyMjQsIDIwNDggYml0cyBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfU0hBMjI0OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiOWQ3NjhiOGIzMTQyMWY5ZDljZWQ4OTBhYWZhZjhiMzQ2ODY1NjQxOTA0OWVkMjY4ZjZlMTk5MjA2NmY0NWRjM2U0Y2QzNDllOGM1ZWQ1YTA2ZTRlZjViYWRhYmEwNjRiYTk0OTA3ZGZlZGYzZDcwOGJlY2FmNDRhZTliMjdjMzg2NmQzMjkzMTFiYTkzZThkZGM3ZmMyODRmYmEwNWQxYmI4NGZiMWUwNjBhNWI3NmI3ZmE1MTVjZmNkMmM4MTQ0NDc0NjIzNjcyNzAzY2FjMWUxNWZmNGZkZjhlZjE5ZDM2NWM1MWJhODZlNjBmNGNiYmNkMDdmOTU2MDYwNjI1NzUxYmZiZWNjNDc5NDU2NDY0NTljYWRhZGRkOTAwNjAzYTgxNDlhOTNiMzFhNmQ0MzJlMWRhMWE2N2ViNzY1ZjViMmYwYmQxYWRiOWFmMTJkNzMxYzdiMDI5MzFiNDJkYmJmZDhjN2NlY2RlNzZiODE3ZTk2ZjY2NDE0N2EyYzUwOTFjNmNlNGRjNTYyYzVmNTcxNTlkNmY5ZGM5YmEyZGFhMjEyZGI1NjY3NzgzOTYyMWJkNDgwNWRkZTYyOTU1ZmIyZDBjYzJjNDQ4MTA5ZDEwZWNjNjIwNmVhODFmMGEwMmUxNjQ2NDcxMzU4ZjNlYzE0NmNkM2M3NWYyZDM5MGIiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzMgVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEyMjQ6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiOWQ3NjhiOGIzMTQyMWY5ZDljZWQ4OTBhYWZhZjhiMzQ2ODY1NjQxOTA0OWVkMjY4ZjZlMTk5MjA2NmY0NWRjM2U0Y2QzNDllOGM1ZWQ1YTA2ZTRlZjViYWRhYmEwNjRiYTk0OTA3ZGZlZGYzZDcwOGJlY2FmNDRhZTliMjdjMzg2NmQzMjkzMTFiYTkzZThkZGM3ZmMyODRmYmEwNWQxYmI4NGZiMWUwNjBhNWI3NmI3ZmE1MTVjZmNkMmM4MTQ0NDc0NjIzNjcyNzAzY2FjMWUxNWZmNGZkZjhlZjE5ZDM2NWM1MWJhODZlNjBmNGNiYmNkMDdmOTU2MDYwNjI1NzUxYmZiZWNjNDc5NDU2NDY0NTljYWRhZGRkOTAwNjAzYTgxNDlhOTNiMzFhNmQ0MzJlMWRhMWE2N2ViNzY1ZjViMmYwYmQxYWRiOWFmMTJkNzMxYzdiMDI5MzFiNDJkYmJmZDhjN2NlY2RlNzZiODE3ZTk2ZjY2NDE0N2EyYzUwOTFjNmNlNGRjNTYyYzVmNTcxNTlkNmY5ZGM5YmEyZGFhMjEyZGI1NjY3NzgzOTYyMWJkNDgwNWRkZTYyOTU1ZmIyZDBjYzJjNDQ4MTA5ZDEwZWNjNjIwNmVhODFmMGEwMmUxNjQ2NDcxMzU4ZjNlYzE0NmNkM2M3NWYyZDM5MGIiOjAKKworUlNBIFBLQ1MxIFNpZ24gIzQgKFNIQTM4NCwgMjA0OCBiaXRzIFJTQSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfc2lnbjoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9TSEEzODQ6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI0MGRjYzk2ODIyZTU2MTJlYjMzZjFkY2EyNDdhMzUxMDliYTM4NDVjN2EzZDU1NmE2MGU2NTY2MjRiZjFjMTAzZDk0Njg2Y2E3Mzc5ZTllMzI5Y2NkMWIxOWI1MmJmZDQ4YjYwOGRmOWY1OWE5NmE4MmQzZmViMDEwMTA5NmRiY2I4MGU0NmRhNTQzYjRjOTgyYWM2YmIxNzE3ZjI0ZjlmZTNmNzZiNzE1NDQ5MmI0NzUyNWJlMWRkY2FmNDYzMWQzMzQ4MTUzMWJlOGYzZTY4NTgzN2I0MGJkZjRhMDI4MjdkNzlmNmEzMjM3NDE0NzE3NDY4MGY1MWM4ZTBkOGVlZDlkNWM0NDVhNTYzYTdiY2U5ZWY0MjM2ZTdjZmRjMTJiMjIyM2VmNDU3YzNlOGNjYzZkZDY1Y2MyM2U5NzdhMWYwM2Y1ZWY1ODRmZWI5YWYwMGVmYzcxYTcwMWY5ZDQxM2IwMjkwYWYxNzY5MmNiODIxYTFlODYzZDU3NzhlMTc0YjExMzA2NTlmMzA1ODNmNDM0ZjA5Y2IxMjEyNDcxYTQxZGQ2NWMxMDJkZTY0YTE5NGI2YWUzZTQzY2Q3NTkyODA0OWRiNzgwNDJjNThlOTgwYWZmM2VhMjc3NGU0Mjg0NWJjZjIxNzQxMGExMThjZjVkZWVhYTY0MjI0ZGJjOCI6MAorCitSU0EgUEtDUzEgU2lnbiAjNCBWZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX1NIQTM4NDoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI0MGRjYzk2ODIyZTU2MTJlYjMzZjFkY2EyNDdhMzUxMDliYTM4NDVjN2EzZDU1NmE2MGU2NTY2MjRiZjFjMTAzZDk0Njg2Y2E3Mzc5ZTllMzI5Y2NkMWIxOWI1MmJmZDQ4YjYwOGRmOWY1OWE5NmE4MmQzZmViMDEwMTA5NmRiY2I4MGU0NmRhNTQzYjRjOTgyYWM2YmIxNzE3ZjI0ZjlmZTNmNzZiNzE1NDQ5MmI0NzUyNWJlMWRkY2FmNDYzMWQzMzQ4MTUzMWJlOGYzZTY4NTgzN2I0MGJkZjRhMDI4MjdkNzlmNmEzMjM3NDE0NzE3NDY4MGY1MWM4ZTBkOGVlZDlkNWM0NDVhNTYzYTdiY2U5ZWY0MjM2ZTdjZmRjMTJiMjIyM2VmNDU3YzNlOGNjYzZkZDY1Y2MyM2U5NzdhMWYwM2Y1ZWY1ODRmZWI5YWYwMGVmYzcxYTcwMWY5ZDQxM2IwMjkwYWYxNzY5MmNiODIxYTFlODYzZDU3NzhlMTc0YjExMzA2NTlmMzA1ODNmNDM0ZjA5Y2IxMjEyNDcxYTQxZGQ2NWMxMDJkZTY0YTE5NGI2YWUzZTQzY2Q3NTkyODA0OWRiNzgwNDJjNThlOTgwYWZmM2VhMjc3NGU0Mjg0NWJjZjIxNzQxMGExMThjZjVkZWVhYTY0MjI0ZGJjOCI6MAorCitSU0EgUEtDUzEgU2lnbiAjNSAoTUQyLCAyMDQ4IGJpdHMgUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9zaWduOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX01EMjoyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjZjYmIwZTQwMTlkNjRkZDVjZDJkNDhmYTQzNDQ2ZTVjYmExYTdlZGJiNzlkOTFiMTk5YmU3NWM3ZDNlN2FlMDgyMGM0NGQzYTEyMGNkMjkxMGY3M2NiYjMxNWUxNTk2M2E2MGVhN2RhMzQ1MjAxNWQ5ZDZiZWI1YWM5OThmZGRiZDFmYTNlNTkwOGFiYzkxNTFmM2ZmYjcwMzY1YWFlZTZmYjBjZDQ0MGQzZjU1OTE4NjhmYzEzNmZhZTM4YWM3YmNkYjNiZGUzYzZhMDM2MmRkOGI4MTRmN2VkYWRkNGE1MWIyZWRmMjIyN2E0MGQxZTM0YzI5ZjYwOGFkZDc3NDY3MzE0MjU4NThlYjkzNjYxYzYzM2I3YTkwOTQyZmNhM2NkNTk0YWI0ZWMxNzAwNTJkNDQxMDU2NDM1MTgwMjA3ODJlNzYyMzVkZWYzNGQwMTQxMzViYWQ4ZGFlZDU5MDIwMDQ4MjMyNWMzNDE2YzNkNjY0MTdlODBkOWY5YzYzMjJhNTQ2ODM2MzgyNDdiNTc3NDQ1ZWNkMGJlMjc2NWNlOTZjNGVlNDUyMTMyMDQwMjZkZmJhMjRkNWVlODllMWVhNzU1MzhiYTM5ZjcxNDlhNWFjMGZjMTJkN2M1M2NiYzEyNDgxZDRhOGUyZDQxMGVjNjMzZDgwMGFkNGI0MzA0IjowCisKK1JTQSBQS0NTMSBTaWduICM1IFZlcmlmeQorZGVwZW5kc19vbjpNQkVEVExTX01EMl9DOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnk6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfTUQyOjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjZjYmIwZTQwMTlkNjRkZDVjZDJkNDhmYTQzNDQ2ZTVjYmExYTdlZGJiNzlkOTFiMTk5YmU3NWM3ZDNlN2FlMDgyMGM0NGQzYTEyMGNkMjkxMGY3M2NiYjMxNWUxNTk2M2E2MGVhN2RhMzQ1MjAxNWQ5ZDZiZWI1YWM5OThmZGRiZDFmYTNlNTkwOGFiYzkxNTFmM2ZmYjcwMzY1YWFlZTZmYjBjZDQ0MGQzZjU1OTE4NjhmYzEzNmZhZTM4YWM3YmNkYjNiZGUzYzZhMDM2MmRkOGI4MTRmN2VkYWRkNGE1MWIyZWRmMjIyN2E0MGQxZTM0YzI5ZjYwOGFkZDc3NDY3MzE0MjU4NThlYjkzNjYxYzYzM2I3YTkwOTQyZmNhM2NkNTk0YWI0ZWMxNzAwNTJkNDQxMDU2NDM1MTgwMjA3ODJlNzYyMzVkZWYzNGQwMTQxMzViYWQ4ZGFlZDU5MDIwMDQ4MjMyNWMzNDE2YzNkNjY0MTdlODBkOWY5YzYzMjJhNTQ2ODM2MzgyNDdiNTc3NDQ1ZWNkMGJlMjc2NWNlOTZjNGVlNDUyMTMyMDQwMjZkZmJhMjRkNWVlODllMWVhNzU1MzhiYTM5ZjcxNDlhNWFjMGZjMTJkN2M1M2NiYzEyNDgxZDRhOGUyZDQxMGVjNjMzZDgwMGFkNGI0MzA0IjowCisKK1JTQSBQS0NTMSBTaWduICM2IChNRDQsIDIwNDggYml0cyBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1Ok1CRURUTFNfTURfTUQ0OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiYjBlNjBkYzRkZmFmMGY2MzZhM2E0NDE0ZWFlMmQ3YmNlN2MzY2U1MDVhNDZlMzhmM2Y2NTRkODc2OWIzMWI3ODkxYmExOGY4OTY3MmZjZTIwNGJiYWM2ZTM3NjQzNTVlNjU0NDdjMDg3OTk0NzMxY2Q0NGYwODY3MTBlNzllOGMzZWJjNmUyY2I2MWVkYzVkM2UwNTg0OGFiNzMzZDk1ZWZlMmQwMjUyYTY5MWU4MTBjMTdmYTU3ZmQyZGQyOTYzNzRjOWJhMTdmZWE3MDQ2ODU2NzdmNDVkNjY4YTM4NmM4Y2E0MzNmYmJiNTZkM2JiZmI0M2E0ODllZDk1MThiMWM5YWIxM2NlNDk3YTFjZWM5MTQ2NzQ1M2JmZTUzMzE0NWEzMWEwOTVjMmRlNTQxMjU1MTQxNzY4Y2NjNmZkZmYzZmM3OTBiNTA1MGYxMTIyYzkzYzMwNDRhOTM0Njk0N2UxYjIzZTgxMjViZjdlZGJmMzhjNjRhNDI4NmRmYzFiODI5ZTk4M2RiMzExNzk1OWEyNTU5YThlZjk3Njg3YWI2NzNlMjMxYmUyMTNkODhlZGM2MzI2MzdiNThjZGIyZDY5YzUxZmJmNmJmODk0Y2ZmMzE5MjE2NzE4YjFlNjk2Zjc1Y2Q0MzY2ZjUzZGMyZTI4YjJhMDAwMTc5ODQyMDciOjAKKworUlNBIFBLQ1MxIFNpZ24gIzYgVmVyaWZ5CitkZXBlbmRzX29uOk1CRURUTFNfTUQ0X0M6TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9NRDQ6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiYjBlNjBkYzRkZmFmMGY2MzZhM2E0NDE0ZWFlMmQ3YmNlN2MzY2U1MDVhNDZlMzhmM2Y2NTRkODc2OWIzMWI3ODkxYmExOGY4OTY3MmZjZTIwNGJiYWM2ZTM3NjQzNTVlNjU0NDdjMDg3OTk0NzMxY2Q0NGYwODY3MTBlNzllOGMzZWJjNmUyY2I2MWVkYzVkM2UwNTg0OGFiNzMzZDk1ZWZlMmQwMjUyYTY5MWU4MTBjMTdmYTU3ZmQyZGQyOTYzNzRjOWJhMTdmZWE3MDQ2ODU2NzdmNDVkNjY4YTM4NmM4Y2E0MzNmYmJiNTZkM2JiZmI0M2E0ODllZDk1MThiMWM5YWIxM2NlNDk3YTFjZWM5MTQ2NzQ1M2JmZTUzMzE0NWEzMWEwOTVjMmRlNTQxMjU1MTQxNzY4Y2NjNmZkZmYzZmM3OTBiNTA1MGYxMTIyYzkzYzMwNDRhOTM0Njk0N2UxYjIzZTgxMjViZjdlZGJmMzhjNjRhNDI4NmRmYzFiODI5ZTk4M2RiMzExNzk1OWEyNTU5YThlZjk3Njg3YWI2NzNlMjMxYmUyMTNkODhlZGM2MzI2MzdiNThjZGIyZDY5YzUxZmJmNmJmODk0Y2ZmMzE5MjE2NzE4YjFlNjk2Zjc1Y2Q0MzY2ZjUzZGMyZTI4YjJhMDAwMTc5ODQyMDciOjAKKworUlNBIFBLQ1MxIFNpZ24gIzcgKE1ENSwgMjA0OCBiaXRzIFJTQSkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfc2lnbjoiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6TUJFRFRMU19SU0FfUEtDU19WMTU6TUJFRFRMU19NRF9NRDU6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiIzYmNmNjczYzNiMjdmNmUyZWNlNGJiOTdjN2EzNzE2MWU2YzZlZTc0MTllZjM2NmVmYzNjZmVlMGYxNWY0MTVmZjZkOWQ0MzkwOTM3Mzg2YzZmZWMxNzcxYWNiYTczZjI0ZWM2YjA0NjllYThiODgwODNmMGI0ZTFiNjA2OWQ3YmYyODZlNjdjZjk0MTgyYTU0ODY2MzEzN2U4MmE2ZTA5YzM1ZGUyYzI3Nzc5ZGEwNTAzZjFmNWJlZGZlYmFkZjJhODc1ZjE3NzYzYTA1NjRkZjRhNmQ5NDVhNWEzZTQ2YmM5MGZiNjkyYWYzYTU1MTA2YWFmYzZiNTc3NTg3NDU2ZmY4ZDQ5Y2ZkNWMyOTlkN2EyYjc3NmRiZTRjMWFlNzc3YjBmNjRhYTNiYWIyNzY4OWFmMzJkNmNjNzYxNTdjN2RjNjkwMGEzNDY5ZTE4YTdkOWI2YmZlNDk1MWQxMTA1YTA4ODY0NTc1ZTRmNGVjMDViM2UwNTNmOWI3YTJkNTY1M2FlMDg1ZTUwYTYzMzgwZDZiZGQ2ZjU4YWIzNzhkN2UwYTJiZTcwOGM1NTk4NDk4OTEzMTcwODlhYjA0YzgyZDhiYzU4OWVhMDg4YjkwYjExZGVhNWNmODU4NTZmZjdlNjA5Y2MxYWRiMWQ0MDNiZWVhZDRjMTI2ZmYyOTAyMSI6MAorCitSU0EgUEtDUzEgU2lnbiAjNyBWZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19NRDVfQzpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNTpNQkVEVExTX01EX01ENToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiIzYmNmNjczYzNiMjdmNmUyZWNlNGJiOTdjN2EzNzE2MWU2YzZlZTc0MTllZjM2NmVmYzNjZmVlMGYxNWY0MTVmZjZkOWQ0MzkwOTM3Mzg2YzZmZWMxNzcxYWNiYTczZjI0ZWM2YjA0NjllYThiODgwODNmMGI0ZTFiNjA2OWQ3YmYyODZlNjdjZjk0MTgyYTU0ODY2MzEzN2U4MmE2ZTA5YzM1ZGUyYzI3Nzc5ZGEwNTAzZjFmNWJlZGZlYmFkZjJhODc1ZjE3NzYzYTA1NjRkZjRhNmQ5NDVhNWEzZTQ2YmM5MGZiNjkyYWYzYTU1MTA2YWFmYzZiNTc3NTg3NDU2ZmY4ZDQ5Y2ZkNWMyOTlkN2EyYjc3NmRiZTRjMWFlNzc3YjBmNjRhYTNiYWIyNzY4OWFmMzJkNmNjNzYxNTdjN2RjNjkwMGEzNDY5ZTE4YTdkOWI2YmZlNDk1MWQxMTA1YTA4ODY0NTc1ZTRmNGVjMDViM2UwNTNmOWI3YTJkNTY1M2FlMDg1ZTUwYTYzMzgwZDZiZGQ2ZjU4YWIzNzhkN2UwYTJiZTcwOGM1NTk4NDk4OTEzMTcwODlhYjA0YzgyZDhiYzU4OWVhMDg4YjkwYjExZGVhNWNmODU4NTZmZjdlNjA5Y2MxYWRiMWQ0MDNiZWVhZDRjMTI2ZmYyOTAyMSI6MAorCitSU0EgUEtDUzEgU2lnbiAjOCAoUkFXLCAyMDQ4IGJpdHMgUlNBKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorcnNhX3BrY3MxX3NpZ25fcmF3OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjoiMTIzNDU2Nzg5MGRlYWRiZWVmIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjYwNWJhZjk0N2MwZGU0OWU0ZjZhMGRmYjk0YTQzYWUzMThkNWRmOGVkMjBiYTRiYTVhMzdhNzNmYjAwOWM1YzllNWNjZThiNzBhMjViMWM3NTgwZjM4OWYwZDcwOTI0ODVjZGZhMDIyMDhiNzBkMzM0ODJlZGYwN2E3ZWFmZWJkYzU0ODYyY2EwZTAzOTZhNWE3ZDA5OTkxYjk3NTNlYjFmZmI2MDkxOTcxYmI1Nzg5YzZiMTIxYWJiY2QwYTNjYmFhMzk5NjlmYTdjMjgxNDZmY2U5NmM2ZDAzMjcyZTM3OTNlNWJlOGY1YWJmYTlhZmNiZWJiOTg2ZDdiMzA1MDYwNGEyYWY0ZDNhNDBmYTZjMDAzNzgxYTUzOWE2MDI1OWQxZTg0ZjEzMzIyZGE5ZTUzOGE0OWMzNjliODNlNzI4NmJmN2QzMGI2NGJiYjc3MzUwNjcwNWRhNWQ1ZDU0ODNhNTYzYTFmZmFjYzkwMmZiNzVjOWE3NTFiMWU4M2NkYzdhNmRiMDQ3MDA1Njg4M2Y0OGI1YTU0NDZiNDNiMWQxODBlYTEyYmExMWE2YThkOTNiM2IzMmEzMDE1NmI2MDg0YjdmYjE0Mjk5OGEyYTBkMjgwMTRiODQwOThlY2U3ZDlkNWU0ZDU1Y2MzNDJjYTI2ZjVhMDE2N2E2NzlkZWM4IgorCitSU0EgUEtDUzEgU2lnbiAjOCBWZXJpZnkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK3JzYV9wa2NzMV92ZXJpZnlfcmF3OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjoiMTIzNDU2Nzg5MGRlYWRiZWVmIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2MDViYWY5NDdjMGRlNDllNGY2YTBkZmI5NGE0M2FlMzE4ZDVkZjhlZDIwYmE0YmE1YTM3YTczZmIwMDljNWM5ZTVjY2U4YjcwYTI1YjFjNzU4MGYzODlmMGQ3MDkyNDg1Y2RmYTAyMjA4YjcwZDMzNDgyZWRmMDdhN2VhZmViZGM1NDg2MmNhMGUwMzk2YTVhN2QwOTk5MWI5NzUzZWIxZmZiNjA5MTk3MWJiNTc4OWM2YjEyMWFiYmNkMGEzY2JhYTM5OTY5ZmE3YzI4MTQ2ZmNlOTZjNmQwMzI3MmUzNzkzZTViZThmNWFiZmE5YWZjYmViYjk4NmQ3YjMwNTA2MDRhMmFmNGQzYTQwZmE2YzAwMzc4MWE1MzlhNjAyNTlkMWU4NGYxMzMyMmRhOWU1MzhhNDljMzY5YjgzZTcyODZiZjdkMzBiNjRiYmI3NzM1MDY3MDVkYTVkNWQ1NDgzYTU2M2ExZmZhY2M5MDJmYjc1YzlhNzUxYjFlODNjZGM3YTZkYjA0NzAwNTY4ODNmNDhiNWE1NDQ2YjQzYjFkMTgwZWExMmJhMTFhNmE4ZDkzYjNiMzJhMzAxNTZiNjA4NGI3ZmIxNDI5OThhMmEwZDI4MDE0Yjg0MDk4ZWNlN2Q5ZDVlNGQ1NWNjMzQyY2EyNmY1YTAxNjdhNjc5ZGVjOCI6MAorCitSU0EgUEtDUzEgU2lnbiAjOCBWZXJpZnkgKFdyb25nIHJhdyBoYXNoKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorcnNhX3BrY3MxX3ZlcmlmeV9yYXc6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOiIxMjM0NTY3ODkwZGVhZGNhZmUiOk1CRURUTFNfUlNBX1BLQ1NfVjE1OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjYwNWJhZjk0N2MwZGU0OWU0ZjZhMGRmYjk0YTQzYWUzMThkNWRmOGVkMjBiYTRiYTVhMzdhNzNmYjAwOWM1YzllNWNjZThiNzBhMjViMWM3NTgwZjM4OWYwZDcwOTI0ODVjZGZhMDIyMDhiNzBkMzM0ODJlZGYwN2E3ZWFmZWJkYzU0ODYyY2EwZTAzOTZhNWE3ZDA5OTkxYjk3NTNlYjFmZmI2MDkxOTcxYmI1Nzg5YzZiMTIxYWJiY2QwYTNjYmFhMzk5NjlmYTdjMjgxNDZmY2U5NmM2ZDAzMjcyZTM3OTNlNWJlOGY1YWJmYTlhZmNiZWJiOTg2ZDdiMzA1MDYwNGEyYWY0ZDNhNDBmYTZjMDAzNzgxYTUzOWE2MDI1OWQxZTg0ZjEzMzIyZGE5ZTUzOGE0OWMzNjliODNlNzI4NmJmN2QzMGI2NGJiYjc3MzUwNjcwNWRhNWQ1ZDU0ODNhNTYzYTFmZmFjYzkwMmZiNzVjOWE3NTFiMWU4M2NkYzdhNmRiMDQ3MDA1Njg4M2Y0OGI1YTU0NDZiNDNiMWQxODBlYTEyYmExMWE2YThkOTNiM2IzMmEzMDE1NmI2MDg0YjdmYjE0Mjk5OGEyYTBkMjgwMTRiODQwOThlY2U3ZDlkNWU0ZDU1Y2MzNDJjYTI2ZjVhMDE2N2E2NzlkZWM4IjpNQkVEVExTX0VSUl9SU0FfVkVSSUZZX0ZBSUxFRAorCitSU0EgUEtDUzEgU2lnbiAjOSAoSW52YWxpZCBEaWdlc3QgdHlwZSkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX3NpZ246IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOk1CRURUTFNfUlNBX1BLQ1NfVjE1OjI1NToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjNiY2Y2NzNjM2IyN2Y2ZTJlY2U0YmI5N2M3YTM3MTYxZTZjNmVlNzQxOWVmMzY2ZWZjM2NmZWUwZjE1ZjQxNWZmNmQ5ZDQzOTA5MzczODZjNmZlYzE3NzFhY2JhNzNmMjRlYzZiMDQ2OWVhOGI4ODA4M2YwYjRlMWI2MDY5ZDdiZjI4NmU2N2NmOTQxODJhNTQ4NjYzMTM3ZTgyYTZlMDljMzVkZTJjMjc3NzlkYTA1MDNmMWY1YmVkZmViYWRmMmE4NzVmMTc3NjNhMDU2NGRmNGE2ZDk0NWE1YTNlNDZiYzkwZmI2OTJhZjNhNTUxMDZhYWZjNmI1Nzc1ODc0NTZmZjhkNDljZmQ1YzI5OWQ3YTJiNzc2ZGJlNGMxYWU3NzdiMGY2NGFhM2JhYjI3Njg5YWYzMmQ2Y2M3NjE1N2M3ZGM2OTAwYTM0NjllMThhN2Q5YjZiZmU0OTUxZDExMDVhMDg4NjQ1NzVlNGY0ZWMwNWIzZTA1M2Y5YjdhMmQ1NjUzYWUwODVlNTBhNjMzODBkNmJkZDZmNThhYjM3OGQ3ZTBhMmJlNzA4YzU1OTg0OTg5MTMxNzA4OWFiMDRjODJkOGJjNTg5ZWEwODhiOTBiMTFkZWE1Y2Y4NTg1NmZmN2U2MDljYzFhZGIxZDQwM2JlZWFkNGMxMjZmZjI5MDIxIjpNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKworUlNBIFBLQ1MxIFNpZ24gIzkgVmVyaWZ5IChJbnZhbGlkIERpZ2VzdCB0eXBlKQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5OiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyNTU6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiM2JjZjY3M2MzYjI3ZjZlMmVjZTRiYjk3YzdhMzcxNjFlNmM2ZWU3NDE5ZWYzNjZlZmMzY2ZlZTBmMTVmNDE1ZmY2ZDlkNDM5MDkzNzM4NmM2ZmVjMTc3MWFjYmE3M2YyNGVjNmIwNDY5ZWE4Yjg4MDgzZjBiNGUxYjYwNjlkN2JmMjg2ZTY3Y2Y5NDE4MmE1NDg2NjMxMzdlODJhNmUwOWMzNWRlMmMyNzc3OWRhMDUwM2YxZjViZWRmZWJhZGYyYTg3NWYxNzc2M2EwNTY0ZGY0YTZkOTQ1YTVhM2U0NmJjOTBmYjY5MmFmM2E1NTEwNmFhZmM2YjU3NzU4NzQ1NmZmOGQ0OWNmZDVjMjk5ZDdhMmI3NzZkYmU0YzFhZTc3N2IwZjY0YWEzYmFiMjc2ODlhZjMyZDZjYzc2MTU3YzdkYzY5MDBhMzQ2OWUxOGE3ZDliNmJmZTQ5NTFkMTEwNWEwODg2NDU3NWU0ZjRlYzA1YjNlMDUzZjliN2EyZDU2NTNhZTA4NWU1MGE2MzM4MGQ2YmRkNmY1OGFiMzc4ZDdlMGEyYmU3MDhjNTU5ODQ5ODkxMzE3MDg5YWIwNGM4MmQ4YmM1ODllYTA4OGI5MGIxMWRlYTVjZjg1ODU2ZmY3ZTYwOWNjMWFkYjFkNDAzYmVlYWQ0YzEyNmZmMjkwMjEiOk1CRURUTFNfRVJSX1JTQV9CQURfSU5QVVRfREFUQQorCitSU0EgUEtDUzEgU2lnbiAjOCAoSW52YWxpZCBwYWRkaW5nIHR5cGUpCittYmVkdGxzX3JzYV9wa2NzMV9zaWduOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjoyOk1CRURUTFNfTURfTUQ1OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiM2JjZjY3M2MzYjI3ZjZlMmVjZTRiYjk3YzdhMzcxNjFlNmM2ZWU3NDE5ZWYzNjZlZmMzY2ZlZTBmMTVmNDE1ZmY2ZDlkNDM5MDkzNzM4NmM2ZmVjMTc3MWFjYmE3M2YyNGVjNmIwNDY5ZWE4Yjg4MDgzZjBiNGUxYjYwNjlkN2JmMjg2ZTY3Y2Y5NDE4MmE1NDg2NjMxMzdlODJhNmUwOWMzNWRlMmMyNzc3OWRhMDUwM2YxZjViZWRmZWJhZGYyYTg3NWYxNzc2M2EwNTY0ZGY0YTZkOTQ1YTVhM2U0NmJjOTBmYjY5MmFmM2E1NTEwNmFhZmM2YjU3NzU4NzQ1NmZmOGQ0OWNmZDVjMjk5ZDdhMmI3NzZkYmU0YzFhZTc3N2IwZjY0YWEzYmFiMjc2ODlhZjMyZDZjYzc2MTU3YzdkYzY5MDBhMzQ2OWUxOGE3ZDliNmJmZTQ5NTFkMTEwNWEwODg2NDU3NWU0ZjRlYzA1YjNlMDUzZjliN2EyZDU2NTNhZTA4NWU1MGE2MzM4MGQ2YmRkNmY1OGFiMzc4ZDdlMGEyYmU3MDhjNTU5ODQ5ODkxMzE3MDg5YWIwNGM4MmQ4YmM1ODllYTA4OGI5MGIxMWRlYTVjZjg1ODU2ZmY3ZTYwOWNjMWFkYjFkNDAzYmVlYWQ0YzEyNmZmMjkwMjEiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIFNpZ24gIzggVmVyaWZ5IChJbnZhbGlkIHBhZGRpbmcgdHlwZSkKK21iZWR0bHNfcnNhX3BrY3MxX3ZlcmlmeToiNTk3NzlmZDJhMzllNTY2NDBjNGZjMWU2N2I2MGFlZmZjZWNkNzhhZWQ3YWQyYmRmYTQ2NGU5M2QwNDE5OGQ0ODQ2NmI4ZGE3NDQ1ZjI1YmZhMTlkYjI4NDRlZGQ1YzhmNTM5Y2Y3NzJjYzEzMmI0ODMxNjlkMzkwZGIyOGE0M2JjNGVlMGYwMzhmNjU2OGZmYzg3NDQ3NzQ2Y2I3MmZlZmFjMmQ2ZDkwZWUzMTQzYTkxNWFjNDY4ODAyODgwNTkwNWE2OGViOGY4YTk2Njc0YjA5M2M0OTVlZGRkODcwNDQ2MWVhYTJiMzQ1ZWZiYjJhZDY5MzBhY2Q4MDIzZjg3MCI6MTpNQkVEVExTX01EX01ENToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiIzYmNmNjczYzNiMjdmNmUyZWNlNGJiOTdjN2EzNzE2MWU2YzZlZTc0MTllZjM2NmVmYzNjZmVlMGYxNWY0MTVmZjZkOWQ0MzkwOTM3Mzg2YzZmZWMxNzcxYWNiYTczZjI0ZWM2YjA0NjllYThiODgwODNmMGI0ZTFiNjA2OWQ3YmYyODZlNjdjZjk0MTgyYTU0ODY2MzEzN2U4MmE2ZTA5YzM1ZGUyYzI3Nzc5ZGEwNTAzZjFmNWJlZGZlYmFkZjJhODc1ZjE3NzYzYTA1NjRkZjRhNmQ5NDVhNWEzZTQ2YmM5MGZiNjkyYWYzYTU1MTA2YWFmYzZiNTc3NTg3NDU2ZmY4ZDQ5Y2ZkNWMyOTlkN2EyYjc3NmRiZTRjMWFlNzc3YjBmNjRhYTNiYWIyNzY4OWFmMzJkNmNjNzYxNTdjN2RjNjkwMGEzNDY5ZTE4YTdkOWI2YmZlNDk1MWQxMTA1YTA4ODY0NTc1ZTRmNGVjMDViM2UwNTNmOWI3YTJkNTY1M2FlMDg1ZTUwYTYzMzgwZDZiZGQ2ZjU4YWIzNzhkN2UwYTJiZTcwOGM1NTk4NDk4OTEzMTcwODlhYjA0YzgyZDhiYzU4OWVhMDg4YjkwYjExZGVhNWNmODU4NTZmZjdlNjA5Y2MxYWRiMWQ0MDNiZWVhZDRjMTI2ZmYyOTAyMSI6TUJFRFRMU19FUlJfUlNBX0lOVkFMSURfUEFERElORworCitSU0EgUEtDUzEgRW5jcnlwdCAjMQorZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdDoiNEU2MzZBRjk4RTQwRjNBRENGQ0NCNjk4RjRFODBCOUYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6ImIwYzBiMTkzYmE0YTViNDUwMmJmYWNkMWE5YzI2OTdkYTU1MTBmM2UzYWI3Mjc0Y2Y0MDQ0MThhZmQyYzYyYzg5Yjk4ZDgzYmJjMjFjOGMxYmYxYWZlNmQ4YmY0MDQyNWUwNTNlOWMwM2UwM2EzYmUwZWRiZTFlZGEwNzNmYWRlMWNjMjg2Y2MwMzA1YTQ5M2Q5OGZlNzk1NjM0YzNjYWQ3ZmViNTEzZWRiNzQyZDY2ZDkxMGM4N2QwN2Y2YjAwNTVjMzQ4OGJiMjYyYjVmZDFjZTg3NDdhZjY0ODAxZmIzOWQyZDNhM2U1NzA4NmZmZTU1YWI4ZDBhMmNhODY5NzU2MjlhMGY4NTc2N2E0OTkwYzUzMmE3YzJkYWIxNjQ3OTk3ZWJiMjM0ZDBiMjhhMDAwOGJmZWJmYzkwNWU3YmE1YjMwYjYwNTY2YTVlMDE5MDQxNzQ2NWVmZGJmNTQ5OTM0YjhmMGM1YzlmMzZiN2M1YjYzNzNhNDdhZTU1M2NlZDA2MDhhMTYxYjFiNzBkZmE1MDkzNzVjZjdhMzU5ODIyM2E2ZDdiN2ExZDFhMDZhYzc0ZDM0NWE5YmI3YzBlNDRjODM4ODg1OGE0ZjFkODExNWYyYmQ3NjlmZmE2OTAyMDM4NWZhMjg2MzAyYzgwZTk1MGY5ZTI3NTEzMDg2NjZjIjowCisKK1JTQSBQS0NTMSBEZWNyeXB0ICMxIChWZXJpZnkpCitkZXBlbmRzX29uOk1CRURUTFNfUEtDUzFfVjE1CittYmVkdGxzX3JzYV9wa2NzMV9kZWNyeXB0OiJhNDJlZGE0MWU1NjIzNWU2NjZlN2ZhYWE3NzEwMDE5N2Y2NTcyODhhMWJmMTgzZTQ4MjBmMGMzN2NlMmM0NTZiOTYwMjc4ZDYwMDNlMGJiY2Q0YmU0YTk2OWY4ZThmZDkyMzFlMWY0OTI0MTRmMDBlZDA5ODQ0OTk0Yzg2ZWMzMmRiN2NkZTNiZWM3ZjBjM2RiZjZhZTU1YmFlYjI3MTJmYTYwOWY1ZmMzMjA3YTgyNGViM2RhY2UzMTg0OWNkNmE2MDg0MzE4NTIzOTEyYmNjYjg0Y2Y0MmUzYzZkNmQxNjg1MTMxZDY5YmI1NDVhY2VjODI3ZDJiMGRmZGQ1NTY4YjdkY2M0ZjVhMTFkNjkxNjU4M2ZlZmE2ODlkMzY3ZjhjOWUxZDk1ZGNkMjI0MDg5NWE5NDcwYjBjMTczMGY5N2NkNmU4NTQ2ODYwYmQyNTQ4MDE3NjlmNTRiZTk2ZTE2MzYyZGRjYmYzNGQ1NjAzNTAyODg5MDE5OWUwZjQ4ZGIzODY0MmNiNjZhNDE4MWUwMjhhNjQ0M2E0MDRmZWEyODRjZTAyYjQ2MTRiNjgzMzY3ZDQwODc0ZTUwNTYxMWQyMzE0MmQ0OWYwNmZlZWE4MzFkNTJkMzQ3YjEzNjEwYjQxM2M0ZWZjNDNhNmRlOWYwYjA4ZDJhOTUxZGM1MDNiNiI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjEwMDA6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjowCisKK1JTQSBQS0NTMSBFbmNyeXB0ICMyIChEYXRhIHRvbyBsYXJnZSkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQ6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiJhNDJlZGE0MWU1NjIzNWU2NjZlN2ZhYWE3NzEwMDE5N2Y2NTcyODhhMWJmMTgzZTQ4MjBmMGMzN2NlMmM0NTZiOTYwMjc4ZDYwMDNlMGJiY2Q0YmU0YTk2OWY4ZThmZDkyMzFlMWY0OTI0MTRmMDBlZDA5ODQ0OTk0Yzg2ZWMzMmRiN2NkZTNiZWM3ZjBjM2RiZjZhZTU1YmFlYjI3MTJmYTYwOWY1ZmMzMjA3YTgyNGViM2RhY2UzMTg0OWNkNmE2MDg0MzE4NTIzOTEyYmNjYjg0Y2Y0MmUzYzZkNmQxNjg1MTMxZDY5YmI1NDVhY2VjODI3ZDJiMGRmZGQ1NTY4YjdkY2M0ZjVhMTFkNjkxNjU4M2ZlZmE2ODlkMzY3ZjhjOWUxZDk1ZGNkMjI0MDg5NWE5NDcwYjBjMTczMGY5N2NkNmU4NTQ2ODYwYmQyNTQ4MDE3NjlmNTRiZTk2ZTE2MzYyZGRjYmYzNGQ1NjAzNTAyODg5MDE5OWUwZjQ4ZGIzODY0MmNiNjZhNDE4MWUwMjhhNjQ0M2E0MDRmZWEyODRjZTAyYjQ2MTRiNjgzMzY3ZDQwODc0ZTUwNTYxMWQyMzE0MmQ0OWYwNmZlZWE4MzFkNTJkMzQ3YjEzNjEwYjQxM2M0ZWZjNDNhNmRlOWYwYjA4ZDJhOTUxZGM1MDNiNiI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBQS0NTMSBEZWNyeXB0ICMyIChEYXRhIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQ6ImRlYWRiZWFmY2FmZWRlYWRiZWVmZmVkY2JhOTg3NiI6TUJFRFRMU19SU0FfUEtDU19WMTU6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjEwMDA6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjpNQkVEVExTX0VSUl9SU0FfUFJJVkFURV9GQUlMRUQgKyBNQkVEVExTX0VSUl9NUElfQkFEX0lOUFVUX0RBVEEKKworUlNBIFBLQ1MxIEVuY3J5cHQgIzMgKEludmFsaWQgcGFkZGluZyBtb2RlKQorbWJlZHRsc19yc2FfcGtjczFfZW5jcnlwdDoiNEU2MzZBRjk4RTQwRjNBRENGQ0NCNjk4RjRFODBCOUYiOjI6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoiYTQyZWRhNDFlNTYyMzVlNjY2ZTdmYWFhNzcxMDAxOTdmNjU3Mjg4YTFiZjE4M2U0ODIwZjBjMzdjZTJjNDU2Yjk2MDI3OGQ2MDAzZTBiYmNkNGJlNGE5NjlmOGU4ZmQ5MjMxZTFmNDkyNDE0ZjAwZWQwOTg0NDk5NGM4NmVjMzJkYjdjZGUzYmVjN2YwYzNkYmY2YWU1NWJhZWIyNzEyZmE2MDlmNWZjMzIwN2E4MjRlYjNkYWNlMzE4NDljZDZhNjA4NDMxODUyMzkxMmJjY2I4NGNmNDJlM2M2ZDZkMTY4NTEzMWQ2OWJiNTQ1YWNlYzgyN2QyYjBkZmRkNTU2OGI3ZGNjNGY1YTExZDY5MTY1ODNmZWZhNjg5ZDM2N2Y4YzllMWQ5NWRjZDIyNDA4OTVhOTQ3MGIwYzE3MzBmOTdjZDZlODU0Njg2MGJkMjU0ODAxNzY5ZjU0YmU5NmUxNjM2MmRkY2JmMzRkNTYwMzUwMjg4OTAxOTllMGY0OGRiMzg2NDJjYjY2YTQxODFlMDI4YTY0NDNhNDA0ZmVhMjg0Y2UwMmI0NjE0YjY4MzM2N2Q0MDg3NGU1MDU2MTFkMjMxNDJkNDlmMDZmZWVhODMxZDUyZDM0N2IxMzYxMGI0MTNjNGVmYzQzYTZkZTlmMGIwOGQyYTk1MWRjNTAzYjYiOk1CRURUTFNfRVJSX1JTQV9JTlZBTElEX1BBRERJTkcKKworUlNBIFBLQ1MxIERlY3J5cHQgIzMgKEludmFsaWQgcGFkZGluZyBtb2RlKQorbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdDoiYTQyZWRhNDFlNTYyMzVlNjY2ZTdmYWFhNzcxMDAxOTdmNjU3Mjg4YTFiZjE4M2U0ODIwZjBjMzdjZTJjNDU2Yjk2MDI3OGQ2MDAzZTBiYmNkNGJlNGE5NjlmOGU4ZmQ5MjMxZTFmNDkyNDE0ZjAwZWQwOTg0NDk5NGM4NmVjMzJkYjdjZGUzYmVjN2YwYzNkYmY2YWU1NWJhZWIyNzEyZmE2MDlmNWZjMzIwN2E4MjRlYjNkYWNlMzE4NDljZDZhNjA4NDMxODUyMzkxMmJjY2I4NGNmNDJlM2M2ZDZkMTY4NTEzMWQ2OWJiNTQ1YWNlYzgyN2QyYjBkZmRkNTU2OGI3ZGNjNGY1YTExZDY5MTY1ODNmZWZhNjg5ZDM2N2Y4YzllMWQ5NWRjZDIyNDA4OTVhOTQ3MGIwYzE3MzBmOTdjZDZlODU0Njg2MGJkMjU0ODAxNzY5ZjU0YmU5NmUxNjM2MmRkY2JmMzRkNTYwMzUwMjg4OTAxOTllMGY0OGRiMzg2NDJjYjY2YTQxODFlMDI4YTY0NDNhNDA0ZmVhMjg0Y2UwMmI0NjE0YjY4MzM2N2Q0MDg3NGU1MDU2MTFkMjMxNDJkNDlmMDZmZWVhODMxZDUyZDM0N2IxMzYxMGI0MTNjNGVmYzQzYTZkZTlmMGIwOGQyYTk1MWRjNTAzYjYiOjI6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjEwMDA6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjpNQkVEVExTX0VSUl9SU0FfSU5WQUxJRF9QQURESU5HCisKK1JTQSBQS0NTMSBEZWNyeXB0ICM0IChPdXRwdXQgYnVmZmVyIHRvbyBzbWFsbCkKK2RlcGVuZHNfb246TUJFRFRMU19QS0NTMV9WMTUKK21iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQ6ImE0MmVkYTQxZTU2MjM1ZTY2NmU3ZmFhYTc3MTAwMTk3ZjY1NzI4OGExYmYxODNlNDgyMGYwYzM3Y2UyYzQ1NmI5NjAyNzhkNjAwM2UwYmJjZDRiZTRhOTY5ZjhlOGZkOTIzMWUxZjQ5MjQxNGYwMGVkMDk4NDQ5OTRjODZlYzMyZGI3Y2RlM2JlYzdmMGMzZGJmNmFlNTViYWViMjcxMmZhNjA5ZjVmYzMyMDdhODI0ZWIzZGFjZTMxODQ5Y2Q2YTYwODQzMTg1MjM5MTJiY2NiODRjZjQyZTNjNmQ2ZDE2ODUxMzFkNjliYjU0NWFjZWM4MjdkMmIwZGZkZDU1NjhiN2RjYzRmNWExMWQ2OTE2NTgzZmVmYTY4OWQzNjdmOGM5ZTFkOTVkY2QyMjQwODk1YTk0NzBiMGMxNzMwZjk3Y2Q2ZTg1NDY4NjBiZDI1NDgwMTc2OWY1NGJlOTZlMTYzNjJkZGNiZjM0ZDU2MDM1MDI4ODkwMTk5ZTBmNDhkYjM4NjQyY2I2NmE0MTgxZTAyOGE2NDQzYTQwNGZlYTI4NGNlMDJiNDYxNGI2ODMzNjdkNDA4NzRlNTA1NjExZDIzMTQyZDQ5ZjA2ZmVlYTgzMWQ1MmQzNDdiMTM2MTBiNDEzYzRlZmM0M2E2ZGU5ZjBiMDhkMmE5NTFkYzUwM2I2IjpNQkVEVExTX1JTQV9QS0NTX1YxNToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTU6IjRFNjM2QUY5OEU0MEYzQURDRkNDQjY5OEY0RTgwQjlGIjpNQkVEVExTX0VSUl9SU0FfT1VUUFVUX1RPT19MQVJHRQorCitSU0EgQ2hlY2sgZW1wdHkgcHJpdmF0ZSBrZXkKK3JzYV9jaGVja19wcml2a2V5X251bGw6CisKK1JTQSBDaGVjayBQcml2YXRlIGtleSAjMSAoQ29ycmVjdCkKK21iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXk6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6MAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzIgKE5vIFApCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6IiI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFByaXZhdGUga2V5ICMzIChObyBRKQorbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiIjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQcml2YXRlIGtleSAjNCAoTm8gTikKK21iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXk6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiIiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQcml2YXRlIGtleSAjNSAoTm8gRSkKK21iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXk6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IiI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzYgKE5vIEQpCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzcgKE5vIERQKQorbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleToyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQcml2YXRlIGtleSAjOCAoTm8gRFEpCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFByaXZhdGUga2V5ICM5IChObyBRUCkKK21iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXk6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHJpdmF0ZSBrZXkgIzEwIChJbmNvcnJlY3QpCittYmVkdGxzX3JzYV9jaGVja19wcml2a2V5OjIwNDg6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0MiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICMxIChDb3JyZWN0KQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzIgKEV2ZW4gTikKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNDAiOjE2OiIzIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjMyAoRXZlbiBFKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0MCI6MTY6IjY1NTM2IjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjNCAoTiBleGFjdGx5IDEyOCBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJmZWRjYmE5ODc2NTQzMjEwZGVhZGJlZWZjYWZlNDMyMSI6MTY6IjMiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzUgKE4gc21hbGxlciB0aGFuIDEyOCBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiI3ZWRjYmE5ODc2NTQzMjEwZGVhZGJlZWZjYWZlNDMyMSI6MTY6IjMiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICM2IChOIGV4YWN0bHkgODE5MiBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiI4OEY0ODA3NUJGMjlFOTVDMUM2QUU4NzE2Njc4Qjc0RTk1N0I2OUNDMkU0OTcwOEMxNjBDNjM0M0FBRDJGMDc2RDI1Mzk3QUNFNzQyMjAzMTFFRDE4QUVFQjY4MUY0NjM2MTFCMzM0MEMzOTQ1Q0FBRUFEM0FDQzYxNkUwOEEyNUE1NTY4M0EzMjk3OUJENTVFQTVEQUI3NjMwQUYzOTM4ODY4OTZGMTFEREM1RjA3RTE1RURGOTQ5MzI0Q0YwRjBCMkE1QzBFODVERkEyMzE2NzE5MzE4MkQxQTQzMDc5REM4NjQ1RjZDMkMwMjk2MjlGNDc1NTc1ODAyRjdEMzI2REU1QkQ4OTFBOUM1Rjg0QTQzM0Q0NTE1NDE4MUVDMDU2ODVBNEIzNjhBNUI2NDM0Nzc1QTAwQUJDNkIwQTA0NjQ3RDQ1OThDRUVFNTY2QjU1MjIzMEY2OTFDOThDQTMwQjQwMkE3NkM2ODZBOTRCMzczQ0NEMkY2MEVGQTM4NzhBODY3QkI1RjU4NUQwODhFMjdDNTA3OTM3MjYyRDA5OEE0NzdCOTIxOEJFN0MwM0IyRTRDMTAyRDI0NENBNzAxNjQ1RjE4MjdDRDk0N0U1RTc5NjQ0NjM3OEI4NDg4NjJFNjg5RjBEMTc3M0Y3NTIwNTY4NDFBMUYwRUVDRTdDQUI3NDkyMUE0MkRCRjJFRjI2NEFEQ0Y0QUJFMDVBMTI0MkU1RjYyOUE2NTdBMkQ2Nzk1OEEyREFDOUEyMjQ1MDc0QTM3MDk5QjQ1MDY0NzIzQUJFMjEyNDEwNTgyNTI2MzJDMkJBNkZFODVBQjFDNzVGRjMxMDg5MUI4NEM5QzQwQUI2NDZGRTFEOTBCQzcxNkZCM0E0QjU2REEzRUEyNUNBMzk3QzA0Qjk5NEY3QzZBRDFERDBDQjlFOTk0Q0E2QjgzNUY3ODMwRjRGNEUwRjk3NkJCRUE1QUU4NTU2QkM3QzkwQjNFNTBFMjFDMTlBRDFGNkJDNEE4RkYxNUYyOTA5RDlDQzVGM0RBNTMzQkFERkY1MEY0ODc4NjlENjMxQzNFMzRENjk2MzZCNEMyNUE1NTEyN0VGNUI3MTVGMkZDMDU2NTczNEIzOERGOTk2RDE5NzBFNTZGN0Y2NEVCRUNCOUQwMEE1ODdBQUVDNjA4RjJEM0FBQTUxRTY2QkY1M0U5MkMzMDk2QkY3OEQxRENCQ0UxQTY0NUZBNEYwNTQyRTZGNjhFNUE5NEFBQTZFODM5Rjc1NjIwRkFCRUQ1RDJCQ0Y0MEFCOEVBRjk1RjgzOEJGQTk2MjQyOUYyODE1Nzg4ODJERjBGMjcyMUMyN0M4OTA1QzlFNzc2QjFEMzI1MUZDMDY2QThCQzY0QzBDRTdGQkEyQjhFMjFGNjVFRjY3MzlBQjZGMTlFQzJBQjA3ODE3REZGMDNEQUI3Qzg0NkFCNUNDODZDMTAzNjQyRDc2NjRBODVEQzJEODQ2QTgwMDRDRDZBMTQ0QzcyQ0NDQUM4NkRCNTkwMUEwNDczMjQ5MjdCODBFMjgxRjVGNzMxNUZBMkY5MDgzQkRFMERCN0FBNDZEQzA1NUUzNkJCNzNGQjZEQkQzQTE0NzU5RDA2Q0JCRThENTdDQkMyMTNDNEQ1NURFNDQ3ODY3OUUwQTU5MDJDODY1NUJFMTM5MUMwRTg4RDJCMUZCRDU3RTkyMzJBMkNFQkM2NzU2OUVDRDk0RTRCRjBGQ0M2QzAwM0Y5QUE1MUEyQTVFNkVFMDg0QTQ2REFFNjVFNTI0MDBBNzI3Rjk3MTNEMjlFOTJDRDZDQTM3RkQ1OTk1OThCM0Y2Nzc2MjRBMkE0ODRBOEIzNkI5OEVGRUFENjYyQzBBMjNCQzFEOTI4MEVGMkEzMUY4ODcwNjVFQjIwQTkzQjQxRjdBMjY0RUNGQTY1QjM1NTVGM0U0MDA5MjcwMTgxODZFQUEyRDRGMDBDNkI3QUIxQkNFRDVGODkzRDY0NDc4MTc3NTkyQzdGMkI5NDUzMDdBQjQ3NEQ3RUM3RkYyRTdFNTU4MzRDQzc2M0JFRjgxREE5QkQ3MEZCM0Q0MjNBRTVBREI4NkIzMzY3MzRDOEEzQkVDOTBDRUIwNTQzOEI1QkEwMzBEMEQzMERFQzE0NDJEMkVCMDg0NTA0ODBGQkFFMDkwRkZBMUE1QURENzQ4QTQxNUJEQ0RFNDUwOTRFNzkyNDIwRjBBRjk0QkNBMEE4MEEyMDk2RDFBNDc4RDM0MjhBMjE0QTdFNjhDMEYwN0Y1OEM2RkIyMzJFQ0MzRDhCODIxQUUyOUFFNzZFMTNFQjc1MTE5M0Y2RUNBNjcwMDE2RDU0RjNENzk2OTM3RERCQjg5MDAwNjJFRjExNkNDQTNGNUIzQUVDQTYxODI3Mjg3NTMzNkM5QzA1MEZCQzBGQzdFREQ1Qjg4RDg1REEwMDYxRDIxRTE3NkUxNDE5Q0Y1NzM2MjlCRTdCMDQ5NkU3NjFFQUQ0NUZFMzJCNTlFQjAwRDQ3Q0REMTc4QUM4RjhFQzhENkYyNkRFRDM0Rjc1NzZDRDkzODQyMkUxOEU5MzZGMTZBNzA0QjQ4M0E0OEVFM0JFQTU5RDk1RjY4ODEzNjExOTg5NDkzMEVDOEU5MjgyRTU5NzQ3NDBDRjAzMURGOERCQjA3RUIwOEYyREEwQUNDQURFQ0UxNUE2QTU3NTAyODkwRjRBMDM3NDBFNjBCRCI6MTY6IjAxMDAwMSI6MAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjNyAoTiBsYXJnZXIgdGhhbiA4MTkyIGJpdHMpCittYmVkdGxzX3JzYV9jaGVja19wdWJrZXk6MTY6IjAxNjMxQ0Q4M0YzRjJENjdGQTUyRTEzQjQ0NDE2RUE2NTA0M0EzMjJFQ0Q2NTQ2NzU1OEVBQ0Q0QzZCNkQ5MkRBNzQ3MUQyREJENThFNjkyMUY5NDY1QzQ5MDBFOTJERkM2RUIzNUM5MDYzNzI4NUE3RTFGM0QyN0MxQzMyRkQ2QTVDQjMyNEQ4MjUzQzZCMkU0ODBCNjNGNjZFM0IwOUY0MzAwQzNFNjgzMDExQzc4MDNCREVBRDY4MkYwRjU1NDczRkM4QTE4NzczNDU3M0ExMUVDRENFODAyMDIyRjUzOUJDMjA3NEU5NDcwM0MyM0U0OEZGOEFFMzU3MDIzNTJFNzBBRjkyMUI0MkU2QTE0M0EzRUZFRTIwREY3N0E5N0FBNzAzQUEyNzFDRTk2RUI3ODA2MjQ1MkQ4N0E0QURDQUNGODNGRkI5NjgzODE4QkYyRUQyMzREMEVDRkIxQjkzNTgyNzcwODA1MEM0RDAwNzIxNUQ3QTAyODE1Mjc5ODA0NUFGNkEwQjc0MUE3QjIyRjNGQ0NFQkMyNkQyODVCOUFBMjJDRUY4NTg4NTg3MDJCQUU3RDk0NUZBMEM0NUUyRDhBQURGRjJGRDBBNjRERjAyQzI0MUY4NzFDNzk5QUQ3MzczOEU2MjZEOUE2RDRCRkZCQ0UwMDBDNDA4N0YwQ0U3NEVGMjE1MjY0MDJGRENEMDc2NDkxNzUxMjI2OTdGRDAxMDQxQjg0QUQwQTNGRURBQkQ1QzI1RTk1MzY4NkIyMjcyRjhDOEI3NDhBNDg2RjU0Q0I3NjdBMUM3OUNBNDk5QjJDOUEzMDBBQzhBMjE0QTBCRkEwNjI4MEE5MjM1RDVCN0FGQjhBNzZGRkRENzhGQzcyMDM4QzVCODA5NTY5QTYxMjVENkE1ODg2ODRBMTZEMjIyRUY5M0YyNDY5RUE3ODk0ODAzNzk1N0RFOUI0NDlBQjcyMjA0NEZERkYzQjZBQzg5MzY3RDcyRjBDRjNFRDFGODVFREZEMERFM0VFRUREMzlGNkVGRDY4QTAzNjhGODNCMzg5QjdBN0I5Qzc3MTNGNDE0OEY1M0U4MkNERjZEOUNDMDAyQTNBMTZGMUU2QTFENzhDNDhDRTc4NDk1ODQxNjQ2NjE2NjQxNTNBNDk5QUNBRTU5Mjc3MjhCMkYxQTJFOTExNjQ4Njc2REYzMTZERkNCRjVFNDRGMzkzQjdCMjk2QTRBMjFFRDU5NzQ0RTM4NTVGQ0Q0QTIxRjJCNDJDRkU1QzUyODYwQjI0NEQ0NjcxMDMxMDdFM0RDNDBBODIwNzcyNjk4OTc1MjhDQ0JGODBCMkYyMTZBNTM1QzUyQTZBMjY0M0U2NEI1MzI3NkExQjYzMzQ4MDM4NzA2MzI4RkUzNjlBRTI0MDk1NjgxNjA0ODFDMDdBM0VENUIwMTk4RUM2Q0MwN0Y4RjI1MEIxREUwRDk3MTEwRjgzNEFBM0QxQzA4NjJGQjcxOTM5M0VBMDhENTMwMjI1Q0UwNjQ3RkQ1NDg4RjQ4M0ZBMDY1MTk2RDExNjBGQUZBNTRDRDNGRjYzQjZBRERCRTg0RDA5RjNDRkY5OEYyMkNDNzFERTJGQzE5NzM1MTI2QzNCQkE5QTJDMjkzRDFEQjExOEYwNTEyQzE0NEMxQzYxNjQ5MkJFMEQxOUJGRDI0NTk1NTg0MEY2NDBFQkU2RkNGRjI4MzBDNjgzODUyMDQ2RjM2QzNDREE0RjQ0NjBBQkE0QjJGRUVCNzAwQzlERDgwNDE4QzQyNjczODU4Q0REMTFFNzA2ODJENUE0MUVEN0Q4MDEwRUM3REQ1QjU3QjRFMjA2Rjg0REI4QTQzMEIyNDYwMDJGRUE0OUFGRjQ1OTQwQjFGMThBRTI4ODYzRjVBQTQxRDNCNDJBQkNEM0QxQkFCNzY0NEI4NkUwNjA4NjU5OTdFMUJBMjNBNzY4RjIzM0Q4QTg1OTMzMkY4QjlENUQxNjMzRjlDNDYyMzI4QzE3RTJCMDdENkRGRDgxM0M5NEQ2NzU4NzM1OTJFNUNCQjAwMUMxMTJBNzkwQjEwQjlGOUUwN0JFMTA1QzRGRDMyOEM3RTM4ODdDM0VGMTNFOEVDRTYxMDZCNzNBMzM0MUFGMjAwRDg2NjNCREY5NkZGREI2Rjc5NEZCQjA0RDk3NkI4NzQyM0E4Njg4ODJGMTVDQUU4REM5RjZDQUY0OTE3RUZDODQ0RTc0QkFENDhGMjFFMzQ1MzBDQjRFMjAwMDY0NDQ3MDZGQzk1NjU4NzM1NTUzQ0E5OUUxOEYwRTgyMEQ3OERFRjhGQjg0MDM0QjEwQ0U0NEIxQUUzNkI1MDE0NzU1ODQxNUU1RTc4QTc3RTJGQzdDOEM1ODBCNTRDQ0M0MEVFMzkwNEMwNDk1MDg0NkE2RDUxQkY1QzgwRTBCNkUyQURDNDk4OURBMUQzREQwMUY5OUFBMzY5QzJFNkI1MzM5NEJBMENCNUU2RTgxMUJGQTAwNEE1QjNCM0MzNEM2MDQzM0FCNUVCMEVDODA1MDI0NkI5QUYxMEI0OUVBQTUxNDg3Q0NFMEM0QzhGNENEQUY5MjZENTgyRDdFNDkyNEMzMzc2NUUwMEFDOTUyQTM4NjY5MTUwRUEzMjJDREY4ODZCNDZERTREMDk3MEEwNjBCNjcwRDUwQzlCRjNEMjAyMEI1Mjk4MzhFMTkyRUY5MkJGRTJGMDZGREYxRDUiOjE2OiIwMTAwMDEiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQdWJsaWMga2V5ICM4IChFIGV4YWN0bHkgMiBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJmZWRjYmE5ODc2NTQzMjEwZGVhZGJlZWZjYWZlNDMyMSI6MTY6IjMiOjAKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzggKEUgZXhhY3RseSAxIGJpdHMpCittYmVkdGxzX3JzYV9jaGVja19wdWJrZXk6MTY6ImZlZGNiYTk4NzY1NDMyMTBkZWFkYmVlZmNhZmU0MzIxIjoxNjoiMSI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFB1YmxpYyBrZXkgIzggKEUgZXhhY3RseSA2NCBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJmZWRjYmE5ODc2NTQzMjEwZGVhZGJlZWZjYWZlNDMyMSI6MTY6IjAwZmVkY2JhOTg3NjU0MzIxMyI6MAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjOCAoRSBsYXJnZXIgdGhhbiA2NCBiaXRzKQorbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5OjE2OiJmZWRjYmE5ODc2NTQzMjEwZGVhZGJlZWZjYWZlNDMyMSI6MTY6IjAxZmVkY2JhOTg3NjU0MzIxMyI6MAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjOSAoRSBoYXMgc2l6ZSBOLTIpCittYmVkdGxzX3JzYV9jaGVja19wdWJrZXk6MTY6IjAwYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGZiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjAwYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGZiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZCI6MAorCitSU0EgQ2hlY2sgUHVibGljIGtleSAjMTAgKEUgaGFzIHNpemUgTikKK21iZWR0bHNfcnNhX2NoZWNrX3B1YmtleToxNjoiMDBiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZmIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMDBiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZmIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljLVByaXZhdGUga2V5ICMxIChDb3JyZWN0KQorcnNhX2NoZWNrX3B1YnByaXY6MjA0ODoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6MAorCitSU0EgQ2hlY2sgUHVibGljLVByaXZhdGUga2V5ICMyIChQdWJsaWMgbm8gTikKK3JzYV9jaGVja19wdWJwcml2OjIwNDg6MTY6IiI6MTY6IjMiOjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6MTY6Ijc3QjFEOTkzMDBENkE1NEU4NjQ5NjJEQTA5QUUxMENGMTlBN0ZCODg4NDU2QkMyNjcyQjcyQUVBNTJCMjA0OTE0NDkzRDE2QzE4NEFEMjAxRUMzRjc2MkUxRkJEODcwMkJBNzk2RUY5NTNEOUVBMkYyNjMwMEQyODUyNjRGMTFCMEM4MzAxRDAyMDdGRUIxRTJDOTg0NDQ1Qzg5OUIwQUNFQkFBNzRFRjAxNEREMUQ0QkREQjQzMjAyQzA4RDJGRjk2OTJEOEQ3ODg0NzhERUM4MjlFQjUyQUZCNUFFMDY4RkJEQkFDNDk5QTI3RkFDRUNDMzkxRTc1QzkzNkQ1NUYwN0JCNDVFRTE4NERBQjQ1ODA4RTE1NzIyNTAyRjI3OUY4OUIzOEMxQ0IyOTI1NTdFNTA2MzU5N0Y1MkM3NUQ2MTAwMUVEQzMzRjQ3MzkzNTNFMzNFNTZBRDI3M0IwNjdDMUEyNzYwMjA4NTI5RUE0MjE3NzRBNUZGRkNCMzQyM0IxRTAwNTFFNzcwMkE1NUQ4MENCRjIxNDE1NjlGMThGODdCRkY1MzhBMURBOEVEQkIyNjkzQTUzOUY2OEUwRDYyRDc3NzQzRjg5RUFDRjNCMTcyM0JEQjI1Q0UyRjMzM0ZBNjNDQUNGMEU2N0RGMUE0MzE4OTNCQjlCMzUyRkNCIjoxNjoiOUE2NkNGNzY1NzJBNzFBMTc0NzU3OTRGQTFDOEM3MEQ5ODdFNTgxRTk5MEQ3NzJCQjI3Qzc3QzUzRkYxRUNCQjMxMjYwRTlFREFGQUVCQzc5OTkxODA3RTQ4OTE4RUFCOEMzQTVGMDNBNjAwRjMwQzY5NTExNTQ2QUU3ODhFREY1MzE2OEUyRDAzNUQzMDBFRENENUU0QkYzQUEyQTZENjAzRUEwQTdCRDExRTFDMTA4OTY1NzMwNkRGOEE2NEU3RjFCQzZCMjY2QjgyNUMxQTZDNUYwRkM4NTc3NUY0Q0Y3QUNENjMzNjdFNDJFQUZFNDY1MTFENThBRDZERkUwRiI6MTY6Ijg0NERCREQyMDkyNUQ5MTY0RjlBMUUyRjcwNzA3NkMyNjFDQ0E4MzM3RDAyNDEzOTJCMzhBRTNDMTIzNDJGM0FDMTRGOEZENkRGNEExQzM2ODM5NjYyQkQwRDIyNzM0NENENTVBMzJBRTVEQkQyMzA5QTlBMkI4QTJDODJCRTZEREREQ0U4MUQxQjY5NDc3NUQ5MDQ3QUE3NjVDQTBDNkUxQkI4RTYxQzhCN0JFMjdFRDcxMUU4RUUyRkVBRDg3RjM0OTFGNzZBNkQyMjYyQzE0MTg5RUFDREZENENFRkUwQkY5RDBBNUI0OTg1N0UwRUQyMkNCRUI5OERDOEQ0NUIiOjE2OiI0OTUxQTdCMTc0REY5NzJDMzdCQURDQzM4NDU3QjVFREQxRjA3OEJDNjEzRTc1Q0UyNUUwODgxNEUxMjQ2MUM3QTFDMTg5QTcwRUI4MTM4Mjk0Mjk4RDE0MTI0NEM3QTlERTMxQUI0RjZEMzhCNDBCMDRENjM1M0NEMzBGNzdBREJGNjZCQkRFNDFDN0JFNDYzQzVFMzBBQUEzRjdCQUQ2Q0VFOTk1MDZERUFBRkEyRjMzNUMxQjFDNUM4OEI4QUJCMEQwMzg3RUUwRDFCNEU3MDI3RjdGMDg1QTAyNUNFREI1Q0NFMThCODhDMDQ2MkYxQzNDOTEwRDQ3QzBENEFCIjpNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRAorCitSU0EgQ2hlY2sgUHVibGljLVByaXZhdGUga2V5ICMzIChQcml2YXRlIG5vIE4pCityc2FfY2hlY2tfcHVicHJpdjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6IiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIENoZWNrIFB1YmxpYy1Qcml2YXRlIGtleSAjNCAoTiBtaXNtYXRjaCkKK3JzYV9jaGVja19wdWJwcml2OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRlIjoxNjoiMyI6MTY6ImU3OWEzNzMxODJiZmFhNzIyZWIwMzVmNzcyYWQyYTk0NjRiZDg0MmRlNTk0MzJjMThiYmFiM2E3ZGZlYWUzMThjOWI5MTVlZTQ4Nzg2MWFiNjY1YTQwYmQ2Y2RhNTYwMTUyNTc4ZTg1NzkwMTZjOTI5ZGY5OWZlYTA1YjRkNjRlZmNhMWQ1NDM4NTBiYzgxNjRiNDBkNzFlZDdmM2ZhNDEwNWRmMGZiOWI5YWQyYTE4Y2UxODJjOGE0ZjRmOTc1YmVhOWFhMGI5YTE0MzhhMjdhMjhlOTdhYzgzMzBlZjM3MzgzNDE0ZDFiZDY0NjA3ZDY5NzlhYzA1MDQyNGZkMTciOjE2OiJjNjc0OWNiYjBkYjhjNWExNzc2NzJkNDcyOGE4YjIyMzkyYjJmYzRkM2I4MzYxZDVjMGQ1MDU1YTFiNGU0NmQ4MjFmNzU3YzI0ZWVmMmE1MWM1NjE5NDFiOTNiM2FjZTczNDAwNzRjMDU4YzliYjQ4ZTdlNzQxNGY0MmM0MWRhNGNjY2I1YzJiYTkxZGViMzBjNTg2YjdmYjE4YWYxMmE1Mjk5NTU5MmFkMTM5ZDNiZTQyOWFkZDY1NDdlMDQ0YmVjZWRhZjMxZmEzYjM5NDIxZTI0ZWUwMzRmYmYzNjdkMTFmNmI4Zjg4ZWU0ODNkMTYzYjQzMWUxNjU0YWQzZTg5IjoxNjoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjE2OiIzIjoxNjoiNzdCMUQ5OTMwMEQ2QTU0RTg2NDk2MkRBMDlBRTEwQ0YxOUE3RkI4ODg0NTZCQzI2NzJCNzJBRUE1MkIyMDQ5MTQ0OTNEMTZDMTg0QUQyMDFFQzNGNzYyRTFGQkQ4NzAyQkE3OTZFRjk1M0Q5RUEyRjI2MzAwRDI4NTI2NEYxMUIwQzgzMDFEMDIwN0ZFQjFFMkM5ODQ0NDVDODk5QjBBQ0VCQUE3NEVGMDE0REQxRDRCRERCNDMyMDJDMDhEMkZGOTY5MkQ4RDc4ODQ3OERFQzgyOUVCNTJBRkI1QUUwNjhGQkRCQUM0OTlBMjdGQUNFQ0MzOTFFNzVDOTM2RDU1RjA3QkI0NUVFMTg0REFCNDU4MDhFMTU3MjI1MDJGMjc5Rjg5QjM4QzFDQjI5MjU1N0U1MDYzNTk3RjUyQzc1RDYxMDAxRURDMzNGNDczOTM1M0UzM0U1NkFEMjczQjA2N0MxQTI3NjAyMDg1MjlFQTQyMTc3NEE1RkZGQ0IzNDIzQjFFMDA1MUU3NzAyQTU1RDgwQ0JGMjE0MTU2OUYxOEY4N0JGRjUzOEExREE4RURCQjI2OTNBNTM5RjY4RTBENjJENzc3NDNGODlFQUNGM0IxNzIzQkRCMjVDRTJGMzMzRkE2M0NBQ0YwRTY3REYxQTQzMTg5M0JCOUIzNTJGQ0IiOjE2OiI5QTY2Q0Y3NjU3MkE3MUExNzQ3NTc5NEZBMUM4QzcwRDk4N0U1ODFFOTkwRDc3MkJCMjdDNzdDNTNGRjFFQ0JCMzEyNjBFOUVEQUZBRUJDNzk5OTE4MDdFNDg5MThFQUI4QzNBNUYwM0E2MDBGMzBDNjk1MTE1NDZBRTc4OEVERjUzMTY4RTJEMDM1RDMwMEVEQ0Q1RTRCRjNBQTJBNkQ2MDNFQTBBN0JEMTFFMUMxMDg5NjU3MzA2REY4QTY0RTdGMUJDNkIyNjZCODI1QzFBNkM1RjBGQzg1Nzc1RjRDRjdBQ0Q2MzM2N0U0MkVBRkU0NjUxMUQ1OEFENkRGRTBGIjoxNjoiODQ0REJERDIwOTI1RDkxNjRGOUExRTJGNzA3MDc2QzI2MUNDQTgzMzdEMDI0MTM5MkIzOEFFM0MxMjM0MkYzQUMxNEY4RkQ2REY0QTFDMzY4Mzk2NjJCRDBEMjI3MzQ0Q0Q1NUEzMkFFNURCRDIzMDlBOUEyQjhBMkM4MkJFNkRERERDRTgxRDFCNjk0Nzc1RDkwNDdBQTc2NUNBMEM2RTFCQjhFNjFDOEI3QkUyN0VENzExRThFRTJGRUFEODdGMzQ5MUY3NkE2RDIyNjJDMTQxODlFQUNERkQ0Q0VGRTBCRjlEMEE1QjQ5ODU3RTBFRDIyQ0JFQjk4REM4RDQ1QiI6MTY6IjQ5NTFBN0IxNzRERjk3MkMzN0JBRENDMzg0NTdCNUVERDFGMDc4QkM2MTNFNzVDRTI1RTA4ODE0RTEyNDYxQzdBMUMxODlBNzBFQjgxMzgyOTQyOThEMTQxMjQ0QzdBOURFMzFBQjRGNkQzOEI0MEIwNEQ2MzUzQ0QzMEY3N0FEQkY2NkJCREU0MUM3QkU0NjNDNUUzMEFBQTNGN0JBRDZDRUU5OTUwNkRFQUFGQTJGMzM1QzFCMUM1Qzg4QjhBQkIwRDAzODdFRTBEMUI0RTcwMjdGN0YwODVBMDI1Q0VEQjVDQ0UxOEI4OEMwNDYyRjFDM0M5MTBENDdDMEQ0QUIiOk1CRURUTFNfRVJSX1JTQV9LRVlfQ0hFQ0tfRkFJTEVECisKK1JTQSBDaGVjayBQdWJsaWMtUHJpdmF0ZSBrZXkgIzUgKEUgbWlzbWF0Y2gpCityc2FfY2hlY2tfcHVicHJpdjoyMDQ4OjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjE3IjoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOjE2OiI3N0IxRDk5MzAwRDZBNTRFODY0OTYyREEwOUFFMTBDRjE5QTdGQjg4ODQ1NkJDMjY3MkI3MkFFQTUyQjIwNDkxNDQ5M0QxNkMxODRBRDIwMUVDM0Y3NjJFMUZCRDg3MDJCQTc5NkVGOTUzRDlFQTJGMjYzMDBEMjg1MjY0RjExQjBDODMwMUQwMjA3RkVCMUUyQzk4NDQ0NUM4OTlCMEFDRUJBQTc0RUYwMTRERDFENEJEREI0MzIwMkMwOEQyRkY5NjkyRDhENzg4NDc4REVDODI5RUI1MkFGQjVBRTA2OEZCREJBQzQ5OUEyN0ZBQ0VDQzM5MUU3NUM5MzZENTVGMDdCQjQ1RUUxODREQUI0NTgwOEUxNTcyMjUwMkYyNzlGODlCMzhDMUNCMjkyNTU3RTUwNjM1OTdGNTJDNzVENjEwMDFFREMzM0Y0NzM5MzUzRTMzRTU2QUQyNzNCMDY3QzFBMjc2MDIwODUyOUVBNDIxNzc0QTVGRkZDQjM0MjNCMUUwMDUxRTc3MDJBNTVEODBDQkYyMTQxNTY5RjE4Rjg3QkZGNTM4QTFEQThFREJCMjY5M0E1MzlGNjhFMEQ2MkQ3Nzc0M0Y4OUVBQ0YzQjE3MjNCREIyNUNFMkYzMzNGQTYzQ0FDRjBFNjdERjFBNDMxODkzQkI5QjM1MkZDQiI6MTY6IjlBNjZDRjc2NTcyQTcxQTE3NDc1Nzk0RkExQzhDNzBEOTg3RTU4MUU5OTBENzcyQkIyN0M3N0M1M0ZGMUVDQkIzMTI2MEU5RURBRkFFQkM3OTk5MTgwN0U0ODkxOEVBQjhDM0E1RjAzQTYwMEYzMEM2OTUxMTU0NkFFNzg4RURGNTMxNjhFMkQwMzVEMzAwRURDRDVFNEJGM0FBMkE2RDYwM0VBMEE3QkQxMUUxQzEwODk2NTczMDZERjhBNjRFN0YxQkM2QjI2NkI4MjVDMUE2QzVGMEZDODU3NzVGNENGN0FDRDYzMzY3RTQyRUFGRTQ2NTExRDU4QUQ2REZFMEYiOjE2OiI4NDREQkREMjA5MjVEOTE2NEY5QTFFMkY3MDcwNzZDMjYxQ0NBODMzN0QwMjQxMzkyQjM4QUUzQzEyMzQyRjNBQzE0RjhGRDZERjRBMUMzNjgzOTY2MkJEMEQyMjczNDRDRDU1QTMyQUU1REJEMjMwOUE5QTJCOEEyQzgyQkU2RERERENFODFEMUI2OTQ3NzVEOTA0N0FBNzY1Q0EwQzZFMUJCOEU2MUM4QjdCRTI3RUQ3MTFFOEVFMkZFQUQ4N0YzNDkxRjc2QTZEMjI2MkMxNDE4OUVBQ0RGRDRDRUZFMEJGOUQwQTVCNDk4NTdFMEVEMjJDQkVCOThEQzhENDVCIjoxNjoiNDk1MUE3QjE3NERGOTcyQzM3QkFEQ0MzODQ1N0I1RUREMUYwNzhCQzYxM0U3NUNFMjVFMDg4MTRFMTI0NjFDN0ExQzE4OUE3MEVCODEzODI5NDI5OEQxNDEyNDRDN0E5REUzMUFCNEY2RDM4QjQwQjA0RDYzNTNDRDMwRjc3QURCRjY2QkJERTQxQzdCRTQ2M0M1RTMwQUFBM0Y3QkFENkNFRTk5NTA2REVBQUZBMkYzMzVDMUIxQzVDODhCOEFCQjBEMDM4N0VFMEQxQjRFNzAyN0Y3RjA4NUEwMjVDRURCNUNDRTE4Qjg4QzA0NjJGMUMzQzkxMEQ0N0MwRDRBQiI6TUJFRFRMU19FUlJfUlNBX0tFWV9DSEVDS19GQUlMRUQKKworUlNBIFByaXZhdGUgKENvcnJlY3QpCittYmVkdGxzX3JzYV9wcml2YXRlOiI1OTc3OWZkMmEzOWU1NjY0MGM0ZmMxZTY3YjYwYWVmZmNlY2Q3OGFlZDdhZDJiZGZhNDY0ZTkzZDA0MTk4ZDQ4NDY2YjhkYTc0NDVmMjViZmExOWRiMjg0NGVkZDVjOGY1MzljZjc3MmNjMTMyYjQ4MzE2OWQzOTBkYjI4YTQzYmM0ZWUwZjAzOGY2NTY4ZmZjODc0NDc3NDZjYjcyZmVmYWMyZDZkOTBlZTMxNDNhOTE1YWM0Njg4MDI4ODA1OTA1YTY4ZWI4ZjhhOTY2NzRiMDkzYzQ5NWVkZGQ4NzA0NDYxZWFhMmIzNDVlZmJiMmFkNjkzMGFjZDgwMjNmODcwIjoyMDQ4OjE2OiJlNzlhMzczMTgyYmZhYTcyMmViMDM1Zjc3MmFkMmE5NDY0YmQ4NDJkZTU5NDMyYzE4YmJhYjNhN2RmZWFlMzE4YzliOTE1ZWU0ODc4NjFhYjY2NWE0MGJkNmNkYTU2MDE1MjU3OGU4NTc5MDE2YzkyOWRmOTlmZWEwNWI0ZDY0ZWZjYTFkNTQzODUwYmM4MTY0YjQwZDcxZWQ3ZjNmYTQxMDVkZjBmYjliOWFkMmExOGNlMTgyYzhhNGY0Zjk3NWJlYTlhYTBiOWExNDM4YTI3YTI4ZTk3YWM4MzMwZWYzNzM4MzQxNGQxYmQ2NDYwN2Q2OTc5YWMwNTA0MjRmZDE3IjoxNjoiYzY3NDljYmIwZGI4YzVhMTc3NjcyZDQ3MjhhOGIyMjM5MmIyZmM0ZDNiODM2MWQ1YzBkNTA1NWExYjRlNDZkODIxZjc1N2MyNGVlZjJhNTFjNTYxOTQxYjkzYjNhY2U3MzQwMDc0YzA1OGM5YmI0OGU3ZTc0MTRmNDJjNDFkYTRjY2NiNWMyYmE5MWRlYjMwYzU4NmI3ZmIxOGFmMTJhNTI5OTU1OTJhZDEzOWQzYmU0MjlhZGQ2NTQ3ZTA0NGJlY2VkYWYzMWZhM2IzOTQyMWUyNGVlMDM0ZmJmMzY3ZDExZjZiOGY4OGVlNDgzZDE2M2I0MzFlMTY1NGFkM2U4OSI6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjQ4Y2U2MjY1OGQ4MmJlMTA3MzdiZDVkMzU3OWFlZDE1YmM4MjYxN2U2NzU4YmE4NjJlZWIxMmQwNDlkN2JhY2FmMmY2MmZjZThiZjZlOTgwNzYzZDE5NTFmN2YwZWFlM2E0OTNkZjk4OTBkMjQ5MzE0YjM5ZDAwZDZlZjc5MWRlMGRhZWJmMmM1MGY0NmU1NGFlYjYzYTg5MTEzZGVmZTg1ZGU2ZGJlNzc2NDJhYWU5ZjJlY2ViNDIwZjNhNDdhNTYzNTUzOTZlNzI4OTE3ZjE3ODc2YmI4MjlmYWJjYWVlZjhiZjdlZjZkZTJmZjllODRlNjEwOGVhMmU1MmJiYjYyYjdiMjg4ZWZhMGEzODM1MTc1YjhiMDhmYWM1NmY3Mzk2ZWNlYjFjNjkyZDQxOWVjYjc5ZDgwYWVmNWJjMDhhNzVkODlkZTlmMmIyZDQxMWQ4ODFjMGUzZmZhZDI0YzMxMWExOTAyOWQyMTBkM2QzNTM0ZjFiNjI2Zjk4MmVhMzIyYjRkMWNmYmE0NzY4NjBlZjIwZDRmNjcyZjM4YzM3MTA4NGI1MzAxYjQyOWI3NDdlYTA1MWE2MTllNDQzMGUwZGFjMzNjMTJmOWVlNDFjYTRkODFhNGY2ZGEzZTQ5NWFhODUyNDU3NGJkYzYwZDI5MGRkMWY3YTYyZTkwYTY3IjowCisKK1JTQSBQcml2YXRlIChEYXRhIGxhcmdlciB0aGFuIE4pCittYmVkdGxzX3JzYV9wcml2YXRlOiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MjA0ODoxNjoiZTc5YTM3MzE4MmJmYWE3MjJlYjAzNWY3NzJhZDJhOTQ2NGJkODQyZGU1OTQzMmMxOGJiYWIzYTdkZmVhZTMxOGM5YjkxNWVlNDg3ODYxYWI2NjVhNDBiZDZjZGE1NjAxNTI1NzhlODU3OTAxNmM5MjlkZjk5ZmVhMDViNGQ2NGVmY2ExZDU0Mzg1MGJjODE2NGI0MGQ3MWVkN2YzZmE0MTA1ZGYwZmI5YjlhZDJhMThjZTE4MmM4YTRmNGY5NzViZWE5YWEwYjlhMTQzOGEyN2EyOGU5N2FjODMzMGVmMzczODM0MTRkMWJkNjQ2MDdkNjk3OWFjMDUwNDI0ZmQxNyI6MTY6ImM2NzQ5Y2JiMGRiOGM1YTE3NzY3MmQ0NzI4YThiMjIzOTJiMmZjNGQzYjgzNjFkNWMwZDUwNTVhMWI0ZTQ2ZDgyMWY3NTdjMjRlZWYyYTUxYzU2MTk0MWI5M2IzYWNlNzM0MDA3NGMwNThjOWJiNDhlN2U3NDE0ZjQyYzQxZGE0Y2NjYjVjMmJhOTFkZWIzMGM1ODZiN2ZiMThhZjEyYTUyOTk1NTkyYWQxMzlkM2JlNDI5YWRkNjU0N2UwNDRiZWNlZGFmMzFmYTNiMzk0MjFlMjRlZTAzNGZiZjM2N2QxMWY2YjhmODhlZTQ4M2QxNjNiNDMxZTE2NTRhZDNlODkiOjE2OiJiMzhhYzY1YzgxNDFmN2Y1Yzk2ZTE0NDcwZTg1MTkzNmE2N2JmOTRjYzY4MjFhMzlhYzEyYzA1ZjdjMGIwNmQ5ZTZkZGJhMjIyNDcwM2IwMmUyNWYzMTQ1MmY5YzRhODQxN2I2MjY3NWZkYzZkZjQ2Yjk0ODEzYmM3Yjk3NjlhODkyYzQ4MmI4MzBiZmUwYWQ0MmU0NjY2OGFjZTY4OTAzNjE3ZmFmNjY4MWY0YmFiZjFjYzhlNGIwNDIwZDNjN2Y2MWRjNDU0MzRjNmI1NGUyYzNlZTBmYzA3OTA4NTA5ZDc5Yzk4MjZlNjczYmY4MzYzMjU1YWRiMGFkZDI0MDEwMzlhN2JjZDFiNGVjZjBmYmU2ZWM4MzY5ZDJkYTQ4NmVlYzU5NTU5ZGQxZDU0YzliMjQxOTA5NjVlYWZiZGFiMjAzYjM1MjU1NzY1MjYxY2QwOTA5YWNmOTNjM2I4Yjg0MjhjYmI0NDhkZTQ3MTVkMWI4MTNkMGM5NDgyOWMyMjk1NDNkMzkxY2UwYWRhYjUzNTFmOTdhMzgxMGMxZjczZDdiMTQ1OGI5N2RhZWQ0MjA5YzUwZTE2ZDA2NGQyZDViZmRhOGMyMzg5M2Q3NTUyMjI3OTMxNDZkMGE3OGMzZDY0ZjM1NTQ5MTQxNDg2YzNiMDk2MWE3YjRjMWEyMDM0ZiI6MTY6IjMiOiI2MDViYWY5NDdjMGRlNDllNGY2YTBkZmI5NGE0M2FlMzE4ZDVkZjhlZDIwYmE0YmE1YTM3YTczZmIwMDljNWM5ZTVjY2U4YjcwYTI1YjFjNzU4MGYzODlmMGQ3MDkyNDg1Y2RmYTAyMjA4YjcwZDMzNDgyZWRmMDdhN2VhZmViZGM1NDg2MmNhMGUwMzk2YTVhN2QwOTk5MWI5NzUzZWIxZmZiNjA5MTk3MWJiNTc4OWM2YjEyMWFiYmNkMGEzY2JhYTM5OTY5ZmE3YzI4MTQ2ZmNlOTZjNmQwMzI3MmUzNzkzZTViZThmNWFiZmE5YWZjYmViYjk4NmQ3YjMwNTA2MDRhMmFmNGQzYTQwZmE2YzAwMzc4MWE1MzlhNjAyNTlkMWU4NGYxMzMyMmRhOWU1MzhhNDljMzY5YjgzZTcyODZiZjdkMzBiNjRiYmI3NzM1MDY3MDVkYTVkNWQ1NDgzYTU2M2ExZmZhY2M5MDJmYjc1YzlhNzUxYjFlODNjZGM3YTZkYjA0NzAwNTY4ODNmNDhiNWE1NDQ2YjQzYjFkMTgwZWExMmJhMTFhNmE4ZDkzYjNiMzJhMzAxNTZiNjA4NGI3ZmIxNDI5OThhMmEwZDI4MDE0Yjg0MDk4ZWNlN2Q5ZDVlNGQ1NWNjMzQyY2EyNmY1YTAxNjdhNjc5ZGVjOCI6TUJFRFRMU19FUlJfUlNBX1BSSVZBVEVfRkFJTEVEICsgTUJFRFRMU19FUlJfTVBJX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBQdWJsaWMgKENvcnJlY3QpCittYmVkdGxzX3JzYV9wdWJsaWM6IjU5Nzc5ZmQyYTM5ZTU2NjQwYzRmYzFlNjdiNjBhZWZmY2VjZDc4YWVkN2FkMmJkZmE0NjRlOTNkMDQxOThkNDg0NjZiOGRhNzQ0NWYyNWJmYTE5ZGIyODQ0ZWRkNWM4ZjUzOWNmNzcyY2MxMzJiNDgzMTY5ZDM5MGRiMjhhNDNiYzRlZTBmMDM4ZjY1NjhmZmM4NzQ0Nzc0NmNiNzJmZWZhYzJkNmQ5MGVlMzE0M2E5MTVhYzQ2ODgwMjg4MDU5MDVhNjhlYjhmOGE5NjY3NGIwOTNjNDk1ZWRkZDg3MDQ0NjFlYWEyYjM0NWVmYmIyYWQ2OTMwYWNkODAyM2Y4NzAiOjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjFmNWU5MjdjMTNmZjIzMTA5MGIwZjE4YzhjMzUyNjQyOGVkMGY0YTc1NjE0NTdlZTVhZmU0ZDIyZDVkOTIyMGMzNGVmNWI5YTM0ZDBjMDdmNzI0OGExZjNkNTdmOTVkMTBmNzkzNmIzMDYzZTQwNjYwYjNhN2NhM2U3MzYwOGIwMTNmODVhNmU3NzhhYzdjNjBkNTc2ZTlkOWMwYzVhNzlhZDg0Y2VlYTc0ZTQ3MjJlYjM1NTNiZGIwYzJkNzc4M2RhYzA1MDUyMGNiMjdjYTczNDc4YjUwOTg3M2NiMGRjYmQxZDUxZGQ4ZmNjYjk2YzI5YWQzMTRmMzZkNjdjYzU3ODM1ZDkyZDk0ZGVmYTAzOTlmZWIwOTVmZDQxYjlmMGIyYmUxMGY2MDQxMDc5ZWQ0MjkwMDQwNDQ5ZjhhNzlhYmE1MGIwYTFmOGNmODNjOWZiODc3MmIwNjg2ZWMxYjI5Y2IxODE0YmIwNmY5YzAyNDg1N2RiNTRkMzk1YThkYTlhMmM2ZjlmNTNiOTRiZWM2MTJhMGNiMzA2YTNlYWE5ZmM4MDk5MmU4NWQ5ZDIzMmUzN2E1MGNhYmU0OGM5MzQzZjAzOTYwMWZmN2Q5NWQ2MDAyNWU1ODJhZWM0NzVkMDMxODg4MzEwZThlYzM4MzNiMzk0YTVjZjA1OTkxMDFlIjowCisKK1JTQSBQdWJsaWMgKERhdGEgbGFyZ2VyIHRoYW4gTikKK21iZWR0bHNfcnNhX3B1YmxpYzoiYjM4YWM2NWM4MTQxZjdmNWM5NmUxNDQ3MGU4NTE5MzZhNjdiZjk0Y2M2ODIxYTM5YWMxMmMwNWY3YzBiMDZkOWU2ZGRiYTIyMjQ3MDNiMDJlMjVmMzE0NTJmOWM0YTg0MTdiNjI2NzVmZGM2ZGY0NmI5NDgxM2JjN2I5NzY5YTg5MmM0ODJiODMwYmZlMGFkNDJlNDY2NjhhY2U2ODkwMzYxN2ZhZjY2ODFmNGJhYmYxY2M4ZTRiMDQyMGQzYzdmNjFkYzQ1NDM0YzZiNTRlMmMzZWUwZmMwNzkwODUwOWQ3OWM5ODI2ZTY3M2JmODM2MzI1NWFkYjBhZGQyNDAxMDM5YTdiY2QxYjRlY2YwZmJlNmVjODM2OWQyZGE0ODZlZWM1OTU1OWRkMWQ1NGM5YjI0MTkwOTY1ZWFmYmRhYjIwM2IzNTI1NTc2NTI2MWNkMDkwOWFjZjkzYzNiOGI4NDI4Y2JiNDQ4ZGU0NzE1ZDFiODEzZDBjOTQ4MjljMjI5NTQzZDM5MWNlMGFkYWI1MzUxZjk3YTM4MTBjMWY3M2Q3YjE0NThiOTdkYWVkNDIwOWM1MGUxNmQwNjRkMmQ1YmZkYThjMjM4OTNkNzU1MjIyNzkzMTQ2ZDBhNzhjM2Q2NGYzNTU0OTE0MTQ4NmMzYjA5NjFhN2I0YzFhMjAzNGYiOjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6IjYwNWJhZjk0N2MwZGU0OWU0ZjZhMGRmYjk0YTQzYWUzMThkNWRmOGVkMjBiYTRiYTVhMzdhNzNmYjAwOWM1YzllNWNjZThiNzBhMjViMWM3NTgwZjM4OWYwZDcwOTI0ODVjZGZhMDIyMDhiNzBkMzM0ODJlZGYwN2E3ZWFmZWJkYzU0ODYyY2EwZTAzOTZhNWE3ZDA5OTkxYjk3NTNlYjFmZmI2MDkxOTcxYmI1Nzg5YzZiMTIxYWJiY2QwYTNjYmFhMzk5NjlmYTdjMjgxNDZmY2U5NmM2ZDAzMjcyZTM3OTNlNWJlOGY1YWJmYTlhZmNiZWJiOTg2ZDdiMzA1MDYwNGEyYWY0ZDNhNDBmYTZjMDAzNzgxYTUzOWE2MDI1OWQxZTg0ZjEzMzIyZGE5ZTUzOGE0OWMzNjliODNlNzI4NmJmN2QzMGI2NGJiYjc3MzUwNjcwNWRhNWQ1ZDU0ODNhNTYzYTFmZmFjYzkwMmZiNzVjOWE3NTFiMWU4M2NkYzdhNmRiMDQ3MDA1Njg4M2Y0OGI1YTU0NDZiNDNiMWQxODBlYTEyYmExMWE2YThkOTNiM2IzMmEzMDE1NmI2MDg0YjdmYjE0Mjk5OGEyYTBkMjgwMTRiODQwOThlY2U3ZDlkNWU0ZDU1Y2MzNDJjYTI2ZjVhMDE2N2E2NzlkZWM4IjpNQkVEVExTX0VSUl9SU0FfUFVCTElDX0ZBSUxFRCArIE1CRURUTFNfRVJSX01QSV9CQURfSU5QVVRfREFUQQorCitSU0EgR2VuZXJhdGUgS2V5IC0gMTI4Yml0IGtleQorbWJlZHRsc19yc2FfZ2VuX2tleToxMjg6MzowCisKK1JTQSBHZW5lcmF0ZSBLZXkgKE51bWJlciBvZiBiaXRzIHRvbyBzbWFsbCkKK21iZWR0bHNfcnNhX2dlbl9rZXk6MTI3OjM6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBHZW5lcmF0ZSBLZXkgKEV4cG9uZW50IHRvbyBzbWFsbCkKK21iZWR0bHNfcnNhX2dlbl9rZXk6MTI4OjI6TUJFRFRMU19FUlJfUlNBX0JBRF9JTlBVVF9EQVRBCisKK1JTQSBHZW5lcmF0ZSBLZXkgLSAxMDI0IGJpdCBrZXkKK21iZWR0bHNfcnNhX2dlbl9rZXk6MTAyNDozOjAKKworUlNBIEdlbmVyYXRlIEtleSAtIDIwNDggYml0IGtleQorbWJlZHRsc19yc2FfZ2VuX2tleToyMDQ4OjM6MAorCitSU0EgR2VuZXJhdGUgS2V5IC0gMTAyNSBiaXQga2V5CittYmVkdGxzX3JzYV9nZW5fa2V5OjEwMjU6MzpNQkVEVExTX0VSUl9SU0FfQkFEX0lOUFVUX0RBVEEKKworUlNBIFBLQ1MxIEVuY3J5cHQgQmFkIFJORworZGVwZW5kc19vbjpNQkVEVExTX1BLQ1MxX1YxNQorcnNhX3BrY3MxX2VuY3J5cHRfYmFkX3JuZzoiNEU2MzZBRjk4RTQwRjNBRENGQ0NCNjk4RjRFODBCOUYiOk1CRURUTFNfUlNBX1BLQ1NfVjE1OjIwNDg6MTY6ImIzOGFjNjVjODE0MWY3ZjVjOTZlMTQ0NzBlODUxOTM2YTY3YmY5NGNjNjgyMWEzOWFjMTJjMDVmN2MwYjA2ZDllNmRkYmEyMjI0NzAzYjAyZTI1ZjMxNDUyZjljNGE4NDE3YjYyNjc1ZmRjNmRmNDZiOTQ4MTNiYzdiOTc2OWE4OTJjNDgyYjgzMGJmZTBhZDQyZTQ2NjY4YWNlNjg5MDM2MTdmYWY2NjgxZjRiYWJmMWNjOGU0YjA0MjBkM2M3ZjYxZGM0NTQzNGM2YjU0ZTJjM2VlMGZjMDc5MDg1MDlkNzljOTgyNmU2NzNiZjgzNjMyNTVhZGIwYWRkMjQwMTAzOWE3YmNkMWI0ZWNmMGZiZTZlYzgzNjlkMmRhNDg2ZWVjNTk1NTlkZDFkNTRjOWIyNDE5MDk2NWVhZmJkYWIyMDNiMzUyNTU3NjUyNjFjZDA5MDlhY2Y5M2MzYjhiODQyOGNiYjQ0OGRlNDcxNWQxYjgxM2QwYzk0ODI5YzIyOTU0M2QzOTFjZTBhZGFiNTM1MWY5N2EzODEwYzFmNzNkN2IxNDU4Yjk3ZGFlZDQyMDljNTBlMTZkMDY0ZDJkNWJmZGE4YzIzODkzZDc1NTIyMjc5MzE0NmQwYTc4YzNkNjRmMzU1NDkxNDE0ODZjM2IwOTYxYTdiNGMxYTIwMzRmIjoxNjoiMyI6ImE0MmVkYTQxZTU2MjM1ZTY2NmU3ZmFhYTc3MTAwMTk3ZjY1NzI4OGExYmYxODNlNDgyMGYwYzM3Y2UyYzQ1NmI5NjAyNzhkNjAwM2UwYmJjZDRiZTRhOTY5ZjhlOGZkOTIzMWUxZjQ5MjQxNGYwMGVkMDk4NDQ5OTRjODZlYzMyZGI3Y2RlM2JlYzdmMGMzZGJmNmFlNTViYWViMjcxMmZhNjA5ZjVmYzMyMDdhODI0ZWIzZGFjZTMxODQ5Y2Q2YTYwODQzMTg1MjM5MTJiY2NiODRjZjQyZTNjNmQ2ZDE2ODUxMzFkNjliYjU0NWFjZWM4MjdkMmIwZGZkZDU1NjhiN2RjYzRmNWExMWQ2OTE2NTgzZmVmYTY4OWQzNjdmOGM5ZTFkOTVkY2QyMjQwODk1YTk0NzBiMGMxNzMwZjk3Y2Q2ZTg1NDY4NjBiZDI1NDgwMTc2OWY1NGJlOTZlMTYzNjJkZGNiZjM0ZDU2MDM1MDI4ODkwMTk5ZTBmNDhkYjM4NjQyY2I2NmE0MTgxZTAyOGE2NDQzYTQwNGZlYTI4NGNlMDJiNDYxNGI2ODMzNjdkNDA4NzRlNTA1NjExZDIzMTQyZDQ5ZjA2ZmVlYTgzMWQ1MmQzNDdiMTM2MTBiNDEzYzRlZmM0M2E2ZGU5ZjBiMDhkMmE5NTFkYzUwM2I2IjpNQkVEVExTX0VSUl9SU0FfUk5HX0ZBSUxFRAorCitSU0EgU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1QKK3JzYV9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9yc2EuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGJjODUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmZ1bmN0aW9uCkBAIC0wLDAgKzEsNjk2IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3JzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQyLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhMjU2LmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGE1MTIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VudHJvcHkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfQklHTlVNX0M6TUJFRFRMU19HRU5QUklNRQorICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19yc2FfcGtjczFfc2lnbiggY2hhciAqbWVzc2FnZV9oZXhfc3RyaW5nLCBpbnQgcGFkZGluZ19tb2RlLCBpbnQgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsIGludCByYWRpeF9RLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfUSwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRSwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIGludCBtc2dfbGVuOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBwYWRkaW5nX21vZGUsIDAgKTsKKworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LlEsIHJhZGl4X1EsIGlucHV0X1EgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlAxLCAmY3R4LlAsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZRMSwgJmN0eC5RLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmSCwgJlAxLCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2djZCggJkcsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LkQgLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUCwgJmN0eC5ELCAmUDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFEsICZjdHguRCwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LlFQLCAmY3R4LlEsICZjdHguUCApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgbXNnX2xlbiA9IHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisKKyAgICBpZiggbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggZGlnZXN0ICkgIT0gTlVMTCApCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21kKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSwgbWVzc2FnZV9zdHIsIG1zZ19sZW4sIGhhc2hfcmVzdWx0ICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oICZjdHgsICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwgZGlnZXN0LCAwLCBoYXNoX3Jlc3VsdCwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmUDEgKTsgbWJlZHRsc19tcGlfZnJlZSggJlExICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZIICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZHICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3JzYV9wa2NzMV92ZXJpZnkoIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IHBhZGRpbmdfbW9kZSwgaW50IGRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sIGludCByYWRpeF9FLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9FLCBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBpbnQgbXNnX2xlbjsKKworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgsIHBhZGRpbmdfbW9kZSwgMCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIGhhc2hfcmVzdWx0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCByZXN1bHRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKyAgICB1bmhleGlmeSggcmVzdWx0X3N0ciwgcmVzdWx0X2hleF9zdHIgKTsKKworICAgIGlmKCBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBkaWdlc3QgKSAhPSBOVUxMICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWQoIG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGRpZ2VzdCApLCBtZXNzYWdlX3N0ciwgbXNnX2xlbiwgaGFzaF9yZXN1bHQgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCAmY3R4LCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsIGRpZ2VzdCwgMCwgaGFzaF9yZXN1bHQsIHJlc3VsdF9zdHIgKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcnNhX3BrY3MxX3NpZ25fcmF3KCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGNoYXIgKmhhc2hfcmVzdWx0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZ19tb2RlLCBpbnQgbW9kLCBpbnQgcmFkaXhfUCwgY2hhciAqaW5wdXRfUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUSwgY2hhciAqaW5wdXRfUSwgaW50IHJhZGl4X04sCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIGludCBoYXNoX2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUDEgKTsgbWJlZHRsc19tcGlfaW5pdCggJlExICk7IG1iZWR0bHNfbXBpX2luaXQoICZIICk7IG1iZWR0bHNfbXBpX2luaXQoICZHICk7CisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgcGFkZGluZ19tb2RlLCAwICk7CisKKyAgICBtZW1zZXQoIG1lc3NhZ2Vfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBoYXNoX3Jlc3VsdCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDAsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4OworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5QLCByYWRpeF9QLCBpbnB1dF9QICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RLCByYWRpeF9RLCBpbnB1dF9RICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5FLCByYWRpeF9FLCBpbnB1dF9FICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3N1Yl9pbnQoICZQMSwgJmN0eC5QLCAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUTEsICZjdHguUSwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbXVsX21waSggJkgsICZQMSwgJlExICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9nY2QoICZHLCAmY3R4LkUsICZIICApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5EICwgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHguRFAsICZjdHguRCwgJlAxICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRRLCAmY3R4LkQsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC5RUCwgJmN0eC5RLCAmY3R4LlAgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKKworICAgIHVuaGV4aWZ5KCBtZXNzYWdlX3N0ciwgbWVzc2FnZV9oZXhfc3RyaW5nICk7CisgICAgaGFzaF9sZW4gPSB1bmhleGlmeSggaGFzaF9yZXN1bHQsIGhhc2hfcmVzdWx0X3N0cmluZyApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX3NpZ24oICZjdHgsICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwgTUJFRFRMU19NRF9OT05FLCBoYXNoX2xlbiwgaGFzaF9yZXN1bHQsIG91dHB1dCApID09IDAgKTsKKworICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisKKyAgICAvKiBGb3IgUEtDUyMxIHYxLjUsIHRoZXJlIGlzIGFuIGFsdGVybmF0aXZlIHdheSB0byBnZW5lcmF0ZSBzaWduYXR1cmVzICovCisgICAgaWYoIHBhZGRpbmdfbW9kZSA9PSBNQkVEVExTX1JTQV9QS0NTX1YxNSApCisgICAgeworICAgICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgICAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2VuY3J5cHQoICZjdHgsCisgICAgICAgICAgICAgICAgICAgICZybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywgTUJFRFRMU19SU0FfUFJJVkFURSwKKyAgICAgICAgICAgICAgICAgICAgaGFzaF9sZW4sIGhhc2hfcmVzdWx0LCBvdXRwdXQgKSA9PSAwICk7CisKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZQMSApOyBtYmVkdGxzX21waV9mcmVlKCAmUTEgKTsgbWJlZHRsc19tcGlfZnJlZSggJkggKTsgbWJlZHRsc19tcGlfZnJlZSggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHJzYV9wa2NzMV92ZXJpZnlfcmF3KCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGNoYXIgKmhhc2hfcmVzdWx0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWRkaW5nX21vZGUsIGludCBtb2QsIGludCByYWRpeF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IGNvcnJlY3QgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdF9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgc2l6ZV90IGhhc2hfbGVuLCBvbGVuOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgcGFkZGluZ19tb2RlLCAwICk7CisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggaGFzaF9yZXN1bHQsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIHJlc3VsdF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKyAgICBoYXNoX2xlbiA9IHVuaGV4aWZ5KCBoYXNoX3Jlc3VsdCwgaGFzaF9yZXN1bHRfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHJlc3VsdF9zdHIsIHJlc3VsdF9oZXhfc3RyICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfdmVyaWZ5KCAmY3R4LCBOVUxMLCBOVUxMLCBNQkVEVExTX1JTQV9QVUJMSUMsIE1CRURUTFNfTURfTk9ORSwgaGFzaF9sZW4sIGhhc2hfcmVzdWx0LCByZXN1bHRfc3RyICkgPT0gY29ycmVjdCApOworCisgICAgLyogRm9yIFBLQ1MjMSB2MS41LCB0aGVyZSBpcyBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gdmVyaWZ5IHNpZ25hdHVyZXMgKi8KKyAgICBpZiggcGFkZGluZ19tb2RlID09IE1CRURUTFNfUlNBX1BLQ1NfVjE1ICkKKyAgICB7CisgICAgICAgIGludCBvazsKKworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcnNhZXNfcGtjczFfdjE1X2RlY3J5cHQoICZjdHgsCisgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE1CRURUTFNfUlNBX1BVQkxJQywKKyAgICAgICAgICAgICAgICAgICAgJm9sZW4sIHJlc3VsdF9zdHIsIG91dHB1dCwgc2l6ZW9mKCBvdXRwdXQgKSApID09IDAgKTsKKworICAgICAgICBvayA9IG9sZW4gPT0gaGFzaF9sZW4gJiYgbWVtY21wKCBvdXRwdXQsIGhhc2hfcmVzdWx0LCBvbGVuICkgPT0gMDsKKyAgICAgICAgaWYoIGNvcnJlY3QgPT0gMCApCisgICAgICAgICAgICBURVNUX0FTU0VSVCggb2sgPT0gMSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBURVNUX0FTU0VSVCggb2sgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcnNhX3BrY3MxX2VuY3J5cHQoIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IHBhZGRpbmdfbW9kZSwgaW50IG1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1lc3NhZ2Vfc3RyWzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0X3N0clsxMDAwXTsKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKKyAgICBzaXplX3QgbXNnX2xlbjsKKyAgICBybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMCwgc2l6ZW9mKCBybmRfcHNldWRvX2luZm8gKSApOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgcGFkZGluZ19tb2RlLCAwICk7CisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCAmY3R4LCAmcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8sIE1CRURUTFNfUlNBX1BVQkxJQywgbXNnX2xlbiwgbWVzc2FnZV9zdHIsIG91dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCByc2FfcGtjczFfZW5jcnlwdF9iYWRfcm5nKCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBwYWRkaW5nX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworICAgIHNpemVfdCBtc2dfbGVuOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgcGFkZGluZ19tb2RlLCAwICk7CisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICBtc2dfbGVuID0gdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCAmY3R4LCAmcm5kX3plcm9fcmFuZCwgTlVMTCwgTUJFRFRMU19SU0FfUFVCTElDLCBtc2dfbGVuLCBtZXNzYWdlX3N0ciwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsIHJlc3VsdF9oZXhfc3RyICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IHBhZGRpbmdfbW9kZSwgaW50IG1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLCBpbnQgcmFkaXhfUSwgY2hhciAqaW5wdXRfUSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfb3V0cHV0LCBjaGFyICpyZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgdW5zaWduZWQgY2hhciBtZXNzYWdlX3N0clsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dF9zdHJbMTAwMF07CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIHNpemVfdCBvdXRwdXRfbGVuOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBwYWRkaW5nX21vZGUsIDAgKTsKKworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHguUCwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmY3R4LlEsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2NkKCAmRywgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguRCAsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRQLCAmY3R4LkQsICZQMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUSwgJmN0eC5ELCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguUVAsICZjdHguUSwgJmN0eC5QICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworICAgIG91dHB1dF9sZW4gPSAwOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoICZjdHgsIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvLCBNQkVEVExTX1JTQV9QUklWQVRFLCAmb3V0cHV0X2xlbiwgbWVzc2FnZV9zdHIsIG91dHB1dCwgbWF4X291dHB1dCApID09IHJlc3VsdCApOworICAgIGlmKCByZXN1bHQgPT0gMCApCisgICAgeworICAgICAgICBoZXhpZnkoIG91dHB1dF9zdHIsIG91dHB1dCwgY3R4LmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJuY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIsIHN0cmxlbiggcmVzdWx0X2hleF9zdHIgKSApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19yc2FfcHVibGljKCBjaGFyICptZXNzYWdlX2hleF9zdHJpbmcsIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4LCBjdHgyOyAvKiBBbHNvIHRlc3QgbWJlZHRsc19yc2FfY29weSgpIHdoaWxlIGF0IGl0ICovCisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgyLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworICAgIG1lbXNldCggbWVzc2FnZV9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworCisgICAgY3R4LmxlbiA9IG1vZCAvIDg7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHVia2V5KCAmY3R4ICkgPT0gMCApOworCisgICAgdW5oZXhpZnkoIG1lc3NhZ2Vfc3RyLCBtZXNzYWdlX2hleF9zdHJpbmcgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wdWJsaWMoICZjdHgsIG1lc3NhZ2Vfc3RyLCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgb3V0cHV0X3N0ciwgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgfQorCisgICAgLyogQW5kIG5vdyB3aXRoIHRoZSBjb3B5ICovCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NvcHkoICZjdHgyLCAmY3R4ICkgPT0gMCApOworICAgIC8qIGNsZWFyIHRoZSBvcmlnaW5hbCB0byBiZSBzdXJlICovCisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eDIgKSA9PSAwICk7CisKKyAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggb3V0cHV0X3N0ciwgMHgwMCwgMTAwMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9wdWJsaWMoICZjdHgyLCBtZXNzYWdlX3N0ciwgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CisgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICB7CisgICAgICAgIGhleGlmeSggb3V0cHV0X3N0ciwgb3V0cHV0LCBjdHgyLmxlbiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBvdXRwdXRfc3RyLCByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHgyICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIG1iZWR0bHNfcnNhX3ByaXZhdGUoIGNoYXIgKm1lc3NhZ2VfaGV4X3N0cmluZywgaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfUSwgY2hhciAqaW5wdXRfUSwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sCisgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwgY2hhciAqcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgbWVzc2FnZV9zdHJbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyWzEwMDBdOworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4LCBjdHgyOyAvKiBBbHNvIHRlc3QgbWJlZHRsc19yc2FfY29weSgpIHdoaWxlIGF0IGl0ICovCisgICAgbWJlZHRsc19tcGkgUDEsIFExLCBILCBHOworICAgIHJuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICBpbnQgaTsKKworICAgIG1iZWR0bHNfbXBpX2luaXQoICZQMSApOyBtYmVkdGxzX21waV9pbml0KCAmUTEgKTsgbWJlZHRsc19tcGlfaW5pdCggJkggKTsgbWJlZHRsc19tcGlfaW5pdCggJkcgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworICAgIG1iZWR0bHNfcnNhX2luaXQoICZjdHgyLCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworCisgICAgbWVtc2V0KCBtZXNzYWdlX3N0ciwgMHgwMCwgMTAwMCApOworICAgIG1lbXNldCggJnJuZF9pbmZvLCAwLCBzaXplb2YoIHJuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICBjdHgubGVuID0gbW9kIC8gODsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguTiwgcmFkaXhfTiwgaW5wdXRfTiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9zdWJfaW50KCAmUDEsICZjdHguUCwgMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfc3ViX2ludCggJlExLCAmY3R4LlEsIDEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX211bF9tcGkoICZILCAmUDEsICZRMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfZ2NkKCAmRywgJmN0eC5FLCAmSCAgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguRCAsICZjdHguRSwgJkggICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LkRQLCAmY3R4LkQsICZQMSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfbW9kX21waSggJmN0eC5EUSwgJmN0eC5ELCAmUTEgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX2ludl9tb2QoICZjdHguUVAsICZjdHguUSwgJmN0eC5QICkgPT0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CisKKyAgICB1bmhleGlmeSggbWVzc2FnZV9zdHIsIG1lc3NhZ2VfaGV4X3N0cmluZyApOworCisgICAgLyogcmVwZWF0IHRocmVlIHRpbWVzIHRvIHRlc3QgdXBkYXRpbmcgb2YgYmxpbmRpbmcgdmFsdWVzICovCisgICAgZm9yKCBpID0gMDsgaSA8IDM7IGkrKyApCisgICAgeworICAgICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwMCApOworICAgICAgICBtZW1zZXQoIG91dHB1dF9zdHIsIDB4MDAsIDEwMDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3ByaXZhdGUoICZjdHgsIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc3RyLCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICAgICAgaWYoIHJlc3VsdCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eC5sZW4gKTsKKworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2hleF9zdHIgKSA9PSAwICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbmQgbm93IG9uZSBtb3JlIHRpbWUgd2l0aCB0aGUgY29weSAqLworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jb3B5KCAmY3R4MiwgJmN0eCApID09IDAgKTsKKyAgICAvKiBjbGVhciB0aGUgb3JpZ2luYWwgdG8gYmUgc3VyZSAqLworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4MiApID09IDAgKTsKKworICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCAxMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXRfc3RyLCAweDAwLCAxMDAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3ByaXZhdGUoICZjdHgyLCBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc3RyLCBvdXRwdXQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgaGV4aWZ5KCBvdXRwdXRfc3RyLCBvdXRwdXQsIGN0eDIubGVuICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIG91dHB1dF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfaGV4X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlAxICk7IG1iZWR0bHNfbXBpX2ZyZWUoICZRMSApOyBtYmVkdGxzX21waV9mcmVlKCAmSCApOyBtYmVkdGxzX21waV9mcmVlKCAmRyApOworICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsgbWJlZHRsc19yc2FfZnJlZSggJmN0eDIgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgcnNhX2NoZWNrX3ByaXZrZXlfbnVsbCgpCit7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWVtc2V0KCAmY3R4LCAweDAwLCBzaXplb2YoIG1iZWR0bHNfcnNhX2NvbnRleHQgKSApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSBNQkVEVExTX0VSUl9SU0FfS0VZX0NIRUNLX0ZBSUxFRCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBtYmVkdGxzX3JzYV9jaGVja19wdWJrZXkoIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLCBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmY3R4LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworCisgICAgaWYoIHN0cmxlbiggaW5wdXRfTiApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9FICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisgICAgfQorCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3B1YmtleSggJmN0eCApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfcnNhX2ZyZWUoICZjdHggKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKmlucHV0X1AsIGludCByYWRpeF9RLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfUSwgaW50IHJhZGl4X04sIGNoYXIgKmlucHV0X04sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqaW5wdXRfRSwgaW50IHJhZGl4X0QsIGNoYXIgKmlucHV0X0QsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRFAsIGNoYXIgKmlucHV0X0RQLCBpbnQgcmFkaXhfRFEsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnB1dF9EUSwgaW50IHJhZGl4X1FQLCBjaGFyICppbnB1dF9RUCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKworICAgIGN0eC5sZW4gPSBtb2QgLyA4OworICAgIGlmKCBzdHJsZW4oIGlucHV0X1AgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguUCwgcmFkaXhfUCwgaW5wdXRfUCApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfUSApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RLCByYWRpeF9RLCBpbnB1dF9RICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9OICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmY3R4Lk4sIHJhZGl4X04sIGlucHV0X04gKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X0UgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZjdHguRSwgcmFkaXhfRSwgaW5wdXRfRSApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRCApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5ELCByYWRpeF9ELCBpbnB1dF9EICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9EUCApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5EUCwgcmFkaXhfRFAsIGlucHV0X0RQICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9EUSApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5EUSwgcmFkaXhfRFEsIGlucHV0X0RRICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9RUCApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmN0eC5RUCwgcmFkaXhfUVAsIGlucHV0X1FQICkgPT0gMCApOworICAgIH0KKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jaGVja19wcml2a2V5KCAmY3R4ICkgPT0gcmVzdWx0ICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc19yc2FfZnJlZSggJmN0eCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCByc2FfY2hlY2tfcHVicHJpdiggaW50IG1vZCwgaW50IHJhZGl4X05wdWIsIGNoYXIgKmlucHV0X05wdWIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRXB1YiwgY2hhciAqaW5wdXRfRXB1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9QLCBjaGFyICppbnB1dF9QLCBpbnQgcmFkaXhfUSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICppbnB1dF9OLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKmlucHV0X0UsIGludCByYWRpeF9ELCBjaGFyICppbnB1dF9ELAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0RQLCBjaGFyICppbnB1dF9EUCwgaW50IHJhZGl4X0RRLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW5wdXRfRFEsIGludCByYWRpeF9RUCwgY2hhciAqaW5wdXRfUVAsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKK3sKKyAgICBtYmVkdGxzX3JzYV9jb250ZXh0IHB1YiwgcHJ2OworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJnB1YiwgTUJFRFRMU19SU0FfUEtDU19WMTUsIDAgKTsKKyAgICBtYmVkdGxzX3JzYV9pbml0KCAmcHJ2LCBNQkVEVExTX1JTQV9QS0NTX1YxNSwgMCApOworCisgICAgcHViLmxlbiA9IG1vZCAvIDg7CisgICAgcHJ2LmxlbiA9IG1vZCAvIDg7CisKKyAgICBpZiggc3RybGVuKCBpbnB1dF9OcHViICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHViLk4sIHJhZGl4X05wdWIsIGlucHV0X05wdWIgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X0VwdWIgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwdWIuRSwgcmFkaXhfRXB1YiwgaW5wdXRfRXB1YiApID09IDAgKTsKKyAgICB9CisKKyAgICBpZiggc3RybGVuKCBpbnB1dF9QICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LlAsIHJhZGl4X1AsIGlucHV0X1AgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X1EgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuUSwgcmFkaXhfUSwgaW5wdXRfUSApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfTiApICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJnBydi5OLCByYWRpeF9OLCBpbnB1dF9OICkgPT0gMCApOworICAgIH0KKyAgICBpZiggc3RybGVuKCBpbnB1dF9FICkgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmcHJ2LkUsIHJhZGl4X0UsIGlucHV0X0UgKSA9PSAwICk7CisgICAgfQorICAgIGlmKCBzdHJsZW4oIGlucHV0X0QgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuRCwgcmFkaXhfRCwgaW5wdXRfRCApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRFAgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuRFAsIHJhZGl4X0RQLCBpbnB1dF9EUCApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfRFEgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuRFEsIHJhZGl4X0RRLCBpbnB1dF9EUSApID09IDAgKTsKKyAgICB9CisgICAgaWYoIHN0cmxlbiggaW5wdXRfUVAgKSApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZwcnYuUVAsIHJhZGl4X1FQLCBpbnB1dF9RUCApID09IDAgKTsKKyAgICB9CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHViX3ByaXYoICZwdWIsICZwcnYgKSA9PSByZXN1bHQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmcHViICk7CisgICAgbWJlZHRsc19yc2FfZnJlZSggJnBydiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ1RSX0RSQkdfQzpNQkVEVExTX0VOVFJPUFlfQyAqLwordm9pZCBtYmVkdGxzX3JzYV9nZW5fa2V5KCBpbnQgbnJiaXRzLCBpbnQgZXhwb25lbnQsIGludCByZXN1bHQpCit7CisgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisgICAgY29uc3QgY2hhciAqcGVycyA9ICJ0ZXN0X3N1aXRlX3JzYSI7CisKKyAgICBtYmVkdGxzX2N0cl9kcmJnX2luaXQoICZjdHJfZHJiZyApOworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoICZlbnRyb3B5ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY3RyX2RyYmdfc2VlZCggJmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHBlcnMsIHN0cmxlbiggcGVycyApICkgPT0gMCApOworCisgICAgbWJlZHRsc19yc2FfaW5pdCggJmN0eCwgMCwgMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2dlbl9rZXkoICZjdHgsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLCAmY3RyX2RyYmcsIG5yYml0cywgZXhwb25lbnQgKSA9PSByZXN1bHQgKTsKKyAgICBpZiggcmVzdWx0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX21waV9jbXBfbXBpKCAmY3R4LlAsICZjdHguUSApID4gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3JzYV9mcmVlKCAmY3R4ICk7CisgICAgbWJlZHRsc19jdHJfZHJiZ19mcmVlKCAmY3RyX2RyYmcgKTsKKyAgICBtYmVkdGxzX2VudHJvcHlfZnJlZSggJmVudHJvcHkgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCByc2Ffc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NoYXguZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyYTE4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmRhdGEKQEAgLTAsMCArMSwxNzEgQEAKK1NIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19zaGExOiIiOiJkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiYTgiOiI5OWYyYWE5NWUzNmY5NWMyYWNiMGVhZjIzOTk4ZjAzMDYzOGYzZjE1IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzMKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiMzAwMCI6ImY5NDRkY2Q2MzVmOTgwMWY3YWM5MGE0MDdmYmM0Nzk5NjRkZWMwMjQiCisKK1NIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19zaGExOiI0Mjc0OWUiOiJhNDQ0MzE5ZTliNmNjMWU4NDY0YzUxMWVjMDk2OWMzN2Q2YmIyNjE5IgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiOWZjM2ZlMDgiOiIxNmEwZmY4NGZjYzE1NmZkNWQzY2EzYTc0NGYyMGEyMzJkMTcyMjUzIgorCitTSEEtMSBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzYKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiYjVjMWM2ZjFhZiI6ImZlYzlkZWViZmNkZWRhZjY2ZGRhNTI1ZTFiZTQzNTk3YTczYTFmOTMiCisKK1NIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19zaGExOiJlYzI5NTYxMjQ0ZWRlNzA2YjZlYjMwYTFjMzcxZDc0NDUwYTEwNWMzZjk3MzVmN2ZhOWZlMzhjZjY3ZjMwNGE1NzM2YTEwNmU5MmUxNzEzOWE2ODEzYjFjODFhNGYzZDNmYjk1NDZhYjQyOTZmYTlmNzIyODI2YzA2Njg2OWVkYWNkNzNiMjU0ODAzNTE4NTgxM2UyMjYzNGE5ZGE0NDAwMGQ5NWEyODFmZjlmMjY0ZWNjZTBhOTMxMjIyMTYyZDAyMWNjYTI4ZGI1ZjNjMmFhMjQ5NDVhYjFlMzFjYjQxM2FlMjk4MTBmZDc5NGNhZDVkZmFmMjllYzQzY2IzOGQxOThmZTRhZTFkYTIzNTk3ODAyMjE0MDViZDY3MTJhNTMwNWRhNGIxYjczN2ZjZTdjZDIxYzBlYjc3MjhkMDgyMzVhOTAxMSI6Ijk3MDExMWM0ZTc3YmNjODhjYzIwNDU5YzAyYjY5YjRhYThmNTgyMTciCisKK1NIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19zaGExOiI1ZmMyYzNmNmE3ZTc5ZGM5NGJlNTI2ZTUxNjZhMjM4ODk5ZDU0OTI3Y2U0NzAwMThmYmZkNjY4ZmQ5ZGQ5N2NiZjY0ZTJjOTE1ODRkMDFkYTYzYmUzY2M5ZmRmZjhhZGZlZmMzYWM3MjhlMWUzMzViOWNkYzg3ZjA2OTE3MmUzMjNkMDk0YjQ3ZmExZTY1MmFmZTRkNmFhMTQ3YTlmNDZmZGEzM2NhY2I2NWYzYWExMjIzNDc0NmI5MDA3YThjODVmZTk4MmFmZWQ3ODE1MjIxZTQzZGJhNTUzZDhmZThhMDIyY2RhYzFiOTllZWVlYTM1OWU1YTlkMmU3MmUzODJkZmZhNmQxOWYzNTlmNGYyN2RjMzQzNGNkMjdkYWVlZGE4ZTM4NTk0ODczMzk4Njc4MDY1ZmJiMjM2NjVhYmE5MzA5ZDk0NjEzNWRhMGU0YTRhZmRhZGZmMTRkYjE4ZTg1ZTcxZGQ5M2MzYmY5ZmFmN2YyNWM4MTk0YzQyNjliMWVlM2Q5OTM0MDk3YWI5OTAwMjVkOWMzYWFmNjNkNTEwOWY1MjMzNWRkMzk1OWQzOGFlNDg1MDUwZTRiYmI2MjM1NTc0ZmMwMTAyYmU4ZjdhMzA2ZDZlOGRlNmJhNmJlY2Y4MGYzNzQxNWI1N2Y5ODk4YTU4MjRlNzc0MTQxOTc0MjJiZTNkMzZhNjA4MCI6IjA0MjNkYzc2YTg3OTExMDdkMTRlMTNmNTI2NWIzNDNmMjRjYzBmMTkiCisKK1NIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworbWJlZHRsc19zaGExOiIwZjg2NWY0NmE4ZjNhZWQyZGExODQ4MmFhMDlhOGYzOTBkYzlkYTA3ZDUxZDFiZDEwZmUwYmY1ZjM5MjhkNTkyN2QwODczM2QzMjA3NTUzNWE2ZDFjOGFjMWIyZGM2YmEwZjJmNjMzZGMxYWY2OGUzZjBmYTNkODVlNmM2MGNiN2I1NmMyMzlkYzE1MTlhMDA3ZWE1MzZhMDdiNTE4ZWNjYTAyYTZjMzFiNDZiNzZmMDIxNjIwZWYzZmM2OTc2ODA0MDE4MzgwZTVhYjljNTU4ZWJmYzVjYjFjOWVkMmQ5NzQ3MjJiZjhhYjYzOThmMWYyYjgyZmE1MDgzZjg1YzE2YTU3NjdhM2EwNzI3MWQ2Nzc0M2YwMDg1MGNlOGVjNDI4YzdmMjJmMWNmMDFmOTk4OTVjMGM4NDQ4NDViMDZhMDZjZWNiMGM2Y2Y4M2ViNTVhMWQ0ZWJjNDRjMmMxM2Y2ZjdhYTVlMGUwOGFiZmQ4NGU3ODY0Mjc5MDU3YWJjNDcxZWU0YTQ1ZGJiYjU3NzRhZmEyNGU1MTc5MWEwZWFkYTExMDkzYjg4NjgxZmUzMGJhYTNiMmU5NDExM2RjNjMzNDJjNTFjYTVkMWE2MDk2ZDA4OTdiNjI2ZTQyY2I5MTc2MTA1ODAwOGY3NDZmMzU0NjU0NjU1NDBhZDhjNmI4YjYwZjdlMTQ2MWIzY2U5ZTY1Mjk2MjU5ODRjYjhjN2Q0NmYwN2Y3MzViZTA2NzU4OGEwMTE3ZjIzZTM0ZmY1NzgwMGUyYmJlOWExNjA1ZmRlNjA4N2ZiMTVkMjJjNWQzYWM0NzU2NmI4YzQ0OGIwY2VlNDAzNzNlNWJhNmVhYTIxYWJlZTcxMzY2YWZiYjI3ZGJiZDMwMDQ3N2Q3MGMzNzFlN2I4OTYzODEyZjVlZDRmYjc4NGZiMmYzYmQxZDNhZmU4ODNjZGQ0N2VmMzJiZWFlYSI6IjY2OTJhNzFkNzNlMDBmMjdkZjk3NmJjNTZkZjQ5NzA2NTBkOTBlNDUiCisKK1NIQS0xIFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMTAKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0MKK21iZWR0bHNfc2hhMToiODIzNjE1Mzc4MWJkMmYxYjgxZmZlMGRlZjFiZWI0NmY1YTcwMTkxMTQyOTI2NjUxNTAzZjFiM2JiMTAxNmFjZGI5ZTdmN2FjY2VkOGRkMTY4MjI2ZjExOGZmNjY0YTAxYTg4MDAxMTZmZDAyMzU4N2JmYmE1MmEyNTU4MzkzNDc2ZjVmYzY5Y2U5YzY1MDAxZjIzZTcwNDc2ZDJjYzgxYzk3ZWExOWNhZWIxOTRlMjI0MzM5YmNiMjNmNzdhODNmZWFjNTA5NmY5YjMwOTBjNTFhNmVlNmQyMDRiNzM1YWE3MWQ3ZTk5NmQzODBiODA4MjJlNGRmZDQzNjgzYWY5Yzc0NDI0OThjYWNiZWE2NDg0MmRmZGEyMzhjYjA5OTkyN2M2ZWZhZTA3ZmRmN2IyM2E0ZTQ0NTZlMDE1MmIyNDg1M2ZlMGQ1ZGU0MTc5OTc0YjJiOWQ0YTFjZGJlZmNiYzAxZDhkMzExYjVkZGEwNTkxMzYxNzZlYTY5OGFiODJhY2YyMGRkNDkwYmU0NzEzMGIxMjM1Y2I0OGY4YTY3MTA0NzNjZmM5MjNlMjIyZDk0YjU4MmY5YWUzNmQ0Y2EyYTMyZDE0MWI4ZThjYzM2NjM4ODQ1ZmJjNDk5YmNlMTc2OThjM2ZlY2FlMjU3MmRiYmQ0NzA1NTI0MzBkN2VmMzBjMjM4YzIxMjQ0NzhmMWY3ODA0ODM4MzliNGZiNzNkNjNhOTQ2MDIwNjgyNGE1YjZiNjUzMTViMjFlM2MyZjI0Yzk3ZWU3YzBlNzhmYWFkM2RmNTQ5YzdjYThlZjI0MTg3NmQ5YWFmZTlhMzA5ZjZkYTM1MmJlYzJjYWFhOTJlZThkY2EzOTI4OTliYTY3ZGZlZDkwYWVmMzNkNDFmYzI0OTRiNzY1Y2IzZTI0MjJjOGU1OTVkYWJiZmFjYTIxNzc1NzQ1M2ZiMzIyYTEzMjAzZjQyNWY2MDczYTk5MDNlMmRjNTgxOGVlMWRhNzM3YWZjMzQ1ZjAwNTc3NDRlM2E1NmUxNjgxYzk0OWViMTIyNzNhM2JmYzIwNjk5ZTQyM2I5NmU0NGJkMWZmNjJlNTBhODQ4YTg5MDgwOWJmZTE2MTFjNjc4N2QzZDc0MTEwMzMwOGY4NDlhNzkwZjljMDE1MDk4Mjg2ZGJhY2ZjMzRjMTcxOGIyYzJiNzdlMzIxOTRhNzVkZGEzNzk1NGEzMjBmYTY4NzY0MDI3ODUyODU1YTdlNWI1Mjc0ZWIxZTJjYmNkMjcxNjFkOThiNTlhZDI0NTgyMjAxNWY0OGFmODJhNDVjMGVkNTliZTk0ZjlhZjAzZDk3MzYwNDg1NzBkNmUzZWY2M2IxNzcwYmM5OGRmYjc3ZGU4NGIxYmIxNzA4ZDg3MmI2MjVkOWFiOWIwNmMxOGU1ZGJiZjM0Mzk5MzkxZjBmOGFhMjZlYzBkYWM3ZmY0Y2I4ZWM5N2I1MmJjYjk0MmZhNmRiMjM4NWRjZDFiM2I5ZDU2N2FhZWI0MjVkNTY3YjBlYmUyNjcyMzU2NTFhMWVkOWJmNzhmZDkzZDNjMWRkMDc3ZmUzNDBiYjA0YjAwNTI5YzU4ZjQ1MTI0YjcxN2MxNjhkMDdlOTgyNmUzMzM3Njk4OGJjNWNmNjI4NDVjMjAwOTk4MGE0ZGZhNjlmYmM3ZTVhMGIxYmIyMGE1OTU4Y2E5NjdhZWM2OGViMzFkZDhmY2NjYTlhZmNkMzBhMjZiYWIyNjI3OWYxYmY2NzI0ZmYiOiIxMTg2M2I0ODM4MDllZjg4NDEzY2E5YjAwODRhYzRhNTM5MDY0MGFmIgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6IiI6ImQxNGEwMjhjMmEzYTJiYzk0NzYxMDJiYjI4ODIzNGM0MTVhMmIwMWY4MjhlYTYyYWM1YjNlNDJmIgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6ImZmIjoiZTMzZjlkNzVlNmFlMTM2OWRiYWJmODFiOTZiNDU5MWFlNDZiYmEzMGI1OTFhNmI2YzYyNTQyYjUiCisKK1NIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3NoYTIyNDoiOTg0YyI6IjJmYTlkZjkxNTdkOWUwMjdjZmJjNGM2YTlkZjMyZTFhZGMwY2JlMjMyOGVjMmE2M2M1YWU5MzRlIgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6IjUwZWZkMCI6ImI1YTk4MjA0MTNjMmJmODIxMWZiYmY1ZGYxMzM3MDQzYjMyZmE0ZWFmYWY2MWEwYzhlOWNjZWRlIgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6ImU1ZTA5OTI0IjoiZmQxOWU3NDY5MGQyOTE0NjdjZTU5ZjA3N2RmMzExNjM4ZjFjM2E0NmU1MTBkMGU0OWE2NzA2MmQiCisKK1NIQS0yMjQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3NoYTIyNDoiMjFlYmVjYjkxNCI6Ijc4ZjRhNzFjMjFjNjk0NDk5Y2UxYzc4NjY2MTFiMTRhY2U3MGQ5MDUwMTJjMzU2MzIzYzdjNzEzIgorCitTSEEtMjI0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCitzaGEyMjQ6ImZjNDg4OTQ3YzFhN2E1ODk3MjZiMTU0MzZiNGYzZDk1NTYyNjJmOThmYzY0MjJmYzVjZGYyMGYwZmFkN2ZlNDI3YTM0OTFjODZkMTAxZmZlNmI3NTE0ZjA2MjY4ZjY1YjJkMjY5YjBmNjlhZDlhOTc4NDdlZmYxYzE2YTI0Mzg3NzVlYjdiZTY4NDdjY2YxMWNiOGIyZThkY2Q2NjQwYjA5NWI0OWMwNjkzZmUzY2Y0YTY2ZTJkOWI3YWQ2OGJmZjE0ZjNhZDY5YWJmNDlkMGFiYTM2Y2JlMDUzNTIwMmRlYjY1OTlhNDcyMjVlZjA1YmViMzUxMzM1Y2Q3YmMwZjQ4MGQ2OTExOThjN2U3MTMwNWZmZDUzYjM5ZDMzMjQyYmI3OWNmZDk4YmZkNjllMTM3YjVkMThiMmI4OWFjOWFjZTAxYzhkYmRjZjI1MzNjY2UzNjgyZWNjNTIxMThkZTBjMTA2MmVjMjEyNmMyZTY1N2Q2ZWEzZDllMjM5OGU3MDVkNGIwYjFmMWNlZWNiMjY2ZGZmYzRmMzFiZjQyNzQ0ZmIxZTkzOGRjMjJhODg5OTE5ZWUxZTczZjQ2M2Y3ODcxZmVkNzIwNTE5ZTMyMTg2MjY0YjdlZjJhMGU1ZDlhMThlNmM5NWMwNzgxODk0Zjc3OTY3ZjA0ODk1MWRlYzNiNGQ4OTJhMzg3MTBiMWUzNDM2ZDNjMjkwODhlYjhiM2RhMTc4OWMyNWRiM2QzYmM2YzI2MDgxMjA2ZTcxNTVkMjEwYTg5YjgwY2E2ZWE4NzdjNDFmZjk5NDdjMGYyNTYyNWRjYjExODI5NGExNjM1MDFmNjIzOWMzMjY2NjFhOTU4ZmQxMmRhNGNkMTVhODk5ZjhiODhjYzcyMzU4OTA1NmVhZWM1YWEwNGE0Y2Y1ZGJiNmY0ODBmOTY2MDQyM2NjZjM4YzQ4NmUyMTA3MDdlMGZiMjVlMWYxMjZjZWIyNjE2ZjYzZTE0N2E2NDdkYWIwYWY5ZWJlODlkNjU0NThiZjYzNjE1NGE0NmU0Y2FiOTVmNWVlNjJkYTJjNzk3NGNkMTRiOTBkM2U0Zjk5ZjgxNzMzZTg1YjNjMWQ1ZGEyYjUwOGQ5YjkwZjVlZWQ3ZWZmMGQ5Yzc2NDlkZTYyYmVlMDAzNzU0NTRmZWU0YTM5NTc2YTViYmZkYWU0MjhlN2Y4MDk3YmRmNzc5N2YxNjc2ODZjYjY4NDA3ZTQ5MDc5ZTQ2MTFmZjM0MDJiNjM4NGJhN2I3ZTUyMmJkMmJiMTFjZThmZDAyZWE0YzE2MDRkMTYzYWM0ZjZkZGU1MGI4YjFmNTkzZjdlZGFhZGVhYzA4NjhlZDk3ZGY2OTAyMDA2ODBjMjVmMGY1ZDg1NDMxYTUyOWU0ZjMzOTA4OWRjZGVkYTEwNWU0ZWU1MWRlYWQ3MDRjZGY1YTYwNWM1NWZiMDU1YzliMGU4NmI4YmExYjU2NGMwZGVhM2ViNzkwYTU5NWNiMTAzY2IyOTIyNjhiMDdjNWU1OTM3MWUxYTdlZjU5N2NkNGIyMjk3N2E4MjA2OTRjOWY5YWViNTVkOWRlM2VmNjJiNzVkNmU2NTZlMzMzNjY5OGQ5NjBhMzc4N2JmOGNmNWI5MjZhN2ZhZWVmNTJhZTEyOGJjYjVkYzllNjZkOTRiMDE2YzdiOGUwMzQ4NzkxNzFhMmQ5MWMzODFmNTdlNmE4MTViNjNiNWVlNmE2ZDJmZjQzNWI0OWYxNGM5NjM5NjY5NjAxOTQ0MzBkNzhmOGY4NzYyN2E2Nzc1N2ZiMzUzMmIyODk1NTA4OTRkYTZkY2U0ODE3YTRlMDdmNGQ1Njg3N2ExMTAyZmZjYzhiZWZhNWM5ZjhmY2E2YTQ1NzRkOTNmZjcwMzc2Yzg4NjFlMGY4MTA4Y2Y5MDdmY2U3N2VjYjQ5NzI4Zjg2ZjAzNGY4MDIyNGI5Njk1NjgyZTA4MjQ0NjJmNzZjZGIxZmQxYWYxNTEzMzdiMGQ4NTQxOTA0N2E3YWEyODQ3OTE3MThhNDg2MGNkNTg2Zjc4MjRiOTViYzgzN2I2ZmQ0ZjliZTVhYWRlNjg0NTZlMjAzNTZhYTRkOTQzZGFjMzZiZjhiNjdiOWU4ZjlkMDFhMDBmY2RhNzRiNzk4YmFmYTc0NmM2NjFiMDEwZjc1YjU5OTA0YjI5ZDBjODA0MTUwNDgxMWM0MDY1ZjgyY2YyZWFkNThkMmY1OTVjYmQ4YmMzZTcwNDNmNGQ5NDU3N2IzNzNiN2NmZTE2YTM2ZmU1NjRmNTA1YzAzYjcwY2ZlYjVlNWY0MTFjNzk0ODEzMzhhYTY3ZTg2YjNmNWEyZTc3YzIxZTQ1NGMzMzNhZTNkYTk0M2FiNzIzYWI1ZjRjOTQwMzk1MzE5NTM0YTU1NzVmNjRhY2JhMGQwZWNjNDNmNjAyMjFlZDNiYWRmNzI4OWM5YjNhN2I5MDNhMmQ2Yzk0ZTE1ZmE0YzMxMGRjNGZhN2ZhYTBjMjRmNDA1MTYwYTEwMDJkYmVmMjBlNDEwNWQ0ODFkYjk4MmY3MjQzZjc5NDAwYTZlNGNkOTc1M2M0Yjk3MzJhNDc1NzVmNTA0YjIwYzMyOGZlOWFkZDdmNDMyYTRmMDc1ODI5ZGEwN2I1M2I2OTUwMzdkYzUxNzM3ZDNjZDczMTkzNGRmMzMzY2QxYTUzZmNmNjVhYTMxYmFhNDUwY2E1MDFhNmZhZTI2ZTMyMjM0N2U2MThjNWE0NDRkOTJlOWZlYzVhODI2MWFlMzhiOThmZWU1YmU3N2MwMmNlYzA5ZGRjY2Q1YjNkZTkyMDM2IjoiMTMwMjE0OWQxZTE5N2M0MTgxM2IwNTRjOTQyMzI5ZDQyMGUzNjY1MzBmNTUxN2I0NzBlOTY0ZmUiCisKK1NIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfc2hhMjU2OiIiOiJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1IgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiYmQiOiI2ODMyNTcyMGFhYmQ3YzgyZjMwZjU1NGIzMTNkMDU3MGM5NWFjY2JiN2RjNGI1YWFlMTEyMDRjMDhmZmU3MzJiIgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiNWZkNCI6IjdjNGZiZjQ4NDQ5OGQyMWI0ODdiOWQ2MWRlODkxNGIyZWFkYWYyNjk4NzEyOTM2ZDQ3YzNhZGEyNTU4ZjY3ODgiCisKK1NIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfc2hhMjU2OiJiMGJkNjkiOiI0MDk2ODA0MjIxMDkzZGRjY2ZiZjQ2ODMxNDkwZWE2M2U5ZTk5NDE0ODU4ZjhkNzVmZjdmNjQyYzdjYTYxODAzIgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiYzk4YzhlNTUiOiI3YWJjMjJjMGFlNWFmMjZjZTkzZGJiOTQ0MzNhMGUwYjJlMTE5ZDAxNGY4ZTdmNjViZDU2YzYxY2NjY2Q5NTA0IgorCitTSEEtMjU2IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3NoYTI1NjoiODFhNzIzZDk2NiI6Ijc1MTZmYjhiYjExMzUwZGYyYmYzODZiYzNjMzNiZDBmNTJjYjRjNjdjNmU0NzQ1ZTA0ODhlNjJjMmFlYTI2MDUiCisKK1NIQS0yNTYgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfc2hhMjU2OiI4MzkwY2YwYmUwNzY2MWNjNzY2OWFhYzU0Y2UwOWEzNzczM2E2MjlkNDVmNWQ5ODNlZjIwMWY5YjJkMTM4MDBlNTU1ZDliMTA5N2ZlYzNiNzgzZDdhNTBkY2I1ZTJiNjQ0Yjk2YTFlOTQ2M2YxNzdjZjM0OTA2YmYzODhmMzY2ZGI1YzJkZWVlMDRhMzBlMjgzZjc2NGE5N2MzYjM3N2EwMzRmZWZjMjJjMjU5MjE0ZmFhOTliYWJhZmYxNjBhYjBhYWE3ZTJjY2IwY2UwOWM2YjMyZmUwOGNiYzQ3NDY5NDM3NWFiYTcwM2ZhZGJmYTMxY2Y2ODViMzBhMTFjNTdmM2NmNGVkZDMyMWU1N2QzYWU2ZWJiMTEzM2M4MjYwZTc1YjkyMjRmYTQ3YTJiYjIwNTI0OWFkZDJlMmU2MmY4MTc0OTE0ODJhZTE1MjMyMmJlMDkwMDM1NWNkY2M4ZDQyYTk4ZjgyZTk2MWEwZGM2ZjUzN2I3YjQxMGVmZjEwNWY1OTY3M2JmYjc4N2JmMDQyYWEwNzFmN2FmNjhkOTQ0ZDI3MzcxYzY0MTYwZmU5MzgyNzcyMzcyNTE2YzIzMGMxZjQ1YzBkNmI2Y2NhN2YyNzRiMzk0ZGE5NDAyZDNlYWZkZjczMzk5NGVjNThhYjIyZDcxODI5YTk4Mzk5NTc0ZDRiNTkwOGE0NDdhNWE2ODFjYjBkZDUwYTMxMTQ1MzExZDkyYzIyYTE2ZGUxZWFkNjZhNTQ5OWYyZGNlYjRjYWU2OTQ3NzJjZTkwNzYyZWY4MzM2YWZlYzY1M2FhOWIxYTFjNDgyMGIyMjExMzZkZmNlODBkY2UyYmE5MjBkODhhNTMwYzk0MTBkMGE0ZTAzNThhM2ExMTA1MmU1OGRkNzNiMGIxNzllZjhmNTZmZTNiNWEyZDExN2E3M2EwYzM4YTEzOTJiNjkzOGU5NzgyZTBkODY0NTZlZTQ4ODRlM2MzOWQ0ZDc1ODEzZjEzNjMzYmM3OWJhYTA3YzBkMmQ1NTVhZmJmMjA3ZjUyYjdkY2ExMjZkMDE1YWEyYjk4NzNiM2ViMDY1ZTkwYjliMDY1YTUzNzNmZTFmYjFiMjBkNTk0MzI3ZDE5ZmJhNTZjYjgxZTdiNjY5NjYwNWZmYTU2ZWJhM2MyN2E0Mzg2OTdjYzIxYjIwMWZkN2UwOWYxOGRlZWExYjNlYTJmMGQxZWRjMDJkZjBlMjAzOTZhMTQ1NDEyY2Q2YjEzYzMyZDJlNjA1NjQxYzk0OGI3MTRhZWMzMGMwNjQ5ZGM0NDE0MzUxMWYzNWFiMGZkNWRkNjRjMzRkMDZmZTg2ZjM4MzZkZmU5ZWRlYjdmMDhjZmMzYmQ0MDk1NjgyNjM1NjI0MjE5MWY5OWY1MzQ3M2YzMmIwY2MwY2Y5MzIxZDZjOTJhMTEyZThkYjkwYjg2ZWU5ZTg3Y2MzMmQwMzQzZGIwMWUzMmNlOWViNzgyY2IyNGVmYmJiZWI0NDBmZTkyOWU4ZjJiZjhkZmIxNTUwYTNhMmU3NDJlOGI0NTVhM2U1NzMwZTllNmE3YTk4MjRkMTdhY2MwZjcyYTdmNjdlYWUwZjA5NzBmOGJkZTQ2ZGNkZWZhZWQzMDQ3Y2Y4MDdlN2YwMGE0MmU1ZmQxMWQ0MGY1ZTk4NTMzZDc1NzQ0MjViN2QyYmMzYjM4NDVjNDQzMDA4YjU4OTgwZTc2OGU0NjRlMTdjYzZmNmIzOTM5ZWVlNTJmNzEzOTYzZDA3ZDhjNGFiZjAyNDQ4ZWYwYjg4OWM5NjcxZTJmOGE0MzZkZGVlZmZjY2E3MTc2ZTliZjlkMTAwNWVjZDM3N2YyZmE2N2MyM2VkMWYxMzdlNjBiZjQ2MDE4YThiZDYxM2QwMzhlODgzNzA0ZmMyNmU3OTg5NjlkZjM1ZWM3YmJjNmE0ZmU0NmQ4OTEwYmQ4MmZhM2NkZWQyNjVkMGEzYjZkMzk5ZTQyNTFlNGQ4MjMzZGFhMjFiNTgxMmZkZWQ2NTM2MTk4ZmYxM2FhNWExY2Q0NmE1YjlhMTdhNGRkYzFkOWY4NTU0NGQxZDFjYzE2ZjNkZjg1ODAzOGM4ZTA3MWExMWE3ZTE1N2E4NWE2YThkYzQ3ZTg4ZDc1ZTcwMDlhOGIyNmZkYjczZjMzYTJhNzBmMWUwYzI1OWY4Zjk1MzNiOWI4ZjlhZjkyODhiNzI3NGYyMWJhZWVjNzhkMzk2ZjhiYWNkY2MyMjQ3MTIwN2Q5YjRlZmNjZDNmZWRjNWM1YTIyMTRmZjVlNTFjNTUzZjM1ZTIxYWU2OTZmZTUxZThkZjczM2E4ZTA2ZjUwZjQxOWU1OTllOWY5ZTRiMzdjZTY0M2ZjODEwZmFhYTQ3OTg5NzcxNTA5ZDY5YTExMGFjOTE2MjYxNDI3MDI2MzY5YTIxMjYzYWM0NDYwZmI0ZjcwOGY4YWUyODU5OTg1NmRiN2NiNmE0M2FjOGUwM2Q2NGE5NjA5ODA3ZTc2YzVmMzEyYjlkMTg2M2JmYTMwNGU4OTUzNjQ3NjQ4YjRmNGFiMGVkOTk1ZSI6IjQxMDljZGJlYzMyNDBhZDc0Y2M2YzM3ZjM5MzAwZjcwZmVkZTE2ZTIxZWZjNzdmNzg2NTk5ODcxNGFhZDBiNWUiCisKK1NIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK3NoYTM4NDoiIjoiMzhiMDYwYTc1MWFjOTYzODRjZDkzMjdlYjFiMWUzNmEyMWZkYjcxMTE0YmUwNzQzNGMwY2M3YmY2M2Y2ZTFkYTI3NGVkZWJmZTc2ZjY1ZmJkNTFhZDJmMTQ4OThiOTViIgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6ImFiIjoiZmI5NGQ1YmUxMTg4NjVmNmZjYmM5NzhiODI1ZGE4MmNmZjE4OGZhZWMyZjY2Y2I4NGIyNTM3ZDc0YjQ5Mzg0Njk4NTRiMGNhODllNjZmYTJlMTgyODM0NzM2NjI5ZjNkIgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjMworZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IjdjMjciOiIzZDgwYmU0NjdkZjg2ZDYzYWJiOWVhMWQzZjljYjM5Y2QxOTg5MGU3ZjJjNTNhNjIwMGJlZGM1MDA2ODQyYjM1ZTgyMGRjNGUwY2E5MGNhOWI5N2FiMjNlZjA3MDgwZmMiCisKK1NIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK3NoYTM4NDoiMzFmNWNhIjoiNzhkNTRiOTQzNDIxZmRmN2JhOTBhN2ZiOTYzN2MyMDczYWE0ODA0NTRiZDg0MWQzOWZmNzJmNDUxMWZjMjFmYjY3Nzk3YjY1MmMwYzgyMzIyOTM0Mjg3M2QzYmVmOTU1IgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IjdiZGVlM2Y4IjoiOGJkYWZiYTA3NzdlZTQ0NmMzNDMxYzJkN2IxZmJiNjMxMDg5ZjcxZDJjYTQxN2FiYzFkMjMwZTFhYmE2NGVjMmYxYzE4NzQ3NGE2ZjQwNzdkMzcyYzE0YWQ0MDdmOTlhIgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjNgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IjhmMDU2MDQ5MTUiOiI1MDRlNDE0YmYxZGIxMDYwZjE0YzhjNzk5ZTI1YjFlMGM0ZGNmMTUwNGViYmQxMjk5OThmMGFlMjgzZTZkZTg2ZTBkM2M3ZTg3OWM3M2VjM2IxODM2YzNlZTg5YzI2NDkiCisKK1NIQS0zODQgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK3NoYTM4NDoiNjY1ZGE2ZWRhMjE0IjoiNGMwMjJmMTEyMDEwOTA4ODQ4MzEyZjhiOGYxMDcyNjI1ZmQ1YzEwNTM5OWQ1NjJlYTFkNTYxMzA2MTlhN2VhYzhkZmMzNzQ4ZmQwNWVlMzdlNGI2OTBiZTlkYWE5OTgwIgorCitTSEEtMzg0IFRlc3QgVmVjdG9yIE5JU1QgQ0FWUyAjOAorZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DCitzaGEzODQ6IjdmNDZjZTUwNmQ1OTNjNGVkNTNjODJlZGViNjAyMDM3ZTA0ODViZWZiZWUwM2Y3ZjkzMGZlNTMyZDE4ZmYyYTNmNWZkNjA3NjY3MmM4MTQ1YTFiZjQwZGQ5NGY3YWJhYjQ3YzlhZTcxYzIzNDIxM2QyYWQxMDY5YzJkYWMwYjBiYTE1MjU3YWU2NzJiODI0NTk2MGFlNTViZDUwMzE1YzAwOTdkYWEzYTMxODc0NTc4OGQ3MGQxNDcwNjkxMDgwOWNhNmUzOTYyMzdmZTQ5MzRmYTQ2ZjljZTc4MmQ2NjYwNmQ4YmQ2YjJkMjgzYjExNjA1MTNjZTljMjRlOWYwODRiOTc4OTFmOTlkNGNkZWZjMTY5YTAyOWU0MzFjYTc3MmJhMWJiYTQyNmZjZTZmMDFkOGUyODYwMTRlNWFjYzY2Yjc5OWU0ZGI2MmJkNDc4MzMyMmY4YTMyZmY3OGUwZGUzOTU3ZGY1MGNlMTA4NzFmNGUwNjgwZGY0ZThjYTM5NjBhZjliYzZmNGVmYThlYjM5NjJkMThmNDc0ZWIxNzhjMzI2NWNjNDZiOGYyZmY1YWIxYTc0NDlmZWEyOTdkZmNmYWJmYTAxZjI4YWJiYjcyODliYjM1NGI2OTFiNTY2NGVjNmQwOThhZjUxYmUxOTk0N2VjNWJhN2ViZDY2MzgwZDExNDE5NTNiYTc4ZDRhYTU0MDE2NzlmYTdiMGE0NGRiMTk4MWY4NjRkMzUzNWM0NWFmZTRjNjExODNkNWIwYWQ1MWZhZTcxY2EwN2UzNDI0MDI4Mzk1OWY3NTMwYTMyYzcwZDk1YTA4OGU1MDFjMjMwMDU5ZjMzM2IwNjcwODI1MDA5ZTdlMjIxMDNlZjIyOTM1ODMwZGYxZmFjOGVmODc3ZjVmMzQyNmRkNTRmN2QxMTI4ZGQ4NzFhZDlhN2QwODhmOTRjMGU4NzEyMDEzMjk1YjhkNjlhZTc2MjNiODgwOTc4YzJkM2M2YWQyNmRjNDc4ZjhkYzQ3ZjVjMGFkY2M2MTg2NjVkYzNkYzIwNWE5MDcxYjJmMjE5MWUxNmNhYzViZDg5YmI1OTE0OGZjNzE5NjMzNzUyMzAzYWEwOGU1MThkYmMzODlmMGE1NDgyY2FhYTRjNTA3Yjg3MjlhNmYzZWRkMDYxZWZiMzkwMjZjZWNjNjM5OWY1MTk3MWNmNzM4MWQ2MDVlMTQ0YTU5MjhjOGMyZDFhZDc0NjdiMDVkYTJmMjAyZjRmMzIzNGUxYWZmMTlhMDE5OGEyODY4NTcyMWMzZDJkNTIzMTFjNzIxZTNmZGNiYWYzMDIxNGNkYzNhY2ZmOGM0MzM4ODBlMTA0ZmI2M2YyZGY3Y2U2OWE5Nzg1NzgxOWJhN2FjMDBhYzhlYWUxOTY5NzY0ZmRlOGY2OGNmOGUwOTE2ZDdlMGMxNTExNDdkNDk0NGY5OWY0MmFlNTBmMzBlMWM3OWE0MmQyYjZjNTE4OGQxMzNkM2NiYmY2OTA5NDAyN2IzNTRiMjk1Y2NkMGY3ZGM1YTg3ZDczNjM4YmQ5OGViZmIwMDM4M2NhMGZhNjljYjhkY2IzNWExMjUxMGU1ZTA3YWQ4Nzg5MDQ3ZDBiNjM4NDFhMWJiOTI4NzM3ZThiMGEwYzMzMjU0ZjQ3YWE4YmZiZTMzNDFhMDljMmI3NmRiY2VmYTY3ZTMwZGYzMDBkMzRmN2I4NDY1YzRmODY5ZTUxYjZiY2ZlNmNmNjhiMjM4MzU5YTY0NTAzNmJmN2Y2M2YwMjkyNGUwODdjZTc0NTdlNDgzYjYwMjVhODU5OTAzY2I0ODQ1NzRhYTNiMTJjZjk0NmYzMjEyN2Q1MzdjMzNiZWUzMTQxYjVkYjk2ZDEwYTE0OGM1MGFlMDQ1ZjI4NzIxMDc1NzcxMGQ2ODQ2ZTA0YjIwMmY3OWU4N2RkOWE1NmJjNmRhMTVmODRhNzdhN2Y2MzkzNWUxZGVlMDAzMDljZDI3NmE4ZTcxNzZjYjA0ZGE2YmIwZTkwMDk1MzQ0Mzg3MzJjYjQyZDAwODAwODg1M2QzOGQxOWJlYmE0NmU2MTAwNmUzMGY3ZWZkMWJjN2MyOTA2YjAyNGU0ZmY4OThhMWI1OGM0NDhkNjhiNDNjNmFiNjNmMzRmODViM2FjNmFhNDQ3NTg2N2U1MWI1ODM4NDRjYjIzODI5ZjRiMzBmNGJkZDgxN2Q4OGUyZWYzZTdiNGZjMGE2MjQzOTViMDVlYzVlODY4NjA4MmIyNGQyOWZlZjJiMGQzYzI5ZTAzMWQ1Zjk0ZjUwNGIxZDNkZjkzNjFlYjVmZmJhZGIyNDJlNjZjMzlhODA5NGNmZTYyZjg1ZjYzOWYzZmQ2NWZjOGFlMGM3NGE4ZjRjNmUxZDA3MGI5MTgzYTQzNGM3MjJjYWFhMDIyNWY4YmNkNjg2MTRkNmYwNzM4ZWQ2MmY4NDg0ZWM5NjA3N2QxNTVjMDhlMjZjNDZiZTI2MmE3M2UzNTUxNjk4YmQ3MGQ4ZDU2MTBjZjM3YzRjMzA2ZWVkMDRiYTZhMDQwYTljM2U2ZDdlMTVlOGFjZGExN2Y0NzdjMjQ4NGNmNWM1NmI4MTMzMTM5MjdiZTgzODdiMTAyNGY5OTVlOThmYzg3ZjEwMjkwOTFjMDE0MjRiZGMyYjI5NmMyZWFkYjdkMjViM2U3NjJhMmZkMGMyZGNkMTcyN2RkZjkxZGI5N2M1OTg0MzA1MjY1ZjM2OTVhN2Y1NDcyZjJkNzJjOTRkNjhjMjc5MTRmMTRmODJhYThkZDVmZTRlMjM0OGIwY2E5NjdhM2Y5ODYyNmEwOTE1NTJmNWQwZmZhMmJmMTAzNTBkMjNjOTk2MjU2YzAxZmRlZmZiMmMyYzYxMjUxOTg2OWY4NzdlNDkyOWM2ZTk1ZmYxNTA0MGYxNDg1ZTIyZWQxNDExOTg4MDIzMmZlZjNiNTdiMzg0OGYxNWIxNzY2YTU1NTI4NzlkZjhmMDYiOiJjYmE5ZTNlYjEyYTZmODNkYjExZThhNmZmNDBkMTA0OTg1NGVlMDk0NDE2YmM1MjdmZWE5MzFkODU4NTQyOGE4ZWQ2MjQyY2U4MWY2NzY5YjM2ZTIxMjNhNWMyMzQ4M2UiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMxCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiIiOiJjZjgzZTEzNTdlZWZiOGJkZjE1NDI4NTBkNjZkODAwN2Q2MjBlNDA1MGI1NzE1ZGM4M2Y0YTkyMWQzNmNlOWNlNDdkMGQxM2M1ZDg1ZjJiMGZmODMxOGQyODc3ZWVjMmY2M2I5MzFiZDQ3NDE3YTgxYTUzODMyN2FmOTI3ZGEzZSIKKworU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19zaGE1MTI6IjhmIjoiZTRjZDJkMTk5MzFiNWFhZDljOTIwZjQ1ZjU2ZjZjZTM0ZTNkMzhjNmQzMTlhNmUxMWQwNTg4YWI4YjgzODU3NmQ2Y2U2ZDY4ZWVhN2M4MzBkZTY2ZTJiZDk2NDU4YmZhN2FhZmJjYmVjOTgxZDRlZDA0MDQ5OGMzZGQ5NWYyMmEiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICMzCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiJlNzI0IjoiN2RiYjUyMDIyMWE3MDI4N2IyM2RiY2Y2MmJmYzFiNzMxMzZkODU4ZTg2MjY2NzMyYTdmZmZhODc1ZWNhYTJjMWI4ZjY3M2I1YzA2NWQzNjBjNTYzYTdiOTUzOTM0OWY1ZjU5YmVmOGMwYzU5M2Y5NTg3ZTNjZDUwYmIyNmEyMzEiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiJkZTRjOTAiOiIzM2NlOTgyODEwNDVhNWM0YzlkZjAzNjNkODE5NmYxZDdkZmNkNWVlNDZhYzg5Nzc2ZmQ4YTQzNDRjMTJmMTIzYTY2Nzg4YWY1YmQ0MWNlZmYxOTQxYWE1NjM3NjU0YjQwNjRjODhjMTRlMDA0NjVhYjc5YTJmYzZjOTdlMTAxNCIKKworU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzUKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19zaGE1MTI6ImE4MDFlOTRiIjoiZGFkYjFiNWEyN2Y5ZmVjZThkODZhZGIyYTUxODc5YmViMTc4N2ZmMjhmNGU4Y2UxNjJjYWQ3ZmVlMGY5NDJlZmNhYmJmNzM4YmM2Zjc5N2ZjN2NjNzlhM2E3NTA0OGNkNGM4MmNhMDc1N2EzMjQ2OTViZmIxOWE1NTdlNTZlMmYiCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiI5NDM5MGQzNTAyIjoiYjYxNzVjNGM0Y2NjZjY5ZTBjZTVmMDMxMjAxMDg4NmVhNmIzNGQ0MzY3M2Y5NDJhZTQyNDgzZjljYmI3ZGE4MTdkZTRlMTFiNWQ1OGUyNWEzZDliZDcyMWEyMmNkZmZlMWM0MDQxMWNjNDVkZjE5MTFmYTU1MDYxMjliNjkyOTciCisKK1NIQS01MTIgVGVzdCBWZWN0b3IgTklTVCBDQVZTICM3CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfc2hhNTEyOiI0OTI5N2RkNjNlNWYiOiIxZmNjMWU2ZjY4NzA4NTlkMTE2NDlmNWU1MzM2YTljZDE2MzI5YzAyOWJhZjA0ZDVhNmVkZjI1Nzg4OWEyZTk1MjJiNDk3ZGQ2NTZiYjQwMmRhNDYxMzA3YzRlZTM4MmUyZTg5MzgwYzhlNmU2ZTc2OTdmMWU0MzlmNjUwZmE5NCIKKworU0hBLTUxMiBUZXN0IFZlY3RvciBOSVNUIENBVlMgIzgKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc19zaGE1MTI6Ijk5MGQxYWU3MWE2MmQ3YmRhOWJmZGFhMTc2MmE2OGQyOTZlZWU3MmE0Y2Q5NDZmMjg3YTg5OGZiYWJjMDAyZWE5NDFmZDhkNGQ5OTEwMzBiNGQyN2E2MzdjY2U1MDFhODM0YmI5NWVhYjFiNzg4OWEzZTc4NGM3OTY4ZTY3Y2JmNTUyMDA2YjIwNmI2OGY3NmQ5MTkxMzI3NTI0ZmNjMjUxYWViNTZhZjQ4M2QxMGI0ZTBjNmM1ZTU5OWVlOGMwZmU0ZmFlY2E4MjkzODQ0YTg1NDdjNmE5YTkwZDA5M2YyNTI2ODczYTE5YWQ0YTVlNzc2Nzk0YzY4Yzc0MmZiODM0NzkzZDJkZmNiN2ZlYTQ2YzYzYWY0YjcwZmQxMWNiNmU0MTgzNGU3MmVlNDBlZGIwNjdiMjkyYTc5NDk5MGMyODhkNTAwN2U3M2YzNDlmYjM4M2FmNmE3NTZiODMwMWFkNmU1ZTBhYThjZDYxNDM5OWJiM2E0NTIzNzZiMTU3NWFmYTZiZGFlYWFmYzI4NmNiMDY0YmI5MWVkZWY5N2M2MzJiNmMxMTEzZDEwN2ZhOTNhMDkwNTA5OGExMDUwNDNjMmYwNTM5N2Y3MDI1MTQ0MzlhMDhhOWU1ZGRjMTk2MTAwNzIxZDQ1YzhmYzE3ZDJlZDY1OTM3NmY4YTAwYmQ1Y2I5YTA4NjBlMjZkOGEyOWQ4ZDZhYWY1MmRlOTdlOTM0NjAzM2Q2ZGI1MDFhMzVkYmJhZjk3YzIwYjgzMGNkMmQxOGMyNTMyZjNhNTljYzQ5N2VlNjRjMGU1N2Q4ZDA2MGU1MDY5YjI4ZDg2ZWRmMWFkY2Y1OTE0NGIyMjFjZTNkZGFlZjEzNGIzMTI0ZmJjN2RkMDAwMjQwZWZmMGY1ZjVmNDFlODNjZDdmNWJiMzdjOWFlMjE5NTNmZTMwMmIwZjZlOGI2OGZhOTFjNmFiOTkyNjVjNjRiMmZkOWNkNDk0MmJlMDQzMjFiYjVkNmQ3MTkzMjM3NmM2ZjJmODhlMDI0MjJiYTZhNWUyY2I3NjVkZjkzZmQ1ZGQwNzI4YzZhYmRhZjAzYmNlMjJlMDY3OGE1NDRlMmMzNjM2Zjc0MWI2ZjQ0NDdlZTU4YThmYzY1NmI0M2VmODE3OTMyMTc2YWRiZmMyZTA0YjJjODEyYzI3M2NkNmNiZmE0MDk4ZjBiZTAzNmEzNDIyMWZhMDI2NDNmNWVlMmUwYjM4MTM1ZjJhMThlY2QyZjE2ZWJjNDVmOGViMzFiOGFiOTY3YTE1NjdlZTAxNjkwNDE4ODkxMDg2MWNhMWZhMjA1YzdhZGFhMTk0YjI4Njg5M2ZmZTJmNGZiZTAzODRjMmFlZjcyYTQ1MjJhZWFmZDNlYmM3MWY5ZGI3MWVlZWVmODZjNDgzOTRhMWM4NmQ1YjM2YzM1MmNjMzNhMGEyYzgwMGJjOTllNjJmZDY1YjNhMmZkNjllMGI1Mzk5NmVjMTNkOGNlNDgzY2U5MzE5ZWZkOWE4NWFjZWZhYmRiNTM0MjIyNmZlYmI4M2ZkMWRhZjRiMjQyNjVmNTBjNjFjNmRlNzQwNzdlZjg5YjZmZWNmOWYyOWExZjg3MWFmMWU5Zjg5YjJkMzQ1Y2RhNzQ5OWJkNDVjNDJmYTVkMTk1YTFlMWE2YmE4NDg1MTg4OWU3MzBkYTNiMmI5MTZlOTYxNTJhZTBjOTIxNTRiNDk3MTk4NDFkYjdlN2NjNzA3YmE4YTVkN2IxMDFlYjRhYzdiNjI5YmIzMjc4MTc5MTBmZmY2MTU4MGI1OWFhYjc4MTgyZDFhMmUzMzQ3M2QwNWIwMGIxNzBiMjllMzMxODcwODI2Y2ZlNDVhZjIwNmFhN2QwMjQ2YmJkODU2NmNhN2NmYjJkM2MxMGJmYTFkYjdkZDQ4ZGQ3ODYwMzY0NjljZTcyODIwOTNkNzhiNWUxYTViMGZjODFhNTRjOGVkNGNlYWMxZTUzMDUzMDVlNzgyODRhYzI3NmY1ZDc4NjI3MjdhZmYyNDZlMTdhZGRkZTUwYzY3MDAyOGQ1NzJjYmZjMGJlMmU0ZjhiMmViMjhmYTY4YWQ3YjRjNmMyYTIzOWM0NjA0NDFiZmI1ZWEwNDlmMjNiMDg1NjNiNGU0NzcyOWE1OWU1OTg2YTYxYTYwOTNkYmQ1NGY4YzM2ZWJlODdlZGFlMDFmMjUxY2IwNjBhZDEzNjRjZTY3N2Q3ZThkNWE0YTRjYTk2NmE3MjQxY2MzNjBiYzJhY2IyODBlNWY5ZTljMWIwMzJhZDZhMTgwYTM1ZTBjNTE4MGI5ZDE2ZDAyNmM4NjViMjUyMDk4Y2MxZDk5YmE3Mzc1Y2EzMWM3NzAyYzBkOTQzZDVlM2RkMmY2ODYxZmE1NWJkNDZkOTRiNjdlZDNlNTJlY2NkOGRkMDZkOTY4ZTAxODk3ZDZkZTk3ZWQzMDU4ZDkxZGQiOiI4ZTRiYzZmOGI4YzYwZmU0ZDY4YzYxZDliMTU5Yzg2OTNjMzE1MWM0Njc0OWFmNThkYTIyODQ0MmQ5MjdmMjMzNTliZDZjY2Q2YzJlYzhmYTNmMDBhODZjZWNiZmE3MjhlMWFkNjBiODIxZWQyMmZjZDMwOWJhOTFhNDEzOGJjOSIKKworU0hBLTEgU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1Q6TUJFRFRMU19TSEExX0MKK3NoYTFfc2VsZnRlc3Q6CisKK1NIQS0yNTYgU2VsZnRlc3QKK2RlcGVuZHNfb246TUJFRFRMU19TRUxGX1RFU1Q6TUJFRFRMU19TSEEyNTZfQworc2hhMjU2X3NlbGZ0ZXN0OgorCitTSEEtNTEyIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUOk1CRURUTFNfU0hBNTEyX0MKK3NoYTUxMl9zZWxmdGVzdDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NoYXguZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzZWU5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmZ1bmN0aW9uCkBAIC0wLDAgKzEsMTMxIEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhNTEyLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQyAqLwordm9pZCBtYmVkdGxzX3NoYTEoIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNDFdOworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQoaGFzaF9zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCA0MSk7CisKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3NoYTEoIHNyY19zdHIsIHNyY19sZW4sIG91dHB1dCApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgMjAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQyAqLwordm9pZCBzaGEyMjQoY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs1N107CisgICAgaW50IHNyY19sZW47CisKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwMDApOworICAgIG1lbXNldChoYXNoX3N0ciwgMHgwMCwgMTAwMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDU3KTsKKworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfc2hhMjU2KCBzcmNfc3RyLCBzcmNfbGVuLCBvdXRwdXQsIDEgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIDI4ICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MgKi8KK3ZvaWQgbWJlZHRsc19zaGEyNTYoY2hhciAqaGV4X3NyY19zdHJpbmcsIGNoYXIgKmhleF9oYXNoX3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hfc3RyWzEwMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFs2NV07CisgICAgaW50IHNyY19sZW47CisKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwMDApOworICAgIG1lbXNldChoYXNoX3N0ciwgMHgwMCwgMTAwMDApOworICAgIG1lbXNldChvdXRwdXQsIDB4MDAsIDY1KTsKKworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfc2hhMjU2KCBzcmNfc3RyLCBzcmNfbGVuLCBvdXRwdXQsIDAgKTsKKyAgICBoZXhpZnkoIGhhc2hfc3RyLCBvdXRwdXQsIDMyICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBoYXNoX3N0ciwgaGV4X2hhc2hfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MgKi8KK3ZvaWQgc2hhMzg0KGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbOTddOworICAgIGludCBzcmNfbGVuOworCisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQoaGFzaF9zdHIsIDB4MDAsIDEwMDAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCA5Nyk7CisKKyAgICBzcmNfbGVuID0gdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3NoYTUxMiggc3JjX3N0ciwgc3JjX2xlbiwgb3V0cHV0LCAxICk7CisgICAgaGV4aWZ5KCBoYXNoX3N0ciwgb3V0cHV0LCA0OCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgaGFzaF9zdHIsIGhleF9oYXNoX3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DICovCit2b2lkIG1iZWR0bHNfc2hhNTEyKGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfaGFzaF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBoYXNoX3N0clsxMDAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTI5XTsKKyAgICBpbnQgc3JjX2xlbjsKKworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDAwMCk7CisgICAgbWVtc2V0KGhhc2hfc3RyLCAweDAwLCAxMDAwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTI5KTsKKworICAgIHNyY19sZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfc2hhNTEyKCBzcmNfc3RyLCBzcmNfbGVuLCBvdXRwdXQsIDApOworICAgIGhleGlmeSggaGFzaF9zdHIsIG91dHB1dCwgNjQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGhhc2hfc3RyLCBoZXhfaGFzaF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19TRUxGX1RFU1QgKi8KK3ZvaWQgc2hhMV9zZWxmdGVzdCgpCit7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc2hhMV9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBzaGEyNTZfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTI1Nl9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCBzaGE1MTJfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTUxMl9zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWY2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmRhdGEKQEAgLTAsMCArMSw1NiBAQAorU1NMIERUTFMgcmVwbGF5OiBpbml0aWFsIHN0YXRlLCBzZXFudW0gMAorc3NsX2R0bHNfcmVwbGF5OiIiOiIwMDAwMDAwMDAwMDAiOjAKKworU1NMIERUTFMgcmVwbGF5OiAwIHNlZW4sIDEgYXJyaXZpbmcKK3NzbF9kdGxzX3JlcGxheToiMDAwMDAwMDAwMDAwIjoiMDAwMDAwMDAwMDAxIjowCisKK1NTTCBEVExTIHJlcGxheTogMCBzZWVuLCAwIHJlcGxheWVkCitzc2xfZHRsc19yZXBsYXk6IjAwMDAwMDAwMDAwMCI6IjAwMDAwMDAwMDAwMCI6LTEKKworU1NMIERUTFMgcmVwbGF5OiAwLTEgc2VlbiwgMiBhcnJpdmluZworc3NsX2R0bHNfcmVwbGF5OiIwMDAwMDAwMDAwMDAsMDAwMDAwMDAwMDAxIjoiMDAwMDAwMDAwMDAyIjowCisKK1NTTCBEVExTIHJlcGxheTogMC0xIHNlZW4sIDEgcmVwbGF5ZWQKK3NzbF9kdGxzX3JlcGxheToiMDAwMDAwMDAwMDAwLDAwMDAwMDAwMDAwMSI6IjAwMDAwMDAwMDAwMSI6LTEKKworU1NMIERUTFMgcmVwbGF5OiAwLTEgc2VlbiwgMCByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiIwMDAwMDAwMDAwMDAsMDAwMDAwMDAwMDAxIjoiMDAwMDAwMDAwMDAwIjotMQorCitTU0wgRFRMUyByZXBsYXk6IG5ldworc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAwMyI6ImFiY2QxMjM0MDAwNCI6MAorCitTU0wgRFRMUyByZXBsYXk6IHdheSBuZXcKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAwLGFiY2QxMjM0MDAwMSxhYmNkMTIzNDAwMDMiOiJhYmNkMTIzNTAwMDAiOjAKKworU1NMIERUTFMgcmVwbGF5OiBkZWxheWVkCitzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAwMDEsYWJjZDEyMzQwMDAzIjoiYWJjZDEyMzQwMDAyIjowCisKK1NTTCBEVExTIHJlcGxheTogbGFzdGVzdCByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAwMyI6ImFiY2QxMjM0MDAwMyI6LTEKKworU1NMIERUTFMgcmVwbGF5OiBvbGRlciByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDAsYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAwMyI6ImFiY2QxMjM0MDAwMSI6LTEKKworU1NMIERUTFMgcmVwbGF5OiBtb3N0IHJlY2VudCBpbiB3aW5kb3csIHJlcGxheWVkCitzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAwMDIsYWJjZDEyMzQwMDAzIjoiYWJjZDEyMzQwMDAyIjotMQorCitTU0wgRFRMUyByZXBsYXk6IG9sZGVzdCBpbiB3aW5kb3csIHJlcGxheWVkCitzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAwMDEsYWJjZDEyMzQwMDNmIjoiYWJjZDEyMzQwMDAwIjotMQorCitTU0wgRFRMUyByZXBsYXk6IG9sZGVzdCBpbiB3aW5kb3csIG5vdCByZXBsYXllZAorc3NsX2R0bHNfcmVwbGF5OiJhYmNkMTIzNDAwMDEsYWJjZDEyMzQwMDAyLGFiY2QxMjM0MDAzZiI6ImFiY2QxMjM0MDAwMCI6MAorCitTU0wgRFRMUyByZXBsYXk6IGp1c3Qgb3V0IG9mIHRoZSB3aW5kb3cKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAxLGFiY2QxMjM0MDAwMixhYmNkMTIzNDAwM2YiOiJhYmNkMTIzM2ZmZmYiOi0xCisKK1NTTCBEVExTIHJlcGxheTogd2F5IG91dCBvZiB0aGUgd2luZG93Citzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMSxhYmNkMTIzNDAwMDIsYWJjZDEyMzQwMDNmIjoiYWJjZDEyMzMwMDAwIjotMQorCitTU0wgRFRMUyByZXBsYXk6IGJpZyBqdW1wIHRoZW4gcmVwbGF5Citzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAxMDAiOiJhYmNkMTIzNDAxMDAiOi0xCisKK1NTTCBEVExTIHJlcGxheTogYmlnIGp1bXAgdGhlbiBuZXcKK3NzbF9kdGxzX3JlcGxheToiYWJjZDEyMzQwMDAwLGFiY2QxMjM0MDEwMCI6ImFiY2QxMjM0MDEwMSI6MAorCitTU0wgRFRMUyByZXBsYXk6IGJpZyBqdW1wIHRoZW4ganVzdCBkZWxheWVkCitzc2xfZHRsc19yZXBsYXk6ImFiY2QxMjM0MDAwMCxhYmNkMTIzNDAxMDAiOiJhYmNkMTIzNDAwZmYiOjAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zc2wuZnVuY3Rpb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzQ0OGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmZ1bmN0aW9uCkBAIC0wLDAgKzEsNDIgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgPG1iZWR0bHMvc3NsLmg+CisjaW5jbHVkZSA8bWJlZHRscy9zc2xfaW50ZXJuYWwuaD4KKy8qIEVORF9IRUFERVIgKi8KKworLyogQkVHSU5fREVQRU5ERU5DSUVTCisgKiBkZXBlbmRzX29uOk1CRURUTFNfU1NMX1RMU19DCisgKiBFTkRfREVQRU5ERU5DSUVTCisgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU1NMX0RUTFNfQU5USV9SRVBMQVkgKi8KK3ZvaWQgc3NsX2R0bHNfcmVwbGF5KCBjaGFyICpwcmV2cywgY2hhciAqbmV3LCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsKKyAgICBtYmVkdGxzX3NzbF9jb25maWcgY29uZjsKKyAgICBjaGFyICplbmRfcHJldnMgPSBwcmV2cyArIHN0cmxlbiggcHJldnMgKSArIDE7CisKKyAgICBtYmVkdGxzX3NzbF9pbml0KCAmc3NsICk7CisgICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoICZjb25mICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCAmY29uZiwKKyAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfSVNfQ0xJRU5ULAorICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0sCisgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1BSRVNFVF9ERUZBVUxUICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NzbF9zZXR1cCggJnNzbCwgJmNvbmYgKSA9PSAwICk7CisKKyAgICAvKiBSZWFkIHByZXZpb3VzIHJlY29yZCBudW1iZXJzICovCisgICAgZm9yKCA7IGVuZF9wcmV2cyAtIHByZXZzID49IDEzOyBwcmV2cyArPSAxMyApCisgICAgeworICAgICAgICBwcmV2c1sxMl0gPSAnXDAnOworICAgICAgICB1bmhleGlmeSggc3NsLmluX2N0ciArIDIsIHByZXZzICk7CisgICAgICAgIG1iZWR0bHNfc3NsX2R0bHNfcmVwbGF5X3VwZGF0ZSggJnNzbCApOworICAgIH0KKworICAgIC8qIENoZWNrIG5ldyBudW1iZXIgKi8KKyAgICB1bmhleGlmeSggc3NsLmluX2N0ciArIDIsIG5ldyApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NzbF9kdGxzX3JlcGxheV9jaGVjayggJnNzbCApID09IHJldCApOworCisgICAgbWJlZHRsc19zc2xfZnJlZSggJnNzbCApOworICAgIG1iZWR0bHNfc3NsX2NvbmZpZ19mcmVlKCAmY29uZiApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV90aW1pbmcuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV90aW1pbmcuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmE3OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3RpbWluZy5kYXRhCkBAIC0wLDAgKzEsMiBAQAorVGltaW5nIHNlbGZ0ZXN0Cit0aW1pbmdfc2VsZnRlc3Q6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdGltaW5nLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3RpbWluZy5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgyZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3RpbWluZy5mdW5jdGlvbgpAQCAtMCwwICsxLDE1IEBACisvKiBCRUdJTl9IRUFERVIgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3RpbWluZy5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19USU1JTkdfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCB0aW1pbmdfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3RpbWluZ19zZWxmX3Rlc3QoIDEgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3ZlcnNpb24uZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlNjA4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEKQEAgLTAsMCArMSwxNSBAQAorQ2hlY2sgY29tcGlsZXRpbWUgbGlicmFyeSB2ZXJzaW9uCitjaGVja19jb21waWxldGltZV92ZXJzaW9uOiIyLjQuMSIKKworQ2hlY2sgcnVudGltZSBsaWJyYXJ5IHZlcnNpb24KK2NoZWNrX3J1bnRpbWVfdmVyc2lvbjoiMi40LjEiCisKK0NoZWNrIGZvciBNQkVEVExTX1ZFUlNJT05fQworY2hlY2tfZmVhdHVyZToiTUJFRFRMU19WRVJTSU9OX0MiOjAKKworQ2hlY2sgZm9yIE1CRURUTFNfQUVTX0Mgd2hlbiBhbHJlYWR5IHByZXNlbnQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2hlY2tfZmVhdHVyZToiTUJFRFRMU19BRVNfQyI6MAorCitDaGVjayBmb3IgdW5rbm93biBkZWZpbmUKK2NoZWNrX2ZlYXR1cmU6Ik1CRURUTFNfVU5LTk9XTiI6LTEKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3ZlcnNpb24uZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxNDRjYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmZ1bmN0aW9uCkBAIC0wLDAgKzEsNzMgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMvdmVyc2lvbi5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19WRVJTSU9OX0MKKyAqIEVORF9ERVBFTkRFTkNJRVMKKyAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNoZWNrX2NvbXBpbGV0aW1lX3ZlcnNpb24oIGNoYXIgKnZlcnNpb25fc3RyICkKK3sKKyAgICBjaGFyIGJ1aWxkX3N0clsxMDBdOworICAgIGNoYXIgYnVpbGRfc3RyX2Z1bGxbMTAwXTsKKyAgICB1bnNpZ25lZCBpbnQgYnVpbGRfaW50OworCisgICAgbWVtc2V0KCBidWlsZF9zdHIsIDAsIDEwMCApOworICAgIG1lbXNldCggYnVpbGRfc3RyX2Z1bGwsIDAsIDEwMCApOworCisgICAgbWJlZHRsc19zbnByaW50ZiggYnVpbGRfc3RyLCAxMDAsICIlZC4lZC4lZCIsIE1CRURUTFNfVkVSU0lPTl9NQUpPUiwKKyAgICAgICAgTUJFRFRMU19WRVJTSU9OX01JTk9SLCBNQkVEVExTX1ZFUlNJT05fUEFUQ0ggKTsKKworICAgIG1iZWR0bHNfc25wcmludGYoIGJ1aWxkX3N0cl9mdWxsLCAxMDAsICJtYmVkIFRMUyAlZC4lZC4lZCIsIE1CRURUTFNfVkVSU0lPTl9NQUpPUiwKKyAgICAgICAgTUJFRFRMU19WRVJTSU9OX01JTk9SLCBNQkVEVExTX1ZFUlNJT05fUEFUQ0ggKTsKKworICAgIGJ1aWxkX2ludCA9IE1CRURUTFNfVkVSU0lPTl9NQUpPUiA8PCAyNCB8CisgICAgICAgICAgICBNQkVEVExTX1ZFUlNJT05fTUlOT1IgPDwgMTYgfAorICAgICAgICAgICAgTUJFRFRMU19WRVJTSU9OX1BBVENIIDw8IDg7CisKKyAgICBURVNUX0FTU0VSVCggYnVpbGRfaW50ID09IE1CRURUTFNfVkVSU0lPTl9OVU1CRVIgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWlsZF9zdHIsIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVpbGRfc3RyX2Z1bGwsIE1CRURUTFNfVkVSU0lPTl9TVFJJTkdfRlVMTCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCB2ZXJzaW9uX3N0ciwgTUJFRFRMU19WRVJTSU9OX1NUUklORyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY2hlY2tfcnVudGltZV92ZXJzaW9uKCBjaGFyICp2ZXJzaW9uX3N0ciApCit7CisgICAgY2hhciBidWlsZF9zdHJbMTAwXTsKKyAgICBjaGFyIGdldF9zdHJbMTAwXTsKKyAgICBjaGFyIGJ1aWxkX3N0cl9mdWxsWzEwMF07CisgICAgY2hhciBnZXRfc3RyX2Z1bGxbMTAwXTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0X2ludDsKKworICAgIG1lbXNldCggYnVpbGRfc3RyLCAwLCAxMDAgKTsKKyAgICBtZW1zZXQoIGdldF9zdHIsIDAsIDEwMCApOworICAgIG1lbXNldCggYnVpbGRfc3RyX2Z1bGwsIDAsIDEwMCApOworICAgIG1lbXNldCggZ2V0X3N0cl9mdWxsLCAwLCAxMDAgKTsKKworICAgIGdldF9pbnQgPSBtYmVkdGxzX3ZlcnNpb25fZ2V0X251bWJlcigpOworICAgIG1iZWR0bHNfdmVyc2lvbl9nZXRfc3RyaW5nKCBnZXRfc3RyICk7CisgICAgbWJlZHRsc192ZXJzaW9uX2dldF9zdHJpbmdfZnVsbCggZ2V0X3N0cl9mdWxsICk7CisKKyAgICBtYmVkdGxzX3NucHJpbnRmKCBidWlsZF9zdHIsIDEwMCwgIiVkLiVkLiVkIiwKKyAgICAgICAgKGdldF9pbnQgPj4gMjQpICYgMHhGRiwKKyAgICAgICAgKGdldF9pbnQgPj4gMTYpICYgMHhGRiwKKyAgICAgICAgKGdldF9pbnQgPj4gOCkgJiAweEZGICk7CisgICAgbWJlZHRsc19zbnByaW50ZiggYnVpbGRfc3RyX2Z1bGwsIDEwMCwgIm1iZWQgVExTICVzIiwgdmVyc2lvbl9zdHIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1aWxkX3N0ciwgdmVyc2lvbl9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVpbGRfc3RyX2Z1bGwsIGdldF9zdHJfZnVsbCApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCB2ZXJzaW9uX3N0ciwgZ2V0X3N0ciApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY2hlY2tfZmVhdHVyZSggY2hhciAqZmVhdHVyZSwgaW50IHJlc3VsdCApCit7CisgICAgaW50IGNoZWNrID0gbWJlZHRsc192ZXJzaW9uX2NoZWNrX2ZlYXR1cmUoIGZlYXR1cmUgKTsKKyAgICBURVNUX0FTU0VSVCggY2hlY2sgPT0gcmVzdWx0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Mjk4MjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmRhdGEKQEAgLTAsMCArMSwxNTY0IEBACitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uICMxCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwMVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowNlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA2XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gIzIKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDAyXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowNlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA2XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gIzMKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDAwXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDBcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowMFxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT10cnVlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gTUQyIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9tZDIuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDlcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgTUQyXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDA5LTA3LTEyIDEwXDo1Nlw6NTlcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMTEtMDctMTIgMTBcOjU2XDo1OVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQyXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gTUQ0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDRfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9tZDQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDVcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgTUQ0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQ0XG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gTUQ1IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDVfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9tZDUuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDZcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgTUQ1XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQ1XG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gU0hBMSBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9jZXJ0X3NoYTEuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDdcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBMVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBTSEEyMjQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9jZXJ0X3NoYTIyNC5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwOFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBTSEEyMjRcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEEtMjI0XG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gU0hBMjU2IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9zaGEyNTYuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDlcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIENlcnQgU0hBMjU2XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBLTI1NlxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIFNIQTM4NCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBNTEyX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfc2hhMzg0LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDBBXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBDZXJ0IFNIQTM4NFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQS0zODRcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBTSEE1MTIgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTUxMl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9jZXJ0X3NoYTUxMi5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwQlxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgQ2VydCBTSEE1MTJcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEEtNTEyXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMSBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI5LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDE2XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTQtMDEtMjAgMTNcOjM4XDoxNlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyNC0wMS0xOCAxM1w6MzhcOjE2XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0FTU0EtUFNTIChTSEExLCBNR0YxLVNIQTEsIDB4RUEpXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMDI0IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMjI0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS1zaGEyMjQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMTdcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNC0wMS0yMCAxM1w6NTdcOjM2XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI0LTAxLTE4IDEzXDo1N1w6MzZcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQVNTQS1QU1MgKFNIQTIyNCwgTUdGMS1TSEEyMjQsIDB4RTIpXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMDI0IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMjU2IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS1zaGEyNTYuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMThcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNC0wMS0yMCAxM1w6NTdcOjQ1XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI0LTAxLTE4IDEzXDo1N1w6NDVcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQVNTQS1QU1MgKFNIQTI1NiwgTUdGMS1TSEEyNTYsIDB4REUpXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMDI0IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMzg0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS1zaGEzODQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMTlcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNC0wMS0yMCAxM1w6NTdcOjU4XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI0LTAxLTE4IDEzXDo1N1w6NThcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQVNTQS1QU1MgKFNIQTM4NCwgTUdGMS1TSEEzODQsIDB4Q0UpXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMDI0IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBNTEyIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS1zaGE1MTIuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMUFcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNC0wMS0yMCAxM1w6NThcOjEyXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI0LTAxLTE4IDEzXDo1OFw6MTJcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQVNTQS1QU1MgKFNIQTUxMiwgTUdGMS1TSEE1MTIsIDB4QkUpXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMDI0IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gRUMsIFNIQTEgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyNS1zaGExLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDEyXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDktMjQgMTZcOjIxXDoyN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wOS0yMiAxNlw6MjFcOjI3XG5zaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTFcbkVDIGtleSBzaXplICAgICAgIFw6IDI1NiBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIEVDLCBTSEEyMjQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNoYTIyNC5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAxM1xuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE2XDoyMVw6MjdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTZcOjIxXDoyN1xuc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEEyMjRcbkVDIGtleSBzaXplICAgICAgIFw6IDI1NiBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uIEVDLCBTSEEyNTYgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDA5XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDktMjQgMTVcOjUyXDowNFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wOS0yMiAxNVw6NTJcOjA0XG5zaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTI1NlxuRUMga2V5IHNpemUgICAgICAgXDogMjU2IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gRUMsIFNIQTM4NCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMzg0LmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDE0XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDktMjQgMTZcOjIxXDoyN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wOS0yMiAxNlw6MjFcOjI3XG5zaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTM4NFxuRUMga2V5IHNpemUgICAgICAgXDogMjU2IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gRUMsIFNIQTUxMiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBNTEyX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhNTEyLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDE1XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDktMjQgMTZcOjIxXDoyN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wOS0yMiAxNlw6MjFcOjI3XG5zaWduZWQgdXNpbmcgICAgICBcOiBFQ0RTQSB3aXRoIFNIQTUxMlxuRUMga2V5IHNpemUgICAgICAgXDogMjU2IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24sIE5TIENlcnQgVHlwZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY2VydF90eXBlLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDAxXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA2XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIxLTAyLTEyIDE0XDo0NFw6MDZcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbmNlcnQuIHR5cGUgICAgICAgIFw6IFNTTCBTZXJ2ZXJcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgS2V5IFVzYWdlCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMDFcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDZcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjEtMDItMTIgMTRcOjQ0XDowNlxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxua2V5IHVzYWdlICAgICAgICAgXDogRGlnaXRhbCBTaWduYXR1cmUsIE5vbiBSZXB1ZGlhdGlvbiwgS2V5IEVuY2lwaGVybWVudFxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uLCBLZXkgVXNhZ2Ugd2l0aCBkZWNpcGhlck9ubHkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NlcnRfaW5mbzoiZGF0YV9maWxlcy9rZXlVc2FnZS5kZWNpcGhlck9ubHkuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogOUJcOjEzXDpDRVw6NENcOkE1XDo2Rlw6REVcOjUyXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPUdCLCBMPUNhbWJyaWRnZSwgTz1EZWZhdWx0IENvbXBhbnkgTHRkXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPUdCLCBMPUNhbWJyaWRnZSwgTz1EZWZhdWx0IENvbXBhbnkgTHRkXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDE1LTA1LTEyIDEwXDozNlw6NTVcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMTgtMDUtMTEgMTBcOjM2XDo1NVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxua2V5IHVzYWdlICAgICAgICAgXDogRGlnaXRhbCBTaWduYXR1cmUsIE5vbiBSZXB1ZGlhdGlvbiwgS2V5IEVuY2lwaGVybWVudCwgRGVjaXBoZXIgT25seVxuIgorCitYNTA5IENlcnRpZmljYXRlIGluZm9ybWF0aW9uLCBTdWJqZWN0IEFsdCBOYW1lCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IDExXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5zdWJqZWN0IG5hbWUgICAgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj13d3cuZXhhbXBsZS5jb21cbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTItMDUtMTAgMTNcOjIzXDo0MVxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMi0wNS0xMSAxM1w6MjNcOjQxXG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG5zdWJqZWN0IGFsdCBuYW1lICBcOiBleGFtcGxlLmNvbSwgZXhhbXBsZS5uZXQsICouZXhhbXBsZS5vcmdcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgU3ViamVjdCBBbHQgTmFtZSArIEtleSBVc2FnZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aV9ub2NuLmNydCI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDNcbnNlcmlhbCBudW1iZXIgICAgIFw6IEY3XDpDNlw6N0ZcOkY4XDpFOVw6QTlcOjYzXDpGOVxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTFxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxNC0wMS0yMiAxMFw6MDRcOjMzXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDI0LTAxLTIyIDEwXDowNFw6MzNcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEwMjQgYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbnN1YmplY3QgYWx0IG5hbWUgIFw6IHd3dy5zaG90b2thbi1icmF1bnNjaHdlaWcuZGUsIHd3dy5tYXNzaW1vLWFiYXRlLmV1XG5rZXkgdXNhZ2UgICAgICAgICBcOiBEaWdpdGFsIFNpZ25hdHVyZSwgTm9uIFJlcHVkaWF0aW9uLCBLZXkgRW5jaXBoZXJtZW50XG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24sIEtleSBVc2FnZSArIEV4dGVuZGVkIEtleSBVc2FnZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5leHRfa3UuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogM1xuc2VyaWFsIG51bWJlciAgICAgXDogMjFcbmlzc3VlciBuYW1lICAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDE0LTA0LTAxIDE0XDo0NFw6NDNcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjQtMDMtMjkgMTRcOjQ0XDo0M1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBLTI1NlxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxua2V5IHVzYWdlICAgICAgICAgXDogRGlnaXRhbCBTaWduYXR1cmUsIE5vbiBSZXB1ZGlhdGlvbiwgS2V5IEVuY2lwaGVybWVudFxuZXh0IGtleSB1c2FnZSAgICAgXDogVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb25cbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBSU0Egc2lnbmVkIGJ5IEVDCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNEU0FfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyNC5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwOFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA5LTI0IDE1XDo1Mlw6MDRcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDktMjIgMTVcOjUyXDowNFxuc2lnbmVkIHVzaW5nICAgICAgXDogRUNEU0Egd2l0aCBTSEEyNTZcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDIwNDggYml0c1xuYmFzaWMgY29uc3RyYWludHMgXDogQ0E9ZmFsc2VcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBFQyBzaWduZWQgYnkgUlNBCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOV9jZXJ0X2luZm86ImRhdGFfZmlsZXMvc2VydmVyMy5jcnQiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwRFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA4LTA5IDA5XDoxN1w6MDNcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjMtMDgtMDcgMDlcOjE3XDowM1xuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuRUMga2V5IHNpemUgICAgICAgXDogMTkyIGJpdHNcbmJhc2ljIGNvbnN0cmFpbnRzIFw6IENBPWZhbHNlXG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgaW5mb3JtYXRpb24gQml0c3RyaW5nIGluIHN1YmplY3QgbmFtZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2JpdHN0cmluZy1pbi1kbi5wZW0iOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwMlxuaXNzdWVyIG5hbWUgICAgICAgXDogQ049VGVzdCBDQSAwMSwgU1Q9RWNuaXZvcnAsIEM9WFgsIGVtYWlsQWRkcmVzcz10Y2FAZXhhbXBsZS5jb20sIE89VGVzdCBDQSBBdXRob3JpdHlcbnN1YmplY3QgbmFtZSAgICAgIFw6IEM9WFgsIE89dGNhLCBTVD1FY25pdm9ycCwgT1U9VENBLCBDTj1DbGllbnQsIGVtYWlsQWRkcmVzcz1jbGllbnRAZXhhbXBsZS5jb20sIHNlcmlhbE51bWJlcj03MTAxMDEyMjU1LCB1bmlxdWVJZGVudGlmaWVyPT83MTAxMDEyMjU1XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDE1LTAzLTExIDEyXDowNlw6NTFcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMjUtMDMtMDggMTJcOjA2XDo1MVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMjA0OCBiaXRzXG5iYXNpYyBjb25zdHJhaW50cyBcOiBDQT1mYWxzZVxuc3ViamVjdCBhbHQgbmFtZSAgXDogXG5leHQga2V5IHVzYWdlICAgICBcOiBUTFMgV2ViIENsaWVudCBBdXRoZW50aWNhdGlvblxuIgorCitYNTA5IGNlcnRpZmljYXRlIHYxIHdpdGggZXh0ZW5zaW9uCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1g1MDlfQUxMT1dfRVhURU5TSU9OU19OT05fVjM6TUJFRFRMU19TSEExX0MKK3g1MDlfY2VydF9pbmZvOiJkYXRhX2ZpbGVzL2NlcnRfdjFfd2l0aF9leHQuY3J0IjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogQkRcOkVEXDo0NFw6QzdcOkQyXDozRVw6QzJcOkE0XG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPVhYLCBTVD1YWCwgTD1YWCwgTz1YWCwgT1U9WFgsIGVtYWlsQWRkcmVzcz1hZG1pbkBpZGVudGl0eS1jaGVjay5vcmcsIENOPWlkZW50aXR5LWNoZWNrLm9yZ1xuc3ViamVjdCBuYW1lICAgICAgXDogQz1YWCwgU1Q9WFgsIEw9WFgsIE89WFgsIE9VPVhYLCBlbWFpbEFkZHJlc3M9YWRtaW5AaWRlbnRpdHktY2hlY2sub3JnLCBDTj1pZGVudGl0eS1jaGVjay5vcmdcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDctMDQgMTZcOjE3XDowMlxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAxNC0wNy0wNCAxNlw6MTdcOjAyXG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5SU0Ega2V5IHNpemUgICAgICBcOiAyMDQ4IGJpdHNcbnN1YmplY3QgYWx0IG5hbWUgIFw6IGlkZW50aXR5LWNoZWNrLm9yZywgd3d3LmlkZW50aXR5LWNoZWNrLm9yZ1xuIgorCitYNTA5IENSTCBpbmZvcm1hdGlvbiAjMQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX2V4cGlyZWQucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMS0wMi0yMCAxMFw6MjRcOjE5XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMTEtMDItMjAgMTFcOjI0XDoxOVxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDAxIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2VyaWFsIG51bWJlclw6IDAzIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEExXG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIE1EMiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX01EMl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX21kMi5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDA5LTA3LTE5IDE5XDo1Nlw6Mzdcbm5leHQgdXBkYXRlICAgXDogMjAwOS0wOS0xNyAxOVw6NTZcOjM3XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMDEgcmV2b2NhdGlvbiBkYXRlXDogMjAwOS0wMi0wOSAyMVw6MTJcOjM2XG5zZXJpYWwgbnVtYmVyXDogMDMgcmV2b2NhdGlvbiBkYXRlXDogMjAwOS0wMi0wOSAyMVw6MTJcOjM2XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIE1EMlxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBNRDQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19NRDRfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybF9tZDQucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMTEtMDQtMTMgMTRcOjQ0XDowN1xuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDAxIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2VyaWFsIG51bWJlclw6IDAzIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBNRDRcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gTUQ1IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmxfbWQ1LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xubmV4dCB1cGRhdGUgICBcOiAyMDExLTA0LTEzIDE0XDo0NFw6MDdcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwMSByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNlcmlhbCBudW1iZXJcOiAwMyByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggTUQ1XG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIFNIQTEgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmxfc2hhMS5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbm5leHQgdXBkYXRlICAgXDogMjAxMS0wNC0xMyAxNFw6NDRcOjA3XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMDEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zZXJpYWwgbnVtYmVyXDogMDMgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQTFcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gU0hBMjI0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmxfc2hhMjI0LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xubmV4dCB1cGRhdGUgICBcOiAyMDExLTA0LTEzIDE0XDo0NFw6MDdcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwMSByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNlcmlhbCBudW1iZXJcOiAwMyByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTIyNFxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBTSEEyNTYgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybF9zaGEyNTYucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMTEtMDQtMTMgMTRcOjQ0XDowN1xuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDAxIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2VyaWFsIG51bWJlclw6IDAzIHJldm9jYXRpb24gZGF0ZVw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEEtMjU2XG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIFNIQTM4NCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsX3NoYTM4NC5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbm5leHQgdXBkYXRlICAgXDogMjAxMS0wNC0xMyAxNFw6NDRcOjA3XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMDEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zZXJpYWwgbnVtYmVyXDogMDMgcmV2b2NhdGlvbiBkYXRlXDogMjAxMS0wMi0xMiAxNFw6NDRcOjA3XG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS0zODRcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gU0hBNTEyIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmxfc2hhNTEyLnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTEtMDItMTIgMTRcOjQ0XDowN1xubmV4dCB1cGRhdGUgICBcOiAyMDExLTA0LTEzIDE0XDo0NFw6MDdcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwMSByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNlcmlhbCBudW1iZXJcOiAwMyByZXZvY2F0aW9uIGRhdGVcOiAyMDExLTAyLTEyIDE0XDo0NFw6MDdcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTUxMlxuIgorCitYNTA5IENSTCBpbmZvcm1hdGlvbiBSU0EtUFNTLCBTSEExIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTQtMDEtMjAgMTNcOjQ2XDozNVxubmV4dCB1cGRhdGUgICBcOiAyMDI0LTAxLTE4IDEzXDo0Nlw6MzVcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNlcmlhbCBudW1iZXJcOiAxNiByZXZvY2F0aW9uIGRhdGVcOiAyMDE0LTAxLTIwIDEzXDo0M1w6MDVcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBMSwgTUdGMS1TSEExLCAweEVBKVxuIgorCitYNTA5IENSTCBpbmZvcm1hdGlvbiBSU0EtUFNTLCBTSEEyMjQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMjI0LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTQtMDEtMjAgMTNcOjU2XDowNlxubmV4dCB1cGRhdGUgICBcOiAyMDI0LTAxLTE4IDEzXDo1Nlw6MDZcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNlcmlhbCBudW1iZXJcOiAxNiByZXZvY2F0aW9uIGRhdGVcOiAyMDE0LTAxLTIwIDEzXDo0M1w6MDVcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBMjI0LCBNR0YxLVNIQTIyNCwgMHhFMilcbiIKKworWDUwOSBDUkwgaW5mb3JtYXRpb24gUlNBLVBTUywgU0hBMjU2IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTI1Ni5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDE0LTAxLTIwIDEzXDo1Nlw6MTZcbm5leHQgdXBkYXRlICAgXDogMjAyNC0wMS0xOCAxM1w6NTZcOjE2XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zZXJpYWwgbnVtYmVyXDogMTYgcmV2b2NhdGlvbiBkYXRlXDogMjAxNC0wMS0yMCAxM1w6NDNcOjA1XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTI1NiwgTUdGMS1TSEEyNTYsIDB4REUpXG4iCisKK1g1MDkgQ1JMIGluZm9ybWF0aW9uIFJTQS1QU1MsIFNIQTM4NCBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEzODQucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAyXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxNC0wMS0yMCAxM1w6NTZcOjI4XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMjQtMDEtMTggMTNcOjU2XDoyOFxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDBBIHJldm9jYXRpb24gZGF0ZVw6IDIwMTMtMDktMjQgMTZcOjI4XDozOFxuc2VyaWFsIG51bWJlclw6IDE2IHJldm9jYXRpb24gZGF0ZVw6IDIwMTQtMDEtMjAgMTNcOjQzXDowNVxuc2lnbmVkIHVzaW5nICBcOiBSU0FTU0EtUFNTIChTSEEzODQsIE1HRjEtU0hBMzg0LCAweENFKVxuIgorCitYNTA5IENSTCBpbmZvcm1hdGlvbiBSU0EtUFNTLCBTSEE1MTIgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhNTEyLnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTQtMDEtMjAgMTNcOjU2XDozOFxubmV4dCB1cGRhdGUgICBcOiAyMDI0LTAxLTE4IDEzXDo1Nlw6MzhcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNlcmlhbCBudW1iZXJcOiAxNiByZXZvY2F0aW9uIGRhdGVcOiAyMDE0LTAxLTIwIDEzXDo0M1w6MDVcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBNTEyLCBNR0YxLVNIQTUxMiwgMHhCRSlcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gRUMsIFNIQTEgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDEzLTA5LTI0IDE2XDozMVw6MDhcbm5leHQgdXBkYXRlICAgXDogMjAyMy0wOS0yMiAxNlw6MzFcOjA4XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBMVxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBFQywgU0hBMjI0IERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjI0LnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTMtMDktMjQgMTZcOjMxXDowOFxubmV4dCB1cGRhdGUgICBcOiAyMDIzLTA5LTIyIDE2XDozMVw6MDhcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEEyMjRcbiIKKworWDUwOSBDUkwgSW5mb3JtYXRpb24gRUMsIFNIQTI1NiBEaWdlc3QKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfY3JsX2luZm86ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJDUkwgdmVyc2lvbiAgIFw6IDJcbmlzc3VlciBuYW1lICAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJzc2wgVGVzdCBFQyBDQVxudGhpcyB1cGRhdGUgICBcOiAyMDEzLTA5LTI0IDE2XDozMVw6MDhcbm5leHQgdXBkYXRlICAgXDogMjAyMy0wOS0yMiAxNlw6MzFcOjA4XG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogMEEgcmV2b2NhdGlvbiBkYXRlXDogMjAxMy0wOS0yNCAxNlw6MjhcOjM4XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBMjU2XG4iCisKK1g1MDkgQ1JMIEluZm9ybWF0aW9uIEVDLCBTSEEzODQgRGlnZXN0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2NybF9pbmZvOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEzODQucGVtIjoiQ1JMIHZlcnNpb24gICBcOiAyXG5pc3N1ZXIgbmFtZSAgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0FcbnRoaXMgdXBkYXRlICAgXDogMjAxMy0wOS0yNCAxNlw6MzFcOjA4XG5uZXh0IHVwZGF0ZSAgIFw6IDIwMjMtMDktMjIgMTZcOjMxXDowOFxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IDBBIHJldm9jYXRpb24gZGF0ZVw6IDIwMTMtMDktMjQgMTZcOjI4XDozOFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTM4NFxuIgorCitYNTA5IENSTCBJbmZvcm1hdGlvbiBFQywgU0hBNTEyIERpZ2VzdAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jcmxfaW5mbzoiZGF0YV9maWxlcy9jcmwtZWMtc2hhNTEyLnBlbSI6IkNSTCB2ZXJzaW9uICAgXDogMlxuaXNzdWVyIG5hbWUgICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG50aGlzIHVwZGF0ZSAgIFw6IDIwMTMtMDktMjQgMTZcOjMxXDowOFxubmV4dCB1cGRhdGUgICBcOiAyMDIzLTA5LTIyIDE2XDozMVw6MDhcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNlcmlhbCBudW1iZXJcOiAwQSByZXZvY2F0aW9uIGRhdGVcOiAyMDEzLTA5LTI0IDE2XDoyOFw6MzhcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEE1MTJcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBIHdpdGggTUQ0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19NRDRfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNCI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBNRDRcblJTQSBrZXkgc2l6ZSAgXDogMjA0OCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQSB3aXRoIE1ENQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfTUQ1X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDUiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggTUQ1XG5SU0Ega2V5IHNpemUgIFw6IDIwNDggYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0Egd2l0aCBTSEExCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGExIjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQTFcblJTQSBrZXkgc2l6ZSAgXDogMjA0OCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQSB3aXRoIFNIQTIyNAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyMjQiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTIyNFxuUlNBIGtleSBzaXplICBcOiAyMDQ4IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBIHdpdGggU0hBMjU2CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTI1NiI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEEtMjU2XG5SU0Ega2V5IHNpemUgIFw6IDIwNDggYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0Egd2l0aCBTSEEzODQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMzg0IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFNlcnZlciAxXG5zaWduZWQgdXNpbmcgIFw6IFJTQSB3aXRoIFNIQS0zODRcblJTQSBrZXkgc2l6ZSAgXDogMjA0OCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQSB3aXRoIFNIQTUxMgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBNTEyX0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGE1MTIiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTUxMlxuUlNBIGtleSBzaXplICBcOiAyMDQ4IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gRUMgd2l0aCBTSEExCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTEiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBMVxuRUMga2V5IHNpemUgICBcOiAyNTYgYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBFQyB3aXRoIFNIQTIyNAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTIyNCI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEEyMjRcbkVDIGtleSBzaXplICAgXDogMjU2IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gRUMgd2l0aCBTSEEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI1LnJlcS5zaGEyNTYiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IEVDRFNBIHdpdGggU0hBMjU2XG5FQyBrZXkgc2l6ZSAgIFw6IDI1NiBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIEVDIHdpdGggU0hBMzg0CitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyNS5yZXEuc2hhMzg0IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTM4NFxuRUMga2V5IHNpemUgICBcOiAyNTYgYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBFQyB3aXRoIFNIQTUxMgorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjUucmVxLnNoYTUxMiI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogRUNEU0Egd2l0aCBTSEE1MTJcbkVDIGtleSBzaXplICAgXDogMjU2IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBLVBTUyB3aXRoIFNIQTEKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMSI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBMSwgTUdGMS1TSEExLCAweDZBKVxuUlNBIGtleSBzaXplICBcOiAxMDI0IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBLVBTUyB3aXRoIFNIQTIyNAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTIyNCI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBMjI0LCBNR0YxLVNIQTIyNCwgMHg2MilcblJTQSBrZXkgc2l6ZSAgXDogMTAyNCBiaXRzXG4iCisKK1g1MDkgQ1NSIEluZm9ybWF0aW9uIFJTQS1QU1Mgd2l0aCBTSEEyNTYKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV9jc3JfaW5mbzoiZGF0YV9maWxlcy9zZXJ2ZXI5LnJlcS5zaGEyNTYiOiJDU1IgdmVyc2lvbiAgIFw6IDFcbnN1YmplY3QgbmFtZSAgXDogQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG5zaWduZWQgdXNpbmcgIFw6IFJTQVNTQS1QU1MgKFNIQTI1NiwgTUdGMS1TSEEyNTYsIDB4NUUpXG5SU0Ega2V5IHNpemUgIFw6IDEwMjQgYml0c1xuIgorCitYNTA5IENTUiBJbmZvcm1hdGlvbiBSU0EtUFNTIHdpdGggU0hBMzg0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTUxMl9DCittYmVkdGxzX3g1MDlfY3NyX2luZm86ImRhdGFfZmlsZXMvc2VydmVyOS5yZXEuc2hhMzg0IjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuc2lnbmVkIHVzaW5nICBcOiBSU0FTU0EtUFNTIChTSEEzODQsIE1HRjEtU0hBMzg0LCAweDRFKVxuUlNBIGtleSBzaXplICBcOiAxMDI0IGJpdHNcbiIKKworWDUwOSBDU1IgSW5mb3JtYXRpb24gUlNBLVBTUyB3aXRoIFNIQTUxMgorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQworbWJlZHRsc194NTA5X2Nzcl9pbmZvOiJkYXRhX2ZpbGVzL3NlcnZlcjkucmVxLnNoYTUxMiI6IkNTUiB2ZXJzaW9uICAgXDogMVxuc3ViamVjdCBuYW1lICBcOiBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbnNpZ25lZCB1c2luZyAgXDogUlNBU1NBLVBTUyAoU0hBNTEyLCBNR0YxLVNIQTUxMiwgMHgzRSlcblJTQSBrZXkgc2l6ZSAgXDogMTAyNCBiaXRzXG4iCisKK1g1MDkgVmVyaWZ5IEluZm9ybWF0aW9uOiBlbXB0eQoreDUwOV92ZXJpZnlfaW5mbzowOiIiOiIiCisKK1g1MDkgVmVyaWZ5IEluZm9ybWF0aW9uOiBvbmUgaXNzdWUKK3g1MDlfdmVyaWZ5X2luZm86TUJFRFRMU19YNTA5X0JBRENFUlRfTUlTU0lORzoiIjoiQ2VydGlmaWNhdGUgd2FzIG1pc3NpbmdcbiIKKworWDUwOSBWZXJpZnkgSW5mb3JtYXRpb246IHR3byBpc3N1ZXMKK3g1MDlfdmVyaWZ5X2luZm86TUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRCB8IE1CRURUTFNfWDUwOV9CQURDUkxfRVhQSVJFRDoiIjoiVGhlIGNlcnRpZmljYXRlIHZhbGlkaXR5IGhhcyBleHBpcmVkXG5UaGUgQ1JMIGlzIGV4cGlyZWRcbiIKKworWDUwOSBWZXJpZnkgSW5mb3JtYXRpb246IHR3byBpc3N1ZXMsIG9uZSB1bmtub3duCit4NTA5X3ZlcmlmeV9pbmZvOk1CRURUTFNfWDUwOV9CQURDRVJUX09USEVSIHwgMHg4MDAwMDAwMDoiIjoiT3RoZXIgcmVhc29uIChjYW4gYmUgdXNlZCBieSB2ZXJpZnkgY2FsbGJhY2spXG5Vbmtub3duIHJlYXNvbiAodGhpcyBzaG91bGQgbm90IGhhcHBlbilcbiIKKworWDUwOSBWZXJpZnkgSW5mb3JtYXRpb246IGVtcHR5LCB3aXRoIHByZWZpeAoreDUwOV92ZXJpZnlfaW5mbzowOiIgICEgIjoiIgorCitYNTA5IFZlcmlmeSBJbmZvcm1hdGlvbjogb25lIGlzc3VlLCB3aXRoIHByZWZpeAoreDUwOV92ZXJpZnlfaW5mbzpNQkVEVExTX1g1MDlfQkFEQ0VSVF9NSVNTSU5HOiIgICEgIjoiICAhIENlcnRpZmljYXRlIHdhcyBtaXNzaW5nXG4iCisKK1g1MDkgVmVyaWZ5IEluZm9ybWF0aW9uOiB0d28gaXNzdWVzLCB3aXRoIHByZWZpeAoreDUwOV92ZXJpZnlfaW5mbzpNQkVEVExTX1g1MDlfQkFEQ0VSVF9FWFBJUkVEIHwgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEOiIgICEgIjoiICAhIFRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGl0eSBoYXMgZXhwaXJlZFxuICAhIFRoZSBDUkwgaXMgZXhwaXJlZFxuIgorCitYNTA5IEdldCBEaXN0aW5ndWlzaGVkIE5hbWUgIzEKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfZG5fZ2V0czoiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6InN1YmplY3QiOiJDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMSIKKworWDUwOSBHZXQgRGlzdGluZ3Vpc2hlZCBOYW1lICMyCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2RuX2dldHM6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJpc3N1ZXIiOiJDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBIgorCitYNTA5IEdldCBEaXN0aW5ndWlzaGVkIE5hbWUgIzMKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfZG5fZ2V0czoiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6InN1YmplY3QiOiJDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3QiCisKK1g1MDkgR2V0IERpc3Rpbmd1aXNoZWQgTmFtZSAjNAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9kbl9nZXRzOiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoiaXNzdWVyIjoiQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQSIKKworWDUwOSBUaW1lIEV4cGlyZWQgIzEKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3Q6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJ2YWxpZF9mcm9tIjoxCisKK1g1MDkgVGltZSBFeHBpcmVkICMyCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0OiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoidmFsaWRfdG8iOjAKKworWDUwOSBUaW1lIEV4cGlyZWQgIzMKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3Q6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJ2YWxpZF9mcm9tIjoxCisKK1g1MDkgVGltZSBFeHBpcmVkICM0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0OiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoidmFsaWRfdG8iOjAKKworWDUwOSBUaW1lIEV4cGlyZWQgIzUKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3Q6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJ2YWxpZF9mcm9tIjoxCisKK1g1MDkgVGltZSBFeHBpcmVkICM2CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfdGltZV9pc19wYXN0OiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoidmFsaWRfdG8iOjAKKworWDUwOSBUaW1lIEZ1dHVyZSAjMQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmU6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJ2YWxpZF9mcm9tIjowCisKK1g1MDkgVGltZSBGdXR1cmUgIzIKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoidmFsaWRfdG8iOjEKKworWDUwOSBUaW1lIEZ1dHVyZSAjMworZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19IQVZFX1RJTUVfREFURTpNQkVEVExTX1NIQTI1Nl9DCittYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmU6ImRhdGFfZmlsZXMvc2VydmVyNS1mdXR1cmUuY3J0IjoidmFsaWRfZnJvbSI6MQorCitYNTA5IFRpbWUgRnV0dXJlICM0CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZToiZGF0YV9maWxlcy9zZXJ2ZXI1LWZ1dHVyZS5jcnQiOiJ2YWxpZF90byI6MQorCitYNTA5IFRpbWUgRnV0dXJlICM1CitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0hBVkVfVElNRV9EQVRFOk1CRURUTFNfU0hBMjU2X0MKK21iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZToiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJ2YWxpZF9mcm9tIjowCisKK1g1MDkgVGltZSBGdXR1cmUgIzYKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfSEFWRV9USU1FX0RBVEU6TUJFRFRMU19TSEEyNTZfQworbWJlZHRsc194NTA5X3RpbWVfaXNfZnV0dXJlOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6InZhbGlkX3RvIjoxCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxIChSZXZva2VkIENlcnQsIEV4cGlyZWQgQ1JMLCBubyBDTikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQgfCBNQkVEVExTX1g1MDlfQkFEQ1JMX0VYUElSRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxYSAoUmV2b2tlZCBDZXJ0LCBGdXR1cmUgQ1JMLCBubyBDTikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1mdXR1cmUucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRCB8IE1CRURUTFNfWDUwOV9CQURDUkxfRlVUVVJFOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMiAoUmV2b2tlZCBDZXJ0LCBFeHBpcmVkIENSTCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbSI6IlBvbGFyU1NMIFNlcnZlciAxIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEIHwgTUJFRFRMU19YNTA5X0JBRENSTF9FWFBJUkVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMmEgKFJldm9rZWQgQ2VydCwgRnV0dXJlIENSTCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1mdXR1cmUucGVtIjoibG9jYWxob3N0IjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEIHwgTUJFRFRMU19YNTA5X0JBRENSTF9GVVRVUkU6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzIChSZXZva2VkIENlcnQsIEZ1dHVyZSBDUkwsIENOIE1pc21hdGNoKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsX2V4cGlyZWQucGVtIjoiUG9sYXJTU0wgV3JvbmcgQ04iOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQgfCBNQkVEVExTX1g1MDlfQkFEQ1JMX0VYUElSRUQgfCBNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzNhIChSZXZva2VkIENlcnQsIEV4cGlyZWQgQ1JMLCBDTiBNaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1mdXR1cmUucGVtIjoiV3JvbmcgQ04iOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQgfCBNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRSB8IE1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNCAoVmFsaWQgQ2VydCwgRXhwaXJlZCBDUkwpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ1JMX0VYUElSRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM0YSAoUmV2b2tlZCBDZXJ0LCBGdXR1cmUgQ1JMKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWZ1dHVyZS5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRToiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzUgKFJldm9rZWQgQ2VydCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNiAoUmV2b2tlZCBDZXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6IlBvbGFyU1NMIFNlcnZlciAxIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNyAoUmV2b2tlZCBDZXJ0LCBDTiBNaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJQb2xhclNTTCBXcm9uZyBDTiI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRCB8IE1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjOCAoVmFsaWQgQ2VydCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzhhIChFeHBpcmVkIENlcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LWV4cGlyZWQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0VYUElSRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4YiAoRnV0dXJlIENlcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LWZ1dHVyZS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTEucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfRlVUVVJFOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjOSAoTm90IHRydXN0ZWQgQ2VydCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzEwIChOb3QgdHJ1c3RlZCBDZXJ0LCBFeHBpcmVkIENSTCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL2NybF9leHBpcmVkLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTIgKFZhbGlkIENlcnQgTUQ0IERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19NRDRfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfbWQ0LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9CQURfTUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxMyAoVmFsaWQgQ2VydCBNRDUgRGlnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX01ENV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9tZDUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0JBRF9NRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzE0IChWYWxpZCBDZXJ0IFNIQTEgRGlnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfc2hhMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTUgKFZhbGlkIENlcnQgU0hBMjI0IERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfc2hhMjI0LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxNiAoVmFsaWQgQ2VydCBTSEEyNTYgRGlnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9zaGEyNTYuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzE3IChWYWxpZCBDZXJ0IFNIQTM4NCBEaWdlc3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X3NoYTM4NC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMTggKFZhbGlkIENlcnQgU0hBNTEyIERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfc2hhNTEyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxOSAoVmFsaWQgQ2VydCwgZGVueWluZyBjYWxsYmFjaykKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfc2hhNTEyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9PVEhFUjoidmVyaWZ5X25vbmUiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMxOSAoTm90IHRydXN0ZWQgQ2VydCwgYWxsb3dpbmcgY2FsbGJhY2spCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy9jcmxfZXhwaXJlZC5wZW0iOiJOVUxMIjowOjA6InZlcmlmeV9hbGwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyMSAoZG9tYWluIG1hdGNoaW5nIHdpbGRjYXJkIGNlcnRpZmljYXRlLCBjYXNlIGluc2Vuc2l0aXZlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV93aWxkY2FyZC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoibWFpbC5FeEFtUGxFLmNvbSI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMjIgKGRvbWFpbiBub3QgbWF0Y2hpbmcgd2lsZGNhcmQgY2VydGlmaWNhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX3dpbGRjYXJkLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJtYWlsLmV4YW1wbGUubmV0IjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzIzIChkb21haW4gbm90IG1hdGNoaW5nIHdpbGRjYXJkIGNlcnRpZmljYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV93aWxkY2FyZC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiZXhhbXBsZS5jb20iOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX0NOX01JU01BVENIOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMjQgKGRvbWFpbiBtYXRjaGluZyBDTiBvZiBtdWx0aSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ind3dy5leGFtcGxlLmNvbSI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyNSAoZG9tYWluIG1hdGNoaW5nIG11bHRpIGNlcnRpZmljYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiZXhhbXBsZS5uZXQiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzI2IChkb21haW4gbm90IG1hdGNoaW5nIG11bHRpIGNlcnRpZmljYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoid3d3LmV4YW1wbGUubmV0IjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzI3IChkb21haW4gbm90IG1hdGNoaW5nIG11bHRpIGNlcnRpZmljYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2NlcnRfZXhhbXBsZV9tdWx0aS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoieGFtcGxlLm5ldCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyNyAoZG9tYWluIG5vdCBtYXRjaGluZyBtdWx0aSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6ImJleGFtcGxlLm5ldCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfQ05fTUlTTUFUQ0g6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMyOCAoZG9tYWluIG5vdCBtYXRjaGluZyB3aWxkY2FyZCBpbiBtdWx0aSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGkuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6ImV4YW1wbGUub3JnIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzI5IChkb21haW4gbWF0Y2hpbmcgd2lsZGNhcmQgaW4gbXVsdGkgY2VydGlmaWNhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJtYWlsLmV4YW1wbGUub3JnIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzMCAoZG9tYWluIG1hdGNoaW5nIG11bHRpIGNlcnRpZmljYXRlIHdpdGhvdXQgQ04pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvY2VydF9leGFtcGxlX211bHRpX25vY24uY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ind3dy5zaG90b2thbi1icmF1bnNjaHdlaWcuZGUiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzEgKGRvbWFpbiBub3QgbWF0Y2hpbmcgbXVsdGkgY2VydGlmaWNhdGUgd2l0aG91dCBDTikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9jZXJ0X2V4YW1wbGVfbXVsdGlfbm9jbi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoid3d3LmV4YW1wbGUubmV0IjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9DTl9NSVNNQVRDSCArIE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzIgKFZhbGlkLCBFQyBjZXJ0LCBSU0EgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIzLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzMyAoVmFsaWQsIFJTQSBjZXJ0LCBFQyBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzNCAoVmFsaWQsIEVDIGNlcnQsIEVDIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzNSAoUmV2b2tlZCwgRUMgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVECit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzNiAoVmFsaWQsIEVDIENBLCBTSEExIERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUtc2hhMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICMzNyAoVmFsaWQsIEVDIENBLCBTSEEyMjQgRGlnZXN0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1zaGEyMjQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzggKFZhbGlkLCBFQyBDQSwgU0hBMzg0IERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1zaGEzODQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjMzkgKFZhbGlkLCBFQyBDQSwgU0hBNTEyIERpZ2VzdCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1zaGE1MTIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDAgKFZhbGlkLCBkZXB0aCAwLCBSU0EsIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDEgKFZhbGlkLCBkZXB0aCAwLCBFQywgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM0MiAoRGVwdGggMCwgbm90IENBLCBSU0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi5jcnQiOiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM0MyAoRGVwdGggMCwgbm90IENBLCBFQykKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDQgKENvcnJ1cHRlZCBzaWduYXR1cmUsIEVDKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS1iYWRzaWduLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDUgKENvcnJ1cHRlZCBzaWduYXR1cmUsIFJTQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIyLWJhZHNpZ24uY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDYgKFZhbGlkLCBkZXB0aCAyLCBFQy1SU0EtRUMpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyN19pbnQtY2EuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNDcgKFVudHJ1c3RlZCwgZGVwdGggMiwgRUMtUlNBLUVDKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM0OCAoTWlzc2luZyBpbnRlcm1lZGlhdGUgQ0EsIEVDLVJTQS1FQykKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI3LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM0OSAoVmFsaWQsIGRlcHRoIDIsIFJTQS1FQy1SU0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOF9pbnQtY2EyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTAgKFZhbGlkLCBtdWx0aXBsZSBDQXMpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6ImRhdGFfZmlsZXMvY3JsLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzUxIChWYWxpZCwgbXVsdGlwbGUgQ0FzLCByZXZlcnNlIG9yZGVyKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXIyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQyMS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1MiAoQ0Ega2V5VXNhZ2UgdmFsaWQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnRfY3JsLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1MyAoQ0Ega2V5VXNhZ2UgbWlzc2luZyBjUkxTaWduKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0U6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnQuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMjU2LnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDUkxfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1NCAoQ0Ega2V5VXNhZ2UgbWlzc2luZyBjUkxTaWduLCBubyBDUkwpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMi5rdS1jcnQuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTUgKENBIGtleVVzYWdlIG1pc3Npbmcga2V5Q2VydFNpZ24pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRTpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWNybC5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGEyNTYucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM1NiAoQ0Ega2V5VXNhZ2UgcGxhaW4gd3JvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19YNTA5X0NIRUNLX0tFWV9VU0FHRTpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAoreDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyLmt1LWRzLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTI1Ni5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzU3IChWYWxpZCwgUlNBU1NBLVBTUywgU0hBLTEpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNTggKFZhbGlkLCBSU0FTU0EtUFNTLCBTSEEtMjI0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS1zaGEyMjQuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhMjI0LnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzU5IChWYWxpZCwgUlNBU1NBLVBTUywgU0hBLTI1NikKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjktc2hhMjU2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTI1Ni5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2MCAoVmFsaWQsIFJTQVNTQS1QU1MsIFNIQS0zODQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTUxMl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LXNoYTM4NC5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGEzODQucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjEgKFZhbGlkLCBSU0FTU0EtUFNTLCBTSEEtNTEyKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS1zaGE1MTIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6ImRhdGFfZmlsZXMvY3JsLXJzYS1wc3Mtc2hhNTEyLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzYyIChSZXZva2VkLCBSU0FTU0EtUFNTLCBTSEEtMSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzYzIChSZXZva2VkLCBSU0FTU0EtUFNTLCBTSEEtMSwgQ1JMIGJhZHNpZ24pCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwtcnNhLXBzcy1zaGExLWJhZHNpZ24ucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENSTF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzY0IChWYWxpZCwgUlNBU1NBLVBTUywgU0hBLTEsIG5vdCB0b3ApCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS13aXRoLWNhLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2NSAoUlNBU1NBLVBTUywgU0hBMSwgYmFkIGNlcnQgc2lnbmF0dXJlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjktYmFkc2lnbi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2NiAoUlNBU1NBLVBTUywgU0hBMSwgbm8gUlNBIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEExX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTIuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2NyAoVmFsaWQsIFJTQVNTQS1QU1MsIGFsbCBkZWZhdWx0cykKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LWRlZmF1bHRzLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC1yc2EtcHNzLXNoYTEucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNjggKFJTQVNTQS1QU1MsIHdyb25nIHNhbHRfbGVuKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfWDUwOV9SU0FTU0FfUFNTX1NVUFBPUlQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyOS1iYWQtc2FsdGxlbi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM2OSAoUlNBU1NBLVBTUywgd3JvbmcgbWdmX2hhc2gpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI5LWJhZC1tZ2ZoYXNoLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYS5jcnQiOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9OT1RfVFJVU1RFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzcwICh2MSB0cnVzdGVkIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMS12MS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EtdjEuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzEgKHYxIHRydXN0ZWQgQ0EsIG90aGVyKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi12MS5jcnQiOiJkYXRhX2ZpbGVzL3NlcnZlcjEtdjEuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzIgKHYxIGNoYWluKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyMi12MS1jaGFpbi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EtdjEuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM3MyAoc2VsZnNpZ25lZCB0cnVzdGVkIHdpdGhvdXQgQ0EgYml0KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzQgKHNpZ25lZCBieSBzZWxmc2lnbmVkIHRydXN0ZWQgd2l0aG91dCBDQSBiaXQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjYtc3MtY2hpbGQuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0IjoiZGF0YV9maWxlcy9jcmwucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM3NSAoZW5jb2RpbmcgbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2VuY28tY2VydC11dGY4c3RyLnBlbSI6ImRhdGFfZmlsZXMvZW5jby1jYS1wcnN0ci5wZW0iOiJkYXRhX2ZpbGVzL2NybC5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM3NiAobXVsdGlwbGUgQ1JMcywgbm90IHJldm9rZWQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IjoiZGF0YV9maWxlcy9jcmxfY2F0X2VjLXJzYS5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM3NyAobXVsdGlwbGUgQ1JMcywgcmV2b2tlZCkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI2LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiOiJkYXRhX2ZpbGVzL2NybF9jYXRfZWMtcnNhLnBlbSI6Ik5VTEwiOk1CRURUTFNfRVJSX1g1MDlfQ0VSVF9WRVJJRllfRkFJTEVEOk1CRURUTFNfWDUwOV9CQURDRVJUX1JFVk9LRUQ6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM3OCAobXVsdGlwbGUgQ1JMcywgcmV2b2tlZCBieSBzZWNvbmQpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IjoiZGF0YV9maWxlcy9jcmxfY2F0X3JzYS1lYy5wZW0iOiJOVUxMIjpNQkVEVExTX0VSUl9YNTA5X0NFUlRfVkVSSUZZX0ZBSUxFRDpNQkVEVExTX1g1MDlfQkFEQ0VSVF9SRVZPS0VEOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjNzkgKG11bHRpcGxlIENSTHMsIHJldm9rZWQgYnkgZnV0dXJlKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjYuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6ImRhdGFfZmlsZXMvY3JsX2NhdF9lY2Z1dC1yc2EucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRHxNQkVEVExTX1g1MDlfQkFEQ1JMX0ZVVFVSRToiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzgwIChtdWx0aXBsZSBDUkxzLCBmaXJzdCBmdXR1cmUsIHJldm9rZWQgYnkgc2Vjb25kKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6ImRhdGFfZmlsZXMvY3JsX2NhdF9lY2Z1dC1yc2EucGVtIjoiTlVMTCI6TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6TUJFRFRMU19YNTA5X0JBRENFUlRfUkVWT0tFRDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzgxIChtdWx0aXBsZSBDUkxzLCBub25lIHJlbGV2YW50KQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL2VuY28tY2VydC11dGY4c3RyLnBlbSI6ImRhdGFfZmlsZXMvZW5jby1jYS1wcnN0ci5wZW0iOiJkYXRhX2ZpbGVzL2NybF9jYXRfcnNhLWVjLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIzgyIChOb3QgeWV0IHZhbGlkIENBIGFuZCB2YWxpZCBDQSkKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5OiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhMl9jYXQtZnV0dXJlLXByZXNlbnQuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4MyAodmFsaWQgQ0EgYW5kIE5vdCB5ZXQgdmFsaWQgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LXByZXNlbnQtZnV0dXJlLmNydCI6ImRhdGFfZmlsZXMvY3JsLWVjLXNoYTEucGVtIjoiTlVMTCI6MDowOiJOVUxMIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAjODQgKHZhbGlkIENBIGFuZCBOb3QgeWV0IHZhbGlkIENBKQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnk6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2EyX2NhdC1wcmVzZW50LXBhc3QuY3J0IjoiZGF0YV9maWxlcy9jcmwtZWMtc2hhMS5wZW0iOiJOVUxMIjowOjA6Ik5VTEwiCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICM4NSAoTm90IHlldCB2YWxpZCBDQSBhbmQgdmFsaWQgQ0EpCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3ZlcmlmeToiZGF0YV9maWxlcy9zZXJ2ZXI1LmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYTJfY2F0LXBhc3QtcHJlc2VudC5jcnQiOiJkYXRhX2ZpbGVzL2NybC1lYy1zaGExLnBlbSI6Ik5VTEwiOjA6MDoiTlVMTCIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IHRydXN0ZWQgRUUgY2VydAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0IjoiZGF0YV9maWxlcy9zZXJ2ZXI1LXNlbGZzaWduZWQuY3J0IjowOiJkZXB0aCAwIC0gc2VyaWFsIDUzXDpBMlw6Q0JcOjRCXDoxMlw6NEVcOkFEXDo4M1w6N0RcOkE4XDo5NFw6QjIgLSBzdWJqZWN0IENOPXNlbGZzaWduZWQsIE9VPXRlc3RpbmcsIE89UG9sYXJTU0wsIEM9TkxcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IHNpbXBsZQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhLmNydCI6MDoiZGVwdGggMSAtIHNlcmlhbCAwMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuZGVwdGggMCAtIHNlcmlhbCAwMSAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IHR3byB0cnVzdGVkIHJvb3RzCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnlfY2FsbGJhY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MTIuY3J0IjowOiJkZXB0aCAxIC0gc2VyaWFsIDAwIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5kZXB0aCAwIC0gc2VyaWFsIDAxIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogdHdvIHRydXN0ZWQgcm9vdHMsIHJldmVyc2VkIG9yZGVyCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnlfY2FsbGJhY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0IjowOiJkZXB0aCAxIC0gc2VyaWFsIDAwIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5kZXB0aCAwIC0gc2VyaWFsIDAxIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBTZXJ2ZXIgMVxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogcm9vdCBpbmNsdWRlZAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjFfY2EuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDIxLmNydCI6MDoiZGVwdGggMSAtIHNlcmlhbCAwMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBDQVxuZGVwdGggMCAtIHNlcmlhbCAwMSAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgU2VydmVyIDFcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IGludGVybWVkaWF0ZSBjYQorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1jYV9jYXQxMi5jcnQiOjA6ImRlcHRoIDIgLSBzZXJpYWwgQzFcOjQzXDpFMlw6N0VcOjYyXDo0M1w6Q0NcOkU4IC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhcnNzbCBUZXN0IEVDIENBXG5kZXB0aCAxIC0gc2VyaWFsIDBFIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IEludGVybWVkaWF0ZSBDQVxuZGVwdGggMCAtIHNlcmlhbCAxMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiBpbnRlcm1lZGlhdGUgY2EsIHJvb3QgaW5jbHVkZWQKK2RlcGVuZHNfb246TUJFRFRMU19QRU1fUEFSU0VfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRDpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3ZlcmlmeV9jYWxsYmFjazoiZGF0YV9maWxlcy9zZXJ2ZXI3X2ludC1jYV9jYTIuY3J0IjoiZGF0YV9maWxlcy90ZXN0LWNhX2NhdDEyLmNydCI6MDoiZGVwdGggMiAtIHNlcmlhbCBDMVw6NDNcOkUyXDo3RVw6NjJcOjQzXDpDQ1w6RTggLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyc3NsIFRlc3QgRUMgQ0FcbmRlcHRoIDEgLSBzZXJpYWwgMEUgLSBzdWJqZWN0IEM9TkwsIE89UG9sYXJTU0wsIENOPVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRpYXRlIENBXG5kZXB0aCAwIC0gc2VyaWFsIDEwIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1sb2NhbGhvc3RcbiIKKworWDUwOSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gY2FsbGJhY2s6IGludGVybWVkaWF0ZSBjYSB0cnVzdGVkCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnlfY2FsbGJhY2s6ImRhdGFfZmlsZXMvc2VydmVyN19pbnQtY2FfY2EyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1pbnQtY2EuY3J0IjowOiJkZXB0aCAxIC0gc2VyaWFsIDBFIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IEludGVybWVkaWF0ZSBDQVxuZGVwdGggMCAtIHNlcmlhbCAxMCAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049bG9jYWxob3N0XG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiB0d28gaW50ZXJtZWRpYXRlcworZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMi5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0IjowOiJkZXB0aCAzIC0gc2VyaWFsIDAwIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5kZXB0aCAyIC0gc2VyaWFsIDBGIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IEludGVybWVkaWF0ZSBFQyBDQVxuZGVwdGggMSAtIHNlcmlhbCA0RCAtIHN1YmplY3QgQz1VSywgTz1tYmVkIFRMUywgQ049bWJlZCBUTFMgVGVzdCBpbnRlcm1lZGlhdGUgQ0EgM1xuZGVwdGggMCAtIHNlcmlhbCA0QiAtIHN1YmplY3QgQ049bG9jYWxob3N0XG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiB0d28gaW50ZXJtZWRpYXRlcywgcm9vdCBpbmNsdWRlZAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMl9jYS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtY2FfY2F0MjEuY3J0IjowOiJkZXB0aCAzIC0gc2VyaWFsIDAwIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IENBXG5kZXB0aCAyIC0gc2VyaWFsIDBGIC0gc3ViamVjdCBDPU5MLCBPPVBvbGFyU1NMLCBDTj1Qb2xhclNTTCBUZXN0IEludGVybWVkaWF0ZSBFQyBDQVxuZGVwdGggMSAtIHNlcmlhbCA0RCAtIHN1YmplY3QgQz1VSywgTz1tYmVkIFRMUywgQ049bWJlZCBUTFMgVGVzdCBpbnRlcm1lZGlhdGUgQ0EgM1xuZGVwdGggMCAtIHNlcmlhbCA0QiAtIHN1YmplY3QgQ049bG9jYWxob3N0XG4iCisKK1g1MDkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGNhbGxiYWNrOiB0d28gaW50ZXJtZWRpYXRlcywgdG9wIGludCB0cnVzdGVkCitkZXBlbmRzX29uOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19TSEEyNTZfQworeDUwOV92ZXJpZnlfY2FsbGJhY2s6ImRhdGFfZmlsZXMvc2VydmVyMTBfaW50M19pbnQtY2EyLmNydCI6ImRhdGFfZmlsZXMvdGVzdC1pbnQtY2EyLmNydCI6MDoiZGVwdGggMiAtIHNlcmlhbCAwRiAtIHN1YmplY3QgQz1OTCwgTz1Qb2xhclNTTCwgQ049UG9sYXJTU0wgVGVzdCBJbnRlcm1lZGlhdGUgRUMgQ0FcbmRlcHRoIDEgLSBzZXJpYWwgNEQgLSBzdWJqZWN0IEM9VUssIE89bWJlZCBUTFMsIENOPW1iZWQgVExTIFRlc3QgaW50ZXJtZWRpYXRlIENBIDNcbmRlcHRoIDAgLSBzZXJpYWwgNEIgLSBzdWJqZWN0IENOPWxvY2FsaG9zdFxuIgorCitYNTA5IENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBjYWxsYmFjazogdHdvIGludGVybWVkaWF0ZXMsIGxvdyBpbnQgdHJ1c3RlZAorZGVwZW5kc19vbjpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMV9FTkFCTEVEOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19TSEExX0MKK3g1MDlfdmVyaWZ5X2NhbGxiYWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEwX2ludDNfaW50LWNhMl9jYS5jcnQiOiJkYXRhX2ZpbGVzL3Rlc3QtaW50LWNhMy5jcnQiOjA6ImRlcHRoIDEgLSBzZXJpYWwgNEQgLSBzdWJqZWN0IEM9VUssIE89bWJlZCBUTFMsIENOPW1iZWQgVExTIFRlc3QgaW50ZXJtZWRpYXRlIENBIDNcbmRlcHRoIDAgLSBzZXJpYWwgNEIgLSBzdWJqZWN0IENOPWxvY2FsaG9zdFxuIgorCitYNTA5IFBhcnNlIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUEVNX1BBUlNFX0M6TUJFRFRMU19DRVJUU19DCit4NTA5X3NlbGZ0ZXN0OgorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKEluY29ycmVjdCBmaXJzdCB0YWcpCit4NTA5cGFyc2VfY3J0OiIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChDb3JyZWN0IGZpcnN0IHRhZywgZGF0YSBsZW5ndGggZG9lcyBub3QgbWF0Y2gpCit4NTA5cGFyc2VfY3J0OiIzMDAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIG5vIG1vcmUgZGF0YSkKK3g1MDlwYXJzZV9jcnQ6IjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIGxlbmd0aCBkYXRhIGluY29ycmVjdCkKK3g1MDlwYXJzZV9jcnQ6IjMwMDIzMDg1IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0xFTkdUSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKENvcnJlY3QgZmlyc3QgdGFnLCBsZW5ndGggZGF0YSBpbmNvbXBsZXRlKQoreDUwOXBhcnNlX2NydDoiMzAwMjMwODMiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIGxlbmd0aCBkYXRhIGluY29tcGxldGUpCit4NTA5cGFyc2VfY3J0OiIzMDAyMzA4MSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChDb3JyZWN0IGZpcnN0IHRhZywgbGVuZ3RoIGRhdGEgaW5jb21wbGV0ZSkKK3g1MDlwYXJzZV9jcnQ6IjMwMDMzMDgyMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIHNlY29uZCB0YWcgbm8gVEJTQ2VydGlmaWNhdGUpCit4NTA5cGFyc2VfY3J0OiIzMDAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIG5vIHZlcnNpb24gdGFnLCBzZXJpYWwgbWlzc2luZykKK3g1MDlwYXJzZV9jcnQ6IjMwMDMzMDAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGludmFsaWQgdmVyc2lvbiB0YWcpCit4NTA5cGFyc2VfY3J0OiIzMDA1MzAwM2EwMDEwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHZhbGlkIHZlcnNpb24gdGFnLCBubyBsZW5ndGgpCit4NTA5cGFyc2VfY3J0OiIzMDA1MzAwM2EwMDEwMiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHZhbGlkIHZlcnNpb24gdGFnLCBpbnZhbGlkIGxlbmd0aCkKK3g1MDlwYXJzZV9jcnQ6IjMwMTYzMDE0YTAxMjAyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyBNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHZhbGlkIHZlcnNpb24gdGFnLCBubyBzZXJpYWwpCit4NTA5cGFyc2VfY3J0OiIzMDA3MzAwNWEwMDMwMjAxMDQiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGludmFsaWQgbGVuZ3RoIHZlcnNpb24gdGFnKQoreDUwOXBhcnNlX2NydDoiMzAwODMwMDZhMDA0MDIwMTA0MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaW5jb3JyZWN0IHNlcmlhbCB0YWcpCit4NTA5cGFyc2VfY3J0OiIzMDA4MzAwNmEwMDMwMjAxMDQwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NFUklBTCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaW5jb3JyZWN0IHNlcmlhbCBsZW5ndGgpCit4NTA5cGFyc2VfY3J0OiIzMDA4MzAwNmEwMDMwMjAxMDQ4MiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NFUklBTCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBzZXJpYWwsIG5vIGFsZykKK3g1MDlwYXJzZV9jcnQ6IjMwMGQzMDBiYTAwMzAyMDEwNDgyMDRkZWFkYmVlZiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBzZXJpYWwsIG5vIGFsZyBvaWQpCit4NTA5cGFyc2VfY3J0OiIzMDBlMzAwY2EwMDMwMjAxMDQ4MjA0ZGVhZGJlZWYwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgYWxnIG9pZCBubyBkYXRhIGluIHNlcXVlbmNlKQoreDUwOXBhcnNlX2NydDoiMzAwZjMwMGRhMDAzMDIwMTA0ODIwNGRlYWRiZWVmMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgYWxnIHdpdGggcGFyYW1zKQoreDUwOXBhcnNlX2NydDoiMzAxNjMwMTRhMDAzMDIwMTA0ODIwNGRlYWRiZWVmMzAwNzA2MDRjYWZlZDAwZDAxIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBjb3JyZWN0IGFsZyBkYXRhLCBubyBwYXJhbXMgdW5rbm93biB2ZXJzaW9uKQoreDUwOXBhcnNlX2NydDoiMzAxNTMwMTNhMDAzMDIwMTA0ODIwNGRlYWRiZWVmMzAwNjA2MDRjYWZlZDAwZCI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1ZFUlNJT04KKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgY29ycmVjdCBhbGcgZGF0YSwgdW5rbm93biB2ZXJzaW9uKQoreDUwOXBhcnNlX2NydDoiMzAxNzMwMTVhMDAzMDIwMTA0ODIwNGRlYWRiZWVmMzAwODA2MDRjYWZlZDAwZDA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9WRVJTSU9OCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGNvcnJlY3QgYWxnIGRhdGEsIGxlbmd0aCBtaXNtYXRjaCkKK3g1MDlwYXJzZV9jcnQ6IjMwMTgzMDE2YTAwMzAyMDEwNDgyMDRkZWFkYmVlZjMwMDkwNjA0Y2FmZWQwMGQwNTAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBjb3JyZWN0IGFsZywgdW5rbm93biBhbGdfaWQpCit4NTA5cGFyc2VfY3J0OiIzMDE3MzAxNWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDA4MDYwNGNhZmVkMDBkMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1NJR19BTEcgKyBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGNvcnJlY3QgYWxnLCBzcGVjaWZpYyBhbGdfaWQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAxYzMwMWFhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBjb3JyZWN0IGFsZywgdW5rbm93biBzcGVjaWZpYyBhbGdfaWQpCit4NTA5cGFyc2VfY3J0OiIzMDFjMzAxYWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMTA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHICsgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBjb3JyZWN0IGFsZywgYmFkIFJTQVNTQS1QU1MgcGFyYW1zKQorZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUCit4NTA5cGFyc2VfY3J0OiIzMDE5MzAxN0EwMDMwMjAxMDIwMjAxMTgzMDBEMDYwOTJBODY0ODg2RjcwRDAxMDEwQTMxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGlzc3VlciBubyBzZXQgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDFlMzAxY2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaXNzdWVyIG5vIGlubmVyIHNlcSBkYXRhKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwMjAzMDFlYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMDIzMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaXNzdWVyIG5vIGlubmVyIHNldCBkYXRhKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwMjIzMDIwYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMDQzMTAyMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGlzc3VlciB0d28gaW5uZXIgc2V0IGRhdGFzKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwMjQzMDIyYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMDYzMTA0MzAwMDMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpc3N1ZXIgbm8gb2lkIGRhdGEpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzAyNDMwMjJhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwNjMxMDQzMDAyMDYwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIGlzc3VlciBpbnZhbGlkIHRhZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDJhMzAyOGEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMDYwNDU0NjU3Mzc0IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgaXNzdWVyLCBubyBzdHJpbmcgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDI1MzAyM2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDA3MzEwNTMwMDMwNjAwMTMiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpc3N1ZXIsIG5vIGZ1bGwgZm9sbG93aW5nIHN0cmluZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDJiMzAyOWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBkMzEwYjMwMDkwNjAwMTMwNDU0NjU3Mzc0MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FK01CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgdmFsaWQgaXNzdWVyLCBubyB2YWxpZGl0eSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDJhMzAyOGEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgdG9vIG11Y2ggZGF0ZSBkYXRhKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNDkzMDQ3YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFkMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpbnZhbGlkIGZyb20gZGF0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDQ4MzA0NmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMDAwMDAwMDAxNzBjMzAzOTMxMzIzMzMxMzIzMzAwMDAwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBpbnZhbGlkIHRvIGRhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA0ODMwNDZhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMwMDAwMDAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgdmFsaWQgdmFsaWRpdHksIG5vIHN1YmplY3QpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA0OTMwNDdhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCB2YWxpZCBzdWJqZWN0LCBubyBwdWJrZXlpbmZvKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNTYzMDU0YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0IjoiIjpNQkVEVExTX0VSUl9QS19LRVlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHB1YmtleSwgbm8gYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNTgzMDU2YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAwMCI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHZhbGlkIHN1YmplY3QsIHVua25vd24gcGsgYWxnKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNjczMDY1YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAwZjMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAwMDUwMCI6IiI6TUJFRFRMU19FUlJfUEtfVU5LTk9XTl9QS19BTEcKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgcHVia2V5LCBubyBiaXRzdHJpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA2NzMwNjVhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDBmMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSwgcHVia2V5LCBubyBiaXRzdHJpbmcgZGF0YSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDY5MzA2N2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMTEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzAwIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHB1YmtleSwgaW52YWxpZCBiaXRzdHJpbmcgc3RhcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA2YTMwNjhhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDEyMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMwMTAxIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHB1YmtleSwgaW52YWxpZCBpbnRlcm5hbCBiaXRzdHJpbmcgbGVuZ3RoKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNmQzMDZiYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxNTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMDQwMDMwMDAwMCI6IiI6TUJFRFRMU19FUlJfUEtfSU5WQUxJRF9QVUJLRVkgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIGludmFsaWQgaW50ZXJuYWwgYml0c3RyaW5nIHRhZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDZkMzA2YmEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMTUzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzA0MDAzMTAwMDAiOiIiOk1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIGludmFsaWQgbWJlZHRsc19tcGkpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA3NDMwNzJhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMwYjAwMzAwODAyMDJmZmZmMDMwMmZmZmYiOiIiOk1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIHRvdGFsIGxlbmd0aCBtaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDc1MzA3M2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWQzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzBiMDAzMDA4MDIwMmZmZmYwMjAyZmZmZjAwIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWSArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUsIHB1YmtleSwgY2hlY2sgZmFpbGVkKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwNzQzMDcyYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMGIwMDMwMDgwMjAyZmZmZjAyMDJmZmZmIjoiIjpNQkVEVExTX0VSUl9QS19JTlZBTElEX1BVQktFWQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlLCBwdWJrZXksIGNoZWNrIGZhaWxlZCwgZXhwYW5kZWQgbGVuZ3RoIG5vdGF0aW9uKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE4MzMwODE4MGEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMDIwMmZmZmYiOiIiOk1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIE9wdGlvbmFsIFVJRHMsIEV4dGVuc2lvbnMgbm90IHByZXNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTgzMzA4MTgwYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSB2MywgaXNzdWVySUQgd3JvbmcgdGFnKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE4NDMwODE4MWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIFVJRHMsIG5vIGV4dCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxODkzMDgxODZhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBVSURzLCBpbnZhbGlkIGxlbmd0aCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxODkzMDgxODZhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTE4NWFhYTIwMWJiIjoiIjpNQkVEVExTX0VSUl9BU04xX0lOVkFMSURfTEVOR1RICisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGV4dCBlbXB0eSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOGIzMDgxODhhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiYTMwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGV4dCBsZW5ndGggbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MThlMzA4MThiYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMDMzMDAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChUQlNDZXJ0aWZpY2F0ZSB2MywgZmlyc3QgZXh0IGludmFsaWQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MThmMzA4MThjYTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMDMzMDAyMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGZpcnN0IGV4dCBpbnZhbGlkIHRhZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTAzMDgxOGRhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiYTMwNDMwMDIzMTAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgQmFzaWNDb250cmFpbnQgdGFnLCBib29sIGxlbiBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ODMwODE5NWEwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmZhMTAxYWFhMjAxYmJhMzBjMzAwYTMwMDYwNjAzNTUxZDEzMDEwMTAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgQmFzaWNDb250cmFpbnQgdGFnLCBkYXRhIG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk4MzA4MTk1YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMGMzMDBhMzAwODA2MDM1NTFkMTMwMTAxMDEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGV4dCBCYXNpY0NvbnRyYWludCB0YWcsIG5vIG9jdGV0IHByZXNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk4MzA4MTk1YTAwMzAyMDEwMjgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZmExMDFhYWEyMDFiYmEzMGQzMDBiMzAwOTA2MDM1NTFkMTMwMTAxMDEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGV4dCBCYXNpY0NvbnRyYWludCB0YWcsIG9jdGV0IGRhdGEgbWlzc2luZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOWMzMDgxOTlhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiYTMxMTMwMGYzMDBkMDYwMzU1MWQxMzAxMDEwMTA0MDMzMDAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFRCU0NlcnRpZmljYXRlIHYzLCBleHQgQmFzaWNDb250cmFpbnQgdGFnLCBubyBwYXRobGVuKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5ZjMwODE5Y2EwMDMwMjAxMDI4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmZhMTAxYWFhMjAxYmJhMzE0MzAxMjMwMTAwNjAzNTUxZDEzMDEwMTAxMDQwNjMwMDQwMjAxMDEwMiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoVEJTQ2VydGlmaWNhdGUgdjMsIGV4dCBCYXNpY0NvbnRyYWludCB0YWcsIG9jdGV0IGxlbiBtaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxYTIzMDgxOWZhMDAzMDIwMTAyODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmYTEwMWFhYTIwMWJiYTMxNzMwMTUzMDEzMDYwMzU1MWQxMzAxMDEwMTA0MDkzMDA3MDIwMTAxMDIwMTAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9FWFRFTlNJT05TICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChFeHRLZXlVc2FnZSwgYmFkIHNlY29uZCB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODFkZTMwODFkYmEwMDMwMjAxMDIwMjA5MDBlYmRiY2QxNDEwNWUxODM5MzAwOTA2MDcyYTg2NDhjZTNkMDQwMTMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDFlMTcwZDMxMzQzMTMxMzEzMTMyMzAzNTM5MzUzNDVhMTcwZDMyMzQzMTMxMzAzODMyMzAzNTM5MzUzNDVhMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwNTkzMDEzMDYwNzJhODY0OGNlM2QwMjAxMDYwODJhODY0OGNlM2QwMzAxMDcwMzQyMDAwNDM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmYTMyMTMwMWYzMDFkMDYwMzU1MWQyNTA0MTYzMDE0MDYwODJiMDYwMTA1MDUwNzAzMDEwNzA4MmIwNjAxMDUwNTA3MDMwMiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoU3ViamVjdEFsdE5hbWUgcmVwZWF0ZWQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODFmZDMwODFmYWEwMDMwMjAxMDIwMjA5MDBhOGIzMWZmMzdkMDlhMzdmMzAwOTA2MDcyYTg2NDhjZTNkMDQwMTMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDFlMTcwZDMxMzQzMTMxMzEzMTMyMzEzMzM3MzEzNjVhMTcwZDMyMzQzMTMxMzAzODMyMzEzMzM3MzEzNjVhMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwNTkzMDEzMDYwNzJhODY0OGNlM2QwMjAxMDYwODJhODY0OGNlM2QwMzAxMDcwMzQyMDAwNDM3Y2M1NmQ5NzYwOTFlNWE3MjNlYzc1OTJkZmYyMDZlZWU3Y2Y5MDY5MTc0ZDBhZDE0YjVmNzY4MjI1OTYyOTI0ZWU1MDBkODIzMTFmZmVhMmZkMjM0NWQ1ZDE2YmQ4YTg4YzI2Yjc3MGQ1NWNkOGEyYTBlZmEwMWM4YjRlZGZmYTMyMTMwMWYzMDFkMDYwMzU1MWQxMTA0MTYzMDE0ODIwODY2NmY2ZjJlNzQ2NTczNzQ4MjA4NjI2MTcyMmU3NDY1NzM3NDMwMWQwNjAzNTUxZDExMDQxNjMwMTQ4MjA4NjY2ZjZmMmU3NDY1NzM3NDgyMDg2MjYxNzIyZTc0NjU3Mzc0IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRVhURU5TSU9OUworCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKEV4dEtleVVzYWdlIHJlcGVhdGVkKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5cGFyc2VfY3J0OiIzMDgxZmQzMDgxZmFhMDAzMDIwMTAyMDIwOTAwZWJkYmNkMTQxMDVlMTgzOTMwMDkwNjA3MmE4NjQ4Y2UzZDA0MDEzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzAxZTE3MGQzMTM0MzEzMTMxMzEzMjMwMzUzOTM1MzQ1YTE3MGQzMjM0MzEzMTMwMzgzMjMwMzUzOTM1MzQ1YTMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDU5MzAxMzA2MDcyYTg2NDhjZTNkMDIwMTA2MDgyYTg2NDhjZTNkMDMwMTA3MDM0MjAwMDQzN2NjNTZkOTc2MDkxZTVhNzIzZWM3NTkyZGZmMjA2ZWVlN2NmOTA2OTE3NGQwYWQxNGI1Zjc2ODIyNTk2MjkyNGVlNTAwZDgyMzExZmZlYTJmZDIzNDVkNWQxNmJkOGE4OGMyNmI3NzBkNTVjZDhhMmEwZWZhMDFjOGI0ZWRmZmEzNDAzMDNlMzAxZDA2MDM1NTFkMjUwNDE2MzAxNDA2MDgyYjA2MDEwNTA1MDcwMzAxMDYwODJiMDYwMTA1MDUwNzAzMDIzMDFkMDYwMzU1MWQyNTA0MTYzMDE0MDYwODJiMDYwMTA1MDUwNzAzMDEwNjA4MmIwNjAxMDUwNTA3MDMwMiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0VYVEVOU0lPTlMKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChjb3JyZWN0IHB1YmtleSwgbm8gc2lnX2FsZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxODMzMDgxODBhMDAzMDIwMTAwODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKHNpZ19hbGcgbWlzbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTkyMzA4MTgwYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMjAyMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9TSUdfTUlTTUFUQ0gKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChzaWdfYWxnLCBubyBzaWcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTkyMzA4MTgwYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChzaWduYXR1cmUsIGludmFsaWQgc2lnIGRhdGEpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk1MzA4MTgwYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRSArIE1CRURUTFNfRVJSX0FTTjFfSU5WQUxJRF9EQVRBCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoc2lnbmF0dXJlLCBkYXRhIGxlZnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk3MzA4MTgwYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKGNvcnJlY3QpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk2MzA4MTgwYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6ID9cPz1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKEdlbmVyYWxpemVkVGltZSBpbnN0ZWFkIG9mIFVUQ1RpbWUpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk4MzA4MTgyYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDFlMTgwZTMyMzAzMTMwMzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiA/XD89VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTAtMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggWDUyMCBDTikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTkzMDgxODNhMDAzMDIwMTAwODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMDMwMjAwZmYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBERVw6QURcOkJFXDpFRlxuaXNzdWVyIG5hbWUgICAgICAgXDogQ049VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggWDUyMCBDKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5OTMwODE4M2EwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDA2MTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBDPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6ID9cPz1UZXN0XG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDA5LTAxLTAxIDAwXDowMFw6MDBcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMDktMTItMzEgMjNcOjU5XDo1OVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggTUQyXG5SU0Ega2V5IHNpemUgICAgICBcOiAxMjggYml0c1xuIjowCisKK1g1MDkgQ2VydGlmaWNhdGUgQVNOMSAoTmFtZSB3aXRoIFg1MjAgTCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTkzMDgxODNhMDAzMDIwMTAwODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwNzEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMDMwMjAwZmYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBERVw6QURcOkJFXDpFRlxuaXNzdWVyIG5hbWUgICAgICAgXDogTD1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKE5hbWUgd2l0aCBYNTIwIFNUKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfTUQyX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODE5OTMwODE4M2EwMDMwMjAxMDA4MjA0ZGVhZGJlZWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDA4MTMwNDU0NjU3Mzc0MzAxYzE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAxNzBjMzAzOTMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwYzMxMGEzMDA4MDYwMDEzMDQ1NDY1NzM3NDMwMmEzMDBkMDYwOTJBODY0ODg2RjcwRDAxMDEwMTA1MDAwMzE5MDAzMDE2MDIxMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDIwMmZmZmYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMjA1MDAwMzAyMDBmZiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IERFXDpBRFw6QkVcOkVGXG5pc3N1ZXIgbmFtZSAgICAgICBcOiBTVD1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKE5hbWUgd2l0aCBYNTIwIE8pCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk5MzA4MTgzYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MGExMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6IE89VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggWDUyMCBPVSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX01EMl9DCit4NTA5cGFyc2VfY3J0OiIzMDgxOTkzMDgxODNhMDAzMDIwMTAwODIwNGRlYWRiZWVmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwYjEzMDQ1NDY1NzM3NDMwMWMxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMTcwYzMwMzkzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGMzMTBhMzAwODA2MDAxMzA0NTQ2NTczNzQzMDJhMzAwZDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMxOTAwMzAxNjAyMTBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAyMDJmZmZmMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMDIwNTAwMDMwMjAwZmYiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiBERVw6QURcOkJFXDpFRlxuaXNzdWVyIG5hbWUgICAgICAgXDogT1U9VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogP1w/PVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxuZXhwaXJlcyBvbiAgICAgICAgXDogMjAwOS0xMi0zMSAyM1w6NTlcOjU5XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBNRDJcblJTQSBrZXkgc2l6ZSAgICAgIFw6IDEyOCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggdW5rbm93biBYNTIwIHBhcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTk5MzA4MTgzYTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0ZGUxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6ID9cPz1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKE5hbWUgd2l0aCBjb21wb3NpdGUgUkROKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5cGFyc2VfY3J0OiIzMDgyMDI5ZjMwODIwMjA4YTAwMzAyMDEwMjAyMDQ0YzIwZTNiZDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTA1MDUwMDMwNTYzMTBiMzAwOTA2MDM1NTA0MDYxMzAyNTU1MzMxMGIzMDA5MDYwMzU1MDQwODBjMDI0MzQxMzEyMTMwMWYwNjAzNTUwNDBhMGMxODQ5NmU3NDY1NzI2ZTY1NzQyMDU3Njk2NDY3Njk3NDczMjA1MDc0NzkyMDRjNzQ2NDMxMTczMDE1MDYwMzU1MDQwMzBjMGU0NjcyNjE2ZTZiNjU2ZTYzNjU3Mjc0MjA0MzQxMzAxZTE3MGQzMTMzMzAzODMwMzIzMTM1MzEzNDMzMzc1YTE3MGQzMTM1MzAzODMxMzczMDM1MzUzNDMzMzE1YTMwODFkMTMxMGIzMDA5MDYwMzU1MDQwNjEzMDI1NTUzMzExMzMwMTEwNjAzNTUwNDA4MTMwYTU3NjE3MzY4Njk2ZTY3NzQ2ZjZlMzExMzMwMTEwNjBiMmIwNjAxMDQwMTgyMzczYzAyMDEwMzEzMDI1NTUzMzExOTMwMTcwNjBiMmIwNjAxMDQwMTgyMzczYzAyMDEwMjEzMDg0NDY1NmM2MTc3NjE3MjY1MzExYTMwMTgwNjAzNTUwNDBhMTMxMTQxNzU3NDY4NmY3MjY5N2E2NTJlNGU2NTc0MjA0YzRjNDMzMTFkMzAxYjA2MDM1NTA0MGYxMzE0NTA3MjY5NzY2MTc0NjUyMDRmNzI2NzYxNmU2OTdhNjE3NDY5NmY2ZTMxMmEzMDBlMDYwMzU1MDQwNTEzMDczNDMzMzYzOTMxMzkzMTMwMTgwNjAzNTUwNDAzMTMxMTc3Nzc3NzJlNjE3NTc0Njg2ZjcyNjk3YTY1MmU2ZTY1NzQzMTE2MzAxNDA2MDM1NTA0MDcxMzBkNTM2MTZlMjA0NjcyNjE2ZTYzNjk3MzYzNmYzMDgxOWYzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwMTA1MDAwMzgxOGQwMDMwODE4OTAyODE4MTAwZDg4NWM2MmUyMDliNmFjMDA1YzY0ZjBiY2ZkYWFjMWYyYjY3YTE4ODAyZjc1YjA4ODUxZmY5MzNkZWVkODg4YjdiNjhhNjJmY2FiZGIyMWQ0YTg5MTRiZWNmZWFhYTFiN2UwOGEwOWZmYWY5OTE2NTYzNTg2ZGM5NWUyODc3MjYyYjBiNWY1ZWMyN2ViNGQ3NTRhYTZmYWNkMWQzOWQyNWIzOGEyMzcyODkxYmFjZGQzZTkxOWY3OTFlZDI1NzA0ZTg5MjBlMzgwZTU2MjNhMzhlNmEyMzkzNTk3OGEzYWVjN2E4ZTc2MWUyMTFkNDJlZmZhMjcxM2U0NGU3ZGUwYjAyMDMwMTAwMDEzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwNTA1MDAwMzgxODEwMDA5MmY3NDI0ZDNmNmRhNGI4NTUzODI5ZDk1OGVkMTk4MGI5MjcwYjQyYzBkM2Q1ODMzNTA5YTI4YzY2YmIyMDdkZjlmM2M1MWQxMjIwNjVlMDBiODdjMDhjMjczMGQyNzQ1ZmUxYzI3OWQxNmZhZTRkNTNiNGJmNWJkZmEzNjMxZmNlZWIyZTc3MmI2YjA4YTNlY2E1YTJlMmM2ODdhZWZkMjNiNGI3M2JmNzdhYzYwOTk3MTEzNDJjZjA3MGIzNWM2ZjYxMzMzYTdjYmY2MTNkOGRkNGJkNzNlOWRmMzRiY2Q0Mjg0YjBiNGRmNTdjMzZjNDUwNjEzZjExZTVkYWMiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAzXG5zZXJpYWwgbnVtYmVyICAgICBcOiA0Q1w6MjBcOkUzXDpCRFxuaXNzdWVyIG5hbWUgICAgICAgXDogQz1VUywgU1Q9Q0EsIE89SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkLCBDTj1GcmFua2VuY2VydCBDQVxuc3ViamVjdCBuYW1lICAgICAgXDogQz1VUywgU1Q9V2FzaGluZ3RvbiwgPz89VVMsID8/PURlbGF3YXJlLCBPPUF1dGhvcml6ZS5OZXQgTExDLCA/Pz1Qcml2YXRlIE9yZ2FuaXphdGlvbiwgc2VyaWFsTnVtYmVyPTQzNjkxOTEgKyBDTj13d3cuYXV0aG9yaXplLm5ldCwgTD1TYW4gRnJhbmNpc2NvXG5pc3N1ZWQgIG9uICAgICAgICBcOiAyMDEzLTA4LTAyIDE1XDoxNFw6MzdcbmV4cGlyZXMgb24gICAgICAgIFw6IDIwMTUtMDgtMTcgMDVcOjU0XDozMVxuc2lnbmVkIHVzaW5nICAgICAgXDogUlNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMTAyNCBiaXRzXG4iOjAKKworWDUwOSBDZXJ0aWZpY2F0ZSBBU04xIChOYW1lIHdpdGggUEtDUzkgZW1haWwpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTlmMzA4MTg5YTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMTUzMTEzMzAxMTA2MDkyYTg2NDg4NmY3MGQwMTA5MDExMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6IGVtYWlsQWRkcmVzcz1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKE5hbWUgd2l0aCB1bmtub3duIFBLQ1M5IHBhcnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19NRDJfQworeDUwOXBhcnNlX2NydDoiMzA4MTlmMzA4MTg5YTAwMzAyMDEwMDgyMDRkZWFkYmVlZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDMwMTUzMTEzMzAxMTA2MDkyYTg2NDg4NmY3MGQwMTA5YWIxMzA0NTQ2NTczNzQzMDFjMTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDE3MGMzMDM5MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBjMzEwYTMwMDgwNjAwMTMwNDU0NjU3Mzc0MzAyYTMwMGQwNjA5MkE4NjQ4ODZGNzBEMDEwMTAxMDUwMDAzMTkwMDMwMTYwMjEwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYwMjAyZmZmZjMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTAyMDUwMDAzMDIwMGZmIjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogREVcOkFEXDpCRVw6RUZcbmlzc3VlciBuYW1lICAgICAgIFw6ID9cPz1UZXN0XG5zdWJqZWN0IG5hbWUgICAgICBcOiA/XD89VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5leHBpcmVzIG9uICAgICAgICBcOiAyMDA5LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IFJTQSB3aXRoIE1EMlxuUlNBIGtleSBzaXplICAgICAgXDogMTI4IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKEVDRFNBIHNpZ25hdHVyZSwgUlNBIGtleSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0VDRFNBX0MKK3g1MDlwYXJzZV9jcnQ6IjMwODFFNjMwODE5RTAyMDEwMzMwMDkwNjA3MkE4NjQ4Q0UzRDA0MDEzMDBGMzEwRDMwMEIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzAxRTE3MEQzMTMzMzAzNzMxMzAzMDM5MzQzNjMxMzg1QTE3MEQzMjMzMzAzNzMwMzgzMDM5MzQzNjMxMzg1QTMwMEYzMTBEMzAwQjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDRDMzAwRDA2MDkyQTg2NDg4NkY3MEQwMTAxMDEwNTAwMDMzQjAwMzAzODAyMzEwMEU4RjU0NjA2MUQzQjQ5QkMyRjZCNzUyNEI3RUE0RDczQThENTI5M0VFOEM2NEQ5NDA3QjcwQjVEMTZCQUVCQzMyQjgyMDU1OTFFQUI0RTFFQjU3RTkyNDE4ODM3MDEyNTAyMDMwMTAwMDEzMDA5MDYwNzJBODY0OENFM0QwNDAxMDMzODAwMzAzNTAyMTg2RTE4MjA5QUZCRUQxNEEwRDlBNzk2RUZDQUQ2ODg5MUUzQ0NENUY3NTgxNUM4MzMwMjE5MDBFOTJCNEZENDYwQjE5OTQ2OTMyNDNCOUZGQUQ1NDcyOURFODY1MzgxQkRBNDFEMjUiOiJjZXJ0LiB2ZXJzaW9uICAgICBcOiAxXG5zZXJpYWwgbnVtYmVyICAgICBcOiAwM1xuaXNzdWVyIG5hbWUgICAgICAgXDogQ049VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogQ049VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMy0wNy0xMCAwOVw6NDZcOjE4XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIzLTA3LTA4IDA5XDo0Nlw6MThcbnNpZ25lZCB1c2luZyAgICAgIFw6IEVDRFNBIHdpdGggU0hBMVxuUlNBIGtleSBzaXplICAgICAgXDogMzg0IGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKEVDRFNBIHNpZ25hdHVyZSwgRUMga2V5KQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AxOTJSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCit4NTA5cGFyc2VfY3J0OiIzMDgxRUIzMDgxQTMwMjA5MDBGNDE1MzQ2NjJFQzdFOTEyMzAwOTA2MDcyQTg2NDhDRTNEMDQwMTMwMEYzMTBEMzAwQjA2MDM1NTA0MDMxMzA0NTQ2NTczNzQzMDFFMTcwRDMxMzMzMDM3MzEzMDMwMzkzNDMwMzEzOTVBMTcwRDMyMzMzMDM3MzAzODMwMzkzNDMwMzEzOTVBMzAwRjMxMEQzMDBCMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwNDkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDEwMzMyMDAwNDIxMzc5NjlGQUJENEUzNzA2MjRBMEUxQTMzRTM3OUNBQjk1MENDRTAwRUY4QzNDM0UyQURBRUI3MjcxQzhGMDc2NTlENjVEM0Q3NzdEQ0YyMTYxNDM2M0FFNEI2RTYxNzMwMDkwNjA3MkE4NjQ4Q0UzRDA0MDEwMzM4MDAzMDM1MDIxODU4Q0MwRjk1Nzk0NkZFNkEzMDNEOTI4ODVBNDU2QUE3NEM3NDNDN0I3MDhDQkQzNzAyMTkwMEZFMjkzQ0FDMjFBRjM1MkQxNkI4MkVCOEVBNTRFOTQxMEIzQUJBQUREOUYwNURENiI6ImNlcnQuIHZlcnNpb24gICAgIFw6IDFcbnNlcmlhbCBudW1iZXIgICAgIFw6IEY0XDoxNVw6MzRcOjY2XDoyRVw6QzdcOkU5XDoxMlxuaXNzdWVyIG5hbWUgICAgICAgXDogQ049VGVzdFxuc3ViamVjdCBuYW1lICAgICAgXDogQ049VGVzdFxuaXNzdWVkICBvbiAgICAgICAgXDogMjAxMy0wNy0xMCAwOVw6NDBcOjE5XG5leHBpcmVzIG9uICAgICAgICBcOiAyMDIzLTA3LTA4IDA5XDo0MFw6MTlcbnNpZ25lZCB1c2luZyAgICAgIFw6IEVDRFNBIHdpdGggU0hBMVxuRUMga2V5IHNpemUgICAgICAgXDogMTkyIGJpdHNcbiI6MAorCitYNTA5IENlcnRpZmljYXRlIEFTTjEgKFJTQSBzaWduYXR1cmUsIEVDIGtleSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMTkyUjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworeDUwOXBhcnNlX2NydDoiMzA4MUU0MzA4MTlGMDIwMTA0MzAwRDA2MDkyQTg2NDg4NkY3MEQwMTAxMDUwNTAwMzAwRjMxMEQzMDBCMDYwMzU1MDQwMzEzMDQ1NDY1NzM3NDMwMUUxNzBEMzEzMzMwMzczMTMwMzEzNTMwMzIzMzM3NUExNzBEMzIzMzMwMzczMDM4MzEzNTMwMzIzMzM3NUEzMDBGMzEwRDMwMEIwNjAzNTUwNDAzMTMwNDU0NjU3Mzc0MzA0OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwMTAzMzIwMDA0RTk2MjU1MUEzMjVCMjFCNTBDRjZCOTkwRTMzRDQzMThGRDE2Njc3MTMwNzI2MzU3QTE5NkUzRUZFNzEwN0JDQjZCREM2RDlEQjJBNERGN0M5NjRBQ0ZFODE3OTg0MzNEMzAwRDA2MDkyQTg2NDg4NkY3MEQwMTAxMDUwNTAwMDMzMTAwMUE2QzE4Q0QxRTQ1NzQ3NEIyRDM5MTI3NDNGNDRCNTcxMzQxQTc4NTlBMDEyMjc3NEE4RTE5QTY3MTY4MDg3ODkzNjk0OUY5MDRDOTI1NUJERDZGRkZEQjMzQTdFNkQ4IjoiY2VydC4gdmVyc2lvbiAgICAgXDogMVxuc2VyaWFsIG51bWJlciAgICAgXDogMDRcbmlzc3VlciBuYW1lICAgICAgIFw6IENOPVRlc3RcbnN1YmplY3QgbmFtZSAgICAgIFw6IENOPVRlc3Rcbmlzc3VlZCAgb24gICAgICAgIFw6IDIwMTMtMDctMTAgMTVcOjAyXDozN1xuZXhwaXJlcyBvbiAgICAgICAgXDogMjAyMy0wNy0wOCAxNVw6MDJcOjM3XG5zaWduZWQgdXNpbmcgICAgICBcOiBSU0Egd2l0aCBTSEExXG5FQyBrZXkgc2l6ZSAgICAgICBcOiAxOTIgYml0c1xuIjowCisKK1g1MDkgQ1JMIEFTTjEgKEluY29ycmVjdCBmaXJzdCB0YWcpCit4NTA5cGFyc2VfY3JsOiIiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQKKworWDUwOSBDUkwgQVNOMSAoQ29ycmVjdCBmaXJzdCB0YWcsIGRhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoKQoreDUwOXBhcnNlX2NybDoiMzAwMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHRhZyBtaXNzaW5nKQoreDUwOXBhcnNlX2NybDoiMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHZlcnNpb24gdGFnIGxlbiBtaXNzaW5nKQoreDUwOXBhcnNlX2NybDoiMzAwMzMwMDEwMiI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1ZFUlNJT04gKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCB2ZXJzaW9uIGNvcnJlY3QsIGFsZyBtaXNzaW5nKQoreDUwOXBhcnNlX2NybDoiMzAwNTMwMDMwMjAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBhbGcgY29ycmVjdCwgaW5jb3JyZWN0IHZlcnNpb24pCit4NTA5cGFyc2VfY3JsOiIzMDBiMzAwOTAyMDEwMjMwMDQwNjAwMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1ZFUlNJT04KKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIGNvcnJlY3QgdmVyc2lvbiwgc2lnX29pZDEgdW5rbm93bikKK3g1MDlwYXJzZV9jcmw6IjMwMGIzMDA5MDIwMTAwMzAwNDA2MDAwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRworCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2lnX29pZDEgaWQgdW5rbm93bikKK3g1MDlwYXJzZV9jcmw6IjMwMTQzMDEyMDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGYwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X1VOS05PV05fU0lHX0FMRworCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2lnX29pZDEgY29ycmVjdCwgaXNzdWVyIG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzAxNDMwMTIwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBpc3N1ZXIgc2V0IG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzAxNjMwMTQwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIGNvcnJlY3QgaXNzdWVyLCB0aGlzVXBkYXRlIG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzAyNTMwMjMwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIGNvcnJlY3QgdGhpc1VwZGF0ZSwgbmV4dFVwZGF0ZSBtaXNzaW5nLCBlbnRyaWVzIGxlbmd0aCBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwMzQzMDMyMDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMCI6IiI6TUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgZW50cmllcyBwcmVzZW50LCBpbnZhbGlkIHNpZ19hbGcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA0YTMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBlbnRyaWVzIHByZXNlbnQsIGRhdGUgaW4gZW50cnkgaW52YWxpZCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3JsOiIzMDRhMzA0NzAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAxNDMwMTI4MjAyYWJjZDE5MGMzMDM4MzEzMjMzMzEzMjMzMzUzOTM1MzkwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBzaWdfYWxnIHByZXNlbnQsIHNpZ19hbGcgZG9lcyBub3QgbWF0Y2gpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA1ODMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGQwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X1NJR19NSVNNQVRDSAorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2lnIHByZXNlbnQsIGxlbiBtaXNtYXRjaCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3JsOiIzMDVkMzA0NzAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAxNDMwMTI4MjAyYWJjZDE3MGMzMDM4MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAwMzAyMDAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHNpZyBwcmVzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwNWMzMDQ3MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDE0MzAxMjgyMDJhYmNkMTcwYzMwMzgzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDAzMDIwMDAxIjoiQ1JMIHZlcnNpb24gICBcOiAxXG5pc3N1ZXIgbmFtZSAgIFw6IENOPUFCQ0RcbnRoaXMgdXBkYXRlICAgXDogMjAwOS0wMS0wMSAwMFw6MDBcOjAwXG5uZXh0IHVwZGF0ZSAgIFw6IDAwMDAtMDAtMDAgMDBcOjAwXDowMFxuUmV2b2tlZCBjZXJ0aWZpY2F0ZXNcOlxuc2VyaWFsIG51bWJlclw6IEFCXDpDRCByZXZvY2F0aW9uIGRhdGVcOiAyMDA4LTEyLTMxIDIzXDo1OVw6NTlcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTIyNFxuIjowCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBubyBlbnRyaWVzKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwNDYzMDMxMDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAwMzAyMDAwMSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDTj1BQkNEXG50aGlzIHVwZGF0ZSAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxubmV4dCB1cGRhdGUgICBcOiAwMDAwLTAwLTAwIDAwXDowMFw6MDBcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTIyNFxuIjowCisKK1g1MDkgQ1JUIHBhcnNlIHBhdGggIzIgKG9uZSBjZXJ0KQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DCittYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGg6ImRhdGFfZmlsZXMvZGlyMSI6MDoxCisKK1g1MDkgQ1JUIHBhcnNlIHBhdGggIzMgKHR3byBjZXJ0cykKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoOiJkYXRhX2ZpbGVzL2RpcjIiOjA6MgorCitYNTA5IENSVCBwYXJzZSBwYXRoICM0ICh0d28gY2VydHMsIG9uZSBub24tY2VydCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMzg0UjFfRU5BQkxFRAorbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoOiJkYXRhX2ZpbGVzL2RpcjMiOjE6MgorCitYNTA5IENSVCB2ZXJpZnkgY2hhaW4gIzEgKHplcm8gcGF0aGxlbiBpbnRlcm1lZGlhdGUpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0MTQuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0MTMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0MTIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQxMS5jcnQiOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVECisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjMiAoemVybyBwYXRobGVuIHJvb3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0MjMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0MjIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQyMS5jcnQiOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVECisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjMyAobm9uemVybyBwYXRobGVuIHJvb3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0MzQuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0MzMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0MzIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQzMS5jcnQiOk1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVECisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjNCAobm9uemVybyBwYXRobGVuIGludGVybWVkaWF0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DCittYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9jaGFpbjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ0NS5jcnQgZGF0YV9maWxlcy9kaXI0L2NlcnQ0NC5jcnQgZGF0YV9maWxlcy9kaXI0L2NlcnQ0My5jcnQgZGF0YV9maWxlcy9kaXI0L2NlcnQ0Mi5jcnQiOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDQxLmNydCI6TUJFRFRMU19YNTA5X0JBRENFUlRfTk9UX1RSVVNURUQKKworWDUwOSBDUlQgdmVyaWZ5IGNoYWluICM1IChub256ZXJvIG1heHBhdGhsZW4gaW50ZXJtZWRpYXRlKQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0MKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDU0LmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDUzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDUyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NTEuY3J0IjowCisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjNiAobm9uemVybyBtYXhwYXRobGVuIHJvb3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NjMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NjIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ2MS5jcnQiOjAKKworWDUwOSBDUlQgdmVyaWZ5IGNoYWluICM3IChtYXhwYXRobGVuIHJvb3QsIHNlbGYgc2lnbmVkIGluIHBhdGgpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NzQuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NzMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NzIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ3MS5jcnQiOjAKKworWDUwOSBDUlQgdmVyaWZ5IGNoYWluICM4IChzZWxmIHNpZ25lZCBtYXhwYXRobGVuIHJvb3QpCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19SU0FfQworbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW46ImRhdGFfZmlsZXMvZGlyNC9jZXJ0NjEuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NjMuY3J0IGRhdGFfZmlsZXMvZGlyNC9jZXJ0NjIuY3J0IjoiZGF0YV9maWxlcy9kaXI0L2NlcnQ2MS5jcnQiOjAKKworWDUwOSBDUlQgdmVyaWZ5IGNoYWluICM5ICh6ZXJvIHBhdGhsZW4gZmlyc3QgaW50ZXJtZWRpYXRlLCB2YWxpZCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDgzLmNydCBkYXRhX2ZpbGVzL2RpcjQvY2VydDgyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0ODEuY3J0IjowCisKK1g1MDkgQ1JUIHZlcmlmeSBjaGFpbiAjMTAgKHplcm8gcGF0aGxlbiByb290LCB2YWxpZCkKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X2NoYWluOiJkYXRhX2ZpbGVzL2RpcjQvY2VydDkyLmNydCI6ImRhdGFfZmlsZXMvZGlyNC9jZXJ0OTEuY3J0IjowCisKK1g1MDkgT0lEIGRlc2NyaXB0aW9uICMxCit4NTA5X29pZF9kZXNjOiIyQjA2MDEwNTA1MDcwMzAxIjoiVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24iCisKK1g1MDkgT0lEIGRlc2NyaXB0aW9uICMyCit4NTA5X29pZF9kZXNjOiIyQjA2MDEwNTA1MDcwMzBmIjoibm90Zm91bmQiCisKK1g1MDkgT0lEIGRlc2NyaXB0aW9uICMzCit4NTA5X29pZF9kZXNjOiIyQjA2MDEwNTA1MDcwMzAxMDAiOiJub3Rmb3VuZCIKKworWDUwOSBPSUQgbnVtc3RyaW5nICMxICh3aWRlIGJ1ZmZlcikKK3g1MDlfb2lkX251bXN0cjoiMkIwNjAxMDUwNTA3MDMwMSI6IjEuMy42LjEuNS41LjcuMy4xIjoyMDoxNworCitYNTA5IE9JRCBudW1zdHJpbmcgIzIgKGJ1ZmZlciBqdXN0IGZpdHMpCit4NTA5X29pZF9udW1zdHI6IjJCMDYwMTA1MDUwNzAzMDEiOiIxLjMuNi4xLjUuNS43LjMuMSI6MTg6MTcKKworWDUwOSBPSUQgbnVtc3RyaW5nICMzIChidWZmZXIgdG9vIHNtYWxsKQoreDUwOV9vaWRfbnVtc3RyOiIyQjA2MDEwNTA1MDcwMzAxIjoiMS4zLjYuMS41LjUuNy4zLjEiOjE3Ok1CRURUTFNfRVJSX09JRF9CVUZfVE9PX1NNQUxMCisKK1g1MDkgT0lEIG51bXN0cmluZyAjNCAobGFyZ2VyIG51bWJlcikKK3g1MDlfb2lkX251bXN0cjoiMkE4NjQ4ODZGNzBEIjoiMS4yLjg0MC4xMTM1NDkiOjE1OjE0CisKK1g1MDkgT0lEIG51bXN0cmluZyAjNSAoYXJpdGhtZXRpYyBvdmVyZmxvdykKK3g1MDlfb2lkX251bXN0cjoiMkE4NjQ4RjlGOEY3RjZGNUY0RjNGMkYxRjAwMSI6IiI6MTAwOk1CRURUTFNfRVJSX09JRF9CVUZfVE9PX1NNQUxMCisKK1g1MDkgY3J0IGtleVVzYWdlICMxIChubyBleHRlbnNpb24sIGV4cGVjdGVkIEtVKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NoZWNrX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXIxLmNydCI6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFfE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOjAKKworWDUwOSBjcnQga2V5VXNhZ2UgIzIgKG5vIGV4dGVuc2lvbiwgc3VycHJpc2luZyBLVSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiOk1CRURUTFNfWDUwOV9LVV9LRVlfQ0VSVF9TSUdOOjAKKworWDUwOSBjcnQga2V5VXNhZ2UgIzMgKGV4dGVuc2lvbiBwcmVzZW50LCBubyBLVSkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0IjowOjAKKworWDUwOSBjcnQga2V5VXNhZ2UgIzQgKGV4dGVuc2lvbiBwcmVzZW50LCBzaW5nbGUgS1UgcHJlc2VudCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0IjpNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkU6MAorCitYNTA5IGNydCBrZXlVc2FnZSAjNSAoZXh0ZW5zaW9uIHByZXNlbnQsIHNpbmdsZSBLVSBhYnNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6TUJFRFRMU19YNTA5X0tVX0tFWV9DRVJUX1NJR046TUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQQorCitYNTA5IGNydCBrZXlVc2FnZSAjNiAoZXh0ZW5zaW9uIHByZXNlbnQsIGNvbWJpbmVkIEtVIHByZXNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFfE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOjAKKworWDUwOSBjcnQga2V5VXNhZ2UgIzcgKGV4dGVuc2lvbiBwcmVzZW50LCBjb21iaW5lZCBLVSBib3RoIGFic2VudCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0IjpNQkVEVExTX1g1MDlfS1VfS0VZX0NFUlRfU0lHTnxNQkVEVExTX1g1MDlfS1VfQ1JMX1NJR046TUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQQorCitYNTA5IGNydCBrZXlVc2FnZSAjOCAoZXh0ZW5zaW9uIHByZXNlbnQsIGNvbWJpbmVkIEtVIG9uZSBhYnNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6TUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlR8TUJFRFRMU19YNTA5X0tVX0tFWV9BR1JFRU1FTlQ6TUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQQorCitYNTA5IGNydCBrZXlVc2FnZSAjOSAoZXh0ZW5zaW9uIHByZXNlbnQsIGRlY09ubHkgYWxsb3dlZCBhYnNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfY2hlY2tfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5X3VzYWdlLmNydCI6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFfE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UfE1CRURUTFNfWDUwOV9LVV9ERUNJUEhFUl9PTkxZOjAKKworWDUwOSBjcnQga2V5VXNhZ2UgIzEwIChleHRlbnNpb24gcHJlc2VudCwgZGVjT25seSBub24tYWxsb3dlZCBwcmVzZW50KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X2NoZWNrX2tleV91c2FnZToiZGF0YV9maWxlcy9rZXlVc2FnZS5kZWNpcGhlck9ubHkuY3J0IjpNQkVEVExTX1g1MDlfS1VfRElHSVRBTF9TSUdOQVRVUkV8TUJFRFRMU19YNTA5X0tVX0tFWV9FTkNJUEhFUk1FTlQ6TUJFRFRMU19FUlJfWDUwOV9CQURfSU5QVVRfREFUQQorCitYNTA5IGNydCBrZXlVc2FnZSAjMTEgKGV4dGVuc2lvbiBwcmVzZW50LCBkZWNPbmx5IGFsbG93ZWQgcHJlc2VudCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTFfQworeDUwOV9jaGVja19rZXlfdXNhZ2U6ImRhdGFfZmlsZXMva2V5VXNhZ2UuZGVjaXBoZXJPbmx5LmNydCI6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFfE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UfE1CRURUTFNfWDUwOV9LVV9ERUNJUEhFUl9PTkxZOjAKKworWDUwOSBjcnQgZXh0ZW5kZWRLZXlVc2FnZSAjMSAobm8gZXh0ZW5zaW9uLCBzZXJ2ZXJBdXRoKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuY3J0IjoiMkIwNjAxMDUwNTA3MDMwMSI6MAorCitYNTA5IGNydCBleHRlbmRlZEtleVVzYWdlICMyIChzaW5nbGUgdmFsdWUsIHByZXNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2LmNydCI6IjJCMDYwMTA1MDUwNzAzMDEiOjAKKworWDUwOSBjcnQgZXh0ZW5kZWRLZXlVc2FnZSAjMyAoc2luZ2xlIHZhbHVlLCBhYnNlbnQpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyNS5la3UtY2xpLmNydCI6IjJCMDYwMTA1MDUwNzAzMDEiOk1CRURUTFNfRVJSX1g1MDlfQkFEX0lOUFVUX0RBVEEKKworWDUwOSBjcnQgZXh0ZW5kZWRLZXlVc2FnZSAjNCAodHdvIHZhbHVlcywgZmlyc3QpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQiOiIyQjA2MDEwNTA1MDcwMzAxIjowCisKK1g1MDkgY3J0IGV4dGVuZGVkS2V5VXNhZ2UgIzUgKHR3byB2YWx1ZXMsIHNlY29uZCkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZToiZGF0YV9maWxlcy9zZXJ2ZXI1LmVrdS1zcnZfY2xpLmNydCI6IjJCMDYwMTA1MDUwNzAzMDIiOjAKKworWDUwOSBjcnQgZXh0ZW5kZWRLZXlVc2FnZSAjNiAodHdvIHZhbHVlcywgb3RoZXIpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOV9jaGVja19leHRlbmRlZF9rZXlfdXNhZ2U6ImRhdGFfZmlsZXMvc2VydmVyNS5la3Utc3J2X2NsaS5jcnQiOiIyQjA2MDEwNTA1MDcwMzAzIjpNQkVEVExTX0VSUl9YNTA5X0JBRF9JTlBVVF9EQVRBCisKK1g1MDkgY3J0IGV4dGVuZGVkS2V5VXNhZ2UgIzcgKGFueSwgcmFuZG9tKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlOiJkYXRhX2ZpbGVzL3NlcnZlcjUuZWt1LWNzX2FueS5jcnQiOiIyQjA2MDEwNTA1MDcwM0ZGIjowCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKGdvb2QsIGFsbCBkZWZhdWx0cykKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IiI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xICh3cm9uZyBpbml0aWFsIHRhZykKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IiI6TUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAodW5rbm93biB0YWcgaW4gdG9wLWxldmVsIHNlcXVlbmNlKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTQwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKGdvb2QsIEhhc2hBbGcgU0hBMjU2KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEwMEQzMDBCMDYwOTYwODY0ODAxNjUwMzA0MDIwMSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMToyMDowCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKGdvb2QsIGV4cGxpY2l0IEhhc2hBbGcgPSBkZWZhdWx0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMDA5MzAwNzA2MDUyQjBFMDMwMjFBIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMToyMDowCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKEhhc2hBbGcgd3JvbmcgbGVuICMxKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTAwQTMwMDcwNjA1MkIwRTAzMDIxQSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoSGFzaEFsZyB3cm9uZyBsZW4gIzIpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEExX0MKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEwMEEzMDA3MDYwNTJCMEUwMzAyMUEwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKEhhc2hBbGcgd2l0aCBwYXJhbWV0ZXJzKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTAwRjMwMEQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMzAwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMToyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9JTlZBTElEX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoSGFzaEFsZyB1bmtub3duIE9JRCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEwMEQzMDBCMDYwOTYwODY0ODAxNjUwMzA0MDJGRiI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMjU2Ok1CRURUTFNfTURfU0hBMToyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChnb29kLCBNR0FsZyA9IE1HRjEtU0hBMjU2KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUEzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoZ29vZCwgZXhwbGljaXQgTUdBbGcgPSBkZWZhdWx0KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMV9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTE2MzAxNDA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDA3MDYwNTJCMEUwMzAyMUEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcgd3JvbmcgbGVuICMxKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQjMwMTgwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwQjA2MDk2MDg2NDgwMTY1MDMwNDAyMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcgd3JvbmcgbGVuICMyKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUIzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnIEFsZ0lkIHdyb25nIGxlbiAjMSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUEzMDE5MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnIE9JRCAhPSBNR0YxKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQTMwMTgwNjA5MkE4NjQ4ODZGNzBEMDEwMTA5MzAwQjA2MDk2MDg2NDgwMTY1MDMwNDAyMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9GRUFUVVJFX1VOQVZBSUxBQkxFICsgTUJFRFRMU19FUlJfT0lEX05PVF9GT1VORAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChNR0FsZy5wYXJhbXMgd3JvbmcgdGFnKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQTMwMTgwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzEwQjA2MDk2MDg2NDgwMTY1MDMwNDAyMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zIHdyb25nIGxlbiAjMWEpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTBGMzAwRDA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcyB3cm9uZyBsZW4gIzFiKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQjMwMTkwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwQzA2MDk2MDg2NDgwMTY1MDMwNDAyMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zLmFsZyBub3QgYW4gT0lEKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTExQTMwMTgwNjA5MkE4NjQ4ODZGNzBEMDEwMTA4MzAwQjA3MDk2MDg2NDgwMTY1MDMwNDAyMDEiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zLmFsZyB1bmtub3duIE9JRCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkExMUEzMDE4MDYwOTJBODY0ODg2RjcwRDAxMDEwODMwMEIwNjA5NjA4NjQ4MDE2NTAzMDQwMkZGIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMjU2OjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9PSURfTk9UX0ZPVU5ECisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKE1HQWxnLnBhcmFtcy5wYXJhbXMgTlVMTCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFDMzAxQTA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBEMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChNR0FsZy5wYXJhbXMucGFyYW1zIHdyb25nIHRhZykKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFDMzAxQTA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBEMDYwOTYwODY0ODAxNjUwMzA0MDIwMTMwMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zIHdyb25nIGxlbiAjMWMpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFEMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBFMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEEyNTY6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoTUdBbGcucGFyYW1zIHdyb25nIGxlbiAjMikKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMTFEMzAxQjA2MDkyQTg2NDg4NkY3MEQwMTAxMDgzMDBFMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTI1NjoyMDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoZ29vZCwgc2FsdExlbiA9IDk0KQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTIwMzAyMDE1RSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6OTQ6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChnb29kLCBleHBsaWNpdCBzYWx0TGVuID0gZGVmYXVsdCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEyMDMwMjAxMTQiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOjAKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAoc2FsdExlbiB3cm9uZyBsZW4gIzEpCit4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zOiJBMjA0MDIwMTVFIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMTo5NDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChzYWx0TGVuIHdyb25nIGxlbiAjMikKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEyMDQwMjAxNUUwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6OTQ6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKHNhbHRMZW4gbm90IGFuIGludCkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEyMDIzMDAwIjpNQkVEVExTX0FTTjFfQ09OU1RSVUNURUQgfCBNQkVEVExTX0FTTjFfU0VRVUVOQ0U6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfTURfU0hBMTo5NDpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xIChnb29kLCBleHBsaWNpdCB0cmFpbGVyRmllbGQgPSBkZWZhdWx0KQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTMwMzAyMDEwMSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6MAorCitYNTA5IFJTQVNTQS1QU1MgcGFyYW1ldGVycyBBU04xICh0cmFpbGVyRmllbGQgd3JvbmcgbGVuICMxKQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTMwNDAyMDEwMSI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBSU0FTU0EtUFNTIHBhcmFtZXRlcnMgQVNOMSAodHJhaWxlckZpZWxkIHdyb25nIGxlbiAjMikKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEzMDQwMjAxMDEwMCI6TUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFOk1CRURUTFNfTURfU0hBMTpNQkVEVExTX01EX1NIQTE6MjA6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0FMRyArIE1CRURUTFNfRVJSX0FTTjFfTEVOR1RIX01JU01BVENICisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKHRyYWlsZXJGaWVsZCBub3QgYW4gaW50KQoreDUwOV9wYXJzZV9yc2Fzc2FfcHNzX3BhcmFtczoiQTMwMjMwMDAiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgUlNBU1NBLVBTUyBwYXJhbWV0ZXJzIEFTTjEgKHRyYWlsZXJGaWVsZCBub3QgMSkKK3g1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXM6IkEzMDMwMjAxMDIiOk1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCB8IE1CRURUTFNfQVNOMV9TRVFVRU5DRTpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19NRF9TSEExOjIwOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9BTEcKKworWDUwOSBDU1IgQVNOLjEgKE9LKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgyMDExODMwODFCRjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGQTAyOTMwMjcwNjA5MkE4NjQ4ODZGNzBEMDEwOTBFMzExQTMwMTgzMDA5MDYwMzU1MUQxMzA0MDIzMDAwMzAwQjA2MDM1NTFEMEYwNDA0MDMwMjA1RTAzMDA5MDYwNzJBODY0OENFM0QwNDAxMDM0OTAwMzA0NjAyMjEwMEI0OUZEOEM4Rjc3QUJGQTg3MTkwOERGQkU2ODRBMDhBNzkzRDBGNDkwQTQzRDg2RkNGMjA4NkU0RjI0QkIwQzIwMjIxMDBGODI5RDVDQ0QzNzQyMzY5Mjk5RTYyOTQzOTQ3MTdDNEI3MjNBMEY2OEI0NEU4MzFCNkU2QzNCQ0FCRjk3MjQzIjoiQ1NSIHZlcnNpb24gICBcOiAxXG5zdWJqZWN0IG5hbWUgIFw6IEM9TkwsIE89UG9sYXJTU0wsIENOPWxvY2FsaG9zdFxuc2lnbmVkIHVzaW5nICBcOiBFQ0RTQSB3aXRoIFNIQTFcbkVDIGtleSBzaXplICAgXDogMjU2IGJpdHNcbiI6MAorCitYNTA5IENTUiBBU04uMSAoYmFkIGZpcnN0IHRhZykKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBzZXF1ZW5jZTogb3ZlcmxvbmcpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDAxIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUCisKK1g1MDkgQ1NSIEFTTi4xICh0b3RhbCBsZW5ndGggbWlzdG1hdGNoKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwMTAwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX0xFTkdUSF9NSVNNQVRDSAorCitYNTA5IENTUiBBU04uMSAoYmFkIENSSTogbm90IGEgc2VxdWVuY2UpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDAyMzEwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBDUkk6IG92ZXJsb25nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwMjMwMDEiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgQ1JJLlZlcnNpb246IG92ZXJsb25nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwNTMwMDIwMjAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9WRVJTSU9OICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIENSSS5WZXJzaW9uOiBub3QgdjEpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDA1MzAwMzAyMDEwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX1ZFUlNJT04KKworWDUwOSBDU1IgQVNOLjEgKGJhZCBDUkkuTmFtZTogbm90IGEgc2VxdWVuY2UpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDA3MzAwNTAyMDEwMDMxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgQ1JJLk5hbWU6IG92ZXJsb25nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwODMwMDUwMjAxMDAzMDAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgQ1JJLk5hbWUgcGF5bG9hZDogbm90IGEgc2V0KQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAwOTMwMDcwMjAxMDAzMDAyMzAwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgQ1JJLk5hbWUgcGF5bG9hZDogb3ZlcmxvbmcpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDBBMzAwODAyMDEwMDMwMDIzMTAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9OQU1FICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIFN1YmplY3RQdWJsaWNLZXlJbmZvOiBtaXNzaW5nKQorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzAxNDMwMTIwMjAxMDAzMDBEMzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBTdWJqZWN0UHVibGljS2V5SW5mbzogbm90IGEgc2VxdWVuY2UpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDE2MzAxNDAyMDEwMDMwMEQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMDAiOiIiOk1CRURUTFNfRVJSX1BLX0tFWV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBTdWJqZWN0UHVibGljS2V5SW5mbzogb3ZlcmxvbmcpCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDE3MzAxNDAyMDEwMDMwMEQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMwMDEwMCI6IiI6TUJFRFRMU19FUlJfUEtfS0VZX0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIGF0dHJpYnV0ZXM6IG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODE5NzMwODE5NDAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIGF0dHJpYnV0ZXM6IGJhZCB0YWcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODE5OTMwODE5NjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGMDUwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0ZPUk1BVCArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBhdHRyaWJ1dGVzOiBvdmVybG9uZykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MTlBMzA4MTk2MDIwMTAwMzAzNDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDMzExMTMwMEYwNjAzNTUwNDBBMTMwODUwNkY2QzYxNzI1MzUzNEMzMTEyMzAxMDA2MDM1NTA0MDMxMzA5NkM2RjYzNjE2QzY4NkY3Mzc0MzA1OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkZBMDAxMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9GT1JNQVQgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgc2lnQWxnOiBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxQzIzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIHNpZ0FsZzogbm90IGEgc2VxdWVuY2UpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODFDNDMwODFCRjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGQTAyOTMwMjcwNjA5MkE4NjQ4ODZGNzBEMDEwOTBFMzExQTMwMTgzMDA5MDYwMzU1MUQxMzA0MDIzMDAwMzAwQjA2MDM1NTFEMEYwNDA0MDMwMjA1RTAzMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9VTkVYUEVDVEVEX1RBRworCitYNTA5IENTUiBBU04uMSAoYmFkIHNpZ0FsZzogb3ZlcmxvbmcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODFDNDMwODFCRjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGQTAyOTMwMjcwNjA5MkE4NjQ4ODZGNzBEMDEwOTBFMzExQTMwMTgzMDA5MDYwMzU1MUQxMzA0MDIzMDAwMzAwQjA2MDM1NTFEMEYwNDA0MDMwMjA1RTAzMDAxIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENTUiBBU04uMSAoYmFkIHNpZ0FsZzogdW5rbm93bikKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAorbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MUNEMzA4MUJGMDIwMTAwMzAzNDMxMEIzMDA5MDYwMzU1MDQwNjEzMDI0RTRDMzExMTMwMEYwNjAzNTUwNDBBMTMwODUwNkY2QzYxNzI1MzUzNEMzMTEyMzAxMDA2MDM1NTA0MDMxMzA5NkM2RjYzNjE2QzY4NkY3Mzc0MzA1OTMwMTMwNjA3MkE4NjQ4Q0UzRDAyMDEwNjA4MkE4NjQ4Q0UzRDAzMDEwNzAzNDIwMDA0MzdDQzU2RDk3NjA5MUU1QTcyM0VDNzU5MkRGRjIwNkVFRTdDRjkwNjkxNzREMEFEMTRCNUY3NjgyMjU5NjI5MjRFRTUwMEQ4MjMxMUZGRUEyRkQyMzQ1RDVEMTZCRDhBODhDMjZCNzcwRDU1Q0Q4QTJBMEVGQTAxQzhCNEVERkZBMDI5MzAyNzA2MDkyQTg2NDg4NkY3MEQwMTA5MEUzMTFBMzAxODMwMDkwNjAzNTUxRDEzMDQwMjMwMDAzMDBCMDYwMzU1MUQwRjA0MDQwMzAyMDVFMDMwMDkwNjA3MkE4NjQ4Q0UzRDA0RkYiOiIiOk1CRURUTFNfRVJSX1g1MDlfVU5LTk9XTl9TSUdfQUxHCisKK1g1MDkgQ1NSIEFTTi4xIChiYWQgc2lnOiBtaXNzaW5nKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxQ0QzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzAwOTA2MDcyQTg2NDhDRTNEMDQwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBzaWc6IG5vdCBhIGJpdCBzdHJpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEExX0MKK21iZWR0bHNfeDUwOV9jc3JfcGFyc2U6IjMwODFDRjMwODFCRjAyMDEwMDMwMzQzMTBCMzAwOTA2MDM1NTA0MDYxMzAyNEU0QzMxMTEzMDBGMDYwMzU1MDQwQTEzMDg1MDZGNkM2MTcyNTM1MzRDMzExMjMwMTAwNjAzNTUwNDAzMTMwOTZDNkY2MzYxNkM2ODZGNzM3NDMwNTkzMDEzMDYwNzJBODY0OENFM0QwMjAxMDYwODJBODY0OENFM0QwMzAxMDcwMzQyMDAwNDM3Q0M1NkQ5NzYwOTFFNUE3MjNFQzc1OTJERkYyMDZFRUU3Q0Y5MDY5MTc0RDBBRDE0QjVGNzY4MjI1OTYyOTI0RUU1MDBEODIzMTFGRkVBMkZEMjM0NUQ1RDE2QkQ4QTg4QzI2Qjc3MEQ1NUNEOEEyQTBFRkEwMUM4QjRFREZGQTAyOTMwMjcwNjA5MkE4NjQ4ODZGNzBEMDEwOTBFMzExQTMwMTgzMDA5MDYwMzU1MUQxMzA0MDIzMDAwMzAwQjA2MDM1NTFEMEYwNDA0MDMwMjA1RTAzMDA5MDYwNzJBODY0OENFM0QwNDAxMDQwMCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX1NJR05BVFVSRSArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDU1IgQVNOLjEgKGJhZCBzaWc6IG92ZXJsb25nKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMV9DCittYmVkdGxzX3g1MDlfY3NyX3BhcnNlOiIzMDgxQ0YzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzAwOTA2MDcyQTg2NDhDRTNEMDQwMTAzMDEiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TSUdOQVRVUkUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1NSIEFTTi4xIChleHRyYSBkYXRhIGFmdGVyIHNpZ25hdHVyZSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTFfQworbWJlZHRsc194NTA5X2Nzcl9wYXJzZToiMzA4MjAxMTkzMDgxQkYwMjAxMDAzMDM0MzEwQjMwMDkwNjAzNTUwNDA2MTMwMjRFNEMzMTExMzAwRjA2MDM1NTA0MEExMzA4NTA2RjZDNjE3MjUzNTM0QzMxMTIzMDEwMDYwMzU1MDQwMzEzMDk2QzZGNjM2MTZDNjg2RjczNzQzMDU5MzAxMzA2MDcyQTg2NDhDRTNEMDIwMTA2MDgyQTg2NDhDRTNEMDMwMTA3MDM0MjAwMDQzN0NDNTZEOTc2MDkxRTVBNzIzRUM3NTkyREZGMjA2RUVFN0NGOTA2OTE3NEQwQUQxNEI1Rjc2ODIyNTk2MjkyNEVFNTAwRDgyMzExRkZFQTJGRDIzNDVENUQxNkJEOEE4OEMyNkI3NzBENTVDRDhBMkEwRUZBMDFDOEI0RURGRkEwMjkzMDI3MDYwOTJBODY0ODg2RjcwRDAxMDkwRTMxMUEzMDE4MzAwOTA2MDM1NTFEMTMwNDAyMzAwMDMwMEIwNjAzNTUxRDBGMDQwNDAzMDIwNUUwMzAwOTA2MDcyQTg2NDhDRTNEMDQwMTAzNDkwMDMwNDYwMjIxMDBCNDlGRDhDOEY3N0FCRkE4NzE5MDhERkJFNjg0QTA4QTc5M0QwRjQ5MEE0M0Q4NkZDRjIwODZFNEYyNEJCMEMyMDIyMTAwRjgyOUQ1Q0NEMzc0MjM2OTI5OUU2Mjk0Mzk0NzE3QzRCNzIzQTBGNjhCNDRFODMxQjZFNkMzQkNBQkY5NzI0MzAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKKworWDUwOSBGaWxlIHBhcnNlIChubyBpc3N1ZXMpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NydF9maWxlOiJkYXRhX2ZpbGVzL3NlcnZlcjdfaW50LWNhLmNydCI6MAorCitYNTA5IEZpbGUgcGFyc2UgKGV4dHJhIHNwYWNlIGluIG9uZSBjZXJ0aWZpY2F0ZSkKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3J0X2ZpbGU6ImRhdGFfZmlsZXMvc2VydmVyN19wZW1fc3BhY2UuY3J0IjoxCisKK1g1MDkgRmlsZSBwYXJzZSAoYWxsIGNlcnRpZmljYXRlcyBmYWlsKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DCit4NTA5cGFyc2VfY3J0X2ZpbGU6ImRhdGFfZmlsZXMvc2VydmVyN19hbGxfc3BhY2UuY3J0IjpNQkVEVExTX0VSUl9QRU1fSU5WQUxJRF9EQVRBICsgTUJFRFRMU19FUlJfQkFTRTY0X0lOVkFMSURfQ0hBUkFDVEVSCisKK1g1MDkgRmlsZSBwYXJzZSAodHJhaWxpbmcgc3BhY2VzLCBPSykKK2RlcGVuZHNfb246TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3J0X2ZpbGU6ImRhdGFfZmlsZXMvc2VydmVyN190cmFpbGluZ19zcGFjZS5jcnQiOjAKKworWDUwOSBHZXQgdGltZSAoVVRDIG5vIGlzc3VlcykKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9VVENfVElNRToiNTAwMTAxMDAwMDAwWiI6MDoxOTUwOjE6MTowOjA6MAorCitYNTA5IEdldCB0aW1lIChHZW5lcmFsaXplZCBUaW1lIG5vIGlzc3VlcykKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9HRU5FUkFMSVpFRF9USU1FOiI5OTk5MTIzMTIzNTk1OVoiOjA6OTk5OToxMjozMToyMzo1OTo1OQorCitYNTA5IEdldCB0aW1lIChVVEMgeWVhciB3aXRob3V0IGxlYXAgZGF5KQorZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MKK3g1MDlfZ2V0X3RpbWU6TUJFRFRMU19BU04xX1VUQ19USU1FOiI0OTAyMjkxMjEyMTJaIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURTowOjA6MDowOjA6MAorCitYNTA5IEdldCB0aW1lIChVVEMgeWVhciB3aXRoIGxlYXAgZGF5KQorZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MKK3g1MDlfZ2V0X3RpbWU6TUJFRFRMU19BU04xX1VUQ19USU1FOiIwMDAyMjkxMjEyMTJaIjowOjIwMDA6MjoyOToxMjoxMjoxMgorCitYNTA5IEdldCB0aW1lIChVVEMgaW52YWxpZCBkYXkgb2YgbW9udGggIzEpCitkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQworeDUwOV9nZXRfdGltZTpNQkVEVExTX0FTTjFfVVRDX1RJTUU6IjAwMDEzMjEyMTIxMloiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFOjA6MDowOjA6MDowCisKK1g1MDkgR2V0IHRpbWUgKFVUQyBpbnZhbGlkIGRheSBvZiBtb250aCAjMikKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9VVENfVElNRToiMDAxMTMxMTIxMjEyWiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEU6MDowOjA6MDowOjAKKworWDUwOSBHZXQgdGltZSAoVVRDIGludmFsaWQgaG91cikKK2RlcGVuZHNfb246TUJFRFRMU19YNTA5X1VTRV9DCit4NTA5X2dldF90aW1lOk1CRURUTFNfQVNOMV9VVENfVElNRToiMDAxMTMwMjQxMjEyWiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEU6MDowOjA6MDowOjAKKworWDUwOSBHZXQgdGltZSAoVVRDIGludmFsaWQgbWluKQorZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MKK3g1MDlfZ2V0X3RpbWU6TUJFRFRMU19BU04xX1VUQ19USU1FOiIwMDExMzAyMzYwMTJaIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURTowOjA6MDowOjA6MAorCitYNTA5IEdldCB0aW1lIChVVEMgaW52YWxpZCBzZWMpCitkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQworeDUwOV9nZXRfdGltZTpNQkVEVExTX0FTTjFfVVRDX1RJTUU6IjAwMTEzMDIzNTk2MFoiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9EQVRFOjA6MDowOjA6MDowCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmZ1bmN0aW9uIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTg1ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5mdW5jdGlvbgpAQCAtMCwwICsxLDY2MiBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy94NTA5LmgiCisjaW5jbHVkZSAibWJlZHRscy94NTA5X2NydC5oIgorI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcmwuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3NyLmgiCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmFzZTY0LmgiCisKK2NvbnN0IG1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZSBjb21wYXRfcHJvZmlsZSA9Cit7CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMSApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9SSVBFTUQxNjAgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBMjI0ICkgfAorICAgIE1CRURUTFNfWDUwOV9JRF9GTEFHKCBNQkVEVExTX01EX1NIQTI1NiApIHwKKyAgICBNQkVEVExTX1g1MDlfSURfRkxBRyggTUJFRFRMU19NRF9TSEEzODQgKSB8CisgICAgTUJFRFRMU19YNTA5X0lEX0ZMQUcoIE1CRURUTFNfTURfU0hBNTEyICksCisgICAgMHhGRkZGRkZGLCAvKiBBbnkgUEsgYWxnICAgICovCisgICAgMHhGRkZGRkZGLCAvKiBBbnkgY3VydmUgICAgICovCisgICAgMTAyNCwKK307CisKK2ludCB2ZXJpZnlfbm9uZSggdm9pZCAqZGF0YSwgbWJlZHRsc194NTA5X2NydCAqY3J0LCBpbnQgY2VydGlmaWNhdGVfZGVwdGgsIHVpbnQzMl90ICpmbGFncyApCit7CisgICAgKCh2b2lkKSBkYXRhKTsKKyAgICAoKHZvaWQpIGNydCk7CisgICAgKCh2b2lkKSBjZXJ0aWZpY2F0ZV9kZXB0aCk7CisgICAgKmZsYWdzIHw9IE1CRURUTFNfWDUwOV9CQURDRVJUX09USEVSOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB2ZXJpZnlfYWxsKCB2b2lkICpkYXRhLCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsIGludCBjZXJ0aWZpY2F0ZV9kZXB0aCwgdWludDMyX3QgKmZsYWdzICkKK3sKKyAgICAoKHZvaWQpIGRhdGEpOworICAgICgodm9pZCkgY3J0KTsKKyAgICAoKHZvaWQpIGNlcnRpZmljYXRlX2RlcHRoKTsKKyAgICAqZmxhZ3MgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHN0cnNlcCgpIG5vdCBhdmFpbGFibGUgb24gV2luZG93cyAqLworY2hhciAqbXlzdHJzZXAoY2hhciAqKnN0cmluZ3AsIGNvbnN0IGNoYXIgKmRlbGltKQoreworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgY2hhciAqcmV0ID0gKnN0cmluZ3A7CisKKyAgICBpZiggKnN0cmluZ3AgPT0gTlVMTCApCisgICAgICAgIHJldHVybiggTlVMTCApOworCisgICAgZm9yKCA7IDsgKCpzdHJpbmdwKSsrICkKKyAgICB7CisgICAgICAgIGlmKCAqKnN0cmluZ3AgPT0gJ1wwJyApCisgICAgICAgIHsKKyAgICAgICAgICAgICpzdHJpbmdwID0gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciggcCA9IGRlbGltOyAqcCAhPSAnXDAnOyBwKysgKQorICAgICAgICAgICAgaWYoICoqc3RyaW5ncCA9PSAqcCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKipzdHJpbmdwID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAoKnN0cmluZ3ApKys7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgIH0KKworZG9uZToKKyAgICByZXR1cm4oIHJldCApOworfQorCisjaWYgZGVmaW5lZChNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MpCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciBidWZbNTEyXTsKKyAgICBjaGFyICpwOworfSB2ZXJpZnlfcHJpbnRfY29udGV4dDsKKwordm9pZCB2ZXJpZnlfcHJpbnRfaW5pdCggdmVyaWZ5X3ByaW50X2NvbnRleHQgKmN0eCApCit7CisgICAgbWVtc2V0KCBjdHgsIDAsIHNpemVvZiggdmVyaWZ5X3ByaW50X2NvbnRleHQgKSApOworICAgIGN0eC0+cCA9IGN0eC0+YnVmOworfQorCitpbnQgdmVyaWZ5X3ByaW50KCB2b2lkICpkYXRhLCBtYmVkdGxzX3g1MDlfY3J0ICpjcnQsIGludCBjZXJ0aWZpY2F0ZV9kZXB0aCwgdWludDMyX3QgKmZsYWdzICkKK3sKKyAgICBpbnQgcmV0OworICAgIHZlcmlmeV9wcmludF9jb250ZXh0ICpjdHggPSAodmVyaWZ5X3ByaW50X2NvbnRleHQgKikgZGF0YTsKKyAgICBjaGFyICpwID0gY3R4LT5wOworICAgIHNpemVfdCBuID0gY3R4LT5idWYgKyBzaXplb2YoIGN0eC0+YnVmICkgLSBjdHgtPnA7CisgICAgKCh2b2lkKSBmbGFncyk7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiZGVwdGggJWQgLSBzZXJpYWwgIiwgY2VydGlmaWNhdGVfZGVwdGggKTsKKyAgICBNQkVEVExTX1g1MDlfU0FGRV9TTlBSSU5URjsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9zZXJpYWxfZ2V0cyggcCwgbiwgJmNydC0+c2VyaWFsICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3NucHJpbnRmKCBwLCBuLCAiIC0gc3ViamVjdCAiICk7CisgICAgTUJFRFRMU19YNTA5X1NBRkVfU05QUklOVEY7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfZG5fZ2V0cyggcCwgbiwgJmNydC0+c3ViamVjdCApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgcmV0ID0gbWJlZHRsc19zbnByaW50ZiggcCwgbiwgIlxuIiApOworICAgIE1CRURUTFNfWDUwOV9TQUZFX1NOUFJJTlRGOworCisgICAgY3R4LT5wID0gcDsKKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLworLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19CSUdOVU1fQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwordm9pZCB4NTA5X2NlcnRfaW5mbyggY2hhciAqY3J0X2ZpbGUsIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisgICAgY2hhciBidWZbMjAwMF07CisgICAgaW50IHJlczsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworICAgIG1lbXNldCggYnVmLCAwLCAyMDAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKyAgICByZXMgPSBtYmVkdGxzX3g1MDlfY3J0X2luZm8oIGJ1ZiwgMjAwMCwgIiIsICZjcnQgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTEgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzICE9IC0yICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NybF9pbmZvKCBjaGFyICpjcmxfZmlsZSwgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgbWJlZHRsc194NTA5X2NybCAgIGNybDsKKyAgICBjaGFyIGJ1ZlsyMDAwXTsKKyAgICBpbnQgcmVzOworCisgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCAmY3JsICk7CisgICAgbWVtc2V0KCBidWYsIDAsIDIwMDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoICZjcmwsIGNybF9maWxlICkgPT0gMCApOworICAgIHJlcyA9IG1iZWR0bHNfeDUwOV9jcmxfaW5mbyggYnVmLCAyMDAwLCAiIiwgJmNybCApOworCisgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMSApOworICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTIgKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIGJ1ZiwgcmVzdWx0X3N0ciApID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2ZyZWUoICZjcmwgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQyAqLwordm9pZCBtYmVkdGxzX3g1MDlfY3NyX2luZm8oIGNoYXIgKmNzcl9maWxlLCBjaGFyICpyZXN1bHRfc3RyICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3NyICAgY3NyOworICAgIGNoYXIgYnVmWzIwMDBdOworICAgIGludCByZXM7CisKKyAgICBtYmVkdGxzX3g1MDlfY3NyX2luaXQoICZjc3IgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgMjAwMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2VfZmlsZSggJmNzciwgY3NyX2ZpbGUgKSA9PSAwICk7CisgICAgcmVzID0gbWJlZHRsc194NTA5X2Nzcl9pbmZvKCBidWYsIDIwMDAsICIiLCAmY3NyICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzICE9IC0xICk7CisgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jc3JfZnJlZSggJmNzciApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwordm9pZCB4NTA5X3ZlcmlmeV9pbmZvKCBpbnQgZmxhZ3MsIGNoYXIgKnByZWZpeCwgY2hhciAqcmVzdWx0X3N0ciApCit7CisgICAgY2hhciBidWZbMjAwMF07CisgICAgaW50IHJlczsKKworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisKKyAgICByZXMgPSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeV9pbmZvKCBidWYsIHNpemVvZiggYnVmICksIHByZWZpeCwgZmxhZ3MgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgPj0gMCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggYnVmLCByZXN1bHRfc3RyICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DOk1CRURUTFNfWDUwOV9DUkxfUEFSU0VfQyAqLwordm9pZCB4NTA5X3ZlcmlmeSggY2hhciAqY3J0X2ZpbGUsIGNoYXIgKmNhX2ZpbGUsIGNoYXIgKmNybF9maWxlLAorICAgICAgICAgICAgICAgICAgY2hhciAqY25fbmFtZV9zdHIsIGludCByZXN1bHQsIGludCBmbGFnc19yZXN1bHQsCisgICAgICAgICAgICAgICAgICBjaGFyICp2ZXJpZnlfY2FsbGJhY2sgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisgICAgbWJlZHRsc194NTA5X2NydCAgIGNhOworICAgIG1iZWR0bHNfeDUwOV9jcmwgICAgY3JsOworICAgIHVpbnQzMl90ICAgICAgICAgZmxhZ3MgPSAwOworICAgIGludCAgICAgICAgIHJlczsKKyAgICBpbnQgKCpmX3ZyZnkpKHZvaWQgKiwgbWJlZHRsc194NTA5X2NydCAqLCBpbnQsIHVpbnQzMl90ICopID0gTlVMTDsKKyAgICBjaGFyICogICAgICBjbl9uYW1lID0gTlVMTDsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNhICk7CisgICAgbWJlZHRsc194NTA5X2NybF9pbml0KCAmY3JsICk7CisKKyAgICBpZiggc3RyY21wKCBjbl9uYW1lX3N0ciwgIk5VTEwiICkgIT0gMCApCisgICAgICAgIGNuX25hbWUgPSBjbl9uYW1lX3N0cjsKKworICAgIGlmKCBzdHJjbXAoIHZlcmlmeV9jYWxsYmFjaywgIk5VTEwiICkgPT0gMCApCisgICAgICAgIGZfdnJmeSA9IE5VTEw7CisgICAgZWxzZSBpZiggc3RyY21wKCB2ZXJpZnlfY2FsbGJhY2ssICJ2ZXJpZnlfbm9uZSIgKSA9PSAwICkKKyAgICAgICAgZl92cmZ5ID0gdmVyaWZ5X25vbmU7CisgICAgZWxzZSBpZiggc3RyY21wKCB2ZXJpZnlfY2FsbGJhY2ssICJ2ZXJpZnlfYWxsIiApID09IDAgKQorICAgICAgICBmX3ZyZnkgPSB2ZXJpZnlfYWxsOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoICJObyBrbm93biB2ZXJpZnkgY2FsbGJhY2sgc2VsZWN0ZWQiID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIGNydF9maWxlICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYSwgY2FfZmlsZSApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCAmY3JsLCBjcmxfZmlsZSApID09IDAgKTsKKworICAgIHJlcyA9IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5X3dpdGhfcHJvZmlsZSggJmNydCwgJmNhLCAmY3JsLCAmY29tcGF0X3Byb2ZpbGUsIGNuX25hbWUsICZmbGFncywgZl92cmZ5LCBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID09ICggcmVzdWx0ICkgKTsKKyAgICBURVNUX0FTU0VSVCggZmxhZ3MgPT0gKHVpbnQzMl90KSggZmxhZ3NfcmVzdWx0ICkgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjYSApOworICAgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSggJmNybCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DICovCit2b2lkIHg1MDlfdmVyaWZ5X2NhbGxiYWNrKCBjaGFyICpjcnRfZmlsZSwgY2hhciAqY2FfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBfcmV0LCBjaGFyICpleHBfdnJmeV9vdXQgKQoreworICAgIGludCByZXQ7CisgICAgbWJlZHRsc194NTA5X2NydCBjcnQ7CisgICAgbWJlZHRsc194NTA5X2NydCBjYTsKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgdmVyaWZ5X3ByaW50X2NvbnRleHQgdnJmeV9jdHg7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjYSApOworICAgIHZlcmlmeV9wcmludF9pbml0KCAmdnJmeV9jdHggKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIGNydF9maWxlICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjYSwgY2FfZmlsZSApID09IDAgKTsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCAmY3J0LCAmY2EsIE5VTEwsIE5VTEwsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5X3ByaW50LCAmdnJmeV9jdHggKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gZXhwX3JldCApOworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIHZyZnlfY3R4LmJ1ZiwgZXhwX3ZyZnlfb3V0ICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNhICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2RuX2dldHMoIGNoYXIgKmNydF9maWxlLCBjaGFyICplbnRpdHksIGNoYXIgKnJlc3VsdF9zdHIgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisgICAgY2hhciBidWZbMjAwMF07CisgICAgaW50IHJlcyA9IDA7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgMjAwMCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNydCwgY3J0X2ZpbGUgKSA9PSAwICk7CisgICAgaWYoIHN0cmNtcCggZW50aXR5LCAic3ViamVjdCIgKSA9PSAwICkKKyAgICAgICAgcmVzID0gIG1iZWR0bHNfeDUwOV9kbl9nZXRzKCBidWYsIDIwMDAsICZjcnQuc3ViamVjdCApOworICAgIGVsc2UgaWYoIHN0cmNtcCggZW50aXR5LCAiaXNzdWVyIiApID09IDAgKQorICAgICAgICByZXMgPSAgbWJlZHRsc194NTA5X2RuX2dldHMoIGJ1ZiwgMjAwMCwgJmNydC5pc3N1ZXIgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAiVW5rbm93biBlbnRpdHkiID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTEgKTsKKyAgICBURVNUX0FTU0VSVCggcmVzICE9IC0yICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCBidWYsIHJlc3VsdF9zdHIgKSA9PSAwICk7CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY3J0ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggY2hhciAqY3J0X2ZpbGUsIGNoYXIgKmVudGl0eSwgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc194NTA5X2NydCAgIGNydDsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNydCwgY3J0X2ZpbGUgKSA9PSAwICk7CisKKyAgICBpZiggc3RyY21wKCBlbnRpdHksICJ2YWxpZF9mcm9tIiApID09IDAgKQorICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X3RpbWVfaXNfcGFzdCggJmNydC52YWxpZF9mcm9tICkgPT0gcmVzdWx0ICk7CisgICAgZWxzZSBpZiggc3RyY21wKCBlbnRpdHksICJ2YWxpZF90byIgKSA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV90aW1lX2lzX3Bhc3QoICZjcnQudmFsaWRfdG8gKSA9PSByZXN1bHQgKTsKKyAgICBlbHNlCisgICAgICAgIFRFU1RfQVNTRVJUKCAiVW5rbm93biBlbnRpdHkiID09IDAgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwordm9pZCBtYmVkdGxzX3g1MDlfdGltZV9pc19mdXR1cmUoIGNoYXIgKmNydF9maWxlLCBjaGFyICplbnRpdHksIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgICBjcnQ7CisKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoICZjcnQgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoICZjcnQsIGNydF9maWxlICkgPT0gMCApOworCisgICAgaWYoIHN0cmNtcCggZW50aXR5LCAidmFsaWRfZnJvbSIgKSA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZSggJmNydC52YWxpZF9mcm9tICkgPT0gcmVzdWx0ICk7CisgICAgZWxzZSBpZiggc3RyY21wKCBlbnRpdHksICJ2YWxpZF90byIgKSA9PSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV90aW1lX2lzX2Z1dHVyZSggJmNydC52YWxpZF90byApID09IHJlc3VsdCApOworICAgIGVsc2UKKyAgICAgICAgVEVTVF9BU1NFUlQoICJVbmtub3duIGVudGl0eSIgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQzpNQkVEVExTX0ZTX0lPICovCit2b2lkIHg1MDlwYXJzZV9jcnRfZmlsZSggY2hhciAqY3J0X2ZpbGUsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgY3J0OworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY3J0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IHJlc3VsdCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNydCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQyAqLwordm9pZCB4NTA5cGFyc2VfY3J0KCBjaGFyICpjcnRfZGF0YSwgY2hhciAqcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCit7CisgICAgbWJlZHRsc194NTA5X2NydCAgIGNydDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMDAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyMDAwXTsKKyAgICBpbnQgZGF0YV9sZW4sIHJlczsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworICAgIG1lbXNldCggYnVmLCAwLCAyMDAwICk7CisgICAgbWVtc2V0KCBvdXRwdXQsIDAsIDIwMDAgKTsKKworICAgIGRhdGFfbGVuID0gdW5oZXhpZnkoIGJ1ZiwgY3J0X2RhdGEgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlKCAmY3J0LCBidWYsIGRhdGFfbGVuICkgPT0gKCByZXN1bHQgKSApOworICAgIGlmKCAoIHJlc3VsdCApID09IDAgKQorICAgIHsKKyAgICAgICAgcmVzID0gbWJlZHRsc194NTA5X2NydF9pbmZvKCAoY2hhciAqKSBvdXRwdXQsIDIwMDAsICIiLCAmY3J0ICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMSApOworICAgICAgICBURVNUX0FTU0VSVCggcmVzICE9IC0yICk7CisKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgb3V0cHV0LCByZXN1bHRfc3RyICkgPT0gMCApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfQ1JMX1BBUlNFX0MgKi8KK3ZvaWQgeDUwOXBhcnNlX2NybCggY2hhciAqY3JsX2RhdGEsIGNoYXIgKnJlc3VsdF9zdHIsIGludCByZXN1bHQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcmwgICBjcmw7CisgICAgdW5zaWduZWQgY2hhciBidWZbMjAwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjAwMF07CisgICAgaW50IGRhdGFfbGVuLCByZXM7CisKKyAgICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoICZjcmwgKTsKKyAgICBtZW1zZXQoIGJ1ZiwgMCwgMjAwMCApOworICAgIG1lbXNldCggb3V0cHV0LCAwLCAyMDAwICk7CisKKyAgICBkYXRhX2xlbiA9IHVuaGV4aWZ5KCBidWYsIGNybF9kYXRhICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NybF9wYXJzZSggJmNybCwgYnVmLCBkYXRhX2xlbiApID09ICggcmVzdWx0ICkgKTsKKyAgICBpZiggKCByZXN1bHQgKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJlcyA9IG1iZWR0bHNfeDUwOV9jcmxfaW5mbyggKGNoYXIgKikgb3V0cHV0LCAyMDAwLCAiIiwgJmNybCApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCByZXMgIT0gLTEgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHJlcyAhPSAtMiApOworCisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIG91dHB1dCwgcmVzdWx0X3N0ciApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2NybF9mcmVlKCAmY3JsICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X0NTUl9QQVJTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV9jc3JfcGFyc2UoIGNoYXIgKmNzcl9kZXJfaGV4LCBjaGFyICpyZWZfb3V0LCBpbnQgcmVmX3JldCApCit7CisgICAgbWJlZHRsc194NTA5X2NzciBjc3I7CisgICAgdW5zaWduZWQgY2hhciAqY3NyX2RlciA9IE5VTEw7CisgICAgY2hhciBteV9vdXRbMTAwMF07CisgICAgc2l6ZV90IGNzcl9kZXJfbGVuOworICAgIGludCBteV9yZXQ7CisKKyAgICBtYmVkdGxzX3g1MDlfY3NyX2luaXQoICZjc3IgKTsKKyAgICBtZW1zZXQoIG15X291dCwgMCwgc2l6ZW9mKCBteV9vdXQgKSApOworICAgIGNzcl9kZXIgPSB1bmhleGlmeV9hbGxvYyggY3NyX2Rlcl9oZXgsICZjc3JfZGVyX2xlbiApOworCisgICAgbXlfcmV0ID0gbWJlZHRsc194NTA5X2Nzcl9wYXJzZV9kZXIoICZjc3IsIGNzcl9kZXIsIGNzcl9kZXJfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIG15X3JldCA9PSByZWZfcmV0ICk7CisKKyAgICBpZiggcmVmX3JldCA9PSAwICkKKyAgICB7CisgICAgICAgIHNpemVfdCBteV9vdXRfbGVuID0gbWJlZHRsc194NTA5X2Nzcl9pbmZvKCBteV9vdXQsIHNpemVvZiggbXlfb3V0ICksICIiLCAmY3NyICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBteV9vdXRfbGVuID09IHN0cmxlbiggcmVmX291dCApICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIG15X291dCwgcmVmX291dCApID09IDAgKTsKKyAgICB9CisKK2V4aXQ6CisgICAgbWJlZHRsc194NTA5X2Nzcl9mcmVlKCAmY3NyICk7CisgICAgbWJlZHRsc19mcmVlKCBjc3JfZGVyICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCBjaGFyICpjcnRfcGF0aCwgaW50IHJldCwgaW50IG5iX2NydCApCit7CisgICAgbWJlZHRsc194NTA5X2NydCBjaGFpbiwgKmN1cjsKKyAgICBpbnQgaTsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNoYWluICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCAmY2hhaW4sIGNydF9wYXRoICkgPT0gcmV0ICk7CisKKyAgICAvKiBDaGVjayBob3cgbWFueSBjZXJ0cyB3ZSBnb3QgKi8KKyAgICBmb3IoIGkgPSAwLCBjdXIgPSAmY2hhaW47IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPm5leHQgKQorICAgICAgICBpZiggY3VyLT5yYXcucCAhPSBOVUxMICkKKyAgICAgICAgICAgIGkrKzsKKworICAgIFRFU1RfQVNTRVJUKCBpID09IG5iX2NydCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOV9jcnRfZnJlZSggJmNoYWluICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19GU19JTzpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0MgKi8KK3ZvaWQgbWJlZHRsc194NTA5X2NydF92ZXJpZnlfY2hhaW4oICBjaGFyICpjaGFpbl9wYXRocywgY2hhciAqdHJ1c3RlZF9jYSwgaW50IGZsYWdzX3Jlc3VsdCApCit7CisgICAgY2hhciogYWN0OworICAgIHVpbnQzMl90IGZsYWdzOworICAgIGludCByZXN1bHQsIHJlczsKKyAgICBtYmVkdGxzX3g1MDlfY3J0IHRydXN0ZWQsIGNoYWluOworCisgICAgcmVzdWx0PSBmbGFnc19yZXN1bHQ/TUJFRFRMU19FUlJfWDUwOV9DRVJUX1ZFUklGWV9GQUlMRUQ6MDsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNoYWluICk7CisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmdHJ1c3RlZCApOworCisgICAgd2hpbGUoICggYWN0ID0gbXlzdHJzZXAoICZjaGFpbl9wYXRocywgIiAiICkgKSAhPSBOVUxMICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJmNoYWluLCBhY3QgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSggJnRydXN0ZWQsIHRydXN0ZWRfY2EgKSA9PSAwICk7CisKKyAgICByZXMgPSBtYmVkdGxzX3g1MDlfY3J0X3ZlcmlmeSggJmNoYWluLCAmdHJ1c3RlZCwgTlVMTCwgTlVMTCwgJmZsYWdzLCBOVUxMLCBOVUxMICk7CisKKyAgICBURVNUX0FTU0VSVCggcmVzID09ICggcmVzdWx0ICkgKTsKKyAgICBURVNUX0FTU0VSVCggZmxhZ3MgPT0gKHVpbnQzMl90KSggZmxhZ3NfcmVzdWx0ICkgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZ0cnVzdGVkICk7CisgICAgbWJlZHRsc194NTA5X2NydF9mcmVlKCAmY2hhaW4gKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MgKi8KK3ZvaWQgeDUwOV9vaWRfZGVzYyggY2hhciAqb2lkX3N0ciwgY2hhciAqcmVmX2Rlc2MgKQoreworICAgIG1iZWR0bHNfeDUwOV9idWYgb2lkOworICAgIGNvbnN0IGNoYXIgKmRlc2MgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwXTsKKyAgICBpbnQgcmV0OworCisgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiBidWYgKTsKKworICAgIG9pZC50YWcgPSBNQkVEVExTX0FTTjFfT0lEOworICAgIG9pZC5sZW4gPSB1bmhleGlmeSggYnVmLCBvaWRfc3RyICk7CisgICAgb2lkLnAgICA9IGJ1ZjsKKworICAgIHJldCA9IG1iZWR0bHNfb2lkX2dldF9leHRlbmRlZF9rZXlfdXNhZ2UoICZvaWQsICZkZXNjICk7CisKKyAgICBpZiggc3RyY21wKCByZWZfZGVzYywgIm5vdGZvdW5kIiApID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHJldCAhPSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBkZXNjID09IE5VTEwgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBkZXNjICE9IE5VTEwgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggZGVzYywgcmVmX2Rlc2MgKSA9PSAwICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9VU0VfQyAqLwordm9pZCB4NTA5X29pZF9udW1zdHIoIGNoYXIgKm9pZF9zdHIsIGNoYXIgKm51bXN0ciwgaW50IGJsZW4sIGludCByZXQgKQoreworICAgIG1iZWR0bHNfeDUwOV9idWYgb2lkOworICAgIHVuc2lnbmVkIGNoYXIgb2lkX2J1ZlsyMF07CisgICAgY2hhciBudW1fYnVmWzEwMF07CisKKyAgICBtZW1zZXQoIG9pZF9idWYsIDB4MDAsIHNpemVvZiBvaWRfYnVmICk7CisgICAgbWVtc2V0KCBudW1fYnVmLCAweDJhLCBzaXplb2YgbnVtX2J1ZiApOworCisgICAgb2lkLnRhZyA9IE1CRURUTFNfQVNOMV9PSUQ7CisgICAgb2lkLmxlbiA9IHVuaGV4aWZ5KCBvaWRfYnVmLCBvaWRfc3RyICk7CisgICAgb2lkLnAgICA9IG9pZF9idWY7CisKKyAgICBURVNUX0FTU0VSVCggKHNpemVfdCkgYmxlbiA8PSBzaXplb2YgbnVtX2J1ZiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfb2lkX2dldF9udW1lcmljX3N0cmluZyggbnVtX2J1ZiwgYmxlbiwgJm9pZCApID09IHJldCApOworCisgICAgaWYoIHJldCA+PSAwICkKKyAgICB7CisgICAgICAgIFRFU1RfQVNTRVJUKCBudW1fYnVmW3JldF0gPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCBudW1fYnVmLCBudW1zdHIgKSA9PSAwICk7CisgICAgfQorfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRlNfSU86TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DOk1CRURUTFNfWDUwOV9DSEVDS19LRVlfVVNBR0UgKi8KK3ZvaWQgeDUwOV9jaGVja19rZXlfdXNhZ2UoIGNoYXIgKmNydF9maWxlLCBpbnQgdXNhZ2UsIGludCByZXQgKQoreworICAgIG1iZWR0bHNfeDUwOV9jcnQgY3J0OworCisgICAgbWJlZHRsc194NTA5X2NydF9pbml0KCAmY3J0ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2tleV91c2FnZSggJmNydCwgdXNhZ2UgKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQzpNQkVEVExTX1g1MDlfQ0hFQ0tfRVhURU5ERURfS0VZX1VTQUdFICovCit2b2lkIHg1MDlfY2hlY2tfZXh0ZW5kZWRfa2V5X3VzYWdlKCBjaGFyICpjcnRfZmlsZSwgY2hhciAqdXNhZ2VfaGV4LCBpbnQgcmV0ICkKK3sKKyAgICBtYmVkdGxzX3g1MDlfY3J0IGNydDsKKyAgICBjaGFyIG9pZFs1MF07CisgICAgc2l6ZV90IGxlbjsKKworICAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCggJmNydCApOworCisgICAgbGVuID0gdW5oZXhpZnkoICh1bnNpZ25lZCBjaGFyICopIG9pZCwgdXNhZ2VfaGV4ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCAmY3J0LCBjcnRfZmlsZSApID09IDAgKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfY3J0X2NoZWNrX2V4dGVuZGVkX2tleV91c2FnZSggJmNydCwgb2lkLCBsZW4gKSA9PSByZXQgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoICZjcnQgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfVVNFX0MgKi8KK3ZvaWQgeDUwOV9nZXRfdGltZSggaW50IHRhZywgIGNoYXIgKnRpbWVfc3RyLCBpbnQgcmV0LAorICAgICAgICAgICAgICAgICAgICBpbnQgeWVhciwgaW50IG1vbiwgaW50IGRheSwKKyAgICAgICAgICAgICAgICAgICAgaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMgKQoreworICAgIG1iZWR0bHNfeDUwOV90aW1lIHRpbWU7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTddOworICAgIHVuc2lnbmVkIGNoYXIqIHN0YXJ0ID0gYnVmOworICAgIHVuc2lnbmVkIGNoYXIqIGVuZCA9IGJ1ZjsKKworICAgIG1lbXNldCggJnRpbWUsIDB4MDAsIHNpemVvZiggdGltZSApICk7CisgICAgKmVuZCA9ICh1bnNpZ25lZCBjaGFyKXRhZzsgZW5kKys7CisgICAgaWYoIHRhZyA9PSBNQkVEVExTX0FTTjFfVVRDX1RJTUUgKQorICAgICAgICAqZW5kID0gMTM7CisgICAgZWxzZQorICAgICAgICAqZW5kID0gMTU7CisgICAgZW5kKys7CisgICAgbWVtY3B5KCBlbmQsIHRpbWVfc3RyLCAoc2l6ZV90KSooZW5kIC0gMSkgKTsKKyAgICBlbmQgKz0gKihlbmQgLSAxKTsKKworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfZ2V0X3RpbWUoICZzdGFydCwgZW5kLCAmdGltZSApID09IHJldCApOworICAgIGlmKCByZXQgPT0gMCApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggeWVhciA9PSB0aW1lLnllYXIgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1vbiAgPT0gdGltZS5tb24gICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBkYXkgID09IHRpbWUuZGF5ICApOworICAgICAgICBURVNUX0FTU0VSVCggaG91ciA9PSB0aW1lLmhvdXIgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1pbiAgPT0gdGltZS5taW4gICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBzZWMgID09IHRpbWUuc2VjICApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfQ1JUX1BBUlNFX0M6TUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVCAqLwordm9pZCB4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zKCBjaGFyICpoZXhfcGFyYW1zLCBpbnQgcGFyYW1zX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZl9tc2dfbWQsIGludCByZWZfbWdmX21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVmX3NhbHRfbGVuLCBpbnQgcmVmX3JldCApCit7CisgICAgaW50IG15X3JldDsKKyAgICBtYmVkdGxzX3g1MDlfYnVmIHBhcmFtczsKKyAgICBtYmVkdGxzX21kX3R5cGVfdCBteV9tc2dfbWQsIG15X21nZl9tZDsKKyAgICBpbnQgbXlfc2FsdF9sZW47CisKKyAgICBwYXJhbXMucCA9IHVuaGV4aWZ5X2FsbG9jKCBoZXhfcGFyYW1zLCAmcGFyYW1zLmxlbiApOworICAgIHBhcmFtcy50YWcgPSBwYXJhbXNfdGFnOworCisgICAgbXlfcmV0ID0gbWJlZHRsc194NTA5X2dldF9yc2Fzc2FfcHNzX3BhcmFtcyggJnBhcmFtcywgJm15X21zZ19tZCwgJm15X21nZl9tZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15X3NhbHRfbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggbXlfcmV0ID09IHJlZl9yZXQgKTsKKworICAgIGlmKCByZWZfcmV0ID09IDAgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG15X21zZ19tZCA9PSAobWJlZHRsc19tZF90eXBlX3QpIHJlZl9tc2dfbWQgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG15X21nZl9tZCA9PSAobWJlZHRsc19tZF90eXBlX3QpIHJlZl9tZ2ZfbWQgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG15X3NhbHRfbGVuID09IHJlZl9zYWx0X2xlbiApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2ZyZWUoIHBhcmFtcy5wICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DOk1CRURUTFNfU0VMRl9URVNUICovCit2b2lkIHg1MDlfc2VsZnRlc3QoKQoreworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfc2VsZl90ZXN0KCAxICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZGF0YSBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQyYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDl3cml0ZS5kYXRhCkBAIC0wLDAgKzEsNzcgQEAKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBTSEExCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGExIjpNQkVEVExTX01EX1NIQTE6MDowCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBTSEEyMjQKK2RlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X2Nzcl9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhMjI0IjpNQkVEVExTX01EX1NIQTIyNDowOjAKKworQ2VydGlmaWNhdGUgUmVxdWVzdCBjaGVjayBTZXJ2ZXIxIFNIQTI1NgorZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5zaGEyNTYiOk1CRURUTFNfTURfU0hBMjU2OjA6MAorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEgU0hBMzg0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLnNoYTM4NCI6TUJFRFRMU19NRF9TSEEzODQ6MDowCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBTSEE1MTIKK2RlcGVuZHNfb246TUJFRFRMU19TSEE1MTJfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Cit4NTA5X2Nzcl9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6ImRhdGFfZmlsZXMvc2VydmVyMS5yZXEuc2hhNTEyIjpNQkVEVExTX01EX1NIQTUxMjowOjAKKworQ2VydGlmaWNhdGUgUmVxdWVzdCBjaGVjayBTZXJ2ZXIxIE1ENAorZGVwZW5kc19vbjpNQkVEVExTX01ENF9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTUKK3g1MDlfY3NyX2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiZGF0YV9maWxlcy9zZXJ2ZXIxLnJlcS5tZDQiOk1CRURUTFNfTURfTUQ0OjA6MAorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjEgTUQ1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLm1kNSI6TUJFRFRMU19NRF9NRDU6MDowCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBrZXlfdXNhZ2UKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmtleV91c2FnZSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSB8IE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT04gfCBNQkVEVExTX1g1MDlfS1VfS0VZX0VOQ0lQSEVSTUVOVDowCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBuc19jZXJ0X3R5cGUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmNlcnRfdHlwZSI6TUJFRFRMU19NRF9TSEExOjA6TUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSCisKK0NlcnRpZmljYXRlIFJlcXVlc3QgY2hlY2sgU2VydmVyMSBrZXlfdXNhZ2UgKyBuc19jZXJ0X3R5cGUKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNQoreDUwOV9jc3JfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiJkYXRhX2ZpbGVzL3NlcnZlcjEucmVxLmt1LWN0IjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFIHwgTUJFRFRMU19YNTA5X0tVX05PTl9SRVBVRElBVElPTiB8IE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOk1CRURUTFNfWDUwOV9OU19DRVJUX1RZUEVfU1NMX1NFUlZFUgorCitDZXJ0aWZpY2F0ZSBSZXF1ZXN0IGNoZWNrIFNlcnZlcjUgRUNEU0EsIGtleV91c2FnZQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECit4NTA5X2Nzcl9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXI1LmtleSI6ImRhdGFfZmlsZXMvc2VydmVyNS5yZXEua3Uuc2hhMSI6TUJFRFRMU19NRF9TSEExOk1CRURUTFNfWDUwOV9LVV9ESUdJVEFMX1NJR05BVFVSRSB8IE1CRURUTFNfWDUwOV9LVV9OT05fUkVQVURJQVRJT046MAorCitDZXJ0aWZpY2F0ZSB3cml0ZSBjaGVjayBTZXJ2ZXIxIFNIQTEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfTUQ1X0MKK3g1MDlfY3J0X2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiIjoiQz1OTCxPPVBvbGFyU1NMLENOPVBvbGFyU1NMIFNlcnZlciAxIjoiZGF0YV9maWxlcy90ZXN0LWNhLmtleSI6IlBvbGFyU1NMVGVzdCI6IkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBUZXN0IENBIjoiMSI6IjIwMTEwMjEyMTQ0NDA2IjoiMjAyMTAyMTIxNDQ0MDYiOk1CRURUTFNfTURfU0hBMTowOjA6LTE6ImRhdGFfZmlsZXMvc2VydmVyMS5jcnQiCisKK0NlcnRpZmljYXRlIHdyaXRlIGNoZWNrIFNlcnZlcjEgU0hBMSwga2V5X3VzYWdlCitkZXBlbmRzX29uOk1CRURUTFNfU0hBMV9DOk1CRURUTFNfUlNBX0M6TUJFRFRMU19QS0NTMV9WMTU6TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX01ENV9DCit4NTA5X2NydF9jaGVjazoiZGF0YV9maWxlcy9zZXJ2ZXIxLmtleSI6IiI6IkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBTZXJ2ZXIgMSI6ImRhdGFfZmlsZXMvdGVzdC1jYS5rZXkiOiJQb2xhclNTTFRlc3QiOiJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgVGVzdCBDQSI6IjEiOiIyMDExMDIxMjE0NDQwNiI6IjIwMjEwMjEyMTQ0NDA2IjpNQkVEVExTX01EX1NIQTE6TUJFRFRMU19YNTA5X0tVX0RJR0lUQUxfU0lHTkFUVVJFIHwgTUJFRFRMU19YNTA5X0tVX05PTl9SRVBVRElBVElPTiB8IE1CRURUTFNfWDUwOV9LVV9LRVlfRU5DSVBIRVJNRU5UOjA6LTE6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXlfdXNhZ2UuY3J0IgorCitDZXJ0aWZpY2F0ZSB3cml0ZSBjaGVjayBTZXJ2ZXIxIFNIQTEsIG5zX2NlcnRfdHlwZQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQzpNQkVEVExTX1JTQV9DOk1CRURUTFNfUEtDUzFfVjE1Ok1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19NRDVfQworeDUwOV9jcnRfY2hlY2s6ImRhdGFfZmlsZXMvc2VydmVyMS5rZXkiOiIiOiJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgU2VydmVyIDEiOiJkYXRhX2ZpbGVzL3Rlc3QtY2Eua2V5IjoiUG9sYXJTU0xUZXN0IjoiQz1OTCxPPVBvbGFyU1NMLENOPVBvbGFyU1NMIFRlc3QgQ0EiOiIxIjoiMjAxMTAyMTIxNDQ0MDYiOiIyMDIxMDIxMjE0NDQwNiI6TUJFRFRMU19NRF9TSEExOjA6TUJFRFRMU19YNTA5X05TX0NFUlRfVFlQRV9TU0xfU0VSVkVSOi0xOiJkYXRhX2ZpbGVzL3NlcnZlcjEuY2VydF90eXBlLmNydCIKKworQ2VydGlmaWNhdGUgd3JpdGUgY2hlY2sgU2VydmVyMSBTSEExLCB2ZXJzaW9uIDEKK2RlcGVuZHNfb246TUJFRFRMU19TSEExX0M6TUJFRFRMU19SU0FfQzpNQkVEVExTX1BLQ1MxX1YxNTpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfTUQ1X0MKK3g1MDlfY3J0X2NoZWNrOiJkYXRhX2ZpbGVzL3NlcnZlcjEua2V5IjoiIjoiQz1OTCxPPVBvbGFyU1NMLENOPVBvbGFyU1NMIFNlcnZlciAxIjoiZGF0YV9maWxlcy90ZXN0LWNhLmtleSI6IlBvbGFyU1NMVGVzdCI6IkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBUZXN0IENBIjoiMSI6IjIwMTEwMjEyMTQ0NDA2IjoiMjAyMTAyMTIxNDQ0MDYiOk1CRURUTFNfTURfU0hBMTowOjA6TUJFRFRMU19YNTA5X0NSVF9WRVJTSU9OXzE6ImRhdGFfZmlsZXMvc2VydmVyMS52MS5jcnQiCisKK1g1MDkgU3RyaW5nIHRvIE5hbWVzICMxCittYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzOiJDPU5MLE89T2Zmc3BhcmtcLCBJbmMuLCBPVT1Qb2xhclNTTCI6IkM9TkwsIE89T2Zmc3BhcmssIEluYy4sIE9VPVBvbGFyU1NMIjowCisKK1g1MDkgU3RyaW5nIHRvIE5hbWVzICMyCittYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzOiJDPU5MLCBPPU9mZnNwYXJrLCBJbmMuLCBPVT1Qb2xhclNTTCI6IiI6TUJFRFRMU19FUlJfWDUwOV9VTktOT1dOX09JRAorCitYNTA5IFN0cmluZyB0byBOYW1lcyAjMyAoTmFtZSBwcmVjaXNlbHkgMjU1IGJ5dGVzKQorbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lczoiQz1OTCwgTz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUsT1U9UG9sYXJTU0wiOiJDPU5MLCBPPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSwgT1U9UG9sYXJTU0wiOjAKKworWDUwOSBTdHJpbmcgdG8gTmFtZXMgIzQgKE5hbWUgbGFyZ2VyIHRoYW4gMjU1IGJ5dGVzKQorbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lczoiQz1OTCwgTz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2LCBPVT1Qb2xhclNTTCI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX05BTUUKKworWDUwOSBTdHJpbmcgdG8gTmFtZXMgIzUgKEVzY2FwZSBub24tYWxsb3dlZCBjaGFyYWN0ZXJzKQorbWJlZHRsc194NTA5X3N0cmluZ190b19uYW1lczoiQz1OTCwgTz1PZmZzcGFya1xhIEluYy4sIE9VPVBvbGFyU1NMIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRQorCitYNTA5IFN0cmluZyB0byBOYW1lcyAjNiAoRXNjYXBlIGF0IGVuZCkKK21iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXM6IkM9TkwsIE89T2Zmc3BhcmtcIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfTkFNRQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDl3cml0ZS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliZTMxZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZnVuY3Rpb24KQEAgLTAsMCArMSwyMDMgQEAKKy8qIEJFR0lOX0hFQURFUiAqLworI2luY2x1ZGUgIm1iZWR0bHMveDUwOV9jcnQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDlfY3NyLmgiCisjaW5jbHVkZSAibWJlZHRscy9wZW0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL29pZC5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19CSUdOVU1fQzpNQkVEVExTX0ZTX0lPOk1CRURUTFNfUEtfUEFSU0VfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1BFTV9XUklURV9DOk1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQyAqLwordm9pZCB4NTA5X2Nzcl9jaGVjayggY2hhciAqa2V5X2ZpbGUsIGNoYXIgKmNlcnRfcmVxX2NoZWNrX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgbWRfdHlwZSwgaW50IGtleV91c2FnZSwgaW50IGNlcnRfdHlwZSApCit7CisgICAgbWJlZHRsc19wa19jb250ZXh0IGtleTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3IgcmVxOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzQwOTZdOworICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tfYnVmWzQwMDBdOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG9sZW4gPSAwLCBwZW1fbGVuID0gMDsKKyAgICBpbnQgZGVyX2xlbiA9IC0xOworICAgIEZJTEUgKmY7CisgICAgY29uc3QgY2hhciAqc3ViamVjdF9uYW1lID0gIkM9TkwsTz1Qb2xhclNTTCxDTj1Qb2xhclNTTCBTZXJ2ZXIgMSI7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4MmEsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgIG1iZWR0bHNfcGtfaW5pdCggJmtleSApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZrZXksIGtleV9maWxlLCBOVUxMICkgPT0gMCApOworCisgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyX2luaXQoICZyZXEgKTsKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jc3Jfc2V0X21kX2FsZyggJnJlcSwgbWRfdHlwZSApOworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5KCAmcmVxLCAma2V5ICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfc3ViamVjdF9uYW1lKCAmcmVxLCBzdWJqZWN0X25hbWUgKSA9PSAwICk7CisgICAgaWYoIGtleV91c2FnZSAhPSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfa2V5X3VzYWdlKCAmcmVxLCBrZXlfdXNhZ2UgKSA9PSAwICk7CisgICAgaWYoIGNlcnRfdHlwZSAhPSAwICkKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9zZXRfbnNfY2VydF90eXBlKCAmcmVxLCBjZXJ0X3R5cGUgKSA9PSAwICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfcGVtKCAmcmVxLCBidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgcGVtX2xlbiA9IHN0cmxlbiggKGNoYXIgKikgYnVmICk7CisKKyAgICBmID0gZm9wZW4oIGNlcnRfcmVxX2NoZWNrX2ZpbGUsICJyIiApOworICAgIFRFU1RfQVNTRVJUKCBmICE9IE5VTEwgKTsKKyAgICBvbGVuID0gZnJlYWQoIGNoZWNrX2J1ZiwgMSwgc2l6ZW9mKCBjaGVja19idWYgKSwgZiApOworICAgIGZjbG9zZSggZiApOworCisgICAgVEVTVF9BU1NFUlQoIG9sZW4gPj0gcGVtX2xlbiAtIDEgKTsKKyAgICBURVNUX0FTU0VSVCggbWVtY21wKCBidWYsIGNoZWNrX2J1ZiwgcGVtX2xlbiAtIDEgKSA9PSAwICk7CisKKyAgICBkZXJfbGVuID0gbWJlZHRsc194NTA5d3JpdGVfY3NyX2RlciggJnJlcSwgYnVmLCBzaXplb2YoIGJ1ZiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICk7CisgICAgVEVTVF9BU1NFUlQoIGRlcl9sZW4gPj0gMCApOworCisgICAgaWYoIGRlcl9sZW4gPT0gMCApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJldCA9IG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIoICZyZXEsIGJ1ZiwgKHNpemVfdCkoIGRlcl9sZW4gLSAxICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm5kX3BzZXVkb19yYW5kLCAmcm5kX2luZm8gKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IE1CRURUTFNfRVJSX0FTTjFfQlVGX1RPT19TTUFMTCApOworCitleGl0OgorICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlKCAmcmVxICk7CisgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19QRU1fV1JJVEVfQzpNQkVEVExTX1g1MDlfQ1JUX1dSSVRFX0M6TUJFRFRMU19TSEExX0MgKi8KK3ZvaWQgeDUwOV9jcnRfY2hlY2soIGNoYXIgKnN1YmplY3Rfa2V5X2ZpbGUsIGNoYXIgKnN1YmplY3RfcHdkLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3ViamVjdF9uYW1lLCBjaGFyICppc3N1ZXJfa2V5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICppc3N1ZXJfcHdkLCBjaGFyICppc3N1ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNlcmlhbF9zdHIsIGNoYXIgKm5vdF9iZWZvcmUsIGNoYXIgKm5vdF9hZnRlciwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtZF90eXBlLCBpbnQga2V5X3VzYWdlLCBpbnQgY2VydF90eXBlLCBpbnQgdmVyLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqY2VydF9jaGVja19maWxlICkKK3sKKyAgICBtYmVkdGxzX3BrX2NvbnRleHQgc3ViamVjdF9rZXksIGlzc3Vlcl9rZXk7CisgICAgbWJlZHRsc194NTA5d3JpdGVfY2VydCBjcnQ7CisgICAgdW5zaWduZWQgY2hhciBidWZbNDA5Nl07CisgICAgdW5zaWduZWQgY2hhciBjaGVja19idWZbNTAwMF07CisgICAgbWJlZHRsc19tcGkgc2VyaWFsOworICAgIGludCByZXQ7CisgICAgc2l6ZV90IG9sZW4gPSAwLCBwZW1fbGVuID0gMDsKKyAgICBpbnQgZGVyX2xlbiA9IC0xOworICAgIEZJTEUgKmY7CisgICAgcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworCisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4MmEsIHNpemVvZiggcm5kX3BzZXVkb19pbmZvICkgKTsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmc2VyaWFsICk7CisgICAgbWJlZHRsc19wa19pbml0KCAmc3ViamVjdF9rZXkgKTsKKyAgICBtYmVkdGxzX3BrX2luaXQoICZpc3N1ZXJfa2V5ICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa19wYXJzZV9rZXlmaWxlKCAmc3ViamVjdF9rZXksIHN1YmplY3Rfa2V5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3RfcHdkICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoICZpc3N1ZXJfa2V5LCBpc3N1ZXJfa2V5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlcl9wd2QgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbXBpX3JlYWRfc3RyaW5nKCAmc2VyaWFsLCAxMCwgc2VyaWFsX3N0ciApID09IDAgKTsKKworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9pbml0KCAmY3J0ICk7CisgICAgaWYoIHZlciAhPSAtMSApCisgICAgICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfdmVyc2lvbiggJmNydCwgdmVyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc2VyaWFsKCAmY3J0LCAmc2VyaWFsICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3ZhbGlkaXR5KCAmY3J0LCBub3RfYmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X2FmdGVyICkgPT0gMCApOworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfbWRfYWxnKCAmY3J0LCBtZF90eXBlICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX25hbWUoICZjcnQsIGlzc3Vlcl9uYW1lICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfc2V0X3N1YmplY3RfbmFtZSggJmNydCwgc3ViamVjdF9uYW1lICkgPT0gMCApOworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXkoICZjcnQsICZzdWJqZWN0X2tleSApOworICAgIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfaXNzdWVyX2tleSggJmNydCwgJmlzc3Vlcl9rZXkgKTsKKworICAgIGlmKCBjcnQudmVyc2lvbiA+PSBNQkVEVExTX1g1MDlfQ1JUX1ZFUlNJT05fMyApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9iYXNpY19jb25zdHJhaW50cyggJmNydCwgMCwgMCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfc3ViamVjdF9rZXlfaWRlbnRpZmllciggJmNydCApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfYXV0aG9yaXR5X2tleV9pZGVudGlmaWVyKCAmY3J0ICkgPT0gMCApOworICAgICAgICBpZigga2V5X3VzYWdlICE9IDAgKQorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeDUwOXdyaXRlX2NydF9zZXRfa2V5X3VzYWdlKCAmY3J0LCBrZXlfdXNhZ2UgKSA9PSAwICk7CisgICAgICAgIGlmKCBjZXJ0X3R5cGUgIT0gMCApCisgICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194NTA5d3JpdGVfY3J0X3NldF9uc19jZXJ0X3R5cGUoICZjcnQsIGNlcnRfdHlwZSApID09IDAgKTsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfcGVtKCAmY3J0LCBidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApOworCisgICAgcGVtX2xlbiA9IHN0cmxlbiggKGNoYXIgKikgYnVmICk7CisKKyAgICBmID0gZm9wZW4oIGNlcnRfY2hlY2tfZmlsZSwgInIiICk7CisgICAgVEVTVF9BU1NFUlQoIGYgIT0gTlVMTCApOworICAgIG9sZW4gPSBmcmVhZCggY2hlY2tfYnVmLCAxLCBzaXplb2YoY2hlY2tfYnVmKSwgZiApOworICAgIGZjbG9zZSggZiApOworICAgIFRFU1RfQVNTRVJUKCBvbGVuIDwgc2l6ZW9mKGNoZWNrX2J1ZikgKTsKKworICAgIFRFU1RfQVNTRVJUKCBvbGVuID49IHBlbV9sZW4gLSAxICk7CisgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggYnVmLCBjaGVja19idWYsIHBlbV9sZW4gLSAxICkgPT0gMCApOworCisgICAgZGVyX2xlbiA9IG1iZWR0bHNfeDUwOXdyaXRlX2NydF9kZXIoICZjcnQsIGJ1Ziwgc2l6ZW9mKCBidWYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmRfcHNldWRvX3JhbmQsICZybmRfaW5mbyApOworICAgIFRFU1RfQVNTRVJUKCBkZXJfbGVuID49IDAgKTsKKworICAgIGlmKCBkZXJfbGVuID09IDAgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZGVyKCAmY3J0LCBidWYsIChzaXplX3QpKCBkZXJfbGVuIC0gMSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJuZF9wc2V1ZG9fcmFuZCwgJnJuZF9pbmZvICk7CisgICAgVEVTVF9BU1NFUlQoIHJldCA9PSBNQkVEVExTX0VSUl9BU04xX0JVRl9UT09fU01BTEwgKTsKKworZXhpdDoKKyAgICBtYmVkdGxzX3g1MDl3cml0ZV9jcnRfZnJlZSggJmNydCApOworICAgIG1iZWR0bHNfcGtfZnJlZSggJmlzc3Vlcl9rZXkgKTsKKyAgICBtYmVkdGxzX3BrX2ZyZWUoICZzdWJqZWN0X2tleSApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzZXJpYWwgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1g1MDlfQ1JFQVRFX0M6TUJFRFRMU19YNTA5X1VTRV9DICovCit2b2lkIG1iZWR0bHNfeDUwOV9zdHJpbmdfdG9fbmFtZXMoIGNoYXIgKm5hbWUsIGNoYXIgKnBhcnNlZF9uYW1lLCBpbnQgcmVzdWx0ICkKK3sKKyAgICBpbnQgcmV0OworICAgIHNpemVfdCBsZW4gPSAwOworICAgIG1iZWR0bHNfYXNuMV9uYW1lZF9kYXRhICpuYW1lcyA9IE5VTEw7CisgICAgbWJlZHRsc194NTA5X25hbWUgcGFyc2VkLCAqcGFyc2VkX2N1ciwgKnBhcnNlZF9wcnY7CisgICAgdW5zaWduZWQgY2hhciBidWZbMTAyNF0sIG91dFsxMDI0XSwgKmM7CisKKyAgICBtZW1zZXQoICZwYXJzZWQsIDAsIHNpemVvZiggcGFyc2VkICkgKTsKKyAgICBtZW1zZXQoIG91dCwgMCwgc2l6ZW9mKCBvdXQgKSApOworICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgYyA9IGJ1ZiArIHNpemVvZiggYnVmICk7CisKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfc3RyaW5nX3RvX25hbWVzKCAmbmFtZXMsIG5hbWUgKTsKKyAgICBURVNUX0FTU0VSVCggcmV0ID09IHJlc3VsdCApOworCisgICAgaWYoIHJldCAhPSAwICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X3dyaXRlX25hbWVzKCAmYywgYnVmLCBuYW1lcyApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPiAwICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hc24xX2dldF90YWcoICZjLCBidWYgKyBzaXplb2YoIGJ1ZiApLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19BU04xX0NPTlNUUlVDVEVEIHwgTUJFRFRMU19BU04xX1NFUVVFTkNFICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3g1MDlfZ2V0X25hbWUoICZjLCBidWYgKyBzaXplb2YoIGJ1ZiApLCAmcGFyc2VkICkgPT0gMCApOworCisgICAgcmV0ID0gbWJlZHRsc194NTA5X2RuX2dldHMoIChjaGFyICopIG91dCwgc2l6ZW9mKCBvdXQgKSwgJnBhcnNlZCApOworICAgIFRFU1RfQVNTRVJUKCByZXQgPiAwICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBvdXQsIHBhcnNlZF9uYW1lICkgPT0gMCApOworCitleGl0OgorICAgIG1iZWR0bHNfYXNuMV9mcmVlX25hbWVkX2RhdGFfbGlzdCggJm5hbWVzICk7CisKKyAgICBwYXJzZWRfY3VyID0gcGFyc2VkLm5leHQ7CisgICAgd2hpbGUoIHBhcnNlZF9jdXIgIT0gMCApCisgICAgeworICAgICAgICBwYXJzZWRfcHJ2ID0gcGFyc2VkX2N1cjsKKyAgICAgICAgcGFyc2VkX2N1ciA9IHBhcnNlZF9jdXItPm5leHQ7CisgICAgICAgIG1iZWR0bHNfZnJlZSggcGFyc2VkX3BydiApOworICAgIH0KK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeHRlYS5kYXRhIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZGF0YQpAQCAtMCwwICsxLDc2IEBACitYVEVBIEVuY3J5cHRfZWNiICMxCit4dGVhX2VuY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjQxNDI0MzQ0NDU0NjQ3NDgiOiI0OTdkZjNkMDcyNjEyY2I1IgorCitYVEVBIEVuY3J5cHRfZWNiICMyCit4dGVhX2VuY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjQxNDE0MTQxNDE0MTQxNDEiOiJlNzhmMmQxMzc0NDM0MWQ4IgorCitYVEVBIEVuY3J5cHRfZWNiICMzCit4dGVhX2VuY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjVhNWI2ZTI3ODk0OGQ3N2YiOiI0MTQxNDE0MTQxNDE0MTQxIgorCitYVEVBIEVuY3J5cHRfZWNiICM0Cit4dGVhX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQxNDI0MzQ0NDU0NjQ3NDgiOiJhMDM5MDU4OWY4YjhlZmE1IgorCitYVEVBIEVuY3J5cHRfZWNiICM1Cit4dGVhX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQxNDE0MTQxNDE0MTQxNDEiOiJlZDIzMzc1YTgyMWE4YzJkIgorCitYVEVBIEVuY3J5cHRfZWNiICM2Cit4dGVhX2VuY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjcwZTEyMjVkNmU0ZTc2NTUiOiI0MTQxNDE0MTQxNDE0MTQxIgorCitYVEVBIERlY3J5cHRfZWNiICMxCit4dGVhX2RlY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjQ5N2RmM2QwNzI2MTJjYjUiOiI0MTQyNDM0NDQ1NDY0NzQ4IgorCitYVEVBIERlY3J5cHRfZWNiICMyCit4dGVhX2RlY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6ImU3OGYyZDEzNzQ0MzQxZDgiOiI0MTQxNDE0MTQxNDE0MTQxIgorCitYVEVBIERlY3J5cHRfZWNiICMzCit4dGVhX2RlY3J5cHRfZWNiOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjQxNDE0MTQxNDE0MTQxNDEiOiI1YTViNmUyNzg5NDhkNzdmIgorCitYVEVBIERlY3J5cHRfZWNiICM0Cit4dGVhX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImEwMzkwNTg5ZjhiOGVmYTUiOiI0MTQyNDM0NDQ1NDY0NzQ4IgorCitYVEVBIERlY3J5cHRfZWNiICM1Cit4dGVhX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6ImVkMjMzNzVhODIxYThjMmQiOiI0MTQxNDE0MTQxNDE0MTQxIgorCitYVEVBIERlY3J5cHRfZWNiICM2Cit4dGVhX2RlY3J5cHRfZWNiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjQxNDE0MTQxNDE0MTQxNDEiOiI3MGUxMjI1ZDZlNGU3NjU1IgorCitYVEVBIEVuY3J5cHQgQ0JDICMxCit4dGVhX2VuY3J5cHRfY2JjOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjYxNjI2MzY0NjU2NjY3NjgiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNmI5ODJiZWMxNWE3YjU1OCIKKworWFRFQSBFbmNyeXB0IENCQyAjMgoreHRlYV9lbmNyeXB0X2NiYzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDEiOiIyYzZhZWI3OTk1NjFjOGU5NzNiMDkyN2YwNzJlMzgwMSIKKworWFRFQSBFbmNyeXB0IENCQyAjMworeHRlYV9lbmNyeXB0X2NiYzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNWE1YjZlMjc4OTQ4ZDc3ZjcwZTEyMjVkNmU0ZTc2NTVlNzhmMmQxMzc0NDM0MWQ4IjoiNDE0MTQxNDE0MTQxNDE0MTVmZWUxMDBmZTJjMDMwMDI1ZDhhNTU3ZjI2NzdjYjMzIgorCitYVEVBIEVuY3J5cHQgQ0JDICM0Cit4dGVhX2VuY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYxNjI2MzY0NjU2NjY3NjgiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNWIwYzA2NWEzODAzOTAwZCIKKworWFRFQSBFbmNyeXB0IENCQyAjNQoreHRlYV9lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDEiOiJiZGFlNTA4YWEzMjBhYTVjYWE3Y2Q3OWRiYzljMzhhYSIKKworWFRFQSBFbmNyeXB0IENCQyAjNgoreHRlYV9lbmNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNWE1YjZlMjc4OTQ4ZDc3ZjcwZTEyMjVkNmU0ZTc2NTVlNzhmMmQxMzc0NDM0MWQ4IjoiNjFmNTA4MmEyYzk5NmY2MzJkYTNlYTE2ZmY4ZTA2NTU4YjY5ZjA2OWQ4NjM3YjMxIgorCitYVEVBIERlY3J5cHQgQ0JDICMxCit4dGVhX2RlY3J5cHRfY2JjOiIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiI6IjYxNjI2MzY0NjU2NjY3NjgiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiMzU5ZGVmNDY1MTVjNzFiMiIKKworWFRFQSBEZWNyeXB0IENCQyAjMgoreHRlYV9kZWNyeXB0X2NiYzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDEiOiIxYjE5MmQ2M2NjMGU5MDM3MWIxYTJmNjZjODA5OTYzZSIKKworWFRFQSBEZWNyeXB0IENCQyAjMworeHRlYV9kZWNyeXB0X2NiYzoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNWE1YjZlMjc4OTQ4ZDc3ZjcwZTEyMjVkNmU0ZTc2NTVlNzhmMmQxMzc0NDM0MWQ4IjoiMmU3NmU1Y2MwMzU0M2NkYzQwY2EwMzM1OGE1NzY0YzMzMWEwNjMxYzJmMGYzNzE0IgorCitYVEVBIERlY3J5cHQgQ0JDICM0Cit4dGVhX2RlY3J5cHRfY2JjOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI6IjYxNjI2MzY0NjU2NjY3NjgiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiODE0NzZhMTUxMzgxNzRkYyIKKworWFRFQSBEZWNyeXB0IENCQyAjNQoreHRlYV9kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiI0MTQyNDM0NDQ1NDY0NzQ4IjoiNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDEiOiIzMWEzNjExOTJiMDgzMTFkMzFhMDYzMWMyZjBmMzcxNCIKKworWFRFQSBEZWNyeXB0IENCQyAjNgoreHRlYV9kZWNyeXB0X2NiYzoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOiIwMDAwMDAwMDAwMDAwMDAwIjoiNWE1YjZlMjc4OTQ4ZDc3ZjcwZTEyMjVkNmU0ZTc2NTVlNzhmMmQxMzc0NDM0MWQ4IjoiYzFlMmRiYmY2N2VlNzg2ZTI5ZTA1MWJlYTE4YzZhYmM2NmYxZGU1YzJkYWVmYzJhIgorCitYVEVBIFNlbGZ0ZXN0CitkZXBlbmRzX29uOk1CRURUTFNfU0VMRl9URVNUCit4dGVhX3NlbGZ0ZXN0OgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeHRlYS5mdW5jdGlvbiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzcxNGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeHRlYS5mdW5jdGlvbgpAQCAtMCwwICsxLDEyOSBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAibWJlZHRscy94dGVhLmgiCisvKiBFTkRfSEVBREVSICovCisKKy8qIEJFR0lOX0RFUEVOREVOQ0lFUworICogZGVwZW5kc19vbjpNQkVEVExTX1hURUFfQworICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgeHRlYV9lbmNyeXB0X2VjYiggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9zcmNfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CisKKyAgICBtZW1zZXQoa2V5X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoc3JjX3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQoZHN0X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworCisgICAgdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIHNyY19zdHIsIGhleF9zcmNfc3RyaW5nICk7CisKKyAgICBtYmVkdGxzX3h0ZWFfc2V0dXAoICZjdHgsIGtleV9zdHIgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19YVEVBX0VOQ1JZUFQsIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgOCApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIHh0ZWFfZGVjcnlwdF9lY2IoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfc3JjX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CisgICAgbWJlZHRsc194dGVhX2NvbnRleHQgY3R4OworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc194dGVhX3NldHVwKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfWFRFQV9ERUNSWVBULCBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIDggKTsKKworICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCit2b2lkIHh0ZWFfZW5jcnlwdF9jYmMoIGNoYXIgKmhleF9rZXlfc3RyaW5nLCBjaGFyICpoZXhfaXZfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfc3JjX3N0cmluZywgY2hhciAqaGV4X2RzdF9zdHJpbmcgKQoreworICAgIHVuc2lnbmVkIGNoYXIga2V5X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDBdOworICAgIHVuc2lnbmVkIGNoYXIgaXZfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKKyAgICBzaXplX3QgbGVuOworICAgIG1iZWR0bHNfeHRlYV9jb250ZXh0IGN0eDsKKworICAgIG1lbXNldChrZXlfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChzcmNfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChkc3Rfc3RyLCAweDAwLCAxMDApOworICAgIG1lbXNldChpdl9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KG91dHB1dCwgMHgwMCwgMTAwKTsKKworICAgIHVuaGV4aWZ5KCBrZXlfc3RyLCBoZXhfa2V5X3N0cmluZyApOworICAgIHVuaGV4aWZ5KCBpdl9zdHIsIGhleF9pdl9zdHJpbmcgKTsKKyAgICBsZW4gPSB1bmhleGlmeSggc3JjX3N0ciwgaGV4X3NyY19zdHJpbmcgKTsKKworICAgIG1iZWR0bHNfeHRlYV9zZXR1cCggJmN0eCwga2V5X3N0ciApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3h0ZWFfY3J5cHRfY2JjKCAmY3R4LCBNQkVEVExTX1hURUFfRU5DUllQVCwgbGVuLCBpdl9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLCBvdXRwdXQgKSA9PSAwICk7CisgICAgaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIGxlbiApOworCisgICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KK3ZvaWQgeHRlYV9kZWNyeXB0X2NiYyggY2hhciAqaGV4X2tleV9zdHJpbmcsIGNoYXIgKmhleF9pdl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9zcmNfc3RyaW5nLCBjaGFyICpoZXhfZHN0X3N0cmluZyApCit7CisgICAgdW5zaWduZWQgY2hhciBrZXlfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyWzEwMF07CisgICAgdW5zaWduZWQgY2hhciBpdl9zdHJbMTAwXTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOworICAgIHNpemVfdCBsZW47CisgICAgbWJlZHRsc194dGVhX2NvbnRleHQgY3R4OworCisgICAgbWVtc2V0KGtleV9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KHNyY19zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGRzdF9zdHIsIDB4MDAsIDEwMCk7CisgICAgbWVtc2V0KGl2X3N0ciwgMHgwMCwgMTAwKTsKKyAgICBtZW1zZXQob3V0cHV0LCAweDAwLCAxMDApOworCisgICAgdW5oZXhpZnkoIGtleV9zdHIsIGhleF9rZXlfc3RyaW5nICk7CisgICAgdW5oZXhpZnkoIGl2X3N0ciwgaGV4X2l2X3N0cmluZyApOworICAgIGxlbiA9IHVuaGV4aWZ5KCBzcmNfc3RyLCBoZXhfc3JjX3N0cmluZyApOworCisgICAgbWJlZHRsc194dGVhX3NldHVwKCAmY3R4LCBrZXlfc3RyICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfWFRFQV9ERUNSWVBULCBsZW4sIGl2X3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHIsIG91dHB1dCApID09IDAgKTsKKyAgICBoZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgbGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NFTEZfVEVTVCAqLwordm9pZCB4dGVhX3NlbGZ0ZXN0KCkKK3sKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX3NlbGZfdGVzdCggMSApID09IDAgKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvYWVzY3J5cHQyLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvYWVzY3J5cHQyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzZTYwMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9hZXNjcnlwdDIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xhZXNcYWVzY3J5cHQyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+YWVzY3J5cHQyPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9iZW5jaG1hcmsudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9iZW5jaG1hcmsudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQyOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2JlbmNobWFyay52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHRlc3RcYmVuY2htYXJrLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+YmVuY2htYXJrPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X2FwcC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NlcnRfYXBwLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlYzU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X2FwcC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHg1MDlcY2VydF9hcHAuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5jZXJ0X2FwcDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF9yZXEudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X3JlcS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzJlNTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY2VydF9yZXEudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x4NTA5XGNlcnRfcmVxLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntDOUUyQUIxNS04QUVGLURENDgtNjBDMy01NTdFQ0M1MjE1QkV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Y2VydF9yZXE8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NlcnRfd3JpdGUudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X3dyaXRlLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNTZiMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jZXJ0X3dyaXRlLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNceDUwOVxjZXJ0X3dyaXRlLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Y2VydF93cml0ZTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvY3JsX2FwcC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NybF9hcHAudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3M2JhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NybF9hcHAudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x4NTA5XGNybF9hcHAuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0RCOTA0Qjg1LUFEMzEtQjdGQi0xMTRGLTg4NzYwQ0M0ODVGMn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5jcmxfYXBwPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jcnlwdF9hbmRfaGFzaC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2NyeXB0X2FuZF9oYXNoLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NzQ5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9jcnlwdF9hbmRfaGFzaC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXGFlc1xjcnlwdF9hbmRfaGFzaC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmNyeXB0X2FuZF9oYXNoPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9jbGllbnQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9jbGllbnQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJhN2UyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2RoX2NsaWVudC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlcZGhfY2xpZW50LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+ZGhfY2xpZW50PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9nZW5wcmltZS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2RoX2dlbnByaW1lLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZTgxMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9nZW5wcmltZS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlcZGhfZ2VucHJpbWUuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5kaF9nZW5wcmltZTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfc2VydmVyLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZGhfc2VydmVyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5OTEyZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kaF9zZXJ2ZXIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XGRoX3NlcnZlci5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57OEQ5MUI4MDQtRTJDRS0xNDJELThFMDYtRkJCMDM3RUQxRjY1fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmRoX3NlcnZlcjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZHRsc19jbGllbnQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kdGxzX2NsaWVudC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMjhkM2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZHRsc19jbGllbnQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcZHRsc19jbGllbnQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5kdGxzX2NsaWVudDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZHRsc19zZXJ2ZXIudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9kdGxzX3NlcnZlci52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YmI0YjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZHRsc19zZXJ2ZXIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcZHRsc19zZXJ2ZXIuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0JGRTg5RUFBLUQ5OEItMzRFMS1DNUE0LTQwODBGNkZGRTMxN308L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5kdGxzX3NlcnZlcjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZWNkc2EudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9lY2RzYS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDcwY2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZWNkc2EudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XGVjZHNhLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntGNTgxNDJDQy0wQ0M3LTBCMTgtNUEwRi01MzY0MkNGQkExOEV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+ZWNkc2E8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9lbnRyb3B5LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZ2VuX2VudHJvcHkudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU1ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9lbnRyb3B5LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccmFuZG9tXGdlbl9lbnRyb3B5LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Z2VuX2VudHJvcHk8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9rZXkudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fa2V5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlZWM0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9nZW5fa2V5LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxnZW5fa2V5LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Z2VuX2tleTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZ2VuX3JhbmRvbV9jdHJfZHJiZy52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9yYW5kb21fY3RyX2RyYmcudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIwYjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9yYW5kb21fY3RyX2RyYmcudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xyYW5kb21cZ2VuX3JhbmRvbV9jdHJfZHJiZy5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmdlbl9yYW5kb21fY3RyX2RyYmc8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9yYW5kb21faGF2ZWdlLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZ2VuX3JhbmRvbV9oYXZlZ2UudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbl9yYW5kb21faGF2ZWdlLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccmFuZG9tXGdlbl9yYW5kb21faGF2ZWdlLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+Z2VuX3JhbmRvbV9oYXZlZ2U8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbmVyaWNfc3VtLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvZ2VuZXJpY19zdW0udmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODAxZWVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2dlbmVyaWNfc3VtLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcaGFzaFxnZW5lcmljX3N1bS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RDA3MUNDRjctQUNBMC0yMUY4LUQzODItNTJBNzU5QUVBMjYxfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPmdlbmVyaWNfc3VtPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9oZWxsby52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2hlbGxvLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0YWJlZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9oZWxsby52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXGhhc2hcaGVsbG8uYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5oZWxsbzwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAva2V5X2FwcC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2tleV9hcHAudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYxMGYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2tleV9hcHAudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XGtleV9hcHAuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezEwQUUzNzZGLTFBNzAtMDI5Ny0wMjE2LTFGRDAxQUQxNUQxOX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5rZXlfYXBwPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9rZXlfYXBwX3dyaXRlci52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL2tleV9hcHBfd3JpdGVyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2ODU2MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9rZXlfYXBwX3dyaXRlci52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlca2V5X2FwcF93cml0ZXIuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5rZXlfYXBwX3dyaXRlcjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy5zbG4gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhOTg2YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9tYmVkVExTLnNsbgpAQCAtMCwwICsxLDYzNyBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMAorIyBWaXN1YWwgQysrIEV4cHJlc3MgMjAxMAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYmVkVExTIiwgIm1iZWRUTFMudmN4cHJvaiIsICJ7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSIKK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYWVzY3J5cHQyIiwgImFlc2NyeXB0Mi52Y3hwcm9qIiwgIns3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImNyeXB0X2FuZF9oYXNoIiwgImNyeXB0X2FuZF9oYXNoLnZjeHByb2oiLCAiezVEQkI5RkMzLTZGRDYtQ0E4RC1FMEZBLTM1RjFFNzVFRkFFN30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiaGVsbG8iLCAiaGVsbG8udmN4cHJvaiIsICJ7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJnZW5lcmljX3N1bSIsICJnZW5lcmljX3N1bS52Y3hwcm9qIiwgIntEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImRoX2NsaWVudCIsICJkaF9jbGllbnQudmN4cHJvaiIsICJ7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJkaF9nZW5wcmltZSIsICJkaF9nZW5wcmltZS52Y3hwcm9qIiwgIns3MTg5NjBEOS01REE2LTdCNTYtMzlBRC02MzdFODEwNzZDNzF9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImRoX3NlcnZlciIsICJkaF9zZXJ2ZXIudmN4cHJvaiIsICJ7OEQ5MUI4MDQtRTJDRS0xNDJELThFMDYtRkJCMDM3RUQxRjY1fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJlY2RoX2N1cnZlMjU1MTkiLCAiZWNkaF9jdXJ2ZTI1NTE5LnZjeHByb2oiLCAiezgyRUU0OTdFLTEyQ0MtN0M1Qi1BMDcyLTY2NTY3OEFDQjQzRX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZWNkc2EiLCAiZWNkc2EudmN4cHJvaiIsICJ7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJnZW5fa2V5IiwgImdlbl9rZXkudmN4cHJvaiIsICJ7QkY3ODJBNTAtRTlBRS0wMENDLUMyOEEtQzlEQThBQUI0RDUyfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJrZXlfYXBwIiwgImtleV9hcHAudmN4cHJvaiIsICJ7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJrZXlfYXBwX3dyaXRlciIsICJrZXlfYXBwX3dyaXRlci52Y3hwcm9qIiwgIntFOEVENzlGOS04MDM0LTFCMDktMjYzRS1EM0Y4QzRDNUM0QTh9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1waV9kZW1vIiwgIm1waV9kZW1vLnZjeHByb2oiLCAie0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGtfZGVjcnlwdCIsICJwa19kZWNyeXB0LnZjeHByb2oiLCAiezFFQzZDQkEzLTYxODctRDQ1Ni1EOUI3LUEzNTM5OTM5NUQ3MX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGtfZW5jcnlwdCIsICJwa19lbmNyeXB0LnZjeHByb2oiLCAiezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGtfc2lnbiIsICJwa19zaWduLnZjeHByb2oiLCAie0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicGtfdmVyaWZ5IiwgInBrX3ZlcmlmeS52Y3hwcm9qIiwgIntDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInJzYV9nZW5rZXkiLCAicnNhX2dlbmtleS52Y3hwcm9qIiwgIntGNDcyNDc1Qy1GNjc3LTBFN0YtRjEyNy00NUJGNUI2NEY2MjJ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInJzYV9kZWNyeXB0IiwgInJzYV9kZWNyeXB0LnZjeHByb2oiLCAie0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicnNhX2VuY3J5cHQiLCAicnNhX2VuY3J5cHQudmN4cHJvaiIsICJ7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyc2Ffc2lnbiIsICJyc2Ffc2lnbi52Y3hwcm9qIiwgInsxMDc5MEY0OS02ODg3LUFBQjYtMkQ4Ni1CQ0JENTE2RjhEMjZ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInJzYV92ZXJpZnkiLCAicnNhX3ZlcmlmeS52Y3hwcm9qIiwgIns2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInJzYV9zaWduX3BzcyIsICJyc2Ffc2lnbl9wc3MudmN4cHJvaiIsICJ7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyc2FfdmVyaWZ5X3BzcyIsICJyc2FfdmVyaWZ5X3Bzcy52Y3hwcm9qIiwgIns5NUM1MDg2NC04NTRDLTJBMTEtNEM5MS1CQ0U2NTRFMzQ0RkJ9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImR0bHNfY2xpZW50IiwgImR0bHNfY2xpZW50LnZjeHByb2oiLCAie0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZHRsc19zZXJ2ZXIiLCAiZHRsc19zZXJ2ZXIudmN4cHJvaiIsICJ7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2xfY2xpZW50MSIsICJzc2xfY2xpZW50MS52Y3hwcm9qIiwgIns0ODdBMkY4MC0zQ0EzLTY3OEQtODhENS04MjE5NDg3MkNGMDh9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNzbF9jbGllbnQyIiwgInNzbF9jbGllbnQyLnZjeHByb2oiLCAiezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsX3NlcnZlciIsICJzc2xfc2VydmVyLnZjeHByb2oiLCAie0UwOEUwMDY1LTg5NkEtNzQ4Ny1ERUE1LUQzQjgwQjcxRjk3NX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsX3NlcnZlcjIiLCAic3NsX3NlcnZlcjIudmN4cHJvaiIsICJ7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2xfZm9ya19zZXJ2ZXIiLCAic3NsX2Zvcmtfc2VydmVyLnZjeHByb2oiLCAiezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWluaV9jbGllbnQiLCAibWluaV9jbGllbnQudmN4cHJvaiIsICJ7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2xfbWFpbF9jbGllbnQiLCAic3NsX21haWxfY2xpZW50LnZjeHByb2oiLCAiezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ2VuX2VudHJvcHkiLCAiZ2VuX2VudHJvcHkudmN4cHJvaiIsICJ7REU2OTUwNjQtMTNDMy0xOEIwLTM3OEQtOEIyMjY3MkJGM0Y0fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJnZW5fcmFuZG9tX2hhdmVnZSIsICJnZW5fcmFuZG9tX2hhdmVnZS52Y3hwcm9qIiwgIns3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImdlbl9yYW5kb21fY3RyX2RyYmciLCAiZ2VuX3JhbmRvbV9jdHJfZHJiZy52Y3hwcm9qIiwgIns1RkNDNzFGNi1GRjMzLUVCQ0YtRkJBMi04RkM3ODNENTMxOEV9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNzbF9jZXJ0X3Rlc3QiLCAic3NsX2NlcnRfdGVzdC52Y3hwcm9qIiwgInszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJlbmNobWFyayIsICJiZW5jaG1hcmsudmN4cHJvaiIsICJ7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzZWxmdGVzdCIsICJzZWxmdGVzdC52Y3hwcm9qIiwgIns3REJDNUY3Ny0zREExLTVGNzMtODQyMS1FNjkzRDk1RkM2NkF9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInVkcF9wcm94eSIsICJ1ZHBfcHJveHkudmN4cHJvaiIsICJ7N0UyQzgwRkUtM0NDMy04MkI0LTBDQUQtNjVEQzIzM0RFMTNBfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJwZW0yZGVyIiwgInBlbTJkZXIudmN4cHJvaiIsICJ7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzdHJlcnJvciIsICJzdHJlcnJvci52Y3hwcm9qIiwgInsyM0VGNzM1Qy1DQzRDLTNFQzQtQTc1RS05MDNEQjM0MEYwNEF9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0gPSB7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImNlcnRfYXBwIiwgImNlcnRfYXBwLnZjeHByb2oiLCAie0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiY3JsX2FwcCIsICJjcmxfYXBwLnZjeHByb2oiLCAie0RCOTA0Qjg1LUFEMzEtQjdGQi0xMTRGLTg4NzYwQ0M0ODVGMn0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fSA9IHs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiY2VydF9yZXEiLCAiY2VydF9yZXEudmN4cHJvaiIsICJ7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJjZXJ0X3dyaXRlIiwgImNlcnRfd3JpdGUudmN4cHJvaiIsICJ7MzVFNTJFNDYtM0JBOS00MzYxLTQxRDMtNTM2NjNDMkU5QjhBfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJyZXFfYXBwIiwgInJlcV9hcHAudmN4cHJvaiIsICJ7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0NkNGMkQyNS02QTM2LTQxODktQjU5Qy1FNDgxNTM4OEU1NTR9ID0gezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQKKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKKwkJUmVsZWFzZXx4NjQgPSBSZWxlYXNlfHg2NAorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezQ2Q0YyRDI1LTZBMzYtNDE4OS1CNTlDLUU0ODE1Mzg4RTU1NH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezdBODUxREJELTdENTctRThGNC04NUU1LUNDQTcyQUVBN0RGOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezdBODUxREJELTdENTctRThGNC04NUU1LUNDQTcyQUVBN0RGOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezdBODUxREJELTdENTctRThGNC04NUU1LUNDQTcyQUVBN0RGOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezdBODUxREJELTdENTctRThGNC04NUU1LUNDQTcyQUVBN0RGOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3QTg1MURCRC03RDU3LUU4RjQtODVFNS1DQ0E3MkFFQTdERjh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezdBODUxREJELTdENTctRThGNC04NUU1LUNDQTcyQUVBN0RGOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezdBODUxREJELTdENTctRThGNC04NUU1LUNDQTcyQUVBN0RGOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NURCQjlGQzMtNkZENi1DQThELUUwRkEtMzVGMUU3NUVGQUU3fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs1REJCOUZDMy02RkQ2LUNBOEQtRTBGQS0zNUYxRTc1RUZBRTd9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0IwMkQ0QUUxLTAyMTgtMUNENC1GNDRFLUVGQUUxOUIwMUI4RH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QjAyRDRBRTEtMDIxOC0xQ0Q0LUY0NEUtRUZBRTE5QjAxQjhEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtEMDcxQ0NGNy1BQ0EwLTIxRjgtRDM4Mi01MkE3NTlBRUEyNjF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0QwNzFDQ0Y3LUFDQTAtMjFGOC1EMzgyLTUyQTc1OUFFQTI2MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NEQyOUJFNEEtOTc5Qy1DNUFFLTQ0QjUtMzBGQjM3RDhENEVFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0RDI5QkU0QS05NzlDLUM1QUUtNDRCNS0zMEZCMzdEOEQ0RUV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezcxODk2MEQ5LTVEQTYtN0I1Ni0zOUFELTYzN0U4MTA3NkM3MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NzE4OTYwRDktNURBNi03QjU2LTM5QUQtNjM3RTgxMDc2QzcxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs4RDkxQjgwNC1FMkNFLTE0MkQtOEUwNi1GQkIwMzdFRDFGNjV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezhEOTFCODA0LUUyQ0UtMTQyRC04RTA2LUZCQjAzN0VEMUY2NX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7ODJFRTQ5N0UtMTJDQy03QzVCLUEwNzItNjY1Njc4QUNCNDNFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs4MkVFNDk3RS0xMkNDLTdDNUItQTA3Mi02NjU2NzhBQ0I0M0V9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0Y1ODE0MkNDLTBDQzctMEIxOC01QTBGLTUzNjQyQ0ZCQTE4RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RjU4MTQyQ0MtMENDNy0wQjE4LTVBMEYtNTM2NDJDRkJBMThFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtCRjc4MkE1MC1FOUFFLTAwQ0MtQzI4QS1DOURBOEFBQjRENTJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0JGNzgyQTUwLUU5QUUtMDBDQy1DMjhBLUM5REE4QUFCNEQ1Mn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MTBBRTM3NkYtMUE3MC0wMjk3LTAyMTYtMUZEMDFBRDE1RDE5fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsxMEFFMzc2Ri0xQTcwLTAyOTctMDIxNi0xRkQwMUFEMTVEMTl9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0U4RUQ3OUY5LTgwMzQtMUIwOS0yNjNFLUQzRjhDNEM1QzRBOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RThFRDc5RjktODAzNC0xQjA5LTI2M0UtRDNGOEM0QzVDNEE4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0E1OUZBQTBCLTlDMzQtMUY5OS03OTRELUEzNjVBM0FBOENDRX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MUVDNkNCQTMtNjE4Ny1ENDU2LUQ5QjctQTM1Mzk5Mzk1RDcxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsxRUM2Q0JBMy02MTg3LUQ0NTYtRDlCNy1BMzUzOTkzOTVENzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezU1MDA3MTc5LTc3NDYtOUNGQi05N0VDLTY1MTAyRkIyNzJDOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0YyRThDQTU1LTU5N0YtN0ZEQy02NDU2LUQ4NjUwRkI5NzBBM30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtDNDI5QjMzNi0xQjMwLTExOUMtM0IzNC0yMUExODZENjc0NEZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0Y0NzI0NzVDLUY2NzctMEU3Ri1GMTI3LTQ1QkY1QjY0RjYyMn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7RjQ3MjQ3NUMtRjY3Ny0wRTdGLUYxMjctNDVCRjVCNjRGNjIyfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtFMEQ3MUQ3Mi04REY0LUNDRkMtRUY2MC03NDFFQURBQjhCRjl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDA2Q0YxMkUtRjIyMi05MjczLTQxQkYtQjhBMDUyRkE1NTI3fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezEwNzkwRjQ5LTY4ODctQUFCNi0yRDg2LUJDQkQ1MTZGOEQyNn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MTA3OTBGNDktNjg4Ny1BQUI2LTJEODYtQkNCRDUxNkY4RDI2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezY4OUUyOENGLTg5RUQtQkEzOC0zQTE0LTc4QTc1RDg5MUQ0Nn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezY4OUUyOENGLTg5RUQtQkEzOC0zQTE0LTc4QTc1RDg5MUQ0Nn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezY4OUUyOENGLTg5RUQtQkEzOC0zQTE0LTc4QTc1RDg5MUQ0Nn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezY4OUUyOENGLTg5RUQtQkEzOC0zQTE0LTc4QTc1RDg5MUQ0Nn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezY4OUUyOENGLTg5RUQtQkEzOC0zQTE0LTc4QTc1RDg5MUQ0Nn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezY4OUUyOENGLTg5RUQtQkEzOC0zQTE0LTc4QTc1RDg5MUQ0Nn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RENEM0ExQjYtNUVDMS04MjY2LTkzRUYtQkQyQjlCRUZFMTJEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEQ0QzQTFCNi01RUMxLTgyNjYtOTNFRi1CRDJCOUJFRkUxMkR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezk1QzUwODY0LTg1NEMtMkExMS00QzkxLUJDRTY1NEUzNDRGQn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7OTVDNTA4NjQtODU0Qy0yQTExLTRDOTEtQkNFNjU0RTM0NEZCfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtGRTdBQjc4Ri1EQkYxLTA3MjEtMzUyMi0wRDdDMzAxMUQyRTV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0ZFN0FCNzhGLURCRjEtMDcyMS0zNTIyLTBEN0MzMDExRDJFNX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QkZFODlFQUEtRDk4Qi0zNEUxLUM1QTQtNDA4MEY2RkZFMzE3fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtCRkU4OUVBQS1EOThCLTM0RTEtQzVBNC00MDgwRjZGRkUzMTd9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezQ4N0EyRjgwLTNDQTMtNjc4RC04OEQ1LTgyMTk0ODcyQ0YwOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs0RTU5MEU5RC1FMjhGLTg3RkYtMzg1Qi1ENTg3MzYzODgyMzF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezRFNTkwRTlELUUyOEYtODdGRi0zODVCLUQ1ODczNjM4ODIzMX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtFMDhFMDA2NS04OTZBLTc0ODctREVBNS1EM0I4MEI3MUY5NzV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0E0REE3NDYzLTEwNDctQkRGNS1FMUIzLTU2MzJDQjU3M0Y0MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QTREQTc0NjMtMTA0Ny1CREY1LUUxQjMtNTYzMkNCNTczRjQxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs5MThDRDQwMi0wNDdELTg0NjctRTExQy1FMTEzMjA1M0Y5MTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QzRGRTI5RUEtMjY2RC01Mjk1LTQ4NDAtOTc2QjlCNUIzODQzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtDNEZFMjlFQS0yNjZELTUyOTUtNDg0MC05NzZCOUI1QjM4NDN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezdDNDg2M0ExLTk0MUEtQzVBRS1FMUY5LTMwRjA2MkU0QjJGRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtERTY5NTA2NC0xM0MzLTE4QjAtMzc4RC04QjIyNjcyQkYzRjR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0RFNjk1MDY0LTEzQzMtMThCMC0zNzhELThCMjI2NzJCRjNGNH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NzEyNTc4MDItQkJDQS05OUY1LUU5RDItOTA1NzM4RjMwODkzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs3MTI1NzgwMi1CQkNBLTk5RjUtRTlEMi05MDU3MzhGMzA4OTN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezVGQ0M3MUY2LUZGMzMtRUJDRi1GQkEyLThGQzc4M0Q1MzE4RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7NUZDQzcxRjYtRkYzMy1FQkNGLUZCQTItOEZDNzgzRDUzMThFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXszRkUwQzBFMS1EOUJBLTZBMjYtMzgwQy1GMjkzRTU0M0I5MTR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7OTBFRkQ5QTQtQzZCMC0zRUU4LTFGMDYtMEEwRTBENTVBRURBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs5MEVGRDlBNC1DNkIwLTNFRTgtMUYwNi0wQTBFMEQ1NUFFREF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezdEQkM1Rjc3LTNEQTEtNUY3My04NDIxLUU2OTNEOTVGQzY2QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezdFMkM4MEZFLTNDQzMtODJCNC0wQ0FELTY1REMyMzNERTEzQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7RDNDNkZCRDYtRDc4RS03MTgwLTgzNDUtNUUwOUI0OTJEQkVDfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezIzRUY3MzVDLUNDNEMtM0VDNC1BNzVFLTkwM0RCMzQwRjA0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJe0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJe0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJe0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtENEQ2OTFENC0xMzdDLUNCRkEtNzM1Qi1ENDY2MzZEN0U0RDh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJe0Q0RDY5MUQ0LTEzN0MtQ0JGQS03MzVCLUQ0NjYzNkQ3RTREOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXtEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXtEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXtEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7REI5MDRCODUtQUQzMS1CN0ZCLTExNEYtODg3NjBDQzQ4NUYyfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXtEQjkwNEI4NS1BRDMxLUI3RkItMTE0Ri04ODc2MENDNDg1RjJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0M5RTJBQjE1LThBRUYtREQ0OC02MEMzLTU1N0VDQzUyMTVCRX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAorCQl7QzlFMkFCMTUtOEFFRi1ERDQ4LTYwQzMtNTU3RUNDNTIxNUJFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKKwkJezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXszNUU1MkU0Ni0zQkE5LTQzNjEtNDFEMy01MzY2M0MyRTlCOEF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezM1RTUyRTQ2LTNCQTktNDM2MS00MUQzLTUzNjYzQzJFOUI4QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXs0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CisJCXs0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0CisJCXs0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NDg2QjEzNzUtNUNGQS1DMkQyLUREODktQzlGNDk3QkFEQ0IzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXs0ODZCMTM3NS01Q0ZBLUMyRDItREQ4OS1DOUY0OTdCQURDQjN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbgorCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9tYmVkVExTLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzBiYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qCkBAIC0wLDAgKzEsMjkxIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NDZDRjJEMjUtNkEzNi00MTg5LUI1OUMtRTQ4MTUzODhFNTU0fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm1iZWRUTFM8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNQkVEVExTX0VYUE9SVFM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxDb21waWxlQXM+Q29tcGlsZUFzQzwvQ29tcGlsZUFzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TUJFRFRMU19FWFBPUlRTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8Q29tcGlsZUFzPkNvbXBpbGVBc0M8L0NvbXBpbGVBcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01CRURUTFNfRVhQT1JUUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfV0lORE9XUztfVVNSRExMO01CRURUTFNfRVhQT1JUUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xhZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xhZXNuaS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGFyYzQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xhc24xLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYXNuMXdyaXRlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYmFzZTY0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYmlnbnVtLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcYmxvd2Zpc2guaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xibl9tdWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjYW1lbGxpYS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNjbS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNlcnRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY2hlY2tfY29uZmlnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY2lwaGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY2lwaGVyX2ludGVybmFsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY21hYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNvbXBhdC0xLjMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjb25maWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjdHJfZHJiZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGRlYnVnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcZGVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcZGhtLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcZWNkaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGVjZHNhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcZWNqcGFrZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGVjcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGVudHJvcHkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xlbnRyb3B5X3BvbGwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xlcnJvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGdjbS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGhhdmVnZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGhtYWNfZHJiZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXG1kLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbWQyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbWQ0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbWQ1LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbWRfaW50ZXJuYWwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xtZW1vcnlfYnVmZmVyX2FsbG9jLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbmV0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcbmV0X3NvY2tldHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xvaWQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xwYWRsb2NrLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccGVtLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccGsuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xwa19pbnRlcm5hbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHBrY3MxMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHBrY3MxMi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHBrY3M1LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccGxhdGZvcm0uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xwbGF0Zm9ybV90aW1lLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccmlwZW1kMTYwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNccnNhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcc2hhMS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNoYTI1Ni5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNoYTUxMi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNzbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNzbF9jYWNoZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHNzbF9jaXBoZXJzdWl0ZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xzc2xfY29va2llLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcc3NsX2ludGVybmFsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcc3NsX3RpY2tldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHRocmVhZGluZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHRpbWluZy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHZlcnNpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1x4NTA5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNceDUwOV9jcmwuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1x4NTA5X2NydC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXHg1MDlfY3NyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNceHRlYS5oIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcYWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGFlc25pLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGFyYzQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcYXNuMXBhcnNlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGFzbjF3cml0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxiYXNlNjQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcYmlnbnVtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGJsb3dmaXNoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGNhbWVsbGlhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGNjbS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjZXJ0cy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjaXBoZXIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcY2lwaGVyX3dyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcY21hYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjdHJfZHJiZy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxkZWJ1Zy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxkZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZGhtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGVjZGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZWNkc2EuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZWNqcGFrZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxlY3AuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcZWNwX2N1cnZlcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxlbnRyb3B5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGVudHJvcHlfcG9sbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxlcnJvci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxnY20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcaGF2ZWdlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XGhtYWNfZHJiZy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxtZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxtZDIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcbWQ0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XG1kNS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxtZF93cmFwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XG1lbW9yeV9idWZmZXJfYWxsb2MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcbmV0X3NvY2tldHMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcb2lkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBhZGxvY2suYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccGVtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBrLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBrX3dyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccGtjczExLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBrY3MxMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwa2NzNS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwa3BhcnNlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBrd3JpdGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccGxhdGZvcm0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccmlwZW1kMTYwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHJzYS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzaGExLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNoYTI1Ni5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzaGE1MTIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX2NhY2hlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNzbF9jaXBoZXJzdWl0ZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX2NsaS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzc2xfY29va2llLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNzbF9zcnYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3RpY2tldC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxzc2xfdGxzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHRocmVhZGluZy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx0aW1pbmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcdmVyc2lvbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx2ZXJzaW9uX2ZlYXR1cmVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHg1MDkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlceDUwOV9jcmVhdGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlceDUwOV9jcmwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlceDUwOV9jcnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlceDUwOV9jc3IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlceDUwOXdyaXRlX2NydC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx4NTA5d3JpdGVfY3NyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHh0ZWEuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWQ1c3VtLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWQ1c3VtLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxZDg5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9tZDVzdW0udmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xoYXNoXG1kNXN1bS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57ODBGRTFFQ0YtNjk5Mi1BMjc1LTc5NzMtRTI5NzY3MThEMTI4fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPm1kNXN1bTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWluaV9jbGllbnQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9taW5pX2NsaWVudC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjc1MjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbWluaV9jbGllbnQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcbWluaV9jbGllbnQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0M0RkUyOUVBLTI2NkQtNTI5NS00ODQwLTk3NkI5QjVCMzg0M308L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5taW5pX2NsaWVudDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbXBpX2RlbW8udmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9tcGlfZGVtby52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWQ4YmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvbXBpX2RlbW8udmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XG1waV9kZW1vLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntBNTlGQUEwQi05QzM0LTFGOTktNzk0RC1BMzY1QTNBQThDQ0V9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+bXBpX2RlbW88L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BlbTJkZXIudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wZW0yZGVyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlYjM0MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wZW0yZGVyLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcdXRpbFxwZW0yZGVyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntEM0M2RkJENi1ENzhFLTcxODAtODM0NS01RTA5QjQ5MkRCRUN9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cGVtMmRlcjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfZGVjcnlwdC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX2RlY3J5cHQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM3MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX2RlY3J5cHQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHBrX2RlY3J5cHQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezFFQzZDQkEzLTYxODctRDQ1Ni1EOUI3LUEzNTM5OTM5NUQ3MX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5wa19kZWNyeXB0PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa19lbmNyeXB0LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfZW5jcnlwdC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MWJlNjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfZW5jcnlwdC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlccGtfZW5jcnlwdC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NTUwMDcxNzktNzc0Ni05Q0ZCLTk3RUMtNjUxMDJGQjI3MkM4fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnBrX2VuY3J5cHQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3BrX3NpZ24udmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa19zaWduLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxNGY2YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa19zaWduLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxwa19zaWduLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntGMkU4Q0E1NS01OTdGLTdGREMtNjQ1Ni1EODY1MEZCOTcwQTN9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cGtfc2lnbjwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfdmVyaWZ5LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcGtfdmVyaWZ5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyYzdlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9wa192ZXJpZnkudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHBrX3ZlcmlmeS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57QzQyOUIzMzYtMUIzMC0xMTlDLTNCMzQtMjFBMTg2RDY3NDRGfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnBrX3ZlcmlmeTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcmVxX2FwcC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JlcV9hcHAudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM5NTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JlcV9hcHAudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x4NTA5XHJlcV9hcHAuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezQ4NkIxMzc1LTVDRkEtQzJEMi1ERDg5LUM5RjQ5N0JBRENCM308L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5yZXFfYXBwPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZGVjcnlwdC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9kZWNyeXB0LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5ZjM0MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZGVjcnlwdC52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHBrZXlccnNhX2RlY3J5cHQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0UwRDcxRDcyLThERjQtQ0NGQy1FRjYwLTc0MUVBREFCOEJGOX08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5yc2FfZGVjcnlwdDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2VuY3J5cHQudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZW5jcnlwdC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZmQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX2VuY3J5cHQudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHJzYV9lbmNyeXB0LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntEMDZDRjEyRS1GMjIyLTkyNzMtNDFCRi1COEEwNTJGQTU1Mjd9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX2VuY3J5cHQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9nZW5rZXkudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZ2Vua2V5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhNjE1NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfZ2Vua2V5LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxyc2FfZ2Vua2V5LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntGNDcyNDc1Qy1GNjc3LTBFN0YtRjEyNy00NUJGNUI2NEY2MjJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX2dlbmtleTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3NpZ24udmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2Ffc2lnbi52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGM1OTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3NpZ24udmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHJzYV9zaWduLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnsxMDc5MEY0OS02ODg3LUFBQjYtMkQ4Ni1CQ0JENTE2RjhEMjZ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX3NpZ248L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9zaWduX3Bzcy52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV9zaWduX3Bzcy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZmY4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3NpZ25fcHNzLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxyc2Ffc2lnbl9wc3MuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0RDRDNBMUI2LTVFQzEtODI2Ni05M0VGLUJEMkI5QkVGRTEyRH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5yc2Ffc2lnbl9wc3M8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3JzYV92ZXJpZnkudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfdmVyaWZ5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5ZjYzOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfdmVyaWZ5LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNccGtleVxyc2FfdmVyaWZ5LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns2ODlFMjhDRi04OUVELUJBMzgtM0ExNC03OEE3NUQ4OTFENDZ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX3ZlcmlmeTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3ZlcmlmeV9wc3MudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9yc2FfdmVyaWZ5X3Bzcy52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzM5NjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvcnNhX3ZlcmlmeV9wc3MudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xwa2V5XHJzYV92ZXJpZnlfcHNzLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns5NUM1MDg2NC04NTRDLTJBMTEtNEM5MS1CQ0U2NTRFMzQ0RkJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cnNhX3ZlcmlmeV9wc3M8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NlbGZ0ZXN0LnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc2VsZnRlc3QudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2IzZmFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NlbGZ0ZXN0LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcdGVzdFxzZWxmdGVzdC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57N0RCQzVGNzctM0RBMS01RjczLTg0MjEtRTY5M0Q5NUZDNjZBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNlbGZ0ZXN0PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zaGExc3VtLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc2hhMXN1bS52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDI0YWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc2hhMXN1bS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXGhhc2hcc2hhMXN1bS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RTkxRDEyRDctMDFDMC0zNTdGLUNBQjEtODQ3OEIwOTY3NDNDfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNoYTFzdW08L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NoYTJzdW0udmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zaGEyc3VtLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0MTBlZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zaGEyc3VtLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcaGFzaFxzaGEyc3VtLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns4QzVDRjA5NS1BMEE0LTU0RkItMEQ0OC04REYyQjdGRTRDQTV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+c2hhMnN1bTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX2NlcnRfdGVzdC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9jZXJ0X3Rlc3QudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTkyZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9jZXJ0X3Rlc3QudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1x0ZXN0XHNzbF9jZXJ0X3Rlc3QuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezNGRTBDMEUxLUQ5QkEtNkEyNi0zODBDLUYyOTNFNTQzQjkxNH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xfY2VydF90ZXN0PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2xpZW50MS52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9jbGllbnQxLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjNDIyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2xpZW50MS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHNzbFxzc2xfY2xpZW50MS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NDg3QTJGODAtM0NBMy02NzhELTg4RDUtODIxOTQ4NzJDRjA4fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNzbF9jbGllbnQxPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2xpZW50Mi52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9jbGllbnQyLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkN2JlMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfY2xpZW50Mi52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHNzbFxzc2xfY2xpZW50Mi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57NEU1OTBFOUQtRTI4Ri04N0ZGLTM4NUItRDU4NzM2Mzg4MjMxfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNzbF9jbGllbnQyPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfZm9ya19zZXJ2ZXIudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC9zc2xfZm9ya19zZXJ2ZXIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjY1NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9mb3JrX3NlcnZlci52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHNzbFxzc2xfZm9ya19zZXJ2ZXIuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWJlZFRMUy52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns0NmNmMmQyNS02YTM2LTQxODktYjU5Yy1lNDgxNTM4OGU1NTR9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezkxOENENDAyLTA0N0QtODQ2Ny1FMTFDLUUxMTMyMDUzRjkxNn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xfZm9ya19zZXJ2ZXI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9tYWlsX2NsaWVudC52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9tYWlsX2NsaWVudC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGJhYjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX21haWxfY2xpZW50LnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcc3NsXHNzbF9tYWlsX2NsaWVudC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57N0M0ODYzQTEtOTQxQS1DNUFFLUUxRjktMzBGMDYyRTRCMkZEfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNzbF9tYWlsX2NsaWVudDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPFBsYXRmb3JtVG9vbHNldD5XaW5kb3dzNy4xU0RLPC9QbGF0Zm9ybVRvb2xzZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU42NDtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTs8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX3NlcnZlci52Y3hwcm9qIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9zZXJ2ZXIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDllMmJjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9zZXJ2ZXIudmN4cHJvagpAQCAtMCwwICsxLDE2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxwcm9ncmFtc1xzc2xcc3NsX3NlcnZlci5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RTA4RTAwNjUtODk2QS03NDg3LURFQTUtRDNCODBCNzFGOTc1fTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnNzbF9zZXJ2ZXI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9zZXJ2ZXIyLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3NsX3NlcnZlcjIudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RmMGZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3NzbF9zZXJ2ZXIyLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcc3NsXHNzbF9zZXJ2ZXIyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntBNERBNzQ2My0xMDQ3LUJERjUtRTFCMy01NjMyQ0I1NzNGNDF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+c3NsX3NlcnZlcjI8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+V2luZG93czcuMVNESzwvUGxhdGZvcm1Ub29sc2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8U2hvd1Byb2dyZXNzPk5vdFNldDwvU2hvd1Byb2dyZXNzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPkRlYnVnPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgIDwvTGluaz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZT4KKyAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz5mYWxzZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lONjQ7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+UmVsZWFzZTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3N0cmVycm9yLnZjeHByb2ogYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8vdmlzdWFsYy9WUzIwMTAvc3RyZXJyb3IudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzA0ZTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3N0cmVycm9yLnZjeHByb2oKQEAgLTAsMCArMSwxNjkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5ccHJvZ3JhbXNcdXRpbFxzdHJlcnJvci5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYmVkVExTLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+ezQ2Y2YyZDI1LTZhMzYtNDE4OS1iNTljLWU0ODE1Mzg4ZTU1NH08L1Byb2plY3Q+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MjNFRjczNUMtQ0M0Qy0zRUM0LUE3NUUtOTAzREIzNDBGMDRBfTwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxSb290TmFtZXNwYWNlPnN0cmVycm9yPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC91ZHBfcHJveHkudmN4cHJvaiBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby92aXN1YWxjL1ZTMjAxMC91ZHBfcHJveHkudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODhkNWJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3Zpc3VhbGMvVlMyMDEwL3VkcF9wcm94eS52Y3hwcm9qCkBAIC0wLDAgKzEsMTY5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHByb2dyYW1zXHRlc3RcdWRwX3Byb3h5LmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1iZWRUTFMudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57NDZjZjJkMjUtNmEzNi00MTg5LWI1OWMtZTQ4MTUzODhlNTU0fTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns3RTJDODBGRS0zQ0MzLTgyQjQtMENBRC02NURDMjMzREUxM0F9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+dWRwX3Byb3h5PC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PldpbmRvd3M3LjFTREs8L1BsYXRmb3JtVG9vbHNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxTaG93UHJvZ3Jlc3M+Tm90U2V0PC9TaG93UHJvZ3Jlc3M+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5rZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpO21iZWRUTFMubGliPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+RGVidWc8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgPC9MaW5rPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPmZhbHNlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uLy4uL2luY2x1ZGU8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPFNob3dQcm9ncmVzcz5Ob3RTZXQ8L1Nob3dQcm9ncmVzcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmtlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk7bWJlZFRMUy5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5EZWJ1ZzwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICA8L0xpbms+CisgICAgPFByb2plY3RSZWZlcmVuY2U+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+ZmFsc2U8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li4vLi4vaW5jbHVkZTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz5SZWxlYXNlPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTttYmVkVExTLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjY0O05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLi8uLi9pbmNsdWRlPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlJlbGVhc2U8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpOzwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9jcmVhdGUtbW9kdWxlLnNoIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2NyZWF0ZS1tb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGM3OWViZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9jcmVhdGUtbW9kdWxlLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWV1CisKKyMgcmVsYXRpdmUgdG8gdGhlIHNjcmlwdCdzIGRpcmVjdG9yeQorVFJFRT0uLgorREVTVD1tb2R1bGUKKworIyBtYWtlIHN1cmUgd2UncmUgcnVubmluZyBpbiBvdXIgb3duIGRpcmVjdG9yeQoraWYgWyAtZiBjcmVhdGUtbW9kdWxlLnNoIF07IHRoZW4gOjsgZWxzZQorICAgIGNkICQoIGRpcm5hbWUgJDAgKQorICAgIGlmIFsgLWYgY3JlYXRlLW1vZHVsZS5zaCBdOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgZWNobyAiUGxlYXNlIHJ1biB0aGUgc2NyaXB0IGZyb20gaXMgZGlyZWN0b3J5LiIgPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCisjIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gYnVpbGQgdGhlIG1vZHVsZSwgdGhlbiByc3luYyB0byBERVNUCisjIHRoaXMgYWxsb3dzIHRvdWNoaW5nIG9ubHkgbmV3IGZpbGVzLCBmb3IgbW9yZSBlZmZpY2llbnQgcmUtYnVpbGRzCitUTVA9JERFU1QtdG1wCitybSAtcmYgJFRNUAorCitta2RpciAtcCAkVE1QL21iZWR0bHMgJFRNUC9zb3VyY2UKK2NwICRUUkVFL2luY2x1ZGUvbWJlZHRscy8qLmggJFRNUC9tYmVkdGxzCitjcCAkVFJFRS9saWJyYXJ5LyouYyAkVE1QL3NvdXJjZQorCisjIHRlbXBvcmFyeSwgc2hvdWxkIGRlcGVuZCBvbiBleHRlcm5hbCBtb2R1bGUgbGF0ZXIKK2NwIGRhdGEvZW50cm9weV9oYXJkd2FyZV9wb2xsLmMgJFRNUC9zb3VyY2UKK2NwIGRhdGEvdGFyZ2V0X2NvbmZpZy5oICRUTVAvbWJlZHRscworCitkYXRhL2FkanVzdC1jb25maWcuc2ggJFRSRUUvc2NyaXB0cy9jb25maWcucGwgJFRNUC9tYmVkdGxzL2NvbmZpZy5oCisKK21rZGlyIC1wICRUTVAvdGVzdAorY3AgLXIgZGF0YS9leGFtcGxlLSogJFRNUC90ZXN0CisjIGxhdGVyIHdlIHNob3VsZCBoYXZlIHRoZSBnZW5lcmF0ZWQgdGVzdCBzdWl0ZXMgaGVyZSB0b28KKworY3AgZGF0YS9tb2R1bGUuanNvbiAkVE1QCitjcCBkYXRhL1JFQURNRS5tZCAkVE1QCisKK2NwIC4uL0xJQ0VOU0UgJFRNUAoraWYgWyAtZiAuLi9hcGFjaGUtMi4wLnR4dCBdOyB0aGVuIGNwIC4uL2FwYWNoZS0yLjAudHh0ICRUTVA7IGZpCisKK21rZGlyIC1wICRERVNUCityc3luYyAtY3IgLS1kZWxldGUgLS1leGNsdWRlIGJ1aWxkIC0tZXhjbHVkZSB5b3R0YV9cKiAkVE1QLyAkREVTVC8KK3JtIC1yZiAkVE1QCisKK2VjaG8gIm1iZWQgVExTIHlvdHRhIG1vZHVsZSBjcmVhdGVkIGluICckUFdELyRERVNUJy4iCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0OGFhYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL1JFQURNRS5tZApAQCAtMCwwICsxLDEwMyBAQAorIyBtYmVkIFRMUworCittYmVkIFRMUyBtYWtlcyBpdCB0cml2aWFsbHkgZWFzeSBmb3IgZGV2ZWxvcGVycyB0byBpbmNsdWRlIGNyeXB0b2dyYXBoaWMgYW5kIFNTTC9UTFMgY2FwYWJpbGl0aWVzIGluIHRoZWlyIGVtYmVkZGVkIHByb2R1Y3RzLCB3aXRoIGEgbWluaW1hbCBjb2RlIGZvb3RwcmludC4gSXQgb2ZmZXJzIGFuIFNTTCBsaWJyYXJ5IHdpdGggYW4gaW50dWl0aXZlIEFQSSBhbmQgcmVhZGFibGUgc291cmNlIGNvZGUuCisKKyoqTm90ZToqKiBUaGUgY3VycmVudCByZWxlYXNlIGlzIGJldGEsIGFuZCBpbXBsZW1lbnRzIG5vIHNlY3VyZSBzb3VyY2Ugb2YgcmFuZG9tIG51bWJlcnMsIHdlYWtlbmluZyBpdHMgc2VjdXJpdHkuCisKK0N1cnJlbnRseSB0aGUgb25seSBzdXBwb3J0ZWQgeW90dGEgdGFyZ2V0cyBhcmU6CistIGBmcmRtLWs2NGYtZ2NjYAorLSBgZnJkbS1rNjRmLWFybWNjYAorLSBgeDg2LWxpbnV4LW5hdGl2ZWAKKy0gYHg4Ni1vc3gtbmF0aXZlYAorCisjIyBTYW1wbGUgcHJvZ3JhbXMKKworVGhpcyByZWxlYXNlIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXM6CisKKzEuIFsqKlNlbGYgdGVzdDoqKl0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9ibG9iL2RldmVsb3BtZW50L3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdCkgVGVzdHMgZGlmZmVyZW50IGJhc2ljIGZ1bmN0aW9ucyBpbiB0aGUgbWJlZCBUTFMgbGlicmFyeS4KKworMi4gWyoqQmVuY2htYXJrOioqXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzL2Jsb2IvZGV2ZWxvcG1lbnQveW90dGEvZGF0YS9leGFtcGxlLWJlbmNobWFyaykgTWVhc3VyZXMgdGhlIHRpbWUgdGFrZW4gdG8gcGVyZm9ybSBiYXNpYyBjcnlwdG9ncmFwaGljIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBsaWJyYXJ5LgorCiszLiBbKipIYXNoaW5nOioqXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzL2Jsb2IvZGV2ZWxvcG1lbnQveW90dGEvZGF0YS9leGFtcGxlLWhhc2hpbmcpIERlbW9uc3RyYXRlcyB0aGUgdmFyaW91cyBBUElzIGZvciBjb21wdXRpbmcgaGFzaGVzIG9mIGRhdGEgKGFsc28ga25vd24gYXMgbWVzc2FnZSBkaWdlc3RzKSB3aXRoIFNIQS0yNTYuCisKKzQuIFsqKkF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbjoqKl0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9ibG9iL2RldmVsb3BtZW50L3lvdHRhL2RhdGEvZXhhbXBsZS1hdXRoY3J5cHQpIERlbW9uc3RyYXRlcyB1c2FnZSBvZiB0aGUgQ2lwaGVyIEFQSSBmb3IgZW5jcnlwdGluZyBhbmQgYXV0aGVudGljYXRpbmcgZGF0YSB3aXRoIEFFUy1DQ00uCisKK1RoZXNlIGV4YW1wbGVzIGFyZSBpbnRlZ3JhdGVkIGFzIHlvdHRhIHRlc3RzLCBzbyB0aGF0IHRoZXkgYXJlIGJ1aWx0IGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgYnVpbGQgbWJlZCBUTFMuIEVhY2ggb2YgdGhlbSBjb21lcyB3aXRoIGNvbXBsZXRlIHVzYWdlIGluc3RydWN0aW9ucyBhcyBhIFJlYWRtZSBmaWxlIGluIHRoZSByZXBvc2l0b3J5LgorCisjIyBQZXJmb3JtaW5nIFRMUyBhbmQgRFRMUyBjb25uZWN0aW9ucworCitBIGhpZ2gtbGV2ZWwgQVBJIGZvciBwZXJmb3JtaW5nIFRMUyBhbmQgRFRMUyBjb25uZWN0aW9ucyB3aXRoIG1iZWQgVExTIGluIG1iZWQgT1MgaXMgcHJvdmlkZWQgaW4gYSBzZXBhcmF0ZSB5b3R0YSBtb2R1bGU6IFttYmVkLXRscy1zb2NrZXRzXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkLXRscy1zb2NrZXRzKS4gV2UgcmVjb21tZW5kIHRoaXMgQVBJIGZvciBUTFMgYW5kIERUTFMgY29ubmVjdGlvbnMuIEl0IGlzIHZlcnkgc2ltaWxhciB0byB0aGUgQVBJIHByb3ZpZGVkIGJ5IHRoZSBbc29ja2V0c10oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvc29ja2V0cykgbW9kdWxlIGZvciB1bmVuY3J5cHRlZCBUQ1AgYW5kIFVEUCBjb25uZWN0aW9ucy4KKworVGhlIGBtYmVkLXRscy1zb2NrZXRzYCBtb2R1bGUgaW5jbHVkZXMgYSBjb21wbGV0ZSBbZXhhbXBsZSBUTFMgY2xpZW50XShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkLXRscy1zb2NrZXRzL2Jsb2IvbWFzdGVyL3Rlc3QvdGxzLWNsaWVudC9tYWluLmNwcCkgd2l0aCBbdXNhZ2UgaW5zdHJ1Y3Rpb25zXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkLXRscy1zb2NrZXRzL2Jsb2IvbWFzdGVyL3Rlc3QvdGxzLWNsaWVudC9SRUFETUUubWQpLgorCisjIyBDb25maWd1cmluZyBtYmVkIFRMUyBmZWF0dXJlcworCittYmVkIFRMUyBtYWtlcyBpdCBlYXN5IHRvIGRpc2FibGUgYW55IGZlYXR1cmUgZHVyaW5nIGNvbXBpbGF0aW9uLCBpZiB0aGF0IGZlYXR1cmUgaXNuJ3QgcmVxdWlyZWQgZm9yIGEgcGFydGljdWxhciBwcm9qZWN0LiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGVuYWJsZXMgYWxsIG1vZGVybiBhbmQgd2lkZWx5LXVzZWQgZmVhdHVyZXMsIHdoaWNoIHNob3VsZCBtZWV0IHRoZSBuZWVkcyBvZiBuZXcgcHJvamVjdHMsIGFuZCBkaXNhYmxlcyBhbGwgZmVhdHVyZXMgdGhhdCBhcmUgb2xkZXIgb3IgbGVzcyBjb21tb24sIHRvIG1pbmltaXplIHRoZSBjb2RlIGZvb3RwcmludC4KKworVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbXBpbGF0aW9uIGZsYWdzIGlzIGF2YWlsYWJsZSBpbiB0aGUgZnVsbHkgZG9jdW1lbnRlZCBbY29uZmlnLmggZmlsZV0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9ibG9iL2RldmVsb3BtZW50L2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCkuCisKK0lmIHlvdSBuZWVkIHRvIGFkanVzdCB0aG9zZSBmbGFncywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGNvbmZpZ3VyYXRpb24tYWRqdXN0bWVudCBmaWxlIHdpdGggc3VpdGFibGUgYCNkZWZpbmVgIGFuZCBgI3VuZGVmYCBzdGF0ZW1lbnRzLiBUaGVzZSB3aWxsIGJlIGluY2x1ZGVkIGJldHdlZW4gdGhlIGRlZmF1bHQgZGVmaW5pdGlvbnMgYW5kIHRoZSBzYW5pdHkgY2hlY2tzLiBZb3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgYmUgaW4geW91ciBhcHBsaWNhdGlvbidzIGluY2x1ZGUgZGlyZWN0b3J5LCBhbmQgY2FuIGJlIG5hbWVkIGZyZWVseTsgeW91IGp1c3QgbmVlZCB0byBsZXQgbWJlZCBUTFMga25vdyB0aGUgZmlsZSdzIG5hbWUuIFRvIGRvIHRoYXQsIHVzZSB5b3R0YSdzIFtjb25maWd1cmF0aW9uIHN5c3RlbV0oaHR0cDovL2RvY3MueW90dGFidWlsZC5vcmcvcmVmZXJlbmNlL2NvbmZpZy5odG1sKS4gVGhlIGZpbGUncyBuYW1lIHNob3VsZCBiZSBpbiB5b3VyIGBjb25maWcuanNvbmAgZmlsZSwgdW5kZXIgbWJlZHRscywgYXMgdGhlIGtleSBgdXNlci1jb25maWctZmlsZWAuCisKK0ZvciBleGFtcGxlLCBpbiBhbiBhcHBsaWNhdGlvbiBjYWxsZWQgYG15YXBwYCwgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBFQyBKLVBBS0Uga2V5IGV4Y2hhbmdlIGFuZCBkaXNhYmxlIHRoZSBDQkMgY2lwaGVyIG1vZGUsIHlvdSBjYW4gY3JlYXRlIGEgZmlsZSBuYW1lZCAgYG1iZWR0bHMtY29uZmlnLWNoYW5nZXMuaGAgaW4gdGhlIGBteWFwcGAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBsaW5lczoKKworICAgICNkZWZpbmUgTUJFRFRMU19FQ0pQQUtFX0MKKyAgICAjZGVmaW5lIE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDSlBBS0VfRU5BQkxFRAorCisgICAgI3VuZGVmIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCisKK0FuZCB0aGVuIGNyZWF0ZSBhIGZpbGUgbmFtZWQgYGNvbmZpZy5qc29uYCBhdCB0aGUgcm9vdCBvZiB5b3VyIGFwcGxpY2F0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50czoKKworICAgIHsKKyAgICAgICAibWJlZHRscyI6IHsKKyAgICAgICAgICAidXNlci1jb25maWctZmlsZSI6ICJcIm15YXBwL21iZWR0bHMtY29uZmlnLWNoYW5nZXMuaFwiIgorICAgICAgIH0KKyAgICB9CisKK1BsZWFzZSBub3RlOiB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBleGFjdCBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBgI2luY2x1ZGVgIGRpcmVjdGl2ZSwgaW5jbHVkaW5nIHRoZSBgPD5gIG9yIHF1b3RlcyBhcm91bmQgdGhlIG5hbWUuCisKKyMjIEdldHRpbmcgbWJlZCBUTFMgZnJvbSBHaXRIdWIKKworTGlrZSBtb3N0IGNvbXBvbmVudHMgb2YgbWJlZCBPUywgbWJlZCBUTFMgaXMgZGV2ZWxvcGVkIGluIHRoZSBvcGVuIGFuZCBpdHMgc291cmNlIGNhbiBiZSBmb3VuZCBvbiBHaXRIdWI6IFtBUk1tYmVkL21iZWR0bHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMpLiBVbmxpa2UgbW9zdCBvdGhlciBtYmVkIE9TIGNvbXBvbmVudHMsIGhvd2V2ZXIsIHlvdSBjYW5ub3QganVzdCBjbG9uZSB0aGUgcmVwb3NpdG9yeSBhbmQgcnVuIGB5b3R0YSBidWlsZGAgZnJvbSBpdHMgcm9vdC4gVGhpcyBpcyBiZWNhdXNlIG1iZWQgVExTIGFsc28gZXhpc3RzIGFzIGFuIGluZGVwZW5kZW50IGNvbXBvbmVudCwgc28gaXRzIHJlcG9zaXRvcnkgaW5jbHVkZXMgdGhpbmdzIHRoYXQgYXJlIG5vdCByZWxldmFudCBmb3IgbWJlZCBPUywgYXMgd2VsbCBhcyBvdGhlciBidWlsZCBzeXN0ZW1zLgorCitUaGUgd2F5IHRvIHVzZSBtYmVkIFRMUyBmcm9tIGEgY2xvbmUgb2YgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGlzIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHJvb3Qgb2YgYSBjaGVja291dDoKKworICAgIHlvdHRhL2NyZWF0ZS1tb2R1bGUuc2gKKyAgICBjZCB5b3R0YS9tb2R1bGUKKworWW91IGNhbiB0aGVuIHJ1biBhbnkgeW90dGEgY29tbWFuZCB5b3Ugd291bGQgbm9ybWFsbHkgcnVuLCBzdWNoIGFzIGB5b3R0YSBidWlsZGAgb3IgYHlvdHRhIGxpbmtgLgorCisjIyBEaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzdGFuZGFsb25lIGFuZCBtYmVkIE9TIGVkaXRpb25zCisKK1doaWxlIHRoZSB0d28gZWRpdGlvbnMgc2hhcmUgdGhlIHNhbWUgY29kZSBiYXNlLCB0aGVyZSBhcmUgc3RpbGwgYSBudW1iZXIgb2YgZGlmZmVyZW5jZXMsIG1haW5seSBpbiBjb25maWd1cmF0aW9uIGFuZCBpbnRlZ3JhdGlvbi4gWW91IHNob3VsZCBrZWVwIGluIG1pbmQgdGhvc2UgZGlmZmVyZW5jZXMgd2hlbiByZWFkaW5nIHNvbWUgYXJ0aWNsZXMgaW4gb3VyIFtrbm93bGVkZ2UgYmFzZV0oaHR0cHM6Ly90bHMubWJlZC5vcmcva2IpLCBhcyBjdXJyZW50bHkgYWxsIHRoZSBhcnRpY2xlcyBhcmUgYWJvdXQgdGhlIHN0YW5kYWxvbmUgZWRpdGlvbi4KKworKiBUaGUgbWJlZCBPUyBlZGl0aW9uIGhhcyBhIHNtYWxsZXIgc2V0IG9mIGZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBgY29uZmlnLmhgLCBpbiBvcmRlciB0byByZWR1Y2UgZm9vdHByaW50LiBXaGlsZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIHRoZSBzdGFuZGFsb25lIGVkaXRpb24gcHV0cyBtb3JlIGVtcGhhc2l6ZSBvbiBtYWludGFpbmluZyBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb2xkIHBlZXJzLCB0aGUgbWJlZCBPUyBlZGl0aW9uIG9ubHkgZW5hYmxlcyB0aGUgbW9zdCBtb2Rlcm4gY2lwaGVycyBhbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIChEKVRMUy4KKworKiBUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgbWJlZCBUTFMgYXJlIGRpc2FibGVkIGluIHRoZSBtYmVkIE9TIGVkaXRpb246IGBuZXRfc29ja2V0cy5jYCBhbmQgYHRpbWluZy5jYC4gVGhpcyBpcyBiZWNhdXNlIG1iZWQgT1MgaW5jbHVkZSB0aGVpciBlcXVpdmFsZW50cy4KKworKiBUaGUgbWJlZCBPUyBlZGl0aW9uIGNvbWVzIHdpdGggYSBmdWxseSBpbnRlZ3JhdGVkIEFQSSBmb3IgKEQpVExTIGNvbm5lY3Rpb25zIGluIGEgY29tcGFuaW9uIG1vZHVsZTogW21iZWQtdGxzLXNvY2tldHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWQtdGxzLXNvY2tldHMpLiBTZWUgIlBlcmZvcm1pbmcgVExTIGFuZCBEVExTIGNvbm5lY3Rpb25zIiBhYm92ZS4KKworIyMgT3RoZXIgcmVzb3VyY2VzCisKK1RoZSBbbWJlZCBUTFMgd2Vic2l0ZV0oaHR0cHM6Ly90bHMubWJlZC5vcmcpIGNvbnRhaW5zIG1hbnkgb3RoZXIgdXNlZnVsCityZXNvdXJjZXMgZm9yIHRoZSBkZXZlbG9wZXIsIHN1Y2ggYXMgW2RldmVsb3BlcgorZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly90bHMubWJlZC5vcmcvZGV2LWNvcm5lciksIFtrbm93bGVkZ2ViYXNlCithcnRpY2xlc10oaHR0cHM6Ly90bHMubWJlZC5vcmcva2IpLCBhbmQgYSBbc3VwcG9ydCBmb3J1bV0oaHR0cHM6Ly90bHMubWJlZC5vcmcvZGlzY3Vzc2lvbnMpLgorCisjIyBDb250cmlidXRpbmcKKworV2UgZ3JhdGVmdWxseSBhY2NlcHQgYnVnIHJlcG9ydHMgYW5kIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgY29tbXVuaXR5LiBUaGVyZSBhcmUgc29tZSByZXF1aXJlbWVudHMgd2UgbmVlZCB0byBmdWxmaWxsIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gaW50ZWdyYXRlIGNvbnRyaWJ1dGlvbnM6CisKKyogU2ltcGxlIGJ1ZyBmaXhlcyB0byBleGlzdGluZyBjb2RlIGRvIG5vdCBjb250YWluIGNvcHlyaWdodCB0aGVtc2VsdmVzIGFuZCB3ZSBjYW4gaW50ZWdyYXRlIHdpdGhvdXQgaXNzdWUuIFRoZSBzYW1lIGlzIHRydWUgb2YgdHJpdmlhbCBjb250cmlidXRpb25zLgorCisqIEZvciBsYXJnZXIgY29udHJpYnV0aW9ucywgc3VjaCBhcyBhIG5ldyBmZWF0dXJlLCB0aGUgY29kZSBjYW4gcG9zc2libHkgZmFsbCB1bmRlciBjb3B5cmlnaHQgbGF3LiBXZSB0aGVuIG5lZWQgeW91ciBjb25zZW50IHRvIHNoYXJlIGluIHRoZSBvd25lcnNoaXAgb2YgdGhlIGNvcHlyaWdodC4gV2UgaGF2ZSBhIGZvcm0gZm9yIHRoaXMsIHdoaWNoIHdlIHdpbGwgc2VuZCB0byB5b3UgaW4gY2FzZSB5b3Ugc3VibWl0IGEgY29udHJpYnV0aW9uIG9yIHB1bGwgcmVxdWVzdCB0aGF0IHdlIGRlZW0gdGhpcyBuZWNlc3NhcnkgZm9yLgorCitUbyBjb250cmlidXRlLCBwbGVhc2U6CisKKyogW0NoZWNrIGZvciBvcGVuIGlzc3Vlc10oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQvbWJlZHRscy9pc3N1ZXMpIG9yIFtzdGFydCBhIGRpc2N1c3Npb25dKGh0dHBzOi8vdGxzLm1iZWQub3JnL2Rpc2N1c3Npb25zKSBhcm91bmQgYSBmZWF0dXJlIGlkZWEgb3IgYSBidWcuCisKKyogRm9yayB0aGUgW21iZWQgVExTIHJlcG9zaXRvcnkgb24gR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzKSB0byBzdGFydCBtYWtpbmcgeW91ciBjaGFuZ2VzLiBBcyBhIGdlbmVyYWwgcnVsZSwgeW91IHNob3VsZCB1c2UgdGhlICJkZXZlbG9wbWVudCIgYnJhbmNoIGFzIGEgYmFzaXMuCisKKyogV3JpdGUgYSB0ZXN0IHRoYXQgc2hvd3MgdGhhdCB0aGUgYnVnIHdhcyBmaXhlZCBvciB0aGF0IHRoZSBmZWF0dXJlIHdvcmtzIGFzIGV4cGVjdGVkLgorCisqIFNlbmQgYSBwdWxsIHJlcXVlc3QgYW5kIGJ1ZyB1cyB1bnRpbCBpdCBnZXRzIG1lcmdlZCBhbmQgcHVibGlzaGVkLiBXZSB3aWxsIGluY2x1ZGUgeW91ciBuYW1lIGluIHRoZSBDaGFuZ2VMb2cuCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2FkanVzdC1jb25maWcuc2ggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9hZGp1c3QtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmYTg0OTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9hZGp1c3QtY29uZmlnLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWV1CisKK2lmIFsgJCMgLW5lIDIgXTsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiAkMCBwYXRoL3RvL2NvbmZpZy5wbCBwYXRoL3RvL2NvbmZpZy5oIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK1NDUklQVD0kMQorRklMRT0kMgorCitjb25mKCkgeworICAgICRTQ1JJUFQgLWYgJEZJTEUgJEAKK30KKworCisjIFNldCB0aGUgdGFyZ2V0IHNwZWNpZmljIGhlYWRlcgorY29uZiBzZXQgWU9UVEFfQ0ZHX01CRURUTFNfVEFSR0VUX0NPTkZJR19GSUxFIFwibWJlZHRscy90YXJnZXRfY29uZmlnLmhcIgorCisjIG5vdCBzdXBwb3J0ZWQgb24gbWJlZCBPUywgbm9yIHVzZWQgYnkgbWJlZCBDbGllbnQKK2NvbmYgdW5zZXQgTUJFRFRMU19ORVRfQworY29uZiB1bnNldCBNQkVEVExTX1RJTUlOR19DCisKKyMgbm90IHN1cHBvcnRlZCBvbiBhbGwgdGFyZ2V0cyB3aXRoIG1iZWQgT1MsIG5vciB1c2VkIGJ5IG1iZWQgQ2xpZW50Citjb25mIHVuc2V0IE1CRURUTFNfRlNfSU8KKworY29uZiB1bnNldCBNQkVEVExTX0NJUEhFUl9NT0RFX0NGQgorY29uZiB1bnNldCBNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY29uZiB1bnNldCBNQkVEVExTX0NJUEhFUl9QQURESU5HX09ORV9BTkRfWkVST1MKK2NvbmYgdW5zZXQgTUJFRFRMU19DSVBIRVJfUEFERElOR19aRVJPU19BTkRfTEVOCitjb25mIHVuc2V0IE1CRURUTFNfQ0lQSEVSX1BBRERJTkdfWkVST1MKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MlIxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNFIxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfU0VDUDIyNEsxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfU0VDUDI1NksxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19FQ1BfRFBfQlAyNTZSMV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfRUNQX0RQX0JQMzg0UjFfRU5BQkxFRAorY29uZiB1bnNldCBNQkVEVExTX0VDUF9EUF9CUDUxMlIxX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19QS19QQVJTRV9FQ19FWFRFTkRFRAorCitjb25mIHVuc2V0IE1CRURUTFNfQUVTTklfQworY29uZiB1bnNldCBNQkVEVExTX0FSQzRfQworY29uZiB1bnNldCBNQkVEVExTX0JMT1dGSVNIX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19DQU1FTExJQV9DCitjb25mIHVuc2V0IE1CRURUTFNfREVTX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19ESE1fQworY29uZiB1bnNldCBNQkVEVExTX0dFTlBSSU1FCitjb25mIHVuc2V0IE1CRURUTFNfTUQ1X0MKK2NvbmYgdW5zZXQgTUJFRFRMU19QQURMT0NLX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19QRU1fV1JJVEVfQworY29uZiB1bnNldCBNQkVEVExTX1BLQ1M1X0MKK2NvbmYgdW5zZXQgTUJFRFRMU19QS0NTMTJfQworY29uZiB1bnNldCBNQkVEVExTX1JJUEVNRDE2MF9DCitjb25mIHVuc2V0IE1CRURUTFNfU0hBMV9DCitjb25mIHVuc2V0IE1CRURUTFNfWFRFQV9DCisKK2NvbmYgdW5zZXQgTUJFRFRMU19YNTA5X1JTQVNTQV9QU1NfU1VQUE9SVAorCitjb25mIHVuc2V0IE1CRURUTFNfWDUwOV9DU1JfUEFSU0VfQworY29uZiB1bnNldCBNQkVEVExTX1g1MDlfQ1JFQVRFX0MKK2NvbmYgdW5zZXQgTUJFRFRMU19YNTA5X0NSVF9XUklURV9DCitjb25mIHVuc2V0IE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQworCitjb25mIHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0RIRV9QU0tfRU5BQkxFRAorY29uZiB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9SU0FfUFNLX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfUlNBX0VOQUJMRUQKK2NvbmYgdW5zZXQgTUJFRFRMU19LRVlfRVhDSEFOR0VfREhFX1JTQV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorY29uZiB1bnNldCBNQkVEVExTX0tFWV9FWENIQU5HRV9FQ0RIX1JTQV9FTkFCTEVECitjb25mIHVuc2V0IE1CRURUTFNfU1NMX0ZBTExCQUNLX1NDU1YKK2NvbmYgdW5zZXQgTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcKK2NvbmYgdW5zZXQgTUJFRFRMU19TU0xfUFJPVE9fVExTMQorY29uZiB1bnNldCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEKK2NvbmYgdW5zZXQgTUJFRFRMU19TU0xfVFJVTkNBVEVEX0hNQUMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2VudHJvcHlfaGFyZHdhcmVfcG9sbC5jIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZW50cm9weV9oYXJkd2FyZV9wb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2MWUyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2VudHJvcHlfaGFyZHdhcmVfcG9sbC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgSGFyZHdhcmUgZW50cm9weSBjb2xsZWN0b3IgZm9yIHRoZSBLNjRGLCB1c2luZyBGcmVlc2NhbGUncyBSTkdBCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBXQVJOSU5HOiB0aGlzIGlzIHRlbXBvcmFyeSEKKyAqIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgeW90dGEgbW9kdWxlIHdoaWNoIHdvdWxkIGJlIGEgdGFyZ2V0CisgKiBkZXBlbmRlbmN5IG9mIG1iZWR0bHMgKHNlZSBJT1RTU0wtMzEzKQorICovCisKKyNpZiBkZWZpbmVkKFRBUkdFVF9MSUtFX0s2NEYpCisKKy8qCisgKiBSZWZlcmVuY2U6ICJLNjQgU3ViLUZhbWlseSBSZWZlcmVuY2UgTWFudWFsLCBSZXYuIDIiLCBjaGFwdGVyIDM0CisgKi8KKworI2luY2x1ZGUgImZzbF9jbG9ja19tYW5hZ2VyLmgiCisKKy8qCisgKiBHZXQgb25lIGJ5dGUgb2YgZW50cm9weSBmcm9tIHRoZSBSTkcsIGFzc3VtaW5nIGl0IGlzIHVwIGFuZCBydW5uaW5nLgorICogQXMgcmVjb21tZW5kZWQgKDM0LjEuMSksIGdldCBvbmx5IG9uZSBiaXQgb2YgZWFjaCBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkIHJuZ19nZXRfYnl0ZSggdW5zaWduZWQgY2hhciAqYnl0ZSApCit7CisgICAgc2l6ZV90IGJpdDsKKworICAgIC8qIDM0LjUgU3RlcHMgMy00LTU6IHBvbGwgU1IgYW5kIHJlYWQgZnJvbSBPUiB3aGVuIHJlYWR5ICovCisgICAgZm9yKCBiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKyApCisgICAgeworICAgICAgICB3aGlsZSggKCBSTkctPlNSICYgUk5HX1NSX09SRUdfTFZMX01BU0sgKSA9PSAwICk7CisgICAgICAgICpieXRlIHw9ICggUk5HLT5PUiAmIDEgKSA8PCBiaXQ7CisgICAgfQorfQorCisvKgorICogR2V0IGxlbiBieXRlcyBvZiBlbnRyb3B5IGZyb20gdGhlIGhhcmR3YXJlIFJORy4KKyAqLworaW50IG1iZWR0bHNfaGFyZHdhcmVfcG9sbCggdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0LCBzaXplX3QgbGVuLCBzaXplX3QgKm9sZW4gKQoreworICAgIHNpemVfdCBpOworICAgIGludCByZXQ7CisgICAgKCh2b2lkKSBkYXRhKTsKKworICAgIENMT0NLX1NZU19FbmFibGVSbmdhQ2xvY2soIDAgKTsKKworICAgIC8qIFNldCAiSW50ZXJydXB0IE1hc2siLCAiSGlnaCBBc3N1cmFuY2UiIGFuZCAiR28iLAorICAgICAqIHVuc2V0ICJDbGVhciBpbnRlcnJ1cHQiIGFuZCAiU2xlZXAiICovCisgICAgUk5HLT5DUiA9IFJOR19DUl9JTlRNX01BU0sgfCBSTkdfQ1JfSEFfTUFTSyB8IFJOR19DUl9HT19NQVNLOworCisgICAgZm9yKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKyAgICAgICAgcm5nX2dldF9ieXRlKCBvdXRwdXQgKyBpICk7CisKKyAgICAvKiBKdXN0IGJlIGV4dHJhIHN1cmUgdGhhdCB3ZSBkaWRuJ3QgZG8gaXQgd3JvbmcgKi8KKyAgICBpZiggKCBSTkctPlNSICYgUk5HX1NSX1NFQ1ZfTUFTSyApICE9IDAgKQorICAgIHsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICAqb2xlbiA9IGxlbjsKKyAgICByZXQgPSAwOworCitjbGVhbnVwOgorICAgIC8qIERpc2FibGUgY2xvY2sgdG8gc2F2ZSBwb3dlciAtIGFzc3VtZSB3ZSdyZSB0aGUgb25seSB1c2VycyBvZiBSTkcgKi8KKyAgICBDTE9DS19TWVNfRGlzYWJsZVJuZ2FDbG9jayggMCApOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWF1dGhjcnlwdC9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWF1dGhjcnlwdC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0YjFlZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYXV0aGNyeXB0L1JFQURNRS5tZApAQCAtMCwwICsxLDY4IEBACisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiBFeGFtcGxlCisKK1RoaXMgYXBwbGljYXRpb24gcGVyZm9ybXMgYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGVkIGRlY3J5cHRpb24gb2YgYSBidWZmZXIuIEl0IHNlcnZlcyBhcyBhIHR1dG9yaWFsIGZvciB0aGUgYmFzaWMgYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIGZ1bmN0aW9ucyBvZiBtYmVkIFRMUy4KKworIyMgUHJlLXJlcXVpc2l0ZXMKKworVG8gYnVpbGQgYW5kIHJ1biB0aGlzIGV4YW1wbGUgeW91IG11c3QgaGF2ZToKKworKiBBIGNvbXB1dGVyIHdpdGggdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBpbnN0YWxsZWQ6CisgICogW0NNYWtlXShodHRwOi8vd3d3LmNtYWtlLm9yZy9kb3dubG9hZC8pLgorICAqIFt5b3R0YV0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQveW90dGEpLiBQbGVhc2Ugbm90ZSB0aGF0ICoqeW90dGEgaGFzIGl0cyBvd24gc2V0IG9mIGRlcGVuZGVuY2llcyoqLCBsaXN0ZWQgaW4gdGhlIFtpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zXShodHRwOi8vYXJtbWJlZC5naXRodWIuaW8veW90dGEvI2luc3RhbGxpbmctb24td2luZG93cykuCisgICogW1B5dGhvbl0oaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvKS4KKyAgKiBbVGhlIEFSTSBHQ0MgdG9vbGNoYWluXShodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZCkuCisgICogQSBzZXJpYWwgdGVybWluYWwgZW11bGF0b3IgKExpa2Ugc2NyZWVuLCBweVNlcmlhbCBhbmQgY3UpLgorKiBBbiBbRlJETS1LNjRGXShodHRwOi8vZGV2ZWxvcGVyLm1iZWQub3JnL3BsYXRmb3Jtcy9GUkRNLUs2NEYvKSBkZXZlbG9wbWVudCBib2FyZCwgb3IgYW5vdGhlciBib2FyZCBzdXBwb3J0ZWQgYnkgbWJlZCBPUyAoaW4gd2hpY2ggY2FzZSB5b3UnbGwgaGF2ZSB0byBzdWJzdGl0dXRlIGZyZG0tazY0Zi1nY2Mgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0IGluIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cpLgorKiBBIG1pY3JvLVVTQiBjYWJsZS4KKyogSWYgeW91ciBPUyBpcyBXaW5kb3dzLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIFtmb3IgdGhlIHNlcmlhbCBwb3J0IGRyaXZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubWJlZC5vcmcvaGFuZGJvb2svV2luZG93cy1zZXJpYWwtY29uZmlndXJhdGlvbikuCisKKyMjIEdldHRpbmcgc3RhcnRlZAorCisxLiBDb25uZWN0IHRoZSBGUkRNLUs2NEYgdG8gdGhlIGNvbXB1dGVyIHdpdGggdGhlIG1pY3JvLVVTQiBjYWJsZSwgYmVpbmcgY2FyZWZ1bCB0byB1c2UgdGhlICJPcGVuU0RBIiBjb25uZWN0b3Igb24gdGhlIHRhcmdldCBib2FyZC4KKworMi4gTmF2aWdhdGUgdG8gdGhlIG1iZWR0bHMgZGlyZWN0b3J5IHN1cHBsaWVkIHdpdGggeW91ciByZWxlYXNlIGFuZCBvcGVuIGEgdGVybWluYWwuCisKKzMuIFNldCB0aGUgeW90dGEgdGFyZ2V0OgorCisgICAgYGBgCisgICAgeW90dGEgdGFyZ2V0IGZyZG0tazY0Zi1nY2MKKyAgICBgYGAKKworNC4gQnVpbGQgbWJlZHRscyBhbmQgdGhlIGV4YW1wbGVzLiBUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lIGlmIHRoaXMgaXMgeW91ciBmaXJzdCBjb21waWxhdGlvbjoKKworICAgIGBgYAorICAgICQgeW90dGEgYnVpbGQKKyAgICBgYGAKKworNS4gQ29weSBgYnVpbGQvZnJkbS1rNjRmLWdjYy90ZXN0L21iZWR0bHMtdGVzdC1leGFtcGxlLWF1dGhjcnlwdC5iaW5gIHRvIHlvdXIgbWJlZCBib2FyZCBhbmQgd2FpdCB1bnRpbCB0aGUgTEVEIG5leHQgdG8gdGhlIFVTQiBwb3J0IHN0b3BzIGJsaW5raW5nLgorCis2LiBTdGFydCB0aGUgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBjb25uZWN0IHRvIHRoZSB2aXJ0dWFsIHNlcmlhbCBwb3J0IHByZXNlbnRlZCBieSBGUkRNLUs2NEYuIAorCisJVXNlIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6CisKKwkqIDExNTIwMCBiYXVkIChub3QgOTYwMCkuCisJKiA4TjEuCisJKiBObyBmbG93IGNvbnRyb2wuIAorCis3LiBQcmVzcyB0aGUgUmVzZXQgYnV0dG9uIG9uIHRoZSBib2FyZC4KKworOC4gVGhlIG91dHB1dCBpbiB0aGUgdGVybWluYWwgd2luZG93IHNob3VsZCBsb29rIGxpa2U6CisKKyAgICBgYGAKKyAgICB7e3RpbWVvdXQ7MTB9fQorICAgIHt7aG9zdF90ZXN0X25hbWU7ZGVmYXVsdH19CisgICAge3tkZXNjcmlwdGlvbjttYmVkIFRMUyBleGFtcGxlIGF1dGhjcnlwdH19CisgICAge3t0ZXN0X2lkO01CRURUTFNfRVhfQVVUSENSWVBUfX0KKyAgICB7e3N0YXJ0fX0KKworCisgICAgcGxhaW50ZXh0IG1lc3NhZ2U6IDUzNmY2ZDY1MjA3NDY4Njk2ZTY3NzMyMDYxNzI2NTIwNjI2NTc0NzQ2NTcyMjA2YzY1NjY3NDIwNzU2ZTcyNjU2MTY0MDAKKyAgICBjaXBoZXJ0ZXh0OiBjNTdmN2FmYjk0ZjE0Yzc5NzdkNzg1ZDA4NjgyYTI1OTZiZDYyZWU5ZGNmMjE2YjhjY2NkOTk3YWZlZTliNDAyZjVkZTE3MzllOGU2NDY3YWEzNjM3NDllZjM5MzkyZTVjNjY2MjJiMDFjNzIwM2VjMGEzZDE0CisgICAgZGVjcnlwdGVkOiA1MzZmNmQ2NTIwNzQ2ODY5NmU2NzczMjA2MTcyNjUyMDYyNjU3NDc0NjU3MjIwNmM2NTY2NzQyMDc1NmU3MjY1NjE2NDAwCisKKyAgICBET05FCisgICAge3tzdWNjZXNzfX0KKyAgICB7e2VuZH19CisgICAgYGBgCisKK1RoZSBhY3R1YWwgb3V0cHV0IGZvciB0aGUgY2lwaGVydGV4dCBsaW5lIHdpbGwgdmFyeSBvbiBlYWNoIHJ1biBiZWNhdXNlIG9mIHRoZSB1c2Ugb2YgYSByYW5kb20gbm9uY2UgaW4gdGhlIGVuY3J5cHRpb24gcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYXV0aGNyeXB0L21haW4uY3BwIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1hdXRoY3J5cHQvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmYWQyNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYXV0aGNyeXB0L21haW4uY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIEhlbGxvIHdvcmxkIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiB3aXRoIG1iZWQgVExTCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpbmNsdWRlICJtYmVkdGxzL2NpcGhlci5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZW50cm9weS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyB2b2lkIHByaW50X2hleChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgdW5zaWduZWQgY2hhciBidWZbXSwgc2l6ZV90IGxlbikKK3sKKyAgICBwcmludGYoIiVzOiAiLCB0aXRsZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICBwcmludGYoIiUwMngiLCBidWZbaV0pOworCisgICAgcHJpbnRmKCJcclxuIik7Cit9CisKKy8qCisgKiBUaGUgcHJlLXNoYXJlZCBrZXkuIFNob3VsZCBiZSBnZW5lcmF0ZWQgcmFuZG9tbHkgYW5kIGJlIHVuaXF1ZSB0byB0aGUKKyAqIGRldmljZS9jaGFubmVsL2V0Yy4gSnVzdCB1c2VkIGEgZml4ZWQgb24gaGVyZSBmb3Igc2ltcGxpY2l0eS4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2VjcmV0X2tleVsxNl0gPSB7CisgICAgMHhmNCwgMHg4MiwgMHhjNiwgMHg3MCwgMHgzYywgMHhjNywgMHg2MSwgMHgwYSwKKyAgICAweGI5LCAweGEwLCAweGI4LCAweGU5LCAweDg3LCAweGI4LCAweGMxLCAweDcyLAorfTsKKworc3RhdGljIGludCBleGFtcGxlKHZvaWQpCit7CisgICAgLyogbWVzc2FnZSB0aGF0IHNob3VsZCBiZSBwcm90ZWN0ZWQgKi8KKyAgICBjb25zdCBjaGFyIG1lc3NhZ2VbXSA9ICJTb21lIHRoaW5ncyBhcmUgYmV0dGVyIGxlZnQgdW5yZWFkIjsKKyAgICAvKiBtZXRhZGF0YSB0cmFuc21pdHRlZCBpbiB0aGUgY2xlYXIgYnV0IGF1dGhlbnRpY2F0ZWQgKi8KKyAgICBjb25zdCBjaGFyIG1ldGFkYXRhW10gPSAiZWcgc2VxdWVuY2UgbnVtYmVyLCByb3V0aW5nIGluZm8iOworICAgIC8qIGNpcGhlcnRleHQgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIG1lc3NhZ2UgKyBub25jZSArIHRhZyAqLworICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxMjhdID0geyAwIH07CisgICAgaW50IHJldDsKKworICAgIHByaW50ZigiXHJcblxyXG4iKTsKKyAgICBwcmludF9oZXgoInBsYWludGV4dCBtZXNzYWdlIiwgKHVuc2lnbmVkIGNoYXIgKikgbWVzc2FnZSwgc2l6ZW9mIG1lc3NhZ2UpOworCisgICAgLyoKKyAgICAgKiBTZXR1cCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAqIChOb3RlOiBsYXRlciB0aGlzIG1pZ2h0IGJlIGRvbmUgYXV0b21hdGljYWxseS4pCisgICAgICovCisgICAgbWJlZHRsc19lbnRyb3B5X2NvbnRleHQgZW50cm9weTsgICAgLyogZW50cm9weSBwb29sIGZvciBzZWVkaW5nIFBSTkcgKi8KKyAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgZHJiZzsgICAgICAvKiBwc2V1ZG8tcmFuZG9tIGdlbmVyYXRvciAqLworCisgICAgbWJlZHRsc19lbnRyb3B5X2luaXQoJmVudHJvcHkpOworICAgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmZHJiZyk7CisKKyAgICAvKiBTZWVkIHRoZSBQUk5HIHVzaW5nIHRoZSBlbnRyb3B5IHBvb2wsIGFuZCB0aHJvdyBpbiBvdXIgc2VjcmV0IGtleSBhcyBhbgorICAgICAqIGFkZGl0aW9uYWwgc291cmNlIG9mIHJhbmRvbW5lc3MuICovCisgICAgcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCZkcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywgJmVudHJvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfa2V5LCBzaXplb2YgKHNlY3JldF9rZXkpKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJtYmVkdGxzX2N0cl9kcmJnX2luaXQoKSByZXR1cm5lZCAtMHglMDRYXHJcbiIsIC1yZXQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldHVwIEFFUy1DQ00gY29udGV4CisgICAgICovCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGN0eDsKKworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoJmN0eCk7CisKKyAgICByZXQgPSBtYmVkdGxzX2NpcGhlcl9zZXR1cCgmY3R4LCBtYmVkdGxzX2NpcGhlcl9pbmZvX2Zyb21fdHlwZShNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NDTSkpOworICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICBwcmludGYoIm1iZWR0bHNfY2lwaGVyX3NldHVwKCkgcmV0dXJuZWQgLTB4JTA0WFxyXG4iLCAtcmV0KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCZjdHgsIHNlY3JldF9rZXksIDggKiBzaXplb2Ygc2VjcmV0X2tleSwgTUJFRFRMU19FTkNSWVBUKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJtYmVkdGxzX2NpcGhlcl9zZXRrZXkoKSByZXR1cm5lZCAtMHglMDRYXHJcbiIsIC1yZXQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEVuY3J5cHQtYXV0aGVudGljYXRlIHRoZSBtZXNzYWdlIGFuZCBhdXRoZW50aWNhdGUgYWRkaXRpb25hbCBkYXRhCisgICAgICoKKyAgICAgKiBGaXJzdCBnZW5lcmF0ZSBhIHJhbmRvbSA4LWJ5dGUgbm9uY2UuCisgICAgICogUHV0IGl0IGRpcmVjdGx5IGluIHRoZSBvdXRwdXQgYnVmZmVyIGFzIHRoZSByZWNpcGllbnQgd2lsbCBuZWVkIGl0LgorICAgICAqCisgICAgICogV2FybmluZzogeW91IG11c3QgbmV2ZXIgcmUtdXNlIHRoZSBzYW1lIChrZXksIG5vbmNlKSBwYWlyLiBPbmUgb2YgdGhlCisgICAgICogYmVzdCB3YXlzIHRvIGVuc3VyZSB0aGlzIHRvIHVzZSBhIGNvdW50ZXIgZm9yIHRoZSBub25jZS4gSG93ZXZlciB0aGlzCisgICAgICogbWVhbnMgeW91IHNob3VsZCBzYXZlIHRoZSBjb3VudGVyIGFjY3Jvc3MgcmVib3RzLCBpZiB0aGUga2V5IGlzIGEKKyAgICAgKiBsb25nLXRlcm0gb25lLiBUaGUgYWx0ZXJuYXRpdmUgd2UgY2hvb3NlIGhlcmUgaXMgdG8gZ2VuZXJhdGUgdGhlIG5vbmNlCisgICAgICogcmFuZG9tbHkuIEhvd2V2ZXIgaXQgb25seSB3b3JrcyBpZiB5b3UgaGF2ZSBhIGdvb2Qgc291cmNlIG9mCisgICAgICogcmFuZG9tbmVzcy4KKyAgICAgKi8KKyAgICBjb25zdCBzaXplX3Qgbm9uY2VfbGVuID0gODsKKyAgICBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSgmZHJiZywgY2lwaGVydGV4dCwgbm9uY2VfbGVuKTsKKworICAgIHNpemVfdCBjaXBoZXJ0ZXh0X2xlbiA9IDA7CisgICAgLyogR28gZm9yIGEgY29uc2VydmF0aXZlIDE2LWJ5dGUgKDEyOC1iaXQpIHRhZworICAgICAqIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGNpcGhlcnRleHQgKi8KKyAgICBjb25zdCBzaXplX3QgdGFnX2xlbiA9IDE2OworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX2F1dGhfZW5jcnlwdCgmY3R4LCBjaXBoZXJ0ZXh0LCBub25jZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBtZXRhZGF0YSwgc2l6ZW9mIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWVzc2FnZSwgc2l6ZW9mIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0ICsgbm9uY2VfbGVuLCAmY2lwaGVydGV4dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0ICsgbm9uY2VfbGVuICsgc2l6ZW9mIG1lc3NhZ2UsIHRhZ19sZW4gKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJtYmVkdGxzX2NpcGhlcl9hdXRoX2VuY3J5cHQoKSByZXR1cm5lZCAtMHglMDRYXHJcbiIsIC1yZXQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgY2lwaGVydGV4dF9sZW4gKz0gbm9uY2VfbGVuICsgdGFnX2xlbjsKKworICAgIC8qCisgICAgICogVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBzaG91bGQgbm93IGJlIHRyYW5zbWl0dGVkOgorICAgICAqIC0gZmlyc3QgY2lwaGVydGV4dF9sZW4gYnl0ZXMgb2YgY2lwaGVydGV4dCBidWZmZXIKKyAgICAgKiAtIG1ldGFkYXRhIGlmIG5vdCBhbHJlYWR5IHRyYW5zbWl0dGVkIGVsc2V3aGVyZQorICAgICAqLworICAgIHByaW50X2hleCgiY2lwaGVydGV4dCIsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfbGVuKTsKKworICAgIC8qCisgICAgICogRGVjcnlwdC1hdXRoZW50aWNhdGUKKyAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGRlY3J5cHRlZFsxMjhdID0geyAwIH07CisgICAgc2l6ZV90IGRlY3J5cHRlZF9sZW4gPSAwOworCisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCZjdHgsIHNlY3JldF9rZXksIDggKiBzaXplb2Ygc2VjcmV0X2tleSwgTUJFRFRMU19ERUNSWVBUKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJtYmVkdGxzX2NpcGhlcl9zZXRrZXkoKSByZXR1cm5lZCAtMHglMDRYXHJcbiIsIC1yZXQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXQgPSBtYmVkdGxzX2NpcGhlcl9hdXRoX2RlY3J5cHQoJmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQsIG5vbmNlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1ldGFkYXRhLCBzaXplb2YgbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0ICsgbm9uY2VfbGVuLCBjaXBoZXJ0ZXh0X2xlbiAtIG5vbmNlX2xlbiAtIHRhZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWQsICZkZWNyeXB0ZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCArIGNpcGhlcnRleHRfbGVuIC0gdGFnX2xlbiwgdGFnX2xlbiApOworICAgIC8qIENoZWNraW5nIHRoZSByZXR1cm4gY29kZSBpcyBDUklUSUNBTCBmb3Igc2VjdXJpdHkgaGVyZSAqLworICAgIGlmIChyZXQgPT0gTUJFRFRMU19FUlJfQ0lQSEVSX0FVVEhfRkFJTEVEKSB7CisgICAgICAgIHByaW50ZigiU29tZXRoaW5nIGJhZCBpcyBoYXBwZW5pbmchIERhdGEgaXMgbm90IGF1dGhlbnRpYyFcclxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJtYmVkdGxzX2NpcGhlcl9hdXRoZGVjcnlwdCgpIHJldHVybmVkIC0weCUwNFhcclxuIiwgLXJldCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHByaW50X2hleCgiZGVjcnlwdGVkIiwgZGVjcnlwdGVkLCBkZWNyeXB0ZWRfbGVuKTsKKworICAgIHByaW50ZigiXHJcbkRPTkVcclxuIik7CisKKyAgICByZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkKKworI2luY2x1ZGUgIm1iZWQtZHJpdmVycy90ZXN0X2Vudi5oIgorI2luY2x1ZGUgIm1pbmFyL21pbmFyLmgiCisKK3N0YXRpYyB2b2lkIHJ1bigpIHsKKyAgICBNQkVEX0hPU1RURVNUX1RJTUVPVVQoMTApOworICAgIE1CRURfSE9TVFRFU1RfU0VMRUNUKGRlZmF1bHQpOworICAgIE1CRURfSE9TVFRFU1RfREVTQ1JJUFRJT04obWJlZCBUTFMgZXhhbXBsZSBhdXRoY3J5cHQpOworICAgIE1CRURfSE9TVFRFU1RfU1RBUlQoIk1CRURUTFNfRVhfQVVUSENSWVBUIik7CisgICAgTUJFRF9IT1NUVEVTVF9SRVNVTFQoZXhhbXBsZSgpID09IDApOworfQorCit2b2lkIGFwcF9zdGFydChpbnQsIGNoYXIqW10pIHsKKyAgICAvKiBVc2UgMTE1MjAwIGJwcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBleGFtcGxlcyAqLworICAgIGdldF9zdGRpb19zZXJpYWwoKS5iYXVkKDExNTIwMCk7CisgICAgbWluYXI6OlNjaGVkdWxlcjo6cG9zdENhbGxiYWNrKG1iZWQ6OnV0aWw6OkZ1bmN0aW9uUG9pbnRlcjA8dm9pZD4ocnVuKS5iaW5kKCkpOworfQorCisjZWxzZQorCitpbnQgbWFpbigpIHsKKyAgICByZXR1cm4gZXhhbXBsZSgpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYmVuY2htYXJrL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYmVuY2htYXJrL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg5ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1iZW5jaG1hcmsvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTAwIEBACisjIG1iZWQgVExTIEJlbmNobWFyayBFeGFtcGxlCisKK1RoaXMgYXBwbGljYXRpb24gYmVuY2htYXJrcyB0aGUgdmFyaW91cyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgb2ZmZXJlZCBieSBtYmVkIFRMUy4KKworIyMgUHJlLXJlcXVpc2l0ZXMKKworVG8gYnVpbGQgYW5kIHJ1biB0aGlzIGV4YW1wbGUgeW91IG11c3QgaGF2ZToKKworKiBBIGNvbXB1dGVyIHdpdGggdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBpbnN0YWxsZWQ6CisgICogW0NNYWtlXShodHRwOi8vd3d3LmNtYWtlLm9yZy9kb3dubG9hZC8pLgorICAqIFt5b3R0YV0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQveW90dGEpLiBQbGVhc2Ugbm90ZSB0aGF0ICoqeW90dGEgaGFzIGl0cyBvd24gc2V0IG9mIGRlcGVuZGVuY2llcyoqLCBsaXN0ZWQgaW4gdGhlIFtpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zXShodHRwOi8vYXJtbWJlZC5naXRodWIuaW8veW90dGEvI2luc3RhbGxpbmctb24td2luZG93cykuCisgICogW1B5dGhvbl0oaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvKS4KKyAgKiBbVGhlIEFSTSBHQ0MgdG9vbGNoYWluXShodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZCkuCisgICogQSBzZXJpYWwgdGVybWluYWwgZW11bGF0b3IgKExpa2Ugc2NyZWVuLCBweVNlcmlhbCBhbmQgY3UpLgorKiBBbiBbRlJETS1LNjRGXShodHRwOi8vZGV2ZWxvcGVyLm1iZWQub3JnL3BsYXRmb3Jtcy9GUkRNLUs2NEYvKSBkZXZlbG9wbWVudCBib2FyZCwgb3IgYW5vdGhlciBib2FyZCBzdXBwb3J0ZWQgYnkgbWJlZCBPUyAoaW4gd2hpY2ggY2FzZSB5b3UnbGwgaGF2ZSB0byBzdWJzdGl0dXRlIGZyZG0tazY0Zi1nY2Mgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0IGluIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cpLgorKiBBIG1pY3JvLVVTQiBjYWJsZS4KKyogSWYgeW91ciBPUyBpcyBXaW5kb3dzLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIFtmb3IgdGhlIHNlcmlhbCBwb3J0IGRyaXZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubWJlZC5vcmcvaGFuZGJvb2svV2luZG93cy1zZXJpYWwtY29uZmlndXJhdGlvbikuCisKKyMjIEdldHRpbmcgc3RhcnRlZAorCisxLiBDb25uZWN0IHRoZSBGUkRNLUs2NEYgdG8gdGhlIGNvbXB1dGVyIHdpdGggdGhlIG1pY3JvLVVTQiBjYWJsZSwgYmVpbmcgY2FyZWZ1bCB0byB1c2UgdGhlICJPcGVuU0RBIiBjb25uZWN0b3Igb24gdGhlIHRhcmdldCBib2FyZC4KKworMi4gTmF2aWdhdGUgdG8gdGhlIG1iZWR0bHMgZGlyZWN0b3J5IHN1cHBsaWVkIHdpdGggeW91ciByZWxlYXNlIGFuZCBvcGVuIGEgdGVybWluYWwuCisKKzMuIFNldCB0aGUgeW90dGEgdGFyZ2V0OgorCisgICAgYGBgCisgICAgeW90dGEgdGFyZ2V0IGZyZG0tazY0Zi1nY2MKKyAgICBgYGAKKworNC4gQnVpbGQgbWJlZHRscyBhbmQgdGhlIGV4YW1wbGVzLiBUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lIGlmIHRoaXMgaXMgeW91ciBmaXJzdCBjb21waWxhdGlvbjoKKworICAgIGBgYAorICAgICQgeW90dGEgYnVpbGQKKyAgICBgYGAKKworNS4gQ29weSBgYnVpbGQvZnJkbS1rNjRmLWdjYy90ZXN0L21iZWR0bHMtdGVzdC1leGFtcGxlLWJlbmNobWFyay5iaW5gIHRvIHlvdXIgbWJlZCBib2FyZCBhbmQgd2FpdCB1bnRpbCB0aGUgTEVEIG5leHQgdG8gdGhlIFVTQiBwb3J0IHN0b3BzIGJsaW5raW5nLgorCis2LiBTdGFydCB0aGUgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBjb25uZWN0IHRvIHRoZSB2aXJ0dWFsIHNlcmlhbCBwb3J0IHByZXNlbnRlZCBieSBGUkRNLUs2NEYuIAorCisJVXNlIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6CisKKwkqIDExNTIwMCBiYXVkIChub3QgOTYwMCkuCisJKiA4TjEuCisJKiBObyBmbG93IGNvbnRyb2wuIAorCis3LiBQcmVzcyB0aGUgUmVzZXQgYnV0dG9uIG9uIHRoZSBib2FyZC4KKworOC4gVGhlIG91dHB1dCBpbiB0aGUgdGVybWluYWwgd2luZG93IHNob3VsZCBsb29rIGxpa2U6CisKKyAgICBgYGAKKyAgICB7e3RpbWVvdXQ7MTUwfX0KKyAgICB7e2hvc3RfdGVzdF9uYW1lO2RlZmF1bHR9fQorICAgIHt7ZGVzY3JpcHRpb247bWJlZCBUTFMgYmVuY2htYXJrIHByb2dyYW19fQorICAgIHt7dGVzdF9pZDtNQkVEVExTX0JFTkNITUFSS319CisgICAge3tzdGFydH19CisKKworICAgICAgU0hBLTEgICAgICAgICAgICAgICAgICAgIDogICAgICAgMzY0NCBLYi9zLCAgICAgICAgIDMyIGN5Y2xlcy9ieXRlCisgICAgICBTSEEtMjU2ICAgICAgICAgICAgICAgICAgOiAgICAgICAxOTU3IEtiL3MsICAgICAgICAgNTkgY3ljbGVzL2J5dGUKKyAgICAgIFNIQS01MTIgICAgICAgICAgICAgICAgICA6ICAgICAgICA1ODcgS2IvcywgICAgICAgIDIwMCBjeWNsZXMvYnl0ZQorICAgICAgQUVTLUNCQy0xMjggICAgICAgICAgICAgIDogICAgICAgMTM1OSBLYi9zLCAgICAgICAgIDg2IGN5Y2xlcy9ieXRlCisgICAgICBBRVMtQ0JDLTE5MiAgICAgICAgICAgICAgOiAgICAgICAxMTgzIEtiL3MsICAgICAgICAgOTkgY3ljbGVzL2J5dGUKKyAgICAgIEFFUy1DQkMtMjU2ICAgICAgICAgICAgICA6ICAgICAgIDEwNDggS2IvcywgICAgICAgIDExMSBjeWNsZXMvYnl0ZQorICAgICAgQUVTLUdDTS0xMjggICAgICAgICAgICAgIDogICAgICAgIDQyMSBLYi9zLCAgICAgICAgMjc5IGN5Y2xlcy9ieXRlCisgICAgICBBRVMtR0NNLTE5MiAgICAgICAgICAgICAgOiAgICAgICAgNDAzIEtiL3MsICAgICAgICAyOTIgY3ljbGVzL2J5dGUKKyAgICAgIEFFUy1HQ00tMjU2ICAgICAgICAgICAgICA6ICAgICAgICAzODUgS2IvcywgICAgICAgIDMwNSBjeWNsZXMvYnl0ZQorICAgICAgQUVTLUNDTS0xMjggICAgICAgICAgICAgIDogICAgICAgIDU0MiBLYi9zLCAgICAgICAgMjE2IGN5Y2xlcy9ieXRlCisgICAgICBBRVMtQ0NNLTE5MiAgICAgICAgICAgICAgOiAgICAgICAgNDg0IEtiL3MsICAgICAgICAyNDIgY3ljbGVzL2J5dGUKKyAgICAgIEFFUy1DQ00tMjU2ICAgICAgICAgICAgICA6ICAgICAgICA0MzcgS2IvcywgICAgICAgIDI2OCBjeWNsZXMvYnl0ZQorICAgICAgQ1RSX0RSQkcgKE5PUFIpICAgICAgICAgIDogICAgICAgMTAwMiBLYi9zLCAgICAgICAgMTE3IGN5Y2xlcy9ieXRlCisgICAgICBDVFJfRFJCRyAoUFIpICAgICAgICAgICAgOiAgICAgICAgNzA1IEtiL3MsICAgICAgICAxNjYgY3ljbGVzL2J5dGUKKyAgICAgIEhNQUNfRFJCRyBTSEEtMSAoTk9QUikgICA6ICAgICAgICAyMjggS2IvcywgICAgICAgIDUxNyBjeWNsZXMvYnl0ZQorICAgICAgSE1BQ19EUkJHIFNIQS0xIChQUikgICAgIDogICAgICAgIDIxMCBLYi9zLCAgICAgICAgNTYxIGN5Y2xlcy9ieXRlCisgICAgICBITUFDX0RSQkcgU0hBLTI1NiAoTk9QUikgOiAgICAgICAgMjEyIEtiL3MsICAgICAgICA1NTcgY3ljbGVzL2J5dGUKKyAgICAgIEhNQUNfRFJCRyBTSEEtMjU2IChQUikgICA6ICAgICAgICAxODUgS2IvcywgICAgICAgIDYzNyBjeWNsZXMvYnl0ZQorICAgICAgUlNBLTIwNDggICAgICAgICAgICAgICAgIDogICAgICA0MSBtcy8gcHVibGljCisgICAgICBSU0EtMjA0OCAgICAgICAgICAgICAgICAgOiAgICAxMzQ5IG1zL3ByaXZhdGUKKyAgICAgIFJTQS00MDk2ICAgICAgICAgICAgICAgICA6ICAgICAxMzQgbXMvIHB1YmxpYworICAgICAgUlNBLTQwOTYgICAgICAgICAgICAgICAgIDogICAgNzE0OSBtcy9wcml2YXRlCisgICAgICBFQ0RTQS1zZWNwMzg0cjEgICAgICAgICAgOiAgICAgNjQwIG1zL3NpZ24KKyAgICAgIEVDRFNBLXNlY3AyNTZyMSAgICAgICAgICA6ICAgICAzODcgbXMvc2lnbgorICAgICAgRUNEU0Etc2VjcDM4NHIxICAgICAgICAgIDogICAgMTIzMyBtcy92ZXJpZnkKKyAgICAgIEVDRFNBLXNlY3AyNTZyMSAgICAgICAgICA6ICAgICA3NTEgbXMvdmVyaWZ5CisgICAgICBFQ0RIRS1zZWNwMzg0cjEgICAgICAgICAgOiAgICAxMTkxIG1zL2hhbmRzaGFrZQorICAgICAgRUNESEUtc2VjcDI1NnIxICAgICAgICAgIDogICAgIDczMCBtcy9oYW5kc2hha2UKKyAgICAgIEVDREhFLUN1cnZlMjU1MTkgICAgICAgICA6ICAgICA2MTEgbXMvaGFuZHNoYWtlCisgICAgICBFQ0RILXNlY3AzODRyMSAgICAgICAgICAgOiAgICAgNTg0IG1zL2hhbmRzaGFrZQorICAgICAgRUNESC1zZWNwMjU2cjEgICAgICAgICAgIDogICAgIDM2NSBtcy9oYW5kc2hha2UKKyAgICAgIEVDREgtQ3VydmUyNTUxOSAgICAgICAgICA6ICAgICAzMDMgbXMvaGFuZHNoYWtlCisKKyAgICB7e3N1Y2Nlc3N9fQorICAgIHt7ZW5kfX0KKyAgICBgYGAKKworQW55IHBlcmZvcm1hbmNlIGRhdGEgZ2VuZXJhdGVkIGJ5IHRoaXMgZXhhbXBsZSBhcHBsaWNhdGlvbiBhcmUgaW5kaWNhdGl2ZSBvbmx5IG9mIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgbWJlZCBUTFMgbW9kdWxlIG9uIHRoZSBwbGF0Zm9ybSBpdCdzIGV4ZWN1dGVkIG9uLgorCitEaWZmZXJlbmNlcyBpbiB0aGUgaW50ZWdyYXRpb24gb2YgbWJlZCBUTFMgaW50byB0aGUgcGxhdGZvcm0sIHN1Y2ggYXMgd2hldGhlciBhbGwgYXZhaWxhYmxlIGhhcmR3YXJlIGFjY2VsZXJhdG9ycyBoYXZlIGJlZW4gdXNlZCBvciBub3QsIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHBlcmZvcm1hbmNlLCBhbmQgc28gcmVzdWx0cyBmcm9tIHRoZSBwcm9ncmFtIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBtZWFuaW5nZnVsbHkgY29tcGFyZSBwbGF0Zm9ybXMuCisKK1RoZSBmaWd1cmVzIG1heSBhbHNvIHNsaWdodGx5IGNoYW5nZSBmcm9tIGV4ZWN1dGlvbiB0byBleGVjdXRpb24gZHVlIHRvIHZhcmlhdGlvbnMgaW4gdGhlIHRpbWluZyBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWJlbmNobWFyay9tYWluLmNwcCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtYmVuY2htYXJrL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzhjNDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWJlbmNobWFyay9tYWluLmNwcApAQCAtMCwwICsxLDk1MSBAQAorLyoKKyAqICBCZW5jaG1hcmsgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChUQVJHRVRfTElLRV9NQkVEKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oKSB7CisgICAgcHJpbnRmKCJ0aGlzIHZlcnNpb24gb2YgdGhpcyBwcm9ncmFtIG9ubHkgd29ya3Mgb24gbWJlZCBPU1xuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfZXhpdCAgICAgICBleGl0CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNkZWZpbmUgbWJlZHRsc19zbnByaW50ZiAgIHNucHJpbnRmCisjZGVmaW5lIG1iZWR0bHNfZnJlZSAgICAgICBmcmVlCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibWJlZHRscy9tZDQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcmlwZW1kMTYwLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGExLmgiCisjaW5jbHVkZSAibWJlZHRscy9zaGEyNTYuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTUxMi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYXJjNC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGVzLmgiCisjaW5jbHVkZSAibWJlZHRscy9hZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Jsb3dmaXNoLmgiCisjaW5jbHVkZSAibWJlZHRscy9jYW1lbGxpYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZ2NtLmgiCisjaW5jbHVkZSAibWJlZHRscy9jY20uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2hhdmVnZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY3RyX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2htYWNfZHJiZy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvcnNhLmgiCisjaW5jbHVkZSAibWJlZHRscy9way5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZGhtLmgiCisjaW5jbHVkZSAibWJlZHRscy9lY2RzYS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNkaC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZXJyb3IuaCIKKworI2luY2x1ZGUgIm1iZWQtZHJpdmVycy9tYmVkLmgiCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorI2luY2x1ZGUgIm1iZWR0bHMvbWVtb3J5X2J1ZmZlcl9hbGxvYy5oIgorI2VuZGlmCisKKyNkZWZpbmUgUlNBX1BSSVZBVEVfS0VZXzIwNDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXHJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJNSUlFb2dJQkFBS0NBUUVBMmR3VnIrSU1HRXRBMi9NQ1A2ZkE1ZWIvNkIxOEJxNmU3Z3c4YnJOUGttM0U2THlSXHJcbiIgIFwKKyI0RG5NSlZ4Wm13M2JQREtCRG9LemZudGtNRVNpL1l3NVVvcEx0VmZqR2ZXZVFXUENscWZmTFpCc1o2MEJSQXNnXHJcbiIgIFwKKyIvZytJRDV0Z3p4U3V4emZ0eXBLNTl1ZXhPVkNBbTdoQ0taSEdPM0RiSTdiTFkyN2o3VkFnRVA3ZC95dWF6NUZ4XHJcbiIgIFwKKyJLbC92dTdzaHFyQm96NkFCSlZKRDNLQzhuVWlNUlVDWFJJTm14YnlVVWpBNERuaWNadjYreHJHS3IzNnI2TThoXHJcbiIgIFwKKyJWWUxhNW1zS2M4V3pibkJXenBVc3JwYjQvcjdNTCtxcDkyZ2RTZlZKOC9iTGlVN2gyQzdmYURBNTl1YXFyRks5XHJcbiIgIFwKKyJ4bURkeDdGYVdoR1FzM0xXVzZ3MVVOZ2tQUzBGRFlVc2xwc25zUUlEQVFBQkFvSUJBQzdJSk53TTVWMytJdUpZXHJcbiIgIFwKKyJUMzVOem8xUHlsb1Vvc0pva3ZZNUtHejVFamcyWEJkQ0R1MGdYQ2NWcXFReUdJYlhyWURwTGhRVitSQ29YSHVuXHJcbiIgIFwKKyJ0ZE4wb1FkQzVTQjQ3cy9KMVVvMnFDVUhvMCtzQmQ2UHFUa0ZLc2wzS3hXc3NrOVRRanZDd0M0MTJJZWZNczY5XHJcbiIgIFwKKyJoVytadndDYW5tUVA1NkxsZUFwSXIyb1c0S0xmVzhSeS9RZlpsdWErZGl6Y3RkTjcrSDFtV3dnWlFUWTlUMjdKXHJcbiIgIFwKKyI2UnRHUkE1TlZrS1ZQeklIVkpmZHBLb083eEdnMWcwNmFFYlBCL1ZtR3ZaYWFGV1duYWY3dVJ2RmpMWmVjQkx1XHJcbiIgIFwKKyJRU3gyREEvR0RqaXJsRFlqOTlQSmI3RHRCNHhSdEt6c3l3MG8reGFwQzh3Nk90SWwvM3hGdDltb0N1MmpHcnN4XHJcbiIgIFwKKyJ2cGpIZGZFQ2dZRUE3ZlNBQ1JzZUlzOWdBSVZYOHdxNmdheVRwQTQ3REhZV0FENklRZklqMzVTSitBZ3N2YkZGXHJcbiIgIFwKKyI0QW1yd0RoY0pWUG1EeTFONG5MQmZ5R0FNdC8yQ2ZpWWtka1c2UUZYL1VMUk1NQkwvRzdrV1Y4aFlRRElDQjJnXHJcbiIgIFwKKyJ4YU1STjFsUENtRnE2QmtTV2p3SVlUbllERkJEV1ZtMUdWVDhUTXRKb004RXJlajlxQzBQZUZVQ2dZRUE2bUYzXHJcbiIgIFwKKyJiaWdPM3Q4ZjVzaWcrWGVwYWZ0RVVia0pNem83MlRWUm5JUjJ5Y2RSMmloZWxQUSsyNWc5ZHdWMFpBNVhYaEJTXHJcbiIgIFwKKyJES09BQldqTU03MzlNd215OXYyNkRsbXU5UjAxekhRa3RNdnRFQXlmejdsazJORjBhTXVqODI4NU9KVUJmOWJ6XHJcbiIgIFwKKyJDcTNNanRNQ0QrNENaNmlhRXFDZFVLT3V4ZnB4NWNXVkpWK3F2ZTBDZ1lCaEQxWWFZTUZPR2FCakZnRGwxZjUxXHJcbiIgIFwKKyJYbHRxazVOcVpkQmJrU1lySUFXWjhSREY1eSs0d0ZKc0xBV3VoazZ2dXlVZ0U2NnRLM25aeldScFhBa1QwQjhMXHJcbiIgIFwKKyJmcTFscFhLcWoxS2N2Qk5DaUVrRVcxVldKK2R2eUFZSUY1ZXlKKytob0ZMbkVUTDNNMzJIaXZ5aEtTd1BpaFBnXHJcbiIgIFwKKyJuVlc4VFQ5ZkpKSVlEZTFKWi9mamNRS0JnSEpmdjdVc3JSMExTdmtHM0s4QU90YngrOFBaaE9qUHVSYmswditMXHJcbiIgIFwKKyJFS0NrdUllNS9YVzR2dGZRTWVaYjdoRkpnazd2cmVwbSt2a295OFZRS0RmNHVyR1czVzFWVEhCbW9iTTAxaGk0XHJcbiIgIFwKKyJEdVl2RXVsK01mMHdNUnRXakpvbG80bStCTzVLaVcyanBGZnFGbTZKbWZqVnFPSUFLT1NLQzZhbThWL01ERjBoXHJcbiIgIFwKKyJreU45QW9HQVQ5b09pRVhNb2xia0Rady9RQ2FCaVJvQUdsR2xOWVVrSis1OFU2T2pJWkxJU3c2YUZ2K1kydUUwXHJcbiIgIFwKKyJtRUltSXRqdVladFNZS2JsV2lrcDZsZFBvS2x0OWJ3RUZlM2M2SVo4a0ozK3h5RXlBR3J2alhqRVk3UHpQNmRwXHJcbiIgIFwKKyJBamJqcDlYOXVvY0VCdjlXL0tzQkxkUTd5aXpjTC90b0h3ZEJPNHZRcW1xVHZBYzVJSXc9XHJcbiIgICAgICAgICAgICAgIFwKKyItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iCisKKyNkZWZpbmUgUlNBX1BSSVZBVEVfS0VZXzQwOTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXHJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJNSUlKS2dJQkFBS0NBZ0VBbWtkR2pvSXNoSnVPdDJOTzQ3cUIzWjN5eXZtTGcyajM1MWlzSXRTTnVGUVUzcXIrXHJcbiIgIFwKKyJqWEhJZUFOZjAzeXcvSzBadm9zOFJQZCtDcUxqb3hBUUwzUURINGJaQWw4OGJJbzI5aStTQU5iTlNyS1FtYzBrXHJcbiIgIFwKKyJwSCt5enczYWxEek8wR1phT1BaanNibzZBd0Jybm81bXNpMHZSdUMyYVk4dkdMUHNaV1N5TGFpN3RuZVMxai9vXHJcbiIgIFwKKyJ2WVc2WElvOENqNjFqMllweTlIaFZVVy80V2MrekFUMjVEL3g3alRwa3FKTFdXVCtZemliTmJPWTQ4TTVlSmNCXHJcbiIgIFwKKyI2L3NNeVVJZUkzL3Uvd1h5TXJvb055TGlDcGVka3VIUkEwbTd1NWNXUFRVSVNUdW5TUmxWRmlqL05ISmp1VThlXHJcbiIgIFwKKyJ3QTNCMjl5ZlpGc1VxREVueWMrT3huaUl1ZUFpeFRvbVZzenhBYVZuOHpGRWJZaEZNUHF6aWlGcDk5dTNqZmVHXHJcbiIgIFwKKyJrMXE5bW1VaS91Q2ZVQzRlMklDNXJxcTFaYktTZHVIN1VnL1ZuMmJHUWFod3cwc1pGUkhEWEZybkJjb3RjVytNXHJcbiIgIFwKKyJibkMyOTBWQkRuWWd6bWRZcklPeHVQYjJhVXdKbzRabGJLaDV1QkIxUGlnTXV5aExLaWJRMWErVjVaSkdkcFA2XHJcbiIgIFwKKyJTRTlQR0lkZ1lXU21oMlFFTXVMRTZ2K3dUTzJMUTVKZ3FzdkZmaTNHSVp2a24wczhqVFM3MkpxMnVNa0ZrTWVyXHJcbiIgIFwKKyJVQmpQRFlhU1B5NWtwbzEwM0tlcldzK2NNUE9KLzNGdFp6SSsrN01vU1VUa1dWcjF5U1FGdDVpMUVJWi8wVGhpXHJcbiIgIFwKKyJqdXQyak5lOGE0QW9BM1R0QzhSa2svM0FJSWJnOE1WTlQ0RW5UK0tIUk9UTXU2Z0VUMW9KM1lmQlJwVUNBd0VBXHJcbiIgIFwKKyJBUUtDQWdFQWh1TlNtVDdQVlpIOGtmTE9BdVlLclkxdnZtKzR2MGlEbDA0OEVxZnMwUUVTeml5TEszZ1VZbm53XHJcbiIgIFwKKyJ5cVAyeXJVK0VROER2dmoweHEvc2Y2R0h4VFdWbFhiOVBjbXV0dWVSYm1YaExjS2c4M0owWTBTdGlQWHRqSUw4XHJcbiIgIFwKKyJYU2RkVzNCaDZmUGk3bjE0UXkrVzZLWnd1OUF0eWJhblJsdmVQYWJ5UlNScGRPcFdWUTd1MzB3NVhac1NlZDZTXHJcbiIgIFwKKyI2QkkwQkJDNjhtMnFxamUxc0lub3FkQ2RYS3RjQjMxVHl0VURORUhNK1V1QXlNOGlHZUdTMmhDTnFabHljSFRTXHJcbiIgIFwKKyJqUTlLRXNkTUgzWUx1MGxRZ1JwV3R4bWcrVkw2Uk9Xd21BdEtGMTJFd2JEWVordW9WbDY5T2tRbkNwdjhweEthXHJcbiIgIFwKKyJlYy80bTZWK3VFQTFBT3BhQU1vckhHM2ZIMzFJS1dDL2ZUWnN0b3ZnTy9lRzJYQ3RsYmNDb1dDUTdhbUZxMTZsXHJcbiIgIFwKKyJHaDFVS2VCSHhNWHBEajRvRG1JVUdVdmd6U05uRWVTTi92NzZsb3NXdldZUURqWFIvTE1EYS9DTllzRDhCbUpSXHJcbiIgIFwKKyJQWmlkSWpJWGRWUmxZT2hBN2xqdHlTUXZwNlJCdWpCZnczdHNWTXladzJYelhGd005Tzg5YjF4WEM2K001amY5XHJcbiIgIFwKKyJEWHMvVTdGdytKOXFxL1lwQnlBQmNQQ3dXZHR0d2RRRlJiT3h3eGFTT0thcklxUzg3VFcxSnVGY05KNTlVdDZHXHJcbiIgIFwKKyJrTXZBZzZnQzM0VSswa3RrRy9BbUkxaGdqQytQN0VySENYQlIyeEFSb0d6Y08vQ01aRjU5UytaMkhGY2hwVFNQXHJcbiIgIFwKKyI1VDJvNG1HeTNWZkhTQmlkUVFyY1pSdWtnOFpQOE0xTkYzYlhqcFk2UVpwZUxIYzRvSEVDZ2dFQkFNamRnenprXHJcbiIgIFwKKyJ4cDRtSVlGeEFFaVhZdDd0enVVWEprKzBVcEVKajV1Ym9XTGlyVVpxWm1OVVB5aDZXRG56bFJFQkgrK01zMExPXHJcbiIgIFwKKyIrQVdTZmFHUERvTWIwTkUyajNjNEZSV0FoZTdWbjZsajduTFZwRjJSZHdSbzg4eUdlclo0dXdHTVk4TlVRQ3RuXHJcbiIgIFwKKyJ6dW0zSjdlQ0o1RG9qaWNlUmI2dU14VEo4eFptVUM0VzJmM0ovbHJSN3dsWWp5Vm5uSHFINUhjZW1ZVWlwV1N3XHJcbiIgIFwKKyJzTTAvY0hwM2xyejJWV3JiQUV1OEhWcGtsdkRRcGRBZ2w3Y2pYdC9KSFlhd1krcDQyNklGL1B6UVNSUk9uemd5XHJcbiIgIFwKKyI0V0k4RlZZTlYydGd1MFRPRlVSYmtrRXZ1ai9kdURLZW9vVUlGMEcwWEh6aGE1b0FYL2owaVdpSGJyT0Y2d0hqXHJcbiIgIFwKKyIweGVhakw5bXNLQm5tRDhDZ2dFQkFNU2dMV212N0czMXg0dG5kSkNjWG5YNEF5Vkw3S3B5Z0F4L1p3Q2N5VFI4XHJcbiIgIFwKKyJyWTFyTzA3Zi90YTJub0VyYS94bUVXL0JXOThxSkZDSFNVMm5TTEFRNUZwRlNXeXVRcXJuZmZyTUpuZld5dnByXHJcbiIgIFwKKyJjZVEweVEvTWlBNi9KSU92R0FqYWJjc3B6WmlqeHpHcCtRazNlVFQweU9YTFNWT0NIOUI5WFZITG9kY3k0UFFNXHJcbiIgIFwKKyJLU0N4eTB2VkhoVk5sMlNkUEV3VFhSbXhrOTlRL3J3NklIVnBReEJxMU9oUXQwNW5US1QrclpNRC9nclNLMjJlXHJcbiIgIFwKKyJteTJGMERvZEFKd0xvMDYzWnYzUlhRWmhEWW9kTW1qY3A5SHFydHZqOVAzSEQ3SjN6NkFDaVYzU0NpOGNadW1MXHJcbiIgIFwKKyJiU21uS0NjZDBiYjQ1K2FPV20zMWllRUNKdUljSjlyT1JFRWEvS0RZVENzQ2dnRUJBTUc1V2tTVmhMV3NvdTM3XHJcbiIgIFwKKyJkVUdOdUE2M25xNDJTSDNndFMwcTRuVTZnVWtrdytkQTRTVDFjTUJ5VnJyMW9SUTRXSHVwNEk0VG5RT0t5RjNUXHJcbiIgIFwKKyI0alF5MUkraXBuVmVBbit0Wi83enl6d01wRUhlcU5xUlhBOUZ4YlRCRW9NQUo2UVRxWGdPdnFEZVNxSUFRbTdyXHJcbiIgIFwKKyJPWXU1cnJndHF5aC9TOGJHQ3d2VWU0b29BZkNTS3gyZWtZTWJCVndXOU1UOFlTMDl0dVMvaUhKM010MlJUTUxnXHJcbiIgIFwKKyJxZUh2Vm14cmNYcVpvRm00NEJhN3ROL3BQMG1pOUhLeXZpWlQ0dG1WM0lZRWJuM0p5R0dzZmtVdVZVOXdFVWZnXHJcbiIgIFwKKyJNQ3JnclZ4cndma2V0QXpvb2lITWprVkwyQVNqekFKVG1FdmRBUEVUWVh4ekpEOUxOMG92WTN0OEpmQUMzN0lOXHJcbiIgIFwKKyJzVlhTOC9NQ2dnRUJBTEJ5T1M1OVk0S3RxMXJMQlF4OGRqd1F5dW5lUDB3Wm9oVVZBeDdHazd4Wklma2xRRHlnXHJcbiIgIFwKKyJ2L1I0UHJjVmV6c3RjUHBEbnlrZGpTY0NzR0pSK3VXYzB2NjY3SS90dFAvZTZ1dHo1aFZtbUJHdTk2NWRQQXpFXHJcbiIgIFwKKyJjMWdnYVNrT3FGZlJnL05yMlFiZitmSDBZUG5IWVNxSGUvelN0ME9NSXZhYWVYTGNkS2hFRFNDVUJSaEUxSFdCXHJcbiIgIFwKKyJreFIwNDZXemdCZVl6TlF3eWN6OXh3cXNjdEpLR3BlUjl1dGUrNUFOSFBkM1g5WHRJRDBmcXo4Y3RJNWVaYVN3XHJcbiIgIFwKKyJ3QXBJVzAxWlFjQUY4Qis0V2trVnVGWG5wV1czM3lDT2FSeVBWT1BIcG5jbHI1V1UxZlMrM1E4NVFrVzlya2VqXHJcbiIgIFwKKyI5N3psa2wwUVk5QUhKcXJYbm9NTDF5d0FLN25zK01WeU5LOENnZ0VBZjYyeGNLWmhPYjFkamVGNzJNcytpL2kvXHJcbiIgIFwKKyJXSUFxNFE0WXBzRWxndkpUSHBOSDJ2OWc0bmdTVEtlM3dzM2JHYzUwMnNXUmxoY29URk1PVzJySk5lL2lxS2tiXHJcbiIgIFwKKyIzY2RlVGtzZURicHFvem1KV3o5ZEpXU1Z0WGFzMmJaanpCRWEvL2dRN25IR1ZlUWRxWkpROXJ4UHNvT0FrZnBpXHJcbiIgIFwKKyJxQ0ZybWZVVlVxQzUzZTNYTXQ4K1crYVN2S2wrSlppQjlvemtPOUE2UTB2ZlFMS3RqVU1kUUUzWGFDRlFUOERJXHJcbiIgIFwKKyJzbWFMQmxCbWVSYUJwYzAyRU5lQzRBRGxXb3NtMVN3Z3hxTWh1aDJBbGJhL0dySE9vUGxWbDRoRHM5RmI1YTZSXHJcbiIgIFwKKyJybXBYU3QwN0dBeG5HNmo5anNzQTk1RTRyYzF6TzBDVktHNWJ2alZUeHdpL3NUMC9WVlg3VnNKTTR1VEFRZz09XHJcbiIgIFwKKyItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxyXG4iCisKKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmICFkZWZpbmVkIHNucHJpbnRmCisjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKKy8qCisgKiBGb3IgaGVhcCB1c2FnZSBlc3RpbWF0ZXMsIHdlIG5lZWQgYW4gZXN0aW1hdGUgb2YgdGhlIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQKKyAqIGJsb2NrLiBwdG1hbGxvYzIvMyAodXNlZCBpbiBnbnUgbGliYyBmb3IgaW5zdGFuY2UpIHVzZXMgMiBzaXplX3QgcGVyIGJsb2NrLAorICogc28gdXNlIHRoYXQgYXMgb3VyIGJhc2VsaW5lLgorICovCisjZGVmaW5lIE1FTV9CTE9DS19PVkVSSEVBRCAgKCAyICogc2l6ZW9mKCBzaXplX3QgKSApCisKKy8qCisgKiBTaXplIHRvIHVzZSBmb3IgdGhlIG1hbGxvYyBidWZmZXIgaWYgTUVNT1JZX0JVRkZFUl9BTExPQ19DIGlzIGRlZmluZWQuCisgKi8KKyNkZWZpbmUgSEVBUF9TSVpFICAgICAgICgxdSA8PCAxNikgIC8vIDY0aworCisjZGVmaW5lIEJVRlNJWkUgICAgICAgICAxMDI0CisjZGVmaW5lIEhFQURFUl9GT1JNQVQgICAiICAlLTI0cyA6ICAiCisjZGVmaW5lIFRJVExFX0xFTiAgICAgICAyNQorCisjZGVmaW5lIE9QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIm1kNCwgbWQ1LCByaXBlbWQxNjAsIHNoYTEsIHNoYTI1Niwgc2hhNTEyLFxyXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiYXJjNCwgZGVzMywgZGVzLCBhZXNfY2JjLCBhZXNfZ2NtLCBhZXNfY2NtLCBjYW1lbGxpYSwgYmxvd2Zpc2gsXHJcbiIgXAorICAgICJoYXZlZ2UsIGN0cl9kcmJnLCBobWFjX2RyYmdcclxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgInJzYSwgZGhtLCBlY2RzYSwgZWNkaC5cclxuIgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VSUk9SX0MpCisjZGVmaW5lIFBSSU5UX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfc3RyZXJyb3IoIHJldCwgKCBjaGFyICogKXRtcCwgc2l6ZW9mKCB0bXAgKSApOyAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJGQUlMRUQ6ICVzXHJcbiIsIHRtcCApOworI2Vsc2UKKyNkZWZpbmUgUFJJTlRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJGQUlMRUQ6IC0weCUwNHhcclxuIiwgLXJldCApOworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jayggdm9pZCApCit7CisgICAgc3RhdGljIGludCBkd3Rfc3RhcnRlZCA9IDA7CisKKyAgICBpZiggZHd0X3N0YXJ0ZWQgPT0gMCApCisgICAgeworICAgICAgICBDb3JlRGVidWctPkRFTUNSIHw9IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfTXNrOworICAgICAgICBEV1QtPkNUUkwgfD0gRFdUX0NUUkxfQ1lDQ05URU5BX01zazsKKyAgICB9CisKKyAgICByZXR1cm4oIERXVC0+Q1lDQ05UICk7Cit9CisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgYWxhcm1lZDsKK3N0YXRpYyB2b2lkIGFsYXJtKCkgeyBhbGFybWVkID0gMTsgfQorCisjZGVmaW5lIFRJTUVfQU5EX1RTQyggVElUTEUsIENPREUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBpLCBqLCB0c2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVGltZW91dCB0OyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoIEhFQURFUl9GT1JNQVQsIFRJVExFICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmZmx1c2goIHN0ZG91dCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGkgPSAxLCBhbGFybWVkID0gMCwgdC5hdHRhY2goIGFsYXJtLCAxLjAgKTsgIWFsYXJtZWQ7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ09ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0c2MgPSBtYmVkdGxzX3RpbWluZ19oYXJkY2xvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IoIGogPSAwOyBqIDwgMTAyNDsgaisrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ09ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3ByaW50ZiggIiU5bHUgS2IvcywgICU5bHUgY3ljbGVzL2J5dGVcclxuIiwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICBpICogQlVGU0laRSAvIDEwMjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAoIG1iZWR0bHNfdGltaW5nX2hhcmRjbG9jaygpIC0gdHNjICkgLyAoIGogKiBCVUZTSVpFICkgKTsgICAgICAgICBcCit9IHdoaWxlKCAwICkKKworI2lmIGRlZmluZWQoTUJFRFRMU19FUlJPUl9DKQorI2RlZmluZSBQUklOVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3N0cmVycm9yKCByZXQsICggY2hhciAqICl0bXAsIHNpemVvZiggdG1wICkgKTsgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRkFJTEVEOiAlc1xyXG4iLCB0bXAgKTsKKyNlbHNlCisjZGVmaW5lIFBSSU5UX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRkFJTEVEOiAtMHglMDR4XHJcbiIsIC1yZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykgJiYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKKworI2RlZmluZSBNRU1PUllfTUVBU1VSRV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCBtYXhfdXNlZCwgbWF4X2Jsb2NrcywgbWF4X2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCBwcnZfdXNlZCwgcHJ2X2Jsb2NrczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19jdXJfZ2V0KCAmcHJ2X3VzZWQsICZwcnZfYmxvY2tzICk7ICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX21heF9yZXNldCggKTsKKworI2RlZmluZSBNRU1PUllfTUVBU1VSRV9QUklOVCggdGl0bGVfbGVuICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19tYXhfZ2V0KCAmbWF4X3VzZWQsICZtYXhfYmxvY2tzICk7ICAgICAgICAgICAgICBcCisgICAgZm9yKCBpID0gMTIgLSB0aXRsZV9sZW47IGkgIT0gMDsgaS0tICkgbWJlZHRsc19wcmludGYoICIgIiApOyAgICAgIFwKKyAgICBtYXhfdXNlZCAtPSBwcnZfdXNlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYXhfYmxvY2tzIC09IHBydl9ibG9ja3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtYXhfYnl0ZXMgPSBtYXhfdXNlZCArIE1FTV9CTE9DS19PVkVSSEVBRCAqIG1heF9ibG9ja3M7ICAgICAgICAgICAgIFwKKyAgICBtYmVkdGxzX3ByaW50ZiggIiU2dSBoZWFwIGJ5dGVzIiwgKHVuc2lnbmVkKSBtYXhfYnl0ZXMgKTsKKworI2Vsc2UKKyNkZWZpbmUgTUVNT1JZX01FQVNVUkVfSU5JVAorI2RlZmluZSBNRU1PUllfTUVBU1VSRV9QUklOVCggdGl0bGVfbGVuICkKKyNlbmRpZgorCisjZGVmaW5lIFRJTUVfUFVCTElDKCBUSVRMRSwgVFlQRSwgQ09ERSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludCByZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUaW1lciB0OyBcCisgICAgTUVNT1JZX01FQVNVUkVfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWJlZHRsc19wcmludGYoIEhFQURFUl9GT1JNQVQsIFRJVExFICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmZmx1c2goIHN0ZG91dCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBcCisgICAgdC5zdGFydCgpOyBcCisgICAgQ09ERTsgXAorICAgIHQuc3RvcCgpOyBcCisgICAgbXMgPSB0LnJlYWRfbXMoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKCByZXQgIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQUklOVF9FUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiU2bHUgbXMvIiBUWVBFLCBtcyApOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBNRU1PUllfTUVBU1VSRV9QUklOVCggc2l6ZW9mKCBUWVBFICkgKyAxICk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxyXG4iICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoIDAgKQorCitzdGF0aWMgaW50IG15cmFuZCggdm9pZCAqcm5nX3N0YXRlLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCB1c2VfbGVuOworICAgIGludCBybmQ7CisKKyAgICBpZiggcm5nX3N0YXRlICE9IE5VTEwgKQorICAgICAgICBybmdfc3RhdGUgID0gTlVMTDsKKworICAgIHdoaWxlKCBsZW4gPiAwICkKKyAgICB7CisgICAgICAgIHVzZV9sZW4gPSBsZW47CisgICAgICAgIGlmKCB1c2VfbGVuID4gc2l6ZW9mKGludCkgKQorICAgICAgICAgICAgdXNlX2xlbiA9IHNpemVvZihpbnQpOworCisgICAgICAgIHJuZCA9IHJhbmQoKTsKKyAgICAgICAgbWVtY3B5KCBvdXRwdXQsICZybmQsIHVzZV9sZW4gKTsKKyAgICAgICAgb3V0cHV0ICs9IHVzZV9sZW47CisgICAgICAgIGxlbiAtPSB1c2VfbGVuOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorCisvKgorICogQ2xlYXIgc29tZSBtZW1vcnkgdGhhdCB3YXMgdXNlZCB0byBwcmVwYXJlIHRoZSBjb250ZXh0CisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCit2b2lkIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggbWJlZHRsc19lY3BfZ3JvdXAgKmdycCApCit7CisgICAgaWYoIGdycC0+VCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHNpemVfdCBpOworICAgICAgICBmb3IoIGkgPSAwOyBpIDwgZ3JwLT5UX3NpemU7IGkrKyApCisgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludF9mcmVlKCAmZ3JwLT5UW2ldICk7CisgICAgICAgIG1iZWR0bHNfZnJlZSggZ3JwLT5UICk7CisgICAgfQorICAgIGdycC0+VCA9IE5VTEw7CisgICAgZ3JwLT5UX3NpemUgPSAwOworfQorI2Vsc2UKKyNkZWZpbmUgZWNwX2NsZWFyX3ByZWNvbXB1dGVkKCBnICkKKyNlbmRpZgorCit1bnNpZ25lZCBjaGFyIGJ1ZltCVUZTSVpFXTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgbWQ0LCBtZDUsIHJpcGVtZDE2MCwgc2hhMSwgc2hhMjU2LCBzaGE1MTIsCisgICAgICAgICBhcmM0LCBkZXMzLCBkZXMsIGFlc19jYmMsIGFlc19nY20sIGFlc19jY20sIGNhbWVsbGlhLCBibG93ZmlzaCwKKyAgICAgICAgIGhhdmVnZSwgY3RyX2RyYmcsIGhtYWNfZHJiZywKKyAgICAgICAgIHJzYSwgZGhtLCBlY2RzYSwgZWNkaDsKK30gdG9kb19saXN0OworCitpbnQgYmVuY2htYXJrKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFsyMDBdOworICAgIGNoYXIgdGl0bGVbVElUTEVfTEVOXTsKKyAgICB0b2RvX2xpc3QgdG9kbzsKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIHVuc2lnbmVkIGNoYXIgbWFsbG9jX2J1ZltIRUFQX1NJWkVdID0geyAwIH07CisjZW5kaWYKKworICAgIGlmKCBhcmdjIDw9IDEgKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCAmdG9kbywgMSwgc2l6ZW9mKCB0b2RvICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWVtc2V0KCAmdG9kbywgMCwgc2l6ZW9mKCB0b2RvICkgKTsKKworICAgICAgICBmb3IoIGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIHN0cmNtcCggYXJndltpXSwgIm1kNCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLm1kNCA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJtZDUiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5tZDUgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAicmlwZW1kMTYwIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8ucmlwZW1kMTYwID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInNoYTEiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5zaGExID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgInNoYTI1NiIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLnNoYTI1NiA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJzaGE1MTIiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5zaGE1MTIgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiYXJjNCIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmFyYzQgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZGVzMyIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRlczMgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiZGVzIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uZGVzID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19jYmMiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hZXNfY2JjID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19nY20iICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hZXNfZ2NtID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImFlc19jY20iICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5hZXNfY2NtID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImNhbWVsbGlhIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8uY2FtZWxsaWEgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiYmxvd2Zpc2giICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5ibG93ZmlzaCA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJoYXZlZ2UiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5oYXZlZ2UgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAiY3RyX2RyYmciICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5jdHJfZHJiZyA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJobWFjX2RyYmciICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5obWFjX2RyYmcgPSAxOworICAgICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBhcmd2W2ldLCAicnNhIiApID09IDAgKQorICAgICAgICAgICAgICAgIHRvZG8ucnNhID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImRobSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmRobSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIGFyZ3ZbaV0sICJlY2RzYSIgKSA9PSAwICkKKyAgICAgICAgICAgICAgICB0b2RvLmVjZHNhID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggYXJndltpXSwgImVjZGgiICkgPT0gMCApCisgICAgICAgICAgICAgICAgdG9kby5lY2RoID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlVucmVjb2duaXplZCBvcHRpb246ICVzXHJcbiIsIGFyZ3ZbaV0gKTsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkF2YWlsYWJsZSBvcHRpb25zOiAiIE9QVElPTlMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1iZWR0bHNfcHJpbnRmKCAiXHJcblxyXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19pbml0KCBtYWxsb2NfYnVmLCBzaXplb2YoIG1hbGxvY19idWYgKSApOworI2VuZGlmCisgICAgbWVtc2V0KCBidWYsIDB4QUEsIHNpemVvZiggYnVmICkgKTsKKyAgICBtZW1zZXQoIHRtcCwgMHhCQiwgc2l6ZW9mKCB0bXAgKSApOworCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgIGlmKCB0b2RvLm1kNCApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIk1ENCIsIG1iZWR0bHNfbWQ0KCBidWYsIEJVRlNJWkUsIHRtcCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICBpZiggdG9kby5tZDUgKQorICAgICAgICBUSU1FX0FORF9UU0MoICJNRDUiLCBtYmVkdGxzX21kNSggYnVmLCBCVUZTSVpFLCB0bXAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgaWYoIHRvZG8ucmlwZW1kMTYwICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiUklQRU1EMTYwIiwgbWJlZHRsc19yaXBlbWQxNjAoIGJ1ZiwgQlVGU0laRSwgdG1wICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBpZiggdG9kby5zaGExICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiU0hBLTEiLCBtYmVkdGxzX3NoYTEoIGJ1ZiwgQlVGU0laRSwgdG1wICkgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCB0b2RvLnNoYTI1NiApCisgICAgICAgIFRJTUVfQU5EX1RTQyggIlNIQS0yNTYiLCBtYmVkdGxzX3NoYTI1NiggYnVmLCBCVUZTSVpFLCB0bXAsIDAgKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBNTEyX0MpCisgICAgaWYoIHRvZG8uc2hhNTEyICkKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiU0hBLTUxMiIsIG1iZWR0bHNfc2hhNTEyKCBidWYsIEJVRlNJWkUsIHRtcCwgMCApICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19BUkM0X0MpCisgICAgaWYoIHRvZG8uYXJjNCApCisgICAgeworICAgICAgICBtYmVkdGxzX2FyYzRfY29udGV4dCBhcmM0OworICAgICAgICBtYmVkdGxzX2FyYzRfaW5pdCggJmFyYzQgKTsKKyAgICAgICAgbWJlZHRsc19hcmM0X3NldHVwKCAmYXJjNCwgdG1wLCAzMiApOworICAgICAgICBUSU1FX0FORF9UU0MoICJBUkM0IiwgbWJlZHRsc19hcmM0X2NyeXB0KCAmYXJjNCwgQlVGU0laRSwgYnVmLCBidWYgKSApOworICAgICAgICBtYmVkdGxzX2FyYzRfZnJlZSggJmFyYzQgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19ERVNfQykgJiYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX0NCQykKKyAgICBpZiggdG9kby5kZXMzICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGRlczM7CisgICAgICAgIG1iZWR0bHNfZGVzM19pbml0KCAmZGVzMyApOworICAgICAgICBtYmVkdGxzX2RlczNfc2V0M2tleV9lbmMoICZkZXMzLCB0bXAgKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiM0RFUyIsCisgICAgICAgICAgICAgICAgbWJlZHRsc19kZXMzX2NyeXB0X2NiYyggJmRlczMsIE1CRURUTFNfREVTX0VOQ1JZUFQsIEJVRlNJWkUsIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICBtYmVkdGxzX2RlczNfZnJlZSggJmRlczMgKTsKKyAgICB9CisKKyAgICBpZiggdG9kby5kZXMgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19kZXNfY29udGV4dCBkZXM7CisgICAgICAgIG1iZWR0bHNfZGVzX2luaXQoICZkZXMgKTsKKyAgICAgICAgbWJlZHRsc19kZXNfc2V0a2V5X2VuYyggJmRlcywgdG1wICk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkRFUyIsCisgICAgICAgICAgICAgICAgbWJlZHRsc19kZXNfY3J5cHRfY2JjKCAmZGVzLCBNQkVEVExTX0RFU19FTkNSWVBULCBCVUZTSVpFLCB0bXAsIGJ1ZiwgYnVmICkgKTsKKyAgICAgICAgbWJlZHRsc19kZXNfZnJlZSggJmRlcyApOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpCisgICAgaWYoIHRvZG8uYWVzX2NiYyApCisgICAgeworICAgICAgICBpbnQga2V5c2l6ZTsKKyAgICAgICAgbWJlZHRsc19hZXNfY29udGV4dCBhZXM7CisgICAgICAgIG1iZWR0bHNfYWVzX2luaXQoICZhZXMgKTsKKyAgICAgICAgZm9yKCBrZXlzaXplID0gMTI4OyBrZXlzaXplIDw9IDI1Njsga2V5c2l6ZSArPSA2NCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJBRVMtQ0JDLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZhZXMsIHRtcCwga2V5c2l6ZSApOworCisgICAgICAgICAgICBUSU1FX0FORF9UU0MoIHRpdGxlLAorICAgICAgICAgICAgICAgIG1iZWR0bHNfYWVzX2NyeXB0X2NiYyggJmFlcywgTUJFRFRMU19BRVNfRU5DUllQVCwgQlVGU0laRSwgdG1wLCBidWYsIGJ1ZiApICk7CisgICAgICAgIH0KKyAgICAgICAgbWJlZHRsc19hZXNfZnJlZSggJmFlcyApOworICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykKKyAgICBpZiggdG9kby5hZXNfZ2NtICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2djbV9jb250ZXh0IGdjbTsKKworICAgICAgICBtYmVkdGxzX2djbV9pbml0KCAmZ2NtICk7CisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQUVTLUdDTS0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2djbV9zZXRrZXkoICZnY20sIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZ2NtX2NyeXB0X2FuZF90YWcoICZnY20sIE1CRURUTFNfR0NNX0VOQ1JZUFQsIEJVRlNJWkUsIHRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEyLCBOVUxMLCAwLCBidWYsIGJ1ZiwgMTYsIHRtcCApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZ2NtX2ZyZWUoICZnY20gKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykKKyAgICBpZiggdG9kby5hZXNfY2NtICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2NjbV9jb250ZXh0IGNjbTsKKworICAgICAgICBtYmVkdGxzX2NjbV9pbml0KCAmY2NtICk7CisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQUVTLUNDTS0lZCIsIGtleXNpemUgKTsKKworICAgICAgICAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZiggYnVmICkgKTsKKyAgICAgICAgICAgIG1lbXNldCggdG1wLCAwLCBzaXplb2YoIHRtcCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2NjbV9zZXRrZXkoICZjY20sIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfY2NtX2VuY3J5cHRfYW5kX3RhZyggJmNjbSwgQlVGU0laRSwgdG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgMTIsIE5VTEwsIDAsIGJ1ZiwgYnVmLCB0bXAsIDE2ICkgKTsKKworICAgICAgICAgICAgbWJlZHRsc19jY21fZnJlZSggJmNjbSApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmNhbWVsbGlhICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY2FtZWxsaWE7CisgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfaW5pdCggJmNhbWVsbGlhICk7CisgICAgICAgIGZvcigga2V5c2l6ZSA9IDEyODsga2V5c2l6ZSA8PSAyNTY7IGtleXNpemUgKz0gNjQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiQ0FNRUxMSUEtQ0JDLSVkIiwga2V5c2l6ZSApOworCisgICAgICAgICAgICBtZW1zZXQoIGJ1ZiwgMCwgc2l6ZW9mKCBidWYgKSApOworICAgICAgICAgICAgbWVtc2V0KCB0bXAsIDAsIHNpemVvZiggdG1wICkgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfY2FtZWxsaWFfc2V0a2V5X2VuYyggJmNhbWVsbGlhLCB0bXAsIGtleXNpemUgKTsKKworICAgICAgICAgICAgVElNRV9BTkRfVFNDKCB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jYmMoICZjYW1lbGxpYSwgTUJFRFRMU19DQU1FTExJQV9FTkNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgQlVGU0laRSwgdG1wLCBidWYsIGJ1ZiApICk7CisgICAgICAgIH0KKyAgICAgICAgbWJlZHRsc19jYW1lbGxpYV9mcmVlKCAmY2FtZWxsaWEgKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CTE9XRklTSF9DKSAmJiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKQorICAgIGlmKCB0b2RvLmJsb3dmaXNoICkKKyAgICB7CisgICAgICAgIGludCBrZXlzaXplOworICAgICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgYmxvd2Zpc2g7CisgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfaW5pdCggJmJsb3dmaXNoICk7CisKKyAgICAgICAgZm9yKCBrZXlzaXplID0gMTI4OyBrZXlzaXplIDw9IDI1Njsga2V5c2l6ZSArPSA2NCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJCTE9XRklTSC1DQkMtJWQiLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoIGJ1ZiApICk7CisgICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOworICAgICAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZibG93ZmlzaCwgdG1wLCBrZXlzaXplICk7CisKKyAgICAgICAgICAgIFRJTUVfQU5EX1RTQyggdGl0bGUsCisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfYmxvd2Zpc2hfY3J5cHRfY2JjKCAmYmxvd2Zpc2gsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgQlVGU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgYnVmLCBidWYgKSApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmYmxvd2Zpc2ggKTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19IQVZFR0VfQykKKyAgICBpZiggdG9kby5oYXZlZ2UgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19oYXZlZ2Vfc3RhdGUgaHM7CisgICAgICAgIG1iZWR0bHNfaGF2ZWdlX2luaXQoICZocyApOworICAgICAgICBUSU1FX0FORF9UU0MoICJIQVZFR0UiLCBtYmVkdGxzX2hhdmVnZV9yYW5kb20oICZocywgYnVmLCBCVUZTSVpFICkgKTsKKyAgICAgICAgbWJlZHRsc19oYXZlZ2VfZnJlZSggJmhzICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ1RSX0RSQkdfQykKKyAgICBpZiggdG9kby5jdHJfZHJiZyApCisgICAgeworICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX2NvbnRleHQgY3RyX2RyYmc7CisKKyAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCAmY3RyX2RyYmcgKTsKKworICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBUSU1FX0FORF9UU0MoICJDVFJfRFJCRyAoTk9QUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2N0cl9kcmJnX3JhbmRvbSggJmN0cl9kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKworICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19zZWVkKCAmY3RyX2RyYmcsIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBtYmVkdGxzX2N0cl9kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZjdHJfZHJiZywgTUJFRFRMU19DVFJfRFJCR19QUl9PTiApOworICAgICAgICBUSU1FX0FORF9UU0MoICJDVFJfRFJCRyAoUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19jdHJfZHJiZ19yYW5kb20oICZjdHJfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisgICAgICAgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSggJmN0cl9kcmJnICk7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfSE1BQ19EUkJHX0MpCisgICAgaWYoIHRvZG8uaG1hY19kcmJnICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2NvbnRleHQgaG1hY19kcmJnOworICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzsKKworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19pbml0KCAmaG1hY19kcmJnICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0hBMV9DKQorICAgICAgICBpZiggKCBtZF9pbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggTUJFRFRMU19NRF9TSEExICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKworICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmhtYWNfZHJiZywgbWRfaW5mbywgbXlyYW5kLCBOVUxMLCBOVUxMLCAwICkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkhNQUNfRFJCRyBTSEEtMSAoTk9QUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZobWFjX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmaG1hY19kcmJnICk7CisKKyAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3NlZWQoICZobWFjX2RyYmcsIG1kX2luZm8sIG15cmFuZCwgTlVMTCwgTlVMTCwgMCApICE9IDAgKQorICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19zZXRfcHJlZGljdGlvbl9yZXNpc3RhbmNlKCAmaG1hY19kcmJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19ITUFDX0RSQkdfUFJfT04gKTsKKyAgICAgICAgVElNRV9BTkRfVFNDKCAiSE1BQ19EUkJHIFNIQS0xIChQUikiLAorICAgICAgICAgICAgICAgIGlmKCBtYmVkdGxzX2htYWNfZHJiZ19yYW5kb20oICZobWFjX2RyYmcsIGJ1ZiwgQlVGU0laRSApICE9IDAgKQorICAgICAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKSApOworICAgICAgICBtYmVkdGxzX2htYWNfZHJiZ19mcmVlKCAmaG1hY19kcmJnICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykKKyAgICAgICAgaWYoICggbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIE1CRURUTFNfTURfU0hBMjU2ICkgKSA9PSBOVUxMICkKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCgxKTsKKworICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmhtYWNfZHJiZywgbWRfaW5mbywgbXlyYW5kLCBOVUxMLCBOVUxMLCAwICkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisgICAgICAgIFRJTUVfQU5EX1RTQyggIkhNQUNfRFJCRyBTSEEtMjU2IChOT1BSKSIsCisgICAgICAgICAgICAgICAgaWYoIG1iZWR0bHNfaG1hY19kcmJnX3JhbmRvbSggJmhtYWNfZHJiZywgYnVmLCBCVUZTSVpFICkgIT0gMCApCisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KDEpICk7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX2ZyZWUoICZobWFjX2RyYmcgKTsKKworICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfc2VlZCggJmhtYWNfZHJiZywgbWRfaW5mbywgbXlyYW5kLCBOVUxMLCBOVUxMLCAwICkgIT0gMCApCisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSk7CisgICAgICAgIG1iZWR0bHNfaG1hY19kcmJnX3NldF9wcmVkaWN0aW9uX3Jlc2lzdGFuY2UoICZobWFjX2RyYmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX0hNQUNfRFJCR19QUl9PTiApOworICAgICAgICBUSU1FX0FORF9UU0MoICJITUFDX0RSQkcgU0hBLTI1NiAoUFIpIiwKKyAgICAgICAgICAgICAgICBpZiggbWJlZHRsc19obWFjX2RyYmdfcmFuZG9tKCAmaG1hY19kcmJnLCBidWYsIEJVRlNJWkUgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoMSkgKTsKKyAgICAgICAgbWJlZHRsc19obWFjX2RyYmdfZnJlZSggJmhtYWNfZHJiZyApOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUEVNX1BBUlNFX0MpICYmIGRlZmluZWQoTUJFRFRMU19QS19QQVJTRV9DKQorICAgIGlmKCB0b2RvLnJzYSApCisgICAgeworICAgICAgICBtYmVkdGxzX3BrX2NvbnRleHQgcGs7CisgICAgICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgKnJzYTsKKyAgICAgICAgY29uc3QgY2hhciAqcnNhX2tleXNbXSA9IHsgUlNBX1BSSVZBVEVfS0VZXzIwNDgsIFJTQV9QUklWQVRFX0tFWV80MDk2IH07CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBzaXplb2YoIHJzYV9rZXlzICkgLyBzaXplb2YoIHJzYV9rZXlzWzBdICk7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcGtfaW5pdCggJnBrICk7CisgICAgICAgICAgICBtYmVkdGxzX3BrX3BhcnNlX2tleSggJnBrLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSByc2Ffa2V5c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIHJzYV9rZXlzW2ldICkgKyAxLCBOVUxMLCAwICk7CisgICAgICAgICAgICByc2EgPSBtYmVkdGxzX3BrX3JzYSggcGsgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIlJTQS0lZCIsIG1iZWR0bHNfcGtfZ2V0X2JpdGxlbiggJnBrICkgKTsKKworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiIHB1YmxpYyIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZlswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfcnNhX3B1YmxpYyggcnNhLCBidWYsIGJ1ZiApICk7CisKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgInByaXZhdGUiLAorICAgICAgICAgICAgICAgICAgICBidWZbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3JzYV9wcml2YXRlKCByc2EsIG15cmFuZCwgTlVMTCwgYnVmLCBidWYgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX3BrX2ZyZWUoICZwayApOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpICYmIGRlZmluZWQoTUJFRFRMU19CSUdOVU1fQykKKyAgICBpZiggdG9kby5kaG0gKQorICAgIHsKKyAgICAgICAgaW50IGRobV9zaXplc1tdID0geyAyMDQ4LCAzMDcyIH07CisgICAgICAgIGNvbnN0IGNoYXIgKmRobV9QW10gPSB7CisgICAgICAgICAgICBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMjA0OF9QLAorICAgICAgICAgICAgTUJFRFRMU19ESE1fUkZDMzUyNl9NT0RQXzMwNzJfUCwKKyAgICAgICAgfTsKKyAgICAgICAgY29uc3QgY2hhciAqZGhtX0dbXSA9IHsKKyAgICAgICAgICAgIE1CRURUTFNfREhNX1JGQzM1MjZfTU9EUF8yMDQ4X0csCisgICAgICAgICAgICBNQkVEVExTX0RITV9SRkMzNTI2X01PRFBfMzA3Ml9HLAorICAgICAgICB9OworCisgICAgICAgIG1iZWR0bHNfZGhtX2NvbnRleHQgZGhtOworICAgICAgICBzaXplX3Qgb2xlbjsKKyAgICAgICAgZm9yKCBpID0gMDsgKHNpemVfdCkgaSA8IHNpemVvZiggZGhtX3NpemVzICkgLyBzaXplb2YoIGRobV9zaXplc1swXSApOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2RobV9pbml0KCAmZGhtICk7CisKKyAgICAgICAgICAgIGlmKCBtYmVkdGxzX21waV9yZWFkX3N0cmluZyggJmRobS5QLCAxNiwgZGhtX1BbaV0gKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19tcGlfcmVhZF9zdHJpbmcoICZkaG0uRywgMTYsIGRobV9HW2ldICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRobS5sZW4gPSBtYmVkdGxzX21waV9zaXplKCAmZGhtLlAgKTsKKyAgICAgICAgICAgIG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmZGhtLCAoaW50KSBkaG0ubGVuLCBidWYsIGRobS5sZW4sIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgaWYoIG1iZWR0bHNfbXBpX2NvcHkoICZkaG0uR1ksICZkaG0uR1ggKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKworICAgICAgICAgICAgbWJlZHRsc19zbnByaW50ZiggdGl0bGUsIHNpemVvZiggdGl0bGUgKSwgIkRIRS0lZCIsIGRobV9zaXplc1tpXSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZGhtX21ha2VfcHVibGljKCAmZGhtLCAoaW50KSBkaG0ubGVuLCBidWYsIGRobS5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19kaG1fY2FsY19zZWNyZXQoICZkaG0sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwgJm9sZW4sIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJESC0lZCIsIGRobV9zaXplc1tpXSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZGhtX2NhbGNfc2VjcmV0KCAmZGhtLCBidWYsIHNpemVvZiggYnVmICksICZvbGVuLCBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgICAgICBtYmVkdGxzX2RobV9mcmVlKCAmZGhtICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoIHRvZG8uZWNkc2EgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19lY2RzYV9jb250ZXh0IGVjZHNhOworICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvOworICAgICAgICBzaXplX3Qgc2lnX2xlbjsKKworICAgICAgICBtZW1zZXQoIGJ1ZiwgMHgyQSwgc2l6ZW9mKCBidWYgKSApOworCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjZHNhX2luaXQoICZlY2RzYSApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19lY2RzYV9nZW5rZXkoICZlY2RzYSwgY3VydmVfaW5mby0+Z3JwX2lkLCBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZHNhLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNEU0EtJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgInNpZ24iLAorICAgICAgICAgICAgICAgICAgICByZXQgPSBtYmVkdGxzX2VjZHNhX3dyaXRlX3NpZ25hdHVyZSggJmVjZHNhLCBNQkVEVExTX01EX1NIQTI1NiwgYnVmLCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgJnNpZ19sZW4sIG15cmFuZCwgTlVMTCApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmVjZHNhICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IoIGN1cnZlX2luZm8gPSBtYmVkdGxzX2VjcF9jdXJ2ZV9saXN0KCk7CisgICAgICAgICAgICAgY3VydmVfaW5mby0+Z3JwX2lkICE9IE1CRURUTFNfRUNQX0RQX05PTkU7CisgICAgICAgICAgICAgY3VydmVfaW5mbysrICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY2RzYV9pbml0KCAmZWNkc2EgKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfZWNkc2FfZ2Vua2V5KCAmZWNkc2EsIGN1cnZlX2luZm8tPmdycF9pZCwgbXlyYW5kLCBOVUxMICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkc2Ffd3JpdGVfc2lnbmF0dXJlKCAmZWNkc2EsIE1CRURUTFNfTURfU0hBMjU2LCBidWYsIGN1cnZlX2luZm8tPmJpdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsICZzaWdfbGVuLCBteXJhbmQsIE5VTEwgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZHNhLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNEU0EtJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2luZm8tPm5hbWUgKTsKKyAgICAgICAgICAgIFRJTUVfUFVCTElDKCB0aXRsZSwgInZlcmlmeSIsCisgICAgICAgICAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfZWNkc2FfcmVhZF9zaWduYXR1cmUoICZlY2RzYSwgYnVmLCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgc2lnX2xlbiApICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkc2FfZnJlZSggJmVjZHNhICk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RIX0MpCisgICAgaWYoIHRvZG8uZWNkaCApCisgICAgeworICAgICAgICBtYmVkdGxzX2VjZGhfY29udGV4dCBlY2RoOworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorICAgICAgICBtYmVkdGxzX21waSB6OworI2VuZGlmCisgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm87CisgICAgICAgIHNpemVfdCBvbGVuOworCisgICAgICAgIGZvciggY3VydmVfaW5mbyA9IG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvLT5ncnBfaWQgIT0gTUJFRFRMU19FQ1BfRFBfTk9ORTsKKyAgICAgICAgICAgICBjdXJ2ZV9pbmZvKysgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmVjZGggKTsKKworICAgICAgICAgICAgaWYoIG1iZWR0bHNfZWNwX2dyb3VwX2xvYWQoICZlY2RoLmdycCwgY3VydmVfaW5mby0+Z3JwX2lkICkgIT0gMCB8fAorICAgICAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfY29weSggJmVjZGguUXAsICZlY2RoLlEgKSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjcF9jbGVhcl9wcmVjb21wdXRlZCggJmVjZGguZ3JwICk7CisKKyAgICAgICAgICAgIG1iZWR0bHNfc25wcmludGYoIHRpdGxlLCBzaXplb2YoIHRpdGxlICksICJFQ0RIRS0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9tYWtlX3B1YmxpYyggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgICAgICAgICByZXQgfD0gbWJlZHRsc19lY2RoX2NhbGNfc2VjcmV0KCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZnJlZSggJmVjZGggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEN1cnZlMjU1MTkgbmVlZHMgdG8gYmUgaGFuZGxlZCBzZXBhcmF0ZWx5ICovCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpCisgICAgICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9pbml0KCAmeiApOworCisgICAgICAgIGlmKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNkaC5ncnAsIE1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTkgKSAhPSAwIHx8CisgICAgICAgICAgICBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmVjZGguZ3JwLCAmZWNkaC5kLCAmZWNkaC5RcCwgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggMSApOworICAgICAgICB9CisKKyAgICAgICAgVElNRV9QVUJMSUMoICAiRUNESEUtQ3VydmUyNTUxOSIsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfZ2VuX3B1YmxpYyggJmVjZGguZ3JwLCAmZWNkaC5kLCAmZWNkaC5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApOworICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZlY2RoLmdycCwgJnosICZlY2RoLlFwLCAmZWNkaC5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmeiApOworI2VuZGlmCisKKyAgICAgICAgZm9yKCBjdXJ2ZV9pbmZvID0gbWJlZHRsc19lY3BfY3VydmVfbGlzdCgpOworICAgICAgICAgICAgIGN1cnZlX2luZm8tPmdycF9pZCAhPSBNQkVEVExTX0VDUF9EUF9OT05FOworICAgICAgICAgICAgIGN1cnZlX2luZm8rKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9pbml0KCAmZWNkaCApOworCisgICAgICAgICAgICBpZiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjZGguZ3JwLCBjdXJ2ZV9pbmZvLT5ncnBfaWQgKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgbWJlZHRsc19lY2RoX21ha2VfcHVibGljKCAmZWNkaCwgJm9sZW4sIGJ1Ziwgc2l6ZW9mKCBidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9jb3B5KCAmZWNkaC5RcCwgJmVjZGguUSApICE9IDAgfHwKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjZGhfbWFrZV9wdWJsaWMoICZlY2RoLCAmb2xlbiwgYnVmLCBzaXplb2YoIGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlyYW5kLCBOVUxMICkgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19leGl0KCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlY3BfY2xlYXJfcHJlY29tcHV0ZWQoICZlY2RoLmdycCApOworCisgICAgICAgICAgICBtYmVkdGxzX3NucHJpbnRmKCB0aXRsZSwgc2l6ZW9mKCB0aXRsZSApLCAiRUNESC0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfaW5mby0+bmFtZSApOworICAgICAgICAgICAgVElNRV9QVUJMSUMoIHRpdGxlLCAiaGFuZHNoYWtlIiwKKyAgICAgICAgICAgICAgICAgICAgcmV0IHw9IG1iZWR0bHNfZWNkaF9jYWxjX3NlY3JldCggJmVjZGgsICZvbGVuLCBidWYsIHNpemVvZiggYnVmICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworICAgICAgICAgICAgbWJlZHRsc19lY2RoX2ZyZWUoICZlY2RoICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBDdXJ2ZTI1NTE5IG5lZWRzIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQorICAgICAgICBtYmVkdGxzX2VjZGhfaW5pdCggJmVjZGggKTsKKyAgICAgICAgbWJlZHRsc19tcGlfaW5pdCggJnogKTsKKworICAgICAgICBpZiggbWJlZHRsc19lY3BfZ3JvdXBfbG9hZCggJmVjZGguZ3JwLCBNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5ICkgIT0gMCB8fAorICAgICAgICAgICAgbWJlZHRsc19lY2RoX2dlbl9wdWJsaWMoICZlY2RoLmdycCwgJmVjZGguZCwgJmVjZGguUXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cmFuZCwgTlVMTCApICE9IDAgfHwKKyAgICAgICAgICAgIG1iZWR0bHNfZWNkaF9nZW5fcHVibGljKCAmZWNkaC5ncnAsICZlY2RoLmQsICZlY2RoLlEsIG15cmFuZCwgTlVMTCApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2V4aXQoIDEgKTsKKyAgICAgICAgfQorCisgICAgICAgIFRJTUVfUFVCTElDKCAgIkVDREgtQ3VydmUyNTUxOSIsICJoYW5kc2hha2UiLAorICAgICAgICAgICAgICAgIHJldCB8PSBtYmVkdGxzX2VjZGhfY29tcHV0ZV9zaGFyZWQoICZlY2RoLmdycCwgJnosICZlY2RoLlFwLCAmZWNkaC5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXJhbmQsIE5VTEwgKSApOworCisgICAgICAgIG1iZWR0bHNfZWNkaF9mcmVlKCAmZWNkaCApOworICAgICAgICBtYmVkdGxzX21waV9mcmVlKCAmeiApOworI2VuZGlmCisgICAgfQorI2VuZGlmCisKKyAgICBtYmVkdGxzX3ByaW50ZiggIlxyXG4iICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0JVRkZFUl9BTExPQ19DKQorICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19mcmVlKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cclxuIiApOworICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuKCAwICk7Cit9CisKKyNpbmNsdWRlICJtYmVkLWRyaXZlcnMvdGVzdF9lbnYuaCIKKyNpbmNsdWRlICJtaW5hci9taW5hci5oIgorCitzdGF0aWMgdm9pZCBydW4oKSB7CisgICAgTUJFRF9IT1NUVEVTVF9USU1FT1VUKDE1MCk7CisgICAgTUJFRF9IT1NUVEVTVF9TRUxFQ1QoZGVmYXVsdCk7CisgICAgTUJFRF9IT1NUVEVTVF9ERVNDUklQVElPTihtYmVkIFRMUyBiZW5jaG1hcmsgcHJvZ3JhbSk7CisgICAgTUJFRF9IT1NUVEVTVF9TVEFSVCgiTUJFRFRMU19CRU5DSE1BUksiKTsKKyAgICBNQkVEX0hPU1RURVNUX1JFU1VMVChiZW5jaG1hcmsoMCwgTlVMTCkgPT0gMCk7Cit9CisKK3ZvaWQgYXBwX3N0YXJ0KGludCwgY2hhcipbXSkgeworICAgIC8qIFVzZSAxMTUyMDAgYnBzIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIGV4YW1wbGVzICovCisgICAgZ2V0X3N0ZGlvX3NlcmlhbCgpLmJhdWQoMTE1MjAwKTsKKyAgICBtaW5hcjo6U2NoZWR1bGVyOjpwb3N0Q2FsbGJhY2sobWJlZDo6dXRpbDo6RnVuY3Rpb25Qb2ludGVyMDx2b2lkPihydW4pLmJpbmQoKSk7Cit9CisKKyNlbmRpZiAvKiBUQVJHRVRfTElLRV9NQkVEICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLWhhc2hpbmcvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1oYXNoaW5nL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNjM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1oYXNoaW5nL1JFQURNRS5tZApAQCAtMCwwICsxLDY3IEBACisjIFNIQS0yNTYgSGFzaCBFeGFtcGxlCisKK1RoaXMgYXBwbGljYXRpb24gcGVyZm9ybXMgaGFzaGluZyBvZiBhIGJ1ZmZlciB3aXRoIFNIQS0yNTYgdXNpbmcgdmFyaW91cyBBUElzLiBJdCBzZXJ2ZXMgYXMgYSB0dXRvcmlhbCBmb3IgdGhlIGJhc2ljIGhhc2hpbmcgQVBJcyBvZiBtYmVkIFRMUy4KKworIyMgUHJlLXJlcXVpc2l0ZXMKKworVG8gYnVpbGQgYW5kIHJ1biB0aGlzIGV4YW1wbGUgeW91IG11c3QgaGF2ZToKKworKiBBIGNvbXB1dGVyIHdpdGggdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBpbnN0YWxsZWQ6CisgICogW0NNYWtlXShodHRwOi8vd3d3LmNtYWtlLm9yZy9kb3dubG9hZC8pLgorICAqIFt5b3R0YV0oaHR0cHM6Ly9naXRodWIuY29tL0FSTW1iZWQveW90dGEpLiBQbGVhc2Ugbm90ZSB0aGF0ICoqeW90dGEgaGFzIGl0cyBvd24gc2V0IG9mIGRlcGVuZGVuY2llcyoqLCBsaXN0ZWQgaW4gdGhlIFtpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zXShodHRwOi8vYXJtbWJlZC5naXRodWIuaW8veW90dGEvI2luc3RhbGxpbmctb24td2luZG93cykuCisgICogW1B5dGhvbl0oaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvKS4KKyAgKiBbVGhlIEFSTSBHQ0MgdG9vbGNoYWluXShodHRwczovL2xhdW5jaHBhZC5uZXQvZ2NjLWFybS1lbWJlZGRlZCkuCisgICogQSBzZXJpYWwgdGVybWluYWwgZW11bGF0b3IgKExpa2Ugc2NyZWVuLCBweVNlcmlhbCBhbmQgY3UpLgorKiBBbiBbRlJETS1LNjRGXShodHRwOi8vZGV2ZWxvcGVyLm1iZWQub3JnL3BsYXRmb3Jtcy9GUkRNLUs2NEYvKSBkZXZlbG9wbWVudCBib2FyZCwgb3IgYW5vdGhlciBib2FyZCBzdXBwb3J0ZWQgYnkgbWJlZCBPUyAoaW4gd2hpY2ggY2FzZSB5b3UnbGwgaGF2ZSB0byBzdWJzdGl0dXRlIGZyZG0tazY0Zi1nY2Mgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0IGluIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cpLgorKiBBIG1pY3JvLVVTQiBjYWJsZS4KKyogSWYgeW91ciBPUyBpcyBXaW5kb3dzLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIFtmb3IgdGhlIHNlcmlhbCBwb3J0IGRyaXZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubWJlZC5vcmcvaGFuZGJvb2svV2luZG93cy1zZXJpYWwtY29uZmlndXJhdGlvbikuCisKKyMjIEdldHRpbmcgc3RhcnRlZAorCisxLiBDb25uZWN0IHRoZSBGUkRNLUs2NEYgdG8gdGhlIGNvbXB1dGVyIHdpdGggdGhlIG1pY3JvLVVTQiBjYWJsZSwgYmVpbmcgY2FyZWZ1bCB0byB1c2UgdGhlICJPcGVuU0RBIiBjb25uZWN0b3Igb24gdGhlIHRhcmdldCBib2FyZC4KKworMi4gTmF2aWdhdGUgdG8gdGhlIG1iZWR0bHMgZGlyZWN0b3J5IHN1cHBsaWVkIHdpdGggeW91ciByZWxlYXNlIGFuZCBvcGVuIGEgdGVybWluYWwuCisKKzMuIFNldCB0aGUgeW90dGEgdGFyZ2V0OgorCisgICAgYGBgCisgICAgeW90dGEgdGFyZ2V0IGZyZG0tazY0Zi1nY2MKKyAgICBgYGAKKworNC4gQnVpbGQgbWJlZHRscyBhbmQgdGhlIGV4YW1wbGVzLiBUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lIGlmIHRoaXMgaXMgeW91ciBmaXJzdCBjb21waWxhdGlvbjoKKworICAgIGBgYAorICAgICQgeW90dGEgYnVpbGQKKyAgICBgYGAKKworNS4gQ29weSBgYnVpbGQvZnJkbS1rNjRmLWdjYy90ZXN0L21iZWR0bHMtdGVzdC1leGFtcGxlLWhhc2hpbmcuYmluYCB0byB5b3VyIG1iZWQgYm9hcmQgYW5kIHdhaXQgdW50aWwgdGhlIExFRCBuZXh0IHRvIHRoZSBVU0IgcG9ydCBzdG9wcyBibGlua2luZy4KKworNi4gU3RhcnQgdGhlIHNlcmlhbCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgY29ubmVjdCB0byB0aGUgdmlydHVhbCBzZXJpYWwgcG9ydCBwcmVzZW50ZWQgYnkgRlJETS1LNjRGLiAKKworCVVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzOgorCisJKiAxMTUyMDAgYmF1ZCAobm90IDk2MDApLgorCSogOE4xLgorCSogTm8gZmxvdyBjb250cm9sLiAKKworNy4gUHJlc3MgdGhlIFJlc2V0IGJ1dHRvbiBvbiB0aGUgYm9hcmQuCisKKzguIFRoZSBvdXRwdXQgaW4gdGhlIHRlcm1pbmFsIHdpbmRvdyBzaG91bGQgbG9vayBsaWtlOgorCisgICAgYGBgCisgICAge3t0aW1lb3V0OzEwfX0KKyAgICB7e2hvc3RfdGVzdF9uYW1lO2RlZmF1bHR9fQorICAgIHt7ZGVzY3JpcHRpb247bWJlZCBUTFMgZXhhbXBsZSBvbiBoYXNoaW5nfX0KKyAgICB7e3Rlc3RfaWQ7TUJFRFRMU19FWF9IQVNISU5HfX0KKyAgICB7e3N0YXJ0fX0KKworCisgICAgTWV0aG9kIDE6IDMxNWY1YmRiNzZkMDc4YzQzYjhhYzAwNjRlNGEwMTY0NjEyYjFmY2U3N2M4NjkzNDViZmM5NGM3NTg5NGVkZDMKKyAgICBNZXRob2QgMjogMzE1ZjViZGI3NmQwNzhjNDNiOGFjMDA2NGU0YTAxNjQ2MTJiMWZjZTc3Yzg2OTM0NWJmYzk0Yzc1ODk0ZWRkMworICAgIE1ldGhvZCAzOiAzMTVmNWJkYjc2ZDA3OGM0M2I4YWMwMDY0ZTRhMDE2NDYxMmIxZmNlNzdjODY5MzQ1YmZjOTRjNzU4OTRlZGQzCisgICAgTWV0aG9kIDQ6IDMxNWY1YmRiNzZkMDc4YzQzYjhhYzAwNjRlNGEwMTY0NjEyYjFmY2U3N2M4NjkzNDViZmM5NGM3NTg5NGVkZDMKKworICAgIERPTkUKKyAgICB7e3N1Y2Nlc3N9fQorICAgIHt7ZW5kfX0KKyAgICBgYGAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtaGFzaGluZy9tYWluLmNwcCBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL2V4YW1wbGUtaGFzaGluZy9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1oYXNoaW5nL21haW4uY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogIEhlbGxvIHdvcmxkIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGhhc2hpbmcgZnVuY3Rpb25zIG9mIG1iZWQgVExTCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaWxsdXN0cmF0ZXMgdmFyaW91cyB3YXlzIG9mIGhhc2hpbmcgYSBidWZmZXIuCisgKiBZb3Ugbm9ybWFsbHkgbmVlZCBvbmx5IG9uZSBvZiB0aGVzZSB0d28gaW5jbHVkZXMuCisgKi8KKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIiAvKiBTSEEtMjU2IG9ubHkgKi8KKyNpbmNsdWRlICJtYmVkdGxzL21kLmgiICAgICAvKiBnZW5lcmljIGludGVyZmFjZSAqLworCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9NQkVEKQorI2luY2x1ZGUgIm1iZWQtZHJpdmVycy9tYmVkLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxjc3RkaW8+CisKK3N0YXRpYyB2b2lkIHByaW50X2hleChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgdW5zaWduZWQgY2hhciBidWZbXSwgc2l6ZV90IGxlbikKK3sKKyAgICBwcmludGYoIiVzOiAiLCB0aXRsZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICBwcmludGYoIiUwMngiLCBidWZbaV0pOworCisgICAgcHJpbnRmKCJcclxuIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGhlbGxvX3N0cltdID0gIkhlbGxvLCB3b3JsZCEiOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlbGxvX2J1ZmZlciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGhlbGxvX3N0cjsKK3N0YXRpYyBjb25zdCBzaXplX3QgaGVsbG9fbGVuID0gc2l6ZW9mIGhlbGxvX3N0ciAtIDE7CisKK2ludCBleGFtcGxlKHZvaWQpCit7CisgICAgcHJpbnRmKCAiXHJcblxyXG4iICk7CisKKyAgICAvKgorICAgICAqIE1ldGhvZCAxOiB1c2UgYWxsLWluLW9uZSBmdW5jdGlvbiBvZiBhIHNwZWNpZmljIFNIQS14eHggbW9kdWxlCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciBvdXRwdXQxWzMyXTsgLyogU0hBLTI1NiBvdXRwdXRzIDMyIGJ5dGVzICovCisKKyAgICAvKiAwIGhlcmUgbWVhbnMgdXNlIHRoZSBmdWxsIFNIQS0yNTYsIG5vdCB0aGUgU0hBLTIyNCB2YXJpYW50ICovCisgICAgbWJlZHRsc19zaGEyNTYoaGVsbG9fYnVmZmVyLCBoZWxsb19sZW4sIG91dHB1dDEsIDApOworCisgICAgcHJpbnRfaGV4KCJNZXRob2QgMSIsIG91dHB1dDEsIHNpemVvZiBvdXRwdXQxKTsKKworCisgICAgLyoKKyAgICAgKiBNZXRob2QgMjogdXNlIHRoZSBzdHJlYW1pbmcgaW50ZXJmYWNlIG9mIGEgc3BlY2lmaWMgU0hBLXh4eCBtb2R1bGUKKyAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBnZXQgb3VyIGlucHV0IHBpZWNld2lzZS4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dDJbMzJdOworICAgIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgY3R4MjsKKworICAgIG1iZWR0bHNfc2hhMjU2X2luaXQoJmN0eDIpOworICAgIG1iZWR0bHNfc2hhMjU2X3N0YXJ0cygmY3R4MiwgMCk7IC8qIFNIQS0yNTYsIG5vdCAyMjQgKi8KKworICAgIC8qIFNpbXVsYXRpbmcgbXVsdGlwbGUgZnJhZ21lbnRzICovCisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCZjdHgyLCBoZWxsb19idWZmZXIsIDEpOworICAgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZSgmY3R4MiwgaGVsbG9fYnVmZmVyICsgMSwgMSk7CisgICAgbWJlZHRsc19zaGEyNTZfdXBkYXRlKCZjdHgyLCBoZWxsb19idWZmZXIgKyAyLCBoZWxsb19sZW4gLSAyKTsKKworICAgIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaCgmY3R4Miwgb3V0cHV0Mik7CisgICAgcHJpbnRfaGV4KCJNZXRob2QgMiIsIG91dHB1dDIsIHNpemVvZiBvdXRwdXQyKTsKKworICAgIC8qIE9yIHlvdSBjb3VsZCByZS11c2UgdGhlIGNvbnRleHQgYnkgZG9pbmcgbWJlZHRsc19zaGEyNTZfc3RhcnRzKCkgYWdhaW4gKi8KKyAgICBtYmVkdGxzX3NoYTI1Nl9mcmVlKCZjdHgyKTsKKworICAgIC8qCisgICAgICogTWV0aG9kIDM6IHVzZSBhbGwtaW4tb25lIGZ1bmN0aW9uIG9mIHRoZSBnZW5lcmljZSBpbnRlcmZhY2UKKyAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIG91dHB1dDNbTUJFRFRMU19NRF9NQVhfU0laRV07IC8qIEVub3VnaCBmb3IgYW55IGhhc2ggKi8KKworICAgIC8qIENhbiBlYXNpbHkgcGljayBhbnkgaGFzaCB5b3Ugd2FudCwgYnkgaWRlbnRpZmllciAqLworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvMyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoTUJFRFRMU19NRF9TSEEyNTYpOworCisgICAgaWYgKG1kX2luZm8zID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIlNIQTI1NiBub3QgYXZhaWxhYmxlXHJcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpbnQgcmV0MyA9IG1iZWR0bHNfbWQobWRfaW5mbzMsIGhlbGxvX2J1ZmZlciwgaGVsbG9fbGVuLCBvdXRwdXQzKTsKKworICAgIGlmIChyZXQzICE9IDApCisgICAgeworICAgICAgICBwcmludGYoIm1kKCkgcmV0dXJuZWQgLTB4JTA0WFxyXG4iLCAtcmV0Myk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHByaW50X2hleCgiTWV0aG9kIDMiLCBvdXRwdXQzLCBtYmVkdGxzX21kX2dldF9zaXplKG1kX2luZm8zKSk7CisKKworICAgIC8qCisgICAgICogTWV0aG9kIDQ6IHN0cmVhbWluZyAmIGdlbmVyaWMgaW50ZXJmYWNlCisgICAgICovCisgICAgdW5zaWduZWQgY2hhciBvdXRwdXQ0W01CRURUTFNfTURfTUFYX1NJWkVdOyAvKiBFbm91Z2ggZm9yIGFueSBoYXNoICovCisKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbzQgPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKE1CRURUTFNfTURfU0hBMjU2KTsKKworICAgIGlmIChtZF9pbmZvNCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJTSEEyNTYgbm90IGF2YWlsYWJsZVxyXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4NDsKKworICAgIG1iZWR0bHNfbWRfaW5pdCgmY3R4NCk7CisKKyAgICBpbnQgcmV0NCA9IG1iZWR0bHNfbWRfaW5pdF9jdHgoJmN0eDQsIG1kX2luZm80KTsKKyAgICBpZiAocmV0NCAhPSAwKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJtZF9pbml0X2N0eCgpIHJldHVybmVkIC0weCUwNFhcclxuIiwgLXJldDQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBtYmVkdGxzX21kX3N0YXJ0cygmY3R4NCk7CisKKyAgICAvKiBTaW11bGF0aW5nIG11bHRpcGxlIGZyYWdtZW50cyAqLworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCZjdHg0LCBoZWxsb19idWZmZXIsIDEpOworICAgIG1iZWR0bHNfbWRfdXBkYXRlKCZjdHg0LCBoZWxsb19idWZmZXIgKyAxLCAxKTsKKyAgICBtYmVkdGxzX21kX3VwZGF0ZSgmY3R4NCwgaGVsbG9fYnVmZmVyICsgMiwgaGVsbG9fbGVuIC0gMik7CisKKyAgICBtYmVkdGxzX21kX2ZpbmlzaCgmY3R4NCwgb3V0cHV0NCk7CisgICAgcHJpbnRfaGV4KCJNZXRob2QgNCIsIG91dHB1dDQsIG1iZWR0bHNfbWRfZ2V0X3NpemUobWRfaW5mbzQpKTsKKworICAgIC8qIE9yIHlvdSBjb3VsZCByZS11c2UgdGhlIGNvbnRleHQgYnkgZG9pbmcgbWJlZHRsc19tZF9zdGFydHMoKSBhZ2FpbiAqLworICAgIG1iZWR0bHNfbWRfZnJlZSgmY3R4NCk7CisKKworICAgIHByaW50ZigiXHJcbkRPTkVcclxuIik7CisKKyAgICByZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkKKworI2luY2x1ZGUgIm1iZWQtZHJpdmVycy90ZXN0X2Vudi5oIgorI2luY2x1ZGUgIm1pbmFyL21pbmFyLmgiCisKK3N0YXRpYyB2b2lkIHJ1bigpIHsKKyAgICBNQkVEX0hPU1RURVNUX1RJTUVPVVQoMTApOworICAgIE1CRURfSE9TVFRFU1RfU0VMRUNUKGRlZmF1bHQpOworICAgIE1CRURfSE9TVFRFU1RfREVTQ1JJUFRJT04obWJlZCBUTFMgZXhhbXBsZSBvbiBoYXNoaW5nKTsKKyAgICBNQkVEX0hPU1RURVNUX1NUQVJUKCJNQkVEVExTX0VYX0hBU0hJTkciKTsKKyAgICBNQkVEX0hPU1RURVNUX1JFU1VMVChleGFtcGxlKCkgPT0gMCk7Cit9CisKK3ZvaWQgYXBwX3N0YXJ0KGludCwgY2hhcipbXSkgeworICAgIC8qIFVzZSAxMTUyMDAgYnBzIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIGV4YW1wbGVzICovCisgICAgZ2V0X3N0ZGlvX3NlcmlhbCgpLmJhdWQoMTE1MjAwKTsKKyAgICBtaW5hcjo6U2NoZWR1bGVyOjpwb3N0Q2FsbGJhY2sobWJlZDo6dXRpbDo6RnVuY3Rpb25Qb2ludGVyMDx2b2lkPihydW4pLmJpbmQoKSk7Cit9CisKKyNlbHNlCisKK2ludCBtYWluKCkgeworICAgIHJldHVybiBleGFtcGxlKCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdC9SRUFETUUubWQgYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLXNlbGZ0ZXN0L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMyMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdC9SRUFETUUubWQKQEAgLTAsMCArMSw4MiBAQAorIyBtYmVkIFRMUyBTZWxmdGVzdCBFeGFtcGxlCisKK1RoaXMgYXBwbGljYXRpb24gcnVucyB0aGUgdmFyaW91cyBzZWxmdGVzdCBmdW5jdGlvbnMgb2YgaW5kaXZpZHVhbCBtYmVkIFRMUyBjb21wb25lbnRzLiBJdCBzZXJ2ZXMgYXMgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gdmVyaWZ5IG9wZXJhdGlvbiBvZiBtYmVkIFRMUyBvbiB5b3VyIHBsYXRmb3JtLiBJbiB0aGUgZnV0dXJlLCBhIHdpZGVyIHBvcnRpb24gb2YgdGhlIG1iZWQgVExTIHRlc3Qgc3VpdGUgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGlzIGV4YW1wbGUgYXBwbGljYXRpb24uCisKKyMjIFByZS1yZXF1aXNpdGVzCisKK1RvIGJ1aWxkIGFuZCBydW4gdGhpcyBleGFtcGxlIHlvdSBtdXN0IGhhdmU6CisKKyogQSBjb21wdXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgaW5zdGFsbGVkOgorICAqIFtDTWFrZV0oaHR0cDovL3d3dy5jbWFrZS5vcmcvZG93bmxvYWQvKS4KKyAgKiBbeW90dGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL3lvdHRhKS4gUGxlYXNlIG5vdGUgdGhhdCAqKnlvdHRhIGhhcyBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMqKiwgbGlzdGVkIGluIHRoZSBbaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uc10oaHR0cDovL2FybW1iZWQuZ2l0aHViLmlvL3lvdHRhLyNpbnN0YWxsaW5nLW9uLXdpbmRvd3MpLgorICAqIFtQeXRob25dKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLykuCisgICogW1RoZSBBUk0gR0NDIHRvb2xjaGFpbl0oaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2djYy1hcm0tZW1iZWRkZWQpLgorICAqIEEgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIChMaWtlIHNjcmVlbiwgcHlTZXJpYWwgYW5kIGN1KS4KKyogQW4gW0ZSRE0tSzY0Rl0oaHR0cDovL2RldmVsb3Blci5tYmVkLm9yZy9wbGF0Zm9ybXMvRlJETS1LNjRGLykgZGV2ZWxvcG1lbnQgYm9hcmQsIG9yIGFub3RoZXIgYm9hcmQgc3VwcG9ydGVkIGJ5IG1iZWQgT1MgKGluIHdoaWNoIGNhc2UgeW91J2xsIGhhdmUgdG8gc3Vic3RpdHV0ZSBmcmRtLWs2NGYtZ2NjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHRhcmdldCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93KS4KKyogQSBtaWNyby1VU0IgY2FibGUuCisqIElmIHlvdXIgT1MgaXMgV2luZG93cywgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBbZm9yIHRoZSBzZXJpYWwgcG9ydCBkcml2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1iZWQub3JnL2hhbmRib29rL1dpbmRvd3Mtc2VyaWFsLWNvbmZpZ3VyYXRpb24pLgorCisjIyBHZXR0aW5nIHN0YXJ0ZWQKKworMS4gQ29ubmVjdCB0aGUgRlJETS1LNjRGIHRvIHRoZSBjb21wdXRlciB3aXRoIHRoZSBtaWNyby1VU0IgY2FibGUsIGJlaW5nIGNhcmVmdWwgdG8gdXNlIHRoZSAiT3BlblNEQSIgY29ubmVjdG9yIG9uIHRoZSB0YXJnZXQgYm9hcmQuCisKKzIuIE5hdmlnYXRlIHRvIHRoZSBtYmVkdGxzIGRpcmVjdG9yeSBzdXBwbGllZCB3aXRoIHlvdXIgcmVsZWFzZSBhbmQgb3BlbiBhIHRlcm1pbmFsLgorCiszLiBTZXQgdGhlIHlvdHRhIHRhcmdldDoKKworICAgIGBgYAorICAgIHlvdHRhIHRhcmdldCBmcmRtLWs2NGYtZ2NjCisgICAgYGBgCisKKzQuIEJ1aWxkIG1iZWR0bHMgYW5kIHRoZSBleGFtcGxlcy4gVGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSBpZiB0aGlzIGlzIHlvdXIgZmlyc3QgY29tcGlsYXRpb246CisKKyAgICBgYGAKKyAgICAkIHlvdHRhIGJ1aWxkCisgICAgYGBgCisKKzUuIENvcHkgYGJ1aWxkL2ZyZG0tazY0Zi1nY2MvdGVzdC9tYmVkdGxzLXRlc3QtZXhhbXBsZS1zZWxmdGVzdC5iaW5gIHRvIHlvdXIgbWJlZCBib2FyZCBhbmQgd2FpdCB1bnRpbCB0aGUgTEVEIG5leHQgdG8gdGhlIFVTQiBwb3J0IHN0b3BzIGJsaW5raW5nLgorCis2LiBTdGFydCB0aGUgc2VyaWFsIHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBjb25uZWN0IHRvIHRoZSB2aXJ0dWFsIHNlcmlhbCBwb3J0IHByZXNlbnRlZCBieSBGUkRNLUs2NEYuIAorCisJVXNlIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6CisKKwkqIDExNTIwMCBiYXVkIChub3QgOTYwMCkuCisJKiA4TjEuCisJKiBObyBmbG93IGNvbnRyb2wuIAorCis3LiBQcmVzcyB0aGUgUmVzZXQgYnV0dG9uIG9uIHRoZSBib2FyZC4KKworOC4gVGhlIG91dHB1dCBpbiB0aGUgdGVybWluYWwgd2luZG93IHNob3VsZCBsb29rIGxpa2U6CisKKyAgICBgYGAKKyAgICB7e3RpbWVvdXQ7NDB9fQorICAgIHt7aG9zdF90ZXN0X25hbWU7ZGVmYXVsdH19CisgICAge3tkZXNjcmlwdGlvbjttYmVkIFRMUyBzZWxmdGVzdCBwcm9ncmFtfX0KKyAgICB7e3Rlc3RfaWQ7TUJFRFRMU19TRUxGVEVTVH19CisgICAge3tzdGFydH19CisKKyAgICAgIFNIQS0yMjQgdGVzdCAjMTogcGFzc2VkCisgICAgICBTSEEtMjI0IHRlc3QgIzI6IHBhc3NlZAorICAgICAgU0hBLTIyNCB0ZXN0ICMzOiBwYXNzZWQKKyAgICAgIFNIQS0yNTYgdGVzdCAjMTogcGFzc2VkCisgICAgICBTSEEtMjU2IHRlc3QgIzI6IHBhc3NlZAorICAgICAgU0hBLTI1NiB0ZXN0ICMzOiBwYXNzZWQKKworICAgICAgICBbIC4uLiBzZXZlcmFsIGxpbmVzIG9taXR0ZWQgLi4uIF0KKworICAgICAgQ1RSX0RSQkcgKFBSID0gVFJVRSkgOiBwYXNzZWQKKyAgICAgIENUUl9EUkJHIChQUiA9IEZBTFNFKTogcGFzc2VkCisKKyAgICAgIEhNQUNfRFJCRyAoUFIgPSBUcnVlKSA6IHBhc3NlZAorICAgICAgSE1BQ19EUkJHIChQUiA9IEZhbHNlKSA6IHBhc3NlZAorCisgICAgICBFQ1AgdGVzdCAjMSAoY29uc3RhbnQgb3BfY291bnQsIGJhc2UgcG9pbnQgRyk6IHBhc3NlZAorICAgICAgRUNQIHRlc3QgIzIgKGNvbnN0YW50IG9wX2NvdW50LCBvdGhlciBwb2ludCk6IHBhc3NlZAorCisgICAgICBFTlRST1BZIHRlc3Q6IHBhc3NlZAorCisgICAgICBbIEFsbCB0ZXN0cyBwYXNzZWQgXQorCisgICAge3tzdWNjZXNzfX0KKyAgICB7e2VuZH19CisgICAgYGBgCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9leGFtcGxlLXNlbGZ0ZXN0L21haW4uY3BwIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdC9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmY1YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvZXhhbXBsZS1zZWxmdGVzdC9tYWluLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqICBTZWxmLXRlc3QgZGVtb25zdHJhdGlvbiBwcm9ncmFtCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE1LCBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWJlZCBUTFMgKGh0dHBzOi8vdGxzLm1iZWQub3JnKQorICovCisKKyNpZiAhZGVmaW5lZChQT0xBUlNTTF9DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRscy9lbnRyb3B5LmgiCisjaW5jbHVkZSAibWJlZHRscy9obWFjX2RyYmcuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2N0cl9kcmJnLmgiCisjaW5jbHVkZSAibWJlZHRscy9kaG0uaCIKKyNpbmNsdWRlICJtYmVkdGxzL2djbS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2NtLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZDIuaCIKKyNpbmNsdWRlICJtYmVkdGxzL21kNC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvbWQ1LmgiCisjaW5jbHVkZSAibWJlZHRscy9yaXBlbWQxNjAuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3NoYTI1Ni5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc2hhNTEyLmgiCisjaW5jbHVkZSAibWJlZHRscy9hcmM0LmgiCisjaW5jbHVkZSAibWJlZHRscy9kZXMuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Flcy5oIgorI2luY2x1ZGUgIm1iZWR0bHMvY2FtZWxsaWEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2Jhc2U2NC5oIgorI2luY2x1ZGUgIm1iZWR0bHMvYmlnbnVtLmgiCisjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3g1MDkuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3h0ZWEuaCIKKyNpbmNsdWRlICJtYmVkdGxzL3BrY3M1LmgiCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUExBVEZPUk1fQykKKyNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtLmgiCisjZWxzZQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIG1iZWR0bHNfcHJpbnRmICAgICBwcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyNpbmNsdWRlICJtYmVkdGxzL21lbW9yeV9idWZmZXJfYWxsb2MuaCIKKyNlbmRpZgorCitpbnQgc2VsZnRlc3QoIGludCBhcmdjLCBjaGFyICphcmd2W10gKQoreworICAgIGludCByZXQgPSAwLCB2OworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgdW5zaWduZWQgY2hhciBidWZbMTAwMDAwMF07CisjZW5kaWYKKworICAgIGlmKCBhcmdjID09IDIgJiYgc3RyY21wKCBhcmd2WzFdLCAiLXF1aWV0IiApID09IDAgKQorICAgICAgICB2ID0gMDsKKyAgICBlbHNlCisgICAgeworICAgICAgICB2ID0gMTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfU0VMRl9URVNUKQorCisjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKKyAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYnVmLCBzaXplb2YoYnVmKSApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfTUQyX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tZDJfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX01ENF9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWQ0X3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX21kNV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUklQRU1EMTYwX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19yaXBlbWQxNjBfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTFfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NoYTFfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfc2hhMjU2X3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NoYTUxMl9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQVJDNF9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXJjNF9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVTX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kZXNfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYWVzX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19HQ01fQykgJiYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfZ2NtX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DQ01fQykgJiYgZGVmaW5lZChNQkVEVExTX0FFU19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY2NtX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19CQVNFNjRfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2Jhc2U2NF9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQklHTlVNX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19tcGlfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfcnNhX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X1VTRV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeDUwOV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfWFRFQV9DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfeHRlYV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2NhbWVsbGlhX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19DVFJfRFJCR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0hNQUNfRFJCR19DKQorICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfaG1hY19kcmJnX3NlbGZfdGVzdCggdiApICkgIT0gMCApCisgICAgICAgIHJldHVybiggcmV0ICk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VjcF9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfREhNX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19kaG1fc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfQykKKyAgICBpZiggKCByZXQgPSBtYmVkdGxzX2VudHJvcHlfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BLQ1M1X0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc19wa2NzNV9zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfVElNSU5HX0MpCisgICAgaWYoICggcmV0ID0gbWJlZHRsc190aW1pbmdfc2VsZl90ZXN0KCB2ICkgKSAhPSAwICkKKyAgICAgICAgcmV0dXJuKCByZXQgKTsKKyNlbmRpZgorCisjZWxzZQorICAgIG1iZWR0bHNfcHJpbnRmKCAiIFBPTEFSU1NMX1NFTEZfVEVTVCBub3QgZGVmaW5lZC5cbiIgKTsKKyNlbmRpZgorCisgICAgaWYoIHYgIT0gMCApCisgICAgeworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpICYmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfREVCVUcpCisgICAgICAgIG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zdGF0dXMoKTsKKyNlbmRpZgorICAgIH0KKworI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCisgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoKTsKKworICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfbWVtb3J5X2J1ZmZlcl9hbGxvY19zZWxmX3Rlc3QoIHYgKSApICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworI2VuZGlmCisKKyAgICBpZiggdiAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBbIEFsbCB0ZXN0cyBwYXNzZWQgXVxuXG4iICk7CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuKCByZXQgKTsKK30KKworI2lmIGRlZmluZWQoVEFSR0VUX0xJS0VfTUJFRCkKKworI2luY2x1ZGUgIm1iZWQtZHJpdmVycy90ZXN0X2Vudi5oIgorI2luY2x1ZGUgIm1pbmFyL21pbmFyLmgiCisKK3N0YXRpYyB2b2lkIHJ1bigpIHsKKyAgICBNQkVEX0hPU1RURVNUX1RJTUVPVVQoNDApOworICAgIE1CRURfSE9TVFRFU1RfU0VMRUNUKGRlZmF1bHQpOworICAgIE1CRURfSE9TVFRFU1RfREVTQ1JJUFRJT04obWJlZCBUTFMgc2VsZnRlc3QgcHJvZ3JhbSk7CisgICAgTUJFRF9IT1NUVEVTVF9TVEFSVCgiTUJFRFRMU19TRUxGVEVTVCIpOworICAgIE1CRURfSE9TVFRFU1RfUkVTVUxUKHNlbGZ0ZXN0KDAsIE5VTEwpID09IDApOworfQorCit2b2lkIGFwcF9zdGFydChpbnQsIGNoYXIqW10pIHsKKyAgICAvKiBVc2UgMTE1MjAwIGJwcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBleGFtcGxlcyAqLworICAgIGdldF9zdGRpb19zZXJpYWwoKS5iYXVkKDExNTIwMCk7CisgICAgbWluYXI6OlNjaGVkdWxlcjo6cG9zdENhbGxiYWNrKG1iZWQ6OnV0aWw6OkZ1bmN0aW9uUG9pbnRlcjA8dm9pZD4ocnVuKS5iaW5kKCkpOworfQorCisjZWxzZQorCitpbnQgbWFpbigpIHsKKyAgICByZXR1cm4gc2VsZnRlc3QoMCwgTlVMTCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvbW9kdWxlLmpzb24gYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS9tb2R1bGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhiODIyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbWJlZHRscy9yZXBvL3lvdHRhL2RhdGEvbW9kdWxlLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJuYW1lIjogIm1iZWR0bHMiLAorICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGhlIG1iZWQgVExTIGNyeXB0by9TU0wvVExTIGxpYnJhcnkiLAorICAgICJsaWNlbnNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInVybCI6ICJodHRwczovL3NwZHgub3JnL2xpY2Vuc2VzL0FwYWNoZS0yLjAiLAorICAgICAgICAgICAgInR5cGUiOiAiQXBhY2hlLTIuMCIKKyAgICAgICAgfQorICAgIF0sCisgICAgImRlcGVuZGVuY2llcyI6IHt9LAorICAgICJ0YXJnZXREZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtYmVkIjogeyAiY21zaXMtY29yZSI6ICJeMS4wLjAiIH0KKyAgICB9LAorICAgICJ0ZXN0VGFyZ2V0RGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWJlZCI6IHsgIm1iZWQtZHJpdmVycyI6ICJeMS4wLjAiIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS90YXJnZXRfY29uZmlnLmggYi90aGlyZF9wYXJ0eS9tYmVkdGxzL3JlcG8veW90dGEvZGF0YS90YXJnZXRfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1MGNlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L21iZWR0bHMvcmVwby95b3R0YS9kYXRhL3RhcmdldF9jb25maWcuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogIFRlbXBvcmFyeSB0YXJnZXQtc3BlY2lmaWMgY29uZmlnLmggZm9yIGVudHJvcHkgY29sbGVjdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSwgQVJNIExpbWl0ZWQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1iZWQgVExTIChodHRwczovL3Rscy5tYmVkLm9yZykKKyAqLworCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9NQkVEKQorI2RlZmluZSBNQkVEVExTX05PX1BMQVRGT1JNX0VOVFJPUFkKKyN1bmRlZiBNQkVEVExTX0hBVkVfVElNRV9EQVRFCisjdW5kZWYgTUJFRFRMU19GU19JTworI2VuZGlmCisKKy8qCisgKiBXQVJOSU5HOiB0aGlzIGlzIHRlbXBvcmFyeSEKKyAqIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgeW90dGEgbW9kdWxlIHdoaWNoIHdvdWxkIGJlIGEgdGFyZ2V0CisgKiBkZXBlbmRlbmN5IG9mIG1iZWR0bHMgKHNlZSBJT1RTU0wtMzEzKQorICovCisjaWYgZGVmaW5lZChUQVJHRVRfTElLRV9LNjRGKQorI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfSEFSRFdBUkVfQUxUCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vLmRlZmF1bHQtdmVyc2lvbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vLmRlZmF1bHQtdmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDY4YjI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby8uZGVmYXVsdC12ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzEuNApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9DSEFOR0VTIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjYwNWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL0NIQU5HRVMKQEAgLTAsMCArMSw2MyBAQAorMS40ICgyMDE3LTA2LTE1KQorCisJKiBSZW1vdmUgcGFja2FnZSBhcmNoaXZlcyBhbmQgcHJlYnVpbHQgaW4tcGFja2FnZSBiaW5hcmllcy4KKwkqIEVuc3VyZSB0aGF0IEdOVSB0b29sIGJ1aWxkIHByb2Nlc3MgaXMgY29tcGxldGVseSBzZWxmLXN1ZmZpY2llbnQKKwkgIGFuZCBoYXMgbm8gZGVwZW5kZW5jaWVzIG9uIGluc3RhbGxlZCBob3N0IGJpbmFyaWVzLgkKKwkqIEFkZCBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIHZlcnNpb25lZCBjb3JlIGFuZCBwcmVidWlsdCBwYWNrYWdlIGJpbmFyeQorCSAgZGlzdGlydWJ0aW9ucy4KKwkqIEVuc3VyZSB0aGF0ICdib290c3RyYXAnIGNhbiB3b3JrIHdpdGggZWl0aGVyIHByZWJ1aWx0IGluLXBhY2thZ2UKKwkgIGJpbmFyaWVzIG9yIHdpdGggaW5zdGFsbGVkIGhvc3QgYmluYXJpZXMuCisJCisxLjMuMSAoMjAxNy0wNS0xMCkKKworCSogU3BlY2lmeSB0aGUgY29ycmVjdCBtNCBVUkwuCisKKzEuMyAoMjAxNi0xMi0wNSkKKworCSogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIGRldGVjdGlvbiBvZiBzdXBwb3J0ZWQgQysrIHZlcnNpb24uCisKKzEuMi4yICgyMDE2LTA4LTI5KQorCisJKiBVc2UgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIGFzIGRlc2lnbmVkIGFuZCBpbnRlbmRlZCwgdG8KKwkgIE5MX1BST0dfTE5ESVIgcmF0aGVyIHRoYW4gaGFyZC1jb2RlZCB2YWx1ZXMgZm9yIHRoZSBHTlUgY3AKKwkgIGZhbGxiYWNrLgorCisxLjIuMSAoMjAxNi0wNy0xMykKKworCSogTWFrZSB0aGUgJ3ByZXR0eScgYW5kICdwcmV0dHktY2hlY2snIHRhcmdldHMgZGVwZW5kZW50IG9uCisJICAkKFBSRVRUWV9GSUxFUykgYW5kIHRoZW4gaXRlcmF0ZSBvbiBhIGZpbHRlcmVkIHZlcnNpb24gb2YgJCheKSBzbworCSAgdGhhdCBtYWtlJ3MgVlBBVEggZW5naW5lIGNhbiBiZSBsZXZlcmFnZWQgdG8gZmluZCBzb3VyY2VzIGFuZAorCSAgaGVhZGVycyB0aGF0IGFyZSBub3QgaW4gZGlyZWN0bHkgc3RhdC1hYmxlIHBhdGhzIGxpc3RlZCBpbgorCSAgJChQUkVUVFlfRklMRVMpLgorCisxLjIgKDIwMTYtMDYtMDEpCisKKwkqIEFkZGVkIHN1cHBvcnQgZm9yIGNvZGluZyBzdHlsZSBmb3JtYXR0aW5nIGFuZCBjaGVja2luZyB0YXJnZXRzLgorCisxLjEuMiAoMjAxNi0wMy0xOSkKKworCSogSW1wcm92ZSB0aGUgY29kZSBjb3ZlcmFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgdG8gY292ZXIgYW4gZW50aXJlCisJICBwcm9qZWN0J3Mgc291cmNlLgorCisxLjEuMSAoMjAxNS0xMi0xMCkKKworCSogUHJvcGVybHkgaGFuZGxlIHBhY2thZ2Ugb3B0aW9uYWxpdHkgd2hlbiB1c2luZyBwa2ctY29uZmlnIHRvCisJICBkZXRlY3QgZXh0ZXJuYWwgcGFja2FnZXMuCisKKzEuMSAoMjAxNS0xMS0xMCkKKworCSogQWRkZWQgc3VwcG9ydCBmb3IgYSByZWN1cnNpdmUgJ2luc3RhbGwtaGVhZGVycycgdGFyZ2V0IHRvIGFsbG93CisJICBwYWNrYWdlcyB0aGF0IHdpc2ggdG8gbGV2ZXJhZ2UgaXQgdG8gaW5zdGFsbCB0aGVpciBwdWJsaWMgaGVhZGVycworCSAgYW5kIG9ubHkgdGhlaXIgcHVibGljIGhlYWRlcnMgdG8gREVTVERJUiBvbiAnbWFrZSBpbnN0YWxsLWhlYWRlcnMnCisJICB3aXRob3V0IHBlcmZvcm1pbmcgYW55IGFkZGl0aW9uYWwgYnVpbGQgYWN0aW9ucy4KKworMS4wLjEgKDIwMTUtMTAtMjcpCisKKwkqIFJlZmFjdG9yZWQgTkxfV0lUSF9QQUNLQUdFIGludG8gTkxfV0lUSF9SRVFVSVJFRF9FWFRFUk5BTF9QQUNLQUdFLAorCSAgTkxfV0lUSF9PUFRJT05BTF9FWFRFUk5BTF9QQUNLQUdFLCBOTF9XSVRIX1JFUVVJUkVEX0lOVEVSTkFMX1BBQ0tBR0UsCisJICBhbmQgTkxfV0lUSF9PUFRJT05BTF9JTlRFUk5BTF9QQUNLQUdFLgorCisxLjAgKDIwMTUtMDMtMTkpCisKKyAgICAgICAgKiBJbml0aWFsIHJldmlzaW9uIHdpdGggR05VIG00IDEuNC4xNywgYXV0b2NvbmYgMi42OCwgYXV0b21ha2UgMS4xNC4xLAorICAgICAgICAgIGxpYnRvb2wgMi40LjIsIG1ha2UgMy44MiwgYW5kIGNvcmV1dGlscyA4LjIxLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9DT05UUklCVVRJTkcubWQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI3YjdkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9DT05UUklCVVRJTkcubWQKQEAgLTAsMCArMSwyNyBAQAorV2FudCB0byBjb250cmlidXRlPyBHcmVhdCEgRmlyc3QsIHJlYWQgdGhpcyBwYWdlIChpbmNsdWRpbmcgdGhlIHNtYWxsIHByaW50IGF0IHRoZSBlbmQpLgorCisjIyMgQmVmb3JlIHlvdSBjb250cmlidXRlCitCZWZvcmUgd2UgY2FuIHVzZSB5b3VyIGNvZGUsIHlvdSBtdXN0IHNpZ24gdGhlCitbR29vZ2xlIEluZGl2aWR1YWwgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnRdCisoaHR0cHM6Ly9jbGEuZGV2ZWxvcGVycy5nb29nbGUuY29tL2Fib3V0L2dvb2dsZS1pbmRpdmlkdWFsKQorKENMQSksIHdoaWNoIHlvdSBjYW4gZG8gb25saW5lLiBUaGUgQ0xBIGlzIG5lY2Vzc2FyeSBtYWlubHkgYmVjYXVzZSB5b3Ugb3duIHRoZQorY29weXJpZ2h0IHRvIHlvdXIgY2hhbmdlcywgZXZlbiBhZnRlciB5b3VyIGNvbnRyaWJ1dGlvbiBiZWNvbWVzIHBhcnQgb2Ygb3VyCitjb2RlYmFzZSwgc28gd2UgbmVlZCB5b3VyIHBlcm1pc3Npb24gdG8gdXNlIGFuZCBkaXN0cmlidXRlIHlvdXIgY29kZS4gV2UgYWxzbworbmVlZCB0byBiZSBzdXJlIG9mIHZhcmlvdXMgb3RoZXIgdGhpbmdz4oCUZm9yIGluc3RhbmNlIHRoYXQgeW91J2xsIHRlbGwgdXMgaWYgeW91Citrbm93IHRoYXQgeW91ciBjb2RlIGluZnJpbmdlcyBvbiBvdGhlciBwZW9wbGUncyBwYXRlbnRzLiBZb3UgZG9uJ3QgaGF2ZSB0byBzaWduCit0aGUgQ0xBIHVudGlsIGFmdGVyIHlvdSd2ZSBzdWJtaXR0ZWQgeW91ciBjb2RlIGZvciByZXZpZXcgYW5kIGEgbWVtYmVyIGhhcworYXBwcm92ZWQgaXQsIGJ1dCB5b3UgbXVzdCBkbyBpdCBiZWZvcmUgd2UgY2FuIHB1dCB5b3VyIGNvZGUgaW50byBvdXIgY29kZWJhc2UuCitCZWZvcmUgeW91IHN0YXJ0IHdvcmtpbmcgb24gYSBsYXJnZXIgY29udHJpYnV0aW9uLCB5b3Ugc2hvdWxkIGdldCBpbiB0b3VjaCB3aXRoCit1cyBmaXJzdCB0aHJvdWdoIHRoZSBpc3N1ZSB0cmFja2VyIHdpdGggeW91ciBpZGVhIHNvIHRoYXQgd2UgY2FuIGhlbHAgb3V0IGFuZAorcG9zc2libHkgZ3VpZGUgeW91LiBDb29yZGluYXRpbmcgdXAgZnJvbnQgbWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gYXZvaWQKK2ZydXN0cmF0aW9uIGxhdGVyIG9uLgorCisjIyMgQ29kZSByZXZpZXdzCitBbGwgc3VibWlzc2lvbnMsIGluY2x1ZGluZyBzdWJtaXNzaW9ucyBieSBwcm9qZWN0IG1lbWJlcnMsIHJlcXVpcmUgcmV2aWV3LiBXZQordXNlIEdpdGh1YiBwdWxsIHJlcXVlc3RzIGZvciB0aGlzIHB1cnBvc2UuCisKKyMjIyBUaGUgc21hbGwgcHJpbnQKK0NvbnRyaWJ1dGlvbnMgbWFkZSBieSBjb3Jwb3JhdGlvbnMgYXJlIGNvdmVyZWQgYnkgYSBkaWZmZXJlbnQgYWdyZWVtZW50IHRoYW4KK3RoZSBvbmUgYWJvdmUsIHRoZQorW1NvZnR3YXJlIEdyYW50IGFuZCBDb3Jwb3JhdGUgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnRdCisoaHR0cHM6Ly9jbGEuZGV2ZWxvcGVycy5nb29nbGUuY29tL2Fib3V0L2dvb2dsZS1jb3Jwb3JhdGUpLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9Db21tb24ubWFrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9Db21tb24ubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZmIyOWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL0NvbW1vbi5tYWsKQEAgLTAsMCArMSwxMjkgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTcgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgbWFrZSBmaWxlIGhlYWRlciBkZWZpbmVzIGNvbW1vbiB2YXJpYWJsZXMsIHJ1bGVzLCBhbmQKKyMgICAgICB0YXJnZXRzIGZvciBtYWludGFpbmluZyBubGJ1aWxkLWF1dG90b29scyBkaXN0cmlidXRpb25zLgorIworCisuREVGQVVMVF9HT0FMICAgICAgICAgPSBhbGwKKworIworIyBUaGlzIHBhY2thZ2UKKyMKK1BBQ0tBR0UgICAgICAgICAgICAgIDo9IG5sYnVpbGQtYXV0b3Rvb2xzCisKKyMKKyMgVG9vbHMKKyMKK0NBVCAgICAgICAgICAgICAgICAgID89IGNhdAorQ0hNT0QgICAgICAgICAgICAgICAgPz0gY2htb2QKK0NNUCAgICAgICAgICAgICAgICAgID89IGNtcAorRklORCAgICAgICAgICAgICAgICAgPz0gZmluZAorR1pJUCAgICAgICAgICAgICAgICAgPz0gZ3ppcAorTUtESVIgICAgICAgICAgICAgICAgPz0gbWtkaXIKK01WICAgICAgICAgICAgICAgICAgID89IG12CitSTSAgICAgICAgICAgICAgICAgICA/PSBybQorU0VEICAgICAgICAgICAgICAgICAgPz0gc2VkCitUQVIgICAgICAgICAgICAgICAgICA/PSB0YXIKK1haICAgICAgICAgICAgICAgICAgID89IHh6CisKK2Rpc3RfdGFyX0FSQ0hJVkUgICAgICA9ICQoVEFSKSAtY2hvZiAtCisKK2Rpc3RfdGd6X0FSQ0hJVkUgICAgICA9ICQoZGlzdF90YXJfQVJDSElWRSkKK2Rpc3RfdGd6X0NPTVBSRVNTICAgICA9ICQoR1pJUCkgLS1iZXN0IC1jCisKK2Rpc3RfdHh6X0FSQ0hJVkUgICAgICA9ICQoZGlzdF90YXJfQVJDSElWRSkKK2Rpc3RfdHh6X0NPTVBSRVNTICAgICA9ICQoWFopIC0tZXh0cmVtZSAtYworCitUR1pfRVhURU5TSU9OICAgICAgICA6PSAudGFyLmd6CitUWFpfRVhURU5TSU9OICAgICAgICA6PSAudGFyLnh6CisKK0RJU1RfVEFSR0VUUwkgICAgID89IGRpc3QtdGd6IGRpc3QtdHh6CitESVNUX0FSQ0hJVkVTICAgICAgICAgPSAkKGRpc3RfdGd6X1RBUkdFVFMpICQoZGlzdF90eHpfVEFSR0VUUykKKworIworIyBWZXJib3NpdHkKKyMKKworTkxfREVGQVVMVF9WRVJCT1NJVFkgID0gMAorCitOTF9WX0FUICAgICAgICAgICAgICAgPSAkKE5MX1ZfQVRfJChWKSkKK05MX1ZfQVRfICAgICAgICAgICAgICA9ICQoTkxfVl9BVF8kKE5MX0RFRkFVTFRfVkVSQk9TSVRZKSkKK05MX1ZfQVRfMCAgICAgICAgICAgICA9IEAKK05MX1ZfQVRfMSAgICAgICAgICAgICA9IAorCitOTF9WX01BS0UgICAgICAgICAgICAgPSAkKE5MX1ZfTUFLRV8kKFYpKQorTkxfVl9NQUtFXyAgICAgICAgICAgID0gJChOTF9WX01BS0VfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitOTF9WX01BS0VfMCAgICAgICAgICAgPSBAZWNobyAiICBNQUtFICAgICAkKEApIjsKK05MX1ZfTUFLRV8xICAgICAgICAgICA9IAorCitOTF9WX01LRElSX1AgICAgICAgICAgPSAkKE5MX1ZfTUtESVJfUF8kKFYpKQorTkxfVl9NS0RJUl9QXyAgICAgICAgID0gJChOTF9WX01LRElSX1BfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitOTF9WX01LRElSX1BfMCAgICAgICAgPSBAZWNobyAiICBNS0RJUiAgICAkKDEpIjsKK05MX1ZfTUtESVJfUF8xICAgICAgICA9IAorCitOTF9WX1JNRElSICAgICAgICAgICAgPSAkKE5MX1ZfUk1ESVJfJChWKSkKK05MX1ZfUk1ESVJfICAgICAgICAgICA9ICQoTkxfVl9STURJUl8kKE5MX0RFRkFVTFRfVkVSQk9TSVRZKSkKK05MX1ZfUk1ESVJfMCAgICAgICAgICA9IEBlY2hvICIgIFJNRElSICAgICQoMSkiOworTkxfVl9STURJUl8xICAgICAgICAgID0gCisKK05MX1ZfVEdaICAgICAgICAgICAgICA9ICQoTkxfVl9UR1pfJChWKSkKK05MX1ZfVEdaXyAgICAgICAgICAgICA9ICQoTkxfVl9UR1pfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitOTF9WX1RHWl8wICAgICAgICAgICAgPSBAZWNobyAiICBUR1ogICAgICAkKEApIjsKK05MX1ZfVEdaXzEgICAgICAgICAgICA9IAorCitOTF9WX1RYWiAgICAgICAgICAgICAgPSAkKE5MX1ZfVFhaXyQoVikpCitOTF9WX1RYWl8gICAgICAgICAgICAgPSAkKE5MX1ZfVFhaXyQoTkxfREVGQVVMVF9WRVJCT1NJVFkpKQorTkxfVl9UWFpfMCAgICAgICAgICAgID0gQGVjaG8gIiAgVFhaICAgICAgJChAKSI7CitOTF9WX1RYWl8xICAgICAgICAgICAgPSAKKworIworIyBubC1jcmVhdGUtZGlyIDxkaXJlY3Rvcnk+CisjCisjIENyZWF0ZSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgaW5jbHVkaW5nIGFueSBwYXJlbnQgZGlyZWN0b3JpZXMKKyMgdGhhdCBtYXkgbm90IGV4aXN0LgorIworZGVmaW5lIG5sLWNyZWF0ZS1kaXIKKyQoTkxfVl9BVCllY2hvICIgIE1LRElSICAgICQoMSkiOyBcCiskKE1LRElSKSAtcCAiJCgxKSIKK2VuZGVmICMgbmwtY3JlYXRlLWRpcgorCisjCisjIG5sLXJlbW92ZS1kaXIgPGRpcmVjdG9yeT4KKyMKKyMgSWYgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZXhpc3RzLCB0aGVuIGVuc3VyZSBhbGwgb2YgdGhlCisjIGRpcmVjdG9yaWVzIGFyZSB3cml0YWJsZSBieSB0aGUgY3VycmVudCB1c2VyLCBhbmQgdGhlbiBmb3JjaWJseQorIyByZW1vdmUgdGhlIGRpcmVjdG9yeSBhbmQgYWxsIG9mIGl0cyBjb250ZW50cywgc2xlZXBpbmcgZm9yIGZpdmUgKDUpCisjIHNlY29uZHMgYW5kIGZhaWx1cmUgYmVmb3JlIHRyeWluZyB0aGUgcmVtb3ZhbCBhZ2Fpbi4KKyMKK2RlZmluZSBubC1yZW1vdmUtZGlyCiskKE5MX1ZfUk1ESVIpIFwKK2lmIFsgLWQgIiQoMSkiIF07IHRoZW4gXAorICAgICQoRklORCkgIiQoMSkiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjICQoQ0hNT0QpIHUrdyB7fSAnOycgXAorICAgICYmICQoUk0pIC1yZiAiJCgxKSIgXAorICAgIHx8IHsgc2xlZXAgNSAmJiAkKFJNKSAtcmYgIiQoMSkiOyB9OyBcCitmaQorZW5kZWYgIyBubC1yZW1vdmUtZGlyCisKK2NsZWFuLWxvY2FsOgorCSQoTkxfVl9BVCkkKFJNKSAtZiAqfiAiIyIqCisKK2hlbHA6CisJQGVjaG8gIlRoaXMgbWFrZSBmaWxlIHNob2xkIG5vdCBiZSBuZWVkZWQgZm9yIGVuZCB1c2VycyBhbmQgc3lzdGVtICIKKwlAZWNobyAiaW50ZWdyYXRvcnMgb2YgJChQQUNLQUdFKS4gSXQgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIGJ5ICIKKwlAZWNobyAibWFpbnRhaW5lcnMgcHJvZHVjaW5nIGRpc3RyaWJ1dGlvbnMgb2YgJChQQUNLQUdFKS4iCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL0xJQ0VOU0UgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NTY5NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vTElDRU5TRQpAQCAtMCwwICsxLDIwMiBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vTUFOSUZFU1QgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL01BTklGRVNUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjgwZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL01BTklGRVNUCkBAIC0wLDAgKzEsODYgQEAKKy5kZWZhdWx0LXZlcnNpb24KKy5naXRpZ25vcmUKK0NIQU5HRVMKK0NPTlRSSUJVVElORy5tZAorTElDRU5TRQorTUFOSUZFU1QKK01ha2VmaWxlCitSRUFETUUubWQKK2F1dG9jb25mL2FyLWxpYgorYXV0b2NvbmYvY29tcGlsZQorYXV0b2NvbmYvY29uZmlnLmd1ZXNzCithdXRvY29uZi9jb25maWcuc3ViCithdXRvY29uZi9kZXBjb21wCithdXRvY29uZi9pbnN0YWxsLXNoCithdXRvY29uZi9sdG1haW4uc2gKK2F1dG9jb25mL200L2F4X2NoZWNrX2NvbXBpbGVyLm00CithdXRvY29uZi9tNC9heF9jaGVja19maWxlLm00CithdXRvY29uZi9tNC9heF9jaGVja19wcmVwcm9jZXNzb3IubTQKK2F1dG9jb25mL200L2F4X2NvbXBhcmVfdmVyc2lvbi5tNAorYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00CithdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMHgubTQKK2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNAorYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzE0Lm00CithdXRvY29uZi9tNC9heF9qbmlfaW5jbHVkZV9kaXIubTQKK2F1dG9jb25mL200L2F4X3Byb2dfZG94eWdlbi5tNAorYXV0b2NvbmYvbTQvYXhfcHRocmVhZC5tNAorYXV0b2NvbmYvbTQvbGlidG9vbC5tNAorYXV0b2NvbmYvbTQvbHRvcHRpb25zLm00CithdXRvY29uZi9tNC9sdHN1Z2FyLm00CithdXRvY29uZi9tNC9sdHZlcnNpb24ubTQKK2F1dG9jb25mL200L2x0fm9ic29sZXRlLm00CithdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2UubTQKK2F1dG9jb25mL200L25sX2VuYWJsZV9jb3ZlcmFnZV9yZXBvcnRpbmcubTQKK2F1dG9jb25mL200L25sX2VuYWJsZV9kZWJ1Zy5tNAorYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RvY3MubTQKK2F1dG9jb25mL200L25sX2VuYWJsZV9vcHRpbWl6YXRpb24ubTQKK2F1dG9jb25mL200L25sX2VuYWJsZV90ZXN0cy5tNAorYXV0b2NvbmYvbTQvbmxfZW5hYmxlX3dlcnJvci5tNAorYXV0b2NvbmYvbTQvbmxfZmlsdGVyZWRfY2Fub25pY2FsLm00CithdXRvY29uZi9tNC9ubF9wcm9nX2xuZGlyLm00CithdXRvY29uZi9tNC9ubF93ZXJyb3IubTQKK2F1dG9jb25mL200L25sX3dpdGhfcGFja2FnZS5tNAorYXV0b2NvbmYvbTQvcGtnLm00CithdXRvY29uZi9taXNzaW5nCithdXRvY29uZi9ta2luc3RhbGxkaXJzCithdXRvY29uZi9weS1jb21waWxlCithdXRvY29uZi90ZXN0LWRyaXZlcgorYXV0b21ha2UvcG9zdC5hbQorYXV0b21ha2UvcG9zdC9ydWxlcy5hbQorYXV0b21ha2UvcG9zdC9ydWxlcy9jb3ZlcmFnZS5hbQorYXV0b21ha2UvcG9zdC9ydWxlcy9oZWFkZXJzLmFtCithdXRvbWFrZS9wb3N0L3J1bGVzL3ByZXR0eS5hbQorYXV0b21ha2UvcHJlLmFtCithdXRvbWFrZS9wcmUvbWFjcm9zLmFtCithdXRvbWFrZS9wcmUvbWFjcm9zL2NvbnN0YW50cy5hbQorYXV0b21ha2UvcHJlL21hY3Jvcy9jb3ZlcmFnZS5hbQorYXV0b21ha2UvcHJlL21hY3Jvcy9wYXRocy5hbQorYXV0b21ha2UvcHJlL21hY3Jvcy9wcmV0dHkuYW0KK2F1dG9tYWtlL3ByZS9tYWNyb3Mvc3ViZGlycy5hbQorYXV0b21ha2UvcHJlL21hY3Jvcy92ZXJib3NpdHkuYW0KK2V0Yy9sY292LmNvbmZpZworZXhhbXBsZXMvRG94eWZpbGUuaW4KK2V4YW1wbGVzL01ha2VmaWxlLWRvYy5hbQorZXhhbXBsZXMvTWFrZWZpbGUtZnBzLmFtCitleGFtcGxlcy9NYWtlZmlsZS1zcmMuYW0KK2V4YW1wbGVzL01ha2VmaWxlLXRlc3RzLmFtCitleGFtcGxlcy9NYWtlZmlsZS10b3BsZXZlbC5hbQorZXhhbXBsZXMvYm9vdHN0cmFwCitleGFtcGxlcy9jb25maWd1cmUuYWMKK3NjcmlwdHMvYm9vdHN0cmFwCitzY3JpcHRzL2Jvb3RzdHJhcC1jb25maWd1cmUKK3NjcmlwdHMvbWtza2VsZXRvbgorc2NyaXB0cy9ta3ZlcnNpb24KK3Rvb2xzL3BhY2thZ2VzL2F1dG9jb25mL2F1dG9jb25mLnVybAordG9vbHMvcGFja2FnZXMvYXV0b2NvbmYvYXV0b2NvbmYudmVyc2lvbgordG9vbHMvcGFja2FnZXMvYXV0b21ha2UvYXV0b21ha2UudXJsCit0b29scy9wYWNrYWdlcy9hdXRvbWFrZS9hdXRvbWFrZS52ZXJzaW9uCit0b29scy9wYWNrYWdlcy9jb3JldXRpbHMvY29yZXV0aWxzLnVybAordG9vbHMvcGFja2FnZXMvY29yZXV0aWxzL2NvcmV1dGlscy52ZXJzaW9uCit0b29scy9wYWNrYWdlcy9saWJ0b29sL2xpYnRvb2wudXJsCit0b29scy9wYWNrYWdlcy9saWJ0b29sL2xpYnRvb2wudmVyc2lvbgordG9vbHMvcGFja2FnZXMvbTQvbTQudXJsCit0b29scy9wYWNrYWdlcy9tNC9tNC52ZXJzaW9uCit0b29scy9wYWNrYWdlcy9tYWtlL21ha2UudXJsCit0b29scy9wYWNrYWdlcy9tYWtlL21ha2UudmVyc2lvbgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL01ha2VmaWxlIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGU1M2YzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9NYWtlZmlsZQpAQCAtMCwwICsxLDIyNSBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNyBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBtYWtlIGZpbGUgc3VwcG9ydHMgZ2VuZXJhdGluZyBkaXN0cmlidXRpb25zIG9mCisjICAgICAgbmxidWlsZC1hdXRvdG9vbHMuCisjCisKK2luY2x1ZGUgQ29tbW9uLm1haworCisjCisjIEJ1aWxkIGRpcmVjdG9yaWVzCisjCisKK2J1aWxkZGlyICAgICAgICAgOj0gLgordG9wX2J1aWxkZGlyICAgICA6PSAuCithYnNfYnVpbGRkaXIgICAgIDo9ICQoQ1VSRElSKQorYWJzX3RvcF9idWlsZGRpciA6PSAkKENVUkRJUikKKworIworIyBTb3VyY2UgZGlyZWN0b3JpZXMKKyMKKworc3JjZGlyICAgICAgICAgICA6PSAuCit0b3Bfc3JjZGlyICAgICAgIDo9IC4KK2Fic19zcmNkaXIgICAgICAgOj0gJChDVVJESVIpCithYnNfdG9wX3NyY2RpciAgIDo9ICQoQ1VSRElSKQorCitkaXN0ZGlyICAgICAgICAgICA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQorCitkaXN0X3Rnel9UQVJHRVRTICA9ICQoZGlzdGRpcikkKFRHWl9FWFRFTlNJT04pCitkaXN0X3R4el9UQVJHRVRTICA9ICQoZGlzdGRpcikkKFRYWl9FWFRFTlNJT04pCisKK0RJU1RGSUxFUyAgICAgICAgOj0gJChzaGVsbCAkKENBVCkgTUFOSUZFU1QpCisKKyMKKyMgUGFja2FnZSB2ZXJzaW9uIGZpbGVzOgorIworIyAuZGVmYXVsdC12ZXJzaW9uIC0gVGhlIGRlZmF1bHQgcGFja2FnZSB2ZXJzaW9uLiBUaGlzIGZpbGUgaXMgQUxXQVlTIGNoZWNrZWQKKyMgICAgICAgICAgICAgICAgICAgIGluIGFuZCBzaG91bGQgYWx3YXlzIHJlcHJlc2VudCB0aGUgY3VycmVudCBiYXNlbGluZQorIyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4KKyMKKyMgLmRpc3QtdmVyc2lvbiAgICAtIFRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIHZlcnNpb24uIFRoaXMgZmlsZSBpcyBORVZFUgorIyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCBpbiB3aXRoaW4gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksIGlzIGF1dG8tCisjICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQsIGFuZCBpcyBvbmx5IGZvdW5kIGluIHRoZSBwYWNrYWdlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgLmxvY2FsLXZlcnNpb24gICAtIFRoZSBjdXJyZW50IHNvdXJjZSBjb2RlIGNvbnRyb2xsZWQgcGFja2FnZSB2ZXJzaW9uLiBUaGlzCisjICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIE5FVkVSIGNoZWNrZWQgaW4gd2l0aGluIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LAorIyAgICAgICAgICAgICAgICAgICAgaXMgYXV0by1nZW5lcmF0ZWQsIGFuZCBjYW4gYWx3YXlzIGJlIGZvdW5kIGluIGJvdGggdGhlCisjICAgICAgICAgICAgICAgICAgICBidWlsZCB0cmVlIGFuZCBkaXN0cmlidXRpb24uCisjCisjIFdoZW4gcHJlc2VudCwgdGhlIC5sb2NhbC12ZXJzaW9uIGZpbGUgaXMgcHJlZmVycmVkIGZpcnN0LCB0aGUKKyMgLmRpc3QtdmVyc2lvbiBzZWNvbmQsIGFuZCB0aGUgLmRlZmF1bHQtdmVyc2lvbiBsYXN0LgorIworCitWRVJTSU9OX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgOj0gJChpZiAkKHdpbGRjYXJkICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uKSwkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbiwkKGlmICQod2lsZGNhcmQgJChzcmNkaXIpLy5kaXN0LXZlcnNpb24pLCQoc3JjZGlyKS8uZGlzdC12ZXJzaW9uLCQoc3JjZGlyKS8uZGVmYXVsdC12ZXJzaW9uKSkKKworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgID89ICQoc2hlbGwgJChDQVQpICQoVkVSU0lPTl9GSUxFKSAyPiAvZGV2L251bGwpCisKK1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKFBBQ0tBR0VfVkVSU0lPTikKKworIworIyBWZXJib3NpdHkKKyMKK19OTF9WX0NPUFkgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKF9OTF9WX0NPUFlfJChWKSkKK19OTF9WX0NPUFlfICAgICAgICAgICAgICAgICAgICAgICAgPSAkKF9OTF9WX0NPUFlfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitfTkxfVl9DT1BZXzAgICAgICAgICAgICAgICAgICAgICAgID0gQGZvciBmaWxlIGluICQoRElTVEZJTEVTKTsgZG8gZWNobyAiICBDT1BZICAgICAkJHtmaWxlfSI7IGRvbmU7CitfTkxfVl9DT1BZXzEgICAgICAgICAgICAgICAgICAgICAgID0gCisKK19OTF9WX01BS0UgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKF9OTF9WX01BS0VfJChWKSkKK19OTF9WX01BS0VfICAgICAgICAgICAgICAgICAgICAgICAgPSAkKF9OTF9WX01BS0VfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitfTkxfVl9NQUtFXzAgICAgICAgICAgICAgICAgICAgICAgID0gQGVjaG8gIiAgTUFLRSAgICAgZGlzdC1ob29rIjsKK19OTF9WX01BS0VfMSAgICAgICAgICAgICAgICAgICAgICAgPSAKKworIworIyBjaGVjay1maWxlIDxtYWNybyBzdWZmaXg+CisjCisjIENoZWNrIHdoZXRoZXIgYSBmaWxlLCByZWZlcmVuY2VkIGJ5IHRoZSAkKEApIHZhcmlhYmxlLCBzaG91bGQgYmUKKyMgdXBkYXRlZCAvIHJlZ2VuZXJhdGVkIGJhc2VkIG9uIGl0cyBkZXBlbmRlbmNpZXMsIHJlZmVyZW5jZWQgYnkgdGhlCisjICQoPCkgdmFyaWFibGUgYnkgcnVubmluZyB0aGUgbWFrZSBtYWNybyBjaGVjay1maWxlLTxtYWNybyBzdWZmaXg+LgorIworIyBUaGUgJCg8KSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGlmIHRoZSBtYWNybyB3YW50cyB0byBwcm9jZXNzCisjIGl0IGFuZCB0aGUgcHJvc3BlY3RpdmUgbmV3IG91dHB1dCBmaWxlLCB3aGljaCB0aGUgbWFjcm8gTVVTVAorIyBnZW5lcmF0ZSwgYXMgdGhlIHNlY29uZC4KKyMKKyMgVGhpcyBtYWNybyB3aWxsIGVuc3VyZSB0aGF0IGFueSByZXF1aXJlZCBwYXJlbnQgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQKKyMgcHJpb3IgdG8gaW52b2tpbmcgY2hlY2stZmlsZS08bWFjcm8gc3VmZml4Pi4KKyMKKyMgVGhpcyBtYWNybyBpcyBzaW1pbGFyIHRvIGFuZCBpbnNwaXJlZCBieSB0aGF0IGZyb20gTGludXggS2J1aWxkIGFuZAorIyBlbHNld2hlcmUuCisjCisjICAgPG1hY3JvIHN1ZmZpeD4gLSBUaGUgbmFtZSwgc3VmZml4ZWQgdG8gImNoZWNrLWZpbGUtIiwgd2hpY2ggaW5kaWNhdGVzCisjICAgICAgICAgICAgICAgICAgICB0aGUgbWFrZSBtYWNybyB0byBpbnZva2UuCisjCisjCitkZWZpbmUgY2hlY2stZmlsZQorJChOTF9WX0FUKXNldCAtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2VjaG8gJyAgQ0hFQ0sgICAgJChAKSc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiskKE1LRElSKSAtcCAkKGRpciAkKEApKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChjYWxsIGNoZWNrLWZpbGUtJCgxKSwkKDwpLCQoQCkuTik7ICAgICAgICAgICAgICAgIFwKK2lmIFsgLXIgIiQoQCkiIF0gJiYgJChDTVApIC1zICIkKEApIiAiJChAKS5OIjsgdGhlbiBcCisgICAgJChSTSkgLWYgIiQoQCkuTiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlY2hvICcgIEdFTiAgICAgICQoQCknOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChNVikgLWYgIiQoQCkuTiIgIiQoQCkiOyAgICAgICAgICAgICAgICAgICAgICAgXAorZmkKK2VuZGVmICMgY2hlY2stZmlsZQorCisjCisjIGNoZWNrLWZpbGUtLmxvY2FsLXZlcnNpb24KKyMKKyMgU3BlY3VsYXRpdmVseSByZWdlbmVyYXRlIC5sb2NhbC12ZXJzaW9uIGFuZCBjaGVjayB0byBzZWUgaWYgaXQgbmVlZHMKKyMgdG8gYmUgdXBkYXRlZC4KKyMKKyMgSWYgUEFDS0FHRV9WRVJTSU9OIGhhcyBiZWVuIHN1cHBsaWVkIGFueXdoZXJlIG90aGVyIHRoYW4gaW4gdGhpcyBmaWxlCisjICh3aGljaCBpcyBpbXBsaWNpdGx5IHRoZSBjb250ZW50cyBvZiAubG9jYWwtdmVyc2lvbiksIHRoZW4gdXNlIHRoYXQ7CisjIG90aGVyd2lzZSwgYXR0ZW1wdCB0byBnZW5lcmF0ZSBpdCBmcm9tIHRoZSBTQ00gc3lzdGVtLgorIworIyBUaGlzIGlzIGNhbGxlZCBmcm9tICQoY2FsbCBjaGVjay1maWxlLC5sb2NhbC12ZXJzaW9uKS4KKyMKK2RlZmluZSBjaGVjay1maWxlLS5sb2NhbC12ZXJzaW9uCitpZiBbICIkKG9yaWdpbiBQQUNLQUdFX1ZFUlNJT04pIiAhPSAiZmlsZSIgXTsgdGhlbiAgICAgXAorICAgIGVjaG8gIiQoUEFDS0FHRV9WRVJTSU9OKSIgPiAiJCgyKSI7ICAgICAgICAgICAgICAgIFwKK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChhYnNfdG9wX3NyY2Rpcikvc2NyaXB0cy9ta3ZlcnNpb24gICAgICAgICAgICAgICAgXAorICAgICAgICAtYiAiJChQQUNLQUdFX1ZFUlNJT04pIiAiJCh0b3Bfc3JjZGlyKSIgICAgICAgIFwKKyAgICAgICAgPiAiJCgyKSI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmaQorZW5kZWYKKworIworIyBjaGVjay1maWxlLS5kaXN0LXZlcnNpb24KKyMKKyMgU3BlY3VsYXRpdmVseSByZWdlbmVyYXRlIC5kaXN0LXZlcnNpb24gYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBuZWVkcworIyB0byBiZSB1cGRhdGVkLgorIworIyBUaGlzIGlzIGNhbGxlZCBmcm9tICQoY2FsbCBjaGVjay1maWxlLC5kaXN0LXZlcnNpb24pLgorIworZGVmaW5lIGNoZWNrLWZpbGUtLmRpc3QtdmVyc2lvbgorJChDQVQpICIkKDEpIiA+ICIkKDIpIgorZW5kZWYKKworIworIyBWZXJzaW9uIGZpbGUgcmVnZW5lcmF0aW9uIHJ1bGVzLgorIworLlBIT05ZOiBmb3JjZQorCiskKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbjogJChzcmNkaXIpLy5kZWZhdWx0LXZlcnNpb24gZm9yY2UKKworJChkaXN0ZGlyKS8uZGlzdC12ZXJzaW9uOiAkKGJ1aWxkZGlyKS8ubG9jYWwtdmVyc2lvbiBmb3JjZQorCiskKGRpc3RkaXIpLy5kaXN0LXZlcnNpb24gJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb246CisJJChjYWxsIGNoZWNrLWZpbGUsJChARikpCisKK2FsbDogLmxvY2FsLXZlcnNpb24KKworZGlzdC1ob29rOiAkKGRpc3RkaXIpLy5kaXN0LXZlcnNpb24KKworIworIyBTdGFnZSB0aGUgZGlzdHJpYnV0aW9uIGZpbGVzIHRvIGEgZGlzdHJpYnV0aW9uIGRpcmVjdG9yeQorIworc3RhZ2U6ICQoRElTVEZJTEVTKSAubG9jYWwtdmVyc2lvbgorCSQoY2FsbCBubC1yZW1vdmUtZGlyLCQoZGlzdGRpcikpCisJJChjYWxsIG5sLWNyZWF0ZS1kaXIsJChkaXN0ZGlyKSkKKwkkKF9OTF9WX01BS0UpJChNQUtFKSAtcyBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBkaXN0LWhvb2sKKwkkKF9OTF9WX0NPUFkpKGNkICQoYWJzX3RvcF9zcmNkaXIpOyAkKGRpc3RfdGFyX0FSQ0hJVkUpICQoRElTVEZJTEVTKSB8IChjZCAkKGFic19idWlsZGRpcikvJChkaXN0ZGlyKTsgJChUQVIpIHhmQnAgLSkpCisKKyMKKyMgUHJvZHVjZSBhbiBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGlzdHJpYnV0aW9uIHVzaW5nIGEgdGFyIGFyY2hpdmUKKyMgd2l0aCBnemlwIGNvbXByZXNzaW9uCisjCiskKGRpc3RfdGd6X1RBUkdFVFMpOiBzdGFnZQorCSQoTkxfVl9UR1opJChkaXN0X3Rnel9BUkNISVZFKSAkKGRpc3RkaXIpIHwgJChkaXN0X3Rnel9DT01QUkVTUykgPiAiJChAKSIKKworIworIyBQcm9kdWNlIGFuIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkaXN0cmlidXRpb24gdXNpbmcgYSB0YXIgYXJjaGl2ZQorIyB3aXRoIHh6IGNvbXByZXNzaW9uCisjCiskKGRpc3RfdHh6X1RBUkdFVFMpOiBzdGFnZQorCSQoTkxfVl9UWFopJChkaXN0X3R4el9BUkNISVZFKSAkKGRpc3RkaXIpIHwgJChkaXN0X3R4el9DT01QUkVTUykgPiAiJChAKSIKKworIworIyBQcm9kdWNlIGFuIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkaXN0cmlidXRpb24gb2YgdGhlCisjIG5sYnVpbGQtYXV0b3Rvb2xzIGNvcmUuCisjCitkaXN0OiAkKERJU1RfVEFSR0VUUykgLmxvY2FsLXZlcnNpb24KKwkkKGNhbGwgbmwtcmVtb3ZlLWRpciwkKGRpc3RkaXIpKQorCitkaXN0LXRnejogJChkaXN0X3Rnel9UQVJHRVRTKQorCitkaXN0LXR4ejogJChkaXN0X3R4el9UQVJHRVRTKQorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBiaW5hcmllcyBmb3IgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUKKyMgQ1VSUkVOVCBidWlsZCBtYWNoaW5lIGFuZCBpbnN0YWxsIHRoZW0gaW4gVEhJUyBubGJ1aWxkLWF1dG90b29scworIyBwYWNrYWdlLgorIworLlBIT05ZOiB0b29scwordG9vbHM6CisJJChOTF9WX01BS0UpJChNQUtFKSAtQyB0b29scyAkKEApCisKKyMKKyMgUHJvZHVjZSBwcmVidWlsdCBHTlUgYXV0b3Rvb2xzIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYW5kIC1pbmRlcGVuZGVudAorIyBiaW5hcmllcyBmb3IgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgQ1VSUkVOVCBidWlsZCBtYWNoaW5lIGFuZCBQQUNLQUdFCisjIHRoZW0gdXAgZm9yIEVYVEVSTkFMIGRpc3RyaWJ1dGlvbi4KKyMKK3Rvb2xzZGlzdDogLmxvY2FsLXZlcnNpb24KKwkkKE5MX1ZfTUFLRSkkKE1BS0UpIC1DIHRvb2xzICQoQCkKKworY2xlYW46IGNsZWFuLWxvY2FsCisJJChOTF9WX01BS0UpJChNQUtFKSAtQyB0b29scyAkKEApCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODMxZGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL1JFQURNRS5tZApAQCAtMCwwICsxLDE4MCBAQAorTmVzdCBMYWJzIEJ1aWxkIC0gR05VIEF1dG90b29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIEludHJvZHVjdGlvbgorCitUaGUgTmVzdCBMYWJzIEJ1aWxkIC0gR05VIEF1dG90b29scyAobmxidWlsZC1hdXRvdG9vbHMpIHByb3ZpZGVzIGEKK2N1c3RvbWl6ZWQsIHR1cm5rZXkgYnVpbGQgc3lzdGVtIGZyYW1ld29yaywgYmFzZWQgb24gR05VIGF1dG90b29scywgZm9yCitzdGFuZGFsb25lIE5lc3QgTGFicyAob3Igb3RoZXIpIHNvZnR3YXJlIHBhY2thZ2VzIHRoYXQgbmVlZCB0byBzdXBwb3J0Citub3Qgb25seSBidWlsZGluZyBvbiBhbmQgdGFyZ2V0aW5nIGFnYWluc3Qgc3RhbmRhbG9uZSBidWlsZCBob3N0CitzeXN0ZW1zIGJ1dCBhbHNvIGVtYmVkZGVkIHRhcmdldCBzeXN0ZW1zIHVzaW5nIEdDQy1iYXNlZCBvcgorLWNvbXBhdGlibGUgdG9vbGNoYWlucy4KKworIyBVc2VycyBhbmQgU3lzdGVtIEludGVncmF0b3JzCisKKyMjIEdldHRpbmcgU3RhcnRlZAorCitUaGlzIHByb2plY3QgaXMgdHlwaWNhbGx5IHN1YnRyZWVkIChvciBnaXQgc3VibW9kdWxlZCkgaW50byBhIHRhcmdldAorcHJvamVjdCByZXBvc2l0b3J5IGFuZCBzZXJ2ZXMgYXMgdGhlIHNlZWQgZm9yIHRoYXQgcHJvamVjdCdzIGJ1aWxkCitzeXN0ZW0uCisKK0Fzc3VtaW5nIHRoYXQgeW91IGFscmVhZHkgaGF2ZSBhIHByb2plY3QgcmVwb3NpdG9yeSBlc3RhYmxpc2hlZCBpbgorZ2l0LCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgaW4geW91ciBwcm9qZWN0IHJlcG9zaXRvcnk6CisKK2BgYAorMS4gJSBnaXQgcmVtb3RlIGFkZCBubGJ1aWxkLWF1dG90b29scyBzc2g6Ly88UEFUSF9UT19SRVBPU0lUT1JZPi9ubGJ1aWxkLWF1dG90b29scy5naXQKKzIuICUgZ2l0IGZldGNoIG5sYnVpbGQtYXV0b3Rvb2xzCitgYGAKKworWW91IGNhbiBwbGFjZSB0aGUgbmxidWlsZC1hdXRvdG9vbHMgcGFja2FnZSBhbnl3aGVyZSBpbiB5b3VyIHByb2plY3Q7Citob3dldmVyLCBieSBjb252ZW50aW9uLCAidGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwbyIgaXMgcmVjb21tZW5kZWQ6CisKK2BgYAorMy4gJSBta2RpciB0aGlyZF9wYXJ0eQorNC4gJSBnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9dGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwbyAtLXNxdWFzaCAtLW1lc3NhZ2U9IkFkZCBzdWJ0cmVlIG1pcnJvciBvZiByZXBvc2l0b3J5ICdzc2g6Ly88UEFUSF9UT19SRVBPU0lUT1JZPi9ubGJ1aWxkLWF1dG90b29scy5naXQnIGJyYW5jaCAnbWFzdGVyJyBhdCBjb21taXQgJ0hFQUQnLiIgbmxidWlsZC1hdXRvdG9vbHMgSEVBRAorYGBgCisKK0F0IHRoaXMgcG9pbnQsIHlvdSBub3cgaGF2ZSB0aGUgbmxidWlsZC1hdXRvdG9vbHMgcGFja2FnZSBpbnRlZ3JhdGVkCitpbnRvIHlvdXIgcHJvamVjdC4gVGhlIG5leHQgc3RlcCBpcyB1c2luZyB0aGUKK25sYnVpbGQtYXV0b3Rvb2xzLXByb3ZpZGVkIGV4YW1wbGVzIGFzIHRlbXBsYXRlcy4gVG8gZG8gdGhpcywgYQorY29udmVuaWVuY2Ugc2NyaXB0IGhhcyBiZWVuIHByb3ZpZGVkIHRoYXQgd2lsbCBnZXQgeW91IHN0YXJ0ZWQuIFlvdQorY2FuIHR1bmUgYW5kIGN1c3RvbWl6ZSB0aGUgcmVzdWx0cywgYXMgbmVlZGVkLCBmb3IgeW91ciBwcm9qZWN0LiBGcm9tCit0aGUgdG9wIGxldmVsIG9mIHlvdXIgcHJvamVjdCB0cmVlOgorCitgYGAKKzUuICUgdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL21rc2tlbGV0b24gLUkgdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwbyAtLXBhY2thZ2UtZGVzY3JpcHRpb24gIk15IEZhbnRhc3RpYyBQYWNrYWdlIiAtLXBhY2thZ2UtbmFtZSAibWZwIgorYGBgCisKKyMjIFN1cHBvcnRlZCBCdWlsZCBIb3N0IFN5c3RlbXMKKworRm9yIExpbnV4IHVzZXJzLCB5b3UgbGlrZWx5IGFscmVhZHkgaGF2ZSBHTlUgYXV0b3Rvb2xzIGluc3RhbGxlZCB0aHJvdWdoIHlvdXIgc3lzdGVtJ3MgZGlzdHJpYnV0aW9uIChlLmcuIFVidW50dSkuIEhvd2V2ZXIsIGlmIHlvdXIgR05VIGF1dG90b29scyBwYWNrYWdlcyBhcmUgaW5jb21wbGV0ZSBvciBkb3ducmV2aXNpb24gcmVsYXRpdmUgdG8gd2hhdCdzIHJlcXVpcmVkIGZyb20gbmxidWlsZC1hdXRvdG9vbHMsIG5sYnVpbGQtYXV0b3Rvb2xzIGNhbiBiZSBidWlsdCBhbmQgaW5zdGFsbGVkIG9yIGNhbiBiZSBkb3dubG9hZGVkIGFuZCBleHBhbmRlZCBpbiB5b3VyIGxvY2FsIG5sYnVpbGQtYXV0b3Rvb2xzIHRyZWUuCisKK1RoZSBubGJ1aWxkLWF1dG90b29scyBzeXN0ZW0gc3VwcG9ydHMgYW5kIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoZQorZm9sbG93aW5nIFBPU0lYLWJhc2VkIGJ1aWxkIGhvc3Qgc3lzdGVtczoKKworICAqIGk2ODYtcGMtY3lnd2luCisgICogaTY4Ni1wYy1saW51eC1nbnUKKyAgKiB4ODZfNjQtYXBwbGUtZGFyd2luCisgICogeDg2XzY0LXVua25vd24tbGludXgtZ251CisKKyMjIyBCdWlsZCBhbmQgSW5zdGFsbAorCitTaW1wbHkgaW52b2tlIGBtYWtlIHRvb2xzYCBhdCB0aGUgdG9wLWxldmVsIG9mIHlvdXIgbmxidWlsZC1hdXRvdG9vbHMgdHJlZS4KKworIyMjIERvd25sb2FkIGFuZCBFeHBhbmQKKworQWxvbmdzaWRlIG5sYnVpbGQtYXV0b3Rvb2xzIGRpc3RyaWJ1dGlvbnMgYXJlIHByZS1idWlsdAorYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGFuZCAtZGVwZW5kZW50IGRpc3RyaWJ1dGlvbnMgb2YgdGhlIGZvcm06CisKKyAgKiBubGJ1aWxkLWF1dG90b29scy1jb21tb24tX3ZlcnNpb25fLnRhci57Z3oseHp9CisgICogbmxidWlsZC1hdXRvdG9vbHMtX2hvc3RfLV92ZXJzaW9uXy50YXIue2d6LHh6fQorCitGaW5kIGFuZCBkb3dubG9hZCB0aGUgYXBwcm9wcmlhdGUgcGFpciBvZiBubGJ1aWxkLWF1dG90b29scy1jb21tb24gYW5kCitubGJ1aWxkLWF1dG90b29scy1faG9zdF8gZm9yIHlvdXIgc3lzdGVtIGFuZCB0aGVuIGV4cGFuZCB0aGVtIGZyb20gdGhlCit0b3AtbGV2ZWwgb2YgeW91ciBubGJ1aWxkLWF1dG90b29scyB0cmVlIHdpdGggYSBjb21tYW5kIHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmcgZXhhbXBsZToKKworYGBgCislIHRhciAtLWRpcmVjdG9yeSB0b29scy9ob3N0IC16eHZmIG5sYnVpbGQtYXV0b3Rvb2xzLWNvbW1vbi0xLjEudGFyLmd6CislIHRhciAtLWRpcmVjdG9yeSB0b29scy9ob3N0IC16eHZmIG5sYnVpbGQtYXV0b3Rvb2xzLXg4Nl82NC11bmtub3duLWxpbnV4LWdudS0xLjEudGFyLmd6CitgYGAKKworUGxlYXNlIHNlZSB0aGUgW0ZBUV0oI0ZBUSkgc2VjdGlvbiBmb3IgbW9yZSBiYWNrZ3JvdW5kIG9uIHdoeSB0aGlzIHBhY2thZ2UKK3Byb3ZpZGVzIG9wdGlvbnMgZm9yIHRoZXNlIHByZS1idWlsdCB0b29scy4KKworIyMgUGFja2FnZSBPcmdhbml6YXRpb24KKworVGhlIG5sYnVpbGQtYXV0b3Rvb2xzIHBhY2thZ2UgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKKworfCBEaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IGF1dG9jb25mLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdOVSBhdXRvY29uZiBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSBubGJ1aWxkLWF1dG90b29scy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBhdXRvY29uZi9tNC8gICAgICAgICAgICAgICAgICAgICAgICAgfCBHTlUgbTQgbWFjcm9zIGZvciBjb25maWd1cmUuYWMgcHJvdmlkZWQgYnkgbmxidWlsZC1hdXRvdG9vbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYXV0b21ha2UvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR05VIGF1dG9tYWtlIE1ha2VmaWxlLmFtIGhlYWRlciBhbmQgZm9vdGVyIGluZnJhc3RydWN0dXJlIHByb3ZpZGVkIGJ5IG5sYnVpbGQtYXV0b3Rvb2xzLiB8Cit8IGF1dG9tYWtlL3Bvc3QvICAgICAgICAgICAgICAgICAgICAgICB8IEdOVSBhdXRvbWFrZSBNYWtlZmlsZS5hbSBmb290ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBhdXRvbWFrZS9wb3N0LmFtICAgICAgICAgICAgICAgICAgICAgfCBHTlUgYXV0b21ha2UgTWFrZWZpbGUuYW0gZm9vdGVyIGluY2x1ZGVkIGJ5IGV2ZXJ5IG1ha2VmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYXV0b21ha2UvcHJlLyAgICAgICAgICAgICAgICAgICAgICAgIHwgR05VIGF1dG9tYWtlIE1ha2VmaWxlLmFtIGhlYWRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGF1dG9tYWtlL3ByZS5hbSAgICAgICAgICAgICAgICAgICAgICB8IEdOVSBhdXRvbWFrZSBNYWtlZmlsZS5hbSBoZWFkZXIgaW5jbHVkZWQgYnkgZXZlcnkgbWFrZWZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBleGFtcGxlcy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeGFtcGxlIHRlbXBsYXRlIGZpbGVzIGZvciBzdGFydGluZyB5b3VyIG93biBubGJ1aWxkLWF1dG90b29scy1iYXNlZCBwcm9qZWN0LiAgICAgICAgICAgIHwKK3wgc2NyaXB0cy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXV0b21hdGlvbiBzY3JpcHRzIGZvciByZWdlbmVyYXRpbmcgdGhlIGJ1aWxkIHN5c3RlbSBhbmQgZm9yIG1hbmFnaW5nIHBhY2thZ2UgdmVyc2lvbnMuICB8Cit8IHRvb2xzLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFF1YWxpZmllZCBwYWNrYWdlcyBvZiBhbmQgcHJlLWJ1aWx0IGluc3RhbmNlcyBvZiBHTlUgYXV0b3Rvb2xzLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0b29scy9ob3N0LyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQcmUtYnVpbHQgaW5zdGFuY2VzIG9mIEdOVSBhdXRvdG9vbHMgKGlmIGluc3RhbGxlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdG9vbHMvaG9zdC9pNjg2LXBjLWN5Z3dpbi8gICAgICAgICAgIHwgUHJlLWJ1aWx0IGluc3RhbmNlcyBvZiBHTlUgYXV0b3Rvb2xzIGZvciAzMi1iaXQgQ3lnd2luIChpZiBpbnN0YWxsZWQpLiAgICAgICAgICAgICAgICAgICB8Cit8IHRvb2xzL2hvc3QvaTY4Ni1wYy1saW51eC1nbnUvICAgICAgICB8IFByZS1idWlsdCBpbnN0YW5jZXMgb2YgR05VIGF1dG90b29scyBmb3IgMzItYml0IExpbnV4IChpZiBpbnN0YWxsZWQpLiAgICAgICAgICAgICAgICAgICAgfAorfCB0b29scy9ob3N0L3g4Nl82NC1hcHBsZS1kYXJ3aW4vICAgICAgfCBQcmUtYnVpbHQgaW5zdGFuY2VzIG9mIEdOVSBhdXRvdG9vbHMgZm9yIDY0LWJpdCBNYWMgT1MgWCAoaWYgaW5zdGFsbGVkKS4gICAgICAgICAgICAgICAgIHwKK3wgdG9vbHMvaG9zdC94ODZfNjQtdW5rbm93bi1saW51eC1nbnUvIHwgUHJlLWJ1aWx0IGluc3RhbmNlcyBvZiBHTlUgYXV0b3Rvb2xzIGZvciA2NC1iaXQgTGludXggKGlmIGluc3RhbGxlZCkuICAgICAgICAgICAgICAgICAgICB8Cit8IHRvb2xzL3BhY2thZ2VzLyAgICAgICAgICAgICAgICAgICAgICB8IFF1YWxpZmllZCBwYWNrYWdlcyBmb3IgR05VIGF1dG90b29scy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisjIEZBUSB7I0ZBUX0KKworUTogV2h5IGRvZXMgbmxidWlsZC1hdXRvdG9vbHMgaGF2ZSBhbiBvcHRpb24gZm9yIGl0cyBvd24gYnVpbHQgdmVyc2lvbnMKKyAgIG9mIEdOVSBhdXRvdG9vbHMgcmF0aGVyIHRoYW4gbGV2ZXJhZ2luZyB3aGF0ZXZlciB2ZXJzaW9ucyBleGlzdCBvbgorICAgdGhlIGJ1aWxkIGhvc3Qgc3lzdGVtPworCitBOiBTb21lIGJ1aWxkIGhvc3Qgc3lzdGVtcyBzdWNoIGFzIE1hYyBPUyBYIG1heSBub3QgaGF2ZSBHTlUgYXV0b3Rvb2xzCisgICBhdCBhbGwuIE90aGVyIGJ1aWxkIGhvc3Qgc3lzdGVtcywgc3VjaCBhcyBMaW51eCwgbWF5IGhhdmUgZGlmZmVyZW50CisgICBkaXN0cmlidXRpb25zIG9yIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aG9zZSBkaXN0cmlidXRpb25zIGluIHdoaWNoCisgICB0aGUgdmVyc2lvbnMgb2YgR05VIGF1dG90b29scyBhcmUgYXB0IHRvIGJlIGRpZmZlcmVudC4KKworICAgVGhpcyBkaWZmZXJlbmNlcyBsZWFkIHRvIGRpZmZlcmVudCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgYXV0b3Rvb2xzCisgICBvdXRwdXQgYW5kLCBhcyBhIGNvbnNlcXVlbmNlLCBhIGRpdmVyZ2VudCB1c2VyIGFuZCBzdXBwb3J0CisgICBleHBlcmllbmNlLiBUbyBhdm9pZCB0aGlzLCB0aGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBwcmUtYnVpbHQsCisgICBxdWFsaWZpZWQgc2V0IG9mIEdOVSBhdXRvdG9vbHMgYWxvbmcgd2l0aCBhIGNvbXByZWhlbnNpdmUsCisgICBzdGFuZGFsb25lIHNldCBvZiBzY3JpcHRzIHRvIGRyaXZlIHRoZW0gd2l0aG91dCByZWxpYW5jZSBvbiB0aG9zZQorICAgdmVyc2lvbnMgb2YgdGhlIHRvb2xzIG9uIHRoZSBidWlsZCBob3N0IHN5c3RlbS4KKworIyMgTWFpbnRhaW5lcnMKKworSWYgeW91IGFyZSBtYWludGFpbmluZyBubGJ1aWxkLWF1dG90b29scywgeW91IGhhdmUgc2V2ZXJhbCBrZXkgdGhpbmdzIHRvIGtub3c6CisKKzEuIEdlbmVyYXRpbmcgbmxidWlsZC1hdXRvdG9vbHMgZGlzdHJpYnV0aW9ucworMi4gR2VuZXJhdGluZyBvcHRpb25hbCBubGJ1aWxkLWF1dG90b29scyBwcmVidWlsdCBiaW5hcnkgZGlzdHJpYnV0aW9ucy4KKzMuIFVwZ3JhZGluZyBHTlUgYXV0b3Rvb2xzIHBhY2thZ2VzLgorCisjIyMgR2VuZXJhdGluZyBEaXN0cmlidXRpb25zCisKK1RvIGdlbmVyYXRlIGEgbmxidWlsZC1hdXRvdG9vbHMgZGlzdHJpYnV0aW9uLCBzaW1wbHkgaW52b2tlOgorCitgYGAKKyUgbWFrZSBkaXN0CitgYGAKKworVGhlIHBhY2thZ2UgdmVyc2lvbiB3aWxsIGNvbWUgZnJvbSB0YWdzIGluIHRoZSBzb3VyY2UgY29kZSBjb250cm9sCitzeXN0ZW0sIGlmIGF2YWlsYWJsZTsgb3RoZXJ3aXNlLCBmcm9tICcuZGVmYXVsdC12ZXJzaW9uJy4gVGhlIHZlcnNpb24KK2NhbiBiZSBvdmVycmlkZGVuIGZyb20gdGhlIFBBQ0tBR0VfVkVSU0lPTiBvciBWRVJTSU9OIGVudmlyb25tZW50Cit2YXJpYWJsZXMuCisKK1RoZSByZXN1bHRpbmcgYXJjaGl2ZSB3aWxsIGJlIGF0IHRoZSB0b3Agb2YgdGhlIHBhY2thZ2UgYnVpbGQKK2RpcmVjdG9yeS4KKworIyMjIEdlbmVyYXRpbmcgT3B0aW9uYWwgUHJlYnVpbHQgQmluYXJ5IERpc3RyaWJ1dGlvbnMKKworVG8gZ2VuZXJhdGUgYW4gb3B0aW9uYWwgbmxidWlsZC1hdXRvdG9vbHMgcHJlYnVpbHQgYmluYXJ5CitkaXN0cmlidXRpb24sIHNpbXBseSBpbnZva2U6CisKK2BgYAorJSBtYWtlIHRvb2xzZGlzdAorYGBgCisKK1RoZSBwYWNrYWdlIHZlcnNpb24gd2lsbCBjb21lIGZyb20gdGhlIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtLCBpZgorYXZhaWxhYmxlOyBvdGhlcndpc2UsIGZyb20gYC5kZWZhdWx0LXZlcnNpb25gLiBUaGUgdmVyc2lvbiBjYW4gYmUKK292ZXJyaWRkZW4gZnJvbSB0aGUgX1BBQ0tBR0VfVkVSU0lPTl8gb3IgX1ZFUlNJT05fIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworVGhlIHJlc3VsdGluZyBhcmNoaXZlcyB3aWxsIGJlIGF0IHRoZSB0b3Agb2YgdGhlIHBhY2thZ2UgYnVpbGQKK2RpcmVjdG9yeS4KKworIyMjIFVwZ3JhZGluZyBHTlUgQXV0b3Rvb2xzIFBhY2thZ2VzCisKK1RvIGNoYW5nZSBvciB1cGdyYWRlIEdOVSBhdXRvdG9vbHMgcGFja2FnZXMgdXNlZCBieSBubGJ1aWxkLWF1dG90b29scywKK2VkaXQgdGhlIG1ldGFkYXRhIGZvciBlYWNoIHBhY2thZ2UgaW4gdG9vbHMvcGFja2FnZXMvX3BhY2thZ2VfLworX3BhY2thZ2VfLnt1cmwsdmVyc2lvbn0uCisKKyMgVmVyc2lvbmluZworCitubGJ1aWxkLWF1dG9vbHMgZm9sbG93cyB0aGUgW1NlbWFudGljIFZlcnNpb25pbmcgZ3VpZGVsaW5lc10oaHR0cDovL3NlbXZlci5vcmcvKSAKK2ZvciByZWxlYXNlIGN5Y2xlIHRyYW5zcGFyZW5jeSBhbmQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKyMgTGljZW5zZQorCitubGJ1aWxkLWF1dG9vbHMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFtBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgbGljZW5zZV0oaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BcGFjaGUtMi4wKS4gCitTZWUgdGhlIGBMSUNFTlNFYCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvYXItbGliIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9hci1saWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmUyMzAxZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvYXItbGliCkBAIC0wLDAgKzEsMjcwIEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIE1pY3Jvc29mdCBsaWIuZXhlCisKK21lPWFyLWxpYgorc2NyaXB0dmVyc2lvbj0yMDEyLTAzLTAxLjA4OyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IFBldGVyIFJvc2luIDxwZWRhQGx5c2F0b3IubGl1LnNlPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKKworIyBmdW5jX2Vycm9yIG1lc3NhZ2UKK2Z1bmNfZXJyb3IgKCkKK3sKKyAgZWNobyAiJG1lOiAkMSIgMT4mMgorICBleGl0IDEKK30KKworZmlsZV9jb252PQorCisjIGZ1bmNfZmlsZV9jb252IGJ1aWxkX2ZpbGUKKyMgQ29udmVydCBhICRidWlsZCBmaWxlIHRvICRob3N0IGZvcm0gYW5kIHN0b3JlIGl0IGluICRmaWxlCisjIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFdpbmRvd3MgaG9zdHMuCitmdW5jX2ZpbGVfY29udiAoKQoreworICBmaWxlPSQxCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvIHwgL1shL10qKSAjIGFic29sdXRlIGZpbGUsIGFuZCBub3QgYSBVTkMgZmlsZQorICAgICAgaWYgdGVzdCAteiAiJGZpbGVfY29udiI7IHRoZW4KKwkjIGxhemlseSBkZXRlcm1pbmUgaG93IHRvIGNvbnZlcnQgYWJzIGZpbGVzCisJY2FzZSBgdW5hbWUgLXNgIGluCisJICBNSU5HVyopCisJICAgIGZpbGVfY29udj1taW5ndworCSAgICA7OworCSAgQ1lHV0lOKikKKwkgICAgZmlsZV9jb252PWN5Z3dpbgorCSAgICA7OworCSAgKikKKwkgICAgZmlsZV9jb252PXdpbmUKKwkgICAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgY2FzZSAkZmlsZV9jb252IGluCisJbWluZ3cpCisJICBmaWxlPWBjbWQgLy9DIGVjaG8gIiRmaWxlICIgfCBzZWQgLWUgJ3MvIlwoLipcKSAiICokL1wxLydgCisJICA7OworCWN5Z3dpbikKKwkgIGZpbGU9YGN5Z3BhdGggLW0gIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworCXdpbmUpCisJICBmaWxlPWB3aW5lcGF0aCAtdyAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19hdF9maWxlIGF0X2ZpbGUgb3BlcmF0aW9uIGFyY2hpdmUKKyMgSXRlcmF0ZSBvdmVyIGFsbCBtZW1iZXJzIGluIEFUX0ZJTEUgcGVyZm9ybWluZyBPUEVSQVRJT04gb24gQVJDSElWRQorIyBmb3IgZWFjaCBvZiB0aGVtLgorIyBXaGVuIGludGVycHJldGluZyB0aGUgY29udGVudCBvZiB0aGUgQEZJTEUsIGRvIE5PVCB1c2UgZnVuY19maWxlX2NvbnYsCisjIHNpbmNlIHRoZSB1c2VyIHdvdWxkIG5lZWQgdG8gc3VwcGx5IHByZWNvbnZlcnRlZCBmaWxlIG5hbWVzIHRvCisjIGJpbnV0aWxzIGFyLCBhdCBsZWFzdCBmb3IgTWluR1cuCitmdW5jX2F0X2ZpbGUgKCkKK3sKKyAgb3BlcmF0aW9uPSQyCisgIGFyY2hpdmU9JDMKKyAgYXRfZmlsZV9jb250ZW50cz1gY2F0ICIkMSJgCisgIGV2YWwgc2V0IHggIiRhdF9maWxlX2NvbnRlbnRzIgorICBzaGlmdAorCisgIGZvciBtZW1iZXIKKyAgZG8KKyAgICAkQVIgLU5PTE9HTyAkb3BlcmF0aW9uOiIkbWVtYmVyIiAiJGFyY2hpdmUiIHx8IGV4aXQgJD8KKyAgZG9uZQorfQorCitjYXNlICQxIGluCisgICcnKQorICAgICBmdW5jX2Vycm9yICJubyBjb21tYW5kLiAgVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PEVPRgorVXNhZ2U6ICRtZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIEFDVElPTiBBUkNISVZFIFtNRU1CRVIuLi5dCisKK01lbWJlcnMgbWF5IGJlIHNwZWNpZmllZCBpbiBhIGZpbGUgbmFtZWQgd2l0aCBARklMRS4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiJG1lLCB2ZXJzaW9uICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitpZiB0ZXN0ICQjIC1sdCAzOyB0aGVuCisgIGZ1bmNfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSBwcm9ncmFtLCBhbiBhY3Rpb24gYW5kIGFuIGFyY2hpdmUiCitmaQorCitBUj0kMQorc2hpZnQKK3doaWxlIDoKK2RvCisgIGlmIHRlc3QgJCMgLWx0IDI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgcHJvZ3JhbSwgYW4gYWN0aW9uIGFuZCBhbiBhcmNoaXZlIgorICBmaQorICBjYXNlICQxIGluCisgICAgLWxpYiB8IC1MSUIgXAorICAgIHwgLWx0Y2cgfCAtTFRDRyBcCisgICAgfCAtbWFjaGluZSogfCAtTUFDSElORSogXAorICAgIHwgLXN1YnN5c3RlbSogfCAtU1VCU1lTVEVNKiBcCisgICAgfCAtdmVyYm9zZSB8IC1WRVJCT1NFIFwKKyAgICB8IC13eCogfCAtV1gqICkKKyAgICAgIEFSPSIkQVIgJDEiCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgYWN0aW9uPSQxCisgICAgICBzaGlmdAorICAgICAgYnJlYWsKKyAgICAgIDs7CisgIGVzYWMKK2RvbmUKK29yaWdfYXJjaGl2ZT0kMQorc2hpZnQKK2Z1bmNfZmlsZV9jb252ICIkb3JpZ19hcmNoaXZlIgorYXJjaGl2ZT0kZmlsZQorCisjIHN0cmlwIGxlYWRpbmcgZGFzaCBpbiAkYWN0aW9uCithY3Rpb249JHthY3Rpb24jLX0KKworZGVsZXRlPQorZXh0cmFjdD0KK2xpc3Q9CitxdWljaz0KK3JlcGxhY2U9CitpbmRleD0KK2NyZWF0ZT0KKword2hpbGUgdGVzdCAtbiAiJGFjdGlvbiIKK2RvCisgIGNhc2UgJGFjdGlvbiBpbgorICAgIGQqKSBkZWxldGU9eWVzICA7OworICAgIHgqKSBleHRyYWN0PXllcyA7OworICAgIHQqKSBsaXN0PXllcyAgICA7OworICAgIHEqKSBxdWljaz15ZXMgICA7OworICAgIHIqKSByZXBsYWNlPXllcyA7OworICAgIHMqKSBpbmRleD15ZXMgICA7OworICAgIFMqKSAgICAgICAgICAgICA7OyAjIHRoZSBpbmRleCBpcyBhbHdheXMgdXBkYXRlZCBpbXBsaWNpdGx5CisgICAgYyopIGNyZWF0ZT15ZXMgIDs7CisgICAgdSopICAgICAgICAgICAgIDs7ICMgVE9ETzogZG9uJ3QgaWdub3JlIHRoZSB1cGRhdGUgbW9kaWZpZXIKKyAgICB2KikgICAgICAgICAgICAgOzsgIyBUT0RPOiBkb24ndCBpZ25vcmUgdGhlIHZlcmJvc2UgbW9kaWZpZXIKKyAgICAqKQorICAgICAgZnVuY19lcnJvciAidW5rbm93biBhY3Rpb24gc3BlY2lmaWVkIgorICAgICAgOzsKKyAgZXNhYworICBhY3Rpb249JHthY3Rpb24jP30KK2RvbmUKKworY2FzZSAkZGVsZXRlJGV4dHJhY3QkbGlzdCRxdWljayRyZXBsYWNlLCRpbmRleCBpbgorICB5ZXMsKiB8ICx5ZXMpCisgICAgOzsKKyAgeWVzeWVzKikKKyAgICBmdW5jX2Vycm9yICJtb3JlIHRoYW4gb25lIGFjdGlvbiBzcGVjaWZpZWQiCisgICAgOzsKKyAgKikKKyAgICBmdW5jX2Vycm9yICJubyBhY3Rpb24gc3BlY2lmaWVkIgorICAgIDs7Citlc2FjCisKK2lmIHRlc3QgLW4gIiRkZWxldGUiOyB0aGVuCisgIGlmIHRlc3QgISAtZiAiJG9yaWdfYXJjaGl2ZSI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJhcmNoaXZlIG5vdCBmb3VuZCIKKyAgZmkKKyAgZm9yIG1lbWJlcgorICBkbworICAgIGNhc2UgJDEgaW4KKyAgICAgIEAqKQorICAgICAgICBmdW5jX2F0X2ZpbGUgIiR7MSNAfSIgLVJFTU9WRSAiJGFyY2hpdmUiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX2ZpbGVfY29udiAiJDEiCisgICAgICAgICRBUiAtTk9MT0dPIC1SRU1PVkU6IiRmaWxlIiAiJGFyY2hpdmUiIHx8IGV4aXQgJD8KKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworZWxpZiB0ZXN0IC1uICIkZXh0cmFjdCI7IHRoZW4KKyAgaWYgdGVzdCAhIC1mICIkb3JpZ19hcmNoaXZlIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgImFyY2hpdmUgbm90IGZvdW5kIgorICBmaQorICBpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCisgICAgZm9yIG1lbWJlcgorICAgIGRvCisgICAgICBjYXNlICQxIGluCisgICAgICAgIEAqKQorICAgICAgICAgIGZ1bmNfYXRfZmlsZSAiJHsxI0B9IiAtRVhUUkFDVCAiJGFyY2hpdmUiCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBmdW5jX2ZpbGVfY29udiAiJDEiCisgICAgICAgICAgJEFSIC1OT0xPR08gLUVYVFJBQ1Q6IiRmaWxlIiAiJGFyY2hpdmUiIHx8IGV4aXQgJD8KKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgZWxzZQorICAgICRBUiAtTk9MT0dPIC1MSVNUICIkYXJjaGl2ZSIgfCBzZWQgLWUgJ3MvXFwvXFxcXC9nJyB8IHdoaWxlIHJlYWQgbWVtYmVyCisgICAgZG8KKyAgICAgICRBUiAtTk9MT0dPIC1FWFRSQUNUOiIkbWVtYmVyIiAiJGFyY2hpdmUiIHx8IGV4aXQgJD8KKyAgICBkb25lCisgIGZpCisKK2VsaWYgdGVzdCAtbiAiJHF1aWNrJHJlcGxhY2UiOyB0aGVuCisgIGlmIHRlc3QgISAtZiAiJG9yaWdfYXJjaGl2ZSI7IHRoZW4KKyAgICBpZiB0ZXN0IC16ICIkY3JlYXRlIjsgdGhlbgorICAgICAgZWNobyAiJG1lOiBjcmVhdGluZyAkb3JpZ19hcmNoaXZlIgorICAgIGZpCisgICAgb3JpZ19hcmNoaXZlPQorICBlbHNlCisgICAgb3JpZ19hcmNoaXZlPSRhcmNoaXZlCisgIGZpCisKKyAgZm9yIG1lbWJlcgorICBkbworICAgIGNhc2UgJDEgaW4KKyAgICBAKikKKyAgICAgIGZ1bmNfZmlsZV9jb252ICIkezEjQH0iCisgICAgICBzZXQgeCAiJEAiICJAJGZpbGUiCisgICAgICA7OworICAgICopCisgICAgICBmdW5jX2ZpbGVfY29udiAiJDEiCisgICAgICBzZXQgeCAiJEAiICIkZmlsZSIKKyAgICAgIDs7CisgICAgZXNhYworICAgIHNoaWZ0CisgICAgc2hpZnQKKyAgZG9uZQorCisgIGlmIHRlc3QgLW4gIiRvcmlnX2FyY2hpdmUiOyB0aGVuCisgICAgJEFSIC1OT0xPR08gLU9VVDoiJGFyY2hpdmUiICIkb3JpZ19hcmNoaXZlIiAiJEAiIHx8IGV4aXQgJD8KKyAgZWxzZQorICAgICRBUiAtTk9MT0dPIC1PVVQ6IiRhcmNoaXZlIiAiJEAiIHx8IGV4aXQgJD8KKyAgZmkKKworZWxpZiB0ZXN0IC1uICIkbGlzdCI7IHRoZW4KKyAgaWYgdGVzdCAhIC1mICIkb3JpZ19hcmNoaXZlIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgImFyY2hpdmUgbm90IGZvdW5kIgorICBmaQorICAkQVIgLU5PTE9HTyAtTElTVCAiJGFyY2hpdmUiIHx8IGV4aXQgJD8KK2ZpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2NvbXBpbGUgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2NvbXBpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjFmNDc0OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvY29tcGlsZQpAQCAtMCwwICsxLDMxMCBAQAorIyEgL2Jpbi9zaAorIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgJy1jIC1vJy4KKworc2NyaXB0dmVyc2lvbj0yMDEyLTAxLTA0LjE3OyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSwgMjAxMCwgMjAxMiBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitubD0nCisnCisKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgdG9vbHMgZnJvbSBjb21wbGFpbmluZyBhYm91dCB3aGl0ZXNwYWNlIHVzYWdlLgorSUZTPSIgIiIJJG5sIgorCitmaWxlX2NvbnY9CisKKyMgZnVuY19maWxlX2NvbnYgYnVpbGRfZmlsZSBsYXp5CisjIENvbnZlcnQgYSAkYnVpbGQgZmlsZSB0byAkaG9zdCBmb3JtIGFuZCBzdG9yZSBpdCBpbiAkZmlsZQorIyBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBXaW5kb3dzIGhvc3RzLiBJZiB0aGUgZGV0ZXJtaW5lZCBjb252ZXJzaW9uCisjIHR5cGUgaXMgbGlzdGVkIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHdpbGwKKyMgdGFrZSBwbGFjZS4KK2Z1bmNfZmlsZV9jb252ICgpCit7CisgIGZpbGU9JDEKKyAgY2FzZSAkZmlsZSBpbgorICAgIC8gfCAvWyEvXSopICMgYWJzb2x1dGUgZmlsZSwgYW5kIG5vdCBhIFVOQyBmaWxlCisgICAgICBpZiB0ZXN0IC16ICIkZmlsZV9jb252IjsgdGhlbgorCSMgbGF6aWx5IGRldGVybWluZSBob3cgdG8gY29udmVydCBhYnMgZmlsZXMKKwljYXNlIGB1bmFtZSAtc2AgaW4KKwkgIE1JTkdXKikKKwkgICAgZmlsZV9jb252PW1pbmd3CisJICAgIDs7CisJICBDWUdXSU4qKQorCSAgICBmaWxlX2NvbnY9Y3lnd2luCisJICAgIDs7CisJICAqKQorCSAgICBmaWxlX2NvbnY9d2luZQorCSAgICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBjYXNlICRmaWxlX2NvbnYvLCQyLCBpbgorCSosJGZpbGVfY29udiwqKQorCSAgOzsKKwltaW5ndy8qKQorCSAgZmlsZT1gY21kIC8vQyBlY2hvICIkZmlsZSAiIHwgc2VkIC1lICdzLyJcKC4qXCkgIiAqJC9cMS8nYAorCSAgOzsKKwljeWd3aW4vKikKKwkgIGZpbGU9YGN5Z3BhdGggLW0gIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworCXdpbmUvKikKKwkgIGZpbGU9YHdpbmVwYXRoIC13ICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2NsX3dyYXBwZXIgY2wgYXJnLi4uCisjIEFkanVzdCBjb21waWxlIGNvbW1hbmQgdG8gc3VpdCBjbAorZnVuY19jbF93cmFwcGVyICgpCit7CisgICMgQXNzdW1lIGEgY2FwYWJsZSBzaGVsbAorICBsaWJfcGF0aD0KKyAgc2hhcmVkPToKKyAgbGlua2VyX29wdHM9CisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgICAgZWF0PQorICAgIGVsc2UKKyAgICAgIGNhc2UgJDEgaW4KKwktbykKKwkgICMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSAgZWF0PTEKKwkgIGNhc2UgJDIgaW4KKwkgICAgKi5vIHwgKi5bb09dW2JCXVtqSl0pCisJICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgorCSAgICAgIHNldCB4ICIkQCIgLUZvIiRmaWxlIgorCSAgICAgIHNoaWZ0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCisJICAgICAgc2V0IHggIiRAIiAtRmUiJGZpbGUiCisJICAgICAgc2hpZnQKKwkgICAgICA7OworCSAgZXNhYworCSAgOzsKKwktSSopCisJICBmdW5jX2ZpbGVfY29udiAiJHsxIy1JfSIgbWluZ3cKKwkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwktbCopCisJICBsaWI9JHsxIy1sfQorCSAgZm91bmQ9bm8KKwkgIHNhdmVfSUZTPSRJRlMKKwkgIElGUz0nOycKKwkgIGZvciBkaXIgaW4gJGxpYl9wYXRoICRMSUIKKwkgIGRvCisJICAgIElGUz0kc2F2ZV9JRlMKKwkgICAgaWYgJHNoYXJlZCAmJiB0ZXN0IC1mICIkZGlyLyRsaWIuZGxsLmxpYiI7IHRoZW4KKwkgICAgICBmb3VuZD15ZXMKKwkgICAgICBzZXQgeCAiJEAiICIkZGlyLyRsaWIuZGxsLmxpYiIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWIubGliIjsgdGhlbgorCSAgICAgIGZvdW5kPXllcworCSAgICAgIHNldCB4ICIkQCIgIiRkaXIvJGxpYi5saWIiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIElGUz0kc2F2ZV9JRlMKKworCSAgdGVzdCAiJGZvdW5kIiAhPSB5ZXMgJiYgc2V0IHggIiRAIiAiJGxpYi5saWIiCisJICBzaGlmdAorCSAgOzsKKwktTCopCisJICBmdW5jX2ZpbGVfY29udiAiJHsxIy1MfSIKKwkgIGlmIHRlc3QgLXogIiRsaWJfcGF0aCI7IHRoZW4KKwkgICAgbGliX3BhdGg9JGZpbGUKKwkgIGVsc2UKKwkgICAgbGliX3BhdGg9IiRsaWJfcGF0aDskZmlsZSIKKwkgIGZpCisJICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzIC1MSUJQQVRIOiRmaWxlIgorCSAgOzsKKwktc3RhdGljKQorCSAgc2hhcmVkPWZhbHNlCisJICA7OworCS1XbCwqKQorCSAgYXJnPSR7MSMtV2wsfQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgZmxhZyBpbiAkYXJnOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkZmxhZyIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgOzsKKwktWGxpbmtlcikKKwkgIGVhdD0xCisJICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzICQyIgorCSAgOzsKKwktKikKKwkgIHNldCB4ICIkQCIgIiQxIgorCSAgc2hpZnQKKwkgIDs7CisJKi5jYyB8ICouQ0MgfCAqLmN4eCB8ICouQ1hYIHwgKi5bY0NdKyspCisJICBmdW5jX2ZpbGVfY29udiAiJDEiCisJICBzZXQgeCAiJEAiIC1UcCIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCSouYyB8ICouY3BwIHwgKi5DUFAgfCAqLmxpYiB8ICouTElCIHwgKi5MaWIgfCAqLk9CSiB8ICoub2JqIHwgKi5bb09dKQorCSAgZnVuY19maWxlX2NvbnYgIiQxIiBtaW5ndworCSAgc2V0IHggIiRAIiAiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwkqKQorCSAgc2V0IHggIiRAIiAiJDEiCisJICBzaGlmdAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHNoaWZ0CisgIGRvbmUKKyAgaWYgdGVzdCAtbiAiJGxpbmtlcl9vcHRzIjsgdGhlbgorICAgIGxpbmtlcl9vcHRzPSItbGluayRsaW5rZXJfb3B0cyIKKyAgZmkKKyAgZXhlYyAiJEAiICRsaW5rZXJfb3B0cworICBleGl0IDEKK30KKworZWF0PQorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCitSZW1vdmUgJy1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK2FyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorCitJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSAnSU5TVEFMTCcuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7CisgIGNsIHwgKlsvXFxdY2wgfCBjbC5leGUgfCAqWy9cXF1jbC5leGUgKQorICAgIGZ1bmNfY2xfd3JhcHBlciAiJEAiICAgICAgIyBEb2Vzbid0IHJldHVybi4uLgorICAgIDs7Citlc2FjCisKK29maWxlPQorY2ZpbGU9CisKK2ZvciBhcmcKK2RvCisgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgZWF0PQorICBlbHNlCisgICAgY2FzZSAkMSBpbgorICAgICAgLW8pCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCAnLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJZWF0PTEKKwljYXNlICQyIGluCisJICAqLm8gfCAqLm9iaikKKwkgICAgb2ZpbGU9JDIKKwkgICAgOzsKKwkgICopCisJICAgIHNldCB4ICIkQCIgLW8gIiQyIgorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKi5jKQorCWNmaWxlPSQxCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgICAgKikKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBmaQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KKyAgIyBJZiBubyAnLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KKyAgIyAnLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjIG9rLgorICBleGVjICIkQCIKK2ZpCisKKyMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCitjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgJ3N8Xi4qW1xcL118fDsgc3xeW2EtekEtWl06fHw7IHMvXC5jJC8uby8nYAorCisjIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCisjIE5vdGU6IHVzZSAnWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKKyMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgorbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy9cXDouLV18X3xnJ2AuZAord2hpbGUgdHJ1ZTsgZG8KKyAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBicmVhaworICBmaQorICBzbGVlcCAxCitkb25lCisjIEZJWE1FOiByYWNlIGNvbmRpdGlvbiBoZXJlIGlmIHVzZXIga2lsbHMgYmV0d2VlbiBta2RpciBhbmQgdHJhcC4KK3RyYXAgInJtZGlyICckbG9ja2Rpcic7IGV4aXQgMSIgMSAyIDE1CisKKyMgUnVuIHRoZSBjb21waWxlLgorIiRAIgorcmV0PSQ/CisKK2lmIHRlc3QgLWYgIiRjb2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRjb2ZpbGUiID0gIiRvZmlsZSIgfHwgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCitlbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgorICB0ZXN0ICIke2NvZmlsZX1iaiIgPSAiJG9maWxlIiB8fCBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCitmaQorCitybWRpciAiJGxvY2tkaXIiCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvY29uZmlnLmd1ZXNzIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYyMmE0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTUzMCBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLAorIyAgIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxMi0wMi0xMCcKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIiA+JjIKKyAgICAgICBleGl0IDEgOzsKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2lmIHRlc3QgJCMgIT0gMDsgdGhlbgorICBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgZXhpdCAxCitmaQorCit0cmFwICdleGl0IDEnIDEgMiAxNQorCisjIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCisjIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCisjIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKKyMgaGVhZGFjaGUgdG8gZGVhbCB3aXRoIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KKworIyBIaXN0b3JpY2FsbHksIGBDQ19GT1JfQlVJTEQnIHVzZWQgdG8gYmUgbmFtZWQgYEhPU1RfQ0MnLiBXZSBzdGlsbAorIyB1c2UgYEhPU1RfQ0MnIGlmIGRlZmluZWQsIGJ1dCBpdCBpcyBkZXByZWNhdGVkLgorCisjIFBvcnRhYmxlIHRtcCBkaXJlY3RvcnkgY3JlYXRpb24gaW5zcGlyZWQgYnkgdGhlIEF1dG9jb25mIHRlYW0uCisKK3NldF9jY19mb3JfYnVpbGQ9JwordHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Cit0cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOworOiAke1RNUERJUj0vdG1wfSA7CisgeyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAorIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgOyB9IHx8CisgeyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8CisgeyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0gOworZHVtbXk9JHRtcC9kdW1teSA7Cit0bXBmaWxlcz0iJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXkiIDsKK2Nhc2UgJENDX0ZPUl9CVUlMRCwkSE9TVF9DQywkQ0MgaW4KKyAsLCkgICAgZWNobyAiaW50IHg7IiA+ICRkdW1teS5jIDsKKwlmb3IgYyBpbiBjYyBnY2MgYzg5IGM5OSA7IGRvCisJICBpZiAoJGMgLWMgLW8gJGR1bW15Lm8gJGR1bW15LmMpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgICAgIENDX0ZPUl9CVUlMRD0iJGMiOyBicmVhayA7CisJICBmaSA7CisJZG9uZSA7CisJaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KKwkgIENDX0ZPUl9CVUlMRD1ub19jb21waWxlcl9mb3VuZCA7CisJZmkKKwk7OworICwsKikgICBDQ19GT1JfQlVJTEQ9JENDIDs7CisgLCosKikgIENDX0ZPUl9CVUlMRD0kSE9TVF9DQyA7OworZXNhYyA7IHNldF9jY19mb3JfYnVpbGQ9IDsnCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCisjIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKK2lmICh0ZXN0IC1mIC8uYXR0YmluL3VuYW1lKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJUEFUSD0kUEFUSDovLmF0dGJpbiA7IGV4cG9ydCBQQVRICitmaQorCitVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK1VOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgorVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KK1VOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TWlyQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFscGhhOk9TRjE6KjoqKQorCWNhc2UgJFVOQU1FX1JFTEVBU0UgaW4KKwkqNC4wKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAorCQk7OworCSo1LiopCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjQuNSAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7CisJICAgICJFVjUuNiAoMjExNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKKwkgICAgIkVWNS42ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OworCSAgICAiRVY2ICgyMTI2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44QUwgKDIxMjY0QikiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7CisJICAgICJFVjcgKDIxMzY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwkjIFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUgZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVybyBleGl0IGNvZGUuCisJZXhpdGNvZGU9JD8KKwl0cmFwICcnIDAKKwlleGl0ICRleGl0Y29kZSA7OworICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgU2hvdWxkIHdlIGNoYW5nZSBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZAorCSMgb2YgdGhlIHNwZWNpZmljIEFscGhhIG1vZGVsPworCWVjaG8gYWxwaGEtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICAyMTA2NDpXaW5kb3dzX05UOjUwOjMpCisJZWNobyBhbHBoYS1kZWMtd2lubnQzLjUKKwlleGl0IDs7CisgICAgQW1pZ2EqOlVOSVhfU3lzdGVtX1Y6NC4wOiopCisJZWNobyBtNjhrLXVua25vd24tc3lzdjQKKwlleGl0IDs7CisgICAgKjpbQWFdbWlnYVtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hbWlnYW9zCisJZXhpdCA7OworICAgICo6W01tXW9ycGhbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbW9ycGhvcworCWV4aXQgOzsKKyAgICAqOk9TLzM5MDoqOiopCisJZWNobyBpMzcwLWlibS1vcGVuZWRpdGlvbgorCWV4aXQgOzsKKyAgICAqOnovVk06KjoqKQorCWVjaG8gczM5MC1pYm0tenZtb2UKKwlleGl0IDs7CisgICAgKjpPUzQwMDoqOiopCisJZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKKyAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCisJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo2KjoqKQorCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCisJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKKwkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCisJICAgIFNlcmllcyp8UzQqKQorCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCisJZXhpdCA7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCisJY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJICAgIHN1bjMpCisJCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJICAgIHN1bjQpCisJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCWVzYWMKKwlleGl0IDs7CisgICAgYXVzaHA6U3VuT1M6KjoqKQorCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQorICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAorICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKKyAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCisgICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKKyAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAorICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICMgYmUgbm8gcHJvYmxlbS4KKyAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorCWVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisJZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG02OGs6bWFjaHRlbjoqOiopCisJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJJU0MqOk1hY2g6KjoqKQorCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwlleGl0IDs7CisgICAgUklTQyo6VUxUUklYOio6KikKKwllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgVkFYKjpVTFRSSVgqOio6KikKKwllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKKwllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgorCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjZW5kaWYKKwkgIGV4aXQgKC0xKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgorCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgorCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAorCWV4aXQgOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJZWNobyBtODhrLWhhcnJpcy1jeHV4NworCWV4aXQgOzsKKyAgICBtODhrOio6NCo6UjQqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAorCWV4aXQgOzsKKyAgICBtODhrOio6Myo6UjMqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisJIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwllY2hvIG04OGstZG9scGhpbi1zeXN2MworCWV4aXQgOzsKKyAgICBNODgqOio6UjMqOiopCisJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMworCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKKwllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCisJZXhpdCA7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKKwlleGl0IDs7CisgICAgKjpJUklYKjoqOiopCisJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAorCWV4aXQgOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCWVjaG8gaTM4Ni1pYm0tYWl4CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDU2N10pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisJCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKwkJICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisJCSAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorCQkJICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisJCQkgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorCQkJZXNhYyA7OworCQkgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKwkJICAgIHN3aXRjaCAoY3B1KQorCQkJeworCQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJCSAgICBzd2l0Y2ggKGJpdHMpCisJCQkJeworCQkJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKwkJCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCQkJfSBicmVhazsKKwkJI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKwkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJI2VuZGlmCisJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCX0KKwkJICAgIGV4aXQgKDApOworCQl9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIC1xIF9fTFA2NF9fCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWNhc2UgJHtVTkFNRV9QUk9DRVNTT1J9IGluCisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6TVNZUyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cworCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisJIyB1bmFtZSAtbSBpbmNsdWRlcyAiLXBjIiBvbiB0aGlzIHN5c3RlbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFhcmNoNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBhYXJjaDY0X2JlOkxpbnV4Oio6KikKKwlVTkFNRV9NQUNISU5FPWFhcmNoNjRfYmUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwllc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgaWYgZWNobyBfX0FSTV9QQ1NfVkZQIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKKwkgICAgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJICAgIGVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaWhmCisJICAgIGZpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBoZXhhZ29uOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJTElCQz1nbnUKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisJI3VuZGVmICR7VU5BTUVfTUFDSElORX1lbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9JHtVTkFNRV9NQUNISU5FfQorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgdGlsZSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHh0ZW5zYSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKwkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisJIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisJIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKwkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisJCQkjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisJZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJCWVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDhyLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgaTM4NikKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkJICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkJICB0aGVuCisJCSAgICAgIFVOQU1FX1BST0NFU1NPUj0ieDg2XzY0IgorCQkgIGZpCisJCWZpIDs7CisJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5FTy0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5lby10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKwllY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OworICAgIHg4Nl82NDpWTWtlcm5lbDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZXN4CisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorCSI0IgorI2Vsc2UKKwkiIgorI2VuZGlmCisJKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCisgIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgICAgc3RydWN0IHV0c25hbWUgdW47CisKKyAgICB1bmFtZSgmdW4pOworCisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgeworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworCisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyMgaWYgIWRlZmluZWQgKHVsdHJpeCkKKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgaWYgZGVmaW5lZCAoQlNEKQorIyAgIGlmIEJTRCA9PSA0MworICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyMgICBlbHNlCisjICAgIGlmIEJTRCA9PSAxOTkwMDYKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zcmVub1xuIik7IGV4aXQgKDApOworIyAgICBlbHNlCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgIGVuZGlmCisjIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQorICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworICBleGl0ICgxKTsKK30KK0VPRgorCiskQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCisKK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQorCisjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCisKK2lmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCit0aGVuCisgICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KKyAgICBjMSopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMyKikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIGMzNCopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMzgqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzQqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBlc2FjCitmaQorCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb25maWcuc3ViIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4OTRkYTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNzczIEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKKyMgICAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTItMDItMTAnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBHTlUgQ2hhbmdlTG9nIGVudHJ5LgorIworIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KKyMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgorIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KKyMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KKworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCisjIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcworIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKKyMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KKyMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBvcnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKKyMgaXQgZG9lcyBub3Qgc3VwcG9ydC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCisjIGEgZmFpbHVyZSB0byBzdXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKKyMgY29uZmlndXJhdGlvbi4KKworIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFyaW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KKyMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8gYSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXItcGFydCBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9uLgorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTCisgICAgICAgJDAgW09QVElPTl0gQUxJQVMKKworQ2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiBuYW1lLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQorCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICBhbmRyb2lkLWxpbnV4KQorICAgIG9zPS1saW51eC1hbmRyb2lkCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AtdW5rbm93bgorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1ibHVlZ2VuZSopCisJCW9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c3JkYikKKwkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisgICAgICAgIHwgYmUzMiB8IGJlNjQgXAorCXwgYmZpbiBcCisJfCBjNHggfCBjbGlwcGVyIFwKKwl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCisJfCBlcGlwaGFueSBcCisJfCBmaWRvIHwgZnIzMCB8IGZydiBcCisJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCXwgaGV4YWdvbiBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbGUzMiB8IGxlNjQgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJfCBuaW9zIHwgbmlvczIgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcGVuOCBcCisJfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAorCXwgcHlyYW1pZCBcCisJfCBybDc4IHwgcnggXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSBcCisJfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAorCXwgdjg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGUyIHwgdjg1MGVzIHwgdjg1MGUydjMgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrIHwgejgwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwljNTR4KQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCTs7CisJYzU1eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQk7OworCWM2eCkKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCTs7CisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgbTY4aGNzMTJ4IHwgcGljb2NoaXApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwlzdHJvbmdhcm0gfCB0aHVtYiB8IHhzY2FsZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQk7OworCXhnYXRlKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwl4c2NhbGVlYikKKwkJYmFzaWNfbWFjaGluZT1hcm1lYi11bmtub3duCisJCTs7CisKKwl4c2NhbGVlbCkKKwkJYmFzaWNfbWFjaGluZT1hcm1lbC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmUzMi0qIHwgYmU2NC0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKKwl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBoZXhhZ29uLSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGxlMzItKiB8IGxlNjQtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogfCBtaWNyb2JsYXplLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcGVuOC0qIFwKKwl8IG9yaW9uLSogXAorCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcmw3OC0qIHwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdjEtKiB8IHN4Py0qIFwKKwl8IHRhaG9lLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdGlsZSotKiBcCisJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdjg1MGUxLSogfCB2ODUwZXMtKiB8IHY4NTBlMi0qIHwgdjg1MGUydjMtKiBcCisJfCB2YXgtKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorCXwgeW1wLSogXAorCXwgejhrLSogfCB6ODAtKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJMzg2YnNkKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tYnNkCisJCTs7CisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWF0dAorCQk7OworCTNiKikKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlhMjlraGlmKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzU0eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM1NXgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNngtKikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYgfCBjcjE2LSopCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworCWkqODZ2MzIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjMyCisJCTs7CisJaSo4NnY0KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2NAorCQk7OworCWkqODZ2KQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zb2xhcmlzMgorCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQorCQljYXNlICRvcyBpbgorCQkgICAgLWlyaXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0taXJpeDQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpc2k2OCB8IGlzaSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQorCQlvcz0tc3lzdgorCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCisJCTs7CisJbWFnbnVtIHwgbTMyMzApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCisJCW9zPS1zeXN2CisJCTs7CisJbWVybGluKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKKwkJb3M9LXN5c3YKKwkJOzsKKwltaWNyb2JsYXplKQorCQliYXNpY19tYWNoaW5lPW1pY3JvYmxhemUteGlsaW54CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKKwltaW5pZnJhbWUpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKKwkJOzsKKwkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CisJbWlwczMqLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCisJCTs7CisJbWlwczMqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCisJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW1zeXMpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXN5cworCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmFjbCkKKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJb3M9LW5hY2wKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qIHwgcHBjYmUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcm9tNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJcm1bNDZdMDApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCisJCTs7CisJcnRwYyB8IHJ0cGMtKikKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCXMzOTAgfCBzMzkwLSopCisJCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KKwkJOzsKKwlzMzkweCB8IHMzOTB4LSopCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCTs7CisJc2EyOTIwMCkKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJc2IxKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCisJCTs7CisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKKwlzZWkpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKKwkJb3M9LXNlaXV4CisJCTs7CisJc2VxdWVudCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJOzsKKwlzaCkKKwkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwlzaDVlbCkKKwkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCisJCTs7CisJc2g2NCkKKwkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KKwkJOzsKKwlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwlzcHM3KQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjIKKwkJOzsKKwlzcHVyKQorCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgorCQk7OworCXN0MjAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQorCQk7OworCXN0cmF0dXMpCisJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisJCW9zPS1zeXN2NAorCQk7OworCXN0cm9uZ2FybS0qIHwgdGh1bWItKikKKwkJYmFzaWNfbWFjaGluZT1hcm0tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWxlKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eeHNjYWxlL2FybS8nYAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJejgwLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16ODAtdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwljeWRyYSkKKwkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCisJCTs7CisJb3Jpb24pCisJCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCisJCTs7CisJb3Jpb24xMDUpCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKKwkqKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmljYWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotZGlnaXRhbCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvZGlnaXRhbC4qL2RlYy8nYAorCQk7OworCSotY29tbW9kb3JlKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9jb21tb2RvcmUuKi9jYm0vJ2AKKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgWyB4IiRvcyIgIT0geCIiIF0KK3RoZW4KK2Nhc2UgJG9zIGluCisJIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKKwkjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorCS1hdXJvcmF1eCkKKwkJb3M9LWF1cm9yYXV4CisJCTs7CisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCisJICAgICAgfCAtY3lnd2luKiB8IC1tc3lzKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtYW5kcm9pZCogXAorCSAgICAgIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqKQorCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkJOzsKKwktcW54KikKKwkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCQkgICAgeDg2LSogfCBpKjg2LSopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1udG8kb3MKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktbnRvLXFueCopCisJCTs7CisJLW50byopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAorCQk7OworCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKKwkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCisJICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKKwkJOzsKKwktbWFjKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAorCQk7OworCS1saW51eC1kaWV0bGliYykKKwkJb3M9LWxpbnV4LWRpZXRsaWJjCisJCTs7CisJLWxpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCS1zdW5vczUqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCisJCTs7CisJLXN1bm9zNiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKKwkJOzsKKwktb3BlbmVkKikKKwkJb3M9LW9wZW5lZGl0aW9uCisJCTs7CisJLW9zNDAwKikKKwkJb3M9LW9zNDAwCisJCTs7CisJLXdpbmNlKikKKwkJb3M9LXdpbmNlCisJCTs7CisJLW9zZnJvc2UqKQorCQlvcz0tb3Nmcm9zZQorCQk7OworCS1vc2YqKQorCQlvcz0tb3NmCisJCTs7CisJLXV0ZWsqKQorCQlvcz0tYnNkCisJCTs7CisJLWR5bml4KikKKwkJb3M9LWJzZAorCQk7OworCS1hY2lzKikKKwkJb3M9LWFvcworCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CisJLTM4NmJzZCkKKwkJb3M9LWJzZAorCQk7OworCS1jdGl4KiB8IC11dHMqKQorCQlvcz0tc3lzdgorCQk7OworCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQorCQk7OworCS1uczIgKQorCQlvcz0tbmV4dHN0ZXAyCisJCTs7CisJLW5zayopCisJCW9zPS1uc2sKKwkJOzsKKwkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCisJLXNpbml4NS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c2luaXh8c3lzdnwnYAorCQk7OworCS1zaW5peCopCisJCW9zPS1zeXN2NAorCQk7OworCS10cGYqKQorCQlvcz0tdHBmCisJCTs7CisJLXRyaXRvbiopCisJCW9zPS1zeXN2MworCQk7OworCS1vc3MqKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXN2cjMpCisJCW9zPS1zeXN2MworCQk7OworCS1zeXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KKwktc3lzdiopCisJCTs7CisJLW9zZSopCisJCW9zPS1vc2UKKwkJOzsKKwktZXMxODAwKikKKwkJb3M9LW9zZQorCQk7OworCS14ZW5peCkKKwkJb3M9LXhlbml4CisJCTs7CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworCXNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNngtKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisJcGRwMTAtKikKKwkJb3M9LXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPS1ub25lCisJCTs7CisJKi1kZWMgfCB2YXgtKikKKwkJb3M9LXVsdHJpeDQuMgorCQk7OworCW02OCotYXBvbGxvKQorCQlvcz0tZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPS1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikKKwkJb3M9LXN1bm9zMworCQk7OworCW02OCotY2lzY28pCisJCW9zPS1hb3V0CisJCTs7CisJbWVwLSopCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi1jaXNjbykKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLSopCisJCW9zPS1lbGYKKwkJOzsKKwlvcjMyLSopCisJCW9zPS1jb2ZmCisJCTs7CisJKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KKwkJb3M9LXN5c3YzCisJCTs7CisJc3BhcmMtKiB8ICotc3VuKQorCQlvcz0tc3Vub3M0LjEuMQorCQk7OworCSotYmUpCisJCW9zPS1iZW9zCisJCTs7CisJKi1oYWlrdSkKKwkJb3M9LWhhaWt1CisJCTs7CisJKi1pYm0pCisJCW9zPS1haXgKKwkJOzsKKwkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1ocCkKKwkJb3M9LWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPS1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz0tc3lzdgorCQk7OworCSotY2JtKQorCQlvcz0tYW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPS1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlvcz0tc3lzdjMKKwkJOzsKKwltNjhrLWNjdXIpCisJCW9zPS1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9LWx1bmEKKwkJOzsKKwkqLW5leHQgKQorCQlvcz0tbmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPS1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPS11bm9zCisJCTs7CisJKi1ucykKKwkJb3M9LWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz0tbXZzCisJCTs7CisJKi1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJKi1nb3VsZCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWhpZ2hsZXZlbCkKKwkJb3M9LWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz0tYnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPS1pcml4CisJCTs7CisJKi1zaWVtZW5zKQorCQlvcz0tc3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz0tcnR1CisJCTs7CisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz0tdXhwdgorCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKKwkqKQorCQlvcz0tbm9uZQorCQk7OworZXNhYworZmkKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCit2ZW5kb3I9dW5rbm93bgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotdW5rbm93bikKKwkJY2FzZSAkb3MgaW4KKwkJCS1yaXNjaXgqKQorCQkJCXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQktc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJLWNuayp8LWFpeCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktYmVvcyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCS1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLW1wZWl4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLWhpdXgqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQktZGd1eCopCisJCQkJdmVuZG9yPWRnCisJCQkJOzsKKwkJCS1sdW5hKikKKwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktcHR4KikKKwkJCQl2ZW5kb3I9c2VxdWVudAorCQkJCTs7CisJCQktdHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQktYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLWhtcyopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLW1wdyogfCAtbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQkJCXZlbmRvcj1hdGFyaQorCQkJCTs7CisJCQktdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJCWVzYWMKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKKwkJOzsKK2VzYWMKKworZWNobyAkYmFzaWNfbWFjaGluZSRvcworZXhpdAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2RlcGNvbXAgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGViZDViMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvZGVwY29tcApAQCAtMCwwICsxLDc5MSBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAxMy0wNS0zMC4wNzsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICBleGl0IDE7CisgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSAnUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSAnUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworIyBHZXQgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IGluIHRoZQorIyBnbG9iYWwgdmFyaWFibGVzICckZGlyJy4gIE5vdGUgdGhhdCB0aGlzIGRpcmVjdG9yeSBjb21wb25lbnQgd2lsbAorIyBiZSBlaXRoZXIgZW1wdHkgb3IgZW5kaW5nIHdpdGggYSAnLycgY2hhcmFjdGVyLiAgVGhpcyBpcyBkZWxpYmVyYXRlLgorc2V0X2Rpcl9mcm9tICgpCit7CisgIGNhc2UgJDEgaW4KKyAgICAqLyopIGRpcj1gZWNobyAiJDEiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYDs7CisgICAgICAqKSBkaXI9OzsKKyAgZXNhYworfQorCisjIEdldCB0aGUgc3VmZml4LXN0cmlwcGVkIGJhc2VuYW1lIG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlICckYmFzZScuCitzZXRfYmFzZV9mcm9tICgpCit7CisgIGJhc2U9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuW14uXSokLy8nYAorfQorCisjIElmIG5vIGRlcGVuZGVuY3kgZmlsZSB3YXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaW52b2NhdGlvbiwKKyMgd2Ugc3RpbGwgaGF2ZSB0byBjcmVhdGUgYSBkdW1teSBkZXBmaWxlLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUKKyMgTWFrZWZpbGUgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCittYWtlX2R1bW15X2RlcGZpbGUgKCkKK3sKKyAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKK30KKworIyBGYWN0b3Igb3V0IHNvbWUgY29tbW9uIHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZ2VuZXJhdGVkIGRlcGZpbGUuCisjIFJlcXVpcmVzIHRoZSBhdXhpbGlhcnkgZ2xvYmFsIHZhcmlhYmxlICckdG1wZGVwZmlsZScgdG8gYmUgc2V0LgorYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlICgpCit7CisgICMgSWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IG1hbmFnZWQgdG8gcHJvZHVjZSBhIGRlcGVuZGVuY3kgZmlsZSwKKyAgIyBwb3N0LXByb2Nlc3MgaXQuCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubzogZGVwZW5kZW5jeS5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgICAkb2JqZWN0OiBkZXBlbmRlbmN5LmgKKyAgICAjIGFuZCBvbmUgdG8gc2ltcGx5IG91dHB1dAorICAgICMgICBkZXBlbmRlbmN5Lmg6CisgICAgIyB3aGljaCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCisgICAgeyBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiCisgICAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6WyR0YWIgXSosLCIgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiCisgICAgfSA+ICIkZGVwZmlsZSIKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKKyAgZmkKK30KKworIyBBIHRhYnVsYXRpb24gY2hhcmFjdGVyLgordGFiPScJJworIyBBIG5ld2xpbmUgY2hhcmFjdGVyLgorbmw9JworJworIyBDaGFyYWN0ZXIgcmFuZ2VzIG1pZ2h0IGJlIHByb2JsZW1hdGljIG91dHNpZGUgdGhlIEMgbG9jYWxlLgorIyBUaGVzZSBkZWZpbml0aW9ucyBoZWxwLgordXBwZXI9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKK2xvd2VyPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitkaWdpdHM9MDEyMzQ1Njc4OQorYWxwaGE9JHt1cHBlcn0ke2xvd2VyfQorCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgorZ2NjZmxhZz0gZGFzaG1mbGFnPQorCisjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCisjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCisjIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgoraWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCisgIGdjY2ZsYWc9LU0KKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgIGRhc2htZmxhZz0teE0KKyAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJworICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3ZjNyBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3ZjNworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0geGxjOyB0aGVuCisgICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KKyAgZ2NjZmxhZz0tcW1ha2VkZXA9Z2NjLC1NRgorICBkZXBtb2RlPWdjYworZmkKKworY2FzZSAiJGRlcG1vZGUiIGluCitnY2MzKQorIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKKyMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCisjIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCisjIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgorIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5CisjIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQorIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OworICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKKyAgICBlc2FjCisgICAgc2hpZnQgIyBmbm9yZAorICAgIHNoaWZ0ICMgJGFyZworICBkb25lCisgICIkQCIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QganVzdCBjYXRlciB0byBvYnNvc2V0ZSBwcmUtMy54IEdDQyBjb21waWxlcnMuCisjIyBidXQgYWxzbyB0byBpbi11c2UgY29tcGlsZXJzIGxpa2UgSU1CIHhsYy94bEMgYW5kIHRoZSBIUCBDIGNvbXBpbGVyLgorIyMgKHNlZSB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCB0byAkZ2NjZmxhZyBhYm92ZSkuCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4gIEFsc28sIGl0IG1pZ2h0IG5vdCBiZQorIyMgICBzdXBwb3J0ZWQgYnkgdGhlIG90aGVyIGNvbXBpbGVycyB3aGljaCB1c2UgdGhlICdnY2MnIGRlcG1vZGUuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlCisgICMgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSAiZGVsZXRlZCBoZWFkZXIgZmlsZSIgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLiAgaHAgZGVwbW9kZSBhbHNvIGFkZHMgdGhhdCBzcGFjZSwgYnV0IGFsc28gcHJlZml4ZXMgdGhlIFZQQVRICisjIyB0byB0aGUgb2JqZWN0LiAgVGFrZSBjYXJlIHRvIG5vdCByZXBlYXQgaXQgaW4gdGhlIG91dHB1dC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgInN8Liokb2JqZWN0JHx8IiAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlICcjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCisgICAgICB8IHRyICIkbmwiICcgJyA+PiAiJGRlcGZpbGUiCisgICAgZWNobyA+PiAiJGRlcGZpbGUiCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgICAgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworeGxjKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgJyRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51CisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorICA7OworCit0Y2MpCisgICMgdGNjIChUaW55IEMgQ29tcGlsZXIpIHVuZGVyc3RhbmQgJy1NRCAtTUYgZmlsZScgc2luY2UgdmVyc2lvbiAwLjkuMjYKKyAgIyBGSVhNRTogVGhhdCB2ZXJzaW9uIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZy4KKyAgIyAgICAgICAgTWFrZSB0aGF0IHRoaXMgc3RhdGVtZW50IHJlbWFpbnMgdHJ1ZSBhbHNvIGZvciBzdGFibGUsIHJlbGVhc2VkCisgICMgICAgICAgIHZlcnNpb25zLgorICAjIEl0IHdpbGwgd3JhcCBsaW5lcyAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciBsb25nIG9yIHNob3J0KSB3aXRoIGEKKyAgIyB0cmFpbGluZyAnXCcsIGFzIGluOgorICAjCisgICMgICBmb28ubyA6IFwKKyAgIyAgICBmb28uYyBcCisgICMgICAgZm9vLmggXAorICAjCisgICMgSXQgd2lsbCBwdXQgYSB0cmFpbGluZyAnXCcgZXZlbiBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgd2lsbCB1c2UgbGVhZGluZworICAjIHNwYWNlcyByYXRoZXIgdGhhbiBsZWFkaW5nIHRhYnMgKGF0IGxlYXN0IHNpbmNlIGl0cyBjb21taXQgMDM5NGNhZjcKKyAgIyAiRW1pdCBzcGFjZXMgZm9yIC1NRCIpLgorICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBub24tZW1wdHkgbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm8gOiBcJyBvciAnIGRlcC5oIFwnLgorICAjIFdlIGhhdmUgdG8gY2hhbmdlIGxpbmVzIG9mIHRoZSBmaXJzdCBraW5kIHRvICckb2JqZWN0OiBcJy4KKyAgc2VkIC1lICJzfC4qOnwkb2JqZWN0IDp8IiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgQW5kIGZvciBlYWNoIGxpbmUgb2YgdGhlIHNlY29uZCBraW5kLCB3ZSBoYXZlIHRvIGVtaXQgYSAnZGVwLmg6JworICAjIGR1bW15IGRlcGVuZGVuY3ksIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICBzZWQgLW4gLWUgJ3N8XiAgKlwoLipcKSAqXFwkfFwxOnxwJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKKyMjIFRoZSBvcmRlciBvZiB0aGlzIG9wdGlvbiBpbiB0aGUgY2FzZSBzdGF0ZW1lbnQgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUKKyMjIHNoZWxsIGNvZGUgaW4gY29uZmlndXJlIHdpbGwgdHJ5IGVhY2ggb2YgdGhlc2UgZm9ybWF0cyBpbiB0aGUgb3JkZXIKKyMjIGxpc3RlZCBpbiB0aGlzIGZpbGUuICBBIHBsYWluICctTUQnIG9wdGlvbiB3b3VsZCBiZSB1bmRlcnN0b29kIGJ5IG1hbnkKKyMjIGNvbXBpbGVycywgc28gd2UgbXVzdCBlbnN1cmUgdGhpcyBjb21lcyBhZnRlciB0aGUgZ2NjIGFuZCBpY2Mgb3B0aW9ucy4KK3BnY2MpCisgICMgUG9ydGxhbmQncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzICctTUQnLgorICAjIFdpbGwgYWx3YXlzIG91dHB1dCBkZXBzIHRvICdmaWxlLmQnIHdoZXJlIGZpbGUgaXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUKKyAgIyBzb3VyY2UgZmlsZSB1bmRlciBjb21waWxhdGlvbiwgZXZlbiBpZiBmaWxlIHJlc2lkZXMgaW4gYSBzdWJkaXJlY3RvcnkuCisgICMgVGhlIG9iamVjdCBmaWxlIG5hbWUgZG9lcyBub3QgYWZmZWN0IHRoZSBuYW1lIG9mIHRoZSAnLmQnIGZpbGUuCisgICMgcGdjYyAxMC4yIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICAjIFVzZSB0aGUgc291cmNlLCBub3QgdGhlIG9iamVjdCwgdG8gZGV0ZXJtaW5lIHRoZSBiYXNlIG5hbWUsIHNpbmNlCisgICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KKyAgc2V0X2Jhc2VfZnJvbSAiJHNvdXJjZSIKKyAgdG1wZGVwZmlsZT0kYmFzZS5kCisKKyAgIyBGb3IgcHJvamVjdHMgdGhhdCBidWlsZCB0aGUgc2FtZSBzb3VyY2UgZmlsZSB0d2ljZSBpbnRvIGRpZmZlcmVudCBvYmplY3QKKyAgIyBmaWxlcywgdGhlIHBnY2MgYXBwcm9hY2ggb2YgdXNpbmcgdGhlICpzb3VyY2UqIGZpbGUgcm9vdCBuYW1lIGNhbiBjYXVzZQorICAjIHByb2JsZW1zIGluIHBhcmFsbGVsIGJ1aWxkcy4gIFVzZSBhIGxvY2tpbmcgc3RyYXRlZ3kgdG8gYXZvaWQgc3RvbXBpbmcgb24KKyAgIyB0aGUgc2FtZSAkdG1wZGVwZmlsZS4KKyAgbG9ja2Rpcj0kYmFzZS5kLWxvY2sKKyAgdHJhcCAiCisgICAgZWNobyAnJDA6IGNhdWdodCBzaWduYWwsIGNsZWFuaW5nIHVwLi4uJyA+JjIKKyAgICBybWRpciAnJGxvY2tkaXInCisgICAgZXhpdCAxCisgICIgMSAyIDEzIDE1CisgIG51bXRyaWVzPTEwMAorICBpPSRudW10cmllcworICB3aGlsZSB0ZXN0ICRpIC1ndCAwOyBkbworICAgICMgbWtkaXIgaXMgYSBwb3J0YWJsZSB0ZXN0LWFuZC1zZXQuCisgICAgaWYgbWtkaXIgIiRsb2NrZGlyIiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBUaGlzIHByb2Nlc3MgYWNxdWlyZWQgdGhlIGxvY2suCisgICAgICAiJEAiIC1NRAorICAgICAgc3RhdD0kPworICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrLgorICAgICAgcm1kaXIgIiRsb2NrZGlyIgorICAgICAgYnJlYWsKKyAgICBlbHNlCisgICAgICAjIElmIHRoZSBsb2NrIGlzIGJlaW5nIGhlbGQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcywgd2FpdAorICAgICAgIyB1bnRpbCB0aGUgd2lubmluZyBwcm9jZXNzIGlzIGRvbmUgb3Igd2UgdGltZW91dC4KKyAgICAgIHdoaWxlIHRlc3QgLWQgIiRsb2NrZGlyIiAmJiB0ZXN0ICRpIC1ndCAwOyBkbworICAgICAgICBzbGVlcCAxCisgICAgICAgIGk9YGV4cHIgJGkgLSAxYAorICAgICAgZG9uZQorICAgIGZpCisgICAgaT1gZXhwciAkaSAtIDFgCisgIGRvbmUKKyAgdHJhcCAtIDEgMiAxMyAxNQorICBpZiB0ZXN0ICRpIC1sZSAwOyB0aGVuCisgICAgZWNobyAiJDA6IGZhaWxlZCB0byBhY3F1aXJlIGxvY2sgYWZ0ZXIgJG51bXRyaWVzIGF0dGVtcHRzIiA+JjIKKyAgICBlY2hvICIkMDogY2hlY2sgbG9ja2RpciAnJGxvY2tkaXInIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCAnZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7CisgICAgICAgICAgICAgICBzL14gKi8vCisgICAgICAgICAgICAgICBzLyBcXCokLy8KKyAgICAgICAgICAgICAgIHMvJC86LworICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgIyBlZmZlY3QuICAnY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gJ2Zvby5vLmQnLgorICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICMgZGVwZW5kZW5jaWVzIGluICdmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCisKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIyBMaWJ0b29sIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlCisgICAgIyB0d28gY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgTGlrZXdpc2UuCisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAiJEAiIC1XYywtTUQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICIkQCIgLU1ECisgIGZpCisKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICAjIFNhbWUgcG9zdC1wcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEFJWCBtb2RlLgorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKworbXN2YzcpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHNob3dJbmNsdWRlcz0tV2MsLXNob3dJbmNsdWRlcworICBlbHNlCisgICAgc2hvd0luY2x1ZGVzPS1zaG93SW5jbHVkZXMKKyAgZmkKKyAgIiRAIiAkc2hvd0luY2x1ZGVzID4gIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGdyZXAgLXYgJ15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogJyAiJHRtcGRlcGZpbGUiCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICMgVGhlIGZpcnN0IHNlZCBwcm9ncmFtIGJlbG93IGV4dHJhY3RzIHRoZSBmaWxlIG5hbWVzIGFuZCBlc2NhcGVzCisgICMgYmFja3NsYXNoZXMgZm9yIGN5Z3BhdGguICBUaGUgc2Vjb25kIHNlZCBwcm9ncmFtIG91dHB1dHMgdGhlIGZpbGUKKyAgIyBuYW1lIHdoZW4gcmVhZGluZywgYnV0IGFsc28gYWNjdW11bGF0ZXMgYWxsIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICMgaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gb3V0cHV0IHRoZW0gYWdhaW4gYXQgdGhlIGVuZC4gIFRoaXMgb25seQorICAjIHdvcmtzIHdpdGggc2VkIGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgYnVmZmVycy4KKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAnCisvXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAgKlwoLipcKS8geworICBzLy9cMS8KKyAgcy9cXC9cXFxcL2cKKyAgcAorfScgfCAkY3lncGF0aF91IHwgc29ydCAtdSB8IHNlZCAtbiAnCitzLyAvXFwgL2cKK3MvXCguKlwpLyciJHRhYiInXDEgXFwvcAorcy8uXCguKlwpIFxcL1wxOi8KK0gKKyQgeworICBzLy4qLyciJHRhYiInLworICBHCisgIHAKK30nID4+ICIkZGVwZmlsZSIKKyAgZWNobyA+PiAiJGRlcGZpbGUiICMgbWFrZSBzdXJlIHRoZSBmcmFnbWVudCBkb2Vzbid0IGVuZCB3aXRoIGEgYmFja3NsYXNoCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Yzdtc3lzKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciAnOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzICdjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCAnYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAic3xeWyR0YWIgXSpbXjokdGFiIF1bXjpdW146XSo6WyR0YWIgXSp8JG9iamVjdDogfCIgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgc2VkIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitkYXNoWG1zdGRvdXQpCisgICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCisgIGV4aXQgMQorICA7OworCittYWtlZGVwZW5kKQorICAiJEAiIHx8IGV4aXQgJD8KKyAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubyBlYXQ9bm8KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgorICAgICAgZWF0PW5vCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC1hcmNoKQorICAgICAgZWF0PXllcyA7OworICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBtYWtlZGVwZW5kIG1heSBwcmVwZW5kIHRoZSBWUEFUSCBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuYW1lIHRvIHRoZSBvYmplY3QuCisgICMgTm8gbmVlZCB0byByZWdleC1lc2NhcGUgJG9iamVjdCwgZXhjZXNzIG1hdGNoaW5nIG9mICcuJyBpcyBoYXJtbGVzcy4KKyAgc2VkICJzfF4uKlwoJG9iamVjdCAqOlwpfFwxfCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoZSBsYXN0IGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgXAorICAgIHwgdHIgJyAnICIkbmwiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIFwKKyAgICB8IHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICB8IHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorICAgICAgICBzZXQgZm5vcmQgIiRAIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgICopCisgICAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6JyIkdGFiIidcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3ZjbXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9pbnN0YWxsLXNoIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5MjQ0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2luc3RhbGwtc2gKQEAgLTAsMCArMSw1MjcgQEAKKyMhL2Jpbi9zaAorIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKKworc2NyaXB0dmVyc2lvbj0yMDExLTAxLTE5LjIxOyAjIFVUQworCisjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCisjIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCisjCisjIENvcHlyaWdodCAoQykgMTk5NCBYIENvbnNvcnRpdW0KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyMgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisjIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQy0KKyMgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyMgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisjIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyMgdGl1bS4KKyMKKyMKKyMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guCisKK25sPScKKycKK0lGUz0iICIiCSRubCIKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9JHtET0lUUFJPRy19CitpZiB0ZXN0IC16ICIkZG9pdCI7IHRoZW4KKyAgZG9pdF9leGVjPWV4ZWMKK2Vsc2UKKyAgZG9pdF9leGVjPSRkb2l0CitmaQorCisjIFB1dCBpbiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOworIyBvciB1c2UgZW52aXJvbm1lbnQgdmFycy4KKworY2hncnBwcm9nPSR7Q0hHUlBQUk9HLWNoZ3JwfQorY2htb2Rwcm9nPSR7Q0hNT0RQUk9HLWNobW9kfQorY2hvd25wcm9nPSR7Q0hPV05QUk9HLWNob3dufQorY21wcHJvZz0ke0NNUFBST0ctY21wfQorY3Bwcm9nPSR7Q1BQUk9HLWNwfQorbWtkaXJwcm9nPSR7TUtESVJQUk9HLW1rZGlyfQorbXZwcm9nPSR7TVZQUk9HLW12fQorcm1wcm9nPSR7Uk1QUk9HLXJtfQorc3RyaXBwcm9nPSR7U1RSSVBQUk9HLXN0cmlwfQorCitwb3NpeF9nbG9iPSc/JworaW5pdGlhbGl6ZV9wb3NpeF9nbG9iPScKKyAgdGVzdCAiJHBvc2l4X2dsb2IiICE9ICI/IiB8fCB7CisgICAgaWYgKHNldCAtZikgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIHBvc2l4X2dsb2I9CisgICAgZWxzZQorICAgICAgcG9zaXhfZ2xvYj06CisgICAgZmkKKyAgfQorJworCitwb3NpeF9ta2Rpcj0KKworIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCittb2RlPTA3NTUKKworY2hncnBjbWQ9CitjaG1vZGNtZD0kY2htb2Rwcm9nCitjaG93bmNtZD0KK212Y21kPSRtdnByb2cKK3JtY21kPSIkcm1wcm9nIC1mIgorc3RyaXBjbWQ9CisKK3NyYz0KK2RzdD0KK2Rpcl9hcmc9Citkc3RfYXJnPQorCitjb3B5X29uX2NoYW5nZT1mYWxzZQorbm9fdGFyZ2V0X2RpcmVjdG9yeT0KKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0ICQ/OzsKKworICAgIC1tKSBtb2RlPSQyCisJY2FzZSAkbW9kZSBpbgorCSAgKicgJyogfCAqJwknKiB8IConCisnKgkgIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorCSAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisJICAgIGV4aXQgMTs7CisJZXNhYworCXNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CisKKyAgICAtdCkgZHN0X2FyZz0kMgorCSMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgYHRlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisJY2FzZSAkZHN0X2FyZyBpbgorCSAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKwllc2FjCisJc2hpZnQ7OworCisgICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7CisKKyAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisKKyAgICAtLSkJc2hpZnQKKwlicmVhazs7CisKKyAgICAtKikJZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisJZXhpdCAxOzsKKworICAgICopICBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciBgdGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworICAgIGVzYWMKKyAgZG9uZQorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgYGluc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIGRvX2V4aXQ9JyhleGl0ICRyZXQpOyBleGl0ICRyZXQnCisgIHRyYXAgInJldD0xMjk7ICRkb19leGl0IiAxCisgIHRyYXAgInJldD0xMzA7ICRkb19leGl0IiAyCisgIHRyYXAgInJldD0xNDE7ICRkb19leGl0IiAxMworICB0cmFwICJyZXQ9MTQzOyAkZG9fZXhpdCIgMTUKKworICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgorICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCisgIGNhc2UgJG1vZGUgaW4KKyAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAqNjQ0KSBjcF91bWFzaz0xMzM7OworICAgICo3NTUpIGNwX3VtYXNrPTIyOzsKKworICAgICpbMC03XSkKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSclIDIwMCcKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz1gZXhwciAnKCcgNzc3IC0gJG1vZGUgJSAxMDAwICcpJyAkdV9wbHVzX3J3YDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciBgdGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSogfCBbPVwoXCkhXSkgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZHN0PSRkc3RfYXJnCisKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJG5vX3RhcmdldF9kaXJlY3RvcnkiOyB0aGVuCisJZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCisJZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICAjIFByZWZlciBkaXJuYW1lLCBidXQgZmFsbCBiYWNrIG9uIGEgc3Vic3RpdHV0ZSBpZiBkaXJuYW1lIGZhaWxzLgorICAgICAgZHN0ZGlyPWAKKwkoZGlybmFtZSAiJGRzdCIpIDI+L2Rldi9udWxsIHx8CisJZXhwciBYIiRkc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXCkkJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorCWVjaG8gWCIkZHN0IiB8CisJICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKVteL10uKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKSQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wpLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgcy8uKi8uLzsgcScKKyAgICAgIGAKKworICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQorCisgIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKKworICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KKyAgICBjYXNlICRwb3NpeF9ta2RpciBpbgorICAgICAgJycpCisJIyBDcmVhdGUgaW50ZXJtZWRpYXRlIGRpcnMgdXNpbmcgbW9kZSA3NTUgYXMgbW9kaWZpZWQgYnkgdGhlIHVtYXNrLgorCSMgVGhpcyBpcyBsaWtlIEZyZWVCU0QgJ2luc3RhbGwnIGFzIG9mIDE5OTctMTAtMjguCisJdW1hc2s9YHVtYXNrYAorCWNhc2UgJHN0cmlwY21kLiR1bWFzayBpbgorCSAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisJICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OworCSAgLiowWzAyXVswMl0gfCAuWzAyXVswMl0gfCAuWzAyXSkgbWtkaXJfdW1hc2s9MjI7OworCisJICAqWzAtN10pCisJICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKKwkgICAgICAtICR1bWFzayAlIDEwMCAlIDQwICsgJHVtYXNrICUgMjAgXAorCSAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgorCSAgICBgOzsKKwkgICopIG1rZGlyX3VtYXNrPSR1bWFzayxnby13OzsKKwllc2FjCisKKwkjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgorCSMgT3RoZXJ3aXNlLCByZWx5IG9uICRta2Rpcl91bWFzay4KKwlpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKwkgIG1rZGlyX21vZGU9LW0kbW9kZQorCWVsc2UKKwkgIG1rZGlyX21vZGU9CisJZmkKKworCXBvc2l4X21rZGlyPWZhbHNlCisJY2FzZSAkdW1hc2sgaW4KKwkgICpbMTIzNTY3XVswLTddWzAtN10pCisJICAgICMgUE9TSVggbWtkaXIgLXAgc2V0cyB1K3d4IGJpdHMgcmVnYXJkbGVzcyBvZiB1bWFzaywgd2hpY2gKKwkgICAgIyBpcyBpbmNvbXBhdGlibGUgd2l0aCBGcmVlQlNEICdpbnN0YWxsJyB3aGVuICh1bWFzayAmIDMwMCkgIT0gMC4KKwkgICAgOzsKKwkgICopCisJICAgIHRtcGRpcj0ke1RNUERJUi0vdG1wfS9pbnMkUkFORE9NLSQkCisJICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKKworCSAgICBpZiAodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJCWV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisJICAgIHRoZW4KKwkgICAgICBpZiB0ZXN0IC16ICIkZGlyX2FyZyIgfHwgeworCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgorCQkgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorCQkgICAjIG90aGVyLXdyaXRlYWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KKwkJICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgorCQkgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisJCSAgICAgZD8/Pz8tPy0tKikgZGlmZmVyZW50X21vZGU9NzU1OzsKKwkJICAgICAqKSBmYWxzZTs7CisJCSAgIGVzYWMgJiYKKwkJICAgJG1rZGlycHJvZyAtbSRkaWZmZXJlbnRfbW9kZSAtcCAtLSAiJHRtcGRpciIgJiYgeworCQkgICAgIGxzX2xkX3RtcGRpcl8xPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKwkJICAgfQorCQkgfQorCSAgICAgIHRoZW4gcG9zaXhfbWtkaXI9OgorCSAgICAgIGZpCisJICAgICAgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKwkgICAgICBybWRpciAuLyRta2Rpcl9tb2RlIC4vLXAgLi8tLSAyPi9kZXYvbnVsbAorCSAgICBmaQorCSAgICB0cmFwICcnIDA7OworCWVzYWM7OworICAgIGVzYWMKKworICAgIGlmCisgICAgICAkcG9zaXhfbWtkaXIgJiYgKAorCXVtYXNrICRta2Rpcl91bWFzayAmJgorCSRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCisKKyAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCisgICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKKyAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCisKKyAgICAgIGNhc2UgJGRzdGRpciBpbgorCS8qKSBwcmVmaXg9Jy8nOzsKKwlbLT1cKFwpIV0qKSBwcmVmaXg9Jy4vJzs7CisJKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgICRwb3NpeF9nbG9iIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisJdGVzdCBYIiRkIiA9IFggJiYgY29udGludWUKKworCXByZWZpeD0kcHJlZml4JGQKKwlpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorCSAgcHJlZml4ZXM9CisJZWxzZQorCSAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisJICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKKwkgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIpICYmIGJyZWFrCisJICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCisJICBlbHNlCisJICAgIGNhc2UgJHByZWZpeCBpbgorCSAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKwkgICAgICAqKSBxcHJlZml4PSRwcmVmaXg7OworCSAgICBlc2FjCisJICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKKwkgIGZpCisJZmkKKwlwcmVmaXg9JHByZWZpeC8KKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgorCSMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8CisJICB0ZXN0IC1kICIkZHN0ZGlyIiB8fCBleGl0IDEKKwlvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCisKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKKworICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKKworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKKworICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiCTI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIJMj4vZGV2L251bGxgICYmCisKKyAgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCArZiAmJgorCisgICAgICAgdGVzdCAiJG9sZCIgPSAiJG5ldyIgJiYKKyAgICAgICAkY21wcHJvZyAiJGRzdCIgIiRkc3R0bXAiID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4KKyAgICAgIHJtIC1mICIkZHN0dG1wIgorICAgIGVsc2UKKyAgICAgICMgUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKworICAgICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQorICAgICAgIyB0byBpdHNlbGYsIG9yIHBlcmhhcHMgYmVjYXVzZSBtdiBpcyBzbyBhbmNpZW50IHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICMgc3VwcG9ydCAtZi4KKyAgICAgIHsKKwkjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisJIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKKwkjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCisJIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisJIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKwl7CisJICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisJICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisJICB7ICRkb2l0ICRtdmNtZCAtZiAiJGRzdCIgIiRybXRtcCIgMj4vZGV2L251bGwgJiYKKwkgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKwkgIH0gfHwKKwkgIHsgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3QiID4mMgorCSAgICAoZXhpdCAxKTsgZXhpdCAxCisJICB9CisJfSAmJgorCisJIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCisgICAgICB9CisgICAgZmkgfHwgZXhpdCAxCisKKyAgICB0cmFwICcnIDAKKyAgZmkKK2RvbmUKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9sdG1haW4uc2ggYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL2x0bWFpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2FlNjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9sdG1haW4uc2gKQEAgLTAsMCArMSw5NjU1IEBACisKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC4yCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMgICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKyMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCisjICAgICAgIC0tbm8td2FybiAgICAgICAgICAgIGRvbid0IGRpc3BsYXkgd2FybmluZyBtZXNzYWdlcworIyAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisjICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyMgICAgICAgLS1uby12ZXJib3NlICAgICAgICAgZG9uJ3QgcHJpbnQgdGhlIGV4dHJhIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorIyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICBjbGVhbiAgICAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorIyAgICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisjICAgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgICAgZmluaXNoICAgICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyMgICAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKyMgICAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgICAgdW5pbnN0YWxsICAgICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisjCisjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKKyMgYC0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgYE1PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorIyBUcnkgYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KKyMKKyMgV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCisjIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyMKKyMgICAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgICAgc2hlbGw6CQkkU0hFTEwKKyMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sKSAyLjQuMgorIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgorIworIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisjIEdOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCisjIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorCitQUk9HUkFNPWxpYnRvb2wKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0yLjQuMgorVElNRVNUQU1QPSIiCitwYWNrYWdlX3JldmlzaW9uPTEuMzMzNworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KKworIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9Citmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK2RvCisgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKKwkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorCWZpIgorZG9uZQorTENfQUxMPUMKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRSBMQ19BTEwKKworJGx0X3Vuc2V0IENEUEFUSAorCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKworCis6ICR7Q1A9ImNwIC1mIn0KK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Cis6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKworIyBHbG9iYWwgdmFyaWFibGVzOgorRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUworCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorbHRfbmw9JworJworSUZTPSIgCSRsdF9ubCIKKworZGlybmFtZT0icywvW14vXSokLCwiCitiYXNlbmFtZT0icyxeLiovLCwiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCisgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgIGZpCit9ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCit9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgIGZpCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCit9ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICAgY2FzZSAkezJ9IGluCisgICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICAgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCitwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKK3BhdGhjZHI9J3MsXi9bXi9dKiwsJworcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzQC9cLi9AL0BnCisJCXQgZG90c2wKKwkJcywvXC4kLC8sJworY29sbGFwc2VzbGFzaGVzPSdzQC9cezEsXH1AL0BnJworZmluYWxzbGFzaD0ncywvKiQsLywnCisKKyMgZnVuY19ub3JtYWxfYWJzcGF0aCBQQVRICisjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAorIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKK2Z1bmNfbm9ybWFsX2Fic3BhdGggKCkKK3sKKyAgIyBTdGFydCBmcm9tIHJvb3QgZGlyIGFuZCByZWFzc2VtYmxlIHRoZSBwYXRoLgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQorICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0KKyAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgorICAgICIiKQorICAgICAgIyBFbXB0eSBwYXRoLCB0aGF0IGp1c3QgbWVhbnMgJGN3ZC4KKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICByZXR1cm4KKyAgICA7OworICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQorICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgIyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBjYXNlJ3MgZmlyc3QtbWF0Y2ggYmVoYXZpb3VyLgorICAgIC8vLyopCisgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgLy8qKQorICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCisgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBDeWd3aW4gdXNlcyBpdCB0byBhY2Nlc3MgcmVtb3RlIGZpbGUgc2hhcmVzCisgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCisgICAgOzsKKyAgICAvKikKKyAgICAgICMgQWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgICopCisgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YHB3ZGAvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgKKyAgICA7OworICBlc2FjCisgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQorICAjIHRoZXJlIGlzIG9uZSAoYW5kIG9ubHkgb25lKSBoZXJlLgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcmVtb3ZlZG90cGFydHMiIC1lICIkY29sbGFwc2VzbGFzaGVzIiAtZSAiJGZpbmFsc2xhc2giYAorICB3aGlsZSA6OyBkbworICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgaWYgdGVzdCAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiID0gLyA7IHRoZW4KKyAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICBpZiB0ZXN0IC16ICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjYXIiYAorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2RyImAKKyAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAiIikKKyAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgorICAgICAgOzsKKyAgICAgIC4uKQorICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICA7OworICAgICAgKikKKyAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0LyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2UkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKK30KKworIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgorIyBnZW5lcmF0ZXMgYSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUiwgd2l0aCBhIHRyYWlsaW5nCisjIHNsYXNoIGlmIG5vbi1lbXB0eSwgc3VpdGFibGUgZm9yIGltbWVkaWF0ZWx5IGFwcGVuZGluZyBhIGZpbGVuYW1lCisjIHdpdGhvdXQgbmVlZGluZyB0byBhcHBlbmQgYSBzZXBhcmF0b3IuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQoreworICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQyIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKworICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICB3aGlsZSA6OyBkbworICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhIHByZWZpeCBvZiBiaW5kaXIKKyAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQorICAgICAgICAjIGZvdW5kIGFuIGV4YWN0IG1hdGNoCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAorICAgICAgICBmdW5jX3N0cmlwbmFtZSAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIgorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgorICAgICAgICBmaQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0ke2Z1bmNfZGlybmFtZV9yZXN1bHR9CisgICAgICAgIGlmIHRlc3QgIngkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiID0geCA7IHRoZW4KKyAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgaWYgdGVzdCAieCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiICE9IHggOyB0aGVuCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0ke2Z1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHR9LyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fQorICBmaQorCisgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuIGVtcHR5IHN0cmluZywKKyAgIyBlbHNlIHJlbGF0aXZlIHBhdGggZW5kaW5nIHdpdGggYSBzbGFzaDsgZWl0aGVyIHdheSwgdGFyZ2V0CisgICMgZmlsZSBuYW1lIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZC4KKyAgaWYgdGVzdCAhIC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8iCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZpCit9CisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgorcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgcmVleGVjdXRpb246CitjYXNlICRwcm9ncGF0aCBpbgorICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworICAqW1xcL10qKQorICAgICBwcm9nZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworICAqKQorICAgICBzYXZlX0lGUz0iJElGUyIKKyAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworICAgICBkb25lCisgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQorIyBzdHJpbmcgbGl0ZXJhbGx5Lgorc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisjIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0kKiIKK30KKworIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICR7MSsiJEAifQorCisgICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCisgICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KKyAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6CisgICAgOgorfQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisjIGZ1bmNfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0iJHsxKyIkQCJ9IDE+JjIKK30KKworIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2FybmluZyAoKQoreworICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfXdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRteV9kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIiRteV9kaXJfbGlzdCIgfCAkU0VEICdzLDoqJCwsJ2AKKworICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbworCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCisgICAgZmkKK30KKworCisjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KK2Z1bmNfbWt0ZW1wZGlyICgpCit7CisgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgorCisgICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisKKyAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKKyAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCisgICAgZmkKKworICAgICRFQ0hPICIkbXlfdG1wZGlyIgorfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKKyMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCisjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKyMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KK2Z1bmNfcXVvdGVfZm9yX2V2YWwgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIlwkXSopCisJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisjIGZ1bmNfdHJfc2gKKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorZnVuY190cl9zaCAoKQoreworICBjYXNlICQxIGluCisgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKyAgICA7OworICAqICkKKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKworCisjIGZ1bmNfdmVyc2lvbgorIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3ZlcnNpb24gKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvKEMpLyFiIGdvCisJOm1vcmUKKwkvXC4vIXsKKwkgIE4KKwkgIHMvXG4jIC8gLworCSAgYiBtb3JlCisJfQorCTpnbworCS9eIyAnJFBST0dSQU0nIChHTlUgLywvIyB3YXJyYW50eTsgLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKyAgICAgICAgcy9cKChDKVwpWyAwLTksLV0qXCggWzEtOV1bMC05XSpcKS9cMVwyLworICAgICAgICBwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAgZXhpdCAkPworfQorCisjIGZ1bmNfdXNhZ2UKKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisJcAorICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICBlY2hvCisgICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19oZWxwIFtOT0VYSVRdCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LAorIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorZnVuY19oZWxwICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKwk6cHJpbnQKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKKwlzKlwkaG9zdConIiRob3N0IicqCisJcypcJFNIRUxMKiciJFNIRUxMIicqCisJcypcJExUQ0MqJyIkTFRDQyInKgorCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgorCXMqXCRMRConIiRMRCInKgorCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYCgke0FVVE9NQUtFLWF1dG9tYWtlfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYCgke0FVVE9DT05GLWF1dG9jb25mfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXAKKwlkCisgICAgIH0KKyAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAorICAgICAvXiMgR2VuZXJhbCBoZWxwIHVzaW5nL2IgcHJpbnQKKyAgICAgJyA8ICIkcHJvZ3BhdGgiCisgICAgcmV0PSQ/CisgICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgICAgICBleGl0ICRyZXQKKyAgICBmaQorfQorCisjIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgICRvcHRfZGVidWcKKworICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKKworIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAorIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCisjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCitmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQoreworICAgIG15X3NlZF9zaG9ydF9vcHQ9JzFzL15cKC4uXCkuKiQvXDEvO3EnCisgICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCisKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9vcHQiYAorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCit9ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKKyMgU2V0IGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9sb25nX29wdF9hcmcgc2hlbGwKKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKCkKK3sKKyAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKKyAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKK30gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCitleGl0X2NtZD06CisKKworCisKKworbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KK25vbm9wdD0KK3ByZXNlcnZlX2FyZ3M9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCit9ICMgZnVuY19hcHBlbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKyMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQorIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKKyMgYnkgYSBzcGFjZS4KK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQoreworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisgICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorfSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiR7QH0iYAorfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9ICMgZnVuY19sZW4gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCit9ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCit9ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZmVhdHVyZXMKKyMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorZnVuY19mZWF0dXJlcyAoKQoreworICAgIGVjaG8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZmkKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCisjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKKyMgdmFyaWFibGUgaGVyZS4KK2Z1bmNfZW5hYmxlX3RhZyAoKQoreworICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgdGFnbmFtZT0iJDEiCisKKyAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICBzZWRfZXh0cmFjdGNmPSIvJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcCIKKworICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgIDs7CisgIGVzYWMKKworICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgIENDKSA7OworICAgICopCisgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKKwkjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6CisJZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCWV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CitjYXNlICQxIGluCitjbGVhbnxjbGVhfGNsZXxjbCkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICA7OworY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgIDs7CitleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2ZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICA7OworaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgIDs7CitsaW5rfGxpbnxsaXxsKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK3VuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZXNhYworCisKKworIyBPcHRpb24gZGVmYXVsdHM6CitvcHRfZGVidWc9Ogorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9jb25maWc9ZmFsc2UKK29wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQorb3B0X2ZlYXR1cmVzPWZhbHNlCitvcHRfZmluaXNoPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X2hlbHBfYWxsPWZhbHNlCitvcHRfc2lsZW50PToKK29wdF93YXJuaW5nPToKK29wdF92ZXJib3NlPToKK29wdF9zaWxlbnQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCisKKworIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlCisjIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KK3sKKyAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZworICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgIG9wdD0iJDEiCisgICAgc2hpZnQKKyAgICBjYXNlICRvcHQgaW4KKyAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorCQkJJG9wdF9kZWJ1ZworCQkJOzsKKyAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKwkJCW9wdF9kcnlfcnVuPToKKwkJCTs7CisgICAgICAtLWNvbmZpZykKKwkJCW9wdF9jb25maWc9OgorZnVuY19jb25maWcKKwkJCTs7CisgICAgICAtLWRsb3BlbnwtZGxvcGVuKQorCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorfSRvcHRhcmciCisJCQlzaGlmdAorCQkJOzsKKyAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisJCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgorCQkJOzsKKyAgICAgIC0tZmVhdHVyZXMpCisJCQlvcHRfZmVhdHVyZXM9OgorZnVuY19mZWF0dXJlcworCQkJOzsKKyAgICAgIC0tZmluaXNoKQorCQkJb3B0X2ZpbmlzaD06CitzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisJCQk7OworICAgICAgLS1oZWxwKQorCQkJb3B0X2hlbHA9OgorCQkJOzsKKyAgICAgIC0taGVscC1hbGwpCisJCQlvcHRfaGVscF9hbGw9Ogorb3B0X2hlbHA9JzogaGVscC1hbGwnCisJCQk7OworICAgICAgLS1tb2RlKQorCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X21vZGU9IiRvcHRhcmciCitjYXNlICRvcHRhcmcgaW4KKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKyAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKworICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKyAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKyAgICAgZXhpdF9jbWQ9ZXhpdAorICAgICBicmVhaworICAgICA7OworZXNhYworCQkJc2hpZnQKKwkJCTs7CisgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorCQkJb3B0X3NpbGVudD1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1uby13YXJuaW5nfC0tbm8td2FybikKKwkJCW9wdF93YXJuaW5nPWZhbHNlCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKwkJCTs7CisgICAgICAtLW5vLXZlcmJvc2UpCisJCQlvcHRfdmVyYm9zZT1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1zaWxlbnR8LS1xdWlldCkKKwkJCW9wdF9zaWxlbnQ9OgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisJCQk7OworICAgICAgLS12ZXJib3NlfC12KQorCQkJb3B0X3ZlcmJvc2U9OgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCitvcHRfc2lsZW50PWZhbHNlCisJCQk7OworICAgICAgLS10YWcpCisJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfdGFnPSIkb3B0YXJnIgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKK2Z1bmNfZW5hYmxlX3RhZyAiJG9wdGFyZyIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7CisgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKKyAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtLSo9KikKKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisgICAgICAtXD8qfC1oKnwtbip8LXYqKQorCQkJZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIiA7OworICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorCisgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorICAgIG5vbm9wdD0iJG9wdCIKKyAgICBzaGlmdAorICBmaQorCisgICMgcHJlc2VydmUgLS1kZWJ1ZworICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAkb3B0X2hlbHAgfHwgeworICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorICAgIGZpCisKKyAgICAjIERhcndpbiBzdWNrcworICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKyAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKyAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAgICRFQ0hPICIkaGVscCIgMT4mMgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgZmkKKworICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorICAgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICB9CisKKworICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKworCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyAgICBNYWluLiAgICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CitmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQoreworICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisgID0qKQorICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCitmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQoreworICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKyAgPyo6IiRsdF9zeXNyb290IiopCisgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKyAgICA7OworICAqKQorICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfaW5mZXJfdGFnIGFyZworIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQorIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCisjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJworZnVuY19pbmZlcl90YWcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIENDX3F1b3RlZD0KKyAgICAgIGZvciBhcmcgaW4gJENDOyBkbworCWZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgICAgICBkb25lCisgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKyAgICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikgOzsKKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAqKQorCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKwkgICAgZG9uZQorCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisJICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorCSAgICBjYXNlICIkQCAiIGluCisJICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKwkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JHsxfQorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfbG9iaj1ub25lCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorIyBpbiAkYnVpbGQncyAkUEFUSC4KKyMKKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8CisgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICBlbHNlCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKyAgICBmaQorICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKKworCisjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisjICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncworIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKyMKKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisjIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcworIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCitmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBvbGRJRlM9JElGUworICAgIElGUz06CisgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KKyAgICAgIElGUz0kb2xkSUZTCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgorICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0kb2xkSUZTCisgIGZpCit9CisjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgorCisKKyMgZnVuY19jeWdwYXRoIEFSR1MuLi4KKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgorIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKyMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCisjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0CisjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKyMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCisjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKyMKKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bworIyBiZSBjb252ZXJ0ZWQuCisjCisjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorZnVuY19jeWdwYXRoICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZmkKKyAgZWxzZQorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorICBmaQorfQorI2VuZDogZnVuY19jeWdwYXRoCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgb3IgcGF0aCBBUkcgZnJvbSBNU1lTIGZvcm1hdCB0byB3MzIgZm9ybWF0LiAgUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCitmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorfQorI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgorIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgorZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2s6CisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAorIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KK2Z1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgXGAkMyciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKyAgICBlbHNlCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzIgorICAgIGZpCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCisjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQoreworICAkb3B0X2RlYnVnCisgIGNhc2UgJDQgaW4KKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICA7OworICBlc2FjCisgIGNhc2UgJDQgaW4KKyAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgorICAgIDs7CisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisKKworIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX3RvX2hvc3RfZmlsZSAoKQoreworICAkb3B0X2RlYnVnCisgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCisKKworIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorZnVuY190b190b29sX2ZpbGUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBjYXNlICwkMiwgaW4KKyAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQorICAgICAgOzsKKyAgICAqKQorICAgICAgJHRvX3Rvb2xfZmlsZV9jbWQgIiQxIgorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKKyAgICAgIDs7CisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQorICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworIworIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCisjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAorIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisjCisjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246CisjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKyMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQorIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQorIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKyMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyMgd2lsbCBicmVhay4KKworCisjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgordG9faG9zdF9wYXRoX2NtZD0KK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKKyAgZmkKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIEFSRworIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisgICR0b19ob3N0X3BhdGhfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCisgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKKyAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAorIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCisjIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKyAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorCisKKyMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCitmdW5jX21vZGVfY29tcGlsZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgorICAgIGJhc2VfY29tcGlsZT0KKyAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCisgICAgc3VwcHJlc3Nfb3B0PXllcworICAgIHN1cHByZXNzX291dHB1dD0KKyAgICBhcmdfbW9kZT1ub3JtYWwKKyAgICBsaWJvYmo9CisgICAgbGF0ZXI9CisgICAgcGllX2ZsYWc9CisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgICBhcmcgICkKKwkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCisJbGFzdGFyZz0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwk7OworCisgICAgICB0YXJnZXQgKQorCWxpYm9iaj0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwljb250aW51ZQorCTs7CisKKyAgICAgIG5vcm1hbCApCisJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCWNhc2UgJGFyZyBpbgorCS1vKQorCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiCisJICBhcmdfbW9kZT10YXJnZXQKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktbm8tc3VwcHJlc3MpCisJICBzdXBwcmVzc19vcHQ9bm8KKwkgIGNvbnRpbnVlCisJICA7OworCisJLVhjb21waWxlcikKKwkgIGFyZ19tb2RlPWFyZyAgIyAgdGhlIG5leHQgb25lIGdvZXMgaW50byB0aGUgImJhc2VfY29tcGlsZSIgYXJnIGxpc3QKKwkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCisJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorCisJLVdjLCopCisJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGxhc3Rhcmc9CisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKwkgIGZ1bmNfYXBwZW5kIGJhc2VfY29tcGlsZSAiICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKKyAgICBkb25lICMgZm9yIGFyZworCisgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICBhcmcpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisgICAgICA7OworICAgIHRhcmdldCkKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICAgIHRlc3QgLXogIiRsaWJvYmoiICYmIHsKKwlmdW5jX2Jhc2VuYW1lICIkc3JjZmlsZSIKKwlsaWJvYmo9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIH0KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBSZWNvZ25pemUgc2V2ZXJhbCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcy4KKyAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgKi5hZGEgfCAqLmFkYiB8ICouYWRzIHwgKi5hc20gfCBcCisgICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAorICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLmdvIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKKworICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZWxzZQorICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGZpCisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJG91dHB1dF9vYmoiCisgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCisgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKKworICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICBzcmNmaWxlPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKworICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgorICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCisKKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0gbm87IHRoZW4KKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBlbHNlCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZmkKKworICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKKyAgICAgICAgICAndGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisKKyAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KKyAgICAgIGlmIHRlc3QgIiRzdXBwcmVzc19vcHQiID0geWVzOyB0aGVuCisJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKworICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgeworICB0ZXN0ICIkb3B0X21vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KK30KKworZnVuY19tb2RlX2hlbHAgKCkKK3sKKyAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgIiIpCisgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCisgICAgICAgIGZ1bmNfaGVscAorICAgICAgICA7OworCisgICAgICBjbGVhbikKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICBjb21waWxlKQorICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKKworQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCisgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CisgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KKworVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK2ZsYWdzLgorCitJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKK2RpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgorCitUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKKyAgICAgICAgOzsKKworICAgICAgZmluaXNoKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisKK0NvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCisKK0VhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQordGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWluc3QtcHJlZml4LWRpciBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgICAgICAgOzsKKworICAgICAgbGluaykKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWJpbmRpciBCSU5ESVIgICAgc3BlY2lmeSBwYXRoIHRvIGJpbmFyaWVzIGRpcmVjdG9yeSAoZm9yIHN5c3RlbXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIFBBVEggc2V0dGluZyBhdCBydW50aW1lKQorICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKyAgLVdjLEZMQUcKKyAgLVhjb21waWxlciBGTEFHICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKyAgLVdsLEZMQUcKKyAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCisgIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGVjaG8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorfQorCisjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKK2lmICRvcHRfaGVscDsgdGhlbgorICBpZiB0ZXN0ICIkb3B0X2hlbHAiID0gOjsgdGhlbgorICAgIGZ1bmNfbW9kZV9oZWxwCisgIGVsc2UKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8IHNlZCAtbiAnMXA7IDIsJHMvXlVzYWdlOi8gIG9yOiAvcCcKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWVjaG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfAorICAgIHNlZCAnMWQKKyAgICAgIC9eV2hlbiByZXBvcnRpbmcvLC9eUmVwb3J0L3sKKwlICisJZAorICAgICAgfQorICAgICAgJHgKKyAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCisgICAgICAvbW9yZSBkZXRhaWxlZCAuKk1PREUvZAorICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKyAgZmkKKyAgZXhpdCAkPworZmkKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qIHwgKi5sYSB8ICoubG8gKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCisgICAgZWxzZQorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGxpYnM9CisgICAgbGliZGlycz0KKyAgICBhZG1pbmNtZHM9CisKKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KKyAgICBkbworICAgICAgaWYgdGVzdCAtZCAiJG9wdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKKworICAgICAgZWxpZiB0ZXN0IC1mICIkb3B0IjsgdGhlbgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKKwllbHNlCisJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCWZpCisKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCisgICAgICBlbHNlCisgICAgICAgIHN5c3Jvb3RfY21kPQorICAgICAgZmkKKworICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKyAgICAgICAgZG9uZQorICAgICAgZWxzZQorICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorCSAgICA+ICR0bXBkaXIvdG1wLWxhCisJICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCisJZG9uZQorICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworJyIkY21kIiciJworCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwkkRUNITyAiICAgJGxpYmRpciIKKyAgICAgIGRvbmUKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJbGliZGlyPUxJQkRJUgorCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKworCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICAgIGZpCisgICAgICBlY2hvCisKKyAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgICAgY2FzZSAkaG9zdCBpbgorCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorCSAgZWNobyAicGFnZXMuIgorCSAgOzsKKwkqKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisJICA7OworICAgICAgZXNhYworICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBmaQorICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit0ZXN0ICIkb3B0X21vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCisgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CisgICAgICAqKSBpbnN0YWxsX2NwPWZhbHNlIDs7CisgICAgZXNhYworCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgbm9fbW9kZT06CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBhcmcyPQorICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZikKKwlpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisJICBwcmV2PSRhcmcKKwlmaQorCTs7CisgICAgICAtZyB8IC1tIHwgLW8pCisJcHJldj0kYXJnCisJOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBpZiB0ZXN0ICJ4JHByZXYiID0geC1tICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCisJICAgIGFyZzI9JGluc3RhbGxfb3ZlcnJpZGVfbW9kZQorCSAgICBub19tb2RlPWZhbHNlCisJICBmaQorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCisJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgorCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgorICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcworICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KKyAgICAgIGRlc3RkaXI9IiRkZXN0IgorICAgICAgZGVzdG5hbWU9CisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgorICAgICAgZGVzdGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBkZXN0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgorCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCXJlbGlua19jb21tYW5kPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgY3VycmVudF9saWJkaXJzICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwllbHNlCisJICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCisJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorCisJICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisJICBmaQorCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQxIgorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKKwkgICAgICAnZXhpdCAkPycKKwkgIHRzdHJpcG1lPSIkc3RyaXBtZSIKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0iIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKworCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisJICAgICAgZmluYWxpemU9bm8KKwkgICAgZmkKKwkgIGRvbmUKKworCSAgcmVsaW5rX2NvbW1hbmQ9CisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgICB9CisJICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICAgICAgZWxzZQorCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgorCQkgIGNvbnRpbnVlCisJICAgICAgICBmaQorCSAgICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIgorCSAgICAgIGZpCisJICAgIH0KKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgIHRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJHRvb2xfb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorCisgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorCisKKyMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCisjIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfb3V0cHV0bmFtZT0iJDEiCisgICAgbXlfb3JpZ2luYXRvcj0iJDIiCisgICAgbXlfcGljX3A9IiR7My1ub30iCisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAorICAgIG15X2Rsc3ltcz0KKworICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCisgICAgICBjYXNlICRteV9kbHN5bXMgaW4KKyAgICAgICIiKSA7OworICAgICAgKi5jKQorCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCisKKwlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCisJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisKKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyNlbmRpZgorCisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGVsc2UKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKwkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGZpCisJZmkKKworCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCisJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisJICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgorCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKwkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIiCisJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKwkgICAgICAgICAgZmkKKwkgICAgICAgIGZpCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZmkKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAorCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZWxzZSAjIG5vdCBhbiBpbXBvcnQgbGliCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBmaQorCSAgICA7OworCSAgICAqKQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgIH0KKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisJZG9uZQorCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCisJICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKwkgIGZpCisKKwkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJc29ydCAtayAzCisJICAgICAgZWxzZQorCQlzb3J0ICsyCisJICAgICAgZmkgfAorCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICBmaQorCisJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKwkgIGVsc2UKKwkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgKmFkZHJlc3M7Cit9IGx0X2Rsc3ltbGlzdDsKK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWZcCisiCisJfSAjICEkb3B0X2RyeV9ydW4KKworCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KKwkqIiAtc3RhdGljICIqKSA7OworCSopCisJICBjYXNlICRob3N0IGluCisJICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKKwkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcworCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQorCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCisJICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgorCSAgKi0qLWZyZWVic2QyLip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OworCSAgKi0qLWhwdXgqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCisJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmkKKwkgIDs7CisJKikKKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCisjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAorCSRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworIworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQoreworICAkb3B0X2RlYnVnCisgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgU0VDVElPTl9OQU1FIExJQk5BTUVzCisjCisjIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKKyMgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUKKyMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCisjCisjIFNFQ1RJT05fTkFNRSBpcyBlaXRoZXIgLmlkYXRhJDYgb3IgLmlkYXRhJDcsIGRlcGVuZGluZworIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgorIworIyBFY2hvcyB0aGUgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CisgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisgICAgICBzLy4qLz09PT1NQVJLPT09PS8KKyAgICAgIHAKKyAgICAgIGQKKyAgICB9CisgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAorICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisgICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCisgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCisgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKyAgICAvXj09PT1NQVJLPT09PS9wCisgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKKyAgICAvXi5cezQzXH0vIWQKKyAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycworICAgIHMvXi5cezQzXH0vLycgfAorICAgICRTRUQgLW4gJworICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQorICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQorICAgICAgSAorICAgICAgJCBiIHBhcmEKKyAgICAgIGIKKyAgICAgIDpwYXJhCisgICAgICB4CisgICAgICBzL1xuLy9nCisgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisgICAgICBzL149PT09TUFSSz09PT0vLworICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQorICAgICAgcy9bXC4gXHRdKiQvLworICAgICAgIyBQcmludAorICAgICAgLy4vcCcgfAorICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKyAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKKyAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgorICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CisgICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQorICAgICMgYSAnLicuCisgICAgIworICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCisgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKK30KKworIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMKKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisgIGVsc2UKKyAgICAjIHVua25vd24KKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgIGxvY2tmaWxlPSRmX2V4X2FuX2FyX29sZGxpYi5sb2NrCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZmkKKyAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiBcCisJCSAgICdzdGF0PSQ/OyBybSAtZiAiJGxvY2tmaWxlIjsgZXhpdCAkc3RhdCcKKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHJtIC1mICIkbG9ja2ZpbGUiCisgICAgZmkKKyAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICA6CisgICAgZWxzZQorICAgICAgZnVuY19mYXRhbF9lcnJvciAib2JqZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiCisgICAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgorZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X2dlbnRvcD0iJDEiOyBzaGlmdAorICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9CisgICAgbXlfb2xkb2Jqcz0iIgorICAgIG15X3hsaWI9IiIKKyAgICBteV94YWJzPSIiCisgICAgbXlfeGRpcj0iIgorCisgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCisgICAgICBjYXNlICRteV94bGliIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKKwkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgorICAgICAgbXlfeGxpYj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgbXlfeGxpYl91PSRteV94bGliCisgICAgICB3aGlsZSA6OyBkbworICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCisJKiIgJG15X3hsaWJfdSAiKikKKwkgIGZ1bmNfYXJpdGggJGV4dHJhY3RlZF9zZXJpYWwgKyAxCisJICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKKwkqKSBicmVhayA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgorICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorCisgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJZnVuY192ZXJib3NlICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCSRvcHRfZHJ5X3J1biB8fCB7CisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWBiYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlImAKKwkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAorCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCisJICAgIGRhcndpbl9hcmNoZXM9YCRFQ0hPICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKKwkgICAgZGFyd2luX2FyY2g9CisJICAgIGZ1bmNfdmVyYm9zZSAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCisJICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXMgOyBkbworCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IiAiJHtkYXJ3aW5fYXJjaGl2ZX0iCisJICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCisJICAgICAgJFJNICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcworICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCisJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRiYXNlbmFtZSIgfCBzb3J0IC11YAorCSAgICBkYXJ3aW5fZmlsZT0KKwkgICAgZGFyd2luX2ZpbGVzPQorCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKwkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKwkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKwkgICAgJFJNIC1yZiB1bmZhdC0kJAorCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKwkgIGVsc2UKKwkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgorCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwkgIGZpICMgJGRhcndpbl9hcmNoZXMKKwl9ICMgISRvcHRfZHJ5X3J1bgorCTs7CisgICAgICAqKQorICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwk7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisgICAgZG9uZQorCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisKKworIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQorIworIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyMgaW5jb3Jwb3JhdGUgdGhlIHNjcmlwdCBjb250ZW50cyB3aXRoaW4gYSBjeWd3aW4vbWluZ3cKKyMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisjIHNldCB0aGVyZWluLgorIworIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAorIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgaXMgc3RvcmVkIGlzCisjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKKyMgYmVoYXZpb3IuCitmdW5jX2VtaXRfd3JhcHBlciAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JHsxLW5vfQorCisJJEVDSE8gIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorIworIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgorCisjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCitpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJworICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCitlbHNlCisgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgIGZpbGU9XCJcJDBcIiIKKworICAgIHFFQ0hPPWAkRUNITyAiJEVDSE8iIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgJEVDSE8gIlwKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorICAgIEVDSE89XCIkcUVDSE9cIgorICBmaQorCisjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworIyB0aGUgbGlidG9vbCB3cmFwcGVyLCAoYikgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZSB3cmFwcGVyCisjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCisjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB3aGljaCBtYXRjaAorIyB0aGlzIHBhdHRlcm4pLgorIworIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCisjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCisjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorbHRfb3B0aW9uX2RlYnVnPQorZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCit7CisgIGx0X3NjcmlwdF9hcmcwPVwkMAorICBzaGlmdAorICBmb3IgbHRfb3B0CisgIGRvCisgICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworICAgIC0tbHQtZHVtcC1zY3JpcHQpCisgICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAorICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisgICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKKyAgICAgICAgZXhpdCAwCisgICAgICA7OworICAgIC0tbHQtKikKKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICBlY2hvIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlwiIDE+JjIKKyAgZmkKK30KKworIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0CisjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKK2Z1bmNfbHRfZHVtcF9hcmdzICgpCit7CisgIGx0X2R1bXBfYXJnc19OPTE7CisgIGZvciBsdF9hcmcKKyAgZG8KKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisgICAgbHRfZHVtcF9hcmdzX049XGBleHByIFwkbHRfZHVtcF9hcmdzX04gKyAxXGAKKyAgZG9uZQorfQorCisjIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCitmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCit7CisiCisgIGNhc2UgJGhvc3QgaW4KKyAgIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCisgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisKKyAgKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiXAorICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorICAgICAgZXhpdCAxCit9CisKKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorIyBTdHJpcHMgb3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFjZSBmcm9tIFwkQCBhbmQKKyMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCitmdW5jX2V4ZWNfcHJvZ3JhbSAoKQoreworICBjYXNlIFwiIFwkKiBcIiBpbgorICAqXFwgLS1sdC0qKQorICAgIGZvciBsdF93cl9hcmcKKyAgICBkbworICAgICAgY2FzZSBcJGx0X3dyX2FyZyBpbgorICAgICAgLS1sdC0qKSA7OworICAgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKKyAgICAgIGVzYWMKKyAgICAgIHNoaWZ0CisgICAgZG9uZSA7OworICBlc2FjCisgIGZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwkQFwifQorfQorCisgICMgUGFyc2Ugb3B0aW9ucworICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9CisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KKyAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKlwkJSUnXGAKKworICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KKyAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCisgICAgICBjYXNlIFwiXCRkZXN0ZGlyXCIgaW4KKyAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OworICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OworICAgICAgZXNhYworICAgIGZpCisKKyAgICBmaWxlPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJV4uKi8lJSdcYAorICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgIGRvbmUKKworICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KKyAgIyB0aGUgY3dyYXBwZXIuCisgIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9hcmcxCisgIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJworICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCisgICAgICB0aGlzZGlyPVxgcHdkXGAKKyAgICBmaQorICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgorICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgorICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJcJHRoaXNkaXJcIiB8ICRTRUQgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OworICAgIGVzYWMKKyAgZmkKKworICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgorICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCisgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisiCisKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJIworCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCisJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKworCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxkaXJlY3QuaD4KKyMgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyBpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworaW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK2ludCBwdXRlbnYgKGNoYXIgKik7CitpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyMgZW5kaWYKKy8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisjZW5kaWYKKworLyogcG9ydGFiaWxpdHkgZGVmaW5lcywgZXhjbHVkaW5nIHBhdGggaGFuZGxpbmcgbWFjcm9zICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworIyBpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIGludHB0cl90IGludAorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBkZWZpbmUgSEFWRV9TRVRFTlYKKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKy8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoUEFUSF9NQVgpCisjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisjZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KKyNlbHNlCisjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMAorI2VuZGlmCisKKy8qIHBhdGggaGFuZGxpbmcgcG9ydGFiaWxpdHkgbWFjcm9zICovCisjaWZuZGVmIERJUl9TRVBBUkFUT1IKKyMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAorICBkZWZpbmVkIChfX09TMl9fKQorIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKyMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKKyNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAorCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQorI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKKyNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisjZW5kaWYKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gImxpYnRvb2wtd3JhcHBlciI7IC8qIGluIGNhc2UgeHN0cmR1cCBmYWlscyAqLworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICoqcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpOwordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CitFT0YKKworCSAgICBjYXQgPDxFT0YKK3ZvbGF0aWxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBmaQorCisKKwkgICAgY2F0IDw8IkVPRiIKKworI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CitzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisgICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAorICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisgICAqLworICBuZXdhcmdjPTA7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCisJeworRU9GCisJICAgIGNhc2UgIiRob3N0IiBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorCXsKKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisgICAgICAgICAgY29udGludWU7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworRU9GCisJICAgIGNhdCA8PEVPRgorICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKKworICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCisgIHRhcmdldF9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChUQVJHRVRfUFJPR1JBTV9OQU1FKSk7CisgIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAodGFyZ2V0X25hbWUpOworICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisJCSAgdGFyZ2V0X25hbWUpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCisgIG5ld2FyZ3pbMF0gPQorICAgIFhNQUxMT0MgKGNoYXIsIChzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSArCisJCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfbmFtZSkgKyAxKSk7CisgIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIkb2JqZGlyIik7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIi8iKTsKK0VPRgorCisJICAgIGNhdCA8PCJFT0YiCisgIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCisgIHRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKG5ld2FyZ3pbMF0pOworCisgIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLworICBzdHJjYXQgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KKyAgbHRfYXJndl96ZXJvID0gbHRfZXh0ZW5kX3N0ciAodG1wX3BhdGhzcGVjLCB0YXJnZXRfbmFtZSwgMSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworICB0bXBfcGF0aHNwZWMgPSBOVUxMOworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkgICAgY2F0IDw8IkVPRiIKKyAgeworICAgIGNoYXIqIHA7CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgIH0KK0VPRgorCSAgICA7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLworICAvKiBVcGRhdGUgdGhlIERMTCBzZWFyY2hwYXRoLiAgRVhFX1BBVEhfVkFMVUUgKCRkbGxzZWFyY2hwYXRoKSBtdXN0CisgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQorICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKKyAgICAgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4gKi8KKyAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKKwkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKKwkJICAgICAgaSwgbm9ubnVsbCAobmV3YXJneltpXSkpOworICAgIH0KKworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKyAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KKyAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5ld2FyZ3opOworICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBpZiAocnZhbCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAorCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgICAgIHJldHVybiAxMjc7CisgICAgfQorICByZXR1cm4gcnZhbDsKK0VPRgorCQk7OworCSAgICAgICopCisJCWNhdCA8PCJFT0YiCisgIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOworICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLworRU9GCisJCTs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgIGlmICghcCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOworCisgIHJldHVybiBwOworfQorCitjaGFyICoKK3hzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuIHN0cmluZyA/IHN0cmNweSAoKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChzdHJpbmcpICsgMSksCisJCQkgIHN0cmluZykgOiBOVUxMOworfQorCitjb25zdCBjaGFyICoKK2Jhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqYmFzZTsKKworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgICB7CisJaGFzX3NsYXNoID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgICAgeworICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgICBpZiAocGF0aCAhPSBOVUxMKQorCXsKKwkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqcTsKKwkgICAgICBzaXplX3QgcF9sZW47CisJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKKwkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCisJCSAgYnJlYWs7CisJICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJCXJldHVybiBjb25jYXRfbmFtZTsKKwkgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworCSAgICB9CisJfQorICAgICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KKyAgICB9CisgIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KKyAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKwl7CisJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorCSAgICB7CisJICAgICAgaGFzX3N5bWxpbmtzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KKwkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOworCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHAtLTsKKwkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgeworCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAqcCA9ICdcMCc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAiZXJyb3IgYWNjZXNzaW5nIGZpbGUgXCIlc1wiOiAlcyIsCisJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgfQorICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKKyNlbmRpZgorfQorCitjaGFyICoKK3N0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCit7CisgIHNpemVfdCBsZW4sIHBhdGxlbjsKKworICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0IChwYXQgIT0gTlVMTCk7CisKKyAgbGVuID0gc3RybGVuIChzdHIpOworICBwYXRsZW4gPSBzdHJsZW4gKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgICAgeworICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKKyAgICAgIGlmIChzdHJjbXAgKHN0ciwgcGF0KSA9PSAwKQorCSpzdHIgPSAnXDAnOworICAgIH0KKyAgcmV0dXJuIHN0cjsKK30KKwordm9pZAorbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpZiAobHRfZGVidWcpCisgICAgeworICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICAgIHZhX2VuZCAoYXJncyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKKwkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9ubnVsbCAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbmVtcHR5IChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworfQorCit2b2lkCitsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICB7CisjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKKyAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CisjZWxzZQorICAgIGludCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQorICAgICAgeworICAgICAgICBYRlJFRSAoc3RyKTsKKyAgICAgIH0KKyNlbmRpZgorICB9Cit9CisKK2NoYXIgKgorbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQoreworICBjaGFyICpuZXdfdmFsdWU7CisgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQorICAgIHsKKyAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBpbnQgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOworICAgICAgaWYgKHRvX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKKyAgICB9CisgIHJldHVybiBuZXdfdmFsdWU7Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCit2b2lkCitsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCitFT0YKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKworLyogUHJlcGFyZXMgYW4gYXJndW1lbnQgdmVjdG9yIGJlZm9yZSBjYWxsaW5nIHNwYXduKCkuCisgICBOb3RlIHRoYXQgc3Bhd24oKSBkb2VzIG5vdCBieSBpdHNlbGYgY2FsbCB0aGUgY29tbWFuZCBpbnRlcnByZXRlcgorICAgICAoZ2V0ZW52ICgiQ09NU1BFQyIpICE9IE5VTEwgPyBnZXRlbnYgKCJDT01TUEVDIikgOgorICAgICAgKHsgT1NWRVJTSU9OSU5GTyB2OyB2LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7CisgICAgICAgICBHZXRWZXJzaW9uRXgoJnYpOworICAgICAgICAgdi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UOworICAgICAgfSkgPyAiY21kLmV4ZSIgOiAiY29tbWFuZC5jb20iKS4KKyAgIEluc3RlYWQgaXQgc2ltcGx5IGNvbmNhdGVuYXRlcyB0aGUgYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkgJyAnLCBhbmQgY2FsbHMKKyAgIENyZWF0ZVByb2Nlc3MoKS4gIFdlIG11c3QgcXVvdGUgdGhlIGFyZ3VtZW50cyBzaW5jZSBXaW4zMiBDcmVhdGVQcm9jZXNzKCkKKyAgIGludGVycHJldHMgY2hhcmFjdGVycyBsaWtlICcgJywgJ1x0JywgJ1xcJywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBpbiBhCisgICBzcGVjaWFsIHdheToKKyAgIC0gU3BhY2UgYW5kIHRhYiBhcmUgaW50ZXJwcmV0ZWQgYXMgZGVsaW1pdGVycy4gVGhleSBhcmUgbm90IHRyZWF0ZWQgYXMKKyAgICAgZGVsaW1pdGVycyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgorICAgLSBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dC4gVGhlaXIgb25seSBlZmZlY3QgaXMKKyAgICAgdGhhdCB3aXRoaW4gZG91YmxlIHF1b3Rlcywgc3BhY2UgYW5kIHRhYiBhcmUgdHJlYXRlZCBsaWtlIG5vcm1hbAorICAgICBjaGFyYWN0ZXJzLgorICAgLSBCYWNrc2xhc2hlcyBub3QgZm9sbG93ZWQgYnkgZG91YmxlIHF1b3RlcyBhcmUgbm90IHNwZWNpYWwuCisgICAtIEJ1dCAyKm4rMSBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSBiZWNvbWUKKyAgICAgbiBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSAobiA+PSAwKToKKyAgICAgICBcIiAtPiAiCisgICAgICAgXFxcIiAtPiBcIgorICAgICAgIFxcXFxcIiAtPiBcXCIKKyAqLworI2RlZmluZSBTSEVMTF9TUEVDSUFMX0NIQVJTICJcIlxcIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCisjZGVmaW5lIFNIRUxMX1NQQUNFX0NIQVJTICIgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKK2NoYXIgKioKK3ByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KQoreworICBzaXplX3QgYXJnYzsKKyAgY2hhciAqKm5ld19hcmd2OworICBzaXplX3QgaTsKKworICAvKiBDb3VudCBudW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KKyAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAhPSBOVUxMOyBhcmdjKyspCisgICAgOworCisgIC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBuZXdfYXJndiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIFB1dCBxdW90ZWQgYXJndW1lbnRzIGludG8gdGhlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGFyZ3ZbaV07CisKKyAgICAgIGlmIChzdHJpbmdbMF0gPT0gJ1wwJykKKwluZXdfYXJndltpXSA9IHhzdHJkdXAgKCJcIlwiIik7CisgICAgICBlbHNlIGlmIChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQRUNJQUxfQ0hBUlMpICE9IE5VTEwpCisJeworCSAgaW50IHF1b3RlX2Fyb3VuZCA9IChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQQUNFX0NIQVJTKSAhPSBOVUxMKTsKKwkgIHNpemVfdCBsZW5ndGg7CisJICB1bnNpZ25lZCBpbnQgYmFja3NsYXNoZXM7CisJICBjb25zdCBjaGFyICpzOworCSAgY2hhciAqcXVvdGVkX3N0cmluZzsKKwkgIGNoYXIgKnA7CisKKwkgIGxlbmd0aCA9IDA7CisJICBiYWNrc2xhc2hlcyA9IDA7CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGgrKzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQlsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCSAgICAgIGxlbmd0aCsrOworCSAgICAgIGlmIChjID09ICdcXCcpCisJCWJhY2tzbGFzaGVzKys7CisJICAgICAgZWxzZQorCQliYWNrc2xhc2hlcyA9IDA7CisJICAgIH0KKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisKKwkgIHF1b3RlZF9zdHJpbmcgPSBYTUFMTE9DIChjaGFyLCBsZW5ndGggKyAxKTsKKworCSAgcCA9IHF1b3RlZF9zdHJpbmc7CisJICBiYWNrc2xhc2hlcyA9IDA7CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICAqcCsrID0gJyInOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCXsKKwkJICB1bnNpZ25lZCBpbnQgajsKKwkJICBmb3IgKGogPSBiYWNrc2xhc2hlcyArIDE7IGogPiAwOyBqLS0pCisJCSAgICAqcCsrID0gJ1xcJzsKKwkJfQorCSAgICAgICpwKysgPSBjOworCSAgICAgIGlmIChjID09ICdcXCcpCisJCWJhY2tzbGFzaGVzKys7CisJICAgICAgZWxzZQorCQliYWNrc2xhc2hlcyA9IDA7CisJICAgIH0KKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBpbnQgajsKKwkgICAgICBmb3IgKGogPSBiYWNrc2xhc2hlczsgaiA+IDA7IGotLSkKKwkJKnArKyA9ICdcXCc7CisJICAgICAgKnArKyA9ICciJzsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCisJICBuZXdfYXJndltpXSA9IHF1b3RlZF9zdHJpbmc7CisJfQorICAgICAgZWxzZQorCW5ld19hcmd2W2ldID0gKGNoYXIgKikgc3RyaW5nOworICAgIH0KKyAgbmV3X2FyZ3ZbYXJnY10gPSBOVUxMOworCisgIHJldHVybiBuZXdfYXJndjsKK30KK0VPRgorCQk7OworCSAgICBlc2FjCisKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFKiBmKQoreworRU9GCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIHllcyB8CisJICAgICAgJFNFRCAtbiAtZSAnCitzL15cKC5cezc5XH1cKVwoLi4qXCkvXDFcCitcMi8KK2gKK3MvXChbXFwiXVwpL1xcXDEvZworcy8kL1xcbi8KK3MvXChbXlxuXSpcKS4qLyAgZnB1dHMgKCJcMSIsIGYpOy9wCitnCitEJworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK30KK0VPRgorfQorIyBlbmQ6IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKworIyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCBBUkcKKyMgVHJ1ZSBpZiBBUkcgaXMgYW4gaW1wb3J0IGxpYiwgYXMgaW5kaWNhdGVkIGJ5ICRmaWxlX21hZ2ljX2NtZAorZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICppbXBvcnQqKSA6IDs7CisgICAgKikgZmFsc2UgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKKyAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgYmluZGlyPQorICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBub25fcGljX29iamVjdHM9CisgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CisgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCisgICAgcHJlbG9hZD1ubworICAgIHByZXY9CisgICAgcHJldmFyZz0KKyAgICByZWxlYXNlPQorICAgIHJwYXRoPQorICAgIHhycGF0aD0KKyAgICBwZXJtX3JwYXRoPQorICAgIHRlbXBfcnBhdGg9CisgICAgdGhyZWFkX3NhZmU9bm8KKyAgICB2aW5mbz0KKyAgICB2aW5mb19udW1iZXI9bm8KKyAgICB3ZWFrX2xpYnM9CisgICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCWNhc2UgJHByZXYgaW4KKwlvdXRwdXQpCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcHJldiBpbgorCWJpbmRpcikKKwkgIGJpbmRpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlkbGZpbGVzfGRscHJlZmlsZXMpCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9eWVzCisJICBmaQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWV4cHN5bXMpCisJICBleHBvcnRfc3ltYm9scz0iJGFyZyIKKwkgIHRlc3QgLWYgIiRhcmciIFwKKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZnJhbWV3b3JrKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgICAqLSotZGFyd2luKikKKwkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisJCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OworCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorCQkgICA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgZXNhYworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWluc3RfcHJlZml4KQorCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9iamVjdGxpc3QpCisJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorCSAgICBzYXZlX2FyZz0kYXJnCisJICAgIG1vcmVhcmdzPQorCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisJICAgIGRvCisjCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKKwkgICAgICBhcmc9JGZpbAorCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJCXBpY19vYmplY3Q9CisJCW5vbl9waWNfb2JqZWN0PQorCisJCSMgUmVhZCB0aGUgLmxvIGZpbGUKKwkJZnVuY19zb3VyY2UgIiRhcmciCisKKwkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCXhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSIkcGljX29iamVjdCIKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGZpCisJCWVsc2UKKwkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCSAgZnVuY19sbzJvICIkYXJnIgorCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgICAgICBlbHNlCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgZmkKKwkgIGFyZz0kc2F2ZV9hcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlwcmVjaW91c19yZWdleCkKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJlbGVhc2UpCisJICByZWxlYXNlPSItJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlycGF0aCB8IHhycGF0aCkKKwkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCSAgY2FzZSAkYXJnIGluCisJICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisJICAgIGNhc2UgIiRycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZWxzZQorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWJpbmRpcikKKwlwcmV2PWJpbmRpcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorCSAgZmkKKwlmaQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQorCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cworCSAgOzsKKwkqKQorCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworCSAgY2FzZSAkZGlyIGluCisJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCisJICA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbCopCisJaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbW9kdWxlKQorCW1vZHVsZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisgICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQorCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW11bHRpX21vZHVsZSkKKwlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tZmFzdC1pbnN0YWxsKQorCWZhc3RfaW5zdGFsbD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWluc3RhbGwpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCisJICBmdW5jX3dhcm5pbmcgIlxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgorCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisJICBmYXN0X2luc3RhbGw9bm8KKwkgIDs7CisJKikgbm9faW5zdGFsbD15ZXMgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tdW5kZWZpbmVkKQorCWFsbG93X3VuZGVmaW5lZD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9iamVjdGxpc3QpCisJcHJldj1vYmplY3RsaXN0CisJY29udGludWUKKwk7OworCisgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKworICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQorCXByZXY9cHJlY2lvdXNfcmVnZXgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1yZWxlYXNlKQorCXByZXY9cmVsZWFzZQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJwYXRoKQorCXByZXY9cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKQorCXByZXY9eHJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUiopCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwk9KikKKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24taW5mbykKKwlwcmV2PXZpbmZvCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtV2wsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVhjb21waWxlcikKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhsaW5rZXIpCisJcHJldj14bGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAtWENDbGlua2VyKQorCXByZXY9eGNjbGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCisgICAgICAtbXNnXyopCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAorICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2luKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKyAgICAgIC0qIHwgKyopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgKi4kb2JqZXh0KQorCSMgQSBzdGFuZGFyZCBvYmplY3QuCisJZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCisJOzsKKworICAgICAgKi5sbykKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorCQlwcmV2PQorCQljb250aW51ZQorCSAgICAgIGVsc2UKKwkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJcHJldj1kbHByZWZpbGVzCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKwkgICAgICBwcmV2PQorCSAgICBmaQorCisJICAgICMgQSBQSUMgb2JqZWN0LgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGFyZz0iJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIE5vbi1QSUMgb2JqZWN0LgorCSAgaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgICBmdW5jX2xvMm8gIiRhcmciCisJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi4kbGliZXh0KQorCSMgQW4gYXJjaGl2ZS4KKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgorCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBwcmV2PQorCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgcHJldj0KKwllbHNlCisJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKyAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisKKyAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAiIikKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIKKyAgICAgIDs7CisgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKyAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKKyAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorICAgIGVzYWMKKworICAgIHNwZWNpYWxkZXBsaWJzPQorCisgICAgbGlicz0KKyAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKKyAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwljYXNlICIkbGlicyAiIGluCisJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKKworICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKKyAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCisJZG9uZQorICAgICAgZmkKKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgZmkKKworICAgIGRlcGxpYnM9CisgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBsaWIpCisJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgorCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbworCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5sYSkgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1ubworCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCisJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisgICAgICAgIHRtcF9kZXBsaWJzPQorCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgorCWxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKKwlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixkbHByZW9wZW4iOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9IiRkbHByZWZpbGVzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKKwlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorCisgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbworCWxpYj0KKwlmb3VuZD1ubworCWNhc2UgJGRlcGxpYiBpbgorCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAorICAgICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1sKikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBlbHNlCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBmaQorCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KKwkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisJICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisJCSAgZm91bmQ9eWVzCisJCWVsc2UKKwkJICBmb3VuZD1ubworCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikKKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgorCQkgIGxpYnJhcnlfbmFtZXM9CisJCSAgb2xkX2xpYnJhcnk9CisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCisJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgbGw9IiRsIgorCQkgIGRvbmUKKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9bm8KKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGZpCisJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgICA7OworCSAgKikKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpCisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICA7OworCSouJGxpYmV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICAjIExpbmtpbmcgY29udmVuaWVuY2UgbW9kdWxlcyBpbnRvIHNoYXJlZCBsaWJyYXJpZXMgaXMgYWxsb3dlZCwKKwkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KKwkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCisJICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICopCisJICAgICAgdmFsaWRfYV9saWI9bm8KKwkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCQltYXRjaF9wYXR0ZXJuKikKKwkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkJICBpZiBldmFsICJcJEVDSE8gXCIkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKwkJZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIDs7ICMgKi4kbGliZXh0CisJKi5sbyB8ICouJG9iamV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKwkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJJURFUExJQlMlKQorCSAgYWxsZGVwbGlicz15ZXMKKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMgIyBjYXNlICRkZXBsaWIKKworCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgorCWVsc2UKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGxpYiIgXAorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCWxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWRsbmFtZT0KKwlkbG9wZW49CisJZGxwcmVvcGVuPQorCWxpYmRpcj0KKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCWluaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisJIyBJZiB0aGUgbGlicmFyeSB3YXMgaW5zdGFsbGVkIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YgbGlidG9vbCwKKwkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKKwlpbnN0YWxsZWQ9eWVzCisJc2hvdWxkbm90bGluaz1ubworCWF2b2lkdGVtcHJwYXRoPQorCisKKwkjIFJlYWQgdGhlIC5sYSBmaWxlCisJZnVuY19zb3VyY2UgIiRsaWIiCisKKwkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorCWlmIHRlc3QgLW4gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIjsgdGhlbgorCSAgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzLy1mcmFtZXdvcmsgXChbXiAkXSpcKS9cMS5sdGZyYW1ld29yay9nJ2AKKwkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKwkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIgJGRlcGVuZGVuY3lfbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgorCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCisJZmkKKworCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICMgT25seSBjaGVjayBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisJICBmaQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisJICBkb25lCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKwkgICB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0geWVzIHx8CisJICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgorCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKwllbHNlCisJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIGxpbmtsaWI9IiRsIgorCSAgZG9uZQorCWZpCisJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwlmaQorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKKwkgICAgIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCisJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CisJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgIGVsc2UKKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorCSAgZmkKKwkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorCSAgZmkKKwlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGNhc2UgIiRob3N0IiBpbgorCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgTGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcnkgaWYgYm90aAorCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0CisJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorCSAgICAgICMgKG90aGVyd2lzZSwgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSB3aWxsIGJlIGluY29ycmVjdCkuICBXZSBkbworCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCisJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKwkgICAgICAjIG5hbWUgaW4gYSBzcGVjaWFsIHB1cnBvc2UgdmFyaWFibGUsIGFuZCAobGF0ZXIpIGV4dHJhY3RpbmcgdGhlCisJICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRpci8kbGlua2xpYiIKKwkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICBmaQorCSAgICA7OworCSAgICAqICkKKwkgICAgICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisJICAgICAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgorCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKworCSAgbGlua2FsbGRlcGxpYnM9bm8KKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubyB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgbGlua2FsbGRlcGxpYnM9eWVzCisJICBmaQorCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgICAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCQkgOzsKKwkgICAgZXNhYworCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CisJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKwkgIGRvbmUgIyBmb3IgZGVwbGliCisJICBjb250aW51ZQorCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8CisJICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz1ubworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9eWVzCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCisJICBkbG9wZW5tb2R1bGU9IiIKKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgorCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQorCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwkgICAgc2hpZnQKKwkgICAgcmVhbG5hbWU9IiQxIgorCSAgICBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgc29uYW1lPSIkZGxuYW1lIgorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJdmVyc3VmZml4PSItJG1ham9yIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCisJICAgIHNvbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCisKKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisKKwkgICAgIyBDcmVhdGUgJG5ld2xpYgorCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICBsaWJfbGlua2VkPXllcworCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KKwkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJCWNhc2UgJGhvc3QgaW4KKwkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAorCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotZGFyd2luKiApCisJCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90CisJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncworCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KKwkJCSAgZWNobworCQkJICBlY2hvICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCisJCQllbHNlCisJCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCWVzYWMKKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCQlhZGRfZGlyPSItTCRhYnNkaXIiCisJCSMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJICBjYXNlICRsaWJkaXIgaW4KKwkJICAgIFtcXC9dKikKKwkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikgbGliX2xpbmtlZD1ubyA7OworCSAgICBlc2FjCisKKwkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIiA7IHRoZW4KKwkJYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJCWFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCWNhc2UgJGxpYmRpciBpbgorCQkgIFtcXC9dKikKKwkJICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgIGVjaG8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQllY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CisJCSAgIGVzYWM7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGFic2RpciIKKwkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBjYXNlICRkZXBsaWIgaW4KKyAgICAgICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CisgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OworICAgICAgICAgICAgZXNhYworCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKyAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgcGF0aD0KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkJY2FzZSAkZGlyIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJCSAgICBhYnNkaXI9IiRkaXIiCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgZGVwZGVwbD0KKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiIDsgdGhlbgorCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisJCSAgICAgIGRlcGRlcGw9JHRtcAorCQkgICAgZG9uZQorCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIiA7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0iJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIgorCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MfSAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIHBhdGg9CisJCSAgICBmaQorCQkgIGZpCisJCSAgOzsKKwkJKikKKwkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKKwkJICA7OworCQllc2FjCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPSItTCRhYnNkaXIiCisJCWZpCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmkKKyAgICAgIGZpCisgICAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCisJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbworCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwlkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiICE9IGRsb3BlbjsgdGhlbgorCWlmIHRlc3QgIiRwYXNzIiAhPSBjb252OyB0aGVuCisJICAjIE1ha2Ugc3VyZSBsaWJfc2VhcmNoX3BhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICBsaWJfc2VhcmNoX3BhdGg9CisJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCisJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9CisJZmkKKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgIT0gInByb2csbGluayI7IHRoZW4KKwkgIHZhcnM9ImRlcGxpYnMiCisJZWxzZQorCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCisJZmkKKwlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKKwkgIGV2YWwgdG1wX2xpYnM9XCJcJCR2YXJcIgorCSAgbmV3X2xpYnM9CisJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKwkgICAgIyBGSVhNRTogUGVkYW50aWNhbGx5LCB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgc28KKwkgICAgIyAgICAgICAgdGhhdCBzb21lIG5hc3R5IGRlcGVuZGVuY3kgbG9vcCBpc24ndCBhY2NpZGVudGFsbHkKKwkgICAgIyAgICAgICAgYnJva2VuOgorCSAgICAjbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIgorCSAgICAjIFByYWdtYXRpY2FsbHksIHRoaXMgc2VlbXMgdG8gY2F1c2UgdmVyeSBmZXcgcHJvYmxlbXMgaW4KKwkgICAgIyBwcmFjdGljZToKKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAtUiopIDs7CisJICAgICopCisJICAgICAgIyBBbmQgaGVyZSBpcyB0aGUgcmVhc29uOiB3aGVuIGEgbGlicmFyeSBhcHBlYXJzIG1vcmUKKwkgICAgICAjIHRoYW4gb25jZSBhcyBhbiBleHBsaWNpdCBkZXBlbmRlbmNlIG9mIGEgbGlicmFyeSwgb3IKKwkgICAgICAjIGlzIGltcGxpY2l0bHkgbGlua2VkIGluIG1vcmUgdGhhbiBvbmNlIGJ5IHRoZQorCSAgICAgICMgY29tcGlsZXIsIGl0IGlzIGNvbnNpZGVyZWQgc3BlY2lhbCwgYW5kIG11bHRpcGxlCisJICAgICAgIyBvY2N1cnJlbmNlcyB0aGVyZW9mIGFyZSBub3QgcmVtb3ZlZC4gIENvbXBhcmUgdGhpcworCSAgICAgICMgd2l0aCBoYXZpbmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0ZWQgYXMgYQorCSAgICAgICMgZGVwZW5kZW5jeSBvZiBtdWx0aXBsZSBvdGhlciBsaWJyYXJpZXM6IGluIHRoaXMgY2FzZSwKKwkgICAgICAjIHdlIGtub3cgKHBlZGFudGljYWxseSwgd2UgYXNzdW1lKSB0aGUgbGlicmFyeSBkb2VzIG5vdAorCSAgICAgICMgbmVlZCB0byBiZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIGtlZXAgb25seSB0aGUKKwkgICAgICAjIGxhc3QgY29weS4gIFRoaXMgaXMgbm90IGFsd2F5cyByaWdodCwgYnV0IGl0IGlzIHJhcmUKKwkgICAgICAjIGVub3VnaCB0aGF0IHdlIHJlcXVpcmUgdXNlcnMgdGhhdCByZWFsbHkgbWVhbiB0byBwbGF5CisJICAgICAgIyBzdWNoIHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8gbGluayB0aGUgbGlicmFyeQorCSAgICAgICMgdXNpbmcgLVdsLC1sbmFtZSwgc28gdGhhdCBsaWJ0b29sIGRvZXMgbm90IGNvbnNpZGVyIGl0CisJICAgICAgIyBmb3IgZHVwbGljYXRlIHJlbW92YWwuCisJICAgICAgY2FzZSAiICRzcGVjaWFsZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAgICopCisJCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCQkqIiAkZGVwbGliICIqKSA7OworCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJCWVzYWMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRuZXdfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikKKwkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorCWRvbmUgIyBmb3IgdmFyCisgICAgICBmaQorICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKyAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQorICAgICAgdG1wX2xpYnM9CisgICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzIDsgZG8KKwljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgorCSoiICRpICIqKQorCSAgaT0iIgorCSAgOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworICAgIGRvbmUgIyBmb3IgcGFzcworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgICAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorICAgIGZpCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIG9sZGxpYikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKKyAgICAgIGVzYWMKKworICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgb2xkbGlicz0iJG91dHB1dCIKKyAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKKyAgICAgIDs7CisKKyAgICBsaWIpCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSBgbGliTkFNRS5sYScuCisgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCisgICAgICBsaWIqKQorCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCTs7CisgICAgICAqKQorCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIgorCisJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKwkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwkgIGV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCWVsc2UKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIGxpYm5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCisJaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCisJZWxzZQorCSAgZWNobworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIHRlc3QgIiRkbHNlbGYiICE9IG5vICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKKworICAgICAgc2V0IGR1bW15ICRycGF0aAorICAgICAgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKworICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorCisgICAgICBvbGRsaWJzPQorICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSBgLmFsJyBleHRlbnNpb24gc28KKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgorCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgorCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQorCSAgYnVpbGRfb2xkX2xpYnM9eWVzCisJZmkKKworCXRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisKKwl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlzaGlmdAorCUlGUz0iJHNhdmVfaWZzIgorCisJdGVzdCAtbiAiJDciICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIgorCisJIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKKwkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cworCSMgdG8gbWFrZSB0aGUgY29kZSBiZWxvdyBhIGJpdCBtb3JlIGNvbXByZWhlbnNpYmxlCisKKwljYXNlICR2aW5mb19udW1iZXIgaW4KKwl5ZXMpCisJICBudW1iZXJfbWFqb3I9IiQxIgorCSAgbnVtYmVyX21pbm9yPSIkMiIKKwkgIG51bWJlcl9yZXZpc2lvbj0iJDMiCisJICAjCisJICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAorCSAgIyB1c2UgdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMgdGhlIG1ham9yIHZlcnNpb24KKwkgICMgYW5kIHRob3NlIHRoYXQgc3VidHJhY3QgYWdlIGFuZCB1c2UgYWdlIGFzCisJICAjIGEgbWlub3IgdmVyc2lvbi4gIEJ1dCwgdGhlbiB0aGVyZSBpcyBpcml4CisJICAjIHdoaWNoIGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgorCSAgIworCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICAjIGNvcnJlY3QgbGludXggdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8cW54fHN1bm9zKQorCSAgICBjdXJyZW50PSIkbnVtYmVyX21ham9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgYWdlPSIwIgorCSAgICA7OworCSAgaXJpeHxub25zdG9wdXgpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgbHRfaXJpeF9pbmNyZW1lbnQ9bm8KKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJbm8pCisJICBjdXJyZW50PSIkMSIKKwkgIHJldmlzaW9uPSIkMiIKKwkgIGFnZT0iJDMiCisJICA7OworCWVzYWMKKworCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCisJY2FzZSAkY3VycmVudCBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCWZpCisKKwkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCisJbWFqb3I9CisJdmVyc3VmZml4PQorCXZlcnN0cmluZz0KKwljYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwlub25lKSA7OworCisJZGFyd2luKQorCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgorCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgeGxjdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJaXJpeCB8IG5vbnN0b3B1eCkKKwkgIGlmIHRlc3QgIlgkbHRfaXJpeF9pbmNyZW1lbnQiID0gIlhubyI7IHRoZW4KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIGVsc2UKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCisJICBmaQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKKwkgIGVzYWMKKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kcmV2aXNpb24KKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgOzsKKworCWxpbnV4KSAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlvc2YpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKKwkgIDs7CisKKwlxbngpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCXdpbmRvd3MpCisJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCisJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSItJG1ham9yIgorCSAgOzsKKworCSopCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgIDs7CisJZXNhYworCisJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKwlpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgbWFqb3I9CisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPQorCSAgICA7OworCSAgKikKKwkgICAgdmVyc3RyaW5nPSIwLjAiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICAgIHZlcnN1ZmZpeD0KKwkgIGVsc2UKKwkgICAgdmVyc3VmZml4PSIuMC4wIgorCSAgZmkKKwlmaQorCisJIyBSZW1vdmUgdmVyc2lvbiBpbmZvIGZyb20gbmFtZSBpZiB2ZXJzaW9uaW5nIHNob3VsZCBiZSBhdm9pZGVkCisJaWYgdGVzdCAiJGF2b2lkX3ZlcnNpb24iID0geWVzICYmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgIG1ham9yPQorCSAgdmVyc3VmZml4PQorCSAgdmVyc3RyaW5nPSIiCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKwlpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKKwkgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgZmkKKwllbHNlCisJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKKwlmaQorCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKwlyZW1vdmVsaXN0PQorCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCisJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworCSAgY2FzZSAkcCBpbgorCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCisJICAgICAgIDs7CisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCisJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkJIHRoZW4KKwkJICAgY29udGludWUKKwkJIGZpCisJICAgICAgIGZpCisJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKKwkgICAgICAgOzsKKwkgICAgKikgOzsKKwkgIGVzYWMKKwlkb25lCisJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgorICAgICAgZmkKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIkZGVwZW5kZW5jeV9saWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgI2RvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKKworCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KKwluYW1lX3NhdmU9JG5hbWUKKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKwlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKKwl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CisJbWFqb3Jfc2F2ZT0kbWFqb3IKKwkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluaworCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bworCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworCXJlbGVhc2U9IiIKKwl2ZXJzdWZmaXg9IiIKKwltYWpvcj0iIgorCW5ld2RlcGxpYnM9CisJZHJvcHBlZGRlcHM9bm8KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCXBhc3NfYWxsKQorCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCisJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisJICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCisJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYworCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCisJICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICoiICRpICIqKQorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgaT0iIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICBkZXBsaWJfbWF0Y2g9JDEKKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICBlY2hvCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKKwkJICAgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCisJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgorCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAgICoiICRpICIqKQorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICAgIGk9IiIKKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICAgIGRlcGxpYl9tYXRjaD0kMQorCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICBlY2hvCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgZWNobworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaQorCSAgOzsKKwlmaWxlX21hZ2ljKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCisJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKKwkJZWxzZQorCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCisJCWZpCisJCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisJCSAgICBzaG9wdCAtcyBub2Nhc2VnbG9iCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgICAkbm9jYXNlZ2xvYgorCQkgIGVsc2UKKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmaQorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KKwkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiIC0+ICIgPi9kZXYvbnVsbDsgdGhlbgorCQkJY29udGludWUKKwkJICAgICAgZmkKKwkJICAgICAgIyBUaGUgc3RhdGVtZW50IGFib3ZlIHRyaWVzIHRvIGF2b2lkIGVudGVyaW5nIGFuCisJCSAgICAgICMgZW5kbGVzcyBsb29wIGJlbG93LCBpbiBjYXNlIG9mIGN5Y2xpYyBsaW5rcy4KKwkJICAgICAgIyBXZSBtaWdodCBzdGlsbCBlbnRlciBhbiBlbmRsZXNzIGxvb3AsIHNpbmNlIGEgbGluaworCQkgICAgICAjIGxvb3AgY2FuIGJlIGNsb3NlZCB3aGlsZSB3ZSBmb2xsb3cgbGlua3MsCisJCSAgICAgICMgYnV0IHNvIHdoYXQ/CisJCSAgICAgIHBvdGxpYj0iJHBvdGVudF9saWIiCisJCSAgICAgIHdoaWxlIHRlc3QgLWggIiRwb3RsaWIiIDI+L2Rldi9udWxsOyBkbworCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAke1NFRH0gJ3MvLiogLT4gLy8nYAorCQkJY2FzZSAkcG90bGlibGluayBpbgorCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9IiRwb3RsaWJsaW5rIjs7CisJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJZXNhYworCQkgICAgICBkb25lCisJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisJCQkgJFNFRCAtZSAxMHEgfAorCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKKwkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW5vbmUgfCB1bmtub3duIHwgKikKKwkgIG5ld2RlcGxpYnM9IiIKKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzLCRpLCwiYAorCSAgICBkb25lCisJICBmaQorCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKwkgICpbIVwJXCBdKikKKwkgICAgZWNobworCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgIGVsc2UKKwkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKwkgICAgZHJvcHBlZGRlcHM9eWVzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCisJbWFqb3I9JG1ham9yX3NhdmUKKwlyZWxlYXNlPSRyZWxlYXNlX3NhdmUKKwlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKKwluYW1lPSRuYW1lX3NhdmUKKworCWNhc2UgJGhvc3QgaW4KKwkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgZWNobworCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKKwkgICAgZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgICAgIGVjaG8KKwkgICAgICBlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICBlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgIGVsc2UKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorCisJICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0gbm87IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJIyBSZW1vdmUgJHt3bH0gaW5zdGFuY2VzIHdoZW4gbGlua2luZyB3aXRoIGxkLgorCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KKwljYXNlICRhcmNoaXZlX2NtZHMgaW4KKwkgICpcJExEXCAqKSB3bD0gOzsKKyAgICAgICAgZXNhYworCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKwl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KKwkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKwlmaQorCisJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwlzaGlmdAorCXJlYWxuYW1lPSIkMSIKKwlzaGlmdAorCisJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCWVsc2UKKwkgIHNvbmFtZT0iJHJlYWxuYW1lIgorCWZpCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgIGRsbmFtZT0kc29uYW1lCisJZmkKKworCWxpYj0iJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lIgorCWxpbmtuYW1lcz0KKwlmb3IgbGluaworCWRvCisJICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKKwlkb25lCisKKwkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKwl0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisJZGVsZmlsZXM9CisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKwlmaQorCisJb3JpZ19leHBvcnRfc3ltYm9scz0KKwljYXNlICRob3N0X29zIGluCisJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKwkgICAgaWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiICE9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgIyBhbmQgaXQncyBOT1QgYWxyZWFkeSBhIC5kZWYgZmlsZS4gTXVzdCBmaWd1cmUgb3V0CisJICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKKwkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCisJICAgICAgIyBleHBvcnRfc3ltYm9scyBnZXRzIHJlYXNzaWduZWQgaW5zaWRlIHRoZSAicHJlcGFyZQorCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKKwkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KKwkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9CisJICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCSAgICBmaQorCSAgZmkKKwkgIDs7CisJZXNhYworCisJIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwlpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICBpZiB0ZXN0ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiA9IHllcyB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICMgVGFrZSB0aGUgbm9ybWFsIGJyYW5jaCBpZiB0aGUgbm1fZmlsZV9saXN0X3NwZWMgYnJhbmNoCisJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKwkJKn5mdW5jX2NvbnZlcnRfZmlsZV9ub29wIHwgKn5mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiB8IH4qKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorCQkgIGZ1bmNfbGVuICIgJGNtZCIKKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCQkgIDs7CisJCSopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKwkJICAgICAgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IH0KKwkgICAgICB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkJb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorCQlvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubm0KKwkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCQlmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkJZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzOyBkbworCQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCQlkb25lID4gIiRvdXRwdXQiCisJCWV2YWwgY21kPVwiJGNtZDFcIgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCW91dHB1dD0kc2F2ZV9vdXRwdXQKKwkJbGlib2Jqcz0kc2F2ZV9saWJvYmpzCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxzZQorCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkJZnVuY192ZXJib3NlICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkJc2tpcHBlZF9leHBvcnQ9OgorCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQorCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KKwkJYnJlYWsKKwkgICAgICBmaQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwlmaQorCisJdG1wX2RlcGxpYnM9CisJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgorCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KKwkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCisJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZWxzZQorCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJZmkKKworCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgZmkKKwllbHNlCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIDoKKwllbHNlCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCisKKwkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCisJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKwkgICMgd2FudCB0byB1c2Ugc2F2ZV9saWJvYmpzIGFzIGl0IHdhcyBiZWZvcmUKKwkgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgd2FzIGV4cGFuZGVkLCBiZWNhdXNlIHdlIGNhbid0CisJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorCSAgIyBUaGlzIG1heSBoYXZlIHRvIGJlIHJldmlzaXRlZCwgaW4gY2FzZSB0b28gbWFueQorCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgZ2V0IGxpbmtlZCBpbiBhbmQgZW5kIHVwIGV4Y2VlZGluZworCSAgIyB0aGUgc3BlYy4KKwkgIGlmIHRlc3QgLXogIiRjb252ZW5pZW5jZSIgfHwgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgIGZpCisJICBzYXZlX291dHB1dD0kb3V0cHV0CisJICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCSAgb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CisJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZWNobyAnKScgPj4gJG91dHB1dAorCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGxpbmtlciBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJICAgIDogPiAkb3V0cHV0CisJICAgIHNldCB4ICRzYXZlX2xpYm9ianMKKwkgICAgc2hpZnQKKwkgICAgZmlyc3RvYmo9CisJICAgIGlmIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzOyB0aGVuCisJICAgICAgZmlyc3RvYmo9IiQxICIKKwkgICAgICBzaGlmdAorCSAgICBmaQorCSAgICBmb3Igb2JqCisJICAgIGRvCisJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCQkgIGVsc2UKKwkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkJICBmaQorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIGZ1bmNfYXJpdGggJGsgKyAxCisJCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBvYmpsaXN0PSIgJG9iaiIKKwkJICBmdW5jX2xlbiAiICRsYXN0X3JvYmoiCisJCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKKwkJICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWZpCisJICAgICAgZG9uZQorCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAorCSAgICAgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0CisJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKworCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQorCisJICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgJG9wdF9zaWxlbnQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisKKyAgICAgICAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICAgICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwkgICAgZmkKKwkgIGZpCisKKwkgIGxpYm9ianM9JG91dHB1dAorCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCisJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisKKwkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJZmkKKworCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCWZvciBjbWQgaW4gJGNtZHM7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICAkb3B0X3NpbGVudCB8fCB7CisJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgfQorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkgICAgbHRfZXhpdD0kPworCisJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJICAgIGZpCisKKwkgICAgZXhpdCAkbHRfZXhpdAorCSAgfQorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKworCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSIkc29uYW1lIgorCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisKKwlsaWJvYmo9JG91dHB1dAorCWZ1bmNfbG8ybyAiJGxpYm9iaiIKKwlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwk7OworICAgICAgKikKKwlsaWJvYmo9CisJb2JqPSIkb3V0cHV0IgorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGFuZCBob3BlIHdlIGNhbiBnZXQgYnkgd2l0aAorICAgICAgIyB0dXJuaW5nIGNvbW1hIGludG8gc3BhY2UuLgorICAgICAgd2w9CisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKyAgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBsaWJvYmpzPSIkbm9uX3BpY19vYmplY3RzIgorCisgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCisgICAgICBvdXRwdXQ9IiRvYmoiCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKworICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCisgICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0CisJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KKwkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCisJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgIiRwaWNfbW9kZSIgIT0gZGVmYXVsdDsgdGhlbgorCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCisJcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgorCW91dHB1dD0iJGxpYm9iaiIKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisgICAgICBmaQorCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisKKyAgICBwcm9nKQorICAgICAgY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmV4ZTs7CisgICAgICBlc2FjCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAiJHByZWxvYWQiID0geWVzIFwKKyAgICAgICAgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd24gJiYgXAorCSAgZnVuY193YXJuaW5nICJcYExUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLWRhcndpbiopCisJIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycworCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCisJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorCSAgICAxMC5bMDEyM10pCisJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBlbHNlCisJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKwkgIGZpCisJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCR7RUNIT30gIiRsaWJkaXIiIHwgJHtTRUR9IC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGxpYmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGNvbXBpbGVfcnBhdGg9IiRycGF0aCIKKworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgIm5vIgorCisgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAorICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICB3cmFwcGVyc19yZXF1aXJlZD15ZXMKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpjZWdjYyogfCAqbWluZ3czMmNlKikKKyAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3czMmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgOzsKKyAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisKKwkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KKwlleGl0X3N0YXR1cz0wCisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKKworCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCisJZmkKKworCWV4aXQgJGV4aXRfc3RhdHVzCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBmaQorCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJG5vX2luc3RhbGwiID0geWVzOyB0aGVuCisJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwlsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKwkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgorCSMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCXJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisKKwlmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCWZ1bmNfd2FybmluZyAiXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgIT0gbm87IHRoZW4KKwkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCisJICBlbHNlCisJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcworCSAgICByZWxpbmtfY29tbWFuZD0KKwkgIGZpCisJZWxzZQorCSAgbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJICByZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCWZpCisgICAgICBmaQorCisgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisgICAgICBsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKKwlwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZWxzZQorCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBmaQorCWRvbmUKKwlyZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkcmVsaW5rX2NvbW1hbmQpIgorCXJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZmkKKworICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKKwkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgorCWNhc2UgJG91dHB1dCBpbgorCSAgKi5leGUpIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCWVzYWMKKwkjIHRlc3QgZm9yIGN5Z3dpbiBiZWNhdXNlIG12IGZhaWxzIHcvbyAuZXhlIGV4dGVuc2lvbnMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKikKKwkgICAgZXhlZXh0PS5leGUKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKKwkgICAgb3V0cHV0bmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJICAqKSBleGVleHQ9IDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiApCisJICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvdXRwdXQiICIiICIuIgorCSAgICBvdXRwdXRfbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkgICAgY3dyYXBwZXJzb3VyY2U9IiRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jIgorCSAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCisJICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKKworCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAorCSAgICAjIGJlY2F1c2UgaXQgY29udGFpbnMgJGhvc3QgcGF0aHMgYW5kIGZpbGVzLiBJZiBjcm9zcy0KKwkgICAgIyBjb21waWxpbmcsIGl0LCBsaWtlIHRoZSB0YXJnZXQgZXhlY3V0YWJsZSwgbXVzdCBiZQorCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKKwkgICAgICAkU1RSSVAgJGN3cmFwcGVyCisJICAgIH0KKworCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgorCSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICRjd3JhcHBlcgorCSAgICAkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgorCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCIgOyB0aGVuCisJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZWxzZQorCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZpCisJICAgIH0KKwkgIDs7CisJICAqICkKKwkgICAgJFJNICRvdXRwdXQKKwkgICAgdHJhcCAiJFJNICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CisJICAgIGNobW9kICt4ICRvdXRwdXQKKwkgIDs7CisJZXNhYworICAgICAgfQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgorCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG1vZHVsZTsgdGhlbgorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWVsc2UKKwkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCisJICBmaQorCWZpCisJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCisJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisJICA6CisJZWxzZQorCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICBjb3VudGVyPTEKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgb2JqYmFzZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRnZW50b3AvJG5ld29iaiIKKwkgICAgICA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBmb3Igb2JqIGluICRvbGRvYmpzCisJICBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsc2UKKwkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKwkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KKwkJUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgICAgIGZpCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAorCSAgICBmaQorCSAgZG9uZQorCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisJICBlbHNlCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgorCisgICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgKi5sYSkKKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiBvbGRfbGlicmFyeT0iJGxpYm5hbWUuJGxpYmV4dCIKKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWVsc2UKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgorCXJlbGlua19jb21tYW5kPQorICAgICAgZmkKKworICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbworCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIG91dHB1dD0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiaQorCSAgICAjIFJlcGxhY2UgYWxsIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzIHdpdGggdGhlIGluc3RhbGxlZCBvbmVzCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgICoubGEpCisJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgLUwqKQorCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAtUiopCisJCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgbmV3ZGxmaWxlcz0KKworCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKwkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCisJCSMgdGhlIGxpYnJhcnk6CisJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKKwkgICMgc3lzdGVtcyB0aGF0IGNhbid0IGhhcmQtY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gdGhlaXIgZXhlY3V0YWJsZXMKKwkgICMgYW5kIHRoYXQgaGF2ZSBubyBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlIGluZGVwZW5kZW50IG9mIFBBVEgsCisJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZworCSAgIyBsaWJ0b29sIHZhcmlhYmxlcywgc28gd2UgaGF2ZSB0byBoYXJkLWNvZGUgdGhlIE9TcyB0byB3aGljaCBpdAorCSAgIyBhcHBsaWVzIGhlcmU7IGF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBQRQorCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorCSAgIyB0ZXN0cy9iaW5kaXIuYXQgZm9yIGZ1bGwgZGV0YWlscy4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCisJICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgorCSAgICAgIGlmIHRlc3QgIngkYmluZGlyIiAhPSB4IDsKKwkgICAgICB0aGVuCisJCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKKwkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCRkbG5hbWUKKwkgICAgICBlbHNlCisJCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCisJCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKKwkgICAgICBmaQorCSAgICAgIDs7CisJICBlc2FjCisJICAkRUNITyA+ICRvdXRwdXQgIlwKKyMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorZGxuYW1lPSckdGRsbmFtZScKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgoraW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJworCisjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KK2RlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKKworIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQord2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJworCisjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgorY3VycmVudD0kY3VycmVudAorYWdlPSRhZ2UKK3JldmlzaW9uPSRyZXZpc2lvbgorCisjIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KK2luc3RhbGxlZD0kaW5zdGFsbGVkCisKKyMgU2hvdWxkIHdlIHdhcm4gYWJvdXQgcG9ydGFiaWxpdHkgd2hlbiBsaW5raW5nIGFnYWluc3QgLW1vZHVsZXM/CitzaG91bGRub3RsaW5rPSRtb2R1bGUKKworIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCitkbG9wZW49JyRkbGZpbGVzJworZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKKworIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgorbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgorCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCisJICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisJICBmaQorCWRvbmUKKyAgICAgIH0KKworICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KKyAgICAgIGZ1bmNfc2hvd19ldmFsICcoIGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkb3V0cHV0bmFtZSIgJiYgJExOX1MgIi4uLyRvdXRwdXRuYW1lIiAiJG91dHB1dG5hbWUiICknICdleGl0ICQ/JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3sgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgorICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV91bmluc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgUk09IiRub25vcHQiCisgICAgZmlsZXM9CisgICAgcm1mb3JjZT0KKyAgICBleGl0X3N0YXR1cz0wCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisgICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKworICAgIHJtZGlycz0KKworICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCisJb2Rpcj0iJG9iamRpciIKKyAgICAgIGVsc2UKKwlvZGlyPSIkZGlyLyRvYmpkaXIiCisgICAgICBmaQorICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCisKKyAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2RpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OworCWVzYWMKKyAgICAgIGZpCisKKyAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBybWZpbGVzPSIkZmlsZSIKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKwkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCisKKwkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgorCSAgICAqIiAkZGxuYW1lICIqKSA7OworCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCisJICAgIDs7CisJICB1bmluc3RhbGwpCisJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKwkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCisJICAgIDs7CisJICBlc2FjCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqKQorCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KKwkgIG5vZXhlbmFtZT0kbmFtZQorCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgorCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KKwkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAgIGVsc2UKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKKwkgICAgZmkKKworCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQorCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcworCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICBkb25lCisKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKyAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCisgICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKK30KKworeyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisKK3Rlc3QgLXogIiRvcHRfbW9kZSIgJiYgeworICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKworaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKKyAgZXhpdCAkRVhJVF9GQUlMVVJFCitmaQorCitleGl0ICRleGl0X3N0YXR1cworCisKKyMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCisjIGluIHdoaWNoIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZworIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKKyMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCisjIHRoZSB1c2VyIGFza2VkIGZvciB0aGF0IG9yIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydAorIyB0aGVtLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIEFJWCwgYmVjYXVzZSB3ZSBkb24ndAorIyBzdXBwb3J0IGhhdmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGF0IHRoZSBzYW1lCisjIHRpbWUgb24gdGhhdCBwbGF0Zm9ybSwgc28gd2UgZGVmYXVsdCB0byBhIHNoYXJlZC1vbmx5IGNvbmZpZ3VyYXRpb24uCisjIElmIGEgZGlzYWJsZS1zaGFyZWQgdGFnIGlzIGdpdmVuLCB3ZSdsbCBmYWxsYmFjayB0byBhIHN0YXRpYy1vbmx5CisjIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorYnVpbGRfbGlidG9vbF9saWJzPW5vCitidWlsZF9vbGRfbGlicz15ZXMKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKK2J1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6c2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOjIKKyMgRW5kOgorIyB2aTpzdz0yCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY2hlY2tfY29tcGlsZXIubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX2NvbXBpbGVyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMWViZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX2NvbXBpbGVyLm00CkBAIC0wLDAgKzEsMTA4IEBACisjCisjICAgIENvcHlyaWdodCAyMDE0LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjIF9BWF9DSEVDS19DT01QSUxFUl9PUFRJT05fV0lUSF9WQVIobGFuZ3VhZ2UsIHZhcmlhYmxlLCBvcHRpb24pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICB2YXJpYWJsZSAtIFRoZSB2YXJpYWJsZSB0byBhZGQgdGhlIGNoZWNrZWQgY29tcGlsZXIgb3B0aW9uIHRvLgorIyAgIG9wdGlvbiAgIC0gVGhlIGNvbXBpbGVyIGZsYWcgdG8gY2hlY2suCisjCisjIEFkZCwgaWYgc3VwcG9ydGVkLCB0aGUgc3BlY2lmaWVkIGNvbXBpbGVyIGZsYWcgZm9yIHRoZSBjb21waWxlciBzZWxlY3RlZAorIyBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSB0byB0aGUgcHJvdmlkZWQgdmFyaWFibGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OX1dJVEhfVkFSXSwKK1sKKyAgICBBQ19MQU5HX1BVU0goJDEpCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBfQUNfTEFORyBjb21waWxlciB1bmRlcnN0YW5kcyAkM10pCisgICAgU0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9JHtfQUNfTEFOR19QUkVGSVhbXUZMQUdTfQorICAgIFNBVkVfJDI9JHskMn0KKyAgICBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSQzCisgICAgQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0iJHtTQVZFX1tdX0FDX0xBTkdfUFJFRklYW11GTEFHU30iOyAkMj0iJHtTQVZFXyQyfSAkMyIsQUNfTVNHX1JFU1VMVChbbm9dKTsgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0ke1NBVkVfW11fQUNfTEFOR19QUkVGSVhbXUZMQUdTfTsgJDI9JHtTQVZFXyQyfSk7CisgICAgdW5zZXQgU0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1MKKyAgICB1bnNldCBTQVZFXyQyCisgICAgQUNfTEFOR19QT1AoJDEpCitdKQorCisjCisjIF9BWF9DSEVDS19DT01QSUxFUl9PUFRJT04obGFuZ3VhZ2UsIG9wdGlvbikKKyMKKyMgICBsYW5ndWFnZSAtIFRoZSBhdXRvY29uZiBsYW5ndWFnZSAoQywgQysrLCBPYmplY3RpdmUgQywgT2JqZWN0aXZlIEMrKywKKyMgICAgICAgICAgICAgIGV0Yy4pLgorIyAgIG9wdGlvbiAgIC0gVGhlIGNvbXBpbGVyIGZsYWcgdG8gY2hlY2suCisjCisjIEFkZCwgaWYgc3VwcG9ydGVkLCB0aGUgc3BlY2lmaWVkIGNvbXBpbGVyIGZsYWcgZm9yIHRoZSBjb21waWxlciBzZWxlY3RlZAorIyBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BWF9DSEVDS19DT01QSUxFUl9PUFRJT05dLAorWworICAgIEFDX0xBTkdfUFVTSCgkMSkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIF9BQ19MQU5HIGNvbXBpbGVyIHVuZGVyc3RhbmRzICQyXSkKKyAgICBTQVZFX1tdX0FDX0xBTkdfUFJFRklYW11GTEFHUz0ke19BQ19MQU5HX1BSRUZJWFtdRkxBR1N9CisgICAgX0FDX0xBTkdfUFJFRklYW11GTEFHUz0kMgorICAgIEFDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7IF9BQ19MQU5HX1BSRUZJWFtdRkxBR1M9IiR7U0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1N9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pOyBfQUNfTEFOR19QUkVGSVhbXUZMQUdTPSR7U0FWRV9bXV9BQ19MQU5HX1BSRUZJWFtdRkxBR1N9KTsKKyAgICB1bnNldCBTQVZFX1tdX0FDX0xBTkdfUFJFRklYW11GTEFHUworICAgIEFDX0xBTkdfUE9QKCQxKQorXSkKKworIworIyBBWF9DSEVDS19DT01QSUxFUl9PUFRJT04obGFuZ3VhZ2UsIFt2YXJpYWJsZSxdIG9wdGlvbikKKyMKKyMgICBsYW5ndWFnZSAtIFRoZSBhdXRvY29uZiBsYW5ndWFnZSAoQywgQysrLCBPYmplY3RpdmUgQywgT2JqZWN0aXZlIEMrKywKKyMgICAgICAgICAgICAgIGV0Yy4pLgorIyAgIHZhcmlhYmxlIC0gSWYgc3VwcGxpZWQsIHRoZSB2YXJpYWJsZSB0byBhZGQgdGhlIGNoZWNrZWQgY29tcGlsZXIgb3B0aW9uCisjICAgICAgICAgICAgICB0by4KKyMgICBvcHRpb24gICAtIFRoZSBjb21waWxlciBmbGFnIHRvIGNoZWNrLgorIworIyBBZGQsIGlmIHN1cHBvcnRlZCwgdGhlIHNwZWNpZmllZCBjb21waWxlciBmbGFnIGZvciB0aGUgY29tcGlsZXIgc2VsZWN0ZWQKKyMgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UsIG9wdGlvbmFsbHkgc2F2aW5nIGl0IHRvIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBWF9DSEVDS19DT01QSUxFUl9PUFRJT05dLAorWworICAgIGlmZWxzZSgkIywKKyAgICAgICAgMywKKyAgICAgICAgW19BWF9DSEVDS19DT01QSUxFUl9PUFRJT05fV0lUSF9WQVIoJDEsICQyLCAkMyldLAorICAgICAgICBbX0FYX0NIRUNLX0NPTVBJTEVSX09QVElPTigkMSwgJDIpXSkKK10pCisKKyMKKyMgQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OUyhsYW5ndWFnZSwgW3ZhcmlhYmxlLF0gb3B0aW9uIC4uLikKKyMKKyMgICBsYW5ndWFnZSAtIFRoZSBhdXRvY29uZiBsYW5ndWFnZSAoQywgQysrLCBPYmplY3RpdmUgQywgT2JqZWN0aXZlIEMrKywKKyMgICAgICAgICAgICAgIGV0Yy4pLgorIyAgIHZhcmlhYmxlIC0gSWYgc3VwcGxpZWQsIHRoZSB2YXJpYWJsZSB0byBhZGQgdGhlIGNoZWNrZWQgY29tcGlsZXIgb3B0aW9uCisjICAgICAgICAgICAgICB0by4KKyMgICBvcHRpb25zICAtIFRoZSBjb21waWxlciBmbGFncyB0byBjaGVjay4KKyMKKyMgQWRkLCBpZiBzdXBwb3J0ZWQsIHRoZSBzcGVjaWZpZWQgY29tcGlsZXIgZmxhZ3MgZm9yIHRoZSBjb21waWxlciBzZWxlY3RlZAorIyBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSwgb3B0aW9uYWxseSBzYXZpbmcgaXQgdG8gdGhlIHNwZWNpZmllZCB2YXJpYWJsZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FYX0NIRUNLX0NPTVBJTEVSX09QVElPTlNdLAorWworICAgIGlmZWxzZSgkIywKKyAgICAgICAgMywKKyAgICAgICAgWworICAgICAgICAgICAgZm9yIGF4X2NvbXBpbGVyX29wdGlvbiBpbiBbJDNdOyBkbworICAgICAgICAgICAgICAgIF9BWF9DSEVDS19DT01QSUxFUl9PUFRJT05fV0lUSF9WQVIoWyQxXSwgWyQyXSwgJGF4X2NvbXBpbGVyX29wdGlvbikKKyAgICAgICAgICAgIGRvbmUKKwldLAorICAgICAgICBbCisgICAgICAgICAgICBmb3IgYXhfY29tcGlsZXJfb3B0aW9uIGluIFskMl07IGRvCisgICAgICAgICAgICAgICAgX0FYX0NIRUNLX0NPTVBJTEVSX09QVElPTihbJDFdLCAkYXhfY29tcGlsZXJfb3B0aW9uKQorICAgICAgICAgICAgZG9uZQorCV0pCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19maWxlLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jaGVja19maWxlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjcwNDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX2ZpbGUubTQKQEAgLTAsMCArMSw0MiBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNC0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIEdOVSBNNCBhdXRvY29uZiBtYWNybyBmb3IgY2hlY2tpbmcgZm9yCisjICAgICAgdGhlIGV4aXN0ZW5jZSBvZiBmaWxlcy4KKyMKKyMgICAgICBUaGUgYXV0b2NvbmYgdmVyc2lvbiBvZiBBQ19DSEVDS19GSUxFIGlzIGFic29sdXRlbHkgYnJva2VuIGluCisjICAgICAgdGhhdCBpdCBjYW5ub3QgY2hlY2sgZm9yIGZpbGVzIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGV2ZW4gdGhvdWdoCisjICAgICAgdGhlIG9ubHkgdGhpbmcgaXQgcmVsaWVzIHVwb24gaXMgYSBzaGVsbCBmaWxlIHJlYWRhYmlsaXR5CisjICAgICAgY2hlY2suCisjCisKKyMgQVhfQ0hFQ0tfRklMRShGSUxFLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIEZJTEUuCitBQ19ERUZVTihbQVhfQ0hFQ0tfRklMRV0sCitbQVNfVkFSX1BVU0hERUYoW2FjX0ZpbGVdLCBbYWNfY3ZfZmlsZV8kMV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yICQxXSwgW2FjX0ZpbGVdLAorW2lmIHRlc3QgLXIgIiQxIjsgdGhlbgorICBBU19WQVJfU0VUKFthY19GaWxlXSwgW3llc10pCitlbHNlCisgIEFTX1ZBUl9TRVQoW2FjX0ZpbGVdLCBbbm9dKQorZmldKQorQVNfVkFSX0lGKFthY19GaWxlXSwgW3llc10sIFskMl0sIFskM10pCitBU19WQVJfUE9QREVGKFthY19GaWxlXSlkbmwKK10pIyBBWF9DSEVDS19GSUxFCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX3ByZXByb2Nlc3Nvci5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY2hlY2tfcHJlcHJvY2Vzc29yLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZmFjOTIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NoZWNrX3ByZXByb2Nlc3Nvci5tNApAQCAtMCwwICsxLDExNiBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBudW1iZXIgb2YgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvcworIyAgICAgIGZvciBjaGVja2luZyBsYW5ndWFnZS1zcGVjaWZpYyBwcmVwcm9jZXNzb3Igb3B0aW9ucy4KKyMKKworIworIyBfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTl9XSVRIX1ZBUihsYW5ndWFnZSwgdmFyaWFibGUsIG9wdGlvbikKKyMKKyMgICBsYW5ndWFnZSAtIFRoZSBhdXRvY29uZiBsYW5ndWFnZSAoQywgQysrLCBPYmplY3RpdmUgQywgT2JqZWN0aXZlIEMrKywKKyMgICAgICAgICAgICAgIGV0Yy4pLgorIyAgIHZhcmlhYmxlIC0gVGhlIHZhcmlhYmxlIHRvIGFkZCB0aGUgY2hlY2tlZCBwcmVwcm9jZXNzb3Igb3B0aW9uIHRvLgorIyAgIG9wdGlvbiAgIC0gVGhlIHByZXByb2Nlc3NvciBmbGFnIHRvIGNoZWNrLgorIworIyBBZGQsIGlmIHN1cHBvcnRlZCwgdGhlIHNwZWNpZmllZCBwcmVwcm9jZXNzb3IgZmxhZyBmb3IgdGhlIHByZXByb2Nlc3NvcgorIyBzZWxlY3RlZCBmb3IgdGhlIHNwZWNpZmllZCBsYW5ndWFnZSB0byB0aGUgcHJvdmlkZWQgdmFyaWFibGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTl9XSVRIX1ZBUl0sCitbCisgICAgQUNfTEFOR19QVVNIKCQxKQorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgX0FDX0xBTkcgcHJlcHJvY2Vzc29yIHVuZGVyc3RhbmRzICQzXSkKKyAgICBTQVZFX0NQUEZMQUdTPSR7Q1BQRkxBR1N9CisgICAgU0FWRV8kMj0keyQyfQorICAgIENQUEZMQUdTPSQzCisgICAgQUNfVFJZX0NQUCgsQUNfTVNHX1JFU1VMVChbeWVzXSk7IENQUEZMQUdTPSIke1NBVkVfQ1BQRkxBR1N9IjsgJDI9IiR7U0FWRV8kMn0gJDMiLEFDX01TR19SRVNVTFQoW25vXSk7IENQUEZMQUdTPSR7U0FWRV9DUFBGTEFHU307ICQyPSR7U0FWRV8kMn0pOworICAgIHVuc2V0IFNBVkVfQ1BQRkxBR1MKKyAgICB1bnNldCBTQVZFXyQyCisgICAgQUNfTEFOR19QT1AoJDEpCitdKQorCisjCisjIF9BWF9DSEVDS19QUkVQUk9DRVNTT1JfT1BUSU9OKGxhbmd1YWdlLCBvcHRpb24pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICBvcHRpb24gICAtIFRoZSBwcmVwcm9jZXNzb3IgZmxhZyB0byBjaGVjay4KKyMKKyMgQWRkLCBpZiBzdXBwb3J0ZWQsIHRoZSBzcGVjaWZpZWQgcHJlcHJvY2Vzc29yIGZsYWcgZm9yIHRoZSBwcmVwcm9jZXNzb3IKKyMgc2VsZWN0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTl0sCitbCisgICAgQUNfTEFOR19QVVNIKCQxKQorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgX0FDX0xBTkcgcHJlcHJvY2Vzc29yIHVuZGVyc3RhbmRzICQyXSkKKyAgICBTQVZFX0NQUEZMQUdTPSR7Q1BQRkxBR1N9CisgICAgQ1BQRkxBR1M9JDIKKyAgICBBQ19UUllfQ1BQKCxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQ1BQRkxBR1M9IiR7U0FWRV9DUFBGTEFHU30gJDIiLEFDX01TR19SRVNVTFQoW25vXSk7IENQUEZMQUdTPSR7U0FWRV9DUFBGTEFHU30pOworICAgIHVuc2V0IFNBVkVfQ1BQRkxBR1MKKyAgICBBQ19MQU5HX1BPUCgkMSkKK10pCisKKyMKKyMgQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTihsYW5ndWFnZSwgW3ZhcmlhYmxlLF0gb3B0aW9uKQorIworIyAgIGxhbmd1YWdlIC0gVGhlIGF1dG9jb25mIGxhbmd1YWdlIChDLCBDKyssIE9iamVjdGl2ZSBDLCBPYmplY3RpdmUgQysrLAorIyAgICAgICAgICAgICAgZXRjLikuCisjICAgdmFyaWFibGUgLSBJZiBzdXBwbGllZCwgdGhlIHZhcmlhYmxlIHRvIGFkZCB0aGUgY2hlY2tlZCBwcmVwcm9jZXNzb3Igb3B0aW9uCisjICAgICAgICAgICAgICB0by4KKyMgICBvcHRpb24gICAtIFRoZSBwcmVwcm9jZXNzb3IgZmxhZyB0byBjaGVjay4KKyMKKyMgQWRkLCBpZiBzdXBwb3J0ZWQsIHRoZSBzcGVjaWZpZWQgcHJlcHJvY2Vzc29yIGZsYWcgZm9yIHRoZSBwcmVwcm9jZXNzb3IKKyMgc2VsZWN0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UsIG9wdGlvbmFsbHkgc2F2aW5nIGl0IHRvIHRoZSBzcGVjaWZpZWQKKyMgdmFyaWFibGUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBWF9DSEVDS19QUkVQUk9DRVNTT1JfT1BUSU9OXSwKK1sKKyAgICBpZmVsc2UoJCMsCisgICAgICAgIDMsCisgICAgICAgIFtfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTl9XSVRIX1ZBUigkMSwgJDIsICQzKV0sCisgICAgICAgIFtfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTigkMSwgJDIpXSkKK10pCisKKyMKKyMgQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTlMobGFuZ3VhZ2UsIFt2YXJpYWJsZSxdIG9wdGlvbiAuLi4pCisjCisjICAgbGFuZ3VhZ2UgLSBUaGUgYXV0b2NvbmYgbGFuZ3VhZ2UgKEMsIEMrKywgT2JqZWN0aXZlIEMsIE9iamVjdGl2ZSBDKyssCisjICAgICAgICAgICAgICBldGMuKS4KKyMgICB2YXJpYWJsZSAtIElmIHN1cHBsaWVkLCB0aGUgdmFyaWFibGUgdG8gYWRkIHRoZSBjaGVja2VkIHByZXByb2Nlc3NvciBvcHRpb24KKyMgICAgICAgICAgICAgIHRvLgorIyAgIG9wdGlvbnMgIC0gVGhlIHByZXByb2Nlc3NvciBmbGFncyB0byBjaGVjay4KKyMKKyMgQWRkLCBpZiBzdXBwb3J0ZWQsIHRoZSBzcGVjaWZpZWQgcHJlcHJvY2Vzc29yIGZsYWdzIGZvciB0aGUgcHJlcHJvY2Vzc29yCisjIHNlbGVjdGVkIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlLCBvcHRpb25hbGx5IHNhdmluZyBpdCB0byB0aGUgc3BlY2lmaWVkCisjIHZhcmlhYmxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTlNdLAorWworICAgIGlmZWxzZSgkIywKKyAgICAgICAgMywKKyAgICAgICAgWworICAgICAgICAgICAgZm9yIGF4X3ByZXByb2Nlc3Nvcl9vcHRpb24gaW4gWyQzXTsgZG8KKyAgICAgICAgICAgICAgICBfQVhfQ0hFQ0tfUFJFUFJPQ0VTU09SX09QVElPTl9XSVRIX1ZBUihbJDFdLCBbJDJdLCAkYXhfcHJlcHJvY2Vzc29yX29wdGlvbikKKyAgICAgICAgICAgIGRvbmUKKwldLAorICAgICAgICBbCisgICAgICAgICAgICBmb3IgYXhfcHJlcHJvY2Vzc29yX29wdGlvbiBpbiBbJDJdOyBkbworICAgICAgICAgICAgICAgIF9BWF9DSEVDS19QUkVQUk9DRVNTT1JfT1BUSU9OKFskMV0sICRheF9wcmVwcm9jZXNzb3Jfb3B0aW9uKQorICAgICAgICAgICAgZG9uZQorCV0pCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jb21wYXJlX3ZlcnNpb24ubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2NvbXBhcmVfdmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGRjMGZkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jb21wYXJlX3ZlcnNpb24ubTQKQEAgLTAsMCArMSwxNzcgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2NvbXBhcmVfdmVyc2lvbi5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0NPTVBBUkVfVkVSU0lPTihWRVJTSU9OX0EsIE9QLCBWRVJTSU9OX0IsIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdKQorIworIyBERVNDUklQVElPTgorIworIyAgIFRoaXMgbWFjcm8gY29tcGFyZXMgdHdvIHZlcnNpb24gc3RyaW5ncy4gRHVlIHRvIHRoZSB2YXJpb3VzIG51bWJlciBvZgorIyAgIG1pbm9yLXZlcnNpb24gbnVtYmVycyB0aGF0IGNhbiBleGlzdCwgYW5kIHRoZSBmYWN0IHRoYXQgc3RyaW5nCisjICAgY29tcGFyaXNvbnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggbnVtZXJpYyBjb21wYXJpc29ucywgdGhpcyBpcyBub3QKKyMgICBuZWNlc3NhcmlseSB0cml2aWFsIHRvIGRvIGluIGEgYXV0b2NvbmYgc2NyaXB0LiBUaGlzIG1hY3JvIG1ha2VzIGRvaW5nCisjICAgdGhlc2UgY29tcGFyaXNvbnMgZWFzeS4KKyMKKyMgICBUaGUgc2l4IGJhc2ljIGNvbXBhcmlzb25zIGFyZSBhdmFpbGFibGUsIGFzIHdlbGwgYXMgY2hlY2tpbmcgZXF1YWxpdHkKKyMgICBsaW1pdGVkIHRvIGEgY2VydGFpbiBudW1iZXIgb2YgbWlub3ItdmVyc2lvbiBsZXZlbHMuCisjCisjICAgVGhlIG9wZXJhdG9yIE9QIGRldGVybWluZXMgd2hhdCB0eXBlIG9mIGNvbXBhcmlzb24gdG8gZG8sIGFuZCBjYW4gYmUgb25lCisjICAgb2Y6CisjCisjICAgIGVxICAtIGVxdWFsICh0ZXN0IEEgPT0gQikKKyMgICAgbmUgIC0gbm90IGVxdWFsICh0ZXN0IEEgIT0gQikKKyMgICAgbGUgIC0gbGVzcyB0aGFuIG9yIGVxdWFsICh0ZXN0IEEgPD0gQikKKyMgICAgZ2UgIC0gZ3JlYXRlciB0aGFuIG9yIGVxdWFsICh0ZXN0IEEgPj0gQikKKyMgICAgbHQgIC0gbGVzcyB0aGFuICh0ZXN0IEEgPCBCKQorIyAgICBndCAgLSBncmVhdGVyIHRoYW4gKHRlc3QgQSA+IEIpCisjCisjICAgQWRkaXRpb25hbGx5LCB0aGUgZXEgYW5kIG5lIG9wZXJhdG9yIGNhbiBoYXZlIGEgbnVtYmVyIGFmdGVyIGl0IHRvIGxpbWl0CisjICAgdGhlIHRlc3QgdG8gdGhhdCBudW1iZXIgb2YgbWlub3IgdmVyc2lvbnMuCisjCisjICAgIGVxMCAtIGVxdWFsIHVwIHRvIHRoZSBsZW5ndGggb2YgdGhlIHNob3J0ZXIgdmVyc2lvbgorIyAgICBuZTAgLSBub3QgZXF1YWwgdXAgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlciB2ZXJzaW9uCisjICAgIGVxTiAtIGVxdWFsIHVwIHRvIE4gc3ViLXZlcnNpb24gbGV2ZWxzCisjICAgIG5lTiAtIG5vdCBlcXVhbCB1cCB0byBOIHN1Yi12ZXJzaW9uIGxldmVscworIworIyAgIFdoZW4gdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBzaGVsbCBjb21tYW5kcyBBQ1RJT04tSUYtVFJVRSBhcmUgcnVuLAorIyAgIG90aGVyd2lzZSBzaGVsbCBjb21tYW5kcyBBQ1RJT04tSUYtRkFMU0UgYXJlIHJ1bi4gVGhlIGVudmlyb25tZW50CisjICAgdmFyaWFibGUgJ2F4X2NvbXBhcmVfdmVyc2lvbicgaXMgYWx3YXlzIHNldCB0byBlaXRoZXIgJ3RydWUnIG9yICdmYWxzZScKKyMgICBhcyB3ZWxsLgorIworIyAgIEV4YW1wbGVzOgorIworIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1LjddLFtsdF0sWzMuMTUuOF0pCisjICAgICBBWF9DT01QQVJFX1ZFUlNJT04oWzMuMTVdLFtsdF0sWzMuMTUuOF0pCisjCisjICAgd291bGQgYm90aCBiZSB0cnVlLgorIworIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1LjddLFtlcV0sWzMuMTUuOF0pCisjICAgICBBWF9DT01QQVJFX1ZFUlNJT04oWzMuMTVdLFtndF0sWzMuMTUuOF0pCisjCisjICAgd291bGQgYm90aCBiZSBmYWxzZS4KKyMKKyMgICAgIEFYX0NPTVBBUkVfVkVSU0lPTihbMy4xNS43XSxbZXEyXSxbMy4xNS44XSkKKyMKKyMgICB3b3VsZCBiZSB0cnVlIGJlY2F1c2UgaXQgaXMgb25seSBjb21wYXJpbmcgdHdvIG1pbm9yIHZlcnNpb25zLgorIworIyAgICAgQVhfQ09NUEFSRV9WRVJTSU9OKFszLjE1LjddLFtlcTBdLFszLjE1XSkKKyMKKyMgICB3b3VsZCBiZSB0cnVlIGJlY2F1c2UgaXQgaXMgb25seSBjb21wYXJpbmcgdGhlIGxlc3NlciBudW1iZXIgb2YgbWlub3IKKyMgICB2ZXJzaW9ucyBvZiB0aGUgdHdvIHZhbHVlcy4KKyMKKyMgICBOb3RlOiBUaGUgY2hhcmFjdGVycyB0aGF0IHNlcGFyYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgZG8gbm90IG1hdHRlci4gQW4KKyMgICBlbXB0eSBzdHJpbmcgaXMgdGhlIHNhbWUgYXMgdmVyc2lvbiAwLiBPUCBpcyBldmFsdWF0ZWQgYnkgYXV0b2NvbmYsIG5vdAorIyAgIGNvbmZpZ3VyZSwgc28gbXVzdCBiZSBhIHN0cmluZywgbm90IGEgdmFyaWFibGUuCisjCisjICAgVGhlIGF1dGhvciB3b3VsZCBsaWtlIHRvIGFja25vd2xlZGdlIEd1aWRvIERyYWhlaW0gd2hvc2UgYWR2aWNlIGFib3V0CisjICAgdGhlIG00X2Nhc2UgYW5kIG00X2lmdmFsbiBmdW5jdGlvbnMgbWFrZSB0aGlzIG1hY3JvIG9ubHkgaW5jbHVkZSB0aGUKKyMgICBwb3J0aW9ucyBuZWNlc3NhcnkgdG8gcGVyZm9ybSB0aGUgc3BlY2lmaWMgY29tcGFyaXNvbiBzcGVjaWZpZWQgYnkgdGhlCisjICAgT1AgYXJndW1lbnQgaW4gdGhlIGZpbmFsIGNvbmZpZ3VyZSBzY3JpcHQuCisjCisjIExJQ0VOU0UKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDggVGltIFRvb2xhbiA8dG9vbGFuQGVsZS51cmkuZWR1PgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCAxMQorCitkbmwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQUNfREVGVU4oW0FYX0NPTVBBUkVfVkVSU0lPTl0sIFsKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKQorCisgICMgVXNlZCB0byBpbmRpY2F0ZSB0cnVlIG9yIGZhbHNlIGNvbmRpdGlvbgorICBheF9jb21wYXJlX3ZlcnNpb249ZmFsc2UKKworICAjIENvbnZlcnQgdGhlIHR3byB2ZXJzaW9uIHN0cmluZ3MgdG8gYmUgY29tcGFyZWQgaW50byBhIGZvcm1hdCB0aGF0CisgICMgYWxsb3dzIGEgc2ltcGxlIHN0cmluZyBjb21wYXJpc29uLiAgVGhlIGVuZCByZXN1bHQgaXMgdGhhdCBhIHZlcnNpb24KKyAgIyBzdHJpbmcgb2YgdGhlIGZvcm0gMS4xMi41LXI2MTcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGZvcm0KKyAgIyAwMDAxMDAxMjAwMDUwNjE3LiAgSW4gb3RoZXIgd29yZHMsIGVhY2ggbnVtYmVyIGlzIHplcm8gcGFkZGVkIHRvIGZvdXIKKyAgIyBkaWdpdHMsIGFuZCBub24gZGlnaXRzIGFyZSByZW1vdmVkLgorICBBU19WQVJfUFVTSERFRihbQV0sW2F4X2NvbXBhcmVfdmVyc2lvbl9BXSkKKyAgQT1gZWNobyAiJDEiIHwgc2VkIC1lICdzL1woW1swLTldXSpcKS9aXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1bWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1tbXjAtOV1dLy9nJ2AKKworICBBU19WQVJfUFVTSERFRihbQl0sW2F4X2NvbXBhcmVfdmVyc2lvbl9CXSkKKyAgQj1gZWNobyAiJDMiIHwgc2VkIC1lICdzL1woW1swLTldXSpcKS9aXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1pcKFtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1cKVovWjBcMVovZycgXAorICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWlwoW1swLTldXVtbMC05XV1bWzAtOV1dXClaL1owXDFaL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgIC1lICdzL1tbXjAtOV1dLy9nJ2AKKworICBkbmwgIyBJbiB0aGUgY2FzZSBvZiBsZSwgZ2UsIGx0LCBhbmQgZ3QsIHRoZSBzdHJpbmdzIGFyZSBzb3J0ZWQgYXMgbmVjZXNzYXJ5CisgIGRubCAjIHRoZW4gdGhlIGZpcnN0IGxpbmUgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLgorICBkbmwgIyBUaGUgc2VkIHJpZ2h0IGFmdGVyIHRoZSBlY2hvIGlzIHRvIHJlbW92ZSBhbnkgaW5kZW50ZWQgd2hpdGUgc3BhY2UuCisgIG00X2Nhc2UobTRfdG9sb3dlcigkMiksCisgIFtsdF0sWworICAgIGF4X2NvbXBhcmVfdmVyc2lvbj1gZWNobyAieCRBCit4JEIiIHwgc2VkICdzL14gKi8vJyB8IHNvcnQgLXIgfCBzZWQgInMveCR7QX0vZmFsc2UvO3MveCR7Qn0vdHJ1ZS87MXEiYAorICBdLAorICBbZ3RdLFsKKyAgICBheF9jb21wYXJlX3ZlcnNpb249YGVjaG8gIngkQQoreCRCIiB8IHNlZCAncy9eICovLycgfCBzb3J0IHwgc2VkICJzL3gke0F9L2ZhbHNlLztzL3gke0J9L3RydWUvOzFxImAKKyAgXSwKKyAgW2xlXSxbCisgICAgYXhfY29tcGFyZV92ZXJzaW9uPWBlY2hvICJ4JEEKK3gkQiIgfCBzZWQgJ3MvXiAqLy8nIHwgc29ydCB8IHNlZCAicy94JHtBfS90cnVlLztzL3gke0J9L2ZhbHNlLzsxcSJgCisgIF0sCisgIFtnZV0sWworICAgIGF4X2NvbXBhcmVfdmVyc2lvbj1gZWNobyAieCRBCit4JEIiIHwgc2VkICdzL14gKi8vJyB8IHNvcnQgLXIgfCBzZWQgInMveCR7QX0vdHJ1ZS87cy94JHtCfS9mYWxzZS87MXEiYAorICBdLFsKKyAgICBkbmwgU3BsaXQgdGhlIG9wZXJhdG9yIGZyb20gdGhlIHN1YnZlcnNpb24gY291bnQgaWYgcHJlc2VudC4KKyAgICBtNF9ibWF0Y2gobTRfc3Vic3RyKCQyLDIpLAorICAgIFswXSxbCisgICAgICAjIEEgY291bnQgb2YgemVybyBtZWFucyB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlciB2ZXJzaW9uLgorICAgICAgIyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIEEgYW5kIEIuCisgICAgICBheF9jb21wYXJlX3ZlcnNpb25fbGVuX0E9YGVjaG8gIiRBIiB8ICRBV0sgJ3twcmludChsZW5ndGgpfSdgCisgICAgICBheF9jb21wYXJlX3ZlcnNpb25fbGVuX0I9YGVjaG8gIiRCIiB8ICRBV0sgJ3twcmludChsZW5ndGgpfSdgCisKKyAgICAgICMgU2V0IEEgdG8gbm8gbW9yZSB0aGFuIEIncyBsZW5ndGggYW5kIEIgdG8gbm8gbW9yZSB0aGFuIEEncyBsZW5ndGguCisgICAgICBBPWBlY2hvICIkQSIgfCBzZWQgInMvXCguXHskYXhfY29tcGFyZV92ZXJzaW9uX2xlbl9CXH1cKS4qL1wxLyJgCisgICAgICBCPWBlY2hvICIkQiIgfCBzZWQgInMvXCguXHskYXhfY29tcGFyZV92ZXJzaW9uX2xlbl9BXH1cKS4qL1wxLyJgCisgICAgXSwKKyAgICBbWzAtOV0rXSxbCisgICAgICAjIEEgY291bnQgZ3JlYXRlciB0aGFuIHplcm8gbWVhbnMgdXNlIG9ubHkgdGhhdCBtYW55IHN1YnZlcnNpb25zCisgICAgICBBPWBlY2hvICIkQSIgfCBzZWQgInMvXChcKFtbMC05XV1cezRcfVwpXHttNF9zdWJzdHIoJDIsMilcfVwpLiovXDEvImAKKyAgICAgIEI9YGVjaG8gIiRCIiB8IHNlZCAicy9cKFwoW1swLTldXVx7NFx9XClce200X3N1YnN0cigkMiwyKVx9XCkuKi9cMS8iYAorICAgIF0sCisgICAgWy4rXSxbCisgICAgICBBQ19XQVJOSU5HKAorICAgICAgICBbaWxsZWdhbCBPUCBudW1lcmljIHBhcmFtZXRlcjogJDJdKQorICAgIF0sW10pCisKKyAgICAjIFBhZCB6ZXJvcyBhdCBlbmQgb2YgbnVtYmVycyB0byBtYWtlIHNhbWUgbGVuZ3RoLgorICAgIGF4X2NvbXBhcmVfdmVyc2lvbl90bXBfQT0iJEFgZWNobyAkQiB8IHNlZCAncy8uLzAvZydgIgorICAgIEI9IiRCYGVjaG8gJEEgfCBzZWQgJ3MvLi8wL2cnYCIKKyAgICBBPSIkYXhfY29tcGFyZV92ZXJzaW9uX3RtcF9BIgorCisgICAgIyBDaGVjayBmb3IgZXF1YWxpdHkgb3IgaW5lcXVhbGl0eSBhcyBuZWNlc3NhcnkuCisgICAgbTRfY2FzZShtNF90b2xvd2VyKG00X3N1YnN0cigkMiwwLDIpKSwKKyAgICBbZXFdLFsKKyAgICAgIHRlc3QgIngkQSIgPSAieCRCIiAmJiBheF9jb21wYXJlX3ZlcnNpb249dHJ1ZQorICAgIF0sCisgICAgW25lXSxbCisgICAgICB0ZXN0ICJ4JEEiICE9ICJ4JEIiICYmIGF4X2NvbXBhcmVfdmVyc2lvbj10cnVlCisgICAgXSxbCisgICAgICBBQ19XQVJOSU5HKFtpbGxlZ2FsIE9QIHBhcmFtZXRlcjogJDJdKQorICAgIF0pCisgIF0pCisKKyAgQVNfVkFSX1BPUERFRihbQV0pZG5sCisgIEFTX1ZBUl9QT1BERUYoW0JdKWRubAorCisgIGRubCAjIEV4ZWN1dGUgQUNUSU9OLUlGLVRSVUUgLyBBQ1RJT04tSUYtRkFMU0UuCisgIGlmIHRlc3QgIiRheF9jb21wYXJlX3ZlcnNpb24iID0gInRydWUiIDsgdGhlbgorICAgIG00X2lmdmFsbihbJDRdLFskNF0sWzpdKWRubAorICAgIG00X2lmdmFsbihbJDVdLFtlbHNlICQ1XSlkbmwKKyAgZmkKK10pIGRubCBBWF9DT01QQVJFX1ZFUlNJT04KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxOGU0OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00CkBAIC0wLDAgKzEsNTYyIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2N4eF9jb21waWxlX3N0ZGN4eC5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0NYWF9DT01QSUxFX1NURENYWChWRVJTSU9OLCBbZXh0fG5vZXh0XSwgW21hbmRhdG9yeXxvcHRpb25hbF0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgQ2hlY2sgZm9yIGJhc2VsaW5lIGxhbmd1YWdlIGNvdmVyYWdlIGluIHRoZSBjb21waWxlciBmb3IgdGhlIHNwZWNpZmllZAorIyAgIHZlcnNpb24gb2YgdGhlIEMrKyBzdGFuZGFyZC4gIElmIG5lY2Vzc2FyeSwgYWRkIHN3aXRjaGVzIHRvIENYWCBhbmQKKyMgICBDWFhDUFAgdG8gZW5hYmxlIHN1cHBvcnQuICBWRVJTSU9OIG1heSBiZSAnMTEnIChmb3IgdGhlIEMrKzExIHN0YW5kYXJkKQorIyAgIG9yICcxNCcgKGZvciB0aGUgQysrMTQgc3RhbmRhcmQpLgorIworIyAgIFRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHNwZWNpZmllZCwgaW5kaWNhdGVzIHdoZXRoZXIgeW91IGluc2lzdCBvbiBhbgorIyAgIGV4dGVuZGVkIG1vZGUgKGUuZy4gLXN0ZD1nbnUrKzExKSBvciBhIHN0cmljdCBjb25mb3JtYW5jZSBtb2RlIChlLmcuCisjICAgLXN0ZD1jKysxMSkuICBJZiBuZWl0aGVyIGlzIHNwZWNpZmllZCwgeW91IGdldCB3aGF0ZXZlciB3b3Jrcywgd2l0aAorIyAgIHByZWZlcmVuY2UgZm9yIGFuIGV4dGVuZGVkIG1vZGUuCisjCisjICAgVGhlIHRoaXJkIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQgJ21hbmRhdG9yeScgb3IgaWYgbGVmdCB1bnNwZWNpZmllZCwKKyMgICBpbmRpY2F0ZXMgdGhhdCBiYXNlbGluZSBzdXBwb3J0IGZvciB0aGUgc3BlY2lmaWVkIEMrKyBzdGFuZGFyZCBpcworIyAgIHJlcXVpcmVkIGFuZCB0aGF0IHRoZSBtYWNybyBzaG91bGQgZXJyb3Igb3V0IGlmIG5vIG1vZGUgd2l0aCB0aGF0CisjICAgc3VwcG9ydCBpcyBmb3VuZC4gIElmIHNwZWNpZmllZCAnb3B0aW9uYWwnLCB0aGVuIGNvbmZpZ3VyYXRpb24gcHJvY2VlZHMKKyMgICByZWdhcmRsZXNzLCBhZnRlciBkZWZpbmluZyBIQVZFX0NYWCR7VkVSU0lPTn0gaWYgYW5kIG9ubHkgaWYgYQorIyAgIHN1cHBvcnRpbmcgbW9kZSBpcyBmb3VuZC4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTIgWmFjayBXZWluYmVyZyA8emFja3dAcGFuaXguY29tPgorIyAgIENvcHlyaWdodCAoYykgMjAxMyBSb3kgU3RvZ25lciA8cm95c3RnbnJAaWNlcy51dGV4YXMuZWR1PgorIyAgIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNSBHb29nbGUgSW5jLjsgY29udHJpYnV0ZWQgYnkgQWxleGV5IFNva29sb3YgPHNva29sb3ZAZ29vZ2xlLmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTUgUGF1bCBOb3JtYW4gPHBlbm9ybWFuQG1hYy5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDE1IE1vcml0eiBLbGFtbWxlciA8bW9yaXR6QGtsYW1tbGVyLmV1PgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgNAorCitkbmwgIFRoaXMgbWFjcm8gaXMgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSB0aGUgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzExIG1hY3JvCitkbmwgIChzZXJpYWwgdmVyc2lvbiBudW1iZXIgMTMpLgorCitBQ19ERUZVTihbQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXSwgW2RubAorICBtNF9pZihbJDFdLCBbMTFdLCBbXSwKKyAgICAgICAgWyQxXSwgWzE0XSwgW10sCisgICAgICAgIFskMV0sIFsxN10sIFttNF9mYXRhbChbc3VwcG9ydCBmb3IgQysrMTcgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBBWF9DWFhfQ09NUElMRV9TVERDWFhdKV0sCisgICAgICAgIFttNF9mYXRhbChbaW52YWxpZCBmaXJzdCBhcmd1bWVudCBgJDEnIHRvIEFYX0NYWF9DT01QSUxFX1NURENYWF0pXSlkbmwKKyAgbTRfaWYoWyQyXSwgW10sIFtdLAorICAgICAgICBbJDJdLCBbZXh0XSwgW10sCisgICAgICAgIFskMl0sIFtub2V4dF0sIFtdLAorICAgICAgICBbbTRfZmF0YWwoW2ludmFsaWQgc2Vjb25kIGFyZ3VtZW50IGAkMicgdG8gQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXSldKWRubAorICBtNF9pZihbJDNdLCBbXSwgW2F4X2N4eF9jb21waWxlX2N4eCQxX3JlcXVpcmVkPXRydWVdLAorICAgICAgICBbJDNdLCBbbWFuZGF0b3J5XSwgW2F4X2N4eF9jb21waWxlX2N4eCQxX3JlcXVpcmVkPXRydWVdLAorICAgICAgICBbJDNdLCBbb3B0aW9uYWxdLCBbYXhfY3h4X2NvbXBpbGVfY3h4JDFfcmVxdWlyZWQ9ZmFsc2VdLAorICAgICAgICBbbTRfZmF0YWwoW2ludmFsaWQgdGhpcmQgYXJndW1lbnQgYCQzJyB0byBBWF9DWFhfQ09NUElMRV9TVERDWFhdKV0pCisgIEFDX0xBTkdfUFVTSChbQysrXSlkbmwKKyAgYWNfc3VjY2Vzcz1ubworICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrJDEgZmVhdHVyZXMgYnkgZGVmYXVsdCwKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4JDEsCisgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfJDFdKV0sCisgICAgW2F4X2N2X2N4eF9jb21waWxlX2N4eCQxPXllc10sCisgICAgW2F4X2N2X2N4eF9jb21waWxlX2N4eCQxPW5vXSldKQorICBpZiB0ZXN0IHgkYXhfY3ZfY3h4X2NvbXBpbGVfY3h4JDEgPSB4eWVzOyB0aGVuCisgICAgYWNfc3VjY2Vzcz15ZXMKKyAgZmkKKworICBtNF9pZihbJDJdLCBbbm9leHRdLCBbXSwgW2RubAorICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhlbgorICAgIGZvciBzd2l0Y2ggaW4gLXN0ZD1nbnUrKyQxIC1zdGQ9Z251KysweDsgZG8KKyAgICAgIGNhY2hldmFyPUFTX1RSX1NIKFtheF9jdl9jeHhfY29tcGlsZV9jeHgkMV8kc3dpdGNoXSkKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJENYWCBzdXBwb3J0cyBDKyskMSBmZWF0dXJlcyB3aXRoICRzd2l0Y2gsCisgICAgICAgICAgICAgICAgICAgICAkY2FjaGV2YXIsCisgICAgICAgIFthY19zYXZlX0NYWD0iJENYWCIKKyAgICAgICAgIENYWD0iJENYWCAkc3dpdGNoIgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XyQxXSldLAorICAgICAgICAgIFtldmFsICRjYWNoZXZhcj15ZXNdLAorICAgICAgICAgIFtldmFsICRjYWNoZXZhcj1ub10pCisgICAgICAgICBDWFg9IiRhY19zYXZlX0NYWCJdKQorICAgICAgaWYgZXZhbCB0ZXN0IHhcJCRjYWNoZXZhciA9IHh5ZXM7IHRoZW4KKyAgICAgICAgQ1hYPSIkQ1hYICRzd2l0Y2giCisgICAgICAgIGlmIHRlc3QgLW4gIiRDWFhDUFAiIDsgdGhlbgorICAgICAgICAgIENYWENQUD0iJENYWENQUCAkc3dpdGNoIgorICAgICAgICBmaQorICAgICAgICBhY19zdWNjZXNzPXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpXSkKKworICBtNF9pZihbJDJdLCBbZXh0XSwgW10sIFtkbmwKKyAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICBkbmwgSFAncyBhQ0MgbmVlZHMgK3N0ZD1jKysxMSBhY2NvcmRpbmcgdG86CisgICAgZG5sIGh0dHA6Ly9oMjEwMDcud3d3Mi5ocC5jb20vcG9ydGFsL2Rvd25sb2FkL2ZpbGVzL3VucHJvdC9hQ3h4L1BERl9SZWxlYXNlX05vdGVzLzc2OTE0OS0wMDEucGRmCisgICAgZG5sIENyYXkncyBjcmF5Q0MgbmVlZHMgIi1oIHN0ZD1jKysxMSIKKyAgICBmb3Igc3dpdGNoIGluIC1zdGQ9YysrJDEgLXN0ZD1jKysweCArc3RkPWMrKyQxICItaCBzdGQ9YysrJDEiOyBkbworICAgICAgY2FjaGV2YXI9QVNfVFJfU0goW2F4X2N2X2N4eF9jb21waWxlX2N4eCQxXyRzd2l0Y2hdKQorICAgICAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciAkQ1hYIHN1cHBvcnRzIEMrKyQxIGZlYXR1cmVzIHdpdGggJHN3aXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICRjYWNoZXZhciwKKyAgICAgICAgW2FjX3NhdmVfQ1hYPSIkQ1hYIgorICAgICAgICAgQ1hYPSIkQ1hYICRzd2l0Y2giCisgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfJDFdKV0sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPXllc10sCisgICAgICAgICAgW2V2YWwgJGNhY2hldmFyPW5vXSkKKyAgICAgICAgIENYWD0iJGFjX3NhdmVfQ1hYIl0pCisgICAgICBpZiBldmFsIHRlc3QgeFwkJGNhY2hldmFyID0geHllczsgdGhlbgorICAgICAgICBDWFg9IiRDWFggJHN3aXRjaCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJENYWENQUCIgOyB0aGVuCisgICAgICAgICAgQ1hYQ1BQPSIkQ1hYQ1BQICRzd2l0Y2giCisgICAgICAgIGZpCisgICAgICAgIGFjX3N1Y2Nlc3M9eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmldKQorICBBQ19MQU5HX1BPUChbQysrXSkKKyAgaWYgdGVzdCB4JGF4X2N4eF9jb21waWxlX2N4eCQxX3JlcXVpcmVkID0geHRydWU7IHRoZW4KKyAgICBpZiB0ZXN0IHgkYWNfc3VjY2VzcyA9IHhubzsgdGhlbgorICAgICAgQUNfTVNHX0VSUk9SKFsqKiogQSBjb21waWxlciB3aXRoIHN1cHBvcnQgZm9yIEMrKyQxIGxhbmd1YWdlIGZlYXR1cmVzIGlzIHJlcXVpcmVkLl0pCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRoZW4KKyAgICBIQVZFX0NYWCQxPTAKKyAgICBBQ19NU0dfTk9USUNFKFtObyBjb21waWxlciB3aXRoIEMrKyQxIHN1cHBvcnQgd2FzIGZvdW5kXSkKKyAgZWxzZQorICAgIEhBVkVfQ1hYJDE9MQorICAgIEFDX0RFRklORShIQVZFX0NYWCQxLDEsCisgICAgICAgICAgICAgIFtkZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGJhc2ljIEMrKyQxIHN5bnRheF0pCisgIGZpCisgIEFDX1NVQlNUKEhBVkVfQ1hYJDEpCitdKQorCisKK2RubCAgVGVzdCBib2R5IGZvciBjaGVja2luZyBDKysxMSBzdXBwb3J0CisKK200X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV8xMV0sCisgIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzExCispCisKKworZG5sICBUZXN0IGJvZHkgZm9yIGNoZWNraW5nIEMrKzE0IHN1cHBvcnQKKworbTRfZGVmaW5lKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5XzE0XSwKKyAgX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTEKKyAgX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV9uZXdfaW5fMTQKKykKKworCitkbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVyZXMgaW4gQysrMTEKKworbTRfZGVmaW5lKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xMV0sIFtbCisKKy8vIElmIHRoZSBjb21waWxlciBhZG1pdHMgdGhhdCBpdCBpcyBub3QgcmVhZHkgZm9yIEMrKzExLCB3aHkgdG9ydHVyZSBpdD8KKy8vIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNwZWVkIHVwIHRoZSB0ZXN0LgorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKyNlcnJvciAiVGhpcyBpcyBub3QgYSBDKysgY29tcGlsZXIiCisKKyNlbGlmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorCisjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysrMTEgY29tcGlsZXIiCisKKyNlbHNlCisKK25hbWVzcGFjZSBjeHgxMQoreworCisgIG5hbWVzcGFjZSB0ZXN0X3N0YXRpY19hc3NlcnQKKyAgeworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNoZWNrCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA8PSBzaXplb2YoVCksICJub3QgYmlnIGVub3VnaCIpOworICAgIH07CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2ZpbmFsX292ZXJyaWRlCisgIHsKKworICAgIHN0cnVjdCBCYXNlCisgICAgeworICAgICAgdmlydHVhbCB2b2lkIGYoKSB7fQorICAgIH07CisKKyAgICBzdHJ1Y3QgRGVyaXZlZCA6IHB1YmxpYyBCYXNlCisgICAgeworICAgICAgdmlydHVhbCB2b2lkIGYoKSBvdmVycmlkZSB7fQorICAgIH07CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2RvdWJsZV9yaWdodF9hbmdsZV9icmFja2V0cworICB7CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQgPgorICAgIHN0cnVjdCBjaGVjayB7fTsKKworICAgIHR5cGVkZWYgY2hlY2s8dm9pZD4gc2luZ2xlX3R5cGU7CisgICAgdHlwZWRlZiBjaGVjazxjaGVjazx2b2lkPj4gZG91YmxlX3R5cGU7CisgICAgdHlwZWRlZiBjaGVjazxjaGVjazxjaGVjazx2b2lkPj4+IHRyaXBsZV90eXBlOworICAgIHR5cGVkZWYgY2hlY2s8Y2hlY2s8Y2hlY2s8Y2hlY2s8dm9pZD4+Pj4gcXVhZHJ1cGxlX3R5cGU7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2RlY2x0eXBlCisgIHsKKworICAgIGludAorICAgIGYoKQorICAgIHsKKyAgICAgIGludCBhID0gMTsKKyAgICAgIGRlY2x0eXBlKGEpIGIgPSAyOworICAgICAgcmV0dXJuIGEgKyBiOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfdHlwZV9kZWR1Y3Rpb24KKyAgeworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIgPgorICAgIHN0cnVjdCBpc19zYW1lCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUID4KKyAgICBzdHJ1Y3QgaXNfc2FtZTxULCBUPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIgPgorICAgIGF1dG8KKyAgICBhZGQoVDEgYTEsIFQyIGEyKSAtPiBkZWNsdHlwZShhMSArIGEyKQorICAgIHsKKyAgICAgIHJldHVybiBhMSArIGEyOworICAgIH0KKworICAgIGludAorICAgIHRlc3QoY29uc3QgaW50IGMsIHZvbGF0aWxlIGludCB2KQorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKDApPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYyk+Ojp2YWx1ZSA9PSBmYWxzZSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUodik+Ojp2YWx1ZSA9PSBmYWxzZSwgIiIpOworICAgICAgYXV0byBhYyA9IGM7CisgICAgICBhdXRvIGF2ID0gdjsKKyAgICAgIGF1dG8gc3VtaSA9IGFjICsgYXYgKyAneCc7CisgICAgICBhdXRvIHN1bWYgPSBhYyArIGF2ICsgMS4wOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYWMpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYXYpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoc3VtaSk+Ojp2YWx1ZSA9PSB0cnVlLCAiIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZShzdW1mKT46OnZhbHVlID09IGZhbHNlLCAiIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZShhZGQoYywgdikpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOworICAgICAgcmV0dXJuIChzdW1mID4gMC4wKSA/IHN1bWkgOiBhZGQoYywgdik7CisgICAgfQorCisgIH0KKworICBuYW1lc3BhY2UgdGVzdF9ub2V4Y2VwdAorICB7CisKKyAgICBpbnQgZigpIHsgcmV0dXJuIDA7IH0KKyAgICBpbnQgZygpIG5vZXhjZXB0IHsgcmV0dXJuIDA7IH0KKworICAgIHN0YXRpY19hc3NlcnQobm9leGNlcHQoZigpKSA9PSBmYWxzZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQobm9leGNlcHQoZygpKSA9PSB0cnVlLCAiIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2NvbnN0ZXhwcgorICB7CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIENoYXJUID4KKyAgICB1bnNpZ25lZCBsb25nIGNvbnN0ZXhwcgorICAgIHN0cmxlbl9jX3IoY29uc3QgQ2hhclQgKmNvbnN0IHMsIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWNjKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiAqcyA/IHN0cmxlbl9jX3IocyArIDEsIGFjYyArIDEpIDogYWNjOworICAgIH0KKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgQ2hhclQgPgorICAgIHVuc2lnbmVkIGxvbmcgY29uc3RleHByCisgICAgc3RybGVuX2MoY29uc3QgQ2hhclQgKmNvbnN0IHMpIG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIHN0cmxlbl9jX3IocywgMFVMKTsKKyAgICB9CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCIiKSA9PSAwVUwsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCIxIikgPT0gMVVMLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygiZXhhbXBsZSIpID09IDdVTCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoImFub3RoZXJcMGV4YW1wbGUiKSA9PSA3VUwsICIiKTsKKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfcnZhbHVlX3JlZmVyZW5jZXMKKyAgeworCisgICAgdGVtcGxhdGUgPCBpbnQgTiA+CisgICAgc3RydWN0IGFuc3dlcgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHZhbHVlID0gTjsKKyAgICB9OworCisgICAgYW5zd2VyPDE+IGYoaW50JikgICAgICAgeyByZXR1cm4gYW5zd2VyPDE+KCk7IH0KKyAgICBhbnN3ZXI8Mj4gZihjb25zdCBpbnQmKSB7IHJldHVybiBhbnN3ZXI8Mj4oKTsgfQorICAgIGFuc3dlcjwzPiBmKGludCYmKSAgICAgIHsgcmV0dXJuIGFuc3dlcjwzPigpOyB9CisKKyAgICB2b2lkCisgICAgdGVzdCgpCisgICAgeworICAgICAgaW50IGkgPSAwOworICAgICAgY29uc3QgaW50IGMgPSAwOworICAgICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShmKGkpKTo6dmFsdWUgPT0gMSwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShmKGMpKTo6dmFsdWUgPT0gMiwgIiIpOworICAgICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShmKDApKTo6dmFsdWUgPT0gMywgIiIpOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfdW5pZm9ybV9pbml0aWFsaXphdGlvbgorICB7CisKKyAgICBzdHJ1Y3QgdGVzdAorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgemVybyB7fTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgb25lIHsxfTsKKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydCh0ZXN0Ojp6ZXJvID09IDAsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHRlc3Q6Om9uZSA9PSAxLCAiIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X2xhbWJkYXMKKyAgeworCisgICAgdm9pZAorICAgIHRlc3QxKCkKKyAgICB7CisgICAgICBhdXRvIGxhbWJkYTEgPSBbXSgpe307CisgICAgICBhdXRvIGxhbWJkYTIgPSBsYW1iZGExOworICAgICAgbGFtYmRhMSgpOworICAgICAgbGFtYmRhMigpOworICAgIH0KKworICAgIGludAorICAgIHRlc3QyKCkKKyAgICB7CisgICAgICBhdXRvIGEgPSBbXShpbnQgaSwgaW50IGopeyByZXR1cm4gaSArIGo7IH0oMSwgMik7CisgICAgICBhdXRvIGIgPSBbXSgpIC0+IGludCB7IHJldHVybiAnMCc7IH0oKTsKKyAgICAgIGF1dG8gYyA9IFs9XSgpeyByZXR1cm4gYSArIGI7IH0oKTsKKyAgICAgIGF1dG8gZCA9IFsmXSgpeyByZXR1cm4gYzsgfSgpOworICAgICAgYXV0byBlID0gW2EsICZiXShpbnQgeCkgbXV0YWJsZSB7CisgICAgICAgIGNvbnN0IGF1dG8gaWRlbnRpdHkgPSBbXShpbnQgeSl7IHJldHVybiB5OyB9OworICAgICAgICBmb3IgKGF1dG8gaSA9IDA7IGkgPCBhOyArK2kpCisgICAgICAgICAgYSArPSBiLS07CisgICAgICAgIHJldHVybiB4ICsgaWRlbnRpdHkoYSArIGIpOworICAgICAgfSgwKTsKKyAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZTsKKyAgICB9CisKKyAgICBpbnQKKyAgICB0ZXN0MygpCisgICAgeworICAgICAgY29uc3QgYXV0byBudWxsYXJ5ID0gW10oKXsgcmV0dXJuIDA7IH07CisgICAgICBjb25zdCBhdXRvIHVuYXJ5ID0gW10oaW50IHgpeyByZXR1cm4geDsgfTsKKyAgICAgIHVzaW5nIG51bGxhcnlfdCA9IGRlY2x0eXBlKG51bGxhcnkpOworICAgICAgdXNpbmcgdW5hcnlfdCA9IGRlY2x0eXBlKHVuYXJ5KTsKKyAgICAgIGNvbnN0IGF1dG8gaGlnaGVyMXN0ID0gW10obnVsbGFyeV90IGYpeyByZXR1cm4gZigpOyB9OworICAgICAgY29uc3QgYXV0byBoaWdoZXIybmQgPSBbdW5hcnldKG51bGxhcnlfdCBmMSl7CisgICAgICAgIHJldHVybiBbdW5hcnksIGYxXSh1bmFyeV90IGYyKXsgcmV0dXJuIGYyKHVuYXJ5KGYxKCkpKTsgfTsKKyAgICAgIH07CisgICAgICByZXR1cm4gaGlnaGVyMXN0KG51bGxhcnkpICsgaGlnaGVyMm5kKG51bGxhcnkpKHVuYXJ5KTsKKyAgICB9CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3ZhcmlhZGljX3RlbXBsYXRlcworICB7CisKKyAgICB0ZW1wbGF0ZSA8aW50Li4uPgorICAgIHN0cnVjdCBzdW07CisKKyAgICB0ZW1wbGF0ZSA8aW50IE4wLCBpbnQuLi4gTjF0b04+CisgICAgc3RydWN0IHN1bTxOMCwgTjF0b04uLi4+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0gTjAgKyBzdW08TjF0b04uLi4+Ojp2YWx1ZTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPD4KKyAgICBzdHJ1Y3Qgc3VtPD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gdmFsdWUgPSAwOworICAgIH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN1bTw+Ojp2YWx1ZSA9PSAwLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdW08MT46OnZhbHVlID09IDEsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN1bTwyMz46OnZhbHVlID09IDIzLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdW08MSwgMj46OnZhbHVlID09IDMsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN1bTw1LCA1LCAxMT46OnZhbHVlID09IDIxLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdW08MiwgMywgNSwgNywgMTEsIDEzPjo6dmFsdWUgPT0gNDEsICIiKTsKKworICB9CisKKyAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzcyODE4NC90ZW1wbGF0ZS1hbGlhc2VzLWFuZC1zZmluYWUKKyAgLy8gQ2xhbmcgMy4xIGZhaWxzIHdpdGggaGVhZGVycyBvZiBsaWJzdGQrKyA0LjguMyB3aGVuIHVzaW5nIHN0ZDo6ZnVuY3Rpb24KKyAgLy8gYmVjYXVzZSBvZiB0aGlzLgorICBuYW1lc3BhY2UgdGVzdF90ZW1wbGF0ZV9hbGlhc19zZmluYWUKKyAgeworCisgICAgc3RydWN0IGZvbyB7fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgbWVtYmVyID0gdHlwZW5hbWUgVDo6bWVtYmVyX3R5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZnVuYyguLi4pIHt9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgZnVuYyhtZW1iZXI8VD4qKSB7fQorCisgICAgdm9pZCB0ZXN0KCk7CisKKyAgICB2b2lkIHRlc3QoKSB7IGZ1bmM8Zm9vPigwKTsgfQorCisgIH0KKworfSAgLy8gbmFtZXNwYWNlIGN4eDExCisKKyNlbmRpZiAgLy8gX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCitdXSkKKworCitkbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVyZXMgaW4gQysrMTQKKworbTRfZGVmaW5lKFtfQVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xNF0sIFtbCisKKy8vIElmIHRoZSBjb21waWxlciBhZG1pdHMgdGhhdCBpdCBpcyBub3QgcmVhZHkgZm9yIEMrKzE0LCB3aHkgdG9ydHVyZSBpdD8KKy8vIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNwZWVkIHVwIHRoZSB0ZXN0LgorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKyNlcnJvciAiVGhpcyBpcyBub3QgYSBDKysgY29tcGlsZXIiCisKKyNlbGlmIF9fY3BsdXNwbHVzIDwgMjAxNDAyTAorCisjZXJyb3IgIlRoaXMgaXMgbm90IGEgQysrMTQgY29tcGlsZXIiCisKKyNlbHNlCisKK25hbWVzcGFjZSBjeHgxNAoreworCisgIG5hbWVzcGFjZSB0ZXN0X3BvbHltb3JwaGljX2xhbWJkYXMKKyAgeworCisgICAgaW50CisgICAgdGVzdCgpCisgICAgeworICAgICAgY29uc3QgYXV0byBsYW1iZGEgPSBbXShhdXRvJiYuLi4gYXJncyl7CisgICAgICAgIGNvbnN0IGF1dG8gaXN0aW55ID0gW10oYXV0byB4KXsKKyAgICAgICAgICByZXR1cm4gKHNpemVvZih4KSA9PSAxVUwpID8gMSA6IDA7CisgICAgICAgIH07CisgICAgICAgIGNvbnN0IGludCBhcmV0aW55W10gPSB7IGlzdGlueShhcmdzKS4uLiB9OworICAgICAgICByZXR1cm4gYXJldGlueVswXTsKKyAgICAgIH07CisgICAgICByZXR1cm4gbGFtYmRhKDEsIDFMLCAxLjBmLCAnMScpOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfYmluYXJ5X2xpdGVyYWxzCisgIHsKKworICAgIGNvbnN0ZXhwciBhdXRvIGl2aWkgPSAwYjAwMDAwMDAwMDAxMDEwMTA7CisgICAgc3RhdGljX2Fzc2VydChpdmlpID09IDQyLCAid3JvbmcgdmFsdWUiKTsKKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfZ2VuZXJhbGl6ZWRfY29uc3RleHByCisgIHsKKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgQ2hhclQgPgorICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsb25nCisgICAgc3RybGVuX2MoY29uc3QgQ2hhclQgKmNvbnN0IHMpIG5vZXhjZXB0CisgICAgeworICAgICAgYXV0byBsZW5ndGggPSAwVUw7CisgICAgICBmb3IgKGF1dG8gcCA9IHM7ICpwOyArK3ApCisgICAgICAgICsrbGVuZ3RoOworICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCIiKSA9PSAwVUwsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCJ4IikgPT0gMVVMLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygidGVzdCIpID09IDRVTCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoImFub3RoZXJcMHRlc3QiKSA9PSA3VUwsICIiKTsKKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfbGFtYmRhX2luaXRfY2FwdHVyZQorICB7CisKKyAgICBpbnQKKyAgICB0ZXN0KCkKKyAgICB7CisgICAgICBhdXRvIHggPSAwOworICAgICAgY29uc3QgYXV0byBsYW1iZGExID0gW2EgPSB4XShpbnQgYil7IHJldHVybiBhICsgYjsgfTsKKyAgICAgIGNvbnN0IGF1dG8gbGFtYmRhMiA9IFthID0gbGFtYmRhMSh4KV0oKXsgcmV0dXJuIGE7IH07CisgICAgICByZXR1cm4gbGFtYmRhMigpOworICAgIH0KKworICB9CisKKyAgbmFtZXNwYWNlIHRlc3RfZGlnaXRfc2VwZXJhdG9ycworICB7CisKKyAgICBjb25zdGV4cHIgYXV0byB0ZW5fbWlsbGlvbiA9IDEwMCcwMDAnMDAwOworICAgIHN0YXRpY19hc3NlcnQodGVuX21pbGxpb24gPT0gMTAwMDAwMDAwLCAiIik7CisKKyAgfQorCisgIG5hbWVzcGFjZSB0ZXN0X3JldHVybl90eXBlX2RlZHVjdGlvbgorICB7CisKKyAgICBhdXRvIGYoaW50JiB4KSB7IHJldHVybiB4OyB9CisgICAgZGVjbHR5cGUoYXV0bykgZyhpbnQmIHgpIHsgcmV0dXJuIHg7IH0KKworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4KKyAgICBzdHJ1Y3QgaXNfc2FtZQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9IGZhbHNlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQgPgorICAgIHN0cnVjdCBpc19zYW1lPFQsIFQ+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0gdHJ1ZTsKKyAgICB9OworCisgICAgaW50CisgICAgdGVzdCgpCisgICAgeworICAgICAgYXV0byB4ID0gMDsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKGYoeCkpPjo6dmFsdWUsICIiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxpbnQmLCBkZWNsdHlwZShnKHgpKT46OnZhbHVlLCAiIik7CisgICAgICByZXR1cm4geDsKKyAgICB9CisKKyAgfQorCit9ICAvLyBuYW1lc3BhY2UgY3h4MTQKKworI2VuZGlmICAvLyBfX2NwbHVzcGx1cyA+PSAyMDE0MDJMCisKK11dKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMHgubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8weC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMzOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHhfMHgubTQKQEAgLTAsMCArMSwxMTEgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzB4Lmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIEFYX0NYWF9DT01QSUxFX1NURENYWF8wWAorIworIyBERVNDUklQVElPTgorIworIyAgIENoZWNrIGZvciBiYXNlbGluZSBsYW5ndWFnZSBjb3ZlcmFnZSBpbiB0aGUgY29tcGlsZXIgZm9yIHRoZSBDKysweAorIyAgIHN0YW5kYXJkLgorIworIyAgIFRoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZCBhbmQgaGFzIGJlZW4gc3VwZXJzZWRlZCBieSB0aGUKKyMgICBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTEgbWFjcm8gd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgMTAKKworQVVfQUxJQVMoW0FDX0NYWF9DT01QSUxFX1NURENYWF8wWF0sIFtBWF9DWFhfQ09NUElMRV9TVERDWFhfMFhdKQorQUNfREVGVU4oW0FYX0NYWF9DT01QSUxFX1NURENYWF8wWF0sIFsKKyAgQUNfT0JTT0xFVEUoWyQwXSwgWzsgdXNlIEFYX0NYWF9DT01QSUxFX1NURENYWF8xMSBpbnN0ZWFkXSkKKyAgQUNfQ0FDSEVfQ0hFQ0soaWYgZysrIHN1cHBvcnRzIEMrKzB4IGZlYXR1cmVzIHdpdGhvdXQgYWRkaXRpb25hbCBmbGFncywKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfbmF0aXZlLAorICBbQUNfTEFOR19TQVZFCisgIEFDX0xBTkdfQ1BMVVNQTFVTCisgIEFDX1RSWV9DT01QSUxFKFsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNoZWNrCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA8PSBzaXplb2YoVCksICJub3QgYmlnIGVub3VnaCIpOworICAgIH07CisKKyAgICB0eXBlZGVmIGNoZWNrPGNoZWNrPGJvb2w+PiByaWdodF9hbmdsZV9icmFja2V0czsKKworICAgIGludCBhOworICAgIGRlY2x0eXBlKGEpIGI7CisKKyAgICB0eXBlZGVmIGNoZWNrPGludD4gY2hlY2tfdHlwZTsKKyAgICBjaGVja190eXBlIGM7CisgICAgY2hlY2tfdHlwZSYmIGNyID0gc3RhdGljX2Nhc3Q8Y2hlY2tfdHlwZSYmPihjKTtdLCwKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfbmF0aXZlPXllcywgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfbmF0aXZlPW5vKQorICBBQ19MQU5HX1JFU1RPUkUKKyAgXSkKKworICBBQ19DQUNIRV9DSEVDSyhpZiBnKysgc3VwcG9ydHMgQysrMHggZmVhdHVyZXMgd2l0aCAtc3RkPWMrKzB4LAorICBheF9jdl9jeHhfY29tcGlsZV9jeHgweF9jeHgsCisgIFtBQ19MQU5HX1NBVkUKKyAgQUNfTEFOR19DUExVU1BMVVMKKyAgYWNfc2F2ZV9DWFg9IiRDWFgiCisgIENYWD0iJENYWCAtc3RkPWMrKzB4IgorICBBQ19UUllfQ09NUElMRShbCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjaGVjaworICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFQpLCAibm90IGJpZyBlbm91Z2giKTsKKyAgICB9OworCisgICAgdHlwZWRlZiBjaGVjazxjaGVjazxib29sPj4gcmlnaHRfYW5nbGVfYnJhY2tldHM7CisKKyAgICBpbnQgYTsKKyAgICBkZWNsdHlwZShhKSBiOworCisgICAgdHlwZWRlZiBjaGVjazxpbnQ+IGNoZWNrX3R5cGU7CisgICAgY2hlY2tfdHlwZSBjOworICAgIGNoZWNrX3R5cGUmJiBjciA9IHN0YXRpY19jYXN0PGNoZWNrX3R5cGUmJj4oYyk7XSwsCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X2N4eD15ZXMsIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X2N4eD1ubykKKyAgQ1hYPSIkYWNfc2F2ZV9DWFgiCisgIEFDX0xBTkdfUkVTVE9SRQorICBdKQorCisgIEFDX0NBQ0hFX0NIRUNLKGlmIGcrKyBzdXBwb3J0cyBDKysweCBmZWF0dXJlcyB3aXRoIC1zdGQ9Z251KysweCwKKyAgYXhfY3ZfY3h4X2NvbXBpbGVfY3h4MHhfZ3h4LAorICBbQUNfTEFOR19TQVZFCisgIEFDX0xBTkdfQ1BMVVNQTFVTCisgIGFjX3NhdmVfQ1hYPSIkQ1hYIgorICBDWFg9IiRDWFggLXN0ZD1nbnUrKzB4IgorICBBQ19UUllfQ09NUElMRShbCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjaGVjaworICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFQpLCAibm90IGJpZyBlbm91Z2giKTsKKyAgICB9OworCisgICAgdHlwZWRlZiBjaGVjazxjaGVjazxib29sPj4gcmlnaHRfYW5nbGVfYnJhY2tldHM7CisKKyAgICBpbnQgYTsKKyAgICBkZWNsdHlwZShhKSBiOworCisgICAgdHlwZWRlZiBjaGVjazxpbnQ+IGNoZWNrX3R5cGU7CisgICAgY2hlY2tfdHlwZSBjOworICAgIGNoZWNrX3R5cGUmJiBjciA9IHN0YXRpY19jYXN0PGNoZWNrX3R5cGUmJj4oYyk7XSwsCisgIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X2d4eD15ZXMsIGF4X2N2X2N4eF9jb21waWxlX2N4eDB4X2d4eD1ubykKKyAgQ1hYPSIkYWNfc2F2ZV9DWFgiCisgIEFDX0xBTkdfUkVTVE9SRQorICBdKQorCisgIGlmIHRlc3QgIiRheF9jdl9jeHhfY29tcGlsZV9jeHgweF9uYXRpdmUiID0geWVzIHx8CisgICAgIHRlc3QgIiRheF9jdl9jeHhfY29tcGlsZV9jeHgweF9jeHgiID0geWVzIHx8CisgICAgIHRlc3QgIiRheF9jdl9jeHhfY29tcGlsZV9jeHgweF9neHgiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1REQ1hYXzBYLCxbRGVmaW5lIGlmIGcrKyBzdXBwb3J0cyBDKysweCBmZWF0dXJlcy4gXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzExLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYWRlYWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5tNApAQCAtMCwwICsxLDM5IEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xMS5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTEoW2V4dHxub2V4dF0sIFttYW5kYXRvcnl8b3B0aW9uYWxdKQorIworIyBERVNDUklQVElPTgorIworIyAgIENoZWNrIGZvciBiYXNlbGluZSBsYW5ndWFnZSBjb3ZlcmFnZSBpbiB0aGUgY29tcGlsZXIgZm9yIHRoZSBDKysxMQorIyAgIHN0YW5kYXJkOyBpZiBuZWNlc3NhcnksIGFkZCBzd2l0Y2hlcyB0byBDWFggYW5kIENYWENQUCB0byBlbmFibGUKKyMgICBzdXBwb3J0LgorIworIyAgIFRoaXMgbWFjcm8gaXMgYSBjb252ZW5pZW5jZSBhbGlhcyBmb3IgY2FsbGluZyB0aGUgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYCisjICAgbWFjcm8gd2l0aCB0aGUgdmVyc2lvbiBzZXQgdG8gQysrMTEuICBUaGUgdHdvIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUKKyMgICBmb3J3YXJkZWQgbGl0ZXJhbGx5IGFzIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50IHJlc3BlY3RpdmVseS4KKyMgICBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYIG1hY3JvIGZvcgorIyAgIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBtYWNybywgeW91IGFsc28gbmVlZCB0bworIyAgIGRvd25sb2FkIHRoZSBheF9jeHhfY29tcGlsZV9zdGRjeHgubTQgZmlsZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTIgWmFjayBXZWluYmVyZyA8emFja3dAcGFuaXguY29tPgorIyAgIENvcHlyaWdodCAoYykgMjAxMyBSb3kgU3RvZ25lciA8cm95c3RnbnJAaWNlcy51dGV4YXMuZWR1PgorIyAgIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNSBHb29nbGUgSW5jLjsgY29udHJpYnV0ZWQgYnkgQWxleGV5IFNva29sb3YgPHNva29sb3ZAZ29vZ2xlLmNvbT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTUgUGF1bCBOb3JtYW4gPHBlbm9ybWFuQG1hYy5jb20+CisjICAgQ29weXJpZ2h0IChjKSAyMDE1IE1vcml0eiBLbGFtbWxlciA8bW9yaXR6QGtsYW1tbGVyLmV1PgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCAxNworCitBWF9SRVFVSVJFX0RFRklORUQoW0FYX0NYWF9DT01QSUxFX1NURENYWF0pCitBQ19ERUZVTihbQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzExXSwgW0FYX0NYWF9DT01QSUxFX1NURENYWChbMTFdLCBbJDFdLCBbJDJdKV0pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xNC5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4XzE0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTIzZjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xNC5tNApAQCAtMCwwICsxLDM0IEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X2N4eF9jb21waWxlX3N0ZGN4eF8xNC5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9DWFhfQ09NUElMRV9TVERDWFhfMTQoW2V4dHxub2V4dF0sIFttYW5kYXRvcnl8b3B0aW9uYWxdKQorIworIyBERVNDUklQVElPTgorIworIyAgIENoZWNrIGZvciBiYXNlbGluZSBsYW5ndWFnZSBjb3ZlcmFnZSBpbiB0aGUgY29tcGlsZXIgZm9yIHRoZSBDKysxNAorIyAgIHN0YW5kYXJkOyBpZiBuZWNlc3NhcnksIGFkZCBzd2l0Y2hlcyB0byBDWFggYW5kIENYWENQUCB0byBlbmFibGUKKyMgICBzdXBwb3J0LgorIworIyAgIFRoaXMgbWFjcm8gaXMgYSBjb252ZW5pZW5jZSBhbGlhcyBmb3IgY2FsbGluZyB0aGUgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYCisjICAgbWFjcm8gd2l0aCB0aGUgdmVyc2lvbiBzZXQgdG8gQysrMTQuICBUaGUgdHdvIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUKKyMgICBmb3J3YXJkZWQgbGl0ZXJhbGx5IGFzIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50IHJlc3BlY3RpdmVseS4KKyMgICBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYIG1hY3JvIGZvcgorIyAgIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBtYWNybywgeW91IGFsc28gbmVlZCB0bworIyAgIGRvd25sb2FkIHRoZSBheF9jeHhfY29tcGlsZV9zdGRjeHgubTQgZmlsZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAxNSBNb3JpdHogS2xhbW1sZXIgPG1vcml0ekBrbGFtbWxlci5ldT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55CisjICAgd2FycmFudHkuCisKKyNzZXJpYWwgNAorCitBWF9SRVFVSVJFX0RFRklORUQoW0FYX0NYWF9DT01QSUxFX1NURENYWF0pCitBQ19ERUZVTihbQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXzE0XSwgW0FYX0NYWF9DT01QSUxFX1NURENYWChbMTRdLCBbJDFdLCBbJDJdKV0pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2puaV9pbmNsdWRlX2Rpci5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfam5pX2luY2x1ZGVfZGlyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYWVhNzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X2puaV9pbmNsdWRlX2Rpci5tNApAQCAtMCwwICsxLDEzMCBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfam5pX2luY2x1ZGVfZGlyLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfSk5JX0lOQ0xVREVfRElSCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgQVhfSk5JX0lOQ0xVREVfRElSIGZpbmRzIGluY2x1ZGUgZGlyZWN0b3JpZXMgbmVlZGVkIGZvciBjb21waWxpbmcKKyMgICBwcm9ncmFtcyB1c2luZyB0aGUgSk5JIGludGVyZmFjZS4KKyMKKyMgICBKTkkgaW5jbHVkZSBkaXJlY3RvcmllcyBhcmUgdXN1YWxseSBpbiB0aGUgSmF2YSBkaXN0cmlidXRpb24uIFRoaXMgaXMKKyMgICBkZWR1Y2VkIGZyb20gdGhlIHZhbHVlIG9mICRKQVZBX0hPTUUsICRKQVZBQywgb3IgdGhlIHBhdGggdG8gImphdmFjIiwgaW4KKyMgICB0aGF0IG9yZGVyLiBXaGVuIHRoaXMgbWFjcm8gY29tcGxldGVzLCBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgaXMgbGVmdCBpbgorIyAgIHRoZSB2YXJpYWJsZSBKTklfSU5DTFVERV9ESVJTLgorIworIyAgIEV4YW1wbGUgdXNhZ2UgZm9sbG93czoKKyMKKyMgICAgIEFYX0pOSV9JTkNMVURFX0RJUgorIworIyAgICAgZm9yIEpOSV9JTkNMVURFX0RJUiBpbiAkSk5JX0lOQ0xVREVfRElSUworIyAgICAgZG8KKyMgICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRKTklfSU5DTFVERV9ESVIiCisjICAgICBkb25lCisjCisjICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgYSBzcGVjaWZpYyBjb21waWxlcjoKKyMKKyMgICAtIGF0IHRoZSBjb25maWd1cmUuaW4gbGV2ZWwsIHNldCBKQVZBQz15b3VyY29tcGlsZXIgYmVmb3JlIGNhbGxpbmcKKyMgICBBWF9KTklfSU5DTFVERV9ESVIKKyMKKyMgICAtIGF0IHRoZSBjb25maWd1cmUgbGV2ZWwsIHNldGVudiBKQVZBQworIworIyAgIE5vdGU6IFRoaXMgbWFjcm8gY2FuIHdvcmsgd2l0aCB0aGUgYXV0b2NvbmYgTTQgbWFjcm9zIGZvciBKYXZhIHByb2dyYW1zLgorIyAgIFRoaXMgcGFydGljdWxhciBtYWNybyBpcyBub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwgc2V0IG9mIG1hY3Jvcy4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBEb24gQW5kZXJzb24gPGRkYUBzbGVlcHljYXQuY29tPgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCAxMAorCitBVV9BTElBUyhbQUNfSk5JX0lOQ0xVREVfRElSXSwgW0FYX0pOSV9JTkNMVURFX0RJUl0pCitBQ19ERUZVTihbQVhfSk5JX0lOQ0xVREVfRElSXSxbCisKK0pOSV9JTkNMVURFX0RJUlM9IiIKKworaWYgdGVzdCAieCRKQVZBX0hPTUUiICE9IHg7IHRoZW4KKwlfSlRPUERJUj0iJEpBVkFfSE9NRSIKK2Vsc2UKKwlpZiB0ZXN0ICJ4JEpBVkFDIiA9IHg7IHRoZW4KKwkJSkFWQUM9amF2YWMKKwlmaQorCUFDX1BBVEhfUFJPRyhbX0FDSk5JX0pBVkFDXSwgWyRKQVZBQ10sIFtub10pCisJaWYgdGVzdCAieCRfQUNKTklfSkFWQUMiID0geG5vOyB0aGVuCisJCUFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgSkRLOyB0cnkgc2V0dGluZyBcJEpBVkFDIG9yIFwkSkFWQV9IT01FXSkKKwlmaQorCV9BQ0pOSV9GT0xMT1dfU1lNTElOS1MoIiRfQUNKTklfSkFWQUMiKQorCV9KVE9QRElSPWBlY2hvICIkX0FDSk5JX0ZPTExPV0VEIiB8IHNlZCAtZSAnczovLyo6LzpnJyAtZSAnczovW1teL11dKiQ6OidgCitmaQorCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgZGFyd2luKikgICAgICAgIF9KVE9QRElSPWBlY2hvICIkX0pUT1BESVIiIHwgc2VkIC1lICdzOi9bW14vXV0qJDo6J2AKKyAgICAgICAgICAgICAgICAgICAgICAgIF9KSU5DPSIkX0pUT1BESVIvSGVhZGVycyI7OworICAgICAgICAqKSAgICAgICAgICAgICAgX0pJTkM9IiRfSlRPUERJUi9pbmNsdWRlIjs7Citlc2FjCitfQVNfRUNIT19MT0coW19KVE9QRElSPSRfSlRPUERJUl0pCitfQVNfRUNIT19MT0coW19KSU5DPSRfSklOQ10pCisKKyMgT24gTWFjIE9TIFggMTAuNi40LCBqbmkuaCBpcyBhIHN5bWxpbms6CisjIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0phdmFWTS5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9IZWFkZXJzL2puaS5oCisjIC0+IC4uLy4uL0N1cnJlbnRKREsvSGVhZGVycy9qbmkuaC4KKyMKKyMgT3ZlcnJpZGUgQUNfQ0hFQ0tfRklMRSB3aXRoIG91ciBvd24gQVhfQ0hFQ0tfRklMRSB0byBmaXgKKyMgY3Jvc3MtY29tcGlsYXRpb24gaXNzdWVzLgorCitBWF9DSEVDS19GSUxFKFskX0pJTkMvam5pLmhdLAorCVtKTklfSU5DTFVERV9ESVJTPSIkSk5JX0lOQ0xVREVfRElSUyAkX0pJTkMiXSwKKwlbX0pUT1BESVI9YGVjaG8gIiRfSlRPUERJUiIgfCBzZWQgLWUgJ3M6L1tbXi9dXSokOjonYAorCSBBWF9DSEVDS19GSUxFKFskX0pUT1BESVIvaW5jbHVkZS9qbmkuaF0sCisJCVtKTklfSU5DTFVERV9ESVJTPSIkSk5JX0lOQ0xVREVfRElSUyAkX0pUT1BESVIvaW5jbHVkZSJdLAorICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgSkRLIGhlYWRlciBmaWxlc10pKQorCV0pCisKKyMgZ2V0IHRoZSBsaWtlbHkgc3ViZGlyZWN0b3JpZXMgZm9yIHN5c3RlbSBzcGVjaWZpYyBqYXZhIGluY2x1ZGVzCitjYXNlICIkaG9zdF9vcyIgaW4KK2JzZGkqKSAgICAgICAgICBfSk5JX0lOQ19TVUJESVJTPSJic2RvcyI7OworZnJlZWJzZCopICAgICAgIF9KTklfSU5DX1NVQkRJUlM9ImZyZWVic2QiOzsKK2xpbnV4KikgICAgICAgICBfSk5JX0lOQ19TVUJESVJTPSJsaW51eCBnZW51bml4Ijs7Citvc2YqKSAgICAgICAgICAgX0pOSV9JTkNfU1VCRElSUz0iYWxwaGEiOzsKK3NvbGFyaXMqKSAgICAgICBfSk5JX0lOQ19TVUJESVJTPSJzb2xhcmlzIjs7CittaW5ndyopCQlfSk5JX0lOQ19TVUJESVJTPSJ3aW4zMiI7OworY3lnd2luKikJX0pOSV9JTkNfU1VCRElSUz0id2luMzIiOzsKKyopICAgICAgICAgICAgICBfSk5JX0lOQ19TVUJESVJTPSJnZW51bml4Ijs7Citlc2FjCisKKyMgYWRkIGFueSBzdWJkaXJlY3RvcmllcyB0aGF0IGFyZSBwcmVzZW50Citmb3IgSklOQ1NVQkRJUiBpbiAkX0pOSV9JTkNfU1VCRElSUworZG8KKyAgICBpZiB0ZXN0IC1kICIkX0pUT1BESVIvaW5jbHVkZS8kSklOQ1NVQkRJUiI7IHRoZW4KKyAgICAgICAgIEpOSV9JTkNMVURFX0RJUlM9IiRKTklfSU5DTFVERV9ESVJTICRfSlRPUERJUi9pbmNsdWRlLyRKSU5DU1VCRElSIgorICAgIGZpCitkb25lCitdKQorCisjIF9BQ0pOSV9GT0xMT1dfU1lNTElOS1MgPHBhdGg+CisjIEZvbGxvd3Mgc3ltYm9saWMgbGlua3Mgb24gPHBhdGg+LAorIyBmaW5hbGx5IHNldHRpbmcgdmFyaWFibGUgX0FDSk5JX0ZPTExPV0VECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQUNKTklfRk9MTE9XX1NZTUxJTktTXSxbCisjIGZpbmQgdGhlIGluY2x1ZGUgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBqYXZhYyBleGVjdXRhYmxlCitfY3VyPSIkMSIKK3doaWxlIGxzIC1sZCAiJF9jdXIiIDI+L2Rldi9udWxsIHwgZ3JlcCAiIC0+ICIgPi9kZXYvbnVsbDsgZG8KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtzeW1saW5rIGZvciAkX2N1cl0pCisgICAgICAgIF9zbGluaz1gbHMgLWxkICIkX2N1ciIgfCBzZWQgJ3MvLiogLT4gLy8nYAorICAgICAgICBjYXNlICIkX3NsaW5rIiBpbgorICAgICAgICAvKikgX2N1cj0iJF9zbGluayI7OworICAgICAgICAjICdYJyBhdm9pZHMgdHJpZ2dlcmluZyB1bndhbnRlZCBlY2hvIG9wdGlvbnMuCisgICAgICAgICopIF9jdXI9YGVjaG8gIlgkX2N1ciIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgJ3M6W1teL11dKiQ6OidgIiRfc2xpbmsiOzsKKyAgICAgICAgZXNhYworICAgICAgICBBQ19NU0dfUkVTVUxUKFskX2N1cl0pCitkb25lCitfQUNKTklfRk9MTE9XRUQ9IiRfY3VyIgorXSkjIF9BQ0pOSQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9wcm9nX2RveHlnZW4ubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X3Byb2dfZG94eWdlbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGIyMmIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9heF9wcm9nX2RveHlnZW4ubTQKQEAgLTAsMCArMSw1MzIgQEAKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfcHJvZ19kb3h5Z2VuLmh0bWwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNZTk9QU0lTCisjCisjICAgRFhfSU5JVF9ET1hZR0VOKFBST0pFQ1QtTkFNRSwgRE9YWUZJTEUtUEFUSCwgW09VVFBVVC1ESVJdKQorIyAgIERYX0RPWFlHRU5fRkVBVFVSRShPTnxPRkYpCisjICAgRFhfRE9UX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX0hUTUxfRkVBVFVSRShPTnxPRkYpCisjICAgRFhfQ0hNX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX0NISV9GRUFUVVJFKE9OfE9GRikKKyMgICBEWF9NQU5fRkVBVFVSRShPTnxPRkYpCisjICAgRFhfUlRGX0ZFQVRVUkUoT058T0ZGKQorIyAgIERYX1hNTF9GRUFUVVJFKE9OfE9GRikKKyMgICBEWF9QREZfRkVBVFVSRShPTnxPRkYpCisjICAgRFhfUFNfRkVBVFVSRShPTnxPRkYpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhlIERYXypfRkVBVFVSRSBtYWNyb3MgY29udHJvbCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgZ2l2ZW4KKyMgICBEb3h5Z2VuIGZlYXR1cmUuIFN1cHBvcnRlZCBmZWF0dXJlcyBhcmUgJ0RPWFlHRU4nIGl0c2VsZiwgJ0RPVCcgZm9yCisjICAgZ2VuZXJhdGluZyBncmFwaGljcywgJ0hUTUwnIGZvciBwbGFpbiBIVE1MLCAnQ0hNJyBmb3IgY29tcHJlc3NlZCBIVE1MCisjICAgaGVscCAoZm9yIE1TIHVzZXJzKSwgJ0NISScgZm9yIGdlbmVyYXRpbmcgYSBzZXBlcmF0ZSAuY2hpIGZpbGUgYnkgdGhlCisjICAgLmNobSBmaWxlLCBhbmQgJ01BTicsICdSVEYnLCAnWE1MJywgJ1BERicgYW5kICdQUycgZm9yIHRoZSBhcHByb3ByaWF0ZQorIyAgIG91dHB1dCBmb3JtYXRzLiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRE9YWUdFTl9QQVBFUl9TSVpFIG1heSBiZQorIyAgIHNwZWNpZmllZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCAnYTR3aWRlJyBwYXBlciBzaXplLgorIworIyAgIEJ5IGRlZmF1bHQsIEhUTUwsIFBERiBhbmQgUFMgZG9jdW1lbnRhdGlvbiBpcyBnZW5lcmF0ZWQgYXMgdGhpcyBzZWVtcyB0bworIyAgIGJlIHRoZSBtb3N0IHBvcHVsYXIgYW5kIHBvcnRhYmxlIGNvbWJpbmF0aW9uLiBNQU4gcGFnZXMgY3JlYXRlZCBieQorIyAgIERveHlnZW4gYXJlIHVzdWFsbHkgcHJvYmxlbWF0aWMsIHRob3VnaCBieSBwaWNraW5nIGFuIGFwcHJvcHJpYXRlIHN1YnNldAorIyAgIGFuZCBkb2luZyBzb21lIG1hc3NhZ2luZyB0aGV5IG1pZ2h0IGJlIGJldHRlciB0aGFuIG5vdGhpbmcuIENITSBhbmQgUlRGCisjICAgYXJlIHNwZWNpZmljIGZvciBNUyAobm90ZSB0aGF0IHlvdSBjYW4ndCBnZW5lcmF0ZSBib3RoIEhUTUwgYW5kIENITSBhdAorIyAgIHRoZSBzYW1lIHRpbWUpLiBUaGUgWE1MIGlzIHJhdGhlciB1c2VsZXNzIHVubGVzcyB5b3UgYXBwbHkgc3BlY2lhbGl6ZWQKKyMgICBwb3N0LXByb2Nlc3NpbmcgdG8gaXQuCisjCisjICAgVGhlIG1hY3JvcyBtYWlubHkgY29udHJvbCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiB0aGUgZmVhdHVyZS4gVGhlIHVzZSBjYW4KKyMgICBvdmVycmlkZSB0aGUgZGVmYXVsdCBieSBzcGVjaWZ5aW5nIC0tZW5hYmxlIG9yIC0tZGlzYWJsZS4gVGhlIG1hY3JvcworIyAgIGVuc3VyZSB0aGF0IGNvbnRyYWRpY3RvcnkgZmxhZ3MgYXJlIG5vdCBnaXZlbiAoZS5nLiwKKyMgICAtLWVuYWJsZS1kb3h5Z2VuLWh0bWwgYW5kIC0tZW5hYmxlLWRveHlnZW4tY2htLAorIyAgIC0tZW5hYmxlLWRveHlnZW4tYW55dGhpbmcgd2l0aCAtLWRpc2FibGUtZG94eWdlbiwgZXRjLikgRmluYWxseSwgZWFjaAorIyAgIGZlYXR1cmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkICh3aXRoIGEgd2FybmluZykgaWYgdGhlIHJlcXVpcmVkCisjICAgcHJvZ3JhbXMgYXJlIG1pc3NpbmcuCisjCisjICAgT25jZSBhbGwgdGhlIGZlYXR1cmUgZGVmYXVsdHMgaGF2ZSBiZWVuIHNwZWNpZmllZCwgY2FsbCBEWF9JTklUX0RPWFlHRU4KKyMgICB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczogYSBvbmUtd29yZCBuYW1lIGZvciB0aGUgcHJvamVjdCBmb3IgdXNlCisjICAgYXMgYSBmaWxlbmFtZSBiYXNlIGV0Yy4sIGFuIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lICh0aGUKKyMgICBkZWZhdWx0IGlzICdEb3h5ZmlsZScsIHRoZSBzYW1lIGFzIERveHlnZW4ncyBkZWZhdWx0KSwgYW5kIGFuIG9wdGlvbmFsCisjICAgb3V0cHV0IGRpcmVjdG9yeSBuYW1lICh0aGUgZGVmYXVsdCBpcyAnZG94eWdlbi1kb2MnKS4KKyMKKyMgICBBdXRvbWFrZSBTdXBwb3J0CisjCisjICAgVGhlIGZvbGxvd2luZyBpcyBhIHRlbXBsYXRlIGFtaW5jbHVkZS5hbSBmaWxlIGZvciB1c2Ugd2l0aCBBdXRvbWFrZS4KKyMgICBNYWtlIHRhcmdldHMgYW5kIHZhcmlhYmxlcyB2YWx1ZXMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHZhcmlvdXMKKyMgICBEWF9DT05EXyogY29uZGl0aW9uYWxzIHNldCBieSBhdXRvY29uZi4KKyMKKyMgICBUaGUgcHJvdmlkZWQgdGFyZ2V0cyBhcmU6CisjCisjICAgICBkb3h5Z2VuLWRvYzogR2VuZXJhdGUgYWxsIGRveHlnZW4gZG9jdW1lbnRhdGlvbi4KKyMKKyMgICAgIGRveHlnZW4tcnVuOiBSdW4gZG94eWdlbiwgd2hpY2ggd2lsbCBnZW5lcmF0ZSBzb21lIG9mIHRoZQorIyAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gKEhUTUwsIENITSwgQ0hJLCBNQU4sIFJURiwgWE1MKQorIyAgICAgICAgICAgICAgICAgIGJ1dCB3aWxsIG5vdCBkbyB0aGUgcG9zdCBwcm9jZXNzaW5nIHJlcXVpcmVkCisjICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZXN0IG9mIGl0IChQUywgUERGLCBhbmQgc29tZSBNQU4pLgorIworIyAgICAgZG94eWdlbi1tYW46IFJlbmFtZSBzb21lIGRveHlnZW4gZ2VuZXJhdGVkIG1hbiBwYWdlcy4KKyMKKyMgICAgIGRveHlnZW4tcHM6ICBHZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbi4KKyMKKyMgICAgIGRveHlnZW4tcGRmOiBHZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uLgorIworIyAgIE5vdGUgdGhhdCBieSBkZWZhdWx0IHRoZXNlIGFyZSBub3QgaW50ZWdyYXRlZCBpbnRvIHRoZSBhdXRvbWFrZSB0YXJnZXRzLgorIyAgIElmIGRveHlnZW4gaXMgdXNlZCB0byBnZW5lcmF0ZSBtYW4gcGFnZXMsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzCisjICAgaW50ZWdyYXRpb24gYnkgc2V0dGluZyBtYW4zX01BTlMgdG8gdGhlIGxpc3Qgb2YgbWFuIHBhZ2VzIGdlbmVyYXRlZCBhbmQKKyMgICB0aGVuIGFkZGluZyB0aGUgZGVwZW5kZW5jeToKKyMKKyMgICAgICQobWFuM19NQU5TKTogZG94eWdlbi1kb2MKKyMKKyMgICBUaGlzIHdpbGwgY2F1c2UgbWFrZSB0byBydW4gZG94eWdlbiBhbmQgZ2VuZXJhdGUgYWxsIHRoZSBkb2N1bWVudGF0aW9uLgorIworIyAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGUgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbToKKyMKKyMgICAgIERYX0NMRUFORklMRVMgPSBldmVyeXRoaW5nIHRvIGNsZWFuLgorIworIyAgIFRoZW4gYWRkIHRoaXMgdmFyaWFibGUgdG8gTU9TVExZQ0xFQU5GSUxFUy4KKyMKKyMgICAgIC0tLS0tIGJlZ2luIGFtaW5jbHVkZS5hbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIEZvcm1hdC1pbmRlcGVuZGVudCBEb3h5Z2VuIHJ1bGVzLiAjIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjCisjICAgICBpZiBEWF9DT05EX2RvYworIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyAgICAgIyMgUnVsZXMgc3BlY2lmaWMgZm9yIEhUTUwgb3V0cHV0LiAjIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9odG1sCisjCisjICAgICBEWF9DTEVBTl9IVE1MID0gQERYX0RPQ0RJUkAvaHRtbAorIworIyAgICAgZW5kaWYgRFhfQ09ORF9odG1sCisjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIFJ1bGVzIHNwZWNpZmljIGZvciBDSE0gb3V0cHV0LiAjIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjCisjICAgICBpZiBEWF9DT05EX2NobQorIworIyAgICAgRFhfQ0xFQU5fQ0hNID0gQERYX0RPQ0RJUkAvY2htCisjCisjICAgICBpZiBEWF9DT05EX2NoaQorIworIyAgICAgRFhfQ0xFQU5fQ0hJID0gQERYX0RPQ0RJUkAvQFBBQ0tBR0VALmNoaQorIworIyAgICAgZW5kaWYgRFhfQ09ORF9jaGkKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfY2htCisjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgICAgICMjIFJ1bGVzIHNwZWNpZmljIGZvciBNQU4gb3V0cHV0LiAjIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjCisjICAgICBpZiBEWF9DT05EX21hbgorIworIyAgICAgRFhfQ0xFQU5fTUFOID0gQERYX0RPQ0RJUkAvbWFuCisjCisjICAgICBlbmRpZiBEWF9DT05EX21hbgorIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjICAgICAjIyBSdWxlcyBzcGVjaWZpYyBmb3IgUlRGIG91dHB1dC4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9ydGYKKyMKKyMgICAgIERYX0NMRUFOX1JURiA9IEBEWF9ET0NESVJAL3J0ZgorIworIyAgICAgZW5kaWYgRFhfQ09ORF9ydGYKKyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyAgICAgIyMgUnVsZXMgc3BlY2lmaWMgZm9yIFhNTCBvdXRwdXQuICMjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMKKyMgICAgIGlmIERYX0NPTkRfeG1sCisjCisjICAgICBEWF9DTEVBTl9YTUwgPSBARFhfRE9DRElSQC94bWwKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfeG1sCisjCisjICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyAgICAgIyMgUnVsZXMgc3BlY2lmaWMgZm9yIFBTIG91dHB1dC4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjCisjICAgICBpZiBEWF9DT05EX3BzCisjCisjICAgICBEWF9DTEVBTl9QUyA9IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wcworIworIyAgICAgRFhfUFNfR09BTCA9IGRveHlnZW4tcHMKKyMKKyMgICAgIGRveHlnZW4tcHM6IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wcworIworIyAgICAgQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnBzOiBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnCisjICAgICAgICAgY2QgQERYX0RPQ0RJUkAvbGF0ZXg7IFwKKyMgICAgICAgICBybSAtZiAqLmF1eCAqLnRvYyAqLmlkeCAqLmluZCAqLmlsZyAqLmxvZyAqLm91dDsgXAorIyAgICAgICAgICQoRFhfTEFURVgpIHJlZm1hbi50ZXg7IFwKKyMgICAgICAgICAkKE1BS0VJTkRFWF9QQVRIKSByZWZtYW4uaWR4OyBcCisjICAgICAgICAgJChEWF9MQVRFWCkgcmVmbWFuLnRleDsgXAorIyAgICAgICAgIGNvdW50ZG93bj01OyBcCisjICAgICAgICAgd2hpbGUgJChEWF9FR1JFUCkgJ1JlcnVuIChMYVRlWHx0byBnZXQgY3Jvc3MtcmVmZXJlbmNlcyByaWdodCknIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZtYW4ubG9nID4gL2Rldi9udWxsIDI+JjEgXAorIyAgICAgICAgICAgICYmIHRlc3QgJCRjb3VudGRvd24gLWd0IDA7IGRvIFwKKyMgICAgICAgICAgICAgJChEWF9MQVRFWCkgcmVmbWFuLnRleDsgXAorIyAgICAgICAgICAgICBjb3VudGRvd249YGV4cHIgJCRjb3VudGRvd24gLSAxYDsgXAorIyAgICAgICAgIGRvbmU7IFwKKyMgICAgICAgICAkKERYX0RWSVBTKSAtbyAuLi9AUEFDS0FHRUAucHMgcmVmbWFuLmR2aQorIworIyAgICAgZW5kaWYgRFhfQ09ORF9wcworIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjICAgICAjIyBSdWxlcyBzcGVjaWZpYyBmb3IgUERGIG91dHB1dC4gIyMKKyMgICAgICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9wZGYKKyMKKyMgICAgIERYX0NMRUFOX1BERiA9IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wZGYKKyMKKyMgICAgIERYX1BERl9HT0FMID0gZG94eWdlbi1wZGYKKyMKKyMgICAgIGRveHlnZW4tcGRmOiBARFhfRE9DRElSQC9AUEFDS0FHRUAucGRmCisjCisjICAgICBARFhfRE9DRElSQC9AUEFDS0FHRUAucGRmOiBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnCisjICAgICAgICAgY2QgQERYX0RPQ0RJUkAvbGF0ZXg7IFwKKyMgICAgICAgICBybSAtZiAqLmF1eCAqLnRvYyAqLmlkeCAqLmluZCAqLmlsZyAqLmxvZyAqLm91dDsgXAorIyAgICAgICAgICQoRFhfUERGTEFURVgpIHJlZm1hbi50ZXg7IFwKKyMgICAgICAgICAkKERYX01BS0VJTkRFWCkgcmVmbWFuLmlkeDsgXAorIyAgICAgICAgICQoRFhfUERGTEFURVgpIHJlZm1hbi50ZXg7IFwKKyMgICAgICAgICBjb3VudGRvd249NTsgXAorIyAgICAgICAgIHdoaWxlICQoRFhfRUdSRVApICdSZXJ1biAoTGFUZVh8dG8gZ2V0IGNyb3NzLXJlZmVyZW5jZXMgcmlnaHQpJyBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbWFuLmxvZyA+IC9kZXYvbnVsbCAyPiYxIFwKKyMgICAgICAgICAgICAmJiB0ZXN0ICQkY291bnRkb3duIC1ndCAwOyBkbyBcCisjICAgICAgICAgICAgICQoRFhfUERGTEFURVgpIHJlZm1hbi50ZXg7IFwKKyMgICAgICAgICAgICAgY291bnRkb3duPWBleHByICQkY291bnRkb3duIC0gMWA7IFwKKyMgICAgICAgICBkb25lOyBcCisjICAgICAgICAgbXYgcmVmbWFuLnBkZiAuLi9AUEFDS0FHRUAucGRmCisjCisjICAgICBlbmRpZiBEWF9DT05EX3BkZgorIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyAgICAgIyMgUnVsZXMgc3BlY2lmaWMgZm9yIExhVGVYIChzaGFyZWQgZm9yIFBTIGFuZCBQREYpLiAjIworIyAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIworIyAgICAgaWYgRFhfQ09ORF9sYXRleAorIworIyAgICAgRFhfQ0xFQU5fTEFURVggPSBARFhfRE9DRElSQC9sYXRleAorIworIyAgICAgZW5kaWYgRFhfQ09ORF9sYXRleAorIworIyAgICAgLlBIT05ZOiBkb3h5Z2VuLXJ1biBkb3h5Z2VuLWRvYyAkKERYX1BTX0dPQUwpICQoRFhfUERGX0dPQUwpCisjCisjICAgICAuSU5URVJNRURJQVRFOiBkb3h5Z2VuLXJ1biAkKERYX1BTX0dPQUwpICQoRFhfUERGX0dPQUwpCisjCisjICAgICBkb3h5Z2VuLXJ1bjogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnRhZworIworIyAgICAgZG94eWdlbi1kb2M6IGRveHlnZW4tcnVuICQoRFhfUFNfR09BTCkgJChEWF9QREZfR09BTCkKKyMKKyMgICAgIEBEWF9ET0NESVJAL0BQQUNLQUdFQC50YWc6ICQoRFhfQ09ORklHKSAkKHBrZ2luY2x1ZGVfSEVBREVSUykKKyMgICAgICAgICBybSAtcmYgQERYX0RPQ0RJUkAKKyMgICAgICAgICAkKERYX0VOVikgJChEWF9ET1hZR0VOKSAkKHNyY2RpcikvJChEWF9DT05GSUcpCisjCisjICAgICBEWF9DTEVBTkZJTEVTID0gXAorIyAgICAgICAgIEBEWF9ET0NESVJAL0BQQUNLQUdFQC50YWcgXAorIyAgICAgICAgIC1yIFwKKyMgICAgICAgICAkKERYX0NMRUFOX0hUTUwpIFwKKyMgICAgICAgICAkKERYX0NMRUFOX0NITSkgXAorIyAgICAgICAgICQoRFhfQ0xFQU5fQ0hJKSBcCisjICAgICAgICAgJChEWF9DTEVBTl9NQU4pIFwKKyMgICAgICAgICAkKERYX0NMRUFOX1JURikgXAorIyAgICAgICAgICQoRFhfQ0xFQU5fWE1MKSBcCisjICAgICAgICAgJChEWF9DTEVBTl9QUykgXAorIyAgICAgICAgICQoRFhfQ0xFQU5fUERGKSBcCisjICAgICAgICAgJChEWF9DTEVBTl9MQVRFWCkKKyMKKyMgICAgIGVuZGlmIERYX0NPTkRfZG9jCisjCisjICAgICAtLS0tLSBlbmQgYW1pbmNsdWRlLmFtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA5IE9yZW4gQmVuLUtpa2kgPG9yZW5AYmVuLWtpa2kub3JnPgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywgd2l0aG91dCBhbnkKKyMgICB3YXJyYW50eS4KKworI3NlcmlhbCAxMgorCisjIyAtLS0tLS0tLS0tIyMKKyMjIERlZmF1bHRzLiAjIworIyMgLS0tLS0tLS0tLSMjCisKK0RYX0VOVj0iIgorQUNfREVGVU4oW0RYX0ZFQVRVUkVfZG9jXSwgIE9OKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfZG90XSwgIE9GRikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX21hbl0sICBPRkYpCitBQ19ERUZVTihbRFhfRkVBVFVSRV9odG1sXSwgT04pCitBQ19ERUZVTihbRFhfRkVBVFVSRV9jaG1dLCAgT0ZGKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfY2hpXSwgIE9GRikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX3J0Zl0sICBPRkYpCitBQ19ERUZVTihbRFhfRkVBVFVSRV94bWxdLCAgT0ZGKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfcGRmXSwgIE9OKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfcHNdLCAgIE9OKQorCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFByaXZhdGUgbWFjcm9zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgRFhfRU5WX0FQUEVORChWQVJJQUJMRSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgVkFSSUFCTEU9IlZBTFVFIiB0byBEWF9FTlYgZm9yIGludm9raW5nIGRveHlnZW4uCitBQ19ERUZVTihbRFhfRU5WX0FQUEVORF0sIFtBQ19TVUJTVChbRFhfRU5WXSwgWyIkRFhfRU5WICQxPSckMiciXSldKQorCisjIERYX0RJUk5BTUVfRVhQUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIGludG8gYSBzaGVsbCBleHByZXNzaW9uIHByaW50cyB0aGUgZGlyZWN0b3J5IHBhcnQgb2YgYSBwYXRoLgorQUNfREVGVU4oW0RYX0RJUk5BTUVfRVhQUl0sCisgICAgICAgICBbW2V4cHIgIi4kMSIgOiAnXChcLlwpW14vXSokJyBcfCAieCQxIiA6ICd4XCguKlwpL1teL10qJCddXSkKKworIyBEWF9JRl9GRUFUVVJFKEZFQVRVUkUsIElGLU9OLCBJRi1PRkYpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kcyBhY2NvcmRpbmcgdG8gdGhlIE00IChzdGF0aWMpIHN0YXR1cyBvZiB0aGUgZmVhdHVyZS4KK0FDX0RFRlVOKFtEWF9JRl9GRUFUVVJFXSwgW2lmZWxzZShEWF9GRUFUVVJFXyQxLCBPTiwgWyQyXSwgWyQzXSldKQorCisjIERYX1JFUVVJUkVfUFJPRyhWQVJJQUJMRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1aXJlIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbSB0byBiZSBmb3VuZCBmb3IgdGhlIERYX0NVUlJFTlRfRkVBVFVSRSB0byB3b3JrLgorQUNfREVGVU4oW0RYX1JFUVVJUkVfUFJPR10sIFsKK0FDX1BBVEhfVE9PTChbJDFdLCBbJDJdKQoraWYgdGVzdCAiJERYX0ZMQUdfW11EWF9DVVJSRU5UX0ZFQVRVUkUkJDEiID0gMTsgdGhlbgorICAgIEFDX01TR19XQVJOKFskMiBub3QgZm91bmQgLSB3aWxsIG5vdCBEWF9DVVJSRU5UX0RFU0NSSVBUSU9OXSkKKyAgICBBQ19TVUJTVChEWF9GTEFHX1tdRFhfQ1VSUkVOVF9GRUFUVVJFLCAwKQorZmkKK10pCisKKyMgRFhfVEVTVF9GRUFUVVJFKEZFQVRVUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgdG8gYSBzaGVsbCBleHByZXNzaW9uIHRlc3Rpbmcgd2hldGhlciB0aGUgZmVhdHVyZSBpcyBhY3RpdmUuCitBQ19ERUZVTihbRFhfVEVTVF9GRUFUVVJFXSwgW3Rlc3QgIiREWF9GTEFHXyQxIiA9IDFdKQorCisjIERYX0NIRUNLX0RFUEVORChSRVFVSVJFRF9GRUFUVVJFLCBSRVFVSVJFRF9TVEFURSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBWZXJpZnkgdGhhdCBhIHJlcXVpcmVkIGZlYXR1cmVzIGhhcyB0aGUgcmlnaHQgc3RhdGUgYmVmb3JlIHRyeWluZyB0byB0dXJuIG9uCisjIHRoZSBEWF9DVVJSRU5UX0ZFQVRVUkUuCitBQ19ERUZVTihbRFhfQ0hFQ0tfREVQRU5EXSwgWwordGVzdCAiJERYX0ZMQUdfJDEiID0gIiQyIiBcCit8fCBBQ19NU0dfRVJST1IoW2RveHlnZW4tRFhfQ1VSUkVOVF9GRUFUVVJFIGlmZWxzZShbJDJdLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBjb250cmFkaWN0cykgZG94eWdlbi1EWF9DVVJSRU5UX0ZFQVRVUkVdKQorXSkKKworIyBEWF9DTEVBUl9ERVBFTkQoRkVBVFVSRSwgUkVRVUlSRURfRkVBVFVSRSwgUkVRVUlSRURfU1RBVEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHVybiBvZmYgdGhlIERYX0NVUlJFTlRfRkVBVFVSRSBpZiB0aGUgcmVxdWlyZWQgZmVhdHVyZSBpcyBvZmYuCitBQ19ERUZVTihbRFhfQ0xFQVJfREVQRU5EXSwgWwordGVzdCAiJERYX0ZMQUdfJDEiID0gIiQyIiB8fCBBQ19TVUJTVChEWF9GTEFHX1tdRFhfQ1VSUkVOVF9GRUFUVVJFLCAwKQorXSkKKworIyBEWF9GRUFUVVJFX0FSRyhGRUFUVVJFLCBERVNDUklQVElPTiwKKyMgICAgICAgICAgICAgICAgQ0hFQ0tfREVQRU5ELCBDTEVBUl9ERVBFTkQsCisjICAgICAgICAgICAgICAgIFJFUVVJUkUsIERPLUlGLU9OLCBETy1JRi1PRkYpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhcnNlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIGNvbnRyb2xsaW5nIGEgZmVhdHVyZS4gQ0hFQ0tfREVQRU5EIGlzIGNhbGxlZAorIyBpZiB0aGUgdXNlciBleHBsaWNpdGx5IHR1cm5zIHRoZSBmZWF0dXJlIG9uIChhbmQgaW52b2tlcyBEWF9DSEVDS19ERVBFTkQpLAorIyBvdGhlcndpc2UgQ0xFQVJfREVQRU5EIGlzIGNhbGxlZCB0byB0dXJuIG9mZiB0aGUgZGVmYXVsdCBzdGF0ZSBpZiBhIHJlcXVpcmVkCisjIGZlYXR1cmUgaXMgZGlzYWJsZWQgKHVzaW5nIERYX0NMRUFSX0RFUEVORCkuIFJFUVVJUkUgcGVyZm9ybXMgYWRkaXRpb25hbAorIyByZXF1aXJlbWVudCB0ZXN0cyAoRFhfUkVRVUlSRV9QUk9HKS4gRmluYWxseSwgYW4gYXV0b21ha2UgZmxhZyBpcyBzZXQgYW5kCisjIERPLUlGLU9OIG9yIERPLUlGLU9GRiBhcmUgY2FsbGVkIGFjY29yZGluZyB0byB0aGUgZmluYWwgc3RhdGUgb2YgdGhlIGZlYXR1cmUuCitBQ19ERUZVTihbRFhfQVJHX0FCTEVdLCBbCisgICAgQUNfREVGVU4oW0RYX0NVUlJFTlRfRkVBVFVSRV0sIFskMV0pCisgICAgQUNfREVGVU4oW0RYX0NVUlJFTlRfREVTQ1JJUFRJT05dLCBbJDJdKQorICAgIEFDX0FSR19FTkFCTEUoZG94eWdlbi0kMSwKKyAgICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhEWF9JRl9GRUFUVVJFKFskMV0sIFstLWRpc2FibGUtZG94eWdlbi0kMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS1lbmFibGUtZG94eWdlbi0kMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERYX0lGX0ZFQVRVUkUoWyQxXSwgW2Rvbid0ICQyXSwgWyQyXSkpXSwKKyAgICAgICAgICAgICAgICAgIFsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIEFDX1NVQlNUKFtEWF9GTEFHXyQxXSwgMSkKKyAgICAkMworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBBQ19TVUJTVChbRFhfRkxBR18kMV0sIDApCis7OyAjKAorKikKKyAgICBBQ19NU0dfRVJST1IoW2ludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4tJDFdKQorOzsKK2VzYWMKK10sIFsKK0FDX1NVQlNUKFtEWF9GTEFHXyQxXSwgW0RYX0lGX0ZFQVRVUkUoWyQxXSwgMSwgMCldKQorJDQKK10pCitpZiBEWF9URVNUX0ZFQVRVUkUoWyQxXSk7IHRoZW4KKyAgICAkNQorICAgIDoKK2ZpCitBTV9DT05ESVRJT05BTChEWF9DT05EXyQxLCBEWF9URVNUX0ZFQVRVUkUoWyQxXSkpCitpZiBEWF9URVNUX0ZFQVRVUkUoWyQxXSk7IHRoZW4KKyAgICAkNgorICAgIDoKK2Vsc2UKKyAgICAkNworICAgIDoKK2ZpCitdKQorCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgUHVibGljIG1hY3Jvcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKKyMgRFhfWFhYX0ZFQVRVUkUoREVGQVVMVF9TVEFURSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtEWF9ET1hZR0VOX0ZFQVRVUkVdLCBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfZG9jXSwgIFskMV0pXSkKK0FDX0RFRlVOKFtEWF9ET1RfRkVBVFVSRV0sICAgICBbQUNfREVGVU4oW0RYX0ZFQVRVUkVfZG90XSwgWyQxXSldKQorQUNfREVGVU4oW0RYX01BTl9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9tYW5dLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX0hUTUxfRkVBVFVSRV0sICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9odG1sXSwgWyQxXSldKQorQUNfREVGVU4oW0RYX0NITV9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9jaG1dLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX0NISV9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9jaGldLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1JURl9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9ydGZdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1hNTF9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV94bWxdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1hNTF9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV94bWxdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1BERl9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9wZGZdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1BTX0ZFQVRVUkVdLCAgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9wc10sICAgWyQxXSldKQorCisjIERYX0lOSVRfRE9YWUdFTihQUk9KRUNULCBbQ09ORklHLUZJTEVdLCBbT1VUUFVULURPQy1ESVJdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUFJPSkVDVCBhbHNvIHNlcnZlcyBhcyB0aGUgYmFzZSBuYW1lIGZvciB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgQ09ORklHLUZJTEUgaXMgIkRveHlmaWxlIiBhbmQgT1VUUFVULURPQy1ESVIgaXMgImRveHlnZW4tZG9jIi4KK0FDX0RFRlVOKFtEWF9JTklUX0RPWFlHRU5dLCBbCisKKyMgRmlsZXM6CitBQ19TVUJTVChbRFhfUFJPSkVDVF0sIFskMV0pCitBQ19TVUJTVChbRFhfQ09ORklHXSwgW2lmZWxzZShbJDJdLCBbXSwgRG94eWZpbGUsIFskMl0pXSkKK0FDX1NVQlNUKFtEWF9ET0NESVJdLCBbaWZlbHNlKFskM10sIFtdLCBkb3h5Z2VuLWRvYywgWyQzXSldKQorCisjIEVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkIGluc2lkZSBkb3h5Z2VuLmNmZzoKK0RYX0VOVl9BUFBFTkQoU1JDRElSLCAkc3JjZGlyKQorRFhfRU5WX0FQUEVORChQUk9KRUNULCAkRFhfUFJPSkVDVCkKK0RYX0VOVl9BUFBFTkQoRE9DRElSLCAkRFhfRE9DRElSKQorRFhfRU5WX0FQUEVORChWRVJTSU9OLCAkUEFDS0FHRV9WRVJTSU9OKQorCisjIERveHlnZW4gaXRzZWxmOgorRFhfQVJHX0FCTEUoZG9jLCBbZ2VuZXJhdGUgYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbl0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfRE9YWUdFTl0sIGRveHlnZW4pCisgICAgICAgICAgICAgRFhfUkVRVUlSRV9QUk9HKFtEWF9QRVJMXSwgcGVybCldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoUEVSTF9QQVRILCAkRFhfUEVSTCldKQorCisjIERvdCBmb3IgZ3JhcGhpY3M6CitEWF9BUkdfQUJMRShkb3QsIFtnZW5lcmF0ZSBncmFwaGljcyBmb3IgZG94eWdlbiBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfRE9UXSwgZG90KV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChIQVZFX0RPVCwgWUVTKQorICAgICAgICAgICAgIERYX0VOVl9BUFBFTkQoRE9UX1BBVEgsIFtgRFhfRElSTkFNRV9FWFBSKCREWF9ET1QpYF0pXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEhBVkVfRE9ULCBOTyldKQorCisjIE1hbiBwYWdlcyBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUobWFuLCBbZ2VuZXJhdGUgZG94eWdlbiBtYW51YWwgcGFnZXNdLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX01BTiwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9NQU4sIE5PKV0pCisKKyMgUlRGIGZpbGUgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKHJ0ZiwgW2dlbmVyYXRlIGRveHlnZW4gUlRGIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX1JURiwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9SVEYsIE5PKV0pCisKKyMgWE1MIGZpbGUgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKHhtbCwgW2dlbmVyYXRlIGRveHlnZW4gWE1MIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX1hNTCwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9YTUwsIE5PKV0pCisKKyMgKENvbXByZXNzZWQpIEhUTUwgaGVscCBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUoY2htLCBbZ2VuZXJhdGUgZG94eWdlbiBjb21wcmVzc2VkIEhUTUwgaGVscCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfSEhDXSwgaGhjKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChISENfUEFUSCwgJERYX0hIQykKKyAgICAgICAgICAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUwsIFlFUykKKyAgICAgICAgICAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUxIRUxQLCBZRVMpXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUxIRUxQLCBOTyldKQorCisjIFNlcGVyYXRlIENISSBmaWxlIGdlbmVyYXRpb24uCitEWF9BUkdfQUJMRShjaGksIFtnZW5lcmF0ZSBkb3h5Z2VuIHNlcGVyYXRlIGNvbXByZXNzZWQgSFRNTCBoZWxwIGluZGV4IGZpbGVdLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChjaG0sIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoY2htLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0NISSwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9DSEksIE5PKV0pCisKKyMgUGxhaW4gSFRNTCBwYWdlcyBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUoaHRtbCwgW2dlbmVyYXRlIGRveHlnZW4gcGxhaW4gSFRNTCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKSBEWF9DSEVDS19ERVBFTkQoY2htLCAwKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSkgRFhfQ0xFQVJfREVQRU5EKGNobSwgMCldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9IVE1MLCBZRVMpXSwKKyAgICAgICAgICAgIFtEWF9URVNUX0ZFQVRVUkUoY2htKSB8fCBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUwsIE5PKV0pCisKKyMgUG9zdFNjcmlwdCBmaWxlIGdlbmVyYXRpb246CitEWF9BUkdfQUJMRShwcywgW2dlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfTEFURVhdLCBsYXRleCkKKyAgICAgICAgICAgICBEWF9SRVFVSVJFX1BST0coW0RYX01BS0VJTkRFWF0sIG1ha2VpbmRleCkKKyAgICAgICAgICAgICBEWF9SRVFVSVJFX1BST0coW0RYX0RWSVBTXSwgZHZpcHMpCisgICAgICAgICAgICAgRFhfUkVRVUlSRV9QUk9HKFtEWF9FR1JFUF0sIGVncmVwKV0pCisKKyMgUERGIGZpbGUgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKHBkZiwgW2dlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfUkVRVUlSRV9QUk9HKFtEWF9QREZMQVRFWF0sIHBkZmxhdGV4KQorICAgICAgICAgICAgIERYX1JFUVVJUkVfUFJPRyhbRFhfTUFLRUlOREVYXSwgbWFrZWluZGV4KQorICAgICAgICAgICAgIERYX1JFUVVJUkVfUFJPRyhbRFhfRUdSRVBdLCBlZ3JlcCldKQorCisjIExhVGVYIGdlbmVyYXRpb24gZm9yIFBTIGFuZC9vciBQREY6CitBTV9DT05ESVRJT05BTChEWF9DT05EX2xhdGV4LCBEWF9URVNUX0ZFQVRVUkUocHMpIHx8IERYX1RFU1RfRkVBVFVSRShwZGYpKQoraWYgRFhfVEVTVF9GRUFUVVJFKHBzKSB8fCBEWF9URVNUX0ZFQVRVUkUocGRmKTsgdGhlbgorICAgIERYX0VOVl9BUFBFTkQoR0VORVJBVEVfTEFURVgsIFlFUykKK2Vsc2UKKyAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0xBVEVYLCBOTykKK2ZpCisKKyMgUGFwZXIgc2l6ZSBmb3IgUFMgYW5kL29yIFBERjoKK0FDX0FSR19WQVIoRE9YWUdFTl9QQVBFUl9TSVpFLAorICAgICAgICAgICBbYTR3aWRlIChkZWZhdWx0KSwgYTQsIGxldHRlciwgbGVnYWwgb3IgZXhlY3V0aXZlXSkKK2Nhc2UgIiRET1hZR0VOX1BBUEVSX1NJWkUiIGluCisjKAorIiIpCisgICAgQUNfU1VCU1QoRE9YWUdFTl9QQVBFUl9TSVpFLCAiIikKKzs7ICMoCithNHdpZGV8YTR8bGV0dGVyfGxlZ2FsfGV4ZWN1dGl2ZSkKKyAgICBEWF9FTlZfQVBQRU5EKFBBUEVSX1NJWkUsICRET1hZR0VOX1BBUEVSX1NJWkUpCis7OyAjKAorKikKKyAgICBBQ19NU0dfRVJST1IoW3Vua25vd24gRE9YWUdFTl9QQVBFUl9TSVpFPSckRE9YWUdFTl9QQVBFUl9TSVpFJ10pCis7OworZXNhYworCisjRm9yIGRlYnVnZ2luZzoKKyNlY2hvIERYX0ZMQUdfZG9jPSREWF9GTEFHX2RvYworI2VjaG8gRFhfRkxBR19kb3Q9JERYX0ZMQUdfZG90CisjZWNobyBEWF9GTEFHX21hbj0kRFhfRkxBR19tYW4KKyNlY2hvIERYX0ZMQUdfaHRtbD0kRFhfRkxBR19odG1sCisjZWNobyBEWF9GTEFHX2NobT0kRFhfRkxBR19jaG0KKyNlY2hvIERYX0ZMQUdfY2hpPSREWF9GTEFHX2NoaQorI2VjaG8gRFhfRkxBR19ydGY9JERYX0ZMQUdfcnRmCisjZWNobyBEWF9GTEFHX3htbD0kRFhfRkxBR194bWwKKyNlY2hvIERYX0ZMQUdfcGRmPSREWF9GTEFHX3BkZgorI2VjaG8gRFhfRkxBR19wcz0kRFhfRkxBR19wcworI2VjaG8gRFhfRU5WPSREWF9FTlYKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X3B0aHJlYWQubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2F4X3B0aHJlYWQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0MDUxZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvYXhfcHRocmVhZC5tNApAQCAtMCwwICsxLDQ4NSBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X3B0aHJlYWQuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9QVEhSRUFEKFtBQ1RJT04tSUYtRk9VTkRbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgQyBwcm9ncmFtcyB1c2luZyBQT1NJWCB0aHJlYWRzLiBJdAorIyAgIHNldHMgdGhlIFBUSFJFQURfTElCUyBvdXRwdXQgdmFyaWFibGUgdG8gdGhlIHRocmVhZHMgbGlicmFyeSBhbmQgbGlua2VyCisjICAgZmxhZ3MsIGFuZCB0aGUgUFRIUkVBRF9DRkxBR1Mgb3V0cHV0IHZhcmlhYmxlIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIKKyMgICBmbGFncyB0aGF0IGFyZSBuZWVkZWQuIChUaGUgdXNlciBjYW4gYWxzbyBmb3JjZSBjZXJ0YWluIGNvbXBpbGVyCisjICAgZmxhZ3MvbGlicyB0byBiZSB0ZXN0ZWQgYnkgc2V0dGluZyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuKQorIworIyAgIEFsc28gc2V0cyBQVEhSRUFEX0NDIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIgdGhhdCBpcyBuZWVkZWQgZm9yCisjICAgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgKGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBDQyBvdGhlcndpc2UpLiAoVGhpcworIyAgIGlzIG5lY2Vzc2FyeSBvbiBBSVggdG8gdXNlIHRoZSBzcGVjaWFsIGNjX3IgY29tcGlsZXIgYWxpYXMuKQorIworIyAgIE5PVEU6IFlvdSBhcmUgYXNzdW1lZCB0byBub3Qgb25seSBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoIHRoZXNlIGZsYWdzLAorIyAgIGJ1dCBhbHNvIHRvIGxpbmsgd2l0aCB0aGVtIGFzIHdlbGwuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbGluayB3aXRoCisjICAgJFBUSFJFQURfQ0MgJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MgJExERkxBR1MgLi4uICRQVEhSRUFEX0xJQlMgJExJQlMKKyMKKyMgICBJZiB5b3UgYXJlIG9ubHkgYnVpbGRpbmcgdGhyZWFkZWQgcHJvZ3JhbXMsIHlvdSBtYXkgd2lzaCB0byB1c2UgdGhlc2UKKyMgICB2YXJpYWJsZXMgaW4geW91ciBkZWZhdWx0IExJQlMsIENGTEFHUywgYW5kIENDOgorIworIyAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyMgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisjICAgICBDQz0iJFBUSFJFQURfQ0MiCisjCisjICAgSW4gYWRkaXRpb24sIGlmIHRoZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSB0aHJlYWQtYXR0cmlidXRlIGNvbnN0YW50CisjICAgaGFzIGEgbm9uc3RhbmRhcmQgbmFtZSwgdGhpcyBtYWNybyBkZWZpbmVzIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHRvCisjICAgdGhhdCBuYW1lIChlLmcuIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQgb24gQUlYKS4KKyMKKyMgICBBbHNvIEhBVkVfUFRIUkVBRF9QUklPX0lOSEVSSVQgaXMgZGVmaW5lZCBpZiBwdGhyZWFkIGlzIGZvdW5kIGFuZCB0aGUKKyMgICBQVEhSRUFEX1BSSU9fSU5IRVJJVCBzeW1ib2wgaXMgZGVmaW5lZCB3aGVuIGNvbXBpbGluZyB3aXRoCisjICAgUFRIUkVBRF9DRkxBR1MuCisjCisjICAgQUNUSU9OLUlGLUZPVU5EIGlzIGEgbGlzdCBvZiBzaGVsbCBjb21tYW5kcyB0byBydW4gaWYgYSB0aHJlYWRzIGxpYnJhcnkKKyMgICBpcyBmb3VuZCwgYW5kIEFDVElPTi1JRi1OT1QtRk9VTkQgaXMgYSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biBpdCBpZiBpdAorIyAgIGlzIG5vdCBmb3VuZC4gSWYgQUNUSU9OLUlGLUZPVU5EIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGFjdGlvbgorIyAgIHdpbGwgZGVmaW5lIEhBVkVfUFRIUkVBRC4KKyMKKyMgICBQbGVhc2UgbGV0IHRoZSBhdXRob3JzIGtub3cgaWYgdGhpcyBtYWNybyBmYWlscyBvbiBhbnkgcGxhdGZvcm0sIG9yIGlmCisjICAgeW91IGhhdmUgYW55IG90aGVyIHN1Z2dlc3Rpb25zIG9yIGNvbW1lbnRzLiBUaGlzIG1hY3JvIHdhcyBiYXNlZCBvbiB3b3JrCisjICAgYnkgU0dKIG9uIGF1dG9jb25mIHNjcmlwdHMgZm9yIEZGVFcgKGh0dHA6Ly93d3cuZmZ0dy5vcmcvKSAod2l0aCBoZWxwCisjICAgZnJvbSBNLiBGcmlnbyksIGFzIHdlbGwgYXMgYWNfcHRocmVhZCBhbmQgaGJfcHRocmVhZCBtYWNyb3MgcG9zdGVkIGJ5CisjICAgQWxlamFuZHJvIEZvcmVybyBDdWVydm8gdG8gdGhlIGF1dG9jb25mIG1hY3JvIHJlcG9zaXRvcnkuIFdlIGFyZSBhbHNvCisjICAgZ3JhdGVmdWwgZm9yIHRoZSBoZWxwZnVsIGZlZWRiYWNrIG9mIG51bWVyb3VzIHVzZXJzLgorIworIyAgIFVwZGF0ZWQgZm9yIEF1dG9jb25mIDIuNjggYnkgRGFuaWVsIFJpY2hhcmQgRy4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBTdGV2ZW4gRy4gSm9obnNvbiA8c3RldmVuakBhbHVtLm1pdC5lZHU+CisjICAgQ29weXJpZ2h0IChjKSAyMDExIERhbmllbCBSaWNoYXJkIEcuIDxza3Vua0BpU0tVTksuT1JHPgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorIyAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwKKyMgICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjICAgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgcmVzcGVjdGl2ZSBBdXRvY29uZiBNYWNybydzIGNvcHlyaWdodCBvd25lcgorIyAgIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUgY29uZmlndXJlCisjICAgc2NyaXB0cyB0aGF0IGFyZSB0aGUgb3V0cHV0IG9mIEF1dG9jb25mIHdoZW4gcHJvY2Vzc2luZyB0aGUgTWFjcm8uIFlvdQorIyAgIG5lZWQgbm90IGZvbGxvdyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHdoZW4gdXNpbmcKKyMgICBvciBkaXN0cmlidXRpbmcgc3VjaCBzY3JpcHRzLCBldmVuIHRob3VnaCBwb3J0aW9ucyBvZiB0aGUgdGV4dCBvZiB0aGUKKyMgICBNYWNybyBhcHBlYXIgaW4gdGhlbS4gVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIGRvZXMgZ292ZXJuCisjICAgYWxsIG90aGVyIHVzZSBvZiB0aGUgbWF0ZXJpYWwgdGhhdCBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgTWFjcm8uCisjCisjICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGFwcGxpZXMgdG8gdmVyc2lvbnMgb2YgdGhlIEF1dG9jb25mCisjICAgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIEFyY2hpdmUuIFdoZW4geW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYQorIyAgIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwKKyMgICBleGNlcHRpb24gdG8gdGhlIEdQTCB0byBhcHBseSB0byB5b3VyIG1vZGlmaWVkIHZlcnNpb24gYXMgd2VsbC4KKworI3NlcmlhbCAyMworCitBVV9BTElBUyhbQUNYX1BUSFJFQURdLCBbQVhfUFRIUkVBRF0pCitBQ19ERUZVTihbQVhfUFRIUkVBRF0sIFsKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorQUNfUkVRVUlSRShbQUNfUFJPR19TRURdKQorQUNfTEFOR19QVVNIKFtDXSkKK2F4X3B0aHJlYWRfb2s9bm8KKworIyBXZSB1c2VkIHRvIGNoZWNrIGZvciBwdGhyZWFkLmggZmlyc3QsIGJ1dCB0aGlzIGZhaWxzIGlmIHB0aHJlYWQuaAorIyByZXF1aXJlcyBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzIChlLmcuIG9uIFRydTY0IG9yIFNlcXVlbnQpLgorIyBJdCBnZXRzIGNoZWNrZWQgZm9yIGluIHRoZSBsaW5rIHRlc3QgYW55d2F5LgorCisjIEZpcnN0IG9mIGFsbCwgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgb2YgdGhlIFBUSFJFQURfTElCUywKKyMgZXRjZXRlcmEgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaWYgdGhyZWFkcyBsaW5raW5nIHdvcmtzIHVzaW5nCisjIHRoZW06CitpZiB0ZXN0ICJ4JFBUSFJFQURfQ0ZMQUdTJFBUSFJFQURfTElCUyIgIT0gIngiOyB0aGVuCisgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DQz0iJENDIgorICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JFBUSFJFQURfQ0MiICE9ICJ4Il0sIFtDQz0iJFBUSFJFQURfQ0MiXSkKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHRocmVhZF9qb2luIHVzaW5nICRDQyAkUFRIUkVBRF9DRkxBR1MgJFBUSFJFQURfTElCU10pCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX0NBTEwoW10sIFtwdGhyZWFkX2pvaW5dKV0sIFtheF9wdGhyZWFkX29rPXllc10pCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRheF9wdGhyZWFkX29rXSkKKyAgICAgICAgaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4bm8iOyB0aGVuCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKyAgICAgICAgZmkKKyAgICAgICAgQ0M9IiRheF9wdGhyZWFkX3NhdmVfQ0MiCisgICAgICAgIENGTEFHUz0iJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCisgICAgICAgIExJQlM9IiRheF9wdGhyZWFkX3NhdmVfTElCUyIKK2ZpCisKKyMgV2UgbXVzdCBjaGVjayBmb3IgdGhlIHRocmVhZHMgbGlicmFyeSB1bmRlciBhIG51bWJlciBvZiBkaWZmZXJlbnQKKyMgbmFtZXM7IHRoZSBvcmRlcmluZyBpcyB2ZXJ5IGltcG9ydGFudCBiZWNhdXNlIHNvbWUgc3lzdGVtcworIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKKyMgbGlicmFyaWVzIGlzIGJyb2tlbiAobm9uLVBPU0lYKS4KKworIyBDcmVhdGUgYSBsaXN0IG9mIHRocmVhZCBmbGFncyB0byB0cnkuICBJdGVtcyBzdGFydGluZyB3aXRoIGEgIi0iIGFyZQorIyBDIGNvbXBpbGVyIGZsYWdzLCBhbmQgb3RoZXIgaXRlbXMgYXJlIGxpYnJhcnkgbmFtZXMsIGV4Y2VwdCBmb3IgIm5vbmUiCisjIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIHRyeSB3aXRob3V0IGFueSBmbGFncyBhdCBhbGwsIGFuZCAicHRocmVhZC1jb25maWciCisjIHdoaWNoIGlzIGEgcHJvZ3JhbSByZXR1cm5pbmcgdGhlIGZsYWdzIGZvciB0aGUgUHRoIGVtdWxhdGlvbiBsaWJyYXJ5LgorCitheF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1LdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKKworIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQorIyBpbmRpdmlkdWFsIGl0ZW1zIGZvbGxvdzoKKworIyBwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKKyMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAorIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworIyAtS3RocmVhZDogU2VxdWVudCAodGhyZWFkcyBpbiBsaWJjLCBidXQgLUt0aHJlYWQgbmVlZGVkIGZvciBwdGhyZWFkLmgpCisjIC1wdGhyZWFkOiBMaW51eC9nY2MgKGtlcm5lbCB0aHJlYWRzKSwgQlNEL2djYyAodXNlcmxhbmQgdGhyZWFkcyksIFRydTY0CisjICAgICAgICAgICAoTm90ZTogSFAgQyByZWplY3RzIHRoaXMgd2l0aCAiYmFkIGZvcm0gZm9yIGAtdCcgb3B0aW9uIikKKyMgLXB0aHJlYWRzOiBTb2xhcmlzL2djYyAoTm90ZTogSFAgQyBhbHNvIHJlamVjdHMpCisjIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKKyMgICAgICBkb2Vzbid0IGh1cnQgdG8gY2hlY2sgc2luY2UgdGhpcyBzb21ldGltZXMgZGVmaW5lcyBwdGhyZWFkcyBhbmQKKyMgICAgICAtRF9SRUVOVFJBTlQgdG9vKSwgSFAgQyAobXVzdCBiZSBjaGVja2VkIGJlZm9yZSAtbHB0aHJlYWQsIHdoaWNoCisjICAgICAgaXMgcHJlc2VudCBidXQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5OyBhbmQgYmVmb3JlIC1tdGhyZWFkcywKKyMgICAgICBiZWNhdXNlIHRoZSBjb21waWxlciBpbnRlcnByZXRzIHRoaXMgYXMgIi1tdCIgKyAiLWhyZWFkcyIpCisjIC1tdGhyZWFkczogTWluZ3czMi9nY2MsIEx5bngvZ2NjCisjIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQorIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisjIHB0aHJlYWQtY29uZmlnOiB1c2UgcHRocmVhZC1jb25maWcgcHJvZ3JhbSAoZm9yIEdOVSBQdGggbGlicmFyeSkKKworY2FzZSAkaG9zdF9vcyBpbgorCisgICAgICAgIGZyZWVic2QqKQorCisgICAgICAgICMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRocmVhZCBzaW5jZSBTTVAtYWJsZSkKKyAgICAgICAgIyBsdGhyZWFkOiBMaW51eFRocmVhZHMgcG9ydCBvbiBGcmVlQlNEIChhbHNvIHByZWZlcnJlZCB0byAtcHRocmVhZCkKKworICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSIta3RocmVhZCBsdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworCisgICAgICAgIGhwdXgqKQorCisgICAgICAgICMgRnJvbSB0aGUgY2MoMSkgbWFuIHBhZ2U6ICJbLW10XSBTZXRzIHZhcmlvdXMgLUQgZmxhZ3MgdG8gZW5hYmxlCisgICAgICAgICMgbXVsdGktdGhyZWFkaW5nIGFuZCBhbHNvIHNldHMgLWxwdGhyZWFkLiIKKworICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSItbXQgLXB0aHJlYWQgcHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKKyAgICAgICAgOzsKKworICAgICAgICBvcGVuZWRpdGlvbiopCisKKyAgICAgICAgIyBJQk0gei9PUyByZXF1aXJlcyBhIGZlYXR1cmUtdGVzdCBtYWNybyB0byBiZSBkZWZpbmVkIGluIG9yZGVyIHRvCisgICAgICAgICMgZW5hYmxlIFBPU0lYIHRocmVhZHMgYXQgYWxsLCBzbyBnaXZlIHRoZSB1c2VyIGEgaGludCBpZiB0aGlzIGlzCisgICAgICAgICMgbm90IHNldC4gKFdlIGRvbid0IGRlZmluZSB0aGVzZSBvdXJzZWx2ZXMsIGFzIHRoZXkgY2FuIGFmZmVjdAorICAgICAgICAjIG90aGVyIHBvcnRpb25zIG9mIHRoZSBzeXN0ZW0gQVBJIGluIHVucHJlZGljdGFibGUgd2F5cy4pCisKKyAgICAgICAgQUNfRUdSRVBfQ1BQKFtBWF9QVEhSRUFEX1pPU19NSVNTSU5HXSwKKyAgICAgICAgICAgIFsKKyMgICAgICAgICAgICBpZiAhZGVmaW5lZChfT1BFTl9USFJFQURTKSAmJiAhZGVmaW5lZChfVU5JWDAzX1RIUkVBRFMpCisgICAgICAgICAgICAgQVhfUFRIUkVBRF9aT1NfTUlTU0lORworIyAgICAgICAgICAgIGVuZGlmCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgW0FDX01TR19XQVJOKFtJQk0gei9PUyByZXF1aXJlcyAtRF9PUEVOX1RIUkVBRFMgb3IgLURfVU5JWDAzX1RIUkVBRFMgdG8gZW5hYmxlIHB0aHJlYWRzIHN1cHBvcnQuXSldKQorICAgICAgICA7OworCisgICAgICAgIHNvbGFyaXMqKQorCisgICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCisgICAgICAgICMgKG5vbi1mdW5jdGlvbmFsKSB2ZXJzaW9ucyBvZiB0aGUgcHRocmVhZHMgcm91dGluZXMsIHNvIGxpbmstYmFzZWQKKyAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuIChOLkIuOiBUaGUgc3R1YnMgYXJlIG1pc3NpbmcKKyAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sCisgICAgICAgICMgc28gd2UgY291bGQgY2hlY2sgZm9yIHRoYXQsIGJ1dCB3aG8ga25vd3Mgd2hldGhlciB0aGV5J2xsIHN0dWIKKyAgICAgICAgIyB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvIHdlJ2xsIGNoZWNrIGZpcnN0IGZvciB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCBTb2xhcmlzIHdheSBvZiBsaW5raW5nIHB0aHJlYWRzICgtbXQgLWxwdGhyZWFkKS4KKworICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSItbXQscHRocmVhZCBwdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworZXNhYworCisjIEdDQyBnZW5lcmFsbHkgdXNlcyAtcHRocmVhZCwgb3IgLXB0aHJlYWRzIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuIFNQQVJDKQorCitBU19JRihbdGVzdCAieCRHQ0MiID0gInh5ZXMiXSwKKyAgICAgIFtheF9wdGhyZWFkX2ZsYWdzPSItcHRocmVhZCAtcHRocmVhZHMgJGF4X3B0aHJlYWRfZmxhZ3MiXSkKKworIyBUaGUgcHJlc2VuY2Ugb2YgYSBmZWF0dXJlIHRlc3QgbWFjcm8gcmVxdWVzdGluZyByZS1lbnRyYW50IGZ1bmN0aW9uCisjIGRlZmluaXRpb25zIGlzLCBvbiBzb21lIHN5c3RlbXMsIGEgc3Ryb25nIGhpbnQgdGhhdCBwdGhyZWFkcyBzdXBwb3J0IGlzCisjIGNvcnJlY3RseSBlbmFibGVkCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgZGFyd2luKiB8IGhwdXgqIHwgbGludXgqIHwgb3NmKiB8IHNvbGFyaXMqKQorICAgICAgICBheF9wdGhyZWFkX2NoZWNrX21hY3JvPSJfUkVFTlRSQU5UIgorICAgICAgICA7OworCisgICAgICAgIGFpeCopCisgICAgICAgIGF4X3B0aHJlYWRfY2hlY2tfbWFjcm89Il9USFJFQURfU0FGRSIKKyAgICAgICAgOzsKKworICAgICAgICAqKQorICAgICAgICBheF9wdGhyZWFkX2NoZWNrX21hY3JvPSItLSIKKyAgICAgICAgOzsKK2VzYWMKK0FTX0lGKFt0ZXN0ICJ4JGF4X3B0aHJlYWRfY2hlY2tfbWFjcm8iID0gIngtLSJdLAorICAgICAgW2F4X3B0aHJlYWRfY2hlY2tfY29uZD0wXSwKKyAgICAgIFtheF9wdGhyZWFkX2NoZWNrX2NvbmQ9IiFkZWZpbmVkKCRheF9wdGhyZWFkX2NoZWNrX21hY3JvKSJdKQorCisjIEFyZSB3ZSBjb21waWxpbmcgd2l0aCBDbGFuZz8KKworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJENDIGlzIENsYW5nXSwKKyAgICBbYXhfY3ZfUFRIUkVBRF9DTEFOR10sCisgICAgW2F4X2N2X1BUSFJFQURfQ0xBTkc9bm8KKyAgICAgIyBOb3RlIHRoYXQgQXV0b2NvbmYgc2V0cyBHQ0M9eWVzIGZvciBDbGFuZyBhcyB3ZWxsIGFzIEdDQworICAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfRUdSRVBfQ1BQKFtBWF9QVEhSRUFEX0NDX0lTX0NMQU5HXSwKKyAgICAgICAgICAgIFsvKiBOb3RlOiBDbGFuZyAyLjcgbGFja3MgX19jbGFuZ19bYS16XStfXyAqLworIyAgICAgICAgICAgIGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9fbGx2bV9fKQorICAgICAgICAgICAgIEFYX1BUSFJFQURfQ0NfSVNfQ0xBTkcKKyMgICAgICAgICAgICBlbmRpZgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0NMQU5HPXllc10pCisgICAgIGZpCisgICAgXSkKK2F4X3B0aHJlYWRfY2xhbmc9IiRheF9jdl9QVEhSRUFEX0NMQU5HIgorCitheF9wdGhyZWFkX2NsYW5nX3dhcm5pbmc9bm8KKworIyBDbGFuZyBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLCBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIGhhbmRsZSB0aGUgLXB0aHJlYWQKKyMgb3B0aW9uIGluIGEgcmF0aGVyLi4uIGlkaW9zeW5jcmF0aWMgd2F5CisKK2lmIHRlc3QgIngkYXhfcHRocmVhZF9jbGFuZyIgPSAieHllcyI7IHRoZW4KKworICAgICAgICAjIENsYW5nIHRha2VzIC1wdGhyZWFkOyBpdCBoYXMgbmV2ZXIgc3VwcG9ydGVkIGFueSBvdGhlciBmbGFnCisKKyAgICAgICAgIyAoTm90ZSAxOiBUaGlzIHdpbGwgbmVlZCB0byBiZSByZXZpc2l0ZWQgaWYgYSBzeXN0ZW0gdGhhdCBDbGFuZworICAgICAgICAjIHN1cHBvcnRzIGhhcyBQT1NJWCB0aHJlYWRzIGluIGEgc2VwYXJhdGUgbGlicmFyeS4gIFRoaXMgdGVuZHMgbm90CisgICAgICAgICMgdG8gYmUgdGhlIHdheSBvZiBtb2Rlcm4gc3lzdGVtcywgYnV0IGl0J3MgY29uY2VpdmFibGUuKQorCisgICAgICAgICMgKE5vdGUgMjogT24gc29tZSBzeXN0ZW1zLCBub3RhYmx5IERhcndpbiwgLXB0aHJlYWQgaXMgbm90IG5lZWRlZAorICAgICAgICAjIHRvIGdldCBQT1NJWCB0aHJlYWRzIHN1cHBvcnQ7IHRoZSBBUEkgaXMgYWx3YXlzIHByZXNlbnQgYW5kCisgICAgICAgICMgYWN0aXZlLiAgV2UgY291bGQgcmVhc29uYWJseSBsZWF2ZSBQVEhSRUFEX0NGTEFHUyBlbXB0eS4gIEJ1dAorICAgICAgICAjIC1wdGhyZWFkIGRvZXMgZGVmaW5lIF9SRUVOVFJBTlQsIGFuZCB3aGlsZSB0aGUgRGFyd2luIGhlYWRlcnMKKyAgICAgICAgIyBpZ25vcmUgdGhpcyBtYWNybywgdGhpcmQtcGFydHkgaGVhZGVycyBtaWdodCBub3QuKQorCisgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSItcHRocmVhZCIKKyAgICAgICAgUFRIUkVBRF9MSUJTPQorCisgICAgICAgIGF4X3B0aHJlYWRfb2s9eWVzCisKKyAgICAgICAgIyBIb3dldmVyLCBvbGRlciB2ZXJzaW9ucyBvZiBDbGFuZyBtYWtlIGEgcG9pbnQgb2Ygd2FybmluZyB0aGUgdXNlcgorICAgICAgICAjIHRoYXQsIGluIGFuIGludm9jYXRpb24gd2hlcmUgb25seSBsaW5raW5nIGFuZCBubyBjb21waWxhdGlvbiBpcworICAgICAgICAjIHRha2luZyBwbGFjZSwgdGhlIC1wdGhyZWFkIG9wdGlvbiBoYXMgbm8gZWZmZWN0ICgiYXJndW1lbnQgdW51c2VkCisgICAgICAgICMgZHVyaW5nIGNvbXBpbGF0aW9uIikuICBUaGV5IGV4cGVjdCAtcHRocmVhZCB0byBiZSBwYXNzZWQgaW4gb25seQorICAgICAgICAjIHdoZW4gc291cmNlIGNvZGUgaXMgYmVpbmcgY29tcGlsZWQuCisgICAgICAgICMKKyAgICAgICAgIyBQcm9ibGVtIGlzLCB0aGlzIGlzIGF0IG9kZHMgd2l0aCB0aGUgd2F5IEF1dG9tYWtlIGFuZCBtb3N0IG90aGVyCisgICAgICAgICMgQyBidWlsZCBmcmFtZXdvcmtzIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGF0IHRoZSBzYW1lIGZsYWdzIHVzZWQgaW4KKyAgICAgICAgIyBjb21waWxhdGlvbiAoQ0ZMQUdTKSBhcmUgYWxzbyB1c2VkIGluIGxpbmtpbmcuICBNYW55IHN5c3RlbXMKKyAgICAgICAgIyBzdXBwb3J0ZWQgYnkgQVhfUFRIUkVBRCByZXF1aXJlIGV4YWN0bHkgdGhpcyBmb3IgUE9TSVggdGhyZWFkcworICAgICAgICAjIHN1cHBvcnQsIGFuZCBpbiBmYWN0IGl0IGlzIG9mdGVuIG5vdCBzdHJhaWdodGZvcndhcmQgdG8gc3BlY2lmeSBhCisgICAgICAgICMgZmxhZyB0aGF0IGlzIHVzZWQgb25seSBpbiB0aGUgY29tcGlsYXRpb24gcGhhc2UgYW5kIG5vdCBpbgorICAgICAgICAjIGxpbmtpbmcuICBTdWNoIGEgc2NlbmFyaW8gaXMgZXh0cmVtZWx5IHJhcmUgaW4gcHJhY3RpY2UuCisgICAgICAgICMKKyAgICAgICAgIyBFdmVuIHRob3VnaCB1c2Ugb2YgdGhlIC1wdGhyZWFkIGZsYWcgaW4gbGlua2luZyB3b3VsZCBvbmx5IHByaW50CisgICAgICAgICMgYSB3YXJuaW5nLCB0aGlzIGNhbiBiZSBhIG51aXNhbmNlIGZvciB3ZWxsLXJ1biBzb2Z0d2FyZSBwcm9qZWN0cworICAgICAgICAjIHRoYXQgYnVpbGQgd2l0aCAtV2Vycm9yLiAgU28gaWYgdGhlIGFjdGl2ZSB2ZXJzaW9uIG9mIENsYW5nIGhhcworICAgICAgICAjIHRoaXMgbWlzZmVhdHVyZSwgd2Ugc2VhcmNoIGZvciBhbiBvcHRpb24gdG8gc3F1YXNoIGl0LgorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIENsYW5nIG5lZWRzIGZsYWcgdG8gcHJldmVudCAiYXJndW1lbnQgdW51c2VkIiB3YXJuaW5nIHdoZW4gbGlua2luZyB3aXRoIC1wdGhyZWFkXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBR10sCisgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUc9dW5rbm93bgorICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mICRhY19saW5rIHRoYXQgY29tcGlsZXMgYW5kCisgICAgICAgICAgICAgIyBsaW5rcyBpbiB0d28gc3RlcHMgKC5jIC0+IC5vLCAubyAtPiBleGUpIGluc3RlYWQgb2Ygb25lCisgICAgICAgICAgICAgIyAoLmMgLT4gZXhlKSwgYmVjYXVzZSB0aGUgd2FybmluZyBvY2N1cnMgb25seSBpbiB0aGUgc2Vjb25kCisgICAgICAgICAgICAgIyBzdGVwCisgICAgICAgICAgICAgYXhfcHRocmVhZF9zYXZlX2FjX2xpbms9IiRhY19saW5rIgorICAgICAgICAgICAgIGF4X3B0aHJlYWRfc2VkPSdzL2NvbmZ0ZXN0XC5cJGFjX2V4dC9jb25mdGVzdC4kYWNfb2JqZXh0L2cnCisgICAgICAgICAgICAgYXhfcHRocmVhZF9saW5rX3N0ZXA9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgIiRheF9wdGhyZWFkX3NlZCJgCisgICAgICAgICAgICAgYXhfcHRocmVhZF8yc3RlcF9hY19saW5rPSIoJGFjX2NvbXBpbGUpICYmIChlY2hvID09PT0gPiY1KSAmJiAoJGF4X3B0aHJlYWRfbGlua19zdGVwKSIKKyAgICAgICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICAgICAgIGZvciBheF9wdGhyZWFkX3RyeSBpbiAnJyAtUXVudXNlZC1hcmd1bWVudHMgLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50IHVua25vd247IGRvCisgICAgICAgICAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfcHRocmVhZF90cnkiID0gInh1bmtub3duIl0sIFticmVha10pCisgICAgICAgICAgICAgICAgQ0ZMQUdTPSItV2Vycm9yIC1XdW5rbm93bi13YXJuaW5nLW9wdGlvbiAkYXhfcHRocmVhZF90cnkgLXB0aHJlYWQgJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCisgICAgICAgICAgICAgICAgYWNfbGluaz0iJGF4X3B0aHJlYWRfc2F2ZV9hY19saW5rIgorICAgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW2ludCBtYWluKHZvaWQpe3JldHVybiAwO31dXSldLAorICAgICAgICAgICAgICAgICAgICBbYWNfbGluaz0iJGF4X3B0aHJlYWRfMnN0ZXBfYWNfbGluayIKKyAgICAgICAgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW2ludCBtYWluKHZvaWQpe3JldHVybiAwO31dXSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIFticmVha10pCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgIGFjX2xpbms9IiRheF9wdGhyZWFkX3NhdmVfYWNfbGluayIKKyAgICAgICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgorICAgICAgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X3B0aHJlYWRfdHJ5IiA9ICJ4Il0sIFtheF9wdGhyZWFkX3RyeT1ub10pCisgICAgICAgICAgICAgYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUc9IiRheF9wdGhyZWFkX3RyeSIKKyAgICAgICAgICAgIF0pCisKKyAgICAgICAgY2FzZSAiJGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHIiBpbgorICAgICAgICAgICAgICAgIG5vIHwgdW5rbm93bikgOzsKKyAgICAgICAgICAgICAgICAqKSBQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHICRQVEhSRUFEX0NGTEFHUyIgOzsKKyAgICAgICAgZXNhYworCitmaSAjICRheF9wdGhyZWFkX2NsYW5nID0geWVzCisKK2lmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieG5vIjsgdGhlbgorZm9yIGF4X3B0aHJlYWRfdHJ5X2ZsYWcgaW4gJGF4X3B0aHJlYWRfZmxhZ3M7IGRvCisKKyAgICAgICAgY2FzZSAkYXhfcHRocmVhZF90cnlfZmxhZyBpbgorICAgICAgICAgICAgICAgIG5vbmUpCisgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3NdKQorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAtbXQscHRocmVhZCkKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRoIC1tdCAtbHB0aHJlYWRdKQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSItbXQiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbHB0aHJlYWQiCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIC0qKQorICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGF4X3B0aHJlYWRfdHJ5X2ZsYWddKQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkYXhfcHRocmVhZF90cnlfZmxhZyIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgcHRocmVhZC1jb25maWcpCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfUFJPRyhbYXhfcHRocmVhZF9jb25maWddLCBbcHRocmVhZC1jb25maWddLCBbeWVzXSwgW25vXSkKKyAgICAgICAgICAgICAgICBBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX2NvbmZpZyIgPSAieG5vIl0sIFtjb250aW51ZV0pCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9ImBwdGhyZWFkLWNvbmZpZyAtLWNmbGFnc2AiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSJgcHRocmVhZC1jb25maWcgLS1sZGZsYWdzYCBgcHRocmVhZC1jb25maWcgLS1saWJzYCIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRheF9wdGhyZWFkX3RyeV9mbGFnXSkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sJGF4X3B0aHJlYWRfdHJ5X2ZsYWciCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKworICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIGZ1bmN0aW9ucy4gIFdlIG11c3QgaW5jbHVkZSBwdGhyZWFkLmgsCisgICAgICAgICMgc2luY2Ugc29tZSBmdW5jdGlvbnMgbWF5IGJlIG1hY3Jvcy4gIChPbiB0aGUgU2VxdWVudCwgd2UKKyAgICAgICAgIyBuZWVkIGEgc3BlY2lhbCBmbGFnIC1LdGhyZWFkIHRvIG1ha2UgdGhpcyBoZWFkZXIgY29tcGlsZS4pCisgICAgICAgICMgV2UgY2hlY2sgZm9yIHB0aHJlYWRfam9pbiBiZWNhdXNlIGl0IGlzIGluIC1scHRocmVhZCBvbiBJUklYCisgICAgICAgICMgd2hpbGUgcHRocmVhZF9jcmVhdGUgaXMgaW4gbGliYy4gIFdlIGNoZWNrIGZvciBwdGhyZWFkX2F0dHJfaW5pdAorICAgICAgICAjIGR1ZSB0byBERUMgY3JhemluZXNzIHdpdGggLWxwdGhyZWFkcy4gIFdlIGNoZWNrIGZvcgorICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoIGJlY2F1c2UgaXQgaXMgb25lIG9mIHRoZSBmZXcgcHRocmVhZAorICAgICAgICAjIGZ1bmN0aW9ucyBvbiBTb2xhcmlzIHRoYXQgZG9lc24ndCBoYXZlIGEgbm9uLWZ1bmN0aW9uYWwgbGliYyBzdHViLgorICAgICAgICAjIFdlIHRyeSBwdGhyZWFkX2NyZWF0ZSBvbiBnZW5lcmFsIHByaW5jaXBsZXMuCisKKyAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyMgICAgICAgICAgICAgICAgICAgICAgIGlmICRheF9wdGhyZWFkX2NoZWNrX2NvbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciAiJGF4X3B0aHJlYWRfY2hlY2tfbWFjcm8gbXVzdCBiZSBkZWZpbmVkIgorIyAgICAgICAgICAgICAgICAgICAgICAgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHJvdXRpbmUodm9pZCAqYSkgeyBhID0gMDsgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgKnN0YXJ0X3JvdXRpbmUodm9pZCAqYSkgeyByZXR1cm4gYTsgfV0sCisgICAgICAgICAgICAgICAgICAgICAgIFtwdGhyZWFkX3QgdGg7IHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGgsIDAsIHN0YXJ0X3JvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3BvcCgwKSAvKiA7ICovXSldLAorICAgICAgICAgICAgW2F4X3B0aHJlYWRfb2s9eWVzXSwKKyAgICAgICAgICAgIFtdKQorCisgICAgICAgIENGTEFHUz0iJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCisgICAgICAgIExJQlM9IiRheF9wdGhyZWFkX3NhdmVfTElCUyIKKworICAgICAgICBBQ19NU0dfUkVTVUxUKFskYXhfcHRocmVhZF9va10pCisgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiXSwgW2JyZWFrXSkKKworICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKyAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKK2RvbmUKK2ZpCisKKyMgVmFyaW91cyBvdGhlciBjaGVja3M6CitpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuCisgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKworICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgorICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFJdLAorICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUj11bmtub3duCisgICAgICAgICAgICAgZm9yIGF4X3B0aHJlYWRfYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEOyBkbworICAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludCBhdHRyID0gJGF4X3B0aHJlYWRfYXR0cjsgcmV0dXJuIGF0dHIgLyogOyAqL10pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUj0kYXhfcHRocmVhZF9hdHRyOyBicmVha10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIF0pCisgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUiIgIT0gInh1bmtub3duIiAmJiBcCisgICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUiIgIT0gInhQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSIgJiYgXAorICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX2pvaW5hYmxlX2F0dHJfZGVmaW5lZCIgIT0gInh5ZXMiXSwKKyAgICAgICAgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChbUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFskYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIG5lY2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIGEgbm9uLXN0YW5kYXJkIG5hbWUgb24geW91ciBzeXN0ZW0uXSkKKyAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfam9pbmFibGVfYXR0cl9kZWZpbmVkPXllcworICAgICAgICAgICAgICBdKQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzXSwKKyAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1NdLAorICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUz1ubworICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICBzb2xhcmlzKikKKyAgICAgICAgICAgICBheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1M9Ii1EX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIgorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgXSkKKyAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTIiAhPSAieG5vIiAmJiBcCisgICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X3B0aHJlYWRfc3BlY2lhbF9mbGFnc19hZGRlZCIgIT0gInh5ZXMiXSwKKyAgICAgICAgICAgICAgW1BUSFJFQURfQ0ZMQUdTPSIkYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfc3BlY2lhbF9mbGFnc19hZGRlZD15ZXNdKQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgUFRIUkVBRF9QUklPX0lOSEVSSVRdLAorICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUXSwKKyAgICAgICAgICAgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD5dXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbaW50IGkgPSBQVEhSRUFEX1BSSU9fSU5IRVJJVDtdXSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD15ZXNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD1ub10pCisgICAgICAgICAgICBdKQorICAgICAgICBBU19JRihbdGVzdCAieCRheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCIgPSAieHllcyIgJiYgXAorICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX3ByaW9faW5oZXJpdF9kZWZpbmVkIiAhPSAieHllcyJdLAorICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUXSwgWzFdLCBbSGF2ZSBQVEhSRUFEX1BSSU9fSU5IRVJJVC5dKQorICAgICAgICAgICAgICAgYXhfcHRocmVhZF9wcmlvX2luaGVyaXRfZGVmaW5lZD15ZXMKKyAgICAgICAgICAgICAgXSkKKworICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgorICAgICAgICBMSUJTPSIkYXhfcHRocmVhZF9zYXZlX0xJQlMiCisKKyAgICAgICAgIyBNb3JlIEFJWCBsb3NzYWdlOiBjb21waWxlIHdpdGggKl9yIHZhcmlhbnQKKyAgICAgICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgIGFpeCopCisgICAgICAgICAgICAgICAgQVNfQ0FTRShbIngvJENDIl0sCisgICAgICAgICAgICAgICAgICAgIFt4Ki9jODl8eCovYzg5XzEyOHx4Ki9jOTl8eCovYzk5XzEyOHx4Ki9jY3x4Ki9jYzEyOHx4Ki94bGN8eCoveGxjX3Y2fHgqL3hsYzEyOHx4Ki94bGMxMjhfdjZdLAorICAgICAgICAgICAgICAgICAgICBbI2hhbmRsZSBhYnNvbHV0ZSBwYXRoIGRpZmZlcmVudGx5IGZyb20gUEFUSCBiYXNlZCBwcm9ncmFtIGxvb2t1cAorICAgICAgICAgICAgICAgICAgICAgQVNfQ0FTRShbIngkQ0MiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbeC8qXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbQVNfSUYoW0FTX0VYRUNVVEFCTEVfUChbJHtDQ31fcl0pXSxbUFRIUkVBRF9DQz0iJHtDQ31fciJdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW0FDX0NIRUNLX1BST0dTKFtQVEhSRUFEX0NDXSxbJHtDQ31fcl0sWyRDQ10pXSldKQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGZpCitmaQorCit0ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJENDIgorCitBQ19TVUJTVChbUFRIUkVBRF9MSUJTXSkKK0FDX1NVQlNUKFtQVEhSRUFEX0NGTEFHU10pCitBQ19TVUJTVChbUFRIUkVBRF9DQ10pCisKKyMgRmluYWxseSwgZXhlY3V0ZSBBQ1RJT04tSUYtRk9VTkQvQUNUSU9OLUlGLU5PVC1GT1VORDoKK2lmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgaWZlbHNlKFskMV0sLFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF0sWzFdLFtEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy5dKV0sWyQxXSkKKyAgICAgICAgOgorZWxzZQorICAgICAgICBheF9wdGhyZWFkX29rPW5vCisgICAgICAgICQyCitmaQorQUNfTEFOR19QT1AKK10pZG5sIEFYX1BUSFJFQUQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbGlidG9vbC5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbGlidG9vbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGUwZWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9saWJ0b29sLm00CkBAIC0wLDAgKzEsNzk4MiBAQAorIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgICAgICAgICAgICAgICAgIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgICAgICAgICAgICAgICAgIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisjCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisjIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCitdKQorCisjIHNlcmlhbCA1NyBMVF9JTklUCisKKworIyBMVF9QUkVSRVEoVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGFuZCBleGl0IGlmIHRoaXMgbGlidG9vbCB2ZXJzaW9uIGlzIGxlc3MgdGhhdCBWRVJTSU9OLgorbTRfZGVmdW4oW0xUX1BSRVJFUV0sCitbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW0xUX1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgLTEsCisgICAgICAgW200X2RlZmF1bHQoWyQzXSwKKwkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKKwkJICAgICAgICAgICAgIDYzKV0pXSwKKyAgICAgICBbJDJdKV0pCisKKworIyBfTFRfQ0hFQ0tfQlVJTERESVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGlmIHRoZSBhYnNvbHV0ZSBidWlsZCBkaXJlY3RvcnkgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMKK200X2RlZnVuKFtfTFRfQ0hFQ0tfQlVJTERESVJdLAorW2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgQUNfTVNHX1dBUk4oW0xpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBgcHdkYF0pIDs7Citlc2FjCitdKQorCisKKyMgTFRfSU5JVChbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0lOSVRdLAorW0FDX1BSRVJFUShbMi41OF0pZG5sIFdlIHVzZSBBQ19JTkNMVURFU19ERUZBVUxUCitBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitfTFRfU0hFTExfSU5JVChbU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH1dKQorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworX0xUX1NFVFVQCisKKyMgT25seSBleHBhbmQgb25jZToKK200X2RlZmluZShbTFRfSU5JVF0pCitdKSMgTFRfSU5JVAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitBVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK19MVF9ERUNMKFtdLCBbUEFUSF9TRVBBUkFUT1JdLCBbMV0sIFtUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0ZW1dKWRubAorZG5sCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCisKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorXSkKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworX0xUX0NIRUNLX09CSkRJUgorCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworb2xkX0NDPSIkQ0MiCitvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgX0xUX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0xUX1NVUFBPUlRFRF9UQUcoW0NDXSkKK19MVF9MQU5HX0NfQ09ORklHCitfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworX0xUX0NPTkZJR19DT01NQU5EUworXSkjIF9MVF9TRVRVUAorCisKKyMgX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgZmV3IHNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwIHVzIGRvIHJvYnVzdCBxdW90aW5nLgorbTRfZGVmdW4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSwKK1sjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworXSkKKworIyBfTFRfUFJPR19MVE1BSU4KKyMgLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSBgY29uZmlndXJlJywgYW5kIGBjb25maWcuc3RhdHVzJworIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorIyBgY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCisjIHNvIHdlIHBhc3MgYSBjb3B5IGFsb25nIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSBhbnl3YXkuCittNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKK1ttNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtsdG1haW4uc2hdKV0pZG5sCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInXSkKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorXSkjIF9MVF9QUk9HX0xUTUFJTgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEFjY3VtdWxhdGUgY29kZSBmb3IgY3JlYXRpbmcgbGlidG9vbC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTbyB0aGF0IHdlIGNhbiByZWNyZWF0ZSBhIGZ1bGwgbGlidG9vbCBzY3JpcHQgaW5jbHVkaW5nIGFkZGl0aW9uYWwKKyMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKKyMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSBgbGlidG9vbCcKKyMgbGFiZWwuCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbSU5JVC1DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgSU5JVC1DT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xfSU5JVF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0sCisgICAgICAgICAgICAgICAgICAgICBbJDEKK10pXSldKQorCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKKworCisjIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sCisgICAgICAgICAgICAgICAgICAgICBbJDEKK10pXSldKQorCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10pCisKKworIyBfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoW0NPTU1BTkRTXSwgW0lOSVRfQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCitbX0xUX0NPTkZJR19MSUJUT09MKFskMV0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbJDJdKQorXSkKKworCisjIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBsZWFkaW5nIGNvbW1lbnQgbWFya3MgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggbGluZSwgYW5kIGEgdHJhaWxpbmcKKyMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgorbTRfZGVmaW5lKFtfTFRfRk9STUFUX0NPTU1FTlRdLAorW200X2lmdmFsKFskMV0sIFsKK200X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCisgICAgICAgICAgICAgIFtbJ2AkXF1dLCBbXFxcJl0pXW00X2JtYXRjaChbJDFdLCBbWyE/Ll0kXSwgW10sIFsuXSkKKyldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGSVhNRTogRWxpbWluYXRlIFZBUk5BTUUgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgX0xUX0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSwgW0lTLVRBR0dFRD9dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENPTkZJR05BTUUgaXMgdGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIHZhbHVlIGluIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyMgVkFSTkFNRSBpcyB0aGUgKGJhc2UpIG5hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCisjIFZBUk5BTUUuICBBbnkgb3RoZXIgdmFsdWUgd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgorbTRfZGVmaW5lKFtfTFRfREVDTF0sCitbbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAorICAgIFtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtsaWJ0b29sX25hbWVdLAorCVttNF9pZnZhbChbJDFdLCBbJDFdLCBbJDJdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQorICAgIG00X2lmdmFsKFskNF0sCisJW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2Rlc2NyaXB0aW9uXSwgWyQ0XSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKKwlbdGFnZ2VkP10sIFttNF9pZnZhbChbJDVdLCBbeWVzXSwgW25vXSldKV0pCitdKQorCisKKyMgX0xUX1RBR0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR0RFQ0xdLCBbX0xUX0RFQ0woWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgW3llc10pXSkKKworCisjIGx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFt5ZXNdLCAkQCldKQorCisKKyMgX2x0X2RlY2xfZmlsdGVyKFNVQktFWSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAorW200X2Nhc2UoWyQjXSwKKyAgWzBdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCisgIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgWzJdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCisgIFszXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbJDNdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCisgIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAorXSkKKworCisjIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMV0sICRAKV0pCisKKworIyBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzJdLCAkQCldKQorCisKKyMgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfYXNzZXJ0KFskIyA8PSAyXSlkbmwKK18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgIG00X2lmdmFsKFskMl0sIFtbJDJdXSwgW200X2RxdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyldKSwKKyAgICBtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfcXVvdGUoX0xUX1RBR1MpKSwgWyBdKSldKQorbTRfZGVmaW5lKFtfbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2lmdmFsKFskM10sIFtsdF9jb21iaW5lKFskMV0sIFskMl0sIFtfXSwgJDMpXSldKQorCisKKyMgbHRfZGVjbF9hbGxfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2FsbF92YXJuYW1lc10sCitbXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgIG00X2lmKFskMl0sIFtdLAorCSAgIG00X3F1b3RlKGx0X2RlY2xfdmFybmFtZXMpLAorCW00X3F1b3RlKG00X3NoaWZ0KCRAKSkpKVtdZG5sCitdKQorbTRfZGVmaW5lKFtfbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW2x0X2pvaW4oJEAsIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFskMV0sCisJCQlsdF9kZWNsX3RhZ192YXJuYW1lcyhbWywgXV0sIG00X3NoaWZ0KCRAKSkpKWRubAorXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoW1ZBUk5BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gYGNvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCisjIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiBgY29uZmlndXJlJy4gIFZBUk5BTUUKKyMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKK1skMT0nYCRFQ0hPICIkXVskMSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgZGVsaW1pdCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgd2l0aCBzaW5nbGUgcXVvdGVzLCBzbyB3aGVuCisjIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAorIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKKyMgZWFjaCB2YXJpYWJsZSBkZWNsYXJlZCB3aXRoIF9MVF9ERUNMIChhbmQgX0xUX1RBR0RFQ0wpIGludG86CisjCisjICAgIDx2YXI+PSdgJEVDSE8gIiQ8dmFyPiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAorbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKK2F2YWlsYWJsZV90YWdzPSJfTFRfVEFHUyJkbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCisjIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorIworIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCisjICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKKwkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCittNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKKyAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCittNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKyAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKKyAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKK200X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcworIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKyMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCisjIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KK200X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sCisgICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCisKKworIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorCisKKyMgX0xUX0NPTkZJR19DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgorIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKyMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCisjIGludG8gYGNvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgorIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgorbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAorW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCisJZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAorCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6CisgICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKyAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAorICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgorICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQorXSkjX0xUX0NPTkZJR19DT01NQU5EUworCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorWworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCRbXTEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworX0xUX09VVFBVVF9MSUJUT09MX0lOSVQKK10pCisKKyMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoRklMRSwgW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KKyMgcmV1c2UgdGhlIGVudmlyb25tZW50IGxlYXJuZWQgYnkgdGhlIHBhcmVudCBzY3JpcHQsIGFuZCBtYWtlIHRoZQorIyBmaWxlIGV4ZWN1dGFibGUuICBJZiBDT01NRU5UIGlzIHN1cHBsaWVkLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUKKyMgYCMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcworIyBtYWNybywgYWRkaXRpb25hbCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byBGSUxFIHRvIGZvcm0gdGhlIGJvZHkgb2YKKyMgdGhlIGNoaWxkIHNjcmlwdC4gIFRoZSBtYWNybyBlbmRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHRoZQorIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgorbTRfaWZkZWYoW0FTX0lOSVRfR0VORVJBVEVEXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLFtBU19JTklUX0dFTkVSQVRFRCgkQCldKV0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSwKK1ttNF9yZXF1aXJlKFtBU19QUkVQQVJFXSldZG5sCitbbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV1kbmwKK1tsdF93cml0ZV9mYWlsPTAKK2NhdCA+JDEgPDxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyQyCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiQxIDw8XF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKK0FTX1NIRUxMX1NBTklUSVpFCitfQVNfUFJFUEFSRQorZXhlYyBBU19NRVNTQUdFX0ZEPiYxCitfQVNFT0YKK3Rlc3QgJGx0X3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICQxW11kbmwKK200X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV0pXSkjIF9MVF9HRU5FUkFURURfRklMRV9JTklUCisKKyMgTFRfT1VUUFVUCisjIC0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisjIEFDX09VVFBVVCBpcyBjYWxsZWQpLCBpbmNhc2UgaXQgaXMgdXNlZCBpbiBjb25maWd1cmUgZm9yIGNvbXBpbGF0aW9uCisjIHRlc3RzLgorQUNfREVGVU4oW0xUX09VVFBVVF0sCitbOiAke0NPTkZJR19MVD0uL2NvbmZpZy5sdH0KK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoWyIkQ09ORklHX0xUIl0sCitbIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIGEgbGlidG9vbCBzdHViIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5dKQorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitsdF9jbF9zaWxlbnQ9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworbHRfY2xfaGVscD0iXAorXGAkYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorZm9yIHVzZSBpbiBmdXJ0aGVyIGNvbmZpZ3VyZSB0aW1lIHRlc3RzIGJlZm9yZSB0aGUgcmVhbCBsaWJ0b29sIGlzCitnZW5lcmF0ZWQuCisKK1VzYWdlOiAkWzBdIFtbT1BUSU9OU11dCisKKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKKworbHRfY2xfdmVyc2lvbj0iXAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKK2NvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorCitDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCit3aGlsZSB0ZXN0ICRbI10gIT0gMAorZG8KKyAgY2FzZSAkWzFdIGluCisgICAgLS12ZXJzaW9uIHwgLS12KiB8IC1WICkKKyAgICAgIGVjaG8gIiRsdF9jbF92ZXJzaW9uIjsgZXhpdCAwIDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgIGVjaG8gIiRsdF9jbF9oZWxwIjsgZXhpdCAwIDs7CisgICAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgICBkZWJ1Zz06IDs7CisgICAgLS1xdWlldCB8IC0tcSogfCAtLXNpbGVudCB8IC0tcyogfCAtcSApCisgICAgICBsdF9jbF9zaWxlbnQ9OiA7OworCisgICAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisKKyAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgJGx0X2NsX3NpbGVudDsgdGhlbgorICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCitmaQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVQKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCitBU19FWElUKDApCitfTFRFT0YKK2NobW9kICt4ICIkQ09ORklHX0xUIgorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKyMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZworIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgorbHRfY2xfc3VjY2Vzcz06Cit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworX0xUX0NPUFlJTkcKK19MVF9MSUJUT09MX1RBR1MKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKK19MVF9MSUJUT09MX0NPTkZJR19WQVJTCitfTFRfTElCVE9PTF9UQUdfVkFSUworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSwKK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKK2RubCBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gdXNlICQxIGhlcmUsIHNpbmNlIF9MVF9UQUcgaXMgbm90IGV4cGFuZGVkCitkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0xJQlRPT0xfVEFHX1ZBUlMoX0xUX1RBRykKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfRU9GCitdKWRubCAvbTRfaWYKK10sCitbbTRfaWYoWyQxXSwgW10sIFsKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUworXSkjIF9MVF9DT05GSUcKKworCisjIExUX1NVUFBPUlRFRF9UQUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAorIyAtLXRhZyBvcHRpb24sIHVzaW5nOgorIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKKworCisjIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93CittNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQorbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorCisKKyMgTFRfTEFORyhMQU5HKQorIyAtLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgorQUNfREVGVU4oW0xUX0xBTkddLAorW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK200X2Nhc2UoWyQxXSwKKyAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCisgIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAorICBbR29dLAkJCVtfTFRfTEFORyhHTyldLAorICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCisgIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKKyAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCisgIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCisgIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAorICAgIFtfTFRfTEFORygkMSldLAorICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCitdKSMgTFRfTEFORworCisKKyMgX0xUX0xBTkcoTEFOR05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HXSwKK1ttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCisgIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCisgIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKKyAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKKyAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCitdKSMgX0xUX0xBTkcKKworCittNF9pZm5kZWYoW0FDX1BST0dfR09dLCBbCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfR08uICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICAjCisjICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittNF9kZWZ1bihbQUNfUFJPR19HT10sCitbQUNfTEFOR19QVVNIKEdvKWRubAorQUNfQVJHX1ZBUihbR09DXSwgICAgIFtHbyBjb21waWxlciBjb21tYW5kXSlkbmwKK0FDX0FSR19WQVIoW0dPRkxBR1NdLCBbR28gY29tcGlsZXIgZmxhZ3NdKWRubAorX0FDX0FSR19WQVJfTERGTEFHUygpZG5sCitBQ19DSEVDS19UT09MKEdPQywgZ2NjZ28pCitpZiB0ZXN0IC16ICIkR09DIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgQUNfQ0hFQ0tfUFJPRyhHT0MsIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSwgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dKQorICBmaQorZmkKK2lmIHRlc3QgLXogIiRHT0MiOyB0aGVuCisgIEFDX0NIRUNLX1BST0coR09DLCBnY2NnbywgZ2NjZ28sIGZhbHNlKQorZmkKK10pI200X2RlZnVuCitdKSNtNF9pZm5kZWYKKworCisjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisgIFtMVF9MQU5HKENYWCldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorICBbTFRfTEFORyhGNzcpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorICBbTFRfTEFORyhGQyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorCitkbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCitkbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisgIFtMVF9MQU5HKEdDSildLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorICAgIFtMVF9MQU5HKEdDSildLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAorICAgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dPXSwKKyAgW0xUX0xBTkcoR08pXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19HT10sIGRlZm4oW0FDX1BST0dfR09dKVtMVF9MQU5HKEdPKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAorICBbTFRfTEFORyhSQyldLAorICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQorXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisKKyMgT2Jzb2xldGUgbWFjcm9zOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKKworCisjIF9MVF9UQUdfQ09NUElMRVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorCitfTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCitfTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCitfTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKK19MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCitdKSMgX0xUX1RBR19DT01QSUxFUgorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCitdKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCitdKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKKyAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKKyAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCSMgSWYgdGhlcmUgaXMgYSBub24tZW1wdHkgZXJyb3IgbG9nLCBhbmQgInNpbmdsZV9tb2R1bGUiCisJIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKKyAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCisJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWddLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdF0sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vXSkKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnXSxbbHRfY3ZfbGRfZm9yY2VfbG9hZF0sCisgICAgICBbbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KKwljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorICAgIF0pCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLltbMDEyXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGZpCisgICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCittNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorWworICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgICBtNF9jYXNlKFskMV0sIFtGNzddLCBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdLAorICAgICAgICAgICAgICAgICAgW0ZDXSwgIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10pCisgIGVsc2UKKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgZmkKKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbTRfaWYoWyQxXSwgW0NYWF0sCitbICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgZmkKK10sW10pCisgIGVsc2UKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICBmaQorXSkKKworIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKyMgU3RvcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBmb3IgZWFjaCBUQUdOQU1FLgorIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgorbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAoraWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSxbCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nWworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9XScKKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaV0sW10pCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKyAgZmkKKyAgXSkKKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCitmaQorXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisKKworIyBfTFRfU0hFTExfSU5JVChBUkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1NIRUxMX0lOSVRdLAorW200X2RpdmVydF90ZXh0KFtNNFNILUlOSVRdLCBbJDEKK10pXSkjIF9MVF9TSEVMTF9JTklUCisKKworCisjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgaG93IHdlIGNhbiBmYWtlIGFuIGVjaG8gY29tbWFuZCB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2guCisjIEluIHBhcnRpY3VsYXIsIHdpdGggQXV0b2NvbmYgMi42MCBvciBsYXRlciB3ZSBhZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydAorIyBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2ggd2lsbCBmaW5kIGEgc2hlbGwgd2l0aCBhIGJ1aWx0aW4KKyMgcHJpbnRmICh3aGljaCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCittNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJFtdMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIgCit9CisKK2Nhc2UgIiRFQ0hPIiBpbgorICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OworICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKKyAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKK2VzYWMKKworbTRfaWZkZWYoW19BU19ERVRFQ1RfU1VHR0VTVEVEXSwKK1tfQVNfREVURUNUX1NVR0dFU1RFRChbCisgIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSR7QkFTSF9WRVJTSU9OK3NldH0iIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCisgICAgICB8fCB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPYCIgPSAiWCRFQ0hPIiApXSldKQorCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9XSVRIX1NZU1JPT1QKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorWyAgLS13aXRoLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLl0sCitbXSwgW3dpdGhfc3lzcm9vdD1ub10pCisKK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKK2RubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorbHRfc3lzcm9vdD0KK2Nhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCisgeWVzKQorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIEFDX01TR19SRVNVTFQoWyR7d2l0aF9zeXNyb290fV0pCisgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQorICAgOzsKK2VzYWMKKworIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQorCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKKyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopCisgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgaT84Ni0qLXNvbGFyaXMqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorICAgICAgICAgIDs7CisgICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgICMgR05VIGxkIDIuMjEgaW50cm9kdWNlZCBfc29sMiBlbXVsYXRpb25zLiAgVXNlIHRoZW0gaWYgYXZhaWxhYmxlLgorICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgTEQ9IiR7TEQtbGR9X3NvbDIiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKK10pIyBfTFRfRU5BQkxFX0xPQ0sKKworCisjIF9MVF9QUk9HX0FSCisjIC0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorW0FDX0NIRUNLX1RPT0xTKEFSLCBbYXJdLCBmYWxzZSkKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CitfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0sIFtGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydF0sIFtsdF9jdl9hcl9hdF9maWxlXSwKKyAgW2x0X2N2X2FyX2F0X2ZpbGU9bm8KKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorICAgICBbZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCisgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwlBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorICAgICBdKQorICBdKQorCitpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisgIFtIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXJdKQorXSkjIF9MVF9QUk9HX0FSCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tfTFRfUFJPR19BUgorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKK2ZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7CisgICopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Citlc2FjCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAorICAgIFtXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb25dKQorXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKworCisjIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitlbHNlCisgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW10pCisKKworIyBfTFRfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmtlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3MyKikKKyAgICAjIFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIG9uIE9TLzIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTIKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbCSBdXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vbmUpCitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKKyAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCitdKSMgTFRfQ01EX01BWF9MRU4KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCisKKworIyBfTFRfSEVBREVSX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKK1tBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCitdKSMgX0xUX0hFQURFUl9ETEZDTgorCisKKyMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9XQorX0xUX0VPRgorICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgJDMKKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCitdKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgorCisKKyMgTFRfU1lTX0RMT1BFTl9TRUxGCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKKyAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgXSkKKyAgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSwKKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKwkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKKwkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAorCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCisJCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0pCisJICAgICAgXSkKKwkgICAgXSkKKwkgIF0pCisJXSkKKyAgICAgIF0pCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZiwgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKKyAgICBdKQorCisgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKKyAgICAgIF0pCisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorXSkjIExUX1NZU19ETE9QRU5fU0VMRgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KKyMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCitdKQorX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKKwlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCitdKSMgX0xUX0NPTVBJTEVSX0NfTworCisKKyMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAorW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT01QSUxFUl9DX08oWyQxXSkKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK19MVF9ERUNMKFtdLCBbbmVlZF9sb2Nrc10sIFsxXSwgW011c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uP10pCitdKSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MKKworCisjIF9MVF9DSEVDS19PQkpESVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DSEVDS19PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCisgICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW0xUX09CSkRJUl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoTFRfT0JKRElSLCAiJGx0X2N2X29iamRpci8iLAorICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorXSkjIF9MVF9DSEVDS19PQkpESVIKKworCisjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAorW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCitfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQoraWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAorICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKKyAgIHRlc3QgIlgkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCitmaQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQorCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2FjdGlvbl0sIFswXSwKKyAgICBbSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGVdKQorXSkjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSAorCisKKyMgX0xUX0NNRF9TVFJJUExJQgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9TVFJJUExJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCitdKSMgX0xUX0NNRF9TVFJJUExJQgorCisKKyMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCittNF9pZihbJDFdLAorCVtdLCBbCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OworICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgIGVzYWMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSJzLD1cKFtbQS1aYS16XV06XCksXDEsZyIgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYworICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxzZQorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQorICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKKyAgICAgICRTRUQgJ3MsL1woW1tBLVphLXpdXTpcKSxcMSxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpXSkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKK200X2lmKFskMV0sIFtdLFsKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiXSkKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKK200X2lmKFskMV0sIFtdLFsKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIl0pCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbWzIzXV0uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBBQ19DQUNIRV9WQUwoW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sCisgICAgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisJIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKyAgICBdKQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuW1s4OV1dIHwgb3BlbmJzZDIuW1s4OV1dLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKyAgICBbVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisgICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorICAgIFtEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/XSkKK19MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCitfTFRfREVDTChbXSwgW3J1bnBhdGhfdmFyXSwgWzBdLCAgW1NoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisgICAgW0lzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD9dKQorX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCitfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKyAgICBbW0xpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisgICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKyAgICBbW1RoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lXV0pCitfTFRfREVDTChbXSwgW2luc3RhbGxfb3ZlcnJpZGVfbW9kZV0sIFsxXSwKKyAgICBbUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorICAgIFtbQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisgICAgbm90IHNob3duXV0pCitfTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKyAgICBbV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW1J1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK10pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKK0FDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorW2Nhc2UgJE1BR0lDX0NNRCBpbgorW1tcXC8qXSB8ICA/OltcXC9dKl0pCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KKyAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJDEiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhY10pCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitfTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKwkgW1VzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSJdKWRubAorXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbXSkKKworCisjIF9MVF9QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CittNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAorW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCisgIGVsc2UKKyAgICBNQUdJQ19DTUQ9OgorICBmaQorZmkKK10pIyBfTFRfUEFUSF9NQUdJQworCisKKyMgTFRfUEFUSF9MRAorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKK0FDX0RFRlVOKFtMVF9QQVRIX0xEXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitBQ19BUkdfV0lUSChbZ251LWxkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAorCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAorICAgIFt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXNdLAorICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK19MVF9QQVRIX0xEX0dOVQorQUNfU1VCU1QoW0xEXSkKKworX0xUX1RBR0RFQ0woW10sIFtMRF0sIFsxXSwgW1RoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXNdKQorXSkjIExUX1BBVEhfTEQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK0FVX0FMSUFTKFtBQ19QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTERdLCBbXSkKKworCisjIF9MVF9QQVRIX0xEX0dOVQorIy0gLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUEFUSF9MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGx0X2N2X3Byb2dfZ251X2xkLAorWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhY10pCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKK10pIyBfTFRfUEFUSF9MRF9HTlUKKworCisjIF9MVF9DTURfUkVMT0FECisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgcmVsb2FkIGZsYWcgZm9yIGxpbmtlcgorIyAgIC0tIFBPUlRNRSBTb21lIGxpbmtlcnMgbWF5IG5lZWQgYSBkaWZmZXJlbnQgcmVsb2FkIGZsYWcuCittNF9kZWZ1bihbX0xUX0NNRF9SRUxPQURdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz1mYWxzZQorICAgIGZpCisgICAgOzsKKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCitfTFRfVEFHREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCitfTFRfVEFHREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAorXSkjIF9MVF9DTURfUkVMT0FECisKKworIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcworIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKK1tsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbWzQtOV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KKyAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXVwuW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworXSkKKworZmlsZV9tYWdpY19nbG9iPQord2FudF9ub2Nhc2VnbG9iPW5vCitpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG1pbmd3KiB8IHB3MzIqKQorICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKyAgICBlbHNlCisgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKyAgICBbSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFt3YW50X25vY2FzZWdsb2JdLCBbMV0sCisgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitdKSMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorCisKKyMgTFRfUEFUSF9OTQorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCitBQ19ERUZVTihbTFRfUEFUSF9OTV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKK1tpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaV0pCitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgW2R1bXBiaW4gImxpbmsgLWR1bXAiXSwgOikKKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgICpDT0ZGKikKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgRFVNUEJJTj06CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgQUNfU1VCU1QoW0RVTVBCSU5dKQorICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKyAgICA7OworICAqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworICAgIDs7CisgIGVzYWMKKyAgOzsKKyopCisgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisgIDs7Citlc2FjCitdKQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisKKworIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCittNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CitBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisgIE1BTklGRVNUX1RPT0w9OgorZmkKK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorXSkjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKworCisjIExUX0xJQl9NCisjIC0tLS0tLS0tCisjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtMVF9MSUJfTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jZWdjYyogfCAqLSotY3lnd2luKiB8ICotKi1oYWlrdSogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCisgIDs7CisqKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorICA7OworZXNhYworQUNfU1VCU1QoW0xJQk1dKQorXSkjIExUX0xJQl9NCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLIFsnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKK10pCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoZmFpbGVkKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG9rKQorZmkKKworIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tbQF1dRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKwltNF9pZihbJDFdLCBbR0NKXSwgW10sCisJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ii1YY29tcGlsZXIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbWzEtN11dLiogfCAqU3VuKkZvcnRyYW4qXCA4LltbMC0zXV0qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbW0NGXV0qQ29tcGlsZXIqKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgOzsKKwkqUG9ydGxhbmRcIEdyb3VwKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworCitBQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKyAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCisgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7CisgICAgIGVzYWNdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQorZmkKK19MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKwlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKworX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitfTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCitdKSMgX0xUX0NPTVBJTEVSX1BJQworCisKKyMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbWzQtOV1dKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKKyAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgY2wqKQorICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICA7OworICBlc2FjCitdLCBbCisgIHJ1bnBhdGhfdmFyPQorICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCitkbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFtbMy05XV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKwkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbW2NDXV0qIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJZXNhYworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFtbNC05XV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwkjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwKKwkjIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwlfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCV9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICBlbHNlCisJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICBmaX4KKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKwkgIGxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAqLmV4ZXwqLkVYRSkgOzsKKwkgICAgKikKKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICA7OworCSAgZXNhY34KKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgZmknCisJOzsKKyAgICAgICopCisJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMi4qKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwltNF9pZigkMSwgW10sIFsKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICBfTFRfTElOS0VSX09QVElPTihbaWYgJENDIHVuZGVyc3RhbmRzIC1iXSwKKwkgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX19iLCAkMSksIFstYl0sCisJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCisJICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisJICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2xdLAorCSAgW3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorCSAgIEFDX0xJTktfSUZFTFNFKAorCSAgICAgW0FDX0xBTkdfU09VUkNFKAorCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWworICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGVuZF1dLAorCQkJICAgICAgW0ZvcnRyYW5dLCBbWworICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGVuZF1dKV0pXSwKKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKKwlbbHRfY3ZfXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSwKKwlbJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwkgIHBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisJICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorCSAgdGhlbgorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgZWxzZQorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKwldKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSRsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKyAgICBmaQorCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKyAgICAgIExUX1BBVEhfTEQKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBlbHNlCisJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICAgIGZpfgorCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJICAjIERvbid0IHVzZSByYW5saWIKKwkgIF9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICAgKikKKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCQk7OworCSAgICBlc2FjfgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICAgIGZpJworCSAgOzsKKwkqKQorCSAgIyBnKysKKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGVsc2UKKwkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBmaX4KKwkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZDIuKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QtZWxmKikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAgICAgIyBjb252ZW50aW9ucworICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBnbnUqKQorICAgICAgICA7OworCisgICAgICBoYWlrdSopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICBpYTY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgorCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisJICAgICAgJyIkX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpIgorCSAgICA7OworCSAgKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCisgICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMKKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisjIHJhdGhlciB0aGFuIHRoZSBsaWJ0b29sIHNjcmlwdC4KK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCitBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKQorZnVuY19zdHJpcG5hbWVfY25mICgpCit7CisgIGNhc2UgJHsyfSBpbgorICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisKKyMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCittNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0dPXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwYWNrYWdlIGZvbworZnVuYyBmb28oKSB7Cit9CitfTFRfRU9GCitdKQorCitfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKypcIC1mdXNlLWxpbmtlci1wbHVnaW4qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby11c2UtbGlua2VyLXBsdWdpbiIgOzsKK2VzYWMKKworZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorICAgICAgICAgY2FzZSAkcCBpbgorICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgZXNhYworICAgICAgIGZpCisgICAgICAgY2FzZSAkcCBpbgorICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgZXNhYworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHtwcmV2fSBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7CisKK2xpbnV4KikKKyAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICpTdW5cIEMqKQorICAgICMgU3VuIEMrKyA1LjkKKworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKiB8IHN1bkNDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KK2lmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorZmkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAorICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKKyAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisgICAgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCisgICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisgICAgYSBzaGFyZWQgbGlicmFyeV0pCitdKSMgX0xUX1NZU19ISURERU5fTElCREVQUworCisKKyMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQoraWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENDPSR7Rjc3LSJmNzcifQorICBDRkxBR1M9JEZGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisgIEdDQz0kRzc3CisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCisgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfTEFOR19GQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4pCisKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0ZDLSJmOTUifQorICBDRkxBR1M9JEZDRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHQ0otImdjaiJ9CitDRkxBR1M9JEdDSkZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR09fQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgR28gY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dPX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HT10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEdvIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1nbworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgR28gdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R09DLSJnY2NnbyJ9CitDRkxBR1M9JEdPRkxBR1MKK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dPX0NPTkZJRworCisKKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JworCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0KK0NDPSR7UkMtIndpbmRyZXMifQorQ0ZMQUdTPQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisKK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgOgorICBfTFRfQ09ORklHKCQxKQorZmkKKworR0NDPSRsdF9zYXZlX0dDQworQUNfTEFOR19SRVNUT1JFCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfR08KKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR09dLAorW0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbywpCitdKQorCisKKyMgTFRfUFJPR19SQworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKworCisjIF9MVF9ERUNMX0VHUkVQCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKK19MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQorZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KK0FDX1NVQlNUKFtHUkVQXSkKK10pCisKKworIyBfTFRfREVDTF9PQkpEVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCitBQ19TVUJTVChbT0JKRFVNUF0pCitdKQorCisjIF9MVF9ERUNMX0RMTFRPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCittNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKK0FDX1NVQlNUKFtETExUT09MXSkKK10pCisKKyMgX0xUX0RFQ0xfU0VECisjIC0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCitbQUNfUFJPR19TRUQKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKK19MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitfTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorXSkjIF9MVF9ERUNMX1NFRAorCittNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittNF9kZWZ1bihbQUNfUFJPR19TRURdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKK1sjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworbHRfYWNfbWF4PTAKK2x0X2FjX2NvdW50PTAKKyMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCisgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorICBsdF9hY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgYnJlYWsKKyAgZmkKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCisgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKyAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCisgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGZpCisgIGRvbmUKK2RvbmUKK10pCitTRUQ9JGx0X2N2X3BhdGhfU0VECitBQ19TVUJTVChbU0VEXSkKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkjQUNfUFJPR19TRUQKK10pI200X2lmbmRlZgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLCBbXSkKKworCisjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbeHNpX3NoZWxsPSckeHNpX3NoZWxsJ10pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCitBQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorX0xUX0RFQ0woW10sIFtsdF91bnNldF0sIFswXSwgW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCJdKWRubAorCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCitfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKK10pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKworCisjIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKKyMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KK200X2RlZnVuKFtfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFXSwKK1tkbmwgeworc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCiskMSAoKVwKK3tcCittNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKK30gIyBFeHRlbmRlZC1zaGVsbCAkMSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorXSkKKworCisjIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisjIGVxdWl2YWxlbnQgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRob3NlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuLgorbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAorW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgICBlc2FjXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Jhc2VuYW1lXSwgW2RubAorICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWVdLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICAgIGVzYWMKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKKyAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X3Nob3J0X29wdF0sIFtkbmwKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgICBlc2FjXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FyaXRoXSwgWyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCitmaQorCitpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF9xdW90ZWRdLCBbZG5sCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKK2RubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAorICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXSkKKworICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZWxzZQorICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZmkKKworaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGVdKQorZmkKK10pCisKKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGV0ZXJtaW5lIHdoaWNoIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQorIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KK200X2RlZnVuKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorW2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICotKi1jeWd3aW4qICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICA7OworZXNhYworXSkKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b19ob3N0X2ZpbGVfY21kXSwgW2x0X2N2X3RvX2hvc3RfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCitbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKK2VzYWMKK10pCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorXSkjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0b3B0aW9ucy5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWFjZDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0b3B0aW9ucy5tNApAQCAtMCwwICsxLDM4NCBAQAorIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisgIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1hY3JvcyB0byBoYW5kbGUgTFRfSU5JVCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljQDw6QD1QS0dTQDo+QF0sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbbHRfcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICR3aXRodmFsIGluCisgICAgeWVzfG5vKSBwaWNfbW9kZT0kd2l0aHZhbCA7OworICAgICopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW3BpY19tb2RlPWRlZmF1bHRdKQorCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKQorCitfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorXSkjIF9MVF9XSVRIX1BJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtuby1waWNdLCBbX0xUX1dJVEhfUElDKFtub10pXSkKKworIyBPbGQgbmFtZToKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExURExfSU5JVCBPcHRpb25zICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtub25yZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbcmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorCittNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2luc3RhbGxhYmxlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0c3VnYXIubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L2x0c3VnYXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwMGEwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHRzdWdhci5tNApAQCAtMCwwICsxLDEyMyBAQAorIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRzdWdhci5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQorCisKKyMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKKyMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKKyMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KK200X2RlZmluZShbbHRfam9pbl0sCitbbTRfaWYoWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorbTRfZGVmaW5lKFtfbHRfam9pbl0sCitbbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorCisKKyMgbHRfY2FyKExJU1QpCisjIGx0X2NkcihMSVNUKQorIyAtLS0tLS0tLS0tLS0KKyMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KKyMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAorIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KK200X2RlZmluZShbbHRfY2FyXSwgW1skMV1dKQorbTRfZGVmaW5lKFtsdF9jZHJdLAorW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCisgICAgICAgWyQjXSwgMSwgW10sCisgICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQorbTRfZGVmaW5lKFtsdF91bnF1b3RlXSwgJDEpCisKKworIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgorIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCisjIHRvIE1BQ1JPLU5BTUUgYXMgaXMgKGxlYXZpbmcgdGhlIGV4cGFuc2lvbiBmb3Igd2hlbiBNQUNSTy1OQU1FIGlzIGludm9rZWQpLgorIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKKyMgdGhhbiBkZWZpbmVkIGFuZCBlbXB0eSkuCisjCisjIFRoaXMgbWFjcm8gaXMgbmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIEF1dG9jb25mIDIuNjIsIHNpbmNlIGVhcmxpZXIKKyMgdmVyc2lvbnMgb2YgbTRzdWdhciBtaXN0YWtlbmx5IGV4cGFuZGVkIFNFUEFSQVRPUiBidXQgbm90IFNUUklORy4KK200X2RlZmluZShbbHRfYXBwZW5kXSwKK1ttNF9kZWZpbmUoWyQxXSwKKwkgICBtNF9pZmRlZihbJDFdLCBbbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKKworCisKKyMgbHRfY29tYmluZShTRVAsIFBSRUZJWC1MSVNULCBJTkZJWCwgU1VGRklYMSwgW1NVRkZJWDIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBTRVAgZGVsaW1pdGVkIGxpc3Qgb2YgYWxsIHBhaXJlZCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgb2YKKyMgUFJFRklYLUxJU1Qgd2l0aCBTVUZGSVgxIHRocm91Z2ggU1VGRklYbi4gIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdAorIyBoYXMgdGhlIGZvcm0gUFJFRklYbUlORklYU1VGRklYbi4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2NvbWJpbmUgYWRkZWQgaW4gQXV0b2NvbmYgMi42Mi4KK200X2RlZmluZShbbHRfY29tYmluZV0sCitbbTRfaWYobTRfZXZhbChbJCMgPiAzXSksIFsxXSwKKyAgICAgICBbbTRfcHVzaGRlZihbX0x0X3NlcF0sIFttNF9kZWZpbmUoW19MdF9zZXBdLCBtNF9kZWZuKFtsdF9jYXJdKSldKV1dZG5sCitbW200X2ZvcmVhY2goW19MdF9wcmVmaXhdLCBbJDJdLAorCSAgICAgW200X2ZvcmVhY2goW19MdF9zdWZmaXhdLAorCQldbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdChtNF9zaGlmdChtNF9zaGlmdCgkQCkpKSkpWywKKwlbX0x0X3NlcChbJDFdKVtdbTRfZGVmbihbX0x0X3ByZWZpeF0pWyQzXW00X2RlZm4oW19MdF9zdWZmaXhdKV0pXSldKV0pCisKKworIyBsdF9pZl9hcHBlbmRfdW5pcShNQUNSTy1OQU1FLCBWQVJOQU1FLCBbU0VQQVJBVE9SXSwgW1VOSVFdLCBbTk9ULVVOSVFdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZmYgTUFDUk8tTkFNRSBkb2VzIG5vdCB5ZXQgY29udGFpbiBWQVJOQU1FLCB0aGVuIGFwcGVuZCBpdCAoZGVsaW1pdGVkCisjIGJ5IFNFUEFSQVRPUiBpZiBzdXBwbGllZCkgYW5kIGV4cGFuZCBVTklRLCBlbHNlIE5PVC1VTklRLgorbTRfZGVmaW5lKFtsdF9pZl9hcHBlbmRfdW5pcV0sCitbbTRfaWZkZWYoWyQxXSwKKwkgIFttNF9pZihtNF9pbmRleChbJDNdbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKKwkJIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sCisJCSBbJDVdKV0sCisJICBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdKV0pCisKKworIyBsdF9kaWN0X2FkZChESUNULCBLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF0sCitbbTRfZGVmaW5lKFskMSgkMildLCBbJDNdKV0pCisKKworIyBsdF9kaWN0X2FkZF9zdWJrZXkoRElDVCwgS0VZLCBTVUJLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF9zdWJrZXldLAorW200X2RlZmluZShbJDEoJDI6JDMpXSwgWyQ0XSldKQorCisKKyMgbHRfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmV0Y2hdLAorW200X2lmdmFsKFskM10sCisJbTRfaWZkZWYoWyQxKCQyOiQzKV0sIFttNF9kZWZuKFskMSgkMjokMyldKV0pLAorICAgIG00X2lmZGVmKFskMSgkMildLCBbbTRfZGVmbihbJDEoJDIpXSldKSldKQorCisKKyMgbHRfaWZfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldLCBWQUxVRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfaWZfZGljdF9mZXRjaF0sCitbbTRfaWYobHRfZGljdF9mZXRjaChbJDFdLCBbJDJdLCBbJDNdKSwgWyQ0XSwKKwlbJDVdLAorICAgIFskNl0pXSkKKworCisjIGx0X2RpY3RfZmlsdGVyKERJQ1QsIFtTVUJLRVldLCBWQUxVRSwgW1NFUEFSQVRPUl0sIEtFWSwgWy4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmlsdGVyXSwKK1ttNF9pZihbJDVdLCBbXSwgW10sCisgIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQ0XSwgW1ssIF1dKSksCisgICAgICAgICAgIGx0X3VucXVvdGUobTRfc3BsaXQobTRfbm9ybWFsaXplKG00X2ZvcmVhY2goX0x0X2tleSwgbHRfY2FyKFttNF9zaGlmdG4oNCwgJEApXSksCisJCSAgICAgIFtsdF9pZl9kaWN0X2ZldGNoKFskMV0sIF9MdF9rZXksIFskMl0sIFskM10sIFtfTHRfa2V5IF0pXSkpKSkpXSlbXWRubAorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHR2ZXJzaW9uLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9sdHZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhODYwMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHR2ZXJzaW9uLm00CkBAIC0wLDAgKzEsMjMgQEAKKyMgbHR2ZXJzaW9uLm00IC0tIHZlcnNpb24gbnVtYmVycwkJCS0qLSBBdXRvY29uZiAtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBAY29uZmlndXJlX2lucHV0QAorCisjIHNlcmlhbCAzMzM3IGx0dmVyc2lvbi5tNAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjQuMl0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMzM3XSkKKworQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKK1ttYWNyb192ZXJzaW9uPScyLjQuMicKK21hY3JvX3JldmlzaW9uPScxLjMzMzcnCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9sdH5vYnNvbGV0ZS5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHR+b2Jzb2xldGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3M2RhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5OCBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCittNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQorbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9jb3ZlcmFnZS5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2NvdmVyYWdlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMDY0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9jb3ZlcmFnZS5tNApAQCAtMCwwICsxLDEwNyBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNybyB0aGF0IGFkZHMgYW4KKyMgICAgICAtLWVuYWJsZS1jb3ZlcmFnZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgcGFja2FnZSBhbmQKKyMgICAgICBjb250cm9scyB3aGV0aGVyIHRoZSBwYWNrYWdlIHdpbGwgYmUgYnVpbHQgZm9yIGNvZGUgY292ZXJhZ2UuCisjCisKKyMKKyMgTkxfRU5BQkxFX0NPVkVSQUdFKGRlZmF1bHQpCisjCisjICAgZGVmYXVsdCAtIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCAoeWVzKSBvciBkaXNhYmxlZCAobm8pCisjICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisjCisjIEFkZHMgYW4gLS1lbmFibGUtY292ZXJhZ2UgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2Ugd2l0aCBhCisjIGRlZmF1bHQgdmFsdWUgb2YgJ2RlZmF1bHQnIChzaG91bGQgYmUgZWl0aGVyICdubycgb3IgJ3llcycpIGFuZCBjb250cm9scworIyB3aGV0aGVyIHRoZSBwYWNrYWdlIHdpbGwgYmUgYnVpbHQgd2l0aCBvciB3aXRob3V0IGNvZGUgY292ZXJhZ2UuCisjCisjIFRoZSB2YWx1ZSAnbmxfY3ZfYnVpbGRfY292ZXJhZ2UnIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuIEluCisjIGFkZGl0aW9uLCBOTF9DT1ZFUkFHRV9DUFBGTEFHUyBhbmQgTkxfQ09WRVJBR0VfTERGTEFHUyB3aWxsIGJlIHNldAorIyB0byB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIsCisjIHJlc3BlY3RpdmVseS4KKyMKKyMgTk9URTogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBhdCBwcmVzZW50IGZvciBHQ0Mgb3IgR0NDLWNvbXBhdGlibGUKKyMgICAgICAgdG9vbGNoYWlucy4KKyMKKyMgTk9URTogVGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgaW5mbHVlbmNlZCBieSBubF9jdl9idWlsZF9vcHRpbWl6ZWQgZnJvbQorIyAgICAgICBOTF9ESVNBQkxFX09QVElNSVpBVElPTgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX0VOQUJMRV9DT1ZFUkFHRV0sCitbCisgICAgIyBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIGRlZmF1bHQgdmFsdWUgaGFzIGJlZW4gcGFzc2VkIGluLgorCisgICAgbTRfY2FzZShbJDFdLAorICAgICAgICBbeWVzXSxbXSwKKyAgICAgICAgW25vXSxbXSwKKyAgICAgICAgW200X2ZhdGFsKFskMDogaW52YWxpZCBkZWZhdWx0IHZhbHVlICckMSc7IG11c3QgYmUgJ3llcycgb3IgJ25vJ10pXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRvIGJ1aWxkIGNvZGUtY292ZXJhZ2UgaW5zdGFuY2VzIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXNdLAorICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZSwKKyAgICAgICAgWworICAgICAgICAgICAgQUNfQVJHX0VOQUJMRShjb3ZlcmFnZSwKKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvdmVyYWdlXSxbRW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGNvZGUtY292ZXJhZ2UgaW5zdGFuY2VzIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisgICAgICAgICAgICAgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlPSR7ZW5hYmxldmFsfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIke25sX2N2X2J1aWxkX29wdGltaXplZH0iID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW2JvdGggLS1lbmFibGUtb3B0aW1pemF0aW9uIGFuZCAtLWVuYWJsZS1jb3ZlcmFnZSBjYW5ub3QgdXNlZC4gUGxlYXNlLCBjaG9vc2Ugb25lIG9yIHRoZSBvdGhlciB0byBlbmFibGUuXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jb3ZlcmFnZV0pCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbLS1lbmFibGUtb3B0aW1pemF0aW9uIHdhcyBzcGVjaWZpZWQsIGNvdmVyYWdlIGRpc2FibGVkXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlPW5vCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2U9JDEKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIF0pCisKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2V9IiA9ICJ5ZXMiOyB0aGVuICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJHtHQ0N9IiAhPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0dDQyBvciBhIEdDQy1jb21wYXRpYmxlIHRvb2xjaGFpbiBpcyByZXF1aXJlZCBmb3IgLS1lbmFibGUtY292ZXJhZ2VdKQorCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBOTF9DT1ZFUkFHRV9DUFBGTEFHUz0iLS1jb3ZlcmFnZSIKKyAgICAgICAgICAgICAgICAgICAgTkxfQ09WRVJBR0VfTERGTEFHUz0iLWxnY292IiAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgXSkKK10pCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2VfcmVwb3J0aW5nLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfY292ZXJhZ2VfcmVwb3J0aW5nLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGUzYTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV9jb3ZlcmFnZV9yZXBvcnRpbmcubTQKQEAgLTAsMCArMSwxNDkgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gdGhhdCBhZGRzIGFuCisjICAgICAgLS1lbmFibGUtY292ZXJhZ2UgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2UgYW5kCisjICAgICAgY29udHJvbHMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IGZvciBjb2RlIGNvdmVyYWdlCisjICAgICAgcmVwb3J0aW5nLCB1c2luZyB0aGUgTENPViBwYWNrYWdlLgorIworCisjCisjIE5MX0VOQUJMRV9DT1ZFUkFHRV9SRVBPUlRTKGRlZmF1bHQpCisjCisjICAgZGVmYXVsdCAtIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgYXV0b21hdGljIChhdXRvKSwgZW5hYmxlZAorIyAgICAgICAgICAgICAoeWVzKSwgb3IgZGlzYWJsZWQgKG5vKSBieSBkZWZhdWx0LgorIworIyBBZGRzIGFuIC0tZW5hYmxlLWNvdmVyYWdlLXJlcG9ydHMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlCisjIHBhY2thZ2Ugd2l0aCBhIGRlZmF1bHQgdmFsdWUgb2YgJ2RlZmF1bHQnIChzaG91bGQgYmUgJ2F1dG8nLCAnbm8nIG9yCisjICd5ZXMnKSBhbmQgY29udHJvbHMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3IKKyMgd2l0aG91dCBjb2RlIGNvdmVyYWdlIHJlcG9ydHMsIHVzaW5nIHRoZSBMQ09WIHBhY2thZ2UuCisjCisjIFRoZSB2YWx1ZSAnbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cycgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdC4gSW4KKyMgYWRkaXRpb24sIExDT1Ygd2lsbCBiZSBzZXQgdG8gdGhlIHBhdGggb2YgdGhlICdsY292JyB0b29sIGFuZCBHRU5IVE1MIHdpbGwgIGJlIHNldCB0byB0aGUgcGF0aCBvZiB0aGUgJ2dlbmh0bWwnIHRvb2wuCisjCisjIE5PVEU6IFRoZSBiZWhhdmlvciBvZiB0aGlzIGlzIGluZmx1ZW5jZWQgYnkgbmxfY3ZfYnVpbGRfY292ZXJhZ2UgZnJvbQorIyAgICAgICBOTF9FTkFCTEVfQ09WRVJBR0UuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfRU5BQkxFX0NPVkVSQUdFX1JFUE9SVFNdLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHBhc3NlZCBpbi4KKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW2F1dG9dLFtdLAorICAgICAgICBbeWVzXSxbXSwKKyAgICAgICAgW25vXSxbXSwKKyAgICAgICAgW200X2ZhdGFsKFskMDogaW52YWxpZCBkZWZhdWx0IHZhbHVlICckMSc7IG11c3QgYmUgJ2F1dG8nLCAneWVzJyBvciAnbm8nXSldKQorCisgICAgIyBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGxjb3YgYW5kIGdlbmh0bWwsIHJlcXVpcmVkCisgICAgIyB0byBidWlsZCBhbmQgZ2VuZXJhdGUgdGhlIGNvdmVyYWdlIHJlcG9ydHMuCisKKyAgICBBQ19QQVRIX1BST0coTENPViwgbGNvdikKKyAgICBBQ19QQVRIX1BST0coR0VOSFRNTCwgZ2VuaHRtbCkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRvIGJ1aWxkIGdyYXBoaWNhbCBjb2RlIGNvdmVyYWdlIHJlcG9ydHNdLAorICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzLAorICAgICAgICBbCisgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKGNvdmVyYWdlLXJlcG9ydHMsCisgICAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb3ZlcmFnZS1yZXBvcnRzXSxbRW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGNvZGUgY292ZXJhZ2UgcmVwb3J0cyAocmVxdWlyZXMgbGNvdikgIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisgICAgICAgICAgICAgICAgICAgIGF1dG98bm98eWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cz0ke2VuYWJsZXZhbH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWNvdmVyYWdlXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzPSQxCisgICAgICAgICAgICAgICAgXSkKKworICAgICAgICAgICAgIyBJZiBjb3ZlcmFnZSBpcyBub3QgZW5hYmxlZCwgdGhlbiBjb3ZlcmFnZSByZXBvcnRzCisgICAgICAgICAgICAjIGRlZmF1bHRzIHRvICdubycgaWYgaXQgaXMgJ2F1dG8nIG9yIGZhaWxzIGlmIGl0IGlzCisgICAgICAgICAgICAjICd5ZXMnLiBPdGhlcndpc2UsIGF2YWlsYWJpbGl0eSBvZiBsY292IGFuZCBnZW5odG1sCisgICAgICAgICAgICAjIGNvbmRpdGlvbiBiZWhhdmlvci4gTGFjayBvZiBhdmFpbGFiaWxpdHkgZm9yICd5ZXMnCisgICAgICAgICAgICAjIHJlc3VsdHMgaW4gZmFpbHVyZTsgaG93ZXZlciwgZm9yICdhdXRvJyB0aGVuIGNvdmVyYWdlCisgICAgICAgICAgICAjIHJlcG9ydHMgZGVmYXVsdCB0byAnbm8nLgorCisgICAgICAgICAgICBjYXNlICIke25sX2N2X2J1aWxkX2NvdmVyYWdlfSIgaW4KKworICAgICAgICAgICAgbm8pCisgICAgICAgICAgICAgICAgY2FzZSAiJHtubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzfSIgaW4KKworICAgICAgICAgICAgICAgICAgICBhdXRvKQorICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cz0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbLS1lbmFibGUtY292ZXJhZ2UgbXVzdCBiZSBhc3NlcnRlZCB0byB1c2UgLS1lbmFibGUtY292ZXJhZ2UtcmVwb3J0cy5dKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICBubykKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgeWVzKQorICAgICAgICAgICAgICAgIGNhc2UgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0c30iIGluCisKKyAgICAgICAgICAgICAgICAgICAgYXV0bykKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQm90aCBsY292IGFuZCBnZW5odG1sIG11c3QgZXhpc3QgdG8gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICAgICAgICAgICAgICAjIGVuYWJsZSBjb3ZlcmFnZSByZXBvcnRzLgorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHtMQ09WfSIgPSAieCIgfHwgdGVzdCAieCR7R0VOSFRNTH0iID0gIngiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0cz0ibm8iCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBubF9jdl9idWlsZF9jb3ZlcmFnZV9yZXBvcnRzPSJ5ZXMiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQm90aCBsY292IGFuZCBnZW5odG1sIG11c3QgZXhpc3QgdG8gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICAgICAgICAgICAgICAjIGVuYWJsZSBjb3ZlcmFnZSByZXBvcnRzLiBTaW5jZSB0aGUgZGVmYXVsdCBvciB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFzayBpcyAneWVzJywgd2UgbXVzdCBmYWlsIGlmIGxjb3Ygb3IgZ2VuaHRtbCBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYmUgZm91bmQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngke0xDT1Z9IiA9ICJ4IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgJ2xjb3YnLiBZb3UgbXVzdCBoYXZlIHRoZSBsY292IHBhY2thZ2UgaW5zdGFsbGVkIHRvIHVzZSBjb3ZlcmFnZSByZXBvcnRzLl0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdGVzdCAieCR7R0VOSFRNTH0iID0gIngiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCAnZ2VuaHRtbCcuIFlvdSBtdXN0IGhhdmUgdGhlIGxjb3YgcGFja2FnZSBpbnN0YWxsZWQgdG8gdXNlIGNvdmVyYWdlIHJlcG9ydHMuXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiB0ZXN0ICIke25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHN9IiA9ICJhdXRvIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHM9InllcyIKKworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgbm8pCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgIGVzYWMKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RlYnVnLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfZGVidWcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzZjQzZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RlYnVnLm00CkBAIC0wLDAgKzEsNzkgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gdGhhdCBhZGRzIGFuCisjICAgICAgLS1lbmFibGUtZGVidWcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2UgYW5kIGNvbnRyb2xzCisjICAgICAgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IGZvciBkZWJ1ZyBpbnN0YW5jZXMgb2YgcHJvZ3JhbXMKKyMgICAgICBhbmQgbGlicmFyaWVzLgorIworCisjCisjIE5MX0VOQUJMRV9ERUJVRyhkZWZhdWx0KQorIworIyAgIGRlZmF1bHQgLSBXaGV0aGVyIHRoZSBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgKHllcykgb3IgZGlzYWJsZWQgKG5vKQorIyAgICAgICAgICAgICBieSBkZWZhdWx0LgorIworIyBBZGRzIGFuIC0tZW5hYmxlLWRlYnVnIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIHdpdGggYQorIyBkZWZhdWx0IHZhbHVlIG9mICdkZWZhdWx0JyAoc2hvdWxkIGJlIGVpdGhlciAnbm8nIG9yICd5ZXMnKSBhbmQgY29udHJvbHMKKyMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3Igd2l0aG91dCAtRERFQlVHIGVuYWJsZWQuCisjCisjIFRoZSB2YWx1ZSAnbmxfY3ZfYnVpbGRfZGVidWcnIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuIEluCisjIGFkZGl0aW9uLCB0aGUgY29udGVudHMgb2YgQ0ZMQUdTLCBDWFhGTEFHUywgT0JKQ0ZMQUdTLCBhbmQKKyMgT0JKQ1hYRkxBR1MgbWF5IGJlIGFsdGVyZWQgYnkgdGhlIHVzZSBvZiB0aGlzIG1hY3JvLCBhZGRpbmcgLURERUJVRworIyBpZiB0aGlzIG9wdGlvbiBpcyBhc3NlcnRlZC4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9FTkFCTEVfREVCVUddLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHBhc3NlZCBpbi4KKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICd5ZXMnIG9yICdubyddKV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0byBidWlsZCBkZWJ1ZyBpbnN0YW5jZXMgb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllc10sCisgICAgICAgIG5sX2N2X2J1aWxkX2RlYnVnLAorICAgICAgICBbCisgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKGRlYnVnLAorICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVidWddLFtFbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgZGVidWcgaW5zdGFuY2VzIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluIAorCisgICAgICAgICAgICAgICAgICAgIG5vfHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2RlYnVnPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZGVidWddKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX2RlYnVnPSQxCisgICAgICAgICAgICAgICAgXSkKKworICAgICAgICAgICAgaWYgdGVzdCAiJHtubF9jdl9idWlsZF9kZWJ1Z30iID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRERFQlVHIgorICAgICAgICAgICAgICAgIENYWEZMQUdTPSIke0NYWEZMQUdTfSAtRERFQlVHIgorICAgICAgICAgICAgICAgIE9CSkNGTEFHUz0iJHtPQkpDRkxBR1N9IC1EREVCVUciCisgICAgICAgICAgICAgICAgT0JKQ1hYRkxBR1M9IiR7T0JKQ1hYRkxBR1N9IC1EREVCVUciCisgICAgICAgICAgICBmaQorICAgIF0pCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfZG9jcy5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RvY3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiMzU2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX2RvY3MubTQKQEAgLTAsMCArMSwxMTcgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gdGhhdCBhZGRzIGFuCisjICAgICAgLS1kaXNhYmxlLWRvY3MgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2UgYW5kIGNvbnRyb2xzCisjICAgICAgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3Igd2l0aG91dCBkb2N1bWVudGF0aW9uLgorIworCisjCisjIE5MX0VOQUJMRV9ET0NTKGRlZmF1bHQsIGRvdF9kZWZhdWx0KQorIworIyAgIGRlZmF1bHQgICAgIC0gV2hldGhlciB0aGUgb3B0aW9uIHNob3VsZCBiZSBhdXRvbWF0aWMgKGF1dG8pLCBlbmFibGVkCisjICAgICAgICAgICAgICAgICAoeWVzKSwgZGlzYWJsZWQgKG5vKSBieSBkZWZhdWx0LgorIyAgIGRvdF9kZWZhdWx0IC0gV2hldGhlciBEb3h5Z2VuIHNob3VsZCB1c2UgKFlFUykgb3Igbm90IHVzZSAoTk8pCisjICAgICAgICAgICAgICAgICBHcmFwaFZpeiBkb3QuCisjCisjIEFkZHMgYW4gLS1kaXNhYmxlLWRvY3MgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2Ugd2l0aCBhCisjIGRlZmF1bHQgdmFsdWUgb2YgJ2RlZmF1bHQnIChzaG91bGQgYmUgJ2F1dG8nLCAnbm8nIG9yICd5ZXMnKSBhbmQKKyMgY29udHJvbHMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3Igd2l0aG91dCBEb3h5Z2VuLWJhc2VkCisjIGRvY3VtZW50YXRpb24uCisjCisjIFRoZSB2YWx1ZSAnbmxfY3ZfYnVpbGRfZG9jcycgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdC4gSW4gYWRkaXRpb246CisjCisjICAgRE9YWUdFTiAgICAgICAgIC0gV2lsbCBiZSBzZXQgdG8gdGhlIHBhdGggb2YgdGhlIERveHlnZW4gZXhlY3V0YWJsZS4KKyMgICBET1QgICAgICAgICAgICAgLSBXaWxsIGJlIHNldCB0byB0aGUgcGF0aCBvZiB0aGUgR3JhcGhWaXogZG90CisjICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZS4KKyMgICBET1hZR0VOX1VTRV9ET1QgLSBXaWxsIGJlIHNldCB0byAnTk8nIG9yICdZRVMnIGRlcGVuZGluZyBvbiB3aGV0aGVyCisjICAgICAgICAgICAgICAgICAgICAgR3JhcGhWaXogZG90IGlzIGF2YWlsYWJsZS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9FTkFCTEVfRE9DU10sCitbCisgICAgIyBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgJ2RlZmF1bHQnIHZhbHVlIGlzIHNhbmUuCisKKyAgICBtNF9jYXNlKFskMV0sCisgICAgICAgIFthdXRvXSxbXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICdhdXRvJywgJ3llcycgb3IgJ25vJ10pXSkKKworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgdGhlICdkb3RfZGVmYXVsdCcgdmFsdWUgaXMgc2FuZS4KKworICAgIG00X2Nhc2UoWyQyXSwKKyAgICAgICAgW1lFU10sW10sCisgICAgICAgIFtOT10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDInOyBtdXN0IGJlICdZRVMnIG9yICdOTyddKV0pCisKKyAgICBET1hZR0VOX1VTRV9ET1Q9JDIKKworICAgIEFDX0FSR19WQVIoRE9YWUdFTiwgW0RveHlnZW4gZXhlY3V0YWJsZV0pCisgICAgQUNfQVJHX1ZBUihET1QsICAgICBbR3JhcGhWaXogJ2RvdCcgZXhlY3V0YWJsZSwgd2hpY2ggbWF5IGJlIHVzZWQsIHdoZW4gcHJlc2VudCwgdG8gZ2VuZXJhdGUgRG94eWdlbiBjbGFzcyBncmFwaHNdKQorCisgICAgQUNfUEFUSF9QUk9HKERPWFlHRU4sIGRveHlnZW4pCisgICAgQUNfUEFUSF9QUk9HKERPVCwgZG90KQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdG8gYnVpbGQgZG9jdW1lbnRhdGlvbl0sCisgICAgICAgIG5sX2N2X2J1aWxkX2RvY3MsCisgICAgICAgIFsKKwkgICAgQUNfQVJHX0VOQUJMRShkb2NzLAorCQlbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kb2NzXSxbRW5hYmxlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gKHJlcXVpcmVzIERveHlnZW4pIEA8OkBkZWZhdWx0PSQxQDo+QC5dKV0sCisJCVsKKwkJICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4gCisKKwkJICAgIGF1dG98bm98eWVzKQorCQkJbmxfY3ZfYnVpbGRfZG9jcz0ke2VuYWJsZXZhbH0KKwkJCTs7CisKKwkJICAgICopCisJCQlBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtZG9jc10pCisJCQk7OworCisJCSAgICBlc2FjCisJCV0sCisJCVtubF9jdl9idWlsZF9kb2NzPSQxXSkKKworCSAgICBpZiB0ZXN0ICJ4JHtET1hZR0VOfSIgIT0gIngiOyB0aGVuCisJCW5sX2N2X2hhdmVfZG94eWdlbj15ZXMKKwkgICAgZWxzZQorCQlubF9jdl9oYXZlX2RveHlnZW49bm8KKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIke25sX2N2X2J1aWxkX2RvY3N9IiA9ICJhdXRvIjsgdGhlbgorCQlpZiB0ZXN0ICIke25sX2N2X2hhdmVfZG94eWdlbn0iID0gIm5vIjsgdGhlbgorCQkgICAgbmxfY3ZfYnVpbGRfZG9jcz1ubworCQllbHNlCisJCSAgICBubF9jdl9idWlsZF9kb2NzPXllcworCQlmaQorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiR7bmxfY3ZfYnVpbGRfZG9jc30iID0gInllcyI7IHRoZW4KKwkJaWYgdGVzdCAiJHtubF9jdl9oYXZlX2RveHlnZW59IiA9ICJubyI7IHRoZW4KKwkJICAgIEFDX01TR19FUlJPUihbQnVpbGRpbmcgZG9jcyB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgYnV0IERveHlnZW4gY2Fubm90IGJlIGZvdW5kXSkKKwkJZWxpZiB0ZXN0ICIke25sX2N2X2hhdmVfZG94eWdlbn0iID0gInllcyI7IHRoZW4KKwkJICAgIGlmIHRlc3QgIngke0RPVH0iICE9ICJ4IjsgdGhlbgorCQkJRE9YWUdFTl9VU0VfRE9UPVlFUworCQkgICAgZmkKKwkJZmkKKwkgICAgZmkKKyAgICBdKQorCisgICAgQUNfU1VCU1QoRE9YWUdFTl9VU0VfRE9UKQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX29wdGltaXphdGlvbi5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX29wdGltaXphdGlvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmM5NDFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfb3B0aW1pemF0aW9uLm00CkBAIC0wLDAgKzEsOTIgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gdGhhdCBhZGRzIGFuCisjICAgICAgLS1lbmFibGUtb3B0aW1pemF0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIGFuZAorIyAgICAgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgY29kZQorIyAgICAgIG9wdGltaXphdGlvbi4KKyMKKworIworIyBOTF9FTkFCTEVfT1BUSU1JWkFUSU9OKGRlZmF1bHQpCisjCisjICAgZGVmYXVsdCAtIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCAoeWVzKSBvciBkaXNhYmxlZCAobm8pCisjICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisjCisjIEFkZHMgYW4gLS1lbmFibGUtb3B0aW1pemF0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIHdpdGggYQorIyBkZWZhdWx0IHZhbHVlIG9mICdkZWZhdWx0JyAoc2hvdWxkIGJlIGVpdGhlciAnbm8nIG9yICd5ZXMnKSBhbmQgY29udHJvbHMKKyMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3Igd2l0aG91dCBjb2RlIG9wdGltaXphdGlvbi4KKyMKKyMgVGhlIHZhbHVlICdubF9jdl9idWlsZF9vcHRpbWl6ZWQnIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuIEluCisjIGFkZGl0aW9uLCB0aGUgY29udGVudHMgb2YgQ0ZMQUdTLCBDWFhGTEFHUywgT0JKQ0ZMQUdTLCBhbmQgT0JKQ1hYRkxBR1MgbWF5CisjIGJlIGFsdGVyZWQgYnkgdGhlIHVzZSBvZiB0aGlzIG1hY3JvLCBjb252ZXJ0aW5nIC1PPHNvbWV0aGluZz4gdG8gLU8wLgorIworIyBOT1RFOiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBpcyBpbmZsdWVuY2VkIGJ5IG5sX2N2X2J1aWxkX2NvdmVyYWdlIGZyb20KKyMgICAgICAgTkxfRU5BQkxFX0NPVkVSQUdFCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfRU5BQkxFX09QVElNSVpBVElPTl0sCitbCisgICAgIyBDaGVjayB3aGV0aGVyIG9yIG5vdCBhIGRlZmF1bHQgdmFsdWUgaGFzIGJlZW4gcGFzc2VkIGluLgorCisgICAgbTRfY2FzZShbJDFdLAorICAgICAgICBbeWVzXSxbXSwKKyAgICAgICAgW25vXSxbXSwKKyAgICAgICAgW200X2ZhdGFsKFskMDogaW52YWxpZCBkZWZhdWx0IHZhbHVlICckMSc7IG11c3QgYmUgJ3llcycgb3IgJ25vJ10pXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRvIGJ1aWxkIGNvZGUtb3B0aW1pemVkIGluc3RhbmNlcyBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzXSwKKyAgICAgICAgbmxfY3ZfYnVpbGRfb3B0aW1pemVkLAorICAgICAgICBbCisgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKG9wdGltaXphdGlvbiwKKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9wdGltaXphdGlvbl0sW0VuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBjb2RlLW9wdGltaXplZCBpbnN0YW5jZXMgQDw6QGRlZmF1bHQ9JDFAOj5ALl0pXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4gCisKKyAgICAgICAgICAgICAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfb3B0aW1pemVkPSR7ZW5hYmxldmFsfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIke25sX2N2X2J1aWxkX2NvdmVyYWdlfSIgPSAieWVzIiAmJiB0ZXN0ICIke25sX2N2X2J1aWxkX29wdGltaXplZH0iID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW2JvdGggLS1lbmFibGUtb3B0aW1pemF0aW9uIGFuZCAtLWVuYWJsZS1jb3ZlcmFnZSBjYW5ub3QgdXNlZC4gUGxlYXNlLCBjaG9vc2Ugb25lIG9yIHRoZSBvdGhlciB0byBlbmFibGUuXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1vcHRpbWl6ZWRdKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2V9IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbLS1lbmFibGUtY292ZXJhZ2Ugd2FzIHNwZWNpZmllZCwgb3B0aW1pemF0aW9uIGRpc2FibGVkXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX29wdGltaXplZD1ubworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sX2N2X2J1aWxkX29wdGltaXplZD0kMQorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgXSkKKworICAgICAgICAgICAgaWYgdGVzdCAiJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9IiA9ICJubyI7IHRoZW4KKyAgICAgICAgICAgICAgICBDRkxBR1M9ImBlY2hvICR7Q0ZMQUdTfSB8IHNlZCAtZSAncywtT1tbWzphbG51bTpdXV0qLC1PMCxnJ2AiCisgICAgICAgICAgICAgICAgQ1hYRkxBR1M9ImBlY2hvICR7Q1hYRkxBR1N9IHwgc2VkIC1lICdzLC1PW1tbOmFsbnVtOl1dXSosLU8wLGcnYCIKKyAgICAgICAgICAgICAgICBPQkpDRkxBR1M9ImBlY2hvICR7T0JKQ0ZMQUdTfSB8IHNlZCAtZSAncywtT1tbWzphbG51bTpdXV0qLC1PMCxnJ2AiCisgICAgICAgICAgICAgICAgT0JKQ1hYRkxBR1M9ImBlY2hvICR7T0JKQ1hYRkxBR1N9IHwgc2VkIC1lICdzLC1PW1tbOmFsbnVtOl1dXSosLU8wLGcnYCIKKyAgICAgICAgICAgIGZpCisgICAgXSkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV90ZXN0cy5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZW5hYmxlX3Rlc3RzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Yjc5MTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV90ZXN0cy5tNApAQCAtMCwwICsxLDcxIEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIHRoYXQgYWRkcyBhbgorIyAgICAgIC0tZW5hYmxlLXRlc3RzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBwYWNrYWdlIGFuZCBjb250cm9scworIyAgICAgIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgdW5pdCBhbmQKKyMgICAgICBpbnRlZ3JhdGlvbiB0ZXN0cy4KKyMKKworIworIyBOTF9FTkFCTEVfVEVTVFMoZGVmYXVsdCkKKyMKKyMgICBkZWZhdWx0IC0gV2hldGhlciB0aGUgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkICh5ZXMpIG9yIGRpc2FibGVkIChubykKKyMgICAgICAgICAgICAgYnkgZGVmYXVsdC4KKyMKKyMgQWRkcyBhbiAtLWVuYWJsZS10ZXN0cyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgcGFja2FnZSB3aXRoIGEKKyMgZGVmYXVsdCB2YWx1ZSBvZiAnZGVmYXVsdCcgKHNob3VsZCBiZSBlaXRoZXIgJ25vJyBvciAneWVzJykgYW5kCisjIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHBhY2thZ2Ugd2lsbCBiZSBidWlsdCB3aXRoIG9yIHdpdGhvdXQgdW5pdCBhbmQKKyMgaW50ZWdyYXRpb24gdGVzdHMuCisjCisjIFRoZSB2YWx1ZSAnbmxfY3ZfYnVpbGRfdGVzdHMnIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FDX0RFRlVOKFtOTF9FTkFCTEVfVEVTVFNdLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHBhc3NlZCBpbi4KKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICd5ZXMnIG9yICdubyddKV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0byBidWlsZCB0ZXN0c10sCisgICAgICAgIG5sX2N2X2J1aWxkX3Rlc3RzLAorICAgICAgICBbCisgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHRlc3RzLAorICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdGVzdHNdLFtFbmFibGUgYnVpbGRpbmcgb2YgdGVzdHMgQDw6QGRlZmF1bHQ9JDFAOj5ALl0pXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4gCisKKyAgICAgICAgICAgICAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfdGVzdHM9JHtlbmFibGV2YWx9CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10ZXN0c10pCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgbmxfY3ZfYnVpbGRfdGVzdHM9JDEKKyAgICAgICAgICAgICAgICBdKQorICAgIF0pCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfd2Vycm9yLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9lbmFibGVfd2Vycm9yLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDMyYWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2VuYWJsZV93ZXJyb3IubTQKQEAgLTAsMCArMSw3OCBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNybyB0aGF0IGFkZHMgYW4KKyMgICAgICAtLWVuYWJsZS13YXJuaW5ncy1hcy1lcnJvcnMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIHBhY2thZ2UKKyMgICAgICBhbmQgY29udHJvbHMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHRvIHRyZWF0IGFsbAorIyAgICAgIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGFzIGVycm9ycy4gICMKKworIworIyBOTF9FTkFCTEVfV0VSUk9SKGRlZmF1bHQpCisjCisjICAgZGVmYXVsdCAtIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCAoeWVzKSBvciBkaXNhYmxlZCAobm8pCisjICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisjCisjIEFkZHMgYW4gLS1lbmFibGUtd2FybmluZ3MtYXMtZXJyb3JzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZQorIyBwYWNrYWdlIHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mICdkZWZhdWx0JyAoc2hvdWxkIGJlIGVpdGhlciAnbm8nIG9yCisjICd5ZXMnKSBhbmQgY29udHJvbHMgd2hldGhlciB0aGUgcGFja2FnZSB3aWxsIGJlIGJ1aWx0IHdpdGggb3IKKyMgd2l0aG91dCAtV2Vycm9yIGVuYWJsZWQuCisjCisjIFRoZSB2YWx1ZSAnbmxfY3Zfd2FybmluZ3NfYXNfZXJyb3JzJyB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LiBJbgorIyBhZGRpdGlvbiwgdGhlIHZhcmlhYmxlIE5MX1dFUlJPUl9DUFBGTEFHUyB3aWxsIGJlIHNldCB0byB0aGUKKyMgY29tcGlsZXItc3BlY2lmaWMgZmxhZyBuZWNlc3NhcnkgdG8gYXNzZXJ0IHRoaXMgb3B0aW9uLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX0VOQUJMRV9XRVJST1JdLAorWworICAgICMgQ2hlY2sgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHBhc3NlZCBpbi4KKworICAgIG00X2Nhc2UoWyQxXSwKKyAgICAgICAgW3llc10sW10sCisgICAgICAgIFtub10sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAnJDEnOyBtdXN0IGJlICd5ZXMnIG9yICdubyddKV0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0byB0cmVhdCBhbGwgY29tcGlsYXRpb24gd2FybmluZ3MgYXMgZXJyb3JzXSwKKyAgICAgICAgbmxfY3Zfd2FybmluZ3NfYXNfZXJyb3JzLAorICAgICAgICBbCisgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHdhcm5pbmdzLWFzLWVycm9ycywKKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXdhcm5pbmdzLWFzLWVycm9yc10sW1RyZWF0IGFsbCBjb21waWxhdGlvbiB3YXJuaW5ncyBhcyBlcnJvcnMgQDw6QGRlZmF1bHQ9JDFAOj5ALl0pXSwKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4gCisKKyAgICAgICAgICAgICAgICAgICAgbm98eWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgbmxfY3Zfd2FybmluZ3NfYXNfZXJyb3JzPSR7ZW5hYmxldmFsfQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtd2FybmluZ3MtYXMtZXJyb3JzXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBubF9jdl93YXJuaW5nc19hc19lcnJvcnM9JDEKKyAgICAgICAgICAgICAgICBdKQorICAgIF0pCisKKyAgICBpZiB0ZXN0ICIke25sX2N2X3dhcm5pbmdzX2FzX2Vycm9yc30iID0gInllcyI7IHRoZW4KKyAgICAgICAgQVhfQ0hFQ0tfQ09NUElMRVJfT1BUSU9OKFtDXSwgTkxfV0VSUk9SX0NQUEZMQUdTLCBbLVdlcnJvcl0pCisgICAgICAgIGlmIHRlc3QgIngke05MX1dFUlJPUl9DUFBGTEFHU30iID0gIngiOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgaG93IHRvIHRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycyBmb3IgeW91ciBjb21waWxlciAke0NDfV0pCisgICAgICAgIGZpCisgICAgZmkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2ZpbHRlcmVkX2Nhbm9uaWNhbC5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfZmlsdGVyZWRfY2Fub25pY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmRiM2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX2ZpbHRlcmVkX2Nhbm9uaWNhbC5tNApAQCAtMCwwICsxLDk3IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGEgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvIGZvciBmaWx0ZXJpbmcKKyMgICAgICB0aGUgYXV0b2NvbmYgY2Fub25pY2FsIGJ1aWxkLCBob3N0LCBvciB0YXJnZXQuCisjCisjICAgICAgTWFjIE9TIFggLyBEYXJ3aW4gZW5kcyB1cCBwdXR0aW5nIHNvbWUgdmVyc2lvbmluZyBjcnVmdCBvbiB0aGUKKyMgICAgICBlbmQgb2YgaXRzIHR1cGxlcyB0aGF0IG1vc3QgdXNlcnMgb2YgdGhlc2UgdmFyaWFibGVzIHJhcmVseQorIyAgICAgIGNhcmUgYWJvdXQuCisjCisKKyMKKyMgX05MX0ZJTFRFUkVEX0NBTk9OSUNBTChuYW1lKQorIworIyAgIG5hbWUgLSBUaGUgZXhpc3RpbmcgYXV0b2NvbmYgdmFyaWFibGUgdG8gZmlsdGVyCisjCisjICAgTWFjIE9TIFggLyBEYXJ3aW4gZW5kcyB1cCBwdXR0aW5nIHNvbWUgdmVyc2lvbmluZyBjcnVmdCBvbiB0aGUgZW5kCisjICAgb2YgaXRzIHR1cGxlcyB0aGF0IG1vc3QgdXNlcnMgb2YgdGhlc2UgdmFyaWFibGVzIHJhcmVseSBjYXJlIGFib3V0LgorIworIyAgIFRoaXMgZmlsdGVycyBzdWNoIHZlcnNpb25pbmcgY3J1ZnQgZnJvbSB0aGUgdmFyaWFibGUgJ25hbWUnCisjICAgZ2VuZXJhdGVkIGZyb20gQUNfQ0FOT05JQ0FMXzxOQU1FPiBhbmQgc2F2ZXMgaXQgaW4KKyMgICAnbmxfZmlsdGVyZWRfPG5hbWU+Jy4KKyMKK19OTF9GSUxURVJFRF9DQU5PTklDQUwobmFtZSkKK0FDX0RFRlVOKFtfTkxfRklMVEVSRURfQ0FOT05JQ0FMXSwKK1sKKyAgICBBQ19DQUNIRV9DSEVDSyhbZmlsdGVyZWQgJDEgc3lzdGVtIHR5cGVdLAorICAgICAgICBubF9jdl9maWx0ZXJlZF8kMSwKKyAgICAgICAgbmxfY3ZfZmlsdGVyZWRfJDE9YGVjaG8gJHskMX0gfCBzZWQgLWUgJ3MvW1tbWzpkaWdpdDpdLl1dXSokLy9nJ2AKKyAgICAgICAgbmxfZmlsdGVyZWRfJDE9JHtubF9jdl9maWx0ZXJlZF8kMX0pCitdKQorCisjCisjIE5MX0ZJTFRFUkVEX0NBTk9OSUNBTF9CVUlMRAorIworIyAgIE1hYyBPUyBYIC8gRGFyd2luIGVuZHMgdXAgcHV0dGluZyBzb21lIHZlcnNpb25pbmcgY3J1ZnQgb24gdGhlIGVuZAorIyAgIG9mIGl0cyB0dXBsZXMgdGhhdCBtb3N0IHVzZXJzIG9mIHRoZXNlIHZhcmlhYmxlcyByYXJlbHkgY2FyZSBhYm91dC4KKyMKKyMgICBUaGlzIGZpbHRlcnMgc3VjaCB2ZXJzaW9uaW5nIGNydWZ0IGZyb20gdGhlIHZhcmlhYmxlICdidWlsZCcKKyMgICBnZW5lcmF0ZWQgZnJvbSBBQ19DQU5PTklDQUxfQlVJTEQgYW5kIHNhdmVzIGl0IGluCisjICAgJ25sX2ZpbHRlcmVkX2J1aWxkJy4KKyMKK05MX0ZJTFRFUkVEX0NBTk9OSUNBTF9CVUlMRAorQUNfREVGVU4oW05MX0ZJTFRFUkVEX0NBTk9OSUNBTF9CVUlMRF0sCitbCisgICAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSkKKyAgICBfTkxfRklMVEVSRURfQ0FOT05JQ0FMKGJ1aWxkKQorXSkKKworIworIyBOTF9GSUxURVJFRF9DQU5PTklDQUxfSE9TVAorIworIyAgIE1hYyBPUyBYIC8gRGFyd2luIGVuZHMgdXAgcHV0dGluZyBzb21lIHZlcnNpb25pbmcgY3J1ZnQgb24gdGhlIGVuZAorIyAgIG9mIGl0cyB0dXBsZXMgdGhhdCBtb3N0IHVzZXJzIG9mIHRoZXNlIHZhcmlhYmxlcyByYXJlbHkgY2FyZSBhYm91dC4KKyMKKyMgICBUaGlzIGZpbHRlcnMgc3VjaCB2ZXJzaW9uaW5nIGNydWZ0IGZyb20gdGhlIHZhcmlhYmxlICdob3N0JworIyAgIGdlbmVyYXRlZCBmcm9tIEFDX0NBTk9OSUNBTF9IT1NUIGFuZCBzYXZlcyBpdCBpbgorIyAgICdubF9maWx0ZXJlZF9idWlsZCcuCisjCitOTF9GSUxURVJFRF9DQU5PTklDQUxfSE9TVAorQUNfREVGVU4oW05MX0ZJTFRFUkVEX0NBTk9OSUNBTF9IT1NUXSwKK1sKKyAgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgICAgX05MX0ZJTFRFUkVEX0NBTk9OSUNBTChob3N0KQorXSkKKworIworIyBOTF9GSUxURVJFRF9DQU5PTklDQUxfVEFSR0VUCisjCisjICAgTWFjIE9TIFggLyBEYXJ3aW4gZW5kcyB1cCBwdXR0aW5nIHNvbWUgdmVyc2lvbmluZyBjcnVmdCBvbiB0aGUgZW5kCisjICAgb2YgaXRzIHR1cGxlcyB0aGF0IG1vc3QgdXNlcnMgb2YgdGhlc2UgdmFyaWFibGVzIHJhcmVseSBjYXJlIGFib3V0LgorIworIyAgIFRoaXMgZmlsdGVycyBzdWNoIHZlcnNpb25pbmcgY3J1ZnQgZnJvbSB0aGUgdmFyaWFibGUgJ3RhcmdldCcKKyMgICBnZW5lcmF0ZWQgZnJvbSBBQ19DQU5PTklDQUxfVEFSR0VUIGFuZCBzYXZlcyBpdCBpbgorIyAgICdubF9maWx0ZXJlZF90YXJnZXQnLgorIworTkxfRklMVEVSRURfQ0FOT05JQ0FMX1RBUkdFVAorQUNfREVGVU4oW05MX0ZJTFRFUkVEX0NBTk9OSUNBTF9UQVJHRVRdLAorWworICAgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9UQVJHRVRdKQorICAgIF9OTF9GSUxURVJFRF9DQU5PTklDQUwodGFyZ2V0KQorXSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfcHJvZ19sbmRpci5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfcHJvZ19sbmRpci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTU4ODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF9wcm9nX2xuZGlyLm00CkBAIC0wLDAgKzEsNzYgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSBHTlUgYXV0b2NvbmYgTTQtc3R5bGUgbWFjcm8gZm9yIGNoZWNraW5nCisjICAgICAgZm9yIGEgYnVpbGQgaG9zdC1iYXNlZCB0b29sIHRoYXQgY2FuIHNoYWRvdyBhIGRpcmVjdG9yeSB1c2luZworIyAgICAgIHN5bWJvbGljIGxpbmtzLCBvc3RlbnNpYmx5IGVpdGhlciBHTlUgY3Agb3IgWDExIGxuZGlyLgorIworCitBQ19ERUZVTihbX05MX0NIRUNLX0NQX1JTXSwKK1sKKyAgICAkMSAtUnMgMj4mMSB8IGdyZXAgJ21pc3NpbmcgZmlsZSBvcGVyYW5kJyA+IC9kZXYvbnVsbAorXSkKKworQUNfREVGVU4oW19OTF9DSEVDS19MTkRJUl0sCitbCisgICAgJDEgLXNpbGVudCAyPiYxIHwgZ3JlcCAndXNhZ2U6IGxuZGlyJyA+IC9kZXYvbnVsbAorXSkKKworIworIyBOTF9QUk9HX0xORElSKFtmYWxsYmFjayBHTlUgY3AgcGF0aCB0byB0ZXN0LCBmYWxsYmFjayBHTlUgY3AgcGF0aCB0byBzZXRdKQorIworIyAgIHRlc3QgcGF0aCAgICAtIFRoZSBmYWxsYmFjayBHTlUgY3AgcGF0aCBhbmQgYXJndW1lbnRzIHRvIHRlc3QgaWYgYSBzeXN0ZW0KKyMgICAgICAgICAgICAgICAgICBHTlUgY3AgY2Fubm90IGJlIGZvdW5kLgorIyAgIHNldCBwYXRoICAgICAtIFRoZSBmYWxsYmFjayBHTlUgY3AgcGF0aCBhbmQgYXJndW1lbnRzIHRvIHNldCB0byBMTkRJUiBpZgorIyAgICAgICAgICAgICAgICAgIHRoZSB0ZXN0IHBhdGggc3VjY2VlZHMuCisjCisjIERldGVybWluZSBhbmQgYXNzaWduIHRvIExORElSLCBhIGJ1aWxkIGhvc3QtYmFzZWQgdG9vbCB0aGF0IGNhbiBzaGFkb3cKKyMgYSBkaXJlY3RvcnkgdXNpbmcgc3ltYm9saWMgbGlua3MsIGF0dGVtcHRpbmcgZWl0aGVyIEdOVSBjcCBvciBYMTEgbG5kaXIKKyMgYXMgcHJlZmVycmVkIGRlZmF1bHRzLgorIworIyBJZiB0aGUgaG9zdCBkb2Vzbid0IGhhdmUgR05VIGNwIG5hdGl2ZWx5LCB0aGUgY2FsbGVyIGNhbiBzcGVjaWZ5CisjIGJvdGggYSBHTlUgY3AgcGF0aCB0byB0ZXN0IGFuZCBhIEdOVSBjcCBwYXRoIHRvIHNldCBpZiB0aGUgdGVzdCBwYXRoCisjIHdhcyBzdWNjZXNzZnVsLgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfUFJPR19MTkRJUl0sCitbCisgICAgQUNfQVJHX1ZBUihMTkRJUiwgW1Byb2dyYW0gYW5kIGFyZ3VtZW50cyB0byBjcmVhdGUgYSBzaGFkb3cgZGlyZWN0b3J5IG9mIHN5bWJvbGljIGxpbmtzIHRvIGFub3RoZXIgZGlyZWN0b3J5IHRyZWUgKGUuZy4gJ2NwIC1ScycpXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHNoYWRvdyBhIGRpcmVjdG9yeSB0cmVlXSkKKworICAgIGlmIHRlc3QgIngke0xORElSfSIgPSAieCI7IHRoZW4KKwlpZiBgX05MX0NIRUNLX0NQX1JTKGNwKWA7IHRoZW4KKwkgICAgTE5ESVI9ImNwIC1ScyIKKworCWVsaWYgYF9OTF9DSEVDS19MTkRJUihsbmRpcilgOyB0aGVuCisJICAgIExORElSPSJsbmRpciAtc2lsZW50IgorCisJZWxpZiBgX05MX0NIRUNLX0NQX1JTKCQxKWA7IHRoZW4KKwkgICAgTE5ESVI9IiQyIC1ScyIKKworCWVsc2UKKwkgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZGV0ZXJtaW5lIGhvdyB0byBzaGFkb3cgYSBkaXJlY3RvcnkgdHJlZS4gTmVpdGhlciAnY3AgLVJzJyBub3IgJ2xuZGlyIC1zaWxlbnQnIGFwcGVhciB0byBiZSBhdmFpbGFibGUgb3IgZnVuY3Rpb25hbC4gUGxlYXNlIGNvbnNpZGVyIGluc3RhbGxpbmcgb3IgbWFraW5nIGF2YWlsYWJsZSBpbiB5b3VyIFBBVEggb25lIG9mOiBHTlUgY29yZXV0aWxzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4sIFhRdWFydHogKE1hYyBPUyBYLW9ubHkpIDxodHRwOi8veHF1YXJ0ei5tYWNvc2ZvcmdlLm9yZy8+LCBvciBsbmRpciA8aHR0cDovL3d3dy5taXQuZWR1L2Fmcy9zaXBiL3Byb2plY3Qvc2lwYnNyYy9ydC9sbmRpci8+Ll0pCisKKwlmaQorICAgIGZpCisKKyAgICBBQ19NU0dfUkVTVUxUKCR7TE5ESVJ9KQorCisgICAgQUNfU1VCU1QoTE5ESVIpCitdKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF93ZXJyb3IubTQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX3dlcnJvci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg3MmQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9ubF93ZXJyb3IubTQKQEAgLTAsMCArMSwxMDQgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgR05VIGF1dG9jb25mIE00LXN0eWxlIG1hY3JvcyB0aGF0IGVuc3VyZSB0aGUKKyMgICAgICAtV2Vycm9yIGNvbXBpbGVyIG9wdGlvbiBmb3IgR0NDLWJhc2VkIG9yIC1jb21wYXRpYmxlIGNvbXBpbGVycworIyAgICAgIGRvIG5vdCBicmVhayBzb21lIGF1dG9jb25mIHRlc3RzIChzZWUKKyMgICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b2NvbmYtcGF0Y2hlcy8yMDA4LTA5L21zZzAwMDE0Lmh0bWwpLgorIworIyAgICAgIElmIC1XZXJyb3IgaGFzIGJlZW4gcGFzc2VkIHRyYW5zZm9ybSBpdCBpbnRvIC1Xbm8tZXJyb3IgZm9yCisjICAgICAgQ1BQRkxBR1MsIENGTEFHUywgQ1hYRkxBR1MsIE9CSkNGTEFHUywgYW5kIE9CSkNYWEZMQUdTIHdpdGgKKyMgICAgICBOTF9TQVZFX1dFUlJPUi4gVHJhbnNmb3JtIHRoZW0gYmFjayBhZ2FpbiB3aXRoCisjICAgICAgTkxfUkVTVE9SRV9XRVJST1IuCisjCisKKyMgCisjIF9OTF9TQVZFX1dFUlJPUl9GT1JfVkFSKHZhcmlhYmxlKQorIworIyAgIHZhcmlhYmxlIC0gVGhlIGNvbXBpbGVyIGZsYWdzIHZhcmlhYmxlIHRvIHNjYW4gZm9yIHRoZSBwcmVzZW5jZSBvZgorIyAgICAgICAgICAgICAgLVdlcnJvciBhbmQsIGlmIHByZXNlbnQsIHRyYW5zZm9ybSB0byAtV25vLWVycm9yLgorIworIyBUaGlzIHRyYW5zZm9ybXMsIGZvciB0aGUgc3BlY2lmaWVkIGNvbXBpbGVyIGZsYWdzIHZhcmlhYmxlLCAtV2Vycm9yCisjIHRvIC1Xbm8tZXJyb3IsIGlmIGl0IHdhcyBpdCBwcmVzZW50LiBUaGUgb3JpZ2luYWwgc3RhdGUgbWF5IGJlCisjIHJlc3RvcmVkIGJ5IGludm9raW5nIF9OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSKFt2YXJpYWJsZV0pLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19OTF9TQVZFX1dFUlJPUl9GT1JfVkFSXSwKK1sKKyAgICBpZiBlY2hvICIkeyQxfSIgfCBncmVwIC1xICdcLVdlcnJvcic7IHRoZW4KKwkkMT0iYGVjaG8gJHskMX0gfCBzZWQgLWUgJ3MsLVdlcnJvclwoW1tbOnNwYWNlOl1dXVwpLC1Xbm8tZXJyb3JcMSxnJ2AiCisJbmxfaGFkXyQxX3dlcnJvcj15ZXMKKyAgICBlbHNlCisJbmxfaGFkXyQxX3dlcnJvcj1ubworICAgIGZpCitdKQorCisjCisjIF9OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSKHZhcmlhYmxlKQorIworIyAgIHZhcmlhYmxlIC0gVGhlIGNvbXBpbGVyIGZsYWcgZm9yIHdoaWNoIHRvIHJlc3RvcmUgLVduby1lcnJvciBiYWNrCisjICAgICAgICAgICAgICB0byAtV2Vycm9yIGlmIGl0IHdhcyBvcmlnaW5hbGx5IHBhc3NlZCBpbiBieSB0aGUgdXNlciBhcworIyAgICAgICAgICAgICAgc3VjaC4KKyMKKyMgVGhpcyByZXN0b3JlcywgZm9yIHRoZSBzcGVjaWZpZWQgY29tcGlsZXIgZmxhZ3MgdmFyaWFibGUsIC1XZXJyb3IKKyMgZnJvbSAtV25vLWVycm9yLCBpZiBpdCB3YXMgaW5pdGlhbGx5IHNldCBhcyAtV2Vycm9yIGF0IHRoZSB0aW1lCisjIF9OTF9TQVZFX1dFUlJPUl9GT1JfVkFSKFt2YXJpYWJsZV0pIHdhcyBpbnZva2VkLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSXSwKK1sKKyAgICBpZiB0ZXN0ICIke25sX2hhZF8kMV93ZXJyb3J9IiA9ICJ5ZXMiOyB0aGVuCisJJDE9ImBlY2hvICR7JDF9IHwgc2VkIC1lICdzLC1Xbm8tZXJyb3JcKFtbWzpzcGFjZTpdXV1cKSwtV2Vycm9yXDEsZydgIgorICAgIGZpCisKKyAgICB1bnNldCBubF9oYWRfJDFfd2Vycm9yCitdKQorCisjIAorIyBOTF9TQVZFX1dFUlJPUgorIworIyBUaGlzIHRyYW5zZm9ybXMsIGZvciBlYWNoIG9mIENGTEFHUywgQ1hYRkxBR1MsIE9CSkNGTEFHUywgYW5kCisjIE9CSkNYWEZMQUdTLCAtV2Vycm9yIHRvIC1Xbm8tZXJyb3IsIGlmIGl0IHdhcyBpdCBwcmVzZW50LiBUaGUKKyMgb3JpZ2luYWwgc3RhdGUgbWF5IGJlIHJlc3RvcmVkIGJ5IGludm9raW5nIE5MX1JFU1RPUkVfV0VSUk9SLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1NBVkVfV0VSUk9SXSwKK1sKKyAgICBfTkxfU0FWRV9XRVJST1JfRk9SX1ZBUihbQ1BQRkxBR1NdKQorICAgIF9OTF9TQVZFX1dFUlJPUl9GT1JfVkFSKFtDRkxBR1NdKQorICAgIF9OTF9TQVZFX1dFUlJPUl9GT1JfVkFSKFtDWFhGTEFHU10pCisgICAgX05MX1NBVkVfV0VSUk9SX0ZPUl9WQVIoW09CSkNGTEFHU10pCisgICAgX05MX1NBVkVfV0VSUk9SX0ZPUl9WQVIoW09CSkNYWEZMQUdTXSkKK10pCisKKyMKKyMgTkxfUkVTVE9SRV9XRVJST1IKKyMKKyMgVGhpcyByZXN0b3JlcywgZm9yIGVhY2ggb2YgT0JKQ1hYRkxBR1MsIE9CSkNGTEFHUywgQ1hYRkxBR1MsIGFuZAorIyBDRkxBR1MsIC1XZXJyb3IgZnJvbSAtV25vLWVycm9yLCBpZiBpdCB3YXMgaW5pdGlhbGx5IHNldCBhcyAtV2Vycm9yCisjIGF0IHRoZSB0aW1lIE5MX1NBVkVfV0VSUk9SIHdhcyBpbnZva2VkLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1JFU1RPUkVfV0VSUk9SXSwKK1sKKyAgICBfTkxfUkVTVE9SRV9XRVJST1JfRk9SX1ZBUihbT0JKQ1hYRkxBR1NdKQorICAgIF9OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSKFtPQkpDRkxBR1NdKQorICAgIF9OTF9SRVNUT1JFX1dFUlJPUl9GT1JfVkFSKFtDWFhGTEFHU10pCisgICAgX05MX1JFU1RPUkVfV0VSUk9SX0ZPUl9WQVIoW0NGTEFHU10pCisgICAgX05MX1JFU1RPUkVfV0VSUk9SX0ZPUl9WQVIoW0NQUEZMQUdTXSkKK10pCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX3dpdGhfcGFja2FnZS5tNCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvbmxfd2l0aF9wYWNrYWdlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNWVhZWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL200L25sX3dpdGhfcGFja2FnZS5tNApAQCAtMCwwICsxLDc1NSBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhIEdOVSBhdXRvY29uZiBNNC1zdHlsZSBtYWNybyBmb3IgY2hlY2tpbmcKKyMgICAgICB0aGUgcHJlc2VuY2UgYW5kIHZpYWJpbGl0eSBvZiBib3RoIHJlcXVpcmVkIGFuZCBvcHRpb25hbAorIyAgICAgIGRlcGVuZGVudCBwYWNrYWdlcywgd2hpY2ggbWF5IGJlIGludGVybmFsIG9yIGV4dGVybmFsIHRvIHRoZQorIyAgICAgIGN1cnJlbnQgcGFja2FnZS4KKyMKKyMgICAgICBGaXZlICg1KSBtYWNyb3MgYXJlIG1hZGUgYXZhaWxhYmxlOgorIworIyAgICAgICAgKiBOTF9XSVRIX1JFUVVJUkVEX0VYVEVSTkFMX1BBQ0tBR0UKKyMgICAgICAgICogTkxfV0lUSF9PUFRJT05BTF9FWFRFUk5BTF9QQUNLQUdFCisjICAgICAgICAqIE5MX1dJVEhfUkVRVUlSRURfSU5URVJOQUxfUEFDS0FHRQorIyAgICAgICAgKiBOTF9XSVRIX09QVElPTkFMX0lOVEVSTkFMX1BBQ0tBR0UKKyMgICAgICAgICogTkxfV0lUSF9QQUNLQUdFCisjCisjICAgICAgTm90ZSwgaG93ZXZlciwgdGhhdCBOTF9XSVRIX1BBQ0tBR0UgaXMgZGVwcmVjYXRlZCBhbmQgbWFwcyB0bworIyAgICAgIE5MX1dJVEhfUkVRVUlSRURfSU5URVJOQUxfUEFDS0FHRS4KKyMKKworIyBfTkxfQVJHX1dJVEhfSU5DTFVERVNfT1JfTElCUyhQQUNLQUdFLURJU1BPU0lUSU9OLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNPVVJDRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1QUkVUVFktTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1XSVRILU9QVElPTiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExVUkFMLVdJVEgtT1BUSU9OLUhFTFAtV09SRCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lUSC1ESVItVkFSSUFCTEUtTU9ESUZJRVIpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIEFDX0FSR19XSVRIIHRoYXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8KKyMgb3B0aW9uYWxseSBzcGVjaWZ5IGEgZGVwZW5kZW50IHBhY2thZ2UgaW5jbHVkZSBhbmQgbGluayBsaWJyYXJ5CisjIGRpcmVjdG9yaWVzIGluZGVwZW5kZW50bHkgYXMKKyMgLS13aXRoLTxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+LTxQQUNLQUdFLVdJVEgtT1BUSU9OPj08RElSPi4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkIGFzIHJlcXVpcmVkLCB0aGUgdXNlIG9mCisjIC0td2l0aG91dC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPiBvciB0aGUgdXNlIG9mCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPj1ubyB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBBdCB0aGUgc3VjY2Vzc2Z1bCBjb25jbHVzaW9uIG9mIHRoZSBleGVjdXRpb24gb2YgdGhlIG1hY3JvLCAKKyMgdHdvIHZhcmlhYmxlcyB3aWxsIGJlIGRlZmluZWQ6CisjCisjICAgKiBubF93aXRoXzxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+CisjICAgKiA8UEFDS0FHRS1TVUNDSU5ULU5BTUU+XzxXSVRILURJUi1WQVJJQUJMRS1NT0RJRklFUj5fZGlyCisjCisjIFRoZSBwYWNrYWdlIGRpc3Bvc2l0aW9uIGFuZCBzb3VyY2UgYXJlIHNwZWNpZmllZCBieToKKyMKKyMgICBQQUNLQUdFLURJU1BPU0lUSU9OICAgICA6IFRoaXMgbWF5IGJlIGVpdGhlciAncmVxdWlyZWQnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgcmVxdWlyZWQgb3IgJ29wdGlvbmFsJyBpZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90LgorIyAgIFBBQ0tBR0UtU09VUkNFICAgICAgICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdpbnRlcm5hbCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYXkgYmUgcHJvdmlkZWQgZWl0aGVyCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGx5IG9yIGV4dGVybmFsbHkgdG8gdGhlIGN1cnJlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb3IgJ2V4dGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBvbmx5IGJlIHByb3ZpZGVkIG91dHNpZGUgb2YKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgYWxzbyBzZXJ2ZXMgYXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB3aGVyZSB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGV4cGVjdHMgdG8gZmluZCB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuCisjCisjIFRoZSBkZXBlbmRlbnQgcGFja2FnZSBpcyBzcGVjaWZpZWQgaW4gdGhyZWUgZm9ybXM6CisjCisjICAgUEFDS0FHRS1QUkVUVFktTkFNRSAgICAgOiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBieSB3aGljaCB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWZlcnJlZCBmb3IgYW55IGRpYWdub3N0aWMgb3V0cHV0LiBGb3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsICJNeSBHcmVhdCBTb2Z0d2FyZSBQYWNrYWdlIi4KKyMgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIHByZWZpeCBhcHBsaWVkIHRvIHZhcmlhYmxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBhIHJlc3VsdCBvZiBydW5uaW5nIHRoaXMgbWFjcm8gZm9yIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuIEZvciBleGFtcGxlLCAiTUdTUCIgaGVyZSBpcyB0cmFuc2Zvcm1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBNR1NQX0NQUEZMQUdTLgorIyAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSAgIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgbmFtZSB1c2VkIGZvciBwa2ctY29uZmlnLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcyBhbmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWdzcCIgaGVyZSBpcyB1c2VkIGZvciAtLXdpdGgtbWdzcD1ESVIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdwa2ctY29uZmlnIC0tY2ZsYWdzIG1nc3AnLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX05MX0FSR19XSVRIX0lOQ0xVREVTX09SX0xJQlNdLAorWworICAgIGRubCBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgcGFja2FnZSBpcyByZXF1aXJlZAorCisgICAgbTRfY2FzZShbJDFdLAorICAgICAgICBbcmVxdWlyZWRdLFtdLAorICAgICAgICBbb3B0aW9uYWxdLFtdLAorICAgICAgICBbbTRfZmF0YWwoWyQwOiBpbnZhbGlkIGRpc3Bvc2l0aW9uIHZhbHVlICckMSc7IG11c3QgYmUgJ3JlcXVpcmVkJyBvciAnb3B0aW9uYWwnXSldKQorCisgICAgZG5sIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBwYWNrYWdlIGlzIGludGVybmFsCisKKyAgICBtNF9jYXNlKFskMl0sCisgICAgICAgIFtpbnRlcm5hbF0sW10sCisgICAgICAgIFtleHRlcm5hbF0sW10sCisgICAgICAgIFttNF9mYXRhbChbJDA6IGludmFsaWQgc291cmNlIHZhbHVlICckMic7IG11c3QgYmUgJ2ludGVybmFsJyBvciAnZXh0ZXJuYWwnXSldKQorCisgICAgQUNfQVJHX1dJVEgoJDUtJDYsCisJQVNfSEVMUF9TVFJJTkcoWy0td2l0aC0kNS0kNj1ESVJdLAorCQkgICBbU3BlY2lmeSBsb2NhdGlvbiBvZiAkMSAkMyAkNyBAPDpAZGVmYXVsdD0kMkA6PkAuXSksCisJWworCSAgICBpZiB0ZXN0ICIke3dpdGh2YWx9IiA9ICJubyI7IHRoZW4KKyAgICAgICAgICAgICAgICBtNF9pZihbJDFdLAorICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF0sCisgICAgICAgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbJHtQQUNLQUdFX05BTUV9IHJlcXVpcmVzIHRoZSAkMyBwYWNrYWdlLl0pXSwKKyAgICAgICAgICAgICAgICAgICAgICBbbmxfd2l0aF8kNT0ke3dpdGh2YWx9XSkKKwkgICAgZmkKKwkKKwkgICAgaWYgdGVzdCAieCR7JDVfZGlyfSIgIT0gIngiOyB0aGVuCisJCUFDX01TR19XQVJOKFtvdmVycmlkaW5nIC0td2l0aC0kNT0keyQ1X2Rpcn1dKQorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiR7d2l0aHZhbH0iID0gImludGVybmFsIjsgdGhlbgorCQkkNV8kOF9kaXI9JHt3aXRodmFsfQorCQlubF93aXRoXyQ1PSR7d2l0aHZhbH0KKwkgICAgZWxzZQorCQkkNV8kOF9kaXI9JHt3aXRodmFsfQorCQlubF93aXRoXyQ1PWV4dGVybmFsCisJICAgIGZpCisJXSwKKwlbCisJICAgICQ1XyQ4X2Rpcj07CisJICAgIGlmIHRlc3QgIngke25sX3dpdGhfJDV9IiA9ICJ4IjsgdGhlbgorCQlubF93aXRoXyQ1PSQyCisJICAgIGZpCisJXSkKK10pCisKKyMgX05MX0FSR19XSVRIX0lOQ0xVREVTKFBBQ0tBR0UtRElTUE9TSVRJT04sCisjICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNPVVJDRSwKKyMgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCwKKyMgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgQUNfQVJHX1dJVEggdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0bworIyBvcHRpb25hbGx5IHNwZWNpZnkgYSBkZXBlbmRlbnQgcGFja2FnZSBpbmNsdWRlIGRpcmVjdG9yeQorIyBpbmRlcGVuZGVudGx5IGFzIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1pbmNsdWRlcz08RElSPi4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkIGFzIHJlcXVpcmVkLCB0aGUgdXNlIG9mCisjIC0td2l0aG91dC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1pbmNsdWRlcyBvciB0aGUgdXNlIG9mCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1pbmNsdWRlcz1ubyB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBBdCB0aGUgc3VjY2Vzc2Z1bCBjb25jbHVzaW9uIG9mIHRoZSBleGVjdXRpb24gb2YgdGhlIG1hY3JvLCAKKyMgdHdvIHZhcmlhYmxlcyB3aWxsIGJlIGRlZmluZWQ6CisjCisjICAgKiBubF93aXRoXzxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+CisjICAgKiA8UEFDS0FHRS1TVUNDSU5ULU5BTUU+X2hlYWRlcl9kaXIKKyMKKyMgVGhlIHBhY2thZ2UgZGlzcG9zaXRpb24gYW5kIHNvdXJjZSBhcmUgc3BlY2lmaWVkIGJ5OgorIworIyAgIFBBQ0tBR0UtRElTUE9TSVRJT04gICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdyZXF1aXJlZCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpcyByZXF1aXJlZCBvciAnb3B0aW9uYWwnIGlmCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QuCisjICAgUEFDS0FHRS1TT1VSQ0UgICAgICAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ2ludGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBlaXRoZXIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSB0byB0aGUgY3VycmVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvciAnZXh0ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IG9ubHkgYmUgcHJvdmlkZWQgb3V0c2lkZSBvZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFja2FnZS4gVGhpcyBhbHNvIHNlcnZlcyBhcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHdoZXJlIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZXhwZWN0cyB0byBmaW5kIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTkxfQVJHX1dJVEhfSU5DTFVERVNdLAorWworICAgIF9OTF9BUkdfV0lUSF9JTkNMVURFU19PUl9MSUJTKFskMV0sIFskMl0sIFskM10sIFskNF0sIFskNV0sIFtpbmNsdWRlc10sIFtoZWFkZXJzXSwgW2hlYWRlcl0pZG5sCitdKQorCisjIF9OTF9BUkdfV0lUSF9MSUJTKFBBQ0tBR0UtRElTUE9TSVRJT04sCisjICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU09VUkNFLAorIyAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCwKKyMgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBBQ19BUkdfV0lUSCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvCisjIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGRlcGVuZGVudCBwYWNrYWdlIGxpbmsgbGlicmFyeSBkaXJlY3RvcnkKKyMgaW5kZXBlbmRlbnRseSBhcyAtLXdpdGgtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4tbGlicz08RElSPi4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkIGFzIHJlcXVpcmVkLCB0aGUgdXNlIG9mCisjIC0td2l0aG91dC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1saWJzIG9yIHRoZSB1c2Ugb2YKKyMgLS13aXRoLTxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+LWxpYnM9bm8gd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvci4KKyMKKyMgQXQgdGhlIHN1Y2Nlc3NmdWwgY29uY2x1c2lvbiBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBtYWNybywgCisjIHR3byB2YXJpYWJsZXMgd2lsbCBiZSBkZWZpbmVkOgorIworIyAgICogbmxfd2l0aF88UEFDS0FHRS1TVUNDSU5DVC1OQU1FPgorIyAgICogPFBBQ0tBR0UtU1VDQ0lOVC1OQU1FPl9saWJyYXJ5X2RpcgorIworIyBUaGUgcGFja2FnZSBkaXNwb3NpdGlvbiBhbmQgc291cmNlIGFyZSBzcGVjaWZpZWQgYnk6CisjCisjICAgUEFDS0FHRS1ESVNQT1NJVElPTiAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ3JlcXVpcmVkJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIHJlcXVpcmVkIG9yICdvcHRpb25hbCcgaWYKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdC4KKyMgICBQQUNLQUdFLVNPVVJDRSAgICAgICAgICA6IFRoaXMgbWF5IGJlIGVpdGhlciAnaW50ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IGJlIHByb3ZpZGVkIGVpdGhlcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBvciBleHRlcm5hbGx5IHRvIHRoZSBjdXJyZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9yICdleHRlcm5hbCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYXkgb25seSBiZSBwcm92aWRlZCBvdXRzaWRlIG9mCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIGFsc28gc2VydmVzIGFzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlcmUgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdCBleHBlY3RzIHRvIGZpbmQgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19OTF9BUkdfV0lUSF9MSUJTXSwKK1sKKyAgICBfTkxfQVJHX1dJVEhfSU5DTFVERVNfT1JfTElCUyhbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdLCBbbGlic10sIFtsaWJyYXJpZXNdLCBbbGlicmFyeV0pZG5sCitdKQorCisjIF9OTF9BUkdfV0lUSF9QQUNLQUdFKFBBQ0tBR0UtRElTUE9TSVRJT04sCisjICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU09VUkNFLAorIyAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCwKKyMgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBBQ19BUkdfV0lUSCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvCisjIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGRlcGVuZGVudCBwYWNrYWdlIGFzCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPj08RElSPiBvciB0byBpbmRlcGVuZGVudGx5IHNwZWNpZnkgdGhlCisjIGluY2x1ZGUgYW5kIGxpbmsgbGlicmFyeSBkaXJlY3RvcmllcyBpbmRlcGVuZGVudGx5IGFzCisjIC0td2l0aC08UEFDS0FHRS1TVUNDSU5DVC1OQU1FPi1pbmNsdWRlcz08RElSPiBhbmQKKyMgLS13aXRoLTxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+LWxpYnM9PERJUj4uCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCBhcyByZXF1aXJlZCwgdGhlIHVzZSBvZgorIyAtLXdpdGhvdXQtPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4qIG9yIHRoZSB1c2Ugb2YKKyMgLS13aXRoLTxQQUNLQUdFLVNVQ0NJTkNULU5BTUU+Kj1ubyB3aWxsIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBBdCB0aGUgc3VjY2Vzc2Z1bCBjb25jbHVzaW9uIG9mIHRoZSBleGVjdXRpb24gb2YgdGhlIG1hY3JvLCAKKyMgdHdvIG9yIG1vcmUgdmFyaWFibGVzIHdpbGwgYmUgZGVmaW5lZDoKKyMKKyMgICAqIG5sX3dpdGhfPFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRT4KKyMgICAqIDxQQUNLQUdFLVNVQ0NJTlQtTkFNRT5fZGlyCisjICAgKiA8UEFDS0FHRS1TVUNDSU5ULU5BTUU+X2hlYWRlcl9kaXIKKyMgICAqIDxQQUNLQUdFLVNVQ0NJTlQtTkFNRT5fbGlicmFyeV9kaXIKKyMKKyMgVGhlIHBhY2thZ2UgZGlzcG9zaXRpb24gYW5kIHNvdXJjZSBhcmUgc3BlY2lmaWVkIGJ5OgorIworIyAgIFBBQ0tBR0UtRElTUE9TSVRJT04gICAgIDogVGhpcyBtYXkgYmUgZWl0aGVyICdyZXF1aXJlZCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpcyByZXF1aXJlZCBvciAnb3B0aW9uYWwnIGlmCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QuCisjICAgUEFDS0FHRS1TT1VSQ0UgICAgICAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ2ludGVybmFsJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBlaXRoZXIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSB0byB0aGUgY3VycmVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvciAnZXh0ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IG9ubHkgYmUgcHJvdmlkZWQgb3V0c2lkZSBvZgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFja2FnZS4gVGhpcyBhbHNvIHNlcnZlcyBhcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHdoZXJlIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZXhwZWN0cyB0byBmaW5kIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTkxfQVJHX1dJVEhfUEFDS0FHRV0sCitbCisgICAgQUNfQVJHX1dJVEgoJDUsCisJQVNfSEVMUF9TVFJJTkcoWy0td2l0aC0kNT1ESVJdLAorCQkgICBbU3BlY2lmeSBsb2NhdGlvbiBvZiB0aGUgJDEgJDMgaGVhZGVycyBhbmQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PSQyQDo+QC5dKSwKKwlbCisJICAgIGlmIHRlc3QgIiR7d2l0aHZhbH0iID0gIm5vIjsgdGhlbgorICAgICAgICAgICAgICAgIG00X2lmKFskMV0sCisgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXSwKKyAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFske1BBQ0tBR0VfTkFNRX0gcmVxdWlyZXMgdGhlICQzIHBhY2thZ2UuXSldLAorICAgICAgICAgICAgICAgICAgICAgIFtubF93aXRoXyQ1PSR7d2l0aHZhbH1dKQorCSAgICBlbGlmIHRlc3QgIiR7d2l0aHZhbH0iID0gImludGVybmFsIjsgdGhlbgorCQkkNV9kaXI9JHt3aXRodmFsfQorCQlubF93aXRoXyQ1PSR7d2l0aHZhbH0KKwkgICAgZWxzZQorCQkkNV9kaXI9JHt3aXRodmFsfQorCQlubF93aXRoXyQ1PWV4dGVybmFsCisJICAgIGZpCisJXSwKKwlbJDVfZGlyPTsgbmxfd2l0aF8kNT0kMl0pCisKKyAgICAjIEFsbG93IHVzZXJzIHRvIHNwZWNpZnkgZXh0ZXJuYWwgaGVhZGVycyBhbmQgbGlicmFyaWVzIGluZGVwZW5kZW50bHkuCisKKyAgICBfTkxfQVJHX1dJVEhfSU5DTFVERVMoWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgWyQ1XSlkbmwKKworICAgIF9OTF9BUkdfV0lUSF9MSUJTKFskMV0sIFskMl0sIFskM10sIFskNF0sIFskNV0pZG5sCitdKQorCisjIF9OTF9XSVRIX1BBQ0tBR0UoUEFDS0FHRS1ESVNQT1NJVElPTiwKKyMgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNPVVJDRSwKKyMgICAgICAgICAgICAgICAgICBQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYLAorIyAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSwKKyMgICAgICAgICAgICAgICAgICBbREVGQVVMVC1QQUNLQUdFLUxJQlNdLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT05TLVRPLVJVTi1JRi1OT1QtRVhURVJOQUxdLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT05TLVRPLVJVTi1JRi1OT1QtSU5URVJOQUxdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2UsIHdpdGggcGtnLWNvbmZpZyBpZiBpdAorIyBpcyBhdmFpbGFibGUsIG9mIHRoZSBzcGVjaWZpZWQsIG9wdGlvbmFsIG9yIHJlcXVpcmVkIGRlcGVuZGVudAorIyBwYWNrYWdlLiBUaGUgZGVwZW5kZW50IHBhY2thZ2UgbWF5IGJlIHByb3ZpZGVkIGV4dGVybmFsbHkgb3IgbWF5CisjIGV4aXN0IHdpdGhpbiB0aGUgY3VycmVudCBwYWNrYWdlIGl0c2VsZi4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkIGFzIHJlcXVpcmVkLCBmYWlsdXJlIHRvIGZpbmQgdGhlCisjIGRlcGVuZGVudCBwYWNrYWdlIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IuCisjCisjIEF0IHRoZSBzdWNjZXNzZnVsIGNvbmNsdXNpb24gb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbWFjcm8sIHRocmVlCisjIHZhcmlhYmxlcyB3aWxsIGJlIGRlZmluZWQ6CisjCisjICAgKiA8UEFDS0FHRS1WQVJJQUJMRS1QUkVGSVg+X0NQUEZMQUdTCisjICAgKiA8UEFDS0FHRS1WQVJJQUJMRS1QUkVGSVg+X0xERkxBR1MKKyMgICAqIDxQQUNLQUdFLVZBUklBQkxFLVBSRUZJWD5fTElCUworIworIyBJbiBhZGRpdGlvbiwgdGhlIHZhcmlhYmxlOgorIworIyAgICogbmxfd2l0aF88UEFDS0FHRS1TVUNDSU5DVC1OQU1FPgorIworIyB3aWxsIHVuY29uZGl0aW9uYWxseSBiZSBzZXQgdG8gdGhlIHNvdXJjZSBvZiB0aGUgcGFja2FnZSBpZiBpdCBpcyB0bworIyBiZSB1c2VkIGFuZCBpcyBmb3VuZDsgb3RoZXJ3aXNlLCAnbm8nIGlmIGl0IGlzIG5vdCB0byBiZSB1c2VkLgorIworIyBUaGUgcGFja2FnZSBkaXNwb3NpdGlvbiBhbmQgc291cmNlIGFyZSBzcGVjaWZpZWQgYnk6CisjCisjICAgUEFDS0FHRS1ESVNQT1NJVElPTiAgICAgOiBUaGlzIG1heSBiZSBlaXRoZXIgJ3JlcXVpcmVkJyBpZiB0aGUgZGVwZW5kZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIHJlcXVpcmVkIG9yICdvcHRpb25hbCcgaWYKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdC4KKyMgICBQQUNLQUdFLVNPVVJDRSAgICAgICAgICA6IFRoaXMgbWF5IGJlIGVpdGhlciAnaW50ZXJuYWwnIGlmIHRoZSBkZXBlbmRlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWF5IGJlIHByb3ZpZGVkIGVpdGhlcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBvciBleHRlcm5hbGx5IHRvIHRoZSBjdXJyZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9yICdleHRlcm5hbCcgaWYgdGhlIGRlcGVuZGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYXkgb25seSBiZSBwcm92aWRlZCBvdXRzaWRlIG9mCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIGFsc28gc2VydmVzIGFzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlcmUgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdCBleHBlY3RzIHRvIGZpbmQgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMKKyMgSW4gYWRkaXRpb24sIGlmIGFueSBhZGRpdGlvbmFsLCBkZWZhdWx0IGxpbmsgbGlicmFyaWVzIGFyZSByZXF1aXJlZAorIyBmb3IgdXNlIHdpdGggdGhlIHBhY2thZ2UsIHRoZXNlIGFyZSBzcGVjaWZpZWQgYXM6CisjCisjICAgREVGQVVMVC1QQUNLQUdFLUxJQlMgICAgOiBEZWZhdWx0IGxpbmsgbGlicmFyaWVzIHJlcXVpcmVkIGZvciB1c2Ugd2l0aAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UuIFRoZXNlIGFyZSB1c2VkIGlmIHBrZy1jb25maWcgaXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgb3IgY2Fubm90IGlkZW50aWZ5IGFueQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBsaWJyYXJpZXMuIEZvciBleGFtcGxlLCAnLWxtZ3NwJy4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkLCBlaXRoZXIgaW50ZXJuYWxseSBvciBleHRlcm5hbGx5LCBvcHRpb25hbAorIyBhY3Rpb25zIGFyZSBydW4uCisjCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUVYVEVSTkFMIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgZXh0ZXJuYWwuCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgaW50ZXJuYWwuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTkxfV0lUSF9QQUNLQUdFXSwKK1sKKyAgICAjIEluZmx1ZW50aWFsIGV4dGVybmFsIHZhcmlhYmxlcyBmb3IgdGhlIHBhY2thZ2Ugc3VwcG9ydAorCisgICAgQUNfQVJHX1ZBUigkNF9DUFBGTEFHUywgWyQzIEMgcHJlcHJvY2Vzc29yIGZsYWdzXSkKKyAgICBBQ19BUkdfVkFSKCQ0X0xERkxBR1MsICBbJDMgbGlua2VyIGZsYWdzXSkKKyAgICBBQ19BUkdfVkFSKCQ0X0xJQlMsICAgICBbJDMgbGlua2VyIGxpYnJhcmllc10pCisKKyAgICAjIEFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYm90aCBleHRlcm5hbCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMKKyAgICAjIHRvZ2V0aGVyIChvciBpbnRlcm5hbCkuCisKKyAgICBfTkxfQVJHX1dJVEhfUEFDS0FHRShbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdKWRubAorCisgICAgaWYgdGVzdCAiJHtubF93aXRoXyQ1fSIgPT0gIm5vIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgdGhlICQzIHBhY2thZ2VdKQorCUFDX01TR19SRVNVTFQoWyR7bmxfd2l0aF8kNX1dKQorCisgICAgZWxzZQorCUFDX01TR19DSEVDS0lORyhbc291cmNlIG9mIHRoZSAkMyBwYWNrYWdlXSkKKwlBQ19NU0dfUkVTVUxUKFske25sX3dpdGhfJDV9XSkKKworCSMgSWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIG9yIGhhcyBkZWZhdWx0ZWQgaW50byB0aGUgaW50ZXJuYWwgJDMKKwkjIHBhY2thZ2UsIHNldCB0aGUgdmFsdWVzIGFwcHJvcHJpYXRlbHkuIE90aGVyd2lzZSwgcnVuIHRocm91Z2ggdGhlCisJIyB1c3VhbCByb3V0aW5lLgorCisJaWYgdGVzdCAiJHtubF93aXRoXyQ1fSIgPSAiaW50ZXJuYWwiOyB0aGVuCisJICAgICQ3CisKKwllbHNlCisJICAgICMgV2UgYWx3YXlzIHByZWZlciBjaGVja2luZyB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpb3VzICctLXdpdGgtJDUtLi4uJyAKKwkgICAgIyBvcHRpb25zIGZpcnN0IHRvIHVzaW5nIHBrZy1jb25maWcgYmVjYXVzZSB0aGUgZm9ybWVyIG1pZ2h0IGJlIHVzZWQKKwkgICAgIyBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50IG9uIGEgc3lzdGVtIHRoYXQgYWxzbyBjb250YWlucworCSAgICAjIHBrZy1jb25maWcuIEluIHN1Y2ggYSBjYXNlLCB0aGUgdXNlciB3YW50cyB3aGF0IGhlL3NoZSBzcGVjaWZpZWQKKwkgICAgIyByYXRoZXIgdGhhbiB3aGF0IHBrZy1jb25maWcgaW5kaWNhdGVzLgorCisJICAgIGlmIHRlc3QgIngkeyQ1X2Rpcn0iICE9ICJ4IiAtbyAieCR7JDVfaGVhZGVyX2Rpcn0iICE9ICJ4IiAtbyAieCR7JDVfbGlicmFyeV9kaXJ9IiAhPSAieCI7IHRoZW4KKwkJCWlmIHRlc3QgIngkeyQ1X2Rpcn0iICE9ICJ4IjsgdGhlbgorCQkgICAgaWYgdGVzdCAtZCAiJHskNV9kaXJ9IjsgdGhlbgorCQkJaWYgdGVzdCAtZCAiJHskNV9kaXJ9L2luY2x1ZGUiOyB0aGVuCisJCQkgICAgJDRfQ1BQRkxBR1M9Ii1JJHskNV9kaXJ9L2luY2x1ZGUiCisJCQllbHNlCisJCQkgICAgJDRfQ1BQRkxBR1M9Ii1JJHskNV9kaXJ9IgorCQkJZmkKKworCQkJaWYgdGVzdCAtZCAiJHskNV9kaXJ9L2xpYiI7IHRoZW4KKwkJCSAgICAkNF9MREZMQUdTPSItTCR7JDVfZGlyfS9saWIiCisJCQllbHNlCisJCQkgICAgJDRfTERGTEFHUz0iLUwkeyQ1X2Rpcn0iCisJCQlmaQorCQkgICAgZWxzZQorCQkJQUNfTVNHX0VSUk9SKFtObyBzdWNoIGRpcmVjdG9yeSAkeyQ1X2Rpcn1dKQorCQkgICAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICJ4JHskNV9oZWFkZXJfZGlyfSIgIT0gIngiOyB0aGVuCisJCSAgICBpZiB0ZXN0IC1kICIkeyQ1X2hlYWRlcl9kaXJ9IjsgdGhlbgorCQkJJDRfQ1BQRkxBR1M9Ii1JJHskNV9oZWFkZXJfZGlyfSIKKwkJICAgIGVsc2UKKwkJCUFDX01TR19FUlJPUihbTm8gc3VjaCBkaXJlY3RvcnkgJHskNV9oZWFkZXJfZGlyfV0pCisJCSAgICBmaQorCQlmaQorCisJCWlmIHRlc3QgIngkeyQ1X2xpYnJhcnlfZGlyfSIgIT0gIngiOyB0aGVuCisJCSAgICBpZiB0ZXN0IC1kICIkeyQ1X2xpYnJhcnlfZGlyfSI7IHRoZW4KKwkJCSQ0X0xERkxBR1M9Ii1MJHskNV9saWJyYXJ5X2Rpcn0iCisJCSAgICBlbHNlCisJCQlBQ19NU0dfRVJST1IoW05vIHN1Y2ggZGlyZWN0b3J5ICR7JDVfbGlicmFyeV9kaXJ9XSkKKwkJICAgIGZpCisJCWZpCisKKwkJJDRfTElCUz0iJHskNF9MREZMQUdTfSAkNiIKKworCSAgICBlbGlmIHRlc3QgIngke1BLR19DT05GSUd9IiAhPSAieCI7IHRoZW4KKyAgICAgICAgICAgICAgICBpZiAke1BLR19DT05GSUd9IC0tZXhpc3RzICIkNSI7IHRoZW4KKwkJICAgICQ0X0NQUEZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWNmbGFncyAkNWAiCisJCSAgICAkNF9MREZMQUdTPSJgJHtQS0dfQ09ORklHfSAtLWxpYnMtb25seS1MICQ1YCIKKwkJICAgICQ0X0xJQlM9ImAke1BLR19DT05GSUd9IC0tbGlicy1vbmx5LWwgJDVgIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbTRfaWYoWyQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgdGhlICQ1IHBhY2thZ2Ugd2l0aCAke1BLR19DT05GSUd9LiAke1BBQ0tBR0VfTkFNRX0gcmVxdWlyZXMgdGhlICQ1IHBhY2thZ2UuIFRyeSBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIG9yIHVzZSB0aGUgcmVsZXZhbnQgLS13aXRoIG9wdGlvbnMgdG8gY29uZmlndXJlLl0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW25sX3dpdGhfJDU9Im5vIl0pCisgICAgICAgICAgICAgICAgZmkKKworCSAgICBlbHNlCisgICAgICAgICAgICAgICAgbTRfaWYoWyQxXSwKKyAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdLAorICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIHRoZSAkMyBwYWNrYWdlLiAke1BBQ0tBR0VfTkFNRX0gcmVxdWlyZXMgdGhlICQzIHBhY2thZ2UuXSldLAorICAgICAgICAgICAgICAgICAgICAgIFtubF93aXRoXyQ1PSJubyJdKQorCSAgICBmaQorCWZpCisKKwlBQ19TVUJTVCgkNF9DUFBGTEFHUykKKwlBQ19TVUJTVCgkNF9MREZMQUdTKQorCUFDX1NVQlNUKCQ0X0xJQlMpCisKKwlpZiB0ZXN0ICIke25sX3dpdGhfJDV9IiAhPSAiaW50ZXJuYWwiIC1hICIke25sX3dpdGhfJDV9IiAhPSAibm8iOyB0aGVuCisJICAgIG5sX3NhdmVkX0NQUEZMQUdTPSIke0NQUEZMQUdTfSIKKwkgICAgbmxfc2F2ZWRfTERGTEFHUz0iJHtMREZMQUdTfSIKKwkgICAgbmxfc2F2ZWRfTElCUz0iJHtMSUJTfSIKKworCSAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHskNF9DUFBGTEFHU30iCisJICAgIExERkxBR1M9IiR7TERGTEFHU30gJHskNF9MREZMQUdTfSIKKwkgICAgTElCUz0iJHtMSUJTfSAkeyQ0X0xJQlN9IgorCisJCSQ4CisKKwkgICAgQ1BQRkxBR1M9IiR7bmxfc2F2ZWRfQ1BQRkxBR1N9IgorCSAgICBMREZMQUdTPSIke25sX3NhdmVkX0xERkxBR1N9IgorCSAgICBMSUJTPSIke25sX3NhdmVkX0xJQlN9IgorCWZpCisgICAgZmkKK10pCisKKyMgTkxfV0lUSF9SRVFVSVJFRF9FWFRFUk5BTF9QQUNLQUdFKFBBQ0tBR0UtUFJFVFRZLU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtERUZBVUxULVBBQ0tBR0UtTElCU10sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2UsIHdpdGggcGtnLWNvbmZpZyBpZiBpdAorIyBpcyBhdmFpbGFibGUsIG9mIHRoZSBzcGVjaWZpZWQsIHJlcXVpcmVkIGV4dGVybmFsIGRlcGVuZGVudCBwYWNrYWdlLgorIworIyBGYWlsdXJlIHRvIGZpbmQgdGhlIGRlcGVuZGVudCBwYWNrYWdlIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IuCisjCisjIFRoZSBkZXBlbmRlbnQgcGFja2FnZSBpcyBzcGVjaWZpZWQgaW4gdGhyZWUgZm9ybXM6CisjCisjICAgUEFDS0FHRS1QUkVUVFktTkFNRSAgICAgOiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBieSB3aGljaCB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWZlcnJlZCBmb3IgYW55IGRpYWdub3N0aWMgb3V0cHV0LiBGb3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsICJNeSBHcmVhdCBTb2Z0d2FyZSBQYWNrYWdlIi4KKyMgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIHByZWZpeCBhcHBsaWVkIHRvIHZhcmlhYmxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBhIHJlc3VsdCBvZiBydW5uaW5nIHRoaXMgbWFjcm8gZm9yIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuIEZvciBleGFtcGxlLCAiTUdTUCIgaGVyZSBpcyB0cmFuc2Zvcm1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBNR1NQX0NQUEZMQUdTLgorIyAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSAgIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgbmFtZSB1c2VkIGZvciBwa2ctY29uZmlnLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcyBhbmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWdzcCIgaGVyZSBpcyB1c2VkIGZvciAtLXdpdGgtbWdzcD1ESVIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdwa2ctY29uZmlnIC0tY2ZsYWdzIG1nc3AnLgorIworIyBJbiBhZGRpdGlvbiwgaWYgYW55IGFkZGl0aW9uYWwsIGRlZmF1bHQgbGluayBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkCisjIGZvciB1c2Ugd2l0aCB0aGUgcGFja2FnZSwgdGhlc2UgYXJlIHNwZWNpZmllZCBhczoKKyMKKyMgICBERUZBVUxULVBBQ0tBR0UtTElCUyAgICA6IERlZmF1bHQgbGluayBsaWJyYXJpZXMgcmVxdWlyZWQgZm9yIHVzZSB3aXRoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZS4gVGhlc2UgYXJlIHVzZWQgaWYgcGtnLWNvbmZpZyBpcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSBvciBjYW5ub3QgaWRlbnRpZnkgYW55CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGxpYnJhcmllcy4gRm9yIGV4YW1wbGUsICctbG1nc3AnLgorIworIyBJZiB0aGUgcGFja2FnZSBpcyBzcGVjaWZpZWQsIG9wdGlvbmFsIGFjdGlvbnMgYXJlIHJ1bi4KKyMKKyMgICBBQ1RJT05TLVRPLVJVTi1JRi1GT1VORCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlIGlzIGZvdW5kLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfV0lUSF9SRVFVSVJFRF9FWFRFUk5BTF9QQUNLQUdFXSwKK1sKKyAgICBfTkxfV0lUSF9QQUNLQUdFKFtyZXF1aXJlZF0sIFtleHRlcm5hbF0sIFskMV0sIFskMl0sIFskM10sIFskNF0sIFs6XSwgWyQ1XSlkbmwKK10pCisKKyMgTkxfV0lUSF9PUFRJT05BTF9FWFRFUk5BTF9QQUNLQUdFKFBBQ0tBR0UtUFJFVFRZLU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtERUZBVUxULVBBQ0tBR0UtTElCU10sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2UsIHdpdGggcGtnLWNvbmZpZyBpZiBpdAorIyBpcyBhdmFpbGFibGUsIG9mIHRoZSBzcGVjaWZpZWQsIG9wdGlvbmFsIGV4dGVybmFsIGRlcGVuZGVudCBwYWNrYWdlLgorIworIyBGYWlsdXJlIHRvIGZpbmQgdGhlIGRlcGVuZGVudCBwYWNrYWdlIHdpbGwgTk9UIHJlc3VsdCBpbiBhIGZhdGFsIGVycm9yLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMKKyMgSW4gYWRkaXRpb24sIGlmIGFueSBhZGRpdGlvbmFsLCBkZWZhdWx0IGxpbmsgbGlicmFyaWVzIGFyZSByZXF1aXJlZAorIyBmb3IgdXNlIHdpdGggdGhlIHBhY2thZ2UsIHRoZXNlIGFyZSBzcGVjaWZpZWQgYXM6CisjCisjICAgREVGQVVMVC1QQUNLQUdFLUxJQlMgICAgOiBEZWZhdWx0IGxpbmsgbGlicmFyaWVzIHJlcXVpcmVkIGZvciB1c2Ugd2l0aAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UuIFRoZXNlIGFyZSB1c2VkIGlmIHBrZy1jb25maWcgaXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgb3IgY2Fubm90IGlkZW50aWZ5IGFueQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBsaWJyYXJpZXMuIEZvciBleGFtcGxlLCAnLWxtZ3NwJy4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkLCBvcHRpb25hbCBhY3Rpb25zIGFyZSBydW4uCisjCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtRk9VTkQgOiBPcHRpb25hbCBhY3Rpb25zIHRvIHJ1biBpZiB0aGUgcGFja2FnZSBpcyBmb3VuZC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1dJVEhfT1BUSU9OQUxfRVhURVJOQUxfUEFDS0FHRV0sCitbCisgICAgX05MX1dJVEhfUEFDS0FHRShbb3B0aW9uYWxdLCBbZXh0ZXJuYWxdLCBbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbOl0sIFskNV0pZG5sCitdKQorCisjIE5MX1dJVEhfUkVRVUlSRURfSU5URVJOQUxfUEFDS0FHRShQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbREVGQVVMVC1QQUNLQUdFLUxJQlNdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOLUlGLU5PVC1FWFRFUk5BTF0sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlLCB3aXRoIHBrZy1jb25maWcgaWYgaXQKKyMgaXMgYXZhaWxhYmxlLCBvZiB0aGUgc3BlY2lmaWVkLCByZXF1aXJlZCBkZXBlbmRlbnQgcGFja2FnZS4gVGhlIGRlcGVuZGVudAorIyBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBleHRlcm5hbGx5IG9yIG1heSBleGlzdCB3aXRoaW4gdGhlIGN1cnJlbnQKKyMgcGFja2FnZSBpdHNlbGYuCisjCisjIEZhaWx1cmUgdG8gZmluZCB0aGUgZGVwZW5kZW50IHBhY2thZ2Ugd2lsbCByZXN1bHQgaW4gYSBmYXRhbCBlcnJvci4KKyMKKyMgVGhlIGRlcGVuZGVudCBwYWNrYWdlIGlzIHNwZWNpZmllZCBpbiB0aHJlZSBmb3JtczoKKyMKKyMgICBQQUNLQUdFLVBSRVRUWS1OQU1FICAgICA6IFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIGJ5IHdoaWNoIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVycmVkIGZvciBhbnkgZGlhZ25vc3RpYyBvdXRwdXQuIEZvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgIk15IEdyZWF0IFNvZnR3YXJlIFBhY2thZ2UiLgorIyAgIFBBQ0tBR0UtVkFSSUFCTEUtUFJFRklYIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgcHJlZml4IGFwcGxpZWQgdG8gdmFyaWFibGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgdGhpcyBtYWNybyBmb3IgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4gRm9yIGV4YW1wbGUsICJNR1NQIiBoZXJlIGlzIHRyYW5zZm9ybWVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIE1HU1BfQ1BQRkxBR1MuCisjICAgUEFDS0FHRS1TVUNDSU5DVC1OQU1FICAgOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBuYW1lIHVzZWQgZm9yIHBrZy1jb25maWcsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIGFuZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZ3NwIiBoZXJlIGlzIHVzZWQgZm9yIC0td2l0aC1tZ3NwPURJUgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ3BrZy1jb25maWcgLS1jZmxhZ3MgbWdzcCcuCisjCisjIEluIGFkZGl0aW9uLCBpZiBhbnkgYWRkaXRpb25hbCwgZGVmYXVsdCBsaW5rIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQKKyMgZm9yIHVzZSB3aXRoIHRoZSBwYWNrYWdlLCB0aGVzZSBhcmUgc3BlY2lmaWVkIGFzOgorIworIyAgIERFRkFVTFQtUEFDS0FHRS1MSUJTICAgIDogRGVmYXVsdCBsaW5rIGxpYnJhcmllcyByZXF1aXJlZCBmb3IgdXNlIHdpdGgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLiBUaGVzZSBhcmUgdXNlZCBpZiBwa2ctY29uZmlnIGlzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYXZhaWxhYmxlIG9yIGNhbm5vdCBpZGVudGlmeSBhbnkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwgJy1sbWdzcCcuCisjCisjIElmIHRoZSBwYWNrYWdlIGlzIHNwZWNpZmllZCwgZWl0aGVyIGludGVybmFsbHkgb3IgZXh0ZXJuYWxseSwgb3B0aW9uYWwKKyMgYWN0aW9ucyBhcmUgcnVuLgorIworIyAgIEFDVElPTlMtVE8tUlVOLUlGLU5PVC1FWFRFUk5BTCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGV4dGVybmFsLgorIyAgIEFDVElPTlMtVE8tUlVOLUlGLU5PVC1JTlRFUk5BTCA6IE9wdGlvbmFsIGFjdGlvbnMgdG8gcnVuIGlmIHRoZSBwYWNrYWdlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGludGVybmFsLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTkxfV0lUSF9SRVFVSVJFRF9JTlRFUk5BTF9QQUNLQUdFXSwKK1sKKyAgICBfTkxfV0lUSF9QQUNLQUdFKFtyZXF1aXJlZF0sIFtpbnRlcm5hbF0sIFskMV0sIFskMl0sIFskM10sIFskNF0sIFskNV0sIFskNl0pZG5sCitdKQorCisjIE5MX1dJVEhfT1BUSU9OQUxfSU5URVJOQUxfUEFDS0FHRShQQUNLQUdFLVBSRVRUWS1OQU1FLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbREVGQVVMVC1QQUNLQUdFLUxJQlNdLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTlMtVE8tUlVOLUlGLU5PVC1FWFRFUk5BTF0sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlLCB3aXRoIHBrZy1jb25maWcgaWYgaXQKKyMgaXMgYXZhaWxhYmxlLCBvZiB0aGUgc3BlY2lmaWVkLCBvcHRpb25hbCBkZXBlbmRlbnQgcGFja2FnZS4gVGhlIGRlcGVuZGVudAorIyBwYWNrYWdlIG1heSBiZSBwcm92aWRlZCBleHRlcm5hbGx5IG9yIG1heSBleGlzdCB3aXRoaW4gdGhlIGN1cnJlbnQKKyMgcGFja2FnZSBpdHNlbGYuCisjCisjIEZhaWx1cmUgdG8gZmluZCB0aGUgZGVwZW5kZW50IHBhY2thZ2Ugd2lsbCBOT1QgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IuCisjCisjIFRoZSBkZXBlbmRlbnQgcGFja2FnZSBpcyBzcGVjaWZpZWQgaW4gdGhyZWUgZm9ybXM6CisjCisjICAgUEFDS0FHRS1QUkVUVFktTkFNRSAgICAgOiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSBieSB3aGljaCB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWZlcnJlZCBmb3IgYW55IGRpYWdub3N0aWMgb3V0cHV0LiBGb3IKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsICJNeSBHcmVhdCBTb2Z0d2FyZSBQYWNrYWdlIi4KKyMgICBQQUNLQUdFLVZBUklBQkxFLVBSRUZJWCA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIHByZWZpeCBhcHBsaWVkIHRvIHZhcmlhYmxlcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBhIHJlc3VsdCBvZiBydW5uaW5nIHRoaXMgbWFjcm8gZm9yIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuIEZvciBleGFtcGxlLCAiTUdTUCIgaGVyZSBpcyB0cmFuc2Zvcm1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBNR1NQX0NQUEZMQUdTLgorIyAgIFBBQ0tBR0UtU1VDQ0lOQ1QtTkFNRSAgIDogVGhlIHBhY2thZ2Utc3BlY2lmaWMgbmFtZSB1c2VkIGZvciBwa2ctY29uZmlnLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlcyBhbmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWdzcCIgaGVyZSBpcyB1c2VkIGZvciAtLXdpdGgtbWdzcD1ESVIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdwa2ctY29uZmlnIC0tY2ZsYWdzIG1nc3AnLgorIworIyBJbiBhZGRpdGlvbiwgaWYgYW55IGFkZGl0aW9uYWwsIGRlZmF1bHQgbGluayBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkCisjIGZvciB1c2Ugd2l0aCB0aGUgcGFja2FnZSwgdGhlc2UgYXJlIHNwZWNpZmllZCBhczoKKyMKKyMgICBERUZBVUxULVBBQ0tBR0UtTElCUyAgICA6IERlZmF1bHQgbGluayBsaWJyYXJpZXMgcmVxdWlyZWQgZm9yIHVzZSB3aXRoCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZS4gVGhlc2UgYXJlIHVzZWQgaWYgcGtnLWNvbmZpZyBpcworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSBvciBjYW5ub3QgaWRlbnRpZnkgYW55CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGxpYnJhcmllcy4gRm9yIGV4YW1wbGUsICctbG1nc3AnLgorIworIyBJZiB0aGUgcGFja2FnZSBpcyBzcGVjaWZpZWQsIGVpdGhlciBpbnRlcm5hbGx5IG9yIGV4dGVybmFsbHksIG9wdGlvbmFsCisjIGFjdGlvbnMgYXJlIHJ1bi4KKyMKKyMgICBBQ1RJT05TLVRPLVJVTi1JRi1OT1QtRVhURVJOQUwgOiBPcHRpb25hbCBhY3Rpb25zIHRvIHJ1biBpZiB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBleHRlcm5hbC4KKyMgICBBQ1RJT05TLVRPLVJVTi1JRi1OT1QtSU5URVJOQUwgOiBPcHRpb25hbCBhY3Rpb25zIHRvIHJ1biBpZiB0aGUgcGFja2FnZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBpbnRlcm5hbC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW05MX1dJVEhfT1BUSU9OQUxfSU5URVJOQUxfUEFDS0FHRV0sCitbCisgICAgX05MX1dJVEhfUEFDS0FHRShbb3B0aW9uYWxdLCBbaW50ZXJuYWxdLCBbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbJDVdLCBbJDZdKWRubAorXSkKKworIyBOTF9XSVRIX1BBQ0tBR0UoUEFDS0FHRS1QUkVUVFktTkFNRSwgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVgsCisjICAgICAgICAgICAgICAgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUsIFtERUZBVUxULVBBQ0tBR0UtTElCU10sCisjICAgICAgICAgICAgICAgICBbQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUVYVEVSTkFMXSwKKyMgICAgICAgICAgICAgICAgIFtBQ1RJT05TLVRPLVJVTi1JRi1OT1QtSU5URVJOQUxdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2UsIHdpdGggcGtnLWNvbmZpZyBpZiBpdAorIyBpcyBhdmFpbGFibGUsIG9mIHRoZSBzcGVjaWZpZWQgZGVwZW5kZW50IHBhY2thZ2UuIFRoZSBkZXBlbmRlbnQKKyMgcGFja2FnZSBtYXkgYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBvciBtYXkgZXhpc3Qgd2l0aGluIHRoZSBjdXJyZW50CisjIHBhY2thZ2UgaXRzZWxmLgorIworIyBUaGUgZGVwZW5kZW50IHBhY2thZ2UgaXMgc3BlY2lmaWVkIGluIHRocmVlIGZvcm1zOgorIworIyAgIFBBQ0tBR0UtUFJFVFRZLU5BTUUgICAgIDogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgYnkgd2hpY2ggdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVmZXJyZWQgZm9yIGFueSBkaWFnbm9zdGljIG91dHB1dC4gRm9yCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLCAiTXkgR3JlYXQgU29mdHdhcmUgUGFja2FnZSIuCisjICAgUEFDS0FHRS1WQVJJQUJMRS1QUkVGSVggOiBUaGUgcGFja2FnZS1zcGVjaWZpYyBwcmVmaXggYXBwbGllZCB0byB2YXJpYWJsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgYSByZXN1bHQgb2YgcnVubmluZyB0aGlzIG1hY3JvIGZvciB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLiBGb3IgZXhhbXBsZSwgIk1HU1AiIGhlcmUgaXMgdHJhbnNmb3JtZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gTUdTUF9DUFBGTEFHUy4KKyMgICBQQUNLQUdFLVNVQ0NJTkNULU5BTUUgICA6IFRoZSBwYWNrYWdlLXNwZWNpZmljIG5hbWUgdXNlZCBmb3IgcGtnLWNvbmZpZywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgYW5kIG9uIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIEZvciBleGFtcGxlLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1nc3AiIGhlcmUgaXMgdXNlZCBmb3IgLS13aXRoLW1nc3A9RElSCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAncGtnLWNvbmZpZyAtLWNmbGFncyBtZ3NwJy4KKyMKKyMgSW4gYWRkaXRpb24sIGlmIGFueSBhZGRpdGlvbmFsLCBkZWZhdWx0IGxpbmsgbGlicmFyaWVzIGFyZSByZXF1aXJlZAorIyBmb3IgdXNlIHdpdGggdGhlIHBhY2thZ2UsIHRoZXNlIGFyZSBzcGVjaWZpZWQgYXM6CisjCisjICAgREVGQVVMVC1QQUNLQUdFLUxJQlMgICAgOiBEZWZhdWx0IGxpbmsgbGlicmFyaWVzIHJlcXVpcmVkIGZvciB1c2Ugd2l0aAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UuIFRoZXNlIGFyZSB1c2VkIGlmIHBrZy1jb25maWcgaXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgb3IgY2Fubm90IGlkZW50aWZ5IGFueQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBsaWJyYXJpZXMuIEZvciBleGFtcGxlLCAnLWxtZ3NwJy4KKyMKKyMgSWYgdGhlIHBhY2thZ2UgaXMgc3BlY2lmaWVkLCBlaXRoZXIgaW50ZXJuYWxseSBvciBleHRlcm5hbGx5LCBvcHRpb25hbAorIyBhY3Rpb25zIGFyZSBydW4uCisjCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUVYVEVSTkFMIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgZXh0ZXJuYWwuCisjICAgQUNUSU9OUy1UTy1SVU4tSUYtTk9ULUlOVEVSTkFMIDogT3B0aW9uYWwgYWN0aW9ucyB0byBydW4gaWYgdGhlIHBhY2thZ2UKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgaW50ZXJuYWwuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtOTF9XSVRIX1BBQ0tBR0VdLAorWworICAgIG00X3dhcm4ob2Jzb2xldGUsIFskMDogdGhpcyBtYWNybyBoYXMgYmVlbiBkZXByZWNhdGVkLiBDb25zaWRlciB1c2luZyBOTF9XSVRIX1JFUVVJUkVEX0lOVEVSTkFMX1BBQ0tBR0UgaW5zdGVhZC5dKQorCisgICAgTkxfV0lUSF9SRVFVSVJFRF9JTlRFUk5BTF9QQUNLQUdFKFskMV0sIFskMl0sIFskM10sIFskNF0sIFskNV0sIFskNl0pZG5sCitdKQorCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvcGtnLm00IGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9tNC9wa2cubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3MTg3OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbTQvcGtnLm00CkBAIC0wLDAgKzEsMTU5IEBACisjIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIHNlcmlhbCAxIChwa2ctY29uZmlnLTAuMjQpCisjIAorIyBDb3B5cmlnaHQgwqkgMjAwNCBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX1BST0dfUEtHX0NPTkZJR10sCitbbTRfcGF0dGVybl9mb3JiaWQoW15fP1BLR19bQS1aX10rJF0pCittNF9wYXR0ZXJuX2FsbG93KFteUEtHX0NPTkZJRyhfKFBBVEh8TElCRElSfFNZU1JPT1RfRElSfEFMTE9XX1NZU1RFTV8oQ0ZMQUdTfExJQlMpKSk/JF0pCittNF9wYXR0ZXJuX2FsbG93KFteUEtHX0NPTkZJR18oRElTQUJMRV9VTklOU1RBTExFRHxUT1BfQlVJTERfRElSfERFQlVHX1NQRVcpJF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHXSwgW3BhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5XSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfUEFUSF0sIFtkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfTElCRElSXSwgW3BhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGhdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQorZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249bTRfZGVmYXVsdChbJDFdLCBbMC45LjBdKQorCUFDX01TR19DSEVDS0lORyhbcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uXSkKKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaVtdZG5sCitdKSMgUEtHX1BST0dfUEtHX0NPTkZJRworCisjIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWlsYXIKKyMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorIworIyBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorIyBvbmx5IGF0IHRoZSBmaXJzdCBvY2N1cmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKKyMgaXQncyBjYWxsZWQgbWlnaHQgYmUgc2tpcHBlZCAoc3VjaCBhcyBpZiBpdCBpcyB3aXRoaW4gYW4gImlmIiwgeW91CisjIGhhdmUgdG8gY2FsbCBQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX0VYSVNUU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIEFDX1JVTl9MT0coWyRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkMSJdKTsgdGhlbgorICBtNF9kZWZhdWx0KFskMl0sIFs6XSkKK200X2lmdmFsbihbJDNdLCBbZWxzZQorICAkM10pZG5sCitmaV0pCisKKyMgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBbTU9EVUxFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfUEtHX0NPTkZJR10sCitbaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorICAgIHBrZ19jdl9bXSQxPSIkJDEiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskM10sCisgICAgICAgICAgICAgICAgICAgICBbcGtnX2N2X1tdJDE9YCRQS0dfQ09ORklHIC0tW10kMiAiJDMiIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMgXSwKKwkJICAgICBbcGtnX2ZhaWxlZD15ZXNdKQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpW11kbmwKK10pIyBfUEtHX0NPTkZJRworCisjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRF0sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmlbXWRubAorXSkjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorCisKKyMgUEtHX0NIRUNLX01PRFVMRVMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwKKyMgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIworIworIyBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bworIyBQS0dfQ0hFQ0tfTU9EVUxFUyBtaWdodCBub3QgaGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8gaW5jbHVkZSBhbgorIyBleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMKKyMKKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfTU9EVUxFU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0NGTEFHU10sIFtDIGNvbXBpbGVyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfTElCU10sIFtsaW5rZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorCitwa2dfZmFpbGVkPW5vCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCisKK19QS0dfQ09ORklHKFskMV1bX0NGTEFHU10sIFtjZmxhZ3NdLCBbJDJdKQorX1BLR19DT05GSUcoWyQxXVtfTElCU10sIFtsaWJzXSwgWyQyXSkKKworbTRfZGVmaW5lKFtfUEtHX1RFWFRdLCBbQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAkMVtdX0NGTEFHUworYW5kICQxW11fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy5dKQorCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJDIiIDI+JjFgCisgICAgICAgIGVsc2UgCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJDIiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAorCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0VSUk9SKAorW1BhY2thZ2UgcmVxdWlyZW1lbnRzICgkMikgd2VyZSBub3QgbWV0OgorCiskJDFfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK19QS0dfVEVYVF0pW11kbmwKKyAgICAgICAgXSkKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCUFDX01TR19SRVNVTFQoW25vXSkKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRkFJTFVSRSgKK1tUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworX1BLR19URVhUCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+Ll0pW11kbmwKKyAgICAgICAgXSkKK2Vsc2UKKwkkMVtdX0NGTEFHUz0kcGtnX2N2X1tdJDFbXV9DRkxBR1MKKwkkMVtdX0xJQlM9JHBrZ19jdl9bXSQxW11fTElCUworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCSQzCitmaVtdZG5sCitdKSMgUEtHX0NIRUNLX01PRFVMRVMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbWlzc2luZyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvbWlzc2luZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYjk4OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9taXNzaW5nCkBAIC0wLDAgKzEsMjE1IEBACisjISAvYmluL3NoCisjIENvbW1vbiB3cmFwcGVyIGZvciBhIGZldyBwb3RlbnRpYWxseSBtaXNzaW5nIEdOVSBwcm9ncmFtcy4KKworc2NyaXB0dmVyc2lvbj0yMDEzLTEwLTI4LjEzOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworY2FzZSAkMSBpbgorCisgIC0taXMtbGlnaHR3ZWlnaHQpCisgICAgIyBVc2VkIGJ5IG91ciBhdXRvY29uZiBtYWNyb3MgdG8gY2hlY2sgd2hldGhlciB0aGUgYXZhaWxhYmxlIG1pc3NpbmcKKyAgICAjIHNjcmlwdCBpcyBtb2Rlcm4gZW5vdWdoLgorICAgIGV4aXQgMAorICAgIDs7CisKKyAgLS1ydW4pCisgICAgIyBCYWNrLWNvbXBhdCB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdXNlZCBieSBvbGRlciBhdXRvbWFrZS4KKyAgICBzaGlmdAorICAgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitSdW4gJ1BST0dSQU0gW0FSR1VNRU5UXS4uLicsIHJldHVybmluZyBhIHByb3BlciBhZHZpY2Ugd2hlbiB0aGlzIGZhaWxzIGR1ZQordG8gUFJPR1JBTSBiZWluZyBtaXNzaW5nIG9yIHRvbyBvbGQuCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgorICBhY2xvY2FsICAgYXV0b2NvbmYgIGF1dG9oZWFkZXIgICBhdXRvbTR0ZSAgYXV0b21ha2UgIG1ha2VpbmZvCisgIGJpc29uICAgICB5YWNjICAgICAgZmxleCAgICAgICAgIGxleCAgICAgICBoZWxwMm1hbgorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCisnZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KKworU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiB1bmtub3duICckMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIGV4aXQgMQorICAgIDs7CisKK2VzYWMKKworIyBSdW4gdGhlIGdpdmVuIHByb2dyYW0sIHJlbWVtYmVyIGl0cyBleGl0IHN0YXR1cy4KKyIkQCI7IHN0PSQ/CisKKyMgSWYgaXQgc3VjY2VlZGVkLCB3ZSBhcmUgZG9uZS4KK3Rlc3QgJHN0IC1lcSAwICYmIGV4aXQgMAorCisjIEFsc28gZXhpdCBub3cgaWYgd2UgaXQgZmFpbGVkIChvciB3YXNuJ3QgZm91bmQpLCBhbmQgJy0tdmVyc2lvbicgd2FzCisjIHBhc3NlZDsgc3VjaCBhbiBvcHRpb24gaXMgcGFzc2VkIG1vc3QgbGlrZWx5IHRvIGRldGVjdCB3aGV0aGVyIHRoZQorIyBwcm9ncmFtIGlzIHByZXNlbnQgYW5kIHdvcmtzLgorY2FzZSAkMiBpbiAtLXZlcnNpb258LS1oZWxwKSBleGl0ICRzdDs7IGVzYWMKKworIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucyB3aGVuIHRoZSB1c2VyCisjIHRyaWVzIHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEKKyMgbWluaW11bSB2ZXJzaW9uLgoraWYgdGVzdCAkc3QgLWVxIDYzOyB0aGVuCisgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKK2VsaWYgdGVzdCAkc3QgLWVxIDEyNzsgdGhlbgorICAjIFByb2dyYW0gd2FzIG1pc3NpbmcuCisgIG1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKK2Vsc2UKKyAgIyBQcm9ncmFtIHdhcyBmb3VuZCBhbmQgZXhlY3V0ZWQsIGJ1dCBmYWlsZWQuICBHaXZlIHVwLgorICBleGl0ICRzdAorZmkKKworcGVybF9VUkw9aHR0cDovL3d3dy5wZXJsLm9yZy8KK2ZsZXhfVVJMPWh0dHA6Ly9mbGV4LnNvdXJjZWZvcmdlLm5ldC8KK2dudV9zb2Z0d2FyZV9VUkw9aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlCisKK3Byb2dyYW1fZGV0YWlscyAoKQoreworICBjYXNlICQxIGluCisgICAgYWNsb2NhbHxhdXRvbWFrZSkKKyAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9tYWtlIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9tYWtlPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIEF1dG9jb25mLCBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZj4iCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgICBhdXRvY29uZnxhdXRvbTR0ZXxhdXRvaGVhZGVyKQorICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b2NvbmYgcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmYvPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgZXNhYworfQorCitnaXZlX2FkdmljZSAoKQoreworICAjIE5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorICBub3JtYWxpemVkX3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCisgICAgcy9eZ251LS8vOyB0CisgICAgcy9eZ251Ly87IHQKKyAgICBzL15nLy87IHQnYAorCisgIHByaW50ZiAnJXNcbicgIickMScgaXMgJG1zZy4iCisKKyAgY29uZmlndXJlX2RlcHM9Iidjb25maWd1cmUuYWMnIG9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5ICdjb25maWd1cmUuYWMnIgorICBjYXNlICRub3JtYWxpemVkX3Byb2dyYW0gaW4KKyAgICBhdXRvY29uZiopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2NvbmZpZ3VyZS5hYycsIgorICAgICAgZWNobyAib3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgaXQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvY29uZicKKyAgICAgIDs7CisgICAgYXV0b2hlYWRlciopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjY29uZmlnLmgnIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2hlYWRlcicKKyAgICAgIDs7CisgICAgYXV0b21ha2UqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdNYWtlZmlsZS5hbScgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbWFrZScKKyAgICAgIDs7CisgICAgYWNsb2NhbCopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjaW5jbHVkZS5tNCcgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhY2xvY2FsJworICAgICAgOzsKKyAgIGF1dG9tNHRlKikKKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgbWFpbnRhaW5lciBmaWxlcyB0aGF0IHJlcXVpcmUiCisgICAgICBlY2hvICJ0aGUgJ2F1dG9tNHRlJyBwcm9ncmFtIHRvIGJlIHJlYnVpbHQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbTR0ZScKKyAgICAgIDs7CisgICAgYmlzb24qfHlhY2MqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy55JyBmaWxlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgQmlzb24gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYmlzb24vPiIKKyAgICAgIDs7CisgICAgbGV4KnxmbGV4KikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcubCcgZmlsZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRmbGV4X1VSTD4iCisgICAgICA7OworICAgIGhlbHAybWFuKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kiIFwKKyAgICAgICAgICAgIm9mIGEgbWFuIHBhZ2UuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBIZWxwMm1hbiBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9oZWxwMm1hbi8+IgorICAgIDs7CisgICAgbWFrZWluZm8qKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy50ZXhpJyBmaWxlLCBvciIKKyAgICAgIGVjaG8gImFueSBvdGhlciBmaWxlIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4iCisgICAgICBlY2hvICJZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBUZXhpbmZvIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML3RleGluZm8vPiIKKyAgICAgIGVjaG8gIlRoZSBzcHVyaW91cyBtYWtlaW5mbyBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIgorICAgICAgZWNobyAidXNpbmcgYSBidWdneSAnbWFrZScgKEFJWCwgRFUsIElSSVgpLCBpbiB3aGljaCBjYXNlIHlvdSBtaWdodCIKKyAgICAgIGVjaG8gIndhbnQgdG8gaW5zdGFsbCBHTlUgbWFrZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbWFrZS8+IgorICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUgcHJvcGVyIgorICAgICAgZWNobyAidG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSAnUkVBRE1FJyBmaWxlLCBpdCIKKyAgICAgIGVjaG8gIm9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmciCisgICAgICBlY2hvICJ0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4iCisgICAgICBlY2hvICJjYXNlIHNvbWUgb3RoZXIgcGFja2FnZSBjb250YWlucyB0aGlzIG1pc3NpbmcgJyQxJyBwcm9ncmFtLiIKKyAgICAgIDs7CisgIGVzYWMKK30KKworZ2l2ZV9hZHZpY2UgIiQxIiB8IHNlZCAtZSAnMXMvXi9XQVJOSU5HOiAvJyBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICcyLCRzL14vICAgICAgICAgLycgPiYyCisKKyMgUHJvcGFnYXRlIHRoZSBjb3JyZWN0IGV4aXQgc3RhdHVzIChleHBlY3RlZCB0byBiZSAxMjcgZm9yIGEgcHJvZ3JhbQorIyBub3QgZm91bmQsIDYzIGZvciBhIHByb2dyYW0gdGhhdCBmYWlsZWQgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2gpLgorZXhpdCAkc3QKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9ta2luc3RhbGxkaXJzIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvY29uZi9ta2luc3RhbGxkaXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxOTFhNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL21raW5zdGFsbGRpcnMKQEAgLTAsMCArMSwxNjIgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBPcmlnaW5hbCBhdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKyMgQ3JlYXRlZDogMTk5My0wNS0xNgorIyBQdWJsaWMgZG9tYWluLgorIworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCitlcnJzdGF0dXM9MAorZGlybW9kZT0KKwordXNhZ2U9IlwKK1VzYWdlOiBta2luc3RhbGxkaXJzIFstaF0gWy0taGVscF0gWy0tdmVyc2lvbl0gWy1tIE1PREVdIERJUiAuLi4KKworQ3JlYXRlIGVhY2ggZGlyZWN0b3J5IERJUiAod2l0aCBtb2RlIE1PREUsIGlmIHNwZWNpZmllZCksIGluY2x1ZGluZyBhbGwKK2xlYWRpbmcgZmlsZSBuYW1lIGNvbXBvbmVudHMuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorCisjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cword2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorICAgICAgZWNobyAiJHVzYWdlIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworICAgICAgc2hpZnQKKyAgICAgIHRlc3QgJCMgLWVxIDAgJiYgeyBlY2hvICIkdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorICAgICAgZGlybW9kZT0kMQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLS12ZXJzaW9uKQorICAgICAgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgICAtKikgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmtub3duIG9wdGlvbgorICAgICAgZWNobyAiJHVzYWdlIiAxPiYyCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3Qgbm9uLW9wdCBhcmcKKyAgICAgIGJyZWFrCisgICAgICA7OworICBlc2FjCitkb25lCisKK2ZvciBmaWxlCitkbworICBpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKyAgICBzaGlmdAorICBlbHNlCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKKworY2FzZSAkIyBpbgorICAwKSBleGl0IDAgOzsKK2VzYWMKKworIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisjIG1rZGlyIC1wIGEvYyBhdCB0aGUgc2FtZSB0aW1lLCBib3RoIHdpbGwgZGV0ZWN0IHRoYXQgYSBpcyBtaXNzaW5nLAorIyBvbmUgd2lsbCBjcmVhdGUgYSwgdGhlbiB0aGUgb3RoZXIgd2lsbCB0cnkgdG8gY3JlYXRlIGEgYW5kIGRpZSB3aXRoCisjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisjIGZyb20gYSBwYXJhbGxlbCBtYWtlLiAgV2UgdXNlIC0tdmVyc2lvbiBpbiB0aGUgcHJvYmUgdG8gcmVzdHJpY3QKKyMgb3Vyc2VsdmVzIHRvIEdOVSBta2Rpciwgd2hpY2ggaXMgdGhyZWFkLXNhZmUuCitjYXNlICRkaXJtb2RlIGluCisgICcnKQorICAgIGlmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKyAgICAgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworICAgICAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKKyAgICAgICMgZXhpc3RzLgorICAgICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgICAgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgICBmaQorICAgIDs7CisgICopCisgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1tICRkaXJtb2RlIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKyAgICBlbHNlCisgICAgICAjIENsZWFuIHVwIGFmdGVyIE5leHRTdGVwIGFuZCBPcGVuU3RlcCBta2Rpci4KKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisgICAgICBkbworICAgICAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisgICAgICBkb25lCisgICAgZmkKKyAgICA7OworZXNhYworCitmb3IgZmlsZQorZG8KKyAgY2FzZSAkZmlsZSBpbgorICAgIC8qKSBwYXRoY29tcD0vIDs7CisgICAgKikgIHBhdGhjb21wPSA7OworICBlc2FjCisgIG9JRlM9JElGUworICBJRlM9LworICBzZXQgZm5vcmQgJGZpbGUKKyAgc2hpZnQKKyAgSUZTPSRvSUZTCisKKyAgZm9yIGQKKyAgZG8KKyAgICB0ZXN0ICJ4JGQiID0geCAmJiBjb250aW51ZQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wJGQKKyAgICBjYXNlICRwYXRoY29tcCBpbgorICAgICAgLSopIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisKKyAgICAgIG1rZGlyICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisJZXJyc3RhdHVzPSRsYXN0ZXJyCisgICAgICBlbHNlCisJaWYgdGVzdCAhIC16ICIkZGlybW9kZSI7IHRoZW4KKwkgIGVjaG8gImNobW9kICRkaXJtb2RlICRwYXRoY29tcCIKKwkgIGxhc3RlcnI9CisJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworCSAgaWYgdGVzdCAhIC16ICIkbGFzdGVyciI7IHRoZW4KKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisJICBmaQorCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICBwYXRoY29tcD0kcGF0aGNvbXAvCisgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL3B5LWNvbXBpbGUgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL3B5LWNvbXBpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZlYTg2NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvcHktY29tcGlsZQpAQCAtMCwwICsxLDE3MCBAQAorIyEvYmluL3NoCisjIHB5LWNvbXBpbGUgLSBDb21waWxlIGEgUHl0aG9uIHByb2dyYW0KKworc2NyaXB0dmVyc2lvbj0yMDExLTA2LTA4LjEyOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworaWYgWyAteiAiJFBZVEhPTiIgXTsgdGhlbgorICBQWVRIT049cHl0aG9uCitmaQorCittZT1weS1jb21waWxlCisKK3VzYWdlX2Vycm9yICgpCit7CisgIGVjaG8gIiRtZTogJCoiID4mMgorICBlY2hvICJUcnkgJyRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgIGV4aXQgMQorfQorCitiYXNlZGlyPQorZGVzdGRpcj0KK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgIiQxIiBpbgorICAgIC0tYmFzZWRpcikKKyAgICAgIGlmIHRlc3QgJCMgLWx0IDI7IHRoZW4KKyAgICAgICAgdXNhZ2VfZXJyb3IgIm9wdGlvbiAnLS1iYXNlZGlyJyByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyAgICAgIGVsc2UKKyAgICAgICAgYmFzZWRpcj0kMgorICAgICAgZmkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC0tZGVzdGRpcikKKyAgICAgIGlmIHRlc3QgJCMgLWx0IDI7IHRoZW4KKyAgICAgICAgdXNhZ2VfZXJyb3IgIm9wdGlvbiAnLS1kZXN0ZGlyJyByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyAgICAgIGVsc2UKKyAgICAgICAgZGVzdGRpcj0kMgorICAgICAgZmkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC1ofC0taGVscCkKKyAgICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBweS1jb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFstLWJhc2VkaXIgRElSXSBbLS1kZXN0ZGlyIERJUl0gRklMRVMuLi4iCisKK0J5dGUgY29tcGlsZSBzb21lIHB5dGhvbiBzY3JpcHRzIEZJTEVTLiAgVXNlIC0tZGVzdGRpciB0byBzcGVjaWZ5IGFueQorbGVhZGluZyBkaXJlY3RvcnkgcGF0aCB0byB0aGUgRklMRVMgdGhhdCB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGluIHRoZQorYnl0ZSBjb21waWxlZCBmaWxlLiAgU3BlY2lmeSAtLWJhc2VkaXIgZm9yIGFueSBhZGRpdGlvbmFsIHBhdGggaW5mb3JtYXRpb24geW91CitkbyB3YW50IHRvIGJlIHNob3duIGluIHRoZSBieXRlIGNvbXBpbGVkIGZpbGUuCisKK0V4YW1wbGU6CisgIHB5LWNvbXBpbGUgLS1kZXN0ZGlyIC90bXAvcGtnLXJvb3QgLS1iYXNlZGlyIC91c3Ivc2hhcmUvdGVzdCB0ZXN0LnB5IHRlc3QyLnB5CisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLXZ8LS12ZXJzaW9uKQorICAgICAgZWNobyAiJG1lICRzY3JpcHR2ZXJzaW9uIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtLSkKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgICAtKikKKyAgICAgIHVzYWdlX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uICckMSciCisgICAgICA7OworICAgICopCisgICAgICBicmVhaworICAgICAgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitmaWxlcz0kKgoraWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgIHVzYWdlX2Vycm9yICJubyBmaWxlcyBnaXZlbiIKK2ZpCisKKyMgaWYgYmFzZWRpciB3YXMgZ2l2ZW4sIHRoZW4gaXQgc2hvdWxkIGJlIHByZXBlbmRlZCB0byBmaWxlbmFtZXMgYmVmb3JlCisjIGJ5dGUgY29tcGlsYXRpb24uCitpZiBbIC16ICIkYmFzZWRpciIgXTsgdGhlbgorICAgIHBhdGh0cmFucz0icGF0aCA9IGZpbGUiCitlbHNlCisgICAgcGF0aHRyYW5zPSJwYXRoID0gb3MucGF0aC5qb2luKCckYmFzZWRpcicsIGZpbGUpIgorZmkKKworIyBpZiBkZXN0ZGlyIHdhcyBnaXZlbiwgdGhlbiBpdCBuZWVkcyB0byBiZSBwcmVwZW5kZWQgdG8gdGhlIGZpbGVuYW1lIHRvCisjIGJ5dGUgY29tcGlsZSBidXQgbm90IGdvIGludG8gdGhlIGNvbXBpbGVkIGZpbGUuCitpZiBbIC16ICIkZGVzdGRpciIgXTsgdGhlbgorICAgIGZpbGV0cmFucz0iZmlsZXBhdGggPSBwYXRoIgorZWxzZQorICAgIGZpbGV0cmFucz0iZmlsZXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCckZGVzdGRpcicgKyBvcy5zZXAgKyBwYXRoKSIKK2ZpCisKKyRQWVRIT04gLWMgIgoraW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUsIGltcAorCitmaWxlcyA9ICcnJyRmaWxlcycnJworCitzeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcy4uLlxuJykKK2ZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCk6CisgICAgJHBhdGh0cmFucworICAgICRmaWxldHJhbnMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCAobGVuKGZpbGVwYXRoKSA+PSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKwkgICAgY29udGludWUKKyAgICBzeXMuc3Rkb3V0LndyaXRlKGZpbGUpCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJyk6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVwYXRoKSwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGZpbGVwYXRoICsgJ2MnLCBwYXRoKQorc3lzLnN0ZG91dC53cml0ZSgnXG4nKSIgfHwgZXhpdCAkPworCisjIHRoaXMgd2lsbCBmYWlsIGZvciBweXRob24gPCAxLjUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIC4uLgorJFBZVEhPTiAtTyAtYyAiCitpbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZSwgaW1wCisKKyMgcHlweSBkb2VzIG5vdCB1c2UgLnB5byBvcHRpbWl6YXRpb24KK2lmIGhhc2F0dHIoc3lzLCAncHlweV90cmFuc2xhdGlvbl9pbmZvJyk6CisgICAgc3lzLmV4aXQoMCkKKworZmlsZXMgPSAnJyckZmlsZXMnJycKK3N5cy5zdGRvdXQud3JpdGUoJ0J5dGUtY29tcGlsaW5nIHB5dGhvbiBtb2R1bGVzIChvcHRpbWl6ZWQgdmVyc2lvbnMpIC4uLlxuJykKK2ZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCk6CisgICAgJHBhdGh0cmFucworICAgICRmaWxldHJhbnMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCAobGVuKGZpbGVwYXRoKSA+PSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKwkgICAgY29udGludWUKKyAgICBzeXMuc3Rkb3V0LndyaXRlKGZpbGUpCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJyk6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVwYXRoLCBGYWxzZSksIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdvJywgcGF0aCkKK3N5cy5zdGRvdXQud3JpdGUoJ1xuJykiIDI+L2Rldi9udWxsIHx8IDoKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b2NvbmYvdGVzdC1kcml2ZXIgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL3Rlc3QtZHJpdmVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzMDYwNTYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9jb25mL3Rlc3QtZHJpdmVyCkBAIC0wLDAgKzEsMTM5IEBACisjISAvYmluL3NoCisjIHRlc3QtZHJpdmVyIC0gYmFzaWMgdGVzdHN1aXRlIGRyaXZlciBzY3JpcHQuCisKK3NjcmlwdHZlcnNpb249MjAxMy0wNy0xMy4yMjsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKKyMgTWFrZSB1bmNvbmRpdGlvbmFsIGV4cGFuc2lvbiBvZiB1bmRlZmluZWQgdmFyaWFibGVzIGFuIGVycm9yLiAgVGhpcworIyBoZWxwcyBhIGxvdCBpbiBwcmV2ZW50aW5nIHR5cG8tcmVsYXRlZCBidWdzLgorc2V0IC11CisKK3VzYWdlX2Vycm9yICgpCit7CisgIGVjaG8gIiQwOiAkKiIgPiYyCisgIHByaW50X3VzYWdlID4mMgorICBleGl0IDIKK30KKworcHJpbnRfdXNhZ2UgKCkKK3sKKyAgY2F0IDw8RU5ECitVc2FnZToKKyAgdGVzdC1kcml2ZXIgLS10ZXN0LW5hbWU9TkFNRSAtLWxvZy1maWxlPVBBVEggLS10cnMtZmlsZT1QQVRICisgICAgICAgICAgICAgIFstLWV4cGVjdC1mYWlsdXJlPXt5ZXN8bm99XSBbLS1jb2xvci10ZXN0cz17eWVzfG5vfV0KKyAgICAgICAgICAgICAgWy0tZW5hYmxlLWhhcmQtZXJyb3JzPXt5ZXN8bm99XSBbLS1dCisgICAgICAgICAgICAgIFRFU1QtU0NSSVBUIFtURVNULVNDUklQVC1BUkdVTUVOVFNdCitUaGUgJy0tdGVzdC1uYW1lJywgJy0tbG9nLWZpbGUnIGFuZCAnLS10cnMtZmlsZScgb3B0aW9ucyBhcmUgbWFuZGF0b3J5LgorRU5ECit9CisKK3Rlc3RfbmFtZT0gIyBVc2VkIGZvciByZXBvcnRpbmcuCitsb2dfZmlsZT0gICMgV2hlcmUgdG8gc2F2ZSB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IHNjcmlwdC4KK3Ryc19maWxlPSAgIyBXaGVyZSB0byBzYXZlIHRoZSBtZXRhZGF0YSBvZiB0aGUgdGVzdCBydW4uCitleHBlY3RfZmFpbHVyZT1ubworY29sb3JfdGVzdHM9bm8KK2VuYWJsZV9oYXJkX2Vycm9ycz15ZXMKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgLS1oZWxwKSBwcmludF91c2FnZTsgZXhpdCAkPzs7CisgIC0tdmVyc2lvbikgZWNobyAidGVzdC1kcml2ZXIgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKyAgLS10ZXN0LW5hbWUpIHRlc3RfbmFtZT0kMjsgc2hpZnQ7OworICAtLWxvZy1maWxlKSBsb2dfZmlsZT0kMjsgc2hpZnQ7OworICAtLXRycy1maWxlKSB0cnNfZmlsZT0kMjsgc2hpZnQ7OworICAtLWNvbG9yLXRlc3RzKSBjb2xvcl90ZXN0cz0kMjsgc2hpZnQ7OworICAtLWV4cGVjdC1mYWlsdXJlKSBleHBlY3RfZmFpbHVyZT0kMjsgc2hpZnQ7OworICAtLWVuYWJsZS1oYXJkLWVycm9ycykgZW5hYmxlX2hhcmRfZXJyb3JzPSQyOyBzaGlmdDs7CisgIC0tKSBzaGlmdDsgYnJlYWs7OworICAtKikgdXNhZ2VfZXJyb3IgImludmFsaWQgb3B0aW9uOiAnJDEnIjs7CisgICAqKSBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworbWlzc2luZ19vcHRzPQordGVzdCB4IiR0ZXN0X25hbWUiID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10ZXN0LW5hbWUiCit0ZXN0IHgiJGxvZ19maWxlIiAgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLWxvZy1maWxlIgordGVzdCB4IiR0cnNfZmlsZSIgID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10cnMtZmlsZSIKK2lmIHRlc3QgeCIkbWlzc2luZ19vcHRzIiAhPSB4OyB0aGVuCisgIHVzYWdlX2Vycm9yICJ0aGUgZm9sbG93aW5nIG1hbmRhdG9yeSBvcHRpb25zIGFyZSBtaXNzaW5nOiRtaXNzaW5nX29wdHMiCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIHVzYWdlX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IgorZmkKKworaWYgdGVzdCAkY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4KKyAgIyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoICdsaWIvYW0vY2hlY2suYW06JChhbV9fdHR5X2NvbG9ycyknLgorICByZWQ9JxtbMDszMW0nICMgUmVkLgorICBncm49JxtbMDszMm0nICMgR3JlZW4uCisgIGxnbj0nG1sxOzMybScgIyBMaWdodCBncmVlbi4KKyAgYmx1PScbWzE7MzRtJyAjIEJsdWUuCisgIG1nbj0nG1swOzM1bScgIyBNYWdlbnRhLgorICBzdGQ9JxtbbScgICAgICMgTm8gY29sb3IuCitlbHNlCisgIHJlZD0gZ3JuPSBsZ249IGJsdT0gbWduPSBzdGQ9CitmaQorCitkb19leGl0PSdybSAtZiAkbG9nX2ZpbGUgJHRyc19maWxlOyAoZXhpdCAkc3QpOyBleGl0ICRzdCcKK3RyYXAgInN0PTEyOTsgJGRvX2V4aXQiIDEKK3RyYXAgInN0PTEzMDsgJGRvX2V4aXQiIDIKK3RyYXAgInN0PTE0MTsgJGRvX2V4aXQiIDEzCit0cmFwICJzdD0xNDM7ICRkb19leGl0IiAxNQorCisjIFRlc3Qgc2NyaXB0IGlzIHJ1biBoZXJlLgorIiRAIiA+JGxvZ19maWxlIDI+JjEKK2VzdGF0dXM9JD8KK2lmIHRlc3QgJGVuYWJsZV9oYXJkX2Vycm9ycyA9IG5vICYmIHRlc3QgJGVzdGF0dXMgLWVxIDk5OyB0aGVuCisgIGVzdGF0dXM9MQorZmkKKworY2FzZSAkZXN0YXR1czokZXhwZWN0X2ZhaWx1cmUgaW4KKyAgMDp5ZXMpIGNvbD0kcmVkIHJlcz1YUEFTUyByZWNoZWNrPXllcyBnY29weT15ZXM7OworICAwOiopICAgY29sPSRncm4gcmVzPVBBU1MgIHJlY2hlY2s9bm8gIGdjb3B5PW5vOzsKKyAgNzc6KikgIGNvbD0kYmx1IHJlcz1TS0lQICByZWNoZWNrPW5vICBnY29weT15ZXM7OworICA5OToqKSAgY29sPSRtZ24gcmVzPUVSUk9SIHJlY2hlY2s9eWVzIGdjb3B5PXllczs7CisgICo6eWVzKSBjb2w9JGxnbiByZXM9WEZBSUwgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKKyAgKjoqKSAgIGNvbD0kcmVkIHJlcz1GQUlMICByZWNoZWNrPXllcyBnY29weT15ZXM7OworZXNhYworCisjIFJlcG9ydCBvdXRjb21lIHRvIGNvbnNvbGUuCitlY2hvICIke2NvbH0ke3Jlc30ke3N0ZH06ICR0ZXN0X25hbWUiCisKKyMgUmVnaXN0ZXIgdGhlIHRlc3QgcmVzdWx0LCBhbmQgb3RoZXIgcmVsZXZhbnQgbWV0YWRhdGEuCitlY2hvICI6dGVzdC1yZXN1bHQ6ICRyZXMiID4gJHRyc19maWxlCitlY2hvICI6Z2xvYmFsLXRlc3QtcmVzdWx0OiAkcmVzIiA+PiAkdHJzX2ZpbGUKK2VjaG8gIjpyZWNoZWNrOiAkcmVjaGVjayIgPj4gJHRyc19maWxlCitlY2hvICI6Y29weS1pbi1nbG9iYWwtbG9nOiAkZ2NvcHkiID4+ICR0cnNfZmlsZQorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0LmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWZhOGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QuYW0KQEAgLTAsMCArMSwyMyBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIGdlbmVyaWMgInRhaWwiIG9yIHBvc3QgYXV0b21ha2UgaGVhZGVyIHRoYXQgbWF5CisjICAgICAgYmUgaW5jbHVkZWQgaW4gYW55IGF1dG9tYWtlZmlsZSB1c2VkIGluIHRoZSBidWlsZCB0cmVlLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QvcnVsZXMuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODM2OTEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzLmFtCkBAIC0wLDAgKzEsMjUgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBhdXRvbWFrZSBmb290ZXIgZm9yIGFsbCBjb21tb24KKyMgICAgICAoaS5lLiBub24tdG9vbGNoYWluLXNwZWNpZmljKSBydWxlcy4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0L3J1bGVzL2NvdmVyYWdlLmFtCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QvcnVsZXMvcHJldHR5LmFtCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QvcnVsZXMvaGVhZGVycy5hbQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzL2NvdmVyYWdlLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzL2NvdmVyYWdlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTQ4MjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMvY292ZXJhZ2UuYW0KQEAgLTAsMCArMSwzOSBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIGF1dG9tYWtlIGZvb3RlciBmb3IgYWxsIGNvZGUtY292ZXJhZ2UgcmVsYXRlZAorIyAgICAgIHRhcmdldHMgYW5kIHJ1bGVzLgorIworIyAgICAgIFRoaXMgcmVwcmVzZW50cyB0aGUgbWluaW11bSBpbnRlZ3JhdGlvbiB3aXRoIEdOVSBhdXRvdG9vbHMKKyMgICAgICAoYXV0b21ha2UgaW4gcGFydGljdWxhcikgc3VjaCB0aGF0ICdtYWtlIGNvdmVyYWdlJyBtYXkgYmUgaW52b2tlZAorIyAgICAgIGF0IHRoZSB0b3Agb2YgdGhlIHRyZWUgYW5kIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBvY2N1ciBzdWNoCisjICAgICAgdGhhdCBpdCBleGVjdXRlcyBzdWNjZXNzZnVsbHkgd2l0aCBubyBpbnRlcnZlbmluZyBtYWtlIHRhcmdldAorIyAgICAgIGludm9jYXRpb25zLiBUaGUgJ2NoZWNrLWFtJyBhbmQgJyQoQlVJTFRfU09VUkNFUyknIGFyZSB0aGUga2V5CisjICAgICAgYXV0b21ha2Utc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGF0IGhhcHBlbnMuCisjCisKKy5QSE9OWTogY292ZXJhZ2UgY292ZXJhZ2UtcmVjdXJzaXZlCisgCitjb3ZlcmFnZTogY292ZXJhZ2UtcmVjdXJzaXZlCisKK2NvdmVyYWdlOiBjaGVjay1hbQorCitjb3ZlcmFnZTogJChCVUlMVF9TT1VSQ0VTKQorCitjb3ZlcmFnZS1yZWN1cnNpdmU6CisJJChubC1tYWtlLXN1YmRpcnMpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMvaGVhZGVycy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy9oZWFkZXJzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZWQwYzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3Bvc3QvcnVsZXMvaGVhZGVycy5hbQpAQCAtMCwwICsxLDQ1IEBACisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgYXV0b21ha2UgZm9vdGVyIGZvciBpbnN0YWxsaW5nIGhlYWRlciBmaWxlcworIyAgICAgIGluZGVwZW5kZW50bHkgb2YgdGhlIHJlc3Qgb2YgYSBwYWNrYWdlLgorIworIyAgICAgIFBhY2thZ2VzIHRoYXQgd2lzaCB0byBhdmFpbCB0aGVtc2VsdmVzIG9mIHRoaXMgdGFyZ2V0IG1heSB3aXNoCisjICAgICAgdG8gYWRkIHRoZSBmb2xsb3dpbmcgZ29hbHMgYW5kIGRlcGVuZGVuY2llczoKKyMKKyMgICAgICAgIGluc3RhbGwtaGVhZGVyczogaW5zdGFsbC1pbmNsdWRlSEVBREVSUworIworIyAgICAgIGluIHBsYWNlcyB3aGVyZSB0aGUgcGFja2FnZSB1c2VzIGFuZCBkZWZpbmVzICdpbmNsdWRlX0hFQURFUlMnIG9yCisjCisjICAgICAgICBpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtZGF0YQorIworIyAgICAgIHdoZXJlIHRoZSBwYWNrYWdlIHVzZXMgYW5kIGRlZmluZXMgYSBtb3JlIGNvbXBsZXggJ2Rpc3RfKl9IRUFERVJTJy4KKyMKKyMgICAgICBUaGlzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gaW50ZWdyYXRpb24gd2l0aCBHTlUgYXV0b3Rvb2xzCisjICAgICAgKGF1dG9tYWtlIGlucGFydGljdWxhcikgc3VjaCB0aGF0ICdtYWtlIGluc3RhbGwtaGVhZGVycycgbWF5IGJlCisjICAgICAgaW52b2tlZCBhdCB0aGUgdG9wIG9mIHRoZSB0cmVlIGFuZCBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgb2NjdXIgCisjICAgICAgc3VjaCB0aGF0IGl0IGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseSB3aXRoIG5vIGludGVydmVuaW5nIG1ha2UgCisjICAgICAgdGFyZ2V0IGludm9jYXRpb25zLgorIworCisuUEhPTlk6IGluc3RhbGwtaGVhZGVycyBpbnN0YWxsLWhlYWRlcnMtcmVjdXJzaXZlCisKK2luc3RhbGwtaGVhZGVyczogaW5zdGFsbC1oZWFkZXJzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWhlYWRlcnMtcmVjdXJzaXZlOgorCSQobmwtbWFrZS1zdWJkaXJzKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wb3N0L3J1bGVzL3ByZXR0eS5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy9wcmV0dHkuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlZTYwMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcG9zdC9ydWxlcy9wcmV0dHkuYW0KQEAgLTAsMCArMSw3OSBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIGF1dG9tYWtlIGZvb3RlciBmb3IgYWxsIGNvZGluZyBzdHlsZS1yZWxhdGVkCisjICAgICAgdGFyZ2V0cyBhbmQgcnVsZXMuCisjCisjICAgICAgVGhlIHJlY3Vyc2l2ZSB0YXJnZXQgJ3ByZXR0eScsIGludm9rZWQgYWdhaW5zdCAnJChQUkVUVFlfU1VCRElSUyknLCAKKyMgICAgICBpcyBpbnRlbmRlZCB0byByZWZvcm1hdCBhIGNvbGxlY3Rpb24gb2Ygc291cmNlIGZpbGVzLCBkZWZpbmVkIGJ5IAorIyAgICAgICckKFBSRVRUWV9GSUxFUyknIHVzaW5nIHRoZSBwcm9ncmFtICckKFBSRVRUWSknIHdpdGggdGhlIGFyZ3VtZW50cyAKKyMgICAgICAnJChQUkVUVFlfQVJHUyknLgorIworIyAgICAgIFRoZSByZWN1cnNpdmUgdGFyZ2V0ICdwcmV0dHktY2hlY2snIChhbmQgaXRzIGFsaWFzICdsaW50JyksCisjICAgICAgaW52b2tlZCBhZ2FpbnN0ICckKFBSRVRUWV9TVUJESVJTKScsIGlzIGludGVuZGVkIHRvIG9ubHkgY2hlY2sgCisjICAgICAgYnV0IE5PVCByZWZvcm1hdCBhIGNvbGxlY3Rpb24gb2Ygc291cmNlIGZpbGVzLCBkZWZpbmVkIGJ5CisjICAgICAgJyQoUFJFVFRZX0ZJTEVTKScgdXNpbmcgdGhlIHByb2dyYW0gJyQoUFJFVFRZX0NIRUNLKScgd2l0aCB0aGUKKyMgICAgICBhcmd1bWVudHMgJyQoUFJFVFRZX0NIRUNLX0FSR1MpJy4KKyMKKyMgICAgICBUaGlzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gaW50ZWdyYXRpb24gd2l0aCBHTlUgYXV0b3Rvb2xzCisjICAgICAgKGF1dG9tYWtlIGlucGFydGljdWxhcikgc3VjaCB0aGF0ICdtYWtlIHByZXR0eScgYW5kICdtYWtlCisjICAgICAgcHJldHR5LWNoZWNrJyBtYXkgYmUgaW52b2tlZCBhdCB0aGUgdG9wIG9mIHRoZSB0cmVlIGFuZCBhbGwgCisjICAgICAgdGhlIHByZXJlcXVpc2l0ZXMgb2NjdXIgc3VjaCB0aGF0IGl0IGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseSAKKyMgICAgICB3aXRoIG5vIGludGVydmVuaW5nIG1ha2UgdGFyZ2V0IGludm9jYXRpb25zLiAnJChCVUlMVF9TT1VSQ0VTKScgCisjICAgICAgYXJlIHRoZSBrZXkgYXV0b21ha2Utc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGF0IGhhcHBlbnMuCisjCisKKyMgbmwtbWFrZS1wcmV0dHkgPFRFUlNFIE9VVFBVVCBDT01NQU5EPiA8Q09NTUFORD4gPENPTU1BTkQgQVJHVU1FTlRTPiA8UEFUSFM+CisjCisjIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBQQVRIUywgaW52b2tpbmcgQ09NTUFORCB3aXRoCisjIENPTU1BTkQgQVJHVUVNRU5UUyBvbiBlYWNoIGZpbGUuIElmIGEgbm9uLXZlcmJvc2UgbWFrZSBoYXMgYmVlbgorIyByZXF1ZXN0ZWQgVEVSU0UgT1VUUFVUIENPTU1BTkQgaXMgZW1pdHRlZCB0byBzdGFuZGFyZCBvdXRwdXQuCisKK2RlZmluZSBubC1tYWtlLXByZXR0eQorJChBTV9WX2F0KWZvciBmaWxlIGluICQoNCk7IGRvIFwKKyAgICAkKDEpIFwKKyAgICBpZiB0ZXN0IC1mICQke2ZpbGV9OyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKyAgICAkKDIpICQoMykgJCR7ZH0vJCR7ZmlsZX0gXAorICAgIHx8IGV4aXQgMTsgXAorZG9uZQorZW5kZWYKKworLlBIT05ZOiBwcmV0dHkgcHJldHR5LXJlY3Vyc2l2ZSBwcmV0dHktY2hlY2sgcHJldHR5LWNoZWNrLXJlY3Vyc2l2ZSBsaW50CisKK3ByZXR0eTogcHJldHR5LXJlY3Vyc2l2ZQorCitwcmV0dHkgcHJldHR5LWNoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisKKyMgTWFwIHRoZSBidWlsZCBhY3Rpb24gJ2xpbnQnIHRvIHRoZSBtb3JlIHZlcm5hY3VsYXIgJ3ByZXR0eS1jaGVjaycuCisKK2xpbnQ6IHByZXR0eS1jaGVjaworCitwcmV0dHktY2hlY2s6IHByZXR0eS1jaGVjay1yZWN1cnNpdmUKKworcHJldHR5LXJlY3Vyc2l2ZSBwcmV0dHktY2hlY2stcmVjdXJzaXZlOgorCSQoY2FsbCBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzLCQoUFJFVFRZX1NVQkRJUlMpKQorCitwcmV0dHk6ICQoUFJFVFRZX0ZJTEVTKQoraWZuZXEgKCQoUFJFVFRZKSwpCisJJChjYWxsIG5sLW1ha2UtcHJldHR5LCQoQU1fVl9QUkVUVFkpLCQoUFJFVFRZKSwkKFBSRVRUWV9BUkdTKSwkKGZpbHRlci1vdXQgJChAKS1yZWN1cnNpdmUsJChQUkVUVFlfRklMRVMpKSkKK2VuZGlmCisKK3ByZXR0eS1jaGVjazogJChQUkVUVFlfRklMRVMpCitpZm5lcSAoJChQUkVUVFlfQ0hFQ0spLCkKKwkkKGNhbGwgbmwtbWFrZS1wcmV0dHksJChBTV9WX1BSRVRUWV9DSEVDSyksJChQUkVUVFlfQ0hFQ0spLCQoUFJFVFRZX0NIRUNLX0FSR1MpLCQoZmlsdGVyLW91dCAkKEApLXJlY3Vyc2l2ZSwkKFBSRVRUWV9GSUxFUykpKQorZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0NWI1YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlLmFtCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTQtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBnZW5lcmljICJoZWFkIiBvciBwcmUgYXV0b21ha2UgaGVhZGVyIHRoYXQgbWF5CisjICAgICAgYmUgaW5jbHVkZWQgaW4gYW55IGF1dG9tYWtlZmlsZSB1c2VkIGluIHRoZSBidWlsZCB0cmVlLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS9tYWNyb3MuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTIyYmVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zLmFtCkBAIC0wLDAgKzEsODUgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTQtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYXV0b21ha2UgbWFjcm9zIGNvbW1vbiB0byBhbGwgb3RoZXIgYXV0b21ha2UKKyMgICAgICBoZWFkZXJzIGFuZCBmaWxlcy4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUvbWFjcm9zL2NvbnN0YW50cy5hbQoraW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUvbWFjcm9zL3BhdGhzLmFtCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS9tYWNyb3MvcHJldHR5LmFtCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS9tYWNyb3MvdmVyYm9zaXR5LmFtCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS9tYWNyb3MvY292ZXJhZ2UuYW0KK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlL21hY3Jvcy9zdWJkaXJzLmFtCisKKyMKKyMgY3JlYXRlLWRpcmVjdG9yeQorIworIyBDcmVhdGUgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSBuYW1lIG9mIHRoZSAkKEApIHZhcmlhYmxlLgorIworZGVmaW5lIGNyZWF0ZS1kaXJlY3RvcnkKKyQoQU1fVl9NS0RJUl9QKSQoTUtESVJfUCkgJChAKQorZW5kZWYgIyBjcmVhdGUtZGlyZWN0b3J5CisKKyMKKyMgY3JlYXRlLWxpbmsKKyMKKyMgQ3JlYXRlIHRoZSBzeW1ib2xpYyBsaW5rIHdpdGggdGhlIHNvdXJjZSBvZiB0aGUgJCg8KSB2YXJpYWJsZSBhbmQKKyMgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSAkKEApIHZhcmlhYmxlLgorIworZGVmaW5lIGNyZWF0ZS1saW5rCiskKEFNX1ZfTE5fUykkKExOX1MpICQoPCkgJChAKQorZW5kZWYgIyBjcmVhdGUtbGluaworCisjCisjIGNoZWNrLWZpbGUgPG1hY3JvIHN1ZmZpeD4KKyMKKyMgQ2hlY2sgd2hldGhlciBhIGZpbGUsIHJlZmVyZW5jZWQgYnkgdGhlICQoQCkgdmFyaWFibGUsIHNob3VsZCBiZQorIyB1cGRhdGVkIC8gcmVnZW5lcmF0ZWQgYmFzZWQgb24gaXRzIGRlcGVuZGVuY2llcywgcmVmZXJlbmNlZCBieSB0aGUKKyMgJCg8KSB2YXJpYWJsZSBieSBydW5uaW5nIHRoZSBtYWtlIG1hY3JvIGNoZWNrLWZpbGUtPG1hY3JvIHN1ZmZpeD4uCisjCisjIFRoZSAkKDwpIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgaWYgdGhlIG1hY3JvIHdhbnRzIHRvIHByb2Nlc3MKKyMgaXQgYW5kIHRoZSBwcm9zcGVjdGl2ZSBuZXcgb3V0cHV0IGZpbGUsIHdoaWNoIHRoZSBtYWNybyBNVVNUCisjIGdlbmVyYXRlLCBhcyB0aGUgc2Vjb25kLgorIworIyBUaGlzIG1hY3JvIHdpbGwgZW5zdXJlIHRoYXQgYW55IHJlcXVpcmVkIHBhcmVudCBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZAorIyBwcmlvciB0byBpbnZva2luZyBjaGVjay1maWxlLTxtYWNybyBzdWZmaXg+LgorIworIyBUaGlzIG1hY3JvIGlzIHNpbWlsYXIgdG8gYW5kIGluc3BpcmVkIGJ5IHRoYXQgZnJvbSBMaW51eCBLYnVpbGQgYW5kCisjIGVsc2V3aGVyZS4KKyMKKyMgICA8bWFjcm8gc3VmZml4PiAtIFRoZSBuYW1lLCBzdWZmaXhlZCB0byAiY2hlY2stZmlsZS0iLCB3aGljaCBpbmRpY2F0ZXMKKyMgICAgICAgICAgICAgICAgICAgIHRoZSBtYWtlIG1hY3JvIHRvIGludm9rZS4KKyMKKyMKK2RlZmluZSBjaGVjay1maWxlCiskKEFNX1ZfYXQpc2V0IC1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZWNobyAnICBDSEVDSyAgICAkKEApJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoTUtESVJfUCkgJChkaXIgJChAKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiskKGNhbGwgY2hlY2stZmlsZS0kKDEpLCQoPCksJChAKS5OKTsgICAgICAgICAgICAgICAgXAoraWYgWyAtciAiJChAKSIgXSAmJiAkKENNUCkgLXMgIiQoQCkiICIkKEApLk4iOyB0aGVuIFwKKyAgICBybSAtZiAiJChAKS5OIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVjaG8gJyAgR0VOICAgICAgJChAKSc7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtdiAtZiAiJChAKS5OIiAiJChAKSI7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmaQorZW5kZWYgIyBjaGVjay1maWxlCisKKworCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9jb25zdGFudHMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvY29uc3RhbnRzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzdhMjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvY29uc3RhbnRzLmFtCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTAtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYXV0b21ha2UgZmlsZSBjb25zdGFudHMgY29tbW9uIHRvIGFsbCBvdGhlcgorIyAgICAgIGF1dG9tYWtlIGhlYWRlcnMgYW5kIGZpbGVzLgorIworCisjCisjIENoYXJhY3RlciBjb25zdGFudHMgZm9yIHRob3NlIG1ha2UgZG9lcyBub3Qgb3RoZXJ3aXNlIGhhbmRsZSB3ZWxsIG9yCisjIG5hdHVyYWxseS4KKyMKKworIyBQYXRoIHNlcGFyYXRvcgorCitTbGFzaCAgICAgICAgICAgICAgICAgICA6PSAvCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvY292ZXJhZ2UuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvY292ZXJhZ2UuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhNzYyYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9jb3ZlcmFnZS5hbQpAQCAtMCwwICsxLDEwNiBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhdXRvbWFrZSB2YXJpYWJsZXMgYW5kIG1hY3JvcyBjb21tb24gdG8gYWxsCisjICAgICAgb3RoZXIgYXV0b21ha2UgaGVhZGVycyBhbmQgZmlsZXMgZm9yIGNvZGUgY292ZXJhZ2UuCisjCisKKyMgU3VmZml4ZXMKKworIworIyBTdWZmaXggZm9yIHRoZSBjb2RlIGNvdmVyYWdlIHJlcG9ydCAiYnVuZGxlIi4KKyMKK05MX0NPVkVSQUdFX0JVTkRMRV9TVUZGSVggPSAubGNvdgorCisjCisjIFN1ZmZpeCBmb3IgdGhlIGxjb3YgImluZm8iIGZpbGUgaW5zaWRlIHRoZSBjb2RlIGNvdmVyYWdlIHJlcG9ydCBidW5kbGUuCisjCitOTF9DT1ZFUkFHRV9JTkZPX1NVRkZJWCAgID0gLmluZm8KKworIworIyBWZXJib3NpdHkgbWFjcm9zIGFuZCBmbGFncworIworCitOTF9WX0xDT1YgICAgICAgICAgICAgPSAkKG5sX192X0xDT1ZfJChWKSkKK25sX192X0xDT1ZfICAgICAgICAgICA9ICQobmxfX3ZfTENPVl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK25sX192X0xDT1ZfMCAgICAgICAgICA9IEBlY2hvICIgIExDT1YgICAgICQoQCkiOworbmxfX3ZfTENPVl8xICAgICAgICAgID0gCisKK05MX1ZfTENPVl9GTEFHUyAgICAgICA9ICQobmxfX3ZfTENPVl9GTEFHU18kKFYpKQorbmxfX3ZfTENPVl9GTEFHU18gICAgID0gJChubF9fdl9MQ09WX0ZMQUdTXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorbmxfX3ZfTENPVl9GTEFHU18wICAgID0gLS1xdWlldAorbmxfX3ZfTENPVl9GTEFHU18xICAgID0KKworTkxfVl9HRU5IVE1MICAgICAgICAgID0gJChubF9fdl9HRU5IVE1MXyQoVikpCitubF9fdl9HRU5IVE1MXyAgICAgICAgPSAkKG5sX192X0dFTkhUTUxfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitubF9fdl9HRU5IVE1MXzAgICAgICAgPSBAZWNobyAiICBHRU5IVE1MICAkKEApIjsKK25sX192X0dFTkhUTUxfMSAgICAgICA9IAorCitOTF9WX0dFTkhUTUxfRkxBR1MgICAgPSAkKG5sX192X0dFTkhUTUxfRkxBR1NfJChWKSkKK25sX192X0dFTkhUTUxfRkxBR1NfICA9ICQobmxfX3ZfR0VOSFRNTF9GTEFHU18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK25sX192X0dFTkhUTUxfRkxBR1NfMCA9IC0tcXVpZXQgCitubF9fdl9HRU5IVE1MX0ZMQUdTXzEgPQorCisjCisjIGdlbmVyYXRlLWNvdmVyYWdlLXJlcG9ydCA8ZGlyZWN0b3J5PgorIworIyBDYXB0dXJlLCB1c2luZyBsY292LCBhIGNvdmVyYWdlIHJlcG9ydCBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICdkaXJlY3RvcnknCisjIHdpdGggYW4gZmluYWwgb3V0cHV0ICJpbmZvIiBmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUgdGFyZ2V0IHZhcmlhYmxlLgorIworIyAgIDxkaXJlY3Rvcnk+IC0gVGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGxjb3Ygc2hvdWxkIHNlYXJjaCBmb3IgY292ZXJhZ2UgZGF0YSAoKi5nY25vICYgKi5nY2RhKQorIworIyAgIC0gY3JlYXRlIGJhc2VsaW5lIGNvdmVyYWdlIGRhdGEgZmlsZSAoYmFzZS5pbmZvKSB3aXRoICctaXwtLWluaXRpYWwnIG9wdGlvbgorIyAgIC0gY3JlYXRlIHRlc3QgY292ZXJhZ2UgZGF0YSBmaWxlICh0ZXN0LmluZm8pCisjICAgLSBjb21iaW5lIGJhc2VsaW5lIGFuZCB0ZXN0IGNvdmVyYWdlIGRhdGEgdG8gY3JlYXRlIHRoZSBmaW5hbCAiaW5mbyIgZmlsZQorIworIyBUaGVuLCBvbiBzdWNjZXNzLCBnZW5lcmF0ZSBhbiBIVE1MLWJhc2VkIGNvdmVyYWdlIHJlcG9ydCB1c2luZyBnZW5odG1sLgorIworZGVmaW5lIGdlbmVyYXRlLWNvdmVyYWdlLXJlcG9ydAorJChOTF9WX0xDT1YpJChMQ09WKSAkKE5MX1ZfTENPVl9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAtLWluaXRpYWwgLS1jYXB0dXJlIC0tZGlyZWN0b3J5ICIkKDEpIiAtLW91dHB1dC1maWxlICJiYXNlLmluZm8iCiskKE5MX1ZfTENPVikkKExDT1YpICQoTkxfVl9MQ09WX0ZMQUdTKSAtLWNvbmZpZy1maWxlPSIkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9ldGMvbGNvdi5jb25maWciIC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAiJCgxKSIgLS1vdXRwdXQtZmlsZSAidGVzdC5pbmZvIgorJChOTF9WX0xDT1YpJChMQ09WKSAkKE5MX1ZfTENPVl9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAtLWFkZC10cmFjZWZpbGUgImJhc2UuaW5mbyIgLS1hZGQtdHJhY2VmaWxlICJ0ZXN0LmluZm8iIC0tb3V0cHV0LWZpbGUgIiQoQCkiCiskKE5MX1ZfR0VOSFRNTCkkKEdFTkhUTUwpICQoTkxfVl9HRU5IVE1MX0ZMQUdTKSAtLWNvbmZpZy1maWxlPSIkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9ldGMvbGNvdi5jb25maWciICIkKEApIiAtLW91dHB1dC1kaXJlY3RvcnkgIiQoQEQpIgorZW5kZWYgIyBnZW5lcmF0ZS1jb3ZlcmFnZS1yZXBvcnQKKworIworIyBnZW5lcmF0ZS1jb3ZlcmFnZS1yZXBvcnQtd2l0aC1maWx0ZXIgPGRpcmVjdG9yeT4gPHJlbW92ZV9maWx0ZXI+CisjCisjIENhcHR1cmUsIHVzaW5nIGxjb3YsIGEgY292ZXJhZ2UgcmVwb3J0IGZyb20gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgJ2RpcmVjdG9yeScgYW5kIGEgZmlsdGVyICdyZW1vdmVfZmlsdGVyJworIyB3aXRoIGFuIGZpbmFsIG91dHB1dCAiaW5mbyIgZmlsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIHRhcmdldCB2YXJpYWJsZS4KKyMKKyMgICA8ZGlyZWN0b3J5PiAgICAgIC0gVGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGxjb3Ygc2hvdWxkIHNlYXJjaCBmb3IgY292ZXJhZ2UgZGF0YSAoKi5nY25vICYgKi5nY2RhKQorIworIyAgIDxyZW1vdmVfZmlsdGVyPiAgLSBUaGUgZmlsdGVyIGlzIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBzaGVsbCB3aWxkY2FyZCBwYXR0ZXJucy4gKG5vdGUgdGhhdCB0aGV5IG1heSBuZWVkIHRvIGJlIGVzY2FwZWQgYWNjb3JkaW5nbHkgdG8gcHJldmVudAorIyAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hlbGwgZnJvbSBleHBhbmRpbmcgdGhlbSBmaXJzdCkuIEV2ZXJ5IGZpbGUgZW50cnkgaW4gdHJhY2VmaWxlIHdoaWNoIG1hdGNoZXMgYXQgbGVhc3Qgb25lIG9mIHRob3NlIHBhdHRlcm5zIHdpbGwgYmUgcmVtb3ZlZC4KKyMKKyMgICAtIGNyZWF0ZSBiYXNlbGluZSBjb3ZlcmFnZSBkYXRhIGZpbGUgKGJhc2UuaW5mbykgd2l0aCAnLWl8LS1pbml0aWFsJyBvcHRpb24KKyMgICAtIGNyZWF0ZSB0ZXN0IGNvdmVyYWdlIGRhdGEgZmlsZSAodGVzdC5pbmZvKQorIyAgIC0gY29tYmluZSBiYXNlbGluZSBhbmQgdGVzdCBjb3ZlcmFnZSBkYXRhIHRvIGNyZWF0ZSB0aGUgZmluYWwgImluZm8iIGZpbGUKKyMgICAtIHJlbW92ZSBwYXJ0aWN1bGFyIGNvdmVyYWdlIGRhdGEgc3BlY2lmaWxlZCBieSB0aGUgcmVtb3ZlX2ZpbHRlciAobm8gY2hhbmdlIGlmIHJlbW92ZV9maWx0ZXIgaXMgbnVsbCkKKyMKKyMgVGhlbiwgb24gc3VjY2VzcywgZ2VuZXJhdGUgYW4gSFRNTC1iYXNlZCBjb3ZlcmFnZSByZXBvcnQgdXNpbmcgZ2VuaHRtbC4KKyMKK2RlZmluZSBnZW5lcmF0ZS1jb3ZlcmFnZS1yZXBvcnQtd2l0aC1maWx0ZXIKKyQoTkxfVl9MQ09WKSQoTENPVikgJChOTF9WX0xDT1ZfRkxBR1MpIC0tY29uZmlnLWZpbGU9IiQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2V0Yy9sY292LmNvbmZpZyIgLS1pbml0aWFsIC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAiJCgxKSIgLS1vdXRwdXQtZmlsZSAiYmFzZS5pbmZvIgorJChOTF9WX0xDT1YpJChMQ09WKSAkKE5MX1ZfTENPVl9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAtLWNhcHR1cmUgLS1kaXJlY3RvcnkgIiQoMSkiIC0tb3V0cHV0LWZpbGUgInRlc3QuaW5mbyIKKyQoTkxfVl9MQ09WKSQoTENPVikgJChOTF9WX0xDT1ZfRkxBR1MpIC0tY29uZmlnLWZpbGU9IiQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2V0Yy9sY292LmNvbmZpZyIgLS1hZGQtdHJhY2VmaWxlICJiYXNlLmluZm8iIC0tYWRkLXRyYWNlZmlsZSAidGVzdC5pbmZvIiAtLW91dHB1dC1maWxlICIkKEApIgorJChOTF9WX0xDT1YpJChMQ09WKSAkKE5MX1ZfTENPVl9GTEFHUykgLS1jb25maWctZmlsZT0iJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvZXRjL2xjb3YuY29uZmlnIiAtLXJlbW92ZSAiJChAKSIgJChmb3JlYWNoIHBhdHRlcm4sJCgyKSwiJChwYXR0ZXJuKSIpIC0tb3V0cHV0LWZpbGUgIiQoQCkiCiskKE5MX1ZfR0VOSFRNTCkkKEdFTkhUTUwpICQoTkxfVl9HRU5IVE1MX0ZMQUdTKSAtLWNvbmZpZy1maWxlPSIkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9ldGMvbGNvdi5jb25maWciICIkKEApIiAtLW91dHB1dC1kaXJlY3RvcnkgIiQoQEQpIgorZW5kZWYgIyBnZW5lcmF0ZS1jb3ZlcmFnZS1yZXBvcnQtd2l0aC1maWx0ZXIKKworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvcGF0aHMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvcGF0aHMuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyYjdjYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9wYXRocy5hbQpAQCAtMCwwICsxLDQyIEBACisjCisjICAgIENvcHlyaWdodCAyMDEwLTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIGF1dG9tYWtlIG1hY3JvcyBmb3IgbWFuaXB1bGF0aW5nIGFuZCBxdWVyeWluZworIyAgICAgIHBhdGhzLgorIworCisjIERlc2xhc2hpZnkgPHBhdGg+IC4uLgorIworIyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBOTyB0cmFpbGluZyBkaXJlY3RvcnkgZGVsaW1pdGVyIGF0IHRoZSBlbmQgb2YKKyMgdGhlIHNwZWNpZmllZCBwYXRoLgorCitEZXNsYXNoaWZ5ICAgICAgICAgID0gJChwYXRzdWJzdCAlJChTbGFzaCksJSwkKDEpKQorCisjIFNsYXNoaWZ5IDxwYXRoPiAuLi4KKyMKKyMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBzaW5nbGUgdHJhaWxpbmcgZGlyZWN0b3J5IGRlbGltaXRlciBhdCB0aGUKKyMgZW5kIG9mIHRoZSBzcGVjaWZpZWQgcGF0aC4KKworU2xhc2hpZnkgICAgICAgICAgICA9ICQoYWRkc3VmZml4ICQoU2xhc2gpLCQoY2FsbCBEZXNsYXNoaWZ5LCQoMSkpKQorCisjCisjIElzUmVhbFBhdGggPHBhdGg+CisjCisjIElmIHRoZSBwYXRoIGlzIGEgcmVhbCByYXRoZXIgdGhhbiBzeW1ib2xpYyBsaW5rIHBhdGgsIHRoZSBwYXRoIGlzIHJldHVybmVkLiAKKworSXNSZWFsUGF0aCAgICAgICAgICA9ICQoaWYgJChwYXRzdWJzdCAkKHJlYWxwYXRoICQoMSkpLCwkKGFic3BhdGggJCgxKSkpLCwkKDEpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3ByZXR0eS5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9wcmV0dHkuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4M2MyOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy9wcmV0dHkuYW0KQEAgLTAsMCArMSw1MiBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYXV0b21ha2UgdmFyaWFibGVzIGZvciBwZXJmb3JtaW5nIGNvZGluZworIyAgICAgIHN0eWxlIGZvcm1hdHRpbmcgYW5kIGNoZWNraW5nLgorIworCitBTV9WX1BSRVRUWSAgICAgICAgICA9ICQoYW1fX3ZfUFJFVFRZXyQoVikpCithbV9fdl9QUkVUVFlfICAgICAgICA9ICQoYW1fX3ZfUFJFVFRZXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfUFJFVFRZXzAgICAgICAgPSBlY2hvICIgIFBSRVRUWSAgICQke2ZpbGV9IjsKK2FtX192X1BSRVRUWV8xICAgICAgID0gCisKK0FNX1ZfUFJFVFRZX0NIRUNLICAgID0gJChhbV9fdl9QUkVUVFlfQ0hFQ0tfJChWKSkKK2FtX192X1BSRVRUWV9DSEVDS18gID0gJChhbV9fdl9QUkVUVFlfQ0hFQ0tfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9QUkVUVFlfQ0hFQ0tfMCA9IGVjaG8gIiAgUFJFVFRZICAgJCR7ZmlsZX0iOworYW1fX3ZfUFJFVFRZX0NIRUNLXzEgPSAKKworIyBQUkVUVFlfRklMRVMKKyMKKyMgVGhpcyBkZWZpbmVzIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGFnYWluc3Qgd2hpY2ggdGhlIFBSRVRUWSBhbmQKKyMgUFJFVFRZX0NIRUNLIHByb2ZpbGVzIHdpbGwgYmUgaW52b2tlZCBmb3IgdGhlICdwcmV0dHknIGFuZAorIyAncHJldHR5LWNoZWNrJyB0YXJnZXRzLCByZXNwZWN0aXZlbHkuCisjCisjIFRoaXMgZGVmYXVsdHMgdG8gU09VUkNFUyBhbmQgSEVBREVSUyBhbmQgbWF5IGJlIG92ZXJyaWRlbiBvcgorIyBhcHBlbmRlZCB0by4KKworUFJFVFRZX0ZJTEVTICAgID89ICQoU09VUkNFUykgJChIRUFERVJTKQorCisjIFBSRVRUWV9TVUJESVJTCisjCisjIFRoaXMgZGVmaW5lcyB0aGUgc3ViZGlyZWN0b3JpZXMgZm9yIHdoaWNoIHRoZSByZWN1cnNpdmUgJ3ByZXR0eScgYW5kCisjICdwcmV0dHktY2hlY2snIHRhcmdldHMgd2lsbCBydW4gYWdhaW5zdC4KKyMKKyMgVGhpcyBkZWZhdWx0cyB0byBTVUJESVJTIGFuZCBtYXkgYmUgb3ZlcnJpZGRlbiBvciBhcHBlbmRlZCB0by4KKworUFJFVFRZX1NVQkRJUlMgID89ICQoU1VCRElSUykKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3N1YmRpcnMuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3Mvc3ViZGlycy5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzRjZWZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9hdXRvbWFrZS9wcmUvbWFjcm9zL3N1YmRpcnMuYW0KQEAgLTAsMCArMSw3OCBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhdXRvbWFrZSB2YXJpYWJsZXMgYW5kIG1hY3JvcyBjb21tb24gdG8gYWxsCisjICAgICAgb3RoZXIgYXV0b21ha2UgaGVhZGVycyBhbmQgZmlsZXMgZm9yIGludm9raW5nIG1ha2UgaW4gYSBsaXN0CisjICAgICAgb2Ygc3ViZGlyZWN0b3JpZXMgd2l0aCBhIGxpc3Qgb2YgdGFyZ2V0IGdvYWxzLgorIworCisjCisjIG5sLW1ha2Utc3ViZGlycy13aXRoLWRpcnMtYW5kLWdvYWxzIDxzdWJkaXJlY3Rvcmllcz4gPGdvYWxzPgorIworIyBUaGlzIGl0ZXJhdGl2ZWx5IGludm9rZXMgbWFrZSB3aXRoIHRoZSBwcm92aWRlZCB0YXJnZXQgZ29hbHMgaW4gZWFjaAorIyBzdWJkaXJlY3Rvcnkgc3BlY2lmaWVkLgorIworIyAgIHN1YmRpcmVjdG9yaWVzICBBIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGluIHdoaWNoIHRvCisjICAgICAgICAgICAgICAgICAgIGludm9rZSBtYWtlIHdpdGggdGhlIHByb3ZpZGVkIHRhcmdldCBnb2Fscy4KKyMKKyMgICBnb2FscyAgICAgICAgICAgQSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0YXJnZXQgZ29hbHMgdG8KKyMgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCB0byBtYWtlIGluIGVhY2ggc3BlY2lmaWVkIHN1YmRpcmVjdG9yeS4KKyMKK2RlZmluZSBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzLWFuZC1nb2FscworKyQoQU1fVl9hdClmb3Igc3ViZGlyIGluICQoMSk7IGRvIFwKKyAgICBlY2hvICJNYWtpbmcgJCgyKSBpbiAkJHtzdWJkaXJ9IjsgXAorICAgICQoTUFLRSkgLUMgIiQke3N1YmRpcn0iICQoQU1fTUFLRUZMQUdTKSAkKDIpIFwKKyAgICB8fCBleGl0IDE7IFwKK2RvbmUKK2VuZGVmICMgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycy1hbmQtZ29hbHMKKworIworIyBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzIDxzdWJkaXJlY3Rvcmllcz4KKyMKKyMgVGhpcyBpdGVyYXRpdmVseSBpbnZva2VzIG1ha2Ugd2l0aCB0aGUgdGFyZ2V0IGdvYWxzIGRlZmluZWQgaW4KKyMgTUFLRUNNREdPQUxTIGluIGVhY2ggc3ViZGlyZWN0b3J5IHNwZWNpZmllZC4KKyMKKyMgICBzdWJkaXJlY3RvcmllcyAgQSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyBpbiB3aGljaCB0bworIyAgICAgICAgICAgICAgICAgICBpbnZva2UgbWFrZSB3aXRoIHRoZSBwcm92aWRlZCB0YXJnZXQgZ29hbHMuCisjCitkZWZpbmUgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZGlycworJChjYWxsIG5sLW1ha2Utc3ViZGlycy13aXRoLWRpcnMtYW5kLWdvYWxzLCQoMSksJChNQUtFQ01ER09BTFMpKQorZW5kZWYgIyBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzCisKKyMKKyMgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZ29hbHMgPGdvYWxzPgorIworIyBUaGlzIGl0ZXJhdGl2ZWx5IGludm9rZXMgbWFrZSB3aXRoIHRoZSBwcm92aWRlZCB0YXJnZXQgZ29hbHMgaW4gdGhlCisjIHN1YmRpcmVjdG9yaWVzIGRlZmluZWQgaW4gU1VCRElSUy4KKyMKKyMgICBnb2FscyAgICAgICAgICAgQSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0YXJnZXQgZ29hbHMgdG8KKyMgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCB0byBtYWtlIGluIFNVQkRJUlMuCisjCitkZWZpbmUgbmwtbWFrZS1zdWJkaXJzLXdpdGgtZ29hbHMKKyQoY2FsbCBubC1tYWtlLXN1YmRpcnMtd2l0aC1kaXJzLWFuZC1nb2FscywkKFNVQkRJUlMpLCQoMSkpCitlbmRlZiAjIG5sLW1ha2Utc3ViZGlycy13aXRoLWdvYWxzCisKKyMKKyMgbmwtbWFrZS1zdWJkaXJzCisjCisjIFRoaXMgaXRlcmF0aXZlbHkgaW52b2tlcyBtYWtlIHdpdGggdGhlIHRhcmdldCBnb2FscyBkZWZpbmVkIGluCisjIE1BS0VDTURHT0FMUyBpbiB0aGUgc3ViZGlyZWN0b3JpZXMgZGVmaW5lZCBpbiBTVUJESVJTLgorIworZGVmaW5lIG5sLW1ha2Utc3ViZGlycworJChjYWxsIG5sLW1ha2Utc3ViZGlycy13aXRoLWRpcnMtYW5kLWdvYWxzLCQoU1VCRElSUyksJChNQUtFQ01ER09BTFMpKQorZW5kZWYgIyBubC1tYWtlLXN1YmRpcnMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vYXV0b21ha2UvcHJlL21hY3Jvcy92ZXJib3NpdHkuYW0gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvdmVyYm9zaXR5LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNzJiZDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2F1dG9tYWtlL3ByZS9tYWNyb3MvdmVyYm9zaXR5LmFtCkBAIC0wLDAgKzEsMzUgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTQtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYXV0b21ha2UgdmFyaWFibGVzIGNvbW1vbiB0byBhbGwgb3RoZXIKKyMgICAgICBhdXRvbWFrZSBoZWFkZXJzIGFuZCBmaWxlcyBmb3Igc2lsZW50LXJ1bGVzLXN0eWxlIChWPVswfDFdKSBidWlsZAorIyAgICAgIHZlcmJvc2l0eSBvdXRwdXQuCisjCisKK0FNX1ZfTE5fUyAgICAgICA9ICQoYW1fX3ZfTE5fU18kKFYpKQorYW1fX3ZfTE5fU18gICAgID0gJChhbV9fdl9MTl9TXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfTE5fU18wICAgID0gQGVjaG8gIiAgTE4gICAgICAgJChAKSI7CithbV9fdl9MTl9TXzEgICAgPSAKKworQU1fVl9NS0RJUl9QICAgID0gJChhbV9fdl9NS0RJUl9QXyQoVikpCithbV9fdl9NS0RJUl9QXyAgPSAkKGFtX192X01LRElSX1BfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9NS0RJUl9QXzAgPSBAZWNobyAiICBNS0RJUiAgICAkKEApIjsKK2FtX192X01LRElSX1BfMSA9IAorCisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9ldGMvbGNvdi5jb25maWcgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V0Yy9sY292LmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVlNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9ldGMvbGNvdi5jb25maWcKQEAgLTAsMCArMSwxNDggQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTUtMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIGFuIGxjb3YgY29uZmlndXJhdGlvbiBmaWxlIGJhc2VkIG9uIHRoZSBkZWZhdWx0CisjICAgICAgZnJvbSAvZXRjL2xjb3ZyYy4gVGhlIGtleSBkaWZmZXJlbmNlIGlzIHRoZSBpbmNsdXNpb24gb2YKKyMgICAgICAnZ2VuaHRtbF9icmFuY2hfY292ZXJhZ2UgPSAxJyBhbmQgbGNvdl9icmFuY2hfY292ZXJhZ2UgPSAxJyB0bworIyAgICAgIGVuc3VyZSB0aGF0IGJyYW5jaCBjb3ZlcmFnZSBpcyByZXBvcnRlZC4KKyMKKworIyBFeHRlcm5hbCBzdHlsZSBzaGVldCBmaWxlCisjZ2VuaHRtbF9jc3NfZmlsZSA9IGdjb3YuY3NzCisKKyMgQ292ZXJhZ2UgcmF0ZSBsaW1pdHMKK2dlbmh0bWxfaGlfbGltaXQgPSA5MAorZ2VuaHRtbF9tZWRfbGltaXQgPSA3NQorCisjIFdpZHRoIG9mIGxpbmUgY292ZXJhZ2UgZmllbGQgaW4gc291cmNlIGNvZGUgdmlldworZ2VuaHRtbF9saW5lX2ZpZWxkX3dpZHRoID0gMTIKKworIyBXaWR0aCBvZiBicmFuY2ggY292ZXJhZ2UgZmllbGQgaW4gc291cmNlIGNvZGUgdmlldworZ2VuaHRtbF9icmFuY2hfZmllbGRfd2lkdGggPSAxNgorCisjIFdpZHRoIG9mIG92ZXJ2aWV3IGltYWdlCitnZW5odG1sX292ZXJ2aWV3X3dpZHRoID0gODAKKworIyBSZXNvbHV0aW9uIG9mIG92ZXJ2aWV3IG5hdmlnYXRpb24KK2dlbmh0bWxfbmF2X3Jlc29sdXRpb24gPSA0CisKKyMgT2Zmc2V0IGZvciBzb3VyY2UgY29kZSBuYXZpZ2F0aW9uCitnZW5odG1sX25hdl9vZmZzZXQgPSAxMAorCisjIERvIG5vdCByZW1vdmUgdW51c2VkIHRlc3QgZGVzY3JpcHRpb25zIGlmIG5vbi16ZXJvCitnZW5odG1sX2tlZXBfZGVzY3JpcHRpb25zID0gMAorCisjIERvIG5vdCByZW1vdmUgcHJlZml4IGZyb20gZGlyZWN0b3J5IG5hbWVzIGlmIG5vbi16ZXJvCitnZW5odG1sX25vX3ByZWZpeCA9IDAKKworIyBEbyBub3QgY3JlYXRlIHNvdXJjZSBjb2RlIHZpZXcgaWYgbm9uLXplcm8KK2dlbmh0bWxfbm9fc291cmNlID0gMAorCisjIFNwZWNpZnkgc2l6ZSBvZiB0YWJzCitnZW5odG1sX251bV9zcGFjZXMgPSA4CisKKyMgSGlnaGxpZ2h0IGxpbmVzIHdpdGggY29udmVydGVkLW9ubHkgZGF0YSBpZiBub24temVybworZ2VuaHRtbF9oaWdobGlnaHQgPSAwCisKKyMgSW5jbHVkZSBjb2xvciBsZWdlbmQgaW4gSFRNTCBvdXRwdXQgaWYgbm9uLXplcm8KK2dlbmh0bWxfbGVnZW5kID0gMAorCisjIEluY2x1ZGUgSFRNTCBmaWxlIGF0IHN0YXJ0IG9mIEhUTUwgb3V0cHV0CisjZ2VuaHRtbF9odG1sX3Byb2xvZyA9IHByb2xvZy5waHAKKworIyBJbmNsdWRlIEhUTUwgZmlsZSBhdCBlbmQgb2YgSFRNTCBvdXRwdXQKKyNnZW5odG1sX2h0bWxfZXBpbG9nID0gZXBpbG9nLnBocAorCisjIFVzZSBjdXN0b20gSFRNTCBmaWxlIGV4dGVuc2lvbgorI2dlbmh0bWxfaHRtbF9leHRlbnNpb24gPSBodG1sCisKKyMgQ29tcHJlc3MgYWxsIGdlbmVyYXRlZCBodG1sIGZpbGVzIHdpdGggZ3ppcC4KKyNnZW5odG1sX2h0bWxfZ3ppcCA9IDEKKworIyBJbmNsdWRlIHNvcnRlZCBvdmVydmlldyBwYWdlcworZ2VuaHRtbF9zb3J0ID0gMQorCisjIEluY2x1ZGUgZnVuY3Rpb24gY292ZXJhZ2UgZGF0YSBkaXNwbGF5CisjZ2VuaHRtbF9mdW5jdGlvbl9jb3ZlcmFnZSA9IDEKKworIyBJbmNsdWRlIGJyYW5jaCBjb3ZlcmFnZSBkYXRhIGRpc3BsYXkKK2dlbmh0bWxfYnJhbmNoX2NvdmVyYWdlID0gMQorCisjIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBzZXQgb2YgYWxsIGdlbmVyYXRlZCBIVE1MIHBhZ2VzCitnZW5odG1sX2NoYXJzZXQ9VVRGLTgKKworIyBBbGxvdyBIVE1MIG1hcmt1cCBpbiB0ZXN0IGNhc2UgZGVzY3JpcHRpb24gdGV4dCBpZiBub24temVybworZ2VuaHRtbF9kZXNjX2h0bWw9MAorCisjIExvY2F0aW9uIG9mIHRoZSBnY292IHRvb2wKKyNnZW5pbmZvX2djb3ZfdG9vbCA9IGdjb3YKKworIyBBZGp1c3QgdGVzdCBuYW1lcyBpZiBub24temVybworI2dlbmluZm9fYWRqdXN0X3Rlc3RuYW1lID0gMAorCisjIENhbGN1bGF0ZSBhIGNoZWNrc3VtIGZvciBlYWNoIGxpbmUgaWYgbm9uLXplcm8KK2dlbmluZm9fY2hlY2tzdW0gPSAwCisKKyMgRW5hYmxlIGxpYnRvb2wgY29tcGF0aWJpbGl0eSBtb2RlIGlmIG5vbi16ZXJvCitnZW5pbmZvX2NvbXBhdF9saWJ0b29sID0gMAorCisjIFNwZWNpZnkgd2hldGhlciB0byBjYXB0dXJlIGNvdmVyYWdlIGRhdGEgZm9yIGV4dGVybmFsIHNvdXJjZQorIyBmaWxlcworI2dlbmluZm9fZXh0ZXJuYWwgPSAxCisKKyMgVXNlIGdjb3bigJlzIC0tYWxsLWJsb2NrcyBvcHRpb24gaWYgbm9uLXplcm8KKyNnZW5pbmZvX2djb3ZfYWxsX2Jsb2NrcyA9IDEKKworIyBTcGVjaWZ5IGNvbXBhdGlibGl0eSBtb2RlcyAoc2FtZSBhcyAtLWNvbXBhdCBvcHRpb24KKyMgb2YgZ2VuaW5mbykKKyNnZW5pbmZvX2NvbXBhdCA9IGxpYnRvb2w9b24sIGhhbW1lcj1hdXRvLCBzcGxpdF9jcmM9YXV0bworCisjIEFkanVzdCBwYXRoIHRvIHNvdXJjZSBmaWxlcyBieSByZW1vdmluZyBvciBjaGFuZ2luZyBwYXRoCisjIGNvbXBvbmVudHMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gKFBlcmwgcmVndWxhcgorIyBleHByZXNzaW9uIGZvcm1hdCkKKyNnZW5pbmZvX2FkanVzdF9zcmNfcGF0aCA9IC90bXAvYnVpbGQgPT4gL3Vzci9zcmMKKworIyBTcGVjaWZ5IGlmIGdlbmluZm8gc2hvdWxkIHRyeSB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZQorIyB0aGUgYmFzZS1kaXJlY3Rvcnkgd2hlbiBjb2xsZWN0aW5nIGNvdmVyYWdlIGRhdGEuCitnZW5pbmZvX2F1dG9fYmFzZSA9IDEKKworIyBEaXJlY3RvcnkgY29udGFpbmluZyBnY292IGtlcm5lbCBmaWxlcworbGNvdl9nY292X2RpciA9IC9wcm9jL2djb3YKKworIyBMb2NhdGlvbiBmb3IgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzCitsY292X3RtcF9kaXIgPSAvdG1wCisKKyMgU2hvdyBmdWxsIHBhdGhzIGR1cmluZyBsaXN0IG9wZXJhdGlvbiBpZiBub24temVybworbGNvdl9saXN0X2Z1bGxfcGF0aCA9IDAKKworIyBTcGVjaWZ5IHRoZSBtYXhpbXVtIHdpZHRoIGZvciBsaXN0IG91dHB1dC4gVGhpcyB2YWx1ZSBpcworIyBpZ25vcmVkIHdoZW4gbGNvdl9saXN0X2Z1bGxfcGF0aCBpcyBub24temVyby4KK2xjb3ZfbGlzdF93aWR0aCA9IDgwCisKKyMgU3BlY2lmeSB0aGUgbWF4aW11bSBwZXJjZW50YWdlIG9mIGZpbGUgbmFtZXMgd2hpY2ggbWF5IGJlCisjIHRydW5jYXRlZCB3aGVuIGNob29zaW5nIGEgZGlyZWN0b3J5IHByZWZpeCBpbiBsaXN0IG91dHB1dC4KKyMgVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIHdoZW4gbGNvdl9saXN0X2Z1bGxfcGF0aCBpcyBub24temVyby4KK2xjb3ZfbGlzdF90cnVuY2F0ZV9tYXggPSAyMAorCisjIFNwZWNpZnkgaWYgZnVuY3Rpb24gY292ZXJhZ2UgZGF0YSBzaG91bGQgYmUgY29sbGVjdGVkIGFuZAorIyBwcm9jZXNzZWQuCitsY292X2Z1bmN0aW9uX2NvdmVyYWdlID0gMQorCisjIFNwZWNpZnkgaWYgYnJhbmNoIGNvdmVyYWdlIGRhdGEgc2hvdWxkIGJlIGNvbGxlY3RlZCBhbmQKKyMgcHJvY2Vzc2VkLgorbGNvdl9icmFuY2hfY292ZXJhZ2UgPSAxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL0RveHlmaWxlLmluIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9Eb3h5ZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFjNmVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9Eb3h5ZmlsZS5pbgpAQCAtMCwwICsxLDIzNzEgQEAKKyMgRG94eWZpbGUgMS44LjYKKworIworIyAgICBDb3B5cmlnaHQgMjAxNS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZQorIyAgICAgIGRvY3VtZW50YXRpb24gc3lzdGVtICMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKQorIworIyAgICAgIFRoaXMgd2FzIGluaXRpYWxseSBhdXRvZ2VuZXJhdGVkICdkb3h5d2l6YXJkJyBhbmQgdGhlbiBoYW5kLXR1bmVkLgorIworIyAgICAgIEFsbCB0ZXh0IGFmdGVyIGEgaGFzaCAoIykgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQgYW5kIHdpbGwgYmUKKyMgICAgICBpZ25vcmVkLgorIworIyAgICAgIFRoZSBmb3JtYXQgaXM6CisjCisjICAgICAgICAgIFRBRyA9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIworIyAgICAgIEZvciBsaXN0cyBpdGVtcyBjYW4gYWxzbyBiZSBhcHBlbmRlZCB1c2luZzoKKyMKKyMgICAgICAgICAgVEFHICs9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIworIyAgICAgIFZhbHVlcyB0aGF0IGNvbnRhaW4gc3BhY2VzIHNob3VsZCBiZSBwbGFjZWQgYmV0d2VlbiBxdW90ZXMgKCIgIikKKyMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhpcyB0YWcgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyB1c2VkIGZvciBhbGwgY2hhcmFjdGVycyBpbiB0aGUgY29uZmlnIGZpbGUKKyMgdGhhdCBmb2xsb3cuIFRoZSBkZWZhdWx0IGlzIFVURi04IHdoaWNoIGlzIGFsc28gdGhlIGVuY29kaW5nIHVzZWQgZm9yIGFsbCB0ZXh0CisjIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGlzIHRhZy4gRG94eWdlbiB1c2VzIGxpYmljb252IChvciB0aGUgaWNvbnYKKyMgYnVpbHQgaW50byBsaWJjKSBmb3IgdGhlIHRyYW5zY29kaW5nLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmljb252CisjIGZvciB0aGUgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBVVEYtOC4KKworRE9YWUZJTEVfRU5DT0RJTkcgICAgICA9IFVURi04CisKKyMgVGhlIFBST0pFQ1RfTkFNRSB0YWcgaXMgYSBzaW5nbGUgd29yZCAob3IgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzdXJyb3VuZGVkIGJ5CisjIGRvdWJsZS1xdW90ZXMsIHVubGVzcyB5b3UgYXJlIHVzaW5nIERveHl3aXphcmQpIHRoYXQgc2hvdWxkIGlkZW50aWZ5IHRoZQorIyBwcm9qZWN0IGZvciB3aGljaCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBnZW5lcmF0ZWQuIFRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZQorIyB0aXRsZSBvZiBtb3N0IGdlbmVyYXRlZCBwYWdlcyBhbmQgaW4gYSBmZXcgb3RoZXIgcGxhY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTXkgUHJvamVjdC4KKworUFJPSkVDVF9OQU1FICAgICAgICAgICA9IEBQQUNLQUdFX05BTUVACisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiBUaGlzCisjIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yIGlmIHNvbWUgdmVyc2lvbgorIyBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgorCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gQFBBQ0tBR0VfVkVSU0lPTkAKKworIyBVc2luZyB0aGUgUFJPSkVDVF9CUklFRiB0YWcgb25lIGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIG9uZSBsaW5lIGRlc2NyaXB0aW9uCisjIGZvciBhIHByb2plY3QgdGhhdCBhcHBlYXJzIGF0IHRoZSB0b3Agb2YgZWFjaCBwYWdlIGFuZCBzaG91bGQgZ2l2ZSB2aWV3ZXIgYQorIyBxdWljayBpZGVhIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwcm9qZWN0LiBLZWVwIHRoZSBkZXNjcmlwdGlvbiBzaG9ydC4KKworUFJPSkVDVF9CUklFRiAgICAgICAgICA9CisKKyMgV2l0aCB0aGUgUFJPSkVDVF9MT0dPIHRhZyBvbmUgY2FuIHNwZWNpZnkgYW4gbG9nbyBvciBpY29uIHRoYXQgaXMgaW5jbHVkZWQgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgbG9nbyBzaG91bGQgbm90IGV4Y2VlZCA1NSBwaXhlbHMKKyMgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIHNob3VsZCBub3QgZXhjZWVkIDIwMCBwaXhlbHMuIERveHlnZW4gd2lsbCBjb3B5IHRoZSBsb2dvCisjIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LgorCitQUk9KRUNUX0xPR08gICAgICAgICAgID0KKworIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpIHBhdGgKKyMgaW50byB3aGljaCB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSB3cml0dGVuLiBJZiBhIHJlbGF0aXZlIHBhdGggaXMKKyMgZW50ZXJlZCwgaXQgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gd2hlcmUgZG94eWdlbiB3YXMgc3RhcnRlZC4gSWYKKyMgbGVmdCBibGFuayB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLgorCitPVVRQVVRfRElSRUNUT1JZICAgICAgID0gQGFic19idWlsZGRpckAKKworIyBJZiB0aGUgQ1JFQVRFX1NVQkRJUlMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGNyZWF0ZSA0MDk2IHN1Yi0KKyMgZGlyZWN0b3JpZXMgKGluIDIgbGV2ZWxzKSB1bmRlciB0aGUgb3V0cHV0IGRpcmVjdG9yeSBvZiBlYWNoIG91dHB1dCBmb3JtYXQgYW5kCisjIHdpbGwgZGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIG92ZXIgdGhlc2UgZGlyZWN0b3JpZXMuIEVuYWJsaW5nIHRoaXMKKyMgb3B0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBmZWVkaW5nIGRveHlnZW4gYSBodWdlIGFtb3VudCBvZiBzb3VyY2UgZmlsZXMsIHdoZXJlCisjIHB1dHRpbmcgYWxsIGdlbmVyYXRlZCBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd291bGQgb3RoZXJ3aXNlIGNhdXNlcworIyBwZXJmb3JtYW5jZSBwcm9ibGVtcyBmb3IgdGhlIGZpbGUgc3lzdGVtLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0NSRUFURV9TVUJESVJTICAgICAgICAgPSBZRVMKKworIyBUaGUgT1VUUFVUX0xBTkdVQUdFIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGxhbmd1YWdlIGluIHdoaWNoIGFsbAorIyBkb2N1bWVudGF0aW9uIGdlbmVyYXRlZCBieSBkb3h5Z2VuIGlzIHdyaXR0ZW4uIERveHlnZW4gd2lsbCB1c2UgdGhpcworIyBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhbGwgY29uc3RhbnQgb3V0cHV0IGluIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEFmcmlrYWFucywgQXJhYmljLCBBcm1lbmlhbiwgQnJhemlsaWFuLCBDYXRhbGFuLCBDaGluZXNlLAorIyBDaGluZXNlLVRyYWRpdGlvbmFsLCBDcm9hdGlhbiwgQ3plY2gsIERhbmlzaCwgRHV0Y2gsIEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpLAorIyBFc3BlcmFudG8sIEZhcnNpIChQZXJzaWFuKSwgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBIdW5nYXJpYW4sCisjIEluZG9uZXNpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCBKYXBhbmVzZS1lbiAoSmFwYW5lc2Ugd2l0aCBFbmdsaXNoIG1lc3NhZ2VzKSwKKyMgS29yZWFuLCBLb3JlYW4tZW4gKEtvcmVhbiB3aXRoIEVuZ2xpc2ggbWVzc2FnZXMpLCBMYXR2aWFuLCBMaXRodWFuaWFuLAorIyBNYWNlZG9uaWFuLCBOb3J3ZWdpYW4sIFBlcnNpYW4gKEZhcnNpKSwgUG9saXNoLCBQb3J0dWd1ZXNlLCBSb21hbmlhbiwgUnVzc2lhbiwKKyMgU2VyYmlhbiwgU2VyYmlhbi1DeXJpbGxpYywgU2xvdmFrLCBTbG92ZW5lLCBTcGFuaXNoLCBTd2VkaXNoLCBUdXJraXNoLAorIyBVa3JhaW5pYW4gYW5kIFZpZXRuYW1lc2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBFbmdsaXNoLgorCitPVVRQVVRfTEFOR1VBR0UgICAgICAgID0gRW5nbGlzaAorCisjIElmIHRoZSBCUklFRl9NRU1CRVJfREVTQyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBicmllZiBtZW1iZXIKKyMgZGVzY3JpcHRpb25zIGFmdGVyIHRoZSBtZW1iZXJzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgZmlsZSBhbmQgY2xhc3MKKyMgZG9jdW1lbnRhdGlvbiAoc2ltaWxhciB0byBKYXZhZG9jKS4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworCisjIElmIHRoZSBSRVBFQVRfQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24KKyMKKyMgTm90ZTogSWYgYm90aCBISURFX1VORE9DX01FTUJFUlMgYW5kIEJSSUVGX01FTUJFUl9ERVNDIGFyZSBzZXQgdG8gTk8sIHRoZQorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKKworIyBUaGlzIHRhZyBpbXBsZW1lbnRzIGEgcXVhc2ktaW50ZWxsaWdlbnQgYnJpZWYgZGVzY3JpcHRpb24gYWJicmV2aWF0b3IgdGhhdCBpcworIyB1c2VkIHRvIGZvcm0gdGhlIHRleHQgaW4gdmFyaW91cyBsaXN0aW5ncy4gRWFjaCBzdHJpbmcgaW4gdGhpcyBsaXN0LCBpZiBmb3VuZAorIyBhcyB0aGUgbGVhZGluZyB0ZXh0IG9mIHRoZSBicmllZiBkZXNjcmlwdGlvbiwgd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSB0ZXh0CisjIGFuZCB0aGUgcmVzdWx0LCBhZnRlciBwcm9jZXNzaW5nIHRoZSB3aG9sZSBsaXN0LCBpcyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQKKyMgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gSWYgbGVmdCBibGFuaywgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgKCRuYW1lIGlzIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZgorIyB0aGUgZW50aXR5KTpUaGUgJG5hbWUgY2xhc3MsIFRoZSAkbmFtZSB3aWRnZXQsIFRoZSAkbmFtZSBmaWxlLCBpcywgcHJvdmlkZXMsCisjIHNwZWNpZmllcywgY29udGFpbnMsIHJlcHJlc2VudHMsIGEsIGFuIGFuZCB0aGUuCisKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAiVGhlICRuYW1lIGNsYXNzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSAkbmFtZSB3aWRnZXQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRuYW1lIGZpbGUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKworIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRldGFpbGVkIHNlY3Rpb24gZXZlbiBpZiB0aGVyZSBpcyBvbmx5IGEgYnJpZWYKKyMgZGVzY3JpcHRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsCisjIGluaGVyaXRlZCBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZQorIyBtZW1iZXJzIHdlcmUgb3JkaW5hcnkgY2xhc3MgbWVtYmVycy4gQ29uc3RydWN0b3JzLCBkZXN0cnVjdG9ycyBhbmQgYXNzaWdubWVudAorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8KKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBwcmVwZW5kIHRoZSBmdWxsIHBhdGgKKyMgYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0IHRvIE5PIHRoZQorIyBzaG9ydGVzdCBwYXRoIHRoYXQgbWFrZXMgdGhlIGZpbGUgbmFtZSB1bmlxdWUgd2lsbCBiZSB1c2VkCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0ZVTExfUEFUSF9OQU1FUyAgICAgICAgPSBZRVMKKworIyBUaGUgU1RSSVBfRlJPTV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZSBwYXRoLgorIyBTdHJpcHBpbmcgaXMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kCisjIHBhcnQgb2YgdGhlIHBhdGguIFRoZSB0YWcgY2FuIGJlIHVzZWQgdG8gc2hvdyByZWxhdGl2ZSBwYXRocyBpbiB0aGUgZmlsZSBsaXN0LgorIyBJZiBsZWZ0IGJsYW5rIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCBkb3h5Z2VuIGlzIHJ1biBpcyB1c2VkIGFzIHRoZSBwYXRoIHRvCisjIHN0cmlwLgorIworIyBOb3RlIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGFic29sdXRlIHBhdGhzIGhlcmUsIGJ1dCBhbHNvIHJlbGF0aXZlIHBhdGhzLCB3aGljaAorIyB3aWxsIGJlIHJlbGF0aXZlIGZyb20gdGhlIGRpcmVjdG9yeSB3aGVyZSBkb3h5Z2VuIGlzIHN0YXJ0ZWQuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBGVUxMX1BBVEhfTkFNRVMgaXMgc2V0IHRvIFlFUy4KKworU1RSSVBfRlJPTV9QQVRIICAgICAgICA9IEBhYnNfdG9wX3NyY2RpckAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEBhYnNfdG9wX2J1aWxkZGlyQAorCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIHRoZQorIyBwYXRoIG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIGNsYXNzLCB3aGljaCB0ZWxscyB0aGUgcmVhZGVyIHdoaWNoCisjIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIGEgY2xhc3MuIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZgorIyB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyB1c2VkLiBPdGhlcndpc2Ugb25lIHNob3VsZAorIyBzcGVjaWZ5IHRoZSBsaXN0IG9mIGluY2x1ZGUgcGF0aHMgdGhhdCBhcmUgbm9ybWFsbHkgcGFzc2VkIHRvIHRoZSBjb21waWxlcgorIyB1c2luZyB0aGUgLUkgZmxhZy4KKworU1RSSVBfRlJPTV9JTkNfUEFUSCAgICA9IEBhYnNfdG9wX3NyY2RpckAKKworIyBJZiB0aGUgU0hPUlRfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtdWNoIHNob3J0ZXIgKGJ1dAorIyBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMgZG9lc24ndAorIyBzdXBwb3J0IGxvbmcgbmFtZXMgbGlrZSBvbiBET1MsIE1hYywgb3IgQ0QtUk9NLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NIT1JUX05BTUVTICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBKQVZBRE9DX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlCisjIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YWRvYy1zdHlsZSBjb21tZW50IGFzIHRoZSBicmllZgorIyBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgSmF2YWRvYy1zdHlsZSB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC0KKyMgc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IEBicmllZiBjb21tYW5kIGZvciBhIGJyaWVmCisjIGRlc2NyaXB0aW9uLikKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gWUVTCisKKyMgSWYgdGhlIFFUX0FVVE9CUklFRiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0CisjIGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmCisjIHNldCB0byBOTywgdGhlIFF0LXN0eWxlIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSByZWd1bGFyIFF0LXN0eWxlIGNvbW1lbnRzICh0aHVzCisjIHJlcXVpcmluZyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUVRfQVVUT0JSSUVGICAgICAgICAgICA9IE5PCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgZG94eWdlbiB0cmVhdCBhCisjIG11bHRpLWxpbmUgQysrIHNwZWNpYWwgY29tbWVudCBibG9jayAoaS5lLiBhIGJsb2NrIG9mIC8vISBvciAvLy8gY29tbWVudHMpIGFzCisjIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVGhlIG5ldyBkZWZhdWx0IGlzCisjIHRvIHRyZWF0IGEgbXVsdGktbGluZSBDKysgY29tbWVudCBibG9jayBhcyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBTZXQgdGhpcworIyB0YWcgdG8gWUVTIGlmIHlvdSBwcmVmZXIgdGhlIG9sZCBiZWhhdmlvciBpbnN0ZWFkLgorIworIyBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIHRhZyB0byBZRVMgYWxzbyBtZWFucyB0aGF0IHJhdGlvbmFsIHJvc2UgY29tbWVudHMgYXJlCisjIG5vdCByZWNvZ25pemVkIGFueSBtb3JlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworCisjIElmIHRoZSBJTkhFUklUX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBhbiB1bmRvY3VtZW50ZWQgbWVtYmVyIGluaGVyaXRzIHRoZQorIyBkb2N1bWVudGF0aW9uIGZyb20gYW55IGRvY3VtZW50ZWQgbWVtYmVyIHRoYXQgaXQgcmUtaW1wbGVtZW50cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UgYQorIyBuZXcgcGFnZSBmb3IgZWFjaCBtZW1iZXIuIElmIHNldCB0byBOTywgdGhlIGRvY3VtZW50YXRpb24gb2YgYSBtZW1iZXIgd2lsbCBiZQorIyBwYXJ0IG9mIHRoZSBmaWxlL2NsYXNzL25hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIGl0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NFUEFSQVRFX01FTUJFUl9QQUdFUyAgPSBOTworCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLiBEb3h5Z2VuCisjIHVzZXMgdGhpcyB2YWx1ZSB0byByZXBsYWNlIHRhYnMgYnkgc3BhY2VzIGluIGNvZGUgZnJhZ21lbnRzLgorIyBNaW5pbXVtIHZhbHVlOiAxLCBtYXhpbXVtIHZhbHVlOiAxNiwgZGVmYXVsdCB2YWx1ZTogNC4KKworVEFCX1NJWkUgICAgICAgICAgICAgICA9IDQKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGFsaWFzZXMgdGhhdCBhY3QgYXMgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybToKKyMgbmFtZT12YWx1ZQorIyBGb3IgZXhhbXBsZSBhZGRpbmcKKyMgInNpZGVlZmZlY3Q9QHBhciBTaWRlIEVmZmVjdHM6XG4iCisjIHdpbGwgYWxsb3cgeW91IHRvIHB1dCB0aGUgY29tbWFuZCBcc2lkZWVmZmVjdCAob3IgQHNpZGVlZmZlY3QpIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHVzZXItZGVmaW5lZCBwYXJhZ3JhcGggd2l0aCBoZWFkaW5nCisjICJTaWRlIEVmZmVjdHM6Ii4gWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQKKyMgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPQorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2Ygd29yZC1rZXl3b3JkIG1hcHBpbmdzIChUQ0wgb25seSkuCisjIEEgbWFwcGluZyBoYXMgdGhlIGZvcm0gIm5hbWU9dmFsdWUiLiBGb3IgZXhhbXBsZSBhZGRpbmcgImNsYXNzPWl0Y2w6OmNsYXNzIgorIyB3aWxsIGFsbG93IHlvdSB0byB1c2UgdGhlIGNvbW1hbmQgY2xhc3MgaW4gdGhlIGl0Y2w6OmNsYXNzIG1lYW5pbmcuCisKK1RDTF9TVUJTVCAgICAgICAgICAgICAgPQorCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0ZPUl9DIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEMgc291cmNlcworIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBDLiBGb3IKKyMgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IG9mIGFsbAorIyBtZW1iZXJzIHdpbGwgYmUgb21pdHRlZCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9GT1JfQyAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBvcgorIyBQeXRob24gc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkCisjIGZvciB0aGF0IGxhbmd1YWdlLiBGb3IgaW5zdGFuY2UsIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsCisjIHF1YWxpZmllZCBzY29wZXMgd2lsbCBsb29rIGRpZmZlcmVudCwgZXRjLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworCisjIFNldCB0aGUgT1BUSU1JWkVfRk9SX0ZPUlRSQU4gdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgRm9ydHJhbgorIyBzb3VyY2VzLiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyB0YWlsb3JlZCBmb3IgRm9ydHJhbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitPUFRJTUlaRV9GT1JfRk9SVFJBTiAgID0gTk8KKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9WSERMIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIFZIREwKKyMgc291cmNlcy4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgdGFpbG9yZWQgZm9yIFZIREwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworT1BUSU1JWkVfT1VUUFVUX1ZIREwgICA9IE5PCisKKyMgRG94eWdlbiBzZWxlY3RzIHRoZSBwYXJzZXIgdG8gdXNlIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlcyBpdAorIyBwYXJzZXMuIFdpdGggdGhpcyB0YWcgeW91IGNhbiBhc3NpZ24gd2hpY2ggcGFyc2VyIHRvIHVzZSBmb3IgYSBnaXZlbgorIyBleHRlbnNpb24uIERveHlnZW4gaGFzIGEgYnVpbHQtaW4gbWFwcGluZywgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgb3IgZXh0ZW5kIGl0CisjIHVzaW5nIHRoaXMgdGFnLiBUaGUgZm9ybWF0IGlzIGV4dD1sYW5ndWFnZSwgd2hlcmUgZXh0IGlzIGEgZmlsZSBleHRlbnNpb24sIGFuZAorIyBsYW5ndWFnZSBpcyBvbmUgb2YgdGhlIHBhcnNlcnMgc3VwcG9ydGVkIGJ5IGRveHlnZW46IElETCwgSmF2YSwgSmF2YXNjcmlwdCwKKyMgQyMsIEMsIEMrKywgRCwgUEhQLCBPYmplY3RpdmUtQywgUHl0aG9uLCBGb3J0cmFuLCBWSERMLiBGb3IgaW5zdGFuY2UgdG8gbWFrZQorIyBkb3h5Z2VuIHRyZWF0IC5pbmMgZmlsZXMgYXMgRm9ydHJhbiBmaWxlcyAoZGVmYXVsdCBpcyBQSFApLCBhbmQgLmYgZmlsZXMgYXMgQworIyAoZGVmYXVsdCBpcyBGb3J0cmFuKSwgdXNlOiBpbmM9Rm9ydHJhbiBmPUMuCisjCisjIE5vdGUgRm9yIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9uIHlvdSBjYW4gdXNlIG5vX2V4dGVuc2lvbiBhcyBhIHBsYWNlaG9sZGVyLgorIworIyBOb3RlIHRoYXQgZm9yIGN1c3RvbSBleHRlbnNpb25zIHlvdSBhbHNvIG5lZWQgdG8gc2V0IEZJTEVfUEFUVEVSTlMgb3RoZXJ3aXNlCisjIHRoZSBmaWxlcyBhcmUgbm90IHJlYWQgYnkgZG94eWdlbi4KKworRVhURU5TSU9OX01BUFBJTkcgICAgICA9CisKKyMgSWYgdGhlIE1BUktET1dOX1NVUFBPUlQgdGFnIGlzIGVuYWJsZWQgdGhlbiBkb3h5Z2VuIHByZS1wcm9jZXNzZXMgYWxsIGNvbW1lbnRzCisjIGFjY29yZGluZyB0byB0aGUgTWFya2Rvd24gZm9ybWF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcmVhZGFibGUKKyMgZG9jdW1lbnRhdGlvbi4gU2VlIGh0dHA6Ly9kYXJpbmdmaXJlYmFsbC5uZXQvcHJvamVjdHMvbWFya2Rvd24vIGZvciBkZXRhaWxzLgorIyBUaGUgb3V0cHV0IG9mIG1hcmtkb3duIHByb2Nlc3NpbmcgaXMgZnVydGhlciBwcm9jZXNzZWQgYnkgZG94eWdlbiwgc28geW91IGNhbgorIyBtaXggZG94eWdlbiwgSFRNTCwgYW5kIFhNTCBjb21tYW5kcyB3aXRoIE1hcmtkb3duIGZvcm1hdHRpbmcuIERpc2FibGUgb25seSBpbgorIyBjYXNlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdGllcyBpc3N1ZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK01BUktET1dOX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBXaGVuIGVuYWJsZWQgZG94eWdlbiB0cmllcyB0byBsaW5rIHdvcmRzIHRoYXQgY29ycmVzcG9uZCB0byBkb2N1bWVudGVkCisjIGNsYXNzZXMsIG9yIG5hbWVzcGFjZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uLiBTdWNoIGEgbGluayBjYW4KKyMgYmUgcHJldmVudGVkIGluIGluZGl2aWR1YWwgY2FzZXMgYnkgYnkgcHV0dGluZyBhICUgc2lnbiBpbiBmcm9udCBvZiB0aGUgd29yZAorIyBvciBnbG9iYWxseSBieSBzZXR0aW5nIEFVVE9MSU5LX1NVUFBPUlQgdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0FVVE9MSU5LX1NVUFBPUlQgICAgICAgPSBZRVMKKworIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50CisjIHRvIGluY2x1ZGUgKGEgdGFnIGZpbGUgZm9yKSB0aGUgU1RMIHNvdXJjZXMgYXMgaW5wdXQsIHRoZW4geW91IHNob3VsZCBzZXQgdGhpcworIyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOworIyB2ZXJzdXMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZSB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBOTworCisjIElmIHlvdSB1c2UgTWljcm9zb2Z0J3MgQysrL0NMSSBsYW5ndWFnZSwgeW91IHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gWUVTIHRvCisjIGVuYWJsZSBwYXJzaW5nIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQ1BQX0NMSV9TVVBQT1JUICAgICAgICA9IE5PCisKKyMgU2V0IHRoZSBTSVBfU1VQUE9SVCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBzaXAgKHNlZToKKyMgaHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwL2ludHJvKSBzb3VyY2VzIG9ubHkuIERveHlnZW4KKyMgd2lsbCBwYXJzZSB0aGVtIGxpa2Ugbm9ybWFsIEMrKyBidXQgd2lsbCBhc3N1bWUgYWxsIGNsYXNzZXMgdXNlIHB1YmxpYyBpbnN0ZWFkCisjIG9mIHByaXZhdGUgaW5oZXJpdGFuY2Ugd2hlbiBubyBleHBsaWNpdCBwcm90ZWN0aW9uIGtleXdvcmQgaXMgcHJlc2VudC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSVBfU1VQUE9SVCAgICAgICAgICAgID0gTk8KKworIyBGb3IgTWljcm9zb2Z0J3MgSURMIHRoZXJlIGFyZSBwcm9wZ2V0IGFuZCBwcm9wcHV0IGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUKKyMgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBZRVMgd2lsbCBtYWtlCisjIGRveHlnZW4gdG8gcmVwbGFjZSB0aGUgZ2V0IGFuZCBzZXQgbWV0aG9kcyBieSBhIHByb3BlcnR5IGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBtZXRob2RzIGFyZSBpbmRlZWQgZ2V0dGluZyBvciBzZXR0aW5nIGEgc2ltcGxlCisjIHR5cGUuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB5b3Ugd2FudCB0byBzaG93IHRoZSBtZXRob2RzIGFueXdheSwgeW91CisjIHNob3VsZCBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0lETF9QUk9QRVJUWV9TVVBQT1JUICAgPSBZRVMKKworIyBJZiBtZW1iZXIgZ3JvdXBpbmcgaXMgdXNlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIERJU1RSSUJVVEVfR1JPVVBfRE9DCisjIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCByZXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0CisjIGFsbCBtZW1iZXJzIG9mIGEgZ3JvdXAgbXVzdCBiZSBkb2N1bWVudGVkIGV4cGxpY2l0bHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCisKKyMgU2V0IHRoZSBTVUJHUk9VUElORyB0YWcgdG8gWUVTIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgdGhlIHNhbWUgdHlwZQorIyAoZm9yIGluc3RhbmNlIGEgZ3JvdXAgb2YgcHVibGljIGZ1bmN0aW9ucykgdG8gYmUgcHV0IGFzIGEgc3ViZ3JvdXAgb2YgdGhhdAorIyB0eXBlIChlLmcuIHVuZGVyIHRoZSBQdWJsaWMgRnVuY3Rpb25zIHNlY3Rpb24pLiBTZXQgaXQgdG8gTk8gdG8gcHJldmVudAorIyBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgdGhlCisjIFxub3N1Ymdyb3VwaW5nIGNvbW1hbmQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NVQkdST1VQSU5HICAgICAgICAgICAgPSBZRVMKKworIyBXaGVuIHRoZSBJTkxJTkVfR1JPVVBFRF9DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBjbGFzc2VzLCBzdHJ1Y3RzIGFuZCB1bmlvbnMKKyMgYXJlIHNob3duIGluc2lkZSB0aGUgZ3JvdXAgaW4gd2hpY2ggdGhleSBhcmUgaW5jbHVkZWQgKGUuZy4gdXNpbmcgXGluZ3JvdXApCisjIGluc3RlYWQgb2Ygb24gYSBzZXBhcmF0ZSBwYWdlIChmb3IgSFRNTCBhbmQgTWFuIHBhZ2VzKSBvciBzZWN0aW9uIChmb3IgTGFUZVgKKyMgYW5kIFJURikuCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgZG9lcyBub3Qgd29yayBpbiBjb21iaW5hdGlvbiB3aXRoCisjIFNFUEFSQVRFX01FTUJFUl9QQUdFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitJTkxJTkVfR1JPVVBFRF9DTEFTU0VTID0gTk8KKworIyBXaGVuIHRoZSBJTkxJTkVfU0lNUExFX1NUUlVDVFMgdGFnIGlzIHNldCB0byBZRVMsIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMKKyMgd2l0aCBvbmx5IHB1YmxpYyBkYXRhIGZpZWxkcyBvciBzaW1wbGUgdHlwZWRlZiBmaWVsZHMgd2lsbCBiZSBzaG93biBpbmxpbmUgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHNjb3BlIGluIHdoaWNoIHRoZXkgYXJlIGRlZmluZWQgKGkuZS4gZmlsZSwKKyMgbmFtZXNwYWNlLCBvciBncm91cCBkb2N1bWVudGF0aW9uKSwgcHJvdmlkZWQgdGhpcyBzY29wZSBpcyBkb2N1bWVudGVkLiBJZiBzZXQKKyMgdG8gTk8sIHN0cnVjdHMsIGNsYXNzZXMsIGFuZCB1bmlvbnMgYXJlIHNob3duIG9uIGEgc2VwYXJhdGUgcGFnZSAoZm9yIEhUTUwgYW5kCisjIE1hbiBwYWdlcykgb3Igc2VjdGlvbiAoZm9yIExhVGVYIGFuZCBSVEYpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOTElORV9TSU1QTEVfU1RSVUNUUyAgPSBOTworCisjIFdoZW4gVFlQRURFRl9ISURFU19TVFJVQ1QgdGFnIGlzIGVuYWJsZWQsIGEgdHlwZWRlZiBvZiBhIHN0cnVjdCwgdW5pb24sIG9yCisjIGVudW0gaXMgZG9jdW1lbnRlZCBhcyBzdHJ1Y3QsIHVuaW9uLCBvciBlbnVtIHdpdGggdGhlIG5hbWUgb2YgdGhlIHR5cGVkZWYuIFNvCisjIHR5cGVkZWYgc3RydWN0IFR5cGVTIHt9IFR5cGVULCB3aWxsIGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHN0cnVjdAorIyB3aXRoIG5hbWUgVHlwZVQuIFdoZW4gZGlzYWJsZWQgdGhlIHR5cGVkZWYgd2lsbCBhcHBlYXIgYXMgYSBtZW1iZXIgb2YgYSBmaWxlLAorIyBuYW1lc3BhY2UsIG9yIGNsYXNzLiBBbmQgdGhlIHN0cnVjdCB3aWxsIGJlIG5hbWVkIFR5cGVTLiBUaGlzIGNhbiB0eXBpY2FsbHkgYmUKKyMgdXNlZnVsIGZvciBDIGNvZGUgaW4gY2FzZSB0aGUgY29kaW5nIGNvbnZlbnRpb24gZGljdGF0ZXMgdGhhdCBhbGwgY29tcG91bmQKKyMgdHlwZXMgYXJlIHR5cGVkZWYnZWQgYW5kIG9ubHkgdGhlIHR5cGVkZWYgaXMgcmVmZXJlbmNlZCwgbmV2ZXIgdGhlIHRhZyBuYW1lLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1RZUEVERUZfSElERVNfU1RSVUNUICAgPSBOTworCisjIFRoZSBzaXplIG9mIHRoZSBzeW1ib2wgbG9va3VwIGNhY2hlIGNhbiBiZSBzZXQgdXNpbmcgTE9PS1VQX0NBQ0hFX1NJWkUuIFRoaXMKKyMgY2FjaGUgaXMgdXNlZCB0byByZXNvbHZlIHN5bWJvbHMgZ2l2ZW4gdGhlaXIgbmFtZSBhbmQgc2NvcGUuIFNpbmNlIHRoaXMgY2FuIGJlCisjIGFuIGV4cGVuc2l2ZSBwcm9jZXNzIGFuZCBvZnRlbiB0aGUgc2FtZSBzeW1ib2wgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUKKyMgY29kZSwgZG94eWdlbiBrZWVwcyBhIGNhY2hlIG9mIHByZS1yZXNvbHZlZCBzeW1ib2xzLiBJZiB0aGUgY2FjaGUgaXMgdG9vIHNtYWxsCisjIGRveHlnZW4gd2lsbCBiZWNvbWUgc2xvd2VyLiBJZiB0aGUgY2FjaGUgaXMgdG9vIGxhcmdlLCBtZW1vcnkgaXMgd2FzdGVkLiBUaGUKKyMgY2FjaGUgc2l6ZSBpcyBnaXZlbiBieSB0aGlzIGZvcm11bGE6IDJeKDE2K0xPT0tVUF9DQUNIRV9TSVpFKS4gVGhlIHZhbGlkIHJhbmdlCisjIGlzIDAuLjksIHRoZSBkZWZhdWx0IGlzIDAsIGNvcnJlc3BvbmRpbmcgdG8gYSBjYWNoZSBzaXplIG9mIDJeMTY9NjU1MzYKKyMgc3ltYm9scy4gQXQgdGhlIGVuZCBvZiBhIHJ1biBkb3h5Z2VuIHdpbGwgcmVwb3J0IHRoZSBjYWNoZSB1c2FnZSBhbmQgc3VnZ2VzdAorIyB0aGUgb3B0aW1hbCBjYWNoZSBzaXplIGZyb20gYSBzcGVlZCBwb2ludCBvZiB2aWV3LgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiA5LCBkZWZhdWx0IHZhbHVlOiAwLgorCitMT09LVVBfQ0FDSEVfU0laRSAgICAgID0gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLiBQcml2YXRlCisjIGNsYXNzIG1lbWJlcnMgYW5kIHN0YXRpYyBmaWxlIG1lbWJlcnMgd2lsbCBiZSBoaWRkZW4gdW5sZXNzIHRoZQorIyBFWFRSQUNUX1BSSVZBVEUgcmVzcGVjdGl2ZWx5IEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgd2lsbCBhbHNvIGRpc2FibGUgdGhlIHdhcm5pbmdzIGFib3V0IHVuZG9jdW1lbnRlZCBtZW1iZXJzIHRoYXQgYXJlCisjIG5vcm1hbGx5IHByb2R1Y2VkIHdoZW4gV0FSTklOR1MgaXMgc2V0IHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9QUklWQVRFIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBwcml2YXRlIG1lbWJlcnMgb2YgYSBjbGFzcyB3aWxsCisjIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRSQUNUX1BBQ0tBR0UgdGFnIGlzIHNldCB0byBZRVMgYWxsIG1lbWJlcnMgd2l0aCBwYWNrYWdlIG9yIGludGVybmFsCisjIHNjb3BlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9QQUNLQUdFICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVFJBQ1RfU1RBVElDIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBzdGF0aWMgbWVtYmVycyBvZiBhIGZpbGUgd2lsbCBiZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfTE9DQUxfQ0xBU1NFUyB0YWcgaXMgc2V0IHRvIFlFUyBjbGFzc2VzIChhbmQgc3RydWN0cykgZGVmaW5lZAorIyBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gTk8KKyMgb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4gRG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0CisjIGZvciBKYXZhIHNvdXJjZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMKKworIyBUaGlzIGZsYWcgaXMgb25seSB1c2VmdWwgZm9yIE9iamVjdGl2ZS1DIGNvZGUuIFdoZW4gc2V0IHRvIFlFUyBsb2NhbCBtZXRob2RzLAorIyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2VjdGlvbiBidXQgbm90IGluIHRoZSBpbnRlcmZhY2UgYXJlCisjIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gTk8gb25seSBtZXRob2RzIGluIHRoZSBpbnRlcmZhY2UgYXJlCisjIGluY2x1ZGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0VYVFJBQ1RfTE9DQUxfTUVUSE9EUyAgPSBOTworCisjIElmIHRoaXMgZmxhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBhbm9ueW1vdXMgbmFtZXNwYWNlcyB3aWxsIGJlCisjIGV4dHJhY3RlZCBhbmQgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFzIGEgbmFtZXNwYWNlIGNhbGxlZAorIyAnYW5vbnltb3VzX25hbWVzcGFjZXtmaWxlfScsIHdoZXJlIGZpbGUgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBiYXNlIG5hbWUgb2YKKyMgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZS4gQnkgZGVmYXVsdCBhbm9ueW1vdXMgbmFtZXNwYWNlCisjIGFyZSBoaWRkZW4uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhUUkFDVF9BTk9OX05TUEFDRVMgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsCisjIHVuZG9jdW1lbnRlZCBtZW1iZXJzIGluc2lkZSBkb2N1bWVudGVkIGNsYXNzZXMgb3IgZmlsZXMuIElmIHNldCB0byBOTyB0aGVzZQorIyBtZW1iZXJzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLCBidXQgbm8gZG9jdW1lbnRhdGlvbgorIyBzZWN0aW9uIGlzIGdlbmVyYXRlZC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0hJREVfVU5ET0NfTUVNQkVSUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFsbAorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuIElmIHNldAorIyB0byBOTyB0aGVzZSBjbGFzc2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhcmlvdXMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbiBoYXMKKyMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGhpZGUgYWxsIGZyaWVuZAorIyAoY2xhc3N8c3RydWN0fHVuaW9uKSBkZWNsYXJhdGlvbnMuIElmIHNldCB0byBOTyB0aGVzZSBkZWNsYXJhdGlvbnMgd2lsbCBiZQorIyBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX0ZSSUVORF9DT01QT1VORFMgID0gTk8KKworIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBoaWRlIGFueQorIyBkb2N1bWVudGF0aW9uIGJsb2NrcyBmb3VuZCBpbnNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4gSWYgc2V0IHRvIE5PIHRoZXNlCisjIGJsb2NrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBmdW5jdGlvbidzIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYmxvY2suCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbiB0aGF0IGlzIHR5cGVkIGFmdGVyIGEKKyMgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gdGhlIGRvY3VtZW50YXRpb24KKyMgd2lsbCBiZSBleGNsdWRlZC4gU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDQVNFX1NFTlNFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gdGhlbiBkb3h5Z2VuIHdpbGwgb25seSBnZW5lcmF0ZSBmaWxlCisjIG5hbWVzIGluIGxvd2VyLWNhc2UgbGV0dGVycy4gSWYgc2V0IHRvIFlFUyB1cHBlci1jYXNlIGxldHRlcnMgYXJlIGFsc28KKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlcgorIyBpbiBjYXNlIGFuZCBpZiB5b3VyIGZpbGUgc3lzdGVtIHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgbmFtZXMuIFdpbmRvd3MKKyMgYW5kIE1hYyB1c2VycyBhcmUgYWR2aXNlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8gTk8uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBzeXN0ZW0gZGVwZW5kZW50LgorCitDQVNFX1NFTlNFX05BTUVTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IG1lbWJlcnMgd2l0aAorIyB0aGVpciBmdWxsIGNsYXNzIGFuZCBuYW1lc3BhY2Ugc2NvcGVzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTIHRoZQorIyBzY29wZSB3aWxsIGJlIGhpZGRlbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHB1dCBhIGxpc3Qgb2YKKyMgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZpbGUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfSU5DTFVERV9GSUxFUyAgICAgPSBZRVMKKworIyBJZiB0aGUgU0hPV19HUk9VUEVEX01FTUJfSU5DIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsIGFkZCBmb3IgZWFjaAorIyBncm91cGVkIG1lbWJlciBhbiBpbmNsdWRlIHN0YXRlbWVudCB0byB0aGUgZG9jdW1lbnRhdGlvbiwgdGVsbGluZyB0aGUgcmVhZGVyCisjIHdoaWNoIGZpbGUgdG8gaW5jbHVkZSBpbiBvcmRlciB0byB1c2UgdGhlIG1lbWJlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTSE9XX0dST1VQRURfTUVNQl9JTkMgID0gTk8KKworIyBJZiB0aGUgRk9SQ0VfTE9DQUxfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbGlzdCBpbmNsdWRlCisjIGZpbGVzIHdpdGggZG91YmxlIHF1b3RlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiByYXRoZXIgdGhhbiB3aXRoIHNoYXJwIGJyYWNrZXRzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0ZPUkNFX0xPQ0FMX0lOQ0xVREVTICAgPSBOTworCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgdGFnIFtpbmxpbmVdIGlzIGluc2VydGVkIGluIHRoZQorIyBkb2N1bWVudGF0aW9uIGZvciBpbmxpbmUgbWVtYmVycy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTT1JUX01FTUJFUl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlCisjIChkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBmaWxlIGFuZCBjbGFzcyBtZW1iZXJzIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlcgorIyBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gZGVjbGFyYXRpb24gb3JkZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NPUlRfTUVNQkVSX0RPQ1MgICAgICAgPSBZRVMKKworIyBJZiB0aGUgU09SVF9CUklFRl9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIHNvcnQgdGhlIGJyaWVmCisjIGRlc2NyaXB0aW9ucyBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyCisjIG5hbWUuIElmIHNldCB0byBOTyB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiBkZWNsYXJhdGlvbiBvcmRlci4gTm90ZSB0aGF0CisjIHRoaXMgd2lsbCBhbHNvIGluZmx1ZW5jZSB0aGUgb3JkZXIgb2YgdGhlIGNsYXNzZXMgaW4gdGhlIGNsYXNzIGxpc3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworU09SVF9CUklFRl9ET0NTICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSU19DVE9SU18xU1QgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUKKyMgKGJyaWVmIGFuZCBkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBjbGFzcyBtZW1iZXJzIHNvIHRoYXQgY29uc3RydWN0b3JzIGFuZAorIyBkZXN0cnVjdG9ycyBhcmUgbGlzdGVkIGZpcnN0LiBJZiBzZXQgdG8gTk8gdGhlIGNvbnN0cnVjdG9ycyB3aWxsIGFwcGVhciBpbiB0aGUKKyMgcmVzcGVjdGl2ZSBvcmRlcnMgZGVmaW5lZCBieSBTT1JUX0JSSUVGX0RPQ1MgYW5kIFNPUlRfTUVNQkVSX0RPQ1MuCisjIE5vdGU6IElmIFNPUlRfQlJJRUZfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZyBicmllZgorIyBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgTm90ZTogSWYgU09SVF9NRU1CRVJfRE9DUyBpcyBzZXQgdG8gTk8gdGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3Igc29ydGluZworIyBkZXRhaWxlZCBtZW1iZXIgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX01FTUJFUlNfQ1RPUlNfMVNUID0gTk8KKworIyBJZiB0aGUgU09SVF9HUk9VUF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSBoaWVyYXJjaHkKKyMgb2YgZ3JvdXAgbmFtZXMgaW50byBhbHBoYWJldGljYWwgb3JkZXIuIElmIHNldCB0byBOTyB0aGUgZ3JvdXAgbmFtZXMgd2lsbAorIyBhcHBlYXIgaW4gdGhlaXIgZGVmaW5lZCBvcmRlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0dST1VQX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU09SVF9CWV9TQ09QRV9OQU1FIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgY2xhc3MgbGlzdCB3aWxsIGJlIHNvcnRlZCBieQorIyBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8gTk8sIHRoZSBjbGFzcyBsaXN0IHdpbGwKKyMgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwgbm90IGluY2x1ZGluZyB0aGUgbmFtZXNwYWNlIHBhcnQuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuCisjIE5vdGU6IFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgY2xhc3MgbGlzdCwgbm90IHRvIHRoZSBhbHBoYWJldGljYWwKKyMgbGlzdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1JUX0JZX1NDT1BFX05BTUUgICAgID0gTk8KKworIyBJZiB0aGUgU1RSSUNUX1BST1RPX01BVENISU5HIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBkb3h5Z2VuIGZhaWxzIHRvIGRvIHByb3BlcgorIyB0eXBlIHJlc29sdXRpb24gb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiBpdCB3aWxsIHJlamVjdCBhIG1hdGNoIGJldHdlZW4KKyMgdGhlIHByb3RvdHlwZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMKKyMgb25seSBvbmUgY2FuZGlkYXRlIG9yIGl0IGlzIG9idmlvdXMgd2hpY2ggY2FuZGlkYXRlIHRvIGNob29zZSBieSBkb2luZyBhCisjIHNpbXBsZSBzdHJpbmcgbWF0Y2guIEJ5IGRpc2FibGluZyBTVFJJQ1RfUFJPVE9fTUFUQ0hJTkcgZG94eWdlbiB3aWxsIHN0aWxsCisjIGFjY2VwdCBhIG1hdGNoIGJldHdlZW4gcHJvdG90eXBlIGFuZCBpbXBsZW1lbnRhdGlvbiBpbiBzdWNoIGNhc2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK1NUUklDVF9QUk9UT19NQVRDSElORyAgPSBOTworCisjIFRoZSBHRU5FUkFURV9UT0RPTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlICggWUVTKSBvciBkaXNhYmxlICggTk8pIHRoZQorIyB0b2RvIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRvZG8gY29tbWFuZHMgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUKKyMgdGVzdCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0ZXN0IGNvbW1hbmRzIGluIHRoZQorIyBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoIFlFUykgb3IgZGlzYWJsZSAoIE5PKSB0aGUgYnVnCisjIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGJ1ZyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfQlVHTElTVCAgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9ERVBSRUNBVEVETElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlICggWUVTKSBvciBkaXNhYmxlICggTk8pCisjIHRoZSBkZXByZWNhdGVkIGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4KKyMgdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsIGRvY3VtZW50YXRpb24KKyMgc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgPHNlY3Rpb25fbGFiZWw+IC4uLiBcZW5kaWYgYW5kIFxjb25kIDxzZWN0aW9uX2xhYmVsPgorIyAuLi4gXGVuZGNvbmQgYmxvY2tzLgorCitFTkFCTEVEX1NFQ1RJT05TICAgICAgID0KKworIyBUaGUgTUFYX0lOSVRJQUxJWkVSX0xJTkVTIHRhZyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHRoZQorIyBpbml0aWFsIHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgbWFjcm8gLyBkZWZpbmUgY2FuIGhhdmUgZm9yIGl0IHRvIGFwcGVhciBpbiB0aGUKKyMgZG9jdW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemVyIGNvbnNpc3RzIG9mIG1vcmUgbGluZXMgdGhhbiBzcGVjaWZpZWQgaGVyZQorIyBpdCB3aWxsIGJlIGhpZGRlbi4gVXNlIGEgdmFsdWUgb2YgMCB0byBoaWRlIGluaXRpYWxpemVycyBjb21wbGV0ZWx5LiBUaGUKKyMgYXBwZWFyYW5jZSBvZiB0aGUgdmFsdWUgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIG1hY3JvcyAvIGRlZmluZXMgY2FuIGJlCisjIGNvbnRyb2xsZWQgdXNpbmcgXHNob3dpbml0aWFsaXplciBvciBcaGlkZWluaXRpYWxpemVyIGNvbW1hbmQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMDAwLCBkZWZhdWx0IHZhbHVlOiAzMC4KKworTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCisKKyMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkIGF0CisjIHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50YXRpb24gb2YgY2xhc3NlcyBhbmQgc3RydWN0cy4gSWYgc2V0IHRvIFlFUyB0aGUgbGlzdAorIyB3aWxsIG1lbnRpb24gdGhlIGZpbGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitTSE9XX1VTRURfRklMRVMgICAgICAgID0gWUVTCisKKyMgU2V0IHRoZSBTSE9XX0ZJTEVTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBGaWxlcyBwYWdlLiBUaGlzCisjIHdpbGwgcmVtb3ZlIHRoZSBGaWxlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUgRm9sZGVyIFRyZWUgVmlldworIyAoaWYgc3BlY2lmaWVkKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU0hPV19GSUxFUyAgICAgICAgICAgICA9IFlFUworCisjIFNldCB0aGUgU0hPV19OQU1FU1BBQ0VTIHRhZyB0byBOTyB0byBkaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBOYW1lc3BhY2VzCisjIHBhZ2UuIFRoaXMgd2lsbCByZW1vdmUgdGhlIE5hbWVzcGFjZXMgZW50cnkgZnJvbSB0aGUgUXVpY2sgSW5kZXggYW5kIGZyb20gdGhlCisjIEZvbGRlciBUcmVlIFZpZXcgKGlmIHNwZWNpZmllZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1NIT1dfTkFNRVNQQUNFUyAgICAgICAgPSBZRVMKKworIyBUaGUgRklMRV9WRVJTSU9OX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gb3Igc2NyaXB0IHRoYXQKKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tCisjIHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtKS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgcHJvZ3JhbSBieSBleGVjdXRpbmcgKHZpYQorIyBwb3BlbigpKSB0aGUgY29tbWFuZCBjb21tYW5kIGlucHV0LWZpbGUsIHdoZXJlIGNvbW1hbmQgaXMgdGhlIHZhbHVlIG9mIHRoZQorIyBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIGlucHV0LWZpbGUgaXMgdGhlIG5hbWUgb2YgYW4gaW5wdXQgZmlsZSBwcm92aWRlZAorIyBieSBkb3h5Z2VuLiBXaGF0ZXZlciB0aGUgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQgYXMgdGhlIGZpbGUKKyMgdmVyc2lvbi4gRm9yIGFuIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorCitGSUxFX1ZFUlNJT05fRklMVEVSICAgID0KKworIyBUaGUgTEFZT1VUX0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsYXlvdXQgZmlsZSB3aGljaCB3aWxsIGJlIHBhcnNlZAorIyBieSBkb3h5Z2VuLiBUaGUgbGF5b3V0IGZpbGUgY29udHJvbHMgdGhlIGdsb2JhbCBzdHJ1Y3R1cmUgb2YgdGhlIGdlbmVyYXRlZAorIyBvdXRwdXQgZmlsZXMgaW4gYW4gb3V0cHV0IGZvcm1hdCBpbmRlcGVuZGVudCB3YXkuIFRvIGNyZWF0ZSB0aGUgbGF5b3V0IGZpbGUKKyMgdGhhdCByZXByZXNlbnRzIGRveHlnZW4ncyBkZWZhdWx0cywgcnVuIGRveHlnZW4gd2l0aCB0aGUgLWwgb3B0aW9uLiBZb3UgY2FuCisjIG9wdGlvbmFsbHkgc3BlY2lmeSBhIGZpbGUgbmFtZSBhZnRlciB0aGUgb3B0aW9uLCBpZiBvbWl0dGVkIERveHlnZW5MYXlvdXQueG1sCisjIHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgbGF5b3V0IGZpbGUuCisjCisjIE5vdGUgdGhhdCBpZiB5b3UgcnVuIGRveHlnZW4gZnJvbSBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZmlsZSBjYWxsZWQKKyMgRG94eWdlbkxheW91dC54bWwsIGRveHlnZW4gd2lsbCBwYXJzZSBpdCBhdXRvbWF0aWNhbGx5IGV2ZW4gaWYgdGhlIExBWU9VVF9GSUxFCisjIHRhZyBpcyBsZWZ0IGVtcHR5LgorCitMQVlPVVRfRklMRSAgICAgICAgICAgID0KKworIyBUaGUgQ0lURV9CSUJfRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgYmliIGZpbGVzIGNvbnRhaW5pbmcKKyMgdGhlIHJlZmVyZW5jZSBkZWZpbml0aW9ucy4gVGhpcyBtdXN0IGJlIGEgbGlzdCBvZiAuYmliIGZpbGVzLiBUaGUgLmJpYgorIyBleHRlbnNpb24gaXMgYXV0b21hdGljYWxseSBhcHBlbmRlZCBpZiBvbWl0dGVkLiBUaGlzIHJlcXVpcmVzIHRoZSBiaWJ0ZXggdG9vbAorIyB0byBiZSBpbnN0YWxsZWQuIFNlZSBhbHNvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGZvciBtb3JlIGluZm8uCisjIEZvciBMYVRlWCB0aGUgc3R5bGUgb2YgdGhlIGJpYmxpb2dyYXBoeSBjYW4gYmUgY29udHJvbGxlZCB1c2luZworIyBMQVRFWF9CSUJfU1RZTEUuIFRvIHVzZSB0aGlzIGZlYXR1cmUgeW91IG5lZWQgYmlidGV4IGFuZCBwZXJsIGF2YWlsYWJsZSBpbiB0aGUKKyMgc2VhcmNoIHBhdGguIERvIG5vdCB1c2UgZmlsZSBuYW1lcyB3aXRoIHNwYWNlcywgYmlidGV4IGNhbm5vdCBoYW5kbGUgdGhlbS4gU2VlCisjIGFsc28gXGNpdGUgZm9yIGluZm8gaG93IHRvIGNyZWF0ZSByZWZlcmVuY2VzLgorCitDSVRFX0JJQl9GSUxFUyAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCB0bworIyBzdGFuZGFyZCBvdXRwdXQgYnkgZG94eWdlbi4gSWYgUVVJRVQgaXMgc2V0IHRvIFlFUyB0aGlzIGltcGxpZXMgdGhhdCB0aGUKKyMgbWVzc2FnZXMgYXJlIG9mZi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitRVUlFVCAgICAgICAgICAgICAgICAgID0gTk8KKworIyBUaGUgV0FSTklOR1MgdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgYXJlCisjIGdlbmVyYXRlZCB0byBzdGFuZGFyZCBlcnJvciAoIHN0ZGVycikgYnkgZG94eWdlbi4gSWYgV0FSTklOR1MgaXMgc2V0IHRvIFlFUworIyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgd2FybmluZ3MgYXJlIG9uLgorIworIyBUaXA6IFR1cm4gd2FybmluZ3Mgb24gd2hpbGUgd3JpdGluZyB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX1VORE9DVU1FTlRFRCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUKKyMgd2FybmluZ3MgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnCisjIHdpbGwgYXV0b21hdGljYWxseSBiZSBkaXNhYmxlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworV0FSTl9JRl9VTkRPQ1VNRU5URUQgICA9IFlFUworCisjIElmIHRoZSBXQVJOX0lGX0RPQ19FUlJPUiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzIGZvcgorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIHBhcmFtZXRlcnMKKyMgaW4gYSBkb2N1bWVudGVkIGZ1bmN0aW9uLCBvciBkb2N1bWVudGluZyBwYXJhbWV0ZXJzIHRoYXQgZG9uJ3QgZXhpc3Qgb3IgdXNpbmcKKyMgbWFya3VwIGNvbW1hbmRzIHdyb25nbHkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK1dBUk5fSUZfRE9DX0VSUk9SICAgICAgPSBZRVMKKworIyBUaGlzIFdBUk5fTk9fUEFSQU1ET0Mgb3B0aW9uIGNhbiBiZSBlbmFibGVkIHRvIGdldCB3YXJuaW5ncyBmb3IgZnVuY3Rpb25zIHRoYXQKKyMgYXJlIGRvY3VtZW50ZWQsIGJ1dCBoYXZlIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZWlyIHBhcmFtZXRlcnMgb3IgcmV0dXJuCisjIHZhbHVlLiBJZiBzZXQgdG8gTk8gZG94eWdlbiB3aWxsIG9ubHkgd2FybiBhYm91dCB3cm9uZyBvciBpbmNvbXBsZXRlIHBhcmFtZXRlcgorIyBkb2N1bWVudGF0aW9uLCBidXQgbm90IGFib3V0IHRoZSBhYnNlbmNlIG9mIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5fRk9STUFUIHRhZyBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBkb3h5Z2VuCisjIGNhbiBwcm9kdWNlLiBUaGUgc3RyaW5nIHNob3VsZCBjb250YWluIHRoZSAkZmlsZSwgJGxpbmUsIGFuZCAkdGV4dCB0YWdzLCB3aGljaAorIyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZSB3YXJuaW5nIG9yaWdpbmF0ZWQKKyMgYW5kIHRoZSB3YXJuaW5nIHRleHQuIE9wdGlvbmFsbHkgdGhlIGZvcm1hdCBtYXkgY29udGFpbiAkdmVyc2lvbiwgd2hpY2ggd2lsbAorIyBiZSByZXBsYWNlZCBieSB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSAoaWYgaXQgY291bGQgYmUgb2J0YWluZWQgdmlhCisjIEZJTEVfVkVSU0lPTl9GSUxURVIpCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiAkZmlsZTokbGluZTogJHRleHQuCisKK1dBUk5fRk9STUFUICAgICAgICAgICAgPSAiJGZpbGU6JGxpbmU6ICR0ZXh0IgorCisjIFRoZSBXQVJOX0xPR0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHRvIHdoaWNoIHdhcm5pbmcgYW5kIGVycm9yCisjIG1lc3NhZ2VzIHNob3VsZCBiZSB3cml0dGVuLiBJZiBsZWZ0IGJsYW5rIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byBzdGFuZGFyZAorIyBlcnJvciAoc3RkZXJyKS4KKworV0FSTl9MT0dGSUxFICAgICAgICAgICA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIElOUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KKyMgZG9jdW1lbnRlZCBzb3VyY2UgZmlsZXMuIFlvdSBtYXkgZW50ZXIgZmlsZSBuYW1lcyBsaWtlIG15ZmlsZS5jcHAgb3IKKyMgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL3NyYy9teXByb2plY3QuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB3aXRoCisjIHNwYWNlcy4KKyMgTm90ZTogSWYgdGhpcyB0YWcgaXMgZW1wdHkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNlYXJjaGVkLgorCitJTlBVVCAgICAgICAgICAgICAgICAgID0gQGFic190b3BfYnVpbGRkaXJAL3NyYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgQGFic190b3Bfc3JjZGlyQC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBAYWJzX3RvcF9zcmNkaXJAL2RvYworCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBvZiB0aGUgc291cmNlIGZpbGVzCisjIHRoYXQgZG94eWdlbiBwYXJzZXMuIEludGVybmFsbHkgZG94eWdlbiB1c2VzIHRoZSBVVEYtOCBlbmNvZGluZy4gRG94eWdlbiB1c2VzCisjIGxpYmljb252IChvciB0aGUgaWNvbnYgYnVpbHQgaW50byBsaWJjKSBmb3IgdGhlIHRyYW5zY29kaW5nLiBTZWUgdGhlIGxpYmljb252CisjIGRvY3VtZW50YXRpb24gKHNlZTogaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmljb252KSBmb3IgdGhlIGxpc3Qgb2YKKyMgcG9zc2libGUgZW5jb2RpbmdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogVVRGLTguCisKK0lOUFVUX0VOQ09ESU5HICAgICAgICAgPSBVVEYtOAorCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUKKyMgRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyAobGlrZSAqLmNwcCBhbmQKKyMgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IGJsYW5rIHRoZQorIyBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIHRlc3RlZDoqLmMsICouY2MsICouY3h4LCAqLmNwcCwgKi5jKyssICouamF2YSwgKi5paSwKKyMgKi5peHgsICouaXBwLCAqLmkrKywgKi5pbmwsICouaWRsLCAqLmRkbCwgKi5vZGwsICouaCwgKi5oaCwgKi5oeHgsICouaHBwLAorIyAqLmgrKywgKi5jcywgKi5kLCAqLnBocCwgKi5waHA0LCAqLnBocDUsICoucGh0bWwsICouaW5jLCAqLm0sICoubWFya2Rvd24sCisjICoubWQsICoubW0sICouZG94LCAqLnB5LCAqLmY5MCwgKi5mLCAqLmZvciwgKi50Y2wsICoudmhkLCAqLnZoZGwsICoudWNmLAorIyAqLnFzZiwgKi5hcyBhbmQgKi5qcy4KKworRklMRV9QQVRURVJOUyAgICAgICAgICA9ICouYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5jYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5jeHggXAorICAgICAgICAgICAgICAgICAgICAgICAgICouY3BwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmMrKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmphdmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaWkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaXh4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmlwcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5pKysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaW5sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaGggXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaHh4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmhwcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5oKysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouaWRsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLm9kbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5jcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5waHAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoucGhwMyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5pbmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICoubSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5tbSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5kb3ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICoucHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZjkwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLmYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICouZm9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLnZoZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi52aGRsCisKKyMgVGhlIFJFQ1VSU0lWRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCBzdWJkaXJlY3RvcmllcyBzaG91bGQKKyMgYmUgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIGFzIHdlbGwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUkVDVVJTSVZFICAgICAgICAgICAgICA9IFlFUworCisjIFRoZSBFWENMVURFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZQorIyBleGNsdWRlZCBmcm9tIHRoZSBJTlBVVCBzb3VyY2UgZmlsZXMuIFRoaXMgd2F5IHlvdSBjYW4gZWFzaWx5IGV4Y2x1ZGUgYQorIyBzdWJkaXJlY3RvcnkgZnJvbSBhIGRpcmVjdG9yeSB0cmVlIHdob3NlIHJvb3QgaXMgc3BlY2lmaWVkIHdpdGggdGhlIElOUFVUIHRhZy4KKyMKKyMgTm90ZSB0aGF0IHJlbGF0aXZlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggZG94eWdlbiBpcworIyBydW4uCisKK0VYQ0xVREUgICAgICAgICAgICAgICAgPQorCisjIFRoZSBFWENMVURFX1NZTUxJTktTIHRhZyBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgd2hldGhlciBvciBub3QgZmlsZXMgb3IKKyMgZGlyZWN0b3JpZXMgdGhhdCBhcmUgc3ltYm9saWMgbGlua3MgKGEgVW5peCBmaWxlIHN5c3RlbSBmZWF0dXJlKSBhcmUgZXhjbHVkZWQKKyMgZnJvbSB0aGUgaW5wdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZQorIyBFWENMVURFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm5zIHRvIGV4Y2x1ZGUKKyMgY2VydGFpbiBmaWxlcyBmcm9tIHRob3NlIGRpcmVjdG9yaWVzLgorIworIyBOb3RlIHRoYXQgdGhlIHdpbGRjYXJkcyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaWxlIHdpdGggYWJzb2x1dGUgcGF0aCwgc28gdG8KKyMgZXhjbHVkZSBhbGwgdGVzdCBkaXJlY3RvcmllcyBmb3IgZXhhbXBsZSB1c2UgdGhlIHBhdHRlcm4gKi90ZXN0LyoKKworRVhDTFVERV9QQVRURVJOUyAgICAgICA9CisKKyMgVGhlIEVYQ0xVREVfU1lNQk9MUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBzeW1ib2wgbmFtZXMKKyMgKG5hbWVzcGFjZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywgZXRjLikgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyMgb3V0cHV0LiBUaGUgc3ltYm9sIG5hbWUgY2FuIGJlIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUsIGEgd29yZCwgb3IgaWYgdGhlCisjIHdpbGRjYXJkICogaXMgdXNlZCwgYSBzdWJzdHJpbmcuIEV4YW1wbGVzOiBBTmFtZXNwYWNlLCBBQ2xhc3MsCisjIEFDbGFzczo6QU5hbWVzcGFjZSwgQU5hbWVzcGFjZTo6KlRlc3QKKyMKKyMgTm90ZSB0aGF0IHRoZSB3aWxkY2FyZHMgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvCisjIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfU1lNQk9MUyAgICAgICAgPQorCisjIFRoZSBFWEFNUExFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKyMgdGhhdCBjb250YWluIGV4YW1wbGUgY29kZSBmcmFnbWVudHMgdGhhdCBhcmUgaW5jbHVkZWQgKHNlZSB0aGUgXGluY2x1ZGUKKyMgY29tbWFuZCkuCisKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPQorCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgRVhBTVBMRV9QQVRIIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlCisjIEVYQU1QTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybiAobGlrZSAqLmNwcCBhbmQKKyMgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IGJsYW5rIGFsbAorIyBmaWxlcyBhcmUgaW5jbHVkZWQuCisKK0VYQU1QTEVfUEFUVEVSTlMgICAgICAgPSAqCisKKyMgSWYgdGhlIEVYQU1QTEVfUkVDVVJTSVZFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gc3ViZGlyZWN0b3JpZXMgd2lsbCBiZQorIyBzZWFyY2hlZCBmb3IgaW5wdXQgZmlsZXMgdG8gYmUgdXNlZCB3aXRoIHRoZSBcaW5jbHVkZSBvciBcZG9udGluY2x1ZGUgY29tbWFuZHMKKyMgaXJyZXNwZWN0aXZlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgUkVDVVJTSVZFIHRhZy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitFWEFNUExFX1JFQ1VSU0lWRSAgICAgID0gTk8KKworIyBUaGUgSU1BR0VfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlcyBvciBkaXJlY3RvcmllcworIyB0aGF0IGNvbnRhaW4gaW1hZ2VzIHRoYXQgYXJlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlCisjIFxpbWFnZSBjb21tYW5kKS4KKworSU1BR0VfUEFUSCAgICAgICAgICAgICA9CisKKyMgVGhlIElOUFVUX0ZJTFRFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHByb2dyYW0gdGhhdCBkb3h5Z2VuIHNob3VsZAorIyBpbnZva2UgdG8gZmlsdGVyIGZvciBlYWNoIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIGZpbHRlciBwcm9ncmFtCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kOgorIworIyA8ZmlsdGVyPiA8aW5wdXQtZmlsZT4KKyMKKyMgd2hlcmUgPGZpbHRlcj4gaXMgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVF9GSUxURVIgdGFnLCBhbmQgPGlucHV0LWZpbGU+IGlzIHRoZQorIyBuYW1lIG9mIGFuIGlucHV0IGZpbGUuIERveHlnZW4gd2lsbCB0aGVuIHVzZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZpbHRlcgorIyBwcm9ncmFtIHdyaXRlcyB0byBzdGFuZGFyZCBvdXRwdXQuIElmIEZJTFRFUl9QQVRURVJOUyBpcyBzcGVjaWZpZWQsIHRoaXMgdGFnCisjIHdpbGwgYmUgaWdub3JlZC4KKyMKKyMgTm90ZSB0aGF0IHRoZSBmaWx0ZXIgbXVzdCBub3QgYWRkIG9yIHJlbW92ZSBsaW5lczsgaXQgaXMgYXBwbGllZCBiZWZvcmUgdGhlCisjIGNvZGUgaXMgc2Nhbm5lZCwgYnV0IG5vdCB3aGVuIHRoZSBvdXRwdXQgY29kZSBpcyBnZW5lcmF0ZWQuIElmIGxpbmVzIGFyZSBhZGRlZAorIyBvciByZW1vdmVkLCB0aGUgYW5jaG9ycyB3aWxsIG5vdCBiZSBwbGFjZWQgY29ycmVjdGx5LgorCitJTlBVVF9GSUxURVIgICAgICAgICAgID0KKworIyBUaGUgRklMVEVSX1BBVFRFUk5TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbHRlcnMgb24gYSBwZXIgZmlsZSBwYXR0ZXJuCisjIGJhc2lzLiBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUKKyMgZmlsdGVyIGlmIHRoZXJlIGlzIGEgbWF0Y2guIFRoZSBmaWx0ZXJzIGFyZSBhIGxpc3Qgb2YgdGhlIGZvcm06IHBhdHRlcm49ZmlsdGVyCisjIChsaWtlICouY3BwPW15X2NwcF9maWx0ZXIpLiBTZWUgSU5QVVRfRklMVEVSIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdworIyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiB0aGUgRklMVEVSX1BBVFRFUk5TIHRhZyBpcyBlbXB0eSBvciBpZiBub25lIG9mIHRoZQorIyBwYXR0ZXJucyBtYXRjaCB0aGUgZmlsZSBuYW1lLCBJTlBVVF9GSUxURVIgaXMgYXBwbGllZC4KKworRklMVEVSX1BBVFRFUk5TICAgICAgICA9CisKKyMgSWYgdGhlIEZJTFRFUl9TT1VSQ0VfRklMRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBpbnB1dCBmaWx0ZXIgKGlmIHNldCB1c2luZworIyBJTlBVVF9GSUxURVIgKSB3aWxsIGFsc28gYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGlucHV0IGZpbGVzIHRoYXQgYXJlIHVzZWQgZm9yCisjIHByb2R1Y2luZyB0aGUgc291cmNlIGZpbGVzIHRvIGJyb3dzZSAoaS5lLiB3aGVuIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworCisjIFRoZSBGSUxURVJfU09VUkNFX1BBVFRFUk5TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHNvdXJjZSBmaWx0ZXJzIHBlciBmaWxlCisjIHBhdHRlcm4uIEEgcGF0dGVybiB3aWxsIG92ZXJyaWRlIHRoZSBzZXR0aW5nIGZvciBGSUxURVJfUEFUVEVSTiAoaWYgYW55KSBhbmQKKyMgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxlIHNvdXJjZSBmaWx0ZXJpbmcgZm9yIGEgc3BlY2lmaWMgcGF0dGVybiB1c2luZworIyAqLmV4dD0gKHNvIHdpdGhvdXQgbmFtaW5nIGEgZmlsdGVyKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEZJTFRFUl9TT1VSQ0VfRklMRVMgaXMgc2V0IHRvIFlFUy4KKworRklMVEVSX1NPVVJDRV9QQVRURVJOUyA9CisKKyMgSWYgdGhlIFVTRV9NREZJTEVfQVNfTUFJTlBBR0UgdGFnIHJlZmVycyB0byB0aGUgbmFtZSBvZiBhIG1hcmtkb3duIGZpbGUgdGhhdAorIyBpcyBwYXJ0IG9mIHRoZSBpbnB1dCwgaXRzIGNvbnRlbnRzIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSBtYWluIHBhZ2UKKyMgKGluZGV4Lmh0bWwpLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGhhdmUgYSBwcm9qZWN0IG9uIGZvciBpbnN0YW5jZSBHaXRIdWIKKyMgYW5kIHdhbnQgdG8gcmV1c2UgdGhlIGludHJvZHVjdGlvbiBwYWdlIGFsc28gZm9yIHRoZSBkb3h5Z2VuIG91dHB1dC4KKworVVNFX01ERklMRV9BU19NQUlOUEFHRSA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gc291cmNlIGJyb3dzaW5nCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIFNPVVJDRV9CUk9XU0VSIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gYSBsaXN0IG9mIHNvdXJjZSBmaWxlcyB3aWxsIGJlCisjIGdlbmVyYXRlZC4gRG9jdW1lbnRlZCBlbnRpdGllcyB3aWxsIGJlIGNyb3NzLXJlZmVyZW5jZWQgd2l0aCB0aGVzZSBzb3VyY2VzLgorIworIyBOb3RlOiBUbyBnZXQgcmlkIG9mIGFsbCBzb3VyY2UgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCwgbWFrZSBzdXJlIHRoYXQKKyMgYWxzbyBWRVJCQVRJTV9IRUFERVJTIGlzIHNldCB0byBOTy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitTT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gTk8KKworIyBTZXR0aW5nIHRoZSBJTkxJTkVfU09VUkNFUyB0YWcgdG8gWUVTIHdpbGwgaW5jbHVkZSB0aGUgYm9keSBvZiBmdW5jdGlvbnMsCisjIGNsYXNzZXMgYW5kIGVudW1zIGRpcmVjdGx5IGludG8gdGhlIGRvY3VtZW50YXRpb24uCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgU1RSSVBfQ09ERV9DT01NRU5UUyB0YWcgdG8gWUVTIHdpbGwgaW5zdHJ1Y3QgZG94eWdlbiB0byBoaWRlIGFueQorIyBzcGVjaWFsIGNvbW1lbnQgYmxvY2tzIGZyb20gZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIGZyYWdtZW50cy4gTm9ybWFsIEMsIEMrKyBhbmQKKyMgRm9ydHJhbiBjb21tZW50cyB3aWxsIGFsd2F5cyByZW1haW4gdmlzaWJsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZAorIyBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBmdW5jdGlvbnMgcmVmZXJlbmNpbmcgaXQgd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IE5PCisKKyMgSWYgdGhlIFJFRkVSRU5DRVNfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkIGZ1bmN0aW9uCisjIGFsbCBkb2N1bWVudGVkIGVudGl0aWVzIGNhbGxlZC91c2VkIGJ5IHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworUkVGRVJFTkNFU19SRUxBVElPTiAgICA9IE5PCisKKyMgSWYgdGhlIFJFRkVSRU5DRVNfTElOS19TT1VSQ0UgdGFnIGlzIHNldCB0byBZRVMgYW5kIFNPVVJDRV9CUk9XU0VSIHRhZyBpcyBzZXQKKyMgdG8gWUVTLCB0aGVuIHRoZSBoeXBlcmxpbmtzIGZyb20gZnVuY3Rpb25zIGluIFJFRkVSRU5DRVNfUkVMQVRJT04gYW5kCisjIFJFRkVSRU5DRURfQllfUkVMQVRJT04gbGlzdHMgd2lsbCBsaW5rIHRvIHRoZSBzb3VyY2UgY29kZS4gT3RoZXJ3aXNlIHRoZXkgd2lsbAorIyBsaW5rIHRvIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitSRUZFUkVOQ0VTX0xJTktfU09VUkNFID0gWUVTCisKKyMgSWYgU09VUkNFX1RPT0xUSVBTIGlzIGVuYWJsZWQgKHRoZSBkZWZhdWx0KSB0aGVuIGhvdmVyaW5nIGEgaHlwZXJsaW5rIGluIHRoZQorIyBzb3VyY2UgY29kZSB3aWxsIHNob3cgYSB0b29sdGlwIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHByb3RvdHlwZSwKKyMgYnJpZWYgZGVzY3JpcHRpb24gYW5kIGxpbmtzIHRvIHRoZSBkZWZpbml0aW9uIGFuZCBkb2N1bWVudGF0aW9uLiBTaW5jZSB0aGlzCisjIHdpbGwgbWFrZSB0aGUgSFRNTCBmaWxlIGxhcmdlciBhbmQgbG9hZGluZyBvZiBsYXJnZSBmaWxlcyBhIGJpdCBzbG93ZXIsIHlvdQorIyBjYW4gb3B0IHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUy4KKworU09VUkNFX1RPT0xUSVBTICAgICAgICA9IFlFUworCisjIElmIHRoZSBVU0VfSFRBR1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgcmVmZXJlbmNlcyB0byBzb3VyY2UgY29kZSB3aWxsCisjIHBvaW50IHRvIHRoZSBIVE1MIGdlbmVyYXRlZCBieSB0aGUgaHRhZ3MoMSkgdG9vbCBpbnN0ZWFkIG9mIGRveHlnZW4gYnVpbHQtaW4KKyMgc291cmNlIGJyb3dzZXIuIFRoZSBodGFncyB0b29sIGlzIHBhcnQgb2YgR05VJ3MgZ2xvYmFsIHNvdXJjZSB0YWdnaW5nIHN5c3RlbQorIyAoc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbG9iYWwvZ2xvYmFsLmh0bWwpLiBZb3Ugd2lsbCBuZWVkIHZlcnNpb24KKyMgNC44LjYgb3IgaGlnaGVyLgorIworIyBUbyB1c2UgaXQgZG8gdGhlIGZvbGxvd2luZzoKKyMgLSBJbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBnbG9iYWwKKyMgLSBFbmFibGUgU09VUkNFX0JST1dTRVIgYW5kIFVTRV9IVEFHUyBpbiB0aGUgY29uZmlnIGZpbGUKKyMgLSBNYWtlIHN1cmUgdGhlIElOUFVUIHBvaW50cyB0byB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUKKyMgLSBSdW4gZG94eWdlbiBhcyBub3JtYWwKKyMKKyMgRG94eWdlbiB3aWxsIGludm9rZSBodGFncyAoYW5kIHRoYXQgd2lsbCBpbiB0dXJuIGludm9rZSBndGFncyksIHNvIHRoZXNlCisjIHRvb2xzIG11c3QgYmUgYXZhaWxhYmxlIGZyb20gdGhlIGNvbW1hbmQgbGluZSAoaS5lLiBpbiB0aGUgc2VhcmNoIHBhdGgpLgorIworIyBUaGUgcmVzdWx0OiBpbnN0ZWFkIG9mIHRoZSBzb3VyY2UgYnJvd3NlciBnZW5lcmF0ZWQgYnkgZG94eWdlbiwgdGhlIGxpbmtzIHRvCisjIHNvdXJjZSBjb2RlIHdpbGwgbm93IHBvaW50IHRvIHRoZSBvdXRwdXQgb2YgaHRhZ3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMuCisKK1VTRV9IVEFHUyAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBWRVJCQVRJTV9IRUFERVJTIHRhZyBpcyBzZXQgdGhlIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIHZlcmJhdGltIGNvcHkgb2YgdGhlIGhlYWRlciBmaWxlIGZvciBlYWNoIGNsYXNzIGZvciB3aGljaCBhbiBpbmNsdWRlIGlzCisjIHNwZWNpZmllZC4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKyMgU2VlIGFsc286IFNlY3Rpb24gXGNsYXNzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitWRVJCQVRJTV9IRUFERVJTICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBBTFBIQUJFVElDQUxfSU5ERVggdGFnIGlzIHNldCB0byBZRVMsIGFuIGFscGhhYmV0aWNhbCBpbmRleCBvZiBhbGwKKyMgY29tcG91bmRzIHdpbGwgYmUgZ2VuZXJhdGVkLiBFbmFibGUgdGhpcyBpZiB0aGUgcHJvamVjdCBjb250YWlucyBhIGxvdCBvZgorIyBjbGFzc2VzLCBzdHJ1Y3RzLCB1bmlvbnMgb3IgaW50ZXJmYWNlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IFlFUworCisjIFRoZSBDT0xTX0lOX0FMUEhBX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbgorIyB3aGljaCB0aGUgYWxwaGFiZXRpY2FsIGluZGV4IGxpc3Qgd2lsbCBiZSBzcGxpdC4KKyMgTWluaW11bSB2YWx1ZTogMSwgbWF4aW11bSB2YWx1ZTogMjAsIGRlZmF1bHQgdmFsdWU6IDUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBBTFBIQUJFVElDQUxfSU5ERVggaXMgc2V0IHRvIFlFUy4KKworQ09MU19JTl9BTFBIQV9JTkRFWCAgICA9IDUKKworIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsIGNsYXNzZXMgd2lsbAorIyBiZSBwdXQgdW5kZXIgdGhlIHNhbWUgaGVhZGVyIGluIHRoZSBhbHBoYWJldGljYWwgaW5kZXguIFRoZSBJR05PUkVfUFJFRklYIHRhZworIyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJlZml4IChvciBhIGxpc3Qgb2YgcHJlZml4ZXMpIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKKyMgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEFMUEhBQkVUSUNBTF9JTkRFWCBpcyBzZXQgdG8gWUVTLgorCitJR05PUkVfUFJFRklYICAgICAgICAgID0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgSFRNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgSFRNTCBvdXRwdXQKKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfSFRNTCAgICAgICAgICA9IFlFUworCisjIFRoZSBIVE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBIVE1MIGRvY3Mgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IGh0bWwuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCisKKyMgVGhlIEhUTUxfRklMRV9FWFRFTlNJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvciBlYWNoCisjIGdlbmVyYXRlZCBIVE1MIHBhZ2UgKGZvciBleGFtcGxlOiAuaHRtLCAucGhwLCAuYXNwKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IC5odG1sLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKKworIyBUaGUgSFRNTF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB1c2VyLWRlZmluZWQgSFRNTCBoZWFkZXIgZmlsZSBmb3IKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgc3RhbmRhcmQgaGVhZGVyLgorIworIyBUbyBnZXQgdmFsaWQgSFRNTCB0aGUgaGVhZGVyIGZpbGUgdGhhdCBpbmNsdWRlcyBhbnkgc2NyaXB0cyBhbmQgc3R5bGUgc2hlZXRzCisjIHRoYXQgZG94eWdlbiBuZWVkcywgd2hpY2ggaXMgZGVwZW5kZW50IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNlZCAoZS5nLgorIyB0aGUgc2V0dGluZyBHRU5FUkFURV9UUkVFVklFVykuIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBzdGFydCB3aXRoIGEKKyMgZGVmYXVsdCBoZWFkZXIgdXNpbmcKKyMgZG94eWdlbiAtdyBodG1sIG5ld19oZWFkZXIuaHRtbCBuZXdfZm9vdGVyLmh0bWwgbmV3X3N0eWxlc2hlZXQuY3NzCisjIFlvdXJDb25maWdGaWxlCisjIGFuZCB0aGVuIG1vZGlmeSB0aGUgZmlsZSBuZXdfaGVhZGVyLmh0bWwuIFNlZSBhbHNvIHNlY3Rpb24gIkRveHlnZW4gdXNhZ2UiCisjIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgdGhlIGRlZmF1bHQgaGVhZGVyIHRoYXQgZG94eWdlbiBub3JtYWxseQorIyB1c2VzLgorIyBOb3RlOiBUaGUgaGVhZGVyIGlzIHN1YmplY3QgdG8gY2hhbmdlIHNvIHlvdSB0eXBpY2FsbHkgaGF2ZSB0byByZWdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IGhlYWRlciB3aGVuIHVwZ3JhZGluZyB0byBhIG5ld2VyIHZlcnNpb24gb2YgZG94eWdlbi4gRm9yIGEgZGVzY3JpcHRpb24KKyMgb2YgdGhlIHBvc3NpYmxlIG1hcmtlcnMgYW5kIGJsb2NrIG5hbWVzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9IRUFERVIgICAgICAgICAgICA9CisKKyMgVGhlIEhUTUxfRk9PVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIEhUTUwgZm9vdGVyIGZvciBlYWNoCisjIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZAorIyBmb290ZXIuIFNlZSBIVE1MX0hFQURFUiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgYSBkZWZhdWx0CisjIGZvb3RlciBhbmQgd2hhdCBzcGVjaWFsIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluc2lkZSB0aGUgZm9vdGVyLiBTZWUgYWxzbworIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IGZvb3RlcgorIyB0aGF0IGRveHlnZW4gbm9ybWFsbHkgdXNlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9GT09URVIgICAgICAgICAgICA9CisKKyMgVGhlIEhUTUxfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUKKyMgc2hlZXQgdGhhdCBpcyB1c2VkIGJ5IGVhY2ggSFRNTCBwYWdlLiBJdCBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlIGxvb2sgb2YKKyMgdGhlIEhUTUwgb3V0cHV0LiBJZiBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRlZmF1bHQgc3R5bGUgc2hlZXQuCisjIFNlZSBhbHNvIHNlY3Rpb24gIkRveHlnZW4gdXNhZ2UiIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2VuZXJhdGUgdGhlIHN0eWxlCisjIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIGluc3RlYWQgb2YgdGhpcyB0YWcsIGFzCisjIGl0IGlzIG1vcmUgcm9idXN0IGFuZCB0aGlzIHRhZyAoSFRNTF9TVFlMRVNIRUVUKSB3aWxsIGluIHRoZSBmdXR1cmUgYmVjb21lCisjIG9ic29sZXRlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1NUWUxFU0hFRVQgICAgICAgID0KKworIyBUaGUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIGFkZGl0aW9uYWwgdXNlci0KKyMgZGVmaW5lZCBjYXNjYWRpbmcgc3R5bGUgc2hlZXQgdGhhdCBpcyBpbmNsdWRlZCBhZnRlciB0aGUgc3RhbmRhcmQgc3R5bGUgc2hlZXRzCisjIGNyZWF0ZWQgYnkgZG94eWdlbi4gVXNpbmcgdGhpcyBvcHRpb24gb25lIGNhbiBvdmVycnVsZSBjZXJ0YWluIHN0eWxlIGFzcGVjdHMuCisjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgdXNpbmcgSFRNTF9TVFlMRVNIRUVUIHNpbmNlIGl0IGRvZXMgbm90IHJlcGxhY2UgdGhlCisjIHN0YW5kYXJkIHN0eWxlIHNoZWV0IGFuZCBpcyB0aGVyZWZvciBtb3JlIHJvYnVzdCBhZ2FpbnN0IGZ1dHVyZSB1cGRhdGVzLgorIyBEb3h5Z2VuIHdpbGwgY29weSB0aGUgc3R5bGUgc2hlZXQgZmlsZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4gRm9yIGFuIGV4YW1wbGUKKyMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0VYVFJBX1NUWUxFU0hFRVQgID0KKworIyBUaGUgSFRNTF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4gTm90ZQorIyB0aGF0IHRoZXNlIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvIHRoZSBiYXNlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeS4gVXNlIHRoZQorIyAkcmVscGF0aF4gbWFya2VyIGluIHRoZSBIVE1MX0hFQURFUiBhbmQvb3IgSFRNTF9GT09URVIgZmlsZXMgdG8gbG9hZCB0aGVzZQorIyBmaWxlcy4gSW4gdGhlIEhUTUxfU1RZTEVTSEVFVCBmaWxlLCB1c2UgdGhlIGZpbGUgbmFtZSBvbmx5LiBBbHNvIG5vdGUgdGhhdCB0aGUKKyMgZmlsZXMgd2lsbCBiZSBjb3BpZWQgYXMtaXM7IHRoZXJlIGFyZSBubyBjb21tYW5kcyBvciBtYXJrZXJzIGF2YWlsYWJsZS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9FWFRSQV9GSUxFUyAgICAgICA9CisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9IVUUgdGFnIGNvbnRyb2xzIHRoZSBjb2xvciBvZiB0aGUgSFRNTCBvdXRwdXQuIERveHlnZW4KKyMgd2lsbCBhZGp1c3QgdGhlIGNvbG9ycyBpbiB0aGUgc3R5bGVzaGVldCBhbmQgYmFja2dyb3VuZCBpbWFnZXMgYWNjb3JkaW5nIHRvCisjIHRoaXMgY29sb3IuIEh1ZSBpcyBzcGVjaWZpZWQgYXMgYW4gYW5nbGUgb24gYSBjb2xvcndoZWVsLCBzZWUKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IdWUgZm9yIG1vcmUgaW5mb3JtYXRpb24uIEZvciBpbnN0YW5jZSB0aGUgdmFsdWUKKyMgMCByZXByZXNlbnRzIHJlZCwgNjAgaXMgeWVsbG93LCAxMjAgaXMgZ3JlZW4sIDE4MCBpcyBjeWFuLCAyNDAgaXMgYmx1ZSwgMzAwCisjIHB1cnBsZSwgYW5kIDM2MCBpcyByZWQgYWdhaW4uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDM1OSwgZGVmYXVsdCB2YWx1ZTogMjIwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfSFVFICAgID0gMjIwCisKKyMgVGhlIEhUTUxfQ09MT1JTVFlMRV9TQVQgdGFnIGNvbnRyb2xzIHRoZSBwdXJpdHkgKG9yIHNhdHVyYXRpb24pIG9mIHRoZSBjb2xvcnMKKyMgaW4gdGhlIEhUTUwgb3V0cHV0LiBGb3IgYSB2YWx1ZSBvZiAwIHRoZSBvdXRwdXQgd2lsbCB1c2UgZ3JheXNjYWxlcyBvbmx5LiBBCisjIHZhbHVlIG9mIDI1NSB3aWxsIHByb2R1Y2UgdGhlIG1vc3Qgdml2aWQgY29sb3JzLgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAyNTUsIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9DT0xPUlNUWUxFX1NBVCAgICA9IDEwMAorCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfR0FNTUEgdGFnIGNvbnRyb2xzIHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFwcGxpZWQgdG8gdGhlCisjIGx1bWluYW5jZSBjb21wb25lbnQgb2YgdGhlIGNvbG9ycyBpbiB0aGUgSFRNTCBvdXRwdXQuIFZhbHVlcyBiZWxvdyAxMDAKKyMgZ3JhZHVhbGx5IG1ha2UgdGhlIG91dHB1dCBsaWdodGVyLCB3aGVyZWFzIHZhbHVlcyBhYm92ZSAxMDAgbWFrZSB0aGUgb3V0cHV0CisjIGRhcmtlci4gVGhlIHZhbHVlIGRpdmlkZWQgYnkgMTAwIGlzIHRoZSBhY3R1YWwgZ2FtbWEgYXBwbGllZCwgc28gODAgcmVwcmVzZW50cworIyBhIGdhbW1hIG9mIDAuOCwgVGhlIHZhbHVlIDIyMCByZXByZXNlbnRzIGEgZ2FtbWEgb2YgMi4yLCBhbmQgMTAwIGRvZXMgbm90CisjIGNoYW5nZSB0aGUgZ2FtbWEuCisjIE1pbmltdW0gdmFsdWU6IDQwLCBtYXhpbXVtIHZhbHVlOiAyNDAsIGRlZmF1bHQgdmFsdWU6IDgwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX0NPTE9SU1RZTEVfR0FNTUEgID0gODAKKworIyBJZiB0aGUgSFRNTF9USU1FU1RBTVAgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgZm9vdGVyIG9mIGVhY2ggZ2VuZXJhdGVkIEhUTUwKKyMgcGFnZSB3aWxsIGNvbnRhaW4gdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgcGFnZSB3YXMgZ2VuZXJhdGVkLiBTZXR0aW5nIHRoaXMKKyMgdG8gTk8gY2FuIGhlbHAgd2hlbiBjb21wYXJpbmcgdGhlIG91dHB1dCBvZiBtdWx0aXBsZSBydW5zLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitIVE1MX1RJTUVTVEFNUCAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEhUTUxfRFlOQU1JQ19TRUNUSU9OUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBnZW5lcmF0ZWQgSFRNTAorIyBkb2N1bWVudGF0aW9uIHdpbGwgY29udGFpbiBzZWN0aW9ucyB0aGF0IGNhbiBiZSBoaWRkZW4gYW5kIHNob3duIGFmdGVyIHRoZQorIyBwYWdlIGhhcyBsb2FkZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9EWU5BTUlDX1NFQ1RJT05TICA9IE5PCisKKyMgV2l0aCBIVE1MX0lOREVYX05VTV9FTlRSSUVTIG9uZSBjYW4gY29udHJvbCB0aGUgcHJlZmVycmVkIG51bWJlciBvZiBlbnRyaWVzCisjIHNob3duIGluIHRoZSB2YXJpb3VzIHRyZWUgc3RydWN0dXJlZCBpbmRpY2VzIGluaXRpYWxseTsgdGhlIHVzZXIgY2FuIGV4cGFuZAorIyBhbmQgY29sbGFwc2UgZW50cmllcyBkeW5hbWljYWxseSBsYXRlciBvbi4gRG94eWdlbiB3aWxsIGV4cGFuZCB0aGUgdHJlZSB0bworIyBzdWNoIGEgbGV2ZWwgdGhhdCBhdCBtb3N0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMgYXJlIHZpc2libGUgKHVubGVzcworIyBhIGZ1bGx5IGNvbGxhcHNlZCB0cmVlIGFscmVhZHkgZXhjZWVkcyB0aGlzIGFtb3VudCkuIFNvIHNldHRpbmcgdGhlIG51bWJlciBvZgorIyBlbnRyaWVzIDEgd2lsbCBwcm9kdWNlIGEgZnVsbCBjb2xsYXBzZWQgdHJlZSBieSBkZWZhdWx0LiAwIGlzIGEgc3BlY2lhbCB2YWx1ZQorIyByZXByZXNlbnRpbmcgYW4gaW5maW5pdGUgbnVtYmVyIG9mIGVudHJpZXMgYW5kIHdpbGwgcmVzdWx0IGluIGEgZnVsbCBleHBhbmRlZAorIyB0cmVlIGJ5IGRlZmF1bHQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDk5OTksIGRlZmF1bHQgdmFsdWU6IDEwMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworSFRNTF9JTkRFWF9OVU1fRU5UUklFUyA9IDEwMAorCisjIElmIHRoZSBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgd2lsbCBiZQorIyBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgQXBwbGUncyBYY29kZSAzIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQKKyMgZW52aXJvbm1lbnQgKHNlZTogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMveGNvZGUvKSwgaW50cm9kdWNlZCB3aXRoCisjIE9TWCAxMC41IChMZW9wYXJkKS4gVG8gY3JlYXRlIGEgZG9jdW1lbnRhdGlvbiBzZXQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhCisjIE1ha2VmaWxlIGluIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFJ1bm5pbmcgbWFrZSB3aWxsIHByb2R1Y2UgdGhlIGRvY3NldCBpbgorIyB0aGF0IGRpcmVjdG9yeSBhbmQgcnVubmluZyBtYWtlIGluc3RhbGwgd2lsbCBpbnN0YWxsIHRoZSBkb2NzZXQgaW4KKyMgfi9MaWJyYXJ5L0RldmVsb3Blci9TaGFyZWQvRG9jdW1lbnRhdGlvbi9Eb2NTZXRzIHNvIHRoYXQgWGNvZGUgd2lsbCBmaW5kIGl0IGF0CisjIHN0YXJ0dXAuIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90b29scy9jcmVhdGluZ2RvY3NldHN3aXRoZG94eWdlbi5odG1sCisjIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0RPQ1NFVCAgICAgICAgPSBOTworCisjIFRoaXMgdGFnIGRldGVybWluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3NldCBmZWVkLiBBIGRvY3VtZW50YXRpb24gZmVlZCBwcm92aWRlcworIyBhbiB1bWJyZWxsYSB1bmRlciB3aGljaCBtdWx0aXBsZSBkb2N1bWVudGF0aW9uIHNldHMgZnJvbSBhIHNpbmdsZSBwcm92aWRlcgorIyAoc3VjaCBhcyBhIGNvbXBhbnkgb3IgcHJvZHVjdCBzdWl0ZSkgY2FuIGJlIGdyb3VwZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBEb3h5Z2VuIGdlbmVyYXRlZCBkb2NzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9GRUVETkFNRSAgICAgICAgPSAiRG94eWdlbiBnZW5lcmF0ZWQgZG9jcyIKKworIyBUaGlzIHRhZyBzcGVjaWZpZXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGRvY3VtZW50YXRpb24KKyMgc2V0IGJ1bmRsZS4gVGhpcyBzaG91bGQgYmUgYSByZXZlcnNlIGRvbWFpbi1uYW1lIHN0eWxlIHN0cmluZywgZS5nLgorIyBjb20ubXljb21wYW55Lk15RG9jU2V0LiBEb3h5Z2VuIHdpbGwgYXBwZW5kIC5kb2NzZXQgdG8gdGhlIG5hbWUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBvcmcuZG94eWdlbi5Qcm9qZWN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9CVU5ETEVfSUQgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0CisKKyMgVGhlIERPQ1NFVF9QVUJMSVNIRVJfSUQgdGFnIHNwZWNpZmllcyBhIHN0cmluZyB0aGF0IHNob3VsZCB1bmlxdWVseSBpZGVudGlmeQorIyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuIFRoaXMgc2hvdWxkIGJlIGEgcmV2ZXJzZSBkb21haW4tbmFtZSBzdHlsZQorIyBzdHJpbmcsIGUuZy4gY29tLm15Y29tcGFueS5NeURvY1NldC5kb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHVibGlzaGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfRE9DU0VUIGlzIHNldCB0byBZRVMuCisKK0RPQ1NFVF9QVUJMSVNIRVJfSUQgICAgPSBvcmcuZG94eWdlbi5QdWJsaXNoZXIKKworIyBUaGUgRE9DU0VUX1BVQkxJU0hFUl9OQU1FIHRhZyBpZGVudGlmaWVzIHRoZSBkb2N1bWVudGF0aW9uIHB1Ymxpc2hlci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFB1Ymxpc2hlci4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ1NFVCBpcyBzZXQgdG8gWUVTLgorCitET0NTRVRfUFVCTElTSEVSX05BTUUgID0gUHVibGlzaGVyCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiBnZW5lcmF0ZXMgdGhyZWUKKyMgYWRkaXRpb25hbCBIVE1MIGluZGV4IGZpbGVzOiBpbmRleC5oaHAsIGluZGV4LmhoYywgYW5kIGluZGV4Lmhoay4gVGhlCisjIGluZGV4LmhocCBpcyBhIHByb2plY3QgZmlsZSB0aGF0IGNhbiBiZSByZWFkIGJ5IE1pY3Jvc29mdCdzIEhUTUwgSGVscCBXb3Jrc2hvcAorIyAoc2VlOiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvZG93bmxvYWQvZGV0YWlscy5hc3B4P2lkPTIxMTM4KSBvbgorIyBXaW5kb3dzLgorIworIyBUaGUgSFRNTCBIZWxwIFdvcmtzaG9wIGNvbnRhaW5zIGEgY29tcGlsZXIgdGhhdCBjYW4gY29udmVydCBhbGwgSFRNTCBvdXRwdXQKKyMgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaW50byBhIHNpbmdsZSBjb21waWxlZCBIVE1MIGZpbGUgKC5jaG0pLiBDb21waWxlZCBIVE1MCisjIGZpbGVzIGFyZSBub3cgdXNlZCBhcyB0aGUgV2luZG93cyA5OCBoZWxwIGZvcm1hdCwgYW5kIHdpbGwgcmVwbGFjZSB0aGUgb2xkCisjIFdpbmRvd3MgaGVscCBmb3JtYXQgKC5obHApIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3JtcyBpbiB0aGUgZnV0dXJlLiBDb21wcmVzc2VkCisjIEhUTUwgZmlsZXMgYWxzbyBjb250YWluIGFuIGluZGV4LCBhIHRhYmxlIG9mIGNvbnRlbnRzLCBhbmQgeW91IGNhbiBzZWFyY2ggZm9yCisjIHdvcmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgSFRNTCB3b3Jrc2hvcCBhbHNvIGNvbnRhaW5zIGEgdmlld2VyIGZvcgorIyBjb21wcmVzc2VkIEhUTUwgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCisKKyMgVGhlIENITV9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htCisjIGZpbGUuIFlvdSBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUKKyMgd3JpdHRlbiB0byB0aGUgaHRtbCBvdXRwdXQgZGlyZWN0b3J5LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9CisKKyMgVGhlIEhIQ19MT0NBVElPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gKGFic29sdXRlIHBhdGgKKyMgaW5jbHVkaW5nIGZpbGUgbmFtZSkgb2YgdGhlIEhUTUwgaGVscCBjb21waWxlciAoIGhoYy5leGUpLiBJZiBub24tZW1wdHkKKyMgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gdGhlIEhUTUwgaGVscCBjb21waWxlciBvbiB0aGUgZ2VuZXJhdGVkIGluZGV4LmhocC4KKyMgVGhlIGZpbGUgaGFzIHRvIGJlIHNwZWNpZmllZCB3aXRoIGZ1bGwgcGF0aC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUxIRUxQIGlzIHNldCB0byBZRVMuCisKK0hIQ19MT0NBVElPTiAgICAgICAgICAgPQorCisjIFRoZSBHRU5FUkFURV9DSEkgZmxhZyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKAorIyBZRVMpIG9yIHRoYXQgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlICggTk8pLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MSEVMUCBpcyBzZXQgdG8gWUVTLgorCitHRU5FUkFURV9DSEkgICAgICAgICAgID0gTk8KKworIyBUaGUgQ0hNX0lOREVYX0VOQ09ESU5HIGlzIHVzZWQgdG8gZW5jb2RlIEh0bWxIZWxwIGluZGV4ICggaGhrKSwgY29udGVudCAoIGhoYykKKyMgYW5kIHByb2plY3QgZmlsZSBjb250ZW50LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQ0hNX0lOREVYX0VOQ09ESU5HICAgICA9CisKKyMgVGhlIEJJTkFSWV9UT0MgZmxhZyBjb250cm9scyB3aGV0aGVyIGEgYmluYXJ5IHRhYmxlIG9mIGNvbnRlbnRzIGlzIGdlbmVyYXRlZCAoCisjIFlFUykgb3IgYSBub3JtYWwgdGFibGUgb2YgY29udGVudHMgKCBOTykgaW4gdGhlIC5jaG0gZmlsZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMgdG8KKyMgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG9mIHRoZSBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgdG8gdGhlIHRyZWUgdmlldy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTEhFTFAgaXMgc2V0IHRvIFlFUy4KKworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgYm90aCBRSFBfTkFNRVNQQUNFIGFuZAorIyBRSFBfVklSVFVBTF9GT0xERVIgYXJlIHNldCwgYW4gYWRkaXRpb25hbCBpbmRleCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIHRoYXQKKyMgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIFF0J3MgcWhlbHBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSBRdCBDb21wcmVzc2VkIEhlbHAKKyMgKC5xY2gpIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1FIUCAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBRSEdfTE9DQVRJT04gdGFnIGlzIHNwZWNpZmllZCwgdGhlIFFDSF9GSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisjIHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAucWNoIGZpbGUuIFRoZSBwYXRoIHNwZWNpZmllZCBpcyByZWxhdGl2ZSB0bworIyB0aGUgSFRNTCBvdXRwdXQgZm9sZGVyLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FDSF9GSUxFICAgICAgICAgICAgICAgPQorCisjIFRoZSBRSFBfTkFNRVNQQUNFIHRhZyBzcGVjaWZpZXMgdGhlIG5hbWVzcGFjZSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIFF0IEhlbHAKKyMgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gTmFtZXNwYWNlCisjIChzZWU6IGh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy9kb2MvcXQtNC44L3F0aGVscHByb2plY3QuaHRtbCNuYW1lc3BhY2UpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogb3JnLmRveHlnZW4uUHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfTkFNRVNQQUNFICAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIFRoZSBRSFBfVklSVFVBTF9GT0xERVIgdGFnIHNwZWNpZmllcyB0aGUgbmFtZXNwYWNlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgUXQKKyMgSGVscCBQcm9qZWN0IG91dHB1dC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBRdCBIZWxwIFByb2plY3QgLyBWaXJ0dWFsCisjIEZvbGRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI3ZpcnR1YWwtCisjIGZvbGRlcnMpLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogZG9jLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUUhQIGlzIHNldCB0byBZRVMuCisKK1FIUF9WSVJUVUFMX0ZPTERFUiAgICAgPSBkb2MKKworIyBJZiB0aGUgUUhQX0NVU1RfRklMVEVSX05BTUUgdGFnIGlzIHNldCwgaXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY3VzdG9tCisjIGZpbHRlciB0byBhZGQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tCisjIEZpbHRlcnMgKHNlZTogaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2N1c3RvbS0KKyMgZmlsdGVycykuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhQX0NVU1RfRklMVEVSX05BTUUgICA9CisKKyMgVGhlIFFIUF9DVVNUX0ZJTFRFUl9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZQorIyBjdXN0b20gZmlsdGVyIHRvIGFkZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBRdCBIZWxwIFByb2plY3QgLyBDdXN0b20KKyMgRmlsdGVycyAoc2VlOiBodHRwOi8vcXQtcHJvamVjdC5vcmcvZG9jL3F0LTQuOC9xdGhlbHBwcm9qZWN0Lmh0bWwjY3VzdG9tLQorIyBmaWx0ZXJzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfQ1VTVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhQX1NFQ1RfRklMVEVSX0FUVFJTIHRhZyBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgdGhpcworIyBwcm9qZWN0J3MgZmlsdGVyIHNlY3Rpb24gbWF0Y2hlcy4gUXQgSGVscCBQcm9qZWN0IC8gRmlsdGVyIEF0dHJpYnV0ZXMgKHNlZToKKyMgaHR0cDovL3F0LXByb2plY3Qub3JnL2RvYy9xdC00LjgvcXRoZWxwcHJvamVjdC5odG1sI2ZpbHRlci1hdHRyaWJ1dGVzKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1FIUCBpcyBzZXQgdG8gWUVTLgorCitRSFBfU0VDVF9GSUxURVJfQVRUUlMgID0KKworIyBUaGUgUUhHX0xPQ0FUSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBRdCdzCisjIHFoZWxwZ2VuZXJhdG9yLiBJZiBub24tZW1wdHkgZG94eWdlbiB3aWxsIHRyeSB0byBydW4gcWhlbHBnZW5lcmF0b3Igb24gdGhlCisjIGdlbmVyYXRlZCAucWhwIGZpbGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9RSFAgaXMgc2V0IHRvIFlFUy4KKworUUhHX0xPQ0FUSU9OICAgICAgICAgICA9CisKKyMgSWYgdGhlIEdFTkVSQVRFX0VDTElQU0VIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIHdpbGwgYmUKKyMgZ2VuZXJhdGVkLCB0b2dldGhlciB3aXRoIHRoZSBIVE1MIGZpbGVzLCB0aGV5IGZvcm0gYW4gRWNsaXBzZSBoZWxwIHBsdWdpbi4gVG8KKyMgaW5zdGFsbCB0aGlzIHBsdWdpbiBhbmQgbWFrZSBpdCBhdmFpbGFibGUgdW5kZXIgdGhlIGhlbHAgY29udGVudHMgbWVudSBpbgorIyBFY2xpcHNlLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwgZmlsZXMgbmVlZHMKKyMgdG8gYmUgY29waWVkIGludG8gdGhlIHBsdWdpbnMgZGlyZWN0b3J5IG9mIGVjbGlwc2UuIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkKKyMgd2l0aGluIHRoZSBwbHVnaW5zIGRpcmVjdG9yeSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEVDTElQU0VfRE9DX0lEIHZhbHVlLgorIyBBZnRlciBjb3B5aW5nIEVjbGlwc2UgbmVlZHMgdG8gYmUgcmVzdGFydGVkIGJlZm9yZSB0aGUgaGVscCBhcHBlYXJzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0VDTElQU0VIRUxQICAgPSBOTworCisjIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBFY2xpcHNlIGhlbHAgcGx1Z2luLiBXaGVuIGluc3RhbGxpbmcgdGhlIHBsdWdpbgorIyB0aGUgZGlyZWN0b3J5IG5hbWUgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MIGZpbGVzIHNob3VsZCBhbHNvIGhhdmUgdGhpcworIyBuYW1lLiBFYWNoIGRvY3VtZW50YXRpb24gc2V0IHNob3VsZCBoYXZlIGl0cyBvd24gaWRlbnRpZmllci4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IG9yZy5kb3h5Z2VuLlByb2plY3QuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9FQ0xJUFNFSEVMUCBpcyBzZXQgdG8gWUVTLgorCitFQ0xJUFNFX0RPQ19JRCAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdAorCisjIElmIHlvdSB3YW50IGZ1bGwgY29udHJvbCBvdmVyIHRoZSBsYXlvdXQgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIHBhZ2VzIGl0IG1pZ2h0CisjIGJlIG5lY2Vzc2FyeSB0byBkaXNhYmxlIHRoZSBpbmRleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHlvdXIgb3duLiBUaGUKKyMgRElTQUJMRV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIGNvbmRlbnNlZCBpbmRleCAodGFicykgYXQgdG9wCisjIG9mIGVhY2ggSFRNTCBwYWdlLiBBIHZhbHVlIG9mIE5PIGVuYWJsZXMgdGhlIGluZGV4IGFuZCB0aGUgdmFsdWUgWUVTIGRpc2FibGVzCisjIGl0LiBTaW5jZSB0aGUgdGFicyBpbiB0aGUgaW5kZXggY29udGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgbmF2aWdhdGlvbgorIyB0cmVlLCB5b3UgY2FuIHNldCB0aGlzIG9wdGlvbiB0byBZRVMgaWYgeW91IGFsc28gc2V0IEdFTkVSQVRFX1RSRUVWSUVXIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KKworIyBUaGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGEgdHJlZS1saWtlIGluZGV4CisjIHN0cnVjdHVyZSBzaG91bGQgYmUgZ2VuZXJhdGVkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGluZm9ybWF0aW9uLiBJZiB0aGUgdGFnCisjIHZhbHVlIGlzIHNldCB0byBZRVMsIGEgc2lkZSBwYW5lbCB3aWxsIGJlIGdlbmVyYXRlZCBjb250YWluaW5nIGEgdHJlZS1saWtlCisjIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdCBpcyBnZW5lcmF0ZWQgZm9yIEhUTUwgSGVscCkuIEZvciB0aGlzCisjIHRvIHdvcmsgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgSmF2YVNjcmlwdCwgREhUTUwsIENTUyBhbmQgZnJhbWVzIGlzIHJlcXVpcmVkCisjIChpLmUuIGFueSBtb2Rlcm4gYnJvd3NlcikuIFdpbmRvd3MgdXNlcnMgYXJlIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlCisjIEhUTUwgaGVscCBmZWF0dXJlLiBWaWEgY3VzdG9tIHN0eWxlc2hlZXRzIChzZWUgSFRNTF9FWFRSQV9TVFlMRVNIRUVUKSBvbmUgY2FuCisjIGZ1cnRoZXIgZmluZS10dW5lIHRoZSBsb29rIG9mIHRoZSBpbmRleC4gQXMgYW4gZXhhbXBsZSwgdGhlIGRlZmF1bHQgc3R5bGUKKyMgc2hlZXQgZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaGFzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gcHV0IGFuIGltYWdlIGF0CisjIHRoZSByb290IG9mIHRoZSB0cmVlIGluc3RlYWQgb2YgdGhlIFBST0pFQ1RfTkFNRS4gU2luY2UgdGhlIHRyZWUgYmFzaWNhbGx5IGhhcworIyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyB0aGUgdGFiIGluZGV4LCB5b3UgY291bGQgY29uc2lkZXIgc2V0dGluZworIyBESVNBQkxFX0lOREVYIHRvIFlFUyB3aGVuIGVuYWJsaW5nIHRoaXMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBZRVMKKworIyBUaGUgRU5VTV9WQUxVRVNfUEVSX0xJTkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGVudW0gdmFsdWVzIHRoYXQKKyMgZG94eWdlbiB3aWxsIGdyb3VwIG9uIG9uZSBsaW5lIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgYSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBzdXBwcmVzcyB0aGUgZW51bSB2YWx1ZXMgZnJvbSBhcHBlYXJpbmcKKyMgaW4gdGhlIG92ZXJ2aWV3IHNlY3Rpb24uCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDIwLCBkZWZhdWx0IHZhbHVlOiA0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gMQorCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlIHVzZWQKKyMgdG8gc2V0IHRoZSBpbml0aWFsIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBmcmFtZSBpbiB3aGljaCB0aGUgdHJlZSBpcyBzaG93bi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTUwMCwgZGVmYXVsdCB2YWx1ZTogMjUwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisKKyMgV2hlbiB0aGUgRVhUX0xJTktTX0lOX1dJTkRPVyBvcHRpb24gaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgb3BlbiBsaW5rcyB0bworIyBleHRlcm5hbCBzeW1ib2xzIGltcG9ydGVkIHZpYSB0YWcgZmlsZXMgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0hUTUwgaXMgc2V0IHRvIFlFUy4KKworRVhUX0xJTktTX0lOX1dJTkRPVyAgICA9IE5PCisKKyMgVXNlIHRoaXMgdGFnIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIG9mIExhVGVYIGZvcm11bGFzIGluY2x1ZGVkIGFzIGltYWdlcyBpbgorIyB0aGUgSFRNTCBkb2N1bWVudGF0aW9uLiBXaGVuIHlvdSBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBhZnRlciBhIHN1Y2Nlc3NmdWwKKyMgZG94eWdlbiBydW4geW91IG5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlIGFueSBmb3JtXyoucG5nIGltYWdlcyBmcm9tIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdG8gZm9yY2UgdGhlbSB0byBiZSByZWdlbmVyYXRlZC4KKyMgTWluaW11bSB2YWx1ZTogOCwgbWF4aW11bSB2YWx1ZTogNTAsIGRlZmF1bHQgdmFsdWU6IDEwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitGT1JNVUxBX0ZPTlRTSVpFICAgICAgID0gMTAKKworIyBVc2UgdGhlIEZPUk1VTEFfVFJBTlBBUkVOVCB0YWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZXMKKyMgZ2VuZXJhdGVkIGZvciBmb3JtdWxhcyBhcmUgdHJhbnNwYXJlbnQgUE5Hcy4gVHJhbnNwYXJlbnQgUE5HcyBhcmUgbm90CisjIHN1cHBvcnRlZCBwcm9wZXJseSBmb3IgSUUgNi4wLCBidXQgYXJlIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXJuIGJyb3dzZXJzLgorIworIyBOb3RlIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGlzIG9wdGlvbiB5b3UgbmVlZCB0byBkZWxldGUgYW55IGZvcm1fKi5wbmcgZmlsZXMgaW4KKyMgdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgdGhlIGNoYW5nZXMgaGF2ZSBlZmZlY3QuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK0ZPUk1VTEFfVFJBTlNQQVJFTlQgICAgPSBZRVMKKworIyBFbmFibGUgdGhlIFVTRV9NQVRISkFYIG9wdGlvbiB0byByZW5kZXIgTGFUZVggZm9ybXVsYXMgdXNpbmcgTWF0aEpheCAoc2VlCisjIGh0dHA6Ly93d3cubWF0aGpheC5vcmcpIHdoaWNoIHVzZXMgY2xpZW50IHNpZGUgSmF2YXNjcmlwdCBmb3IgdGhlIHJlbmRlcmluZworIyBpbnN0ZWFkIG9mIHVzaW5nIHByZXJlbmRlcmVkIGJpdG1hcHMuIFVzZSB0aGlzIGlmIHlvdSBkbyBub3QgaGF2ZSBMYVRlWAorIyBpbnN0YWxsZWQgb3IgaWYgeW91IHdhbnQgdG8gZm9ybXVsYXMgbG9vayBwcmV0dGllciBpbiB0aGUgSFRNTCBvdXRwdXQuIFdoZW4KKyMgZW5hYmxlZCB5b3UgbWF5IGFsc28gbmVlZCB0byBpbnN0YWxsIE1hdGhKYXggc2VwYXJhdGVseSBhbmQgY29uZmlndXJlIHRoZSBwYXRoCisjIHRvIGl0IHVzaW5nIHRoZSBNQVRISkFYX1JFTFBBVEggb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9IVE1MIGlzIHNldCB0byBZRVMuCisKK1VTRV9NQVRISkFYICAgICAgICAgICAgPSBOTworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdG8gYmUgdXNlZCBmb3IKKyMgdGhlIE1hdGhKYXggb3V0cHV0LiBTZWUgdGhlIE1hdGhKYXggc2l0ZSAoc2VlOgorIyBodHRwOi8vZG9jcy5tYXRoamF4Lm9yZy9lbi9sYXRlc3Qvb3V0cHV0Lmh0bWwpIGZvciBtb3JlIGRldGFpbHMuCisjIFBvc3NpYmxlIHZhbHVlcyBhcmU6IEhUTUwtQ1NTICh3aGljaCBpcyBzbG93ZXIsIGJ1dCBoYXMgdGhlIGJlc3QKKyMgY29tcGF0aWJpbGl0eSksIE5hdGl2ZU1NTCAoaS5lLiBNYXRoTUwpIGFuZCBTVkcuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIVE1MLUNTUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFVTRV9NQVRISkFYIGlzIHNldCB0byBZRVMuCisKK01BVEhKQVhfRk9STUFUICAgICAgICAgPSBIVE1MLUNTUworCisjIFdoZW4gTWF0aEpheCBpcyBlbmFibGVkIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZSBIVE1MCisjIG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uIFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKyMgc2hvdWxkIGNvbnRhaW4gdGhlIE1hdGhKYXguanMgc2NyaXB0LiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBtYXRoamF4IGRpcmVjdG9yeQorIyBpcyBsb2NhdGVkIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnksIHRoZW4KKyMgTUFUSEpBWF9SRUxQQVRIIHNob3VsZCBiZSAuLi9tYXRoamF4LiBUaGUgZGVmYXVsdCB2YWx1ZSBwb2ludHMgdG8gdGhlIE1hdGhKYXgKKyMgQ29udGVudCBEZWxpdmVyeSBOZXR3b3JrIHNvIHlvdSBjYW4gcXVpY2tseSBzZWUgdGhlIHJlc3VsdCB3aXRob3V0IGluc3RhbGxpbmcKKyMgTWF0aEpheC4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBhIGxvY2FsIGNvcHkgb2YKKyMgTWF0aEpheCBmcm9tIGh0dHA6Ly93d3cubWF0aGpheC5vcmcgYmVmb3JlIGRlcGxveW1lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBodHRwOi8vY2RuLm1hdGhqYXgub3JnL21hdGhqYXgvbGF0ZXN0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9SRUxQQVRIICAgICAgICA9IGh0dHA6Ly9jZG4ubWF0aGpheC5vcmcvbWF0aGpheC9sYXRlc3QKKworIyBUaGUgTUFUSEpBWF9FWFRFTlNJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIE1hdGhKYXgKKyMgZXh0ZW5zaW9uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgZHVyaW5nIE1hdGhKYXggcmVuZGVyaW5nLiBGb3IgZXhhbXBsZQorIyBNQVRISkFYX0VYVEVOU0lPTlMgPSBUZVgvQU1TbWF0aCBUZVgvQU1Tc3ltYm9scworIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9FWFRFTlNJT05TICAgICA9CisKKyMgVGhlIE1BVEhKQVhfQ09ERUZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHdpdGggamF2YXNjcmlwdCBwaWVjZXMKKyMgb2YgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiBzdGFydHVwIG9mIHRoZSBNYXRoSmF4IGNvZGUuIFNlZSB0aGUgTWF0aEpheCBzaXRlCisjIChzZWU6IGh0dHA6Ly9kb2NzLm1hdGhqYXgub3JnL2VuL2xhdGVzdC9vdXRwdXQuaHRtbCkgZm9yIG1vcmUgZGV0YWlscy4gRm9yIGFuCisjIGV4YW1wbGUgc2VlIHRoZSBkb2N1bWVudGF0aW9uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgVVNFX01BVEhKQVggaXMgc2V0IHRvIFlFUy4KKworTUFUSEpBWF9DT0RFRklMRSAgICAgICA9CisKKyMgV2hlbiB0aGUgU0VBUkNIRU5HSU5FIHRhZyBpcyBlbmFibGVkIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHNlYXJjaCBib3ggZm9yCisjIHRoZSBIVE1MIG91dHB1dC4gVGhlIHVuZGVybHlpbmcgc2VhcmNoIGVuZ2luZSB1c2VzIGphdmFzY3JpcHQgYW5kIERIVE1MIGFuZAorIyBzaG91bGQgd29yayBvbiBhbnkgbW9kZXJuIGJyb3dzZXIuIE5vdGUgdGhhdCB3aGVuIHVzaW5nIEhUTUwgaGVscAorIyAoR0VORVJBVEVfSFRNTEhFTFApLCBRdCBoZWxwIChHRU5FUkFURV9RSFApLCBvciBkb2NzZXRzIChHRU5FUkFURV9ET0NTRVQpCisjIHRoZXJlIGlzIGFscmVhZHkgYSBzZWFyY2ggZnVuY3Rpb24gc28gdGhpcyBvbmUgc2hvdWxkIHR5cGljYWxseSBiZSBkaXNhYmxlZC4KKyMgRm9yIGxhcmdlIHByb2plY3RzIHRoZSBqYXZhc2NyaXB0IGJhc2VkIHNlYXJjaCBlbmdpbmUgY2FuIGJlIHNsb3csIHRoZW4KKyMgZW5hYmxpbmcgU0VSVkVSX0JBU0VEX1NFQVJDSCBtYXkgcHJvdmlkZSBhIGJldHRlciBzb2x1dGlvbi4gSXQgaXMgcG9zc2libGUgdG8KKyMgc2VhcmNoIHVzaW5nIHRoZSBrZXlib2FyZDsgdG8ganVtcCB0byB0aGUgc2VhcmNoIGJveCB1c2UgPGFjY2VzcyBrZXk+ICsgUworIyAod2hhdCB0aGUgPGFjY2VzcyBrZXk+IGlzIGRlcGVuZHMgb24gdGhlIE9TIGFuZCBicm93c2VyLCBidXQgaXQgaXMgdHlwaWNhbGx5CisjIDxDVFJMPiwgPEFMVD4vPG9wdGlvbj4sIG9yIGJvdGgpLiBJbnNpZGUgdGhlIHNlYXJjaCBib3ggdXNlIHRoZSA8Y3Vyc29yIGRvd24KKyMga2V5PiB0byBqdW1wIGludG8gdGhlIHNlYXJjaCByZXN1bHRzIHdpbmRvdywgdGhlIHJlc3VsdHMgY2FuIGJlIG5hdmlnYXRlZAorIyB1c2luZyB0aGUgPGN1cnNvciBrZXlzPi4gUHJlc3MgPEVudGVyPiB0byBzZWxlY3QgYW4gaXRlbSBvciA8ZXNjYXBlPiB0byBjYW5jZWwKKyMgdGhlIHNlYXJjaC4gVGhlIGZpbHRlciBvcHRpb25zIGNhbiBiZSBzZWxlY3RlZCB3aGVuIHRoZSBjdXJzb3IgaXMgaW5zaWRlIHRoZQorIyBzZWFyY2ggYm94IGJ5IHByZXNzaW5nIDxTaGlmdD4rPGN1cnNvciBkb3duPi4gQWxzbyBoZXJlIHVzZSB0aGUgPGN1cnNvciBrZXlzPgorIyB0byBzZWxlY3QgYSBmaWx0ZXIgYW5kIDxFbnRlcj4gb3IgPGVzY2FwZT4gdG8gYWN0aXZhdGUgb3IgY2FuY2VsIHRoZSBmaWx0ZXIKKyMgb3B0aW9uLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfSFRNTCBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gWUVTCisKKyMgV2hlbiB0aGUgU0VSVkVSX0JBU0VEX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCB0aGUgc2VhcmNoIGVuZ2luZSB3aWxsIGJlCisjIGltcGxlbWVudGVkIHVzaW5nIGEgd2ViIHNlcnZlciBpbnN0ZWFkIG9mIGEgd2ViIGNsaWVudCB1c2luZyBKYXZhc2NyaXB0LiBUaGVyZQorIyBhcmUgdHdvIGZsYXZvdXJzIG9mIHdlYiBzZXJ2ZXIgYmFzZWQgc2VhcmNoaW5nIGRlcGVuZGluZyBvbiB0aGUKKyMgRVhURVJOQUxfU0VBUkNIIHNldHRpbmcuIFdoZW4gZGlzYWJsZWQsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIFBIUCBzY3JpcHQgZm9yCisjIHNlYXJjaGluZyBhbmQgYW4gaW5kZXggZmlsZSB1c2VkIGJ5IHRoZSBzY3JpcHQuIFdoZW4gRVhURVJOQUxfU0VBUkNIIGlzCisjIGVuYWJsZWQgdGhlIGluZGV4aW5nIGFuZCBzZWFyY2hpbmcgbmVlZHMgdG8gYmUgcHJvdmlkZWQgYnkgZXh0ZXJuYWwgdG9vbHMuIFNlZQorIyB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRVJWRVJfQkFTRURfU0VBUkNIICAgID0gTk8KKworIyBXaGVuIEVYVEVSTkFMX1NFQVJDSCB0YWcgaXMgZW5hYmxlZCBkb3h5Z2VuIHdpbGwgbm8gbG9uZ2VyIGdlbmVyYXRlIHRoZSBQSFAKKyMgc2NyaXB0IGZvciBzZWFyY2hpbmcuIEluc3RlYWQgdGhlIHNlYXJjaCByZXN1bHRzIGFyZSB3cml0dGVuIHRvIGFuIFhNTCBmaWxlCisjIHdoaWNoIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBhbiBleHRlcm5hbCBpbmRleGVyLiBEb3h5Z2VuIHdpbGwgaW52b2tlIGFuCisjIGV4dGVybmFsIHNlYXJjaCBlbmdpbmUgcG9pbnRlZCB0byBieSB0aGUgU0VBUkNIRU5HSU5FX1VSTCBvcHRpb24gdG8gb2J0YWluIHRoZQorIyBzZWFyY2ggcmVzdWx0cy4KKyMKKyMgRG94eWdlbiBzaGlwcyB3aXRoIGFuIGV4YW1wbGUgaW5kZXhlciAoIGRveHlpbmRleGVyKSBhbmQgc2VhcmNoIGVuZ2luZQorIyAoZG94eXNlYXJjaC5jZ2kpIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgb3BlbiBzb3VyY2Ugc2VhcmNoIGVuZ2luZSBsaWJyYXJ5CisjIFhhcGlhbiAoc2VlOiBodHRwOi8veGFwaWFuLm9yZy8pLgorIworIyBTZWUgdGhlIHNlY3Rpb24gIkV4dGVybmFsIEluZGV4aW5nIGFuZCBTZWFyY2hpbmciIGZvciBkZXRhaWxzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworRVhURVJOQUxfU0VBUkNIICAgICAgICA9IE5PCisKKyMgVGhlIFNFQVJDSEVOR0lORV9VUkwgc2hvdWxkIHBvaW50IHRvIGEgc2VhcmNoIGVuZ2luZSBob3N0ZWQgYnkgYSB3ZWIgc2VydmVyCisjIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIEVYVEVSTkFMX1NFQVJDSCBpcyBlbmFibGVkLgorIworIyBEb3h5Z2VuIHNoaXBzIHdpdGggYW4gZXhhbXBsZSBpbmRleGVyICggZG94eWluZGV4ZXIpIGFuZCBzZWFyY2ggZW5naW5lCisjIChkb3h5c2VhcmNoLmNnaSkgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBvcGVuIHNvdXJjZSBzZWFyY2ggZW5naW5lIGxpYnJhcnkKKyMgWGFwaWFuIChzZWU6IGh0dHA6Ly94YXBpYW4ub3JnLykuIFNlZSB0aGUgc2VjdGlvbiAiRXh0ZXJuYWwgSW5kZXhpbmcgYW5kCisjIFNlYXJjaGluZyIgZm9yIGRldGFpbHMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBTRUFSQ0hFTkdJTkUgaXMgc2V0IHRvIFlFUy4KKworU0VBUkNIRU5HSU5FX1VSTCAgICAgICA9CisKKyMgV2hlbiBTRVJWRVJfQkFTRURfU0VBUkNIIGFuZCBFWFRFUk5BTF9TRUFSQ0ggYXJlIGJvdGggZW5hYmxlZCB0aGUgdW5pbmRleGVkCisjIHNlYXJjaCBkYXRhIGlzIHdyaXR0ZW4gdG8gYSBmaWxlIGZvciBpbmRleGluZyBieSBhbiBleHRlcm5hbCB0b29sLiBXaXRoIHRoZQorIyBTRUFSQ0hEQVRBX0ZJTEUgdGFnIHRoZSBuYW1lIG9mIHRoaXMgZmlsZSBjYW4gYmUgc3BlY2lmaWVkLgorIyBUaGUgZGVmYXVsdCBmaWxlIGlzOiBzZWFyY2hkYXRhLnhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitTRUFSQ0hEQVRBX0ZJTEUgICAgICAgID0gc2VhcmNoZGF0YS54bWwKKworIyBXaGVuIFNFUlZFUl9CQVNFRF9TRUFSQ0ggYW5kIEVYVEVSTkFMX1NFQVJDSCBhcmUgYm90aCBlbmFibGVkIHRoZQorIyBFWFRFUk5BTF9TRUFSQ0hfSUQgdGFnIGNhbiBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBwcm9qZWN0LiBUaGlzIGlzCisjIHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIEVYVFJBX1NFQVJDSF9NQVBQSU5HUyB0byBzZWFyY2ggdGhyb3VnaCBtdWx0aXBsZQorIyBwcm9qZWN0cyBhbmQgcmVkaXJlY3QgdGhlIHJlc3VsdHMgYmFjayB0byB0aGUgcmlnaHQgcHJvamVjdC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIFNFQVJDSEVOR0lORSBpcyBzZXQgdG8gWUVTLgorCitFWFRFUk5BTF9TRUFSQ0hfSUQgICAgID0KKworIyBUaGUgRVhUUkFfU0VBUkNIX01BUFBJTkdTIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgc2VhcmNoaW5nIHRocm91Z2ggZG94eWdlbgorIyBwcm9qZWN0cyBvdGhlciB0aGFuIHRoZSBvbmUgZGVmaW5lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoYXQgYXJlCisjIGFsbCBhZGRlZCB0byB0aGUgc2FtZSBleHRlcm5hbCBzZWFyY2ggaW5kZXguIEVhY2ggcHJvamVjdCBuZWVkcyB0byBoYXZlIGEKKyMgdW5pcXVlIGlkIHNldCB2aWEgRVhURVJOQUxfU0VBUkNIX0lELiBUaGUgc2VhcmNoIG1hcHBpbmcgdGhlbiBtYXBzIHRoZSBpZCBvZgorIyB0byBhIHJlbGF0aXZlIGxvY2F0aW9uIHdoZXJlIHRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZC4gVGhlIGZvcm1hdCBpczoKKyMgRVhUUkFfU0VBUkNIX01BUFBJTkdTID0gdGFnbmFtZTE9bG9jMSB0YWduYW1lMj1sb2MyIC4uLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIRU5HSU5FIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1NFQVJDSF9NQVBQSU5HUyAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTEFURVggdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIExhVGVYIG91dHB1dC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworR0VORVJBVEVfTEFURVggICAgICAgICA9IE5PCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBsYXRleC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlCisjIGludm9rZWQuCisjCisjIE5vdGUgdGhhdCB3aGVuIGVuYWJsaW5nIFVTRV9QREZMQVRFWCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGdlbmVyYXRpbmcKKyMgYml0bWFwcyBmb3IgZm9ybXVsYXMgaW4gdGhlIEhUTUwgb3V0cHV0LCBidXQgbm90IGluIHRoZSBNYWtlZmlsZSB0aGF0IGlzCisjIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuCisjIFRoZSBkZWZhdWx0IGZpbGUgaXM6IGxhdGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvIGdlbmVyYXRlCisjIGluZGV4IGZvciBMYVRlWC4KKyMgVGhlIGRlZmF1bHQgZmlsZSBpczogbWFrZWluZGV4LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworTUFLRUlOREVYX0NNRF9OQU1FICAgICA9IG1ha2VpbmRleAorCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCBMYVRlWAorIyBkb2N1bWVudHMuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc21hbGwgcHJvamVjdHMgYW5kIG1heSBoZWxwIHRvIHNhdmUgc29tZQorIyB0cmVlcyBpbiBnZW5lcmFsLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8KKworIyBUaGUgUEFQRVJfVFlQRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBwYXBlciB0eXBlIHRoYXQgaXMgdXNlZCBieSB0aGUKKyMgcHJpbnRlci4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogYTQgKDIxMCB4IDI5NyBtbSksIGxldHRlciAoOC41IHggMTEgaW5jaGVzKSwgbGVnYWwgKDguNSB4CisjIDE0IGluY2hlcykgYW5kIGV4ZWN1dGl2ZSAoNy4yNSB4IDEwLjUgaW5jaGVzKS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGE0LgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTEFURVggaXMgc2V0IHRvIFlFUy4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGxldHRlcgorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBMYVRlWCBwYWNrYWdlIG5hbWVzCisjIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBMYVRlWCBvdXRwdXQuIFRvIGdldCB0aGUgdGltZXMgZm9udCBmb3IKKyMgaW5zdGFuY2UgeW91IGNhbiBzcGVjaWZ5CisjIEVYVFJBX1BBQ0tBR0VTPXRpbWVzCisjIElmIGxlZnQgYmxhbmsgbm8gZXh0cmEgcGFja2FnZXMgd2lsbCBiZSBpbmNsdWRlZC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBoZWFkZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyB1bnRpbCB0aGUgZmlyc3QKKyMgY2hhcHRlci4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBzdGFuZGFyZCBoZWFkZXIuIFNlZQorIyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCBkb3h5Z2VuIHdyaXRlIHRoZQorIyBkZWZhdWx0IGhlYWRlciB0byBhIHNlcGFyYXRlIGZpbGUuCisjCisjIE5vdGU6IE9ubHkgdXNlIGEgdXNlci1kZWZpbmVkIGhlYWRlciBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchIFRoZQorIyBmb2xsb3dpbmcgY29tbWFuZHMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBpbnNpZGUgdGhlIGhlYWRlcjogJHRpdGxlLAorIyAkZGF0ZXRpbWUsICRkYXRlLCAkZG94eWdlbnZlcnNpb24sICRwcm9qZWN0bmFtZSwgJHByb2plY3RudW1iZXIuIERveHlnZW4gd2lsbAorIyByZXBsYWNlIHRoZW0gYnkgcmVzcGVjdGl2ZWx5IHRoZSB0aXRsZSBvZiB0aGUgcGFnZSwgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSwKKyMgb25seSB0aGUgY3VycmVudCBkYXRlLCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgZG94eWdlbiwgdGhlIHByb2plY3QgbmFtZSAoc2VlCisjIFBST0pFQ1RfTkFNRSksIG9yIHRoZSBwcm9qZWN0IG51bWJlciAoc2VlIFBST0pFQ1RfTlVNQkVSKS4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBmb290ZXIgZm9yIHRoZQorIyBnZW5lcmF0ZWQgTGFUZVggZG9jdW1lbnQuIFRoZSBmb290ZXIgc2hvdWxkIGNvbnRhaW4gZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdAorIyBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIHN0YW5kYXJkIGZvb3Rlci4KKyMKKyMgTm90ZTogT25seSB1c2UgYSB1c2VyLWRlZmluZWQgZm9vdGVyIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyEKKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0ZPT1RFUiAgICAgICAgICAgPQorCisjIFRoZSBMQVRFWF9FWFRSQV9GSUxFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBleHRyYSBpbWFnZXMgb3IKKyMgb3RoZXIgc291cmNlIGZpbGVzIHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgdG8gdGhlIExBVEVYX09VVFBVVCBvdXRwdXQKKyMgZGlyZWN0b3J5LiBOb3RlIHRoYXQgdGhlIGZpbGVzIHdpbGwgYmUgY29waWVkIGFzLWlzOyB0aGVyZSBhcmUgbm8gY29tbWFuZHMgb3IKKyMgbWFya2VycyBhdmFpbGFibGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9FWFRSQV9GSUxFUyAgICAgID0KKworIyBJZiB0aGUgUERGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBMYVRlWCB0aGF0IGlzIGdlbmVyYXRlZCBpcworIyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBQREYgKHVzaW5nIHBzMnBkZiBvciBwZGZsYXRleCkuIFRoZSBQREYgZmlsZSB3aWxsCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzCisjIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIFBERiB2aWV3ZXIuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIExBVEVYX1BERkxBVEVYIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgdXNlIHBkZmxhdGV4IHRvIGdlbmVyYXRlCisjIHRoZSBQREYgZmlsZSBkaXJlY3RseSBmcm9tIHRoZSBMYVRlWCBmaWxlcy4gU2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0byBnZXQgYQorIyBoaWdoZXIgcXVhbGl0eSBQREYgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgTEFURVhfQkFUQ0hNT0RFIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgYWRkIHRoZSBcYmF0Y2htb2RlCisjIGNvbW1hbmQgdG8gdGhlIGdlbmVyYXRlZCBMYVRlWCBmaWxlcy4gVGhpcyB3aWxsIGluc3RydWN0IExhVGVYIHRvIGtlZXAgcnVubmluZworIyBpZiBlcnJvcnMgb2NjdXIsIGluc3RlYWQgb2YgYXNraW5nIHRoZSB1c2VyIGZvciBoZWxwLiBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQKKyMgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0xBVEVYIGlzIHNldCB0byBZRVMuCisKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworCisjIElmIHRoZSBMQVRFWF9ISURFX0lORElDRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90IGluY2x1ZGUgdGhlCisjIGluZGV4IGNoYXB0ZXJzIChzdWNoIGFzIEZpbGUgSW5kZXgsIENvbXBvdW5kIEluZGV4LCBldGMuKSBpbiB0aGUgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIyBJZiB0aGUgTEFURVhfU09VUkNFX0NPREUgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW5jbHVkZSBzb3VyY2UKKyMgY29kZSB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gdGhlIExhVGVYIG91dHB1dC4KKyMKKyMgTm90ZSB0aGF0IHdoaWNoIHNvdXJjZXMgYXJlIHNob3duIGFsc28gZGVwZW5kcyBvbiBvdGhlciBzZXR0aW5ncyBzdWNoIGFzCisjIFNPVVJDRV9CUk9XU0VSLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9TT1VSQ0VfQ09ERSAgICAgID0gTk8KKworIyBUaGUgTEFURVhfQklCX1NUWUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdHlsZSB0byB1c2UgZm9yIHRoZQorIyBiaWJsaW9ncmFwaHksIGUuZy4gcGxhaW5uYXQsIG9yIGllZWV0ci4gU2VlCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmliVGVYIGFuZCBcY2l0ZSBmb3IgbW9yZSBpbmZvLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcGxhaW4uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9MQVRFWCBpcyBzZXQgdG8gWUVTLgorCitMQVRFWF9CSUJfU1RZTEUgICAgICAgID0gcGxhaW4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQuIFRoZQorIyBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHRvbyBwcmV0dHkgd2l0aCBvdGhlciBSVEYKKyMgcmVhZGVycy9lZGl0b3JzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTworCisjIFRoZSBSVEZfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFJURiBkb2NzIHdpbGwgYmUgcHV0LiBJZiBhCisjIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIHB1dCBpbiBmcm9udCBvZgorIyBpdC4KKyMgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzOiBydGYuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9SVEYgaXMgc2V0IHRvIFlFUy4KKworUlRGX09VVFBVVCAgICAgICAgICAgICA9IHJ0ZgorCisjIElmIHRoZSBDT01QQUNUX1JURiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgUlRGCisjIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gc2F2ZSBzb21lCisjIHRyZWVzIGluIGdlbmVyYWwuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgd2lsbAorIyBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTAorIyBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZQorIyBicm93c2luZyB1c2luZyBXb3JkIG9yIHNvbWUgb3RoZXIgV29yZCBjb21wYXRpYmxlIHJlYWRlcnMgdGhhdCBzdXBwb3J0IHRob3NlCisjIGZpZWxkcy4KKyMKKyMgTm90ZTogV29yZFBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1JURiBpcyBzZXQgdG8gWUVTLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8KKworIyBMb2FkIHN0eWxlc2hlZXQgZGVmaW5pdGlvbnMgZnJvbSBmaWxlLiBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnCisjIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZSByZXBsYWNlbWVudHMsCisjIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorIworIyBTZWUgYWxzbyBzZWN0aW9uICJEb3h5Z2VuIHVzYWdlIiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdlbmVyYXRlIHRoZQorIyBkZWZhdWx0IHN0eWxlIHNoZWV0IHRoYXQgZG94eWdlbiBub3JtYWxseSB1c2VzLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPQorCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBSVEYgZG9jdW1lbnQuIFN5bnRheCBpcworIyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4gQSB0ZW1wbGF0ZSBleHRlbnNpb25zIGZpbGUgY2FuIGJlIGdlbmVyYXRlZAorIyB1c2luZyBkb3h5Z2VuIC1lIHJ0ZiBleHRlbnNpb25GaWxlLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfUlRGIGlzIHNldCB0byBZRVMuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBtYW4gcGFnZXMgZm9yCisjIGNsYXNzZXMgYW5kIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTworCisjIFRoZSBNQU5fT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIG1hbiBwYWdlcyB3aWxsIGJlIHB1dC4gSWYgYQorIyByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4gZnJvbnQgb2YKKyMgaXQuIEEgZGlyZWN0b3J5IG1hbjMgd2lsbCBiZSBjcmVhdGVkIGluc2lkZSB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorIyBNQU5fT1VUUFVULgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IG1hbi4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX01BTiBpcyBzZXQgdG8gWUVTLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQKKyMgbWFuIHBhZ2VzLiBJbiBjYXNlIHRoZSBtYW51YWwgc2VjdGlvbiBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyLCB0aGUgbnVtYmVyCisjIDMgaXMgcHJlcGVuZGVkLiBUaGUgZG90ICguKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNQU5fRVhURU5TSU9OIHRhZyBpcworIyBvcHRpb25hbC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IC4zLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMworCisjIElmIHRoZSBNQU5fTElOS1MgdGFnIGlzIHNldCB0byBZRVMgYW5kIGRveHlnZW4gZ2VuZXJhdGVzIG1hbiBvdXRwdXQsIHRoZW4gaXQKKyMgd2lsbCBnZW5lcmF0ZSBvbmUgYWRkaXRpb25hbCBtYW4gZmlsZSBmb3IgZWFjaCBlbnRpdHkgZG9jdW1lbnRlZCBpbiB0aGUgcmVhbAorIyBtYW4gcGFnZShzKS4gVGhlc2UgYWRkaXRpb25hbCBmaWxlcyBvbmx5IHNvdXJjZSB0aGUgcmVhbCBtYW4gcGFnZSwgYnV0IHdpdGhvdXQKKyMgdGhlbSB0aGUgbWFuIGNvbW1hbmQgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGFnZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfTUFOIGlzIHNldCB0byBZRVMuCisKK01BTl9MSU5LUyAgICAgICAgICAgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1hNTCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYW4gWE1MIGZpbGUgdGhhdAorIyBjYXB0dXJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuIElmIGEKKyMgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgcHV0IGluIGZyb250IG9mCisjIGl0LgorIyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXM6IHhtbC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1hNTCBpcyBzZXQgdG8gWUVTLgorCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCisKKyMgVGhlIFhNTF9TQ0hFTUEgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBYTUwgc2NoZW1hLCB3aGljaCBjYW4gYmUgdXNlZCBieSBhCisjIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX1NDSEVNQSAgICAgICAgICAgICA9CisKKyMgVGhlIFhNTF9EVEQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBYTUwgRFRELCB3aGljaCBjYW4gYmUgdXNlZCBieSBhCisjIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBHRU5FUkFURV9YTUwgaXMgc2V0IHRvIFlFUy4KKworWE1MX0RURCAgICAgICAgICAgICAgICA9CisKKyMgSWYgdGhlIFhNTF9QUk9HUkFNTElTVElORyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZHVtcCB0aGUgcHJvZ3JhbQorIyBsaXN0aW5ncyAoaW5jbHVkaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0bworIyB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplCisjIG9mIHRoZSBYTUwgb3V0cHV0LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgR0VORVJBVEVfWE1MIGlzIHNldCB0byBZRVMuCisKK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgRE9DQk9PSyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfRE9DQk9PSyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgRG9jYm9vayBmaWxlcworIyB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIFBERi4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitHRU5FUkFURV9ET0NCT09LICAgICAgID0gTk8KKworIyBUaGUgRE9DQk9PS19PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgRG9jYm9vayBwYWdlcyB3aWxsIGJlIHB1dC4KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSBwdXQgaW4KKyMgZnJvbnQgb2YgaXQuCisjIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpczogZG9jYm9vay4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX0RPQ0JPT0sgaXMgc2V0IHRvIFlFUy4KKworRE9DQk9PS19PVVRQVVQgICAgICAgICA9IGRvY2Jvb2sKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYW4gQXV0b0dlbgorIyBEZWZpbml0aW9ucyAoc2VlIGh0dHA6Ly9hdXRvZ2VuLnNmLm5ldCkgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsCisjIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisKK0dFTkVSQVRFX0FVVE9HRU5fREVGICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUEVSTE1PRCB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBQZXJsIG1vZHVsZQorIyBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uCisjCisjIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpbmNvbXBsZXRlIGF0IHRoZSBtb21lbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfTEFURVggdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKKyMgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJCisjIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFBFUkxNT0RfUFJFVFRZIHRhZyBpcyBzZXQgdG8gWUVTIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQgd2lsbCBiZSBuaWNlbHkKKyMgZm9ybWF0dGVkIHNvIGl0IGNhbiBiZSBwYXJzZWQgYnkgYSBodW1hbiByZWFkZXIuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvCisjIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoaXMgdGFnIGlzIHNldCB0byBOTyB0aGUKKyMgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQKKyMganVzdCB0aGUgc2FtZS4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9QUkVUVFkgICAgICAgICA9IFlFUworCisjIFRoZSBuYW1lcyBvZiB0aGUgbWFrZSB2YXJpYWJsZXMgaW4gdGhlIGdlbmVyYXRlZCBkb3h5cnVsZXMubWFrZSBmaWxlIGFyZQorIyBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguIFRoaXMgaXMgdXNlZnVsCisjIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZSBNYWtlZmlsZSBkb24ndAorIyBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIHZhcmlhYmxlcy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEdFTkVSQVRFX1BFUkxNT0QgaXMgc2V0IHRvIFlFUy4KKworUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvcgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUyBkb3h5Z2VuIHdpbGwgZXZhbHVhdGUgYWxsCisjIEMtcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgYW5kIGluY2x1ZGUgZmlsZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBleHBhbmQgYWxsIG1hY3JvIG5hbWVzCisjIGluIHRoZSBzb3VyY2UgY29kZS4gSWYgc2V0IHRvIE5PIG9ubHkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2lsbCBiZQorIyBwZXJmb3JtZWQuIE1hY3JvIGV4cGFuc2lvbiBjYW4gYmUgZG9uZSBpbiBhIGNvbnRyb2xsZWQgd2F5IGJ5IHNldHRpbmcKKyMgRVhQQU5EX09OTFlfUFJFREVGIHRvIFlFUy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYUEFORF9PTkxZX1BSRURFRiBhbmQgTUFDUk9fRVhQQU5TSU9OIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuCisjIHRoZSBtYWNybyBleHBhbnNpb24gaXMgbGltaXRlZCB0byB0aGUgbWFjcm9zIHNwZWNpZmllZCB3aXRoIHRoZSBQUkVERUZJTkVEIGFuZAorIyBFWFBBTkRfQVNfREVGSU5FRCB0YWdzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitFWFBBTkRfT05MWV9QUkVERUYgICAgID0gTk8KKworIyBJZiB0aGUgU0VBUkNIX0lOQ0xVREVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZSBpbmNsdWRlcyBmaWxlcyBpbiB0aGUKKyMgSU5DTFVERV9QQVRIIHdpbGwgYmUgc2VhcmNoZWQgaWYgYSAjaW5jbHVkZSBpcyBmb3VuZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEVOQUJMRV9QUkVQUk9DRVNTSU5HIGlzIHNldCB0byBZRVMuCisKK1NFQVJDSF9JTkNMVURFUyAgICAgICAgPSBZRVMKKworIyBUaGUgSU5DTFVERV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnB1dCBmaWxlcyBidXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBieSB0aGUKKyMgcHJlcHJvY2Vzc29yLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgU0VBUkNIX0lOQ0xVREVTIGlzIHNldCB0byBZRVMuCisKK0lOQ0xVREVfUEFUSCAgICAgICAgICAgPQorCisjIFlvdSBjYW4gdXNlIHRoZSBJTkNMVURFX0ZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQKKyMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZQorIyBkaXJlY3Rvcmllcy4gSWYgbGVmdCBibGFuaywgdGhlIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIEZJTEVfUEFUVEVSTlMgd2lsbCBiZQorIyB1c2VkLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9CisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdCBhcmUKKyMgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YgZS5nLgorIyBnY2MpLiBUaGUgYXJndW1lbnQgb2YgdGhlIHRhZyBpcyBhIGxpc3Qgb2YgbWFjcm9zIG9mIHRoZSBmb3JtOiBuYW1lIG9yCisjIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSAiPSIgYXJlIG9taXR0ZWQsICI9MSIKKyMgaXMgYXNzdW1lZC4gVG8gcHJldmVudCBhIG1hY3JvIGRlZmluaXRpb24gZnJvbSBiZWluZyB1bmRlZmluZWQgdmlhICN1bmRlZiBvcgorIyByZWN1cnNpdmVseSBleHBhbmRlZCB1c2UgdGhlIDo9IG9wZXJhdG9yIGluc3RlYWQgb2YgdGhlID0gb3BlcmF0b3IuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0KKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIGFuZCBFWFBBTkRfT05MWV9QUkVERUYgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIHRoaXMKKyMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaXN0IG9mIG1hY3JvIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGUKKyMgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4gVXNlIHRoZSBQUkVERUZJTkVECisjIHRhZyBpZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IG92ZXJydWxlcyB0aGUKKyMgZGVmaW5pdGlvbiBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBFTkFCTEVfUFJFUFJPQ0VTU0lORyBpcyBzZXQgdG8gWUVTLgorCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0KKworIyBJZiB0aGUgU0tJUF9GVU5DVElPTl9NQUNST1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwKKyMgcmVtb3ZlIGFsbCByZWZyZW5jZXMgdG8gZnVuY3Rpb24tbGlrZSBtYWNyb3MgdGhhdCBhcmUgYWxvbmUgb24gYSBsaW5lLCBoYXZlIGFuCisjIGFsbCB1cHBlcmNhc2UgbmFtZSwgYW5kIGRvIG5vdCBlbmQgd2l0aCBhIHNlbWljb2xvbi4gU3VjaCBmdW5jdGlvbiBtYWNyb3MgYXJlCisjIHR5cGljYWxseSB1c2VkIGZvciBib2lsZXItcGxhdGUgY29kZSwgYW5kIHdpbGwgY29uZnVzZSB0aGUgcGFyc2VyIGlmIG5vdAorIyByZW1vdmVkLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgRU5BQkxFX1BSRVBST0NFU1NJTkcgaXMgc2V0IHRvIFlFUy4KKworU0tJUF9GVU5DVElPTl9NQUNST1MgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgVEFHRklMRVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnIGZpbGVzLiBGb3IgZWFjaCB0YWcKKyMgZmlsZSB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGFkZGVkLiBUaGUgZm9ybWF0IG9mCisjIGEgdGFnIGZpbGUgd2l0aG91dCB0aGlzIGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6CisjIFRBR0ZJTEVTID0gZmlsZTE9bG9jMSAiZmlsZTIgPSBsb2MyIiAuLi4KKyMgd2hlcmUgbG9jMSBhbmQgbG9jMiBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgb3IgVVJMcy4gU2VlIHRoZQorIyBzZWN0aW9uICJMaW5raW5nIHRvIGV4dGVybmFsIGRvY3VtZW50YXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2UKKyMgb2YgdGFnIGZpbGVzLgorIyBOb3RlOiBFYWNoIHRhZyBmaWxlIG11c3QgaGF2ZSBhbiB1bmlxdWUgbmFtZSAod2hlcmUgdGhlIG5hbWUgZG9lcyBOT1QgaW5jbHVkZQorIyB0aGUgcGF0aCkuIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuIGlzCisjIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPQorCisjIFdoZW4gYSBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFmdGVyIEdFTkVSQVRFX1RBR0ZJTEUsIGRveHlnZW4gd2lsbCBjcmVhdGUgYQorIyB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4gU2VlIHNlY3Rpb24gIkxpbmtpbmcgdG8KKyMgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbiIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzYWdlIG9mIHRhZyBmaWxlcy4KKworR0VORVJBVEVfVEFHRklMRSAgICAgICA9CisKKyMgSWYgdGhlIEFMTEVYVEVSTkFMUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgY2xhc3Mgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlCisjIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8gb25seSB0aGUgaW5oZXJpdGVkIGV4dGVybmFsIGNsYXNzZXMgd2lsbCBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKworQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYVEVSTkFMX0dST1VQUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgZ3JvdXBzIHdpbGwgYmUgbGlzdGVkIGluCisjIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsIGJlCisjIGxpc3RlZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRFUk5BTF9QQUdFUyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgZXh0ZXJuYWwgcGFnZXMgd2lsbCBiZSBsaXN0ZWQgaW4KKyMgdGhlIHJlbGF0ZWQgcGFnZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgcGFnZXMgd2lsbAorIyBiZSBsaXN0ZWQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0VYVEVSTkFMX1BBR0VTICAgICAgICAgPSBZRVMKKworIyBUaGUgUEVSTF9QQVRIIHNob3VsZCBiZSB0aGUgYWJzb2x1dGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgcGVybCBzY3JpcHQKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiAnd2hpY2ggcGVybCcpLgorIyBUaGUgZGVmYXVsdCBmaWxlICh3aXRoIGFic29sdXRlIHBhdGgpIGlzOiAvdXNyL2Jpbi9wZXJsLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gQFBFUkxACisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGRvdCB0b29sCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNsYXNzIGRpYWdyYW0KKyMgKGluIEhUTUwgYW5kIExhVGVYKSBmb3IgY2xhc3NlcyB3aXRoIGJhc2Ugb3Igc3VwZXIgY2xhc3Nlcy4gU2V0dGluZyB0aGUgdGFnIHRvCisjIE5PIHR1cm5zIHRoZSBkaWFncmFtcyBvZmYuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBhbHNvIHdvcmtzIHdpdGggSEFWRV9ET1QKKyMgZGlzYWJsZWQsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGFuZCB1c2UgZG90LCBzaW5jZSBpdCB5aWVsZHMgbW9yZQorIyBwb3dlcmZ1bCBncmFwaHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisKK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKKworIyBZb3UgY2FuIGRlZmluZSBtZXNzYWdlIHNlcXVlbmNlIGNoYXJ0cyB3aXRoaW4gZG94eWdlbiBjb21tZW50cyB1c2luZyB0aGUgXG1zYworIyBjb21tYW5kLiBEb3h5Z2VuIHdpbGwgdGhlbiBydW4gdGhlIG1zY2dlbiB0b29sIChzZWU6CisjIGh0dHA6Ly93d3cubWN0ZXJuYW4ubWUudWsvbXNjZ2VuLykpIHRvIHByb2R1Y2UgdGhlIGNoYXJ0IGFuZCBpbnNlcnQgaXQgaW4gdGhlCisjIGRvY3VtZW50YXRpb24uIFRoZSBNU0NHRU5fUEFUSCB0YWcgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyMgdGhlIG1zY2dlbiB0b29sIHJlc2lkZXMuIElmIGxlZnQgZW1wdHkgdGhlIHRvb2wgaXMgYXNzdW1lZCB0byBiZSBmb3VuZCBpbiB0aGUKKyMgZGVmYXVsdCBzZWFyY2ggcGF0aC4KKworTVNDR0VOX1BBVEggICAgICAgICAgICA9CisKKyMgWW91IGNhbiBpbmNsdWRlIGRpYWdyYW1zIG1hZGUgd2l0aCBkaWEgaW4gZG94eWdlbiBkb2N1bWVudGF0aW9uLiBEb3h5Z2VuIHdpbGwKKyMgdGhlbiBydW4gZGlhIHRvIHByb2R1Y2UgdGhlIGRpYWdyYW0gYW5kIGluc2VydCBpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlCisjIERJQV9QQVRIIHRhZyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZGlhIGJpbmFyeSByZXNpZGVzLgorIyBJZiBsZWZ0IGVtcHR5IGRpYSBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCitESUFfUEFUSCAgICAgICAgICAgICAgID0KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZSBpbmhlcml0YW5jZQorIyBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIG9yIGlzIG5vdCBhIGNsYXNzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzCisjIGF2YWlsYWJsZSBmcm9tIHRoZSBwYXRoLiBUaGlzIHRvb2wgaXMgcGFydCBvZiBHcmFwaHZpeiAoc2VlOgorIyBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy8pLCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudAorIyBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbiBoYXZlIG5vIGVmZmVjdCBpZiB0aGlzIG9wdGlvbiBpcworIyBzZXQgdG8gTk8KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gQERPWFlHRU5fVVNFX0RPVEAKKworIyBUaGUgRE9UX05VTV9USFJFQURTIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRvdCBpbnZvY2F0aW9ucyBkb3h5Z2VuIGlzIGFsbG93ZWQKKyMgdG8gcnVuIGluIHBhcmFsbGVsLiBXaGVuIHNldCB0byAwIGRveHlnZW4gd2lsbCBiYXNlIHRoaXMgb24gdGhlIG51bWJlciBvZgorIyBwcm9jZXNzb3JzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBZb3UgY2FuIHNldCBpdCBleHBsaWNpdGx5IHRvIGEgdmFsdWUKKyMgbGFyZ2VyIHRoYW4gMCB0byBnZXQgY29udHJvbCBvdmVyIHRoZSBiYWxhbmNlIGJldHdlZW4gQ1BVIGxvYWQgYW5kIHByb2Nlc3NpbmcKKyMgc3BlZWQuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDMyLCBkZWZhdWx0IHZhbHVlOiAwLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX05VTV9USFJFQURTICAgICAgICA9IDAKKworIyBXaGVuIHlvdSB3YW50IGEgZGlmZmVyZW50bHkgbG9va2luZyBmb250IG4gdGhlIGRvdCBmaWxlcyB0aGF0IGRveHlnZW4KKyMgZ2VuZXJhdGVzIHlvdSBjYW4gc3BlY2lmeSB0aGUgZm9udCBuYW1lIHVzaW5nIERPVF9GT05UTkFNRS4gWW91IG5lZWQgdG8gbWFrZQorIyBzdXJlIGRvdCBpcyBhYmxlIHRvIGZpbmQgdGhlIGZvbnQsIHdoaWNoIGNhbiBiZSBkb25lIGJ5IHB1dHRpbmcgaXQgaW4gYQorIyBzdGFuZGFyZCBsb2NhdGlvbiBvciBieSBzZXR0aW5nIHRoZSBET1RGT05UUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBieQorIyBzZXR0aW5nIERPVF9GT05UUEFUSCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZvbnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBIZWx2ZXRpY2EuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfRk9OVE5BTUUgICAgICAgICAgID0gSGVsdmV0aWNhCisKKyMgVGhlIERPVF9GT05UU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzaXplIChpbiBwb2ludHMpIG9mIHRoZSBmb250IG9mCisjIGRvdCBncmFwaHMuCisjIE1pbmltdW0gdmFsdWU6IDQsIG1heGltdW0gdmFsdWU6IDI0LCBkZWZhdWx0IHZhbHVlOiAxMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9GT05UU0laRSAgICAgICAgICAgPSAxMAorCisjIEJ5IGRlZmF1bHQgZG94eWdlbiB3aWxsIHRlbGwgZG90IHRvIHVzZSB0aGUgZGVmYXVsdCBmb250IGFzIHNwZWNpZmllZCB3aXRoCisjIERPVF9GT05UTkFNRS4gSWYgeW91IHNwZWNpZnkgYSBkaWZmZXJlbnQgZm9udCB1c2luZyBET1RfRk9OVE5BTUUgeW91IGNhbiBzZXQKKyMgdGhlIHBhdGggd2hlcmUgZG90IGNhbiBmaW5kIGl0IHVzaW5nIHRoaXMgdGFnLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0ZPTlRQQVRIICAgICAgICAgICA9CisKKyMgSWYgdGhlIENMQVNTX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yCisjIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4KKyMgU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUgQ0xBU1NfRElBR1JBTVMgdGFnIHRvIE5PLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0xBU1NfR1JBUEggICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDT0xMQUJPUkFUSU9OX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEKKyMgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGltcGxlbWVudGF0aW9uCisjIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQgY2xhc3MgcmVmZXJlbmNlcyB2YXJpYWJsZXMpIG9mIHRoZQorIyBjbGFzcyB3aXRoIG90aGVyIGRvY3VtZW50ZWQgY2xhc3Nlcy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgR1JPVVBfR1JBUEhTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yCisjIGdyb3Vwcywgc2hvd2luZyB0aGUgZGlyZWN0IGdyb3VwcyBkZXBlbmRlbmNpZXMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUk9VUF9HUkFQSFMgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVNTF9MT09LIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBpbmhlcml0YW5jZSBhbmQKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcKKyMgTGFuZ3VhZ2UuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK1VNTF9MT09LICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBVTUxfTE9PSyB0YWcgaXMgZW5hYmxlZCwgdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBhcmUgc2hvd24gaW5zaWRlIHRoZQorIyBjbGFzcyBub2RlLiBJZiB0aGVyZSBhcmUgbWFueSBmaWVsZHMgb3IgbWV0aG9kcyBhbmQgbWFueSBub2RlcyB0aGUgZ3JhcGggbWF5CisjIGJlY29tZSB0b28gYmlnIHRvIGJlIHVzZWZ1bC4gVGhlIFVNTF9MSU1JVF9OVU1fRklFTERTIHRocmVzaG9sZCBsaW1pdHMgdGhlCisjIG51bWJlciBvZiBpdGVtcyBmb3IgZWFjaCB0eXBlIHRvIG1ha2UgdGhlIHNpemUgbW9yZSBtYW5hZ2VhYmxlLiBTZXQgdGhpcyB0byAwCisjIGZvciBubyBsaW1pdC4gTm90ZSB0aGF0IHRoZSB0aHJlc2hvbGQgbWF5IGJlIGV4Y2VlZGVkIGJ5IDUwJSBiZWZvcmUgdGhlIGxpbWl0CisjIGlzIGVuZm9yY2VkLiBTbyB3aGVuIHlvdSBzZXQgdGhlIHRocmVzaG9sZCB0byAxMCwgdXAgdG8gMTUgZmllbGRzIG1heSBhcHBlYXIsCisjIGJ1dCBpZiB0aGUgbnVtYmVyIGV4Y2VlZHMgMTUsIHRoZSB0b3RhbCBhbW91bnQgb2YgZmllbGRzIHNob3duIGlzIGxpbWl0ZWQgdG8KKyMgMTAuCisjIE1pbmltdW0gdmFsdWU6IDAsIG1heGltdW0gdmFsdWU6IDEwMCwgZGVmYXVsdCB2YWx1ZTogMTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitVTUxfTElNSVRfTlVNX0ZJRUxEUyAgID0gMTAKKworIyBJZiB0aGUgVEVNUExBVEVfUkVMQVRJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGluaGVyaXRhbmNlIGFuZAorIyBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIHNob3cgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIKKyMgaW5zdGFuY2VzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gTk8KKworIyBJZiB0aGUgSU5DTFVERV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZSBzZXQgdG8KKyMgWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcgdGhlCisjIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBJTkNMVURFRF9CWV9HUkFQSCwgRU5BQkxFX1BSRVBST0NFU1NJTkcgYW5kIFNFQVJDSF9JTkNMVURFUyB0YWdzIGFyZQorIyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBmaWxlIHNob3dpbmcKKyMgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGZpbGUgd2l0aCBvdGhlciBkb2N1bWVudGVkCisjIGZpbGVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworSU5DTFVERURfQllfR1JBUEggICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMX0dSQVBIIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbAorIyBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gb3IgY2xhc3MgbWV0aG9kLgorIworIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLgorIyBTbyBpbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGVuYWJsZSBjYWxsIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZ3JhcGggY29tbWFuZC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworQ0FMTF9HUkFQSCAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMRVJfR1JBUEggdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBjYWxsZXIKKyMgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4KKyMKKyMgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgdGltZSBvZiBhIHJ1bi4KKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbGVyIGdyYXBocyBmb3Igc2VsZWN0ZWQKKyMgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZXJncmFwaCBjb21tYW5kLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogTk8uCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitDQUxMRVJfR1JBUEggICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEdSQVBISUNBTF9ISUVSQVJDSFkgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ3JhcGhpY2FsCisjIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBZRVMuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitHUkFQSElDQUxfSElFUkFSQ0hZICAgID0gWUVTCisKKyMgSWYgdGhlIERJUkVDVE9SWV9HUkFQSCB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IHRoZQorIyBkZXBlbmRlbmNpZXMgYSBkaXJlY3RvcnkgaGFzIG9uIG90aGVyIGRpcmVjdG9yaWVzIGluIGEgZ3JhcGhpY2FsIHdheS4gVGhlCisjIGRlcGVuZGVuY3kgcmVsYXRpb25zIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSAjaW5jbHVkZSByZWxhdGlvbnMgYmV0d2VlbiB0aGUKKyMgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogWUVTLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRElSRUNUT1JZX0dSQVBIICAgICAgICA9IFlFUworCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzCisjIGdlbmVyYXRlZCBieSBkb3QuCisjIE5vdGU6IElmIHlvdSBjaG9vc2Ugc3ZnIHlvdSBuZWVkIHRvIHNldCBIVE1MX0ZJTEVfRVhURU5TSU9OIHRvIHhodG1sIGluIG9yZGVyCisjIHRvIG1ha2UgdGhlIFNWRyBmaWxlcyB2aXNpYmxlIGluIElFIDkrIChvdGhlciBicm93c2VycyBkbyBub3QgaGF2ZSB0aGlzCisjIHJlcXVpcmVtZW50KS4KKyMgUG9zc2libGUgdmFsdWVzIGFyZTogcG5nLCBqcGcsIGdpZiBhbmQgc3ZnLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpczogcG5nLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIElmIERPVF9JTUFHRV9GT1JNQVQgaXMgc2V0IHRvIHN2ZywgdGhlbiB0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIFlFUyB0bworIyBlbmFibGUgZ2VuZXJhdGlvbiBvZiBpbnRlcmFjdGl2ZSBTVkcgaW1hZ2VzIHRoYXQgYWxsb3cgem9vbWluZyBhbmQgcGFubmluZy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBtb2Rlcm4gYnJvd3NlciBvdGhlciB0aGFuIEludGVybmV0IEV4cGxvcmVyLiBUZXN0ZWQKKyMgYW5kIHdvcmtpbmcgYXJlIEZpcmVmb3gsIENocm9tZSwgU2FmYXJpLCBhbmQgT3BlcmEuCisjIE5vdGU6IEZvciBJRSA5KyB5b3UgbmVlZCB0byBzZXQgSFRNTF9GSUxFX0VYVEVOU0lPTiB0byB4aHRtbCBpbiBvcmRlciB0byBtYWtlCisjIHRoZSBTVkcgZmlsZXMgdmlzaWJsZS4gT2xkZXIgdmVyc2lvbnMgb2YgSUUgZG8gbm90IGhhdmUgU1ZHIHN1cHBvcnQuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0lOVEVSQUNUSVZFX1NWRyAgICAgICAgPSBOTworCisjIFRoZSBET1RfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfUEFUSCAgICAgICAgICAgICAgID0KKworIyBUaGUgRE9URklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBkb3QgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXGRvdGZpbGUKKyMgY29tbWFuZCkuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RGSUxFX0RJUlMgICAgICAgICAgID0KKworIyBUaGUgTVNDRklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQKKyMgY29udGFpbiBtc2MgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgXG1zY2ZpbGUKKyMgY29tbWFuZCkuCisKK01TQ0ZJTEVfRElSUyAgICAgICAgICAgPQorCisjIFRoZSBESUFGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdAorIyBjb250YWluIGRpYSBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBcZGlhZmlsZQorIyBjb21tYW5kKS4KKworRElBRklMRV9ESVJTICAgICAgICAgICA9CisKKyMgVGhlIERPVF9HUkFQSF9NQVhfTk9ERVMgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMKKyMgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBncmFwaC4gSWYgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhIGdyYXBoIGJlY29tZXMKKyMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRydW5jYXRlIHRoZSBncmFwaCwgd2hpY2ggaXMgdmlzdWFsaXplZAorIyBieSByZXByZXNlbnRpbmcgYSBub2RlIGFzIGEgcmVkIGJveC4gTm90ZSB0aGF0IGRveHlnZW4gaWYgdGhlIG51bWJlciBvZiBkaXJlY3QKKyMgY2hpbGRyZW4gb2YgdGhlIHJvb3Qgbm9kZSBpbiBhIGdyYXBoIGlzIGFscmVhZHkgbGFyZ2VyIHRoYW4KKyMgRE9UX0dSQVBIX01BWF9OT0RFUyB0aGVuIHRoZSBncmFwaCB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuIEFsc28gbm90ZSB0aGF0CisjIHRoZSBzaXplIG9mIGEgZ3JhcGggY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZCBieSBNQVhfRE9UX0dSQVBIX0RFUFRILgorIyBNaW5pbXVtIHZhbHVlOiAwLCBtYXhpbXVtIHZhbHVlOiAxMDAwMCwgZGVmYXVsdCB2YWx1ZTogNTAuCisjIFRoaXMgdGFnIHJlcXVpcmVzIHRoYXQgdGhlIHRhZyBIQVZFX0RPVCBpcyBzZXQgdG8gWUVTLgorCitET1RfR1JBUEhfTUFYX05PREVTICAgID0gNTAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBncmFwaHMKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gQSBkZXB0aCB2YWx1ZSBvZiAzIG1lYW5zIHRoYXQgb25seSBub2RlcyByZWFjaGFibGUgZnJvbSB0aGUKKyMgcm9vdCBieSBmb2xsb3dpbmcgYSBwYXRoIHZpYSBhdCBtb3N0IDMgZWRnZXMgd2lsbCBiZSBzaG93bi4gTm9kZXMgdGhhdCBsYXkKKyMgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAxCisjIG9yIDIgbWF5IGdyZWF0bHkgcmVkdWNlIHRoZSBjb21wdXRhdGlvbiB0aW1lIG5lZWRlZCBmb3IgbGFyZ2UgY29kZSBiYXNlcy4gQWxzbworIyBub3RlIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5CisjIERPVF9HUkFQSF9NQVhfTk9ERVMuIFVzaW5nIGEgZGVwdGggb2YgMCBtZWFucyBubyBkZXB0aCByZXN0cmljdGlvbi4KKyMgTWluaW11bSB2YWx1ZTogMCwgbWF4aW11bSB2YWx1ZTogMTAwMCwgZGVmYXVsdCB2YWx1ZTogMC4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK01BWF9ET1RfR1JBUEhfREVQVEggICAgPSAwCisKKyMgU2V0IHRoZSBET1RfVFJBTlNQQVJFTlQgdGFnIHRvIFlFUyB0byBnZW5lcmF0ZSBpbWFnZXMgd2l0aCBhIHRyYW5zcGFyZW50CisjIGJhY2tncm91bmQuIFRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBkb3Qgb24gV2luZG93cyBkb2VzIG5vdCBzZWVtCisjIHRvIHN1cHBvcnQgdGhpcyBvdXQgb2YgdGhlIGJveC4KKyMKKyMgV2FybmluZzogRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSB1c2VkLCBlbmFibGluZyB0aGlzIG9wdGlvbiBtYXkgbGVhZCB0bworIyBiYWRseSBhbnRpLWFsaWFzZWQgbGFiZWxzIG9uIHRoZSBlZGdlcyBvZiBhIGdyYXBoIChpLmUuIHRoZXkgYmVjb21lIGhhcmQgdG8KKyMgcmVhZCkuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzOiBOTy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9UUkFOU1BBUkVOVCAgICAgICAgPSBOTworCisjIFNldCB0aGUgRE9UX01VTFRJX1RBUkdFVFMgdGFnIHRvIFlFUyBhbGxvdyBkb3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgb3V0cHV0CisjIGZpbGVzIGluIG9uZSBydW4gKGkuZS4gbXVsdGlwbGUgLW8gYW5kIC1UIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSkuIFRoaXMKKyMgbWFrZXMgZG90IHJ1biBmYXN0ZXIsIGJ1dCBzaW5jZSBvbmx5IG5ld2VyIHZlcnNpb25zIG9mIGRvdCAoPjEuOC4xMCkgc3VwcG9ydAorIyB0aGlzLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IE5PLgorIyBUaGlzIHRhZyByZXF1aXJlcyB0aGF0IHRoZSB0YWcgSEFWRV9ET1QgaXMgc2V0IHRvIFlFUy4KKworRE9UX01VTFRJX1RBUkdFVFMgICAgICA9IFlFUworCisjIElmIHRoZSBHRU5FUkFURV9MRUdFTkQgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgbGVnZW5kIHBhZ2UKKyMgZXhwbGFpbmluZyB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBib3hlcyBhbmQgYXJyb3dzIGluIHRoZSBkb3QgZ2VuZXJhdGVkCisjIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0dFTkVSQVRFX0xFR0VORCAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRE9UX0NMRUFOVVAgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGRvdAorIyBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2YXJpb3VzIGdyYXBocy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXM6IFlFUy4KKyMgVGhpcyB0YWcgcmVxdWlyZXMgdGhhdCB0aGUgdGFnIEhBVkVfRE9UIGlzIHNldCB0byBZRVMuCisKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtZG9jLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS1kb2MuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkN2VmMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtZG9jLmFtCkBAIC0wLDAgKzEsMTAyIEBACisjCisjICAgIENvcHlyaWdodCAyMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIEdOVSBhdXRvbWFrZSB0ZW1wbGF0ZSBmb3IgdGhlIEBQQUNLQUdFX0RFU0NSSVBUSU9OQAorIyAgICAgIGluLXBhY2thZ2UsIGRvY3VtZW50YXRpb24uCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjCisjIE92ZXJyaWRlIGF1dG90b29sJ3MgZGVmYXVsdCBub3Rpb24gb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiB2YXJpYWJsZXMuCisjIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gd2UgY3JlYXRlIGEgZG9jIGRpc3RyaWJ1dGlvbiB0aGF0IHRoZQorIyB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgY3VycmVudCB2ZXJzaW9uLCBub3QgdGhlIHZlcnNpb24gd2hlbiB0aGUKKyMgcGFja2FnZSB3YXMgYm9vdHN0cmFwcGVkLgorIworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkKHNoZWxsIGNhdCAkKHRvcF9idWlsZGRpcikvLmxvY2FsLXZlcnNpb24pCitWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCisKK2RvY2Rpc3RkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz0gLgorCitAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9hbGlhcyAgICAgICAgICAgICA9IFwKKyAgICAkKFBBQ0tBR0VfVEFSTkFNRSktZG9jcworCitAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9uYW1lICAgICAgICAgICAgICA9IFwKKyAgICAkKEBQQUNLQUdFX1NIT1JUX0xPV0VSQF9kb2NkaXN0X2FsaWFzKS0kKFZFUlNJT04pCisKK0BQQUNLQUdFX1NIT1JUX0xPV0VSQF9kb2NkaXN0X2FyY2hpdmUgICAgICAgICAgID0gXAorICAgICQoZG9jZGlzdGRpcikvJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9uYW1lKS50YXIuZ3oKKworQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgRG94eWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKEBQQUNLQUdFX1NIT1JUX0xPV0VSQF9kb2NkaXN0X2FyY2hpdmUpICAgICAgXAorICAgICQoTlVMTCkKKworaWYgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0RPQ1MKKworYWxsLWxvY2FsOiBodG1sL2luZGV4Lmh0bWwKKworIworIyBXZSBjaG9vc2UgdG8gbWFudWFsbHkgdHJhbnNmb3JtIERveHlmaWxlLmluIGludG8gRG94eWZpbGUgaGVyZSBpbgorIyB0aGUgbWFrZWZpbGUgcmF0aGVyIHRoYW4gaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCB3ZSBjYW4gdGFrZQorIyBhZHZhbnRhZ2Ugb2YgbGl2ZSwgYXQgYnVpbGQgdGltZSAocmF0aGVyIHRoYW4gYXQgY29uZmlndXJlIHRpbWUpLAorIyB1cGRhdGluZyBvZiB0aGUgcGFja2FnZSB2ZXJzaW9uIG51bWJlci4KKyMKKworRG94eWZpbGU6ICQoc3JjZGlyKS9Eb3h5ZmlsZS5pbiBNYWtlZmlsZQorCSQoQU1fVl9HRU4pJChTRUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgLWUgInMsXEBET1hZR0VOX1VTRV9ET1RcQCwkKERPWFlHRU5fVVNFX0RPVCksZyIgICBcCisJICAgIC1lICJzLFxAUEFDS0FHRV9OQU1FXEAsJChQQUNLQUdFX05BTUUpLGciICAgICAgICAgXAorCSAgICAtZSAicyxcQFBBQ0tBR0VfVkVSU0lPTlxALCQoUEFDS0FHRV9WRVJTSU9OKSxnIiAgIFwKKwkgICAgLWUgInMsXEBQRVJMXEAsJChQRVJMKSxnIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIC1lICJzLFxAYWJzX2J1aWxkZGlyXEAsJChhYnNfYnVpbGRkaXIpLGciICAgICAgICAgXAorCSAgICAtZSAicyxcQGFic19zcmNkaXJcQCwkKGFic19zcmNkaXIpLGciICAgICAgICAgICAgIFwKKwkgICAgLWUgInMsXEBhYnNfdG9wX2J1aWxkZGlyXEAsJChhYnNfdG9wX2J1aWxkZGlyKSxnIiBcCisJICAgIC1lICJzLFxAYWJzX3RvcF9zcmNkaXJcQCwkKGFic190b3Bfc3JjZGlyKSxnIiAgICAgXAorCSAgICA8ICIkKHNyY2RpcikvRG94eWZpbGUuaW4iID4gIiQoQCkiCisKK2h0bWwvaW5kZXguaHRtbDogRG94eWZpbGUKKwkkKEFNX1ZfR0VOKSQoRE9YWUdFTikgJCg8KQorCisjCisjIEFkZGl0aW9uIHJ1bGVzIGFuZCBjb21tYW5kcyB0byBjcmVhdGUgYSBkb2N1bWVudGF0aW9uLW9ubHkKKyMgZGlzdHJpYnV0aW9uIG9mIEBQQUNLQUdFX1NIT1JUX0xPV0VSQAorIworCiskKEBQQUNLQUdFX1NIT1JUX0xPV0VSQF9kb2NkaXN0X25hbWUpOiBodG1sL2luZGV4Lmh0bWwKKwkkKEFNX1ZfYXQpcm0gLWYgLXIgJChAKQorCSQoY2FsbCBjcmVhdGUtZGlyZWN0b3J5KQorCSQoQU1fVl9hdCljcCAtUiBodG1sICQoQCkKKworJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9hcmNoaXZlKTogJChAUEFDS0FHRV9TSE9SVF9MT1dFUkBfZG9jZGlzdF9uYW1lKQorCSQoQU1fVl9hdCllY2hvICIgIFRBUiAgICAgICQoQCkiCisJJChBTV9WX2F0KXRhcmRpcj0iJCg8KSIgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+ICIkKEApIiAmJiBybSAtcmYgJCg8KQorCitkb2NkaXN0ICQoQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX2RvY2Rpc3RfYWxpYXMpOiAkKEBQQUNLQUdFX1NIT1JUX0xPV0VSQF9kb2NkaXN0X2FyY2hpdmUpCisKK2NsZWFuLWxvY2FsOgorCSQoQU1fVl9hdClybSAtZiAtciBodG1sCisKK2VuZGlmICMgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0RPQ1MKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLWZwcy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtZnBzLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLWZwcy5hbQpAQCAtMCwwICsxLDI4IEBACisjCisjICAgIENvcHlyaWdodCAyMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgdGhlIEdOVSBhdXRvbWFrZSB0ZW1wbGF0ZSBmb3IgdGhlIEBQQUNLQUdFX0RFU0NSSVBUSU9OQAorIyAgICAgIGZpcnN0LXBhcnR5IChlLmcuIE5lc3QgTGFicykgc29mdHdhcmUgZGlyZWN0b3J5LgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitTVUJESVJTICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtc3JjLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS1zcmMuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU1Y2JjYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtc3JjLmFtCkBAIC0wLDAgKzEsNDIgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgR05VIGF1dG9tYWtlIHRlbXBsYXRlIGZvciB0aGUgQFBBQ0tBR0VfREVTQ1JJUFRJT05ALgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCitsaWJfTElCUkFSSUVTICAgICAgICAgICAgICAgICAgICAgICA9IGxpYkBQQUNLQUdFX1NIT1JUX0xPV0VSQC5hCisKK2xpYkBQQUNLQUdFX1NIT1JUX0xPV0VSQF9hX0NQUEZMQUdTID0gXAorICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitsaWJAUEFDS0FHRV9TSE9SVF9MT1dFUkBfYV9TT1VSQ0VTICA9IEBQQUNLQUdFX1NIT1JUX0xPV0VSQC5jCisKK2luY2x1ZGVfSEVBREVSUyAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIEBQQUNLQUdFX1NIT1JUX0xPV0VSQC5oICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbnN0YWxsLWhlYWRlcnM6IGluc3RhbGwtaW5jbHVkZUhFQURFUlMKKworaWYgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0NPVkVSQUdFCitDTEVBTkZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0NPVkVSQUdFCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS10ZXN0cy5hbSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtdGVzdHMuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiOTRkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvTWFrZWZpbGUtdGVzdHMuYW0KQEAgLTAsMCArMSwxMDcgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgR05VIGF1dG9tYWtlIHRlbXBsYXRlIGZvciB0aGUgQFBBQ0tBR0VfREVTQ1JJUFRJT05ACisjICAgICAgdW5pdCB0ZXN0cy4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworIworIyBMb2NhbCBoZWFkZXJzIHRvIGJ1aWxkIGFnYWluc3QgYW5kIGRpc3RyaWJ1dGUgYnV0IG5vdCB0byBpbnN0YWxsCisjIHNpbmNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorIworbm9pbnN0X0hFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAUEFDS0FHRV9TSE9SVF9MT1dFUkAtdGVzdC5oICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjCisjIE90aGVyIGZpbGVzIHdlIGRvIHdhbnQgdG8gZGlzdHJpYnV0ZSB3aXRoIHRoZSBwYWNrYWdlLgorIworRVhUUkFfRElTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK2lmIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9URVNUUworIyBDIHByZXByb2Nlc3NvciBvcHRpb24gZmxhZ3MgdGhhdCB3aWxsIGFwcGx5IHRvIGFsbCBjb21waWxlZCBvYmplY3RzIGluIHRoaXMKKyMgbWFrZWZpbGUuCisKK0FNX0NQUEZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworQ09NTU9OX0xEQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAtTCR7dG9wX2J1aWxkZGlyfS9zcmMgLWxAUEFDS0FHRV9TSE9SVF9MT1dFUkAKKyAgICAkKE5VTEwpCisKKyMgVGVzdCBhcHBsaWNhdGlvbnMgdGhhdCBzaG91bGQgYmUgcnVuIHdoZW4gdGhlICdjaGVjaycgdGFyZ2V0IGlzIHJ1bi4KKworY2hlY2tfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBAUEFDS0FHRV9TSE9SVF9MT1dFUkAtdGVzdCAgICAgICAgICAgICAgICAgICBcCisgICAgQFBBQ0tBR0VfU0hPUlRfTE9XRVJALXRlc3QtY3h4ICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIyBUZXN0IGFwcGxpY2F0aW9ucyBhbmQgc2NyaXB0cyB0aGF0IHNob3VsZCBiZSBidWlsdCBhbmQgcnVuIHdoZW4gdGhlCisjICdjaGVjaycgdGFyZ2V0IGlzIHJ1bi4KKworVEVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKGNoZWNrX1BST0dSQU1TKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCisjIFRoZSBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlaXIgdmFsdWVzIHRoYXQgd2lsbCBiZQorIyBtYWRlIGF2YWlsYWJsZSB0byBhbGwgcHJvZ3JhbXMgYW5kIHNjcmlwdHMgaW4gVEVTVFMuCisKK1RFU1RTX0VOVklST05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCisjIFNvdXJjZSwgY29tcGlsZXIsIGFuZCBsaW5rZXIgb3B0aW9ucyBmb3IgdGVzdCBwcm9ncmFtcy4KKworQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX3Rlc3RfTERBREQgICAgICAgICAgICAgICA9ICQoQ09NTU9OX0xEQUREKQorQFBBQ0tBR0VfU0hPUlRfTE9XRVJAX3Rlc3RfU09VUkNFUyAgICAgICAgICAgICA9IEBQQUNLQUdFX1NIT1JUX0xPV0VSQC10ZXN0LmMgICAgICAgICAgICAgICAgIAorCitAUEFDS0FHRV9TSE9SVF9MT1dFUkBfdGVzdF9jeHhfTERBREQgICAgICAgICAgID0gJChDT01NT05fTERBREQpCitAUEFDS0FHRV9TSE9SVF9MT1dFUkBfdGVzdF9jeHhfU09VUkNFUyAgICAgICAgID0gQFBBQ0tBR0VfU0hPUlRfTE9XRVJALXRlc3QtY3h4LmNwcCAgICAgICAgICAgCisKK2lmIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKKworaWYgQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0NPVkVSQUdFX1JFUE9SVFMKKyMgVGhlIGJ1bmRsZSBzaG91bGQgcG9zaXRpdmVseSBiZSBxdWFsaWZpZWQgd2l0aCB0aGUgYWJzb2x1dGUgYnVpbGQKKyMgcGF0aC4gT3RoZXJ3aXNlLCBWUEFUSCB3aWxsIGdldCBhdXRvLXByZWZpeGVkIHRvIGl0IGlmIHRoZXJlIGlzCisjIGFscmVhZHkgc3VjaCBhIGRpcmVjdG9yeSBpbiB0aGUgbm9uLWNvbG9jYXRlZCBzb3VyY2UgdHJlZS4KKworQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0NPVkVSQUdFX0JVTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJHthYnNfYnVpbGRkaXJ9LyR7UEFDS0FHRX0ke05MX0NPVkVSQUdFX0JVTkRMRV9TVUZGSVh9CitAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQ09WRVJBR0VfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAke0BQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9CVU5ETEV9LyR7UEFDS0FHRX0ke05MX0NPVkVSQUdFX0lORk9fU1VGRklYfQorCiskKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9CVU5ETEUpOgorCSQoY2FsbCBjcmVhdGUtZGlyZWN0b3J5KQorCiskKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9JTkZPKTogY2hlY2sgfCAkKGRpciAkKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9JTkZPKSkKKwkkKGNhbGwgZ2VuZXJhdGUtY292ZXJhZ2UtcmVwb3J0LCR7dG9wX2J1aWxkZGlyfSkKKworY292ZXJhZ2U6ICQoQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0NPVkVSQUdFX0lORk8pCisKK2NsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1jb3ZlcmFnZQorCisuUEhPTlk6IGNsZWFuLWxvY2FsLWNvdmVyYWdlCitjbGVhbi1sb2NhbC1jb3ZlcmFnZToKKwktJChBTV9WX2F0KXJtIC1yZiAkKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9DT1ZFUkFHRV9CVU5ETEUpCitlbmRpZiAjIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTCitlbmRpZiAjIEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRQorZW5kaWYgIyBAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfVEVTVFMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL01ha2VmaWxlLXRvcGxldmVsLmFtIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS10b3BsZXZlbC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjA1OGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9NYWtlZmlsZS10b3BsZXZlbC5hbQpAQCAtMCwwICsxLDE1MyBAQAorIworIyAgICBDb3B5cmlnaHQgMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBHTlUgYXV0b21ha2UgdGVtcGxhdGUgZm9yIHRoZSBAUEFDS0FHRV9ERVNDUklQVElPTkAuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0FNX01BS0VGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLS1uby1wcmludC1kaXJlY3RvcnkKKworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIC5kZWZhdWx0LXZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYm9vdHN0cmFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBib290c3RyYXAtY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoc3JjZGlyKS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scyBcCisgICAgJChOVUxMKQorCitCVUlMVF9TT1VSQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAubG9jYWwtdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworZGlzdF9kb2NfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitESVNUQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAubG9jYWwtdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworIworIyBQYWNrYWdlIHZlcnNpb24gZmlsZXM6CisjCisjIC5kZWZhdWx0LXZlcnNpb24gLSBUaGUgZGVmYXVsdCBwYWNrYWdlIHZlcnNpb24uIFRoaXMgZmlsZSBpcyBBTFdBWVMgY2hlY2tlZAorIyAgICAgICAgICAgICAgICAgICAgaW4gYW5kIHNob3VsZCBhbHdheXMgcmVwcmVzZW50IHRoZSBjdXJyZW50IGJhc2VsaW5lCisjICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLgorIworIyAuZGlzdC12ZXJzaW9uICAgIC0gVGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgdmVyc2lvbi4gVGhpcyBmaWxlIGlzIE5FVkVSCisjICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGluIHdpdGhpbiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSwgaXMgYXV0by0KKyMgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCwgYW5kIGlzIG9ubHkgZm91bmQgaW4gdGhlIHBhY2thZ2UgZGlzdHJpYnV0aW9uLgorIworIyAubG9jYWwtdmVyc2lvbiAgIC0gVGhlIGN1cnJlbnQgc291cmNlIGNvZGUgY29udHJvbGxlZCBwYWNrYWdlIHZlcnNpb24uIFRoaXMKKyMgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgTkVWRVIgY2hlY2tlZCBpbiB3aXRoaW4gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksCisjICAgICAgICAgICAgICAgICAgICBpcyBhdXRvLWdlbmVyYXRlZCwgYW5kIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gYm90aCB0aGUKKyMgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRyZWUgYW5kIGRpc3RyaWJ1dGlvbi4KKyMKKyMgV2hlbiBwcmVzZW50LCB0aGUgLmxvY2FsLXZlcnNpb24gZmlsZSBpcyBwcmVmZXJyZWQgZmlyc3QsIHRoZQorIyAuZGlzdC12ZXJzaW9uIHNlY29uZCwgYW5kIHRoZSAuZGVmYXVsdC12ZXJzaW9uIGxhc3QuCisjCisKK1ZFUlNJT05fRklMRSAgICAgICAgICAgICAgICAgICAgICA6PSAkKGlmICQod2lsZGNhcmQgJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb24pLCQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uLCQoaWYgJCh3aWxkY2FyZCAkKHNyY2RpcikvLmRpc3QtdmVyc2lvbiksJChzcmNkaXIpLy5kaXN0LXZlcnNpb24sJChzcmNkaXIpLy5kZWZhdWx0LXZlcnNpb24pKQorCisjCisjIE92ZXJyaWRlIGF1dG90b29sJ3MgZGVmYXVsdCBub3Rpb24gb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiB2YXJpYWJsZXMuCisjIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gd2UgY3JlYXRlIGEgc291cmNlIGRpc3RyaWJ1dGlvbiB0aGF0IHRoZQorIyB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgY3VycmVudCB2ZXJzaW9uLCBub3QgdGhlIHZlcnNpb24gd2hlbiB0aGUKKyMgcGFja2FnZSB3YXMgYm9vdHN0cmFwcGVkLgorIworCitAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTiAgICAgPz0gJChzaGVsbCBjYXQgJChWRVJTSU9OX0ZJTEUpIDI+IC9kZXYvbnVsbCkKKworUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9ICQoQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT04pCitWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJChQQUNLQUdFX1ZFUlNJT04pCisKKyMKKyMgY2hlY2stZmlsZS0ubG9jYWwtdmVyc2lvbgorIworIyBTcGVjdWxhdGl2ZWx5IHJlZ2VuZXJhdGUgLmxvY2FsLXZlcnNpb24gYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBuZWVkcworIyB0byBiZSB1cGRhdGVkLgorIworIyBJZiBAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTiBoYXMgYmVlbiBzdXBwbGllZCBhbnl3aGVyZSBvdGhlciB0aGFuIGluIHRoaXMgZmlsZQorIyAod2hpY2ggaXMgaW1wbGljaXRseSB0aGUgY29udGVudHMgb2YgLmxvY2FsLXZlcnNpb24pLCB0aGVuIHVzZSB0aGF0OworIyBvdGhlcndpc2UsIGF0dGVtcHQgdG8gZ2VuZXJhdGUgaXQgZnJvbSB0aGUgU0NNIHN5c3RlbS4KKyMKKyMgVGhpcyBpcyBjYWxsZWQgZnJvbSAkKGNhbGwgY2hlY2stZmlsZSwubG9jYWwtdmVyc2lvbikuCisjCitkZWZpbmUgY2hlY2stZmlsZS0ubG9jYWwtdmVyc2lvbgoraWYgWyAiJChvcmlnaW4gQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT04pIiAhPSAiZmlsZSIgXTsgdGhlbiBcCisgICAgZWNobyAiJChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTikiID4gIiQoMikiOyAgICAgICAgICAgIFwKK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL3NjcmlwdHMvbWt2ZXJzaW9uICAgICAgICAgICBcCisgICAgICAgIC1iICIkKEBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OKSIgIiQodG9wX3NyY2RpcikiICAgIFwKKyAgICAgICAgPiAiJCgyKSI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZmkKK2VuZGVmCisKKyMKKyMgY2hlY2stZmlsZS0uZGlzdC12ZXJzaW9uCisjCisjIFNwZWN1bGF0aXZlbHkgcmVnZW5lcmF0ZSAuZGlzdC12ZXJzaW9uIGFuZCBjaGVjayB0byBzZWUgaWYgaXQgbmVlZHMKKyMgdG8gYmUgdXBkYXRlZC4KKyMKKyMgVGhpcyBpcyBjYWxsZWQgZnJvbSAkKGNhbGwgY2hlY2stZmlsZSwuZGlzdC12ZXJzaW9uKS4KKyMKK2RlZmluZSBjaGVjay1maWxlLS5kaXN0LXZlcnNpb24KK2NhdCAiJCgxKSIgPiAiJCgyKSIKK2VuZGVmCisKKyMKKyMgQSBjb252ZW5pZW5jZSB0YXJnZXQgdG8gYWxsb3cgcGFja2FnZSB1c2VycyB0byBlYXNpbHkgcmVydW4gdGhlCisjIHBhY2thZ2UgY29uZmlndXJhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMKKy5QSE9OWTogcmVjb25maWd1cmUKK3JlY29uZmlndXJlOiAkKGJ1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChBTV9WX2F0KSQoPCkgLS1yZWNoZWNrCisKKyMKKyMgVmVyc2lvbiBmaWxlIHJlZ2VuZXJhdGlvbiBydWxlcy4KKyMKKy5QSE9OWTogZm9yY2UKKworJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb246ICQoc3JjZGlyKS8uZGVmYXVsdC12ZXJzaW9uIGZvcmNlCisKKyQoZGlzdGRpcikvLmRpc3QtdmVyc2lvbjogJChidWlsZGRpcikvLmxvY2FsLXZlcnNpb24gZm9yY2UKKworJChkaXN0ZGlyKS8uZGlzdC12ZXJzaW9uICQoYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uOgorCSQoY2FsbCBjaGVjay1maWxlLCQoQEYpKQorCitkaXN0IGRpc3RjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCitkaXN0LWhvb2s6ICQoZGlzdGRpcikvLmRpc3QtdmVyc2lvbgorCisjCisjIFRvcC1sZXZlbCBjb252ZW5pZW5jZSB0YXJnZXQgZm9yIG1ha2luZyBhIGRvY3VtZW50YXRpb24tb25seQorIyBkaXN0cmlidXRpb24gd2hvc2UgcmVzdWx0cyBhcHBlYXIgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgYnVpbGQgdHJlZQorIyBpbiB0aGUgc2FtZSBmYXNoaW9uIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiB3b3VsZCBiZSBmb3IgJ21ha2UgZGlzdCcuCisjCisKKy5QSE9OWTogZG9jZGlzdAorZG9jZGlzdDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgLUMgZG9jIGRvY2Rpc3RkaXI9JChhYnNfYnVpbGRkaXIpICQoQCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL2Jvb3RzdHJhcCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvYm9vdHN0cmFwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNTA0YjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL2V4YW1wbGVzL2Jvb3RzdHJhcApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKworIworIyAgICBDb3B5cmlnaHQgMjAxNiBOZXN0IExhYnMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIGEgdHJhbXBvbGluZSBzY3JpcHQgdG8gdGhlIG5sYnVpbGQtYXV0b3Rvb2xzCisjICAgICAgYm9vdHN0cmFwIHNjcmlwdCBhbmQgYXVnbWVudHMgaXQgYnkgcHJvdmlkaW5nIHRoZSBwYXRoIHRvIHRoZQorIyAgICAgIG5sYnVpbGQtYXV0b3Rvb2xzIHJlcG9zaXRvcnkgZm9yIHRoaXMgcHJvamVjdC4KKyMKKworIyBTZXQgdGhpcyB0byB0aGUgcmVsYXRpdmUgbG9jYXRpb24gb2YgbmxidWlsZC1hdXRvdG9vbHMgdG8gdGhpcyBzY3JpcHQKKworbmxidWlsZF9hdXRvdG9vbHNfc3RlbT0idGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwbyIKKworIyBFc3RhYmxpc2ggc29tZSBrZXkgZGlyZWN0b3JpZXMKKworc3JjZGlyPWBkaXJuYW1lICR7MH1gCithYnNfc3JjZGlyPWBwd2RgCithYnNfdG9wX3NyY2Rpcj0iJHthYnNfc3JjZGlyfSIKKworZXhlYyAke3NyY2Rpcn0vJHtubGJ1aWxkX2F1dG90b29sc19zdGVtfS9zY3JpcHRzL2Jvb3RzdHJhcCAtSSAiJHthYnNfdG9wX3NyY2Rpcn0vJHtubGJ1aWxkX2F1dG90b29sc19zdGVtfSIgJCoKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvY29uZmlndXJlLmFjIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9leGFtcGxlcy9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0ZDlkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vZXhhbXBsZXMvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMzgyIEBACisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyB0aGUgR05VIGF1dG9jb25mIGlucHV0IHNvdXJjZSBmaWxlIGZvcgorIyAgICAgIEBQQUNLQUdFX0RFU0NSSVBUSU9OQC4KKyMKKworIworIyBEZWNsYXJlIGF1dG9jb25mIHZlcnNpb24gcmVxdWlyZW1lbnRzCisjCitBQ19QUkVSRVEoWzIuNjhdKQorCisjCisjIEluaXRpYWxpemUgYXV0b2NvbmYgZm9yIHRoZSBwYWNrYWdlCisjCitBQ19JTklUKFtAUEFDS0FHRV9TSE9SVF9VUFBFUkBdLAorICAgICAgICBtNF9lc3lzY21kKFtATkxCVUlMRF9BVVRPVE9PTFNfU1RFTUAvc2NyaXB0cy9ta3ZlcnNpb24gLWIgYGNhdCAuZGVmYXVsdC12ZXJzaW9uYCAuXSksCisgICAgICAgIFtAUEFDS0FHRV9FTUFJTEBdLAorICAgICAgICBbQFBBQ0tBR0VfU0hPUlRfTE9XRVJAXSwKKyAgICAgICAgW0BQQUNLQUdFX1VSTEBdKQorCisjIFRlbGwgdGhlIHJlc3Qgb2YgdGhlIGJ1aWxkIHN5c3RlbSB0aGUgYWJzb2x1dGUgcGF0aCB3aGVyZSB0aGUKKyMgbmxidWlsZC1hdXRvdG9vbHMgcmVwb3NpdG9yeSBpcyByb290ZWQgYXQuCisKK0FDX1NVQlNUKG5sYnVpbGRfYXV0b3Rvb2xzX3N0ZW0sW0BOTEJVSUxEX0FVVE9UT09MU19TVEVNQF0pCitBQ19TVUJTVChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcixbXCR7YWJzX3RvcF9zcmNkaXJ9L1wke25sYnVpbGRfYXV0b3Rvb2xzX3N0ZW19XSkKKworIworIyBAUEFDS0FHRV9TSE9SVF9VUFBFUkAgaW50ZXJmYWNlIGN1cnJlbnQsIHJldmlzaW9uLCBhbmQgYWdlIHZlcnNpb25zLgorIworIyBNYWludGFpbnRlcnM6IFBsZWFzZSBtYW5hZ2UgdGhlc2UgZmllbGRzIGFzIGZvbGxvd3M6CisjCisjICAgSW50ZXJmYWNlcyByZW1vdmVkOiAgICBDVVJSRU5UKyssIEFHRSA9IDAsIFJFVklTSU9OID0gMAorIyAgIEludGVyZmFjZXMgYWRkZWQ6ICAgICAgQ1VSUkVOVCsrLCBBR0UrKywgICBSRVZJU0lPTiA9IDAKKyMgICBObyBpbnRlcmZhY2VzIGNoYW5nZWQ6ICAgICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKworIworIworQUNfU1VCU1QoTElCQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT05fQ1VSUkVOVCwgIFsxXSkKK0FDX1NVQlNUKExJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX0FHRSwgICAgICBbMF0pCitBQ19TVUJTVChMSUJAUEFDS0FHRV9TSE9SVF9VUFBFUkBfVkVSU0lPTl9SRVZJU0lPTiwgWzBdKQorQUNfU1VCU1QoTElCQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT05fSU5GTywgICAgIFske0xJQkBQQUNLQUdFX1NIT1JUX1VQUEVSQF9WRVJTSU9OX0NVUlJFTlR9OiR7TElCQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT05fUkVWSVNJT059OiR7TElCQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT05fQUdFfV0pCisKKyMKKyMgQ2hlY2sgdGhlIHNhbml0eSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeSBieSBjaGVja2luZyBmb3IgdGhlCisjIHByZXNlbmNlIG9mIGEga2V5IHdhdGNoIGZpbGUKKyMKK0FDX0NPTkZJR19TUkNESVIoW2luY2x1ZGUvQFBBQ0tBR0VfU0hPUlRfTE9XRVJALmhdKQorCisjCisjIFRlbGwgYXV0b2NvbmYgd2hlcmUgdG8gZmluZCBhdXhpbGxpYXJ5IGJ1aWxkIHRvb2xzIChlLmcuIGNvbmZpZy5ndWVzcywKKyMgaW5zdGFsbC1zaCwgbWlzc2luZywgZXRjLikKKyMKK0FDX0NPTkZJR19BVVhfRElSKFtATkxCVUlMRF9BVVRPVE9PTFNfU1RFTUAvYXV0b2NvbmZdKQorCisjCisjIFRlbGwgYXV0b2NvbmYgd2hlcmUgdG8gZmluZCBhdXhpbGxpYXJ5IE00IG1hY3JvcworIworQUNfQ09ORklHX01BQ1JPX0RJUihbQE5MQlVJTERfQVVUT1RPT0xTX1NURU1AL2F1dG9jb25mL200XSkKKworIworIyBUZWxsIGF1dG9jb25mIHdoYXQgZmlsZSB0aGUgcGFja2FnZSBpcyB1c2luZyB0byBhZ2dyZWdhdGUgQyBwcmVwcm9jZXNzb3IKKyMgZGVmaW5lcy4KKyMKK0FDX0NPTkZJR19IRUFERVJTKFtpbmNsdWRlL0BQQUNLQUdFX1NIT1JUX0xPV0VSQC1jb25maWcuaF0pCisKKyMKKyMgRmlndXJlIG91dCB3aGF0IHRoZSBjYW5vbmljYWwgYnVpbGQsIGhvc3QgYW5kIHRhcmdldCB0dXBsZXMgYXJlLgorIworQUNfQ0FOT05JQ0FMX0JVSUxECitBQ19DQU5PTklDQUxfSE9TVAorQUNfQ0FOT05JQ0FMX1RBUkdFVAorCisjCisjIE1hYyBPUyBYIC8gRGFyd2luIGVuZHMgdXAgcHV0dGluZyBzb21lIHZlcnNpb25pbmcgY3J1ZnQgb24gdGhlIGVuZCBvZiBpdHMKKyMgdHVwbGUgdGhhdCB3ZSBkb24ndCBjYXJlIGFib3V0IGluIHRoaXMgc2NyaXB0LiBDcmVhdGUgImNsZWFuIiB2YXJpYWJsZXMKKyMgZGV2b2lkIG9mIGl0LgorIworCitOTF9GSUxURVJFRF9DQU5PTklDQUxfQlVJTEQKK05MX0ZJTFRFUkVEX0NBTk9OSUNBTF9IT1NUCitOTF9GSUxURVJFRF9DQU5PTklDQUxfVEFSR0VUCisKKyMKKyMgQ29uZmlndXJlIGF1dG9tYWtlIHdpdGggdGhlIGRlc2lyZWQgb3B0aW9ucywgaW5kaWNhdGluZyB0aGF0IHRoaXMgaXMgbm90CisjIGEgbmF0aXZlIEdOVSBwYWNrYWdlLCB0aGF0IHdlIHdhbnQgInNpbGVudCIgYnVpbGQgcnVsZXMsIGFuZCB0aGF0IHdlIHdhbnQKKyMgb2JqZWN0cyBidWlsdCBpbiB0aGUgc2FtZSBzdWJkaXJlY3RvcnkgYXMgdGhlaXIgc291cmNlIHJhdGhlciB0aGFuIGNvbGxhcHNlZAorIyB0b2dldGhlciBhdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKyMKKyMgRGlzYWJsZSBzaWxlbnQgYnVpbGQgcnVsZXMgYnkgZWl0aGVyIHBhc3NpbmcgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyB0bworIyBjb25maWd1cmUgb3IgcGFzc2luZyBWPTEgdG8gbWFrZQorIworQU1fSU5JVF9BVVRPTUFLRShbMS4xNCBmb3JlaWduIHNpbGVudC1ydWxlcyBzdWJkaXItb2JqZWN0cyB0YXItcGF4XSkKKworIworIyBTaWxlbnQgYnVpbGQgcnVsZXMgcmVxdWlyZXMgYXQgbGVhc3QgYXV0b21ha2UtMS4xMS4gRW1wbG95CisjIHRlY2huaXF1ZXMgZm9yIG5vdCBicmVha2luZyBlYXJsaWVyIHZlcnNpb25zIG9mIGF1dG9tYWtlLgorIworbTRfaWZkZWYoW0FNX1NJTEVOVF9SVUxFU10sIFtBTV9TSUxFTlRfUlVMRVMoW3llc10pXSkKK0FNX1NJTEVOVF9SVUxFUyhbeWVzXSkKKworIworIyBFbmFibGUgbWFpbnRhaW5lciBtb2RlIHRvIHByZXZlbnQgdGhlIHBhY2thZ2UgZnJvbSBjb25zdGFudGx5IHRyeWluZworIyB0byByZWJ1aWxkIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIGV0Yy4gUmVidWlsZGluZyBzdWNoIGZpbGVzIHJhcmVseSwKKyMgaWYgZXZlciwgbmVlZHMgdG8gYmUgZG9uZSAiaW4gdGhlIGZpZWxkIi4KKyMKKyMgVXNlIHRoZSBpbmNsdWRlZCAnYm9vdHN0cmFwJyBzY3JpcHQgaW5zdGVhZCB3aGVuIG5lY2Vzc2FyeS4KKyMKK0FNX01BSU5UQUlORVJfTU9ERQorCisjCisjIENoZWNrcyBmb3IgYnVpbGQgaG9zdCBwcm9ncmFtcworIworCisjIElmIHdlIGFyZSBjcm9zcy1jb21waWxpbmcgYW5kIHdlIGFyZSBvbiBhbiBlbWJlZGRlZCB0YXJnZXQgdGhhdAorIyBkb2Vzbid0IHN1cHBvcnQgaW5kZXBlbmRlbnQsIHN0YW5kYWxvbmUgZXhlY3V0YWJsZXMsIHRoZW4gYWxsCisjIGNvbXBpbGVyIHRlc3RzIHRoYXQgYXR0ZW1wdCB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aWxsIGZhaWwuIEluCisjIHN1Y2ggY2lyY3Vtc3RhbmNlcywgc2V0IEFDX05PX0VYRUNVVEFCTEVTIChzZWUgaHR0cDovL3NvdXJjZXdhcmUub3JnLworIyBtbC9uZXdsaWIvMjAwNi9tc2cwMDM1My5odG1sKS4KKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGRpc2FibGUgZXhlY3V0YWJsZSBjaGVja2luZ10pCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgIEFDX05PX0VYRUNVVEFCTEVTCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCisjIFBhc3NpbmcgLVdlcnJvciB0byBHQ0MtYmFzZWQgb3IgLWNvbXBhdGlibGUgY29tcGlsZXJzIGJyZWFrcyBzb21lCisjIGF1dG9jb25mIHRlc3RzIChzZWUKKyMgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9jb25mLXBhdGNoZXMvMjAwOC0wOS9tc2cwMDAxNC5odG1sKS4KKyMKKyMgSWYgLVdlcnJvciBoYXMgYmVlbiBwYXNzZWQgdHJhbnNmb3JtIGl0IGludG8gLVduby1lcnJvci4gV2UnbGwKKyMgdHJhbnNmb3JtIGl0IGJhY2sgbGF0ZXIgd2l0aCBOTF9SRVNUT1JFX1dFUlJPUi4KKworTkxfU0FWRV9XRVJST1IKKworIyBDaGVjayBmb3IgY29tcGlsZXJzLgorIworIyBUaGVzZSBzaG91bGQgYmUgY2hlY2tlZCBCRUZPUkUgd2UgY2hlY2sgZm9yIGFuZCwgaW1wbGljaXRseSwKKyMgaW5pdGlhbGl6ZSBsaWJ0b29sIHN1Y2ggdGhhdCBsaWJ0b29sIGtub3dzIHdoYXQgbGFuZ3VhZ2VzIGl0IGhhcyB0bworIyB3b3JrIHdpdGguCisKK0FDX1BST0dfQ1BQCitBQ19QUk9HX0NQUF9XRVJST1IKKworQUNfUFJPR19DQworQUNfUFJPR19DQ19DX08KKworQUNfUFJPR19DWFhDUFAKKworQUNfUFJPR19DWFgKK0FDX1BST0dfQ1hYX0NfTworCisjIENoZWNrIGZvciBvdGhlciBjb21waWxlciB0b29sY2hhaW4gdG9vbHMuCisKK0FDX0NIRUNLX1RPT0woQVIsIGFyKQorQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYikKK0FDX0NIRUNLX1RPT0woT0JKQ09QWSwgb2JqY29weSkKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwKQorCisjIENoZWNrIGZvciBvdGhlciBob3N0IHRvb2xzLgorCitBQ19QUk9HX0lOU1RBTEwKK0FDX1BST0dfTE5fUworCitBQ19QQVRIX1BST0coQ01QLCBjbXApCitBQ19QQVRIX1BST0coUEVSTCwgcGVybCkKKworIworIyBDaGVja3MgZm9yIHNwZWNpZmljIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworIworCisjCisjIENvbW1vbiBjb21waWxlciBmbGFncyB3ZSB3b3VsZCBsaWtlIHRvIGhhdmUuCisjCisjICAgLVdhbGwgICAgICAgICAgICAgICAgICAgICAgICBDQywgQ1hYCisjCisKK1BST1NQRUNUSVZFX0NGTEFHUz0iLVdhbGwiCitQUk9TUEVDVElWRV9DWFhGTEFHUz0iIgorCitBWF9DSEVDS19DT01QSUxFUl9PUFRJT05TKFtDXSwgICAke1BST1NQRUNUSVZFX0NGTEFHU30pCitBWF9DSEVDS19DT01QSUxFUl9PUFRJT05TKFtDKytdLCAke1BST1NQRUNUSVZFX0NGTEFHU30gJHtQUk9TUEVDVElWRV9DWFhGTEFHU30pCisKKyMgQ2hlY2sgZm9yIGFuZCBpbml0aWFsaXplIGxpYnRvb2wKKworTFRfSU5JVAorCisjCisjIERlYnVnIGluc3RhbmNlcworIworQUNfTVNHX05PVElDRShbY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBpbnN0YW5jZXNdKQorCisjIERlYnVnCisKK05MX0VOQUJMRV9ERUJVRyhbbm9dKQorCitBTV9DT05ESVRJT05BTChbQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX0RFQlVHXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfZGVidWd9IiA9ICJ5ZXMiXSkKKworIworIyBDb2RlIGNvdmVyYWdlIGFuZCBjb21waWxlciBvcHRpbWl6YXRpb24KKyMKKworIyBDb3ZlcmFnZQorCitOTF9FTkFCTEVfQ09WRVJBR0UoW25vXSkKKworQU1fQ09ORElUSU9OQUwoW0BQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRV0sIFt0ZXN0ICIke25sX2N2X2J1aWxkX2NvdmVyYWdlfSIgPSAieWVzIl0pCisKK05MX0VOQUJMRV9DT1ZFUkFHRV9SRVBPUlRTKFthdXRvXSkKKworQU1fQ09ORElUSU9OQUwoW0BQQUNLQUdFX1NIT1JUX1VQUEVSQF9CVUlMRF9DT1ZFUkFHRV9SRVBPUlRTXSwgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfY292ZXJhZ2VfcmVwb3J0c30iID0gInllcyJdKQorCisjIE9wdGltaXphdGlvbgorCitOTF9FTkFCTEVfT1BUSU1JWkFUSU9OKFt5ZXNdKQorCitBTV9DT05ESVRJT05BTChbQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX0JVSUxEX09QVElNSVpFRF0sIFt0ZXN0ICIke25sX2N2X2J1aWxkX29wdGltaXplZH0iID0gInllcyJdKQorCisjCisjIFRlc3RzCisjCitBQ19NU0dfTk9USUNFKFtjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHRlc3RzXSkKKworIyBUZXN0cworCitOTF9FTkFCTEVfVEVTVFMoW3llc10pCisKK0FNX0NPTkRJVElPTkFMKFtAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfVEVTVFNdLCBbdGVzdCAiJHtubF9jdl9idWlsZF90ZXN0c30iID0gInllcyJdKQorCisjCisjIERvY3VtZW50YXRpb24KKyMKKworIyBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgZG9jdW1lbnRhdGlvbiAodmlhIERveHlnZW4pIHNob3VsZCBiZSBidWlsdAorIyBvciBub3QsIHdpdGggJ2F1dG8nIGFzIHRoZSBkZWZhdWx0IGFuZCBlc3RhYmxpc2ggYSBkZWZhdWx0IHN1cHBvcnQKKyMgdmFsdWUgZm9yIEdyYXBoVml6ICdkb3QnIHN1cHBvcnQuCisKK05MX0VOQUJMRV9ET0NTKFthdXRvXSxbTk9dKQorCitBTV9DT05ESVRJT05BTChAUEFDS0FHRV9TSE9SVF9VUFBFUkBfQlVJTERfRE9DUywgW3Rlc3QgIiR7bmxfY3ZfYnVpbGRfZG9jc30iID0gInllcyJdKQorCisjCisjIENoZWNrcyBmb3IgbGlicmFyaWVzIGFuZCBwYWNrYWdlcy4KKyMKKyMgQXQgbWluaW11bSwgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyBhcmUgb3B0aW9uYWwsIGRlcGVuZGluZyBvbgorIyBjb25maWd1cmF0aW9uOgorIworIyAgICogVEJECisjCitBQ19NU0dfTk9USUNFKFtjaGVja2luZyByZXF1aXJlZCBwYWNrYWdlIGRlcGVuZGVuY2llc10pCisKKyMgTkxfV0lUSF9QQUNLQUdFKC4uLikKKworIyBDaGVjayBpZiB0aGUgYnVpbGQgaG9zdCBoYXMgcGtnLWNvbmZpZworCitBQ19QQVRIX1BST0coW1BLR19DT05GSUddLFtwa2ctY29uZmlnXSkKKworIworIyBDaGVjayBmb3IgaGVhZGVycworIworQUNfSEVBREVSX1NUREJPT0wKK0FDX0hFQURFUl9TVERDCisKK0FDX0NIRUNLX0hFQURFUlMoW3N0ZGludC5oXSkKK0FDX0NIRUNLX0hFQURFUlMoW3N0cmluZy5oXSkKKworIworIyBDaGVjayBmb3IgdHlwZXMgYW5kIHN0cnVjdHVyZXMKKyMKK0FDX1RZUEVfSU5UOF9UCitBQ19UWVBFX0lOVDE2X1QKK0FDX1RZUEVfSU5UMzJfVAorQUNfVFlQRV9JTlQ2NF9UCitBQ19UWVBFX1VJTlQ4X1QKK0FDX1RZUEVfVUlOVDE2X1QKK0FDX1RZUEVfVUlOVDMyX1QKK0FDX1RZUEVfVUlOVDY0X1QKKworIworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCisjCisKK2lmIHRlc3QgIiR7YWNfbm9fbGlua30iICE9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW21lbWNweV0pCitmaQorCisjIEFkZCBhbnkgY29kZSBjb3ZlcmFnZSBDUFBGTEFHUyBhbmQgTERGTEFHUworCitDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHtOTF9DT1ZFUkFHRV9DUFBGTEFHU30iCitMREZMQUdTPSIke0xERkxBR1N9ICR7TkxfQ09WRVJBR0VfTERGTEFHU30iCisKKyMgQXQgdGhpcyBwb2ludCwgd2UgY2FuIHJlc3RvcmUgdGhlIGNvbXBpbGVyIGZsYWdzIHRvIHdoYXRldmVyIHRoZQorIyB1c2VyIHBhc3NlZCBpbiwgbm93IHRoYXQgd2UncmUgY2xlYXIgb2YgYW4gLVdlcnJvciBpc3N1ZXMgYnkKKyMgdHJhbnNmb3JtaW5nIC1Xbm8tZXJyb3IgYmFjayB0byAtV2Vycm9yLgorCitOTF9SRVNUT1JFX1dFUlJPUgorCisjCisjIElkZW50aWZ5IHRoZSB2YXJpb3VzIG1ha2VmaWxlcyBhbmQgYXV0by1nZW5lcmF0ZWQgZmlsZXMgZm9yIHRoZSBwYWNrYWdlCisjCitBQ19DT05GSUdfRklMRVMoWworTWFrZWZpbGUKK3RoaXJkX3BhcnR5L01ha2VmaWxlCitzcmMvTWFrZWZpbGUKK3Rlc3RzL01ha2VmaWxlCitkb2MvTWFrZWZpbGUKK10pCisKKyMKKyMgR2VuZXJhdGUgdGhlIGF1dG8tZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgcGFja2FnZQorIworQUNfT1VUUFVUCisKKyMKKyMgU3VtbWFyaXplIHRoZSBwYWNrYWdlIGNvbmZpZ3VyYXRpb24KKyMKKworQUNfTVNHX05PVElDRShbCisKKyAgQ29uZmlndXJhdGlvbiBTdW1tYXJ5CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBQYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9OQU1FfQorICBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9WRVJTSU9OfQorICBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7TElCQFBBQ0tBR0VfU0hPUlRfVVBQRVJAX1ZFUlNJT05fSU5GTy8vOi8ufQorICBCdWlsZCBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7YnVpbGR9CisgIEhvc3Qgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtob3N0fQorICBUYXJnZXQgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7dGFyZ2V0fQorICBUYXJnZXQgYXJjaGl0ZWN0dXJlICAgICAgICAgICAgICAgICAgICAgICA6ICR7dGFyZ2V0X2NwdX0KKyAgVGFyZ2V0IE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke3RhcmdldF9vc30KKyAgQ3Jvc3MgY29tcGlsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke2Nyb3NzX2NvbXBpbGluZ30KKyAgQnVpbGQgc2hhcmVkIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgOiAke2VuYWJsZV9zaGFyZWR9CisgIEJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgIDogJHtlbmFibGVfc3RhdGljfQorICBCdWlsZCBkZWJ1ZyBsaWJyYXJpZXMgICAgICAgICAgICAgICAgICAgICA6ICR7bmxfY3ZfYnVpbGRfZGVidWd9CisgIEJ1aWxkIG9wdGltaXplZCBsaWJyYXJpZXMgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9vcHRpbWl6ZWR9CisgIEJ1aWxkIGNvdmVyYWdlIGxpYnJhcmllcyAgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9jb3ZlcmFnZX0KKyAgQnVpbGQgY292ZXJhZ2UgcmVwb3J0cyAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX2NvdmVyYWdlX3JlcG9ydHN9CisgIExjb3YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMQ09WOi0tfQorICBHZW5odG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7R0VOSFRNTDotLX0KKyAgQnVpbGQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke25sX2N2X2J1aWxkX3Rlc3RzfQorICBQcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7cHJlZml4fQorICBTaGFkb3cgZGlyZWN0b3J5IHByb2dyYW0gICAgICAgICAgICAgICAgICA6ICR7TE5ESVJ9CisgIERvY3VtZW50YXRpb24gc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgIDogJHtubF9jdl9idWlsZF9kb2NzfQorICBEb3h5Z2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7RE9YWUdFTjotLX0KKyAgR3JhcGhWaXogZG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0RPVDotLX0KKyAgUEVSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke1BFUkw6LS19CisgIEMgUHJlcHJvY2Vzc29yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDUFB9CisgIEMgQ29tcGlsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDQ30KKyAgQysrIFByZXByb2Nlc3NvciAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NYWENQUH0KKyAgQysrIENvbXBpbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0NYWH0KKyAgQXJjaGl2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0FSfQorICBBcmNoaXZlIEluZGV4ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7UkFOTElCfQorICBTeW1ib2wgU3RyaXBwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR7U1RSSVB9CisgIE9iamVjdCBDb3BpZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtPQkpDT1BZfQorICBDIFByZXByb2Nlc3NvciBmbGFncyAgICAgICAgICAgICAgICAgICAgICA6ICR7Q1BQRkxBR1M6LS19CisgIEMgQ29tcGlsZSBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDRkxBR1M6LS19CisgIEMrKyBDb21waWxlIGZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtDWFhGTEFHUzotLX0KKyAgTGluayBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAke0xERkxBR1M6LS19CisgIExpbmsgbGlicmFyaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHtMSUJTfQorCitdKQorCisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL2Jvb3RzdHJhcCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ib290c3RyYXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWM3MTAwNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ib290c3RyYXAKQEAgLTAsMCArMSwyODQgQEAKKyMhL2Jpbi9zaAorCisjCisjICAgIENvcHlyaWdodCAyMDE0LTIwMTcgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyBhIGNvbnZlbmllbmNlIHNjcmlwdCB0aGF0IHdpbGwgYm9vdHN0cmFwIHRoZSBHTlUKKyMgICAgICBhdXRvdG9vbHMgc3lzdGVtIGZvciBhIHByb2plY3QgYWZ0ZXIgYW55IGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLgorIworCisjCisjIHVzYWdlCisjCisjIERpc3BsYXkgcHJvZ3JhbSB1c2FnZS4KKyMKK3VzYWdlKCkgeworICAgIG5hbWU9YGJhc2VuYW1lICQwYAorCisgICAgZWNobyAiVXNhZ2U6ICR7bmFtZX0gWyBvcHRpb25zIF0gWyAtdyA8d2hhdD4gXSIKKworICAgIGlmIFsgJDEgLW5lIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJUcnkgJyR7bmFtZX0gLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmaQorCisgICAgaWYgWyAkMSAtbmUgMSBdOyB0aGVuCisgICAgICAgIGVjaG8gIiIKKyAgICAgICAgZWNobyAiICAtaCwgLS1oZWxwICAgICAgIFByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0LiIKKyAgICAgICAgZWNobyAiICAtSSBESVIgICAgICAgICAgIFNwZWNpZnkgZGlyZWN0b3J5IERJUiBhcyB0aGUgcm9vdCBvZiB0aGUgIgorICAgICAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgbmxidWlsZC1hdXRvdG9vbHMgcmVwb3NpdG9yeS4iCisgICAgICAgIGVjaG8gIiAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlbHkgcmVwb3J0IGJvb3RzdHJhcCBwcm9ncmVzcy4iCisgICAgICAgIGVjaG8gIiAgLXcsIC0td2hhdCBXSEFUICBTcGVjaWZ5IHdoYXQgcGFydCBvZiB0aGUgcGFja2FnZSBzaG91bGQgYmUgIgorICAgICAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgYm9vdHN0cmFwcGVkOiBhbGwsIGNvbmZpZywgbWFrZSwgb3Igbm9uZSAiCisgICAgICAgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogYWxsKS4iCisgICAgICAgIGVjaG8gIiIKKyAgICBmaQorCisgICAgZXhpdCAkMQorfQorCisjCisjIHJlbW92ZXRtcAorIworIyBSZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB1c2VkIGR1cmluZyB0aGUgcnVuIG9mIHRoaXMKKyMgc2NyaXB0LgorIworcmVtb3ZldG1wKCkgeworICAgIGlmIFsgLW4gIiR7TElCVE9PTElaRX0iICBdICYmIFsgIiR7TElCVE9PTElaRX0iID0gIiR7Qk9PVFNUUkFQX1RNUERJUn0vbGlidG9vbGl6ZSIgXTsgdGhlbgorICAgICAgICBybSAtZiAiJHtMSUJUT09MSVpFfSIKKyAgICBmaQorCisgICAgaWYgWyAtbiAiJHtBVVRPTTRURV9DRkd9IiBdOyB0aGVuCisgICAgICAgIHJtIC1mICIke0FVVE9NNFRFX0NGR30iCisgICAgZmkKKworICAgIHJtIC1yIC1mICIke0JPT1RTVFJBUF9UTVBESVJ9IgorfQorCit3aGF0PSJhbGwiCit2ZXJib3NlPQorbmxidWlsZF9hdXRvdG9vbHNfZGlyPQorCisjIFBhcnNlIG91dCBhbnkgY29tbWFuZCBsaW5lIG9wdGlvbnMKKword2hpbGUgWyAkeyN9IC1ndCAwIF07IGRvCisgICAgY2FzZSAkezF9IGluCisgICAgLWh8LS1oZWxwKQorICAgICAgICB1c2FnZSAwCisgICAgICAgIDs7CisKKyAgICAtSSkKKyAgICAgICAgbmxidWlsZF9hdXRvdG9vbHNfZGlyPSIkezJ9IgorICAgICAgICBzaGlmdCAyCisgICAgICAgIDs7CisKKyAgICAtdnwtLXZlcmJvc2UpCisgICAgICAgIHZlcmJvc2U9Ii0tdmVyYm9zZSIKKyAgICAgICAgc2hpZnQgMQorICAgICAgICA7OworCisgICAgLXd8LS13aGF0KQorICAgICAgICBjYXNlICIkezJ9IiBpbgorICAgICAgICBhbGx8bWFrZSp8Y29uZip8bm9uZSkKKyAgICAgICAgICAgIHdoYXQ9IiR7Mn0iCisgICAgICAgICAgICBzaGlmdCAyCisgICAgICAgICAgICA7OworCisgICAgICAgICopCisJICAgIGVjaG8gIlVua25vd24gd2hhdCB2YWx1ZSAnJHsyfScuIgorICAgICAgICAgICAgdXNhZ2UgMQorICAgICAgICAgICAgOzsKKworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAqKQorICAgICAgICB1c2FnZSAxCisgICAgICAgIDs7CisKKyAgICBlc2FjCitkb25lCisKKyMgQ2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBubGJ1aWxkLWF1dG90b29scyBkaXJlY3RvcnkKKyMgaXMgc2FuZS4KKworaWYgWyAteiAiJHtubGJ1aWxkX2F1dG90b29sc19kaXJ9IiBdOyB0aGVuCisgICAgZWNobyAiJDA6IE5vIC1JIG9wdGlvbiBzcGVjaWZpZWQuIFBsZWFzZSBwcm92aWRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmxidWlsZC1hdXRvdG9vbHMgZGlyZWN0b3J5LiIKKyAgICBleGl0IDEKKworZWxpZiBbICEgLWQgIiR7bmxidWlsZF9hdXRvdG9vbHNfZGlyfSIgXTsgdGhlbgorICAgIGVjaG8gIiQwOiBObyBzdWNoIGRpcmVjdG9yeTogJHtubGJ1aWxkX2F1dG90b29sc19kaXJ9LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHBhdGggdG8gdGhlIG5sYnVpbGQtYXV0b3Rvb2xzIGRpcmVjdG9yeS4iCisgICAgZXhpdCAxCisKK2ZpCisKKyMgRXN0YWJsaXNoIHNvbWUga2V5IGRpcmVjdG9yaWVzCisKK3NyY2Rpcj1gZGlybmFtZSAkezB9YAorYWJzX3NyY2Rpcj1gcHdkYAorYWJzX3RvcF9zcmNkaXI9IiR7YWJzX3NyY2Rpcn0iCisKK2Fic190b3BfaG9zdGRpcj0iJHtubGJ1aWxkX2F1dG90b29sc19kaXJ9L3Rvb2xzL2hvc3QiCisKKyMgRmlndXJlIG91dCB3aGF0IHNvcnQgb2YgYnVpbGQgaG9zdCB3ZSBhcmUgcnVubmluZyBvbiwgc3RyaXBwaW5nIG9mZgorIyBhbnkgdHJhaWxpbmcgdmVyc2lvbiBudW1iZXIgaW5mb3JtYXRpb24gdHlwaWNhbGx5IGluY2x1ZGVkIG9uIERhcndpbgorIyAvIE1hYyBPUyBYLgorCitob3N0PWAke25sYnVpbGRfYXV0b3Rvb2xzX2Rpcn0vYXV0b2NvbmYvY29uZmlnLmd1ZXNzIHwgc2VkIC1lICdzL1tbOmRpZ2l0Ol0uXSokLy9nJ2AKKworIyBJZiBwb3NzaWJsZSwgYXR0ZW1wdCB0byBiZSBzZWxmLXN1ZmZpY2llbnQsIHJlbHlpbmcgb24gR05VIGF1dG90b29scworIyBleGVjdXRhYmxlcyBpbnN0YWxsZWQgYWxvbmcgd2l0aCB0aGUgU0RLIGl0c2VsZi4KKworaWYgWyAtZCAiJHthYnNfdG9wX2hvc3RkaXJ9LyR7aG9zdH0vYmluIiBdOyB0aGVuCisgICAgZXhwb3J0IFBBVEg9IiR7YWJzX3RvcF9ob3N0ZGlyfS8ke2hvc3R9L2Jpbjoke1BBVEh9IgorZmkKKworaWYgWyAtZCAiJHthYnNfdG9wX2hvc3RkaXJ9L2JpbiIgXTsgdGhlbgorICAgIGV4cG9ydCBQQVRIPSIke2Fic190b3BfaG9zdGRpcn0vYmluOiR7UEFUSH0iCitmaQorCitleHBvcnQgQUNMT0NBTD1gd2hpY2ggYWNsb2NhbGAKK2V4cG9ydCBBVVRPQ09ORj0iYHdoaWNoIGF1dG9jb25mYCIKK2V4cG9ydCBBVVRPSEVBREVSPSJgd2hpY2ggYXV0b2hlYWRlcmAiCitleHBvcnQgQVVUT000VEU9ImB3aGljaCBhdXRvbTR0ZWAiCitleHBvcnQgQVVUT01BS0U9ImB3aGljaCBhdXRvbWFrZWAiCitleHBvcnQgTElCVE9PTElaRT0iYHdoaWNoIGxpYnRvb2xpemUgfHwgd2hpY2ggZ2xpYnRvb2xpemVgIgorZXhwb3J0IE00PWB3aGljaCBtNGAKKworIyBFc3RhYmxpc2gsIGlmIG5lY2Vzc2FyeSwgc29tZSBTREstc3BlY2lmaWMgZGlyZWN0b3JpZXMgbmVlZGVkIHRvCisjIG92ZXJyaWRlIHZhcmlvdXMgcGF0aHMgaW4gR05VIGF1dG90b29scyB0aGF0IG90aGVyd2lzZSBleHBlY3QgdG8gYmUKKyMgYWJzb2x1dGUgKGUuZy4gL3Vzci9zaGFyZSwgZXRjLikuCisKK2lmIFsgLWQgIiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZSIgXTsgdGhlbgorICAgIGlmIFsgLWQgIiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvY29uZiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgQUNfTUFDUk9ESVI9IiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvY29uZiIKKworICAgICAgICBleHBvcnQgYXV0b200dGVfcGVybGxpYmRpcj0iJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2F1dG9jb25mIgorICAgIGZpCisKKyAgICBpZiBbIC1kICIke2Fic190b3BfaG9zdGRpcn0vc2hhcmUvYXV0b21ha2UtMS4xNCIgXTsgdGhlbgorICAgICAgICBleHBvcnQgUEVSTDVMSUI9IiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvbWFrZS0xLjE0OiR7UEVSTDVMSUJ9IgorCisJbWFrZV9hY3Rpb25fb3B0aW9ucz0iLS1saWJkaXIgJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2F1dG9tYWtlLTEuMTQiCisgICAgZmkKKworICAgIGlmIFsgLWQgIiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hY2xvY2FsLTEuMTQiIF07IHRoZW4KKyAgICAgICAgbG9jYWxfYWN0aW9uX29wdGlvbnM9Ii0tYXV0b21ha2UtYWNkaXI9JHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2FjbG9jYWwtMS4xNCAke2xvY2FsX2FjdGlvbl9vcHRpb25zfSIKKyAgICBmaQorCisgICAgaWYgWyAtZCAiJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2FjbG9jYWwiIF07IHRoZW4KKyAgICAgICAgbG9jYWxfYWN0aW9uX29wdGlvbnM9Ii0tc3lzdGVtLWFjZGlyPSR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hY2xvY2FsICR7bG9jYWxfYWN0aW9uX29wdGlvbnN9IgorICAgIGZpCitmaQorCisjIEJvdGggYXV0b200dGUuY2ZnIGFuZCBsaWJ0b29saXplLCBhcyBpbnN0YWxsZWQgZnJvbSBzb3VyY2UsIHdhbnQgdG8KKyMgdXNlIGFic29sdXRlIGZpbGUgc3lzdGVtIHBhdGhzIHRoYXQgY2Fubm90IGJlCisjIG92ZXJyaWRkZW4uIENvbnNlcXVlbnRseSwgd2UgY3JlYXRlIHRlbXBvcmFyeSwgbG9jYWwgdmVyc2lvbnMgb2YKKyMgdGhlc2UsIHBhdGNoZWQgdXAgd2l0aCBTREstc3BlY2lmaWMgcGF0aHMuCisKK0JPT1RTVFJBUF9UTVBESVI9ImBta3RlbXAgLWQgL3RtcC90bXAuYm9vdHN0cmFwWFhYWFhYYCIKKwordHJhcCAicmVtb3ZldG1wIiAxIDIgMyA5IDE1CisKKyMKKyMgR2VuZXJhdGUgYW55IHRlbXBvcmFyeSBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgcGF0Y2hlZCBhdCBydW4gdGltZQorIyB3aXRoIHRoZSBsb2NhdGlvbiBvZiB0aGUgU0RLIHRyZWUsIGluY2x1ZGluZzoKKyMKKyMgICAtICBUaGUgYXV0b200dGUgY29uZmlndXJhdGlvbiBmaWxlCisjICAgLSAgVGhlIGxpYnRvb2xpemUgZXhlY3V0YWJsZSBzY3JpcHQKKyMKKworaWYgWyAtciAiJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2F1dG9jb25mL2F1dG9tNHRlLmNmZyIgXTsgdGhlbgorICAgIGV4cG9ydCBBVVRPTTRURV9DRkc9IiR7Qk9PVFNUUkFQX1RNUERJUn0vYXV0b200dGUuY2ZnIgorCisgICAgc2VkIC1lICJzLC8vc2hhcmUvYXV0b2NvbmYsJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2F1dG9jb25mLGciIDwgIiR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hdXRvY29uZi9hdXRvbTR0ZS5jZmciID4gIiR7QVVUT000VEVfQ0ZHfSIKK2ZpCisKK2lmIFsgLXIgIiR7YWJzX3RvcF9ob3N0ZGlyfS8ke2hvc3R9L2Jpbi9saWJ0b29saXplIiBdOyB0aGVuCisgICAgZXhwb3J0IExJQlRPT0xJWkU9IiR7Qk9PVFNUUkFQX1RNUERJUn0vbGlidG9vbGl6ZSIKKworICAgIHNlZCAtZSAicywvL3NoYXJlL2xpYnRvb2wsJHthYnNfdG9wX2hvc3RkaXJ9L3NoYXJlL2xpYnRvb2wsZyIgLWUgInMsLy9zaGFyZS9hY2xvY2FsLCR7YWJzX3RvcF9ob3N0ZGlyfS9zaGFyZS9hY2xvY2FsLGciIDwgIiR7YWJzX3RvcF9ob3N0ZGlyfS8ke2hvc3R9L2Jpbi9saWJ0b29saXplIiA+ICIke0xJQlRPT0xJWkV9IgorCisgICAgY2htb2QgNzc1ICIke0xJQlRPT0xJWkV9IgorZmkKKworaWYgWyAtbiAiJHt2ZXJib3NlfSIgXTsgdGhlbgorICAgIGVjaG8gUEFUSD0iJHtQQVRIfSIKKworICAgIGVjaG8gQUNMT0NBTD0iJHtBQ0xPQ0FMfSIKKyAgICBlY2hvIEFVVE9DT05GPSIke0FVVE9DT05GfSIKKyAgICBlY2hvIEFVVE9IRUFERVI9IiR7QVVUT0hFQURFUn0iCisgICAgZWNobyBBVVRPTTRURT0iJHtBVVRPTTRURX0iCisgICAgZWNobyBBVVRPTUFLRT0iJHtBVVRPTUFLRX0iCisgICAgZWNobyBMSUJUT09MSVpFPSIke0xJQlRPT0xJWkV9IgorICAgIGVjaG8gTTQ9IiR7TTR9IgorCisgICAgZWNobyBBQ19NQUNST0RJUj0iJHtBQ19NQUNST0RJUn0iCisgICAgZWNobyBBVVRPTTRURV9DRkc9IiR7QVVUT000VEVfQ0ZHfSIKKyAgICBlY2hvIFBFUkw1TElCPSIke1BFUkw1TElCfSIKKyAgICBlY2hvIGF1dG9tNHRlX3BlcmxsaWJkaXI9IiR7YXV0b200dGVfcGVybGxpYmRpcn0iCisKKyAgICBlY2hvIGxvY2FsX2FjdGlvbl9vcHRpb25zPSIke2xvY2FsX2FjdGlvbl9vcHRpb25zfSIKKyAgICBlY2hvIG1ha2VfYWN0aW9uX29wdGlvbnM9IiR7bWFrZV9hY3Rpb25fb3B0aW9uc30iCitmaQorCisjIFNldCB1cCB0aGUgZGVmYXVsdCBhY3Rpb25zIGZvciBlYWNoIGJvb3RzdHJhcCBzdGFnZS4KKworbG9jYWxfYWN0aW9uPSIke0FDTE9DQUx9ICR7dmVyYm9zZX0gJHtsb2NhbF9hY3Rpb25fb3B0aW9uc30iCitoZWFkZXJfYWN0aW9uPSIke0FVVE9IRUFERVJ9ICR7dmVyYm9zZX0iCit0b29sX2FjdGlvbj0iJHtMSUJUT09MSVpFfSAke3ZlcmJvc2V9IC0tYXV0b21ha2UgLS1jb3B5IC0tZm9yY2UiCittYWtlX2FjdGlvbj0iJHtBVVRPTUFLRX0gJHt2ZXJib3NlfSAke21ha2VfYWN0aW9uX29wdGlvbnN9IC0tYWRkLW1pc3NpbmcgLS1jb3B5IgorY29uZmlnX2FjdGlvbj0iJHtBVVRPQ09ORn0gJHt2ZXJib3NlfSIKKworIyBEZXRlcm1pbmUgd2hhdCBuZWVkcyB0byBiZSBzaG9ydC1jaXJjdWl0ZWQgYmFzZWQgb24gdGhlCisjIHVzZXItc3BlY2lmaWVkICJ3aGF0Ii4KKworY2FzZSAiJHt3aGF0fSIgaW4KKworICAgIGFsbCkKKyAgICAgICAgOzsKKworICAgIGNvbmYqKQorICAgICAgICBsb2NhbF9hY3Rpb249dHJ1ZQorICAgICAgICBoZWFkZXJfYWN0aW9uPXRydWUKKyAgICAgICAgdG9vbF9hY3Rpb249dHJ1ZQorICAgICAgICBtYWtlX2FjdGlvbj10cnVlCisgICAgICAgIDs7CisKKyAgICBtYWtlKikKKyAgICAgICAgbG9jYWxfYWN0aW9uPXRydWUKKyAgICAgICAgaGVhZGVyX2FjdGlvbj10cnVlCisgICAgICAgIGNvbmZpZ19hY3Rpb249dHJ1ZQorICAgICAgICA7OworCisgICAgbm9uZSkKKyAgICAgICAgbG9jYWxfYWN0aW9uPXRydWUKKyAgICAgICAgaGVhZGVyX2FjdGlvbj10cnVlCisgICAgICAgIHRvb2xfYWN0aW9uPXRydWUKKyAgICAgICAgbWFrZV9hY3Rpb249dHJ1ZQorICAgICAgICBjb25maWdfYWN0aW9uPXRydWUKKyAgICAgICAgOzsKKworZXNhYworCisjIEJvb3RzdHJhcCB0aGUgcGFja2FnZS4KKworJHtsb2NhbF9hY3Rpb259ICYmICR7dG9vbF9hY3Rpb259ICYmICR7aGVhZGVyX2FjdGlvbn0gJiYgJHttYWtlX2FjdGlvbn0gJiYgJHtjb25maWdfYWN0aW9ufQorCisjIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgY3JlYXRlZC4KKworcmVtb3ZldG1wCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvYm9vdHN0cmFwLWNvbmZpZ3VyZSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ib290c3RyYXAtY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3NDVlMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvYm9vdHN0cmFwLWNvbmZpZ3VyZQpAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworIworIyAgICBDb3B5cmlnaHQgMjAxNC0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIHNjcmlwdCB3aGljaCwgd2hlbiBydW4gZnJvbSBhIHByb2plY3QKKyMgICAgICBidWlsZCBkaXJlY3RvcnkgKGVpdGhlciBkaXNwYXJhdGUgb3IgY29sb2NhdGVkIHdpdGggdGhlCisjICAgICAgc291cmNlKSwgd2lsbCBhdHRlbXB0IHRvIGNsZWFuIHRoZSBidWlsZCBkaXJlY3RvcnksIHJlYm9vdHN0cmFwCisjICAgICAgdGhlIHBhY2thZ2UsIGFuZCB0aGVuIHJlcnVuIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdCBmb3IgdGhlCisjICAgICAgcGFja2FnZSB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuCisjCisjICAgICAgVGhpcyBzY3JpcHQgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIHlvdSBhcmUgY2hhbmdpbmcgdGhlCisjICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHQgYW5kIHRlc3RpbmcgdGhvc2UgY2hhbmdlcy4KKyMKKworc3JjZGlyPWBkaXJuYW1lICR7MH1gCitidWlsZGRpcj0uCisKKyMgQnJpbmcgdGhlIHBhY2thZ2UgYnVpbGQgYmFjayB0byBhIHByaXN0aW5lIHN0YXRlLgorCitpZiBbIC1mIGNvbmZpZy5zdGF0dXMgXTsgdGhlbgorCW1ha2UgbWFpbnRhaW5lci1jbGVhbgorZmkKKworIyBDaGFuZ2UgZGlyZWN0b3JpZXMgdG8gdGhlIHBhY2thZ2Ugc291cmNlIGFuZCByZWJvb3RzdHJhcCB0aGUgcGFja2FnZS4KKworcHVzaGQgJHtzcmNkaXJ9CisKKy4vYm9vdHN0cmFwCitib290c3RyYXBfc3RhdHVzPSQ/CisKK3BvcGQKKworIyBJZiB0aGUgcGFja2FnZSB3YXMgc3VjY2Vzc2Z1bGx5IGJvb3RzdHJhcHBlZCwgY29uZmlndXJlIGl0LgorCitpZiBbICR7Ym9vdHN0cmFwX3N0YXR1c30gLWVxIDAgXTsgdGhlbgorICAgICR7c3JjZGlyfS9jb25maWd1cmUgJCoKK2Vsc2UKKyAgIGV4aXQgJHtib290c3RyYXBfc3RhdHVzfQorZmkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ta3NrZWxldG9uIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL21rc2tlbGV0b24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzM0OTA0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vc2NyaXB0cy9ta3NrZWxldG9uCkBAIC0wLDAgKzEsMjM3IEBACisjIS9iaW4vYmFzaAorCisjCisjICAgIENvcHlyaWdodCAyMDE1LTIwMTYgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgZmlsZSBpcyBhIGNvbnZlbmllbmNlIHNjcmlwdCB0aGF0IHdpbGwgY3JlYXRlIGEgc2tlbGV0b24KKyMgICAgICBidWlsZCBsYXlvdXQgdXNpbmcgdGhlIG5sYnVpbGQtYXV0b3Rvb2xzIHBhY2thZ2UuCisjCisKK1lFQVI9YGRhdGUgIislWSJgCitOQU1FPSIiCitERVNDUklQVElPTj0iIgorRElSPSIiCitWRVJTSU9OPSIxLjAiCit2ZXJib3NlPTEKKworIworIyB1c2FnZQorIworIyBEaXNwbGF5IHByb2dyYW0gdXNhZ2UuCisjCit1c2FnZSgpIHsKKyAgICBuYW1lPWBiYXNlbmFtZSAkMGAKKworICAgIGVjaG8gIlVzYWdlOiAke25hbWV9IFsgb3B0aW9ucyBdIgorCisgICAgaWYgWyAkMSAtbmUgMCBdOyB0aGVuCisgICAgICAgIGVjaG8gIlRyeSAnJHtuYW1lfSAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZpCisKKyAgICBpZiBbICQxIC1uZSAxIF07IHRoZW4KKyAgICAgICAgZWNobyAiIgorICAgICAgICBlY2hvICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdC4iCisgICAgICAgIGVjaG8gIiAgLUkgRElSICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgZGlyZWN0b3J5IERJUiBhcyB0aGUgcm9vdCBvZiB0aGUgIgorICAgICAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubGJ1aWxkLWF1dG90b29scyByZXBvc2l0b3J5LiIKKyAgICAgICAgZWNobyAiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgVmVyYm9zZWx5IHJlcG9ydCBta3NrZWxldG9uIHByb2dyZXNzIChkZWZhdWx0OiB5ZXMpLiIKKyAgICAgICAgZWNobyAiICAtLXBhY2thZ2UtZGVzY3JpcHRpb24gREVTQyAgU3BlY2lmeSBkZXNjcmlwdGlvbiBERVNDIGFzIGEgdGhlICIKKyAgICAgICAgZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBkZXNjcmlwdGlvbi4iCisgICAgICAgIGVjaG8gIiAgLS1wYWNrYWdlLW5hbWUgTkFNRSAgICAgICAgIFNwZWNpZnkgbmFtZSBOQU1FIGFzIHRoZSBwYWNrYWdlIG5hbWUuIgorICAgICAgICBlY2hvICIgIC0tcGFja2FnZS12ZXJzaW9uIFZFUlNJT04gICBTcGVjaWZ5IHZlcnNpb24gVkVSU0lPTiBhcyB0aGUgaW5pdGlhbCAiCisgICAgICAgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gZm9yIHRoZSBwYWNrYWdlIChkZWZhdWx0OiAke1ZFUlNJT059KS4iCisgICAgICAgIGVjaG8gIiAgLS1wYWNrYWdlLXllYXIgWUVBUiAgICAgICAgIFNwZWNpZnkgeWVhciBZRUFSIGFzIHRoZSBjcmVhdGlvbiAiCisgICAgICAgIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgZm9yIHRoZSBwYWNrYWdlIChkZWZhdWx0OiAke1lFQVJ9KS4iCisgICAgICAgIGVjaG8gIiAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgIERvIG5vdCB2ZXJib3NlbHkgcmVwb3J0IG1rc2tlbGV0b24gcHJvZ3Jlc3MgKGRlZmF1bHQ6IG5vKS4iCisKKyAgICAgICAgZWNobyAiIgorICAgIGZpCisKKyAgICBleGl0ICQxCit9CisKKyMKKyMgbG9nCisjCitsb2coKSB7CisgICAgaWYgWyAhIC16ICR7dmVyYm9zZX0gXSAmJiBbICR7dmVyYm9zZX0gLWVxIDEgXTsgdGhlbgorICAgICAgICBlY2hvICQqCisgICAgZmkKK30KKwordHJhbnNmb3JtKCkgeworICAgIGxvY2FsIGZyb209IiR7MX0iCisgICAgbG9jYWwgdG89IiR7Mn0iCisKKyAgICBzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICJzLFxATkxCVUlMRF9BVVRPVE9PTFNfU1RFTVxALCR7RElSfSxnIiAgICAgICAgXAorICAgICAgICAtZSAicyxcQFBBQ0tBR0VfREVTQ1JJUFRJT05cQCwke0RFU0NSSVBUSU9OfSxnIiAgIFwKKyAgICAgICAgLWUgInMsXEBQQUNLQUdFX1NIT1JUX0xPV0VSXEAsJHtMT1dFUn0sZyIgICAgICAgICBcCisgICAgICAgIC1lICJzLFxAUEFDS0FHRV9TSE9SVF9VUFBFUlxALCR7VVBQRVJ9LGciICAgICAgICAgXAorICAgICAgICAtZSAicyxcQFBBQ0tBR0VfWUVBUlxALCR7WUVBUn0sZyIgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgPCAiJHtmcm9tfSIgPiAiJHt0b30iCit9CisKK3BvcHVsYXRlKCkgeworICAgIGxvY2FsIG5sYnVpbGQ9IiR7MX0iCisgICAgbG9jYWwgcGVybT0kezJ9CisgICAgbG9jYWwgZmlsZT0iJHszfSIKKyAgICBsb2NhbCBkaXJlY3Rvcnk9IiR7NH0iCisgICAgbG9jYWwgc3RlbT0iJHtmaWxlJS4qfSIKKyAgICBsb2NhbCBleHRlbnNpb249IiR7ZmlsZSMjKi59IgorICAgIGxvY2FsIGZyb20KKyAgICBsb2NhbCB0bworCisgICAgaWYgWyAtciAiJHtubGJ1aWxkfS9leGFtcGxlcy8ke2ZpbGV9IiBdOyB0aGVuCisgICAgICAgIGZyb209IiR7bmxidWlsZH0vZXhhbXBsZXMvJHtmaWxlfSIKKworICAgIGVsaWYgWyAtciAiJHtubGJ1aWxkfS9leGFtcGxlcy8ke3N0ZW19LSR7ZGlyZWN0b3J5fS4ke2V4dGVuc2lvbn0iIF07IHRoZW4KKyAgICAgICAgZnJvbT0iJHtubGJ1aWxkfS9leGFtcGxlcy8ke3N0ZW19LSR7ZGlyZWN0b3J5fS4ke2V4dGVuc2lvbn0iCisKKyAgICBlbGlmIFsgIiR7ZGlyZWN0b3J5fSIgPSAiLiIgXSAmJiBbIC1yICIke25sYnVpbGR9L2V4YW1wbGVzLyR7c3RlbX0tdG9wbGV2ZWwuJHtleHRlbnNpb259IiBdOyB0aGVuCisgICAgICAgIGZyb209IiR7bmxidWlsZH0vZXhhbXBsZXMvJHtzdGVtfS10b3BsZXZlbC4ke2V4dGVuc2lvbn0iCisKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkNhbm5vdCBmaW5kIGFuIGV4YW1wbGUgZmlsZSBcIiR7ZmlsZX1cIiBmb3IgZGlyZWN0b3J5IFwiJHtkaXJlY3Rvcnl9XCIuIgorICAgICAgICBleGl0IDEKKworICAgIGZpCisKKyAgICB0bz0iJHtkaXJlY3Rvcnl9LyR7ZmlsZX0iCisKKyAgICBsb2cgIkNyZWF0aW5nIFwiJHt0b31cIi4uLiIKKworICAgIHRyYW5zZm9ybSAiJHtmcm9tfSIgIiR7dG99IgorCisgICAgaWYgWyAkPyA9IDAgXTsgdGhlbgorICAgICAgICBjaG1vZCAke3Blcm19ICIke3RvfSIKKyAgICBmaQorfQorCisjCisjIGxpbmsKKyMKK2xpbmsoKSB7CisgICAgbG9jYWwgbmxidWlsZD0iJHsxfSIKKyAgICBsb2NhbCBwZXJtPSR7Mn0KKyAgICBsb2NhbCBzb3VyY2U9IiR7M30iCisgICAgbG9jYWwgZGlyZWN0b3J5PSIkezR9IgorICAgIGxvY2FsIGZyb209IiR7bmxidWlsZH0vc2NyaXB0cy8ke3NvdXJjZX0iCisgICAgbG9jYWwgdG89IiR7ZGlyZWN0b3J5fS8ke3NvdXJjZX0iCisKKyAgICBsb2cgIkNyZWF0aW5nIFwiJHt0b31cIi4uLiIKKworICAgIGxuIC1zZiAiJHtmcm9tfSIgIiR7dG99IgorfQorCisjIFBhcnNlIG91dCBhbnkgY29tbWFuZCBsaW5lIG9wdGlvbnMKKword2hpbGUgWyAkeyN9IC1ndCAwIF07IGRvCisgICAgaWYgWyAkezF9ID09ICItaCIgXSB8fCBbICR7MX0gPT0gIi0taGVscCIgXTsgdGhlbgorICAgICAgICB1c2FnZSAwCisKKyAgICBlbGlmIFsgJHsxfSA9PSAiLUkiIF07IHRoZW4KKyAgICAgICAgRElSPSIkezJ9IgorICAgICAgICBzaGlmdCAyCisKKyAgICBlbGlmIFsgJHsxfSA9PSAiLS1wYWNrYWdlLWRlc2NyaXB0aW9uIiBdOyB0aGVuCisgICAgICAgIERFU0NSSVBUSU9OPSIkezJ9IgorICAgICAgICBzaGlmdCAyCisKKyAgICBlbGlmIFsgJHsxfSA9PSAiLS1wYWNrYWdlLW5hbWUiIF07IHRoZW4KKyAgICAgICAgTkFNRT0iJHsyfSIKKyAgICAgICAgc2hpZnQgMgorCisgICAgICAgIFVQUEVSPSJgZWNobyAke05BTUV9IHwgdHIgJ1tbOmxvd2VyOl1dJyAnW1s6dXBwZXI6XV0nYCIKKyAgICAgICAgTE9XRVI9ImBlY2hvICR7TkFNRX0gfCB0ciAnW1s6dXBwZXI6XV0nICdbWzpsb3dlcjpdXSdgIgorCisgICAgZWxpZiBbICR7MX0gPT0gIi0tcGFja2FnZS12ZXJzaW9uIiBdOyB0aGVuCisgICAgICAgIFZFUlNJT049IiR7Mn0iCisgICAgICAgIHNoaWZ0IDIKKworICAgIGVsaWYgWyAkezF9ID09ICItLXBhY2thZ2UteWVhciIgXTsgdGhlbgorICAgICAgICBZRUFSPSIkezJ9IgorICAgICAgICBzaGlmdCAyCisKKyAgICBlbGlmIFsgJHsxfSA9PSAiLXEiIF0gfHwgWyAkezF9ID09ICItLXF1aWV0IiBdOyB0aGVuCisgICAgICAgIHZlcmJvc2U9MAorICAgICAgICBzaGlmdCAxCisKKyAgICBlbGlmIFsgJHsxfSA9PSAiLXYiIF0gfHwgWyAkezF9ID09ICItLXZlcmJvc2UiIF07IHRoZW4KKyAgICAgICAgdmVyYm9zZT0xCisgICAgICAgIHNoaWZ0IDEKKworICAgIGVsc2UKKyAgICAgICAgdXNhZ2UgMQorCisgICAgZmkKK2RvbmUKKworIyBTYW5pdHkgY2hlY2sgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKworaWYgWyAteiAiJHtESVJ9IiBdOyB0aGVuCisgICAgZWNobyAiJDA6IE5vIC1JIG9wdGlvbiBzcGVjaWZpZWQuIFBsZWFzZSBwcm92aWRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmxidWlsZC1hdXRvdG9vbHMgZGlyZWN0b3J5LiIKKyAgICBleGl0IDEKKworZmkKKworaWYgWyAteiAiJHtERVNDUklQVElPTn0iIF07IHRoZW4KKyAgICBlY2hvICIkMDogUGxlYXNlIHByb3ZpZGUgYSBwYWNrYWdlIGRlc2NyaXB0aW9uIHZpYSAtLXBhY2thZ2UtZGVzY3JpcHRpb24uIgorICAgIGV4aXQgMQorZmkKKworaWYgWyAteiAiJHtOQU1FfSIgXTsgdGhlbgorICAgIGVjaG8gIiQwOiBQbGVhc2UgcHJvdmlkZSBhIHBhY2thZ2UgbmFtZSB2aWEgLS1wYWNrYWdlLW5hbWUuIgorICAgIGV4aXQgMQorZmkKKworaWYgWyAteiAiJHtWRVJTSU9OfSIgXTsgdGhlbgorICAgIGVjaG8gIiQwOiBQbGVhc2UgcHJvdmlkZSBhIHBhY2thZ2UgZGVmYXVsdCB2ZXJzaW9uIHZpYSAtLXBhY2thZ2UtdmVyc2lvbi4iCisgICAgZXhpdCAxCitmaQorCitpZiBbIC16ICIke1lFQVJ9IiBdOyB0aGVuCisgICAgZWNobyAiJDA6IFBsZWFzZSBwcm92aWRlIGEgcGFja2FnZSBjcmVhdGlvbiB5ZWFyIHZpYSAtLXBhY2thZ2UteWVhci4iCisgICAgZXhpdCAxCitmaQorCisjIENyZWF0ZSB0aGUgc2tlbGV0b24gZGlyZWN0b3JpZXMKKworRElSUz0iZG9jIHRoaXJkX3BhcnR5IGluY2x1ZGUgc3JjIHRlc3RzIgorCitmb3IgZGlyIGluICR7RElSU307IGRvCisgICAgbG9nICJDcmVhdGluZyBcIiR7ZGlyfVwiLi4uIgorICAgIG1rZGlyIC1wICIke2Rpcn0iCitkb25lCisKKyMgUG9wdWxhdGUgdGhlIHNrZWxldG9uIGRpcmVjdG9yaWVzCisKK3BvcHVsYXRlICIke0RJUn0iIDY2NCBjb25maWd1cmUuYWMgICAgICAgIC4KK3BvcHVsYXRlICIke0RJUn0iIDc3NSBib290c3RyYXAgICAgICAgICAgIC4KK3BvcHVsYXRlICIke0RJUn0iIDY2NCBNYWtlZmlsZS5hbSAgICAgICAgIC4KK3BvcHVsYXRlICIke0RJUn0iIDY2NCBNYWtlZmlsZS5hbSAgICAgICAgIGRvYworcG9wdWxhdGUgIiR7RElSfSIgNjY0IERveHlmaWxlLmluICAgICAgICAgZG9jCitwb3B1bGF0ZSAiJHtESVJ9IiA2NjQgTWFrZWZpbGUuYW0gICAgICAgICB0aGlyZF9wYXJ0eSAKK3BvcHVsYXRlICIke0RJUn0iIDY2NCBNYWtlZmlsZS5hbSAgICAgICAgIHNyYworcG9wdWxhdGUgIiR7RElSfSIgNjY0IE1ha2VmaWxlLmFtICAgICAgICAgdGVzdHMKK2xpbmsgICAgICIke0RJUn0iIDc3NSBib290c3RyYXAtY29uZmlndXJlIC4KKworIyBDcmVhdGUgdGhlIGRlZmF1bHQgcGFja2FnZSB2ZXJzaW9uCisKK2xvZyAiQ3JlYXRpbmcgZGVmYXVsdCB2ZXJzaW9uICR7VkVSU0lPTn0uLi4iCisKK2VjaG8gIiR7VkVSU0lPTn0iID4gIi5kZWZhdWx0LXZlcnNpb24iCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3NjcmlwdHMvbWt2ZXJzaW9uIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL21rdmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTBiOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby9zY3JpcHRzL21rdmVyc2lvbgpAQCAtMCwwICsxLDI0NSBAQAorIyEvYmluL2Jhc2gKKworIworIyAgICBDb3B5cmlnaHQgMjAxMS0yMDE2IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgYXR0ZW1wdHMgdG8gZmluZCBhbmQgZ2VuZXJhdGUgYSBwYWNrYWdlIHZlcnNpb24KKyMgICAgICBpbmNsdWRpbmcsIGlmIG5lY2Vzc2FyeSwgdGhlIG51bWJlciBvZiBjb21taXRzIGZyb20gdGhlIGxhc3QKKyMgICAgICBHSVQgdGFnIGFuZCB0aGUgY3VycmVudCBHSVQgaGFzaCBjb3JyZXNwb25kaW5nIHRvIEhFQUQgZm9yIHRoZQorIyAgICAgIGN1cnJlbnQgYnJhbmNoLgorIworIyAgICAgIFRoaXMgaXMgbGFyZ2VseSBjb2JibGVkIHRvZ2V0aGVyIGZyb20gc2ltaWxhciBzY3JpcHRzIGluIG90aGVyCisjICAgICAgcGFja2FnZXMgdGhhdCBhcmUgbWFpbnRhaW5lZCBpbiBHSVQgKGxpbnV4LCB1LWJvb3QsIHBhcnRlZCwgZXRjLikuCisjCisjICAgICAgVGhpcyBjYW4gcHJvZHVjZSB2ZXJzaW9uIGluZm9ybWF0aW9uIHN1Y2ggYXM6CisjCisjICAgICAgICAxLjAuMQorIyAgICAgICAgMS4wLjEtZGlydHkKKyMgICAgICAgIDEuMC4xLTAwMDMyLWdhYjUwZGJiCisjICAgICAgICAxLjAuMS0wMDAzMi1nYWI1MGRiYi1kaXJ0eQorIworCisjIENvbnN0YW50cworCitST09URElSPSR7UFJFRklYfS8KKworQklORElSPSR7Uk9PVERJUn1iaW4KK0RBVEFESVI9JHtST09URElSfXNoYXJlCitERVZJQ0VESVI9JHtST09URElSfWRldgorQ09ORkRJUj0ke1JPT1RESVJ9ZXRjCitMSUJESVI9JHtST09URElSfWxpYgorTElCRVhFQ0RJUj0ke1JPT1RESVJ9bGliZXhlYworVkFSRElSPSR7Uk9PVERJUn12YXIKK0xPR0RJUj0ke1ZBUkRJUn0vbG9nCitNQU5ESVI9JHtST09URElSfW1hbgorU0JJTkRJUj0ke1JPT1RESVJ9c2JpbgorCitVU1JESVI9JHtST09URElSfXVzcgorVVNSQklORElSPSR7VVNSRElSfS9iaW4KK1VTUkRBVEFESVI9JHtVU1JESVJ9L3NoYXJlCitVU1JMSUJESVI9JHtVU1JESVJ9L2xpYgorVVNSTElCRVhFQ0RJUj0ke1VTUkRJUn0vbGliZXhlYworVVNSU0JJTkRJUj0ke1VTUkRJUn0vc2JpbgorCitBV0s9JHtVU1JCSU5ESVJ9L2F3aworQkFTRU5BTUU9JHtVU1JCSU5ESVJ9L2Jhc2VuYW1lCitDQVQ9JHtCSU5ESVJ9L2NhdAorRUNITz0iJHtCSU5ESVJ9L2VjaG8iCitOVUxMPSR7REVWSUNFRElSfS9udWxsCitQUklOVEY9JHtVU1JCSU5ESVJ9L3ByaW50ZgorUk09JHtCSU5ESVJ9L3JtCitTRUQ9JHtCSU5ESVJ9L3NlZAorCitWRVJTSU9OPSIiCisKKyMKKyMgdXNhZ2UgPHN0YXR1cz4KKyMKKyMgRGVzY3JpcHRpb246CisjICAgVGhpcyByb3V0aW5lIHByaW50cyBvdXQgdGhlIHByb3BlciBjb21tYW5kIGxpbmUgdXNhZ2UgZm9yIHRoaXMKKyMgICBwcm9ncmFtIGFuZCB0aGVuIGV4aXRzIHdpdGggdGhlIHNwZWNpZmllZCBzdGF0dXMuCisjCisjIElucHV0KHMpOgorIyAgIHN0YXR1cyAtIEV4aXQgc3RhdHVzIHRvIGV4aXQgdGhlIHByb2dyYW0gd2l0aC4KKyMKKyMgUmV0dXJuczoKKyMgICBUaGlzIHN1YnJvdXRpbmUgZG9lcyBub3QgcmV0dXJuLgorIwordXNhZ2UoKSB7CisJbG9jYWwgbmFtZT1gJHtCQVNFTkFNRX0gJHswfWAKKworCSR7RUNIT30gIlVzYWdlOiAke25hbWV9IFtvcHRpb25zXSBbIDxwcm9qZWN0IHJvb3Q+IF0iCisKKwlpZiBbICR7MX0gLW5lIDAgXTsgdGhlbgorCQkke0VDSE99ICJUcnkgJyR7bmFtZX0gLWgnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKwlmaQorCisJaWYgWyAkezF9IC1uZSAxIF07IHRoZW4KKyR7Q0FUfSA8PCBFT0YKKyAgLWIsIC0tYnVpbGQtdmVyc2lvbj1WRVJTSU9OICBTcGVjaWZ5IFZFUlNJT04gYXMgdGhlIGJ1aWxkIHZlcnNpb24gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSBidWlsZCBpbmZvcm1hdGlvbiBhZ2FpbnN0LgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgIFByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0LgorRU9GCisJZmkKKworCWV4aXQgJHsxfQorfQorCisjCisjIGdpdHZlcnNpb24gPHN0cmluZz4gPGRpcmVjdG9yeT4gPHZlcnNpb24+CisjCisjIERlc2NyaXB0aW9uOgorIyAgIFRoaXMgcm91dGluZSBwcmludHMgb3V0IGFueSBHSVQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcHBlbmRlZCB0byB0aGUKKyMgICBlbmQgb2YgdGhlIHBhY2thZ2UgdmVyc2lvbiwgaW5jbHVkaW5nIHRoZSBudW1iZXIgb2YgY29tbWl0cyBmcm9tCisjICAgdGhlIGxhc3QgR0lUIHRhZyBhbmQgdGhlIGN1cnJlbnQgR0lUIGhhc2ggY29ycmVzcG9uZGluZyB0byBIRUFECisjICAgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4KKyMKKyMgSW5wdXQocyk6CisjICAgc3RyaW5nICAgIC0gVGhlIGN1cnJlbnQgdmVyc2lvbiBzdHJpbmcgd2hpY2ggbWF5IGJlIGVtcHR5LgorIyAgIGRpcmVjdG9yeSAtIFRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyMgICB2ZXJzaW9uICAgLSBUaGUgb3B0aW9uYWwgY3VycmVudCBwYWNrYWdlIHZlcnNpb24uCisjCisjIFJldHVybnM6CisjICAgTi9BCisjCitnaXR2ZXJzaW9uKCkgeworCWxvY2FsIHN0cmluZz0iJHsxfSIKKwlsb2NhbCBkaXI9IiR7Mn0iCisJbG9jYWwgdmVyc2lvbj0iJHszfSIKKwlsb2NhbCBoZWFkCisJbG9jYWwgZXhhY3QKKwlsb2NhbCBkdGFnCisJbG9jYWwgZ2l0dmVyc2lvbgorCisJIyBSZXRyaWV2ZSB0aGUgc2hvcnRlbmVkLCB1bmlxdWUgR0lUIGhhc2ggYXNzb2NpYXRlZCB3aXRoIHRoZQorCSMgJ0hFQUQnIEdJVCBvYmplY3QKKworCWhlYWQ9YHRlc3QgLWQgLmdpdCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRCAyPiAke05VTEx9YAorCisJIyBJZiB3ZSBmb3VuZCBhIGhhc2gsIHdlIGFyZSBhY3R1YWxseSBpbiBhIEdJVCByZXBvc2l0b3J5OyBjb250aW51ZS4KKworCWlmIFsgLW4gIiR7aGVhZH0iIF07IHRoZW4KKwkgICAgCSMgQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBwb3NpdGlvbiBpbiBHSVQgdGhhdCBpcworCSAgICAJIyBleGFjdGx5IGF0IGFuIGV4aXN0aW5nIHRhZyAoZS5nLiAxLjAuMikuIElmIHdlIGFyZSwKKwkgICAgCSMganVzdCB1c2UgaXQgYW5kIGFkZCBhIGRpcnR5IHF1YWxpZmllci4gT3RoZXJ3aXNlLAorCSAgICAJIyB3b3JrIHRocm91Z2ggdGhlIGxvZ2ljIHRvIGRldGVybWluZSBob3cgZmFyIG9mZiB0aGUKKwkgICAgCSMgdGFnIHRoZSB0cmVlIGlzLgorCisJICAgIAlleGFjdD0iYGdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoIDI+ICR7TlVMTH1gIgorCisJCWlmIFsgLXogIiR7ZXhhY3R9IiBdIHx8IFsgLW4gIiR7dmVyc2lvbn0iIF0gJiYgWyAiJHt2ZXJzaW9ufSIgIT0gIiR7ZXhhY3R9IiBdOyB0aGVuCisJCQlkdGFnPSJgZ2l0IGRlc2NyaWJlIDI+ICR7TlVMTH1gIgorCisJCQkjIElmIHdlIGFyZSBuIGNvbW1pdHMgYXdheSBmcm9tIGEgdGFnLCB0aGVuCisJCQkjIHByaW50IG4gYW5kIGEgc2hvcnRlbmVkIHZlcnNpb24gb2YgdGhlCisJCQkjIGhhc2guIE90aGVyd2lzZSwganVzdCBwcmludCB0aGUgaGFzaC4KKwkJCSMKKwkJCSMgSWYgd2UgYXJlIGF0IGFuIGV4YWN0IHZlcnNpb24sIHRoZW4gdGhlcmUKKwkJCSMgd29uJ3QgYmUgYSBkZWx0YSBvciBhIGhhc2gsIGp1c3QgdXNlIHRoZQorCQkJIyBleGFjdCB0YWcuCisKKwkJCWlmIFsgLW4gIiR7ZHRhZ30iIF07IHRoZW4KKwkJCQlpZiBbICIke2R0YWd9IiA9PSAiJHtleGFjdH0iIF07IHRoZW4KKwkJCQkJZ2l0dmVyc2lvbj0iJHtkdGFnfSIKKwkJCQllbHNlCisJCQkJCWdpdHZlcnNpb249YCR7UFJJTlRGfSAiJHtkdGFnfSIgfCAke0FXS30gLUYgJy0nICd7cHJpbnRmKCIlcy0lMDVkLSVzIiwgJChORi0yKSwkKE5GLTEpLCQoTkYpKX0nIDI+ICR7TlVMTH1gCisJCQkJZmkKKworCQkJZWxzZQorCQkJCWdpdHZlcnNpb249YCR7UFJJTlRGfSAiZyR7aGVhZH0iYAorCisJCQlmaQorCisgICAgICAgICAgICAgICAgZWxzZQorCQkJZ2l0dmVyc2lvbj0iJHtleGFjdH0iCisKKwkJZmkKKworCQkjIFVwZGF0ZSB0aGUgaW5kZXggaWYgd2UgYXJlIGluIGEgd3JpdGFibGUgZGlyZWN0b3J5CisJCSMgc28gdGhhdCB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGNoZWNrIGZvciBhIGRpcnR5IChoYXMKKwkJIyB1bmNvbW1pdHRlZCBjaGFuZ2VzIG9yIHVucmVzb2x2ZWQgbWVyZ2VzKSB0cmVlLgorCisJCWlmIFsgLXcgIiR7ZGlyfSIgXTsgdGhlbgorCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLS11bm1lcmdlZCA+ICR7TlVMTH0KKwkJZmkKKworCQkjIE5vdyBjaGVjayBmb3Igc3VjaCBhIGRpcnR5IHRyZWUgYW5kIGFkZCB0byB0aGUgInN0cmluZyIKKwkJIyBpZiB3ZSBmb3VuZCBvbmUuCisKKwkJaWYgZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCB8IHJlYWQgZHVtbXk7IHRoZW4KKwkJICAgIAlpZiBbIC1uICIke2dpdHZlcnNpb259IiBdOyB0aGVuCisJCQkJZ2l0dmVyc2lvbj0iJHtnaXR2ZXJzaW9ufS1kaXJ0eSIKKwkJCWVsc2UKKwkJCQlnaXR2ZXJzaW9uPSJkaXJ0eSIKKwkJCWZpCisgICAgCQlmaQorCisJZWxzZQorCQlnaXR2ZXJzaW9uPSIke3ZlcnNpb259IgorCisJZmkKKworCWlmIFsgLW4gIiR7c3RyaW5nfSIgXSAmJiBbIC1uICIke2dpdHZlcnNpb259IiBdOyB0aGVuCisJCXN0cmluZz0iJHtzdHJpbmd9LSR7Z2l0dmVyc2lvbn0iCisJZWxzZQorCQlzdHJpbmc9IiR7Z2l0dmVyc2lvbn0iCisJZmkKKworCSR7UFJJTlRGfSAiJHtzdHJpbmd9IgorfQorCisjCisjIE1haW4gUHJvZ3JhbSBCb2R5CisjCisKK3doaWxlIFsgJHsjfSAtZ3QgMCBdOyBkbworICAgIAlpZiBbICR7MTowOjF9ID09ICItIiBdOyB0aGVuCisJCWlmIFsgIiR7MX0iID09ICItaCIgXSB8fCBbICIkezF9IiA9PSAiLS1oZWxwIiBdOyB0aGVuCisJCQl1c2FnZSAwCisKKwkJZWxpZiBbICIkezF9IiA9PSAiLWIiIF0gfHwgWyAiJHsxfSIgPT0gIi0tYnVpbGQtdmVyc2lvbiIgXTsgdGhlbgorCQkJdmVyc2lvbj0iJHsyfSIKKwkJCXNoaWZ0IDIKKworCQllbHNlCisJCSAgICAJJHtFQ0hPfSAiVW5rbm93biBhcmd1bWVudCAnJHsxfScuIgorCQkJdXNhZ2UgMQorCisJCWZpCisKKwllbHNlCisJCWJyZWFrCisKKwlmaQorZG9uZQorCitpZiBbICR7I30gLWd0IDEgXTsgdGhlbgorCXVzYWdlIDEKK2VsaWYgWyAkeyN9IC1lcSAxIF07IHRoZW4KKwl0cmVlPSIkezF9IgorZWxzZQorCXRyZWU9Ii4iCitmaQorCitpZiBbICIke3RyZWV9IiAhPSAiLiIgXTsgdGhlbgorCWNkICIke3RyZWV9IgorZmkKKworVkVSU0lPTj0iYGdpdHZlcnNpb24gXCIke1ZFUlNJT059XCIgLiAke3ZlcnNpb259YCIKKworJHtQUklOVEZ9ICIke1ZFUlNJT059IgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9NYWtlZmlsZSBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzNTc4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMzkgQEAKKyMKKyMgICAgQ29weXJpZ2h0IDIwMTcgTmVzdCBMYWJzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjCisjICAgIERlc2NyaXB0aW9uOgorIyAgICAgIFRoaXMgbWFrZSBmaWxlIHN1cHBvcnRzIGdlbmVyYXRpbmcgcHJlYnVpbHQgYXJjaGl0ZWN0dXJlCisjICAgICAgLWluZGVwZW5kZW50IGFuZCAtZGVwZW5kZW50IGRpc3RyaWJ1dGlvbnMgb2YgbmxidWlsZC1hdXRvdG9vbHMKKyMgICAgICBiaW5hcmllcyBmb3IgdGhlIGFyY2hpdGV0dXJlIG9mIHRoZSBjdXJyZW50IGJ1aWxkIGhvc3QuCisjCisKK2luY2x1ZGUgLi4vQ29tbW9uLm1haworCisjCisjIEJ1aWxkIGRpcmVjdG9yaWVzCisjCisKK2J1aWxkZGlyICAgICAgICAgOj0gLgordG9wX2J1aWxkZGlyICAgICA6PSAuLgorYWJzX2J1aWxkZGlyICAgICA6PSAkKENVUkRJUikKK2Fic190b3BfYnVpbGRkaXIgOj0gJChhYnNwYXRoICQodG9wX2J1aWxkZGlyKSkKKworIworIyBTb3VyY2UgZGlyZWN0b3JpZXMKKyMKKworc3JjZGlyICAgICAgICAgICA6PSAuCit0b3Bfc3JjZGlyICAgICAgIDo9IC4uCithYnNfc3JjZGlyICAgICAgIDo9ICQoQ1VSRElSKQorYWJzX3RvcF9zcmNkaXIgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKSkKKworIyBGaWd1cmUgb3V0IHdoYXQgc29ydCBvZiBidWlsZCBob3N0IHdlIGFyZSBydW5uaW5nIG9uLCBzdHJpcHBpbmcgb2ZmCisjIGFueSB0cmFpbGluZyB2ZXJzaW9uIG51bWJlciBpbmZvcm1hdGlvbiB0eXBpY2FsbHkgaW5jbHVkZWQgb24gRGFyd2luCisjIC8gTWFjIE9TIFguCisKK2hvc3QgICAgICAgICAgICAgOj0gJChzaGVsbCAkKHRvcF9zcmNkaXIpL2F1dG9jb25mL2NvbmZpZy5ndWVzcyB8ICQoU0VEKSAtZSAncy9bWzpkaWdpdDpdLl0qJCQvL2cnKQorCitkaXN0ZGlyICAgICAgICAgICA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQorCitkaXN0X3Rnel9UQVJHRVRTICA9ICR7dG9wX2J1aWxkZGlyfS8ke1BBQ0tBR0V9LWNvbW1vbi0kKFZFUlNJT04pJChUR1pfRVhURU5TSU9OKSBcCisgICAgICAgICAgICAgICAgICAgICR7dG9wX2J1aWxkZGlyfS8ke1BBQ0tBR0V9LSR7aG9zdH0tJChWRVJTSU9OKSQoVEdaX0VYVEVOU0lPTikKKworZGlzdF90eHpfVEFSR0VUUyAgPSAke3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS1jb21tb24tJChWRVJTSU9OKSQoVFhaX0VYVEVOU0lPTikgXAorICAgICAgICAgICAgICAgICAgICAke3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS0ke2hvc3R9LSQoVkVSU0lPTikkKFRYWl9FWFRFTlNJT04pCisKK2Rpc3RfY29tbW9uX0RJUlMgID0gc2hhcmUgaW5jbHVkZQorZGlzdF9hcmNoX0RJUlMgICAgPSAkKGhvc3QpCisKK1BBQ0tBR0VfVkVSU0lPTiAgID0gJChzaGVsbCAkKENBVCkgJCh0b3BfYnVpbGRkaXIpLy5sb2NhbC12ZXJzaW9uKQorCitWRVJTSU9OICAgICAgICAgICA9ICQoUEFDS0FHRV9WRVJTSU9OKQorCitESVNUX1RNUERJUiAgICAgIDo9ICQoc2hlbGwgbWt0ZW1wIC11IC1wIC90bXAgLWQgdG1wLiQoUEFDS0FHRSktJChWRVJTSU9OKVhYWFhYWCkKK1RPT0xTX1RNUERJUiAgICAgOj0gJChzaGVsbCBta3RlbXAgLXUgLXAgL3RtcCAtZCB0bXAuJChQQUNLQUdFKS0kKFZFUlNJT04pWFhYWFhYKQorCisjCisjIFZlcmJvc2l0eQorIworX05MX1ZfQlVJTEQgICAgICAgPSAkKF9OTF9WX0JVSUxEXyQoVikpCitfTkxfVl9CVUlMRF8gICAgICA9ICQoX05MX1ZfQlVJTERfJChOTF9ERUZBVUxUX1ZFUkJPU0lUWSkpCitfTkxfVl9CVUlMRF8wICAgICA9IEBlY2hvICIgIEJVSUxEIjsKK19OTF9WX0JVSUxEXzEgICAgID0gCisKK2Rpc3QtdGd6OiAkKGRpc3RfdGd6X1RBUkdFVFMpCisKK2Rpc3QtdHh6OiAkKGRpc3RfdHh6X1RBUkdFVFMpCisKKyMKKyMgUHJvZHVjZSBwcmVidWlsdCBHTlUgYXV0b3Rvb2xzIGJpbmFyaWVzIGZvciB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZQorIyBjdXJyZW50IGJ1aWxkIG1hY2hpbmUgYW5kIGluc3RhbGwgdGhlbSBpbiB0aGlzIG5sYnVpbGQtYXV0b3Rvb2xzCisjIHBhY2thZ2UuCisjCit0b29sczoKKwkkKGNhbGwgbmwtcmVtb3ZlLWRpciwkKFRPT0xTX1RNUERJUikpCisJJChjYWxsIG5sLWNyZWF0ZS1kaXIsJChUT09MU19UTVBESVIpKQorCSQoX05MX1ZfQlVJTEQpJHtzcmNkaXJ9L3BhY2thZ2VzL2J1aWxkIC0tYXJjaCAke2hvc3R9IC0tc3JjZGlyICR7YWJzX3NyY2Rpcn0vcGFja2FnZXMgLS1idWlsZGRpciAiJHtUT09MU19UTVBESVJ9IiAtLWRlc3RkaXIgIiR7YWJzX3RvcF9zcmNkaXJ9L3Rvb2xzL2hvc3QiCisJJChjYWxsIG5sLXJlbW92ZS1kaXIsJChUT09MU19UTVBESVIpKQorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGFuZCAtaW5kZXBlbmRlbnQKKyMgYmluYXJpZXMgZm9yIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGN1cnJlbnQgYnVpbGQgbWFjaGluZSBhbmQgcGFja2FnZQorIyB0aGVtIHVwIGZvciBkaXN0cmlidXRpb24uCisjCitkaXN0IHRvb2xzZGlzdDogJChESVNUX1RBUkdFVFMpCisJJChjYWxsIG5sLXJlbW92ZS1kaXIsJChESVNUX1RNUERJUikpCisKKyMKKyMgU3RhZ2UgdGhlIGRpc3RyaWJ1dGlvbiBmaWxlcyB0byBhIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnkKKyMKK3N0YWdlOgorCSQoY2FsbCBubC1yZW1vdmUtZGlyLCQoRElTVF9UTVBESVIpKQorCSQoY2FsbCBubC1jcmVhdGUtZGlyLCQoRElTVF9UTVBESVIpKQorCSQoX05MX1ZfQlVJTEQpJHtzcmNkaXJ9L3BhY2thZ2VzL2J1aWxkIC0tYXJjaCAke2hvc3R9IC0tc3JjZGlyICR7YWJzX3NyY2Rpcn0vcGFja2FnZXMgLS1idWlsZGRpciAiJHtESVNUX1RNUERJUn0iIC0tZGVzdGRpciAiJHtESVNUX1RNUERJUn0iCisKKyMKKyMgUHJvZHVjZSBwcmVidWlsdCBHTlUgYXV0b3Rvb2xzIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBiaW5hcmllcyBmb3IKKyMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudCBidWlsZCBtYWNoaW5lIGFuZCBwYWNrYWdlIHRoZW0gdXAKKyMgZm9yIGRpc3RyaWJ1dGlvbiBpbiB0YXItZ3ppcCBmb3JtYXQuCisjCiske3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS1jb21tb24tJChWRVJTSU9OKSQoVEdaX0VYVEVOU0lPTik6IHN0YWdlCisJJChOTF9WX1RHWikkKGRpc3RfdGd6X0FSQ0hJVkUpIC0tZGlyZWN0b3J5ICR7RElTVF9UTVBESVJ9ICQoZGlzdF9jb21tb25fRElSUykgfCAkKGRpc3RfdGd6X0NPTVBSRVNTKSA+ICIkKEApIgorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJpbmFyaWVzIGZvcgorIyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjdXJyZW50IGJ1aWxkIG1hY2hpbmUgYW5kIHBhY2thZ2UgdGhlbSB1cAorIyBmb3IgZGlzdHJpYnV0aW9uIGluIHRhci1nemlwIGZvcm1hdC4KKyMKKyR7dG9wX2J1aWxkZGlyfS8ke1BBQ0tBR0V9LSR7aG9zdH0tJChWRVJTSU9OKSQoVEdaX0VYVEVOU0lPTik6IHN0YWdlCisJJChOTF9WX1RHWikkKGRpc3RfdGd6X0FSQ0hJVkUpIC0tZGlyZWN0b3J5ICR7RElTVF9UTVBESVJ9ICQoZGlzdF9hcmNoX0RJUlMpIHwgJChkaXN0X3Rnel9DT01QUkVTUykgPiAiJChAKSIKKworIworIyBQcm9kdWNlIHByZWJ1aWx0IEdOVSBhdXRvdG9vbHMgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGJpbmFyaWVzIGZvcgorIyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjdXJyZW50IGJ1aWxkIG1hY2hpbmUgYW5kIHBhY2thZ2UgdGhlbSB1cAorIyBmb3IgZGlzdHJpYnV0aW9uIGluIHRhci14eiBmb3JtYXQuCisjCiske3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS1jb21tb24tJChWRVJTSU9OKSQoVFhaX0VYVEVOU0lPTik6IHN0YWdlCisJJChOTF9WX1RYWikkKGRpc3RfdHh6X0FSQ0hJVkUpIC0tZGlyZWN0b3J5ICR7RElTVF9UTVBESVJ9ICQoZGlzdF9jb21tb25fRElSUykgfCAkKGRpc3RfdHh6X0NPTVBSRVNTKSA+ICIkKEApIgorCisjCisjIFByb2R1Y2UgcHJlYnVpbHQgR05VIGF1dG90b29scyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJpbmFyaWVzIGZvcgorIyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjdXJyZW50IGJ1aWxkIG1hY2hpbmUgYW5kIHBhY2thZ2UgdGhlbSB1cAorIyBmb3IgZGlzdHJpYnV0aW9uIGluIHRhci14eiBmb3JtYXQuCisjCiske3RvcF9idWlsZGRpcn0vJHtQQUNLQUdFfS0ke2hvc3R9LSQoVkVSU0lPTikkKFRYWl9FWFRFTlNJT04pOiBzdGFnZQorCSQoTkxfVl9UWFopJChkaXN0X3R4el9BUkNISVZFKSAtLWRpcmVjdG9yeSAke0RJU1RfVE1QRElSfSAkKGRpc3RfYXJjaF9ESVJTKSB8ICQoZGlzdF90eHpfQ09NUFJFU1MpID4gIiQoQCkiCisKK2NsZWFuOiBjbGVhbi1sb2NhbApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi51cmwgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2F1dG9jb25mL2F1dG9jb25mLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmUyY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9hdXRvY29uZi9hdXRvY29uZi0yLjY4LnRhci5negpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi52ZXJzaW9uIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvY29uZi9hdXRvY29uZi52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2F1dG9jb25mL2F1dG9jb25mLnZlcnNpb24KQEAgLTAsMCArMSBAQAorMi42OApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvbWFrZS9hdXRvbWFrZS51cmwgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2F1dG9tYWtlL2F1dG9tYWtlLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmIxNDExCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9hdXRvbWFrZS9hdXRvbWFrZS51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9hdXRvbWFrZS9hdXRvbWFrZS0xLjE0LjEudGFyLmd6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2F1dG9tYWtlL2F1dG9tYWtlLnZlcnNpb24gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2F1dG9tYWtlL2F1dG9tYWtlLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlNzk5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYXV0b21ha2UvYXV0b21ha2UudmVyc2lvbgpAQCAtMCwwICsxIEBACisxLjE0LjEKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvYnVpbGQgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhYjU1MGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2J1aWxkCkBAIC0wLDAgKzEsNDkwIEBACisjIS9iaW4vc2gKKworIworIyAgICBDb3B5cmlnaHQgMjAxNC0yMDE3IE5lc3QgTGFicyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyAgICBEZXNjcmlwdGlvbjoKKyMgICAgICBUaGlzIGZpbGUgaXMgYSBjb252ZW5pZW5jZSBzY3JpcHQgZm9yIGJ1aWxkaW5nLCBmb3IgdGhlIGN1cnJlbnQKKyMgICAgICBidWlsZCBob3N0IHN5c3RlbSwgdGhlIG1pbmltYWwsIGNvcmUgc2V0IG9mIEdOVSBhdXRvdG9vbHMgb24KKyMgICAgICB3aGljaCBvdGhlciBwcm9qZWN0cycgYnVpbGQgc3lzdGVtcyBkZXBlbmQuCisjCisKK0VYVEVOU0lPTlM9InRhci5neiB0YXIueHoiCisKK1ZFUkJPU0U9MAorCitzdGVtPXRvb2xzL3BhY2thZ2VzCithYnNfc3JjZGlyPWBwd2RgCithYnNfdG9wX3NyY2Rpcj1gZWNobyAke2Fic19zcmNkaXJ9IHwgc2VkIC1lIHMsLyR7c3RlbX0sLGdgCisKK2Fic190b3BfaG9zdGRpcj0iJHthYnNfdG9wX3NyY2Rpcn0vdG9vbHMvaG9zdCIKKworIworIyB1c2FnZQorIworIyBEaXNwbGF5IHByb2dyYW0gdXNhZ2UuCisjCit1c2FnZSgpIHsKKyAgICBuYW1lPWBiYXNlbmFtZSAkezB9YAorCisgICAgZWNobyAiVXNhZ2U6ICR7bmFtZX0gWyBvcHRpb25zIF0gWyAtLSA8cGFja2FnZT4gLi4uIF0iCisKKyAgICBpZiBbICQxIC1uZSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiVHJ5ICcke25hbWV9IC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZmkKKworICAgIGlmIFsgJDEgLW5lIDEgXTsgdGhlbgorICAgICAgICBlY2hvICIiCisJZWNobyAiICAtLWFyY2ggQVJDSCAgICAgIEJ1aWxkIHRoZSBwYWNrYWdlIGZvciBBUkNIIGhvc3QgYXJjaGl0ZWN0dXJlLiIKKyAgICAgICAgZWNobyAiICAtaCwgLS1oZWxwICAgICAgIFByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0LiIKKyAgICAgICAgZWNobyAiICAtLWJ1aWxkZGlyIERJUiAgIEJ1aWxkIHRoZSBwYWNrYWdlcyBpbiBESVIuIgorICAgICAgICBlY2hvICIgIC0tZGVzdGRpciBESVIgICAgSW5zdGFsbCB0aGUgYnVpbHQgdG9vbHMgdG8gZGlyZWN0b3J5IERJUi4iCisgICAgICAgIGVjaG8gIiAgLS1zcmNkaXIgRElSICAgICBGaW5kIHBhY2thZ2UsIHZlcnNpb24sIGFuZCBVUkwgbWV0YWRhdGEgaW4gRElSLiIKKyAgICAgICAgZWNobyAiICAtdiwgLS12ZXJib3NlICAgIEVuYWJsZSB2ZXJib3NlIG91dHB1dC4iCisgICAgICAgIGVjaG8gIiIKKyAgICBmaQorCisgICAgZXhpdCAkMQorfQorCisjCisjIGVycm9yIDwuLi4+CisjCisjIERpc3BsYXkgdG8gc3RhbmRhcmQgZXJyb3IgdGhlIHNwZWNpZmllZCBhcmd1bWVudHMKKyMKK2Vycm9yKCkgeworICAgIGVjaG8gIiR7Kn0iID4mMgorfQorCisjCisjIHZlcmJvc2UgPC4uLj4KKyMKKyMgRGlzcGxheSB0byBzdGFuZGFyZCBlcnJvciB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cworIwordmVyYm9zZSgpIHsKKyAgICBlY2hvICIkeyp9IiA+JjIKK30KKworIworIyBzZXBhcmF0b3IKKyMKKyMgRGlzcGxheSB0byBzdGFuZGFyZCBlcnJvciBhIGxvZyBzZXBhcmF0b3IuCisjCitzZXBhcmF0b3IoKSB7CisgICAgdmVyYm9zZSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCit9CisKKyMKKyMgdHJhaWxlcgorIworIyBEaXNwbGF5IHRvIHN0YW5kYXJkIGVycm9yIGEgbG9nIHRyYWlsZXIuCisjCit0cmFpbGVyKCkgeworICAgIHZlcmJvc2UgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorfQorCisjCisjIGJhbm5lciA8bWVzc2FnZSAuLi4+CisjCisjIERpc3BsYXkgdG8gc3RhbmRhcmQgZXJyb3IgYSBsb2cgYmFubmVyIHdpdGggYSBtZXNzYWdlLgorIworYmFubmVyKCkgeworICAgIHRyYWlsZXIKKworICAgIHZlcmJvc2UgIiR7Kn0iCit9CisKKyMKKyMgc3ViYmFubmVyIDxtZXNzYWdlIC4uLj4KKyMKKyMgRGlzcGxheSB0byBzdGFuZGFyZCBlcnJvciBhIGxvZyBzdWJiYW5uZXIgd2l0aCBhIG1lc3NhZ2UuCisjCitzdWJiYW5uZXIoKSB7CisgICAgc2VwYXJhdG9yCisKKyAgICB2ZXJib3NlICIkeyp9IgorfQorCisjCisjIGZpbmRfYXJjaGl2ZSA8c3ViZGlyPiA8cGFja2FnZT4gPGV4dGVuc2lvbnMuLi4+CisjCisjIEF0dGVtcHQgdG8gZmluZCB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgYXJjaGl2ZSBpbiB0aGUgcHJvdmlkZWQKKyMgc3ViZGlyZWN0b3J5IG1hdGNoaW5nIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbnMuCisjCitmaW5kX2FyY2hpdmUoKSB7CisgICAgbG9jYWwgc3ViZGlyPSIkezF9IgorICAgIGxvY2FsIHBhY2thZ2U9IiR7Mn0iCisgICAgbG9jYWwgYXJjaGl2ZQorCisgICAgc2hpZnQgMgorCisgICAgZm9yIGV4dGVuc2lvbiBpbiAkeyp9OyBkbworICAgICAgICBsb2NhbCBtYXliZV9hcmNoaXZlPSIke3N1YmRpcn0vJHtwYWNrYWdlfS4ke2V4dGVuc2lvbn0iCisKKyAgICAgICAgdmVyYm9zZSAiICBGSU5EICAgICAke21heWJlX2FyY2hpdmV9IgorCisgICAgICAgIGlmIFsgLXIgIiR7bWF5YmVfYXJjaGl2ZX0iIF07IHRoZW4KKyAgICAgICAgICAgIGFyY2hpdmU9IiR7bWF5YmVfYXJjaGl2ZX0iCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGVjaG8gIiR7YXJjaGl2ZX0iCit9CisKKyMKKyMgZmluZF92ZXJzaW9uZWRfb3Jfbm9udmVyc2lvbmVkX2FyY2hpdmUgPHN1YmRpcj4gPHBhY2thZ2U+IDx2ZXJzaW9uPiA8ZXh0ZW5zaW9ucy4uLj4KKyMKKyMgQXR0ZW1wdCB0byBmaW5kIHRoZSBzcGVjaWZpZWQgdmVyc2lvbi1xdWFsaWZpZWQgb3Igbm9uLXF1YWxpZmllZAorIyBwYWNrYWdlIGFyY2hpdmUgaW4gdGhlIHByb3ZpZGVkIHN1YmRpcmVjdG9yeSBtYXRjaGluZyBvbmUgb2YgdGhlCisjIHNwZWNpZmllZCBleHRlbnNpb25zLgorIworZmluZF92ZXJzaW9uZWRfb3Jfbm9udmVyaW9uZWRfYXJjaGl2ZSgpIHsKKyAgICBsb2NhbCBzdWJkaXI9IiR7MX0iCisgICAgbG9jYWwgcGFja2FnZT0iJHsyfSIKKyAgICBsb2NhbCB2ZXJzaW9uPSIkezN9IgorICAgIGxvY2FsIGZxcGFja2FnZT0iJHtwYWNrYWdlfS0ke3ZlcnNpb259IgorICAgIGxvY2FsIGFyY2hpdmUKKworICAgIHNoaWZ0IDMKKworICAgIGFyY2hpdmU9ImBmaW5kX2FyY2hpdmUgJHtzdWJkaXJ9ICR7ZnFwYWNrYWdlfSAkeyp9YCIKKworICAgIGlmIFsgLXogIiR7YXJjaGl2ZX0iIF07IHRoZW4KKyAgICAgICAgYXJjaGl2ZT0iYGZpbmRfYXJjaGl2ZSAke3N1YmRpcn0gJHtwYWNrYWdlfSAkeyp9YCIKKyAgICBmaQorCisgICAgZWNobyAiJHthcmNoaXZlfSIKK30KKworIworIyBmZXRjaF91cmxfd2l0aF9jb21tYW5kIDxmZXRjaGRpcj4gPHVybD4gPGNvbW1hbmQgLi4uPgorIworIyBBdHRlbXB0IHRvIGZldGNoIHRoZSBzcGVjaWZpZWQgVVJMIHRvIHRoZSBwcm92aWRlZCBkaXJlY3Rvcnkgd2l0aAorIyB0aGUgcHJvdmlkZWQgY29tbWFuZC4KKyMKK2ZldGNoX3VybF93aXRoX2NvbW1hbmQoKSB7CisgICAgbG9jYWwgZmV0Y2hkaXI9IiR7MX0iCisgICAgbG9jYWwgdXJsPSIkezJ9IgorICAgIGxvY2FsIGN1cmRpcj0iYHB3ZGAiCisKKyAgICBzaGlmdCAyCisKKyAgICBjZCAiJHtmZXRjaGRpcn0iCisKKyAgICAgICAgJHsqfSAiJHt1cmx9IgorCisgICAgICAgIGlmIFsgJHs/fSAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBlcnJvciAiRmFpbGVkIHRvIGZldGNoICR7dXJsfSB3aXRoICR7MX0uIgorICAgICAgICBmaQorCisgICAgY2QgIiR7Y3VyZGlyfSIKK30KKworIworIyBmZXRjaF91cmwgPGZldGNoZGlyPiA8dXJsPgorIworIyBBdHRlbXB0IHRvIGZldGNoIHRoZSBzcGVjaWZpZWQgVVJMIHRvIHRoZSBwcm92aWRlZCBkaXJlY3Rvcnkgd2l0aAorIyBlaXRoZXIgd2dldCBvciBjdXJsLgorIworZmV0Y2hfdXJsKCkgeworICAgIGxvY2FsIGZldGNoZGlyPSIkezF9IgorICAgIGxvY2FsIHVybD0iJHsyfSIKKworICAgICMgVHJ5IHRvIGZldGNoIHRoZSBwYWNrYWdlIHVzaW5nIHdnZXQgb3IgY3VybAorCisgICAgZmV0Y2hfdXJsX3dpdGhfY29tbWFuZCAiJHtmZXRjaGRpcn0iICIke3VybH0iIHdnZXQgLS1xdWlldCB8fAorICAgICAgICBmZXRjaF91cmxfd2l0aF9jb21tYW5kICIke2ZldGNoZGlyfSIgIiR7dXJsfSIgY3VybCAtLXNpbGVudCAtLXJlbW90ZS1uYW1lCit9CisKKyMKKyMgZmV0Y2hfcGFja2FnZSA8ZmluZGRpcj4gPGZldGNoZGlyPiA8cGFja2FnZT4gPHZlcnNpb24+IDx1cmw+CisjCisjIEF0dGVtcHQgdG8gZmV0Y2ggdGhlIHNwZWNpZmllZCBwYWNrYWdlIHZlcnNpb24gdG8gPGZldGNoZGlyPiwgaWYgYQorIyBsb2NhbCBhcmNoaXZlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gPGZpbmRkaXI+IG9yIDxmZXRjaGRpcj4sCisjIGZyb20gdGhlIHByb3ZpZGVkIFVSTC4KKyMKK2ZldGNoX3BhY2thZ2UoKSB7CisgICAgbG9jYWwgZmluZGRpcj0iJHsxfSIKKyAgICBsb2NhbCBmZXRjaGRpcj0iJHsyfSIKKyAgICBsb2NhbCBwYWNrYWdlPSIkezN9IgorICAgIGxvY2FsIHZlcnNpb249IiR7NH0iCisgICAgbG9jYWwgdXJsPSIkezV9IgorICAgIGxvY2FsIGZxcGFja2FnZT0iJHtwYWNrYWdlfS0ke3ZlcnNpb259IgorCisgICAgIyBDaGVjayB3aGV0aGVyIGEgbG9jYWwgYXJjaGl2ZSBhbHJlYWR5IGV4aXN0cyBpbiA8ZmluZGRpcj4gb3IgPGZldGNoZGlyPi4KKworICAgIGFyY2hpdmU9ImBmaW5kX3ZlcnNpb25lZF9vcl9ub252ZXJpb25lZF9hcmNoaXZlICR7ZmluZGRpcn0gJHtwYWNrYWdlfSAke3ZlcnNpb259ICR7RVhURU5TSU9OU31gIgorCisgICAgaWYgWyAteiAiJHthcmNoaXZlfSIgXTsgdGhlbgorICAgICAgICBhcmNoaXZlPSJgZmluZF92ZXJzaW9uZWRfb3Jfbm9udmVyaW9uZWRfYXJjaGl2ZSAke2ZldGNoZGlyfSAke3BhY2thZ2V9ICR7dmVyc2lvbn0gJHtFWFRFTlNJT05TfWAiCisgICAgZmkKKworICAgICMgSWYgbm8gYXJjaGl2ZSB3YXMgZm91bmQsIGF0dGVtcHQgdG8gZmV0Y2ggaXQuCisKKyAgICBpZiBbIC16ICIke2FyY2hpdmV9IiBdOyB0aGVuCisgICAgICAgIHZlcmJvc2UgIiAgRkVUQ0ggICAgJHt1cmx9IgorCisgICAgICAgIGZldGNoX3VybCAiJHtmZXRjaGRpcn0iICIke3VybH0iCisKKyAgICBlbHNlCisgICAgICAgIGVycm9yICJObywgZm91bmQgJHthcmNoaXZlfSBsb2NhbGx5LiIKKworICAgIGZpCit9CisKKyMKKyMgcmVtb3ZldG1wCisjCisjIFJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHVzZWQgZHVyaW5nIHRoZSBydW4gb2YgdGhpcworIyBzY3JpcHQuCisjCityZW1vdmV0bXAoKSB7CisgICAgcm0gLWYgIiR7TElCVE9PTElaRX0iCisgICAgaWYgWyAtbiAiJHtBVVRPTTRURV9DRkd9IiBdOyB0aGVuCisgICAgICAgIHJtIC1mICIke0FVVE9NNFRFX0NGR30iCisgICAgZmkKK30KKworIworIyBidWlsZF9wYWNrYWdlIDxwYWNrYWdlPiA8dmVyc2lvbj4gPGhvc3Q+IDxhcmNoaXZlZGlyPiA8YnVpbGRkaXI+IDxkZXN0ZGlyPgorIworIyBCdWlsZCB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgdmVyc2lvbiBmb3IgPGhvc3Q+IGluIDxidWlsZGRpcj4gZnJvbQorIyB0aGUgYXJjaGl2ZSBmb3VuZCBpbiA8YXJjaGl2ZWRpcj4gYW5kIGluc3RhbGwgaXQgaW50byB0aGUgc3BlY2lmaWVkCisjIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSwgPGRlc3RkaXI+LgorIworYnVpbGRfcGFja2FnZSgpIHsKKyAgICBsb2NhbCBwYWNrYWdlPSIkezF9IgorICAgIGxvY2FsIHZlcnNpb249IiR7Mn0iCisgICAgbG9jYWwgaG9zdD0iJHszfSIKKyAgICBsb2NhbCBhcmNoaXZlZGlyPSIkezR9IgorICAgIGxvY2FsIGJ1aWxkZGlyPSIkezV9IgorICAgIGxvY2FsIGRlc3RkaXI9IiR7Nn0iCisgICAgbG9jYWwgZnFwYWNrYWdlPSIke3BhY2thZ2V9LSR7dmVyc2lvbn0iCisgICAgbG9jYWwgY3VyZGlyPWBwd2RgCisgICAgbG9jYWwgYXJjaGl2ZQorCisgICAgdmVyYm9zZSAiICBDSEVDSyAgICAke3BhY2thZ2V9IgorCisgICAgYXJjaGl2ZT0iYGZpbmRfdmVyc2lvbmVkX29yX25vbnZlcmlvbmVkX2FyY2hpdmUgJHthcmNoaXZlZGlyfSAke3BhY2thZ2V9ICR7dmVyc2lvbn0gJHtFWFRFTlNJT05TfWAiCisKKyAgICBpZiBbIC16ICIke2FyY2hpdmV9IiBdOyB0aGVuCisgICAgICAgIGVycm9yICJDb3VsZCBub3QgZmluZCBhbiBhcmNoaXZlIGZvciAke3BhY2thZ2V9LiIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGlmIFsgISAtZCAiJHthcmNoaXZlZGlyfS8ke2ZxcGFja2FnZX0iIF07IHRoZW4KKwl2ZXJib3NlICIgIFRBUiAgICAgICR7YXJjaGl2ZX0iCisgICAgICAgIHRhciAtLWRpcmVjdG9yeSAiJHthcmNoaXZlZGlyfSIgLXhmICIke2FyY2hpdmV9IiB8fCBleGl0ICR7P30KKyAgICBmaQorCisgICAgIyBJZiBwb3NzaWJsZSwgYXR0ZW1wdCB0byBiZSBzZWxmLXN1ZmZpY2llbnQsIHJlbHlpbmcgb24gR05VIGF1dG90b29scworICAgICMgZXhlY3V0YWJsZXMgaW5zdGFsbGVkIGFsb25nIHdpdGggdGhlIFNESyBpdHNlbGYuCisKKyAgICBpZiBbIC1kICIke2Rlc3RkaXJ9LyR7aG9zdH0vYmluIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBQQVRIPSIke2Rlc3RkaXJ9LyR7aG9zdH0vYmluOiR7UEFUSH0iCisgICAgZmkKKworICAgIGlmIFsgLWQgIiR7ZGVzdGRpcn0vYmluIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBQQVRIPSIke2Rlc3RkaXJ9L2Jpbjoke1BBVEh9IgorICAgIGZpCisKKyAgICBleHBvcnQgQUNMT0NBTD1gd2hpY2ggYWNsb2NhbGAKKyAgICBleHBvcnQgQVVUT0NPTkY9ImB3aGljaCBhdXRvY29uZmAiCisgICAgZXhwb3J0IEFVVE9IRUFERVI9ImB3aGljaCBhdXRvaGVhZGVyYCIKKyAgICBleHBvcnQgQVVUT000VEU9ImB3aGljaCBhdXRvbTR0ZWAiCisgICAgZXhwb3J0IEFVVE9NQUtFPSJgd2hpY2ggYXV0b21ha2VgIgorICAgIGV4cG9ydCBMSUJUT09MSVpFPSJgd2hpY2ggbGlidG9vbGl6ZSB8fCB3aGljaCBnbGlidG9vbGl6ZWAiCisgICAgZXhwb3J0IE00PWB3aGljaCBtNGAKKworICAgICMgRXN0YWJsaXNoLCBpZiBuZWNlc3NhcnksIHNvbWUgU0RLLXNwZWNpZmljIGRpcmVjdG9yaWVzIG5lZWRlZCB0bworICAgICMgb3ZlcnJpZGUgdmFyaW91cyBwYXRocyBpbiBHTlUgYXV0b3Rvb2xzIHRoYXQgb3RoZXJ3aXNlIGV4cGVjdCB0byBiZQorICAgICMgYWJzb2x1dGUgKGUuZy4gL3Vzci9zaGFyZSwgZXRjLikuCisKKyAgICBpZiBbIC1kICIke2Rlc3RkaXJ9L3NoYXJlIiBdOyB0aGVuCisgICAgICAgIGlmIFsgLWQgIiR7ZGVzdGRpcn0vc2hhcmUvYXV0b2NvbmYiIF07IHRoZW4KKyAgICAgICAgICAgIGV4cG9ydCBBQ19NQUNST0RJUj0iJHtkZXN0ZGlyfS9zaGFyZS9hdXRvY29uZiIKKworICAgICAgICAgICAgZXhwb3J0IGF1dG9tNHRlX3BlcmxsaWJkaXI9IiR7ZGVzdGRpcn0vc2hhcmUvYXV0b2NvbmYiCisJZmkKKworICAgICAgICBpZiBbIC1kICIke2Rlc3RkaXJ9L3NoYXJlL2F1dG9tYWtlLTEuMTQiIF07IHRoZW4KKyAgICAgICAgICAgIGV4cG9ydCBQRVJMNUxJQj0iJHtkZXN0ZGlyfS9zaGFyZS9hdXRvbWFrZS0xLjE0OiR7UEVSTDVMSUJ9IgorICAgICAgICBmaQorICAgIGZpCisKKyAgICB0cmFwICJyZW1vdmV0bXAiIDEgMiAzIDkgMTUKKworICAgICMKKyAgICAjIEdlbmVyYXRlIGFueSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIHBhdGNoZWQgYXQgcnVuIHRpbWUKKyAgICAjIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSBTREsgdHJlZSwgaW5jbHVkaW5nOgorICAgICMKKyAgICAjICAgLSAgVGhlIGF1dG9tNHRlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICMgICAtICBUaGUgbGlidG9vbGl6ZSBleGVjdXRhYmxlIHNjcmlwdAorICAgICMKKworICAgIGlmIFsgLXIgIiR7ZGVzdGRpcn0vc2hhcmUvYXV0b2NvbmYvYXV0b200dGUuY2ZnIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBBVVRPTTRURV9DRkc9IiR7ZGVzdGRpcn0vYXV0b200dGUuY2ZnIgorCisgICAgICAgIHNlZCAtZSAicywvL3NoYXJlL2F1dG9jb25mLCR7ZGVzdGRpcn0vc2hhcmUvYXV0b2NvbmYsZyIgPCAiJHtkZXN0ZGlyfS9zaGFyZS9hdXRvY29uZi9hdXRvbTR0ZS5jZmciID4gIiR7QVVUT000VEVfQ0ZHfSIKKyAgICBmaQorCisgICAgaWYgWyAtciAiJHtkZXN0ZGlyfS8ke2hvc3R9L2Jpbi9saWJ0b29saXplIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBMSUJUT09MSVpFPSIke2Rlc3RkaXJ9L2xpYnRvb2xpemUiCisKKyAgICAgICAgc2VkIC1lICJzLC8vc2hhcmUvbGlidG9vbCwke2Rlc3RkaXJ9L3NoYXJlL2xpYnRvb2wsZyIgLWUgInMsLy9zaGFyZS9hY2xvY2FsLCR7ZGVzdGRpcn0vc2hhcmUvYWNsb2NhbCxnIiA8ICIke2Rlc3RkaXJ9LyR7aG9zdH0vYmluL2xpYnRvb2xpemUiID4gIiR7TElCVE9PTElaRX0iCisKKyAgICAgICAgY2htb2QgNzc1ICIke0xJQlRPT0xJWkV9IgorICAgIGZpCisKKyAgICAjIENvbmZpZ3VyZSB0aGUgcGFja2FnZQorCisgICAgaWYgWyAke1ZFUkJPU0V9IC1ndCAwIF07IHRoZW4KKyAgICAgICAgQ09ORklHVVJFX0ZMQUdTPSIiCisgICAgZWxzZQorICAgICAgICBDT05GSUdVUkVfRkxBR1M9Ii0tcXVpZXQiCisgICAgZmkKKworICAgIHZlcmJvc2UgIiAgQ09ORklHICAgJHtwYWNrYWdlfSIKKworICAgIGNkICIke2J1aWxkZGlyfSIKKworICAgICAgICAke2FyY2hpdmVkaXJ9LyR7ZnFwYWNrYWdlfS9jb25maWd1cmUgJHtDT05GSUdVUkVfRkxBR1N9IC0tcHJlZml4PS8gLS1leGVjLXByZWZpeD0vJHtob3N0fSB8fCBleGl0ICR7P30KKworICAgIGNkICIke2N1cmRpcn0iCisKKyAgICAjIEJ1aWxkIHRoZSBwYWNrYWdlCisKKyAgICB2ZXJib3NlICIgIE1BS0UgICAgICR7cGFja2FnZX0iCisKKyAgICBtYWtlIFY9JHtWRVJCT1NFfSAtQyAiJHtidWlsZGRpcn0iIGFsbCB8fCBleGl0ICR7P30KKworICAgICMgSW5zdGFsbCAvIHN0YWdlIHRoZSBwYWNrYWdlCisKKyAgICB2ZXJib3NlICIgIElOU1RBTEwgICR7cGFja2FnZX0iCisKKyAgICBtYWtlIFY9JHtWRVJCT1NFfSAtQyAiJHtidWlsZGRpcn0iIERFU1RESVI9IiR7ZGVzdGRpcn0iIGluc3RhbGwtc3RyaXAgfHwgZXhpdCAkez99CisKKyAgICAjIFJlbW92ZSBhbnkgdGVtcG9yYXJ5IGZpbGVzIGNyZWF0ZWQuCisKKyAgICByZW1vdmV0bXAKK30KKworIyBQYXJzZSBvdXQgYW55IGNvbW1hbmQgbGluZSBvcHRpb25zCisKK3doaWxlIFsgJHsjfSAtZ3QgMCBdOyBkbworICAgIGNhc2UgJHsxfSBpbgorCS0tYXJjaCkKKyAgICAgICAgICAgIEFSQ0g9JHsyfQorICAgICAgICAgICAgc2hpZnQgMgorICAgICAgICAgICAgOzsKKworCS1ofC0taGVscCkKKwkgICAgdXNhZ2UgMAorCSAgICA7OworCisJLS1idWlsZGRpcikKKwkgICAgQlVJTERESVI9JHsyfQorCSAgICBzaGlmdCAyCisJICAgIDs7CisKKwktLWRlc3RkaXIpCisJICAgIERFU1RESVI9JHsyfQorCSAgICBzaGlmdCAyCisJICAgIDs7CisKKyAgICAgICAgLS1zcmNkaXIpCisgICAgICAgICAgICBTUkNESVI9JHsyfQorICAgICAgICAgICAgc2hpZnQgMgorCSAgICA7OworCisgICAgICAgIC12fC0tdmVyYm9zZSkKKyAgICAgICAgICAgICQoKFZFUkJPU0UrKykpCisgICAgICAgICAgICBzaGlmdCAxCisJICAgIDs7CisKKwktLSkKKwkgICAgc2hpZnQgMQorCSAgICBicmVhaworCSAgICA7OworCisJKikKKyAgICAgICAgICB1c2FnZSAxCisJICA7OworICAgIGVzYWMKK2RvbmUKKworIyBJZiB0aGUgYXJjaGl0ZWN0dXJlIGlzIG5vdCBzcGVjaWZpZWQsIGZhaWwuCisKK2lmIFsgLXogIiR7QVJDSH0iIF07IHRoZW4KKyAgICBlcnJvciAiVGhlIGhvc3QgYXJjaGl0ZWN0dXJlIHdhcyBub3Qgc3BlY2lmaWVkIHZpYSAtLWFyY2guIgorCisgICAgdXNhZ2UgMQorZmkKKworIyBJZiB0aGUgLS1idWlsZGRpciBvcHRpb24gd2Fzbid0IHNwZWNpZmllZCwgdGhlbiBwcm92aWRlIGEgZGVmYXVsdC4KKworaWYgWyAteiAiJHtCVUlMRERJUn0iIF07IHRoZW4KKyAgICBCVUlMRERJUj0iYHB3ZGAiCitmaQorCisjIElmIHRoZSAtLWRlc3RkaXIgb3B0aW9uIHdhc24ndCBzcGVjaWZpZWQsIHRoZW4gcHJvdmlkZSBhIGRlZmF1bHQuCisKK2lmIFsgLXogIiR7REVTVERJUn0iIF07IHRoZW4KKyAgICBERVNURElSPSR7YWJzX3RvcF9ob3N0ZGlyfQorZmkKKworIyBJZiB0aGUgLS1zcmNkaXIgb3B0aW9uIHdhc24ndCBzcGVjaWZpZWQsIHRoZW4gcHJvdmlkZSBhIGRlZmF1bHQuCisKK2lmIFsgLXogIiR7U1JDRElSfSIgXTsgdGhlbgorICAgIFNSQ0RJUj0iYHB3ZGAiCitmaQorCisjIERldGVybWluZSB3aGF0IHBhY2thZ2VzIHRvIGJ1aWxkCisKK2lmIFsgJHsjfSAtZ3QgMCBdOyB0aGVuCisgICAgUEFDS0FHRVM9IiR7Kn0iCisKK2Vsc2UKKyAgICBQQUNLQUdFUz0iYGNhdCAke1NSQ0RJUn0vcGFja2FnZXNgIgorCitmaQorCisjIEJ1aWxkIGVhY2ggcGFja2FnZQorCitiYW5uZXIgIkJ1aWxkaW5nIEdOVSBhdXRvdG9vbHMgZm9yICR7QVJDSH0uLi4iCisKK2ZvciBwYWNrYWdlIGluICR7UEFDS0FHRVN9OyBkbworICAgIHVybD0iYGNhdCAke1NSQ0RJUn0vJHtwYWNrYWdlfS8ke3BhY2thZ2V9LnVybGAiCisgICAgdmVyc2lvbj0iYGNhdCAke1NSQ0RJUn0vJHtwYWNrYWdlfS8ke3BhY2thZ2V9LnZlcnNpb25gIgorCisgICAgIyBGZXRjaCwgaWYgbmVjZXNzYXJ5LCB0aGUgcGFja2FnZSBmcm9tIHRoZSBjYW5vbmljYWwgc291cmNlIGxvY2F0aW9uLgorCisgICAgc3ViYmFubmVyICIgIENIRUNLICAgICR7cGFja2FnZX0iCisKKyAgICBmZXRjaF9wYWNrYWdlICIke1NSQ0RJUn0vJHtwYWNrYWdlfSIgIiR7QlVJTERESVJ9IiAiJHtwYWNrYWdlfSIgIiR7dmVyc2lvbn0iICIke3VybH0iCisKKyAgICAjIEJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBwYWNrYWdlLgorCisgICAgdmVyYm9zZSAiICBNS0RJUiAgICAke0JVSUxERElSfS9idWlsZC8ke0FSQ0h9LyR7cGFja2FnZX0tJHt2ZXJzaW9ufSIKKworICAgIG1rZGlyIC1wICIke0JVSUxERElSfS9idWlsZC8ke0FSQ0h9LyR7cGFja2FnZX0tJHt2ZXJzaW9ufSIgfHwgZXhpdCAkez99CisKKyAgICBidWlsZF9wYWNrYWdlICIke3BhY2thZ2V9IiAiJHt2ZXJzaW9ufSIgIiR7QVJDSH0iICIke0JVSUxERElSfSIgIiR7QlVJTERESVJ9L2J1aWxkLyR7QVJDSH0vJHtwYWNrYWdlfS0ke3ZlcnNpb259IiAiJHtERVNURElSfSIKK2RvbmUKKwordHJhaWxlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9jb3JldXRpbHMvY29yZXV0aWxzLnVybCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvY29yZXV0aWxzL2NvcmV1dGlscy51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4ODFiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvY29yZXV0aWxzL2NvcmV1dGlscy51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjEudGFyLnh6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2NvcmV1dGlscy9jb3JldXRpbHMudmVyc2lvbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvY29yZXV0aWxzL2NvcmV1dGlscy52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWQ3MDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2NvcmV1dGlscy9jb3JldXRpbHMudmVyc2lvbgpAQCAtMCwwICsxIEBACis4LjIxCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2xpYnRvb2wvbGlidG9vbC51cmwgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2xpYnRvb2wvbGlidG9vbC51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiYjNjNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbGlidG9vbC9saWJ0b29sLnVybApAQCAtMCwwICsxIEBACitmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2xpYnRvb2wvbGlidG9vbC0yLjQuMi50YXIuZ3oKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbGlidG9vbC9saWJ0b29sLnZlcnNpb24gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2xpYnRvb2wvbGlidG9vbC52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODI5OWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL2xpYnRvb2wvbGlidG9vbC52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzIuNC4yCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL200L200LnVybCBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbTQvbTQudXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMWI4OTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL200L200LnVybApAQCAtMCwwICsxIEBACitmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L200L200LTEuNC4xNy50YXIuZ3oKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbTQvbTQudmVyc2lvbiBiL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbTQvbTQudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGUwZDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tNC9tNC52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzEuNC4xNwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tYWtlL21ha2UudXJsIGIvdGhpcmRfcGFydHkvbmxidWlsZC1hdXRvdG9vbHMvcmVwby90b29scy9wYWNrYWdlcy9tYWtlL21ha2UudXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOWVjOTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL21ha2UvbWFrZS51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9tYWtlL21ha2UtMy44Mi50YXIuZ3oKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvbWFrZS9tYWtlLnZlcnNpb24gYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL21ha2UvbWFrZS52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOGEwMjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL21ha2UvbWFrZS52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzMuODIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L25sYnVpbGQtYXV0b3Rvb2xzL3JlcG8vdG9vbHMvcGFja2FnZXMvcGFja2FnZXMgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL3BhY2thZ2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDg3MzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ubGJ1aWxkLWF1dG90b29scy9yZXBvL3Rvb2xzL3BhY2thZ2VzL3BhY2thZ2VzCkBAIC0wLDAgKzEsNiBAQAorbTQKK2F1dG9jb25mCithdXRvbWFrZQorbGlidG9vbAorbWFrZQorY29yZXV0aWxzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9hcm1fY29tbW9uX3RhYmxlcy5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX2NvbW1vbl90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQyYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX2NvbW1vbl90YWJsZXMuaApAQCAtMCwwICsxLDEzNiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogJERhdGU6ICAgICAgICAxOS4gT2N0b2JlciAyMDE1CisqICRSZXZpc2lvbjogCVYuMS40LjUgYQorKgorKiBQcm9qZWN0OiAJICAgIENNU0lTIERTUCBMaWJyYXJ5CisqIFRpdGxlOgkgICAgYXJtX2NvbW1vbl90YWJsZXMuaAorKgorKiBEZXNjcmlwdGlvbjoJVGhpcyBmaWxlIGhhcyBleHRlcm4gZGVjbGFyYXRpb24gZm9yIGNvbW1vbiB0YWJsZXMgbGlrZSBCaXRyZXZlcnNlLCByZWNpcHJvY2FsIGV0YyB3aGljaCBhcmUgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IGZ1bmN0aW9ucworKgorKiBUYXJnZXQgUHJvY2Vzc29yOiBDb3J0ZXgtTTQvQ29ydGV4LU0zCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqICAgICBkaXN0cmlidXRpb24uCisqICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBMSU1JVEVEIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworKiAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIF9BUk1fQ09NTU9OX1RBQkxFU19ICisjZGVmaW5lIF9BUk1fQ09NTU9OX1RBQkxFU19ICisKKyNpbmNsdWRlICJhcm1fbWF0aC5oIgorCitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2VGFibGVbMTAyNF07CitleHRlcm4gY29uc3QgcTE1X3QgYXJtUmVjaXBUYWJsZVExNVs2NF07CitleHRlcm4gY29uc3QgcTMxX3QgYXJtUmVjaXBUYWJsZVEzMVs2NF07CisvKiBleHRlcm4gY29uc3QgcTMxX3QgcmVhbENvZWZBUTMxWzEwMjRdOyAqLworLyogZXh0ZXJuIGNvbnN0IHEzMV90IHJlYWxDb2VmQlEzMVsxMDI0XTsgKi8KK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfMTZbMzJdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl8zMls2NF07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmXzY0WzEyOF07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmXzEyOFsyNTZdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl8yNTZbNTEyXTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfNTEyWzEwMjRdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl8xMDI0WzIwNDhdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl8yMDQ4WzQwOTZdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl80MDk2WzgxOTJdOworI2RlZmluZSB0d2lkZGxlQ29lZiB0d2lkZGxlQ29lZl80MDk2CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfMTZfcTMxWzI0XTsKK2V4dGVybiBjb25zdCBxMzFfdCB0d2lkZGxlQ29lZl8zMl9xMzFbNDhdOworZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzY0X3EzMVs5Nl07CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfMTI4X3EzMVsxOTJdOworZXh0ZXJuIGNvbnN0IHEzMV90IHR3aWRkbGVDb2VmXzI1Nl9xMzFbMzg0XTsKK2V4dGVybiBjb25zdCBxMzFfdCB0d2lkZGxlQ29lZl81MTJfcTMxWzc2OF07CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfMTAyNF9xMzFbMTUzNl07CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfMjA0OF9xMzFbMzA3Ml07CitleHRlcm4gY29uc3QgcTMxX3QgdHdpZGRsZUNvZWZfNDA5Nl9xMzFbNjE0NF07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfMTZfcTE1WzI0XTsKK2V4dGVybiBjb25zdCBxMTVfdCB0d2lkZGxlQ29lZl8zMl9xMTVbNDhdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzY0X3ExNVs5Nl07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfMTI4X3ExNVsxOTJdOworZXh0ZXJuIGNvbnN0IHExNV90IHR3aWRkbGVDb2VmXzI1Nl9xMTVbMzg0XTsKK2V4dGVybiBjb25zdCBxMTVfdCB0d2lkZGxlQ29lZl81MTJfcTE1Wzc2OF07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfMTAyNF9xMTVbMTUzNl07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfMjA0OF9xMTVbMzA3Ml07CitleHRlcm4gY29uc3QgcTE1X3QgdHdpZGRsZUNvZWZfNDA5Nl9xMTVbNjE0NF07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmX3JmZnRfMzJbMzJdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl9yZmZ0XzY0WzY0XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfcmZmdF8xMjhbMTI4XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfcmZmdF8yNTZbMjU2XTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfcmZmdF81MTJbNTEyXTsKK2V4dGVybiBjb25zdCBmbG9hdDMyX3QgdHdpZGRsZUNvZWZfcmZmdF8xMDI0WzEwMjRdOworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCB0d2lkZGxlQ29lZl9yZmZ0XzIwNDhbMjA0OF07CitleHRlcm4gY29uc3QgZmxvYXQzMl90IHR3aWRkbGVDb2VmX3JmZnRfNDA5Nls0MDk2XTsKKworCisvKiBmbG9hdGluZy1wb2ludCBiaXQgcmV2ZXJzYWwgdGFibGVzICovCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfXzE2X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTIwICApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfXzMyX1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTQ4ICApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfXzY0X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTU2ICApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfMTI4X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTIwOCApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfMjU2X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTQ0MCApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfNTEyX1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTQ0OCApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEUxMDI0X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTE4MDApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEUyMDQ4X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTM4MDgpCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEU0MDk2X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTQwMzIpCisKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlMTZbQVJNQklUUkVWSU5ERVhUQUJMRV9fMTZfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlMzJbQVJNQklUUkVWSU5ERVhUQUJMRV9fMzJfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlNjRbQVJNQklUUkVWSU5ERVhUQUJMRV9fNjRfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlMTI4W0FSTUJJVFJFVklOREVYVEFCTEVfMTI4X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTI1NltBUk1CSVRSRVZJTkRFWFRBQkxFXzI1Nl9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGU1MTJbQVJNQklUUkVWSU5ERVhUQUJMRV81MTJfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlMTAyNFtBUk1CSVRSRVZJTkRFWFRBQkxFMTAyNF9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGUyMDQ4W0FSTUJJVFJFVklOREVYVEFCTEUyMDQ4X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZTQwOTZbQVJNQklUUkVWSU5ERVhUQUJMRTQwOTZfVEFCTEVfTEVOR1RIXTsKKworLyogZml4ZWQtcG9pbnQgYml0IHJldmVyc2FsIHRhYmxlcyAqLworI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEX19fMTZfVEFCTEVfTEVOR1RIICgodWludDE2X3QpMTIgICkKKyNkZWZpbmUgQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fXzMyX1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTI0ICApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfRklYRURfX182NF9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk1NiAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEX18xMjhfVEFCTEVfTEVOR1RIICgodWludDE2X3QpMTEyICkKKyNkZWZpbmUgQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fMjU2X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTI0MCApCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfRklYRURfXzUxMl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk0ODAgKQorI2RlZmluZSBBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEXzEwMjRfVEFCTEVfTEVOR1RIICgodWludDE2X3QpOTkyICkKKyNkZWZpbmUgQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF8yMDQ4X1RBQkxFX0xFTkdUSCAoKHVpbnQxNl90KTE5ODQpCisjZGVmaW5lIEFSTUJJVFJFVklOREVYVEFCTEVfRklYRURfNDA5Nl9UQUJMRV9MRU5HVEggKCh1aW50MTZfdCk0MDMyKQorCitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF8xNltBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEX19fMTZfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlX2ZpeGVkXzMyW0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfX18zMl9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfNjRbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fXzY0X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF8xMjhbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fMTI4X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF8yNTZbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fMjU2X1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF81MTJbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF9fNTEyX1RBQkxFX0xFTkdUSF07CitleHRlcm4gY29uc3QgdWludDE2X3QgYXJtQml0UmV2SW5kZXhUYWJsZV9maXhlZF8xMDI0W0FSTUJJVFJFVklOREVYVEFCTEVfRklYRURfMTAyNF9UQUJMRV9MRU5HVEhdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90IGFybUJpdFJldkluZGV4VGFibGVfZml4ZWRfMjA0OFtBUk1CSVRSRVZJTkRFWFRBQkxFX0ZJWEVEXzIwNDhfVEFCTEVfTEVOR1RIXTsKK2V4dGVybiBjb25zdCB1aW50MTZfdCBhcm1CaXRSZXZJbmRleFRhYmxlX2ZpeGVkXzQwOTZbQVJNQklUUkVWSU5ERVhUQUJMRV9GSVhFRF80MDk2X1RBQkxFX0xFTkdUSF07CisKKy8qIFRhYmxlcyBmb3IgRmFzdCBNYXRoIFNpbmUgYW5kIENvc2luZSAqLworZXh0ZXJuIGNvbnN0IGZsb2F0MzJfdCBzaW5UYWJsZV9mMzJbRkFTVF9NQVRIX1RBQkxFX1NJWkUgKyAxXTsKK2V4dGVybiBjb25zdCBxMzFfdCBzaW5UYWJsZV9xMzFbRkFTVF9NQVRIX1RBQkxFX1NJWkUgKyAxXTsKK2V4dGVybiBjb25zdCBxMTVfdCBzaW5UYWJsZV9xMTVbRkFTVF9NQVRIX1RBQkxFX1NJWkUgKyAxXTsKKworI2VuZGlmIC8qICBBUk1fQ09NTU9OX1RBQkxFU19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9hcm1fY29uc3Rfc3RydWN0cy5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX2NvbnN0X3N0cnVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZkMDZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX2NvbnN0X3N0cnVjdHMuaApAQCAtMCwwICsxLDc5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAkRGF0ZTogICAgICAgIDE5LiBNYXJjaCAyMDE1CisqICRSZXZpc2lvbjogCVYuMS40LjUKKyoKKyogUHJvamVjdDogCSAgICBDTVNJUyBEU1AgTGlicmFyeQorKiBUaXRsZToJICAgIGFybV9jb25zdF9zdHJ1Y3RzLmgKKyoKKyogRGVzY3JpcHRpb246CVRoaXMgZmlsZSBoYXMgY29uc3RhbnQgc3RydWN0cyB0aGF0IGFyZSBpbml0aWFsaXplZCBmb3IKKyogICAgICAgICAgICAgIHVzZXIgY29udmVuaWVuY2UuICBGb3IgZXhhbXBsZSwgc29tZSBjYW4gYmUgZ2l2ZW4gYXMKKyogICAgICAgICAgICAgIGFyZ3VtZW50cyB0byB0aGUgYXJtX2NmZnRfZjMyKCkgZnVuY3Rpb24uCisqCisqIFRhcmdldCBQcm9jZXNzb3I6IENvcnRleC1NNC9Db3J0ZXgtTTMKKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyogICAgIGRpc3RyaWJ1dGlvbi4KKyogICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIExJTUlURUQgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisqICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyogICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgX0FSTV9DT05TVF9TVFJVQ1RTX0gKKyNkZWZpbmUgX0FSTV9DT05TVF9TVFJVQ1RTX0gKKworI2luY2x1ZGUgImFybV9tYXRoLmgiCisjaW5jbHVkZSAiYXJtX2NvbW1vbl90YWJsZXMuaCIKKworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuMTY7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfZjMyIGFybV9jZmZ0X3NSX2YzMl9sZW4zMjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjY0OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuMTI4OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuMjU2OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuNTEyOworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX2YzMiBhcm1fY2ZmdF9zUl9mMzJfbGVuMTAyNDsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9mMzIgYXJtX2NmZnRfc1JfZjMyX2xlbjIwNDg7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfZjMyIGFybV9jZmZ0X3NSX2YzMl9sZW40MDk2OworCisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW4xNjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMzEgYXJtX2NmZnRfc1JfcTMxX2xlbjMyOworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuNjQ7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW4xMjg7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW4yNTY7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW41MTI7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxIGFybV9jZmZ0X3NSX3EzMV9sZW4xMDI0OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSBhcm1fY2ZmdF9zUl9xMzFfbGVuMjA0ODsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMzEgYXJtX2NmZnRfc1JfcTMxX2xlbjQwOTY7CisKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjE2OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3ExNSBhcm1fY2ZmdF9zUl9xMTVfbGVuMzI7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW42NDsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjEyODsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjI1NjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjUxMjsKKyAgIGV4dGVybiBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgYXJtX2NmZnRfc1JfcTE1X2xlbjEwMjQ7CisgICBleHRlcm4gY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1IGFybV9jZmZ0X3NSX3ExNV9sZW4yMDQ4OworICAgZXh0ZXJuIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3ExNSBhcm1fY2ZmdF9zUl9xMTVfbGVuNDA5NjsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9hcm1fbWF0aC5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzNmOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvYXJtX21hdGguaApAQCAtMCwwICsxLDcxNTQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICREYXRlOiAgICAgICAgMjAuIE9jdG9iZXIgMjAxNQorKiAkUmV2aXNpb246ICAgIFYxLjQuNSBiCisqCisqIFByb2plY3Q6ICAgICAgQ01TSVMgRFNQIExpYnJhcnkKKyogVGl0bGU6ICAgICAgICBhcm1fbWF0aC5oCisqCisqIERlc2NyaXB0aW9uOiAgUHVibGljIGhlYWRlciBmaWxlIGZvciBDTVNJUyBEU1AgTGlicmFyeQorKgorKiBUYXJnZXQgUHJvY2Vzc29yOiBDb3J0ZXgtTTcvQ29ydGV4LU00L0NvcnRleC1NMy9Db3J0ZXgtTTAKKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyogICAgIGRpc3RyaWJ1dGlvbi4KKyogICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIExJTUlURUQgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisqICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyogICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioKKyAgIFxtYWlucGFnZSBDTVNJUyBEU1AgU29mdHdhcmUgTGlicmFyeQorICAgKgorICAgKiBJbnRyb2R1Y3Rpb24KKyAgICogLS0tLS0tLS0tLS0tCisgICAqCisgICAqIFRoaXMgdXNlciBtYW51YWwgZGVzY3JpYmVzIHRoZSBDTVNJUyBEU1Agc29mdHdhcmUgbGlicmFyeSwKKyAgICogYSBzdWl0ZSBvZiBjb21tb24gc2lnbmFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGZvciB1c2Ugb24gQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IGlzIGRpdmlkZWQgaW50byBhIG51bWJlciBvZiBmdW5jdGlvbnMgZWFjaCBjb3ZlcmluZyBhIHNwZWNpZmljIGNhdGVnb3J5OgorICAgKiAtIEJhc2ljIG1hdGggZnVuY3Rpb25zCisgICAqIC0gRmFzdCBtYXRoIGZ1bmN0aW9ucworICAgKiAtIENvbXBsZXggbWF0aCBmdW5jdGlvbnMKKyAgICogLSBGaWx0ZXJzCisgICAqIC0gTWF0cml4IGZ1bmN0aW9ucworICAgKiAtIFRyYW5zZm9ybXMKKyAgICogLSBNb3RvciBjb250cm9sIGZ1bmN0aW9ucworICAgKiAtIFN0YXRpc3RpY2FsIGZ1bmN0aW9ucworICAgKiAtIFN1cHBvcnQgZnVuY3Rpb25zCisgICAqIC0gSW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMKKyAgICoKKyAgICogVGhlIGxpYnJhcnkgaGFzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3Igb3BlcmF0aW5nIG9uIDgtYml0IGludGVnZXJzLCAxNi1iaXQgaW50ZWdlcnMsCisgICAqIDMyLWJpdCBpbnRlZ2VyIGFuZCAzMi1iaXQgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorICAgKgorICAgKiBVc2luZyB0aGUgTGlicmFyeQorICAgKiAtLS0tLS0tLS0tLS0KKyAgICoKKyAgICogVGhlIGxpYnJhcnkgaW5zdGFsbGVyIGNvbnRhaW5zIHByZWJ1aWx0IHZlcnNpb25zIG9mIHRoZSBsaWJyYXJpZXMgaW4gdGhlIDxjb2RlPkxpYjwvY29kZT4gZm9sZGVyLgorICAgKiAtIGFybV9jb3J0ZXhNN2xmZHBfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gYW5kIERvdWJsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpCisgICAqIC0gYXJtX2NvcnRleE03YmZkcF9tYXRoLmxpYiAoQmlnIGVuZGlhbiBhbmQgRG91YmxlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNykKKyAgICogLSBhcm1fY29ydGV4TTdsZnNwX21hdGgubGliIChMaXR0bGUgZW5kaWFuIGFuZCBTaW5nbGUgUHJlY2lzaW9uIEZsb2F0aW5nIFBvaW50IFVuaXQgb24gQ29ydGV4LU03KQorICAgKiAtIGFybV9jb3J0ZXhNN2Jmc3BfbWF0aC5saWIgKEJpZyBlbmRpYW4gYW5kIFNpbmdsZSBQcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQgVW5pdCBvbiBDb3J0ZXgtTTcpCisgICAqIC0gYXJtX2NvcnRleE03bF9tYXRoLmxpYiAoTGl0dGxlIGVuZGlhbiBvbiBDb3J0ZXgtTTcpCisgICAqIC0gYXJtX2NvcnRleE03Yl9tYXRoLmxpYiAoQmlnIGVuZGlhbiBvbiBDb3J0ZXgtTTcpCisgICAqIC0gYXJtX2NvcnRleE00bGZfbWF0aC5saWIgKExpdHRsZSBlbmRpYW4gYW5kIEZsb2F0aW5nIFBvaW50IFVuaXQgb24gQ29ydGV4LU00KQorICAgKiAtIGFybV9jb3J0ZXhNNGJmX21hdGgubGliIChCaWcgZW5kaWFuIGFuZCBGbG9hdGluZyBQb2ludCBVbml0IG9uIENvcnRleC1NNCkKKyAgICogLSBhcm1fY29ydGV4TTRsX21hdGgubGliIChMaXR0bGUgZW5kaWFuIG9uIENvcnRleC1NNCkKKyAgICogLSBhcm1fY29ydGV4TTRiX21hdGgubGliIChCaWcgZW5kaWFuIG9uIENvcnRleC1NNCkKKyAgICogLSBhcm1fY29ydGV4TTNsX21hdGgubGliIChMaXR0bGUgZW5kaWFuIG9uIENvcnRleC1NMykKKyAgICogLSBhcm1fY29ydGV4TTNiX21hdGgubGliIChCaWcgZW5kaWFuIG9uIENvcnRleC1NMykKKyAgICogLSBhcm1fY29ydGV4TTBsX21hdGgubGliIChMaXR0bGUgZW5kaWFuIG9uIENvcnRleC1NMCAvIENvcnRleE0wKykKKyAgICogLSBhcm1fY29ydGV4TTBiX21hdGgubGliIChCaWcgZW5kaWFuIG9uIENvcnRleC1NMCAvIENvcnRleE0wKykKKyAgICoKKyAgICogVGhlIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBpbiB0aGUgcHVibGljIGZpbGUgPGNvZGU+YXJtX21hdGguaDwvY29kZT4gd2hpY2ggaXMgcGxhY2VkIGluIHRoZSA8Y29kZT5JbmNsdWRlPC9jb2RlPiBmb2xkZXIuCisgICAqIFNpbXBseSBpbmNsdWRlIHRoaXMgZmlsZSBhbmQgbGluayB0aGUgYXBwcm9wcmlhdGUgbGlicmFyeSBpbiB0aGUgYXBwbGljYXRpb24gYW5kIGJlZ2luIGNhbGxpbmcgdGhlIGxpYnJhcnkgZnVuY3Rpb25zLiBUaGUgTGlicmFyeSBzdXBwb3J0cyBzaW5nbGUKKyAgICogcHVibGljIGhlYWRlciBmaWxlIDxjb2RlPiBhcm1fbWF0aC5oPC9jb2RlPiBmb3IgQ29ydGV4LU03L000L00zL00wL00wKyB3aXRoIGxpdHRsZSBlbmRpYW4gYW5kIGJpZyBlbmRpYW4uIFNhbWUgaGVhZGVyIGZpbGUgd2lsbCBiZSB1c2VkIGZvciBmbG9hdGluZyBwb2ludCB1bml0KEZQVSkgdmFyaWFudHMuCisgICAqIERlZmluZSB0aGUgYXBwcm9wcmlhdGUgcHJlIHByb2Nlc3NvciBNQUNSTyBBUk1fTUFUSF9DTTcgb3IgQVJNX01BVEhfQ000IG9yICBBUk1fTUFUSF9DTTMgb3IKKyAgICogQVJNX01BVEhfQ00wIG9yIEFSTV9NQVRIX0NNMFBMVVMgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgICoKKyAgICogRXhhbXBsZXMKKyAgICogLS0tLS0tLS0KKyAgICoKKyAgICogVGhlIGxpYnJhcnkgc2hpcHMgd2l0aCBhIG51bWJlciBvZiBleGFtcGxlcyB3aGljaCBkZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4KKyAgICoKKyAgICogVG9vbGNoYWluIFN1cHBvcnQKKyAgICogLS0tLS0tLS0tLS0tCisgICAqCisgICAqIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGRldmVsb3BlZCBhbmQgdGVzdGVkIHdpdGggTURLLUFSTSB2ZXJzaW9uIDUuMTQuMC4wCisgICAqIFRoZSBsaWJyYXJ5IGlzIGJlaW5nIHRlc3RlZCBpbiBHQ0MgYW5kIElBUiB0b29sY2hhaW5zIGFuZCB1cGRhdGVzIG9uIHRoaXMgYWN0aXZpdHkgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSBzaG9ydGx5LgorICAgKgorICAgKiBCdWlsZGluZyB0aGUgTGlicmFyeQorICAgKiAtLS0tLS0tLS0tLS0KKyAgICoKKyAgICogVGhlIGxpYnJhcnkgaW5zdGFsbGVyIGNvbnRhaW5zIGEgcHJvamVjdCBmaWxlIHRvIHJlIGJ1aWxkIGxpYnJhcmllcyBvbiBNREstQVJNIFRvb2wgY2hhaW4gaW4gdGhlIDxjb2RlPkNNU0lTXFxEU1BfTGliXFxTb3VyY2VcXEFSTTwvY29kZT4gZm9sZGVyLgorICAgKiAtIGFybV9jb3J0ZXhNX21hdGgudXZwcm9qeAorICAgKgorICAgKgorICAgKiBUaGUgbGlicmFyaWVzIGNhbiBiZSBidWlsdCBieSBvcGVuaW5nIHRoZSBhcm1fY29ydGV4TV9tYXRoLnV2cHJvanggcHJvamVjdCBpbiBNREstQVJNLCBzZWxlY3RpbmcgYSBzcGVjaWZpYyB0YXJnZXQsIGFuZCBkZWZpbmluZyB0aGUgb3B0aW9uYWwgcHJlIHByb2Nlc3NvciBNQUNST3MgZGV0YWlsZWQgYWJvdmUuCisgICAqCisgICAqIFByZS1wcm9jZXNzb3IgTWFjcm9zCisgICAqIC0tLS0tLS0tLS0tLQorICAgKgorICAgKiBFYWNoIGxpYnJhcnkgcHJvamVjdCBoYXZlIGRpZmZlcmFudCBwcmUtcHJvY2Vzc29yIG1hY3Jvcy4KKyAgICoKKyAgICogLSBVTkFMSUdORURfU1VQUE9SVF9ESVNBQkxFOgorICAgKgorICAgKiBEZWZpbmUgbWFjcm8gVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRSwgSWYgdGhlIHNpbGljb24gZG9lcyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcworICAgKgorICAgKiAtIEFSTV9NQVRIX0JJR19FTkRJQU46CisgICAqCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9CSUdfRU5ESUFOIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGZvciBiaWcgZW5kaWFuIHRhcmdldHMuIEJ5IGRlZmF1bHQgbGlicmFyeSBidWlsZHMgZm9yIGxpdHRsZSBlbmRpYW4gdGFyZ2V0cy4KKyAgICoKKyAgICogLSBBUk1fTUFUSF9NQVRSSVhfQ0hFQ0s6CisgICAqCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9NQVRSSVhfQ0hFQ0sgZm9yIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNpemVzIG9mIG1hdHJpY2VzCisgICAqCisgICAqIC0gQVJNX01BVEhfUk9VTkRJTkc6CisgICAqCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9ST1VORElORyBmb3Igcm91bmRpbmcgb24gc3VwcG9ydCBmdW5jdGlvbnMKKyAgICoKKyAgICogLSBBUk1fTUFUSF9DTXg6CisgICAqCisgICAqIERlZmluZSBtYWNybyBBUk1fTUFUSF9DTTQgZm9yIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IG9uIENvcnRleC1NNCB0YXJnZXQsIEFSTV9NQVRIX0NNMyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvbiBDb3J0ZXgtTTMgdGFyZ2V0CisgICAqIGFuZCBBUk1fTUFUSF9DTTAgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb24gQ29ydGV4LU0wIHRhcmdldCwgQVJNX01BVEhfQ00wUExVUyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvbiBDb3J0ZXgtTTArIHRhcmdldCwgYW5kCisgICAqIEFSTV9NQVRIX0NNNyBmb3IgYnVpbGRpbmcgdGhlIGxpYnJhcnkgb24gY29ydGV4LU03LgorICAgKgorICAgKiAtIF9fRlBVX1BSRVNFTlQ6CisgICAqCisgICAqIEluaXRpYWxpemUgbWFjcm8gX19GUFVfUFJFU0VOVCA9IDEgd2hlbiBidWlsZGluZyBvbiBGUFUgc3VwcG9ydGVkIFRhcmdldHMuIEVuYWJsZSB0aGlzIG1hY3JvIGZvciBNNGJmIGFuZCBNNGxmIGxpYnJhcmllcworICAgKgorICAgKiA8aHI+CisgICAqIENNU0lTLURTUCBpbiBBUk06OkNNU0lTIFBhY2sKKyAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICoKKyAgICogVGhlIGZvbGxvd2luZyBmaWxlcyByZWxldmFudCB0byBDTVNJUy1EU1AgYXJlIHByZXNlbnQgaW4gdGhlIDxiPkFSTTo6Q01TSVM8L2I+IFBhY2sgZGlyZWN0b3JpZXM6CisgICAqIHxGaWxlL0ZvbGRlciAgICAgICAgICAgICAgICAgICB8Q29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICogfFxiIENNU0lTXFxEb2N1bWVudGF0aW9uXFxEU1AgIHwgVGhpcyBkb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqIHxcYiBDTVNJU1xcRFNQX0xpYiAgICAgICAgICAgICB8IFNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IChsaWNlbnNlLnR4dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKiB8XGIgQ01TSVNcXERTUF9MaWJcXEV4YW1wbGVzICAgfCBFeGFtcGxlIHByb2plY3RzIGRlbW9uc3RyYXRpbmcgdGhlIHVzYWdlIG9mIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyAgICAgIHwKKyAgICogfFxiIENNU0lTXFxEU1BfTGliXFxTb3VyY2UgICAgIHwgU291cmNlIGZpbGVzIGZvciByZWJ1aWxkaW5nIHRoZSBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqCisgICAqIDxocj4KKyAgICogUmV2aXNpb24gSGlzdG9yeSBvZiBDTVNJUy1EU1AKKyAgICogLS0tLS0tLS0tLS0tCisgICAqIFBsZWFzZSByZWZlciB0byBccmVmIENoYW5nZUxvZ19wZy4KKyAgICoKKyAgICogQ29weXJpZ2h0IE5vdGljZQorICAgKiAtLS0tLS0tLS0tLS0KKyAgICoKKyAgICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAqLworCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwTWF0aCBCYXNpYyBNYXRoIEZ1bmN0aW9ucworICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwRmFzdE1hdGggRmFzdCBNYXRoIEZ1bmN0aW9ucworICogVGhpcyBzZXQgb2YgZnVuY3Rpb25zIHByb3ZpZGVzIGEgZmFzdCBhcHByb3hpbWF0aW9uIHRvIHNpbmUsIGNvc2luZSwgYW5kIHNxdWFyZSByb290LgorICogQXMgY29tcGFyZWQgdG8gbW9zdCBvZiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBDTVNJUyBtYXRoIGxpYnJhcnksIHRoZSBmYXN0IG1hdGggZnVuY3Rpb25zCisgKiBvcGVyYXRlIG9uIGluZGl2aWR1YWwgdmFsdWVzIGFuZCBub3QgYXJyYXlzLgorICogVGhlcmUgYXJlIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTE1LCBRMzEsIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhLgorICoKKyAqLworCisvKioKKyAqIEBkZWZncm91cCBncm91cENtcGx4TWF0aCBDb21wbGV4IE1hdGggRnVuY3Rpb25zCisgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgb3BlcmF0ZXMgb24gY29tcGxleCBkYXRhIHZlY3RvcnMuCisgKiBUaGUgZGF0YSBpbiB0aGUgY29tcGxleCBhcnJheXMgaXMgc3RvcmVkIGluIGFuIGludGVybGVhdmVkIGZhc2hpb24KKyAqIChyZWFsLCBpbWFnLCByZWFsLCBpbWFnLCAuLi4pLgorICogSW4gdGhlIEFQSSBmdW5jdGlvbnMsIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpbiBhIGNvbXBsZXggYXJyYXkgcmVmZXJzCisgKiB0byB0aGUgbnVtYmVyIG9mIGNvbXBsZXggdmFsdWVzOyB0aGUgYXJyYXkgY29udGFpbnMgdHdpY2UgdGhpcyBudW1iZXIgb2YKKyAqIHJlYWwgdmFsdWVzLgorICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwRmlsdGVycyBGaWx0ZXJpbmcgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgZ3JvdXBNYXRyaXggTWF0cml4IEZ1bmN0aW9ucworICoKKyAqIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyBwcm92aWRlcyBiYXNpYyBtYXRyaXggbWF0aCBvcGVyYXRpb25zLgorICogVGhlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIG1hdHJpeCBkYXRhIHN0cnVjdHVyZXMuICBGb3IgZXhhbXBsZSwKKyAqIHRoZSB0eXBlCisgKiBkZWZpbml0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZSBpcyBzaG93bgorICogYmVsb3c6CisgKiA8cHJlPgorICogICAgIHR5cGVkZWYgc3RydWN0CisgKiAgICAgeworICogICAgICAgdWludDE2X3QgbnVtUm93czsgICAgIC8vIG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguCisgKiAgICAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLy8gbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4KKyAqICAgICAgIGZsb2F0MzJfdCAqcERhdGE7ICAgICAvLyBwb2ludHMgdG8gdGhlIGRhdGEgb2YgdGhlIG1hdHJpeC4KKyAqICAgICB9IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyOworICogPC9wcmU+CisgKiBUaGVyZSBhcmUgc2ltaWxhciBkZWZpbml0aW9ucyBmb3IgUTE1IGFuZCBRMzEgZGF0YSB0eXBlcy4KKyAqCisgKiBUaGUgc3RydWN0dXJlIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4IGFuZCB0aGVuIHBvaW50cyB0bworICogYW4gYXJyYXkgb2YgZGF0YS4gIFRoZSBhcnJheSBpcyBvZiBzaXplIDxjb2RlPm51bVJvd3MgWCBudW1Db2xzPC9jb2RlPgorICogYW5kIHRoZSB2YWx1ZXMgYXJlIGFycmFuZ2VkIGluIHJvdyBvcmRlci4gIFRoYXQgaXMsIHRoZQorICogbWF0cml4IGVsZW1lbnQgKGksIGopIGlzIHN0b3JlZCBhdDoKKyAqIDxwcmU+CisgKiAgICAgcERhdGFbaSpudW1Db2xzICsgal0KKyAqIDwvcHJlPgorICoKKyAqIFxwYXIgSW5pdCBGdW5jdGlvbnMKKyAqIFRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGVhY2ggdHlwZSBvZiBtYXRyaXgKKyAqIGRhdGEgc3RydWN0dXJlLgorICogVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlcyBvZiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIGZpZWxkcy4KKyAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiA8Y29kZT5hcm1fbWF0X2luaXRfZjMyKCk8L2NvZGU+LCA8Y29kZT5hcm1fbWF0X2luaXRfcTMxKCk8L2NvZGU+CisgKiBhbmQgPGNvZGU+YXJtX21hdF9pbml0X3ExNSgpPC9jb2RlPiBmb3IgZmxvYXRpbmctcG9pbnQsIFEzMSBhbmQgUTE1IHR5cGVzLCAgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFxwYXIKKyAqIFVzZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgb3B0aW9uYWwuIEhvd2V2ZXIsIGlmIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQKKyAqIHRoZW4gdGhlIGluc3RhbmNlIHN0cnVjdHVyZSBjYW5ub3QgYmUgcGxhY2VkIGludG8gYSBjb25zdCBkYXRhIHNlY3Rpb24uCisgKiBUbyBwbGFjZSB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIGluIGEgY29uc3QgZGF0YQorICogc2VjdGlvbiwgbWFudWFsbHkgaW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUuICBGb3IgZXhhbXBsZToKKyAqIDxwcmU+CisgKiA8Y29kZT5hcm1fbWF0cml4X2luc3RhbmNlX2YzMiBTID0ge25Sb3dzLCBuQ29sdW1ucywgcERhdGF9OzwvY29kZT4KKyAqIDxjb2RlPmFybV9tYXRyaXhfaW5zdGFuY2VfcTMxIFMgPSB7blJvd3MsIG5Db2x1bW5zLCBwRGF0YX07PC9jb2RlPgorICogPGNvZGU+YXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgUyA9IHtuUm93cywgbkNvbHVtbnMsIHBEYXRhfTs8L2NvZGU+CisgKiA8L3ByZT4KKyAqIHdoZXJlIDxjb2RlPm5Sb3dzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb3dzLCA8Y29kZT5uQ29sdW1uczwvY29kZT4KKyAqIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMsIGFuZCA8Y29kZT5wRGF0YTwvY29kZT4gcG9pbnRzIHRvIHRoZQorICogZGF0YSBhcnJheS4KKyAqCisgKiBccGFyIFNpemUgQ2hlY2tpbmcKKyAqIEJ5IGRlZmF1bHQgYWxsIG9mIHRoZSBtYXRyaXggZnVuY3Rpb25zIHBlcmZvcm0gc2l6ZSBjaGVja2luZyBvbiB0aGUgaW5wdXQgYW5kCisgKiBvdXRwdXQgbWF0cmljZXMuICBGb3IgZXhhbXBsZSwgdGhlIG1hdHJpeCBhZGRpdGlvbiBmdW5jdGlvbiB2ZXJpZmllcyB0aGF0IHRoZQorICogdHdvIGlucHV0IG1hdHJpY2VzIGFuZCB0aGUgb3V0cHV0IG1hdHJpeCBhbGwgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygcm93cyBhbmQKKyAqIGNvbHVtbnMuICBJZiB0aGUgc2l6ZSBjaGVjayBmYWlscyB0aGUgZnVuY3Rpb25zIHJldHVybjoKKyAqIDxwcmU+CisgKiAgICAgQVJNX01BVEhfU0laRV9NSVNNQVRDSAorICogPC9wcmU+CisgKiBPdGhlcndpc2UgdGhlIGZ1bmN0aW9ucyByZXR1cm4KKyAqIDxwcmU+CisgKiAgICAgQVJNX01BVEhfU1VDQ0VTUworICogPC9wcmU+CisgKiBUaGVyZSBpcyBzb21lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hdHJpeCBzaXplIGNoZWNraW5nLgorICogVGhlIG1hdHJpeCBzaXplIGNoZWNraW5nIGlzIGVuYWJsZWQgdmlhIHRoZSBcI2RlZmluZQorICogPHByZT4KKyAqICAgICBBUk1fTUFUSF9NQVRSSVhfQ0hFQ0sKKyAqIDwvcHJlPgorICogd2l0aGluIHRoZSBsaWJyYXJ5IHByb2plY3Qgc2V0dGluZ3MuICBCeSBkZWZhdWx0IHRoaXMgbWFjcm8gaXMgZGVmaW5lZAorICogYW5kIHNpemUgY2hlY2tpbmcgaXMgZW5hYmxlZC4gIEJ5IGNoYW5naW5nIHRoZSBwcm9qZWN0IHNldHRpbmdzIGFuZAorICogdW5kZWZpbmluZyB0aGlzIG1hY3JvIHNpemUgY2hlY2tpbmcgaXMgZWxpbWluYXRlZCBhbmQgdGhlIGZ1bmN0aW9ucworICogcnVuIGEgYml0IGZhc3Rlci4gIFdpdGggc2l6ZSBjaGVja2luZyBkaXNhYmxlZCB0aGUgZnVuY3Rpb25zIGFsd2F5cworICogcmV0dXJuIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+LgorICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwVHJhbnNmb3JtcyBUcmFuc2Zvcm0gRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgZ3JvdXBDb250cm9sbGVyIENvbnRyb2xsZXIgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgZ3JvdXBTdGF0cyBTdGF0aXN0aWNzIEZ1bmN0aW9ucworICovCisvKioKKyAqIEBkZWZncm91cCBncm91cFN1cHBvcnQgU3VwcG9ydCBGdW5jdGlvbnMKKyAqLworCisvKioKKyAqIEBkZWZncm91cCBncm91cEludGVycG9sYXRpb24gSW50ZXJwb2xhdGlvbiBGdW5jdGlvbnMKKyAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIDEtIGFuZCAyLWRpbWVuc2lvbmFsIGludGVycG9sYXRpb24gb2YgZGF0YS4KKyAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgZm9yIDEtZGltZW5zaW9uYWwgZGF0YSBhbmQKKyAqIGJpbGluZWFyIGludGVycG9sYXRpb24gaXMgdXNlZCBmb3IgMi1kaW1lbnNpb25hbCBkYXRhLgorICovCisKKy8qKgorICogQGRlZmdyb3VwIGdyb3VwRXhhbXBsZXMgRXhhbXBsZXMKKyAqLworI2lmbmRlZiBfQVJNX01BVEhfSAorI2RlZmluZSBfQVJNX01BVEhfSAorCisvKiBpZ25vcmUgc29tZSBHQ0Mgd2FybmluZ3MgKi8KKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2lnbi1jb252ZXJzaW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciIKKyNlbmRpZgorCisjZGVmaW5lIF9fQ01TSVNfR0VORVJJQyAgICAgICAgIC8qIGRpc2FibGUgTlZJQyBhbmQgU3lzdGljayBmdW5jdGlvbnMgKi8KKworI2lmIGRlZmluZWQoQVJNX01BVEhfQ003KQorICAjaW5jbHVkZSAiY29yZV9jbTcuaCIKKyNlbGlmIGRlZmluZWQgKEFSTV9NQVRIX0NNNCkKKyAgI2luY2x1ZGUgImNvcmVfY200LmgiCisjZWxpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTMpCisgICNpbmNsdWRlICJjb3JlX2NtMy5oIgorI2VsaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00wKQorICAjaW5jbHVkZSAiY29yZV9jbTAuaCIKKyAgI2RlZmluZSBBUk1fTUFUSF9DTTBfRkFNSUxZCisjZWxpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTBQTFVTKQorICAjaW5jbHVkZSAiY29yZV9jbTBwbHVzLmgiCisgICNkZWZpbmUgQVJNX01BVEhfQ00wX0ZBTUlMWQorI2Vsc2UKKyAgI2Vycm9yICJEZWZpbmUgYWNjb3JkaW5nIHRoZSB1c2VkIENvcnRleCBjb3JlIEFSTV9NQVRIX0NNNywgQVJNX01BVEhfQ000LCBBUk1fTUFUSF9DTTMsIEFSTV9NQVRIX0NNMFBMVVMgb3IgQVJNX01BVEhfQ00wIgorI2VuZGlmCisKKyN1bmRlZiAgX19DTVNJU19HRU5FUklDICAgICAgICAgLyogZW5hYmxlIE5WSUMgYW5kIFN5c3RpY2sgZnVuY3Rpb25zICovCisjaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2lmZGVmICAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKKyAgLyoqCisgICAqIEBicmllZiBNYWNyb3MgcmVxdWlyZWQgZm9yIHJlY2lwcm9jYWwgY2FsY3VsYXRpb24gaW4gTm9ybWFsaXplZCBMTVMKKyAgICovCisKKyNkZWZpbmUgREVMVEFfUTMxICAgICAgICAgICgweDEwMCkKKyNkZWZpbmUgREVMVEFfUTE1ICAgICAgICAgIDB4NQorI2RlZmluZSBJTkRFWF9NQVNLICAgICAgICAgMHgwMDAwMDAzRgorI2lmbmRlZiBQSQorI2RlZmluZSBQSSAgICAgICAgICAgICAgICAgMy4xNDE1OTI2NTM1ODk3OWYKKyNlbmRpZgorCisgIC8qKgorICAgKiBAYnJpZWYgTWFjcm9zIHJlcXVpcmVkIGZvciBTSU5FIGFuZCBDT1NJTkUgRmFzdCBtYXRoIGFwcHJveGltYXRpb25zCisgICAqLworCisjZGVmaW5lIEZBU1RfTUFUSF9UQUJMRV9TSVpFICA1MTIKKyNkZWZpbmUgRkFTVF9NQVRIX1EzMV9TSElGVCAgICgzMiAtIDEwKQorI2RlZmluZSBGQVNUX01BVEhfUTE1X1NISUZUICAgKDE2IC0gMTApCisjZGVmaW5lIENPTlRST0xMRVJfUTMxX1NISUZUICAoMzIgLSA5KQorI2RlZmluZSBUQUJMRV9TSVpFICAyNTYKKyNkZWZpbmUgVEFCTEVfU1BBQ0lOR19RMzEgICAgIDB4NDAwMDAwCisjZGVmaW5lIFRBQkxFX1NQQUNJTkdfUTE1ICAgICAweDgwCisKKyAgLyoqCisgICAqIEBicmllZiBNYWNyb3MgcmVxdWlyZWQgZm9yIFNJTkUgYW5kIENPU0lORSBDb250cm9sbGVyIGZ1bmN0aW9ucworICAgKi8KKyAgLyogMS4zMShxMzEpIEZpeGVkIHZhbHVlIG9mIDIvMzYwICovCisgIC8qIC0xIHRvICsxIGlzIGRpdmlkZWQgaW50byAzNjAgdmFsdWVzIHNvIHRvdGFsIHNwYWNpbmcgaXMgKDIvMzYwKSAqLworI2RlZmluZSBJTlBVVF9TUEFDSU5HICAgICAgICAgMHhCNjBCNjEKKworICAvKioKKyAgICogQGJyaWVmIE1hY3JvIGZvciBVbmFsaWduZWQgU3VwcG9ydAorICAgKi8KKyNpZm5kZWYgVU5BTElHTkVEX1NVUFBPUlRfRElTQUJMRQorICAgICNkZWZpbmUgQUxJR040CisjZWxzZQorICAjaWYgZGVmaW5lZCAgKF9fR05VQ19fKQorICAgICNkZWZpbmUgQUxJR040IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKQorICAjZWxzZQorICAgICNkZWZpbmUgQUxJR040IF9fYWxpZ24oNCkKKyAgI2VuZGlmCisjZW5kaWYgICAvKiAjaWZuZGVmIFVOQUxJR05FRF9TVVBQT1JUX0RJU0FCTEUgKi8KKworICAvKioKKyAgICogQGJyaWVmIEVycm9yIHN0YXR1cyByZXR1cm5lZCBieSBzb21lIGZ1bmN0aW9ucyBpbiB0aGUgbGlicmFyeS4KKyAgICovCisKKyAgdHlwZWRlZiBlbnVtCisgIHsKKyAgICBBUk1fTUFUSF9TVUNDRVNTID0gMCwgICAgICAgICAgICAgICAgLyoqPCBObyBlcnJvciAqLworICAgIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SID0gLTEsICAgICAgICAvKio8IE9uZSBvciBtb3JlIGFyZ3VtZW50cyBhcmUgaW5jb3JyZWN0ICovCisgICAgQVJNX01BVEhfTEVOR1RIX0VSUk9SID0gLTIsICAgICAgICAgIC8qKjwgTGVuZ3RoIG9mIGRhdGEgYnVmZmVyIGlzIGluY29ycmVjdCAqLworICAgIEFSTV9NQVRIX1NJWkVfTUlTTUFUQ0ggPSAtMywgICAgICAgICAvKio8IFNpemUgb2YgbWF0cmljZXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgb3BlcmF0aW9uLiAqLworICAgIEFSTV9NQVRIX05BTklORiA9IC00LCAgICAgICAgICAgICAgICAvKio8IE5vdC1hLW51bWJlciAoTmFOKSBvciBpbmZpbml0eSBpcyBnZW5lcmF0ZWQgKi8KKyAgICBBUk1fTUFUSF9TSU5HVUxBUiA9IC01LCAgICAgICAgICAgICAgLyoqPCBHZW5lcmF0ZWQgYnkgbWF0cml4IGludmVyc2lvbiBpZiB0aGUgaW5wdXQgbWF0cml4IGlzIHNpbmd1bGFyIGFuZCBjYW5ub3QgYmUgaW52ZXJ0ZWQuICovCisgICAgQVJNX01BVEhfVEVTVF9GQUlMVVJFID0gLTYgICAgICAgICAgIC8qKjwgVGVzdCBGYWlsZWQgICovCisgIH0gYXJtX3N0YXR1czsKKworICAvKioKKyAgICogQGJyaWVmIDgtYml0IGZyYWN0aW9uYWwgZGF0YSB0eXBlIGluIDEuNyBmb3JtYXQuCisgICAqLworICB0eXBlZGVmIGludDhfdCBxN190OworCisgIC8qKgorICAgKiBAYnJpZWYgMTYtYml0IGZyYWN0aW9uYWwgZGF0YSB0eXBlIGluIDEuMTUgZm9ybWF0LgorICAgKi8KKyAgdHlwZWRlZiBpbnQxNl90IHExNV90OworCisgIC8qKgorICAgKiBAYnJpZWYgMzItYml0IGZyYWN0aW9uYWwgZGF0YSB0eXBlIGluIDEuMzEgZm9ybWF0LgorICAgKi8KKyAgdHlwZWRlZiBpbnQzMl90IHEzMV90OworCisgIC8qKgorICAgKiBAYnJpZWYgNjQtYml0IGZyYWN0aW9uYWwgZGF0YSB0eXBlIGluIDEuNjMgZm9ybWF0LgorICAgKi8KKyAgdHlwZWRlZiBpbnQ2NF90IHE2M190OworCisgIC8qKgorICAgKiBAYnJpZWYgMzItYml0IGZsb2F0aW5nLXBvaW50IHR5cGUgZGVmaW5pdGlvbi4KKyAgICovCisgIHR5cGVkZWYgZmxvYXQgZmxvYXQzMl90OworCisgIC8qKgorICAgKiBAYnJpZWYgNjQtYml0IGZsb2F0aW5nLXBvaW50IHR5cGUgZGVmaW5pdGlvbi4KKyAgICovCisgIHR5cGVkZWYgZG91YmxlIGZsb2F0NjRfdDsKKworICAvKioKKyAgICogQGJyaWVmIGRlZmluaXRpb24gdG8gcmVhZC93cml0ZSB0d28gMTYgYml0IHZhbHVlcy4KKyAgICovCisjaWYgZGVmaW5lZCBfX0NDX0FSTQorICAjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdCBfX3BhY2tlZAorICAjZGVmaW5lIENNU0lTX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdAorICAjZGVmaW5lIENNU0lTX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorCisjZWxpZiBkZWZpbmVkIF9fR05VQ19fCisgICNkZWZpbmUgX19TSU1EMzJfVFlQRSBpbnQzMl90CisgICNkZWZpbmUgQ01TSVNfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisKKyNlbGlmIGRlZmluZWQgX19JQ0NBUk1fXworICAjZGVmaW5lIF9fU0lNRDMyX1RZUEUgaW50MzJfdCBfX3BhY2tlZAorICAjZGVmaW5lIENNU0lTX1VOVVNFRAorCisjZWxpZiBkZWZpbmVkIF9fQ1NNQ19fCisgICNkZWZpbmUgX19TSU1EMzJfVFlQRSBpbnQzMl90CisgICNkZWZpbmUgQ01TSVNfVU5VU0VECisKKyNlbGlmIGRlZmluZWQgX19UQVNLSU5HX18KKyAgI2RlZmluZSBfX1NJTUQzMl9UWVBFIF9fdW5hbGlnbmVkIGludDMyX3QKKyAgI2RlZmluZSBDTVNJU19VTlVTRUQKKworI2Vsc2UKKyAgI2Vycm9yIFVua25vd24gY29tcGlsZXIKKyNlbmRpZgorCisjZGVmaW5lIF9fU0lNRDMyKGFkZHIpICAgICAgICAoKihfX1NJTUQzMl9UWVBFICoqKSAmIChhZGRyKSkKKyNkZWZpbmUgX19TSU1EMzJfQ09OU1QoYWRkcikgICgoX19TSU1EMzJfVFlQRSAqKShhZGRyKSkKKyNkZWZpbmUgX1NJTUQzMl9PRkZTRVQoYWRkcikgICgqKF9fU0lNRDMyX1RZUEUgKikgIChhZGRyKSkKKyNkZWZpbmUgX19TSU1ENjQoYWRkcikgICAgICAgICgqKGludDY0X3QgKiopICYgKGFkZHIpKQorCisjaWYgZGVmaW5lZCAoQVJNX01BVEhfQ00zKSB8fCBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKQorICAvKioKKyAgICogQGJyaWVmIGRlZmluaXRpb24gdG8gcGFjayB0d28gMTYgYml0IHZhbHVlcy4KKyAgICovCisjZGVmaW5lIF9fUEtIQlQoQVJHMSwgQVJHMiwgQVJHMykgICAgICAoICgoKGludDMyX3QpKEFSRzEpIDw8ICAwKSAmIChpbnQzMl90KTB4MDAwMEZGRkYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KShBUkcyKSA8PCBBUkczKSAmIChpbnQzMl90KTB4RkZGRjAwMDApICApCisjZGVmaW5lIF9fUEtIVEIoQVJHMSwgQVJHMiwgQVJHMykgICAgICAoICgoKGludDMyX3QpKEFSRzEpIDw8ICAwKSAmIChpbnQzMl90KTB4RkZGRjAwMDApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KShBUkcyKSA+PiBBUkczKSAmIChpbnQzMl90KTB4MDAwMEZGRkYpICApCisKKyNlbmRpZgorCisKKyAgIC8qKgorICAgKiBAYnJpZWYgZGVmaW5pdGlvbiB0byBwYWNrIGZvdXIgOCBiaXQgdmFsdWVzLgorICAgKi8KKyNpZm5kZWYgQVJNX01BVEhfQklHX0VORElBTgorCisjZGVmaW5lIF9fUEFDS3E3KHYwLHYxLHYyLHYzKSAoICgoKGludDMyX3QpKHYwKSA8PCAgMCkgJiAoaW50MzJfdCkweDAwMDAwMEZGKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjEpIDw8ICA4KSAmIChpbnQzMl90KTB4MDAwMEZGMDApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MikgPDwgMTYpICYgKGludDMyX3QpMHgwMEZGMDAwMCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYzKSA8PCAyNCkgJiAoaW50MzJfdCkweEZGMDAwMDAwKSAgKQorI2Vsc2UKKworI2RlZmluZSBfX1BBQ0txNyh2MCx2MSx2Mix2MykgKCAoKChpbnQzMl90KSh2MykgPDwgIDApICYgKGludDMyX3QpMHgwMDAwMDBGRikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGludDMyX3QpKHYyKSA8PCAgOCkgJiAoaW50MzJfdCkweDAwMDBGRjAwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaW50MzJfdCkodjEpIDw8IDE2KSAmIChpbnQzMl90KTB4MDBGRjAwMDApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQzMl90KSh2MCkgPDwgMjQpICYgKGludDMyX3QpMHhGRjAwMDAwMCkgICkKKworI2VuZGlmCisKKworICAvKioKKyAgICogQGJyaWVmIENsaXBzIFE2MyB0byBRMzEgdmFsdWVzLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHEzMV90IGNsaXBfcTYzX3RvX3EzMSgKKyAgcTYzX3QgeCkKKyAgeworICAgIHJldHVybiAoKHEzMV90KSAoeCA+PiAzMikgIT0gKChxMzFfdCkgeCA+PiAzMSkpID8KKyAgICAgICgoMHg3RkZGRkZGRiBeICgocTMxX3QpICh4ID4+IDYzKSkpKSA6IChxMzFfdCkgeDsKKyAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgQ2xpcHMgUTYzIHRvIFExNSB2YWx1ZXMuCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgcTE1X3QgY2xpcF9xNjNfdG9fcTE1KAorICBxNjNfdCB4KQorICB7CisgICAgcmV0dXJuICgocTMxX3QpICh4ID4+IDMyKSAhPSAoKHEzMV90KSB4ID4+IDMxKSkgPworICAgICAgKCgweDdGRkYgXiAoKHExNV90KSAoeCA+PiA2MykpKSkgOiAocTE1X3QpICh4ID4+IDE1KTsKKyAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgQ2xpcHMgUTMxIHRvIFE3IHZhbHVlcy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBxN190IGNsaXBfcTMxX3RvX3E3KAorICBxMzFfdCB4KQorICB7CisgICAgcmV0dXJuICgocTMxX3QpICh4ID4+IDI0KSAhPSAoKHEzMV90KSB4ID4+IDIzKSkgPworICAgICAgKCgweDdGIF4gKChxN190KSAoeCA+PiAzMSkpKSkgOiAocTdfdCkgeDsKKyAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgQ2xpcHMgUTMxIHRvIFExNSB2YWx1ZXMuCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgcTE1X3QgY2xpcF9xMzFfdG9fcTE1KAorICBxMzFfdCB4KQorICB7CisgICAgcmV0dXJuICgocTMxX3QpICh4ID4+IDE2KSAhPSAoKHEzMV90KSB4ID4+IDE1KSkgPworICAgICAgKCgweDdGRkYgXiAoKHExNV90KSAoeCA+PiAzMSkpKSkgOiAocTE1X3QpIHg7CisgIH0KKworICAvKioKKyAgICogQGJyaWVmIE11bHRpcGxpZXMgMzIgWCA2NCBhbmQgcmV0dXJucyAzMiBiaXQgcmVzdWx0IGluIDIuMzAgZm9ybWF0LgorICAgKi8KKworICBzdGF0aWMgX19JTkxJTkUgcTYzX3QgbXVsdDMyeDY0KAorICBxNjNfdCB4LAorICBxMzFfdCB5KQorICB7CisgICAgcmV0dXJuICgoKChxNjNfdCkgKHggJiAweDAwMDAwMDAwRkZGRkZGRkYpICogeSkgPj4gMzIpICsKKyAgICAgICAgICAgICgoKHE2M190KSAoeCA+PiAzMikgKiB5KSkpOworICB9CisKKy8qCisgICNpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKSAmJiBkZWZpbmVkICggX19DQ19BUk0gICApCisgICNkZWZpbmUgX19DTFogX19jbHoKKyAgI2VuZGlmCisgKi8KKy8qIG5vdGU6IGZ1bmN0aW9uIGNhbiBiZSByZW1vdmVkIHdoZW4gYWxsIHRvb2xjaGFpbiBzdXBwb3J0IF9fQ0xaIGZvciBDb3J0ZXgtTTAgKi8KKyNpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTBfRkFNSUxZKSAmJiAoKGRlZmluZWQgKF9fSUNDQVJNX18pKSAgKQorICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19DTFooCisgIHEzMV90IGRhdGEpOworCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX0NMWigKKyAgcTMxX3QgZGF0YSkKKyAgeworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICB1aW50MzJfdCBtYXNrID0gMHg4MDAwMDAwMDsKKworICAgIHdoaWxlKChkYXRhICYgbWFzaykgPT0gMCkKKyAgICB7CisgICAgICBjb3VudCArPSAxdTsKKyAgICAgIG1hc2sgPSBtYXNrID4+IDF1OworICAgIH0KKworICAgIHJldHVybiAoY291bnQpOworICB9CisjZW5kaWYKKworICAvKioKKyAgICogQGJyaWVmIEZ1bmN0aW9uIHRvIENhbGN1bGF0ZXMgMS9pbiAocmVjaXByb2NhbCkgdmFsdWUgb2YgUTMxIERhdGEgdHlwZS4KKyAgICovCisKKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IGFybV9yZWNpcF9xMzEoCisgIHEzMV90IGluLAorICBxMzFfdCAqIGRzdCwKKyAgcTMxX3QgKiBwUmVjaXBUYWJsZSkKKyAgeworICAgIHEzMV90IG91dDsKKyAgICB1aW50MzJfdCB0ZW1wVmFsOworICAgIHVpbnQzMl90IGluZGV4LCBpOworICAgIHVpbnQzMl90IHNpZ25CaXRzOworCisgICAgaWYoaW4gPiAwKQorICAgIHsKKyAgICAgIHNpZ25CaXRzID0gKCh1aW50MzJfdCkgKF9fQ0xaKCBpbikgLSAxKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzaWduQml0cyA9ICgodWludDMyX3QpIChfX0NMWigtaW4pIC0gMSkpOworICAgIH0KKworICAgIC8qIENvbnZlcnQgaW5wdXQgc2FtcGxlIHRvIDEuMzEgZm9ybWF0ICovCisgICAgaW4gPSAoaW4gPDwgc2lnbkJpdHMpOworCisgICAgLyogY2FsY3VsYXRpb24gb2YgaW5kZXggZm9yIGluaXRpYWwgYXBwcm94aW1hdGVkIFZhbCAqLworICAgIGluZGV4ID0gKHVpbnQzMl90KShpbiA+PiAyNCk7CisgICAgaW5kZXggPSAoaW5kZXggJiBJTkRFWF9NQVNLKTsKKworICAgIC8qIDEuMzEgd2l0aCBleHAgMSAqLworICAgIG91dCA9IHBSZWNpcFRhYmxlW2luZGV4XTsKKworICAgIC8qIGNhbGN1bGF0aW9uIG9mIHJlY2lwcm9jYWwgdmFsdWUgKi8KKyAgICAvKiBydW5uaW5nIGFwcHJveGltYXRpb24gZm9yIHR3byBpdGVyYXRpb25zICovCisgICAgZm9yIChpID0gMHU7IGkgPCAydTsgaSsrKQorICAgIHsKKyAgICAgIHRlbXBWYWwgPSAodWludDMyX3QpICgoKHE2M190KSBpbiAqIG91dCkgPj4gMzEpOworICAgICAgdGVtcFZhbCA9IDB4N0ZGRkZGRkZ1IC0gdGVtcFZhbDsKKyAgICAgIC8qICAgICAgMS4zMSB3aXRoIGV4cCAxICovCisgICAgICAvKiBvdXQgPSAocTMxX3QpICgoKHE2M190KSBvdXQgKiB0ZW1wVmFsKSA+PiAzMCk7ICovCisgICAgICBvdXQgPSBjbGlwX3E2M190b19xMzEoKChxNjNfdCkgb3V0ICogdGVtcFZhbCkgPj4gMzApOworICAgIH0KKworICAgIC8qIHdyaXRlIG91dHB1dCAqLworICAgICpkc3QgPSBvdXQ7CisKKyAgICAvKiByZXR1cm4gbnVtIG9mIHNpZ25iaXRzIG9mIG91dCA9IDEvaW4gdmFsdWUgKi8KKyAgICByZXR1cm4gKHNpZ25CaXRzICsgMXUpOworICB9CisKKworICAvKioKKyAgICogQGJyaWVmIEZ1bmN0aW9uIHRvIENhbGN1bGF0ZXMgMS9pbiAocmVjaXByb2NhbCkgdmFsdWUgb2YgUTE1IERhdGEgdHlwZS4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBhcm1fcmVjaXBfcTE1KAorICBxMTVfdCBpbiwKKyAgcTE1X3QgKiBkc3QsCisgIHExNV90ICogcFJlY2lwVGFibGUpCisgIHsKKyAgICBxMTVfdCBvdXQgPSAwOworICAgIHVpbnQzMl90IHRlbXBWYWwgPSAwOworICAgIHVpbnQzMl90IGluZGV4ID0gMCwgaSA9IDA7CisgICAgdWludDMyX3Qgc2lnbkJpdHMgPSAwOworCisgICAgaWYoaW4gPiAwKQorICAgIHsKKyAgICAgIHNpZ25CaXRzID0gKCh1aW50MzJfdCkoX19DTFooIGluKSAtIDE3KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzaWduQml0cyA9ICgodWludDMyX3QpKF9fQ0xaKC1pbikgLSAxNykpOworICAgIH0KKworICAgIC8qIENvbnZlcnQgaW5wdXQgc2FtcGxlIHRvIDEuMTUgZm9ybWF0ICovCisgICAgaW4gPSAoaW4gPDwgc2lnbkJpdHMpOworCisgICAgLyogY2FsY3VsYXRpb24gb2YgaW5kZXggZm9yIGluaXRpYWwgYXBwcm94aW1hdGVkIFZhbCAqLworICAgIGluZGV4ID0gKHVpbnQzMl90KShpbiA+PiAgOCk7CisgICAgaW5kZXggPSAoaW5kZXggJiBJTkRFWF9NQVNLKTsKKworICAgIC8qICAgICAgMS4xNSB3aXRoIGV4cCAxICAqLworICAgIG91dCA9IHBSZWNpcFRhYmxlW2luZGV4XTsKKworICAgIC8qIGNhbGN1bGF0aW9uIG9mIHJlY2lwcm9jYWwgdmFsdWUgKi8KKyAgICAvKiBydW5uaW5nIGFwcHJveGltYXRpb24gZm9yIHR3byBpdGVyYXRpb25zICovCisgICAgZm9yIChpID0gMHU7IGkgPCAydTsgaSsrKQorICAgIHsKKyAgICAgIHRlbXBWYWwgPSAodWludDMyX3QpICgoKHEzMV90KSBpbiAqIG91dCkgPj4gMTUpOworICAgICAgdGVtcFZhbCA9IDB4N0ZGRnUgLSB0ZW1wVmFsOworICAgICAgLyogICAgICAxLjE1IHdpdGggZXhwIDEgKi8KKyAgICAgIG91dCA9IChxMTVfdCkgKCgocTMxX3QpIG91dCAqIHRlbXBWYWwpID4+IDE0KTsKKyAgICAgIC8qIG91dCA9IGNsaXBfcTMxX3RvX3ExNSgoKHEzMV90KSBvdXQgKiB0ZW1wVmFsKSA+PiAxNCk7ICovCisgICAgfQorCisgICAgLyogd3JpdGUgb3V0cHV0ICovCisgICAgKmRzdCA9IG91dDsKKworICAgIC8qIHJldHVybiBudW0gb2Ygc2lnbmJpdHMgb2Ygb3V0ID0gMS9pbiB2YWx1ZSAqLworICAgIHJldHVybiAoc2lnbkJpdHMgKyAxKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgaW50cmluaXNpYyBmdW5jdGlvbiBmb3Igb25seSBNMCBwcm9jZXNzb3JzCisgICAqLworI2lmIGRlZmluZWQoQVJNX01BVEhfQ00wX0ZBTUlMWSkKKyAgc3RhdGljIF9fSU5MSU5FIHEzMV90IF9fU1NBVCgKKyAgcTMxX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIGludDMyX3QgcG9zTWF4LCBuZWdNaW47CisgICAgdWludDMyX3QgaTsKKworICAgIHBvc01heCA9IDE7CisgICAgZm9yIChpID0gMDsgaSA8ICh5IC0gMSk7IGkrKykKKyAgICB7CisgICAgICBwb3NNYXggPSBwb3NNYXggKiAyOworICAgIH0KKworICAgIGlmKHggPiAwKQorICAgIHsKKyAgICAgIHBvc01heCA9IChwb3NNYXggLSAxKTsKKworICAgICAgaWYoeCA+IHBvc01heCkKKyAgICAgIHsKKyAgICAgICAgeCA9IHBvc01heDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIG5lZ01pbiA9IC1wb3NNYXg7CisKKyAgICAgIGlmKHggPCBuZWdNaW4pCisgICAgICB7CisgICAgICAgIHggPSBuZWdNaW47CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAoeCk7CisgIH0KKyNlbmRpZiAvKiBlbmQgb2YgQVJNX01BVEhfQ00wX0ZBTUlMWSAqLworCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgaW50cmluc2ljIGZ1bmN0aW9uIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyNpZiBkZWZpbmVkIChBUk1fTUFUSF9DTTMpIHx8IGRlZmluZWQgKEFSTV9NQVRIX0NNMF9GQU1JTFkpCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUUFERDggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19RQUREOCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHEzMV90IHIsIHMsIHQsIHU7CisKKyAgICByID0gX19TU0FUKCgoKChxMzFfdCl4IDw8IDI0KSA+PiAyNCkgKyAoKChxMzFfdCl5IDw8IDI0KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7CisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAxNikgPj4gMjQpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOworICAgIHQgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgIDgpID4+IDI0KSArICgoKHEzMV90KXkgPDwgIDgpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsKKyAgICB1ID0gX19TU0FUKCgoKChxMzFfdCl4ICAgICAgKSA+PiAyNCkgKyAoKChxMzFfdCl5ICAgICAgKSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7CisKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHUgPDwgMjQpIHwgKHQgPDwgMTYpIHwgKHMgPDwgIDgpIHwgKHIgICAgICApKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFTVUI4IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUVNVQjgoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBxMzFfdCByLCBzLCB0LCB1OworCisgICAgciA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAyNCkgPj4gMjQpIC0gKCgocTMxX3QpeSA8PCAyNCkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOworICAgIHMgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDI0KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDI0KSksIDgpICYgKGludDMyX3QpMHgwMDAwMDBGRjsKKyAgICB0ID0gX19TU0FUKCgoKChxMzFfdCl4IDw8ICA4KSA+PiAyNCkgLSAoKChxMzFfdCl5IDw8ICA4KSA+PiAyNCkpLCA4KSAmIChpbnQzMl90KTB4MDAwMDAwRkY7CisgICAgdSA9IF9fU1NBVCgoKCgocTMxX3QpeCAgICAgICkgPj4gMjQpIC0gKCgocTMxX3QpeSAgICAgICkgPj4gMjQpKSwgOCkgJiAoaW50MzJfdCkweDAwMDAwMEZGOworCisgICAgcmV0dXJuICgodWludDMyX3QpKCh1IDw8IDI0KSB8ICh0IDw8IDE2KSB8IChzIDw8ICA4KSB8IChyICAgICAgKSkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBRQUREMTYgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19RQUREMTYoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKy8qICBxMzFfdCByLCAgICAgczsgIHdpdGhvdXQgaW5pdGlhbGlzYXRpb24gJ2FybV9vZmZzZXRfcTE1IHRlc3QnIGZhaWxzICBidXQgJ2ludHJpbnNpYycgdGVzdHMgcGFzcyEgZm9yIGFybUNDICovCisgICAgcTMxX3QgciA9IDAsIHMgPSAwOworCisgICAgciA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKyAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOworCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyICAgICAgKSkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTSEFERDE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU0hBREQxNigKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHEzMV90IHIsIHM7CisKKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKyAgICBzID0gKCgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKyAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUVNVQjE2IGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fUVNVQjE2KAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcTMxX3QgciwgczsKKworICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpIC0gKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hTVUIxNiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NIU1VCMTYoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBxMzFfdCByLCBzOworCisgICAgciA9ICgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpIC0gKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9ICgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpIC0gKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSA+PiAxKSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKHMgPDwgMTYpIHwgKHIgICAgICApKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFFBU1ggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19RQVNYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcTMxX3QgciwgczsKKworICAgIHIgPSBfX1NTQVQoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAtICgoKHEzMV90KXkgICAgICApID4+IDE2KSksIDE2KSAmIChpbnQzMl90KTB4MDAwMEZGRkY7CisgICAgcyA9IF9fU1NBVCgoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICsgKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU0hBU1ggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TSEFTWCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHEzMV90IHIsIHM7CisKKyAgICByID0gKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgLSAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKyAgICBzID0gKCgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKyAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpID4+IDEpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKworICAgIHJldHVybiAoKHVpbnQzMl90KSgocyA8PCAxNikgfCAociAgICAgICkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUVNBWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1FTQVgoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICBxMzFfdCByLCBzOworCisgICAgciA9IF9fU1NBVCgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICsgKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSwgMTYpICYgKGludDMyX3QpMHgwMDAwRkZGRjsKKyAgICBzID0gX19TU0FUKCgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgLSAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpLCAxNikgJiAoaW50MzJfdCkweDAwMDBGRkZGOworCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyICAgICAgKSkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTSFNBWCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NIU0FYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcTMxX3QgciwgczsKKworICAgIHIgPSAoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSArICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOworICAgIHMgPSAoKCgoKHEzMV90KXggICAgICApID4+IDE2KSAtICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgPj4gMSkgJiAoaW50MzJfdCkweDAwMDBGRkZGOworCisgICAgcmV0dXJuICgodWludDMyX3QpKChzIDw8IDE2KSB8IChyICAgICAgKSkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTVVTRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTVVTRFgoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHkpCisgIHsKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgLQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSAgICkpOworICB9CisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01VQURYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01VQURYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgICApKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUUFERCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBpbnQzMl90IF9fUUFERCgKKyAgaW50MzJfdCB4LAorICBpbnQzMl90IHkpCisgIHsKKyAgICByZXR1cm4gKChpbnQzMl90KShjbGlwX3E2M190b19xMzEoKHE2M190KXggKyAocTMxX3QpeSkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgUVNVQiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBpbnQzMl90IF9fUVNVQigKKyAgaW50MzJfdCB4LAorICBpbnQzMl90IHkpCisgIHsKKyAgICByZXR1cm4gKChpbnQzMl90KShjbGlwX3E2M190b19xMzEoKHE2M190KXggLSAocTMxX3QpeSkpKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01MQUQgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTUxBRCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSwKKyAgdWludDMyX3Qgc3VtKQorICB7CisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgKworICAgICAgICAgICAgICAgICAgICAgICAoICgocTMxX3Qpc3VtICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTUxBRFggZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTUxBRFgoCisgIHVpbnQzMl90IHgsCisgIHVpbnQzMl90IHksCisgIHVpbnQzMl90IHN1bSkKKyAgeworICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSAgICAgICkgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCAoKHEzMV90KXN1bSAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01MU0RYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IF9fU01MU0RYKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5LAorICB1aW50MzJfdCBzdW0pCisgIHsKKyAgICByZXR1cm4gKCh1aW50MzJfdCkoKCgoKHEzMV90KXggPDwgMTYpID4+IDE2KSAqICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgLQorICAgICAgICAgICAgICAgICAgICAgICAoKCgocTMxX3QpeCAgICAgICkgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSArCisgICAgICAgICAgICAgICAgICAgICAgICggKChxMzFfdClzdW0gICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNNTEFMRCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50NjRfdCBfX1NNTEFMRCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSwKKyAgdWludDY0X3Qgc3VtKQorICB7CisvKiAgcmV0dXJuIChzdW0gKyAoKHExNV90KSAoeCA+PiAxNikgKiAocTE1X3QpICh5ID4+IDE2KSkgKyAoKHExNV90KSB4ICogKHExNV90KSB5KSk7ICovCisgICAgcmV0dXJuICgodWludDY0X3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgKworICAgICAgICAgICAgICAgICAgICAgICAoICgocTYzX3Qpc3VtICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTUxBTERYIGZvciBNMyBhbmQgTTAgcHJvY2Vzc29ycworICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEWCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSwKKyAgdWludDY0X3Qgc3VtKQorICB7CisvKiAgcmV0dXJuIChzdW0gKyAoKHExNV90KSAoeCA+PiAxNikgKiAocTE1X3QpIHkpKSArICgocTE1X3QpIHggKiAocTE1X3QpICh5ID4+IDE2KSk7ICovCisgICAgcmV0dXJuICgodWludDY0X3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgPDwgMTYpID4+IDE2KSkgKworICAgICAgICAgICAgICAgICAgICAgICAoICgocTYzX3Qpc3VtICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkpOworICB9CisKKworICAvKgorICAgKiBAYnJpZWYgQyBjdXN0b20gZGVmaW5lZCBTTVVBRCBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NNVUFEKAorICB1aW50MzJfdCB4LAorICB1aW50MzJfdCB5KQorICB7CisgICAgcmV0dXJuICgodWludDMyX3QpKCgoKChxMzFfdCl4IDw8IDE2KSA+PiAxNikgKiAoKChxMzFfdCl5IDw8IDE2KSA+PiAxNikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggICAgICApID4+IDE2KSAqICgoKHEzMV90KXkgICAgICApID4+IDE2KSkgICApKTsKKyAgfQorCisKKyAgLyoKKyAgICogQGJyaWVmIEMgY3VzdG9tIGRlZmluZWQgU01VU0QgZm9yIE0zIGFuZCBNMCBwcm9jZXNzb3JzCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdWludDMyX3QgX19TTVVTRCgKKyAgdWludDMyX3QgeCwKKyAgdWludDMyX3QgeSkKKyAgeworICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAxNikgPj4gMTYpICogKCgocTMxX3QpeSA8PCAxNikgPj4gMTYpKSAtCisgICAgICAgICAgICAgICAgICAgICAgICgoKChxMzFfdCl4ICAgICAgKSA+PiAxNikgKiAoKChxMzFfdCl5ICAgICAgKSA+PiAxNikpICAgKSk7CisgIH0KKworCisgIC8qCisgICAqIEBicmllZiBDIGN1c3RvbSBkZWZpbmVkIFNYVEIxNiBmb3IgTTMgYW5kIE0wIHByb2Nlc3NvcnMKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBfX1NYVEIxNigKKyAgdWludDMyX3QgeCkKKyAgeworICAgIHJldHVybiAoKHVpbnQzMl90KSgoKCgocTMxX3QpeCA8PCAyNCkgPj4gMjQpICYgKHEzMV90KTB4MDAwMEZGRkYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoKHEzMV90KXggPDwgIDgpID4+ICA4KSAmIChxMzFfdCkweEZGRkYwMDAwKSAgKSk7CisgIH0KKworI2VuZGlmIC8qIGRlZmluZWQgKEFSTV9NQVRIX0NNMykgfHwgZGVmaW5lZCAoQVJNX01BVEhfQ00wX0ZBTUlMWSkgKi8KKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTcgRklSIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHE3X3QgKnBTdGF0ZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBxN190ICpwQ29lZmZzOyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8KKyAgfSBhcm1fZmlyX2luc3RhbmNlX3E3OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IEZJUiBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBxMTVfdCAqcENvZWZmczsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgIH0gYXJtX2Zpcl9pbnN0YW5jZV9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxMzFfdCAqcFN0YXRlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgIH0gYXJtX2Zpcl9pbnN0YW5jZV9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAvKio8IG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgfSBhcm1fZmlyX2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFE3IEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRNyBGSVIgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3E3KAorICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3E3ICogUywKKyAgcTdfdCAqIHBTcmMsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRNyBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTcgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQuCisgICAqLworICB2b2lkIGFybV9maXJfaW5pdF9xNygKKyAgYXJtX2Zpcl9pbnN0YW5jZV9xNyAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHE3X3QgKiBwQ29lZmZzLAorICBxN190ICogcFN0YXRlLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3ExNSgKKyAgY29uc3QgYXJtX2Zpcl9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZhc3QgUTE1IEZJUiBmaWx0ZXIgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00LgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9maXJfZmFzdF9xMTUoCisgIGNvbnN0IGFybV9maXJfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuIE11c3QgYmUgZXZlbiBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDQuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhdCBhIHRpbWUuCisgICAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZgorICAgKiA8Y29kZT5udW1UYXBzPC9jb2RlPiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9maXJfaW5pdF9xMTUoCisgIGFybV9maXJfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTE1X3QgKiBwQ29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEZJUiBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9maXJfcTMxKAorICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmFzdCBRMzEgRklSIGZpbHRlciBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2Zhc3RfcTMxKAorICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIE51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhdCBhIHRpbWUuCisgICAqLworICB2b2lkIGFybV9maXJfaW5pdF9xMzEoCisgIGFybV9maXJfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9maXJfZjMyKAorICBjb25zdCBhcm1fZmlyX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXQgYSB0aW1lLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2luaXRfZjMyKAorICBhcm1fZmlyX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIGZsb2F0MzJfdCAqIHBDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLworICAgIGludDhfdCBwb3N0U2hpZnQ7ICAgICAgICAvKio8IEFkZGl0aW9uYWwgc2hpZnQsIGluIGJpdHMsIGFwcGxpZWQgdG8gZWFjaCBvdXRwdXQgc2FtcGxlLiAqLworICB9IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IG51bVN0YWdlczsgICAgICAvKio8IG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICBPdmVyYWxsIG9yZGVyIGlzIDIqbnVtU3RhZ2VzLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgICAgICAvKio8IFBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA0Km51bVN0YWdlcy4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovCisgICAgdWludDhfdCBwb3N0U2hpZnQ7ICAgICAgIC8qKjwgQWRkaXRpb25hbCBzaGlmdCwgaW4gYml0cywgYXBwbGllZCB0byBlYWNoIG91dHB1dCBzYW1wbGUuICovCisgIH0gYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBudW1TdGFnZXM7ICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgLyoqPCBQb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNCpudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgIC8qKjwgUG9pbnRzIHRvIHRoZSBhcnJheSBvZiBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDUqbnVtU3RhZ2VzLiAqLworICB9IGFybV9iaXF1YWRfY2FzZF9kZjFfaW5zdF9mMzI7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX3ExNSgKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcG9zdFNoaWZ0ICBTaGlmdCB0byBiZSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQuIFZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIGNvZWZmaWNpZW50cyBmb3JtYXQKKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9pbml0X3ExNSgKKyAgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3ExNSAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBxMTVfdCAqIHBDb2VmZnMsCisgIHExNV90ICogcFN0YXRlLAorICBpbnQ4X3QgcG9zdFNoaWZ0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmFzdCBidXQgbGVzcyBwcmVjaXNlIHByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgQmlxdWFkIGNhc2NhZGUgZmlsdGVyIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBCaXF1YWQgY2FzY2FkZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMV9mYXN0X3ExNSgKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlcgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX3EzMSgKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNkX2RmMV9pbnN0X3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGYXN0IGJ1dCBsZXNzIHByZWNpc2UgcHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00LgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIEJpcXVhZCBjYXNjYWRlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2Zhc3RfcTMxKAorICBjb25zdCBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTMxICogUywKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwb3N0U2hpZnQgIFNoaWZ0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIG91dHB1dC4gVmFyaWVzIGFjY29yZGluZyB0byB0aGUgY29lZmZpY2llbnRzIGZvcm1hdAorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2luaXRfcTMxKAorICBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfcTMxICogUywKKyAgdWludDhfdCBudW1TdGFnZXMsCisgIHEzMV90ICogcENvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIGludDhfdCBwb3N0U2hpZnQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjFfZjMyKAorICBjb25zdCBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgQmlxdWFkIGNhc2NhZGUgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYxX2luaXRfZjMyKAorICBhcm1fYmlxdWFkX2Nhc2RfZGYxX2luc3RfZjMyICogUywKKyAgdWludDhfdCBudW1TdGFnZXMsCisgIGZsb2F0MzJfdCAqIHBDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtUm93czsgICAgIC8qKjwgbnVtYmVyIG9mIHJvd3Mgb2YgdGhlIG1hdHJpeC4gICAgICovCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovCisgICAgZmxvYXQzMl90ICpwRGF0YTsgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguICovCisgIH0gYXJtX21hdHJpeF9pbnN0YW5jZV9mMzI7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtUm93czsgICAgIC8qKjwgbnVtYmVyIG9mIHJvd3Mgb2YgdGhlIG1hdHJpeC4gICAgICovCisgICAgdWludDE2X3QgbnVtQ29sczsgICAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeC4gICovCisgICAgZmxvYXQ2NF90ICpwRGF0YTsgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIG9mIHRoZSBtYXRyaXguICovCisgIH0gYXJtX21hdHJpeF9pbnN0YW5jZV9mNjQ7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgbWF0cml4IHN0cnVjdHVyZS4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgICAgLyoqPCBudW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4LiAgICAgKi8KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4LiAgKi8KKyAgICBxMTVfdCAqcERhdGE7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgb2YgdGhlIG1hdHJpeC4gKi8KKyAgfSBhcm1fbWF0cml4X2luc3RhbmNlX3ExNTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBtYXRyaXggc3RydWN0dXJlLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVJvd3M7ICAgICAvKio8IG51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXguICAgICAqLworICAgIHVpbnQxNl90IG51bUNvbHM7ICAgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBtYXRyaXguICAqLworICAgIHEzMV90ICpwRGF0YTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSBvZiB0aGUgbWF0cml4LiAqLworICB9IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggYWRkaXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9hZGRfZjMyKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX2YzMiAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMTUgbWF0cml4IGFkZGl0aW9uLgorICAgKiBAcGFyYW1baW5dICAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfYWRkX3ExNSgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIG1hdHJpeCBhZGRpdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X2FkZF9xMzEoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50LCBjb21wbGV4LCBtYXRyaXggbXVsdGlwbGljYXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9jbXBseF9tdWx0X2YzMigKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1LCBjb21wbGV4LCAgbWF0cml4IG11bHRpcGxpY2F0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfY21wbHhfbXVsdF9xMTUoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcERzdCwKKyAgcTE1X3QgKiBwU2NyYXRjaCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSwgY29tcGxleCwgbWF0cml4IG11bHRpcGxpY2F0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfY21wbHhfbXVsdF9xMzEoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCB0cmFuc3Bvc2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgaW5wdXQgbWF0cml4CisgICAqIEBwYXJhbVtvdXRdIHBEc3QgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeAorICAgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAgPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4KKyAgICogb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF90cmFuc19mMzIoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyYywKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IG1hdHJpeCB0cmFuc3Bvc2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgaW5wdXQgbWF0cml4CisgICAqIEBwYXJhbVtvdXRdIHBEc3QgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeAorICAgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAgPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4KKyAgICogb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF90cmFuc19xMTUoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyYywKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIG1hdHJpeCB0cmFuc3Bvc2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgaW5wdXQgbWF0cml4CisgICAqIEBwYXJhbVtvdXRdIHBEc3QgIHBvaW50cyB0byB0aGUgb3V0cHV0IG1hdHJpeAorICAgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAgPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4KKyAgICogb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF90cmFuc19xMzEoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyYywKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9xMzEgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IG11bHRpcGxpY2F0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9tdWx0X2YzMigKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjQSwKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjQiwKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IG1hdHJpeCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFN0YXRlICBwb2ludHMgdG8gdGhlIGFycmF5IGZvciBzdG9yaW5nIGludGVybWVkaWF0ZSByZXN1bHRzCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X211bHRfcTE1KAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBEc3QsCisgIHExNV90ICogcFN0YXRlKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IG1hdHJpeCBtdWx0aXBsaWNhdGlvbiAoZmFzdCB2YXJpYW50KSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTdGF0ZSAgcG9pbnRzIHRvIHRoZSBhcnJheSBmb3Igc3RvcmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cworICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9tdWx0X2Zhc3RfcTE1KAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBEc3QsCisgIHExNV90ICogcFN0YXRlKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIG1hdHJpeCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfbXVsdF9xMzEoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSBtYXRyaXggbXVsdGlwbGljYXRpb24gKGZhc3QgdmFyaWFudCkgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW291dF0gcERzdCAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcmV0dXJuICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIKKyAgICogPGNvZGU+QVJNX01BVEhfU0laRV9NSVNNQVRDSDwvY29kZT4gb3IgPGNvZGU+QVJNX01BVEhfU1VDQ0VTUzwvY29kZT4gYmFzZWQgb24gdGhlIG91dGNvbWUgb2Ygc2l6ZSBjaGVja2luZy4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9tdWx0X2Zhc3RfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNBLAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmNCLAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCBtYXRyaXggc3VidHJhY3Rpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X3N1Yl9mMzIoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBtYXRyaXggc3VidHJhY3Rpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X3N1Yl9xMTUoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTE1ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSBtYXRyaXggc3VidHJhY3Rpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgbWF0cml4IHN0cnVjdHVyZQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIG91dHB1dCBtYXRyaXggc3RydWN0dXJlCisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X3N1Yl9xMzEoCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0EsCisgIGNvbnN0IGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcFNyY0IsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBzY2FsaW5nLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBtYXRyaXgKKyAgICogQHBhcmFtW2luXSAgc2NhbGUgIHNjYWxlIGZhY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgbWF0cml4CisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X3NjYWxlX2YzMigKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBwU3JjLAorICBmbG9hdDMyX3Qgc2NhbGUsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSBtYXRyaXggc2NhbGluZy4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIGlucHV0IG1hdHJpeAorICAgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIGZhY3RvcgorICAgKiBAcGFyYW1baW5dICBzaGlmdCAgICAgICBudW1iZXIgb2YgYml0cyB0byBzaGlmdCB0aGUgcmVzdWx0IGJ5CisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byBvdXRwdXQgbWF0cml4CisgICAqIEByZXR1cm4gICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGVpdGhlcgorICAgKiA8Y29kZT5BUk1fTUFUSF9TSVpFX01JU01BVENIPC9jb2RlPiBvciA8Y29kZT5BUk1fTUFUSF9TVUNDRVNTPC9jb2RlPiBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBzaXplIGNoZWNraW5nLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X3NjYWxlX3ExNSgKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9xMTUgKiBwU3JjLAorICBxMTVfdCBzY2FsZUZyYWN0LAorICBpbnQzMl90IHNoaWZ0LAorICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgbWF0cml4IHNjYWxpbmcuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byBpbnB1dCBtYXRyaXgKKyAgICogQHBhcmFtW2luXSAgc2NhbGVGcmFjdCAgZnJhY3Rpb25hbCBwb3J0aW9uIG9mIHRoZSBzY2FsZSBmYWN0b3IKKyAgICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gb3V0cHV0IG1hdHJpeCBzdHJ1Y3R1cmUKKyAgICogQHJldHVybiAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyCisgICAqIDxjb2RlPkFSTV9NQVRIX1NJWkVfTUlTTUFUQ0g8L2NvZGU+IG9yIDxjb2RlPkFSTV9NQVRIX1NVQ0NFU1M8L2NvZGU+IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHNpemUgY2hlY2tpbmcuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9tYXRfc2NhbGVfcTMxKAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIHBTcmMsCisgIHEzMV90IHNjYWxlRnJhY3QsCisgIGludDMyX3Qgc2hpZnQsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfcTMxICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMzEgbWF0cml4IGluaXRpYWxpemF0aW9uLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBuUm93cyAgICAgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KKyAgICogQHBhcmFtW2luXSAgICAgbkNvbHVtbnMgIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCisgICAqIEBwYXJhbVtpbl0gICAgIHBEYXRhICAgICBwb2ludHMgdG8gdGhlIG1hdHJpeCBkYXRhIGFycmF5LgorICAgKi8KKyAgdm9pZCBhcm1fbWF0X2luaXRfcTMxKAorICBhcm1fbWF0cml4X2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG5Sb3dzLAorICB1aW50MTZfdCBuQ29sdW1ucywKKyAgcTMxX3QgKiBwRGF0YSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMTUgbWF0cml4IGluaXRpYWxpemF0aW9uLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBuUm93cyAgICAgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KKyAgICogQHBhcmFtW2luXSAgICAgbkNvbHVtbnMgIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCisgICAqIEBwYXJhbVtpbl0gICAgIHBEYXRhICAgICBwb2ludHMgdG8gdGhlIG1hdHJpeCBkYXRhIGFycmF5LgorICAgKi8KKyAgdm9pZCBhcm1fbWF0X2luaXRfcTE1KAorICBhcm1fbWF0cml4X2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQxNl90IG5Sb3dzLAorICB1aW50MTZfdCBuQ29sdW1ucywKKyAgcTE1X3QgKiBwRGF0YSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBtYXRyaXggaW5pdGlhbGl6YXRpb24uCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG5Sb3dzICAgICBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgorICAgKiBAcGFyYW1baW5dICAgICBuQ29sdW1ucyAgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4KKyAgICogQHBhcmFtW2luXSAgICAgcERhdGEgICAgIHBvaW50cyB0byB0aGUgbWF0cml4IGRhdGEgYXJyYXkuCisgICAqLworICB2b2lkIGFybV9tYXRfaW5pdF9mMzIoCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDE2X3QgblJvd3MsCisgIHVpbnQxNl90IG5Db2x1bW5zLAorICBmbG9hdDMyX3QgKiBwRGF0YSk7CisKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHExNV90IEEwOyAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMCA9IEtwICsgS2kgKyBLZCAuICovCisjaWZkZWYgQVJNX01BVEhfQ00wX0ZBTUlMWQorICAgIHExNV90IEExOworICAgIHExNV90IEEyOworI2Vsc2UKKyAgICBxMzFfdCBBMTsgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiBBMSA9IC1LcCAtIDJLZCB8IEtkLiovCisjZW5kaWYKKyAgICBxMTVfdCBzdGF0ZVszXTsgICAgIC8qKjwgVGhlIHN0YXRlIGFycmF5IG9mIGxlbmd0aCAzLiAqLworICAgIHExNV90IEtwOyAgICAgICAgICAgLyoqPCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uICovCisgICAgcTE1X3QgS2k7ICAgICAgICAgICAvKio8IFRoZSBpbnRlZ3JhbCBnYWluLiAqLworICAgIHExNV90IEtkOyAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZhdGl2ZSBnYWluLiAqLworICB9IGFybV9waWRfaW5zdGFuY2VfcTE1OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIFBJRCBDb250cm9sLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHEzMV90IEEwOyAgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTAgPSBLcCArIEtpICsgS2QgLiAqLworICAgIHEzMV90IEExOyAgICAgICAgICAgIC8qKjwgVGhlIGRlcml2ZWQgZ2FpbiwgQTEgPSAtS3AgLSAyS2QuICovCisgICAgcTMxX3QgQTI7ICAgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMiA9IEtkIC4gKi8KKyAgICBxMzFfdCBzdGF0ZVszXTsgICAgICAvKio8IFRoZSBzdGF0ZSBhcnJheSBvZiBsZW5ndGggMy4gKi8KKyAgICBxMzFfdCBLcDsgICAgICAgICAgICAvKio8IFRoZSBwcm9wb3J0aW9uYWwgZ2Fpbi4gKi8KKyAgICBxMzFfdCBLaTsgICAgICAgICAgICAvKio8IFRoZSBpbnRlZ3JhbCBnYWluLiAqLworICAgIHEzMV90IEtkOyAgICAgICAgICAgIC8qKjwgVGhlIGRlcml2YXRpdmUgZ2Fpbi4gKi8KKyAgfSBhcm1fcGlkX2luc3RhbmNlX3EzMTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGZsb2F0MzJfdCBBMDsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMCA9IEtwICsgS2kgKyBLZCAuICovCisgICAgZmxvYXQzMl90IEExOyAgICAgICAgICAvKio8IFRoZSBkZXJpdmVkIGdhaW4sIEExID0gLUtwIC0gMktkLiAqLworICAgIGZsb2F0MzJfdCBBMjsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZlZCBnYWluLCBBMiA9IEtkIC4gKi8KKyAgICBmbG9hdDMyX3Qgc3RhdGVbM107ICAgIC8qKjwgVGhlIHN0YXRlIGFycmF5IG9mIGxlbmd0aCAzLiAqLworICAgIGZsb2F0MzJfdCBLcDsgICAgICAgICAgLyoqPCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uICovCisgICAgZmxvYXQzMl90IEtpOyAgICAgICAgICAvKio8IFRoZSBpbnRlZ3JhbCBnYWluLiAqLworICAgIGZsb2F0MzJfdCBLZDsgICAgICAgICAgLyoqPCBUaGUgZGVyaXZhdGl2ZSBnYWluLiAqLworICB9IGFybV9waWRfaW5zdGFuY2VfZjMyOworCisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IFBJRCBDb250cm9sLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBQSUQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICByZXNldFN0YXRlRmxhZyAgZmxhZyB0byByZXNldCB0aGUgc3RhdGUuIDAgPSBubyBjaGFuZ2UgaW4gc3RhdGUgMSA9IHJlc2V0IHRoZSBzdGF0ZS4KKyAgICovCisgIHZvaWQgYXJtX3BpZF9pbml0X2YzMigKKyAgYXJtX3BpZF9pbnN0YW5jZV9mMzIgKiBTLAorICBpbnQzMl90IHJlc2V0U3RhdGVGbGFnKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFJlc2V0IGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUElEIENvbnRyb2wuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUKKyAgICovCisgIHZvaWQgYXJtX3BpZF9yZXNldF9mMzIoCisgIGFybV9waWRfaW5zdGFuY2VfZjMyICogUyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBQSUQgQ29udHJvbC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IFBJRCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIHJlc2V0U3RhdGVGbGFnICBmbGFnIHRvIHJlc2V0IHRoZSBzdGF0ZS4gMCA9IG5vIGNoYW5nZSBpbiBzdGF0ZSAxID0gcmVzZXQgdGhlIHN0YXRlLgorICAgKi8KKyAgdm9pZCBhcm1fcGlkX2luaXRfcTMxKAorICBhcm1fcGlkX2luc3RhbmNlX3EzMSAqIFMsCisgIGludDMyX3QgcmVzZXRTdGF0ZUZsYWcpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUmVzZXQgZnVuY3Rpb24gZm9yIHRoZSBRMzEgUElEIENvbnRyb2wuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUKKyAgICovCisKKyAgdm9pZCBhcm1fcGlkX3Jlc2V0X3EzMSgKKyAgYXJtX3BpZF9pbnN0YW5jZV9xMzEgKiBTKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgUElEIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgcmVzZXRTdGF0ZUZsYWcgIGZsYWcgdG8gcmVzZXQgdGhlIHN0YXRlLiAwID0gbm8gY2hhbmdlIGluIHN0YXRlIDEgPSByZXNldCB0aGUgc3RhdGUuCisgICAqLworICB2b2lkIGFybV9waWRfaW5pdF9xMTUoCisgIGFybV9waWRfaW5zdGFuY2VfcTE1ICogUywKKyAgaW50MzJfdCByZXNldFN0YXRlRmxhZyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBSZXNldCBmdW5jdGlvbiBmb3IgdGhlIFExNSBQSUQgQ29udHJvbC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBxMTUgUElEIENvbnRyb2wgc3RydWN0dXJlCisgICAqLworICB2b2lkIGFybV9waWRfcmVzZXRfcTE1KAorICBhcm1fcGlkX2luc3RhbmNlX3ExNSAqIFMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBMaW5lYXIgSW50ZXJwb2xhdGUgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgblZhbHVlczsgICAgICAgICAgIC8qKjwgblZhbHVlcyAqLworICAgIGZsb2F0MzJfdCB4MTsgICAgICAgICAgICAgICAvKio8IHgxICovCisgICAgZmxvYXQzMl90IHhTcGFjaW5nOyAgICAgICAgIC8qKjwgeFNwYWNpbmcgKi8KKyAgICBmbG9hdDMyX3QgKnBZRGF0YTsgICAgICAgICAgLyoqPCBwb2ludGVyIHRvIHRoZSB0YWJsZSBvZiBZIHZhbHVlcyAqLworICB9IGFybV9saW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMjsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtUm93czsgICAvKio8IG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHRhYmxlLiAqLworICAgIHVpbnQxNl90IG51bUNvbHM7ICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgICBmbG9hdDMyX3QgKnBEYXRhOyAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIHRhYmxlLiAqLworICB9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfZjMyOworCisgICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVJvd3M7ICAgLyoqPCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBudW1Db2xzOyAgIC8qKjwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRhdGEgdGFibGUuICovCisgICAgcTMxX3QgKnBEYXRhOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgfSBhcm1fYmlsaW5lYXJfaW50ZXJwX2luc3RhbmNlX3EzMTsKKworICAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1Sb3dzOyAgIC8qKjwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGRhdGEgdGFibGUuICovCisgICAgdWludDE2X3QgbnVtQ29sczsgICAvKio8IG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkYXRhIHRhYmxlLiAqLworICAgIHExNV90ICpwRGF0YTsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGRhdGEgdGFibGUuICovCisgIH0gYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xMTU7CisKKyAgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IGJpbGluZWFyIGludGVycG9sYXRpb24gZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtUm93czsgICAvKio8IG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHRhYmxlLiAqLworICAgIHVpbnQxNl90IG51bUNvbHM7ICAgLyoqPCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZGF0YSB0YWJsZS4gKi8KKyAgICBxN190ICpwRGF0YTsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBkYXRhIHRhYmxlLiAqLworICB9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTc7CisKKworICAvKioKKyAgICogQGJyaWVmIFE3IHZlY3RvciBtdWx0aXBsaWNhdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9tdWx0X3E3KAorICBxN190ICogcFNyY0EsCisgIHE3X3QgKiBwU3JjQiwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSB2ZWN0b3IgbXVsdGlwbGljYXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbXVsdF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHExNV90ICogcFNyY0IsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTMxIHZlY3RvciBtdWx0aXBsaWNhdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9tdWx0X3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCB2ZWN0b3IgbXVsdGlwbGljYXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbXVsdF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgU2luIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHVpbnQxNl90IGJpdFJldkZhY3RvcjsgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgfSBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTE1OworCisvKiBEZXByZWNhdGVkICovCisgIGFybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXgyX2luaXRfcTE1KAorICBhcm1fY2ZmdF9yYWRpeDJfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgZmZ0TGVuLAorICB1aW50OF90IGlmZnRGbGFnLAorICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworLyogRGVwcmVjYXRlZCAqLworICB2b2lkIGFybV9jZmZ0X3JhZGl4Ml9xMTUoCisgIGNvbnN0IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWc9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWc9MSkgdHJhbnNmb3JtLiAqLworICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLworICAgIHExNV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgIH0gYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNTsKKworLyogRGVwcmVjYXRlZCAqLworICBhcm1fc3RhdHVzIGFybV9jZmZ0X3JhZGl4NF9pbml0X3ExNSgKKyAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQxNl90IGZmdExlbiwKKyAgdWludDhfdCBpZmZ0RmxhZywKKyAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgdm9pZCBhcm1fY2ZmdF9yYWRpeDRfcTE1KAorICBjb25zdCBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFJhZGl4LTIgUTMxIENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICB1aW50OF90IGlmZnRGbGFnOyAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICBxMzFfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICB9IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMzE7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDJfaW5pdF9xMzEoCisgIGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9xMzEgKiBTLAorICB1aW50MTZfdCBmZnRMZW4sCisgIHVpbnQ4X3QgaWZmdEZsYWcsCisgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOworCisvKiBEZXByZWNhdGVkICovCisgIHZvaWQgYXJtX2NmZnRfcmFkaXgyX3EzMSgKKyAgY29uc3QgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYyk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWc9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWc9MSkgdHJhbnNmb3JtLiAqLworICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWc7ICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLworICAgIHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIHVpbnQxNl90IHR3aWRDb2VmTW9kaWZpZXI7ICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgIH0gYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMTsKKworLyogRGVwcmVjYXRlZCAqLworICB2b2lkIGFybV9jZmZ0X3JhZGl4NF9xMzEoCisgIGNvbnN0IGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMpOworCisvKiBEZXByZWNhdGVkICovCisgIGFybV9zdGF0dXMgYXJtX2NmZnRfcmFkaXg0X2luaXRfcTMxKAorICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgZmZ0TGVuLAorICB1aW50OF90IGlmZnRGbGFnLAorICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWc7ICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZz0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZz0xKSB0cmFuc2Zvcm0uICovCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZzsgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBlbmFibGVzIChiaXRSZXZlcnNlRmxhZz0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWc9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICBmbG9hdDMyX3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgdWludDE2X3QgdHdpZENvZWZNb2RpZmllcjsgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2RmFjdG9yOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgZmxvYXQzMl90IG9uZWJ5ZmZ0TGVuOyAgICAgICAgICAgICAvKio8IHZhbHVlIG9mIDEvZmZ0TGVuLiAqLworICB9IGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9mMzI7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY2ZmdF9yYWRpeDJfaW5pdF9mMzIoCisgIGFybV9jZmZ0X3JhZGl4Ml9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50MTZfdCBmZnRMZW4sCisgIHVpbnQ4X3QgaWZmdEZsYWcsCisgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOworCisvKiBEZXByZWNhdGVkICovCisgIHZvaWQgYXJtX2NmZnRfcmFkaXgyX2YzMigKKyAgY29uc3QgYXJtX2NmZnRfcmFkaXgyX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovCisgICAgdWludDhfdCBpZmZ0RmxhZzsgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnPTApIG9yIGludmVyc2UgKGlmZnRGbGFnPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnOyAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZz0wKSBiaXQgcmV2ZXJzYWwgb2Ygb3V0cHV0LiAqLworICAgIGZsb2F0MzJfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCB0d2lkQ29lZk1vZGlmaWVyOyAgICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBiaXRSZXZGYWN0b3I7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICBmbG9hdDMyX3Qgb25lYnlmZnRMZW47ICAgICAgICAgICAgIC8qKjwgdmFsdWUgb2YgMS9mZnRMZW4uICovCisgIH0gYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMjsKKworLyogRGVwcmVjYXRlZCAqLworICBhcm1fc3RhdHVzIGFybV9jZmZ0X3JhZGl4NF9pbml0X2YzMigKKyAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IGZmdExlbiwKKyAgdWludDhfdCBpZmZ0RmxhZywKKyAgdWludDhfdCBiaXRSZXZlcnNlRmxhZyk7CisKKy8qIERlcHJlY2F0ZWQgKi8KKyAgdm9pZCBhcm1fY2ZmdF9yYWRpeDRfZjMyKAorICBjb25zdCBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYyk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaXhlZC1wb2ludCBDRkZUL0NJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IGZmdExlbjsgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIEZGVC4gKi8KKyAgICBjb25zdCBxMTVfdCAqcFR3aWRkbGU7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBUd2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBjb25zdCB1aW50MTZfdCAqcEJpdFJldlRhYmxlOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBiaXQgcmV2ZXJzYWwgdGFibGUuICovCisgICAgdWludDE2X3QgYml0UmV2TGVuZ3RoOyAgICAgICAgICAgICAvKio8IGJpdCByZXZlcnNhbCB0YWJsZSBsZW5ndGguICovCisgIH0gYXJtX2NmZnRfaW5zdGFuY2VfcTE1OworCit2b2lkIGFybV9jZmZ0X3ExNSgKKyAgICBjb25zdCBhcm1fY2ZmdF9pbnN0YW5jZV9xMTUgKiBTLAorICAgIHExNV90ICogcDEsCisgICAgdWludDhfdCBpZmZ0RmxhZywKKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZpeGVkLXBvaW50IENGRlQvQ0lGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgZmZ0TGVuOyAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRkZULiAqLworICAgIGNvbnN0IHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIFR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIGNvbnN0IHVpbnQxNl90ICpwQml0UmV2VGFibGU7ICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGJpdCByZXZlcnNhbCB0YWJsZS4gKi8KKyAgICB1aW50MTZfdCBiaXRSZXZMZW5ndGg7ICAgICAgICAgICAgIC8qKjwgYml0IHJldmVyc2FsIHRhYmxlIGxlbmd0aC4gKi8KKyAgfSBhcm1fY2ZmdF9pbnN0YW5jZV9xMzE7CisKK3ZvaWQgYXJtX2NmZnRfcTMxKAorICAgIGNvbnN0IGFybV9jZmZ0X2luc3RhbmNlX3EzMSAqIFMsCisgICAgcTMxX3QgKiBwMSwKKyAgICB1aW50OF90IGlmZnRGbGFnLAorICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgQ0ZGVC9DSUZGVCBmdW5jdGlvbi4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBmZnRMZW47ICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBGRlQuICovCisgICAgY29uc3QgZmxvYXQzMl90ICpwVHdpZGRsZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgVHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgY29uc3QgdWludDE2X3QgKnBCaXRSZXZUYWJsZTsgICAgICAvKio8IHBvaW50cyB0byB0aGUgYml0IHJldmVyc2FsIHRhYmxlLiAqLworICAgIHVpbnQxNl90IGJpdFJldkxlbmd0aDsgICAgICAgICAgICAgLyoqPCBiaXQgcmV2ZXJzYWwgdGFibGUgbGVuZ3RoLiAqLworICB9IGFybV9jZmZ0X2luc3RhbmNlX2YzMjsKKworICB2b2lkIGFybV9jZmZ0X2YzMigKKyAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcDEsCisgIHVpbnQ4X3QgaWZmdEZsYWcsCisgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWcpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IFJGRlQvUklGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgZmZ0TGVuUmVhbDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIHJlYWwgRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWdSOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IHNlbGVjdHMgZm9yd2FyZCAoaWZmdEZsYWdSPTApIG9yIGludmVyc2UgKGlmZnRGbGFnUj0xKSB0cmFuc2Zvcm0uICovCisgICAgdWludDhfdCBiaXRSZXZlcnNlRmxhZ1I7ICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZ1I9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICB1aW50MzJfdCB0d2lkQ29lZlJNb2RpZmllcjsgICAgICAgICAgICAgICAvKio8IHR3aWRkbGUgY29lZmZpY2llbnQgbW9kaWZpZXIgdGhhdCBzdXBwb3J0cyBkaWZmZXJlbnQgc2l6ZSBGRlRzIHdpdGggdGhlIHNhbWUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgcTE1X3QgKnBUd2lkZGxlQVJlYWw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgcTE1X3QgKnBUd2lkZGxlQlJlYWw7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGltYWcgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTE1ICpwQ2ZmdDsgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLworICB9IGFybV9yZmZ0X2luc3RhbmNlX3ExNTsKKworICBhcm1fc3RhdHVzIGFybV9yZmZ0X2luaXRfcTE1KAorICBhcm1fcmZmdF9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MzJfdCBmZnRMZW5SZWFsLAorICB1aW50MzJfdCBpZmZ0RmxhZ1IsCisgIHVpbnQzMl90IGJpdFJldmVyc2VGbGFnKTsKKworICB2b2lkIGFybV9yZmZ0X3ExNSgKKyAgY29uc3QgYXJtX3JmZnRfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIFJGRlQvUklGRlQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgZmZ0TGVuUmVhbDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgcmVhbCBGRlQuICovCisgICAgdWludDhfdCBpZmZ0RmxhZ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGZsYWcgdGhhdCBzZWxlY3RzIGZvcndhcmQgKGlmZnRGbGFnUj0wKSBvciBpbnZlcnNlIChpZmZ0RmxhZ1I9MSkgdHJhbnNmb3JtLiAqLworICAgIHVpbnQ4X3QgYml0UmV2ZXJzZUZsYWdSOyAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgZW5hYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTEpIG9yIGRpc2FibGVzIChiaXRSZXZlcnNlRmxhZ1I9MCkgYml0IHJldmVyc2FsIG9mIG91dHB1dC4gKi8KKyAgICB1aW50MzJfdCB0d2lkQ29lZlJNb2RpZmllcjsgICAgICAgICAgICAgICAgIC8qKjwgdHdpZGRsZSBjb2VmZmljaWVudCBtb2RpZmllciB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBzaXplIEZGVHMgd2l0aCB0aGUgc2FtZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBxMzFfdCAqcFR3aWRkbGVBUmVhbDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIHEzMV90ICpwVHdpZGRsZUJSZWFsOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGltYWcgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgY29uc3QgYXJtX2NmZnRfaW5zdGFuY2VfcTMxICpwQ2ZmdDsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovCisgIH0gYXJtX3JmZnRfaW5zdGFuY2VfcTMxOworCisgIGFybV9zdGF0dXMgYXJtX3JmZnRfaW5pdF9xMzEoCisgIGFybV9yZmZ0X2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQzMl90IGZmdExlblJlYWwsCisgIHVpbnQzMl90IGlmZnRGbGFnUiwKKyAgdWludDMyX3QgYml0UmV2ZXJzZUZsYWcpOworCisgIHZvaWQgYXJtX3JmZnRfcTMxKAorICBjb25zdCBhcm1fcmZmdF9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCk7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBSRkZUL1JJRkZUIGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IGZmdExlblJlYWw7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIHJlYWwgRkZULiAqLworICAgIHVpbnQxNl90IGZmdExlbkJ5MjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBsZW5ndGggb2YgdGhlIGNvbXBsZXggRkZULiAqLworICAgIHVpbnQ4X3QgaWZmdEZsYWdSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBmbGFnIHRoYXQgc2VsZWN0cyBmb3J3YXJkIChpZmZ0RmxhZ1I9MCkgb3IgaW52ZXJzZSAoaWZmdEZsYWdSPTEpIHRyYW5zZm9ybS4gKi8KKyAgICB1aW50OF90IGJpdFJldmVyc2VGbGFnUjsgICAgICAgICAgICAgICAgICAgIC8qKjwgZmxhZyB0aGF0IGVuYWJsZXMgKGJpdFJldmVyc2VGbGFnUj0xKSBvciBkaXNhYmxlcyAoYml0UmV2ZXJzZUZsYWdSPTApIGJpdCByZXZlcnNhbCBvZiBvdXRwdXQuICovCisgICAgdWludDMyX3QgdHdpZENvZWZSTW9kaWZpZXI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCB0d2lkZGxlIGNvZWZmaWNpZW50IG1vZGlmaWVyIHRoYXQgc3VwcG9ydHMgZGlmZmVyZW50IHNpemUgRkZUcyB3aXRoIHRoZSBzYW1lIHR3aWRkbGUgZmFjdG9yIHRhYmxlLiAqLworICAgIGZsb2F0MzJfdCAqcFR3aWRkbGVBUmVhbDsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgZmxvYXQzMl90ICpwVHdpZGRsZUJSZWFsOyAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgaW1hZyB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfZjMyICpwQ2ZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb21wbGV4IEZGVCBpbnN0YW5jZS4gKi8KKyAgfSBhcm1fcmZmdF9pbnN0YW5jZV9mMzI7CisKKyAgYXJtX3N0YXR1cyBhcm1fcmZmdF9pbml0X2YzMigKKyAgYXJtX3JmZnRfaW5zdGFuY2VfZjMyICogUywKKyAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqIFNfQ0ZGVCwKKyAgdWludDMyX3QgZmZ0TGVuUmVhbCwKKyAgdWludDMyX3QgaWZmdEZsYWdSLAorICB1aW50MzJfdCBiaXRSZXZlcnNlRmxhZyk7CisKKyAgdm9pZCBhcm1fcmZmdF9mMzIoCisgIGNvbnN0IGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgUkZGVC9SSUZGVCBmdW5jdGlvbi4KKyAgICovCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgYXJtX2NmZnRfaW5zdGFuY2VfZjMyIFNpbnQ7ICAgICAgLyoqPCBJbnRlcm5hbCBDRkZUIHN0cnVjdHVyZS4gKi8KKyAgICB1aW50MTZfdCBmZnRMZW5SRkZUOyAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgcmVhbCBzZXF1ZW5jZSAqLworICAgIGZsb2F0MzJfdCAqIHBUd2lkZGxlUkZGVDsgICAgICAgIC8qKjwgVHdpZGRsZSBmYWN0b3JzIHJlYWwgc3RhZ2UgICovCisgIH0gYXJtX3JmZnRfZmFzdF9pbnN0YW5jZV9mMzIgOworCithcm1fc3RhdHVzIGFybV9yZmZ0X2Zhc3RfaW5pdF9mMzIgKAorICAgYXJtX3JmZnRfZmFzdF9pbnN0YW5jZV9mMzIgKiBTLAorICAgdWludDE2X3QgZmZ0TGVuKTsKKwordm9pZCBhcm1fcmZmdF9mYXN0X2YzMigKKyAgYXJtX3JmZnRfZmFzdF9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwLCBmbG9hdDMyX3QgKiBwT3V0LAorICB1aW50OF90IGlmZnRGbGFnKTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IERDVDQvSURDVDQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgTjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBEQ1Q0LiAqLworICAgIHVpbnQxNl90IE5ieTI7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4gKi8KKyAgICBmbG9hdDMyX3Qgbm9ybWFsaXplOyAgICAgICAgICAgICAgICAgLyoqPCBub3JtYWxpemluZyBmYWN0b3IuICovCisgICAgZmxvYXQzMl90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb3NGYWN0b3I7ICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvc0ZhY3RvciB0YWJsZS4gKi8KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9mMzIgKnBSZmZ0OyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgRkZUIGluc3RhbmNlLiAqLworICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9mMzIgKnBDZmZ0OyAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovCisgIH0gYXJtX2RjdDRfaW5zdGFuY2VfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0LgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgU19SRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgUkZGVC9SSUZGVCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIFNfQ0ZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIGZsb2F0aW5nLXBvaW50IENGRlQvQ0lGRlQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBOICAgICAgICAgIGxlbmd0aCBvZiB0aGUgRENUNC4KKyAgICogQHBhcmFtW2luXSAgICAgTmJ5MiAgICAgICBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuCisgICAqIEBwYXJhbVtpbl0gICAgIG5vcm1hbGl6ZSAgbm9ybWFsaXppbmcgZmFjdG9yLgorICAgKiBAcmV0dXJuICAgICAgYXJtX3N0YXR1cyBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiA8Y29kZT5mZnRMZW5SZWFsPC9jb2RlPiBpcyBub3QgYSBzdXBwb3J0ZWQgdHJhbnNmb3JtIGxlbmd0aC4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2RjdDRfaW5pdF9mMzIoCisgIGFybV9kY3Q0X2luc3RhbmNlX2YzMiAqIFMsCisgIGFybV9yZmZ0X2luc3RhbmNlX2YzMiAqIFNfUkZGVCwKKyAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX2YzMiAqIFNfQ0ZGVCwKKyAgdWludDE2X3QgTiwKKyAgdWludDE2X3QgTmJ5MiwKKyAgZmxvYXQzMl90IG5vcm1hbGl6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBEQ1Q0L0lEQ1Q0LgorICAgKiBAcGFyYW1baW5dICAgICBTICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IERDVDQvSURDVDQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBwSW5saW5lQnVmZmVyICBwb2ludHMgdG8gdGhlIGluLXBsYWNlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyLgorICAgKi8KKyAgdm9pZCBhcm1fZGN0NF9mMzIoCisgIGNvbnN0IGFybV9kY3Q0X2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSwKKyAgZmxvYXQzMl90ICogcElubGluZUJ1ZmZlcik7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBEQ1Q0L0lEQ1Q0IGZ1bmN0aW9uLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IE47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IGxlbmd0aCBvZiB0aGUgRENUNC4gKi8KKyAgICB1aW50MTZfdCBOYnkyOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuICovCisgICAgcTMxX3Qgbm9ybWFsaXplOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgbm9ybWFsaXppbmcgZmFjdG9yLiAqLworICAgIHEzMV90ICpwVHdpZGRsZTsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgdHdpZGRsZSBmYWN0b3IgdGFibGUuICovCisgICAgcTMxX3QgKnBDb3NGYWN0b3I7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb3NGYWN0b3IgdGFibGUuICovCisgICAgYXJtX3JmZnRfaW5zdGFuY2VfcTMxICpwUmZmdDsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWFsIEZGVCBpbnN0YW5jZS4gKi8KKyAgICBhcm1fY2ZmdF9yYWRpeDRfaW5zdGFuY2VfcTMxICpwQ2ZmdDsgLyoqPCBwb2ludHMgdG8gdGhlIGNvbXBsZXggRkZUIGluc3RhbmNlLiAqLworICB9IGFybV9kY3Q0X2luc3RhbmNlX3EzMTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTMxIERDVDQvSURDVDQuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFEzMSBEQ1Q0L0lEQ1Q0IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgU19SRkZUICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTMxIFJGRlQvUklGRlQgc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gICAgIFNfQ0ZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFEzMSBDRkZUL0NJRkZUIHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICAgICBOICAgICAgICAgIGxlbmd0aCBvZiB0aGUgRENUNC4KKyAgICogQHBhcmFtW2luXSAgICAgTmJ5MiAgICAgICBoYWxmIG9mIHRoZSBsZW5ndGggb2YgdGhlIERDVDQuCisgICAqIEBwYXJhbVtpbl0gICAgIG5vcm1hbGl6ZSAgbm9ybWFsaXppbmcgZmFjdG9yLgorICAgKiBAcmV0dXJuICAgICAgYXJtX3N0YXR1cyBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiA8Y29kZT5OPC9jb2RlPiBpcyBub3QgYSBzdXBwb3J0ZWQgdHJhbnNmb3JtIGxlbmd0aC4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2RjdDRfaW5pdF9xMzEoCisgIGFybV9kY3Q0X2luc3RhbmNlX3EzMSAqIFMsCisgIGFybV9yZmZ0X2luc3RhbmNlX3EzMSAqIFNfUkZGVCwKKyAgYXJtX2NmZnRfcmFkaXg0X2luc3RhbmNlX3EzMSAqIFNfQ0ZGVCwKKyAgdWludDE2X3QgTiwKKyAgdWludDE2X3QgTmJ5MiwKKyAgcTMxX3Qgbm9ybWFsaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBEQ1Q0L0lEQ1Q0LgorICAgKiBAcGFyYW1baW5dICAgICBTICAgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBEQ1Q0IHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luLG91dF0gcElubGluZUJ1ZmZlciAgcG9pbnRzIHRvIHRoZSBpbi1wbGFjZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX2RjdDRfcTMxKAorICBjb25zdCBhcm1fZGN0NF9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgcTMxX3QgKiBwSW5saW5lQnVmZmVyKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IERDVDQvSURDVDQgZnVuY3Rpb24uCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgTjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIHRoZSBEQ1Q0LiAqLworICAgIHVpbnQxNl90IE5ieTI7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IGhhbGYgb2YgdGhlIGxlbmd0aCBvZiB0aGUgRENUNC4gKi8KKyAgICBxMTVfdCBub3JtYWxpemU7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBub3JtYWxpemluZyBmYWN0b3IuICovCisgICAgcTE1X3QgKnBUd2lkZGxlOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSB0d2lkZGxlIGZhY3RvciB0YWJsZS4gKi8KKyAgICBxMTVfdCAqcENvc0ZhY3RvcjsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvc0ZhY3RvciB0YWJsZS4gKi8KKyAgICBhcm1fcmZmdF9pbnN0YW5jZV9xMTUgKnBSZmZ0OyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHJlYWwgRkZUIGluc3RhbmNlLiAqLworICAgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTUgKnBDZmZ0OyAvKio8IHBvaW50cyB0byB0aGUgY29tcGxleCBGRlQgaW5zdGFuY2UuICovCisgIH0gYXJtX2RjdDRfaW5zdGFuY2VfcTE1OworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgRENUNC9JRENUNC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgUTE1IERDVDQvSURDVDQgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBTX1JGRlQgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiBRMTUgUkZGVC9SSUZGVCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIFNfQ0ZGVCAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIFExNSBDRkZUL0NJRkZUIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgTiAgICAgICAgICBsZW5ndGggb2YgdGhlIERDVDQuCisgICAqIEBwYXJhbVtpbl0gICAgIE5ieTIgICAgICAgaGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBEQ1Q0LgorICAgKiBAcGFyYW1baW5dICAgICBub3JtYWxpemUgIG5vcm1hbGl6aW5nIGZhY3Rvci4KKyAgICogQHJldHVybiAgICAgIGFybV9zdGF0dXMgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgPGNvZGU+TjwvY29kZT4gaXMgbm90IGEgc3VwcG9ydGVkIHRyYW5zZm9ybSBsZW5ndGguCisgICAqLworICBhcm1fc3RhdHVzIGFybV9kY3Q0X2luaXRfcTE1KAorICBhcm1fZGN0NF9pbnN0YW5jZV9xMTUgKiBTLAorICBhcm1fcmZmdF9pbnN0YW5jZV9xMTUgKiBTX1JGRlQsCisgIGFybV9jZmZ0X3JhZGl4NF9pbnN0YW5jZV9xMTUgKiBTX0NGRlQsCisgIHVpbnQxNl90IE4sCisgIHVpbnQxNl90IE5ieTIsCisgIHExNV90IG5vcm1hbGl6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRENUNC9JRENUNC4KKyAgICogQHBhcmFtW2luXSAgICAgUyAgICAgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRENUNCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIHBJbmxpbmVCdWZmZXIgIHBvaW50cyB0byB0aGUgaW4tcGxhY2UgaW5wdXQgYW5kIG91dHB1dCBidWZmZXIuCisgICAqLworICB2b2lkIGFybV9kY3Q0X3ExNSgKKyAgY29uc3QgYXJtX2RjdDRfaW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3RhdGUsCisgIHExNV90ICogcElubGluZUJ1ZmZlcik7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IHZlY3RvciBhZGRpdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9hZGRfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjQSwKKyAgZmxvYXQzMl90ICogcFNyY0IsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFE3IHZlY3RvciBhZGRpdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9hZGRfcTcoCisgIHE3X3QgKiBwU3JjQSwKKyAgcTdfdCAqIHBTcmNCLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IHZlY3RvciBhZGRpdGlvbi4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9hZGRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICBxMTVfdCAqIHBTcmNCLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFEzMSB2ZWN0b3IgYWRkaXRpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fYWRkX3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBGbG9hdGluZy1wb2ludCB2ZWN0b3Igc3VidHJhY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc3ViX2YzMigKKyAgZmxvYXQzMl90ICogcFNyY0EsCisgIGZsb2F0MzJfdCAqIHBTcmNCLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRNyB2ZWN0b3Igc3VidHJhY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc3ViX3E3KAorICBxN190ICogcFNyY0EsCisgIHE3X3QgKiBwU3JjQiwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFExNSB2ZWN0b3Igc3VidHJhY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc3ViX3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgdmVjdG9yIHN1YnRyYWN0aW9uLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3N1Yl9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHEzMV90ICogcFNyY0IsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgTXVsdGlwbGllcyBhIGZsb2F0aW5nLXBvaW50IHZlY3RvciBieSBhIHNjYWxhci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBzY2FsZSAgICAgIHNjYWxlIGZhY3RvciB0byBiZSBhcHBsaWVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc2NhbGVfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3Qgc2NhbGUsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIE11bHRpcGxpZXMgYSBRNyB2ZWN0b3IgYnkgYSBzY2FsYXIuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgdmFsdWUKKyAgICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc2NhbGVfcTcoCisgIHE3X3QgKiBwU3JjLAorICBxN190IHNjYWxlRnJhY3QsCisgIGludDhfdCBzaGlmdCwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIE11bHRpcGxpZXMgYSBRMTUgdmVjdG9yIGJ5IGEgc2NhbGFyLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBzY2FsZUZyYWN0ICBmcmFjdGlvbmFsIHBvcnRpb24gb2YgdGhlIHNjYWxlIHZhbHVlCisgICAqIEBwYXJhbVtpbl0gIHNoaWZ0ICAgICAgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHRoZSByZXN1bHQgYnkKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3NjYWxlX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCBzY2FsZUZyYWN0LAorICBpbnQ4X3Qgc2hpZnQsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgTXVsdGlwbGllcyBhIFEzMSB2ZWN0b3IgYnkgYSBzY2FsYXIuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHNjYWxlRnJhY3QgIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgc2NhbGUgdmFsdWUKKyAgICogQHBhcmFtW2luXSAgc2hpZnQgICAgICAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIHJlc3VsdCBieQorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc2NhbGVfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90IHNjYWxlRnJhY3QsCisgIGludDhfdCBzaGlmdCwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRNyB2ZWN0b3IgYWJzb2x1dGUgdmFsdWUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fYWJzX3E3KAorICBxN190ICogcFNyYywKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IHZlY3RvciBhYnNvbHV0ZSB2YWx1ZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IGJ1ZmZlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9hYnNfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMTUgdmVjdG9yIGFic29sdXRlIHZhbHVlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2Fic19xMTUoCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgdmVjdG9yIGFic29sdXRlIHZhbHVlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2Fic19xMzEoCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBEb3QgcHJvZHVjdCBvZiBmbG9hdGluZy1wb2ludCB2ZWN0b3JzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcmVzdWx0ICAgICBvdXRwdXQgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICovCisgIHZvaWQgYXJtX2RvdF9wcm9kX2YzMigKKyAgZmxvYXQzMl90ICogcFNyY0EsCisgIGZsb2F0MzJfdCAqIHBTcmNCLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIERvdCBwcm9kdWN0IG9mIFE3IHZlY3RvcnMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIG91dHB1dCByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKi8KKyAgdm9pZCBhcm1fZG90X3Byb2RfcTcoCisgIHE3X3QgKiBwU3JjQSwKKyAgcTdfdCAqIHBTcmNCLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHEzMV90ICogcmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRG90IHByb2R1Y3Qgb2YgUTE1IHZlY3RvcnMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIG91dHB1dCByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKi8KKyAgdm9pZCBhcm1fZG90X3Byb2RfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHE2M190ICogcmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRG90IHByb2R1Y3Qgb2YgUTMxIHZlY3RvcnMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSByZXN1bHQgICAgIG91dHB1dCByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKi8KKyAgdm9pZCBhcm1fZG90X3Byb2RfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICBxMzFfdCAqIHBTcmNCLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHE2M190ICogcmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFNoaWZ0cyB0aGUgZWxlbWVudHMgb2YgYSBRNyB2ZWN0b3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgc2hpZnRCaXRzICBudW1iZXIgb2YgYml0cyB0byBzaGlmdC4gIEEgcG9zaXRpdmUgdmFsdWUgc2hpZnRzIGxlZnQ7IGEgbmVnYXRpdmUgdmFsdWUgc2hpZnRzIHJpZ2h0LgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX3NoaWZ0X3E3KAorICBxN190ICogcFNyYywKKyAgaW50OF90IHNoaWZ0Qml0cywKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBTaGlmdHMgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3RvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYml0cy4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBzaGlmdEJpdHMgIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LiAgQSBwb3NpdGl2ZSB2YWx1ZSBzaGlmdHMgbGVmdDsgYSBuZWdhdGl2ZSB2YWx1ZSBzaGlmdHMgcmlnaHQuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fc2hpZnRfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIGludDhfdCBzaGlmdEJpdHMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFNoaWZ0cyB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHNoaWZ0Qml0cyAgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuICBBIHBvc2l0aXZlIHZhbHVlIHNoaWZ0cyBsZWZ0OyBhIG5lZ2F0aXZlIHZhbHVlIHNoaWZ0cyByaWdodC4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9zaGlmdF9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgaW50OF90IHNoaWZ0Qml0cywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQWRkcyBhIGNvbnN0YW50IG9mZnNldCB0byBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBvZmZzZXQgICAgIGlzIHRoZSBvZmZzZXQgdG8gYmUgYWRkZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9vZmZzZXRfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3Qgb2Zmc2V0LAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQWRkcyBhIGNvbnN0YW50IG9mZnNldCB0byBhIFE3IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBvZmZzZXQgICAgIGlzIHRoZSBvZmZzZXQgdG8gYmUgYWRkZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9vZmZzZXRfcTcoCisgIHE3X3QgKiBwU3JjLAorICBxN190IG9mZnNldCwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBBZGRzIGEgY29uc3RhbnQgb2Zmc2V0IHRvIGEgUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBvZmZzZXQgICAgIGlzIHRoZSBvZmZzZXQgdG8gYmUgYWRkZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9vZmZzZXRfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90IG9mZnNldCwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQWRkcyBhIGNvbnN0YW50IG9mZnNldCB0byBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgb2Zmc2V0ICAgICBpcyB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fb2Zmc2V0X3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCBvZmZzZXQsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE5lZ2F0ZXMgdGhlIGVsZW1lbnRzIG9mIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbmVnYXRlX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE5lZ2F0ZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTcgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fbmVnYXRlX3E3KAorICBxN190ICogcFNyYywKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBOZWdhdGVzIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGUgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9uZWdhdGVfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE5lZ2F0ZXMgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX25lZ2F0ZV9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29waWVzIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9jb3B5X2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvcGllcyB0aGUgZWxlbWVudHMgb2YgYSBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fY29weV9xNygKKyAgcTdfdCAqIHBTcmMsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29waWVzIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fY29weV9xMTUoCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29waWVzIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fY29weV9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmlsbHMgYSBjb25zdGFudCB2YWx1ZSBpbnRvIGEgZmxvYXRpbmctcG9pbnQgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICB2YWx1ZSAgICAgIGlucHV0IHZhbHVlIHRvIGJlIGZpbGxlZAorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fZmlsbF9mMzIoCisgIGZsb2F0MzJfdCB2YWx1ZSwKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZpbGxzIGEgY29uc3RhbnQgdmFsdWUgaW50byBhIFE3IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2ZpbGxfcTcoCisgIHE3X3QgdmFsdWUsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmlsbHMgYSBjb25zdGFudCB2YWx1ZSBpbnRvIGEgUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2ZpbGxfcTE1KAorICBxMTVfdCB2YWx1ZSwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmlsbHMgYSBjb25zdGFudCB2YWx1ZSBpbnRvIGEgUTMxIHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgdmFsdWUgICAgICBpbnB1dCB2YWx1ZSB0byBiZSBmaWxsZWQKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX2ZpbGxfcTMxKAorICBxMzFfdCB2YWx1ZSwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKy8qKgorICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIGZsb2F0aW5nLXBvaW50IHNlcXVlbmNlcy4KKyAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIG91dHB1dCByZXN1bHQgaXMgd3JpdHRlbi4gIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAqLworICB2b2lkIGFybV9jb252X2YzMigKKyAgZmxvYXQzMl90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIGZsb2F0MzJfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBmbG9hdDMyX3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29udm9sdXRpb24gb2YgUTE1IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4rc3JjQkxlbi0xLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuCisgICAqLworICB2b2lkIGFybV9jb252X29wdF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHExNV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHExNV90ICogcERzdCwKKyAgcTE1X3QgKiBwU2NyYXRjaDEsCisgIHExNV90ICogcFNjcmF0Y2gyKTsKKworCisvKioKKyAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLgorICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgb3V0cHV0IHJlc3VsdCBpcyB3cml0dGVuLiAgTGVuZ3RoIHNyY0FMZW4rc3JjQkxlbi0xLgorICovCisgIHZvaWQgYXJtX2NvbnZfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAgICovCisgIHZvaWQgYXJtX2NvbnZfZmFzdF9xMTUoCisgICAgICAgICAgcTE1X3QgKiBwU3JjQSwKKyAgICAgICAgICB1aW50MzJfdCBzcmNBTGVuLAorICAgICAgICAgIHExNV90ICogcFNyY0IsCisgICAgICAgICAgdWludDMyX3Qgc3JjQkxlbiwKKyAgICAgICAgICBxMTVfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbitzcmNCTGVuLTEuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMSAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDIgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4KKyAgICovCisgIHZvaWQgYXJtX2NvbnZfZmFzdF9vcHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2gxLAorICBxMTVfdCAqIHBTY3JhdGNoMik7CisKKworICAvKioKKyAgICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4rc3JjQkxlbi0xLgorICAgKi8KKyAgdm9pZCBhcm1fY29udl9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHEzMV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHEzMV90ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIHNyY0FMZW4rc3JjQkxlbi0xLgorICAgKi8KKyAgdm9pZCBhcm1fY29udl9mYXN0X3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTMxX3QgKiBwRHN0KTsKKworCisgICAgLyoqCisgICAqIEBicmllZiBDb252b2x1dGlvbiBvZiBRNyBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCBzcmNBTGVuK3NyY0JMZW4tMS4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gxICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIChvZiB0eXBlIHExNV90KSBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4KKyAgICovCisgIHZvaWQgYXJtX2NvbnZfb3B0X3E3KAorICBxN190ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHE3X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTdfdCAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2gxLAorICBxMTVfdCAqIHBTY3JhdGNoMik7CisKKworICAvKioKKyAgICogQGJyaWVmIENvbnZvbHV0aW9uIG9mIFE3IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggc3JjQUxlbitzcmNCTGVuLTEuCisgICAqLworICB2b2lkIGFybV9jb252X3E3KAorICBxN190ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHE3X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTdfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIGZsb2F0aW5nLXBvaW50IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4rc3JjQkxlbi0yXS4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgZmlyc3RJbmRleCwKKyAgdWludDMyX3QgbnVtUG9pbnRzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4rc3JjQkxlbi0yXS4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9vcHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cywKKyAgcTE1X3QgKiBwU2NyYXRjaDEsCisgIHExNV90ICogcFNjcmF0Y2gyKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbitzcmNCTGVuLTJdLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBmaXJzdEluZGV4LAorICB1aW50MzJfdCBudW1Qb2ludHMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFExNSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLgorICAgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfZmFzdF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHExNV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgZmlyc3RJbmRleCwKKyAgdWludDMyX3QgbnVtUG9pbnRzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUGFydGlhbCBjb252b2x1dGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciBvZiBzaXplIG1pbihzcmNBTGVuLCBzcmNCTGVuKS4KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4rc3JjQkxlbi0yXS4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9mYXN0X29wdF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHExNV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgZmlyc3RJbmRleCwKKyAgdWludDMyX3QgbnVtUG9pbnRzLAorICBxMTVfdCAqIHBTY3JhdGNoMSwKKyAgcTE1X3QgKiBwU2NyYXRjaDIpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFEzMSBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBmaXJzdEluZGV4ICBpcyB0aGUgZmlyc3Qgb3V0cHV0IHNhbXBsZSB0byBzdGFydCB3aXRoLgorICAgKiBAcGFyYW1baW5dICBudW1Qb2ludHMgICBpcyB0aGUgbnVtYmVyIG9mIG91dHB1dCBwb2ludHMgdG8gYmUgY29tcHV0ZWQuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMzFfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cyk7CisKKworICAvKioKKyAgICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTMxIHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQKKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGZpcnN0SW5kZXggIGlzIHRoZSBmaXJzdCBvdXRwdXQgc2FtcGxlIHRvIHN0YXJ0IHdpdGguCisgICAqIEBwYXJhbVtpbl0gIG51bVBvaW50cyAgIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IHBvaW50cyB0byBiZSBjb21wdXRlZC4KKyAgICogQHJldHVybiAgUmV0dXJucyBlaXRoZXIgQVJNX01BVEhfU1VDQ0VTUyBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVkIGNvcnJlY3RseSBvciBBUk1fTUFUSF9BUkdVTUVOVF9FUlJPUiBpZiB0aGUgcmVxdWVzdGVkIHN1YnNldCBpcyBub3QgaW4gdGhlIHJhbmdlIFswIHNyY0FMZW4rc3JjQkxlbi0yXS4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2NvbnZfcGFydGlhbF9mYXN0X3EzMSgKKyAgcTMxX3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTMxX3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBmaXJzdEluZGV4LAorICB1aW50MzJfdCBudW1Qb2ludHMpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQYXJ0aWFsIGNvbnZvbHV0aW9uIG9mIFE3IHNlcXVlbmNlcworICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoMiAgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlciAob2YgdHlwZSBxMTVfdCkgb2Ygc2l6ZSBtaW4oc3JjQUxlbiwgc3JjQkxlbikuCisgICAqIEByZXR1cm4gIFJldHVybnMgZWl0aGVyIEFSTV9NQVRIX1NVQ0NFU1MgaWYgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBjb3JyZWN0bHkgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYgdGhlIHJlcXVlc3RlZCBzdWJzZXQgaXMgbm90IGluIHRoZSByYW5nZSBbMCBzcmNBTGVuK3NyY0JMZW4tMl0uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9jb252X3BhcnRpYWxfb3B0X3E3KAorICBxN190ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHE3X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cywKKyAgcTE1X3QgKiBwU2NyYXRjaDEsCisgIHExNV90ICogcFNjcmF0Y2gyKTsKKworCisvKioKKyAgICogQGJyaWVmIFBhcnRpYWwgY29udm9sdXRpb24gb2YgUTcgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgZmlyc3RJbmRleCAgaXMgdGhlIGZpcnN0IG91dHB1dCBzYW1wbGUgdG8gc3RhcnQgd2l0aC4KKyAgICogQHBhcmFtW2luXSAgbnVtUG9pbnRzICAgaXMgdGhlIG51bWJlciBvZiBvdXRwdXQgcG9pbnRzIHRvIGJlIGNvbXB1dGVkLgorICAgKiBAcmV0dXJuICBSZXR1cm5zIGVpdGhlciBBUk1fTUFUSF9TVUNDRVNTIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgY29ycmVjdGx5IG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmIHRoZSByZXF1ZXN0ZWQgc3Vic2V0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgWzAgc3JjQUxlbitzcmNCTGVuLTJdLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fY29udl9wYXJ0aWFsX3E3KAorICBxN190ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHE3X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTdfdCAqIHBEc3QsCisgIHVpbnQzMl90IGZpcnN0SW5kZXgsCisgIHVpbnQzMl90IG51bVBvaW50cyk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgZGVjaW1hdG9yLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgTTsgICAgICAgICAgICAgICAgICAvKio8IGRlY2ltYXRpb24gZmFjdG9yLiAqLworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxMTVfdCAqcENvZWZmczsgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMrYmxvY2tTaXplLTEuICovCisgIH0gYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTU7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMzEgRklSIGRlY2ltYXRvci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50OF90IE07ICAgICAgICAgICAgICAgICAgLyoqPCBkZWNpbWF0aW9uIGZhY3Rvci4gKi8KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICB9IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfcTMxOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGRlY2ltYXRvci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50OF90IE07ICAgICAgICAgICAgICAgICAgLyoqPCBkZWNpbWF0aW9uIGZhY3Rvci4gKi8KKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICB9IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGRlY2ltYXRvci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9kZWNpbWF0ZV9mMzIoCisgIGNvbnN0IGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGRlY2ltYXRvci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgTSAgICAgICAgICBkZWNpbWF0aW9uIGZhY3Rvci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICogQHJldHVybiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwgb3IgQVJNX01BVEhfTEVOR1RIX0VSUk9SIGlmCisgICAqIDxjb2RlPmJsb2NrU2l6ZTwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgPGNvZGU+TTwvY29kZT4uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9maXJfZGVjaW1hdGVfaW5pdF9mMzIoCisgIGFybV9maXJfZGVjaW1hdGVfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgdWludDhfdCBNLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGRlY2ltYXRvci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfZGVjaW1hdGVfcTE1KAorICBjb25zdCBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBkZWNpbWF0b3IgKGZhc3QgdmFyaWFudCkgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00LgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBkZWNpbWF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9kZWNpbWF0ZV9mYXN0X3ExNSgKKyAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBkZWNpbWF0b3IuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBNICAgICAgICAgIGRlY2ltYXRpb24gZmFjdG9yLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKiBAcmV0dXJuICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYKKyAgICogPGNvZGU+YmxvY2tTaXplPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiA8Y29kZT5NPC9jb2RlPi4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX2Zpcl9kZWNpbWF0ZV9pbml0X3ExNSgKKyAgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICB1aW50OF90IE0sCisgIHExNV90ICogcENvZWZmcywKKyAgcTE1X3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGRlY2ltYXRvci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2RlY2ltYXRlX3EzMSgKKyAgY29uc3QgYXJtX2Zpcl9kZWNpbWF0ZV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGRlY2ltYXRvciAoZmFzdCB2YXJpYW50KSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGRlY2ltYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2RlY2ltYXRlX2Zhc3RfcTMxKAorICBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGRlY2ltYXRvci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgZGVjaW1hdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtVGFwcyAgICBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIE0gICAgICAgICAgZGVjaW1hdGlvbiBmYWN0b3IuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqIEByZXR1cm4gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZgorICAgKiA8Y29kZT5ibG9ja1NpemU8L2NvZGU+IGlzIG5vdCBhIG11bHRpcGxlIG9mIDxjb2RlPk08L2NvZGU+LgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZmlyX2RlY2ltYXRlX2luaXRfcTMxKAorICBhcm1fZmlyX2RlY2ltYXRlX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHVpbnQ4X3QgTSwKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3IuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDhfdCBMOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHVwc2FtcGxlIGZhY3Rvci4gKi8KKyAgICB1aW50MTZfdCBwaGFzZUxlbmd0aDsgICAgICAgICAgIC8qKjwgbGVuZ3RoIG9mIGVhY2ggcG9seXBoYXNlIGZpbHRlciBjb21wb25lbnQuICovCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggTCpwaGFzZUxlbmd0aC4gKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBibG9ja1NpemUrcGhhc2VMZW5ndGgtMS4gKi8KKyAgfSBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3ExNTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBGSVIgaW50ZXJwb2xhdG9yLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCB1cHNhbXBsZSBmYWN0b3IuICovCisgICAgdWludDE2X3QgcGhhc2VMZW5ndGg7ICAgICAgICAgICAvKio8IGxlbmd0aCBvZiBlYWNoIHBvbHlwaGFzZSBmaWx0ZXIgY29tcG9uZW50LiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIEwqcGhhc2VMZW5ndGguICovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggYmxvY2tTaXplK3BoYXNlTGVuZ3RoLTEuICovCisgIH0gYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgTDsgICAgICAgICAgICAgICAgICAgICAvKio8IHVwc2FtcGxlIGZhY3Rvci4gKi8KKyAgICB1aW50MTZfdCBwaGFzZUxlbmd0aDsgICAgICAgICAgLyoqPCBsZW5ndGggb2YgZWFjaCBwb2x5cGhhc2UgZmlsdGVyIGNvbXBvbmVudC4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIEwqcGhhc2VMZW5ndGguICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBwaGFzZUxlbmd0aCtudW1UYXBzLTEuICovCisgIH0gYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9mMzI7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgRklSIGludGVycG9sYXRvci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2ludGVycG9sYXRlX3ExNSgKKyAgY29uc3QgYXJtX2Zpcl9pbnRlcnBvbGF0ZV9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3IuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgRklSIGludGVycG9sYXRvciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIEwgICAgICAgICAgdXBzYW1wbGUgZmFjdG9yLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqIEByZXR1cm4gICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5pdGlhbGl6YXRpb24gaXMgc3VjY2Vzc2Z1bCBvciBBUk1fTUFUSF9MRU5HVEhfRVJST1IgaWYKKyAgICogdGhlIGZpbHRlciBsZW5ndGggPGNvZGU+bnVtVGFwczwvY29kZT4gaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGludGVycG9sYXRpb24gZmFjdG9yIDxjb2RlPkw8L2NvZGU+LgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fZmlyX2ludGVycG9sYXRlX2luaXRfcTE1KAorICBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3ExNSAqIFMsCisgIHVpbnQ4X3QgTCwKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTE1X3QgKiBwQ29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgaW50ZXJwb2xhdG9yLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfaW50ZXJwb2xhdGVfcTMxKAorICBjb25zdCBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgRklSIGludGVycG9sYXRvci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgTCAgICAgICAgICB1cHNhbXBsZSBmYWN0b3IuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICogQHJldHVybiAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZgorICAgKiB0aGUgZmlsdGVyIGxlbmd0aCA8Y29kZT5udW1UYXBzPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBmYWN0b3IgPGNvZGU+TDwvY29kZT4uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9maXJfaW50ZXJwb2xhdGVfaW5pdF9xMzEoCisgIGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDhfdCBMLAorICB1aW50MTZfdCBudW1UYXBzLAorICBxMzFfdCAqIHBDb2VmZnMsCisgIHEzMV90ICogcFN0YXRlLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGludGVycG9sYXRvci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBpbnRlcnBvbGF0b3Igc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfaW50ZXJwb2xhdGVfZjMyKAorICBjb25zdCBhcm1fZmlyX2ludGVycG9sYXRlX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBpbnRlcnBvbGF0b3IuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBGSVIgaW50ZXJwb2xhdG9yIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgTCAgICAgICAgICB1cHNhbXBsZSBmYWN0b3IuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgICAgcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICogQHJldHVybiAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgQVJNX01BVEhfU1VDQ0VTUyBpZiBpbml0aWFsaXphdGlvbiBpcyBzdWNjZXNzZnVsIG9yIEFSTV9NQVRIX0xFTkdUSF9FUlJPUiBpZgorICAgKiB0aGUgZmlsdGVyIGxlbmd0aCA8Y29kZT5udW1UYXBzPC9jb2RlPiBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBmYWN0b3IgPGNvZGU+TDwvY29kZT4uCisgICAqLworICBhcm1fc3RhdHVzIGFybV9maXJfaW50ZXJwb2xhdGVfaW5pdF9mMzIoCisgIGFybV9maXJfaW50ZXJwb2xhdGVfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDhfdCBMLAorICB1aW50MTZfdCBudW1UYXBzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGhpZ2ggcHJlY2lzaW9uIFEzMSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDhfdCBudW1TdGFnZXM7ICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovCisgICAgcTYzX3QgKnBTdGF0ZTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBzdGF0ZSBjb2VmZmljaWVudHMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIDQqbnVtU3RhZ2VzLiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8KKyAgICB1aW50OF90IHBvc3RTaGlmdDsgICAgICAgLyoqPCBhZGRpdGlvbmFsIHNoaWZ0LCBpbiBiaXRzLCBhcHBsaWVkIHRvIGVhY2ggb3V0cHV0IHNhbXBsZS4gKi8KKyAgfSBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfaW5zX3EzMTsKKworCisgIC8qKgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaGlnaCBwcmVjaXNpb24gUTMxIEJpcXVhZCBjYXNjYWRlIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfcTMxKAorICBjb25zdCBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfaW5zX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBoaWdoIHByZWNpc2lvbiBRMzEgQmlxdWFkIGNhc2NhZGUgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcG9zdFNoaWZ0ICBzaGlmdCB0byBiZSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQuIFZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIGNvZWZmaWNpZW50cyBmb3JtYXQKKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNfZGYxXzMyeDY0X2luaXRfcTMxKAorICBhcm1fYmlxdWFkX2Nhc19kZjFfMzJ4NjRfaW5zX3EzMSAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBxMzFfdCAqIHBDb2VmZnMsCisgIHE2M190ICogcFN0YXRlLAorICB1aW50OF90IHBvc3RTaGlmdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQ4X3QgbnVtU3RhZ2VzOyAgICAgICAgIC8qKjwgbnVtYmVyIG9mIDJuZCBvcmRlciBzdGFnZXMgaW4gdGhlIGZpbHRlci4gIE92ZXJhbGwgb3JkZXIgaXMgMipudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIHN0YXRlIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggMipudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGNvZWZmaWNpZW50cy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggNSpudW1TdGFnZXMuICovCisgIH0gYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjMyOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDhfdCBudW1TdGFnZXM7ICAgICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA0Km51bVN0YWdlcy4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8KKyAgfSBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfaW5zdGFuY2VfZjMyOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdHJhbnNwb3NlZCBkaXJlY3QgZm9ybSBJSSBCaXF1YWQgY2FzY2FkZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDhfdCBudW1TdGFnZXM7ICAgICAgICAgLyoqPCBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLiAgT3ZlcmFsbCBvcmRlciBpcyAyKm51bVN0YWdlcy4gKi8KKyAgICBmbG9hdDY0X3QgKnBTdGF0ZTsgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygc3RhdGUgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCAyKm51bVN0YWdlcy4gKi8KKyAgICBmbG9hdDY0X3QgKnBDb2VmZnM7ICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgY29lZmZpY2llbnRzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCA1Km51bVN0YWdlcy4gKi8KKyAgfSBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mNjQ7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2YzMigKKyAgY29uc3QgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLiAyIGNoYW5uZWxzCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaWx0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfZjMyKAorICBjb25zdCBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfZjY0KAorICBjb25zdCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbnN0YW5jZV9mNjQgKiBTLAorICBmbG9hdDY0X3QgKiBwU3JjLAorICBmbG9hdDY0X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5pdF9mMzIoCisgIGFybV9iaXF1YWRfY2FzY2FkZV9kZjJUX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQ4X3QgbnVtU3RhZ2VzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCB0cmFuc3Bvc2VkIGRpcmVjdCBmb3JtIElJIEJpcXVhZCBjYXNjYWRlIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZpbHRlciBkYXRhIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgICAgbnVtU3RhZ2VzICBudW1iZXIgb2YgMm5kIG9yZGVyIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX2JpcXVhZF9jYXNjYWRlX3N0ZXJlb19kZjJUX2luaXRfZjMyKAorICBhcm1fYmlxdWFkX2Nhc2NhZGVfc3RlcmVvX2RmMlRfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDhfdCBudW1TdGFnZXMsCisgIGZsb2F0MzJfdCAqIHBDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHRyYW5zcG9zZWQgZGlyZWN0IGZvcm0gSUkgQmlxdWFkIGNhc2NhZGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmlsdGVyIGRhdGEgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1TdGFnZXMgIG51bWJlciBvZiAybmQgb3JkZXIgc3RhZ2VzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKi8KKyAgdm9pZCBhcm1fYmlxdWFkX2Nhc2NhZGVfZGYyVF9pbml0X2Y2NCgKKyAgYXJtX2JpcXVhZF9jYXNjYWRlX2RmMlRfaW5zdGFuY2VfZjY0ICogUywKKyAgdWludDhfdCBudW1TdGFnZXMsCisgIGZsb2F0NjRfdCAqIHBDb2VmZnMsCisgIGZsb2F0NjRfdCAqIHBTdGF0ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuICovCisgICAgcTE1X3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgIH0gYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3ExNTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtU3RhZ2VzOyAgICAgICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGZpbHRlciBzdGFnZXMuICovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgICAgcTMxX3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgIH0gYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3EzMTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4gKi8KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8KKyAgfSBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4KKyAgICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX2xhdHRpY2VfaW5pdF9xMTUoCisgIGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MTZfdCBudW1TdGFnZXMsCisgIHExNV90ICogcENvZWZmcywKKyAgcTE1X3QgKiBwU3RhdGUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGUgUTE1IEZJUiBsYXR0aWNlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9sYXR0aWNlX3ExNSgKKyAgY29uc3QgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBGSVIgbGF0dGljZSBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtU3RhZ2VzICBudW1iZXIgb2YgZmlsdGVyIHN0YWdlcy4KKyAgICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4gICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9sYXR0aWNlX2luaXRfcTMxKAorICBhcm1fZmlyX2xhdHRpY2VfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgbnVtU3RhZ2VzLAorICBxMzFfdCAqIHBDb2VmZnMsCisgIHEzMV90ICogcFN0YXRlKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBGSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgRklSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9sYXR0aWNlX3EzMSgKKyAgY29uc3QgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKy8qKgorICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGxhdHRpY2UgZmlsdGVyLgorICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgRklSIGxhdHRpY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBmaWx0ZXIgc3RhZ2VzLgorICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4KKyAqLworICB2b2lkIGFybV9maXJfbGF0dGljZV9pbml0X2YzMigKKyAgYXJtX2Zpcl9sYXR0aWNlX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG51bVN0YWdlcywKKyAgZmxvYXQzMl90ICogcENvZWZmcywKKyAgZmxvYXQzMl90ICogcFN0YXRlKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IEZJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YQorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9maXJfbGF0dGljZV9mMzIoCisgIGNvbnN0IGFybV9maXJfbGF0dGljZV9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgSUlSIGxhdHRpY2UgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVN0YWdlczsgICAgICAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcytibG9ja1NpemUuICovCisgICAgcTE1X3QgKnBrQ29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4gKi8KKyAgICBxMTVfdCAqcHZDb2VmZnM7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGxhZGRlciBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMrMS4gKi8KKyAgfSBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1OworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIElJUiBsYXR0aWNlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMrYmxvY2tTaXplLiAqLworICAgIHEzMV90ICpwa0NvZWZmczsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgICAgcTMxX3QgKnB2Q29lZmZzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzKzEuICovCisgIH0gYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX3EzMTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1TdGFnZXM7ICAgICAgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2Ygc3RhZ2VzIGluIHRoZSBmaWx0ZXIuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMrYmxvY2tTaXplLiAqLworICAgIGZsb2F0MzJfdCAqcGtDb2VmZnM7ICAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMuICovCisgICAgZmxvYXQzMl90ICpwdkNvZWZmczsgICAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzKzEuICovCisgIH0gYXJtX2lpcl9sYXR0aWNlX2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1faWlyX2xhdHRpY2VfZjMyKAorICBjb25zdCBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBJSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IElJUiBsYXR0aWNlIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSBwa0NvZWZmcyAgIHBvaW50cyB0byB0aGUgcmVmbGVjdGlvbiBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4KKyAgICogQHBhcmFtW2luXSBwdkNvZWZmcyAgIHBvaW50cyB0byB0aGUgbGFkZGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzKzEuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzK2Jsb2NrU2l6ZS0xLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2lpcl9sYXR0aWNlX2luaXRfZjMyKAorICBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDE2X3QgbnVtU3RhZ2VzLAorICBmbG9hdDMyX3QgKiBwa0NvZWZmcywKKyAgZmxvYXQzMl90ICogcHZDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBJSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgSUlSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9paXJfbGF0dGljZV9xMzEoCisgIGNvbnN0IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgSUlSIGxhdHRpY2UgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgSUlSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVN0YWdlcyAgbnVtYmVyIG9mIHN0YWdlcyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIHBrQ29lZmZzICAgcG9pbnRzIHRvIHRoZSByZWZsZWN0aW9uIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzLgorICAgKiBAcGFyYW1baW5dIHB2Q29lZmZzICAgcG9pbnRzIHRvIHRoZSBsYWRkZXIgY29lZmZpY2llbnQgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMrMS4KKyAgICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1TdGFnZXMrYmxvY2tTaXplLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2lpcl9sYXR0aWNlX2luaXRfcTMxKAorICBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgbnVtU3RhZ2VzLAorICBxMzFfdCAqIHBrQ29lZmZzLAorICBxMzFfdCAqIHB2Q29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIFExNSBJSVIgbGF0dGljZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgSUlSIGxhdHRpY2Ugc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9paXJfbGF0dGljZV9xMTUoCisgIGNvbnN0IGFybV9paXJfbGF0dGljZV9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisvKioKKyAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFExNSBJSVIgbGF0dGljZSBmaWx0ZXIuCisgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBmaXhlZC1wb2ludCBRMTUgSUlSIGxhdHRpY2Ugc3RydWN0dXJlLgorICogQHBhcmFtW2luXSBudW1TdGFnZXMgIG51bWJlciBvZiBzdGFnZXMgaW4gdGhlIGZpbHRlci4KKyAqIEBwYXJhbVtpbl0gcGtDb2VmZnMgICBwb2ludHMgdG8gcmVmbGVjdGlvbiBjb2VmZmljaWVudCBidWZmZXIuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVN0YWdlcy4KKyAqIEBwYXJhbVtpbl0gcHZDb2VmZnMgICBwb2ludHMgdG8gbGFkZGVyIGNvZWZmaWNpZW50IGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzKzEuCisgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtU3RhZ2VzK2Jsb2NrU2l6ZS4KKyAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzIHBlciBjYWxsLgorICovCisgIHZvaWQgYXJtX2lpcl9sYXR0aWNlX2luaXRfcTE1KAorICBhcm1faWlyX2xhdHRpY2VfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtU3RhZ2VzLAorICBxMTVfdCAqIHBrQ29lZmZzLAorICBxMTVfdCAqIHB2Q29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBmbG9hdDMyX3QgKnBTdGF0ZTsgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgdmFyaWFibGUgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcytibG9ja1NpemUtMS4gKi8KKyAgICBmbG9hdDMyX3QgKnBDb2VmZnM7ICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgICBmbG9hdDMyX3QgbXU7ICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLworICB9IGFybV9sbXNfaW5zdGFuY2VfZjMyOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19mMzIoCisgIGNvbnN0IGFybV9sbXNfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcFJlZiwKKyAgZmxvYXQzMl90ICogcE91dCwKKyAgZmxvYXQzMl90ICogcEVyciwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBwU3RhdGUgICAgIHBvaW50cyB0byBzdGF0ZSBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gbXUgICAgICAgICBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4KKyAgICogQHBhcmFtW2luXSBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9sbXNfaW5pdF9mMzIoCisgIGFybV9sbXNfaW5zdGFuY2VfZjMyICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgZmxvYXQzMl90ICogcENvZWZmcywKKyAgZmxvYXQzMl90ICogcFN0YXRlLAorICBmbG9hdDMyX3QgbXUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFExNSBMTVMgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHExNV90ICpwU3RhdGU7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIHExNV90ICpwQ29lZmZzOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLworICAgIHExNV90IG11OyAgICAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovCisgICAgdWludDMyX3QgcG9zdFNoaWZ0OyAgLyoqPCBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuICovCisgIH0gYXJtX2xtc19pbnN0YW5jZV9xMTU7CisKKworICAvKioKKyAgICogQGJyaWVmIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgUTE1IExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSBudW1UYXBzICAgIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19pbml0X3ExNSgKKyAgYXJtX2xtc19pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBxMTVfdCAqIHBDb2VmZnMsCisgIHExNV90ICogcFN0YXRlLAorICBxMTVfdCBtdSwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICB1aW50MzJfdCBwb3N0U2hpZnQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMTUgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX3ExNSgKKyAgY29uc3QgYXJtX2xtc19pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcFJlZiwKKyAgcTE1X3QgKiBwT3V0LAorICBxMTVfdCAqIHBFcnIsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFEzMSBMTVMgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHEzMV90ICpwU3RhdGU7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLworICAgIHEzMV90IG11OyAgICAgICAgICAgIC8qKjwgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuICovCisgICAgdWludDMyX3QgcG9zdFNoaWZ0OyAgLyoqPCBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuICovCisgIH0gYXJtX2xtc19pbnN0YW5jZV9xMzE7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIFEzMSBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgcFJlZiAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIHJlZmVyZW5jZSBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwT3V0ICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBFcnIgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBlcnJvciBkYXRhLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MuCisgICAqLworICB2b2lkIGFybV9sbXNfcTMxKAorICBjb25zdCBhcm1fbG1zX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwUmVmLAorICBxMzFfdCAqIHBPdXQsCisgIHEzMV90ICogcEVyciwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIFEzMSBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuCisgICAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKiBAcGFyYW1baW5dIHBvc3RTaGlmdCAgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX2luaXRfcTMxKAorICBhcm1fbG1zX2luc3RhbmNlX3EzMSAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHEzMV90ICogcENvZWZmcywKKyAgcTMxX3QgKiBwU3RhdGUsCisgIHEzMV90IG11LAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHVpbnQzMl90IHBvc3RTaGlmdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgZmxvYXQzMl90ICpwU3RhdGU7ICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIGZsb2F0MzJfdCAqcENvZWZmczsgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgICBmbG9hdDMyX3QgbXU7ICAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9sIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLworICAgIGZsb2F0MzJfdCBlbmVyZ3k7ICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGZyYW1lIGVuZXJneS4gKi8KKyAgICBmbG9hdDMyX3QgeDA7ICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBpbnB1dCBzYW1wbGUuICovCisgIH0gYXJtX2xtc19ub3JtX2luc3RhbmNlX2YzMjsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgbm9ybWFsaXplZCBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX25vcm1fZjMyKAorICBhcm1fbG1zX25vcm1faW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcFJlZiwKKyAgZmxvYXQzMl90ICogcE91dCwKKyAgZmxvYXQzMl90ICogcEVyciwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuCisgICAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX25vcm1faW5pdF9mMzIoCisgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9mMzIgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBmbG9hdDMyX3QgKiBwQ29lZmZzLAorICBmbG9hdDMyX3QgKiBwU3RhdGUsCisgIGZsb2F0MzJfdCBtdSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSB2YXJpYWJsZSBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzK2Jsb2NrU2l6ZS0xLiAqLworICAgIHEzMV90ICpwQ29lZmZzOyAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgICBxMzFfdCBtdTsgICAgICAgICAgICAgLyoqPCBzdGVwIHNpemUgdGhhdCBjb250cm9scyBmaWx0ZXIgY29lZmZpY2llbnQgdXBkYXRlcy4gKi8KKyAgICB1aW50OF90IHBvc3RTaGlmdDsgICAgLyoqPCBiaXQgc2hpZnQgYXBwbGllZCB0byBjb2VmZmljaWVudHMuICovCisgICAgcTMxX3QgKnJlY2lwVGFibGU7ICAgIC8qKjwgcG9pbnRzIHRvIHRoZSByZWNpcHJvY2FsIGluaXRpYWwgdmFsdWUgdGFibGUuICovCisgICAgcTMxX3QgZW5lcmd5OyAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgZnJhbWUgZW5lcmd5LiAqLworICAgIHEzMV90IHgwOyAgICAgICAgICAgICAvKio8IHNhdmVzIHByZXZpb3VzIGlucHV0IHNhbXBsZS4gKi8KKyAgfSBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTMxOworCisKKyAgLyoqCisgICAqIEBicmllZiBQcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciBRMzEgbm9ybWFsaXplZCBMTVMgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBpbnB1dCBkYXRhLgorICAgKiBAcGFyYW1baW5dICBwUmVmICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgcmVmZXJlbmNlIGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBPdXQgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcEVyciAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGVycm9yIGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19ub3JtX3EzMSgKKyAgYXJtX2xtc19ub3JtX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90ICogcFNyYywKKyAgcTMxX3QgKiBwUmVmLAorICBxMzFfdCAqIHBPdXQsCisgIHEzMV90ICogcEVyciwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFEzMSBub3JtYWxpemVkIExNUyBmaWx0ZXIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dIG51bVRhcHMgICAgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMuCisgICAqIEBwYXJhbVtpbl0gcENvZWZmcyAgICBwb2ludHMgdG8gY29lZmZpY2llbnQgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIHBTdGF0ZSAgICAgcG9pbnRzIHRvIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSBtdSAgICAgICAgIHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLgorICAgKiBAcGFyYW1baW5dIGJsb2NrU2l6ZSAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2Vzcy4KKyAgICogQHBhcmFtW2luXSBwb3N0U2hpZnQgIGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4KKyAgICovCisgIHZvaWQgYXJtX2xtc19ub3JtX2luaXRfcTMxKAorICBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgcTMxX3QgbXUsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgdWludDhfdCBwb3N0U2hpZnQpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgbm9ybWFsaXplZCBMTVMgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAvKio8IE51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIHZhcmlhYmxlIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMrYmxvY2tTaXplLTEuICovCisgICAgcTE1X3QgKnBDb2VmZnM7ICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLworICAgIHExNV90IG11OyAgICAgICAgICAgICAvKio8IHN0ZXAgc2l6ZSB0aGF0IGNvbnRyb2xzIGZpbHRlciBjb2VmZmljaWVudCB1cGRhdGVzLiAqLworICAgIHVpbnQ4X3QgcG9zdFNoaWZ0OyAgICAvKio8IGJpdCBzaGlmdCBhcHBsaWVkIHRvIGNvZWZmaWNpZW50cy4gKi8KKyAgICBxMTVfdCAqcmVjaXBUYWJsZTsgICAgLyoqPCBQb2ludHMgdG8gdGhlIHJlY2lwcm9jYWwgaW5pdGlhbCB2YWx1ZSB0YWJsZS4gKi8KKyAgICBxMTVfdCBlbmVyZ3k7ICAgICAgICAgLyoqPCBzYXZlcyBwcmV2aW91cyBmcmFtZSBlbmVyZ3kuICovCisgICAgcTE1X3QgeDA7ICAgICAgICAgICAgIC8qKjwgc2F2ZXMgcHJldmlvdXMgaW5wdXQgc2FtcGxlLiAqLworICB9IGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMTU7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIFExNSBub3JtYWxpemVkIExNUyBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgbm9ybWFsaXplZCBMTVMgZmlsdGVyIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtpbl0gIHBSZWYgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiByZWZlcmVuY2UgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcE91dCAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhLgorICAgKiBAcGFyYW1bb3V0XSBwRXJyICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgZXJyb3IgZGF0YS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX25vcm1fcTE1KAorICBhcm1fbG1zX25vcm1faW5zdGFuY2VfcTE1ICogUywKKyAgcTE1X3QgKiBwU3JjLAorICBxMTVfdCAqIHBSZWYsCisgIHExNV90ICogcE91dCwKKyAgcTE1X3QgKiBwRXJyLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTE1IG5vcm1hbGl6ZWQgTE1TIGZpbHRlciBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gbnVtVGFwcyAgICBudW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSBwQ29lZmZzICAgIHBvaW50cyB0byBjb2VmZmljaWVudCBidWZmZXIuCisgICAqIEBwYXJhbVtpbl0gcFN0YXRlICAgICBwb2ludHMgdG8gc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dIG11ICAgICAgICAgc3RlcCBzaXplIHRoYXQgY29udHJvbHMgZmlsdGVyIGNvZWZmaWNpZW50IHVwZGF0ZXMuCisgICAqIEBwYXJhbVtpbl0gYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzLgorICAgKiBAcGFyYW1baW5dIHBvc3RTaGlmdCAgYml0IHNoaWZ0IGFwcGxpZWQgdG8gY29lZmZpY2llbnRzLgorICAgKi8KKyAgdm9pZCBhcm1fbG1zX25vcm1faW5pdF9xMTUoCisgIGFybV9sbXNfbm9ybV9pbnN0YW5jZV9xMTUgKiBTLAorICB1aW50MTZfdCBudW1UYXBzLAorICBxMTVfdCAqIHBDb2VmZnMsCisgIHExNV90ICogcFN0YXRlLAorICBxMTVfdCBtdSwKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICB1aW50OF90IHBvc3RTaGlmdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIGZsb2F0aW5nLXBvaW50IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuCisgICAqLworICB2b2lkIGFybV9jb3JyZWxhdGVfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgZmxvYXQzMl90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIGZsb2F0MzJfdCAqIHBEc3QpOworCisKKyAgIC8qKgorICAgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTE1IHNlcXVlbmNlcworICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaCAgcG9pbnRzIHRvIHNjcmF0Y2ggYnVmZmVyIG9mIHNpemUgbWF4KHNyY0FMZW4sIHNyY0JMZW4pICsgMiptaW4oc3JjQUxlbiwgc3JjQkxlbikgLSAyLgorICAgKi8KKyAgdm9pZCBhcm1fY29ycmVsYXRlX29wdF9xMTUoCisgIHExNV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHExNV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHExNV90ICogcERzdCwKKyAgcTE1X3QgKiBwU2NyYXRjaCk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFExNSBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKi8KKworICB2b2lkIGFybV9jb3JyZWxhdGVfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMTUgc2VxdWVuY2VzIChmYXN0IHZlcnNpb24pIGZvciBDb3J0ZXgtTTMgYW5kIENvcnRleC1NNC4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQUxlbiAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gIGxlbmd0aCBvZiB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuCisgICAqLworCisgIHZvaWQgYXJtX2NvcnJlbGF0ZV9mYXN0X3ExNSgKKyAgcTE1X3QgKiBwU3JjQSwKKyAgdWludDMyX3Qgc3JjQUxlbiwKKyAgcTE1X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTE1X3QgKiBwRHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29ycmVsYXRpb24gb2YgUTE1IHNlcXVlbmNlcyAoZmFzdCB2ZXJzaW9uKSBmb3IgQ29ydGV4LU0zIGFuZCBDb3J0ZXgtTTQuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgcFNyY0IgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhICBMZW5ndGggMiAqIG1heChzcmNBTGVuLCBzcmNCTGVuKSAtIDEuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgb2Ygc2l6ZSBtYXgoc3JjQUxlbiwgc3JjQkxlbikgKyAyKm1pbihzcmNBTGVuLCBzcmNCTGVuKSAtIDIuCisgICAqLworICB2b2lkIGFybV9jb3JyZWxhdGVfZmFzdF9vcHRfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMTVfdCAqIHBEc3QsCisgIHExNV90ICogcFNjcmF0Y2gpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRMzEgc2VxdWVuY2VzLgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICBsZW5ndGggb2YgdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW2luXSAgc3JjQkxlbiAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEgIExlbmd0aCAyICogbWF4KHNyY0FMZW4sIHNyY0JMZW4pIC0gMS4KKyAgICovCisgIHZvaWQgYXJtX2NvcnJlbGF0ZV9xMzEoCisgIHEzMV90ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHEzMV90ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHEzMV90ICogcERzdCk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFEzMSBzZXF1ZW5jZXMgKGZhc3QgdmVyc2lvbikgZm9yIENvcnRleC1NMyBhbmQgQ29ydGV4LU00CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKi8KKyAgdm9pZCBhcm1fY29ycmVsYXRlX2Zhc3RfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxMzFfdCAqIHBTcmNCLAorICB1aW50MzJfdCBzcmNCTGVuLAorICBxMzFfdCAqIHBEc3QpOworCisKKyAvKioKKyAgICogQGJyaWVmIENvcnJlbGF0aW9uIG9mIFE3IHNlcXVlbmNlcy4KKyAgICogQHBhcmFtW2luXSAgcFNyY0EgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNBTGVuICAgIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgcG9pbnRzIHRvIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0JMZW4gICAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaDEgIHBvaW50cyB0byBzY3JhdGNoIGJ1ZmZlcihvZiB0eXBlIHExNV90KSBvZiBzaXplIG1heChzcmNBTGVuLCBzcmNCTGVuKSArIDIqbWluKHNyY0FMZW4sIHNyY0JMZW4pIC0gMi4KKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2gyICBwb2ludHMgdG8gc2NyYXRjaCBidWZmZXIgKG9mIHR5cGUgcTE1X3QpIG9mIHNpemUgbWluKHNyY0FMZW4sIHNyY0JMZW4pLgorICAgKi8KKyAgdm9pZCBhcm1fY29ycmVsYXRlX29wdF9xNygKKyAgcTdfdCAqIHBTcmNBLAorICB1aW50MzJfdCBzcmNBTGVuLAorICBxN190ICogcFNyY0IsCisgIHVpbnQzMl90IHNyY0JMZW4sCisgIHE3X3QgKiBwRHN0LAorICBxMTVfdCAqIHBTY3JhdGNoMSwKKyAgcTE1X3QgKiBwU2NyYXRjaDIpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb3JyZWxhdGlvbiBvZiBRNyBzZXF1ZW5jZXMuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHNyY0FMZW4gIGxlbmd0aCBvZiB0aGUgZmlyc3QgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW1baW5dICBzcmNCTGVuICBsZW5ndGggb2YgdGhlIHNlY29uZCBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgcG9pbnRzIHRvIHRoZSBibG9jayBvZiBvdXRwdXQgZGF0YSAgTGVuZ3RoIDIgKiBtYXgoc3JjQUxlbiwgc3JjQkxlbikgLSAxLgorICAgKi8KKyAgdm9pZCBhcm1fY29ycmVsYXRlX3E3KAorICBxN190ICogcFNyY0EsCisgIHVpbnQzMl90IHNyY0FMZW4sCisgIHE3X3QgKiBwU3JjQiwKKyAgdWludDMyX3Qgc3JjQkxlbiwKKyAgcTdfdCAqIHBEc3QpOworCisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIGZpbHRlci4KKyAgICovCisgIHR5cGVkZWYgc3RydWN0CisgIHsKKyAgICB1aW50MTZfdCBudW1UYXBzOyAgICAgICAgICAgICAvKio8IG51bWJlciBvZiBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlci4gKi8KKyAgICB1aW50MTZfdCBzdGF0ZUluZGV4OyAgICAgICAgICAvKio8IHN0YXRlIGJ1ZmZlciBpbmRleC4gIFBvaW50cyB0byB0aGUgb2xkZXN0IHNhbXBsZSBpbiB0aGUgc3RhdGUgYnVmZmVyLiAqLworICAgIGZsb2F0MzJfdCAqcFN0YXRlOyAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBzdGF0ZSBidWZmZXIgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbWF4RGVsYXkrYmxvY2tTaXplLTEuICovCisgICAgZmxvYXQzMl90ICpwQ29lZmZzOyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuKi8KKyAgICB1aW50MTZfdCBtYXhEZWxheTsgICAgICAgICAgICAvKio8IG1heGltdW0gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgcFRhcERlbGF5IGFycmF5LiAqLworICAgIGludDMyX3QgKnBUYXBEZWxheTsgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBkZWxheSB2YWx1ZXMuICBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG51bVRhcHMuICovCisgIH0gYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfZjMyOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgUTMxIHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHVpbnQxNl90IHN0YXRlSW5kZXg7ICAgICAgICAgIC8qKjwgc3RhdGUgYnVmZmVyIGluZGV4LiAgUG9pbnRzIHRvIHRoZSBvbGRlc3Qgc2FtcGxlIGluIHRoZSBzdGF0ZSBidWZmZXIuICovCisgICAgcTMxX3QgKnBTdGF0ZTsgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlciBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBtYXhEZWxheStibG9ja1NpemUtMS4gKi8KKyAgICBxMzFfdCAqcENvZWZmczsgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLworICAgIHVpbnQxNl90IG1heERlbGF5OyAgICAgICAgICAgIC8qKjwgbWF4aW11bSBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBwVGFwRGVsYXkgYXJyYXkuICovCisgICAgaW50MzJfdCAqcFRhcERlbGF5OyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGRlbGF5IHZhbHVlcy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgfSBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMzE7CisKKyAgLyoqCisgICAqIEBicmllZiBJbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSBRMTUgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgdWludDE2X3QgbnVtVGFwczsgICAgICAgICAgICAgLyoqPCBudW1iZXIgb2YgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuICovCisgICAgdWludDE2X3Qgc3RhdGVJbmRleDsgICAgICAgICAgLyoqPCBzdGF0ZSBidWZmZXIgaW5kZXguICBQb2ludHMgdG8gdGhlIG9sZGVzdCBzYW1wbGUgaW4gdGhlIHN0YXRlIGJ1ZmZlci4gKi8KKyAgICBxMTVfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyIGFycmF5LiBUaGUgYXJyYXkgaXMgb2YgbGVuZ3RoIG1heERlbGF5K2Jsb2NrU2l6ZS0xLiAqLworICAgIHExNV90ICpwQ29lZmZzOyAgICAgICAgICAgICAgIC8qKjwgcG9pbnRzIHRvIHRoZSBjb2VmZmljaWVudCBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiovCisgICAgdWludDE2X3QgbWF4RGVsYXk7ICAgICAgICAgICAgLyoqPCBtYXhpbXVtIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIHBUYXBEZWxheSBhcnJheS4gKi8KKyAgICBpbnQzMl90ICpwVGFwRGVsYXk7ICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZGVsYXkgdmFsdWVzLiAgVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBudW1UYXBzLiAqLworICB9IGFybV9maXJfc3BhcnNlX2luc3RhbmNlX3ExNTsKKworICAvKioKKyAgICogQGJyaWVmIEluc3RhbmNlIHN0cnVjdHVyZSBmb3IgdGhlIFE3IHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIHVpbnQxNl90IG51bVRhcHM7ICAgICAgICAgICAgIC8qKjwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLiAqLworICAgIHVpbnQxNl90IHN0YXRlSW5kZXg7ICAgICAgICAgIC8qKjwgc3RhdGUgYnVmZmVyIGluZGV4LiAgUG9pbnRzIHRvIHRoZSBvbGRlc3Qgc2FtcGxlIGluIHRoZSBzdGF0ZSBidWZmZXIuICovCisgICAgcTdfdCAqcFN0YXRlOyAgICAgICAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlciBhcnJheS4gVGhlIGFycmF5IGlzIG9mIGxlbmd0aCBtYXhEZWxheStibG9ja1NpemUtMS4gKi8KKyAgICBxN190ICpwQ29lZmZzOyAgICAgICAgICAgICAgICAvKio8IHBvaW50cyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXkuIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4qLworICAgIHVpbnQxNl90IG1heERlbGF5OyAgICAgICAgICAgIC8qKjwgbWF4aW11bSBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBwVGFwRGVsYXkgYXJyYXkuICovCisgICAgaW50MzJfdCAqcFRhcERlbGF5OyAgICAgICAgICAgLyoqPCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIGRlbGF5IHZhbHVlcy4gIFRoZSBhcnJheSBpcyBvZiBsZW5ndGggbnVtVGFwcy4gKi8KKyAgfSBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xNzsKKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICBTICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2hJbiAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfZjMyKAorICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICBmbG9hdDMyX3QgKiBwU2NyYXRjaEluLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBzcGFyc2UgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICAgICBudW1UYXBzICAgIG51bWJlciBvZiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgZmlsdGVyLgorICAgKiBAcGFyYW1baW5dICAgICBwQ29lZmZzICAgIHBvaW50cyB0byB0aGUgYXJyYXkgb2YgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICogQHBhcmFtW2luXSAgICAgcFN0YXRlICAgICBwb2ludHMgdG8gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICogQHBhcmFtW2luXSAgICAgcFRhcERlbGF5ICBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9mZnNldCB0aW1lcy4KKyAgICogQHBhcmFtW2luXSAgICAgbWF4RGVsYXkgICBtYXhpbXVtIG9mZnNldCB0aW1lIHN1cHBvcnRlZC4KKyAgICogQHBhcmFtW2luXSAgICAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIHBlciBibG9jay4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfaW5pdF9mMzIoCisgIGFybV9maXJfc3BhcnNlX2luc3RhbmNlX2YzMiAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIGZsb2F0MzJfdCAqIHBDb2VmZnMsCisgIGZsb2F0MzJfdCAqIHBTdGF0ZSwKKyAgaW50MzJfdCAqIHBUYXBEZWxheSwKKyAgdWludDE2X3QgbWF4RGVsYXksCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMzEgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIHNwYXJzZSBGSVIgc3RydWN0dXJlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2hJbiAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfcTMxKAorICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgcTMxX3QgKiBwU2NyYXRjaEluLAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMzEgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMzEgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwVGFwRGVsYXkgIHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygb2Zmc2V0IHRpbWVzLgorICAgKiBAcGFyYW1baW5dICAgICBtYXhEZWxheSAgIG1heGltdW0gb2Zmc2V0IHRpbWUgc3VwcG9ydGVkLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgcGVyIGJsb2NrLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3NwYXJzZV9pbml0X3EzMSgKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTMxICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTMxX3QgKiBwQ29lZmZzLAorICBxMzFfdCAqIHBTdGF0ZSwKKyAgaW50MzJfdCAqIHBUYXBEZWxheSwKKyAgdWludDE2X3QgbWF4RGVsYXksCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRMTUgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gIFMgICAgICAgICAgICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFExNSBzcGFyc2UgRklSIHN0cnVjdHVyZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2YgaW5wdXQgZGF0YS4KKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgIHBvaW50cyB0byB0aGUgYmxvY2sgb2Ygb3V0cHV0IGRhdGEKKyAgICogQHBhcmFtW2luXSAgcFNjcmF0Y2hJbiAgIHBvaW50cyB0byBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc2l6ZSBibG9ja1NpemUuCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoT3V0ICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgICAgbnVtYmVyIG9mIGlucHV0IHNhbXBsZXMgdG8gcHJvY2VzcyBwZXIgY2FsbC4KKyAgICovCisgIHZvaWQgYXJtX2Zpcl9zcGFyc2VfcTE1KAorICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xMTUgKiBTLAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgcTE1X3QgKiBwU2NyYXRjaEluLAorICBxMzFfdCAqIHBTY3JhdGNoT3V0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBRMTUgc3BhcnNlIEZJUiBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgICAgICAgICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwVGFwRGVsYXkgIHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygb2Zmc2V0IHRpbWVzLgorICAgKiBAcGFyYW1baW5dICAgICBtYXhEZWxheSAgIG1heGltdW0gb2Zmc2V0IHRpbWUgc3VwcG9ydGVkLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgcGVyIGJsb2NrLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3NwYXJzZV9pbml0X3ExNSgKKyAgYXJtX2Zpcl9zcGFyc2VfaW5zdGFuY2VfcTE1ICogUywKKyAgdWludDE2X3QgbnVtVGFwcywKKyAgcTE1X3QgKiBwQ29lZmZzLAorICBxMTVfdCAqIHBTdGF0ZSwKKyAgaW50MzJfdCAqIHBUYXBEZWxheSwKKyAgdWludDE2X3QgbWF4RGVsYXksCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmIFByb2Nlc3NpbmcgZnVuY3Rpb24gZm9yIHRoZSBRNyBzcGFyc2UgRklSIGZpbHRlci4KKyAgICogQHBhcmFtW2luXSAgUyAgICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTcgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIGlucHV0IGRhdGEuCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgICBwb2ludHMgdG8gdGhlIGJsb2NrIG9mIG91dHB1dCBkYXRhCisgICAqIEBwYXJhbVtpbl0gIHBTY3JhdGNoSW4gICBwb2ludHMgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHNpemUgYmxvY2tTaXplLgorICAgKiBAcGFyYW1baW5dICBwU2NyYXRjaE91dCAgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiBzaXplIGJsb2NrU2l6ZS4KKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICAgIG51bWJlciBvZiBpbnB1dCBzYW1wbGVzIHRvIHByb2Nlc3MgcGVyIGNhbGwuCisgICAqLworICB2b2lkIGFybV9maXJfc3BhcnNlX3E3KAorICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xNyAqIFMsCisgIHE3X3QgKiBwU3JjLAorICBxN190ICogcERzdCwKKyAgcTdfdCAqIHBTY3JhdGNoSW4sCisgIHEzMV90ICogcFNjcmF0Y2hPdXQsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGJyaWVmICBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIFE3IHNwYXJzZSBGSVIgZmlsdGVyLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgICAgICAgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTcgc3BhcnNlIEZJUiBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtpbl0gICAgIG51bVRhcHMgICAgbnVtYmVyIG9mIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIuCisgICAqIEBwYXJhbVtpbl0gICAgIHBDb2VmZnMgICAgcG9pbnRzIHRvIHRoZSBhcnJheSBvZiBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAgKiBAcGFyYW1baW5dICAgICBwU3RhdGUgICAgIHBvaW50cyB0byB0aGUgc3RhdGUgYnVmZmVyLgorICAgKiBAcGFyYW1baW5dICAgICBwVGFwRGVsYXkgIHBvaW50cyB0byB0aGUgYXJyYXkgb2Ygb2Zmc2V0IHRpbWVzLgorICAgKiBAcGFyYW1baW5dICAgICBtYXhEZWxheSAgIG1heGltdW0gb2Zmc2V0IHRpbWUgc3VwcG9ydGVkLgorICAgKiBAcGFyYW1baW5dICAgICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgcGVyIGJsb2NrLgorICAgKi8KKyAgdm9pZCBhcm1fZmlyX3NwYXJzZV9pbml0X3E3KAorICBhcm1fZmlyX3NwYXJzZV9pbnN0YW5jZV9xNyAqIFMsCisgIHVpbnQxNl90IG51bVRhcHMsCisgIHE3X3QgKiBwQ29lZmZzLAorICBxN190ICogcFN0YXRlLAorICBpbnQzMl90ICogcFRhcERlbGF5LAorICB1aW50MTZfdCBtYXhEZWxheSwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IHNpbl9jb3MgZnVuY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIHRoZXRhICAgaW5wdXQgdmFsdWUgaW4gZGVncmVlcworICAgKiBAcGFyYW1bb3V0XSBwU2luVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBzaW5lIG91dHB1dC4KKyAgICogQHBhcmFtW291dF0gcENvc1ZhbCAgcG9pbnRzIHRvIHRoZSBwcm9jZXNzZWQgY29zIG91dHB1dC4KKyAgICovCisgIHZvaWQgYXJtX3Npbl9jb3NfZjMyKAorICBmbG9hdDMyX3QgdGhldGEsCisgIGZsb2F0MzJfdCAqIHBTaW5WYWwsCisgIGZsb2F0MzJfdCAqIHBDb3NWYWwpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTMxIHNpbl9jb3MgZnVuY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIHRoZXRhICAgIHNjYWxlZCBpbnB1dCB2YWx1ZSBpbiBkZWdyZWVzCisgICAqIEBwYXJhbVtvdXRdIHBTaW5WYWwgIHBvaW50cyB0byB0aGUgcHJvY2Vzc2VkIHNpbmUgb3V0cHV0LgorICAgKiBAcGFyYW1bb3V0XSBwQ29zVmFsICBwb2ludHMgdG8gdGhlIHByb2Nlc3NlZCBjb3NpbmUgb3V0cHV0LgorICAgKi8KKyAgdm9pZCBhcm1fc2luX2Nvc19xMzEoCisgIHEzMV90IHRoZXRhLAorICBxMzFfdCAqIHBTaW5WYWwsCisgIHEzMV90ICogcENvc1ZhbCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IGNvbmp1Z2F0ZS4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X2NvbmpfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworICAvKioKKyAgICogQGJyaWVmICBRMzEgY29tcGxleCBjb25qdWdhdGUuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9jb25qX3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IGNvbXBsZXggY29uanVnYXRlLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfY29ual9xMTUoCisgIHExNV90ICogcFNyYywKKyAgcTE1X3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXggbWFnbml0dWRlIHNxdWFyZWQKKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIHJlYWwgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X21hZ19zcXVhcmVkX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMzEgY29tcGxleCBtYWduaXR1ZGUgc3F1YXJlZAorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbWFnX3NxdWFyZWRfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMTUgY29tcGxleCBtYWduaXR1ZGUgc3F1YXJlZAorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbWFnX3NxdWFyZWRfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworIC8qKgorICAgKiBAaW5ncm91cCBncm91cENvbnRyb2xsZXIKKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBQSUQgUElEIE1vdG9yIENvbnRyb2wKKyAgICoKKyAgICogQSBQcm9wb3J0aW9uYWwgSW50ZWdyYWwgRGVyaXZhdGl2ZSAoUElEKSBjb250cm9sbGVyIGlzIGEgZ2VuZXJpYyBmZWVkYmFjayBjb250cm9sCisgICAqIGxvb3AgbWVjaGFuaXNtIHdpZGVseSB1c2VkIGluIGluZHVzdHJpYWwgY29udHJvbCBzeXN0ZW1zLgorICAgKiBBIFBJRCBjb250cm9sbGVyIGlzIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgdHlwZSBvZiBmZWVkYmFjayBjb250cm9sbGVyLgorICAgKgorICAgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgaW1wbGVtZW50cyAoUElEKSBjb250cm9sbGVycworICAgKiBmb3IgUTE1LCBRMzEsIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLiAgVGhlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgc2luZ2xlIHNhbXBsZQorICAgKiBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzaW5nbGUgcHJvY2Vzc2VkIHZhbHVlLgorICAgKiA8Y29kZT5TPC9jb2RlPiBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIFBJRCBjb250cm9sIGRhdGEgc3RydWN0dXJlLiAgPGNvZGU+aW48L2NvZGU+CisgICAqIGlzIHRoZSBpbnB1dCBzYW1wbGUgdmFsdWUuIFRoZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBvdXRwdXQgdmFsdWUuCisgICAqCisgICAqIFxwYXIgQWxnb3JpdGhtOgorICAgKiA8cHJlPgorICAgKiAgICB5W25dID0geVtuLTFdICsgQTAgKiB4W25dICsgQTEgKiB4W24tMV0gKyBBMiAqIHhbbi0yXQorICAgKiAgICBBMCA9IEtwICsgS2kgKyBLZAorICAgKiAgICBBMSA9ICgtS3AgKSAtICgyICogS2QgKQorICAgKiAgICBBMiA9IEtkICA8L3ByZT4KKyAgICoKKyAgICogXHBhcgorICAgKiB3aGVyZSBcYyBLcCBpcyBwcm9wb3J0aW9uYWwgY29uc3RhbnQsIFxjIEtpIGlzIEludGVncmFsIGNvbnN0YW50IGFuZCBcYyBLZCBpcyBEZXJpdmF0aXZlIGNvbnN0YW50CisgICAqCisgICAqIFxwYXIKKyAgICogXGltYWdlIGh0bWwgUElELmdpZiAiUHJvcG9ydGlvbmFsIEludGVncmFsIERlcml2YXRpdmUgQ29udHJvbGxlciIKKyAgICoKKyAgICogXHBhcgorICAgKiBUaGUgUElEIGNvbnRyb2xsZXIgY2FsY3VsYXRlcyBhbiAiZXJyb3IiIHZhbHVlIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICogdGhlIG1lYXN1cmVkIG91dHB1dCBhbmQgdGhlIHJlZmVyZW5jZSBpbnB1dC4KKyAgICogVGhlIGNvbnRyb2xsZXIgYXR0ZW1wdHMgdG8gbWluaW1pemUgdGhlIGVycm9yIGJ5IGFkanVzdGluZyB0aGUgcHJvY2VzcyBjb250cm9sIGlucHV0cy4KKyAgICogVGhlIHByb3BvcnRpb25hbCB2YWx1ZSBkZXRlcm1pbmVzIHRoZSByZWFjdGlvbiB0byB0aGUgY3VycmVudCBlcnJvciwKKyAgICogdGhlIGludGVncmFsIHZhbHVlIGRldGVybWluZXMgdGhlIHJlYWN0aW9uIGJhc2VkIG9uIHRoZSBzdW0gb2YgcmVjZW50IGVycm9ycywKKyAgICogYW5kIHRoZSBkZXJpdmF0aXZlIHZhbHVlIGRldGVybWluZXMgdGhlIHJlYWN0aW9uIGJhc2VkIG9uIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBlcnJvciBoYXMgYmVlbiBjaGFuZ2luZy4KKyAgICoKKyAgICogXHBhciBJbnN0YW5jZSBTdHJ1Y3R1cmUKKyAgICogVGhlIEdhaW5zIEEwLCBBMSwgQTIgYW5kIHN0YXRlIHZhcmlhYmxlcyBmb3IgYSBQSUQgY29udHJvbGxlciBhcmUgc3RvcmVkIHRvZ2V0aGVyIGluIGFuIGluc3RhbmNlIGRhdGEgc3RydWN0dXJlLgorICAgKiBBIHNlcGFyYXRlIGluc3RhbmNlIHN0cnVjdHVyZSBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggUElEIENvbnRyb2xsZXIuCisgICAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIGZvciBlYWNoIG9mIHRoZSAzIHN1cHBvcnRlZCBkYXRhIHR5cGVzLgorICAgKgorICAgKiBccGFyIFJlc2V0IEZ1bmN0aW9ucworICAgKiBUaGVyZSBpcyBhbHNvIGFuIGFzc29jaWF0ZWQgcmVzZXQgZnVuY3Rpb24gZm9yIGVhY2ggZGF0YSB0eXBlIHdoaWNoIGNsZWFycyB0aGUgc3RhdGUgYXJyYXkuCisgICAqCisgICAqIFxwYXIgSW5pdGlhbGl6YXRpb24gRnVuY3Rpb25zCisgICAqIFRoZXJlIGlzIGFsc28gYW4gYXNzb2NpYXRlZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCBkYXRhIHR5cGUuCisgICAqIFRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CisgICAqIC0gSW5pdGlhbGl6ZXMgdGhlIEdhaW5zIEEwLCBBMSwgQTIgZnJvbSBLcCxLaSwgS2QgZ2FpbnMuCisgICAqIC0gWmVyb3Mgb3V0IHRoZSB2YWx1ZXMgaW4gdGhlIHN0YXRlIGJ1ZmZlci4KKyAgICoKKyAgICogXHBhcgorICAgKiBJbnN0YW5jZSBzdHJ1Y3R1cmUgY2Fubm90IGJlIHBsYWNlZCBpbnRvIGEgY29uc3QgZGF0YSBzZWN0aW9uIGFuZCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorICAgKgorICAgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yCisgICAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBmaXhlZC1wb2ludCB2ZXJzaW9ucyBvZiB0aGUgUElEIENvbnRyb2xsZXIgZnVuY3Rpb25zLgorICAgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgb3ZlcmZsb3cgYW5kIHNhdHVyYXRpb24gYmVoYXZpb3Igb2YgdGhlIGFjY3VtdWxhdG9yIHVzZWQgaW4gZWFjaCBmdW5jdGlvbiBtdXN0IGJlIGNvbnNpZGVyZWQuCisgICAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgUElECisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgIFByb2Nlc3MgZnVuY3Rpb24gZm9yIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbC4KKyAgICogQHBhcmFtW2luLG91dF0gUyAgIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBQSUQgQ29udHJvbCBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgICAgaW4gIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzCisgICAqIEByZXR1cm4gb3V0IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIGZsb2F0MzJfdCBhcm1fcGlkX2YzMigKKyAgYXJtX3BpZF9pbnN0YW5jZV9mMzIgKiBTLAorICBmbG9hdDMyX3QgaW4pCisgIHsKKyAgICBmbG9hdDMyX3Qgb3V0OworCisgICAgLyogeVtuXSA9IHlbbi0xXSArIEEwICogeFtuXSArIEExICogeFtuLTFdICsgQTIgKiB4W24tMl0gICovCisgICAgb3V0ID0gKFMtPkEwICogaW4pICsKKyAgICAgIChTLT5BMSAqIFMtPnN0YXRlWzBdKSArIChTLT5BMiAqIFMtPnN0YXRlWzFdKSArIChTLT5zdGF0ZVsyXSk7CisKKyAgICAvKiBVcGRhdGUgc3RhdGUgKi8KKyAgICBTLT5zdGF0ZVsxXSA9IFMtPnN0YXRlWzBdOworICAgIFMtPnN0YXRlWzBdID0gaW47CisgICAgUy0+c3RhdGVbMl0gPSBvdXQ7CisKKyAgICAvKiByZXR1cm4gdG8gYXBwbGljYXRpb24gKi8KKyAgICByZXR1cm4gKG91dCk7CisKKyAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgIFByb2Nlc3MgZnVuY3Rpb24gZm9yIHRoZSBRMzEgUElEIENvbnRyb2wuCisgICAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgUTMxIFBJRCBDb250cm9sIHN0cnVjdHVyZQorICAgKiBAcGFyYW1baW5dICAgICBpbiAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MKKyAgICogQHJldHVybiBvdXQgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuCisgICAqCisgICAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4KKyAgICogXHBhcgorICAgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgNjQtYml0IGFjY3VtdWxhdG9yLgorICAgKiBUaGUgYWNjdW11bGF0b3IgaGFzIGEgMi42MiBmb3JtYXQgYW5kIG1haW50YWlucyBmdWxsIHByZWNpc2lvbiBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIHJlc3VsdHMgYnV0IHByb3ZpZGVzIG9ubHkgYSBzaW5nbGUgZ3VhcmQgYml0LgorICAgKiBUaHVzLCBpZiB0aGUgYWNjdW11bGF0b3IgcmVzdWx0IG92ZXJmbG93cyBpdCB3cmFwcyBhcm91bmQgcmF0aGVyIHRoYW4gY2xpcC4KKyAgICogSW4gb3JkZXIgdG8gYXZvaWQgb3ZlcmZsb3dzIGNvbXBsZXRlbHkgdGhlIGlucHV0IHNpZ25hbCBtdXN0IGJlIHNjYWxlZCBkb3duIGJ5IDIgYml0cyBhcyB0aGVyZSBhcmUgZm91ciBhZGRpdGlvbnMuCisgICAqIEFmdGVyIGFsbCBtdWx0aXBseS1hY2N1bXVsYXRlcyBhcmUgcGVyZm9ybWVkLCB0aGUgMi42MiBhY2N1bXVsYXRvciBpcyB0cnVuY2F0ZWQgdG8gMS4zMiBmb3JtYXQgYW5kIHRoZW4gc2F0dXJhdGVkIHRvIDEuMzEgZm9ybWF0LgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHEzMV90IGFybV9waWRfcTMxKAorICBhcm1fcGlkX2luc3RhbmNlX3EzMSAqIFMsCisgIHEzMV90IGluKQorICB7CisgICAgcTYzX3QgYWNjOworICAgIHEzMV90IG91dDsKKworICAgIC8qIGFjYyA9IEEwICogeFtuXSAgKi8KKyAgICBhY2MgPSAocTYzX3QpIFMtPkEwICogaW47CisKKyAgICAvKiBhY2MgKz0gQTEgKiB4W24tMV0gKi8KKyAgICBhY2MgKz0gKHE2M190KSBTLT5BMSAqIFMtPnN0YXRlWzBdOworCisgICAgLyogYWNjICs9IEEyICogeFtuLTJdICAqLworICAgIGFjYyArPSAocTYzX3QpIFMtPkEyICogUy0+c3RhdGVbMV07CisKKyAgICAvKiBjb252ZXJ0IG91dHB1dCB0byAxLjMxIGZvcm1hdCB0byBhZGQgeVtuLTFdICovCisgICAgb3V0ID0gKHEzMV90KSAoYWNjID4+IDMxdSk7CisKKyAgICAvKiBvdXQgKz0geVtuLTFdICovCisgICAgb3V0ICs9IFMtPnN0YXRlWzJdOworCisgICAgLyogVXBkYXRlIHN0YXRlICovCisgICAgUy0+c3RhdGVbMV0gPSBTLT5zdGF0ZVswXTsKKyAgICBTLT5zdGF0ZVswXSA9IGluOworICAgIFMtPnN0YXRlWzJdID0gb3V0OworCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCisgICAgcmV0dXJuIChvdXQpOworICB9CisKKworICAvKioKKyAgICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTE1IFBJRCBDb250cm9sLgorICAgKiBAcGFyYW1baW4sb3V0XSBTICAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBRMTUgUElEIENvbnRyb2wgc3RydWN0dXJlCisgICAqIEBwYXJhbVtpbl0gICAgIGluICBpbnB1dCBzYW1wbGUgdG8gcHJvY2VzcworICAgKiBAcmV0dXJuIG91dCBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4KKyAgICoKKyAgICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPgorICAgKiBccGFyCisgICAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIDY0LWJpdCBpbnRlcm5hbCBhY2N1bXVsYXRvci4KKyAgICogQm90aCBHYWlucyBhbmQgc3RhdGUgdmFyaWFibGVzIGFyZSByZXByZXNlbnRlZCBpbiAxLjE1IGZvcm1hdCBhbmQgbXVsdGlwbGljYXRpb25zIHlpZWxkIGEgMi4zMCByZXN1bHQuCisgICAqIFRoZSAyLjMwIGludGVybWVkaWF0ZSByZXN1bHRzIGFyZSBhY2N1bXVsYXRlZCBpbiBhIDY0LWJpdCBhY2N1bXVsYXRvciBpbiAzNC4zMCBmb3JtYXQuCisgICAqIFRoZXJlIGlzIG5vIHJpc2sgb2YgaW50ZXJuYWwgb3ZlcmZsb3cgd2l0aCB0aGlzIGFwcHJvYWNoIGFuZCB0aGUgZnVsbCBwcmVjaXNpb24gb2YgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9ucyBpcyBwcmVzZXJ2ZWQuCisgICAqIEFmdGVyIGFsbCBhZGRpdGlvbnMgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgdGhlIGFjY3VtdWxhdG9yIGlzIHRydW5jYXRlZCB0byAzNC4xNSBmb3JtYXQgYnkgZGlzY2FyZGluZyBsb3cgMTUgYml0cy4KKyAgICogTGFzdGx5LCB0aGUgYWNjdW11bGF0b3IgaXMgc2F0dXJhdGVkIHRvIHlpZWxkIGEgcmVzdWx0IGluIDEuMTUgZm9ybWF0LgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHExNV90IGFybV9waWRfcTE1KAorICBhcm1fcGlkX2luc3RhbmNlX3ExNSAqIFMsCisgIHExNV90IGluKQorICB7CisgICAgcTYzX3QgYWNjOworICAgIHExNV90IG91dDsKKworI2lmbmRlZiBBUk1fTUFUSF9DTTBfRkFNSUxZCisgICAgX19TSU1EMzJfVFlQRSAqdnN0YXRlOworCisgICAgLyogSW1wbGVtZW50YXRpb24gb2YgUElEIGNvbnRyb2xsZXIgKi8KKworICAgIC8qIGFjYyA9IEEwICogeFtuXSAgKi8KKyAgICBhY2MgPSAocTMxX3QpIF9fU01VQUQoKHVpbnQzMl90KVMtPkEwLCAodWludDMyX3QpaW4pOworCisgICAgLyogYWNjICs9IEExICogeFtuLTFdICsgQTIgKiB4W24tMl0gICovCisgICAgdnN0YXRlID0gX19TSU1EMzJfQ09OU1QoUy0+c3RhdGUpOworICAgIGFjYyA9IChxNjNfdClfX1NNTEFMRCgodWludDMyX3QpUy0+QTEsICh1aW50MzJfdCkqdnN0YXRlLCAodWludDY0X3QpYWNjKTsKKyNlbHNlCisgICAgLyogYWNjID0gQTAgKiB4W25dICAqLworICAgIGFjYyA9ICgocTMxX3QpIFMtPkEwKSAqIGluOworCisgICAgLyogYWNjICs9IEExICogeFtuLTFdICsgQTIgKiB4W24tMl0gICovCisgICAgYWNjICs9IChxMzFfdCkgUy0+QTEgKiBTLT5zdGF0ZVswXTsKKyAgICBhY2MgKz0gKHEzMV90KSBTLT5BMiAqIFMtPnN0YXRlWzFdOworI2VuZGlmCisKKyAgICAvKiBhY2MgKz0geVtuLTFdICovCisgICAgYWNjICs9IChxMzFfdCkgUy0+c3RhdGVbMl0gPDwgMTU7CisKKyAgICAvKiBzYXR1cmF0ZSB0aGUgb3V0cHV0ICovCisgICAgb3V0ID0gKHExNV90KSAoX19TU0FUKChhY2MgPj4gMTUpLCAxNikpOworCisgICAgLyogVXBkYXRlIHN0YXRlICovCisgICAgUy0+c3RhdGVbMV0gPSBTLT5zdGF0ZVswXTsKKyAgICBTLT5zdGF0ZVswXSA9IGluOworICAgIFMtPnN0YXRlWzJdID0gb3V0OworCisgICAgLyogcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCisgICAgcmV0dXJuIChvdXQpOworICB9CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBQSUQgZ3JvdXAKKyAgICovCisKKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IG1hdHJpeCBpbnZlcnNlLgorICAgKiBAcGFyYW1baW5dICBzcmMgICBwb2ludHMgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBpbnB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKiBAcGFyYW1bb3V0XSBkc3QgICBwb2ludHMgdG8gdGhlIGluc3RhbmNlIG9mIHRoZSBvdXRwdXQgZmxvYXRpbmctcG9pbnQgbWF0cml4IHN0cnVjdHVyZS4KKyAgICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TSVpFX01JU01BVENILCBpZiB0aGUgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guCisgICAqIElmIHRoZSBpbnB1dCBtYXRyaXggaXMgc2luZ3VsYXIgKGRvZXMgbm90IGhhdmUgYW4gaW52ZXJzZSksIHRoZW4gdGhlIGFsZ29yaXRobSB0ZXJtaW5hdGVzIGFuZCByZXR1cm5zIGVycm9yIHN0YXR1cyBBUk1fTUFUSF9TSU5HVUxBUi4KKyAgICovCisgIGFybV9zdGF0dXMgYXJtX21hdF9pbnZlcnNlX2YzMigKKyAgY29uc3QgYXJtX21hdHJpeF9pbnN0YW5jZV9mMzIgKiBzcmMsCisgIGFybV9tYXRyaXhfaW5zdGFuY2VfZjMyICogZHN0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmxvYXRpbmctcG9pbnQgbWF0cml4IGludmVyc2UuCisgICAqIEBwYXJhbVtpbl0gIHNyYyAgIHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIGlucHV0IGZsb2F0aW5nLXBvaW50IG1hdHJpeCBzdHJ1Y3R1cmUuCisgICAqIEBwYXJhbVtvdXRdIGRzdCAgIHBvaW50cyB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIG91dHB1dCBmbG9hdGluZy1wb2ludCBtYXRyaXggc3RydWN0dXJlLgorICAgKiBAcmV0dXJuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NJWkVfTUlTTUFUQ0gsIGlmIHRoZSBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaC4KKyAgICogSWYgdGhlIGlucHV0IG1hdHJpeCBpcyBzaW5ndWxhciAoZG9lcyBub3QgaGF2ZSBhbiBpbnZlcnNlKSwgdGhlbiB0aGUgYWxnb3JpdGhtIHRlcm1pbmF0ZXMgYW5kIHJldHVybnMgZXJyb3Igc3RhdHVzIEFSTV9NQVRIX1NJTkdVTEFSLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fbWF0X2ludmVyc2VfZjY0KAorICBjb25zdCBhcm1fbWF0cml4X2luc3RhbmNlX2Y2NCAqIHNyYywKKyAgYXJtX21hdHJpeF9pbnN0YW5jZV9mNjQgKiBkc3QpOworCisKKworICAvKioKKyAgICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgY2xhcmtlIFZlY3RvciBDbGFya2UgVHJhbnNmb3JtCisgICAqIEZvcndhcmQgQ2xhcmtlIHRyYW5zZm9ybSBjb252ZXJ0cyB0aGUgaW5zdGFudGFuZW91cyBzdGF0b3IgcGhhc2VzIGludG8gYSB0d28tY29vcmRpbmF0ZSB0aW1lIGludmFyaWFudCB2ZWN0b3IuCisgICAqIEdlbmVyYWxseSB0aGUgQ2xhcmtlIHRyYW5zZm9ybSB1c2VzIHRocmVlLXBoYXNlIGN1cnJlbnRzIDxjb2RlPklhLCBJYiBhbmQgSWM8L2NvZGU+IHRvIGNhbGN1bGF0ZSBjdXJyZW50cworICAgKiBpbiB0aGUgdHdvLXBoYXNlIG9ydGhvZ29uYWwgc3RhdG9yIGF4aXMgPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+SWJldGE8L2NvZGU+LgorICAgKiBXaGVuIDxjb2RlPklhbHBoYTwvY29kZT4gaXMgc3VwZXJwb3NlZCB3aXRoIDxjb2RlPklhPC9jb2RlPiBhcyBzaG93biBpbiB0aGUgZmlndXJlIGJlbG93CisgICAqIFxpbWFnZSBodG1sIGNsYXJrZS5naWYgU3RhdG9yIGN1cnJlbnQgc3BhY2UgdmVjdG9yIGFuZCBpdHMgY29tcG9uZW50cyBpbiAoYSxiKS4KKyAgICogYW5kIDxjb2RlPklhICsgSWIgKyBJYyA9IDA8L2NvZGU+LCBpbiB0aGlzIGNvbmRpdGlvbiA8Y29kZT5JYWxwaGE8L2NvZGU+IGFuZCA8Y29kZT5JYmV0YTwvY29kZT4KKyAgICogY2FuIGJlIGNhbGN1bGF0ZWQgdXNpbmcgb25seSA8Y29kZT5JYTwvY29kZT4gYW5kIDxjb2RlPkliPC9jb2RlPi4KKyAgICoKKyAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uIGEgc2luZ2xlIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2Nlc3NlZCBvdXRwdXQuCisgICAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLgorICAgKiBccGFyIEFsZ29yaXRobQorICAgKiBcaW1hZ2UgaHRtbCBjbGFya2VGb3JtdWxhLmdpZgorICAgKiB3aGVyZSA8Y29kZT5JYTwvY29kZT4gYW5kIDxjb2RlPkliPC9jb2RlPiBhcmUgdGhlIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcyBhbmQKKyAgICogPGNvZGU+cElhbHBoYTwvY29kZT4gYW5kIDxjb2RlPnBJYmV0YTwvY29kZT4gYXJlIHRoZSB0d28gY29vcmRpbmF0ZXMgb2YgdGltZSBpbnZhcmlhbnQgdmVjdG9yLgorICAgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yCisgICAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgQ2xhcmtlIHRyYW5zZm9ybS4KKyAgICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIG11c3QgYmUgY29uc2lkZXJlZC4KKyAgICogUmVmZXIgdG8gdGhlIGZ1bmN0aW9uIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYmVsb3cgZm9yIHVzYWdlIGd1aWRlbGluZXMuCisgICAqLworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBjbGFya2UKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgQ2xhcmtlIHRyYW5zZm9ybQorICAgKiBAcGFyYW1baW5dICBJYSAgICAgICBpbnB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+CisgICAqIEBwYXJhbVtpbl0gIEliICAgICAgIGlucHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YjwvY29kZT4KKyAgICogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQorICAgKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGEKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jbGFya2VfZjMyKAorICBmbG9hdDMyX3QgSWEsCisgIGZsb2F0MzJfdCBJYiwKKyAgZmxvYXQzMl90ICogcElhbHBoYSwKKyAgZmxvYXQzMl90ICogcEliZXRhKQorICB7CisgICAgLyogQ2FsY3VsYXRlIHBJYWxwaGEgdXNpbmcgdGhlIGVxdWF0aW9uLCBwSWFscGhhID0gSWEgKi8KKyAgICAqcElhbHBoYSA9IElhOworCisgICAgLyogQ2FsY3VsYXRlIHBJYmV0YSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYmV0YSA9ICgxL3NxcnQoMykpICogSWEgKyAoMi9zcXJ0KDMpKSAqIEliICovCisgICAgKnBJYmV0YSA9ICgoZmxvYXQzMl90KSAwLjU3NzM1MDI2OTE5ICogSWEgKyAoZmxvYXQzMl90KSAxLjE1NDcwMDUzODM4ICogSWIpOworICB9CisKKworICAvKioKKyAgICogQGJyaWVmICBDbGFya2UgdHJhbnNmb3JtIGZvciBRMzEgdmVyc2lvbgorICAgKiBAcGFyYW1baW5dICBJYSAgICAgICBpbnB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+CisgICAqIEBwYXJhbVtpbl0gIEliICAgICAgIGlucHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YjwvY29kZT4KKyAgICogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQorICAgKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGEKKyAgICoKKyAgICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPgorICAgKiBccGFyCisgICAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhbiBpbnRlcm5hbCAzMi1iaXQgYWNjdW11bGF0b3IuCisgICAqIFRoZSBhY2N1bXVsYXRvciBtYWludGFpbnMgMS4zMSBmb3JtYXQgYnkgdHJ1bmNhdGluZyBsb3dlciAzMSBiaXRzIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gaW4gMi42MiBmb3JtYXQuCisgICAqIFRoZXJlIGlzIHNhdHVyYXRpb24gb24gdGhlIGFkZGl0aW9uLCBoZW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NsYXJrZV9xMzEoCisgIHEzMV90IElhLAorICBxMzFfdCBJYiwKKyAgcTMxX3QgKiBwSWFscGhhLAorICBxMzFfdCAqIHBJYmV0YSkKKyAgeworICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworCisgICAgLyogQ2FsY3VsYXRpbmcgcElhbHBoYSBmcm9tIElhIGJ5IGVxdWF0aW9uIHBJYWxwaGEgPSBJYSAqLworICAgICpwSWFscGhhID0gSWE7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5ICgxLyhzcXJ0KDMpKSAqIElhKSAqLworICAgIHByb2R1Y3QxID0gKHEzMV90KSAoKChxNjNfdCkgSWEgKiAweDI0RjM0RThCKSA+PiAzMCk7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5ICgyL3NxcnQoMykgKiBJYikgKi8KKyAgICBwcm9kdWN0MiA9IChxMzFfdCkgKCgocTYzX3QpIEliICogMHg0OUU2OUQxNikgPj4gMzApOworCisgICAgLyogcEliZXRhIGlzIGNhbGN1bGF0ZWQgYnkgYWRkaW5nIHRoZSBpbnRlcm1lZGlhdGUgcHJvZHVjdHMgKi8KKyAgICAqcEliZXRhID0gX19RQUREKHByb2R1Y3QxLCBwcm9kdWN0Mik7CisgIH0KKworICAvKioKKyAgICogQH0gZW5kIG9mIGNsYXJrZSBncm91cAorICAgKi8KKworICAvKioKKyAgICogQGJyaWVmICBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIFE3IHZlY3RvciB0byBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX3E3X3RvX3EzMSgKKyAgcTdfdCAqIHBTcmMsCisgIHEzMV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisKKyAgLyoqCisgICAqIEBpbmdyb3VwIGdyb3VwQ29udHJvbGxlcgorICAgKi8KKworICAvKioKKyAgICogQGRlZmdyb3VwIGludl9jbGFya2UgVmVjdG9yIEludmVyc2UgQ2xhcmtlIFRyYW5zZm9ybQorICAgKiBJbnZlcnNlIENsYXJrZSB0cmFuc2Zvcm0gY29udmVydHMgdGhlIHR3by1jb29yZGluYXRlIHRpbWUgaW52YXJpYW50IHZlY3RvciBpbnRvIGluc3RhbnRhbmVvdXMgc3RhdG9yIHBoYXNlcy4KKyAgICoKKyAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uIGEgc2luZ2xlIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2Nlc3NlZCBvdXRwdXQuCisgICAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLgorICAgKiBccGFyIEFsZ29yaXRobQorICAgKiBcaW1hZ2UgaHRtbCBjbGFya2VJbnZGb3JtdWxhLmdpZgorICAgKiB3aGVyZSA8Y29kZT5wSWE8L2NvZGU+IGFuZCA8Y29kZT5wSWI8L2NvZGU+IGFyZSB0aGUgaW5zdGFudGFuZW91cyBzdGF0b3IgcGhhc2VzIGFuZAorICAgKiA8Y29kZT5JYWxwaGE8L2NvZGU+IGFuZCA8Y29kZT5JYmV0YTwvY29kZT4gYXJlIHRoZSB0d28gY29vcmRpbmF0ZXMgb2YgdGltZSBpbnZhcmlhbnQgdmVjdG9yLgorICAgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yCisgICAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgQ2xhcmtlIHRyYW5zZm9ybS4KKyAgICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIG11c3QgYmUgY29uc2lkZXJlZC4KKyAgICogUmVmZXIgdG8gdGhlIGZ1bmN0aW9uIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYmVsb3cgZm9yIHVzYWdlIGd1aWRlbGluZXMuCisgICAqLworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBpbnZfY2xhcmtlCisgICAqIEB7CisgICAqLworCisgICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBJbnZlcnNlIENsYXJrZSB0cmFuc2Zvcm0KKyAgICogQHBhcmFtW2luXSAgSWFscGhhICBpbnB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQorICAgKiBAcGFyYW1baW5dICBJYmV0YSAgIGlucHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGEKKyAgICogQHBhcmFtW291dF0gcElhICAgICBwb2ludHMgdG8gb3V0cHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YTwvY29kZT4KKyAgICogQHBhcmFtW291dF0gcEliICAgICBwb2ludHMgdG8gb3V0cHV0IHRocmVlLXBoYXNlIGNvb3JkaW5hdGUgPGNvZGU+YjwvY29kZT4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfY2xhcmtlX2YzMigKKyAgZmxvYXQzMl90IElhbHBoYSwKKyAgZmxvYXQzMl90IEliZXRhLAorICBmbG9hdDMyX3QgKiBwSWEsCisgIGZsb2F0MzJfdCAqIHBJYikKKyAgeworICAgIC8qIENhbGN1bGF0aW5nIHBJYSBmcm9tIElhbHBoYSBieSBlcXVhdGlvbiBwSWEgPSBJYWxwaGEgKi8KKyAgICAqcElhID0gSWFscGhhOworCisgICAgLyogQ2FsY3VsYXRpbmcgcEliIGZyb20gSWFscGhhIGFuZCBJYmV0YSBieSBlcXVhdGlvbiBwSWIgPSAtKDEvMikgKiBJYWxwaGEgKyAoc3FydCgzKS8yKSAqIEliZXRhICovCisgICAgKnBJYiA9IC0wLjVmICogSWFscGhhICsgMC44NjYwMjU0MDM5ZiAqIEliZXRhOworICB9CisKKworICAvKioKKyAgICogQGJyaWVmICBJbnZlcnNlIENsYXJrZSB0cmFuc2Zvcm0gZm9yIFEzMSB2ZXJzaW9uCisgICAqIEBwYXJhbVtpbl0gIElhbHBoYSAgaW5wdXQgdHdvLXBoYXNlIG9ydGhvZ29uYWwgdmVjdG9yIGF4aXMgYWxwaGEKKyAgICogQHBhcmFtW2luXSAgSWJldGEgICBpbnB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBiZXRhCisgICAqIEBwYXJhbVtvdXRdIHBJYSAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmE8L2NvZGU+CisgICAqIEBwYXJhbVtvdXRdIHBJYiAgICAgcG9pbnRzIHRvIG91dHB1dCB0aHJlZS1waGFzZSBjb29yZGluYXRlIDxjb2RlPmI8L2NvZGU+CisgICAqCisgICAqIDxiPlNjYWxpbmcgYW5kIE92ZXJmbG93IEJlaGF2aW9yOjwvYj4KKyAgICogXHBhcgorICAgKiBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYW4gaW50ZXJuYWwgMzItYml0IGFjY3VtdWxhdG9yLgorICAgKiBUaGUgYWNjdW11bGF0b3IgbWFpbnRhaW5zIDEuMzEgZm9ybWF0IGJ5IHRydW5jYXRpbmcgbG93ZXIgMzEgYml0cyBvZiB0aGUgaW50ZXJtZWRpYXRlIG11bHRpcGxpY2F0aW9uIGluIDIuNjIgZm9ybWF0LgorICAgKiBUaGVyZSBpcyBzYXR1cmF0aW9uIG9uIHRoZSBzdWJ0cmFjdGlvbiwgaGVuY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfY2xhcmtlX3EzMSgKKyAgcTMxX3QgSWFscGhhLAorICBxMzFfdCBJYmV0YSwKKyAgcTMxX3QgKiBwSWEsCisgIHEzMV90ICogcEliKQorICB7CisgICAgcTMxX3QgcHJvZHVjdDEsIHByb2R1Y3QyOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovCisKKyAgICAvKiBDYWxjdWxhdGluZyBwSWEgZnJvbSBJYWxwaGEgYnkgZXF1YXRpb24gcElhID0gSWFscGhhICovCisgICAgKnBJYSA9IElhbHBoYTsKKworICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKDEvKDIqc3FydCgzKSkgKiBJYSkgKi8KKyAgICBwcm9kdWN0MSA9IChxMzFfdCkgKCgocTYzX3QpIChJYWxwaGEpICogKDB4NDAwMDAwMDApKSA+PiAzMSk7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5ICgxL3NxcnQoMykgKiBwSWIpICovCisgICAgcHJvZHVjdDIgPSAocTMxX3QpICgoKHE2M190KSAoSWJldGEpICogKDB4NkVEOUVCQTEpKSA+PiAzMSk7CisKKyAgICAvKiBwSWIgaXMgY2FsY3VsYXRlZCBieSBzdWJ0cmFjdGluZyB0aGUgcHJvZHVjdHMgKi8KKyAgICAqcEliID0gX19RU1VCKHByb2R1Y3QyLCBwcm9kdWN0MSk7CisgIH0KKworICAvKioKKyAgICogQH0gZW5kIG9mIGludl9jbGFya2UgZ3JvdXAKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRNyB2ZWN0b3IgdG8gUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xN190b19xMTUoCisgIHE3X3QgKiBwU3JjLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworCisgIC8qKgorICAgKiBAaW5ncm91cCBncm91cENvbnRyb2xsZXIKKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBwYXJrIFZlY3RvciBQYXJrIFRyYW5zZm9ybQorICAgKgorICAgKiBGb3J3YXJkIFBhcmsgdHJhbnNmb3JtIGNvbnZlcnRzIHRoZSBpbnB1dCB0d28tY29vcmRpbmF0ZSB2ZWN0b3IgdG8gZmx1eCBhbmQgdG9ycXVlIGNvbXBvbmVudHMuCisgICAqIFRoZSBQYXJrIHRyYW5zZm9ybSBjYW4gYmUgdXNlZCB0byByZWFsaXplIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgdGhlIDxjb2RlPkliZXRhPC9jb2RlPiBjdXJyZW50cworICAgKiBmcm9tIHRoZSBzdGF0aW9uYXJ5IHRvIHRoZSBtb3ZpbmcgcmVmZXJlbmNlIGZyYW1lIGFuZCBjb250cm9sIHRoZSBzcGF0aWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisgICAqIHRoZSBzdGF0b3IgdmVjdG9yIGN1cnJlbnQgYW5kIHJvdG9yIGZsdXggdmVjdG9yLgorICAgKiBJZiB3ZSBjb25zaWRlciB0aGUgZCBheGlzIGFsaWduZWQgd2l0aCB0aGUgcm90b3IgZmx1eCwgdGhlIGRpYWdyYW0gYmVsb3cgc2hvd3MgdGhlCisgICAqIGN1cnJlbnQgdmVjdG9yIGFuZCB0aGUgcmVsYXRpb25zaGlwIGZyb20gdGhlIHR3byByZWZlcmVuY2UgZnJhbWVzOgorICAgKiBcaW1hZ2UgaHRtbCBwYXJrLmdpZiAiU3RhdG9yIGN1cnJlbnQgc3BhY2UgdmVjdG9yIGFuZCBpdHMgY29tcG9uZW50IGluIChhLGIpIGFuZCBpbiB0aGUgZCxxIHJvdGF0aW5nIHJlZmVyZW5jZSBmcmFtZSIKKyAgICoKKyAgICogVGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uIGEgc2luZ2xlIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb2Nlc3NlZCBvdXRwdXQuCisgICAqIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgUTMxIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLgorICAgKiBccGFyIEFsZ29yaXRobQorICAgKiBcaW1hZ2UgaHRtbCBwYXJrRm9ybXVsYS5naWYKKyAgICogd2hlcmUgPGNvZGU+SWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+SWJldGE8L2NvZGU+IGFyZSB0aGUgc3RhdG9yIHZlY3RvciBjb21wb25lbnRzLAorICAgKiA8Y29kZT5wSWQ8L2NvZGU+IGFuZCA8Y29kZT5wSXE8L2NvZGU+IGFyZSByb3RvciB2ZWN0b3IgY29tcG9uZW50cyBhbmQgPGNvZGU+Y29zVmFsPC9jb2RlPiBhbmQgPGNvZGU+c2luVmFsPC9jb2RlPiBhcmUgdGhlCisgICAqIGNvc2luZSBhbmQgc2luZSB2YWx1ZXMgb2YgdGhldGEgKHJvdG9yIGZsdXggcG9zaXRpb24pLgorICAgKiBccGFyIEZpeGVkLVBvaW50IEJlaGF2aW9yCisgICAqIENhcmUgbXVzdCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoZSBRMzEgdmVyc2lvbiBvZiB0aGUgUGFyayB0cmFuc2Zvcm0uCisgICAqIEluIHBhcnRpY3VsYXIsIHRoZSBvdmVyZmxvdyBhbmQgc2F0dXJhdGlvbiBiZWhhdmlvciBvZiB0aGUgYWNjdW11bGF0b3IgdXNlZCBtdXN0IGJlIGNvbnNpZGVyZWQuCisgICAqIFJlZmVyIHRvIHRoZSBmdW5jdGlvbiBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGJlbG93IGZvciB1c2FnZSBndWlkZWxpbmVzLgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcGFyaworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIEZsb2F0aW5nLXBvaW50IFBhcmsgdHJhbnNmb3JtCisgICAqIEBwYXJhbVtpbl0gIElhbHBoYSAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGFscGhhCisgICAqIEBwYXJhbVtpbl0gIEliZXRhICAgaW5wdXQgdHdvLXBoYXNlIHZlY3RvciBjb29yZGluYXRlIGJldGEKKyAgICogQHBhcmFtW291dF0gcElkICAgICBwb2ludHMgdG8gb3V0cHV0ICAgcm90b3IgcmVmZXJlbmNlIGZyYW1lIGQKKyAgICogQHBhcmFtW291dF0gcElxICAgICBwb2ludHMgdG8gb3V0cHV0ICAgcm90b3IgcmVmZXJlbmNlIGZyYW1lIHEKKyAgICogQHBhcmFtW2luXSAgc2luVmFsICBzaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhCisgICAqIEBwYXJhbVtpbl0gIGNvc1ZhbCAgY29zaW5lIHZhbHVlIG9mIHJvdGF0aW9uIGFuZ2xlIHRoZXRhCisgICAqCisgICAqIFRoZSBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBmb3J3YXJkIFBhcmsgdHJhbnNmb3JtLgorICAgKgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX3BhcmtfZjMyKAorICBmbG9hdDMyX3QgSWFscGhhLAorICBmbG9hdDMyX3QgSWJldGEsCisgIGZsb2F0MzJfdCAqIHBJZCwKKyAgZmxvYXQzMl90ICogcElxLAorICBmbG9hdDMyX3Qgc2luVmFsLAorICBmbG9hdDMyX3QgY29zVmFsKQorICB7CisgICAgLyogQ2FsY3VsYXRlIHBJZCB1c2luZyB0aGUgZXF1YXRpb24sIHBJZCA9IElhbHBoYSAqIGNvc1ZhbCArIEliZXRhICogc2luVmFsICovCisgICAgKnBJZCA9IElhbHBoYSAqIGNvc1ZhbCArIEliZXRhICogc2luVmFsOworCisgICAgLyogQ2FsY3VsYXRlIHBJcSB1c2luZyB0aGUgZXF1YXRpb24sIHBJcSA9IC0gSWFscGhhICogc2luVmFsICsgSWJldGEgKiBjb3NWYWwgKi8KKyAgICAqcElxID0gLUlhbHBoYSAqIHNpblZhbCArIEliZXRhICogY29zVmFsOworICB9CisKKworICAvKioKKyAgICogQGJyaWVmICBQYXJrIHRyYW5zZm9ybSBmb3IgUTMxIHZlcnNpb24KKyAgICogQHBhcmFtW2luXSAgSWFscGhhICBpbnB1dCB0d28tcGhhc2UgdmVjdG9yIGNvb3JkaW5hdGUgYWxwaGEKKyAgICogQHBhcmFtW2luXSAgSWJldGEgICBpbnB1dCB0d28tcGhhc2UgdmVjdG9yIGNvb3JkaW5hdGUgYmV0YQorICAgKiBAcGFyYW1bb3V0XSBwSWQgICAgIHBvaW50cyB0byBvdXRwdXQgcm90b3IgcmVmZXJlbmNlIGZyYW1lIGQKKyAgICogQHBhcmFtW291dF0gcElxICAgICBwb2ludHMgdG8gb3V0cHV0IHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBxCisgICAqIEBwYXJhbVtpbl0gIHNpblZhbCAgc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQorICAgKiBAcGFyYW1baW5dICBjb3NWYWwgIGNvc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQorICAgKgorICAgKiA8Yj5TY2FsaW5nIGFuZCBPdmVyZmxvdyBCZWhhdmlvcjo8L2I+CisgICAqIFxwYXIKKyAgICogVGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGFuIGludGVybmFsIDMyLWJpdCBhY2N1bXVsYXRvci4KKyAgICogVGhlIGFjY3VtdWxhdG9yIG1haW50YWlucyAxLjMxIGZvcm1hdCBieSB0cnVuY2F0aW5nIGxvd2VyIDMxIGJpdHMgb2YgdGhlIGludGVybWVkaWF0ZSBtdWx0aXBsaWNhdGlvbiBpbiAyLjYyIGZvcm1hdC4KKyAgICogVGhlcmUgaXMgc2F0dXJhdGlvbiBvbiB0aGUgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uLCBoZW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX3BhcmtfcTMxKAorICBxMzFfdCBJYWxwaGEsCisgIHEzMV90IEliZXRhLAorICBxMzFfdCAqIHBJZCwKKyAgcTMxX3QgKiBwSXEsCisgIHEzMV90IHNpblZhbCwKKyAgcTMxX3QgY29zVmFsKQorICB7CisgICAgcTMxX3QgcHJvZHVjdDEsIHByb2R1Y3QyOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovCisgICAgcTMxX3QgcHJvZHVjdDMsIHByb2R1Y3Q0OyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IHZhcmlhYmxlcyB1c2VkIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzICovCisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYWxwaGEgKiBjb3NWYWwpICovCisgICAgcHJvZHVjdDEgPSAocTMxX3QpICgoKHE2M190KSAoSWFscGhhKSAqIChjb3NWYWwpKSA+PiAzMSk7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYmV0YSAqIHNpblZhbCkgKi8KKyAgICBwcm9kdWN0MiA9IChxMzFfdCkgKCgocTYzX3QpIChJYmV0YSkgKiAoc2luVmFsKSkgPj4gMzEpOworCisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYWxwaGEgKiBzaW5WYWwpICovCisgICAgcHJvZHVjdDMgPSAocTMxX3QpICgoKHE2M190KSAoSWFscGhhKSAqIChzaW5WYWwpKSA+PiAzMSk7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJYmV0YSAqIGNvc1ZhbCkgKi8KKyAgICBwcm9kdWN0NCA9IChxMzFfdCkgKCgocTYzX3QpIChJYmV0YSkgKiAoY29zVmFsKSkgPj4gMzEpOworCisgICAgLyogQ2FsY3VsYXRlIHBJZCBieSBhZGRpbmcgdGhlIHR3byBpbnRlcm1lZGlhdGUgcHJvZHVjdHMgMSBhbmQgMiAqLworICAgICpwSWQgPSBfX1FBREQocHJvZHVjdDEsIHByb2R1Y3QyKTsKKworICAgIC8qIENhbGN1bGF0ZSBwSXEgYnkgc3VidHJhY3RpbmcgdGhlIHR3byBpbnRlcm1lZGlhdGUgcHJvZHVjdHMgMyBmcm9tIDQgKi8KKyAgICAqcElxID0gX19RU1VCKHByb2R1Y3Q0LCBwcm9kdWN0Myk7CisgIH0KKworICAvKioKKyAgICogQH0gZW5kIG9mIHBhcmsgZ3JvdXAKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRNyB2ZWN0b3IgdG8gZmxvYXRpbmctcG9pbnQgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xN190b19mbG9hdCgKKyAgcTdfdCAqIHBTcmMsCisgIGZsb2F0MzJfdCAqIHBEc3QsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSk7CisKKworICAvKioKKyAgICogQGluZ3JvdXAgZ3JvdXBDb250cm9sbGVyCisgICAqLworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgaW52X3BhcmsgVmVjdG9yIEludmVyc2UgUGFyayB0cmFuc2Zvcm0KKyAgICogSW52ZXJzZSBQYXJrIHRyYW5zZm9ybSBjb252ZXJ0cyB0aGUgaW5wdXQgZmx1eCBhbmQgdG9ycXVlIGNvbXBvbmVudHMgdG8gdHdvLWNvb3JkaW5hdGUgdmVjdG9yLgorICAgKgorICAgKiBUaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gYSBzaW5nbGUgc2FtcGxlIG9mIGRhdGEgYW5kIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJvY2Vzc2VkIG91dHB1dC4KKyAgICogVGhlIGxpYnJhcnkgcHJvdmlkZXMgc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBRMzEgYW5kIGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMuCisgICAqIFxwYXIgQWxnb3JpdGhtCisgICAqIFxpbWFnZSBodG1sIHBhcmtJbnZGb3JtdWxhLmdpZgorICAgKiB3aGVyZSA8Y29kZT5wSWFscGhhPC9jb2RlPiBhbmQgPGNvZGU+cEliZXRhPC9jb2RlPiBhcmUgdGhlIHN0YXRvciB2ZWN0b3IgY29tcG9uZW50cywKKyAgICogPGNvZGU+SWQ8L2NvZGU+IGFuZCA8Y29kZT5JcTwvY29kZT4gYXJlIHJvdG9yIHZlY3RvciBjb21wb25lbnRzIGFuZCA8Y29kZT5jb3NWYWw8L2NvZGU+IGFuZCA8Y29kZT5zaW5WYWw8L2NvZGU+IGFyZSB0aGUKKyAgICogY29zaW5lIGFuZCBzaW5lIHZhbHVlcyBvZiB0aGV0YSAocm90b3IgZmx1eCBwb3NpdGlvbikuCisgICAqIFxwYXIgRml4ZWQtUG9pbnQgQmVoYXZpb3IKKyAgICogQ2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gdXNpbmcgdGhlIFEzMSB2ZXJzaW9uIG9mIHRoZSBQYXJrIHRyYW5zZm9ybS4KKyAgICogSW4gcGFydGljdWxhciwgdGhlIG92ZXJmbG93IGFuZCBzYXR1cmF0aW9uIGJlaGF2aW9yIG9mIHRoZSBhY2N1bXVsYXRvciB1c2VkIG11c3QgYmUgY29uc2lkZXJlZC4KKyAgICogUmVmZXIgdG8gdGhlIGZ1bmN0aW9uIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYmVsb3cgZm9yIHVzYWdlIGd1aWRlbGluZXMuCisgICAqLworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBpbnZfcGFyaworICAgKiBAeworICAgKi8KKworICAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgSW52ZXJzZSBQYXJrIHRyYW5zZm9ybQorICAgKiBAcGFyYW1baW5dICBJZCAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkCisgICAqIEBwYXJhbVtpbl0gIElxICAgICAgIGlucHV0IGNvb3JkaW5hdGUgb2Ygcm90b3IgcmVmZXJlbmNlIGZyYW1lIHEKKyAgICogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQorICAgKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGEKKyAgICogQHBhcmFtW2luXSAgc2luVmFsICAgc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQorICAgKiBAcGFyYW1baW5dICBjb3NWYWwgICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGEKKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9pbnZfcGFya19mMzIoCisgIGZsb2F0MzJfdCBJZCwKKyAgZmxvYXQzMl90IElxLAorICBmbG9hdDMyX3QgKiBwSWFscGhhLAorICBmbG9hdDMyX3QgKiBwSWJldGEsCisgIGZsb2F0MzJfdCBzaW5WYWwsCisgIGZsb2F0MzJfdCBjb3NWYWwpCisgIHsKKyAgICAvKiBDYWxjdWxhdGUgcElhbHBoYSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYWxwaGEgPSBJZCAqIGNvc1ZhbCAtIElxICogc2luVmFsICovCisgICAgKnBJYWxwaGEgPSBJZCAqIGNvc1ZhbCAtIElxICogc2luVmFsOworCisgICAgLyogQ2FsY3VsYXRlIHBJYmV0YSB1c2luZyB0aGUgZXF1YXRpb24sIHBJYmV0YSA9IElkICogc2luVmFsICsgSXEgKiBjb3NWYWwgKi8KKyAgICAqcEliZXRhID0gSWQgKiBzaW5WYWwgKyBJcSAqIGNvc1ZhbDsKKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiAgSW52ZXJzZSBQYXJrIHRyYW5zZm9ybSBmb3IgICBRMzEgdmVyc2lvbgorICAgKiBAcGFyYW1baW5dICBJZCAgICAgICBpbnB1dCBjb29yZGluYXRlIG9mIHJvdG9yIHJlZmVyZW5jZSBmcmFtZSBkCisgICAqIEBwYXJhbVtpbl0gIElxICAgICAgIGlucHV0IGNvb3JkaW5hdGUgb2Ygcm90b3IgcmVmZXJlbmNlIGZyYW1lIHEKKyAgICogQHBhcmFtW291dF0gcElhbHBoYSAgcG9pbnRzIHRvIG91dHB1dCB0d28tcGhhc2Ugb3J0aG9nb25hbCB2ZWN0b3IgYXhpcyBhbHBoYQorICAgKiBAcGFyYW1bb3V0XSBwSWJldGEgICBwb2ludHMgdG8gb3V0cHV0IHR3by1waGFzZSBvcnRob2dvbmFsIHZlY3RvciBheGlzIGJldGEKKyAgICogQHBhcmFtW2luXSAgc2luVmFsICAgc2luZSB2YWx1ZSBvZiByb3RhdGlvbiBhbmdsZSB0aGV0YQorICAgKiBAcGFyYW1baW5dICBjb3NWYWwgICBjb3NpbmUgdmFsdWUgb2Ygcm90YXRpb24gYW5nbGUgdGhldGEKKyAgICoKKyAgICogPGI+U2NhbGluZyBhbmQgT3ZlcmZsb3cgQmVoYXZpb3I6PC9iPgorICAgKiBccGFyCisgICAqIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhbiBpbnRlcm5hbCAzMi1iaXQgYWNjdW11bGF0b3IuCisgICAqIFRoZSBhY2N1bXVsYXRvciBtYWludGFpbnMgMS4zMSBmb3JtYXQgYnkgdHJ1bmNhdGluZyBsb3dlciAzMSBiaXRzIG9mIHRoZSBpbnRlcm1lZGlhdGUgbXVsdGlwbGljYXRpb24gaW4gMi42MiBmb3JtYXQuCisgICAqIFRoZXJlIGlzIHNhdHVyYXRpb24gb24gdGhlIGFkZGl0aW9uLCBoZW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2ludl9wYXJrX3EzMSgKKyAgcTMxX3QgSWQsCisgIHEzMV90IElxLAorICBxMzFfdCAqIHBJYWxwaGEsCisgIHEzMV90ICogcEliZXRhLAorICBxMzFfdCBzaW5WYWwsCisgIHEzMV90IGNvc1ZhbCkKKyAgeworICAgIHEzMV90IHByb2R1Y3QxLCBwcm9kdWN0MjsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworICAgIHEzMV90IHByb2R1Y3QzLCBwcm9kdWN0NDsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCB0byBzdG9yZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworCisgICAgLyogSW50ZXJtZWRpYXRlIHByb2R1Y3QgaXMgY2FsY3VsYXRlZCBieSAoSWQgKiBjb3NWYWwpICovCisgICAgcHJvZHVjdDEgPSAocTMxX3QpICgoKHE2M190KSAoSWQpICogKGNvc1ZhbCkpID4+IDMxKTsKKworICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElxICogc2luVmFsKSAqLworICAgIHByb2R1Y3QyID0gKHEzMV90KSAoKChxNjNfdCkgKElxKSAqIChzaW5WYWwpKSA+PiAzMSk7CisKKworICAgIC8qIEludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgYnkgKElkICogc2luVmFsKSAqLworICAgIHByb2R1Y3QzID0gKHEzMV90KSAoKChxNjNfdCkgKElkKSAqIChzaW5WYWwpKSA+PiAzMSk7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIGJ5IChJcSAqIGNvc1ZhbCkgKi8KKyAgICBwcm9kdWN0NCA9IChxMzFfdCkgKCgocTYzX3QpIChJcSkgKiAoY29zVmFsKSkgPj4gMzEpOworCisgICAgLyogQ2FsY3VsYXRlIHBJYWxwaGEgYnkgdXNpbmcgdGhlIHR3byBpbnRlcm1lZGlhdGUgcHJvZHVjdHMgMSBhbmQgMiAqLworICAgICpwSWFscGhhID0gX19RU1VCKHByb2R1Y3QxLCBwcm9kdWN0Mik7CisKKyAgICAvKiBDYWxjdWxhdGUgcEliZXRhIGJ5IHVzaW5nIHRoZSB0d28gaW50ZXJtZWRpYXRlIHByb2R1Y3RzIDMgYW5kIDQgKi8KKyAgICAqcEliZXRhID0gX19RQUREKHByb2R1Y3Q0LCBwcm9kdWN0Myk7CisgIH0KKworICAvKioKKyAgICogQH0gZW5kIG9mIEludmVyc2UgcGFyayBncm91cAorICAgKi8KKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTMxIHZlY3RvciB0byBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX3EzMV90b19mbG9hdCgKKyAgcTMxX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisgIC8qKgorICAgKiBAaW5ncm91cCBncm91cEludGVycG9sYXRpb24KKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBMaW5lYXJJbnRlcnBvbGF0ZSBMaW5lYXIgSW50ZXJwb2xhdGlvbgorICAgKgorICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyBhIG1ldGhvZCBvZiBjdXJ2ZSBmaXR0aW5nIHVzaW5nIGxpbmVhciBwb2x5bm9taWFscy4KKyAgICogTGluZWFyIGludGVycG9sYXRpb24gd29ya3MgYnkgZWZmZWN0aXZlbHkgZHJhd2luZyBhIHN0cmFpZ2h0IGxpbmUgYmV0d2VlbiB0d28gbmVpZ2hib3Jpbmcgc2FtcGxlcyBhbmQgcmV0dXJuaW5nIHRoZSBhcHByb3ByaWF0ZSBwb2ludCBhbG9uZyB0aGF0IGxpbmUKKyAgICoKKyAgICogXHBhcgorICAgKiBcaW1hZ2UgaHRtbCBMaW5lYXJJbnRlcnAuZ2lmICJMaW5lYXIgaW50ZXJwb2xhdGlvbiIKKyAgICoKKyAgICogXHBhcgorICAgKiBBICBMaW5lYXIgSW50ZXJwb2xhdGUgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbiBvdXRwdXQgdmFsdWUoeSksIGZvciB0aGUgaW5wdXQoeCkKKyAgICogdXNpbmcgbGluZWFyIGludGVycG9sYXRpb24gb2YgdGhlIGlucHV0IHZhbHVlcyB4MCwgeDEoIG5lYXJlc3QgaW5wdXQgdmFsdWVzKSBhbmQgdGhlIG91dHB1dCB2YWx1ZXMgeTAgYW5kIHkxKG5lYXJlc3Qgb3V0cHV0IHZhbHVlcykKKyAgICoKKyAgICogXHBhciBBbGdvcml0aG06CisgICAqIDxwcmU+CisgICAqICAgICAgIHkgPSB5MCArICh4IC0geDApICogKCh5MSAtIHkwKS8oeDEteDApKQorICAgKiAgICAgICB3aGVyZSB4MCwgeDEgYXJlIG5lYXJlc3QgdmFsdWVzIG9mIGlucHV0IHgKKyAgICogICAgICAgICAgICAgeTAsIHkxIGFyZSBuZWFyZXN0IHZhbHVlcyB0byBvdXRwdXQgeQorICAgKiA8L3ByZT4KKyAgICoKKyAgICogXHBhcgorICAgKiBUaGlzIHNldCBvZiBmdW5jdGlvbnMgaW1wbGVtZW50cyBMaW5lYXIgaW50ZXJwb2xhdGlvbiBwcm9jZXNzCisgICAqIGZvciBRNywgUTE1LCBRMzEsIGFuZCBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzLiAgVGhlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgc2luZ2xlCisgICAqIHNhbXBsZSBvZiBkYXRhIGFuZCBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzaW5nbGUgcHJvY2Vzc2VkIHZhbHVlLgorICAgKiA8Y29kZT5TPC9jb2RlPiBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIExpbmVhciBJbnRlcnBvbGF0ZSBmdW5jdGlvbiBkYXRhIHN0cnVjdHVyZS4KKyAgICogPGNvZGU+eDwvY29kZT4gaXMgdGhlIGlucHV0IHNhbXBsZSB2YWx1ZS4gVGhlIGZ1bmN0aW9ucyByZXR1cm5zIHRoZSBvdXRwdXQgdmFsdWUuCisgICAqCisgICAqIFxwYXIKKyAgICogaWYgeCBpcyBvdXRzaWRlIG9mIHRoZSB0YWJsZSBib3VuZGFyeSwgTGluZWFyIGludGVycG9sYXRpb24gcmV0dXJucyBmaXJzdCB2YWx1ZSBvZiB0aGUgdGFibGUKKyAgICogaWYgeCBpcyBiZWxvdyBpbnB1dCByYW5nZSBhbmQgcmV0dXJucyBsYXN0IHZhbHVlIG9mIHRhYmxlIGlmIHggaXMgYWJvdmUgcmFuZ2UuCisgICAqLworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBMaW5lYXJJbnRlcnBvbGF0ZQorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgTGluZWFyIEludGVycG9sYXRpb24gRnVuY3Rpb24uCisgICAqIEBwYXJhbVtpbixvdXRdIFMgIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBMaW5lYXIgSW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUKKyAgICogQHBhcmFtW2luXSAgICAgeCAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MKKyAgICogQHJldHVybiB5IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLgorICAgKgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIGZsb2F0MzJfdCBhcm1fbGluZWFyX2ludGVycF9mMzIoCisgIGFybV9saW5lYXJfaW50ZXJwX2luc3RhbmNlX2YzMiAqIFMsCisgIGZsb2F0MzJfdCB4KQorICB7CisgICAgZmxvYXQzMl90IHk7CisgICAgZmxvYXQzMl90IHgwLCB4MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBpbnB1dCB2YWx1ZXMgKi8KKyAgICBmbG9hdDMyX3QgeTAsIHkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKyAgICBmbG9hdDMyX3QgeFNwYWNpbmcgPSBTLT54U3BhY2luZzsgICAgICAgICAgICAvKiBzcGFjaW5nIGJldHdlZW4gaW5wdXQgdmFsdWVzICovCisgICAgaW50MzJfdCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggdmFyaWFibGUgKi8KKyAgICBmbG9hdDMyX3QgKnBZRGF0YSA9IFMtPnBZRGF0YTsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG91dHB1dCB0YWJsZSAqLworCisgICAgLyogQ2FsY3VsYXRpb24gb2YgaW5kZXggKi8KKyAgICBpID0gKGludDMyX3QpICgoeCAtIFMtPngxKSAvIHhTcGFjaW5nKTsKKworICAgIGlmKGkgPCAwKQorICAgIHsKKyAgICAgIC8qIEluaWF0aWxpemUgb3V0cHV0IGZvciBiZWxvdyBzcGVjaWZpZWQgcmFuZ2UgYXMgbGVhc3Qgb3V0cHV0IHZhbHVlIG9mIHRhYmxlICovCisgICAgICB5ID0gcFlEYXRhWzBdOworICAgIH0KKyAgICBlbHNlIGlmKCh1aW50MzJfdClpID49IFMtPm5WYWx1ZXMpCisgICAgeworICAgICAgLyogSW5pYXRpbGl6ZSBvdXRwdXQgZm9yIGFib3ZlIHNwZWNpZmllZCByYW5nZSBhcyBsYXN0IG91dHB1dCB2YWx1ZSBvZiB0YWJsZSAqLworICAgICAgeSA9IHBZRGF0YVtTLT5uVmFsdWVzIC0gMV07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBDYWxjdWxhdGlvbiBvZiBuZWFyZXN0IGlucHV0IHZhbHVlcyAqLworICAgICAgeDAgPSBTLT54MSArICBpICAgICAgKiB4U3BhY2luZzsKKyAgICAgIHgxID0gUy0+eDEgKyAoaSArIDEpICogeFNwYWNpbmc7CisKKyAgICAgIC8qIFJlYWQgb2YgbmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisgICAgICB5MCA9IHBZRGF0YVtpXTsKKyAgICAgIHkxID0gcFlEYXRhW2kgKyAxXTsKKworICAgICAgLyogQ2FsY3VsYXRpb24gb2Ygb3V0cHV0ICovCisgICAgICB5ID0geTAgKyAoeCAtIHgwKSAqICgoeTEgLSB5MCkgLyAoeDEgLSB4MCkpOworCisgICAgfQorCisgICAgLyogcmV0dXJucyBvdXRwdXQgdmFsdWUgKi8KKyAgICByZXR1cm4gKHkpOworICB9CisKKworICAgLyoqCisgICAqCisgICAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFEzMSBMaW5lYXIgSW50ZXJwb2xhdGlvbiBGdW5jdGlvbi4KKyAgICogQHBhcmFtW2luXSBwWURhdGEgICBwb2ludGVyIHRvIFEzMSBMaW5lYXIgSW50ZXJwb2xhdGlvbiB0YWJsZQorICAgKiBAcGFyYW1baW5dIHggICAgICAgIGlucHV0IHNhbXBsZSB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtpbl0gblZhbHVlcyAgbnVtYmVyIG9mIHRhYmxlIHZhbHVlcworICAgKiBAcmV0dXJuIHkgcHJvY2Vzc2VkIG91dHB1dCBzYW1wbGUuCisgICAqCisgICAqIFxwYXIKKyAgICogSW5wdXQgc2FtcGxlIDxjb2RlPng8L2NvZGU+IGlzIGluIDEyLjIwIGZvcm1hdCB3aGljaCBjb250YWlucyAxMiBiaXRzIGZvciB0YWJsZSBpbmRleCBhbmQgMjAgYml0cyBmb3IgZnJhY3Rpb25hbCBwYXJ0LgorICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IG1heGltdW0gb2YgdGFibGUgc2l6ZSAyXjEyLgorICAgKgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHEzMV90IGFybV9saW5lYXJfaW50ZXJwX3EzMSgKKyAgcTMxX3QgKiBwWURhdGEsCisgIHEzMV90IHgsCisgIHVpbnQzMl90IG5WYWx1ZXMpCisgIHsKKyAgICBxMzFfdCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICBxMzFfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKyAgICBxMzFfdCBmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICBpbnQzMl90IGluZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCB0byByZWFkIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8KKyAgICBpbmRleCA9ICgoeCAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7CisKKyAgICBpZihpbmRleCA+PSAoaW50MzJfdCkoblZhbHVlcyAtIDEpKQorICAgIHsKKyAgICAgIHJldHVybiAocFlEYXRhW25WYWx1ZXMgLSAxXSk7CisgICAgfQorICAgIGVsc2UgaWYoaW5kZXggPCAwKQorICAgIHsKKyAgICAgIHJldHVybiAocFlEYXRhWzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICAgIC8qIHNoaWZ0IGxlZnQgYnkgMTEgdG8ga2VlcCBmcmFjdCBpbiAxLjMxIGZvcm1hdCAqLworICAgICAgZnJhY3QgPSAoeCAmIDB4MDAwRkZGRkYpIDw8IDExOworCisgICAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggaW4gMS4zMShxMzEpIGZvcm1hdCAqLworICAgICAgeTAgPSBwWURhdGFbaW5kZXhdOworICAgICAgeTEgPSBwWURhdGFbaW5kZXggKyAxXTsKKworICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTAgKiAoMS1mcmFjdCkgYW5kIHkgaXMgaW4gMi4zMCBmb3JtYXQgKi8KKyAgICAgIHkgPSAoKHEzMV90KSAoKHE2M190KSB5MCAqICgweDdGRkZGRkZGIC0gZnJhY3QpID4+IDMyKSk7CisKKyAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHkwICogKDEtZnJhY3QpICsgeTEgKmZyYWN0IGFuZCB5IGlzIGluIDIuMzAgZm9ybWF0ICovCisgICAgICB5ICs9ICgocTMxX3QpICgoKHE2M190KSB5MSAqIGZyYWN0KSA+PiAzMikpOworCisgICAgICAvKiBDb252ZXJ0IHkgdG8gMS4zMSBmb3JtYXQgKi8KKyAgICAgIHJldHVybiAoeSA8PCAxdSk7CisgICAgfQorICB9CisKKworICAvKioKKyAgICoKKyAgICogQGJyaWVmICBQcm9jZXNzIGZ1bmN0aW9uIGZvciB0aGUgUTE1IExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dIHBZRGF0YSAgIHBvaW50ZXIgdG8gUTE1IExpbmVhciBJbnRlcnBvbGF0aW9uIHRhYmxlCisgICAqIEBwYXJhbVtpbl0geCAgICAgICAgaW5wdXQgc2FtcGxlIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW2luXSBuVmFsdWVzICBudW1iZXIgb2YgdGFibGUgdmFsdWVzCisgICAqIEByZXR1cm4geSBwcm9jZXNzZWQgb3V0cHV0IHNhbXBsZS4KKyAgICoKKyAgICogXHBhcgorICAgKiBJbnB1dCBzYW1wbGUgPGNvZGU+eDwvY29kZT4gaXMgaW4gMTIuMjAgZm9ybWF0IHdoaWNoIGNvbnRhaW5zIDEyIGJpdHMgZm9yIHRhYmxlIGluZGV4IGFuZCAyMCBiaXRzIGZvciBmcmFjdGlvbmFsIHBhcnQuCisgICAqIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgbWF4aW11bSBvZiB0YWJsZSBzaXplIDJeMTIuCisgICAqCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgcTE1X3QgYXJtX2xpbmVhcl9pbnRlcnBfcTE1KAorICBxMTVfdCAqIHBZRGF0YSwKKyAgcTMxX3QgeCwKKyAgdWludDMyX3QgblZhbHVlcykKKyAgeworICAgIHE2M190IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLworICAgIHExNV90IHkwLCB5MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworICAgIHEzMV90IGZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyYWN0aW9uYWwgcGFydCAqLworICAgIGludDMyX3QgaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHRvIHJlYWQgbmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisKKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworICAgIGluZGV4ID0gKCh4ICYgKGludDMyX3QpMHhGRkYwMDAwMCkgPj4gMjApOworCisgICAgaWYoaW5kZXggPj0gKGludDMyX3QpKG5WYWx1ZXMgLSAxKSkKKyAgICB7CisgICAgICByZXR1cm4gKHBZRGF0YVtuVmFsdWVzIC0gMV0pOworICAgIH0KKyAgICBlbHNlIGlmKGluZGV4IDwgMCkKKyAgICB7CisgICAgICByZXR1cm4gKHBZRGF0YVswXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgICAvKiBmcmFjdCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAgIGZyYWN0ID0gKHggJiAweDAwMEZGRkZGKTsKKworICAgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovCisgICAgICB5MCA9IHBZRGF0YVtpbmRleF07CisgICAgICB5MSA9IHBZRGF0YVtpbmRleCArIDFdOworCisgICAgICAvKiBDYWxjdWxhdGlvbiBvZiB5MCAqICgxLWZyYWN0KSBhbmQgeSBpcyBpbiAxMy4zNSBmb3JtYXQgKi8KKyAgICAgIHkgPSAoKHE2M190KSB5MCAqICgweEZGRkZGIC0gZnJhY3QpKTsKKworICAgICAgLyogQ2FsY3VsYXRpb24gb2YgKHkwICogKDEtZnJhY3QpICsgeTEgKiBmcmFjdCkgYW5kIHkgaXMgaW4gMTMuMzUgZm9ybWF0ICovCisgICAgICB5ICs9ICgocTYzX3QpIHkxICogKGZyYWN0KSk7CisKKyAgICAgIC8qIGNvbnZlcnQgeSB0byAxLjE1IGZvcm1hdCAqLworICAgICAgcmV0dXJuIChxMTVfdCkgKHkgPj4gMjApOworICAgIH0KKyAgfQorCisKKyAgLyoqCisgICAqCisgICAqIEBicmllZiAgUHJvY2VzcyBmdW5jdGlvbiBmb3IgdGhlIFE3IExpbmVhciBJbnRlcnBvbGF0aW9uIEZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dIHBZRGF0YSAgIHBvaW50ZXIgdG8gUTcgTGluZWFyIEludGVycG9sYXRpb24gdGFibGUKKyAgICogQHBhcmFtW2luXSB4ICAgICAgICBpbnB1dCBzYW1wbGUgdG8gcHJvY2VzcworICAgKiBAcGFyYW1baW5dIG5WYWx1ZXMgIG51bWJlciBvZiB0YWJsZSB2YWx1ZXMKKyAgICogQHJldHVybiB5IHByb2Nlc3NlZCBvdXRwdXQgc2FtcGxlLgorICAgKgorICAgKiBccGFyCisgICAqIElucHV0IHNhbXBsZSA8Y29kZT54PC9jb2RlPiBpcyBpbiAxMi4yMCBmb3JtYXQgd2hpY2ggY29udGFpbnMgMTIgYml0cyBmb3IgdGFibGUgaW5kZXggYW5kIDIwIGJpdHMgZm9yIGZyYWN0aW9uYWwgcGFydC4KKyAgICogVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCBtYXhpbXVtIG9mIHRhYmxlIHNpemUgMl4xMi4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSBxN190IGFybV9saW5lYXJfaW50ZXJwX3E3KAorICBxN190ICogcFlEYXRhLAorICBxMzFfdCB4LAorICB1aW50MzJfdCBuVmFsdWVzKQorICB7CisgICAgcTMxX3QgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0ICovCisgICAgcTdfdCB5MCwgeTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisgICAgcTMxX3QgZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgdWludDMyX3QgaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggdG8gcmVhZCBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKworICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLworICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovCisgICAgaWYgKHggPCAwKQorICAgIHsKKyAgICAgIHJldHVybiAocFlEYXRhWzBdKTsKKyAgICB9CisgICAgaW5kZXggPSAoeCA+PiAyMCkgJiAweGZmZjsKKworICAgIGlmKGluZGV4ID49IChuVmFsdWVzIC0gMSkpCisgICAgeworICAgICAgcmV0dXJuIChwWURhdGFbblZhbHVlcyAtIDFdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICAgIC8qIGZyYWN0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgICAgZnJhY3QgPSAoeCAmIDB4MDAwRkZGRkYpOworCisgICAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggYW5kIGFyZSBpbiAxLjcocTcpIGZvcm1hdCAqLworICAgICAgeTAgPSBwWURhdGFbaW5kZXhdOworICAgICAgeTEgPSBwWURhdGFbaW5kZXggKyAxXTsKKworICAgICAgLyogQ2FsY3VsYXRpb24gb2YgeTAgKiAoMS1mcmFjdCApIGFuZCB5IGlzIGluIDEzLjI3KHEyNykgZm9ybWF0ICovCisgICAgICB5ID0gKCh5MCAqICgweEZGRkZGIC0gZnJhY3QpKSk7CisKKyAgICAgIC8qIENhbGN1bGF0aW9uIG9mIHkxICogZnJhY3QgKyB5MCAqICgxLWZyYWN0KSBhbmQgeSBpcyBpbiAxMy4yNyhxMjcpIGZvcm1hdCAqLworICAgICAgeSArPSAoeTEgKiBmcmFjdCk7CisKKyAgICAgIC8qIGNvbnZlcnQgeSB0byAxLjcocTcpIGZvcm1hdCAqLworICAgICAgcmV0dXJuIChxN190KSAoeSA+PiAyMCk7CisgICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBAfSBlbmQgb2YgTGluZWFySW50ZXJwb2xhdGUgZ3JvdXAKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIHNpbmUgZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IGRhdGEuCisgICAqIEBwYXJhbVtpbl0geCAgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4KKyAgICogQHJldHVybiAgc2luKHgpLgorICAgKi8KKyAgZmxvYXQzMl90IGFybV9zaW5fZjMyKAorICBmbG9hdDMyX3QgeCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGYXN0IGFwcHJveGltYXRpb24gdG8gdGhlIHRyaWdvbm9tZXRyaWMgc2luZSBmdW5jdGlvbiBmb3IgUTMxIGRhdGEuCisgICAqIEBwYXJhbVtpbl0geCAgU2NhbGVkIGlucHV0IHZhbHVlIGluIHJhZGlhbnMuCisgICAqIEByZXR1cm4gIHNpbih4KS4KKyAgICovCisgIHEzMV90IGFybV9zaW5fcTMxKAorICBxMzFfdCB4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBzaW5lIGZ1bmN0aW9uIGZvciBRMTUgZGF0YS4KKyAgICogQHBhcmFtW2luXSB4ICBTY2FsZWQgaW5wdXQgdmFsdWUgaW4gcmFkaWFucy4KKyAgICogQHJldHVybiAgc2luKHgpLgorICAgKi8KKyAgcTE1X3QgYXJtX3Npbl9xMTUoCisgIHExNV90IHgpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIGNvc2luZSBmdW5jdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgZGF0YS4KKyAgICogQHBhcmFtW2luXSB4ICBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLgorICAgKiBAcmV0dXJuICBjb3MoeCkuCisgICAqLworICBmbG9hdDMyX3QgYXJtX2Nvc19mMzIoCisgIGZsb2F0MzJfdCB4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgRmFzdCBhcHByb3hpbWF0aW9uIHRvIHRoZSB0cmlnb25vbWV0cmljIGNvc2luZSBmdW5jdGlvbiBmb3IgUTMxIGRhdGEuCisgICAqIEBwYXJhbVtpbl0geCAgU2NhbGVkIGlucHV0IHZhbHVlIGluIHJhZGlhbnMuCisgICAqIEByZXR1cm4gIGNvcyh4KS4KKyAgICovCisgIHEzMV90IGFybV9jb3NfcTMxKAorICBxMzFfdCB4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZhc3QgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJpZ29ub21ldHJpYyBjb3NpbmUgZnVuY3Rpb24gZm9yIFExNSBkYXRhLgorICAgKiBAcGFyYW1baW5dIHggIFNjYWxlZCBpbnB1dCB2YWx1ZSBpbiByYWRpYW5zLgorICAgKiBAcmV0dXJuICBjb3MoeCkuCisgICAqLworICBxMTVfdCBhcm1fY29zX3ExNSgKKyAgcTE1X3QgeCk7CisKKworICAvKioKKyAgICogQGluZ3JvdXAgZ3JvdXBGYXN0TWF0aAorICAgKi8KKworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgU1FSVCBTcXVhcmUgUm9vdAorICAgKgorICAgKiBDb21wdXRlcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYSBudW1iZXIuCisgICAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBmdW5jdGlvbnMgZm9yIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4KKyAgICogVGhlIHNxdWFyZSByb290IGZ1bmN0aW9uIGlzIGNvbXB1dGVkIHVzaW5nIHRoZSBOZXd0b24tUmFwaHNvbiBhbGdvcml0aG0uCisgICAqIFRoaXMgaXMgYW4gaXRlcmF0aXZlIGFsZ29yaXRobSBvZiB0aGUgZm9ybToKKyAgICogPHByZT4KKyAgICogICAgICB4MSA9IHgwIC0gZih4MCkvZicoeDApCisgICAqIDwvcHJlPgorICAgKiB3aGVyZSA8Y29kZT54MTwvY29kZT4gaXMgdGhlIGN1cnJlbnQgZXN0aW1hdGUsCisgICAqIDxjb2RlPngwPC9jb2RlPiBpcyB0aGUgcHJldmlvdXMgZXN0aW1hdGUsIGFuZAorICAgKiA8Y29kZT5mJyh4MCk8L2NvZGU+IGlzIHRoZSBkZXJpdmF0aXZlIG9mIDxjb2RlPmYoKTwvY29kZT4gZXZhbHVhdGVkIGF0IDxjb2RlPngwPC9jb2RlPi4KKyAgICogRm9yIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiwgdGhlIGFsZ29yaXRobSByZWR1Y2VzIHRvOgorICAgKiA8cHJlPgorICAgKiAgICAgeDAgPSBpbi8yICAgICAgICAgICAgICAgICAgICAgICAgIFtpbml0aWFsIGd1ZXNzXQorICAgKiAgICAgeDEgPSAxLzIgKiAoIHgwICsgaW4gLyB4MCkgICAgICAgIFtlYWNoIGl0ZXJhdGlvbl0KKyAgICogPC9wcmU+CisgICAqLworCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIFNRUlQKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgc3F1YXJlIHJvb3QgZnVuY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIGluICAgIGlucHV0IHZhbHVlLgorICAgKiBAcGFyYW1bb3V0XSBwT3V0ICBzcXVhcmUgcm9vdCBvZiBpbnB1dCB2YWx1ZS4KKyAgICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGlucHV0IHZhbHVlIGlzIHBvc2l0aXZlIHZhbHVlIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmCisgICAqIDxjb2RlPmluPC9jb2RlPiBpcyBuZWdhdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyB6ZXJvIG91dHB1dCBmb3IgbmVnYXRpdmUgdmFsdWVzLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIGFybV9zdGF0dXMgYXJtX3NxcnRfZjMyKAorICBmbG9hdDMyX3QgaW4sCisgIGZsb2F0MzJfdCAqIHBPdXQpCisgIHsKKyAgICBpZihpbiA+PSAwLjBmKQorICAgIHsKKworI2lmICAgKF9fRlBVX1VTRUQgPT0gMSkgJiYgZGVmaW5lZCAoIF9fQ0NfQVJNICAgKQorICAgICAgKnBPdXQgPSBfX3NxcnRmKGluKTsKKyNlbGlmIChfX0ZQVV9VU0VEID09IDEpICYmIChkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKSkKKyAgICAgICpwT3V0ID0gX19idWlsdGluX3NxcnRmKGluKTsKKyNlbGlmIChfX0ZQVV9VU0VEID09IDEpICYmIGRlZmluZWQoX19HTlVDX18pCisgICAgICAqcE91dCA9IF9fYnVpbHRpbl9zcXJ0Zihpbik7CisjZWxpZiAoX19GUFVfVVNFRCA9PSAxKSAmJiBkZWZpbmVkICggX19JQ0NBUk1fXyApICYmIChfX1ZFUl9fID49IDYwNDAwMDApCisgICAgICBfX0FTTSgiVlNRUlQuRjMyICUwLCUxIiA6ICI9dCIoKnBPdXQpIDogInQiKGluKSk7CisjZWxzZQorICAgICAgKnBPdXQgPSBzcXJ0Zihpbik7CisjZW5kaWYKKworICAgICAgcmV0dXJuIChBUk1fTUFUSF9TVUNDRVNTKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICpwT3V0ID0gMC4wZjsKKyAgICAgIHJldHVybiAoQVJNX01BVEhfQVJHVU1FTlRfRVJST1IpOworICAgIH0KKyAgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBRMzEgc3F1YXJlIHJvb3QgZnVuY3Rpb24uCisgICAqIEBwYXJhbVtpbl0gIGluICAgIGlucHV0IHZhbHVlLiAgVGhlIHJhbmdlIG9mIHRoZSBpbnB1dCB2YWx1ZSBpcyBbMCArMSkgb3IgMHgwMDAwMDAwMCB0byAweDdGRkZGRkZGLgorICAgKiBAcGFyYW1bb3V0XSBwT3V0ICBzcXVhcmUgcm9vdCBvZiBpbnB1dCB2YWx1ZS4KKyAgICogQHJldHVybiBUaGUgZnVuY3Rpb24gcmV0dXJucyBBUk1fTUFUSF9TVUNDRVNTIGlmIGlucHV0IHZhbHVlIGlzIHBvc2l0aXZlIHZhbHVlIG9yIEFSTV9NQVRIX0FSR1VNRU5UX0VSUk9SIGlmCisgICAqIDxjb2RlPmluPC9jb2RlPiBpcyBuZWdhdGl2ZSB2YWx1ZSBhbmQgcmV0dXJucyB6ZXJvIG91dHB1dCBmb3IgbmVnYXRpdmUgdmFsdWVzLgorICAgKi8KKyAgYXJtX3N0YXR1cyBhcm1fc3FydF9xMzEoCisgIHEzMV90IGluLAorICBxMzFfdCAqIHBPdXQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IHNxdWFyZSByb290IGZ1bmN0aW9uLgorICAgKiBAcGFyYW1baW5dICBpbiAgICBpbnB1dCB2YWx1ZS4gIFRoZSByYW5nZSBvZiB0aGUgaW5wdXQgdmFsdWUgaXMgWzAgKzEpIG9yIDB4MDAwMCB0byAweDdGRkYuCisgICAqIEBwYXJhbVtvdXRdIHBPdXQgIHNxdWFyZSByb290IG9mIGlucHV0IHZhbHVlLgorICAgKiBAcmV0dXJuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEFSTV9NQVRIX1NVQ0NFU1MgaWYgaW5wdXQgdmFsdWUgaXMgcG9zaXRpdmUgdmFsdWUgb3IgQVJNX01BVEhfQVJHVU1FTlRfRVJST1IgaWYKKyAgICogPGNvZGU+aW48L2NvZGU+IGlzIG5lZ2F0aXZlIHZhbHVlIGFuZCByZXR1cm5zIHplcm8gb3V0cHV0IGZvciBuZWdhdGl2ZSB2YWx1ZXMuCisgICAqLworICBhcm1fc3RhdHVzIGFybV9zcXJ0X3ExNSgKKyAgcTE1X3QgaW4sCisgIHExNV90ICogcE91dCk7CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBTUVJUIGdyb3VwCisgICAqLworCisKKyAgLyoqCisgICAqIEBicmllZiBmbG9hdGluZy1wb2ludCBDaXJjdWxhciB3cml0ZSBmdW5jdGlvbi4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhcldyaXRlX2YzMigKKyAgaW50MzJfdCAqIGNpcmNCdWZmZXIsCisgIGludDMyX3QgTCwKKyAgdWludDE2X3QgKiB3cml0ZU9mZnNldCwKKyAgaW50MzJfdCBidWZmZXJJbmMsCisgIGNvbnN0IGludDMyX3QgKiBzcmMsCisgIGludDMyX3Qgc3JjSW5jLAorICB1aW50MzJfdCBibG9ja1NpemUpCisgIHsKKyAgICB1aW50MzJfdCBpID0gMHU7CisgICAgaW50MzJfdCB3T2Zmc2V0OworCisgICAgLyogQ29weSB0aGUgdmFsdWUgb2YgSW5kZXggcG9pbnRlciB0aGF0IHBvaW50cworICAgICAqIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIHdoZXJlIHRoZSBpbnB1dCBzYW1wbGVzIHRvIGJlIGNvcGllZCAqLworICAgIHdPZmZzZXQgPSAqd3JpdGVPZmZzZXQ7CisKKyAgICAvKiBMb29wIG92ZXIgdGhlIGJsb2NrU2l6ZSAqLworICAgIGkgPSBibG9ja1NpemU7CisKKyAgICB3aGlsZShpID4gMHUpCisgICAgeworICAgICAgLyogY29weSB0aGUgaW5wdXQgc2FtcGxlIHRvIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKyAgICAgIGNpcmNCdWZmZXJbd09mZnNldF0gPSAqc3JjOworCisgICAgICAvKiBVcGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgKi8KKyAgICAgIHNyYyArPSBzcmNJbmM7CisKKyAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHdPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAqLworICAgICAgd09mZnNldCArPSBidWZmZXJJbmM7CisgICAgICBpZih3T2Zmc2V0ID49IEwpCisgICAgICAgIHdPZmZzZXQgLT0gTDsKKworICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8KKyAgICAgIGktLTsKKyAgICB9CisKKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8KKyAgICAqd3JpdGVPZmZzZXQgPSAodWludDE2X3Qpd09mZnNldDsKKyAgfQorCisKKworICAvKioKKyAgICogQGJyaWVmIGZsb2F0aW5nLXBvaW50IENpcmN1bGFyIFJlYWQgZnVuY3Rpb24uCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJSZWFkX2YzMigKKyAgaW50MzJfdCAqIGNpcmNCdWZmZXIsCisgIGludDMyX3QgTCwKKyAgaW50MzJfdCAqIHJlYWRPZmZzZXQsCisgIGludDMyX3QgYnVmZmVySW5jLAorICBpbnQzMl90ICogZHN0LAorICBpbnQzMl90ICogZHN0X2Jhc2UsCisgIGludDMyX3QgZHN0X2xlbmd0aCwKKyAgaW50MzJfdCBkc3RJbmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSkKKyAgeworICAgIHVpbnQzMl90IGkgPSAwdTsKKyAgICBpbnQzMl90IHJPZmZzZXQsIGRzdF9lbmQ7CisKKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gZnJvbSB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSByZWFkICovCisgICAgck9mZnNldCA9ICpyZWFkT2Zmc2V0OworICAgIGRzdF9lbmQgPSAoaW50MzJfdCkgKGRzdF9iYXNlICsgZHN0X2xlbmd0aCk7CisKKyAgICAvKiBMb29wIG92ZXIgdGhlIGJsb2NrU2l6ZSAqLworICAgIGkgPSBibG9ja1NpemU7CisKKyAgICB3aGlsZShpID4gMHUpCisgICAgeworICAgICAgLyogY29weSB0aGUgc2FtcGxlIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyICovCisgICAgICAqZHN0ID0gY2lyY0J1ZmZlcltyT2Zmc2V0XTsKKworICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovCisgICAgICBkc3QgKz0gZHN0SW5jOworCisgICAgICBpZihkc3QgPT0gKGludDMyX3QgKikgZHN0X2VuZCkKKyAgICAgIHsKKyAgICAgICAgZHN0ID0gZHN0X2Jhc2U7CisgICAgICB9CisKKyAgICAgIC8qIENpcmN1bGFybHkgdXBkYXRlIHJPZmZzZXQuICBXYXRjaCBvdXQgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZSAgKi8KKyAgICAgIHJPZmZzZXQgKz0gYnVmZmVySW5jOworCisgICAgICBpZihyT2Zmc2V0ID49IEwpCisgICAgICB7CisgICAgICAgIHJPZmZzZXQgLT0gTDsKKyAgICAgIH0KKworICAgICAgLyogRGVjcmVtZW50IHRoZSBsb29wIGNvdW50ZXIgKi8KKyAgICAgIGktLTsKKyAgICB9CisKKyAgICAvKiBVcGRhdGUgdGhlIGluZGV4IHBvaW50ZXIgKi8KKyAgICAqcmVhZE9mZnNldCA9IHJPZmZzZXQ7CisgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IENpcmN1bGFyIHdyaXRlIGZ1bmN0aW9uLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NpcmN1bGFyV3JpdGVfcTE1KAorICBxMTVfdCAqIGNpcmNCdWZmZXIsCisgIGludDMyX3QgTCwKKyAgdWludDE2X3QgKiB3cml0ZU9mZnNldCwKKyAgaW50MzJfdCBidWZmZXJJbmMsCisgIGNvbnN0IHExNV90ICogc3JjLAorICBpbnQzMl90IHNyY0luYywKKyAgdWludDMyX3QgYmxvY2tTaXplKQorICB7CisgICAgdWludDMyX3QgaSA9IDB1OworICAgIGludDMyX3Qgd09mZnNldDsKKworICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMKKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSBjb3BpZWQgKi8KKyAgICB3T2Zmc2V0ID0gKndyaXRlT2Zmc2V0OworCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8KKyAgICBpID0gYmxvY2tTaXplOworCisgICAgd2hpbGUoaSA+IDB1KQorICAgIHsKKyAgICAgIC8qIGNvcHkgdGhlIGlucHV0IHNhbXBsZSB0byB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisgICAgICBjaXJjQnVmZmVyW3dPZmZzZXRdID0gKnNyYzsKKworICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovCisgICAgICBzcmMgKz0gc3JjSW5jOworCisgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSB3T2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgKi8KKyAgICAgIHdPZmZzZXQgKz0gYnVmZmVySW5jOworICAgICAgaWYod09mZnNldCA+PSBMKQorICAgICAgICB3T2Zmc2V0IC09IEw7CisKKyAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisgICAgICBpLS07CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovCisgICAgKndyaXRlT2Zmc2V0ID0gKHVpbnQxNl90KXdPZmZzZXQ7CisgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgUTE1IENpcmN1bGFyIFJlYWQgZnVuY3Rpb24uCisgICAqLworICBzdGF0aWMgX19JTkxJTkUgdm9pZCBhcm1fY2lyY3VsYXJSZWFkX3ExNSgKKyAgcTE1X3QgKiBjaXJjQnVmZmVyLAorICBpbnQzMl90IEwsCisgIGludDMyX3QgKiByZWFkT2Zmc2V0LAorICBpbnQzMl90IGJ1ZmZlckluYywKKyAgcTE1X3QgKiBkc3QsCisgIHExNV90ICogZHN0X2Jhc2UsCisgIGludDMyX3QgZHN0X2xlbmd0aCwKKyAgaW50MzJfdCBkc3RJbmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSkKKyAgeworICAgIHVpbnQzMl90IGkgPSAwOworICAgIGludDMyX3Qgck9mZnNldCwgZHN0X2VuZDsKKworICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMKKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBpbnB1dCBzYW1wbGVzIHRvIGJlIHJlYWQgKi8KKyAgICByT2Zmc2V0ID0gKnJlYWRPZmZzZXQ7CisKKyAgICBkc3RfZW5kID0gKGludDMyX3QpIChkc3RfYmFzZSArIGRzdF9sZW5ndGgpOworCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8KKyAgICBpID0gYmxvY2tTaXplOworCisgICAgd2hpbGUoaSA+IDB1KQorICAgIHsKKyAgICAgIC8qIGNvcHkgdGhlIHNhbXBsZSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworICAgICAgKmRzdCA9IGNpcmNCdWZmZXJbck9mZnNldF07CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgaW5wdXQgcG9pbnRlciAqLworICAgICAgZHN0ICs9IGRzdEluYzsKKworICAgICAgaWYoZHN0ID09IChxMTVfdCAqKSBkc3RfZW5kKQorICAgICAgeworICAgICAgICBkc3QgPSBkc3RfYmFzZTsKKyAgICAgIH0KKworICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgd09mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovCisgICAgICByT2Zmc2V0ICs9IGJ1ZmZlckluYzsKKworICAgICAgaWYock9mZnNldCA+PSBMKQorICAgICAgeworICAgICAgICByT2Zmc2V0IC09IEw7CisgICAgICB9CisKKyAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisgICAgICBpLS07CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovCisgICAgKnJlYWRPZmZzZXQgPSByT2Zmc2V0OworICB9CisKKworICAvKioKKyAgICogQGJyaWVmIFE3IENpcmN1bGFyIHdyaXRlIGZ1bmN0aW9uLgorICAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHZvaWQgYXJtX2NpcmN1bGFyV3JpdGVfcTcoCisgIHE3X3QgKiBjaXJjQnVmZmVyLAorICBpbnQzMl90IEwsCisgIHVpbnQxNl90ICogd3JpdGVPZmZzZXQsCisgIGludDMyX3QgYnVmZmVySW5jLAorICBjb25zdCBxN190ICogc3JjLAorICBpbnQzMl90IHNyY0luYywKKyAgdWludDMyX3QgYmxvY2tTaXplKQorICB7CisgICAgdWludDMyX3QgaSA9IDB1OworICAgIGludDMyX3Qgd09mZnNldDsKKworICAgIC8qIENvcHkgdGhlIHZhbHVlIG9mIEluZGV4IHBvaW50ZXIgdGhhdCBwb2ludHMKKyAgICAgKiB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSBjb3BpZWQgKi8KKyAgICB3T2Zmc2V0ID0gKndyaXRlT2Zmc2V0OworCisgICAgLyogTG9vcCBvdmVyIHRoZSBibG9ja1NpemUgKi8KKyAgICBpID0gYmxvY2tTaXplOworCisgICAgd2hpbGUoaSA+IDB1KQorICAgIHsKKyAgICAgIC8qIGNvcHkgdGhlIGlucHV0IHNhbXBsZSB0byB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisgICAgICBjaXJjQnVmZmVyW3dPZmZzZXRdID0gKnNyYzsKKworICAgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBwb2ludGVyICovCisgICAgICBzcmMgKz0gc3JjSW5jOworCisgICAgICAvKiBDaXJjdWxhcmx5IHVwZGF0ZSB3T2Zmc2V0LiAgV2F0Y2ggb3V0IGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWUgKi8KKyAgICAgIHdPZmZzZXQgKz0gYnVmZmVySW5jOworICAgICAgaWYod09mZnNldCA+PSBMKQorICAgICAgICB3T2Zmc2V0IC09IEw7CisKKyAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisgICAgICBpLS07CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovCisgICAgKndyaXRlT2Zmc2V0ID0gKHVpbnQxNl90KXdPZmZzZXQ7CisgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgUTcgQ2lyY3VsYXIgUmVhZCBmdW5jdGlvbi4KKyAgICovCisgIHN0YXRpYyBfX0lOTElORSB2b2lkIGFybV9jaXJjdWxhclJlYWRfcTcoCisgIHE3X3QgKiBjaXJjQnVmZmVyLAorICBpbnQzMl90IEwsCisgIGludDMyX3QgKiByZWFkT2Zmc2V0LAorICBpbnQzMl90IGJ1ZmZlckluYywKKyAgcTdfdCAqIGRzdCwKKyAgcTdfdCAqIGRzdF9iYXNlLAorICBpbnQzMl90IGRzdF9sZW5ndGgsCisgIGludDMyX3QgZHN0SW5jLAorICB1aW50MzJfdCBibG9ja1NpemUpCisgIHsKKyAgICB1aW50MzJfdCBpID0gMDsKKyAgICBpbnQzMl90IHJPZmZzZXQsIGRzdF9lbmQ7CisKKyAgICAvKiBDb3B5IHRoZSB2YWx1ZSBvZiBJbmRleCBwb2ludGVyIHRoYXQgcG9pbnRzCisgICAgICogdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gZnJvbSB3aGVyZSB0aGUgaW5wdXQgc2FtcGxlcyB0byBiZSByZWFkICovCisgICAgck9mZnNldCA9ICpyZWFkT2Zmc2V0OworCisgICAgZHN0X2VuZCA9IChpbnQzMl90KSAoZHN0X2Jhc2UgKyBkc3RfbGVuZ3RoKTsKKworICAgIC8qIExvb3Agb3ZlciB0aGUgYmxvY2tTaXplICovCisgICAgaSA9IGJsb2NrU2l6ZTsKKworICAgIHdoaWxlKGkgPiAwdSkKKyAgICB7CisgICAgICAvKiBjb3B5IHRoZSBzYW1wbGUgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKyAgICAgICpkc3QgPSBjaXJjQnVmZmVyW3JPZmZzZXRdOworCisgICAgICAvKiBVcGRhdGUgdGhlIGlucHV0IHBvaW50ZXIgKi8KKyAgICAgIGRzdCArPSBkc3RJbmM7CisKKyAgICAgIGlmKGRzdCA9PSAocTdfdCAqKSBkc3RfZW5kKQorICAgICAgeworICAgICAgICBkc3QgPSBkc3RfYmFzZTsKKyAgICAgIH0KKworICAgICAgLyogQ2lyY3VsYXJseSB1cGRhdGUgck9mZnNldC4gIFdhdGNoIG91dCBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlICovCisgICAgICByT2Zmc2V0ICs9IGJ1ZmZlckluYzsKKworICAgICAgaWYock9mZnNldCA+PSBMKQorICAgICAgeworICAgICAgICByT2Zmc2V0IC09IEw7CisgICAgICB9CisKKyAgICAgIC8qIERlY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisgICAgICBpLS07CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBpbmRleCBwb2ludGVyICovCisgICAgKnJlYWRPZmZzZXQgPSByT2Zmc2V0OworICB9CisKKworICAvKioKKyAgICogQGJyaWVmICBTdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9wb3dlcl9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxNjNfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9wb3dlcl9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgZmxvYXQzMl90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBTdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9wb3dlcl9xMTUoCisgIHExNV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxNjNfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBlbGVtZW50cyBvZiBhIFE3IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9wb3dlcl9xNygKKyAgcTdfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTMxX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1lYW4gdmFsdWUgb2YgYSBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fbWVhbl9xNygKKyAgcTdfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTdfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgTWVhbiB2YWx1ZSBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fbWVhbl9xMTUoCisgIHExNV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMTVfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgTWVhbiB2YWx1ZSBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fbWVhbl9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMzFfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgTWVhbiB2YWx1ZSBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9tZWFuX2YzMigKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBmbG9hdDMyX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFZhcmlhbmNlIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV92YXJfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgVmFyaWFuY2Ugb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTMxIHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV92YXJfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTMxX3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFZhcmlhbmNlIG9mIHRoZSBlbGVtZW50cyBvZiBhIFExNSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fdmFyX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHExNV90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBSb290IE1lYW4gU3F1YXJlIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9ybXNfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUm9vdCBNZWFuIFNxdWFyZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMzEgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX3Jtc19xMzEoCisgIHEzMV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMzFfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUm9vdCBNZWFuIFNxdWFyZSBvZiB0aGUgZWxlbWVudHMgb2YgYSBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIGlzIG91dHB1dCB2YWx1ZS4KKyAgICovCisgIHZvaWQgYXJtX3Jtc19xMTUoCisgIHExNV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMTVfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9zdGRfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIGZsb2F0MzJfdCAqIHBSZXN1bHQpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgU3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHZhbHVlLgorICAgKi8KKyAgdm9pZCBhcm1fc3RkX3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHEzMV90ICogcFJlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBTdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIGVsZW1lbnRzIG9mIGEgUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgdmFsdWUuCisgICAqLworICB2b2lkIGFybV9zdGRfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTE1X3QgKiBwUmVzdWx0KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEZsb2F0aW5nLXBvaW50IGNvbXBsZXggbWFnbml0dWRlCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSByZWFsIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9tYWdfZjMyKAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFEzMSBjb21wbGV4IG1hZ25pdHVkZQorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgIHBvaW50cyB0byB0aGUgcmVhbCBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gdGhlIGlucHV0IHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbWFnX3EzMSgKKyAgcTMxX3QgKiBwU3JjLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IGNvbXBsZXggbWFnbml0dWRlCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSByZWFsIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiB0aGUgaW5wdXQgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9tYWdfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMTUgY29tcGxleCBkb3QgcHJvZHVjdAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSByZWFsUmVzdWx0ICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlCisgICAqIEBwYXJhbVtvdXRdIGltYWdSZXN1bHQgIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfZG90X3Byb2RfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICBxMTVfdCAqIHBTcmNCLAorICB1aW50MzJfdCBudW1TYW1wbGVzLAorICBxMzFfdCAqIHJlYWxSZXN1bHQsCisgIHEzMV90ICogaW1hZ1Jlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMzEgY29tcGxleCBkb3QgcHJvZHVjdAorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSByZWFsUmVzdWx0ICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlCisgICAqIEBwYXJhbVtvdXRdIGltYWdSZXN1bHQgIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgaGVyZQorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfZG90X3Byb2RfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICBxMzFfdCAqIHBTcmNCLAorICB1aW50MzJfdCBudW1TYW1wbGVzLAorICBxNjNfdCAqIHJlYWxSZXN1bHQsCisgIHE2M190ICogaW1hZ1Jlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBjb21wbGV4IGRvdCBwcm9kdWN0CisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2YgY29tcGxleCBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHJlYWxSZXN1bHQgIHJlYWwgcGFydCBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGhlcmUKKyAgICogQHBhcmFtW291dF0gaW1hZ1Jlc3VsdCAgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBoZXJlCisgICAqLworICB2b2lkIGFybV9jbXBseF9kb3RfcHJvZF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgdWludDMyX3QgbnVtU2FtcGxlcywKKyAgZmxvYXQzMl90ICogcmVhbFJlc3VsdCwKKyAgZmxvYXQzMl90ICogaW1hZ1Jlc3VsdCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBRMTUgY29tcGxleC1ieS1yZWFsIG11bHRpcGxpY2F0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNDbXBseCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY1JlYWwgICAgcG9pbnRzIHRvIHRoZSByZWFsIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwQ21wbHhEc3QgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbXVsdF9yZWFsX3ExNSgKKyAgcTE1X3QgKiBwU3JjQ21wbHgsCisgIHExNV90ICogcFNyY1JlYWwsCisgIHExNV90ICogcENtcGx4RHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIFEzMSBjb21wbGV4LWJ5LXJlYWwgbXVsdGlwbGljYXRpb24KKyAgICogQHBhcmFtW2luXSAgcFNyY0NtcGx4ICAgcG9pbnRzIHRvIHRoZSBjb21wbGV4IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjUmVhbCAgICBwb2ludHMgdG8gdGhlIHJlYWwgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBDbXBseERzdCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggdmVjdG9yCisgICAqLworICB2b2lkIGFybV9jbXBseF9tdWx0X3JlYWxfcTMxKAorICBxMzFfdCAqIHBTcmNDbXBseCwKKyAgcTMxX3QgKiBwU3JjUmVhbCwKKyAgcTMxX3QgKiBwQ21wbHhEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleC1ieS1yZWFsIG11bHRpcGxpY2F0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNDbXBseCAgIHBvaW50cyB0byB0aGUgY29tcGxleCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgcFNyY1JlYWwgICAgcG9pbnRzIHRvIHRoZSByZWFsIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwQ21wbHhEc3QgICBwb2ludHMgdG8gdGhlIGNvbXBsZXggb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBudW1TYW1wbGVzICBudW1iZXIgb2Ygc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbXVsdF9yZWFsX2YzMigKKyAgZmxvYXQzMl90ICogcFNyY0NtcGx4LAorICBmbG9hdDMyX3QgKiBwU3JjUmVhbCwKKyAgZmxvYXQzMl90ICogcENtcGx4RHN0LAorICB1aW50MzJfdCBudW1TYW1wbGVzKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1pbmltdW0gdmFsdWUgb2YgYSBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHJlc3VsdCAgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgaW5kZXggICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX21pbl9xNygKKyAgcTdfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTdfdCAqIHJlc3VsdCwKKyAgdWludDMyX3QgKiBpbmRleCk7CisKKworICAvKioKKyAgICogQGJyaWVmICBNaW5pbXVtIHZhbHVlIG9mIGEgUTE1IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICogQHBhcmFtW291dF0gcFJlc3VsdCAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBwSW5kZXggICAgIGlzIHRoZSBhcnJheSBpbmRleCBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgaW5wdXQgYnVmZmVyLgorICAgKi8KKyAgdm9pZCBhcm1fbWluX3ExNSgKKyAgcTE1X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHExNV90ICogcFJlc3VsdCwKKyAgdWludDMyX3QgKiBwSW5kZXgpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgTWluaW11bSB2YWx1ZSBvZiBhIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX21pbl9xMzEoCisgIHEzMV90ICogcFNyYywKKyAgdWludDMyX3QgYmxvY2tTaXplLAorICBxMzFfdCAqIHBSZXN1bHQsCisgIHVpbnQzMl90ICogcEluZGV4KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIE1pbmltdW0gdmFsdWUgb2YgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpcyB0aGUgYXJyYXkgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGlucHV0IGJ1ZmZlci4KKyAgICovCisgIHZvaWQgYXJtX21pbl9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgZmxvYXQzMl90ICogcFJlc3VsdCwKKyAgdWludDMyX3QgKiBwSW5kZXgpOworCisKKy8qKgorICogQGJyaWVmIE1heGltdW0gdmFsdWUgb2YgYSBRNyB2ZWN0b3IuCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpbmRleCBvZiBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqLworICB2b2lkIGFybV9tYXhfcTcoCisgIHE3X3QgKiBwU3JjLAorICB1aW50MzJfdCBibG9ja1NpemUsCisgIHE3X3QgKiBwUmVzdWx0LAorICB1aW50MzJfdCAqIHBJbmRleCk7CisKKworLyoqCisgKiBAYnJpZWYgTWF4aW11bSB2YWx1ZSBvZiBhIFExNSB2ZWN0b3IuCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpbmRleCBvZiBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqLworICB2b2lkIGFybV9tYXhfcTE1KAorICBxMTVfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTE1X3QgKiBwUmVzdWx0LAorICB1aW50MzJfdCAqIHBJbmRleCk7CisKKworLyoqCisgKiBAYnJpZWYgTWF4aW11bSB2YWx1ZSBvZiBhIFEzMSB2ZWN0b3IuCisgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgKiBAcGFyYW1bb3V0XSBwUmVzdWx0ICAgIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQorICogQHBhcmFtW291dF0gcEluZGV4ICAgICBpbmRleCBvZiBtYXhpbXVtIHZhbHVlIHJldHVybmVkIGhlcmUKKyAqLworICB2b2lkIGFybV9tYXhfcTMxKAorICBxMzFfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgcTMxX3QgKiBwUmVzdWx0LAorICB1aW50MzJfdCAqIHBJbmRleCk7CisKKworLyoqCisgKiBAYnJpZWYgTWF4aW11bSB2YWx1ZSBvZiBhIGZsb2F0aW5nLXBvaW50IHZlY3Rvci4KKyAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3IKKyAqIEBwYXJhbVtvdXRdIHBSZXN1bHQgICAgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBoZXJlCisgKiBAcGFyYW1bb3V0XSBwSW5kZXggICAgIGluZGV4IG9mIG1heGltdW0gdmFsdWUgcmV0dXJuZWQgaGVyZQorICovCisgIHZvaWQgYXJtX21heF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIHVpbnQzMl90IGJsb2NrU2l6ZSwKKyAgZmxvYXQzMl90ICogcFJlc3VsdCwKKyAgdWludDMyX3QgKiBwSW5kZXgpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTE1IGNvbXBsZXgtYnktY29tcGxleCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X211bHRfY21wbHhfcTE1KAorICBxMTVfdCAqIHBTcmNBLAorICBxMTVfdCAqIHBTcmNCLAorICBxMTVfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgUTMxIGNvbXBsZXgtYnktY29tcGxleCBtdWx0aXBsaWNhdGlvbgorICAgKiBAcGFyYW1baW5dICBwU3JjQSAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBwU3JjQiAgICAgICBwb2ludHMgdG8gdGhlIHNlY29uZCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICAgcG9pbnRzIHRvIHRoZSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIG51bVNhbXBsZXMgIG51bWJlciBvZiBjb21wbGV4IHNhbXBsZXMgaW4gZWFjaCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2NtcGx4X211bHRfY21wbHhfcTMxKAorICBxMzFfdCAqIHBTcmNBLAorICBxMzFfdCAqIHBTcmNCLAorICBxMzFfdCAqIHBEc3QsCisgIHVpbnQzMl90IG51bVNhbXBsZXMpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgRmxvYXRpbmctcG9pbnQgY29tcGxleC1ieS1jb21wbGV4IG11bHRpcGxpY2F0aW9uCisgICAqIEBwYXJhbVtpbl0gIHBTcmNBICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIHBTcmNCICAgICAgIHBvaW50cyB0byB0aGUgc2Vjb25kIGlucHV0IHZlY3RvcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgICBwb2ludHMgdG8gdGhlIG91dHB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW2luXSAgbnVtU2FtcGxlcyAgbnVtYmVyIG9mIGNvbXBsZXggc2FtcGxlcyBpbiBlYWNoIHZlY3RvcgorICAgKi8KKyAgdm9pZCBhcm1fY21wbHhfbXVsdF9jbXBseF9mMzIoCisgIGZsb2F0MzJfdCAqIHBTcmNBLAorICBmbG9hdDMyX3QgKiBwU3JjQiwKKyAgZmxvYXQzMl90ICogcERzdCwKKyAgdWludDMyX3QgbnVtU2FtcGxlcyk7CisKKworICAvKioKKyAgICogQGJyaWVmIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdmVjdG9yIHRvIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgcG9pbnRzIHRvIHRoZSBmbG9hdGluZy1wb2ludCBpbnB1dCB2ZWN0b3IKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBwb2ludHMgdG8gdGhlIFEzMSBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2Zsb2F0X3RvX3EzMSgKKyAgZmxvYXQzMl90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiBDb252ZXJ0cyB0aGUgZWxlbWVudHMgb2YgdGhlIGZsb2F0aW5nLXBvaW50IHZlY3RvciB0byBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgZmxvYXRpbmctcG9pbnQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBRMTUgb3V0cHV0IHZlY3RvcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGxlbmd0aCBvZiB0aGUgaW5wdXQgdmVjdG9yCisgICAqLworICB2b2lkIGFybV9mbG9hdF90b19xMTUoCisgIGZsb2F0MzJfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgdG8gUTcgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIHBvaW50cyB0byB0aGUgZmxvYXRpbmctcG9pbnQgaW5wdXQgdmVjdG9yCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgcG9pbnRzIHRvIHRoZSBRNyBvdXRwdXQgdmVjdG9yCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgbGVuZ3RoIG9mIHRoZSBpbnB1dCB2ZWN0b3IKKyAgICovCisgIHZvaWQgYXJtX2Zsb2F0X3RvX3E3KAorICBmbG9hdDMyX3QgKiBwU3JjLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTMxIHZlY3RvciB0byBRMTUgdmVjdG9yLgorICAgKiBAcGFyYW1baW5dICBwU3JjICAgICAgIGlzIGlucHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW291dF0gcERzdCAgICAgICBpcyBvdXRwdXQgcG9pbnRlcgorICAgKiBAcGFyYW1baW5dICBibG9ja1NpemUgIGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzCisgICAqLworICB2b2lkIGFybV9xMzFfdG9fcTE1KAorICBxMzFfdCAqIHBTcmMsCisgIHExNV90ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTMxIHZlY3RvciB0byBRNyB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX3EzMV90b19xNygKKyAgcTMxX3QgKiBwU3JjLAorICBxN190ICogcERzdCwKKyAgdWludDMyX3QgYmxvY2tTaXplKTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIENvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgUTE1IHZlY3RvciB0byBmbG9hdGluZy1wb2ludCB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX3ExNV90b19mbG9hdCgKKyAgcTE1X3QgKiBwU3JjLAorICBmbG9hdDMyX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRMTUgdmVjdG9yIHRvIFEzMSB2ZWN0b3IuCisgICAqIEBwYXJhbVtpbl0gIHBTcmMgICAgICAgaXMgaW5wdXQgcG9pbnRlcgorICAgKiBAcGFyYW1bb3V0XSBwRHN0ICAgICAgIGlzIG91dHB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtpbl0gIGJsb2NrU2l6ZSAgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3MKKyAgICovCisgIHZvaWQgYXJtX3ExNV90b19xMzEoCisgIHExNV90ICogcFNyYywKKyAgcTMxX3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBicmllZiAgQ29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBRMTUgdmVjdG9yIHRvIFE3IHZlY3Rvci4KKyAgICogQHBhcmFtW2luXSAgcFNyYyAgICAgICBpcyBpbnB1dCBwb2ludGVyCisgICAqIEBwYXJhbVtvdXRdIHBEc3QgICAgICAgaXMgb3V0cHV0IHBvaW50ZXIKKyAgICogQHBhcmFtW2luXSAgYmxvY2tTaXplICBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcHJvY2VzcworICAgKi8KKyAgdm9pZCBhcm1fcTE1X3RvX3E3KAorICBxMTVfdCAqIHBTcmMsCisgIHE3X3QgKiBwRHN0LAorICB1aW50MzJfdCBibG9ja1NpemUpOworCisKKyAgLyoqCisgICAqIEBpbmdyb3VwIGdyb3VwSW50ZXJwb2xhdGlvbgorICAgKi8KKworICAvKioKKyAgICogQGRlZmdyb3VwIEJpbGluZWFySW50ZXJwb2xhdGUgQmlsaW5lYXIgSW50ZXJwb2xhdGlvbgorICAgKgorICAgKiBCaWxpbmVhciBpbnRlcnBvbGF0aW9uIGlzIGFuIGV4dGVuc2lvbiBvZiBsaW5lYXIgaW50ZXJwb2xhdGlvbiBhcHBsaWVkIHRvIGEgdHdvIGRpbWVuc2lvbmFsIGdyaWQuCisgICAqIFRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIDxjb2RlPmYoeCwgeSk8L2NvZGU+IGlzIHNhbXBsZWQgb24gYSByZWd1bGFyIGdyaWQgYW5kIHRoZSBpbnRlcnBvbGF0aW9uIHByb2Nlc3MKKyAgICogZGV0ZXJtaW5lcyB2YWx1ZXMgYmV0d2VlbiB0aGUgZ3JpZCBwb2ludHMuCisgICAqIEJpbGluZWFyIGludGVycG9sYXRpb24gaXMgZXF1aXZhbGVudCB0byB0d28gc3RlcCBsaW5lYXIgaW50ZXJwb2xhdGlvbiwgZmlyc3QgaW4gdGhlIHgtZGltZW5zaW9uIGFuZCB0aGVuIGluIHRoZSB5LWRpbWVuc2lvbi4KKyAgICogQmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyBvZnRlbiB1c2VkIGluIGltYWdlIHByb2Nlc3NpbmcgdG8gcmVzY2FsZSBpbWFnZXMuCisgICAqIFRoZSBDTVNJUyBEU1AgbGlicmFyeSBwcm92aWRlcyBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBmb3IgUTcsIFExNSwgUTMxLCBhbmQgZmxvYXRpbmctcG9pbnQgZGF0YSB0eXBlcy4KKyAgICoKKyAgICogPGI+QWxnb3JpdGhtPC9iPgorICAgKiBccGFyCisgICAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgZGVzY3JpYmVzIGEgdHdvIGRpbWVuc2lvbmFsIGRhdGEgdGFibGUuCisgICAqIEZvciBmbG9hdGluZy1wb2ludCwgdGhlIGluc3RhbmNlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzOgorICAgKiA8cHJlPgorICAgKiAgIHR5cGVkZWYgc3RydWN0CisgICAqICAgeworICAgKiAgICAgdWludDE2X3QgbnVtUm93czsKKyAgICogICAgIHVpbnQxNl90IG51bUNvbHM7CisgICAqICAgICBmbG9hdDMyX3QgKnBEYXRhOworICAgKiB9IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfZjMyOworICAgKiA8L3ByZT4KKyAgICoKKyAgICogXHBhcgorICAgKiB3aGVyZSA8Y29kZT5udW1Sb3dzPC9jb2RlPiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZTsKKyAgICogPGNvZGU+bnVtQ29sczwvY29kZT4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGFibGU7CisgICAqIGFuZCA8Y29kZT5wRGF0YTwvY29kZT4gcG9pbnRzIHRvIGFuIGFycmF5IG9mIHNpemUgPGNvZGU+bnVtUm93cypudW1Db2xzPC9jb2RlPiB2YWx1ZXMuCisgICAqIFRoZSBkYXRhIHRhYmxlIDxjb2RlPnBUYWJsZTwvY29kZT4gaXMgb3JnYW5pemVkIGluIHJvdyBvcmRlciBhbmQgdGhlIHN1cHBsaWVkIGRhdGEgdmFsdWVzIGZhbGwgb24gaW50ZWdlciBpbmRleGVzLgorICAgKiBUaGF0IGlzLCB0YWJsZSBlbGVtZW50ICh4LHkpIGlzIGxvY2F0ZWQgYXQgPGNvZGU+cFRhYmxlW3ggKyB5Km51bUNvbHNdPC9jb2RlPiB3aGVyZSB4IGFuZCB5IGFyZSBpbnRlZ2Vycy4KKyAgICoKKyAgICogXHBhcgorICAgKiBMZXQgPGNvZGU+KHgsIHkpPC9jb2RlPiBzcGVjaWZ5IHRoZSBkZXNpcmVkIGludGVycG9sYXRpb24gcG9pbnQuICBUaGVuIGRlZmluZToKKyAgICogPHByZT4KKyAgICogICAgIFhGID0gZmxvb3IoeCkKKyAgICogICAgIFlGID0gZmxvb3IoeSkKKyAgICogPC9wcmU+CisgICAqIFxwYXIKKyAgICogVGhlIGludGVycG9sYXRlZCBvdXRwdXQgcG9pbnQgaXMgY29tcHV0ZWQgYXM6CisgICAqIDxwcmU+CisgICAqICBmKHgsIHkpID0gZihYRiwgWUYpICogKDEtKHgtWEYpKSAqICgxLSh5LVlGKSkKKyAgICogICAgICAgICAgICsgZihYRisxLCBZRikgKiAoeC1YRikqKDEtKHktWUYpKQorICAgKiAgICAgICAgICAgKyBmKFhGLCBZRisxKSAqICgxLSh4LVhGKSkqKHktWUYpCisgICAqICAgICAgICAgICArIGYoWEYrMSwgWUYrMSkgKiAoeC1YRikqKHktWUYpCisgICAqIDwvcHJlPgorICAgKiBOb3RlIHRoYXQgdGhlIGNvb3JkaW5hdGVzICh4LCB5KSBjb250YWluIGludGVnZXIgYW5kIGZyYWN0aW9uYWwgY29tcG9uZW50cy4KKyAgICogVGhlIGludGVnZXIgY29tcG9uZW50cyBzcGVjaWZ5IHdoaWNoIHBvcnRpb24gb2YgdGhlIHRhYmxlIHRvIHVzZSB3aGlsZSB0aGUKKyAgICogZnJhY3Rpb25hbCBjb21wb25lbnRzIGNvbnRyb2wgdGhlIGludGVycG9sYXRpb24gcHJvY2Vzc29yLgorICAgKgorICAgKiBccGFyCisgICAqIGlmICh4LHkpIGFyZSBvdXRzaWRlIG9mIHRoZSB0YWJsZSBib3VuZGFyeSwgQmlsaW5lYXIgaW50ZXJwb2xhdGlvbiByZXR1cm5zIHplcm8gb3V0cHV0LgorICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgQmlsaW5lYXJJbnRlcnBvbGF0ZQorICAgKiBAeworICAgKi8KKworCisgIC8qKgorICAqCisgICogQGJyaWVmICBGbG9hdGluZy1wb2ludCBiaWxpbmVhciBpbnRlcnBvbGF0aW9uLgorICAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuCisgICogQHBhcmFtW2luXSAgICAgWCAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlLgorICAqIEBwYXJhbVtpbl0gICAgIFkgIGludGVycG9sYXRpb24gY29vcmRpbmF0ZS4KKyAgKiBAcmV0dXJuIG91dCBpbnRlcnBvbGF0ZWQgdmFsdWUuCisgICovCisgIHN0YXRpYyBfX0lOTElORSBmbG9hdDMyX3QgYXJtX2JpbGluZWFyX2ludGVycF9mMzIoCisgIGNvbnN0IGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfZjMyICogUywKKyAgZmxvYXQzMl90IFgsCisgIGZsb2F0MzJfdCBZKQorICB7CisgICAgZmxvYXQzMl90IG91dDsKKyAgICBmbG9hdDMyX3QgZjAwLCBmMDEsIGYxMCwgZjExOworICAgIGZsb2F0MzJfdCAqcERhdGEgPSBTLT5wRGF0YTsKKyAgICBpbnQzMl90IHhJbmRleCwgeUluZGV4LCBpbmRleDsKKyAgICBmbG9hdDMyX3QgeGRpZmYsIHlkaWZmOworICAgIGZsb2F0MzJfdCBiMSwgYjIsIGIzLCBiNDsKKworICAgIHhJbmRleCA9IChpbnQzMl90KSBYOworICAgIHlJbmRleCA9IChpbnQzMl90KSBZOworCisgICAgLyogQ2FyZSB0YWtlbiBmb3IgdGFibGUgb3V0c2lkZSBib3VuZGFyeSAqLworICAgIC8qIFJldHVybnMgemVybyBvdXRwdXQgd2hlbiB2YWx1ZXMgYXJlIG91dHNpZGUgdGFibGUgYm91bmRhcnkgKi8KKyAgICBpZih4SW5kZXggPCAwIHx8IHhJbmRleCA+IChTLT5udW1Sb3dzIC0gMSkgfHwgeUluZGV4IDwgMCB8fCB5SW5kZXggPiAoUy0+bnVtQ29scyAtIDEpKQorICAgIHsKKyAgICAgIHJldHVybiAoMCk7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRpb24gb2YgaW5kZXggZm9yIHR3byBuZWFyZXN0IHBvaW50cyBpbiBYLWRpcmVjdGlvbiAqLworICAgIGluZGV4ID0gKHhJbmRleCAtIDEpICsgKHlJbmRleCAtIDEpICogUy0+bnVtQ29sczsKKworCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBwb2ludHMgaW4gWC1kaXJlY3Rpb24gKi8KKyAgICBmMDAgPSBwRGF0YVtpbmRleF07CisgICAgZjAxID0gcERhdGFbaW5kZXggKyAxXTsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIGluZGV4IGZvciB0d28gbmVhcmVzdCBwb2ludHMgaW4gWS1kaXJlY3Rpb24gKi8KKyAgICBpbmRleCA9ICh4SW5kZXggLSAxKSArICh5SW5kZXgpICogUy0+bnVtQ29sczsKKworCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBwb2ludHMgaW4gWS1kaXJlY3Rpb24gKi8KKyAgICBmMTAgPSBwRGF0YVtpbmRleF07CisgICAgZjExID0gcERhdGFbaW5kZXggKyAxXTsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIGludGVybWVkaWF0ZSB2YWx1ZXMgKi8KKyAgICBiMSA9IGYwMDsKKyAgICBiMiA9IGYwMSAtIGYwMDsKKyAgICBiMyA9IGYxMCAtIGYwMDsKKyAgICBiNCA9IGYwMCAtIGYwMSAtIGYxMCArIGYxMTsKKworICAgIC8qIENhbGN1bGF0aW9uIG9mIGZyYWN0aW9uYWwgcGFydCBpbiBYICovCisgICAgeGRpZmYgPSBYIC0geEluZGV4OworCisgICAgLyogQ2FsY3VsYXRpb24gb2YgZnJhY3Rpb25hbCBwYXJ0IGluIFkgKi8KKyAgICB5ZGlmZiA9IFkgLSB5SW5kZXg7CisKKyAgICAvKiBDYWxjdWxhdGlvbiBvZiBiaS1saW5lYXIgaW50ZXJwb2xhdGVkIG91dHB1dCAqLworICAgIG91dCA9IGIxICsgYjIgKiB4ZGlmZiArIGIzICogeWRpZmYgKyBiNCAqIHhkaWZmICogeWRpZmY7CisKKyAgICAvKiByZXR1cm4gdG8gYXBwbGljYXRpb24gKi8KKyAgICByZXR1cm4gKG91dCk7CisgIH0KKworCisgIC8qKgorICAqCisgICogQGJyaWVmICBRMzEgYmlsaW5lYXIgaW50ZXJwb2xhdGlvbi4KKyAgKiBAcGFyYW1baW4sb3V0XSBTICBwb2ludHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVycG9sYXRpb24gc3RydWN0dXJlLgorICAqIEBwYXJhbVtpbl0gICAgIFggIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuCisgICogQHBhcmFtW2luXSAgICAgWSAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4KKyAgKiBAcmV0dXJuIG91dCBpbnRlcnBvbGF0ZWQgdmFsdWUuCisgICovCisgIHN0YXRpYyBfX0lOTElORSBxMzFfdCBhcm1fYmlsaW5lYXJfaW50ZXJwX3EzMSgKKyAgYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xMzEgKiBTLAorICBxMzFfdCBYLAorICBxMzFfdCBZKQorICB7CisgICAgcTMxX3Qgb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IG91dHB1dCAqLworICAgIHEzMV90IGFjYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLworICAgIHEzMV90IHhmcmFjdCwgeWZyYWN0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFgsIFkgZnJhY3Rpb25hbCBwYXJ0cyAqLworICAgIHEzMV90IHgxLCB4MiwgeTEsIHkyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lYXJlc3Qgb3V0cHV0IHZhbHVlcyAqLworICAgIGludDMyX3QgckksIGNJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvdyBhbmQgY29sdW1uIGluZGljZXMgKi8KKyAgICBxMzFfdCAqcFlEYXRhID0gUy0+cERhdGE7ICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIG91dHB1dCB0YWJsZSB2YWx1ZXMgKi8KKyAgICB1aW50MzJfdCBuQ29scyA9IFMtPm51bUNvbHM7ICAgICAgICAgICAgICAgICAvKiBudW0gb2Ygcm93cyAqLworCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8KKyAgICBySSA9ICgoWCAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7CisKKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworICAgIGNJID0gKChZICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsKKworICAgIC8qIENhcmUgdGFrZW4gZm9yIHRhYmxlIG91dHNpZGUgYm91bmRhcnkgKi8KKyAgICAvKiBSZXR1cm5zIHplcm8gb3V0cHV0IHdoZW4gdmFsdWVzIGFyZSBvdXRzaWRlIHRhYmxlIGJvdW5kYXJ5ICovCisgICAgaWYockkgPCAwIHx8IHJJID4gKFMtPm51bVJvd3MgLSAxKSB8fCBjSSA8IDAgfHwgY0kgPiAoUy0+bnVtQ29scyAtIDEpKQorICAgIHsKKyAgICAgIHJldHVybiAoMCk7CisgICAgfQorCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLworICAgIC8qIHNoaWZ0IGxlZnQgeGZyYWN0IGJ5IDExIHRvIGtlZXAgMS4zMSBmb3JtYXQgKi8KKyAgICB4ZnJhY3QgPSAoWCAmIDB4MDAwRkZGRkYpIDw8IDExdTsKKworICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLworICAgIHgxID0gcFlEYXRhWyhySSkgKyAoaW50MzJfdCluQ29scyAqIChjSSkgICAgXTsKKyAgICB4MiA9IHBZRGF0YVsockkpICsgKGludDMyX3QpbkNvbHMgKiAoY0kpICsgMV07CisKKyAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgLyogc2hpZnQgbGVmdCB5ZnJhY3QgYnkgMTEgdG8ga2VlcCAxLjMxIGZvcm1hdCAqLworICAgIHlmcmFjdCA9IChZICYgMHgwMDBGRkZGRikgPDwgMTF1OworCisgICAgLyogUmVhZCB0d28gbmVhcmVzdCBvdXRwdXQgdmFsdWVzIGZyb20gdGhlIGluZGV4ICovCisgICAgeTEgPSBwWURhdGFbKHJJKSArIChpbnQzMl90KW5Db2xzICogKGNJICsgMSkgICAgXTsKKyAgICB5MiA9IHBZRGF0YVsockkpICsgKGludDMyX3QpbkNvbHMgKiAoY0kgKyAxKSArIDFdOworCisgICAgLyogQ2FsY3VsYXRpb24gb2YgeDEgKiAoMS14ZnJhY3QgKSAqICgxLXlmcmFjdCkgYW5kIGFjYyBpcyBpbiAzLjI5KHEyOSkgZm9ybWF0ICovCisgICAgb3V0ID0gKChxMzFfdCkgKCgocTYzX3QpIHgxICAqICgweDdGRkZGRkZGIC0geGZyYWN0KSkgPj4gMzIpKTsKKyAgICBhY2MgPSAoKHEzMV90KSAoKChxNjNfdCkgb3V0ICogKDB4N0ZGRkZGRkYgLSB5ZnJhY3QpKSA+PiAzMikpOworCisgICAgLyogeDIgKiAoeGZyYWN0KSAqICgxLXlmcmFjdCkgIGluIDMuMjkocTI5KSBhbmQgYWRkaW5nIHRvIGFjYyAqLworICAgIG91dCA9ICgocTMxX3QpICgocTYzX3QpIHgyICogKDB4N0ZGRkZGRkYgLSB5ZnJhY3QpID4+IDMyKSk7CisgICAgYWNjICs9ICgocTMxX3QpICgocTYzX3QpIG91dCAqICh4ZnJhY3QpID4+IDMyKSk7CisKKyAgICAvKiB5MSAqICgxIC0geGZyYWN0KSAqICh5ZnJhY3QpICBpbiAzLjI5KHEyOSkgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAoKHEzMV90KSAoKHE2M190KSB5MSAqICgweDdGRkZGRkZGIC0geGZyYWN0KSA+PiAzMikpOworICAgIGFjYyArPSAoKHEzMV90KSAoKHE2M190KSBvdXQgKiAoeWZyYWN0KSA+PiAzMikpOworCisgICAgLyogeTIgKiAoeGZyYWN0KSAqICh5ZnJhY3QpICBpbiAzLjI5KHEyOSkgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAoKHEzMV90KSAoKHE2M190KSB5MiAqICh4ZnJhY3QpID4+IDMyKSk7CisgICAgYWNjICs9ICgocTMxX3QpICgocTYzX3QpIG91dCAqICh5ZnJhY3QpID4+IDMyKSk7CisKKyAgICAvKiBDb252ZXJ0IGFjYyB0byAxLjMxKHEzMSkgZm9ybWF0ICovCisgICAgcmV0dXJuICgocTMxX3QpKGFjYyA8PCAyKSk7CisgIH0KKworCisgIC8qKgorICAqIEBicmllZiAgUTE1IGJpbGluZWFyIGludGVycG9sYXRpb24uCisgICogQHBhcmFtW2luLG91dF0gUyAgcG9pbnRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBpbnRlcnBvbGF0aW9uIHN0cnVjdHVyZS4KKyAgKiBAcGFyYW1baW5dICAgICBYICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0LgorICAqIEBwYXJhbVtpbl0gICAgIFkgIGludGVycG9sYXRpb24gY29vcmRpbmF0ZSBpbiAxMi4yMCBmb3JtYXQuCisgICogQHJldHVybiBvdXQgaW50ZXJwb2xhdGVkIHZhbHVlLgorICAqLworICBzdGF0aWMgX19JTkxJTkUgcTE1X3QgYXJtX2JpbGluZWFyX2ludGVycF9xMTUoCisgIGFybV9iaWxpbmVhcl9pbnRlcnBfaW5zdGFuY2VfcTE1ICogUywKKyAgcTMxX3QgWCwKKyAgcTMxX3QgWSkKKyAgeworICAgIHE2M190IGFjYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCAqLworICAgIHEzMV90IG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBvdXRwdXQgKi8KKyAgICBxMTVfdCB4MSwgeDIsIHkxLCB5MjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWFyZXN0IG91dHB1dCB2YWx1ZXMgKi8KKyAgICBxMzFfdCB4ZnJhY3QsIHlmcmFjdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLCBZIGZyYWN0aW9uYWwgcGFydHMgKi8KKyAgICBpbnQzMl90IHJJLCBjSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3cgYW5kIGNvbHVtbiBpbmRpY2VzICovCisgICAgcTE1X3QgKnBZRGF0YSA9IFMtPnBEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBvdXRwdXQgdGFibGUgdmFsdWVzICovCisgICAgdWludDMyX3QgbkNvbHMgPSBTLT5udW1Db2xzOyAgICAgICAgICAgICAgICAgLyogbnVtIG9mIHJvd3MgKi8KKworICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLworICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovCisgICAgckkgPSAoKFggJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOworCisgICAgLyogSW5wdXQgaXMgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgLyogMTIgYml0cyBmb3IgdGhlIHRhYmxlIGluZGV4ICovCisgICAgLyogSW5kZXggdmFsdWUgY2FsY3VsYXRpb24gKi8KKyAgICBjSSA9ICgoWSAmIChxMzFfdCkweEZGRjAwMDAwKSA+PiAyMCk7CisKKyAgICAvKiBDYXJlIHRha2VuIGZvciB0YWJsZSBvdXRzaWRlIGJvdW5kYXJ5ICovCisgICAgLyogUmV0dXJucyB6ZXJvIG91dHB1dCB3aGVuIHZhbHVlcyBhcmUgb3V0c2lkZSB0YWJsZSBib3VuZGFyeSAqLworICAgIGlmKHJJIDwgMCB8fCBySSA+IChTLT5udW1Sb3dzIC0gMSkgfHwgY0kgPCAwIHx8IGNJID4gKFMtPm51bUNvbHMgLSAxKSkKKyAgICB7CisgICAgICByZXR1cm4gKDApOworICAgIH0KKworICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICAvKiB4ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLworICAgIHhmcmFjdCA9IChYICYgMHgwMDBGRkZGRik7CisKKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8KKyAgICB4MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgICAgXTsKKyAgICB4MiA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSkgKyAxXTsKKworICAgIC8qIDIwIGJpdHMgZm9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICAvKiB5ZnJhY3Qgc2hvdWxkIGJlIGluIDEyLjIwIGZvcm1hdCAqLworICAgIHlmcmFjdCA9IChZICYgMHgwMDBGRkZGRik7CisKKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8KKyAgICB5MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSArIDEpICAgIF07CisgICAgeTIgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kgKyAxKSArIDFdOworCisgICAgLyogQ2FsY3VsYXRpb24gb2YgeDEgKiAoMS14ZnJhY3QgKSAqICgxLXlmcmFjdCkgYW5kIGFjYyBpcyBpbiAxMy41MSBmb3JtYXQgKi8KKworICAgIC8qIHgxIGlzIGluIDEuMTUocTE1KSwgeGZyYWN0IGluIDEyLjIwIGZvcm1hdCBhbmQgb3V0IGlzIGluIDEzLjM1IGZvcm1hdCAqLworICAgIC8qIGNvbnZlcnQgMTMuMzUgdG8gMTMuMzEgYnkgcmlnaHQgc2hpZnRpbmcgIGFuZCBvdXQgaXMgaW4gMS4zMSAqLworICAgIG91dCA9IChxMzFfdCkgKCgocTYzX3QpIHgxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSA+PiA0dSk7CisgICAgYWNjID0gKChxNjNfdCkgb3V0ICogKDB4RkZGRkYgLSB5ZnJhY3QpKTsKKworICAgIC8qIHgyICogKHhmcmFjdCkgKiAoMS15ZnJhY3QpICBpbiAxLjUxIGFuZCBhZGRpbmcgdG8gYWNjICovCisgICAgb3V0ID0gKHEzMV90KSAoKChxNjNfdCkgeDIgKiAoMHhGRkZGRiAtIHlmcmFjdCkpID4+IDR1KTsKKyAgICBhY2MgKz0gKChxNjNfdCkgb3V0ICogKHhmcmFjdCkpOworCisgICAgLyogeTEgKiAoMSAtIHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMS41MSBhbmQgYWRkaW5nIHRvIGFjYyAqLworICAgIG91dCA9IChxMzFfdCkgKCgocTYzX3QpIHkxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSA+PiA0dSk7CisgICAgYWNjICs9ICgocTYzX3QpIG91dCAqICh5ZnJhY3QpKTsKKworICAgIC8qIHkyICogKHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMS41MSBhbmQgYWRkaW5nIHRvIGFjYyAqLworICAgIG91dCA9IChxMzFfdCkgKCgocTYzX3QpIHkyICogKHhmcmFjdCkpID4+IDR1KTsKKyAgICBhY2MgKz0gKChxNjNfdCkgb3V0ICogKHlmcmFjdCkpOworCisgICAgLyogYWNjIGlzIGluIDEzLjUxIGZvcm1hdCBhbmQgZG93biBzaGlmdCBhY2MgYnkgMzYgdGltZXMgKi8KKyAgICAvKiBDb252ZXJ0IG91dCB0byAxLjE1IGZvcm1hdCAqLworICAgIHJldHVybiAoKHExNV90KShhY2MgPj4gMzYpKTsKKyAgfQorCisKKyAgLyoqCisgICogQGJyaWVmICBRNyBiaWxpbmVhciBpbnRlcnBvbGF0aW9uLgorICAqIEBwYXJhbVtpbixvdXRdIFMgIHBvaW50cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJ1Y3R1cmUuCisgICogQHBhcmFtW2luXSAgICAgWCAgaW50ZXJwb2xhdGlvbiBjb29yZGluYXRlIGluIDEyLjIwIGZvcm1hdC4KKyAgKiBAcGFyYW1baW5dICAgICBZICBpbnRlcnBvbGF0aW9uIGNvb3JkaW5hdGUgaW4gMTIuMjAgZm9ybWF0LgorICAqIEByZXR1cm4gb3V0IGludGVycG9sYXRlZCB2YWx1ZS4KKyAgKi8KKyAgc3RhdGljIF9fSU5MSU5FIHE3X3QgYXJtX2JpbGluZWFyX2ludGVycF9xNygKKyAgYXJtX2JpbGluZWFyX2ludGVycF9pbnN0YW5jZV9xNyAqIFMsCisgIHEzMV90IFgsCisgIHEzMV90IFkpCisgIHsKKyAgICBxNjNfdCBhY2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgKi8KKyAgICBxMzFfdCBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3Jhcnkgb3V0cHV0ICovCisgICAgcTMxX3QgeGZyYWN0LCB5ZnJhY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgLyogWCwgWSBmcmFjdGlvbmFsIHBhcnRzICovCisgICAgcTdfdCB4MSwgeDIsIHkxLCB5MjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVhcmVzdCBvdXRwdXQgdmFsdWVzICovCisgICAgaW50MzJfdCBySSwgY0k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUm93IGFuZCBjb2x1bW4gaW5kaWNlcyAqLworICAgIHE3X3QgKnBZRGF0YSA9IFMtPnBEYXRhOyAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gb3V0cHV0IHRhYmxlIHZhbHVlcyAqLworICAgIHVpbnQzMl90IG5Db2xzID0gUy0+bnVtQ29sczsgICAgICAgICAgICAgICAgIC8qIG51bSBvZiByb3dzICovCisKKyAgICAvKiBJbnB1dCBpcyBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICAvKiAxMiBiaXRzIGZvciB0aGUgdGFibGUgaW5kZXggKi8KKyAgICAvKiBJbmRleCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworICAgIHJJID0gKChYICYgKHEzMV90KTB4RkZGMDAwMDApID4+IDIwKTsKKworICAgIC8qIElucHV0IGlzIGluIDEyLjIwIGZvcm1hdCAqLworICAgIC8qIDEyIGJpdHMgZm9yIHRoZSB0YWJsZSBpbmRleCAqLworICAgIC8qIEluZGV4IHZhbHVlIGNhbGN1bGF0aW9uICovCisgICAgY0kgPSAoKFkgJiAocTMxX3QpMHhGRkYwMDAwMCkgPj4gMjApOworCisgICAgLyogQ2FyZSB0YWtlbiBmb3IgdGFibGUgb3V0c2lkZSBib3VuZGFyeSAqLworICAgIC8qIFJldHVybnMgemVybyBvdXRwdXQgd2hlbiB2YWx1ZXMgYXJlIG91dHNpZGUgdGFibGUgYm91bmRhcnkgKi8KKyAgICBpZihySSA8IDAgfHwgckkgPiAoUy0+bnVtUm93cyAtIDEpIHx8IGNJIDwgMCB8fCBjSSA+IChTLT5udW1Db2xzIC0gMSkpCisgICAgeworICAgICAgcmV0dXJuICgwKTsKKyAgICB9CisKKyAgICAvKiAyMCBiaXRzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgLyogeGZyYWN0IHNob3VsZCBiZSBpbiAxMi4yMCBmb3JtYXQgKi8KKyAgICB4ZnJhY3QgPSAoWCAmIChxMzFfdCkweDAwMEZGRkZGKTsKKworICAgIC8qIFJlYWQgdHdvIG5lYXJlc3Qgb3V0cHV0IHZhbHVlcyBmcm9tIHRoZSBpbmRleCAqLworICAgIHgxID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJKSAgICBdOworICAgIHgyID0gcFlEYXRhWygodWludDMyX3QpckkpICsgbkNvbHMgKiAoKHVpbnQzMl90KWNJKSArIDFdOworCisgICAgLyogMjAgYml0cyBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCAqLworICAgIC8qIHlmcmFjdCBzaG91bGQgYmUgaW4gMTIuMjAgZm9ybWF0ICovCisgICAgeWZyYWN0ID0gKFkgJiAocTMxX3QpMHgwMDBGRkZGRik7CisKKyAgICAvKiBSZWFkIHR3byBuZWFyZXN0IG91dHB1dCB2YWx1ZXMgZnJvbSB0aGUgaW5kZXggKi8KKyAgICB5MSA9IHBZRGF0YVsoKHVpbnQzMl90KXJJKSArIG5Db2xzICogKCh1aW50MzJfdCljSSArIDEpICAgIF07CisgICAgeTIgPSBwWURhdGFbKCh1aW50MzJfdClySSkgKyBuQ29scyAqICgodWludDMyX3QpY0kgKyAxKSArIDFdOworCisgICAgLyogQ2FsY3VsYXRpb24gb2YgeDEgKiAoMS14ZnJhY3QgKSAqICgxLXlmcmFjdCkgYW5kIGFjYyBpcyBpbiAxNi40NyBmb3JtYXQgKi8KKyAgICBvdXQgPSAoKHgxICogKDB4RkZGRkYgLSB4ZnJhY3QpKSk7CisgICAgYWNjID0gKCgocTYzX3QpIG91dCAqICgweEZGRkZGIC0geWZyYWN0KSkpOworCisgICAgLyogeDIgKiAoeGZyYWN0KSAqICgxLXlmcmFjdCkgIGluIDIuMjIgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAoKHgyICogKDB4RkZGRkYgLSB5ZnJhY3QpKSk7CisgICAgYWNjICs9ICgoKHE2M190KSBvdXQgKiAoeGZyYWN0KSkpOworCisgICAgLyogeTEgKiAoMSAtIHhmcmFjdCkgKiAoeWZyYWN0KSAgaW4gMi4yMiBhbmQgYWRkaW5nIHRvIGFjYyAqLworICAgIG91dCA9ICgoeTEgKiAoMHhGRkZGRiAtIHhmcmFjdCkpKTsKKyAgICBhY2MgKz0gKCgocTYzX3QpIG91dCAqICh5ZnJhY3QpKSk7CisKKyAgICAvKiB5MiAqICh4ZnJhY3QpICogKHlmcmFjdCkgIGluIDIuMjIgYW5kIGFkZGluZyB0byBhY2MgKi8KKyAgICBvdXQgPSAoKHkyICogKHlmcmFjdCkpKTsKKyAgICBhY2MgKz0gKCgocTYzX3QpIG91dCAqICh4ZnJhY3QpKSk7CisKKyAgICAvKiBhY2MgaW4gMTYuNDcgZm9ybWF0IGFuZCBkb3duIHNoaWZ0IGJ5IDQwIHRvIGNvbnZlcnQgdG8gMS43IGZvcm1hdCAqLworICAgIHJldHVybiAoKHE3X3QpKGFjYyA+PiA0MCkpOworICB9CisKKyAgLyoqCisgICAqIEB9IGVuZCBvZiBCaWxpbmVhckludGVycG9sYXRlIGdyb3VwCisgICAqLworCisKKy8qIFNNTUxBUiAqLworI2RlZmluZSBtdWx0QWNjXzMyeDMyX2tlZXAzMl9SKGEsIHgsIHkpIFwKKyAgICBhID0gKHEzMV90KSAoKCgoKHE2M190KSBhKSA8PCAzMikgKyAoKHE2M190KSB4ICogeSkgKyAweDgwMDAwMDAwTEwgKSA+PiAzMikKKworLyogU01NTFNSICovCisjZGVmaW5lIG11bHRTdWJfMzJ4MzJfa2VlcDMyX1IoYSwgeCwgeSkgXAorICAgIGEgPSAocTMxX3QpICgoKCgocTYzX3QpIGEpIDw8IDMyKSAtICgocTYzX3QpIHggKiB5KSArIDB4ODAwMDAwMDBMTCApID4+IDMyKQorCisvKiBTTU1VTFIgKi8KKyNkZWZpbmUgbXVsdF8zMngzMl9rZWVwMzJfUihhLCB4LCB5KSBcCisgICAgYSA9IChxMzFfdCkgKCgocTYzX3QpIHggKiB5ICsgMHg4MDAwMDAwMExMICkgPj4gMzIpCisKKy8qIFNNTUxBICovCisjZGVmaW5lIG11bHRBY2NfMzJ4MzJfa2VlcDMyKGEsIHgsIHkpIFwKKyAgICBhICs9IChxMzFfdCkgKCgocTYzX3QpIHggKiB5KSA+PiAzMikKKworLyogU01NTFMgKi8KKyNkZWZpbmUgbXVsdFN1Yl8zMngzMl9rZWVwMzIoYSwgeCwgeSkgXAorICAgIGEgLT0gKHEzMV90KSAoKChxNjNfdCkgeCAqIHkpID4+IDMyKQorCisvKiBTTU1VTCAqLworI2RlZmluZSBtdWx0XzMyeDMyX2tlZXAzMihhLCB4LCB5KSBcCisgICAgYSA9IChxMzFfdCkgKCgocTYzX3QpIHggKiB5ICkgPj4gMzIpCisKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgIC8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjaWYgZGVmaW5lZCggQVJNX01BVEhfQ000ICkgfHwgZGVmaW5lZCggQVJNX01BVEhfQ003KQorICAgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUiBcCisgICAgICAgX1ByYWdtYSAoInB1c2giKSAgICAgICAgIFwKKyAgICAgICBfUHJhZ21hICgiTzEiKQorICAjZWxzZQorICAgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZW5kaWYKKworICAvKiBFeGl0IGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWZ0ZXIgZW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyAgI2lmIGRlZmluZWQoIEFSTV9NQVRIX0NNNCApIHx8IGRlZmluZWQoIEFSTV9NQVRIX0NNNykKKyAgICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVCBcCisgICAgICAgX1ByYWdtYSAoInBvcCIpCisgICNlbHNlCisgICAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQKKyAgI2VuZGlmCisKKyAgLyogRW50ZXIgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhYm92ZSBmdW5jdGlvbiBkZWZpbml0aW9uICovCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUgorCisgIC8qIEV4aXQgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhZnRlciBlbmQgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVAorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIKKyAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQKKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUCisKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUiBfX2F0dHJpYnV0ZV9fKCggb3B0aW1pemUoIi1PMSIpICkpCisgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FWElUCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVAorCisjZWxpZiBkZWZpbmVkKF9fSUNDQVJNX18pCisgIC8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjaWYgZGVmaW5lZCggQVJNX01BVEhfQ000ICkgfHwgZGVmaW5lZCggQVJNX01BVEhfQ003KQorICAgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUiBcCisgICAgICAgX1ByYWdtYSAoIm9wdGltaXplPWxvdyIpCisgICNlbHNlCisgICAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNlbmRpZgorCisgIC8qIEV4aXQgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhZnRlciBlbmQgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVAorCisgIC8qIEVudGVyIGxvdyBvcHRpbWl6YXRpb24gcmVnaW9uIC0gcGxhY2UgZGlyZWN0bHkgYWJvdmUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjaWYgZGVmaW5lZCggQVJNX01BVEhfQ000ICkgfHwgZGVmaW5lZCggQVJNX01BVEhfQ003KQorICAgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FTlRFUiBcCisgICAgICAgX1ByYWdtYSAoIm9wdGltaXplPWxvdyIpCisgICNlbHNlCisgICAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNlbmRpZgorCisgIC8qIEV4aXQgbG93IG9wdGltaXphdGlvbiByZWdpb24gLSBwbGFjZSBkaXJlY3RseSBhZnRlciBlbmQgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRVhJVAorCisjZWxpZiBkZWZpbmVkKF9fQ1NNQ19fKQorICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRU5URVIKKyAgI2RlZmluZSBMT1dfT1BUSU1JWkFUSU9OX0VYSVQKKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VOVEVSCisgICNkZWZpbmUgSUFSX09OTFlfTE9XX09QVElNSVpBVElPTl9FWElUCisKKyNlbGlmIGRlZmluZWQoX19UQVNLSU5HX18pCisgICNkZWZpbmUgTE9XX09QVElNSVpBVElPTl9FTlRFUgorICAjZGVmaW5lIExPV19PUFRJTUlaQVRJT05fRVhJVAorICAjZGVmaW5lIElBUl9PTkxZX0xPV19PUFRJTUlaQVRJT05fRU5URVIKKyAgI2RlZmluZSBJQVJfT05MWV9MT1dfT1BUSU1JWkFUSU9OX0VYSVQKKworI2VuZGlmCisKKworI2lmZGVmICAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYgLyogX0FSTV9NQVRIX0ggKi8KKworLyoqCisgKgorICogRW5kIG9mIGZpbGUuCisgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2Ntc2lzX2FybWNjLmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jbXNpc19hcm1jYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzQ5YzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jbXNpc19hcm1jYy5oCkBAIC0wLDAgKzEsNzM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY21zaXNfYXJtY2MuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIENvcmUgRnVuY3Rpb24vSW5zdHJ1Y3Rpb24gSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmbmRlZiBfX0NNU0lTX0FSTUNDX0gKKyNkZWZpbmUgX19DTVNJU19BUk1DQ19ICisKKworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNDAwNjc3KQorICAjZXJyb3IgIlBsZWFzZSB1c2UgQVJNIENvbXBpbGVyIFRvb2xjaGFpbiBWNC4wLjY3NyBvciBsYXRlciEiCisjZW5kaWYKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgQ01TSVMgQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zCisgIEB7CisgKi8KKworLyogaW50cmluc2ljIHZvaWQgX19lbmFibGVfaXJxKCk7ICAgICAqLworLyogaW50cmluc2ljIHZvaWQgX19kaXNhYmxlX2lycSgpOyAgICAqLworCisvKioKKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgQ29udHJvbCBSZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0NPTlRST0wodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdDb250cm9sICAgICAgICAgX19BU00oImNvbnRyb2wiKTsKKyAgcmV0dXJuKF9fcmVnQ29udHJvbCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0NPTlRST0wodWludDMyX3QgY29udHJvbCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdDb250cm9sICAgICAgICAgX19BU00oImNvbnRyb2wiKTsKKyAgX19yZWdDb250cm9sID0gY29udHJvbDsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IElQU1IgUmVnaXN0ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgSVBTUiBSZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIElQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdJUFNSICAgICAgICAgIF9fQVNNKCJpcHNyIik7CisgIHJldHVybihfX3JlZ0lQU1IpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQVBTUiBSZWdpc3RlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBBUFNSIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQVBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQVBTUih2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0FQU1IgICAgICAgICAgX19BU00oImFwc3IiKTsKKyAgcmV0dXJuKF9fcmVnQVBTUik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIHhQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICB4UFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF94UFNSKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnWFBTUiAgICAgICAgICBfX0FTTSgieHBzciIpOworICByZXR1cm4oX19yZWdYUFNSKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1AgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BTUCh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1Byb2Nlc3NTdGFja1BvaW50ZXIgIF9fQVNNKCJwc3AiKTsKKyAgcmV0dXJuKF9fcmVnUHJvY2Vzc1N0YWNrUG9pbnRlcik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4KKyAgXHBhcmFtIFtpbl0gICAgdG9wT2ZQcm9jU3RhY2sgIFByb2Nlc3MgU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFNQKHVpbnQzMl90IHRvcE9mUHJvY1N0YWNrKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1Byb2Nlc3NTdGFja1BvaW50ZXIgIF9fQVNNKCJwc3AiKTsKKyAgX19yZWdQcm9jZXNzU3RhY2tQb2ludGVyID0gdG9wT2ZQcm9jU3RhY2s7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9NU1Aodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdNYWluU3RhY2tQb2ludGVyICAgICBfX0FTTSgibXNwIik7CisgIHJldHVybihfX3JlZ01haW5TdGFja1BvaW50ZXIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgTWFpbiBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkuCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mTWFpblN0YWNrICBNYWluIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X01TUCh1aW50MzJfdCB0b3BPZk1haW5TdGFjaykKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdNYWluU3RhY2tQb2ludGVyICAgICBfX0FTTSgibXNwIik7CisgIF9fcmVnTWFpblN0YWNrUG9pbnRlciA9IHRvcE9mTWFpblN0YWNrOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcmlvcml0eSBtYXNrIGJpdCBmcm9tIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFJJTUFTSyh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1ByaU1hc2sgICAgICAgICBfX0FTTSgicHJpbWFzayIpOworICByZXR1cm4oX19yZWdQcmlNYXNrKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFByaW9yaXR5IE1hc2sKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIHByaU1hc2sgIFByaW9yaXR5IE1hc2sKKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ1ByaU1hc2sgICAgICAgICBfX0FTTSgicHJpbWFzayIpOworICBfX3JlZ1ByaU1hc2sgPSAocHJpTWFzayk7Cit9CisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBGSVEKKyAgXGRldGFpbHMgRW5hYmxlcyBGSVEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgRi1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KKyNkZWZpbmUgX19lbmFibGVfZmF1bHRfaXJxICAgICAgICAgICAgICAgIF9fZW5hYmxlX2ZpcQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEZJUQorICBcZGV0YWlscyBEaXNhYmxlcyBGSVEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworI2RlZmluZSBfX2Rpc2FibGVfZmF1bHRfaXJxICAgICAgICAgICAgICAgX19kaXNhYmxlX2ZpcQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQmFzZSBQcmlvcml0eQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgQmFzZSBQcmlvcml0eSByZWdpc3RlciB2YWx1ZQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgIF9fZ2V0X0JBU0VQUkkodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgX19yZWdCYXNlUHJpICAgICAgICAgX19BU00oImJhc2VwcmkiKTsKKyAgcmV0dXJuKF9fcmVnQmFzZVByaSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJKHVpbnQzMl90IGJhc2VQcmkpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQmFzZVByaSAgICAgICAgIF9fQVNNKCJiYXNlcHJpIik7CisgIF9fcmVnQmFzZVByaSA9IChiYXNlUHJpICYgMHhGRlUpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgQmFzZSBQcmlvcml0eSB3aXRoIGNvbmRpdGlvbgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgQmFzZSBQcmlvcml0eSByZWdpc3RlciBvbmx5IGlmIEJBU0VQUkkgbWFza2luZyBpcyBkaXNhYmxlZCwKKyAgICAgICAgICAgb3IgdGhlIG5ldyB2YWx1ZSBpbmNyZWFzZXMgdGhlIEJBU0VQUkkgcHJpb3JpdHkgbGV2ZWwuCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0CisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUklfTUFYKHVpbnQzMl90IGJhc2VQcmkpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnQmFzZVByaU1heCAgICAgIF9fQVNNKCJiYXNlcHJpX21heCIpOworICBfX3JlZ0Jhc2VQcmlNYXggPSAoYmFzZVByaSAmIDB4RkZVKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEZhdWx0IE1hc2sKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEZhdWx0IE1hc2sgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCBfX3JlZ0ZhdWx0TWFzayAgICAgICBfX0FTTSgiZmF1bHRtYXNrIik7CisgIHJldHVybihfX3JlZ0ZhdWx0TWFzayk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBGYXVsdCBNYXNrCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGYXVsdCBNYXNrIHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0CisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZBVUxUTUFTSyh1aW50MzJfdCBmYXVsdE1hc2spCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnRmF1bHRNYXNrICAgICAgIF9fQVNNKCJmYXVsdG1hc2siKTsKKyAgX19yZWdGYXVsdE1hc2sgPSAoZmF1bHRNYXNrICYgKHVpbnQzMl90KTEpOworfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKSAqLworCisKKyNpZiAgICAgICAoX19DT1JURVhfTSA9PSAweDA0VSkgfHwgKF9fQ09SVEVYX00gPT0gMHgwN1UpCisKKy8qKgorICBcYnJpZWYgICBHZXQgRlBTQ1IKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB2YWx1ZQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRlBTQ1Iodm9pZCkKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnZnBzY3IgICAgICAgICBfX0FTTSgiZnBzY3IiKTsKKyAgcmV0dXJuKF9fcmVnZnBzY3IpOworI2Vsc2UKKyAgIHJldHVybigwVSk7CisjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZQU0NSCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldAorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9GUFNDUih1aW50MzJfdCBmcHNjcikKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIHJlZ2lzdGVyIHVpbnQzMl90IF9fcmVnZnBzY3IgICAgICAgICBfX0FTTSgiZnBzY3IiKTsKKyAgX19yZWdmcHNjciA9IChmcHNjcik7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID09IDB4MDRVKSB8fCAoX19DT1JURVhfTSA9PSAweDA3VSkgKi8KKworCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgQ01TSVMgQ29yZSBJbnN0cnVjdGlvbiBJbnRlcmZhY2UKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKy8qKgorICBcYnJpZWYgICBObyBPcGVyYXRpb24KKyAgXGRldGFpbHMgTm8gT3BlcmF0aW9uIGRvZXMgbm90aGluZy4gVGhpcyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCBmb3IgY29kZSBhbGlnbm1lbnQgcHVycG9zZXMuCisgKi8KKyNkZWZpbmUgX19OT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm9wCisKKworLyoqCisgIFxicmllZiAgIFdhaXQgRm9yIEludGVycnVwdAorICBcZGV0YWlscyBXYWl0IEZvciBJbnRlcnJ1cHQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLgorICovCisjZGVmaW5lIF9fV0ZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dmaQorCisKKy8qKgorICBcYnJpZWYgICBXYWl0IEZvciBFdmVudAorICBcZGV0YWlscyBXYWl0IEZvciBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBwZXJtaXRzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIKKyAgICAgICAgICAgYSBsb3ctcG93ZXIgc3RhdGUgdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuCisgKi8KKyNkZWZpbmUgX19XRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2ZlCisKKworLyoqCisgIFxicmllZiAgIFNlbmQgRXZlbnQKKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLgorICovCisjZGVmaW5lIF9fU0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NldgorCisKKy8qKgorICBcYnJpZWYgICBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllcgorICBcZGV0YWlscyBJbnN0cnVjdGlvbiBTeW5jaHJvbml6YXRpb24gQmFycmllciBmbHVzaGVzIHRoZSBwaXBlbGluZSBpbiB0aGUgcHJvY2Vzc29yLAorICAgICAgICAgICBzbyB0aGF0IGFsbCBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHRoZSBJU0IgYXJlIGZldGNoZWQgZnJvbSBjYWNoZSBvciBtZW1vcnksCisgICAgICAgICAgIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuCisgKi8KKyNkZWZpbmUgX19JU0IoKSBkbyB7XAorICAgICAgICAgICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpO1wKKyAgICAgICAgICAgICAgICAgICBfX2lzYigweEYpO1wKKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoMFUpCisKKy8qKgorICBcYnJpZWYgICBEYXRhIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyCisgIFxkZXRhaWxzIEFjdHMgYXMgYSBzcGVjaWFsIGtpbmQgb2YgRGF0YSBNZW1vcnkgQmFycmllci4KKyAgICAgICAgICAgSXQgY29tcGxldGVzIHdoZW4gYWxsIGV4cGxpY2l0IG1lbW9yeSBhY2Nlc3NlcyBiZWZvcmUgdGhpcyBpbnN0cnVjdGlvbiBjb21wbGV0ZS4KKyAqLworI2RlZmluZSBfX0RTQigpIGRvIHtcCisgICAgICAgICAgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7XAorICAgICAgICAgICAgICAgICAgIF9fZHNiKDB4Rik7XAorICAgICAgICAgICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpO1wKKyAgICAgICAgICAgICAgICB9IHdoaWxlICgwVSkKKworLyoqCisgIFxicmllZiAgIERhdGEgTWVtb3J5IEJhcnJpZXIKKyAgXGRldGFpbHMgRW5zdXJlcyB0aGUgYXBwYXJlbnQgb3JkZXIgb2YgdGhlIGV4cGxpY2l0IG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZQorICAgICAgICAgICBhbmQgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLCB3aXRob3V0IGVuc3VyaW5nIHRoZWlyIGNvbXBsZXRpb24uCisgKi8KKyNkZWZpbmUgX19ETUIoKSBkbyB7XAorICAgICAgICAgICAgICAgICAgIF9fc2NoZWR1bGVfYmFycmllcigpO1wKKyAgICAgICAgICAgICAgICAgICBfX2RtYigweEYpO1wKKyAgICAgICAgICAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTtcCisgICAgICAgICAgICAgICAgfSB3aGlsZSAoMFUpCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDMyIGJpdCkKKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gaW50ZWdlciB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmV2CisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciAoMTYgYml0KQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiB0d28gdW5zaWduZWQgc2hvcnQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworI2lmbmRlZiBfX05PX0VNQkVEREVEX0FTTQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJldjE2X3RleHQiKSkpIF9fU1RBVElDX0lOTElORSBfX0FTTSB1aW50MzJfdCBfX1JFVjE2KHVpbnQzMl90IHZhbHVlKQoreworICByZXYxNiByMCwgcjAKKyAgYnggbHIKK30KKyNlbmRpZgorCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyIGluIHNpZ25lZCBzaG9ydCB2YWx1ZQorICBcZGV0YWlscyBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBpbiBhIHNpZ25lZCBzaG9ydCB2YWx1ZSB3aXRoIHNpZ24gZXh0ZW5zaW9uIHRvIGludGVnZXIuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCisjaWZuZGVmIF9fTk9fRU1CRURERURfQVNNCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIucmV2c2hfdGV4dCIpKSkgX19TVEFUSUNfSU5MSU5FIF9fQVNNIGludDMyX3QgX19SRVZTSChpbnQzMl90IHZhbHVlKQoreworICByZXZzaCByMCwgcjAKKyAgYnggbHIKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgaW4gdW5zaWduZWQgdmFsdWUgKDMyIGJpdCkKKyAgXGRldGFpbHMgUm90YXRlIFJpZ2h0IChpbW1lZGlhdGUpIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciByb3RhdGVkIGJ5IGEgdmFyaWFibGUgbnVtYmVyIG9mIGJpdHMuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUKKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIE51bWJlciBvZiBCaXRzIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JvcgorCisKKy8qKgorICBcYnJpZWYgICBCcmVha3BvaW50CisgIFxkZXRhaWxzIENhdXNlcyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyIERlYnVnIHN0YXRlLgorICAgICAgICAgICBEZWJ1ZyB0b29scyBjYW4gdXNlIHRoaXMgdG8gaW52ZXN0aWdhdGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhlIGluc3RydWN0aW9uIGF0IGEgcGFydGljdWxhciBhZGRyZXNzIGlzIHJlYWNoZWQuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBpcyBpZ25vcmVkIGJ5IHRoZSBwcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgIElmIHJlcXVpcmVkLCBhIGRlYnVnZ2VyIGNhbiB1c2UgaXQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnJlYWtwb2ludC4KKyAqLworI2RlZmluZSBfX0JLUFQodmFsdWUpICAgICAgICAgICAgICAgICAgICAgICBfX2JyZWFrcG9pbnQodmFsdWUpCisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYml0IG9yZGVyIG9mIHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBiaXQgb3JkZXIgb2YgdGhlIGdpdmVuIHZhbHVlLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKyAgI2RlZmluZSBfX1JCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmJpdAorI2Vsc2UKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SQklUKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisgIGludDMyX3QgcyA9IDQgLypzaXplb2YodikqLyAqIDggLSAxOyAvKiBleHRyYSBzaGlmdCBuZWVkZWQgYXQgZW5kICovCisKKyAgcmVzdWx0ID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgIC8qIHIgd2lsbCBiZSByZXZlcnNlZCBiaXRzIG9mIHY7IGZpcnN0IGdldCBMU0Igb2YgdiAqLworICBmb3IgKHZhbHVlID4+PSAxVTsgdmFsdWU7IHZhbHVlID4+PSAxVSkKKyAgeworICAgIHJlc3VsdCA8PD0gMVU7CisgICAgcmVzdWx0IHw9IHZhbHVlICYgMVU7CisgICAgcy0tOworICB9CisgIHJlc3VsdCA8PD0gczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGlmdCB3aGVuIHYncyBoaWdoZXN0IGJpdHMgYXJlIHplcm8gKi8KKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgQ291bnQgbGVhZGluZyB6ZXJvcworICBcZGV0YWlscyBDb3VudHMgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIGEgZGF0YSB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBjb3VudCB0aGUgbGVhZGluZyB6ZXJvcworICBccmV0dXJuICAgICAgICAgICAgIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIGluIHZhbHVlCisgKi8KKyNkZWZpbmUgX19DTFogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2x6CisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNTA2MDAyMCkKKyAgI2RlZmluZSBfX0xEUkVYQihwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QgKSBfX2xkcmV4KHB0cikpCisjZWxzZQorICAjZGVmaW5lIF9fTERSRVhCKHB0cikgICAgICAgICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpICgodWludDhfdCApIF9fbGRyZXgocHRyKSkgIF9QcmFnbWEoInBvcCIpCisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBMRFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpCisgKi8KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApCisgICNkZWZpbmUgX19MRFJFWEgocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkgX19sZHJleChwdHIpKQorI2Vsc2UKKyAgI2RlZmluZSBfX0xEUkVYSChwdHIpICAgICAgICAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSAoKHVpbnQxNl90KSBfX2xkcmV4KHB0cikpICBfUHJhZ21hKCJwb3AiKQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQorICovCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQorICAjZGVmaW5lIF9fTERSRVhXKHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QgKSBfX2xkcmV4KHB0cikpCisjZWxzZQorICAjZGVmaW5lIF9fTERSRVhXKHB0cikgICAgICAgICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpICgodWludDMyX3QgKSBfX2xkcmV4KHB0cikpICBfUHJhZ21hKCJwb3AiKQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OIDwgNTA2MDAyMCkKKyAgI2RlZmluZSBfX1NUUkVYQih2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmV4KHZhbHVlLCBwdHIpCisjZWxzZQorICAjZGVmaW5lIF9fU1RSRVhCKHZhbHVlLCBwdHIpICAgX1ByYWdtYSgicHVzaCIpIF9QcmFnbWEoImRpYWdfc3VwcHJlc3MgMzczMSIpIF9fc3RyZXgodmFsdWUsIHB0cikgICAgICAgIF9QcmFnbWEoInBvcCIpCisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA8IDUwNjAwMjApCisgICNkZWZpbmUgX19TVFJFWEgodmFsdWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJleCh2YWx1ZSwgcHRyKQorI2Vsc2UKKyAgI2RlZmluZSBfX1NUUkVYSCh2YWx1ZSwgcHRyKSAgIF9QcmFnbWEoInB1c2giKSBfUHJhZ21hKCJkaWFnX3N1cHByZXNzIDM3MzEiKSBfX3N0cmV4KHZhbHVlLCBwdHIpICAgICAgICBfUHJhZ21hKCJwb3AiKQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPCA1MDYwMDIwKQorICAjZGVmaW5lIF9fU1RSRVhXKHZhbHVlLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZXgodmFsdWUsIHB0cikKKyNlbHNlCisgICNkZWZpbmUgX19TVFJFWFcodmFsdWUsIHB0cikgICBfUHJhZ21hKCJwdXNoIikgX1ByYWdtYSgiZGlhZ19zdXBwcmVzcyAzNzMxIikgX19zdHJleCh2YWx1ZSwgcHRyKSAgICAgICAgX1ByYWdtYSgicG9wIikKKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBSZW1vdmUgdGhlIGV4Y2x1c2l2ZSBsb2NrCisgIFxkZXRhaWxzIFJlbW92ZXMgdGhlIGV4Y2x1c2l2ZSBsb2NrIHdoaWNoIGlzIGNyZWF0ZWQgYnkgTERSRVguCisgKi8KKyNkZWZpbmUgX19DTFJFWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xyZXgKKworCisvKioKKyAgXGJyaWVmICAgU2lnbmVkIFNhdHVyYXRlCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhIHNpZ25lZCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQKKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDEuLjMyKQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fU1NBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NzYXQKKworCisvKioKKyAgXGJyaWVmICAgVW5zaWduZWQgU2F0dXJhdGUKKyAgXGRldGFpbHMgU2F0dXJhdGVzIGFuIHVuc2lnbmVkIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZAorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMC4uMzEpCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19VU0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNhdAorCisKKy8qKgorICBcYnJpZWYgICBSb3RhdGUgUmlnaHQgd2l0aCBFeHRlbmQgKDMyIGJpdCkKKyAgXGRldGFpbHMgTW92ZXMgZWFjaCBiaXQgb2YgYSBiaXRzdHJpbmcgcmlnaHQgYnkgb25lIGJpdC4KKyAgICAgICAgICAgVGhlIGNhcnJ5IGlucHV0IGlzIHNoaWZ0ZWQgaW4gYXQgdGhlIGxlZnQgZW5kIG9mIHRoZSBiaXRzdHJpbmcuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByb3RhdGUKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJvdGF0ZWQgdmFsdWUKKyAqLworI2lmbmRlZiBfX05PX0VNQkVEREVEX0FTTQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnJyeF90ZXh0IikpKSBfX1NUQVRJQ19JTkxJTkUgX19BU00gdWludDMyX3QgX19SUlgodWludDMyX3QgdmFsdWUpCit7CisgIHJyeCByMCwgcjAKKyAgYnggbHIKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSBfX0xEUkJUKHB0cikgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90ICkgIF9fbGRydChwdHIpKQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCisjZGVmaW5lIF9fTERSSFQocHRyKSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KSAgX19sZHJ0KHB0cikpCisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDMyX3QgYXQgKCpwdHIpCisgKi8KKyNkZWZpbmUgX19MRFJUKHB0cikgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QgKSBfX2xkcnQocHRyKSkKKworCisvKioKKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KKyNkZWZpbmUgX19TVFJCVCh2YWx1ZSwgcHRyKSAgICAgICAgICAgICAgIF9fc3RydCh2YWx1ZSwgcHRyKQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCisjZGVmaW5lIF9fU1RSSFQodmFsdWUsIHB0cikgICAgICAgICAgICAgICBfX3N0cnQodmFsdWUsIHB0cikKKworCisvKioKKyAgXGJyaWVmICAgU1RSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAqLworI2RlZmluZSBfX1NUUlQodmFsdWUsIHB0cikgICAgICAgICAgICAgICAgX19zdHJ0KHZhbHVlLCBwdHIpCisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgfHwgKF9fQ09SVEVYX1NDID49IDMwMFUpICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSAqLworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMgIENvbXBpbGVyIHNwZWNpZmljIEludHJpbnNpY3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxkZWZncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgQ01TSVMgU0lNRCBJbnRyaW5zaWNzCisgIEFjY2VzcyB0byBkZWRpY2F0ZWQgU0lNRCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKyNpZiAoX19DT1JURVhfTSA+PSAweDA0VSkgIC8qIG9ubHkgZm9yIENvcnRleC1NNCBhbmQgYWJvdmUgKi8KKworI2RlZmluZSBfX1NBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zYWRkOAorI2RlZmluZSBfX1FBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xYWRkOAorI2RlZmluZSBfX1NIQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaGFkZDgKKyNkZWZpbmUgX19VQUREOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWFkZDgKKyNkZWZpbmUgX19VUUFERDggICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFhZGQ4CisjZGVmaW5lIF9fVUhBREQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VoYWRkOAorI2RlZmluZSBfX1NTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc3ViOAorI2RlZmluZSBfX1FTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19xc3ViOAorI2RlZmluZSBfX1NIU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaHN1YjgKKyNkZWZpbmUgX19VU1VCOCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXN1YjgKKyNkZWZpbmUgX19VUVNVQjggICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXFzdWI4CisjZGVmaW5lIF9fVUhTVUI4ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Voc3ViOAorI2RlZmluZSBfX1NBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zYWRkMTYKKyNkZWZpbmUgX19RQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcWFkZDE2CisjZGVmaW5lIF9fU0hBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3NoYWRkMTYKKyNkZWZpbmUgX19VQUREMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWFkZDE2CisjZGVmaW5lIF9fVVFBREQxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3VxYWRkMTYKKyNkZWZpbmUgX19VSEFERDE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhhZGQxNgorI2RlZmluZSBfX1NTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc3ViMTYKKyNkZWZpbmUgX19RU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcXN1YjE2CisjZGVmaW5lIF9fU0hTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Noc3ViMTYKKyNkZWZpbmUgX19VU1VCMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXN1YjE2CisjZGVmaW5lIF9fVVFTVUIxNiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Vxc3ViMTYKKyNkZWZpbmUgX19VSFNVQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWhzdWIxNgorI2RlZmluZSBfX1NBU1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zYXN4CisjZGVmaW5lIF9fUUFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Fhc3gKKyNkZWZpbmUgX19TSEFTWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hhc3gKKyNkZWZpbmUgX19VQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWFzeAorI2RlZmluZSBfX1VRQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191cWFzeAorI2RlZmluZSBfX1VIQVNYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aGFzeAorI2RlZmluZSBfX1NTQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc2F4CisjZGVmaW5lIF9fUVNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FzYXgKKyNkZWZpbmUgX19TSFNBWCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2hzYXgKKyNkZWZpbmUgX19VU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXNheAorI2RlZmluZSBfX1VRU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191cXNheAorI2RlZmluZSBfX1VIU0FYICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aHNheAorI2RlZmluZSBfX1VTQUQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2FkOAorI2RlZmluZSBfX1VTQURBOCAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2FkYTgKKyNkZWZpbmUgX19TU0FUMTYgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3NhdDE2CisjZGVmaW5lIF9fVVNBVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VzYXQxNgorI2RlZmluZSBfX1VYVEIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX191eHRiMTYKKyNkZWZpbmUgX19VWFRBQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdXh0YWIxNgorI2RlZmluZSBfX1NYVEIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zeHRiMTYKKyNkZWZpbmUgX19TWFRBQjE2ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3h0YWIxNgorI2RlZmluZSBfX1NNVUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVhZAorI2RlZmluZSBfX1NNVUFEWCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbXVhZHgKKyNkZWZpbmUgX19TTUxBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sYWQKKyNkZWZpbmUgX19TTUxBRFggICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sYWR4CisjZGVmaW5lIF9fU01MQUxEICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbGFsZAorI2RlZmluZSBfX1NNTEFMRFggICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxhbGR4CisjZGVmaW5lIF9fU01VU0QgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtdXNkCisjZGVmaW5lIF9fU01VU0RYICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtdXNkeAorI2RlZmluZSBfX1NNTFNEICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxzZAorI2RlZmluZSBfX1NNTFNEWCAgICAgICAgICAgICAgICAgICAgICAgICAgX19zbWxzZHgKKyNkZWZpbmUgX19TTUxTTEQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc21sc2xkCisjZGVmaW5lIF9fU01MU0xEWCAgICAgICAgICAgICAgICAgICAgICAgICBfX3NtbHNsZHgKKyNkZWZpbmUgX19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VsCisjZGVmaW5lIF9fUUFERCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3FhZGQKKyNkZWZpbmUgX19RU1VCICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcXN1YgorCisjZGVmaW5lIF9fUEtIQlQoQVJHMSxBUkcyLEFSRzMpICAgICAgICAgICggKCgoKHVpbnQzMl90KShBUkcxKSkgICAgICAgICAgKSAmIDB4MDAwMEZGRkZVTCkgfCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoQVJHMikpIDw8IChBUkczKSkgJiAweEZGRkYwMDAwVUwpICApCisKKyNkZWZpbmUgX19QS0hUQihBUkcxLEFSRzIsQVJHMykgICAgICAgICAgKCAoKCgodWludDMyX3QpKEFSRzEpKSAgICAgICAgICApICYgMHhGRkZGMDAwMFVMKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShBUkcyKSkgPj4gKEFSRzMpKSAmIDB4MDAwMEZGRkZVTCkgICkKKworI2RlZmluZSBfX1NNTUxBKEFSRzEsQVJHMixBUkczKSAgICAgICAgICAoIChpbnQzMl90KSgoKChpbnQ2NF90KShBUkcxKSAqIChBUkcyKSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludDY0X3QpKEFSRzMpIDw8IDMyVSkgICAgICkgPj4gMzJVKSkKKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDQpICovCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TSU1EX2ludHJpbnNpY3MgKi8KKworCisjZW5kaWYgLyogX19DTVNJU19BUk1DQ19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jbXNpc19hcm1jY19WNi5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY21zaXNfYXJtY2NfVjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDEzMjQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY21zaXNfYXJtY2NfVjYuaApAQCAtMCwwICsxLDE4MDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjbXNpc19hcm1jY19WNi5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbi9JbnN0cnVjdGlvbiBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWZuZGVmIF9fQ01TSVNfQVJNQ0NfVjZfSAorI2RlZmluZSBfX0NNU0lTX0FSTUNDX1Y2X0gKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgRnVuY3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICAgIFxkZWZncm91cCBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyBDTVNJUyBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIElSUSBJbnRlcnJ1cHRzCisgIFxkZXRhaWxzIEVuYWJsZXMgSVJRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEktYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWUgaSIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIElSUSBJbnRlcnJ1cHRzCisgIFxkZXRhaWxzIERpc2FibGVzIElSUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEktYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19kaXNhYmxlX2lycSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNwc2lkIGkiIDogOiA6ICJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IENvbnRyb2wgUmVnaXN0ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgQ29udHJvbCBSZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9DT05UUk9MKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgY29udHJvbCIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBHZXQgQ29udHJvbCBSZWdpc3RlciAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgbm9uLXNlY3VyZSBDb250cm9sIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIG1vZGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBub24tc2VjdXJlIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9DT05UUk9MX05TKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgY29udHJvbF9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9DT05UUk9MKHVpbnQzMl90IGNvbnRyb2wpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGNvbnRyb2wsICUwIiA6IDogInIiIChjb250cm9sKSA6ICJtZW1vcnkiKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IENvbnRyb2wgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgQ29udHJvbCBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgY29udHJvbCAgQ29udHJvbCBSZWdpc3RlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X0NPTlRST0xfTlModWludDMyX3QgY29udHJvbCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgY29udHJvbF9ucywgJTAiIDogOiAiciIgKGNvbnRyb2wpIDogIm1lbW9yeSIpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBJUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfSVBTUih2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGlwc3IiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IElQU1IgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG5vbi1zZWN1cmUgSVBTUiBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIElQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9JUFNSX05TKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgaXBzcl9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCBBUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIEFQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQVBTUih2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGFwc3IiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IEFQU1IgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG5vbi1zZWN1cmUgQVBTUiBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEFQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9BUFNSX05TKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgYXBzcl9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIHhQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICB4UFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfeFBTUih2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHhwc3IiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IHhQU1IgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG5vbi1zZWN1cmUgeFBTUiBSZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIHhQU1IgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF94UFNSX05TKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgeHBzcl9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLgorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHNwIiAgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X1BTUF9OUyh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHBzcF9ucyIgIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkuCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9QU1AodWludDMyX3QgdG9wT2ZQcm9jU3RhY2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIHBzcCwgJTAiIDogOiAiciIgKHRvcE9mUHJvY1N0YWNrKSA6ICJzcCIpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBTZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgKFBTUCkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgIHRvcE9mUHJvY1N0YWNrICBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9QU1BfTlModWludDMyX3QgdG9wT2ZQcm9jU3RhY2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIHBzcF9ucywgJTAiIDogOiAiciIgKHRvcE9mUHJvY1N0YWNrKSA6ICJzcCIpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgbXNwIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBNYWluIFN0YWNrIFBvaW50ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgICAgTVNQIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfTVNQX05TKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgbXNwX25zIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfTVNQKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBtc3AsICUwIiA6IDogInIiICh0b3BPZk1haW5TdGFjaykgOiAic3AiKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICB0b3BPZk1haW5TdGFjayAgTWFpbiBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfTVNQX05TKHVpbnQzMl90IHRvcE9mTWFpblN0YWNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBtc3BfbnMsICUwIiA6IDogInIiICh0b3BPZk1haW5TdGFjaykgOiAic3AiKTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcmlvcml0eSBtYXNrIGJpdCBmcm9tIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgUHJpb3JpdHkgTWFzayB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BSSU1BU0sodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwcmltYXNrIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBNYXNrIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBub24tc2VjdXJlIHByaW9yaXR5IG1hc2sgYml0IGZyb20gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfUFJJTUFTS19OUyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIHByaW1hc2tfbnMiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgTWFzaworICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJpb3JpdHkgTWFzayBSZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgcHJpTWFzayAgUHJpb3JpdHkgTWFzaworICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwcmltYXNrLCAlMCIgOiA6ICJyIiAocHJpTWFzaykgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrIChub24tc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9QUklNQVNLX05TKHVpbnQzMl90IHByaU1hc2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIHByaW1hc2tfbnMsICUwIiA6IDogInIiIChwcmlNYXNrKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisKKyNpZiAoKF9fQVJNX0FSQ0hfN01fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfN0VNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzhNX18gPT0gMVUpKSAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBpZiB0aGlzIGlzIG9rIGZvciBjb3J0ZXggPj0zICovCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRklRCisgIFxkZXRhaWxzIEVuYWJsZXMgRklRIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfZmF1bHRfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWUgZiIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEZJUQorICBcZGV0YWlscyBEaXNhYmxlcyBGSVEgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9mYXVsdF9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZCBmIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfQkFTRVBSSSh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGJhc2VwcmkiIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IEJhc2UgUHJpb3JpdHkgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG5vbi1zZWN1cmUgQmFzZSBQcmlvcml0eSByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9CQVNFUFJJX05TKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgYmFzZXByaV9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQkFTRVBSSSh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgYmFzZXByaSwgJTAiIDogOiAiciIgKHZhbHVlKSA6ICJtZW1vcnkiKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IEJhc2UgUHJpb3JpdHkgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgIGJhc2VQcmkgIEJhc2UgUHJpb3JpdHkgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9CQVNFUFJJX05TKHVpbnQzMl90IHZhbHVlKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBiYXNlcHJpX25zLCAlMCIgOiA6ICJyIiAodmFsdWUpIDogIm1lbW9yeSIpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIG9ubHkgaWYgQkFTRVBSSSBtYXNraW5nIGlzIGRpc2FibGVkLAorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUklfTUFYKHVpbnQzMl90IHZhbHVlKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBiYXNlcHJpX21heCwgJTAiIDogOiAiciIgKHZhbHVlKSA6ICJtZW1vcnkiKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IEJhc2UgUHJpb3JpdHkgd2l0aCBjb25kaXRpb24gKG5vbl9zZWN1cmUpCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUgb25seSBpZiBCQVNFUFJJIG1hc2tpbmcgaXMgZGlzYWJsZWQsCisJICAgICAgIG9yIHRoZSBuZXcgdmFsdWUgaW5jcmVhc2VzIHRoZSBCQVNFUFJJIHByaW9yaXR5IGxldmVsLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfQkFTRVBSSV9NQVhfTlModWludDMyX3QgdmFsdWUpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGJhc2VwcmlfbWF4X25zLCAlMCIgOiA6ICJyIiAodmFsdWUpIDogIm1lbW9yeSIpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRkFVTFRNQVNLKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgZmF1bHRtYXNrIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIEZhdWx0IE1hc2sgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19UWl9nZXRfRkFVTFRNQVNLX05TKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgZmF1bHRtYXNrX25zIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZhdWx0IE1hc2sKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGZhdWx0TWFzayAgRmF1bHQgTWFzayB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZBVUxUTUFTSyh1aW50MzJfdCBmYXVsdE1hc2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGZhdWx0bWFzaywgJTAiIDogOiAiciIgKGZhdWx0TWFzaykgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBGYXVsdCBNYXNrIChub24tc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBGYXVsdCBNYXNrIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICBmYXVsdE1hc2sgIEZhdWx0IE1hc2sgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1RaX3NldF9GQVVMVE1BU0tfTlModWludDMyX3QgZmF1bHRNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBmYXVsdG1hc2tfbnMsICUwIiA6IDogInIiIChmYXVsdE1hc2spIDogIm1lbW9yeSIpOworfQorI2VuZGlmCisKKworI2VuZGlmIC8qICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgKi8KKworCisjaWYgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkKKworLyoqCisgIFxicmllZiAgIEdldCBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChQU1BMSU0pLgorICBccmV0dXJuICAgICAgICAgICAgICAgUFNQTElNIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfUFNQTElNKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgcHNwbGltIiAgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgJiYgKF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScpICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIHByZWRlZmluZWQgbWFjcm8gZm9yIG1haW5saW5lICovCisvKioKKyAgXGJyaWVmICAgR2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdCAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBQcm9jZXNzIFN0YWNrIFBvaW50ZXIgTGltaXQgKFBTUExJTSkgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQU1BMSU0gUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9QU1BMSU1fTlModm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwc3BsaW1fbnMiICA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciBMaW1pdAorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChQU1BMSU0pLgorICBccGFyYW0gW2luXSAgICBQcm9jU3RhY2tQdHJMaW1pdCAgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFNQTElNKHVpbnQzMl90IFByb2NTdGFja1B0ckxpbWl0KQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwc3BsaW0sICUwIiA6IDogInIiIChQcm9jU3RhY2tQdHJMaW1pdCkpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgJiYgKF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScpICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIHByZWRlZmluZWQgbWFjcm8gZm9yIG1haW5saW5lICovCisvKioKKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlciAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIG5vbi1zZWN1cmUgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IChQU1BMSU0pIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICBQcm9jU3RhY2tQdHJMaW1pdCAgUHJvY2VzcyBTdGFjayBQb2ludGVyIExpbWl0IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfUFNQTElNX05TKHVpbnQzMl90IFByb2NTdGFja1B0ckxpbWl0KQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwc3BsaW1fbnMsICUwXG4iIDogOiAiciIgKFByb2NTdGFja1B0ckxpbWl0KSk7Cit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdAorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKE1TUExJTSkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1BMSU0gUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9NU1BMSU0odm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBtc3BsaW0iIDogIj1yIiAocmVzdWx0KSApOworCisgIHJldHVybihyZXN1bHQpOworfQorCisKKyNpZiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgJiYgKF9fQVJNX0FSQ0hfUFJPRklMRSA9PSAnTScpICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIHByZWRlZmluZWQgbWFjcm8gZm9yIG1haW5saW5lICovCisvKioKKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbm9uLXNlY3VyZSBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQoTVNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIE1TUExJTSBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVFpfZ2V0X01TUExJTV9OUyh2b2lkKQoreworICByZWdpc3RlciB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIG1zcGxpbV9ucyIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQKKyAgXGRldGFpbHMgQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCAoTVNQTElNKS4KKyAgXHBhcmFtIFtpbl0gICAgTWFpblN0YWNrUHRyTGltaXQgIE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X01TUExJTSh1aW50MzJfdCBNYWluU3RhY2tQdHJMaW1pdCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgbXNwbGltLCAlMCIgOiA6ICJyIiAoTWFpblN0YWNrUHRyTGltaXQpKTsKK30KKworCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICYmIChfX0FSTV9BUkNIX1BST0ZJTEUgPT0gJ00nKSAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBjaGVjayBwcmVkZWZpbmVkIG1hY3JvIGZvciBtYWlubGluZSAqLworLyoqCisgIFxicmllZiAgIFNldCBNYWluIFN0YWNrIFBvaW50ZXIgTGltaXQgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBub24tc2VjdXJlIE1haW4gU3RhY2sgUG9pbnRlciBMaW1pdCAoTVNQTElNKSB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgTWFpblN0YWNrUHRyTGltaXQgIE1haW4gU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fVFpfc2V0X01TUExJTV9OUyh1aW50MzJfdCBNYWluU3RhY2tQdHJMaW1pdCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgbXNwbGltX25zLCAlMCIgOiA6ICJyIiAoTWFpblN0YWNrUHRyTGltaXQpKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkgKi8KKworCisjaWYgKChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgdGhpcyBpcyBvayBmb3IgY29ydGV4ID49NCAqLworCisvKioKKyAgXGJyaWVmICAgR2V0IEZQU0NSCisgIFxkZXRhaWxzIGV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB2YWx1ZQorICovCisjZGVmaW5lIF9fZ2V0X0ZQU0NSICAgICAgX19idWlsdGluX2FybV9nZXRfZnBzY3IKKyNpZiAwCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZQU0NSKHZvaWQpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovCisgIF9fQVNNIHZvbGF0aWxlICgiVk1SUyAlMCwgZnBzY3IiIDogIj1yIiAocmVzdWx0KSApOworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICByZXR1cm4ocmVzdWx0KTsKKyNlbHNlCisgICByZXR1cm4oMCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IEZQU0NSIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBub24tc2VjdXJlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1RaX2dldF9GUFNDUl9OUyh2b2lkKQoreworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLworICBfX0FTTSB2b2xhdGlsZSAoIlZNUlMgJTAsIGZwc2NyX25zIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyAgcmV0dXJuKHJlc3VsdCk7CisjZWxzZQorICAgcmV0dXJuKDApOworI2VuZGlmCit9CisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZQU0NSCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldAorICovCisjZGVmaW5lIF9fc2V0X0ZQU0NSICAgICAgX19idWlsdGluX2FybV9zZXRfZnBzY3IKKyNpZiAwCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfRlBTQ1IodWludDMyX3QgZnBzY3IpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICBfX0FTTSB2b2xhdGlsZSAoIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8KKyAgX19BU00gdm9sYXRpbGUgKCJWTVNSIGZwc2NyLCAlMCIgOiA6ICJyIiAoZnBzY3IpIDogInZmcGNjIik7CisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IEZQU0NSIChub24tc2VjdXJlKQorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbm9uLXNlY3VyZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3RlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19UWl9zZXRfRlBTQ1JfTlModWludDMyX3QgZnBzY3IpCit7CisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpICYmIChfX0ZQVV9VU0VEID09IDFVKQorICBfX0FTTSB2b2xhdGlsZSAoIiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGFzbSBzdGF0ZW1lbnQgd29ya3MgYXMgYSBzY2hlZHVsaW5nIGJhcnJpZXIgKi8KKyAgX19BU00gdm9sYXRpbGUgKCJWTVNSIGZwc2NyX25zLCAlMCIgOiA6ICJyIiAoZnBzY3IpIDogInZmcGNjIik7CisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisjZW5kaWYKK30KKyNlbmRpZgorCisjZW5kaWYgLyogKChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgKi8KKworCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgQ01TSVMgQ29yZSBJbnN0cnVjdGlvbiBJbnRlcmZhY2UKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKy8qIERlZmluZSBtYWNyb3MgZm9yIHBvcnRpbmcgdG8gYm90aCB0aHVtYjEgYW5kIHRodW1iMi4KKyAqIEZvciB0aHVtYjEsIHVzZSBsb3cgcmVnaXN0ZXIgKHIwLXI3KSwgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgImwiCisgKiBPdGhlcndpc2UsIHVzZSBnZW5lcmFsIHJlZ2lzdGVycywgc3BlY2lmaWVkIGJ5IGNvbnN0cmFpbnQgInIiICovCisjaWYgZGVmaW5lZCAoX190aHVtYl9fKSAmJiAhZGVmaW5lZCAoX190aHVtYjJfXykKKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPWwiIChyKQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJsIiAocikKKyNlbHNlCisjZGVmaW5lIF9fQ01TSVNfR0NDX09VVF9SRUcocikgIj1yIiAocikKKyNkZWZpbmUgX19DTVNJU19HQ0NfVVNFX1JFRyhyKSAiciIgKHIpCisjZW5kaWYKKworLyoqCisgIFxicmllZiAgIE5vIE9wZXJhdGlvbgorICBcZGV0YWlscyBObyBPcGVyYXRpb24gZG9lcyBub3RoaW5nLiBUaGlzIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGZvciBjb2RlIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAqLworI2RlZmluZSBfX05PUCAgICAgICAgICBfX2J1aWx0aW5fYXJtX25vcAorCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgSW50ZXJydXB0CisgIFxkZXRhaWxzIFdhaXQgRm9yIEludGVycnVwdCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBzdXNwZW5kcyBleGVjdXRpb24gdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuCisgKi8KKyNkZWZpbmUgX19XRkkgICAgICAgICAgX19idWlsdGluX2FybV93ZmkKKworCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgRXZlbnQKKyAgXGRldGFpbHMgV2FpdCBGb3IgRXZlbnQgaXMgYSBoaW50IGluc3RydWN0aW9uIHRoYXQgcGVybWl0cyB0aGUgcHJvY2Vzc29yIHRvIGVudGVyCisgICAgICAgICAgIGEgbG93LXBvd2VyIHN0YXRlIHVudGlsIG9uZSBvZiBhIG51bWJlciBvZiBldmVudHMgb2NjdXJzLgorICovCisjZGVmaW5lIF9fV0ZFICAgICAgICAgIF9fYnVpbHRpbl9hcm1fd2ZlCisKKworLyoqCisgIFxicmllZiAgIFNlbmQgRXZlbnQKKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLgorICovCisjZGVmaW5lIF9fU0VWICAgICAgICAgIF9fYnVpbHRpbl9hcm1fc2V2CisKKworLyoqCisgIFxicmllZiAgIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyCisgIFxkZXRhaWxzIEluc3RydWN0aW9uIFN5bmNocm9uaXphdGlvbiBCYXJyaWVyIGZsdXNoZXMgdGhlIHBpcGVsaW5lIGluIHRoZSBwcm9jZXNzb3IsCisgICAgICAgICAgIHNvIHRoYXQgYWxsIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgdGhlIElTQiBhcmUgZmV0Y2hlZCBmcm9tIGNhY2hlIG9yIG1lbW9yeSwKKyAgICAgICAgICAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4KKyAqLworI2RlZmluZSBfX0lTQigpICAgICAgICBfX2J1aWx0aW5fYXJtX2lzYigweEYpOworCisvKioKKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcgorICBcZGV0YWlscyBBY3RzIGFzIGEgc3BlY2lhbCBraW5kIG9mIERhdGEgTWVtb3J5IEJhcnJpZXIuCisgICAgICAgICAgIEl0IGNvbXBsZXRlcyB3aGVuIGFsbCBleHBsaWNpdCBtZW1vcnkgYWNjZXNzZXMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUuCisgKi8KKyNkZWZpbmUgX19EU0IoKSAgICAgICAgX19idWlsdGluX2FybV9kc2IoMHhGKTsKKworCisvKioKKyAgXGJyaWVmICAgRGF0YSBNZW1vcnkgQmFycmllcgorICBcZGV0YWlscyBFbnN1cmVzIHRoZSBhcHBhcmVudCBvcmRlciBvZiB0aGUgZXhwbGljaXQgbWVtb3J5IG9wZXJhdGlvbnMgYmVmb3JlCisgICAgICAgICAgIGFuZCBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZW5zdXJpbmcgdGhlaXIgY29tcGxldGlvbi4KKyAqLworI2RlZmluZSBfX0RNQigpICAgICAgICBfX2J1aWx0aW5fYXJtX2RtYigweEYpOworCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgKDMyIGJpdCkKKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gaW50ZWdlciB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19SRVYgICAgICAgICAgX19idWlsdGluX2Jzd2FwMzIKKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgxNiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIHR3byB1bnNpZ25lZCBzaG9ydCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCisjZGVmaW5lIF9fUkVWMTYgICAgICAgICAgX19idWlsdGluX2Jzd2FwMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIF9fYnVpbHRpbl9ic3dhcDE2IGNvdWxkIGJlIHVzZWQgKi8KKyNpZiAwCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkVWMTYodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInJldjE2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworfQorI2VuZGlmCisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYnl0ZSBvcmRlciBpbiBzaWduZWQgc2hvcnQgdmFsdWUKKyAgXGRldGFpbHMgUmV2ZXJzZXMgdGhlIGJ5dGUgb3JkZXIgaW4gYSBzaWduZWQgc2hvcnQgdmFsdWUgd2l0aCBzaWduIGV4dGVuc2lvbiB0byBpbnRlZ2VyLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgX19idWlsdGluX2Jzd2FwMTYgY291bGQgYmUgdXNlZCAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSBpbnQzMl90IF9fUkVWU0goaW50MzJfdCB2YWx1ZSkKK3sKKyAgaW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXZzaCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IGluIHVuc2lnbmVkIHZhbHVlICgzMiBiaXQpCisgIFxkZXRhaWxzIFJvdGF0ZSBSaWdodCAoaW1tZWRpYXRlKSBwcm92aWRlcyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgcm90YXRlZCBieSBhIHZhcmlhYmxlIG51bWJlciBvZiBiaXRzLgorICBccGFyYW0gW2luXSAgICBvcDEgIFZhbHVlIHRvIHJvdGF0ZQorICBccGFyYW0gW2luXSAgICBvcDIgIE51bWJlciBvZiBCaXRzIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUk9SKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICByZXR1cm4gKG9wMSA+PiBvcDIpIHwgKG9wMSA8PCAoMzJVIC0gb3AyKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEJyZWFrcG9pbnQKKyAgXGRldGFpbHMgQ2F1c2VzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIgRGVidWcgc3RhdGUuCisgICAgICAgICAgICBEZWJ1ZyB0b29scyBjYW4gdXNlIHRoaXMgdG8gaW52ZXN0aWdhdGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhlIGluc3RydWN0aW9uIGF0IGEgcGFydGljdWxhciBhZGRyZXNzIGlzIHJlYWNoZWQuCisgICAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIGlzIGlnbm9yZWQgYnkgdGhlIHByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgYSBkZWJ1Z2dlciBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJyZWFrcG9pbnQuCisgKi8KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJia3B0ICIjdmFsdWUpCisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYml0IG9yZGVyIG9mIHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBiaXQgb3JkZXIgb2YgdGhlIGdpdmVuIHZhbHVlLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgX19idWlsdGluX2FybV9yYml0IGlzIHN1cHBvcnRlZCAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JCSVQodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICAvKiBUb0RvOiAgQVJNQ0NfVjY6IGNoZWNrIGlmIHRoaXMgaXMgb2sgZm9yIGNvcnRleCA+PTMgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgicmJpdCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAodmFsdWUpICk7CisjZWxzZQorICBpbnQzMl90IHMgPSA0IC8qc2l6ZW9mKHYpKi8gKiA4IC0gMTsgLyogZXh0cmEgc2hpZnQgbmVlZGVkIGF0IGVuZCAqLworCisgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8KKyAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpCisgIHsKKyAgICByZXN1bHQgPDw9IDFVOworICAgIHJlc3VsdCB8PSB2YWx1ZSAmIDFVOworICAgIHMtLTsKKyAgfQorICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovCisjZW5kaWYKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENvdW50IGxlYWRpbmcgemVyb3MKKyAgXGRldGFpbHMgQ291bnRzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBhIGRhdGEgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MKKyAgXHJldHVybiAgICAgICAgICAgICBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiB2YWx1ZQorICovCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgIF9fYnVpbHRpbl9jbHoKKworCisjaWYgKChfX0FSTV9BUkNIXzdNX18gPT0gMVUpIHx8IChfX0FSTV9BUkNIXzdFTV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF84TV9fID09IDFVKSkgIC8qIFRvRG86ICBBUk1DQ19WNjogY2hlY2sgaWYgdGhpcyBpcyBvayBmb3IgY29ydGV4ID49MyAqLworCisvKioKKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCisjZGVmaW5lIF9fTERSRVhCICAgICAgICAodWludDhfdClfX2J1aWx0aW5fYXJtX2xkcmV4CisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCisjZGVmaW5lIF9fTERSRVhIICAgICAgICAodWludDE2X3QpX19idWlsdGluX2FybV9sZHJleAorCisKKy8qKgorICBcYnJpZWYgICBMRFIgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSBfX0xEUkVYVyAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fbGRyZXgKKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCisjZGVmaW5lIF9fU1RSRVhCICAgICAgICAodWludDMyX3QpX19idWlsdGluX2FybV9zdHJleAorCisKKy8qKgorICBcYnJpZWYgICBTVFIgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2RlZmluZSBfX1NUUkVYSCAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RyZXgKKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KKyNkZWZpbmUgX19TVFJFWFcgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0cmV4CisKKworLyoqCisgIFxicmllZiAgIFJlbW92ZSB0aGUgZXhjbHVzaXZlIGxvY2sKKyAgXGRldGFpbHMgUmVtb3ZlcyB0aGUgZXhjbHVzaXZlIGxvY2sgd2hpY2ggaXMgY3JlYXRlZCBieSBMRFJFWC4KKyAqLworI2RlZmluZSBfX0NMUkVYICAgICAgICAgICAgIF9fYnVpbHRpbl9hcm1fY2xyZXgKKworCisvKioKKyAgXGJyaWVmICAgU2lnbmVkIFNhdHVyYXRlCisgIFxkZXRhaWxzIFNhdHVyYXRlcyBhIHNpZ25lZCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBiZSBzYXR1cmF0ZWQKKyAgXHBhcmFtIFtpbl0gICAgc2F0ICBCaXQgcG9zaXRpb24gdG8gc2F0dXJhdGUgdG8gKDEuLjMyKQorICBccmV0dXJuICAgICAgICAgICAgIFNhdHVyYXRlZCB2YWx1ZQorICovCisvKiNkZWZpbmUgX19TU0FUICAgICAgICAgICAgIF9fYnVpbHRpbl9hcm1fc3NhdCovCisjZGVmaW5lIF9fU1NBVChBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInNzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisKKy8qKgorICBcYnJpZWYgICBVbnNpZ25lZCBTYXR1cmF0ZQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYW4gdW5zaWduZWQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgwLi4zMSkKKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUKKyAqLworI2RlZmluZSBfX1VTQVQgICAgICAgICAgICAgX19idWlsdGluX2FybV91c2F0CisjaWYgMAorI2RlZmluZSBfX1VTQVQoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcCisgIF9fQVNNICgidXNhdCAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisjZW5kaWYKKworCisvKioKKyAgXGJyaWVmICAgUm90YXRlIFJpZ2h0IHdpdGggRXh0ZW5kICgzMiBiaXQpCisgIFxkZXRhaWxzIE1vdmVzIGVhY2ggYml0IG9mIGEgYml0c3RyaW5nIHJpZ2h0IGJ5IG9uZSBiaXQuCisgICAgICAgICAgIFRoZSBjYXJyeSBpbnB1dCBpcyBzaGlmdGVkIGluIGF0IHRoZSBsZWZ0IGVuZCBvZiB0aGUgYml0c3RyaW5nLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcm90YXRlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19SUlgodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInJyeCAlMCwgJTEiIDogX19DTVNJU19HQ0NfT1VUX1JFRyAocmVzdWx0KSA6IF9fQ01TSVNfR0NDX1VTRV9SRUcgKHZhbHVlKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciA4IGJpdCB2YWx1ZS4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQ4X3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBfX0xEUkJUKHZvbGF0aWxlIHVpbnQ4X3QgKnB0cikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyYnQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCpwdHIpICk7CisgICByZXR1cm4gKCh1aW50OF90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8KK30KKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MTZfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBfX0xEUkhUKHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmh0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqcHRyKSApOworICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7ICAgIC8qIEFkZCBleHBsaWNpdCB0eXBlIGNhc3QgaGVyZSAqLworfQorCisKKy8qKgorICBcYnJpZWYgICBMRFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBMRFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTERSVCh2b2xhdGlsZSB1aW50MzJfdCAqcHRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZHJ0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqcHRyKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJCVCh1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICpwdHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmJ0ICUxLCAlMCIgOiAiPVEiICgqcHRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJIVCh1aW50MTZfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDE2X3QgKnB0cikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyaHQgJTEsICUwIiA6ICI9USIgKCpwdHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUUlQodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICpwdHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0cnQgJTEsICUwIiA6ICI9USIgKCpwdHIpIDogInIiICh2YWx1ZSkgKTsKK30KKworI2VuZGlmIC8qICgoX19BUk1fQVJDSF83TV9fID09IDFVKSB8fCAoX19BUk1fQVJDSF83RU1fXyA9PSAxVSkgfHwgKF9fQVJNX0FSQ0hfOE1fXyA9PSAxVSkpICovCisKKworI2lmIChfX0FSTV9BUkNIXzhNX18gPT0gMVUpCisKKy8qKgorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgKDggYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQUIgaW5zdHJ1Y3Rpb24gZm9yIDggYml0IHZhbHVlLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDhfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50OF90IF9fTERBQih2b2xhdGlsZSB1aW50OF90ICpwdHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoImxkYWIgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCpwdHIpICk7CisgICByZXR1cm4gKCh1aW50OF90KSByZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREFIIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERBSCh2b2xhdGlsZSB1aW50MTZfdCAqcHRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZGFoICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqcHRyKSApOworICAgcmV0dXJuICgodWludDE2X3QpIHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIExvYWQtQWNxdWlyZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIExEQSBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEQSh2b2xhdGlsZSB1aW50MzJfdCAqcHRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZGEgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCpwdHIpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMQiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVExCKHVpbnQ4X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQ4X3QgKnB0cikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RsYiAlMSwgJTAiIDogIj1RIiAoKnB0cikgOiAiciIgKCh1aW50MzJfdCl2YWx1ZSkgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSAoMTYgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFNUTEggaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUTEgodWludDE2X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQxNl90ICpwdHIpCit7CisgICBfX0FTTSB2b2xhdGlsZSAoInN0bGggJTEsICUwIiA6ICI9USIgKCpwdHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVEwgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUTCh1aW50MzJfdCB2YWx1ZSwgdm9sYXRpbGUgdWludDMyX3QgKnB0cikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RsICUxLCAlMCIgOiAiPVEiICgqcHRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgRXhjbHVzaXZlICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBMREFCIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCisjZGVmaW5lICAgICBfX0xEQUVYQiAgICAgICAgICAgICAgICAgKHVpbnQ4X3QpX19idWlsdGluX2FybV9sZGFleAorCisKKy8qKgorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgRXhjbHVzaXZlICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBSCBleGNsdXNpdmUgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpCisgKi8KKyNkZWZpbmUgICAgIF9fTERBRVhIICAgICAgICAgICAgICAgICAodWludDE2X3QpX19idWlsdGluX2FybV9sZGFleAorCisKKy8qKgorICBcYnJpZWYgICBMb2FkLUFjcXVpcmUgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgTERBIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworI2RlZmluZSAgICAgX19MREFFWCAgICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX2xkYWV4CisKKworLyoqCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgRXhjbHVzaXZlICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVExCIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCisjZGVmaW5lICAgICBfX1NUTEVYQiAgICAgICAgICAgICAgICAgKHVpbnQzMl90KV9fYnVpbHRpbl9hcm1fc3RsZXgKKworCisvKioKKyAgXGJyaWVmICAgU3RvcmUtUmVsZWFzZSBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBTVExIIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgMTYgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2RlZmluZSAgICAgX19TVExFWEggICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0bGV4CisKKworLyoqCisgIFxicmllZiAgIFN0b3JlLVJlbGVhc2UgRXhjbHVzaXZlICgzMiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgU1RMIGV4Y2x1c2l2ZSBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICBWYWx1ZSB0byBzdG9yZQorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gbG9jYXRpb24KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQKKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQKKyAqLworI2RlZmluZSAgICAgX19TVExFWCAgICAgICAgICAgICAgICAgICh1aW50MzJfdClfX2J1aWx0aW5fYXJtX3N0bGV4CisKKyNlbmRpZiAvKiAoX19BUk1fQVJDSF84TV9fID09IDFVKSAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgKi8KKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjICBDb21waWxlciBzcGVjaWZpYyBJbnRyaW5zaWNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzIENNU0lTIFNJTUQgSW50cmluc2ljcworICBBY2Nlc3MgdG8gZGVkaWNhdGVkIFNJTUQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisjaWYgKF9fQVJNX0ZFQVRVUkVfRFNQID09IDFVKSAgICAgICAgLyogVG9EbzogIEFSTUNDX1Y2OiBUaGlzIHNob3VsZCBiZSBBUkNIID49IEFSTXY3LU0gKyBTSU1EICovCisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicWFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aGFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aGFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NIU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0FTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2FzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFTWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1YXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic3NheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNBWCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2hzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1c2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVoc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBRDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYWQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBREE4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYWRhOCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworI2RlZmluZSBfX1NTQVQxNihBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVpbnQzMl90IF9fUkVTLCBfX0FSRzEgPSAoQVJHMSk7IFwKKyAgX19BU00gKCJzc2F0MTYgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisjZGVmaW5lIF9fVVNBVDE2KEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInVzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRCMTYodWludDMyX3Qgb3AxKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1eHRiMTYgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSkpOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VYVEFCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInV4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TWFRCMTYodWludDMyX3Qgb3AxKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzeHRiMTYgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSkpOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEFCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInN4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVBRCAgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVhZCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVUFEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdWFkeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTEFEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTEFEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWR4ICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzBdKSwgIj1yIiAobGxyLnczMlsxXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzBdKSwgIjEiIChsbHIudzMyWzFdKSApOworI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VU0QgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211c2QgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTVVTRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbXVzZHggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2QgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2xkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMF0pLCAiPXIiIChsbHIudzMyWzFdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMF0pLCAiMSIgKGxsci53MzJbMV0pICk7CisjZWxzZSAgICAgICAgICAgICAgIC8qIEJpZyBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NFTCAgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzZWwgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RQUREKCBpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQoreworICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RU1VCKCBpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQoreworICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzdWIgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgX19QS0hCVChBUkcxLEFSRzIsQVJHMykgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcCisgIF9fQVNNICgicGtoYnQgJTAsICUxLCAlMiwgbHNsICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKyNkZWZpbmUgX19QS0hUQihBUkcxLEFSRzIsQVJHMykgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcCisgIGlmIChBUkczID09IDApIFwKKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJyIiAoX19BUkcxKSwgInIiIChfX0FSRzIpICApOyBcCisgIGVsc2UgXAorICAgIF9fQVNNICgicGtodGIgJTAsICUxLCAlMiwgYXNyICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXAorICBfX1JFUzsgXAorIH0pCisKK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTU1MQSAoaW50MzJfdCBvcDEsIGludDMyX3Qgb3AyLCBpbnQzMl90IG9wMykKK3sKKyBpbnQzMl90IHJlc3VsdDsKKworIF9fQVNNIHZvbGF0aWxlICgic21tbGEgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KTogInIiICAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyByZXR1cm4ocmVzdWx0KTsKK30KKworI2VuZGlmIC8qIChfX0FSTV9GRUFUVVJFX0RTUCA9PSAxVSkgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyAqLworCisKKyNlbmRpZiAvKiBfX0NNU0lTX0FSTUNDX1Y2X0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2Ntc2lzX2djYy5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY21zaXNfZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4OWZiYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2Ntc2lzX2djYy5oCkBAIC0wLDAgKzEsMTM3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNtc2lzX2djYy5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29ydGV4LU0gQ29yZSBGdW5jdGlvbi9JbnN0cnVjdGlvbiBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWZuZGVmIF9fQ01TSVNfR0NDX0gKKyNkZWZpbmUgX19DTVNJU19HQ0NfSAorCisvKiBpZ25vcmUgc29tZSBHQ0Mgd2FybmluZ3MgKi8KKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2lnbi1jb252ZXJzaW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciIKKyNlbmRpZgorCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgSVJRIEludGVycnVwdHMKKyAgXGRldGFpbHMgRW5hYmxlcyBJUlEgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgSS1iaXQgaW4gdGhlIENQU1IuCisgICAgICAgICAgIENhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIFByaXZpbGVnZWQgbW9kZXMuCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19lbmFibGVfaXJxKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiY3BzaWUgaSIgOiA6IDogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIElSUSBJbnRlcnJ1cHRzCisgIFxkZXRhaWxzIERpc2FibGVzIElSUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEktYml0IGluIHRoZSBDUFNSLgorICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZCBpIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBDb250cm9sIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0NPTlRST0wodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBjb250cm9sIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIENvbnRyb2wgUmVnaXN0ZXIuCisgIFxwYXJhbSBbaW5dICAgIGNvbnRyb2wgIENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUgdG8gc2V0CisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfQ09OVFJPTCh1aW50MzJfdCBjb250cm9sKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBjb250cm9sLCAlMCIgOiA6ICJyIiAoY29udHJvbCkgOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIElQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBJUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0lQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBpcHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBBUFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIEFQU1IgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBBUFNSIFJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0FQU1Iodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBhcHNyIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCB4UFNSIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIHhQU1IgUmVnaXN0ZXIuCisKKyAgICBccmV0dXJuICAgICAgICAgICAgICAgeFBTUiBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF94UFNSKHZvaWQpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgeHBzciIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJvY2VzcyBTdGFjayBQb2ludGVyCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFByb2Nlc3MgU3RhY2sgUG9pbnRlciAoUFNQKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgIFBTUCBSZWdpc3RlciB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX2dldF9QU1Aodm9pZCkKK3sKKyAgcmVnaXN0ZXIgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwc3BcbiIgIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFByb2Nlc3MgU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgUHJvY2VzcyBTdGFjayBQb2ludGVyIChQU1ApLgorICBccGFyYW0gW2luXSAgICB0b3BPZlByb2NTdGFjayAgUHJvY2VzcyBTdGFjayBQb2ludGVyIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X1BTUCh1aW50MzJfdCB0b3BPZlByb2NTdGFjaykKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgcHNwLCAlMFxuIiA6IDogInIiICh0b3BPZlByb2NTdGFjaykgOiAic3AiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IE1haW4gU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNYWluIFN0YWNrIFBvaW50ZXIgKE1TUCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBNU1AgUmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfTVNQKHZvaWQpCit7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoIk1SUyAlMCwgbXNwXG4iIDogIj1yIiAocmVzdWx0KSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IE1haW4gU3RhY2sgUG9pbnRlcgorICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgTWFpbiBTdGFjayBQb2ludGVyIChNU1ApLgorCisgICAgXHBhcmFtIFtpbl0gICAgdG9wT2ZNYWluU3RhY2sgIE1haW4gU3RhY2sgUG9pbnRlciB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9NU1AodWludDMyX3QgdG9wT2ZNYWluU3RhY2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIG1zcCwgJTBcbiIgOiA6ICJyIiAodG9wT2ZNYWluU3RhY2spIDogInNwIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBNYXNrCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHByaW9yaXR5IG1hc2sgYml0IGZyb20gdGhlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBQcmlvcml0eSBNYXNrIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X1BSSU1BU0sodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBwcmltYXNrIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBNYXNrCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBQcmlvcml0eSBNYXNrIFJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBwcmlNYXNrICBQcmlvcml0eSBNYXNrCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19zZXRfUFJJTUFTSyh1aW50MzJfdCBwcmlNYXNrKQoreworICBfX0FTTSB2b2xhdGlsZSAoIk1TUiBwcmltYXNrLCAlMCIgOiA6ICJyIiAocHJpTWFzaykgOiAibWVtb3J5Iik7Cit9CisKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKQorCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEZJUQorICBcZGV0YWlscyBFbmFibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBGLWJpdCBpbiB0aGUgQ1BTUi4KKyAgICAgICAgICAgQ2FuIG9ubHkgYmUgZXhlY3V0ZWQgaW4gUHJpdmlsZWdlZCBtb2Rlcy4KKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX2VuYWJsZV9mYXVsdF9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZSBmIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRklRCisgIFxkZXRhaWxzIERpc2FibGVzIEZJUSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIEYtYml0IGluIHRoZSBDUFNSLgorICAgICAgICAgICBDYW4gb25seSBiZSBleGVjdXRlZCBpbiBQcml2aWxlZ2VkIG1vZGVzLgorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fZGlzYWJsZV9mYXVsdF9pcnEodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJjcHNpZCBmIiA6IDogOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEJhc2UgUHJpb3JpdHkgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0JBU0VQUkkodm9pZCkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgiTVJTICUwLCBiYXNlcHJpIiA6ICI9ciIgKHJlc3VsdCkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5CisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICBiYXNlUHJpICBCYXNlIFByaW9yaXR5IHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0JBU0VQUkkodWludDMyX3QgdmFsdWUpCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGJhc2VwcmksICUwIiA6IDogInIiICh2YWx1ZSkgOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBCYXNlIFByaW9yaXR5IHdpdGggY29uZGl0aW9uCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBCYXNlIFByaW9yaXR5IHJlZ2lzdGVyIG9ubHkgaWYgQkFTRVBSSSBtYXNraW5nIGlzIGRpc2FibGVkLAorICAgICAgICAgICBvciB0aGUgbmV3IHZhbHVlIGluY3JlYXNlcyB0aGUgQkFTRVBSSSBwcmlvcml0eSBsZXZlbC4KKyAgXHBhcmFtIFtpbl0gICAgYmFzZVByaSAgQmFzZSBQcmlvcml0eSB2YWx1ZSB0byBzZXQKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX3NldF9CQVNFUFJJX01BWCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJNU1IgYmFzZXByaV9tYXgsICUwIiA6IDogInIiICh2YWx1ZSkgOiAibWVtb3J5Iik7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBGYXVsdCBNYXNrCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZhdWx0IE1hc2sgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICBGYXVsdCBNYXNrIHJlZ2lzdGVyIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fZ2V0X0ZBVUxUTUFTSyh2b2lkKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJNUlMgJTAsIGZhdWx0bWFzayIgOiAiPXIiIChyZXN1bHQpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgRmF1bHQgTWFzaworICBcZGV0YWlscyBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgRmF1bHQgTWFzayByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZmF1bHRNYXNrICBGYXVsdCBNYXNrIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZBVUxUTUFTSyh1aW50MzJfdCBmYXVsdE1hc2spCit7CisgIF9fQVNNIHZvbGF0aWxlICgiTVNSIGZhdWx0bWFzaywgJTAiIDogOiAiciIgKGZhdWx0TWFzaykgOiAibWVtb3J5Iik7Cit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDAzVSkgKi8KKworCisjaWYgICAgICAgKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKQorCisvKioKKyAgXGJyaWVmICAgR2V0IEZQU0NSCisgIFxkZXRhaWxzIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQgU3RhdHVzL0NvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19nZXRfRlBTQ1Iodm9pZCkKK3sKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgJiYgKF9fRlBVX1VTRUQgPT0gMVUpCisgIHVpbnQzMl90IHJlc3VsdDsKKworICAvKiBFbXB0eSBhc20gc3RhdGVtZW50IHdvcmtzIGFzIGEgc2NoZWR1bGluZyBiYXJyaWVyICovCisgIF9fQVNNIHZvbGF0aWxlICgiIik7CisgIF9fQVNNIHZvbGF0aWxlICgiVk1SUyAlMCwgZnBzY3IiIDogIj1yIiAocmVzdWx0KSApOworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICByZXR1cm4ocmVzdWx0KTsKKyNlbHNlCisgICByZXR1cm4oMCk7CisjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEZQU0NSCisgIFxkZXRhaWxzIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBGbG9hdGluZyBQb2ludCBTdGF0dXMvQ29udHJvbCByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgZnBzY3IgIEZsb2F0aW5nIFBvaW50IFN0YXR1cy9Db250cm9sIHZhbHVlIHRvIHNldAorICovCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB2b2lkIF9fc2V0X0ZQU0NSKHVpbnQzMl90IGZwc2NyKQoreworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkKKyAgLyogRW1wdHkgYXNtIHN0YXRlbWVudCB3b3JrcyBhcyBhIHNjaGVkdWxpbmcgYmFycmllciAqLworICBfX0FTTSB2b2xhdGlsZSAoIiIpOworICBfX0FTTSB2b2xhdGlsZSAoIlZNU1IgZnBzY3IsICUwIiA6IDogInIiIChmcHNjcikgOiAidmZwY2MiKTsKKyAgX19BU00gdm9sYXRpbGUgKCIiKTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogKF9fQ09SVEVYX00gPT0gMHgwNFUpIHx8IChfX0NPUlRFWF9NID09IDB4MDdVKSAqLworCisKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9SZWdBY2NGdW5jdGlvbnMgKi8KKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9JbnN0cnVjdGlvbkludGVyZmFjZSBDTVNJUyBDb3JlIEluc3RydWN0aW9uIEludGVyZmFjZQorICBBY2Nlc3MgdG8gZGVkaWNhdGVkIGluc3RydWN0aW9ucworICBAeworKi8KKworLyogRGVmaW5lIG1hY3JvcyBmb3IgcG9ydGluZyB0byBib3RoIHRodW1iMSBhbmQgdGh1bWIyLgorICogRm9yIHRodW1iMSwgdXNlIGxvdyByZWdpc3RlciAocjAtcjcpLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAibCIKKyAqIE90aGVyd2lzZSwgdXNlIGdlbmVyYWwgcmVnaXN0ZXJzLCBzcGVjaWZpZWQgYnkgY29uc3RyYWludCAiciIgKi8KKyNpZiBkZWZpbmVkIChfX3RodW1iX18pICYmICFkZWZpbmVkIChfX3RodW1iMl9fKQorI2RlZmluZSBfX0NNU0lTX0dDQ19PVVRfUkVHKHIpICI9bCIgKHIpCisjZGVmaW5lIF9fQ01TSVNfR0NDX1VTRV9SRUcocikgImwiIChyKQorI2Vsc2UKKyNkZWZpbmUgX19DTVNJU19HQ0NfT1VUX1JFRyhyKSAiPXIiIChyKQorI2RlZmluZSBfX0NNU0lTX0dDQ19VU0VfUkVHKHIpICJyIiAocikKKyNlbmRpZgorCisvKioKKyAgXGJyaWVmICAgTm8gT3BlcmF0aW9uCisgIFxkZXRhaWxzIE5vIE9wZXJhdGlvbiBkb2VzIG5vdGhpbmcuIFRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGJlIHVzZWQgZm9yIGNvZGUgYWxpZ25tZW50IHB1cnBvc2VzLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19OT1Aodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJub3AiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgV2FpdCBGb3IgSW50ZXJydXB0CisgIFxkZXRhaWxzIFdhaXQgRm9yIEludGVycnVwdCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBzdXNwZW5kcyBleGVjdXRpb24gdW50aWwgb25lIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyBvY2N1cnMuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1dGSSh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoIndmaSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBXYWl0IEZvciBFdmVudAorICBcZGV0YWlscyBXYWl0IEZvciBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24gdGhhdCBwZXJtaXRzIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIKKyAgICBhIGxvdy1wb3dlciBzdGF0ZSB1bnRpbCBvbmUgb2YgYSBudW1iZXIgb2YgZXZlbnRzIG9jY3Vycy4KKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB2b2lkIF9fV0ZFKHZvaWQpCit7CisgIF9fQVNNIHZvbGF0aWxlICgid2ZlIik7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNlbmQgRXZlbnQKKyAgXGRldGFpbHMgU2VuZCBFdmVudCBpcyBhIGhpbnQgaW5zdHJ1Y3Rpb24uIEl0IGNhdXNlcyBhbiBldmVudCB0byBiZSBzaWduYWxlZCB0byB0aGUgQ1BVLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TRVYodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJzZXYiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIKKyAgXGRldGFpbHMgSW5zdHJ1Y3Rpb24gU3luY2hyb25pemF0aW9uIEJhcnJpZXIgZmx1c2hlcyB0aGUgcGlwZWxpbmUgaW4gdGhlIHByb2Nlc3NvciwKKyAgICAgICAgICAgc28gdGhhdCBhbGwgaW5zdHJ1Y3Rpb25zIGZvbGxvd2luZyB0aGUgSVNCIGFyZSBmZXRjaGVkIGZyb20gY2FjaGUgb3IgbWVtb3J5LAorICAgICAgICAgICBhZnRlciB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gY29tcGxldGVkLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19JU0Iodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJpc2IgMHhGIjo6OiJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGF0YSBTeW5jaHJvbml6YXRpb24gQmFycmllcgorICBcZGV0YWlscyBBY3RzIGFzIGEgc3BlY2lhbCBraW5kIG9mIERhdGEgTWVtb3J5IEJhcnJpZXIuCisgICAgICAgICAgIEl0IGNvbXBsZXRlcyB3aGVuIGFsbCBleHBsaWNpdCBtZW1vcnkgYWNjZXNzZXMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUuCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX0RTQih2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImRzYiAweEYiOjo6Im1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEYXRhIE1lbW9yeSBCYXJyaWVyCisgIFxkZXRhaWxzIEVuc3VyZXMgdGhlIGFwcGFyZW50IG9yZGVyIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgb3BlcmF0aW9ucyBiZWZvcmUKKyAgICAgICAgICAgYW5kIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiwgd2l0aG91dCBlbnN1cmluZyB0aGVpciBjb21wbGV0aW9uLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19ETUIodm9pZCkKK3sKKyAgX19BU00gdm9sYXRpbGUgKCJkbWIgMHhGIjo6OiJtZW1vcnkiKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgzMiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGludGVnZXIgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkVWKHVpbnQzMl90IHZhbHVlKQoreworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDUpCisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih2YWx1ZSk7CisjZWxzZQorICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJyZXYgJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcgKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHICh2YWx1ZSkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7CisjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgUmV2ZXJzZSBieXRlIG9yZGVyICgxNiBiaXQpCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIHR3byB1bnNpZ25lZCBzaG9ydCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHZhbHVlICBWYWx1ZSB0byByZXZlcnNlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSZXZlcnNlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUkVWMTYodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInJldjE2ICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKKy8qKgorICBcYnJpZWYgICBSZXZlcnNlIGJ5dGUgb3JkZXIgaW4gc2lnbmVkIHNob3J0IHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBieXRlIG9yZGVyIGluIGEgc2lnbmVkIHNob3J0IHZhbHVlIHdpdGggc2lnbiBleHRlbnNpb24gdG8gaW50ZWdlci4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJldmVyc2UKKyAgXHJldHVybiAgICAgICAgICAgICAgIFJldmVyc2VkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBfX1JFVlNIKGludDMyX3QgdmFsdWUpCit7CisjaWYgKF9fR05VQ19fID4gNCkgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOCkKKyAgcmV0dXJuIChzaG9ydClfX2J1aWx0aW5fYnN3YXAxNih2YWx1ZSk7CisjZWxzZQorICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInJldnNoICUwLCAlMSIgOiBfX0NNU0lTX0dDQ19PVVRfUkVHIChyZXN1bHQpIDogX19DTVNJU19HQ0NfVVNFX1JFRyAodmFsdWUpICk7CisgIHJldHVybihyZXN1bHQpOworI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCBpbiB1bnNpZ25lZCB2YWx1ZSAoMzIgYml0KQorICBcZGV0YWlscyBSb3RhdGUgUmlnaHQgKGltbWVkaWF0ZSkgcHJvdmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIHJvdGF0ZWQgYnkgYSB2YXJpYWJsZSBudW1iZXIgb2YgYml0cy4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJvdGF0ZQorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgTnVtYmVyIG9mIEJpdHMgdG8gcm90YXRlCisgIFxyZXR1cm4gICAgICAgICAgICAgICBSb3RhdGVkIHZhbHVlCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19ST1IodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHJldHVybiAob3AxID4+IG9wMikgfCAob3AxIDw8ICgzMlUgLSBvcDIpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQnJlYWtwb2ludAorICBcZGV0YWlscyBDYXVzZXMgdGhlIHByb2Nlc3NvciB0byBlbnRlciBEZWJ1ZyBzdGF0ZS4KKyAgICAgICAgICAgRGVidWcgdG9vbHMgY2FuIHVzZSB0aGlzIHRvIGludmVzdGlnYXRlIHN5c3RlbSBzdGF0ZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpcyByZWFjaGVkLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgaXMgaWdub3JlZCBieSB0aGUgcHJvY2Vzc29yLgorICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgYSBkZWJ1Z2dlciBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJyZWFrcG9pbnQuCisgKi8KKyNkZWZpbmUgX19CS1BUKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgX19BU00gdm9sYXRpbGUgKCJia3B0ICIjdmFsdWUpCisKKworLyoqCisgIFxicmllZiAgIFJldmVyc2UgYml0IG9yZGVyIG9mIHZhbHVlCisgIFxkZXRhaWxzIFJldmVyc2VzIHRoZSBiaXQgb3JkZXIgb2YgdGhlIGdpdmVuIHZhbHVlLgorICBccGFyYW0gW2luXSAgICB2YWx1ZSAgVmFsdWUgdG8gcmV2ZXJzZQorICBccmV0dXJuICAgICAgICAgICAgICAgUmV2ZXJzZWQgdmFsdWUKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1JCSVQodWludDMyX3QgdmFsdWUpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmICAgICAgIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkKKyAgIF9fQVNNIHZvbGF0aWxlICgicmJpdCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAodmFsdWUpICk7CisjZWxzZQorICBpbnQzMl90IHMgPSA0IC8qc2l6ZW9mKHYpKi8gKiA4IC0gMTsgLyogZXh0cmEgc2hpZnQgbmVlZGVkIGF0IGVuZCAqLworCisgIHJlc3VsdCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAvKiByIHdpbGwgYmUgcmV2ZXJzZWQgYml0cyBvZiB2OyBmaXJzdCBnZXQgTFNCIG9mIHYgKi8KKyAgZm9yICh2YWx1ZSA+Pj0gMVU7IHZhbHVlOyB2YWx1ZSA+Pj0gMVUpCisgIHsKKyAgICByZXN1bHQgPDw9IDFVOworICAgIHJlc3VsdCB8PSB2YWx1ZSAmIDFVOworICAgIHMtLTsKKyAgfQorICByZXN1bHQgPDw9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hpZnQgd2hlbiB2J3MgaGlnaGVzdCBiaXRzIGFyZSB6ZXJvICovCisjZW5kaWYKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENvdW50IGxlYWRpbmcgemVyb3MKKyAgXGRldGFpbHMgQ291bnRzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBhIGRhdGEgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gY291bnQgdGhlIGxlYWRpbmcgemVyb3MKKyAgXHJldHVybiAgICAgICAgICAgICBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiB2YWx1ZQorICovCisjZGVmaW5lIF9fQ0xaICAgICAgICAgICAgIF9fYnVpbHRpbl9jbHoKKworCisjaWYgICAgICAgKF9fQ09SVEVYX00gPj0gMHgwM1UpIHx8IChfX0NPUlRFWF9TQyA+PSAzMDBVKQorCisvKioKKyAgXGJyaWVmICAgTERSIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIExEUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgX19MRFJFWEIodm9sYXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJleGIgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworI2Vsc2UKKyAgICAvKiBQcmlvciB0byBHQ0MgNC44LCAiUSIgd2lsbCBiZSBleHBhbmRlZCB0byBbcngsICMwXSB3aGljaCBpcyBub3QKKyAgICAgICBhY2NlcHRlZCBieSBhc3NlbWJsZXIuIFNvIGhhcyB0byB1c2UgZm9sbG93aW5nIGxlc3MgZWZmaWNpZW50IHBhdHRlcm4uCisgICAgKi8KKyAgIF9fQVNNIHZvbGF0aWxlICgibGRyZXhiICUwLCBbJTFdIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIgKTsKKyNlbmRpZgorICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQxNl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IF9fTERSRVhIKHZvbGF0aWxlIHVpbnQxNl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmV4aCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisjZWxzZQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdAorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4KKyAgICAqLworICAgX19BU00gdm9sYXRpbGUgKCJsZHJleGggJTAsIFslMV0iIDogIj1yIiAocmVzdWx0KSA6ICJyIiAoYWRkcikgOiAibWVtb3J5IiApOworI2VuZGlmCisgICByZXR1cm4gKCh1aW50MTZfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUiBFeGNsdXNpdmUgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgTERSIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgICBwdHIgIFBvaW50ZXIgdG8gZGF0YQorICBccmV0dXJuICAgICAgICB2YWx1ZSBvZiB0eXBlIHVpbnQzMl90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTERSRVhXKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJsZHJleCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoOCBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgZXhjbHVzaXZlIFNUUiBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhCKHVpbnQ4X3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpCit7CisgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyZXhiICUwLCAlMiwgJTEiIDogIj0mciIgKHJlc3VsdCksICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUiBFeGNsdXNpdmUgKDE2IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBleGNsdXNpdmUgU1RSIGluc3RydWN0aW9uIGZvciAxNiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZAorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZAorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1RSRVhIKHVpbnQxNl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgX19BU00gdm9sYXRpbGUgKCJzdHJleGggJTAsICUyLCAlMSIgOiAiPSZyIiAocmVzdWx0KSwgIj1RIiAoKmFkZHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU1RSIEV4Y2x1c2l2ZSAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIGV4Y2x1c2l2ZSBTVFIgaW5zdHJ1Y3Rpb24gZm9yIDMyIGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TVFJFWFcodWludDMyX3QgdmFsdWUsIHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoInN0cmV4ICUwLCAlMiwgJTEiIDogIj0mciIgKHJlc3VsdCksICI9USIgKCphZGRyKSA6ICJyIiAodmFsdWUpICk7CisgICByZXR1cm4ocmVzdWx0KTsKK30KKworCisvKioKKyAgXGJyaWVmICAgUmVtb3ZlIHRoZSBleGNsdXNpdmUgbG9jaworICBcZGV0YWlscyBSZW1vdmVzIHRoZSBleGNsdXNpdmUgbG9jayB3aGljaCBpcyBjcmVhdGVkIGJ5IExEUkVYLgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19DTFJFWCh2b2lkKQoreworICBfX0FTTSB2b2xhdGlsZSAoImNscmV4IiA6OjogIm1lbW9yeSIpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTaWduZWQgU2F0dXJhdGUKKyAgXGRldGFpbHMgU2F0dXJhdGVzIGEgc2lnbmVkIHZhbHVlLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIGJlIHNhdHVyYXRlZAorICBccGFyYW0gW2luXSAgICBzYXQgIEJpdCBwb3NpdGlvbiB0byBzYXR1cmF0ZSB0byAoMS4uMzIpCisgIFxyZXR1cm4gICAgICAgICAgICAgU2F0dXJhdGVkIHZhbHVlCisgKi8KKyNkZWZpbmUgX19TU0FUKEFSRzEsQVJHMikgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInNzYXQgJTAsICUxLCAlMiIgOiAiPXIiIChfX1JFUykgOiAgIkkiIChBUkcyKSwgInIiIChfX0FSRzEpICk7IFwKKyAgX19SRVM7IFwKKyB9KQorCisKKy8qKgorICBcYnJpZWYgICBVbnNpZ25lZCBTYXR1cmF0ZQorICBcZGV0YWlscyBTYXR1cmF0ZXMgYW4gdW5zaWduZWQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gYmUgc2F0dXJhdGVkCisgIFxwYXJhbSBbaW5dICAgIHNhdCAgQml0IHBvc2l0aW9uIHRvIHNhdHVyYXRlIHRvICgwLi4zMSkKKyAgXHJldHVybiAgICAgICAgICAgICBTYXR1cmF0ZWQgdmFsdWUKKyAqLworI2RlZmluZSBfX1VTQVQoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcCisgIF9fQVNNICgidXNhdCAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKworLyoqCisgIFxicmllZiAgIFJvdGF0ZSBSaWdodCB3aXRoIEV4dGVuZCAoMzIgYml0KQorICBcZGV0YWlscyBNb3ZlcyBlYWNoIGJpdCBvZiBhIGJpdHN0cmluZyByaWdodCBieSBvbmUgYml0LgorICAgICAgICAgICBUaGUgY2FycnkgaW5wdXQgaXMgc2hpZnRlZCBpbiBhdCB0aGUgbGVmdCBlbmQgb2YgdGhlIGJpdHN0cmluZy4KKyAgXHBhcmFtIFtpbl0gICAgdmFsdWUgIFZhbHVlIHRvIHJvdGF0ZQorICBccmV0dXJuICAgICAgICAgICAgICAgUm90YXRlZCB2YWx1ZQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fUlJYKHVpbnQzMl90IHZhbHVlKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJycnggJTAsICUxIiA6IF9fQ01TSVNfR0NDX09VVF9SRUcgKHJlc3VsdCkgOiBfX0NNU0lTX0dDQ19VU0VfUkVHICh2YWx1ZSkgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWUuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50OF90IGF0ICgqcHRyKQorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgX19MRFJCVCh2b2xhdGlsZSB1aW50OF90ICphZGRyKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworI2lmIChfX0dOVUNfXyA+IDQpIHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDgpCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmJ0ICUwLCAlMSIgOiAiPXIiIChyZXN1bHQpIDogIlEiICgqYWRkcikgKTsKKyNlbHNlCisgICAgLyogUHJpb3IgdG8gR0NDIDQuOCwgIlEiIHdpbGwgYmUgZXhwYW5kZWQgdG8gW3J4LCAjMF0gd2hpY2ggaXMgbm90CisgICAgICAgYWNjZXB0ZWQgYnkgYXNzZW1ibGVyLiBTbyBoYXMgdG8gdXNlIGZvbGxvd2luZyBsZXNzIGVmZmljaWVudCBwYXR0ZXJuLgorICAgICovCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcmJ0ICUwLCBbJTFdIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIgKTsKKyNlbmRpZgorICAgcmV0dXJuICgodWludDhfdCkgcmVzdWx0KTsgICAgLyogQWRkIGV4cGxpY2l0IHR5cGUgY2FzdCBoZXJlICovCit9CisKKworLyoqCisgIFxicmllZiAgIExEUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIExEUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBkYXRhCisgIFxyZXR1cm4gICAgICAgIHZhbHVlIG9mIHR5cGUgdWludDE2X3QgYXQgKCpwdHIpCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgX19MRFJIVCh2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyNpZiAoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorICAgX19BU00gdm9sYXRpbGUgKCJsZHJodCAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJRIiAoKmFkZHIpICk7CisjZWxzZQorICAgIC8qIFByaW9yIHRvIEdDQyA0LjgsICJRIiB3aWxsIGJlIGV4cGFuZGVkIHRvIFtyeCwgIzBdIHdoaWNoIGlzIG5vdAorICAgICAgIGFjY2VwdGVkIGJ5IGFzc2VtYmxlci4gU28gaGFzIHRvIHVzZSBmb2xsb3dpbmcgbGVzcyBlZmZpY2llbnQgcGF0dGVybi4KKyAgICAqLworICAgX19BU00gdm9sYXRpbGUgKCJsZHJodCAlMCwgWyUxXSIgOiAiPXIiIChyZXN1bHQpIDogInIiIChhZGRyKSA6ICJtZW1vcnkiICk7CisjZW5kaWYKKyAgIHJldHVybiAoKHVpbnQxNl90KSByZXN1bHQpOyAgICAvKiBBZGQgZXhwbGljaXQgdHlwZSBjYXN0IGhlcmUgKi8KK30KKworCisvKioKKyAgXGJyaWVmICAgTERSVCBVbnByaXZpbGVnZWQgKDMyIGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgTERSVCBpbnN0cnVjdGlvbiBmb3IgMzIgYml0IHZhbHVlcy4KKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGRhdGEKKyAgXHJldHVybiAgICAgICAgdmFsdWUgb2YgdHlwZSB1aW50MzJfdCBhdCAoKnB0cikKKyAqLworX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX0xEUlQodm9sYXRpbGUgdWludDMyX3QgKmFkZHIpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICBfX0FTTSB2b2xhdGlsZSAoImxkcnQgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiUSIgKCphZGRyKSApOworICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICg4IGJpdCkKKyAgXGRldGFpbHMgRXhlY3V0ZXMgYSBVbnByaXZpbGVnZWQgU1RSVCBpbnN0cnVjdGlvbiBmb3IgOCBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJCVCh1aW50OF90IHZhbHVlLCB2b2xhdGlsZSB1aW50OF90ICphZGRyKQoreworICAgX19BU00gdm9sYXRpbGUgKCJzdHJidCAlMSwgJTAiIDogIj1RIiAoKmFkZHIpIDogInIiICgodWludDMyX3QpdmFsdWUpICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNUUlQgVW5wcml2aWxlZ2VkICgxNiBiaXQpCisgIFxkZXRhaWxzIEV4ZWN1dGVzIGEgVW5wcml2aWxlZ2VkIFNUUlQgaW5zdHJ1Y3Rpb24gZm9yIDE2IGJpdCB2YWx1ZXMuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgVmFsdWUgdG8gc3RvcmUKKyAgXHBhcmFtIFtpbl0gICAgcHRyICBQb2ludGVyIHRvIGxvY2F0aW9uCisgKi8KK19fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX1NUUkhUKHVpbnQxNl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MTZfdCAqYWRkcikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RyaHQgJTEsICUwIiA6ICI9USIgKCphZGRyKSA6ICJyIiAoKHVpbnQzMl90KXZhbHVlKSApOworfQorCisKKy8qKgorICBcYnJpZWYgICBTVFJUIFVucHJpdmlsZWdlZCAoMzIgYml0KQorICBcZGV0YWlscyBFeGVjdXRlcyBhIFVucHJpdmlsZWdlZCBTVFJUIGluc3RydWN0aW9uIGZvciAzMiBiaXQgdmFsdWVzLgorICBccGFyYW0gW2luXSAgdmFsdWUgIFZhbHVlIHRvIHN0b3JlCisgIFxwYXJhbSBbaW5dICAgIHB0ciAgUG9pbnRlciB0byBsb2NhdGlvbgorICovCitfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgX19TVEFUSUNfSU5MSU5FIHZvaWQgX19TVFJUKHVpbnQzMl90IHZhbHVlLCB2b2xhdGlsZSB1aW50MzJfdCAqYWRkcikKK3sKKyAgIF9fQVNNIHZvbGF0aWxlICgic3RydCAlMSwgJTAiIDogIj1RIiAoKmFkZHIpIDogInIiICh2YWx1ZSkgKTsKK30KKworI2VuZGlmIC8qIChfX0NPUlRFWF9NID49IDB4MDNVKSB8fCAoX19DT1JURVhfU0MgPj0gMzAwVSkgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29tcGlsZXIgc3BlY2lmaWMgSW50cmluc2ljcyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyBDTVNJUyBTSU1EIEludHJpbnNpY3MKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBTSU1EIGluc3RydWN0aW9ucworICBAeworKi8KKworI2lmIChfX0NPUlRFWF9NID49IDB4MDRVKSAgLyogb25seSBmb3IgQ29ydGV4LU00IGFuZCBhYm92ZSAqLworCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYWRkOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicWFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBREQ4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFkZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUFERDgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXFhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQUREOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhZGQ4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU1NVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNzdWI4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJxc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc3ViOCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU1VCOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1cXN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUI4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHN1YjggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSEFERDE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaGFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWFkZDE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRQUREMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYWRkMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhBREQxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhhZGQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19RU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TSFNVQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzaHN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXN1YjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VRU1VCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxc3ViMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVUhTVUIxNih1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidWhzdWIxNiAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVhc3ggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFBU1godWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxYXN4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIQVNYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aGFzeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1FTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU0hTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNoc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYXggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVFTQVgodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVxc2F4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1VIU0FYKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1aHNheCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VU0FEOCh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgidXNhZDggJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fVVNBREE4KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInVzYWRhOCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworI2RlZmluZSBfX1NTQVQxNihBUkcxLEFSRzIpIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKTsgXAorICBfX0FTTSAoInNzYXQxNiAlMCwgJTEsICUyIiA6ICI9ciIgKF9fUkVTKSA6ICAiSSIgKEFSRzIpLCAiciIgKF9fQVJHMSkgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKyNkZWZpbmUgX19VU0FUMTYoQVJHMSxBUkcyKSBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1aW50MzJfdCBfX1JFUywgX19BUkcxID0gKEFSRzEpOyBcCisgIF9fQVNNICgidXNhdDE2ICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJJIiAoQVJHMiksICJyIiAoX19BUkcxKSApOyBcCisgIF9fUkVTOyBcCisgfSkKKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRCMTYodWludDMyX3Qgb3AxKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1eHRiMTYgJTAsICUxIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSkpOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19VWFRBQjE2KHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJ1eHRhYjE2ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEIxNih1aW50MzJfdCBvcDEpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInN4dGIxNiAlMCwgJTEiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NYVEFCMTYodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInN4dGFiMTYgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQUQgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211YWQgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01VQURYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic211YWR4ICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNTEFEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxhZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxBRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50MzJfdCBvcDMpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMiksICJyIiAob3AzKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDY0X3QgX19TTUxBTEQgKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbGFsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzBdKSwgIj1yIiAobGxyLnczMlsxXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzBdKSwgIjEiIChsbHIudzMyWzFdKSApOworI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKGxsci53MzJbMV0pLCAiPXIiIChsbHIudzMyWzBdKTogInIiIChvcDEpLCAiciIgKG9wMikgLCAiMCIgKGxsci53MzJbMV0pLCAiMSIgKGxsci53MzJbMF0pICk7CisjZW5kaWYKKworICByZXR1cm4obGxyLnc2NCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MQUxEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQ2NF90IGFjYykKK3sKKyAgdW5pb24gbGxyZWdfdXsKKyAgICB1aW50MzJfdCB3MzJbMl07CisgICAgdWludDY0X3QgdzY0OworICB9IGxscjsKKyAgbGxyLnc2NCA9IGFjYzsKKworI2lmbmRlZiBfX0FSTUVCX18gICAvKiBMaXR0bGUgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzBdKSwgIj1yIiAobGxyLnczMlsxXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzBdKSwgIjEiIChsbHIudzMyWzFdKSApOworI2Vsc2UgICAgICAgICAgICAgICAvKiBCaWcgZW5kaWFuICovCisgIF9fQVNNIHZvbGF0aWxlICgic21sYWxkeCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEICAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdXNkICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBfX1NNVVNEWCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInNtdXNkeCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TTUxTRCAodWludDMyX3Qgb3AxLCB1aW50MzJfdCBvcDIsIHVpbnQzMl90IG9wMykKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic21sc2QgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01MU0RYICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDMyX3Qgb3AzKQoreworICB1aW50MzJfdCByZXN1bHQ7CisKKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpLCAiciIgKG9wMykgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQ2NF90IF9fU01MU0xEICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMiwgdWludDY0X3QgYWNjKQoreworICB1bmlvbiBsbHJlZ191eworICAgIHVpbnQzMl90IHczMlsyXTsKKyAgICB1aW50NjRfdCB3NjQ7CisgIH0gbGxyOworICBsbHIudzY0ID0gYWNjOworCisjaWZuZGVmIF9fQVJNRUJfXyAgIC8qIExpdHRsZSBlbmRpYW4gKi8KKyAgX19BU00gdm9sYXRpbGUgKCJzbWxzbGQgJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZCAlMCwgJTEsICUyLCAlMyIgOiAiPXIiIChsbHIudzMyWzFdKSwgIj1yIiAobGxyLnczMlswXSk6ICJyIiAob3AxKSwgInIiIChvcDIpICwgIjAiIChsbHIudzMyWzFdKSwgIjEiIChsbHIudzMyWzBdKSApOworI2VuZGlmCisKKyAgcmV0dXJuKGxsci53NjQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSB1aW50NjRfdCBfX1NNTFNMRFggKHVpbnQzMl90IG9wMSwgdWludDMyX3Qgb3AyLCB1aW50NjRfdCBhY2MpCit7CisgIHVuaW9uIGxscmVnX3V7CisgICAgdWludDMyX3QgdzMyWzJdOworICAgIHVpbnQ2NF90IHc2NDsKKyAgfSBsbHI7CisgIGxsci53NjQgPSBhY2M7CisKKyNpZm5kZWYgX19BUk1FQl9fICAgLyogTGl0dGxlIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlswXSksICI9ciIgKGxsci53MzJbMV0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlswXSksICIxIiAobGxyLnczMlsxXSkgKTsKKyNlbHNlICAgICAgICAgICAgICAgLyogQmlnIGVuZGlhbiAqLworICBfX0FTTSB2b2xhdGlsZSAoInNtbHNsZHggJTAsICUxLCAlMiwgJTMiIDogIj1yIiAobGxyLnczMlsxXSksICI9ciIgKGxsci53MzJbMF0pOiAiciIgKG9wMSksICJyIiAob3AyKSAsICIwIiAobGxyLnczMlsxXSksICIxIiAobGxyLnczMlswXSkgKTsKKyNlbmRpZgorCisgIHJldHVybihsbHIudzY0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19TRUwgICh1aW50MzJfdCBvcDEsIHVpbnQzMl90IG9wMikKK3sKKyAgdWludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgic2VsICUwLCAlMSwgJTIiIDogIj1yIiAocmVzdWx0KSA6ICJyIiAob3AxKSwgInIiIChvcDIpICk7CisgIHJldHVybihyZXN1bHQpOworfQorCitfX2F0dHJpYnV0ZV9fKCAoIGFsd2F5c19pbmxpbmUgKSApIF9fU1RBVElDX0lOTElORSAgaW50MzJfdCBfX1FBREQoIGludDMyX3Qgb3AxLCAgaW50MzJfdCBvcDIpCit7CisgIGludDMyX3QgcmVzdWx0OworCisgIF9fQVNNIHZvbGF0aWxlICgicWFkZCAlMCwgJTEsICUyIiA6ICI9ciIgKHJlc3VsdCkgOiAiciIgKG9wMSksICJyIiAob3AyKSApOworICByZXR1cm4ocmVzdWx0KTsKK30KKworX19hdHRyaWJ1dGVfXyggKCBhbHdheXNfaW5saW5lICkgKSBfX1NUQVRJQ19JTkxJTkUgIGludDMyX3QgX19RU1VCKCBpbnQzMl90IG9wMSwgIGludDMyX3Qgb3AyKQoreworICBpbnQzMl90IHJlc3VsdDsKKworICBfX0FTTSB2b2xhdGlsZSAoInFzdWIgJTAsICUxLCAlMiIgOiAiPXIiIChyZXN1bHQpIDogInIiIChvcDEpLCAiciIgKG9wMikgKTsKKyAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNkZWZpbmUgX19QS0hCVChBUkcxLEFSRzIsQVJHMykgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcCisgIF9fQVNNICgicGtoYnQgJTAsICUxLCAlMiwgbHNsICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXAorICBfX1JFUzsgXAorIH0pCisKKyNkZWZpbmUgX19QS0hUQihBUkcxLEFSRzIsQVJHMykgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdWludDMyX3QgX19SRVMsIF9fQVJHMSA9IChBUkcxKSwgX19BUkcyID0gKEFSRzIpOyBcCisgIGlmIChBUkczID09IDApIFwKKyAgICBfX0FTTSAoInBraHRiICUwLCAlMSwgJTIiIDogIj1yIiAoX19SRVMpIDogICJyIiAoX19BUkcxKSwgInIiIChfX0FSRzIpICApOyBcCisgIGVsc2UgXAorICAgIF9fQVNNICgicGtodGIgJTAsICUxLCAlMiwgYXNyICUzIiA6ICI9ciIgKF9fUkVTKSA6ICAiciIgKF9fQVJHMSksICJyIiAoX19BUkcyKSwgIkkiIChBUkczKSAgKTsgXAorICBfX1JFUzsgXAorIH0pCisKK19fYXR0cmlidXRlX18oICggYWx3YXlzX2lubGluZSApICkgX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fU01NTEEgKGludDMyX3Qgb3AxLCBpbnQzMl90IG9wMiwgaW50MzJfdCBvcDMpCit7CisgaW50MzJfdCByZXN1bHQ7CisKKyBfX0FTTSB2b2xhdGlsZSAoInNtbWxhICUwLCAlMSwgJTIsICUzIiA6ICI9ciIgKHJlc3VsdCk6ICJyIiAgKG9wMSksICJyIiAob3AyKSwgInIiIChvcDMpICk7CisgcmV0dXJuKHJlc3VsdCk7Cit9CisKKyNlbmRpZiAvKiAoX19DT1JURVhfTSA+PSAweDA0KSAqLworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzICovCisKKworI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dDQ19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtMC5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTFkYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTAuaApAQCAtMCwwICsxLDc5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY20wLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTAgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNMF9IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX0NNMF9IX0dFTkVSSUMKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucworICBDTVNJUyB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIE1JU1JBLUM6MjAwNCBydWxlczoKKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+CisgICAgIEZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGhlYWRlciBmaWxlcyBhcmUgdXNlZCB0byBhbGxvdyAnaW5saW5pbmcnLgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4KKyAgICAgVW5pb25zIGFyZSB1c2VkIGZvciBlZmZlY3RpdmUgcmVwcmVzZW50YXRpb24gb2YgY29yZSByZWdpc3RlcnMuCisKKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+CisgICAgIEZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGNvZGUuCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxpbmdyb3VwIENvcnRleF9NMAorICBAeworICovCisKKy8qICBDTVNJUyBDTTAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19DTTBfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX0NNMF9DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTBfQ01TSVNfVkVSU0lPTiAgICAgICAoKF9fQ00wX0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTBfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfTSAgICAgICAgICAgICAgICAoMHgwMFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIFRoaXMgY29yZSBkb2VzIG5vdCBzdXBwb3J0IGFuIEZQVSBhdCBhbGwKKyovCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00wX0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9DTTBfSF9ERVBFTkRBTlQKKyNkZWZpbmUgX19DT1JFX0NNMF9IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19DTTBfUkVWCisgICAgI2RlZmluZSBfX0NNMF9SRVYgICAgICAgICAgICAgICAweDAwMDBVCisgICAgI3dhcm5pbmcgIl9fQ00wX1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgMlUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBDb3J0ZXhfTTAgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4KKyovCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjI4OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4yNyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IEFQU1JfVHlwZTsKKworLyogQVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBBUFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIEFQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnRlcnJ1cHQgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKElQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjIzOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gSVBTUl9UeXBlOworCisvKiBJUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSBJUFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgSVBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBTcGVjaWFsLVB1cnBvc2UgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXJzICh4UFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNTsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMjMgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVDoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjQgIFRodW1iIGJpdCAgICAgICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjM7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDI1Li4yNyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCB4UFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIENvbnRyb2wgUmVnaXN0ZXJzIChDT05UUk9MKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTsgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAwICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFNQU0VMOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjayB0byBiZSB1c2VkICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTozMDsgICAgICAgICAgICAgIC8qITwgYml0OiAgMi4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IENPTlRST0xfVHlwZTsKKworLyogQ09OVFJPTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9TUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NPUkUgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19OVklDICBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpCisgIFxicmllZiAgICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOVklDIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgSVNFUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSUNFUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJTRVJWRUQxWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElTUFJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDEwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlszMVVdOworICBfX0lPTSB1aW50MzJfdCBJQ1BSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxODAgKFIvVykgIEludGVycnVwdCBDbGVhciBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1szMVVdOworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNjRVXTsKKyAgX19JT00gdWludDMyX3QgSVBbOFVdOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KK30gIE5WSUNfVHlwZTsKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDA7CisgIF9fSU9NIHVpbnQzMl90IEFJUkNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxOworICBfX0lPTSB1aW50MzJfdCBTSFBbMlVdOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvVykgIFN5c3RlbSBIYW5kbGVycyBQcmlvcml0eSBSZWdpc3RlcnMuIFswXSBpcyBSRVNFUlZFRCAqLworICBfX0lPTSB1aW50MzJfdCBTSENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCit9IFNDQl9UeXBlOworCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfTXNrICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX1ZBUklBTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX01zayAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Nc2sgICAgICAgICAgICAgICAoMHhGRkZVTCA8PCBTQ0JfQ1BVSURfUEFSVE5PX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zKi8pICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX1BvcyAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcyAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcyAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcyAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Nc2sgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcykgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyovKSAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcyAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Nc2sgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIFRpbWVyIFJlZ2lzdGVycy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8KK30gU3lzVGlja19UeXBlOworCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIFN5c1RpY2sgUmVsb2FkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8KKworLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIE1hc2sgKi8KKworLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX1BvcyAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1N5c1RpY2sgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgQ29ydGV4LU0wIENvcmUgRGVidWcgUmVnaXN0ZXJzIChEQ0IgcmVnaXN0ZXJzLCBTSENTUiwgYW5kIERGU1IpIGFyZSBvbmx5IGFjY2Vzc2libGUgb3ZlciBEQVAgYW5kIG5vdCB2aWEgcHJvY2Vzc29yLgorICAgICAgICAgICAgVGhlcmVmb3JlIHRoZXkgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBDb3J0ZXgtTTAgaGVhZGVyIGZpbGUuCisgIEB7CisgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgQ29ydGV4LU0wIEhhcmR3YXJlICovCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTQ0JfQkFTRSAgICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgU0NCICAgICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRSAgICAgICkgICAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCisKKy8qQH0gKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcgorICBDb3JlIEZ1bmN0aW9uIEludGVyZmFjZSBjb250YWluczoKKyAgLSBDb3JlIE5WSUMgRnVuY3Rpb25zCisgIC0gQ29yZSBTeXNUaWNrIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKworLyogSW50ZXJydXB0IFByaW9yaXRpZXMgYXJlIFdPUkQgYWNjZXNzaWJsZSBvbmx5IHVuZGVyIEFSTXY2TSAgICAgICAgICAgICAgICAgICAqLworLyogVGhlIGZvbGxvd2luZyBNQUNST1MgaGFuZGxlIGdlbmVyYXRpb24gb2YgdGhlIHJlZ2lzdGVyIG9mZnNldCBhbmQgYnl0ZSBtYXNrcyAqLworI2RlZmluZSBfQklUX1NISUZUKElSUW4pICAgICAgICAgKCAgKCgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgICAgICAgICApICAgICAgJiAgMHgwM1VMKSAqIDhVTCkKKyNkZWZpbmUgX1NIUF9JRFgoSVJRbikgICAgICAgICAgICggKCgoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICYgMHgwRlVMKS04VUwpID4+ICAgIDJVTCkgICAgICApCisjZGVmaW5lIF9JUF9JRFgoSVJRbikgICAgICAgICAgICAoICAgKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAgICAgICAgICAgICAgICA+PiAgICAyVUwpICAgICAgKQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTRVJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ0VSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgcGVuZGluZyByZWdpc3RlciBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgcGVuZGluZy4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVNQUlswVV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNQUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhciBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ1BSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgY29yZSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHBhcmFtIFtpbl0gIHByaW9yaXR5ICBQcmlvcml0eSB0byBzZXQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQoreworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIFNDQi0+U0hQW19TSFBfSURYKElSUW4pXSA9ICgodWludDMyX3QpKFNDQi0+U0hQW19TSFBfSURYKElSUW4pXSAmIH4oMHhGRlVMIDw8IF9CSVRfU0hJRlQoSVJRbikpKSB8CisgICAgICAgKCgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCkgPDwgX0JJVF9TSElGVChJUlFuKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIE5WSUMtPklQW19JUF9JRFgoSVJRbildICA9ICgodWludDMyX3QpKE5WSUMtPklQW19JUF9JRFgoSVJRbildICAmIH4oMHhGRlVMIDw8IF9CSVRfU0hJRlQoSVJRbikpKSB8CisgICAgICAgKCgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCkgPDwgX0JJVF9TSElGVChJUlFuKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYW4gZXh0ZXJuYWwgKGRldmljZSBzcGVjaWZpYykgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGFuIGludGVybmFsIChjb3JlKSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICBJbnRlcnJ1cHQgUHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBpbXBsZW1lbnRlZCBwcmlvcml0eSBiaXRzIG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuKQoreworCisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gPj4gX0JJVF9TSElGVChJUlFuKSApICYgKHVpbnQzMl90KTB4RkZVTCkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklQWyBfSVBfSURYKElSUW4pXSA+PiBfQklUX1NISUZUKElSUW4pICkgJiAodWludDMyX3QpMHhGRlVMKSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBSZXNldAorICBcZGV0YWlscyBJbml0aWF0ZXMgYSBzeXN0ZW0gcmVzZXQgcmVxdWVzdCB0byByZXNldCB0aGUgTUNVLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1N5c3RlbVJlc2V0KHZvaWQpCit7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIHdyaXRlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHJlc2V0ICovCisgIFNDQi0+QUlSQ1IgID0gKCgweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrKTsKKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgbWVtb3J5IGFjY2VzcyAqLworCisgIGZvcig7OykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgcmVzZXQgKi8KKyAgeworICAgIF9fTk9QKCk7CisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFN5c1RpY2sgZnVuY3Rpb24gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyBTeXNUaWNrIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIHRoZSBTeXN0ZW0uCisgIEB7CisgKi8KKworI2lmIChfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnID09IDBVKQorCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFRpY2sgQ29uZmlndXJhdGlvbgorICBcZGV0YWlscyBJbml0aWFsaXplcyB0aGUgU3lzdGVtIFRpbWVyIGFuZCBpdHMgaW50ZXJydXB0LCBhbmQgc3RhcnRzIHRoZSBTeXN0ZW0gVGljayBUaW1lci4KKyAgICAgICAgICAgQ291bnRlciBpcyBpbiBmcmVlIHJ1bm5pbmcgbW9kZSB0byBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHRzLgorICBccGFyYW0gW2luXSAgdGlja3MgIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZC4KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQuCisgIFxub3RlICAgIFdoZW4gdGhlIHZhcmlhYmxlIDxiPl9fVmVuZG9yX1N5c1RpY2tDb25maWc8L2I+IGlzIHNldCB0byAxLCB0aGVuIHRoZQorICAgICAgICAgICBmdW5jdGlvbiA8Yj5TeXNUaWNrX0NvbmZpZzwvYj4gaXMgbm90IGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBmaWxlIDxiPjxpPmRldmljZTwvaT4uaDwvYj4KKyAgICAgICAgICAgbXVzdCBjb250YWluIGEgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTeXNUaWNrX0NvbmZpZyh1aW50MzJfdCB0aWNrcykKK3sKKyAgaWYgKCh0aWNrcyAtIDFVTCkgPiBTeXNUaWNrX0xPQURfUkVMT0FEX01zaykKKyAgeworICAgIHJldHVybiAoMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvYWQgdmFsdWUgaW1wb3NzaWJsZSAqLworICB9CisKKyAgU3lzVGljay0+TE9BRCAgPSAodWludDMyX3QpKHRpY2tzIC0gMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJlbG9hZCByZWdpc3RlciAqLworICBOVklDX1NldFByaW9yaXR5IChTeXNUaWNrX0lSUW4sICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykgLSAxVUwpOyAvKiBzZXQgUHJpb3JpdHkgZm9yIFN5c3RpY2sgSW50ZXJydXB0ICovCisgIFN5c1RpY2stPlZBTCAgID0gMFVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIFN5c1RpY2sgQ291bnRlciBWYWx1ZSAqLworICBTeXNUaWNrLT5DVFJMICA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTeXNUaWNrIElSUSBhbmQgU3lzVGljayBUaW1lciAqLworICByZXR1cm4gKDBVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBzdWNjZXNzZnVsICovCit9CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTBfSF9ERVBFTkRBTlQgKi8KKworI2VuZGlmIC8qIF9fQ01TSVNfR0VORVJJQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTBwbHVzLmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtMHBsdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRhYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTBwbHVzLmgKQEAgLTAsMCArMSw5MTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBjb3JlX2NtMHBsdXMuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NMCsgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNMFBMVVNfSF9HRU5FUklDCisjZGVmaW5lIF9fQ09SRV9DTTBQTFVTX0hfR0VORVJJQworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICBccGFnZSBDTVNJU19NSVNSQV9FeGNlcHRpb25zICBNSVNSQS1DOjIwMDQgQ29tcGxpYW5jZSBFeGNlcHRpb25zCisgIENNU0lTIHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgTUlTUkEtQzoyMDA0IHJ1bGVzOgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSA4LjUsIG9iamVjdC9mdW5jdGlvbiBkZWZpbml0aW9uIGluIGhlYWRlciBmaWxlLjxicj4KKyAgICAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgaW4gaGVhZGVyIGZpbGVzIGFyZSB1c2VkIHRvIGFsbG93ICdpbmxpbmluZycuCisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDE4LjQsIGRlY2xhcmF0aW9uIG9mIHVuaW9uIHR5cGUgb3Igb2JqZWN0IG9mIHVuaW9uIHR5cGU6ICd7Li4ufScuPGJyPgorICAgICBVbmlvbnMgYXJlIHVzZWQgZm9yIGVmZmVjdGl2ZSByZXByZXNlbnRhdGlvbiBvZiBjb3JlIHJlZ2lzdGVycy4KKworICAgXGxpIEFkdmlzb3J5IFJ1bGUgMTkuNywgRnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbmVkLjxicj4KKyAgICAgRnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIHVzZWQgdG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgY29kZS4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgQ01TSVMgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGluZ3JvdXAgQ29ydGV4LU0wKworICBAeworICovCisKKy8qICBDTVNJUyBDTTArIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fQ00wUExVU19DTVNJU19WRVJTSU9OX01BSU4gKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTBQTFVTX0NNU0lTX1ZFUlNJT05fU1VCICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFsxNTowXSAgQ01TSVMgSEFMIHN1YiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ00wUExVU19DTVNJU19WRVJTSU9OICAgICAgKChfX0NNMFBMVVNfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDE2VSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NNMFBMVVNfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgLyohPCBDTVNJUyBIQUwgdmVyc2lvbiBudW1iZXIgKi8KKworI2RlZmluZSBfX0NPUlRFWF9NICAgICAgICAgICAgICAgICgweDAwVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29ydGV4LU0gQ29yZSAqLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyLiBPbmx5IGF2YWlsYWJsZSBpbiBIaWdoIG9wdGltaXphdGlvbiBtb2RlISAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEkgQ0NTIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2RlZmluZSBfX3BhY2tlZAorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIuIFVzZSAtcGM5OSBvbiBjb21waWxlIGxpbmUgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2Vsc2UKKyAgI2Vycm9yIFVua25vd24gY29tcGlsZXIKKyNlbmRpZgorCisvKiogX19GUFVfVVNFRCBpbmRpY2F0ZXMgd2hldGhlciBhbiBGUFUgaXMgdXNlZCBvciBub3QuCisgICAgVGhpcyBjb3JlIGRvZXMgbm90IHN1cHBvcnQgYW4gRlBVIGF0IGFsbAorKi8KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2lmIGRlZmluZWQgX19UQVJHRVRfRlBVX1ZGUAorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNpZiBkZWZpbmVkIF9fQVJNX1BDU19WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjaWYgZGVmaW5lZCAoX19WRlBfRlBfXykgJiYgIWRlZmluZWQoX19TT0ZURlBfXykKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpZiBkZWZpbmVkIF9fQVJNVkZQX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNpZiBkZWZpbmVkIF9fVElfVkZQX1NVUFBPUlRfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNpZiBkZWZpbmVkIF9fRlBVX1ZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2lmICggX19DU01DX18gJiAweDQwMFUpCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlICJjb3JlX2NtSW5zdHIuaCIgICAgICAgICAgICAgICAgLyogQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgKi8KKyNpbmNsdWRlICJjb3JlX2NtRnVuYy5oIiAgICAgICAgICAgICAgICAgLyogQ29yZSBGdW5jdGlvbiBBY2Nlc3MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTBQTFVTX0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9DTTBQTFVTX0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9DTTBQTFVTX0hfREVQRU5EQU5UCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGNoZWNrIGRldmljZSBkZWZpbmVzIGFuZCB1c2UgZGVmYXVsdHMgKi8KKyNpZiBkZWZpbmVkIF9fQ0hFQ0tfREVWSUNFX0RFRklORVMKKyAgI2lmbmRlZiBfX0NNMFBMVVNfUkVWCisgICAgI2RlZmluZSBfX0NNMFBMVVNfUkVWICAgICAgICAgICAgIDB4MDAwMFUKKyAgICAjd2FybmluZyAiX19DTTBQTFVTX1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTVBVX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19NUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVlRPUl9QUkVTRU5UCisgICAgI2RlZmluZSBfX1ZUT1JfUFJFU0VOVCAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVlRPUl9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19OVklDX1BSSU9fQklUUworICAgICNkZWZpbmUgX19OVklDX1BSSU9fQklUUyAgICAgICAgICAyVQorICAgICN3YXJuaW5nICJfX05WSUNfUFJJT19CSVRTIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19WZW5kb3JfU3lzVGlja0NvbmZpZworICAgICNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVQorICAgICN3YXJuaW5nICJfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorI2VuZGlmCisKKy8qIElPIGRlZmluaXRpb25zIChhY2Nlc3MgcmVzdHJpY3Rpb25zIHRvIHBlcmlwaGVyYWwgcmVnaXN0ZXJzKSAqLworLyoqCisgICAgXGRlZmdyb3VwIENNU0lTX2dsb2JfZGVmcyBDTVNJUyBHbG9iYWwgRGVmaW5lcworCisgICAgPHN0cm9uZz5JTyBUeXBlIFF1YWxpZmllcnM8L3N0cm9uZz4gYXJlIHVzZWQKKyAgICBcbGkgdG8gc3BlY2lmeSB0aGUgYWNjZXNzIHRvIHBlcmlwaGVyYWwgdmFyaWFibGVzLgorICAgIFxsaSBmb3IgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgcGVyaXBoZXJhbCByZWdpc3RlciBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyovCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZWxzZQorICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSBjb25zdCAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgX19PICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3dyaXRlIG9ubHknIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBwZXJtaXNzaW9ucyAqLworCisvKiBmb2xsb3dpbmcgZGVmaW5lcyBzaG91bGQgYmUgdXNlZCBmb3Igc3RydWN0dXJlIG1lbWJlcnMgKi8KKyNkZWZpbmUgICAgIF9fSU0gICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgLyohIERlZmluZXMgJ3JlYWQgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19PTSAgICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAnd3JpdGUgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JT00gICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENvcnRleC1NMCsgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICAtIENvcmUgTVBVIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19jb3JlX3JlZ2lzdGVyIERlZmluZXMgYW5kIFR5cGUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmIFR5cGUgZGVmaW5pdGlvbnMgYW5kIGRlZmluZXMgZm9yIENvcnRleC1NIHByb2Nlc3NvciBiYXNlZCBkZXZpY2VzLgorKi8KKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfQ09SRSAgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycworICBcYnJpZWYgICAgICBDb3JlIFJlZ2lzdGVyIHR5cGUgZGVmaW5pdGlvbnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChBUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6Mjg7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLjI3ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQVBTUl9UeXBlOworCisvKiBBUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEFQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIEFQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEludGVycnVwdCBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoSVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MjM7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBJUFNSX1R5cGU7CisKKy8qIElQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIElQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBJUFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIFNwZWNpYWwtUHVycG9zZSBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlcnMgKHhQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE1OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4yMyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBUOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNCAgVGh1bWIgYml0ICAgICAgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzsgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI3ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30geFBTUl9UeXBlOworCisvKiB4UFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIHhQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9UX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1RfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9UX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IHhQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQ29udHJvbCBSZWdpc3RlcnMgKENPTlRST0wpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgblBSSVY6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDAgIEV4ZWN1dGlvbiBwcml2aWxlZ2UgaW4gVGhyZWFkIG1vZGUgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzA7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDIuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfblBSSVZfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfblBSSVZfTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IENPTlRST0xfblBSSVZfUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykKKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBJU0VSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFszMVVdOworICBfX0lPTSB1aW50MzJfdCBJQ0VSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUlNFUlZFRDFbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSVNQUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElDUFJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzMxVV07CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs2NFVdOworICBfX0lPTSB1aW50MzJfdCBJUFs4VV07ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvVykgIEludGVycnVwdCBQcmlvcml0eSBSZWdpc3RlciAqLworfSAgTlZJQ19UeXBlOworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19OVklDICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ0IgICAgIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgQ1BVSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBDUFVJRCBCYXNlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisjaWYgKF9fVlRPUl9QUkVTRU5UID09IDFVKQorICBfX0lPTSB1aW50MzJfdCBWVE9SOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgKi8KKyNlbHNlCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMDsKKyNlbmRpZgorICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTsKKyAgX19JT00gdWludDMyX3QgU0hQWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzLiBbMF0gaXMgUkVTRVJWRUQgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovCisKKyNpZiAoX19WVE9SX1BSRVNFTlQgPT0gMVUpCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweEZGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKyNlbmRpZgorCisvKiBTQ0IgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX1BvcyAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX01zayAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcykgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MgICAgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0VWT05QRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Qb3MgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfU1RLQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfTXNrICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TeXNUaWNrICAgICBTeXN0ZW0gVGljayBUaW1lciAoU3lzVGljaykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gVGltZXIgUmVnaXN0ZXJzLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIFRpbWVyIChTeXNUaWNrKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMT0FEOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIFN5c1RpY2sgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZBTDsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENBTElCOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi8gKSAgU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciAqLworfSBTeXNUaWNrX1R5cGU7CisKKy8qIFN5c1RpY2sgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogU3lzVGljayBSZWxvYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zKi8pICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgTWFzayAqLworCisvKiBTeXNUaWNrIEN1cnJlbnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zKi8pICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgTWFzayAqLworCisvKiBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfTXNrICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX05PUkVGX1BvcykgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfUG9zICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX1NLRVdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU3lzVGljayAqLworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX01QVSAgICAgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IFRZUEU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgTVBVIFR5cGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBNUFUgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSTlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIE1QVSBSZWdpb24gUk5SYmVyIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworfSBNUFVfVHlwZTsKKworLyogTVBVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0lSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9EUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfTXNrICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1RZUEVfU0VQQVJBVEVfUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIE1hc2sgKi8KKworLyogTVBVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Nc2sgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX1BvcyAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfSEZOTUlFTkFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gTnVtYmVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfUk5SX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX1BvcyAgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX01zayAgICAgICAgICAgICAgICAgICgweEZGRkZGRlVMIDw8IE1QVV9SQkFSX0FERFJfUG9zKSAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkJBUl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICgweEZVTCAvKjw8IE1QVV9SQkFSX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX01zayAgICAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IE1QVV9SQVNSX0FUVFJTX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfWE5fUG9zICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1hOX01zayAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9YTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQVBfUG9zICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FQX01zayAgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX0FQX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfVEVYX1BvcyAgICAgICAgICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9URVhfTXNrICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9URVhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TX1BvcyAgICAgICAgICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfU19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0JfUG9zICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0JfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9CX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TUkRfUG9zICAgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfUkFTUl9TUkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TSVpFX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgPDwgTVBVX1JBU1JfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfUkFTUl9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgRGlzYWJsZSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX01QVSAqLworI2VuZGlmCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19Db3JlRGVidWcgICAgICAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKENvcmVEZWJ1ZykKKyAgXGJyaWVmICAgIENvcnRleC1NMCsgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKERDQiByZWdpc3RlcnMsIFNIQ1NSLCBhbmQgREZTUikgYXJlIG9ubHkgYWNjZXNzaWJsZSBvdmVyIERBUCBhbmQgbm90IHZpYSBwcm9jZXNzb3IuCisgICAgICAgICAgICBUaGVyZWZvcmUgdGhleSBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIENvcnRleC1NMCsgaGVhZGVyIGZpbGUuCisgIEB7CisgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgQ29ydGV4LU0wKyBIYXJkd2FyZSAqLworI2RlZmluZSBTQ1NfQkFTRSAgICAgICAgICAgICgweEUwMDBFMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgU3BhY2UgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFN5c1RpY2tfQkFTRSAgICAgICAgKFNDU19CQVNFICsgIDB4MDAxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgU3lzVGljayAgICAgICAgICAgICAoKFN5c1RpY2tfVHlwZSAgICopICAgICBTeXNUaWNrX0JBU0UgICkgICAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorICAjZGVmaW5lIE1QVV9CQVNFICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEOTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworICAjZGVmaW5lIE1QVSAgICAgICAgICAgICAgICgoTVBVX1R5cGUgICAgICAgKikgICAgIE1QVV9CQVNFICAgICAgKSAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworI2VuZGlmCisKKy8qQH0gKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcgorICBDb3JlIEZ1bmN0aW9uIEludGVyZmFjZSBjb250YWluczoKKyAgLSBDb3JlIE5WSUMgRnVuY3Rpb25zCisgIC0gQ29yZSBTeXNUaWNrIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKworLyogSW50ZXJydXB0IFByaW9yaXRpZXMgYXJlIFdPUkQgYWNjZXNzaWJsZSBvbmx5IHVuZGVyIEFSTXY2TSAgICAgICAgICAgICAgICAgICAqLworLyogVGhlIGZvbGxvd2luZyBNQUNST1MgaGFuZGxlIGdlbmVyYXRpb24gb2YgdGhlIHJlZ2lzdGVyIG9mZnNldCBhbmQgYnl0ZSBtYXNrcyAqLworI2RlZmluZSBfQklUX1NISUZUKElSUW4pICAgICAgICAgKCAgKCgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgICAgICAgICApICAgICAgJiAgMHgwM1VMKSAqIDhVTCkKKyNkZWZpbmUgX1NIUF9JRFgoSVJRbikgICAgICAgICAgICggKCgoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICYgMHgwRlVMKS04VUwpID4+ICAgIDJVTCkgICAgICApCisjZGVmaW5lIF9JUF9JRFgoSVJRbikgICAgICAgICAgICAoICAgKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAgICAgICAgICAgICAgICA+PiAgICAyVUwpICAgICAgKQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTRVJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ0VSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgcGVuZGluZyByZWdpc3RlciBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgcGVuZGluZy4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVNQUlswVV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNQUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhciBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ1BSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgY29yZSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHBhcmFtIFtpbl0gIHByaW9yaXR5ICBQcmlvcml0eSB0byBzZXQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQoreworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIFNDQi0+U0hQW19TSFBfSURYKElSUW4pXSA9ICgodWludDMyX3QpKFNDQi0+U0hQW19TSFBfSURYKElSUW4pXSAmIH4oMHhGRlVMIDw8IF9CSVRfU0hJRlQoSVJRbikpKSB8CisgICAgICAgKCgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCkgPDwgX0JJVF9TSElGVChJUlFuKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIE5WSUMtPklQW19JUF9JRFgoSVJRbildICA9ICgodWludDMyX3QpKE5WSUMtPklQW19JUF9JRFgoSVJRbildICAmIH4oMHhGRlVMIDw8IF9CSVRfU0hJRlQoSVJRbikpKSB8CisgICAgICAgKCgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCkgPDwgX0JJVF9TSElGVChJUlFuKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYW4gZXh0ZXJuYWwgKGRldmljZSBzcGVjaWZpYykgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGFuIGludGVybmFsIChjb3JlKSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICBJbnRlcnJ1cHQgUHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBpbXBsZW1lbnRlZCBwcmlvcml0eSBiaXRzIG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuKQoreworCisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gPj4gX0JJVF9TSElGVChJUlFuKSApICYgKHVpbnQzMl90KTB4RkZVTCkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklQWyBfSVBfSURYKElSUW4pXSA+PiBfQklUX1NISUZUKElSUW4pICkgJiAodWludDMyX3QpMHhGRlVMKSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBSZXNldAorICBcZGV0YWlscyBJbml0aWF0ZXMgYSBzeXN0ZW0gcmVzZXQgcmVxdWVzdCB0byByZXNldCB0aGUgTUNVLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1N5c3RlbVJlc2V0KHZvaWQpCit7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIHdyaXRlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHJlc2V0ICovCisgIFNDQi0+QUlSQ1IgID0gKCgweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrKTsKKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgbWVtb3J5IGFjY2VzcyAqLworCisgIGZvcig7OykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgcmVzZXQgKi8KKyAgeworICAgIF9fTk9QKCk7CisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFN5c1RpY2sgZnVuY3Rpb24gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyBTeXNUaWNrIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIHRoZSBTeXN0ZW0uCisgIEB7CisgKi8KKworI2lmIChfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnID09IDBVKQorCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFRpY2sgQ29uZmlndXJhdGlvbgorICBcZGV0YWlscyBJbml0aWFsaXplcyB0aGUgU3lzdGVtIFRpbWVyIGFuZCBpdHMgaW50ZXJydXB0LCBhbmQgc3RhcnRzIHRoZSBTeXN0ZW0gVGljayBUaW1lci4KKyAgICAgICAgICAgQ291bnRlciBpcyBpbiBmcmVlIHJ1bm5pbmcgbW9kZSB0byBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHRzLgorICBccGFyYW0gW2luXSAgdGlja3MgIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZC4KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQuCisgIFxub3RlICAgIFdoZW4gdGhlIHZhcmlhYmxlIDxiPl9fVmVuZG9yX1N5c1RpY2tDb25maWc8L2I+IGlzIHNldCB0byAxLCB0aGVuIHRoZQorICAgICAgICAgICBmdW5jdGlvbiA8Yj5TeXNUaWNrX0NvbmZpZzwvYj4gaXMgbm90IGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBmaWxlIDxiPjxpPmRldmljZTwvaT4uaDwvYj4KKyAgICAgICAgICAgbXVzdCBjb250YWluIGEgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTeXNUaWNrX0NvbmZpZyh1aW50MzJfdCB0aWNrcykKK3sKKyAgaWYgKCh0aWNrcyAtIDFVTCkgPiBTeXNUaWNrX0xPQURfUkVMT0FEX01zaykKKyAgeworICAgIHJldHVybiAoMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvYWQgdmFsdWUgaW1wb3NzaWJsZSAqLworICB9CisKKyAgU3lzVGljay0+TE9BRCAgPSAodWludDMyX3QpKHRpY2tzIC0gMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJlbG9hZCByZWdpc3RlciAqLworICBOVklDX1NldFByaW9yaXR5IChTeXNUaWNrX0lSUW4sICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykgLSAxVUwpOyAvKiBzZXQgUHJpb3JpdHkgZm9yIFN5c3RpY2sgSW50ZXJydXB0ICovCisgIFN5c1RpY2stPlZBTCAgID0gMFVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIFN5c1RpY2sgQ291bnRlciBWYWx1ZSAqLworICBTeXNUaWNrLT5DVFJMICA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTeXNUaWNrIElSUSBhbmQgU3lzVGljayBUaW1lciAqLworICByZXR1cm4gKDBVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBzdWNjZXNzZnVsICovCit9CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTBQTFVTX0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY20zLmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YWM0YzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtMy5oCkBAIC0wLDAgKzEsMTc2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY20zLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTMgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNM19IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX0NNM19IX0dFTkVSSUMKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucworICBDTVNJUyB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIE1JU1JBLUM6MjAwNCBydWxlczoKKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+CisgICAgIEZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGhlYWRlciBmaWxlcyBhcmUgdXNlZCB0byBhbGxvdyAnaW5saW5pbmcnLgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4KKyAgICAgVW5pb25zIGFyZSB1c2VkIGZvciBlZmZlY3RpdmUgcmVwcmVzZW50YXRpb24gb2YgY29yZSByZWdpc3RlcnMuCisKKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+CisgICAgIEZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGNvZGUuCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxpbmdyb3VwIENvcnRleF9NMworICBAeworICovCisKKy8qICBDTVNJUyBDTTMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19DTTNfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX0NNM19DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTNfQ01TSVNfVkVSU0lPTiAgICAgICAoKF9fQ00zX0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTNfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfTSAgICAgICAgICAgICAgICAoMHgwM1UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIFRoaXMgY29yZSBkb2VzIG5vdCBzdXBwb3J0IGFuIEZQVSBhdCBhbGwKKyovCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00zX0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9DTTNfSF9ERVBFTkRBTlQKKyNkZWZpbmUgX19DT1JFX0NNM19IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19DTTNfUkVWCisgICAgI2RlZmluZSBfX0NNM19SRVYgICAgICAgICAgICAgICAweDAyMDBVCisgICAgI3dhcm5pbmcgIl9fQ00zX1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTVBVX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19NUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgNFUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBDb3J0ZXhfTTMgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICAtIENvcmUgRGVidWcgUmVnaXN0ZXIKKyAgLSBDb3JlIE1QVSBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4KKyovCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjI3OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4yNiAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBROjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gQVBTUl9UeXBlOworCisvKiBBUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEFQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIEFQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTU7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjIzICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFQ6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgSVQ6MjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAyNS4uMjYgIHNhdmVkIElUIHN0YXRlICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBROjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30geFBTUl9UeXBlOworCisvKiB4UFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIHhQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBRIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lUX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lUX01zayAgICAgICAgICAgICAgICAgICAgICAgICgzVUwgPDwgeFBTUl9JVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9UX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1RfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9UX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IHhQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQ29udHJvbCBSZWdpc3RlcnMgKENPTlRST0wpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgblBSSVY6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDAgIEV4ZWN1dGlvbiBwcml2aWxlZ2UgaW4gVGhyZWFkIG1vZGUgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzA7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDIuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfblBSSVZfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfblBSSVZfTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IENPTlRST0xfblBSSVZfUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykKKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBJU0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJQ0VSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUlNFUlZFRDFbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSVNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElDUFJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElBQlJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoUi9XKSAgSW50ZXJydXB0IEFjdGl2ZSBiaXQgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzU2VV07CisgIF9fSU9NIHVpbnQ4X3QgIElQWzI0MFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICg4Qml0IHdpZGUpICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVs2NDRVXTsKKyAgX19PTSAgdWludDMyX3QgU1RJUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwICggL1cpICBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdCBSZWdpc3RlciAqLworfSAgTlZJQ19UeXBlOworCisvKiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBOVklDX1NUSVJfSU5USURfUG9zKi8pICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWVE9SOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUlSQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50OF90ICBTSFBbMTJVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIFN5c3RlbSBIYW5kbGVycyBQcmlvcml0eSBSZWdpc3RlcnMgKDQtNywgOC0xMSwgMTItMTUpICovCisgIF9fSU9NIHVpbnQzMl90IFNIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0ZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEhGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyQyAoUi9XKSAgSGFyZEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBNTUZBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1lbU1hbmFnZSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEJGQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgQnVzRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwM0MgKFIvVykgIEF1eGlsaWFyeSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgUEZSWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSLyApICBQcm9jZXNzb3IgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBERlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvICkgIERlYnVnIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQURSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDRDIChSLyApICBBdXhpbGlhcnkgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBNTUZSWzRVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvICkgIE1lbW9yeSBNb2RlbCBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElTQVJbNVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA2MCAoUi8gKSAgSW5zdHJ1Y3Rpb24gU2V0IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzVVXTsKKyAgX19JT00gdWludDMyX3QgQ1BBQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDg4IChSL1cpICBDb3Byb2Nlc3NvciBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9SRVRUT0JBU0VfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfTXNrICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyovKSAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNpZiAoX19DTTNfUkVWIDwgMHgwMjAxVSkgICAgICAgICAgICAgICAgICAgLyogY29yZSByMnAxICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTEJBU0VfUG9zICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxCQVNFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTEJBU0VfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfVlRPUl9UQkxCQVNFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxCQVNFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfUG9zICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Nc2sgICAgICAgICAgICAgICAgKDB4M0ZGRkZGVUwgPDwgU0NCX1ZUT1JfVEJMT0ZGX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgTWFzayAqLworI2Vsc2UKKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDFGRkZGRkZVTCA8PCBTQ0JfVlRPUl9UQkxPRkZfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKyNlbmRpZgorCisvKiBTQ0IgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX1BvcyAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX01zayAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcykgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MgICAgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1BSSUdST1VQX01zayAgICAgICAgICAgICAoN1VMIDw8IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBQUklHUk9VUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTXNrICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyovKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0VWT05QRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Qb3MgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfU1RLQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfQkZIRk5NSUdOX1BvcyAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJGSEZOTUlHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9CRkhGTk1JR05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfRElWXzBfVFJQX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IERJVl8wX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9ESVZfMF9UUlBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVU0VSU0VUTVBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX01zayAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcyAgICAgICAxNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zICAgICAgIDEzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTWVNUSUNLQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcyAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTU9OSVRPUkFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01PTklUT1JBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfUG9zICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgLyo8PCBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zKi8pICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUQUNUIE1hc2sgKi8KKworLyogU0NCIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcyAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfTUVNRkFVTFRTUl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IE1lbW9yeSBNYW5hZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zKi8pICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKy8qIFNDQiBIYXJkIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogREVCVUdFVlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX0RFQlVHRVZUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9GT1JDRURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9WRUNUVEJMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIE1hc2sgKi8KKworLyogU0NCIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0VYVEVSTkFMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfUG9zICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX1ZDQVRDSF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9WQ0FUQ0hfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBWQ0FUQ0ggTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9EV1RUUkFQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9CS1BUX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9CS1BUX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfQktQVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9IQUxURURfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfREZTUl9IQUxURURfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogSEFMVEVEIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ25TQ0IgU3lzdGVtIENvbnRyb2xzIG5vdCBpbiBTQ0IgKFNDblNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JTSAgdWludDMyX3QgSUNUUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyICovCisjaWYgKChkZWZpbmVkIF9fQ00zX1JFVikgJiYgKF9fQ00zX1JFViA+PSAweDIwMFUpKQorICBfX0lPTSB1aW50MzJfdCBBQ1RMUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyICovCisjZWxzZQorICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMVVdOworI2VuZGlmCit9IFNDblNDQl9UeXBlOworCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElDVFI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX01zayAgICAgICAgKDB4RlVMIC8qPDwgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zKi8pICAvKiE8IElDVFI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLyogQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Qb3MgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRk9MRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU0ZPTERfUG9zKSAgICAgICAgICAgLyohPCBBQ1RMUjogRElTRk9MRCBNYXNrICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0RFRldCVUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfTXNrICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNERUZXQlVGX1BvcykgICAgICAgIC8qITwgQUNUTFI6IERJU0RFRldCVUYgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX01zayAgICAgICAgKDFVTCAvKjw8IFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyovKSAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0Nub3RTQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovCit9IFN5c1RpY2tfVHlwZTsKKworLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ3VycmVudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX01zayAgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zKi8pICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19JVE0gICAgIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgKElUTSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIFJlZ2lzdGVyIChJVE0pLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX09NICB1bmlvbgorICB7CisgICAgX19PTSAgdWludDhfdCAgICB1ODsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgOC1iaXQgKi8KKyAgICBfX09NICB1aW50MTZfdCAgIHUxNjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAxNi1iaXQgKi8KKyAgICBfX09NICB1aW50MzJfdCAgIHUzMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAzMi1iaXQgKi8KKyAgfSAgUE9SVCBbMzJVXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCBSZWdpc3RlcnMgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzg2NFVdOworICBfX0lPTSB1aW50MzJfdCBURVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKFIvVykgIElUTSBUcmFjZSBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRQUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU0MCAoUi9XKSAgSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTVVXTsKKyAgX19JT00gdWludDMyX3QgVENSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTgwIChSL1cpICBJVE0gVHJhY2UgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjlVXTsKKyAgX19PTSAgdWludDMyX3QgSVdSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4ICggL1cpICBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSVJSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJTUNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzQzVV07CisgIF9fT00gIHVpbnQzMl90IExBUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCMCAoIC9XKSAgSVRNIExvY2sgQWNjZXNzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IExTUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCNCAoUi8gKSAgSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVs2VV07CisgIF9fSU0gIHVpbnQzMl90IFBJRDQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzQgKi8KKyAgX19JTSAgdWludDMyX3QgUElENTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNSAqLworICBfX0lNICB1aW50MzJfdCBQSUQ2OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM2ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDc7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzcgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkUwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBQSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkVDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworICBfX0lNICB1aW50MzJfdCBDSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjAgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovCisgIF9fSU0gIHVpbnQzMl90IENJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGNCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY4IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLworICBfX0lNICB1aW50MzJfdCBDSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRkMgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovCit9IElUTV9UeXBlOworCisvKiBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfTXNrICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgSVRNX1RQUl9QUklWTUFTS19Qb3MqLykgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIE1hc2sgKi8KKworLyogSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX1BvcyAgICAgICAgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0JVU1lfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfTXNrICAgICAgICAgICAgICgweDdGVUwgPDwgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcykgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX1BvcyAgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX01zayAgICAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfR1RTRlJFUV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUHJlc2NhbGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX01zayAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TV09FTkFfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1dPRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NXT0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9EV1RFTkFfUG9zICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogRFdURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0RXVEVOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX1BvcyAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TWU5DRU5BX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RTRU5BX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RTRU5BX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9UU0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX1RDUl9JVE1FTkFfUG9zKi8pICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lXUl9BVFZBTElETV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX01zayAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSVJSX0FUUkVBRFlNX1BvcyovKSAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lNQ1JfSU5URUdSQVRJT05fUG9zICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElNQ1I6IElOVEVHUkFUSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX01zayAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyovKSAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBNYXNrICovCisKKy8qIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0J5dGVBY2NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgTWFzayAqLworCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9BY2Nlc3NfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgTWFzayAqLworCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0xTUl9QcmVzZW50X1BvcyovKSAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfSVRNICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19EV1QgICAgIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIFJlZ2lzdGVyIChEV1QpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1lDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBDeWNsZSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDUElDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIENQSSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBFWENDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTTEVFUENOVDsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFNsZWVwIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExTVUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTFNVIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZPTERDTlQ7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgRm9sZGVkLWluc3RydWN0aW9uIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IFBDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi8gKSAgUHJvZ3JhbSBDb3VudGVyIFNhbXBsZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDT01QMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMCAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMCAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjA7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDMwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDEgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDEgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04xOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAxICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAyOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAyICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0syOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0NCAoUi9XKSAgTWFzayBSZWdpc3RlciAyICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMjsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMiAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMyAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMyAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjM7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDMgKi8KK30gRFdUX1R5cGU7CisKKy8qIERXVCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfUG9zICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX05VTUNPTVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1RSQ1BLVF9Qb3MgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9UUkNQS1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9UUkNQS1RfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PRVhUVFJJR19Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PQ1lDQ05UX1BvcyAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0NZQ0NOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PUFJGQ05UX1BvcyAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1BSRkNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MgICAgICAgICAgICAyMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTFNVRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcykgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX1BvcyAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MgICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfUG9zICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfTXNrICAgICAgICAgICAgICAgKDB4M1VMIDw8IERXVF9DVFJMX1NZTkNUQVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfUG9zICAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ1RBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX1BvcyAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfTXNrICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIC8qPDwgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyovKSAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgTWFzayAqLworCisvKiBEV1QgQ1BJIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgTWFzayAqLworCisvKiBEV1QgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgTWFzayAqLworCisvKiBEV1QgU2xlZXAgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfTXNrICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zKi8pICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIE1hc2sgKi8KKworLyogRFdUIExTVSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0xTVUNOVF9MU1VDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIE1hc2sgKi8KKworLyogRFdUIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyovKSAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBNYXNrICovCisKKy8qIERXVCBDb21wYXJhdG9yIE1hc2sgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIC8qPDwgRFdUX01BU0tfTUFTS19Qb3MqLykgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgTWFzayAqLworCisvKiBEV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfTXNrICAgICAgICAoMHhGVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfTXNrICAgICAgICAoMHhGVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcyAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX01zayAgICAgICAgICgweDNVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9MTksxRU5BX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX01zayAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcyAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfTXNrICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfUG9zKSAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IENZQ01BVENIIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcyAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX01zayAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fTXNrICAgICAgICAgICgweEZVTCAvKjw8IERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MqLykgICAgLyohPCBEV1QgRlVOQ1RJT046IEZVTkNUSU9OIE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19EV1QgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1RQSSAgICAgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgUmVnaXN0ZXIgKFRQSSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IFNTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgU3VwcG9ydGVkIFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN1cnJlbnQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyVV07CisgIF9fSU9NIHVpbnQzMl90IEFDUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbNTVVXTsKKyAgX19JT00gdWludDMyX3QgU1BQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEYwIChSL1cpICBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzEzMVVdOworICBfX0lNICB1aW50MzJfdCBGRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvICkgIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwNCAoUi9XKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IEZTQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwOCAoUi8gKSAgRm9ybWF0dGVyIFN5bmNocm9uaXphdGlvbiBDb3VudGVyIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1s3NTlVXTsKKyAgX19JTSAgdWludDMyX3QgVFJJR0dFUjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUU4IChSLyApICBUUklHR0VSICovCisgIF9fSU0gIHVpbnQzMl90IEZJRk8wOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFQyAoUi8gKSAgSW50ZWdyYXRpb24gRVRNIERhdGEgKi8KKyAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIyOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUYwIChSLyApICBJVEFUQkNUUjIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzFVXTsKKyAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIwOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4IChSLyApICBJVEFUQkNUUjAgKi8KKyAgX19JTSAgdWludDMyX3QgRklGTzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJbnRlZ3JhdGlvbiBJVE0gRGF0YSAqLworICBfX0lPTSB1aW50MzJfdCBJVENUUkw7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbMzlVXTsKKyAgX19JT00gdWludDMyX3QgQ0xBSU1TRVQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkEwIChSL1cpICBDbGFpbSB0YWcgc2V0ICovCisgIF9fSU9NIHVpbnQzMl90IENMQUlNQ0xSOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBNCAoUi9XKSAgQ2xhaW0gdGFnIGNsZWFyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEN1s4VV07CisgIF9fSU0gIHVpbnQzMl90IERFVklEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDOCAoUi8gKSAgVFBJVV9ERVZJRCAqLworICBfX0lNICB1aW50MzJfdCBERVZUWVBFOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQ0MgKFIvICkgIFRQSVVfREVWVFlQRSAqLworfSBUUElfVHlwZTsKKworLyogVFBJIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfQUNQUl9QUkVTQ0FMRVJfTXNrICAgICAgICAgICAgICgweDFGRkZVTCAvKjw8IFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MqLykgICAgLyohPCBUUEkgQUNQUjogUFJFU0NBTEVSIE1hc2sgKi8KKworLyogVFBJIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfU1BQUl9UWE1PREVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgU1BQUjogVFhNT0RFIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Nc2sgICAgICAgICAgICAgICAgKDB4M1VMIC8qPDwgVFBJX1NQUFJfVFhNT0RFX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgTWFzayAqLworCisvKiBUUEkgRm9ybWF0dGVyIGFuZCBGbHVzaCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX1BvcyAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdE5vblN0b3BfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX01zayAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0ZGU1JfRmxJblByb2dfUG9zKi8pICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBNYXNrICovCisKKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX1BvcyAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZDUl9UcmlnSW5fTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZDUl9UcmlnSW5fUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogVHJpZ0luIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZDUl9FbkZDb250X1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZDUl9FbkZDb250X01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZDUl9FbkZDb250X1BvcykgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBNYXNrICovCisKKy8qIFRQSSBUUklHR0VSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfTXNrICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MqLykgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIEVUTSBEYXRhIFJlZ2lzdGVyIERlZmluaXRpb25zIChGSUZPMCkgKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzBfRVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgTWFzayAqLworCisvKiBUUEkgSVRBVEJDVFIyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX01zayAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zKi8pICAgIC8qITwgVFBJIElUQVRCQ1RSMjogQVRSRUFEWSBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBJVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzEpICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfUG9zICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX1BvcyAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMl9Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMV9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8xX0lUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIE1hc2sgKi8KKworLyogVFBJIElUQVRCQ1RSMCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQ1RSTF9Nb2RlX01zayAgICAgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRDVFJMX01vZGVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIElUQ1RSTDogTW9kZSBNYXNrICovCisKKy8qIFRQSSBERVZJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfREVWSURfTlJaVkFMSURfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5SWlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX1BvcyAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfUFRJTlZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX01pbkJ1ZlN6X1BvcyAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNaW5CdWZTeiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfTXNrICAgICAgICAgICAgICgweDdVTCA8PCBUUElfREVWSURfTWluQnVmU3pfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX1BvcyAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfQXN5bkNsa0luX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MqLykgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgTWFzayAqLworCisvKiBUUEkgREVWVFlQRSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Nc2sgICAgICAgICAgKDB4RlVMIDw8IFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MpICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfTXNrICAgICAgICAgICAgKDB4RlVMIC8qPDwgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MqLykgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19UUEkgKi8KKworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX01QVSAgICAgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IFRZUEU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgTVBVIFR5cGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBNUFUgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSTlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIE1QVSBSZWdpb24gUk5SYmVyIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworfSBNUFVfVHlwZTsKKworLyogTVBVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0lSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9EUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfTXNrICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1RZUEVfU0VQQVJBVEVfUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIE1hc2sgKi8KKworLyogTVBVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Nc2sgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX1BvcyAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfSEZOTUlFTkFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gTnVtYmVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfUk5SX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX01zayAgICAgICAgICAgICAgICAgICgweDdGRkZGRkZVTCA8PCBNUFVfUkJBUl9BRERSX1BvcykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkJBUl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICgweEZVTCAvKjw8IE1QVV9SQkFSX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX01zayAgICAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IE1QVV9SQVNSX0FUVFJTX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfWE5fUG9zICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1hOX01zayAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9YTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQVBfUG9zICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FQX01zayAgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX0FQX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfVEVYX1BvcyAgICAgICAgICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9URVhfTXNrICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9URVhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TX1BvcyAgICAgICAgICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfU19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0JfUG9zICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0JfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9CX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TUkRfUG9zICAgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfUkFTUl9TUkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TSVpFX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgPDwgTVBVX1JBU1JfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfUkFTUl9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgRGlzYWJsZSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX01QVSAqLworI2VuZGlmCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19Db3JlRGVidWcgICAgICAgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMgKENvcmVEZWJ1ZykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBDb3JlIERlYnVnIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlciAoQ29yZURlYnVnKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgREhDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBEZWJ1ZyBIYWx0aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX09NICB1aW50MzJfdCBEQ1JTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKCAvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRENSRFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIERhdGEgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgREVNQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciAqLworfSBDb3JlRGVidWdfVHlwZTsKKworLyogRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Nc2sgICAgICAgICAoMHhGRkZGVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX1BvcyAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVNFVF9TVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Qb3MgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVRJUkVfU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX1BvcyAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0xPQ0tVUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Qb3MgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfU0xFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfTXNrICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcykgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19IQUxUX1BvcyAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfSEFMVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19IQUxUX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfSEFMVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX1BvcyAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFR1JEWSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfUG9zICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU05BUFNUQUxMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX1BvcyAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TVEVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NURVBfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TVEVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcyAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfSEFMVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19IQUxUX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfSEFMVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Qb3MgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0RFQlVHRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Nc2sgICAgICAoMVVMIC8qPDwgQ29yZURlYnVnX0RIQ1NSX0NfREVCVUdFTl9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0RFQlVHRU4gTWFzayAqLworCisvKiBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHV25SIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfRENSU1JfUkVHV25SX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHV25SIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHU0VMX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1NFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHU0VMX01zayAgICAgICAgICgweDFGVUwgLyo8PCBDb3JlRGVidWdfRENSU1JfUkVHU0VMX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1NFTCBNYXNrICovCisKKy8qIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVFJDRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVFJDRU5BIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfTXNrICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX1BvcykgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUkVRIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfUG9zICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1NURVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Qb3MgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUEVORCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fRU4gTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcyAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0hBUkRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSU5URVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSU5URVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcyAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0JVU0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0JVU0VSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfU1RBVEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DSEtFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DSEtFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcyAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX05PQ1BFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Qb3MgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19NTUVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Qb3MgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DT1JFUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Nc2sgICAoMVVMIC8qPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NPUkVSRVNFVF9Qb3MqLykgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19DT1JFUkVTRVQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19Db3JlRGVidWcgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCh2YWx1ZSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcnRleC1NMyBIYXJkd2FyZSAqLworI2RlZmluZSBTQ1NfQkFTRSAgICAgICAgICAgICgweEUwMDBFMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgU3BhY2UgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIElUTV9CQVNFICAgICAgICAgICAgKDB4RTAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIERXVF9CQVNFICAgICAgICAgICAgKDB4RTAwMDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFRQSV9CQVNFICAgICAgICAgICAgKDB4RTAwNDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIENvcmVEZWJ1Z19CQVNFICAgICAgKDB4RTAwMEVERjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlIERlYnVnIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTeXNUaWNrX0JBU0UgICAgICAgIChTQ1NfQkFTRSArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgTlZJQ19CQVNFICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMTAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE5WSUMgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFNDQl9CQVNFICAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBCbG9jayBCYXNlIEFkZHJlc3MgKi8KKworI2RlZmluZSBTQ25TQ0IgICAgICAgICAgICAgICgoU0NuU0NCX1R5cGUgICAgKikgICAgIFNDU19CQVNFICAgICAgKSAgIC8qITwgU3lzdGVtIGNvbnRyb2wgUmVnaXN0ZXIgbm90IGluIFNDQiAqLworI2RlZmluZSBTQ0IgICAgICAgICAgICAgICAgICgoU0NCX1R5cGUgICAgICAgKikgICAgIFNDQl9CQVNFICAgICAgKSAgIC8qITwgU0NCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFN5c1RpY2sgICAgICAgICAgICAgKChTeXNUaWNrX1R5cGUgICAqKSAgICAgU3lzVGlja19CQVNFICApICAgLyohPCBTeXNUaWNrIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIE5WSUMgICAgICAgICAgICAgICAgKChOVklDX1R5cGUgICAgICAqKSAgICAgTlZJQ19CQVNFICAgICApICAgLyohPCBOVklDIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIElUTSAgICAgICAgICAgICAgICAgKChJVE1fVHlwZSAgICAgICAqKSAgICAgSVRNX0JBU0UgICAgICApICAgLyohPCBJVE0gY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgRFdUICAgICAgICAgICAgICAgICAoKERXVF9UeXBlICAgICAgICopICAgICBEV1RfQkFTRSAgICAgICkgICAvKiE8IERXVCBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBUUEkgICAgICAgICAgICAgICAgICgoVFBJX1R5cGUgICAgICAgKikgICAgIFRQSV9CQVNFICAgICAgKSAgIC8qITwgVFBJIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIENvcmVEZWJ1ZyAgICAgICAgICAgKChDb3JlRGVidWdfVHlwZSAqKSAgICAgQ29yZURlYnVnX0JBU0UpICAgLyohPCBDb3JlIERlYnVnIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKyAgI2RlZmluZSBNUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDkwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyAgI2RlZmluZSBNUFUgICAgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRSAgICAgICkgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyNlbmRpZgorCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIERlYnVnIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCB1c2luZyB0aGUgcmVxdWlyZWQgdW5sb2NrIHNlcXVlbmNlLgorICAgICAgICAgICBUaGUgcGFyYW1ldGVyIFByaW9yaXR5R3JvdXAgaXMgYXNzaWduZWQgdG8gdGhlIGZpZWxkIFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkLgorICAgICAgICAgICBPbmx5IHZhbHVlcyBmcm9tIDAuLjcgYXJlIHVzZWQuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgUHJpb3JpdHlHcm91cCAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHlHcm91cGluZyh1aW50MzJfdCBQcmlvcml0eUdyb3VwKQoreworICB1aW50MzJfdCByZWdfdmFsdWU7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgICAgICAgICAgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisKKyAgcmVnX3ZhbHVlICA9ICBTQ0ItPkFJUkNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgb2xkIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gICAgKi8KKyAgcmVnX3ZhbHVlICY9IH4oKHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgfCBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSk7IC8qIGNsZWFyIGJpdHMgdG8gY2hhbmdlICAgICAgICAgICAgICAgKi8KKyAgcmVnX3ZhbHVlICA9ICAocmVnX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgIChQcmlvcml0eUdyb3VwVG1wIDw8IDhVKSAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgLyogSW5zZXJ0IHdyaXRlIGtleSBhbmQgcHJpb3J0eSBncm91cCAqLworICBTQ0ItPkFJUkNSID0gIHJlZ192YWx1ZTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IEdyb3VwaW5nCisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCBmcm9tIHRoZSBOVklDIEludGVycnVwdCBDb250cm9sbGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIChTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5R3JvdXBpbmcodm9pZCkKK3sKKyAgcmV0dXJuICgodWludDMyX3QpKChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgPj4gU0NCX0FJUkNSX1BSSUdST1VQX1BvcykpOworfQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBEaXNhYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0Rpc2FibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIENsZWFycyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19DbGVhclBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQWN0aXZlIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgYWN0aXZlIHJlZ2lzdGVyIGluIE5WSUMgYW5kIHJldHVybnMgdGhlIGFjdGl2ZSBiaXQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBhY3RpdmUuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBhY3RpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldEFjdGl2ZShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JQUJSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgY29yZSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHBhcmFtIFtpbl0gIHByaW9yaXR5ICBQcmlvcml0eSB0byBzZXQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQoreworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIFNDQi0+U0hQWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpLTRVTF0gPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOworICB9CisgIGVsc2UKKyAgeworICAgIE5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYW4gZXh0ZXJuYWwgKGRldmljZSBzcGVjaWZpYykgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGFuIGludGVybmFsIChjb3JlKSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICBJbnRlcnJ1cHQgUHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgaXMgYWxpZ25lZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBpbXBsZW1lbnRlZCBwcmlvcml0eSBiaXRzIG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuKQoreworCisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgcmV0dXJuKCgodWludDMyX3QpU0NCLT5TSFBbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KU5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBFbmNvZGUgUHJpb3JpdHkKKyAgXGRldGFpbHMgRW5jb2RlcyB0aGUgcHJpb3JpdHkgZm9yIGFuIGludGVycnVwdCB3aXRoIHRoZSBnaXZlbiBwcmlvcml0eSBncm91cCwKKyAgICAgICAgICAgcHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSwgYW5kIHN1YnByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgUHJpb3JpdHlHcm91cCAgVXNlZCBwcmlvcml0eSBncm91cC4KKyAgXHBhcmFtIFtpbl0gICBQcmVlbXB0UHJpb3JpdHkgIFByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxwYXJhbSBbaW5dICAgICAgIFN1YlByaW9yaXR5ICBTdWJwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgIEVuY29kZWQgcHJpb3JpdHkuIFZhbHVlIGNhbiBiZSB1c2VkIGluIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfU2V0UHJpb3JpdHkoKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfRW5jb2RlUHJpb3JpdHkgKHVpbnQzMl90IFByaW9yaXR5R3JvdXAsIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QgU3ViUHJpb3JpdHkpCit7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKyAgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5Qml0czsKKyAgdWludDMyX3QgU3ViUHJpb3JpdHlCaXRzOworCisgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDogKHVpbnQzMl90KSg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKTsKKyAgU3ViUHJpb3JpdHlCaXRzICAgICA9ICgoUHJpb3JpdHlHcm91cFRtcCArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpIDwgKHVpbnQzMl90KTdVTCkgPyAodWludDMyX3QpMFVMIDogKHVpbnQzMl90KSgoUHJpb3JpdHlHcm91cFRtcCAtIDdVTCkgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKTsKKworICByZXR1cm4gKAorICAgICAgICAgICAoKFByZWVtcHRQcmlvcml0eSAmICh1aW50MzJfdCkoKDFVTCA8PCAoUHJlZW1wdFByaW9yaXR5Qml0cykpIC0gMVVMKSkgPDwgU3ViUHJpb3JpdHlCaXRzKSB8CisgICAgICAgICAgICgoU3ViUHJpb3JpdHkgICAgICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMgICAgKSkgLSAxVUwpKSkKKyAgICAgICAgICk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERlY29kZSBQcmlvcml0eQorICBcZGV0YWlscyBEZWNvZGVzIGFuIGludGVycnVwdCBwcmlvcml0eSB2YWx1ZSB3aXRoIGEgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAgdG8KKyAgICAgICAgICAgcHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSBhbmQgc3VicHJpb3JpdHkgdmFsdWUuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUykgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgICAgICBQcmlvcml0eSAgIFByaW9yaXR5IHZhbHVlLCB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHdpdGggdGhlIGZ1bmN0aW9uIFxyZWYgTlZJQ19HZXRQcmlvcml0eSgpLgorICBccGFyYW0gW2luXSAgICAgUHJpb3JpdHlHcm91cCAgVXNlZCBwcmlvcml0eSBncm91cC4KKyAgXHBhcmFtIFtvdXRdIHBQcmVlbXB0UHJpb3JpdHkgIFByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxwYXJhbSBbb3V0XSAgICAgcFN1YlByaW9yaXR5ICBTdWJwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EZWNvZGVQcmlvcml0eSAodWludDMyX3QgUHJpb3JpdHksIHVpbnQzMl90IFByaW9yaXR5R3JvdXAsIHVpbnQzMl90KiBjb25zdCBwUHJlZW1wdFByaW9yaXR5LCB1aW50MzJfdCogY29uc3QgcFN1YlByaW9yaXR5KQoreworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7CisgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsKKworICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6ICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7CisgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7CisKKyAgKnBQcmVlbXB0UHJpb3JpdHkgPSAoUHJpb3JpdHkgPj4gU3ViUHJpb3JpdHlCaXRzKSAmICh1aW50MzJfdCkoKDFVTCA8PCAoUHJlZW1wdFByaW9yaXR5Qml0cykpIC0gMVVMKTsKKyAgKnBTdWJQcmlvcml0eSAgICAgPSAoUHJpb3JpdHkgICAgICAgICAgICAgICAgICAgKSAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzICAgICkpIC0gMVVMKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFJlc2V0CisgIFxkZXRhaWxzIEluaXRpYXRlcyBhIHN5c3RlbSByZXNldCByZXF1ZXN0IHRvIHJlc2V0IHRoZSBNQ1UuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU3lzdGVtUmVzZXQodm9pZCkKK3sKKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGFsbCBvdXRzdGFuZGluZyBtZW1vcnkgYWNjZXNzZXMgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWQgd3JpdGUgYXJlIGNvbXBsZXRlZCBiZWZvcmUgcmVzZXQgKi8KKyAgU0NCLT5BSVJDUiAgPSAodWludDMyX3QpKCgweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNDQi0+QUlSQ1IgJiBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICApOyAgICAgICAgIC8qIEtlZXAgcHJpb3JpdHkgZ3JvdXAgdW5jaGFuZ2VkICovCisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIG1lbW9yeSBhY2Nlc3MgKi8KKworICBmb3IoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovCisgIHsKKyAgICBfX05PUCgpOworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERlYnVnIEluL091dHB1dCBmdW5jdGlvbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgSVRNIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgYWNjZXNzIHRoZSBJVE0gZGVidWcgaW50ZXJmYWNlLgorICBAeworICovCisKK2V4dGVybiB2b2xhdGlsZSBpbnQzMl90IElUTV9SeEJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgdmFyaWFibGUgdG8gcmVjZWl2ZSBjaGFyYWN0ZXJzLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSVRNX1JYQlVGRkVSX0VNUFRZICAgMHg1QUE1NUFBNVUgLyohPCBWYWx1ZSBpZGVudGlmeWluZyBccmVmIElUTV9SeEJ1ZmZlciBpcyByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIuICovCisKKworLyoqCisgIFxicmllZiAgIElUTSBTZW5kIENoYXJhY3RlcgorICBcZGV0YWlscyBUcmFuc21pdHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBJVE0gY2hhbm5lbCAwLCBhbmQKKyAgICAgICAgICAgXGxpIEp1c3QgcmV0dXJucyB3aGVuIG5vIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCB0aGF0IGhhcyBib29rZWQgdGhlIG91dHB1dC4KKyAgICAgICAgICAgXGxpIElzIGJsb2NraW5nIHdoZW4gYSBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNlbnQgaGFzIG5vdCBiZWVuIHRyYW5zbWl0dGVkLgorICBccGFyYW0gW2luXSAgICAgY2ggIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAgXHJldHVybnMgICAgICAgICAgICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBJVE1fU2VuZENoYXIgKHVpbnQzMl90IGNoKQoreworICBpZiAoKChJVE0tPlRDUiAmIElUTV9UQ1JfSVRNRU5BX01zaykgIT0gMFVMKSAmJiAgICAgIC8qIElUTSBlbmFibGVkICovCisgICAgICAoKElUTS0+VEVSICYgMVVMICAgICAgICAgICAgICAgKSAhPSAwVUwpICAgKSAgICAgLyogSVRNIFBvcnQgIzAgZW5hYmxlZCAqLworICB7CisgICAgd2hpbGUgKElUTS0+UE9SVFswVV0udTMyID09IDBVTCkKKyAgICB7CisgICAgICBfX05PUCgpOworICAgIH0KKyAgICBJVE0tPlBPUlRbMFVdLnU4ID0gKHVpbnQ4X3QpY2g7CisgIH0KKyAgcmV0dXJuIChjaCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIElUTSBSZWNlaXZlIENoYXJhY3RlcgorICBcZGV0YWlscyBJbnB1dHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAtMSAgTm8gY2hhcmFjdGVyIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9SZWNlaXZlQ2hhciAodm9pZCkKK3sKKyAgaW50MzJfdCBjaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKworICBpZiAoSVRNX1J4QnVmZmVyICE9IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIGNoID0gSVRNX1J4QnVmZmVyOworICAgIElUTV9SeEJ1ZmZlciA9IElUTV9SWEJVRkZFUl9FTVBUWTsgICAgICAgLyogcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyICovCisgIH0KKworICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIENoZWNrIENoYXJhY3RlcgorICBcZGV0YWlscyBDaGVja3Mgd2hldGhlciBhIGNoYXJhY3RlciBpcyBwZW5kaW5nIGZvciByZWFkaW5nIGluIHRoZSB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAwICBObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICBccmV0dXJuICAgICAgICAgIDEgIENoYXJhY3RlciBhdmFpbGFibGUuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9DaGVja0NoYXIgKHZvaWQpCit7CisKKyAgaWYgKElUTV9SeEJ1ZmZlciA9PSBJVE1fUlhCVUZGRVJfRU1QVFkpCisgIHsKKyAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ00zX0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY200LmggYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODQwZWIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtNC5oCkBAIC0wLDAgKzEsMTkzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY200LmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTQgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNNF9IX0dFTkVSSUMKKyNkZWZpbmUgX19DT1JFX0NNNF9IX0dFTkVSSUMKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAgXHBhZ2UgQ01TSVNfTUlTUkFfRXhjZXB0aW9ucyAgTUlTUkEtQzoyMDA0IENvbXBsaWFuY2UgRXhjZXB0aW9ucworICBDTVNJUyB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIE1JU1JBLUM6MjAwNCBydWxlczoKKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgOC41LCBvYmplY3QvZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBoZWFkZXIgZmlsZS48YnI+CisgICAgIEZ1bmN0aW9uIGRlZmluaXRpb25zIGluIGhlYWRlciBmaWxlcyBhcmUgdXNlZCB0byBhbGxvdyAnaW5saW5pbmcnLgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSAxOC40LCBkZWNsYXJhdGlvbiBvZiB1bmlvbiB0eXBlIG9yIG9iamVjdCBvZiB1bmlvbiB0eXBlOiAney4uLn0nLjxicj4KKyAgICAgVW5pb25zIGFyZSB1c2VkIGZvciBlZmZlY3RpdmUgcmVwcmVzZW50YXRpb24gb2YgY29yZSByZWdpc3RlcnMuCisKKyAgIFxsaSBBZHZpc29yeSBSdWxlIDE5LjcsIEZ1bmN0aW9uLWxpa2UgbWFjcm8gZGVmaW5lZC48YnI+CisgICAgIEZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGNvZGUuCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIENNU0lTIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxpbmdyb3VwIENvcnRleF9NNAorICBAeworICovCisKKy8qICBDTVNJUyBDTTQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19DTTRfQ01TSVNfVkVSU0lPTl9NQUlOICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX0NNNF9DTVNJU19WRVJTSU9OX1NVQiAgICgweDFFVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTRfQ01TSVNfVkVSU0lPTiAgICAgICAoKF9fQ000X0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTRfQ01TSVNfVkVSU0lPTl9TVUIgICAgICAgICAgICkgICAgICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfTSAgICAgICAgICAgICAgICAoMHgwNFUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIEZvciB0aGlzLCBfX0ZQVV9QUkVTRU5UIGhhcyB0byBiZSBjaGVja2VkIHByaW9yIHRvIG1ha2luZyB1c2Ugb2YgRlBVIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgZnVuY3Rpb25zLgorKi8KKyNpZiBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaWYgZGVmaW5lZCBfX1RBUkdFVF9GUFVfVkZQCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDEpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI3dhcm5pbmcgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpZiBkZWZpbmVkIF9fQVJNVkZQX18KKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2lmIGRlZmluZWQgX19USV9WRlBfU1VQUE9SVF9fCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2lmICggX19DU01DX18gJiAweDQwMFUpCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgImNvcmVfY21JbnN0ci5oIiAgICAgICAgICAgICAgICAvKiBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21GdW5jLmgiICAgICAgICAgICAgICAgICAvKiBDb3JlIEZ1bmN0aW9uIEFjY2VzcyAqLworI2luY2x1ZGUgImNvcmVfY21TaW1kLmgiICAgICAgICAgICAgICAgICAvKiBDb21waWxlciBzcGVjaWZpYyBTSU1EIEludHJpbnNpY3MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTRfSF9HRU5FUklDICovCisKKyNpZm5kZWYgX19DTVNJU19HRU5FUklDCisKKyNpZm5kZWYgX19DT1JFX0NNNF9IX0RFUEVOREFOVAorI2RlZmluZSBfX0NPUkVfQ000X0hfREVQRU5EQU5UCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGNoZWNrIGRldmljZSBkZWZpbmVzIGFuZCB1c2UgZGVmYXVsdHMgKi8KKyNpZiBkZWZpbmVkIF9fQ0hFQ0tfREVWSUNFX0RFRklORVMKKyAgI2lmbmRlZiBfX0NNNF9SRVYKKyAgICAjZGVmaW5lIF9fQ000X1JFViAgICAgICAgICAgICAgIDB4MDAwMFUKKyAgICAjd2FybmluZyAiX19DTTRfUkVWIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19GUFVfUFJFU0VOVAorICAgICNkZWZpbmUgX19GUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0ZQVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19NUFVfUFJFU0VOVAorICAgICNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX01QVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19OVklDX1BSSU9fQklUUworICAgICNkZWZpbmUgX19OVklDX1BSSU9fQklUUyAgICAgICAgICA0VQorICAgICN3YXJuaW5nICJfX05WSUNfUFJJT19CSVRTIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19WZW5kb3JfU3lzVGlja0NvbmZpZworICAgICNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVQorICAgICN3YXJuaW5nICJfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorI2VuZGlmCisKKy8qIElPIGRlZmluaXRpb25zIChhY2Nlc3MgcmVzdHJpY3Rpb25zIHRvIHBlcmlwaGVyYWwgcmVnaXN0ZXJzKSAqLworLyoqCisgICAgXGRlZmdyb3VwIENNU0lTX2dsb2JfZGVmcyBDTVNJUyBHbG9iYWwgRGVmaW5lcworCisgICAgPHN0cm9uZz5JTyBUeXBlIFF1YWxpZmllcnM8L3N0cm9uZz4gYXJlIHVzZWQKKyAgICBcbGkgdG8gc3BlY2lmeSB0aGUgYWNjZXNzIHRvIHBlcmlwaGVyYWwgdmFyaWFibGVzLgorICAgIFxsaSBmb3IgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgcGVyaXBoZXJhbCByZWdpc3RlciBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyovCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZWxzZQorICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSBjb25zdCAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgX19PICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3dyaXRlIG9ubHknIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBwZXJtaXNzaW9ucyAqLworCisvKiBmb2xsb3dpbmcgZGVmaW5lcyBzaG91bGQgYmUgdXNlZCBmb3Igc3RydWN0dXJlIG1lbWJlcnMgKi8KKyNkZWZpbmUgICAgIF9fSU0gICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgLyohIERlZmluZXMgJ3JlYWQgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19PTSAgICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAnd3JpdGUgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JT00gICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENvcnRleF9NNCAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBSZWdpc3RlciBBYnN0cmFjdGlvbgorICBDb3JlIFJlZ2lzdGVyIGNvbnRhaW46CisgIC0gQ29yZSBSZWdpc3RlcgorICAtIENvcmUgTlZJQyBSZWdpc3RlcgorICAtIENvcmUgU0NCIFJlZ2lzdGVyCisgIC0gQ29yZSBTeXNUaWNrIFJlZ2lzdGVyCisgIC0gQ29yZSBEZWJ1ZyBSZWdpc3RlcgorICAtIENvcmUgTVBVIFJlZ2lzdGVyCisgIC0gQ29yZSBGUFUgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNjsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMTUgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgR0U6NDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAxNi4uMTkgIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCBmbGFncyAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6NzsgICAgICAgICAgICAgICAvKiE8IGJpdDogMjAuLjI2ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFE6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFEgTWFzayAqLworCisjZGVmaW5lIEFQU1JfR0VfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfR0VfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IEFQU1JfR0VfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6NzsgICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjE1ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IEdFOjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMTYuLjE5ICBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgZmxhZ3MgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjQ7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDIwLi4yMyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBUOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNCAgVGh1bWIgYml0ICAgICAgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IElUOjI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI2ICBzYXZlZCBJVCBzdGF0ZSAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgUToxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoM1VMIDw8IHhQU1JfSVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9HRV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9HRV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgeFBTUl9HRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBuUFJJVjoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgRXhlY3V0aW9uIHByaXZpbGVnZSBpbiBUaHJlYWQgbW9kZSAqLworICAgIHVpbnQzMl90IFNQU0VMOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjayB0byBiZSB1c2VkICovCisgICAgdWludDMyX3QgRlBDQToxOyAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDIgIEZQIGV4dGVuc2lvbiBhY3RpdmUgZmxhZyAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6Mjk7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDMuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9GUENBX1BvcyAgICAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogRlBDQSBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX0ZQQ0FfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9GUENBX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBGUENBIE1hc2sgKi8KKworI2RlZmluZSBDT05UUk9MX1NQU0VMX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9TUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBNYXNrICovCisKKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgQ09OVFJPTF9uUFJJVl9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19DT1JFICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQorICBcYnJpZWYgICAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTlZJQyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IElTRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElDRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSU0VSVkVEMVsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJU1BSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUFCUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjAwIChSL1cpICBJbnRlcnJ1cHQgQWN0aXZlIGJpdCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNTZVXTsKKyAgX19JT00gdWludDhfdCAgSVBbMjQwVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKDhCaXQgd2lkZSkgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzY0NFVdOworICBfX09NICB1aW50MzJfdCBTVElSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKCAvVykgIFNvZnR3YXJlIFRyaWdnZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCit9ICBOVklDX1R5cGU7CisKKy8qIFNvZnR3YXJlIFRyaWdnZXJlZCBJbnRlcnJ1cHQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX01zayAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IE5WSUNfU1RJUl9JTlRJRF9Qb3MqLykgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19OVklDICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ0IgICAgIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgQ1BVSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBDUFVJRCBCYXNlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZUT1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQ4X3QgIFNIUFsxMlVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgU3lzdGVtIEhhbmRsZXJzIFByaW9yaXR5IFJlZ2lzdGVycyAoNC03LCA4LTExLCAxMi0xNSkgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSEZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDJDIChSL1cpICBIYXJkRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgRGVidWcgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IE1NRkFSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWVtTWFuYWdlIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQkZBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBCdXNGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzQyAoUi9XKSAgQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBQRlJbMlVdOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvICkgIFByb2Nlc3NvciBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IERGUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi8gKSAgRGVidWcgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBBRFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNEMgKFIvICkgIEF1eGlsaWFyeSBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IE1NRlJbNFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi8gKSAgTWVtb3J5IE1vZGVsIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSVNBUls1VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDYwIChSLyApICBJbnN0cnVjdGlvbiBTZXQgQXR0cmlidXRlcyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbNVVdOworICBfX0lPTSB1aW50MzJfdCBDUEFDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODggKFIvVykgIENvcHJvY2Vzc29yIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCit9IFNDQl9UeXBlOworCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfTXNrICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX1ZBUklBTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX01zayAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Nc2sgICAgICAgICAgICAgICAoMHhGRkZVTCA8PCBTQ0JfQ1BVSURfUEFSVE5PX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zKi8pICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX1BvcyAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcyAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcyAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcyAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Nc2sgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcykgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Nc2sgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zKi8pICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfUG9zICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgTWFzayAqLworCisvKiBTQ0IgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX1BvcyAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX01zayAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcykgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MgICAgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1BSSUdST1VQX01zayAgICAgICAgICAgICAoN1VMIDw8IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBQUklHUk9VUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTXNrICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyovKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0VWT05QRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Qb3MgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfU1RLQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfQkZIRk5NSUdOX1BvcyAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJGSEZOTUlHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9CRkhGTk1JR05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfRElWXzBfVFJQX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IERJVl8wX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9ESVZfMF9UUlBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVU0VSU0VUTVBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX01zayAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcyAgICAgICAxNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zICAgICAgIDEzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTWVNUSUNLQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcyAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTU9OSVRPUkFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01PTklUT1JBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfUG9zICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgLyo8PCBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zKi8pICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUQUNUIE1hc2sgKi8KKworLyogU0NCIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcyAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfTUVNRkFVTFRTUl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IE1lbW9yeSBNYW5hZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zKi8pICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKy8qIFNDQiBIYXJkIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogREVCVUdFVlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX0RFQlVHRVZUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9GT1JDRURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9WRUNUVEJMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIE1hc2sgKi8KKworLyogU0NCIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0VYVEVSTkFMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfUG9zICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX1ZDQVRDSF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9WQ0FUQ0hfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBWQ0FUQ0ggTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9EV1RUUkFQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9CS1BUX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9CS1BUX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfQktQVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9IQUxURURfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfREZTUl9IQUxURURfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogSEFMVEVEIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ25TQ0IgU3lzdGVtIENvbnRyb2xzIG5vdCBpbiBTQ0IgKFNDblNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JTSAgdWludDMyX3QgSUNUUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFDVExSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gU0NuU0NCX1R5cGU7CisKKy8qIEludGVycnVwdCBDb250cm9sbGVyIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUNUUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fTXNrICAgICAgICAoMHhGVUwgLyo8PCBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Qb3MqLykgIC8qITwgSUNUUjogSU5UTElORVNOVU0gTWFzayAqLworCisvKiBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTT09GUF9Qb3MgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTT09GUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTT09GUF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU09PRlBfUG9zKSAgICAgICAgICAgLyohPCBBQ1RMUjogRElTT09GUCBNYXNrICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZQQ0FfUG9zICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZQQ0EgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZQQ0FfTXNrICAgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNGUENBX1BvcykgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZQQ0EgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGT0xEX1BvcyAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGT0xEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNGT0xEX01zayAgICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTRk9MRF9Qb3MpICAgICAgICAgICAvKiE8IEFDVExSOiBESVNGT0xEIE1hc2sgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTREVGV0JVRl9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTREVGV0JVRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTREVGV0JVRl9Nc2sgICAgICAgICgxVUwgPDwgU0NuU0NCX0FDVExSX0RJU0RFRldCVUZfUG9zKSAgICAgICAgLyohPCBBQ1RMUjogRElTREVGV0JVRiBNYXNrICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfUG9zICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU01DWUNJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfTXNrICAgICAgICAoMVVMIC8qPDwgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfUG9zKi8pICAgIC8qITwgQUNUTFI6IERJU01DWUNJTlQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TQ25vdFNDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIFRpbWVyIFJlZ2lzdGVycy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8KK30gU3lzVGlja19UeXBlOworCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIFN5c1RpY2sgUmVsb2FkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8KKworLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIE1hc2sgKi8KKworLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX1BvcyAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1N5c1RpY2sgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0lUTSAgICAgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgKElUTSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgUmVnaXN0ZXIgKElUTSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fT00gIHVuaW9uCisgIHsKKyAgICBfX09NICB1aW50OF90ICAgIHU4OyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCA4LWJpdCAqLworICAgIF9fT00gIHVpbnQxNl90ICAgdTE2OyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDE2LWJpdCAqLworICAgIF9fT00gIHVpbnQzMl90ICAgdTMyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDMyLWJpdCAqLworICB9ICBQT1JUIFszMlVdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IFJlZ2lzdGVycyAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbODY0VV07CisgIF9fSU9NIHVpbnQzMl90IFRFUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEUwMCAoUi9XKSAgSVRNIFRyYWNlIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMTVVXTsKKyAgX19JT00gdWludDMyX3QgVFBSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTQwIChSL1cpICBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxNVVdOworICBfX0lPTSB1aW50MzJfdCBUQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFODAgKFIvVykgIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1syOVVdOworICBfX09NICB1aW50MzJfdCBJV1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjggKCAvVykgIElUTSBJbnRlZ3JhdGlvbiBXcml0ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJUlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRkMgKFIvICkgIElUTSBJbnRlZ3JhdGlvbiBSZWFkIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElNQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEYwMCAoUi9XKSAgSVRNIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNDNVXTsKKyAgX19PTSAgdWludDMyX3QgTEFSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkIwICggL1cpICBJVE0gTG9jayBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgTFNSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkI0IChSLyApICBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzZVXTsKKyAgX19JTSAgdWludDMyX3QgUElENDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNCAqLworICBfX0lNICB1aW50MzJfdCBQSUQ1OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM1ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDY7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzYgKi8KKyAgX19JTSAgdWludDMyX3QgUElENzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkRDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNyAqLworICBfX0lNICB1aW50MzJfdCBQSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTAgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFNCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkU4IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLworICBfX0lNICB1aW50MzJfdCBQSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRUMgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovCisgIF9fSU0gIHVpbnQzMl90IENJRDA7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGMCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzAgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY0IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMSAqLworICBfX0lNICB1aW50MzJfdCBDSUQyOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjggKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMyICovCisgIF9fSU0gIHVpbnQzMl90IENJRDM7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGQyAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzMgKi8KK30gSVRNX1R5cGU7CisKKy8qIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX1RQUl9QUklWTUFTS19Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRQUjogUFJJVk1BU0sgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RQUl9QUklWTUFTS19Nc2sgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBJVE1fVFBSX1BSSVZNQVNLX1BvcyovKSAgICAgICAgICAgIC8qITwgSVRNIFRQUjogUFJJVk1BU0sgTWFzayAqLworCisvKiBJVE0gVHJhY2UgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fVENSX0JVU1lfUG9zICAgICAgICAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0JVU1lfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVHJhY2VCdXNJRF9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEFUQklEIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVHJhY2VCdXNJRF9Nc2sgICAgICAgICAgICAgKDB4N0ZVTCA8PCBJVE1fVENSX1RyYWNlQnVzSURfUG9zKSAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEFUQklEIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX0dUU0ZSRVFfUG9zICAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBHbG9iYWwgdGltZXN0YW1wIGZyZXF1ZW5jeSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0dUU0ZSRVFfTXNrICAgICAgICAgICAgICAgICgzVUwgPDwgSVRNX1RDUl9HVFNGUkVRX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBHbG9iYWwgdGltZXN0YW1wIGZyZXF1ZW5jeSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX1BvcyAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfTXNrICAgICAgICAgICAgICgzVUwgPDwgSVRNX1RDUl9UU1ByZXNjYWxlX1BvcykgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TV09FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1dPRU5BX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1dPRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Qb3MgICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9EV1RFTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfRFdURU5BX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogRFdURU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NZTkNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVFNFTkFfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVFNFTkFfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1RTRU5BX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX0lUTUVOQV9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBJVE0gRW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0lUTUVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fVENSX0lUTUVOQV9Qb3MqLykgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBJVE0gRW5hYmxlIGJpdCBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBXcml0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSVdSX0FUVkFMSURNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVdSOiBBVFZBTElETSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSVdSX0FUVkFMSURNX01zayAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSVdSX0FUVkFMSURNX1BvcyovKSAgICAgICAgICAgICAgLyohPCBJVE0gSVdSOiBBVFZBTElETSBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBSZWFkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JUlJfQVRSRUFEWU1fUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJUlI6IEFUUkVBRFlNIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JUlJfQVRSRUFEWU1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JUlJfQVRSRUFEWU1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJUlI6IEFUUkVBRFlNIE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSU1DUl9JTlRFR1JBVElPTl9Qb3MgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSU1DUjogSU5URUdSQVRJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lNQ1JfSU5URUdSQVRJT05fTXNrICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lNQ1JfSU5URUdSQVRJT05fUG9zKi8pICAgICAgICAgIC8qITwgSVRNIElNQ1I6IElOVEVHUkFUSU9OIE1hc2sgKi8KKworLyogSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9CeXRlQWNjX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQnl0ZUFjY19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQnl0ZUFjYyBNYXNrICovCisKKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0FjY2Vzc19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBNYXNrICovCisKKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX1ByZXNlbnRfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fTFNSX1ByZXNlbnRfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBQcmVzZW50IE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19JVE0gKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0RXVCAgICAgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgUmVnaXN0ZXIgKERXVCkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDWUNDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN5Y2xlIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENQSUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQ1BJIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEVYQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNMRUVQQ05UOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU2xlZXAgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTFNVQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBMU1UgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRk9MRENOVDsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgUENTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSLyApICBQcm9ncmFtIENvdW50ZXIgU2FtcGxlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENPTVAwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAwICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0swOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTWFzayBSZWdpc3RlciAwICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMSAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMSAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjE7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDIgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDIgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04yOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAzOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAzICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0szOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1NCAoUi9XKSAgTWFzayBSZWdpc3RlciAzICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMzsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMyAqLworfSBEV1RfVHlwZTsKKworLyogRFdUIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0NUUkxfTlVNQ09NUF9Qb3MgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5VTUNPTVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTlVNQ09NUF9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfTlVNQ09NUF9Qb3MpICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5VTUNPTVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX1BvcyAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT1RSQ1BLVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT1RSQ1BLVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9UUkNQS1QgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9FWFRUUklHX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9FWFRUUklHX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PRVhUVFJJRyBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfUG9zICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PQ1lDQ05UX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PQ1lDQ05UX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0NZQ0NOVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfUG9zICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PUFJGQ05UX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PUFJGQ05UX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1BSRkNOVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcyAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcyAgICAgICAgICAgIDIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX01zayAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX1BvcyAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9MU1VFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9MU1VFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTFNVRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zKSAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0VYQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1BJRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1BJRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENQSUVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9FWENUUkNFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENUUkNFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDVFJDRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcyAgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX01zayAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Nc2sgICAgICAgICAgICAgICAoMHgzVUwgPDwgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MpICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Qb3MgICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDVEFQX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDVEFQX1BvcykgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ1RBUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfUG9zICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RJTklUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Nc2sgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDQ05URU5BX01zayAgICAgICAgICAgICAoMHgxVUwgLyo8PCBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zKi8pICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0NOVEVOQSBNYXNrICovCisKKy8qIERXVCBDUEkgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9DUElDTlRfQ1BJQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBNYXNrICovCisKKy8qIERXVCBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9FWENDTlRfRVhDQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBNYXNrICovCisKKy8qIERXVCBTbGVlcCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9TTEVFUENOVF9TTEVFUENOVF9Nc2sgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9TTEVFUENOVF9TTEVFUENOVF9Qb3MqLykgICAvKiE8IERXVCBTTEVFUENOVDogU0xFRVBDTlQgTWFzayAqLworCisvKiBEV1QgTFNVIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgTWFzayAqLworCisvKiBEV1QgRm9sZGVkLWluc3RydWN0aW9uIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zKi8pICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIE1hc2sgKi8KKworLyogRFdUIENvbXBhcmF0b3IgTWFzayBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfTUFTS19NQVNLX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTUFTSzogTUFTSyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfTUFTS19NQVNLX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgLyo8PCBEV1RfTUFTS19NQVNLX1BvcyovKSAgICAgICAgICAgLyohPCBEV1QgTUFTSzogTUFTSyBNYXNrICovCisKKy8qIERXVCBDb21wYXJhdG9yIEZ1bmN0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSEVEX1BvcyAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0hFRCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIxX1BvcyAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Nc2sgICAgICAgICgweEZVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIwX1BvcyAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Nc2sgICAgICAgICgweEZVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVlNJWkVfUG9zICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZTSVpFIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVlNJWkVfTXNrICAgICAgICAgKDB4M1VMIDw8IERXVF9GVU5DVElPTl9EQVRBVlNJWkVfUG9zKSAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZTSVpFIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Qb3MgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IExOSzFFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Qb3MgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWTUFUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfTXNrICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfUG9zICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IENZQ01BVENIIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Nc2sgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MpICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9FTUlUUkFOR0VfUG9zICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRU1JVFJBTkdFIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9FTUlUUkFOR0VfTXNrICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9FTUlUUkFOR0VfUG9zKSAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRU1JVFJBTkdFIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEZVTkNUSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Nc2sgICAgICAgICAgKDB4RlVMIC8qPDwgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyovKSAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0RXVCAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfVFBJICAgICBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFRyYWNlIFBvcnQgSW50ZXJmYWNlIChUUEkpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSBSZWdpc3RlciAoVFBJKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgU1NQU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBTdXBwb3J0ZWQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3VycmVudCBQYXJhbGxlbCBQb3J0IFNpemUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzJVXTsKKyAgX19JT00gdWludDMyX3QgQUNQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBBc3luY2hyb25vdXMgQ2xvY2sgUHJlc2NhbGVyIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVs1NVVdOworICBfX0lPTSB1aW50MzJfdCBTUFBSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwRjAgKFIvVykgIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTMxVV07CisgIF9fSU0gIHVpbnQzMl90IEZGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi8gKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRkZDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzA0IChSL1cpICBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgRlNDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzA4IChSLyApICBGb3JtYXR0ZXIgU3luY2hyb25pemF0aW9uIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzc1OVVdOworICBfX0lNICB1aW50MzJfdCBUUklHR0VSOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRTggKFIvICkgIFRSSUdHRVIgKi8KKyAgX19JTSAgdWludDMyX3QgRklGTzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUVDIChSLyApICBJbnRlZ3JhdGlvbiBFVE0gRGF0YSAqLworICBfX0lNICB1aW50MzJfdCBJVEFUQkNUUjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjAgKFIvICkgIElUQVRCQ1RSMiAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbMVVdOworICBfX0lNICB1aW50MzJfdCBJVEFUQkNUUjA7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRjggKFIvICkgIElUQVRCQ1RSMCAqLworICBfX0lNICB1aW50MzJfdCBGSUZPMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRkMgKFIvICkgIEludGVncmF0aW9uIElUTSBEYXRhICovCisgIF9fSU9NIHVpbnQzMl90IElUQ1RSTDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEYwMCAoUi9XKSAgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVszOVVdOworICBfX0lPTSB1aW50MzJfdCBDTEFJTVNFVDsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQTAgKFIvVykgIENsYWltIHRhZyBzZXQgKi8KKyAgX19JT00gdWludDMyX3QgQ0xBSU1DTFI7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkE0IChSL1cpICBDbGFpbSB0YWcgY2xlYXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ3WzhVXTsKKyAgX19JTSAgdWludDMyX3QgREVWSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkM4IChSLyApICBUUElVX0RFVklEICovCisgIF9fSU0gIHVpbnQzMl90IERFVlRZUEU7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDQyAoUi8gKSAgVFBJVV9ERVZUWVBFICovCit9IFRQSV9UeXBlOworCisvKiBUUEkgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfQUNQUl9QUkVTQ0FMRVJfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgQUNQUjogUFJFU0NBTEVSIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Nc2sgICAgICAgICAgICAgKDB4MUZGRlVMIC8qPDwgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyovKSAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgTWFzayAqLworCisvKiBUUEkgU2VsZWN0ZWQgUGluIFByb3RvY29sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX01zayAgICAgICAgICAgICAgICAoMHgzVUwgLyo8PCBUUElfU1BQUl9UWE1PREVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBNYXNrICovCisKKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfUG9zICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0Tm9uU3RvcF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0Tm9uU3RvcF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdE5vblN0b3AgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfVENQcmVzZW50X01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfVENQcmVzZW50X1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IFRDUHJlc2VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcyAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GdFN0b3BwZWRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdFN0b3BwZWRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnRTdG9wcGVkIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfTXNrICAgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfRkZTUl9GbEluUHJvZ19Qb3MqLykgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIE1hc2sgKi8KKworLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfRkZDUl9UcmlnSW5fUG9zICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogVHJpZ0luIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX1RyaWdJbl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gTWFzayAqLworCisjZGVmaW5lIFRQSV9GRkNSX0VuRkNvbnRfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBFbkZDb250IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRkNSX0VuRkNvbnRfTXNrICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX0VuRkNvbnRfUG9zKSAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBFbkZDb250IE1hc2sgKi8KKworLyogVFBJIFRSSUdHRVIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFRSSUdHRVI6IFRSSUdHRVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX1RSSUdHRVJfVFJJR0dFUl9Nc2sgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyovKSAgICAgIC8qITwgVFBJIFRSSUdHRVI6IFRSSUdHRVIgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gRVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8wKSAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0yX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzBfRVRNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0xX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzBfRVRNMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0wX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFRQSV9GSUZPMF9FVE0wX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMCBNYXNrICovCisKKy8qIFRQSSBJVEFUQkNUUjIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQVRCQ1RSMjogQVRSRUFEWSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIElUTSBEYXRhIFJlZ2lzdGVyIERlZmluaXRpb25zIChGSUZPMSkgKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8xX0lUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTIgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8xX0lUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTEgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzFfSVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTAgTWFzayAqLworCisvKiBUUEkgSVRBVEJDVFIwIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX01zayAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRBVEJDVFIwX0FUUkVBRFlfUG9zKi8pICAgIC8qITwgVFBJIElUQVRCQ1RSMDogQVRSRUFEWSBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQ1RSTF9Nb2RlX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQ1RSTDogTW9kZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRDVFJMX01vZGVfTXNrICAgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVENUUkxfTW9kZV9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIE1hc2sgKi8KKworLyogVFBJIERFVklEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX05SWlZBTElEX1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfUG9zICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9QVElOVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfUG9zICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Nc2sgICAgICAgICAgICAgKDB4N1VMIDw8IFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9Bc3luQ2xrSW5fUG9zICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogQXN5bkNsa0luIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9Bc3luQ2xrSW5fTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9Bc3luQ2xrSW5fUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogQXN5bkNsa0luIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTnJUcmFjZUlucHV0X1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5yVHJhY2VJbnB1dCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTnJUcmFjZUlucHV0X01zayAgICAgICAgICgweDFGVUwgLyo8PCBUUElfREVWSURfTnJUcmFjZUlucHV0X1BvcyovKSAgLyohPCBUUEkgREVWSUQ6IE5yVHJhY2VJbnB1dCBNYXNrICovCisKKy8qIFRQSSBERVZUWVBFIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX01zayAgICAgICAgICAoMHhGVUwgPDwgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX1BvcykgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IE1ham9yVHlwZSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Nc2sgICAgICAgICAgICAoMHhGVUwgLyo8PCBUUElfREVWVFlQRV9TdWJUeXBlX1BvcyovKSAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX1RQSSAqLworCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfTVBVICAgICBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgVFlQRTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBNUFUgVHlwZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIE1QVSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJOUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgTVBVIFJlZ2lvbiBSTlJiZXIgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTVBVIEFsaWFzIDEgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBNUFUgQWxpYXMgMiBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIE1QVSBBbGlhcyAzIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCit9IE1QVV9UeXBlOworCisvKiBNUFUgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX1BvcyAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9JUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfSVJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogSVJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Qb3MgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfRFJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0RSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IERSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Nc2sgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfVFlQRV9TRVBBUkFURV9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgTWFzayAqLworCisvKiBNUFUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcyAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9QUklWREVGRU5BX01zayAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogUFJJVkRFRkVOQSBNYXNrICovCisKKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfUG9zICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX01zayAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBNYXNrICovCisKKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBOdW1iZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IE1QVV9STlJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfUG9zICAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX0FERFJfTXNrICAgICAgICAgICAgICAgICAgKDB4N0ZGRkZGRlVMIDw8IE1QVV9SQkFSX0FERFJfUG9zKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBRERSIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Qb3MgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQkFSX1ZBTElEX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgTVBVX1JCQVJfUkVHSU9OX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfTXNrICAgICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgTVBVX1JBU1JfQVRUUlNfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9YTl9Qb3MgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfWE5fTXNrICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1hOX1BvcykgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9BUF9Qb3MgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVBfTXNrICAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfQVBfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9URVhfUG9zICAgICAgICAgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX1RFWF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NfUG9zICAgICAgICAgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9TX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5TIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQl9Qb3MgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQl9Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Qb3MgICAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU1JEX01zayAgICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9SQVNSX1NSRF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCA8PCBNUFVfUkFTUl9TSVpFX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9SQVNSX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBEaXNhYmxlIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTVBVICovCisjZW5kaWYKKworCisjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0ZQVSAgICAgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IEZQQ0NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgRmxvYXRpbmctUG9pbnQgQ29udGV4dCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZQQ0FSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRmxvYXRpbmctUG9pbnQgQ29udGV4dCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZQRFNDUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRmxvYXRpbmctUG9pbnQgRGVmYXVsdCBTdGF0dXMgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvICkgIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDAgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSLyApICBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAxICovCit9IEZQVV9UeXBlOworCisvKiBGbG9hdGluZy1Qb2ludCBDb250ZXh0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0FTUEVOX1BvcyAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEFTUEVOIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfQVNQRU5fTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0FTUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQVNQRU4gYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfTFNQRU5fUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTFNQRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9MU1BFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX01PTlJEWV9Qb3MgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1PTlJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfTU9OUkRZX01zayAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX01PTlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU9OUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX0JGUkRZX1BvcyAgICAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEJGUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9CRlJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfQkZSRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBCRlJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9NTVJEWV9Qb3MgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNTVJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfTU1SRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX01NUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU1SRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfSEZSRFlfUG9zICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogSEZSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0hGUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9IRlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEhGUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX1RIUkVBRF9Qb3MgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByb2Nlc3NvciBtb2RlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfVEhSRUFEX01zayAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1RIUkVBRF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJvY2Vzc29yIG1vZGUgYWN0aXZlIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9VU0VSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IEZQVV9GUENDUl9MU1BBQ1RfUG9zKi8pICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IE1hc2sgKi8KKworLyogRmxvYXRpbmctUG9pbnQgQ29udGV4dCBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUENBUl9BRERSRVNTX1BvcyAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0FSOiBBRERSRVNTIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQVJfQUREUkVTU19Nc2sgICAgICAgICAgICAgICgweDFGRkZGRkZGVUwgPDwgRlBVX0ZQQ0FSX0FERFJFU1NfUG9zKSAgICAgICAgLyohPCBGUENBUjogQUREUkVTUyBiaXQgTWFzayAqLworCisvKiBGbG9hdGluZy1Qb2ludCBEZWZhdWx0IFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUERTQ1JfQUhQX1BvcyAgICAgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogQUhQIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0FIUF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9BSFBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEFIUCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fUG9zICAgICAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0ROX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBEU0NSX0ZaX1BvcyAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0ZaX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9GWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Qb3MgICAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Nc2sgICAgICAgICAgICAgICAoM1VMIDw8IEZQVV9GUERTQ1JfUk1vZGVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgTWFzayAqLworCisvKiBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAwIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Qb3MgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUCByb3VuZGluZyBtb2RlcyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Nc2sgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9GUF9yb3VuZGluZ19tb2Rlc19Qb3MpICAgICAvKiE8IE1WRlIwOiBGUCByb3VuZGluZyBtb2RlcyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfU2hvcnRfdmVjdG9yc19Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogU2hvcnQgdmVjdG9ycyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX01zayAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX1BvcykgICAgICAgICAvKiE8IE1WRlIwOiBTaG9ydCB2ZWN0b3JzIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Qb3MgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBTcXVhcmUgcm9vdCBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Nc2sgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9TcXVhcmVfcm9vdF9Qb3MpICAgICAgICAgICAvKiE8IE1WRlIwOiBTcXVhcmUgcm9vdCBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRGl2aWRlX1BvcyAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRGl2aWRlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0RpdmlkZV9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0RpdmlkZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERpdmlkZSBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRlBfZXhjZXBfdHJhcHBpbmdfUG9zICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlAgZXhjZXB0aW9uIHRyYXBwaW5nIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX01zayAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQX2V4Y2VwX3RyYXBwaW5nX1BvcykgICAgIC8qITwgTVZGUjA6IEZQIGV4Y2VwdGlvbiB0cmFwcGluZyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRG91YmxlX3ByZWNpc2lvbl9Qb3MgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRG91YmxlLXByZWNpc2lvbiBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX01zayAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX1BvcykgICAgICAvKiE8IE1WRlIwOiBEb3VibGUtcHJlY2lzaW9uIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9TaW5nbGVfcHJlY2lzaW9uX1BvcyAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBTaW5nbGUtcHJlY2lzaW9uIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fTXNrICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fUG9zKSAgICAgIC8qITwgTVZGUjA6IFNpbmdsZS1wcmVjaXNpb24gYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX0FfU0lNRF9yZWdpc3RlcnNfUG9zICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEFfU0lNRCByZWdpc3RlcnMgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfQV9TSU1EX3JlZ2lzdGVyc19Nc2sgICAgICgweEZVTCAvKjw8IEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX1BvcyovKSAgLyohPCBNVkZSMDogQV9TSU1EIHJlZ2lzdGVycyBiaXRzIE1hc2sgKi8KKworLyogTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMSBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfTVZGUjFfRlBfZnVzZWRfTUFDX1BvcyAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgZnVzZWQgTUFDIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Nc2sgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0ZQX2Z1c2VkX01BQ19Qb3MpICAgICAgICAgIC8qITwgTVZGUjE6IEZQIGZ1c2VkIE1BQyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjFfRlBfSFBGUF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlAgSFBGUCBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9IUEZQX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUF9IUEZQX1BvcykgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBIUEZQIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMV9EX05hTl9tb2RlX1BvcyAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBEX05hTiBtb2RlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0RfTmFOX21vZGVfTXNrICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0RfTmFOX21vZGVfUG9zKSAgICAgICAgICAgIC8qITwgTVZGUjE6IERfTmFOIG1vZGUgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX0Z0Wl9tb2RlX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZ0WiBtb2RlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0Z0Wl9tb2RlX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBGUFVfTVZGUjFfRnRaX21vZGVfUG9zKi8pICAgICAgICAgIC8qITwgTVZGUjE6IEZ0WiBtb2RlIGJpdHMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19GUFUgKi8KKyNlbmRpZgorCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZURlYnVnICAgICAgIENvcmUgRGVidWcgUmVnaXN0ZXJzIChDb3JlRGVidWcpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXIgKENvcmVEZWJ1ZykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IERIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19PTSAgdWludDMyX3QgRENSU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0ICggL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERDUkRSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBEYXRhIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERFTUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gQ29yZURlYnVnX1R5cGU7CisKKy8qIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfTXNrICAgICAgICAgKDB4RkZGRlVMIDw8IENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVRJUkVfU1QgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0xPQ0tVUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFR1JEWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcyAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU05BUFNUQUxMIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fTXNrICAgICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zKi8pICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIE1hc2sgKi8KKworLyogRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgTWFzayAqLworCisvKiBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX1BvcyAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcyAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0hBUkRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX1BvcyAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Qb3MgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcyAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfU1RBVEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfUG9zICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX05PQ1BFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfTXNrICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zKi8pICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZURlYnVnICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iaXRmaWVsZCAgICAgQ29yZSByZWdpc3RlciBiaXQgZmllbGQgbWFjcm9zCisgIFxicmllZiAgICAgIE1hY3JvcyBmb3IgdXNlIHdpdGggYml0IGZpZWxkIGRlZmluaXRpb25zICh4eHhfUG9zLCB4eHhfTXNrKS4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgTWFzayBhbmQgc2hpZnQgYSBiaXQgZmllbGQgdmFsdWUgZm9yIHVzZSBpbiBhIHJlZ2lzdGVyIGJpdCByYW5nZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiB0aGUgYml0IGZpZWxkLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgdmFsdWUuCisqLworI2RlZmluZSBfVkFMMkZMRChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgPDwgZmllbGQgIyMgX1BvcykgJiBmaWVsZCAjIyBfTXNrKQorCisvKioKKyAgXGJyaWVmICAgICBNYXNrIGFuZCBzaGlmdCBhIHJlZ2lzdGVyIHZhbHVlIHRvIGV4dHJhY3QgYSBiaXQgZmlsZWQgdmFsdWUuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCBiaXQgZmllbGQgdmFsdWUuCisqLworI2RlZmluZSBfRkxEMlZBTChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgJiBmaWVsZCAjIyBfTXNrKSA+PiBmaWVsZCAjIyBfUG9zKQorCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19jb3JlX2JpdGZpZWxkICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iYXNlICAgICBDb3JlIERlZmluaXRpb25zCisgIFxicmllZiAgICAgIERlZmluaXRpb25zIGZvciBiYXNlIGFkZHJlc3NlcywgdW5pb25zLCBhbmQgc3RydWN0dXJlcy4KKyAgQHsKKyAqLworCisvKiBNZW1vcnkgbWFwcGluZyBvZiBDb3J0ZXgtTTQgSGFyZHdhcmUgKi8KKyNkZWZpbmUgU0NTX0JBU0UgICAgICAgICAgICAoMHhFMDAwRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBJVE1fQkFTRSAgICAgICAgICAgICgweEUwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBEV1RfQkFTRSAgICAgICAgICAgICgweEUwMDAxMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBUUElfQkFTRSAgICAgICAgICAgICgweEUwMDQwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBDb3JlRGVidWdfQkFTRSAgICAgICgweEUwMDBFREYwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZSBEZWJ1ZyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTQ0JfQkFTRSAgICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgU0NuU0NCICAgICAgICAgICAgICAoKFNDblNDQl9UeXBlICAgICopICAgICBTQ1NfQkFTRSAgICAgICkgICAvKiE8IFN5c3RlbSBjb250cm9sIFJlZ2lzdGVyIG5vdCBpbiBTQ0IgKi8KKyNkZWZpbmUgU0NCICAgICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRSAgICAgICkgICAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBJVE0gICAgICAgICAgICAgICAgICgoSVRNX1R5cGUgICAgICAgKikgICAgIElUTV9CQVNFICAgICAgKSAgIC8qITwgSVRNIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIERXVCAgICAgICAgICAgICAgICAgKChEV1RfVHlwZSAgICAgICAqKSAgICAgRFdUX0JBU0UgICAgICApICAgLyohPCBEV1QgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgVFBJICAgICAgICAgICAgICAgICAoKFRQSV9UeXBlICAgICAgICopICAgICBUUElfQkFTRSAgICAgICkgICAvKiE8IFRQSSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBDb3JlRGVidWcgICAgICAgICAgICgoQ29yZURlYnVnX1R5cGUgKikgICAgIENvcmVEZWJ1Z19CQVNFKSAgIC8qITwgQ29yZSBEZWJ1ZyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisgICNkZWZpbmUgTVBVX0JBU0UgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQ5MFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisgICNkZWZpbmUgTVBVICAgICAgICAgICAgICAgKChNUFVfVHlwZSAgICAgICAqKSAgICAgTVBVX0JBU0UgICAgICApICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisjZW5kaWYKKworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAjZGVmaW5lIEZQVV9CQVNFICAgICAgICAgIChTQ1NfQkFTRSArICAweDBGMzBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgRmxvYXRpbmcgUG9pbnQgVW5pdCAqLworICAjZGVmaW5lIEZQVSAgICAgICAgICAgICAgICgoRlBVX1R5cGUgICAgICAgKikgICAgIEZQVV9CQVNFICAgICAgKSAgIC8qITwgRmxvYXRpbmcgUG9pbnQgVW5pdCAqLworI2VuZGlmCisKKy8qQH0gKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcgorICBDb3JlIEZ1bmN0aW9uIEludGVyZmFjZSBjb250YWluczoKKyAgLSBDb3JlIE5WSUMgRnVuY3Rpb25zCisgIC0gQ29yZSBTeXNUaWNrIEZ1bmN0aW9ucworICAtIENvcmUgRGVidWcgRnVuY3Rpb25zCisgIC0gQ29yZSBSZWdpc3RlciBBY2Nlc3MgRnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlIEZ1bmN0aW9ucyBhbmQgSW5zdHJ1Y3Rpb25zIFJlZmVyZW5jZQorKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgTlZJQyBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgTlZJQyBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBpbnRlcnJ1cHRzIGFuZCBleGNlcHRpb25zIHZpYSB0aGUgTlZJQy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgU2V0IFByaW9yaXR5IEdyb3VwaW5nCisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIHVzaW5nIHRoZSByZXF1aXJlZCB1bmxvY2sgc2VxdWVuY2UuCisgICAgICAgICAgIFRoZSBwYXJhbWV0ZXIgUHJpb3JpdHlHcm91cCBpcyBhc3NpZ25lZCB0byB0aGUgZmllbGQgU0NCLT5BSVJDUiBbMTA6OF0gUFJJR1JPVVAgZmllbGQuCisgICAgICAgICAgIE9ubHkgdmFsdWVzIGZyb20gMC4uNyBhcmUgdXNlZC4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgICBQcmlvcml0eUdyb3VwICBQcmlvcml0eSBncm91cGluZyBmaWVsZC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQcmlvcml0eUdyb3VwaW5nKHVpbnQzMl90IFByaW9yaXR5R3JvdXApCit7CisgIHVpbnQzMl90IHJlZ192YWx1ZTsKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgICAgICAgICAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKworICByZWdfdmFsdWUgID0gIFNDQi0+QUlSQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZCBvbGQgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAgICAqLworICByZWdfdmFsdWUgJj0gfigodWludDMyX3QpKFNDQl9BSVJDUl9WRUNUS0VZX01zayB8IFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spKTsgLyogY2xlYXIgYml0cyB0byBjaGFuZ2UgICAgICAgICAgICAgICAqLworICByZWdfdmFsdWUgID0gIChyZWdfdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSB8CisgICAgICAgICAgICAgICAgKFByaW9yaXR5R3JvdXBUbXAgPDwgOFUpICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAvKiBJbnNlcnQgd3JpdGUga2V5IGFuZCBwcmlvcnR5IGdyb3VwICovCisgIFNDQi0+QUlSQ1IgPSAgcmVnX3ZhbHVlOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUHJpb3JpdHkgR3JvdXBpbmcKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIGZyb20gdGhlIE5WSUMgSW50ZXJydXB0IENvbnRyb2xsZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgKFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkKS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHlHcm91cGluZyh2b2lkKQoreworICByZXR1cm4gKCh1aW50MzJfdCkoKFNDQi0+QUlSQ1IgJiBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSA+PiBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEVuYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRW5hYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0VuYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNFUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIERpc2FibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNFUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgcGVuZGluZyByZWdpc3RlciBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgcGVuZGluZy4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgU2V0cyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBBY3RpdmUgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBhY3RpdmUgcmVnaXN0ZXIgaW4gTlZJQyBhbmQgcmV0dXJucyB0aGUgYWN0aXZlIGJpdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IGFjdGl2ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIGFjdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0QWN0aXZlKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklBQlJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgIFxub3RlICAgIFRoZSBwcmlvcml0eSBjYW5ub3QgYmUgc2V0IGZvciBldmVyeSBjb3JlIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccGFyYW0gW2luXSAgcHJpb3JpdHkgIFByaW9yaXR5IHRvIHNldC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPCAwKQorICB7CisgICAgU0NCLT5TSFBbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTlZJQy0+SVBbKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCAoZGV2aWNlIHNwZWNpZmljKSBpbnRlcnJ1cHQsCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYW4gaW50ZXJuYWwgKGNvcmUpIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4pCit7CisKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClTQ0ItPlNIUFsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKCgodWludDMyX3QpTlZJQy0+SVBbKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEVuY29kZSBQcmlvcml0eQorICBcZGV0YWlscyBFbmNvZGVzIHRoZSBwcmlvcml0eSBmb3IgYW4gaW50ZXJydXB0IHdpdGggdGhlIGdpdmVuIHByaW9yaXR5IGdyb3VwLAorICAgICAgICAgICBwcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlLCBhbmQgc3VicHJpb3JpdHkgdmFsdWUuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLgorICBccGFyYW0gW2luXSAgIFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHBhcmFtIFtpbl0gICAgICAgU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgRW5jb2RlZCBwcmlvcml0eS4gVmFsdWUgY2FuIGJlIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIFxyZWYgTlZJQ19TZXRQcmlvcml0eSgpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19FbmNvZGVQcmlvcml0eSAodWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5LCB1aW50MzJfdCBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgIHJldHVybiAoCisgICAgICAgICAgICgoUHJlZW1wdFByaW9yaXR5ICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpKSA8PCBTdWJQcmlvcml0eUJpdHMpIHwKKyAgICAgICAgICAgKChTdWJQcmlvcml0eSAgICAgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCkpKQorICAgICAgICAgKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGVjb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIERlY29kZXMgYW4gaW50ZXJydXB0IHByaW9yaXR5IHZhbHVlIHdpdGggYSBnaXZlbiBwcmlvcml0eSBncm91cCB0bworICAgICAgICAgICBwcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgICAgIFByaW9yaXR5ICAgUHJpb3JpdHkgdmFsdWUsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX0dldFByaW9yaXR5KCkuCisgIFxwYXJhbSBbaW5dICAgICBQcmlvcml0eUdyb3VwICBVc2VkIHByaW9yaXR5IGdyb3VwLgorICBccGFyYW0gW291dF0gcFByZWVtcHRQcmlvcml0eSAgUHJlZW1wdGl2ZSBwcmlvcml0eSB2YWx1ZSAoc3RhcnRpbmcgZnJvbSAwKS4KKyAgXHBhcmFtIFtvdXRdICAgICBwU3ViUHJpb3JpdHkgIFN1YnByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0RlY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eSwgdWludDMyX3QgUHJpb3JpdHlHcm91cCwgdWludDMyX3QqIGNvbnN0IHBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90KiBjb25zdCBwU3ViUHJpb3JpdHkpCit7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgIC8qIG9ubHkgdmFsdWVzIDAuLjcgYXJlIHVzZWQgICAgICAgICAgKi8KKyAgdWludDMyX3QgUHJlZW1wdFByaW9yaXR5Qml0czsKKyAgdWludDMyX3QgU3ViUHJpb3JpdHlCaXRzOworCisgIFByZWVtcHRQcmlvcml0eUJpdHMgPSAoKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApID4gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpIDogKHVpbnQzMl90KSg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKTsKKyAgU3ViUHJpb3JpdHlCaXRzICAgICA9ICgoUHJpb3JpdHlHcm91cFRtcCArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpIDwgKHVpbnQzMl90KTdVTCkgPyAodWludDMyX3QpMFVMIDogKHVpbnQzMl90KSgoUHJpb3JpdHlHcm91cFRtcCAtIDdVTCkgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKTsKKworICAqcFByZWVtcHRQcmlvcml0eSA9IChQcmlvcml0eSA+PiBTdWJQcmlvcml0eUJpdHMpICYgKHVpbnQzMl90KSgoMVVMIDw8IChQcmVlbXB0UHJpb3JpdHlCaXRzKSkgLSAxVUwpOworICAqcFN1YlByaW9yaXR5ICAgICA9IChQcmlvcml0eSAgICAgICAgICAgICAgICAgICApICYgKHVpbnQzMl90KSgoMVVMIDw8IChTdWJQcmlvcml0eUJpdHMgICAgKSkgLSAxVUwpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICh1aW50MzJfdCkoKDB4NUZBVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICk7ICAgICAgICAgLyogS2VlcCBwcmlvcml0eSBncm91cCB1bmNoYW5nZWQgKi8KKyAgX19EU0IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIGNvbXBsZXRpb24gb2YgbWVtb3J5IGFjY2VzcyAqLworCisgIGZvcig7OykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhaXQgdW50aWwgcmVzZXQgKi8KKyAgeworICAgIF9fTk9QKCk7CisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFN5c1RpY2sgZnVuY3Rpb24gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyBTeXNUaWNrIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIHRoZSBTeXN0ZW0uCisgIEB7CisgKi8KKworI2lmIChfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnID09IDBVKQorCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFRpY2sgQ29uZmlndXJhdGlvbgorICBcZGV0YWlscyBJbml0aWFsaXplcyB0aGUgU3lzdGVtIFRpbWVyIGFuZCBpdHMgaW50ZXJydXB0LCBhbmQgc3RhcnRzIHRoZSBTeXN0ZW0gVGljayBUaW1lci4KKyAgICAgICAgICAgQ291bnRlciBpcyBpbiBmcmVlIHJ1bm5pbmcgbW9kZSB0byBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHRzLgorICBccGFyYW0gW2luXSAgdGlja3MgIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZC4KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQuCisgIFxub3RlICAgIFdoZW4gdGhlIHZhcmlhYmxlIDxiPl9fVmVuZG9yX1N5c1RpY2tDb25maWc8L2I+IGlzIHNldCB0byAxLCB0aGVuIHRoZQorICAgICAgICAgICBmdW5jdGlvbiA8Yj5TeXNUaWNrX0NvbmZpZzwvYj4gaXMgbm90IGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBmaWxlIDxiPjxpPmRldmljZTwvaT4uaDwvYj4KKyAgICAgICAgICAgbXVzdCBjb250YWluIGEgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTeXNUaWNrX0NvbmZpZyh1aW50MzJfdCB0aWNrcykKK3sKKyAgaWYgKCh0aWNrcyAtIDFVTCkgPiBTeXNUaWNrX0xPQURfUkVMT0FEX01zaykKKyAgeworICAgIHJldHVybiAoMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvYWQgdmFsdWUgaW1wb3NzaWJsZSAqLworICB9CisKKyAgU3lzVGljay0+TE9BRCAgPSAodWludDMyX3QpKHRpY2tzIC0gMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJlbG9hZCByZWdpc3RlciAqLworICBOVklDX1NldFByaW9yaXR5IChTeXNUaWNrX0lSUW4sICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykgLSAxVUwpOyAvKiBzZXQgUHJpb3JpdHkgZm9yIFN5c3RpY2sgSW50ZXJydXB0ICovCisgIFN5c1RpY2stPlZBTCAgID0gMFVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIFN5c1RpY2sgQ291bnRlciBWYWx1ZSAqLworICBTeXNUaWNrLT5DVFJMICA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTeXNUaWNrIElSUSBhbmQgU3lzVGljayBUaW1lciAqLworICByZXR1cm4gKDBVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBzdWNjZXNzZnVsICovCit9CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGVidWcgSW4vT3V0cHV0IGZ1bmN0aW9uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyBJVE0gRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIElUTSBkZWJ1ZyBpbnRlcmZhY2UuCisgIEB7CisgKi8KKworZXh0ZXJuIHZvbGF0aWxlIGludDMyX3QgSVRNX1J4QnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyohPCBFeHRlcm5hbCB2YXJpYWJsZSB0byByZWNlaXZlIGNoYXJhY3RlcnMuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBJVE1fUlhCVUZGRVJfRU1QVFkgICAweDVBQTU1QUE1VSAvKiE8IFZhbHVlIGlkZW50aWZ5aW5nIFxyZWYgSVRNX1J4QnVmZmVyIGlzIHJlYWR5IGZvciBuZXh0IGNoYXJhY3Rlci4gKi8KKworCisvKioKKyAgXGJyaWVmICAgSVRNIFNlbmQgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIFRyYW5zbWl0cyBhIGNoYXJhY3RlciB2aWEgdGhlIElUTSBjaGFubmVsIDAsIGFuZAorICAgICAgICAgICBcbGkgSnVzdCByZXR1cm5zIHdoZW4gbm8gZGVidWdnZXIgaXMgY29ubmVjdGVkIHRoYXQgaGFzIGJvb2tlZCB0aGUgb3V0cHV0LgorICAgICAgICAgICBcbGkgSXMgYmxvY2tpbmcgd2hlbiBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCwgYnV0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgc2VudCBoYXMgbm90IGJlZW4gdHJhbnNtaXR0ZWQuCisgIFxwYXJhbSBbaW5dICAgICBjaCAgQ2hhcmFjdGVyIHRvIHRyYW5zbWl0LgorICBccmV0dXJucyAgICAgICAgICAgIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IElUTV9TZW5kQ2hhciAodWludDMyX3QgY2gpCit7CisgIGlmICgoKElUTS0+VENSICYgSVRNX1RDUl9JVE1FTkFfTXNrKSAhPSAwVUwpICYmICAgICAgLyogSVRNIGVuYWJsZWQgKi8KKyAgICAgICgoSVRNLT5URVIgJiAxVUwgICAgICAgICAgICAgICApICE9IDBVTCkgICApICAgICAvKiBJVE0gUG9ydCAjMCBlbmFibGVkICovCisgIHsKKyAgICB3aGlsZSAoSVRNLT5QT1JUWzBVXS51MzIgPT0gMFVMKQorICAgIHsKKyAgICAgIF9fTk9QKCk7CisgICAgfQorICAgIElUTS0+UE9SVFswVV0udTggPSAodWludDhfdCljaDsKKyAgfQorICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIFJlY2VpdmUgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIElucHV0cyBhIGNoYXJhY3RlciB2aWEgdGhlIGV4dGVybmFsIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLgorICBccmV0dXJuICAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3Rlci4KKyAgXHJldHVybiAgICAgICAgIC0xICBObyBjaGFyYWN0ZXIgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX1JlY2VpdmVDaGFyICh2b2lkKQoreworICBpbnQzMl90IGNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworCisgIGlmIChJVE1fUnhCdWZmZXIgIT0gSVRNX1JYQlVGRkVSX0VNUFRZKQorICB7CisgICAgY2ggPSBJVE1fUnhCdWZmZXI7CisgICAgSVRNX1J4QnVmZmVyID0gSVRNX1JYQlVGRkVSX0VNUFRZOyAgICAgICAvKiByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgfQorCisgIHJldHVybiAoY2gpOworfQorCisKKy8qKgorICBcYnJpZWYgICBJVE0gQ2hlY2sgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIENoZWNrcyB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIHBlbmRpbmcgZm9yIHJlYWRpbmcgaW4gdGhlIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLgorICBccmV0dXJuICAgICAgICAgIDAgIE5vIGNoYXJhY3RlciBhdmFpbGFibGUuCisgIFxyZXR1cm4gICAgICAgICAgMSAgQ2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX0NoZWNrQ2hhciAodm9pZCkKK3sKKworICBpZiAoSVRNX1J4QnVmZmVyID09IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIHJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTRfSF9ERVBFTkRBTlQgKi8KKworI2VuZGlmIC8qIF9fQ01TSVNfR0VORVJJQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbTcuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY203LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3NTMwYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY203LmgKQEAgLTAsMCArMSwyNTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9jbTcuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NNyBDb3JlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlCisgKiBAdmVyc2lvbiAgVjQuMzAKKyAqIEBkYXRlICAgICAyMC4gT2N0b2JlciAyMDE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNSBBUk0gTElNSVRFRAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAqCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAjcHJhZ21hIHN5c3RlbV9pbmNsdWRlICAgICAgICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlIGZvciBNSVNSQSBjaGVjayAqLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgLyogdHJlYXQgZmlsZSBhcyBzeXN0ZW0gaW5jbHVkZSBmaWxlICovCisjZW5kaWYKKworI2lmbmRlZiBfX0NPUkVfQ003X0hfR0VORVJJQworI2RlZmluZSBfX0NPUkVfQ003X0hfR0VORVJJQworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICBccGFnZSBDTVNJU19NSVNSQV9FeGNlcHRpb25zICBNSVNSQS1DOjIwMDQgQ29tcGxpYW5jZSBFeGNlcHRpb25zCisgIENNU0lTIHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgTUlTUkEtQzoyMDA0IHJ1bGVzOgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSA4LjUsIG9iamVjdC9mdW5jdGlvbiBkZWZpbml0aW9uIGluIGhlYWRlciBmaWxlLjxicj4KKyAgICAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgaW4gaGVhZGVyIGZpbGVzIGFyZSB1c2VkIHRvIGFsbG93ICdpbmxpbmluZycuCisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDE4LjQsIGRlY2xhcmF0aW9uIG9mIHVuaW9uIHR5cGUgb3Igb2JqZWN0IG9mIHVuaW9uIHR5cGU6ICd7Li4ufScuPGJyPgorICAgICBVbmlvbnMgYXJlIHVzZWQgZm9yIGVmZmVjdGl2ZSByZXByZXNlbnRhdGlvbiBvZiBjb3JlIHJlZ2lzdGVycy4KKworICAgXGxpIEFkdmlzb3J5IFJ1bGUgMTkuNywgRnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbmVkLjxicj4KKyAgICAgRnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIHVzZWQgdG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgY29kZS4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgQ01TSVMgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGluZ3JvdXAgQ29ydGV4X003CisgIEB7CisgKi8KKworLyogIENNU0lTIENNNyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBfX0NNN19DTVNJU19WRVJTSU9OX01BSU4gICgweDA0VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzMxOjE2XSBDTVNJUyBIQUwgbWFpbiB2ZXJzaW9uICovCisjZGVmaW5lIF9fQ003X0NNU0lTX1ZFUlNJT05fU1VCICAgKDB4MUVVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMTU6MF0gIENNU0lTIEhBTCBzdWIgdmVyc2lvbiAqLworI2RlZmluZSBfX0NNN19DTVNJU19WRVJTSU9OICAgICAgICgoX19DTTdfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDE2VSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NNN19DTVNJU19WRVJTSU9OX1NVQiAgICAgICAgICAgKSAgICAgICAgLyohPCBDTVNJUyBIQUwgdmVyc2lvbiBudW1iZXIgKi8KKworI2RlZmluZSBfX0NPUlRFWF9NICAgICAgICAgICAgICAgICgweDA3VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29ydGV4LU0gQ29yZSAqLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyLiBPbmx5IGF2YWlsYWJsZSBpbiBIaWdoIG9wdGltaXphdGlvbiBtb2RlISAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEkgQ0NTIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2RlZmluZSBfX3BhY2tlZAorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIuIFVzZSAtcGM5OSBvbiBjb21waWxlIGxpbmUgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2Vsc2UKKyAgI2Vycm9yIFVua25vd24gY29tcGlsZXIKKyNlbmRpZgorCisvKiogX19GUFVfVVNFRCBpbmRpY2F0ZXMgd2hldGhlciBhbiBGUFUgaXMgdXNlZCBvciBub3QuCisgICAgRm9yIHRoaXMsIF9fRlBVX1BSRVNFTlQgaGFzIHRvIGJlIGNoZWNrZWQgcHJpb3IgdG8gbWFraW5nIHVzZSBvZiBGUFUgc3BlY2lmaWMgcmVnaXN0ZXJzIGFuZCBmdW5jdGlvbnMuCisqLworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNpZiBkZWZpbmVkIF9fQVJNX1BDU19WRlAKKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjd2FybmluZyAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjaWYgZGVmaW5lZCAoX19WRlBfRlBfXykgJiYgIWRlZmluZWQoX19TT0ZURlBfXykKKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2lmIGRlZmluZWQgX19BUk1WRlBfXworICAgICNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNpZiBkZWZpbmVkIF9fRlBVX1ZGUF9fCisgICAgI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkKKyAgICAjaWYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbVNpbWQuaCIgICAgICAgICAgICAgICAgIC8qIENvbXBpbGVyIHNwZWNpZmljIFNJTUQgSW50cmluc2ljcyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX0NNN19IX0dFTkVSSUMgKi8KKworI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMKKworI2lmbmRlZiBfX0NPUkVfQ003X0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9DTTdfSF9ERVBFTkRBTlQKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogY2hlY2sgZGV2aWNlIGRlZmluZXMgYW5kIHVzZSBkZWZhdWx0cyAqLworI2lmIGRlZmluZWQgX19DSEVDS19ERVZJQ0VfREVGSU5FUworICAjaWZuZGVmIF9fQ003X1JFVgorICAgICNkZWZpbmUgX19DTTdfUkVWICAgICAgICAgICAgICAgMHgwMDAwVQorICAgICN3YXJuaW5nICJfX0NNN19SRVYgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX0ZQVV9QUkVTRU5UCisgICAgI2RlZmluZSBfX0ZQVV9QUkVTRU5UICAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fRlBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX01QVV9QUkVTRU5UCisgICAgI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fTVBVX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX0lDQUNIRV9QUkVTRU5UCisgICAgI2RlZmluZSBfX0lDQUNIRV9QUkVTRU5UICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fSUNBQ0hFX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX0RDQUNIRV9QUkVTRU5UCisgICAgI2RlZmluZSBfX0RDQUNIRV9QUkVTRU5UICAgICAgICAgIDBVCisgICAgI3dhcm5pbmcgIl9fRENBQ0hFX1BSRVNFTlQgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX0RUQ01fUFJFU0VOVAorICAgICNkZWZpbmUgX19EVENNX1BSRVNFTlQgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0RUQ01fUFJFU0VOVCAgICAgICAgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX05WSUNfUFJJT19CSVRTCisgICAgI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgIDNVCisgICAgI3dhcm5pbmcgIl9fTlZJQ19QUklPX0JJVFMgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisKKyAgI2lmbmRlZiBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnCisgICAgI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVCisgICAgI3dhcm5pbmcgIl9fVmVuZG9yX1N5c1RpY2tDb25maWcgbm90IGRlZmluZWQgaW4gZGV2aWNlIGhlYWRlciBmaWxlOyB1c2luZyBkZWZhdWx0ISIKKyAgI2VuZGlmCisjZW5kaWYKKworLyogSU8gZGVmaW5pdGlvbnMgKGFjY2VzcyByZXN0cmljdGlvbnMgdG8gcGVyaXBoZXJhbCByZWdpc3RlcnMpICovCisvKioKKyAgICBcZGVmZ3JvdXAgQ01TSVNfZ2xvYl9kZWZzIENNU0lTIEdsb2JhbCBEZWZpbmVzCisKKyAgICA8c3Ryb25nPklPIFR5cGUgUXVhbGlmaWVyczwvc3Ryb25nPiBhcmUgdXNlZAorICAgIFxsaSB0byBzcGVjaWZ5IHRoZSBhY2Nlc3MgdG8gcGVyaXBoZXJhbCB2YXJpYWJsZXMuCisgICAgXGxpIGZvciBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBwZXJpcGhlcmFsIHJlZ2lzdGVyIGRlYnVnIGluZm9ybWF0aW9uLgorKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbHNlCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2VuZGlmCisjZGVmaW5lICAgICBfX08gICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAnd3JpdGUgb25seScgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU8gICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHBlcm1pc3Npb25zICovCisKKy8qIGZvbGxvd2luZyBkZWZpbmVzIHNob3VsZCBiZSB1c2VkIGZvciBzdHJ1Y3R1cmUgbWVtYmVycyAqLworI2RlZmluZSAgICAgX19JTSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAvKiEgRGVmaW5lcyAncmVhZCBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX09NICAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICd3cml0ZSBvbmx5JyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPTSAgICB2b2xhdGlsZSAgICAgICAgICAgIC8qISBEZWZpbmVzICdyZWFkIC8gd3JpdGUnIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ29ydGV4X003ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFic3RyYWN0aW9uCisgIENvcmUgUmVnaXN0ZXIgY29udGFpbjoKKyAgLSBDb3JlIFJlZ2lzdGVyCisgIC0gQ29yZSBOVklDIFJlZ2lzdGVyCisgIC0gQ29yZSBTQ0IgUmVnaXN0ZXIKKyAgLSBDb3JlIFN5c1RpY2sgUmVnaXN0ZXIKKyAgLSBDb3JlIERlYnVnIFJlZ2lzdGVyCisgIC0gQ29yZSBNUFUgUmVnaXN0ZXIKKyAgLSBDb3JlIEZQVSBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9yZWdpc3RlciBEZWZpbmVzIGFuZCBUeXBlIERlZmluaXRpb25zCisgIFxicmllZiBUeXBlIGRlZmluaXRpb25zIGFuZCBkZWZpbmVzIGZvciBDb3J0ZXgtTSBwcm9jZXNzb3IgYmFzZWQgZGV2aWNlcy4KKyovCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX0NPUkUgIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcnMKKyAgXGJyaWVmICAgICAgQ29yZSBSZWdpc3RlciB0eXBlIGRlZmluaXRpb25zLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBQcm9ncmFtIFN0YXR1cyBSZWdpc3RlciAoQVBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE2OyAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4xNSAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBHRTo0OyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDE2Li4xOSAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIGZsYWdzICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTo3OyAgICAgICAgICAgICAgIC8qITwgYml0OiAyMC4uMjYgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgUToxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IEFQU1JfVHlwZTsKKworLyogQVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBBUFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIEFQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIEFQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogUSBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9HRV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9HRV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgQVBTUl9HRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogR0UgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnRlcnJ1cHQgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKElQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjIzOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gSVBTUl9UeXBlOworCisvKiBJUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSBJUFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgSVBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBTcGVjaWFsLVB1cnBvc2UgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXJzICh4UFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDo3OyAgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMTUgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgR0U6NDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAxNi4uMTkgIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCBmbGFncyAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6NDsgICAgICAgICAgICAgICAvKiE8IGJpdDogMjAuLjIzICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFQ6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgSVQ6MjsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAyNS4uMjYgIHNhdmVkIElUIHN0YXRlICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBROjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNyAgU2F0dXJhdGlvbiBjb25kaXRpb24gZmxhZyAqLworICAgIHVpbnQzMl90IFY6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI4ICBPdmVyZmxvdyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgQzoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjkgIENhcnJ5IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBaOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMCAgWmVybyBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgTjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzEgIE5lZ2F0aXZlIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30geFBTUl9UeXBlOworCisvKiB4UFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIHhQU1JfTl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9OX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9aX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1pfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9aX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9RX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1FfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9RX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBRIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0lUX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lUX01zayAgICAgICAgICAgICAgICAgICAgICAgICgzVUwgPDwgeFBTUl9JVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9UX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1RfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9UX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX0dFX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBHRSBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0dFX01zayAgICAgICAgICAgICAgICAgICAgICAgICgweEZVTCA8PCB4UFNSX0dFX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBHRSBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JU1JfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVNSIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVNSX01zayAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCB4UFNSX0lTUl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBNYXNrICovCisKKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIENvbnRyb2wgUmVnaXN0ZXJzIChDT05UUk9MKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IG5QUklWOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAwICBFeGVjdXRpb24gcHJpdmlsZWdlIGluIFRocmVhZCBtb2RlICovCisgICAgdWludDMyX3QgU1BTRUw6MTsgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgIDEgIFN0YWNrIHRvIGJlIHVzZWQgKi8KKyAgICB1aW50MzJfdCBGUENBOjE7ICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMiAgRlAgZXh0ZW5zaW9uIGFjdGl2ZSBmbGFnICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyOTsgICAgICAgICAgICAgIC8qITwgYml0OiAgMy4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IENPTlRST0xfVHlwZTsKKworLyogQ09OVFJPTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDT05UUk9MX0ZQQ0FfUG9zICAgICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBGUENBIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfRlBDQV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX0ZQQ0FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IEZQQ0EgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfU1BTRUxfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfU1BTRUxfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX1NQU0VMX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNQU0VMIE1hc2sgKi8KKworI2RlZmluZSBDT05UUk9MX25QUklWX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX25QUklWX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBDT05UUk9MX25QUklWX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBuUFJJViBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NPUkUgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19OVklDICBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpCisgIFxicmllZiAgICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBOVklDIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgSVNFUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUNFUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJTRVJWRUQxWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElTUFJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDEwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJQ1BSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxODAgKFIvVykgIEludGVycnVwdCBDbGVhciBQZW5kaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1syNFVdOworICBfX0lPTSB1aW50MzJfdCBJQUJSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyMDAgKFIvVykgIEludGVycnVwdCBBY3RpdmUgYml0IFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs1NlVdOworICBfX0lPTSB1aW50OF90ICBJUFsyNDBVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvVykgIEludGVycnVwdCBQcmlvcml0eSBSZWdpc3RlciAoOEJpdCB3aWRlKSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbNjQ0VV07CisgIF9fT00gIHVpbnQzMl90IFNUSVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEUwMCAoIC9XKSAgU29mdHdhcmUgVHJpZ2dlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KK30gIE5WSUNfVHlwZTsKKworLyogU29mdHdhcmUgVHJpZ2dlcmVkIEludGVycnVwdCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBOVklDX1NUSVJfSU5USURfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTVElSOiBJTlRMSU5FU05VTSBQb3NpdGlvbiAqLworI2RlZmluZSBOVklDX1NUSVJfSU5USURfTXNrICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgTlZJQ19TVElSX0lOVElEX1BvcyovKSAgICAgICAgLyohPCBTVElSOiBJTlRMSU5FU05VTSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX05WSUMgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NDQiAgICAgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBDUFVJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIENQVUlEIEJhc2UgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSUNTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBJbnRlcnJ1cHQgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVlRPUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFJUkNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDhfdCAgU0hQUlsxMlVdOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzICg0LTcsIDgtMTEsIDEyLTE1KSAqLworICBfX0lPTSB1aW50MzJfdCBTSENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBIRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMkMgKFIvVykgIEhhcmRGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgREZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDMwIChSL1cpICBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTU1GQVI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNZW1NYW5hZ2UgRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBCRkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEJ1c0ZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDNDIChSL1cpICBBdXhpbGlhcnkgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElEX1BGUlsyVV07ICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0MCAoUi8gKSAgUHJvY2Vzc29yIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSURfREZSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSLyApICBEZWJ1ZyBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElEX0FGUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0QyAoUi8gKSAgQXV4aWxpYXJ5IEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSURfTUZSWzRVXTsgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSLyApICBNZW1vcnkgTW9kZWwgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJRF9JU0FSWzVVXTsgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNjAgKFIvICkgIEluc3RydWN0aW9uIFNldCBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU0gIHVpbnQzMl90IENMSURSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA3OCAoUi8gKSAgQ2FjaGUgTGV2ZWwgSUQgcmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ1RSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDdDIChSLyApICBDYWNoZSBUeXBlIHJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENDU0lEUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi8gKSAgQ2FjaGUgU2l6ZSBJRCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDU1NFTFI7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODQgKFIvVykgIENhY2hlIFNpemUgU2VsZWN0aW9uIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENQQUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4OCAoUi9XKSAgQ29wcm9jZXNzb3IgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzkzVV07CisgIF9fT00gIHVpbnQzMl90IFNUSVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoIC9XKSAgU29mdHdhcmUgVHJpZ2dlcmVkIEludGVycnVwdCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbMTVVXTsKKyAgX19JTSAgdWludDMyX3QgTVZGUjA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjQwIChSLyApICBNZWRpYSBhbmQgVkZQIEZlYXR1cmUgUmVnaXN0ZXIgMCAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNDQgKFIvICkgIE1lZGlhIGFuZCBWRlAgRmVhdHVyZSBSZWdpc3RlciAxICovCisgIF9fSU0gIHVpbnQzMl90IE1WRlIyOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI0OCAoUi8gKSAgTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDEgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzFVXTsKKyAgX19PTSAgdWludDMyX3QgSUNJQUxMVTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjUwICggL1cpICBJLUNhY2hlIEludmFsaWRhdGUgQWxsIHRvIFBvVSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDZbMVVdOworICBfX09NICB1aW50MzJfdCBJQ0lNVkFVOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNTggKCAvVykgIEktQ2FjaGUgSW52YWxpZGF0ZSBieSBNVkEgdG8gUG9VICovCisgIF9fT00gIHVpbnQzMl90IERDSU1WQUM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI1QyAoIC9XKSAgRC1DYWNoZSBJbnZhbGlkYXRlIGJ5IE1WQSB0byBQb0MgKi8KKyAgX19PTSAgdWludDMyX3QgRENJU1c7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjYwICggL1cpICBELUNhY2hlIEludmFsaWRhdGUgYnkgU2V0LXdheSAqLworICBfX09NICB1aW50MzJfdCBEQ0NNVkFVOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNjQgKCAvVykgIEQtQ2FjaGUgQ2xlYW4gYnkgTVZBIHRvIFBvVSAqLworICBfX09NICB1aW50MzJfdCBEQ0NNVkFDOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNjggKCAvVykgIEQtQ2FjaGUgQ2xlYW4gYnkgTVZBIHRvIFBvQyAqLworICBfX09NICB1aW50MzJfdCBEQ0NTVzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNkMgKCAvVykgIEQtQ2FjaGUgQ2xlYW4gYnkgU2V0LXdheSAqLworICBfX09NICB1aW50MzJfdCBEQ0NJTVZBQzsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNzAgKCAvVykgIEQtQ2FjaGUgQ2xlYW4gYW5kIEludmFsaWRhdGUgYnkgTVZBIHRvIFBvQyAqLworICBfX09NICB1aW50MzJfdCBEQ0NJU1c7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNzQgKCAvVykgIEQtQ2FjaGUgQ2xlYW4gYW5kIEludmFsaWRhdGUgYnkgU2V0LXdheSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDdbNlVdOworICBfX0lPTSB1aW50MzJfdCBJVENNQ1I7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyOTAgKFIvVykgIEluc3RydWN0aW9uIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBEVENNQ1I7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyOTQgKFIvVykgIERhdGEgVGlnaHRseS1Db3VwbGVkIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVycyAqLworICBfX0lPTSB1aW50MzJfdCBBSEJQQ1I7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyOTggKFIvVykgIEFIQlAgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDQUNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyOUMgKFIvVykgIEwxIENhY2hlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUhCU0NSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MkEwIChSL1cpICBBSEIgU2xhdmUgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDhbMVVdOworICBfX0lPTSB1aW50MzJfdCBBQkZTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyQTggKFIvVykgIEF1eGlsaWFyeSBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCit9IFNDQl9UeXBlOworCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfTXNrICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX1ZBUklBTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX01zayAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Nc2sgICAgICAgICAgICAgICAoMHhGRkZVTCA8PCBTQ0JfQ1BVSURfUEFSVE5PX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zKi8pICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX1BvcyAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcyAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcyAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcyAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Nc2sgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcykgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Nc2sgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zKi8pICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfUG9zICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgTWFzayAqLworCisvKiBTQ0IgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX1BvcyAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX01zayAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcykgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MgICAgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1BSSUdST1VQX01zayAgICAgICAgICAgICAoN1VMIDw8IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBQUklHUk9VUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTXNrICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVFJFU0VUX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQUlSQ1JfVkVDVFJFU0VUX1BvcyovKSAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RSRVNFVCBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0VWT05QRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDUl9CUF9Qb3MgICAgICAgICAgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQnJhbmNoIHByZWRpY3Rpb24gZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0JQX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9CUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCcmFuY2ggcHJlZGljdGlvbiBlbmFibGUgYml0IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0lDX1BvcyAgICAgICAgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBJbnN0cnVjdGlvbiBjYWNoZSBlbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfSUNfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX0lDX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEluc3RydWN0aW9uIGNhY2hlIGVuYWJsZSBiaXQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfRENfUG9zICAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IENhY2hlIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9EQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRENfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQ2FjaGUgZW5hYmxlIGJpdCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Qb3MgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfU1RLQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfQkZIRk5NSUdOX1BvcyAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJGSEZOTUlHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9CRkhGTk1JR05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfRElWXzBfVFJQX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IERJVl8wX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9ESVZfMF9UUlBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVU0VSU0VUTVBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX01zayAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ0NSX05PTkJBU0VUSFJERU5BX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0NSOiBOT05CQVNFVEhSREVOQSBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcyAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcyAgICAgICAxNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zICAgICAgIDEzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTWVNUSUNLQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1BFTkRTVkFDVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBQRU5EU1ZBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcyAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTU9OSVRPUkFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01PTklUT1JBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfUG9zICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgLyo8PCBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zKi8pICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUQUNUIE1hc2sgKi8KKworLyogU0NCIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcyAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogQnVzIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfTUVNRkFVTFRTUl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IE1lbW9yeSBNYW5hZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zKi8pICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKy8qIFNDQiBIYXJkIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogREVCVUdFVlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX0RFQlVHRVZUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9GT1JDRURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9WRUNUVEJMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIE1hc2sgKi8KKworLyogU0NCIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0VYVEVSTkFMX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfUG9zICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX1ZDQVRDSF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9WQ0FUQ0hfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBWQ0FUQ0ggTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0RXVFRSQVBfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9EV1RUUkFQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBEV1RUUkFQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9CS1BUX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9CS1BUX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfQktQVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogQktQVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9IQUxURURfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfREZTUl9IQUxURURfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogSEFMVEVEIE1hc2sgKi8KKworLyogU0NCIENhY2hlIExldmVsIElEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DTElEUl9MT1VVX1BvcyAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDTElEUjogTG9VVSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0xJRFJfTE9VVV9Nc2sgICAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0NMSURSX0xPVVVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0xJRFI6IExvVVUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DTElEUl9MT0NfUG9zICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDTElEUjogTG9DIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DTElEUl9MT0NfTXNrICAgICAgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQ0xJRFJfTE9DX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDTElEUjogTG9DIE1hc2sgKi8KKworLyogU0NCIENhY2hlIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NUUl9GT1JNQVRfUG9zICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRm9ybWF0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfRk9STUFUX01zayAgICAgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQ1RSX0ZPUk1BVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEZvcm1hdCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NUUl9DV0dfUG9zICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogQ1dHIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfQ1dHX01zayAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DVFJfQ1dHX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IENXRyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NUUl9FUkdfUG9zICAgICAgICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRVJHIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfRVJHX01zayAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DVFJfRVJHX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEVSRyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NUUl9ETUlOTElORV9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRG1pbkxpbmUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NUUl9ETUlOTElORV9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NUUl9ETUlOTElORV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRG1pbkxpbmUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DVFJfSU1JTkxJTkVfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEltSW5MaW5lIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfSU1JTkxJTkVfTXNrICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NUUl9JTUlOTElORV9Qb3MqLykgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEltSW5MaW5lIE1hc2sgKi8KKworLyogU0NCIENhY2hlIFNpemUgSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9XVF9Qb3MgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9XVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1NJRFJfV1RfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1NJRFJfV0JfUG9zICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdCIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1NJRFJfV0JfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NTSURSX1dCX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdCIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NTSURSX1JBX1BvcyAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBSQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX1JBX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDU0lEUl9SQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBSQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDU0lEUl9XQV9Qb3MgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV0EgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9XQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1NJRFJfV0FfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV0EgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1NJRFJfTlVNU0VUU19Qb3MgICAgICAgICAgICAgMTNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IE51bVNldHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9OVU1TRVRTX01zayAgICAgICAgICAgICAoMHg3RkZGVUwgPDwgU0NCX0NDU0lEUl9OVU1TRVRTX1BvcykgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogTnVtU2V0cyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDU0lEUl9BU1NPQ0lBVElWSVRZX1BvcyAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogQXNzb2NpYXRpdml0eSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX0FTU09DSUFUSVZJVFlfTXNrICAgICAgICgweDNGRlVMIDw8IFNDQl9DQ1NJRFJfQVNTT0NJQVRJVklUWV9Qb3MpICAgICAgLyohPCBTQ0IgQ0NTSURSOiBBc3NvY2lhdGl2aXR5IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NTSURSX0xJTkVTSVpFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBMaW5lU2l6ZSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX0xJTkVTSVpFX01zayAgICAgICAgICAgICg3VUwgLyo8PCBTQ0JfQ0NTSURSX0xJTkVTSVpFX1BvcyovKSAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBMaW5lU2l6ZSBNYXNrICovCisKKy8qIFNDQiBDYWNoZSBTaXplIFNlbGVjdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ1NTRUxSX0xFVkVMX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1NTRUxSOiBMZXZlbCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1NTRUxSX0xFVkVMX01zayAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0NTU0VMUl9MRVZFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1NTRUxSOiBMZXZlbCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NTU0VMUl9JTkRfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENTU0VMUjogSW5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DU1NFTFJfSU5EX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9DU1NFTFJfSU5EX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBDU1NFTFI6IEluRCBNYXNrICovCisKKy8qIFNDQiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TVElSX0lOVElEX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTVElSOiBJTlRJRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU1RJUl9JTlRJRF9Nc2sgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX1NUSVJfSU5USURfUG9zKi8pICAgICAgICAgICAgLyohPCBTQ0IgU1RJUjogSU5USUQgTWFzayAqLworCisvKiBTQ0IgRC1DYWNoZSBJbnZhbGlkYXRlIGJ5IFNldC13YXkgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RDSVNXX1dBWV9Qb3MgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDSVNXOiBXYXkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDSVNXX1dBWV9Nc2sgICAgICAgICAgICAgICAgICAoM1VMIDw8IFNDQl9EQ0lTV19XQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDSVNXOiBXYXkgTWFzayAqLworCisjZGVmaW5lIFNDQl9EQ0lTV19TRVRfUG9zICAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0lTVzogU2V0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EQ0lTV19TRVRfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0RDSVNXX1NFVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0lTVzogU2V0IE1hc2sgKi8KKworLyogU0NCIEQtQ2FjaGUgQ2xlYW4gYnkgU2V0LXdheSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfRENDU1dfV0FZX1BvcyAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDU1c6IFdheSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRENDU1dfV0FZX01zayAgICAgICAgICAgICAgICAgICgzVUwgPDwgU0NCX0RDQ1NXX1dBWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDU1c6IFdheSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RDQ1NXX1NFVF9Qb3MgICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ1NXOiBTZXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ1NXX1NFVF9Nc2sgICAgICAgICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfRENDU1dfU0VUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ1NXOiBTZXQgTWFzayAqLworCisvKiBTQ0IgRC1DYWNoZSBDbGVhbiBhbmQgSW52YWxpZGF0ZSBieSBTZXQtd2F5IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9EQ0NJU1dfV0FZX1BvcyAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0NJU1c6IFdheSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRENDSVNXX1dBWV9Nc2sgICAgICAgICAgICAgICAgICgzVUwgPDwgU0NCX0RDQ0lTV19XQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDSVNXOiBXYXkgTWFzayAqLworCisjZGVmaW5lIFNDQl9EQ0NJU1dfU0VUX1BvcyAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0NJU1c6IFNldCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRENDSVNXX1NFVF9Nc2sgICAgICAgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9EQ0NJU1dfU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDSVNXOiBTZXQgTWFzayAqLworCisvKiBJbnN0cnVjdGlvbiBUaWdodGx5LUNvdXBsZWQgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lUQ01DUl9TWl9Qb3MgICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElUQ01DUjogU1ogUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lUQ01DUl9TWl9Nc2sgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0lUQ01DUl9TWl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElUQ01DUjogU1ogTWFzayAqLworCisjZGVmaW5lIFNDQl9JVENNQ1JfUkVURU5fUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJVENNQ1I6IFJFVEVOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JVENNQ1JfUkVURU5fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSVRDTUNSX1JFVEVOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJVENNQ1I6IFJFVEVOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSVRDTUNSX1JNV19Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSVRDTUNSOiBSTVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lUQ01DUl9STVdfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JVENNQ1JfUk1XX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElUQ01DUjogUk1XIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSVRDTUNSX0VOX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSVRDTUNSOiBFTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSVRDTUNSX0VOX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfSVRDTUNSX0VOX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSVRDTUNSOiBFTiBNYXNrICovCisKKy8qIERhdGEgVGlnaHRseS1Db3VwbGVkIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9EVENNQ1JfU1pfUG9zICAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEVENNQ1I6IFNaIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EVENNQ1JfU1pfTXNrICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9EVENNQ1JfU1pfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEVENNQ1I6IFNaIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRFRDTUNSX1JFVEVOX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBSRVRFTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRFRDTUNSX1JFVEVOX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RUQ01DUl9SRVRFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERUQ01DUjogUkVURU4gTWFzayAqLworCisjZGVmaW5lIFNDQl9EVENNQ1JfUk1XX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEVENNQ1I6IFJNVyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRFRDTUNSX1JNV19Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RUQ01DUl9STVdfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRFRDTUNSOiBSTVcgTWFzayAqLworCisjZGVmaW5lIFNDQl9EVENNQ1JfRU5fUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEVENNQ1I6IEVOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EVENNQ1JfRU5fTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9EVENNQ1JfRU5fUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEVENNQ1I6IEVOIE1hc2sgKi8KKworLyogQUhCUCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSEJQQ1JfU1pfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJQQ1I6IFNaIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSEJQQ1JfU1pfTXNrICAgICAgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQUhCUENSX1NaX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJQQ1I6IFNaIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUhCUENSX0VOX1BvcyAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUhCUENSOiBFTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUhCUENSX0VOX01zayAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQUhCUENSX0VOX1BvcyovKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUhCUENSOiBFTiBNYXNrICovCisKKy8qIEwxIENhY2hlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NBQ1JfRk9SQ0VXVF9Qb3MgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENBQ1I6IEZPUkNFV1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NBQ1JfRk9SQ0VXVF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQUNSX0ZPUkNFV1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENBQ1I6IEZPUkNFV1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQUNSX0VDQ0VOX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQUNSOiBFQ0NFTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0FDUl9FQ0NFTl9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NBQ1JfRUNDRU5fUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0FDUjogRUNDRU4gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQUNSX1NJV1RfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQUNSOiBTSVdUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQUNSX1NJV1RfTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9DQUNSX1NJV1RfUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQUNSOiBTSVdUIE1hc2sgKi8KKworLyogQUhCUyBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSEJTQ1JfSU5JVENPVU5UX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJTQ1I6IElOSVRDT1VOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUhCU0NSX0lOSVRDT1VOVF9Nc2sgICAgICAgICAgICgweDFGVUwgPDwgU0NCX0FIQlBDUl9JTklUQ09VTlRfUG9zKSAgICAgICAgICAgLyohPCBTQ0IgQUhCU0NSOiBJTklUQ09VTlQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSEJTQ1JfVFBSSV9Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSEJTQ1I6IFRQUkkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FIQlNDUl9UUFJJX01zayAgICAgICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfQUhCUENSX1RQUklfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFIQlNDUjogVFBSSSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FIQlNDUl9DVExfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFIQlNDUjogQ1RMIFBvc2l0aW9uKi8KKyNkZWZpbmUgU0NCX0FIQlNDUl9DVExfTXNrICAgICAgICAgICAgICAgICAoM1VMIC8qPDwgU0NCX0FIQlBDUl9DVExfUG9zKi8pICAgICAgICAgICAgICAgIC8qITwgU0NCIEFIQlNDUjogQ1RMIE1hc2sgKi8KKworLyogQXV4aWxpYXJ5IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0FCRlNSX0FYSU1UWVBFX1BvcyAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBBWElNVFlQRSBQb3NpdGlvbiovCisjZGVmaW5lIFNDQl9BQkZTUl9BWElNVFlQRV9Nc2sgICAgICAgICAgICAgKDNVTCA8PCBTQ0JfQUJGU1JfQVhJTVRZUEVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogQVhJTVRZUEUgTWFzayAqLworCisjZGVmaW5lIFNDQl9BQkZTUl9FUFBCX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogRVBQQiBQb3NpdGlvbiovCisjZGVmaW5lIFNDQl9BQkZTUl9FUFBCX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUJGU1JfRVBQQl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogRVBQQiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FCRlNSX0FYSU1fUG9zICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBBWElNIFBvc2l0aW9uKi8KKyNkZWZpbmUgU0NCX0FCRlNSX0FYSU1fTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9BQkZTUl9BWElNX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBBWElNIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUJGU1JfQUhCUF9Qb3MgICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IEFIQlAgUG9zaXRpb24qLworI2RlZmluZSBTQ0JfQUJGU1JfQUhCUF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0FCRlNSX0FIQlBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUJGU1I6IEFIQlAgTWFzayAqLworCisjZGVmaW5lIFNDQl9BQkZTUl9EVENNX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogRFRDTSBQb3NpdGlvbiovCisjZGVmaW5lIFNDQl9BQkZTUl9EVENNX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUJGU1JfRFRDTV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBQkZTUjogRFRDTSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FCRlNSX0lUQ01fUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBJVENNIFBvc2l0aW9uKi8KKyNkZWZpbmUgU0NCX0FCRlNSX0lUQ01fTXNrICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FCRlNSX0lUQ01fUG9zKi8pICAgICAgICAgICAgICAgIC8qITwgU0NCIEFCRlNSOiBJVENNIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ25TQ0IgU3lzdGVtIENvbnRyb2xzIG5vdCBpbiBTQ0IgKFNDblNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JTSAgdWludDMyX3QgSUNUUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFDVExSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gU0NuU0NCX1R5cGU7CisKKy8qIEludGVycnVwdCBDb250cm9sbGVyIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fUG9zICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSUNUUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0lDVFJfSU5UTElORVNOVU1fTXNrICAgICAgICAoMHhGVUwgLyo8PCBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Qb3MqLykgIC8qITwgSUNUUjogSU5UTElORVNOVU0gTWFzayAqLworCisvKiBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTSVRNQVRCRkxVU0hfUG9zICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTSVRNQVRCRkxVU0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0lUTUFUQkZMVVNIX01zayAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNJVE1BVEJGTFVTSF9Qb3MpICAgIC8qITwgQUNUTFI6IERJU0lUTUFUQkZMVVNIIE1hc2sgKi8KKworI2RlZmluZSBTQ25TQ0JfQUNUTFJfRElTUkFNT0RFX1BvcyAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBQ1RMUjogRElTUkFNT0RFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNSQU1PREVfTXNrICAgICAgICAgKDFVTCA8PCBTQ25TQ0JfQUNUTFJfRElTUkFNT0RFX1BvcykgICAgICAgICAvKiE8IEFDVExSOiBESVNSQU1PREUgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9GUEVYQ09ESVNfUG9zICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBGUEVYQ09ESVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0ZQRVhDT0RJU19Nc2sgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9GUEVYQ09ESVNfUG9zKSAgICAgICAgIC8qITwgQUNUTFI6IEZQRVhDT0RJUyBNYXNrICovCisKKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZPTERfUG9zICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZPTEQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU0ZPTERfTXNrICAgICAgICAgICAoMVVMIDw8IFNDblNDQl9BQ1RMUl9ESVNGT0xEX1BvcykgICAgICAgICAgIC8qITwgQUNUTFI6IERJU0ZPTEQgTWFzayAqLworCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX01zayAgICAgICAgKDFVTCAvKjw8IFNDblNDQl9BQ1RMUl9ESVNNQ1lDSU5UX1BvcyovKSAgICAvKiE8IEFDVExSOiBESVNNQ1lDSU5UIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0Nub3RTQ0IgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1N5c1RpY2sgICAgIFN5c3RlbSBUaWNrIFRpbWVyIChTeXNUaWNrKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBUaW1lciBSZWdpc3RlcnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gVGltZXIgKFN5c1RpY2spLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExPQUQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgU3lzVGljayBSZWxvYWQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVkFMOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0FMSUI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyICovCit9IFN5c1RpY2tfVHlwZTsKKworLyogU3lzVGljayBDb250cm9sIC8gU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ09VTlRGTEFHIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENMS1NPVVJDRSBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MpICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU3lzVGlja19DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBTeXNUaWNrIFJlbG9hZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0xPQURfUkVMT0FEX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIExPQUQ6IFJFTE9BRCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ3VycmVudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX1ZBTF9DVVJSRU5UX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MqLykgICAgLyohPCBTeXNUaWNrIFZBTDogQ1VSUkVOVCBNYXNrICovCisKKy8qIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9OT1JFRl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zKSAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogTk9SRUYgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX01zayAgICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ0FMSUJfU0tFV19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DQUxJQl9URU5NU19Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zKi8pICAgIC8qITwgU3lzVGljayBDQUxJQjogVEVOTVMgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TeXNUaWNrICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19JVE0gICAgIEluc3RydW1lbnRhdGlvbiBUcmFjZSBNYWNyb2NlbGwgKElUTSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIFJlZ2lzdGVyIChJVE0pLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX09NICB1bmlvbgorICB7CisgICAgX19PTSAgdWludDhfdCAgICB1ODsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgOC1iaXQgKi8KKyAgICBfX09NICB1aW50MTZfdCAgIHUxNjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAxNi1iaXQgKi8KKyAgICBfX09NICB1aW50MzJfdCAgIHUzMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCAzMi1iaXQgKi8KKyAgfSAgUE9SVCBbMzJVXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBJVE0gU3RpbXVsdXMgUG9ydCBSZWdpc3RlcnMgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzg2NFVdOworICBfX0lPTSB1aW50MzJfdCBURVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKFIvVykgIElUTSBUcmFjZSBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRQUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU0MCAoUi9XKSAgSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMTVVXTsKKyAgX19JT00gdWludDMyX3QgVENSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTgwIChSL1cpICBJVE0gVHJhY2UgQ29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjlVXTsKKyAgX19PTSAgdWludDMyX3QgSVdSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4ICggL1cpICBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSVJSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJTUNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzQzVV07CisgIF9fT00gIHVpbnQzMl90IExBUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCMCAoIC9XKSAgSVRNIExvY2sgQWNjZXNzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IExTUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCNCAoUi8gKSAgSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVs2VV07CisgIF9fSU0gIHVpbnQzMl90IFBJRDQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzQgKi8KKyAgX19JTSAgdWludDMyX3QgUElENTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNSAqLworICBfX0lNICB1aW50MzJfdCBQSUQ2OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM2ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDc7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzcgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkUwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBQSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkVDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworICBfX0lNICB1aW50MzJfdCBDSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjAgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovCisgIF9fSU0gIHVpbnQzMl90IENJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGNCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY4IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLworICBfX0lNICB1aW50MzJfdCBDSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRkMgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovCit9IElUTV9UeXBlOworCisvKiBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfTXNrICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgSVRNX1RQUl9QUklWTUFTS19Qb3MqLykgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIE1hc2sgKi8KKworLyogSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX1BvcyAgICAgICAgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0JVU1lfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RyYWNlQnVzSURfTXNrICAgICAgICAgICAgICgweDdGVUwgPDwgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcykgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX1BvcyAgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX01zayAgICAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfR1RTRlJFUV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUHJlc2NhbGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU1ByZXNjYWxlX01zayAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfVFNQcmVzY2FsZV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQcmVzY2FsZSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TV09FTkFfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1dPRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX1NXT0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9EV1RFTkFfUG9zICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogRFdURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fVENSX0RXVEVOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX1BvcyAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NZTkNFTkFfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TWU5DRU5BX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTWU5DRU5BIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RTRU5BX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RTRU5BX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9UU0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9JVE1FTkFfTXNrICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX1RDUl9JVE1FTkFfUG9zKi8pICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogSVRNIEVuYWJsZSBiaXQgTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gV3JpdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lXUl9BVFZBTElETV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lXUl9BVFZBTElETV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElXUjogQVRWQUxJRE0gTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gUmVhZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSVJSX0FUUkVBRFlNX01zayAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSVJSX0FUUkVBRFlNX1BvcyovKSAgICAgICAgICAgICAgLyohPCBJVE0gSVJSOiBBVFJFQURZTSBNYXNrICovCisKKy8qIElUTSBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lNQ1JfSU5URUdSQVRJT05fUG9zICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElNQ1I6IElOVEVHUkFUSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX01zayAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyovKSAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBNYXNrICovCisKKy8qIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfUG9zICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0J5dGVBY2NfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgTWFzayAqLworCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX1BvcyAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9BY2Nlc3NfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgTWFzayAqLworCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0xTUl9QcmVzZW50X1BvcyovKSAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfSVRNICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19EV1QgICAgIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIFJlZ2lzdGVyIChEV1QpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1lDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBDeWNsZSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDUElDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIENQSSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBFWENDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTTEVFUENOVDsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFNsZWVwIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IExTVUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTFNVIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZPTERDTlQ7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgRm9sZGVkLWluc3RydWN0aW9uIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IFBDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi8gKSAgUHJvZ3JhbSBDb3VudGVyIFNhbXBsZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDT01QMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMCAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMCAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjA7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDMwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDEgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDEgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04xOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAxICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAyOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAyICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0syOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0NCAoUi9XKSAgTWFzayBSZWdpc3RlciAyICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMjsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMiAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMyAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMzsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMyAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjM7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDMgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzk4MVVdOworICBfX09NICB1aW50MzJfdCBMQVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjAgKCAgVykgIExvY2sgQWNjZXNzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IExTUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCNCAoUiAgKSAgTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KK30gRFdUX1R5cGU7CisKKy8qIERXVCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfUG9zICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05VTUNPTVBfTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX05VTUNPTVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOVU1DT01QIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1RSQ1BLVF9Qb3MgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9UUkNQS1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9UUkNQS1RfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PRVhUVFJJR19Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PRVhUVFJJR19Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0VYVFRSSUcgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PQ1lDQ05UX1BvcyAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT0NZQ0NOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX05PUFJGQ05UX1BvcyAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1BSRkNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MgICAgICAgICAgICAyMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRk9MREVWVEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRk9MREVWVEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IEZPTERFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTFNVRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcykgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX1BvcyAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MgICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUENTQU1QTEVOQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfUENTQU1QTEVOQV9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBDU0FNUExFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfUG9zICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1NZTkNUQVBfTXNrICAgICAgICAgICAgICAgKDB4M1VMIDw8IERXVF9DVFJMX1NZTkNUQVBfUG9zKSAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTWU5DVEFQIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfUG9zICAgICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ1RBUF9Qb3MpICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX1BvcyAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MpICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BPU1RQUkVTRVRfTXNrICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RQUkVTRVRfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUUFJFU0VUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIC8qPDwgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyovKSAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgTWFzayAqLworCisvKiBEV1QgQ1BJIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgTWFzayAqLworCisvKiBEV1QgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgTWFzayAqLworCisvKiBEV1QgU2xlZXAgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfTXNrICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zKi8pICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIE1hc2sgKi8KKworLyogRFdUIExTVSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0xTVUNOVF9MU1VDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIE1hc2sgKi8KKworLyogRFdUIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRk9MRENOVF9GT0xEQ05UX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfRk9MRENOVF9GT0xEQ05UX1BvcyovKSAgICAgLyohPCBEV1QgRk9MRENOVDogRk9MRENOVCBNYXNrICovCisKKy8qIERXVCBDb21wYXJhdG9yIE1hc2sgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX01BU0tfTUFTS19Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIC8qPDwgRFdUX01BU0tfTUFTS19Qb3MqLykgICAgICAgICAgIC8qITwgRFdUIE1BU0s6IE1BU0sgTWFzayAqLworCisvKiBEV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMV9Qb3MgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfTXNrICAgICAgICAoMHhGVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZBRERSMF9Qb3MgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWQUREUjAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfTXNrICAgICAgICAoMHhGVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zKSAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcyAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX01zayAgICAgICAgICgweDNVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0xOSzFFTkFfUG9zICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBMTksxRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9MTksxRU5BX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWTUFUQ0hfUG9zICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVk1BVENIIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX01zayAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcyAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfTXNrICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fQ1lDTUFUQ0hfUG9zKSAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IENZQ01BVENIIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcyAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX01zayAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fRU1JVFJBTkdFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IEVNSVRSQU5HRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fTXNrICAgICAgICAgICgweEZVTCAvKjw8IERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MqLykgICAgLyohPCBEV1QgRlVOQ1RJT046IEZVTkNUSU9OIE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19EV1QgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1RQSSAgICAgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUcmFjZSBQb3J0IEludGVyZmFjZSAoVFBJKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgUmVnaXN0ZXIgKFRQSSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IFNTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgU3VwcG9ydGVkIFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN1cnJlbnQgUGFyYWxsZWwgUG9ydCBTaXplIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyVV07CisgIF9fSU9NIHVpbnQzMl90IEFDUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbNTVVXTsKKyAgX19JT00gdWludDMyX3QgU1BQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEYwIChSL1cpICBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzEzMVVdOworICBfX0lNICB1aW50MzJfdCBGRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvICkgIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwNCAoUi9XKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IEZTQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwOCAoUi8gKSAgRm9ybWF0dGVyIFN5bmNocm9uaXphdGlvbiBDb3VudGVyIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEM1s3NTlVXTsKKyAgX19JTSAgdWludDMyX3QgVFJJR0dFUjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUU4IChSLyApICBUUklHR0VSICovCisgIF9fSU0gIHVpbnQzMl90IEZJRk8wOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFQyAoUi8gKSAgSW50ZWdyYXRpb24gRVRNIERhdGEgKi8KKyAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIyOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUYwIChSLyApICBJVEFUQkNUUjIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzFVXTsKKyAgX19JTSAgdWludDMyX3QgSVRBVEJDVFIwOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUY4IChSLyApICBJVEFUQkNUUjAgKi8KKyAgX19JTSAgdWludDMyX3QgRklGTzE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RUZDIChSLyApICBJbnRlZ3JhdGlvbiBJVE0gRGF0YSAqLworICBfX0lPTSB1aW50MzJfdCBJVENUUkw7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGMDAgKFIvVykgIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbMzlVXTsKKyAgX19JT00gdWludDMyX3QgQ0xBSU1TRVQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkEwIChSL1cpICBDbGFpbSB0YWcgc2V0ICovCisgIF9fSU9NIHVpbnQzMl90IENMQUlNQ0xSOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBNCAoUi9XKSAgQ2xhaW0gdGFnIGNsZWFyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEN1s4VV07CisgIF9fSU0gIHVpbnQzMl90IERFVklEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDOCAoUi8gKSAgVFBJVV9ERVZJRCAqLworICBfX0lNICB1aW50MzJfdCBERVZUWVBFOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQ0MgKFIvICkgIFRQSVVfREVWVFlQRSAqLworfSBUUElfVHlwZTsKKworLyogVFBJIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfQUNQUl9QUkVTQ0FMRVJfTXNrICAgICAgICAgICAgICgweDFGRkZVTCAvKjw8IFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MqLykgICAgLyohPCBUUEkgQUNQUjogUFJFU0NBTEVSIE1hc2sgKi8KKworLyogVFBJIFNlbGVjdGVkIFBpbiBQcm90b2NvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfU1BQUl9UWE1PREVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgU1BQUjogVFhNT0RFIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Nc2sgICAgICAgICAgICAgICAgKDB4M1VMIC8qPDwgVFBJX1NQUFJfVFhNT0RFX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgTWFzayAqLworCisvKiBUUEkgRm9ybWF0dGVyIGFuZCBGbHVzaCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX1BvcyAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdE5vblN0b3BfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX01zayAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0ZGU1JfRmxJblByb2dfUG9zKi8pICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBNYXNrICovCisKKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX1BvcyAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZDUl9UcmlnSW5fTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZDUl9UcmlnSW5fUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogVHJpZ0luIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZDUl9FbkZDb250X1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZDUl9FbkZDb250X01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZDUl9FbkZDb250X1BvcykgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogRW5GQ29udCBNYXNrICovCisKKy8qIFRQSSBUUklHR0VSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9UUklHR0VSX1RSSUdHRVJfTXNrICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX1RSSUdHRVJfVFJJR0dFUl9Qb3MqLykgICAgICAvKiE8IFRQSSBUUklHR0VSOiBUUklHR0VSIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIEVUTSBEYXRhIFJlZ2lzdGVyIERlZmluaXRpb25zIChGSUZPMCkgKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcyAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfSVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfSVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfSVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IElUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9FVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0yX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTJfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0xX1BvcyAgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMV9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgVFBJX0ZJRk8wX0VUTTFfUG9zKSAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMF9FVE0wX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogRVRNMCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNMF9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBUUElfRklGTzBfRVRNMF9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgTWFzayAqLworCisvKiBUUEkgSVRBVEJDVFIyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX01zayAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zKi8pICAgIC8qITwgVFBJIElUQVRCQ1RSMjogQVRSRUFEWSBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBJVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzEpICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTV9ieXRlY291bnRfUG9zICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX1BvcyAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfRVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IEVUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMl9Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMV9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMV9JVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzFfSVRNMF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8xX0lUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIE1hc2sgKi8KKworLyogVFBJIElUQVRCQ1RSMCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjA6IEFUUkVBRFkgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0lUQ1RSTF9Nb2RlX01zayAgICAgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfSVRDVFJMX01vZGVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIElUQ1RSTDogTW9kZSBNYXNrICovCisKKy8qIFRQSSBERVZJRCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfREVWSURfTlJaVkFMSURfUG9zICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5SWlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9NQU5DVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9NQU5DVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTUFOQ1ZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX1BvcyAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfUFRJTlZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfUFRJTlZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IFBUSU5WQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX01pbkJ1ZlN6X1BvcyAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNaW5CdWZTeiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTWluQnVmU3pfTXNrICAgICAgICAgICAgICgweDdVTCA8PCBUUElfREVWSURfTWluQnVmU3pfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1pbkJ1ZlN6IE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX1BvcyAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfQXN5bkNsa0luX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfQXN5bkNsa0luX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEFzeW5DbGtJbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgVFBJX0RFVklEX05yVHJhY2VJbnB1dF9Qb3MqLykgIC8qITwgVFBJIERFVklEOiBOclRyYWNlSW5wdXQgTWFzayAqLworCisvKiBUUEkgREVWVFlQRSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Nc2sgICAgICAgICAgKDB4RlVMIDw8IFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MpICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZUWVBFX1N1YlR5cGVfTXNrICAgICAgICAgICAgKDB4RlVMIC8qPDwgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MqLykgICAgICAvKiE8IFRQSSBERVZUWVBFOiBTdWJUeXBlIE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19UUEkgKi8KKworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX01QVSAgICAgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAoTVBVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IFRZUEU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgTVBVIFR5cGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBNUFUgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSTlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIE1QVSBSZWdpb24gUk5SYmVyIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIE1QVSBBbGlhcyAxIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgTVBVIEFsaWFzIDIgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNUFUgQWxpYXMgMyBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworfSBNUFVfVHlwZTsKKworLyogTVBVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0lSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9EUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfTXNrICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1RZUEVfU0VQQVJBVEVfUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIE1hc2sgKi8KKworLyogTVBVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Nc2sgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX1BvcyAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfSEZOTUlFTkFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gTnVtYmVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfUk5SX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9BRERSX01zayAgICAgICAgICAgICAgICAgICgweDdGRkZGRkZVTCA8PCBNUFVfUkJBUl9BRERSX1BvcykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQUREUiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfVkFMSURfUG9zICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkJBUl9WQUxJRF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICgweEZVTCAvKjw8IE1QVV9SQkFSX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JBU1JfQVRUUlNfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IE1QVSBSZWdpb24gQXR0cmlidXRlIGZpZWxkIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX01zayAgICAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IE1QVV9SQVNSX0FUVFJTX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfWE5fUG9zICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlhOIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1hOX01zayAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9YTl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQVBfUG9zICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkFQIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0FQX01zayAgICAgICAgICAgICAgICAgICAgKDB4N1VMIDw8IE1QVV9SQVNSX0FQX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfVEVYX1BvcyAgICAgICAgICAgICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9URVhfTXNrICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9URVhfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuVEVYIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TX1BvcyAgICAgICAgICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfU19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuUyBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLkMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0JfUG9zICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0JfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9CX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5CIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TUkRfUG9zICAgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX1NSRF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfUkFTUl9TUkRfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBTdWItUmVnaW9uIERpc2FibGUgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1NJWkVfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gU2l6ZSBGaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TSVpFX01zayAgICAgICAgICAgICAgICAgICgweDFGVUwgPDwgTVBVX1JBU1JfU0laRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBSZWdpb24gZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfUkFTUl9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgRGlzYWJsZSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX01QVSAqLworI2VuZGlmCisKKworI2lmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19GUFUgICAgIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBGbG9hdGluZyBQb2ludCBVbml0IChGUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMVVdOworICBfX0lPTSB1aW50MzJfdCBGUENDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGUENBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGUERTQ1I7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEZsb2F0aW5nLVBvaW50IERlZmF1bHQgU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSLyApICBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAwICovCisgIF9fSU0gIHVpbnQzMl90IE1WRlIxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi8gKSAgTWVkaWEgYW5kIEZQIEZlYXR1cmUgUmVnaXN0ZXIgMSAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvICkgIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDIgKi8KK30gRlBVX1R5cGU7CisKKy8qIEZsb2F0aW5nLVBvaW50IENvbnRleHQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfRlBDQ1JfQVNQRU5fUG9zICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQVNQRU4gYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9BU1BFTl9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfQVNQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBBU1BFTiBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9MU1BFTl9Qb3MgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMU1BFTiBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfTFNQRU5fTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0xTUEVOX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTFNQRU4gYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfTU9OUkRZX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogTU9OUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9NT05SRFlfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTU9OUkRZX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNT05SRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfQkZSRFlfUG9zICAgICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQkZSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0JGUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9CRlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEJGUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX01NUkRZX1BvcyAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1NUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9NTVJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTU1SRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNTVJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9IRlJEWV9Qb3MgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBIRlJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfSEZSRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0hGUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogSEZSRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfVEhSRUFEX1BvcyAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJvY2Vzc29yIG1vZGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9USFJFQURfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfVEhSRUFEX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcm9jZXNzb3IgbW9kZSBhY3RpdmUgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfVVNFUl9Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJpdmlsZWdlIGxldmVsIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfVVNFUl9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1VTRVJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJpdmlsZWdlIGxldmVsIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEFDVF9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExhenkgc3RhdGUgcHJlc2VydmF0aW9uIGFjdGl2ZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEFDVF9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgRlBVX0ZQQ0NSX0xTUEFDVF9Qb3MqLykgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExhenkgc3RhdGUgcHJlc2VydmF0aW9uIGFjdGl2ZSBiaXQgTWFzayAqLworCisvKiBGbG9hdGluZy1Qb2ludCBDb250ZXh0IEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX0ZQQ0FSX0FERFJFU1NfUG9zICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQVI6IEFERFJFU1MgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENBUl9BRERSRVNTX01zayAgICAgICAgICAgICAgKDB4MUZGRkZGRkZVTCA8PCBGUFVfRlBDQVJfQUREUkVTU19Qb3MpICAgICAgICAvKiE8IEZQQ0FSOiBBRERSRVNTIGJpdCBNYXNrICovCisKKy8qIEZsb2F0aW5nLVBvaW50IERlZmF1bHQgU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9BSFBfUG9zICAgICAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBBSFAgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUERTQ1JfQUhQX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0FIUF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogQUhQIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQRFNDUl9ETl9Qb3MgICAgICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBETiBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9ETl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfRE5fUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBETiBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUERTQ1JfRlpfUG9zICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRlogYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUERTQ1JfRlpfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0ZaX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRlogYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBEU0NSX1JNb2RlX1BvcyAgICAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IFJNb2RlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX1JNb2RlX01zayAgICAgICAgICAgICAgICgzVUwgPDwgRlBVX0ZQRFNDUl9STW9kZV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IFJNb2RlIGJpdCBNYXNrICovCisKKy8qIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDAgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX3JvdW5kaW5nX21vZGVzX1BvcyAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQIHJvdW5kaW5nIG1vZGVzIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQX3JvdW5kaW5nX21vZGVzX01zayAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQX3JvdW5kaW5nX21vZGVzX1BvcykgICAgIC8qITwgTVZGUjA6IEZQIHJvdW5kaW5nIG1vZGVzIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9TaG9ydF92ZWN0b3JzX1BvcyAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBTaG9ydCB2ZWN0b3JzIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX1Nob3J0X3ZlY3RvcnNfTXNrICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1Nob3J0X3ZlY3RvcnNfUG9zKSAgICAgICAgIC8qITwgTVZGUjA6IFNob3J0IHZlY3RvcnMgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX1NxdWFyZV9yb290X1BvcyAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNxdWFyZSByb290IGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX1NxdWFyZV9yb290X01zayAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX1NxdWFyZV9yb290X1BvcykgICAgICAgICAgIC8qITwgTVZGUjA6IFNxdWFyZSByb290IGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9EaXZpZGVfUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBEaXZpZGUgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfRGl2aWRlX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRGl2aWRlX1BvcykgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRGl2aWRlIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9GUF9leGNlcF90cmFwcGluZ19Qb3MgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUCBleGNlcHRpb24gdHJhcHBpbmcgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfRlBfZXhjZXBfdHJhcHBpbmdfTXNrICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRlBfZXhjZXBfdHJhcHBpbmdfUG9zKSAgICAgLyohPCBNVkZSMDogRlAgZXhjZXB0aW9uIHRyYXBwaW5nIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9Eb3VibGVfcHJlY2lzaW9uX1BvcyAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBEb3VibGUtcHJlY2lzaW9uIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0RvdWJsZV9wcmVjaXNpb25fTXNrICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0RvdWJsZV9wcmVjaXNpb25fUG9zKSAgICAgIC8qITwgTVZGUjA6IERvdWJsZS1wcmVjaXNpb24gYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX1NpbmdsZV9wcmVjaXNpb25fUG9zICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNpbmdsZS1wcmVjaXNpb24gYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfU2luZ2xlX3ByZWNpc2lvbl9Nc2sgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfU2luZ2xlX3ByZWNpc2lvbl9Qb3MpICAgICAgLyohPCBNVkZSMDogU2luZ2xlLXByZWNpc2lvbiBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfQV9TSU1EX3JlZ2lzdGVyc19Qb3MgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogQV9TSU1EIHJlZ2lzdGVycyBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9BX1NJTURfcmVnaXN0ZXJzX01zayAgICAgKDB4RlVMIC8qPDwgRlBVX01WRlIwX0FfU0lNRF9yZWdpc3RlcnNfUG9zKi8pICAvKiE8IE1WRlIwOiBBX1NJTUQgcmVnaXN0ZXJzIGJpdHMgTWFzayAqLworCisvKiBNZWRpYSBhbmQgRlAgRmVhdHVyZSBSZWdpc3RlciAxIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9mdXNlZF9NQUNfUG9zICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBmdXNlZCBNQUMgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjFfRlBfZnVzZWRfTUFDX01zayAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjFfRlBfZnVzZWRfTUFDX1BvcykgICAgICAgICAgLyohPCBNVkZSMTogRlAgZnVzZWQgTUFDIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMV9GUF9IUEZQX1BvcyAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUCBIUEZQIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZQX0hQRlBfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0ZQX0hQRlBfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQIEhQRlAgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX0RfTmFOX21vZGVfUG9zICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IERfTmFOIG1vZGUgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjFfRF9OYU5fbW9kZV9Nc2sgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjFfRF9OYU5fbW9kZV9Qb3MpICAgICAgICAgICAgLyohPCBNVkZSMTogRF9OYU4gbW9kZSBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjFfRnRaX21vZGVfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRnRaIG1vZGUgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjFfRnRaX21vZGVfTXNrICAgICAgICAgICAgICgweEZVTCAvKjw8IEZQVV9NVkZSMV9GdFpfbW9kZV9Qb3MqLykgICAgICAgICAgLyohPCBNVkZSMTogRnRaIG1vZGUgYml0cyBNYXNrICovCisKKy8qIE1lZGlhIGFuZCBGUCBGZWF0dXJlIFJlZ2lzdGVyIDIgRGVmaW5pdGlvbnMgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfRlBVICovCisjZW5kaWYKKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBDb3JlIERlYnVnIFJlZ2lzdGVyIChDb3JlRGVidWcpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBESENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fT00gIHVpbnQzMl90IERDUlNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoIC9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBEQ1JEUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERU1DUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyICovCit9IENvcmVEZWJ1Z19UeXBlOworCisvKiBEZWJ1ZyBIYWx0aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfREJHS0VZX01zayAgICAgICAgICgweEZGRkZVTCA8PCBDb3JlRGVidWdfREhDU1JfREJHS0VZX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IERCR0tFWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfUG9zICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVNFVF9TVCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcyAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFVElSRV9TVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfUkVUSVJFX1NUX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfTE9DS1VQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19MT0NLVVBfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX1BvcyAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfU0xFRVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVHUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRUdSRFlfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MpICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX01zayAgICAgICgxVUwgLyo8PCBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyovKSAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBNYXNrICovCisKKy8qIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zKi8pICAgICAvKiE8IENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIE1hc2sgKi8KKworLyogRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX1BvcyAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zKSAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcyAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfUG9zICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Qb3MgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcyAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfUG9zICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MpICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcyAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19NTUVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX01zayAgICgxVUwgLyo8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyovKSAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgQ29ydGV4LU00IEhhcmR3YXJlICovCisjZGVmaW5lIFNDU19CQVNFICAgICAgICAgICAgKDB4RTAwMEUwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgSVRNX0JBU0UgICAgICAgICAgICAoMHhFMDAwMDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgRFdUX0JBU0UgICAgICAgICAgICAoMHhFMDAwMTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgVFBJX0JBU0UgICAgICAgICAgICAoMHhFMDA0MDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0JBU0UgICAgICAoMHhFMDAwRURGMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmUgRGVidWcgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFN5c1RpY2tfQkFTRSAgICAgICAgKFNDU19CQVNFICsgIDB4MDAxMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBOVklDX0JBU0UgICAgICAgICAgIChTQ1NfQkFTRSArICAweDAxMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU0NCX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIEJsb2NrIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIFNDblNDQiAgICAgICAgICAgICAgKChTQ25TQ0JfVHlwZSAgICAqKSAgICAgU0NTX0JBU0UgICAgICApICAgLyohPCBTeXN0ZW0gY29udHJvbCBSZWdpc3RlciBub3QgaW4gU0NCICovCisjZGVmaW5lIFNDQiAgICAgICAgICAgICAgICAgKChTQ0JfVHlwZSAgICAgICAqKSAgICAgU0NCX0JBU0UgICAgICApICAgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgU3lzVGljayAgICAgICAgICAgICAoKFN5c1RpY2tfVHlwZSAgICopICAgICBTeXNUaWNrX0JBU0UgICkgICAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgTlZJQyAgICAgICAgICAgICAgICAoKE5WSUNfVHlwZSAgICAgICopICAgICBOVklDX0JBU0UgICAgICkgICAvKiE8IE5WSUMgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgSVRNICAgICAgICAgICAgICAgICAoKElUTV9UeXBlICAgICAgICopICAgICBJVE1fQkFTRSAgICAgICkgICAvKiE8IElUTSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBEV1QgICAgICAgICAgICAgICAgICgoRFdUX1R5cGUgICAgICAgKikgICAgIERXVF9CQVNFICAgICAgKSAgIC8qITwgRFdUIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFRQSSAgICAgICAgICAgICAgICAgKChUUElfVHlwZSAgICAgICAqKSAgICAgVFBJX0JBU0UgICAgICApICAgLyohPCBUUEkgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgQ29yZURlYnVnICAgICAgICAgICAoKENvcmVEZWJ1Z19UeXBlICopICAgICBDb3JlRGVidWdfQkFTRSkgICAvKiE8IENvcmUgRGVidWcgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorICAjZGVmaW5lIE1QVV9CQVNFICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEOTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworICAjZGVmaW5lIE1QVSAgICAgICAgICAgICAgICgoTVBVX1R5cGUgICAgICAgKikgICAgIE1QVV9CQVNFICAgICAgKSAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAqLworI2VuZGlmCisKKyNpZiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgI2RlZmluZSBGUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRjMwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IEZsb2F0aW5nIFBvaW50IFVuaXQgKi8KKyAgI2RlZmluZSBGUFUgICAgICAgICAgICAgICAoKEZQVV9UeXBlICAgICAgICopICAgICBGUFVfQkFTRSAgICAgICkgICAvKiE8IEZsb2F0aW5nIFBvaW50IFVuaXQgKi8KKyNlbmRpZgorCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIERlYnVnIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBTZXRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCB1c2luZyB0aGUgcmVxdWlyZWQgdW5sb2NrIHNlcXVlbmNlLgorICAgICAgICAgICBUaGUgcGFyYW1ldGVyIFByaW9yaXR5R3JvdXAgaXMgYXNzaWduZWQgdG8gdGhlIGZpZWxkIFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkLgorICAgICAgICAgICBPbmx5IHZhbHVlcyBmcm9tIDAuLjcgYXJlIHVzZWQuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgUHJpb3JpdHlHcm91cCAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHlHcm91cGluZyh1aW50MzJfdCBQcmlvcml0eUdyb3VwKQoreworICB1aW50MzJfdCByZWdfdmFsdWU7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgICAgICAgICAgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisKKyAgcmVnX3ZhbHVlICA9ICBTQ0ItPkFJUkNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgb2xkIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gICAgKi8KKyAgcmVnX3ZhbHVlICY9IH4oKHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgfCBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSk7IC8qIGNsZWFyIGJpdHMgdG8gY2hhbmdlICAgICAgICAgICAgICAgKi8KKyAgcmVnX3ZhbHVlICA9ICAocmVnX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgIChQcmlvcml0eUdyb3VwVG1wIDw8IDhVKSAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgLyogSW5zZXJ0IHdyaXRlIGtleSBhbmQgcHJpb3J0eSBncm91cCAqLworICBTQ0ItPkFJUkNSID0gIHJlZ192YWx1ZTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IEdyb3VwaW5nCisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCBmcm9tIHRoZSBOVklDIEludGVycnVwdCBDb250cm9sbGVyLgorICBccmV0dXJuICAgICAgICAgICAgICAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIChTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldFByaW9yaXR5R3JvdXBpbmcodm9pZCkKK3sKKyAgcmV0dXJuICgodWludDMyX3QpKChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgPj4gU0NCX0FJUkNSX1BSSUdST1VQX1BvcykpOworfQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19FbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBEaXNhYmxlcyBhIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0Rpc2FibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDRVJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SVNQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIENsZWFycyB0aGUgcGVuZGluZyBiaXQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19DbGVhclBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklDUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQWN0aXZlIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgYWN0aXZlIHJlZ2lzdGVyIGluIE5WSUMgYW5kIHJldHVybnMgdGhlIGFjdGl2ZSBiaXQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBhY3RpdmUuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBhY3RpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0dldEFjdGl2ZShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JQUJSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgY29yZSBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHBhcmFtIFtpbl0gIHByaW9yaXR5ICBQcmlvcml0eSB0byBzZXQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfU2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHByaW9yaXR5KQoreworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIFNDQi0+U0hQUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgICA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCAoZGV2aWNlIHNwZWNpZmljKSBpbnRlcnJ1cHQsCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYW4gaW50ZXJuYWwgKGNvcmUpIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UHJpb3JpdHkoSVJRbl9UeXBlIElSUW4pCit7CisKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClTQ0ItPlNIUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KU5WSUMtPklQWygodWludDMyX3QpKGludDMyX3QpSVJRbildICAgICAgICAgICAgICAgID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgRW5jb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIEVuY29kZXMgdGhlIHByaW9yaXR5IGZvciBhbiBpbnRlcnJ1cHQgd2l0aCB0aGUgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAsCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUsIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbaW5dICAgUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW2luXSAgICAgICBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkIHByaW9yaXR5LiBWYWx1ZSBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX1NldFByaW9yaXR5KCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0VuY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90IFN1YlByaW9yaXR5KQoreworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7CisgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsKKworICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6ICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7CisgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7CisKKyAgcmV0dXJuICgKKyAgICAgICAgICAgKChQcmVlbXB0UHJpb3JpdHkgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCkpIDw8IFN1YlByaW9yaXR5Qml0cykgfAorICAgICAgICAgICAoKFN1YlByaW9yaXR5ICAgICAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzICAgICkpIC0gMVVMKSkpCisgICAgICAgICApOworfQorCisKKy8qKgorICBcYnJpZWYgICBEZWNvZGUgUHJpb3JpdHkKKyAgXGRldGFpbHMgRGVjb2RlcyBhbiBpbnRlcnJ1cHQgcHJpb3JpdHkgdmFsdWUgd2l0aCBhIGdpdmVuIHByaW9yaXR5IGdyb3VwIHRvCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgYW5kIHN1YnByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgICAgUHJpb3JpdHkgICBQcmlvcml0eSB2YWx1ZSwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfR2V0UHJpb3JpdHkoKS4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbb3V0XSBwUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW291dF0gICAgIHBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGVjb2RlUHJpb3JpdHkgKHVpbnQzMl90IFByaW9yaXR5LCB1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCogY29uc3QgcFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QqIGNvbnN0IHBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgICpwUHJlZW1wdFByaW9yaXR5ID0gKFByaW9yaXR5ID4+IFN1YlByaW9yaXR5Qml0cykgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCk7CisgICpwU3ViUHJpb3JpdHkgICAgID0gKFByaW9yaXR5ICAgICAgICAgICAgICAgICAgICkgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBSZXNldAorICBcZGV0YWlscyBJbml0aWF0ZXMgYSBzeXN0ZW0gcmVzZXQgcmVxdWVzdCB0byByZXNldCB0aGUgTUNVLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1N5c3RlbVJlc2V0KHZvaWQpCit7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIHdyaXRlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHJlc2V0ICovCisgIFNDQi0+QUlSQ1IgID0gKHVpbnQzMl90KSgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgKTsgICAgICAgICAvKiBLZWVwIHByaW9yaXR5IGdyb3VwIHVuY2hhbmdlZCAqLworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovCisKKyAgZm9yKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLworICB7CisgICAgX19OT1AoKTsKKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgKi8KKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgRlBVIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnB1RnVuY3Rpb25zIEZQVSBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgRlBVIHR5cGUuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIGdldCBGUFUgdHlwZQorICBcZGV0YWlscyByZXR1cm5zIHRoZSBGUFUgdHlwZQorICBccmV0dXJucworICAgLSBcYiAgMDogTm8gRlBVCisgICAtIFxiICAxOiBTaW5nbGUgcHJlY2lzaW9uIEZQVQorICAgLSBcYiAgMjogRG91YmxlICsgU2luZ2xlIHByZWNpc2lvbiBGUFUKKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFNDQl9HZXRGUFVUeXBlKHZvaWQpCit7CisgIHVpbnQzMl90IG12ZnIwOworCisgIG12ZnIwID0gU0NCLT5NVkZSMDsKKyAgaWYgICAgICAgICgobXZmcjAgJiAweDAwMDAwRkYwVUwpID09IDB4MjIwVUwpCisgIHsKKyAgICByZXR1cm4gMlVMOyAgICAgICAgICAgLyogRG91YmxlICsgU2luZ2xlIHByZWNpc2lvbiBGUFUgKi8KKyAgfQorICBlbHNlIGlmICgobXZmcjAgJiAweDAwMDAwRkYwVUwpID09IDB4MDIwVUwpCisgIHsKKyAgICByZXR1cm4gMVVMOyAgICAgICAgICAgLyogU2luZ2xlIHByZWNpc2lvbiBGUFUgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gMFVMOyAgICAgICAgICAgLyogTm8gRlBVICovCisgIH0KK30KKworCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX0ZwdUZ1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENhY2hlIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfQ2FjaGVGdW5jdGlvbnMgQ2FjaGUgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgSW5zdHJ1Y3Rpb24gYW5kIERhdGEgY2FjaGUuCisgIEB7CisgKi8KKworLyogQ2FjaGUgU2l6ZSBJRCBSZWdpc3RlciBNYWNyb3MgKi8KKyNkZWZpbmUgQ0NTSURSX1dBWVMoeCkgICAgICAgICAoKCh4KSAmIFNDQl9DQ1NJRFJfQVNTT0NJQVRJVklUWV9Nc2spID4+IFNDQl9DQ1NJRFJfQVNTT0NJQVRJVklUWV9Qb3MpCisjZGVmaW5lIENDU0lEUl9TRVRTKHgpICAgICAgICAgKCgoeCkgJiBTQ0JfQ0NTSURSX05VTVNFVFNfTXNrICAgICAgKSA+PiBTQ0JfQ0NTSURSX05VTVNFVFNfUG9zICAgICAgKQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgSS1DYWNoZQorICBcZGV0YWlscyBUdXJucyBvbiBJLUNhY2hlCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfRW5hYmxlSUNhY2hlICh2b2lkKQoreworICAjaWYgKF9fSUNBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAgIFNDQi0+SUNJQUxMVSA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAvKiBpbnZhbGlkYXRlIEktQ2FjaGUgKi8KKyAgICBTQ0ItPkNDUiB8PSAgKHVpbnQzMl90KVNDQl9DQ1JfSUNfTXNrOyAgLyogZW5hYmxlIEktQ2FjaGUgKi8KKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEktQ2FjaGUKKyAgXGRldGFpbHMgVHVybnMgb2ZmIEktQ2FjaGUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9EaXNhYmxlSUNhY2hlICh2b2lkKQoreworICAjaWYgKF9fSUNBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAgIFNDQi0+Q0NSICY9IH4odWludDMyX3QpU0NCX0NDUl9JQ19Nc2s7ICAvKiBkaXNhYmxlIEktQ2FjaGUgKi8KKyAgICBTQ0ItPklDSUFMTFUgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgLyogaW52YWxpZGF0ZSBJLUNhY2hlICovCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgSW52YWxpZGF0ZSBJLUNhY2hlCisgIFxkZXRhaWxzIEludmFsaWRhdGVzIEktQ2FjaGUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9JbnZhbGlkYXRlSUNhY2hlICh2b2lkKQoreworICAjaWYgKF9fSUNBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAgIFNDQi0+SUNJQUxMVSA9IDBVTDsKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgRC1DYWNoZQorICBcZGV0YWlscyBUdXJucyBvbiBELUNhY2hlCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfRW5hYmxlRENhY2hlICh2b2lkKQoreworICAjaWYgKF9fRENBQ0hFX1BSRVNFTlQgPT0gMVUpCisgICAgdWludDMyX3QgY2NzaWRyOworICAgIHVpbnQzMl90IHNldHM7CisgICAgdWludDMyX3Qgd2F5czsKKworICAgIFNDQi0+Q1NTRUxSID0gKDBVIDw8IDFVKSB8IDBVOyAgICAgICAgICAvKiBMZXZlbCAxIGRhdGEgY2FjaGUgKi8KKyAgICBfX0RTQigpOworCisgICAgY2NzaWRyID0gU0NCLT5DQ1NJRFI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW52YWxpZGF0ZSBELUNhY2hlICovCisgICAgc2V0cyA9ICh1aW50MzJfdCkoQ0NTSURSX1NFVFMoY2NzaWRyKSk7CisgICAgZG8geworICAgICAgd2F5cyA9ICh1aW50MzJfdCkoQ0NTSURSX1dBWVMoY2NzaWRyKSk7CisgICAgICBkbyB7CisgICAgICAgIFNDQi0+RENJU1cgPSAoKChzZXRzIDw8IFNDQl9EQ0lTV19TRVRfUG9zKSAmIFNDQl9EQ0lTV19TRVRfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgKCh3YXlzIDw8IFNDQl9EQ0lTV19XQVlfUG9zKSAmIFNDQl9EQ0lTV19XQVlfTXNrKSAgKTsKKyAgICAgICAgI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7CisgICAgICAgICNlbmRpZgorICAgICAgfSB3aGlsZSAod2F5cy0tKTsKKyAgICB9IHdoaWxlKHNldHMtLSk7CisgICAgX19EU0IoKTsKKworICAgIFNDQi0+Q0NSIHw9ICAodWludDMyX3QpU0NCX0NDUl9EQ19Nc2s7ICAvKiBlbmFibGUgRC1DYWNoZSAqLworCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBELUNhY2hlCisgIFxkZXRhaWxzIFR1cm5zIG9mZiBELUNhY2hlCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBTQ0JfRGlzYWJsZURDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0RDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIHVpbnQzMl90IGNjc2lkcjsKKyAgICB1aW50MzJfdCBzZXRzOworICAgIHVpbnQzMl90IHdheXM7CisKKyAgICBTQ0ItPkNTU0VMUiA9ICgwVSA8PCAxVSkgfCAwVTsgICAgICAgICAgLyogTGV2ZWwgMSBkYXRhIGNhY2hlICovCisgICAgX19EU0IoKTsKKworICAgIGNjc2lkciA9IFNDQi0+Q0NTSURSOworCisgICAgU0NCLT5DQ1IgJj0gfih1aW50MzJfdClTQ0JfQ0NSX0RDX01zazsgIC8qIGRpc2FibGUgRC1DYWNoZSAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFuICYgaW52YWxpZGF0ZSBELUNhY2hlICovCisgICAgc2V0cyA9ICh1aW50MzJfdCkoQ0NTSURSX1NFVFMoY2NzaWRyKSk7CisgICAgZG8geworICAgICAgd2F5cyA9ICh1aW50MzJfdCkoQ0NTSURSX1dBWVMoY2NzaWRyKSk7CisgICAgICBkbyB7CisgICAgICAgIFNDQi0+RENDSVNXID0gKCgoc2V0cyA8PCBTQ0JfRENDSVNXX1NFVF9Qb3MpICYgU0NCX0RDQ0lTV19TRVRfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgod2F5cyA8PCBTQ0JfRENDSVNXX1dBWV9Qb3MpICYgU0NCX0RDQ0lTV19XQVlfTXNrKSAgKTsKKyAgICAgICAgI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7CisgICAgICAgICNlbmRpZgorICAgICAgfSB3aGlsZSAod2F5cy0tKTsKKyAgICB9IHdoaWxlKHNldHMtLSk7CisKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBJbnZhbGlkYXRlIEQtQ2FjaGUKKyAgXGRldGFpbHMgSW52YWxpZGF0ZXMgRC1DYWNoZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NCX0ludmFsaWRhdGVEQ2FjaGUgKHZvaWQpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxVSkKKyAgICB1aW50MzJfdCBjY3NpZHI7CisgICAgdWludDMyX3Qgc2V0czsKKyAgICB1aW50MzJfdCB3YXlzOworCisgICAgU0NCLT5DU1NFTFIgPSAoMFUgPDwgMVUpIHwgMFU7ICAgICAgICAgIC8qIExldmVsIDEgZGF0YSBjYWNoZSAqLworICAgIF9fRFNCKCk7CisKKyAgICBjY3NpZHIgPSBTQ0ItPkNDU0lEUjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnZhbGlkYXRlIEQtQ2FjaGUgKi8KKyAgICBzZXRzID0gKHVpbnQzMl90KShDQ1NJRFJfU0VUUyhjY3NpZHIpKTsKKyAgICBkbyB7CisgICAgICB3YXlzID0gKHVpbnQzMl90KShDQ1NJRFJfV0FZUyhjY3NpZHIpKTsKKyAgICAgIGRvIHsKKyAgICAgICAgU0NCLT5EQ0lTVyA9ICgoKHNldHMgPDwgU0NCX0RDSVNXX1NFVF9Qb3MpICYgU0NCX0RDSVNXX1NFVF9Nc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAoKHdheXMgPDwgU0NCX0RDSVNXX1dBWV9Qb3MpICYgU0NCX0RDSVNXX1dBWV9Nc2spICApOworICAgICAgICAjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTsKKyAgICAgICAgI2VuZGlmCisgICAgICB9IHdoaWxlICh3YXlzLS0pOworICAgIH0gd2hpbGUoc2V0cy0tKTsKKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFuIEQtQ2FjaGUKKyAgXGRldGFpbHMgQ2xlYW5zIEQtQ2FjaGUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9DbGVhbkRDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0RDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIHVpbnQzMl90IGNjc2lkcjsKKyAgICB1aW50MzJfdCBzZXRzOworICAgIHVpbnQzMl90IHdheXM7CisKKyAgICBTQ0ItPkNTU0VMUiA9ICgwVSA8PCAxVSkgfCAwVTsgICAgICAgICAgLyogTGV2ZWwgMSBkYXRhIGNhY2hlICovCisgICAgX19EU0IoKTsKKworICAgIGNjc2lkciA9IFNDQi0+Q0NTSURSOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFuIEQtQ2FjaGUgKi8KKyAgICBzZXRzID0gKHVpbnQzMl90KShDQ1NJRFJfU0VUUyhjY3NpZHIpKTsKKyAgICBkbyB7CisgICAgICB3YXlzID0gKHVpbnQzMl90KShDQ1NJRFJfV0FZUyhjY3NpZHIpKTsKKyAgICAgIGRvIHsKKyAgICAgICAgU0NCLT5EQ0NTVyA9ICgoKHNldHMgPDwgU0NCX0RDQ1NXX1NFVF9Qb3MpICYgU0NCX0RDQ1NXX1NFVF9Nc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAoKHdheXMgPDwgU0NCX0RDQ1NXX1dBWV9Qb3MpICYgU0NCX0RDQ1NXX1dBWV9Nc2spICApOworICAgICAgICAjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgICAgICAgICBfX3NjaGVkdWxlX2JhcnJpZXIoKTsKKyAgICAgICAgI2VuZGlmCisgICAgICB9IHdoaWxlICh3YXlzLS0pOworICAgIH0gd2hpbGUoc2V0cy0tKTsKKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFuICYgSW52YWxpZGF0ZSBELUNhY2hlCisgIFxkZXRhaWxzIENsZWFucyBhbmQgSW52YWxpZGF0ZXMgRC1DYWNoZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NCX0NsZWFuSW52YWxpZGF0ZURDYWNoZSAodm9pZCkKK3sKKyAgI2lmIChfX0RDQUNIRV9QUkVTRU5UID09IDFVKQorICAgIHVpbnQzMl90IGNjc2lkcjsKKyAgICB1aW50MzJfdCBzZXRzOworICAgIHVpbnQzMl90IHdheXM7CisKKyAgICBTQ0ItPkNTU0VMUiA9ICgwVSA8PCAxVSkgfCAwVTsgICAgICAgICAgLyogTGV2ZWwgMSBkYXRhIGNhY2hlICovCisgICAgX19EU0IoKTsKKworICAgIGNjc2lkciA9IFNDQi0+Q0NTSURSOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFuICYgaW52YWxpZGF0ZSBELUNhY2hlICovCisgICAgc2V0cyA9ICh1aW50MzJfdCkoQ0NTSURSX1NFVFMoY2NzaWRyKSk7CisgICAgZG8geworICAgICAgd2F5cyA9ICh1aW50MzJfdCkoQ0NTSURSX1dBWVMoY2NzaWRyKSk7CisgICAgICBkbyB7CisgICAgICAgIFNDQi0+RENDSVNXID0gKCgoc2V0cyA8PCBTQ0JfRENDSVNXX1NFVF9Qb3MpICYgU0NCX0RDQ0lTV19TRVRfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgICAgICgod2F5cyA8PCBTQ0JfRENDSVNXX1dBWV9Qb3MpICYgU0NCX0RDQ0lTV19XQVlfTXNrKSAgKTsKKyAgICAgICAgI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICAgICAgICAgX19zY2hlZHVsZV9iYXJyaWVyKCk7CisgICAgICAgICNlbmRpZgorICAgICAgfSB3aGlsZSAod2F5cy0tKTsKKyAgICB9IHdoaWxlKHNldHMtLSk7CisKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICNlbmRpZgorfQorCisKKy8qKgorICBcYnJpZWYgICBELUNhY2hlIEludmFsaWRhdGUgYnkgYWRkcmVzcworICBcZGV0YWlscyBJbnZhbGlkYXRlcyBELUNhY2hlIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcworICBccGFyYW1baW5dICAgYWRkciAgICBhZGRyZXNzIChhbGlnbmVkIHRvIDMyLWJ5dGUgYm91bmRhcnkpCisgIFxwYXJhbVtpbl0gICBkc2l6ZSAgIHNpemUgb2YgbWVtb3J5IGJsb2NrIChpbiBudW1iZXIgb2YgYnl0ZXMpCisqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgU0NCX0ludmFsaWRhdGVEQ2FjaGVfYnlfQWRkciAodWludDMyX3QgKmFkZHIsIGludDMyX3QgZHNpemUpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxVSkKKyAgICAgaW50MzJfdCBvcF9zaXplID0gZHNpemU7CisgICAgdWludDMyX3Qgb3BfYWRkciA9ICh1aW50MzJfdClhZGRyOworICAgICBpbnQzMl90IGxpbmVzaXplID0gMzJVOyAgICAgICAgICAgICAgICAvKiBpbiBDb3J0ZXgtTTcgc2l6ZSBvZiBjYWNoZSBsaW5lIGlzIGZpeGVkIHRvIDggd29yZHMgKDMyIGJ5dGVzKSAqLworCisgICAgX19EU0IoKTsKKworICAgIHdoaWxlIChvcF9zaXplID4gMCkgeworICAgICAgU0NCLT5EQ0lNVkFDID0gb3BfYWRkcjsKKyAgICAgIG9wX2FkZHIgKz0gbGluZXNpemU7CisgICAgICBvcF9zaXplIC09IGxpbmVzaXplOworICAgIH0KKworICAgIF9fRFNCKCk7CisgICAgX19JU0IoKTsKKyAgI2VuZGlmCit9CisKKworLyoqCisgIFxicmllZiAgIEQtQ2FjaGUgQ2xlYW4gYnkgYWRkcmVzcworICBcZGV0YWlscyBDbGVhbnMgRC1DYWNoZSBmb3IgdGhlIGdpdmVuIGFkZHJlc3MKKyAgXHBhcmFtW2luXSAgIGFkZHIgICAgYWRkcmVzcyAoYWxpZ25lZCB0byAzMi1ieXRlIGJvdW5kYXJ5KQorICBccGFyYW1baW5dICAgZHNpemUgICBzaXplIG9mIG1lbW9yeSBibG9jayAoaW4gbnVtYmVyIG9mIGJ5dGVzKQorKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9DbGVhbkRDYWNoZV9ieV9BZGRyICh1aW50MzJfdCAqYWRkciwgaW50MzJfdCBkc2l6ZSkKK3sKKyAgI2lmIChfX0RDQUNIRV9QUkVTRU5UID09IDEpCisgICAgIGludDMyX3Qgb3Bfc2l6ZSA9IGRzaXplOworICAgIHVpbnQzMl90IG9wX2FkZHIgPSAodWludDMyX3QpIGFkZHI7CisgICAgIGludDMyX3QgbGluZXNpemUgPSAzMlU7ICAgICAgICAgICAgICAgIC8qIGluIENvcnRleC1NNyBzaXplIG9mIGNhY2hlIGxpbmUgaXMgZml4ZWQgdG8gOCB3b3JkcyAoMzIgYnl0ZXMpICovCisKKyAgICBfX0RTQigpOworCisgICAgd2hpbGUgKG9wX3NpemUgPiAwKSB7CisgICAgICBTQ0ItPkRDQ01WQUMgPSBvcF9hZGRyOworICAgICAgb3BfYWRkciArPSBsaW5lc2l6ZTsKKyAgICAgIG9wX3NpemUgLT0gbGluZXNpemU7CisgICAgfQorCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKioKKyAgXGJyaWVmICAgRC1DYWNoZSBDbGVhbiBhbmQgSW52YWxpZGF0ZSBieSBhZGRyZXNzCisgIFxkZXRhaWxzIENsZWFucyBhbmQgaW52YWxpZGF0ZXMgRF9DYWNoZSBmb3IgdGhlIGdpdmVuIGFkZHJlc3MKKyAgXHBhcmFtW2luXSAgIGFkZHIgICAgYWRkcmVzcyAoYWxpZ25lZCB0byAzMi1ieXRlIGJvdW5kYXJ5KQorICBccGFyYW1baW5dICAgZHNpemUgICBzaXplIG9mIG1lbW9yeSBibG9jayAoaW4gbnVtYmVyIG9mIGJ5dGVzKQorKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFNDQl9DbGVhbkludmFsaWRhdGVEQ2FjaGVfYnlfQWRkciAodWludDMyX3QgKmFkZHIsIGludDMyX3QgZHNpemUpCit7CisgICNpZiAoX19EQ0FDSEVfUFJFU0VOVCA9PSAxVSkKKyAgICAgaW50MzJfdCBvcF9zaXplID0gZHNpemU7CisgICAgdWludDMyX3Qgb3BfYWRkciA9ICh1aW50MzJfdCkgYWRkcjsKKyAgICAgaW50MzJfdCBsaW5lc2l6ZSA9IDMyVTsgICAgICAgICAgICAgICAgLyogaW4gQ29ydGV4LU03IHNpemUgb2YgY2FjaGUgbGluZSBpcyBmaXhlZCB0byA4IHdvcmRzICgzMiBieXRlcykgKi8KKworICAgIF9fRFNCKCk7CisKKyAgICB3aGlsZSAob3Bfc2l6ZSA+IDApIHsKKyAgICAgIFNDQi0+RENDSU1WQUMgPSBvcF9hZGRyOworICAgICAgb3BfYWRkciArPSBsaW5lc2l6ZTsKKyAgICAgIG9wX3NpemUgLT0gbGluZXNpemU7CisgICAgfQorCisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICAjZW5kaWYKK30KKworCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX0NhY2hlRnVuY3Rpb25zICovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgIFN5c1RpY2sgZnVuY3Rpb24gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyBTeXNUaWNrIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgY29uZmlndXJlIHRoZSBTeXN0ZW0uCisgIEB7CisgKi8KKworI2lmIChfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnID09IDBVKQorCisvKioKKyAgXGJyaWVmICAgU3lzdGVtIFRpY2sgQ29uZmlndXJhdGlvbgorICBcZGV0YWlscyBJbml0aWFsaXplcyB0aGUgU3lzdGVtIFRpbWVyIGFuZCBpdHMgaW50ZXJydXB0LCBhbmQgc3RhcnRzIHRoZSBTeXN0ZW0gVGljayBUaW1lci4KKyAgICAgICAgICAgQ291bnRlciBpcyBpbiBmcmVlIHJ1bm5pbmcgbW9kZSB0byBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHRzLgorICBccGFyYW0gW2luXSAgdGlja3MgIE51bWJlciBvZiB0aWNrcyBiZXR3ZWVuIHR3byBpbnRlcnJ1cHRzLgorICBccmV0dXJuICAgICAgICAgIDAgIEZ1bmN0aW9uIHN1Y2NlZWRlZC4KKyAgXHJldHVybiAgICAgICAgICAxICBGdW5jdGlvbiBmYWlsZWQuCisgIFxub3RlICAgIFdoZW4gdGhlIHZhcmlhYmxlIDxiPl9fVmVuZG9yX1N5c1RpY2tDb25maWc8L2I+IGlzIHNldCB0byAxLCB0aGVuIHRoZQorICAgICAgICAgICBmdW5jdGlvbiA8Yj5TeXNUaWNrX0NvbmZpZzwvYj4gaXMgbm90IGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBmaWxlIDxiPjxpPmRldmljZTwvaT4uaDwvYj4KKyAgICAgICAgICAgbXVzdCBjb250YWluIGEgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTeXNUaWNrX0NvbmZpZyh1aW50MzJfdCB0aWNrcykKK3sKKyAgaWYgKCh0aWNrcyAtIDFVTCkgPiBTeXNUaWNrX0xPQURfUkVMT0FEX01zaykKKyAgeworICAgIHJldHVybiAoMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvYWQgdmFsdWUgaW1wb3NzaWJsZSAqLworICB9CisKKyAgU3lzVGljay0+TE9BRCAgPSAodWludDMyX3QpKHRpY2tzIC0gMVVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHJlbG9hZCByZWdpc3RlciAqLworICBOVklDX1NldFByaW9yaXR5IChTeXNUaWNrX0lSUW4sICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykgLSAxVUwpOyAvKiBzZXQgUHJpb3JpdHkgZm9yIFN5c3RpY2sgSW50ZXJydXB0ICovCisgIFN5c1RpY2stPlZBTCAgID0gMFVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgdGhlIFN5c1RpY2sgQ291bnRlciBWYWx1ZSAqLworICBTeXNUaWNrLT5DVFJMICA9IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX0VOQUJMRV9Nc2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTeXNUaWNrIElSUSBhbmQgU3lzVGljayBUaW1lciAqLworICByZXR1cm4gKDBVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBzdWNjZXNzZnVsICovCit9CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGVidWcgSW4vT3V0cHV0IGZ1bmN0aW9uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyBJVE0gRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIElUTSBkZWJ1ZyBpbnRlcmZhY2UuCisgIEB7CisgKi8KKworZXh0ZXJuIHZvbGF0aWxlIGludDMyX3QgSVRNX1J4QnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyohPCBFeHRlcm5hbCB2YXJpYWJsZSB0byByZWNlaXZlIGNoYXJhY3RlcnMuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBJVE1fUlhCVUZGRVJfRU1QVFkgICAweDVBQTU1QUE1VSAvKiE8IFZhbHVlIGlkZW50aWZ5aW5nIFxyZWYgSVRNX1J4QnVmZmVyIGlzIHJlYWR5IGZvciBuZXh0IGNoYXJhY3Rlci4gKi8KKworCisvKioKKyAgXGJyaWVmICAgSVRNIFNlbmQgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIFRyYW5zbWl0cyBhIGNoYXJhY3RlciB2aWEgdGhlIElUTSBjaGFubmVsIDAsIGFuZAorICAgICAgICAgICBcbGkgSnVzdCByZXR1cm5zIHdoZW4gbm8gZGVidWdnZXIgaXMgY29ubmVjdGVkIHRoYXQgaGFzIGJvb2tlZCB0aGUgb3V0cHV0LgorICAgICAgICAgICBcbGkgSXMgYmxvY2tpbmcgd2hlbiBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCwgYnV0IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgc2VudCBoYXMgbm90IGJlZW4gdHJhbnNtaXR0ZWQuCisgIFxwYXJhbSBbaW5dICAgICBjaCAgQ2hhcmFjdGVyIHRvIHRyYW5zbWl0LgorICBccmV0dXJucyAgICAgICAgICAgIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IElUTV9TZW5kQ2hhciAodWludDMyX3QgY2gpCit7CisgIGlmICgoKElUTS0+VENSICYgSVRNX1RDUl9JVE1FTkFfTXNrKSAhPSAwVUwpICYmICAgICAgLyogSVRNIGVuYWJsZWQgKi8KKyAgICAgICgoSVRNLT5URVIgJiAxVUwgICAgICAgICAgICAgICApICE9IDBVTCkgICApICAgICAvKiBJVE0gUG9ydCAjMCBlbmFibGVkICovCisgIHsKKyAgICB3aGlsZSAoSVRNLT5QT1JUWzBVXS51MzIgPT0gMFVMKQorICAgIHsKKyAgICAgIF9fTk9QKCk7CisgICAgfQorICAgIElUTS0+UE9SVFswVV0udTggPSAodWludDhfdCljaDsKKyAgfQorICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIFJlY2VpdmUgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIElucHV0cyBhIGNoYXJhY3RlciB2aWEgdGhlIGV4dGVybmFsIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLgorICBccmV0dXJuICAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3Rlci4KKyAgXHJldHVybiAgICAgICAgIC0xICBObyBjaGFyYWN0ZXIgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX1JlY2VpdmVDaGFyICh2b2lkKQoreworICBpbnQzMl90IGNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworCisgIGlmIChJVE1fUnhCdWZmZXIgIT0gSVRNX1JYQlVGRkVSX0VNUFRZKQorICB7CisgICAgY2ggPSBJVE1fUnhCdWZmZXI7CisgICAgSVRNX1J4QnVmZmVyID0gSVRNX1JYQlVGRkVSX0VNUFRZOyAgICAgICAvKiByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgfQorCisgIHJldHVybiAoY2gpOworfQorCisKKy8qKgorICBcYnJpZWYgICBJVE0gQ2hlY2sgQ2hhcmFjdGVyCisgIFxkZXRhaWxzIENoZWNrcyB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIHBlbmRpbmcgZm9yIHJlYWRpbmcgaW4gdGhlIHZhcmlhYmxlIFxyZWYgSVRNX1J4QnVmZmVyLgorICBccmV0dXJuICAgICAgICAgIDAgIE5vIGNoYXJhY3RlciBhdmFpbGFibGUuCisgIFxyZXR1cm4gICAgICAgICAgMSAgQ2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIGludDMyX3QgSVRNX0NoZWNrQ2hhciAodm9pZCkKK3sKKworICBpZiAoSVRNX1J4QnVmZmVyID09IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIHJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgY2hhcmFjdGVyIGF2YWlsYWJsZSAqLworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX2NvcmVfRGVidWdGdW5jdGlvbnMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTdfSF9ERVBFTkRBTlQgKi8KKworI2VuZGlmIC8qIF9fQ01TSVNfR0VORVJJQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbUZ1bmMuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY21GdW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyYTQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY21GdW5jLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorICogQGZpbGUgICAgIGNvcmVfY21GdW5jLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBDb3JlIEZ1bmN0aW9uIEFjY2VzcyBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNRlVOQ19ICisjZGVmaW5lIF9fQ09SRV9DTUZVTkNfSAorCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgQ29yZSBGdW5jdGlvbiBBY2Nlc3MgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgICAgXGRlZmdyb3VwIENNU0lTX0NvcmVfUmVnQWNjRnVuY3Rpb25zIENNU0lTIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICBAeworKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gUmVhbFZpZXcgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmICAgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEFSTSBDb21waWxlciBWNiAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNpbmNsdWRlICJjbXNpc19hcm1jY19WNi5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBHTlUgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjaW5jbHVkZSAiY21zaXNfZ2NjLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIElDQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2lhci5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUSSBDQ1MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNpbmNsdWRlIDxjbXNpc19jY3MuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gVEFTS0lORyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fVEFTS0lOR19fICkKKyAgLyoKKyAgICogVGhlIENNU0lTIGZ1bmN0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYXMgaW50cmluc2ljcyBpbiB0aGUgY29tcGlsZXIuCisgICAqIFBsZWFzZSB1c2UgImNhcm0gLT9pIiB0byBnZXQgYW4gdXAgdG8gZGF0ZSBsaXN0IG9mIGFsbCBpbnRyaW5zaWNzLAorICAgKiBJbmNsdWRpbmcgdGhlIENNU0lTIG9uZXMuCisgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBDT1NNSUMgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaW5jbHVkZSA8Y21zaXNfY3NtLmg+CisKKyNlbmRpZgorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX1JlZ0FjY0Z1bmN0aW9ucyAqLworCisjZW5kaWYgLyogX19DT1JFX0NNRlVOQ19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtSW5zdHIuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfY21JbnN0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzRiMGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtSW5zdHIuaApAQCAtMCwwICsxLDg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9jbUluc3RyLmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTSBDb3JlIEluc3RydWN0aW9uIEFjY2VzcyBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNSU5TVFJfSAorI2RlZmluZSBfX0NPUkVfQ01JTlNUUl9ICisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKiogXGRlZmdyb3VwIENNU0lTX0NvcmVfSW5zdHJ1Y3Rpb25JbnRlcmZhY2UgQ01TSVMgQ29yZSBJbnN0cnVjdGlvbiBJbnRlcmZhY2UKKyAgQWNjZXNzIHRvIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMKKyAgQHsKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFJlYWxWaWV3IENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpbmNsdWRlICJjbXNpc19hcm1jYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBBUk0gQ29tcGlsZXIgVjYgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2NfVjYuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gR05VIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2luY2x1ZGUgImNtc2lzX2djYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBJQ0MgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpbmNsdWRlIDxjbXNpc19pYXIuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gVEkgQ0NTIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaW5jbHVkZSA8Y21zaXNfY2NzLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRBU0tJTkcgQ29tcGlsZXIgLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgIC8qCisgICAqIFRoZSBDTVNJUyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGludHJpbnNpY3MgaW4gdGhlIGNvbXBpbGVyLgorICAgKiBQbGVhc2UgdXNlICJjYXJtIC0/aSIgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgbGlzdCBvZiBhbGwgaW50cmluc2ljcywKKyAgICogSW5jbHVkaW5nIHRoZSBDTVNJUyBvbmVzLgorICAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQ09TTUlDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2NzbS5oPgorCisjZW5kaWYKKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19Db3JlX0luc3RydWN0aW9uSW50ZXJmYWNlICovCisKKyNlbmRpZiAvKiBfX0NPUkVfQ01JTlNUUl9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX2NtU2ltZC5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbVNpbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJmNWMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9jbVNpbWQuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9jbVNpbWQuaAorICogQGJyaWVmICAgIENNU0lTIENvcnRleC1NIFNJTUQgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWNC4zMAorICogQGRhdGUgICAgIDIwLiBPY3RvYmVyIDIwMTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE1IEFSTSBMSU1JVEVECisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBUk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICoKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEJFCisgICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworI2lmICAgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fQ09SRV9DTVNJTURfSAorI2RlZmluZSBfX0NPUkVfQ01TSU1EX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjICBDb21waWxlciBzcGVjaWZpYyBJbnRyaW5zaWNzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKiBcZGVmZ3JvdXAgQ01TSVNfU0lNRF9pbnRyaW5zaWNzIENNU0lTIFNJTUQgSW50cmluc2ljcworICBBY2Nlc3MgdG8gZGVkaWNhdGVkIFNJTUQgaW5zdHJ1Y3Rpb25zCisgIEB7CisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBSZWFsVmlldyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjaW5jbHVkZSAiY21zaXNfYXJtY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gQVJNIENvbXBpbGVyIFY2IC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2luY2x1ZGUgImNtc2lzX2FybWNjX1Y2LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpbmNsdWRlICJjbXNpc19nY2MuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0gSUNDIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaW5jbHVkZSA8Y21zaXNfaWFyLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIFRJIENDUyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX1RNUzQ3MF9fICkKKyAgI2luY2x1ZGUgPGNtc2lzX2Njcy5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLSBUQVNLSU5HIENvbXBpbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAvKgorICAgKiBUaGUgQ01TSVMgZnVuY3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBpbnRyaW5zaWNzIGluIHRoZSBjb21waWxlci4KKyAgICogUGxlYXNlIHVzZSAiY2FybSAtP2kiIHRvIGdldCBhbiB1cCB0byBkYXRlIGxpc3Qgb2YgYWxsIGludHJpbnNpY3MsCisgICAqIEluY2x1ZGluZyB0aGUgQ01TSVMgb25lcy4KKyAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tIENPU01JQyBDb21waWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpbmNsdWRlIDxjbXNpc19jc20uaD4KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NJTURfaW50cmluc2ljcyAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ01TSU1EX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfc2MwMDAuaCBiL3RoaXJkX3BhcnR5L254cC9DTVNJUy9JbmNsdWRlL2NvcmVfc2MwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTRkYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9zYzAwMC5oCkBAIC0wLDAgKzEsOTI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9zYzAwMC5oCisgKiBAYnJpZWYgICAgQ01TSVMgU0MwMDAgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX1NDMDAwX0hfR0VORVJJQworI2RlZmluZSBfX0NPUkVfU0MwMDBfSF9HRU5FUklDCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMKKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6CisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPgorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4KKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+CisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLgorCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPgorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcaW5ncm91cCBTQzAwMAorICBAeworICovCisKKy8qICBDTVNJUyBTQzAwMCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBfX1NDMDAwX0NNU0lTX1ZFUlNJT05fTUFJTiAgKDB4MDRVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzMxOjE2XSBDTVNJUyBIQUwgbWFpbiB2ZXJzaW9uICovCisjZGVmaW5lIF9fU0MwMDBfQ01TSVNfVkVSU0lPTl9TVUIgICAoMHgxRVUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBbMTU6MF0gIENNU0lTIEhBTCBzdWIgdmVyc2lvbiAqLworI2RlZmluZSBfX1NDMDAwX0NNU0lTX1ZFUlNJT04gICAgICAgKChfX1NDMDAwX0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAxNlUpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NDMDAwX0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApICAgIC8qITwgQ01TSVMgSEFMIHZlcnNpb24gbnVtYmVyICovCisKKyNkZWZpbmUgX19DT1JURVhfU0MgICAgICAgICAgICAgICAgICgwMDBVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleCBzZWN1cmUgY29yZSAqLworCisKKyNpZiAgIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIF9faW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBBUk0gQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBfX2lubGluZQorCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEdOVSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgSUFSIENvbXBpbGVyLiBPbmx5IGF2YWlsYWJsZSBpbiBIaWdoIG9wdGltaXphdGlvbiBtb2RlISAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEkgQ0NTIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgVEFTS0lORyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2RlZmluZSBfX3BhY2tlZAorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBDT1NNSUMgQ29tcGlsZXIuIFVzZSAtcGM5OSBvbiBjb21waWxlIGxpbmUgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2Vsc2UKKyAgI2Vycm9yIFVua25vd24gY29tcGlsZXIKKyNlbmRpZgorCisvKiogX19GUFVfVVNFRCBpbmRpY2F0ZXMgd2hldGhlciBhbiBGUFUgaXMgdXNlZCBvciBub3QuCisgICAgVGhpcyBjb3JlIGRvZXMgbm90IHN1cHBvcnQgYW4gRlBVIGF0IGFsbAorKi8KKyNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICkKKyAgI2lmIGRlZmluZWQgX19UQVJHRVRfRlBVX1ZGUAorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNpZiBkZWZpbmVkIF9fQVJNX1BDU19WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19HTlVDX18gKQorICAjaWYgZGVmaW5lZCAoX19WRlBfRlBfXykgJiYgIWRlZmluZWQoX19TT0ZURlBfXykKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpZiBkZWZpbmVkIF9fQVJNVkZQX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UTVM0NzBfXyApCisgICNpZiBkZWZpbmVkIF9fVElfVkZQX1NVUFBPUlRfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNpZiBkZWZpbmVkIF9fRlBVX1ZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fQ1NNQ19fICkKKyAgI2lmICggX19DU01DX18gJiAweDQwMFUpCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlICJjb3JlX2NtSW5zdHIuaCIgICAgICAgICAgICAgICAgLyogQ29yZSBJbnN0cnVjdGlvbiBBY2Nlc3MgKi8KKyNpbmNsdWRlICJjb3JlX2NtRnVuYy5oIiAgICAgICAgICAgICAgICAgLyogQ29yZSBGdW5jdGlvbiBBY2Nlc3MgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9TQzAwMF9IX0dFTkVSSUMgKi8KKworI2lmbmRlZiBfX0NNU0lTX0dFTkVSSUMKKworI2lmbmRlZiBfX0NPUkVfU0MwMDBfSF9ERVBFTkRBTlQKKyNkZWZpbmUgX19DT1JFX1NDMDAwX0hfREVQRU5EQU5UCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGNoZWNrIGRldmljZSBkZWZpbmVzIGFuZCB1c2UgZGVmYXVsdHMgKi8KKyNpZiBkZWZpbmVkIF9fQ0hFQ0tfREVWSUNFX0RFRklORVMKKyAgI2lmbmRlZiBfX1NDMDAwX1JFVgorICAgICNkZWZpbmUgX19TQzAwMF9SRVYgICAgICAgICAgICAgMHgwMDAwVQorICAgICN3YXJuaW5nICJfX1NDMDAwX1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTVBVX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19NUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgMlUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBTQzAwMCAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBSZWdpc3RlciBBYnN0cmFjdGlvbgorICBDb3JlIFJlZ2lzdGVyIGNvbnRhaW46CisgIC0gQ29yZSBSZWdpc3RlcgorICAtIENvcmUgTlZJQyBSZWdpc3RlcgorICAtIENvcmUgU0NCIFJlZ2lzdGVyCisgIC0gQ29yZSBTeXNUaWNrIFJlZ2lzdGVyCisgIC0gQ29yZSBNUFUgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyODsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMjcgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6MTU7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjIzICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFQ6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI0ICBUaHVtYiBiaXQgICAgICAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTozOyAgICAgICAgICAgICAgIC8qITwgYml0OiAyNS4uMjcgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSB4UFNSX1R5cGU7CisKKy8qIHhQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgeFBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogTWFzayAqLworCisjZGVmaW5lIHhQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1RfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjE7ICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBTUFNFTDoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMSAgU3RhY2sgdG8gYmUgdXNlZCAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6MzA7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDIuLjMxICBSZXNlcnZlZCAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBDT05UUk9MX1R5cGU7CisKKy8qIENPTlRST0wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19DT1JFICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQorICBcYnJpZWYgICAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTlZJQyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IElTRVJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzMxVV07CisgIF9fSU9NIHVpbnQzMl90IElDRVJbMVVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSU0VSVkVEMVszMVVdOworICBfX0lPTSB1aW50MzJfdCBJU1BSWzFVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMzFVXTsKKyAgX19JT00gdWludDMyX3QgSUNQUlsxVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMzFVXTsKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzY0VV07CisgIF9fSU9NIHVpbnQzMl90IElQWzhVXTsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICovCit9ICBOVklDX1R5cGU7CisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX05WSUMgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NDQiAgICAgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBDUFVJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIENQVUlEIEJhc2UgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSUNTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBJbnRlcnJ1cHQgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgVlRPUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFJUkNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JT00gdWludDMyX3QgU0hQWzJVXTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSL1cpICBTeXN0ZW0gSGFuZGxlcnMgUHJpb3JpdHkgUmVnaXN0ZXJzLiBbMF0gaXMgUkVTRVJWRUQgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMTU0VV07CisgIF9fSU9NIHVpbnQzMl90IFNGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI5MCAoUi9XKSAgU2VjdXJpdHkgRmVhdHVyZXMgQ29udHJvbCBSZWdpc3RlciAqLworfSBTQ0JfVHlwZTsKKworLyogU0NCIENQVUlEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogSU1QTEVNRU5URVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX01zayAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DUFVJRF9JTVBMRU1FTlRFUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfUG9zICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9WQVJJQU5UX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DUFVJRF9WQVJJQU5UX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogVkFSSUFOVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Nc2sgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX0FSQ0hJVEVDVFVSRV9Qb3MpICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBBUkNISVRFQ1RVUkUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fUG9zICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9QQVJUTk9fTXNrICAgICAgICAgICAgICAgKDB4RkZGVUwgPDwgU0NCX0NQVUlEX1BBUlROT19Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUEFSVE5PIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFJFVklTSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Nc2sgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NQVUlEX1JFVklTSU9OX1BvcyovKSAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gTWFzayAqLworCisvKiBTQ0IgSW50ZXJydXB0IENvbnRyb2wgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX05NSVBFTkRTRVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVlNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcyAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVENMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUFJFRU1QVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBSRUVNUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zICAgICAgICAgICAgMjJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBFTkRJTkdfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfTXNrICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfSUNTUl9WRUNUUEVORElOR19Qb3MpICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfUG9zICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgTWFzayAqLworCisvKiBTQ0IgQXBwbGljYXRpb24gSW50ZXJydXB0IGFuZCBSZXNldCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX1BvcyAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX01zayAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcykgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MgICAgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0VORElBTkVTU19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBFTkRJQU5FU1MgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovCisKKy8qIFNDQiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0VWT05QRU5EX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUERFRVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NMRUVQT05FWElUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTTEVFUE9ORVhJVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Qb3MgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9TVEtBTElHTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfU1RLQUxJR05fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogU1RLQUxJR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TVkNBTExQRU5ERURfTXNrICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU1ZDQUxMUEVOREVEX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1ZDQUxMUEVOREVEIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ25TQ0IgU3lzdGVtIENvbnRyb2xzIG5vdCBpbiBTQ0IgKFNDblNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzJVXTsKKyAgX19JT00gdWludDMyX3QgQUNUTFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBBdXhpbGlhcnkgQ29udHJvbCBSZWdpc3RlciAqLworfSBTQ25TQ0JfVHlwZTsKKworLyogQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfUG9zICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQUNUTFI6IERJU01DWUNJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfTXNrICAgICAgICAoMVVMIC8qPDwgU0NuU0NCX0FDVExSX0RJU01DWUNJTlRfUG9zKi8pICAgIC8qITwgQUNUTFI6IERJU01DWUNJTlQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19TQ25vdFNDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU3lzVGljayAgICAgU3lzdGVtIFRpY2sgVGltZXIgKFN5c1RpY2spCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIFRpbWVyIFJlZ2lzdGVycy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBUaW1lciAoU3lzVGljaykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTE9BRDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWQUw7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFN5c1RpY2sgQ3VycmVudCBWYWx1ZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDQUxJQjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvICkgIFN5c1RpY2sgQ2FsaWJyYXRpb24gUmVnaXN0ZXIgKi8KK30gU3lzVGlja19UeXBlOworCisvKiBTeXNUaWNrIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NPVU5URkxBR19Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DT1VOVEZMQUdfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDT1VOVEZMQUcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfTXNrICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX1BvcykgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogQ0xLU09VUkNFIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcykgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBUSUNLSU5UIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICgxVUwgLyo8PCBTeXNUaWNrX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIFN5c1RpY2sgUmVsb2FkIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0xPQURfUkVMT0FEX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgTE9BRDogUkVMT0FEIE1hc2sgKi8KKworLyogU3lzVGljayBDdXJyZW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfVkFMX0NVUlJFTlRfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX1ZBTF9DVVJSRU5UX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgVkFMOiBDVVJSRU5UIE1hc2sgKi8KKworLyogU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX05PUkVGX01zayAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9OT1JFRl9Qb3MpICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBOT1JFRiBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DQUxJQl9TS0VXX1BvcyAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDQUxJQjogU0tFVyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfTXNrICAgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DQUxJQl9TS0VXX1BvcykgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NBTElCX1RFTk1TX01zayAgICAgICAgICAgICgweEZGRkZGRlVMIC8qPDwgU3lzVGlja19DQUxJQl9URU5NU19Qb3MqLykgICAgLyohPCBTeXNUaWNrIENBTElCOiBURU5NUyBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1N5c1RpY2sgKi8KKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19NUFUgICAgIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBUWVBFOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIE1QVSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgTVBVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUk5SOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBNUFUgUmVnaW9uIFJOUmJlciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KK30gTVBVX1R5cGU7CisKKy8qIE1QVSBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9JUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfRFJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX01zayAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9UWVBFX1NFUEFSQVRFX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBNYXNrICovCisKKy8qIE1QVSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfTXNrICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfTXNrICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX0hGTk1JRU5BX1BvcykgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgTVBVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Qb3MgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Nc2sgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVTCA8PCBNUFVfUkJBUl9BRERSX1BvcykgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JCQVJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBNUFVfUkJBUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Nc2sgICAgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBNUFVfUkFTUl9BVFRSU19Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1hOX1BvcyAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9YTl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfWE5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0FQX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BUF9Nc2sgICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9BUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Qb3MgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfVEVYX01zayAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfVEVYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9CX1BvcyAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9CX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU1JEX1BvcyAgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TUkRfTXNrICAgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1JBU1JfU1JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TSVpFX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIDw8IE1QVV9SQVNSX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1JBU1JfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IERpc2FibGUgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8KKyNlbmRpZgorCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZURlYnVnICAgICAgIENvcmUgRGVidWcgUmVnaXN0ZXJzIChDb3JlRGVidWcpCisgIFxicmllZiAgICBTQzAwMCBDb3JlIERlYnVnIFJlZ2lzdGVycyAoRENCIHJlZ2lzdGVycywgU0hDU1IsIGFuZCBERlNSKSBhcmUgb25seSBhY2Nlc3NpYmxlIG92ZXIgREFQIGFuZCBub3QgdmlhIHByb2Nlc3Nvci4KKyAgICAgICAgICAgIFRoZXJlZm9yZSB0aGV5IGFyZSBub3QgY292ZXJlZCBieSB0aGUgU0MwMDAgaGVhZGVyIGZpbGUuCisgIEB7CisgKi8KKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYml0ZmllbGQgICAgIENvcmUgcmVnaXN0ZXIgYml0IGZpZWxkIG1hY3JvcworICBcYnJpZWYgICAgICBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1BvcywgeHh4X01zaykuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgIE1hc2sgYW5kIHNoaWZ0IGEgYml0IGZpZWxkIHZhbHVlIGZvciB1c2UgaW4gYSByZWdpc3RlciBiaXQgcmFuZ2UuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorKi8KKyNkZWZpbmUgX1ZBTDJGTEQoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlIDw8IGZpZWxkICMjIF9Qb3MpICYgZmllbGQgIyMgX01zaykKKworLyoqCisgIFxicmllZiAgICAgTWFzayBhbmQgc2hpZnQgYSByZWdpc3RlciB2YWx1ZSB0byBleHRyYWN0IGEgYml0IGZpbGVkIHZhbHVlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgYml0IGZpZWxkIHZhbHVlLgorKi8KKyNkZWZpbmUgX0ZMRDJWQUwoZmllbGQsIHZhbHVlKSAgICAoKHZhbHVlICYgZmllbGQgIyMgX01zaykgPj4gZmllbGQgIyMgX1BvcykKKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfY29yZV9iaXRmaWVsZCAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX2NvcmVfYmFzZSAgICAgQ29yZSBEZWZpbml0aW9ucworICBcYnJpZWYgICAgICBEZWZpbml0aW9ucyBmb3IgYmFzZSBhZGRyZXNzZXMsIHVuaW9ucywgYW5kIHN0cnVjdHVyZXMuCisgIEB7CisgKi8KKworLyogTWVtb3J5IG1hcHBpbmcgb2YgU0MwMDAgSGFyZHdhcmUgKi8KKyNkZWZpbmUgU0NTX0JBU0UgICAgICAgICAgICAoMHhFMDAwRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTeXNUaWNrX0JBU0UgICAgICAgIChTQ1NfQkFTRSArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgTlZJQ19CQVNFICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMTAwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE5WSUMgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIFNDQl9CQVNFICAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBCbG9jayBCYXNlIEFkZHJlc3MgKi8KKworI2RlZmluZSBTQ25TQ0IgICAgICAgICAgICAgICgoU0NuU0NCX1R5cGUgICAgKikgICAgIFNDU19CQVNFICAgICAgKSAgIC8qITwgU3lzdGVtIGNvbnRyb2wgUmVnaXN0ZXIgbm90IGluIFNDQiAqLworI2RlZmluZSBTQ0IgICAgICAgICAgICAgICAgICgoU0NCX1R5cGUgICAgICAgKikgICAgIFNDQl9CQVNFICAgICAgKSAgIC8qITwgU0NCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIFN5c1RpY2sgICAgICAgICAgICAgKChTeXNUaWNrX1R5cGUgICAqKSAgICAgU3lzVGlja19CQVNFICApICAgLyohPCBTeXNUaWNrIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIE5WSUMgICAgICAgICAgICAgICAgKChOVklDX1R5cGUgICAgICAqKSAgICAgTlZJQ19CQVNFICAgICApICAgLyohPCBOVklDIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisKKyNpZiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKyAgI2RlZmluZSBNUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDkwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyAgI2RlZmluZSBNUFUgICAgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRSAgICAgICkgICAvKiE8IE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKi8KKyNlbmRpZgorCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisKKy8qIEludGVycnVwdCBQcmlvcml0aWVzIGFyZSBXT1JEIGFjY2Vzc2libGUgb25seSB1bmRlciBBUk12Nk0gICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSBmb2xsb3dpbmcgTUFDUk9TIGhhbmRsZSBnZW5lcmF0aW9uIG9mIHRoZSByZWdpc3RlciBvZmZzZXQgYW5kIGJ5dGUgbWFza3MgKi8KKyNkZWZpbmUgX0JJVF9TSElGVChJUlFuKSAgICAgICAgICggICgoKCh1aW50MzJfdCkoaW50MzJfdCkoSVJRbikpICAgICAgICAgKSAgICAgICYgIDB4MDNVTCkgKiA4VUwpCisjZGVmaW5lIF9TSFBfSURYKElSUW4pICAgICAgICAgICAoICgoKCgodWludDMyX3QpKGludDMyX3QpKElSUW4pKSAmIDB4MEZVTCktOFVMKSA+PiAgICAyVUwpICAgICAgKQorI2RlZmluZSBfSVBfSURYKElSUW4pICAgICAgICAgICAgKCAgICgoKHVpbnQzMl90KShpbnQzMl90KShJUlFuKSkgICAgICAgICAgICAgICAgPj4gICAgMlVMKSAgICAgICkKKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWzBVXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIERpc2FibGUgRXh0ZXJuYWwgSW50ZXJydXB0CisgIFxkZXRhaWxzIERpc2FibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNFUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIHBlbmRpbmcgcmVnaXN0ZXIgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUMtPklTUFJbMFVdICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbMFVdID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRXh0ZXJuYWwgaW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgTlZJQy0+SUNQUlswVV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gPSAoKHVpbnQzMl90KShTQ0ItPlNIUFtfU0hQX0lEWChJUlFuKV0gJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgPSAoKHVpbnQzMl90KShOVklDLT5JUFtfSVBfSURYKElSUW4pXSAgJiB+KDB4RkZVTCA8PCBfQklUX1NISUZUKElSUW4pKSkgfAorICAgICAgICgoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpIDw8IF9CSVRfU0hJRlQoSVJRbikpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhbiBpbnRlcm5hbCAoY29yZSkgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoU0NCLT5TSFBbX1NIUF9JRFgoSVJRbildID4+IF9CSVRfU0hJRlQoSVJRbikgKSAmICh1aW50MzJfdCkweEZGVUwpID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JUFsgX0lQX0lEWChJUlFuKV0gPj4gX0JJVF9TSElGVChJUlFuKSApICYgKHVpbnQzMl90KTB4RkZVTCkgPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19TeXN0ZW1SZXNldCh2b2lkKQoreworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYWxsIG91dHN0YW5kaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJlZCB3cml0ZSBhcmUgY29tcGxldGVkIGJlZm9yZSByZXNldCAqLworICBTQ0ItPkFJUkNSICA9ICgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayk7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBjb21wbGV0aW9uIG9mIG1lbW9yeSBhY2Nlc3MgKi8KKworICBmb3IoOzspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YWl0IHVudGlsIHJlc2V0ICovCisgIHsKKyAgICBfX05PUCgpOworICB9Cit9CisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBTeXNUaWNrIGZ1bmN0aW9uICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1N5c1RpY2tGdW5jdGlvbnMgU3lzVGljayBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGNvbmZpZ3VyZSB0aGUgU3lzdGVtLgorICBAeworICovCisKKyNpZiAoX19WZW5kb3JfU3lzVGlja0NvbmZpZyA9PSAwVSkKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBUaWNrIENvbmZpZ3VyYXRpb24KKyAgXGRldGFpbHMgSW5pdGlhbGl6ZXMgdGhlIFN5c3RlbSBUaW1lciBhbmQgaXRzIGludGVycnVwdCwgYW5kIHN0YXJ0cyB0aGUgU3lzdGVtIFRpY2sgVGltZXIuCisgICAgICAgICAgIENvdW50ZXIgaXMgaW4gZnJlZSBydW5uaW5nIG1vZGUgdG8gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0cy4KKyAgXHBhcmFtIFtpbl0gIHRpY2tzICBOdW1iZXIgb2YgdGlja3MgYmV0d2VlbiB0d28gaW50ZXJydXB0cy4KKyAgXHJldHVybiAgICAgICAgICAwICBGdW5jdGlvbiBzdWNjZWVkZWQuCisgIFxyZXR1cm4gICAgICAgICAgMSAgRnVuY3Rpb24gZmFpbGVkLgorICBcbm90ZSAgICBXaGVuIHRoZSB2YXJpYWJsZSA8Yj5fX1ZlbmRvcl9TeXNUaWNrQ29uZmlnPC9iPiBpcyBzZXQgdG8gMSwgdGhlbiB0aGUKKyAgICAgICAgICAgZnVuY3Rpb24gPGI+U3lzVGlja19Db25maWc8L2I+IGlzIG5vdCBpbmNsdWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSA8Yj48aT5kZXZpY2U8L2k+Lmg8L2I+CisgICAgICAgICAgIG11c3QgY29udGFpbiBhIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU3lzVGlja19Db25maWcodWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2stPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgTlZJQ19TZXRQcmlvcml0eSAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGljay0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorCisjZW5kaWYKKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfU0MwMDBfSF9ERVBFTkRBTlQgKi8KKworI2VuZGlmIC8qIF9fQ01TSVNfR0VORVJJQyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9zYzMwMC5oIGIvdGhpcmRfcGFydHkvbnhwL0NNU0lTL0luY2x1ZGUvY29yZV9zYzMwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDE4YWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvQ01TSVMvSW5jbHVkZS9jb3JlX3NjMzAwLmgKQEAgLTAsMCArMSwxNzQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9zYzMwMC5oCisgKiBAYnJpZWYgICAgQ01TSVMgU0MzMDAgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZQorICogQHZlcnNpb24gIFY0LjMwCisgKiBAZGF0ZSAgICAgMjAuIE9jdG9iZXIgMjAxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTUgQVJNIExJTUlURUQKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFSTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQKKyAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgKgorICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX1NDMzAwX0hfR0VORVJJQworI2RlZmluZSBfX0NPUkVfU0MzMDBfSF9HRU5FUklDCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxwYWdlIENNU0lTX01JU1JBX0V4Y2VwdGlvbnMgIE1JU1JBLUM6MjAwNCBDb21wbGlhbmNlIEV4Y2VwdGlvbnMKKyAgQ01TSVMgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBNSVNSQS1DOjIwMDQgcnVsZXM6CisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDguNSwgb2JqZWN0L2Z1bmN0aW9uIGRlZmluaXRpb24gaW4gaGVhZGVyIGZpbGUuPGJyPgorICAgICBGdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBoZWFkZXIgZmlsZXMgYXJlIHVzZWQgdG8gYWxsb3cgJ2lubGluaW5nJy4KKworICAgXGxpIFJlcXVpcmVkIFJ1bGUgMTguNCwgZGVjbGFyYXRpb24gb2YgdW5pb24gdHlwZSBvciBvYmplY3Qgb2YgdW5pb24gdHlwZTogJ3suLi59Jy48YnI+CisgICAgIFVuaW9ucyBhcmUgdXNlZCBmb3IgZWZmZWN0aXZlIHJlcHJlc2VudGF0aW9uIG9mIGNvcmUgcmVnaXN0ZXJzLgorCisgICBcbGkgQWR2aXNvcnkgUnVsZSAxOS43LCBGdW5jdGlvbi1saWtlIG1hY3JvIGRlZmluZWQuPGJyPgorICAgICBGdW5jdGlvbi1saWtlIG1hY3JvcyBhcmUgdXNlZCB0byBhbGxvdyBtb3JlIGVmZmljaWVudCBjb2RlLgorICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBDTVNJUyBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcaW5ncm91cCBTQzMwMDAKKyAgQHsKKyAqLworCisvKiAgQ01TSVMgU0MzMDAgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgX19TQzMwMF9DTVNJU19WRVJTSU9OX01BSU4gICgweDA0VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFszMToxNl0gQ01TSVMgSEFMIG1haW4gdmVyc2lvbiAqLworI2RlZmluZSBfX1NDMzAwX0NNU0lTX1ZFUlNJT05fU1VCICAgKDB4MUVVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19TQzMwMF9DTVNJU19WRVJTSU9OICAgICAgICgoX19TQzMwMF9DTVNJU19WRVJTSU9OX01BSU4gPDwgMTZVKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19TQzMwMF9DTVNJU19WRVJTSU9OX1NVQiAgICAgICAgICAgKSAgICAvKiE8IENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX1NDICAgICAgICAgICAgICAgICAoMzAwVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3J0ZXggc2VjdXJlIGNvcmUgKi8KKworCisjaWYgICBkZWZpbmVkICggX19DQ19BUk0gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgX19pbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIEFSTSBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIF9faW5saW5lCisKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNkZWZpbmUgX19BU00gICAgICAgICAgICBfX2FzbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBhc20ga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19JTkxJTkUgICAgICAgICBfX2lubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQVJNIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgX19pbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9fYXNtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGFzbSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBHTlUgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIElBUiBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgaW5saW5lIGtleXdvcmQgZm9yIElBUiBDb21waWxlci4gT25seSBhdmFpbGFibGUgaW4gSGlnaCBvcHRpbWl6YXRpb24gbW9kZSEgKi8KKyAgI2RlZmluZSBfX1NUQVRJQ19JTkxJTkUgIHN0YXRpYyBpbmxpbmUKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRJIENDUyBDb21waWxlciAqLworICAjZGVmaW5lIF9fU1RBVElDX0lOTElORSAgc3RhdGljIGlubGluZQorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjZGVmaW5lIF9fQVNNICAgICAgICAgICAgX19hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIFRBU0tJTkcgQ29tcGlsZXIgKi8KKyAgI2RlZmluZSBfX0lOTElORSAgICAgICAgIGlubGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGlubGluZSBrZXl3b3JkIGZvciBUQVNLSU5HIENvbXBpbGVyICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNkZWZpbmUgX19wYWNrZWQKKyAgI2RlZmluZSBfX0FTTSAgICAgICAgICAgIF9hc20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYXNtIGtleXdvcmQgZm9yIENPU01JQyBDb21waWxlciAqLworICAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBpbmxpbmUga2V5d29yZCBmb3IgQ09TTUlDIENvbXBpbGVyLiBVc2UgLXBjOTkgb24gY29tcGlsZSBsaW5lICovCisgICNkZWZpbmUgX19TVEFUSUNfSU5MSU5FICBzdGF0aWMgaW5saW5lCisKKyNlbHNlCisgICNlcnJvciBVbmtub3duIGNvbXBpbGVyCisjZW5kaWYKKworLyoqIF9fRlBVX1VTRUQgaW5kaWNhdGVzIHdoZXRoZXIgYW4gRlBVIGlzIHVzZWQgb3Igbm90LgorICAgIFRoaXMgY29yZSBkb2VzIG5vdCBzdXBwb3J0IGFuIEZQVSBhdCBhbGwKKyovCisjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNpZiBkZWZpbmVkIF9fVEFSR0VUX0ZQVV9WRlAKKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAjaWYgZGVmaW5lZCBfX0FSTV9QQ1NfVkZQCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI2lmIGRlZmluZWQgKF9fVkZQX0ZQX18pICYmICFkZWZpbmVkKF9fU09GVEZQX18pCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX0FSTVZGUF9fCisgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVE1TNDcwX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19UQVNLSU5HX18gKQorICAjaWYgZGVmaW5lZCBfX0ZQVV9WRlBfXworICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0NTTUNfXyApCisgICNpZiAoIF9fQ1NNQ19fICYgMHg0MDBVKQorICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY29yZV9jbUluc3RyLmgiICAgICAgICAgICAgICAgIC8qIENvcmUgSW5zdHJ1Y3Rpb24gQWNjZXNzICovCisjaW5jbHVkZSAiY29yZV9jbUZ1bmMuaCIgICAgICAgICAgICAgICAgIC8qIENvcmUgRnVuY3Rpb24gQWNjZXNzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfU0MzMDBfSF9HRU5FUklDICovCisKKyNpZm5kZWYgX19DTVNJU19HRU5FUklDCisKKyNpZm5kZWYgX19DT1JFX1NDMzAwX0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9TQzMwMF9IX0RFUEVOREFOVAorCisjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjaGVjayBkZXZpY2UgZGVmaW5lcyBhbmQgdXNlIGRlZmF1bHRzICovCisjaWYgZGVmaW5lZCBfX0NIRUNLX0RFVklDRV9ERUZJTkVTCisgICNpZm5kZWYgX19TQzMwMF9SRVYKKyAgICAjZGVmaW5lIF9fU0MzMDBfUkVWICAgICAgICAgICAgICAgMHgwMDAwVQorICAgICN3YXJuaW5nICJfX1NDMzAwX1JFViBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTVBVX1BSRVNFTlQKKyAgICAjZGVmaW5lIF9fTVBVX1BSRVNFTlQgICAgICAgICAgICAgMFUKKyAgICAjd2FybmluZyAiX19NUFVfUFJFU0VOVCBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fTlZJQ19QUklPX0JJVFMKKyAgICAjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgNFUKKyAgICAjd2FybmluZyAiX19OVklDX1BSSU9fQklUUyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKworICAjaWZuZGVmIF9fVmVuZG9yX1N5c1RpY2tDb25maWcKKyAgICAjZGVmaW5lIF9fVmVuZG9yX1N5c1RpY2tDb25maWcgICAgMFUKKyAgICAjd2FybmluZyAiX19WZW5kb3JfU3lzVGlja0NvbmZpZyBub3QgZGVmaW5lZCBpbiBkZXZpY2UgaGVhZGVyIGZpbGU7IHVzaW5nIGRlZmF1bHQhIgorICAjZW5kaWYKKyNlbmRpZgorCisvKiBJTyBkZWZpbml0aW9ucyAoYWNjZXNzIHJlc3RyaWN0aW9ucyB0byBwZXJpcGhlcmFsIHJlZ2lzdGVycykgKi8KKy8qKgorICAgIFxkZWZncm91cCBDTVNJU19nbG9iX2RlZnMgQ01TSVMgR2xvYmFsIERlZmluZXMKKworICAgIDxzdHJvbmc+SU8gVHlwZSBRdWFsaWZpZXJzPC9zdHJvbmc+IGFyZSB1c2VkCisgICAgXGxpIHRvIHNwZWNpZnkgdGhlIGFjY2VzcyB0byBwZXJpcGhlcmFsIHZhcmlhYmxlcy4KKyAgICBcbGkgZm9yIGF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIHBlcmlwaGVyYWwgcmVnaXN0ZXIgZGVidWcgaW5mb3JtYXRpb24uCisqLworI2lmZGVmIF9fY3BsdXNwbHVzCisgICNkZWZpbmUgICBfX0kgICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2Vsc2UKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgY29uc3QgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZW5kaWYKKyNkZWZpbmUgICAgIF9fTyAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICd3cml0ZSBvbmx5JyBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JTyAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgLyB3cml0ZScgcGVybWlzc2lvbnMgKi8KKworLyogZm9sbG93aW5nIGRlZmluZXMgc2hvdWxkIGJlIHVzZWQgZm9yIHN0cnVjdHVyZSBtZW1iZXJzICovCisjZGVmaW5lICAgICBfX0lNICAgICB2b2xhdGlsZSBjb25zdCAgICAgIC8qISBEZWZpbmVzICdyZWFkIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fT00gICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3dyaXRlIG9ubHknIHN0cnVjdHVyZSBtZW1iZXIgcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgICAgIF9fSU9NICAgIHZvbGF0aWxlICAgICAgICAgICAgLyohIERlZmluZXMgJ3JlYWQgLyB3cml0ZScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworCisvKkB9IGVuZCBvZiBncm91cCBTQzMwMCAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICBSZWdpc3RlciBBYnN0cmFjdGlvbgorICBDb3JlIFJlZ2lzdGVyIGNvbnRhaW46CisgIC0gQ29yZSBSZWdpc3RlcgorICAtIENvcmUgTlZJQyBSZWdpc3RlcgorICAtIENvcmUgU0NCIFJlZ2lzdGVyCisgIC0gQ29yZSBTeXNUaWNrIFJlZ2lzdGVyCisgIC0gQ29yZSBEZWJ1ZyBSZWdpc3RlcgorICAtIENvcmUgTVBVIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgIFxkZWZncm91cCBDTVNJU19jb3JlX3JlZ2lzdGVyIERlZmluZXMgYW5kIFR5cGUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmIFR5cGUgZGVmaW5pdGlvbnMgYW5kIGRlZmluZXMgZm9yIENvcnRleC1NIHByb2Nlc3NvciBiYXNlZCBkZXZpY2VzLgorKi8KKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfQ09SRSAgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycworICBcYnJpZWYgICAgICBDb3JlIFJlZ2lzdGVyIHR5cGUgZGVmaW5pdGlvbnMuCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgVW5pb24gdHlwZSB0byBhY2Nlc3MgdGhlIEFwcGxpY2F0aW9uIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChBUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6Mjc7ICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLjI2ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFE6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFEgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBJbnRlcnJ1cHQgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKElQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgSVNSOjk7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uIDggIEV4Y2VwdGlvbiBudW1iZXIgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQwOjIzOyAgICAgICAgICAgICAgLyohPCBiaXQ6ICA5Li4zMSAgUmVzZXJ2ZWQgKi8KKyAgfSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTdHJ1Y3R1cmUgdXNlZCBmb3IgYml0ICBhY2Nlc3MgKi8KKyAgdWludDMyX3QgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUeXBlICAgICAgdXNlZCBmb3Igd29yZCBhY2Nlc3MgKi8KK30gSVBTUl9UeXBlOworCisvKiBJUFNSIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSBJUFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgSVBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBTcGVjaWFsLVB1cnBvc2UgUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXJzICh4UFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNTsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMjMgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgVDoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjQgIFRodW1iIGJpdCAgICAgICAgKHJlYWQgMCkgKi8KKyAgICB1aW50MzJfdCBJVDoyOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6IDI1Li4yNiAgc2F2ZWQgSVQgc3RhdGUgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IFE6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSB4UFNSX1R5cGU7CisKKy8qIHhQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgeFBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogTWFzayAqLworCisjZGVmaW5lIHhQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBRIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVRfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfSVRfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDNVTCA8PCB4UFNSX0lUX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElUIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1RfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBUIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1RfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBuUFJJVjoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgRXhlY3V0aW9uIHByaXZpbGVnZSBpbiBUaHJlYWQgbW9kZSAqLworICAgIHVpbnQzMl90IFNQU0VMOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjayB0byBiZSB1c2VkICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMTozMDsgICAgICAgICAgICAgIC8qITwgYml0OiAgMi4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IENPTlRST0xfVHlwZTsKKworLyogQ09OVFJPTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBQb3NpdGlvbiAqLworI2RlZmluZSBDT05UUk9MX1NQU0VMX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgQ09OVFJPTF9TUFNFTF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTUFNFTCBNYXNrICovCisKKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9uUFJJVl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgQ09OVFJPTF9uUFJJVl9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogblBSSVYgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19DT1JFICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfTlZJQyAgTmVzdGVkIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIChOVklDKQorICBcYnJpZWYgICAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgTlZJQyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IElTRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgSW50ZXJydXB0IFNldCBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzI0VV07CisgIF9fSU9NIHVpbnQzMl90IElDRVJbOFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIEVuYWJsZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSU0VSVkVEMVsyNFVdOworICBfX0lPTSB1aW50MzJfdCBJU1BSWzhVXTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDAgKFIvVykgIEludGVycnVwdCBTZXQgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUNQUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTgwIChSL1cpICBJbnRlcnJ1cHQgQ2xlYXIgUGVuZGluZyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMjRVXTsKKyAgX19JT00gdWludDMyX3QgSUFCUls4VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjAwIChSL1cpICBJbnRlcnJ1cHQgQWN0aXZlIGJpdCBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDRbNTZVXTsKKyAgX19JT00gdWludDhfdCAgSVBbMjQwVV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSL1cpICBJbnRlcnJ1cHQgUHJpb3JpdHkgUmVnaXN0ZXIgKDhCaXQgd2lkZSkgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzY0NFVdOworICBfX09NICB1aW50MzJfdCBTVElSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFMDAgKCAvVykgIFNvZnR3YXJlIFRyaWdnZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCit9ICBOVklDX1R5cGU7CisKKy8qIFNvZnR3YXJlIFRyaWdnZXJlZCBJbnRlcnJ1cHQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgTlZJQ19TVElSX0lOVElEX01zayAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IE5WSUNfU1RJUl9JTlRJRF9Qb3MqLykgICAgICAgIC8qITwgU1RJUjogSU5UTElORVNOVU0gTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19OVklDICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ0IgICAgIFN5c3RlbSBDb250cm9sIEJsb2NrIChTQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JTSAgdWludDMyX3QgQ1BVSUQ7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSLyApICBDUFVJRCBCYXNlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IElDU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgSW50ZXJydXB0IENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZUT1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBSVJDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBTQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQ4X3QgIFNIUFsxMlVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgU3lzdGVtIEhhbmRsZXJzIFByaW9yaXR5IFJlZ2lzdGVycyAoNC03LCA4LTExLCAxMi0xNSkgKi8KKyAgX19JT00gdWludDMyX3QgU0hDU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSEZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDJDIChSL1cpICBIYXJkRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgRGVidWcgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IE1NRkFSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWVtTWFuYWdlIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQkZBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM4IChSL1cpICBCdXNGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzQyAoUi9XKSAgQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBQRlJbMlVdOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvICkgIFByb2Nlc3NvciBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IERGUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA0OCAoUi8gKSAgRGVidWcgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBBRFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNEMgKFIvICkgIEF1eGlsaWFyeSBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IE1NRlJbNFVdOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi8gKSAgTWVtb3J5IE1vZGVsIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSVNBUls1VV07ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDYwIChSLyApICBJbnN0cnVjdGlvbiBTZXQgQXR0cmlidXRlcyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbNVVdOworICBfX0lPTSB1aW50MzJfdCBDUEFDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODggKFIvVykgIENvcHJvY2Vzc29yIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxMjlVXTsKKyAgX19JT00gdWludDMyX3QgU0ZDUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjkwIChSL1cpICBTZWN1cml0eSBGZWF0dXJlcyBDb250cm9sIFJlZ2lzdGVyICovCit9IFNDQl9UeXBlOworCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfTXNrICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX1ZBUklBTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX01zayAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Nc2sgICAgICAgICAgICAgICAoMHhGRkZVTCA8PCBTQ0JfQ1BVSURfUEFSVE5PX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zKi8pICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9OTUlQRU5EU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogTk1JUEVORFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWU0VUX1BvcyAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVlNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNWU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVFNFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcyAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVENMUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUQ0xSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcyAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQUkVFTVBUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUFJFRU1QVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUFJFRU1QVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfSVNSUEVORElOR19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX0lTUlBFTkRJTkdfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IElTUlBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcyAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUUEVORElOR19Nc2sgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX1BvcykgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVFBFTkRJTkcgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBSRVRUT0JBU0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1JFVFRPQkFTRV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfVkVDVEFDVElWRV9Nc2sgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IFNDQl9JQ1NSX1ZFQ1RBQ1RJVkVfUG9zKi8pICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RBQ1RJVkUgTWFzayAqLworCisvKiBTQ0IgVmVjdG9yIFRhYmxlIE9mZnNldCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxCQVNFX1BvcyAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMQkFTRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxCQVNFX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1ZUT1JfVEJMQkFTRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMQkFTRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX1BvcyAgICAgICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfVlRPUl9UQkxPRkZfTXNrICAgICAgICAgICAgICAgICgweDNGRkZGRlVMIDw8IFNDQl9WVE9SX1RCTE9GRl9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgVlRPUjogVEJMT0ZGIE1hc2sgKi8KKworLyogU0NCIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Nc2sgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZU1RBVF9Qb3MpICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWVNUQVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfUG9zICAgICAgICAgICAgMTVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9FTkRJQU5FU1NfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogRU5ESUFORVNTIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFBSSUdST1VQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2sgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQUlSQ1JfUFJJR1JPVVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogU1lTUkVTRVRSRVEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX01zayAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MpICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVENMUkFDVElWRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Nc2sgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0FJUkNSX1ZFQ1RSRVNFVF9Qb3MqLykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUUkVTRVQgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NDUl9TRVZPTlBFTkRfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0VWT05QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NFVk9OUEVORF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fUG9zICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfU1RLQUxJR05fTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1NUS0FMSUdOX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS0FMSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Qb3MgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9CRkhGTk1JR05fTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfQkZIRk5NSUdOX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogQkZIRk5NSUdOIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Qb3MgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9ESVZfMF9UUlBfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRElWXzBfVFJQX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogRElWXzBfVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcyAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1VOQUxJR05fVFJQX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9VTkFMSUdOX1RSUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVTkFMSUdOX1RSUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfUG9zICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVVNFUlNFVE1QRU5EX01zayAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MpICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVTRVJTRVRNUEVORCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Nc2sgICAgICAgICAoMVVMIC8qPDwgU0NCX0NDUl9OT05CQVNFVEhSREVOQV9Qb3MqLykgICAgICAgIC8qITwgU0NCIENDUjogTk9OQkFTRVRIUkRFTkEgTWFzayAqLworCisvKiBTQ0IgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcyAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcyAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcyAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcyAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX01zayAgICAgICAgICAoMVVMIC8qPDwgU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyovKSAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEFDVCBNYXNrICovCisKKy8qIFNDQiBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfVVNHRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRkZGVUwgPDwgU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MpICAgICAgICAgIC8qITwgU0NCIENGU1I6IFVzYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfQlVTRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIDw8IFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIENGU1I6IEJ1cyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX01FTUZBVUxUU1JfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBNZW1vcnkgTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX01zayAgICAgICAgICAgICgweEZGVUwgLyo8PCBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyovKSAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisvKiBTQ0IgSGFyZCBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfUG9zICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0RFQlVHRVZUX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBERUJVR0VWVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0hGU1JfRk9SQ0VEX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IEZPUkNFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfRk9SQ0VEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSEZTUl9WRUNUVEJMX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0hGU1JfVkVDVFRCTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogVkVDVFRCTCBNYXNrICovCisKKy8qIFNDQiBEZWJ1ZyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RGU1JfRVhURVJOQUxfUG9zICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEVYVEVSTkFMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9FWFRFUk5BTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX1BvcyAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9WQ0FUQ0hfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfVkNBVENIX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogVkNBVENIIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX1BvcyAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9EV1RUUkFQX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRFdUVFJBUF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRFdUVFJBUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfQktQVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0JLUFRfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEJLUFQgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfSEFMVEVEX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX0RGU1JfSEFMVEVEX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IEhBTFRFRCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDQiAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NuU0NCIFN5c3RlbSBDb250cm9scyBub3QgaW4gU0NCIChTQ25TQ0IpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2wgYW5kIElEIFJlZ2lzdGVyIG5vdCBpbiB0aGUgU0NCCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElDVFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi8gKSAgSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMVVdOworfSBTQ25TQ0JfVHlwZTsKKworLyogSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Nc2sgICAgICAgICgweEZVTCAvKjw8IFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyovKSAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDbm90U0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TeXNUaWNrICAgICBTeXN0ZW0gVGljayBUaW1lciAoU3lzVGljaykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gVGltZXIgUmVnaXN0ZXJzLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIFRpbWVyIChTeXNUaWNrKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMT0FEOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIFN5c1RpY2sgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZBTDsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENBTElCOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi8gKSAgU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciAqLworfSBTeXNUaWNrX1R5cGU7CisKKy8qIFN5c1RpY2sgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogU3lzVGljayBSZWxvYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zKi8pICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgTWFzayAqLworCisvKiBTeXNUaWNrIEN1cnJlbnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zKi8pICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgTWFzayAqLworCisvKiBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfTXNrICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX05PUkVGX1BvcykgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfUG9zICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX1NLRVdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU3lzVGljayAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfSVRNICAgICBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCBSZWdpc3RlciAoSVRNKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19PTSAgdW5pb24KKyAgeworICAgIF9fT00gIHVpbnQ4X3QgICAgdTg7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDgtYml0ICovCisgICAgX19PTSAgdWludDE2X3QgICB1MTY7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMTYtYml0ICovCisgICAgX19PTSAgdWludDMyX3QgICB1MzI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMzItYml0ICovCisgIH0gIFBPUlQgWzMyVV07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgUmVnaXN0ZXJzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFs4NjRVXTsKKyAgX19JT00gdWludDMyX3QgVEVSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwIChSL1cpICBJVE0gVHJhY2UgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxNVVdOworICBfX0lPTSB1aW50MzJfdCBUUFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFNDAgKFIvVykgIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU4MCAoUi9XKSAgSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzI5VV07CisgIF9fT00gIHVpbnQzMl90IElXUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGOCAoIC9XKSAgSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElSUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGQyAoUi8gKSAgSVRNIEludGVncmF0aW9uIFJlYWQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgSU1DUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RjAwIChSL1cpICBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs0M1VdOworICBfX09NICB1aW50MzJfdCBMQVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjAgKCAvVykgIElUTSBMb2NrIEFjY2VzcyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBMU1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjQgKFIvICkgIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbNlVdOworICBfX0lNICB1aW50MzJfdCBQSUQ0OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDAgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM0ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDU7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZENCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzUgKi8KKyAgX19JTSAgdWludDMyX3QgUElENjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ4IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNiAqLworICBfX0lNICB1aW50MzJfdCBQSUQ3OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGREMgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM3ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDA7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzAgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkU0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMSAqLworICBfX0lNICB1aW50MzJfdCBQSUQyOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMyICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDM7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzMgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkYwIChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBDSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjQgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IENJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGOCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkZDIChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworfSBJVE1fVHlwZTsKKworLyogSVRNIFRyYWNlIFByaXZpbGVnZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVFBSX1BSSVZNQVNLX01zayAgICAgICAgICAgICAgICgweEZVTCAvKjw8IElUTV9UUFJfUFJJVk1BU0tfUG9zKi8pICAgICAgICAgICAgLyohPCBJVE0gVFBSOiBQUklWTUFTSyBNYXNrICovCisKKy8qIElUTSBUcmFjZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UQ1JfQlVTWV9Qb3MgICAgICAgICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEJVU1kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX01zayAgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfQlVTWV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UcmFjZUJ1c0lEX01zayAgICAgICAgICAgICAoMHg3RlVMIDw8IElUTV9UQ1JfVHJhY2VCdXNJRF9Qb3MpICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQVRCSUQgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Qb3MgICAgICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfR1RTRlJFUV9Nc2sgICAgICAgICAgICAgICAgKDNVTCA8PCBJVE1fVENSX0dUU0ZSRVFfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IEdsb2JhbCB0aW1lc3RhbXAgZnJlcXVlbmN5IE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RTUHJlc2NhbGVfUG9zICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBUU1ByZXNjYWxlIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfVFNQcmVzY2FsZV9Nc2sgICAgICAgICAgICAgKDNVTCA8PCBJVE1fVENSX1RTUHJlc2NhbGVfUG9zKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUHJlc2NhbGUgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TV09FTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX1BvcyAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9EV1RFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1lOQ0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfVFNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9UQ1JfSVRNRU5BX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIFdyaXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9JV1JfQVRWQUxJRE1fTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9JV1JfQVRWQUxJRE1fUG9zKi8pICAgICAgICAgICAgICAvKiE8IElUTSBJV1I6IEFUVkFMSURNIE1hc2sgKi8KKworLyogSVRNIEludGVncmF0aW9uIFJlYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0lSUl9BVFJFQURZTV9Nc2sgICAgICAgICAgICAgICAoMVVMIC8qPDwgSVRNX0lSUl9BVFJFQURZTV9Qb3MqLykgICAgICAgICAgICAgIC8qITwgSVRNIElSUjogQVRSRUFEWU0gTWFzayAqLworCisvKiBJVE0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9JTUNSX0lOVEVHUkFUSU9OX1BvcyAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBJTUNSOiBJTlRFR1JBVElPTiBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fSU1DUl9JTlRFR1JBVElPTl9Nc2sgICAgICAgICAgICgxVUwgLyo8PCBJVE1fSU1DUl9JTlRFR1JBVElPTl9Qb3MqLykgICAgICAgICAgLyohPCBJVE0gSU1DUjogSU5URUdSQVRJT04gTWFzayAqLworCisvKiBJVE0gTG9jayBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX0xTUl9CeXRlQWNjX1BvcyAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQnl0ZUFjYyBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX0J5dGVBY2NfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX0xTUl9CeXRlQWNjX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBCeXRlQWNjIE1hc2sgKi8KKworI2RlZmluZSBJVE1fTFNSX0FjY2Vzc19Qb3MgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBBY2Nlc3MgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQWNjZXNzX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIE1hc2sgKi8KKworI2RlZmluZSBJVE1fTFNSX1ByZXNlbnRfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBQcmVzZW50IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfUHJlc2VudF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9MU1JfUHJlc2VudF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IFByZXNlbnQgTWFzayAqLworCisvKkB9Ki8gLyogZW5kIG9mIGdyb3VwIENNU0lTX0lUTSAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfRFdUICAgICBEYXRhIFdhdGNocG9pbnQgYW5kIFRyYWNlIChEV1QpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSBSZWdpc3RlciAoRFdUKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENZQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3ljbGUgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1BJQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBDUEkgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRVhDQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0xFRVBDTlQ7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTbGVlcCBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMU1VDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIExTVSBDb3VudCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGT0xEQ05UOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIEZvbGRlZC1pbnN0cnVjdGlvbiBDb3VudCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBQQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvICkgIFByb2dyYW0gQ291bnRlciBTYW1wbGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ09NUDA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzA7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04wOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAwICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAxICovCisgIF9fSU9NIHVpbnQzMl90IE1BU0sxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzNCAoUi9XKSAgTWFzayBSZWdpc3RlciAxICovCisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMiAqLworICBfX0lPTSB1aW50MzJfdCBNQVNLMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDQgKFIvVykgIE1hc2sgUmVnaXN0ZXIgMiAqLworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjI7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDUwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDMgKi8KKyAgX19JT00gdWludDMyX3QgTUFTSzM7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU0IChSL1cpICBNYXNrIFJlZ2lzdGVyIDMgKi8KKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04zOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDU4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAzICovCit9IERXVF9UeXBlOworCisvKiBEV1QgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX1BvcyAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9OVU1DT01QX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfUG9zICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PVFJDUEtUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9FWFRUUklHX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PRVhUVFJJRyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9DWUNDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9QUkZDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNFVlRFTkFfUG9zICAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0NZQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0NZQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zICAgICAgICAgICAgMjFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0ZPTERFVlRFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0ZPTERFVlRFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBGT0xERVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9MU1VFVlRFTkFfUG9zICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTFNVRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0xTVUVWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0xTVUVWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBMU1VFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1NMRUVQRVZURU5BX1BvcyAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBTTEVFUEVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0VYQ0VWVEVOQV9Qb3MgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfRVhDRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfRVhDRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ0VWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1BJRVZURU5BX1BvcyAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENQSUVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DUElFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DUElFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1BJRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9FWENUUkNFTkFfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDVFJDRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0VYQ1RSQ0VOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ1RSQ0VOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfUG9zICAgICAgICAgICAgMTJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BDU0FNUExFTkFfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX1BDU0FNUExFTkFfUG9zKSAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQQ1NBTVBMRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX1BvcyAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9TWU5DVEFQX01zayAgICAgICAgICAgICAgICgweDNVTCA8PCBEV1RfQ1RSTF9TWU5DVEFQX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU1lOQ1RBUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDVEFQX1BvcyAgICAgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ1RBUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNUQVBfTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNUQVBfUG9zKSAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDVEFQIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QT1NUSU5JVF9Qb3MgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVElOSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVElOSVRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcyAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QT1NUUFJFU0VUX01zayAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9QT1NUUFJFU0VUX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUE9TVFBSRVNFVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDQ05URU5BX1BvcyAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0NOVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNDTlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCAvKjw8IERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MqLykgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDQ05URU5BIE1hc2sgKi8KKworLyogRFdUIENQSSBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1BJQ05UX0NQSUNOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1BJQ05UOiBDUElDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0NQSUNOVF9DUElDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIE1hc2sgKi8KKworLyogRFdUIEV4Y2VwdGlvbiBPdmVyaGVhZCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfRVhDQ05UX0VYQ0NOVF9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRVhDQ05UOiBFWENDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfTXNrICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0VYQ0NOVF9FWENDTlRfUG9zKi8pICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIE1hc2sgKi8KKworLyogRFdUIFNsZWVwIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9TTEVFUENOVF9TTEVFUENOVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBTTEVFUENOVDogU0xFRVBDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX01zayAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1BvcyovKSAgIC8qITwgRFdUIFNMRUVQQ05UOiBTTEVFUENOVCBNYXNrICovCisKKy8qIERXVCBMU1UgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0xTVUNOVF9MU1VDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIExTVUNOVDogTFNVQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9MU1VDTlRfTFNVQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBNYXNrICovCisKKy8qIERXVCBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZPTERDTlRfRk9MRENOVF9Nc2sgICAgICAgICAgICAoMHhGRlVMIC8qPDwgRFdUX0ZPTERDTlRfRk9MRENOVF9Qb3MqLykgICAgIC8qITwgRFdUIEZPTERDTlQ6IEZPTERDTlQgTWFzayAqLworCisvKiBEV1QgQ29tcGFyYXRvciBNYXNrIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9NQVNLX01BU0tfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9NQVNLX01BU0tfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZVTCAvKjw8IERXVF9NQVNLX01BU0tfUG9zKi8pICAgICAgICAgICAvKiE8IERXVCBNQVNLOiBNQVNLIE1hc2sgKi8KKworLyogRFdUIENvbXBhcmF0b3IgRnVuY3Rpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSEVEX01zayAgICAgICAgICAgKDB4MVVMIDw8IERXVF9GVU5DVElPTl9NQVRDSEVEX1BvcykgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0hFRCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjFfUG9zICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIxIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIxX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIxX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWQUREUjBfUG9zICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVkFERFIwIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVkFERFIwX01zayAgICAgICAgKDB4RlVMIDw8IERXVF9GVU5DVElPTl9EQVRBVkFERFIwX1BvcykgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZBRERSMCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Nc2sgICAgICAgICAoMHgzVUwgPDwgRFdUX0ZVTkNUSU9OX0RBVEFWU0laRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBEQVRBVlNJWkUgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9MTksxRU5BX1BvcyAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTE5LMUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Nc2sgICAgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fTE5LMUVOQV9Qb3MpICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IExOSzFFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9EQVRBVk1BVENIX1BvcyAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogREFUQVZNQVRDSCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Nc2sgICAgICAgICgweDFVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZNQVRDSF9Qb3MpICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWTUFUQ0ggTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9DWUNNQVRDSF9Qb3MgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogQ1lDTUFUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX01zayAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0NZQ01BVENIX1BvcykgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBDWUNNQVRDSCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Nc2sgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0VNSVRSQU5HRV9Qb3MpICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBFTUlUUkFOR0UgTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9GVU5DVElPTl9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogRlVOQ1RJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0ZVTkNUSU9OX01zayAgICAgICAgICAoMHhGVUwgLyo8PCBEV1RfRlVOQ1RJT05fRlVOQ1RJT05fUG9zKi8pICAgIC8qITwgRFdUIEZVTkNUSU9OOiBGVU5DVElPTiBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfRFdUICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19UUEkgICAgIFRyYWNlIFBvcnQgSW50ZXJmYWNlIChUUEkpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFRyYWNlIFBvcnQgSW50ZXJmYWNlIFJlZ2lzdGVyIChUUEkpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBTU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIFN1cHBvcnRlZCBQYXJhbGxlbCBQb3J0IFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1NQU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSL1cpICBDdXJyZW50IFBhcmFsbGVsIFBvcnQgU2l6ZSBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDBbMlVdOworICBfX0lPTSB1aW50MzJfdCBBQ1BSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvVykgIEFzeW5jaHJvbm91cyBDbG9jayBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxWzU1VV07CisgIF9fSU9NIHVpbnQzMl90IFNQUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBGMCAoUi9XKSAgU2VsZWN0ZWQgUGluIFByb3RvY29sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMlsxMzFVXTsKKyAgX19JTSAgdWludDMyX3QgRkZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MzAwIChSLyApICBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBGRkNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDQgKFIvVykgIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBGU0NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDggKFIvICkgIEZvcm1hdHRlciBTeW5jaHJvbml6YXRpb24gQ291bnRlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbNzU5VV07CisgIF9fSU0gIHVpbnQzMl90IFRSSUdHRVI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVFOCAoUi8gKSAgVFJJR0dFUiAqLworICBfX0lNICB1aW50MzJfdCBGSUZPMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFRUMgKFIvICkgIEludGVncmF0aW9uIEVUTSBEYXRhICovCisgIF9fSU0gIHVpbnQzMl90IElUQVRCQ1RSMjsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGMCAoUi8gKSAgSVRBVEJDVFIyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFsxVV07CisgIF9fSU0gIHVpbnQzMl90IElUQVRCQ1RSMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGOCAoUi8gKSAgSVRBVEJDVFIwICovCisgIF9fSU0gIHVpbnQzMl90IEZJRk8xOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEVGQyAoUi8gKSAgSW50ZWdyYXRpb24gSVRNIERhdGEgKi8KKyAgX19JT00gdWludDMyX3QgSVRDVFJMOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RjAwIChSL1cpICBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzM5VV07CisgIF9fSU9NIHVpbnQzMl90IENMQUlNU0VUOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZBMCAoUi9XKSAgQ2xhaW0gdGFnIHNldCAqLworICBfX0lPTSB1aW50MzJfdCBDTEFJTUNMUjsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQTQgKFIvVykgIENsYWltIHRhZyBjbGVhciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDdbOFVdOworICBfX0lNICB1aW50MzJfdCBERVZJRDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQzggKFIvICkgIFRQSVVfREVWSUQgKi8KKyAgX19JTSAgdWludDMyX3QgREVWVFlQRTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkNDIChSLyApICBUUElVX0RFVlRZUEUgKi8KK30gVFBJX1R5cGU7CisKKy8qIFRQSSBBc3luY2hyb25vdXMgQ2xvY2sgUHJlc2NhbGVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9BQ1BSX1BSRVNDQUxFUl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBBQ1BSOiBQUkVTQ0FMRVIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0FDUFJfUFJFU0NBTEVSX01zayAgICAgICAgICAgICAoMHgxRkZGVUwgLyo8PCBUUElfQUNQUl9QUkVTQ0FMRVJfUG9zKi8pICAgIC8qITwgVFBJIEFDUFI6IFBSRVNDQUxFUiBNYXNrICovCisKKy8qIFRQSSBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfU1BQUl9UWE1PREVfTXNrICAgICAgICAgICAgICAgICgweDNVTCAvKjw8IFRQSV9TUFBSX1RYTU9ERV9Qb3MqLykgICAgICAgICAgLyohPCBUUEkgU1BQUjogVFhNT0RFIE1hc2sgKi8KKworLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0Tm9uU3RvcF9Qb3MgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdE5vblN0b3AgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRnROb25TdG9wX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfRnROb25TdG9wX1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0Tm9uU3RvcCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfVENQcmVzZW50X1BvcyAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IFRDUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9UQ1ByZXNlbnRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9UQ1ByZXNlbnRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogVENQcmVzZW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9GdFN0b3BwZWRfUG9zICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnRTdG9wcGVkIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0U3RvcHBlZF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0U3RvcHBlZF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdFN0b3BwZWQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGbEluUHJvZyBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Nc2sgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9GRlNSX0ZsSW5Qcm9nX1BvcyovKSAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgTWFzayAqLworCisvKiBUUEkgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Qb3MgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfVHJpZ0luX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfVHJpZ0luX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IFRyaWdJbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GQ29udF9Nc2sgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfRW5GQ29udF9Qb3MpICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRkNvbnQgTWFzayAqLworCisvKiBUUEkgVFJJR0dFUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfVFJJR0dFUl9UUklHR0VSX01zayAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9UUklHR0VSX1RSSUdHRVJfUG9zKi8pICAgICAgLyohPCBUUEkgVFJJR0dFUjogVFJJR0dFUiBNYXNrICovCisKKy8qIFRQSSBJbnRlZ3JhdGlvbiBFVE0gRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAoRklGTzApICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0lUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0lUTV9ieXRlY291bnRfUG9zICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBJVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMF9JVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMDogSVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9BVFZBTElEX1BvcyAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fQVRWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzBfRVRNX0FUVkFMSURfTXNrICAgICAgICAgICgweDNVTCA8PCBUUElfRklGTzBfRVRNX0FUVkFMSURfUG9zKSAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9BVFZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNX2J5dGVjb3VudF9Qb3MgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTV9ieXRlY291bnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfTXNrICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8wX0VUTV9ieXRlY291bnRfUG9zKSAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE1fYnl0ZWNvdW50IE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMl9Qb3MgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTIgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTJfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0yX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0yIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMV9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTFfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IFRQSV9GSUZPMF9FVE0xX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0xIE1hc2sgKi8KKworI2RlZmluZSBUUElfRklGTzBfRVRNMF9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzA6IEVUTTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8wX0VUTTBfTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgVFBJX0ZJRk8wX0VUTTBfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIEZJRk8wOiBFVE0wIE1hc2sgKi8KKworLyogVFBJIElUQVRCQ1RSMiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRBVEJDVFIyX0FUUkVBRFlfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRBVEJDVFIyOiBBVFJFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVEFUQkNUUjJfQVRSRUFEWV9Nc2sgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQVRCQ1RSMl9BVFJFQURZX1BvcyovKSAgICAvKiE8IFRQSSBJVEFUQkNUUjI6IEFUUkVBRFkgTWFzayAqLworCisvKiBUUEkgSW50ZWdyYXRpb24gSVRNIERhdGEgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKEZJRk8xKSAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX0FUVkFMSURfUG9zICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9BVFZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Nc2sgICAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9JVE1fQVRWQUxJRF9Qb3MpICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX0FUVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9JVE1fYnl0ZWNvdW50X1BvcyAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNX2J5dGVjb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Nc2sgICAgICAgICgweDNVTCA8PCBUUElfRklGTzFfSVRNX2J5dGVjb3VudF9Qb3MpICAgICAgLyohPCBUUEkgRklGTzE6IElUTV9ieXRlY291bnQgTWFzayAqLworCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fQVRWQUxJRF9Qb3MgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX0FUVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX01zayAgICAgICAgICAoMHgzVUwgPDwgVFBJX0ZJRk8xX0VUTV9BVFZBTElEX1BvcykgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fQVRWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0VUTV9ieXRlY291bnRfUG9zICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBFVE1fYnl0ZWNvdW50IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X01zayAgICAgICAgKDB4M1VMIDw8IFRQSV9GSUZPMV9FVE1fYnl0ZWNvdW50X1BvcykgICAgICAvKiE8IFRQSSBGSUZPMTogRVRNX2J5dGVjb3VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTJfUG9zICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0yIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0yX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzFfSVRNMl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTFfUG9zICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0xIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0xX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBUUElfRklGTzFfSVRNMV9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMSBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZJRk8xX0lUTTBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZJRk8xOiBJVE0wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GSUZPMV9JVE0wX01zayAgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IFRQSV9GSUZPMV9JVE0wX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBGSUZPMTogSVRNMCBNYXNrICovCisKKy8qIFRQSSBJVEFUQkNUUjAgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0lUQVRCQ1RSMF9BVFJFQURZX1BvcyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIElUQVRCQ1RSMDogQVRSRUFEWSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfSVRBVEJDVFIwX0FUUkVBRFlfTXNrICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9JVEFUQkNUUjBfQVRSRUFEWV9Qb3MqLykgICAgLyohPCBUUEkgSVRBVEJDVFIwOiBBVFJFQURZIE1hc2sgKi8KKworLyogVFBJIEludGVncmF0aW9uIE1vZGUgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfSVRDVFJMX01vZGVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgSVRDVFJMOiBNb2RlIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9JVENUUkxfTW9kZV9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgVFBJX0lUQ1RSTF9Nb2RlX1BvcyovKSAgICAgICAgICAvKiE8IFRQSSBJVENUUkw6IE1vZGUgTWFzayAqLworCisvKiBUUEkgREVWSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTlJaVkFMSURfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfTlJaVkFMSURfUG9zKSAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE5SWlZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX1BvcyAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWSURfTUFOQ1ZBTElEX01zayAgICAgICAgICAgICgweDFVTCA8PCBUUElfREVWSURfTUFOQ1ZBTElEX1BvcykgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IE1BTkNWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MgICAgICAgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX1BUSU5WQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX1BUSU5WQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBQVElOVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9NaW5CdWZTel9Qb3MgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTWluQnVmU3ogUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX01pbkJ1ZlN6X01zayAgICAgICAgICAgICAoMHg3VUwgPDwgVFBJX0RFVklEX01pbkJ1ZlN6X1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNaW5CdWZTeiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX0FzeW5DbGtJbl9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX0FzeW5DbGtJbl9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBBc3luQ2xrSW4gTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IFRQSV9ERVZJRF9OclRyYWNlSW5wdXRfUG9zKi8pICAvKiE8IFRQSSBERVZJRDogTnJUcmFjZUlucHV0IE1hc2sgKi8KKworLyogVFBJIERFVlRZUEUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX1BvcyAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IE1ham9yVHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWVFlQRV9NYWpvclR5cGVfTXNrICAgICAgICAgICgweEZVTCA8PCBUUElfREVWVFlQRV9NYWpvclR5cGVfUG9zKSAgICAgICAgLyohPCBUUEkgREVWVFlQRTogTWFqb3JUeXBlIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfREVWVFlQRV9TdWJUeXBlX01zayAgICAgICAgICAgICgweEZVTCAvKjw8IFRQSV9ERVZUWVBFX1N1YlR5cGVfUG9zKi8pICAgICAgLyohPCBUUEkgREVWVFlQRTogU3ViVHlwZSBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfVFBJICovCisKKworI2lmIChfX01QVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19NUFUgICAgIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBUWVBFOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIE1QVSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgTVBVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUk5SOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBNUFUgUmVnaW9uIFJOUmJlciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkJBUl9BMTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBNUFUgQWxpYXMgMSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJBU1JfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgTVBVIEFsaWFzIDEgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMUMgKFIvVykgIE1QVSBBbGlhcyAyIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkFTUl9BMjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDIwIChSL1cpICBNUFUgQWxpYXMgMiBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTVBVIEFsaWFzIDMgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQVNSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIE1QVSBBbGlhcyAzIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUgUmVnaXN0ZXIgKi8KK30gTVBVX1R5cGU7CisKKy8qIE1QVSBUeXBlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0lSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9JUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBJUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX1BvcyAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfVFlQRV9EUkVHSU9OX01zayAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1RZUEVfRFJFR0lPTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogRFJFR0lPTiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX1NFUEFSQVRFX01zayAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9UWVBFX1NFUEFSQVRFX1BvcyovKSAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBTRVBBUkFURSBNYXNrICovCisKKy8qIE1QVSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX1BSSVZERUZFTkFfTXNrICAgICAgICAgICAgKDFVTCA8PCBNUFVfQ1RSTF9QUklWREVGRU5BX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBQUklWREVGRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfSEZOTUlFTkFfTXNrICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX0hGTk1JRU5BX1BvcykgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEhGTk1JRU5BIE1hc2sgKi8KKworI2RlZmluZSBNUFVfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IE1QVV9DVFJMX0VOQUJMRV9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgTWFzayAqLworCisvKiBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgTVBVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJOUjogUkVHSU9OIE1hc2sgKi8KKworLyogTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Qb3MgICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfQUREUl9Nc2sgICAgICAgICAgICAgICAgICAoMHg3RkZGRkZGVUwgPDwgTVBVX1JCQVJfQUREUl9Qb3MpICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFERFIgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1ZBTElEX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBWQUxJRCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9WQUxJRF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JCQVJfVkFMSURfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogVkFMSUQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQkFSX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JCQVJfUkVHSU9OX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBNUFVfUkJBUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFJFR0lPTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9SQVNSX0FUVFJTX1BvcyAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBmaWVsZCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BVFRSU19Nc2sgICAgICAgICAgICAgICAgICgweEZGRkZVTCA8PCBNUFVfUkFTUl9BVFRSU19Qb3MpICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgZmllbGQgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1hOX1BvcyAgICAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5YTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9YTl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfWE5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuWE4gTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0FQX1BvcyAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5BUCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9BUF9Nc2sgICAgICAgICAgICAgICAgICAgICgweDdVTCA8PCBNUFVfUkFTUl9BUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQVAgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX1RFWF9Qb3MgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5URVggUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfVEVYX01zayAgICAgICAgICAgICAgICAgICAoMHg3VUwgPDwgTVBVX1JBU1JfVEVYX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlRFWCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IE1QVV9SQVNSX1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IEFUVFJTLlMgTWFzayAqLworCisjZGVmaW5lIE1QVV9SQVNSX0NfUG9zICAgICAgICAgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQVNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkFTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQVNSOiBBVFRSUy5DIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9CX1BvcyAgICAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9CX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgTVBVX1JBU1JfQl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogQVRUUlMuQiBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JBU1JfU1JEX1BvcyAgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFN1Yi1SZWdpb24gRGlzYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkFTUl9TUkRfTXNrICAgICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX1JBU1JfU1JEX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogU3ViLVJlZ2lvbiBEaXNhYmxlIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9TSVpFX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIFNpemUgRmllbGQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfU0laRV9Nc2sgICAgICAgICAgICAgICAgICAoMHgxRlVMIDw8IE1QVV9SQVNSX1NJWkVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBTaXplIEZpZWxkIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkFTUl9FTkFCTEVfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkFTUjogUmVnaW9uIGVuYWJsZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JBU1JfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1JBU1JfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIFJBU1I6IFJlZ2lvbiBlbmFibGUgYml0IERpc2FibGUgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8KKyNlbmRpZgorCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZURlYnVnICAgICAgIENvcmUgRGVidWcgUmVnaXN0ZXJzIChDb3JlRGVidWcpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgQ29yZSBEZWJ1ZyBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXIgKENvcmVEZWJ1ZykuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IERIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19PTSAgdWludDMyX3QgRENSU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0ICggL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERDUkRSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBEYXRhIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERFTUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KK30gQ29yZURlYnVnX1R5cGU7CisKKy8qIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfTXNrICAgICAgICAgKDB4RkZGRlVMIDw8IENvcmVEZWJ1Z19ESENTUl9EQkdLRVlfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogREJHS0VZIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zKSAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRVRJUkVfU1QgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0xPQ0tVUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MpICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBTX1JFR1JEWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcyAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TTkFQU1RBTExfTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX1BvcykgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU05BUFNUQUxMIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfTUFTS0lOVFMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19TVEVQX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREhDU1I6IENfU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Qb3MgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERIQ1NSOiBDX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fTXNrICAgICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ESENTUl9DX0RFQlVHRU5fUG9zKi8pICAgICAvKiE8IENvcmVEZWJ1ZyBESENTUjogQ19ERUJVR0VOIE1hc2sgKi8KKworLyogRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfRENSU1JfUkVHV25SX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgRENSU1I6IFJFR1duUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Nc2sgICAgICAgICAoMHgxRlVMIC8qPDwgQ29yZURlYnVnX0RDUlNSX1JFR1NFTF9Qb3MqLykgICAgIC8qITwgQ29yZURlYnVnIERDUlNSOiBSRUdTRUwgTWFzayAqLworCisvKiBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX1BvcyAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVFJDRU5BX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MpICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFRSQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zICAgICAgICAxOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fUkVRIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Qb3MpICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcyAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1NURVBfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX1BvcykgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9TVEVQIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUEVORF9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX1BFTkQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fUG9zICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fRU5fTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcykgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogTU9OX0VOIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0hBUkRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX1BvcyAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfSU5URVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MpICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX0lOVEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Qb3MgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0JVU0VSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zKSAgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19CVVNFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcyAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfU1RBVEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Nc2sgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfUG9zKSAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfUG9zICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DSEtFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcykgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ0hLRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX05PQ1BFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX1BvcykgICAgICAgIC8qITwgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19NTUVSUl9Nc2sgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfUG9zKSAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfTU1FUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfTXNrICAgKDFVTCAvKjw8IENvcmVEZWJ1Z19ERU1DUl9WQ19DT1JFUkVTRVRfUG9zKi8pICAvKiE8IENvcmVEZWJ1ZyBERU1DUjogVkNfQ09SRVJFU0VUIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ29yZURlYnVnICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iaXRmaWVsZCAgICAgQ29yZSByZWdpc3RlciBiaXQgZmllbGQgbWFjcm9zCisgIFxicmllZiAgICAgIE1hY3JvcyBmb3IgdXNlIHdpdGggYml0IGZpZWxkIGRlZmluaXRpb25zICh4eHhfUG9zLCB4eHhfTXNrKS4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgTWFzayBhbmQgc2hpZnQgYSBiaXQgZmllbGQgdmFsdWUgZm9yIHVzZSBpbiBhIHJlZ2lzdGVyIGJpdCByYW5nZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiB0aGUgYml0IGZpZWxkLgorICBccmV0dXJuICAgICAgICAgICBNYXNrZWQgYW5kIHNoaWZ0ZWQgdmFsdWUuCisqLworI2RlZmluZSBfVkFMMkZMRChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgPDwgZmllbGQgIyMgX1BvcykgJiBmaWVsZCAjIyBfTXNrKQorCisvKioKKyAgXGJyaWVmICAgICBNYXNrIGFuZCBzaGlmdCBhIHJlZ2lzdGVyIHZhbHVlIHRvIGV4dHJhY3QgYSBiaXQgZmlsZWQgdmFsdWUuCisgIFxwYXJhbVtpbl0gZmllbGQgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAgXHBhcmFtW2luXSB2YWx1ZSAgVmFsdWUgb2YgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCBiaXQgZmllbGQgdmFsdWUuCisqLworI2RlZmluZSBfRkxEMlZBTChmaWVsZCwgdmFsdWUpICAgICgodmFsdWUgJiBmaWVsZCAjIyBfTXNrKSA+PiBmaWVsZCAjIyBfUG9zKQorCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19jb3JlX2JpdGZpZWxkICovCisKKworLyoqCisgIFxpbmdyb3VwICAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwICAgQ01TSVNfY29yZV9iYXNlICAgICBDb3JlIERlZmluaXRpb25zCisgIFxicmllZiAgICAgIERlZmluaXRpb25zIGZvciBiYXNlIGFkZHJlc3NlcywgdW5pb25zLCBhbmQgc3RydWN0dXJlcy4KKyAgQHsKKyAqLworCisvKiBNZW1vcnkgbWFwcGluZyBvZiBDb3J0ZXgtTTMgSGFyZHdhcmUgKi8KKyNkZWZpbmUgU0NTX0JBU0UgICAgICAgICAgICAoMHhFMDAwRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBJVE1fQkFTRSAgICAgICAgICAgICgweEUwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBEV1RfQkFTRSAgICAgICAgICAgICgweEUwMDAxMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBUUElfQkFTRSAgICAgICAgICAgICgweEUwMDQwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBDb3JlRGVidWdfQkFTRSAgICAgICgweEUwMDBFREYwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZSBEZWJ1ZyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgU3lzVGlja19CQVNFICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMDEwVUwpICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE5WSUNfQkFTRSAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBTQ0JfQkFTRSAgICAgICAgICAgIChTQ1NfQkFTRSArICAweDBEMDBVTCkgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgU0NuU0NCICAgICAgICAgICAgICAoKFNDblNDQl9UeXBlICAgICopICAgICBTQ1NfQkFTRSAgICAgICkgICAvKiE8IFN5c3RlbSBjb250cm9sIFJlZ2lzdGVyIG5vdCBpbiBTQ0IgKi8KKyNkZWZpbmUgU0NCICAgICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRSAgICAgICkgICAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBTeXNUaWNrICAgICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRSAgKSAgIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBOVklDICAgICAgICAgICAgICAgICgoTlZJQ19UeXBlICAgICAgKikgICAgIE5WSUNfQkFTRSAgICAgKSAgIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBJVE0gICAgICAgICAgICAgICAgICgoSVRNX1R5cGUgICAgICAgKikgICAgIElUTV9CQVNFICAgICAgKSAgIC8qITwgSVRNIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisjZGVmaW5lIERXVCAgICAgICAgICAgICAgICAgKChEV1RfVHlwZSAgICAgICAqKSAgICAgRFdUX0JBU0UgICAgICApICAgLyohPCBEV1QgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyNkZWZpbmUgVFBJICAgICAgICAgICAgICAgICAoKFRQSV9UeXBlICAgICAgICopICAgICBUUElfQkFTRSAgICAgICkgICAvKiE8IFRQSSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworI2RlZmluZSBDb3JlRGVidWcgICAgICAgICAgICgoQ29yZURlYnVnX1R5cGUgKikgICAgIENvcmVEZWJ1Z19CQVNFKSAgIC8qITwgQ29yZSBEZWJ1ZyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCisjaWYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisgICNkZWZpbmUgTVBVX0JBU0UgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQ5MFVMKSAgICAgICAgICAgICAgICAgICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisgICNkZWZpbmUgTVBVICAgICAgICAgICAgICAgKChNUFVfVHlwZSAgICAgICAqKSAgICAgTVBVX0JBU0UgICAgICApICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisjZW5kaWYKKworLypAfSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyCisgIENvcmUgRnVuY3Rpb24gSW50ZXJmYWNlIGNvbnRhaW5zOgorICAtIENvcmUgTlZJQyBGdW5jdGlvbnMKKyAgLSBDb3JlIFN5c1RpY2sgRnVuY3Rpb25zCisgIC0gQ29yZSBEZWJ1ZyBGdW5jdGlvbnMKKyAgLSBDb3JlIFJlZ2lzdGVyIEFjY2VzcyBGdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UgRnVuY3Rpb25zIGFuZCBJbnN0cnVjdGlvbnMgUmVmZXJlbmNlCisqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICBOVklDIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX0NvcmVfRnVuY3Rpb25JbnRlcmZhY2UKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyBOVklDIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb25zIHRoYXQgbWFuYWdlIGludGVycnVwdHMgYW5kIGV4Y2VwdGlvbnMgdmlhIHRoZSBOVklDLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgR3JvdXBpbmcKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgdXNpbmcgdGhlIHJlcXVpcmVkIHVubG9jayBzZXF1ZW5jZS4KKyAgICAgICAgICAgVGhlIHBhcmFtZXRlciBQcmlvcml0eUdyb3VwIGlzIGFzc2lnbmVkIHRvIHRoZSBmaWVsZCBTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZC4KKyAgICAgICAgICAgT25seSB2YWx1ZXMgZnJvbSAwLi43IGFyZSB1c2VkLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgIFByaW9yaXR5R3JvdXAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5R3JvdXBpbmcodWludDMyX3QgUHJpb3JpdHlHcm91cCkKK3sKKyAgdWludDMyX3QgcmVnX3ZhbHVlOworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAgICAgICAgICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworCisgIHJlZ192YWx1ZSAgPSAgU0NCLT5BSVJDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG9sZCByZWdpc3RlciBjb25maWd1cmF0aW9uICAgICovCisgIHJlZ192YWx1ZSAmPSB+KCh1aW50MzJfdCkoU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrIHwgU0NCX0FJUkNSX1BSSUdST1VQX01zaykpOyAvKiBjbGVhciBiaXRzIHRvIGNoYW5nZSAgICAgICAgICAgICAgICovCisgIHJlZ192YWx1ZSAgPSAgKHJlZ192YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpIHwKKyAgICAgICAgICAgICAgICAoUHJpb3JpdHlHcm91cFRtcCA8PCA4VSkgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgICAgICAgIC8qIEluc2VydCB3cml0ZSBrZXkgYW5kIHByaW9ydHkgZ3JvdXAgKi8KKyAgU0NCLT5BSVJDUiA9ICByZWdfdmFsdWU7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgZnJvbSB0aGUgTlZJQyBJbnRlcnJ1cHQgQ29udHJvbGxlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgICBQcmlvcml0eSBncm91cGluZyBmaWVsZCAoU0NCLT5BSVJDUiBbMTA6OF0gUFJJR1JPVVAgZmllbGQpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eUdyb3VwaW5nKHZvaWQpCit7CisgIHJldHVybiAoKHVpbnQzMl90KSgoU0NCLT5BSVJDUiAmIFNDQl9BSVJDUl9QUklHUk9VUF9Nc2spID4+IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIEV4dGVybmFsIEludGVycnVwdAorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlLXNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JU0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBFeHRlcm5hbCBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Utc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEV4dGVybmFsIGludGVycnVwdCBudW1iZXIuIFZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTlZJQ19EaXNhYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ0VSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBOVklDIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgc3RhdHVzIGlzIG5vdCBwZW5kaW5nLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgcGVuZGluZy4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JU1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4gVmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIE5WSUMtPklTUFJbKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBDbGVhciBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGFuIGV4dGVybmFsIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBFeHRlcm5hbCBpbnRlcnJ1cHQgbnVtYmVyLiBWYWx1ZSBjYW5ub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBOVklDLT5JQ1BSWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEFjdGl2ZSBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIGFjdGl2ZSByZWdpc3RlciBpbiBOVklDIGFuZCByZXR1cm5zIHRoZSBhY3RpdmUgYml0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgYWN0aXZlLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgYWN0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRBY3RpdmUoSVJRbl9UeXBlIElSUW4pCit7CisgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SUFCUlsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpKGludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworfQorCisKKy8qKgorICBcYnJpZWYgICBTZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IGNvcmUgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1NldFByaW9yaXR5KElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA8IDApCisgIHsKKyAgICBTQ0ItPlNIUFsoKCh1aW50MzJfdCkoaW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5CisgIFxkZXRhaWxzIFJlYWRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGFuIGV4dGVybmFsIChkZXZpY2Ugc3BlY2lmaWMpIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhbiBpbnRlcm5hbCAoY29yZSkgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgSW50ZXJydXB0IFByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pIDwgMCkKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KVNDQi0+U0hQWygoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pICYgMHhGVUwpLTRVTF0gPj4gKDhVIC0gX19OVklDX1BSSU9fQklUUykpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClOVklDLT5JUFsoKHVpbnQzMl90KShpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgRW5jb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIEVuY29kZXMgdGhlIHByaW9yaXR5IGZvciBhbiBpbnRlcnJ1cHQgd2l0aCB0aGUgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAsCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUsIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbaW5dICAgUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW2luXSAgICAgICBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkIHByaW9yaXR5LiBWYWx1ZSBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX1NldFByaW9yaXR5KCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0VuY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90IFN1YlByaW9yaXR5KQoreworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7CisgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsKKworICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6ICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7CisgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7CisKKyAgcmV0dXJuICgKKyAgICAgICAgICAgKChQcmVlbXB0UHJpb3JpdHkgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCkpIDw8IFN1YlByaW9yaXR5Qml0cykgfAorICAgICAgICAgICAoKFN1YlByaW9yaXR5ICAgICAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzICAgICkpIC0gMVVMKSkpCisgICAgICAgICApOworfQorCisKKy8qKgorICBcYnJpZWYgICBEZWNvZGUgUHJpb3JpdHkKKyAgXGRldGFpbHMgRGVjb2RlcyBhbiBpbnRlcnJ1cHQgcHJpb3JpdHkgdmFsdWUgd2l0aCBhIGdpdmVuIHByaW9yaXR5IGdyb3VwIHRvCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgYW5kIHN1YnByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgICAgUHJpb3JpdHkgICBQcmlvcml0eSB2YWx1ZSwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfR2V0UHJpb3JpdHkoKS4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbb3V0XSBwUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW291dF0gICAgIHBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGVjb2RlUHJpb3JpdHkgKHVpbnQzMl90IFByaW9yaXR5LCB1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCogY29uc3QgcFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QqIGNvbnN0IHBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgICpwUHJlZW1wdFByaW9yaXR5ID0gKFByaW9yaXR5ID4+IFN1YlByaW9yaXR5Qml0cykgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCk7CisgICpwU3ViUHJpb3JpdHkgICAgID0gKFByaW9yaXR5ICAgICAgICAgICAgICAgICAgICkgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFN5c3RlbSBSZXNldAorICBcZGV0YWlscyBJbml0aWF0ZXMgYSBzeXN0ZW0gcmVzZXQgcmVxdWVzdCB0byByZXNldCB0aGUgTUNVLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBOVklDX1N5c3RlbVJlc2V0KHZvaWQpCit7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIHdyaXRlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHJlc2V0ICovCisgIFNDQi0+QUlSQ1IgID0gKHVpbnQzMl90KSgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgKTsgICAgICAgICAvKiBLZWVwIHByaW9yaXR5IGdyb3VwIHVuY2hhbmdlZCAqLworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovCisKKyAgZm9yKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLworICB7CisgICAgX19OT1AoKTsKKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX05WSUNGdW5jdGlvbnMgKi8KKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgU3lzVGljayBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zIFN5c1RpY2sgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFN5c3RlbS4KKyAgQHsKKyAqLworCisjaWYgKF9fVmVuZG9yX1N5c1RpY2tDb25maWcgPT0gMFUpCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gVGljayBDb25maWd1cmF0aW9uCisgIFxkZXRhaWxzIEluaXRpYWxpemVzIHRoZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLgorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuCisgIFxwYXJhbSBbaW5dICB0aWNrcyAgTnVtYmVyIG9mIHRpY2tzIGJldHdlZW4gdHdvIGludGVycnVwdHMuCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLgorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4KKyAgXG5vdGUgICAgV2hlbiB0aGUgdmFyaWFibGUgPGI+X19WZW5kb3JfU3lzVGlja0NvbmZpZzwvYj4gaXMgc2V0IHRvIDEsIHRoZW4gdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlN5c1RpY2tfQ29uZmlnPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPgorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFN5c1RpY2tfQ29uZmlnKHVpbnQzMl90IHRpY2tzKQoreworICBpZiAoKHRpY2tzIC0gMVVMKSA+IFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrKQorICB7CisgICAgcmV0dXJuICgxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbG9hZCB2YWx1ZSBpbXBvc3NpYmxlICovCisgIH0KKworICBTeXNUaWNrLT5MT0FEICA9ICh1aW50MzJfdCkodGlja3MgLSAxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgcmVsb2FkIHJlZ2lzdGVyICovCisgIE5WSUNfU2V0UHJpb3JpdHkgKFN5c1RpY2tfSVJRbiwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSAtIDFVTCk7IC8qIHNldCBQcmlvcml0eSBmb3IgU3lzdGljayBJbnRlcnJ1cHQgKi8KKyAgU3lzVGljay0+VkFMICAgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgU3lzVGljayBDb3VudGVyIFZhbHVlICovCisgIFN5c1RpY2stPkNUUkwgID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIFN5c1RpY2sgSVJRIGFuZCBTeXNUaWNrIFRpbWVyICovCisgIHJldHVybiAoMFVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHN1Y2Nlc3NmdWwgKi8KK30KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEZWJ1ZyBJbi9PdXRwdXQgZnVuY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zIElUTSBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgSVRNIGRlYnVnIGludGVyZmFjZS4KKyAgQHsKKyAqLworCitleHRlcm4gdm9sYXRpbGUgaW50MzJfdCBJVE1fUnhCdWZmZXI7ICAgICAgICAgICAgICAgICAgICAvKiE8IEV4dGVybmFsIHZhcmlhYmxlIHRvIHJlY2VpdmUgY2hhcmFjdGVycy4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIElUTV9SWEJVRkZFUl9FTVBUWSAgIDB4NUFBNTVBQTVVIC8qITwgVmFsdWUgaWRlbnRpZnlpbmcgXHJlZiBJVE1fUnhCdWZmZXIgaXMgcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyLiAqLworCisKKy8qKgorICBcYnJpZWYgICBJVE0gU2VuZCBDaGFyYWN0ZXIKKyAgXGRldGFpbHMgVHJhbnNtaXRzIGEgY2hhcmFjdGVyIHZpYSB0aGUgSVRNIGNoYW5uZWwgMCwgYW5kCisgICAgICAgICAgIFxsaSBKdXN0IHJldHVybnMgd2hlbiBubyBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQgdGhhdCBoYXMgYm9va2VkIHRoZSBvdXRwdXQuCisgICAgICAgICAgIFxsaSBJcyBibG9ja2luZyB3aGVuIGEgZGVidWdnZXIgaXMgY29ubmVjdGVkLCBidXQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBzZW50IGhhcyBub3QgYmVlbiB0cmFuc21pdHRlZC4KKyAgXHBhcmFtIFtpbl0gICAgIGNoICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuCisgIFxyZXR1cm5zICAgICAgICAgICAgQ2hhcmFjdGVyIHRvIHRyYW5zbWl0LgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgSVRNX1NlbmRDaGFyICh1aW50MzJfdCBjaCkKK3sKKyAgaWYgKCgoSVRNLT5UQ1IgJiBJVE1fVENSX0lUTUVOQV9Nc2spICE9IDBVTCkgJiYgICAgICAvKiBJVE0gZW5hYmxlZCAqLworICAgICAgKChJVE0tPlRFUiAmIDFVTCAgICAgICAgICAgICAgICkgIT0gMFVMKSAgICkgICAgIC8qIElUTSBQb3J0ICMwIGVuYWJsZWQgKi8KKyAgeworICAgIHdoaWxlIChJVE0tPlBPUlRbMFVdLnUzMiA9PSAwVUwpCisgICAgeworICAgICAgX19OT1AoKTsKKyAgICB9CisgICAgSVRNLT5QT1JUWzBVXS51OCA9ICh1aW50OF90KWNoOworICB9CisgIHJldHVybiAoY2gpOworfQorCisKKy8qKgorICBcYnJpZWYgICBJVE0gUmVjZWl2ZSBDaGFyYWN0ZXIKKyAgXGRldGFpbHMgSW5wdXRzIGEgY2hhcmFjdGVyIHZpYSB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgXHJlZiBJVE1fUnhCdWZmZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgUmVjZWl2ZWQgY2hhcmFjdGVyLgorICBccmV0dXJuICAgICAgICAgLTEgIE5vIGNoYXJhY3RlciBwZW5kaW5nLgorICovCitfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBJVE1fUmVjZWl2ZUNoYXIgKHZvaWQpCit7CisgIGludDMyX3QgY2ggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisKKyAgaWYgKElUTV9SeEJ1ZmZlciAhPSBJVE1fUlhCVUZGRVJfRU1QVFkpCisgIHsKKyAgICBjaCA9IElUTV9SeEJ1ZmZlcjsKKyAgICBJVE1fUnhCdWZmZXIgPSBJVE1fUlhCVUZGRVJfRU1QVFk7ICAgICAgIC8qIHJlYWR5IGZvciBuZXh0IGNoYXJhY3RlciAqLworICB9CisKKyAgcmV0dXJuIChjaCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIElUTSBDaGVjayBDaGFyYWN0ZXIKKyAgXGRldGFpbHMgQ2hlY2tzIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgcGVuZGluZyBmb3IgcmVhZGluZyBpbiB0aGUgdmFyaWFibGUgXHJlZiBJVE1fUnhCdWZmZXIuCisgIFxyZXR1cm4gICAgICAgICAgMCAgTm8gY2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAgXHJldHVybiAgICAgICAgICAxICBDaGFyYWN0ZXIgYXZhaWxhYmxlLgorICovCitfX1NUQVRJQ19JTkxJTkUgaW50MzJfdCBJVE1fQ2hlY2tDaGFyICh2b2lkKQoreworCisgIGlmIChJVE1fUnhCdWZmZXIgPT0gSVRNX1JYQlVGRkVSX0VNUFRZKQorICB7CisgICAgcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisgIH0KK30KKworLypAfSBlbmQgb2YgQ01TSVNfY29yZV9EZWJ1Z0Z1bmN0aW9ucyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19DT1JFX1NDMzAwX0hfREVQRU5EQU5UICovCisKKyNlbmRpZiAvKiBfX0NNU0lTX0dFTkVSSUMgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L01LVzQxWjQuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L01LVzQxWjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzcxMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvTUtXNDFaNC5oCkBAIC0wLDAgKzEsMTMwMjMgQEAKKy8qCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqKiAgICAgUHJvY2Vzc29yczogICAgICAgICAgTUtXNDFaMjU2VkhUNAorKiogICAgICAgICAgICAgICAgICAgICAgICAgIE1LVzQxWjUxMkNBVDQKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBNS1c0MVo1MTJWSFQ0CisqKgorKiogICAgIENvbXBpbGVyczogICAgICAgICAgIEtlaWwgQVJNIEMvQysrIENvbXBpbGVyCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgR05VIEMgQ29tcGlsZXIKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBJQVIgQU5TSSBDL0MrKyBDb21waWxlciBmb3IgQVJNCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUNVWHByZXNzbyBDb21waWxlcgorKioKKyoqICAgICBSZWZlcmVuY2UgbWFudWFsOiAgICBNS1c0MVo1MTJSTSBSZXYuIDAuMSwgMDQvMjAxNgorKiogICAgIFZlcnNpb246ICAgICAgICAgICAgIHJldi4gMS4wLCAyMDE1LTA5LTIzCisqKiAgICAgQnVpbGQ6ICAgICAgICAgICAgICAgYjE3MDIxMworKioKKyoqICAgICBBYnN0cmFjdDoKKyoqICAgICAgICAgQ01TSVMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgZm9yIE1LVzQxWjQKKyoqCisqKiAgICAgQ29weXJpZ2h0IDE5OTctMjAxNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorKiogICAgIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisqKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyoqICAgICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqKgorKiogICAgIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyoqICAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoqCisqKiAgICAgbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyoqICAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorKiogICAgICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoqCisqKiAgICAgbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisqKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqKiAgICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoqCisqKiAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorKiogICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqKiAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiogICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisqKiAgICAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqKiAgICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiogICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiogICAgIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqKiAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyoqICAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoqCisqKiAgICAgaHR0cDogICAgICAgICAgICAgICAgIHd3dy5ueHAuY29tCisqKiAgICAgbWFpbDogICAgICAgICAgICAgICAgIHN1cHBvcnRAbnhwLmNvbQorKioKKyoqICAgICBSZXZpc2lvbnM6CisqKiAgICAgLSByZXYuIDEuMCAoMjAxNS0wOS0yMykKKyoqICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uLgorKioKKyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyovCisKKy8qIQorICogQGZpbGUgTUtXNDFaNC5oCisgKiBAdmVyc2lvbiAxLjAKKyAqIEBkYXRlIDIwMTUtMDktMjMKKyAqIEBicmllZiBDTVNJUyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBmb3IgTUtXNDFaNAorICoKKyAqIENNU0lTIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIGZvciBNS1c0MVo0CisgKi8KKworI2lmbmRlZiBfTUtXNDFaNF9IXworI2RlZmluZSBfTUtXNDFaNF9IXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3ltYm9sIHByZXZlbnRpbmcgcmVwZWF0ZWQgaW5jbHVzaW9uICovCisKKy8qKiBNZW1vcnkgbWFwIG1ham9yIHZlcnNpb24gKG1lbW9yeSBtYXBzIHdpdGggZXF1YWwgbWFqb3IgdmVyc2lvbiBudW1iZXIgYXJlCisgKiBjb21wYXRpYmxlKSAqLworI2RlZmluZSBNQ1VfTUVNX01BUF9WRVJTSU9OIDB4MDEwMFUKKy8qKiBNZW1vcnkgbWFwIG1pbm9yIHZlcnNpb24gKi8KKyNkZWZpbmUgTUNVX01FTV9NQVBfVkVSU0lPTl9NSU5PUiAweDAwMDBVCisKKyNpZiAhZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BlZGFudGljIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV292ZXJyaWRlLWluaXQiCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gSW50ZXJydXB0IHZlY3RvciBudW1iZXJzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgSW50ZXJydXB0X3ZlY3Rvcl9udW1iZXJzIEludGVycnVwdCB2ZWN0b3IgbnVtYmVycworICogQHsKKyAqLworCisvKiogSW50ZXJydXB0IE51bWJlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBOVU1CRVJfT0ZfSU5UX1ZFQ1RPUlMgNDggICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGludGVycnVwdHMgaW4gdGhlIFZlY3RvciB0YWJsZSAqLworCit0eXBlZGVmIGVudW0gSVJRbiB7CisgIC8qIEF1eGlsaWFyeSBjb25zdGFudHMgKi8KKyAgTm90QXZhaWxfSVJRbiAgICAgICAgICAgICAgICA9IC0xMjgsICAgICAgICAgICAgIC8qKjwgTm90IGF2YWlsYWJsZSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0ICovCisKKyAgLyogQ29yZSBpbnRlcnJ1cHRzICovCisgIE5vbk1hc2thYmxlSW50X0lSUW4gICAgICAgICAgPSAtMTQsICAgICAgICAgICAgICAvKio8IE5vbiBNYXNrYWJsZSBJbnRlcnJ1cHQgKi8KKyAgSGFyZEZhdWx0X0lSUW4gICAgICAgICAgICAgICA9IC0xMywgICAgICAgICAgICAgIC8qKjwgQ29ydGV4LU0wIFNWIEhhcmQgRmF1bHQgSW50ZXJydXB0ICovCisgIFNWQ2FsbF9JUlFuICAgICAgICAgICAgICAgICAgPSAtNSwgICAgICAgICAgICAgICAvKio8IENvcnRleC1NMCBTViBDYWxsIEludGVycnVwdCAqLworICBQZW5kU1ZfSVJRbiAgICAgICAgICAgICAgICAgID0gLTIsICAgICAgICAgICAgICAgLyoqPCBDb3J0ZXgtTTAgUGVuZCBTViBJbnRlcnJ1cHQgKi8KKyAgU3lzVGlja19JUlFuICAgICAgICAgICAgICAgICA9IC0xLCAgICAgICAgICAgICAgIC8qKjwgQ29ydGV4LU0wIFN5c3RlbSBUaWNrIEludGVycnVwdCAqLworCisgIC8qIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHRzICovCisgIERNQTBfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgICAgICAvKio8IERNQSBjaGFubmVsIDAgdHJhbnNmZXIgY29tcGxldGUgKi8KKyAgRE1BMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAgICAgIC8qKjwgRE1BIGNoYW5uZWwgMSB0cmFuc2ZlciBjb21wbGV0ZSAqLworICBETUEyX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgICAgICAgLyoqPCBETUEgY2hhbm5lbCAyIHRyYW5zZmVyIGNvbXBsZXRlICovCisgIERNQTNfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgICAgICAvKio8IERNQSBjaGFubmVsIDMgdHJhbnNmZXIgY29tcGxldGUgKi8KKyAgUmVzZXJ2ZWQyMF9JUlFuICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAgICAgIC8qKjwgUmVzZXJ2ZWQgaW50ZXJydXB0ICovCisgIEZURkFfSVJRbiAgICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgICAgICAvKio8IENvbW1hbmQgY29tcGxldGUgYW5kIHJlYWQgY29sbGlzaW9uICovCisgIExWRF9MVldfRENEQ19JUlFuICAgICAgICAgICAgPSA2LCAgICAgICAgICAgICAgICAvKio8IExvdy12b2x0YWdlIGRldGVjdCwgbG93LXZvbHRhZ2Ugd2FybmluZywgRENEQyAqLworICBMTFdVX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNywgICAgICAgICAgICAgICAgLyoqPCBMb3cgbGVha2FnZSB3YWtldXAgVW5pdCAqLworICBJMkMwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gOCwgICAgICAgICAgICAgICAgLyoqPCBJMkMwIGludGVycnVwdCAqLworICBJMkMxX0lSUW4gICAgICAgICAgICAgICAgICAgID0gOSwgICAgICAgICAgICAgICAgLyoqPCBJMkMxIGludGVycnVwdCAqLworICBTUEkwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMTAsICAgICAgICAgICAgICAgLyoqPCBTUEkwIHNpbmdsZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciBhbGwgc291cmNlcyAqLworICBUU0kwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMTEsICAgICAgICAgICAgICAgLyoqPCBUU0kwIHNpbmdsZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciBhbGwgc291cmNlcyAqLworICBMUFVBUlQwX0lSUW4gICAgICAgICAgICAgICAgID0gMTIsICAgICAgICAgICAgICAgLyoqPCBMUFVBUlQwIHN0YXR1cyBhbmQgZXJyb3IgKi8KKyAgVFJORzBfSVJRbiAgICAgICAgICAgICAgICAgICA9IDEzLCAgICAgICAgICAgICAgIC8qKjwgVFJORzAgaW50ZXJydXB0ICovCisgIENNVF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAxNCwgICAgICAgICAgICAgICAvKio8IENNVCBpbnRlcnJ1cHQgKi8KKyAgQURDMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE1LCAgICAgICAgICAgICAgIC8qKjwgQURDMCBpbnRlcnJ1cHQgKi8KKyAgQ01QMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE2LCAgICAgICAgICAgICAgIC8qKjwgQ01QMCBpbnRlcnJ1cHQgKi8KKyAgVFBNMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE3LCAgICAgICAgICAgICAgIC8qKjwgVFBNMCBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMgKi8KKyAgVFBNMV9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE4LCAgICAgICAgICAgICAgIC8qKjwgVFBNMSBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMgKi8KKyAgVFBNMl9JUlFuICAgICAgICAgICAgICAgICAgICA9IDE5LCAgICAgICAgICAgICAgIC8qKjwgVFBNMiBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMgKi8KKyAgUlRDX0lSUW4gICAgICAgICAgICAgICAgICAgICA9IDIwLCAgICAgICAgICAgICAgIC8qKjwgUlRDIGFsYXJtICovCisgIFJUQ19TZWNvbmRzX0lSUW4gICAgICAgICAgICAgPSAyMSwgICAgICAgICAgICAgICAvKio8IFJUQyBzZWNvbmRzICovCisgIFBJVF9JUlFuICAgICAgICAgICAgICAgICAgICAgPSAyMiwgICAgICAgICAgICAgICAvKio8IFBJVCBpbnRlcnJ1cHQgKi8KKyAgTFRDMF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDIzLCAgICAgICAgICAgICAgIC8qKjwgTFRDMCBpbnRlcnJ1cHQgKi8KKyAgUmFkaW9fMF9JUlFuICAgICAgICAgICAgICAgICA9IDI0LCAgICAgICAgICAgICAgIC8qKjwgQlRMRSwgWklHQkVFLCBBTlQsIEdFTkZTSyBpbnRlcnJ1cHQgMCAqLworICBEQUMwX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMjUsICAgICAgICAgICAgICAgLyoqPCBEQUMwIGludGVycnVwdCAqLworICBSYWRpb18xX0lSUW4gICAgICAgICAgICAgICAgID0gMjYsICAgICAgICAgICAgICAgLyoqPCBCVExFLCBaSUdCRUUsIEFOVCwgR0VORlNLIGludGVycnVwdCAxICovCisgIE1DR19JUlFuICAgICAgICAgICAgICAgICAgICAgPSAyNywgICAgICAgICAgICAgICAvKio8IE1DRyBpbnRlcnJ1cHQgKi8KKyAgTFBUTVIwX0lSUW4gICAgICAgICAgICAgICAgICA9IDI4LCAgICAgICAgICAgICAgIC8qKjwgTFBUTVIwIGludGVycnVwdCAqLworICBTUEkxX0lSUW4gICAgICAgICAgICAgICAgICAgID0gMjksICAgICAgICAgICAgICAgLyoqPCBTUEkxIHNpbmdsZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciBhbGwgc291cmNlcyAqLworICBQT1JUQV9JUlFuICAgICAgICAgICAgICAgICAgID0gMzAsICAgICAgICAgICAgICAgLyoqPCBQT1JUQSBQaW4gZGV0ZWN0ICovCisgIFBPUlRCX1BPUlRDX0lSUW4gICAgICAgICAgICAgPSAzMSAgICAgICAgICAgICAgICAvKio8IFBPUlRCIGFuZCBQT1JUQyBQaW4gZGV0ZWN0ICovCit9IElSUW5fVHlwZTsKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBJbnRlcnJ1cHRfdmVjdG9yX251bWJlcnMgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDb3J0ZXggTTAgQ29yZSBDb25maWd1cmF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQ29ydGV4X0NvcmVfQ29uZmlndXJhdGlvbiBDb3J0ZXggTTAgQ29yZSBDb25maWd1cmF0aW9uCisgKiBAeworICovCisKKyNkZWZpbmUgX19DTTBQTFVTX1JFViAgICAgICAgICAgICAgICAgIDB4MDAwMCAgICAvKio8IENvcmUgcmV2aXNpb24gcjBwMCAqLworI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgICAgICAgMCAgICAgICAgIC8qKjwgRGVmaW5lcyBpZiBhbiBNUFUgaXMgcHJlc2VudCBvciBub3QgKi8KKyNkZWZpbmUgX19WVE9SX1BSRVNFTlQgICAgICAgICAgICAgICAgIDEgICAgICAgICAvKio8IERlZmluZXMgaWYgVlRPUiBpcyBwcmVzZW50IG9yIG5vdCAqLworI2RlZmluZSBfX05WSUNfUFJJT19CSVRTICAgICAgICAgICAgICAgMiAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHByaW9yaXR5IGJpdHMgaW1wbGVtZW50ZWQgaW4gdGhlIE5WSUMgKi8KKyNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAgICAgIDAgICAgICAgICAvKio8IFZlbmRvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBTeXNUaWNrQ29uZmlnIGlzIGRlZmluZWQgKi8KKworI2luY2x1ZGUgImNvcmVfY20wcGx1cy5oIiAgICAgICAgICAgICAgLyogQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciAqLworI2luY2x1ZGUgInN5c3RlbV9NS1c0MVo0LmgiICAgICAgICAgICAgLyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIENvcnRleF9Db3JlX0NvbmZpZ3VyYXRpb24gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNYXBwaW5nIEluZm9ybWF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTWFwcGluZ19JbmZvcm1hdGlvbiBNYXBwaW5nIEluZm9ybWF0aW9uCisgKiBAeworICovCisKKy8qKiBNYXBwaW5nIEluZm9ybWF0aW9uICovCisvKiEKKyAqIEBhZGR0b2dyb3VwIGVkbWFfcmVxdWVzdAorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFN0cnVjdHVyZSBmb3IgdGhlIERNQSBoYXJkd2FyZSByZXF1ZXN0CisgKgorICogRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciB0aGUgRE1BIGhhcmR3YXJlIHJlcXVlc3QgY29sbGVjdGlvbnMuIFRoZSB1c2VyIGNhbiBjb25maWd1cmUgdGhlCisgKiBoYXJkd2FyZSByZXF1ZXN0IGludG8gRE1BTVVYIHRvIHRyaWdnZXIgdGhlIERNQSB0cmFuc2ZlciBhY2NvcmRpbmdseS4gVGhlIGluZGV4CisgKiBvZiB0aGUgaGFyZHdhcmUgcmVxdWVzdCB2YXJpZXMgYWNjb3JkaW5nICB0byB0aGUgdG8gU29DLgorICovCit0eXBlZGVmIGVudW0gX2RtYV9yZXF1ZXN0X3NvdXJjZQoreworICAgIGtEbWFSZXF1ZXN0TXV4MERpc2FibGUgICAgICAgICAgPSAwfDB4MTAwVSwgICAgLyoqPCBETUFNVVggVHJpZ2dlckRpc2FibGVkLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMSAgICAgICAgPSAxfDB4MTAwVSwgICAgLyoqPCBSZXNlcnZlZDEgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBMUFVBUlQwUnggICAgICAgID0gMnwweDEwMFUsICAgIC8qKjwgTFBVQVJUMCBSZWNlaXZlLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MExQVUFSVDBUeCAgICAgICAgPSAzfDB4MTAwVSwgICAgLyoqPCBMUFVBUlQwIFRyYW5zbWl0LiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNCAgICAgICAgPSA0fDB4MTAwVSwgICAgLyoqPCBSZXNlcnZlZDQgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDUgICAgICAgID0gNXwweDEwMFUsICAgIC8qKjwgUmVzZXJ2ZWQ1ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ2ICAgICAgICA9IDZ8MHgxMDBVLCAgICAvKio8IFJlc2VydmVkNiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNyAgICAgICAgPSA3fDB4MTAwVSwgICAgLyoqPCBSZXNlcnZlZDcgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDggICAgICAgID0gOHwweDEwMFUsICAgIC8qKjwgUmVzZXJ2ZWQ4ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ5ICAgICAgICA9IDl8MHgxMDBVLCAgICAvKio8IFJlc2VydmVkOSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMTAgICAgICAgPSAxMHwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDEwICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQxMSAgICAgICA9IDExfDB4MTAwVSwgICAvKio8IFJlc2VydmVkMTEgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDEyICAgICAgID0gMTJ8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQxMiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMTMgICAgICAgPSAxM3wweDEwMFUsICAgLyoqPCBSZXNlcnZlZDEzICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQxNCAgICAgICA9IDE0fDB4MTAwVSwgICAvKio8IFJlc2VydmVkMTQgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDE1ICAgICAgID0gMTV8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQxNSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFNQSTBSeCAgICAgICAgICAgPSAxNnwweDEwMFUsICAgLyoqPCBTUEkwIFJlY2VpdmUuICovCisgICAga0RtYVJlcXVlc3RNdXgwU1BJMFR4ICAgICAgICAgICA9IDE3fDB4MTAwVSwgICAvKio8IFNQSTAgVHJhbnNtaXQuICovCisgICAga0RtYVJlcXVlc3RNdXgwU1BJMVJ4ICAgICAgICAgICA9IDE4fDB4MTAwVSwgICAvKio8IFNQSTEgUmVjZWl2ZS4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBTUEkxVHggICAgICAgICAgID0gMTl8MHgxMDBVLCAgIC8qKjwgU1BJMSBUcmFuc21pdC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBMVEMwSW5wdXRGSUZPICAgID0gMjB8MHgxMDBVLCAgIC8qKjwgTFRDMCBJbnB1dCBGSUZPLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MExUQzBPdXRwdXRGSUZPICAgPSAyMXwweDEwMFUsICAgLyoqPCBMVEMwIE91dHB1dCBGSUZPLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MEkyQzAgICAgICAgICAgICAgPSAyMnwweDEwMFUsICAgLyoqPCBJMkMwLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MEkyQzEgICAgICAgICAgICAgPSAyM3wweDEwMFUsICAgLyoqPCBJMkMxLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFRQTTBDaGFubmVsMCAgICAgPSAyNHwweDEwMFUsICAgLyoqPCBUUE0wIEMwVi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0wQ2hhbm5lbDEgICAgID0gMjV8MHgxMDBVLCAgIC8qKjwgVFBNMCBDMVYuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNMENoYW5uZWwyICAgICA9IDI2fDB4MTAwVSwgICAvKio8IFRQTTAgQzJWLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFRQTTBDaGFubmVsMyAgICAgPSAyN3wweDEwMFUsICAgLyoqPCBUUE0wIEMzVi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDI4ICAgICAgID0gMjh8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQyOCAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMjkgICAgICAgPSAyOXwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDI5ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQzMCAgICAgICA9IDMwfDB4MTAwVSwgICAvKio8IFJlc2VydmVkMzAgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDMxICAgICAgID0gMzF8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQzMSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFRQTTFDaGFubmVsMCAgICAgPSAzMnwweDEwMFUsICAgLyoqPCBUUE0xIEMwVi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0xQ2hhbm5lbDEgICAgID0gMzN8MHgxMDBVLCAgIC8qKjwgVFBNMSBDMVYuICovCisgICAga0RtYVJlcXVlc3RNdXgwVFBNMkNoYW5uZWwwICAgICA9IDM0fDB4MTAwVSwgICAvKio8IFRQTTIgQzBWLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFRQTTJDaGFubmVsMSAgICAgPSAzNXwweDEwMFUsICAgLyoqPCBUUE0yIEMxVi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDM2ICAgICAgID0gMzZ8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQzNiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkMzcgICAgICAgPSAzN3wweDEwMFUsICAgLyoqPCBSZXNlcnZlZDM3ICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQzOCAgICAgICA9IDM4fDB4MTAwVSwgICAvKio8IFJlc2VydmVkMzggKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDM5ICAgICAgID0gMzl8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQzOSAqLworICAgIGtEbWFSZXF1ZXN0TXV4MEFEQzAgICAgICAgICAgICAgPSA0MHwweDEwMFUsICAgLyoqPCBBREMwLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNDEgICAgICAgPSA0MXwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDQxICovCisgICAga0RtYVJlcXVlc3RNdXgwQ01QMCAgICAgICAgICAgICA9IDQyfDB4MTAwVSwgICAvKio8IENNUDAuICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ0MyAgICAgICA9IDQzfDB4MTAwVSwgICAvKio8IFJlc2VydmVkNDMgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDQ0ICAgICAgID0gNDR8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ0NCAqLworICAgIGtEbWFSZXF1ZXN0TXV4MERBQzAgICAgICAgICAgICAgPSA0NXwweDEwMFUsICAgLyoqPCBEQUMwLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNDYgICAgICAgPSA0NnwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDQ2ICovCisgICAga0RtYVJlcXVlc3RNdXgwQ01UICAgICAgICAgICAgICA9IDQ3fDB4MTAwVSwgICAvKio8IENNVC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDQ4ICAgICAgID0gNDh8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ0OCAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFBvcnRBICAgICAgICAgICAgPSA0OXwweDEwMFUsICAgLyoqPCBQVEEuICovCisgICAga0RtYVJlcXVlc3RNdXgwUG9ydEIgICAgICAgICAgICA9IDUwfDB4MTAwVSwgICAvKio8IFBUQi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBQb3J0QyAgICAgICAgICAgID0gNTF8MHgxMDBVLCAgIC8qKjwgUFRDLiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNTIgICAgICAgPSA1MnwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDUyICovCisgICAga0RtYVJlcXVlc3RNdXgwUmVzZXJ2ZWQ1MyAgICAgICA9IDUzfDB4MTAwVSwgICAvKio8IFJlc2VydmVkNTMgKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0wT3ZlcmZsb3cgICAgID0gNTR8MHgxMDBVLCAgIC8qKjwgVFBNMC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0xT3ZlcmZsb3cgICAgID0gNTV8MHgxMDBVLCAgIC8qKjwgVFBNMS4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUUE0yT3ZlcmZsb3cgICAgID0gNTZ8MHgxMDBVLCAgIC8qKjwgVFBNMi4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBUU0kwICAgICAgICAgICAgID0gNTd8MHgxMDBVLCAgIC8qKjwgVFNJMC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBSZXNlcnZlZDU4ICAgICAgID0gNTh8MHgxMDBVLCAgIC8qKjwgUmVzZXJ2ZWQ1OCAqLworICAgIGtEbWFSZXF1ZXN0TXV4MFJlc2VydmVkNTkgICAgICAgPSA1OXwweDEwMFUsICAgLyoqPCBSZXNlcnZlZDU5ICovCisgICAga0RtYVJlcXVlc3RNdXgwQWx3YXlzT242MCAgICAgICA9IDYwfDB4MTAwVSwgICAvKio8IERNQU1VWCBBbHdheXMgRW5hYmxlZCBzbG90LiAqLworICAgIGtEbWFSZXF1ZXN0TXV4MEFsd2F5c09uNjEgICAgICAgPSA2MXwweDEwMFUsICAgLyoqPCBETUFNVVggQWx3YXlzIEVuYWJsZWQgc2xvdC4gKi8KKyAgICBrRG1hUmVxdWVzdE11eDBBbHdheXNPbjYyICAgICAgID0gNjJ8MHgxMDBVLCAgIC8qKjwgRE1BTVVYIEFsd2F5cyBFbmFibGVkIHNsb3QuICovCisgICAga0RtYVJlcXVlc3RNdXgwQWx3YXlzT242MyAgICAgICA9IDYzfDB4MTAwVSwgICAvKio8IERNQU1VWCBBbHdheXMgRW5hYmxlZCBzbG90LiAqLworfSBkbWFfcmVxdWVzdF9zb3VyY2VfdDsKKworLyogQH0gKi8KKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1hcHBpbmdfSW5mb3JtYXRpb24gKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBQZXJpcGhlcmFsX2FjY2Vzc19sYXllciBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworCisvKgorKiogU3RhcnQgb2Ygc2VjdGlvbiB1c2luZyBhbm9ueW1vdXMgdW5pb25zCisqLworCisjaWYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCisgICNwcmFnbWEgcHVzaAorICAjcHJhZ21hIGFub25fdW5pb25zCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKKyAgI3ByYWdtYSBsYW5ndWFnZT1leHRlbmRlZAorI2Vsc2UKKyAgI2Vycm9yIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEFEQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEFEQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBBREMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEFEQyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgU0MxWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzIDEsIGFycmF5IG9mZnNldDogMHgwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBDRkcxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBDRkcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiwgb2Zmc2V0OiAweEMgKi8KKyAgX19JICB1aW50MzJfdCBSWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIERhdGEgUmVzdWx0IFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MTAsIGFycmF5IHN0ZXA6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IENWMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21wYXJlIFZhbHVlIFJlZ2lzdGVycywgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgQ1YyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbXBhcmUgVmFsdWUgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MUMgKi8KKyAgX19JTyB1aW50MzJfdCBTQzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyIDIsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQzMl90IFNDMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIgMywgb2Zmc2V0OiAweDI0ICovCisgIF9fSU8gdWludDMyX3QgT0ZTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBPZmZzZXQgQ29ycmVjdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgUEc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBQbHVzLVNpZGUgR2FpbiBSZWdpc3Rlciwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgTUc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBNaW51cy1TaWRlIEdhaW4gUmVnaXN0ZXIsIG9mZnNldDogMHgzMCAqLworICBfX0lPIHVpbnQzMl90IENMUEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHgzNCAqLworICBfX0lPIHVpbnQzMl90IENMUFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHgzOCAqLworICBfX0lPIHVpbnQzMl90IENMUDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHgzQyAqLworICBfX0lPIHVpbnQzMl90IENMUDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg0MCAqLworICBfX0lPIHVpbnQzMl90IENMUDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg0NCAqLworICBfX0lPIHVpbnQzMl90IENMUDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg0OCAqLworICBfX0lPIHVpbnQzMl90IENMUDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg0QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgX19JTyB1aW50MzJfdCBDTE1EOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDU0ICovCisgIF9fSU8gdWludDMyX3QgQ0xNUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg1OCAqLworICBfX0lPIHVpbnQzMl90IENMTTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NUMgKi8KKyAgX19JTyB1aW50MzJfdCBDTE0zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDYwICovCisgIF9fSU8gdWludDMyX3QgQ0xNMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIsIG9mZnNldDogMHg2NCAqLworICBfX0lPIHVpbnQzMl90IENMTTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NjggKi8KKyAgX19JTyB1aW50MzJfdCBDTE0wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDZDICovCit9IEFEQ19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBBREMgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBBRENfUmVnaXN0ZXJfTWFza3MgQURDIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBTQzEgLSBBREMgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVycyAxICovCisjZGVmaW5lIEFEQ19TQzFfQURDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZVKQorI2RlZmluZSBBRENfU0MxX0FEQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX1NDMV9BRENIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzFfQURDSF9TSElGVCkpICYgQURDX1NDMV9BRENIX01BU0spCisjZGVmaW5lIEFEQ19TQzFfRElGRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBBRENfU0MxX0RJRkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQURDX1NDMV9ESUZGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzFfRElGRl9TSElGVCkpICYgQURDX1NDMV9ESUZGX01BU0spCisjZGVmaW5lIEFEQ19TQzFfQUlFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBBRENfU0MxX0FJRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgQURDX1NDMV9BSUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzFfQUlFTl9TSElGVCkpICYgQURDX1NDMV9BSUVOX01BU0spCisjZGVmaW5lIEFEQ19TQzFfQ09DT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBBRENfU0MxX0NPQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQURDX1NDMV9DT0NPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzFfQ09DT19TSElGVCkpICYgQURDX1NDMV9DT0NPX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBBRENfU0MxICovCisjZGVmaW5lIEFEQ19TQzFfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgQ0ZHMSAtIEFEQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQURDX0NGRzFfQURJQ0xLX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgQURDX0NGRzFfQURJQ0xLX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DRkcxX0FESUNMSyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0ZHMV9BRElDTEtfU0hJRlQpKSAmIEFEQ19DRkcxX0FESUNMS19NQVNLKQorI2RlZmluZSBBRENfQ0ZHMV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBBRENfQ0ZHMV9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgQURDX0NGRzFfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DRkcxX01PREVfU0hJRlQpKSAmIEFEQ19DRkcxX01PREVfTUFTSykKKyNkZWZpbmUgQURDX0NGRzFfQURMU01QX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEFEQ19DRkcxX0FETFNNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBBRENfQ0ZHMV9BRExTTVAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzFfQURMU01QX1NISUZUKSkgJiBBRENfQ0ZHMV9BRExTTVBfTUFTSykKKyNkZWZpbmUgQURDX0NGRzFfQURJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg2MFUpCisjZGVmaW5lIEFEQ19DRkcxX0FESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBBRENfQ0ZHMV9BRElWKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzFfQURJVl9TSElGVCkpICYgQURDX0NGRzFfQURJVl9NQVNLKQorI2RlZmluZSBBRENfQ0ZHMV9BRExQQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQURDX0NGRzFfQURMUENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEFEQ19DRkcxX0FETFBDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0ZHMV9BRExQQ19TSElGVCkpICYgQURDX0NGRzFfQURMUENfTUFTSykKKworLyohIEBuYW1lIENGRzIgLSBBREMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFEQ19DRkcyX0FETFNUU19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIEFEQ19DRkcyX0FETFNUU19TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0ZHMl9BRExTVFMoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NGRzJfQURMU1RTX1NISUZUKSkgJiBBRENfQ0ZHMl9BRExTVFNfTUFTSykKKyNkZWZpbmUgQURDX0NGRzJfQURIU0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQURDX0NGRzJfQURIU0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEFEQ19DRkcyX0FESFNDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0ZHMl9BREhTQ19TSElGVCkpICYgQURDX0NGRzJfQURIU0NfTUFTSykKKyNkZWZpbmUgQURDX0NGRzJfQURBQ0tFTl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgQURDX0NGRzJfQURBQ0tFTl9TSElGVCAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIEFEQ19DRkcyX0FEQUNLRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0ZHMl9BREFDS0VOX1NISUZUKSkgJiBBRENfQ0ZHMl9BREFDS0VOX01BU0spCisjZGVmaW5lIEFEQ19DRkcyX01VWFNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBBRENfQ0ZHMl9NVVhTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQURDX0NGRzJfTVVYU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DRkcyX01VWFNFTF9TSElGVCkpICYgQURDX0NGRzJfTVVYU0VMX01BU0spCisKKy8qISBAbmFtZSBSIC0gQURDIERhdGEgUmVzdWx0IFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19SX0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEFEQ19SX0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfUl9EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1JfRF9TSElGVCkpICYgQURDX1JfRF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgQURDX1IgKi8KKyNkZWZpbmUgQURDX1JfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBDVjEgLSBDb21wYXJlIFZhbHVlIFJlZ2lzdGVycyAqLworI2RlZmluZSBBRENfQ1YxX0NWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBBRENfQ1YxX0NWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NWMV9DVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DVjFfQ1ZfU0hJRlQpKSAmIEFEQ19DVjFfQ1ZfTUFTSykKKworLyohIEBuYW1lIENWMiAtIENvbXBhcmUgVmFsdWUgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFEQ19DVjJfQ1ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEFEQ19DVjJfQ1ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ1YyX0NWKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NWMl9DVl9TSElGVCkpICYgQURDX0NWMl9DVl9NQVNLKQorCisvKiEgQG5hbWUgU0MyIC0gU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQURDX1NDMl9SRUZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgQURDX1NDMl9SRUZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19TQzJfUkVGU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MyX1JFRlNFTF9TSElGVCkpICYgQURDX1NDMl9SRUZTRUxfTUFTSykKKyNkZWZpbmUgQURDX1NDMl9ETUFFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQURDX1NDMl9ETUFFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIEFEQ19TQzJfRE1BRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MyX0RNQUVOX1NISUZUKSkgJiBBRENfU0MyX0RNQUVOX01BU0spCisjZGVmaW5lIEFEQ19TQzJfQUNSRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIEFEQ19TQzJfQUNSRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBBRENfU0MyX0FDUkVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDMl9BQ1JFTl9TSElGVCkpICYgQURDX1NDMl9BQ1JFTl9NQVNLKQorI2RlZmluZSBBRENfU0MyX0FDRkdUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgQURDX1NDMl9BQ0ZHVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEFEQ19TQzJfQUNGR1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MyX0FDRkdUX1NISUZUKSkgJiBBRENfU0MyX0FDRkdUX01BU0spCisjZGVmaW5lIEFEQ19TQzJfQUNGRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBBRENfU0MyX0FDRkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQURDX1NDMl9BQ0ZFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzJfQUNGRV9TSElGVCkpICYgQURDX1NDMl9BQ0ZFX01BU0spCisjZGVmaW5lIEFEQ19TQzJfQURUUkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBBRENfU0MyX0FEVFJHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgQURDX1NDMl9BRFRSRyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzJfQURUUkdfU0hJRlQpKSAmIEFEQ19TQzJfQURUUkdfTUFTSykKKyNkZWZpbmUgQURDX1NDMl9BREFDVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEFEQ19TQzJfQURBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBBRENfU0MyX0FEQUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDMl9BREFDVF9TSElGVCkpICYgQURDX1NDMl9BREFDVF9NQVNLKQorCisvKiEgQG5hbWUgU0MzIC0gU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQURDX1NDM19BVkdTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgQURDX1NDM19BVkdTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19TQzNfQVZHUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfU0MzX0FWR1NfU0hJRlQpKSAmIEFEQ19TQzNfQVZHU19NQVNLKQorI2RlZmluZSBBRENfU0MzX0FWR0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBBRENfU0MzX0FWR0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgQURDX1NDM19BVkdFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19TQzNfQVZHRV9TSElGVCkpICYgQURDX1NDM19BVkdFX01BU0spCisjZGVmaW5lIEFEQ19TQzNfQURDT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIEFEQ19TQzNfQURDT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBBRENfU0MzX0FEQ08oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDM19BRENPX1NISUZUKSkgJiBBRENfU0MzX0FEQ09fTUFTSykKKyNkZWZpbmUgQURDX1NDM19DQUxGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIEFEQ19TQzNfQ0FMRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBBRENfU0MzX0NBTEYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDM19DQUxGX1NISUZUKSkgJiBBRENfU0MzX0NBTEZfTUFTSykKKyNkZWZpbmUgQURDX1NDM19DQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEFEQ19TQzNfQ0FMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBBRENfU0MzX0NBTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1NDM19DQUxfU0hJRlQpKSAmIEFEQ19TQzNfQ0FMX01BU0spCisKKy8qISBAbmFtZSBPRlMgLSBBREMgT2Zmc2V0IENvcnJlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX09GU19PRlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgQURDX09GU19PRlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19PRlNfT0ZTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfT0ZTX09GU19TSElGVCkpICYgQURDX09GU19PRlNfTUFTSykKKworLyohIEBuYW1lIFBHIC0gQURDIFBsdXMtU2lkZSBHYWluIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19QR19QR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEFEQ19QR19QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfUEdfUEcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX1BHX1BHX1NISUZUKSkgJiBBRENfUEdfUEdfTUFTSykKKworLyohIEBuYW1lIE1HIC0gQURDIE1pbnVzLVNpZGUgR2FpbiBSZWdpc3RlciAqLworI2RlZmluZSBBRENfTUdfTUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBBRENfTUdfTUdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX01HX01HKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19NR19NR19TSElGVCkpICYgQURDX01HX01HX01BU0spCisKKy8qISBAbmFtZSBDTFBEIC0gQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTFBEX0NMUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBBRENfQ0xQRF9DTFBEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMUERfQ0xQRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTFBEX0NMUERfU0hJRlQpKSAmIEFEQ19DTFBEX0NMUERfTUFTSykKKworLyohIEBuYW1lIENMUFMgLSBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMUFNfQ0xQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEFEQ19DTFBTX0NMUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xQU19DTFBTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMUFNfQ0xQU19TSElGVCkpICYgQURDX0NMUFNfQ0xQU19NQVNLKQorCisvKiEgQG5hbWUgQ0xQNCAtIEFEQyBQbHVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xQNF9DTFA0X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNGRlUpCisjZGVmaW5lIEFEQ19DTFA0X0NMUDRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xQNF9DTFA0KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMUDRfQ0xQNF9TSElGVCkpICYgQURDX0NMUDRfQ0xQNF9NQVNLKQorCisvKiEgQG5hbWUgQ0xQMyAtIEFEQyBQbHVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xQM19DTFAzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlUpCisjZGVmaW5lIEFEQ19DTFAzX0NMUDNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xQM19DTFAzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMUDNfQ0xQM19TSElGVCkpICYgQURDX0NMUDNfQ0xQM19NQVNLKQorCisvKiEgQG5hbWUgQ0xQMiAtIEFEQyBQbHVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xQMl9DTFAyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQURDX0NMUDJfQ0xQMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTFAyX0NMUDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xQMl9DTFAyX1NISUZUKSkgJiBBRENfQ0xQMl9DTFAyX01BU0spCisKKy8qISBAbmFtZSBDTFAxIC0gQURDIFBsdXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTFAxX0NMUDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4N0ZVKQorI2RlZmluZSBBRENfQ0xQMV9DTFAxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMUDFfQ0xQMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTFAxX0NMUDFfU0hJRlQpKSAmIEFEQ19DTFAxX0NMUDFfTUFTSykKKworLyohIEBuYW1lIENMUDAgLSBBREMgUGx1cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMUDBfQ0xQMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEFEQ19DTFAwX0NMUDBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xQMF9DTFAwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMUDBfQ0xQMF9TSElGVCkpICYgQURDX0NMUDBfQ0xQMF9NQVNLKQorCisvKiEgQG5hbWUgQ0xNRCAtIEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMTURfQ0xNRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEFEQ19DTE1EX0NMTURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xNRF9DTE1EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMTURfQ0xNRF9TSElGVCkpICYgQURDX0NMTURfQ0xNRF9NQVNLKQorCisvKiEgQG5hbWUgQ0xNUyAtIEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMTVNfQ0xNU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEFEQ19DTE1TX0NMTVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBRENfQ0xNU19DTE1TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQURDX0NMTVNfQ0xNU19TSElGVCkpICYgQURDX0NMTVNfQ0xNU19NQVNLKQorCisvKiEgQG5hbWUgQ0xNNCAtIEFEQyBNaW51cy1TaWRlIEdlbmVyYWwgQ2FsaWJyYXRpb24gVmFsdWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURDX0NMTTRfQ0xNNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRkZVKQorI2RlZmluZSBBRENfQ0xNNF9DTE00X1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQURDX0NMTTRfQ0xNNCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFEQ19DTE00X0NMTTRfU0hJRlQpKSAmIEFEQ19DTE00X0NMTTRfTUFTSykKKworLyohIEBuYW1lIENMTTMgLSBBREMgTWludXMtU2lkZSBHZW5lcmFsIENhbGlicmF0aW9uIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEQ19DTE0zX0NMTTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZGVSkKKyNkZWZpbmUgQURDX0NMTTNfQ0xNM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTE0zX0NMTTMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xNM19DTE0zX1NISUZUKSkgJiBBRENfQ0xNM19DTE0zX01BU0spCisKKy8qISBAbmFtZSBDTE0yIC0gQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xNMl9DTE0yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQURDX0NMTTJfQ0xNMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTE0yX0NMTTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xNMl9DTE0yX1NISUZUKSkgJiBBRENfQ0xNMl9DTE0yX01BU0spCisKKy8qISBAbmFtZSBDTE0xIC0gQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xNMV9DTE0xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDdGVSkKKyNkZWZpbmUgQURDX0NMTTFfQ0xNMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTE0xX0NMTTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xNMV9DTE0xX1NISUZUKSkgJiBBRENfQ0xNMV9DTE0xX01BU0spCisKKy8qISBAbmFtZSBDTE0wIC0gQURDIE1pbnVzLVNpZGUgR2VuZXJhbCBDYWxpYnJhdGlvbiBWYWx1ZSBSZWdpc3RlciAqLworI2RlZmluZSBBRENfQ0xNMF9DTE0wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgQURDX0NMTTBfQ0xNMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFEQ19DTE0wX0NMTTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBRENfQ0xNMF9DTE0wX1NISUZUKSkgJiBBRENfQ0xNMF9DTE0wX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBBRENfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBBREMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBBREMwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBREMwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDNCMDAwdSkKKy8qKiBQZXJpcGhlcmFsIEFEQzAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIEFEQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfVHlwZSAqKUFEQzBfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBBREMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBBRENfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQURDMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBBREMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIEFEQ19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBBREMwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIEFEQyBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgQURDX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEFEQzBfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQURDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQU5UIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQU5UX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEFOVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogQU5UIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBJUlFfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSVJRIENPTlRST0wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgRVZFTlRfVE1SOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVWRU5UIFRJTUVSLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFQxX0NNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMSBDT01QQVJFLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IFQyX0NNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMiBDT01QQVJFLCBvZmZzZXQ6IDB4QyAqLworICBfX0kgIHVpbnQzMl90IFRJTUVTVEFNUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUSU1FU1RBTVAsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IFhDVlJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUUkFOU0NFSVZFUiBDT05UUk9MLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JICB1aW50MzJfdCBYQ1ZSX1NUUzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgU1RBVFVTLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBYQ1ZSX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgQ09ORklHVVJBVElPTiwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgQ0hBTk5FTF9OVU07ICAgICAgICAgICAgICAgICAgICAgICAvKio8IENIQU5ORUwgTlVNQkVSLCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JTyB1aW50MzJfdCBUWF9QT1dFUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNNSVQgUE9XRVIsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgQ09OVFJPTCwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl8wOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5FVFdPUksgQUREUkVTUyAwLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSXzE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTkVUV09SSyBBRERSRVNTIDEsIG9mZnNldDogMHgzMCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgMiwgb2Zmc2V0OiAweDM0ICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl8zOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5FVFdPUksgQUREUkVTUyAzLCBvZmZzZXQ6IDB4MzggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9XQVRFUk1BUks7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlggV0FURVJNQVJLLCBvZmZzZXQ6IDB4M0MgKi8KKyAgX19JTyB1aW50MzJfdCBEU01fQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRFNNIENPTlRST0wsIG9mZnNldDogMHg0MCAqLworICBfX0kgIHVpbnQzMl90IFBBUlRfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQVJUIElELCBvZmZzZXQ6IDB4NDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMTg0XTsKKyAgX19JTyB1aW50MTZfdCBQQUNLRVRfQlVGRkVSWzY0XTsgICAgICAgICAgICAgICAgIC8qKjwgUEFDS0VUIEJVRkZFUiwgYXJyYXkgb2Zmc2V0OiAweDEwMCwgYXJyYXkgc3RlcDogMHgyICovCit9IEFOVF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBBTlQgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBBTlRfUmVnaXN0ZXJfTWFza3MgQU5UIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBJUlFfQ1RSTCAtIElSUSBDT05UUk9MICovCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9NQVNLICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9TSElGVCAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfU0VRX0VORF9JUlEoeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1NFUV9FTkRfSVJRX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfU0VRX0VORF9JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RYX0lSUV9NQVNLICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RYX0lSUV9TSElGVCAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UWF9JUlEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfVFhfSVJRX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfVFhfSVJRX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9SWF9JUlFfTUFTSyAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9SWF9JUlFfU0hJRlQgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfSVJRKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1JYX0lSUV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1JYX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfTUFTSyAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfU0hJRlQgICAgICAgICAgICgzVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX05UV19BRFJfSVJRKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9OVFdfQURSX0lSUV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX05UV19BRFJfSVJRX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMV9JUlFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDFfSVJRX1NISUZUICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QxX0lSUSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9UMV9JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9UMV9JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QyX0lSUV9NQVNLICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMl9JUlFfU0hJRlQgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDJfSVJRKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1QyX0lSUV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1QyX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfTUFTSyAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX1NISUZUICAgICAgICAoNlUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUSh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfTUFTSyAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1dBS0VfSVJRX1NISUZUICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9XQUtFX0lSUSh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9XQUtFX0lSUV9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9NQVNLICAgICAgICgweDEwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX1NISUZUICAgICAgKDhVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UU01fSVJRX01BU0sgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RTTV9JUlFfU0hJRlQgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UU01fSVJRKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfVFNNX0lSUV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1RTTV9JUlFfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1NFUV9FTkRfSVJRX0VOX01BU0sgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9TSElGVCAgICAgICAgKDE2VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1NFUV9FTkRfSVJRX0VOKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1NFUV9FTkRfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UWF9JUlFfRU5fTUFTSyAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFhfSVJRX0VOX1NISUZUICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UWF9JUlFfRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfVFhfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfVFhfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9SWF9JUlFfRU5fTUFTSyAgICAgICAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfSVJRX0VOX1NISUZUICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9SWF9JUlFfRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfUlhfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfUlhfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9OVFdfQURSX0lSUV9FTl9NQVNLICAgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fU0hJRlQgICAgICAgICgxOVUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9OVFdfQURSX0lSUV9FTih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9OVFdfQURSX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDFfSVJRX0VOX01BU0sgICAgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMV9JUlFfRU5fU0hJRlQgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QxX0lSUV9FTih4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9UMV9JUlFfRU5fU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9UMV9JUlFfRU5fTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1QyX0lSUV9FTl9NQVNLICAgICAgICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVDJfSVJRX0VOX1NISUZUICAgICAgICAgICAgICgyMVUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9UMl9JUlFfRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfVDJfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfVDJfSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9FTl9NQVNLICAgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOX1NISUZUICAgICAoMjJVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfRU5fTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1dBS0VfSVJRX0VOX01BU0sgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfRU5fU0hJRlQgICAgICAgICAgICgyM1UpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9XQUtFX0lSUV9FTih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfV0FLRV9JUlFfRU5fU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9XQUtFX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTl9NQVNLICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTl9TSElGVCAgICgyNFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTl9TSElGVCkpICYgQU5UX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RTTV9JUlFfRU5fTUFTSyAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX1RTTV9JUlFfRU5fU0hJRlQgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfVFNNX0lSUV9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0lSUV9DVFJMX1RTTV9JUlFfRU5fU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9UU01fSVJRX0VOX01BU0spCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9BTlRfSVJRX0VOX01BU0sgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9BTlRfSVJRX0VOX1NISUZUICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX0FOVF9JUlFfRU4oeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9BTlRfSVJRX0VOX1NISUZUKSkgJiBBTlRfSVJRX0NUUkxfQU5UX0lSUV9FTl9NQVNLKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfQ1JDX0lHTk9SRV9NQVNLICAgICAgICAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBBTlRfSVJRX0NUUkxfQ1JDX0lHTk9SRV9TSElGVCAgICAgICAgICAgICgyN1UpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9DUkNfSUdOT1JFKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfSVJRX0NUUkxfQ1JDX0lHTk9SRV9TSElGVCkpICYgQU5UX0lSUV9DVFJMX0NSQ19JR05PUkVfTUFTSykKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX0NSQ19WQUxJRF9NQVNLICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIEFOVF9JUlFfQ1RSTF9DUkNfVkFMSURfU0hJRlQgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgQU5UX0lSUV9DVFJMX0NSQ19WQUxJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9JUlFfQ1RSTF9DUkNfVkFMSURfU0hJRlQpKSAmIEFOVF9JUlFfQ1RSTF9DUkNfVkFMSURfTUFTSykKKworLyohIEBuYW1lIEVWRU5UX1RNUiAtIEVWRU5UIFRJTUVSICovCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9TSElGVCkpICYgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfTUFTSykKKyNkZWZpbmUgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfTUFTSyAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfU0hJRlQgICAgICAgICAoMjRVKQorI2RlZmluZSBBTlRfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfU0hJRlQpKSAmIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX01BU0spCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9NQVNLICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9TSElGVCAgICAgICAgKDI1VSkKKyNkZWZpbmUgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9TSElGVCkpICYgQU5UX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX01BU0spCisKKy8qISBAbmFtZSBUMV9DTVAgLSBUMSBDT01QQVJFICovCisjZGVmaW5lIEFOVF9UMV9DTVBfVDFfQ01QX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgQU5UX1QxX0NNUF9UMV9DTVBfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9UMV9DTVBfVDFfQ01QKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfVDFfQ01QX1QxX0NNUF9TSElGVCkpICYgQU5UX1QxX0NNUF9UMV9DTVBfTUFTSykKKyNkZWZpbmUgQU5UX1QxX0NNUF9UMV9DTVBfRU5fTUFTSyAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgQU5UX1QxX0NNUF9UMV9DTVBfRU5fU0hJRlQgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBBTlRfVDFfQ01QX1QxX0NNUF9FTih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1QxX0NNUF9UMV9DTVBfRU5fU0hJRlQpKSAmIEFOVF9UMV9DTVBfVDFfQ01QX0VOX01BU0spCisKKy8qISBAbmFtZSBUMl9DTVAgLSBUMiBDT01QQVJFICovCisjZGVmaW5lIEFOVF9UMl9DTVBfVDJfQ01QX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgQU5UX1QyX0NNUF9UMl9DTVBfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9UMl9DTVBfVDJfQ01QKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfVDJfQ01QX1QyX0NNUF9TSElGVCkpICYgQU5UX1QyX0NNUF9UMl9DTVBfTUFTSykKKyNkZWZpbmUgQU5UX1QyX0NNUF9UMl9DTVBfRU5fTUFTSyAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgQU5UX1QyX0NNUF9UMl9DTVBfRU5fU0hJRlQgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBBTlRfVDJfQ01QX1QyX0NNUF9FTih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1QyX0NNUF9UMl9DTVBfRU5fU0hJRlQpKSAmIEFOVF9UMl9DTVBfVDJfQ01QX0VOX01BU0spCisKKy8qISBAbmFtZSBUSU1FU1RBTVAgLSBUSU1FU1RBTVAgKi8KKyNkZWZpbmUgQU5UX1RJTUVTVEFNUF9USU1FU1RBTVBfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBBTlRfVElNRVNUQU1QX1RJTUVTVEFNUF9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX1RJTUVTVEFNUF9USU1FU1RBTVAoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9USU1FU1RBTVBfVElNRVNUQU1QX1NISUZUKSkgJiBBTlRfVElNRVNUQU1QX1RJTUVTVEFNUF9NQVNLKQorCisvKiEgQG5hbWUgWENWUl9DVFJMIC0gVFJBTlNDRUlWRVIgQ09OVFJPTCAqLworI2RlZmluZSBBTlRfWENWUl9DVFJMX1NFUUNNRF9NQVNLICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1NFUUNNRF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9TRVFDTUQoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NUUkxfU0VRQ01EX1NISUZUKSkgJiBBTlRfWENWUl9DVFJMX1NFUUNNRF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1RYX1BLVF9MRU5HVEhfTUFTSyAgICAgICAgICgweDNGMDBVKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1RYX1BLVF9MRU5HVEhfU0hJRlQgICAgICAgICg4VSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9UWF9QS1RfTEVOR1RIKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NUUkxfVFhfUEtUX0xFTkdUSF9TSElGVCkpICYgQU5UX1hDVlJfQ1RSTF9UWF9QS1RfTEVOR1RIX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfUlhfUEtUX0xFTkdUSF9NQVNLICAgICAgICAgKDB4M0YwMDAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9SWF9QS1RfTEVOR1RIX1NISUZUICAgICAgICAoMTZVKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1JYX1BLVF9MRU5HVEgoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ1RSTF9SWF9QS1RfTEVOR1RIX1NISUZUKSkgJiBBTlRfWENWUl9DVFJMX1JYX1BLVF9MRU5HVEhfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9DTURERUNfQ1NfTUFTSyAgICAgICAgICAgICAoMHg3MDAwMDAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ1RSTF9DTURERUNfQ1NfU0hJRlQgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX0NNRERFQ19DUyh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ1RSTF9DTURERUNfQ1NfU0hJRlQpKSAmIEFOVF9YQ1ZSX0NUUkxfQ01EREVDX0NTX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfWENWUl9CVVNZX01BU0sgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBBTlRfWENWUl9DVFJMX1hDVlJfQlVTWV9TSElGVCAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NUUkxfWENWUl9CVVNZKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9DVFJMX1hDVlJfQlVTWV9TSElGVCkpICYgQU5UX1hDVlJfQ1RSTF9YQ1ZSX0JVU1lfTUFTSykKKworLyohIEBuYW1lIFhDVlJfU1RTIC0gVFJBTlNDRUlWRVIgU1RBVFVTICovCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMV9QRU5EX01BU0sgICAgICAgKDB4MVUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMV9QRU5EX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1RYX1NUQVJUX1QxX1BFTkRfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMV9QRU5EX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMl9QRU5EX01BU0sgICAgICAgKDB4MlUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMl9QRU5EX1NISUZUICAgICAgKDFVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1RYX1NUQVJUX1QyX1BFTkRfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19UWF9TVEFSVF9UMl9QRU5EX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNVVBfTUFTSyAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNVVBfU0hJRlQgICAgICAgICAgKDJVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTVVQKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1RYX0lOX1dBUk1VUF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1RYX0lOX1dBUk1VUF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fUFJPR1JFU1NfTUFTSyAgICAgICAgICgweDhVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fUFJPR1JFU1NfU0hJRlQgICAgICAgICgzVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTU19TSElGVCkpICYgQU5UX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNRE5fTUFTSyAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfVFhfSU5fV0FSTUROX1NISUZUICAgICAgICAgICg0VSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1RYX0lOX1dBUk1ETih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNRE5fU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19UWF9JTl9XQVJNRE5fTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUQVJUX1QxX1BFTkRfTUFTSyAgICAgICAoMHgyMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EX1NISUZUICAgICAgKDVVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1JYX1NUQVJUX1QxX1BFTkRfU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMl9QRU5EX01BU0sgICAgICAgKDB4NDBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORF9TSElGVCAgICAgICg2VSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19SWF9TVEFSVF9UMl9QRU5EX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMV9QRU5EX01BU0sgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9TSElGVCAgICAgICAoN1UpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVE9QX1QxX1BFTkQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMV9QRU5EX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMV9QRU5EX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVE9QX1QyX1BFTkRfTUFTSyAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORF9TSElGVCAgICAgICAoOFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9TVE9QX1QyX1BFTkQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNVVBfTUFTSyAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX0lOX1dBUk1VUF9TSElGVCAgICAgICAgICAoOVUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNVVAoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTVVQX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlhfSU5fV0FSTVVQX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfTUFTSyAgICAgICAgICAgKDB4NDAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX0lOX1NFQVJDSF9TSElGVCAgICAgICAgICAoMTBVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fU0VBUkNIKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX1JYX0lOX1NFQVJDSF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JYX0lOX1NFQVJDSF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1NfTUFTSyAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTU19TSElGVCAgICAgICAgKDExVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX0lOX1BST0dSRVNTKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTU19TSElGVCkpICYgQU5UX1hDVlJfU1RTX1JYX0lOX1BST0dSRVNTX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNRE5fTUFTSyAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNRE5fU0hJRlQgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JYX0lOX1dBUk1ETih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNRE5fU0hJRlQpKSAmIEFOVF9YQ1ZSX1NUU19SWF9JTl9XQVJNRE5fTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX0NSQ19WQUxJRF9NQVNLICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX0NSQ19WQUxJRF9TSElGVCAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBBTlRfWENWUl9TVFNfQ1JDX1ZBTElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfU1RTX0NSQ19WQUxJRF9TSElGVCkpICYgQU5UX1hDVlJfU1RTX0NSQ19WQUxJRF9NQVNLKQorI2RlZmluZSBBTlRfWENWUl9TVFNfUlNTSV9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX1NUU19SU1NJX1NISUZUICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgQU5UX1hDVlJfU1RTX1JTU0koeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX1NUU19SU1NJX1NISUZUKSkgJiBBTlRfWENWUl9TVFNfUlNTSV9NQVNLKQorCisvKiEgQG5hbWUgWENWUl9DRkcgLSBUUkFOU0NFSVZFUiBDT05GSUdVUkFUSU9OICovCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19UWF9XSElURU5fRElTX01BU0sgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19UWF9XSElURU5fRElTX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfVFhfV0hJVEVOX0RJUyh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ0ZHX1RYX1dISVRFTl9ESVNfU0hJRlQpKSAmIEFOVF9YQ1ZSX0NGR19UWF9XSElURU5fRElTX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfTUFTSyAgICAgICAgKDB4MlUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfU0hJRlQgICAgICAgKDFVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUlhfREVXSElURU5fRElTKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ0ZHX1JYX0RFV0hJVEVOX0RJU19TSElGVCkpICYgQU5UX1hDVlJfQ0ZHX1JYX0RFV0hJVEVOX0RJU19NQVNLKQorI2RlZmluZSBBTlRfWENWUl9DRkdfU1dfQ1JDX0VOX01BU0sgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfU1dfQ1JDX0VOX1NISUZUICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1NXX0NSQ19FTih4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9YQ1ZSX0NGR19TV19DUkNfRU5fU0hJRlQpKSAmIEFOVF9YQ1ZSX0NGR19TV19DUkNfRU5fTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaX01BU0sgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19QUkVBTUJMRV9TWl9TSElGVCAgICAgICAgICAgKDRVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUFJFQU1CTEVfU1ooeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaX1NISUZUKSkgJiBBTlRfWENWUl9DRkdfUFJFQU1CTEVfU1pfTUFTSykKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1RYX1dBUk1VUF9NQVNLICAgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1RYX1dBUk1VUF9TSElGVCAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19UWF9XQVJNVVAoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfWENWUl9DRkdfVFhfV0FSTVVQX1NISUZUKSkgJiBBTlRfWENWUl9DRkdfVFhfV0FSTVVQX01BU0spCisjZGVmaW5lIEFOVF9YQ1ZSX0NGR19SWF9XQVJNVVBfTUFTSyAgICAgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgQU5UX1hDVlJfQ0ZHX1JYX1dBUk1VUF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBBTlRfWENWUl9DRkdfUlhfV0FSTVVQKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1hDVlJfQ0ZHX1JYX1dBUk1VUF9TSElGVCkpICYgQU5UX1hDVlJfQ0ZHX1JYX1dBUk1VUF9NQVNLKQorCisvKiEgQG5hbWUgQ0hBTk5FTF9OVU0gLSBDSEFOTkVMIE5VTUJFUiAqLworI2RlZmluZSBBTlRfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU1fTUFTSyAgICAgICAgICgweDdGVSkKKyNkZWZpbmUgQU5UX0NIQU5ORUxfTlVNX0NIQU5ORUxfTlVNX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9DSEFOTkVMX05VTV9DSEFOTkVMX05VTSh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU1fU0hJRlQpKSAmIEFOVF9DSEFOTkVMX05VTV9DSEFOTkVMX05VTV9NQVNLKQorCisvKiEgQG5hbWUgVFhfUE9XRVIgLSBUUkFOU01JVCBQT1dFUiAqLworI2RlZmluZSBBTlRfVFhfUE9XRVJfVFhfUE9XRVJfTUFTSyAgICAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgQU5UX1RYX1BPV0VSX1RYX1BPV0VSX1NISUZUICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9UWF9QT1dFUl9UWF9QT1dFUih4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfVFhfUE9XRVJfVFhfUE9XRVJfU0hJRlQpKSAmIEFOVF9UWF9QT1dFUl9UWF9QT1dFUl9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl9DVFJMIC0gTkVUV09SSyBBRERSRVNTIENPTlRST0wgKi8KKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX0VOX01BU0sgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX0VOX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9FTih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfRU5fU0hJRlQpKSAmIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9FTl9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIX01BU0sgICAgICAgICgweEYwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9TSElGVCAgICAgICAoNFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9NQ0goeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIX01BU0spCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjBfU1pfTUFTSyAgICAgICAgKDB4MzAwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMF9TWl9TSElGVCAgICAgICAoOFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjBfU1ooeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaX01BU0spCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfTUFTSyAgICAgICAgKDB4QzAwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWl9TSElGVCAgICAgICAoMTBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIxX1NaKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWl9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWl9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX01BU0sgICAgICAgICgweDMwMDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX1NISUZUICAgICAgICgxMlUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjJfU1ooeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX01BU0spCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfTUFTSyAgICAgICAgKDB4QzAwMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfU0hJRlQgICAgICAgKDE0VSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSM19TWih4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfU0hJRlQpKSAmIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfTUFTSykKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjBfTUFTSyAgICAgICAoMHg3MDAwMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwX1NISUZUICAgICAgKDE2VSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjAoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMF9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9NQVNLICAgICAgICgweDcwMDAwMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIxX1NISUZUICAgICAgKDIwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjEoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIxX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9NQVNLKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMl9NQVNLICAgICAgICgweDcwMDAwMDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMl9TSElGVCAgICAgICgyNFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIyKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMl9TSElGVCkpICYgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfTUFTSykKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjNfTUFTSyAgICAgICAoMHg3MDAwMDAwMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzX1NISUZUICAgICAgKDI4VSkKKyNkZWZpbmUgQU5UX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjMoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzX1NISUZUKSkgJiBBTlRfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSM19NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl8wIC0gTkVUV09SSyBBRERSRVNTIDAgKi8KKyNkZWZpbmUgQU5UX05UV19BRFJfMF9OVFdfQURSXzBfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEFOVF9OVFdfQURSXzBfTlRXX0FEUl8wX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl8wX05UV19BRFJfMCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfMF9OVFdfQURSXzBfU0hJRlQpKSAmIEFOVF9OVFdfQURSXzBfTlRXX0FEUl8wX01BU0spCisKKy8qISBAbmFtZSBOVFdfQURSXzEgLSBORVRXT1JLIEFERFJFU1MgMSAqLworI2RlZmluZSBBTlRfTlRXX0FEUl8xX05UV19BRFJfMV9NQVNLICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfMV9OVFdfQURSXzFfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEFOVF9OVFdfQURSXzFfTlRXX0FEUl8xKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBBTlRfTlRXX0FEUl8xX05UV19BRFJfMV9TSElGVCkpICYgQU5UX05UV19BRFJfMV9OVFdfQURSXzFfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfMiAtIE5FVFdPUksgQUREUkVTUyAyICovCisjZGVmaW5lIEFOVF9OVFdfQURSXzJfTlRXX0FEUl8yX01BU0sgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBBTlRfTlRXX0FEUl8yX05UV19BRFJfMl9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQU5UX05UV19BRFJfMl9OVFdfQURSXzIoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEFOVF9OVFdfQURSXzJfTlRXX0FEUl8yX1NISUZUKSkgJiBBTlRfTlRXX0FEUl8yX05UV19BRFJfMl9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl8zIC0gTkVUV09SSyBBRERSRVNTIDMgKi8KKyNkZWZpbmUgQU5UX05UV19BRFJfM19OVFdfQURSXzNfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEFOVF9OVFdfQURSXzNfTlRXX0FEUl8zX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfTlRXX0FEUl8zX05UV19BRFJfMyh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX05UV19BRFJfM19OVFdfQURSXzNfU0hJRlQpKSAmIEFOVF9OVFdfQURSXzNfTlRXX0FEUl8zX01BU0spCisKKy8qISBAbmFtZSBSWF9XQVRFUk1BUksgLSBSWCBXQVRFUk1BUksgKi8KKyNkZWZpbmUgQU5UX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUktfTUFTSyAgICAgICAoMHg3RlUpCisjZGVmaW5lIEFOVF9SWF9XQVRFUk1BUktfUlhfV0FURVJNQVJLX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBBTlRfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSSyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUktfU0hJRlQpKSAmIEFOVF9SWF9XQVRFUk1BUktfUlhfV0FURVJNQVJLX01BU0spCisjZGVmaW5lIEFOVF9SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX01BU0sgICAgICAgKDB4N0YwMDAwVSkKKyNkZWZpbmUgQU5UX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVJfU0hJRlQgICAgICAoMTZVKQorI2RlZmluZSBBTlRfUlhfV0FURVJNQVJLX0JZVEVfQ09VTlRFUih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVJfU0hJRlQpKSAmIEFOVF9SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX01BU0spCisKKy8qISBAbmFtZSBEU01fQ1RSTCAtIERTTSBDT05UUk9MICovCisjZGVmaW5lIEFOVF9EU01fQ1RSTF9BTlRfU0xFRVBfRU5fTUFTSyAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEFOVF9EU01fQ1RSTF9BTlRfU0xFRVBfRU5fU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfRFNNX0NUUkxfQU5UX1NMRUVQX0VOKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX0RTTV9DVFJMX0FOVF9TTEVFUF9FTl9TSElGVCkpICYgQU5UX0RTTV9DVFJMX0FOVF9TTEVFUF9FTl9NQVNLKQorCisvKiEgQG5hbWUgUEFSVF9JRCAtIFBBUlQgSUQgKi8KKyNkZWZpbmUgQU5UX1BBUlRfSURfUEFSVF9JRF9NQVNLICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEFOVF9QQVJUX0lEX1BBUlRfSURfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBBTlRfUEFSVF9JRF9QQVJUX0lEKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgQU5UX1BBUlRfSURfUEFSVF9JRF9TSElGVCkpICYgQU5UX1BBUlRfSURfUEFSVF9JRF9NQVNLKQorCisvKiEgQG5hbWUgUEFDS0VUX0JVRkZFUiAtIFBBQ0tFVCBCVUZGRVIgKi8KKyNkZWZpbmUgQU5UX1BBQ0tFVF9CVUZGRVJfUEFDS0VUX0JVRkZFUl9NQVNLICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgQU5UX1BBQ0tFVF9CVUZGRVJfUEFDS0VUX0JVRkZFUl9TSElGVCAgICAoMFUpCisjZGVmaW5lIEFOVF9QQUNLRVRfQlVGRkVSX1BBQ0tFVF9CVUZGRVIoeCkgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBBTlRfUEFDS0VUX0JVRkZFUl9QQUNLRVRfQlVGRkVSX1NISUZUKSkgJiBBTlRfUEFDS0VUX0JVRkZFUl9QQUNLRVRfQlVGRkVSX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBBTlRfUEFDS0VUX0JVRkZFUiAqLworI2RlZmluZSBBTlRfUEFDS0VUX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgICg2NFUpCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBBTlRfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBBTlQgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBBTlQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFOVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUUwMDB1KQorLyoqIFBlcmlwaGVyYWwgQU5UIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBBTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQU5UX1R5cGUgKilBTlRfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBBTlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBBTlRfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQU5UX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEFOVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgQU5UX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEFOVCB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQU5UX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQlRMRV9SRiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEJUTEVfUkZfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgQlRMRV9SRiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogQlRMRV9SRiAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzE1MzZdOworICBfX0kgIHVpbnQxNl90IEJMRV9QQVJUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCTFVFVE9PVEggTE9XIEVORVJHWSBQQVJUIElELCBvZmZzZXQ6IDB4NjAwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzJdOworICBfX0kgIHVpbnQxNl90IERTTV9TVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCTEUgRFNNIFNUQVRVUywgb2Zmc2V0OiAweDYwNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMlsyXTsKKyAgX19JTyB1aW50MTZfdCBNSVNDX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQkxVRVRPT1RIIExPVyBFTkVSR1kgTUlTQ0VMTEFORU9VUyBDT05UUk9MLCBvZmZzZXQ6IDB4NjA4ICovCit9IEJUTEVfUkZfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gQlRMRV9SRiBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEJUTEVfUkZfUmVnaXN0ZXJfTWFza3MgQlRMRV9SRiBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQkxFX1BBUlRfSUQgLSBCTFVFVE9PVEggTE9XIEVORVJHWSBQQVJUIElEICovCisjZGVmaW5lIEJUTEVfUkZfQkxFX1BBUlRfSURfQkxFX1BBUlRfSURfTUFTSyAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEJUTEVfUkZfQkxFX1BBUlRfSURfQkxFX1BBUlRfSURfU0hJRlQgICAgKDBVKQorI2RlZmluZSBCVExFX1JGX0JMRV9QQVJUX0lEX0JMRV9QQVJUX0lEKHgpICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgQlRMRV9SRl9CTEVfUEFSVF9JRF9CTEVfUEFSVF9JRF9TSElGVCkpICYgQlRMRV9SRl9CTEVfUEFSVF9JRF9CTEVfUEFSVF9JRF9NQVNLKQorCisvKiEgQG5hbWUgRFNNX1NUQVRVUyAtIEJMRSBEU00gU1RBVFVTICovCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19PUkZfU1lTQ0xLX1JFUV9NQVNLICAgKDB4MVUpCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19PUkZfU1lTQ0xLX1JFUV9TSElGVCAgKDBVKQorI2RlZmluZSBCVExFX1JGX0RTTV9TVEFUVVNfT1JGX1NZU0NMS19SRVEoeCkgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgQlRMRV9SRl9EU01fU1RBVFVTX09SRl9TWVNDTEtfUkVRX1NISUZUKSkgJiBCVExFX1JGX0RTTV9TVEFUVVNfT1JGX1NZU0NMS19SRVFfTUFTSykKKyNkZWZpbmUgQlRMRV9SRl9EU01fU1RBVFVTX1JJRl9MTF9BQ1RJVkVfTUFTSyAgICAoMHgyVSkKKyNkZWZpbmUgQlRMRV9SRl9EU01fU1RBVFVTX1JJRl9MTF9BQ1RJVkVfU0hJRlQgICAoMVUpCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19SSUZfTExfQUNUSVZFKHgpICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBCVExFX1JGX0RTTV9TVEFUVVNfUklGX0xMX0FDVElWRV9TSElGVCkpICYgQlRMRV9SRl9EU01fU1RBVFVTX1JJRl9MTF9BQ1RJVkVfTUFTSykKKyNkZWZpbmUgQlRMRV9SRl9EU01fU1RBVFVTX1hDVlJfQlVTWV9NQVNLICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQlRMRV9SRl9EU01fU1RBVFVTX1hDVlJfQlVTWV9TSElGVCAgICAgICAoMlUpCisjZGVmaW5lIEJUTEVfUkZfRFNNX1NUQVRVU19YQ1ZSX0JVU1koeCkgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBCVExFX1JGX0RTTV9TVEFUVVNfWENWUl9CVVNZX1NISUZUKSkgJiBCVExFX1JGX0RTTV9TVEFUVVNfWENWUl9CVVNZX01BU0spCisKKy8qISBAbmFtZSBNSVNDX0NUUkwgLSBCTFVFVE9PVEggTE9XIEVORVJHWSBNSVNDRUxMQU5FT1VTIENPTlRST0wgKi8KKyNkZWZpbmUgQlRMRV9SRl9NSVNDX0NUUkxfVFNNX0lOVFJfRU5fTUFTSyAgICAgICAoMHgyVSkKKyNkZWZpbmUgQlRMRV9SRl9NSVNDX0NUUkxfVFNNX0lOVFJfRU5fU0hJRlQgICAgICAoMVUpCisjZGVmaW5lIEJUTEVfUkZfTUlTQ19DVFJMX1RTTV9JTlRSX0VOKHgpICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBCVExFX1JGX01JU0NfQ1RSTF9UU01fSU5UUl9FTl9TSElGVCkpICYgQlRMRV9SRl9NSVNDX0NUUkxfVFNNX0lOVFJfRU5fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEJUTEVfUkZfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBCVExFX1JGIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgQlRMRV9SRiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQlRMRV9SRl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QjAwMHUpCisvKiogUGVyaXBoZXJhbCBCVExFX1JGIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBCVExFX1JGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQlRMRV9SRl9UeXBlICopQlRMRV9SRl9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEJUTEVfUkYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBCVExFX1JGX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgIHsgQlRMRV9SRl9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBCVExFX1JGIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBCVExFX1JGX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgIHsgQlRMRV9SRiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgQlRMRV9SRl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENNUCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIENNUF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBDTVAgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIENNUCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBDUjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNUCBDb250cm9sIFJlZ2lzdGVyIDAsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBDUjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNUCBDb250cm9sIFJlZ2lzdGVyIDEsIG9mZnNldDogMHgxICovCisgIF9fSU8gdWludDhfdCBGUFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNUCBGaWx0ZXIgUGVyaW9kIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MiAqLworICBfX0lPIHVpbnQ4X3QgU0NSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVAgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MyAqLworICBfX0lPIHVpbnQ4X3QgREFDQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQUMgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50OF90IE1VWENSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVVYIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHg1ICovCit9IENNUF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDTVAgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBDTVBfUmVnaXN0ZXJfTWFza3MgQ01QIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDUjAgLSBDTVAgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIENNUF9DUjBfSFlTVENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIENNUF9DUjBfSFlTVENUUl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVBfQ1IwX0hZU1RDVFIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9DUjBfSFlTVENUUl9TSElGVCkpICYgQ01QX0NSMF9IWVNUQ1RSX01BU0spCisjZGVmaW5lIENNUF9DUjBfRklMVEVSX0NOVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4NzBVKQorI2RlZmluZSBDTVBfQ1IwX0ZJTFRFUl9DTlRfU0hJRlQgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQ01QX0NSMF9GSUxURVJfQ05UKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IwX0ZJTFRFUl9DTlRfU0hJRlQpKSAmIENNUF9DUjBfRklMVEVSX0NOVF9NQVNLKQorCisvKiEgQG5hbWUgQ1IxIC0gQ01QIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBDTVBfQ1IxX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBDTVBfQ1IxX0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01QX0NSMV9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX0VOX1NISUZUKSkgJiBDTVBfQ1IxX0VOX01BU0spCisjZGVmaW5lIENNUF9DUjFfT1BFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIENNUF9DUjFfT1BFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBDTVBfQ1IxX09QRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9DUjFfT1BFX1NISUZUKSkgJiBDTVBfQ1IxX09QRV9NQVNLKQorI2RlZmluZSBDTVBfQ1IxX0NPU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBDTVBfQ1IxX0NPU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgQ01QX0NSMV9DT1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX0NPU19TSElGVCkpICYgQ01QX0NSMV9DT1NfTUFTSykKKyNkZWZpbmUgQ01QX0NSMV9JTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgQ01QX0NSMV9JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIENNUF9DUjFfSU5WKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0NSMV9JTlZfU0hJRlQpKSAmIENNUF9DUjFfSU5WX01BU0spCisjZGVmaW5lIENNUF9DUjFfUE1PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBDTVBfQ1IxX1BNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgQ01QX0NSMV9QTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX1BNT0RFX1NISUZUKSkgJiBDTVBfQ1IxX1BNT0RFX01BU0spCisjZGVmaW5lIENNUF9DUjFfVFJJR01fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBDTVBfQ1IxX1RSSUdNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQ01QX0NSMV9UUklHTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX1RSSUdNX1NISUZUKSkgJiBDTVBfQ1IxX1RSSUdNX01BU0spCisjZGVmaW5lIENNUF9DUjFfV0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBDTVBfQ1IxX1dFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgQ01QX0NSMV9XRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX1dFX1NISUZUKSkgJiBDTVBfQ1IxX1dFX01BU0spCisjZGVmaW5lIENNUF9DUjFfU0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBDTVBfQ1IxX1NFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQ01QX0NSMV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfQ1IxX1NFX1NISUZUKSkgJiBDTVBfQ1IxX1NFX01BU0spCisKKy8qISBAbmFtZSBGUFIgLSBDTVAgRmlsdGVyIFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSBDTVBfRlBSX0ZJTFRfUEVSX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgQ01QX0ZQUl9GSUxUX1BFUl9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIENNUF9GUFJfRklMVF9QRVIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0ZQUl9GSUxUX1BFUl9TSElGVCkpICYgQ01QX0ZQUl9GSUxUX1BFUl9NQVNLKQorCisvKiEgQG5hbWUgU0NSIC0gQ01QIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDTVBfU0NSX0NPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBDTVBfU0NSX0NPVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01QX1NDUl9DT1VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfU0NSX0NPVVRfU0hJRlQpKSAmIENNUF9TQ1JfQ09VVF9NQVNLKQorI2RlZmluZSBDTVBfU0NSX0NGRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBDTVBfU0NSX0NGRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgQ01QX1NDUl9DRkYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfU0NSX0NGRl9TSElGVCkpICYgQ01QX1NDUl9DRkZfTUFTSykKKyNkZWZpbmUgQ01QX1NDUl9DRlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgQ01QX1NDUl9DRlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIENNUF9TQ1JfQ0ZSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX1NDUl9DRlJfU0hJRlQpKSAmIENNUF9TQ1JfQ0ZSX01BU0spCisjZGVmaW5lIENNUF9TQ1JfSUVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIENNUF9TQ1JfSUVGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBDTVBfU0NSX0lFRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9TQ1JfSUVGX1NISUZUKSkgJiBDTVBfU0NSX0lFRl9NQVNLKQorI2RlZmluZSBDTVBfU0NSX0lFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgQ01QX1NDUl9JRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIENNUF9TQ1JfSUVSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX1NDUl9JRVJfU0hJRlQpKSAmIENNUF9TQ1JfSUVSX01BU0spCisjZGVmaW5lIENNUF9TQ1JfRE1BRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBDTVBfU0NSX0RNQUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgQ01QX1NDUl9ETUFFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfU0NSX0RNQUVOX1NISUZUKSkgJiBDTVBfU0NSX0RNQUVOX01BU0spCisKKy8qISBAbmFtZSBEQUNDUiAtIERBQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENNUF9EQUNDUl9WT1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBDTVBfREFDQ1JfVk9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01QX0RBQ0NSX1ZPU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfREFDQ1JfVk9TRUxfU0hJRlQpKSAmIENNUF9EQUNDUl9WT1NFTF9NQVNLKQorI2RlZmluZSBDTVBfREFDQ1JfVlJTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgQ01QX0RBQ0NSX1ZSU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIENNUF9EQUNDUl9WUlNFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX0RBQ0NSX1ZSU0VMX1NISUZUKSkgJiBDTVBfREFDQ1JfVlJTRUxfTUFTSykKKyNkZWZpbmUgQ01QX0RBQ0NSX0RBQ0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIENNUF9EQUNDUl9EQUNFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBDTVBfREFDQ1JfREFDRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9EQUNDUl9EQUNFTl9TSElGVCkpICYgQ01QX0RBQ0NSX0RBQ0VOX01BU0spCisKKy8qISBAbmFtZSBNVVhDUiAtIE1VWCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENNUF9NVVhDUl9NU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4N1UpCisjZGVmaW5lIENNUF9NVVhDUl9NU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVBfTVVYQ1JfTVNFTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNUF9NVVhDUl9NU0VMX1NISUZUKSkgJiBDTVBfTVVYQ1JfTVNFTF9NQVNLKQorI2RlZmluZSBDTVBfTVVYQ1JfUFNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDM4VSkKKyNkZWZpbmUgQ01QX01VWENSX1BTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIENNUF9NVVhDUl9QU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01QX01VWENSX1BTRUxfU0hJRlQpKSAmIENNUF9NVVhDUl9QU0VMX01BU0spCisjZGVmaW5lIENNUF9NVVhDUl9QU1RNX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBDTVBfTVVYQ1JfUFNUTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQ01QX01VWENSX1BTVE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVBfTVVYQ1JfUFNUTV9TSElGVCkpICYgQ01QX01VWENSX1BTVE1fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIENNUF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIENNUCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIENNUDAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENNUDBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNzMwMDB1KQorLyoqIFBlcmlwaGVyYWwgQ01QMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgQ01QMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENNUF9UeXBlICopQ01QMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIENNUF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDTVAwX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIENNUCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgQ01QX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENNUDAgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgQ01QIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBDTVBfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ01QMF9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBDTVBfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBDTVQgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBDTVRfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgQ01UIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBDTVQgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQ4X3QgQ0dIMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgQ2FycmllciBHZW5lcmF0b3IgSGlnaCBEYXRhIFJlZ2lzdGVyIDEsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBDR0wxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNVCBDYXJyaWVyIEdlbmVyYXRvciBMb3cgRGF0YSBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MSAqLworICBfX0lPIHVpbnQ4X3QgQ0dIMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgQ2FycmllciBHZW5lcmF0b3IgSGlnaCBEYXRhIFJlZ2lzdGVyIDIsIG9mZnNldDogMHgyICovCisgIF9fSU8gdWludDhfdCBDR0wyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNVCBDYXJyaWVyIEdlbmVyYXRvciBMb3cgRGF0YSBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MyAqLworICBfX0lPIHVpbnQ4X3QgT0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBNU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNVCBNb2R1bGF0b3IgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NSAqLworICBfX0lPIHVpbnQ4X3QgQ01EMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgTWFyayBIaWdoLCBvZmZzZXQ6IDB4NiAqLworICBfX0lPIHVpbnQ4X3QgQ01EMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgTWFyayBMb3csIG9mZnNldDogMHg3ICovCisgIF9fSU8gdWludDhfdCBDTUQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNVCBNb2R1bGF0b3IgRGF0YSBSZWdpc3RlciBTcGFjZSBIaWdoLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQ4X3QgQ01ENDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgU3BhY2UgTG93LCBvZmZzZXQ6IDB4OSAqLworICBfX0lPIHVpbnQ4X3QgUFBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDTVQgUHJpbWFyeSBQcmVzY2FsZXIgUmVnaXN0ZXIsIG9mZnNldDogMHhBICovCisgIF9fSU8gdWludDhfdCBETUE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENNVCBEaXJlY3QgTWVtb3J5IEFjY2VzcyBSZWdpc3Rlciwgb2Zmc2V0OiAweEIgKi8KK30gQ01UX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENNVCBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIENNVF9SZWdpc3Rlcl9NYXNrcyBDTVQgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENHSDEgLSBDTVQgQ2FycmllciBHZW5lcmF0b3IgSGlnaCBEYXRhIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQ01UX0NHSDFfUEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIENNVF9DR0gxX1BIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVRfQ0dIMV9QSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9DR0gxX1BIX1NISUZUKSkgJiBDTVRfQ0dIMV9QSF9NQVNLKQorCisvKiEgQG5hbWUgQ0dMMSAtIENNVCBDYXJyaWVyIEdlbmVyYXRvciBMb3cgRGF0YSBSZWdpc3RlciAxICovCisjZGVmaW5lIENNVF9DR0wxX1BMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ0dMMV9QTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NHTDFfUEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ0dMMV9QTF9TSElGVCkpICYgQ01UX0NHTDFfUExfTUFTSykKKworLyohIEBuYW1lIENHSDIgLSBDTVQgQ2FycmllciBHZW5lcmF0b3IgSGlnaCBEYXRhIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQ01UX0NHSDJfU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIENNVF9DR0gyX1NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVRfQ0dIMl9TSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9DR0gyX1NIX1NISUZUKSkgJiBDTVRfQ0dIMl9TSF9NQVNLKQorCisvKiEgQG5hbWUgQ0dMMiAtIENNVCBDYXJyaWVyIEdlbmVyYXRvciBMb3cgRGF0YSBSZWdpc3RlciAyICovCisjZGVmaW5lIENNVF9DR0wyX1NMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ0dMMl9TTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NHTDJfU0woeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ0dMMl9TTF9TSElGVCkpICYgQ01UX0NHTDJfU0xfTUFTSykKKworLyohIEBuYW1lIE9DIC0gQ01UIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENNVF9PQ19JUk9QRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBDTVRfT0NfSVJPUEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgQ01UX09DX0lST1BFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfT0NfSVJPUEVOX1NISUZUKSkgJiBDTVRfT0NfSVJPUEVOX01BU0spCisjZGVmaW5lIENNVF9PQ19DTVRQT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBDTVRfT0NfQ01UUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgQ01UX09DX0NNVFBPTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfT0NfQ01UUE9MX1NISUZUKSkgJiBDTVRfT0NfQ01UUE9MX01BU0spCisjZGVmaW5lIENNVF9PQ19JUk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBDTVRfT0NfSVJPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgQ01UX09DX0lST0woeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfT0NfSVJPTF9TSElGVCkpICYgQ01UX09DX0lST0xfTUFTSykKKworLyohIEBuYW1lIE1TQyAtIENNVCBNb2R1bGF0b3IgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENNVF9NU0NfTUNHRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIENNVF9NU0NfTUNHRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVRfTVNDX01DR0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9NU0NfTUNHRU5fU0hJRlQpKSAmIENNVF9NU0NfTUNHRU5fTUFTSykKKyNkZWZpbmUgQ01UX01TQ19FT0NJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgQ01UX01TQ19FT0NJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIENNVF9NU0NfRU9DSUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX01TQ19FT0NJRV9TSElGVCkpICYgQ01UX01TQ19FT0NJRV9NQVNLKQorI2RlZmluZSBDTVRfTVNDX0ZTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBDTVRfTVNDX0ZTS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgQ01UX01TQ19GU0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfTVNDX0ZTS19TSElGVCkpICYgQ01UX01TQ19GU0tfTUFTSykKKyNkZWZpbmUgQ01UX01TQ19CQVNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgQ01UX01TQ19CQVNFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIENNVF9NU0NfQkFTRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX01TQ19CQVNFX1NISUZUKSkgJiBDTVRfTVNDX0JBU0VfTUFTSykKKyNkZWZpbmUgQ01UX01TQ19FWFNQQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIENNVF9NU0NfRVhTUENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBDTVRfTVNDX0VYU1BDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9NU0NfRVhTUENfU0hJRlQpKSAmIENNVF9NU0NfRVhTUENfTUFTSykKKyNkZWZpbmUgQ01UX01TQ19DTVRESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg2MFUpCisjZGVmaW5lIENNVF9NU0NfQ01URElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBDTVRfTVNDX0NNVERJVih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9NU0NfQ01URElWX1NISUZUKSkgJiBDTVRfTVNDX0NNVERJVl9NQVNLKQorI2RlZmluZSBDTVRfTVNDX0VPQ0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgQ01UX01TQ19FT0NGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIENNVF9NU0NfRU9DRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgQ01UX01TQ19FT0NGX1NISUZUKSkgJiBDTVRfTVNDX0VPQ0ZfTUFTSykKKworLyohIEBuYW1lIENNRDEgLSBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgTWFyayBIaWdoICovCisjZGVmaW5lIENNVF9DTUQxX01CX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ01EMV9NQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NNRDFfTUIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ01EMV9NQl9TSElGVCkpICYgQ01UX0NNRDFfTUJfTUFTSykKKworLyohIEBuYW1lIENNRDIgLSBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgTWFyayBMb3cgKi8KKyNkZWZpbmUgQ01UX0NNRDJfTUJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIENNVF9DTUQyX01CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBDTVRfQ01EMl9NQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IENNVF9DTUQyX01CX1NISUZUKSkgJiBDTVRfQ01EMl9NQl9NQVNLKQorCisvKiEgQG5hbWUgQ01EMyAtIENNVCBNb2R1bGF0b3IgRGF0YSBSZWdpc3RlciBTcGFjZSBIaWdoICovCisjZGVmaW5lIENNVF9DTUQzX1NCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ01EM19TQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NNRDNfU0IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ01EM19TQl9TSElGVCkpICYgQ01UX0NNRDNfU0JfTUFTSykKKworLyohIEBuYW1lIENNRDQgLSBDTVQgTW9kdWxhdG9yIERhdGEgUmVnaXN0ZXIgU3BhY2UgTG93ICovCisjZGVmaW5lIENNVF9DTUQ0X1NCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBDTVRfQ01ENF9TQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0NNRDRfU0IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfQ01ENF9TQl9TSElGVCkpICYgQ01UX0NNRDRfU0JfTUFTSykKKworLyohIEBuYW1lIFBQUyAtIENNVCBQcmltYXJ5IFByZXNjYWxlciBSZWdpc3RlciAqLworI2RlZmluZSBDTVRfUFBTX1BQU0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBDTVRfUFBTX1BQU0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX1BQU19QUFNESVYoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfUFBTX1BQU0RJVl9TSElGVCkpICYgQ01UX1BQU19QUFNESVZfTUFTSykKKworLyohIEBuYW1lIERNQSAtIENNVCBEaXJlY3QgTWVtb3J5IEFjY2VzcyBSZWdpc3RlciAqLworI2RlZmluZSBDTVRfRE1BX0RNQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBDTVRfRE1BX0RNQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgQ01UX0RNQV9ETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBDTVRfRE1BX0RNQV9TSElGVCkpICYgQ01UX0RNQV9ETUFfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIENNVF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIENNVCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIENNVCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ01UX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA2MjAwMHUpCisvKiogUGVyaXBoZXJhbCBDTVQgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIENNVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDTVRfVHlwZSAqKUNNVF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIENNVF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDTVRfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgQ01UIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBDTVRfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ01UIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIENNVCBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgQ01UX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENNVF9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBDTVRfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBEQUMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBEQUNfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgREFDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBEQUMgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDAsIGFycmF5IHN0ZXA6IDB4MiAqLworICAgIF9fSU8gdWludDhfdCBEQVRMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERBQyBEYXRhIExvdyBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDAsIGFycmF5IHN0ZXA6IDB4MiAqLworICAgIF9fSU8gdWludDhfdCBEQVRIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERBQyBEYXRhIEhpZ2ggUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgxLCBhcnJheSBzdGVwOiAweDIgKi8KKyAgfSBEQVRbMl07CisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzI4XTsKKyAgX19JTyB1aW50OF90IFNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgREFDIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDhfdCBDMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERBQyBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MjEgKi8KKyAgX19JTyB1aW50OF90IEMxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgREFDIENvbnRyb2wgUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDIyICovCisgIF9fSU8gdWludDhfdCBDMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERBQyBDb250cm9sIFJlZ2lzdGVyIDIsIG9mZnNldDogMHgyMyAqLworfSBEQUNfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gREFDIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgREFDX1JlZ2lzdGVyX01hc2tzIERBQyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgREFUTCAtIERBQyBEYXRhIExvdyBSZWdpc3RlciAqLworI2RlZmluZSBEQUNfREFUTF9EQVRBMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgREFDX0RBVExfREFUQTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERBQ19EQVRMX0RBVEEwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX0RBVExfREFUQTBfU0hJRlQpKSAmIERBQ19EQVRMX0RBVEEwX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBEQUNfREFUTCAqLworI2RlZmluZSBEQUNfREFUTF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIERBVEggLSBEQUMgRGF0YSBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lIERBQ19EQVRIX0RBVEExX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIERBQ19EQVRIX0RBVEExX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBEQUNfREFUSF9EQVRBMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19EQVRIX0RBVEExX1NISUZUKSkgJiBEQUNfREFUSF9EQVRBMV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgREFDX0RBVEggKi8KKyNkZWZpbmUgREFDX0RBVEhfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBTUiAtIERBQyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgREFDX1NSX0RBQ0JGUlBCRl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgREFDX1NSX0RBQ0JGUlBCRl9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERBQ19TUl9EQUNCRlJQQkYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX1NSX0RBQ0JGUlBCRl9TSElGVCkpICYgREFDX1NSX0RBQ0JGUlBCRl9NQVNLKQorI2RlZmluZSBEQUNfU1JfREFDQkZSUFRGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBEQUNfU1JfREFDQkZSUFRGX1NISUZUICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgREFDX1NSX0RBQ0JGUlBURih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfU1JfREFDQkZSUFRGX1NISUZUKSkgJiBEQUNfU1JfREFDQkZSUFRGX01BU0spCisjZGVmaW5lIERBQ19TUl9EQUNCRldNRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERBQ19TUl9EQUNCRldNRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBEQUNfU1JfREFDQkZXTUYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19TUl9EQUNCRldNRl9TSElGVCkpICYgREFDX1NSX0RBQ0JGV01GX01BU0spCisKKy8qISBAbmFtZSBDMCAtIERBQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIERBQ19DMF9EQUNCQklFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERBQ19DMF9EQUNCQklFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBEQUNfQzBfREFDQkJJRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNCQklFTl9TSElGVCkpICYgREFDX0MwX0RBQ0JCSUVOX01BU0spCisjZGVmaW5lIERBQ19DMF9EQUNCVElFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIERBQ19DMF9EQUNCVElFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBEQUNfQzBfREFDQlRJRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNCVElFTl9TSElGVCkpICYgREFDX0MwX0RBQ0JUSUVOX01BU0spCisjZGVmaW5lIERBQ19DMF9EQUNCV0lFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERBQ19DMF9EQUNCV0lFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBEQUNfQzBfREFDQldJRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNCV0lFTl9TSElGVCkpICYgREFDX0MwX0RBQ0JXSUVOX01BU0spCisjZGVmaW5lIERBQ19DMF9MUEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERBQ19DMF9MUEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBEQUNfQzBfTFBFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9MUEVOX1NISUZUKSkgJiBEQUNfQzBfTFBFTl9NQVNLKQorI2RlZmluZSBEQUNfQzBfREFDU1dUUkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgREFDX0MwX0RBQ1NXVFJHX1NISUZUICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIERBQ19DMF9EQUNTV1RSRyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX0MwX0RBQ1NXVFJHX1NISUZUKSkgJiBEQUNfQzBfREFDU1dUUkdfTUFTSykKKyNkZWZpbmUgREFDX0MwX0RBQ1RSR1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIERBQ19DMF9EQUNUUkdTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBEQUNfQzBfREFDVFJHU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNUUkdTRUxfU0hJRlQpKSAmIERBQ19DMF9EQUNUUkdTRUxfTUFTSykKKyNkZWZpbmUgREFDX0MwX0RBQ1JGU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERBQ19DMF9EQUNSRlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBEQUNfQzBfREFDUkZTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNSRlNfU0hJRlQpKSAmIERBQ19DMF9EQUNSRlNfTUFTSykKKyNkZWZpbmUgREFDX0MwX0RBQ0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERBQ19DMF9EQUNFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBEQUNfQzBfREFDRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMF9EQUNFTl9TSElGVCkpICYgREFDX0MwX0RBQ0VOX01BU0spCisKKy8qISBAbmFtZSBDMSAtIERBQyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgREFDX0MxX0RBQ0JGRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgREFDX0MxX0RBQ0JGRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERBQ19DMV9EQUNCRkVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX0MxX0RBQ0JGRU5fU0hJRlQpKSAmIERBQ19DMV9EQUNCRkVOX01BU0spCisjZGVmaW5lIERBQ19DMV9EQUNCRk1EX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERBQ19DMV9EQUNCRk1EX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBEQUNfQzFfREFDQkZNRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMV9EQUNCRk1EX1NISUZUKSkgJiBEQUNfQzFfREFDQkZNRF9NQVNLKQorI2RlZmluZSBEQUNfQzFfREFDQkZXTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDE4VSkKKyNkZWZpbmUgREFDX0MxX0RBQ0JGV01fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIERBQ19DMV9EQUNCRldNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX0MxX0RBQ0JGV01fU0hJRlQpKSAmIERBQ19DMV9EQUNCRldNX01BU0spCisjZGVmaW5lIERBQ19DMV9ETUFFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBEQUNfQzFfRE1BRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgREFDX0MxX0RNQUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBEQUNfQzFfRE1BRU5fU0hJRlQpKSAmIERBQ19DMV9ETUFFTl9NQVNLKQorCisvKiEgQG5hbWUgQzIgLSBEQUMgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIERBQ19DMl9EQUNCRlVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERBQ19DMl9EQUNCRlVQX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBEQUNfQzJfREFDQkZVUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERBQ19DMl9EQUNCRlVQX1NISUZUKSkgJiBEQUNfQzJfREFDQkZVUF9NQVNLKQorI2RlZmluZSBEQUNfQzJfREFDQkZSUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgREFDX0MyX0RBQ0JGUlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIERBQ19DMl9EQUNCRlJQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgREFDX0MyX0RBQ0JGUlBfU0hJRlQpKSAmIERBQ19DMl9EQUNCRlJQX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBEQUNfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBEQUMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBEQUMwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBEQUMwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDNGMDAwdSkKKy8qKiBQZXJpcGhlcmFsIERBQzAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIERBQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQUNfVHlwZSAqKURBQzBfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBEQUNfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgREFDMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBEQUMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIERBQ19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBEQUMwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIERBQyBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgREFDX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IERBQzBfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgREFDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRENEQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIERDRENfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgRENEQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogRENEQyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgUkVHMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDREMgUkVHSVNURVIgMCwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBSRUcxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENEQyBSRUdJU1RFUiAxLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFJFRzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ0RDIFJFR0lTVEVSIDIsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgUkVHMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDREMgUkVHSVNURVIgMywgb2Zmc2V0OiAweEMgKi8KKyAgX19JTyB1aW50MzJfdCBSRUc0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENEQyBSRUdJU1RFUiA0LCBvZmZzZXQ6IDB4MTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIF9fSU8gdWludDMyX3QgUkVHNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDREMgUkVHSVNURVIgNiwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgUkVHNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERDREMgUkVHSVNURVIgNywgb2Zmc2V0OiAweDFDICovCit9IERDRENfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRENEQyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIERDRENfUmVnaXN0ZXJfTWFza3MgRENEQyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUkVHMCAtIERDREMgUkVHSVNURVIgMCAqLworI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19ESVNBQkxFX0FVVE9fQ0xLX1NXSVRDSF9NQVNLICgweDJVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19ESVNBQkxFX0FVVE9fQ0xLX1NXSVRDSF9TSElGVCAoMVUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0RJU0FCTEVfQVVUT19DTEtfU1dJVENIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX0RDRENfRElTQUJMRV9BVVRPX0NMS19TV0lUQ0hfU0hJRlQpKSAmIERDRENfUkVHMF9EQ0RDX0RJU0FCTEVfQVVUT19DTEtfU1dJVENIX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1NFTF9DTEtfTUFTSyAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1NFTF9DTEtfU0hJRlQgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19TRUxfQ0xLKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX0RDRENfU0VMX0NMS19TSElGVCkpICYgRENEQ19SRUcwX0RDRENfU0VMX0NMS19NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19QV0RfT1NDX0lOVF9NQVNLICAgICAgICAgICgweDhVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19QV0RfT1NDX0lOVF9TSElGVCAgICAgICAgICgzVSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfUFdEX09TQ19JTlQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX1BXRF9PU0NfSU5UX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19QV0RfT1NDX0lOVF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MUF9ERl9DTVBfRU5BQkxFX01BU0sgICAgICgweDIwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xQX0RGX0NNUF9FTkFCTEVfU0hJRlQgICAgKDlVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MUF9ERl9DTVBfRU5BQkxFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX0RDRENfTFBfREZfQ01QX0VOQUJMRV9TSElGVCkpICYgRENEQ19SRUcwX0RDRENfTFBfREZfQ01QX0VOQUJMRV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19WQkFUX0RJVl9DVFJMX01BU0sgICAgICAgICgweEMwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1ZCQVRfRElWX0NUUkxfU0hJRlQgICAgICAgKDEwVSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfVkJBVF9ESVZfQ1RSTCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX1ZCQVRfRElWX0NUUkxfU0hJRlQpKSAmIERDRENfUkVHMF9EQ0RDX1ZCQVRfRElWX0NUUkxfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTFBfU1RBVEVfSFlTX0xfTUFTSyAgICAgICAoMHg2MDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19MX1NISUZUICAgICAgKDE3VSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTFBfU1RBVEVfSFlTX0woeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19MX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfTF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfSF9NQVNLICAgICAgICgweDE4MDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19IX1NISUZUICAgICAgKDE5VSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTFBfU1RBVEVfSFlTX0goeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX0xQX1NUQVRFX0hZU19IX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19MUF9TVEFURV9IWVNfSF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfSFlTVF9MUF9DT01QX0FESl9NQVNLICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9IWVNUX0xQX0NPTVBfQURKX1NISUZUICAgICAgICAgKDIxVSkKKyNkZWZpbmUgRENEQ19SRUcwX0hZU1RfTFBfQ09NUF9BREooeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9IWVNUX0xQX0NPTVBfQURKX1NISUZUKSkgJiBEQ0RDX1JFRzBfSFlTVF9MUF9DT01QX0FESl9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfSFlTVF9MUF9DTVBfRElTQUJMRV9NQVNLICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9IWVNUX0xQX0NNUF9ESVNBQkxFX1NISUZUICAgICAgKDIyVSkKKyNkZWZpbmUgRENEQ19SRUcwX0hZU1RfTFBfQ01QX0RJU0FCTEUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9IWVNUX0xQX0NNUF9ESVNBQkxFX1NISUZUKSkgJiBEQ0RDX1JFRzBfSFlTVF9MUF9DTVBfRElTQUJMRV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfT0ZGU0VUX1JTTlNfTFBfQURKX01BU0sgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9BREpfU0hJRlQgICAgICAgKDIzVSkKKyNkZWZpbmUgRENEQ19SRUcwX09GRlNFVF9SU05TX0xQX0FESih4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9BREpfU0hJRlQpKSAmIERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9BREpfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX09GRlNFVF9SU05TX0xQX0RJU0FCTEVfTUFTSyAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcwX09GRlNFVF9SU05TX0xQX0RJU0FCTEVfU0hJRlQgICAoMjRVKQorI2RlZmluZSBEQ0RDX1JFRzBfT0ZGU0VUX1JTTlNfTFBfRElTQUJMRSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX09GRlNFVF9SU05TX0xQX0RJU0FCTEVfU0hJRlQpKSAmIERDRENfUkVHMF9PRkZTRVRfUlNOU19MUF9ESVNBQkxFX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xFU1NfSV9NQVNLICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX0xFU1NfSV9TSElGVCAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfTEVTU19JKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX0xFU1NfSV9TSElGVCkpICYgRENEQ19SRUcwX0RDRENfTEVTU19JX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9QV0RfQ01QX09GRlNFVF9NQVNLICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9QV0RfQ01QX09GRlNFVF9TSElGVCAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgRENEQ19SRUcwX1BXRF9DTVBfT0ZGU0VUKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9QV0RfQ01QX09GRlNFVF9TSElGVCkpICYgRENEQ19SRUcwX1BXRF9DTVBfT0ZGU0VUX01BU0spCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1hUQUxPS19ESVNBQkxFX01BU0sgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9EQ0RDX1hUQUxPS19ESVNBQkxFX1NISUZUICAgICAgKDI3VSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfWFRBTE9LX0RJU0FCTEUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9EQ0RDX1hUQUxPS19ESVNBQkxFX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19YVEFMT0tfRElTQUJMRV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfUFNXSVRDSF9TVEFUVVNfTUFTSyAgICAgICAgICAgICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcwX1BTV0lUQ0hfU1RBVFVTX1NISUZUICAgICAgICAgICAoMjhVKQorI2RlZmluZSBEQ0RDX1JFRzBfUFNXSVRDSF9TVEFUVVMoeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX1BTV0lUQ0hfU1RBVFVTX1NISUZUKSkgJiBEQ0RDX1JFRzBfUFNXSVRDSF9TVEFUVVNfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcwX1ZMUFNfQ09ORklHX0RDRENfSFBfTUFTSyAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMF9WTFBTX0NPTkZJR19EQ0RDX0hQX1NISUZUICAgICAgKDI5VSkKKyNkZWZpbmUgRENEQ19SRUcwX1ZMUFNfQ09ORklHX0RDRENfSFAoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMF9WTFBTX0NPTkZJR19EQ0RDX0hQX1NISUZUKSkgJiBEQ0RDX1JFRzBfVkxQU19DT05GSUdfRENEQ19IUF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfVkxQUl9WTFBXX0NPTkZJR19EQ0RDX0hQX01BU0sgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcwX1ZMUFJfVkxQV19DT05GSUdfRENEQ19IUF9TSElGVCAoMzBVKQorI2RlZmluZSBEQ0RDX1JFRzBfVkxQUl9WTFBXX0NPTkZJR19EQ0RDX0hQKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX1ZMUFJfVkxQV19DT05GSUdfRENEQ19IUF9TSElGVCkpICYgRENEQ19SRUcwX1ZMUFJfVkxQV19DT05GSUdfRENEQ19IUF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19TVFNfRENfT0tfTUFTSyAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcwX0RDRENfU1RTX0RDX09LX1NISUZUICAgICAgICAgICAoMzFVKQorI2RlZmluZSBEQ0RDX1JFRzBfRENEQ19TVFNfRENfT0soeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcwX0RDRENfU1RTX0RDX09LX1NISUZUKSkgJiBEQ0RDX1JFRzBfRENEQ19TVFNfRENfT0tfTUFTSykKKworLyohIEBuYW1lIFJFRzEgLSBEQ0RDIFJFR0lTVEVSIDEgKi8KKyNkZWZpbmUgRENEQ19SRUcxX1BPU0xJTUlUX0JVQ0tfSU5fTUFTSyAgICAgICAgICAoMHg3RlUpCisjZGVmaW5lIERDRENfUkVHMV9QT1NMSU1JVF9CVUNLX0lOX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBEQ0RDX1JFRzFfUE9TTElNSVRfQlVDS19JTih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcxX1BPU0xJTUlUX0JVQ0tfSU5fU0hJRlQpKSAmIERDRENfUkVHMV9QT1NMSU1JVF9CVUNLX0lOX01BU0spCisjZGVmaW5lIERDRENfUkVHMV9QT1NMSU1JVF9CT09TVF9JTl9NQVNLICAgICAgICAgKDB4M0Y4MFUpCisjZGVmaW5lIERDRENfUkVHMV9QT1NMSU1JVF9CT09TVF9JTl9TSElGVCAgICAgICAgKDdVKQorI2RlZmluZSBEQ0RDX1JFRzFfUE9TTElNSVRfQk9PU1RfSU4oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcxX1BPU0xJTUlUX0JPT1NUX0lOX1NISUZUKSkgJiBEQ0RDX1JFRzFfUE9TTElNSVRfQk9PU1RfSU5fTUFTSykKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfQ01fSFNUX1RIUkVTSF9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0NNX0hTVF9USFJFU0hfU0hJRlQgKDIxVSkKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfQ01fSFNUX1RIUkVTSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0NNX0hTVF9USFJFU0hfU0hJRlQpKSAmIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0NNX0hTVF9USFJFU0hfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfREZfSFNUX1RIUkVTSF9NQVNLICgweDQwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0RGX0hTVF9USFJFU0hfU0hJRlQgKDIyVSkKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfREZfSFNUX1RIUkVTSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0RGX0hTVF9USFJFU0hfU0hJRlQpKSAmIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0RGX0hTVF9USFJFU0hfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfRU5fQ01fSFlTVF9NQVNLICAoMHg4MDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9DTV9IWVNUX1NISUZUICgyM1UpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0NNX0hZU1QoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9DTV9IWVNUX1NISUZUKSkgJiBEQ0RDX1JFRzFfRENEQ19MT09QQ1RSTF9FTl9DTV9IWVNUX01BU0spCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0RGX0hZU1RfTUFTSyAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0RGX0hZU1RfU0hJRlQgKDI0VSkKKyNkZWZpbmUgRENEQ19SRUcxX0RDRENfTE9PUENUUkxfRU5fREZfSFlTVCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0RGX0hZU1RfU0hJRlQpKSAmIERDRENfUkVHMV9EQ0RDX0xPT1BDVFJMX0VOX0RGX0hZU1RfTUFTSykKKworLyohIEBuYW1lIFJFRzIgLSBEQ0RDIFJFR0lTVEVSIDIgKi8KKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfTE9PUENUUkxfSFlTVF9TSUdOX01BU0sgICAoMHgyMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfTE9PUENUUkxfSFlTVF9TSUdOX1NISUZUICAoMTNVKQorI2RlZmluZSBEQ0RDX1JFRzJfRENEQ19MT09QQ1RSTF9IWVNUX1NJR04oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcyX0RDRENfTE9PUENUUkxfSFlTVF9TSUdOX1NISUZUKSkgJiBEQ0RDX1JFRzJfRENEQ19MT09QQ1RSTF9IWVNUX1NJR05fTUFTSykKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfRU5fQkFUQURKX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0VOX0JBVEFESl9TSElGVCAoMTVVKQorI2RlZmluZSBEQ0RDX1JFRzJfRENEQ19CQVRUTU9OSVRPUl9FTl9CQVRBREooeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfRU5fQkFUQURKX1NISUZUKSkgJiBEQ0RDX1JFRzJfRENEQ19CQVRUTU9OSVRPUl9FTl9CQVRBREpfTUFTSykKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfQkFUVF9WQUxfTUFTSyAoMHgzRkYwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfQkFUVF9WQUxfU0hJRlQgKDE2VSkKKyNkZWZpbmUgRENEQ19SRUcyX0RDRENfQkFUVE1PTklUT1JfQkFUVF9WQUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHMl9EQ0RDX0JBVFRNT05JVE9SX0JBVFRfVkFMX1NISUZUKSkgJiBEQ0RDX1JFRzJfRENEQ19CQVRUTU9OSVRPUl9CQVRUX1ZBTF9NQVNLKQorCisvKiEgQG5hbWUgUkVHMyAtIERDREMgUkVHSVNURVIgMyAqLworI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX1RSR19NQVNLICAgICAgICgweDNGVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9UUkdfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQOENUUkxfVFJHKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX1RSR19TSElGVCkpICYgRENEQ19SRUczX0RDRENfVkREMVA4Q1RSTF9UUkdfTUFTSykKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQlVDS19NQVNLICAoMHg3QzBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX1RSR19CVUNLX1NISUZUICg2VSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQlVDSyh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JVQ0tfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JVQ0tfTUFTSykKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQk9PU1RfTUFTSyAoMHhGODAwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQk9PU1RfU0hJRlQgKDExVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9UUkdfQk9PU1QoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfVFJHX0JPT1NUX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX1RSR19CT09TVF9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDVDVFJMX0FESlROX01BU0sgICAgICgweDFFMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfQURKVE5fU0hJRlQgICAgKDE3VSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9BREpUTih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfQURKVE5fU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfQURKVE5fTUFTSykKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEtfUFVMU0VEX01BU0sgKDB4MjAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEtfUFVMU0VEX1NISUZUICgyMVUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1BVTFNFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX1BVTFNFRF9TSElGVCkpICYgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEtfUFVMU0VEX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUU19QVUxTRURfTUFTSyAoMHg0MDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfUFVMU0VEX1NISUZUICgyMlUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUU19QVUxTRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfUFVMU0VEX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRE9VQkxFX0ZFVFNfUFVMU0VEX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfUFVMU0VEX01BU0sgKDB4ODAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0hBTEZfRkVUU19QVUxTRURfU0hJRlQgKDIzVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0hBTEZfRkVUU19QVUxTRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfSEFMRl9GRVRTX1BVTFNFRF9TSElGVCkpICYgRENEQ19SRUczX0RDRENfTUlOUFdSX0hBTEZfRkVUU19QVUxTRURfTUFTSykKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEtfTUFTSyAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEtfU0hJRlQgICAoMjRVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19NSU5QV1JfRENfSEFMRkNMSyh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUczX0RDRENfTUlOUFdSX0RDX0hBTEZDTEtfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX01JTlBXUl9EQ19IQUxGQ0xLX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUU19NQVNLICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUU19TSElGVCAgKDI1VSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0RPVUJMRV9GRVRTKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX01JTlBXUl9ET1VCTEVfRkVUU19TSElGVCkpICYgRENEQ19SRUczX0RDRENfTUlOUFdSX0RPVUJMRV9GRVRTX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfTUFTSyAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfU0hJRlQgICAgKDI2VSkKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfTUlOUFdSX0hBTEZfRkVUUyh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX01JTlBXUl9IQUxGX0ZFVFNfTUFTSykKKyNkZWZpbmUgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9ESVNBQkxFX1NURVBfTUFTSyAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfRElTQUJMRV9TVEVQX1NISUZUICgyOVUpCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfRElTQUJMRV9TVEVQKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUczX0RDRENfVkREMVA1Q1RSTF9ESVNBQkxFX1NURVBfU0hJRlQpKSAmIERDRENfUkVHM19EQ0RDX1ZERDFQNUNUUkxfRElTQUJMRV9TVEVQX01BU0spCisjZGVmaW5lIERDRENfUkVHM19EQ0RDX1ZERDFQOENUUkxfRElTQUJMRV9TVEVQX01BU0sgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX0RJU0FCTEVfU1RFUF9TSElGVCAoMzBVKQorI2RlZmluZSBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX0RJU0FCTEVfU1RFUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHM19EQ0RDX1ZERDFQOENUUkxfRElTQUJMRV9TVEVQX1NISUZUKSkgJiBEQ0RDX1JFRzNfRENEQ19WREQxUDhDVFJMX0RJU0FCTEVfU1RFUF9NQVNLKQorCisvKiEgQG5hbWUgUkVHNCAtIERDREMgUkVHSVNURVIgNCAqLworI2RlZmluZSBEQ0RDX1JFRzRfRENEQ19TV19TSFVURE9XTl9NQVNLICAgICAgICAgICgweDFVKQorI2RlZmluZSBEQ0RDX1JFRzRfRENEQ19TV19TSFVURE9XTl9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgRENEQ19SRUc0X0RDRENfU1dfU0hVVERPV04oeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHNF9EQ0RDX1NXX1NIVVRET1dOX1NISUZUKSkgJiBEQ0RDX1JFRzRfRENEQ19TV19TSFVURE9XTl9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzRfVU5MT0NLX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUc0X1VOTE9DS19TSElGVCAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBEQ0RDX1JFRzRfVU5MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUc0X1VOTE9DS19TSElGVCkpICYgRENEQ19SRUc0X1VOTE9DS19NQVNLKQorCisvKiEgQG5hbWUgUkVHNiAtIERDREMgUkVHSVNURVIgNiAqLworI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfUklTRV9FTl9NQVNLICAgICAgICgweDFVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfUklTRV9FTl9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX1JJU0VfRU4oeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHNl9QU1dJVENIX0lOVF9SSVNFX0VOX1NISUZUKSkgJiBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfUklTRV9FTl9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfRkFMTF9FTl9NQVNLICAgICAgICgweDJVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfRkFMTF9FTl9TSElGVCAgICAgICgxVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0ZBTExfRU4oeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHNl9QU1dJVENIX0lOVF9GQUxMX0VOX1NISUZUKSkgJiBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfRkFMTF9FTl9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfQ0xFQVJfTUFTSyAgICAgICAgICgweDRVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfQ0xFQVJfU0hJRlQgICAgICAgICgyVSkKKyNkZWZpbmUgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0NMRUFSKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHNl9QU1dJVENIX0lOVF9DTEVBUl9TSElGVCkpICYgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX0NMRUFSX01BU0spCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9NVVRFX01BU0sgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9NVVRFX1NISUZUICAgICAgICAgKDNVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfTVVURSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUc2X1BTV0lUQ0hfSU5UX01VVEVfU0hJRlQpKSAmIERDRENfUkVHNl9QU1dJVENIX0lOVF9NVVRFX01BU0spCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9TVFNfTUFTSyAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfU1RTX1NISUZUICAgICAgICAgICgzMVUpCisjZGVmaW5lIERDRENfUkVHNl9QU1dJVENIX0lOVF9TVFMoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfU1RTX1NISUZUKSkgJiBEQ0RDX1JFRzZfUFNXSVRDSF9JTlRfU1RTX01BU0spCisKKy8qISBAbmFtZSBSRUc3IC0gRENEQyBSRUdJU1RFUiA3ICovCisjZGVmaW5lIERDRENfUkVHN19JTlRFR1JBVE9SX1ZBTFVFX01BU0sgICAgICAgICAgKDB4N0ZGRkZVKQorI2RlZmluZSBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUUoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERDRENfUkVHN19JTlRFR1JBVE9SX1ZBTFVFX1NISUZUKSkgJiBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9NQVNLKQorI2RlZmluZSBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9TRUxfTUFTSyAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfU0VMX1NISUZUICAgICAoMTlVKQorI2RlZmluZSBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9TRUwoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRENEQ19SRUc3X0lOVEVHUkFUT1JfVkFMVUVfU0VMX1NISUZUKSkgJiBEQ0RDX1JFRzdfSU5URUdSQVRPUl9WQUxVRV9TRUxfTUFTSykKKyNkZWZpbmUgRENEQ19SRUc3X1BVTFNFX1JVTl9TUEVFRFVQX01BU0sgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBEQ0RDX1JFRzdfUFVMU0VfUlVOX1NQRUVEVVBfU0hJRlQgICAgICAgICgyMFUpCisjZGVmaW5lIERDRENfUkVHN19QVUxTRV9SVU5fU1BFRURVUCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBEQ0RDX1JFRzdfUFVMU0VfUlVOX1NQRUVEVVBfU0hJRlQpKSAmIERDRENfUkVHN19QVUxTRV9SVU5fU1BFRURVUF9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgRENEQ19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIERDREMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBEQ0RDIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBEQ0RDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVBMDAwdSkKKy8qKiBQZXJpcGhlcmFsIERDREMgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIERDREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQ0RDX1R5cGUgKilEQ0RDX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgRENEQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIERDRENfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBEQ0RDX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIERDREMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIERDRENfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBEQ0RDIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBEQ0RDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRE1BIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgRE1BX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIERNQSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogRE1BIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JICB1aW50MzJfdCBFUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgX19JTyB1aW50MzJfdCBFUlE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIFJlcXVlc3QgUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzRdOworICBfX0lPIHVpbnQzMl90IEVFSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFbmFibGUgRXJyb3IgSW50ZXJydXB0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19PICB1aW50OF90IENFRUk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xlYXIgRW5hYmxlIEVycm9yIEludGVycnVwdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDE4ICovCisgIF9fTyAgdWludDhfdCBTRUVJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFNldCBFbmFibGUgRXJyb3IgSW50ZXJydXB0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTkgKi8KKyAgX19PICB1aW50OF90IENFUlE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xlYXIgRW5hYmxlIFJlcXVlc3QgUmVnaXN0ZXIsIG9mZnNldDogMHgxQSAqLworICBfX08gIHVpbnQ4X3QgU0VSUTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgRW5hYmxlIFJlcXVlc3QgUmVnaXN0ZXIsIG9mZnNldDogMHgxQiAqLworICBfX08gIHVpbnQ4X3QgQ0RORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDbGVhciBET05FIFN0YXR1cyBCaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgxQyAqLworICBfX08gIHVpbnQ4X3QgU1NSVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZXQgU1RBUlQgQml0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MUQgKi8KKyAgX19PICB1aW50OF90IENFUlI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xlYXIgRXJyb3IgUmVnaXN0ZXIsIG9mZnNldDogMHgxRSAqLworICBfX08gIHVpbnQ4X3QgQ0lOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDbGVhciBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDFGICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzRdOworICBfX0lPIHVpbnQzMl90IElOVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDI0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8zWzRdOworICBfX0lPIHVpbnQzMl90IEVSUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFcnJvciBSZWdpc3Rlciwgb2Zmc2V0OiAweDJDICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF80WzRdOworICBfX0kgIHVpbnQzMl90IEhSUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBIYXJkd2FyZSBSZXF1ZXN0IFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDM0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF81WzEyXTsKKyAgX19JTyB1aW50MzJfdCBFQVJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIEFzeW5jaHJvbm91cyBSZXF1ZXN0IGluIFN0b3AgUmVnaXN0ZXIsIG9mZnNldDogMHg0NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNlsxODRdOworICBfX0lPIHVpbnQ4X3QgRENIUFJJMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIsIG9mZnNldDogMHgxMDAgKi8KKyAgX19JTyB1aW50OF90IERDSFBSSTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhbm5lbCBuIFByaW9yaXR5IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAxICovCisgIF9fSU8gdWludDhfdCBEQ0hQUkkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgbiBQcmlvcml0eSBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwMiAqLworICBfX0lPIHVpbnQ4X3QgRENIUFJJMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIsIG9mZnNldDogMHgxMDMgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzdbMzgzNl07CisgIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MTAwMCwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgIF9fSU8gdWludDMyX3QgU0FERFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBTb3VyY2UgQWRkcmVzcywgYXJyYXkgb2Zmc2V0OiAweDEwMDAsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICBfX0lPIHVpbnQxNl90IFNPRkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgU2lnbmVkIFNvdXJjZSBBZGRyZXNzIE9mZnNldCwgYXJyYXkgb2Zmc2V0OiAweDEwMDQsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICBfX0lPIHVpbnQxNl90IEFUVFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgVHJhbnNmZXIgQXR0cmlidXRlcywgYXJyYXkgb2Zmc2V0OiAweDEwMDYsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDEwMDgsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICAgIF9fSU8gdWludDMyX3QgTkJZVEVTX01MTk87ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBNaW5vciBCeXRlIENvdW50IChNaW5vciBMb29wIE1hcHBpbmcgRGlzYWJsZWQpLCBhcnJheSBvZmZzZXQ6IDB4MTAwOCwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgICAgX19JTyB1aW50MzJfdCBOQllURVNfTUxPRkZOTzsgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIFNpZ25lZCBNaW5vciBMb29wIE9mZnNldCAoTWlub3IgTG9vcCBNYXBwaW5nIEVuYWJsZWQgYW5kIE9mZnNldCBEaXNhYmxlZCksIGFycmF5IG9mZnNldDogMHgxMDA4LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgICBfX0lPIHVpbnQzMl90IE5CWVRFU19NTE9GRllFUzsgICAgICAgICAgICAgICAgICAgLyoqPCBUQ0QgU2lnbmVkIE1pbm9yIExvb3AgT2Zmc2V0IChNaW5vciBMb29wIE1hcHBpbmcgYW5kIE9mZnNldCBFbmFibGVkKSwgYXJyYXkgb2Zmc2V0OiAweDEwMDgsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICB9OworICAgIF9fSU8gdWludDMyX3QgU0xBU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBMYXN0IFNvdXJjZSBBZGRyZXNzIEFkanVzdG1lbnQsIGFycmF5IG9mZnNldDogMHgxMDBDLCBhcnJheSBzdGVwOiAweDIwICovCisgICAgX19JTyB1aW50MzJfdCBEQUREUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIERlc3RpbmF0aW9uIEFkZHJlc3MsIGFycmF5IG9mZnNldDogMHgxMDEwLCBhcnJheSBzdGVwOiAweDIwICovCisgICAgX19JTyB1aW50MTZfdCBET0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIFNpZ25lZCBEZXN0aW5hdGlvbiBBZGRyZXNzIE9mZnNldCwgYXJyYXkgb2Zmc2V0OiAweDEwMTQsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDEwMTYsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICAgIF9fSU8gdWludDE2X3QgQ0lURVJfRUxJTktOTzsgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBDdXJyZW50IE1pbm9yIExvb3AgTGluaywgTWFqb3IgTG9vcCBDb3VudCAoQ2hhbm5lbCBMaW5raW5nIERpc2FibGVkKSwgYXJyYXkgb2Zmc2V0OiAweDEwMTYsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICAgIF9fSU8gdWludDE2X3QgQ0lURVJfRUxJTktZRVM7ICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBDdXJyZW50IE1pbm9yIExvb3AgTGluaywgTWFqb3IgTG9vcCBDb3VudCAoQ2hhbm5lbCBMaW5raW5nIEVuYWJsZWQpLCBhcnJheSBvZmZzZXQ6IDB4MTAxNiwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgIH07CisgICAgX19JTyB1aW50MzJfdCBETEFTVF9TR0E7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIExhc3QgRGVzdGluYXRpb24gQWRkcmVzcyBBZGp1c3RtZW50L1NjYXR0ZXIgR2F0aGVyIEFkZHJlc3MsIGFycmF5IG9mZnNldDogMHgxMDE4LCBhcnJheSBzdGVwOiAweDIwICovCisgICAgX19JTyB1aW50MTZfdCBDU1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIENvbnRyb2wgYW5kIFN0YXR1cywgYXJyYXkgb2Zmc2V0OiAweDEwMUMsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDEwMUUsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICAgIF9fSU8gdWludDE2X3QgQklURVJfRUxJTktOTzsgICAgICAgICAgICAgICAgICAgICAvKio8IFRDRCBCZWdpbm5pbmcgTWlub3IgTG9vcCBMaW5rLCBNYWpvciBMb29wIENvdW50IChDaGFubmVsIExpbmtpbmcgRGlzYWJsZWQpLCBhcnJheSBvZmZzZXQ6IDB4MTAxRSwgYXJyYXkgc3RlcDogMHgyMCAqLworICAgICAgX19JTyB1aW50MTZfdCBCSVRFUl9FTElOS1lFUzsgICAgICAgICAgICAgICAgICAgIC8qKjwgVENEIEJlZ2lubmluZyBNaW5vciBMb29wIExpbmssIE1ham9yIExvb3AgQ291bnQgKENoYW5uZWwgTGlua2luZyBFbmFibGVkKSwgYXJyYXkgb2Zmc2V0OiAweDEwMUUsIGFycmF5IHN0ZXA6IDB4MjAgKi8KKyAgICB9OworICB9IFRDRFs0XTsKK30gRE1BX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIERNQSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIERNQV9SZWdpc3Rlcl9NYXNrcyBETUEgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENSIC0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ1JfRURCR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBETUFfQ1JfRURCR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgRE1BX0NSX0VEQkcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9FREJHX1NISUZUKSkgJiBETUFfQ1JfRURCR19NQVNLKQorI2RlZmluZSBETUFfQ1JfRVJDQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfQ1JfRVJDQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0NSX0VSQ0EoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9FUkNBX1NISUZUKSkgJiBETUFfQ1JfRVJDQV9NQVNLKQorI2RlZmluZSBETUFfQ1JfSE9FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgRE1BX0NSX0hPRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIERNQV9DUl9IT0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfSE9FX1NISUZUKSkgJiBETUFfQ1JfSE9FX01BU0spCisjZGVmaW5lIERNQV9DUl9IQUxUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBETUFfQ1JfSEFMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgRE1BX0NSX0hBTFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9IQUxUX1NISUZUKSkgJiBETUFfQ1JfSEFMVF9NQVNLKQorI2RlZmluZSBETUFfQ1JfQ0xNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0NSX0NMTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9DUl9DTE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfQ1JfQ0xNX1NISUZUKSkgJiBETUFfQ1JfQ0xNX01BU0spCisjZGVmaW5lIERNQV9DUl9FTUxNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfQ1JfRU1MTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX0NSX0VNTE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9FTUxNX1NISUZUKSkgJiBETUFfQ1JfRU1MTV9NQVNLKQorI2RlZmluZSBETUFfQ1JfRUNYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgRE1BX0NSX0VDWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBETUFfQ1JfRUNYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0NSX0VDWF9TSElGVCkpICYgRE1BX0NSX0VDWF9NQVNLKQorI2RlZmluZSBETUFfQ1JfQ1hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgRE1BX0NSX0NYX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBETUFfQ1JfQ1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0NSX0NYX1NISUZUKSkgJiBETUFfQ1JfQ1hfTUFTSykKKyNkZWZpbmUgRE1BX0NSX0FDVElWRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIERNQV9DUl9BQ1RJVkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgRE1BX0NSX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9DUl9BQ1RJVkVfU0hJRlQpKSAmIERNQV9DUl9BQ1RJVkVfTUFTSykKKworLyohIEBuYW1lIEVTIC0gRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9FU19EQkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9FU19EQkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRVNfREJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX0RCRV9TSElGVCkpICYgRE1BX0VTX0RCRV9NQVNLKQorI2RlZmluZSBETUFfRVNfU0JFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBETUFfRVNfU0JFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgRE1BX0VTX1NCRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19TQkVfU0hJRlQpKSAmIERNQV9FU19TQkVfTUFTSykKKyNkZWZpbmUgRE1BX0VTX1NHRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0VTX1NHRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9FU19TR0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfU0dFX1NISUZUKSkgJiBETUFfRVNfU0dFX01BU0spCisjZGVmaW5lIERNQV9FU19OQ0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERNQV9FU19OQ0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfRVNfTkNFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX05DRV9TSElGVCkpICYgRE1BX0VTX05DRV9NQVNLKQorI2RlZmluZSBETUFfRVNfRE9FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgRE1BX0VTX0RPRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIERNQV9FU19ET0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfRE9FX1NISUZUKSkgJiBETUFfRVNfRE9FX01BU0spCisjZGVmaW5lIERNQV9FU19EQUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBETUFfRVNfREFFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgRE1BX0VTX0RBRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19EQUVfU0hJRlQpKSAmIERNQV9FU19EQUVfTUFTSykKKyNkZWZpbmUgRE1BX0VTX1NPRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9FU19TT0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfRVNfU09FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VTX1NPRV9TSElGVCkpICYgRE1BX0VTX1NPRV9NQVNLKQorI2RlZmluZSBETUFfRVNfU0FFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0VTX1NBRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9FU19TQUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfU0FFX1NISUZUKSkgJiBETUFfRVNfU0FFX01BU0spCisjZGVmaW5lIERNQV9FU19FUlJDSE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MzAwVSkKKyNkZWZpbmUgRE1BX0VTX0VSUkNITl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIERNQV9FU19FUlJDSE4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVNfRVJSQ0hOX1NISUZUKSkgJiBETUFfRVNfRVJSQ0hOX01BU0spCisjZGVmaW5lIERNQV9FU19DUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIERNQV9FU19DUEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgRE1BX0VTX0NQRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19DUEVfU0hJRlQpKSAmIERNQV9FU19DUEVfTUFTSykKKyNkZWZpbmUgRE1BX0VTX0VDWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIERNQV9FU19FQ1hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgRE1BX0VTX0VDWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19FQ1hfU0hJRlQpKSAmIERNQV9FU19FQ1hfTUFTSykKKyNkZWZpbmUgRE1BX0VTX1ZMRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIERNQV9FU19WTERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgRE1BX0VTX1ZMRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FU19WTERfU0hJRlQpKSAmIERNQV9FU19WTERfTUFTSykKKworLyohIEBuYW1lIEVSUSAtIEVuYWJsZSBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9FUlFfRVJRMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9FUlFfRVJRMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRVJRX0VSUTAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VSUV9FUlEwX1NISUZUKSkgJiBETUFfRVJRX0VSUTBfTUFTSykKKyNkZWZpbmUgRE1BX0VSUV9FUlExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0VSUV9FUlExX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9FUlFfRVJRMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVJRX0VSUTFfU0hJRlQpKSAmIERNQV9FUlFfRVJRMV9NQVNLKQorI2RlZmluZSBETUFfRVJRX0VSUTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfRVJRX0VSUTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0VSUV9FUlEyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FUlFfRVJRMl9TSElGVCkpICYgRE1BX0VSUV9FUlEyX01BU0spCisjZGVmaW5lIERNQV9FUlFfRVJRM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERNQV9FUlFfRVJRM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfRVJRX0VSUTMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VSUV9FUlEzX1NISUZUKSkgJiBETUFfRVJRX0VSUTNfTUFTSykKKworLyohIEBuYW1lIEVFSSAtIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0VFSV9FRUkwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgRE1BX0VFSV9FRUkwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9FRUlfRUVJMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRUVJX0VFSTBfU0hJRlQpKSAmIERNQV9FRUlfRUVJMF9NQVNLKQorI2RlZmluZSBETUFfRUVJX0VFSTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBETUFfRUVJX0VFSTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgRE1BX0VFSV9FRUkxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FRUlfRUVJMV9TSElGVCkpICYgRE1BX0VFSV9FRUkxX01BU0spCisjZGVmaW5lIERNQV9FRUlfRUVJMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERNQV9FRUlfRUVJMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBETUFfRUVJX0VFSTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VFSV9FRUkyX1NISUZUKSkgJiBETUFfRUVJX0VFSTJfTUFTSykKKyNkZWZpbmUgRE1BX0VFSV9FRUkzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgRE1BX0VFSV9FRUkzX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIERNQV9FRUlfRUVJMyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRUVJX0VFSTNfU0hJRlQpKSAmIERNQV9FRUlfRUVJM19NQVNLKQorCisvKiEgQG5hbWUgQ0VFSSAtIENsZWFyIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0NFRUlfQ0VFSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX0NFRUlfQ0VFSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9DRUVJX0NFRUkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0NFRUlfQ0VFSV9TSElGVCkpICYgRE1BX0NFRUlfQ0VFSV9NQVNLKQorI2RlZmluZSBETUFfQ0VFSV9DQUVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0NFRUlfQ0FFRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9DRUVJX0NBRUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0NFRUlfQ0FFRV9TSElGVCkpICYgRE1BX0NFRUlfQ0FFRV9NQVNLKQorI2RlZmluZSBETUFfQ0VFSV9OT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0NFRUlfTk9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9DRUVJX05PUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0NFRUlfTk9QX1NISUZUKSkgJiBETUFfQ0VFSV9OT1BfTUFTSykKKworLyohIEBuYW1lIFNFRUkgLSBTZXQgRW5hYmxlIEVycm9yIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfU0VFSV9TRUVJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBETUFfU0VFSV9TRUVJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX1NFRUlfU0VFSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU0VFSV9TRUVJX1NISUZUKSkgJiBETUFfU0VFSV9TRUVJX01BU0spCisjZGVmaW5lIERNQV9TRUVJX1NBRUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfU0VFSV9TQUVFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX1NFRUlfU0FFRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU0VFSV9TQUVFX1NISUZUKSkgJiBETUFfU0VFSV9TQUVFX01BU0spCisjZGVmaW5lIERNQV9TRUVJX05PUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfU0VFSV9OT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX1NFRUlfTk9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU0VFSV9OT1BfU0hJRlQpKSAmIERNQV9TRUVJX05PUF9NQVNLKQorCisvKiEgQG5hbWUgQ0VSUSAtIENsZWFyIEVuYWJsZSBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9DRVJRX0NFUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9DRVJRX0NFUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ0VSUV9DRVJRKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRVJRX0NFUlFfU0hJRlQpKSAmIERNQV9DRVJRX0NFUlFfTUFTSykKKyNkZWZpbmUgRE1BX0NFUlFfQ0FFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DRVJRX0NBRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ0VSUV9DQUVSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRVJRX0NBRVJfU0hJRlQpKSAmIERNQV9DRVJRX0NBRVJfTUFTSykKKyNkZWZpbmUgRE1BX0NFUlFfTk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9DRVJRX05PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfQ0VSUV9OT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRVJRX05PUF9TSElGVCkpICYgRE1BX0NFUlFfTk9QX01BU0spCisKKy8qISBAbmFtZSBTRVJRIC0gU2V0IEVuYWJsZSBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9TRVJRX1NFUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9TRVJRX1NFUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfU0VSUV9TRVJRKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9TRVJRX1NFUlFfU0hJRlQpKSAmIERNQV9TRVJRX1NFUlFfTUFTSykKKyNkZWZpbmUgRE1BX1NFUlFfU0FFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9TRVJRX1NBRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfU0VSUV9TQUVSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9TRVJRX1NBRVJfU0hJRlQpKSAmIERNQV9TRVJRX1NBRVJfTUFTSykKKyNkZWZpbmUgRE1BX1NFUlFfTk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9TRVJRX05PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfU0VSUV9OT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9TRVJRX05PUF9TSElGVCkpICYgRE1BX1NFUlFfTk9QX01BU0spCisKKy8qISBAbmFtZSBDRE5FIC0gQ2xlYXIgRE9ORSBTdGF0dXMgQml0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9DRE5FX0NETkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9DRE5FX0NETkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ0RORV9DRE5FKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRE5FX0NETkVfU0hJRlQpKSAmIERNQV9DRE5FX0NETkVfTUFTSykKKyNkZWZpbmUgRE1BX0NETkVfQ0FETl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DRE5FX0NBRE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ0RORV9DQUROKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRE5FX0NBRE5fU0hJRlQpKSAmIERNQV9DRE5FX0NBRE5fTUFTSykKKyNkZWZpbmUgRE1BX0NETkVfTk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9DRE5FX05PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfQ0RORV9OT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRE5FX05PUF9TSElGVCkpICYgRE1BX0NETkVfTk9QX01BU0spCisKKy8qISBAbmFtZSBTU1JUIC0gU2V0IFNUQVJUIEJpdCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfU1NSVF9TU1JUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBETUFfU1NSVF9TU1JUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX1NTUlRfU1NSVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU1NSVF9TU1JUX1NISUZUKSkgJiBETUFfU1NSVF9TU1JUX01BU0spCisjZGVmaW5lIERNQV9TU1JUX1NBU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfU1NSVF9TQVNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX1NTUlRfU0FTVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU1NSVF9TQVNUX1NISUZUKSkgJiBETUFfU1NSVF9TQVNUX01BU0spCisjZGVmaW5lIERNQV9TU1JUX05PUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFfU1NSVF9OT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BX1NTUlRfTk9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfU1NSVF9OT1BfU0hJRlQpKSAmIERNQV9TU1JUX05PUF9NQVNLKQorCisvKiEgQG5hbWUgQ0VSUiAtIENsZWFyIEVycm9yIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9DRVJSX0NFUlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIERNQV9DRVJSX0NFUlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ0VSUl9DRVJSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRVJSX0NFUlJfU0hJRlQpKSAmIERNQV9DRVJSX0NFUlJfTUFTSykKKyNkZWZpbmUgRE1BX0NFUlJfQ0FFSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIERNQV9DRVJSX0NBRUlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBETUFfQ0VSUl9DQUVJKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRVJSX0NBRUlfU0hJRlQpKSAmIERNQV9DRVJSX0NBRUlfTUFTSykKKyNkZWZpbmUgRE1BX0NFUlJfTk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9DRVJSX05PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfQ0VSUl9OT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IERNQV9DRVJSX05PUF9TSElGVCkpICYgRE1BX0NFUlJfTk9QX01BU0spCisKKy8qISBAbmFtZSBDSU5UIC0gQ2xlYXIgSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0NJTlRfQ0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX0NJTlRfQ0lOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9DSU5UX0NJTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0NJTlRfQ0lOVF9TSElGVCkpICYgRE1BX0NJTlRfQ0lOVF9NQVNLKQorI2RlZmluZSBETUFfQ0lOVF9DQUlSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0NJTlRfQ0FJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9DSU5UX0NBSVIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0NJTlRfQ0FJUl9TSElGVCkpICYgRE1BX0NJTlRfQ0FJUl9NQVNLKQorI2RlZmluZSBETUFfQ0lOVF9OT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0NJTlRfTk9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9DSU5UX05PUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0NJTlRfTk9QX1NISUZUKSkgJiBETUFfQ0lOVF9OT1BfTUFTSykKKworLyohIEBuYW1lIElOVCAtIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9JTlRfSU5UMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9JTlRfSU5UMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfSU5UX0lOVDAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0lOVF9JTlQwX1NISUZUKSkgJiBETUFfSU5UX0lOVDBfTUFTSykKKyNkZWZpbmUgRE1BX0lOVF9JTlQxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0lOVF9JTlQxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9JTlRfSU5UMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfSU5UX0lOVDFfU0hJRlQpKSAmIERNQV9JTlRfSU5UMV9NQVNLKQorI2RlZmluZSBETUFfSU5UX0lOVDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfSU5UX0lOVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0lOVF9JTlQyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9JTlRfSU5UMl9TSElGVCkpICYgRE1BX0lOVF9JTlQyX01BU0spCisjZGVmaW5lIERNQV9JTlRfSU5UM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERNQV9JTlRfSU5UM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfSU5UX0lOVDMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0lOVF9JTlQzX1NISUZUKSkgJiBETUFfSU5UX0lOVDNfTUFTSykKKworLyohIEBuYW1lIEVSUiAtIEVycm9yIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9FUlJfRVJSMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9FUlJfRVJSMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfRVJSX0VSUjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VSUl9FUlIwX1NISUZUKSkgJiBETUFfRVJSX0VSUjBfTUFTSykKKyNkZWZpbmUgRE1BX0VSUl9FUlIxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0VSUl9FUlIxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9FUlJfRVJSMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRVJSX0VSUjFfU0hJRlQpKSAmIERNQV9FUlJfRVJSMV9NQVNLKQorI2RlZmluZSBETUFfRVJSX0VSUjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfRVJSX0VSUjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0VSUl9FUlIyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FUlJfRVJSMl9TSElGVCkpICYgRE1BX0VSUl9FUlIyX01BU0spCisjZGVmaW5lIERNQV9FUlJfRVJSM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERNQV9FUlJfRVJSM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfRVJSX0VSUjMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VSUl9FUlIzX1NISUZUKSkgJiBETUFfRVJSX0VSUjNfTUFTSykKKworLyohIEBuYW1lIEhSUyAtIEhhcmR3YXJlIFJlcXVlc3QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9IUlNfSFJTMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9IUlNfSFJTMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfSFJTX0hSUzAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0hSU19IUlMwX1NISUZUKSkgJiBETUFfSFJTX0hSUzBfTUFTSykKKyNkZWZpbmUgRE1BX0hSU19IUlMxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0hSU19IUlMxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9IUlNfSFJTMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfSFJTX0hSUzFfU0hJRlQpKSAmIERNQV9IUlNfSFJTMV9NQVNLKQorI2RlZmluZSBETUFfSFJTX0hSUzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBETUFfSFJTX0hSUzJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRE1BX0hSU19IUlMyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9IUlNfSFJTMl9TSElGVCkpICYgRE1BX0hSU19IUlMyX01BU0spCisjZGVmaW5lIERNQV9IUlNfSFJTM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIERNQV9IUlNfSFJTM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBETUFfSFJTX0hSUzMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0hSU19IUlMzX1NISUZUKSkgJiBETUFfSFJTX0hSUzNfTUFTSykKKworLyohIEBuYW1lIEVBUlMgLSBFbmFibGUgQXN5bmNocm9ub3VzIFJlcXVlc3QgaW4gU3RvcCBSZWdpc3RlciAqLworI2RlZmluZSBETUFfRUFSU19FRFJFUV8wX01BU0sgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8wX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FQVJTX0VEUkVRXzBfU0hJRlQpKSAmIERNQV9FQVJTX0VEUkVRXzBfTUFTSykKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMV9TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfRUFSU19FRFJFUV8xX1NISUZUKSkgJiBETUFfRUFSU19FRFJFUV8xX01BU0spCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIERNQV9FQVJTX0VEUkVRXzJfU0hJRlQgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8yKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX0VBUlNfRURSRVFfMl9TSElGVCkpICYgRE1BX0VBUlNfRURSRVFfMl9NQVNLKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8zX01BU0sgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfRUFSU19FRFJFUV8zX1NISUZUICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0VBUlNfRURSRVFfMyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9FQVJTX0VEUkVRXzNfU0hJRlQpKSAmIERNQV9FQVJTX0VEUkVRXzNfTUFTSykKKworLyohIEBuYW1lIERDSFBSSTMgLSBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0RDSFBSSTNfQ0hQUklfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTNfQ0hQUklfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9EQ0hQUkkzX0NIUFJJKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTNfQ0hQUklfU0hJRlQpKSAmIERNQV9EQ0hQUkkzX0NIUFJJX01BU0spCisjZGVmaW5lIERNQV9EQ0hQUkkzX0RQQV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfRENIUFJJM19EUEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0RDSFBSSTNfRFBBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfRENIUFJJM19EUEFfU0hJRlQpKSAmIERNQV9EQ0hQUkkzX0RQQV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJM19FQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTNfRUNQX1NISUZUICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9EQ0hQUkkzX0VDUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTNfRUNQX1NISUZUKSkgJiBETUFfRENIUFJJM19FQ1BfTUFTSykKKworLyohIEBuYW1lIERDSFBSSTIgLSBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0RDSFBSSTJfQ0hQUklfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTJfQ0hQUklfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9EQ0hQUkkyX0NIUFJJKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTJfQ0hQUklfU0hJRlQpKSAmIERNQV9EQ0hQUkkyX0NIUFJJX01BU0spCisjZGVmaW5lIERNQV9EQ0hQUkkyX0RQQV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfRENIUFJJMl9EUEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0RDSFBSSTJfRFBBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfRENIUFJJMl9EUEFfU0hJRlQpKSAmIERNQV9EQ0hQUkkyX0RQQV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJMl9FQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTJfRUNQX1NISUZUICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9EQ0hQUkkyX0VDUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTJfRUNQX1NISUZUKSkgJiBETUFfRENIUFJJMl9FQ1BfTUFTSykKKworLyohIEBuYW1lIERDSFBSSTEgLSBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0RDSFBSSTFfQ0hQUklfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTFfQ0hQUklfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9EQ0hQUkkxX0NIUFJJKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTFfQ0hQUklfU0hJRlQpKSAmIERNQV9EQ0hQUkkxX0NIUFJJX01BU0spCisjZGVmaW5lIERNQV9EQ0hQUkkxX0RQQV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfRENIUFJJMV9EUEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0RDSFBSSTFfRFBBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfRENIUFJJMV9EUEFfU0hJRlQpKSAmIERNQV9EQ0hQUkkxX0RQQV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJMV9FQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTFfRUNQX1NISUZUICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9EQ0hQUkkxX0VDUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTFfRUNQX1NISUZUKSkgJiBETUFfRENIUFJJMV9FQ1BfTUFTSykKKworLyohIEBuYW1lIERDSFBSSTAgLSBDaGFubmVsIG4gUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0RDSFBSSTBfQ0hQUklfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTBfQ0hQUklfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9EQ0hQUkkwX0NIUFJJKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTBfQ0hQUklfU0hJRlQpKSAmIERNQV9EQ0hQUkkwX0NIUFJJX01BU0spCisjZGVmaW5lIERNQV9EQ0hQUkkwX0RQQV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBETUFfRENIUFJJMF9EUEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRE1BX0RDSFBSSTBfRFBBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFfRENIUFJJMF9EUEFfU0hJRlQpKSAmIERNQV9EQ0hQUkkwX0RQQV9NQVNLKQorI2RlZmluZSBETUFfRENIUFJJMF9FQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgRE1BX0RDSFBSSTBfRUNQX1NISUZUICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIERNQV9EQ0hQUkkwX0VDUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BX0RDSFBSSTBfRUNQX1NISUZUKSkgJiBETUFfRENIUFJJMF9FQ1BfTUFTSykKKworLyohIEBuYW1lIFNBRERSIC0gVENEIFNvdXJjZSBBZGRyZXNzICovCisjZGVmaW5lIERNQV9TQUREUl9TQUREUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBETUFfU0FERFJfU0FERFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX1NBRERSX1NBRERSKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9TQUREUl9TQUREUl9TSElGVCkpICYgRE1BX1NBRERSX1NBRERSX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfU0FERFIgKi8KKyNkZWZpbmUgRE1BX1NBRERSX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBTT0ZGIC0gVENEIFNpZ25lZCBTb3VyY2UgQWRkcmVzcyBPZmZzZXQgKi8KKyNkZWZpbmUgRE1BX1NPRkZfU09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgRE1BX1NPRkZfU09GRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQV9TT0ZGX1NPRkYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfU09GRl9TT0ZGX1NISUZUKSkgJiBETUFfU09GRl9TT0ZGX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfU09GRiAqLworI2RlZmluZSBETUFfU09GRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIEFUVFIgLSBUQ0QgVHJhbnNmZXIgQXR0cmlidXRlcyAqLworI2RlZmluZSBETUFfQVRUUl9EU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBETUFfQVRUUl9EU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0FUVFJfRFNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9BVFRSX0RTSVpFX1NISUZUKSkgJiBETUFfQVRUUl9EU0laRV9NQVNLKQorI2RlZmluZSBETUFfQVRUUl9ETU9EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEY4VSkKKyNkZWZpbmUgRE1BX0FUVFJfRE1PRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIERNQV9BVFRSX0RNT0QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQVRUUl9ETU9EX1NISUZUKSkgJiBETUFfQVRUUl9ETU9EX01BU0spCisjZGVmaW5lIERNQV9BVFRSX1NTSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NzAwVSkKKyNkZWZpbmUgRE1BX0FUVFJfU1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIERNQV9BVFRSX1NTSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQVRUUl9TU0laRV9TSElGVCkpICYgRE1BX0FUVFJfU1NJWkVfTUFTSykKKyNkZWZpbmUgRE1BX0FUVFJfU01PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGODAwVSkKKyNkZWZpbmUgRE1BX0FUVFJfU01PRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTFVKQorI2RlZmluZSBETUFfQVRUUl9TTU9EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0FUVFJfU01PRF9TSElGVCkpICYgRE1BX0FUVFJfU01PRF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX0FUVFIgKi8KKyNkZWZpbmUgRE1BX0FUVFJfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBOQllURVNfTUxOTyAtIFRDRCBNaW5vciBCeXRlIENvdW50IChNaW5vciBMb29wIE1hcHBpbmcgRGlzYWJsZWQpICovCisjZGVmaW5lIERNQV9OQllURVNfTUxOT19OQllURVNfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBETUFfTkJZVEVTX01MTk9fTkJZVEVTX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE5PX05CWVRFUyh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9OQllURVNfTUxOT19OQllURVNfU0hJRlQpKSAmIERNQV9OQllURVNfTUxOT19OQllURVNfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9OQllURVNfTUxOTyAqLworI2RlZmluZSBETUFfTkJZVEVTX01MTk9fQ09VTlQgICAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIE5CWVRFU19NTE9GRk5PIC0gVENEIFNpZ25lZCBNaW5vciBMb29wIE9mZnNldCAoTWlub3IgTG9vcCBNYXBwaW5nIEVuYWJsZWQgYW5kIE9mZnNldCBEaXNhYmxlZCkgKi8KKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX05CWVRFU19NQVNLICAgICAgICAgICAoMHgzRkZGRkZGRlUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19OQllURVNfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGTk9fTkJZVEVTKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX05CWVRFU19NTE9GRk5PX05CWVRFU19TSElGVCkpICYgRE1BX05CWVRFU19NTE9GRk5PX05CWVRFU19NQVNLKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGTk9fRE1MT0VfTUFTSyAgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX0RNTE9FX1NISUZUICAgICAgICAgICAoMzBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGTk9fRE1MT0UoeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX05CWVRFU19NTE9GRk5PX0RNTE9FX1NISUZUKSkgJiBETUFfTkJZVEVTX01MT0ZGTk9fRE1MT0VfTUFTSykKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX1NNTE9FX01BU0sgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZOT19TTUxPRV9TSElGVCAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX1NNTE9FKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9OQllURVNfTUxPRkZOT19TTUxPRV9TSElGVCkpICYgRE1BX05CWVRFU19NTE9GRk5PX1NNTE9FX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfTkJZVEVTX01MT0ZGTk8gKi8KKyNkZWZpbmUgRE1BX05CWVRFU19NTE9GRk5PX0NPVU5UICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBOQllURVNfTUxPRkZZRVMgLSBUQ0QgU2lnbmVkIE1pbm9yIExvb3AgT2Zmc2V0IChNaW5vciBMb29wIE1hcHBpbmcgYW5kIE9mZnNldCBFbmFibGVkKSAqLworI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX05CWVRFU19NQVNLICAgICAgICAgICgweDNGRlUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfTkJZVEVTX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX05CWVRFUyh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRE1BX05CWVRFU19NTE9GRllFU19OQllURVNfU0hJRlQpKSAmIERNQV9OQllURVNfTUxPRkZZRVNfTkJZVEVTX01BU0spCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfTUxPRkZfTUFTSyAgICAgICAgICAgKDB4M0ZGRkZDMDBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGX1NISUZUICAgICAgICAgICgxMFUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfTUxPRkYoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGX1NISUZUKSkgJiBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGX01BU0spCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfRE1MT0VfTUFTSyAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FX1NISUZUICAgICAgICAgICgzMFUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfRE1MT0UoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FX1NISUZUKSkgJiBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FX01BU0spCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfU01MT0VfTUFTSyAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FX1NISUZUICAgICAgICAgICgzMVUpCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfU01MT0UoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FX1NISUZUKSkgJiBETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfTkJZVEVTX01MT0ZGWUVTICovCisjZGVmaW5lIERNQV9OQllURVNfTUxPRkZZRVNfQ09VTlQgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgU0xBU1QgLSBUQ0QgTGFzdCBTb3VyY2UgQWRkcmVzcyBBZGp1c3RtZW50ICovCisjZGVmaW5lIERNQV9TTEFTVF9TTEFTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBETUFfU0xBU1RfU0xBU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX1NMQVNUX1NMQVNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9TTEFTVF9TTEFTVF9TSElGVCkpICYgRE1BX1NMQVNUX1NMQVNUX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfU0xBU1QgKi8KKyNkZWZpbmUgRE1BX1NMQVNUX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBEQUREUiAtIFRDRCBEZXN0aW5hdGlvbiBBZGRyZXNzICovCisjZGVmaW5lIERNQV9EQUREUl9EQUREUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBETUFfREFERFJfREFERFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0RBRERSX0RBRERSKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9EQUREUl9EQUREUl9TSElGVCkpICYgRE1BX0RBRERSX0RBRERSX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfREFERFIgKi8KKyNkZWZpbmUgRE1BX0RBRERSX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBET0ZGIC0gVENEIFNpZ25lZCBEZXN0aW5hdGlvbiBBZGRyZXNzIE9mZnNldCAqLworI2RlZmluZSBETUFfRE9GRl9ET0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBETUFfRE9GRl9ET0ZGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0RPRkZfRE9GRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9ET0ZGX0RPRkZfU0hJRlQpKSAmIERNQV9ET0ZGX0RPRkZfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9ET0ZGICovCisjZGVmaW5lIERNQV9ET0ZGX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgQ0lURVJfRUxJTktOTyAtIFRDRCBDdXJyZW50IE1pbm9yIExvb3AgTGluaywgTWFqb3IgTG9vcCBDb3VudCAoQ2hhbm5lbCBMaW5raW5nIERpc2FibGVkKSAqLworI2RlZmluZSBETUFfQ0lURVJfRUxJTktOT19DSVRFUl9NQVNLICAgICAgICAgICAgICgweDdGRkZVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktOT19DSVRFUl9TSElGVCAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LTk9fQ0lURVIoeCkgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DSVRFUl9FTElOS05PX0NJVEVSX1NISUZUKSkgJiBETUFfQ0lURVJfRUxJTktOT19DSVRFUl9NQVNLKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktOT19FTElOS19NQVNLICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktOT19FTElOS19TSElGVCAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS05PX0VMSU5LKHgpICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ0lURVJfRUxJTktOT19FTElOS19TSElGVCkpICYgRE1BX0NJVEVSX0VMSU5LTk9fRUxJTktfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9DSVRFUl9FTElOS05PICovCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS05PX0NPVU5UICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgQ0lURVJfRUxJTktZRVMgLSBUQ0QgQ3VycmVudCBNaW5vciBMb29wIExpbmssIE1ham9yIExvb3AgQ291bnQgKENoYW5uZWwgTGlua2luZyBFbmFibGVkKSAqLworI2RlZmluZSBETUFfQ0lURVJfRUxJTktZRVNfQ0lURVJfTUFTSyAgICAgICAgICAgICgweDFGRlUpCisjZGVmaW5lIERNQV9DSVRFUl9FTElOS1lFU19DSVRFUl9TSElGVCAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktZRVNfQ0lURVIoeCkgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NJVEVSX0VMSU5LWUVTX0NJVEVSX1NISUZUKSkgJiBETUFfQ0lURVJfRUxJTktZRVNfQ0lURVJfTUFTSykKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0xJTktDSF9NQVNLICAgICAgICAgICAoMHg2MDBVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktZRVNfTElOS0NIX1NISUZUICAgICAgICAgICg5VSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0xJTktDSCh4KSAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DSVRFUl9FTElOS1lFU19MSU5LQ0hfU0hJRlQpKSAmIERNQV9DSVRFUl9FTElOS1lFU19MSU5LQ0hfTUFTSykKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0VMSU5LX01BU0sgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgRE1BX0NJVEVSX0VMSU5LWUVTX0VMSU5LX1NISUZUICAgICAgICAgICAoMTVVKQorI2RlZmluZSBETUFfQ0lURVJfRUxJTktZRVNfRUxJTksoeCkgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NJVEVSX0VMSU5LWUVTX0VMSU5LX1NISUZUKSkgJiBETUFfQ0lURVJfRUxJTktZRVNfRUxJTktfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9DSVRFUl9FTElOS1lFUyAqLworI2RlZmluZSBETUFfQ0lURVJfRUxJTktZRVNfQ09VTlQgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIERMQVNUX1NHQSAtIFRDRCBMYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MgQWRqdXN0bWVudC9TY2F0dGVyIEdhdGhlciBBZGRyZXNzICovCisjZGVmaW5lIERNQV9ETEFTVF9TR0FfRExBU1RTR0FfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBETUFfRExBU1RfU0dBX0RMQVNUU0dBX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0RMQVNUX1NHQV9ETEFTVFNHQSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IERNQV9ETEFTVF9TR0FfRExBU1RTR0FfU0hJRlQpKSAmIERNQV9ETEFTVF9TR0FfRExBU1RTR0FfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQV9ETEFTVF9TR0EgKi8KKyNkZWZpbmUgRE1BX0RMQVNUX1NHQV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBDU1IgLSBUQ0QgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIERNQV9DU1JfU1RBUlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIERNQV9DU1JfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQ1NSX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NTUl9TVEFSVF9TSElGVCkpICYgRE1BX0NTUl9TVEFSVF9NQVNLKQorI2RlZmluZSBETUFfQ1NSX0lOVE1BSk9SX01BU0sgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBETUFfQ1NSX0lOVE1BSk9SX1NISUZUICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgRE1BX0NTUl9JTlRNQUpPUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfSU5UTUFKT1JfU0hJRlQpKSAmIERNQV9DU1JfSU5UTUFKT1JfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9JTlRIQUxGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgRE1BX0NTUl9JTlRIQUxGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIERNQV9DU1JfSU5USEFMRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX0lOVEhBTEZfU0hJRlQpKSAmIERNQV9DU1JfSU5USEFMRl9NQVNLKQorI2RlZmluZSBETUFfQ1NSX0RSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBETUFfQ1NSX0RSRVFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgRE1BX0NTUl9EUkVRKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfRFJFUV9TSElGVCkpICYgRE1BX0NTUl9EUkVRX01BU0spCisjZGVmaW5lIERNQV9DU1JfRVNHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBETUFfQ1NSX0VTR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgRE1BX0NTUl9FU0coeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfRVNHX1NISUZUKSkgJiBETUFfQ1NSX0VTR19NQVNLKQorI2RlZmluZSBETUFfQ1NSX01BSk9SRUxJTktfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgRE1BX0NTUl9NQUpPUkVMSU5LX1NISUZUICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIERNQV9DU1JfTUFKT1JFTElOSyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX01BSk9SRUxJTktfU0hJRlQpKSAmIERNQV9DU1JfTUFKT1JFTElOS19NQVNLKQorI2RlZmluZSBETUFfQ1NSX0FDVElWRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BX0NTUl9BQ1RJVkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQV9DU1JfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQ1NSX0FDVElWRV9TSElGVCkpICYgRE1BX0NTUl9BQ1RJVkVfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9ET05FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIERNQV9DU1JfRE9ORV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBETUFfQ1NSX0RPTkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NTUl9ET05FX1NISUZUKSkgJiBETUFfQ1NSX0RPTkVfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9NQUpPUkxJTktDSF9NQVNLICAgICAgICAgICAgICAgICAoMHgzMDBVKQorI2RlZmluZSBETUFfQ1NSX01BSk9STElOS0NIX1NISUZUICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgRE1BX0NTUl9NQUpPUkxJTktDSCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9DU1JfTUFKT1JMSU5LQ0hfU0hJRlQpKSAmIERNQV9DU1JfTUFKT1JMSU5LQ0hfTUFTSykKKyNkZWZpbmUgRE1BX0NTUl9CV0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhDMDAwVSkKKyNkZWZpbmUgRE1BX0NTUl9CV0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBETUFfQ1NSX0JXQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0NTUl9CV0NfU0hJRlQpKSAmIERNQV9DU1JfQldDX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfQ1NSICovCisjZGVmaW5lIERNQV9DU1JfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgQklURVJfRUxJTktOTyAtIFRDRCBCZWdpbm5pbmcgTWlub3IgTG9vcCBMaW5rLCBNYWpvciBMb29wIENvdW50IChDaGFubmVsIExpbmtpbmcgRGlzYWJsZWQpICovCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS05PX0JJVEVSX01BU0sgICAgICAgICAgICAgKDB4N0ZGRlUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS05PX0JJVEVSX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBETUFfQklURVJfRUxJTktOT19CSVRFUih4KSAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgRE1BX0JJVEVSX0VMSU5LTk9fQklURVJfU0hJRlQpKSAmIERNQV9CSVRFUl9FTElOS05PX0JJVEVSX01BU0spCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS05PX0VMSU5LX01BU0sgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS05PX0VMSU5LX1NISUZUICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LTk9fRUxJTksoeCkgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9CSVRFUl9FTElOS05PX0VMSU5LX1NISUZUKSkgJiBETUFfQklURVJfRUxJTktOT19FTElOS19NQVNLKQorCisvKiBUaGUgY291bnQgb2YgRE1BX0JJVEVSX0VMSU5LTk8gKi8KKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LTk9fQ09VTlQgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBCSVRFUl9FTElOS1lFUyAtIFRDRCBCZWdpbm5pbmcgTWlub3IgTG9vcCBMaW5rLCBNYWpvciBMb29wIENvdW50IChDaGFubmVsIExpbmtpbmcgRW5hYmxlZCkgKi8KKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LWUVTX0JJVEVSX01BU0sgICAgICAgICAgICAoMHgxRkZVKQorI2RlZmluZSBETUFfQklURVJfRUxJTktZRVNfQklURVJfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LWUVTX0JJVEVSKHgpICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9CSVRFUl9FTElOS1lFU19CSVRFUl9TSElGVCkpICYgRE1BX0JJVEVSX0VMSU5LWUVTX0JJVEVSX01BU0spCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19MSU5LQ0hfTUFTSyAgICAgICAgICAgKDB4NjAwVSkKKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LWUVTX0xJTktDSF9TSElGVCAgICAgICAgICAoOVUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19MSU5LQ0goeCkgICAgICAgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBETUFfQklURVJfRUxJTktZRVNfTElOS0NIX1NISUZUKSkgJiBETUFfQklURVJfRUxJTktZRVNfTElOS0NIX01BU0spCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19FTElOS19NQVNLICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIERNQV9CSVRFUl9FTElOS1lFU19FTElOS19TSElGVCAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LWUVTX0VMSU5LKHgpICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IERNQV9CSVRFUl9FTElOS1lFU19FTElOS19TSElGVCkpICYgRE1BX0JJVEVSX0VMSU5LWUVTX0VMSU5LX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBETUFfQklURVJfRUxJTktZRVMgKi8KKyNkZWZpbmUgRE1BX0JJVEVSX0VMSU5LWUVTX0NPVU5UICAgICAgICAgICAgICAgICAoNFUpCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBETUFfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBETUEgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBETUEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIERNQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDgwMDB1KQorLyoqIFBlcmlwaGVyYWwgRE1BIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBETUEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRE1BX1R5cGUgKilETUFfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBETUFfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRE1BX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIERNQSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgRE1BX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IERNQTAgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgRE1BIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBETUFfQ0hOX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyBETUEwX0lSUW4sIERNQTFfSVJRbiwgRE1BMl9JUlFuLCBETUEzX0lSUW4gfSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgRE1BX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRE1BTVVYIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgRE1BTVVYX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIERNQU1VWCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogRE1BTVVYIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IENIQ0ZHWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhbm5lbCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MCwgYXJyYXkgc3RlcDogMHgxICovCit9IERNQU1VWF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBETUFNVVggUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBETUFNVVhfUmVnaXN0ZXJfTWFza3MgRE1BTVVYIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDSENGRyAtIENoYW5uZWwgQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBETUFNVVhfQ0hDRkdfU09VUkNFX01BU0sgICAgICAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX1NPVVJDRV9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIERNQU1VWF9DSENGR19TT1VSQ0UoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BTVVYX0NIQ0ZHX1NPVVJDRV9TSElGVCkpICYgRE1BTVVYX0NIQ0ZHX1NPVVJDRV9NQVNLKQorI2RlZmluZSBETUFNVVhfQ0hDRkdfVFJJR19NQVNLICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX1RSSUdfU0hJRlQgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIERNQU1VWF9DSENGR19UUklHKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRE1BTVVYX0NIQ0ZHX1RSSUdfU0hJRlQpKSAmIERNQU1VWF9DSENGR19UUklHX01BU0spCisjZGVmaW5lIERNQU1VWF9DSENGR19FTkJMX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBETUFNVVhfQ0hDRkdfRU5CTF9TSElGVCAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRE1BTVVYX0NIQ0ZHX0VOQkwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBETUFNVVhfQ0hDRkdfRU5CTF9TSElGVCkpICYgRE1BTVVYX0NIQ0ZHX0VOQkxfTUFTSykKKworLyogVGhlIGNvdW50IG9mIERNQU1VWF9DSENGRyAqLworI2RlZmluZSBETUFNVVhfQ0hDRkdfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIERNQU1VWF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIERNQU1VWCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIERNQU1VWDAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIERNQU1VWDBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMjEwMDB1KQorLyoqIFBlcmlwaGVyYWwgRE1BTVVYMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgRE1BTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERNQU1VWF9UeXBlICopRE1BTVVYMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIERNQU1VWF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgeyBETUFNVVgwX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgRE1BTVVYX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICB7IERNQU1VWDAgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIERNQU1VWF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEZHUElPIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgRkdQSU9fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgRkdQSU8gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEZHUElPIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBQRE9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBEYXRhIE91dHB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19PICB1aW50MzJfdCBQU09SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBTZXQgT3V0cHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX08gIHVpbnQzMl90IFBDT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IENsZWFyIE91dHB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgX19PICB1aW50MzJfdCBQVE9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBUb2dnbGUgT3V0cHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICBfX0kgIHVpbnQzMl90IFBESVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IERhdGEgSW5wdXQgUmVnaXN0ZXIsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IFBERFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IERhdGEgRGlyZWN0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTQgKi8KK30gRkdQSU9fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRkdQSU8gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBGR1BJT19SZWdpc3Rlcl9NYXNrcyBGR1BJTyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUERPUiAtIFBvcnQgRGF0YSBPdXRwdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkdQSU9fUERPUl9QRE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEZHUElPX1BET1JfUERPX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGR1BJT19QRE9SX1BETyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRkdQSU9fUERPUl9QRE9fU0hJRlQpKSAmIEZHUElPX1BET1JfUERPX01BU0spCisKKy8qISBAbmFtZSBQU09SIC0gUG9ydCBTZXQgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEZHUElPX1BTT1JfUFRTT19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBGR1BJT19QU09SX1BUU09fU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRkdQSU9fUFNPUl9QVFNPKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEZHUElPX1BTT1JfUFRTT19TSElGVCkpICYgRkdQSU9fUFNPUl9QVFNPX01BU0spCisKKy8qISBAbmFtZSBQQ09SIC0gUG9ydCBDbGVhciBPdXRwdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkdQSU9fUENPUl9QVENPX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEZHUElPX1BDT1JfUFRDT19TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGR1BJT19QQ09SX1BUQ08oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRkdQSU9fUENPUl9QVENPX1NISUZUKSkgJiBGR1BJT19QQ09SX1BUQ09fTUFTSykKKworLyohIEBuYW1lIFBUT1IgLSBQb3J0IFRvZ2dsZSBPdXRwdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkdQSU9fUFRPUl9QVFRPX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEZHUElPX1BUT1JfUFRUT19TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGR1BJT19QVE9SX1BUVE8oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRkdQSU9fUFRPUl9QVFRPX1NISUZUKSkgJiBGR1BJT19QVE9SX1BUVE9fTUFTSykKKworLyohIEBuYW1lIFBESVIgLSBQb3J0IERhdGEgSW5wdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkdQSU9fUERJUl9QRElfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEZHUElPX1BESVJfUERJX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGR1BJT19QRElSX1BESSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgRkdQSU9fUERJUl9QRElfU0hJRlQpKSAmIEZHUElPX1BESVJfUERJX01BU0spCisKKy8qISBAbmFtZSBQRERSIC0gUG9ydCBEYXRhIERpcmVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBGR1BJT19QRERSX1BERF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgRkdQSU9fUEREUl9QRERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZHUElPX1BERFJfUEREKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBGR1BJT19QRERSX1BERF9TSElGVCkpICYgRkdQSU9fUEREUl9QRERfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEZHUElPX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogRkdQSU8gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBGR1BJT0EgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEZHUElPQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjgwMDAwMDB1KQorLyoqIFBlcmlwaGVyYWwgRkdQSU9BIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBGR1BJT0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkdQSU9fVHlwZSAqKUZHUElPQV9CQVNFKQorLyoqIFBlcmlwaGVyYWwgRkdQSU9CIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBGR1BJT0JfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEY4MDAwMDQwdSkKKy8qKiBQZXJpcGhlcmFsIEZHUElPQiBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgRkdQSU9CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZHUElPX1R5cGUgKilGR1BJT0JfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIEZHUElPQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRkdQSU9DX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGODAwMDA4MHUpCisvKiogUGVyaXBoZXJhbCBGR1BJT0MgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIEZHUElPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGR1BJT19UeXBlICopRkdQSU9DX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBGR1BJT19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgIHsgRkdQSU9BX0JBU0UsIEZHUElPQl9CQVNFLCBGR1BJT0NfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIEZHUElPX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBGR1BJT0EsIEZHUElPQiwgRkdQSU9DIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBGR1BJT19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEZURkEgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBGVEZBX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEZURkEgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEZURkEgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQ4X3QgRlNUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBGQ05GRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHgxICovCisgIF9fSSAgdWludDhfdCBGU0VDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIFNlY3VyaXR5IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MiAqLworICBfX0kgIHVpbnQ4X3QgRk9QVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBPcHRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHgzICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHg1ICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHg2ICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHg3ICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHg5ICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHhBICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHhCICovCisgIF9fSU8gdWludDhfdCBGQ0NPQkI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDhfdCBGQ0NPQkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHhEICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHhFICovCisgIF9fSU8gdWludDhfdCBGQ0NPQjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMsIG9mZnNldDogMHhGICovCisgIF9fSU8gdWludDhfdCBGUFJPVDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFByb2dyYW0gRmxhc2ggUHJvdGVjdGlvbiBSZWdpc3RlcnMsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQ4X3QgRlBST1QyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MTEgKi8KKyAgX19JTyB1aW50OF90IEZQUk9UMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUHJvZ3JhbSBGbGFzaCBQcm90ZWN0aW9uIFJlZ2lzdGVycywgb2Zmc2V0OiAweDEyICovCisgIF9fSU8gdWludDhfdCBGUFJPVDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFByb2dyYW0gRmxhc2ggUHJvdGVjdGlvbiBSZWdpc3RlcnMsIG9mZnNldDogMHgxMyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgX19JICB1aW50OF90IFhBQ0NIMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgxOCAqLworICBfX0kgIHVpbnQ4X3QgWEFDQ0gyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDE5ICovCisgIF9fSSAgdWludDhfdCBYQUNDSDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV4ZWN1dGUtb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MUEgKi8KKyAgX19JICB1aW50OF90IFhBQ0NIMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgxQiAqLworICBfX0kgIHVpbnQ4X3QgWEFDQ0wzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDFDICovCisgIF9fSSAgdWludDhfdCBYQUNDTDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEV4ZWN1dGUtb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MUQgKi8KKyAgX19JICB1aW50OF90IFhBQ0NMMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRXhlY3V0ZS1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgxRSAqLworICBfX0kgIHVpbnQ4X3QgWEFDQ0wwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDFGICovCisgIF9fSSAgdWludDhfdCBTQUNDSDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN1cGVydmlzb3Itb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JICB1aW50OF90IFNBQ0NIMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgyMSAqLworICBfX0kgIHVpbnQ4X3QgU0FDQ0gxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDIyICovCisgIF9fSSAgdWludDhfdCBTQUNDSDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN1cGVydmlzb3Itb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MjMgKi8KKyAgX19JICB1aW50OF90IFNBQ0NMMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgyNCAqLworICBfX0kgIHVpbnQ4X3QgU0FDQ0wyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycywgb2Zmc2V0OiAweDI1ICovCisgIF9fSSAgdWludDhfdCBTQUNDTDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN1cGVydmlzb3Itb25seSBBY2Nlc3MgUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MjYgKi8KKyAgX19JICB1aW50OF90IFNBQ0NMMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3VwZXJ2aXNvci1vbmx5IEFjY2VzcyBSZWdpc3RlcnMsIG9mZnNldDogMHgyNyAqLworICBfX0kgIHVpbnQ4X3QgRkFDU1M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBBY2Nlc3MgU2VnbWVudCBTaXplIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MjggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbMl07CisgIF9fSSAgdWludDhfdCBGQUNTTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZsYXNoIEFjY2VzcyBTZWdtZW50IE51bWJlciBSZWdpc3Rlciwgb2Zmc2V0OiAweDJCICovCit9IEZURkFfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gRlRGQSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEZURkFfUmVnaXN0ZXJfTWFza3MgRlRGQSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgRlNUQVQgLSBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRGQV9GU1RBVF9NR1NUQVQwX01BU0sgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9NR1NUQVQwX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRlNUQVRfTUdTVEFUMCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU1RBVF9NR1NUQVQwX1NISUZUKSkgJiBGVEZBX0ZTVEFUX01HU1RBVDBfTUFTSykKKyNkZWZpbmUgRlRGQV9GU1RBVF9GUFZJT0xfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEZURkFfRlNUQVRfRlBWSU9MX1NISUZUICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBGVEZBX0ZTVEFUX0ZQVklPTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRlNUQVRfRlBWSU9MX1NISUZUKSkgJiBGVEZBX0ZTVEFUX0ZQVklPTF9NQVNLKQorI2RlZmluZSBGVEZBX0ZTVEFUX0FDQ0VSUl9NQVNLICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9BQ0NFUlJfU0hJRlQgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEZURkFfRlNUQVRfQUNDRVJSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU1RBVF9BQ0NFUlJfU0hJRlQpKSAmIEZURkFfRlNUQVRfQUNDRVJSX01BU0spCisjZGVmaW5lIEZURkFfRlNUQVRfUkRDT0xFUlJfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBGVEZBX0ZTVEFUX1JEQ09MRVJSX1NISUZUICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9SRENPTEVSUih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZTVEFUX1JEQ09MRVJSX1NISUZUKSkgJiBGVEZBX0ZTVEFUX1JEQ09MRVJSX01BU0spCisjZGVmaW5lIEZURkFfRlNUQVRfQ0NJRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBGVEZBX0ZTVEFUX0NDSUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgRlRGQV9GU1RBVF9DQ0lGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZTVEFUX0NDSUZfU0hJRlQpKSAmIEZURkFfRlNUQVRfQ0NJRl9NQVNLKQorCisvKiEgQG5hbWUgRkNORkcgLSBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEZURkFfRkNORkdfRVJTU1VTUF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBGVEZBX0ZDTkZHX0VSU1NVU1BfU0hJRlQgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgRlRGQV9GQ05GR19FUlNTVVNQKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDTkZHX0VSU1NVU1BfU0hJRlQpKSAmIEZURkFfRkNORkdfRVJTU1VTUF9NQVNLKQorI2RlZmluZSBGVEZBX0ZDTkZHX0VSU0FSRVFfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgRlRGQV9GQ05GR19FUlNBUkVRX1NISUZUICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIEZURkFfRkNORkdfRVJTQVJFUSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ05GR19FUlNBUkVRX1NISUZUKSkgJiBGVEZBX0ZDTkZHX0VSU0FSRVFfTUFTSykKKyNkZWZpbmUgRlRGQV9GQ05GR19SRENPTExJRV9NQVNLICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIEZURkFfRkNORkdfUkRDT0xMSUVfU0hJRlQgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBGVEZBX0ZDTkZHX1JEQ09MTElFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNORkdfUkRDT0xMSUVfU0hJRlQpKSAmIEZURkFfRkNORkdfUkRDT0xMSUVfTUFTSykKKyNkZWZpbmUgRlRGQV9GQ05GR19DQ0lFX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIEZURkFfRkNORkdfQ0NJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBGVEZBX0ZDTkZHX0NDSUUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNORkdfQ0NJRV9TSElGVCkpICYgRlRGQV9GQ05GR19DQ0lFX01BU0spCisKKy8qISBAbmFtZSBGU0VDIC0gRmxhc2ggU2VjdXJpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRGQV9GU0VDX1NFQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgRlRGQV9GU0VDX1NFQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRlNFQ19TRUMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GU0VDX1NFQ19TSElGVCkpICYgRlRGQV9GU0VDX1NFQ19NQVNLKQorI2RlZmluZSBGVEZBX0ZTRUNfRlNMQUNDX01BU0sgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBGVEZBX0ZTRUNfRlNMQUNDX1NISUZUICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgRlRGQV9GU0VDX0ZTTEFDQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZTRUNfRlNMQUNDX1NISUZUKSkgJiBGVEZBX0ZTRUNfRlNMQUNDX01BU0spCisjZGVmaW5lIEZURkFfRlNFQ19NRUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBGVEZBX0ZTRUNfTUVFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgRlRGQV9GU0VDX01FRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZTRUNfTUVFTl9TSElGVCkpICYgRlRGQV9GU0VDX01FRU5fTUFTSykKKyNkZWZpbmUgRlRGQV9GU0VDX0tFWUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIEZURkFfRlNFQ19LRVlFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBGVEZBX0ZTRUNfS0VZRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRlNFQ19LRVlFTl9TSElGVCkpICYgRlRGQV9GU0VDX0tFWUVOX01BU0spCisKKy8qISBAbmFtZSBGT1BUIC0gRmxhc2ggT3B0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEZURkFfRk9QVF9PUFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZPUFRfT1BUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GT1BUX09QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZPUFRfT1BUX1NISUZUKSkgJiBGVEZBX0ZPUFRfT1BUX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjMgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0IzX0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CM19DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjNfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CM19DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjNfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09CMiAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjJfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0IyX0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09CMl9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0IyX0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09CMl9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0IxIC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CMV9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjFfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0IxX0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQjFfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0IxX0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjAgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0IwX0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CMF9DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjBfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CMF9DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjBfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09CNyAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjdfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0I3X0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09CN19DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0I3X0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09CN19DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0I2IC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CNl9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjZfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0I2X0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQjZfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0I2X0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQjUgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0I1X0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CNV9DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjVfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CNV9DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQjVfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09CNCAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjRfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0I0X0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09CNF9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0I0X0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09CNF9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0JCIC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09CQl9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQkJfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0JCX0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQkJfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0JCX0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGQ0NPQkEgLSBGbGFzaCBDb21tb24gQ29tbWFuZCBPYmplY3QgUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRkNDT0JBX0NDT0JuX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZDQ09CQV9DQ09Cbl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQkFfQ0NPQm4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZDQ09CQV9DQ09Cbl9TSElGVCkpICYgRlRGQV9GQ0NPQkFfQ0NPQm5fTUFTSykKKworLyohIEBuYW1lIEZDQ09COSAtIEZsYXNoIENvbW1vbiBDb21tYW5kIE9iamVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRlRGQV9GQ0NPQjlfQ0NPQm5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkNDT0I5X0NDT0JuX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZDQ09COV9DQ09Cbih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkNDT0I5X0NDT0JuX1NISUZUKSkgJiBGVEZBX0ZDQ09COV9DQ09Cbl9NQVNLKQorCisvKiEgQG5hbWUgRkNDT0I4IC0gRmxhc2ggQ29tbW9uIENvbW1hbmQgT2JqZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX0ZDQ09COF9DQ09Cbl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9GQ0NPQjhfQ0NPQm5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfRkNDT0I4X0NDT0JuKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9GQ0NPQjhfQ0NPQm5fU0hJRlQpKSAmIEZURkFfRkNDT0I4X0NDT0JuX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDMgLSBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRlBST1QzX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZQUk9UM19QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDNfUFJPVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZQUk9UM19QUk9UX1NISUZUKSkgJiBGVEZBX0ZQUk9UM19QUk9UX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDIgLSBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRlBST1QyX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZQUk9UMl9QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDJfUFJPVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZQUk9UMl9QUk9UX1NISUZUKSkgJiBGVEZBX0ZQUk9UMl9QUk9UX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDEgLSBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRlBST1QxX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZQUk9UMV9QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDFfUFJPVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZQUk9UMV9QUk9UX1NISUZUKSkgJiBGVEZBX0ZQUk9UMV9QUk9UX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDAgLSBQcm9ncmFtIEZsYXNoIFByb3RlY3Rpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIEZURkFfRlBST1QwX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBGVEZBX0ZQUk9UMF9QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgRlRGQV9GUFJPVDBfUFJPVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBGVEZBX0ZQUk9UMF9QUk9UX1NISUZUKSkgJiBGVEZBX0ZQUk9UMF9QUk9UX01BU0spCisKKy8qISBAbmFtZSBYQUNDSDMgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NIM19YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDSDNfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0gzX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDSDNfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0gzX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDSDIgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NIMl9YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDSDJfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0gyX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDSDJfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0gyX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDSDEgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NIMV9YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDSDFfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0gxX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDSDFfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0gxX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDSDAgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NIMF9YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDSDBfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0gwX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDSDBfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0gwX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDTDMgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NMM19YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDTDNfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0wzX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDTDNfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0wzX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDTDIgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NMMl9YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDTDJfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0wyX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDTDJfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0wyX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDTDEgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NMMV9YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDTDFfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0wxX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDTDFfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0wxX1hBX01BU0spCisKKy8qISBAbmFtZSBYQUNDTDAgLSBFeGVjdXRlLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1hBQ0NMMF9YQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9YQUNDTDBfWEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfWEFDQ0wwX1hBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9YQUNDTDBfWEFfU0hJRlQpKSAmIEZURkFfWEFDQ0wwX1hBX01BU0spCisKKy8qISBAbmFtZSBTQUNDSDMgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NIM19TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDSDNfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0gzX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDSDNfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0gzX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDSDIgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NIMl9TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDSDJfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0gyX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDSDJfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0gyX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDSDEgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NIMV9TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDSDFfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0gxX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDSDFfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0gxX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDSDAgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NIMF9TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDSDBfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0gwX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDSDBfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0gwX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDTDMgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NMM19TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDTDNfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0wzX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDTDNfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0wzX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDTDIgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NMMl9TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDTDJfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0wyX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDTDJfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0wyX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDTDEgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NMMV9TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDTDFfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0wxX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDTDFfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0wxX1NBX01BU0spCisKKy8qISBAbmFtZSBTQUNDTDAgLSBTdXBlcnZpc29yLW9ubHkgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBGVEZBX1NBQ0NMMF9TQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgRlRGQV9TQUNDTDBfU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEZURkFfU0FDQ0wwX1NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgRlRGQV9TQUNDTDBfU0FfU0hJRlQpKSAmIEZURkFfU0FDQ0wwX1NBX01BU0spCisKKy8qISBAbmFtZSBGQUNTUyAtIEZsYXNoIEFjY2VzcyBTZWdtZW50IFNpemUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRGQV9GQUNTU19TR1NJWkVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkFDU1NfU0dTSVpFX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZBQ1NTX1NHU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkFDU1NfU0dTSVpFX1NISUZUKSkgJiBGVEZBX0ZBQ1NTX1NHU0laRV9NQVNLKQorCisvKiEgQG5hbWUgRkFDU04gLSBGbGFzaCBBY2Nlc3MgU2VnbWVudCBOdW1iZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRGQV9GQUNTTl9OVU1TR19NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIEZURkFfRkFDU05fTlVNU0dfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBGVEZBX0ZBQ1NOX05VTVNHKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEZURkFfRkFDU05fTlVNU0dfU0hJRlQpKSAmIEZURkFfRkFDU05fTlVNU0dfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEZURkFfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBGVEZBIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgRlRGQSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRlRGQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAyMDAwMHUpCisvKiogUGVyaXBoZXJhbCBGVEZBIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBGVEZBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlRGQV9UeXBlICopRlRGQV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEZURkEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBGVEZBX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRlRGQV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBGVEZBIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBGVEZBX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRlRGQSB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBGVEZBIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBGVEZBX0NPTU1BTkRfQ09NUExFVEVfSVJRUyAgICAgICAgICAgICAgIHsgRlRGQV9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBGVEZBX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gR0VORlNLIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgR0VORlNLX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEdFTkZTSyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogR0VORlNLIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBJUlFfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSVJRIENPTlRST0wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgRVZFTlRfVE1SOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVWRU5UIFRJTUVSLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFQxX0NNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMSBDT01QQVJFLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IFQyX0NNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMiBDT01QQVJFLCBvZmZzZXQ6IDB4QyAqLworICBfX0kgIHVpbnQzMl90IFRJTUVTVEFNUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUSU1FU1RBTVAsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IFhDVlJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUUkFOU0NFSVZFUiBDT05UUk9MLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JICB1aW50MzJfdCBYQ1ZSX1NUUzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgU1RBVFVTLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBYQ1ZSX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgQ09ORklHVVJBVElPTiwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgQ0hBTk5FTF9OVU07ICAgICAgICAgICAgICAgICAgICAgICAvKio8IENIQU5ORUwgTlVNQkVSLCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JTyB1aW50MzJfdCBUWF9QT1dFUjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNNSVQgUE9XRVIsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgQ09OVFJPTCwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl8wOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5FVFdPUksgQUREUkVTUyAwLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSXzE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTkVUV09SSyBBRERSRVNTIDEsIG9mZnNldDogMHgzMCAqLworICBfX0lPIHVpbnQzMl90IE5UV19BRFJfMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBORVRXT1JLIEFERFJFU1MgMiwgb2Zmc2V0OiAweDM0ICovCisgIF9fSU8gdWludDMyX3QgTlRXX0FEUl8zOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5FVFdPUksgQUREUkVTUyAzLCBvZmZzZXQ6IDB4MzggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9XQVRFUk1BUks7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkVDRUlWRSBXQVRFUk1BUkssIG9mZnNldDogMHgzQyAqLworICBfX0lPIHVpbnQzMl90IERTTV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEU00gQ09OVFJPTCwgb2Zmc2V0OiAweDQwICovCisgIF9fSSAgdWludDMyX3QgUEFSVF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBUlQgSUQsIG9mZnNldDogMHg0NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsyNF07CisgIF9fSU8gdWludDMyX3QgUEFDS0VUX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBQ0tFVCBDT05GSUdVUkFUSU9OLCBvZmZzZXQ6IDB4NjAgKi8KKyAgX19JTyB1aW50MzJfdCBIMF9DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSDAgQ09ORklHVVJBVElPTiwgb2Zmc2V0OiAweDY0ICovCisgIF9fSU8gdWludDMyX3QgSDFfQ0ZHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEgxIENPTkZJR1VSQVRJT04sIG9mZnNldDogMHg2OCAqLworICBfX0lPIHVpbnQzMl90IENSQ19DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDUkMgQ09ORklHVVJBVElPTiwgb2Zmc2V0OiAweDZDICovCisgIF9fSU8gdWludDMyX3QgQ1JDX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENSQyBJTklUSUFMSVpBVElPTiwgb2Zmc2V0OiAweDcwICovCisgIF9fSU8gdWludDMyX3QgQ1JDX1BPTFk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENSQyBQT0xZTk9NSUFMLCBvZmZzZXQ6IDB4NzQgKi8KKyAgX19JTyB1aW50MzJfdCBDUkNfWE9SX09VVDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ1JDIFhPUiBPVVQsIG9mZnNldDogMHg3OCAqLworICBfX0lPIHVpbnQzMl90IFdISVRFTl9DRkc7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBXSElURU5FUiBDT05GSUdVUkFUSU9OLCBvZmZzZXQ6IDB4N0MgKi8KKyAgX19JTyB1aW50MzJfdCBXSElURU5fUE9MWTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgV0hJVEVORVIgUE9MWU5PTUlBTCwgb2Zmc2V0OiAweDgwICovCisgIF9fSU8gdWludDMyX3QgV0hJVEVOX1NaX1RIUjsgICAgICAgICAgICAgICAgICAgICAvKio8IFdISVRFTkVSIFNJWkUgVEhSRVNIT0xELCBvZmZzZXQ6IDB4ODQgKi8KKyAgX19JTyB1aW50MzJfdCBCSVRSQVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQklUIFJBVEUsIG9mZnNldDogMHg4OCAqLworICBfX0lPIHVpbnQzMl90IFBCX1BBUlRJVElPTjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQQUNLRVQgQlVGRkVSIFBBUlRJVElPTiBQT0lOVCwgb2Zmc2V0OiAweDhDICovCit9IEdFTkZTS19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBHRU5GU0sgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBHRU5GU0tfUmVnaXN0ZXJfTWFza3MgR0VORlNLIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBJUlFfQ1RSTCAtIElSUSBDT05UUk9MICovCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9NQVNLICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfU0VRX0VORF9JUlEoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1NFUV9FTkRfSVJRX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfU0VRX0VORF9JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9NQVNLICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1RYX0lSUV9TSElGVCAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UWF9JUlEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9SWF9JUlFfTUFTSyAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9SWF9JUlFfU0hJRlQgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1JYX0lSUV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1JYX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfTUFTSyAgICAgICAgICgweDhVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfU0hJRlQgICAgICAgICgzVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX05UV19BRFJfSVJRKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9OVFdfQURSX0lSUV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX05UV19BRFJfSVJRX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfTUFTSyAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX1NISUZUICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QxX0lSUSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9NQVNLICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMl9JUlFfU0hJRlQgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDJfSVJRKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfTUFTSyAgICAgICgweDQwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX1NISUZUICAgICAoNlUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfTUFTSyAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1dBS0VfSVJRX1NISUZUICAgICAgICAgICAoN1UpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9XQUtFX0lSUSh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9XQUtFX0lSUV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9NQVNLICAgICgweDEwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX1NISUZUICAgKDhVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX01BU0sgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1RTTV9JUlFfU0hJRlQgICAgICAgICAgICAoOVUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUV9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1RTTV9JUlFfTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1NFUV9FTkRfSVJRX0VOX01BU0sgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9TSElGVCAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1NFUV9FTkRfSVJRX0VOKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9TRVFfRU5EX0lSUV9FTl9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX1NFUV9FTkRfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UWF9JUlFfRU5fTUFTSyAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX0VOX1NISUZUICAgICAgICAgICgxN1UpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UWF9JUlFfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfVFhfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9SWF9JUlFfRU5fTUFTSyAgICAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX0VOX1NISUZUICAgICAgICAgICgxOFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9SWF9JUlFfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfUlhfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9OVFdfQURSX0lSUV9FTl9NQVNLICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fU0hJRlQgICAgICgxOVUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9OVFdfQURSX0lSUV9FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfTlRXX0FEUl9JUlFfRU5fU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9OVFdfQURSX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDFfSVJRX0VOX01BU0sgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfRU5fU0hJRlQgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QxX0lSUV9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfRU5fU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9UMV9JUlFfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1QyX0lSUV9FTl9NQVNLICAgICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfVDJfSVJRX0VOX1NISUZUICAgICAgICAgICgyMVUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UMl9JUlFfRU4oeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfVDJfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfVDJfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9QTExfVU5MT0NLX0lSUV9FTl9NQVNLICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOX1NISUZUICAoMjJVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1BMTF9VTkxPQ0tfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfUExMX1VOTE9DS19JUlFfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1dBS0VfSVJRX0VOX01BU0sgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfRU5fU0hJRlQgICAgICAgICgyM1UpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9XQUtFX0lSUV9FTih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfV0FLRV9JUlFfRU5fU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9XQUtFX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTl9NQVNLICgweDEwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTl9TSElGVCAoMjRVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfUlhfV0FURVJNQVJLX0lSUV9FTih4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX1JYX1dBVEVSTUFSS19JUlFfRU5fU0hJRlQpKSAmIEdFTkZTS19JUlFfQ1RSTF9SWF9XQVRFUk1BUktfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX0VOX01BU0sgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX0VOX1NISUZUICAgICAgICAgKDI1VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX1RTTV9JUlFfRU4oeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9UU01fSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfVFNNX0lSUV9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfR0VORVJJQ19GU0tfSVJRX0VOX01BU0sgICgweDQwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfR0VORVJJQ19GU0tfSVJRX0VOX1NISUZUICgyNlUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9HRU5FUklDX0ZTS19JUlFfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfSVJRX0NUUkxfR0VORVJJQ19GU0tfSVJRX0VOX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfR0VORVJJQ19GU0tfSVJRX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9DUkNfSUdOT1JFX01BU0sgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19JUlFfQ1RSTF9DUkNfSUdOT1JFX1NISUZUICAgICAgICAgKDI3VSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX0NSQ19JR05PUkUoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19JUlFfQ1RSTF9DUkNfSUdOT1JFX1NISUZUKSkgJiBHRU5GU0tfSVJRX0NUUkxfQ1JDX0lHTk9SRV9NQVNLKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfQ1JDX1ZBTElEX01BU0sgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0lSUV9DVFJMX0NSQ19WQUxJRF9TSElGVCAgICAgICAgICAoMzFVKQorI2RlZmluZSBHRU5GU0tfSVJRX0NUUkxfQ1JDX1ZBTElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0lSUV9DVFJMX0NSQ19WQUxJRF9TSElGVCkpICYgR0VORlNLX0lSUV9DVFJMX0NSQ19WQUxJRF9NQVNLKQorCisvKiEgQG5hbWUgRVZFTlRfVE1SIC0gRVZFTlQgVElNRVIgKi8KKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfTUFTSyAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVIoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX1NISUZUKSkgJiBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9NQVNLKQorI2RlZmluZSBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9NQVNLICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9TSElGVCAgICAgICgyNFUpCisjZGVmaW5lIEdFTkZTS19FVkVOVF9UTVJfRVZFTlRfVE1SX0xEKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRF9TSElGVCkpICYgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfTUFTSykKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX01BU0sgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX1NISUZUICAgICAoMjVVKQorI2RlZmluZSBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9BREQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX1NISUZUKSkgJiBHRU5GU0tfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfTUFTSykKKworLyohIEBuYW1lIFQxX0NNUCAtIFQxIENPTVBBUkUgKi8KKyNkZWZpbmUgR0VORlNLX1QxX0NNUF9UMV9DTVBfTUFTSyAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfVDFfQ01QX1QxX0NNUF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1QxX0NNUF9UMV9DTVAoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19UMV9DTVBfVDFfQ01QX1NISUZUKSkgJiBHRU5GU0tfVDFfQ01QX1QxX0NNUF9NQVNLKQorI2RlZmluZSBHRU5GU0tfVDFfQ01QX1QxX0NNUF9FTl9NQVNLICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfVDFfQ01QX1QxX0NNUF9FTl9TSElGVCAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIEdFTkZTS19UMV9DTVBfVDFfQ01QX0VOKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfVDFfQ01QX1QxX0NNUF9FTl9TSElGVCkpICYgR0VORlNLX1QxX0NNUF9UMV9DTVBfRU5fTUFTSykKKworLyohIEBuYW1lIFQyX0NNUCAtIFQyIENPTVBBUkUgKi8KKyNkZWZpbmUgR0VORlNLX1QyX0NNUF9UMl9DTVBfTUFTSyAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfVDJfQ01QX1QyX0NNUF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1QyX0NNUF9UMl9DTVAoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19UMl9DTVBfVDJfQ01QX1NISUZUKSkgJiBHRU5GU0tfVDJfQ01QX1QyX0NNUF9NQVNLKQorI2RlZmluZSBHRU5GU0tfVDJfQ01QX1QyX0NNUF9FTl9NQVNLICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfVDJfQ01QX1QyX0NNUF9FTl9TSElGVCAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIEdFTkZTS19UMl9DTVBfVDJfQ01QX0VOKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfVDJfQ01QX1QyX0NNUF9FTl9TSElGVCkpICYgR0VORlNLX1QyX0NNUF9UMl9DTVBfRU5fTUFTSykKKworLyohIEBuYW1lIFRJTUVTVEFNUCAtIFRJTUVTVEFNUCAqLworI2RlZmluZSBHRU5GU0tfVElNRVNUQU1QX1RJTUVTVEFNUF9NQVNLICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIEdFTkZTS19USU1FU1RBTVBfVElNRVNUQU1QX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfVElNRVNUQU1QX1RJTUVTVEFNUCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1RJTUVTVEFNUF9USU1FU1RBTVBfU0hJRlQpKSAmIEdFTkZTS19USU1FU1RBTVBfVElNRVNUQU1QX01BU0spCisKKy8qISBAbmFtZSBYQ1ZSX0NUUkwgLSBUUkFOU0NFSVZFUiBDT05UUk9MICovCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NUUkxfU0VRQ01EX01BU0sgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NUUkxfU0VRQ01EX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX1NFUUNNRCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ1RSTF9TRVFDTURfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX0NUUkxfU0VRQ01EX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NUUkxfQ01EREVDX0NTX01BU0sgICAgICAgICAgKDB4NzAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NUUkxfQ01EREVDX0NTX1NISUZUICAgICAgICAgKDI0VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ1RSTF9DTURERUNfQ1MoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NUUkxfQ01EREVDX0NTX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DVFJMX0NNRERFQ19DU19NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX1hDVlJfQlVTWV9NQVNLICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ1RSTF9YQ1ZSX0JVU1lfU0hJRlQgICAgICAgICAoMzFVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DVFJMX1hDVlJfQlVTWSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ1RSTF9YQ1ZSX0JVU1lfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX0NUUkxfWENWUl9CVVNZX01BU0spCisKKy8qISBAbmFtZSBYQ1ZSX1NUUyAtIFRSQU5TQ0VJVkVSIFNUQVRVUyAqLworI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9NQVNLICAgICgweDFVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9TSElGVCAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QxX1BFTkQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19UWF9TVEFSVF9UMV9QRU5EX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDFfUEVORF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9NQVNLICAgICgweDJVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9TSElGVCAgICgxVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX1NUQVJUX1QyX1BFTkQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19UWF9TVEFSVF9UMl9QRU5EX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfVFhfU1RBUlRfVDJfUEVORF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTVVQX01BU0sgICAgICAgICgweDRVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTVVQX1NISUZUICAgICAgICgyVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1VUCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9XQVJNVVBfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9XQVJNVVBfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTX01BU0sgICAgICAoMHg4VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1BST0dSRVNTX1NISUZUICAgICAoM1UpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTUyh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfVFhfSU5fUFJPR1JFU1NfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9QUk9HUkVTU19NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTUROX01BU0sgICAgICAgICgweDEwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1RYX0lOX1dBUk1ETl9TSElGVCAgICAgICAoNFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19UWF9JTl9XQVJNRE4oeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTUROX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfVFhfSU5fV0FSTUROX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EX01BU0sgICAgKDB4MjBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORF9TSElGVCAgICg1VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QxX1BFTkQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19SWF9TVEFSVF9UMV9QRU5EX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDFfUEVORF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORF9NQVNLICAgICgweDQwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkRfU0hJRlQgICAoNlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVEFSVF9UMl9QRU5EKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfUlhfU1RBUlRfVDJfUEVORF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JYX1NUQVJUX1QyX1BFTkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9NQVNLICAgICAoMHg4MFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QxX1BFTkRfU0hJRlQgICAgKDdVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RPUF9UMV9QRU5EKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDFfUEVORF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EX01BU0sgICAgICgweDEwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9TVE9QX1QyX1BFTkRfU0hJRlQgICAgKDhVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfU1RPUF9UMl9QRU5EKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JYX1NUT1BfVDJfUEVORF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTVVQX01BU0sgICAgICAgICgweDIwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9XQVJNVVBfU0hJRlQgICAgICAgKDlVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTVVQKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1VUF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1dBUk1VUF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fU0VBUkNIX01BU0sgICAgICAgICgweDQwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfU0hJRlQgICAgICAgKDEwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1NFQVJDSCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9TRUFSQ0hfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JYX0lOX1BST0dSRVNTX01BU0sgICAgICAoMHg4MDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1NfU0hJRlQgICAgICgxMVUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTUyh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfUlhfSU5fUFJPR1JFU1NfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9QUk9HUkVTU19NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTUROX01BU0sgICAgICAgICgweDEwMDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTUROX1NISUZUICAgICAgICgxMlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SWF9JTl9XQVJNRE4oeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTUROX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfUlhfSU5fV0FSTUROX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19MUUlfVkFMSURfTUFTSyAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19MUUlfVkFMSURfU0hJRlQgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0xRSV9WQUxJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19MUUlfVkFMSURfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX1NUU19MUUlfVkFMSURfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0NSQ19WQUxJRF9NQVNLICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0NSQ19WQUxJRF9TSElGVCAgICAgICAgICAoMTVVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfQ1JDX1ZBTElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX0NSQ19WQUxJRF9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX0NSQ19WQUxJRF9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfUlNTSV9NQVNLICAgICAgICAgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX1NUU19SU1NJX1NISUZUICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX1JTU0koeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX1NUU19SU1NJX1NISUZUKSkgJiBHRU5GU0tfWENWUl9TVFNfUlNTSV9NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfTFFJX01BU0sgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfU1RTX0xRSV9TSElGVCAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBHRU5GU0tfWENWUl9TVFNfTFFJKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfU1RTX0xRSV9TSElGVCkpICYgR0VORlNLX1hDVlJfU1RTX0xRSV9NQVNLKQorCisvKiEgQG5hbWUgWENWUl9DRkcgLSBUUkFOU0NFSVZFUiBDT05GSUdVUkFUSU9OICovCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19UWF9XSElURU5fRElTX01BU0sgICAgICAgKDB4MVUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19UWF9XSElURU5fRElTX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfVFhfV0hJVEVOX0RJUyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ0ZHX1RYX1dISVRFTl9ESVNfU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX0NGR19UWF9XSElURU5fRElTX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfTUFTSyAgICAgKDB4MlUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19SWF9ERVdISVRFTl9ESVNfU0hJRlQgICAgKDFVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUlhfREVXSElURU5fRElTKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ0ZHX1JYX0RFV0hJVEVOX0RJU19TSElGVCkpICYgR0VORlNLX1hDVlJfQ0ZHX1JYX0RFV0hJVEVOX0RJU19NQVNLKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfU1dfQ1JDX0VOX01BU0sgICAgICAgICAgICgweDRVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfU1dfQ1JDX0VOX1NISUZUICAgICAgICAgICgyVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1NXX0NSQ19FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19YQ1ZSX0NGR19TV19DUkNfRU5fU0hJRlQpKSAmIEdFTkZTS19YQ1ZSX0NGR19TV19DUkNfRU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaX01BU0sgICAgICAgICAoMHg3MFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19QUkVBTUJMRV9TWl9TSElGVCAgICAgICAgKDRVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUFJFQU1CTEVfU1ooeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ0ZHX1BSRUFNQkxFX1NaX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DRkdfUFJFQU1CTEVfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1RYX1dBUk1VUF9NQVNLICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1RYX1dBUk1VUF9TSElGVCAgICAgICAgICAoOFUpCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19UWF9XQVJNVVAoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfWENWUl9DRkdfVFhfV0FSTVVQX1NISUZUKSkgJiBHRU5GU0tfWENWUl9DRkdfVFhfV0FSTVVQX01BU0spCisjZGVmaW5lIEdFTkZTS19YQ1ZSX0NGR19SWF9XQVJNVVBfTUFTSyAgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1hDVlJfQ0ZHX1JYX1dBUk1VUF9TSElGVCAgICAgICAgICAoMTZVKQorI2RlZmluZSBHRU5GU0tfWENWUl9DRkdfUlhfV0FSTVVQKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1hDVlJfQ0ZHX1JYX1dBUk1VUF9TSElGVCkpICYgR0VORlNLX1hDVlJfQ0ZHX1JYX1dBUk1VUF9NQVNLKQorCisvKiEgQG5hbWUgQ0hBTk5FTF9OVU0gLSBDSEFOTkVMIE5VTUJFUiAqLworI2RlZmluZSBHRU5GU0tfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU1fTUFTSyAgICAgICgweDdGVSkKKyNkZWZpbmUgR0VORlNLX0NIQU5ORUxfTlVNX0NIQU5ORUxfTlVNX1NISUZUICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19DSEFOTkVMX05VTV9DSEFOTkVMX05VTSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ0hBTk5FTF9OVU1fQ0hBTk5FTF9OVU1fU0hJRlQpKSAmIEdFTkZTS19DSEFOTkVMX05VTV9DSEFOTkVMX05VTV9NQVNLKQorCisvKiEgQG5hbWUgVFhfUE9XRVIgLSBUUkFOU01JVCBQT1dFUiAqLworI2RlZmluZSBHRU5GU0tfVFhfUE9XRVJfVFhfUE9XRVJfTUFTSyAgICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgR0VORlNLX1RYX1BPV0VSX1RYX1BPV0VSX1NISUZUICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19UWF9QT1dFUl9UWF9QT1dFUih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfVFhfUE9XRVJfVFhfUE9XRVJfU0hJRlQpKSAmIEdFTkZTS19UWF9QT1dFUl9UWF9QT1dFUl9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl9DVFJMIC0gTkVUV09SSyBBRERSRVNTIENPTlRST0wgKi8KKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX0VOX01BU0sgICAgICAoMHhGVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX0VOX1NISUZUICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfRU5fU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9FTl9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIX01BU0sgICAgICgweEYwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX01DSF9TSElGVCAgICAoNFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9NQ0goeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfTUNIX01BU0spCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjBfU1pfTUFTSyAgICAgKDB4MzAwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMF9TWl9TSElGVCAgICAoOFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjBfU1ooeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIwX1NaX01BU0spCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjFfU1pfTUFTSyAgICAgKDB4QzAwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWl9TSElGVCAgICAoMTBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIxX1NaKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWl9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSMV9TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX01BU0sgICAgICgweDMwMDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX1NISUZUICAgICgxMlUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjJfU1ooeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFIyX1NaX01BU0spCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfTUFTSyAgICAgKDB4QzAwMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfU0hJRlQgICAgKDE0VSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSM19TWih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUjNfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjBfTUFTSyAgICAoMHg3MDAwMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjAoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIwX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMF9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9NQVNLICAgICgweDcwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIxX1NISUZUICAgKDIwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjEoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIxX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMV9NQVNLKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMl9NQVNLICAgICgweDcwMDAwMDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMl9TSElGVCAgICgyNFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIyKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSMl9TSElGVCkpICYgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjJfTUFTSykKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjNfTUFTSyAgICAoMHg3MDAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzX1NISUZUICAgKDI4VSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfQ1RSTF9OVFdfQURSX1RIUjMoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSX0NUUkxfTlRXX0FEUl9USFIzX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl9DVFJMX05UV19BRFJfVEhSM19NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl8wIC0gTkVUV09SSyBBRERSRVNTIDAgKi8KKyNkZWZpbmUgR0VORlNLX05UV19BRFJfMF9OVFdfQURSXzBfTUFTSyAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzBfTlRXX0FEUl8wX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8wX05UV19BRFJfMCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfMF9OVFdfQURSXzBfU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSXzBfTlRXX0FEUl8wX01BU0spCisKKy8qISBAbmFtZSBOVFdfQURSXzEgLSBORVRXT1JLIEFERFJFU1MgMSAqLworI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8xX05UV19BRFJfMV9NQVNLICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfMV9OVFdfQURSXzFfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzFfTlRXX0FEUl8xKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfTlRXX0FEUl8xX05UV19BRFJfMV9TSElGVCkpICYgR0VORlNLX05UV19BRFJfMV9OVFdfQURSXzFfTUFTSykKKworLyohIEBuYW1lIE5UV19BRFJfMiAtIE5FVFdPUksgQUREUkVTUyAyICovCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzJfTlRXX0FEUl8yX01BU0sgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8yX05UV19BRFJfMl9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX05UV19BRFJfMl9OVFdfQURSXzIoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19OVFdfQURSXzJfTlRXX0FEUl8yX1NISUZUKSkgJiBHRU5GU0tfTlRXX0FEUl8yX05UV19BRFJfMl9NQVNLKQorCisvKiEgQG5hbWUgTlRXX0FEUl8zIC0gTkVUV09SSyBBRERSRVNTIDMgKi8KKyNkZWZpbmUgR0VORlNLX05UV19BRFJfM19OVFdfQURSXzNfTUFTSyAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdFTkZTS19OVFdfQURSXzNfTlRXX0FEUl8zX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfTlRXX0FEUl8zX05UV19BRFJfMyh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX05UV19BRFJfM19OVFdfQURSXzNfU0hJRlQpKSAmIEdFTkZTS19OVFdfQURSXzNfTlRXX0FEUl8zX01BU0spCisKKy8qISBAbmFtZSBSWF9XQVRFUk1BUksgLSBSRUNFSVZFIFdBVEVSTUFSSyAqLworI2RlZmluZSBHRU5GU0tfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSS19NQVNLICAgICgweDFGRkZVKQorI2RlZmluZSBHRU5GU0tfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSS19TSElGVCAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1JYX1dBVEVSTUFSS19SWF9XQVRFUk1BUksoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19SWF9XQVRFUk1BUktfUlhfV0FURVJNQVJLX1NISUZUKSkgJiBHRU5GU0tfUlhfV0FURVJNQVJLX1JYX1dBVEVSTUFSS19NQVNLKQorI2RlZmluZSBHRU5GU0tfUlhfV0FURVJNQVJLX0JZVEVfQ09VTlRFUl9NQVNLICAgICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVJfU0hJRlQgICAoMTZVKQorI2RlZmluZSBHRU5GU0tfUlhfV0FURVJNQVJLX0JZVEVfQ09VTlRFUih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1JYX1dBVEVSTUFSS19CWVRFX0NPVU5URVJfU0hJRlQpKSAmIEdFTkZTS19SWF9XQVRFUk1BUktfQllURV9DT1VOVEVSX01BU0spCisKKy8qISBAbmFtZSBEU01fQ1RSTCAtIERTTSBDT05UUk9MICovCisjZGVmaW5lIEdFTkZTS19EU01fQ1RSTF9HRU5FUklDX0ZTS19TTEVFUF9FTl9NQVNLICgweDFVKQorI2RlZmluZSBHRU5GU0tfRFNNX0NUUkxfR0VORVJJQ19GU0tfU0xFRVBfRU5fU0hJRlQgKDBVKQorI2RlZmluZSBHRU5GU0tfRFNNX0NUUkxfR0VORVJJQ19GU0tfU0xFRVBfRU4oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0RTTV9DVFJMX0dFTkVSSUNfRlNLX1NMRUVQX0VOX1NISUZUKSkgJiBHRU5GU0tfRFNNX0NUUkxfR0VORVJJQ19GU0tfU0xFRVBfRU5fTUFTSykKKworLyohIEBuYW1lIFBBUlRfSUQgLSBQQVJUIElEICovCisjZGVmaW5lIEdFTkZTS19QQVJUX0lEX1BBUlRfSURfTUFTSyAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBHRU5GU0tfUEFSVF9JRF9QQVJUX0lEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1BBUlRfSURfUEFSVF9JRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQVJUX0lEX1BBUlRfSURfU0hJRlQpKSAmIEdFTkZTS19QQVJUX0lEX1BBUlRfSURfTUFTSykKKworLyohIEBuYW1lIFBBQ0tFVF9DRkcgLSBQQUNLRVQgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfU1pfTUFTSyAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX1NaX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9TWih4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfU1pfU0hJRlQpKSAmIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfQklUX09SRF9NQVNLICAgICgweDIwVSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0JJVF9PUkRfU0hJRlQgICAoNVUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9CSVRfT1JEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfQklUX09SRF9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0JJVF9PUkRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfU1lOQ19BRERSX1NaX01BU0sgICAgICAoMHhDMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX1NZTkNfQUREUl9TWl9TSElGVCAgICAgKDZVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19TWU5DX0FERFJfU1ooeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1BBQ0tFVF9DRkdfU1lOQ19BRERSX1NaX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19TWU5DX0FERFJfU1pfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0FESl9NQVNLICAgICAgICAoMHgzRjAwVSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0FESl9TSElGVCAgICAgICAoOFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9BREooeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfQURKX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfQURKX01BU0spCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9GQUlMX01BU0sgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9GQUlMX1NISUZUICAgICAgKDE1VSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfTEVOR1RIX0ZBSUwoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQUNLRVRfQ0ZHX0xFTkdUSF9GQUlMX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19MRU5HVEhfRkFJTF9NQVNLKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMF9TWl9NQVNLICAgICAgICAgICAgICgweDFGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gwX1NaX1NISUZUICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDBfU1ooeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQUNLRVRfQ0ZHX0gwX1NaX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19IMF9TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMF9GQUlMX01BU0sgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gwX0ZBSUxfU0hJRlQgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDBfRkFJTCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQUNLRVRfQ0ZHX0gwX0ZBSUxfU0hJRlQpKSAmIEdFTkZTS19QQUNLRVRfQ0ZHX0gwX0ZBSUxfTUFTSykKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDFfU1pfTUFTSyAgICAgICAgICAgICAoMHgxRjAwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19QQUNLRVRfQ0ZHX0gxX1NaX1NISUZUICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDFfU1ooeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQUNLRVRfQ0ZHX0gxX1NaX1NISUZUKSkgJiBHRU5GU0tfUEFDS0VUX0NGR19IMV9TWl9NQVNLKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMV9GQUlMX01BU0sgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1BBQ0tFVF9DRkdfSDFfRkFJTF9TSElGVCAgICAgICAgICAoMzFVKQorI2RlZmluZSBHRU5GU0tfUEFDS0VUX0NGR19IMV9GQUlMKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1BBQ0tFVF9DRkdfSDFfRkFJTF9TSElGVCkpICYgR0VORlNLX1BBQ0tFVF9DRkdfSDFfRkFJTF9NQVNLKQorCisvKiEgQG5hbWUgSDBfQ0ZHIC0gSDAgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBHRU5GU0tfSDBfQ0ZHX0gwX01BVENIX01BU0sgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBHRU5GU0tfSDBfQ0ZHX0gwX01BVENIX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0gwX0NGR19IMF9NQVRDSCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19IMF9DRkdfSDBfTUFUQ0hfU0hJRlQpKSAmIEdFTkZTS19IMF9DRkdfSDBfTUFUQ0hfTUFTSykKKyNkZWZpbmUgR0VORlNLX0gwX0NGR19IMF9NQVNLX01BU0sgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19IMF9DRkdfSDBfTUFTS19TSElGVCAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX0gwX0NGR19IMF9NQVNLKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19IMF9DRkdfSDBfTUFTS19TSElGVCkpICYgR0VORlNLX0gwX0NGR19IMF9NQVNLX01BU0spCisKKy8qISBAbmFtZSBIMV9DRkcgLSBIMSBDT05GSUdVUkFUSU9OICovCisjZGVmaW5lIEdFTkZTS19IMV9DRkdfSDFfTUFUQ0hfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIEdFTkZTS19IMV9DRkdfSDFfTUFUQ0hfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfSDFfQ0ZHX0gxX01BVENIKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0gxX0NGR19IMV9NQVRDSF9TSElGVCkpICYgR0VORlNLX0gxX0NGR19IMV9NQVRDSF9NQVNLKQorI2RlZmluZSBHRU5GU0tfSDFfQ0ZHX0gxX01BU0tfTUFTSyAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0gxX0NGR19IMV9NQVNLX1NISUZUICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBHRU5GU0tfSDFfQ0ZHX0gxX01BU0soeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0gxX0NGR19IMV9NQVNLX1NISUZUKSkgJiBHRU5GU0tfSDFfQ0ZHX0gxX01BU0tfTUFTSykKKworLyohIEBuYW1lIENSQ19DRkcgLSBDUkMgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfU1pfTUFTSyAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfU1pfU0hJRlQgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1NaKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfQ0ZHX0NSQ19TWl9TSElGVCkpICYgR0VORlNLX0NSQ19DRkdfQ1JDX1NaX01BU0spCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19TVEFSVF9CWVRFX01BU0sgICAgICAgKDB4RjAwVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1NUQVJUX0JZVEVfU0hJRlQgICAgICAoOFUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19TVEFSVF9CWVRFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfQ1JDX0NGR19DUkNfU1RBUlRfQllURV9TSElGVCkpICYgR0VORlNLX0NSQ19DRkdfQ1JDX1NUQVJUX0JZVEVfTUFTSykKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1JFRl9JTl9NQVNLICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfSU5fU0hJRlQgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1JFRl9JTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfSU5fU0hJRlQpKSAmIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfSU5fTUFTSykKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1JFRl9PVVRfTUFTSyAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfT1VUX1NISUZUICAgICAgICAgKDE3VSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX1JFRl9PVVQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfQ0ZHX0NSQ19SRUZfT1VUX1NISUZUKSkgJiBHRU5GU0tfQ1JDX0NGR19DUkNfUkVGX09VVF9NQVNLKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfQllURV9PUkRfTUFTSyAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19DRkdfQ1JDX0JZVEVfT1JEX1NISUZUICAgICAgICAoMThVKQorI2RlZmluZSBHRU5GU0tfQ1JDX0NGR19DUkNfQllURV9PUkQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0NSQ19DRkdfQ1JDX0JZVEVfT1JEX1NISUZUKSkgJiBHRU5GU0tfQ1JDX0NGR19DUkNfQllURV9PUkRfTUFTSykKKworLyohIEBuYW1lIENSQ19JTklUIC0gQ1JDIElOSVRJQUxJWkFUSU9OICovCisjZGVmaW5lIEdFTkZTS19DUkNfSU5JVF9DUkNfU0VFRF9NQVNLICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfQ1JDX0lOSVRfQ1JDX1NFRURfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19JTklUX0NSQ19TRUVEKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfSU5JVF9DUkNfU0VFRF9TSElGVCkpICYgR0VORlNLX0NSQ19JTklUX0NSQ19TRUVEX01BU0spCisKKy8qISBAbmFtZSBDUkNfUE9MWSAtIENSQyBQT0xZTk9NSUFMICovCisjZGVmaW5lIEdFTkZTS19DUkNfUE9MWV9DUkNfUE9MWV9NQVNLICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfQ1JDX1BPTFlfQ1JDX1BPTFlfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19QT0xZX0NSQ19QT0xZKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfUE9MWV9DUkNfUE9MWV9TSElGVCkpICYgR0VORlNLX0NSQ19QT0xZX0NSQ19QT0xZX01BU0spCisKKy8qISBAbmFtZSBDUkNfWE9SX09VVCAtIENSQyBYT1IgT1VUICovCisjZGVmaW5lIEdFTkZTS19DUkNfWE9SX09VVF9DUkNfWE9SX09VVF9NQVNLICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHRU5GU0tfQ1JDX1hPUl9PVVRfQ1JDX1hPUl9PVVRfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX0NSQ19YT1JfT1VUX0NSQ19YT1JfT1VUKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19DUkNfWE9SX09VVF9DUkNfWE9SX09VVF9TSElGVCkpICYgR0VORlNLX0NSQ19YT1JfT1VUX0NSQ19YT1JfT1VUX01BU0spCisKKy8qISBAbmFtZSBXSElURU5fQ0ZHIC0gV0hJVEVORVIgQ09ORklHVVJBVElPTiAqLworI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fU1RBUlRfTUFTSyAgICAgICgweDNVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fU1RBUlRfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NUQVJUKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9TVEFSVF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NUQVJUX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9FTkRfTUFTSyAgICAgICAgKDB4NFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9FTkRfU0hJRlQgICAgICAgKDJVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fRU5EKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0VORF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0VORF9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fQjRfQ1JDX01BU0sgICAgICgweDhVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fQjRfQ1JDX1NISUZUICAgICgzVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0I0X0NSQyh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9CNF9DUkNfU0hJRlQpKSAmIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9CNF9DUkNfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BPTFlfVFlQRV9NQVNLICAoMHgxMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QT0xZX1RZUEVfU0hJRlQgKDRVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUE9MWV9UWVBFKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BPTFlfVFlQRV9TSElGVCkpICYgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BPTFlfVFlQRV9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUkVGX0lOX01BU0sgICAgICgweDIwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1JFRl9JTl9TSElGVCAgICAoNVUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9SRUZfSU4oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUkVGX0lOX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUkVGX0lOX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9QQVlMT0FEX1JFSU5JVF9NQVNLICgweDQwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BBWUxPQURfUkVJTklUX1NISUZUICg2VSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BBWUxPQURfUkVJTklUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1BBWUxPQURfUkVJTklUX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fUEFZTE9BRF9SRUlOSVRfTUFTSykKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NJWkVfTUFTSyAgICAgICAoMHhGMDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fU0laRV9TSElGVCAgICAgICg4VSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX1NJWkUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9TSVpFX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fU0laRV9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0VOX01BU0sgICAgICgweDEwMDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0VOX1NISUZUICAgICgxMlUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX01BTkNIRVNURVJfRU4oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0VOX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0VOX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX01BTkNIRVNURVJfSU5WX01BU0sgICAgKDB4MjAwMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX01BTkNIRVNURVJfSU5WX1NISUZUICAgKDEzVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfTUFOQ0hFU1RFUl9JTlYoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX01BTkNIRVNURVJfSU5WX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX0lOVl9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX1NUQVJUX01BU0sgICgweDQwMDBVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX1NUQVJUX1NISUZUICgxNFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX01BTkNIRVNURVJfU1RBUlQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX1NUQVJUX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19NQU5DSEVTVEVSX1NUQVJUX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9JTklUX01BU0sgICAgICAgKDB4MUZGMDAwMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9JTklUX1NISUZUICAgICAgKDE2VSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9DRkdfV0hJVEVOX0lOSVQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fQ0ZHX1dISVRFTl9JTklUX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX0NGR19XSElURU5fSU5JVF9NQVNLKQorCisvKiEgQG5hbWUgV0hJVEVOX1BPTFkgLSBXSElURU5FUiBQT0xZTk9NSUFMICovCisjZGVmaW5lIEdFTkZTS19XSElURU5fUE9MWV9XSElURU5fUE9MWV9NQVNLICAgICAgKDB4MUZGVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9QT0xZX1dISVRFTl9QT0xZX1NISUZUICAgICAoMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fUE9MWV9XSElURU5fUE9MWSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX1BPTFlfV0hJVEVOX1BPTFlfU0hJRlQpKSAmIEdFTkZTS19XSElURU5fUE9MWV9XSElURU5fUE9MWV9NQVNLKQorCisvKiEgQG5hbWUgV0hJVEVOX1NaX1RIUiAtIFdISVRFTkVSIFNJWkUgVEhSRVNIT0xEICovCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX1dISVRFTl9TWl9USFJfTUFTSyAgKDB4RkZGVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9TWl9USFJfV0hJVEVOX1NaX1RIUl9TSElGVCAoMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX1dISVRFTl9TWl9USFIoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHRU5GU0tfV0hJVEVOX1NaX1RIUl9XSElURU5fU1pfVEhSX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX1NaX1RIUl9XSElURU5fU1pfVEhSX01BU0spCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX0xFTkdUSF9NQVhfTUFTSyAgICAgKDB4N0YwMDAwVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9TWl9USFJfTEVOR1RIX01BWF9TSElGVCAgICAoMTZVKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX1NaX1RIUl9MRU5HVEhfTUFYKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX1dISVRFTl9TWl9USFJfTEVOR1RIX01BWF9TSElGVCkpICYgR0VORlNLX1dISVRFTl9TWl9USFJfTEVOR1RIX01BWF9NQVNLKQorI2RlZmluZSBHRU5GU0tfV0hJVEVOX1NaX1RIUl9SRUNfQkFEX1BLVF9NQVNLICAgICgweDgwMDAwMFUpCisjZGVmaW5lIEdFTkZTS19XSElURU5fU1pfVEhSX1JFQ19CQURfUEtUX1NISUZUICAgKDIzVSkKKyNkZWZpbmUgR0VORlNLX1dISVRFTl9TWl9USFJfUkVDX0JBRF9QS1QoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19XSElURU5fU1pfVEhSX1JFQ19CQURfUEtUX1NISUZUKSkgJiBHRU5GU0tfV0hJVEVOX1NaX1RIUl9SRUNfQkFEX1BLVF9NQVNLKQorCisvKiEgQG5hbWUgQklUUkFURSAtIEJJVCBSQVRFICovCisjZGVmaW5lIEdFTkZTS19CSVRSQVRFX0JJVFJBVEVfTUFTSyAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIEdFTkZTS19CSVRSQVRFX0JJVFJBVEVfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHRU5GU0tfQklUUkFURV9CSVRSQVRFKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR0VORlNLX0JJVFJBVEVfQklUUkFURV9TSElGVCkpICYgR0VORlNLX0JJVFJBVEVfQklUUkFURV9NQVNLKQorCisvKiEgQG5hbWUgUEJfUEFSVElUSU9OIC0gUEFDS0VUIEJVRkZFUiBQQVJUSVRJT04gUE9JTlQgKi8KKyNkZWZpbmUgR0VORlNLX1BCX1BBUlRJVElPTl9QQl9QQVJUSVRJT05fTUFTSyAgICAoMHg3RkZVKQorI2RlZmluZSBHRU5GU0tfUEJfUEFSVElUSU9OX1BCX1BBUlRJVElPTl9TSElGVCAgICgwVSkKKyNkZWZpbmUgR0VORlNLX1BCX1BBUlRJVElPTl9QQl9QQVJUSVRJT04oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdFTkZTS19QQl9QQVJUSVRJT05fUEJfUEFSVElUSU9OX1NISUZUKSkgJiBHRU5GU0tfUEJfUEFSVElUSU9OX1BCX1BBUlRJVElPTl9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgR0VORlNLX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogR0VORlNLIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgR0VORlNLIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBHRU5GU0tfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVGMDAwdSkKKy8qKiBQZXJpcGhlcmFsIEdFTkZTSyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgR0VORlNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdFTkZTS19UeXBlICopR0VORlNLX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgR0VORlNLIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgR0VORlNLX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICB7IEdFTkZTS19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBHRU5GU0sgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIEdFTkZTS19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgeyBHRU5GU0sgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEdFTkZTS19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEdQSU8gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBHUElPX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEdQSU8gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIEdQSU8gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFBET1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IERhdGEgT3V0cHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX08gIHVpbnQzMl90IFBTT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IFNldCBPdXRwdXQgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fTyAgdWludDMyX3QgUENPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvcnQgQ2xlYXIgT3V0cHV0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX08gIHVpbnQzMl90IFBUT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3J0IFRvZ2dsZSBPdXRwdXQgUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCisgIF9fSSAgdWludDMyX3QgUERJUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvcnQgRGF0YSBJbnB1dCBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgUEREUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBvcnQgRGF0YSBEaXJlY3Rpb24gUmVnaXN0ZXIsIG9mZnNldDogMHgxNCAqLworfSBHUElPX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEdQSU8gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBHUElPX1JlZ2lzdGVyX01hc2tzIEdQSU8gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBET1IgLSBQb3J0IERhdGEgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEdQSU9fUERPUl9QRE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHUElPX1BET1JfUERPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR1BJT19QRE9SX1BETyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdQSU9fUERPUl9QRE9fU0hJRlQpKSAmIEdQSU9fUERPUl9QRE9fTUFTSykKKworLyohIEBuYW1lIFBTT1IgLSBQb3J0IFNldCBPdXRwdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19QU09SX1BUU09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdQSU9fUFNPUl9QVFNPX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHUElPX1BTT1JfUFRTTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR1BJT19QU09SX1BUU09fU0hJRlQpKSAmIEdQSU9fUFNPUl9QVFNPX01BU0spCisKKy8qISBAbmFtZSBQQ09SIC0gUG9ydCBDbGVhciBPdXRwdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19QQ09SX1BUQ09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIEdQSU9fUENPUl9QVENPX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBHUElPX1BDT1JfUFRDTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgR1BJT19QQ09SX1BUQ09fU0hJRlQpKSAmIEdQSU9fUENPUl9QVENPX01BU0spCisKKy8qISBAbmFtZSBQVE9SIC0gUG9ydCBUb2dnbGUgT3V0cHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIEdQSU9fUFRPUl9QVFRPX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBHUElPX1BUT1JfUFRUT19TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgR1BJT19QVE9SX1BUVE8oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IEdQSU9fUFRPUl9QVFRPX1NISUZUKSkgJiBHUElPX1BUT1JfUFRUT19NQVNLKQorCisvKiEgQG5hbWUgUERJUiAtIFBvcnQgRGF0YSBJbnB1dCBSZWdpc3RlciAqLworI2RlZmluZSBHUElPX1BESVJfUERJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR1BJT19QRElSX1BESV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdQSU9fUERJUl9QREkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHUElPX1BESVJfUERJX1NISUZUKSkgJiBHUElPX1BESVJfUERJX01BU0spCisKKy8qISBAbmFtZSBQRERSIC0gUG9ydCBEYXRhIERpcmVjdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBHUElPX1BERFJfUEREX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgR1BJT19QRERSX1BERF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEdQSU9fUEREUl9QREQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBHUElPX1BERFJfUEREX1NISUZUKSkgJiBHUElPX1BERFJfUEREX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBHUElPX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogR1BJTyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIEdQSU9BIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBHUElPQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMEZGMDAwdSkKKy8qKiBQZXJpcGhlcmFsIEdQSU9BIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBHUElPQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoR1BJT19UeXBlICopR1BJT0FfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIEdQSU9CIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBHUElPQl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMEZGMDQwdSkKKy8qKiBQZXJpcGhlcmFsIEdQSU9CIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBHUElPQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoR1BJT19UeXBlICopR1BJT0JfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIEdQSU9DIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBHUElPQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMEZGMDgwdSkKKy8qKiBQZXJpcGhlcmFsIEdQSU9DIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBHUElPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoR1BJT19UeXBlICopR1BJT0NfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBHUElPIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgR1BJT19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICB7IEdQSU9BX0JBU0UsIEdQSU9CX0JBU0UsIEdQSU9DX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIEdQSU9fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBHUElPQSwgR1BJT0IsIEdQSU9DIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBHUElPX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gSTJDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgSTJDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIEkyQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogSTJDIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IEExOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIEFkZHJlc3MgUmVnaXN0ZXIgMSwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50OF90IEY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIEZyZXF1ZW5jeSBEaXZpZGVyIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MSAqLworICBfX0lPIHVpbnQ4X3QgQzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgQ29udHJvbCBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MiAqLworICBfX0lPIHVpbnQ4X3QgUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgU3RhdHVzIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MyAqLworICBfX0lPIHVpbnQ4X3QgRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJMkMgRGF0YSBJL08gcmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBDMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBDb250cm9sIFJlZ2lzdGVyIDIsIG9mZnNldDogMHg1ICovCisgIF9fSU8gdWludDhfdCBGTFQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBQcm9ncmFtbWFibGUgSW5wdXQgR2xpdGNoIEZpbHRlciBSZWdpc3Rlciwgb2Zmc2V0OiAweDYgKi8KKyAgX19JTyB1aW50OF90IFJBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIFJhbmdlIEFkZHJlc3MgcmVnaXN0ZXIsIG9mZnNldDogMHg3ICovCisgIF9fSU8gdWludDhfdCBTTUI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBTTUJ1cyBDb250cm9sIGFuZCBTdGF0dXMgcmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDhfdCBBMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBBZGRyZXNzIFJlZ2lzdGVyIDIsIG9mZnNldDogMHg5ICovCisgIF9fSU8gdWludDhfdCBTTFRIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBTQ0wgTG93IFRpbWVvdXQgUmVnaXN0ZXIgSGlnaCwgb2Zmc2V0OiAweEEgKi8KKyAgX19JTyB1aW50OF90IFNMVEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSTJDIFNDTCBMb3cgVGltZW91dCBSZWdpc3RlciBMb3csIG9mZnNldDogMHhCICovCisgIF9fSU8gdWludDhfdCBTMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEkyQyBTdGF0dXMgcmVnaXN0ZXIgMiwgb2Zmc2V0OiAweEMgKi8KK30gSTJDX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIEkyQyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIEkyQ19SZWdpc3Rlcl9NYXNrcyBJMkMgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEExIC0gSTJDIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBJMkNfQTFfQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZFVSkKKyNkZWZpbmUgSTJDX0ExX0FEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEkyQ19BMV9BRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0ExX0FEX1NISUZUKSkgJiBJMkNfQTFfQURfTUFTSykKKworLyohIEBuYW1lIEYgLSBJMkMgRnJlcXVlbmN5IERpdmlkZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJDX0ZfSUNSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIEkyQ19GX0lDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfRl9JQ1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19GX0lDUl9TSElGVCkpICYgSTJDX0ZfSUNSX01BU0spCisjZGVmaW5lIEkyQ19GX01VTFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBJMkNfRl9NVUxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgSTJDX0ZfTVVMVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfRl9NVUxUX1NISUZUKSkgJiBJMkNfRl9NVUxUX01BU0spCisKKy8qISBAbmFtZSBDMSAtIEkyQyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgSTJDX0MxX0RNQUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgSTJDX0MxX0RNQUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEkyQ19DMV9ETUFFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MxX0RNQUVOX1NISUZUKSkgJiBJMkNfQzFfRE1BRU5fTUFTSykKKyNkZWZpbmUgSTJDX0MxX1dVRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgSTJDX0MxX1dVRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEkyQ19DMV9XVUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MxX1dVRU5fU0hJRlQpKSAmIEkyQ19DMV9XVUVOX01BU0spCisjZGVmaW5lIEkyQ19DMV9SU1RBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEkyQ19DMV9SU1RBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBJMkNfQzFfUlNUQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMV9SU1RBX1NISUZUKSkgJiBJMkNfQzFfUlNUQV9NQVNLKQorI2RlZmluZSBJMkNfQzFfVFhBS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBJMkNfQzFfVFhBS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgSTJDX0MxX1RYQUsoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzFfVFhBS19TSElGVCkpICYgSTJDX0MxX1RYQUtfTUFTSykKKyNkZWZpbmUgSTJDX0MxX1RYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIEkyQ19DMV9UWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBJMkNfQzFfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMV9UWF9TSElGVCkpICYgSTJDX0MxX1RYX01BU0spCisjZGVmaW5lIEkyQ19DMV9NU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBJMkNfQzFfTVNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgSTJDX0MxX01TVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzFfTVNUX1NISUZUKSkgJiBJMkNfQzFfTVNUX01BU0spCisjZGVmaW5lIEkyQ19DMV9JSUNJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBJMkNfQzFfSUlDSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgSTJDX0MxX0lJQ0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzFfSUlDSUVfU0hJRlQpKSAmIEkyQ19DMV9JSUNJRV9NQVNLKQorI2RlZmluZSBJMkNfQzFfSUlDRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgSTJDX0MxX0lJQ0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEkyQ19DMV9JSUNFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MxX0lJQ0VOX1NISUZUKSkgJiBJMkNfQzFfSUlDRU5fTUFTSykKKworLyohIEBuYW1lIFMgLSBJMkMgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19TX1JYQUtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIEkyQ19TX1JYQUtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfU19SWEFLKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TX1JYQUtfU0hJRlQpKSAmIEkyQ19TX1JYQUtfTUFTSykKKyNkZWZpbmUgSTJDX1NfSUlDSUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgSTJDX1NfSUlDSUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEkyQ19TX0lJQ0lGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NfSUlDSUZfU0hJRlQpKSAmIEkyQ19TX0lJQ0lGX01BU0spCisjZGVmaW5lIEkyQ19TX1NSV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIEkyQ19TX1NSV19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBJMkNfU19TUlcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TX1NSV19TSElGVCkpICYgSTJDX1NfU1JXX01BU0spCisjZGVmaW5lIEkyQ19TX1JBTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIEkyQ19TX1JBTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBJMkNfU19SQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TX1JBTV9TSElGVCkpICYgSTJDX1NfUkFNX01BU0spCisjZGVmaW5lIEkyQ19TX0FSQkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBJMkNfU19BUkJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgSTJDX1NfQVJCTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19BUkJMX1NISUZUKSkgJiBJMkNfU19BUkJMX01BU0spCisjZGVmaW5lIEkyQ19TX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBJMkNfU19CVVNZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgSTJDX1NfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19CVVNZX1NISUZUKSkgJiBJMkNfU19CVVNZX01BU0spCisjZGVmaW5lIEkyQ19TX0lBQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBJMkNfU19JQUFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgSTJDX1NfSUFBUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19JQUFTX1NISUZUKSkgJiBJMkNfU19JQUFTX01BU0spCisjZGVmaW5lIEkyQ19TX1RDRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBJMkNfU19UQ0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgSTJDX1NfVENGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU19UQ0ZfU0hJRlQpKSAmIEkyQ19TX1RDRl9NQVNLKQorCisvKiEgQG5hbWUgRCAtIEkyQyBEYXRhIEkvTyByZWdpc3RlciAqLworI2RlZmluZSBJMkNfRF9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgSTJDX0RfREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEkyQ19EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0RfREFUQV9TSElGVCkpICYgSTJDX0RfREFUQV9NQVNLKQorCisvKiEgQG5hbWUgQzIgLSBJMkMgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIEkyQ19DMl9BRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N1UpCisjZGVmaW5lIEkyQ19DMl9BRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfQzJfQUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMl9BRF9TSElGVCkpICYgSTJDX0MyX0FEX01BU0spCisjZGVmaW5lIEkyQ19DMl9STUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIEkyQ19DMl9STUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBJMkNfQzJfUk1FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMl9STUVOX1NISUZUKSkgJiBJMkNfQzJfUk1FTl9NQVNLKQorI2RlZmluZSBJMkNfQzJfU0JSQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgSTJDX0MyX1NCUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEkyQ19DMl9TQlJDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0MyX1NCUkNfU0hJRlQpKSAmIEkyQ19DMl9TQlJDX01BU0spCisjZGVmaW5lIEkyQ19DMl9IRFJTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBJMkNfQzJfSERSU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgSTJDX0MyX0hEUlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzJfSERSU19TSElGVCkpICYgSTJDX0MyX0hEUlNfTUFTSykKKyNkZWZpbmUgSTJDX0MyX0FERVhUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIEkyQ19DMl9BREVYVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBJMkNfQzJfQURFWFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19DMl9BREVYVF9TSElGVCkpICYgSTJDX0MyX0FERVhUX01BU0spCisjZGVmaW5lIEkyQ19DMl9HQ0FFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBJMkNfQzJfR0NBRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgSTJDX0MyX0dDQUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfQzJfR0NBRU5fU0hJRlQpKSAmIEkyQ19DMl9HQ0FFTl9NQVNLKQorCisvKiEgQG5hbWUgRkxUIC0gSTJDIFByb2dyYW1tYWJsZSBJbnB1dCBHbGl0Y2ggRmlsdGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19GTFRfRkxUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIEkyQ19GTFRfRkxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBJMkNfRkxUX0ZMVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19GTFRfRkxUX1NISUZUKSkgJiBJMkNfRkxUX0ZMVF9NQVNLKQorI2RlZmluZSBJMkNfRkxUX1NUQVJURl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgSTJDX0ZMVF9TVEFSVEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIEkyQ19GTFRfU1RBUlRGKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0ZMVF9TVEFSVEZfU0hJRlQpKSAmIEkyQ19GTFRfU1RBUlRGX01BU0spCisjZGVmaW5lIEkyQ19GTFRfU1NJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBJMkNfRkxUX1NTSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgSTJDX0ZMVF9TU0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfRkxUX1NTSUVfU0hJRlQpKSAmIEkyQ19GTFRfU1NJRV9NQVNLKQorI2RlZmluZSBJMkNfRkxUX1NUT1BGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgSTJDX0ZMVF9TVE9QRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIEkyQ19GTFRfU1RPUEYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0ZMVF9TVE9QRl9TSElGVCkpICYgSTJDX0ZMVF9TVE9QRl9NQVNLKQorI2RlZmluZSBJMkNfRkxUX1NIRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgSTJDX0ZMVF9TSEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEkyQ19GTFRfU0hFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0ZMVF9TSEVOX1NISUZUKSkgJiBJMkNfRkxUX1NIRU5fTUFTSykKKworLyohIEBuYW1lIFJBIC0gSTJDIFJhbmdlIEFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJDX1JBX1JBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRVUpCisjZGVmaW5lIEkyQ19SQV9SQURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBJMkNfUkFfUkFEKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19SQV9SQURfU0hJRlQpKSAmIEkyQ19SQV9SQURfTUFTSykKKworLyohIEBuYW1lIFNNQiAtIEkyQyBTTUJ1cyBDb250cm9sIGFuZCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJDX1NNQl9TSFRGMklFX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgSTJDX1NNQl9TSFRGMklFX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEkyQ19TTUJfU0hURjJJRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NNQl9TSFRGMklFX1NISUZUKSkgJiBJMkNfU01CX1NIVEYySUVfTUFTSykKKyNkZWZpbmUgSTJDX1NNQl9TSFRGMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgSTJDX1NNQl9TSFRGMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEkyQ19TTUJfU0hURjIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NNQl9TSFRGMl9TSElGVCkpICYgSTJDX1NNQl9TSFRGMl9NQVNLKQorI2RlZmluZSBJMkNfU01CX1NIVEYxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBJMkNfU01CX1NIVEYxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgSTJDX1NNQl9TSFRGMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU01CX1NIVEYxX1NISUZUKSkgJiBJMkNfU01CX1NIVEYxX01BU0spCisjZGVmaW5lIEkyQ19TTUJfU0xURl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIEkyQ19TTUJfU0xURl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBJMkNfU01CX1NMVEYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TTUJfU0xURl9TSElGVCkpICYgSTJDX1NNQl9TTFRGX01BU0spCisjZGVmaW5lIEkyQ19TTUJfVENLU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBJMkNfU01CX1RDS1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgSTJDX1NNQl9UQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU01CX1RDS1NFTF9TSElGVCkpICYgSTJDX1NNQl9UQ0tTRUxfTUFTSykKKyNkZWZpbmUgSTJDX1NNQl9TSUlDQUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIEkyQ19TTUJfU0lJQ0FFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBJMkNfU01CX1NJSUNBRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IEkyQ19TTUJfU0lJQ0FFTl9TSElGVCkpICYgSTJDX1NNQl9TSUlDQUVOX01BU0spCisjZGVmaW5lIEkyQ19TTUJfQUxFUlRFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBJMkNfU01CX0FMRVJURU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgSTJDX1NNQl9BTEVSVEVOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU01CX0FMRVJURU5fU0hJRlQpKSAmIEkyQ19TTUJfQUxFUlRFTl9NQVNLKQorI2RlZmluZSBJMkNfU01CX0ZBQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgSTJDX1NNQl9GQUNLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIEkyQ19TTUJfRkFDSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NNQl9GQUNLX1NISUZUKSkgJiBJMkNfU01CX0ZBQ0tfTUFTSykKKworLyohIEBuYW1lIEEyIC0gSTJDIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJMkNfQTJfU0FEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZFVSkKKyNkZWZpbmUgSTJDX0EyX1NBRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIEkyQ19BMl9TQUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX0EyX1NBRF9TSElGVCkpICYgSTJDX0EyX1NBRF9NQVNLKQorCisvKiEgQG5hbWUgU0xUSCAtIEkyQyBTQ0wgTG93IFRpbWVvdXQgUmVnaXN0ZXIgSGlnaCAqLworI2RlZmluZSBJMkNfU0xUSF9TU0xUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgSTJDX1NMVEhfU1NMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIEkyQ19TTFRIX1NTTFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgSTJDX1NMVEhfU1NMVF9TSElGVCkpICYgSTJDX1NMVEhfU1NMVF9NQVNLKQorCisvKiEgQG5hbWUgU0xUTCAtIEkyQyBTQ0wgTG93IFRpbWVvdXQgUmVnaXN0ZXIgTG93ICovCisjZGVmaW5lIEkyQ19TTFRMX1NTTFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBJMkNfU0xUTF9TU0xUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSTJDX1NMVExfU1NMVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfU0xUTF9TU0xUX1NISUZUKSkgJiBJMkNfU0xUTF9TU0xUX01BU0spCisKKy8qISBAbmFtZSBTMiAtIEkyQyBTdGF0dXMgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBJMkNfUzJfRU1QVFlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBJMkNfUzJfRU1QVFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSTJDX1MyX0VNUFRZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfUzJfRU1QVFlfU0hJRlQpKSAmIEkyQ19TMl9FTVBUWV9NQVNLKQorI2RlZmluZSBJMkNfUzJfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBJMkNfUzJfRVJST1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgSTJDX1MyX0VSUk9SKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfUzJfRVJST1JfU0hJRlQpKSAmIEkyQ19TMl9FUlJPUl9NQVNLKQorI2RlZmluZSBJMkNfUzJfREZFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBJMkNfUzJfREZFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgSTJDX1MyX0RGRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBJMkNfUzJfREZFTl9TSElGVCkpICYgSTJDX1MyX0RGRU5fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEkyQ19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIEkyQyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIEkyQzAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEkyQzBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNjYwMDB1KQorLyoqIFBlcmlwaGVyYWwgSTJDMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgSTJDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEkyQ19UeXBlICopSTJDMF9CQVNFKQorLyoqIFBlcmlwaGVyYWwgSTJDMSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgSTJDMV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA2NzAwMHUpCisvKiogUGVyaXBoZXJhbCBJMkMxIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBJMkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSTJDX1R5cGUgKilJMkMxX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgSTJDX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEkyQzBfQkFTRSwgSTJDMV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBJMkMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIEkyQ19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBJMkMwLCBJMkMxIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIEkyQyBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgSTJDX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEkyQzBfSVJRbiwgSTJDMV9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBJMkNfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMTFdVIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTExXVV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBMTFdVIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBMTFdVIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IFBFMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTExXVSBQaW4gRW5hYmxlIDEgcmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBQRTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgUGluIEVuYWJsZSAyIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MSAqLworICBfX0lPIHVpbnQ4X3QgUEUzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMTFdVIFBpbiBFbmFibGUgMyByZWdpc3Rlciwgb2Zmc2V0OiAweDIgKi8KKyAgX19JTyB1aW50OF90IFBFNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTExXVSBQaW4gRW5hYmxlIDQgcmVnaXN0ZXIsIG9mZnNldDogMHgzICovCisgIF9fSU8gdWludDhfdCBNRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgTW9kdWxlIEVuYWJsZSByZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50OF90IEYxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTExXVSBGbGFnIDEgcmVnaXN0ZXIsIG9mZnNldDogMHg1ICovCisgIF9fSU8gdWludDhfdCBGMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgRmxhZyAyIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4NiAqLworICBfX0kgIHVpbnQ4X3QgRjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMTFdVIEZsYWcgMyByZWdpc3Rlciwgb2Zmc2V0OiAweDcgKi8KKyAgX19JTyB1aW50OF90IEZJTFQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTExXVSBQaW4gRmlsdGVyIDEgcmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDhfdCBGSUxUMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExMV1UgUGluIEZpbHRlciAyIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4OSAqLworfSBMTFdVX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIExMV1UgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBMTFdVX1JlZ2lzdGVyX01hc2tzIExMV1UgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBFMSAtIExMV1UgUGluIEVuYWJsZSAxIHJlZ2lzdGVyICovCisjZGVmaW5lIExMV1VfUEUxX1dVUEUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIExMV1VfUEUxX1dVUEUwX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUxX1dVUEUwX1NISUZUKSkgJiBMTFdVX1BFMV9XVVBFMF9NQVNLKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFMV9XVVBFMV9TSElGVCkpICYgTExXVV9QRTFfV1VQRTFfTUFTSykKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIExMV1VfUEUxX1dVUEUyX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFMih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUxX1dVUEUyX1NISUZUKSkgJiBMTFdVX1BFMV9XVVBFMl9NQVNLKQorI2RlZmluZSBMTFdVX1BFMV9XVVBFM19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEMwVSkKKyNkZWZpbmUgTExXVV9QRTFfV1VQRTNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIExMV1VfUEUxX1dVUEUzKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTFfV1VQRTNfU0hJRlQpKSAmIExMV1VfUEUxX1dVUEUzX01BU0spCisKKy8qISBAbmFtZSBQRTIgLSBMTFdVIFBpbiBFbmFibGUgMiByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX1BFMl9XVVBFNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBMTFdVX1BFMl9XVVBFNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFMl9XVVBFNF9TSElGVCkpICYgTExXVV9QRTJfV1VQRTRfTUFTSykKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExMV1VfUEUyX1dVUEU1KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTJfV1VQRTVfU0hJRlQpKSAmIExMV1VfUEUyX1dVUEU1X01BU0spCisjZGVmaW5lIExMV1VfUEUyX1dVUEU2X01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MzBVKQorI2RlZmluZSBMTFdVX1BFMl9XVVBFNl9TSElGVCAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTYoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFMl9XVVBFNl9TSElGVCkpICYgTExXVV9QRTJfV1VQRTZfTUFTSykKKyNkZWZpbmUgTExXVV9QRTJfV1VQRTdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIExMV1VfUEUyX1dVUEU3X1NISUZUICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX1BFMl9XVVBFNyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUyX1dVUEU3X1NISUZUKSkgJiBMTFdVX1BFMl9XVVBFN19NQVNLKQorCisvKiEgQG5hbWUgUEUzIC0gTExXVSBQaW4gRW5hYmxlIDMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9QRTNfV1VQRThfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgTExXVV9QRTNfV1VQRThfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfUEUzX1dVUEU4KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTNfV1VQRThfU0hJRlQpKSAmIExMV1VfUEUzX1dVUEU4X01BU0spCisjZGVmaW5lIExMV1VfUEUzX1dVUEU5X01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4Q1UpCisjZGVmaW5lIExMV1VfUEUzX1dVUEU5X1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMTFdVX1BFM19XVVBFOSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUzX1dVUEU5X1NISUZUKSkgJiBMTFdVX1BFM19XVVBFOV9NQVNLKQorI2RlZmluZSBMTFdVX1BFM19XVVBFMTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDMwVSkKKyNkZWZpbmUgTExXVV9QRTNfV1VQRTEwX1NISUZUICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExMV1VfUEUzX1dVUEUxMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTNfV1VQRTEwX1NISUZUKSkgJiBMTFdVX1BFM19XVVBFMTBfTUFTSykKKyNkZWZpbmUgTExXVV9QRTNfV1VQRTExX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIExMV1VfUEUzX1dVUEUxMV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX1BFM19XVVBFMTEoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEUzX1dVUEUxMV9TSElGVCkpICYgTExXVV9QRTNfV1VQRTExX01BU0spCisKKy8qISBAbmFtZSBQRTQgLSBMTFdVIFBpbiBFbmFibGUgNCByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX1BFNF9XVVBFMTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTEyKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFNF9XVVBFMTJfU0hJRlQpKSAmIExMV1VfUEU0X1dVUEUxMl9NQVNLKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTNfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTEzKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX1BFNF9XVVBFMTNfU0hJRlQpKSAmIExMV1VfUEU0X1dVUEUxM19NQVNLKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDMwVSkKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTE0X1NISUZUICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExMV1VfUEU0X1dVUEUxNCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9QRTRfV1VQRTE0X1NISUZUKSkgJiBMTFdVX1BFNF9XVVBFMTRfTUFTSykKKyNkZWZpbmUgTExXVV9QRTRfV1VQRTE1X01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIExMV1VfUEU0X1dVUEUxNV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX1BFNF9XVVBFMTUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfUEU0X1dVUEUxNV9TSElGVCkpICYgTExXVV9QRTRfV1VQRTE1X01BU0spCisKKy8qISBAbmFtZSBNRSAtIExMV1UgTW9kdWxlIEVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX01FX1dVTUUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMTFdVX01FX1dVTUUwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUUwX1NISUZUKSkgJiBMTFdVX01FX1dVTUUwX01BU0spCisjZGVmaW5lIExMV1VfTUVfV1VNRTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMTFdVX01FX1dVTUUxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfTUVfV1VNRTFfU0hJRlQpKSAmIExMV1VfTUVfV1VNRTFfTUFTSykKKyNkZWZpbmUgTExXVV9NRV9XVU1FMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExMV1VfTUVfV1VNRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9NRV9XVU1FMl9TSElGVCkpICYgTExXVV9NRV9XVU1FMl9NQVNLKQorI2RlZmluZSBMTFdVX01FX1dVTUUzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMTFdVX01FX1dVTUUzX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FMyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUUzX1NISUZUKSkgJiBMTFdVX01FX1dVTUUzX01BU0spCisjZGVmaW5lIExMV1VfTUVfV1VNRTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBMTFdVX01FX1dVTUU0X1NISUZUICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUU0X1NISUZUKSkgJiBMTFdVX01FX1dVTUU0X01BU0spCisjZGVmaW5lIExMV1VfTUVfV1VNRTVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBMTFdVX01FX1dVTUU1X1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUU1X1NISUZUKSkgJiBMTFdVX01FX1dVTUU1X01BU0spCisjZGVmaW5lIExMV1VfTUVfV1VNRTZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBMTFdVX01FX1dVTUU2X1NISUZUICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUU2X1NISUZUKSkgJiBMTFdVX01FX1dVTUU2X01BU0spCisjZGVmaW5lIExMV1VfTUVfV1VNRTdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBMTFdVX01FX1dVTUU3X1NISUZUICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTExXVV9NRV9XVU1FNyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX01FX1dVTUU3X1NISUZUKSkgJiBMTFdVX01FX1dVTUU3X01BU0spCisKKy8qISBAbmFtZSBGMSAtIExMV1UgRmxhZyAxIHJlZ2lzdGVyICovCisjZGVmaW5lIExMV1VfRjFfV1VGMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExMV1VfRjFfV1VGMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMTFdVX0YxX1dVRjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjFfV1VGMF9TSElGVCkpICYgTExXVV9GMV9XVUYwX01BU0spCisjZGVmaW5lIExMV1VfRjFfV1VGMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExMV1VfRjFfV1VGMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMTFdVX0YxX1dVRjEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjFfV1VGMV9TSElGVCkpICYgTExXVV9GMV9XVUYxX01BU0spCisjZGVmaW5lIExMV1VfRjFfV1VGMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExMV1VfRjFfV1VGMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMTFdVX0YxX1dVRjIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjFfV1VGMl9TSElGVCkpICYgTExXVV9GMV9XVUYyX01BU0spCisjZGVmaW5lIExMV1VfRjFfV1VGM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIExMV1VfRjFfV1VGM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMTFdVX0YxX1dVRjMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjFfV1VGM19TSElGVCkpICYgTExXVV9GMV9XVUYzX01BU0spCisjZGVmaW5lIExMV1VfRjFfV1VGNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBMTFdVX0YxX1dVRjRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTExXVV9GMV9XVUY0KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjRfU0hJRlQpKSAmIExMV1VfRjFfV1VGNF9NQVNLKQorI2RlZmluZSBMTFdVX0YxX1dVRjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTExXVV9GMV9XVUY1X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExMV1VfRjFfV1VGNSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GMV9XVUY1X1NISUZUKSkgJiBMTFdVX0YxX1dVRjVfTUFTSykKKyNkZWZpbmUgTExXVV9GMV9XVUY2X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIExMV1VfRjFfV1VGNl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX0YxX1dVRjYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjFfV1VGNl9TSElGVCkpICYgTExXVV9GMV9XVUY2X01BU0spCisjZGVmaW5lIExMV1VfRjFfV1VGN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBMTFdVX0YxX1dVRjdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTExXVV9GMV9XVUY3KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YxX1dVRjdfU0hJRlQpKSAmIExMV1VfRjFfV1VGN19NQVNLKQorCisvKiEgQG5hbWUgRjIgLSBMTFdVIEZsYWcgMiByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX0YyX1dVRjhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMTFdVX0YyX1dVRjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9GMl9XVUY4KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjhfU0hJRlQpKSAmIExMV1VfRjJfV1VGOF9NQVNLKQorI2RlZmluZSBMTFdVX0YyX1dVRjlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMTFdVX0YyX1dVRjlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTExXVV9GMl9XVUY5KHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjlfU0hJRlQpKSAmIExMV1VfRjJfV1VGOV9NQVNLKQorI2RlZmluZSBMTFdVX0YyX1dVRjEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMTFdVX0YyX1dVRjEwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTExXVV9GMl9XVUYxMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YyX1dVRjEwX1NISUZUKSkgJiBMTFdVX0YyX1dVRjEwX01BU0spCisjZGVmaW5lIExMV1VfRjJfV1VGMTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIExMV1VfRjJfV1VGMTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMTFdVX0YyX1dVRjExKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjJfV1VGMTFfU0hJRlQpKSAmIExMV1VfRjJfV1VGMTFfTUFTSykKKyNkZWZpbmUgTExXVV9GMl9XVUYxMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIExMV1VfRjJfV1VGMTJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMTFdVX0YyX1dVRjEyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjJfV1VGMTJfU0hJRlQpKSAmIExMV1VfRjJfV1VGMTJfTUFTSykKKyNkZWZpbmUgTExXVV9GMl9XVUYxM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIExMV1VfRjJfV1VGMTNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBMTFdVX0YyX1dVRjEzKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjJfV1VGMTNfU0hJRlQpKSAmIExMV1VfRjJfV1VGMTNfTUFTSykKKyNkZWZpbmUgTExXVV9GMl9XVUYxNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIExMV1VfRjJfV1VGMTRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMTFdVX0YyX1dVRjE0KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjJfV1VGMTRfU0hJRlQpKSAmIExMV1VfRjJfV1VGMTRfTUFTSykKKyNkZWZpbmUgTExXVV9GMl9XVUYxNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIExMV1VfRjJfV1VGMTVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBMTFdVX0YyX1dVRjE1KHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjJfV1VGMTVfU0hJRlQpKSAmIExMV1VfRjJfV1VGMTVfTUFTSykKKworLyohIEBuYW1lIEYzIC0gTExXVSBGbGFnIDMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExXVV9GM19NV1VGMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGMF9TSElGVCkpICYgTExXVV9GM19NV1VGMF9NQVNLKQorI2RlZmluZSBMTFdVX0YzX01XVUYxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMTFdVX0YzX01XVUYxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0YzX01XVUYxX1NISUZUKSkgJiBMTFdVX0YzX01XVUYxX01BU0spCisjZGVmaW5lIExMV1VfRjNfTVdVRjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMTFdVX0YzX01XVUYyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IExMV1VfRjNfTVdVRjJfU0hJRlQpKSAmIExMV1VfRjNfTVdVRjJfTUFTSykKKyNkZWZpbmUgTExXVV9GM19NV1VGM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgTExXVV9GM19NV1VGM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIExMV1VfRjNfTVdVRjMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGM19TSElGVCkpICYgTExXVV9GM19NV1VGM19NQVNLKQorI2RlZmluZSBMTFdVX0YzX01XVUY0X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGNF9TSElGVCkpICYgTExXVV9GM19NV1VGNF9NQVNLKQorI2RlZmluZSBMTFdVX0YzX01XVUY1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGNV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGNV9TSElGVCkpICYgTExXVV9GM19NV1VGNV9NQVNLKQorI2RlZmluZSBMTFdVX0YzX01XVUY2X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGNl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIExMV1VfRjNfTVdVRjYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGNl9TSElGVCkpICYgTExXVV9GM19NV1VGNl9NQVNLKQorI2RlZmluZSBMTFdVX0YzX01XVUY3X01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTExXVV9GM19NV1VGN19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIExMV1VfRjNfTVdVRjcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GM19NV1VGN19TSElGVCkpICYgTExXVV9GM19NV1VGN19NQVNLKQorCisvKiEgQG5hbWUgRklMVDEgLSBMTFdVIFBpbiBGaWx0ZXIgMSByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX0ZJTFQxX0ZJTFRTRUxfTUFTSyAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBMTFdVX0ZJTFQxX0ZJTFRTRUxfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxUU0VMKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0ZJTFQxX0ZJTFRTRUxfU0hJRlQpKSAmIExMV1VfRklMVDFfRklMVFNFTF9NQVNLKQorI2RlZmluZSBMTFdVX0ZJTFQxX0ZJTFRFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDYwVSkKKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxURV9TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExMV1VfRklMVDFfRklMVEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GSUxUMV9GSUxURV9TSElGVCkpICYgTExXVV9GSUxUMV9GSUxURV9NQVNLKQorI2RlZmluZSBMTFdVX0ZJTFQxX0ZJTFRGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTExXVV9GSUxUMV9GSUxURl9TSElGVCAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIExMV1VfRklMVDFfRklMVEYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GSUxUMV9GSUxURl9TSElGVCkpICYgTExXVV9GSUxUMV9GSUxURl9NQVNLKQorCisvKiEgQG5hbWUgRklMVDIgLSBMTFdVIFBpbiBGaWx0ZXIgMiByZWdpc3RlciAqLworI2RlZmluZSBMTFdVX0ZJTFQyX0ZJTFRTRUxfTUFTSyAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBMTFdVX0ZJTFQyX0ZJTFRTRUxfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxUU0VMKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBMTFdVX0ZJTFQyX0ZJTFRTRUxfU0hJRlQpKSAmIExMV1VfRklMVDJfRklMVFNFTF9NQVNLKQorI2RlZmluZSBMTFdVX0ZJTFQyX0ZJTFRFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDYwVSkKKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxURV9TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExMV1VfRklMVDJfRklMVEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GSUxUMl9GSUxURV9TSElGVCkpICYgTExXVV9GSUxUMl9GSUxURV9NQVNLKQorI2RlZmluZSBMTFdVX0ZJTFQyX0ZJTFRGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgTExXVV9GSUxUMl9GSUxURl9TSElGVCAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIExMV1VfRklMVDJfRklMVEYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTExXVV9GSUxUMl9GSUxURl9TSElGVCkpICYgTExXVV9GSUxUMl9GSUxURl9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTExXVV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIExMV1UgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBMTFdVIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBMTFdVX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDdDMDAwdSkKKy8qKiBQZXJpcGhlcmFsIExMV1UgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIExMV1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMTFdVX1R5cGUgKilMTFdVX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIExMV1VfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMTFdVX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExMV1UgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIExMV1VfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMTFdVIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIExMV1UgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIExMV1VfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMTFdVX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExMV1VfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMUFRNUiBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIExQVE1SX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIExQVE1SIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBMUFRNUiAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgQ1NSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvdyBQb3dlciBUaW1lciBDb250cm9sIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBQU1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTG93IFBvd2VyIFRpbWVyIFByZXNjYWxlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IENNUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb3cgUG93ZXIgVGltZXIgQ29tcGFyZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBDTlI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTG93IFBvd2VyIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCit9IExQVE1SX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIExQVE1SIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTFBUTVJfUmVnaXN0ZXJfTWFza3MgTFBUTVIgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIENTUiAtIExvdyBQb3dlciBUaW1lciBDb250cm9sIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBMUFRNUl9DU1JfVEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMUFRNUl9DU1JfVEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NTUl9URU5fU0hJRlQpKSAmIExQVE1SX0NTUl9URU5fTUFTSykKKyNkZWZpbmUgTFBUTVJfQ1NSX1RNU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RNU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIExQVE1SX0NTUl9UTVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9DU1JfVE1TX1NISUZUKSkgJiBMUFRNUl9DU1JfVE1TX01BU0spCisjZGVmaW5lIExQVE1SX0NTUl9URkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExQVE1SX0NTUl9URkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMUFRNUl9DU1JfVEZDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfQ1NSX1RGQ19TSElGVCkpICYgTFBUTVJfQ1NSX1RGQ19NQVNLKQorI2RlZmluZSBMUFRNUl9DU1JfVFBQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMUFRNUl9DU1JfVFBQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RQUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NTUl9UUFBfU0hJRlQpKSAmIExQVE1SX0NTUl9UUFBfTUFTSykKKyNkZWZpbmUgTFBUTVJfQ1NSX1RQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIExQVE1SX0NTUl9UUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMUFRNUl9DU1JfVFBTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfQ1NSX1RQU19TSElGVCkpICYgTFBUTVJfQ1NSX1RQU19NQVNLKQorI2RlZmluZSBMUFRNUl9DU1JfVElFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIExQVE1SX0NTUl9USUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9DU1JfVElFX1NISUZUKSkgJiBMUFRNUl9DU1JfVElFX01BU0spCisjZGVmaW5lIExQVE1SX0NTUl9UQ0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBMUFRNUl9DU1JfVENGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTFBUTVJfQ1NSX1RDRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NTUl9UQ0ZfU0hJRlQpKSAmIExQVE1SX0NTUl9UQ0ZfTUFTSykKKworLyohIEBuYW1lIFBTUiAtIExvdyBQb3dlciBUaW1lciBQcmVzY2FsZSBSZWdpc3RlciAqLworI2RlZmluZSBMUFRNUl9QU1JfUENTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBMUFRNUl9QU1JfUENTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBUTVJfUFNSX1BDUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX1BTUl9QQ1NfU0hJRlQpKSAmIExQVE1SX1BTUl9QQ1NfTUFTSykKKyNkZWZpbmUgTFBUTVJfUFNSX1BCWVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTFBUTVJfUFNSX1BCWVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExQVE1SX1BTUl9QQllQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFRNUl9QU1JfUEJZUF9TSElGVCkpICYgTFBUTVJfUFNSX1BCWVBfTUFTSykKKyNkZWZpbmUgTFBUTVJfUFNSX1BSRVNDQUxFX01BU0sgICAgICAgICAgICAgICAgICAoMHg3OFUpCisjZGVmaW5lIExQVE1SX1BTUl9QUkVTQ0FMRV9TSElGVCAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMUFRNUl9QU1JfUFJFU0NBTEUoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfUFNSX1BSRVNDQUxFX1NISUZUKSkgJiBMUFRNUl9QU1JfUFJFU0NBTEVfTUFTSykKKworLyohIEBuYW1lIENNUiAtIExvdyBQb3dlciBUaW1lciBDb21wYXJlIFJlZ2lzdGVyICovCisjZGVmaW5lIExQVE1SX0NNUl9DT01QQVJFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIExQVE1SX0NNUl9DT01QQVJFX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMUFRNUl9DTVJfQ09NUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBUTVJfQ01SX0NPTVBBUkVfU0hJRlQpKSAmIExQVE1SX0NNUl9DT01QQVJFX01BU0spCisKKy8qISBAbmFtZSBDTlIgLSBMb3cgUG93ZXIgVGltZXIgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSBMUFRNUl9DTlJfQ09VTlRFUl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBMUFRNUl9DTlJfQ09VTlRFUl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBUTVJfQ05SX0NPVU5URVIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVE1SX0NOUl9DT1VOVEVSX1NISUZUKSkgJiBMUFRNUl9DTlJfQ09VTlRFUl9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTFBUTVJfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBMUFRNUiAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIExQVE1SMCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTFBUTVIwX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA0MDAwMHUpCisvKiogUGVyaXBoZXJhbCBMUFRNUjAgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIExQVE1SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMUFRNUl9UeXBlICopTFBUTVIwX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBMUFRNUl9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgIHsgTFBUTVIwX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBMUFRNUl9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTFBUTVIwIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIExQVE1SIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBMUFRNUl9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTFBUTVIwX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExQVE1SX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTFBVQVJUIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTFBVQVJUX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIExQVUFSVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogTFBVQVJUIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBCQVVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTFBVQVJUIEJhdWQgUmF0ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBTVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTFBVQVJUIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTFBVQVJUIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExQVUFSVCBEYXRhIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IE1BVENIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMUFVBUlQgTWF0Y2ggQWRkcmVzcyBSZWdpc3Rlciwgb2Zmc2V0OiAweDEwICovCisgIF9fSU8gdWludDMyX3QgTU9ESVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExQVUFSVCBNb2RlbSBJckRBIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTQgKi8KK30gTFBVQVJUX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIExQVUFSVCBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIExQVUFSVF9SZWdpc3Rlcl9NYXNrcyBMUFVBUlQgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEJBVUQgLSBMUFVBUlQgQmF1ZCBSYXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIExQVUFSVF9CQVVEX1NCUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MUZGRlUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1NCUl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9TQlIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfU0JSX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9TQlJfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfU0JOU19NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfU0JOU19TSElGVCAgICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9TQk5TKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfU0JOU19TSElGVCkpICYgTFBVQVJUX0JBVURfU0JOU19NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SWEVER0lFX01BU0sgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SWEVER0lFX1NISUZUICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1JYRURHSUUoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9SWEVER0lFX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9SWEVER0lFX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX0xCS0RJRV9NQVNLICAgICAgICAgICAgICAgICAgKDB4ODAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX0xCS0RJRV9TSElGVCAgICAgICAgICAgICAgICAgKDE1VSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfTEJLRElFKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX0xCS0RJRV9TSElGVCkpICYgTFBVQVJUX0JBVURfTEJLRElFX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX1JFU1lOQ0RJU19NQVNLICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SRVNZTkNESVNfU0hJRlQgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1JFU1lOQ0RJUyh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9SRVNZTkNESVNfU0hJRlQpKSAmIExQVUFSVF9CQVVEX1JFU1lOQ0RJU19NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9CT1RIRURHRV9NQVNLICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfQk9USEVER0VfU0hJRlQgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9CT1RIRURHRSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfQk9USEVER0VfU0hJRlQpKSAmIExQVUFSVF9CQVVEX0JPVEhFREdFX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX01BVENGR19NQVNLICAgICAgICAgICAgICAgICAgKDB4QzAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQVRDRkdfU0hJRlQgICAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX01BVENGRyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9NQVRDRkdfU0hJRlQpKSAmIExQVUFSVF9CQVVEX01BVENGR19NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9SRE1BRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1JETUFFX1NISUZUICAgICAgICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfUkRNQUUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX1JETUFFX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9SRE1BRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9URE1BRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX1RETUFFX1NISUZUICAgICAgICAgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfVERNQUUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX1RETUFFX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9URE1BRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQkFVRF9PU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDFGMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfT1NSX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9PU1IoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0JBVURfT1NSX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9PU1JfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfTTEwX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX00xMF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDI5VSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfTTEwKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX00xMF9TSElGVCkpICYgTFBVQVJUX0JBVURfTTEwX01BU0spCisjZGVmaW5lIExQVUFSVF9CQVVEX01BRU4yX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQkFVRF9NQUVOMl9TSElGVCAgICAgICAgICAgICAgICAgICgzMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX01BRU4yKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQkFVRF9NQUVOMl9TSElGVCkpICYgTFBVQVJUX0JBVURfTUFFTjJfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0JBVURfTUFFTjFfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9CQVVEX01BRU4xX1NISUZUICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgTFBVQVJUX0JBVURfTUFFTjEoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9CQVVEX01BRU4xX1NISUZUKSkgJiBMUFVBUlRfQkFVRF9NQUVOMV9NQVNLKQorCisvKiEgQG5hbWUgU1RBVCAtIExQVUFSVCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBVQVJUX1NUQVRfTUEyRl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTUEyRl9TSElGVCAgICAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9NQTJGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfTUEyRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfTUEyRl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9NQTFGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9NQTFGX1NISUZUICAgICAgICAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIExQVUFSVF9TVEFUX01BMUYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9NQTFGX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9NQTFGX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX1BGX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9QRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1BGKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9QRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfUEZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX0ZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfRkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX0ZFX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9GRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9ORl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9ORih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfTkZfU0hJRlQpKSAmIExQVUFSVF9TVEFUX05GX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX09SX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9PUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxOVUpCisjZGVmaW5lIExQVUFSVF9TVEFUX09SKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9PUl9TSElGVCkpICYgTFBVQVJUX1NUQVRfT1JfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfSURMRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9JRExFX1NISUZUICAgICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9JRExFX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9JRExFX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX1JEUkZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUkRSRl9TSElGVCAgICAgICAgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SRFJGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfUkRSRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfUkRSRl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9UQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1RDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDIyVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfVEMoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX1RDX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9UQ19NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9URFJFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1REUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfVERSRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX1REUkVfU0hJRlQpKSAmIExQVUFSVF9TVEFUX1REUkVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUkFGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUkFGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SQUYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfUkFGX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9SQUZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTEJLREVfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTEJLREVfU0hJRlQgICAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9MQktERSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfTEJLREVfU0hJRlQpKSAmIExQVUFSVF9TVEFUX0xCS0RFX01BU0spCisjZGVmaW5lIExQVUFSVF9TVEFUX0JSSzEzX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX0JSSzEzX1NISUZUICAgICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfQlJLMTMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX0JSSzEzX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9CUksxM19NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SV1VJRF9NQVNLICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SV1VJRF9TSElGVCAgICAgICAgICAgICAgICAgICgyN1UpCisjZGVmaW5lIExQVUFSVF9TVEFUX1JXVUlEKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfU1RBVF9SV1VJRF9TSElGVCkpICYgTFBVQVJUX1NUQVRfUldVSURfTUFTSykKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUlhJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9TVEFUX1JYSU5WX1NISUZUICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUlhJTlYoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9TVEFUX1JYSU5WX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9SWElOVl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9NU0JGX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTVNCRl9TSElGVCAgICAgICAgICAgICAgICAgICAoMjlVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9NU0JGKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfTVNCRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfTVNCRl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SWEVER0lGX01BU0sgICAgICAgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfUlhFREdJRl9TSElGVCAgICAgICAgICAgICAgICAoMzBVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9SWEVER0lGKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfUlhFREdJRl9TSElGVCkpICYgTFBVQVJUX1NUQVRfUlhFREdJRl9NQVNLKQorI2RlZmluZSBMUFVBUlRfU1RBVF9MQktESUZfTUFTSyAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX1NUQVRfTEJLRElGX1NISUZUICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBMUFVBUlRfU1RBVF9MQktESUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX1NUQVRfTEJLRElGX1NISUZUKSkgJiBMUFVBUlRfU1RBVF9MQktESUZfTUFTSykKKworLyohIEBuYW1lIENUUkwgLSBMUFVBUlQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBMUFVBUlRfQ1RSTF9QVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9QVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1BUX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9QVF9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9QRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9QRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1BFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9QRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9JTFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9JTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfSUxUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX0lMVF9TSElGVCkpICYgTFBVQVJUX0NUUkxfSUxUX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1dBS0VfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1dBS0VfU0hJRlQgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9XQUtFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfV0FLRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfV0FLRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX00oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9NX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9NX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1JTUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUlNSQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1JTUkNfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1JTUkNfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfRE9aRUVOX01BU0sgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0RPWkVFTl9TSElGVCAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9ET1pFRU4oeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfRE9aRUVOX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9ET1pFRU5fTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTE9PUFNfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0xPT1BTX1NISUZUICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9MT09QUyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfTE9PUFNfU0hJRlQpKSAmIExQVUFSVF9DVFJMX0xPT1BTX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX0lETEVDRkdfTUFTSyAgICAgICAgICAgICAgICAgKDB4NzAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfSURMRUNGR19TSElGVCAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0lETEVDRkcoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9JRExFQ0ZHX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9JRExFQ0ZHX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX01BMklFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX01BMklFX1NISUZUICAgICAgICAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTUEySUUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX01BMklFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9NQTJJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NQTFJRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9NQTFJRV9TSElGVCAgICAgICAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX01BMUlFKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9NQTFJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfTUExSUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfU0JLX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1NCS19TSElGVCAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfU0JLKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1NCS19TSElGVCkpICYgTFBVQVJUX0NUUkxfU0JLX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1JXVV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SV1VfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIExQVUFSVF9DVFJMX1JXVSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9SV1VfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1JXVV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfUkVfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1JFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9URV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxOVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1RFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9URV9TSElGVCkpICYgTFBVQVJUX0NUUkxfVEVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfSUxJRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9JTElFX1NISUZUICAgICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0lMSUUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9JTElFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9JTElFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1JJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUklFX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9SSUUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfUklFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9SSUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVENJRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UQ0lFX1NISUZUICAgICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1RDSUUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9UQ0lFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9UQ0lFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1RJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVElFX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9USUUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfVElFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9USUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUEVJRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUEVJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9QRUlFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfUEVJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfUEVJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9GRUlFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9GRUlFX1NISUZUICAgICAgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX0ZFSUUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9GRUlFX1NISUZUKSkgJiBMUFVBUlRfQ1RSTF9GRUlFX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX05FSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX05FSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfTkVJRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX05FSUVfU0hJRlQpKSAmIExQVUFSVF9DVFJMX05FSUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfT1JJRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfT1JJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9PUklFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfT1JJRV9TSElGVCkpICYgTFBVQVJUX0NUUkxfT1JJRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UWElOVl9NQVNLICAgICAgICAgICAgICAgICAgICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfVFhJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UWElOVih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0NUUkxfVFhJTlZfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1RYSU5WX01BU0spCisjZGVmaW5lIExQVUFSVF9DVFJMX1RYRElSX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBMUFVBUlRfQ1RSTF9UWERJUl9TSElGVCAgICAgICAgICAgICAgICAgICgyOVUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1RYRElSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfQ1RSTF9UWERJUl9TSElGVCkpICYgTFBVQVJUX0NUUkxfVFhESVJfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUjlUOF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1I5VDhfU0hJRlQgICAgICAgICAgICAgICAgICAgKDMwVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUjlUOCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1I5VDhfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1I5VDhfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUjhUOV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIExQVUFSVF9DVFJMX1I4VDlfU0hJRlQgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgTFBVQVJUX0NUUkxfUjhUOSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9DVFJMX1I4VDlfU0hJRlQpKSAmIExQVUFSVF9DVFJMX1I4VDlfTUFTSykKKworLyohIEBuYW1lIERBVEEgLSBMUFVBUlQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBMUFVBUlRfREFUQV9SMFQwX01BU0sgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SMFQwX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjBUMCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1IwVDBfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1IwVDBfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjFUMV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjFUMV9TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1IxVDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9SMVQxX1NISUZUKSkgJiBMUFVBUlRfREFUQV9SMVQxX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1IyVDJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1IyVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SMlQyKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjJUMl9TSElGVCkpICYgTFBVQVJUX0RBVEFfUjJUMl9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SM1QzX01BU0sgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SM1QzX1NISUZUICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjNUMyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1IzVDNfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1IzVDNfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjRUNF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I0VDRfU0hJRlQgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SNFQ0KHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjRUNF9TSElGVCkpICYgTFBVQVJUX0RBVEFfUjRUNF9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SNVQ1X01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjVUNV9TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I1VDUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfREFUQV9SNVQ1X1NISUZUKSkgJiBMUFVBUlRfREFUQV9SNVQ1X01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1I2VDZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SNlQ2X1NISUZUICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjZUNih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1I2VDZfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1I2VDZfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUjdUN19NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I3VDdfU0hJRlQgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SN1Q3KHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjdUN19TSElGVCkpICYgTFBVQVJUX0RBVEFfUjdUN19NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SOFQ4X01BU0sgICAgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I4VDhfU0hJRlQgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SOFQ4KHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjhUOF9TSElGVCkpICYgTFBVQVJUX0RBVEFfUjhUOF9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9SOVQ5X01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1I5VDlfU0hJRlQgICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBMUFVBUlRfREFUQV9SOVQ5KHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfUjlUOV9TSElGVCkpICYgTFBVQVJUX0RBVEFfUjlUOV9NQVNLKQorI2RlZmluZSBMUFVBUlRfREFUQV9JRExJTkVfTUFTSyAgICAgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX0lETElORV9TSElGVCAgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfSURMSU5FKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX0lETElORV9TSElGVCkpICYgTFBVQVJUX0RBVEFfSURMSU5FX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1JYRU1QVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1JYRU1QVF9TSElGVCAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUlhFTVBUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1JYRU1QVF9TSElGVCkpICYgTFBVQVJUX0RBVEFfUlhFTVBUX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX0ZSRVRTQ19NQVNLICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX0ZSRVRTQ19TSElGVCAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfRlJFVFNDKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX0ZSRVRTQ19TSElGVCkpICYgTFBVQVJUX0RBVEFfRlJFVFNDX01BU0spCisjZGVmaW5lIExQVUFSVF9EQVRBX1BBUklUWUVfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIExQVUFSVF9EQVRBX1BBUklUWUVfU0hJRlQgICAgICAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfUEFSSVRZRSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9EQVRBX1BBUklUWUVfU0hJRlQpKSAmIExQVUFSVF9EQVRBX1BBUklUWUVfTUFTSykKKyNkZWZpbmUgTFBVQVJUX0RBVEFfTk9JU1lfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgTFBVQVJUX0RBVEFfTk9JU1lfU0hJRlQgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBMUFVBUlRfREFUQV9OT0lTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX0RBVEFfTk9JU1lfU0hJRlQpKSAmIExQVUFSVF9EQVRBX05PSVNZX01BU0spCisKKy8qISBAbmFtZSBNQVRDSCAtIExQVUFSVCBNYXRjaCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExQVUFSVF9NQVRDSF9NQTFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4M0ZGVSkKKyNkZWZpbmUgTFBVQVJUX01BVENIX01BMV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVUFSVF9NQVRDSF9NQTEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTUFUQ0hfTUExX1NISUZUKSkgJiBMUFVBUlRfTUFUQ0hfTUExX01BU0spCisjZGVmaW5lIExQVUFSVF9NQVRDSF9NQTJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4M0ZGMDAwMFUpCisjZGVmaW5lIExQVUFSVF9NQVRDSF9NQTJfU0hJRlQgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgTFBVQVJUX01BVENIX01BMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9NQVRDSF9NQTJfU0hJRlQpKSAmIExQVUFSVF9NQVRDSF9NQTJfTUFTSykKKworLyohIEBuYW1lIE1PRElSIC0gTFBVQVJUIE1vZGVtIElyREEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYQ1RTRV9NQVNLICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYQ1RTRV9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU0UoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTU9ESVJfVFhDVFNFX1NISUZUKSkgJiBMUFVBUlRfTU9ESVJfVFhDVFNFX01BU0spCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWFJUU0VfTUFTSyAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWFJUU0VfU0hJRlQgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhSVFNFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01PRElSX1RYUlRTRV9TSElGVCkpICYgTFBVQVJUX01PRElSX1RYUlRTRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhSVFNQT0xfTUFTSyAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhSVFNQT0xfU0hJRlQgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYUlRTUE9MKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9NT0RJUl9UWFJUU1BPTF9TSElGVCkpICYgTFBVQVJUX01PRElSX1RYUlRTUE9MX01BU0spCisjZGVmaW5lIExQVUFSVF9NT0RJUl9SWFJUU0VfTUFTSyAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9SWFJUU0VfU0hJRlQgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfUlhSVFNFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFBVQVJUX01PRElSX1JYUlRTRV9TSElGVCkpICYgTFBVQVJUX01PRElSX1JYUlRTRV9NQVNLKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhDVFNDX01BU0sgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYQ1RTQ19TSElGVCAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU0MoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTU9ESVJfVFhDVFNDX1NISUZUKSkgJiBMUFVBUlRfTU9ESVJfVFhDVFNDX01BU0spCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UWENUU1NSQ19NQVNLICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVFhDVFNTUkNfU0hJRlQgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTFBVQVJUX01PRElSX1RYQ1RTU1JDKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExQVUFSVF9NT0RJUl9UWENUU1NSQ19TSElGVCkpICYgTFBVQVJUX01PRElSX1RYQ1RTU1JDX01BU0spCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UTlBfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MzAwMDBVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfVE5QX1NISUZUICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9UTlAoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTU9ESVJfVE5QX1NISUZUKSkgJiBMUFVBUlRfTU9ESVJfVE5QX01BU0spCisjZGVmaW5lIExQVUFSVF9NT0RJUl9JUkVOX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBMUFVBUlRfTU9ESVJfSVJFTl9TSElGVCAgICAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIExQVUFSVF9NT0RJUl9JUkVOKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMUFVBUlRfTU9ESVJfSVJFTl9TSElGVCkpICYgTFBVQVJUX01PRElSX0lSRU5fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExQVUFSVF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIExQVUFSVCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIExQVUFSVDAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIExQVUFSVDBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNTQwMDB1KQorLyoqIFBlcmlwaGVyYWwgTFBVQVJUMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgTFBVQVJUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExQVUFSVF9UeXBlICopTFBVQVJUMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIExQVUFSVF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgeyBMUFVBUlQwX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTFBVQVJUX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICB7IExQVUFSVDAgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgTFBVQVJUIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBMUFVBUlRfUlhfVFhfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgIHsgTFBVQVJUMF9JUlFuIH0KKyNkZWZpbmUgTFBVQVJUX0VSUl9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICB7IExQVUFSVDBfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTFBVQVJUX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTFRDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTFRDX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIExUQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogTFRDIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBNRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTW9kZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIF9fSU8gdWludDMyX3QgS1M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEtleSBTaXplIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0XTsKKyAgX19JTyB1aW50MzJfdCBEUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGF0YSBTaXplIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzJbNF07CisgIF9fSU8gdWludDMyX3QgSUNWUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElDViBTaXplIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzNbMjBdOworICBfX0lPIHVpbnQzMl90IENPTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21tYW5kIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBDVEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDM0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF80WzhdOworICBfX0lPIHVpbnQzMl90IENXOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDbGVhciBXcml0dGVuIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NDAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzVbNF07CisgIF9fSU8gdWludDMyX3QgU1RBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDQ4ICovCisgIF9fSSAgdWludDMyX3QgRVNUQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEVycm9yIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDRDICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF82WzhdOworICBfX0lPIHVpbnQzMl90IEFBRFNaOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBQUQgU2l6ZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDU4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF83WzE2NF07CisgIF9fSU8gdWludDMyX3QgQ1RYWzE0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbnRleHQgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgxMDAsIGFycmF5IHN0ZXA6IDB4NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfOFsyMDBdOworICBfX0lPIHVpbnQzMl90IEtFWVs0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBLZXkgUmVnaXN0ZXJzLCBhcnJheSBvZmZzZXQ6IDB4MjAwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzlbNzM2XTsKKyAgX19JICB1aW50MzJfdCBWSUQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVmVyc2lvbiBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweDRGMCAqLworICBfX0kgIHVpbnQzMl90IFZJRDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBWZXJzaW9uIElEIDIgUmVnaXN0ZXIsIG9mZnNldDogMHg0RjQgKi8KKyAgX19JICB1aW50MzJfdCBDSEFWSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ0hBIFZlcnNpb24gSUQgUmVnaXN0ZXIsIG9mZnNldDogMHg0RjggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzEwWzcwOF07CisgIF9fSSAgdWludDMyX3QgRklGT1NUQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZJRk8gU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4N0MwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xMVsyOF07CisgIF9fTyAgdWludDMyX3QgSUZJRk87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IElucHV0IERhdGEgRklGTywgb2Zmc2V0OiAweDdFMCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMTJbMTJdOworICBfX0kgIHVpbnQzMl90IE9GSUZPOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBPdXRwdXQgRGF0YSBGSUZPLCBvZmZzZXQ6IDB4N0YwICovCit9IExUQ19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBMVEMgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBMVENfUmVnaXN0ZXJfTWFza3MgTFRDIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBNRCAtIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX01EX0VOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTFRDX01EX0VOQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19NRF9FTkMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfTURfRU5DX1NISUZUKSkgJiBMVENfTURfRU5DX01BU0spCisjZGVmaW5lIExUQ19NRF9JQ1ZfVEVTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExUQ19NRF9JQ1ZfVEVTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMVENfTURfSUNWX1RFU1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX01EX0lDVl9URVNUX1NISUZUKSkgJiBMVENfTURfSUNWX1RFU1RfTUFTSykKKyNkZWZpbmUgTFRDX01EX0FTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgTFRDX01EX0FTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExUQ19NRF9BUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfTURfQVNfU0hJRlQpKSAmIExUQ19NRF9BU19NQVNLKQorI2RlZmluZSBMVENfTURfQUFJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFGRjBVKQorI2RlZmluZSBMVENfTURfQUFJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTFRDX01EX0FBSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19NRF9BQUlfU0hJRlQpKSAmIExUQ19NRF9BQUlfTUFTSykKKyNkZWZpbmUgTFRDX01EX0FMR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBMVENfTURfQUxHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIExUQ19NRF9BTEcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfTURfQUxHX1NISUZUKSkgJiBMVENfTURfQUxHX01BU0spCisKKy8qISBAbmFtZSBLUyAtIEtleSBTaXplIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19LU19LU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUZVKQorI2RlZmluZSBMVENfS1NfS1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0tTX0tTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19LU19LU19TSElGVCkpICYgTFRDX0tTX0tTX01BU0spCisKKy8qISBAbmFtZSBEUyAtIERhdGEgU2l6ZSBSZWdpc3RlciAqLworI2RlZmluZSBMVENfRFNfRFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRlUpCisjZGVmaW5lIExUQ19EU19EU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfRFNfRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0RTX0RTX1NISUZUKSkgJiBMVENfRFNfRFNfTUFTSykKKworLyohIEBuYW1lIElDVlMgLSBJQ1YgU2l6ZSBSZWdpc3RlciAqLworI2RlZmluZSBMVENfSUNWU19JQ1ZTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgTFRDX0lDVlNfSUNWU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19JQ1ZTX0lDVlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfSUNWU19JQ1ZTX1NISUZUKSkgJiBMVENfSUNWU19JQ1ZTX01BU0spCisKKy8qISBAbmFtZSBDT00gLSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19DT01fQUxMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExUQ19DT01fQUxMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfQ09NX0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NPTV9BTExfU0hJRlQpKSAmIExUQ19DT01fQUxMX01BU0spCisjZGVmaW5lIExUQ19DT01fQUVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExUQ19DT01fQUVTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMVENfQ09NX0FFUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NPTV9BRVNfU0hJRlQpKSAmIExUQ19DT01fQUVTX01BU0spCisKKy8qISBAbmFtZSBDVEwgLSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19DVExfSU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExUQ19DVExfSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfQ1RMX0lNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9JTV9TSElGVCkpICYgTFRDX0NUTF9JTV9NQVNLKQorI2RlZmluZSBMVENfQ1RMX0lGRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIExUQ19DVExfSUZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBMVENfQ1RMX0lGRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9JRkVfU0hJRlQpKSAmIExUQ19DVExfSUZFX01BU0spCisjZGVmaW5lIExUQ19DVExfSUZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgTFRDX0NUTF9JRlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIExUQ19DVExfSUZSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX0lGUl9TSElGVCkpICYgTFRDX0NUTF9JRlJfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9PRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9PRkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBMVENfQ1RMX09GRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9PRkVfU0hJRlQpKSAmIExUQ19DVExfT0ZFX01BU0spCisjZGVmaW5lIExUQ19DVExfT0ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIExUQ19DVExfT0ZSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgTFRDX0NUTF9PRlIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVExfT0ZSX1NISUZUKSkgJiBMVENfQ1RMX09GUl9NQVNLKQorI2RlZmluZSBMVENfQ1RMX0lGU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgTFRDX0NUTF9JRlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBMVENfQ1RMX0lGUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUTF9JRlNfU0hJRlQpKSAmIExUQ19DVExfSUZTX01BU0spCisjZGVmaW5lIExUQ19DVExfT0ZTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBMVENfQ1RMX09GU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIExUQ19DVExfT0ZTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX09GU19TSElGVCkpICYgTFRDX0NUTF9PRlNfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9LSVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBMVENfQ1RMX0tJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIExUQ19DVExfS0lTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX0tJU19TSElGVCkpICYgTFRDX0NUTF9LSVNfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9LT1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBMVENfQ1RMX0tPU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyMVUpCisjZGVmaW5lIExUQ19DVExfS09TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX0tPU19TSElGVCkpICYgTFRDX0NUTF9LT1NfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9DSVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBMVENfQ1RMX0NJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIExUQ19DVExfQ0lTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX0NJU19TSElGVCkpICYgTFRDX0NUTF9DSVNfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9DT1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBMVENfQ1RMX0NPU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIExUQ19DVExfQ09TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1RMX0NPU19TSElGVCkpICYgTFRDX0NUTF9DT1NfTUFTSykKKyNkZWZpbmUgTFRDX0NUTF9LQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIExUQ19DVExfS0FMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgTFRDX0NUTF9LQUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DVExfS0FMX1NISUZUKSkgJiBMVENfQ1RMX0tBTF9NQVNLKQorCisvKiEgQG5hbWUgQ1cgLSBDbGVhciBXcml0dGVuIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19DV19DTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIExUQ19DV19DTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfQ1dfQ00oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NXX0NNX1NISUZUKSkgJiBMVENfQ1dfQ01fTUFTSykKKyNkZWZpbmUgTFRDX0NXX0NEU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTFRDX0NXX0NEU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIExUQ19DV19DRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ1dfQ0RTX1NISUZUKSkgJiBMVENfQ1dfQ0RTX01BU0spCisjZGVmaW5lIExUQ19DV19DSUNWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIExUQ19DV19DSUNWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBMVENfQ1dfQ0lDVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NXX0NJQ1ZfU0hJRlQpKSAmIExUQ19DV19DSUNWX01BU0spCisjZGVmaW5lIExUQ19DV19DQ1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBMVENfQ1dfQ0NSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTFRDX0NXX0NDUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DV19DQ1JfU0hJRlQpKSAmIExUQ19DV19DQ1JfTUFTSykKKyNkZWZpbmUgTFRDX0NXX0NLUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIExUQ19DV19DS1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBMVENfQ1dfQ0tSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NXX0NLUl9TSElGVCkpICYgTFRDX0NXX0NLUl9NQVNLKQorI2RlZmluZSBMVENfQ1dfQ09GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgTFRDX0NXX0NPRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMzBVKQorI2RlZmluZSBMVENfQ1dfQ09GKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NXX0NPRl9TSElGVCkpICYgTFRDX0NXX0NPRl9NQVNLKQorI2RlZmluZSBMVENfQ1dfQ0lGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgTFRDX0NXX0NJRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBMVENfQ1dfQ0lGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NXX0NJRl9TSElGVCkpICYgTFRDX0NXX0NJRl9NQVNLKQorCisvKiEgQG5hbWUgU1RBIC0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExUQ19TVEFfQUJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIExUQ19TVEFfQUJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBMVENfU1RBX0FCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX1NUQV9BQl9TSElGVCkpICYgTFRDX1NUQV9BQl9NQVNLKQorI2RlZmluZSBMVENfU1RBX0RJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgTFRDX1NUQV9ESV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBMVENfU1RBX0RJKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX1NUQV9ESV9TSElGVCkpICYgTFRDX1NUQV9ESV9NQVNLKQorI2RlZmluZSBMVENfU1RBX0VJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIExUQ19TVEFfRUlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgTFRDX1NUQV9FSSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19TVEFfRUlfU0hJRlQpKSAmIExUQ19TVEFfRUlfTUFTSykKKworLyohIEBuYW1lIEVTVEEgLSBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0VTVEFfRVJSSUQxX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgTFRDX0VTVEFfRVJSSUQxX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19FU1RBX0VSUklEMSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfRVNUQV9FUlJJRDFfU0hJRlQpKSAmIExUQ19FU1RBX0VSUklEMV9NQVNLKQorI2RlZmluZSBMVENfRVNUQV9DTDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIExUQ19FU1RBX0NMMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBMVENfRVNUQV9DTDEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0VTVEFfQ0wxX1NISUZUKSkgJiBMVENfRVNUQV9DTDFfTUFTSykKKworLyohIEBuYW1lIEFBRFNaIC0gQUFEIFNpemUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0FBRFNaX0FBRFNaX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgTFRDX0FBRFNaX0FBRFNaX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19BQURTWl9BQURTWih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQUFEU1pfQUFEU1pfU0hJRlQpKSAmIExUQ19BQURTWl9BQURTWl9NQVNLKQorI2RlZmluZSBMVENfQUFEU1pfQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgTFRDX0FBRFNaX0FMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBMVENfQUFEU1pfQUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0FBRFNaX0FMX1NISUZUKSkgJiBMVENfQUFEU1pfQUxfTUFTSykKKworLyohIEBuYW1lIENUWCAtIENvbnRleHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX0NUWF9DVFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIExUQ19DVFhfQ1RYX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfQ1RYX0NUWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0NUWF9DVFhfU0hJRlQpKSAmIExUQ19DVFhfQ1RYX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBMVENfQ1RYICovCisjZGVmaW5lIExUQ19DVFhfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0VSkKKworLyohIEBuYW1lIEtFWSAtIEtleSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFRDX0tFWV9LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIExUQ19LRVlfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfS0VZX0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0tFWV9LRVlfU0hJRlQpKSAmIExUQ19LRVlfS0VZX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBMVENfS0VZICovCisjZGVmaW5lIExUQ19LRVlfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisvKiEgQG5hbWUgVklEMSAtIFZlcnNpb24gSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRDX1ZJRDFfTUlOX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIExUQ19WSUQxX01JTl9SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfVklEMV9NSU5fUkVWKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX1ZJRDFfTUlOX1JFVl9TSElGVCkpICYgTFRDX1ZJRDFfTUlOX1JFVl9NQVNLKQorI2RlZmluZSBMVENfVklEMV9NQUpfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGMDBVKQorI2RlZmluZSBMVENfVklEMV9NQUpfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgTFRDX1ZJRDFfTUFKX1JFVih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19WSUQxX01BSl9SRVZfU0hJRlQpKSAmIExUQ19WSUQxX01BSl9SRVZfTUFTSykKKyNkZWZpbmUgTFRDX1ZJRDFfSVBfSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIExUQ19WSUQxX0lQX0lEX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgTFRDX1ZJRDFfSVBfSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19WSUQxX0lQX0lEX1NISUZUKSkgJiBMVENfVklEMV9JUF9JRF9NQVNLKQorCisvKiEgQG5hbWUgVklEMiAtIFZlcnNpb24gSUQgMiBSZWdpc3RlciAqLworI2RlZmluZSBMVENfVklEMl9FQ09fUkVWX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTFRDX1ZJRDJfRUNPX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19WSUQyX0VDT19SRVYoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfVklEMl9FQ09fUkVWX1NISUZUKSkgJiBMVENfVklEMl9FQ09fUkVWX01BU0spCisjZGVmaW5lIExUQ19WSUQyX0FSQ0hfRVJBX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIExUQ19WSUQyX0FSQ0hfRVJBX1NISUZUICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBMVENfVklEMl9BUkNIX0VSQSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX1ZJRDJfQVJDSF9FUkFfU0hJRlQpKSAmIExUQ19WSUQyX0FSQ0hfRVJBX01BU0spCisKKy8qISBAbmFtZSBDSEFWSUQgLSBDSEEgVmVyc2lvbiBJRCBSZWdpc3RlciAqLworI2RlZmluZSBMVENfQ0hBVklEX0FFU1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBMVENfQ0hBVklEX0FFU1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTFRDX0NIQVZJRF9BRVNSRVYoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19DSEFWSURfQUVTUkVWX1NISUZUKSkgJiBMVENfQ0hBVklEX0FFU1JFVl9NQVNLKQorI2RlZmluZSBMVENfQ0hBVklEX0FFU1ZJRF9NQVNLICAgICAgICAgICAgICAgICAgICgweEYwVSkKKyNkZWZpbmUgTFRDX0NIQVZJRF9BRVNWSURfU0hJRlQgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIExUQ19DSEFWSURfQUVTVklEKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfQ0hBVklEX0FFU1ZJRF9TSElGVCkpICYgTFRDX0NIQVZJRF9BRVNWSURfTUFTSykKKworLyohIEBuYW1lIEZJRk9TVEEgLSBGSUZPIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBMVENfRklGT1NUQV9JRkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDdGVSkKKyNkZWZpbmUgTFRDX0ZJRk9TVEFfSUZMX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19GSUZPU1RBX0lGTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfRklGT1NUQV9JRkxfU0hJRlQpKSAmIExUQ19GSUZPU1RBX0lGTF9NQVNLKQorI2RlZmluZSBMVENfRklGT1NUQV9JRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBMVENfRklGT1NUQV9JRkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIExUQ19GSUZPU1RBX0lGRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfRklGT1NUQV9JRkZfU0hJRlQpKSAmIExUQ19GSUZPU1RBX0lGRl9NQVNLKQorI2RlZmluZSBMVENfRklGT1NUQV9PRkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDdGMDAwMFUpCisjZGVmaW5lIExUQ19GSUZPU1RBX09GTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgTFRDX0ZJRk9TVEFfT0ZMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IExUQ19GSUZPU1RBX09GTF9TSElGVCkpICYgTFRDX0ZJRk9TVEFfT0ZMX01BU0spCisjZGVmaW5lIExUQ19GSUZPU1RBX09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBMVENfRklGT1NUQV9PRkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIExUQ19GSUZPU1RBX09GRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfRklGT1NUQV9PRkZfU0hJRlQpKSAmIExUQ19GSUZPU1RBX09GRl9NQVNLKQorCisvKiEgQG5hbWUgSUZJRk8gLSBJbnB1dCBEYXRhIEZJRk8gKi8KKyNkZWZpbmUgTFRDX0lGSUZPX0lGSUZPX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIExUQ19JRklGT19JRklGT19TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBMVENfSUZJRk9fSUZJRk8oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTFRDX0lGSUZPX0lGSUZPX1NISUZUKSkgJiBMVENfSUZJRk9fSUZJRk9fTUFTSykKKworLyohIEBuYW1lIE9GSUZPIC0gT3V0cHV0IERhdGEgRklGTyAqLworI2RlZmluZSBMVENfT0ZJRk9fT0ZJRk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTFRDX09GSUZPX09GSUZPX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIExUQ19PRklGT19PRklGTyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBMVENfT0ZJRk9fT0ZJRk9fU0hJRlQpKSAmIExUQ19PRklGT19PRklGT19NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTFRDX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogTFRDIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgTFRDMCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTFRDMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1ODAwMHUpCisvKiogUGVyaXBoZXJhbCBMVEMwIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBMVEMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTFRDX1R5cGUgKilMVEMwX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTFRDX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IExUQzBfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTFRDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBMVENfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTFRDMCB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBMVEMgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIExUQ19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMVEMwX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIExUQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIE1DRyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE1DR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBNQ0cgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIE1DRyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDhfdCBDMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDEgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBDMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDIgUmVnaXN0ZXIsIG9mZnNldDogMHgxICovCisgIF9fSU8gdWludDhfdCBDMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDMgUmVnaXN0ZXIsIG9mZnNldDogMHgyICovCisgIF9fSU8gdWludDhfdCBDNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDQgUmVnaXN0ZXIsIG9mZnNldDogMHgzICovCisgIF9fSSAgdWludDhfdCBDNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDUgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBDNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDYgUmVnaXN0ZXIsIG9mZnNldDogMHg1ICovCisgIF9fSSAgdWludDhfdCBTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHg2ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzFdOworICBfX0lPIHVpbnQ4X3QgU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNQ0cgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVsxXTsKKyAgX19JTyB1aW50OF90IEFUQ1ZIOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTUNHIEF1dG8gVHJpbSBDb21wYXJlIFZhbHVlIEhpZ2ggUmVnaXN0ZXIsIG9mZnNldDogMHhBICovCisgIF9fSU8gdWludDhfdCBBVENWTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBBdXRvIFRyaW0gQ29tcGFyZSBWYWx1ZSBMb3cgUmVnaXN0ZXIsIG9mZnNldDogMHhCICovCisgIF9fSU8gdWludDhfdCBDNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDcgUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDhfdCBDODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1DRyBDb250cm9sIDggUmVnaXN0ZXIsIG9mZnNldDogMHhEICovCit9IE1DR19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNQ0cgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBNQ0dfUmVnaXN0ZXJfTWFza3MgTUNHIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDMSAtIE1DRyBDb250cm9sIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0MxX0lSRUZTVEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTUNHX0MxX0lSRUZTVEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DR19DMV9JUkVGU1RFTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MxX0lSRUZTVEVOX1NISUZUKSkgJiBNQ0dfQzFfSVJFRlNURU5fTUFTSykKKyNkZWZpbmUgTUNHX0MxX0lSQ0xLRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTUNHX0MxX0lSQ0xLRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIE1DR19DMV9JUkNMS0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MxX0lSQ0xLRU5fU0hJRlQpKSAmIE1DR19DMV9JUkNMS0VOX01BU0spCisjZGVmaW5lIE1DR19DMV9JUkVGU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIE1DR19DMV9JUkVGU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBNQ0dfQzFfSVJFRlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMV9JUkVGU19TSElGVCkpICYgTUNHX0MxX0lSRUZTX01BU0spCisjZGVmaW5lIE1DR19DMV9GUkRJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MzhVKQorI2RlZmluZSBNQ0dfQzFfRlJESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTUNHX0MxX0ZSRElWKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzFfRlJESVZfU0hJRlQpKSAmIE1DR19DMV9GUkRJVl9NQVNLKQorI2RlZmluZSBNQ0dfQzFfQ0xLU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEMwVSkKKyNkZWZpbmUgTUNHX0MxX0NMS1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIE1DR19DMV9DTEtTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MxX0NMS1NfU0hJRlQpKSAmIE1DR19DMV9DTEtTX01BU0spCisKKy8qISBAbmFtZSBDMiAtIE1DRyBDb250cm9sIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0MyX0lSQ1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTUNHX0MyX0lSQ1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DR19DMl9JUkNTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MyX0lSQ1NfU0hJRlQpKSAmIE1DR19DMl9JUkNTX01BU0spCisjZGVmaW5lIE1DR19DMl9MUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIE1DR19DMl9MUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNQ0dfQzJfTFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMl9MUF9TSElGVCkpICYgTUNHX0MyX0xQX01BU0spCisjZGVmaW5lIE1DR19DMl9FUkVGU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIE1DR19DMl9FUkVGU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBNQ0dfQzJfRVJFRlMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMl9FUkVGU19TSElGVCkpICYgTUNHX0MyX0VSRUZTX01BU0spCisjZGVmaW5lIE1DR19DMl9IR09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIE1DR19DMl9IR09fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBNQ0dfQzJfSEdPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMl9IR09fU0hJRlQpKSAmIE1DR19DMl9IR09fTUFTSykKKyNkZWZpbmUgTUNHX0MyX1JBTkdFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIE1DR19DMl9SQU5HRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBNQ0dfQzJfUkFOR0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMl9SQU5HRV9TSElGVCkpICYgTUNHX0MyX1JBTkdFX01BU0spCisjZGVmaW5lIE1DR19DMl9GQ0ZUUklNX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBNQ0dfQzJfRkNGVFJJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgTUNHX0MyX0ZDRlRSSU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzJfRkNGVFJJTV9TSElGVCkpICYgTUNHX0MyX0ZDRlRSSU1fTUFTSykKKyNkZWZpbmUgTUNHX0MyX0xPQ1JFMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIE1DR19DMl9MT0NSRTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBNQ0dfQzJfTE9DUkUwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DMl9MT0NSRTBfU0hJRlQpKSAmIE1DR19DMl9MT0NSRTBfTUFTSykKKworLyohIEBuYW1lIEMzIC0gTUNHIENvbnRyb2wgMyBSZWdpc3RlciAqLworI2RlZmluZSBNQ0dfQzNfU0NUUklNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTUNHX0MzX1NDVFJJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DR19DM19TQ1RSSU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0MzX1NDVFJJTV9TSElGVCkpICYgTUNHX0MzX1NDVFJJTV9NQVNLKQorCisvKiEgQG5hbWUgQzQgLSBNQ0cgQ29udHJvbCA0IFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19DNF9TQ0ZUUklNX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19DNF9TQ0ZUUklNX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQzRfU0NGVFJJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DNF9TQ0ZUUklNX1NISUZUKSkgJiBNQ0dfQzRfU0NGVFJJTV9NQVNLKQorI2RlZmluZSBNQ0dfQzRfRkNUUklNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFFVSkKKyNkZWZpbmUgTUNHX0M0X0ZDVFJJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIE1DR19DNF9GQ1RSSU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0M0X0ZDVFJJTV9TSElGVCkpICYgTUNHX0M0X0ZDVFJJTV9NQVNLKQorI2RlZmluZSBNQ0dfQzRfRFJTVF9EUlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDYwVSkKKyNkZWZpbmUgTUNHX0M0X0RSU1RfRFJTX1NISUZUICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIE1DR19DNF9EUlNUX0RSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0M0X0RSU1RfRFJTX1NISUZUKSkgJiBNQ0dfQzRfRFJTVF9EUlNfTUFTSykKKyNkZWZpbmUgTUNHX0M0X0RNWDMyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIE1DR19DNF9ETVgzMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBNQ0dfQzRfRE1YMzIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DNF9ETVgzMl9TSElGVCkpICYgTUNHX0M0X0RNWDMyX01BU0spCisKKy8qISBAbmFtZSBDNiAtIE1DRyBDb250cm9sIDYgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0M2X0NNRTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIE1DR19DNl9DTUUwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBNQ0dfQzZfQ01FMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DNl9DTUUwX1NISUZUKSkgJiBNQ0dfQzZfQ01FMF9NQVNLKQorCisvKiEgQG5hbWUgUyAtIE1DRyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX1NfSVJDU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTUNHX1NfSVJDU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DR19TX0lSQ1NUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NfSVJDU1RfU0hJRlQpKSAmIE1DR19TX0lSQ1NUX01BU0spCisjZGVmaW5lIE1DR19TX09TQ0lOSVQwX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIE1DR19TX09TQ0lOSVQwX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNQ0dfU19PU0NJTklUMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TX09TQ0lOSVQwX1NISUZUKSkgJiBNQ0dfU19PU0NJTklUMF9NQVNLKQorI2RlZmluZSBNQ0dfU19DTEtTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBNQ0dfU19DTEtTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTUNHX1NfQ0xLU1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfU19DTEtTVF9TSElGVCkpICYgTUNHX1NfQ0xLU1RfTUFTSykKKyNkZWZpbmUgTUNHX1NfSVJFRlNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIE1DR19TX0lSRUZTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBNQ0dfU19JUkVGU1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TX0lSRUZTVF9TSElGVCkpICYgTUNHX1NfSVJFRlNUX01BU0spCisKKy8qISBAbmFtZSBTQyAtIE1DRyBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX1NDX0xPQ1MwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTUNHX1NDX0xPQ1MwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DR19TQ19MT0NTMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NDX0xPQ1MwX1NISUZUKSkgJiBNQ0dfU0NfTE9DUzBfTUFTSykKKyNkZWZpbmUgTUNHX1NDX0ZDUkRJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhFVSkKKyNkZWZpbmUgTUNHX1NDX0ZDUkRJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIE1DR19TQ19GQ1JESVYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NDX0ZDUkRJVl9TSElGVCkpICYgTUNHX1NDX0ZDUkRJVl9NQVNLKQorI2RlZmluZSBNQ0dfU0NfRkxUUFJTUlZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgTUNHX1NDX0ZMVFBSU1JWX1NISUZUICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIE1DR19TQ19GTFRQUlNSVih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NDX0ZMVFBSU1JWX1NISUZUKSkgJiBNQ0dfU0NfRkxUUFJTUlZfTUFTSykKKyNkZWZpbmUgTUNHX1NDX0FUTUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIE1DR19TQ19BVE1GX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBNQ0dfU0NfQVRNRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19TQ19BVE1GX1NISUZUKSkgJiBNQ0dfU0NfQVRNRl9NQVNLKQorI2RlZmluZSBNQ0dfU0NfQVRNU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgTUNHX1NDX0FUTVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIE1DR19TQ19BVE1TKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX1NDX0FUTVNfU0hJRlQpKSAmIE1DR19TQ19BVE1TX01BU0spCisjZGVmaW5lIE1DR19TQ19BVE1FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBNQ0dfU0NfQVRNRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgTUNHX1NDX0FUTUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfU0NfQVRNRV9TSElGVCkpICYgTUNHX1NDX0FUTUVfTUFTSykKKworLyohIEBuYW1lIEFUQ1ZIIC0gTUNHIEF1dG8gVHJpbSBDb21wYXJlIFZhbHVlIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0FUQ1ZIX0FUQ1ZIX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE1DR19BVENWSF9BVENWSF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQVRDVkhfQVRDVkgoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19BVENWSF9BVENWSF9TSElGVCkpICYgTUNHX0FUQ1ZIX0FUQ1ZIX01BU0spCisKKy8qISBAbmFtZSBBVENWTCAtIE1DRyBBdXRvIFRyaW0gQ29tcGFyZSBWYWx1ZSBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0FUQ1ZMX0FUQ1ZMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE1DR19BVENWTF9BVENWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQVRDVkxfQVRDVkwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19BVENWTF9BVENWTF9TSElGVCkpICYgTUNHX0FUQ1ZMX0FUQ1ZMX01BU0spCisKKy8qISBAbmFtZSBDNyAtIE1DRyBDb250cm9sIDcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNHX0M3X09TQ1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTUNHX0M3X09TQ1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DR19DN19PU0NTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTUNHX0M3X09TQ1NFTF9TSElGVCkpICYgTUNHX0M3X09TQ1NFTF9NQVNLKQorCisvKiEgQG5hbWUgQzggLSBNQ0cgQ29udHJvbCA4IFJlZ2lzdGVyICovCisjZGVmaW5lIE1DR19DOF9MT0NTMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1DR19DOF9MT0NTMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ0dfQzhfTE9DUzEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DOF9MT0NTMV9TSElGVCkpICYgTUNHX0M4X0xPQ1MxX01BU0spCisjZGVmaW5lIE1DR19DOF9DTUUxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBNQ0dfQzhfQ01FMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTUNHX0M4X0NNRTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBNQ0dfQzhfQ01FMV9TSElGVCkpICYgTUNHX0M4X0NNRTFfTUFTSykKKyNkZWZpbmUgTUNHX0M4X0xPQ1JFMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIE1DR19DOF9MT0NSRTFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBNQ0dfQzhfTE9DUkUxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE1DR19DOF9MT0NSRTFfU0hJRlQpKSAmIE1DR19DOF9MT0NSRTFfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1DR19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIE1DRyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIE1DRyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTUNHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA2NDAwMHUpCisvKiogUGVyaXBoZXJhbCBNQ0cgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIE1DRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQ0dfVHlwZSAqKU1DR19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE1DRyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIE1DR19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBNQ0dfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTUNHIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBNQ0dfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTUNHIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIE1DRyBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgTUNHX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IE1DR19JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNQ0dfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNQ00gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBNQ01fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgTUNNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBNQ00gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs4XTsKKyAgX19JICB1aW50MTZfdCBQTEFTQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ3Jvc3NiYXIgU3dpdGNoIChBWEJTKSBTbGF2ZSBDb25maWd1cmF0aW9uLCBvZmZzZXQ6IDB4OCAqLworICBfX0kgIHVpbnQxNl90IFBMQU1DOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDcm9zc2JhciBTd2l0Y2ggKEFYQlMpIE1hc3RlciBDb25maWd1cmF0aW9uLCBvZmZzZXQ6IDB4QSAqLworICBfX0lPIHVpbnQzMl90IFBMQUNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQbGF0Zm9ybSBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0OF07CisgIF9fSU8gdWludDMyX3QgQ1BPOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENvbXB1dGUgT3BlcmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHg0MCAqLworfSBNQ01fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTUNNIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTUNNX1JlZ2lzdGVyX01hc2tzIE1DTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUExBU0MgLSBDcm9zc2JhciBTd2l0Y2ggKEFYQlMpIFNsYXZlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUNNX1BMQVNDX0FTQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE1DTV9QTEFTQ19BU0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNQ01fUExBU0NfQVNDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KSgoKHVpbnQxNl90KSh4KSkgPDwgTUNNX1BMQVNDX0FTQ19TSElGVCkpICYgTUNNX1BMQVNDX0FTQ19NQVNLKQorCisvKiEgQG5hbWUgUExBTUMgLSBDcm9zc2JhciBTd2l0Y2ggKEFYQlMpIE1hc3RlciBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1DTV9QTEFNQ19BTUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBNQ01fUExBTUNfQU1DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTUNNX1BMQU1DX0FNQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IE1DTV9QTEFNQ19BTUNfU0hJRlQpKSAmIE1DTV9QTEFNQ19BTUNfTUFTSykKKworLyohIEBuYW1lIFBMQUNSIC0gUGxhdGZvcm0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNQ01fUExBQ1JfQVJCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9BUkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBNQ01fUExBQ1JfQVJCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX1BMQUNSX0FSQl9TSElGVCkpICYgTUNNX1BMQUNSX0FSQl9NQVNLKQorI2RlZmluZSBNQ01fUExBQ1JfQ0ZDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9DRkNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDEwVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0NGQ0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1DTV9QTEFDUl9DRkNDX1NISUZUKSkgJiBNQ01fUExBQ1JfQ0ZDQ19NQVNLKQorI2RlZmluZSBNQ01fUExBQ1JfREZDREFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNEQV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ0RBKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1DTV9QTEFDUl9ERkNEQV9TSElGVCkpICYgTUNNX1BMQUNSX0RGQ0RBX01BU0spCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNJQ19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNJQ19TSElGVCAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ0lDKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1DTV9QTEFDUl9ERkNJQ19TSElGVCkpICYgTUNNX1BMQUNSX0RGQ0lDX01BU0spCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIE1DTV9QTEFDUl9ERkNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1DTV9QTEFDUl9ERkNDX1NISUZUKSkgJiBNQ01fUExBQ1JfREZDQ19NQVNLKQorI2RlZmluZSBNQ01fUExBQ1JfRUZEU19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBNQ01fUExBQ1JfRUZEU19TSElGVCAgICAgICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIE1DTV9QTEFDUl9FRkRTKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fUExBQ1JfRUZEU19TSElGVCkpICYgTUNNX1BMQUNSX0VGRFNfTUFTSykKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgTUNNX1BMQUNSX0RGQ1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBNQ01fUExBQ1JfREZDUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTUNNX1BMQUNSX0RGQ1NfU0hJRlQpKSAmIE1DTV9QTEFDUl9ERkNTX01BU0spCisjZGVmaW5lIE1DTV9QTEFDUl9FU0ZDX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBNQ01fUExBQ1JfRVNGQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIE1DTV9QTEFDUl9FU0ZDKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fUExBQ1JfRVNGQ19TSElGVCkpICYgTUNNX1BMQUNSX0VTRkNfTUFTSykKKworLyohIEBuYW1lIENQTyAtIENvbXB1dGUgT3BlcmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUNNX0NQT19DUE9SRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTUNNX0NQT19DUE9SRVFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1DTV9DUE9fQ1BPUkVRKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fQ1BPX0NQT1JFUV9TSElGVCkpICYgTUNNX0NQT19DUE9SRVFfTUFTSykKKyNkZWZpbmUgTUNNX0NQT19DUE9BQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTUNNX0NQT19DUE9BQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIE1DTV9DUE9fQ1BPQUNLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fQ1BPX0NQT0FDS19TSElGVCkpICYgTUNNX0NQT19DUE9BQ0tfTUFTSykKKyNkZWZpbmUgTUNNX0NQT19DUE9XT0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTUNNX0NQT19DUE9XT0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIE1DTV9DUE9fQ1BPV09JKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNQ01fQ1BPX0NQT1dPSV9TSElGVCkpICYgTUNNX0NQT19DUE9XT0lfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1DTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIE1DTSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIE1DTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgTUNNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMzAwMHUpCisvKiogUGVyaXBoZXJhbCBNQ00gYmFzZSBwb2ludGVyICovCisjZGVmaW5lIE1DTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNQ01fVHlwZSAqKU1DTV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIE1DTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIE1DTV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBNQ01fQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTUNNIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBNQ01fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTUNNIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBNQ01fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNVEIgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBNVEJfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgTVRCIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBNVEIgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFBPU0lUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNVEIgUG9zaXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgTUFTVEVSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1UQiBNYXN0ZXIgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgRkxPVzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1UQiBGbG93IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX0kgIHVpbnQzMl90IF9CQVNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVRCIEJhc2UgUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzM4MjRdOworICBfX0kgIHVpbnQzMl90IE1PREVDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbnRlZ3JhdGlvbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHhGMDAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbMTU2XTsKKyAgX19JICB1aW50MzJfdCBUQUdTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xhaW0gVEFHIFNldCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZBMCAqLworICBfX0kgIHVpbnQzMl90IFRBR0NMRUFSOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDbGFpbSBUQUcgQ2xlYXIgUmVnaXN0ZXIsIG9mZnNldDogMHhGQTQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzJbOF07CisgIF9fSSAgdWludDMyX3QgTE9DS0FDQ0VTUzsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvY2sgQWNjZXNzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkIwICovCisgIF9fSSAgdWludDMyX3QgTE9DS1NUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvY2sgU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkI0ICovCisgIF9fSSAgdWludDMyX3QgQVVUSFNUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEF1dGhlbnRpY2F0aW9uIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweEZCOCAqLworICBfX0kgIHVpbnQzMl90IERFVklDRUFSQ0g7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZXZpY2UgQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkJDICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8zWzhdOworICBfX0kgIHVpbnQzMl90IERFVklDRUNGRzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZXZpY2UgQ29uZmlndXJhdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweEZDOCAqLworICBfX0kgIHVpbnQzMl90IERFVklDRVRZUElEOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZXZpY2UgVHlwZSBJZGVudGlmaWVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkNDICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRDAgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZENCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkQ4ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ3OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGREMgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFMCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkU0ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRTggKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFQyAqLworICBfX0kgIHVpbnQzMl90IENPTVBJRFs0XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21wb25lbnQgSUQgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHhGRjAsIGFycmF5IHN0ZXA6IDB4NCAqLworfSBNVEJfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTVRCIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTVRCX1JlZ2lzdGVyX01hc2tzIE1UQiBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUE9TSVRJT04gLSBNVEIgUG9zaXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BPU0lUSU9OX1dSQVBfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgTVRCX1BPU0lUSU9OX1dSQVBfU0hJRlQgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIE1UQl9QT1NJVElPTl9XUkFQKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfUE9TSVRJT05fV1JBUF9TSElGVCkpICYgTVRCX1BPU0lUSU9OX1dSQVBfTUFTSykKKyNkZWZpbmUgTVRCX1BPU0lUSU9OX1BPSU5URVJfTUFTSyAgICAgICAgICAgICAgICAoMHhGRkZGRkZGOFUpCisjZGVmaW5lIE1UQl9QT1NJVElPTl9QT0lOVEVSX1NISUZUICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBNVEJfUE9TSVRJT05fUE9JTlRFUih4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BPU0lUSU9OX1BPSU5URVJfU0hJRlQpKSAmIE1UQl9QT1NJVElPTl9QT0lOVEVSX01BU0spCisKKy8qISBAbmFtZSBNQVNURVIgLSBNVEIgTWFzdGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9NQVNURVJfTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MUZVKQorI2RlZmluZSBNVEJfTUFTVEVSX01BU0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX01BU1RFUl9NQVNLKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NQVNURVJfTUFTS19TSElGVCkpICYgTVRCX01BU1RFUl9NQVNLX01BU0spCisjZGVmaW5lIE1UQl9NQVNURVJfVFNUQVJURU5fTUFTSyAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBNVEJfTUFTVEVSX1RTVEFSVEVOX1NISUZUICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgTVRCX01BU1RFUl9UU1RBUlRFTih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NQVNURVJfVFNUQVJURU5fU0hJRlQpKSAmIE1UQl9NQVNURVJfVFNUQVJURU5fTUFTSykKKyNkZWZpbmUgTVRCX01BU1RFUl9UU1RPUEVOX01BU0sgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIE1UQl9NQVNURVJfVFNUT1BFTl9TSElGVCAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBNVEJfTUFTVEVSX1RTVE9QRU4oeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX01BU1RFUl9UU1RPUEVOX1NISUZUKSkgJiBNVEJfTUFTVEVSX1RTVE9QRU5fTUFTSykKKyNkZWZpbmUgTVRCX01BU1RFUl9TRlJXUFJJVl9NQVNLICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIE1UQl9NQVNURVJfU0ZSV1BSSVZfU0hJRlQgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBNVEJfTUFTVEVSX1NGUldQUklWKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX01BU1RFUl9TRlJXUFJJVl9TSElGVCkpICYgTVRCX01BU1RFUl9TRlJXUFJJVl9NQVNLKQorI2RlZmluZSBNVEJfTUFTVEVSX1JBTVBSSVZfTUFTSyAgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIE1UQl9NQVNURVJfUkFNUFJJVl9TSElGVCAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBNVEJfTUFTVEVSX1JBTVBSSVYoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX01BU1RFUl9SQU1QUklWX1NISUZUKSkgJiBNVEJfTUFTVEVSX1JBTVBSSVZfTUFTSykKKyNkZWZpbmUgTVRCX01BU1RFUl9IQUxUUkVRX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBNVEJfTUFTVEVSX0hBTFRSRVFfU0hJRlQgICAgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgTVRCX01BU1RFUl9IQUxUUkVRKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NQVNURVJfSEFMVFJFUV9TSElGVCkpICYgTVRCX01BU1RFUl9IQUxUUkVRX01BU0spCisjZGVmaW5lIE1UQl9NQVNURVJfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBNVEJfTUFTVEVSX0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIE1UQl9NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTUFTVEVSX0VOX1NISUZUKSkgJiBNVEJfTUFTVEVSX0VOX01BU0spCisKKy8qISBAbmFtZSBGTE9XIC0gTVRCIEZsb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0ZMT1dfQVVUT1NUT1BfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgTVRCX0ZMT1dfQVVUT1NUT1BfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9GTE9XX0FVVE9TVE9QKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfRkxPV19BVVRPU1RPUF9TSElGVCkpICYgTVRCX0ZMT1dfQVVUT1NUT1BfTUFTSykKKyNkZWZpbmUgTVRCX0ZMT1dfQVVUT0hBTFRfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgTVRCX0ZMT1dfQVVUT0hBTFRfU0hJRlQgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIE1UQl9GTE9XX0FVVE9IQUxUKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfRkxPV19BVVRPSEFMVF9TSElGVCkpICYgTVRCX0ZMT1dfQVVUT0hBTFRfTUFTSykKKyNkZWZpbmUgTVRCX0ZMT1dfV0FURVJNQVJLX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGOFUpCisjZGVmaW5lIE1UQl9GTE9XX1dBVEVSTUFSS19TSElGVCAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBNVEJfRkxPV19XQVRFUk1BUksoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0ZMT1dfV0FURVJNQVJLX1NISUZUKSkgJiBNVEJfRkxPV19XQVRFUk1BUktfTUFTSykKKworLyohIEBuYW1lIEJBU0UgLSBNVEIgQmFzZSBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfQkFTRV9CQVNFQUREUl9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX0JBU0VfQkFTRUFERFJfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9CQVNFX0JBU0VBRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfQkFTRV9CQVNFQUREUl9TSElGVCkpICYgTVRCX0JBU0VfQkFTRUFERFJfTUFTSykKKworLyohIEBuYW1lIE1PREVDVFJMIC0gSW50ZWdyYXRpb24gTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9NT0RFQ1RSTF9NT0RFQ1RSTF9NQVNLICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfTU9ERUNUUkxfTU9ERUNUUkxfU0hJRlQgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX01PREVDVFJMX01PREVDVFJMKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9NT0RFQ1RSTF9NT0RFQ1RSTF9TSElGVCkpICYgTVRCX01PREVDVFJMX01PREVDVFJMX01BU0spCisKKy8qISBAbmFtZSBUQUdTRVQgLSBDbGFpbSBUQUcgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9UQUdTRVRfVEFHU0VUX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfVEFHU0VUX1RBR1NFVF9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1RBR1NFVF9UQUdTRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9UQUdTRVRfVEFHU0VUX1NISUZUKSkgJiBNVEJfVEFHU0VUX1RBR1NFVF9NQVNLKQorCisvKiEgQG5hbWUgVEFHQ0xFQVIgLSBDbGFpbSBUQUcgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1RBR0NMRUFSX1RBR0NMRUFSX01BU0sgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9UQUdDTEVBUl9UQUdDTEVBUl9TSElGVCAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfVEFHQ0xFQVJfVEFHQ0xFQVIoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1RBR0NMRUFSX1RBR0NMRUFSX1NISUZUKSkgJiBNVEJfVEFHQ0xFQVJfVEFHQ0xFQVJfTUFTSykKKworLyohIEBuYW1lIExPQ0tBQ0NFU1MgLSBMb2NrIEFjY2VzcyBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfTE9DS0FDQ0VTU19MT0NLQUNDRVNTX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX0xPQ0tBQ0NFU1NfTE9DS0FDQ0VTU19TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9MT0NLQUNDRVNTX0xPQ0tBQ0NFU1MoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfTE9DS0FDQ0VTU19MT0NLQUNDRVNTX1NISUZUKSkgJiBNVEJfTE9DS0FDQ0VTU19MT0NLQUNDRVNTX01BU0spCisKKy8qISBAbmFtZSBMT0NLU1RBVCAtIExvY2sgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9MT0NLU1RBVF9MT0NLU1RBVF9NQVNLICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfTE9DS1NUQVRfTE9DS1NUQVRfU0hJRlQgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX0xPQ0tTVEFUX0xPQ0tTVEFUKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9MT0NLU1RBVF9MT0NLU1RBVF9TSElGVCkpICYgTVRCX0xPQ0tTVEFUX0xPQ0tTVEFUX01BU0spCisKKy8qISBAbmFtZSBBVVRIU1RBVCAtIEF1dGhlbnRpY2F0aW9uIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUMF9NQVNLICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUMF9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDAoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9BVVRIU1RBVF9CSVQwX1NISUZUKSkgJiBNVEJfQVVUSFNUQVRfQklUMF9NQVNLKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUMV9NQVNLICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUMV9TSElGVCAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDEoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9BVVRIU1RBVF9CSVQxX1NISUZUKSkgJiBNVEJfQVVUSFNUQVRfQklUMV9NQVNLKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUMl9NQVNLICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUMl9TSElGVCAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDIoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9BVVRIU1RBVF9CSVQyX1NISUZUKSkgJiBNVEJfQVVUSFNUQVRfQklUMl9NQVNLKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUM19NQVNLICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBNVEJfQVVUSFNUQVRfQklUM19TSElGVCAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgTVRCX0FVVEhTVEFUX0JJVDMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9BVVRIU1RBVF9CSVQzX1NISUZUKSkgJiBNVEJfQVVUSFNUQVRfQklUM19NQVNLKQorCisvKiEgQG5hbWUgREVWSUNFQVJDSCAtIERldmljZSBBcmNoaXRlY3R1cmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0RFVklDRUFSQ0hfREVWSUNFQVJDSF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9ERVZJQ0VBUkNIX0RFVklDRUFSQ0hfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfREVWSUNFQVJDSF9ERVZJQ0VBUkNIKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0RFVklDRUFSQ0hfREVWSUNFQVJDSF9TSElGVCkpICYgTVRCX0RFVklDRUFSQ0hfREVWSUNFQVJDSF9NQVNLKQorCisvKiEgQG5hbWUgREVWSUNFQ0ZHIC0gRGV2aWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0RFVklDRUNGR19ERVZJQ0VDRkdfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9ERVZJQ0VDRkdfREVWSUNFQ0ZHX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfREVWSUNFQ0ZHX0RFVklDRUNGRyh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0RFVklDRUNGR19ERVZJQ0VDRkdfU0hJRlQpKSAmIE1UQl9ERVZJQ0VDRkdfREVWSUNFQ0ZHX01BU0spCisKKy8qISBAbmFtZSBERVZJQ0VUWVBJRCAtIERldmljZSBUeXBlIElkZW50aWZpZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0RFVklDRVRZUElEX0RFVklDRVRZUElEX01BU0sgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9ERVZJQ0VUWVBJRF9ERVZJQ0VUWVBJRF9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfREVWSUNFVFlQSURfREVWSUNFVFlQSUQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0RFVklDRVRZUElEX0RFVklDRVRZUElEX1NISUZUKSkgJiBNVEJfREVWSUNFVFlQSURfREVWSUNFVFlQSURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENCAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BFUklQSElENF9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDRfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfUEVSSVBISUQ0X1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BFUklQSElENF9QRVJJUEhJRF9TSElGVCkpICYgTVRCX1BFUklQSElENF9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ1IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfUEVSSVBISUQ1X1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX1BFUklQSElENV9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDVfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfUEVSSVBISUQ1X1BFUklQSElEX1NISUZUKSkgJiBNVEJfUEVSSVBISUQ1X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDYgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9QRVJJUEhJRDZfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfUEVSSVBISUQ2X1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1BFUklQSElENl9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9QRVJJUEhJRDZfUEVSSVBISURfU0hJRlQpKSAmIE1UQl9QRVJJUEhJRDZfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENyAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BFUklQSElEN19QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDdfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfUEVSSVBISUQ3X1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BFUklQSElEN19QRVJJUEhJRF9TSElGVCkpICYgTVRCX1BFUklQSElEN19QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQwIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfUEVSSVBISUQwX1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX1BFUklQSElEMF9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDBfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfUEVSSVBISUQwX1BFUklQSElEX1NISUZUKSkgJiBNVEJfUEVSSVBISUQwX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDEgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQl9QRVJJUEhJRDFfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJfUEVSSVBISUQxX1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCX1BFUklQSElEMV9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQl9QRVJJUEhJRDFfUEVSSVBISURfU0hJRlQpKSAmIE1UQl9QRVJJUEhJRDFfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMiAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX1BFUklQSElEMl9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDJfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfUEVSSVBISUQyX1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX1BFUklQSElEMl9QRVJJUEhJRF9TSElGVCkpICYgTVRCX1BFUklQSElEMl9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQzIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJfUEVSSVBISUQzX1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCX1BFUklQSElEM19QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQl9QRVJJUEhJRDNfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJfUEVSSVBISUQzX1BFUklQSElEX1NISUZUKSkgJiBNVEJfUEVSSVBISUQzX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBDT01QSUQgLSBDb21wb25lbnQgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCX0NPTVBJRF9DT01QSURfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQl9DT01QSURfQ09NUElEX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJfQ09NUElEX0NPTVBJRCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCX0NPTVBJRF9DT01QSURfU0hJRlQpKSAmIE1UQl9DT01QSURfQ09NUElEX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBNVEJfQ09NUElEICovCisjZGVmaW5lIE1UQl9DT01QSURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTVRCX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogTVRCIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgTVRCIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBNVEJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEYwMDAwMDAwdSkKKy8qKiBQZXJpcGhlcmFsIE1UQiBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgTVRCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1UQl9UeXBlICopTVRCX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTVRCIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTVRCX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IE1UQl9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBNVEIgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIE1UQl9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBNVEIgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1UQl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIE1UQkRXVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE1UQkRXVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBNVEJEV1QgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIE1UQkRXVCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSSAgdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE1UQiBEV1QgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMjhdOworICBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDIwLCBhcnJheSBzdGVwOiAweDEwICovCisgICAgX19JTyB1aW50MzJfdCBDT01QOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVRCX0RXVCBDb21wYXJhdG9yIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MjAsIGFycmF5IHN0ZXA6IDB4MTAgKi8KKyAgICBfX0lPIHVpbnQzMl90IE1BU0s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNVEJfRFdUIENvbXBhcmF0b3IgTWFzayBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDI0LCBhcnJheSBzdGVwOiAweDEwICovCisgICAgX19JTyB1aW50MzJfdCBGQ1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTVRCX0RXVCBDb21wYXJhdG9yIEZ1bmN0aW9uIFJlZ2lzdGVyIDAuLk1UQl9EV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciAxLCBhcnJheSBvZmZzZXQ6IDB4MjgsIGFycmF5IHN0ZXA6IDB4MTAgKi8KKyAgICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0XTsKKyAgfSBDT01QQVJBVE9SWzJdOworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0NDhdOworICBfX0lPIHVpbnQzMl90IFRCQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNVEJfRFdUIFRyYWNlIEJ1ZmZlciBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MjAwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzM1MjRdOworICBfX0kgIHVpbnQzMl90IERFVklDRUNGRzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZXZpY2UgQ29uZmlndXJhdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweEZDOCAqLworICBfX0kgIHVpbnQzMl90IERFVklDRVRZUElEOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZXZpY2UgVHlwZSBJZGVudGlmaWVyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkNDICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRDAgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZENCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkQ4ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ3OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGREMgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFMCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkU0ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRTggKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFQyAqLworICBfX0kgIHVpbnQzMl90IENPTVBJRFs0XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21wb25lbnQgSUQgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHhGRjAsIGFycmF5IHN0ZXA6IDB4NCAqLworfSBNVEJEV1RfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gTVRCRFdUIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTVRCRFdUX1JlZ2lzdGVyX01hc2tzIE1UQkRXVCBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ1RSTCAtIE1UQiBEV1QgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfQ1RSTF9EV1RDRkdDVFJMX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfQ1RSTF9EV1RDRkdDVFJMX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX0NUUkxfRFdUQ0ZHQ1RSTCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9DVFJMX0RXVENGR0NUUkxfU0hJRlQpKSAmIE1UQkRXVF9DVFJMX0RXVENGR0NUUkxfTUFTSykKKyNkZWZpbmUgTVRCRFdUX0NUUkxfTlVNQ01QX01BU0sgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIE1UQkRXVF9DVFJMX05VTUNNUF9TSElGVCAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgTVRCRFdUX0NUUkxfTlVNQ01QKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9DVFJMX05VTUNNUF9TSElGVCkpICYgTVRCRFdUX0NUUkxfTlVNQ01QX01BU0spCisKKy8qISBAbmFtZSBDT01QIC0gTVRCX0RXVCBDb21wYXJhdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9DT01QX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfQ09NUF9DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX0NPTVBfQ09NUCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9DT01QX0NPTVBfU0hJRlQpKSAmIE1UQkRXVF9DT01QX0NPTVBfTUFTSykKKworLyogVGhlIGNvdW50IG9mIE1UQkRXVF9DT01QICovCisjZGVmaW5lIE1UQkRXVF9DT01QX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgTUFTSyAtIE1UQl9EV1QgQ29tcGFyYXRvciBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9NQVNLX01BU0tfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MUZVKQorI2RlZmluZSBNVEJEV1RfTUFTS19NQVNLX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX01BU0tfTUFTSyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9NQVNLX01BU0tfU0hJRlQpKSAmIE1UQkRXVF9NQVNLX01BU0tfTUFTSykKKworLyogVGhlIGNvdW50IG9mIE1UQkRXVF9NQVNLICovCisjZGVmaW5lIE1UQkRXVF9NQVNLX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgRkNUIC0gTVRCX0RXVCBDb21wYXJhdG9yIEZ1bmN0aW9uIFJlZ2lzdGVyIDAuLk1UQl9EV1QgQ29tcGFyYXRvciBGdW5jdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIE1UQkRXVF9GQ1RfRlVOQ1RJT05fTUFTSyAgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIE1UQkRXVF9GQ1RfRlVOQ1RJT05fU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfRkNUX0ZVTkNUSU9OKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0ZDVF9GVU5DVElPTl9TSElGVCkpICYgTVRCRFdUX0ZDVF9GVU5DVElPTl9NQVNLKQorI2RlZmluZSBNVEJEV1RfRkNUX0RBVEFWTUFUQ0hfTUFTSyAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIE1UQkRXVF9GQ1RfREFUQVZNQVRDSF9TSElGVCAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBNVEJEV1RfRkNUX0RBVEFWTUFUQ0goeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0ZDVF9EQVRBVk1BVENIX1NISUZUKSkgJiBNVEJEV1RfRkNUX0RBVEFWTUFUQ0hfTUFTSykKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVlNJWkVfTUFTSyAgICAgICAgICAgICAgICAoMHhDMDBVKQorI2RlZmluZSBNVEJEV1RfRkNUX0RBVEFWU0laRV9TSElGVCAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIE1UQkRXVF9GQ1RfREFUQVZTSVpFKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfRkNUX0RBVEFWU0laRV9TSElGVCkpICYgTVRCRFdUX0ZDVF9EQVRBVlNJWkVfTUFTSykKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVkFERFIwX01BU0sgICAgICAgICAgICAgICAoMHhGMDAwVSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9EQVRBVkFERFIwX1NISUZUICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBNVEJEV1RfRkNUX0RBVEFWQUREUjAoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0ZDVF9EQVRBVkFERFIwX1NISUZUKSkgJiBNVEJEV1RfRkNUX0RBVEFWQUREUjBfTUFTSykKKyNkZWZpbmUgTVRCRFdUX0ZDVF9NQVRDSEVEX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgTVRCRFdUX0ZDVF9NQVRDSEVEX1NISUZUICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBNVEJEV1RfRkNUX01BVENIRUQoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0ZDVF9NQVRDSEVEX1NISUZUKSkgJiBNVEJEV1RfRkNUX01BVENIRURfTUFTSykKKworLyogVGhlIGNvdW50IG9mIE1UQkRXVF9GQ1QgKi8KKyNkZWZpbmUgTVRCRFdUX0ZDVF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBUQkNUUkwgLSBNVEJfRFdUIFRyYWNlIEJ1ZmZlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9UQkNUUkxfQUNPTVAwX01BU0sgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE1UQkRXVF9UQkNUUkxfQUNPTVAwX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX0FDT01QMCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1RCQ1RSTF9BQ09NUDBfU0hJRlQpKSAmIE1UQkRXVF9UQkNUUkxfQUNPTVAwX01BU0spCisjZGVmaW5lIE1UQkRXVF9UQkNUUkxfQUNPTVAxX01BU0sgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIE1UQkRXVF9UQkNUUkxfQUNPTVAxX1NISUZUICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX0FDT01QMSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1RCQ1RSTF9BQ09NUDFfU0hJRlQpKSAmIE1UQkRXVF9UQkNUUkxfQUNPTVAxX01BU0spCisjZGVmaW5lIE1UQkRXVF9UQkNUUkxfTlVNQ09NUF9NQVNLICAgICAgICAgICAgICAgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBNVEJEV1RfVEJDVFJMX05VTUNPTVBfU0hJRlQgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIE1UQkRXVF9UQkNUUkxfTlVNQ09NUCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfVEJDVFJMX05VTUNPTVBfU0hJRlQpKSAmIE1UQkRXVF9UQkNUUkxfTlVNQ09NUF9NQVNLKQorCisvKiEgQG5hbWUgREVWSUNFQ0ZHIC0gRGV2aWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX0RFVklDRUNGR19ERVZJQ0VDRkdfTUFTSyAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9ERVZJQ0VDRkdfREVWSUNFQ0ZHX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfREVWSUNFQ0ZHX0RFVklDRUNGRyh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0RFVklDRUNGR19ERVZJQ0VDRkdfU0hJRlQpKSAmIE1UQkRXVF9ERVZJQ0VDRkdfREVWSUNFQ0ZHX01BU0spCisKKy8qISBAbmFtZSBERVZJQ0VUWVBJRCAtIERldmljZSBUeXBlIElkZW50aWZpZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX0RFVklDRVRZUElEX0RFVklDRVRZUElEX01BU0sgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9ERVZJQ0VUWVBJRF9ERVZJQ0VUWVBJRF9TSElGVCAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfREVWSUNFVFlQSURfREVWSUNFVFlQSUQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0RFVklDRVRZUElEX0RFVklDRVRZUElEX1NISUZUKSkgJiBNVEJEV1RfREVWSUNFVFlQSURfREVWSUNFVFlQSURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENCAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX1BFUklQSElENF9QRVJJUEhJRF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDRfUEVSSVBISURfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ0X1BFUklQSElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1BFUklQSElENF9QRVJJUEhJRF9TSElGVCkpICYgTVRCRFdUX1BFUklQSElENF9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ1IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ1X1BFUklQSElEX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElENV9QRVJJUEhJRF9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDVfUEVSSVBISUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfUEVSSVBISUQ1X1BFUklQSElEX1NISUZUKSkgJiBNVEJEV1RfUEVSSVBISUQ1X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDYgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDZfUEVSSVBISURfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ2X1BFUklQSElEX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElENl9QRVJJUEhJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9QRVJJUEhJRDZfUEVSSVBISURfU0hJRlQpKSAmIE1UQkRXVF9QRVJJUEhJRDZfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENyAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEN19QRVJJUEhJRF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDdfUEVSSVBISURfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQ3X1BFUklQSElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1BFUklQSElEN19QRVJJUEhJRF9TSElGVCkpICYgTVRCRFdUX1BFUklQSElEN19QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQwIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfUEVSSVBISUQwX1BFUklQSElEX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEMF9QRVJJUEhJRF9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDBfUEVSSVBISUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfUEVSSVBISUQwX1BFUklQSElEX1NISUZUKSkgJiBNVEJEV1RfUEVSSVBISUQwX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDEgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDFfUEVSSVBISURfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQxX1BFUklQSElEX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEMV9QRVJJUEhJRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IE1UQkRXVF9QRVJJUEhJRDFfUEVSSVBISURfU0hJRlQpKSAmIE1UQkRXVF9QRVJJUEhJRDFfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMiAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEMl9QRVJJUEhJRF9NQVNLICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDJfUEVSSVBISURfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfUEVSSVBISUQyX1BFUklQSElEKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX1BFUklQSElEMl9QRVJJUEhJRF9TSElGVCkpICYgTVRCRFdUX1BFUklQSElEMl9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQzIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBNVEJEV1RfUEVSSVBISUQzX1BFUklQSElEX01BU0sgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgTVRCRFdUX1BFUklQSElEM19QRVJJUEhJRF9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIE1UQkRXVF9QRVJJUEhJRDNfUEVSSVBISUQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBNVEJEV1RfUEVSSVBISUQzX1BFUklQSElEX1NISUZUKSkgJiBNVEJEV1RfUEVSSVBISUQzX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBDT01QSUQgLSBDb21wb25lbnQgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRCRFdUX0NPTVBJRF9DT01QSURfTUFTSyAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIE1UQkRXVF9DT01QSURfQ09NUElEX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBNVEJEV1RfQ09NUElEX0NPTVBJRCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgTVRCRFdUX0NPTVBJRF9DT01QSURfU0hJRlQpKSAmIE1UQkRXVF9DT01QSURfQ09NUElEX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBNVEJEV1RfQ09NUElEICovCisjZGVmaW5lIE1UQkRXVF9DT01QSURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgKDRVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgTVRCRFdUX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogTVRCRFdUIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgTVRCRFdUIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBNVEJEV1RfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEYwMDAxMDAwdSkKKy8qKiBQZXJpcGhlcmFsIE1UQkRXVCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgTVRCRFdUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1UQkRXVF9UeXBlICopTVRCRFdUX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTVRCRFdUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTVRCRFdUX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgICB7IE1UQkRXVF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBNVEJEV1QgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIE1UQkRXVF9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgeyBNVEJEV1QgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE1UQkRXVF9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIE5WIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgTlZfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgTlYgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIE5WIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JICB1aW50OF90IEJBQ0tLRVkzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgMy4sIG9mZnNldDogMHgwICovCisgIF9fSSAgdWludDhfdCBCQUNLS0VZMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDIuLCBvZmZzZXQ6IDB4MSAqLworICBfX0kgIHVpbnQ4X3QgQkFDS0tFWTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCYWNrZG9vciBDb21wYXJpc29uIEtleSAxLiwgb2Zmc2V0OiAweDIgKi8KKyAgX19JICB1aW50OF90IEJBQ0tLRVkwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgMC4sIG9mZnNldDogMHgzICovCisgIF9fSSAgdWludDhfdCBCQUNLS0VZNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDcuLCBvZmZzZXQ6IDB4NCAqLworICBfX0kgIHVpbnQ4X3QgQkFDS0tFWTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCYWNrZG9vciBDb21wYXJpc29uIEtleSA2Liwgb2Zmc2V0OiAweDUgKi8KKyAgX19JICB1aW50OF90IEJBQ0tLRVk1OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgNS4sIG9mZnNldDogMHg2ICovCisgIF9fSSAgdWludDhfdCBCQUNLS0VZNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDQuLCBvZmZzZXQ6IDB4NyAqLworICBfX0kgIHVpbnQ4X3QgRlBST1QzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDEgLSBMb3cgUmVnaXN0ZXIsIG9mZnNldDogMHg4ICovCisgIF9fSSAgdWludDhfdCBGUFJPVDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vbi12b2xhdGlsZSBQLUZsYXNoIFByb3RlY3Rpb24gMSAtIEhpZ2ggUmVnaXN0ZXIsIG9mZnNldDogMHg5ICovCisgIF9fSSAgdWludDhfdCBGUFJPVDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE5vbi12b2xhdGlsZSBQLUZsYXNoIFByb3RlY3Rpb24gMCAtIExvdyBSZWdpc3Rlciwgb2Zmc2V0OiAweEEgKi8KKyAgX19JICB1aW50OF90IEZQUk9UMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTm9uLXZvbGF0aWxlIFAtRmxhc2ggUHJvdGVjdGlvbiAwIC0gSGlnaCBSZWdpc3Rlciwgb2Zmc2V0OiAweEIgKi8KKyAgX19JICB1aW50OF90IEZTRUM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTm9uLXZvbGF0aWxlIEZsYXNoIFNlY3VyaXR5IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICBfX0kgIHVpbnQ4X3QgRk9QVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb24tdm9sYXRpbGUgRmxhc2ggT3B0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RCAqLworfSBOVl9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBOViBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIE5WX1JlZ2lzdGVyX01hc2tzIE5WIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBCQUNLS0VZMyAtIEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDMuICovCisjZGVmaW5lIE5WX0JBQ0tLRVkzX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9CQUNLS0VZM19LRVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTNfS0VZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9CQUNLS0VZM19LRVlfU0hJRlQpKSAmIE5WX0JBQ0tLRVkzX0tFWV9NQVNLKQorCisvKiEgQG5hbWUgQkFDS0tFWTIgLSBCYWNrZG9vciBDb21wYXJpc29uIEtleSAyLiAqLworI2RlZmluZSBOVl9CQUNLS0VZMl9LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTJfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0JBQ0tLRVkyX0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfQkFDS0tFWTJfS0VZX1NISUZUKSkgJiBOVl9CQUNLS0VZMl9LRVlfTUFTSykKKworLyohIEBuYW1lIEJBQ0tLRVkxIC0gQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgMS4gKi8KKyNkZWZpbmUgTlZfQkFDS0tFWTFfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0JBQ0tLRVkxX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9CQUNLS0VZMV9LRVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0JBQ0tLRVkxX0tFWV9TSElGVCkpICYgTlZfQkFDS0tFWTFfS0VZX01BU0spCisKKy8qISBAbmFtZSBCQUNLS0VZMCAtIEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDAuICovCisjZGVmaW5lIE5WX0JBQ0tLRVkwX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9CQUNLS0VZMF9LRVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTBfS0VZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9CQUNLS0VZMF9LRVlfU0hJRlQpKSAmIE5WX0JBQ0tLRVkwX0tFWV9NQVNLKQorCisvKiEgQG5hbWUgQkFDS0tFWTcgLSBCYWNrZG9vciBDb21wYXJpc29uIEtleSA3LiAqLworI2RlZmluZSBOVl9CQUNLS0VZN19LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTdfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0JBQ0tLRVk3X0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfQkFDS0tFWTdfS0VZX1NISUZUKSkgJiBOVl9CQUNLS0VZN19LRVlfTUFTSykKKworLyohIEBuYW1lIEJBQ0tLRVk2IC0gQmFja2Rvb3IgQ29tcGFyaXNvbiBLZXkgNi4gKi8KKyNkZWZpbmUgTlZfQkFDS0tFWTZfS0VZX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIE5WX0JBQ0tLRVk2X0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9CQUNLS0VZNl9LRVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0JBQ0tLRVk2X0tFWV9TSElGVCkpICYgTlZfQkFDS0tFWTZfS0VZX01BU0spCisKKy8qISBAbmFtZSBCQUNLS0VZNSAtIEJhY2tkb29yIENvbXBhcmlzb24gS2V5IDUuICovCisjZGVmaW5lIE5WX0JBQ0tLRVk1X0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9CQUNLS0VZNV9LRVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTVfS0VZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9CQUNLS0VZNV9LRVlfU0hJRlQpKSAmIE5WX0JBQ0tLRVk1X0tFWV9NQVNLKQorCisvKiEgQG5hbWUgQkFDS0tFWTQgLSBCYWNrZG9vciBDb21wYXJpc29uIEtleSA0LiAqLworI2RlZmluZSBOVl9CQUNLS0VZNF9LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfQkFDS0tFWTRfS0VZX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0JBQ0tLRVk0X0tFWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfQkFDS0tFWTRfS0VZX1NISUZUKSkgJiBOVl9CQUNLS0VZNF9LRVlfTUFTSykKKworLyohIEBuYW1lIEZQUk9UMyAtIE5vbi12b2xhdGlsZSBQLUZsYXNoIFByb3RlY3Rpb24gMSAtIExvdyBSZWdpc3RlciAqLworI2RlZmluZSBOVl9GUFJPVDNfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfRlBST1QzX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0ZQUk9UM19QUk9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRlBST1QzX1BST1RfU0hJRlQpKSAmIE5WX0ZQUk9UM19QUk9UX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDIgLSBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDEgLSBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lIE5WX0ZQUk9UMl9QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9GUFJPVDJfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfRlBST1QyX1BST1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GUFJPVDJfUFJPVF9TSElGVCkpICYgTlZfRlBST1QyX1BST1RfTUFTSykKKworLyohIEBuYW1lIEZQUk9UMSAtIE5vbi12b2xhdGlsZSBQLUZsYXNoIFByb3RlY3Rpb24gMCAtIExvdyBSZWdpc3RlciAqLworI2RlZmluZSBOVl9GUFJPVDFfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgTlZfRlBST1QxX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0ZQUk9UMV9QUk9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRlBST1QxX1BST1RfU0hJRlQpKSAmIE5WX0ZQUk9UMV9QUk9UX01BU0spCisKKy8qISBAbmFtZSBGUFJPVDAgLSBOb24tdm9sYXRpbGUgUC1GbGFzaCBQcm90ZWN0aW9uIDAgLSBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lIE5WX0ZQUk9UMF9QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBOVl9GUFJPVDBfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgTlZfRlBST1QwX1BST1QoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GUFJPVDBfUFJPVF9TSElGVCkpICYgTlZfRlBST1QwX1BST1RfTUFTSykKKworLyohIEBuYW1lIEZTRUMgLSBOb24tdm9sYXRpbGUgRmxhc2ggU2VjdXJpdHkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlZfRlNFQ19TRUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSkKKyNkZWZpbmUgTlZfRlNFQ19TRUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIE5WX0ZTRUNfU0VDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRlNFQ19TRUNfU0hJRlQpKSAmIE5WX0ZTRUNfU0VDX01BU0spCisjZGVmaW5lIE5WX0ZTRUNfRlNMQUNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4Q1UpCisjZGVmaW5lIE5WX0ZTRUNfRlNMQUNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBOVl9GU0VDX0ZTTEFDQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZTRUNfRlNMQUNDX1NISUZUKSkgJiBOVl9GU0VDX0ZTTEFDQ19NQVNLKQorI2RlZmluZSBOVl9GU0VDX01FRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDMwVSkKKyNkZWZpbmUgTlZfRlNFQ19NRUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIE5WX0ZTRUNfTUVFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRlNFQ19NRUVOX1NISUZUKSkgJiBOVl9GU0VDX01FRU5fTUFTSykKKyNkZWZpbmUgTlZfRlNFQ19LRVlFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhDMFUpCisjZGVmaW5lIE5WX0ZTRUNfS0VZRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBOVl9GU0VDX0tFWUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZTRUNfS0VZRU5fU0hJRlQpKSAmIE5WX0ZTRUNfS0VZRU5fTUFTSykKKworLyohIEBuYW1lIEZPUFQgLSBOb24tdm9sYXRpbGUgRmxhc2ggT3B0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE5WX0ZPUFRfTFBCT09UMF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIE5WX0ZPUFRfTFBCT09UMF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBOVl9GT1BUX0xQQk9PVDAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZPUFRfTFBCT09UMF9TSElGVCkpICYgTlZfRk9QVF9MUEJPT1QwX01BU0spCisjZGVmaW5lIE5WX0ZPUFRfTk1JX0RJU19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIE5WX0ZPUFRfTk1JX0RJU19TSElGVCAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBOVl9GT1BUX05NSV9ESVMoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZPUFRfTk1JX0RJU19TSElGVCkpICYgTlZfRk9QVF9OTUlfRElTX01BU0spCisjZGVmaW5lIE5WX0ZPUFRfUkVTRVRfUElOX0NGR19NQVNLICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIE5WX0ZPUFRfUkVTRVRfUElOX0NGR19TSElGVCAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBOVl9GT1BUX1JFU0VUX1BJTl9DRkcoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IE5WX0ZPUFRfUkVTRVRfUElOX0NGR19TSElGVCkpICYgTlZfRk9QVF9SRVNFVF9QSU5fQ0ZHX01BU0spCisjZGVmaW5lIE5WX0ZPUFRfTFBCT09UMV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBOVl9GT1BUX0xQQk9PVDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgTlZfRk9QVF9MUEJPT1QxKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBOVl9GT1BUX0xQQk9PVDFfU0hJRlQpKSAmIE5WX0ZPUFRfTFBCT09UMV9NQVNLKQorI2RlZmluZSBOVl9GT1BUX0ZBU1RfSU5JVF9NQVNLICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgTlZfRk9QVF9GQVNUX0lOSVRfU0hJRlQgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIE5WX0ZPUFRfRkFTVF9JTklUKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgTlZfRk9QVF9GQVNUX0lOSVRfU0hJRlQpKSAmIE5WX0ZPUFRfRkFTVF9JTklUX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBOVl9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIE5WIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgRlRGQV9GbGFzaENvbmZpZyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRlRGQV9GbGFzaENvbmZpZ19CQVNFICAgICAgICAgICAgICAgICAgICAoMHg0MDB1KQorLyoqIFBlcmlwaGVyYWwgRlRGQV9GbGFzaENvbmZpZyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgRlRGQV9GbGFzaENvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAoKE5WX1R5cGUgKilGVEZBX0ZsYXNoQ29uZmlnX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgTlYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBOVl9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRlRGQV9GbGFzaENvbmZpZ19CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBOViBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgTlZfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEZURkFfRmxhc2hDb25maWcgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIE5WX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUElUIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUElUX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFBJVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUElUIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBNQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUElUIE1vZHVsZSBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsyMjBdOworICBfX0kgIHVpbnQzMl90IExUTVI2NEg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSVQgVXBwZXIgTGlmZXRpbWUgVGltZXIgUmVnaXN0ZXIsIG9mZnNldDogMHhFMCAqLworICBfX0kgIHVpbnQzMl90IExUTVI2NEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSVQgTG93ZXIgTGlmZXRpbWUgVGltZXIgUmVnaXN0ZXIsIG9mZnNldDogMHhFNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVsyNF07CisgIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MTAwLCBhcnJheSBzdGVwOiAweDEwICovCisgICAgX19JTyB1aW50MzJfdCBMRFZBTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZXIgTG9hZCBWYWx1ZSBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDEwMCwgYXJyYXkgc3RlcDogMHgxMCAqLworICAgIF9fSSAgdWludDMyX3QgQ1ZBTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEN1cnJlbnQgVGltZXIgVmFsdWUgUmVnaXN0ZXIsIGFycmF5IG9mZnNldDogMHgxMDQsIGFycmF5IHN0ZXA6IDB4MTAgKi8KKyAgICBfX0lPIHVpbnQzMl90IFRDVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaW1lciBDb250cm9sIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MTA4LCBhcnJheSBzdGVwOiAweDEwICovCisgICAgX19JTyB1aW50MzJfdCBURkxHOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGltZXIgRmxhZyBSZWdpc3RlciwgYXJyYXkgb2Zmc2V0OiAweDEwQywgYXJyYXkgc3RlcDogMHgxMCAqLworICB9IENIQU5ORUxbMl07Cit9IFBJVF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBQSVQgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBQSVRfUmVnaXN0ZXJfTWFza3MgUElUIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBNQ1IgLSBQSVQgTW9kdWxlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElUX01DUl9GUlpfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUElUX01DUl9GUlpfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9NQ1JfRlJaKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfTUNSX0ZSWl9TSElGVCkpICYgUElUX01DUl9GUlpfTUFTSykKKyNkZWZpbmUgUElUX01DUl9NRElTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgUElUX01DUl9NRElTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFBJVF9NQ1JfTURJUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfTUNSX01ESVNfU0hJRlQpKSAmIFBJVF9NQ1JfTURJU19NQVNLKQorCisvKiEgQG5hbWUgTFRNUjY0SCAtIFBJVCBVcHBlciBMaWZldGltZSBUaW1lciBSZWdpc3RlciAqLworI2RlZmluZSBQSVRfTFRNUjY0SF9MVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUElUX0xUTVI2NEhfTFRIX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9MVE1SNjRIX0xUSCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfTFRNUjY0SF9MVEhfU0hJRlQpKSAmIFBJVF9MVE1SNjRIX0xUSF9NQVNLKQorCisvKiEgQG5hbWUgTFRNUjY0TCAtIFBJVCBMb3dlciBMaWZldGltZSBUaW1lciBSZWdpc3RlciAqLworI2RlZmluZSBQSVRfTFRNUjY0TF9MVExfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUElUX0xUTVI2NExfTFRMX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9MVE1SNjRMX0xUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfTFRNUjY0TF9MVExfU0hJRlQpKSAmIFBJVF9MVE1SNjRMX0xUTF9NQVNLKQorCisvKiEgQG5hbWUgTERWQUwgLSBUaW1lciBMb2FkIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJVF9MRFZBTF9UU1ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBQSVRfTERWQUxfVFNWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUElUX0xEVkFMX1RTVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBJVF9MRFZBTF9UU1ZfU0hJRlQpKSAmIFBJVF9MRFZBTF9UU1ZfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFBJVF9MRFZBTCAqLworI2RlZmluZSBQSVRfTERWQUxfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIENWQUwgLSBDdXJyZW50IFRpbWVyIFZhbHVlIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJVF9DVkFMX1RWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBQSVRfQ1ZBTF9UVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUElUX0NWQUxfVFZMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBJVF9DVkFMX1RWTF9TSElGVCkpICYgUElUX0NWQUxfVFZMX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBQSVRfQ1ZBTCAqLworI2RlZmluZSBQSVRfQ1ZBTF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKworLyohIEBuYW1lIFRDVFJMIC0gVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQSVRfVENUUkxfVEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBQSVRfVENUUkxfVEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUElUX1RDVFJMX1RFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBJVF9UQ1RSTF9URU5fU0hJRlQpKSAmIFBJVF9UQ1RSTF9URU5fTUFTSykKKyNkZWZpbmUgUElUX1RDVFJMX1RJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgUElUX1RDVFJMX1RJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFBJVF9UQ1RSTF9USUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfVENUUkxfVElFX1NISUZUKSkgJiBQSVRfVENUUkxfVElFX01BU0spCisjZGVmaW5lIFBJVF9UQ1RSTF9DSE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFBJVF9UQ1RSTF9DSE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBQSVRfVENUUkxfQ0hOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUElUX1RDVFJMX0NITl9TSElGVCkpICYgUElUX1RDVFJMX0NITl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgUElUX1RDVFJMICovCisjZGVmaW5lIFBJVF9UQ1RSTF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorCisvKiEgQG5hbWUgVEZMRyAtIFRpbWVyIEZsYWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElUX1RGTEdfVElGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUElUX1RGTEdfVElGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBJVF9URkxHX1RJRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQSVRfVEZMR19USUZfU0hJRlQpKSAmIFBJVF9URkxHX1RJRl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgUElUX1RGTEcgKi8KKyNkZWZpbmUgUElUX1RGTEdfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBQSVRfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBQSVQgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBQSVQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFBJVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMzcwMDB1KQorLyoqIFBlcmlwaGVyYWwgUElUIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBQSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElUX1R5cGUgKilQSVRfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBQSVRfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUElUX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFBJVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUElUX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFBJVCB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBQSVQgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIFBJVF9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7IFBJVF9JUlFuLCBQSVRfSVJRbiB9IH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBQSVRfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBQTUMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBQTUNfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgUE1DIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBQTUMgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQ4X3QgTFZEU0MxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb3cgVm9sdGFnZSBEZXRlY3QgU3RhdHVzIEFuZCBDb250cm9sIDEgcmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDhfdCBMVkRTQzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IExvdyBWb2x0YWdlIERldGVjdCBTdGF0dXMgQW5kIENvbnRyb2wgMiByZWdpc3Rlciwgb2Zmc2V0OiAweDEgKi8KKyAgX19JTyB1aW50OF90IFJFR1NDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVndWxhdG9yIFN0YXR1cyBBbmQgQ29udHJvbCByZWdpc3Rlciwgb2Zmc2V0OiAweDIgKi8KK30gUE1DX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFBNQyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFBNQ19SZWdpc3Rlcl9NYXNrcyBQTUMgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIExWRFNDMSAtIExvdyBWb2x0YWdlIERldGVjdCBTdGF0dXMgQW5kIENvbnRyb2wgMSByZWdpc3RlciAqLworI2RlZmluZSBQTUNfTFZEU0MxX0xWRFZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWRFZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRWKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfTFZEU0MxX0xWRFZfU0hJRlQpKSAmIFBNQ19MVkRTQzFfTFZEVl9NQVNLKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWRFJFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRSRV9TSElGVCAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZEUkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMV9MVkRSRV9TSElGVCkpICYgUE1DX0xWRFNDMV9MVkRSRV9NQVNLKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWRElFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRJRV9TSElGVCAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZESUUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMV9MVkRJRV9TSElGVCkpICYgUE1DX0xWRFNDMV9MVkRJRV9NQVNLKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWREFDS19NQVNLICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZEQUNLKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX0xWRFNDMV9MVkRBQ0tfU0hJRlQpKSAmIFBNQ19MVkRTQzFfTFZEQUNLX01BU0spCisjZGVmaW5lIFBNQ19MVkRTQzFfTFZERl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBQTUNfTFZEU0MxX0xWREZfU0hJRlQgICAgICAgICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgUE1DX0xWRFNDMV9MVkRGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfTFZEU0MxX0xWREZfU0hJRlQpKSAmIFBNQ19MVkRTQzFfTFZERl9NQVNLKQorCisvKiEgQG5hbWUgTFZEU0MyIC0gTG93IFZvbHRhZ2UgRGV0ZWN0IFN0YXR1cyBBbmQgQ29udHJvbCAyIHJlZ2lzdGVyICovCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXVl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXVl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV1YoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19MVkRTQzJfTFZXVl9TSElGVCkpICYgUE1DX0xWRFNDMl9MVldWX01BU0spCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV0lFX1NISUZUICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldJRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfTFZEU0MyX0xWV0lFX1NISUZUKSkgJiBQTUNfTFZEU0MyX0xWV0lFX01BU0spCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXQUNLX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV0FDS19TSElGVCAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldBQ0soeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBQTUNfTFZEU0MyX0xWV0FDS19TSElGVCkpICYgUE1DX0xWRFNDMl9MVldBQ0tfTUFTSykKKyNkZWZpbmUgUE1DX0xWRFNDMl9MVldGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFBNQ19MVkRTQzJfTFZXRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBQTUNfTFZEU0MyX0xWV0YoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19MVkRTQzJfTFZXRl9TSElGVCkpICYgUE1DX0xWRFNDMl9MVldGX01BU0spCisKKy8qISBAbmFtZSBSRUdTQyAtIFJlZ3VsYXRvciBTdGF0dXMgQW5kIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE1DX1JFR1NDX0JHQkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUE1DX1JFR1NDX0JHQkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBNQ19SRUdTQ19CR0JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX1JFR1NDX0JHQkVfU0hJRlQpKSAmIFBNQ19SRUdTQ19CR0JFX01BU0spCisjZGVmaW5lIFBNQ19SRUdTQ19SRUdPTlNfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFBNQ19SRUdTQ19SRUdPTlNfU0hJRlQgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBQTUNfUkVHU0NfUkVHT05TKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFBNQ19SRUdTQ19SRUdPTlNfU0hJRlQpKSAmIFBNQ19SRUdTQ19SRUdPTlNfTUFTSykKKyNkZWZpbmUgUE1DX1JFR1NDX0FDS0lTT19NQVNLICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgUE1DX1JFR1NDX0FDS0lTT19TSElGVCAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFBNQ19SRUdTQ19BQ0tJU08oeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX1JFR1NDX0FDS0lTT19TSElGVCkpICYgUE1DX1JFR1NDX0FDS0lTT19NQVNLKQorI2RlZmluZSBQTUNfUkVHU0NfVkxQT19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgUE1DX1JFR1NDX1ZMUE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFBNQ19SRUdTQ19WTFBPKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUE1DX1JFR1NDX1ZMUE9fU0hJRlQpKSAmIFBNQ19SRUdTQ19WTFBPX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBQTUNfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBQTUMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBQTUMgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFBNQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwN0QwMDB1KQorLyoqIFBlcmlwaGVyYWwgUE1DIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBQTUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE1DX1R5cGUgKilQTUNfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBQTUNfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUE1DX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFBNQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUE1DX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFBNQyB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBQTUMgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIFBNQ19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBMVkRfTFZXX0RDRENfSVJRbiB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUE1DX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUE9SVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFBPUlRfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgUE9SVCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUE9SVCAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgUENSWzMyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBpbiBDb250cm9sIFJlZ2lzdGVyIG4sIGFycmF5IG9mZnNldDogMHgwLCBhcnJheSBzdGVwOiAweDQgKi8KKyAgX19PICB1aW50MzJfdCBHUENMUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2xvYmFsIFBpbiBDb250cm9sIExvdyBSZWdpc3Rlciwgb2Zmc2V0OiAweDgwICovCisgIF9fTyAgdWludDMyX3QgR1BDSFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdsb2JhbCBQaW4gQ29udHJvbCBIaWdoIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4ODQgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbMjRdOworICBfX0lPIHVpbnQzMl90IElTRlI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbnRlcnJ1cHQgU3RhdHVzIEZsYWcgUmVnaXN0ZXIsIG9mZnNldDogMHhBMCAqLworfSBQT1JUX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFBPUlQgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBQT1JUX1JlZ2lzdGVyX01hc2tzIFBPUlQgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBDUiAtIFBpbiBDb250cm9sIFJlZ2lzdGVyIG4gKi8KKyNkZWZpbmUgUE9SVF9QQ1JfUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUE9SVF9QQ1JfUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBPUlRfUENSX1BTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX1BDUl9QU19TSElGVCkpICYgUE9SVF9QQ1JfUFNfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgUE9SVF9QQ1JfUEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFBPUlRfUENSX1BFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX1BDUl9QRV9TSElGVCkpICYgUE9SVF9QQ1JfUEVfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfU1JFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgUE9SVF9QQ1JfU1JFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFBPUlRfUENSX1NSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX1BDUl9TUkVfU0hJRlQpKSAmIFBPUlRfUENSX1NSRV9NQVNLKQorI2RlZmluZSBQT1JUX1BDUl9QRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgUE9SVF9QQ1JfUEZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFBPUlRfUENSX1BGRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX1BDUl9QRkVfU0hJRlQpKSAmIFBPUlRfUENSX1BGRV9NQVNLKQorI2RlZmluZSBQT1JUX1BDUl9EU0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgUE9SVF9QQ1JfRFNFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFBPUlRfUENSX0RTRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX1BDUl9EU0VfU0hJRlQpKSAmIFBPUlRfUENSX0RTRV9NQVNLKQorI2RlZmluZSBQT1JUX1BDUl9NVVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDcwMFUpCisjZGVmaW5lIFBPUlRfUENSX01VWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBQT1JUX1BDUl9NVVgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfTVVYX1NISUZUKSkgJiBQT1JUX1BDUl9NVVhfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfSVJRQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMFUpCisjZGVmaW5lIFBPUlRfUENSX0lSUUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgUE9SVF9QQ1JfSVJRQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBPUlRfUENSX0lSUUNfU0hJRlQpKSAmIFBPUlRfUENSX0lSUUNfTUFTSykKKyNkZWZpbmUgUE9SVF9QQ1JfSVNGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgUE9SVF9QQ1JfSVNGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBQT1JUX1BDUl9JU0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUE9SVF9QQ1JfSVNGX1NISUZUKSkgJiBQT1JUX1BDUl9JU0ZfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFBPUlRfUENSICovCisjZGVmaW5lIFBPUlRfUENSX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMyVSkKKworLyohIEBuYW1lIEdQQ0xSIC0gR2xvYmFsIFBpbiBDb250cm9sIExvdyBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUX0dQQ0xSX0dQV0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBQT1JUX0dQQ0xSX0dQV0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUE9SVF9HUENMUl9HUFdEKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBPUlRfR1BDTFJfR1BXRF9TSElGVCkpICYgUE9SVF9HUENMUl9HUFdEX01BU0spCisjZGVmaW5lIFBPUlRfR1BDTFJfR1BXRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBQT1JUX0dQQ0xSX0dQV0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFBPUlRfR1BDTFJfR1BXRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX0dQQ0xSX0dQV0VfU0hJRlQpKSAmIFBPUlRfR1BDTFJfR1BXRV9NQVNLKQorCisvKiEgQG5hbWUgR1BDSFIgLSBHbG9iYWwgUGluIENvbnRyb2wgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUX0dQQ0hSX0dQV0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBQT1JUX0dQQ0hSX0dQV0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUE9SVF9HUENIUl9HUFdEKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFBPUlRfR1BDSFJfR1BXRF9TSElGVCkpICYgUE9SVF9HUENIUl9HUFdEX01BU0spCisjZGVmaW5lIFBPUlRfR1BDSFJfR1BXRV9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBQT1JUX0dQQ0hSX0dQV0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFBPUlRfR1BDSFJfR1BXRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX0dQQ0hSX0dQV0VfU0hJRlQpKSAmIFBPUlRfR1BDSFJfR1BXRV9NQVNLKQorCisvKiEgQG5hbWUgSVNGUiAtIEludGVycnVwdCBTdGF0dXMgRmxhZyBSZWdpc3RlciAqLworI2RlZmluZSBQT1JUX0lTRlJfSVNGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUE9SVF9JU0ZSX0lTRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFBPUlRfSVNGUl9JU0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBQT1JUX0lTRlJfSVNGX1NISUZUKSkgJiBQT1JUX0lTRlJfSVNGX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBQT1JUX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogUE9SVCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFBPUlRBIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBQT1JUQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDQ5MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFBPUlRBIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBQT1JUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9SVF9UeXBlICopUE9SVEFfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIFBPUlRCIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBQT1JUQl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDRBMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFBPUlRCIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBQT1JUQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9SVF9UeXBlICopUE9SVEJfQkFTRSkKKy8qKiBQZXJpcGhlcmFsIFBPUlRDIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBQT1JUQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDRCMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFBPUlRDIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBQT1JUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9SVF9UeXBlICopUE9SVENfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBQT1JUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUE9SVF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICB7IFBPUlRBX0JBU0UsIFBPUlRCX0JBU0UsIFBPUlRDX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFBPUlRfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBQT1JUQSwgUE9SVEIsIFBPUlRDIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIFBPUlQgcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIFBPUlRfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBQT1JUQV9JUlFuLCBQT1JUQl9QT1JUQ19JUlFuLCBQT1JUQl9QT1JUQ19JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBQT1JUX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUkNNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUkNNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFJDTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUkNNIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JICB1aW50OF90IFNSUzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAwLCBvZmZzZXQ6IDB4MCAqLworICBfX0kgIHVpbnQ4X3QgU1JTMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIDEsIG9mZnNldDogMHgxICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzJdOworICBfX0lPIHVpbnQ4X3QgUlBGQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZXNldCBQaW4gRmlsdGVyIENvbnRyb2wgcmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDhfdCBSUEZXOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlc2V0IFBpbiBGaWx0ZXIgV2lkdGggcmVnaXN0ZXIsIG9mZnNldDogMHg1ICovCit9IFJDTV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBSQ00gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBSQ01fUmVnaXN0ZXJfTWFza3MgUkNNIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBTUlMwIC0gU3lzdGVtIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIFJDTV9TUlMwX1dBS0VVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFJDTV9TUlMwX1dBS0VVUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSQ01fU1JTMF9XQUtFVVAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMwX1dBS0VVUF9TSElGVCkpICYgUkNNX1NSUzBfV0FLRVVQX01BU0spCisjZGVmaW5lIFJDTV9TUlMwX0xWRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFJDTV9TUlMwX0xWRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBSQ01fU1JTMF9MVkQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMwX0xWRF9TSElGVCkpICYgUkNNX1NSUzBfTFZEX01BU0spCisjZGVmaW5lIFJDTV9TUlMwX0xPQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFJDTV9TUlMwX0xPQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBSQ01fU1JTMF9MT0MoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMwX0xPQ19TSElGVCkpICYgUkNNX1NSUzBfTE9DX01BU0spCisjZGVmaW5lIFJDTV9TUlMwX1dET0dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBSQ01fU1JTMF9XRE9HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgUkNNX1NSUzBfV0RPRyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMF9XRE9HX1NISUZUKSkgJiBSQ01fU1JTMF9XRE9HX01BU0spCisjZGVmaW5lIFJDTV9TUlMwX1BJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBSQ01fU1JTMF9QSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgUkNNX1NSUzBfUElOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMF9QSU5fU0hJRlQpKSAmIFJDTV9TUlMwX1BJTl9NQVNLKQorI2RlZmluZSBSQ01fU1JTMF9QT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgUkNNX1NSUzBfUE9SX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIFJDTV9TUlMwX1BPUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUkNNX1NSUzBfUE9SX1NISUZUKSkgJiBSQ01fU1JTMF9QT1JfTUFTSykKKworLyohIEBuYW1lIFNSUzEgLSBTeXN0ZW0gUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUkNNX1NSUzFfTE9DS1VQX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgUkNNX1NSUzFfTE9DS1VQX1NISUZUICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFJDTV9TUlMxX0xPQ0tVUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUkNNX1NSUzFfTE9DS1VQX1NISUZUKSkgJiBSQ01fU1JTMV9MT0NLVVBfTUFTSykKKyNkZWZpbmUgUkNNX1NSUzFfU1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgUkNNX1NSUzFfU1dfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFJDTV9TUlMxX1NXKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgUkNNX1NSUzFfU1dfU0hJRlQpKSAmIFJDTV9TUlMxX1NXX01BU0spCisjZGVmaW5lIFJDTV9TUlMxX01ETV9BUF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFJDTV9TUlMxX01ETV9BUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBSQ01fU1JTMV9NRE1fQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9TUlMxX01ETV9BUF9TSElGVCkpICYgUkNNX1NSUzFfTURNX0FQX01BU0spCisjZGVmaW5lIFJDTV9TUlMxX1NBQ0tFUlJfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBSQ01fU1JTMV9TQUNLRVJSX1NISUZUICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgUkNNX1NSUzFfU0FDS0VSUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBSQ01fU1JTMV9TQUNLRVJSX1NISUZUKSkgJiBSQ01fU1JTMV9TQUNLRVJSX01BU0spCisKKy8qISBAbmFtZSBSUEZDIC0gUmVzZXQgUGluIEZpbHRlciBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJDTV9SUEZDX1JTVEZMVFNSV19NQVNLICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIFJDTV9SUEZDX1JTVEZMVFNSV19TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSQ01fUlBGQ19SU1RGTFRTUlcoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9SUEZDX1JTVEZMVFNSV19TSElGVCkpICYgUkNNX1JQRkNfUlNURkxUU1JXX01BU0spCisjZGVmaW5lIFJDTV9SUEZDX1JTVEZMVFNTX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFJDTV9SUEZDX1JTVEZMVFNTX1NISUZUICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBSQ01fUlBGQ19SU1RGTFRTUyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9SUEZDX1JTVEZMVFNTX1NISUZUKSkgJiBSQ01fUlBGQ19SU1RGTFRTU19NQVNLKQorCisvKiEgQG5hbWUgUlBGVyAtIFJlc2V0IFBpbiBGaWx0ZXIgV2lkdGggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkNNX1JQRldfUlNURkxUU0VMX01BU0sgICAgICAgICAgICAgICAgICAoMHgxRlUpCisjZGVmaW5lIFJDTV9SUEZXX1JTVEZMVFNFTF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSQ01fUlBGV19SU1RGTFRTRUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFJDTV9SUEZXX1JTVEZMVFNFTF9TSElGVCkpICYgUkNNX1JQRldfUlNURkxUU0VMX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBSQ01fUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBSQ00gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBSQ00gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFJDTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwN0YwMDB1KQorLyoqIFBlcmlwaGVyYWwgUkNNIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBSQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkNNX1R5cGUgKilSQ01fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBSQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBSQ01fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUkNNX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJDTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUkNNX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJDTSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUkNNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUkZTWVMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBSRlNZU19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBSRlNZUyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogUkZTWVMgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFJFR1s4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWdpc3RlciBmaWxlIHJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4MCwgYXJyYXkgc3RlcDogMHg0ICovCit9IFJGU1lTX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFJGU1lTIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUkZTWVNfUmVnaXN0ZXJfTWFza3MgUkZTWVMgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFJFRyAtIFJlZ2lzdGVyIGZpbGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkZTWVNfUkVHX0xMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFJGU1lTX1JFR19MTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSRlNZU19SRUdfTEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUkZTWVNfUkVHX0xMX1NISUZUKSkgJiBSRlNZU19SRUdfTExfTUFTSykKKyNkZWZpbmUgUkZTWVNfUkVHX0xIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgUkZTWVNfUkVHX0xIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFJGU1lTX1JFR19MSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSRlNZU19SRUdfTEhfU0hJRlQpKSAmIFJGU1lTX1JFR19MSF9NQVNLKQorI2RlZmluZSBSRlNZU19SRUdfSExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIFJGU1lTX1JFR19ITF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgUkZTWVNfUkVHX0hMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJGU1lTX1JFR19ITF9TSElGVCkpICYgUkZTWVNfUkVHX0hMX01BU0spCisjZGVmaW5lIFJGU1lTX1JFR19ISF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBSRlNZU19SRUdfSEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFJGU1lTX1JFR19ISCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSRlNZU19SRUdfSEhfU0hJRlQpKSAmIFJGU1lTX1JFR19ISF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgUkZTWVNfUkVHICovCisjZGVmaW5lIFJGU1lTX1JFR19DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUkZTWVNfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBSRlNZUyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFJGU1lTIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBSRlNZU19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDQxMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFJGU1lTIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBSRlNZUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkZTWVNfVHlwZSAqKVJGU1lTX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUkZTWVMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBSRlNZU19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgIHsgUkZTWVNfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUkZTWVMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFJGU1lTX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSRlNZUyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUkZTWVNfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBST00gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBST01fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgUk9NIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBST00gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0kgIHVpbnQzMl90IEVOVFJZWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFbnRyeSwgYXJyYXkgb2Zmc2V0OiAweDAsIGFycmF5IHN0ZXA6IDB4NCAqLworICBfX0kgIHVpbnQzMl90IFRBQkxFTUFSSzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFbmQgb2YgVGFibGUgTWFya2VyIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFs0MDI4XTsKKyAgX19JICB1aW50MzJfdCBTWVNBQ0NFU1M7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIEFjY2VzcyBSZWdpc3Rlciwgb2Zmc2V0OiAweEZDQyAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkQwICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQ1OyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRDQgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZEOCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElENzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkRDICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRTAgKi8KKyAgX19JICB1aW50MzJfdCBQRVJJUEhJRDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUGVyaXBoZXJhbCBJRCBSZWdpc3Rlciwgb2Zmc2V0OiAweEZFNCAqLworICBfX0kgIHVpbnQzMl90IFBFUklQSElEMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4RkU4ICovCisgIF9fSSAgdWludDMyX3QgUEVSSVBISUQzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIsIG9mZnNldDogMHhGRUMgKi8KKyAgX19JICB1aW50MzJfdCBDT01QSURbNF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29tcG9uZW50IElEIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4RkYwLCBhcnJheSBzdGVwOiAweDQgKi8KK30gUk9NX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFJPTSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFJPTV9SZWdpc3Rlcl9NYXNrcyBST00gUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEVOVFJZIC0gRW50cnkgKi8KKyNkZWZpbmUgUk9NX0VOVFJZX0VOVFJZX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9FTlRSWV9FTlRSWV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fRU5UUllfRU5UUlkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX0VOVFJZX0VOVFJZX1NISUZUKSkgJiBST01fRU5UUllfRU5UUllfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFJPTV9FTlRSWSAqLworI2RlZmluZSBST01fRU5UUllfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKworLyohIEBuYW1lIFRBQkxFTUFSSyAtIEVuZCBvZiBUYWJsZSBNYXJrZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1RBQkxFTUFSS19NQVJLX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9UQUJMRU1BUktfTUFSS19TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fVEFCTEVNQVJLX01BUksoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1RBQkxFTUFSS19NQVJLX1NISUZUKSkgJiBST01fVEFCTEVNQVJLX01BUktfTUFTSykKKworLyohIEBuYW1lIFNZU0FDQ0VTUyAtIFN5c3RlbSBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1NZU0FDQ0VTU19TWVNBQ0NFU1NfTUFTSyAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9TWVNBQ0NFU1NfU1lTQUNDRVNTX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fU1lTQUNDRVNTX1NZU0FDQ0VTUyh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1NZU0FDQ0VTU19TWVNBQ0NFU1NfU0hJRlQpKSAmIFJPTV9TWVNBQ0NFU1NfU1lTQUNDRVNTX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDQgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9QRVJJUEhJRDRfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fUEVSSVBISUQ0X1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1BFUklQSElENF9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9QRVJJUEhJRDRfUEVSSVBISURfU0hJRlQpKSAmIFJPTV9QRVJJUEhJRDRfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElENSAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1BFUklQSElENV9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDVfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fUEVSSVBISUQ1X1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1BFUklQSElENV9QRVJJUEhJRF9TSElGVCkpICYgUk9NX1BFUklQSElENV9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQ2IC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBST01fUEVSSVBISUQ2X1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUk9NX1BFUklQSElENl9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDZfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBST01fUEVSSVBISUQ2X1BFUklQSElEX1NISUZUKSkgJiBST01fUEVSSVBISUQ2X1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDcgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9QRVJJUEhJRDdfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fUEVSSVBISUQ3X1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEN19QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9QRVJJUEhJRDdfUEVSSVBISURfU0hJRlQpKSAmIFJPTV9QRVJJUEhJRDdfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMCAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1BFUklQSElEMF9QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDBfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fUEVSSVBISUQwX1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1BFUklQSElEMF9QRVJJUEhJRF9TSElGVCkpICYgUk9NX1BFUklQSElEMF9QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgUEVSSVBISUQxIC0gUGVyaXBoZXJhbCBJRCBSZWdpc3RlciAqLworI2RlZmluZSBST01fUEVSSVBISUQxX1BFUklQSElEX01BU0sgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEMV9QRVJJUEhJRF9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDFfUEVSSVBISUQoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBST01fUEVSSVBISUQxX1BFUklQSElEX1NISUZUKSkgJiBST01fUEVSSVBISUQxX1BFUklQSElEX01BU0spCisKKy8qISBAbmFtZSBQRVJJUEhJRDIgLSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9QRVJJUEhJRDJfUEVSSVBISURfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fUEVSSVBISUQyX1BFUklQSElEX1NISUZUICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX1BFUklQSElEMl9QRVJJUEhJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9QRVJJUEhJRDJfUEVSSVBISURfU0hJRlQpKSAmIFJPTV9QRVJJUEhJRDJfUEVSSVBISURfTUFTSykKKworLyohIEBuYW1lIFBFUklQSElEMyAtIFBlcmlwaGVyYWwgSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NX1BFUklQSElEM19QRVJJUEhJRF9NQVNLICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJPTV9QRVJJUEhJRDNfUEVSSVBISURfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBST01fUEVSSVBISUQzX1BFUklQSElEKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUk9NX1BFUklQSElEM19QRVJJUEhJRF9TSElGVCkpICYgUk9NX1BFUklQSElEM19QRVJJUEhJRF9NQVNLKQorCisvKiEgQG5hbWUgQ09NUElEIC0gQ29tcG9uZW50IElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFJPTV9DT01QSURfQ09NUElEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBST01fQ09NUElEX0NPTVBJRF9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUk9NX0NPTVBJRF9DT01QSUQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJPTV9DT01QSURfQ09NUElEX1NISUZUKSkgJiBST01fQ09NUElEX0NPTVBJRF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgUk9NX0NPTVBJRCAqLworI2RlZmluZSBST01fQ09NUElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJPTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFJPTSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUk9NX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMjAwMHUpCisvKiogUGVyaXBoZXJhbCBST00gYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChST01fVHlwZSAqKVJPTV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJPTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFJPTV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBST01fQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUk9NIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBST01fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUk9NIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBST01fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBSU0lNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUlNJTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBSU0lNIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBSU0lNIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBDT05UUk9MOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmFkaW8gU3lzdGVtIENvbnRyb2wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgQUNUSVZFX0RFTEFZOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFJhZGlvIEFjdGl2ZSBFYXJseSBXYXJuaW5nLCBvZmZzZXQ6IDB4NCAqLworICBfX0kgIHVpbnQzMl90IE1BQ19NU0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSYWRpbyBNQUMgQWRkcmVzcywgb2Zmc2V0OiAweDggKi8KKyAgX19JICB1aW50MzJfdCBNQUNfTFNCOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmFkaW8gTUFDIEFkZHJlc3MsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgTUlTQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJhZGlvIE1pc2NlbGxhbmVvdXMsIG9mZnNldDogMHgxMCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFsyMzZdOworICBfX0kgIHVpbnQzMl90IERTTV9USU1FUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEZWVwIFNsZWVwIFRpbWVyLCBvZmZzZXQ6IDB4MTAwICovCisgIF9fSU8gdWludDMyX3QgRFNNX0NPTlRST0w7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IERlZXAgU2xlZXAgVGltZXIgQ29udHJvbCwgb2Zmc2V0OiAweDEwNCAqLworICBfX0lPIHVpbnQzMl90IERTTV9PU0NfT0ZGU0VUOyAgICAgICAgICAgICAgICAgICAgLyoqPCBEZWVwIFNsZWVwIFdha2V1cCBUaW1lIE9mZnNldCwgb2Zmc2V0OiAweDEwOCAqLworICBfX0lPIHVpbnQzMl90IEFOVF9TTEVFUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBTlQgTGluayBMYXllciBTbGVlcCBUaW1lLCBvZmZzZXQ6IDB4MTBDICovCisgIF9fSU8gdWludDMyX3QgQU5UX1dBS0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFOVCBMaW5rIExheWVyIFdha2UgVGltZSwgb2Zmc2V0OiAweDExMCAqLworICBfX0lPIHVpbnQzMl90IFpJR19TTEVFUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBMaW5rIExheWVyIFNsZWVwIFRpbWUsIG9mZnNldDogMHgxMTQgKi8KKyAgX19JTyB1aW50MzJfdCBaSUdfV0FLRTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgODAyLjE1LjQgTGluayBMYXllciBXYWtlIFRpbWUsIG9mZnNldDogMHgxMTggKi8KKyAgX19JTyB1aW50MzJfdCBHRU5fU0xFRVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgR2VuZXJpYyBGU0sgTGluayBMYXllciBTbGVlcCBUaW1lLCBvZmZzZXQ6IDB4MTFDICovCisgIF9fSU8gdWludDMyX3QgR0VOX1dBS0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEdlbmVyaWMgRlNLIExpbmsgTGF5ZXIgV2FrZSBUaW1lLCBvZmZzZXQ6IDB4MTIwICovCisgIF9fSU8gdWludDMyX3QgUkZfT1NDX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJhZGlvIE9zY2lsbGF0b3IgQ29udHJvbCwgb2Zmc2V0OiAweDEyNCAqLworICBfX0lPIHVpbnQzMl90IEFOQV9URVNUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSYWRpbyBBbmFsb2cgVGVzdCBSZWdpc3RlcnMsIG9mZnNldDogMHgxMjggKi8KKyAgX19JTyB1aW50MzJfdCBBTkFfVFJJTTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmFkaW8gQW5hbG9nIFRyaW0gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4MTJDICovCit9IFJTSU1fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUlNJTSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFJTSU1fUmVnaXN0ZXJfTWFza3MgUlNJTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ09OVFJPTCAtIFJhZGlvIFN5c3RlbSBDb250cm9sICovCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9FTl9NQVNLICAgICAgKDB4MVUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9FTl9TSElGVCAgICAgKDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0VOX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX1NUQVRfTUFTSyAgICAoMHgyVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX1NUQVRfU0hJRlQgICAoMVUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9TVEFUKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfU1RBVF9TSElGVCkpICYgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX1NUQVRfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9FTl9NQVNLICAoMHgxMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9JTlRfRU5fU0hJRlQgKDRVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfSU5UX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9FTl9TSElGVCkpICYgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfSU5UX01BU0sgICAgICgweDIwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMRV9SRl9PU0NfUkVRX0lOVF9TSElGVCAgICAoNVUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTEVfUkZfT1NDX1JFUV9JTlQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfSU5UX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfQkxFX1JGX09TQ19SRVFfSU5UX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfRU5fTUFTSyAgICAgICAgICAgICAgKDB4RjAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19FTl9TSElGVCAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUkZfT1NDX0VOX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUkZfT1NDX0VOX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfRU5fTUFTSyAoMHgxMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTl9TSElGVCAoMTJVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTl9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX01BU0sgKDB4MjAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfU0hJRlQgKDEzVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0lQUF9PQkVfM1ZfQkxFX0FDVElWRV8xX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfSVBQX09CRV8zVl9CTEVfQUNUSVZFXzFfU0hJRlQgKDE2VSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0lQUF9PQkVfM1ZfQkxFX0FDVElWRV8xKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMV9TSElGVCkpICYgUlNJTV9DT05UUk9MX0lQUF9PQkVfM1ZfQkxFX0FDVElWRV8xX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMl9NQVNLICgweDIwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0lQUF9PQkVfM1ZfQkxFX0FDVElWRV8yX1NISUZUICgxN1UpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfSVBQX09CRV8zVl9CTEVfQUNUSVZFXzJfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9JUFBfT0JFXzNWX0JMRV9BQ1RJVkVfMl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX0VOX01BU0sgKDB4NDAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX0VOX1NISUZUICgxOFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19SQU1fQUNDRVNTX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX0VOX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX0VOX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19SQU1fQUNDRVNTX09WUkRfTUFTSyAgKDB4ODAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX1NISUZUICgxOVUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SQURJT19SQU1fQUNDRVNTX09WUkQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfUkFESU9fUkFNX0FDQ0VTU19PVlJEX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SU0lNX0RTTV9FWElUX01BU0sgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JTSU1fRFNNX0VYSVRfU0hJRlQgICAgICAgICAoMjBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUlNJTV9EU01fRVhJVCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JTSU1fRFNNX0VYSVRfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SU0lNX0RTTV9FWElUX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfRU5fTUFTSyAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JTSU1fU1RPUF9BQ0tfT1ZSRF9FTl9TSElGVCAoMjJVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUlNJTV9TVE9QX0FDS19PVlJEX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JTSU1fU1RPUF9BQ0tfT1ZSRF9FTl9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JTSU1fU1RPUF9BQ0tfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUlNJTV9TVE9QX0FDS19PVlJEX01BU0sgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfU0hJRlQgICAgKDIzVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JTSU1fU1RPUF9BQ0tfT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SU0lNX1NUT1BfQUNLX09WUkRfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9NQVNLICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9TSElGVCAgICAgICAgICAoMjRVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JGX09TQ19SRUFEWV9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfRU5fTUFTSyAgICgweDIwMDAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfRU5fU0hJRlQgICgyNVUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfT1ZSRF9FTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfRU5fU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfTUFTSyAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfU0hJRlQgICAgICgyNlUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfT1ZSRCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX09WUkRfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfT1ZSRF9NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxPQ0tfU09DX1JFU0VUU19NQVNLICAgICAgICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0JMT0NLX1NPQ19SRVNFVFNfU0hJRlQgICAgICAoMjhVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxPQ0tfU09DX1JFU0VUUyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX0JMT0NLX1NPQ19SRVNFVFNfU0hJRlQpKSAmIFJTSU1fQ09OVFJPTF9CTE9DS19TT0NfUkVTRVRTX01BU0spCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTE9DS19SQURJT19PVVRQVVRTX01BU0sgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfQkxPQ0tfUkFESU9fT1VUUFVUU19TSElGVCAgICgyOVUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9CTE9DS19SQURJT19PVVRQVVRTKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0NPTlRST0xfQkxPQ0tfUkFESU9fT1VUUFVUU19TSElGVCkpICYgUlNJTV9DT05UUk9MX0JMT0NLX1JBRElPX09VVFBVVFNfTUFTSykKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0FMTE9XX0RGVF9SRVNFVFNfTUFTSyAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fQ09OVFJPTF9BTExPV19ERlRfUkVTRVRTX1NISUZUICAgICAgKDMwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX0FMTE9XX0RGVF9SRVNFVFMoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQ09OVFJPTF9BTExPV19ERlRfUkVTRVRTX1NISUZUKSkgJiBSU0lNX0NPTlRST0xfQUxMT1dfREZUX1JFU0VUU19NQVNLKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkVTRVRfQklUX01BU0sgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVF9TSElGVCAgICAgICAoMzFVKQorI2RlZmluZSBSU0lNX0NPTlRST0xfUkFESU9fUkVTRVRfQklUKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVF9TSElGVCkpICYgUlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVF9NQVNLKQorCisvKiEgQG5hbWUgQUNUSVZFX0RFTEFZIC0gUmFkaW8gQWN0aXZlIEVhcmx5IFdhcm5pbmcgKi8KKyNkZWZpbmUgUlNJTV9BQ1RJVkVfREVMQVlfQkxFX0ZJTkVfREVMQVlfTUFTSyAgICAoMHgzRlUpCisjZGVmaW5lIFJTSU1fQUNUSVZFX0RFTEFZX0JMRV9GSU5FX0RFTEFZX1NISUZUICAgKDBVKQorI2RlZmluZSBSU0lNX0FDVElWRV9ERUxBWV9CTEVfRklORV9ERUxBWSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BQ1RJVkVfREVMQVlfQkxFX0ZJTkVfREVMQVlfU0hJRlQpKSAmIFJTSU1fQUNUSVZFX0RFTEFZX0JMRV9GSU5FX0RFTEFZX01BU0spCisjZGVmaW5lIFJTSU1fQUNUSVZFX0RFTEFZX0JMRV9DT0FSU0VfREVMQVlfTUFTSyAgKDB4RjAwMDBVKQorI2RlZmluZSBSU0lNX0FDVElWRV9ERUxBWV9CTEVfQ09BUlNFX0RFTEFZX1NISUZUICgxNlUpCisjZGVmaW5lIFJTSU1fQUNUSVZFX0RFTEFZX0JMRV9DT0FSU0VfREVMQVkoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FDVElWRV9ERUxBWV9CTEVfQ09BUlNFX0RFTEFZX1NISUZUKSkgJiBSU0lNX0FDVElWRV9ERUxBWV9CTEVfQ09BUlNFX0RFTEFZX01BU0spCisKKy8qISBAbmFtZSBNQUNfTVNCIC0gUmFkaW8gTUFDIEFkZHJlc3MgKi8KKyNkZWZpbmUgUlNJTV9NQUNfTVNCX01BQ19BRERSX01TQl9NQVNLICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFJTSU1fTUFDX01TQl9NQUNfQUREUl9NU0JfU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBSU0lNX01BQ19NU0JfTUFDX0FERFJfTVNCKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9NQUNfTVNCX01BQ19BRERSX01TQl9TSElGVCkpICYgUlNJTV9NQUNfTVNCX01BQ19BRERSX01TQl9NQVNLKQorCisvKiEgQG5hbWUgTUFDX0xTQiAtIFJhZGlvIE1BQyBBZGRyZXNzICovCisjZGVmaW5lIFJTSU1fTUFDX0xTQl9NQUNfQUREUl9MU0JfTUFTSyAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBSU0lNX01BQ19MU0JfTUFDX0FERFJfTFNCX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9NQUNfTFNCX01BQ19BRERSX0xTQih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fTUFDX0xTQl9NQUNfQUREUl9MU0JfU0hJRlQpKSAmIFJTSU1fTUFDX0xTQl9NQUNfQUREUl9MU0JfTUFTSykKKworLyohIEBuYW1lIE1JU0MgLSBSYWRpbyBNaXNjZWxsYW5lb3VzICovCisjZGVmaW5lIFJTSU1fTUlTQ19BTkFMT0dfVEVTVF9FTl9NQVNLICAgICAgICAgICAgKDB4MUZVKQorI2RlZmluZSBSU0lNX01JU0NfQU5BTE9HX1RFU1RfRU5fU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9NSVNDX0FOQUxPR19URVNUX0VOKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fTUlTQ19BTkFMT0dfVEVTVF9FTl9TSElGVCkpICYgUlNJTV9NSVNDX0FOQUxPR19URVNUX0VOX01BU0spCisjZGVmaW5lIFJTSU1fTUlTQ19SQURJT19WRVJTSU9OX01BU0sgICAgICAgICAgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBSU0lNX01JU0NfUkFESU9fVkVSU0lPTl9TSElGVCAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFJTSU1fTUlTQ19SQURJT19WRVJTSU9OKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX01JU0NfUkFESU9fVkVSU0lPTl9TSElGVCkpICYgUlNJTV9NSVNDX1JBRElPX1ZFUlNJT05fTUFTSykKKworLyohIEBuYW1lIERTTV9USU1FUiAtIERlZXAgU2xlZXAgVGltZXIgKi8KKyNkZWZpbmUgUlNJTV9EU01fVElNRVJfRFNNX1RJTUVSX01BU0sgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBSU0lNX0RTTV9USU1FUl9EU01fVElNRVJfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9EU01fVElNRVJfRFNNX1RJTUVSKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX1RJTUVSX0RTTV9USU1FUl9TSElGVCkpICYgUlNJTV9EU01fVElNRVJfRFNNX1RJTUVSX01BU0spCisKKy8qISBAbmFtZSBEU01fQ09OVFJPTCAtIERlZXAgU2xlZXAgVGltZXIgQ29udHJvbCAqLworI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9BTlRfUkVBRFlfTUFTSyAgICAgICgweDFVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9BTlRfUkVBRFlfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX1JFQURZKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9SRUFEWV9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX1JFQURZX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX0RFRVBfU0xFRVBfU1RBVFVTX01BU0sgKDB4MlUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX0RFRVBfU0xFRVBfU1RBVFVTX1NISUZUICgxVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfREVFUF9TTEVFUF9TVEFUVVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0FOVF9ERUVQX1NMRUVQX1NUQVRVU19TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9BTlRfREVFUF9TTEVFUF9TVEFUVVNfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX0ZJTklTSEVEX01BU0sgICAoMHg0VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fQU5UX0ZJTklTSEVEX1NISUZUICAoMlUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9GSU5JU0hFRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0RTTV9BTlRfRklOSVNIRURfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfRFNNX0FOVF9GSU5JU0hFRF9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRVUVTVF9FTl9NQVNLICgweDhVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRVUVTVF9FTl9TSElGVCAoM1UpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFVRVNUX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUVVFU1RfRU5fU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFVRVNUX0VOX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NMRUVQX1JFUVVFU1RfTUFTSyAgKDB4MTBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TTEVFUF9SRVFVRVNUX1NISUZUICg0VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU0xFRVBfUkVRVUVTVCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfQU5UX1NMRUVQX1JFUVVFU1RfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NMRUVQX1JFUVVFU1RfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUV9NQVNLICAgICAoMHgyMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfU0hJRlQgICAgKDVVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUV9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUV9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfSU5URVJSVVBUX0VOX01BU0sgKDB4NDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfSU5URVJSVVBUX0VOX1NISUZUICg2VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX0lOVEVSUlVQVF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19JTlRFUlJVUFRfRU5fU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19JTlRFUlJVUFRfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUV9JTlRfTUFTSyAoMHg4MFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfSU5UX1NISUZUICg3VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9BTlRfU1lTQ0xLX1JFUV9JTlQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfQU5UX1NZU0NMS19SRVFfSU5UX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0FOVF9TWVNDTEtfUkVRX0lOVF9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fUkVBRFlfTUFTSyAgICAgICgweDEwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0dFTl9SRUFEWV9TSElGVCAgICAgKDhVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fUkVBRFkoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX1JFQURZX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fUkVBRFlfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fREVFUF9TTEVFUF9TVEFUVVNfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9ERUVQX1NMRUVQX1NUQVRVU19TSElGVCAoOVUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX0RFRVBfU0xFRVBfU1RBVFVTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9HRU5fREVFUF9TTEVFUF9TVEFUVVNfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfR0VOX0RFRVBfU0xFRVBfU1RBVFVTX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX0dFTl9GSU5JU0hFRF9NQVNLICAgKDB4NDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX0ZJTklTSEVEX1NISUZUICAoMTBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fRklOSVNIRUQoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9EU01fR0VOX0ZJTklTSEVEX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0RTTV9HRU5fRklOSVNIRURfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUVVFU1RfRU5fTUFTSyAoMHg4MDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRVUVTVF9FTl9TSElGVCAoMTFVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRVUVTVF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFVRVNUX0VOX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRVUVTVF9FTl9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TTEVFUF9SRVFVRVNUX01BU0sgICgweDEwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TTEVFUF9SRVFVRVNUX1NISUZUICgxMlUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NMRUVQX1JFUVVFU1QoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0dFTl9TTEVFUF9SRVFVRVNUX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0dFTl9TTEVFUF9SRVFVRVNUX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfTUFTSyAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfU0hJRlQgICAgKDEzVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX0lOVEVSUlVQVF9FTl9NQVNLICgweDQwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfSU5URVJSVVBUX0VOX1NISUZUICgxNFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19JTlRFUlJVUFRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfSU5URVJSVVBUX0VOX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfSU5URVJSVVBUX0VOX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfSU5UX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfSU5UX1NISUZUICgxNVUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfR0VOX1NZU0NMS19SRVFfSU5UKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0dFTl9TWVNDTEtfUkVRX0lOVF9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9HRU5fU1lTQ0xLX1JFUV9JTlRfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX1JFQURZX01BU0sgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19SRUFEWV9TSElGVCAgICAgKDE2VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX1JFQURZKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfRFNNX1pJR19SRUFEWV9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX1JFQURZX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX0RFRVBfU0xFRVBfU1RBVFVTX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19ERUVQX1NMRUVQX1NUQVRVU19TSElGVCAoMTdVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19ERUVQX1NMRUVQX1NUQVRVUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfWklHX0RFRVBfU0xFRVBfU1RBVFVTX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX1pJR19ERUVQX1NMRUVQX1NUQVRVU19NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9aSUdfRklOSVNIRURfTUFTSyAgICgweDQwMDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX0ZJTklTSEVEX1NISUZUICAoMThVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9aSUdfRklOSVNIRUQoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9EU01fWklHX0ZJTklTSEVEX1NISUZUKSkgJiBSU0lNX0RTTV9DT05UUk9MX0RTTV9aSUdfRklOSVNIRURfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUVVFU1RfRU5fTUFTSyAoMHg4MDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFVRVNUX0VOX1NISUZUICgxOVUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFVRVNUX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUVVFU1RfRU5fU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFVRVNUX0VOX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NMRUVQX1JFUVVFU1RfTUFTSyAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU0xFRVBfUkVRVUVTVF9TSElGVCAoMjBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TTEVFUF9SRVFVRVNUKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9aSUdfU0xFRVBfUkVRVUVTVF9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9aSUdfU0xFRVBfUkVRVUVTVF9NQVNLKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX01BU0sgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFfU0hJRlQgICAgKDIxVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFfTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX0lOVEVSUlVQVF9FTl9NQVNLICgweDQwMDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19JTlRFUlJVUFRfRU5fU0hJRlQgKDIyVSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX0lOVEVSUlVQVF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19JTlRFUlJVUFRfRU5fU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19JTlRFUlJVUFRfRU5fTUFTSykKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUV9JTlRfTUFTSyAoMHg4MDAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX0lOVF9TSElGVCAoMjNVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX1pJR19TWVNDTEtfUkVRX0lOVCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fQ09OVFJPTF9aSUdfU1lTQ0xLX1JFUV9JTlRfU0hJRlQpKSAmIFJTSU1fRFNNX0NPTlRST0xfWklHX1NZU0NMS19SRVFfSU5UX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0NMUl9NQVNLICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0NMUl9TSElGVCAgICAgKDI3VSkKKyNkZWZpbmUgUlNJTV9EU01fQ09OVFJPTF9EU01fVElNRVJfQ0xSKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0NMUl9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fVElNRVJfQ0xSX01BU0spCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0VOX01BU0sgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9FTl9TSElGVCAgICAgICgzMVUpCisjZGVmaW5lIFJTSU1fRFNNX0NPTlRST0xfRFNNX1RJTUVSX0VOKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0RTTV9DT05UUk9MX0RTTV9USU1FUl9FTl9TSElGVCkpICYgUlNJTV9EU01fQ09OVFJPTF9EU01fVElNRVJfRU5fTUFTSykKKworLyohIEBuYW1lIERTTV9PU0NfT0ZGU0VUIC0gRGVlcCBTbGVlcCBXYWtldXAgVGltZSBPZmZzZXQgKi8KKyNkZWZpbmUgUlNJTV9EU01fT1NDX09GRlNFVF9EU01fT1NDX1NUQUJJTElaRV9USU1FX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgUlNJTV9EU01fT1NDX09GRlNFVF9EU01fT1NDX1NUQUJJTElaRV9USU1FX1NISUZUICgwVSkKKyNkZWZpbmUgUlNJTV9EU01fT1NDX09GRlNFVF9EU01fT1NDX1NUQUJJTElaRV9USU1FKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9EU01fT1NDX09GRlNFVF9EU01fT1NDX1NUQUJJTElaRV9USU1FX1NISUZUKSkgJiBSU0lNX0RTTV9PU0NfT0ZGU0VUX0RTTV9PU0NfU1RBQklMSVpFX1RJTUVfTUFTSykKKworLyohIEBuYW1lIEFOVF9TTEVFUCAtIEFOVCBMaW5rIExheWVyIFNsZWVwIFRpbWUgKi8KKyNkZWZpbmUgUlNJTV9BTlRfU0xFRVBfQU5UX1NMRUVQX1RJTUVfTUFTSyAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBSU0lNX0FOVF9TTEVFUF9BTlRfU0xFRVBfVElNRV9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9BTlRfU0xFRVBfQU5UX1NMRUVQX1RJTUUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5UX1NMRUVQX0FOVF9TTEVFUF9USU1FX1NISUZUKSkgJiBSU0lNX0FOVF9TTEVFUF9BTlRfU0xFRVBfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgQU5UX1dBS0UgLSBBTlQgTGluayBMYXllciBXYWtlIFRpbWUgKi8KKyNkZWZpbmUgUlNJTV9BTlRfV0FLRV9BTlRfV0FLRV9USU1FX01BU0sgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBSU0lNX0FOVF9XQUtFX0FOVF9XQUtFX1RJTUVfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9BTlRfV0FLRV9BTlRfV0FLRV9USU1FKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5UX1dBS0VfQU5UX1dBS0VfVElNRV9TSElGVCkpICYgUlNJTV9BTlRfV0FLRV9BTlRfV0FLRV9USU1FX01BU0spCisKKy8qISBAbmFtZSBaSUdfU0xFRVAgLSA4MDIuMTUuNCBMaW5rIExheWVyIFNsZWVwIFRpbWUgKi8KKyNkZWZpbmUgUlNJTV9aSUdfU0xFRVBfWklHX1NMRUVQX1RJTUVfTUFTSyAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBSU0lNX1pJR19TTEVFUF9aSUdfU0xFRVBfVElNRV9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgUlNJTV9aSUdfU0xFRVBfWklHX1NMRUVQX1RJTUUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fWklHX1NMRUVQX1pJR19TTEVFUF9USU1FX1NISUZUKSkgJiBSU0lNX1pJR19TTEVFUF9aSUdfU0xFRVBfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgWklHX1dBS0UgLSA4MDIuMTUuNCBMaW5rIExheWVyIFdha2UgVGltZSAqLworI2RlZmluZSBSU0lNX1pJR19XQUtFX1pJR19XQUtFX1RJTUVfTUFTSyAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFJTSU1fWklHX1dBS0VfWklHX1dBS0VfVElNRV9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBSU0lNX1pJR19XQUtFX1pJR19XQUtFX1RJTUUoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9aSUdfV0FLRV9aSUdfV0FLRV9USU1FX1NISUZUKSkgJiBSU0lNX1pJR19XQUtFX1pJR19XQUtFX1RJTUVfTUFTSykKKworLyohIEBuYW1lIEdFTl9TTEVFUCAtIEdlbmVyaWMgRlNLIExpbmsgTGF5ZXIgU2xlZXAgVGltZSAqLworI2RlZmluZSBSU0lNX0dFTl9TTEVFUF9HRU5fU0xFRVBfVElNRV9NQVNLICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFJTSU1fR0VOX1NMRUVQX0dFTl9TTEVFUF9USU1FX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBSU0lNX0dFTl9TTEVFUF9HRU5fU0xFRVBfVElNRSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9HRU5fU0xFRVBfR0VOX1NMRUVQX1RJTUVfU0hJRlQpKSAmIFJTSU1fR0VOX1NMRUVQX0dFTl9TTEVFUF9USU1FX01BU0spCisKKy8qISBAbmFtZSBHRU5fV0FLRSAtIEdlbmVyaWMgRlNLIExpbmsgTGF5ZXIgV2FrZSBUaW1lICovCisjZGVmaW5lIFJTSU1fR0VOX1dBS0VfR0VOX1dBS0VfVElNRV9NQVNLICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgUlNJTV9HRU5fV0FLRV9HRU5fV0FLRV9USU1FX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fR0VOX1dBS0VfR0VOX1dBS0VfVElNRSh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0dFTl9XQUtFX0dFTl9XQUtFX1RJTUVfU0hJRlQpKSAmIFJTSU1fR0VOX1dBS0VfR0VOX1dBS0VfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgUkZfT1NDX0NUUkwgLSBSYWRpbyBPc2NpbGxhdG9yIENvbnRyb2wgKi8KKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19DT1VOVF9TRUxfTUFTSyAoMHgzVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19DT1VOVF9TRUxfU0hJRlQgKDBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX0NPVU5UX1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9BTENfQ09VTlRfU0VMX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX0NPVU5UX1NFTF9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX09OX01BU0sgICAgICgweDRVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQUxDX09OX1NISUZUICAgICgyVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0FMQ19PTih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9BTENfT05fU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9BTENfT05fTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SRl9PU0NfQllQQVNTX0VOX01BU0sgICAoMHg4VSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SRl9PU0NfQllQQVNTX0VOX1NISUZUICAoM1UpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkZfT1NDX0JZUEFTU19FTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX1JGX09TQ19CWVBBU1NfRU5fU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfUkZfT1NDX0JZUEFTU19FTl9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQ09NUF9CSUFTX01BU0sgICgweDFGMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9DT01QX0JJQVNfU0hJRlQgKDRVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfQ09NUF9CSUFTKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0NPTVBfQklBU19TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0NPTVBfQklBU19NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRENfQ09VUF9NT0RFX0VOX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RDX0NPVVBfTU9ERV9FTl9TSElGVCAoOVUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9EQ19DT1VQX01PREVfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRENfQ09VUF9NT0RFX0VOX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRENfQ09VUF9NT0RFX0VOX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUFHU0VMX01BU0sgICAgKDB4NDAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RJQUdTRUxfU0hJRlQgICAoMTBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRElBR1NFTCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RJQUdTRUxfU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUFHU0VMX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUdfQ0xLX09OX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RJR19DTEtfT05fU0hJRlQgKDExVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0RJR19DTEtfT04oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9ESUdfQ0xLX09OX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfRElHX0NMS19PTl9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfR01fTUFTSyAgICAgICAgICgweDFGMDAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0dNX1NISUZUICAgICAgICAoMTJVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfR00oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX0dNX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfR01fTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkRfTUFTSyAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEX1NISUZUICAgKDE3VSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfT05fT1ZSRF9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfT05fT1ZSRF9PTl9NQVNLICgweDQwMDAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkRfT05fU0hJRlQgKDE4VSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX09OX09WUkRfT04oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfQkJfWFRBTF9PTl9PVlJEX09OX1NISUZUKSkgJiBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfT05fT1ZSRF9PTl9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfUkVBRFlfQ09VTlRfU0VMX01BU0sgKDB4MzAwMDAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX1JFQURZX0NPVU5UX1NFTF9TSElGVCAoMjBVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX0JCX1hUQUxfUkVBRFlfQ09VTlRfU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX1JFQURZX0NPVU5UX1NFTF9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9CQl9YVEFMX1JFQURZX0NPVU5UX1NFTF9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfUkZfRU5fU0VMX01BU0sgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19SRl9FTl9TRUxfU0hJRlQgKDI3VSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX1JGX0VOX1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19SRl9FTl9TRUxfU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19SRl9FTl9TRUxfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX1NISUZUICgyOFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9TSElGVCkpICYgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfTUFTSykKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfRU5fTUFTSyAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX0VOX1NISUZUICgyOVUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfRU5fU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fRVhUX09TQ19PVlJEX0VOX01BU0spCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fUkZfQUJPUlRfT1ZSRF9NQVNLICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19SRl9BQk9SVF9PVlJEX1NISUZUICgzMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fUkZfQUJPUlRfT1ZSRCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fUkZfQUJPUlRfT1ZSRF9NQVNLKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfRU5fTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fUkZfQUJPUlRfT1ZSRF9FTl9TSElGVCAoMzFVKQorI2RlZmluZSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX1JGX09TQ19DVFJMX1JBRElPX1JGX0FCT1JUX09WUkRfRU5fU0hJRlQpKSAmIFJTSU1fUkZfT1NDX0NUUkxfUkFESU9fUkZfQUJPUlRfT1ZSRF9FTl9NQVNLKQorCisvKiEgQG5hbWUgQU5BX1RFU1QgLSBSYWRpbyBBbmFsb2cgVGVzdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fTFNfQllQX01BU0sgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fTFNfQllQX1NISUZUICAgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0JZUCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JCX0xET19MU19CWVBfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0JZUF9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX0xET19MU19ESUFHU0VMX01BU0sgICAgICgweDJVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX0xET19MU19ESUFHU0VMX1NISUZUICAgICgxVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fTFNfRElBR1NFTCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0RJQUdTRUxfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkJfTERPX0xTX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fWE9fQllQX09OX01BU0sgICAgICAoMHg0VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fWE9fQllQX09OX1NISUZUICAgICAoMlUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0JZUF9PTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0JCX0xET19YT19CWVBfT05fU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0JZUF9PTl9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX0xET19YT19ESUFHU0VMX01BU0sgICAgICgweDhVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX0xET19YT19ESUFHU0VMX1NISUZUICAgICgzVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9MRE9fWE9fRElBR1NFTCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0RJQUdTRUxfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkJfTERPX1hPX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CQl9YVEFMX1RFU1RfTUFTSyAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkJfWFRBTF9URVNUX1NISUZUICAgICAgICAgKDRVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JCX1hUQUxfVEVTVCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9CQl9YVEFMX1RFU1RfU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfQkJfWFRBTF9URVNUX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkdfRElBR0JVRl9NQVNLICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JHX0RJQUdCVUZfU0hJRlQgICAgICAgICAgICg1VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CR19ESUFHQlVGKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfQkdfRElBR0JVRl9TSElGVCkpICYgUlNJTV9BTkFfVEVTVF9CR19ESUFHQlVGX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkdfRElBR1NFTF9NQVNLICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JHX0RJQUdTRUxfU0hJRlQgICAgICAgICAgICg2VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CR19ESUFHU0VMKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfQkdfRElBR1NFTF9TSElGVCkpICYgUlNJTV9BTkFfVEVTVF9CR19ESUFHU0VMX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfQkdfU1RBUlRVUEZPUkNFX01BU0sgICAgICAgKDB4ODBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0JHX1NUQVJUVVBGT1JDRV9TSElGVCAgICAgICg3VSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9CR19TVEFSVFVQRk9SQ0UoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RFU1RfQkdfU1RBUlRVUEZPUkNFX1NISUZUKSkgJiBSU0lNX0FOQV9URVNUX0JHX1NUQVJUVVBGT1JDRV9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUdfMTIzNF9PTl9NQVNLICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBR18xMjM0X09OX1NISUZUICAgICAgICAgKDhVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUdfMTIzNF9PTih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9ESUFHXzEyMzRfT05fU0hJRlQpKSAmIFJTSU1fQU5BX1RFU1RfRElBR18xMjM0X09OX01BU0spCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDX01BU0sgICAgICAgKDB4NjAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfU0hJRlQgICAgICAoOVUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0RJQUcyU09DQURDX0RFQ19TSElGVCkpICYgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfT05fTUFTSyAgICAoMHg4MDBVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUcyU09DQURDX0RFQ19PTl9TSElGVCAgICgxMVUpCisjZGVmaW5lIFJTSU1fQU5BX1RFU1RfRElBRzJTT0NBRENfREVDX09OKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9URVNUX0RJQUcyU09DQURDX0RFQ19PTl9TSElGVCkpICYgUlNJTV9BTkFfVEVTVF9ESUFHMlNPQ0FEQ19ERUNfT05fTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHQ09ERV9NQVNLICAgICAgICAgICAgICAoMHg3MDAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVEVTVF9ESUFHQ09ERV9TSElGVCAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBSU0lNX0FOQV9URVNUX0RJQUdDT0RFKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVEVTVF9ESUFHQ09ERV9TSElGVCkpICYgUlNJTV9BTkFfVEVTVF9ESUFHQ09ERV9NQVNLKQorCisvKiEgQG5hbWUgQU5BX1RSSU0gLSBSYWRpbyBBbmFsb2cgVHJpbSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfU1BBUkVfTUFTSyAgICAgICAoMHgzVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfU1BBUkVfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1NQQVJFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9UUklNX0JCX0xET19MU19TUEFSRV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfU1BBUkVfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfVFJJTV9NQVNLICAgICAgICAoMHgzOFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX0xTX1RSSU1fU0hJRlQgICAgICAgKDNVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX0xET19MU19UUklNKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfVFJJTV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CQl9MRE9fTFNfVFJJTV9NQVNLKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX0xET19YT19TUEFSRV9NQVNLICAgICAgICgweEMwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fU1BBUkVfU0hJRlQgICAgICAoNlUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1NQQVJFKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9UUklNX0JCX0xET19YT19TUEFSRV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fU1BBUkVfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fVFJJTV9NQVNLICAgICAgICAoMHg3MDBVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX0xET19YT19UUklNX1NISUZUICAgICAgICg4VSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fVFJJTSh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU1fU0hJRlQpKSAmIFJTSU1fQU5BX1RSSU1fQkJfTERPX1hPX1RSSU1fTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1NQQVJFX01BU0sgICAgICAgICAoMHhGODAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1NQQVJFX1NISUZUICAgICAgICAoMTFVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX1hUQUxfU1BBUkUoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1NQQVJFX1NISUZUKSkgJiBSU0lNX0FOQV9UUklNX0JCX1hUQUxfU1BBUkVfTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fTUFTSyAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JCX1hUQUxfVFJJTV9TSElGVCAgICAgICAgICgxNlUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkJfWFRBTF9UUklNKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSU0lNX0FOQV9UUklNX0JCX1hUQUxfVFJJTV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CR18xVl9UUklNX01BU0sgICAgICAgICAgICAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CR18xVl9UUklNX1NISUZUICAgICAgICAgICAoMjRVKQorI2RlZmluZSBSU0lNX0FOQV9UUklNX0JHXzFWX1RSSU0oeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlNJTV9BTkFfVFJJTV9CR18xVl9UUklNX1NISUZUKSkgJiBSU0lNX0FOQV9UUklNX0JHXzFWX1RSSU1fTUFTSykKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CR19JQklBU181VV9UUklNX01BU0sgICAgICAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFJTSU1fQU5BX1RSSU1fQkdfSUJJQVNfNVVfVFJJTV9TSElGVCAgICAgKDI4VSkKKyNkZWZpbmUgUlNJTV9BTkFfVFJJTV9CR19JQklBU181VV9UUklNKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJTSU1fQU5BX1RSSU1fQkdfSUJJQVNfNVVfVFJJTV9TSElGVCkpICYgUlNJTV9BTkFfVFJJTV9CR19JQklBU181VV9UUklNX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBSU0lNX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogUlNJTSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFJTSU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFJTSU1fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNTkwMDB1KQorLyoqIFBlcmlwaGVyYWwgUlNJTSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgUlNJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJTSU1fVHlwZSAqKVJTSU1fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBSU0lNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgUlNJTV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJTSU1fQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUlNJTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUlNJTV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJTSU0gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJTSU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBSVEMgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBSVENfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgUlRDIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBSVEMgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFRTUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVEMgVGltZSBTZWNvbmRzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IFRQUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVEMgVGltZSBQcmVzY2FsZXIgUmVnaXN0ZXIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgVEFSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJUQyBUaW1lIEFsYXJtIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IFRDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSVEMgVGltZSBDb21wZW5zYXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJUQyBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBTUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlRDIFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDE0ICovCisgIF9fSU8gdWludDMyX3QgTFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJUQyBMb2NrIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBJRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlRDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIsIG9mZnNldDogMHgxQyAqLworfSBSVENfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gUlRDIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgUlRDX1JlZ2lzdGVyX01hc2tzIFJUQyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgVFNSIC0gUlRDIFRpbWUgU2Vjb25kcyBSZWdpc3RlciAqLworI2RlZmluZSBSVENfVFNSX1RTUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgUlRDX1RTUl9UU1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJUQ19UU1JfVFNSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfVFNSX1RTUl9TSElGVCkpICYgUlRDX1RTUl9UU1JfTUFTSykKKworLyohIEBuYW1lIFRQUiAtIFJUQyBUaW1lIFByZXNjYWxlciBSZWdpc3RlciAqLworI2RlZmluZSBSVENfVFBSX1RQUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBSVENfVFBSX1RQUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlRDX1RQUl9UUFIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19UUFJfVFBSX1NISUZUKSkgJiBSVENfVFBSX1RQUl9NQVNLKQorCisvKiEgQG5hbWUgVEFSIC0gUlRDIFRpbWUgQWxhcm0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RBUl9UQVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFJUQ19UQVJfVEFSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSVENfVEFSX1RBUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1RBUl9UQVJfU0hJRlQpKSAmIFJUQ19UQVJfVEFSX01BU0spCisKKy8qISBAbmFtZSBUQ1IgLSBSVEMgVGltZSBDb21wZW5zYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RDUl9UQ1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFJUQ19UQ1JfVENSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBSVENfVENSX1RDUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1RDUl9UQ1JfU0hJRlQpKSAmIFJUQ19UQ1JfVENSX01BU0spCisjZGVmaW5lIFJUQ19UQ1JfQ0lSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFJUQ19UQ1JfQ0lSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBSVENfVENSX0NJUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1RDUl9DSVJfU0hJRlQpKSAmIFJUQ19UQ1JfQ0lSX01BU0spCisjZGVmaW5lIFJUQ19UQ1JfVENWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgUlRDX1RDUl9UQ1ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBSVENfVENSX1RDVih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1RDUl9UQ1ZfU0hJRlQpKSAmIFJUQ19UQ1JfVENWX01BU0spCisjZGVmaW5lIFJUQ19UQ1JfQ0lDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBSVENfVENSX0NJQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFJUQ19UQ1JfQ0lDKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfVENSX0NJQ19TSElGVCkpICYgUlRDX1RDUl9DSUNfTUFTSykKKworLyohIEBuYW1lIENSIC0gUlRDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX0NSX1NXUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUlRDX0NSX1NXUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJUQ19DUl9TV1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfU1dSX1NISUZUKSkgJiBSVENfQ1JfU1dSX01BU0spCisjZGVmaW5lIFJUQ19DUl9XUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFJUQ19DUl9XUEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBSVENfQ1JfV1BFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX1dQRV9TSElGVCkpICYgUlRDX0NSX1dQRV9NQVNLKQorI2RlZmluZSBSVENfQ1JfU1VQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBSVENfQ1JfU1VQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgUlRDX0NSX1NVUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19DUl9TVVBfU0hJRlQpKSAmIFJUQ19DUl9TVVBfTUFTSykKKyNkZWZpbmUgUlRDX0NSX1VNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgUlRDX0NSX1VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFJUQ19DUl9VTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfVU1fU0hJRlQpKSAmIFJUQ19DUl9VTV9NQVNLKQorI2RlZmluZSBSVENfQ1JfV1BTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgUlRDX0NSX1dQU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFJUQ19DUl9XUFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfV1BTX1NISUZUKSkgJiBSVENfQ1JfV1BTX01BU0spCisjZGVmaW5lIFJUQ19DUl9PU0NFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgUlRDX0NSX09TQ0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFJUQ19DUl9PU0NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfT1NDRV9TSElGVCkpICYgUlRDX0NSX09TQ0VfTUFTSykKKyNkZWZpbmUgUlRDX0NSX0NMS09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBSVENfQ1JfQ0xLT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICg5VSkKKyNkZWZpbmUgUlRDX0NSX0NMS08oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19DUl9DTEtPX1NISUZUKSkgJiBSVENfQ1JfQ0xLT19NQVNLKQorI2RlZmluZSBSVENfQ1JfU0MxNlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMFUpCisjZGVmaW5lIFJUQ19DUl9TQzE2UF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDEwVSkKKyNkZWZpbmUgUlRDX0NSX1NDMTZQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19DUl9TQzE2UF9TSElGVCkpICYgUlRDX0NSX1NDMTZQX01BU0spCisjZGVmaW5lIFJUQ19DUl9TQzhQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwVSkKKyNkZWZpbmUgUlRDX0NSX1NDOFBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMTFVKQorI2RlZmluZSBSVENfQ1JfU0M4UCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0NSX1NDOFBfU0hJRlQpKSAmIFJUQ19DUl9TQzhQX01BU0spCisjZGVmaW5lIFJUQ19DUl9TQzRQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFJUQ19DUl9TQzRQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgUlRDX0NSX1NDNFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19DUl9TQzRQX1NISUZUKSkgJiBSVENfQ1JfU0M0UF9NQVNLKQorI2RlZmluZSBSVENfQ1JfU0MyUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBSVENfQ1JfU0MyUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIFJUQ19DUl9TQzJQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfQ1JfU0MyUF9TSElGVCkpICYgUlRDX0NSX1NDMlBfTUFTSykKKworLyohIEBuYW1lIFNSIC0gUlRDIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBSVENfU1JfVElGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBSVENfU1JfVElGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgUlRDX1NSX1RJRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19TUl9USUZfU0hJRlQpKSAmIFJUQ19TUl9USUZfTUFTSykKKyNkZWZpbmUgUlRDX1NSX1RPRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgUlRDX1NSX1RPRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFJUQ19TUl9UT0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfU1JfVE9GX1NISUZUKSkgJiBSVENfU1JfVE9GX01BU0spCisjZGVmaW5lIFJUQ19TUl9UQUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFJUQ19TUl9UQUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBSVENfU1JfVEFGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX1NSX1RBRl9TSElGVCkpICYgUlRDX1NSX1RBRl9NQVNLKQorI2RlZmluZSBSVENfU1JfVENFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgUlRDX1NSX1RDRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFJUQ19TUl9UQ0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfU1JfVENFX1NISUZUKSkgJiBSVENfU1JfVENFX01BU0spCisKKy8qISBAbmFtZSBMUiAtIFJUQyBMb2NrIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19MUl9UQ0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFJUQ19MUl9UQ0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBSVENfTFJfVENMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0xSX1RDTF9TSElGVCkpICYgUlRDX0xSX1RDTF9NQVNLKQorI2RlZmluZSBSVENfTFJfQ1JMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgUlRDX0xSX0NSTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFJUQ19MUl9DUkwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfTFJfQ1JMX1NISUZUKSkgJiBSVENfTFJfQ1JMX01BU0spCisjZGVmaW5lIFJUQ19MUl9TUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBSVENfTFJfU1JMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgUlRDX0xSX1NSTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19MUl9TUkxfU0hJRlQpKSAmIFJUQ19MUl9TUkxfTUFTSykKKyNkZWZpbmUgUlRDX0xSX0xSTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFJUQ19MUl9MUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBSVENfTFJfTFJMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0xSX0xSTF9TSElGVCkpICYgUlRDX0xSX0xSTF9NQVNLKQorCisvKiEgQG5hbWUgSUVSIC0gUlRDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX0lFUl9USUlFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgUlRDX0lFUl9USUlFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFJUQ19JRVJfVElJRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBSVENfSUVSX1RJSUVfU0hJRlQpKSAmIFJUQ19JRVJfVElJRV9NQVNLKQorI2RlZmluZSBSVENfSUVSX1RPSUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBSVENfSUVSX1RPSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgUlRDX0lFUl9UT0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFJUQ19JRVJfVE9JRV9TSElGVCkpICYgUlRDX0lFUl9UT0lFX01BU0spCisjZGVmaW5lIFJUQ19JRVJfVEFJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFJUQ19JRVJfVEFJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBSVENfSUVSX1RBSUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0lFUl9UQUlFX1NISUZUKSkgJiBSVENfSUVSX1RBSUVfTUFTSykKKyNkZWZpbmUgUlRDX0lFUl9UU0lFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFJUQ19JRVJfVFNJRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBSVENfSUVSX1RTSUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0lFUl9UU0lFX1NISUZUKSkgJiBSVENfSUVSX1RTSUVfTUFTSykKKyNkZWZpbmUgUlRDX0lFUl9XUE9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFJUQ19JRVJfV1BPTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBSVENfSUVSX1dQT04oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgUlRDX0lFUl9XUE9OX1NISUZUKSkgJiBSVENfSUVSX1dQT05fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJUQ19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFJUQyAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFJUQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgUlRDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAzRDAwMHUpCisvKiogUGVyaXBoZXJhbCBSVEMgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFJUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSVENfVHlwZSAqKVJUQ19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFJUQ19CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSVENfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgUlRDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBSVENfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUlRDIH0KKy8qKiBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgdGhlIFJUQyBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgUlRDX0lSUVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJUQ19JUlFuIH0KKyNkZWZpbmUgUlRDX1NFQ09ORFNfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICB7IFJUQ19TZWNvbmRzX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFJUQ19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFNJTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFNJTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBTSU0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFNJTSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgU09QVDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDEsIG9mZnNldDogMHgwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzQwOTZdOworICBfX0lPIHVpbnQzMl90IFNPUFQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MTAwNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0XTsKKyAgX19JTyB1aW50MzJfdCBTT1BUNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgNCwgb2Zmc2V0OiAweDEwMEMgKi8KKyAgX19JTyB1aW50MzJfdCBTT1BUNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgNSwgb2Zmc2V0OiAweDEwMTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzJbNF07CisgIF9fSU8gdWludDMyX3QgU09QVDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDcsIG9mZnNldDogMHgxMDE4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8zWzhdOworICBfX0kgIHVpbnQzMl90IFNESUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gRGV2aWNlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTAyNCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNFsxMl07CisgIF9fSU8gdWludDMyX3QgU0NHQzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBDbG9jayBHYXRpbmcgQ29udHJvbCBSZWdpc3RlciA0LCBvZmZzZXQ6IDB4MTAzNCAqLworICBfX0lPIHVpbnQzMl90IFNDR0M1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gQ2xvY2sgR2F0aW5nIENvbnRyb2wgUmVnaXN0ZXIgNSwgb2Zmc2V0OiAweDEwMzggKi8KKyAgX19JTyB1aW50MzJfdCBTQ0dDNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3lzdGVtIENsb2NrIEdhdGluZyBDb250cm9sIFJlZ2lzdGVyIDYsIG9mZnNldDogMHgxMDNDICovCisgIF9fSU8gdWludDMyX3QgU0NHQzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN5c3RlbSBDbG9jayBHYXRpbmcgQ29udHJvbCBSZWdpc3RlciA3LCBvZmZzZXQ6IDB4MTA0MCAqLworICBfX0lPIHVpbnQzMl90IENMS0RJVjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeXN0ZW0gQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MTA0NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfNVs0XTsKKyAgX19JTyB1aW50MzJfdCBGQ0ZHMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRmxhc2ggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MTA0QyAqLworICBfX0kgIHVpbnQzMl90IEZDRkcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIsIG9mZnNldDogMHgxMDUwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF82WzRdOworICBfX0kgIHVpbnQzMl90IFVJRE1IOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBVbmlxdWUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgTWlkLUhpZ2gsIG9mZnNldDogMHgxMDU4ICovCisgIF9fSSAgdWludDMyX3QgVUlETUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFVuaXF1ZSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciBNaWQgTG93LCBvZmZzZXQ6IDB4MTA1QyAqLworICBfX0kgIHVpbnQzMl90IFVJREw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBVbmlxdWUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgTG93LCBvZmZzZXQ6IDB4MTA2MCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfN1sxNTZdOworICBfX0lPIHVpbnQzMl90IENPUEM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDT1AgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDExMDAgKi8KKyAgX19PICB1aW50MzJfdCBTUlZDT1A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VydmljZSBDT1AsIG9mZnNldDogMHgxMTA0ICovCit9IFNJTV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTSU0gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBTSU1fUmVnaXN0ZXJfTWFza3MgU0lNIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBTT1BUMSAtIFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU0lNX1NPUFQxX09TQzMyS09VVF9NQVNLICAgICAgICAgICAgICAgICAoMHgzMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktPVVRfU0hJRlQgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU0lNX1NPUFQxX09TQzMyS09VVCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUMV9PU0MzMktPVVRfU0hJRlQpKSAmIFNJTV9TT1BUMV9PU0MzMktPVVRfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQxX09TQzMyS1NFTF9NQVNLICAgICAgICAgICAgICAgICAoMHhDMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUMV9PU0MzMktTRUxfU0hJRlQgICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgU0lNX1NPUFQxX09TQzMyS1NFTCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUMV9PU0MzMktTRUxfU0hJRlQpKSAmIFNJTV9TT1BUMV9PU0MzMktTRUxfTUFTSykKKworLyohIEBuYW1lIFNPUFQyIC0gU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTSU1fU09QVDJfQ0xLT1VUU0VMX01BU0sgICAgICAgICAgICAgICAgICgweEUwVSkKKyNkZWZpbmUgU0lNX1NPUFQyX0NMS09VVFNFTF9TSElGVCAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFNJTV9TT1BUMl9DTEtPVVRTRUwoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDJfQ0xLT1VUU0VMX1NISUZUKSkgJiBTSU1fU09QVDJfQ0xLT1VUU0VMX01BU0spCisjZGVmaW5lIFNJTV9TT1BUMl9UUE1TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MzAwMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUMl9UUE1TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgU0lNX1NPUFQyX1RQTVNSQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUMl9UUE1TUkNfU0hJRlQpKSAmIFNJTV9TT1BUMl9UUE1TUkNfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQyX0xQVUFSVDBTUkNfTUFTSyAgICAgICAgICAgICAgICAoMHhDMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NPUFQyX0xQVUFSVDBTUkNfU0hJRlQgICAgICAgICAgICAgICAoMjZVKQorI2RlZmluZSBTSU1fU09QVDJfTFBVQVJUMFNSQyh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQyX0xQVUFSVDBTUkNfU0hJRlQpKSAmIFNJTV9TT1BUMl9MUFVBUlQwU1JDX01BU0spCisKKy8qISBAbmFtZSBTT1BUNCAtIFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTFDSDBTUkNfTUFTSyAgICAgICAgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0xQ0gwU1JDX1NISUZUICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTFDSDBTUkMoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNF9UUE0xQ0gwU1JDX1NISUZUKSkgJiBTSU1fU09QVDRfVFBNMUNIMFNSQ19NQVNLKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMkNIMFNSQ19NQVNLICAgICAgICAgICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0yQ0gwU1JDX1NISUZUICAgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTJDSDBTUkMoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNF9UUE0yQ0gwU1JDX1NISUZUKSkgJiBTSU1fU09QVDRfVFBNMkNIMFNSQ19NQVNLKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMENMS1NFTF9NQVNLICAgICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMENMS1NFTF9TSElGVCAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0wQ0xLU0VMKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDRfVFBNMENMS1NFTF9TSElGVCkpICYgU0lNX1NPUFQ0X1RQTTBDTEtTRUxfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTFDTEtTRUxfTUFTSyAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTFDTEtTRUxfU0hJRlQgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBTSU1fU09QVDRfVFBNMUNMS1NFTCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQ0X1RQTTFDTEtTRUxfU0hJRlQpKSAmIFNJTV9TT1BUNF9UUE0xQ0xLU0VMX01BU0spCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0yQ0xLU0VMX01BU0sgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUNF9UUE0yQ0xLU0VMX1NISUZUICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgU0lNX1NPUFQ0X1RQTTJDTEtTRUwoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNF9UUE0yQ0xLU0VMX1NISUZUKSkgJiBTSU1fU09QVDRfVFBNMkNMS1NFTF9NQVNLKQorCisvKiEgQG5hbWUgU09QVDUgLSBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA1ICovCisjZGVmaW5lIFNJTV9TT1BUNV9MUFVBUlQwVFhTUkNfTUFTSyAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIFNJTV9TT1BUNV9MUFVBUlQwVFhTUkNfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTSU1fU09QVDVfTFBVQVJUMFRYU1JDKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQ1X0xQVUFSVDBUWFNSQ19TSElGVCkpICYgU0lNX1NPUFQ1X0xQVUFSVDBUWFNSQ19NQVNLKQorI2RlZmluZSBTSU1fU09QVDVfTFBVQVJUMFJYU1JDX01BU0sgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBTSU1fU09QVDVfTFBVQVJUMFJYU1JDX1NISUZUICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgU0lNX1NPUFQ1X0xQVUFSVDBSWFNSQyh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNV9MUFVBUlQwUlhTUkNfU0hJRlQpKSAmIFNJTV9TT1BUNV9MUFVBUlQwUlhTUkNfTUFTSykKKyNkZWZpbmUgU0lNX1NPUFQ1X0xQVUFSVDBPREVfTUFTSyAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFNJTV9TT1BUNV9MUFVBUlQwT0RFX1NISUZUICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU0lNX1NPUFQ1X0xQVUFSVDBPREUoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUNV9MUFVBUlQwT0RFX1NISUZUKSkgJiBTSU1fU09QVDVfTFBVQVJUME9ERV9NQVNLKQorCisvKiEgQG5hbWUgU09QVDcgLSBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA3ICovCisjZGVmaW5lIFNJTV9TT1BUN19BREMwVFJHU0VMX01BU0sgICAgICAgICAgICAgICAgKDB4RlUpCisjZGVmaW5lIFNJTV9TT1BUN19BREMwVFJHU0VMX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTSU1fU09QVDdfQURDMFRSR1NFTCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NPUFQ3X0FEQzBUUkdTRUxfU0hJRlQpKSAmIFNJTV9TT1BUN19BREMwVFJHU0VMX01BU0spCisjZGVmaW5lIFNJTV9TT1BUN19BREMwUFJFVFJHU0VMX01BU0sgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBTSU1fU09QVDdfQURDMFBSRVRSR1NFTF9TSElGVCAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgU0lNX1NPUFQ3X0FEQzBQUkVUUkdTRUwoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TT1BUN19BREMwUFJFVFJHU0VMX1NISUZUKSkgJiBTSU1fU09QVDdfQURDMFBSRVRSR1NFTF9NQVNLKQorI2RlZmluZSBTSU1fU09QVDdfQURDMEFMVFRSR0VOX01BU0sgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgU0lNX1NPUFQ3X0FEQzBBTFRUUkdFTl9TSElGVCAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIFNJTV9TT1BUN19BREMwQUxUVFJHRU4oeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU09QVDdfQURDMEFMVFRSR0VOX1NISUZUKSkgJiBTSU1fU09QVDdfQURDMEFMVFRSR0VOX01BU0spCisKKy8qISBAbmFtZSBTRElEIC0gU3lzdGVtIERldmljZSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTSU1fU0RJRF9QSU5JRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBTSU1fU0RJRF9QSU5JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1NESURfUElOSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX1BJTklEX1NISUZUKSkgJiBTSU1fU0RJRF9QSU5JRF9NQVNLKQorI2RlZmluZSBTSU1fU0RJRF9ESUVJRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEY4MFUpCisjZGVmaW5lIFNJTV9TRElEX0RJRUlEX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBTSU1fU0RJRF9ESUVJRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NESURfRElFSURfU0hJRlQpKSAmIFNJTV9TRElEX0RJRUlEX01BU0spCisjZGVmaW5lIFNJTV9TRElEX1JFVklEX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMFUpCisjZGVmaW5lIFNJTV9TRElEX1JFVklEX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgU0lNX1NESURfUkVWSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX1JFVklEX1NISUZUKSkgJiBTSU1fU0RJRF9SRVZJRF9NQVNLKQorI2RlZmluZSBTSU1fU0RJRF9TUkFNU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICgweEYwMDAwVSkKKyNkZWZpbmUgU0lNX1NESURfU1JBTVNJWkVfU0hJRlQgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTSU1fU0RJRF9TUkFNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NESURfU1JBTVNJWkVfU0hJRlQpKSAmIFNJTV9TRElEX1NSQU1TSVpFX01BU0spCisjZGVmaW5lIFNJTV9TRElEX1NFUklFU0lEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwVSkKKyNkZWZpbmUgU0lNX1NESURfU0VSSUVTSURfU0hJRlQgICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBTSU1fU0RJRF9TRVJJRVNJRCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NESURfU0VSSUVTSURfU0hJRlQpKSAmIFNJTV9TRElEX1NFUklFU0lEX01BU0spCisjZGVmaW5lIFNJTV9TRElEX1NVQkZBTUlEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MzAwMDAwMFUpCisjZGVmaW5lIFNJTV9TRElEX1NVQkZBTUlEX1NISUZUICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgU0lNX1NESURfU1VCRkFNSUQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TRElEX1NVQkZBTUlEX1NISUZUKSkgJiBTSU1fU0RJRF9TVUJGQU1JRF9NQVNLKQorI2RlZmluZSBTSU1fU0RJRF9GQU1JRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NESURfRkFNSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBTSU1fU0RJRF9GQU1JRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NESURfRkFNSURfU0hJRlQpKSAmIFNJTV9TRElEX0ZBTUlEX01BU0spCisKKy8qISBAbmFtZSBTQ0dDNCAtIFN5c3RlbSBDbG9jayBHYXRpbmcgQ29udHJvbCBSZWdpc3RlciA0ICovCisjZGVmaW5lIFNJTV9TQ0dDNF9DTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFNJTV9TQ0dDNF9DTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBTSU1fU0NHQzRfQ01UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M0X0NNVF9TSElGVCkpICYgU0lNX1NDR0M0X0NNVF9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzRfSTJDMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgU0lNX1NDR0M0X0kyQzBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFNJTV9TQ0dDNF9JMkMwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzRfSTJDMF9TSElGVCkpICYgU0lNX1NDR0M0X0kyQzBfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M0X0kyQzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFNJTV9TQ0dDNF9JMkMxX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBTSU1fU0NHQzRfSTJDMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M0X0kyQzFfU0hJRlQpKSAmIFNJTV9TQ0dDNF9JMkMxX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNF9DTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzRfQ01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxOVUpCisjZGVmaW5lIFNJTV9TQ0dDNF9DTVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzRfQ01QX1NISUZUKSkgJiBTSU1fU0NHQzRfQ01QX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNF9WUkVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M0X1ZSRUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBTSU1fU0NHQzRfVlJFRih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M0X1ZSRUZfU0hJRlQpKSAmIFNJTV9TQ0dDNF9WUkVGX01BU0spCisKKy8qISBAbmFtZSBTQ0dDNSAtIFN5c3RlbSBDbG9jayBHYXRpbmcgQ29udHJvbCBSZWdpc3RlciA1ICovCisjZGVmaW5lIFNJTV9TQ0dDNV9MUFRNUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFNJTV9TQ0dDNV9MUFRNUl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTSU1fU0NHQzVfTFBUTVIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X0xQVE1SX1NISUZUKSkgJiBTSU1fU0NHQzVfTFBUTVJfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1RTSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9UU0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBTSU1fU0NHQzVfVFNJKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X1RTSV9TSElGVCkpICYgU0lNX1NDR0M1X1RTSV9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9QT1JUQV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVEEoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X1BPUlRBX1NISUZUKSkgJiBTSU1fU0NHQzVfUE9SVEFfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1BPUlRCX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVEJfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9QT1JUQih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfUE9SVEJfU0hJRlQpKSAmIFNJTV9TQ0dDNV9QT1JUQl9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzVfUE9SVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9QT1JUQ19TSElGVCAgICAgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgU0lNX1NDR0M1X1BPUlRDKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9QT1JUQ19TSElGVCkpICYgU0lNX1NDR0M1X1BPUlRDX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9MUFVBUlQwX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X0xQVUFSVDBfU0hJRlQgICAgICAgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBTSU1fU0NHQzVfTFBVQVJUMCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X0xQVUFSVDBfU0hJRlQpKSAmIFNJTV9TQ0dDNV9MUFVBUlQwX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9MVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9MVENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgU0lNX1NDR0M1X0xUQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9MVENfU0hJRlQpKSAmIFNJTV9TQ0dDNV9MVENfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1JTSU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X1JTSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBTSU1fU0NHQzVfUlNJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M1X1JTSU1fU0hJRlQpKSAmIFNJTV9TQ0dDNV9SU0lNX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNV9EQ0RDX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9EQ0RDX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgU0lNX1NDR0M1X0RDREMoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9EQ0RDX1NISUZUKSkgJiBTSU1fU0NHQzVfRENEQ19NQVNLKQorI2RlZmluZSBTSU1fU0NHQzVfQlRMTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzVfQlRMTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyN1UpCisjZGVmaW5lIFNJTV9TQ0dDNV9CVExMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzVfQlRMTF9TSElGVCkpICYgU0lNX1NDR0M1X0JUTExfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1BIWURJR19NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9QSFlESUdfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgU0lNX1NDR0M1X1BIWURJRyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9QSFlESUdfU0hJRlQpKSAmIFNJTV9TQ0dDNV9QSFlESUdfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X1ppZ0JlZV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9aaWdCZWVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI5VSkKKyNkZWZpbmUgU0lNX1NDR0M1X1ppZ0JlZSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9aaWdCZWVfU0hJRlQpKSAmIFNJTV9TQ0dDNV9aaWdCZWVfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X0FOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9BTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDMwVSkKKyNkZWZpbmUgU0lNX1NDR0M1X0FOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9BTlRfU0hJRlQpKSAmIFNJTV9TQ0dDNV9BTlRfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M1X0dFTl9GU0tfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNV9HRU5fRlNLX1NISUZUICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgU0lNX1NDR0M1X0dFTl9GU0soeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNV9HRU5fRlNLX1NISUZUKSkgJiBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLKQorCisvKiEgQG5hbWUgU0NHQzYgLSBTeXN0ZW0gQ2xvY2sgR2F0aW5nIENvbnRyb2wgUmVnaXN0ZXIgNiAqLworI2RlZmluZSBTSU1fU0NHQzZfRlRGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBTSU1fU0NHQzZfRlRGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X0ZURih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9GVEZfU0hJRlQpKSAmIFNJTV9TQ0dDNl9GVEZfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M2X0RNQU1VWF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgU0lNX1NDR0M2X0RNQU1VWF9TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFNJTV9TQ0dDNl9ETUFNVVgoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfRE1BTVVYX1NISUZUKSkgJiBTSU1fU0NHQzZfRE1BTVVYX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9UUk5HX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1RSTkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIFNJTV9TQ0dDNl9UUk5HKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfVFJOR19TSElGVCkpICYgU0lNX1NDR0M2X1RSTkdfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M2X1NQSTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1NQSTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBTSU1fU0NHQzZfU1BJMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X1NQSTBfU0hJRlQpKSAmIFNJTV9TQ0dDNl9TUEkwX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9TUEkxX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9TUEkxX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1NQSTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9TUEkxX1NISUZUKSkgJiBTSU1fU0NHQzZfU1BJMV9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfUElUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9QSVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDIzVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1BJVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9QSVRfU0hJRlQpKSAmIFNJTV9TQ0dDNl9QSVRfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M2X1RQTTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X1RQTTBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTSU1fU0NHQzZfVFBNMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X1RQTTBfU0hJRlQpKSAmIFNJTV9TQ0dDNl9UUE0wX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9UUE0xX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFNJTV9TQ0dDNl9UUE0xX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgU0lNX1NDR0M2X1RQTTEoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDNl9UUE0xX1NISUZUKSkgJiBTSU1fU0NHQzZfVFBNMV9NQVNLKQorI2RlZmluZSBTSU1fU0NHQzZfVFBNMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzZfVFBNMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIFNJTV9TQ0dDNl9UUE0yKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfVFBNMl9TSElGVCkpICYgU0lNX1NDR0M2X1RQTTJfTUFTSykKKyNkZWZpbmUgU0lNX1NDR0M2X0FEQzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgU0lNX1NDR0M2X0FEQzBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTSU1fU0NHQzZfQURDMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NDR0M2X0FEQzBfU0hJRlQpKSAmIFNJTV9TQ0dDNl9BREMwX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9SVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzZfUlRDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyOVUpCisjZGVmaW5lIFNJTV9TQ0dDNl9SVEMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfUlRDX1NISUZUKSkgJiBTSU1fU0NHQzZfUlRDX01BU0spCisjZGVmaW5lIFNJTV9TQ0dDNl9EQUMwX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTSU1fU0NHQzZfREFDMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNJTV9TQ0dDNl9EQUMwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fU0NHQzZfREFDMF9TSElGVCkpICYgU0lNX1NDR0M2X0RBQzBfTUFTSykKKworLyohIEBuYW1lIFNDR0M3IC0gU3lzdGVtIENsb2NrIEdhdGluZyBDb250cm9sIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUgU0lNX1NDR0M3X0RNQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBTSU1fU0NHQzdfRE1BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgU0lNX1NDR0M3X0RNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9TQ0dDN19ETUFfU0hJRlQpKSAmIFNJTV9TQ0dDN19ETUFfTUFTSykKKworLyohIEBuYW1lIENMS0RJVjEgLSBTeXN0ZW0gQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAxICovCisjZGVmaW5lIFNJTV9DTEtESVYxX09VVERJVjRfTUFTSyAgICAgICAgICAgICAgICAgKDB4NzAwMDBVKQorI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVY0X1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNJTV9DTEtESVYxX09VVERJVjQoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fQ0xLRElWMV9PVVRESVY0X1NISUZUKSkgJiBTSU1fQ0xLRElWMV9PVVRESVY0X01BU0spCisjZGVmaW5lIFNJTV9DTEtESVYxX09VVERJVjFfTUFTSyAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBTSU1fQ0xLRElWMV9PVVRESVYxX1NISUZUICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIFNJTV9DTEtESVYxX09VVERJVjEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fQ0xLRElWMV9PVVRESVYxX1NISUZUKSkgJiBTSU1fQ0xLRElWMV9PVVRESVYxX01BU0spCisKKy8qISBAbmFtZSBGQ0ZHMSAtIEZsYXNoIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTSU1fRkNGRzFfRkxBU0hESVNfTUFTSyAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBTSU1fRkNGRzFfRkxBU0hESVNfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX0ZDRkcxX0ZMQVNIRElTKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9GQ0ZHMV9GTEFTSERJU19TSElGVCkpICYgU0lNX0ZDRkcxX0ZMQVNIRElTX01BU0spCisjZGVmaW5lIFNJTV9GQ0ZHMV9GTEFTSERPWkVfTUFTSyAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFNJTV9GQ0ZHMV9GTEFTSERPWkVfU0hJRlQgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBTSU1fRkNGRzFfRkxBU0hET1pFKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0ZDRkcxX0ZMQVNIRE9aRV9TSElGVCkpICYgU0lNX0ZDRkcxX0ZMQVNIRE9aRV9NQVNLKQorI2RlZmluZSBTSU1fRkNGRzFfUEZTSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICgweEYwMDAwMDBVKQorI2RlZmluZSBTSU1fRkNGRzFfUEZTSVpFX1NISUZUICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNJTV9GQ0ZHMV9QRlNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fRkNGRzFfUEZTSVpFX1NISUZUKSkgJiBTSU1fRkNGRzFfUEZTSVpFX01BU0spCisKKy8qISBAbmFtZSBGQ0ZHMiAtIEZsYXNoIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTSU1fRkNGRzJfTUFYQUREUjFfTUFTSyAgICAgICAgICAgICAgICAgICgweDdGMDAwMFUpCisjZGVmaW5lIFNJTV9GQ0ZHMl9NQVhBRERSMV9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU0lNX0ZDRkcyX01BWEFERFIxKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9GQ0ZHMl9NQVhBRERSMV9TSElGVCkpICYgU0lNX0ZDRkcyX01BWEFERFIxX01BU0spCisjZGVmaW5lIFNJTV9GQ0ZHMl9NQVhBRERSMF9NQVNLICAgICAgICAgICAgICAgICAgKDB4N0YwMDAwMDBVKQorI2RlZmluZSBTSU1fRkNGRzJfTUFYQUREUjBfU0hJRlQgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNJTV9GQ0ZHMl9NQVhBRERSMCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fRkNGRzJfTUFYQUREUjBfU0hJRlQpKSAmIFNJTV9GQ0ZHMl9NQVhBRERSMF9NQVNLKQorCisvKiEgQG5hbWUgVUlETUggLSBVbmlxdWUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgTWlkLUhpZ2ggKi8KKyNkZWZpbmUgU0lNX1VJRE1IX1VJRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgU0lNX1VJRE1IX1VJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9VSURNSF9VSUQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fVUlETUhfVUlEX1NISUZUKSkgJiBTSU1fVUlETUhfVUlEX01BU0spCisKKy8qISBAbmFtZSBVSURNTCAtIFVuaXF1ZSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciBNaWQgTG93ICovCisjZGVmaW5lIFNJTV9VSURNTF9VSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBTSU1fVUlETUxfVUlEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1VJRE1MX1VJRCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9VSURNTF9VSURfU0hJRlQpKSAmIFNJTV9VSURNTF9VSURfTUFTSykKKworLyohIEBuYW1lIFVJREwgLSBVbmlxdWUgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgTG93ICovCisjZGVmaW5lIFNJTV9VSURMX1VJRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBTSU1fVUlETF9VSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU0lNX1VJRExfVUlEKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9VSURMX1VJRF9TSElGVCkpICYgU0lNX1VJRExfVUlEX01BU0spCisKKy8qISBAbmFtZSBDT1BDIC0gQ09QIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0lNX0NPUENfQ09QV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QV19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUFcoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fQ09QQ19DT1BXX1NISUZUKSkgJiBTSU1fQ09QQ19DT1BXX01BU0spCisjZGVmaW5lIFNJTV9DT1BDX0NPUENMS1NfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUENMS1NfU0hJRlQgICAgICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BDTEtTKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0NPUENfQ09QQ0xLU19TSElGVCkpICYgU0lNX0NPUENfQ09QQ0xLU19NQVNLKQorI2RlZmluZSBTSU1fQ09QQ19DT1BUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweENVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9DT1BDX0NPUFRfU0hJRlQpKSAmIFNJTV9DT1BDX0NPUFRfTUFTSykKKyNkZWZpbmUgU0lNX0NPUENfQ09QU1RQRU5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUFNUUEVOX1NISUZUICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BTVFBFTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX0NPUENfQ09QU1RQRU5fU0hJRlQpKSAmIFNJTV9DT1BDX0NPUFNUUEVOX01BU0spCisjZGVmaW5lIFNJTV9DT1BDX0NPUERCR0VOX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBTSU1fQ09QQ19DT1BEQkdFTl9TSElGVCAgICAgICAgICAgICAgICAgICg1VSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QREJHRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNJTV9DT1BDX0NPUERCR0VOX1NISUZUKSkgJiBTSU1fQ09QQ19DT1BEQkdFTl9NQVNLKQorI2RlZmluZSBTSU1fQ09QQ19DT1BDTEtTRUxfTUFTSyAgICAgICAgICAgICAgICAgICgweEMwVSkKKyNkZWZpbmUgU0lNX0NPUENfQ09QQ0xLU0VMX1NISUZUICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFNJTV9DT1BDX0NPUENMS1NFTCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTSU1fQ09QQ19DT1BDTEtTRUxfU0hJRlQpKSAmIFNJTV9DT1BDX0NPUENMS1NFTF9NQVNLKQorCisvKiEgQG5hbWUgU1JWQ09QIC0gU2VydmljZSBDT1AgKi8KKyNkZWZpbmUgU0lNX1NSVkNPUF9TUlZDT1BfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFNJTV9TUlZDT1BfU1JWQ09QX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTSU1fU1JWQ09QX1NSVkNPUCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU0lNX1NSVkNPUF9TUlZDT1BfU0hJRlQpKSAmIFNJTV9TUlZDT1BfU1JWQ09QX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBTSU1fUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBTSU0gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBTSU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFNJTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNDcwMDB1KQorLyoqIFBlcmlwaGVyYWwgU0lNIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBTSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0lNX1R5cGUgKilTSU1fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBTSU0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTSU1fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgU0lNX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFNJTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgU0lNX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNJTSB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgU0lNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU01DIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgU01DX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFNNQyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogU01DIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IFBNUFJPVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG93ZXIgTW9kZSBQcm90ZWN0aW9uIHJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgUE1DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb3dlciBNb2RlIENvbnRyb2wgcmVnaXN0ZXIsIG9mZnNldDogMHgxICovCisgIF9fSU8gdWludDhfdCBTVE9QQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0b3AgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDIgKi8KKyAgX19JICB1aW50OF90IFBNU1RBVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG93ZXIgTW9kZSBTdGF0dXMgcmVnaXN0ZXIsIG9mZnNldDogMHgzICovCit9IFNNQ19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTTUMgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBTTUNfUmVnaXN0ZXJfTWFza3MgU01DIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBQTVBST1QgLSBQb3dlciBNb2RlIFByb3RlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU01DX1BNUFJPVF9BVkxMU19NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgU01DX1BNUFJPVF9BVkxMU19TSElGVCAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFNNQ19QTVBST1RfQVZMTFMoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1BNUFJPVF9BVkxMU19TSElGVCkpICYgU01DX1BNUFJPVF9BVkxMU19NQVNLKQorI2RlZmluZSBTTUNfUE1QUk9UX0FMTFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBTTUNfUE1QUk9UX0FMTFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgU01DX1BNUFJPVF9BTExTKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfUE1QUk9UX0FMTFNfU0hJRlQpKSAmIFNNQ19QTVBST1RfQUxMU19NQVNLKQorI2RlZmluZSBTTUNfUE1QUk9UX0FWTFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgU01DX1BNUFJPVF9BVkxQX1NISUZUICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFNNQ19QTVBST1RfQVZMUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1BNUFJPVF9BVkxQX1NISUZUKSkgJiBTTUNfUE1QUk9UX0FWTFBfTUFTSykKKworLyohIEBuYW1lIFBNQ1RSTCAtIFBvd2VyIE1vZGUgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTTUNfUE1DVFJMX1NUT1BNX01BU0sgICAgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBTTUNfUE1DVFJMX1NUT1BNX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU01DX1BNQ1RSTF9TVE9QTSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfUE1DVFJMX1NUT1BNX1NISUZUKSkgJiBTTUNfUE1DVFJMX1NUT1BNX01BU0spCisjZGVmaW5lIFNNQ19QTUNUUkxfU1RPUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFNNQ19QTUNUUkxfU1RPUEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBTTUNfUE1DVFJMX1NUT1BBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19QTUNUUkxfU1RPUEFfU0hJRlQpKSAmIFNNQ19QTUNUUkxfU1RPUEFfTUFTSykKKyNkZWZpbmUgU01DX1BNQ1RSTF9SVU5NX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg2MFUpCisjZGVmaW5lIFNNQ19QTUNUUkxfUlVOTV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBTTUNfUE1DVFJMX1JVTk0oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19QTUNUUkxfUlVOTV9TSElGVCkpICYgU01DX1BNQ1RSTF9SVU5NX01BU0spCisKKy8qISBAbmFtZSBTVE9QQ1RSTCAtIFN0b3AgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTTUNfU1RPUENUUkxfTExTTV9NQVNLICAgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBTTUNfU1RPUENUUkxfTExTTV9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU01DX1NUT1BDVFJMX0xMU00oeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfU1RPUENUUkxfTExTTV9TSElGVCkpICYgU01DX1NUT1BDVFJMX0xMU01fTUFTSykKKyNkZWZpbmUgU01DX1NUT1BDVFJMX1JBTTJQT19NQVNLICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9SQU0yUE9fU0hJRlQgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBTTUNfU1RPUENUUkxfUkFNMlBPKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19TVE9QQ1RSTF9SQU0yUE9fU0hJRlQpKSAmIFNNQ19TVE9QQ1RSTF9SQU0yUE9fTUFTSykKKyNkZWZpbmUgU01DX1NUT1BDVFJMX1BPUlBPX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9QT1JQT19TSElGVCAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBTTUNfU1RPUENUUkxfUE9SUE8oeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFNNQ19TVE9QQ1RSTF9QT1JQT19TSElGVCkpICYgU01DX1NUT1BDVFJMX1BPUlBPX01BU0spCisjZGVmaW5lIFNNQ19TVE9QQ1RSTF9QU1RPUE9fTUFTSyAgICAgICAgICAgICAgICAgKDB4QzBVKQorI2RlZmluZSBTTUNfU1RPUENUUkxfUFNUT1BPX1NISUZUICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgU01DX1NUT1BDVFJMX1BTVE9QTyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50OF90KSgoKHVpbnQ4X3QpKHgpKSA8PCBTTUNfU1RPUENUUkxfUFNUT1BPX1NISUZUKSkgJiBTTUNfU1RPUENUUkxfUFNUT1BPX01BU0spCisKKy8qISBAbmFtZSBQTVNUQVQgLSBQb3dlciBNb2RlIFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBTTUNfUE1TVEFUX1BNU1RBVF9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgU01DX1BNU1RBVF9QTVNUQVRfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNNQ19QTVNUQVRfUE1TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgU01DX1BNU1RBVF9QTVNUQVRfU0hJRlQpKSAmIFNNQ19QTVNUQVRfUE1TVEFUX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBTTUNfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBTTUMgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBTTUMgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFNNQ19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwN0UwMDB1KQorLyoqIFBlcmlwaGVyYWwgU01DIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBTTUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU01DX1R5cGUgKilTTUNfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTTUNfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgU01DX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFNNQyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgU01DX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNNQyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgU01DX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU1BJIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgU1BJX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFNQSSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogU1BJIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBNQ1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTW9kdWxlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzRdOworICBfX0lPIHVpbnQzMl90IFRDUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUcmFuc2ZlciBDb3VudCBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHhDICovCisgICAgX19JTyB1aW50MzJfdCBDVEFSWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2xvY2sgYW5kIFRyYW5zZmVyIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKEluIE1hc3RlciBNb2RlKSwgYXJyYXkgb2Zmc2V0OiAweEMsIGFycmF5IHN0ZXA6IDB4NCAqLworICAgIF9fSU8gdWludDMyX3QgQ1RBUl9TTEFWRVsxXTsgICAgICAgICAgICAgICAgICAgICAvKio8IENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIFJlZ2lzdGVyIChJbiBTbGF2ZSBNb2RlKSwgYXJyYXkgb2Zmc2V0OiAweEMsIGFycmF5IHN0ZXA6IDB4NCAqLworICB9OworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVsyNF07CisgIF9fSU8gdWludDMyX3QgU1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXR1cyBSZWdpc3Rlciwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgUlNFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERNQS9JbnRlcnJ1cHQgUmVxdWVzdCBTZWxlY3QgYW5kIEVuYWJsZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDMwICovCisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MzQgKi8KKyAgICBfX0lPIHVpbnQzMl90IFBVU0hSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQVVNIIFRYIEZJRk8gUmVnaXN0ZXIgSW4gTWFzdGVyIE1vZGUsIG9mZnNldDogMHgzNCAqLworICAgIF9fSU8gdWludDMyX3QgUFVTSFJfU0xBVkU7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBVU0ggVFggRklGTyBSZWdpc3RlciBJbiBTbGF2ZSBNb2RlLCBvZmZzZXQ6IDB4MzQgKi8KKyAgfTsKKyAgX19JICB1aW50MzJfdCBQT1BSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUE9QIFJYIEZJRk8gUmVnaXN0ZXIsIG9mZnNldDogMHgzOCAqLworICBfX0kgIHVpbnQzMl90IFRYRlIwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUcmFuc21pdCBGSUZPIFJlZ2lzdGVycywgb2Zmc2V0OiAweDNDICovCisgIF9fSSAgdWludDMyX3QgVFhGUjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRyYW5zbWl0IEZJRk8gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4NDAgKi8KKyAgX19JICB1aW50MzJfdCBUWEZSMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVHJhbnNtaXQgRklGTyBSZWdpc3RlcnMsIG9mZnNldDogMHg0NCAqLworICBfX0kgIHVpbnQzMl90IFRYRlIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUcmFuc21pdCBGSUZPIFJlZ2lzdGVycywgb2Zmc2V0OiAweDQ4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzQ4XTsKKyAgX19JICB1aW50MzJfdCBSWEZSMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBGSUZPIFJlZ2lzdGVycywgb2Zmc2V0OiAweDdDICovCisgIF9fSSAgdWludDMyX3QgUlhGUjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgRklGTyBSZWdpc3RlcnMsIG9mZnNldDogMHg4MCAqLworICBfX0kgIHVpbnQzMl90IFJYRlIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIEZJRk8gUmVnaXN0ZXJzLCBvZmZzZXQ6IDB4ODQgKi8KKyAgX19JICB1aW50MzJfdCBSWEZSMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBGSUZPIFJlZ2lzdGVycywgb2Zmc2V0OiAweDg4ICovCit9IFNQSV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTUEkgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBTUElfUmVnaXN0ZXJfTWFza3MgU1BJIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBNQ1IgLSBNb2R1bGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTUElfTUNSX0hBTFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBTUElfTUNSX0hBTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX01DUl9IQUxUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfSEFMVF9TSElGVCkpICYgU1BJX01DUl9IQUxUX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfU01QTF9QVF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MzAwVSkKKyNkZWZpbmUgU1BJX01DUl9TTVBMX1BUX1NISUZUICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFNQSV9NQ1JfU01QTF9QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX1NNUExfUFRfU0hJRlQpKSAmIFNQSV9NQ1JfU01QTF9QVF9NQVNLKQorI2RlZmluZSBTUElfTUNSX0NMUl9SWEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwMFUpCisjZGVmaW5lIFNQSV9NQ1JfQ0xSX1JYRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDEwVSkKKyNkZWZpbmUgU1BJX01DUl9DTFJfUlhGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfQ0xSX1JYRl9TSElGVCkpICYgU1BJX01DUl9DTFJfUlhGX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfQ0xSX1RYRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODAwVSkKKyNkZWZpbmUgU1BJX01DUl9DTFJfVFhGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTFVKQorI2RlZmluZSBTUElfTUNSX0NMUl9UWEYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9DTFJfVFhGX1NISUZUKSkgJiBTUElfTUNSX0NMUl9UWEZfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9ESVNfUlhGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9ESVNfUlhGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBTUElfTUNSX0RJU19SWEYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9ESVNfUlhGX1NISUZUKSkgJiBTUElfTUNSX0RJU19SWEZfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9ESVNfVFhGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9ESVNfVFhGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBTUElfTUNSX0RJU19UWEYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9ESVNfVFhGX1NISUZUKSkgJiBTUElfTUNSX0RJU19UWEZfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9NRElTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgU1BJX01DUl9NRElTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMTRVKQorI2RlZmluZSBTUElfTUNSX01ESVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9NRElTX1NISUZUKSkgJiBTUElfTUNSX01ESVNfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9ET1pFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgU1BJX01DUl9ET1pFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBTUElfTUNSX0RPWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9ET1pFX1NISUZUKSkgJiBTUElfTUNSX0RPWkVfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9QQ1NJU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfUENTSVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU1BJX01DUl9QQ1NJUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfUENTSVNfU0hJRlQpKSAmIFNQSV9NQ1JfUENTSVNfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9ST09FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9ST09FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBTUElfTUNSX1JPT0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9ST09FX1NISUZUKSkgJiBTUElfTUNSX1JPT0VfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9NVEZFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9NVEZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMjZVKQorI2RlZmluZSBTUElfTUNSX01URkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9NVEZFX1NISUZUKSkgJiBTUElfTUNSX01URkVfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9GUlpfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgU1BJX01DUl9GUlpfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTUElfTUNSX0ZSWih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX01DUl9GUlpfU0hJRlQpKSAmIFNQSV9NQ1JfRlJaX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfRENPTkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MzAwMDAwMDBVKQorI2RlZmluZSBTUElfTUNSX0RDT05GX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIFNQSV9NQ1JfRENPTkYoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX0RDT05GX1NISUZUKSkgJiBTUElfTUNSX0RDT05GX01BU0spCisjZGVmaW5lIFNQSV9NQ1JfQ09OVF9TQ0tFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBTUElfTUNSX0NPTlRfU0NLRV9TSElGVCAgICAgICAgICAgICAgICAgICgzMFUpCisjZGVmaW5lIFNQSV9NQ1JfQ09OVF9TQ0tFKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfTUNSX0NPTlRfU0NLRV9TSElGVCkpICYgU1BJX01DUl9DT05UX1NDS0VfTUFTSykKKyNkZWZpbmUgU1BJX01DUl9NU1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFNQSV9NQ1JfTVNUUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgU1BJX01DUl9NU1RSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9NQ1JfTVNUUl9TSElGVCkpICYgU1BJX01DUl9NU1RSX01BU0spCisKKy8qISBAbmFtZSBUQ1IgLSBUcmFuc2ZlciBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBTUElfVENSX1NQSV9UQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgU1BJX1RDUl9TUElfVENOVF9TSElGVCAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTUElfVENSX1NQSV9UQ05UKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RDUl9TUElfVENOVF9TSElGVCkpICYgU1BJX1RDUl9TUElfVENOVF9NQVNLKQorCisvKiEgQG5hbWUgQ1RBUiAtIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIFJlZ2lzdGVyIChJbiBNYXN0ZXIgTW9kZSkgKi8KKyNkZWZpbmUgU1BJX0NUQVJfQlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgU1BJX0NUQVJfQlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9DVEFSX0JSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9CUl9TSElGVCkpICYgU1BJX0NUQVJfQlJfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfRFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMFUpCisjZGVmaW5lIFNQSV9DVEFSX0RUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBTUElfQ1RBUl9EVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfRFRfU0hJRlQpKSAmIFNQSV9DVEFSX0RUX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX0FTQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfQVNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFNQSV9DVEFSX0FTQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9BU0NfU0hJRlQpKSAmIFNQSV9DVEFSX0FTQ19NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9DU1NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweEYwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9DU1NDS19TSElGVCAgICAgICAgICAgICAgICAgICAgICgxMlUpCisjZGVmaW5lIFNQSV9DVEFSX0NTU0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9DU1NDS19TSElGVCkpICYgU1BJX0NUQVJfQ1NTQ0tfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfUEJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgzMDAwMFUpCisjZGVmaW5lIFNQSV9DVEFSX1BCUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU1BJX0NUQVJfUEJSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX1BCUl9TSElGVCkpICYgU1BJX0NUQVJfUEJSX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX1BEVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4QzAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9QRFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIFNQSV9DVEFSX1BEVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9QRFRfU0hJRlQpKSAmIFNQSV9DVEFSX1BEVF9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9QQVNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDMwMDAwMFUpCisjZGVmaW5lIFNQSV9DVEFSX1BBU0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDIwVSkKKyNkZWZpbmUgU1BJX0NUQVJfUEFTQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX1BBU0NfU0hJRlQpKSAmIFNQSV9DVEFSX1BBU0NfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfUENTU0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhDMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9QQ1NTQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyMlUpCisjZGVmaW5lIFNQSV9DVEFSX1BDU1NDSyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9QQ1NTQ0tfU0hJRlQpKSAmIFNQSV9DVEFSX1BDU1NDS19NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9MU0JGRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9MU0JGRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNQSV9DVEFSX0xTQkZFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9MU0JGRV9TSElGVCkpICYgU1BJX0NUQVJfTFNCRkVfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfQ1BIQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfQ1BIQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBTUElfQ1RBUl9DUEhBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfQ1BIQV9TSElGVCkpICYgU1BJX0NUQVJfQ1BIQV9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9DUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9DUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyNlUpCisjZGVmaW5lIFNQSV9DVEFSX0NQT0woeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9DUE9MX1NISUZUKSkgJiBTUElfQ1RBUl9DUE9MX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX0ZNU1pfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NzgwMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9GTVNaX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgyN1UpCisjZGVmaW5lIFNQSV9DVEFSX0ZNU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9GTVNaX1NISUZUKSkgJiBTUElfQ1RBUl9GTVNaX01BU0spCisjZGVmaW5lIFNQSV9DVEFSX0RCUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTUElfQ1RBUl9EQlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNQSV9DVEFSX0RCUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfQ1RBUl9EQlJfU0hJRlQpKSAmIFNQSV9DVEFSX0RCUl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgU1BJX0NUQVIgKi8KKyNkZWZpbmUgU1BJX0NUQVJfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMlUpCisKKy8qISBAbmFtZSBDVEFSX1NMQVZFIC0gQ2xvY2sgYW5kIFRyYW5zZmVyIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKEluIFNsYXZlIE1vZGUpICovCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0NQSEFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFNQSV9DVEFSX1NMQVZFX0NQSEFfU0hJRlQgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfQ1BIQSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9DVEFSX1NMQVZFX0NQSEFfU0hJRlQpKSAmIFNQSV9DVEFSX1NMQVZFX0NQSEFfTUFTSykKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfQ1BPTF9NQVNLICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfQ1BPTF9TSElGVCAgICAgICAgICAgICAgICAoMjZVKQorI2RlZmluZSBTUElfQ1RBUl9TTEFWRV9DUE9MKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfU0xBVkVfQ1BPTF9TSElGVCkpICYgU1BJX0NUQVJfU0xBVkVfQ1BPTF9NQVNLKQorI2RlZmluZSBTUElfQ1RBUl9TTEFWRV9GTVNaX01BU0sgICAgICAgICAgICAgICAgICgweDc4MDAwMDAwVSkKKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfRk1TWl9TSElGVCAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTUElfQ1RBUl9TTEFWRV9GTVNaKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX0NUQVJfU0xBVkVfRk1TWl9TSElGVCkpICYgU1BJX0NUQVJfU0xBVkVfRk1TWl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgU1BJX0NUQVJfU0xBVkUgKi8KKyNkZWZpbmUgU1BJX0NUQVJfU0xBVkVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAoMVUpCisKKy8qISBAbmFtZSBTUiAtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUElfU1JfUE9QTlhUUFRSX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZVKQorI2RlZmluZSBTUElfU1JfUE9QTlhUUFRSX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1NSX1BPUE5YVFBUUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9QT1BOWFRQVFJfU0hJRlQpKSAmIFNQSV9TUl9QT1BOWFRQVFJfTUFTSykKKyNkZWZpbmUgU1BJX1NSX1JYQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGMFUpCisjZGVmaW5lIFNQSV9TUl9SWENUUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBTUElfU1JfUlhDVFIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1NSX1JYQ1RSX1NISUZUKSkgJiBTUElfU1JfUlhDVFJfTUFTSykKKyNkZWZpbmUgU1BJX1NSX1RYTlhUUFRSX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGMDBVKQorI2RlZmluZSBTUElfU1JfVFhOWFRQVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgU1BJX1NSX1RYTlhUUFRSKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9UWE5YVFBUUl9TSElGVCkpICYgU1BJX1NSX1RYTlhUUFRSX01BU0spCisjZGVmaW5lIFNQSV9TUl9UWENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMFUpCisjZGVmaW5lIFNQSV9TUl9UWENUUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgU1BJX1NSX1RYQ1RSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9UWENUUl9TSElGVCkpICYgU1BJX1NSX1RYQ1RSX01BU0spCisjZGVmaW5lIFNQSV9TUl9SRkRGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBTUElfU1JfUkZERl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgxN1UpCisjZGVmaW5lIFNQSV9TUl9SRkRGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfUkZERl9TSElGVCkpICYgU1BJX1NSX1JGREZfTUFTSykKKyNkZWZpbmUgU1BJX1NSX1JGT0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFNQSV9TUl9SRk9GX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDE5VSkKKyNkZWZpbmUgU1BJX1NSX1JGT0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9SRk9GX1NISUZUKSkgJiBTUElfU1JfUkZPRl9NQVNLKQorI2RlZmluZSBTUElfU1JfVEZGRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBTUElfU1JfVEZGRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIFNQSV9TUl9URkZGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfVEZGRl9TSElGVCkpICYgU1BJX1NSX1RGRkZfTUFTSykKKyNkZWZpbmUgU1BJX1NSX1RGVUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgU1BJX1NSX1RGVUZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTUElfU1JfVEZVRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1NSX1RGVUZfU0hJRlQpKSAmIFNQSV9TUl9URlVGX01BU0spCisjZGVmaW5lIFNQSV9TUl9FT1FGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBTUElfU1JfRU9RRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgyOFUpCisjZGVmaW5lIFNQSV9TUl9FT1FGKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfRU9RRl9TSElGVCkpICYgU1BJX1NSX0VPUUZfTUFTSykKKyNkZWZpbmUgU1BJX1NSX1RYUlhTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFNQSV9TUl9UWFJYU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDMwVSkKKyNkZWZpbmUgU1BJX1NSX1RYUlhTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9TUl9UWFJYU19TSElGVCkpICYgU1BJX1NSX1RYUlhTX01BU0spCisjZGVmaW5lIFNQSV9TUl9UQ0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTUElfU1JfVENGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNQSV9TUl9UQ0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfU1JfVENGX1NISUZUKSkgJiBTUElfU1JfVENGX01BU0spCisKKy8qISBAbmFtZSBSU0VSIC0gRE1BL0ludGVycnVwdCBSZXF1ZXN0IFNlbGVjdCBhbmQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQSV9SU0VSX1JGREZfRElSU19NQVNLICAgICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBTUElfUlNFUl9SRkRGX0RJUlNfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9SU0VSX1JGREZfRElSUyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlNFUl9SRkRGX0RJUlNfU0hJRlQpKSAmIFNQSV9SU0VSX1JGREZfRElSU19NQVNLKQorI2RlZmluZSBTUElfUlNFUl9SRkRGX1JFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgU1BJX1JTRVJfUkZERl9SRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBTUElfUlNFUl9SRkRGX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JTRVJfUkZERl9SRV9TSElGVCkpICYgU1BJX1JTRVJfUkZERl9SRV9NQVNLKQorI2RlZmluZSBTUElfUlNFUl9SRk9GX1JFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgU1BJX1JTRVJfUkZPRl9SRV9TSElGVCAgICAgICAgICAgICAgICAgICAoMTlVKQorI2RlZmluZSBTUElfUlNFUl9SRk9GX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JTRVJfUkZPRl9SRV9TSElGVCkpICYgU1BJX1JTRVJfUkZPRl9SRV9NQVNLKQorI2RlZmluZSBTUElfUlNFUl9URkZGX0RJUlNfTUFTSyAgICAgICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBTUElfUlNFUl9URkZGX0RJUlNfU0hJRlQgICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFNQSV9SU0VSX1RGRkZfRElSUyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlNFUl9URkZGX0RJUlNfU0hJRlQpKSAmIFNQSV9SU0VSX1RGRkZfRElSU19NQVNLKQorI2RlZmluZSBTUElfUlNFUl9URkZGX1JFX01BU0sgICAgICAgICAgICAgICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBTUElfUlNFUl9URkZGX1JFX1NISUZUICAgICAgICAgICAgICAgICAgICgyNVUpCisjZGVmaW5lIFNQSV9SU0VSX1RGRkZfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlNFUl9URkZGX1JFX1NISUZUKSkgJiBTUElfUlNFUl9URkZGX1JFX01BU0spCisjZGVmaW5lIFNQSV9SU0VSX1RGVUZfUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFNQSV9SU0VSX1RGVUZfUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI3VSkKKyNkZWZpbmUgU1BJX1JTRVJfVEZVRl9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SU0VSX1RGVUZfUkVfU0hJRlQpKSAmIFNQSV9SU0VSX1RGVUZfUkVfTUFTSykKKyNkZWZpbmUgU1BJX1JTRVJfRU9RRl9SRV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFNQSV9SU0VSX0VPUUZfUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgU1BJX1JTRVJfRU9RRl9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SU0VSX0VPUUZfUkVfU0hJRlQpKSAmIFNQSV9SU0VSX0VPUUZfUkVfTUFTSykKKyNkZWZpbmUgU1BJX1JTRVJfVENGX1JFX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFNQSV9SU0VSX1RDRl9SRV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDMxVSkKKyNkZWZpbmUgU1BJX1JTRVJfVENGX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SU0VSX1RDRl9SRV9TSElGVCkpICYgU1BJX1JTRVJfVENGX1JFX01BU0spCisKKy8qISBAbmFtZSBQVVNIUiAtIFBVU0ggVFggRklGTyBSZWdpc3RlciBJbiBNYXN0ZXIgTW9kZSAqLworI2RlZmluZSBTUElfUFVTSFJfVFhEQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBTUElfUFVTSFJfVFhEQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1BVU0hSX1RYREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9QVVNIUl9UWERBVEFfU0hJRlQpKSAmIFNQSV9QVVNIUl9UWERBVEFfTUFTSykKKyNkZWZpbmUgU1BJX1BVU0hSX1BDU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMFUpCisjZGVmaW5lIFNQSV9QVVNIUl9QQ1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU1BJX1BVU0hSX1BDUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9QVVNIUl9QQ1NfU0hJRlQpKSAmIFNQSV9QVVNIUl9QQ1NfTUFTSykKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQ05UX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjZVKQorI2RlZmluZSBTUElfUFVTSFJfQ1RDTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1BVU0hSX0NUQ05UX1NISUZUKSkgJiBTUElfUFVTSFJfQ1RDTlRfTUFTSykKKyNkZWZpbmUgU1BJX1BVU0hSX0VPUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgU1BJX1BVU0hSX0VPUV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjdVKQorI2RlZmluZSBTUElfUFVTSFJfRU9RKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1BVU0hSX0VPUV9TSElGVCkpICYgU1BJX1BVU0hSX0VPUV9NQVNLKQorI2RlZmluZSBTUElfUFVTSFJfQ1RBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDcwMDAwMDAwVSkKKyNkZWZpbmUgU1BJX1BVU0hSX0NUQVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBTUElfUFVTSFJfQ1RBUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1BVU0hSX0NUQVNfU0hJRlQpKSAmIFNQSV9QVVNIUl9DVEFTX01BU0spCisjZGVmaW5lIFNQSV9QVVNIUl9DT05UX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBTUElfUFVTSFJfQ09OVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFNQSV9QVVNIUl9DT05UKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUFVTSFJfQ09OVF9TSElGVCkpICYgU1BJX1BVU0hSX0NPTlRfTUFTSykKKworLyohIEBuYW1lIFBVU0hSX1NMQVZFIC0gUFVTSCBUWCBGSUZPIFJlZ2lzdGVyIEluIFNsYXZlIE1vZGUgKi8KKyNkZWZpbmUgU1BJX1BVU0hSX1NMQVZFX1RYREFUQV9NQVNLICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgU1BJX1BVU0hSX1NMQVZFX1RYREFUQV9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9QVVNIUl9TTEFWRV9UWERBVEEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUFVTSFJfU0xBVkVfVFhEQVRBX1NISUZUKSkgJiBTUElfUFVTSFJfU0xBVkVfVFhEQVRBX01BU0spCisKKy8qISBAbmFtZSBQT1BSIC0gUE9QIFJYIEZJRk8gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BJX1BPUFJfUlhEQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFNQSV9QT1BSX1JYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfUE9QUl9SWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1BPUFJfUlhEQVRBX1NISUZUKSkgJiBTUElfUE9QUl9SWERBVEFfTUFTSykKKworLyohIEBuYW1lIFRYRlIwIC0gVHJhbnNtaXQgRklGTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX1RYRlIwX1RYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgU1BJX1RYRlIwX1RYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9UWEZSMF9UWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfVFhGUjBfVFhEQVRBX1NISUZUKSkgJiBTUElfVFhGUjBfVFhEQVRBX01BU0spCisjZGVmaW5lIFNQSV9UWEZSMF9UWENNRF9UWERBVEFfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBTUElfVFhGUjBfVFhDTURfVFhEQVRBX1NISUZUICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9UWEZSMF9UWENNRF9UWERBVEEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfVFhGUjBfVFhDTURfVFhEQVRBX1NISUZUKSkgJiBTUElfVFhGUjBfVFhDTURfVFhEQVRBX01BU0spCisKKy8qISBAbmFtZSBUWEZSMSAtIFRyYW5zbWl0IEZJRk8gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSV9UWEZSMV9UWERBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFNQSV9UWEZSMV9UWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfVFhGUjFfVFhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RYRlIxX1RYREFUQV9TSElGVCkpICYgU1BJX1RYRlIxX1RYREFUQV9NQVNLKQorI2RlZmluZSBTUElfVFhGUjFfVFhDTURfVFhEQVRBX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgU1BJX1RYRlIxX1RYQ01EX1RYREFUQV9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBTUElfVFhGUjFfVFhDTURfVFhEQVRBKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1RYRlIxX1RYQ01EX1RYREFUQV9TSElGVCkpICYgU1BJX1RYRlIxX1RYQ01EX1RYREFUQV9NQVNLKQorCisvKiEgQG5hbWUgVFhGUjIgLSBUcmFuc21pdCBGSUZPIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUElfVFhGUjJfVFhEQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBTUElfVFhGUjJfVFhEQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1RYRlIyX1RYREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9UWEZSMl9UWERBVEFfU0hJRlQpKSAmIFNQSV9UWEZSMl9UWERBVEFfTUFTSykKKyNkZWZpbmUgU1BJX1RYRlIyX1RYQ01EX1RYREFUQV9NQVNLICAgICAgICAgICAgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFNQSV9UWEZSMl9UWENNRF9UWERBVEFfU0hJRlQgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgU1BJX1RYRlIyX1RYQ01EX1RYREFUQSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9UWEZSMl9UWENNRF9UWERBVEFfU0hJRlQpKSAmIFNQSV9UWEZSMl9UWENNRF9UWERBVEFfTUFTSykKKworLyohIEBuYW1lIFRYRlIzIC0gVHJhbnNtaXQgRklGTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX1RYRlIzX1RYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgU1BJX1RYRlIzX1RYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9UWEZSM19UWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfVFhGUjNfVFhEQVRBX1NISUZUKSkgJiBTUElfVFhGUjNfVFhEQVRBX01BU0spCisjZGVmaW5lIFNQSV9UWEZSM19UWENNRF9UWERBVEFfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBTUElfVFhGUjNfVFhDTURfVFhEQVRBX1NISUZUICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFNQSV9UWEZSM19UWENNRF9UWERBVEEoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfVFhGUjNfVFhDTURfVFhEQVRBX1NISUZUKSkgJiBTUElfVFhGUjNfVFhDTURfVFhEQVRBX01BU0spCisKKy8qISBAbmFtZSBSWEZSMCAtIFJlY2VpdmUgRklGTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX1JYRlIwX1JYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFNQSV9SWEZSMF9SWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfUlhGUjBfUlhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JYRlIwX1JYREFUQV9TSElGVCkpICYgU1BJX1JYRlIwX1JYREFUQV9NQVNLKQorCisvKiEgQG5hbWUgUlhGUjEgLSBSZWNlaXZlIEZJRk8gUmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSV9SWEZSMV9SWERBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBTUElfUlhGUjFfUlhEQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgU1BJX1JYRlIxX1JYREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFNQSV9SWEZSMV9SWERBVEFfU0hJRlQpKSAmIFNQSV9SWEZSMV9SWERBVEFfTUFTSykKKworLyohIEBuYW1lIFJYRlIyIC0gUmVjZWl2ZSBGSUZPIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUElfUlhGUjJfUlhEQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgU1BJX1JYRlIyX1JYREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFNQSV9SWEZSMl9SWERBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBTUElfUlhGUjJfUlhEQVRBX1NISUZUKSkgJiBTUElfUlhGUjJfUlhEQVRBX01BU0spCisKKy8qISBAbmFtZSBSWEZSMyAtIFJlY2VpdmUgRklGTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX1JYRlIzX1JYREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFNQSV9SWEZSM19SWERBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBTUElfUlhGUjNfUlhEQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgU1BJX1JYRlIzX1JYREFUQV9TSElGVCkpICYgU1BJX1JYRlIzX1JYREFUQV9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgU1BJX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogU1BJIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgU1BJMCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1BJMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAyQzAwMHUpCisvKiogUGVyaXBoZXJhbCBTUEkwIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBTUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1BJX1R5cGUgKilTUEkwX0JBU0UpCisvKiogUGVyaXBoZXJhbCBTUEkxIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBTUEkxX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDJEMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFNQSTEgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFNQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTUElfVHlwZSAqKVNQSTFfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTUElfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgU1BJMF9CQVNFLCBTUEkxX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFNQSSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgU1BJX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFNQSTAsIFNQSTEgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgU1BJIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBTUElfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgU1BJMF9JUlFuLCBTUEkxX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFNQSV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFRQTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFRQTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBUUE0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFRQTSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXR1cyBhbmQgQ29udHJvbCwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBDTlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ291bnRlciwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBNT0Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTW9kdWxvLCBvZmZzZXQ6IDB4OCAqLworICBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweEMsIGFycmF5IHN0ZXA6IDB4OCAqLworICAgIF9fSU8gdWludDMyX3QgQ25TQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgKG4pIFN0YXR1cyBhbmQgQ29udHJvbCwgYXJyYXkgb2Zmc2V0OiAweEMsIGFycmF5IHN0ZXA6IDB4OCAqLworICAgIF9fSU8gdWludDMyX3QgQ25WOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENoYW5uZWwgKG4pIFZhbHVlLCBhcnJheSBvZmZzZXQ6IDB4MTAsIGFycmF5IHN0ZXA6IDB4OCAqLworICB9IENPTlRST0xTWzRdOworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMFszNl07CisgIF9fSU8gdWludDMyX3QgU1RBVFVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENhcHR1cmUgYW5kIENvbXBhcmUgU3RhdHVzLCBvZmZzZXQ6IDB4NTAgKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbMTZdOworICBfX0lPIHVpbnQzMl90IENPTUJJTkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDb21iaW5lIENoYW5uZWwgUmVnaXN0ZXIsIG9mZnNldDogMHg2NCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMls4XTsKKyAgX19JTyB1aW50MzJfdCBQT0w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ2hhbm5lbCBQb2xhcml0eSwgb2Zmc2V0OiAweDcwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8zWzRdOworICBfX0lPIHVpbnQzMl90IEZJTFRFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBGaWx0ZXIgQ29udHJvbCwgb2Zmc2V0OiAweDc4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF80WzRdOworICBfX0lPIHVpbnQzMl90IFFEQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBRdWFkcmF0dXJlIERlY29kZXIgQ29udHJvbCBhbmQgU3RhdHVzLCBvZmZzZXQ6IDB4ODAgKi8KKyAgX19JTyB1aW50MzJfdCBDT05GOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ29uZmlndXJhdGlvbiwgb2Zmc2V0OiAweDg0ICovCit9IFRQTV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBUUE0gUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBUUE1fUmVnaXN0ZXJfTWFza3MgVFBNIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBTQyAtIFN0YXR1cyBhbmQgQ29udHJvbCAqLworI2RlZmluZSBUUE1fU0NfUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdVKQorI2RlZmluZSBUUE1fU0NfUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX1NDX1BTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TQ19QU19TSElGVCkpICYgVFBNX1NDX1BTX01BU0spCisjZGVmaW5lIFRQTV9TQ19DTU9EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MThVKQorI2RlZmluZSBUUE1fU0NfQ01PRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgVFBNX1NDX0NNT0QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TQ19DTU9EX1NISUZUKSkgJiBUUE1fU0NfQ01PRF9NQVNLKQorI2RlZmluZSBUUE1fU0NfQ1BXTVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgVFBNX1NDX0NQV01TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFRQTV9TQ19DUFdNUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU0NfQ1BXTVNfU0hJRlQpKSAmIFRQTV9TQ19DUFdNU19NQVNLKQorI2RlZmluZSBUUE1fU0NfVE9JRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgVFBNX1NDX1RPSUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFRQTV9TQ19UT0lFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU0NfVE9JRV9TSElGVCkpICYgVFBNX1NDX1RPSUVfTUFTSykKKyNkZWZpbmUgVFBNX1NDX1RPRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFRQTV9TQ19UT0ZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBUUE1fU0NfVE9GKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NDX1RPRl9TSElGVCkpICYgVFBNX1NDX1RPRl9NQVNLKQorI2RlZmluZSBUUE1fU0NfRE1BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFRQTV9TQ19ETUFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUUE1fU0NfRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NDX0RNQV9TSElGVCkpICYgVFBNX1NDX0RNQV9NQVNLKQorCisvKiEgQG5hbWUgQ05UIC0gQ291bnRlciAqLworI2RlZmluZSBUUE1fQ05UX0NPVU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUE1fQ05UX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX0NOVF9DT1VOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DTlRfQ09VTlRfU0hJRlQpKSAmIFRQTV9DTlRfQ09VTlRfTUFTSykKKworLyohIEBuYW1lIE1PRCAtIE1vZHVsbyAqLworI2RlZmluZSBUUE1fTU9EX01PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUE1fTU9EX01PRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX01PRF9NT0QoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9NT0RfTU9EX1NISUZUKSkgJiBUUE1fTU9EX01PRF9NQVNLKQorCisvKiEgQG5hbWUgQ25TQyAtIENoYW5uZWwgKG4pIFN0YXR1cyBhbmQgQ29udHJvbCAqLworI2RlZmluZSBUUE1fQ25TQ19ETUFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBUUE1fQ25TQ19ETUFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX0NuU0NfRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblNDX0RNQV9TSElGVCkpICYgVFBNX0NuU0NfRE1BX01BU0spCisjZGVmaW5lIFRQTV9DblNDX0VMU0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRQTV9DblNDX0VMU0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBUUE1fQ25TQ19FTFNBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkpICYgVFBNX0NuU0NfRUxTQV9NQVNLKQorI2RlZmluZSBUUE1fQ25TQ19FTFNCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBUUE1fQ25TQ19FTFNCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgVFBNX0NuU0NfRUxTQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblNDX0VMU0JfU0hJRlQpKSAmIFRQTV9DblNDX0VMU0JfTUFTSykKKyNkZWZpbmUgVFBNX0NuU0NfTVNBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFRQTV9DblNDX01TQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBUUE1fQ25TQ19NU0EoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NuU0NfTVNBX1NISUZUKSkgJiBUUE1fQ25TQ19NU0FfTUFTSykKKyNkZWZpbmUgVFBNX0NuU0NfTVNCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFRQTV9DblNDX01TQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBUUE1fQ25TQ19NU0IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NuU0NfTVNCX1NISUZUKSkgJiBUUE1fQ25TQ19NU0JfTUFTSykKKyNkZWZpbmUgVFBNX0NuU0NfQ0hJRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFRQTV9DblNDX0NISUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBUUE1fQ25TQ19DSElFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NuU0NfQ0hJRV9TSElGVCkpICYgVFBNX0NuU0NfQ0hJRV9NQVNLKQorI2RlZmluZSBUUE1fQ25TQ19DSEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgVFBNX0NuU0NfQ0hGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoN1UpCisjZGVmaW5lIFRQTV9DblNDX0NIRih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ25TQ19DSEZfU0hJRlQpKSAmIFRQTV9DblNDX0NIRl9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgVFBNX0NuU0MgKi8KKyNkZWZpbmUgVFBNX0NuU0NfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoNFUpCisKKy8qISBAbmFtZSBDblYgLSBDaGFubmVsIChuKSBWYWx1ZSAqLworI2RlZmluZSBUUE1fQ25WX1ZBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUE1fQ25WX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX0NuVl9WQUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DblZfVkFMX1NISUZUKSkgJiBUUE1fQ25WX1ZBTF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgVFBNX0NuViAqLworI2RlZmluZSBUUE1fQ25WX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0VSkKKworLyohIEBuYW1lIFNUQVRVUyAtIENhcHR1cmUgYW5kIENvbXBhcmUgU3RhdHVzICovCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gwRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gwRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIMEYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NUQVRVU19DSDBGX1NISUZUKSkgJiBUUE1fU1RBVFVTX0NIMEZfTUFTSykKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDFGX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDFGX1NISUZUICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gxRih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fU1RBVFVTX0NIMUZfU0hJRlQpKSAmIFRQTV9TVEFUVVNfQ0gxRl9NQVNLKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIMkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIMkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFBNX1NUQVRVU19DSDJGKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TVEFUVVNfQ0gyRl9TSElGVCkpICYgVFBNX1NUQVRVU19DSDJGX01BU0spCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gzRl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFRQTV9TVEFUVVNfQ0gzRl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBUUE1fU1RBVFVTX0NIM0YoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1NUQVRVU19DSDNGX1NISUZUKSkgJiBUUE1fU1RBVFVTX0NIM0ZfTUFTSykKKyNkZWZpbmUgVFBNX1NUQVRVU19UT0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBUUE1fU1RBVFVTX1RPRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFBNX1NUQVRVU19UT0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9TVEFUVVNfVE9GX1NISUZUKSkgJiBUUE1fU1RBVFVTX1RPRl9NQVNLKQorCisvKiEgQG5hbWUgQ09NQklORSAtIENvbWJpbmUgQ2hhbm5lbCBSZWdpc3RlciAqLworI2RlZmluZSBUUE1fQ09NQklORV9DT01CSU5FMF9NQVNLICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01CSU5FMF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NQklORTAoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT01CSU5FX0NPTUJJTkUwX1NISUZUKSkgJiBUUE1fQ09NQklORV9DT01CSU5FMF9NQVNLKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01TV0FQMF9NQVNLICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01TV0FQMF9TSElGVCAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NU1dBUDAoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT01CSU5FX0NPTVNXQVAwX1NISUZUKSkgJiBUUE1fQ09NQklORV9DT01TV0FQMF9NQVNLKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01CSU5FMV9NQVNLICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFRQTV9DT01CSU5FX0NPTUJJTkUxX1NISUZUICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUUE1fQ09NQklORV9DT01CSU5FMSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTUJJTkVfQ09NQklORTFfU0hJRlQpKSAmIFRQTV9DT01CSU5FX0NPTUJJTkUxX01BU0spCisjZGVmaW5lIFRQTV9DT01CSU5FX0NPTVNXQVAxX01BU0sgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgVFBNX0NPTUJJTkVfQ09NU1dBUDFfU0hJRlQgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIFRQTV9DT01CSU5FX0NPTVNXQVAxKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09NQklORV9DT01TV0FQMV9TSElGVCkpICYgVFBNX0NPTUJJTkVfQ09NU1dBUDFfTUFTSykKKworLyohIEBuYW1lIFBPTCAtIENoYW5uZWwgUG9sYXJpdHkgKi8KKyNkZWZpbmUgVFBNX1BPTF9QT0wwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFBNX1BPTF9QT0wwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9QT0xfUE9MMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUE9MX1BPTDBfU0hJRlQpKSAmIFRQTV9QT0xfUE9MMF9NQVNLKQorI2RlZmluZSBUUE1fUE9MX1BPTDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBUUE1fUE9MX1BPTDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgVFBNX1BPTF9QT0wxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9QT0xfUE9MMV9TSElGVCkpICYgVFBNX1BPTF9QT0wxX01BU0spCisjZGVmaW5lIFRQTV9QT0xfUE9MMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRQTV9QT0xfUE9MMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBUUE1fUE9MX1BPTDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX1BPTF9QT0wyX1NISUZUKSkgJiBUUE1fUE9MX1BPTDJfTUFTSykKKyNkZWZpbmUgVFBNX1BPTF9QT0wzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgVFBNX1BPTF9QT0wzX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFRQTV9QT0xfUE9MMyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUE9MX1BPTDNfU0hJRlQpKSAmIFRQTV9QT0xfUE9MM19NQVNLKQorCisvKiEgQG5hbWUgRklMVEVSIC0gRmlsdGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDBGVkFMX01BU0sgICAgICAgICAgICAgICAgICAoMHhGVSkKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDBGVkFMX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gwRlZBTCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fRklMVEVSX0NIMEZWQUxfU0hJRlQpKSAmIFRQTV9GSUxURVJfQ0gwRlZBTF9NQVNLKQorI2RlZmluZSBUUE1fRklMVEVSX0NIMUZWQUxfTUFTSyAgICAgICAgICAgICAgICAgICgweEYwVSkKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDFGVkFMX1NISUZUICAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gxRlZBTCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fRklMVEVSX0NIMUZWQUxfU0hJRlQpKSAmIFRQTV9GSUxURVJfQ0gxRlZBTF9NQVNLKQorI2RlZmluZSBUUE1fRklMVEVSX0NIMkZWQUxfTUFTSyAgICAgICAgICAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFRQTV9GSUxURVJfQ0gyRlZBTF9TSElGVCAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUUE1fRklMVEVSX0NIMkZWQUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0ZJTFRFUl9DSDJGVkFMX1NISUZUKSkgJiBUUE1fRklMVEVSX0NIMkZWQUxfTUFTSykKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDNGVkFMX01BU0sgICAgICAgICAgICAgICAgICAoMHhGMDAwVSkKKyNkZWZpbmUgVFBNX0ZJTFRFUl9DSDNGVkFMX1NISUZUICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBUUE1fRklMVEVSX0NIM0ZWQUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0ZJTFRFUl9DSDNGVkFMX1NISUZUKSkgJiBUUE1fRklMVEVSX0NIM0ZWQUxfTUFTSykKKworLyohIEBuYW1lIFFEQ1RSTCAtIFF1YWRyYXR1cmUgRGVjb2RlciBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgVFBNX1FEQ1RSTF9RVUFERU5fTUFTSyAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFBNX1FEQ1RSTF9RVUFERU5fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBREVOKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUURDVFJMX1FVQURFTl9TSElGVCkpICYgVFBNX1FEQ1RSTF9RVUFERU5fTUFTSykKKyNkZWZpbmUgVFBNX1FEQ1RSTF9UT0ZESVJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFBNX1FEQ1RSTF9UT0ZESVJfU0hJRlQgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRQTV9RRENUUkxfVE9GRElSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUURDVFJMX1RPRkRJUl9TSElGVCkpICYgVFBNX1FEQ1RSTF9UT0ZESVJfTUFTSykKKyNkZWZpbmUgVFBNX1FEQ1RSTF9RVUFESVJfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgVFBNX1FEQ1RSTF9RVUFESVJfU0hJRlQgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBRElSKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUURDVFJMX1FVQURJUl9TSElGVCkpICYgVFBNX1FEQ1RSTF9RVUFESVJfTUFTSykKKyNkZWZpbmUgVFBNX1FEQ1RSTF9RVUFETU9ERV9NQVNLICAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgVFBNX1FEQ1RSTF9RVUFETU9ERV9TSElGVCAgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFRQTV9RRENUUkxfUVVBRE1PREUoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fUURDVFJMX1FVQURNT0RFX1NISUZUKSkgJiBUUE1fUURDVFJMX1FVQURNT0RFX01BU0spCisKKy8qISBAbmFtZSBDT05GIC0gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUUE1fQ09ORl9ET1pFRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgVFBNX0NPTkZfRE9aRUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFRQTV9DT05GX0RPWkVFTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09ORl9ET1pFRU5fU0hJRlQpKSAmIFRQTV9DT05GX0RPWkVFTl9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9EQkdNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICgweEMwVSkKKyNkZWZpbmUgVFBNX0NPTkZfREJHTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFRQTV9DT05GX0RCR01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09ORl9EQkdNT0RFX1NISUZUKSkgJiBUUE1fQ09ORl9EQkdNT0RFX01BU0spCisjZGVmaW5lIFRQTV9DT05GX0dUQlNZTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfR1RCU1lOQ19TSElGVCAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFRQTV9DT05GX0dUQlNZTkMoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09ORl9HVEJTWU5DX1NISUZUKSkgJiBUUE1fQ09ORl9HVEJTWU5DX01BU0spCisjZGVmaW5lIFRQTV9DT05GX0dUQkVFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfR1RCRUVOX1NISUZUICAgICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIFRQTV9DT05GX0dUQkVFTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUE1fQ09ORl9HVEJFRU5fU0hJRlQpKSAmIFRQTV9DT05GX0dUQkVFTl9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9DU09UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1NPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUE1fQ09ORl9DU09UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfQ1NPVF9TSElGVCkpICYgVFBNX0NPTkZfQ1NPVF9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9DU09PX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1NPT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTdVKQorI2RlZmluZSBUUE1fQ09ORl9DU09PKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfQ1NPT19TSElGVCkpICYgVFBNX0NPTkZfQ1NPT19NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9DUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1JPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBUUE1fQ09ORl9DUk9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfQ1JPVF9TSElGVCkpICYgVFBNX0NPTkZfQ1JPVF9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9DUE9UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfQ1BPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTlVKQorI2RlZmluZSBUUE1fQ09ORl9DUE9UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfQ1BPVF9TSElGVCkpICYgVFBNX0NPTkZfQ1BPVF9NQVNLKQorI2RlZmluZSBUUE1fQ09ORl9UUkdQT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIFRQTV9DT05GX1RSR1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDIyVSkKKyNkZWZpbmUgVFBNX0NPTkZfVFJHUE9MKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRQTV9DT05GX1RSR1BPTF9TSElGVCkpICYgVFBNX0NPTkZfVFJHUE9MX01BU0spCisjZGVmaW5lIFRQTV9DT05GX1RSR1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfVFJHU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBUUE1fQ09ORl9UUkdTUkMoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfVFJHU1JDX1NISUZUKSkgJiBUUE1fQ09ORl9UUkdTUkNfTUFTSykKKyNkZWZpbmUgVFBNX0NPTkZfVFJHU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgVFBNX0NPTkZfVFJHU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBUUE1fQ09ORl9UUkdTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFBNX0NPTkZfVFJHU0VMX1NISUZUKSkgJiBUUE1fQ09ORl9UUkdTRUxfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFRQTV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFRQTSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFRQTTAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRQTTBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwMzgwMDB1KQorLyoqIFBlcmlwaGVyYWwgVFBNMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgVFBNMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRQTV9UeXBlICopVFBNMF9CQVNFKQorLyoqIFBlcmlwaGVyYWwgVFBNMSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVFBNMV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAzOTAwMHUpCisvKiogUGVyaXBoZXJhbCBUUE0xIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBUUE0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFBNX1R5cGUgKilUUE0xX0JBU0UpCisvKiogUGVyaXBoZXJhbCBUUE0yIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBUUE0yX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDNBMDAwdSkKKy8qKiBQZXJpcGhlcmFsIFRQTTIgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFRQTTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUE1fVHlwZSAqKVRQTTJfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBUUE1fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFBNMF9CQVNFLCBUUE0xX0JBU0UsIFRQTTJfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgVFBNIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBUUE1fQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFBNMCwgVFBNMSwgVFBNMiB9CisvKiogSW50ZXJydXB0IHZlY3RvcnMgZm9yIHRoZSBUUE0gcGVyaXBoZXJhbCB0eXBlICovCisjZGVmaW5lIFRQTV9JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBUUE0wX0lSUW4sIFRQTTFfSVJRbiwgVFBNMl9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBUUE1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBUUk5HIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgVFJOR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBUUk5HIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBUUk5HIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBNQ1RMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IFNDTUlTQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFBLUlJORzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb2tlciBSYW5nZSBSZWdpc3Rlciwgb2Zmc2V0OiAweDggKi8KKyAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHhDICovCisgICAgX19JTyB1aW50MzJfdCBQS1JNQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUG9rZXIgTWF4aW11bSBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweEMgKi8KKyAgICBfX0kgIHVpbnQzMl90IFBLUlNROyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQb2tlciBTcXVhcmUgQ2FsY3VsYXRpb24gUmVzdWx0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QyAqLworICB9OworICBfX0lPIHVpbnQzMl90IFNEQ1RMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTZWVkIENvbnRyb2wgUmVnaXN0ZXIsIG9mZnNldDogMHgxMCAqLworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDE0ICovCisgICAgX19JTyB1aW50MzJfdCBTQkxJTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3BhcnNlIEJpdCBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDE0ICovCisgICAgX19JICB1aW50MzJfdCBUT1RTQU07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVG90YWwgU2FtcGxlcyBSZWdpc3Rlciwgb2Zmc2V0OiAweDE0ICovCisgIH07CisgIF9fSU8gdWludDMyX3QgRlJRTUlOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZyZXF1ZW5jeSBDb3VudCBNaW5pbXVtIExpbWl0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MTggKi8KKyAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldDogMHgxQyAqLworICAgIF9fSSAgdWludDMyX3QgRlJRQ05UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZyZXF1ZW5jeSBDb3VudCBSZWdpc3Rlciwgb2Zmc2V0OiAweDFDICovCisgICAgX19JTyB1aW50MzJfdCBGUlFNQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRnJlcXVlbmN5IENvdW50IE1heGltdW0gTGltaXQgUmVnaXN0ZXIsIG9mZnNldDogMHgxQyAqLworICB9OworICB1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0OiAweDIwICovCisgICAgX19JICB1aW50MzJfdCBTQ01DOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgTW9ub2JpdCBDb3VudCBSZWdpc3Rlciwgb2Zmc2V0OiAweDIwICovCisgICAgX19JTyB1aW50MzJfdCBTQ01MOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgTW9ub2JpdCBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDIwICovCisgIH07CisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MjQgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDUjFDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDEgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgyNCAqLworICAgIF9fSU8gdWludDMyX3QgU0NSMUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMSBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDI0ICovCisgIH07CisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MjggKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDUjJDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDIgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgyOCAqLworICAgIF9fSU8gdWludDMyX3QgU0NSMkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMiBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDI4ICovCisgIH07CisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MkMgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDUjNDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDMgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgyQyAqLworICAgIF9fSU8gdWludDMyX3QgU0NSM0w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMyBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDJDICovCisgIH07CisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MzAgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDUjRDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDQgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgzMCAqLworICAgIF9fSU8gdWludDMyX3QgU0NSNEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNCBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDMwICovCisgIH07CisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MzQgKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDUjVDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDUgQ291bnQgUmVnaXN0ZXIsIG9mZnNldDogMHgzNCAqLworICAgIF9fSU8gdWludDMyX3QgU0NSNUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNSBMaW1pdCBSZWdpc3Rlciwgb2Zmc2V0OiAweDM0ICovCisgIH07CisgIHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQ6IDB4MzggKi8KKyAgICBfX0kgIHVpbnQzMl90IFNDUjZQQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIENvdW50IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzggKi8KKyAgICBfX0lPIHVpbnQzMl90IFNDUjZQTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIExpbWl0IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MzggKi8KKyAgfTsKKyAgX19JICB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdHVzIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4M0MgKi8KKyAgX19JICB1aW50MzJfdCBFTlRbMTZdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW50cm9weSBSZWFkIFJlZ2lzdGVyLCBhcnJheSBvZmZzZXQ6IDB4NDAsIGFycmF5IHN0ZXA6IDB4NCAqLworICBfX0kgIHVpbnQzMl90IFBLUkNOVDEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCAxIGFuZCAwIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4ODAgKi8KKyAgX19JICB1aW50MzJfdCBQS1JDTlQzMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgMyBhbmQgMiBSZWdpc3Rlciwgb2Zmc2V0OiAweDg0ICovCisgIF9fSSAgdWludDMyX3QgUEtSQ05UNTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFBva2VyIENvdW50IDUgYW5kIDQgUmVnaXN0ZXIsIG9mZnNldDogMHg4OCAqLworICBfX0kgIHVpbnQzMl90IFBLUkNOVDc2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCA3IGFuZCA2IFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OEMgKi8KKyAgX19JICB1aW50MzJfdCBQS1JDTlQ5ODsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgOSBhbmQgOCBSZWdpc3Rlciwgb2Zmc2V0OiAweDkwICovCisgIF9fSSAgdWludDMyX3QgUEtSQ05UQkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRpc3RpY2FsIENoZWNrIFBva2VyIENvdW50IEIgYW5kIEEgUmVnaXN0ZXIsIG9mZnNldDogMHg5NCAqLworICBfX0kgIHVpbnQzMl90IFBLUkNOVERDOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCBEIGFuZCBDIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OTggKi8KKyAgX19JICB1aW50MzJfdCBQS1JDTlRGRTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGlzdGljYWwgQ2hlY2sgUG9rZXIgQ291bnQgRiBhbmQgRSBSZWdpc3Rlciwgb2Zmc2V0OiAweDlDICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzE2XTsKKyAgX19JTyB1aW50MzJfdCBTRUNfQ0ZHOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU2VjdXJpdHkgQ29uZmlndXJhdGlvbiBSZWdpc3Rlciwgb2Zmc2V0OiAweEIwICovCisgIF9fSU8gdWludDMyX3QgSU5UX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4QjQgKi8KKyAgX19JTyB1aW50MzJfdCBJTlRfTUFTSzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTWFzayBSZWdpc3Rlciwgb2Zmc2V0OiAweEI4ICovCisgIF9fSU8gdWludDMyX3QgSU5UX1NUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHhCQyAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMVs0OF07CisgIF9fSSAgdWludDMyX3QgVklEMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFZlcnNpb24gSUQgUmVnaXN0ZXIgKE1TKSwgb2Zmc2V0OiAweEYwICovCisgIF9fSSAgdWludDMyX3QgVklEMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFZlcnNpb24gSUQgUmVnaXN0ZXIgKExTKSwgb2Zmc2V0OiAweEY0ICovCit9IFRSTkdfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVFJORyBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFRSTkdfUmVnaXN0ZXJfTWFza3MgVFJORyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgTUNUTCAtIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX01DVExfU0FNUF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICgweDNVKQorI2RlZmluZSBUUk5HX01DVExfU0FNUF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1NBTVBfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfTUNUTF9TQU1QX01PREVfU0hJRlQpKSAmIFRSTkdfTUNUTF9TQU1QX01PREVfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX09TQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhDVSkKKyNkZWZpbmUgVFJOR19NQ1RMX09TQ19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFRSTkdfTUNUTF9PU0NfRElWKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfT1NDX0RJVl9TSElGVCkpICYgVFJOR19NQ1RMX09TQ19ESVZfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX1VOVVNFRF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9VTlVTRURfU0hJRlQgICAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBUUk5HX01DVExfVU5VU0VEKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX1VOVVNFRF9TSElGVCkpICYgVFJOR19NQ1RMX1VOVVNFRF9NQVNLKQorI2RlZmluZSBUUk5HX01DVExfVFJOR19BQ0NfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1RSTkdfQUNDX1NISUZUICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFRSTkdfTUNUTF9UUk5HX0FDQyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfVFJOR19BQ0NfU0hJRlQpKSAmIFRSTkdfTUNUTF9UUk5HX0FDQ19NQVNLKQorI2RlZmluZSBUUk5HX01DVExfUlNUX0RFRl9NQVNLICAgICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1JTVF9ERUZfU0hJRlQgICAgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFRSTkdfTUNUTF9SU1RfREVGKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfUlNUX0RFRl9TSElGVCkpICYgVFJOR19NQ1RMX1JTVF9ERUZfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX0ZPUl9TQ0xLX01BU0sgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFRSTkdfTUNUTF9GT1JfU0NMS19TSElGVCAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBUUk5HX01DVExfRk9SX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX0ZPUl9TQ0xLX1NISUZUKSkgJiBUUk5HX01DVExfRk9SX1NDTEtfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX0ZDVF9GQUlMX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBUUk5HX01DVExfRkNUX0ZBSUxfU0hJRlQgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFJOR19NQ1RMX0ZDVF9GQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfTUNUTF9GQ1RfRkFJTF9TSElGVCkpICYgVFJOR19NQ1RMX0ZDVF9GQUlMX01BU0spCisjZGVmaW5lIFRSTkdfTUNUTF9GQ1RfVkFMX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX0ZDVF9WQUxfU0hJRlQgICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIFRSTkdfTUNUTF9GQ1RfVkFMKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfRkNUX1ZBTF9TSElGVCkpICYgVFJOR19NQ1RMX0ZDVF9WQUxfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX0VOVF9WQUxfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBUUk5HX01DVExfRU5UX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFRSTkdfTUNUTF9FTlRfVkFMKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfRU5UX1ZBTF9TSElGVCkpICYgVFJOR19NQ1RMX0VOVF9WQUxfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX1RTVF9PVVRfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBUUk5HX01DVExfVFNUX09VVF9TSElGVCAgICAgICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIFRSTkdfTUNUTF9UU1RfT1VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfVFNUX09VVF9TSElGVCkpICYgVFJOR19NQ1RMX1RTVF9PVVRfTUFTSykKKyNkZWZpbmUgVFJOR19NQ1RMX0VSUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX0VSUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBUUk5HX01DVExfRVJSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX0VSUl9TSElGVCkpICYgVFJOR19NQ1RMX0VSUl9NQVNLKQorI2RlZmluZSBUUk5HX01DVExfVFNUT1BfT0tfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBUUk5HX01DVExfVFNUT1BfT0tfU0hJRlQgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIFRSTkdfTUNUTF9UU1RPUF9PSyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX01DVExfVFNUT1BfT0tfU0hJRlQpKSAmIFRSTkdfTUNUTF9UU1RPUF9PS19NQVNLKQorI2RlZmluZSBUUk5HX01DVExfUFJHTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgVFJOR19NQ1RMX1BSR01fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX01DVExfUFJHTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19NQ1RMX1BSR01fU0hJRlQpKSAmIFRSTkdfTUNUTF9QUkdNX01BU0spCisKKy8qISBAbmFtZSBTQ01JU0MgLSBTdGF0aXN0aWNhbCBDaGVjayBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NNSVNDX0xSVU5fTUFYX01BU0sgICAgICAgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBUUk5HX1NDTUlTQ19MUlVOX01BWF9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ01JU0NfTFJVTl9NQVgoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NNSVNDX0xSVU5fTUFYX1NISUZUKSkgJiBUUk5HX1NDTUlTQ19MUlVOX01BWF9NQVNLKQorI2RlZmluZSBUUk5HX1NDTUlTQ19SVFlfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweEYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ01JU0NfUlRZX0NUX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDTUlTQ19SVFlfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ01JU0NfUlRZX0NUX1NISUZUKSkgJiBUUk5HX1NDTUlTQ19SVFlfQ1RfTUFTSykKKworLyohIEBuYW1lIFBLUlJORyAtIFBva2VyIFJhbmdlIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSUk5HX1BLUl9STkdfTUFTSyAgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSUk5HX1BLUl9STkdfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUlJOR19QS1JfUk5HKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JSTkdfUEtSX1JOR19TSElGVCkpICYgVFJOR19QS1JSTkdfUEtSX1JOR19NQVNLKQorCisvKiEgQG5hbWUgUEtSTUFYIC0gUG9rZXIgTWF4aW11bSBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1BLUk1BWF9QS1JfTUFYX01BU0sgICAgICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSTUFYX1BLUl9NQVhfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUk1BWF9QS1JfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JNQVhfUEtSX01BWF9TSElGVCkpICYgVFJOR19QS1JNQVhfUEtSX01BWF9NQVNLKQorCisvKiEgQG5hbWUgUEtSU1EgLSBQb2tlciBTcXVhcmUgQ2FsY3VsYXRpb24gUmVzdWx0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSU1FfUEtSX1NRX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkZGRkZGVSkKKyNkZWZpbmUgVFJOR19QS1JTUV9QS1JfU1FfU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfUEtSU1FfUEtSX1NRKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1BLUlNRX1BLUl9TUV9TSElGVCkpICYgVFJOR19QS1JTUV9QS1JfU1FfTUFTSykKKworLyohIEBuYW1lIFNEQ1RMIC0gU2VlZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0RDVExfU0FNUF9TSVpFX01BU0sgICAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfU0RDVExfU0FNUF9TSVpFX1NISUZUICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NEQ1RMX1NBTVBfU0laRSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TRENUTF9TQU1QX1NJWkVfU0hJRlQpKSAmIFRSTkdfU0RDVExfU0FNUF9TSVpFX01BU0spCisjZGVmaW5lIFRSTkdfU0RDVExfRU5UX0RMWV9NQVNLICAgICAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NEQ1RMX0VOVF9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0RDVExfRU5UX0RMWSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NEQ1RMX0VOVF9ETFlfU0hJRlQpKSAmIFRSTkdfU0RDVExfRU5UX0RMWV9NQVNLKQorCisvKiEgQG5hbWUgU0JMSU0gLSBTcGFyc2UgQml0IExpbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0JMSU1fU0JfTElNX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M0ZGVSkKKyNkZWZpbmUgVFJOR19TQkxJTV9TQl9MSU1fU0hJRlQgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0JMSU1fU0JfTElNKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NCTElNX1NCX0xJTV9TSElGVCkpICYgVFJOR19TQkxJTV9TQl9MSU1fTUFTSykKKworLyohIEBuYW1lIFRPVFNBTSAtIFRvdGFsIFNhbXBsZXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19UT1RTQU1fVE9UX1NBTV9NQVNLICAgICAgICAgICAgICAgICAoMHhGRkZGRlUpCisjZGVmaW5lIFRSTkdfVE9UU0FNX1RPVF9TQU1fU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1RPVFNBTV9UT1RfU0FNKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19UT1RTQU1fVE9UX1NBTV9TSElGVCkpICYgVFJOR19UT1RTQU1fVE9UX1NBTV9NQVNLKQorCisvKiEgQG5hbWUgRlJRTUlOIC0gRnJlcXVlbmN5IENvdW50IE1pbmltdW0gTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19GUlFNSU5fRlJRX01JTl9NQVNLICAgICAgICAgICAgICAgICAoMHgzRkZGRkZVKQorI2RlZmluZSBUUk5HX0ZSUU1JTl9GUlFfTUlOX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19GUlFNSU5fRlJRX01JTih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfRlJRTUlOX0ZSUV9NSU5fU0hJRlQpKSAmIFRSTkdfRlJRTUlOX0ZSUV9NSU5fTUFTSykKKworLyohIEBuYW1lIEZSUUNOVCAtIEZyZXF1ZW5jeSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX0ZSUUNOVF9GUlFfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweDNGRkZGRlUpCisjZGVmaW5lIFRSTkdfRlJRQ05UX0ZSUV9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX0ZSUUNOVF9GUlFfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19GUlFDTlRfRlJRX0NUX1NISUZUKSkgJiBUUk5HX0ZSUUNOVF9GUlFfQ1RfTUFTSykKKworLyohIEBuYW1lIEZSUU1BWCAtIEZyZXF1ZW5jeSBDb3VudCBNYXhpbXVtIExpbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfRlJRTUFYX0ZSUV9NQVhfTUFTSyAgICAgICAgICAgICAgICAgKDB4M0ZGRkZGVSkKKyNkZWZpbmUgVFJOR19GUlFNQVhfRlJRX01BWF9TSElGVCAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfRlJRTUFYX0ZSUV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0ZSUU1BWF9GUlFfTUFYX1NISUZUKSkgJiBUUk5HX0ZSUU1BWF9GUlFfTUFYX01BU0spCisKKy8qISBAbmFtZSBTQ01DIC0gU3RhdGlzdGljYWwgQ2hlY2sgTW9ub2JpdCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDTUNfTU9OT19DVF9NQVNLICAgICAgICAgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBUUk5HX1NDTUNfTU9OT19DVF9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ01DX01PTk9fQ1QoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NNQ19NT05PX0NUX1NISUZUKSkgJiBUUk5HX1NDTUNfTU9OT19DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NNTCAtIFN0YXRpc3RpY2FsIENoZWNrIE1vbm9iaXQgTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ01MX01PTk9fTUFYX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFJOR19TQ01MX01PTk9fTUFYX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NNTF9NT05PX01BWCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDTUxfTU9OT19NQVhfU0hJRlQpKSAmIFRSTkdfU0NNTF9NT05PX01BWF9NQVNLKQorI2RlZmluZSBUUk5HX1NDTUxfTU9OT19STkdfTUFTSyAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ01MX01PTk9fUk5HX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDTUxfTU9OT19STkcoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ01MX01PTk9fUk5HX1NISUZUKSkgJiBUUk5HX1NDTUxfTU9OT19STkdfTUFTSykKKworLyohIEBuYW1lIFNDUjFDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAxIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSMUNfUjFfMF9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4N0ZGRlUpCisjZGVmaW5lIFRSTkdfU0NSMUNfUjFfMF9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjFDX1IxXzBfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1IxQ19SMV8wX0NUX1NISUZUKSkgJiBUUk5HX1NDUjFDX1IxXzBfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1IxQ19SMV8xX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHg3RkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSMUNfUjFfMV9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1IxQ19SMV8xX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMUNfUjFfMV9DVF9TSElGVCkpICYgVFJOR19TQ1IxQ19SMV8xX0NUX01BU0spCisKKy8qISBAbmFtZSBTQ1IxTCAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMSBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjFMX1JVTjFfTUFYX01BU0sgICAgICAgICAgICAgICAgICgweDdGRkZVKQorI2RlZmluZSBUUk5HX1NDUjFMX1JVTjFfTUFYX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1IxTF9SVU4xX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMUxfUlVOMV9NQVhfU0hJRlQpKSAmIFRSTkdfU0NSMUxfUlVOMV9NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1IxTF9SVU4xX1JOR19NQVNLICAgICAgICAgICAgICAgICAoMHg3RkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSMUxfUlVOMV9STkdfU0hJRlQgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1IxTF9SVU4xX1JORyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMUxfUlVOMV9STkdfU0hJRlQpKSAmIFRSTkdfU0NSMUxfUlVOMV9STkdfTUFTSykKKworLyohIEBuYW1lIFNDUjJDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAyIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSMkNfUjJfMF9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4M0ZGRlUpCisjZGVmaW5lIFRSTkdfU0NSMkNfUjJfMF9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjJDX1IyXzBfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1IyQ19SMl8wX0NUX1NISUZUKSkgJiBUUk5HX1NDUjJDX1IyXzBfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1IyQ19SMl8xX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHgzRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSMkNfUjJfMV9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1IyQ19SMl8xX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMkNfUjJfMV9DVF9TSElGVCkpICYgVFJOR19TQ1IyQ19SMl8xX0NUX01BU0spCisKKy8qISBAbmFtZSBTQ1IyTCAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMiBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjJMX1JVTjJfTUFYX01BU0sgICAgICAgICAgICAgICAgICgweDNGRkZVKQorI2RlZmluZSBUUk5HX1NDUjJMX1JVTjJfTUFYX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1IyTF9SVU4yX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMkxfUlVOMl9NQVhfU0hJRlQpKSAmIFRSTkdfU0NSMkxfUlVOMl9NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1IyTF9SVU4yX1JOR19NQVNLICAgICAgICAgICAgICAgICAoMHgzRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSMkxfUlVOMl9STkdfU0hJRlQgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1IyTF9SVU4yX1JORyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSMkxfUlVOMl9STkdfU0hJRlQpKSAmIFRSTkdfU0NSMkxfUlVOMl9STkdfTUFTSykKKworLyohIEBuYW1lIFNDUjNDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAzIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSM0NfUjNfMF9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MUZGRlUpCisjZGVmaW5lIFRSTkdfU0NSM0NfUjNfMF9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjNDX1IzXzBfQ1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1IzQ19SM18wX0NUX1NISUZUKSkgJiBUUk5HX1NDUjNDX1IzXzBfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1IzQ19SM18xX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSM0NfUjNfMV9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1IzQ19SM18xX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSM0NfUjNfMV9DVF9TSElGVCkpICYgVFJOR19TQ1IzQ19SM18xX0NUX01BU0spCisKKy8qISBAbmFtZSBTQ1IzTCAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMyBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjNMX1JVTjNfTUFYX01BU0sgICAgICAgICAgICAgICAgICgweDFGRkZVKQorI2RlZmluZSBUUk5HX1NDUjNMX1JVTjNfTUFYX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1IzTF9SVU4zX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSM0xfUlVOM19NQVhfU0hJRlQpKSAmIFRSTkdfU0NSM0xfUlVOM19NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1IzTF9SVU4zX1JOR19NQVNLICAgICAgICAgICAgICAgICAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSM0xfUlVOM19STkdfU0hJRlQgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1IzTF9SVU4zX1JORyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSM0xfUlVOM19STkdfU0hJRlQpKSAmIFRSTkdfU0NSM0xfUlVOM19STkdfTUFTSykKKworLyohIEBuYW1lIFNDUjRDIC0gU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA0IENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSNENfUjRfMF9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4RkZGVSkKKyNkZWZpbmUgVFJOR19TQ1I0Q19SNF8wX0NUX1NISUZUICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSNENfUjRfMF9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjRDX1I0XzBfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSNENfUjRfMF9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1NDUjRDX1I0XzFfQ1RfTUFTSyAgICAgICAgICAgICAgICAgICgweEZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjRDX1I0XzFfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSNENfUjRfMV9DVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjRDX1I0XzFfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSNENfUjRfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0NSNEwgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDQgTGltaXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ1I0TF9SVU40X01BWF9NQVNLICAgICAgICAgICAgICAgICAoMHhGRkZVKQorI2RlZmluZSBUUk5HX1NDUjRMX1JVTjRfTUFYX1NISUZUICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1I0TF9SVU40X01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSNExfUlVONF9NQVhfU0hJRlQpKSAmIFRSTkdfU0NSNExfUlVONF9NQVhfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1I0TF9SVU40X1JOR19NQVNLICAgICAgICAgICAgICAgICAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ1I0TF9SVU40X1JOR19TSElGVCAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDUjRMX1JVTjRfUk5HKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I0TF9SVU40X1JOR19TSElGVCkpICYgVFJOR19TQ1I0TF9SVU40X1JOR19NQVNLKQorCisvKiEgQG5hbWUgU0NSNUMgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDUgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TQ1I1Q19SNV8wX0NUX01BU0sgICAgICAgICAgICAgICAgICAoMHg3RkZVKQorI2RlZmluZSBUUk5HX1NDUjVDX1I1XzBfQ1RfU0hJRlQgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19TQ1I1Q19SNV8wX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSNUNfUjVfMF9DVF9TSElGVCkpICYgVFJOR19TQ1I1Q19SNV8wX0NUX01BU0spCisjZGVmaW5lIFRSTkdfU0NSNUNfUjVfMV9DVF9NQVNLICAgICAgICAgICAgICAgICAgKDB4N0ZGMDAwMFUpCisjZGVmaW5lIFRSTkdfU0NSNUNfUjVfMV9DVF9TSElGVCAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFJOR19TQ1I1Q19SNV8xX0NUKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU0NSNUNfUjVfMV9DVF9TSElGVCkpICYgVFJOR19TQ1I1Q19SNV8xX0NUX01BU0spCisKKy8qISBAbmFtZSBTQ1I1TCAtIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNSBMaW1pdCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX1NDUjVMX1JVTjVfTUFYX01BU0sgICAgICAgICAgICAgICAgICgweDdGRlUpCisjZGVmaW5lIFRSTkdfU0NSNUxfUlVONV9NQVhfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NDUjVMX1JVTjVfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I1TF9SVU41X01BWF9TSElGVCkpICYgVFJOR19TQ1I1TF9SVU41X01BWF9NQVNLKQorI2RlZmluZSBUUk5HX1NDUjVMX1JVTjVfUk5HX01BU0sgICAgICAgICAgICAgICAgICgweDdGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjVMX1JVTjVfUk5HX1NISUZUICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSNUxfUlVONV9STkcoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjVMX1JVTjVfUk5HX1NISUZUKSkgJiBUUk5HX1NDUjVMX1JVTjVfUk5HX01BU0spCisKKy8qISBAbmFtZSBTQ1I2UEMgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSNlBDX1I2UF8wX0NUX01BU0sgICAgICAgICAgICAgICAgKDB4N0ZGVSkKKyNkZWZpbmUgVFJOR19TQ1I2UENfUjZQXzBfQ1RfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSNlBDX1I2UF8wX0NUKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjZQQ19SNlBfMF9DVF9TSElGVCkpICYgVFJOR19TQ1I2UENfUjZQXzBfQ1RfTUFTSykKKyNkZWZpbmUgVFJOR19TQ1I2UENfUjZQXzFfQ1RfTUFTSyAgICAgICAgICAgICAgICAoMHg3RkYwMDAwVSkKKyNkZWZpbmUgVFJOR19TQ1I2UENfUjZQXzFfQ1RfU0hJRlQgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1NDUjZQQ19SNlBfMV9DVCh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TQ1I2UENfUjZQXzFfQ1RfU0hJRlQpKSAmIFRSTkdfU0NSNlBDX1I2UF8xX0NUX01BU0spCisKKy8qISBAbmFtZSBTQ1I2UEwgLSBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIExpbWl0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU0NSNlBMX1JVTjZQX01BWF9NQVNLICAgICAgICAgICAgICAgKDB4N0ZGVSkKKyNkZWZpbmUgVFJOR19TQ1I2UExfUlVONlBfTUFYX1NISUZUICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0NSNlBMX1JVTjZQX01BWCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjZQTF9SVU42UF9NQVhfU0hJRlQpKSAmIFRSTkdfU0NSNlBMX1JVTjZQX01BWF9NQVNLKQorI2RlZmluZSBUUk5HX1NDUjZQTF9SVU42UF9STkdfTUFTSyAgICAgICAgICAgICAgICgweDdGRjAwMDBVKQorI2RlZmluZSBUUk5HX1NDUjZQTF9SVU42UF9STkdfU0hJRlQgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU0NSNlBMX1JVTjZQX1JORyh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NDUjZQTF9SVU42UF9STkdfU0hJRlQpKSAmIFRSTkdfU0NSNlBMX1JVTjZQX1JOR19NQVNLKQorCisvKiEgQG5hbWUgU1RBVFVTIC0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMUJSMF9NQVNLICAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMUJSMF9TSElGVCAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjFCUjAoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEYxQlIwX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjFCUjBfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYxQlIxX01BU0sgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYxQlIxX1NISUZUICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMUJSMSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URjFCUjFfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGMUJSMV9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjJCUjBfTUFTSyAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjJCUjBfU0hJRlQgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYyQlIwKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGMkJSMF9TSElGVCkpICYgVFJOR19TVEFUVVNfVEYyQlIwX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMkJSMV9NQVNLICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGMkJSMV9TSElGVCAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjJCUjEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEYyQlIxX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjJCUjFfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYzQlIwX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGM0JSMF9TSElGVCAgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjNCUjAoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEYzQlIwX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjNCUjBfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEYzQlIxX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGM0JSMV9TSElGVCAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjNCUjEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEYzQlIxX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjNCUjFfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY0QlIwX01BU0sgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNEJSMF9TSElGVCAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjRCUjAoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEY0QlIwX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjRCUjBfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY0QlIxX01BU0sgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNEJSMV9TSElGVCAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjRCUjEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEY0QlIxX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjRCUjFfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY1QlIwX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjVCUjBfU0hJRlQgICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY1QlIwKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGNUJSMF9TSElGVCkpICYgVFJOR19TVEFUVVNfVEY1QlIwX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNUJSMV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY1QlIxX1NISUZUICAgICAgICAgICAgICAgICAoOVUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNUJSMSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URjVCUjFfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGNUJSMV9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjZQQlIwX01BU0sgICAgICAgICAgICAgICAgICgweDQwMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNlBCUjBfU0hJRlQgICAgICAgICAgICAgICAgKDEwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY2UEJSMCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGNlBCUjBfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGNlBCUjBfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEY2UEJSMV9NQVNLICAgICAgICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URjZQQlIxX1NISUZUICAgICAgICAgICAgICAgICgxMVUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGNlBCUjEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URjZQQlIxX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URjZQQlIxX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGU0JfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MTAwMFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgKDEyVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZTQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfU1RBVFVTX1RGU0JfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGU0JfTUFTSykKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZMUl9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgVFJOR19TVEFUVVNfVEZMUl9TSElGVCAgICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URkxSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TVEFUVVNfVEZMUl9TSElGVCkpICYgVFJOR19TVEFUVVNfVEZMUl9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URlBfU0hJRlQpKSAmIFRSTkdfU1RBVFVTX1RGUF9NQVNLKQorI2RlZmluZSBUUk5HX1NUQVRVU19URk1CX01BU0sgICAgICAgICAgICAgICAgICAgICgweDgwMDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19URk1CX1NISUZUICAgICAgICAgICAgICAgICAgICgxNVUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1RGTUIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19URk1CX1NISUZUKSkgJiBUUk5HX1NUQVRVU19URk1CX01BU0spCisjZGVmaW5lIFRSTkdfU1RBVFVTX1JFVFJZX0NUX01BU0sgICAgICAgICAgICAgICAgKDB4RjAwMDBVKQorI2RlZmluZSBUUk5HX1NUQVRVU19SRVRSWV9DVF9TSElGVCAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfU1RBVFVTX1JFVFJZX0NUKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NUQVRVU19SRVRSWV9DVF9TSElGVCkpICYgVFJOR19TVEFUVVNfUkVUUllfQ1RfTUFTSykKKworLyohIEBuYW1lIEVOVCAtIEVudHJvcHkgUmVhZCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX0VOVF9FTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgVFJOR19FTlRfRU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfRU5UX0VOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0VOVF9FTlRfU0hJRlQpKSAmIFRSTkdfRU5UX0VOVF9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgVFJOR19FTlQgKi8KKyNkZWZpbmUgVFJOR19FTlRfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTZVKQorCisvKiEgQG5hbWUgUEtSQ05UMTAgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCAxIGFuZCAwIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05UMTBfUEtSXzBfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05UMTBfUEtSXzBfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVDEwX1BLUl8wX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQxMF9QS1JfMF9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQxMF9QS1JfMF9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVDEwX1BLUl8xX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQxMF9QS1JfMV9DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDEwX1BLUl8xX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQxMF9QS1JfMV9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQxMF9QS1JfMV9DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05UMzIgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCAzIGFuZCAyIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05UMzJfUEtSXzJfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05UMzJfUEtSXzJfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVDMyX1BLUl8yX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQzMl9QS1JfMl9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQzMl9QS1JfMl9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVDMyX1BLUl8zX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQzMl9QS1JfM19DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDMyX1BLUl8zX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQzMl9QS1JfM19DVF9TSElGVCkpICYgVFJOR19QS1JDTlQzMl9QS1JfM19DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05UNTQgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCA1IGFuZCA0IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05UNTRfUEtSXzRfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05UNTRfUEtSXzRfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVDU0X1BLUl80X0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQ1NF9QS1JfNF9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQ1NF9QS1JfNF9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVDU0X1BLUl81X0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ1NF9QS1JfNV9DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDU0X1BLUl81X0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQ1NF9QS1JfNV9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQ1NF9QS1JfNV9DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05UNzYgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCA3IGFuZCA2IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05UNzZfUEtSXzZfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05UNzZfUEtSXzZfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVDc2X1BLUl82X0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQ3Nl9QS1JfNl9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQ3Nl9QS1JfNl9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVDc2X1BLUl83X0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ3Nl9QS1JfN19DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDc2X1BLUl83X0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQ3Nl9QS1JfN19DVF9TSElGVCkpICYgVFJOR19QS1JDTlQ3Nl9QS1JfN19DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05UOTggLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCA5IGFuZCA4IFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05UOThfUEtSXzhfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05UOThfUEtSXzhfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVDk4X1BLUl84X0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQ5OF9QS1JfOF9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQ5OF9QS1JfOF9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVDk4X1BLUl85X0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlQ5OF9QS1JfOV9DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVDk4X1BLUl85X0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlQ5OF9QS1JfOV9DVF9TSElGVCkpICYgVFJOR19QS1JDTlQ5OF9QS1JfOV9DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05UQkEgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCBCIGFuZCBBIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05UQkFfUEtSX0FfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05UQkFfUEtSX0FfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVEJBX1BLUl9BX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlRCQV9QS1JfQV9DVF9TSElGVCkpICYgVFJOR19QS1JDTlRCQV9QS1JfQV9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVEJBX1BLUl9CX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlRCQV9QS1JfQl9DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVEJBX1BLUl9CX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlRCQV9QS1JfQl9DVF9TSElGVCkpICYgVFJOR19QS1JDTlRCQV9QS1JfQl9DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05UREMgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCBEIGFuZCBDIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05URENfUEtSX0NfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05URENfUEtSX0NfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVERDX1BLUl9DX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlREQ19QS1JfQ19DVF9TSElGVCkpICYgVFJOR19QS1JDTlREQ19QS1JfQ19DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVERDX1BLUl9EX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlREQ19QS1JfRF9DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVERDX1BLUl9EX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlREQ19QS1JfRF9DVF9TSElGVCkpICYgVFJOR19QS1JDTlREQ19QS1JfRF9DVF9NQVNLKQorCisvKiEgQG5hbWUgUEtSQ05URkUgLSBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBDb3VudCBGIGFuZCBFIFJlZ2lzdGVyICovCisjZGVmaW5lIFRSTkdfUEtSQ05URkVfUEtSX0VfQ1RfTUFTSyAgICAgICAgICAgICAgKDB4RkZGRlUpCisjZGVmaW5lIFRSTkdfUEtSQ05URkVfUEtSX0VfQ1RfU0hJRlQgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1BLUkNOVEZFX1BLUl9FX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlRGRV9QS1JfRV9DVF9TSElGVCkpICYgVFJOR19QS1JDTlRGRV9QS1JfRV9DVF9NQVNLKQorI2RlZmluZSBUUk5HX1BLUkNOVEZFX1BLUl9GX0NUX01BU0sgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFJOR19QS1JDTlRGRV9QS1JfRl9DVF9TSElGVCAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUUk5HX1BLUkNOVEZFX1BLUl9GX0NUKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19QS1JDTlRGRV9QS1JfRl9DVF9TSElGVCkpICYgVFJOR19QS1JDTlRGRV9QS1JfRl9DVF9NQVNLKQorCisvKiEgQG5hbWUgU0VDX0NGRyAtIFNlY3VyaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19TRUNfQ0ZHX1NIMF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFJOR19TRUNfQ0ZHX1NIMF9TSElGVCAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfU0VDX0NGR19TSDAoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1NFQ19DRkdfU0gwX1NISUZUKSkgJiBUUk5HX1NFQ19DRkdfU0gwX01BU0spCisjZGVmaW5lIFRSTkdfU0VDX0NGR19OT19QUkdNX01BU0sgICAgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFRSTkdfU0VDX0NGR19OT19QUkdNX1NISUZUICAgICAgICAgICAgICAgKDFVKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfTk9fUFJHTSh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TRUNfQ0ZHX05PX1BSR01fU0hJRlQpKSAmIFRSTkdfU0VDX0NGR19OT19QUkdNX01BU0spCisjZGVmaW5lIFRSTkdfU0VDX0NGR19TS19WQUxfTUFTSyAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRSTkdfU0VDX0NGR19TS19WQUxfU0hJRlQgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBUUk5HX1NFQ19DRkdfU0tfVkFMKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19TRUNfQ0ZHX1NLX1ZBTF9TSElGVCkpICYgVFJOR19TRUNfQ0ZHX1NLX1ZBTF9NQVNLKQorCisvKiEgQG5hbWUgSU5UX0NUUkwgLSBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX0lOVF9DVFJMX0hXX0VSUl9NQVNLICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX0hXX0VSUl9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9IV19FUlIoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX0NUUkxfSFdfRVJSX1NISUZUKSkgJiBUUk5HX0lOVF9DVFJMX0hXX0VSUl9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX0VOVF9WQUxfTUFTSyAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX0VOVF9WQUxfU0hJRlQgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9FTlRfVkFMKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX0NUUkxfRU5UX1ZBTF9TSElGVCkpICYgVFJOR19JTlRfQ1RSTF9FTlRfVkFMX01BU0spCisjZGVmaW5lIFRSTkdfSU5UX0NUUkxfRlJRX0NUX0ZBSUxfTUFTSyAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRSTkdfSU5UX0NUUkxfRlJRX0NUX0ZBSUxfU0hJRlQgICAgICAgICAgKDJVKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX0ZSUV9DVF9GQUlMKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19JTlRfQ1RSTF9GUlFfQ1RfRkFJTF9TSElGVCkpICYgVFJOR19JTlRfQ1RSTF9GUlFfQ1RfRkFJTF9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9DVFJMX1VOVVNFRF9NQVNLICAgICAgICAgICAgICAgICgweEZGRkZGRkY4VSkKKyNkZWZpbmUgVFJOR19JTlRfQ1RSTF9VTlVTRURfU0hJRlQgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFRSTkdfSU5UX0NUUkxfVU5VU0VEKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0lOVF9DVFJMX1VOVVNFRF9TSElGVCkpICYgVFJOR19JTlRfQ1RSTF9VTlVTRURfTUFTSykKKworLyohIEBuYW1lIElOVF9NQVNLIC0gTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBUUk5HX0lOVF9NQVNLX0hXX0VSUl9NQVNLICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBUUk5HX0lOVF9NQVNLX0hXX0VSUl9TSElGVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgVFJOR19JTlRfTUFTS19IV19FUlIoeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX01BU0tfSFdfRVJSX1NISUZUKSkgJiBUUk5HX0lOVF9NQVNLX0hXX0VSUl9NQVNLKQorI2RlZmluZSBUUk5HX0lOVF9NQVNLX0VOVF9WQUxfTUFTSyAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBUUk5HX0lOVF9NQVNLX0VOVF9WQUxfU0hJRlQgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgVFJOR19JTlRfTUFTS19FTlRfVkFMKHgpICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRSTkdfSU5UX01BU0tfRU5UX1ZBTF9TSElGVCkpICYgVFJOR19JTlRfTUFTS19FTlRfVkFMX01BU0spCisjZGVmaW5lIFRSTkdfSU5UX01BU0tfRlJRX0NUX0ZBSUxfTUFTSyAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRSTkdfSU5UX01BU0tfRlJRX0NUX0ZBSUxfU0hJRlQgICAgICAgICAgKDJVKQorI2RlZmluZSBUUk5HX0lOVF9NQVNLX0ZSUV9DVF9GQUlMKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19JTlRfTUFTS19GUlFfQ1RfRkFJTF9TSElGVCkpICYgVFJOR19JTlRfTUFTS19GUlFfQ1RfRkFJTF9NQVNLKQorCisvKiEgQG5hbWUgSU5UX1NUQVRVUyAtIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFJOR19JTlRfU1RBVFVTX0hXX0VSUl9NQVNLICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgVFJOR19JTlRfU1RBVFVTX0hXX0VSUl9TSElGVCAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19IV19FUlIoeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX0lOVF9TVEFUVVNfSFdfRVJSX1NISUZUKSkgJiBUUk5HX0lOVF9TVEFUVVNfSFdfRVJSX01BU0spCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19FTlRfVkFMX01BU0sgICAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19FTlRfVkFMX1NISUZUICAgICAgICAgICAgKDFVKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfRU5UX1ZBTCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19JTlRfU1RBVFVTX0VOVF9WQUxfU0hJRlQpKSAmIFRSTkdfSU5UX1NUQVRVU19FTlRfVkFMX01BU0spCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19GUlFfQ1RfRkFJTF9NQVNLICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFRSTkdfSU5UX1NUQVRVU19GUlFfQ1RfRkFJTF9TSElGVCAgICAgICAgKDJVKQorI2RlZmluZSBUUk5HX0lOVF9TVEFUVVNfRlJRX0NUX0ZBSUwoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19JTlRfU1RBVFVTX0ZSUV9DVF9GQUlMX1NISUZUKSkgJiBUUk5HX0lOVF9TVEFUVVNfRlJRX0NUX0ZBSUxfTUFTSykKKworLyohIEBuYW1lIFZJRDEgLSBWZXJzaW9uIElEIFJlZ2lzdGVyIChNUykgKi8KKyNkZWZpbmUgVFJOR19WSUQxX01JTl9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFRSTkdfVklEMV9NSU5fUkVWX1NISUZUICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBUUk5HX1ZJRDFfTUlOX1JFVih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQxX01JTl9SRVZfU0hJRlQpKSAmIFRSTkdfVklEMV9NSU5fUkVWX01BU0spCisjZGVmaW5lIFRSTkdfVklEMV9NQUpfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFRSTkdfVklEMV9NQUpfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBUUk5HX1ZJRDFfTUFKX1JFVih4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQxX01BSl9SRVZfU0hJRlQpKSAmIFRSTkdfVklEMV9NQUpfUkVWX01BU0spCisjZGVmaW5lIFRSTkdfVklEMV9JUF9JRF9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBUUk5HX1ZJRDFfSVBfSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfVklEMV9JUF9JRCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1ZJRDFfSVBfSURfU0hJRlQpKSAmIFRSTkdfVklEMV9JUF9JRF9NQVNLKQorCisvKiEgQG5hbWUgVklEMiAtIFZlcnNpb24gSUQgUmVnaXN0ZXIgKExTKSAqLworI2RlZmluZSBUUk5HX1ZJRDJfQ09ORklHX09QVF9NQVNLICAgICAgICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgVFJOR19WSUQyX0NPTkZJR19PUFRfU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRSTkdfVklEMl9DT05GSUdfT1BUKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1ZJRDJfQ09ORklHX09QVF9TSElGVCkpICYgVFJOR19WSUQyX0NPTkZJR19PUFRfTUFTSykKKyNkZWZpbmUgVFJOR19WSUQyX0VDT19SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgVFJOR19WSUQyX0VDT19SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFRSTkdfVklEMl9FQ09fUkVWKHgpICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1ZJRDJfRUNPX1JFVl9TSElGVCkpICYgVFJOR19WSUQyX0VDT19SRVZfTUFTSykKKyNkZWZpbmUgVFJOR19WSUQyX0lOVEdfT1BUX01BU0sgICAgICAgICAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBUUk5HX1ZJRDJfSU5UR19PUFRfU0hJRlQgICAgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFRSTkdfVklEMl9JTlRHX09QVCh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUUk5HX1ZJRDJfSU5UR19PUFRfU0hJRlQpKSAmIFRSTkdfVklEMl9JTlRHX09QVF9NQVNLKQorI2RlZmluZSBUUk5HX1ZJRDJfRVJBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgVFJOR19WSUQyX0VSQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBUUk5HX1ZJRDJfRVJBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFJOR19WSUQyX0VSQV9TSElGVCkpICYgVFJOR19WSUQyX0VSQV9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgVFJOR19SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFRSTkcgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBUUk5HMCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVFJORzBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDAyOTAwMHUpCisvKiogUGVyaXBoZXJhbCBUUk5HMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgVFJORzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSTkdfVHlwZSAqKVRSTkcwX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgVFJORyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFRSTkdfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBUUk5HMF9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBUUk5HIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBUUk5HX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFJORzAgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgVFJORyBwZXJpcGhlcmFsIHR5cGUgKi8KKyNkZWZpbmUgVFJOR19JUlFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFRSTkcwX0lSUW4gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFRSTkdfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBUU0kgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBUU0lfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgVFNJIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBUU0kgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IEdFTkNTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU0kgR2VuZXJhbCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgREFUQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTSSBEQVRBIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IFRTSEQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU0kgVGhyZXNob2xkIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4OCAqLworfSBUU0lfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gVFNJIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgVFNJX1JlZ2lzdGVyX01hc2tzIFRTSSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgR0VOQ1MgLSBUU0kgR2VuZXJhbCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFNJX0dFTkNTX0NVUlNXX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgVFNJX0dFTkNTX0NVUlNXX1NISUZUICAgICAgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFRTSV9HRU5DU19DVVJTVyh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfQ1VSU1dfU0hJRlQpKSAmIFRTSV9HRU5DU19DVVJTV19NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfRU9TRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDRVKQorI2RlZmluZSBUU0lfR0VOQ1NfRU9TRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyVSkKKyNkZWZpbmUgVFNJX0dFTkNTX0VPU0YoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19FT1NGX1NISUZUKSkgJiBUU0lfR0VOQ1NfRU9TRl9NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfU0NOSVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBUU0lfR0VOQ1NfU0NOSVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1NDTklQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19TQ05JUF9TSElGVCkpICYgVFNJX0dFTkNTX1NDTklQX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19TVE1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBUU0lfR0VOQ1NfU1RNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgVFNJX0dFTkNTX1NUTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19TVE1fU0hJRlQpKSAmIFRTSV9HRU5DU19TVE1fTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX1NUUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFRTSV9HRU5DU19TVFBFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDVVKQorI2RlZmluZSBUU0lfR0VOQ1NfU1RQRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX1NUUEVfU0hJRlQpKSAmIFRTSV9HRU5DU19TVFBFX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19UU0lJRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBUU0lfR0VOQ1NfVFNJSUVOX1NISUZUICAgICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgVFNJX0dFTkNTX1RTSUlFTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19UU0lJRU5fU0hJRlQpKSAmIFRTSV9HRU5DU19UU0lJRU5fTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX1RTSUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFRTSV9HRU5DU19UU0lFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBUU0lfR0VOQ1NfVFNJRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX1RTSUVOX1NISUZUKSkgJiBUU0lfR0VOQ1NfVFNJRU5fTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX05TQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHgxRjAwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX05TQ05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFRTSV9HRU5DU19OU0NOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfTlNDTl9TSElGVCkpICYgVFNJX0dFTkNTX05TQ05fTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX1BTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoMHhFMDAwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1BTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAoMTNVKQorI2RlZmluZSBUU0lfR0VOQ1NfUFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX1BTX1NISUZUKSkgJiBUU0lfR0VOQ1NfUFNfTUFTSykKKyNkZWZpbmUgVFNJX0dFTkNTX0VYVENIUkdfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg3MDAwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19FWFRDSFJHX1NISUZUICAgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgVFNJX0dFTkNTX0VYVENIUkcoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19FWFRDSFJHX1NISUZUKSkgJiBUU0lfR0VOQ1NfRVhUQ0hSR19NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfRFZPTFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDE4MDAwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19EVk9MVF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDE5VSkKKyNkZWZpbmUgVFNJX0dFTkNTX0RWT0xUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19EVk9MVF9TSElGVCkpICYgVFNJX0dFTkNTX0RWT0xUX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19SRUZDSFJHX01BU0sgICAgICAgICAgICAgICAgICAgKDB4RTAwMDAwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX1JFRkNIUkdfU0hJRlQgICAgICAgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBUU0lfR0VOQ1NfUkVGQ0hSRyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX1JFRkNIUkdfU0hJRlQpKSAmIFRTSV9HRU5DU19SRUZDSFJHX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFRTSV9HRU5DU19NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgVFNJX0dFTkNTX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9HRU5DU19NT0RFX1NISUZUKSkgJiBUU0lfR0VOQ1NfTU9ERV9NQVNLKQorI2RlZmluZSBUU0lfR0VOQ1NfRVNPUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgVFNJX0dFTkNTX0VTT1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAoMjhVKQorI2RlZmluZSBUU0lfR0VOQ1NfRVNPUih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX0dFTkNTX0VTT1JfU0hJRlQpKSAmIFRTSV9HRU5DU19FU09SX01BU0spCisjZGVmaW5lIFRTSV9HRU5DU19PVVRSR0ZfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBUU0lfR0VOQ1NfT1VUUkdGX1NISUZUICAgICAgICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFRTSV9HRU5DU19PVVRSR0YoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfR0VOQ1NfT1VUUkdGX1NISUZUKSkgJiBUU0lfR0VOQ1NfT1VUUkdGX01BU0spCisKKy8qISBAbmFtZSBEQVRBIC0gVFNJIERBVEEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFNJX0RBVEFfVFNJQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFNJX0RBVEFfVFNJQ05UX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRTSV9EQVRBX1RTSUNOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfREFUQV9UU0lDTlRfU0hJRlQpKSAmIFRTSV9EQVRBX1RTSUNOVF9NQVNLKQorI2RlZmluZSBUU0lfREFUQV9TV1RTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIFRTSV9EQVRBX1NXVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDIyVSkKKyNkZWZpbmUgVFNJX0RBVEFfU1dUUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9EQVRBX1NXVFNfU0hJRlQpKSAmIFRTSV9EQVRBX1NXVFNfTUFTSykKKyNkZWZpbmUgVFNJX0RBVEFfRE1BRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBUU0lfREFUQV9ETUFFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIFRTSV9EQVRBX0RNQUVOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfREFUQV9ETUFFTl9TSElGVCkpICYgVFNJX0RBVEFfRE1BRU5fTUFTSykKKyNkZWZpbmUgVFNJX0RBVEFfVFNJQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFRTSV9EQVRBX1RTSUNIX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDI4VSkKKyNkZWZpbmUgVFNJX0RBVEFfVFNJQ0goeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFRTSV9EQVRBX1RTSUNIX1NISUZUKSkgJiBUU0lfREFUQV9UU0lDSF9NQVNLKQorCisvKiEgQG5hbWUgVFNIRCAtIFRTSSBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFNJX1RTSERfVEhSRVNMX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgVFNJX1RTSERfVEhSRVNMX1NISUZUICAgICAgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFRTSV9UU0hEX1RIUkVTTCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBUU0lfVFNIRF9USFJFU0xfU0hJRlQpKSAmIFRTSV9UU0hEX1RIUkVTTF9NQVNLKQorI2RlZmluZSBUU0lfVFNIRF9USFJFU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkYwMDAwVSkKKyNkZWZpbmUgVFNJX1RTSERfVEhSRVNIX1NISUZUICAgICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBUU0lfVFNIRF9USFJFU0goeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgVFNJX1RTSERfVEhSRVNIX1NISUZUKSkgJiBUU0lfVFNIRF9USFJFU0hfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFRTSV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFRTSSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFRTSTAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRTSTBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNDUwMDB1KQorLyoqIFBlcmlwaGVyYWwgVFNJMCBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgVFNJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRTSV9UeXBlICopVFNJMF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFRTSV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBUU0kwX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFRTSSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgVFNJX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFRTSTAgfQorLyoqIEludGVycnVwdCB2ZWN0b3JzIGZvciB0aGUgVFNJIHBlcmlwaGVyYWwgdHlwZSAqLworI2RlZmluZSBUU0lfSVJRUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgVFNJMF9JUlFuIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBUU0lfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBWUkVGIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgVlJFRl9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBWUkVGIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBWUkVGIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50OF90IFRSTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVlJFRiBUcmltIFJlZ2lzdGVyLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQ4X3QgU0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBWUkVGIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3Rlciwgb2Zmc2V0OiAweDEgKi8KK30gVlJFRl9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBWUkVGIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgVlJFRl9SZWdpc3Rlcl9NYXNrcyBWUkVGIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBUUk0gLSBWUkVGIFRyaW0gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlJFRl9UUk1fVFJJTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIFZSRUZfVFJNX1RSSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBWUkVGX1RSTV9UUklNKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfVFJNX1RSSU1fU0hJRlQpKSAmIFZSRUZfVFJNX1RSSU1fTUFTSykKKyNkZWZpbmUgVlJFRl9UUk1fQ0hPUEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFZSRUZfVFJNX0NIT1BFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBWUkVGX1RSTV9DSE9QRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfVFJNX0NIT1BFTl9TSElGVCkpICYgVlJFRl9UUk1fQ0hPUEVOX01BU0spCisKKy8qISBAbmFtZSBTQyAtIFZSRUYgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFZSRUZfU0NfTU9ERV9MVl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4M1UpCisjZGVmaW5lIFZSRUZfU0NfTU9ERV9MVl9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBWUkVGX1NDX01PREVfTFYoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfU0NfTU9ERV9MVl9TSElGVCkpICYgVlJFRl9TQ19NT0RFX0xWX01BU0spCisjZGVmaW5lIFZSRUZfU0NfVlJFRlNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFZSRUZfU0NfVlJFRlNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDJVKQorI2RlZmluZSBWUkVGX1NDX1ZSRUZTVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfU0NfVlJFRlNUX1NISUZUKSkgJiBWUkVGX1NDX1ZSRUZTVF9NQVNLKQorI2RlZmluZSBWUkVGX1NDX0lDT01QRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgVlJFRl9TQ19JQ09NUEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFZSRUZfU0NfSUNPTVBFTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDhfdCkoKCh1aW50OF90KSh4KSkgPDwgVlJFRl9TQ19JQ09NUEVOX1NISUZUKSkgJiBWUkVGX1NDX0lDT01QRU5fTUFTSykKKyNkZWZpbmUgVlJFRl9TQ19SRUdFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFZSRUZfU0NfUkVHRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgKDZVKQorI2RlZmluZSBWUkVGX1NDX1JFR0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfU0NfUkVHRU5fU0hJRlQpKSAmIFZSRUZfU0NfUkVHRU5fTUFTSykKKyNkZWZpbmUgVlJFRl9TQ19WUkVGRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFZSRUZfU0NfVlJFRkVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBWUkVGX1NDX1ZSRUZFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQ4X3QpKCgodWludDhfdCkoeCkpIDw8IFZSRUZfU0NfVlJFRkVOX1NISUZUKSkgJiBWUkVGX1NDX1ZSRUZFTl9NQVNLKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgVlJFRl9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFZSRUYgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBWUkVGIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBWUkVGX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDc0MDAwdSkKKy8qKiBQZXJpcGhlcmFsIFZSRUYgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFZSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWUkVGX1R5cGUgKilWUkVGX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgVlJFRiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFZSRUZfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBWUkVGX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFZSRUYgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFZSRUZfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBWUkVGIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBWUkVGX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9BTkFMT0cgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX0FOQUxPR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX0FOQUxPRyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9BTkFMT0cgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IEJCX0xET18xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgQmFzZWJhbmQgTERPIENvbnRyb2wgMSwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBCQl9MRE9fMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIEJhc2ViYW5kIExETyBDb250cm9sIDIsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgUlhfQURDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBBREMgQ29udHJvbCwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9CQkE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIEJCQSBDb250cm9sLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IFJYX0xOQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgTE5BIENvbnRyb2wsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IFJYX1RaQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgVFpBIENvbnRyb2wsIG9mZnNldDogMHgxNCAqLworICBfX0lPIHVpbnQzMl90IFJYX0FVWFBMTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgQXV4IFBMTCBDb250cm9sLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBTWV9DVFJMXzE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIFN5bnRoZXNpemVyIENvbnRyb2wgMSwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgU1lfQ1RSTF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBTeW50aGVzaXplciBDb250cm9sIDIsIG9mZnNldDogMHgyMCAqLworICBfX0lPIHVpbnQzMl90IFRYX0RBQ19QQTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgVFggSFBNIERBQyBhbmQgUEEgQ29udHJvbCwgb2Zmc2V0OiAweDI0ICovCisgIF9fSU8gdWludDMyX3QgQkFMVU5fVFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJGIEFuYWxvZyBCYWx1biBUWCBNb2RlIENvbnRyb2wsIG9mZnNldDogMHgyOCAqLworICBfX0lPIHVpbnQzMl90IEJBTFVOX1JYOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSRiBBbmFsb2cgQmFsdW4gUlggTW9kZSBDb250cm9sLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JICB1aW50MzJfdCBERlRfT0JTVl8xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIERGVCBPYnNlcnZhdGlvbiBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBERlRfT0JTVl8yOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUkYgQW5hbG9nIERGVCBPYnNlcnZhdGlvbiBSZWdpc3RlciAyLCBvZmZzZXQ6IDB4MzQgKi8KK30gWENWUl9BTkFMT0dfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9BTkFMT0cgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX0FOQUxPR19SZWdpc3Rlcl9NYXNrcyBYQ1ZSX0FOQUxPRyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQkJfTERPXzEgLSBSRiBBbmFsb2cgQmFzZWJhbmQgTERPIENvbnRyb2wgMSAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0JZUF9NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0JZUF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfQllQKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19CWVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfQllQX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfRElBR1NFTF9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0RJQUdTRUxfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0RJQUdTRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1NQQVJFX01BU0sgKDB4Q1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfU1BBUkVfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1NQQVJFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQURDREFDX1RSSU1fTUFTSyAoMHg3MFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfVFJJTV9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfVFJJTSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19BRENEQUNfVFJJTV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0FEQ0RBQ19UUklNX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfQllQX01BU0sgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9CWVBfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX0JZUCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9CWVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfQllQX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfRElBR1NFTF9NQVNLICgweDIwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfRElBR1NFTF9TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfRElBR1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfU1BBUkVfTUFTSyAoMHhDMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1NQQVJFX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfU1BBUkUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfVFJJTV9NQVNLICgweDcwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fQkJBX1RSSU1fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9UUklNKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19CQkFfVFJJTV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0JCQV9UUklNX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX0JZUF9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfQllQX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX0JZUCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19CWVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX0JZUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19ESUFHU0VMX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19ESUFHU0VMX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX0RJQUdTRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX1NQQVJFX01BU0sgKDB4QzAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19TUEFSRV9TSElGVCAoMThVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19TUEFSRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19UUklNX01BU0sgKDB4NzAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfVFJJTV9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19UUklNKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfVFJJTV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0ZEQktfVFJJTV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfQllQX01BU0sgICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfQllQX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9CWVAoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfQllQX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfQllQX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9ESUFHU0VMX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9ESUFHU0VMX1NISUZUICgyNVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9TUEFSRV9NQVNLICgweEMwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfU1BBUkVfU0hJRlQgKDI2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX1NQQVJFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9UUklNX01BU0sgKDB4NzAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfVFJJTV9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fSEZfVFJJTSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzFfQkJfTERPX0hGX1RSSU1fU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19IRl9UUklNX01BU0spCisKKy8qISBAbmFtZSBCQl9MRE9fMiAtIFJGIEFuYWxvZyBCYXNlYmFuZCBMRE8gQ29udHJvbCAyICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9CWVBfTUFTSyAgKDB4MVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9CWVBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfQllQKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX0JZUF9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX0JZUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfRElBR1NFTF9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfRElBR1NFTF9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9TUEFSRV9NQVNLICgweENVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfU1BBUkVfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfU1BBUkUoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1RSSU1fTUFTSyAoMHg3MFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9UUklNX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1BEX1RSSU0oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19QRF9UUklNX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fUERfVFJJTV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPX1NQQVJFX01BU0sgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT19TUEFSRV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09fU1BBUkUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19CWVBfTUFTSyAoMHg0MDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fQllQX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19CWVAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fQllQX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fQllQX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19ESUFHU0VMX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0RJQUdTRUxfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0RJQUdTRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX1RSSU1fTUFTSyAoMHg3MDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX1RSSU1fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX1RSSU0oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fVFJJTV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZDT0xPX1RSSU1fTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZUUkVGX0RJQUdTRUxfTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9ESUFHU0VMX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9ESUFHU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZUUkVGX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9UQ19NQVNLICgweDYwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkJfTERPXzJfQkJfTERPX1ZUUkVGX1RDX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9UQyh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVlRSRUZfVENfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WVFJFRl9UQ19NQVNLKQorCisvKiEgQG5hbWUgUlhfQURDIC0gUkYgQW5hbG9nIEFEQyBDb250cm9sICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfQlVNUF9NQVNLICAgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0JVTVBfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19CVU1QKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfQlVNUF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19CVU1QX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfRlNfU0VMX01BU0sgICAgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19GU19TRUxfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfRlNfU0VMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0ZTX1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19GU19TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19JX0RJQUdTRUxfTUFTSyAoMHg0MDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0lfRElBR1NFTF9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX0lfRElBR1NFTCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19JX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfSV9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfUV9ESUFHU0VMX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19RX0RJQUdTRUxfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQURDX1JYX0FEQ19RX0RJQUdTRUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfUV9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1FfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1NQQVJFX01BU0sgICAgICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1NQQVJFX1NISUZUICAgICgxMlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FEQ19SWF9BRENfU1BBUkUoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BRENfUlhfQURDX1NQQVJFX01BU0spCisKKy8qISBAbmFtZSBSWF9CQkEgLSBSRiBBbmFsb2cgQkJBIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyAgICAoMHg3VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9DVVJfQlVNUF9NQVNLICAoMHg4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9DVVJfQlVNUF9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQ1VSX0JVTVAoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0NVUl9CVU1QX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0NVUl9CVU1QX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDFfTUFTSyAgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwxX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMMSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDFfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDFfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMMl9NQVNLICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDJfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwyKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMMl9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMMl9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwzX01BU0sgICgweDQwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMM19TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDMoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwzX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUwzX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDRfTUFTSyAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0RJQUdTRUw0X1NISUZUICg3VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9ESUFHU0VMNCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDRfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfRElBR1NFTDRfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9TUEFSRV9NQVNLICAgICAoMHgzRjAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX1NQQVJFX1NISUZUICAgICgxNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfU1BBUkUoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLICAgKDB4NzAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9TSElGVCAgKDI0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX1NQQVJFX01BU0sgICAgKDB4NzAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9TUEFSRV9TSElGVCAgICgyOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX1NQQVJFKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfU1BBUkVfTUFTSykKKworLyohIEBuYW1lIFJYX0xOQSAtIFJGIEFuYWxvZyBMTkEgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0JVTVBfTUFTSyAgICAgICgweEZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0JVTVBfU0hJRlQgICAgICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9CVU1QKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfQlVNUF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9CVU1QX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSEdfRElBR1NFTF9NQVNLICgweDEwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9IR19ESUFHU0VMX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9IR19ESUFHU0VMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSEdfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9IR19ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSElaX0VOQUJMRV9NQVNLICgweDIwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9ISVpfRU5BQkxFX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9ISVpfRU5BQkxFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfSElaX0VOQUJMRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9ISVpfRU5BQkxFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfTEdfRElBR1NFTF9NQVNLICgweDQwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9MR19ESUFHU0VMX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9MR19ESUFHU0VMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfTEdfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9MR19ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfU1BBUkVfTUFTSyAgICAgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX0xOQV9TUEFSRV9TSElGVCAgICAoOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9MTkFfU1BBUkUoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9NSVhFUl9CVU1QX01BU0sgICAgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfQlVNUF9TSElGVCAgICgxNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9NSVhFUl9CVU1QKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfQlVNUF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfTE5BX1JYX01JWEVSX0JVTVBfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfTE5BX1JYX01JWEVSX1NQQVJFX01BU0sgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfU1BBUkVfU0hJRlQgICgyMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9NSVhFUl9TUEFSRSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTUlYRVJfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0xOQV9SWF9NSVhFUl9TUEFSRV9NQVNLKQorCisvKiEgQG5hbWUgUlhfVFpBIC0gUkYgQW5hbG9nIFRaQSBDb250cm9sICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0sgICAgKDB4N1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX1NISUZUICAgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQ1VSX0JVTVBfTUFTSyAgKDB4OFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQ1VSX0JVTVBfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0NVUl9CVU1QKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9DVVJfQlVNUF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9DVVJfQlVNUF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0dBSU5fQlVNUF9NQVNLICgweDEwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9HQUlOX0JVTVBfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0dBSU5fQlVNUCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9HQUlOX0JVTVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfR0FJTl9CVU1QX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfU1BBUkVfTUFTSyAgICAgKDB4M0YwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9TUEFSRV9TSElGVCAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX1NQQVJFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMV9ESUFHU0VMX01BU0sgICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMV9ESUFHU0VMX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkExX0RJQUdTRUwoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMV9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBMV9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEyX0RJQUdTRUxfTUFTSyAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEyX0RJQUdTRUxfU0hJRlQgKDI1VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTJfRElBR1NFTCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEyX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkEyX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTNfRElBR1NFTF9NQVNLICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTNfRElBR1NFTF9TSElGVCAoMjZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBM19ESUFHU0VMKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTNfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQTNfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBNF9ESUFHU0VMX01BU0sgICgweDgwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBNF9ESUFHU0VMX1NISUZUICgyN1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkE0X0RJQUdTRUwoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBNF9ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBNF9ESUFHU0VMX01BU0spCisKKy8qISBAbmFtZSBSWF9BVVhQTEwgLSBSRiBBbmFsb2cgQXV4IFBMTCBDb250cm9sICovCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9CSUFTX1RSSU1fTUFTSyAgICAgKDB4N1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9CSUFTX1RSSU1fU0hJRlQgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfQklBU19UUklNKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQVVYUExMX0JJQVNfVFJJTV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX0JJQVNfVFJJTV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfRElBR1NFTDFfTUFTSyAgICAgICgweDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfRElBR1NFTDFfU0hJRlQgICAgICgzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwxKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwxX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMl9NQVNLICAgICAgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfRElBR1NFTDJfU0hJRlQgICAgICg0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwyKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9ESUFHU0VMMl9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX0RJQUdTRUwyX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9MRl9DTlRMX01BU0sgICAgICAgKDB4RTBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfTEZfQ05UTF9TSElGVCAgICAgICg1VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX0xGX0NOVEwoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9MRl9DTlRMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfTEZfQ05UTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfU1BBUkVfTUFTSyAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9TUEFSRV9TSElGVCAgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfU1BBUkUoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfUlhfQVVYUExMX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZDT19EQUNfUkVGX0FESlVTVF9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVkNPX0RBQ19SRUZfQURKVVNUX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WQ09fREFDX1JFRl9BREpVU1QoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVkNPX0RBQ19SRUZfQURKVVNUX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVkNPX0RBQ19SRUZfQURKVVNUX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WVFVORV9URVNUTU9ERV9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZUVU5FX1RFU1RNT0RFX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WVFVORV9URVNUTU9ERSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfVlRVTkVfVEVTVE1PREVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WVFVORV9URVNUTU9ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9CQUxfQklBU1RfTUFTSyAoMHgzMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9CQUxfQklBU1RfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX0JJQVNUKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9CSUFTVF9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX0JJQVNUX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9TUEFSRV9NQVNLICgweDcwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19SWF9BVVhQTExfUlhUWF9CQUxfU1BBUkVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX1NQQVJFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX0JBTF9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfQkFMX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX1JDQ0FMX0RJQUdTRUxfTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX1JDQ0FMX0RJQUdTRUxfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfUlhfQVVYUExMX1JYVFhfUkNDQUxfRElBR1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX1JDQ0FMX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9SWFRYX1JDQ0FMX0RJQUdTRUxfTUFTSykKKworLyohIEBuYW1lIFNZX0NUUkxfMSAtIFJGIEFuYWxvZyBTeW50aGVzaXplciBDb250cm9sIDEgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0RJVk5fU1BBUkVfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0RJVk5fU1BBUkVfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfRElWTl9TUEFSRSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0RJVk5fU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9ESVZOX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9GQ0FMX1NQQVJFX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9GQ0FMX1NQQVJFX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0ZDQUxfU1BBUkUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9GQ0FMX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfRkNBTF9TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX0ZEQktfTUFTSyAoMHgzMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fRkRCS19TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fRkRCSyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fRkRCS19TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19GREJLX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fUlhfTUFTSyAoMHhDMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fUlhfU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1JYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19SWF9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19SWF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1RYX01BU0sgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0JVTVBfUlRMT19UWF9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19CVU1QX1JUTE9fVFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1RYX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fQlVNUF9SVExPX1RYX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19ESUFHU0VMX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0RJQUdTRUxfU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xPX0RJQUdTRUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fU1BBUkVfTUFTSyAgICgweDcwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fU1BBUkVfU0hJRlQgICgxMlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19TUEFSRSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTE9fU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MT19TUEFSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTFBGX0ZJTFRfQ1RSTF9NQVNLICgweDcwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9GSUxUX0NUUkxfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9GSUxUX0NUUkwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfTFBGX0ZJTFRfQ1RSTF9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9GSUxUX0NUUkxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9TUEFSRV9NQVNLICAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfU1BBUkVfU0hJRlQgKDE5VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9TUEFSRSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfU1BBUkVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfU1BBUkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX0RJQUdTRUxfTUFTSyAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfRElBR1NFTF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfRElBR1NFTCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9QQ0hfVFVORV9NQVNLICgweDYwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9QQ0hfVFVORV9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1RVTkUoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9UVU5FX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1RVTkVfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9TRUxfTUFTSyAoMHg4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1NFTF9TSElGVCAoMjNVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzFfU1lfUERfUENIX1NFTCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1BDSF9TRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9QQ0hfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9TUEFSRV9NQVNLICAgKDB4MzAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9TUEFSRV9TSElGVCAgKDI0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1NQQVJFKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9WVFVORV9PVkVSUklERV9URVNUX01PREVfTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9WVFVORV9PVkVSUklERV9URVNUX01PREVfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX1BEX1ZUVU5FX09WRVJSSURFX1RFU1RfTU9ERSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9WVFVORV9PVkVSUklERV9URVNUX01PREVfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9QRF9WVFVORV9PVkVSUklERV9URVNUX01PREVfTUFTSykKKworLyohIEBuYW1lIFNZX0NUUkxfMiAtIFJGIEFuYWxvZyBTeW50aGVzaXplciBDb250cm9sIDIgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19CSUFTX01BU0sgICAoMHg3VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19CSUFTX1NISUZUICAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fQklBUyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0JJQVNfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fQklBU19NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0RJQUdTRUxfTUFTSyAoMHg4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19ESUFHU0VMX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19ESUFHU0VMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19ESUFHU0VMX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZfTUFTSyAgICAgKDB4NzBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWX1NISUZUICAgICg0VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSyAgICAoMHg3MDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1BLX0RFVF9PTl9NQVNLICgweDEwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1BLX0RFVF9PTl9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1BLX0RFVF9PTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fUEtfREVUX09OX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1BLX0RFVF9PTl9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1NQQVJFX01BU0sgICgweDFDMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19TUEFSRV9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX1NQQVJFKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19TUEFSRV9TSElGVCkpICYgWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19TUEFSRV9NQVNLKQorCisvKiEgQG5hbWUgVFhfREFDX1BBIC0gUkYgQW5hbG9nIFRYIEhQTSBEQUMgYW5kIFBBIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0NBUF9NQVNLICgweDNVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfQ0FQX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0NBUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9DQVBfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9DQVBfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0lEQUNfTUFTSyAoMHgxOFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9JREFDX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0lEQUMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfSURBQ19TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX0lEQUNfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19CVU1QX1JMT0FEX01BU0sgKDB4QzBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfUkxPQURfU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfUkxPQUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0JVTVBfUkxPQURfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfQlVNUF9STE9BRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0RJQUdTRUxfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0RJQUdTRUxfU0hJRlQgKDlVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0RJQUdTRUwoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19ESUFHU0VMX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19JTlZFUlRfQ0xLX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19JTlZFUlRfQ0xLX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfSU5WRVJUX0NMSyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfSU5WRVJUX0NMS19TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX0RBQ19JTlZFUlRfQ0xLX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfT1BBTVBfRElBR1NFTF9NQVNLICgweDgwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfT1BBTVBfRElBR1NFTF9TSElGVCAoMTFVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX09QQU1QX0RJQUdTRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX09QQU1QX0RJQUdTRUxfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfT1BBTVBfRElBR1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX1NQQVJFX01BU0sgICgweEUwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX1NQQVJFX1NISUZUICgxM1UpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9EQUNfU1BBUkUoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfREFDX1NQQVJFX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9CVU1QX1ZCSUFTX01BU0sgKDB4RTAwMDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBU19TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9CVU1QX1ZCSUFTX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBU19NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfRElBR1NFTF9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9ESUFHU0VMX1NISUZUICgyMVUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9ESUFHU0VMKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfRElBR1NFTF9TSElGVCkpICYgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX0RJQUdTRUxfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX1NQQVJFX01BU0sgICAoMHgzODAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX1NQQVJFX1NISUZUICAoMjNVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfU1BBUkUoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfVFhfREFDX1BBX1RYX1BBX1NQQVJFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfU1BBUkVfTUFTSykKKworLyohIEBuYW1lIEJBTFVOX1RYIC0gUkYgQW5hbG9nIEJhbHVuIFRYIE1vZGUgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19CQUxVTl9UWF9SWFRYX0JBTF9UWF9DT0RFX01BU0sgKDB4RkZGRkZGVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfQkFMVU5fVFhfUlhUWF9CQUxfVFhfQ09ERV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JBTFVOX1RYX1JYVFhfQkFMX1RYX0NPREUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19CQUxVTl9UWF9SWFRYX0JBTF9UWF9DT0RFX1NISUZUKSkgJiBYQ1ZSX0FOQUxPR19CQUxVTl9UWF9SWFRYX0JBTF9UWF9DT0RFX01BU0spCisKKy8qISBAbmFtZSBCQUxVTl9SWCAtIFJGIEFuYWxvZyBCYWx1biBSWCBNb2RlIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfQkFMVU5fUlhfUlhUWF9CQUxfUlhfQ09ERV9NQVNLICgweEZGRkZGRlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0JBTFVOX1JYX1JYVFhfQkFMX1JYX0NPREVfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19CQUxVTl9SWF9SWFRYX0JBTF9SWF9DT0RFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfQkFMVU5fUlhfUlhUWF9CQUxfUlhfQ09ERV9TSElGVCkpICYgWENWUl9BTkFMT0dfQkFMVU5fUlhfUlhUWF9CQUxfUlhfQ09ERV9NQVNLKQorCisvKiEgQG5hbWUgREZUX09CU1ZfMSAtIFJGIEFuYWxvZyBERlQgT2JzZXJ2YXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8xX0RGVF9GUkVRX0NPVU5URVJfTUFTSyAoMHg3RkZGRlUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfREZUX0ZSRVFfQ09VTlRFUl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfREZUX0ZSRVFfQ09VTlRFUih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfREZUX0ZSRVFfQ09VTlRFUl9TSElGVCkpICYgWENWUl9BTkFMT0dfREZUX09CU1ZfMV9ERlRfRlJFUV9DT1VOVEVSX01BU0spCisjZGVmaW5lIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzFfQ1RVTkVfTUFYX0RJRkZfTUFTSyAoMHhGRjAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMV9DVFVORV9NQVhfRElGRl9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8xX0NUVU5FX01BWF9ESUZGKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfREZUX09CU1ZfMV9DVFVORV9NQVhfRElGRl9TSElGVCkpICYgWENWUl9BTkFMT0dfREZUX09CU1ZfMV9DVFVORV9NQVhfRElGRl9NQVNLKQorCisvKiEgQG5hbWUgREZUX09CU1ZfMiAtIFJGIEFuYWxvZyBERlQgT2JzZXJ2YXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX01BWF9ESUZGX01BU0sgKDB4MUZGRkZVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX01BWF9ESUZGX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkZfU0hJRlQpKSAmIFhDVlJfQU5BTE9HX0RGVF9PQlNWXzJfU1lOX0JJU1RfTUFYX0RJRkZfTUFTSykKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9DSF9NQVNLICgweDdGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9DSF9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX01BWF9ESUZGX0NIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9DSF9TSElGVCkpICYgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9NQVhfRElGRl9DSF9NQVNLKQorI2RlZmluZSBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX0lHTk9SRV9GQUlMU19NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9JR05PUkVfRkFJTFNfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9JR05PUkVfRkFJTFMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0FOQUxPR19ERlRfT0JTVl8yX1NZTl9CSVNUX0lHTk9SRV9GQUlMU19TSElGVCkpICYgWENWUl9BTkFMT0dfREZUX09CU1ZfMl9TWU5fQklTVF9JR05PUkVfRkFJTFNfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfQU5BTE9HX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9BTkFMT0cgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX0FOQSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWENWUl9BTkFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QzUwMHUpCisvKiogUGVyaXBoZXJhbCBYQ1ZSX0FOQSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9BTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfQU5BTE9HX1R5cGUgKilYQ1ZSX0FOQV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfQU5BTE9HIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9BTkFMT0dfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICB7IFhDVlJfQU5BX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfQU5BTE9HIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBYQ1ZSX0FOQUxPR19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgIHsgWENWUl9BTkEgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfQU5BTE9HX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9DVFJMIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9DVFJMX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFhDVlJfQ1RSTCBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9DVFJMIC0gUmVnaXN0ZXIgTGF5b3V0IFR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgX19JTyB1aW50MzJfdCBYQ1ZSX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgQ09OVFJPTCwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBYQ1ZSX1NUQVRVUzsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgU1RBVFVTLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IEJMRV9BUkJfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBCTEUgQVJCSVRSQVRJT04gQ09OVFJPTCwgb2Zmc2V0OiAweDggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzBbNF07CisgIF9fSU8gdWludDMyX3QgT1ZFUldSSVRFX1ZFUjsgICAgICAgICAgICAgICAgICAgICAvKio8IE9WRVJXUklURSBWRVJTSU9OLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBETUFfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFJBTlNDRUlWRVIgRE1BIENPTlRST0wsIG9mZnNldDogMHgxNCAqLworICBfX0kgIHVpbnQzMl90IERNQV9EQVRBOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUUkFOU0NFSVZFUiBETUEgREFUQSwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgRFRFU1RfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IERJR0lUQUwgVEVTVCBNVVggQ09OVFJPTCwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgUEFDS0VUX1JBTV9DVFJMOyAgICAgICAgICAgICAgICAgICAvKio8IFBBQ0tFVCBSQU0gQ09OVFJPTCwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgRkFEX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEZBRCBDT05UUk9MLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBMUFBTX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTE9XIFBPV0VSIFBSRUFNQkxFIFNFQVJDSCBDT05UUk9MLCBvZmZzZXQ6IDB4MjggKi8KKyAgX19JTyB1aW50MzJfdCBSRl9OT1RfQUxMT1dFRF9DVFJMOyAgICAgICAgICAgICAgIC8qKjwgV0lGSSBDT0VYSVNURU5DRSBDT05UUk9MLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JTyB1aW50MzJfdCBDUkNXX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ1JDL1dISVRFTkVSIENPTlRST0wsIG9mZnNldDogMHgzMCAqLworICBfX0kgIHVpbnQzMl90IENSQ19FQ19NQVNLOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDUkMgRVJST1IgQ09SUkVDVElPTiBNQVNLLCBvZmZzZXQ6IDB4MzQgKi8KKyAgX19JICB1aW50MzJfdCBDUkNfUkVTX09VVDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ1JDIFJFU1VMVCwgb2Zmc2V0OiAweDM4ICovCit9IFhDVlJfQ1RSTF9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX0NUUkwgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX0NUUkxfUmVnaXN0ZXJfTWFza3MgWENWUl9DVFJMIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBYQ1ZSX0NUUkwgLSBUUkFOU0NFSVZFUiBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyAgICAgICAgKDB4RlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfU0hJRlQgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX01BU0sgICAgICgweDcwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19TSElGVCAgICAoNFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkVGX0NMS19GUkVRX01BU0sgICAgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9SRUZfQ0xLX0ZSRVFfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkVGX0NMS19GUkVRKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JFRl9DTEtfRlJFUV9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9SRUZfQ0xLX0ZSRVFfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9TT0NfUkZfT1NDX0NMS19HQVRFX0VOX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9TT0NfUkZfT1NDX0NMS19HQVRFX0VOX1NISUZUICgxMVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfU09DX1JGX09TQ19DTEtfR0FURV9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfU09DX1JGX09TQ19DTEtfR0FURV9FTl9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9TT0NfUkZfT1NDX0NMS19HQVRFX0VOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMX01BU0sgICAgICAgKDB4MzAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMX1NISUZUICAgICAgKDEyVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUwoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMF9JUlFfU0VMX01BU0sgICgweDcwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzBfSVJRX1NFTF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMF9JUlFfU0VMKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzBfSVJRX1NFTF9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzBfSVJRX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMV9JUlFfU0VMX01BU0sgICgweDcwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUxfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzFfSVJRX1NFTCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUxfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUxfTUFTSykKKworLyohIEBuYW1lIFhDVlJfU1RBVFVTIC0gVFJBTlNDRUlWRVIgU1RBVFVTICovCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfTUFTSyAgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX1NISUZUICAgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1BMTF9TRVFfU1RBVEVfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUExMX1NFUV9TVEFURV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19QTExfU0VRX1NUQVRFKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUExMX1NFUV9TVEFURV9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1BMTF9TRVFfU1RBVEVfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JYX01PREVfTUFTSyAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JYX01PREVfU0hJRlQgICAgICAoMTJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUlhfTU9ERSh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JYX01PREVfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SWF9NT0RFX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UWF9NT0RFX01BU0sgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UWF9NT0RFX1NISUZUICAgICAgKDEzVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RYX01PREUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UWF9NT0RFX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFhfTU9ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfQlRMRV9TWVNDTEtfUkVRX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfQlRMRV9TWVNDTEtfUkVRX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19CVExFX1NZU0NMS19SRVEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfQlRMRV9TWVNDTEtfUkVRX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfQlRMRV9TWVNDTEtfUkVRX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SSUZfTExfQUNUSVZFX01BU0sgKDB4MjAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUklGX0xMX0FDVElWRV9TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfUklGX0xMX0FDVElWRSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1JJRl9MTF9BQ1RJVkVfU0hJRlQpKSAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19SSUZfTExfQUNUSVZFX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19YVEFMX1JFQURZX01BU0sgICAgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfWFRBTF9SRUFEWV9TSElGVCAgICgxOFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19YVEFMX1JFQURZKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfWFRBTF9SRUFEWV9TSElGVCkpICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1hUQUxfUkVBRFlfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1NPQ19VU0lOR19SRl9PU0NfQ0xLX01BU0sgKDB4ODAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfU09DX1VTSU5HX1JGX09TQ19DTEtfU0hJRlQgKDE5VSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1NPQ19VU0lOR19SRl9PU0NfQ0xLKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1NPQ19VU0lOR19SRl9PU0NfQ0xLX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfU09DX1VTSU5HX1JGX09TQ19DTEtfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlEwX01BU0sgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlEwX1NISUZUICAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0lSUTAoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlEwX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0lSUTBfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlExX01BU0sgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlExX1NISUZUICAgICAoMjVVKQorI2RlZmluZSBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0lSUTEoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9JUlExX1NISUZUKSkgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0lSUTFfTUFTSykKKworLyohIEBuYW1lIEJMRV9BUkJfQ1RSTCAtIEJMRSBBUkJJVFJBVElPTiBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfQkxFX1JFTElOUVVJU0hfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9DVFJMX0JMRV9BUkJfQ1RSTF9CTEVfUkVMSU5RVUlTSF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfQkxFX1JFTElOUVVJU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX0JMRV9SRUxJTlFVSVNIX1NISUZUKSkgJiBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX0JMRV9SRUxJTlFVSVNIX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfWENWUl9CVVNZX01BU0sgICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfWENWUl9CVVNZX1NISUZUICAgKDFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQkxFX0FSQl9DVFJMX1hDVlJfQlVTWSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0JMRV9BUkJfQ1RSTF9YQ1ZSX0JVU1lfU0hJRlQpKSAmIFhDVlJfQ1RSTF9CTEVfQVJCX0NUUkxfWENWUl9CVVNZX01BU0spCisKKy8qISBAbmFtZSBPVkVSV1JJVEVfVkVSIC0gT1ZFUldSSVRFIFZFUlNJT04gKi8KKyNkZWZpbmUgWENWUl9DVFJMX09WRVJXUklURV9WRVJfT1ZFUldSSVRFX1ZFUl9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9DVFJMX09WRVJXUklURV9WRVJfT1ZFUldSSVRFX1ZFUl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9PVkVSV1JJVEVfVkVSX09WRVJXUklURV9WRVIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfT1ZFUldSSVRFX1ZFUl9PVkVSV1JJVEVfVkVSX1NISUZUKSkgJiBYQ1ZSX0NUUkxfT1ZFUldSSVRFX1ZFUl9PVkVSV1JJVEVfVkVSX01BU0spCisKKy8qISBAbmFtZSBETUFfQ1RSTCAtIFRSQU5TQ0VJVkVSIERNQSBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfUEFHRV9NQVNLICAgICAgICAgKDB4RlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfUEFHRV9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1BBR0UoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9QQUdFX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1BBR0VfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX1NJTkdMRV9SRVFfTU9ERV9NQVNLICAoMHgxMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9TSU5HTEVfUkVRX01PREVfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfU0lOR0xFX1JFUV9NT0RFKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RNQV9DVFJMX1NJTkdMRV9SRVFfTU9ERV9TSElGVCkpICYgWENWUl9DVFJMX0RNQV9DVFJMX1NJTkdMRV9SRVFfTU9ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfQllQQVNTX0RNQV9TWU5DX01BU0sgICgweDIwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0JZUEFTU19ETUFfU1lOQ19TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9CWVBBU1NfRE1BX1NZTkMoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRE1BX0NUUkxfQllQQVNTX0RNQV9TWU5DX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRE1BX0NUUkxfQllQQVNTX0RNQV9TWU5DX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVFJJR0dFUlJFRF9NQVNLICAgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RSSUdHRVJSRURfU0hJRlQgICg2VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9UUklHR0VSUkVEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVFJJR0dFUlJFRF9TSElGVCkpICYgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9UUklHR0VSUkVEX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRURfT1VUX01BU0sgICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9TSElGVCAgICg3VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FRF9PVVQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRURfT1VUX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVPVVRfTUFTSyAgICAgICgweEYwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRU9VVF9TSElGVCAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVPVVQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FT1VUX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVPVVRfTUFTSykKKworLyohIEBuYW1lIERNQV9EQVRBIC0gVFJBTlNDRUlWRVIgRE1BIERBVEEgKi8KKyNkZWZpbmUgWENWUl9DVFJMX0RNQV9EQVRBX0RNQV9EQVRBX01BU0sgICAgICAgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9ETUFfREFUQV9ETUFfREFUQV9TSElGVCAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRE1BX0RBVEFfRE1BX0RBVEEoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RNQV9EQVRBX0RNQV9EQVRBX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRE1BX0RBVEFfRE1BX0RBVEFfTUFTSykKKworLyohIEBuYW1lIERURVNUX0NUUkwgLSBESUdJVEFMIFRFU1QgTVVYIENPTlRST0wgKi8KKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfUEFHRV9NQVNLICAgICAoMHgzRlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1BBR0VfU0hJRlQgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9QQUdFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfUEFHRV9TSElGVCkpICYgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfUEFHRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9FTl9NQVNLICAgICAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fU0hJRlQgICAgICAoN1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX0VOKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9FTl9TSElGVCkpICYgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzBfT1ZMQVlfUElOX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzBfT1ZMQVlfUElOX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzBfT1ZMQVlfUElOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8wX09WTEFZX1BJTl9TSElGVCkpICYgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzBfT1ZMQVlfUElOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8xX09WTEFZX1BJTl9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9HUElPMV9PVkxBWV9QSU5fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzFfT1ZMQVlfUElOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0dQSU8xX09WTEFZX1BJTl9TSElGVCkpICYgWENWUl9DVFJMX0RURVNUX0NUUkxfR1BJTzFfT1ZMQVlfUElOX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1RTTV9HUElPX09WTEFZX01BU0sgKDB4MzAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9UU01fR1BJT19PVkxBWV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9UU01fR1BJT19PVkxBWSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0RURVNUX0NUUkxfVFNNX0dQSU9fT1ZMQVlfU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1RTTV9HUElPX09WTEFZX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1NIRlRfTUFTSyAgICAgKDB4NzAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1NIRlRfU0hJRlQgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfU0hGVCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1NIRlRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX1NIRlRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfUkFXX01PREVfSV9NQVNLICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX0lfU0hJRlQgICAgKDI4VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfUkFXX01PREVfSSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX0lfU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX0lfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfUkFXX01PREVfUV9NQVNLICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX1FfU0hJRlQgICAgKDI5VSkKKyNkZWZpbmUgWENWUl9DVFJMX0RURVNUX0NUUkxfUkFXX01PREVfUSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX1FfU0hJRlQpKSAmIFhDVlJfQ1RSTF9EVEVTVF9DVFJMX1JBV19NT0RFX1FfTUFTSykKKworLyohIEBuYW1lIFBBQ0tFVF9SQU1fQ1RSTCAtIFBBQ0tFVCBSQU0gQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFX01BU0sgICgweEZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUEFHRSh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1BBR0VfU0hJRlQpKSAmIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1BBR0VfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9QQl9QUk9URUNUX01BU0sgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1BCX1BST1RFQ1RfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1BCX1BST1RFQ1QoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9QQl9QUk9URUNUX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1BCX1BST1RFQ1RfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9YQ1ZSX1JBTV9BTExPV19NQVNLICgweDIwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9YQ1ZSX1JBTV9BTExPV19TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfWENWUl9SQU1fQUxMT1coeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1hDVlJfUkFNX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1hDVlJfUkFNX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfQUxMX1BST1RPQ09MU19BTExPV19NQVNLICgweDQwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9BTExfUFJPVE9DT0xTX0FMTE9XX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9BTExfUFJPVE9DT0xTX0FMTE9XKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9BTExfUFJPVE9DT0xTX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0FMTF9QUk9UT0NPTFNfQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfVFJJR0dFUlJFRF9NQVNLICgweDgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfVFJJR0dFUlJFRF9TSElGVCAoN1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1RSSUdHRVJSRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19UUklHR0VSUkVEX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19UUklHR0VSUkVEX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1JBTV9GVUxMX01BU0sgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUkFNX0ZVTExfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19SQU1fRlVMTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1JBTV9GVUxMX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19SQU1fRlVMTF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0xLX09OX09WUkRfRU5fTUFTSyAoMHg0MDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0xLX09OX09WUkRfRU5fU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0xLX09OX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX01BU0sgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX1NISUZUICgxMVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DTEtfT05fT1ZSRF9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0wX0NMS19PTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DTEtfT05fT1ZSRF9FTl9NQVNLICgweDEwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkRfRU5fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NMS19PTl9PVlJEX01BU0sgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DTEtfT05fT1ZSRF9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0xLX09OX09WUkRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DTEtfT05fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9FTl9NQVNLICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9FTl9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DRV9PTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9NQVNLICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMF9DRV9PTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTBfQ0VfT05fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0VfT05fT1ZSRF9FTl9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfRU5fU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX1JBTTFfQ0VfT05fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9SQU0xX0NFX09OX09WUkRfU0hJRlQpKSAmIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfUkFNMV9DRV9PTl9PVlJEX01BU0spCisKKy8qISBAbmFtZSBGQURfQ1RSTCAtIEZBRCBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfRU5fTUFTSyAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9GQURfRU5fU0hJRlQgICAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfRkFEX0VOKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9FTl9TSElGVCkpICYgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9NQVNLICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9TSElGVCAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFgoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9FTl9NQVNLICAgICAgICAgICgweDMwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfRU5fU0hJRlQgICAgICAgICAoNFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0VOKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9FTl9TSElGVCkpICYgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfSFpfTUFTSyAgICAgICAgICAoMHg0MFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0haX1NISUZUICAgICAgICAgKDZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9IWih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfSFpfU0hJRlQpKSAmIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0haX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0NUUkxNT0RFX01BU0sgICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9DVFJMTU9ERV9TSElGVCAgICg3VSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfQ1RSTE1PREUoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX0NUUkxNT0RFX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9DVFJMTU9ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9QT0xfTUFTSyAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9GQURfQ1RSTF9BTlRYX1BPTF9TSElGVCAgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9QT0woeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0ZBRF9DVFJMX0FOVFhfUE9MX1NISUZUKSkgJiBYQ1ZSX0NUUkxfRkFEX0NUUkxfQU5UWF9QT0xfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJT19NQVNLICAgICAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJT19TSElGVCAgICAoMTJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfRkFEX0NUUkxfRkFEX05PVF9HUElPKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJT19TSElGVCkpICYgWENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJT19NQVNLKQorCisvKiEgQG5hbWUgTFBQU19DVFJMIC0gTE9XIFBPV0VSIFBSRUFNQkxFIFNFQVJDSCBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19FTkFCTEVfTUFTSyAgICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19FTkFCTEVfU0hJRlQgICAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRU5BQkxFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0VOQUJMRV9TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0VOQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfVFpBX0FMTE9XX01BU0sgICgweDJVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfVFpBX0FMTE9XX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1RaQV9BTExPVyh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19UWkFfQUxMT1dfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19UWkFfQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0JCQV9BTExPV19NQVNLICAoMHg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0JCQV9BTExPV19TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19CQkFfQUxMT1coeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfQkJBX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfQkJBX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19BRENfQUxMT1dfTUFTSyAgKDB4OFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19BRENfQUxMT1dfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfQURDX0FMTE9XKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0FEQ19BTExPV19TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0FEQ19BTExPV19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRENPQ19BTExPV19NQVNLICgweDEwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfQUxMT1dfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRENPQ19BTExPVyh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfQUxMT1dfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19EQ09DX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19QREVUX0FMTE9XX01BU0sgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUERFVF9BTExPV19TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19QREVUX0FMTE9XKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUERFVF9BTExPV19TSElGVCkpICYgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1BERVRfQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0FMTE9XX01BU0sgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1lfTE9fQUxMT1dfU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1lfTE9fQUxMT1coeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1lfTE9fQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0JVRl9BTExPV19NQVNLICgweDgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NZX0xPX0JVRl9BTExPV19TSElGVCAoN1UpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TWV9MT19CVUZfQUxMT1coeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1lfTE9fQlVGX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1lfTE9fQlVGX0FMTE9XX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19SWF9ESUdfQUxMT1dfTUFTSyAoMHgxMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfUlhfRElHX0FMTE9XX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1JYX0RJR19BTExPVyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19SWF9ESUdfQUxMT1dfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19SWF9ESUdfQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfRElHX0FMTE9XX01BU0sgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfRElHX0FMTE9XX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfRElHX0FMTE9XKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RDT0NfRElHX0FMTE9XX1NISUZUKSkgJiBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfRENPQ19ESUdfQUxMT1dfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX1NUQVJUX1JYX01BU0sgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1RBUlRfUlhfU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TVEFSVF9SWCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfU1RBUlRfUlhfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19TVEFSVF9SWF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfREVTVF9SWF9NQVNLICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RFU1RfUlhfU0hJRlQgICAoMjRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfTFBQU19DVFJMX0xQUFNfREVTVF9SWCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0xQUFNfQ1RSTF9MUFBTX0RFU1RfUlhfU0hJRlQpKSAmIFhDVlJfQ1RSTF9MUFBTX0NUUkxfTFBQU19ERVNUX1JYX01BU0spCisKKy8qISBAbmFtZSBSRl9OT1RfQUxMT1dFRF9DVFJMIC0gV0lGSSBDT0VYSVNURU5DRSBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1RYX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1RYX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fVFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9OT19UWF9TSElGVCkpICYgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fVFhfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fUlhfTUFTSyAoMHgyVSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTk9fUlhfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9OT19SWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX05PX1JYX1NISUZUKSkgJiBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9OT19SWF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9BU1NFUlRFRF9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9BU1NFUlRFRF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX0FTU0VSVEVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfQVNTRVJURURfU0hJRlQpKSAmIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX0FTU0VSVEVEX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1RYX0FCT1JUX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1RYX0FCT1JUX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfVFhfQUJPUlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9UWF9BQk9SVF9TSElGVCkpICYgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfVFhfQUJPUlRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfUlhfQUJPUlRfTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1JYX0FCT1JUX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfUlhfQUJPUlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9SWF9BQk9SVF9TSElGVCkpICYgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfUlhfQUJPUlRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTUFTSyAoMHgyMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9SRl9OT1RfQUxMT1dFRF9DVFJMX1JGX05PVF9BTExPV0VEX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfUkZfTk9UX0FMTE9XRURfQ1RSTF9SRl9OT1RfQUxMT1dFRF9TSElGVCkpICYgWENWUl9DVFJMX1JGX05PVF9BTExPV0VEX0NUUkxfUkZfTk9UX0FMTE9XRURfTUFTSykKKworLyohIEBuYW1lIENSQ1dfQ0ZHIC0gQ1JDL1dISVRFTkVSIENPTlRST0wgKi8KKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ1dfRU5fTUFTSyAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ1dfRU5fU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNXX0VOKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDV19FTl9TSElGVCkpICYgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ1dfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19aRVJPX01BU0sgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19aRVJPX1NISUZUICAgICAgICAoMVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfWkVSTyh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX1pFUk9fU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfWkVST19NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VBUkxZX0ZBSUxfTUFTSyAgICgweDRVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VBUkxZX0ZBSUxfU0hJRlQgICgyVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQVJMWV9GQUlMKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUFSTFlfRkFJTF9TSElGVCkpICYgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQVJMWV9GQUlMX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfUkVTX09VVF9WTERfTUFTSyAgKDB4OFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfUkVTX09VVF9WTERfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX1JFU19PVVRfVkxEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19SRVNfT1VUX1ZMRF9TSElGVCkpICYgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19SRVNfT1VUX1ZMRF9NQVNLKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX09GRlNFVF9NQVNLICAgICgweDdGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX09GRlNFVF9TSElGVCAgICgxNlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfT0ZGU0VUKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX09GRlNFVF9TSElGVCkpICYgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19PRkZTRVRfTUFTSykKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19ET05FX01BU0sgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRE9ORV9TSElGVCAgICAgKDI4VSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19ET05FKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRE9ORV9TSElGVCkpICYgWENWUl9DVFJMX0NSQ1dfQ0ZHX0NSQ19FQ19ET05FX01BU0spCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRkFJTF9NQVNLICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0ZBSUxfU0hJRlQgICAgICgyOVUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRkFJTCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX0NUUkxfQ1JDV19DRkdfQ1JDX0VDX0ZBSUxfU0hJRlQpKSAmIFhDVlJfQ1RSTF9DUkNXX0NGR19DUkNfRUNfRkFJTF9NQVNLKQorCisvKiEgQG5hbWUgQ1JDX0VDX01BU0sgLSBDUkMgRVJST1IgQ09SUkVDVElPTiBNQVNLICovCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNfRUNfTUFTS19DUkNfRUNfTUFTS19NQVNLICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDX0VDX01BU0tfQ1JDX0VDX01BU0tfU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9DVFJMX0NSQ19FQ19NQVNLX0NSQ19FQ19NQVNLKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfQ1RSTF9DUkNfRUNfTUFTS19DUkNfRUNfTUFTS19TSElGVCkpICYgWENWUl9DVFJMX0NSQ19FQ19NQVNLX0NSQ19FQ19NQVNLX01BU0spCisKKy8qISBAbmFtZSBDUkNfUkVTX09VVCAtIENSQyBSRVNVTFQgKi8KKyNkZWZpbmUgWENWUl9DVFJMX0NSQ19SRVNfT1VUX0NSQ19SRVNfT1VUX01BU0sgICAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfQ1RSTF9DUkNfUkVTX09VVF9DUkNfUkVTX09VVF9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX0NUUkxfQ1JDX1JFU19PVVRfQ1JDX1JFU19PVVQoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9DVFJMX0NSQ19SRVNfT1VUX0NSQ19SRVNfT1VUX1NISUZUKSkgJiBYQ1ZSX0NUUkxfQ1JDX1JFU19PVVRfQ1JDX1JFU19PVVRfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfQ1RSTF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfQ1RSTCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFhDVlJfTUlTQyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWENWUl9NSVNDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QzI4MHUpCisvKiogUGVyaXBoZXJhbCBYQ1ZSX01JU0MgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX0NUUkxfVHlwZSAqKVhDVlJfTUlTQ19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfQ1RSTCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfQ1RSTF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX01JU0NfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9DVFJMIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBYQ1ZSX0NUUkxfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgIHsgWENWUl9NSVNDIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX0NUUkxfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX1BIWSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfUEhZX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyIFhDVlJfUEhZIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBYQ1ZSX1BIWSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgUEhZX1BSRV9SRUYwOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFBSRUFNQkxFIFJFRkVSRU5DRSBXQVZFRk9STSAwLCBvZmZzZXQ6IDB4MCAqLworICBfX0lPIHVpbnQzMl90IFBSRV9SRUYxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQUkVBTUJMRSBSRUZFUkVOQ0UgV0FWRUZPUk0gMSwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBQUkVfUkVGMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUFJFQU1CTEUgUkVGRVJFTkNFIFdBVkVGT1JNIDIsIG9mZnNldDogMHg4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzIwXTsKKyAgX19JTyB1aW50MzJfdCBDRkcxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEhZIENPTkZJR1VSQVRJT04gUkVHSVNURVIgMSwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgQ0ZHMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBIWSBDT05GSUdVUkFUSU9OIFJFR0lTVEVSIDIsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IEVMX0NGRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSFkgRUFSTFkvTEFURSBDT05GSUdVUkFUSU9OIFJFR0lTVEVSLCBvZmZzZXQ6IDB4MjggKi8KKyAgX19JTyB1aW50MzJfdCBOVFdfQURSX0JTTTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEhZIE5FVFdPUksgQUREUkVTUyBGT1IgQlNNLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JICB1aW50MzJfdCBTVEFUVVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEhZIFNUQVRVUyBSRUdJU1RFUiwgb2Zmc2V0OiAweDMwICovCit9IFhDVlJfUEhZX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfUEhZIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9QSFlfUmVnaXN0ZXJfTWFza3MgWENWUl9QSFkgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIFBIWV9QUkVfUkVGMCAtIFBSRUFNQkxFIFJFRkVSRU5DRSBXQVZFRk9STSAwICovCisjZGVmaW5lIFhDVlJfUEhZX1BIWV9QUkVfUkVGMF9GU0tfUFJFQU1CTEVfUkVGMF9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9QSFlfUEhZX1BSRV9SRUYwX0ZTS19QUkVBTUJMRV9SRUYwX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QSFlfUEhZX1BSRV9SRUYwX0ZTS19QUkVBTUJMRV9SRUYwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfUEhZX1BSRV9SRUYwX0ZTS19QUkVBTUJMRV9SRUYwX1NISUZUKSkgJiBYQ1ZSX1BIWV9QSFlfUFJFX1JFRjBfRlNLX1BSRUFNQkxFX1JFRjBfTUFTSykKKworLyohIEBuYW1lIFBSRV9SRUYxIC0gUFJFQU1CTEUgUkVGRVJFTkNFIFdBVkVGT1JNIDEgKi8KKyNkZWZpbmUgWENWUl9QSFlfUFJFX1JFRjFfRlNLX1BSRUFNQkxFX1JFRjFfTUFTSyAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUEhZX1BSRV9SRUYxX0ZTS19QUkVBTUJMRV9SRUYxX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QSFlfUFJFX1JFRjFfRlNLX1BSRUFNQkxFX1JFRjEoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX1BSRV9SRUYxX0ZTS19QUkVBTUJMRV9SRUYxX1NISUZUKSkgJiBYQ1ZSX1BIWV9QUkVfUkVGMV9GU0tfUFJFQU1CTEVfUkVGMV9NQVNLKQorCisvKiEgQG5hbWUgUFJFX1JFRjIgLSBQUkVBTUJMRSBSRUZFUkVOQ0UgV0FWRUZPUk0gMiAqLworI2RlZmluZSBYQ1ZSX1BIWV9QUkVfUkVGMl9GU0tfUFJFQU1CTEVfUkVGMl9NQVNLICgweEZGRkZVKQorI2RlZmluZSBYQ1ZSX1BIWV9QUkVfUkVGMl9GU0tfUFJFQU1CTEVfUkVGMl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX1BSRV9SRUYyX0ZTS19QUkVBTUJMRV9SRUYyKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9QUkVfUkVGMl9GU0tfUFJFQU1CTEVfUkVGMl9TSElGVCkpICYgWENWUl9QSFlfUFJFX1JFRjJfRlNLX1BSRUFNQkxFX1JFRjJfTUFTSykKKworLyohIEBuYW1lIENGRzEgLSBQSFkgQ09ORklHVVJBVElPTiBSRUdJU1RFUiAxICovCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQUFfUExBWUJBQ0tfTUFTSyAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQUFfUExBWUJBQ0tfU0hJRlQgICAgICAgICAgKDFVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDS19TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9BQV9QTEFZQkFDS19NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUxfTUFTSyAgICAgICAgICgweDRVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0FBX09VVFBVVF9TRUxfU0hJRlQgICAgICAgICgyVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9BQV9PVVRQVVRfU0VMKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTF9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9BQV9PVVRQVVRfU0VMX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlRfTUFTSyAgICAgICAgKDB4OFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfRlNLX0JJVF9JTlZFUlRfU0hJRlQgICAgICAgKDNVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVF9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAwX01BU0sgICAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9SRlUwMF9TSElGVCAgICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfUkZVMDAoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX1JGVTAwX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX1JGVTAwX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRV9NQVNLICAgICAgICAgICAgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEVfU0hJRlQgICAgICAgICAgICg1VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRV9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMV9CU01fRU5fQkxFX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREVfTUFTSyAgICAgICAgKDB4QzBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFX1NISUZUICAgICAgICg2VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREVfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfREVNT0RfQ0xLX01PREVfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIX01BU0sgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9DVFNfVEhSRVNIX1NISUZUICAgICAgICAgICAoOFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0hfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVF9NQVNLICAgICAgICgweDcwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUX1NISUZUICAgICAgKDIwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfRlNLX0ZUU19USU1FT1VUX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAxX01BU0sgICAgICAgICAgICAgICAgICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcxX1JGVTAxX1NISUZUICAgICAgICAgICAgICAgICgyNFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfUkZVMDEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcxX1JGVTAxX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX1JGVTAxX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfUkZVMDJfTUFTSyAgICAgICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfUkZVMDJfU0hJRlQgICAgICAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9SRlUwMih4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfUkZVMDJfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzFfUkZVMDJfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9CTEVfTlRXX0FEUl9USFJfTUFTSyAgICAgICAoMHg3MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzFfQkxFX05UV19BRFJfVEhSX1NISUZUICAgICAgKDI4VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMV9CTEVfTlRXX0FEUl9USFIoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzFfQkxFX05UV19BRFJfVEhSX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcxX0JMRV9OVFdfQURSX1RIUl9NQVNLKQorCisvKiEgQG5hbWUgQ0ZHMiAtIFBIWSBDT05GSUdVUkFUSU9OIFJFR0lTVEVSIDIgKi8KKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEdfTUFTSyAgICAgICAoMHhGVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEdfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIR19TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEdfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwM19NQVNLICAgICAgICAgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDNfU0hJRlQgICAgICAgICAgICAgICAgKDRVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTAzKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUwM19TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUwM19NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA0X01BU0sgICAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNF9TSElGVCAgICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDQoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTA0X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTA0X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDVfTUFTSyAgICAgICAgICAgICAgICAgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA1X1NISUZUICAgICAgICAgICAgICAgICg2VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMDVfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMDVfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNl9NQVNLICAgICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDZfU0hJRlQgICAgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTA2KHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUwNl9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUwNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU5fTUFTSyAgICAgICAgICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTl9TSElGVCAgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU5fTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwN19NQVNLICAgICAgICAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDdfU0hJRlQgICAgICAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwNyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMDdfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMDdfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwOF9NQVNLICAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDhfU0hJRlQgICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwOCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMDhfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMDhfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwOV9NQVNLICAgICAgICAgICAgICAgICAoMHg0MDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMDlfU0hJRlQgICAgICAgICAgICAgICAgKDE4VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUwOSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMDlfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMDlfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMF9NQVNLICAgICAgICAgICAgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTBfU0hJRlQgICAgICAgICAgICAgICAgKDE5VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMCh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMTBfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMTBfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMV9NQVNLICAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTExX1NISUZUICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTEoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTExX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTExX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTJfTUFTSyAgICAgICAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMl9TSElGVCAgICAgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTEyKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUxMl9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUxMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTEzX01BU0sgICAgICAgICAgICAgICAgICgweDQwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTNfU0hJRlQgICAgICAgICAgICAgICAgKDIyVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxMyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMTNfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMTNfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxNF9NQVNLICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTE0X1NISUZUICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTQoeCkgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9DRkcyX1JGVTE0X1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1JGVTE0X01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTVfTUFTSyAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0NGRzJfUkZVMTVfU0hJRlQgICAgICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxNSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0NGRzJfUkZVMTVfU0hJRlQpKSAmIFhDVlJfUEhZX0NGRzJfUkZVMTVfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxNl9NQVNLICAgICAgICAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9SRlUxNl9TSElGVCAgICAgICAgICAgICAgICAoMjVVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1JGVTE2KHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9SRlUxNl9TSElGVCkpICYgWENWUl9QSFlfQ0ZHMl9SRlUxNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1BIWV9DTEtfT05fTUFTSyAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QSFlfQ0ZHMl9QSFlfQ0xLX09OX1NISUZUICAgICAgICAgICAoMzFVKQorI2RlZmluZSBYQ1ZSX1BIWV9DRkcyX1BIWV9DTEtfT04oeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfQ0ZHMl9QSFlfQ0xLX09OX1NISUZUKSkgJiBYQ1ZSX1BIWV9DRkcyX1BIWV9DTEtfT05fTUFTSykKKworLyohIEBuYW1lIEVMX0NGRyAtIFBIWSBFQVJMWS9MQVRFIENPTkZJR1VSQVRJT04gUkVHSVNURVIgKi8KKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRV9NQVNLICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRV9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9FTkFCTEUoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFX1NISUZUKSkgJiBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEVfTUFTSyAgICAgICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEVfU0hJRlQgICAgICAgKDFVKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRV9TSElGVCkpICYgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfV0lOX1NJWkVfTUFTSyAgICAgICgweDRVKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfV0lOX1NJWkVfU0hJRlQgICAgICgyVSkKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9XSU5fU0laRV9TSElGVCkpICYgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRV9NQVNLICAgICAgICAgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX1dJTl9TSVpFX1NISUZUICAgICAgICAoOFUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRSh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkVfU0hJRlQpKSAmIFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9FTF9DRkdfRUxfSU5URVJWQUxfTUFTSyAgICAgICAgICgweDNGMDAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTF9TSElGVCAgICAgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9QSFlfRUxfQ0ZHX0VMX0lOVEVSVkFMKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTF9TSElGVCkpICYgWENWUl9QSFlfRUxfQ0ZHX0VMX0lOVEVSVkFMX01BU0spCisKKy8qISBAbmFtZSBOVFdfQURSX0JTTSAtIFBIWSBORVRXT1JLIEFERFJFU1MgRk9SIEJTTSAqLworI2RlZmluZSBYQ1ZSX1BIWV9OVFdfQURSX0JTTV9OVFdfQURSX0JTTV9NQVNLICAgICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9QSFlfTlRXX0FEUl9CU01fTlRXX0FEUl9CU01fU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX05UV19BRFJfQlNNX05UV19BRFJfQlNNKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9OVFdfQURSX0JTTV9OVFdfQURSX0JTTV9TSElGVCkpICYgWENWUl9QSFlfTlRXX0FEUl9CU01fTlRXX0FEUl9CU01fTUFTSykKKworLyohIEBuYW1lIFNUQVRVUyAtIFBIWSBTVEFUVVMgUkVHSVNURVIgKi8KKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX1BSRUFNQkxFX0ZPVU5EX01BU0sgICAgICAoMHgxVSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX1BSRUFNQkxFX0ZPVU5EX1NISUZUICAgICAoMFUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19QUkVBTUJMRV9GT1VORCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9TVEFUVVNfUFJFQU1CTEVfRk9VTkRfU0hJRlQpKSAmIFhDVlJfUEhZX1NUQVRVU19QUkVBTUJMRV9GT1VORF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfQUFfU0ZEX01BVENIRURfTUFTSyAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfQUFfU0ZEX01BVENIRURfU0hJRlQgICAgICgxVSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0FBX1NGRF9NQVRDSEVEKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX1NUQVRVU19BQV9TRkRfTUFUQ0hFRF9TSElGVCkpICYgWENWUl9QSFlfU1RBVFVTX0FBX1NGRF9NQVRDSEVEX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19BQV9NQVRDSEVEX01BU0sgICAgICAgICAgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfQUFfTUFUQ0hFRF9TSElGVCAgICAgICAgICg0VSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0FBX01BVENIRUQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX1NUQVRVU19BQV9NQVRDSEVEX1NISUZUKSkgJiBYQ1ZSX1BIWV9TVEFUVVNfQUFfTUFUQ0hFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfSEFNTUlOR19ESVNUQU5DRV9NQVNLICAgICgweDcwMFUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19IQU1NSU5HX0RJU1RBTkNFX1NISUZUICAgKDhVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfSEFNTUlOR19ESVNUQU5DRSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QSFlfU1RBVFVTX0hBTU1JTkdfRElTVEFOQ0VfU0hJRlQpKSAmIFhDVlJfUEhZX1NUQVRVU19IQU1NSU5HX0RJU1RBTkNFX01BU0spCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19EQVRBX0ZJRk9fREVQVEhfTUFTSyAgICAgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19EQVRBX0ZJRk9fREVQVEhfU0hJRlQgICAgKDEyVSkKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0RBVEFfRklGT19ERVBUSCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUEhZX1NUQVRVU19EQVRBX0ZJRk9fREVQVEhfU0hJRlQpKSAmIFhDVlJfUEhZX1NUQVRVU19EQVRBX0ZJRk9fREVQVEhfTUFTSykKKyNkZWZpbmUgWENWUl9QSFlfU1RBVFVTX0NGT19FU1RJTUFURV9NQVNLICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BIWV9TVEFUVVNfQ0ZPX0VTVElNQVRFX1NISUZUICAgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfUEhZX1NUQVRVU19DRk9fRVNUSU1BVEUoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BIWV9TVEFUVVNfQ0ZPX0VTVElNQVRFX1NISUZUKSkgJiBYQ1ZSX1BIWV9TVEFUVVNfQ0ZPX0VTVElNQVRFX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1BIWV9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFhDVlJfUEhZIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9QSFkgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfUEhZX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUM0MDB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9QSFkgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFhDVlJfUEhZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ1ZSX1BIWV9UeXBlICopWENWUl9QSFlfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1BIWSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFhDVlJfUEhZX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1BIWV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1BIWSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9QSFlfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICB7IFhDVlJfUEhZIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1BIWV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfUEtUX1JBTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfUEtUX1JBTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX1BLVF9SQU0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfUEtUX1JBTSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDE2X3QgUEFDS0VUX1JBTV8wWzU0NF07ICAgICAgICAgICAgICAgICAvKio8IFNoYXJlZCBQYWNrZXQgUkFNIGZvciBtdWx0aXBsZSBMaW5rIExheWVyIHVzYWdlLiwgYXJyYXkgb2Zmc2V0OiAweDAsIGFycmF5IHN0ZXA6IDB4MiAqLworICBfX0lPIHVpbnQxNl90IFBBQ0tFVF9SQU1fMVs1NDRdOyAgICAgICAgICAgICAgICAgLyoqPCBTaGFyZWQgUGFja2V0IFJBTSBmb3IgbXVsdGlwbGUgTGluayBMYXllciB1c2FnZS4sIGFycmF5IG9mZnNldDogMHg0NDAsIGFycmF5IHN0ZXA6IDB4MiAqLworfSBYQ1ZSX1BLVF9SQU1fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9QS1RfUkFNIFJlZ2lzdGVyIE1hc2tzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgWENWUl9QS1RfUkFNX1JlZ2lzdGVyX01hc2tzIFhDVlJfUEtUX1JBTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUEFDS0VUX1JBTV8wIC0gU2hhcmVkIFBhY2tldCBSQU0gZm9yIG11bHRpcGxlIExpbmsgTGF5ZXIgdXNhZ2UuICovCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzBfTFNCWVRFX01BU0sgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX0xTQllURV9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9MU0JZVEUoeCkgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzBfTFNCWVRFX1NISUZUKSkgJiBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX0xTQllURV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX01TQllURV9NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX01TQllURV9TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMF9NU0JZVEUoeCkgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzBfTVNCWVRFX1NISUZUKSkgJiBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX01TQllURV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMCAqLworI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8wX0NPVU5UICAgICAgICAgICg1NDRVKQorCisvKiEgQG5hbWUgUEFDS0VUX1JBTV8xIC0gU2hhcmVkIFBhY2tldCBSQU0gZm9yIG11bHRpcGxlIExpbmsgTGF5ZXIgdXNhZ2UuICovCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzFfTFNCWVRFX01BU0sgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX0xTQllURV9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9MU0JZVEUoeCkgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzFfTFNCWVRFX1NISUZUKSkgJiBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX0xTQllURV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX01TQllURV9NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX01TQllURV9TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMV9NU0JZVEUoeCkgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IFhDVlJfUEtUX1JBTV9QQUNLRVRfUkFNXzFfTVNCWVRFX1NISUZUKSkgJiBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX01TQllURV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgWENWUl9QS1RfUkFNX1BBQ0tFVF9SQU1fMSAqLworI2RlZmluZSBYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV8xX0NPVU5UICAgICAgICAgICg1NDRVKQorCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9QS1RfUkFNX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9QS1RfUkFNIC0gUGVyaXBoZXJhbCBpbnN0YW5jZSBiYXNlIGFkZHJlc3NlcyAqLworLyoqIFBlcmlwaGVyYWwgWENWUl9QS1RfUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBYQ1ZSX1BLVF9SQU1fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICgweDQwMDVDNzAwdSkKKy8qKiBQZXJpcGhlcmFsIFhDVlJfUEtUX1JBTSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9QS1RfUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfUEtUX1JBTV9UeXBlICopWENWUl9QS1RfUkFNX0JBU0UpCisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9QS1RfUkFNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9QS1RfUkFNX0JBU0VfQUREUlMgICAgICAgICAgICAgICAgICB7IFhDVlJfUEtUX1JBTV9CQVNFIH0KKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1BLVF9SQU0gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXJzICovCisjZGVmaW5lIFhDVlJfUEtUX1JBTV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgeyBYQ1ZSX1BLVF9SQU0gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfUEtUX1JBTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFhDVlJfUExMX0RJRyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfUExMX0RJR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX1BMTF9ESUcgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAqIEB7CisgKi8KKworLyoqIFhDVlJfUExMX0RJRyAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgSFBNX0JVTVA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBIUE0gQW5hbG9nIEJ1bXAgQ29udHJvbCwgb2Zmc2V0OiAweDAgKi8KKyAgX19JTyB1aW50MzJfdCBNT0RfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIE1vZHVsYXRpb24gQ29udHJvbCwgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBDSEFOX01BUDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIENoYW5uZWwgTWFwcGluZywgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBMT0NLX0RFVEVDVDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIExvY2sgRGV0ZWN0IENvbnRyb2wsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgSFBNX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBIaWdoIFBvcnQgTW9kdWxhdG9yIENvbnRyb2wsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IEhQTUNBTF9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgSGlnaCBQb3J0IENhbGlicmF0aW9uIENvbnRyb2wsIG9mZnNldDogMHgxNCAqLworICBfX0lPIHVpbnQzMl90IEhQTV9DQUwxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgSGlnaCBQb3J0IENhbGlicmF0aW9uIFJlc3VsdCAxLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBIUE1fQ0FMMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIEhpZ2ggUG9ydCBDYWxpYnJhdGlvbiBSZXN1bHQgMiwgb2Zmc2V0OiAweDFDICovCisgIF9fSU8gdWludDMyX3QgSFBNX1NETV9SRVM7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBIaWdoIFBvcnQgU2lnbWEgRGVsdGEgUmVzdWx0cywgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgTFBNX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBMb3cgUG9ydCBNb2R1bGF0b3IgQ29udHJvbCwgb2Zmc2V0OiAweDI0ICovCisgIF9fSU8gdWludDMyX3QgTFBNX1NETV9DVFJMMTsgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBDb250cm9sIDEsIG9mZnNldDogMHgyOCAqLworICBfX0lPIHVpbnQzMl90IExQTV9TRE1fQ1RSTDI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgQ29udHJvbCAyLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JTyB1aW50MzJfdCBMUE1fU0RNX0NUUkwzOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIExvdyBQb3J0IFNpZ21hIERlbHRhIENvbnRyb2wgMywgb2Zmc2V0OiAweDMwICovCisgIF9fSSAgdWludDMyX3QgTFBNX1NETV9SRVMxOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBSZXN1bHQgMSwgb2Zmc2V0OiAweDM0ICovCisgIF9fSSAgdWludDMyX3QgTFBNX1NETV9SRVMyOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBSZXN1bHQgMiwgb2Zmc2V0OiAweDM4ICovCisgIF9fSU8gdWludDMyX3QgREVMQVlfTUFUQ0g7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBEZWxheSBNYXRjaGluZywgb2Zmc2V0OiAweDNDICovCisgIF9fSU8gdWludDMyX3QgQ1RVTkVfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBMTCBDb2Fyc2UgVHVuZSBDb250cm9sLCBvZmZzZXQ6IDB4NDAgKi8KKyAgX19JICB1aW50MzJfdCBDVFVORV9DTlQ2OyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUExMIENvYXJzZSBUdW5lIENvdW50IDYsIG9mZnNldDogMHg0NCAqLworICBfX0kgIHVpbnQzMl90IENUVU5FX0NOVDVfNDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgQ29hcnNlIFR1bmUgQ291bnRzIDUgYW5kIDQsIG9mZnNldDogMHg0OCAqLworICBfX0kgIHVpbnQzMl90IENUVU5FX0NOVDNfMjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgQ29hcnNlIFR1bmUgQ291bnRzIDMgYW5kIDIsIG9mZnNldDogMHg0QyAqLworICBfX0kgIHVpbnQzMl90IENUVU5FX0NOVDFfMDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgQ29hcnNlIFR1bmUgQ291bnRzIDEgYW5kIDAsIG9mZnNldDogMHg1MCAqLworICBfX0kgIHVpbnQzMl90IENUVU5FX1JFUzsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQTEwgQ29hcnNlIFR1bmUgUmVzdWx0cywgb2Zmc2V0OiAweDU0ICovCit9IFhDVlJfUExMX0RJR19UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX1BMTF9ESUcgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1BMTF9ESUdfUmVnaXN0ZXJfTWFza3MgWENWUl9QTExfRElHIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBIUE1fQlVNUCAtIFBMTCBIUE0gQW5hbG9nIEJ1bXAgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9UWF9NQVNLICAgICgweDdVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9UWF9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fVFgoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fVkNNX1RYX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9UWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9DQUxfTUFTSyAgICgweDcwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9WQ01fQ0FMX1NISUZUICAoNFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fVkNNX0NBTCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9DQUxfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fVkNNX0NBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfVFhfTUFTSyAoMHgzMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfVFhfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfVFgoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX1RYX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfVFhfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX0NBTF9NQVNLICgweDMwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfQ0FMX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fRkRCX1JFU19DQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfQ0FMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX0ZEQl9SRVNfQ0FMX01BU0spCisKKy8qISBAbmFtZSBNT0RfQ1RSTCAtIFBMTCBNb2R1bGF0aW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX01PRFVMQVRJT05fV09SRF9NQU5VQUxfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX01PRFVMQVRJT05fV09SRF9NQU5VQUxfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EVUxBVElPTl9XT1JEX01BTlVBTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RVTEFUSU9OX1dPUkRfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EVUxBVElPTl9XT1JEX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EX0RJU0FCTEVfTUFTSyAgICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EX0RJU0FCTEVfU0hJRlQgICgxNVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RfRElTQUJMRSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfTU9EX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RfRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9NQU5VQUxfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9NQU5VQUxfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfTUFOVUFMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX01BTlVBTF9TSElGVCkpICYgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fTU9EX0RJU0FCTEVfTUFTSyAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfRElTQUJMRV9TSElGVCAoMjdVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9ESVNBQkxFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfRElTQUJMRV9TSElGVCkpICYgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9NT0RfRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfTUFOVUFMX01BU0sgKDB4MzAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfTUFOVUFMX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fU0RNX09VVF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fU0RNX09VVF9ESVNBQkxFX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfRElTQUJMRV9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfRElTQUJMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fU0RNX09VVF9ESVNBQkxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX1NETV9PVVRfRElTQUJMRV9NQVNLKQorCisvKiEgQG5hbWUgQ0hBTl9NQVAgLSBQTEwgQ2hhbm5lbCBNYXBwaW5nICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTV9NQVNLICAgKDB4N0ZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQ0hBTk5FTF9OVU1fU0hJRlQgICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NIQU5fTUFQX0NIQU5ORUxfTlVNKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTV9TSElGVCkpICYgWENWUl9QTExfRElHX0NIQU5fTUFQX0NIQU5ORUxfTlVNX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9CT0NfTUFTSyAgICAgICAgICAgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NIQU5fTUFQX0JPQ19TSElGVCAgICAgICAgICAoOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9CT0MoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9CTVJfTUFTSyAgICAgICAgICAgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NIQU5fTUFQX0JNUl9TSElGVCAgICAgICAgICAoOVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9CTVIoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk1SX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk1SX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfTUFTSyAgICAgICAgICAgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQ19TSElGVCAgICAgICAgICAoMTBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfWk9DKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQ19TSElGVCkpICYgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQ19NQVNLKQorCisvKiEgQG5hbWUgTE9DS19ERVRFQ1QgLSBQTEwgTG9jayBEZXRlY3QgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RfRkFJTF9NQVNLICAgICgweDFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RfRkFJTF9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUX0ZBSUwoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVF9GQUlMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RfRkFJTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RGRl9NQVNLICAgICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RGRl9TSElGVCAgICAgICgxVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NURkYoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVEZGX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RGRl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NfRkFJTF9NQVNLICAgICgweDRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NfRkFJTF9TSElGVCAgICgyVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTX0ZBSUwoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DU19GQUlMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NfRkFJTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NGRl9NQVNLICAgICAgICgweDhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NGRl9TSElGVCAgICAgICgzVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NTRkYoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DU0ZGX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1NGRl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRfRkFJTF9NQVNLICAgICgweDEwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUX0ZBSUxfU0hJRlQgICAoNFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVF9GQUlMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRfRkFJTF9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUX0ZBSUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURkZfTUFTSyAgICAgICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZGX1NISUZUICAgICAgKDVVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGRih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURkZfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZGX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9UQUZGX01BU0sgICAgICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfVEFGRl9TSElGVCAgICAgICg3VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX1RBRkYoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9UQUZGX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfVEFGRl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RVTkVfTERGX0xFVl9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9DVFVORV9MREZfTEVWX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUVU5FX0xERl9MRVYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RVTkVfTERGX0xFVl9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0NUVU5FX0xERl9MRVZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9SWF9USFJTSF9NQVNLICgweDNGMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9SWF9USFJTSF9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGX1JYX1RIUlNIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9SWF9USFJTSF9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9SWF9USFJTSF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRXX1JYX01BU0sgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19SWF9TSElGVCAgICAoMTlVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRXX1JYKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19SWF9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19SWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRGX1RYX1RIUlNIX01BU0sgKDB4M0YwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfVFhfVEhSU0hfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9UWF9USFJTSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfVFhfVEhSU0hfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GVEZfVFhfVEhSU0hfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19UWF9NQVNLICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19UWF9TSElGVCAgICAoMjdVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlRXX1RYKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19UWF9TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19UWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9HT19NQVNLICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfR09fU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfR08oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfRlJFUV9DT1VOVF9HT19TSElGVCkpICYgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfR09fTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfRklOSVNIRURfTUFTSyAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0ZJTklTSEVEX1NISUZUICgyOVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0ZJTklTSEVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfRklOSVNIRURfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0ZJTklTSEVEX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX1RJTUVfTUFTSyAoMHhDMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX1RJTUVfU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfVElNRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX1RJTUVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX1RJTUVfTUFTSykKKworLyohIEBuYW1lIEhQTV9DVFJMIC0gUExMIEhpZ2ggUG9ydCBNb2R1bGF0b3IgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9NQU5VQUxfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9NQU5VQUxfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9NQU5VQUxfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBGRl9NQVNLICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBGRl9TSElGVCAgICAgICAgICgxM1UpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUEZGKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBGRl9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQRkZfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fT1VUX0lOVkVSVF9NQVNLICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9PVVRfSU5WRVJUX1NISUZUICgxNFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX09VVF9JTlZFUlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9PVVRfSU5WRVJUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9PVVRfSU5WRVJUX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX0lOX0RJU0FCTEVfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fRElTQUJMRV9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX1NETV9JTl9ESVNBQkxFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fRElTQUJMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0xGU1JfU0laRV9NQVNLICgweDcwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9MRlNSX1NJWkVfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9MRlNSX1NJWkUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fTEZTUl9TSVpFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0xGU1JfU0laRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9TQ0xfTUFTSyAgICgweDEwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX1NDTF9TSElGVCAgKDIwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfU0NMKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX1NDTF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfU0NMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX0VOX01BU0sgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfRU5fU0hJRlQgICAoMjNVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9FTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9EVEhfRU5fU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fSU5URUdFUl9TQ0FMRV9NQVNLICgweDMwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfU0NBTEVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX1NDQUxFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX1NDQUxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfU0NBTEVfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9JTlRFR0VSX0lOVkVSVF9NQVNLICgweDgwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfSU5WRVJUX1NISUZUICgyN1UpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fSU5URUdFUl9JTlZFUlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfSU5WRVJUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfSU5WRVJUX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fQ0FMX0lOVkVSVF9NQVNLICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9DQUxfSU5WRVJUX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fQ0FMX0lOVkVSVCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0NBTF9JTlZFUlRfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fQ0FMX0lOVkVSVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX01PRF9JTl9JTlZFUlRfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fTU9EX0lOX0lOVkVSVF9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX01PRF9JTl9JTlZFUlQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX01PRF9JTl9JTlZFUlRfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fTU9EX0lOX0lOVkVSVF9NQVNLKQorCisvKiEgQG5hbWUgSFBNQ0FMX0NUUkwgLSBQTEwgSGlnaCBQb3J0IENhbGlicmF0aW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfRkFDVE9SX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfRkFDVE9SX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX05PVF9CVU1QRURfTUFTSyAoMHgyMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfTk9UX0JVTVBFRF9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9OT1RfQlVNUEVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfTk9UX0JVTVBFRF9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfTk9UX0JVTVBFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9DT1VOVF9TQ0FMRV9NQVNLICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9DT1VOVF9TQ0FMRV9TSElGVCAoMTRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9DT1VOVF9TQ0FMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0NPVU5UX1NDQUxFX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9DT1VOVF9TQ0FMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBfQ0FMX0RJU0FCTEVfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQX0NBTF9ESVNBQkxFX1NISUZUICgxNVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUF9DQUxfRElTQUJMRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUF9DQUxfRElTQUJMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQX0NBTF9ESVNBQkxFX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQU5VQUxfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQU5VQUxfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfRkFDVE9SX01BTlVBTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQU5VQUxfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0ZBQ1RPUl9NQU5VQUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQVJSQVlfU0laRV9NQVNLICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQVJSQVlfU0laRV9TSElGVCAoMzBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9BUlJBWV9TSVpFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQVJSQVlfU0laRV9TSElGVCkpICYgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfQVJSQVlfU0laRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9USU1FX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9USU1FX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX1RJTUUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9USU1FX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNQ0FMX0NUUkxfSFBNX0NBTF9USU1FX01BU0spCisKKy8qISBAbmFtZSBIUE1fQ0FMMSAtIFBMTCBIaWdoIFBvcnQgQ2FsaWJyYXRpb24gUmVzdWx0IDEgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0hQTV9DT1VOVF8xX01BU0sgICAoMHg3RkZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9IUE1fQ09VTlRfMV9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfSFBNX0NPVU5UXzEoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwxX0hQTV9DT1VOVF8xX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfSFBNX0NPVU5UXzFfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX1dUX01BU0sgICAgICAgICAoMHg3MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfV1RfU0hJRlQgICAgICAgICgyMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19XVCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfV1RfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19XVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRldfTUFTSyAgICAgICAgICgweDcwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRldfU0hJRlQgICAgICAgICgyNFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19GVyh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRldfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19GV19NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRkNOVF9NQVNLICAgICAgICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZDTlRfU0hJRlQgICAgICAoMjhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDFfQ1NfRkNOVCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwxX0NTX0ZDTlRfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ0FMMV9DU19GQ05UX01BU0spCisKKy8qISBAbmFtZSBIUE1fQ0FMMiAtIFBMTCBIaWdoIFBvcnQgQ2FsaWJyYXRpb24gUmVzdWx0IDIgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0hQTV9DT1VOVF8yX01BU0sgICAoMHg3RkZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMl9IUE1fQ09VTlRfMl9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfSFBNX0NPVU5UXzIoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwyX0hQTV9DT1VOVF8yX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfSFBNX0NPVU5UXzJfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX1JDX01BU0sgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfUkNfU0hJRlQgICAgICAgICgyMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fQ0FMMl9DU19SQyh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfUkNfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19IUE1fQ0FMMl9DU19SQ19NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfRlRfTUFTSyAgICAgICAgICgweDFGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX0ZUX1NISUZUICAgICAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfRlQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0hQTV9DQUwyX0NTX0ZUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX0NBTDJfQ1NfRlRfTUFTSykKKworLyohIEBuYW1lIEhQTV9TRE1fUkVTIC0gUExMIEhpZ2ggUG9ydCBTaWdtYSBEZWx0YSBSZXN1bHRzICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fTlVNX1NFTEVDVEVEX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0hQTV9TRE1fUkVTX0hQTV9OVU1fU0VMRUNURURfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX05VTV9TRUxFQ1RFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fTlVNX1NFTEVDVEVEX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX05VTV9TRUxFQ1RFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0RFTk9NX01BU0sgICgweDNGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0RFTk9NX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fREVOT00oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0RFTk9NX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0RFTk9NX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fQ09VTlRfQURKVVNUX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0NPVU5UX0FESlVTVF9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0NPVU5UX0FESlVTVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fQ09VTlRfQURKVVNUX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0NPVU5UX0FESlVTVF9NQVNLKQorCisvKiEgQG5hbWUgTFBNX0NUUkwgLSBQTEwgTG93IFBvcnQgTW9kdWxhdG9yIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9NQU5VQUxfTUFTSyAoMHgzRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfTUFOVUFMX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9NQU5VQUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX0RJU0FCTEVfTUFTSyAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfUExMX0xEX0RJU0FCTEVfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9ESVNBQkxFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfRElTQUJMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9ESVNBQkxFX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUEZGX01BU0sgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUEZGX1NISUZUICAgICAgICAgKDEzVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQRkYoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUEZGX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBGRl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9JTlZfTUFTSyAgICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9JTlZfU0hJRlQgICgxNFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0RNX0lOVih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9JTlZfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0RNX0lOVl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RJU0FCTEVfTUFTSyAgICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RJU0FCTEVfU0hJRlQgICgxNVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRElTQUJMRSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRElTQUJMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RUSF9TQ0xfTUFTSyAgICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EVEhfU0NMX1NISUZUICAoMTZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RUSF9TQ0woeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EVEhfU0NMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RUSF9TQ0xfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX0NUUkxfTUFTSyAgICAoMHg0MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfQ1RSTF9TSElGVCAgICgyMlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9DVFJMKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfQ1RSTF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX0NUUkxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX09WUkRfTUFTSyAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfT1ZSRF9TSElGVCAgICgyM1UpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9PVlJEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfT1ZSRF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9EX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TQ0FMRV9NQVNLICAgICAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TQ0FMRV9TSElGVCAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NDQUxFKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TQ0FMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TQ0FMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9VU0VfTkVHX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9VU0VfTkVHX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fU0RNX1VTRV9ORUcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9VU0VfTkVHX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9VU0VfTkVHX01BU0spCisKKy8qISBAbmFtZSBMUE1fU0RNX0NUUkwxIC0gUExMIExvdyBQb3J0IFNpZ21hIERlbHRhIENvbnRyb2wgMSAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TRUxFQ1RFRF9NQVNLICgweDdGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfU0VMRUNURURfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TRUxFQ1RFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX1NFTEVDVEVEX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TRUxFQ1RFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9IUE1fQVJSQVlfQklBU19NQVNLICgweDdGMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9IUE1fQVJSQVlfQklBU19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0hQTV9BUlJBWV9CSUFTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfSFBNX0FSUkFZX0JJQVNfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0hQTV9BUlJBWV9CSUFTX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX01BU0sgKDB4N0YwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEcoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEVfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX1NETV9NQVBfRElTQUJMRV9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX1NETV9NQVBfRElTQUJMRV9NQVNLKQorCisvKiEgQG5hbWUgTFBNX1NETV9DVFJMMiAtIFBMTCBMb3cgUG9ydCBTaWdtYSBEZWx0YSBDb250cm9sIDIgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDJfTFBNX05VTV9NQVNLICAoMHhGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDJfTFBNX05VTV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwyX0xQTV9OVU0oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMl9MUE1fTlVNX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMl9MUE1fTlVNX01BU0spCisKKy8qISBAbmFtZSBMUE1fU0RNX0NUUkwzIC0gUExMIExvdyBQb3J0IFNpZ21hIERlbHRhIENvbnRyb2wgMyAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMM19MUE1fREVOT01fTUFTSyAoMHhGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDNfTFBNX0RFTk9NX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDNfTFBNX0RFTk9NKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwzX0xQTV9ERU5PTV9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDNfTFBNX0RFTk9NX01BU0spCisKKy8qISBAbmFtZSBMUE1fU0RNX1JFUzEgLSBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgUmVzdWx0IDEgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fUkVTMV9MUE1fTlVNX1NFTEVDVEVEX01BU0sgKDB4RkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzFfTFBNX05VTV9TRUxFQ1RFRF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzFfTFBNX05VTV9TRUxFQ1RFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzFfTFBNX05VTV9TRUxFQ1RFRF9TSElGVCkpICYgWENWUl9QTExfRElHX0xQTV9TRE1fUkVTMV9MUE1fTlVNX1NFTEVDVEVEX01BU0spCisKKy8qISBAbmFtZSBMUE1fU0RNX1JFUzIgLSBQTEwgTG93IFBvcnQgU2lnbWEgRGVsdGEgUmVzdWx0IDIgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fUkVTMl9MUE1fREVOT01fU0VMRUNURURfTUFTSyAoMHhGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0xQTV9TRE1fUkVTMl9MUE1fREVOT01fU0VMRUNURURfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9SRVMyX0xQTV9ERU5PTV9TRUxFQ1RFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19MUE1fU0RNX1JFUzJfTFBNX0RFTk9NX1NFTEVDVEVEX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9SRVMyX0xQTV9ERU5PTV9TRUxFQ1RFRF9NQVNLKQorCisvKiEgQG5hbWUgREVMQVlfTUFUQ0ggLSBQTEwgRGVsYXkgTWF0Y2hpbmcgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0xQTV9TRE1fREVMQVlfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0xQTV9TRE1fREVMQVlfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfTFBNX1NETV9ERUxBWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9MUE1fU0RNX0RFTEFZX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfTFBNX1NETV9ERUxBWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfSFBNX1NETV9ERUxBWV9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19ERUxBWV9NQVRDSF9IUE1fU0RNX0RFTEFZX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9TRE1fREVMQVkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfSFBNX1NETV9ERUxBWV9TSElGVCkpICYgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9TRE1fREVMQVlfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9JTlRFR0VSX0RFTEFZX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfSFBNX0lOVEVHRVJfREVMQVlfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9JTlRFR0VSX0RFTEFZKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9JTlRFR0VSX0RFTEFZX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfSFBNX0lOVEVHRVJfREVMQVlfTUFTSykKKworLyohIEBuYW1lIENUVU5FX0NUUkwgLSBQTEwgQ29hcnNlIFR1bmUgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfTUFOVUFMX01BU0sgKDB4RkZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX01BTlVBTF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9ESVNBQkxFX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9ESVNBQkxFX1NISUZUICgxNVUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9ESVNBQkxFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX0RJU0FCTEVfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9ESVNBQkxFX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0FESlVTVF9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfQURKVVNUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0FESlVTVCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9BREpVU1RfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0FESlVTVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9NQU5VQUxfTUFTSyAoMHg3RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX01BTlVBTF9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9NQU5VQUwoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9NQU5VQUxfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfRElTQUJMRV9NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfRElTQUJMRV9TSElGVCAoMzFVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9ESVNBQkxFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfRElTQUJMRV9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfRElTQUJMRV9NQVNLKQorCisvKiEgQG5hbWUgQ1RVTkVfQ05UNiAtIFBMTCBDb2Fyc2UgVHVuZSBDb3VudCA2ICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ2X0NUVU5FX0NPVU5UXzZfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDZfQ1RVTkVfQ09VTlRfNl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ2X0NUVU5FX0NPVU5UXzYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNl9DVFVORV9DT1VOVF82X1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ05UNl9DVFVORV9DT1VOVF82X01BU0spCisKKy8qISBAbmFtZSBDVFVORV9DTlQ1XzQgLSBQTEwgQ29hcnNlIFR1bmUgQ291bnRzIDUgYW5kIDQgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDVfNF9DVFVORV9DT1VOVF80X01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNF9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDVfNF9DVFVORV9DT1VOVF80X01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNV9NQVNLICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDVfNF9DVFVORV9DT1VOVF81X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DTlQ1XzRfQ1RVTkVfQ09VTlRfNV9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDVfNF9DVFVORV9DT1VOVF81X01BU0spCisKKy8qISBAbmFtZSBDVFVORV9DTlQzXzIgLSBQTEwgQ29hcnNlIFR1bmUgQ291bnRzIDMgYW5kIDIgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDNfMl9DVFVORV9DT1VOVF8yX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfMl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfMl9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDNfMl9DVFVORV9DT1VOVF8yX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfM19NQVNLICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDNfMl9DVFVORV9DT1VOVF8zX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DTlQzXzJfQ1RVTkVfQ09VTlRfM19TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDNfMl9DVFVORV9DT1VOVF8zX01BU0spCisKKy8qISBAbmFtZSBDVFVORV9DTlQxXzAgLSBQTEwgQ29hcnNlIFR1bmUgQ291bnRzIDEgYW5kIDAgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDFfMF9DVFVORV9DT1VOVF8wX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMF9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDFfMF9DVFVORV9DT1VOVF8wX01BU0spCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMV9NQVNLICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX0NOVDFfMF9DVFVORV9DT1VOVF8xX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9DTlQxXzBfQ1RVTkVfQ09VTlRfMV9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX0NOVDFfMF9DVFVORV9DT1VOVF8xX01BU0spCisKKy8qISBAbmFtZSBDVFVORV9SRVMgLSBQTEwgQ29hcnNlIFR1bmUgUmVzdWx0cyAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX1NFTEVDVEVEX01BU0sgKDB4N0ZVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX1NFTEVDVEVEX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9TRUxFQ1RFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfU0VMRUNURURfU0hJRlQpKSAmIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfU0VMRUNURURfTUFTSykKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9CRVNUX0RJRkZfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9CRVNUX0RJRkZfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX0JFU1RfRElGRih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfQkVTVF9ESUZGX1NISUZUKSkgJiBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX0JFU1RfRElGRl9NQVNLKQorI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQ1RVTkVfUkVTX0NUVU5FX0ZSRVFfU0VMRUNURURfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9GUkVRX1NFTEVDVEVEX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfRlJFUV9TRUxFQ1RFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUExMX0RJR19DVFVORV9SRVNfQ1RVTkVfRlJFUV9TRUxFQ1RFRF9TSElGVCkpICYgWENWUl9QTExfRElHX0NUVU5FX1JFU19DVFVORV9GUkVRX1NFTEVDVEVEX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1BMTF9ESUdfUmVnaXN0ZXJfTWFza3MgKi8KKworCisvKiBYQ1ZSX1BMTF9ESUcgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1BMTF9ESUcgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfUExMX0RJR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUMyMjR1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9QTExfRElHIGJhc2UgcG9pbnRlciAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWENWUl9QTExfRElHX1R5cGUgKilYQ1ZSX1BMTF9ESUdfQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1BMTF9ESUcgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBYQ1ZSX1BMTF9ESUdfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgIHsgWENWUl9QTExfRElHX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfUExMX0RJRyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9QTExfRElHX0JBU0VfUFRSUyAgICAgICAgICAgICAgICAgICB7IFhDVlJfUExMX0RJRyB9CisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgWENWUl9QTExfRElHX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9SWF9ESUcgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1JYX0RJR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX1JYX0RJRyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9SWF9ESUcgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IFJYX0RJR19DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSWCBEaWdpdGFsIENvbnRyb2wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgQUdDX0NUUkxfMDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFHQyBDb250cm9sIDAsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgQUdDX0NUUkxfMTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFHQyBDb250cm9sIDEsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgQUdDX0NUUkxfMjsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFHQyBDb250cm9sIDIsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgQUdDX0NUUkxfMzsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEFHQyBDb250cm9sIDMsIG9mZnNldDogMHgxMCAqLworICBfX0kgIHVpbnQzMl90IEFHQ19TVEFUOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBR0MgU3RhdHVzLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JTyB1aW50MzJfdCBSU1NJX0NUUkxfMDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlNTSSBDb250cm9sIDAsIG9mZnNldDogMHgxOCAqLworICBfX0kgIHVpbnQzMl90IFJTU0lfQ1RSTF8xOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSU1NJIENvbnRyb2wgMSwgb2Zmc2V0OiAweDFDICovCisgIF9fSSAgdWludDMyX3QgUlNTSV9ERlQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJTU0kgREZULCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX0NUUkxfMDsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDb250cm9sIDAsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfQ1RSTF8xOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIENvbnRyb2wgMSwgb2Zmc2V0OiAweDI4ICovCisgIF9fSU8gdWludDMyX3QgRENPQ19EQUNfSU5JVDsgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgREFDIEluaXRpYWxpemF0aW9uLCBvZmZzZXQ6IDB4MkMgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX0RJR19NQU47ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBEaWdpdGFsIENvcnJlY3Rpb24gTWFudWFsIE92ZXJyaWRlLCBvZmZzZXQ6IDB4MzAgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX0NBTF9HQUlOOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBHYWluLCBvZmZzZXQ6IDB4MzQgKi8KKyAgX19JICB1aW50MzJfdCBEQ09DX1NUQVQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBTdGF0dXMsIG9mZnNldDogMHgzOCAqLworICBfX0kgIHVpbnQzMl90IERDT0NfRENfRVNUOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIERDIEVzdGltYXRlLCBvZmZzZXQ6IDB4M0MgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX0NBTF9SQ1A7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBSZWNpcHJvY2Fscywgb2Zmc2V0OiAweDQwICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzRdOworICBfX0lPIHVpbnQzMl90IElRTUNfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJUU1DIENvbnRyb2wsIG9mZnNldDogMHg0OCAqLworICBfX0lPIHVpbnQzMl90IElRTUNfQ0FMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJUU1DIENhbGlicmF0aW9uLCBvZmZzZXQ6IDB4NEMgKi8KKyAgX19JTyB1aW50MzJfdCBMTkFfR0FJTl9WQUxfM18wOyAgICAgICAgICAgICAgICAgIC8qKjwgTE5BX0dBSU4gU3RlcCBWYWx1ZXMgMy4uMCwgb2Zmc2V0OiAweDUwICovCisgIF9fSU8gdWludDMyX3QgTE5BX0dBSU5fVkFMXzdfNDsgICAgICAgICAgICAgICAgICAvKio8IExOQV9HQUlOIFN0ZXAgVmFsdWVzIDcuLjQsIG9mZnNldDogMHg1NCAqLworICBfX0lPIHVpbnQzMl90IExOQV9HQUlOX1ZBTF84OyAgICAgICAgICAgICAgICAgICAgLyoqPCBMTkFfR0FJTiBTdGVwIFZhbHVlcyA4LCBvZmZzZXQ6IDB4NTggKi8KKyAgX19JTyB1aW50MzJfdCBCQkFfUkVTX1RVTkVfVkFMXzdfMDsgICAgICAgICAgICAgIC8qKjwgQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDcuLjAsIG9mZnNldDogMHg1QyAqLworICBfX0lPIHVpbnQzMl90IEJCQV9SRVNfVFVORV9WQUxfMTBfODsgICAgICAgICAgICAgLyoqPCBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgMTAuLjgsIG9mZnNldDogMHg2MCAqLworICBfX0lPIHVpbnQzMl90IExOQV9HQUlOX0xJTl9WQUxfMl8wOyAgICAgICAgICAgICAgLyoqPCBMTkEgTGluZWFyIEdhaW4gVmFsdWVzIDIuLjAsIG9mZnNldDogMHg2NCAqLworICBfX0lPIHVpbnQzMl90IExOQV9HQUlOX0xJTl9WQUxfNV8zOyAgICAgICAgICAgICAgLyoqPCBMTkEgTGluZWFyIEdhaW4gVmFsdWVzIDUuLjMsIG9mZnNldDogMHg2OCAqLworICBfX0lPIHVpbnQzMl90IExOQV9HQUlOX0xJTl9WQUxfOF82OyAgICAgICAgICAgICAgLyoqPCBMTkEgTGluZWFyIEdhaW4gVmFsdWVzIDguLjYsIG9mZnNldDogMHg2QyAqLworICBfX0lPIHVpbnQzMl90IExOQV9HQUlOX0xJTl9WQUxfOTsgICAgICAgICAgICAgICAgLyoqPCBMTkEgTGluZWFyIEdhaW4gVmFsdWVzIDksIG9mZnNldDogMHg3MCAqLworICBfX0lPIHVpbnQzMl90IEJCQV9SRVNfVFVORV9MSU5fVkFMXzNfMDsgICAgICAgICAgLyoqPCBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgMy4uMCwgb2Zmc2V0OiAweDc0ICovCisgIF9fSU8gdWludDMyX3QgQkJBX1JFU19UVU5FX0xJTl9WQUxfN180OyAgICAgICAgICAvKio8IEJCQSBSZXNpc3RvciBUdW5lIFZhbHVlcyA3Li40LCBvZmZzZXQ6IDB4NzggKi8KKyAgX19JTyB1aW50MzJfdCBCQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84OyAgICAgICAgIC8qKjwgQkJBIFJlc2lzdG9yIFR1bmUgVmFsdWVzIDEwLi44LCBvZmZzZXQ6IDB4N0MgKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMDNfMDA7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMDMuLjAwLCBvZmZzZXQ6IDB4ODAgKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMDdfMDQ7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMDcuLjA0LCBvZmZzZXQ6IDB4ODQgKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMTFfMDg7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMTEuLjA4LCBvZmZzZXQ6IDB4ODggKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMTVfMTI7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMTUuLjEyLCBvZmZzZXQ6IDB4OEMgKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMTlfMTY7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMTkuLjE2LCBvZmZzZXQ6IDB4OTAgKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMjNfMjA7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMjMuLjIwLCBvZmZzZXQ6IDB4OTQgKi8KKyAgX19JTyB1aW50MzJfdCBBR0NfR0FJTl9UQkxfMjZfMjQ7ICAgICAgICAgICAgICAgIC8qKjwgQUdDIEdhaW4gVGFibGVzIFN0ZXAgMjYuLjI0LCBvZmZzZXQ6IDB4OTggKi8KKyAgICAgICB1aW50OF90IFJFU0VSVkVEXzFbNF07CisgIF9fSU8gdWludDMyX3QgRENPQ19PRkZTRVRbMjddOyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgT2Zmc2V0LCBhcnJheSBvZmZzZXQ6IDB4QTAsIGFycmF5IHN0ZXA6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfQkJBX1NURVA7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIEJCQSBEQUMgU3RlcCwgb2Zmc2V0OiAweDEwQyAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfMDsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCAwLCBvZmZzZXQ6IDB4MTEwICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF8xOyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDEsIG9mZnNldDogMHgxMTQgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzI7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgMiwgb2Zmc2V0OiAweDExOCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfMzsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCAzLCBvZmZzZXQ6IDB4MTFDICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF80OyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDQsIG9mZnNldDogMHgxMjAgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzU7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgNSwgb2Zmc2V0OiAweDEyNCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfNjsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCA2LCBvZmZzZXQ6IDB4MTI4ICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF83OyAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDcsIG9mZnNldDogMHgxMkMgKi8KKyAgX19JTyB1aW50MzJfdCBEQ09DX1RaQV9TVEVQXzg7ICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBUWkEgREFDIFN0ZXAgNSwgb2Zmc2V0OiAweDEzMCAqLworICBfX0lPIHVpbnQzMl90IERDT0NfVFpBX1NURVBfOTsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIFRaQSBEQUMgU3RlcCA5LCBvZmZzZXQ6IDB4MTM0ICovCisgIF9fSU8gdWludDMyX3QgRENPQ19UWkFfU1RFUF8xMDsgICAgICAgICAgICAgICAgICAvKio8IERDT0MgVFpBIERBQyBTdGVwIDEwLCBvZmZzZXQ6IDB4MTM4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8yWzQ0XTsKKyAgX19JICB1aW50MzJfdCBEQ09DX0NBTF9BTFBIQTsgICAgICAgICAgICAgICAgICAgIC8qKjwgRENPQyBDYWxpYnJhdGlvbiBBbHBoYSwgb2Zmc2V0OiAweDE2OCAqLworICBfX0kgIHVpbnQzMl90IERDT0NfQ0FMX0JFVEFfUTsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIENhbGlicmF0aW9uIEJldGEgUSwgb2Zmc2V0OiAweDE2QyAqLworICBfX0kgIHVpbnQzMl90IERDT0NfQ0FMX0JFVEFfSTsgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIENhbGlicmF0aW9uIEJldGEgSSwgb2Zmc2V0OiAweDE3MCAqLworICBfX0kgIHVpbnQzMl90IERDT0NfQ0FMX0dBTU1BOyAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIENhbGlicmF0aW9uIEdhbW1hLCBvZmZzZXQ6IDB4MTc0ICovCisgIF9fSU8gdWludDMyX3QgRENPQ19DQUxfSUlSOyAgICAgICAgICAgICAgICAgICAgICAvKio8IERDT0MgQ2FsaWJyYXRpb24gSUlSLCBvZmZzZXQ6IDB4MTc4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8zWzRdOworICBfX0kgIHVpbnQzMl90IERDT0NfQ0FMWzNdOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ09DIENhbGlicmF0aW9uIFJlc3VsdCwgYXJyYXkgb2Zmc2V0OiAweDE4MCwgYXJyYXkgc3RlcDogMHg0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF80WzRdOworICBfX0lPIHVpbnQzMl90IENDQV9FRF9MUUlfQ1RSTF8wOyAgICAgICAgICAgICAgICAgLyoqPCBSWF9ESUcgQ0NBIEVEIExRSSBDb250cm9sIFJlZ2lzdGVyIDAsIG9mZnNldDogMHgxOTAgKi8KKyAgX19JTyB1aW50MzJfdCBDQ0FfRURfTFFJX0NUUkxfMTsgICAgICAgICAgICAgICAgIC8qKjwgUlhfRElHIENDQSBFRCBMUUkgQ29udHJvbCBSZWdpc3RlciAxLCBvZmZzZXQ6IDB4MTk0ICovCisgIF9fSSAgdWludDMyX3QgQ0NBX0VEX0xRSV9TVEFUXzA7ICAgICAgICAgICAgICAgICAvKio8IFJYX0RJRyBDQ0EgRUQgTFFJIFN0YXR1cyBSZWdpc3RlciAwLCBvZmZzZXQ6IDB4MTk4ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF81WzRdOworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzA7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDAsIG9mZnNldDogMHgxQTAgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl8xOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAxLCBvZmZzZXQ6IDB4MUE0ICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfMjsgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMiwgb2Zmc2V0OiAweDFBOCAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzM7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDMsIG9mZnNldDogMHgxQUMgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl80OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA0LCBvZmZzZXQ6IDB4MUIwICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfNTsgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgNSwgb2Zmc2V0OiAweDFCNCAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzY7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDYsIG9mZnNldDogMHgxQjggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl83OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA3LCBvZmZzZXQ6IDB4MUJDICovCisgIF9fSU8gdWludDMyX3QgUlhfQ0hGX0NPRUZfODsgICAgICAgICAgICAgICAgICAgICAvKio8IFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgOCwgb2Zmc2V0OiAweDFDMCAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzk7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDksIG9mZnNldDogMHgxQzQgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9DSEZfQ09FRl8xMDsgICAgICAgICAgICAgICAgICAgIC8qKjwgUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAxMCwgb2Zmc2V0OiAweDFDOCAqLworICBfX0lPIHVpbnQzMl90IFJYX0NIRl9DT0VGXzExOyAgICAgICAgICAgICAgICAgICAgLyoqPCBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDExLCBvZmZzZXQ6IDB4MUNDICovCisgIF9fSU8gdWludDMyX3QgQUdDX01BTl9BR0NfSURYOyAgICAgICAgICAgICAgICAgICAvKio8IEFHQyBNYW51YWwgQUdDIEluZGV4LCBvZmZzZXQ6IDB4MUQwICovCisgIF9fSU8gdWludDMyX3QgRENfUkVTSURfQ1RSTDsgICAgICAgICAgICAgICAgICAgICAvKio8IERDIFJlc2lkdWFsIENvbnRyb2wsIG9mZnNldDogMHgxRDQgKi8KKyAgX19JICB1aW50MzJfdCBEQ19SRVNJRF9FU1Q7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgREMgUmVzaWR1YWwgRXN0aW1hdGUsIG9mZnNldDogMHgxRDggKi8KKyAgX19JTyB1aW50MzJfdCBSWF9SQ0NBTF9DVFJMMDsgICAgICAgICAgICAgICAgICAgIC8qKjwgUlggUkMgQ2FsaWJyYXRpb24gQ29udHJvbDAsIG9mZnNldDogMHgxREMgKi8KKyAgX19JTyB1aW50MzJfdCBSWF9SQ0NBTF9DVFJMMTsgICAgICAgICAgICAgICAgICAgIC8qKjwgUlggUkMgQ2FsaWJyYXRpb24gQ29udHJvbDEsIG9mZnNldDogMHgxRTAgKi8KKyAgX19JICB1aW50MzJfdCBSWF9SQ0NBTF9TVEFUOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgUlggUkMgQ2FsaWJyYXRpb24gU3RhdHVzLCBvZmZzZXQ6IDB4MUU0ICovCisgIF9fSU8gdWludDMyX3QgQVVYUExMX0ZDQUxfQ1RSTDsgICAgICAgICAgICAgICAgICAvKio8IEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvbnRyb2wsIG9mZnNldDogMHgxRTggKi8KKyAgX19JICB1aW50MzJfdCBBVVhQTExfRkNBTF9DTlQ2OyAgICAgICAgICAgICAgICAgIC8qKjwgQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgNiwgb2Zmc2V0OiAweDFFQyAqLworICBfX0kgIHVpbnQzMl90IEFVWFBMTF9GQ0FMX0NOVDVfNDsgICAgICAgICAgICAgICAgLyoqPCBBdXggUExMIEZyZXF1ZW5jeSBDYWxpYnJhdGlvbiBDb3VudCA1IGFuZCA0LCBvZmZzZXQ6IDB4MUYwICovCisgIF9fSSAgdWludDMyX3QgQVVYUExMX0ZDQUxfQ05UM18yOyAgICAgICAgICAgICAgICAvKio8IEF1eCBQTEwgRnJlcXVlbmN5IENhbGlicmF0aW9uIENvdW50IDMgYW5kIDIsIG9mZnNldDogMHgxRjQgKi8KKyAgX19JICB1aW50MzJfdCBBVVhQTExfRkNBTF9DTlQxXzA7ICAgICAgICAgICAgICAgIC8qKjwgQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgMSBhbmQgMCwgb2Zmc2V0OiAweDFGOCAqLworICBfX0lPIHVpbnQzMl90IFJYRElHX0RGVDsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBSWERJRyBERlQsIG9mZnNldDogMHgxRkMgKi8KK30gWENWUl9SWF9ESUdfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9SWF9ESUcgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1JYX0RJR19SZWdpc3Rlcl9NYXNrcyBYQ1ZSX1JYX0RJRyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgUlhfRElHX0NUUkwgLSBSWCBEaWdpdGFsIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX05FR0VER0VfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX05FR0VER0VfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfTkVHRURHRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19ORUdFREdFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfTkVHRURHRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9DSF9GSUxUX0JZUEFTU19NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9DSF9GSUxUX0JZUEFTU19TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0NIX0ZJTFRfQllQQVNTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQ0hfRklMVF9CWVBBU1NfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0NIX0ZJTFRfQllQQVNTX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19SQVdfRU5fTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1JBV19FTl9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19SQVdfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUkFXX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUkFXX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19QT0xfTUFTSyAgKDB4OFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FEQ19QT0xfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUE9MKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1BPTF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1BPTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfTUFTSyAoMHg3MFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUl9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUxfTUFTSyAoMHgxMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUxfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfTk9STV9FTl9NQVNLICAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9OT1JNX0VOX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfTk9STV9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX05PUk1fRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX05PUk1fRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfUlNTSV9FTl9NQVNLICAoMHg0MDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0VOX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1JTU0lfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTl9NQVNLICAgKDB4ODAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOX1NISUZUICAoMTFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BR0NfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BR0NfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19FTl9NQVNLICAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19FTl9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTl9NQVNLICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTl9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfQ0FMX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9JUV9TV0FQX01BU0sgICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9JUV9TV0FQX1NISUZUICgxNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0lRX1NXQVAoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9JUV9TV0FQX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9JUV9TV0FQX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOX1NISUZUICgxNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19FTl9NQVNLICAgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfRU5fU0hJRlQgICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19FTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURV9NQVNLICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEVfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEUoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU5fTUFTSyAoMHg0MDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RNQV9EVEVTVF9FTl9TSElGVCAoMThVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RNQV9EVEVTVF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOX01BU0sgKDB4MUYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU5fU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0dBSU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSFpEX0NPUlJfRElTX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0haRF9DT1JSX0RJU19TSElGVCAoMjVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IWkRfQ09SUl9ESVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IWkRfQ09SUl9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0haRF9DT1JSX0RJU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IQVpBUkRfTUFTSyAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0hBWkFSRF9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IQVpBUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9IQVpBUkRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0hBWkFSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0ZJTFRfSEFaQVJEX01BU0sgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0ZJTFRfSEFaQVJEX1NISUZUICgyOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1JTU0lfRklMVF9IQVpBUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0ZJTFRfSEFaQVJEX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0ZJTFRfSEFaQVJEX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX1NBVF9JX01BU0sgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfSV9TSElGVCAoMzBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX1NBVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfUV9NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX1FfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9TQVRfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfU0FUX1FfTUFTSykKKworLyohIEBuYW1lIEFHQ19DVFJMXzAgLSBBR0MgQ29udHJvbCAwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfRU5fTUFTSyAgKDB4MVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfRU5fU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX1NSQ19NQVNLICgweDZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX1NSQ19TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfU1JDKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX1NSQ19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9TTE9XX0FHQ19TUkNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRlJFRVpFX0VOX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9FTl9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfUFJFX09SX0FBX01BU0sgKDB4MTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19GUkVFWkVfUFJFX09SX0FBX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRlJFRVpFX1BSRV9PUl9BQSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9QUkVfT1JfQUFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9QUkVfT1JfQUFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfRU5fTUFTSyAgICAoMHg0MFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX0VOX1NISUZUICAgKDZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9FTih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1NSQ19NQVNLICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9TUkNfU0hJRlQgICg3VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfU1JDKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1NSQ19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfU1JDX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fQkJBX1NURVBfU1pfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0JCQV9TVEVQX1NaX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9CQkFfU1RFUF9TWih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fQkJBX1NURVBfU1pfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fQkJBX1NURVBfU1pfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9MTkFfU1RFUF9TWl9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0xOQV9TVEVQX1NaX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fTE5BX1NURVBfU1ooeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0xOQV9TVEVQX1NaX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0xOQV9TVEVQX1NaX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1JTU0lfVEhSRVNIX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfUlNTSV9USFJFU0hfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfUlNTSV9USFJFU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9SU1NJX1RIUkVTSF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfUlNTSV9USFJFU0hfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSF9NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSF9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfRE9XTl9SU1NJX1RIUkVTSF9NQVNLKQorCisvKiEgQG5hbWUgQUdDX0NUUkxfMSAtIEFHQyBDb250cm9sIDEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfQUxUX0NPREVfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfQUxUX0NPREVfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9BTFRfQ09ERSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfQUxUX0NPREVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX0FMVF9DT0RFX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0FMVF9DT0RFX01BU0sgKDB4RkYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfQUxUX0NPREVfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9BTFRfQ09ERSh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfQUxUX0NPREVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0FMVF9DT0RFX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX1VTRVJfR0FJTl9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9VU0VSX0dBSU5fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfVVNFUl9HQUlOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX1VTRVJfR0FJTl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfVVNFUl9HQUlOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX1VTRVJfR0FJTl9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9CQkFfVVNFUl9HQUlOX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX1VTRVJfR0FJTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX1VTRVJfR0FJTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU5fTUFTSyAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU5fU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOX01BU0sgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOX1NISUZUICgyMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9CQkFfR0FJTl9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9CQkFfR0FJTl9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTl9NQVNLICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOX1NISUZUICAoMjJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRV9NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRV9NQVNLKQorCisvKiEgQG5hbWUgQUdDX0NUUkxfMiAtIEFHQyBDb250cm9sIDIgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9SU1RfTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9SU1RfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1JTVCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9SU1RfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfUlNUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfUlNUX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfUlNUX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9SU1QoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfUlNUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1JTVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX01BTl9QREVUX1JTVF9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX01BTl9QREVUX1JTVF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTUFOX1BERVRfUlNUKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX01BTl9QREVUX1JTVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9NQU5fUERFVF9SU1RfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRV9NQVNLICgweEZGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUVfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MT19NQVNLICgweDcwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MT19TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISV9NQVNLICgweDM4MDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSElfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSElfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE9fTUFTSyAoMHgxQzAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MT19TSElGVCAoMThVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISV9NQVNLICgweEUwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJX1NISUZUICgyMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSElfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFX01BU0sgKDB4M0YwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0xOQV9MR19PTl9PVlJfTUFTSyAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTE5BX0xHX09OX09WUl9TSElGVCAoMzBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0xOQV9MR19PTl9PVlIoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfTEdfT05fT1ZSX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0xOQV9MR19PTl9PVlJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfSEdfT05fT1ZSX01BU0sgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0xOQV9IR19PTl9PVlJfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfSEdfT05fT1ZSKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfTE5BX0hHX09OX09WUl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9MTkFfSEdfT05fT1ZSX01BU0spCisKKy8qISBAbmFtZSBBR0NfQ1RSTF8zIC0gQUdDIENvbnRyb2wgMyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VTkZSRUVaRV9USU1FX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1VORlJFRVpFX1RJTUVfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VTkZSRUVaRV9USU1FKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVU5GUkVFWkVfVElNRV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVU5GUkVFWkVfVElNRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19QREVUX0xPX0RMWV9NQVNLICgweEUwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19QREVUX0xPX0RMWV9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19QREVUX0xPX0RMWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1BERVRfTE9fRExZX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19QREVUX0xPX0RMWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19SU1NJX0RFTFRfSDJTX01BU0sgKDB4N0YwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUlNTSV9ERUxUX0gyU19TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19SU1NJX0RFTFRfSDJTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUlNTSV9ERUxUX0gyU19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfUlNTSV9ERUxUX0gyU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19IMlNfU1RFUF9TWl9NQVNLICgweEY4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19IMlNfU1RFUF9TWl9TSElGVCAoMjNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19IMlNfU1RFUF9TWih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX0gyU19TVEVQX1NaX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19IMlNfU1RFUF9TWl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VUF9TVEVQX1NaX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VUF9TVEVQX1NaX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1VQX1NURVBfU1ooeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VUF9TVEVQX1NaX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VUF9TVEVQX1NaX01BU0spCisKKy8qISBAbmFtZSBBR0NfU1RBVCAtIEFHQyBTdGF0dXMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQkJBX1BERVRfTE9fU1RBVF9NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9CQkFfUERFVF9MT19TVEFUX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQkJBX1BERVRfTE9fU1RBVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0xPX1NUQVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0xPX1NUQVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQkJBX1BERVRfSElfU1RBVF9NQVNLICgweDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9CQkFfUERFVF9ISV9TVEFUX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQkJBX1BERVRfSElfU1RBVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0hJX1NUQVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19TVEFUX0JCQV9QREVUX0hJX1NUQVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfVFpBX1BERVRfTE9fU1RBVF9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9UWkFfUERFVF9MT19TVEFUX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfVFpBX1BERVRfTE9fU1RBVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0xPX1NUQVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0xPX1NUQVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfVFpBX1BERVRfSElfU1RBVF9NQVNLICgweDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9UWkFfUERFVF9ISV9TVEFUX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfVFpBX1BERVRfSElfU1RBVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0hJX1NUQVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19TVEFUX1RaQV9QREVUX0hJX1NUQVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQ1VSUl9BR0NfSURYX01BU0sgICAoMHgxRjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9DVVJSX0FHQ19JRFhfU0hJRlQgICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQ1VSUl9BR0NfSURYKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19TVEFUX0NVUlJfQUdDX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX1NUQVRfQ1VSUl9BR0NfSURYX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0FHQ19GUk9aRU5fTUFTSyAgICAgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfQUdDX0ZST1pFTl9TSElGVCAgICAoOVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX0FHQ19GUk9aRU4oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9BR0NfRlJPWkVOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9BR0NfRlJPWkVOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19TVEFUX1JTU0lfQURDX1JBV19NQVNLICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX1NUQVRfUlNTSV9BRENfUkFXX1NISUZUICAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9SU1NJX0FEQ19SQVcoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX1NUQVRfUlNTSV9BRENfUkFXX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfU1RBVF9SU1NJX0FEQ19SQVdfTUFTSykKKworLyohIEBuYW1lIFJTU0lfQ1RSTF8wIC0gUlNTSSBDb250cm9sIDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9VU0VfVkFMU19NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1VTRV9WQUxTX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9VU0VfVkFMUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVVNFX1ZBTFNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVVNFX1ZBTFNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX1NSQ19NQVNLICgweDZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfU1JDX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX1NSQyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9TUkNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9TUkNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0VOX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9FTl9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9DV19XRUlHSFRfTUFTSyAoMHg2MFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX0NXX1dFSUdIVF9TSElGVCAoNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX0NXX1dFSUdIVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX0NXX1dFSUdIVF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfQ1dfV0VJR0hUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfTl9XSU5ET1dfQVZHX01BU0sgKDB4MzAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9OX1dJTkRPV19BVkdfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX0FWRyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfTl9XSU5ET1dfQVZHX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX0FWR19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfREVMQVlfTUFTSyAoMHhGQzAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0RFTEFZX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9ERUxBWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSE9MRF9ERUxBWV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX0RFTEFZX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVF9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfV0VJR0hUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfV0VJR0hUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVkxEX1NFVFRMRV9NQVNLICgweDcwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVkxEX1NFVFRMRV9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1ZMRF9TRVRUTEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX1ZMRF9TRVRUTEVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVkxEX1NFVFRMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESl9NQVNLICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREpfU0hJRlQgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9BREpfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfQURKX01BU0spCisKKy8qISBAbmFtZSBSU1NJX0NUUkxfMSAtIFJTU0kgQ29udHJvbCAxICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8xX1JTU0lfT1VUX01BU0sgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMV9SU1NJX09VVF9TSElGVCAgICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8xX1JTU0lfT1VUKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMV9SU1NJX09VVF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzFfUlNTSV9PVVRfTUFTSykKKworLyohIEBuYW1lIFJTU0lfREZUIC0gUlNTSSBERlQgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9ERlRfREZUX01BR19NQVNLICAgICAgICAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlNTSV9ERlRfREZUX01BR19TSElGVCAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfREZUX0RGVF9NQUcoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTUFHX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTUFHX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfREZUX0RGVF9OT0lTRV9NQVNLICAgICAgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTk9JU0VfU0hJRlQgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JTU0lfREZUX0RGVF9OT0lTRSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SU1NJX0RGVF9ERlRfTk9JU0VfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JTU0lfREZUX0RGVF9OT0lTRV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DVFJMXzAgLSBEQ09DIENvbnRyb2wgMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01JRFBXUl9UUktfRElTX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUlEUFdSX1RSS19ESVNfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01JRFBXUl9UUktfRElTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NSURQV1JfVFJLX0RJU19TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NSURQV1JfVFJLX0RJU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01BTl9NQVNLICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01BTl9TSElGVCAgICgxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUFOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01BTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX1RSS19FU1RfT1ZSX01BU0sgKDB4NFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfVFJLX0VTVF9PVlJfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX1RSS19FU1RfT1ZSKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19UUktfRVNUX09WUl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19UUktfRVNUX09WUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkNfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQ19TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQ19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU5fTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTl9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RSQUNLX0ZST01fWkVST19NQVNLICgweDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFJBQ0tfRlJPTV9aRVJPX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFJBQ0tfRlJPTV9aRVJPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFJBQ0tfRlJPTV9aRVJPX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UUkFDS19GUk9NX1pFUk9fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfQkJBX0NPUlJfUE9MX01BU0sgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9CQkFfQ09SUl9QT0xfU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9CQkFfQ09SUl9QT0woeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfQkJBX0NPUlJfUE9MX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9CQkFfQ09SUl9QT0xfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFpBX0NPUlJfUE9MX01BU0sgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UWkFfQ09SUl9QT0xfU0hJRlQgKDdVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UWkFfQ09SUl9QT0woeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFpBX0NPUlJfUE9MX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UWkFfQ09SUl9QT0xfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfRFVSQVRJT05fTUFTSyAoMHgxRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfRFVSQVRJT05fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NBTF9EVVJBVElPTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ0FMX0RVUkFUSU9OX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NBTF9EVVJBVElPTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfRExZX01BU0sgKDB4MUYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfRExZKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FX01BU0sgKDB4N0YwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NUUkxfMSAtIERDT0MgQ29udHJvbCAxICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFhfTUFTSyAoMHgzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWF9NQVNLICgweDFDVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYX01BU0sgKDB4RTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFhfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UX01BU0sgKDB4NzAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlRfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWF9NQVNLICgweDMwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfR1NfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFhfTUFTSyAoMHgxQzAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFhfU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYX01BU0sgKDB4RTAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYX1NISUZUICgyMVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX01JTl9BR0NfSURYX01BU0sgKDB4MUYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19NSU5fQUdDX0lEWF9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19NSU5fQUdDX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX01JTl9BR0NfSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19NSU5fQUdDX0lEWF9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19EQUNfSU5JVCAtIERDT0MgREFDIEluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JX01BU0sgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RX01BU0sgKDB4M0YwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1FfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX0lfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfUV9NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1FfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1FfTUFTSykKKworLyohIEBuYW1lIERDT0NfRElHX01BTiAtIERDT0MgRGlnaXRhbCBDb3JyZWN0aW9uIE1hbnVhbCBPdmVycmlkZSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RJR19NQU5fRElHX0RDT0NfSU5JVF9JX01BU0sgKDB4RkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfSV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRElHX01BTl9ESUdfRENPQ19JTklUX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0RJR19NQU5fRElHX0RDT0NfSU5JVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0RJR19NQU5fRElHX0RDT0NfSU5JVF9JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRElHX01BTl9ESUdfRENPQ19JTklUX1FfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfUV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RJR19NQU5fRElHX0RDT0NfSU5JVF9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19ESUdfTUFOX0RJR19EQ09DX0lOSVRfUV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DQUxfR0FJTiAtIERDT0MgQ2FsaWJyYXRpb24gR2FpbiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMV9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4xX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjFfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjFfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOMV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjJfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4yX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4yX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4yX01BU0sgKDB4RjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjJfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOMl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjNfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjNfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOM19TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjNfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4zX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4zKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4zX01BU0spCisKKy8qISBAbmFtZSBEQ09DX1NUQVQgLSBEQ09DIFN0YXR1cyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfQkJBX0RDT0NfSV9NQVNLICAgICgweDNGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX0lfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19JKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfQkJBX0RDT0NfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX1FfTUFTSyAgICAoMHgzRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX1FfU0hJRlQgICAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9CQkFfRENPQ19RKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfQkJBX0RDT0NfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19TVEFUX0JCQV9EQ09DX1FfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX0lfTUFTSyAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfVFpBX0RDT0NfSV9TSElGVCAgICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19JKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfVFpBX0RDT0NfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX1FfTUFTSyAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19RX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19TVEFUX1RaQV9EQ09DX1EoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfU1RBVF9UWkFfRENPQ19RX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1NUQVRfVFpBX0RDT0NfUV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19EQ19FU1QgLSBEQ09DIERDIEVzdGltYXRlICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9JX01BU0sgICAgKDB4RkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX0lfU0hJRlQgICAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9JKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0RDX0VTVF9EQ19FU1RfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX1FfTUFTSyAgICAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX1FfU0hJRlQgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0RDX0VTVF9EQ19FU1RfUSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfRENfRVNUX0RDX0VTVF9RX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NBTF9SQ1AgLSBEQ09DIENhbGlicmF0aW9uIFJlY2lwcm9jYWxzICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX1JDUF9EQ09DX1RNUF9DQUxDX1JFQ0lQX01BU0sgKDB4N0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0RDT0NfVE1QX0NBTENfUkVDSVBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfRENPQ19UTVBfQ0FMQ19SRUNJUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX1JDUF9EQ09DX1RNUF9DQUxDX1JFQ0lQX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfRENPQ19UTVBfQ0FMQ19SRUNJUF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfQUxQSEFfQ0FMQ19SRUNJUF9NQVNLICgweDdGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfQUxQSEFfQ0FMQ19SRUNJUF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfQUxQSEFfQ0FMQ19SRUNJUCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX1JDUF9BTFBIQV9DQUxDX1JFQ0lQX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfQUxQSEFfQ0FMQ19SRUNJUF9NQVNLKQorCisvKiEgQG5hbWUgSVFNQ19DVFJMIC0gSVFNQyBDb250cm9sICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0NBTF9FTl9NQVNLICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0NBTF9FTl9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19DQUxfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfQ0FMX0VOX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19DQUxfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfTlVNX0lURVJfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfTlVNX0lURVJfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NUUkxfSVFNQ19OVU1fSVRFUih4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfTlVNX0lURVJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX05VTV9JVEVSX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0RDX0dBSU5fQURKX01BU0sgKDB4N0ZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0RDX0dBSU5fQURKX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0RDX0dBSU5fQURKKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfSVFNQ19DVFJMX0lRTUNfRENfR0FJTl9BREpfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0lRTUNfQ1RSTF9JUU1DX0RDX0dBSU5fQURKX01BU0spCisKKy8qISBAbmFtZSBJUU1DX0NBTCAtIElRTUMgQ2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19HQUlOX0FESl9NQVNLICAoMHg3RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19JUU1DX0NBTF9JUU1DX0dBSU5fQURKX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19HQUlOX0FESih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfR0FJTl9BREpfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfR0FJTl9BREpfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19QSEFTRV9BREpfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19QSEFTRV9BREpfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfSVFNQ19DQUxfSVFNQ19QSEFTRV9BREooeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0lRTUNfQ0FMX0lRTUNfUEhBU0VfQURKX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19JUU1DX0NBTF9JUU1DX1BIQVNFX0FESl9NQVNLKQorCisvKiEgQG5hbWUgTE5BX0dBSU5fVkFMXzNfMCAtIExOQV9HQUlOIFN0ZXAgVmFsdWVzIDMuLjAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMF9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8wX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzFfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8xX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8xX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzJfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8yX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfM18wX0xOQV9HQUlOX1ZBTF8yX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzNfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzNfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF8zXzBfTE5BX0dBSU5fVkFMXzNfTUFTSykKKworLyohIEBuYW1lIExOQV9HQUlOX1ZBTF83XzQgLSBMTkFfR0FJTiBTdGVwIFZhbHVlcyA3Li40ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzRfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF80KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNF9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF81X01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzVfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF81KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNV9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF82X01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF82KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNl9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzdfNF9MTkFfR0FJTl9WQUxfNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF83X01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF83X1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF83X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfN180X0xOQV9HQUlOX1ZBTF83X01BU0spCisKKy8qISBAbmFtZSBMTkFfR0FJTl9WQUxfOCAtIExOQV9HQUlOIFN0ZXAgVmFsdWVzIDggKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzhfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF84X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfOF9MTkFfR0FJTl9WQUxfOF9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzlfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzlfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfOF9MTkFfR0FJTl9WQUxfOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF85X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9WQUxfOF9MTkFfR0FJTl9WQUxfOV9NQVNLKQorCisvKiEgQG5hbWUgQkJBX1JFU19UVU5FX1ZBTF83XzAgLSBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgNy4uMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzBfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8wX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8xX01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzFfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzJfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzJfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzNfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8zX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfM19TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8zX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNF9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF80X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNF9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF80X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNV9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNV9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzZfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF82X1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF82X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfN19NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF83X1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfN19TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF83X01BU0spCisKKy8qISBAbmFtZSBCQkFfUkVTX1RVTkVfVkFMXzEwXzggLSBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgMTAuLjggKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF84X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOV9NQVNLICgweEYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfOV9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF85X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF85X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzEwX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9WQUxfMTBfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF8xMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfVkFMXzEwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF8xMF9NQVNLKQorCisvKiEgQG5hbWUgTE5BX0dBSU5fTElOX1ZBTF8yXzAgLSBMTkEgTGluZWFyIEdhaW4gVmFsdWVzIDIuLjAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8wX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8wX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8xX01BU0sgKDB4RkZDMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzFfU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8xX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8yX01BU0sgKDB4M0ZGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzJfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8yKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzJfTUFTSykKKworLyohIEBuYW1lIExOQV9HQUlOX0xJTl9WQUxfNV8zIC0gTE5BIExpbmVhciBHYWluIFZhbHVlcyA1Li4zICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfM19NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfM19TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfM19TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF8zX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNF9NQVNLICgweEZGQzAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF80X1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNF9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF80X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNV9NQVNLICgweDNGRjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF81X1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNV9TSElGVCkpICYgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF81X01BU0spCisKKy8qISBAbmFtZSBMTkFfR0FJTl9MSU5fVkFMXzhfNiAtIExOQSBMaW5lYXIgR2FpbiBWYWx1ZXMgOC4uNiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzZfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzZfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzdfTUFTSyAoMHhGRkMwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfN19TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfN19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzhfTUFTSyAoMHgzRkYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfOF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfOF9NQVNLKQorCisvKiEgQG5hbWUgTE5BX0dBSU5fTElOX1ZBTF85IC0gTE5BIExpbmVhciBHYWluIFZhbHVlcyA5ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOV9MTkFfR0FJTl9MSU5fVkFMXzlfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzlfTE5BX0dBSU5fTElOX1ZBTF85X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF85X0xOQV9HQUlOX0xJTl9WQUxfOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOV9MTkFfR0FJTl9MSU5fVkFMXzlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOV9MTkFfR0FJTl9MSU5fVkFMXzlfTUFTSykKKworLyohIEBuYW1lIEJCQV9SRVNfVFVORV9MSU5fVkFMXzNfMCAtIEJCQSBSZXNpc3RvciBUdW5lIFZhbHVlcyAzLi4wICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8wX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8wX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMV9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzJfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfM19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfM19TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfTUFTSykKKworLyohIEBuYW1lIEJCQV9SRVNfVFVORV9MSU5fVkFMXzdfNCAtIEJCQSBSZXNpc3RvciBUdW5lIFZhbHVlcyA3Li40ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF80X01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF80KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF80X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF81X01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF81X1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzZfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF82X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfN19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfN19TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfTUFTSykKKworLyohIEBuYW1lIEJCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzggLSBCQkEgUmVzaXN0b3IgVHVuZSBWYWx1ZXMgMTAuLjggKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF84X01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF84X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF84KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF84X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9MSU5fVkFMXzhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF85X01BU0sgKDB4RkZDMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9MSU5fVkFMXzlfU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF85KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF85X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9MSU5fVkFMXzlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF9NQVNLICgweDNGRjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF9NQVNLKQorCisvKiEgQG5hbWUgQUdDX0dBSU5fVEJMXzAzXzAwIC0gQUdDIEdhaW4gVGFibGVzIFN0ZXAgMDMuLjAwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDBfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAwX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMV9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAxX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMV9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDFfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAxKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAxX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAyX01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDJfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAyX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAyX01BU0sgKDB4RjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAyX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAyX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wM19NQVNLICgweEYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDNfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAzKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAzX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAzX01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDNfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAzKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAzX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDNfTUFTSykKKworLyohIEBuYW1lIEFHQ19HQUlOX1RCTF8wN18wNCAtIEFHQyBHYWluIFRhYmxlcyBTdGVwIDA3Li4wNCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDRfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA0X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA0KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA0X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA0X01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDRfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDVfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDVfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDVfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA1X1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA1X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNl9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA2X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA2X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNl9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNl9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDdfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA3X1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wN19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA3X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wN19NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA3X1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wN19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA3X01BU0spCisKKy8qISBAbmFtZSBBR0NfR0FJTl9UQkxfMTFfMDggLSBBR0MgR2FpbiBUYWJsZXMgU3RlcCAxMS4uMDggKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA4X01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8wOF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA4X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOF9NQVNLICgweEYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA4X1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA4KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA4X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA5X01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA5X1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA5KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA5X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMDlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA5X01BU0sgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOV9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMDlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTBfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8xMF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8xMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTBfTUFTSyAoMHhGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTBfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzEwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzEwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzExX01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8xMV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8xMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTFfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8xMV9TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8xMV9NQVNLKQorCisvKiEgQG5hbWUgQUdDX0dBSU5fVEJMXzE1XzEyIC0gQUdDIEdhaW4gVGFibGVzIFN0ZXAgMTUuLjEyICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xMl9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTJfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xMl9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xMih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xMl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEyX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xM19NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xM19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xMyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xM19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzEzX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xM19NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTNfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEzKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEzX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE0X01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTRfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE0KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE0X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE0X01BU0sgKDB4RjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE0X1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE0X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNV9NQVNLICgweEYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTVfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE1KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE1X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE1X01BU0sgKDB4RjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTVfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE1KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzE1X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTVfTUFTSykKKworLyohIEBuYW1lIEFHQ19HQUlOX1RCTF8xOV8xNiAtIEFHQyBHYWluIFRhYmxlcyBTdGVwIDE5Li4xNiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTZfTUFTSyAoMHhGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE2X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE2KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE2X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE2X01BU0sgKDB4RjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTZfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xNl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTdfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTdfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xN19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTdfTUFTSyAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE3X1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xNyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xN19TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE3X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOF9NQVNLICgweEYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE4X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE4X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOF9NQVNLICgweEYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOF9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTgoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMThfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTlfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE5X1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xOV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE5X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOV9NQVNLICgweEYwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE5X1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE5X01BU0spCisKKy8qISBAbmFtZSBBR0NfR0FJTl9UQkxfMjNfMjAgLSBBR0MgR2FpbiBUYWJsZXMgU3RlcCAyMy4uMjAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIwX01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIwX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMF9NQVNLICgweEYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIwX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIwX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIxX01BU0sgKDB4RjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIxX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIxKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIxX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjFfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIxX01BU0sgKDB4RjAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMV9TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjJfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjJfTUFTSyAoMHhGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjJfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIyX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIzX01BU0sgKDB4RjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yM19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yM19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjNfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yM19TSElGVCAoMjhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yM19NQVNLKQorCisvKiEgQG5hbWUgQUdDX0dBSU5fVEJMXzI2XzI0IC0gQUdDIEdhaW4gVGFibGVzIFN0ZXAgMjYuLjI0ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNF9NQVNLICgweEZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjRfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI0X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNV9NQVNLICgweEYwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI1X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNV9NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjVfU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI1KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI1X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI2X01BU0sgKDB4RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjZfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI2KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI2X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI2X01BU0sgKDB4RjAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI2X1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI2X01BU0spCisKKy8qISBAbmFtZSBEQ09DX09GRlNFVCAtIERDT0MgT2Zmc2V0ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9JX01BU0sgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfSV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9JKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19CQkFfT0ZGU0VUX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9RX01BU0sgKDB4M0YwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfQkJBX09GRlNFVF9RX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19CQkFfT0ZGU0VUX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX0JCQV9PRkZTRVRfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19CQkFfT0ZGU0VUX1FfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX0lfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX1RaQV9PRkZTRVRfSV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX1RaQV9PRkZTRVRfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0RDT0NfVFpBX09GRlNFVF9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX1RaQV9PRkZTRVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX1RaQV9PRkZTRVRfUV9NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX1FfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX09GRlNFVF9EQ09DX1RaQV9PRkZTRVRfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19PRkZTRVRfRENPQ19UWkFfT0ZGU0VUX1FfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfT0ZGU0VUX0NPVU5UICAgICAgICAgICAgKDI3VSkKKworLyohIEBuYW1lIERDT0NfQkJBX1NURVAgLSBEQ09DIEJCQSBEQUMgU3RlcCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfUkVDSVBfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX1JFQ0lQX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX1JFQ0lQKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX1JFQ0lQX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfUkVDSVBfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQX01BU0sgKDB4MUZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0JCQV9TVEVQX0JCQV9EQ09DX1NURVBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF8wIC0gRENPQyBUWkEgREFDIFN0ZXAgMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9SQ1BfMF9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9SQ1BfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX1JDUF8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfUkNQXzBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX1JDUF8wX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX0dBSU5fMF9NQVNLICgweEZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9HQUlOXzBfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9HQUlOXzBfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfMSAtIERDT0MgVFpBIERBQyBTdGVwIDEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfUkNQXzFfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfUkNQXzFfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9SQ1BfMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX1JDUF8xX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9SQ1BfMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9HQUlOXzFfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfR0FJTl8xX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX0dBSU5fMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX0dBSU5fMV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfR0FJTl8xX01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzIgLSBEQ09DIFRaQSBEQUMgU3RlcCAyICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfUkNQXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9SQ1BfMl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfUkNQXzJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfR0FJTl8yX01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX0dBSU5fMl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9HQUlOXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9HQUlOXzJfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX0dBSU5fMl9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF8zIC0gRENPQyBUWkEgREFDIFN0ZXAgMyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9SQ1BfM19NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9SQ1BfM19TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX1JDUF8zKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfUkNQXzNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX1JDUF8zX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX0dBSU5fM19NQVNLICgweEZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9HQUlOXzNfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9HQUlOXzNfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfNCAtIERDT0MgVFpBIERBQyBTdGVwIDQgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfUkNQXzRfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfUkNQXzRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9SQ1BfNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX1JDUF80X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9SQ1BfNF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9HQUlOXzRfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfR0FJTl80X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX0dBSU5fNCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX0dBSU5fNF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfR0FJTl80X01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzUgLSBEQ09DIFRaQSBEQUMgU3RlcCA1ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81X01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfUkNQXzUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9SQ1BfNV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfUkNQXzVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfR0FJTl81X01BU0sgKDB4RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX0dBSU5fNV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9HQUlOXzUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzVfRENPQ19UWkFfU1RFUF9HQUlOXzVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX0dBSU5fNV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF82IC0gRENPQyBUWkEgREFDIFN0ZXAgNiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9SQ1BfNl9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9SQ1BfNl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX1JDUF82KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfUkNQXzZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX1JDUF82X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX0dBSU5fNl9NQVNLICgweEZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9HQUlOXzZfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9HQUlOXzZfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfNyAtIERDT0MgVFpBIERBQyBTdGVwIDcgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfUkNQXzdfTUFTSyAoMHgxRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfUkNQXzdfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9SQ1BfNyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX1JDUF83X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9SQ1BfN19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzdfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX0dBSU5fN19TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzdfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX0dBSU5fN19NQVNLKQorCisvKiEgQG5hbWUgRENPQ19UWkFfU1RFUF84IC0gRENPQyBUWkEgREFDIFN0ZXAgNSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOF9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzhfRENPQ19UWkFfU1RFUF9SQ1BfOF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX1JDUF84KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfUkNQXzhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX1JDUF84X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOF9NQVNLICgweDFGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfR0FJTl84X1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfR0FJTl84X01BU0spCisKKy8qISBAbmFtZSBEQ09DX1RaQV9TVEVQXzkgLSBEQ09DIFRaQSBEQUMgU3RlcCA5ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85X01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfUkNQXzkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9SQ1BfOV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfUkNQXzlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85X01BU0sgKDB4M0ZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9HQUlOXzlfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9HQUlOXzlfTUFTSykKKworLyohIEBuYW1lIERDT0NfVFpBX1NURVBfMTAgLSBEQ09DIFRaQSBEQUMgU3RlcCAxMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfUkNQXzEwX01BU0sgKDB4MUZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9SQ1BfMTBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfUkNQXzEwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfR0FJTl8xMF9NQVNLICgweDNGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX0dBSU5fMTBfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX0dBSU5fMTAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfR0FJTl8xMF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX0dBSU5fMTBfTUFTSykKKworLyohIEBuYW1lIERDT0NfQ0FMX0FMUEhBIC0gRENPQyBDYWxpYnJhdGlvbiBBbHBoYSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9BTFBIQV9EQ09DX0NBTF9BTFBIQV9JX01BU0sgKDB4N0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfSV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0FMUEhBX0RDT0NfQ0FMX0FMUEhBX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9BTFBIQV9EQ09DX0NBTF9BTFBIQV9JX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9BTFBIQV9EQ09DX0NBTF9BTFBIQV9JX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0FMUEhBX0RDT0NfQ0FMX0FMUEhBX1FfTUFTSyAoMHg3RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfUV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9BTFBIQV9EQ09DX0NBTF9BTFBIQV9RKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfUV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfQUxQSEFfRENPQ19DQUxfQUxQSEFfUV9NQVNLKQorCisvKiEgQG5hbWUgRENPQ19DQUxfQkVUQV9RIC0gRENPQyBDYWxpYnJhdGlvbiBCZXRhIFEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9RX0RDT0NfQ0FMX0JFVEFfUV9NQVNLICgweDFGRkZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9RX0RDT0NfQ0FMX0JFVEFfUV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0JFVEFfUV9EQ09DX0NBTF9CRVRBX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX1FfRENPQ19DQUxfQkVUQV9RX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX1FfRENPQ19DQUxfQkVUQV9RX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NBTF9CRVRBX0kgLSBEQ09DIENhbGlicmF0aW9uIEJldGEgSSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX0lfRENPQ19DQUxfQkVUQV9JX01BU0sgKDB4MUZGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9CRVRBX0lfRENPQ19DQUxfQkVUQV9JX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQkVUQV9JX0RDT0NfQ0FMX0JFVEFfSSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0JFVEFfSV9EQ09DX0NBTF9CRVRBX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0JFVEFfSV9EQ09DX0NBTF9CRVRBX0lfTUFTSykKKworLyohIEBuYW1lIERDT0NfQ0FMX0dBTU1BIC0gRENPQyBDYWxpYnJhdGlvbiBHYW1tYSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9JX01BU0sgKDB4RkZGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBTU1BX0RDT0NfQ0FMX0dBTU1BX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9JKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FNTUFfRENPQ19DQUxfR0FNTUFfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9RX01BU0sgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9RX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBTU1BX0RDT0NfQ0FMX0dBTU1BX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9RX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQU1NQV9EQ09DX0NBTF9HQU1NQV9RX01BU0spCisKKy8qISBAbmFtZSBEQ09DX0NBTF9JSVIgLSBEQ09DIENhbGlicmF0aW9uIElJUiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYX01BU0sgKDB4M1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFhfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYX01BU0sgKDB4Q1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFhfU0hJRlQgKDJVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWF9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYX01BU0sgKDB4MzBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFhfTUFTSykKKworLyohIEBuYW1lIERDT0NfQ0FMIC0gRENPQyBDYWxpYnJhdGlvbiBSZXN1bHQgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX0lfTUFTSyAoMHhGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9EQ09DX0NBTF9SRVNfSV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19JKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9EQ09DX0NBTF9SRVNfSV9TSElGVCkpICYgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX0lfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX1FfTUFTSyAoMHhGRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX1FfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfRENPQ19DQUxfUkVTX1EoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0RDT0NfQ0FMX1JFU19RX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9EQ09DX0NBTF9SRVNfUV9NQVNLKQorCisvKiBUaGUgY291bnQgb2YgWENWUl9SWF9ESUdfRENPQ19DQUwgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfRENPQ19DQUxfQ09VTlQgICAgICAgICAgICAgICAoM1UpCisKKy8qISBAbmFtZSBDQ0FfRURfTFFJX0NUUkxfMCAtIFJYX0RJRyBDQ0EgRUQgTFFJIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ09SUl9USFJFU0hfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DT1JSX1RIUkVTSF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DT1JSX1RIUkVTSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DT1JSX1RIUkVTSF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfTFFJX0NPUlJfVEhSRVNIX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0NPUlJfQ05UUl9USFJFU0hfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfQ09SUl9DTlRSX1RIUkVTSF9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0NPUlJfQ05UUl9USFJFU0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9DT1JSX0NOVFJfVEhSRVNIX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9DT1JSX0NOVFJfVEhSRVNIX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DTlRSX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfTFFJX0NOVFJfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfTFFJX0NOVFIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9MUUlfQ05UUl9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfTFFJX0NOVFJfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfU05SX0FESl9NQVNLICgweDNGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfU05SX0FESl9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9TTlJfQURKKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfU05SX0FESl9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzBfU05SX0FESl9NQVNLKQorCisvKiEgQG5hbWUgQ0NBX0VEX0xRSV9DVFJMXzEgLSBSWF9ESUcgQ0NBIEVEIExRSSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfREVMQVlfTUFTSyAoMHgzRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0RFTEFZX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfREVMQVkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9SU1NJX05PSVNFX0FWR19ERUxBWV9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfREVMQVlfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfRkFDVE9SX01BU0sgKDB4MUMwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfRkFDVE9SX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfRkFDVE9SKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfUlNTSV9OT0lTRV9BVkdfRkFDVE9SX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9SU1NJX05PSVNFX0FWR19GQUNUT1JfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfV0VJR0hUX01BU0sgKDB4RTAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfV0VJR0hUX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfV0VJR0hUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfV0VJR0hUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9XRUlHSFRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX1JTU0lfU0VOU19NQVNLICgweEYwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9TRU5TX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9SU1NJX1NFTlMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9TRU5TX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9TRU5TX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfRElTX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX0RJU19TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfRElTX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX0RJU19NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TRUxfU05SX01PREVfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NFTF9TTlJfTU9ERV9TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TRUxfU05SX01PREUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TRUxfU05SX01PREVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NFTF9TTlJfTU9ERV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NRUFTX1RSQU5TX1RPX0lETEVfTUFTSyAoMHg0MDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01FQVNfVFJBTlNfVE9fSURMRV9TSElGVCAoMThVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NRUFTX1RSQU5TX1RPX0lETEUoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NRUFTX1RSQU5TX1RPX0lETEVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01FQVNfVFJBTlNfVE9fSURMRV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9DQ0ExX0VEX0VOX0RJU19NQVNLICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfQ0NBMV9FRF9FTl9ESVNfU0hJRlQgKDE5VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfQ0NBMV9FRF9FTl9ESVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9DQ0ExX0VEX0VOX0RJU19TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfQ0NBMV9FRF9FTl9ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX01FQVNfQ09NUExFVEVfTUFTSyAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fTUVBU19DT01QTEVURV9TSElGVCAoMjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fTUVBU19DT01QTEVURSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX01BTl9NRUFTX0NPTVBMRVRFX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fTUVBU19DT01QTEVURV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fQUFfTUFUQ0hfTUFTSyAoMHgyMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fQUFfTUFUQ0hfU0hJRlQgKDIxVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX0FBX01BVENIKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX0FBX01BVENIX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NQU5fQUFfTUFUQ0hfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9XRUlHSFRfTUFTSyAoMHhGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9XRUlHSFRfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9XRUlHSFQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TTlJfTFFJX1dFSUdIVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9XRUlHSFRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX0JJQVNfTUFTSyAoMHhGMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9CSUFTX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9CSUFTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX0JJQVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX0xRSV9CSUFTX01BU0spCisKKy8qISBAbmFtZSBDQ0FfRURfTFFJX1NUQVRfMCAtIFJYX0RJRyBDQ0EgRUQgTFFJIFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0xRSV9PVVRfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0xRSV9PVVRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9MUUlfT1VUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfTFFJX09VVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfTFFJX09VVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9FRF9PVVRfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfRURfT1VUX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfRURfT1VUKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0VEX09VVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfRURfT1VUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX1NOUl9PVVRfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9TTlJfT1VUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX1NOUl9PVVQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9TTlJfT1VUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9TTlJfT1VUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX0NDQTFfU1RBVEVfTUFTSyAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfQ0NBMV9TVEFURV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9DQ0ExX1NUQVRFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfQ0NBMV9TVEFURV9TSElGVCkpICYgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfQ0NBMV9TVEFURV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX1NUQVRfMF9NRUFTX0NPTVBMRVRFX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX01FQVNfQ09NUExFVEVfU0hJRlQgKDI1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9TVEFUXzBfTUVBU19DT01QTEVURSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX01FQVNfQ09NUExFVEVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfU1RBVF8wX01FQVNfQ09NUExFVEVfTUFTSykKKworLyohIEBuYW1lIFJYX0NIRl9DT0VGXzAgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMF9SWF9DSF9GSUxUX0gwX01BU0sgKDB4M0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8wX1JYX0NIX0ZJTFRfSDBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8wX1JYX0NIX0ZJTFRfSDAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8wX1JYX0NIX0ZJTFRfSDBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzBfUlhfQ0hfRklMVF9IMF9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfMSAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xX1JYX0NIX0ZJTFRfSDFfTUFTSyAoMHgzRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzFfUlhfQ0hfRklMVF9IMV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzFfUlhfQ0hfRklMVF9IMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzFfUlhfQ0hfRklMVF9IMV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMV9SWF9DSF9GSUxUX0gxX01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl8yIC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCAyICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzJfUlhfQ0hfRklMVF9IMl9NQVNLICgweDdGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMl9SWF9DSF9GSUxUX0gyX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMl9SWF9DSF9GSUxUX0gyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMl9SWF9DSF9GSUxUX0gyX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8yX1JYX0NIX0ZJTFRfSDJfTUFTSykKKworLyohIEBuYW1lIFJYX0NIRl9DT0VGXzMgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfM19SWF9DSF9GSUxUX0gzX01BU0sgKDB4N0ZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8zX1JYX0NIX0ZJTFRfSDNfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8zX1JYX0NIX0ZJTFRfSDMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8zX1JYX0NIX0ZJTFRfSDNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzNfUlhfQ0hfRklMVF9IM19NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfNCAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgNCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl80X1JYX0NIX0ZJTFRfSDRfTUFTSyAoMHg3RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzRfUlhfQ0hfRklMVF9INF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzRfUlhfQ0hfRklMVF9INCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzRfUlhfQ0hfRklMVF9INF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNF9SWF9DSF9GSUxUX0g0X01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl81IC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA1ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzVfUlhfQ0hfRklMVF9INV9NQVNLICgweDdGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNV9SWF9DSF9GSUxUX0g1X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNV9SWF9DSF9GSUxUX0g1KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNV9SWF9DSF9GSUxUX0g1X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl81X1JYX0NIX0ZJTFRfSDVfTUFTSykKKworLyohIEBuYW1lIFJYX0NIRl9DT0VGXzYgLSBSZWNlaXZlIENoYW5uZWwgRmlsdGVyIENvZWZmaWNpZW50IDYgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfNl9SWF9DSF9GSUxUX0g2X01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl82X1JYX0NIX0ZJTFRfSDZfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl82X1JYX0NIX0ZJTFRfSDYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl82X1JYX0NIX0ZJTFRfSDZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzZfUlhfQ0hfRklMVF9INl9NQVNLKQorCisvKiEgQG5hbWUgUlhfQ0hGX0NPRUZfNyAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgNyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl83X1JYX0NIX0ZJTFRfSDdfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzdfUlhfQ0hfRklMVF9IN19TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzdfUlhfQ0hfRklMVF9INyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzdfUlhfQ0hfRklMVF9IN19TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfN19SWF9DSF9GSUxUX0g3X01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl84IC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA4ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzhfUlhfQ0hfRklMVF9IOF9NQVNLICgweDFGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzhfUlhfQ0hfRklMVF9IOF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzhfUlhfQ0hfRklMVF9IOCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzhfUlhfQ0hfRklMVF9IOF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfOF9SWF9DSF9GSUxUX0g4X01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl85IC0gUmVjZWl2ZSBDaGFubmVsIEZpbHRlciBDb2VmZmljaWVudCA5ICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzlfUlhfQ0hfRklMVF9IOV9NQVNLICgweDFGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzlfUlhfQ0hfRklMVF9IOV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzlfUlhfQ0hfRklMVF9IOSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzlfUlhfQ0hfRklMVF9IOV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfOV9SWF9DSF9GSUxUX0g5X01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl8xMCAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMTAgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMTBfUlhfQ0hfRklMVF9IMTBfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xMF9SWF9DSF9GSUxUX0gxMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzEwX1JYX0NIX0ZJTFRfSDEwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMTBfUlhfQ0hfRklMVF9IMTBfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzEwX1JYX0NIX0ZJTFRfSDEwX01BU0spCisKKy8qISBAbmFtZSBSWF9DSEZfQ09FRl8xMSAtIFJlY2VpdmUgQ2hhbm5lbCBGaWx0ZXIgQ29lZmZpY2llbnQgMTEgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMTFfUlhfQ0hfRklMVF9IMTFfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9DSEZfQ09FRl8xMV9SWF9DSF9GSUxUX0gxMV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzExX1JYX0NIX0ZJTFRfSDExKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfQ0hGX0NPRUZfMTFfUlhfQ0hfRklMVF9IMTFfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX0NIRl9DT0VGXzExX1JYX0NIX0ZJTFRfSDExX01BU0spCisKKy8qISBAbmFtZSBBR0NfTUFOX0FHQ19JRFggLSBBR0MgTWFudWFsIEFHQyBJbmRleCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfTUFTSyAoMHgxRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19NQU5fSURYX0VOX01BU0sgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfTUFOX0lEWF9FTl9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX01BTl9JRFhfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfTUFOX0lEWF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BR0NfTUFOX0FHQ19JRFhfQUdDX0RDT0NfU1RBUlRfUFRfTUFTSyAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19EQ09DX1NUQVJUX1BUX1NISUZUICgyNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfRENPQ19TVEFSVF9QVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FHQ19NQU5fQUdDX0lEWF9BR0NfRENPQ19TVEFSVF9QVF9TSElGVCkpICYgWENWUl9SWF9ESUdfQUdDX01BTl9BR0NfSURYX0FHQ19EQ09DX1NUQVJUX1BUX01BU0spCisKKy8qISBAbmFtZSBEQ19SRVNJRF9DVFJMIC0gREMgUmVzaWR1YWwgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU5fTUFTSyAoMHg3RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTl9TSElGVCkpICYgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfSVRFUl9GUkVFWkVfTUFTSyAoMHhGMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0lURVJfRlJFRVpFX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9JVEVSX0ZSRUVaRSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfSVRFUl9GUkVFWkVfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfSVRFUl9GUkVFWkVfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9BTFBIQV9NQVNLICgweDcwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0FMUEhBX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfQUxQSEEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0FMUEhBX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0FMUEhBX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZX01BU0sgKDB4NzAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0VYVF9EQ19FTl9NQVNLICgweDEwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRVhUX0RDX0VOX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRVhUX0RDX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9FWFRfRENfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRVhUX0RDX0VOX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTUlOX0FHQ19JRFhfTUFTSyAoMHgxRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTUlOX0FHQ19JRFhfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9NSU5fQUdDX0lEWCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTUlOX0FHQ19JRFhfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTUlOX0FHQ19JRFhfTUFTSykKKworLyohIEBuYW1lIERDX1JFU0lEX0VTVCAtIERDIFJlc2lkdWFsIEVzdGltYXRlICovCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0VTVF9EQ19SRVNJRF9PRkZTRVRfSV9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX0lfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX0koeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX0lfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDX1JFU0lEX0VTVF9EQ19SRVNJRF9PRkZTRVRfSV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX1FfTUFTSyAoMHgxRkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0RDX1JFU0lEX0VTVF9EQ19SRVNJRF9PRkZTRVRfUV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX1EoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9FU1RfRENfUkVTSURfT0ZGU0VUX1FfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0RDX1JFU0lEX0VTVF9EQ19SRVNJRF9PRkZTRVRfUV9NQVNLKQorCisvKiEgQG5hbWUgUlhfUkNDQUxfQ1RSTDAgLSBSWCBSQyBDYWxpYnJhdGlvbiBDb250cm9sMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUX01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMX01BU0sgKDB4MUYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVNfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWV9NQVNLICgweDMwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WX1NISUZUICgxNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVRfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVRfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVRfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTF9NQVNLICgweDFGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVNfTUFTSyAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJU19TSElGVCAoMjVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJU19TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJU19NQVNLKQorCisvKiEgQG5hbWUgUlhfUkNDQUxfQ1RSTDEgLSBSWCBSQyBDYWxpYnJhdGlvbiBDb250cm9sMSAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUX01BU0sgKDB4RlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVRfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMX01BU0sgKDB4MUYwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTF9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVNfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTX1NISUZUICg5VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVNfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVRfTUFTSyAoMHhGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVRfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMX01BU0sgKDB4MUYwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUxfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTX01BU0sgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTX1NISUZUICgyNVUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVNfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTX01BU0spCisKKy8qISBAbmFtZSBSWF9SQ0NBTF9TVEFUIC0gUlggUkMgQ2FsaWJyYXRpb24gU3RhdHVzICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfUkNDQUxfQ09ERV9NQVNLICgweDFGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9SQ0NBTF9DT0RFX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9SQ0NBTF9DT0RFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfUkNDQUxfQ09ERV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9SQ0NBTF9DT0RFX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQURDX1JDQ0FMX01BU0sgKDB4M0UwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9BRENfUkNDQUxfU0hJRlQgKDVVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0FEQ19SQ0NBTCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9BRENfUkNDQUxfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQURDX1JDQ0FMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBMl9SQ0NBTF9NQVNLICgweDdDMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0JCQTJfUkNDQUxfU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9CQkEyX1JDQ0FMKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBMl9SQ0NBTF9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9CQkEyX1JDQ0FMX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBX1JDQ0FMX01BU0sgKDB4MUYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9CQkFfUkNDQUxfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9CQkFfUkNDQUwoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfQkJBX1JDQ0FMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX0JCQV9SQ0NBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX1RaQV9SQ0NBTF9NQVNLICgweDNFMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX1RaQV9SQ0NBTF9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9TVEFUX1RaQV9SQ0NBTCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhfUkNDQUxfU1RBVF9UWkFfUkNDQUxfU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYX1JDQ0FMX1NUQVRfVFpBX1JDQ0FMX01BU0spCisKKy8qISBAbmFtZSBBVVhQTExfRkNBTF9DVFJMIC0gQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX01BTlVBTF9NQVNLICgweDdGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9EQUNfQ0FMX0FESlVTVF9NQU5VQUxfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX01BTlVBTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfREFDX0NBTF9BREpVU1RfTUFOVUFMX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX01BTlVBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0FVWFBMTF9EQUNfQ0FMX0FESlVTVF9ESVNfTUFTSyAoMHg4MFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfQVVYUExMX0RBQ19DQUxfQURKVVNUX0RJU19TSElGVCAoN1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfQVVYUExMX0RBQ19DQUxfQURKVVNUX0RJUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfQVVYUExMX0RBQ19DQUxfQURKVVNUX0RJU19TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9BVVhQTExfREFDX0NBTF9BREpVU1RfRElTX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9SVU5fQ05UX01BU0sgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX1JVTl9DTlRfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfUlVOX0NOVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9SVU5fQ05UX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfUlVOX0NOVF9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfQ09NUF9JTlZfTUFTSyAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfQ09NUF9JTlZfU0hJRlQgKDlVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfQ09NUF9JTlYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfQ09NUF9JTlZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9DT01QX0lOVl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0ZDQUxfU01QX0RMWV9NQVNLICgweEMwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9TTVBfRExZX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9TTVBfRExZKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ1RSTF9GQ0FMX1NNUF9ETFlfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfRkNBTF9TTVBfRExZX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfREFDX0NBTF9BREpVU1RfTUFTSyAoMHg3RjAwMDBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NUUkxfREFDX0NBTF9BREpVU1QoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DVFJMX0RBQ19DQUxfQURKVVNUX01BU0spCisKKy8qISBAbmFtZSBBVVhQTExfRkNBTF9DTlQ2IC0gQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgNiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQ09VTlRfNl9NQVNLICgweDNGRlUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDZfRkNBTF9DT1VOVF82X1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0NPVU5UXzYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQ09VTlRfNl9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0NPVU5UXzZfTUFTSykKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNl9GQ0FMX0JFU1RESUZGX01BU0sgKDB4M0ZGMDAwMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDZfRkNBTF9CRVNURElGRl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQkVTVERJRkYoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ2X0ZDQUxfQkVTVERJRkZfU0hJRlQpKSAmIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDZfRkNBTF9CRVNURElGRl9NQVNLKQorCisvKiEgQG5hbWUgQVVYUExMX0ZDQUxfQ05UNV80IC0gQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgNSBhbmQgNCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ1XzRfRkNBTF9DT1VOVF80X01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDVfNF9GQ0FMX0NPVU5UXzQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ1XzRfRkNBTF9DT1VOVF80X1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ1XzRfRkNBTF9DT1VOVF80X01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDVfNF9GQ0FMX0NPVU5UXzVfTUFTSyAoMHgzRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQ1XzRfRkNBTF9DT1VOVF81KHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNV9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UNV80X0ZDQUxfQ09VTlRfNV9NQVNLKQorCisvKiEgQG5hbWUgQVVYUExMX0ZDQUxfQ05UM18yIC0gQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgMyBhbmQgMiAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQzXzJfRkNBTF9DT1VOVF8yX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfMl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDNfMl9GQ0FMX0NPVU5UXzIoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQzXzJfRkNBTF9DT1VOVF8yX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQzXzJfRkNBTF9DT1VOVF8yX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDNfMl9GQ0FMX0NPVU5UXzNfTUFTSyAoMHgzRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfM19TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQzXzJfRkNBTF9DT1VOVF8zKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfM19TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UM18yX0ZDQUxfQ09VTlRfM19NQVNLKQorCisvKiEgQG5hbWUgQVVYUExMX0ZDQUxfQ05UMV8wIC0gQXV4IFBMTCBGcmVxdWVuY3kgQ2FsaWJyYXRpb24gQ291bnQgMSBhbmQgMCAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQxXzBfRkNBTF9DT1VOVF8wX01BU0sgKDB4M0ZGVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDFfMF9GQ0FMX0NPVU5UXzAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQxXzBfRkNBTF9DT1VOVF8wX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQxXzBfRkNBTF9DT1VOVF8wX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX0FVWFBMTF9GQ0FMX0NOVDFfMF9GQ0FMX0NPVU5UXzFfTUFTSyAoMHgzRkYwMDAwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19BVVhQTExfRkNBTF9DTlQxXzBfRkNBTF9DT1VOVF8xKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMV9TSElGVCkpICYgWENWUl9SWF9ESUdfQVVYUExMX0ZDQUxfQ05UMV8wX0ZDQUxfQ09VTlRfMV9NQVNLKQorCisvKiEgQG5hbWUgUlhESUdfREZUIC0gUlhESUcgREZUICovCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9GUkVRX01BU0sgKDB4N1UpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9GUkVRX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX0ZSRVEoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9GUkVRX1NISUZUKSkgJiBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfRlJFUV9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfU0NBTEVfTUFTSyAoMHg4VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1NDQUxFX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1NDQUxFKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9TQ0FMRV9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1NDQUxFX01BU0spCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9UWkFfRU5fTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9UWkFfRU5fU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfVFpBX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1RaQV9FTl9TSElGVCkpICYgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX1RaQV9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfQkJBX0VOX01BU0sgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX1JYX0RJR19SWERJR19ERlRfREZUX1RPTkVfQkJBX0VOX1NISUZUICg1VSkKKyNkZWZpbmUgWENWUl9SWF9ESUdfUlhESUdfREZUX0RGVF9UT05FX0JCQV9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9CQkFfRU5fU0hJRlQpKSAmIFhDVlJfUlhfRElHX1JYRElHX0RGVF9ERlRfVE9ORV9CQkFfRU5fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfUlhfRElHX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9SWF9ESUcgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1JYX0RJRyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QzAwMHUpCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1JYX0RJRyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfUlhfRElHX1R5cGUgKilYQ1ZSX1JYX0RJR19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfUlhfRElHIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9SWF9ESUdfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICB7IFhDVlJfUlhfRElHX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfUlhfRElHIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBYQ1ZSX1JYX0RJR19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgIHsgWENWUl9SWF9ESUcgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfUlhfRElHX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9UU00gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1RTTV9QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX1RTTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9UU00gLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUUkFOU0NFSVZFUiBTRVFVRU5DRSBNQU5BR0VSIENPTlRST0wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgRU5EX09GX1NFUTsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTSBFTkQgT0YgU0VRVUVOQ0UsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgT1ZSRDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTSBPVkVSUklERSBSRUdJU1RFUiAwLCBvZmZzZXQ6IDB4OCAqLworICBfX0lPIHVpbnQzMl90IE9WUkQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU00gT1ZFUlJJREUgUkVHSVNURVIgMSwgb2Zmc2V0OiAweEMgKi8KKyAgX19JTyB1aW50MzJfdCBPVlJEMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNIE9WRVJSSURFIFJFR0lTVEVSIDIsIG9mZnNldDogMHgxMCAqLworICBfX0lPIHVpbnQzMl90IE9WUkQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU00gT1ZFUlJJREUgUkVHSVNURVIgMywgb2Zmc2V0OiAweDE0ICovCisgIF9fSU8gdWludDMyX3QgUEFfUE9XRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBIFBPV0VSLCBvZmZzZXQ6IDB4MTggKi8KKyAgX19JTyB1aW50MzJfdCBQQV9SQU1QX1RCTDA7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEEgUkFNUCBUQUJMRSAwLCBvZmZzZXQ6IDB4MUMgKi8KKyAgX19JTyB1aW50MzJfdCBQQV9SQU1QX1RCTDE7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgUEEgUkFNUCBUQUJMRSAxLCBvZmZzZXQ6IDB4MjAgKi8KKyAgX19JTyB1aW50MzJfdCBSRUNZQ0xFX0NPVU5UOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNIFJFQ1lDTEUgQ09VTlQsIG9mZnNldDogMHgyNCAqLworICBfX0lPIHVpbnQzMl90IEZBU1RfQ1RSTDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU00gRkFTVCBXQVJNVVAgQ09OVFJPTCBSRUdJU1RFUiAxLCBvZmZzZXQ6IDB4MjggKi8KKyAgX19JTyB1aW50MzJfdCBGQVNUX0NUUkwyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNIEZBU1QgV0FSTVVQIENPTlRST0wgUkVHSVNURVIgMiwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwMCwgb2Zmc2V0OiAweDMwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwMSwgb2Zmc2V0OiAweDM0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwMiwgb2Zmc2V0OiAweDM4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwMywgb2Zmc2V0OiAweDNDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwNCwgb2Zmc2V0OiAweDQwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwNSwgb2Zmc2V0OiAweDQ0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwNiwgb2Zmc2V0OiAweDQ4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwNywgb2Zmc2V0OiAweDRDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwOCwgb2Zmc2V0OiAweDUwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMDk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcwOSwgb2Zmc2V0OiAweDU0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxMCwgb2Zmc2V0OiAweDU4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxMSwgb2Zmc2V0OiAweDVDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxMiwgb2Zmc2V0OiAweDYwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxMywgb2Zmc2V0OiAweDY0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxNCwgb2Zmc2V0OiAweDY4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxNSwgb2Zmc2V0OiAweDZDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxNiwgb2Zmc2V0OiAweDcwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxNywgb2Zmc2V0OiAweDc0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxOCwgb2Zmc2V0OiAweDc4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcxOSwgb2Zmc2V0OiAweDdDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyMCwgb2Zmc2V0OiAweDgwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyMSwgb2Zmc2V0OiAweDg0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyMiwgb2Zmc2V0OiAweDg4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyMywgb2Zmc2V0OiAweDhDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyNCwgb2Zmc2V0OiAweDkwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyNSwgb2Zmc2V0OiAweDk0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyNiwgb2Zmc2V0OiAweDk4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyNywgb2Zmc2V0OiAweDlDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyOCwgb2Zmc2V0OiAweEEwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMjk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkcyOSwgb2Zmc2V0OiAweEE0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczMCwgb2Zmc2V0OiAweEE4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczMSwgb2Zmc2V0OiAweEFDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczMiwgb2Zmc2V0OiAweEIwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczMywgb2Zmc2V0OiAweEI0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczNCwgb2Zmc2V0OiAweEI4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczNSwgb2Zmc2V0OiAweEJDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczNiwgb2Zmc2V0OiAweEMwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczNywgb2Zmc2V0OiAweEM0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczOCwgb2Zmc2V0OiAweEM4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HMzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkczOSwgb2Zmc2V0OiAweENDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0MCwgb2Zmc2V0OiAweEQwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0MSwgb2Zmc2V0OiAweEQ0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0Miwgb2Zmc2V0OiAweEQ4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0Mywgb2Zmc2V0OiAweERDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0NCwgb2Zmc2V0OiAweEUwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0NSwgb2Zmc2V0OiAweEU0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0Niwgb2Zmc2V0OiAweEU4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0Nywgb2Zmc2V0OiAweEVDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0OCwgb2Zmc2V0OiAweEYwICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNDk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc0OSwgb2Zmc2V0OiAweEY0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1MCwgb2Zmc2V0OiAweEY4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1MSwgb2Zmc2V0OiAweEZDICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1Miwgb2Zmc2V0OiAweDEwMCAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzUzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTMsIG9mZnNldDogMHgxMDQgKi8KKyAgX19JTyB1aW50MzJfdCBUSU1JTkc1NDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNX1RJTUlORzU0LCBvZmZzZXQ6IDB4MTA4ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1NSwgb2Zmc2V0OiAweDEwQyAqLworICBfX0lPIHVpbnQzMl90IFRJTUlORzU2OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUU01fVElNSU5HNTYsIG9mZnNldDogMHgxMTAgKi8KKyAgX19JTyB1aW50MzJfdCBUSU1JTkc1NzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFNNX1RJTUlORzU3LCBvZmZzZXQ6IDB4MTE0ICovCisgIF9fSU8gdWludDMyX3QgVElNSU5HNTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRTTV9USU1JTkc1OCwgb2Zmc2V0OiAweDExOCAqLworfSBYQ1ZSX1RTTV9UeXBlOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBYQ1ZSX1RTTSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfVFNNX1JlZ2lzdGVyX01hc2tzIFhDVlJfVFNNIFJlZ2lzdGVyIE1hc2tzCisgKiBAeworICovCisKKy8qISBAbmFtZSBDVFJMIC0gVFJBTlNDRUlWRVIgU0VRVUVOQ0UgTUFOQUdFUiBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSyAgICAgICAgICAgKDB4NFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fU0hJRlQgICAgICAgICAgKDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9GT1JDRV9UWF9FTl9TSElGVCkpICYgWENWUl9UU01fQ1RSTF9GT1JDRV9UWF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1JYX0VOX01BU0sgICAgICAgICAgICgweDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0ZPUkNFX1JYX0VOX1NISUZUICAgICAgICAgICgzVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9GT1JDRV9SWF9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfRk9SQ0VfUlhfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfRk9SQ0VfUlhfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9QQV9SQU1QX1NFTF9NQVNLICAgICAgICAgICAoMHgzMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfUEFfUkFNUF9TRUxfU0hJRlQgICAgICAgICAgKDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1BBX1JBTVBfU0VMKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9QQV9SQU1QX1NFTF9TSElGVCkpICYgWENWUl9UU01fQ1RSTF9QQV9SQU1QX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0RBVEFfUEFERElOR19FTl9NQVNLICAgICAgICgweEMwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9EQVRBX1BBRERJTkdfRU5fU0hJRlQgICAgICAoNlUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfREFUQV9QQURESU5HX0VOKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX0RBVEFfUEFERElOR19FTl9TSElGVCkpICYgWENWUl9UU01fQ1RSTF9EQVRBX1BBRERJTkdfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UU01fSVJRMF9FTl9NQVNLICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlEwX0VOX1NISUZUICAgICAgICAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UU01fSVJRMF9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfVFNNX0lSUTBfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTBfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UU01fSVJRMV9FTl9NQVNLICAgICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1RTTV9JUlExX0VOX1NISUZUICAgICAgICAgICg5VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UU01fSVJRMV9FTih4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfVFNNX0lSUTFfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfVFNNX0lSUTFfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9SQU1QX0ROX0RFTEFZX01BU0sgICAgICAgICAoMHhGMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9SQU1QX0ROX0RFTEFZX1NISUZUICAgICAgICAoMTJVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1JBTVBfRE5fREVMQVkoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9SQU1QX0ROX0RFTEFZX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX1JBTVBfRE5fREVMQVlfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UWF9BQk9SVF9ESVNfTUFTSyAgICAgICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfVFhfQUJPUlRfRElTX1NISUZUICAgICAgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9UWF9BQk9SVF9ESVMoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfVFhfQUJPUlRfRElTX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX1RYX0FCT1JUX0RJU19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1JYX0FCT1JUX0RJU19NQVNLICAgICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9SWF9BQk9SVF9ESVNfU0hJRlQgICAgICAgICAoMTdVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX1JYX0FCT1JUX0RJUyh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9SWF9BQk9SVF9ESVNfU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfUlhfQUJPUlRfRElTX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1RVTkVfTUFTSyAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NUVU5FX1NISUZUICAgICAgICgxOFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1RVTkUoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NUVU5FX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NUVU5FX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1lDTEVfU0xJUF9NQVNLICAgKDB4ODAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NZQ0xFX1NMSVBfU0hJRlQgICgxOVUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1lDTEVfU0xJUCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0NZQ0xFX1NMSVBfU0hJRlQpKSAmIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fQ1lDTEVfU0xJUF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0ZSRVFfVEFSR19NQVNLICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fRlJFUV9UQVJHX1NISUZUICAgKDIwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9GUkVRX1RBUkcoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0NUUkxfQUJPUlRfT05fRlJFUV9UQVJHX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0ZSRVFfVEFSR19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0JLUFRfTUFTSyAgICAgICAgICAgICAgICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fQ1RSTF9CS1BUX1NISUZUICAgICAgICAgICAgICAgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9DVFJMX0JLUFQoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fQ1RSTF9CS1BUX1NISUZUKSkgJiBYQ1ZSX1RTTV9DVFJMX0JLUFRfTUFTSykKKworLyohIEBuYW1lIEVORF9PRl9TRVEgLSBUU00gRU5EIE9GIFNFUVVFTkNFICovCisjZGVmaW5lIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVX01BU0sgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV1UoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVX1NISUZUKSkgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XRF9NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XRF9TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV0QoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dEX1NISUZUKSkgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLICAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1UoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUKSkgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XRF9NQVNLICAgICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV0RfU0hJRlQgICAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XRCh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV0RfU0hJRlQpKSAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dEX01BU0spCisKKy8qISBAbmFtZSBPVlJEMCAtIFRTTSBPVkVSUklERSBSRUdJU1RFUiAwICovCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19IRl9FTl9PVlJEX0VOX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19IRl9FTl9PVlJEX0VOX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0hGX0VOX09WUkRfRU4oeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19IRl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9NQVNLICAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9TSElGVCAgICgxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0hGX0VOX09WUkQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19IRl9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fSEZfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfRU5fTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX0VOX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0FEQ0RBQ19FTl9PVlJEX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9TSElGVCAoM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRCh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQURDREFDX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfRU5fTUFTSyAoMHgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19CQkFfRU5fT1ZSRF9FTl9TSElGVCAoNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19CQkFfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19CQkFfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfTUFTSyAgICgweDIwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0JCQV9FTl9PVlJEX1NISUZUICAoNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19CQkFfRU5fT1ZSRCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fQkJBX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19CQkFfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9FTl9NQVNLICgweDQwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkRfRU5fU0hJRlQgKDZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9FTih4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19QRF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19QRF9FTl9PVlJEX01BU0sgICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9TSElGVCAgICg3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1BEX0VOX09WUkQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19QRF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fUERfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX0VOX01BU0sgKDB4MTAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9FTl9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0VOX09WUkRfTUFTSyAgKDB4MjAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfRU5fT1ZSRF9TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0VOX09WUkQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX0VOX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfRU5fU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfTUFTSyAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRU5fT1ZSRF9TSElGVCAoMTFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRU5fT1ZSRCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX0VOX01BU0sgKDB4MTAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX0VOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZUUkVGX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX01BU0sgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEX1NISUZUICgxM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WVFJFRl9FTl9PVlJEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVlRSRUZfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZUUkVGX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19CTEVFRF9FTl9PVlJEX0VOX1NISUZUICgxNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0JMRUVEX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19CTEVFRF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19CTEVFRF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19GREJLX0JMRUVEX0VOX09WUkRfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fRkRCS19CTEVFRF9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX0ZEQktfQkxFRURfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfRU5fU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX1NISUZUICgxN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19CTEVFRF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfRU5fU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fT1ZSRF9NQVNLICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fT1ZSRF9TSElGVCAoMTlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX09WUkRfRU5fU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX01BU0sgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX1NISUZUICgyMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fT1ZSRF9FTl9TSElGVCAoMjJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfTUFTSyAoMHg4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfU0hJRlQgKDIzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9BVVhQTExfUkVGX0NMS19FTl9PVlJEX0VOX01BU0sgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRF9FTl9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9CQl9YVEFMX0FVWFBMTF9SRUZfQ0xLX0VOX09WUkRfTUFTSyAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9BVVhQTExfUkVGX0NMS19FTl9PVlJEX1NISUZUICgyNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX0JCX1hUQUxfQVVYUExMX1JFRl9DTEtfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfQkJfWFRBTF9BVVhQTExfUkVGX0NMS19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX0VOX01BU0sgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX0VOX1NISUZUICgyNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0FVVE9UVU5FX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX01BU0sgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX1NISUZUICgyN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0FVVE9UVU5FX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19BVVRPVFVORV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfU1lfUERfQ1lDTEVfU0xJUF9MRF9FTl9PVlJEX0VOX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfU1lfUERfQ1lDTEVfU0xJUF9MRF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9NQVNLICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfU1lfUERfQ1lDTEVfU0xJUF9MRF9FTl9PVlJEX1NISUZUICgyOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX1NZX1BEX0NZQ0xFX1NMSVBfTERfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfU1lfUERfQ1lDTEVfU0xJUF9MRF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEX0VOX01BU0sgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9FTl9TSElGVCAgICgzMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0VOX09WUkRfTUFTSyAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEX1NISUZUICAgICAgKDMxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDBfU1lfVkNPX0VOX09WUkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQwX1NZX1ZDT19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMF9TWV9WQ09fRU5fT1ZSRF9NQVNLKQorCisvKiEgQG5hbWUgT1ZSRDEgLSBUU00gT1ZFUlJJREUgUkVHSVNURVIgMSAqLworI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9FTl9NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9FTl9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfQlVGX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfQlVGX0VOX09WUkQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0JVRl9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9CVUZfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9FTl9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9FTl9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfQlVGX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfQlVGX0VOX09WUkQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0JVRl9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9CVUZfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfRU5fTUFTSyAgICgweDEwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9FTl9PVlJEX0VOX1NISUZUICAoNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fRU5fT1ZSRF9FTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfTUFTSyAgICAgICgweDIwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9FTl9PVlJEX1NISUZUICAgICAoNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fRU5fT1ZSRCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0RJVk5fRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX09WUkRfRU5fTUFTSyAoMHg0MFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTl9TSElGVCAoNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fT1ZSRF9NQVNLICgweDgwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9PVlJEX1NISUZUICg3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRU5fT1ZSRF9FTl9NQVNLICAgICAoMHgxMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9FTl9PVlJEX0VOX1NISUZUICAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRU5fT1ZSRF9FTih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRU5fT1ZSRF9NQVNLICAgICAgICAoMHgyMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9QRF9FTl9PVlJEX1NISUZUICAgICAgICg5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfUERfRU5fT1ZSRCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX1BEX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fRElWTl9FTl9PVlJEX0VOX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fRElWTl9FTl9PVlJEX0VOX1NISUZUICgxMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19ESVZOX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19ESVZOX0VOX09WUkRfTUFTSyAgICgweDgwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9TSElGVCAgKDExVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fRElWTl9FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX0RJVk5fRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfTE9fRElWTl9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfRU5fTUFTSyAgKDB4MTAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfRU5fU0hJRlQgKDEyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX1JYX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfRU5fT1ZSRF9NQVNLICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfRU5fT1ZSRF9TSElGVCAgICAoMTNVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19SWF9FTl9PVlJEKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfTE9fUlhfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX0VOX01BU0sgICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX0VOX1NISUZUICgxNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0VOX09WUkRfRU4oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9TWV9MT19UWF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0VOX09WUkRfTUFTSyAgICAgKDB4ODAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0VOX09WUkRfU0hJRlQgICAgKDE1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfTE9fVFhfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1NZX0xPX1RYX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9FTl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0NBTF9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0NBTF9FTl9PVlJEX01BU0sgICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9TSElGVCAoMTdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9TWV9ESVZOX0NBTF9FTl9PVlJEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfU1lfRElWTl9DQUxfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9NSVhFUl9FTl9PVlJEX0VOX01BU0sgICgweDQwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9FTl9TSElGVCAoMThVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9NSVhFUl9FTl9PVlJEX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9NSVhFUl9FTl9PVlJEX01BU0sgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9TSElGVCAgICAoMTlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9NSVhFUl9FTl9PVlJEKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfUlhfTUlYRVJfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX0VOX01BU0sgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1RYX1BBX0VOX09WUkRfRU5fU0hJRlQgICAgKDIwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfVFhfUEFfRU5fT1ZSRF9FTih4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1RYX1BBX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1RYX1BBX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfVFhfUEFfRU5fT1ZSRF9NQVNLICAgICAgICAoMHgyMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX1NISUZUICAgICAgICgyMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1RYX1BBX0VOX09WUkQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9UWF9QQV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfRU5fTUFTSyAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX0lfRU5fT1ZSRF9FTl9TSElGVCAoMjJVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfSV9FTl9PVlJEX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfQURDX0lfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfUlhfQURDX0lfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfSV9FTl9PVlJEX01BU0sgICAgICgweDgwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfU0hJRlQgICAgKDIzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX0lfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19JX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9FTl9NQVNLICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9FTl9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUV9FTl9PVlJEX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfUlhfQURDX1FfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUV9FTl9PVlJEX01BU0sgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUV9FTl9PVlJEX1NISUZUICAgICgyNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19RX0VOX09WUkQoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX0VOX01BU0sgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX0VOX1NISUZUICgyNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDFfUlhfQURDX1JFU0VUX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX01BU0sgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEX1NISUZUICgyN1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0FEQ19SRVNFVF9FTl9PVlJEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMV9SWF9BRENfUkVTRVRfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDFfUlhfQURDX1JFU0VUX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX0lfRU5fT1ZSRF9FTl9NQVNLICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfRU5fU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX0lfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX0lfRU5fT1ZSRF9NQVNLICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfU0hJRlQgICAgKDI5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX0lfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9JX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX1FfRU5fT1ZSRF9FTl9NQVNLICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfRU5fU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX1FfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX1FfRU5fT1ZSRF9NQVNLICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfU0hJRlQgICAgKDMxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDFfUlhfQkJBX1FfRU5fT1ZSRCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQxX1JYX0JCQV9RX0VOX09WUkRfTUFTSykKKworLyohIEBuYW1lIE9WUkQyIC0gVFNNIE9WRVJSSURFIFJFR0lTVEVSIDIgKi8KKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9FTl9NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfUERFVF9FTl9PVlJEX0VOX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9NQVNLICAoMHgyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX1BERVRfRU5fT1ZSRF9TSElGVCAoMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9QREVUX0VOX09WUkQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfUERFVF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfUERFVF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfRU5fTUFTSyAoMHg0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfQkJBX0RDT0NfRU5fT1ZSRF9FTl9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfTUFTSyAgKDB4OFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0JCQV9EQ09DX0VOX09WUkRfU0hJRlQgKDNVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9CQkFfRENPQ19FTl9PVlJEKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfQkJBX0RDT0NfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfQkJBX0RDT0NfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9MTkFfRU5fT1ZSRF9FTl9NQVNLICAgICgweDEwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkRfRU5fU0hJRlQgICAoNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9MTkFfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkRfTUFTSyAgICAgICAoMHgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX1NISUZUICAgICAgKDVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9MTkFfRU5fT1ZSRCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfTE5BX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX0xOQV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfRU5fTUFTSyAgKDB4NDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfSV9FTl9PVlJEX0VOX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0lfRU5fT1ZSRF9FTih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0lfRU5fT1ZSRF9NQVNLICAgICAoMHg4MFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9JX0VOX09WUkRfU0hJRlQgICAgKDdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfSV9FTl9PVlJEKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0lfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0lfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUV9FTl9PVlJEX0VOX01BU0sgICgweDEwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9RX0VOX09WUkRfRU5fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUV9FTl9PVlJEX0VOKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUV9FTl9PVlJEX01BU0sgICAgICgweDIwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9RX0VOX09WUkRfU0hJRlQgICAgKDlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUV9FTl9PVlJEKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1FfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUERFVF9FTl9PVlJEX0VOX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRF9FTl9TSElGVCAoMTBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUERFVF9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfUERFVF9FTl9PVlJEX01BU0sgICgweDgwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkRfU0hJRlQgKDExVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX1BERVRfRU5fT1ZSRCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9QREVUX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0RDT0NfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX0VOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9UWkFfRENPQ19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkRfTUFTSyAgKDB4MjAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkRfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfVFpBX0RDT0NfRU5fT1ZSRCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1JYX1RaQV9EQ09DX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX0VOX01BU0sgICAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX0VOX1NISUZUICAoMTRVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9QTExfRElHX0VOX09WUkRfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9QTExfRElHX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX01BU0sgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX1NISUZUICAgICAoMTVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9QTExfRElHX0VOX09WUkQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUExMX0RJR19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9QTExfRElHX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkRfRU5fTUFTSyAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX0VOX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkRfRU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9UWF9ESUdfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9UWF9ESUdfRU5fT1ZSRF9NQVNLICAgICAgICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkRfU0hJRlQgICAgICAoMTdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9UWF9ESUdfRU5fT1ZSRCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfVFhfRElHX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1RYX0RJR19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEX0VOX01BU0sgICAgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9FTl9TSElGVCAgICgxOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEX0VOKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfRElHX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfRElHX0VOX09WUkRfTUFTSyAgICAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEX1NISUZUICAgICAgKDE5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfRElHX0VOX09WUkQoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX0RJR19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9ESUdfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9JTklUX09WUkRfRU5fTUFTSyAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9FTl9TSElGVCAgICAgKDIwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEX0VOKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX0lOSVRfT1ZSRF9NQVNLICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEX1NISUZUICAgICAgICAoMjFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9JTklUX09WUkQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfUlhfSU5JVF9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9JTklUX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfU0lHTUFfREVMVEFfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkRfRU5fU0hJRlQgKDIyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfU0lHTUFfREVMVEFfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfU0lHTUFfREVMVEFfRU5fT1ZSRF9NQVNLICAoMHg4MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEX1NISUZUICgyM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1NJR01BX0RFTFRBX0VOX09WUkQoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9TSUdNQV9ERUxUQV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1BIWV9FTl9PVlJEX0VOX01BU0sgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1BIWV9FTl9PVlJEX0VOX1NISUZUICAgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfUlhfUEhZX0VOX09WUkRfRU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX1JYX1BIWV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9NQVNLICAgICAgICgweDIwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9TSElGVCAgICAgICgyNVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX1JYX1BIWV9FTl9PVlJEKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEMl9SWF9QSFlfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDJfUlhfUEhZX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX0VOX01BU0sgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX0VOX1NISUZUICAgICAoMjZVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0VOX09WUkRfRU4oeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX01BU0sgICAgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX1NISUZUICAgICAgICAoMjdVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0VOX09WUkQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfRENPQ19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkRfRU5fTUFTSyAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX0VOX1NISUZUICAgKDI4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkRfRU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0lOSVRfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0lOSVRfT1ZSRF9NQVNLICAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkRfU0hJRlQgICAgICAoMjlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9EQ09DX0lOSVRfT1ZSRCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDJfRENPQ19JTklUX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQyX0RDT0NfSU5JVF9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEX0VOX01BU0sgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9FTl9TSElGVCAoMzBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9NQVNLICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfU0hJRlQgKDMxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEMl9GUkVRX1RBUkdfTERfRU5fT1ZSRF9NQVNLKQorCisvKiEgQG5hbWUgT1ZSRDMgLSBUU00gT1ZFUlJJREUgUkVHSVNURVIgMyAqLworI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUwX0VOX09WUkRfRU5fTUFTSyAoMHgxVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEX0VOX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9NQVNLICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTBfRU5fT1ZSRF9TSElGVCAgKDFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUwX0VOX09WUkQoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUwX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMV9FTl9PVlJEX0VOX01BU0sgKDB4NFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRF9FTl9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRF9FTih4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfTUFTSyAgICgweDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUxX0VOX09WUkRfU0hJRlQgICgzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMV9FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTFfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMV9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9FTl9NQVNLICgweDEwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMl9FTl9PVlJEX0VOX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMl9FTl9PVlJEX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9NQVNLICAgKDB4MjBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUyX0VOX09WUkRfU0hJRlQgICg1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMl9FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTJfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFMl9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9FTl9NQVNLICgweDQwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFM19FTl9PVlJEX0VOX1NISUZUICg2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFM19FTl9PVlJEX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFM19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9NQVNLICAgKDB4ODBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UU01fU1BBUkUzX0VOX09WUkRfU0hJRlQgICg3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFM19FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RTTV9TUEFSRTNfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFNNX1NQQVJFM19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9FTl9NQVNLICgweDEwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9FTl9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQklBU19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9NQVNLICgweDIwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9TSElGVCAoOVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0JJQVNfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQklBU19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1ZDT19FTl9PVlJEX0VOX01BU0sgKDB4NDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfRU5fU0hJRlQgKDEwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9WQ09fRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfVkNPX0VOX09WUkRfTUFTSyAoMHg4MDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9WQ09fRU5fT1ZSRF9TSElGVCAoMTFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9WQ09fRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1ZDT19FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9WQ09fRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9GQ0FMX0VOX09WUkRfRU5fTUFTSyAoMHgxMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEX0VOX1NISUZUICgxMlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0ZDQUxfRU5fT1ZSRF9NQVNLICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9GQ0FMX0VOX09WUkRfU0hJRlQgKDEzVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRkNBTF9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9GQ0FMX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9MRl9FTl9PVlJEX0VOX1NISUZUICgxNFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0xGX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9MRl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9MRl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0xGX0VOX09WUkRfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9TSElGVCAoMTVVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9MRl9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfTEZfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX0VOX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX0VOX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0VOX09WUkRfRU4oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0VOX09WUkRfTUFTSyAoMHgyMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0VOX09WUkRfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX1BEX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOX01BU0sgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX09WUkRfRU5fU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX01BU0sgKDB4ODAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX09WUkRfU0hJRlQgKDE5VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9PVlJEX0VOX01BU0sgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9PVlJEX0VOX1NISUZUICgyMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9NQVNLICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9TSElGVCAoMjFVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9BRENfQlVGX0VOX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX09WUkRfRU5fTUFTSyAoMHg0MDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX09WUkRfRU5fU0hJRlQgKDIyVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX09WUkRfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX01BU0sgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX1NISUZUICgyM1UpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfQVVYUExMX0RJR19CVUZfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9FTl9NQVNLICgweDEwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWFRYX1JDQ0FMX0VOX09WUkRfRU5fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9SQ0NBTF9FTl9PVlJEX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9SQ0NBTF9FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9NQVNLICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9TSElGVCAgKDI1VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhUWF9SQ0NBTF9FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYVFhfUkNDQUxfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhUWF9SQ0NBTF9FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9FTl9NQVNLICgweDQwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9IUE1fREFDX0VOX09WUkRfRU5fU0hJRlQgKDI2VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfSFBNX0RBQ19FTl9PVlJEX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFhfSFBNX0RBQ19FTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9NQVNLICAgKDB4ODAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9TSElGVCAgKDI3VSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfSFBNX0RBQ19FTl9PVlJEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1RYX0hQTV9EQUNfRU5fT1ZSRF9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfVFhfSFBNX0RBQ19FTl9PVlJEX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX01PREVfT1ZSRF9FTl9NQVNLICAgICAgKDB4MTAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfRU5fU0hJRlQgICAgICgyOFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1RYX01PREVfT1ZSRF9FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1RYX01PREVfT1ZSRF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfTUFTSyAgICAgICAgICgweDIwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEX1NISUZUICAgICAgICAoMjlVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fT1ZSRDNfVFhfTU9ERV9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RTTV9PVlJEM19UWF9NT0RFX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhfTU9ERV9PVlJEX0VOX01BU0sgICAgICAoMHg0MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9FTl9TSElGVCAgICAgKDMwVSkKKyNkZWZpbmUgWENWUl9UU01fT1ZSRDNfUlhfTU9ERV9PVlJEX0VOKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UU01fT1ZSRDNfUlhfTU9ERV9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9NQVNLICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkRfU0hJRlQgICAgICAgICgzMVUpCisjZGVmaW5lIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9PVlJEM19SWF9NT0RFX09WUkRfU0hJRlQpKSAmIFhDVlJfVFNNX09WUkQzX1JYX01PREVfT1ZSRF9NQVNLKQorCisvKiEgQG5hbWUgUEFfUE9XRVIgLSBQQSBQT1dFUiAqLworI2RlZmluZSBYQ1ZSX1RTTV9QQV9QT1dFUl9QQV9QT1dFUl9NQVNLICAgICAgICAgICgweDNGVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUE9XRVJfUEFfUE9XRVJfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1BPV0VSX1BBX1BPV0VSKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9QT1dFUl9QQV9QT1dFUl9TSElGVCkpICYgWENWUl9UU01fUEFfUE9XRVJfUEFfUE9XRVJfTUFTSykKKworLyohIEBuYW1lIFBBX1JBTVBfVEJMMCAtIFBBIFJBTVAgVEFCTEUgMCAqLworI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDBfTUFTSyAgICAgICgweDNGVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAwX1NISUZUICAgICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDBfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDFfTUFTSyAgICAgICgweDNGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDFfU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAxKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMV9TSElGVCkpICYgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAxX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMl9NQVNLICAgICAgKDB4M0YwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAyX1NISUZUICAgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDIoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAyX1NISUZUKSkgJiBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDJfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAzX01BU0sgICAgICAoMHgzRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QM19TSElGVCAgICAgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAzKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QM19TSElGVCkpICYgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAzX01BU0spCisKKy8qISBAbmFtZSBQQV9SQU1QX1RCTDEgLSBQQSBSQU1QIFRBQkxFIDEgKi8KKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA0X01BU0sgICAgICAoMHgzRlUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNF9TSElGVCAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDQoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA0X1NISUZUKSkgJiBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDRfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA1X01BU0sgICAgICAoMHgzRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA1X1NISUZUICAgICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDVfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDZfTUFTSyAgICAgICgweDNGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNl9TSElGVCAgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA2KHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNl9TSElGVCkpICYgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA2X01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QN19NQVNLICAgICAgKDB4M0YwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDdfU0hJRlQgICAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNyh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDdfU0hJRlQpKSAmIFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QN19NQVNLKQorCisvKiEgQG5hbWUgUkVDWUNMRV9DT1VOVCAtIFRTTSBSRUNZQ0xFIENPVU5UICovCisjZGVmaW5lIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDBfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDBfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQwKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMF9TSElGVCkpICYgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQxX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1JFQ1lDTEVfQ09VTlRfUkVDWUNMRV9DT1VOVDFfU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQxKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMV9TSElGVCkpICYgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQyX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMl9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9SRUNZQ0xFX0NPVU5UX1JFQ1lDTEVfQ09VTlQyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMl9TSElGVCkpICYgWENWUl9UU01fUkVDWUNMRV9DT1VOVF9SRUNZQ0xFX0NPVU5UMl9NQVNLKQorCisvKiEgQG5hbWUgRkFTVF9DVFJMMSAtIFRTTSBGQVNUIFdBUk1VUCBDT05UUk9MIFJFR0lTVEVSIDEgKi8KKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1RYX1dVX0VOX01BU0sgICAoMHgxVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1RYX1dVX0VOX1NISUZUICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9UWF9XVV9FTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfVFhfV1VfRU5fU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9UWF9XVV9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlhfV1VfRU5fTUFTSyAgICgweDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlhfV1VfRU5fU0hJRlQgICgxVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYX1dVX0VOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWF9XVV9FTl9TSElGVCkpICYgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYX1dVX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9FTl9NQVNLICAgKDB4NFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9FTl9TSElGVCAgKDJVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlgyVFhfRU4oeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX0VOX1NISUZUKSkgJiBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlgyVFhfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1dVX0NMRUFSX01BU0sgICAoMHg4VSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1dVX0NMRUFSX1NISUZUICAoM1UpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9XVV9DTEVBUih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfV1VfQ0xFQVJfU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9XVV9DTEVBUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwxX0ZBU1RfUlgyVFhfU1RBUlRfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX1NUQVJUX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX1NUQVJUKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0ZBU1RfQ1RSTDFfRkFTVF9SWDJUWF9TVEFSVF9TSElGVCkpICYgWENWUl9UU01fRkFTVF9DVFJMMV9GQVNUX1JYMlRYX1NUQVJUX01BU0spCisKKy8qISBAbmFtZSBGQVNUX0NUUkwyIC0gVFNNIEZBU1QgV0FSTVVQIENPTlRST0wgUkVHSVNURVIgMiAqLworI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfVFhfTUFTSyAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX1NUQVJUX1RYX1NISUZUICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9UWCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfVFhfU0hJRlQpKSAmIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9UWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9UWF9NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9UWF9TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfVFgoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9ERVNUX1RYX1NISUZUKSkgJiBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9UWF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfU1RBUlRfUlhfTUFTSyAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9SWF9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX1NUQVJUX1JYKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9TVEFSVF9SWF9TSElGVCkpICYgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX1NUQVJUX1JYX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9ERVNUX1JYX01BU0sgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9SWF9TSElGVCAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX0ZBU1RfQ1RSTDJfRkFTVF9ERVNUX1JYKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9GQVNUX0NUUkwyX0ZBU1RfREVTVF9SWF9TSElGVCkpICYgWENWUl9UU01fRkFTVF9DVFJMMl9GQVNUX0RFU1RfUlhfTUFTSykKKworLyohIEBuYW1lIFRJTUlORzAwIC0gVFNNX1RJTUlORzAwICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0hJKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fVFhfTE8oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9SWF9ISSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAwX0JCX0xET19IRl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfTE8oeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDBfQkJfTERPX0hGX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwMF9CQl9MRE9fSEZfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzAxIC0gVFNNX1RJTUlORzAxICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDFfQkJfTERPX0FEQ0RBQ19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAxX0JCX0xET19BRENEQUNfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwMV9CQl9MRE9fQURDREFDX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwMiAtIFRTTV9USU1JTkcwMiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDJfQkJfTERPX0JCQV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAyX0JCX0xET19CQkFfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwMl9CQl9MRE9fQkJBX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwMyAtIFRTTV9USU1JTkcwMyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9ISSh4KSAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1RYX0xPKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fUlhfSEkoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwM19CQl9MRE9fUERfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0xPKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzAzX0JCX0xET19QRF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDNfQkJfTERPX1BEX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwNCAtIFRTTV9USU1JTkcwNCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNF9CQl9MRE9fRkRCS19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDRfQkJfTERPX0ZEQktfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA0X0JCX0xET19GREJLX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwNSAtIFRTTV9USU1JTkcwNSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA1X0JCX0xET19WQ09MT19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDVfQkJfTERPX1ZDT0xPX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNV9CQl9MRE9fVkNPTE9fRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzA2IC0gVFNNX1RJTUlORzA2ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDZfQkJfTERPX1ZUUkVGX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwNl9CQl9MRE9fVlRSRUZfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA2X0JCX0xET19WVFJFRl9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDcgLSBUU01fVElNSU5HMDcgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDdfQkJfTERPX0ZEQktfQkxFRURfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA3X0JCX0xET19GREJLX0JMRUVEX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwN19CQl9MRE9fRkRCS19CTEVFRF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMDggLSBUU01fVElNSU5HMDggKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwOF9CQl9MRE9fVkNPTE9fQkxFRURfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA4X0JCX0xET19WQ09MT19CTEVFRF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDhfQkJfTERPX1ZDT0xPX0JMRUVEX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcwOSAtIFRTTV9USU1JTkcwOSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcwOV9CQl9MRE9fVkNPTE9fRkFTVENIQVJHRV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMDlfQkJfTERPX1ZDT0xPX0ZBU1RDSEFSR0VfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzA5X0JCX0xET19WQ09MT19GQVNUQ0hBUkdFX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcxMCAtIFRTTV9USU1JTkcxMCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEwX0JCX1hUQUxfUExMX1JFRl9DTEtfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMF9CQl9YVEFMX1BMTF9SRUZfQ0xLX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTBfQkJfWFRBTF9QTExfUkVGX0NMS19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTEgLSBUU01fVElNSU5HMTEgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzExX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzExX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTFfQkJfWFRBTF9EQUNfUkVGX0NMS19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzExX0JCX1hUQUxfREFDX1JFRl9DTEtfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMV9CQl9YVEFMX0RBQ19SRUZfQ0xLX0VOX1RYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcxMiAtIFRTTV9USU1JTkcxMiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEyX1JYVFhfQVVYUExMX1ZDT19SRUZfQ0xLX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEyX1JYVFhfQVVYUExMX1ZDT19SRUZfQ0xLX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTJfUlhUWF9BVVhQTExfVkNPX1JFRl9DTEtfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEyX1JYVFhfQVVYUExMX1ZDT19SRUZfQ0xLX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEyX1JYVFhfQVVYUExMX1ZDT19SRUZfQ0xLX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEyX1JYVFhfQVVYUExMX1ZDT19SRUZfQ0xLX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxMl9SWFRYX0FVWFBMTF9WQ09fUkVGX0NMS19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTMgLSBUU01fVElNSU5HMTMgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxM19TWV9WQ09fQVVUT1RVTkVfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzEzX1NZX1ZDT19BVVRPVFVORV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTNfU1lfVkNPX0FVVE9UVU5FX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcxNCAtIFRTTV9USU1JTkcxNCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE0X1NZX1BEX0NZQ0xFX1NMSVBfTERfRlRfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNF9TWV9QRF9DWUNMRV9TTElQX0xEX0ZUX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTRfU1lfUERfQ1lDTEVfU0xJUF9MRF9GVF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTUgLSBUU01fVElNSU5HMTUgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0hJX01BU0sgICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9ISV9TSElGVCAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fVFhfSEkoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0xPX01BU0sgICAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1RYX0xPX1NISUZUICAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9MTyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfSElfTUFTSyAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9ISV9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1JYX0hJKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTVfU1lfVkNPX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9MT19NQVNLICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfTE9fU0hJRlQgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9MTyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxNV9TWV9WQ09fRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE1X1NZX1ZDT19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTYgLSBUU01fVElNSU5HMTYgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTZfU1lfTE9fUlhfQlVGX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTZfU1lfTE9fUlhfQlVGX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTZfU1lfTE9fUlhfQlVGX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTZfU1lfTE9fUlhfQlVGX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE2X1NZX0xPX1JYX0JVRl9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTZfU1lfTE9fUlhfQlVGX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcxNyAtIFRTTV9USU1JTkcxNyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE3X1NZX0xPX1RYX0JVRl9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE3X1NZX0xPX1RYX0JVRl9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE3X1NZX0xPX1RYX0JVRl9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTdfU1lfTE9fVFhfQlVGX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE3X1NZX0xPX1RYX0JVRl9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxN19TWV9MT19UWF9CVUZfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE3X1NZX0xPX1RYX0JVRl9FTl9UWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMTggLSBUU01fVElNSU5HMTggKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9ISV9NQVNLICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1RYX0hJKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1RYX0xPX01BU0sgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9UWF9MTyh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMThfU1lfRElWTl9FTl9SWF9ISV9NQVNLICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fUlhfSEkoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fUlhfTE9fTUFTSyAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE4X1NZX0RJVk5fRU5fUlhfTE8oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcxOF9TWV9ESVZOX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcxOSAtIFRTTV9USU1JTkcxOSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzE5X1NZX1BEX0ZJTFRFUl9DSEFSR0VfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcxOV9TWV9QRF9GSUxURVJfQ0hBUkdFX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMTlfU1lfUERfRklMVEVSX0NIQVJHRV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjAgLSBUU01fVElNSU5HMjAgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fVFhfSElfTUFTSyAgICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0hJX1NISUZUICAgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9ISSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0xPX01BU0sgICAgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0xPX1NISUZUICAgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9UWF9MTyh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0hJX01BU0sgICAgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fUlhfSElfU0hJRlQgICAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9ISSh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0xPX01BU0sgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9MT19TSElGVCAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIwX1NZX1BEX0VOX1JYX0xPKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyMF9TWV9QRF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjBfU1lfUERfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzIxIC0gVFNNX1RJTUlORzIxICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjFfU1lfTE9fRElWTl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIxX1NZX0xPX0RJVk5fRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyMV9TWV9MT19ESVZOX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyMiAtIFRTTV9USU1JTkcyMiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0hJKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjJfU1lfTE9fUlhfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjJfU1lfTE9fUlhfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIyX1NZX0xPX1JYX0VOX1JYX0xPKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyMl9TWV9MT19SWF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjJfU1lfTE9fUlhfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzIzIC0gVFNNX1RJTUlORzIzICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyM19TWV9MT19UWF9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0hJKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyM19TWV9MT19UWF9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyM19TWV9MT19UWF9FTl9UWF9MTyh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjNfU1lfTE9fVFhfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzIzX1NZX0xPX1RYX0VOX1RYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyNCAtIFRTTV9USU1JTkcyNCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyNF9TWV9ESVZOX0NBTF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjRfU1lfRElWTl9DQUxfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI0X1NZX0RJVk5fQ0FMX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyNSAtIFRTTV9USU1JTkcyNSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNV9SWF9MTkFfTUlYRVJfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNV9SWF9MTkFfTUlYRVJfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNV9SWF9MTkFfTUlYRVJfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNV9SWF9MTkFfTUlYRVJfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjVfUlhfTE5BX01JWEVSX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNV9SWF9MTkFfTUlYRVJfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzI2IC0gVFNNX1RJTUlORzI2ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI2X1RYX1BBX0VOX1RYX0hJX01BU0sgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9ISV9TSElGVCAgICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfSEkoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI2X1RYX1BBX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9MT19NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9MT19TSElGVCAgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjZfVFhfUEFfRU5fVFhfTE8oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI2X1RYX1BBX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyNl9UWF9QQV9FTl9UWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjcgLSBUU01fVElNSU5HMjcgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzI3X1JYX0FEQ19JX1FfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyN19SWF9BRENfSV9RX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjdfUlhfQURDX0lfUV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMjggLSBUU01fVElNSU5HMjggKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjhfUlhfQURDX1JFU0VUX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjhfUlhfQURDX1JFU0VUX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjhfUlhfQURDX1JFU0VUX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjhfUlhfQURDX1JFU0VUX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzI4X1JYX0FEQ19SRVNFVF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjhfUlhfQURDX1JFU0VUX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkcyOSAtIFRTTV9USU1JTkcyOSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMjlfUlhfQkJBX0lfUV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzI5X1JYX0JCQV9JX1FfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkcyOV9SWF9CQkFfSV9RX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczMCAtIFRTTV9USU1JTkczMCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMwX1JYX0JCQV9QREVUX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMwX1JYX0JCQV9QREVUX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzBfUlhfQkJBX1BERVRfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzMwX1JYX0JCQV9QREVUX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMwX1JYX0JCQV9QREVUX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMwX1JYX0JCQV9QREVUX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczMF9SWF9CQkFfUERFVF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzEgLSBUU01fVElNSU5HMzEgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzFfUlhfQkJBX1RaQV9EQ09DX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzFfUlhfQkJBX1RaQV9EQ09DX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzFfUlhfQkJBX1RaQV9EQ09DX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzFfUlhfQkJBX1RaQV9EQ09DX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMxX1JYX0JCQV9UWkFfRENPQ19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzFfUlhfQkJBX1RaQV9EQ09DX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczMiAtIFRTTV9USU1JTkczMiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzJfUlhfVFpBX0lfUV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMyX1JYX1RaQV9JX1FfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczMl9SWF9UWkFfSV9RX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczMyAtIFRTTV9USU1JTkczMyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMzX1JYX1RaQV9QREVUX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMzX1JYX1RaQV9QREVUX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzNfUlhfVFpBX1BERVRfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzMzX1JYX1RaQV9QREVUX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzMzX1JYX1RaQV9QREVUX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzMzX1JYX1RaQV9QREVUX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczM19SWF9UWkFfUERFVF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzQgLSBUU01fVElNSU5HMzQgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9ISV9NQVNLICAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1RYX0hJKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1RYX0xPX01BU0sgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9UWF9MTyh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzRfUExMX0RJR19FTl9SWF9ISV9NQVNLICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fUlhfSEkoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fUlhfTE9fTUFTSyAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM0X1BMTF9ESUdfRU5fUlhfTE8oeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczNF9QTExfRElHX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczNSAtIFRTTV9USU1JTkczNSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfSElfTUFTSyAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0hJX1NISUZUICAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM1X1RYX0RJR19FTl9UWF9ISSh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM1X1RYX0RJR19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfTE9fTUFTSyAgICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNV9UWF9ESUdfRU5fVFhfTE9fU0hJRlQgICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0xPKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM1X1RYX0RJR19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzVfVFhfRElHX0VOX1RYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczNiAtIFRTTV9USU1JTkczNiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfSElfTUFTSyAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9ISV9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzZfUlhfRElHX0VOX1JYX0hJKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzZfUlhfRElHX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9MT19NQVNLICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfTE9fU0hJRlQgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9MTyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczNl9SWF9ESUdfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM2X1JYX0RJR19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HMzcgLSBUU01fVElNSU5HMzcgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzdfUlhfSU5JVF9SWF9ISV9NQVNLICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0hJX1NISUZUICAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM3X1JYX0lOSVRfUlhfSEkoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM3X1JYX0lOSVRfUlhfTE9fTUFTSyAgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0xPX1NISUZUICAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM3X1JYX0lOSVRfUlhfTE8oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczN19SWF9JTklUX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczOCAtIFRTTV9USU1JTkczOCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczOF9TSUdNQV9ERUxUQV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HMzhfU0lHTUFfREVMVEFfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM4X1NJR01BX0RFTFRBX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkczOSAtIFRTTV9USU1JTkczOSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfSElfTUFTSyAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9ISV9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HMzlfUlhfUEhZX0VOX1JYX0hJKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HMzlfUlhfUEhZX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9MT19NQVNLICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfTE9fU0hJRlQgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9MTyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkczOV9SWF9QSFlfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzM5X1JYX1BIWV9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDAgLSBUU01fVElNSU5HNDAgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDBfRENPQ19FTl9SWF9ISV9NQVNLICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0hJX1NISUZUICAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQwX0RDT0NfRU5fUlhfSEkoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQwX0RDT0NfRU5fUlhfTE9fTUFTSyAgICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0xPX1NISUZUICAgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQwX0RDT0NfRU5fUlhfTE8oeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0MF9EQ09DX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc0MSAtIFRTTV9USU1JTkc0MSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfSElfTUFTSyAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9ISV9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDFfRENPQ19JTklUX1JYX0hJKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDFfRENPQ19JTklUX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9MT19NQVNLICAgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfTE9fU0hJRlQgICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9MTyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0MV9EQ09DX0lOSVRfUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQxX0RDT0NfSU5JVF9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDIgLSBUU01fVElNSU5HNDIgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0Ml9TQVJfQURDX1RSSUdfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQyX1NBUl9BRENfVFJJR19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDJfU0FSX0FEQ19UUklHX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc0MyAtIFRTTV9USU1JTkc0MyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDQgLSBUU01fVElNSU5HNDQgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0NF9UU01fU1BBUkUxX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDRfVFNNX1NQQVJFMV9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ0X1RTTV9TUEFSRTFfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzQ1IC0gVFNNX1RJTUlORzQ1ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDVfVFNNX1NQQVJFMl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ1X1RTTV9TUEFSRTJfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0NV9UU01fU1BBUkUyX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc0NiAtIFRTTV9USU1JTkc0NiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ2X1RTTV9TUEFSRTNfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0Nl9UU01fU1BBUkUzX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDZfVFNNX1NQQVJFM19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNDcgLSBUU01fVElNSU5HNDcgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzQ4IC0gVFNNX1RJTUlORzQ4ICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfTUFTSyAoMHhGRlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfSElfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0xPX01BU0sgKDB4RkYwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fVFhfTE9fU0hJRlQgKDhVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9MT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc0OSAtIFRTTV9USU1JTkc0OSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fVFhfTE9fTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9ISV9NQVNLICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzQ5X0dQSU8yX1RSSUdfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9MT19NQVNLICgweEZGMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9MT19TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc0OV9HUElPMl9UUklHX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9MT19TSElGVCkpICYgWENWUl9UU01fVElNSU5HNDlfR1BJTzJfVFJJR19FTl9SWF9MT19NQVNLKQorCisvKiEgQG5hbWUgVElNSU5HNTAgLSBUU01fVElNSU5HNTAgKi8KKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfTE9fTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9MT19TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0xPX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzUxIC0gVFNNX1RJTUlORzUxICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1MV9SWFRYX0FVWFBMTF9CSUFTX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTFfUlhUWF9BVVhQTExfQklBU19FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzUxX1JYVFhfQVVYUExMX0JJQVNfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzUyIC0gVFNNX1RJTUlORzUyICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfSElfTUFTSyAoMHhGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0hJX1NISUZUICgxNlUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0hJX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1Ml9SWFRYX0FVWFBMTF9GQ0FMX0VOX1JYX0hJX01BU0spCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfTE9fU0hJRlQgKDI0VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTJfUlhUWF9BVVhQTExfRkNBTF9FTl9SWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzUyX1JYVFhfQVVYUExMX0ZDQUxfRU5fUlhfTE9fTUFTSykKKworLyohIEBuYW1lIFRJTUlORzUzIC0gVFNNX1RJTUlORzUzICovCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTNfUlhUWF9BVVhQTExfTEZfUERfRU5fUlhfSElfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTNfUlhUWF9BVVhQTExfTEZfUERfRU5fUlhfSEkoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1M19SWFRYX0FVWFBMTF9MRl9QRF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTNfUlhUWF9BVVhQTExfTEZfUERfRU5fUlhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTNfUlhUWF9BVVhQTExfTEZfUERfRU5fUlhfTE9fTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0xPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTNfUlhUWF9BVVhQTExfTEZfUERfRU5fUlhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzUzX1JYVFhfQVVYUExMX0xGX1BEX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1NCAtIFRTTV9USU1JTkc1NCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTRfUlhUWF9BVVhQTExfUERfTEZfRklMVEVSX0NIQVJHRV9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU0X1JYVFhfQVVYUExMX1BEX0xGX0ZJTFRFUl9DSEFSR0VfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1NF9SWFRYX0FVWFBMTF9QRF9MRl9GSUxURVJfQ0hBUkdFX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1NSAtIFRTTV9USU1JTkc1NSAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTVfUlhUWF9BVVhQTExfQURDX0JVRl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU1X1JYVFhfQVVYUExMX0FEQ19CVUZfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1NV9SWFRYX0FVWFBMTF9BRENfQlVGX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1NiAtIFRTTV9USU1JTkc1NiAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTZfUlhUWF9BVVhQTExfRElHX0JVRl9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU2X1JYVFhfQVVYUExMX0RJR19CVUZfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1Nl9SWFRYX0FVWFBMTF9ESUdfQlVGX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1NyAtIFRTTV9USU1JTkc1NyAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0hJX01BU0sgKDB4RkYwMDAwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9ISV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0hJKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9ISV9TSElGVCkpICYgWENWUl9UU01fVElNSU5HNTdfUlhUWF9SQ0NBTF9FTl9SWF9ISV9NQVNLKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0xPX01BU0sgKDB4RkYwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0xPX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFNNX1RJTUlORzU3X1JYVFhfUkNDQUxfRU5fUlhfTE8oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0xPX1NISUZUKSkgJiBYQ1ZSX1RTTV9USU1JTkc1N19SWFRYX1JDQ0FMX0VOX1JYX0xPX01BU0spCisKKy8qISBAbmFtZSBUSU1JTkc1OCAtIFRTTV9USU1JTkc1OCAqLworI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0hJX01BU0sgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0hJX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNThfVFhfSFBNX0RBQ19FTl9UWF9ISSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfSElfU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfSElfTUFTSykKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNThfVFhfSFBNX0RBQ19FTl9UWF9MT19NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RTTV9USU1JTkc1OF9UWF9IUE1fREFDX0VOX1RYX0xPX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UU01fVElNSU5HNThfVFhfSFBNX0RBQ19FTl9UWF9MTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfTE9fU0hJRlQpKSAmIFhDVlJfVFNNX1RJTUlORzU4X1RYX0hQTV9EQUNfRU5fVFhfTE9fTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfVFNNX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9UU00gLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1RTTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWENWUl9UU01fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QzJDMHUpCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1RTTSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9UU00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfVFNNX1R5cGUgKilYQ1ZSX1RTTV9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfVFNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9UU01fQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICAgICB7IFhDVlJfVFNNX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfVFNNIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBYQ1ZSX1RTTV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICAgIHsgWENWUl9UU00gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfVFNNX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9UWF9ESUcgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1RYX0RJR19QZXJpcGhlcmFsX0FjY2Vzc19MYXllciBYQ1ZSX1RYX0RJRyBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9UWF9ESUcgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUWCBEaWdpdGFsIENvbnRyb2wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgREFUQV9QQURESU5HOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIERhdGEgUGFkZGluZywgb2Zmc2V0OiAweDQgKi8KKyAgX19JTyB1aW50MzJfdCBHRlNLX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggR0ZTSyBNb2R1bGF0b3IgQ29udHJvbCwgb2Zmc2V0OiAweDggKi8KKyAgX19JTyB1aW50MzJfdCBHRlNLX0NPRUZGMjsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggR0ZTSyBGaWx0ZXIgQ29lZmZpY2llbnRzIDIsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgR0ZTS19DT0VGRjE7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIEdGU0sgRmlsdGVyIENvZWZmaWNpZW50cyAxLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBGU0tfU0NBTEU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggRlNLIE1vZHVsYXRpb24gTGV2ZWxzLCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JTyB1aW50MzJfdCBERlRfUEFUVEVSTjsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVFggREZUIE1vZHVsYXRpb24gUGF0dGVybiwgb2Zmc2V0OiAweDE4ICovCisgIF9fSU8gdWludDMyX3QgUkZfREZUX0JJU1RfMTsgICAgICAgICAgICAgICAgICAgICAvKio8IFRYIERGVCBDb250cm9sIDEsIG9mZnNldDogMHgxQyAqLworICBfX0lPIHVpbnQzMl90IFJGX0RGVF9CSVNUXzI7ICAgICAgICAgICAgICAgICAgICAgLyoqPCBUWCBERlQgQ29udHJvbCAyLCBvZmZzZXQ6IDB4MjAgKi8KK30gWENWUl9UWF9ESUdfVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9UWF9ESUcgUmVnaXN0ZXIgTWFza3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBYQ1ZSX1RYX0RJR19SZWdpc3Rlcl9NYXNrcyBYQ1ZSX1RYX0RJRyBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ1RSTCAtIFRYIERpZ2l0YWwgQ29udHJvbCAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX01BU0sgICAgICgweEZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX1NISUZUICAgICgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERSh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0xFTkdUSF9NQVNLICAgICAgICAoMHg3MFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEhfU0hJRlQgICAgICAgKDRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfTEVOR1RIKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0xFTkdUSF9TSElGVCkpICYgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0xFTkdUSF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fTUFTSyAgICAgICAgICAgICgweDgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOX1NISUZUICAgICAgICAgICAoN1UpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTih4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMX01BU0sgICAgICAgICgweDcwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUxfU0hJRlQgICAgICAgKDhVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9TSElGVCkpICYgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9NQVNLICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOX1NISUZUICAgICAgICAgKDExVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU4oeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1NPQ19URVNUX1NFTF9NQVNLICAgICAgICgweDMwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19DVFJMX1NPQ19URVNUX1NFTF9TSElGVCAgICAgICgxMlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfU09DX1RFU1RfU0VMKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19DVFJMX1NPQ19URVNUX1NFTF9TSElGVCkpICYgWENWUl9UWF9ESUdfQ1RSTF9TT0NfVEVTVF9TRUxfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9UWF9DQVBUVVJFX1BPTF9NQVNLICAgICAoMHgxMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfVFhfQ0FQVFVSRV9QT0xfU0hJRlQgICAgKDE2VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9UWF9DQVBUVVJFX1BPTCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0NUUkxfVFhfQ0FQVFVSRV9QT0xfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0NUUkxfVFhfQ0FQVFVSRV9QT0xfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9GUkVRX1dPUkRfQURKX01BU0sgICAgICAoMHhGRkMwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0NUUkxfRlJFUV9XT1JEX0FESl9TSElGVCAgICAgKDIyVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfQ1RSTF9GUkVRX1dPUkRfQURKKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0NUUkxfRlJFUV9XT1JEX0FESl9TSElGVCkpICYgWENWUl9UWF9ESUdfQ1RSTF9GUkVRX1dPUkRfQURKX01BU0spCisKKy8qISBAbmFtZSBEQVRBX1BBRERJTkcgLSBUWCBEYXRhIFBhZGRpbmcgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMF9NQVNLICgweEZGVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzAoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8wX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8wX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzFfTUFTSyAoMHhGRjAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RBVEFfUEFERElOR19QQVRfMV9TSElGVCAoOFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8xX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19EQVRBX1BBRERJTkdfREFUQV9QQURESU5HX1BBVF8xX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19ERlRfTEZTUl9PVVRfTUFTSyAoMHg3RkZGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19ERlRfTEZTUl9PVVRfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0RGVF9MRlNSX09VVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19ERlRfTEZTUl9PVVRfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19ERlRfTEZTUl9PVVRfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0xSTV9NQVNLICAgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19MUk1fU0hJRlQgICAgICAgKDMxVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfREFUQV9QQURESU5HX0xSTSh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19MUk1fU0hJRlQpKSAmIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19MUk1fTUFTSykKKworLyohIEBuYW1lIEdGU0tfQ1RSTCAtIFRYIEdGU0sgTW9kdWxhdG9yIENvbnRyb2wgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMX01BU0sgKDB4RkZGRlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTF9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JX01BU0sgICAgICAgKDB4MzAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSV9TSElGVCAgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSV9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUlfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEX01BU0sgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTERfU0hJRlQgICAgICgyMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTERfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTERfTUFTSyAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRF9TSElGVCAgICAgKDIxVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRF9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HX01BU0sgKDB4NzAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkdfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTl9NQVNLICgweDEwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOX1NISUZUICgyOFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTl9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEX01BU0sgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRF9TSElGVCAoMjlVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRF9NQVNLICgweDQwMDAwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkRfU0hJRlQgKDMwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRF9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkRfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkRfTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkRfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEX01BU0spCisKKy8qISBAbmFtZSBHRlNLX0NPRUZGMiAtIFRYIEdGU0sgRmlsdGVyIENvZWZmaWNpZW50cyAyICovCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ09FRkYyX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDJfTUFTSyAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0dGU0tfQ09FRkYyX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDJfU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMl9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwyKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfR0ZTS19DT0VGRjJfR0ZTS19GSUxURVJfQ09FRkZfTUFOVUFMMl9TSElGVCkpICYgWENWUl9UWF9ESUdfR0ZTS19DT0VGRjJfR0ZTS19GSUxURVJfQ09FRkZfTUFOVUFMMl9NQVNLKQorCisvKiEgQG5hbWUgR0ZTS19DT0VGRjEgLSBUWCBHRlNLIEZpbHRlciBDb2VmZmljaWVudHMgMSAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMV9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwxX01BU0sgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19HRlNLX0NPRUZGMV9HRlNLX0ZJTFRFUl9DT0VGRl9NQU5VQUwxX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfR0ZTS19DT0VGRjFfR0ZTS19GSUxURVJfQ09FRkZfTUFOVUFMMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0dGU0tfQ09FRkYxX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDFfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0dGU0tfQ09FRkYxX0dGU0tfRklMVEVSX0NPRUZGX01BTlVBTDFfTUFTSykKKworLyohIEBuYW1lIEZTS19TQ0FMRSAtIFRYIEZTSyBNb2R1bGF0aW9uIExldmVscyAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMF9NQVNLICgweDFGRkZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMF9TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzBfU0hJRlQpKSAmIFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xX01BU0sgKDB4MUZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMV9TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMV9NQVNLKQorCisvKiEgQG5hbWUgREZUX1BBVFRFUk4gLSBUWCBERlQgTW9kdWxhdGlvbiBQYXR0ZXJuICovCisjZGVmaW5lIFhDVlJfVFhfRElHX0RGVF9QQVRURVJOX0RGVF9NT0RfUEFUVEVSTl9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfREZUX1BBVFRFUk5fREZUX01PRF9QQVRURVJOX1NISUZUICgwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfREZUX1BBVFRFUk5fREZUX01PRF9QQVRURVJOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfREZUX1BBVFRFUk5fREZUX01PRF9QQVRURVJOX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19ERlRfUEFUVEVSTl9ERlRfTU9EX1BBVFRFUk5fTUFTSykKKworLyohIEBuYW1lIFJGX0RGVF9CSVNUXzEgLSBUWCBERlQgQ29udHJvbCAxICovCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9HT19NQVNLICgweDFVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfR09fU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfR08oeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfR09fU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9HT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfRklOSVNIRURfTUFTSyAoMHgyVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0ZJTklTSEVEX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0ZJTklTSEVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX0ZJTklTSEVEX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfRklOSVNIRURfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1JFU1VMVF9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfUkVTVUxUX1NISUZUICgyVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1JFU1VMVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9SRVNVTFRfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9SRVNVTFRfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1RIUlNITERfTUFTSyAoMHhGMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfQklTVF9USFJTSExEX1NISUZUICg0VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1RIUlNITEQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfVEhSU0hMRF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1RIUlNITERfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9NQVhfRElGRl9NQVNLICgweEZGMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX01BWF9ESUZGX1NISUZUICg4VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9NQVhfRElGRih4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9NQVhfRElGRl9DSF9NQVNLICgweDdGMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfQ0hfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9NQVhfRElGRl9DSCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfQ0hfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfQ1RVTkVfTUFYX0RJRkZfQ0hfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRlJFUV9NQVNLICgweDcwMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9GUkVRX1NISUZUICgyNFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0ZSRVEoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9GUkVRX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9GUkVRX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOVFJJRVNfTUFTSyAoMHg3MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOVFJJRVNfU0hJRlQgKDI4VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRU5UUklFUyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOVFJJRVNfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOVFJJRVNfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRU5fTUFTSyAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOX1NISUZUICgzMVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9QQV9BTV9NT0RfRU5fU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzFfUEFfQU1fTU9EX0VOX01BU0spCisKKy8qISBAbmFtZSBSRl9ERlRfQklTVF8yIC0gVFggREZUIENvbnRyb2wgMiAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0dPX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfR09fU0hJRlQgKDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0dPKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9HT19TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9HT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0ZJTklTSEVEX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfRklOSVNIRURfU0hJRlQgKDFVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0ZJTklTSEVEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9GSU5JU0hFRF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9GSU5JU0hFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX1JFU1VMVF9NQVNLICgweDRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX1JFU1VMVF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfUkVTVUxUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9SRVNVTFRfU0hJRlQpKSAmIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfUkVTVUxUX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfQUxMX0NIQU5ORUxTX01BU0sgKDB4OFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfQUxMX0NIQU5ORUxTX1NISUZUICgzVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9BTExfQ0hBTk5FTFMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX1NZTl9CSVNUX0FMTF9DSEFOTkVMU19TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9TWU5fQklTVF9BTExfQ0hBTk5FTFNfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9GUkVRX0NPVU5UX1RIUkVTSE9MRF9NQVNLICgweEZGMFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfRlJFUV9DT1VOVF9USFJFU0hPTERfU0hJRlQgKDRVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0ZSRVFfQ09VTlRfVEhSRVNIT0xEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9GUkVRX0NPVU5UX1RIUkVTSE9MRF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9GUkVRX0NPVU5UX1RIUkVTSE9MRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9HT19NQVNLICgweDEwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9HT19TSElGVCAoMTJVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9HTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX0dPX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9HT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9GSU5JU0hFRF9NQVNLICgweDIwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9GSU5JU0hFRF9TSElGVCAoMTNVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9GSU5JU0hFRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX0ZJTklTSEVEX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9GSU5JU0hFRF9NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9JTkxfQklTVF9SRVNVTFRfTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfUkVTVUxUX1NISUZUICgxNFUpCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX1JFU1VMVCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0lOTF9CSVNUX1JFU1VMVF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfUkVTVUxUX01BU0spCisjZGVmaW5lIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX0dPX01BU0sgKDB4MTAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9HT19TSElGVCAoMTZVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9HTyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfSFBNX0ROTF9CSVNUX0dPX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9HT19NQVNLKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9GSU5JU0hFRF9NQVNLICgweDIwMDAwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfRklOSVNIRURfU0hJRlQgKDE3VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfRklOSVNIRUQoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9GSU5JU0hFRF9TSElGVCkpICYgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfRklOSVNIRURfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfUkVTVUxUX01BU0sgKDB4NDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9SRVNVTFRfU0hJRlQgKDE4VSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfUkVTVUxUKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fRE5MX0JJU1RfUkVTVUxUX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9SRVNVTFRfTUFTSykKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9ERlRfTUFYX1JBTV9TSVpFX01BU0sgKDB4MUZGMDAwMDBVKQorI2RlZmluZSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0RGVF9NQVhfUkFNX1NJWkVfU0hJRlQgKDIwVSkKKyNkZWZpbmUgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9ERlRfTUFYX1JBTV9TSVpFKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9ERlRfTUFYX1JBTV9TSVpFX1NISUZUKSkgJiBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0RGVF9NQVhfUkFNX1NJWkVfTUFTSykKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfVFhfRElHX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9UWF9ESUcgLSBQZXJpcGhlcmFsIGluc3RhbmNlIGJhc2UgYWRkcmVzc2VzICovCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1RYX0RJRyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1QzIwMHUpCisvKiogUGVyaXBoZXJhbCBYQ1ZSX1RYX0RJRyBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfVFhfRElHX1R5cGUgKilYQ1ZSX1RYX0RJR19CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfVFhfRElHIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9UWF9ESUdfQkFTRV9BRERSUyAgICAgICAgICAgICAgICAgICB7IFhDVlJfVFhfRElHX0JBU0UgfQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFhDVlJfVFhfRElHIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBYQ1ZSX1RYX0RJR19CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgIHsgWENWUl9UWF9ESUcgfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfVFhfRElHX1BlcmlwaGVyYWxfQWNjZXNzX0xheWVyICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9aQkRFTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfWkJERU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWENWUl9aQkRFTSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllcgorICogQHsKKyAqLworCisvKiogWENWUl9aQkRFTSAtIFJlZ2lzdGVyIExheW91dCBUeXBlZGVmICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fSU8gdWludDMyX3QgQ09SUl9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IERFTU9EIENPUlJFTExBVE9SIENPTlRST0wsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgUE5fVFlQRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IERFTU9EIFBOIFRZUEUsIG9mZnNldDogMHg0ICovCisgIF9fSU8gdWludDMyX3QgUE5fQ09ERTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IERFTU9EIFBOIENPREUsIG9mZnNldDogMHg4ICovCisgIF9fSU8gdWludDMyX3QgU1lOQ19DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IERFTU9EIFNZTUJPTCBTWU5DIENPTlRST0wsIG9mZnNldDogMHhDICovCisgIF9fSU8gdWludDMyX3QgQ0NBX0xRSV9TUkM7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IDgwMi4xNS40IENDQS9MUUkgU09VUkNFLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBGQURfVEhSOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRkFEIENPUlJFTEFUT1IgVEhSRVNIT0xELCBvZmZzZXQ6IDB4MTQgKi8KKyAgX19JTyB1aW50MzJfdCBaQkRFTV9BRkM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgODAyLjE1LjQgQUZDIFNUQVRVUywgb2Zmc2V0OiAweDE4ICovCit9IFhDVlJfWkJERU1fVHlwZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gWENWUl9aQkRFTSBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFhDVlJfWkJERU1fUmVnaXN0ZXJfTWFza3MgWENWUl9aQkRFTSBSZWdpc3RlciBNYXNrcworICogQHsKKyAqLworCisvKiEgQG5hbWUgQ09SUl9DVFJMIC0gODAyLjE1LjQgREVNT0QgQ09SUkVMTEFUT1IgQ09OVFJPTCAqLworI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX1ZUX01BU0sgICAgICAgICgweEZGVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfQ09SUl9WVF9TSElGVCAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX0NPUlJfVlQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX1ZUX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX1ZUX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX0NPUlJfTlZBTF9NQVNLICAgICAgKDB4NzAwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfQ09SUl9OVkFMX1NISUZUICAgICAoOFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX0NPUlJfTlZBTCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9DT1JSX05WQUxfU0hJRlQpKSAmIFhDVlJfWkJERU1fQ09SUl9DVFJMX0NPUlJfTlZBTF9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9NQVhfQ09SUl9FTl9NQVNLICAgICgweDgwMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX01BWF9DT1JSX0VOX1NISUZUICAgKDExVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfTUFYX0NPUlJfRU4oeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fQ09SUl9DVFJMX01BWF9DT1JSX0VOX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9NQVhfQ09SUl9FTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9aQkRFTV9DTEtfT05fTUFTSyAgICgweDgwMDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9aQkRFTV9DTEtfT05fU0hJRlQgICgxNVUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX1pCREVNX0NMS19PTih4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9aQkRFTV9DTEtfT05fU0hJRlQpKSAmIFhDVlJfWkJERU1fQ09SUl9DVFJMX1pCREVNX0NMS19PTl9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfQ09SUl9NQVNLICAgICgweEZGMDAwMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX1JYX01BWF9DT1JSX1NISUZUICAgKDE2VSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX0NPUlIoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fQ09SUl9DVFJMX1JYX01BWF9DT1JSX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfQ09SUl9NQVNLKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfUFJFQU1CTEVfTUFTSyAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ09SUl9DVFJMX1JYX01BWF9QUkVBTUJMRV9TSElGVCAoMjRVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfUFJFQU1CTEUoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9DT1JSX0NUUkxfUlhfTUFYX1BSRUFNQkxFX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0NPUlJfQ1RSTF9SWF9NQVhfUFJFQU1CTEVfTUFTSykKKworLyohIEBuYW1lIFBOX1RZUEUgLSA4MDIuMTUuNCBERU1PRCBQTiBUWVBFICovCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fVFlQRV9QTl9UWVBFX01BU0sgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fVFlQRV9QTl9UWVBFX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX1RZUEVfUE5fVFlQRSh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9QTl9UWVBFX1BOX1RZUEVfU0hJRlQpKSAmIFhDVlJfWkJERU1fUE5fVFlQRV9QTl9UWVBFX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fVFlQRV9UWF9JTlZfTUFTSyAgICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fVFlQRV9UWF9JTlZfU0hJRlQgICAgICAgICAgKDFVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX1RZUEVfVFhfSU5WKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9QTl9UWVBFX1RYX0lOVl9TSElGVCkpICYgWENWUl9aQkRFTV9QTl9UWVBFX1RYX0lOVl9NQVNLKQorCisvKiEgQG5hbWUgUE5fQ09ERSAtIDgwMi4xNS40IERFTU9EIFBOIENPREUgKi8KKyNkZWZpbmUgWENWUl9aQkRFTV9QTl9DT0RFX1BOX0xTQl9NQVNLICAgICAgICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9QTl9DT0RFX1BOX0xTQl9TSElGVCAgICAgICAgICAoMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fQ09ERV9QTl9MU0IoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTFNCX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTFNCX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fQ09ERV9QTl9NU0JfTUFTSyAgICAgICAgICAgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTVNCX1NISUZUICAgICAgICAgICgxNlUpCisjZGVmaW5lIFhDVlJfWkJERU1fUE5fQ09ERV9QTl9NU0IoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTVNCX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1BOX0NPREVfUE5fTVNCX01BU0spCisKKy8qISBAbmFtZSBTWU5DX0NUUkwgLSA4MDIuMTUuNCBERU1PRCBTWU1CT0wgU1lOQyBDT05UUk9MICovCisjZGVmaW5lIFhDVlJfWkJERU1fU1lOQ19DVFJMX1NZTkNfUEVSX01BU0sgICAgICAgKDB4N1UpCisjZGVmaW5lIFhDVlJfWkJERU1fU1lOQ19DVFJMX1NZTkNfUEVSX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9TWU5DX1BFUih4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9TWU5DX0NUUkxfU1lOQ19QRVJfU0hJRlQpKSAmIFhDVlJfWkJERU1fU1lOQ19DVFJMX1NZTkNfUEVSX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fU1lOQ19DVFJMX1RSQUNLX0VOQUJMRV9NQVNLICAgKDB4OFUpCisjZGVmaW5lIFhDVlJfWkJERU1fU1lOQ19DVFJMX1RSQUNLX0VOQUJMRV9TSElGVCAgKDNVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9UUkFDS19FTkFCTEUoeCkgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9TWU5DX0NUUkxfVFJBQ0tfRU5BQkxFX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1NZTkNfQ1RSTF9UUkFDS19FTkFCTEVfTUFTSykKKworLyohIEBuYW1lIENDQV9MUUlfU1JDIC0gODAyLjE1LjQgQ0NBL0xRSSBTT1VSQ0UgKi8KKyNkZWZpbmUgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19DQ0ExX0ZST01fUlhfRElHX01BU0sgKDB4MVUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfQ0NBMV9GUk9NX1JYX0RJR19TSElGVCAoMFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfQ0NBMV9GUk9NX1JYX0RJRyh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfQ0NBMV9GUk9NX1JYX0RJR19TSElGVCkpICYgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19DQ0ExX0ZST01fUlhfRElHX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX0ZST01fUlhfRElHX01BU0sgKDB4MlUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX0ZST01fUlhfRElHX1NISUZUICgxVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19MUUlfRlJPTV9SWF9ESUcoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX0NDQV9MUUlfU1JDX0xRSV9GUk9NX1JYX0RJR19TSElGVCkpICYgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19MUUlfRlJPTV9SWF9ESUdfTUFTSykKKyNkZWZpbmUgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19MUUlfU1RBUlRfQVRfU0ZEX01BU0sgKDB4NFUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX1NUQVJUX0FUX1NGRF9TSElGVCAoMlUpCisjZGVmaW5lIFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX1NUQVJUX0FUX1NGRCh4KSAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fQ0NBX0xRSV9TUkNfTFFJX1NUQVJUX0FUX1NGRF9TSElGVCkpICYgWENWUl9aQkRFTV9DQ0FfTFFJX1NSQ19MUUlfU1RBUlRfQVRfU0ZEX01BU0spCisKKy8qISBAbmFtZSBGQURfVEhSIC0gRkFEIENPUlJFTEFUT1IgVEhSRVNIT0xEICovCisjZGVmaW5lIFhDVlJfWkJERU1fRkFEX1RIUl9GQURfVEhSX01BU0sgICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBYQ1ZSX1pCREVNX0ZBRF9USFJfRkFEX1RIUl9TSElGVCAgICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9GQURfVEhSX0ZBRF9USFIoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fRkFEX1RIUl9GQURfVEhSX1NISUZUKSkgJiBYQ1ZSX1pCREVNX0ZBRF9USFJfRkFEX1RIUl9NQVNLKQorCisvKiEgQG5hbWUgWkJERU1fQUZDIC0gODAyLjE1LjQgQUZDIFNUQVRVUyAqLworI2RlZmluZSBYQ1ZSX1pCREVNX1pCREVNX0FGQ19BRkNfRU5fTUFTSyAgICAgICAgICgweDFVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1pCREVNX0FGQ19BRkNfRU5fU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX0VOKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFhDVlJfWkJERU1fWkJERU1fQUZDX0FGQ19FTl9TSElGVCkpICYgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX0VOX01BU0spCisjZGVmaW5lIFhDVlJfWkJERU1fWkJERU1fQUZDX0RDRF9FTl9NQVNLICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFhDVlJfWkJERU1fWkJERU1fQUZDX0RDRF9FTl9TSElGVCAgICAgICAgKDFVKQorI2RlZmluZSBYQ1ZSX1pCREVNX1pCREVNX0FGQ19EQ0RfRU4oeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWENWUl9aQkRFTV9aQkRFTV9BRkNfRENEX0VOX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1pCREVNX0FGQ19EQ0RfRU5fTUFTSykKKyNkZWZpbmUgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX09VVF9NQVNLICAgICAgICAoMHgxRjAwVSkKKyNkZWZpbmUgWENWUl9aQkRFTV9aQkRFTV9BRkNfQUZDX09VVF9TSElGVCAgICAgICAoOFUpCisjZGVmaW5lIFhDVlJfWkJERU1fWkJERU1fQUZDX0FGQ19PVVQoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBYQ1ZSX1pCREVNX1pCREVNX0FGQ19BRkNfT1VUX1NISUZUKSkgJiBYQ1ZSX1pCREVNX1pCREVNX0FGQ19BRkNfT1VUX01BU0spCisKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBYQ1ZSX1pCREVNX1JlZ2lzdGVyX01hc2tzICovCisKKworLyogWENWUl9aQkRFTSAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFhDVlJfWkJERU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFhDVlJfWkJERU1fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NDAwNUM0ODB1KQorLyoqIFBlcmlwaGVyYWwgWENWUl9aQkRFTSBiYXNlIHBvaW50ZXIgKi8KKyNkZWZpbmUgWENWUl9aQkRFTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDVlJfWkJERU1fVHlwZSAqKVhDVlJfWkJERU1fQkFTRSkKKy8qKiBBcnJheSBpbml0aWFsaXplciBvZiBYQ1ZSX1pCREVNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgWENWUl9aQkRFTV9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICB7IFhDVlJfWkJERU1fQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWENWUl9aQkRFTSBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcnMgKi8KKyNkZWZpbmUgWENWUl9aQkRFTV9CQVNFX1BUUlMgICAgICAgICAgICAgICAgICAgICB7IFhDVlJfWkJERU0gfQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFhDVlJfWkJERU1fUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBaTEwgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBaTExfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgWkxMIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyCisgKiBAeworICovCisKKy8qKiBaTEwgLSBSZWdpc3RlciBMYXlvdXQgVHlwZWRlZiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX0lPIHVpbnQzMl90IElSUVNUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJTlRFUlJVUFQgUkVRVUVTVCBTVEFUVVMsIG9mZnNldDogMHgwICovCisgIF9fSU8gdWludDMyX3QgUEhZX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBIWSBDT05UUk9MLCBvZmZzZXQ6IDB4NCAqLworICBfX0lPIHVpbnQzMl90IEVWRU5UX1RNUjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBFVkVOVCBUSU1FUiwgb2Zmc2V0OiAweDggKi8KKyAgX19JICB1aW50MzJfdCBUSU1FU1RBTVA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVElNRVNUQU1QLCBvZmZzZXQ6IDB4QyAqLworICBfX0lPIHVpbnQzMl90IFQxQ01QOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMSBDT01QQVJFLCBvZmZzZXQ6IDB4MTAgKi8KKyAgX19JTyB1aW50MzJfdCBUMkNNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDIgQ09NUEFSRSwgb2Zmc2V0OiAweDE0ICovCisgIF9fSU8gdWludDMyX3QgVDJQUklNRUNNUDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFQyIFBSSU1FIENPTVBBUkUsIG9mZnNldDogMHgxOCAqLworICBfX0lPIHVpbnQzMl90IFQzQ01QOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUMyBDT01QQVJFLCBvZmZzZXQ6IDB4MUMgKi8KKyAgX19JTyB1aW50MzJfdCBUNENNUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVDQgQ09NUEFSRSwgb2Zmc2V0OiAweDIwICovCisgIF9fSU8gdWludDMyX3QgUEFfUFdSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBIFBPV0VSLCBvZmZzZXQ6IDB4MjQgKi8KKyAgX19JTyB1aW50MzJfdCBDSEFOTkVMX05VTTA7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ0hBTk5FTCBOVU1CRVIgMCwgb2Zmc2V0OiAweDI4ICovCisgIF9fSSAgdWludDMyX3QgTFFJX0FORF9SU1NJOyAgICAgICAgICAgICAgICAgICAgICAvKio8IExRSSBBTkQgUlNTSSwgb2Zmc2V0OiAweDJDICovCisgIF9fSU8gdWludDMyX3QgTUFDU0hPUlRBRERSUzA7ICAgICAgICAgICAgICAgICAgICAvKio8IE1BQyBTSE9SVCBBRERSRVNTIDAsIG9mZnNldDogMHgzMCAqLworICBfX0lPIHVpbnQzMl90IE1BQ0xPTkdBRERSUzBfTFNCOyAgICAgICAgICAgICAgICAgLyoqPCBNQUMgTE9ORyBBRERSRVNTIDAgTFNCLCBvZmZzZXQ6IDB4MzQgKi8KKyAgX19JTyB1aW50MzJfdCBNQUNMT05HQUREUlMwX01TQjsgICAgICAgICAgICAgICAgIC8qKjwgTUFDIExPTkcgQUREUkVTUyAwIE1TQiwgb2Zmc2V0OiAweDM4ICovCisgIF9fSU8gdWludDMyX3QgUlhfRlJBTUVfRklMVEVSOyAgICAgICAgICAgICAgICAgICAvKio8IFJFQ0VJVkUgRlJBTUUgRklMVEVSLCBvZmZzZXQ6IDB4M0MgKi8KKyAgX19JTyB1aW50MzJfdCBDQ0FfTFFJX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQ0NBIEFORCBMUUkgQ09OVFJPTCwgb2Zmc2V0OiAweDQwICovCisgIF9fSU8gdWludDMyX3QgQ0NBMl9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IENDQTIgQ09OVFJPTCwgb2Zmc2V0OiAweDQ0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8wWzRdOworICBfX0lPIHVpbnQzMl90IERTTV9DVFJMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEU00gQ09OVFJPTCwgb2Zmc2V0OiAweDRDICovCisgIF9fSU8gdWludDMyX3QgQlNNX0NUUkw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IEJTTSBDT05UUk9MLCBvZmZzZXQ6IDB4NTAgKi8KKyAgX19JTyB1aW50MzJfdCBNQUNTSE9SVEFERFJTMTsgICAgICAgICAgICAgICAgICAgIC8qKjwgTUFDIFNIT1JUIEFERFJFU1MgRk9SIFBBTjEsIG9mZnNldDogMHg1NCAqLworICBfX0lPIHVpbnQzMl90IE1BQ0xPTkdBRERSUzFfTFNCOyAgICAgICAgICAgICAgICAgLyoqPCBNQUMgTE9ORyBBRERSRVNTIDEgTFNCLCBvZmZzZXQ6IDB4NTggKi8KKyAgX19JTyB1aW50MzJfdCBNQUNMT05HQUREUlMxX01TQjsgICAgICAgICAgICAgICAgIC8qKjwgTUFDIExPTkcgQUREUkVTUyAxIE1TQiwgb2Zmc2V0OiAweDVDICovCisgIF9fSU8gdWludDMyX3QgRFVBTF9QQU5fQ1RSTDsgICAgICAgICAgICAgICAgICAgICAvKio8IERVQUwgUEFOIENPTlRST0wsIG9mZnNldDogMHg2MCAqLworICBfX0lPIHVpbnQzMl90IENIQU5ORUxfTlVNMTsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBDSEFOTkVMIE5VTUJFUiAxLCBvZmZzZXQ6IDB4NjQgKi8KKyAgX19JTyB1aW50MzJfdCBTQU1fQ1RSTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU0FNIENPTlRST0wsIG9mZnNldDogMHg2OCAqLworICBfX0lPIHVpbnQzMl90IFNBTV9UQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTT1VSQ0UgQUREUkVTUyBNQU5BR0VNRU5UIFRBQkxFLCBvZmZzZXQ6IDB4NkMgKi8KKyAgX19JICB1aW50MzJfdCBTQU1fTUFUQ0g7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU09VUkNFIEFERFJFU1MgTUFOQUdFTUVOVCBNQVRDSCwgb2Zmc2V0OiAweDcwICovCisgIF9fSSAgdWludDMyX3QgU0FNX0ZSRUVfSURYOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFNBTSBGUkVFIElOREVYLCBvZmZzZXQ6IDB4NzQgKi8KKyAgX19JTyB1aW50MzJfdCBTRVFfQ1RSTF9TVFM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU0VRVUVOQ0UgQ09OVFJPTCBBTkQgU1RBVFVTLCBvZmZzZXQ6IDB4NzggKi8KKyAgX19JTyB1aW50MzJfdCBBQ0tERUxBWTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQUNLIERFTEFZLCBvZmZzZXQ6IDB4N0MgKi8KKyAgX19JTyB1aW50MzJfdCBGSUxURVJGQUlMX0NPREU7ICAgICAgICAgICAgICAgICAgIC8qKjwgRklMVEVSIEZBSUwgQ09ERSwgb2Zmc2V0OiAweDgwICovCisgIF9fSU8gdWludDMyX3QgUlhfV1RSX01BUks7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IFJFQ0VJVkUgV0FURVIgTUFSSywgb2Zmc2V0OiAweDg0ICovCisgICAgICAgdWludDhfdCBSRVNFUlZFRF8xWzRdOworICBfX0lPIHVpbnQzMl90IFNMT1RfUFJFTE9BRDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTTE9UIFBSRUxPQUQsIG9mZnNldDogMHg4QyAqLworICBfX0kgIHVpbnQzMl90IFNFUV9TVEFURTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCA4MDIuMTUuNCBTRVFVRU5DRSBTVEFURSwgb2Zmc2V0OiAweDkwICovCisgIF9fSU8gdWludDMyX3QgVE1SX1BSRVNDQUxFOyAgICAgICAgICAgICAgICAgICAgICAvKio8IFRJTUVSIFBSRVNDQUxFUiwgb2Zmc2V0OiAweDk0ICovCisgIF9fSU8gdWludDMyX3QgTEVOSUVOQ1lfTFNCOyAgICAgICAgICAgICAgICAgICAgICAvKio8IExFTklFTkNZIExTQiwgb2Zmc2V0OiAweDk4ICovCisgIF9fSU8gdWludDMyX3QgTEVOSUVOQ1lfTVNCOyAgICAgICAgICAgICAgICAgICAgICAvKio8IExFTklFTkNZIE1TQiwgb2Zmc2V0OiAweDlDICovCisgIF9fSSAgdWludDMyX3QgUEFSVF9JRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBBUlQgSUQsIG9mZnNldDogMHhBMCAqLworICAgICAgIHVpbnQ4X3QgUkVTRVJWRURfMls5Ml07CisgIF9fSU8gdWludDE2X3QgUEtUX0JVRkZFUl9UWFs2NF07ICAgICAgICAgICAgICAgICAvKio8IFBhY2tldCBCdWZmZXIgVFgsIGFycmF5IG9mZnNldDogMHgxMDAsIGFycmF5IHN0ZXA6IDB4MiAqLworICBfX0lPIHVpbnQxNl90IFBLVF9CVUZGRVJfUlhbNjRdOyAgICAgICAgICAgICAgICAgLyoqPCBQYWNrZXQgQnVmZmVyIFJYLCBhcnJheSBvZmZzZXQ6IDB4MTgwLCBhcnJheSBzdGVwOiAweDIgKi8KK30gWkxMX1R5cGU7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFpMTCBSZWdpc3RlciBNYXNrcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIFpMTF9SZWdpc3Rlcl9NYXNrcyBaTEwgUmVnaXN0ZXIgTWFza3MKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIElSUVNUUyAtIElOVEVSUlVQVCBSRVFVRVNUIFNUQVRVUyAqLworI2RlZmluZSBaTExfSVJRU1RTX1NFUUlSUV9NQVNLICAgICAgICAgICAgICAgICAgICgweDFVKQorI2RlZmluZSBaTExfSVJRU1RTX1NFUUlSUV9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19TRVFJUlEoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfU0VRSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1NFUUlSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1RYSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICgweDJVKQorI2RlZmluZSBaTExfSVJRU1RTX1RYSVJRX1NISUZUICAgICAgICAgICAgICAgICAgICgxVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UWElSUSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfVFhJUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVFhJUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19SWElSUV9NQVNLICAgICAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWElSUV9TSElGVCAgICAgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhJUlEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1JYSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1JYSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfQ0NBSVJRX01BU0sgICAgICAgICAgICAgICAgICAgKDB4OFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfQ0NBSVJRX1NISUZUICAgICAgICAgICAgICAgICAgKDNVKQorI2RlZmluZSBaTExfSVJRU1RTX0NDQUlSUSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19DQ0FJUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfQ0NBSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhXVFJNUktJUlFfTUFTSyAgICAgICAgICAgICAgKDB4MTBVKQorI2RlZmluZSBaTExfSVJRU1RTX1JYV1RSTVJLSVJRX1NISUZUICAgICAgICAgICAgICg0VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWFdUUk1SS0lSUSh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfUlhXVFJNUktJUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfUlhXVFJNUktJUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19GSUxURVJGQUlMX0lSUV9NQVNLICAgICAgICAgICAoMHgyMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfRklMVEVSRkFJTF9JUlFfU0hJRlQgICAgICAgICAgKDVVKQorI2RlZmluZSBaTExfSVJRU1RTX0ZJTFRFUkZBSUxfSVJRKHgpICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19GSUxURVJGQUlMX0lSUV9TSElGVCkpICYgWkxMX0lSUVNUU19GSUxURVJGQUlMX0lSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1BMTF9VTkxPQ0tfSVJRX01BU0sgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19QTExfVU5MT0NLX0lSUV9TSElGVCAgICAgICAgICAoNlUpCisjZGVmaW5lIFpMTF9JUlFTVFNfUExMX1VOTE9DS19JUlEoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1BMTF9VTkxPQ0tfSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1BMTF9VTkxPQ0tfSVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfUlhfRlJNX1BFTkRfTUFTSyAgICAgICAgICAgICAgKDB4ODBVKQorI2RlZmluZSBaTExfSVJRU1RTX1JYX0ZSTV9QRU5EX1NISUZUICAgICAgICAgICAgICg3VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWF9GUk1fUEVORCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfUlhfRlJNX1BFTkRfU0hJRlQpKSAmIFpMTF9JUlFTVFNfUlhfRlJNX1BFTkRfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19XQUtFX0lSUV9NQVNLICAgICAgICAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1dBS0VfSVJRX1NISUZUICAgICAgICAgICAgICAgICg4VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19XQUtFX0lSUSh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfV0FLRV9JUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfV0FLRV9JUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UU01fSVJRX01BU0sgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RTTV9JUlFfU0hJRlQgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVFNNX0lSUSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RTTV9JUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVFNNX0lSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX0VOSF9QS1RfU1RBVFVTX01BU0sgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfRU5IX1BLVF9TVEFUVVNfU0hJRlQgICAgICAgICAgKDExVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19FTkhfUEtUX1NUQVRVUyh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfRU5IX1BLVF9TVEFUVVNfU0hJRlQpKSAmIFpMTF9JUlFTVFNfRU5IX1BLVF9TVEFUVVNfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19QSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19QSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBaTExfSVJRU1RTX1BJKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19QSV9TSElGVCkpICYgWkxMX0lSUVNUU19QSV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1NSQ0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1NSQ0FERFJfU0hJRlQgICAgICAgICAgICAgICAgICgxM1UpCisjZGVmaW5lIFpMTF9JUlFTVFNfU1JDQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1NSQ0FERFJfU0hJRlQpKSAmIFpMTF9JUlFTVFNfU1JDQUREUl9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX0NDQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDQwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX0NDQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICgxNFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfQ0NBKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX0NDQV9TSElGVCkpICYgWkxMX0lSUVNUU19DQ0FfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19DUkNWQUxJRF9NQVNLICAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19DUkNWQUxJRF9TSElGVCAgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBaTExfSVJRU1RTX0NSQ1ZBTElEKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19DUkNWQUxJRF9TSElGVCkpICYgWkxMX0lSUVNUU19DUkNWQUxJRF9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjFJUlFfTUFTSyAgICAgICAgICAgICAgICAgICgweDEwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIxSVJRX1NISUZUICAgICAgICAgICAgICAgICAoMTZVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjFJUlEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UTVIxSVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1RNUjFJUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIySVJRX01BU0sgICAgICAgICAgICAgICAgICAoMHgyMDAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMklSUV9TSElGVCAgICAgICAgICAgICAgICAgKDE3VSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIySVJRKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfVE1SMklSUV9TSElGVCkpICYgWkxMX0lSUVNUU19UTVIySVJRX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SM0lSUV9NQVNLICAgICAgICAgICAgICAgICAgKDB4NDAwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjNJUlFfU0hJRlQgICAgICAgICAgICAgICAgICgxOFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SM0lSUSh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RNUjNJUlFfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVE1SM0lSUV9NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjRJUlFfTUFTSyAgICAgICAgICAgICAgICAgICgweDgwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVI0SVJRX1NISUZUICAgICAgICAgICAgICAgICAoMTlVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjRJUlEoeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UTVI0SVJRX1NISUZUKSkgJiBaTExfSVJRU1RTX1RNUjRJUlFfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIxTVNLX01BU0sgICAgICAgICAgICAgICAgICAoMHgxMDAwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjFNU0tfU0hJRlQgICAgICAgICAgICAgICAgICgyMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMU1TSyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RNUjFNU0tfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVE1SMU1TS19NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjJNU0tfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwMDAwMFUpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SMk1TS19TSElGVCAgICAgICAgICAgICAgICAgKDIxVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIyTVNLKHgpICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9JUlFTVFNfVE1SMk1TS19TSElGVCkpICYgWkxMX0lSUVNUU19UTVIyTVNLX01BU0spCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SM01TS19NQVNLICAgICAgICAgICAgICAgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVIzTVNLX1NISUZUICAgICAgICAgICAgICAgICAoMjJVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjNNU0soeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19UTVIzTVNLX1NISUZUKSkgJiBaTExfSVJRU1RTX1RNUjNNU0tfTUFTSykKKyNkZWZpbmUgWkxMX0lSUVNUU19UTVI0TVNLX01BU0sgICAgICAgICAgICAgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBaTExfSVJRU1RTX1RNUjRNU0tfU0hJRlQgICAgICAgICAgICAgICAgICgyM1UpCisjZGVmaW5lIFpMTF9JUlFTVFNfVE1SNE1TSyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfSVJRU1RTX1RNUjRNU0tfU0hJRlQpKSAmIFpMTF9JUlFTVFNfVE1SNE1TS19NQVNLKQorI2RlZmluZSBaTExfSVJRU1RTX1JYX0ZSQU1FX0xFTkdUSF9NQVNLICAgICAgICAgICgweDdGMDAwMDAwVSkKKyNkZWZpbmUgWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfU0hJRlQgICAgICAgICAoMjRVKQorI2RlZmluZSBaTExfSVJRU1RTX1JYX0ZSQU1FX0xFTkdUSCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0lSUVNUU19SWF9GUkFNRV9MRU5HVEhfU0hJRlQpKSAmIFpMTF9JUlFTVFNfUlhfRlJBTUVfTEVOR1RIX01BU0spCisKKy8qISBAbmFtZSBQSFlfQ1RSTCAtIFBIWSBDT05UUk9MICovCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9YQ1ZTRVFfTUFTSyAgICAgICAgICAgICAgICAgKDB4N1UpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9YQ1ZTRVFfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfWENWU0VRKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1hDVlNFUV9TSElGVCkpICYgWkxMX1BIWV9DVFJMX1hDVlNFUV9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQVVUT0FDS19NQVNLICAgICAgICAgICAgICAgICgweDhVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQVVUT0FDS19TSElGVCAgICAgICAgICAgICAgICgzVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0FVVE9BQ0soeCkgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9BVVRPQUNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfQVVUT0FDS19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUlhBQ0tSUURfTUFTSyAgICAgICAgICAgICAgICgweDEwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYQUNLUlFEX1NISUZUICAgICAgICAgICAgICAoNFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9SWEFDS1JRRCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfUlhBQ0tSUURfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9SWEFDS1JRRF9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfTUFTSyAgICAgICAgICAgICAgICgweDIwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NDQUJGUlRYX1NISUZUICAgICAgICAgICAgICAoNVUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DQ0FCRlJUWCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfQ0NBQkZSVFhfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9DQ0FCRlJUWF9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfU0xPVFRFRF9NQVNLICAgICAgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1NMT1RURURfU0hJRlQgICAgICAgICAgICAgICAoNlUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9TTE9UVEVEKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfU0xPVFRFRF9TSElGVCkpICYgWkxMX1BIWV9DVFJMX1NMT1RURURfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUlRSSUdFTl9NQVNLICAgICAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVJUUklHRU5fU0hJRlQgICAgICAgICAgICAgKDdVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SVFJJR0VOKHgpICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RNUlRSSUdFTl9TSElGVCkpICYgWkxMX1BIWV9DVFJMX1RNUlRSSUdFTl9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfU0VRTVNLX01BU0sgICAgICAgICAgICAgICAgICgweDEwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9TRVFNU0tfU0hJRlQgICAgICAgICAgICAgICAgKDhVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfU0VRTVNLKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1NFUU1TS19TSElGVCkpICYgWkxMX1BIWV9DVFJMX1NFUU1TS19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFhNU0tfTUFTSyAgICAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UWE1TS19TSElGVCAgICAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFhNU0soeCkgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RYTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVFhNU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYTVNLX01BU0sgICAgICAgICAgICAgICAgICAoMHg0MDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUlhNU0tfU0hJRlQgICAgICAgICAgICAgICAgICgxMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9SWE1TSyh4KSAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfUlhNU0tfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9SWE1TS19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBTVNLX01BU0sgICAgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DQ0FNU0tfU0hJRlQgICAgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NDQU1TSyh4KSAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9DQ0FNU0tfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9DQ0FNU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYX1dNUktfTVNLX01BU0sgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1JYX1dNUktfTVNLX1NISUZUICAgICAgICAgICAoMTJVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUlhfV01SS19NU0soeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1JYX1dNUktfTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfUlhfV01SS19NU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLX01BU0sgICAgICAgICAoMHgyMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLX1NISUZUICAgICAgICAoMTNVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfRklMVEVSRkFJTF9NU0soeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX0ZJTFRFUkZBSUxfTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfRklMVEVSRkFJTF9NU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1BMTF9VTkxPQ0tfTVNLX01BU0sgICAgICAgICAoMHg0MDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1BMTF9VTkxPQ0tfTVNLX1NISUZUICAgICAgICAoMTRVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfUExMX1VOTE9DS19NU0soeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1BMTF9VTkxPQ0tfTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfUExMX1VOTE9DS19NU0tfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NSQ19NU0tfTUFTSyAgICAgICAgICAgICAgICAoMHg4MDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX0NSQ19NU0tfU0hJRlQgICAgICAgICAgICAgICAoMTVVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ1JDX01TSyh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX0NSQ19NU0tfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9DUkNfTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9XQUtFX01TS19NQVNLICAgICAgICAgICAgICAgKDB4MTAwMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfV0FLRV9NU0tfU0hJRlQgICAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9XQUtFX01TSyh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfV0FLRV9NU0tfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9XQUtFX01TS19NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFNNX01TS19NQVNLICAgICAgICAgICAgICAgICgweDQwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RTTV9NU0tfU0hJRlQgICAgICAgICAgICAgICAoMThVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFNNX01TSyh4KSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RTTV9NU0tfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UU01fTVNLX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVIxQ01QX0VOX01BU0sgICAgICAgICAgICAgKDB4MTAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjFDTVBfRU5fU0hJRlQgICAgICAgICAgICAoMjBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SMUNNUF9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RNUjFDTVBfRU5fU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UTVIxQ01QX0VOX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVIyQ01QX0VOX01BU0sgICAgICAgICAgICAgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjJDTVBfRU5fU0hJRlQgICAgICAgICAgICAoMjFVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SMkNNUF9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RNUjJDTVBfRU5fU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UTVIyQ01QX0VOX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVIzQ01QX0VOX01BU0sgICAgICAgICAgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjNDTVBfRU5fU0hJRlQgICAgICAgICAgICAoMjJVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SM0NNUF9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RNUjNDTVBfRU5fU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UTVIzQ01QX0VOX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UTVI0Q01QX0VOX01BU0sgICAgICAgICAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RNUjRDTVBfRU5fU0hJRlQgICAgICAgICAgICAoMjNVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVE1SNENNUF9FTih4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RNUjRDTVBfRU5fU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UTVI0Q01QX0VOX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UQzJQUklNRV9FTl9NQVNLICAgICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UQzJQUklNRV9FTl9TSElGVCAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RDMlBSSU1FX0VOKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9UQzJQUklNRV9FTl9TSElGVCkpICYgWkxMX1BIWV9DVFJMX1RDMlBSSU1FX0VOX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19NQVNLICAgICAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19TSElGVCAgICAgICAgICAgKDI1VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1BST01JU0NVT1VTKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9QUk9NSVNDVU9VU19TSElGVCkpICYgWkxMX1BIWV9DVFJMX1BST01JU0NVT1VTX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DQ0FUWVBFX01BU0sgICAgICAgICAgICAgICAgKDB4MTgwMDAwMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfQ0NBVFlQRV9TSElGVCAgICAgICAgICAgICAgICgyN1UpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9DQ0FUWVBFKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfQ0NBVFlQRV9TSElGVCkpICYgWkxMX1BIWV9DVFJMX0NDQVRZUEVfTUFTSykKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1BBTkNPUkROVFIwX01BU0sgICAgICAgICAgICAoMHgyMDAwMDAwMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9QQU5DT1JETlRSMF9TSElGVCAgICAgICAgICAgKDI5VSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1BBTkNPUkROVFIwKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QSFlfQ1RSTF9QQU5DT1JETlRSMF9TSElGVCkpICYgWkxMX1BIWV9DVFJMX1BBTkNPUkROVFIwX01BU0spCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UQzNUTU9VVF9NQVNLICAgICAgICAgICAgICAgKDB4NDAwMDAwMDBVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVEMzVE1PVVRfU0hJRlQgICAgICAgICAgICAgICgzMFUpCisjZGVmaW5lIFpMTF9QSFlfQ1RSTF9UQzNUTU9VVCh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUEhZX0NUUkxfVEMzVE1PVVRfU0hJRlQpKSAmIFpMTF9QSFlfQ1RSTF9UQzNUTU9VVF9NQVNLKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFJDVl9NU0tfTUFTSyAgICAgICAgICAgICAgICgweDgwMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1BIWV9DVFJMX1RSQ1ZfTVNLX1NISUZUICAgICAgICAgICAgICAoMzFVKQorI2RlZmluZSBaTExfUEhZX0NUUkxfVFJDVl9NU0soeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BIWV9DVFJMX1RSQ1ZfTVNLX1NISUZUKSkgJiBaTExfUEhZX0NUUkxfVFJDVl9NU0tfTUFTSykKKworLyohIEBuYW1lIEVWRU5UX1RNUiAtIEVWRU5UIFRJTUVSICovCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX01BU0sgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX1NISUZUICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9MRCh4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfTERfU0hJRlQpKSAmIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0xEX01BU0spCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9NQVNLICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0FERF9TSElGVCAgICAgICAgKDFVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9BREQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfQUREX1NISUZUKSkgJiBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9BRERfTUFTSykKKyNkZWZpbmUgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfRlJBQ19NQVNLICAgICAgICAoMHhGMFUpCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SX0ZSQUNfU0hJRlQgICAgICAgKDRVKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9GUkFDKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfRlJBQ19TSElGVCkpICYgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfRlJBQ19NQVNLKQorI2RlZmluZSBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9NQVNLICAgICAgICAgICAgICgweEZGRkZGRjAwVSkKKyNkZWZpbmUgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfU0hJRlQgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9FVkVOVF9UTVJfRVZFTlRfVE1SKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRVZFTlRfVE1SX0VWRU5UX1RNUl9TSElGVCkpICYgWkxMX0VWRU5UX1RNUl9FVkVOVF9UTVJfTUFTSykKKworLyohIEBuYW1lIFRJTUVTVEFNUCAtIFRJTUVTVEFNUCAqLworI2RlZmluZSBaTExfVElNRVNUQU1QX1RJTUVTVEFNUF9NQVNLICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFpMTF9USU1FU1RBTVBfVElNRVNUQU1QX1NISUZUICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfVElNRVNUQU1QX1RJTUVTVEFNUCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1RJTUVTVEFNUF9USU1FU1RBTVBfU0hJRlQpKSAmIFpMTF9USU1FU1RBTVBfVElNRVNUQU1QX01BU0spCisKKy8qISBAbmFtZSBUMUNNUCAtIFQxIENPTVBBUkUgKi8KKyNkZWZpbmUgWkxMX1QxQ01QX1QxQ01QX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBaTExfVDFDTVBfVDFDTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1QxQ01QX1QxQ01QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9UMUNNUF9UMUNNUF9TSElGVCkpICYgWkxMX1QxQ01QX1QxQ01QX01BU0spCisKKy8qISBAbmFtZSBUMkNNUCAtIFQyIENPTVBBUkUgKi8KKyNkZWZpbmUgWkxMX1QyQ01QX1QyQ01QX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZVKQorI2RlZmluZSBaTExfVDJDTVBfVDJDTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1QyQ01QX1QyQ01QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9UMkNNUF9UMkNNUF9TSElGVCkpICYgWkxMX1QyQ01QX1QyQ01QX01BU0spCisKKy8qISBAbmFtZSBUMlBSSU1FQ01QIC0gVDIgUFJJTUUgQ09NUEFSRSAqLworI2RlZmluZSBaTExfVDJQUklNRUNNUF9UMlBSSU1FQ01QX01BU0sgICAgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBaTExfVDJQUklNRUNNUF9UMlBSSU1FQ01QX1NISUZUICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1QyUFJJTUVDTVBfVDJQUklNRUNNUCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9UMlBSSU1FQ01QX1QyUFJJTUVDTVBfU0hJRlQpKSAmIFpMTF9UMlBSSU1FQ01QX1QyUFJJTUVDTVBfTUFTSykKKworLyohIEBuYW1lIFQzQ01QIC0gVDMgQ09NUEFSRSAqLworI2RlZmluZSBaTExfVDNDTVBfVDNDTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFpMTF9UM0NNUF9UM0NNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfVDNDTVBfVDNDTVAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1QzQ01QX1QzQ01QX1NISUZUKSkgJiBaTExfVDNDTVBfVDNDTVBfTUFTSykKKworLyohIEBuYW1lIFQ0Q01QIC0gVDQgQ09NUEFSRSAqLworI2RlZmluZSBaTExfVDRDTVBfVDRDTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICgweEZGRkZGRlUpCisjZGVmaW5lIFpMTF9UNENNUF9UNENNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfVDRDTVBfVDRDTVAoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1Q0Q01QX1Q0Q01QX1NISUZUKSkgJiBaTExfVDRDTVBfVDRDTVBfTUFTSykKKworLyohIEBuYW1lIFBBX1BXUiAtIFBBIFBPV0VSICovCisjZGVmaW5lIFpMTF9QQV9QV1JfUEFfUFdSX01BU0sgICAgICAgICAgICAgICAgICAgKDB4M0ZVKQorI2RlZmluZSBaTExfUEFfUFdSX1BBX1BXUl9TSElGVCAgICAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1BBX1BXUl9QQV9QV1IoeCkgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9QQV9QV1JfUEFfUFdSX1NISUZUKSkgJiBaTExfUEFfUFdSX1BBX1BXUl9NQVNLKQorCisvKiEgQG5hbWUgQ0hBTk5FTF9OVU0wIC0gQ0hBTk5FTCBOVU1CRVIgMCAqLworI2RlZmluZSBaTExfQ0hBTk5FTF9OVU0wX0NIQU5ORUxfTlVNMF9NQVNLICAgICAgICgweDdGVSkKKyNkZWZpbmUgWkxMX0NIQU5ORUxfTlVNMF9DSEFOTkVMX05VTTBfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFpMTF9DSEFOTkVMX05VTTBfQ0hBTk5FTF9OVU0wKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQ0hBTk5FTF9OVU0wX0NIQU5ORUxfTlVNMF9TSElGVCkpICYgWkxMX0NIQU5ORUxfTlVNMF9DSEFOTkVMX05VTTBfTUFTSykKKworLyohIEBuYW1lIExRSV9BTkRfUlNTSSAtIExRSSBBTkQgUlNTSSAqLworI2RlZmluZSBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRV9NQVNLICAgICAgICAgICgweEZGVSkKKyNkZWZpbmUgWkxMX0xRSV9BTkRfUlNTSV9MUUlfVkFMVUVfU0hJRlQgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfTFFJX1ZBTFVFKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTFFJX0FORF9SU1NJX0xRSV9WQUxVRV9TSElGVCkpICYgWkxMX0xRSV9BTkRfUlNTSV9MUUlfVkFMVUVfTUFTSykKKyNkZWZpbmUgWkxMX0xRSV9BTkRfUlNTSV9SU1NJX01BU0sgICAgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWkxMX0xRSV9BTkRfUlNTSV9SU1NJX1NISUZUICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfUlNTSSh4KSAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTFFJX0FORF9SU1NJX1JTU0lfU0hJRlQpKSAmIFpMTF9MUUlfQU5EX1JTU0lfUlNTSV9NQVNLKQorI2RlZmluZSBaTExfTFFJX0FORF9SU1NJX0NDQTFfRURfRk5MX01BU0sgICAgICAgICgweEZGMDAwMFUpCisjZGVmaW5lIFpMTF9MUUlfQU5EX1JTU0lfQ0NBMV9FRF9GTkxfU0hJRlQgICAgICAgKDE2VSkKKyNkZWZpbmUgWkxMX0xRSV9BTkRfUlNTSV9DQ0ExX0VEX0ZOTCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9MUUlfQU5EX1JTU0lfQ0NBMV9FRF9GTkxfU0hJRlQpKSAmIFpMTF9MUUlfQU5EX1JTU0lfQ0NBMV9FRF9GTkxfTUFTSykKKworLyohIEBuYW1lIE1BQ1NIT1JUQUREUlMwIC0gTUFDIFNIT1JUIEFERFJFU1MgMCAqLworI2RlZmluZSBaTExfTUFDU0hPUlRBRERSUzBfTUFDUEFOSUQwX01BU0sgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBaTExfTUFDU0hPUlRBRERSUzBfTUFDUEFOSUQwX1NISUZUICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMwX01BQ1BBTklEMCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDBfU0hJRlQpKSAmIFpMTF9NQUNTSE9SVEFERFJTMF9NQUNQQU5JRDBfTUFTSykKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMwX01BQ1NIT1JUQUREUlMwX01BU0sgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMF9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMwX01BQ1NIT1JUQUREUlMwKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9NQUNTSE9SVEFERFJTMF9NQUNTSE9SVEFERFJTMF9TSElGVCkpICYgWkxMX01BQ1NIT1JUQUREUlMwX01BQ1NIT1JUQUREUlMwX01BU0spCisKKy8qISBAbmFtZSBNQUNMT05HQUREUlMwX0xTQiAtIE1BQyBMT05HIEFERFJFU1MgMCBMU0IgKi8KKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzBfTFNCX01BQ0xPTkdBRERSUzBfTFNCX01BU0sgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBaTExfTUFDTE9OR0FERFJTMF9MU0JfTUFDTE9OR0FERFJTMF9MU0JfU0hJRlQgKDBVKQorI2RlZmluZSBaTExfTUFDTE9OR0FERFJTMF9MU0JfTUFDTE9OR0FERFJTMF9MU0IoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTUFDTE9OR0FERFJTMF9MU0JfTUFDTE9OR0FERFJTMF9MU0JfU0hJRlQpKSAmIFpMTF9NQUNMT05HQUREUlMwX0xTQl9NQUNMT05HQUREUlMwX0xTQl9NQVNLKQorCisvKiEgQG5hbWUgTUFDTE9OR0FERFJTMF9NU0IgLSBNQUMgTE9ORyBBRERSRVNTIDAgTVNCICovCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMwX01TQl9NQUNMT05HQUREUlMwX01TQl9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzBfTVNCX01BQ0xPTkdBRERSUzBfTVNCX1NISUZUICgwVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzBfTVNCX01BQ0xPTkdBRERSUzBfTVNCKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX01BQ0xPTkdBRERSUzBfTVNCX01BQ0xPTkdBRERSUzBfTVNCX1NISUZUKSkgJiBaTExfTUFDTE9OR0FERFJTMF9NU0JfTUFDTE9OR0FERFJTMF9NU0JfTUFTSykKKworLyohIEBuYW1lIFJYX0ZSQU1FX0ZJTFRFUiAtIFJFQ0VJVkUgRlJBTUUgRklMVEVSICovCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQkVBQ09OX0ZUX01BU0sgICAgICAgKDB4MVUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQkVBQ09OX0ZUX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0JFQUNPTl9GVCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9CRUFDT05fRlRfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfQkVBQ09OX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfREFUQV9GVF9NQVNLICAgICAgICAgKDB4MlUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfREFUQV9GVF9TSElGVCAgICAgICAgKDFVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0RBVEFfRlQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9EQVRBX0ZUX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0RBVEFfRlRfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ0tfRlRfTUFTSyAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ0tfRlRfU0hJRlQgICAgICAgICAoMlUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQUNLX0ZUKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0FDS19GVF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ0tfRlRfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9DTURfRlRfTUFTSyAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9DTURfRlRfU0hJRlQgICAgICAgICAoM1UpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfQ01EX0ZUKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0NNRF9GVF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9DTURfRlRfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX0ZUX01BU0sgICAgICAgICAoMHgxMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTExETl9GVF9TSElGVCAgICAgICAgKDRVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fRlQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX0ZUX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fRlRfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfRlRfTUFTSyAoMHgyMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX0ZUX1NISUZUICg1VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfRlQoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfTVVMVElQVVJQT1NFX0ZUX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX01VTFRJUFVSUE9TRV9GVF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX05TX0ZUX01BU0sgICAgICAgICAgICgweDQwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9OU19GVF9TSElGVCAgICAgICAgICAoNlUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTlNfRlQoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX05TX0ZUX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX05TX0ZUX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRlRfTUFTSyAgICAgKDB4ODBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZUX1NISUZUICAgICg3VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9GVCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRlRfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRlRfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GUk1fVkVSX0ZJTFRFUl9NQVNLICAoMHhGMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZSTV9WRVJfRklMVEVSX1NISUZUICg4VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GUk1fVkVSX0ZJTFRFUih4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVJfU0hJRlQpKSAmIFpMTF9SWF9GUkFNRV9GSUxURVJfRlJNX1ZFUl9GSUxURVJfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVNfTUFTSyAoMHg0MDAwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVNfU0hJRlQgKDE0VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVMoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0FDVElWRV9QUk9NSVNDVU9VU19TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9BQ1RJVkVfUFJPTUlTQ1VPVVNfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9GQ1NfQ0hLX01BU0sgKDB4ODAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfRkNTX0NIS19TSElGVCAoMTVVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZDU19DSEsoeCkgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9GQ1NfQ0hLX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX0ZDU19DSEtfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQkVBQ09OX1JFQ0RfTUFTSyAoMHgxMDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0JFQUNPTl9SRUNEX1NISUZUICgxNlUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0JFQUNPTl9SRUNEKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9CRUFDT05fUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQkVBQ09OX1JFQ0RfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfREFUQV9SRUNEX01BU0sgICAoMHgyMDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0RBVEFfUkVDRF9TSElGVCAgKDE3VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfREFUQV9SRUNEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0RBVEFfUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfREFUQV9SRUNEX01BU0spCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0FDS19SRUNEX01BU0sgICAgKDB4NDAwMDBVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9BQ0tfUkVDRF9TSElGVCAgICgxOFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0FDS19SRUNEKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9BQ0tfUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQUNLX1JFQ0RfTUFTSykKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQ01EX1JFQ0RfTUFTSyAgICAoMHg4MDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0NNRF9SRUNEX1NISUZUICAgKDE5VSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9GVjJfQ01EX1JFQ0QoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfRlYyX0NNRF9SRUNEX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0ZWMl9DTURfUkVDRF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fUkVDRF9NQVNLICAgICAgICgweDEwMDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfTExETl9SRUNEX1NISUZUICAgICAgKDIwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9MTEROX1JFQ0QoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfTExETl9SRUNEX1NISUZUKSkgJiBaTExfUlhfRlJBTUVfRklMVEVSX0xMRE5fUkVDRF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX01VTFRJUFVSUE9TRV9SRUNEX01BU0sgKDB4MjAwMDAwVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfUkVDRF9TSElGVCAoMjFVKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX01VTFRJUFVSUE9TRV9SRUNEKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9NVUxUSVBVUlBPU0VfUkVDRF9NQVNLKQorI2RlZmluZSBaTExfUlhfRlJBTUVfRklMVEVSX0VYVEVOREVEX1JFQ0RfTUFTSyAgICgweDgwMDAwMFUpCisjZGVmaW5lIFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfUkVDRF9TSElGVCAgKDIzVSkKKyNkZWZpbmUgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9SRUNEKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9GUkFNRV9GSUxURVJfRVhURU5ERURfUkVDRF9TSElGVCkpICYgWkxMX1JYX0ZSQU1FX0ZJTFRFUl9FWFRFTkRFRF9SRUNEX01BU0spCisKKy8qISBAbmFtZSBDQ0FfTFFJX0NUUkwgLSBDQ0EgQU5EIExRSSBDT05UUk9MICovCisjZGVmaW5lIFpMTF9DQ0FfTFFJX0NUUkxfQ0NBMV9USFJFU0hfTUFTSyAgICAgICAgKDB4RkZVKQorI2RlZmluZSBaTExfQ0NBX0xRSV9DVFJMX0NDQTFfVEhSRVNIX1NISUZUICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9DQ0ExX1RIUkVTSCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9DQ0FfTFFJX0NUUkxfQ0NBMV9USFJFU0hfU0hJRlQpKSAmIFpMTF9DQ0FfTFFJX0NUUkxfQ0NBMV9USFJFU0hfTUFTSykKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9MUUlfT0ZGU0VUX0NPTVBfTUFTSyAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBaTExfQ0NBX0xRSV9DVFJMX0xRSV9PRkZTRVRfQ09NUF9TSElGVCAgICgxNlUpCisjZGVmaW5lIFpMTF9DQ0FfTFFJX0NUUkxfTFFJX09GRlNFVF9DT01QKHgpICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQ0NBX0xRSV9DVFJMX0xRSV9PRkZTRVRfQ09NUF9TSElGVCkpICYgWkxMX0NDQV9MUUlfQ1RSTF9MUUlfT0ZGU0VUX0NPTVBfTUFTSykKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9DQ0EzX0FORF9OT1RfT1JfTUFTSyAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWkxMX0NDQV9MUUlfQ1RSTF9DQ0EzX0FORF9OT1RfT1JfU0hJRlQgICAoMjdVKQorI2RlZmluZSBaTExfQ0NBX0xRSV9DVFJMX0NDQTNfQU5EX05PVF9PUih4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NDQV9MUUlfQ1RSTF9DQ0EzX0FORF9OT1RfT1JfU0hJRlQpKSAmIFpMTF9DQ0FfTFFJX0NUUkxfQ0NBM19BTkRfTk9UX09SX01BU0spCisKKy8qISBAbmFtZSBDQ0EyX0NUUkwgLSBDQ0EyIENPTlRST0wgKi8KKyNkZWZpbmUgWkxMX0NDQTJfQ1RSTF9DQ0EyX05VTV9DT1JSX1BFQUtTX01BU0sgICAoMHhGVSkKKyNkZWZpbmUgWkxMX0NDQTJfQ1RSTF9DQ0EyX05VTV9DT1JSX1BFQUtTX1NISUZUICAoMFUpCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9OVU1fQ09SUl9QRUFLUyh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQ0NBMl9DVFJMX0NDQTJfTlVNX0NPUlJfUEVBS1NfU0hJRlQpKSAmIFpMTF9DQ0EyX0NUUkxfQ0NBMl9OVU1fQ09SUl9QRUFLU19NQVNLKQorI2RlZmluZSBaTExfQ0NBMl9DVFJMX0NDQTJfTUlOX05VTV9DT1JSX1RIX01BU0sgICgweDcwVSkKKyNkZWZpbmUgWkxMX0NDQTJfQ1RSTF9DQ0EyX01JTl9OVU1fQ09SUl9USF9TSElGVCAoNFUpCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9NSU5fTlVNX0NPUlJfVEgoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQ0NBMl9DVFJMX0NDQTJfTUlOX05VTV9DT1JSX1RIX1NISUZUKSkgJiBaTExfQ0NBMl9DVFJMX0NDQTJfTUlOX05VTV9DT1JSX1RIX01BU0spCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9DT1JSX1RIUkVTSF9NQVNLICAgICAgKDB4RkYwMFUpCisjZGVmaW5lIFpMTF9DQ0EyX0NUUkxfQ0NBMl9DT1JSX1RIUkVTSF9TSElGVCAgICAgKDhVKQorI2RlZmluZSBaTExfQ0NBMl9DVFJMX0NDQTJfQ09SUl9USFJFU0goeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0NDQTJfQ1RSTF9DQ0EyX0NPUlJfVEhSRVNIX1NISUZUKSkgJiBaTExfQ0NBMl9DVFJMX0NDQTJfQ09SUl9USFJFU0hfTUFTSykKKworLyohIEBuYW1lIERTTV9DVFJMIC0gRFNNIENPTlRST0wgKi8KKyNkZWZpbmUgWkxMX0RTTV9DVFJMX1pJR0JFRV9TTEVFUF9FTl9NQVNLICAgICAgICAoMHgxVSkKKyNkZWZpbmUgWkxMX0RTTV9DVFJMX1pJR0JFRV9TTEVFUF9FTl9TSElGVCAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9EU01fQ1RSTF9aSUdCRUVfU0xFRVBfRU4oeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFNNX0NUUkxfWklHQkVFX1NMRUVQX0VOX1NISUZUKSkgJiBaTExfRFNNX0NUUkxfWklHQkVFX1NMRUVQX0VOX01BU0spCisKKy8qISBAbmFtZSBCU01fQ1RSTCAtIEJTTSBDT05UUk9MICovCisjZGVmaW5lIFpMTF9CU01fQ1RSTF9CU01fRU5fTUFTSyAgICAgICAgICAgICAgICAgKDB4MVUpCisjZGVmaW5lIFpMTF9CU01fQ1RSTF9CU01fRU5fU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfQlNNX0NUUkxfQlNNX0VOKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0JTTV9DVFJMX0JTTV9FTl9TSElGVCkpICYgWkxMX0JTTV9DVFJMX0JTTV9FTl9NQVNLKQorCisvKiEgQG5hbWUgTUFDU0hPUlRBRERSUzEgLSBNQUMgU0hPUlQgQUREUkVTUyBGT1IgUEFOMSAqLworI2RlZmluZSBaTExfTUFDU0hPUlRBRERSUzFfTUFDUEFOSUQxX01BU0sgICAgICAgICgweEZGRkZVKQorI2RlZmluZSBaTExfTUFDU0hPUlRBRERSUzFfTUFDUEFOSUQxX1NISUZUICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMxX01BQ1BBTklEMSh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9NQUNTSE9SVEFERFJTMV9NQUNQQU5JRDFfU0hJRlQpKSAmIFpMTF9NQUNTSE9SVEFERFJTMV9NQUNQQU5JRDFfTUFTSykKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMxX01BQ1NIT1JUQUREUlMxX01BU0sgICAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFpMTF9NQUNTSE9SVEFERFJTMV9NQUNTSE9SVEFERFJTMV9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWkxMX01BQ1NIT1JUQUREUlMxX01BQ1NIT1JUQUREUlMxKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9NQUNTSE9SVEFERFJTMV9NQUNTSE9SVEFERFJTMV9TSElGVCkpICYgWkxMX01BQ1NIT1JUQUREUlMxX01BQ1NIT1JUQUREUlMxX01BU0spCisKKy8qISBAbmFtZSBNQUNMT05HQUREUlMxX0xTQiAtIE1BQyBMT05HIEFERFJFU1MgMSBMU0IgKi8KKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzFfTFNCX01BQ0xPTkdBRERSUzFfTFNCX01BU0sgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBaTExfTUFDTE9OR0FERFJTMV9MU0JfTUFDTE9OR0FERFJTMV9MU0JfU0hJRlQgKDBVKQorI2RlZmluZSBaTExfTUFDTE9OR0FERFJTMV9MU0JfTUFDTE9OR0FERFJTMV9MU0IoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfTUFDTE9OR0FERFJTMV9MU0JfTUFDTE9OR0FERFJTMV9MU0JfU0hJRlQpKSAmIFpMTF9NQUNMT05HQUREUlMxX0xTQl9NQUNMT05HQUREUlMxX0xTQl9NQVNLKQorCisvKiEgQG5hbWUgTUFDTE9OR0FERFJTMV9NU0IgLSBNQUMgTE9ORyBBRERSRVNTIDEgTVNCICovCisjZGVmaW5lIFpMTF9NQUNMT05HQUREUlMxX01TQl9NQUNMT05HQUREUlMxX01TQl9NQVNLICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzFfTVNCX01BQ0xPTkdBRERSUzFfTVNCX1NISUZUICgwVSkKKyNkZWZpbmUgWkxMX01BQ0xPTkdBRERSUzFfTVNCX01BQ0xPTkdBRERSUzFfTVNCKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX01BQ0xPTkdBRERSUzFfTVNCX01BQ0xPTkdBRERSUzFfTVNCX1NISUZUKSkgJiBaTExfTUFDTE9OR0FERFJTMV9NU0JfTUFDTE9OR0FERFJTMV9NU0JfTUFTSykKKworLyohIEBuYW1lIERVQUxfUEFOX0NUUkwgLSBEVUFMIFBBTiBDT05UUk9MICovCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0FDVElWRV9ORVRXT1JLX01BU0sgICAgKDB4MVUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0FDVElWRV9ORVRXT1JLX1NISUZUICAgKDBVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9BQ1RJVkVfTkVUV09SSyh4KSAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0RVQUxfUEFOX0NUUkxfQUNUSVZFX05FVFdPUktfU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX0FDVElWRV9ORVRXT1JLX01BU0spCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX0FVVE9fTUFTSyAgICAgKDB4MlUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX0FVVE9fU0hJRlQgICAgKDFVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9BVVRPKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fQVVUT19TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fQVVUT19NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9QQU5DT1JETlRSMV9NQVNLICAgICAgICgweDRVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9QQU5DT1JETlRSMV9TSElGVCAgICAgICgyVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUEFOQ09SRE5UUjEoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX1BBTkNPUkROVFIxX1NISUZUKSkgJiBaTExfRFVBTF9QQU5fQ1RSTF9QQU5DT1JETlRSMV9NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9DVVJSRU5UX05FVFdPUktfTUFTSyAgICgweDhVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9DVVJSRU5UX05FVFdPUktfU0hJRlQgICgzVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfQ1VSUkVOVF9ORVRXT1JLKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX0NVUlJFTlRfTkVUV09SS19TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfQ1VSUkVOVF9ORVRXT1JLX01BU0spCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9FTl9NQVNLICgweDEwVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfWkJfRFBfQ0hBTl9PVlJEX0VOX1NISUZUICg0VSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfWkJfRFBfQ0hBTl9PVlJEX0VOKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9FTl9TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfWkJfRFBfQ0hBTl9PVlJEX0VOX01BU0spCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9TRUxfTUFTSyAoMHgyMFUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1pCX0RQX0NIQU5fT1ZSRF9TRUxfU0hJRlQgKDVVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9aQl9EUF9DSEFOX09WUkRfU0VMKHgpICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0RVQUxfUEFOX0NUUkxfWkJfRFBfQ0hBTl9PVlJEX1NFTF9TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfWkJfRFBfQ0hBTl9PVlJEX1NFTF9NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9EV0VMTF9NQVNLICAgICgweEZGMDBVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9EV0VMTF9TSElGVCAgICg4VSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fRFdFTEwoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX0RXRUxMX1NISUZUKSkgJiBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9EV0VMTF9NQVNLKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9EVUFMX1BBTl9SRU1BSU5fTUFTSyAgICgweDNGMDAwMFUpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX1JFTUFJTl9TSElGVCAgKDE2VSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fUkVNQUlOKHgpICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9EVUFMX1BBTl9DVFJMX0RVQUxfUEFOX1JFTUFJTl9TSElGVCkpICYgWkxMX0RVQUxfUEFOX0NUUkxfRFVBTF9QQU5fUkVNQUlOX01BU0spCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1JFQ0RfT05fUEFOMF9NQVNLICAgICAgKDB4NDAwMDAwVSkKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4wX1NISUZUICAgICAoMjJVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjAoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4wX1NISUZUKSkgJiBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjBfTUFTSykKKyNkZWZpbmUgWkxMX0RVQUxfUEFOX0NUUkxfUkVDRF9PTl9QQU4xX01BU0sgICAgICAoMHg4MDAwMDBVKQorI2RlZmluZSBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjFfU0hJRlQgICAgICgyM1UpCisjZGVmaW5lIFpMTF9EVUFMX1BBTl9DVFJMX1JFQ0RfT05fUEFOMSh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRFVBTF9QQU5fQ1RSTF9SRUNEX09OX1BBTjFfU0hJRlQpKSAmIFpMTF9EVUFMX1BBTl9DVFJMX1JFQ0RfT05fUEFOMV9NQVNLKQorCisvKiEgQG5hbWUgQ0hBTk5FTF9OVU0xIC0gQ0hBTk5FTCBOVU1CRVIgMSAqLworI2RlZmluZSBaTExfQ0hBTk5FTF9OVU0xX0NIQU5ORUxfTlVNMV9NQVNLICAgICAgICgweDdGVSkKKyNkZWZpbmUgWkxMX0NIQU5ORUxfTlVNMV9DSEFOTkVMX05VTTFfU0hJRlQgICAgICAoMFUpCisjZGVmaW5lIFpMTF9DSEFOTkVMX05VTTFfQ0hBTk5FTF9OVU0xKHgpICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQ0hBTk5FTF9OVU0xX0NIQU5ORUxfTlVNMV9TSElGVCkpICYgWkxMX0NIQU5ORUxfTlVNMV9DSEFOTkVMX05VTTFfTUFTSykKKworLyohIEBuYW1lIFNBTV9DVFJMIC0gU0FNIENPTlRST0wgKi8KKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBUDBfRU5fTUFTSyAgICAgICAgICAgICAgICAoMHgxVSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBUDBfRU5fU0hJRlQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAwX0VOKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FQMF9FTl9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBUDBfRU5fTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTBfRU5fTUFTSyAgICAgICAgICAgICAgICAoMHgyVSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTBfRU5fU0hJRlQgICAgICAgICAgICAgICAoMVUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUEwX0VOKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FBMF9FTl9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBQTBfRU5fTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBUDFfRU5fTUFTSyAgICAgICAgICAgICAgICAoMHg0VSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBUDFfRU5fU0hJRlQgICAgICAgICAgICAgICAoMlUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAxX0VOKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FQMV9FTl9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBUDFfRU5fTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTFfRU5fTUFTSyAgICAgICAgICAgICAgICAoMHg4VSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTFfRU5fU0hJRlQgICAgICAgICAgICAgICAoM1UpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUExX0VOKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FBMV9FTl9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBQTFfRU5fTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTBfU1RBUlRfTUFTSyAgICAgICAgICAgICAoMHhGRjAwVSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTBfU1RBUlRfU0hJRlQgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUEwX1NUQVJUKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FBMF9TVEFSVF9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBQTBfU1RBUlRfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBUDFfU1RBUlRfTUFTSyAgICAgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBaTExfU0FNX0NUUkxfU0FQMV9TVEFSVF9TSElGVCAgICAgICAgICAgICgxNlUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQVAxX1NUQVJUKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0NUUkxfU0FQMV9TVEFSVF9TSElGVCkpICYgWkxMX1NBTV9DVFJMX1NBUDFfU1RBUlRfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTFfU1RBUlRfTUFTSyAgICAgICAgICAgICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fQ1RSTF9TQUExX1NUQVJUX1NISUZUICAgICAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX1NBTV9DVFJMX1NBQTFfU1RBUlQoeCkgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fQ1RSTF9TQUExX1NUQVJUX1NISUZUKSkgJiBaTExfU0FNX0NUUkxfU0FBMV9TVEFSVF9NQVNLKQorCisvKiEgQG5hbWUgU0FNX1RBQkxFIC0gU09VUkNFIEFERFJFU1MgTUFOQUdFTUVOVCBUQUJMRSAqLworI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9NQVNLICAgICAgICAgICAgICgweDdGVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfV1JfTUFTSyAgICAgICAgICAoMHg4MFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX1dSX1NISUZUICAgICAgICAgKDdVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9XUih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfV1JfU0hJRlQpKSAmIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX1dSX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0NIRUNLU1VNX01BU0sgICAgICAgICAgKDB4RkZGRjAwVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fQ0hFQ0tTVU1fU0hJRlQgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0NIRUNLU1VNKHgpICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX1RBQkxFX1NBTV9DSEVDS1NVTV9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9TQU1fQ0hFQ0tTVU1fTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WX01BU0sgICAgICAgICAoMHgxMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WX1NISUZUICAgICAgICAoMjRVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9JTlYoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfSU5WX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9JTlZfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfRU5fTUFTSyAgICAgICAgICAoMHgyMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfRU5fU0hJRlQgICAgICAgICAoMjVVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9JTkRFWF9FTih4KSAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9TQU1fSU5ERVhfRU5fU0hJRlQpKSAmIFpMTF9TQU1fVEFCTEVfU0FNX0lOREVYX0VOX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfTUFTSyAgICAgICAgICAgKDB4NDAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfU0hJRlQgICAgICAgICAgKDI2VSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9BQ0tfRlJNX1BORCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfU0hJRlQpKSAmIFpMTF9TQU1fVEFCTEVfQUNLX0ZSTV9QTkRfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9BQ0tfRlJNX1BORF9DVFJMX01BU0sgICAgICAoMHg4MDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9BQ0tfRlJNX1BORF9DVFJMX1NISUZUICAgICAoMjdVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0FDS19GUk1fUE5EX0NUUkwoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9UQUJMRV9BQ0tfRlJNX1BORF9DVFJMX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX0FDS19GUk1fUE5EX0NUUkxfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9GSU5EX0ZSRUVfSURYX01BU0sgICAgICAgICAoMHgxMDAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfRklORF9GUkVFX0lEWF9TSElGVCAgICAgICAgKDI4VSkKKyNkZWZpbmUgWkxMX1NBTV9UQUJMRV9GSU5EX0ZSRUVfSURYKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fVEFCTEVfRklORF9GUkVFX0lEWF9TSElGVCkpICYgWkxMX1NBTV9UQUJMRV9GSU5EX0ZSRUVfSURYX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfSU5WQUxJREFURV9BTExfTUFTSyAgICAgICAgKDB4MjAwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX0lOVkFMSURBVEVfQUxMX1NISUZUICAgICAgICgyOVUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfSU5WQUxJREFURV9BTEwoeCkgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX1RBQkxFX0lOVkFMSURBVEVfQUxMX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX0lOVkFMSURBVEVfQUxMX01BU0spCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0JVU1lfTUFTSyAgICAgICAgICAgICAgKDB4ODAwMDAwMDBVKQorI2RlZmluZSBaTExfU0FNX1RBQkxFX1NBTV9CVVNZX1NISUZUICAgICAgICAgICAgICgzMVUpCisjZGVmaW5lIFpMTF9TQU1fVEFCTEVfU0FNX0JVU1koeCkgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX1RBQkxFX1NBTV9CVVNZX1NISUZUKSkgJiBaTExfU0FNX1RBQkxFX1NBTV9CVVNZX01BU0spCisKKy8qISBAbmFtZSBTQU1fTUFUQ0ggLSBTT1VSQ0UgQUREUkVTUyBNQU5BR0VNRU5UIE1BVENIICovCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMF9NQVRDSF9NQVNLICAgICAgICAgICAgKDB4N0ZVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDBfTUFUQ0hfU0hJRlQgICAgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAwX01BVENIKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fTUFUQ0hfU0FQMF9NQVRDSF9TSElGVCkpICYgWkxMX1NBTV9NQVRDSF9TQVAwX01BVENIX01BU0spCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMF9BRERSX1BSRVNFTlRfTUFTSyAgICAgKDB4ODBVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDBfQUREUl9QUkVTRU5UX1NISUZUICAgICg3VSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAwX0FERFJfUFJFU0VOVCh4KSAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fTUFUQ0hfU0FQMF9BRERSX1BSRVNFTlRfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FQMF9BRERSX1BSRVNFTlRfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUEwX01BVENIX01BU0sgICAgICAgICAgICAoMHg3RjAwVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUEwX01BVENIX1NISUZUICAgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMF9NQVRDSCh4KSAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX01BVENIX1NBQTBfTUFUQ0hfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FBMF9NQVRDSF9NQVNLKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTBfQUREUl9BQlNFTlRfTUFTSyAgICAgICgweDgwMDBVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTBfQUREUl9BQlNFTlRfU0hJRlQgICAgICgxNVUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMF9BRERSX0FCU0VOVCh4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX01BVENIX1NBQTBfQUREUl9BQlNFTlRfU0hJRlQpKSAmIFpMTF9TQU1fTUFUQ0hfU0FBMF9BRERSX0FCU0VOVF9NQVNLKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDFfTUFUQ0hfTUFTSyAgICAgICAgICAgICgweDdGMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMV9NQVRDSF9TSElGVCAgICAgICAgICAgKDE2VSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAxX01BVENIKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fTUFUQ0hfU0FQMV9NQVRDSF9TSElGVCkpICYgWkxMX1NBTV9NQVRDSF9TQVAxX01BVENIX01BU0spCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FQMV9BRERSX1BSRVNFTlRfTUFTSyAgICAgKDB4ODAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQVAxX0FERFJfUFJFU0VOVF9TSElGVCAgICAoMjNVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBUDFfQUREUl9QUkVTRU5UKHgpICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9NQVRDSF9TQVAxX0FERFJfUFJFU0VOVF9TSElGVCkpICYgWkxMX1NBTV9NQVRDSF9TQVAxX0FERFJfUFJFU0VOVF9NQVNLKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTFfTUFUQ0hfTUFTSyAgICAgICAgICAgICgweDdGMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUExX01BVENIX1NISUZUICAgICAgICAgICAoMjRVKQorI2RlZmluZSBaTExfU0FNX01BVENIX1NBQTFfTUFUQ0goeCkgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9NQVRDSF9TQUExX01BVENIX1NISUZUKSkgJiBaTExfU0FNX01BVENIX1NBQTFfTUFUQ0hfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUExX0FERFJfQUJTRU5UX01BU0sgICAgICAoMHg4MDAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fTUFUQ0hfU0FBMV9BRERSX0FCU0VOVF9TSElGVCAgICAgKDMxVSkKKyNkZWZpbmUgWkxMX1NBTV9NQVRDSF9TQUExX0FERFJfQUJTRU5UKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fTUFUQ0hfU0FBMV9BRERSX0FCU0VOVF9TSElGVCkpICYgWkxMX1NBTV9NQVRDSF9TQUExX0FERFJfQUJTRU5UX01BU0spCisKKy8qISBAbmFtZSBTQU1fRlJFRV9JRFggLSBTQU0gRlJFRSBJTkRFWCAqLworI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBUDBfMVNUX0ZSRUVfSURYX01BU0sgICgweEZGVSkKKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQVAwXzFTVF9GUkVFX0lEWF9TSElGVCAoMFUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FQMF8xU1RfRlJFRV9JRFgoeCkgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0FNX0ZSRUVfSURYX1NBUDBfMVNUX0ZSRUVfSURYX1NISUZUKSkgJiBaTExfU0FNX0ZSRUVfSURYX1NBUDBfMVNUX0ZSRUVfSURYX01BU0spCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FBMF8xU1RfRlJFRV9JRFhfTUFTSyAgKDB4RkYwMFUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FBMF8xU1RfRlJFRV9JRFhfU0hJRlQgKDhVKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBQTBfMVNUX0ZSRUVfSURYKHgpICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NBTV9GUkVFX0lEWF9TQUEwXzFTVF9GUkVFX0lEWF9TSElGVCkpICYgWkxMX1NBTV9GUkVFX0lEWF9TQUEwXzFTVF9GUkVFX0lEWF9NQVNLKQorI2RlZmluZSBaTExfU0FNX0ZSRUVfSURYX1NBUDFfMVNUX0ZSRUVfSURYX01BU0sgICgweEZGMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FQMV8xU1RfRlJFRV9JRFhfU0hJRlQgKDE2VSkKKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQVAxXzFTVF9GUkVFX0lEWCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fRlJFRV9JRFhfU0FQMV8xU1RfRlJFRV9JRFhfU0hJRlQpKSAmIFpMTF9TQU1fRlJFRV9JRFhfU0FQMV8xU1RfRlJFRV9JRFhfTUFTSykKKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQUExXzFTVF9GUkVFX0lEWF9NQVNLICAoMHhGRjAwMDAwMFUpCisjZGVmaW5lIFpMTF9TQU1fRlJFRV9JRFhfU0FBMV8xU1RfRlJFRV9JRFhfU0hJRlQgKDI0VSkKKyNkZWZpbmUgWkxMX1NBTV9GUkVFX0lEWF9TQUExXzFTVF9GUkVFX0lEWCh4KSAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TQU1fRlJFRV9JRFhfU0FBMV8xU1RfRlJFRV9JRFhfU0hJRlQpKSAmIFpMTF9TQU1fRlJFRV9JRFhfU0FBMV8xU1RfRlJFRV9JRFhfTUFTSykKKworLyohIEBuYW1lIFNFUV9DVFJMX1NUUyAtIFNFUVVFTkNFIENPTlRST0wgQU5EIFNUQVRVUyAqLworI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0NMUl9ORVdfU0VRX0lOSElCSVRfTUFTSyAoMHg0VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19DTFJfTkVXX1NFUV9JTkhJQklUX1NISUZUICgyVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19DTFJfTkVXX1NFUV9JTkhJQklUKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfQ0xSX05FV19TRVFfSU5ISUJJVF9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19DTFJfTkVXX1NFUV9JTkhJQklUX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfRVZFTlRfVE1SX0RPX05PVF9MQVRDSF9NQVNLICgweDhVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0VWRU5UX1RNUl9ET19OT1RfTEFUQ0hfU0hJRlQgKDNVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0VWRU5UX1RNUl9ET19OT1RfTEFUQ0goeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX0VWRU5UX1RNUl9ET19OT1RfTEFUQ0hfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfRVZFTlRfVE1SX0RPX05PVF9MQVRDSF9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0xBVENIX1BSRUFNQkxFX01BU0sgICAgICgweDEwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19MQVRDSF9QUkVBTUJMRV9TSElGVCAgICAoNFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTEFUQ0hfUFJFQU1CTEUoeCkgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX0xBVENIX1BSRUFNQkxFX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX0xBVENIX1BSRUFNQkxFX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTk9fUlhfUkVDWUNMRV9NQVNLICAgICAgKDB4MjBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX05PX1JYX1JFQ1lDTEVfU0hJRlQgICAgICg1VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19OT19SWF9SRUNZQ0xFKHgpICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfTk9fUlhfUkVDWUNMRV9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19OT19SWF9SRUNZQ0xFX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfRk9SQ0VfQ1JDX0VSUk9SX01BU0sgICAgKDB4NDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0ZPUkNFX0NSQ19FUlJPUl9TSElGVCAgICg2VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19GT1JDRV9DUkNfRVJST1IoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfRk9SQ0VfQ1JDX0VSUk9SX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX0ZPUkNFX0NSQ19FUlJPUl9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX0NPTlRJTlVPVVNfRU5fTUFTSyAgICAgICgweDgwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19DT05USU5VT1VTX0VOX1NISUZUICAgICAoN1UpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfQ09OVElOVU9VU19FTih4KSAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX0NPTlRJTlVPVVNfRU5fU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfQ09OVElOVU9VU19FTl9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1hDVlNFUV9BQ1RVQUxfTUFTSyAgICAgICgweDcwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfWENWU0VRX0FDVFVBTF9TSElGVCAgICAgKDhVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1hDVlNFUV9BQ1RVQUwoeCkgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19YQ1ZTRVFfQUNUVUFMX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX1hDVlNFUV9BQ1RVQUxfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19TRVFfSURMRV9NQVNLICAgICAgICAgICAoMHg4MDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1NFUV9JRExFX1NISUZUICAgICAgICAgICgxMVUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU0VRX0lETEUoeCkgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX0NUUkxfU1RTX1NFUV9JRExFX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX1NFUV9JRExFX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTkVXX1NFUV9JTkhJQklUX01BU0sgICAgKDB4MTAwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfTkVXX1NFUV9JTkhJQklUX1NISUZUICAgKDEyVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19ORVdfU0VRX0lOSElCSVQoeCkgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfTkVXX1NFUV9JTkhJQklUX1NISUZUKSkgJiBaTExfU0VRX0NUUkxfU1RTX05FV19TRVFfSU5ISUJJVF9NQVNLKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1JYX1RJTUVPVVRfUEVORElOR19NQVNLICgweDIwMDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1JYX1RJTUVPVVRfUEVORElOR19TSElGVCAoMTNVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1JYX1RJTUVPVVRfUEVORElORyh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19SWF9USU1FT1VUX1BFTkRJTkdfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfUlhfVElNRU9VVF9QRU5ESU5HX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfUlhfTU9ERV9NQVNLICAgICAgICAgICAgKDB4NDAwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfUlhfTU9ERV9TSElGVCAgICAgICAgICAgKDE0VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19SWF9NT0RFKHgpICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfUlhfTU9ERV9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19SWF9NT0RFX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfVE1SMl9TRVFfVFJJR19BUk1FRF9NQVNLICgweDgwMDBVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1RNUjJfU0VRX1RSSUdfQVJNRURfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19UTVIyX1NFUV9UUklHX0FSTUVEKHgpICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfVE1SMl9TRVFfVFJJR19BUk1FRF9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19UTVIyX1NFUV9UUklHX0FSTUVEX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU0VRX1RfU1RBVFVTX01BU0sgICAgICAgKDB4M0YwMDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19TRVFfVF9TVEFUVVNfU0hJRlQgICAgICAoMTZVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1NFUV9UX1NUQVRVUyh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19TRVFfVF9TVEFUVVNfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfU0VRX1RfU1RBVFVTX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU1dfQUJPUlRFRF9NQVNLICAgICAgICAgKDB4MTAwMDAwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfU1dfQUJPUlRFRF9TSElGVCAgICAgICAgKDI0VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19TV19BQk9SVEVEKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfU1dfQUJPUlRFRF9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19TV19BQk9SVEVEX01BU0spCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfVEMzX0FCT1JURURfTUFTSyAgICAgICAgKDB4MjAwMDAwMFUpCisjZGVmaW5lIFpMTF9TRVFfQ1RSTF9TVFNfVEMzX0FCT1JURURfU0hJRlQgICAgICAgKDI1VSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19UQzNfQUJPUlRFRCh4KSAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfQ1RSTF9TVFNfVEMzX0FCT1JURURfU0hJRlQpKSAmIFpMTF9TRVFfQ1RSTF9TVFNfVEMzX0FCT1JURURfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19QTExfQUJPUlRFRF9NQVNLICAgICAgICAoMHg0MDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9DVFJMX1NUU19QTExfQUJPUlRFRF9TSElGVCAgICAgICAoMjZVKQorI2RlZmluZSBaTExfU0VRX0NUUkxfU1RTX1BMTF9BQk9SVEVEKHgpICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9DVFJMX1NUU19QTExfQUJPUlRFRF9TSElGVCkpICYgWkxMX1NFUV9DVFJMX1NUU19QTExfQUJPUlRFRF9NQVNLKQorCisvKiEgQG5hbWUgQUNLREVMQVkgLSBBQ0sgREVMQVkgKi8KKyNkZWZpbmUgWkxMX0FDS0RFTEFZX0FDS0RFTEFZX01BU0sgICAgICAgICAgICAgICAoMHgzRlUpCisjZGVmaW5lIFpMTF9BQ0tERUxBWV9BQ0tERUxBWV9TSElGVCAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfQUNLREVMQVlfQUNLREVMQVkoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX0FDS0RFTEFZX0FDS0RFTEFZX1NISUZUKSkgJiBaTExfQUNLREVMQVlfQUNLREVMQVlfTUFTSykKKyNkZWZpbmUgWkxMX0FDS0RFTEFZX1RYREVMQVlfTUFTSyAgICAgICAgICAgICAgICAoMHgzRjAwVSkKKyNkZWZpbmUgWkxMX0FDS0RFTEFZX1RYREVMQVlfU0hJRlQgICAgICAgICAgICAgICAoOFUpCisjZGVmaW5lIFpMTF9BQ0tERUxBWV9UWERFTEFZKHgpICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfQUNLREVMQVlfVFhERUxBWV9TSElGVCkpICYgWkxMX0FDS0RFTEFZX1RYREVMQVlfTUFTSykKKworLyohIEBuYW1lIEZJTFRFUkZBSUxfQ09ERSAtIEZJTFRFUiBGQUlMIENPREUgKi8KKyNkZWZpbmUgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX0NPREVfTUFTSyAoMHgzRkZVKQorI2RlZmluZSBaTExfRklMVEVSRkFJTF9DT0RFX0ZJTFRFUkZBSUxfQ09ERV9TSElGVCAoMFUpCisjZGVmaW5lIFpMTF9GSUxURVJGQUlMX0NPREVfRklMVEVSRkFJTF9DT0RFKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRklMVEVSRkFJTF9DT0RFX0ZJTFRFUkZBSUxfQ09ERV9TSElGVCkpICYgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX0NPREVfTUFTSykKKyNkZWZpbmUgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX1BBTl9TRUxfTUFTSyAoMHg4MDAwVSkKKyNkZWZpbmUgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX1BBTl9TRUxfU0hJRlQgKDE1VSkKKyNkZWZpbmUgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX1BBTl9TRUwoeCkgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfRklMVEVSRkFJTF9DT0RFX0ZJTFRFUkZBSUxfUEFOX1NFTF9TSElGVCkpICYgWkxMX0ZJTFRFUkZBSUxfQ09ERV9GSUxURVJGQUlMX1BBTl9TRUxfTUFTSykKKworLyohIEBuYW1lIFJYX1dUUl9NQVJLIC0gUkVDRUlWRSBXQVRFUiBNQVJLICovCisjZGVmaW5lIFpMTF9SWF9XVFJfTUFSS19SWF9XVFJfTUFSS19NQVNLICAgICAgICAgKDB4RkZVKQorI2RlZmluZSBaTExfUlhfV1RSX01BUktfUlhfV1RSX01BUktfU0hJRlQgICAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1JYX1dUUl9NQVJLX1JYX1dUUl9NQVJLKHgpICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9SWF9XVFJfTUFSS19SWF9XVFJfTUFSS19TSElGVCkpICYgWkxMX1JYX1dUUl9NQVJLX1JYX1dUUl9NQVJLX01BU0spCisKKy8qISBAbmFtZSBTTE9UX1BSRUxPQUQgLSBTTE9UIFBSRUxPQUQgKi8KKyNkZWZpbmUgWkxMX1NMT1RfUFJFTE9BRF9TTE9UX1BSRUxPQURfTUFTSyAgICAgICAoMHhGRlUpCisjZGVmaW5lIFpMTF9TTE9UX1BSRUxPQURfU0xPVF9QUkVMT0FEX1NISUZUICAgICAgKDBVKQorI2RlZmluZSBaTExfU0xPVF9QUkVMT0FEX1NMT1RfUFJFTE9BRCh4KSAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NMT1RfUFJFTE9BRF9TTE9UX1BSRUxPQURfU0hJRlQpKSAmIFpMTF9TTE9UX1BSRUxPQURfU0xPVF9QUkVMT0FEX01BU0spCisKKy8qISBAbmFtZSBTRVFfU1RBVEUgLSA4MDIuMTUuNCBTRVFVRU5DRSBTVEFURSAqLworI2RlZmluZSBaTExfU0VRX1NUQVRFX1NFUV9TVEFURV9NQVNLICAgICAgICAgICAgICgweDFGVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9TRVFfU1RBVEVfU0hJRlQgICAgICAgICAgICAoMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfU0VRX1NUQVRFKHgpICAgICAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX1NUQVRFX1NFUV9TVEFURV9TSElGVCkpICYgWkxMX1NFUV9TVEFURV9TRVFfU1RBVEVfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QUkVBTUJMRV9ERVRfTUFTSyAgICAgICAgICAoMHgxMDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1BSRUFNQkxFX0RFVF9TSElGVCAgICAgICAgICg4VSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QUkVBTUJMRV9ERVQoeCkgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfU1RBVEVfUFJFQU1CTEVfREVUX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX1BSRUFNQkxFX0RFVF9NQVNLKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1NGRF9ERVRfTUFTSyAgICAgICAgICAgICAgICgweDIwMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfU0ZEX0RFVF9TSElGVCAgICAgICAgICAgICAgKDlVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1NGRF9ERVQoeCkgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9TVEFURV9TRkRfREVUX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX1NGRF9ERVRfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9GSUxURVJGQUlMX0ZMQUdfU0VMX01BU0sgICAoMHg0MDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX0ZJTFRFUkZBSUxfRkxBR19TRUxfU0hJRlQgICgxMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfRklMVEVSRkFJTF9GTEFHX1NFTCh4KSAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX1NUQVRFX0ZJTFRFUkZBSUxfRkxBR19TRUxfU0hJRlQpKSAmIFpMTF9TRVFfU1RBVEVfRklMVEVSRkFJTF9GTEFHX1NFTF9NQVNLKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX0NSQ1ZBTElEX01BU0sgICAgICAgICAgICAgICgweDgwMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfQ1JDVkFMSURfU0hJRlQgICAgICAgICAgICAgKDExVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9DUkNWQUxJRCh4KSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfU1RBVEVfQ1JDVkFMSURfU0hJRlQpKSAmIFpMTF9TRVFfU1RBVEVfQ1JDVkFMSURfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QTExfQUJPUlRfTUFTSyAgICAgICAgICAgICAoMHgxMDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QTExfQUJPUlRfU0hJRlQgICAgICAgICAgICAoMTJVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1BMTF9BQk9SVCh4KSAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9TVEFURV9QTExfQUJPUlRfU0hJRlQpKSAmIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JUX01BU0spCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JURURfTUFTSyAgICAgICAgICAgKDB4MjAwMFUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JURURfU0hJRlQgICAgICAgICAgKDEzVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9QTExfQUJPUlRFRCh4KSAgICAgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9TRVFfU1RBVEVfUExMX0FCT1JURURfU0hJRlQpKSAmIFpMTF9TRVFfU1RBVEVfUExMX0FCT1JURURfTUFTSykKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9SWF9CWVRFX0NPVU5UX01BU0sgICAgICAgICAoMHhGRjAwMDBVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX1JYX0JZVEVfQ09VTlRfU0hJRlQgICAgICAgICgxNlUpCisjZGVmaW5lIFpMTF9TRVFfU1RBVEVfUlhfQllURV9DT1VOVCh4KSAgICAgICAgICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCBaTExfU0VRX1NUQVRFX1JYX0JZVEVfQ09VTlRfU0hJRlQpKSAmIFpMTF9TRVFfU1RBVEVfUlhfQllURV9DT1VOVF9NQVNLKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX0NDQ0FfQlVTWV9DTlRfTUFTSyAgICAgICAgICgweDNGMDAwMDAwVSkKKyNkZWZpbmUgWkxMX1NFUV9TVEFURV9DQ0NBX0JVU1lfQ05UX1NISUZUICAgICAgICAoMjRVKQorI2RlZmluZSBaTExfU0VRX1NUQVRFX0NDQ0FfQlVTWV9DTlQoeCkgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1NFUV9TVEFURV9DQ0NBX0JVU1lfQ05UX1NISUZUKSkgJiBaTExfU0VRX1NUQVRFX0NDQ0FfQlVTWV9DTlRfTUFTSykKKworLyohIEBuYW1lIFRNUl9QUkVTQ0FMRSAtIFRJTUVSIFBSRVNDQUxFUiAqLworI2RlZmluZSBaTExfVE1SX1BSRVNDQUxFX1RNUl9QUkVTQ0FMRV9NQVNLICAgICAgICgweDdVKQorI2RlZmluZSBaTExfVE1SX1BSRVNDQUxFX1RNUl9QUkVTQ0FMRV9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgWkxMX1RNUl9QUkVTQ0FMRV9UTVJfUFJFU0NBTEUoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9UTVJfUFJFU0NBTEVfVE1SX1BSRVNDQUxFX1NISUZUKSkgJiBaTExfVE1SX1BSRVNDQUxFX1RNUl9QUkVTQ0FMRV9NQVNLKQorCisvKiEgQG5hbWUgTEVOSUVOQ1lfTFNCIC0gTEVOSUVOQ1kgTFNCICovCisjZGVmaW5lIFpMTF9MRU5JRU5DWV9MU0JfTEVOSUVOQ1lfTFNCX01BU0sgICAgICAgKDB4RkZGRkZGRkZVKQorI2RlZmluZSBaTExfTEVOSUVOQ1lfTFNCX0xFTklFTkNZX0xTQl9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0xFTklFTkNZX0xTQl9MRU5JRU5DWV9MU0IoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9MRU5JRU5DWV9MU0JfTEVOSUVOQ1lfTFNCX1NISUZUKSkgJiBaTExfTEVOSUVOQ1lfTFNCX0xFTklFTkNZX0xTQl9NQVNLKQorCisvKiEgQG5hbWUgTEVOSUVOQ1lfTVNCIC0gTEVOSUVOQ1kgTVNCICovCisjZGVmaW5lIFpMTF9MRU5JRU5DWV9NU0JfTEVOSUVOQ1lfTVNCX01BU0sgICAgICAgKDB4RkZVKQorI2RlZmluZSBaTExfTEVOSUVOQ1lfTVNCX0xFTklFTkNZX01TQl9TSElGVCAgICAgICgwVSkKKyNkZWZpbmUgWkxMX0xFTklFTkNZX01TQl9MRU5JRU5DWV9NU0IoeCkgICAgICAgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IFpMTF9MRU5JRU5DWV9NU0JfTEVOSUVOQ1lfTVNCX1NISUZUKSkgJiBaTExfTEVOSUVOQ1lfTVNCX0xFTklFTkNZX01TQl9NQVNLKQorCisvKiEgQG5hbWUgUEFSVF9JRCAtIFBBUlQgSUQgKi8KKyNkZWZpbmUgWkxMX1BBUlRfSURfUEFSVF9JRF9NQVNLICAgICAgICAgICAgICAgICAoMHhGRlUpCisjZGVmaW5lIFpMTF9QQVJUX0lEX1BBUlRfSURfU0hJRlQgICAgICAgICAgICAgICAgKDBVKQorI2RlZmluZSBaTExfUEFSVF9JRF9QQVJUX0lEKHgpICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgWkxMX1BBUlRfSURfUEFSVF9JRF9TSElGVCkpICYgWkxMX1BBUlRfSURfUEFSVF9JRF9NQVNLKQorCisvKiEgQG5hbWUgUEtUX0JVRkZFUl9UWCAtIFBhY2tldCBCdWZmZXIgVFggKi8KKyNkZWZpbmUgWkxMX1BLVF9CVUZGRVJfVFhfUEtUX0JVRkZFUl9UWF9NQVNLICAgICAoMHhGRkZGVSkKKyNkZWZpbmUgWkxMX1BLVF9CVUZGRVJfVFhfUEtUX0JVRkZFUl9UWF9TSElGVCAgICAoMFUpCisjZGVmaW5lIFpMTF9QS1RfQlVGRkVSX1RYX1BLVF9CVUZGRVJfVFgoeCkgICAgICAgKCgodWludDE2X3QpKCgodWludDE2X3QpKHgpKSA8PCBaTExfUEtUX0JVRkZFUl9UWF9QS1RfQlVGRkVSX1RYX1NISUZUKSkgJiBaTExfUEtUX0JVRkZFUl9UWF9QS1RfQlVGRkVSX1RYX01BU0spCisKKy8qIFRoZSBjb3VudCBvZiBaTExfUEtUX0JVRkZFUl9UWCAqLworI2RlZmluZSBaTExfUEtUX0JVRkZFUl9UWF9DT1VOVCAgICAgICAgICAgICAgICAgICg2NFUpCisKKy8qISBAbmFtZSBQS1RfQlVGRkVSX1JYIC0gUGFja2V0IEJ1ZmZlciBSWCAqLworI2RlZmluZSBaTExfUEtUX0JVRkZFUl9SWF9QS1RfQlVGRkVSX1JYX01BU0sgICAgICgweEZGRkZVKQorI2RlZmluZSBaTExfUEtUX0JVRkZFUl9SWF9QS1RfQlVGRkVSX1JYX1NISUZUICAgICgwVSkKKyNkZWZpbmUgWkxMX1BLVF9CVUZGRVJfUlhfUEtUX0JVRkZFUl9SWCh4KSAgICAgICAoKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoeCkpIDw8IFpMTF9QS1RfQlVGRkVSX1JYX1BLVF9CVUZGRVJfUlhfU0hJRlQpKSAmIFpMTF9QS1RfQlVGRkVSX1JYX1BLVF9CVUZGRVJfUlhfTUFTSykKKworLyogVGhlIGNvdW50IG9mIFpMTF9QS1RfQlVGRkVSX1JYICovCisjZGVmaW5lIFpMTF9QS1RfQlVGRkVSX1JYX0NPVU5UICAgICAgICAgICAgICAgICAgKDY0VSkKKworCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIFpMTF9SZWdpc3Rlcl9NYXNrcyAqLworCisKKy8qIFpMTCAtIFBlcmlwaGVyYWwgaW5zdGFuY2UgYmFzZSBhZGRyZXNzZXMgKi8KKy8qKiBQZXJpcGhlcmFsIFpMTCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgWkxMX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg0MDA1RDAwMHUpCisvKiogUGVyaXBoZXJhbCBaTEwgYmFzZSBwb2ludGVyICovCisjZGVmaW5lIFpMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChaTExfVHlwZSAqKVpMTF9CQVNFKQorLyoqIEFycmF5IGluaXRpYWxpemVyIG9mIFpMTCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIFpMTF9CQVNFX0FERFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBaTExfQkFTRSB9CisvKiogQXJyYXkgaW5pdGlhbGl6ZXIgb2YgWkxMIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVycyAqLworI2RlZmluZSBaTExfQkFTRV9QVFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgWkxMIH0KKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBaTExfUGVyaXBoZXJhbF9BY2Nlc3NfTGF5ZXIgKi8KKworCisvKgorKiogRW5kIG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucworKi8KKworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorICAjcHJhZ21hIHBvcAorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgLyogbGVhdmUgYW5vbnltb3VzIHVuaW9ucyBlbmFibGVkICovCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisgICNwcmFnbWEgbGFuZ3VhZ2U9ZGVmYXVsdAorI2Vsc2UKKyAgI2Vycm9yIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKy8qIQorICogQH0KKyAqLyAvKiBlbmQgb2YgZ3JvdXAgUGVyaXBoZXJhbF9hY2Nlc3NfbGF5ZXIgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBNYWNyb3MgZm9yIHVzZSB3aXRoIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAoeHh4X1NISUZULCB4eHhfTUFTSykuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgQml0X0ZpZWxkX0dlbmVyaWNfTWFjcm9zIE1hY3JvcyBmb3IgdXNlIHdpdGggYml0IGZpZWxkIGRlZmluaXRpb25zICh4eHhfU0hJRlQsIHh4eF9NQVNLKS4KKyAqIEB7CisgKi8KKworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorICAjaWYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKQorICAgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlcgorICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKKyAgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZQorI2VuZGlmCisKKy8qKgorICogQGJyaWVmIE1hc2sgYW5kIGxlZnQtc2hpZnQgYSBiaXQgZmllbGQgdmFsdWUgZm9yIHVzZSBpbiBhIHJlZ2lzdGVyIGJpdCByYW5nZS4KKyAqIEBwYXJhbSBmaWVsZCBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KKyAqIEByZXR1cm4gTWFza2VkIGFuZCBzaGlmdGVkIHZhbHVlLgorICovCisjZGVmaW5lIE5YUF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCgodmFsdWUpIDw8IChmaWVsZCAjIyBfU0hJRlQpKSAmIChmaWVsZCAjIyBfTUFTSykpCisvKioKKyAqIEBicmllZiBNYXNrIGFuZCByaWdodC1zaGlmdCBhIHJlZ2lzdGVyIHZhbHVlIHRvIGV4dHJhY3QgYSBiaXQgZmllbGQgdmFsdWUuCisgKiBAcGFyYW0gZmllbGQgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSByZWdpc3Rlci4KKyAqIEByZXR1cm4gTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyAqLworI2RlZmluZSBOWFBfRkxEMlZBTChmaWVsZCwgdmFsdWUpICAgICgoKHZhbHVlKSAmIChmaWVsZCAjIyBfTUFTSykpID4+IChmaWVsZCAjIyBfU0hJRlQpKQorCisvKiEKKyAqIEB9CisgKi8gLyogZW5kIG9mIGdyb3VwIEJpdF9GaWVsZF9HZW5lcmljX01hY3JvcyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFNESyBDb21wYXRpYmlsaXR5CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgU0RLX0NvbXBhdGliaWxpdHlfU3ltYm9scyBTREsgQ29tcGF0aWJpbGl0eQorICogQHsKKyAqLworCisjZGVmaW5lIERTUEkwICAgICAgICAgICAgICAgICAgICAgU1BJMAorI2RlZmluZSBEU1BJMSAgICAgICAgICAgICAgICAgICAgIFNQSTEKKworLyohCisgKiBAfQorICovIC8qIGVuZCBvZiBncm91cCBTREtfQ29tcGF0aWJpbGl0eV9TeW1ib2xzICovCisKKworI2VuZGlmICAvKiBfTUtXNDFaNF9IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9NS1c0MVo0X2ZlYXR1cmVzLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9NS1c0MVo0X2ZlYXR1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3ZmVlMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L01LVzQxWjRfZmVhdHVyZXMuaApAQCAtMCwwICsxLDIwMjAgQEAKKy8qCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqKiAgICAgVmVyc2lvbjogICAgICAgICAgICAgcmV2LiAxLjAsIDIwMTUtMDktMjMKKyoqICAgICBCdWlsZDogICAgICAgICAgICAgICBiMTcwMjI4CisqKgorKiogICAgIEFic3RyYWN0OgorKiogICAgICAgICBDaGlwIHNwZWNpZmljIG1vZHVsZSBmZWF0dXJlcy4KKyoqCisqKiAgICAgQ29weXJpZ2h0IDIwMTYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyoqICAgICBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKiogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqKiAgICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKioKKyoqICAgICBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisqKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKgorKiogICAgIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqKiAgICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyoqICAgICAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKgorKiogICAgIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworKiogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiogICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqKgorKiogICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyoqICAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiogICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyoqICAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiogICAgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiogICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyoqICAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyoqICAgICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiogICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqKiAgICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqKgorKiogICAgIGh0dHA6ICAgICAgICAgICAgICAgICB3d3cubnhwLmNvbQorKiogICAgIG1haWw6ICAgICAgICAgICAgICAgICBzdXBwb3J0QG54cC5jb20KKyoqCisqKiAgICAgUmV2aXNpb25zOgorKiogICAgIC0gcmV2LiAxLjAgKDIwMTUtMDktMjMpCisqKiAgICAgICAgIEluaXRpYWwgdmVyc2lvbi4KKyoqCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqLworCisjaWZuZGVmIF9NS1c0MVo0X0ZFQVRVUkVTX0hfCisjZGVmaW5lIF9NS1c0MVo0X0ZFQVRVUkVTX0hfCisKKy8qIFNPQyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEFDTVAgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19BQ01QX0NPVU5UICgwKQorLyogQGJyaWVmIEFEQzE2IGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQURDMTZfQ09VTlQgKDEpCisvKiBAYnJpZWYgQURDMTIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19BREMxMl9DT1VOVCAoMCkKKy8qIEBicmllZiBBRkUgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19BRkVfQ09VTlQgKDApCisvKiBAYnJpZWYgQUlQUyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0FJUFNfQ09VTlQgKDApCisvKiBAYnJpZWYgQU9JIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQU9JX0NPVU5UICgwKQorLyogQGJyaWVmIEFYQlMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19BWEJTX0NPVU5UICgwKQorLyogQGJyaWVmIEFTTUMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19BU01DX0NPVU5UICgwKQorLyogQGJyaWVmIENBREMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19DQURDX0NPVU5UICgwKQorLyogQGJyaWVmIEZMRVhDQU4gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GTEVYQ0FOX0NPVU5UICgwKQorLyogQGJyaWVmIE1NQ0FVIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTU1DQVVfQ09VTlQgKDApCisvKiBAYnJpZWYgQ01QIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQ01QX0NPVU5UICgxKQorLyogQGJyaWVmIENNVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0NNVF9DT1VOVCAoMSkKKy8qIEBicmllZiBDTkMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19DTkNfQ09VTlQgKDApCisvKiBAYnJpZWYgQ1JDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfQ1JDX0NPVU5UICgwKQorLyogQGJyaWVmIERBQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0RBQ19DT1VOVCAoMSkKKy8qIEBicmllZiBEQUMzMiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0RBQzMyX0NPVU5UICgwKQorLyogQGJyaWVmIERDREMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19EQ0RDX0NPVU5UICgxKQorLyogQGJyaWVmIEREUiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0REUl9DT1VOVCAoMCkKKy8qIEBicmllZiBETUEgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQgKDApCisvKiBAYnJpZWYgRURNQSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQgKDEpCisvKiBAYnJpZWYgRE1BTVVYIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRE1BTVVYX0NPVU5UICgxKQorLyogQGJyaWVmIERSWSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0RSWV9DT1VOVCAoMCkKKy8qIEBicmllZiBEU1BJIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRFNQSV9DT1VOVCAoMikKKy8qIEBicmllZiBFTVZTSU0gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19FTVZTSU1fQ09VTlQgKDApCisvKiBAYnJpZWYgRU5DIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRU5DX0NPVU5UICgwKQorLyogQGJyaWVmIEVORVQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19FTkVUX0NPVU5UICgwKQorLyogQGJyaWVmIEVXTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0VXTV9DT1VOVCAoMCkKKy8qIEBicmllZiBGQiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZCX0NPVU5UICgwKQorLyogQGJyaWVmIEZHUElPIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRkdQSU9fQ09VTlQgKDMpCisvKiBAYnJpZWYgRkxFWElPIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRkxFWElPX0NPVU5UICgwKQorLyogQGJyaWVmIEZNQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZNQ19DT1VOVCAoMCkKKy8qIEBicmllZiBGU0tEVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZTS0RUX0NPVU5UICgwKQorLyogQGJyaWVmIEZURkEgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GVEZBX0NPVU5UICgxKQorLyogQGJyaWVmIEZURkUgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GVEZFX0NPVU5UICgwKQorLyogQGJyaWVmIEZURkwgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GVEZMX0NPVU5UICgwKQorLyogQGJyaWVmIEZUTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZUTV9DT1VOVCAoMCkKKy8qIEBicmllZiBGVE1SQSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0ZUTVJBX0NPVU5UICgwKQorLyogQGJyaWVmIEZUTVJFIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfRlRNUkVfQ09VTlQgKDApCisvKiBAYnJpZWYgRlRNUkggYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19GVE1SSF9DT1VOVCAoMCkKKy8qIEBicmllZiBHUElPIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfR1BJT19DT1VOVCAoMykKKy8qIEBicmllZiBIU0FEQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0hTQURDX0NPVU5UICgwKQorLyogQGJyaWVmIEkyQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0kyQ19DT1VOVCAoMikKKy8qIEBicmllZiBJMlMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19JMlNfQ09VTlQgKDApCisvKiBAYnJpZWYgSUNTIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfSUNTX0NPVU5UICgwKQorLyogQGJyaWVmIElOVE1VWCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0lOVE1VWF9DT1VOVCAoMCkKKy8qIEBicmllZiBJUlEgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19JUlFfQ09VTlQgKDApCisvKiBAYnJpZWYgS0JJIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfS0JJX0NPVU5UICgwKQorLyogQGJyaWVmIFNMQ0QgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TTENEX0NPVU5UICgwKQorLyogQGJyaWVmIExDREMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MQ0RDX0NPVU5UICgwKQorLyogQGJyaWVmIExETyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xET19DT1VOVCAoMCkKKy8qIEBicmllZiBMTFdVIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTExXVV9DT1VOVCAoMSkKKy8qIEBicmllZiBMTUVNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTE1FTV9DT1VOVCAoMCkKKy8qIEBicmllZiBMUEkyQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xQSTJDX0NPVU5UICgwKQorLyogQGJyaWVmIExQSVQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MUElUX0NPVU5UICgwKQorLyogQGJyaWVmIExQU0NJIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTFBTQ0lfQ09VTlQgKDApCisvKiBAYnJpZWYgTFBTUEkgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19MUFNQSV9DT1VOVCAoMCkKKy8qIEBicmllZiBMUFRNUiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xQVE1SX0NPVU5UICgxKQorLyogQGJyaWVmIExQVFBNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTFBUUE1fQ09VTlQgKDApCisvKiBAYnJpZWYgTFBVQVJUIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTFBVQVJUX0NPVU5UICgxKQorLyogQGJyaWVmIExUQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX0xUQ19DT1VOVCAoMSkKKy8qIEBicmllZiBNQyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01DX0NPVU5UICgwKQorLyogQGJyaWVmIE1DRyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01DR19DT1VOVCAoMSkKKy8qIEBicmllZiBNQ0dMSVRFIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTUNHTElURV9DT1VOVCAoMCkKKy8qIEBicmllZiBNQ00gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NQ01fQ09VTlQgKDEpCisvKiBAYnJpZWYgTU1BVSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01NQVVfQ09VTlQgKDApCisvKiBAYnJpZWYgTU1EVlNRIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfTU1EVlNRX0NPVU5UICgwKQorLyogQGJyaWVmIFNZU01QVSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NZU01QVV9DT1VOVCAoMCkKKy8qIEBicmllZiBNU0NBTiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01TQ0FOX0NPVU5UICgwKQorLyogQGJyaWVmIE1TQ00gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NU0NNX0NPVU5UICgwKQorLyogQGJyaWVmIE1UQiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX01UQl9DT1VOVCAoMSkKKy8qIEBicmllZiBNVEJEV1QgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NVEJEV1RfQ09VTlQgKDEpCisvKiBAYnJpZWYgTVUgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19NVV9DT1VOVCAoMCkKKy8qIEBicmllZiBORkMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19ORkNfQ09VTlQgKDApCisvKiBAYnJpZWYgT1BBTVAgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19PUEFNUF9DT1VOVCAoMCkKKy8qIEBicmllZiBPU0MgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19PU0NfQ09VTlQgKDApCisvKiBAYnJpZWYgT1NDMzIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19PU0MzMl9DT1VOVCAoMCkKKy8qIEBicmllZiBPVEZBRCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX09URkFEX0NPVU5UICgwKQorLyogQGJyaWVmIFBEQiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1BEQl9DT1VOVCAoMCkKKy8qIEBicmllZiBQQ0MgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19QQ0NfQ09VTlQgKDApCisvKiBAYnJpZWYgUEdBIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUEdBX0NPVU5UICgwKQorLyogQGJyaWVmIFBJVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1BJVF9DT1VOVCAoMSkKKy8qIEBicmllZiBQTUMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19QTUNfQ09VTlQgKDEpCisvKiBAYnJpZWYgUE9SVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1BPUlRfQ09VTlQgKDMpCisvKiBAYnJpZWYgUFdNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUFdNX0NPVU5UICgwKQorLyogQGJyaWVmIFBXVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1BXVF9DT1VOVCAoMCkKKy8qIEBicmllZiBRdWFkU1BJIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUXVhZFNQSV9DT1VOVCAoMCkKKy8qIEBicmllZiBSQ00gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19SQ01fQ09VTlQgKDEpCisvKiBAYnJpZWYgUkZTWVMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19SRlNZU19DT1VOVCAoMSkKKy8qIEBicmllZiBSRlZCQVQgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19SRlZCQVRfQ09VTlQgKDApCisvKiBAYnJpZWYgUk5HIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUk5HX0NPVU5UICgwKQorLyogQGJyaWVmIFJOR0IgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19STkdCX0NPVU5UICgwKQorLyogQGJyaWVmIFJPTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1JPTV9DT1VOVCAoMSkKKy8qIEBicmllZiBSU0lNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfUlNJTV9DT1VOVCAoMSkKKy8qIEBicmllZiBSVEMgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19SVENfQ09VTlQgKDEpCisvKiBAYnJpZWYgU0NHIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfU0NHX0NPVU5UICgwKQorLyogQGJyaWVmIFNDSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NDSV9DT1VOVCAoMCkKKy8qIEBicmllZiBTREhDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfU0RIQ19DT1VOVCAoMCkKKy8qIEBicmllZiBTRFJBTSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NEUkFNX0NPVU5UICgwKQorLyogQGJyaWVmIFNFTUE0MiBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NFTUE0Ml9DT1VOVCAoMCkKKy8qIEBicmllZiBTSU0gYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19TSU1fQ09VTlQgKDEpCisvKiBAYnJpZWYgU01DIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfU01DX0NPVU5UICgxKQorLyogQGJyaWVmIFNQSSBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1NQSV9DT1VOVCAoMCkKKy8qIEBicmllZiBUTVIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19UTVJfQ09VTlQgKDApCisvKiBAYnJpZWYgVFBNIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVFBNX0NPVU5UICgzKQorLyogQGJyaWVmIFRSR01VWCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1RSR01VWF9DT1VOVCAoMCkKKy8qIEBicmllZiBUUklBTVAgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19UUklBTVBfQ09VTlQgKDApCisvKiBAYnJpZWYgVFJORyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1RSTkdfQ09VTlQgKDEpCisvKiBAYnJpZWYgVFNJIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVFNJX0NPVU5UICgxKQorLyogQGJyaWVmIFRTVE1SIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVFNUTVJfQ09VTlQgKDApCisvKiBAYnJpZWYgVUFSVCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1VBUlRfQ09VTlQgKDApCisvKiBAYnJpZWYgVVNCIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVVNCX0NPVU5UICgwKQorLyogQGJyaWVmIFVTQkRDRCBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1VTQkRDRF9DT1VOVCAoMCkKKy8qIEBicmllZiBVU0JIUyBhdmFpbGFiaWxpdHkgb24gdGhlIFNvQy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU09DX1VTQkhTX0NPVU5UICgwKQorLyogQGJyaWVmIFVTQkhTRENEIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVVNCSFNEQ0RfQ09VTlQgKDApCisvKiBAYnJpZWYgVVNCUEhZIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfVVNCUEhZX0NPVU5UICgwKQorLyogQGJyaWVmIFZSRUYgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19WUkVGX0NPVU5UICgxKQorLyogQGJyaWVmIFdET0cgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19XRE9HX0NPVU5UICgwKQorLyogQGJyaWVmIFhCQVIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19YQkFSX0NPVU5UICgwKQorLyogQGJyaWVmIFhCQVJBIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfWEJBUkFfQ09VTlQgKDApCisvKiBAYnJpZWYgWEJBUkIgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19YQkFSQl9DT1VOVCAoMCkKKy8qIEBicmllZiBYQ1ZSIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfWENWUl9DT1VOVCAoMSkKKy8qIEBicmllZiBYUkRDIGF2YWlsYWJpbGl0eSBvbiB0aGUgU29DLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TT0NfWFJEQ19DT1VOVCAoMCkKKy8qIEBicmllZiBaTEwgYXZhaWxhYmlsaXR5IG9uIHRoZSBTb0MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NPQ19aTExfQ09VTlQgKDEpCisKKy8qIEFEQzE2IG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIFByb2dyYW1tYWJsZSBHYWluIEFtcGxpZmllciAoUEdBKSBpbiBBREMgKHJlZ2lzdGVyIFBHQSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EgKDApCisvKiBAYnJpZWYgSGFzIFBHQSBjaG9wcGluZyBjb250cm9sIGluIEFEQyAoYml0IFBHQVtQR0FDSFBiXSBvciBQR0FbUEdBQ0hQXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfQ0hPUFBJTkcgKDApCisvKiBAYnJpZWYgSGFzIFBHQSBvZmZzZXQgbWVhc3VyZW1lbnQgbW9kZSBpbiBBREMgKGJpdCBQR0FbUEdBT0ZTTV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX09GRlNFVF9NRUFTVVJFTUVOVCAoMCkKKy8qIEBicmllZiBIYXMgRE1BIHN1cHBvcnQgKGJpdCBTQzJbRE1BRU5dIG9yIFNDNFtETUFFTl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRE1BICgxKQorLyogQGJyaWVmIEhhcyBkaWZmZXJlbnRpYWwgbW9kZSAoYml0ZmllbGQgU0MxeFtESUZGXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUgKDEpCisvKiBAYnJpZWYgSGFzIEZJRk8gKGJpdCBTQzRbQUZERVBdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0ZJRk8gKDApCisvKiBAYnJpZWYgRklGTyBzaXplIGlmIGF2YWlsYWJsZSAoYml0ZmllbGQgU0M0W0FGREVQXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0ZJRk9fU0laRSAoMCkKKy8qIEBicmllZiBIYXMgY2hhbm5lbCBzZXQgYS9iIG11bHRpcGxleG9yIChiaXRmaWVsZCBDRkcyW01VWFNFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVCAoMSkKKy8qIEBicmllZiBIYXMgSFcgdHJpZ2dlciBtYXNraW5nIChiaXRmaWVsZCBTQzVbSFRSR01BU0tFXS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX1RSSUdHRVJfTUFTSyAoMCkKKy8qIEBicmllZiBIYXMgY2FsaWJyYXRpb24gZmVhdHVyZSAoYml0IFNDM1tDQUxdIGFuZCByZWdpc3RlcnMgQ0xQeCwgQ0xNeCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTiAoMSkKKy8qIEBicmllZiBIYXMgSFcgYXZlcmFnaW5nIChiaXQgU0MzW0FWR0VdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX0FWRVJBR0UgKDEpCisvKiBAYnJpZWYgSGFzIG9mZnNldCBjb3JyZWN0aW9uIChyZWdpc3RlciBPRlMpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9BREMxNl9IQVNfT0ZGU0VUX0NPUlJFQ1RJT04gKDEpCisvKiBAYnJpZWYgTWF4aW11bSBBREMgcmVzb2x1dGlvbi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfTUFYX1JFU09MVVRJT04gKDE2KQorLyogQGJyaWVmIE51bWJlciBvZiBTQzF4IGFuZCBSeCByZWdpc3RlciBwYWlycyAoY29udmVyc2lvbiBjb250cm9sIGFuZCByZXN1bHQgcmVnaXN0ZXJzKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQURDMTZfQ09OVkVSU0lPTl9DT05UUk9MX0NPVU5UICgyKQorCisvKiBCVExFX1JGIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBObyBmZWF0dXJlIGRlZmluaXRpb25zICovCisKKy8qIENNUCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBUcmlnZ2VyIG1vZGUgaW4gQ01QIChyZWdpc3RlciBiaXQgZmllbGQgQ1IxW1RSSUdNXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NNUF9IQVNfVFJJR0dFUl9NT0RFICgxKQorLyogQGJyaWVmIEhhcyBXaW5kb3cgbW9kZSBpbiBDTVAgKHJlZ2lzdGVyIGJpdCBmaWVsZCBDUjFbV0VdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQ01QX0hBU19XSU5ET1dfTU9ERSAoMCkKKy8qIEBicmllZiBIYXMgRXh0ZXJuYWwgc2FtcGxlIHN1cHBvcnRlZCBpbiBDTVAgKHJlZ2lzdGVyIGJpdCBmaWVsZCBDUjFbU0VdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQ01QX0hBU19FWFRFUk5BTF9TQU1QTEVfU1VQUE9SVCAoMCkKKy8qIEBicmllZiBIYXMgRE1BIHN1cHBvcnQgaW4gQ01QIChyZWdpc3RlciBiaXQgZmllbGQgU0NSW0RNQUVOXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NNUF9IQVNfRE1BICgxKQorLyogQGJyaWVmIEhhcyBQYXNzIFRocm91Z2ggbW9kZSBpbiBDTVAgKHJlZ2lzdGVyIGJpdCBmaWVsZCBNVVhDUltQU1RNXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NNUF9IQVNfUEFTU19USFJPVUdIX01PREUgKDApCisvKiBAYnJpZWYgSGFzIERBQyBUZXN0IGZ1bmN0aW9uIGluIENNUCAocmVnaXN0ZXIgREFDVEVTVCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NNUF9IQVNfREFDX1RFU1QgKDApCisKKy8qIENPUCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyB0aGUgQ09QIERlYnVnIEVuYWJsZSBiaXQgKENPUENbQ09QREJHRU5dKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DT1BfSEFTX0RFQlVHX0VOQUJMRSAoMSkKKy8qIEBicmllZiBIYXMgdGhlIENPUCBTdG9wIG1vZGUgRW5hYmxlIGJpdCAoQ09QQ1tDT1BTVFBFTl0pICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0NPUF9IQVNfU1RPUF9FTkFCTEUgKDEpCisvKiBAYnJpZWYgSGFzIG1vcmUgY2xvY2sgc291cmNlcyBsaWtlIE1DR0lSQyAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9DT1BfSEFTX01PUkVfQ0xLU1JDICgxKQorLyogQGJyaWVmIEhhcyB0aGUgdGltZW91dCBsb25nIGFuZCBzaG9ydCBtb2RlIGJpdCAoQ09QQ1tDT1BDTEtTXSkgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFICgxKQorCisvKiBEQUMgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBEZWZpbmUgdGhlIHNpemUgb2YgaGFyZHdhcmUgYnVmZmVyICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RBQ19CVUZGRVJfU0laRSAoMikKKy8qIEBicmllZiBEZWZpbmUgd2hldGhlciB0aGUgYnVmZmVyIHN1cHBvcnRzIHdhdGVybWFyayBldmVudCBkZXRlY3Rpb24gb3Igbm90LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04gKDEpCisvKiBAYnJpZWYgRGVmaW5lIHdoZXRoZXIgdGhlIGJ1ZmZlciBzdXBwb3J0cyB3YXRlcm1hcmsgc2VsZWN0aW9uIGRldGVjdGlvbiBvciBub3QuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTiAoMSkKKy8qIEBicmllZiBEZWZpbmUgd2hldGhlciB0aGUgYnVmZmVyIHN1cHBvcnRzIHdhdGVybWFyayBldmVudCAxIHdvcmQgYmVmb3JlIGJ1ZmZlciB1cHBlciBsaW1pdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfMV9XT1JEICgxKQorLyogQGJyaWVmIERlZmluZSB3aGV0aGVyIHRoZSBidWZmZXIgc3VwcG9ydHMgd2F0ZXJtYXJrIGV2ZW50IDIgd29yZHMgYmVmb3JlIGJ1ZmZlciB1cHBlciBsaW1pdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfMl9XT1JEUyAoMSkKKy8qIEBicmllZiBEZWZpbmUgd2hldGhlciB0aGUgYnVmZmVyIHN1cHBvcnRzIHdhdGVybWFyayBldmVudCAzIHdvcmRzIGJlZm9yZSBidWZmZXIgdXBwZXIgbGltaXQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzNfV09SRFMgKDEpCisvKiBAYnJpZWYgRGVmaW5lIHdoZXRoZXIgdGhlIGJ1ZmZlciBzdXBwb3J0cyB3YXRlcm1hcmsgZXZlbnQgNCB3b3JkcyBiZWZvcmUgYnVmZmVyIHVwcGVyIGxpbWl0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS180X1dPUkRTICgxKQorLyogQGJyaWVmIERlZmluZSB3aGV0aGVyIEZJRk8gYnVmZmVyIG1vZGUgaXMgYXZhaWxhYmxlIG9yIG5vdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfREFDX0hBU19CVUZGRVJfRklGT19NT0RFICgwKQorLyogQGJyaWVmIERlZmluZSB3aGV0aGVyIHN3aW5nIGJ1ZmZlciBtb2RlIGlzIGF2YWlsYWJsZSBvciBub3QuLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EQUNfSEFTX0JVRkZFUl9TV0lOR19NT0RFICgwKQorCisvKiBEQ0RDIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIFZERDFQNSBiaXRzIGluIERDREMgUkVHMy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRENEQ19SRUczX0hBU19WREQxUDVfQklUUyAoMSkKKy8qIEBicmllZiBIYXMgVkREMVA0NSBiaXRzIGluIERDREMgUkVHMy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRENEQ19SRUczX0hBU19WREQxUDQ1X0JJVFMgKDApCisKKy8qIEVETUEgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBOdW1iZXIgb2YgRE1BIGNoYW5uZWxzIChyZWxhdGVkIHRvIG51bWJlciBvZiByZWdpc3RlcnMgVENELCBEQ0hQUkksIGJpdCBmaWVsZHMgRVJRW0VSUW5dLCBFRUlbRUVJbl0sIElOVFtJTlRuXSwgRVJSW0VSUm5dLCBIUlNbSFJTbl0gYW5kIGJpdCBmaWVsZCB3aWR0aHMgRVNbRVJSQ0hOXSwgQ0VFSVtDRUVJXSwgU0VFSVtTRUVJXSwgQ0VSUVtDRVJRXSwgU0VSUVtTRVJRXSwgQ0RORVtDRE5FXSwgU1NSVFtTU1JUXSwgQ0VSUltDRVJSXSwgQ0lOVFtDSU5UXSwgVENEbl9DSVRFUl9FTElOS1lFU1tMSU5LQ0hdLCBUQ0RuX0NTUltNQUpPUkxJTktDSF0sIFRDRG5fQklURVJfRUxJTktZRVNbTElOS0NIXSkuIChWYWxpZCBvbmx5IGZvciBlRE1BIG1vZHVsZXMuKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMICg0KQorLyogQGJyaWVmIFRvdGFsIG51bWJlciBvZiBETUEgY2hhbm5lbHMgb24gYWxsIG1vZHVsZXMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0VETUFfRE1BTVVYX0NIQU5ORUxTIChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCAqIDQpCisvKiBAYnJpZWYgTnVtYmVyIG9mIERNQSBjaGFubmVsIGdyb3VwcyAocmVnaXN0ZXIgYml0IGZpZWxkcyBDUltFUkdBXSwgQ1JbR1JQblBSSV0sIEVTW0dQRV0sIERDSFBSSW5bR1JQUFJJXSkuIChWYWxpZCBvbmx5IGZvciBlRE1BIG1vZHVsZXMuKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9FRE1BX0NIQU5ORUxfR1JPVVBfQ09VTlQgKDEpCisvKiBAYnJpZWYgSGFzIERNQV9FcnJvciBpbnRlcnJ1cHQgdmVjdG9yLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9FRE1BX0hBU19FUlJPUl9JUlEgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIERNQSBjaGFubmVscyB3aXRoIGFzeW5jaHJvbm91cyByZXF1ZXN0IGNhcGFiaWxpdHkgKHJlZ2lzdGVyIEVBUlMpLiAoVmFsaWQgb25seSBmb3IgZURNQSBtb2R1bGVzLikgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRURNQV9BU1lOQ0hST19SRVFVRVNUX0NIQU5ORUxfQ09VTlQgKDQpCisKKy8qIERNQU1VWCBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIE51bWJlciBvZiBETUEgY2hhbm5lbHMgKHJlbGF0ZWQgdG8gbnVtYmVyIG9mIHJlZ2lzdGVyIENIQ0ZHbikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCAoNCkKKy8qIEBicmllZiBUb3RhbCBudW1iZXIgb2YgRE1BIGNoYW5uZWxzIG9uIGFsbCBtb2R1bGVzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9ETUFNVVhfRE1BTVVYX0NIQU5ORUxTIChGU0xfRkVBVFVSRV9TT0NfRE1BTVVYX0NPVU5UICogNCkKKy8qIEBicmllZiBIYXMgdGhlIHBlcmlvZGljIHRyaWdnZXIgY2FwYWJpbGl0eSBmb3IgdGhlIHRyaWdnZXJlZCBETUEgY2hhbm5lbCAocmVnaXN0ZXIgYml0IENIQ0ZHMFtUUklHXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RNQU1VWF9IQVNfVFJJRyAoMSkKKworLyogRkxBU0ggbW9kdWxlIGZlYXR1cmVzICovCisKKyNpZiBkZWZpbmVkKENQVV9NS1c0MVoyNTZWSFQ0KQorICAgIC8qIEBicmllZiBJcyBvZiB0eXBlIEZURkEuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZBICgxKQorICAgIC8qIEBicmllZiBJcyBvZiB0eXBlIEZURkUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZFICgwKQorICAgIC8qIEBicmllZiBJcyBvZiB0eXBlIEZURkwuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZMICgwKQorICAgIC8qIEBicmllZiBIYXMgZmxhZ3MgaW5kaWNhdGluZyB0aGUgc3RhdHVzIG9mIHRoZSBGbGV4UkFNIChyZWdpc3RlciBiaXRzIEZDTkZHW0VFRVJEWV0sIEZDTkZHW1JBTVJEWV0gYW5kIEZDTkZHW1BGTFNIXSkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU1fRkxBR1MgKDApCisgICAgLyogQGJyaWVmIEhhcyBwcm9ncmFtIGZsYXNoIHN3YXBwaW5nIHN0YXR1cyBmbGFnIChyZWdpc3RlciBiaXQgRkNORkdbU1dBUF0pLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9TV0FQUElOR19TVEFUVVNfRkxBRyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIEVFUFJPTSByZWdpb24gcHJvdGVjdGlvbiAocmVnaXN0ZXIgRkVQUk9UKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FRVJPTV9SRUdJT05fUFJPVEVDVElPTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGRhdGEgZmxhc2ggcmVnaW9uIHByb3RlY3Rpb24gKHJlZ2lzdGVyIEZEUFJPVCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfREFUQV9GTEFTSF9SRUdJT05fUFJPVEVDVElPTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYXNoIGFjY2VzcyBjb250cm9sIChyZWdpc3RlcnMgWEFDQ0huLCBTQUNDSG4sIHdoZXJlIG4gaXMgYSBudW1iZXIsIEZBQ1NTIGFuZCBGQUNTTikuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wgKDEpCisgICAgLyogQGJyaWVmIEhhcyBmbGFzaCBjYWNoZSBjb250cm9sIGluIEZNQyBtb2R1bGUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRk1DX0ZMQVNIX0NBQ0hFX0NPTlRST0xTICgwKQorICAgIC8qIEBicmllZiBIYXMgZmxhc2ggY2FjaGUgY29udHJvbCBpbiBNQ00gbW9kdWxlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX01DTV9GTEFTSF9DQUNIRV9DT05UUk9MUyAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYXNoIGNhY2hlIGNvbnRyb2wgaW4gTVNDTSBtb2R1bGUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfTVNDTV9GTEFTSF9DQUNIRV9DT05UUk9MUyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIHByZWZldGNoIHNwZWN1bGF0aW9uIGNvbnRyb2wgaW4gZmxhc2gsIHN1Y2ggYXMga3Y1eC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0ggKDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggc3RhcnQgYWRkcmVzcy4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TVEFSVF9BRERSRVNTICgweDAwMDAwMDAwKQorICAgIC8qIEBicmllZiBQLUZsYXNoIGJsb2NrIGNvdW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICgyKQorICAgIC8qIEBicmllZiBQLUZsYXNoIGJsb2NrIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRSAoMTMxMDcyKQorICAgIC8qIEBicmllZiBQLUZsYXNoIHNlY3RvciBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NFQ1RPUl9TSVpFICgyMDQ4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIHdyaXRlIHVuaXQgc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19XUklURV9VTklUX1NJWkUgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggZGF0YSBwYXRoIHdpZHRoLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0RBVEFfUEFUSF9XSURUSCAoOCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBibG9jayBzd2FwIGZlYXR1cmUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAgKDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggcHJvdGVjdGlvbiByZWdpb24gY291bnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQgKDMyKQorICAgIC8qIEBicmllZiBIYXMgRmxleE5WTSBtZW1vcnkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0gKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gc3RhcnQgYWRkcmVzcy4gKFZhbGlkIG9ubHkgaWYgRmxleE5WTSBpcyBhdmFpbGFibGUuKSAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU1RBUlRfQUREUkVTUyAoMHgwMDAwMDAwMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBibG9jayBjb3VudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX0NPVU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIGJsb2NrIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19TSVpFICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHNlY3RvciBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfU0VDVE9SX1NJWkUgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gd3JpdGUgdW5pdCBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfV1JJVEVfVU5JVF9TSVpFICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIGRhdGEgcGF0aCB3aWR0aC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfQkxPQ0tfREFUQV9QQVRIX1dJRFRIICgwKQorICAgIC8qIEBicmllZiBIYXMgRmxleFJBTSBtZW1vcnkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0gKDApCisgICAgLyogQGJyaWVmIEZsZXhSQU0gc3RhcnQgYWRkcmVzcy4gKFZhbGlkIG9ubHkgaWYgRmxleFJBTSBpcyBhdmFpbGFibGUuKSAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9SQU1fU1RBUlRfQUREUkVTUyAoMHgwMDAwMDAwMCkKKyAgICAvKiBAYnJpZWYgRmxleFJBTSBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9SQU1fU0laRSAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDAgUmVhZCAxcyBCbG9jayBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfMVNfQkxPQ0tfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwMSBSZWFkIDFzIFNlY3Rpb24gY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEXzFTX1NFQ1RJT05fQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwMiBQcm9ncmFtIENoZWNrIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9DSEVDS19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDAzIFJlYWQgUmVzb3VyY2UgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDYgUHJvZ3JhbSBMb25nd29yZCBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fTE9OR1dPUkRfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwNyBQcm9ncmFtIFBocmFzZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEhSQVNFX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDggRXJhc2UgRmxhc2ggQmxvY2sgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9GTEFTSF9CTE9DS19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDA5IEVyYXNlIEZsYXNoIFNlY3RvciBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0ZMQVNIX1NFQ1RPUl9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDBCIFByb2dyYW0gU2VjdGlvbiBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fU0VDVElPTl9DTUQgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDQwIFJlYWQgMXMgQWxsIEJsb2NrcyBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfMVNfQUxMX0JMT0NLU19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQxIFJlYWQgT25jZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfT05DRV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQzIFByb2dyYW0gT25jZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fT05DRV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQ0IEVyYXNlIEFsbCBCbG9ja3MgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfQkxPQ0tTX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDUgVmVyaWZ5IEJhY2tkb29yIEFjY2VzcyBLZXkgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19WRVJJRllfQkFDS0RPT1JfQUNDRVNTX0tFWV9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDQ2IFN3YXAgQ29udHJvbCBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQgKDApCisgICAgLyogQGJyaWVmIEhhcyAweDQ5IEVyYXNlIEFsbCBCbG9ja3MgVW5zZWN1cmUgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19FUkFTRV9BTExfQkxPQ0tTX1VOU0VDVVJFX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NEEgUmVhZCAxcyBBbGwgRXhlY3V0ZS1vbmx5IFNlZ21lbnRzIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF8xU19BTExfRVhFQ1VURV9PTkxZX1NFR01FTlRTX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NEIgRXJhc2UgQWxsIEV4ZWN1dGUtb25seSBTZWdtZW50cyBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9FWEVDVVRFX09OTFlfU0VHTUVOVFNfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg4MCBQcm9ncmFtIFBhcnRpdGlvbiBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEFSVElUSU9OX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4ODEgU2V0IEZsZXhSQU0gRnVuY3Rpb24gY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQgKDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggRXJhc2UvUmVhZCAxc3QgYWxsIGJsb2NrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggRXJhc2Ugc2VjdG9yIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5UICg4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIFJyb2dyYW0vVmVyaWZ5IHNlY3Rpb24gY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TRUNUSU9OX0NNRF9BRERSRVNTX0FMSUdNRU5UICg4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIFJlYWQgcmVzb3VyY2UgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9SRVNPVVJDRV9DTURfQUREUkVTU19BTElHTUVOVCAoNCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBQcm9ncmFtIGNoZWNrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQ0hFQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggUHJvZ3JhbSBjaGVjayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NXQVBfQ09OVFJPTF9DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBFcmFzZS9SZWFkIDFzdCBhbGwgYmxvY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIEVyYXNlIHNlY3RvciBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU0VDVE9SX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIFJyb2dyYW0vVmVyaWZ5IHNlY3Rpb24gY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1NFQ1RJT05fQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gUmVhZCByZXNvdXJjZSBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fUkVTT1VSQ0VfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gUHJvZ3JhbSBjaGVjayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQ0hFQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDAwMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMDAxIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDAxICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAwMTAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDAxMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMTAwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTAwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAxMDEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDExMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMTExIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTExICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDEwMDAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTAwMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMDEwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDEwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDEwMTEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTEwMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMTAxIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTAxICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDExMTAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTExMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMDExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMTEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAwMTExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMTEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMDExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMTEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTAwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMDAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTAxIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMDEgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTEwIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMTAgKDB4RkZGRikKKyAgICAvKiBAYnJpZWYgRW11bGF0ZWQgZWVwcm9tIHNpemUgY29kZSAxMTExIG1hcHBpbmcgdG8gZW11bGF0ZWQgZWVwcm9tIHNpemUgaW4gYnl0ZXMgKDB4RkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMTEgKDB4RkZGRikKKyNlbGlmIGRlZmluZWQoQ1BVX01LVzQxWjUxMkNBVDQpIHx8IGRlZmluZWQoQ1BVX01LVzQxWjUxMlZIVDQpCisgICAgLyogQGJyaWVmIElzIG9mIHR5cGUgRlRGQS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkEgKDEpCisgICAgLyogQGJyaWVmIElzIG9mIHR5cGUgRlRGRS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkUgKDApCisgICAgLyogQGJyaWVmIElzIG9mIHR5cGUgRlRGTC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkwgKDApCisgICAgLyogQGJyaWVmIEhhcyBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdGF0dXMgb2YgdGhlIEZsZXhSQU0gKHJlZ2lzdGVyIGJpdHMgRkNORkdbRUVFUkRZXSwgRkNORkdbUkFNUkRZXSBhbmQgRkNORkdbUEZMU0hdKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTV9GTEFHUyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIHByb2dyYW0gZmxhc2ggc3dhcHBpbmcgc3RhdHVzIGZsYWcgKHJlZ2lzdGVyIGJpdCBGQ05GR1tTV0FQXSkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX1NXQVBQSU5HX1NUQVRVU19GTEFHICgwKQorICAgIC8qIEBicmllZiBIYXMgRUVQUk9NIHJlZ2lvbiBwcm90ZWN0aW9uIChyZWdpc3RlciBGRVBST1QpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VFUk9NX1JFR0lPTl9QUk9URUNUSU9OICgwKQorICAgIC8qIEBicmllZiBIYXMgZGF0YSBmbGFzaCByZWdpb24gcHJvdGVjdGlvbiAocmVnaXN0ZXIgRkRQUk9UKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19EQVRBX0ZMQVNIX1JFR0lPTl9QUk9URUNUSU9OICgwKQorICAgIC8qIEBicmllZiBIYXMgZmxhc2ggYWNjZXNzIGNvbnRyb2wgKHJlZ2lzdGVycyBYQUNDSG4sIFNBQ0NIbiwgd2hlcmUgbiBpcyBhIG51bWJlciwgRkFDU1MgYW5kIEZBQ1NOKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGZsYXNoIGNhY2hlIGNvbnRyb2wgaW4gRk1DIG1vZHVsZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTUNfRkxBU0hfQ0FDSEVfQ09OVFJPTFMgKDApCisgICAgLyogQGJyaWVmIEhhcyBmbGFzaCBjYWNoZSBjb250cm9sIGluIE1DTSBtb2R1bGUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfTUNNX0ZMQVNIX0NBQ0hFX0NPTlRST0xTICgxKQorICAgIC8qIEBicmllZiBIYXMgZmxhc2ggY2FjaGUgY29udHJvbCBpbiBNU0NNIG1vZHVsZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19NU0NNX0ZMQVNIX0NBQ0hFX0NPTlRST0xTICgwKQorICAgIC8qIEBicmllZiBIYXMgcHJlZmV0Y2ggc3BlY3VsYXRpb24gY29udHJvbCBpbiBmbGFzaCwgc3VjaCBhcyBrdjV4LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCAoMCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBzdGFydCBhZGRyZXNzLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NUQVJUX0FERFJFU1MgKDB4MDAwMDAwMDApCisgICAgLyogQGJyaWVmIFAtRmxhc2ggYmxvY2sgY291bnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ09VTlQgKDIpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggYmxvY2sgc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19TSVpFICgyNjIxNDQpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggc2VjdG9yIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0VDVE9SX1NJWkUgKDIwNDgpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggd3JpdGUgdW5pdCBzaXplLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1dSSVRFX1VOSVRfU0laRSAoNCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBkYXRhIHBhdGggd2lkdGguICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfREFUQV9QQVRIX1dJRFRIICg4KQorICAgIC8qIEBicmllZiBQLUZsYXNoIGJsb2NrIHN3YXAgZmVhdHVyZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUCAoMCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBwcm90ZWN0aW9uIHJlZ2lvbiBjb3VudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVCAoMzIpCisgICAgLyogQGJyaWVmIEhhcyBGbGV4TlZNIG1lbW9yeS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTSAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBzdGFydCBhZGRyZXNzLiAoVmFsaWQgb25seSBpZiBGbGV4TlZNIGlzIGF2YWlsYWJsZS4pICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9TVEFSVF9BRERSRVNTICgweDAwMDAwMDAwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIGJsb2NrIGNvdW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfQ09VTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gYmxvY2sgc2l6ZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0JMT0NLX1NJWkUgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gc2VjdG9yIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19TRUNUT1JfU0laRSAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSB3cml0ZSB1bml0IHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19XUklURV9VTklUX1NJWkUgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gZGF0YSBwYXRoIHdpZHRoLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9CTE9DS19EQVRBX1BBVEhfV0lEVEggKDApCisgICAgLyogQGJyaWVmIEhhcyBGbGV4UkFNIG1lbW9yeS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTSAoMCkKKyAgICAvKiBAYnJpZWYgRmxleFJBTSBzdGFydCBhZGRyZXNzLiAoVmFsaWQgb25seSBpZiBGbGV4UkFNIGlzIGF2YWlsYWJsZS4pICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX1JBTV9TVEFSVF9BRERSRVNTICgweDAwMDAwMDAwKQorICAgIC8qIEBicmllZiBGbGV4UkFNIHNpemUuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX1JBTV9TSVpFICgwKQorICAgIC8qIEBicmllZiBIYXMgMHgwMCBSZWFkIDFzIEJsb2NrIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF8xU19CTE9DS19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDAxIFJlYWQgMXMgU2VjdGlvbiBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfMVNfU0VDVElPTl9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDAyIFByb2dyYW0gQ2hlY2sgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX0NIRUNLX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDMgUmVhZCBSZXNvdXJjZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHgwNiBQcm9ncmFtIExvbmd3b3JkIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9MT05HV09SRF9DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDA3IFByb2dyYW0gUGhyYXNlIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9QSFJBU0VfQ01EICgwKQorICAgIC8qIEBicmllZiBIYXMgMHgwOCBFcmFzZSBGbGFzaCBCbG9jayBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0ZMQVNIX0JMT0NLX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MDkgRXJhc2UgRmxhc2ggU2VjdG9yIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfRkxBU0hfU0VDVE9SX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4MEIgUHJvZ3JhbSBTZWN0aW9uIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9TRUNUSU9OX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDAgUmVhZCAxcyBBbGwgQmxvY2tzIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF8xU19BTExfQkxPQ0tTX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDEgUmVhZCBPbmNlIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9PTkNFX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDMgUHJvZ3JhbSBPbmNlIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9PTkNFX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDQgRXJhc2UgQWxsIEJsb2NrcyBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0NSBWZXJpZnkgQmFja2Rvb3IgQWNjZXNzIEtleSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1ZFUklGWV9CQUNLRE9PUl9BQ0NFU1NfS0VZX0NNRCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDYgU3dhcCBDb250cm9sIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIDB4NDkgRXJhc2UgQWxsIEJsb2NrcyBVbnNlY3VyZSBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfVU5TRUNVUkVfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0QSBSZWFkIDFzIEFsbCBFeGVjdXRlLW9ubHkgU2VnbWVudHMgY29tbWFuZC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEXzFTX0FMTF9FWEVDVVRFX09OTFlfU0VHTUVOVFNfQ01EICgxKQorICAgIC8qIEBicmllZiBIYXMgMHg0QiBFcmFzZSBBbGwgRXhlY3V0ZS1vbmx5IFNlZ21lbnRzIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfQUxMX0VYRUNVVEVfT05MWV9TRUdNRU5UU19DTUQgKDEpCisgICAgLyogQGJyaWVmIEhhcyAweDgwIFByb2dyYW0gUGFydGl0aW9uIGNvbW1hbmQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9QQVJUSVRJT05fQ01EICgwKQorICAgIC8qIEBicmllZiBIYXMgMHg4MSBTZXQgRmxleFJBTSBGdW5jdGlvbiBjb21tYW5kLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAoMCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBFcmFzZS9SZWFkIDFzdCBhbGwgYmxvY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19DTURfQUREUkVTU19BTElHTUVOVCAoNCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBFcmFzZSBzZWN0b3IgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TRUNUT1JfQ01EX0FERFJFU1NfQUxJR01FTlQgKDgpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggUnJvZ3JhbS9WZXJpZnkgc2VjdGlvbiBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1NFQ1RJT05fQ01EX0FERFJFU1NfQUxJR01FTlQgKDgpCisgICAgLyogQGJyaWVmIFAtRmxhc2ggUmVhZCByZXNvdXJjZSBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1JFU09VUkNFX0NNRF9BRERSRVNTX0FMSUdNRU5UICg0KQorICAgIC8qIEBicmllZiBQLUZsYXNoIFByb2dyYW0gY2hlY2sgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9DSEVDS19DTURfQUREUkVTU19BTElHTUVOVCAoNCkKKyAgICAvKiBAYnJpZWYgUC1GbGFzaCBQcm9ncmFtIGNoZWNrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1dBUF9DT05UUk9MX0NNRF9BRERSRVNTX0FMSUdNRU5UICgwKQorICAgIC8qIEBicmllZiBGbGV4TlZNIEVyYXNlL1JlYWQgMXN0IGFsbCBibG9jayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gRXJhc2Ugc2VjdG9yIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9TRUNUT1JfQ01EX0FERFJFU1NfQUxJR01FTlQgKDApCisgICAgLyogQGJyaWVmIEZsZXhOVk0gUnJvZ3JhbS9WZXJpZnkgc2VjdGlvbiBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fU0VDVElPTl9DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBSZWFkIHJlc291cmNlIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9SRVNPVVJDRV9DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBQcm9ncmFtIGNoZWNrIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9DSEVDS19DTURfQUREUkVTU19BTElHTUVOVCAoMCkKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMDAwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDAwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAwMDEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDAxMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMDExIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMDExICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAxMDAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMDEwMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDEwMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAwMTEwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8wMTEwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDAxMTEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTAwMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMDAxIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMDAxICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDEwMTAgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTAgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTAxMSBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAxMSAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMTAwIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTAwICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBGbGV4TlZNIHBhcnRpdGlvbiBjb2RlIDExMDEgbWFwcGluZyB0byBkYXRhIGZsYXNoIHNpemUgaW4gYnl0ZXMgKDB4RkZGRkZGRkYgPSByZXNlcnZlZCkuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDEgKDB4RkZGRkZGRkYpCisgICAgLyogQGJyaWVmIEZsZXhOVk0gcGFydGl0aW9uIGNvZGUgMTExMCBtYXBwaW5nIHRvIGRhdGEgZmxhc2ggc2l6ZSBpbiBieXRlcyAoMHhGRkZGRkZGRiA9IHJlc2VydmVkKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMCAoMHhGRkZGRkZGRikKKyAgICAvKiBAYnJpZWYgRmxleE5WTSBwYXJ0aXRpb24gY29kZSAxMTExIG1hcHBpbmcgdG8gZGF0YSBmbGFzaCBzaXplIGluIGJ5dGVzICgweEZGRkZGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF8xMTExICgweEZGRkZGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAwMDAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAwMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAwMDEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAwMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAwMTAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAxMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAwMTEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAxMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAxMDAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDEwMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAxMDEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDEwMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAxMTAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDExMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDAxMTEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDExMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDEwMDAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTAwMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDEwMDEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTAwMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDEwMTAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTAxMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDEwMTEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTAxMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDExMDAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTEwMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDExMDEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTEwMSAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDExMTAgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTExMCAoMHhGRkZGKQorICAgIC8qIEBicmllZiBFbXVsYXRlZCBlZXByb20gc2l6ZSBjb2RlIDExMTEgbWFwcGluZyB0byBlbXVsYXRlZCBlZXByb20gc2l6ZSBpbiBieXRlcyAoMHhGRkZGID0gcmVzZXJ2ZWQpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTExMSAoMHhGRkZGKQorI2VuZGlmIC8qIGRlZmluZWQoQ1BVX01LVzQxWjI1NlZIVDQpICovCisKKy8qIEdFTkZTSyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogTm8gZmVhdHVyZSBkZWZpbml0aW9ucyAqLworCisvKiBHUElPIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIGZhc3QgKHNpbmdsZSBjeWNsZSkgYWNjZXNzIGNhcGFiaWxpdHkgdmlhIGEgZGVkaWNhdGVkIG1lbW9yeSByZWdpb24uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0dQSU9fSEFTX0ZBU1RfR1BJTyAoMSkKKy8qIEBicmllZiBIYXMgcG9ydCBpbnB1dCBkaXNhYmxlIHJlZ2lzdGVyIChQSURSKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfR1BJT19IQVNfSU5QVVRfRElTQUJMRSAoMCkKKy8qIEBicmllZiBIYXMgZGVkaWNhdGVkIGludGVycnVwdCB2ZWN0b3IuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0dQSU9fSEFTX1BPUlRfSU5URVJSVVBUX1ZFQ1RPUiAoMSkKKworLyogSTJDIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIFN5c3RlbSBNYW5hZ2VtZW50IEJ1cyBzdXBwb3J0IChyZWdpc3RlcnMgU01CLCBBMiwgU0xUTCBhbmQgU0xUSCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19IQVNfU01CVVMgKDEpCisvKiBAYnJpZWYgTWF4aW11bSBzdXBwb3J0ZWQgYmF1ZCByYXRlIGluIGtpbG9iaXQgcGVyIHNlY29uZC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX01BWF9CQVVEX0tCUFMgKDQwMCkKKy8qIEBicmllZiBJcyBhZmZlY3RlZCBieSBlcnJhdGEgd2l0aCBJRCA2MDcwIChyZXBlYXQgc3RhcnQgY2Fubm90IGJlIGdlbmVyYXRlZCBpZiB0aGUgRltNVUxUXSBiaXQgZmllbGQgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9JMkNfSEFTX0VSUkFUQV82MDcwICgwKQorLyogQGJyaWVmIEhhcyBETUEgc3VwcG9ydCAocmVnaXN0ZXIgYml0IEMxW0RNQUVOXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE1BX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgSGFzIEkyQyBidXMgc3RhcnQgYW5kIHN0b3AgZGV0ZWN0aW9uIChyZWdpc3RlciBiaXRzIEZMVFtTU0lFXSwgRkxUW1NUQVJURl0gYW5kIEZMVFtTVE9QRl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICgxKQorLyogQGJyaWVmIEhhcyBJMkMgYnVzIHN0b3AgZGV0ZWN0aW9uIChyZWdpc3RlciBiaXRzIEZMVFtTVE9QSUVdIGFuZCBGTFRbU1RPUEZdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAoMCkKKy8qIEBicmllZiBIYXMgSTJDIGJ1cyBzdG9wIGhvbGQgb2ZmIChyZWdpc3RlciBiaXQgRkxUW1NIRU5dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0hPTERfT0ZGICgxKQorLyogQGJyaWVmIE1heGltdW0gd2lkdGggb2YgdGhlIGdsaXRjaCBmaWx0ZXIgaW4gbnVtYmVyIG9mIGJ1cyBjbG9ja3MuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0kyQ19NQVhfR0xJVENIX0ZJTFRFUl9XSURUSCAoMTUpCisvKiBAYnJpZWYgSGFzIGNvbnRyb2wgb2YgdGhlIGRyaXZlIGNhcGFiaWxpdHkgb2YgdGhlIEkyQyBwaW5zLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9JMkNfSEFTX0hJR0hfRFJJVkVfU0VMRUNUSU9OICgxKQorLyogQGJyaWVmIEhhcyBkb3VibGUgYnVmZmVyaW5nIHN1cHBvcnQgKHJlZ2lzdGVyIFMyKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSSU5HICgxKQorLyogQGJyaWVmIEhhcyBkb3VibGUgYnVmZmVyIGVuYWJsZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSX0VOQUJMRSAoMSkKKworLyogTExXVSBtb2R1bGUgZmVhdHVyZXMgKi8KKworI2lmIGRlZmluZWQoQ1BVX01LVzQxWjI1NlZIVDQpIHx8IGRlZmluZWQoQ1BVX01LVzQxWjUxMlZIVDQpCisgICAgLyogQGJyaWVmIE1heGltdW0gbnVtYmVyIG9mIHBpbnMgKG1heGltYWwgaW5kZXggcGx1cyBvbmUpIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAoMTYpCisgICAgLyogQGJyaWVmIEhhcyBwaW5zIDgtMTUgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9FWFRFUk5BTF9QSU5fR1JPVVAyICgxKQorICAgIC8qIEBicmllZiBNYXhpbXVtIG51bWJlciBvZiBpbnRlcm5hbCBtb2R1bGVzIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRSAoOCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGRpZ2l0YWwgZmlsdGVycy4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKDIpCisgICAgLyogQGJyaWVmIEhhcyBNRiByZWdpc3Rlci4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX01GICgwKQorICAgIC8qIEBicmllZiBIYXMgUEYgcmVnaXN0ZXIuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIHBvc3NpYmlsaXR5IHRvIGVuYWJsZSByZXNldCBpbiBsb3cgbGVha2FnZSBwb3dlciBtb2RlIGFuZCBlbmFibGUgZGlnaXRhbCBmaWx0ZXIgZm9yIFJFU0VUIHBpbiAocmVnaXN0ZXIgTExXVV9SU1QpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUkVTRVRfRU5BQkxFICgwKQorICAgIC8qIEBicmllZiBIYXMgbm8gaW50ZXJuYWwgbW9kdWxlIHdha2V1cCBmbGFnIHJlZ2lzdGVyLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfTk9fSU5URVJOQUxfTU9EVUxFX1dBS0VVUF9GTEFHX1JFRyAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjAgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4wX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMF9HUElPX1BJTiAoMTYpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMV9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjFfR1BJT19QSU4gKDE3KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMiAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjJfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yX0dQSU9fUElOICgxOCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAzIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjMgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOM19HUElPX1BJTiAoMTkpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gNCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU40ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONF9HUElPX0lEWCAoR1BJT0FfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjRfR1BJT19QSU4gKDE2KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDUgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElONSAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjVfR1BJT19JRFggKEdQSU9BX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU41X0dQSU9fUElOICgxNykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA2IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjYgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU42X0dQSU9fSURYIChHUElPQV9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONl9HUElPX1BJTiAoMTgpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gNyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU43ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElON19HUElPX0lEWCAoR1BJT0FfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjdfR1BJT19QSU4gKDE5KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDggY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOOCAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjhfR1BJT19JRFggKEdQSU9CX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU44X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDkgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOOSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjlfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOOV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxMCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xMCAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEwX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTBfR1BJT19QSU4gKDIpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTEgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMV9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjExX0dQSU9fUElOICgzKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDEyIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjEyICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTJfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMl9HUElPX1BJTiAoNCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxMyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xMyAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEzX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTNfR1BJT19QSU4gKDUpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTQgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTQgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNF9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE0X0dQSU9fUElOICg2KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE1IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE1ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTVfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNV9HUElPX1BJTiAoNykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxNiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xNiAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE2X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE2X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE3ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTdfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTdfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTggY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTggKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxOSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xOSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE5X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE5X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIwICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjBfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjBfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjEgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yMiAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIyX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIyX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIzIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIzICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjNfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjNfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjQgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjQgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yNSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI1X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI1X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI2IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI2ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjZfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjZfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjcgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjcgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yN19HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yN19HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyOCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yOCAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI4X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI4X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI5IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI5ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjlfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjlfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMzAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMzAgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAzMSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4zMSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjMxX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjMxX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFMCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSAxIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTEgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUyICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDMgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFMyAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSA0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTQgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEU1ICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDYgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFNiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSA3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTcgKDEpCisgICAgLyogQGJyaWVmIEhhcyBWZXJzaW9uIElEIFJlZ2lzdGVyIChMTFdVX1ZFUklEKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1ZFUklEICgwKQorICAgIC8qIEBicmllZiBIYXMgUGFyYW1ldGVyIFJlZ2lzdGVyIChMTFdVX1BBUkFNKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BBUkFNICgwKQorICAgIC8qIEBicmllZiBXaWR0aCBvZiByZWdpc3RlcnMgb2YgdGhlIExMV1UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCAoOCkKKyAgICAvKiBAYnJpZWYgSGFzIERNQSBFbmFibGUgcmVnaXN0ZXIgKExMV1VfREUpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRE1BX0VOQUJMRV9SRUcgKDApCisjZWxpZiBkZWZpbmVkKENQVV9NS1c0MVo1MTJDQVQ0KQorICAgIC8qIEBicmllZiBNYXhpbXVtIG51bWJlciBvZiBwaW5zIChtYXhpbWFsIGluZGV4IHBsdXMgb25lKSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKDE2KQorICAgIC8qIEBicmllZiBIYXMgcGlucyA4LTE1IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfRVhURVJOQUxfUElOX0dST1VQMiAoMSkKKyAgICAvKiBAYnJpZWYgTWF4aW11bSBudW1iZXIgb2YgaW50ZXJuYWwgbW9kdWxlcyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUgKDgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBkaWdpdGFsIGZpbHRlcnMuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICgyKQorICAgIC8qIEBicmllZiBIYXMgTUYgcmVnaXN0ZXIuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19NRiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIFBGIHJlZ2lzdGVyLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEYgKDApCisgICAgLyogQGJyaWVmIEhhcyBwb3NzaWJpbGl0eSB0byBlbmFibGUgcmVzZXQgaW4gbG93IGxlYWthZ2UgcG93ZXIgbW9kZSBhbmQgZW5hYmxlIGRpZ2l0YWwgZmlsdGVyIGZvciBSRVNFVCBwaW4gKHJlZ2lzdGVyIExMV1VfUlNUKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1JFU0VUX0VOQUJMRSAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIG5vIGludGVybmFsIG1vZHVsZSB3YWtldXAgZmxhZyByZWdpc3Rlci4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX05PX0lOVEVSTkFMX01PRFVMRV9XQUtFVVBfRkxBR19SRUcgKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4wICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMF9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjBfR1BJT19QSU4gKDE2KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMSAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjFfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xX0dQSU9fUElOICgxNykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMl9HUElPX1BJTiAoMTgpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4zICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOM19HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjNfR1BJT19QSU4gKDE5KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDQgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElONCAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjRfR1BJT19JRFggKEdQSU9BX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU40X0dQSU9fUElOICgxNikKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA1IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjUgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU41X0dQSU9fSURYIChHUElPQV9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONV9HUElPX1BJTiAoMTcpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gNiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU42ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElONl9HUElPX0lEWCAoR1BJT0FfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjZfR1BJT19QSU4gKDE4KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDcgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElONyAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjdfR1BJT19JRFggKEdQSU9BX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU43X0dQSU9fUElOICgxOSkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA4IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjggKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU44X0dQSU9fSURYIChHUElPQl9JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOOF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiA5IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjkgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU45X0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOOV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxMCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xMCAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEwX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTBfR1BJT19QSU4gKDIpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTEgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMV9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjExX0dQSU9fUElOICgzKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDEyIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjEyICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTJfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xMl9HUElPX1BJTiAoNCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxMyBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xMyAoMSkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjEzX0dQSU9fSURYIChHUElPQ19JRFgpCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTNfR1BJT19QSU4gKDUpCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTQgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTQgKDEpCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNF9HUElPX0lEWCAoR1BJT0NfSURYKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE0X0dQSU9fUElOICg2KQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE1IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE1ICgxKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTVfR1BJT19JRFggKEdQSU9DX0lEWCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xNV9HUElPX1BJTiAoNykKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxNiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xNiAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE2X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE2X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDE3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjE3ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTdfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMTdfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMTggY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMTggKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4xOF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAxOSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4xOSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE5X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjE5X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIwIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIwICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjBfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjBfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjEgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjEgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMV9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yMV9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yMiAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIyX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjIyX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDIzIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjIzICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjNfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjNfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjQgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjQgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yNF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yNSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI1X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI1X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI2IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI2ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjZfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjZfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMjcgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMjcgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yN19HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4yN19HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAyOCBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4yOCAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI4X0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjI4X0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgZXh0ZXJuYWwgcGluIDI5IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTjI5ICgwKQorICAgIC8qIEBicmllZiBJbmRleCBvZiBwb3J0IG9mIGV4dGVybmFsIHBpbi4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjlfR1BJT19JRFggKDApCisgICAgLyogQGJyaWVmIE51bWJlciBvZiBleHRlcm5hbCBwaW4gcG9ydCBvbiBzcGVjaWZpZWQgcG9ydC4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfUElOMjlfR1BJT19QSU4gKDApCisgICAgLyogQGJyaWVmIEhhcyBleHRlcm5hbCBwaW4gMzAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOMzAgKDApCisgICAgLyogQGJyaWVmIEluZGV4IG9mIHBvcnQgb2YgZXh0ZXJuYWwgcGluLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMF9HUElPX0lEWCAoMCkKKyAgICAvKiBAYnJpZWYgTnVtYmVyIG9mIGV4dGVybmFsIHBpbiBwb3J0IG9uIHNwZWNpZmllZCBwb3J0LiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9QSU4zMF9HUElPX1BJTiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGV4dGVybmFsIHBpbiAzMSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4zMSAoMCkKKyAgICAvKiBAYnJpZWYgSW5kZXggb2YgcG9ydCBvZiBleHRlcm5hbCBwaW4uICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjMxX0dQSU9fSURYICgwKQorICAgIC8qIEBicmllZiBOdW1iZXIgb2YgZXh0ZXJuYWwgcGluIHBvcnQgb24gc3BlY2lmaWVkIHBvcnQuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1BJTjMxX0dQSU9fUElOICgwKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDAgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFMCAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSAxIGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTEgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgMiBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUyICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDMgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFMyAoMSkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSA0IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTQgKDEpCisgICAgLyogQGJyaWVmIEhhcyBpbnRlcm5hbCBtb2R1bGUgNSBjb25uZWN0ZWQgdG8gTExXVSBkZXZpY2UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEU1ICgxKQorICAgIC8qIEBicmllZiBIYXMgaW50ZXJuYWwgbW9kdWxlIDYgY29ubmVjdGVkIHRvIExMV1UgZGV2aWNlLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFNiAoMCkKKyAgICAvKiBAYnJpZWYgSGFzIGludGVybmFsIG1vZHVsZSA3IGNvbm5lY3RlZCB0byBMTFdVIGRldmljZS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRTcgKDEpCisgICAgLyogQGJyaWVmIEhhcyBWZXJzaW9uIElEIFJlZ2lzdGVyIChMTFdVX1ZFUklEKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1ZFUklEICgwKQorICAgIC8qIEBicmllZiBIYXMgUGFyYW1ldGVyIFJlZ2lzdGVyIChMTFdVX1BBUkFNKS4gKi8KKyAgICAjZGVmaW5lIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BBUkFNICgwKQorICAgIC8qIEBicmllZiBXaWR0aCBvZiByZWdpc3RlcnMgb2YgdGhlIExMV1UuICovCisgICAgI2RlZmluZSBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCAoOCkKKyAgICAvKiBAYnJpZWYgSGFzIERNQSBFbmFibGUgcmVnaXN0ZXIgKExMV1VfREUpLiAqLworICAgICNkZWZpbmUgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRE1BX0VOQUJMRV9SRUcgKDApCisjZW5kaWYgLyogZGVmaW5lZChDUFVfTUtXNDFaMjU2VkhUNCkgfHwgZGVmaW5lZChDUFVfTUtXNDFaNTEyVkhUNCkgKi8KKworLyogTFBUTVIgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgc2hhcmVkIGludGVycnVwdCBoYW5kbGVyIHdpdGggYW5vdGhlciBMUFRNUiBtb2R1bGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVE1SX0hBU19TSEFSRURfSVJRX0hBTkRMRVIgKDApCisvKiBAYnJpZWYgV2hldGhlciBMUFRNUiBjb3VudGVyIGlzIDMyIGJpdHMgd2lkdGguICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVE1SX0NOUl9XSURUSF9JU18zMkIgKDApCisvKiBAYnJpZWYgSGFzIHRpbWVyIERNQSByZXF1ZXN0IGVuYWJsZSAocmVnaXN0ZXIgYml0IENTUltURFJFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVE1SX0hBU19DU1JfVERSRSAoMCkKKworLyogTFBVQVJUIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgTFBVQVJUMCBhbmQgTFBVQVJUMSBoYXMgc2hhcmVkIGludGVycnVwdCB2ZWN0b3IuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0hBUkVEX0lSUTBfSVJRMSAoMCkKKy8qIEBicmllZiBIYXMgcmVjZWl2ZSBGSUZPIG92ZXJmbG93IGRldGVjdGlvbiAoYml0IGZpZWxkIENGSUZPW1JYT0ZFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfSVJRX0VYVEVOREVEX0ZVTkNUSU9OUyAoMCkKKy8qIEBicmllZiBIYXMgbG93IHBvd2VyIGZlYXR1cmVzIChjYW4gYmUgZW5hYmxlZCBpbiB3YWl0IG1vZGUgdmlhIHJlZ2lzdGVyIGJpdCBDMVtET1pFRU5dIG9yIENUUkxbRE9aRUVOXSBpZiB0aGUgcmVnaXN0ZXJzIGFyZSAzMi1iaXQgd2lkZSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTE9XX1BPV0VSX1VBUlRfU1VQUE9SVCAoMSkKKy8qIEBicmllZiBIYXMgZXh0ZW5kZWQgZGF0YSByZWdpc3RlciBFRCAob3IgZXh0cmEgZmxhZ3MgaW4gdGhlIERBVEEgcmVnaXN0ZXIgaWYgdGhlIHJlZ2lzdGVycyBhcmUgMzItYml0IHdpZGUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0VYVEVOREVEX0RBVEFfUkVHSVNURVJfRkxBR1MgKDEpCisvKiBAYnJpZWYgQ2FwYWNpdHkgKG51bWJlciBvZiBlbnRyaWVzKSBvZiB0aGUgdHJhbnNtaXQvcmVjZWl2ZSBGSUZPIChvciB6ZXJvIGlmIG5vIEZJRk8gaXMgYXZhaWxhYmxlKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPICgwKQorLyogQGJyaWVmIEhhcyAzMi1iaXQgcmVnaXN0ZXIgTU9ESVIgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19NT0RJUiAoMSkKKy8qIEBicmllZiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKFJUUywgQ1RTKSBpcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTU9ERU1fU1VQUE9SVCAoMSkKKy8qIEBicmllZiBJbmZyYXJlZCAobW9kdWxhdGlvbikgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0lSX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgMiBiaXRzIGxvbmcgc3RvcCBiaXQgaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NUT1BfQklUX0NPTkZJR19TVVBQT1JUICgxKQorLyogQGJyaWVmIElmIDEwLWJpdCBtb2RlIGlzIHN1cHBvcnRlZC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU18xMEJJVF9EQVRBX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgSWYgNy1iaXQgbW9kZSBpcyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQgKDApCisvKiBAYnJpZWYgQmF1ZCByYXRlIGZpbmUgYWRqdXN0bWVudCBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQkFVRF9SQVRFX0ZJTkVfQURKVVNUX1NVUFBPUlQgKDApCisvKiBAYnJpZWYgQmF1ZCByYXRlIG92ZXJzYW1wbGluZyBpcyBhdmFpbGFibGUgKGhhcyBiaXQgZmllbGRzIEM0W09TUl0sIEM1W0JPVEhFREdFXSwgQzVbUkVTWU5DRElTXSBvciBCQVVEW09TUl0sIEJBVURbQk9USEVER0VdLCBCQVVEW1JFU1lOQ0RJU10gaWYgdGhlIHJlZ2lzdGVycyBhcmUgMzItYml0IHdpZGUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0JBVURfUkFURV9PVkVSX1NBTVBMSU5HX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgQmF1ZCByYXRlIG92ZXJzYW1wbGluZyBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfUlhfUkVTWU5DX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgQmF1ZCByYXRlIG92ZXJzYW1wbGluZyBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQk9USF9FREdFX1NBTVBMSU5HX1NVUFBPUlQgKDEpCisvKiBAYnJpZWYgUGVyaXBoZXJhbCB0eXBlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSVNfU0NJICgxKQorLyogQGJyaWVmIENhcGFjaXR5IChudW1iZXIgb2YgZW50cmllcykgb2YgdGhlIHRyYW5zbWl0L3JlY2VpdmUgRklGTyAob3IgemVybyBpZiBubyBGSUZPIGlzIGF2YWlsYWJsZSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9GSUZPX1NJWkVuKHgpICgwKQorLyogQGJyaWVmIE1heGltYWwgZGF0YSB3aWR0aCB3aXRob3V0IHBhcml0eSBiaXQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9NQVhfREFUQV9XSURUSF9XSVRIX05PX1BBUklUWSAoMTApCisvKiBAYnJpZWYgTWF4aW1hbCBkYXRhIHdpZHRoIHdpdGggcGFyaXR5IGJpdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX01BWF9EQVRBX1dJRFRIX1dJVEhfUEFSSVRZICg5KQorLyogQGJyaWVmIFN1cHBvcnRzIHR3byBtYXRjaCBhZGRyZXNzZXMgdG8gZmlsdGVyIGluY29taW5nIGZyYW1lcy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19BRERSRVNTX01BVENISU5HICgxKQorLyogQGJyaWVmIEhhcyB0cmFuc21pdHRlci9yZWNlaXZlciBETUEgZW5hYmxlIGJpdHMgQzVbVERNQUVdL0M1W1JETUFFXSAob3IgQkFVRFtURE1BRV0vQkFVRFtSRE1BRV0gaWYgdGhlIHJlZ2lzdGVycyBhcmUgMzItYml0IHdpZGUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0RNQV9FTkFCTEUgKDEpCisvKiBAYnJpZWYgSGFzIHRyYW5zbWl0dGVyL3JlY2VpdmVyIERNQSBzZWxlY3QgYml0cyBDNFtURE1BU10vQzRbUkRNQVNdLCByZXNwLiBDNVtURE1BU10vQzVbUkRNQVNdIGlmIElTX1NDSSA9IDAuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRE1BX1NFTEVDVCAoMCkKKy8qIEBicmllZiBEYXRhIGNoYXJhY3RlciBiaXQgb3JkZXIgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZCAoYml0IGZpZWxkIFMyW01TQkZdIG9yIFNUQVRbTVNCRl0gaWYgdGhlIHJlZ2lzdGVycyBhcmUgMzItYml0IHdpZGUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0JJVF9PUkRFUl9TRUxFQ1QgKDEpCisvKiBAYnJpZWYgSGFzIHNtYXJ0IGNhcmQgKElTTzc4MTYgcHJvdG9jb2wpIHN1cHBvcnQgYW5kIG5vIGltcHJvdmVkIHNtYXJ0IGNhcmQgc3VwcG9ydC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TTUFSVF9DQVJEX1NVUFBPUlQgKDApCisvKiBAYnJpZWYgSGFzIGltcHJvdmVkIHNtYXJ0IGNhcmQgKElTTzc4MTYgcHJvdG9jb2wpIHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfSU1QUk9WRURfU01BUlRfQ0FSRF9TVVBQT1JUICgwKQorLyogQGJyaWVmIEhhcyBsb2NhbCBvcGVyYXRpb24gbmV0d29yayAoQ0VBNzA5LjEtQiBwcm90b2NvbCkgc3VwcG9ydC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MT0NBTF9PUEVSQVRJT05fTkVUV09SS19TVVBQT1JUICgwKQorLyogQGJyaWVmIEhhcyAzMi1iaXQgcmVnaXN0ZXJzIChCQVVELCBTVEFULCBDVFJMLCBEQVRBLCBNQVRDSCwgTU9ESVIpIGluc3RlYWQgb2YgOC1iaXQgKEJESCwgQkRMLCBDMSwgUzEsIEQsIGV0Yy4pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzMyQklUX1JFR0lTVEVSUyAoMSkKKy8qIEBicmllZiBMaW4gYnJlYWsgZGV0ZWN0IGF2YWlsYWJsZSAoaGFzIGJpdCBCQVVEW0xCS0RJRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QgKDEpCisvKiBAYnJpZWYgVUFSVCBzdG9wcyBpbiBXYWl0IG1vZGUgYXZhaWxhYmxlIChoYXMgYml0IEMxW1VBUlRTV0FJXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfV0FJVF9NT0RFX09QRVJBVElPTiAoMCkKKy8qIEBicmllZiBIYXMgc2VwYXJhdGUgRE1BIFJYIGFuZCBUWCByZXF1ZXN0cy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbih4KSAoMSkKKy8qIEBicmllZiBIYXMgc2VwYXJhdGUgUlggYW5kIFRYIGludGVycnVwdHMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRICgwKQorLyogQGJyaWVmIEhhcyBMUEFVUlRfUEFSQU0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfUEFSQU0gKDApCisvKiBAYnJpZWYgSGFzIExQVUFSVF9WRVJJRC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19WRVJJRCAoMCkKKy8qIEBicmllZiBIYXMgTFBVQVJUX0dMT0JBTC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19HTE9CQUwgKDApCisvKiBAYnJpZWYgSGFzIExQVUFSVF9QSU5DRkcuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfUElOQ0ZHICgwKQorCisvKiBMVEMgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBMVEMgbW9kdWxlIHN1cHBvcnRzIERFUyBhbGdvcml0aG0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTICgwKQorLyogQGJyaWVmIExUQyBtb2R1bGUgc3VwcG9ydHMgUEtIQSBhbGdvcml0aG0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAoMCkKKy8qIEBicmllZiBMVEMgbW9kdWxlIHN1cHBvcnRzIFNIQSBhbGdvcml0aG0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICgwKQorLyogQGJyaWVmIExUQyBtb2R1bGUgc3VwcG9ydHMgQUVTIEdDTSBtb2RlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSAoMCkKKy8qIEBicmllZiBMVEMgbW9kdWxlIHN1cHBvcnRzIERQQU1TIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFRDX0hBU19EUEFNUyAoMCkKKy8qIEBicmllZiBMVEMgbW9kdWxlIHN1cHBvcnRzIEFFUyB3aXRoIDI0IGJ5dGVzIGtleS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTFRDX0hBU19BRVMxOTIgKDApCisvKiBAYnJpZWYgTFRDIG1vZHVsZSBzdXBwb3J0cyBBRVMgd2l0aCAzMiBieXRlcyBrZXkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0xUQ19IQVNfQUVTMjU2ICgwKQorCisvKiBNQ0cgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBQUkRJViBiYXNlIHZhbHVlIChkaXZpZGVyIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBbUFJESVZdIHplcm8gdmFsdWUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfUExMX1BSRElWX0JBU0UgKDApCisvKiBAYnJpZWYgTWF4aW11bSBQTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIGRpdmlkZXIgdmFsdWUgKG1heC4gdmFsdWUgb2YgcmVnaXN0ZXIgYml0IGZpZWxkIEM1W1BSVkRJVl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfUExMX1BSRElWX01BWCAoMCkKKy8qIEBicmllZiBWQ08gZGl2aWRlciBiYXNlIHZhbHVlIChtdWx0aXBseSBmYWN0b3Igb2YgcmVnaXN0ZXIgYml0IGZpZWxkIEM2W1ZESVZdIHplcm8gdmFsdWUpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfUExMX1ZESVZfQkFTRSAoMCkKKy8qIEBicmllZiBQTEwgcmVmZXJlbmNlIGNsb2NrIGxvdyByYW5nZS4gT1NDQ0xLL1BMTF9SLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfUExMX1JFRl9NSU4gKDApCisvKiBAYnJpZWYgUExMIHJlZmVyZW5jZSBjbG9jayBoaWdoIHJhbmdlLiBPU0NDTEsvUExMX1IuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19QTExfUkVGX01BWCAoMCkKKy8qIEBicmllZiBUaGUgUExMIGNsb2NrIGlzIGRpdmlkZWQgYnkgMiBiZWZvcmUgVkNPIGRpdmlkZXIuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX0lOVEVSTkFMX0RJViAoMCkKKy8qIEBicmllZiBGUkRJViBzdXBwb3J0cyAxMjgwLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfRlJESVZfU1VQUE9SVF8xMjgwICgxKQorLyogQGJyaWVmIEZSRElWIHN1cHBvcnRzIDE1MzYuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19GUkRJVl9TVVBQT1JUXzE1MzYgKDEpCisvKiBAYnJpZWYgTUNHRkZDTEsgZGl2aWRlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0ZGQ0xLX0RJViAoMSkKKy8qIEBicmllZiBJcyBQTEwgY2xvY2sgZGl2aWRlZCBieSAyIGJlZm9yZSBNQ0cgUExML0ZMTCBjbG9jayBzZWxlY3Rpb24gaW4gdGhlIFNJTSBtb2R1bGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX0VYVFJBX0RJViAoMCkKKy8qIEBicmllZiBIYXMgMzJrSHogUlRDIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayAocmVnaXN0ZXIgYml0cyBDOFtMT0NTMV0sIEM4W0NNRTFdLCBDOFtMT0NSRTFdIGFuZCBSVEMgbW9kdWxlIGFyZSBwcmVzZW50KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19SVENfMzJLICgxKQorLyogQGJyaWVmIEhhcyBQTEwxIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayAocmVnaXN0ZXJzIEMxMCwgQzExLCBDMTIsIFMyKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19QTEwxICgwKQorLyogQGJyaWVmIEhhcyA0OE1IeiBpbnRlcm5hbCBvc2NpbGxhdG9yLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0lSQ180OE0gKDApCisvKiBAYnJpZWYgSGFzIE9TQzEgZXh0ZXJuYWwgb3NjaWxsYXRvciAocmVnaXN0ZXJzIEMxMCwgQzExLCBDMTIsIFMyKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19PU0MxICgwKQorLyogQGJyaWVmIEhhcyBmYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBmaW5lIHRyaW0gKHJlZ2lzdGVyIGJpdCBDMltGQ0ZUUklNXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfRkNGVFJJTSAoMSkKKy8qIEBicmllZiBIYXMgUExMIGxvc3Mgb2YgbG9jayByZXNldCAocmVnaXN0ZXIgYml0IEM4W0xPTFJFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfTE9MUkUgKDApCisvKiBAYnJpZWYgSGFzIE1DRyBPU0MgY2xvY2sgc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgQzdbT1NDU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19VU0VfT1NDU0VMICgxKQorLyogQGJyaWVmIEhhcyBQTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0cyBDNVtQTExSRUZTRUwwXSBhbmQgQzExW1BMTFJFRlNFTDFdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX1VTRV9QTExSRUZTRUwgKDApCisvKiBAYnJpZWYgVEJEICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19VU0VfU1lTVEVNX0NMT0NLICgwKQorLyogQGJyaWVmIEhhcyBwaGFzZS1sb2NrZWQgbG9vcCAoUExMKSAocmVnaXN0ZXIgQzUgYW5kIGJpdHMgQzZbVkRJVl0sIEM2W1BMTFNdLCBDNltMT0xJRTBdLCBTW1BMTFNUXSwgU1tMT0NLMF0sIFNbTE9MUzBdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19QTEwgKDApCisvKiBAYnJpZWYgSGFzIHBoYXNlLWxvY2tlZCBsb29wIChQTEwpIFBSRElWIChyZWdpc3RlciBDNVtQUkRJVl0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX1BSRElWICgwKQorLyogQGJyaWVmIEhhcyBwaGFzZS1sb2NrZWQgbG9vcCAoUExMKSBWRElWIChyZWdpc3RlciBDNltWRElWXS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19QTExfVkRJViAoMCkKKy8qIEBicmllZiBQTEwvT1NDIHJlbGF0ZWQgcmVnaXN0ZXIgYml0IGZpZWxkcyBoYXZlIFBMTC9PU0MgaW5kZXggaW4gdGhlaXIgbmFtZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19QTExfT1NDX0lOREVYICgwKQorLyogQGJyaWVmIEhhcyBmcmVxdWVuY3ktbG9ja2VkIGxvb3AgKEZMTCkgKHJlZ2lzdGVyIEFUQ1ZILCBBVENWTCBhbmQgYml0cyBDMVtJUkVGU10sIEMxW0ZSRElWXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfRkxMICgxKQorLyogQGJyaWVmIEhhcyBQTEwgZXh0ZXJuYWwgdG8gTUNHIChDOVtQTExfQ01FXSwgQzlbUExMX0xPQ1JFXSwgQzlbRVhUX1BMTF9MT0NTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfRVhURVJOQUxfUExMICgwKQorLyogQGJyaWVmIEhhcyBjcnlzdGFsIG9zY2lsbGF0b3Igb3IgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGxvdyBwb3dlciBjb250cm9scyAocmVnaXN0ZXIgYml0cyBDMltIR09dLCBDMltSQU5HRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfSEFTX0VYVF9SRUZfTE9XX1BPV0VSX0NPTlRST0wgKDEpCisvKiBAYnJpZWYgSGFzIFBMTC9GTEwgc2VsZWN0aW9uIGFzIE1DRyBvdXRwdXQgKHJlZ2lzdGVyIGJpdCBDNltQTExTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX0ZMTF9TRUxFQ1RJT04gKDApCisvKiBAYnJpZWYgSGFzIFBMTCBvdXRwdXQgc2VsZWN0aW9uIChQTEwwL1BMTDEsIFBMTC9leHRlcm5hbCBQTEwpIChyZWdpc3RlciBiaXQgQzExW1BMTENTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX09VVFBVVF9TRUxFQ1RJT04gKDApCisvKiBAYnJpZWYgSGFzIGF1dG9tYXRpYyB0cmltIG1hY2hpbmUgKHJlZ2lzdGVycyBBVENWSCwgQVRDVkwgYW5kIGJpdHMgU0NbQVRNRl0sIFNDW0FUTVNdLCBTQ1tBVE1FXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfQVVUT19UUklNX01BQ0hJTkUgKDEpCisvKiBAYnJpZWYgSGFzIGV4dGVybmFsIGNsb2NrIG1vbml0b3IgKHJlZ2lzdGVyIGJpdCBDNltDTUVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfTUNHX0hBU19FWFRFUk5BTF9DTE9DS19NT05JVE9SICgxKQorLyogQGJyaWVmIEhhcyBsb3cgZnJlcXVlbmN5IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayAoSVJDKSAocmVnaXN0ZXJzIExUUklNUk5HLCBMRlJJTSwgTFNUUklNIGFuZCBiaXQgTUNbTElSQ19ESVYyXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfTE9XX0ZSRVFfSVJDICgwKQorLyogQGJyaWVmIEhhcyBoaWdoIGZyZXF1ZW5jeSBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKElSQykgKHJlZ2lzdGVycyBIQ1RSSU0sIEhUVFJJTSwgSEZUUklNIGFuZCBiaXQgTUNbSElSQ0VOXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfSElHSF9GUkVRX0lSQyAoMCkKKy8qIEBicmllZiBIYXMgUEVJIG1vZGUgb3IgUEJJIG1vZGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX01DR19IQVNfUExMX0lOVEVSTkFMX01PREUgKDApCisvKiBAYnJpZWYgUmVzZXQgY2xvY2sgbW9kZSBpcyBCTFBJLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9NQ0dfUkVTRVRfSVNfQkxQSSAoMCkKKworLyogaW50ZXJydXB0IG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgTG93ZXN0IGludGVycnVwdCByZXF1ZXN0IG51bWJlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSU5URVJSVVBUX0lSUV9NSU4gKC0xNCkKKy8qIEBicmllZiBIaWdoZXN0IGludGVycnVwdCByZXF1ZXN0IG51bWJlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfSU5URVJSVVBUX0lSUV9NQVggKDMxKQorCisvKiBQSVQgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBOdW1iZXIgb2YgY2hhbm5lbHMgKHJlbGF0ZWQgdG8gbnVtYmVyIG9mIHJlZ2lzdGVycyBMRFZBTG4sIENWQUxuLCBUQ1RSTG4sIFRGTEduKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUElUX1RJTUVSX0NPVU5UICgyKQorLyogQGJyaWVmIEhhcyBsaWZldGltZSB0aW1lciAocmVsYXRlZCB0byBleGlzdGVuY2Ugb2YgcmVnaXN0ZXJzIExUTVI2NEwgYW5kIExUTVI2NEgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QSVRfSEFTX0xJRkVUSU1FX1RJTUVSICgxKQorLyogQGJyaWVmIEhhcyBjaGFpbiBtb2RlIChyZWxhdGVkIHRvIGV4aXN0ZW5jZSBvZiByZWdpc3RlciBiaXQgZmllbGQgVENUUkxuW0NITl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QSVRfSEFTX0NIQUlOX01PREUgKDEpCisvKiBAYnJpZWYgSGFzIHNoYXJlZCBpbnRlcnJ1cHQgaGFuZGxlciAoaGFzIG5vdCBpbmRpdmlkdWFsIGludGVycnVwdCBoYW5kbGVyIGZvciBlYWNoIGNoYW5uZWwpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QSVRfSEFTX1NIQVJFRF9JUlFfSEFORExFUiAoMSkKKworLyogUE1DIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIEJhbmRnYXAgRW5hYmxlIEluIFZMUHggT3BlcmF0aW9uIHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTiAoMCkKKy8qIEBicmllZiBIYXMgQmFuZGdhcCBCdWZmZXIgRW5hYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUgKDEpCisvKiBAYnJpZWYgSGFzIEJhbmRnYXAgQnVmZmVyIERyaXZlIFNlbGVjdC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUyAoMCkKKy8qIEBicmllZiBIYXMgTG93LVZvbHRhZ2UgRGV0ZWN0IFZvbHRhZ2UgU2VsZWN0IHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZEViAoMSkKKy8qIEBicmllZiBIYXMgTG93LVZvbHRhZ2UgV2FybmluZyBWb2x0YWdlIFNlbGVjdCBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QTUNfSEFTX0xWV1YgKDEpCisvKiBAYnJpZWYgSGFzIExQTy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19MUE8gKDApCisvKiBAYnJpZWYgSGFzIFZMUHggb3B0aW9uIFBNQ19SRUdTQ1tWTFBPXS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19WTFBPICgxKQorLyogQGJyaWVmIEhhcyBhY2tub3dsZWRnZSBpc29sYXRpb24gc3VwcG9ydC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19BQ0tJU08gKDEpCisvKiBAYnJpZWYgSGFzIFJlZ3VsYXRvciBJbiBGdWxsIFBlcmZvcm1hbmNlIE1vZGUgU3RhdHVzIEJpdCBQTUNfUkVHU0NbUkVHRlBNXS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19SRUdGUE0gKDApCisvKiBAYnJpZWYgSGFzIFJlZ3VsYXRvciBJbiBSdW4gUmVndWxhdGlvbiBTdGF0dXMgQml0IFBNQ19SRUdTQ1tSRUdPTlNdLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QTUNfSEFTX1JFR09OUyAoMSkKKy8qIEBicmllZiBIYXMgUE1DX0hWRFNDMS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEgKDApCisvKiBAYnJpZWYgSGFzIFBNQ19QQVJBTS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSAoMCkKKy8qIEBicmllZiBIYXMgUE1DX1ZFUklELiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QTUNfSEFTX1ZFUklEICgwKQorCisvKiBQT1JUIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIGNvbnRyb2wgbG9jayAocmVnaXN0ZXIgYml0IFBDUltMS10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19QSU5fQ09OVFJPTF9MT0NLICgwKQorLyogQGJyaWVmIEhhcyBvcGVuIGRyYWluIGNvbnRyb2wgKHJlZ2lzdGVyIGJpdCBQQ1JbT0RFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX09QRU5fRFJBSU4gKDApCisvKiBAYnJpZWYgSGFzIGRpZ2l0YWwgZmlsdGVyIChyZWdpc3RlcnMgREZFUiwgREZDUiBhbmQgREZXUikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RJR0lUQUxfRklMVEVSICgwKQorLyogQGJyaWVmIEhhcyBETUEgcmVxdWVzdCAocmVnaXN0ZXIgYml0IGZpZWxkIFBDUltJUlFDXSB2YWx1ZXMpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19ETUFfUkVRVUVTVCAoMSkKKy8qIEBicmllZiBIYXMgcHVsbCByZXNpc3RvciBzZWxlY3Rpb24gYXZhaWxhYmxlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19QVUxMX1NFTEVDVElPTiAoMSkKKy8qIEBicmllZiBIYXMgcHVsbCByZXNpc3RvciBlbmFibGUgKHJlZ2lzdGVyIGJpdCBQQ1JbUEVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUgKDEpCisvKiBAYnJpZWYgSGFzIHNsZXcgcmF0ZSBjb250cm9sIChyZWdpc3RlciBiaXQgUENSW1NSRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19TTEVXX1JBVEUgKDEpCisvKiBAYnJpZWYgSGFzIHBhc3NpdmUgZmlsdGVyIChyZWdpc3RlciBiaXQgZmllbGQgUENSW1BGRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19QQVNTSVZFX0ZJTFRFUiAoMSkKKy8qIEBicmllZiBIYXMgZHJpdmUgc3RyZW5ndGggY29udHJvbCAocmVnaXN0ZXIgYml0IFBDUltEU0VdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRFJJVkVfU1RSRU5HVEggKDEpCisvKiBAYnJpZWYgSGFzIHNlcGFyYXRlIGRyaXZlIHN0cmVuZ3RoIHJlZ2lzdGVyIChIRFJWRSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RSSVZFX1NUUkVOR1RIX1JFR0lTVEVSICgwKQorLyogQGJyaWVmIEhhcyBnbGl0Y2ggZmlsdGVyIChyZWdpc3RlciBJT0ZMVCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0dMSVRDSF9GSUxURVIgKDApCisvKiBAYnJpZWYgRGVmaW5lcyB3aWR0aCBvZiBQQ1JbTVVYXSBmaWVsZC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRIICgzKQorLyogQGJyaWVmIEhhcyBkZWRpY2F0ZWQgaW50ZXJydXB0IHZlY3Rvci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfSU5URVJSVVBUX1ZFQ1RPUiAoMSkKKy8qIEBicmllZiBIYXMgbXVsdGlwbGUgcGluIElSUSBjb25maWd1cmF0aW9uIChyZWdpc3RlciBHSUNMUiBhbmQgR0lDSFIpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9QT1JUX0hBU19NVUxUSVBMRV9JUlFfQ09ORklHICgwKQorLyogQGJyaWVmIERlZmluZXMgd2hldGhlciBQQ1JbSVJRQ10gYml0LWZpZWxkIGhhcyBmbGFnIHN0YXRlcy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfSVJRQ19GTEFHICgwKQorLyogQGJyaWVmIERlZmluZXMgd2hldGhlciBQQ1JbSVJRQ10gYml0LWZpZWxkIGhhcyB0cmlnZ2VyIHN0YXRlcy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfSVJRQ19UUklHR0VSICgwKQorCisvKiBSQURJTyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIFppZ2JlZSBhdmFpbGFiaWxpdHkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JBRElPX0hBU19aSUdCRUUgKDEpCisvKiBAYnJpZWYgQmx1ZXRvb3RoIGF2YWlsYWJpbGl0eS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkFESU9fSEFTX0JMRSAoMSkKKy8qIEBicmllZiBBTlQgYXZhaWxhYmlsaXR5ICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JBRElPX0hBU19BTlQgKDEpCisvKiBAYnJpZWYgR2VuZXJpYyBGU0sgbW9kdWxlIGF2YWlsYWJpbGl0eSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQURJT19IQVNfR0VORlNLICgxKQorLyogQGJyaWVmIE1ham9yIHZlcnNpb24gb2YgdGhlIHJhZGlvIHN1Ym1vZHVsZSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQURJT19WRVJTSU9OX01BSk9SICgyKQorLyogQGJyaWVmIE1pbm9yIHZlcnNpb24gb2YgdGhlIHJhZGlvIHN1Ym1vZHVsZSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQURJT19WRVJTSU9OX01JTk9SICgwKQorCisvKiBSQ00gbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgTG9zcy1vZi1Mb2NrIFJlc2V0IHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9MICgwKQorLyogQGJyaWVmIEhhcyBMb3NzLW9mLUNsb2NrIFJlc2V0IHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9DICgxKQorLyogQGJyaWVmIEhhcyBKVEFHIGdlbmVyYXRlZCBSZXNldCBzdXBwb3J0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX0pUQUcgKDApCisvKiBAYnJpZWYgSGFzIEV6UG9ydCBnZW5lcmF0ZWQgUmVzZXQgc3VwcG9ydC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBPUlQgKDApCisvKiBAYnJpZWYgSGFzIGJpdC1maWVsZCBpbmRpY2F0aW5nIEVaUF9NU19CIHBpbiBzdGF0ZSBkdXJpbmcgbGFzdCByZXNldC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBNUyAoMCkKKy8qIEBicmllZiBIYXMgYm9vdCBST00gY29uZmlndXJhdGlvbiwgTVJbQk9PVFJPTV0sIEZNW0ZPUkNFUk9NXSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00gKDApCisvKiBAYnJpZWYgSGFzIHN0aWNreSBzeXN0ZW0gcmVzZXQgc3RhdHVzIHJlZ2lzdGVyIFJDTV9TU1JTMCBhbmQgUkNNX1NTUlMxLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fSEFTX1NTUlMgKDApCisvKiBAYnJpZWYgSGFzIFZlcnNpb24gSUQgUmVnaXN0ZXIgKFJDTV9WRVJJRCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfVkVSSUQgKDApCisvKiBAYnJpZWYgSGFzIFBhcmFtZXRlciBSZWdpc3RlciAoUkNNX1BBUkFNKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19QQVJBTSAoMCkKKy8qIEBicmllZiBIYXMgUmVzZXQgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBSQ01fU1JJRS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19TUklFICgwKQorLyogQGJyaWVmIFdpZHRoIG9mIHJlZ2lzdGVycyBvZiB0aGUgUkNNLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIICg4KQorLyogQGJyaWVmIEhhcyBDb3JlIDEgZ2VuZXJhdGVkIFJlc2V0IHN1cHBvcnQgUkNNX1NSU1tDT1JFMV0gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19DT1JFMSAoMCkKKy8qIEBicmllZiBIYXMgTURNLUFQIHN5c3RlbSByZXNldCBzdXBwb3J0IFJDTV9TUlMxW01ETV9BUF0gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUkNNX0hBU19NRE1fQVAgKDEpCisvKiBAYnJpZWYgSGFzIHdha2V1cCByZXNldCBmZWF0dXJlLiBSZWdpc3RlciBiaXQgU1JTW1dBS0VVUF0uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JDTV9IQVNfV0FLRVVQICgxKQorCisvKiBSU0lNIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBObyBmZWF0dXJlIGRlZmluaXRpb25zICovCisKKy8qIFJUQyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyB3YWtldXAgcGluLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX1dBS0VVUF9QSU4gKDEpCisvKiBAYnJpZWYgSGFzIHdha2V1cCBwaW4gc2VsZWN0aW9uIChiaXQgZmllbGQgQ1JbV1BTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfV0FLRVVQX1BJTl9TRUxFQ1RJT04gKDEpCisvKiBAYnJpZWYgSGFzIGxvdyBwb3dlciBmZWF0dXJlcyAocmVnaXN0ZXJzIE1FUiwgTUNMUiBhbmQgTUNIUikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDICgwKQorLyogQGJyaWVmIEhhcyByZWFkL3dyaXRlIGFjY2VzcyBjb250cm9sIChyZWdpc3RlcnMgV0FSIGFuZCBSQVIpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9SVENfSEFTX0FDQ0VTU19DT05UUk9MICgwKQorLyogQGJyaWVmIEhhcyBzZWN1cml0eSBmZWF0dXJlcyAocmVnaXN0ZXJzIFRUU1IsIE1FUiwgTUNMUiBhbmQgTUNIUikuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfU0VDVVJJVFkgKDApCisvKiBAYnJpZWYgSGFzIFJUQ19DTEtJTiBhdmFpbGFibGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfUlRDX0NMS0lOICgwKQorLyogQGJyaWVmIEhhcyBwcmVzY2FsZXIgYWRqdXN0IGZvciBMUE8uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfTFBPX0FESlVTVCAoMCkKKy8qIEBicmllZiBIYXMgQ2xvY2sgUGluIEVuYWJsZSBmaWVsZC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfUlRDX0hBU19DUEUgKDApCisvKiBAYnJpZWYgSGFzIFRpbWVyIFNlY29uZHMgSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gZmllbGQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfVFNJQyAoMCkKKy8qIEBicmllZiBIYXMgT1NDIGNhcGFjaXRvciBzZXR0aW5nIFJUQ19DUltTQzJQIH4gU0MxNlBdICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1JUQ19IQVNfT1NDX1NDWFAgKDEpCisKKy8qIFNJTSBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIEhhcyBVU0IgRlMgZGl2aWRlci4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX1VTQkZTX1VTRV9TUEVDSUFMX0RJVklERVIgKDApCisvKiBAYnJpZWYgSXMgUExMIGNsb2NrIGRpdmlkZWQgYnkgMiBiZWZvcmUgTUNHIFBMTC9GTEwgY2xvY2sgc2VsZWN0aW9uLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fUExMQ0xLX1VTRV9TUEVDSUFMX0RJVklERVIgKDApCisvKiBAYnJpZWYgSGFzIFJBTSBzaXplIHNwZWNpZmljYXRpb24gKHJlZ2lzdGVyIGJpdCBmaWVsZCBTT1BUMVtSQU1TSVpFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1JBTVNJWkUgKDApCisvKiBAYnJpZWYgSGFzIDMyayBvc2NpbGxhdG9yIGNsb2NrIG91dHB1dCAocmVnaXN0ZXIgYml0IFNPUFQxW09TQzMyS09VVF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19PU0MzMktfT1VUICgxKQorLyogQGJyaWVmIEhhcyAzMmsgb3NjaWxsYXRvciBjbG9jayBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBmaWVsZCBTT1BUMVtPU0MzMktTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfT1NDMzJLX1NFTEVDVElPTiAoMSkKKy8qIEBicmllZiAzMmsgb3NjaWxsYXRvciBjbG9jayBzZWxlY3Rpb24gd2lkdGggKHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBTT1BUMVtPU0MzMktTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9PU0MzMktfU0VMRUNUSU9OX1dJRFRIICgyKQorLyogQGJyaWVmIEhhcyBSVEMgY2xvY2sgb3V0cHV0IHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW1JUQ0NMS09VVFNFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19SVENfQ0xPQ0tfT1VUX1NFTEVDVElPTiAoMCkKKy8qIEBicmllZiBIYXMgVVNCIHZvbHRhZ2UgcmVndWxhdG9yIChyZWdpc3RlciBiaXRzIFNPUFQxW1VTQlZTVEJZXSwgU09QVDFbVVNCU1NUQlldLCBTT1BUMVtVU0JSRUdFTl0sIFNPUFQxQ0ZHW1VSV0VdLCBTT1BUMUNGR1tVVlNXRV0sIFNPUFQxQ0ZHW1VTU1dFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQl9WT0xUQUdFX1JFR1VMQVRPUiAoMCkKKy8qIEBicmllZiBVU0IgaGFzIGludGVncmF0ZWQgUEhZIChyZWdpc3RlciBiaXRzIFVTQlBIWUNUTFtVU0JWUkVHU0VMXSwgVVNCUEhZQ1RMW1VTQlZSRUdQRF0sIFVTQlBIWUNUTFtVU0IzVk9VVFRSR10sIFVTQlBIWUNUTFtVU0JESVNJTElNXSwgU09QVDJbVVNCU0xTUkNdLCBTT1BUMltVU0JSRUdFTl0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfUEhZICgwKQorLyogQGJyaWVmIEhhcyBQVEQ3IHBhZCBkcml2ZSBzdHJlbmd0aCBjb250cm9sIChyZWdpc3RlciBiaXQgU09QVDJbUFREN1BBRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19QVEQ3UEFEICgwKQorLyogQGJyaWVmIEhhcyBGbGV4QnVzIHNlY3VyaXR5IGxldmVsIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW0ZCU0xdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRkJTTCAoMCkKKy8qIEBicmllZiBIYXMgbnVtYmVyIG9mIEZsZXhCdXMgaG9sZCBjeWNsZSBiZWZvcmUgRmxleEJ1cyBjYW4gcmVsZWFzZSBidXMgKHJlZ2lzdGVyIGJpdCBTT1BUNltQQ1JdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfUENSICgwKQorLyogQGJyaWVmIEhhcyBudW1iZXIgb2YgTkZDIGhvbGQgY3ljbGUgaW4gY2FzZSBvZiBGbGV4QnVzIHJlcXVlc3QgKHJlZ2lzdGVyIGJpdCBTT1BUNltNQ0NdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTUNDICgwKQorLyogQGJyaWVmIEhhcyBVQVJUIG9wZW4gZHJhaW4gZW5hYmxlIChyZWdpc3RlciBiaXRzIFVBUlRuT0RFLCB3aGVyZSBuIGlzIGEgbnVtYmVyLCBpbiByZWdpc3RlciBTT1BUNSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX09ERSAoMCkKKy8qIEBicmllZiBOdW1iZXIgb2YgTFBVQVJUIG1vZHVsZXMgKG51bWJlciBvZiByZWdpc3RlciBiaXRzIExQVUFSVG4sIHdoZXJlIG4gaXMgYSBudW1iZXIsIGluIHJlZ2lzdGVyIFNDR0M1KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9MUFVBUlRfQ09VTlQgKDEpCisvKiBAYnJpZWYgTnVtYmVyIG9mIFVBUlQgbW9kdWxlcyAobnVtYmVyIG9mIHJlZ2lzdGVyIGJpdHMgVUFSVG4sIHdoZXJlIG4gaXMgYSBudW1iZXIsIGluIHJlZ2lzdGVyIFNDR0M0KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9VQVJUX0NPVU5UICgwKQorLyogQGJyaWVmIEhhcyBVQVJUMCBvcGVuIGRyYWluIGVuYWJsZSAocmVnaXN0ZXIgYml0IFNPUFQ1W1VBUlQwT0RFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VBUlQwX09ERSAoMCkKKy8qIEBicmllZiBIYXMgVUFSVDEgb3BlbiBkcmFpbiBlbmFibGUgKHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMU9ERV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VQVJUMV9PREUgKDApCisvKiBAYnJpZWYgSGFzIFVBUlQyIG9wZW4gZHJhaW4gZW5hYmxlIChyZWdpc3RlciBiaXQgU09QVDVbVUFSVDJPREVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVUFSVDJfT0RFICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlQwIG9wZW4gZHJhaW4gZW5hYmxlIChyZWdpc3RlciBiaXQgU09QVDVbTFBVQVJUME9ERV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19MUFVBUlQwX09ERSAoMSkKKy8qIEBicmllZiBIYXMgTFBVQVJUMSBvcGVuIGRyYWluIGVuYWJsZSAocmVnaXN0ZXIgYml0IFNPUFQ1W0xQVUFSVDFPREVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMV9PREUgKDApCisvKiBAYnJpZWYgSGFzIENNVC9VQVJUIHBhZCBkcml2ZSBzdHJlbmd0aCBjb250cm9sIChyZWdpc3RlciBiaXQgU09QVDJbQ01UVUFSVFBBRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19DTVRVQVJUUEFEICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlQwIHRyYW5zbWl0IGRhdGEgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQ1W0xQVUFSVDBUWFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19MUFVBUlQwX1RYX1NSQyAoMSkKKy8qIEBicmllZiBIYXMgTFBVQVJUMCByZWNlaXZlIGRhdGEgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQ1W0xQVUFSVDBSWFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19MUFVBUlQwX1JYX1NSQyAoMSkKKy8qIEBicmllZiBIYXMgTFBVQVJUMSB0cmFuc21pdCBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtMUFVBUlQxVFhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMV9UWF9TUkMgKDApCisvKiBAYnJpZWYgSGFzIExQVUFSVDEgcmVjZWl2ZSBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtMUFVBUlQxUlhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMV9SWF9TUkMgKDApCisvKiBAYnJpZWYgSGFzIFVBUlQwIHRyYW5zbWl0IGRhdGEgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQ1W1VBUlQwVFhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVUFSVDBfVFhfU1JDICgwKQorLyogQGJyaWVmIFVBUlQwIHRyYW5zbWl0IGRhdGEgc291cmNlIHNlbGVjdGlvbiB3aWR0aCAod2lkdGggb2YgcmVnaXN0ZXIgYml0IFNPUFQ1W1VBUlQwVFhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9VQVJUMF9UWF9TUkNfV0lEVEggKDApCisvKiBAYnJpZWYgSGFzIFVBUlQwIHJlY2VpdmUgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDVbVUFSVDBSWFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VQVJUMF9SWF9TUkMgKDApCisvKiBAYnJpZWYgVUFSVDAgcmVjZWl2ZSBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gd2lkdGggKHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMFJYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfVUFSVDBfUlhfU1JDX1dJRFRIICgwKQorLyogQGJyaWVmIEhhcyBVQVJUMSB0cmFuc21pdCBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMVRYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VBUlQxX1RYX1NSQyAoMCkKKy8qIEBicmllZiBIYXMgVUFSVDEgcmVjZWl2ZSBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNVtVQVJUMVJYU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VBUlQxX1JYX1NSQyAoMCkKKy8qIEBicmllZiBVQVJUMSByZWNlaXZlIGRhdGEgc291cmNlIHNlbGVjdGlvbiB3aWR0aCAod2lkdGggb2YgcmVnaXN0ZXIgYml0IFNPUFQ1W1VBUlQxUlhTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9VQVJUMV9SWF9TUkNfV0lEVEggKDApCisvKiBAYnJpZWYgSGFzIEZUTSBtb2R1bGUocykgY29uZmlndXJhdGlvbi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBGVE0gbW9kdWxlcy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9GVE1fQ09VTlQgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIEZUTSB0cmlnZ2VycyB3aXRoIHNlbGVjdGFibGUgc291cmNlLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0ZUTV9UUklHR0VSX0NPVU5UICgwKQorLyogQGJyaWVmIEhhcyBGVE0wIHRyaWdnZXJzIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdHMgU09QVDRbRlRNMFRSR25TUkNdLCB3aGVyZSBuIGlzIGEgbnVtYmVyKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNMF9UUklHR0VSICgwKQorLyogQGJyaWVmIEhhcyBGVE0zIHRyaWdnZXJzIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdHMgU09QVDRbRlRNM1RSR25TUkNdLCB3aGVyZSBuIGlzIGEgbnVtYmVyKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNM19UUklHR0VSICgwKQorLyogQGJyaWVmIEhhcyBGVE0xIGNoYW5uZWwgMCBpbnB1dCBjYXB0dXJlIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNFtGVE0xQ0gwU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTTFfQ0hBTk5FTFMgKDApCisvKiBAYnJpZWYgSGFzIEZUTTIgY2hhbm5lbCAwIGlucHV0IGNhcHR1cmUgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQ0W0ZUTTJDSDBTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNMl9DSEFOTkVMUyAoMCkKKy8qIEBicmllZiBIYXMgRlRNMyBjaGFubmVsIDAgaW5wdXQgY2FwdHVyZSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDRbRlRNM0NIMFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19GVE0zX0NIQU5ORUxTICgwKQorLyogQGJyaWVmIEhhcyBGVE0yIGNoYW5uZWwgMSBpbnB1dCBjYXB0dXJlIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUNFtGVE0yQ0gxU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0ZUTTJfQ0hBTk5FTDEgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIGNvbmZpZ3VyYWJsZSBGVE0wIGZhdWx0IGRldGVjdGlvbiBpbnB1dCAobnVtYmVyIG9mIHJlZ2lzdGVyIGJpdHMgU09QVDRbRlRNMEZMVG5dLCB3aGVyZSBuIGlzIGEgbnVtYmVyIHN0YXJ0aW5nIGZyb20gemVybykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfRlRNMF9GQVVMVF9DT1VOVCAoMCkKKy8qIEBicmllZiBOdW1iZXIgb2YgY29uZmlndXJhYmxlIEZUTTEgZmF1bHQgZGV0ZWN0aW9uIGlucHV0IChudW1iZXIgb2YgcmVnaXN0ZXIgYml0cyBTT1BUNFtGVE0xRkxUbl0sIHdoZXJlIG4gaXMgYSBudW1iZXIgc3RhcnRpbmcgZnJvbSB6ZXJvKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9GVE0xX0ZBVUxUX0NPVU5UICgwKQorLyogQGJyaWVmIE51bWJlciBvZiBjb25maWd1cmFibGUgRlRNMiBmYXVsdCBkZXRlY3Rpb24gaW5wdXQgKG51bWJlciBvZiByZWdpc3RlciBiaXRzIFNPUFQ0W0ZUTTJGTFRuXSwgd2hlcmUgbiBpcyBhIG51bWJlciBzdGFydGluZyBmcm9tIHplcm8pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0ZUTTJfRkFVTFRfQ09VTlQgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIGNvbmZpZ3VyYWJsZSBGVE0zIGZhdWx0IGRldGVjdGlvbiBpbnB1dCAobnVtYmVyIG9mIHJlZ2lzdGVyIGJpdHMgU09QVDRbRlRNM0ZMVG5dLCB3aGVyZSBuIGlzIGEgbnVtYmVyIHN0YXJ0aW5nIGZyb20gemVybykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfRlRNM19GQVVMVF9DT1VOVCAoMCkKKy8qIEBicmllZiBIYXMgRlRNIGhhcmR3YXJlIHRyaWdnZXIgMCBzb2Z0d2FyZSBzeW5jaHJvbml6YXRpb24gKHJlZ2lzdGVyIGJpdCBTT1BUOFtGVE1uU1lOQ0JJVF0sIHdoZXJlIG4gaXMgYSBtb2R1bGUgaW5zdGFuY2UgaW5kZXgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19GVE1fVFJJR0dFUl9TWU5DICgwKQorLyogQGJyaWVmIEhhcyBGVE0gY2hhbm5lbHMgb3V0cHV0IHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUOFtGVE14T0NIblNSQ10sIHdoZXJlIHggaXMgYSBtb2R1bGUgaW5zdGFuY2UgaW5kZXggYW5kIG4gaXMgYSBjaGFubmVsIGluZGV4KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfRlRNX0NIQU5ORUxTX09VVFBVVF9TUkMgKDApCisvKiBAYnJpZWYgSGFzIFRQTSBtb2R1bGUocykgY29uZmlndXJhdGlvbi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNICgxKQorLyogQGJyaWVmIFRoZSBoaWdoZXN0IFRQTSBtb2R1bGUgaW5kZXguICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfTUFYX1RQTV9JTkRFWCAoMikKKy8qIEBicmllZiBIYXMgVFBNIG1vZHVsZSB3aXRoIGluZGV4IDAuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1RQTTAgKDEpCisvKiBAYnJpZWYgSGFzIFRQTTAgY2xvY2sgc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDRbVFBNMENMS1NFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUE0wX0NMS19TRUwgKDEpCisvKiBAYnJpZWYgSXMgVFBNIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb24gaW4gdGhlIFNPUFQ0IChub3QgU09QVDkpIHJlZ2lzdGVyIChyZWdpc3RlciBiaXRzIFRQTW5DSDBTUkMsIFRQTW5DTEtTRUwsIHdoZXJlIG4gaXMgYSBtb2R1bGUgaW5zdGFuY2UgaW5kZXgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUE1fQ0hBTk5FTFNfQ09ORklHX0lOX1NPUFQ0X1JFRyAoMSkKKy8qIEBicmllZiBIYXMgVFBNMSBjaGFubmVsIDAgaW5wdXQgY2FwdHVyZSBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDRbVFBNMUNIMFNSQ10gb3IgU09QVDlbVFBNMUNIMFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUE0xX0NIMF9TUkNfU0VMRUNUSU9OICgxKQorLyogQGJyaWVmIEhhcyBUUE0xIGNsb2NrIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQ0W1RQTTFDTEtTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNMV9DTEtfU0VMICgxKQorLyogQGJyaWVmIFRQTTEgY2hhbm5lbCAwIGlucHV0IGNhcHR1cmUgc291cmNlIHNlbGVjdGlvbiB3aWR0aCAod2lkdGggb2YgcmVnaXN0ZXIgYml0IGZpZWxkIFNPUFQ0W1RQTTFDSDBTUkNdIG9yIFNPUFQ5W1RQTTFDSDBTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9UUE0xX0NIMF9TUkNfU0VMRUNUSU9OX1dJRFRIICgxKQorLyogQGJyaWVmIEhhcyBUUE0yIGNoYW5uZWwgMCBpbnB1dCBjYXB0dXJlIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBmaWVsZCBTT1BUNFtUUE0yQ0gwU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1RQTTJfQ0gwX1NSQ19TRUxFQ1RJT04gKDEpCisvKiBAYnJpZWYgSGFzIFRQTTIgY2xvY2sgc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDRbVFBNMkNMS1NFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUE0yX0NMS19TRUwgKDEpCisvKiBAYnJpZWYgSGFzIFBMTC9GTEwgY2xvY2sgc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgZmllbGQgU09QVDJbUExMRkxMU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1BMTF9GTExfU0VMRUNUSU9OICgwKQorLyogQGJyaWVmIFBMTC9GTEwgY2xvY2sgc2VsZWN0aW9uIHdpZHRoICh3aWR0aCBvZiByZWdpc3RlciBiaXQgZmllbGQgU09QVDJbUExMRkxMU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfUExMX0ZMTF9TRUxFQ1RJT05fV0lEVEggKDApCisvKiBAYnJpZWYgSGFzIE5GQyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbTkZDU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX05GQ1NSQyAoMCkKKy8qIEBicmllZiBIYXMgZVNESEMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW0VTREhDU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX0VTREhDU1JDICgwKQorLyogQGJyaWVmIEhhcyBTREhDIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltTREhDU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1NESENTUkMgKDApCisvKiBAYnJpZWYgSGFzIExDREMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0cyBTT1BUMltMQ0RDU1JDXSwgU09QVDJbTENEQ19DTEtTRUxdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTENEQ1NSQyAoMCkKKy8qIEBicmllZiBIYXMgRU5FVCB0aW1lc3RhbXAgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW1RJTUVTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVElNRVNSQyAoMCkKKy8qIEBicmllZiBIYXMgRU5FVCBSTUlJIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltSTUlJU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1JNSUlTUkMgKDApCisvKiBAYnJpZWYgSGFzIFVTQiBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbVVNCU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQlNSQyAoMCkKKy8qIEBicmllZiBIYXMgVVNCIEZTIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltVU0JGU1JDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQkZTUkMgKDApCisvKiBAYnJpZWYgSGFzIFVTQiBIUyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbVVNCSFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JIU1JDICgwKQorLyogQGJyaWVmIEhhcyBMUFVBUlQgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW0xQVUFSVFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19MUFVBUlRTUkMgKDApCisvKiBAYnJpZWYgSGFzIExQVUFSVDAgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW0xQVUFSVDBTUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfTFBVQVJUMFNSQyAoMSkKKy8qIEBicmllZiBIYXMgTFBVQVJUMSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIChyZWdpc3RlciBiaXQgU09QVDJbTFBVQVJUMVNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19MUFVBUlQxU1JDICgwKQorLyogQGJyaWVmIEhhcyBGTEVYSU9TUkMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAocmVnaXN0ZXIgYml0IFNPUFQyW0ZMRVhJT1NSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19GTEVYSU9TUkMgKDApCisvKiBAYnJpZWYgSGFzIFVBUlQwIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltVQVJUMFNSQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VQVJUMFNSQyAoMCkKKy8qIEBicmllZiBIYXMgVFBNIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltUUE1TUkNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVFBNU1JDICgxKQorLyogQGJyaWVmIEhhcyBkZWJ1ZyB0cmFjZSBjbG9jayBzZWxlY3Rpb24gKHJlZ2lzdGVyIGJpdCBTT1BUMltUUkFDRUNMS1NFTF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19UUkFDRV9DTEtTRUwgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIEFEQyBtb2R1bGVzIChyZWdpc3RlciBiaXRzIFNPUFQ3W0FEQ25UUkdTRUxdLCBTT1BUN1tBRENuUFJFVFJHU0VMXSwgU09QVDdbQURDbkFMVFRSR1NFTF0sIHdoZXJlIG4gaXMgYSBtb2R1bGUgaW5zdGFuY2UgaW5kZXgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0FEQ19DT1VOVCAoMSkKKy8qIEBicmllZiBBREMwIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEFEQzBBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfQURDMEFMVFRSR0VOX1dJRFRIICgxKQorLyogQGJyaWVmIEFEQzEgYWx0ZXJuYXRlIHRyaWdnZXIgZW5hYmxlIHdpZHRoICh3aWR0aCBvZiBiaXQgZmllbGQgQURDMUFMVFRSR0VOIG9mIHJlZ2lzdGVyIFNPUFQ3KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9BREMxQUxUVFJHRU5fV0lEVEggKDApCisvKiBAYnJpZWYgQURDMiBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBBREMyQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0FEQzJBTFRUUkdFTl9XSURUSCAoMCkKKy8qIEBicmllZiBBREMzIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEFEQzNBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfQURDM0FMVFRSR0VOX1dJRFRIICgwKQorLyogQGJyaWVmIEhTQURDMCBjb252ZXJ0ZXIgQSBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBIU0FEQzBBQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hTQURDMEFBTFRUUkdFTl9XSURUSCAoMCkKKy8qIEBicmllZiBIU0FEQzEgY29udmVydGVyIEEgYWx0ZXJuYXRlIHRyaWdnZXIgZW5hYmxlIHdpZHRoICh3aWR0aCBvZiBiaXQgZmllbGQgSFNBREMxQUFMVFRSR0VOIG9mIHJlZ2lzdGVyIFNPUFQ3KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IU0FEQzFBQUxUVFJHRU5fV0lEVEggKDApCisvKiBAYnJpZWYgQURDIGNvbnZlcnRlciBBIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEFEQ0FBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfQURDQUFMVFRSR0VOX1dJRFRIICgwKQorLyogQGJyaWVmIEhTQURDMCBjb252ZXJ0ZXIgQiBhbHRlcm5hdGUgdHJpZ2dlciBlbmFibGUgd2lkdGggKHdpZHRoIG9mIGJpdCBmaWVsZCBIU0FEQzBCQUxUVFJHRU4gb2YgcmVnaXN0ZXIgU09QVDcpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fT1BUX0hTQURDMEJBTFRUUkdFTl9XSURUSCAoMCkKKy8qIEBicmllZiBIU0FEQzEgY29udmVydGVyIEIgYWx0ZXJuYXRlIHRyaWdnZXIgZW5hYmxlIHdpZHRoICh3aWR0aCBvZiBiaXQgZmllbGQgSFNBREMxQkFMVFRSR0VOIG9mIHJlZ2lzdGVyIFNPUFQ3KS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX09QVF9IU0FEQzFCQUxUVFJHRU5fV0lEVEggKDApCisvKiBAYnJpZWYgQURDIGNvbnZlcnRlciBCIGFsdGVybmF0ZSB0cmlnZ2VyIGVuYWJsZSB3aWR0aCAod2lkdGggb2YgYml0IGZpZWxkIEFEQ0JBTFRUUkdFTiBvZiByZWdpc3RlciBTT1BUNykuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9PUFRfQURDQkFMVFRSR0VOX1dJRFRIICgwKQorLyogQGJyaWVmIEhhcyBjbG9jayAyIG91dHB1dCBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWMVtPVVRESVYyXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX0hBU19PVVRESVYyICgwKQorLyogQGJyaWVmIEhhcyBjbG9jayAzIG91dHB1dCBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWMVtPVVRESVYzXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX0hBU19PVVRESVYzICgwKQorLyogQGJyaWVmIEhhcyBjbG9jayA0IG91dHB1dCBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWMVtPVVRESVY0XSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX0hBU19PVVRESVY0ICgxKQorLyogQGJyaWVmIENsb2NrIDQgb3V0cHV0IGRpdmlkZXIgd2lkdGggKHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBDTEtESVYxW09VVERJVjRdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfT1VURElWNF9XSURUSCAoMykKKy8qIEBicmllZiBIYXMgY2xvY2sgNSBvdXRwdXQgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjFbT1VURElWNV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfT1VURElWNSAoMCkKKy8qIEBicmllZiBIYXMgVVNCIGNsb2NrIGRpdmlkZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBDTEtESVYyW1VTQkRJVl0gYW5kIENMS0RJVjJbVVNCRlJBQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfVVNCRElWICgwKQorLyogQGJyaWVmIEhhcyBVU0IgRlMgY2xvY2sgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjJbVVNCRlNESVZdIGFuZCBDTEtESVYyW1VTQkZTRlJBQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfVVNCRlNESVYgKDApCisvKiBAYnJpZWYgSGFzIFVTQiBIUyBjbG9jayBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWMltVU0JIU0RJVl0gYW5kIENMS0RJVjJbVVNCSFNGUkFDXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9ESVZJREVSX0hBU19VU0JIU0RJViAoMCkKKy8qIEBicmllZiBIYXMgUExML0ZMTCBjbG9jayBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWM1tQTExGTExESVZdIGFuZCBDTEtESVYzW1BMTEZMTEZSQUNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX1BMTEZMTERJViAoMCkKKy8qIEBicmllZiBIYXMgTENEQyBjbG9jayBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWM1tMQ0RDRElWXSBhbmQgQ0xLRElWM1tMQ0RDRlJBQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfTENEQ0RJViAoMCkKKy8qIEBicmllZiBIYXMgdHJhY2UgY2xvY2sgZGl2aWRlciAocmVnaXN0ZXIgYml0IGZpZWxkIENMS0RJVjRbVFJBQ0VESVZdIGFuZCBDTEtESVY0W1RSQUNFRlJBQ10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRElWSURFUl9IQVNfVFJBQ0VESVYgKDApCisvKiBAYnJpZWYgSGFzIE5GQyBjbG9jayBkaXZpZGVyIChyZWdpc3RlciBiaXQgZmllbGQgQ0xLRElWNFtORkNESVZdIGFuZCBDTEtESVY0W05GQ0ZSQUNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0RJVklERVJfSEFTX05GQ0RJViAoMCkKKy8qIEBicmllZiBIYXMgS2luZXRpcyBmYW1pbHkgSUQgKHJlZ2lzdGVyIGJpdCBmaWVsZCBTRElEW0ZBTUlMWUlEXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9TRElEX0hBU19GQU1JTFlJRCAoMCkKKy8qIEBicmllZiBIYXMgS2luZXRpcyBmYW1pbHkgSUQgKHJlZ2lzdGVyIGJpdCBmaWVsZCBTRElEW0ZBTUlEXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9TRElEX0hBU19GQU1JRCAoMSkKKy8qIEBicmllZiBIYXMgS2luZXRpcyBzdWItZmFtaWx5IElEIChyZWdpc3RlciBiaXQgZmllbGQgU0RJRFtTVUJGQU1JRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fU0RJRF9IQVNfU1VCRkFNSUQgKDEpCisvKiBAYnJpZWYgSGFzIEtpbmV0aXMgc2VyaWVzIElEIChyZWdpc3RlciBiaXQgZmllbGQgU0RJRFtTRVJJRVNJRF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fU0RJRF9IQVNfU0VSSUVTSUQgKDEpCisvKiBAYnJpZWYgSGFzIGRldmljZSBkaWUgSUQgKHJlZ2lzdGVyIGJpdCBmaWVsZCBTRElEW0RJRUlEXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9TRElEX0hBU19ESUVJRCAoMSkKKy8qIEBicmllZiBIYXMgc3lzdGVtIFNSQU0gc2l6ZSBzcGVjaWZpZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBTRElEW1NSQU1TSVpFXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9TRElEX0hBU19TUkFNU0laRSAoMSkKKy8qIEBicmllZiBIYXMgZmxhc2ggbW9kZSAocmVnaXN0ZXIgYml0IEZDRkcxW0ZMQVNIRE9aRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRkNGR19IQVNfRkxBU0hET1pFICgxKQorLyogQGJyaWVmIEhhcyBmbGFzaCBkaXNhYmxlIChyZWdpc3RlciBiaXQgRkNGRzFbRkxBU0hESVNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX0ZMQVNIRElTICgxKQorLyogQGJyaWVmIEhhcyBGVEZFIGRpc2FibGUgKHJlZ2lzdGVyIGJpdCBGQ0ZHMVtGVEZESVNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX0ZURkRJUyAoMCkKKy8qIEBicmllZiBIYXMgRmxleE5WTSBzaXplIHNwZWNpZmllciAocmVnaXN0ZXIgYml0IGZpZWxkIEZDRkcxW05WTVNJWkVdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX05WTVNJWkUgKDEpCisvKiBAYnJpZWYgSGFzIEVFUFJPTSBzaXplIHNwZWNpZmllciAocmVnaXN0ZXIgYml0IGZpZWxkIEZDRkcxW0VFU0laRV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRkNGR19IQVNfRUVTSVpFICgwKQorLyogQGJyaWVmIEhhcyBGbGV4TlZNIHBhcnRpdGlvbiAocmVnaXN0ZXIgYml0IGZpZWxkIEZDRkcxW0RFUEFSVF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRkNGR19IQVNfREVQQVJUICgwKQorLyogQGJyaWVmIE1heGltdW0gZmxhc2ggYWRkcmVzcyBibG9jayAwIGFkZHJlc3Mgc3BlY2lmaWVyIChyZWdpc3RlciBiaXQgZmllbGQgRkNGRzJbTUFYQUREUjBdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX01BWEFERFIwICgxKQorLyogQGJyaWVmIE1heGltdW0gZmxhc2ggYWRkcmVzcyBibG9jayAxIGFkZHJlc3Mgc3BlY2lmaWVyIChyZWdpc3RlciBiaXQgZmllbGQgRkNGRzJbTUFYQUREUjFdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX01BWEFERFIxICgxKQorLyogQGJyaWVmIE1heGltdW0gZmxhc2ggYWRkcmVzcyBibG9jayAwIG9yIDEgYWRkcmVzcyBzcGVjaWZpZXIgKHJlZ2lzdGVyIGJpdCBmaWVsZCBGQ0ZHMltNQVhBRERSMDFdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU0lNX0ZDRkdfSEFTX01BWEFERFIwMSAoMCkKKy8qIEBicmllZiBNYXhpbXVtIGZsYXNoIGFkZHJlc3MgYmxvY2sgMiBvciAzIGFkZHJlc3Mgc3BlY2lmaWVyIChyZWdpc3RlciBiaXQgZmllbGQgRkNGRzJbTUFYQUREUjIzXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19NQVhBRERSMjMgKDApCisvKiBAYnJpZWYgSGFzIHByb2dyYW0gZmxhc2ggYXZhaWxhYmlsaXR5IHNwZWNpZmllciAocmVnaXN0ZXIgYml0IEZDRkcyW1BGTFNIXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9GQ0ZHX0hBU19QRkxTSCAoMSkKKy8qIEBicmllZiBIYXMgcHJvZ3JhbSBmbGFzaCBzd2FwcGluZyAocmVnaXN0ZXIgYml0IEZDRkcyW1NXQVBQRkxTSF0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fRkNGR19IQVNfUEZMU0hfU1dBUCAoMSkKKy8qIEBicmllZiBIYXMgbWlzY2VsbGFuaW91cyBjb250cm9sIHJlZ2lzdGVyIChyZWdpc3RlciBNQ1IpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fSEFTX01JU0NfQ09OVFJPTFMgKDApCisvKiBAYnJpZWYgSGFzIENPUCB3YXRjaGRvZyAocmVnaXN0ZXJzIENPUEMgYW5kIFNSVkNPUCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9IQVNfQ09QX1dBVENIRE9HICgxKQorLyogQGJyaWVmIEhhcyBDT1Agd2F0Y2hkb2cgc3RvcCAocmVnaXN0ZXIgYml0cyBDT1BDW0NPUFNUUEVOXSwgQ09QQ1tDT1BEQkdFTl0gYW5kIENPUENbQ09QQ0xLU0VMXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NJTV9IQVNfQ09QX1NUT1AgKDEpCisvKiBAYnJpZWYgSGFzIExMV1UgY2xvY2sgZ2F0ZSBiaXQgKGUuZyBTSU1fU0NHQzQpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TSU1fSEFTX1NDR0NfTExXVSAoMCkKKworLyogU01DIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgSGFzIHBhcnRpYWwgc3RvcCBvcHRpb24gKHJlZ2lzdGVyIGJpdCBTVE9QQ1RSTFtQU1RPUE9dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19QU1RPUE8gKDEpCisvKiBAYnJpZWYgSGFzIExQTyBwb3dlciBvcHRpb24gKHJlZ2lzdGVyIGJpdCBTVE9QQ1RSTFtMUE9QT10pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPICgwKQorLyogQGJyaWVmIEhhcyBQT1IgcG93ZXIgb3B0aW9uIChyZWdpc3RlciBiaXQgU1RPUENUUkxbUE9SUE9dIG9yIFZMTFNDVFJMW1BPUlBPXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfUE9SUE8gKDEpCisvKiBAYnJpZWYgSGFzIGxvdyBwb3dlciB3YWtldXAgb24gaW50ZXJydXB0IChyZWdpc3RlciBiaXQgUE1DVFJMW0xQV1VJXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBXVUkgKDApCisvKiBAYnJpZWYgSGFzIExMUyBvciBWTExTIG1vZGUgY29udHJvbCAocmVnaXN0ZXIgYml0IFNUT1BDVFJMW0xMU01dKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSAoMSkKKy8qIEBicmllZiBIYXMgVkxMUyBtb2RlIGNvbnRyb2wgKHJlZ2lzdGVyIGJpdCBWTExTQ1RSTFtWTExTTV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRyAoMCkKKy8qIEBicmllZiBIYXMgVkxMUyBtb2RlIGNvbnRyb2wgKHJlZ2lzdGVyIGJpdCBTVE9QQ1RSTFtWTExTTV0pLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfVVNFX1NUT1BDVFJMX1ZMTFNNICgwKQorLyogQGJyaWVmIEhhcyBSQU0gcGFydGl0aW9uIDIgcG93ZXIgb3B0aW9uIChyZWdpc3RlciBiaXQgU1RPUENUUkxbUkFNMlBPXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfUkFNMl9QT1dFUl9PUFRJT04gKDEpCisvKiBAYnJpZWYgSGFzIGhpZ2ggc3BlZWQgcnVuIG1vZGUgKHJlZ2lzdGVyIGJpdCBQTVBST1RbQUhTUlVOXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAoMCkKKy8qIEBicmllZiBIYXMgbG93IGxlYWthZ2Ugc3RvcCBtb2RlIChyZWdpc3RlciBiaXQgUE1QUk9UW0FMTFNdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUgKDEpCisvKiBAYnJpZWYgSGFzIHZlcnkgbG93IGxlYWthZ2Ugc3RvcCBtb2RlIChyZWdpc3RlciBiaXQgUE1QUk9UW0FWTExTXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUgKDEpCisvKiBAYnJpZWYgSGFzIHN0b3Agc3VibW9kZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19TVUJfU1RPUF9NT0RFICgxKQorLyogQGJyaWVmIEhhcyBzdG9wIHN1Ym1vZGUgMChWTExTMCkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfU1RPUF9TVUJNT0RFMCAoMSkKKy8qIEBicmllZiBIYXMgc3RvcCBzdWJtb2RlIDIoVkxMUzIpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1NUT1BfU1VCTU9ERTIgKDEpCisvKiBAYnJpZWYgSGFzIFNNQ19QQVJBTS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19QQVJBTSAoMCkKKy8qIEBicmllZiBIYXMgU01DX1ZFUklELiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUklEICgwKQorLyogQGJyaWVmIEhhcyBzdG9wIGFib3J0IGZsYWcgKHJlZ2lzdGVyIGJpdCBQTUNUUkxbU1RPUEFdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19QTUNUUkxfU1RPUEEgKDEpCisvKiBAYnJpZWYgSGFzIHRhbXBlciByZXNldCAocmVnaXN0ZXIgYml0IFNSU1tUQU1QRVJdKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU01DX0hBU19TUlNfVEFNUEVSICgwKQorLyogQGJyaWVmIEhhcyBzZWN1cml0eSB2aW9sYXRpb24gcmVzZXQgKHJlZ2lzdGVyIGJpdCBTUlNbU0VDVklPXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1NNQ19IQVNfU1JTX1NFQ1ZJTyAoMCkKKworLyogRFNQSSBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIFJlY2VpdmUvdHJhbnNtaXQgRklGTyBzaXplIGluIG51bWJlciBvZiBpdGVtcy4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRFNQSV9GSUZPX1NJWkVuKHgpICg0KQorLyogQGJyaWVmIE1heGltdW0gdHJhbnNmZXIgZGF0YSB3aWR0aCBpbiBiaXRzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EU1BJX01BWF9EQVRBX1dJRFRIICgxNikKKy8qIEBicmllZiBNYXhpbXVtIG51bWJlciBvZiBjaGlwIHNlbGVjdCBwaW5zLiAoUmVmbGVjdHMgdGhlIHdpZHRoIG9mIHJlZ2lzdGVyIGJpdCBmaWVsZCBQVVNIUltQQ1NdLikgKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRFNQSV9NQVhfQ0hJUF9TRUxFQ1RfQ09VTlQgKDQpCisvKiBAYnJpZWYgTnVtYmVyIG9mIGNoaXAgc2VsZWN0IHBpbnMuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RTUElfQ0hJUF9TRUxFQ1RfQ09VTlQgKDMpCisvKiBAYnJpZWYgSGFzIGNoaXAgc2VsZWN0IHN0cm9iZSBjYXBhYmlsaXR5IG9uIHRoZSBQQ1M1IHBpbi4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfRFNQSV9IQVNfQ0hJUF9TRUxFQ1RfU1RST0JFICgwKQorLyogQGJyaWVmIEhhcyBzZXBhcmF0ZWQgVFhEQVRBIGFuZCBDTUQgRklGT3MgKHJlZ2lzdGVyIFNSRVgpLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9UWERBVEFfQ01EX0ZJRk8gKDApCisvKiBAYnJpZWYgSGFzIDE2LWJpdCBkYXRhIHRyYW5zZmVyIHN1cHBvcnQuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX0RTUElfMTZCSVRfVFJBTlNGRVJTICgxKQorLyogQGJyaWVmIEhhcyBzZXBhcmF0ZSBETUEgUlggYW5kIFRYIHJlcXVlc3RzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbih4KSAoMSkKKworLyogU3lzVGljayBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogQGJyaWVmIFN5c3RpY2sgaGFzIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU1lTVElDS19IQVNfRVhUX1JFRiAoMSkKKy8qIEBicmllZiBTeXN0aWNrIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBjb3JlIGNsb2NrIGRpdmlkZWQgYnkgdGhpcyB2YWx1ZS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfU1lTVElDS19FWFRfUkVGX0NPUkVfRElWICgxNikKKworLyogVFBNIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBAYnJpZWYgQnVzIGNsb2NrIGlzIHRoZSBzb3VyY2UgY2xvY2sgZm9yIHRoZSBtb2R1bGUuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9CVVNfQ0xPQ0sgKDApCisvKiBAYnJpZWYgTnVtYmVyIG9mIGNoYW5uZWxzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fQ0hBTk5FTF9DT1VOVG4oeCkgXAorICAgICgoeCkgPT0gVFBNMCA/ICg0KSA6IFwKKyAgICAoKHgpID09IFRQTTEgPyAoMikgOiBcCisgICAgKCh4KSA9PSBUUE0yID8gKDIpIDogKC0xKSkpKQorLyogQGJyaWVmIEhhcyBjb3VudGVyIHJlc2V0IGJ5IHRoZSBzZWxlY3RlZCBpbnB1dCBjYXB0dXJlIGV2ZW50IChyZWdpc3RlciBiaXRzIEMwU0NbSUNSU1RdLCBDMVNDW0lDUlNUXSwgLi4uKS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT1VOVEVSX1JFU0VUX0JZX0NBUFRVUkVfRVZFTlQgKDApCisvKiBAYnJpZWYgSGFzIFRQTV9QQVJBTS4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19QQVJBTSAoMCkKKy8qIEBicmllZiBIYXMgVFBNX1ZFUklELiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX1ZFUklEICgwKQorLyogQGJyaWVmIEhhcyBUUE1fR0xPQkFMLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX0dMT0JBTCAoMCkKKy8qIEBicmllZiBIYXMgVFBNX1RSSUcuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9IQVNfVFJJRyAoMCkKKy8qIEBicmllZiBIYXMgY291bnRlciBwYXVzZSBvbiB0cmlnZ2VyLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX1BBVVNFX0NPVU5URVJfT05fVFJJR0dFUiAoMSkKKy8qIEBicmllZiBIYXMgZXh0ZXJuYWwgdHJpZ2dlciBzZWxlY3Rpb24uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9IQVNfRVhURVJOQUxfVFJJR0dFUl9TRUxFQ1RJT04gKDEpCisvKiBAYnJpZWYgSGFzIFRQTV9DT01CSU5FIHJlZ2lzdGVyLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUgKDEpCisvKiBAYnJpZWYgV2hldGhlciBDT01CSU5FIHJlZ2lzdGVyIGhhcyBlZmZlY3QuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9DT01CSU5FX0hBU19FRkZFQ1RuKHgpIFwKKyAgICAoKHgpID09IFRQTTAgPyAoMCkgOiBcCisgICAgKCh4KSA9PSBUUE0xID8gKDEpIDogXAorICAgICgoeCkgPT0gVFBNMiA/ICgxKSA6ICgtMSkpKSkKKy8qIEBicmllZiBIYXMgVFBNX1BPTC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVFBNX0hBU19QT0wgKDEpCisvKiBAYnJpZWYgSGFzIFRQTV9GSUxURVIgcmVnaXN0ZXIuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9IQVNfRklMVEVSICgxKQorLyogQGJyaWVmIFdoZXRoZXIgRklMVEVSIHJlZ2lzdGVyIGhhcyBlZmZlY3QuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RQTV9GSUxURVJfSEFTX0VGRkVDVG4oeCkgXAorICAgICgoeCkgPT0gVFBNMCA/ICgwKSA6IFwKKyAgICAoKHgpID09IFRQTTEgPyAoMSkgOiBcCisgICAgKCh4KSA9PSBUUE0yID8gKDEpIDogKC0xKSkpKQorLyogQGJyaWVmIEhhcyBUUE1fUURDVFJMIHJlZ2lzdGVyLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTCAoMSkKKy8qIEBicmllZiBXaGV0aGVyIFFEQ1RSTCByZWdpc3RlciBoYXMgZWZmZWN0LiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UUE1fUURDVFJMX0hBU19FRkZFQ1RuKHgpIFwKKyAgICAoKHgpID09IFRQTTAgPyAoMCkgOiBcCisgICAgKCh4KSA9PSBUUE0xID8gKDEpIDogXAorICAgICgoeCkgPT0gVFBNMiA/ICgxKSA6ICgtMSkpKSkKKworLyogVFJORyBtb2R1bGUgZmVhdHVyZXMgKi8KKworLyogTm8gZmVhdHVyZSBkZWZpbml0aW9ucyAqLworCisvKiBUU0kgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBUU0kgbW9kdWxlIHZlcnNpb24uICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RTSV9WRVJTSU9OICg0KQorLyogQGJyaWVmIEhhcyBlbmQtb2Ytc2NhbiBETUEgdHJhbnNmZXIgcmVxdWVzdCBlbmFibGUgKHJlZ2lzdGVyIGJpdCBHRU5DU1tFT1NETUVPXSkuICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1RTSV9IQVNfRU5EX09GX1NDQU5fRE1BX0VOQUJMRSAoMCkKKy8qIEBicmllZiBOdW1iZXIgb2YgVFNJIGNoYW5uZWxzLiAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9UU0lfQ0hBTk5FTF9DT1VOVCAoMTYpCisKKy8qIFZSRUYgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIEBicmllZiBIYXMgY2hvcCBvc2NpbGxhdG9yIChiaXQgVFJNW0NIT1BFTl0pICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1ZSRUZfSEFTX0NIT1BfT1NDICgxKQorLyogQGJyaWVmIEhhcyBzZWNvbmQgb3JkZXIgY3VydmF0dXJlIGNvbXBlbnNhdGlvbiAoYml0IFNDW0lDT01QRU5dKSAqLworI2RlZmluZSBGU0xfRkVBVFVSRV9WUkVGX0hBU19DT01QRU5TQVRJT04gKDEpCisvKiBAYnJpZWYgSWYgaGlnaC9sb3cgYnVmZmVyIG1vZGUgc3VwcG9ydGVkICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1ZSRUZfTU9ERV9MVl9UWVBFICgxKQorLyogQGJyaWVmIE1vZHVsZSBoYXMgYWxzbyBsb3cgcmVmZXJlbmNlIChyZWdpc3RlcnMgVlJFRkwvVlJFRkgpICovCisjZGVmaW5lIEZTTF9GRUFUVVJFX1ZSRUZfSEFTX0xPV19SRUZFUkVOQ0UgKDApCisvKiBAYnJpZWYgSGFzIFZSRUZfVFJNNC4gKi8KKyNkZWZpbmUgRlNMX0ZFQVRVUkVfVlJFRl9IQVNfVFJNNCAoMCkKKworLyogWENWUl9BTkFMT0cgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIE5vIGZlYXR1cmUgZGVmaW5pdGlvbnMgKi8KKworLyogWENWUl9QSFkgbW9kdWxlIGZlYXR1cmVzICovCisKKy8qIE5vIGZlYXR1cmUgZGVmaW5pdGlvbnMgKi8KKworLyogWkxMIG1vZHVsZSBmZWF0dXJlcyAqLworCisvKiBObyBmZWF0dXJlIGRlZmluaXRpb25zICovCisKKyNlbmRpZiAvKiBfTUtXNDFaNF9GRUFUVVJFU19IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL1hDVlJfVGVzdC94Y3ZyX3Rlc3RfZnNrLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL1hDVlJfVGVzdC94Y3ZyX3Rlc3RfZnNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1YzExOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvWENWUl9UZXN0L3hjdnJfdGVzdF9mc2suYwpAQCAtMCwwICsxLDIxMiBAQAorLyohCisqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisqCisqIFxmaWxlCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJ4Y3ZyX3Rlc3RfZnNrLmgiCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHJpdmF0ZSB0eXBlIGRlZmluaXRpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitlbnVtIHsKKyAgICBnRGZ0Tm9ybWFsX2MgICAgICAgICAgPSAwLAorICAgIGdEZnRUeE5vTW9kX0NhcnJpZXJfYyA9IDEsCisgICAgZ0RmdFR4UGF0dGVybl9jICAgICAgID0gMiwKKyAgICBnRGZ0VHhSYW5kb21fYyAgICAgICAgPSAzLAorfTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQcml2YXRlIG1lbW9yeSBkZWNsYXJhdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQdWJsaWMgcHJvdG90eXBlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCBYY3ZyRnNrTW9kVHgodm9pZCk7Cit2b2lkIFhjdnJGc2tOb01vZFR4KHZvaWQpOwordm9pZCBYY3ZyRnNrSWRsZSh2b2lkKTsKK3ZvaWQgWGN2ckZza1R4UmFuZCh2b2lkKTsKK3ZvaWQgWGN2ckZza0xvYWRQYXR0ZXJuKHVpbnQzMl90IHUzMlBhdHRlcm4pOwordm9pZCBYY3ZyRnNrU2V0VHhQb3dlcih1aW50OF90IHU4VHhQb3cpOwordm9pZCBYY3ZyRnNrU2V0VHhDaGFubmVsKHVpbnQ4X3QgdThUeENoYW4pOwordm9pZCBYY3ZyRnNrUmVzdG9yZVRYQ29udHJvbCh2b2lkKTsKK3VpbnQ4X3QgWGN2ckZza0dldEluc3RhbnRSc3NpKHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFhjdnJGc2tNb2RUeAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tNb2RUeCh2b2lkKQoreworICAgIFhjdnJGc2tJZGxlKCk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgJj0gfihYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLKTsKKyAgICBYQ1ZSX1RYX0RJRy0+Q1RSTCB8PSBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFKGdEZnRUeFBhdHRlcm5fYykgfAorICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOX01BU0s7CisgICAgWENWUl9NSVNDLT5EVEVTVF9DVFJMIHw9IFhDVlJfQ1RSTF9EVEVTVF9DVFJMX0RURVNUX0VOX01BU0s7CisgICAgWENWUl9UU00tPkNUUkwgfD0gWENWUl9UU01fQ1RSTF9GT1JDRV9UWF9FTl9NQVNLOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFhjdnJGc2tOb01vZFR4CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2ckZza05vTW9kVHgodm9pZCkKK3sKKyAgICBYY3ZyRnNrSWRsZSgpOworICAgIFhDVlJfVFhfRElHLT5DVFJMICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREVfTUFTSyk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgfD0gWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERShnRGZ0VHhOb01vZF9DYXJyaWVyX2MpOworICAgIFhDVlJfTUlTQy0+RFRFU1RfQ1RSTCB8PSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9FTl9NQVNLOworICAgIFhDVlJfVFNNLT5DVFJMIHw9IFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSzsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrSWRsZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tJZGxlKHZvaWQpCit7CisgICAgWENWUl9UWF9ESUctPkNUUkwgJj0gfihYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9NQVNLIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU5fTUFTSyB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLKTsKKyAgICBYQ1ZSX1RTTS0+Q1RSTCAmPSB+WENWUl9UU01fQ1RSTF9GT1JDRV9UWF9FTl9NQVNLOworICAgIFhDVlJfTUlTQy0+RFRFU1RfQ1RSTCAmPSB+WENWUl9DVFJMX0RURVNUX0NUUkxfRFRFU1RfRU5fTUFTSzsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrVHhSYW5kCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2ckZza1R4UmFuZCh2b2lkKQoreworICAgIFhjdnJGc2tJZGxlKCk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgJj0gfihYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEhfTUFTSyk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgfD0gWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERShnRGZ0VHhSYW5kb21fYykgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEgoMCkgfCAvKiBsZW5ndGggOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTl9NQVNLOworICAgIFhDVlJfTUlTQy0+RFRFU1RfQ1RSTCB8PSBYQ1ZSX0NUUkxfRFRFU1RfQ1RSTF9EVEVTVF9FTl9NQVNLOworICAgIFhDVlJfVFNNLT5DVFJMIHw9IFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSzsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrTG9hZFBhdHRlcm4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBYY3ZyRnNrTG9hZFBhdHRlcm4odWludDMyX3QgdTMyUGF0dGVybikKK3sKKyAgICBYQ1ZSX1RYX0RJRy0+REZUX1BBVFRFUk4gPSB1MzJQYXR0ZXJuOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFhjdnJGc2tHZXRJbnN0YW50UnNzaQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50OF90IFhjdnJGc2tHZXRJbnN0YW50UnNzaSh2b2lkKQoreworICAgIHVpbnQ4X3QgdThSc3NpOworICAgIHVpbnQzMl90IHQxLHQyLHQzOworICAgIHQxID0gWENWUl9SWF9ESUctPlJYX0RJR19DVFJMOworICAgIHQyID0gWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wOworICAgIHQzID0gWENWUl9QSFktPkNGRzE7CisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX05FR0VER0UoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0NIX0ZJTFRfQllQQVNTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUkFXX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUE9MKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMSkgfCAvKiAxPU9TUjgsIDI9T1NSMTYsIDQ9T1NSMzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9OT1JNX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9SU1NJX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BR0NfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfQ0FMX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9JUV9TV0FQKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSB8IC8qIFNvdXJjZSBSYXRlIDAgaXMgZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RNQV9EVEVTVF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigyMikgfCAvKiBEZWMgZmlsdCBnYWluIGZvciBTUkMgcmF0ZSA9PSAgMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX0haRF9DT1JSX0RJUygxKSA7CisKKyAgICBYQ1ZSX1JYX0RJRy0+UlNTSV9DVFJMXzAgJj0gflhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfSUlSX1dFSUdIVF9NQVNLOworICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCB8PSAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfV0VJR0hUKDB4NSk7CisKKyAgICBYQ1ZSX1JYX0RJRy0+UlNTSV9DVFJMXzAgJj0gflhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfTl9XSU5ET1dfQVZHX01BU0s7CisgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wIHw9ICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX05fV0lORE9XX0FWRygweDMpOyAKKworICAgIHVpbnQzMl90IHRlbXAgPSBYQ1ZSX1BIWS0+Q0ZHMTsKKyAgICB0ZW1wICY9IH5YQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0hfTUFTSzsKKyAgICB0ZW1wIHw9IFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSCgweEZGKTsKKyAgICBYQ1ZSX1BIWS0+Q0ZHMSA9IHRlbXA7CisKKyAgICBYQ1ZSX0ZvcmNlUnhXdSgpOworICAgIGZvcih1aW50MzJfdCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgeworICAgICAgICBfX2FzbSgibm9wIik7CisgICAgfQorICAgIHU4UnNzaSA9ICh1aW50OF90KSgoWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8xICYgCisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMV9SU1NJX09VVF9NQVNLKSA+PiAKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8xX1JTU0lfT1VUX1NISUZUKTsKKyAgICBYQ1ZSX0ZvcmNlUnhXZCgpOworCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gdDE7CisgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wID0gdDI7CisgICAgWENWUl9QSFktPkNGRzEgPSB0MzsKKyAgICByZXR1cm4gdThSc3NpOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFhjdnJGc2tTZXRUeFBvd2VyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2ckZza1NldFR4UG93ZXIodWludDhfdCB1OFR4UG93KQoreworICAgIHJldHVybjsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrU2V0VHhDaGFubmVsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2ckZza1NldFR4Q2hhbm5lbCh1aW50OF90IHU4VHhDaGFuKQoreworICAgIHJldHVybjsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBYY3ZyRnNrUmVzdG9yZVRYQ29udHJvbAorKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdXNlciBzaG91bGQgc3dpdGNoIHRvCisqIHByZXZpb3VzIHByb3RvY29sIGFuZCBzZXQgdGhlIHByb3RvY29sIGNoYW5uZWwgdG8gZGVmYXVsdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIFhjdnJGc2tSZXN0b3JlVFhDb250cm9sKHZvaWQpCit7CisgICAgcmV0dXJuOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL1hDVlJfVGVzdC94Y3ZyX3Rlc3RfZnNrLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL1hDVlJfVGVzdC94Y3ZyX3Rlc3RfZnNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiZTkyYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvWENWUl9UZXN0L3hjdnJfdGVzdF9mc2suaApAQCAtMCwwICsxLDE1NyBAQAorLyohCisqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisqCisqIFxmaWxlCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIF9fWENWUl9URVNUX0ZTS19IX18KKyNkZWZpbmUgX19YQ1ZSX1RFU1RfRlNLX0hfXworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFB1YmxpYyB0eXBlIGRlZmluaXRpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHVibGljIHByb3RvdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW5zdGFudCBSU1NJIHZhbHVlIGFuZCByZXR1cm5zIGl0IGFzIHVuc2lnbmVkIGJ5dGUuCisqCisqIFxwYXJhbVtpbl0gTm9uZS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyBJbml0aWFsaXphdGlvbiBvZiB0aGUgeGN2ciBpcyBuZWNlc3NhcnkgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB1aW50OF90IFhjdnJGc2tHZXRJbnN0YW50UnNzaSh2b2lkKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHJhbnNjZWl2ZXIgaW50byBjb250aW51b3VzIG1vZHVsYXRlZCB0cmFuc21pc3Npb24uCisqCisqIFxwYXJhbVtpbl0gTm9uZS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyBJbml0aWFsaXphdGlvbiBvZiB0aGUgeGN2ciBhbmQgY2FsbGluZyBYY3ZyRnNrTG9hZFBhdHRlcm4gYXJlIG5lY2Vzc2FyeQorKiAgICAgICAgIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBYY3ZyRnNrTW9kVHgodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHRyYW5zY2VpdmVyIGludG8gY29udGludW91cyB1bm1vZHVsYXRlZCB0cmFuc21pc3Npb24uCisqCisqIFxwYXJhbVtpbl0gTm9uZS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHZvaWQgWGN2ckZza05vTW9kVHgodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHRyYW5zY2VpdmVyIGludG8gaWRsZS4KKyoKKyogXHBhcmFtW2luXSBOb25lLgorKgorKiBcaW5ncm91cCBUZXN0RnVuY3Rpb25zCisqCisqIFxkZXRhaWxzIAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBYY3ZyRnNrSWRsZSh2b2lkKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHJhbnNjZWl2ZXIgaW50byBjb250aW51b3VzIG1vZHVsYXRlZCB0cmFuc21pc3Npb24uCisqCisqIFxwYXJhbVtpbl0gTm9uZS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyBUaGUgbW9kdWxhdGlvbiB1c2VkIGlzIGEgcHNldWRvLXJhbmRvbSBwYXR0ZXJuIGdlbmVyYXRlZCB1c2luZyBhIExGU1IuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFhjdnJGc2tUeFJhbmQodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIGxvYWRzIGEgMzIgYml0IHZhbHVlIGludG8gdGhlIHBhdHRlcm4gcmVnaXN0ZXIgdXNlZCBieSBYY3ZyRnNrTW9kVHguCisqCisqIFxwYXJhbVtpbl0gdTMyUGF0dGVybiBUaGUgcGF0dGVybiB0byBiZSBsb2FkZWQuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFhjdnJGc2tMb2FkUGF0dGVybih1aW50MzJfdCB1MzJQYXR0ZXJuKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdHggcG93ZXIgY29udHJvbCB0byB4Y3ZyIGFuZCBzZXRzIHRoZSBwb3dlciB0byB1OFR4UG93LgorKgorKiBccGFyYW1baW5dIHU4VHhQb3cgVmFsdWVzIHNob3VsZCBiZSBiZXR3ZWVuIDB4MDAgYW5kIDB4MEYuCisqCisqIFxpbmdyb3VwIFRlc3RGdW5jdGlvbnMKKyoKKyogXGRldGFpbHMgCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFhjdnJGc2tTZXRUeFBvd2VyKHVpbnQ4X3QgdThUeFBvdyk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIGdpdmVzIHR4IGNoYW5uZWwgY29udHJvbCB0byB4Y3ZyIGFuZCBzZXRzIHRoZSBjaGFubmVsIHRvIHU4VHhDaGFuLgorKgorKiBccGFyYW1baW5dIHU4VHhDaGFuIFZhbHVlcyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAzOS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHZvaWQgWGN2ckZza1NldFR4Q2hhbm5lbCh1aW50OF90IHU4VHhDaGFuKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdHggY2hhbm5lbCBjb250cm9sIGFuZCBwb3dlciB0byB0aGUgdXBwZXIgbGF5ZXIuCisqCisqIFxwYXJhbVtpbl0gTm9uZS4KKyoKKyogXGluZ3JvdXAgVGVzdEZ1bmN0aW9ucworKgorKiBcZGV0YWlscyBDYWxsIHRoaXMgZnVuY3Rpb24gb25seSBpZiBYY3ZyRnNrU2V0VHhDaGFubmVsIG9yIFhjdnJGc2tTZXRUeFBvd2VyIHdlcmUgY2FsbGVkCisqICAgICAgICAgcHJldmlvdXNseS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHZvaWQgWGN2ckZza1Jlc3RvcmVUWENvbnRyb2wodm9pZCk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9hbnRfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9hbnRfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5YTEwNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2FudF9jb25maWcuYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBhbnRfbW9kZV9jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gQU5UX01PREUsCisgICAgLnNjZ2M1X2Nsb2NrX2VuYV9iaXRzID0gU0lNX1NDR0M1X1BIWURJR19NQVNLIAorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgfCBTSU1fU0NHQzVfQU5UX01BU0sKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfTUlTQyBjb25maWdzICovCisgICAgLnhjdnJfY3RybC5tYXNrID0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMX01BU0ssCisgICAgLnhjdnJfY3RybC5pbml0ID0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQyg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUwoMSksCisKKyAgICAvKiBYQ1ZSX1BIWSBjb25maWdzICovCisgICAgLnBoeV9wcmVfcmVmMF9pbml0ID0gUlcwUFMoMCwgMHgxQikgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDEsIDB4MUNVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoMiwgMHgxQ1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUygzLCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDQsIDB4MURVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoNSwgMHgxRFUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUyg2LCAweDFFVSAmIDB4M1UpLCAvKiBQaGFzZSBpbmZvICM2IG92ZXJsYXBzIHR3byBpbml0aWFsaXphdGlvbiB3b3JkcyAtIG9ubHkgbmVlZCB0d28gbG93ZXN0IGJpdHMqLworICAgIC5waHlfcHJlX3JlZjFfaW5pdCA9ICgweDFFKSA+PiAyIHwgLyogUGhhc2UgaW5mbyAjNiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgIC0gbWFudWFsbHkgY29tcHV0ZSB0aGUgc2hpZnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUyg3LCAweDFFVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDgsIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoOSwgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMCwgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMSwgMHgxRFUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUygxMiwgMHgxRFUgJiAweEZVKSwgLyogUGhhc2UgaW5mbyAjMTIgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzICovCisgICAgLnBoeV9wcmVfcmVmMl9pbml0ID0gKDB4MUQpID4+IDQgfCAvKiBQaGFzZSBpbmZvICMxMiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgLSBtYW51YWxseSBjb21wdXRlIHRoZSBzaGlmdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIFJXMlBTKDEzLCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMlBTKDE0LCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMlBTKDE1LCAweDFDVSksCisKKyAgICAucGh5X2NmZzFfaW5pdCA9IFhDVlJfUEhZX0NGRzFfQUFfUExBWUJBQ0soMSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9BQV9PVVRQVVRfU0VMKDEpIHwgCisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSCgweEY4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVCgyKSwKKworICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKDEpIAorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUK1RYX0RJR19FTl9UWF9ISV9BREopLAorI2Vsc2UKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCksCisjZW5kaWYgLyogKERBVEFfUEFERElOR19FTikgKi8KKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAudHhfZ2Zza19jdHJsID0gWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMKDB4NDAwMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKDApLAorICAgIC50eF9nZnNrX2NvZWZmMV8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8zMm1oeiA9IDAsCit9OworCisvKiBNT0RFICYgREFUQSBSQVRFIGNvbWJpbmVkIGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0FOVF8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gQU5UX01PREUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDYpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDE2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0OSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1RCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2OSwKKworICAgICAvKiBBTlQgMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRjQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkU3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMTUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAzMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDRFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDczLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYmxlX2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfYmxlX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NGIwY2MKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9ibGVfY29uZmlnLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgYmxlX21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEJMRV9NT0RFLAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9CVExMX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woMCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IFJXMFBTKDAsIDB4MTkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUygxLCAweDE5VSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDIsIDB4MUFVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoMywgMHgxQlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUyg0LCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDUsIDB4MUNVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoNiwgMHgxRFUgJiAweDNVKSwgLyogUGhhc2UgaW5mbyAjNiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgKi8KKyAgICAucGh5X3ByZV9yZWYxX2luaXQgPSAoMHgxRCkgPj4gMiB8IC8qIFBoYXNlIGluZm8gIzYgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzIC0gbWFudWFsbHkgY29tcHV0ZSB0aGUgc2hpZnQqLworICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDcsIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoOCwgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUyg5LCAweDFFVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDEwLCAweDFEVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDExLCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDEyLCAweDFDVSAmIDB4RlUpLCAvKiBQaGFzZSBpbmZvICMxMiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgKi8KKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAoMHgxQykgPj4gNCB8IC8qIFBoYXNlIGluZm8gIzEyIG92ZXJsYXBzIHR3byBpbml0aWFsaXphdGlvbiB3b3JkcyAtIG1hbnVhbGx5IGNvbXB1dGUgdGhlIHNoaWZ0Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxMywgMHgxQlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxNCwgMHgxQVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxNSwgMHgxOVUpLAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMjIwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVCgyKSwKKworICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKDEpIC8qIFBlciBTTUIgKi8KKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKDApCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAsCisKKyAgICAvKiBYQ1ZSX1JYX0RJRyBjb25maWdzICovCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfUkFURSgwKSwKKworICAgIC5yeF9kaWdfY3RybF9pbml0XzMybWh6ID0gIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUK1RYX0RJR19FTl9UWF9ISV9BREopLAorI2Vsc2UKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCksCisjZW5kaWYgLyogKERBVEFfUEFERElOR19FTikgKi8KKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAudHhfZ2Zza19jdHJsID0gWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTVVMVElQTFlfVEFCTEVfTUFOVUFMKDB4NDAwMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NSSgxKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01MRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX0ZMRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01PRF9JTkRFWF9TQ0FMSU5HKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl9PVlJEX0VOKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8wX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzFfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMl9PVlJEKDApLAorICAgIC50eF9nZnNrX2NvZWZmMV8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8zMm1oeiA9IDAsCit9OworCisvKiBNT0RFICYgREFUQSBSQVRFIGNvbWJpbmVkIGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0JMRV8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gQkxFX01PREUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorICAgIAorICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg0KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg0KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDQpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHhBKSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEJMRSAyNk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkYxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRUUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAxNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDJGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNTksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNjMsCisKKyAgICAvKiBCTEUgMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkVCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMTUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAzMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDRBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDVGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDZCLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCit9OworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9jb21tb25fY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9jb21tb25fY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3N2QzYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2NvbW1vbl9jb25maWcuYwpAQCAtMCwwICsxLDYyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190IHhjdnJfY29tbW9uX2NvbmZpZyA9Cit7CisgICAgLyogWENWUl9BTkEgY29uZmlncyAqLworICAgIC5hbmFfc3lfY3RybDEubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMV9TWV9MUEZfRklMVF9DVFJMX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMS5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8xX1NZX0xQRl9GSUxUX0NUUkwoMyksIC8qIFBMTCBBbmFsb2cgTG9vcCBGaWx0ZXIgKi8KKworI2RlZmluZSBocG1fdmNtX3R4IDAKKyNkZWZpbmUgaHBtX3ZjbV9jYWwgMQorI2RlZmluZSBocG1fZmRiX3Jlc190eCAwCisjZGVmaW5lIGhwbV9mZGJfcmVzX2NhbCAxCisjZGVmaW5lIG1vZHVsYXRpb25fd29yZF9tYW51YWwgMAorI2RlZmluZSBtb2RfZGlzYWJsZSAwCisjZGVmaW5lIGhwbV9tb2RfbWFudWFsIDAKKyNkZWZpbmUgaHBtX21vZF9kaXNhYmxlIDAKKyNkZWZpbmUgaHBtX3NkbV9vdXRfbWFudWFsIDAKKyNkZWZpbmUgaHBtX3NkbV9vdXRfZGlzYWJsZSAwCisjZGVmaW5lIGNoYW5uZWxfbnVtIDAKKyNkZWZpbmUgYm9jIDAKKyNkZWZpbmUgYm1yIDEKKyNkZWZpbmUgem9jIDAKKyNkZWZpbmUgY3R1bmVfbGRmX2xldiA4CisjZGVmaW5lIGZ0Zl9yeF90aHJzaCAzMworI2RlZmluZSBmdHdfcnggMAorI2RlZmluZSBmdGZfdHhfdGhyc2ggNgorI2RlZmluZSBmdHdfdHggMAorI2RlZmluZSBmcmVxX2NvdW50X2dvIDAKKyNkZWZpbmUgZnJlcV9jb3VudF90aW1lIDAKKyNkZWZpbmUgaHBtX3NkbV9pbl9tYW51YWwgMAorI2RlZmluZSBocG1fc2RtX291dF9pbnZlcnQgMAorI2RlZmluZSBocG1fc2RtX2luX2Rpc2FibGUgMAorI2RlZmluZSBocG1fbGZzcl9zaXplIDQKKyNkZWZpbmUgaHBtX2R0aF9zY2wgMAorI2RlZmluZSBocG1fZHRoX2VuIDEKKyNkZWZpbmUgaHBtX2ludGVnZXJfc2NhbGUgMAorI2RlZmluZSBocG1faW50ZWdlcl9pbnZlcnQgMAorI2RlZmluZSBocG1fY2FsX2ludmVydCAxCisjZGVmaW5lIGhwbV9tb2RfaW5faW52ZXJ0IDEKKyNkZWZpbmUgaHBtX2NhbF9ub3RfYnVtcGVkIDAKKyNkZWZpbmUgaHBtX2NhbF9jb3VudF9zY2FsZSAwCisjZGVmaW5lIGhwX2NhbF9kaXNhYmxlIDAKKyNkZWZpbmUgaHBtX2NhbF9mYWN0b3JfbWFudWFsIDAKKyNkZWZpbmUgaHBtX2NhbF9hcnJheV9zaXplIDEKKyNkZWZpbmUgaHBtX2NhbF90aW1lIDAKKyNkZWZpbmUgaHBtX3NkbV9kZW5vbSAyNTYKKyNkZWZpbmUgaHBtX2NvdW50X2FkanVzdCAwCisjZGVmaW5lIHBsbF9sZF9tYW51YWwgMAorI2RlZmluZSBwbGxfbGRfZGlzYWJsZSAwCisjZGVmaW5lIGxwbV9zZG1faW52IDAKKyNkZWZpbmUgbHBtX2Rpc2FibGUgMAorI2RlZmluZSBscG1fZHRoX3NjbCA4CisjZGVmaW5lIGxwbV9kX2N0cmwgMQorI2RlZmluZSBscG1fZF9vdnJkIDEKKyNkZWZpbmUgbHBtX3NjYWxlIDgKKyNkZWZpbmUgbHBtX3NkbV91c2VfbmVnIDAKKyNkZWZpbmUgaHBtX2FycmF5X2JpYXMgMAorI2RlZmluZSBscG1faW50ZyAzOAorI2RlZmluZSBzZG1fbWFwX2Rpc2FibGUgMAorI2RlZmluZSBscG1fc2RtX2RlbGF5IDQKKyNkZWZpbmUgaHBtX3NkbV9kZWxheSAwCisjZGVmaW5lIGhwbV9pbnRlZ2VyX2RlbGF5IDAKKyNkZWZpbmUgY3R1bmVfdGFyZ2V0X21hbnVhbCAwCisjZGVmaW5lIGN0dW5lX3RhcmdldF9kaXNhYmxlIDAKKyNkZWZpbmUgY3R1bmVfYWRqdXN0IDAKKyNkZWZpbmUgY3R1bmVfbWFudWFsIDAKKyNkZWZpbmUgY3R1bmVfZGlzYWJsZSAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAucGxsX2hwbV9idW1wID0gWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX0NBTChocG1fZmRiX3Jlc19jYWwpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9CVU1QX0hQTV9GREJfUkVTX1RYKGhwbV9mZGJfcmVzX3R4KSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQlVNUF9IUE1fVkNNX0NBTChocG1fdmNtX2NhbCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0JVTVBfSFBNX1ZDTV9UWChocG1fdmNtX3R4KSwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC5wbGxfbW9kX2N0cmwgPSBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9ESVNBQkxFKGhwbV9tb2RfZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTU9EX0NUUkxfSFBNX01PRF9NQU5VQUwoaHBtX21vZF9tYW51YWwpIHwgCisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9IUE1fU0RNX09VVF9ESVNBQkxFKGhwbV9zZG1fb3V0X2Rpc2FibGUpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX01PRF9DVFJMX0hQTV9TRE1fT1VUX01BTlVBTChocG1fc2RtX291dF9tYW51YWwpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX01PRF9DVFJMX01PRF9ESVNBQkxFKG1vZF9kaXNhYmxlKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19NT0RfQ1RSTF9NT0RVTEFUSU9OX1dPUkRfTUFOVUFMKG1vZHVsYXRpb25fd29yZF9tYW51YWwpLAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgLnBsbF9jaGFuX21hcCA9IFhDVlJfUExMX0RJR19DSEFOX01BUF9CTVIoYm1yKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19DSEFOX01BUF9CT0MoYm9jKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTShjaGFubmVsX251bSkKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfWk9DKHpvYykKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC5wbGxfbG9ja19kZXRlY3QgPSBYQ1ZSX1BMTF9ESUdfTE9DS19ERVRFQ1RfQ1RVTkVfTERGX0xFVihjdHVuZV9sZGZfbGV2KSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MT0NLX0RFVEVDVF9GUkVRX0NPVU5UX0dPKGZyZXFfY291bnRfZ28pIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZSRVFfQ09VTlRfVElNRShmcmVxX2NvdW50X3RpbWUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9SWF9USFJTSChmdGZfcnhfdGhyc2gpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZURl9UWF9USFJTSChmdGZfdHhfdGhyc2gpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19SWChmdHdfcngpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xPQ0tfREVURUNUX0ZUV19UWChmdHdfdHgpLAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgLnBsbF9ocG1fY3RybCA9IFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fQ0FMX0lOVkVSVChocG1fY2FsX2ludmVydCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0RUSF9FTihocG1fZHRoX2VuKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fRFRIX1NDTChocG1fZHRoX3NjbCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfSU5WRVJUKGhwbV9pbnRlZ2VyX2ludmVydCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX0lOVEVHRVJfU0NBTEUoaHBtX2ludGVnZXJfc2NhbGUpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9MRlNSX1NJWkUoaHBtX2xmc3Jfc2l6ZSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfSFBNX0NUUkxfSFBNX01PRF9JTl9JTlZFUlQoaHBtX21vZF9pbl9pbnZlcnQpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fRElTQUJMRShocG1fc2RtX2luX2Rpc2FibGUpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTV9DVFJMX0hQTV9TRE1fSU5fTUFOVUFMKGhwbV9zZG1faW5fbWFudWFsKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fQ1RSTF9IUE1fU0RNX09VVF9JTlZFUlQoaHBtX3NkbV9vdXRfaW52ZXJ0KSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAucGxsX2hwbWNhbF9jdHJsID0gWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQX0NBTF9ESVNBQkxFKGhwX2NhbF9kaXNhYmxlKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0FSUkFZX1NJWkUoaHBtX2NhbF9hcnJheV9zaXplKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1DQUxfQ1RSTF9IUE1fQ0FMX0NPVU5UX1NDQUxFKGhwbV9jYWxfY291bnRfc2NhbGUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfRkFDVE9SX01BTlVBTChocG1fY2FsX2ZhY3Rvcl9tYW51YWwpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfTk9UX0JVTVBFRChocG1fY2FsX25vdF9idW1wZWQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0hQTUNBTF9DVFJMX0hQTV9DQUxfVElNRShocG1fY2FsX3RpbWUpLAorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC5wbGxfaHBtX3NkbV9yZXMgPSBYQ1ZSX1BMTF9ESUdfSFBNX1NETV9SRVNfSFBNX0NPVU5UX0FESlVTVChocG1fY291bnRfYWRqdXN0KSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19IUE1fU0RNX1JFU19IUE1fREVOT00oaHBtX3NkbV9kZW5vbSksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC5wbGxfbHBtX2N0cmwgPSBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX0RfQ1RSTChscG1fZF9jdHJsKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRF9PVlJEKGxwbV9kX292cmQpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9ESVNBQkxFKGxwbV9kaXNhYmxlKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9MUE1fRFRIX1NDTChscG1fZHRoX3NjbCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NDQUxFKGxwbV9zY2FsZSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfTFBNX0NUUkxfTFBNX1NETV9JTlYobHBtX3NkbV9pbnYpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9DVFJMX0xQTV9TRE1fVVNFX05FRyhscG1fc2RtX3VzZV9uZWcpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9DVFJMX1BMTF9MRF9ESVNBQkxFKHBsbF9sZF9kaXNhYmxlKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fQ1RSTF9QTExfTERfTUFOVUFMKHBsbF9sZF9tYW51YWwpLAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAucGxsX2xwbV9zZG1fY3RybDEgPSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9IUE1fQVJSQVlfQklBUyhocG1fYXJyYXlfYmlhcykgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHKGxwbV9pbnRnKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFKHNkbV9tYXBfZGlzYWJsZSksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC5wbGxfZGVsYXlfbWF0Y2ggPSBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfSFBNX0lOVEVHRVJfREVMQVkoaHBtX2ludGVnZXJfZGVsYXkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QTExfRElHX0RFTEFZX01BVENIX0hQTV9TRE1fREVMQVkoaHBtX3NkbV9kZWxheSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfREVMQVlfTUFUQ0hfTFBNX1NETV9ERUxBWShscG1fc2RtX2RlbGF5KSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLnBsbF9jdHVuZV9jdHJsID0gWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfQURKVVNUKGN0dW5lX2FkanVzdCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX0RJU0FCTEUoY3R1bmVfZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX01BTlVBTChjdHVuZV9tYW51YWwpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BMTF9ESUdfQ1RVTkVfQ1RSTF9DVFVORV9UQVJHRVRfRElTQUJMRShjdHVuZV90YXJnZXRfZGlzYWJsZSkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19DVFVORV9DVFJMX0NUVU5FX1RBUkdFVF9NQU5VQUwoY3R1bmVfdGFyZ2V0X21hbnVhbCksCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIC8qIE5PVEU6IENsb2NrIHNwZWNpZmljIHNldHRpbmdzIGFyZSBlbWJlZGRlZCBpbiB0aGUgbW9kZSBkZXBlbmRlbnQgY29uZmlncyAqLworICAgIC5yeF9kaWdfY3RybF9pbml0ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX05FR0VER0UoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQ0hfRklMVF9CWVBBU1MoMCkgfAorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BRENfUkFXX0VOKDApIHwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQURDX1BPTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9OT1JNX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1JTU0lfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfSVFfU1dBUCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfSFpEX0NPUlJfRElTKDEpLAorCisgICAgLmFnY19jdHJsXzBfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfU0xPV19BR0NfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX1NMT1dfQUdDX1NSQygyKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0ZSRUVaRV9QUkVfT1JfQUEoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19VUF9FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX1VQX1NSQygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fQkJBX1NURVBfU1ooMikgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX0xOQV9TVEVQX1NaKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMF9BR0NfVVBfUlNTSV9USFJFU0goMHhlNyksCisKKyAgICAuYWdjX2N0cmxfM19pbml0ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfVU5GUkVFWkVfVElNRSgyMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19QREVUX0xPX0RMWSgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzNfQUdDX1JTU0lfREVMVF9IMlMoMjApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfM19BR0NfSDJTX1NURVBfU1ooNikgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8zX0FHQ19VUF9TVEVQX1NaKDIpLCAgICAKKworICAgIC8qIERDT0MgY29uZmlncyAqLworICAgIC5kY29jX2N0cmxfMF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DQUxfRFVSQVRJT04oMTYpIHwgLyogT25seSB0aGUgZHVyYXRpb24gY2hhbmdlcyBiZXR3ZWVuIDI2TUh6IGFuZCAzMk1IeiByZWYgb3NjIHNldHRpbmdzICovCisjaWYgKFJBRElPX0lTX0dFTl8yUDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NBTF9DSEVDS19FTigwKSB8CisjZW5kaWYgLyogKFJBRElPX0lTX0dFTl8yUDEpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9UUkFDS19GUk9NX1pFUk8oMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX0VOKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RaQV9DT1JSX1BPTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9CQkFfQ09SUl9QT0woMCkgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkMoMSksCisgICAgLmRjb2NfY3RybF8wX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NBTF9EVVJBVElPTigyMCkgfCAvKiBPbmx5IHRoZSBkdXJhdGlvbiBjaGFuZ2VzIGJldHdlZW4gMjZNSHogYW5kIDMyTUh6IHJlZiBvc2Mgc2V0dGluZ3MgKi8KKyNpZiAoUkFESU9fSVNfR0VOXzJQMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ0FMX0NIRUNLX0VOKDApIHwKKyNlbmRpZiAvKiAoUkFESU9fSVNfR0VOXzJQMSkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX1RSQUNLX0ZST01fWkVSTygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfVFpBX0NPUlJfUE9MKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0JCQV9DT1JSX1BPTCgwKSB8ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkMoMSksCisgICAgCisgICAgLmRjb2NfY3RybF8xX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19NSU5fQUdDX0lEWCgyNiksCisKKyAgICAuZGNfcmVzaWRfY3RybF9pbml0ID0gWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9JVEVSX0ZSRUVaRSg0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfQUxQSEEoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0VYVF9EQ19FTigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTUlOX0FHQ19JRFgoMjYpLAorCisgICAgLmRjb2NfY2FsX2dhaW5faW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19CQkFfQ0FMX0dBSU4xKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0xOQV9DQUxfR0FJTjEoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfQkJBX0NBTF9HQUlOMigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0dBSU5fRENPQ19MTkFfQ0FMX0dBSU4yKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfR0FJTl9EQ09DX0JCQV9DQUxfR0FJTjMoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9HQUlOX0RDT0NfTE5BX0NBTF9HQUlOMygxKSAsCisKKyAgICAuZGNvY19jYWxfcmNwX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9SQ1BfQUxQSEFfQ0FMQ19SRUNJUCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfUkNQX0RDT0NfVE1QX0NBTENfUkVDSVAoNzExKSwKKworICAgIC5sbmFfZ2Fpbl92YWxfM18wID0gWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMCgweDFEVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMSgweDMyVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMigweDA5VSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzNfMF9MTkFfR0FJTl9WQUxfMygweDM4VSksCisKKyAgICAubG5hX2dhaW5fdmFsXzdfNCA9IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzQoMHg0RlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzUoMHg1QlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzYoMHg3MlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF83XzRfTE5BX0dBSU5fVkFMXzcoMHg4QVUpLAorICAgIC5sbmFfZ2Fpbl92YWxfOCA9IFhDVlJfUlhfRElHX0xOQV9HQUlOX1ZBTF84X0xOQV9HQUlOX1ZBTF84KDB4QTBVKSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fVkFMXzhfTE5BX0dBSU5fVkFMXzkoMHhCNlUpLAorCisgICAgLmJiYV9yZXNfdHVuZV92YWxfN18wID0gWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8wKDB4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfMSgweDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzIoMHgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF8zKDB4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNCgweDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzdfMF9CQkFfUkVTX1RVTkVfVkFMXzUoMHgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX1ZBTF83XzBfQkJBX1JFU19UVU5FX1ZBTF82KDB4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9WQUxfN18wX0JCQV9SRVNfVFVORV9WQUxfNygweEYpLAorICAgIC5iYmFfcmVzX3R1bmVfdmFsXzEwXzggPSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF84KDB4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF85KDB4MSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfVkFMXzEwXzhfQkJBX1JFU19UVU5FX1ZBTF8xMCgweDIpLAorCisgICAgLmxuYV9nYWluX2xpbl92YWxfMl8wX2luaXQgPSBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzJfMF9MTkFfR0FJTl9MSU5fVkFMXzAoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF8yXzBfTE5BX0dBSU5fTElOX1ZBTF8xKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfMl8wX0xOQV9HQUlOX0xJTl9WQUxfMigxKSwKKworICAgIC5sbmFfZ2Fpbl9saW5fdmFsXzVfM19pbml0ID0gWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF81XzNfTE5BX0dBSU5fTElOX1ZBTF8zKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfNV8zX0xOQV9HQUlOX0xJTl9WQUxfNCg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzVfM19MTkFfR0FJTl9MSU5fVkFMXzUoNyksCisKKyAgICAubG5hX2dhaW5fbGluX3ZhbF84XzZfaW5pdCA9IFhDVlJfUlhfRElHX0xOQV9HQUlOX0xJTl9WQUxfOF82X0xOQV9HQUlOX0xJTl9WQUxfNigxNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF84XzZfTE5BX0dBSU5fTElOX1ZBTF83KDI3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19MTkFfR0FJTl9MSU5fVkFMXzhfNl9MTkFfR0FJTl9MSU5fVkFMXzgoNTApLAorCisgICAgLmxuYV9nYWluX2xpbl92YWxfOV9pbml0ID0gWENWUl9SWF9ESUdfTE5BX0dBSU5fTElOX1ZBTF85X0xOQV9HQUlOX0xJTl9WQUxfOSg5MSksCisKKyAgICAuYmJhX3Jlc190dW5lX2xpbl92YWxfM18wX2luaXQgPSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMCg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfM18wX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEoMTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzBfQkJBX1JFU19UVU5FX0xJTl9WQUxfMigxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzNfMF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8zKDIyKSwKKworICAgIC5iYmFfcmVzX3R1bmVfbGluX3ZhbF83XzRfaW5pdCA9IFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF80KDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfN180X0JCQV9SRVNfVFVORV9MSU5fVkFMXzUoNDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF83XzRfQkJBX1JFU19UVU5FX0xJTl9WQUxfNig2MikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzdfNF9CQkFfUkVTX1RVTkVfTElOX1ZBTF83KDQyKSwgLyogSGFzIDIgZnJhY3Rpb25hbCBiaXRzIHVubGlrZSBvdGhlciBCQkFfUkVTX1RVTkVfTElOX1ZBTHMgKi8KKworICAgIC5iYmFfcmVzX3R1bmVfbGluX3ZhbF8xMF84X2luaXQgPSBYQ1ZSX1JYX0RJR19CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMF84X0JCQV9SRVNfVFVORV9MSU5fVkFMXzgoMTI4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0JCQV9SRVNfVFVORV9MSU5fVkFMXzEwXzhfQkJBX1JFU19UVU5FX0xJTl9WQUxfOSgxODgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOF9CQkFfUkVTX1RVTkVfTElOX1ZBTF8xMCgyODgpLAorCisgICAgLmRjb2NfYmJhX3N0ZXBfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9SRUNJUCg5MzkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19CQkFfU1RFUF9CQkFfRENPQ19TVEVQKDI3OSksCisKKyAgICAuZGNvY190emFfc3RlcF8wMF9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wKDc3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX1JDUF8wKDM0MDQpLAorICAgIC5kY29jX3R6YV9zdGVwXzAxX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9HQUlOXzEoMTA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX1JDUF8xKDI0MzkpLAorICAgIC5kY29jX3R6YV9zdGVwXzAyX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzJfRENPQ19UWkFfU1RFUF9HQUlOXzIoMTU1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yKDE2OTEpLAorICAgIC5kY29jX3R6YV9zdGVwXzAzX2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9HQUlOXzMoMjIwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX1JDUF8zKDExOTIpLAorICAgIC5kY29jX3R6YV9zdGVwXzA0X2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9HQUlOXzQoMzE0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX1JDUF80KDgzNSksCisgICAgLmRjb2NfdHphX3N0ZXBfMDVfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX0dBSU5fNSg0MzYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfUkNQXzUoNjAxKSwKKyAgICAuZGNvY190emFfc3RlcF8wNl9pbml0ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82KDYxNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9SQ1BfNig0MjcpLAorICAgIC5kY29jX3R6YV9zdGVwXzA3X2luaXQgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9HQUlOXzcoODQ1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX1JDUF83KDMxMCksCisgICAgLmRjb2NfdHphX3N0ZXBfMDhfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX0dBSU5fOCgxMjU2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX1JDUF84KDIwOSksCisgICAgLmRjb2NfdHphX3N0ZXBfMDlfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX0dBSU5fOSgxODA1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85KDE0NSksCisgICAgLmRjb2NfdHphX3N0ZXBfMTBfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9HQUlOXzEwKDI2NTMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMCg5OSksCisjaWYgKFJBRElPX0lTX0dFTl8yUDEpCisgICAgLmRjb2NfY2FsX2ZhaWxfdGhfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0ZBSUxfVEhfRENPQ19DQUxfQkVUQV9GX1RIKDIwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0ZBSUxfVEhfRENPQ19DQUxfQUxQSEFfRl9USCgxMCksCisgICAgLmRjb2NfY2FsX3Bhc3NfdGhfaW5pdCA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX1BBU1NfVEhfRENPQ19DQUxfQkVUQV9QX1RIKDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX1BBU1NfVEhfRENPQ19DQUxfQUxQSEFfUF9USCgyKSwKKyNlbmRpZiAvKiAoUkFESU9fSVNfR0VOXzJQMSkgKi8KKyAgICAvKiBBR0MgQ29uZmlncyAqLyAgICAKKyAgICAuYWdjX2dhaW5fdGJsXzAzXzAwX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDAoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMCgwKSB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9MTkFfR0FJTl8wMSgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0JCQV9HQUlOXzAxKDEpIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzAzXzAwX0xOQV9HQUlOXzAyKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfQkJBX0dBSU5fMDIoMSkgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDNfMDBfTE5BX0dBSU5fMDMoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wM18wMF9CQkFfR0FJTl8wMygyKSwKKworICAgIC5hZ2NfZ2Fpbl90YmxfMDdfMDRfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA0KDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfTE5BX0dBSU5fMDUoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9CQkFfR0FJTl8wNSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0xOQV9HQUlOXzA2KDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMDdfMDRfQkJBX0dBSU5fMDYoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8wN18wNF9MTkFfR0FJTl8wNygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzA3XzA0X0JCQV9HQUlOXzA3KDIpLAorCisgICAgLmFnY19nYWluX3RibF8xMV8wOF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzA4KDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMDgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9MTkFfR0FJTl8wOSg0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0JCQV9HQUlOXzA5KDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfTE5BX0dBSU5fMTAoNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xMV8wOF9CQkFfR0FJTl8xMCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzExXzA4X0xOQV9HQUlOXzExKDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTFfMDhfQkJBX0dBSU5fMTEoNCksCisKKyAgICAuYWdjX2dhaW5fdGJsXzE1XzEyX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTIoNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xMig0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0xOQV9HQUlOXzEzKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfQkJBX0dBSU5fMTMoNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9MTkFfR0FJTl8xNCg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE1XzEyX0JCQV9HQUlOXzE0KDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTVfMTJfTE5BX0dBSU5fMTUoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xNV8xMl9CQkFfR0FJTl8xNSg1KSwKKworICAgIC5hZ2NfZ2Fpbl90YmxfMTlfMTZfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xNig2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE2KDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfTE5BX0dBSU5fMTcoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9CQkFfR0FJTl8xNyg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0xOQV9HQUlOXzE4KDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMTlfMTZfQkJBX0dBSU5fMTgoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8xOV8xNl9MTkFfR0FJTl8xOSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzE5XzE2X0JCQV9HQUlOXzE5KDcpLAorCisgICAgLmFnY19nYWluX3RibF8yM18yMF9pbml0ID0gWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIwKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjAoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9MTkFfR0FJTl8yMSg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0JCQV9HQUlOXzIxKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfTE5BX0dBSU5fMjIoOSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yM18yMF9CQkFfR0FJTl8yMig2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzIzXzIwX0xOQV9HQUlOXzIzKDkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjNfMjBfQkJBX0dBSU5fMjMoNyksCisKKyAgICAuYWdjX2dhaW5fdGJsXzI2XzI0X2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfTE5BX0dBSU5fMjQoOSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9CQkFfR0FJTl8yNCg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0xOQV9HQUlOXzI1KDkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfR0FJTl9UQkxfMjZfMjRfQkJBX0dBSU5fMjUoOSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19HQUlOX1RCTF8yNl8yNF9MTkFfR0FJTl8yNig5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0dBSU5fVEJMXzI2XzI0X0JCQV9HQUlOXzI2KDEwKSwKKyAgICAKKyAgICAucnNzaV9jdHJsXzBfaW5pdCA9IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVVNFX1ZBTFMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9IT0xEX1NSQygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfQ1dfV0VJR0hUKDApIHwKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9OX1dJTkRPV19BVkcoMSkgfAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfTl9XSU5ET1dfTkIoMSkgfAorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0hPTERfREVMQVkoNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlNTSV9DVFJMXzBfUlNTSV9JSVJfV0VJR0hUKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfVkxEX1NFVFRMRSgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESigweEU4KSAsCisKKyAgICAuY2NhX2VkX2xxaV9jdHJsXzBfaW5pdCA9IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DT1JSX1RIUkVTSCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMF9DT1JSX0NOVFJfVEhSRVNIKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX0xRSV9DTlRSKDB4MUEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8wX1NOUl9BREooMCksCisKKyAgICAuY2NhX2VkX2xxaV9jdHJsXzFfaW5pdCA9IFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0RFTEFZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1JTU0lfTk9JU0VfQVZHX0ZBQ1RPUigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9XRUlHSFQoMHg0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9MUUlfUlNTSV9TRU5TKDB4NykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfU05SX0xRSV9ESVMoMCkgfAorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9TRUxfU05SX01PREUoMCkgfAorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19DQ0FfRURfTFFJX0NUUkxfMV9NRUFTX1RSQU5TX1RPX0lETEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfQ0NBMV9FRF9FTl9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX01FQVNfQ09NUExFVEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTUFOX0FBX01BVENIKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0NDQV9FRF9MUUlfQ1RSTF8xX1NOUl9MUUlfV0VJR0hUKDB4NSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQ0NBX0VEX0xRSV9DVFJMXzFfTFFJX0JJQVMoMHgyKSwKKworICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyAgICAudHNtX2N0cmwgPSBYQ1ZSX1RTTV9DVFJMX1BBX1JBTVBfU0VMKFBBX1JBTVBfU0VMKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9EQVRBX1BBRERJTkdfRU4oREFUQV9QQURESU5HX0VOKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9UU01fSVJRMF9FTigwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9UU01fSVJRMV9FTigwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9SQU1QX0ROX0RFTEFZKDB4NCkgfAorICAgICAgICAgICAgICAgIFhDVlJfVFNNX0NUUkxfVFhfQUJPUlRfRElTKDApIHwKKyAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9DVFJMX1JYX0FCT1JUX0RJUygwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DVFVORSgwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9BQk9SVF9PTl9DWUNMRV9TTElQKDApIHwKKyAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9DVFJMX0FCT1JUX09OX0ZSRVFfVEFSRygwKSB8CisgICAgICAgICAgICAgICAgWENWUl9UU01fQ1RSTF9CS1BUKDB4RkYpICwKKworICAgIC50c21fb3ZyZDJfaW5pdCA9IFhDVlJfVFNNX09WUkQyX0ZSRVFfVEFSR19MRF9FTl9PVlJEKDApIHwgWENWUl9UU01fT1ZSRDJfRlJFUV9UQVJHX0xEX0VOX09WUkRfRU5fTUFTSywKKyAgICAuZW5kX29mX3NlcV9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKEVORF9PRl9SWF9XVV8yNk1IWikgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoRU5EX09GX1RYX1dVKSwKKyAgICAuZW5kX29mX3NlcV9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKEVORF9PRl9SWF9XVSkgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoRU5EX09GX1RYX1dVKSwKKworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgLmxwcHNfY3RybF9pbml0ID0gQjMoMTAyKSB8IEIyKDQwKSB8IEIxKDApIHwgQjAoMCksCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKworICAgIC50c21fZmFzdF9jdHJsMl9pbml0XzI2bWh6ID0gQjMoMTAyICsgQUREX0ZPUl8yNk1IWikgfCBCMig0MCArIEFERF9GT1JfMjZNSFopIHwgQjEoNjYpIHwgQjAoOCksCisgICAgLnRzbV9mYXN0X2N0cmwyX2luaXRfMzJtaHogPSBCMygxMDIpIHwgQjIoNDApIHwgQjEoNjYpIHwgQjAoOCksCisKKyAgICAucGFfcmFtcF90YmxfMF9pbml0ID0gWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAwKFBBX1JBTVBfMCkgfCBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDBfUEFfUkFNUDEoUEFfUkFNUF8xKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1BBX1JBTVBfVEJMMF9QQV9SQU1QMihQQV9SQU1QXzIpIHwgWENWUl9UU01fUEFfUkFNUF9UQkwwX1BBX1JBTVAzKFBBX1JBTVBfMyksCisgICAgLnBhX3JhbXBfdGJsXzFfaW5pdCA9IFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNChQQV9SQU1QXzQpIHwgWENWUl9UU01fUEFfUkFNUF9UQkwxX1BBX1JBTVA1KFBBX1JBTVBfNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9QQV9SQU1QX1RCTDFfUEFfUkFNUDYoUEFfUkFNUF82KSB8IFhDVlJfVFNNX1BBX1JBTVBfVEJMMV9QQV9SQU1QNyhQQV9SQU1QXzcpLAorCisgICAgLnJlY3ljbGVfY291bnRfaW5pdF8yNm1oeiA9IEIzKDApIHwgQjIoMHgxQyArIEFERF9GT1JfMjZNSFopIHwgQjEoMHgwNikgfCBCMCgweDY2ICsgQUREX0ZPUl8yNk1IWiksCisgICAgLnJlY3ljbGVfY291bnRfaW5pdF8yNm1oeiA9IEIzKDApIHwgQjIoMHgxQykgfCBCMSgweDA2KSB8IEIwKDB4NjYpLAorCisgICAgLnRzbV90aW1pbmdfMDBfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAwKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAwKSwgLyogYmJfbGRvX2hmX2VuICovCisgICAgLnRzbV90aW1pbmdfMDFfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAwKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAwKSwgLyogYmJfbGRvX2FkY2RhY19lbiAqLworICAgIC50c21fdGltaW5nXzAyX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMCkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiBiYl9sZG9fYmJhX2VuICovCisgICAgLnRzbV90aW1pbmdfMDNfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAwKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAwKSwgLyogYmJfbGRvX3BkX2VuICovCisgICAgLnRzbV90aW1pbmdfMDRfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAwKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAwKSwgLyogYmJfbGRvX2ZkYmtfZW4gKi8KKyAgICAudHNtX3RpbWluZ18wNV9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDApIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDApLCAvKiBiYl9sZG9fdmNvbG9fZW4gKi8KKyAgICAudHNtX3RpbWluZ18wNl9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDApIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDApLCAvKiBiYl9sZG9fdnRyZWZfZW4gKi8KKyAgICAudHNtX3RpbWluZ18wN19pbml0ID0gQjMoMHgwNSkgfCBCMigweDAwKSB8IEIxKDB4MDUpIHwgQjAoMHgwMCksIC8qIGJiX2xkb19mZGJrX2JsZWVkX2VuICovCisgICAgLnRzbV90aW1pbmdfMDhfaW5pdCA9IEIzKDB4MDMpIHwgQjIoMHgwMCkgfCBCMSgweDAzKSB8IEIwKDB4MDApLCAvKiBiYl9sZG9fdmNvbG9fYmxlZWRfZW4gKi8KKyAgICAudHNtX3RpbWluZ18wOV9pbml0ID0gQjMoMHgwMykgfCBCMigweDAwKSB8IEIxKDB4MDMpIHwgQjAoMHgwMCksIC8qIGJiX2xkb192Y29sb19mYXN0Y2hhcmdlX2VuICovCisKKyAgICAudHNtX3RpbWluZ18xMF9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAzKSwgLyogYmJfeHRhbF9wbGxfcmVmX2Nsa19lbiAqLworICAgIC50c21fdGltaW5nXzExX2luaXQgPSBCMygweEZGKSB8IEIyKDB4RkYpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDMpLCAvKiBiYl94dGFsX2RhY19yZWZfY2xrX2VuICovCisgICAgLnRzbV90aW1pbmdfMTJfaW5pdCA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeHR4X2F1eHBsbF92Y29fcmVmX2Nsa19lbiAqLworICAgIC50c21fdGltaW5nXzEzX2luaXQgPSBCMygweDE4KSB8IEIyKDB4MDApIHwgQjEoMHg0QykgfCBCMCgweDAwKSwgLyogc3lfdmNvX2F1dG90dW5lX2VuICovCisgICAgLnRzbV90aW1pbmdfMTRfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDMxK0FERF9GT1JfMjZNSFopIHwgQjEoRU5EX09GX1RYX1dVICsgUERfQ1lDTEVfU0xJUF9UWF9MT19BREopIHwgQjAoMHg2MyArIFBEX0NZQ0xFX1NMSVBfVFhfSElfQURKKSwgLyogc3lfcGRfY3ljbGVfc2xpcF9sZF9mdF9lbiAqLworICAgIC50c21fdGltaW5nXzE0X2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgzMSArIEFVWF9QTExfREVMQVkpIHwgQjEoRU5EX09GX1RYX1dVICsgUERfQ1lDTEVfU0xJUF9UWF9MT19BREopIHwgQjAoMHg2MyArIFBEX0NZQ0xFX1NMSVBfVFhfSElfQURKKSwKKyAgICAudHNtX3RpbWluZ18xNV9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAzKSwgLyogc3lfdmNvX2VuICovCisgICAgLnRzbV90aW1pbmdfMTZfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDFDICsgQUREX0ZPUl8yNk1IWikgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiBzeV9sb19yeF9idWZfZW4gKi8KKyAgICAudHNtX3RpbWluZ18xNl9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MUMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfMTdfaW5pdCA9IEIzKDB4RkYpIHwgQjIoMHhGRikgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHg1NSksIC8qIHN5X2xvX3R4X2J1Zl9lbiAqLworICAgIC50c21fdGltaW5nXzE4X2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwNSArIEFVWF9QTExfREVMQVkpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDUpLCAvKiBzeV9kaXZuX2VuICovCisgICAgLnRzbV90aW1pbmdfMTlfaW5pdCA9IEIzKDB4MTgrQVVYX1BMTF9ERUxBWSkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweDRDKSB8IEIwKDB4MDMpLCAvKiBzeV9wZF9maWx0ZXJfY2hhcmdlX2VuICovCisKKyAgICAudHNtX3RpbWluZ18yMF9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDAzKSwgLyogc3lfcGRfZW4gKi8KKyAgICAudHNtX3RpbWluZ18yMV9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDQgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDA0KSwgLyogc3lfbG9fZGl2bl9lbiAqLworICAgIC50c21fdGltaW5nXzIyX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwNCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCAgICAgICAgICAgQjAoMHhGRiksIC8qIHN5X2xvX3J4X2VuICovCisgICAgLnRzbV90aW1pbmdfMjNfaW5pdCA9IEIzKDB4RkYpIHwgQjIoMHhGRikgfCBCMShFTkRfT0ZfVFhfV0QpIHwgQjAoMHgwNCksIC8qc3lfbG9fdHhfZW4gICovCisgICAgLnRzbV90aW1pbmdfMjRfaW5pdCA9IEIzKDB4MTgpIHwgQjIoMHgwMCkgfCBCMSgweDRDKSB8IEIwKDB4MDApLCAvKiBzeV9kaXZuX2NhbF9lbiAqLworICAgIC50c21fdGltaW5nXzI1X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgxRCArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2xuYV9taXhlcl9lbiAqLworICAgIC50c21fdGltaW5nXzI1X2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgxRCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18yNl9pbml0ID0gQjMoMHhGRikgfCBCMigweEZGKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDU4KSwgLyogdHhfcGFfZW4gKi8KKyAgICAudHNtX3RpbWluZ18yN19pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MjAgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF9hZGNfaV9xX2VuICovCisgICAgLnRzbV90aW1pbmdfMjdfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDIwICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzI4X2luaXRfMjZtaHogPSBCMygweDIxICsgQUREX0ZPUl8yNk1IWikgfCBCMigweDIwICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnhfYWRjX3Jlc2V0X2VuICovCisgICAgLnRzbV90aW1pbmdfMjhfaW5pdF8zMm1oeiA9IEIzKDB4MjEgKyBBVVhfUExMX0RFTEFZKSB8IEIyKDB4MjAgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfMjlfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDFFICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnhfYmJhX2lfcV9lbiAqLworICAgIC50c21fdGltaW5nXzI5X2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgxRSArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKworICAgIC50c21fdGltaW5nXzMwX2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgyMCArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2JiYV9wZGV0X2VuICovCisgICAgLnRzbV90aW1pbmdfMzBfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDIwICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzMxX2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgxRiArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2JiYV90emFfZGNvY19lbiAqLworICAgIC50c21fdGltaW5nXzMxX2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgxRiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18zMl9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MUQgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF90emFfaV9xX2VuICovCisgICAgLnRzbV90aW1pbmdfMzJfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDFEICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzMzX2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgyMCArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X3R6YV9wZGV0X2VuICovCisgICAgLnRzbV90aW1pbmdfMzNfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDIwICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzM0X2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwNyArIEFVWF9QTExfREVMQVkpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDcpLCAvKiBwbGxfZGlnX2VuICovCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIzKDB4RkYpIHwgQjIoMHhGRikgfCBCMShFTkRfT0ZfVFhfV0QpLCAvKiB0eF9kaWdfZW4gLSBCeXRlIDAgY29tZXMgZnJvbSBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCisgICAgLnRzbV90aW1pbmdfMzZfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDY2ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnhfZGlnX2VuICovCisgICAgLnRzbV90aW1pbmdfMzZfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDY2ICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzM3X2luaXRfMjZtaHogPSBCMygweDY3ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjIoMHg2NiArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4X2luaXQgKi8KKyAgICAudHNtX3RpbWluZ18zN19pbml0XzMybWh6ID0gQjMoMHg2NyArIEFVWF9QTExfREVMQVkpIHwgQjIoMHg2NiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ18zOF9pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MEUgKyBBVVhfUExMX0RFTEFZKSB8IEIxKEVORF9PRl9UWF9XRCkgfCBCMCgweDQyKSwgLyogc2lnbWFfZGVsdGFfZW4gKi8KKyAgICAudHNtX3RpbWluZ18zOV9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4NjYgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiByeF9waHlfZW4gKi8KKyAgICAudHNtX3RpbWluZ18zOV9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4NjYgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisKKyAgICAudHNtX3RpbWluZ180MF9pbml0XzI2bWh6ID0gQjMoRU5EX09GX1JYX1dEXzI2TUhaKSB8IEIyKDB4MjYgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLCAvKiBkY29jX2VuICovCisgICAgLnRzbV90aW1pbmdfNDBfaW5pdF8zMm1oeiA9IEIzKEVORF9PRl9SWF9XRCkgfCBCMigweDI2ICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzQxX2luaXRfMjZtaHogPSBCMygweDI3ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgyNiArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIGRjb2NfaW5pdCAqLworICAgIC50c21fdGltaW5nXzQxX2luaXRfMzJtaHogPSBCMygweDI3ICsgQVVYX1BMTF9ERUxBWSkgfCBCMigweDI2ICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzUxX2luaXQgPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgwMyArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnh0eF9hdXhwbGxfYmlhc19lbiAqLworICAgIC50c21fdGltaW5nXzUyX2luaXRfMjZtaHogPSBCMygweDE3ICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgwNiArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4dHhfYXV4cGxsX2ZjYWxfZW4gKi8KKyAgICAudHNtX3RpbWluZ181Ml9pbml0XzMybWh6ID0gQjMoMHgxNyArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgwNiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ181M19pbml0ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MDMgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4dHhfYXV4cGxsX2xmX3BkX2VuICovCisgICAgLnRzbV90aW1pbmdfNTRfaW5pdF8yNm1oeiA9IEIzKDB4MTcgKyBBRERfRk9SXzI2TUhaICsgQVVYX1BMTF9ERUxBWSkgfCBCMigweDAzICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnh0eF9hdXhwbGxfcGRfbGZfZmlsdGVyX2NoYXJnZV9lbiAqLworICAgIC50c21fdGltaW5nXzU0X2luaXRfMzJtaHogPSBCMygweDE3ICsgQVVYX1BMTF9ERUxBWSkgfCBCMigweDAzICsgQVVYX1BMTF9ERUxBWSkgfCBCMSgweEZGKSB8IEIwKDB4RkYpLAorICAgIC50c21fdGltaW5nXzU1X2luaXRfMjZtaHogPSBCMyhFTkRfT0ZfUlhfV0RfMjZNSFopIHwgQjIoMHgyMCArIEFERF9GT1JfMjZNSFogKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksIC8qIHJ4dHhfYXV4cGxsX2FkY19idWZfZW4gKi8KKyAgICAudHNtX3RpbWluZ181NV9pbml0XzMybWh6ID0gQjMoRU5EX09GX1JYX1dEKSB8IEIyKDB4MjAgKyBBVVhfUExMX0RFTEFZKSB8IEIxKDB4RkYpIHwgQjAoMHhGRiksCisgICAgLnRzbV90aW1pbmdfNTZfaW5pdF8yNm1oeiA9IEIzKEVORF9PRl9SWF9XRF8yNk1IWikgfCBCMigweDIwICsgQUREX0ZPUl8yNk1IWiArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLyogcnh0eF9hdXhwbGxfZGlnX2J1Zl9lbiAqLworICAgIC50c21fdGltaW5nXzU2X2luaXRfMzJtaHogPSBCMyhFTkRfT0ZfUlhfV0QpIHwgQjIoMHgyMCArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwKKyAgICAudHNtX3RpbWluZ181N19pbml0ID0gQjMoMHgxQSArIEFVWF9QTExfREVMQVkpIHwgQjIoMHgwMyArIEFVWF9QTExfREVMQVkpIHwgQjEoMHhGRikgfCBCMCgweEZGKSwgLypyeHR4X3JjY2FsX2VuICAqLworICAgIC50c21fdGltaW5nXzU4X2luaXQgPSBCMygweEZGKSB8IEIyKDB4RkYpIHwgQjEoRU5EX09GX1RYX1dEKSB8IEIwKDB4MDMpLCAvKiB0eF9ocG1fZGFjX2VuICovCisKKy8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyNkZWZpbmUgcmFkaW9fZGZ0X21vZGUgMAorI2RlZmluZSBsZnNyX2xlbmd0aCA0CisjZGVmaW5lIGxmc3JfZW4gMAorI2RlZmluZSBkZnRfY2xrX3NlbCA0CisjZGVmaW5lIHR4X2RmdF9lbiAwCisjZGVmaW5lIHNvY190ZXN0X3NlbCAwCisjZGVmaW5lIHR4X2NhcHR1cmVfcG9sIDAKKyNkZWZpbmUgZnJlcV93b3JkX2FkaiAwCisjZGVmaW5lIGxybSAwCisjZGVmaW5lIGRhdGFfcGFkZGluZ19wYXRfMSAweDU1CisjZGVmaW5lIGRhdGFfcGFkZGluZ19wYXRfMCAweEFBCisjZGVmaW5lIGdmc2tfbXVsdGlwbHlfdGFibGVfbWFudWFsIDAKKyNkZWZpbmUgZ2Zza19taSAxCisjZGVmaW5lIGdmc2tfbWxkIDAKKyNkZWZpbmUgZ2Zza19mbGQgMAorI2RlZmluZSBnZnNrX21vZF9pbmRleF9zY2FsaW5nIDAKKyNkZWZpbmUgdHhfaW1hZ2VfZmlsdGVyX292cmRfZW4gMAorI2RlZmluZSB0eF9pbWFnZV9maWx0ZXJfMF9vdnJkIDAKKyNkZWZpbmUgdHhfaW1hZ2VfZmlsdGVyXzFfb3ZyZCAwCisjZGVmaW5lIHR4X2ltYWdlX2ZpbHRlcl8yX292cmQgMAorI2RlZmluZSBnZnNrX2ZpbHRlcl9jb2VmZl9tYW51YWwyIDB4QzA2MzA0MDEKKyNkZWZpbmUgZ2Zza19maWx0ZXJfY29lZmZfbWFudWFsMSAweEJCMjk5NjBECisjZGVmaW5lIGZza19tb2R1bGF0aW9uX3NjYWxlXzAgMHgxODAwCisjZGVmaW5lIGZza19tb2R1bGF0aW9uX3NjYWxlXzEgMHgwODAwCisjZGVmaW5lIGRmdF9tb2RfcGF0dGVybnZhbCAwCisjZGVmaW5lIGN0dW5lX2Jpc3RfZ28gMAorI2RlZmluZSBjdHVuZV9iaXN0X3RocnNobGQgMAorI2RlZmluZSBwYV9hbV9tb2RfZnJlcSAwCisjZGVmaW5lIHBhX2FtX21vZF9lbnRyaWVzIDAKKyNkZWZpbmUgcGFfYW1fbW9kX2VuIDAKKyNkZWZpbmUgc3luX2Jpc3RfZ28gMAorI2RlZmluZSBzeW5fYmlzdF9hbGxfY2hhbm5lbHMgMAorI2RlZmluZSBmcmVxX2NvdW50X3RocmVzaG9sZCAwCisjZGVmaW5lIGhwbV9pbmxfYmlzdF9nbyAwCisjZGVmaW5lIGhwbV9kbmxfYmlzdF9nbyAwCisjZGVmaW5lIGRmdF9tYXhfcmFtX3NpemUgMAorCisgICAgLnR4X2N0cmwgPSBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFKHJhZGlvX2RmdF9tb2RlKSB8CisgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfTEVOR1RIKGxmc3JfbGVuZ3RoKSB8CisgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX0xGU1JfRU4obGZzcl9lbikgfAorICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTChkZnRfY2xrX3NlbCkgfAorICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU4odHhfZGZ0X2VuKSB8CisgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19DVFJMX1NPQ19URVNUX1NFTChzb2NfdGVzdF9zZWwpIHwKKyAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfQ0FQVFVSRV9QT0wodHhfY2FwdHVyZV9wb2wpIHwKKyAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfRlJFUV9XT1JEX0FESihmcmVxX3dvcmRfYWRqKSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLnR4X2RhdGFfcGFkZGluZyA9IFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19MUk0obHJtKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzEoZGF0YV9wYWRkaW5nX3BhdF8xKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0RBVEFfUEFERElOR19EQVRBX1BBRERJTkdfUEFUXzAoZGF0YV9wYWRkaW5nX3BhdF8wKSwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLnR4X2RmdF9wYXR0ZXJuID0gWENWUl9UWF9ESUdfREZUX1BBVFRFUk5fREZUX01PRF9QQVRURVJOKGRmdF9tb2RfcGF0dGVybnZhbCksCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLnJmX2RmdF9iaXN0XzEgPSBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX0NUVU5FX0JJU1RfR08oY3R1bmVfYmlzdF9nbykgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMV9DVFVORV9CSVNUX1RIUlNITEQoY3R1bmVfYmlzdF90aHJzaGxkKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9GUkVRKHBhX2FtX21vZF9mcmVxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTlRSSUVTKHBhX2FtX21vZF9lbnRyaWVzKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8xX1BBX0FNX01PRF9FTihwYV9hbV9tb2RfZW4pLAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAucmZfZGZ0X2Jpc3RfMiA9IFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfR08oc3luX2Jpc3RfZ28pIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfU1lOX0JJU1RfQUxMX0NIQU5ORUxTKHN5bl9iaXN0X2FsbF9jaGFubmVscykgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9GUkVRX0NPVU5UX1RIUkVTSE9MRChmcmVxX2NvdW50X3RocmVzaG9sZCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfUkZfREZUX0JJU1RfMl9IUE1fSU5MX0JJU1RfR08oaHBtX2lubF9iaXN0X2dvKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19SRl9ERlRfQklTVF8yX0hQTV9ETkxfQklTVF9HTyhocG1fZG5sX2Jpc3RfZ28pIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX1JGX0RGVF9CSVNUXzJfREZUX01BWF9SQU1fU0laRShkZnRfbWF4X3JhbV9zaXplKSwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDNfaF8wcDVfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwM19oXzBwNV9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmI1ZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDNfaF8wcDVfY29uZmlnLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNT0RFIG9ubHkgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHAzX2hfMHA1X21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHAzX2hfMHA1LAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9HRU5fRlNLX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woOCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4N0JDREVCMzksCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHhDRUY3REVGNywKKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAwMDBDRUI3LAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSCgweGRhKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVCgyKSwKKworICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKDEpCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSgwKQorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgLAorCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIC5yeF9kaWdfY3RybF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEUoMCksCisKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworCisgICAgLmFnY19jdHJsXzBfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0goMHhGRiksCisKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKERBVEFfUEFERElOR19FTikKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCtUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLnR4X2dmc2tfY3RybCA9IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCgweDQwMDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUkoMSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTEQoMSkgfCAvKiBVc2UgR0ZTSyBNYW51YWwgRmlsdGVyIENvZWZmcyAqLworICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORygwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCgwKSwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAoMTA3VSkgPDwgMCB8IC8qIGNvZWZmIDIvMTMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTY0VSkgPDwgNyB8IC8qIGNvZWZmIDYvOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMjVVKSA8PCAxNiB8IC8qIGNvZWYgMy8xMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNjlVKSA8PCAyMywgLyogY29lZmYgNy84ICovCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gKDcyVSkgPDwgMCB8IC8qIGNvZWZmIDAvMTUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOTBVKSA8PCA4IHwgLyogY29lZmYgMS8xNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxNDFVKSA8PCAxNiB8IC8qIGNvZWZmIDQvMTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTU1VSkgPDwgMjQsIC8qIGNvZWZmIDUvMTAgKi8KKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAoNzBVKSA8PCAwIHwgLyogY29lZmYgMi8xMyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMTZVKSA8PCA3IHwgLyogY29lZmYgNi85ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwNVUpIDw8IDE2IHwgLyogY29lZiAzLzEyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIzM1UpIDw8IDIzLCAvKiBjb2VmZiA3LzggKi8KKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAoMjVVKSA8PCAwIHwgLyogY29lZmYgMC8xNSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0NFUpIDw8IDggfCAvKiBjb2VmZiAxLzE0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0NVUpIDw8IDE2IHwgLyogY29lZmYgNC8xMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxODRVKSA8PCAyNCwgLyogY29lZmYgNS8xMCAqLworfTsKKworLyogTU9ERSAmIERBVEEgUkFURSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwM19oXzBwNV8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDNfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDQpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDQpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNCksIC8qVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4QSkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMTEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDU1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDYxLAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMEIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDVDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDZBLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDNfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4OCkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY3LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyMywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDU5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDY4LAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkYzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDNGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDVGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDcyLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDNfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzI1MEtCUFMsCisgICAgCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisgICAgICAgICAgICAgCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg2KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMjIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDE0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwM0MsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwN0QsCisKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDBCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMzgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwODYsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMSkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDEpLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHAzMl9jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHAzMl9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM2NmNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDMyX2NvbmZpZy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTU9ERSBvbmx5IGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwNV9oXzBwMzJfbW9kZV9jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDMyLAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9HRU5fRlNLX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woOCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorICAgICAgICAgICAgICAgICAgICAgCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4QkJERTczOUIsCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHhERUZCREVGNywKKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAwMDBFNzM5LAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhGMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQrVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMV8zMm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gMCwKK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzFtYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwMzIsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDQpICwKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDE2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0OSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1RCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2OSwKKyAgICAKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkVELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAxNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDMxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNEUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNzMsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDMyLAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorICAgIAorICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg0KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAwQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDI1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNkIsCisKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkZFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkU5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDIwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwNzcsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDEpICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDMyLAorICAgIC5kYXRhX3JhdGUgPSBEUl8yNTBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDQpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgyMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDBCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0NiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2MCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3MCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkZDLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkVGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMEIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2OCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA4NiwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA1X2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDVfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3ZDA2OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMHA1X2NvbmZpZy5jCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTU9ERSBvbmx5IGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwNV9oXzBwNV9tb2RlX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwNSwKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfR0VOX0ZTS19NQVNLLAorCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICAueGN2cl9jdHJsLm1hc2sgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUxfTUFTSywKKyAgICAueGN2cl9jdHJsLmluaXQgPSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTCgxKSwKKworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IFJXMFBTKDAsIDB4MTkpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUygxLCAweDE5VSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDIsIDB4MUFVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoMywgMHgxQlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzBQUyg0LCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMFBTKDUsIDB4MUNVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcwUFMoNiwgMHgxRFUgJiAweDNVKSwgLyogUGhhc2UgaW5mbyAjNiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgKi8KKyAgICAucGh5X3ByZV9yZWYxX2luaXQgPSAoMHgxRCkgPj4gMiB8IC8qIFBoYXNlIGluZm8gIzYgb3ZlcmxhcHMgdHdvIGluaXRpYWxpemF0aW9uIHdvcmRzIC0gbWFudWFsbHkgY29tcHV0ZSB0aGUgc2hpZnQqLworICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDcsIDB4MUVVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgUlcxUFMoOCwgMHgxRVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzFQUyg5LCAweDFFVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDEwLCAweDFEVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDExLCAweDFDVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFJXMVBTKDEyLCAweDFDVSAmIDB4RlUpLCAvKiBQaGFzZSBpbmZvICMxMiBvdmVybGFwcyB0d28gaW5pdGlhbGl6YXRpb24gd29yZHMgKi8KKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAoMHgxQykgPj4gNCB8IC8qIFBoYXNlIGluZm8gIzEyIG92ZXJsYXBzIHR3byBpbml0aWFsaXphdGlvbiB3b3JkcyAtIG1hbnVhbGx5IGNvbXB1dGUgdGhlIHNoaWZ0Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxMywgMHgxQlUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxNCwgMHgxQVUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSVzJQUygxNSwgMHgxOVUpLAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMjA1KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVCgyKSwKKworICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKDEpCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSgwKQorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgLAorICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQrVFhfRElHX0VOX1RYX0hJX0FESiksCisjZWxzZQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMV8zMm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gMCwKK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDQpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDQpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNCksIC8qVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4QSkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBCTEUgMjZNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkVFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQ2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDU5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDYzLAorCisgICAgLyogQkxFIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkY1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRUYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZFQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDE1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMzAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0QSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA1RiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA2QiwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA1XzUwMGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHA1LAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDgpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkVDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRTgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0NSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2NSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA3OSwKKyAgICAKKyAgICAvKiAzMk1IeiAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkU2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDE5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwODAsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMSkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDEpICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV8yNTBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwNSwKKyAgICAuZGF0YV9yYXRlID0gRFJfMjUwS0JQUywKKyAgICAKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4NikgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkYxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkY3LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMEIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQ2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDYwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDcwLAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkYxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQ2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDYxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDcxLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDdfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzBwN19jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzY4MGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDVfaF8wcDdfY29uZmlnLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNT0RFIG9ubHkgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHA1X2hfMHA3X21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHA3LAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9HRU5fRlNLX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woOCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4MzdBQ0UyRjcsCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHhBREYzQkRFRiwKKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAwMDBCRTMzLAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhDRCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQgKyBUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisgICAgCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCksCisgICAgLnR4X2dmc2tfY29lZmYxXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMV8zMm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzMybWh6ID0gMCwKK307CisKKy8qIE1PREUgJiBEQVRBIFJBVEUgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMHA3LAorICAgIC5kYXRhX3JhdGUgPSBEUl8xTUJQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMSksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCgzKSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCgzKSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDMpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHhBKSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDExKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDFCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwN0MsCisKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkU5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZGNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDE2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwODIsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwN181MDBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzBwNywKKyAgICAuZGF0YV9yYXRlID0gRFJfNTAwS0JQUywKKyAgICAKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4OCkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkUyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAwQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDNELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDhGLAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA2LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkRGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRTMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDM4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDcyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDk4LAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8wcDcsCisgICAgLmRhdGFfcmF0ZSA9IERSXzI1MEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4NikgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRUEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDM2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDZCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDhELAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8gIAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwOTgsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMSkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDEpICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzFwMF9jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX2dmc2tfYnRfMHA1X2hfMXAwX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YzZkYzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwNV9oXzFwMF9jb25maWcuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1PREUgb25seSBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDVfaF8xcDBfbW9kZV9jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8xcDAsCisgICAgLnNjZ2M1X2Nsb2NrX2VuYV9iaXRzID0gU0lNX1NDR0M1X1BIWURJR19NQVNLIHwgU0lNX1NDR0M1X0dFTl9GU0tfTUFTSywKKworICAgIC8qIFhDVlJfTUlTQyBjb25maWdzICovCisgICAgLnhjdnJfY3RybC5tYXNrID0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX1RHVF9QV1JfU1JDX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMX01BU0ssCisgICAgLnhjdnJfY3RybC5pbml0ID0gWENWUl9DVFJMX1hDVlJfQ1RSTF9QUk9UT0NPTCg4KSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQyg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9ERU1PRF9TRUwoMSksCisKKyAgICAvKiBYQ1ZSX1BIWSBjb25maWdzICovICAgCisgICAgLnBoeV9wcmVfcmVmMF9pbml0ID0gMHhGMzhCNTI3MywKKyAgICAucGh5X3ByZV9yZWYxX2luaXQgPSAweDhDRUY5Q0U2LAorICAgIC5waHlfcHJlX3JlZjJfaW5pdCA9IDB4MDAwMDlEMkQsCisKKyAgICAucGh5X2NmZzFfaW5pdCA9IFhDVlJfUEhZX0NGRzFfQUFfUExBWUJBQ0soMSkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9BQV9PVVRQVVRfU0VMKDEpIHwgCisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSCgweGIwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVCgyKSwKKworICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKDEpCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSgwKQorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgLAorICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDApIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworI2lmIChEQVRBX1BBRERJTkdfRU4pCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQgKyBUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLnR4X2dmc2tfY3RybCA9IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCgweDQwMDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUkoMykgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORygwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCgwKSwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAwLAorfTsKKworLyogTU9ERSAmIERBVEEgUkFURSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzFwMF8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDVfaF8xcDAsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgxKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDMpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDMpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoMyksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweEEpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwMywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkY5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRUIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkU5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMDgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2RiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA5MCwKKworICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkUxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAzNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA3MiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA5QSwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMXAwXzUwMGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA1X2hfMXAwLAorICAgIC5kYXRhX3JhdGUgPSBEUl81MDBLQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDUpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDUpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoNSksIC8qIFRaQV9CV19TRUwgKi8gCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweDgpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGRCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xID0gMHhGRkVBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzIgPSAweEZGRjMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAyMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDEzLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGQzksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFRSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl83ID0gMHgwMDVFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOSA9IDB4RkY0RSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMCA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDE4RiwKKyAgICAKKyAgICAvKiAzMk1IeiBDaGFubmVsIEZpbHRlciAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMTIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAxMSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkUxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRUUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAzNCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkZELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGQjcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAzQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDRGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweEZGNUIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweEZGQjUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAxOEIsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzFwMF8yNTBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBHRlNLX0JUXzBwNV9oXzFwMCwKKyAgICAuZGF0YV9yYXRlID0gRFJfMjUwS0JQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg2KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMjIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDBDLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMTEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAwQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZENywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHhGRkYwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwOUUsCisgICAgCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDBGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMTksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4MDAwQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkVCLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGQ0QsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZENywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDE3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDc1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMEJCLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDdfaF8wcDVfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9nZnNrX2J0XzBwN19oXzBwNV9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY2Yzg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfZ2Zza19idF8wcDdfaF8wcDVfY29uZmlnLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNT0RFIG9ubHkgY29uZmlndXJhdGlvbiAqLworY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHA3X2hfMHA1X21vZGVfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IEdGU0tfQlRfMHA3X2hfMHA1LAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9HRU5fRlNLX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woOCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorICAgICAgICAgICAgICAgICAgICAgCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4NzlDREVCMzksCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHhDRTc3REVGNywKKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAwMDBDRUI3LAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhiMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9FTkFCTEUoMCkKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICwKKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEUoMCksCisKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworCisgICAgLmFnY19jdHJsXzBfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0goMHhGRiksCisKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKERBVEFfUEFERElOR19FTikKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCtUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLnR4X2dmc2tfY3RybCA9IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCgweDQwMDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUkoMSkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTEQoMSkgfCAvKiBVc2UgR0ZTSyBNYW51YWwgRmlsdGVyIENvZWZmcyAqLworICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORygwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCgwKSwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAoMjdVKSA8PCAwIHwgLyogQ29lZmYgMi8xMyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyNzZVKSA8PCA3IHwgLyogQ29lZmYgNi85ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYyVSkgPDwgMTYgfCAvKiBDb2VmIDMvMTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzI2VSkgPDwgMjMsIC8qIENvZWZmIDcvOCAqLworICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9ICgzVSkgPDwgMCB8IC8qIENvZWZmIDAvMTUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTBVKSA8PCA4IHwgLyogQ29lZmYgMS8xNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMjFVKSA8PCAxNiB8IC8qIENvZWZmIDQvMTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTk4VSkgPDwgMjQsIC8qIENvZWZmIDUvMTAgKi8KKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAoMVUpIDw8IDAgfCAvKiBDb2VmZiAyLzEzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMzMFUpIDw8IDcgfCAvKiBDb2VmZiA2LzkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoN1UpIDw8IDE2IHwgLyogQ29lZiAzLzEyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUxMFUpIDw8IDIzLCAvKiBDb2VmZiA3LzggKi8KKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAoMFUpIDw8IDAgfCAvKiBDb2VmZiAwLzE1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDBVKSA8PCA4IHwgLyogQ29lZmYgMS8xNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzN1UpIDw8IDE2IHwgLyogQ29lZmYgNC8xMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMzhVKSA8PCAyNCwgLyogQ29lZmYgNS8xMCAqLworfTsKKworLyogTU9ERSAmIERBVEEgUkFURSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwN19oXzBwNV8xbWJwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDdfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzFNQlBTLAorCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgwKSwgLyogVkNPIEtWTSAqLworICAgIC5hbmFfcnhfYmJhLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTF9NQVNLIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF9iYmEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMKDMpIHwgWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQTJfQldfU0VMKDMpLCAvKiBCQkFfQldfU0VMIGFuZCBCQkEyX0JXX1NFTCAqLyAKKyAgICAuYW5hX3J4X3R6YS5tYXNrID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X3R6YS5pbml0ID0gWENWUl9BTkFMT0dfUlhfVFpBX1JYX1RaQV9CV19TRUwoMyksIC8qVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4QSkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGRSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkY0LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAyMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDVFLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDcwLAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRjIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZFQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkVELAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAxQiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDQxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDdBLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDdfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4OCkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGOCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkZBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4MDAxOSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDA5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGREIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZDMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHhGRkY2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDcyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMERELAorCisgICAgLyogMzJNSHogQ2hhbm5lbCBGaWx0ZXIgKi8KKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4MDAxNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDFBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZCQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHhGRkUwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMEVELAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gR0ZTS19CVF8wcDdfaF8wcDUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzI1MEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4NikgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRUEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4MDAwNSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDM2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDZCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDhELAorICAgIAorICAgIC8qIDMyTUh6IENoYW5uZWwgRmlsdGVyICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4MDAwOCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHgwMDA0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRjgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkUyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDAyRSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2RCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA5OCwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygxKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMzEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMSkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmM5NTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2NmZ3Nfa3c0eF8zeF8yeC9mc2xfeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZy5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PSBEQVRBIFJBVEUgT05MWSBzZXR0aW5ncyA9PT09PT09PT09PT09PT0qLworLyohCisgKiBAYnJpZWYgWENWUiAxTWJwcyBEQVRBIFJBVEUgc3BlY2lmaWMgY29uZmlndXJlIHN0cnVjdHVyZQorICovCitjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfMW1icHNfY29uZmlnID0KK3sKKyAgICAuZGF0YV9yYXRlID0gRFJfMU1CUFMsCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRSgweEYpIHwKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfV0lOX1NJWkUoMCkgfAorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTCgweDIwKSAsCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisKKyAgICAuYWdjX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSgxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oUFJFU0xPV19FTkEpLAorICAgIC5hZ2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTihQUkVTTE9XX0VOQSksCisKKyAgICAuZGNvY19jdHJsXzBfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFkoMTApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoMjEpLAorICAgIC5kY29jX2N0cmxfMF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRSgyNiksCisgICAgCisgICAgLmRjb2NfY3RybF8xX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfR1NfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFgoMyksCisKKyAgICAuZGNvY19jdHJsXzFfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWCgzKSwKKworICAgIC5kY29jX2NhbF9paXJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFgoMiksCisgICAgLmRjb2NfY2FsX2lpcl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWCgyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWCgyKSwKKworICAgIC5kY19yZXNpZF9jdHJsXzI2bWh6ID0gWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOKDMzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWSg2KSwKKyAgICAuZGNfcmVzaWRfY3RybF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTig0MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFkoNyksCit9OworCisvKiEKKyAqIEBicmllZiBYQ1ZSIDUwMEsgYnBzIERBVEEgUkFURSBzcGVjaWZpYyBjb25maWd1cmUgc3RydWN0dXJlCisgKi8KK2NvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl81MDBrYnBzX2NvbmZpZyA9Cit7CisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRSgweDgpIHwKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfV0lOX1NJWkUoMCkgfAorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0VMX0NGR19FTF9JTlRFUlZBTCgweDEwKSwKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOKDE2KSwKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUigyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOKDE2KSwKKworICAgIC5hZ2NfY3RybF8xX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTihQUkVTTE9XX0VOQSksCisgICAgLmFnY19jdHJsXzFfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUUoMTgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOKFBSRVNMT1dfRU5BKSwKKworICAgIC5kY29jX2N0cmxfMF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSgxMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRSgyOSksCisgICAgLmRjb2NfY3RybF8wX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfRExZKDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FKDM2KSwKKworICAgIC5kY29jX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYKDIpLAorCisgICAgLmRjb2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfR1NfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFgoMiksCisKKyAgICAuZGNvY19jYWxfaWlyX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKDIpLAorICAgIC5kY29jX2NhbF9paXJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFgoMiksCisKKyAgICAuZGNfcmVzaWRfY3RybF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTigyNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFkoNCksCisgICAgLmRjX3Jlc2lkX2N0cmxfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oMzIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZKDQpLAorfTsKKworLyohCisgKiBAYnJpZWYgWENWUiAyNTBLIGJwcyBEQVRBIFJBVEUgc3BlY2lmaWMgY29uZmlndXJlIHN0cnVjdHVyZQorICovCitjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfMjUwa2Jwc19jb25maWcgPQoreworICAgIC5kYXRhX3JhdGUgPSBEUl8yNTBLQlBTLAorICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfV0lOX1NJWkUoMHg0KSB8CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX1dJTl9TSVpFKDApIHwKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9FTF9DRkdfRUxfSU5URVJWQUwoMHg4KSAsCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfR0FJTigxNiksCisKKyAgICAuYWdjX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfR0FJTl9TRVRUTEVfVElNRSgxOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1BSRVNMT1dfRU4oUFJFU0xPV19FTkEpLAorICAgIC5hZ2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKDIyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTihQUkVTTE9XX0VOQSksCisKKyAgICAuZGNvY19jdHJsXzBfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9ETFkoMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUl9IT0xEX1RJTUUoMzQpLAorICAgIC5kY29jX2N0cmxfMF9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSgyMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRSg0MiksCisKKyAgICAuZGNvY19jdHJsXzFfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1RSS19FU1RfR1NfQ05UKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfU0lHTl9TQ0FMRV9HU19JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQUNfU0NBTEVfR1NfSURYKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFfUkFESVVTX0dTX0lEWCgyKSwKKworICAgIC5kY29jX2N0cmxfMV9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYKDIpLAorCisgICAgLmRjb2NfY2FsX2lpcl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjNBX0lEWCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjJBX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DQUxfSUlSX0RDT0NfQ0FMX0lJUjFBX0lEWCgxKSwKKyAgICAuZGNvY19jYWxfaWlyX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKDEpLAorCisgICAgLmRjX3Jlc2lkX2N0cmxfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oMTMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZKDQpLAorICAgIC5kY19yZXNpZF9jdHJsXzMybWh6ID0gWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9OV0lOKDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX0RMWSg0KSwKK307CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX21za19jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX21za19jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGViMzhjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfbXNrX2NvbmZpZy5jCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTU9ERSBvbmx5IGNvbmZpZ3VyYXRpb24gKi8KK2NvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBtc2tfbW9kZV9jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gTVNLLAorICAgIC5zY2djNV9jbG9ja19lbmFfYml0cyA9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSyB8IFNJTV9TQ0dDNV9HRU5fRlNLX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woOSkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDEpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4NzlDREVCMzgsCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHhDRTc3REZGNywKKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAwMDBDRUI3LAorCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19CSVRfSU5WRVJUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQlNNX0VOX0JMRSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0RFTU9EX0NMS19NT0RFKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQ1RTX1RIUkVTSCgyMDhVKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0ZTS19GVFNfVElNRU9VVCgyKSwKKworICAgIC5waHlfZWxfY2ZnX2luaXQgPSBYQ1ZSX1BIWV9FTF9DRkdfRUxfRU5BQkxFKDEpCisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICAgICAgICAgICAgICAgICAgfCBYQ1ZSX1BIWV9FTF9DRkdfRUxfWkJfRU5BQkxFKDApCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgLAorCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIC5yeF9kaWdfY3RybF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRlNLX1pCX1NFTCgwKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDX1JFU0lEX0VOKDEpIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfU1JDX1JBVEUoMCksCisKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMCkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworCisgICAgLmFnY19jdHJsXzBfaW5pdCA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzBfQUdDX0RPV05fUlNTSV9USFJFU0goMHhGRiksCisKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKERBVEFfUEFERElOR19FTikKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoVFhfRElHX0VOX0FTU0VSVCtUWF9ESUdfRU5fVFhfSElfQURKKSwKKyNlbHNlCisgICAgLnRzbV90aW1pbmdfMzVfaW5pdCA9IEIwKFRYX0RJR19FTl9BU1NFUlQpLAorI2VuZGlmIC8qIChEQVRBX1BBRERJTkdfRU4pICovCisKKyAgICAvKiBYQ1ZSX1RYX0RJRyBjb25maWdzICovCisgICAgLnR4X2dmc2tfY3RybCA9IFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01VTFRJUExZX1RBQkxFX01BTlVBTCgweDQwMDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUkoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19GTEQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NT0RfSU5ERVhfU0NBTElORygwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfT1ZSRF9FTigwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMF9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8xX09WUkQoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzJfT1ZSRCgwKSwKKyAgICAudHhfZ2Zza19jb2VmZjFfMjZtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYxXzMybWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjJfMzJtaHogPSAwLAorfTsKKworLyogTU9ERSAmIERBVEEgUkFURSBjb21iaW5lZCBjb25maWd1cmF0aW9uICovCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9NU0tfMW1icHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IE1TSywKKyAgICAuZGF0YV9yYXRlID0gRFJfMU1CUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoMykgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoMyksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCgzKSwgLypUWkFfQldfU0VMICovCisKKyAgICAucGh5X2NmZzJfaW5pdCA9IFhDVlJfUEhZX0NGRzJfUEhZX0ZJRk9fUFJFQ0hHKDgpIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzJfWDJfREVNT0RfR0FJTigweEEpICwKKworICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKyAgICAuYWdjX2N0cmxfMl9pbml0XzMybWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorCisgICAgLyogQWxsIGNvbnN0YW50IHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMTYgYml0cywgcmVnaXN0ZXIgd3JpdGVzIHdpbGwgcmVtb3ZlIHVudXNlZCBiaXRzICovCisgICAgLyogTVNLIDFNQlBTIGNoYW5uZWwgZmlsdGVyICBAIDI2TUh6IFJGIE9TQyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDAwLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRjksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVBLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDFCLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwNDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwN0MsCisKKyAgICAvKiBNU0sgMU1CUFMgY2hhbm5lbCBmaWx0ZXIgIEAgMzJNSHogUkYgT1NDICovCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMCA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xID0gMHgwMDAzLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzIgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMyA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl80ID0gMHhGRkYyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzUgPSAweEZGRTksCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNiA9IDB4RkZFOSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl83ID0gMHhGRkY3LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzggPSAweDAwMTYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOSA9IDB4MDA0MCwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMCA9IDB4MDA2OSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMSA9IDB4MDA4MiwKKworICAgIC5yeF9yY2NhbF9jdHJsXzAgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9ESVMoMCkgLAorICAgIC5yeF9yY2NhbF9jdHJsXzEgPSBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9ESVMoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9ESVMoMCkgLAorCisgICAgLnR4X2Zza19zY2FsZV8yNm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTYyNykgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA5ZDkpLAorICAgIC50eF9mc2tfc2NhbGVfMzJtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE4MDApIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwODAwKSwKK307CisKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX01TS181MDBrYnBzX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBNU0ssCisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisKKyAgICAuYW5hX3N5X2N0cmwyLm1hc2sgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTV9NQVNLLAorICAgIC5hbmFfc3lfY3RybDIuaW5pdCA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNKDApLCAvKiBWQ08gS1ZNICovCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoNSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoNSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCg1KSwgLyogVFpBX0JXX1NFTCAqLyAKKworICAgIC5waHlfY2ZnMl9pbml0ID0gWENWUl9QSFlfQ0ZHMl9QSFlfRklGT19QUkVDSEcoOCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMl9YMl9ERU1PRF9HQUlOKDB4YSkgLAorCisgICAgLyogQUdDIGNvbmZpZ3MgKi8KKyAgICAuYWdjX2N0cmxfMl9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfR0FJTl9TRVRUTEVfVElNRSgxNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg3KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAvKiBNU0sgNTAwS0JQUyBjaGFubmVsIGZpbHRlciBAIDI2TUh6IFJGIE9TQyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4MDAwNCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA2LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDUsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkVELAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweEZGRTIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZFNywKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweDAwMzgsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwOTIsCisKKyAgICAvKiBNU0sgNTAwS0JQUyBjaGFubmVsIGZpbHRlciBAIDMyTUh6IFJGIE9TQyAqLyAKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4RkZGMywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkUyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRTAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZGQSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDMxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDcxLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMDlDLAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX1NNUF9ETFkoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9DT01QX0lOVigwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX0RJUygwKSAsCisgICAgLnJ4X3JjY2FsX2N0cmxfMSA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfTUFOVUFMKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX0RJUygwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygwKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfTVNLXzI1MGticHNfY29uZmlnID0KK3sKKyAgICAucmFkaW9fbW9kZSA9IE1TSywKKyAgICAuZGF0YV9yYXRlID0gRFJfMjUwS0JQUywKKworICAgIC5hbmFfc3lfY3RybDIubWFzayA9IFhDVlJfQU5BTE9HX1NZX0NUUkxfMl9TWV9WQ09fS1ZNX01BU0ssCisgICAgLmFuYV9zeV9jdHJsMi5pbml0ID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk0oMCksIC8qIFZDTyBLVk0gKi8KKyAgICAuYW5hX3J4X2JiYS5tYXNrID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUxfTUFTSyB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfYmJhLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBX0JXX1NFTCg1KSB8IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkEyX0JXX1NFTCg1KSwgLyogQkJBX0JXX1NFTCBhbmQgQkJBMl9CV19TRUwgKi8gCisgICAgLmFuYV9yeF90emEubWFzayA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMX01BU0ssCisgICAgLmFuYV9yeF90emEuaW5pdCA9IFhDVlJfQU5BTE9HX1JYX1RaQV9SWF9UWkFfQldfU0VMKDUpLCAvKiBUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHg4KSAsCisKKyAgICAvKiBBR0MgY29uZmlncyAqLworICAgIC5hZ2NfY3RybF8yX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDE4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDcpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisgICAgLmFnY19jdHJsXzJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoMjIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfTE8oNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9ISSg2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0xPKDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfSEkoNykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0FHQ19GQVNUX0VYUElSRSg1KSwKKworICAgIC8qIEFsbCBjb25zdGFudCB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2IGJpdHMsIHJlZ2lzdGVyIHdyaXRlcyB3aWxsIHJlbW92ZSB1bnVzZWQgYml0cyAqLworICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzAgPSAweDAwMDIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yID0gMHhGRkY4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzMgPSAweEZGRkEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNCA9IDB4MDAwQSwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81ID0gMHgwMDE5LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzYgPSAweDAwMDksCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNyA9IDB4RkZEQiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84ID0gMHhGRkMxLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzkgPSAweEZGRjYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNzIsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAwREQsCisKKyAgICAvKiBNU0sgMjUwS0JQUyBjaGFubmVsIGZpbHRlciBAIDMyTUh6IFJGIE9TQyAqLyAKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wID0gMHgwMDAyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEgPSAweDAwMDMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMiA9IDB4RkZGQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zID0gMHhGRkY0LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQgPSAweEZGRkQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNSA9IDB4MDAxNiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82ID0gMHgwMDFBLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRUMsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZCQywKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85ID0gMHhGRkUwLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDY5LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMEVELAorCisgICAgLnJ4X3JjY2FsX2N0cmxfMCA9IFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfTUFOVUFMKDMxKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9ESVMoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9SQ0NBTF9TTVBfRExZKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfQ09NUF9JTlYoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfT0ZGU0VUKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDEpICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgzMSkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX0RJUygxKSAsCisKKyAgICAudHhfZnNrX3NjYWxlXzI2bWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxNjI3KSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDlkOSksCisgICAgLnR4X2Zza19zY2FsZV8zMm1oeiA9IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8wKDB4MTgwMCkgfCBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMSgweDA4MDApLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9jZmdzX2t3NHhfM3hfMngvZnNsX3hjdnJfemdiZV9jb25maWcuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX3pnYmVfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkNmY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvY2Znc19rdzR4XzN4XzJ4L2ZzbF94Y3ZyX3pnYmVfY29uZmlnLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgemdiZV9tb2RlX2NvbmZpZyA9Cit7CisgICAgLnJhZGlvX21vZGUgPSBaSUdCRUVfTU9ERSwKKyAgICAuc2NnYzVfY2xvY2tfZW5hX2JpdHMgPSBTSU1fU0NHQzVfUEhZRElHX01BU0sgfCBTSU1fU0NHQzVfWmlnQmVlX01BU0ssCisKKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC54Y3ZyX2N0cmwubWFzayA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgWENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0NUUkxfWENWUl9DVFJMX0RFTU9EX1NFTF9NQVNLLAorICAgIC54Y3ZyX2N0cmwuaW5pdCA9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woNCkgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkMoNykgfAorICAgICAgICAgICAgICAgICAgICAgIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfREVNT0RfU0VMKDIpLAorCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworICAgIC5waHlfcHJlX3JlZjBfaW5pdCA9IDB4MCwgLyogTm90IHVzZWQgaW4gWmlnYmVlICovCisgICAgLnBoeV9wcmVfcmVmMV9pbml0ID0gMHgwLCAvKiBOb3QgdXNlZCBpbiBaaWdiZWUgKi8KKyAgICAucGh5X3ByZV9yZWYyX2luaXQgPSAweDAsIC8qIE5vdCB1c2VkIGluIFppZ2JlZSAqLworCisgICAgLnBoeV9jZmcxX2luaXQgPSBYQ1ZSX1BIWV9DRkcxX0FBX1BMQVlCQUNLKDApIHwKKyAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0NGRzFfQUFfT1VUUFVUX1NFTCgxKSB8IAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfQklUX0lOVkVSVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0JTTV9FTl9CTEUoMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9ERU1PRF9DTEtfTU9ERSgwKSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcxX0NUU19USFJFU0goMHhDMCkgfAorICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfQ0ZHMV9GU0tfRlRTX1RJTUVPVVQoMiksCisKKyAgICAucGh5X2VsX2NmZ19pbml0ID0gWENWUl9QSFlfRUxfQ0ZHX0VMX0VOQUJMRSgxKQorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QSFlfRUxfQ0ZHX0VMX1pCX0VOQUJMRSgwKQorI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgLAorCisgICAgLyogWENWUl9QTExfRElHIGNvbmZpZ3MgKi8KKworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0ZTS19aQl9TRUwoMSkgfCAvKiBEZXBlbmRzIG9uIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTigxKSB8IC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX1NSQ19SQVRFKDApLAorCisgICAgLnJ4X2RpZ19jdHJsX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9GU0tfWkJfU0VMKDEpIHwgLyogRGVwZW5kcyBvbiBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU4oMSksIC8qIERlcGVuZHMgb24gcHJvdG9jb2wgKi8KKworICAgIC5hZ2NfY3RybF8wX2luaXQgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8wX0FHQ19ET1dOX1JTU0lfVEhSRVNIKDB4RkYpLAorICAgIC8qIFhDVlJfVFNNIGNvbmZpZ3MgKi8KKyNpZiAoREFUQV9QQURESU5HX0VOKQorICAgIC50c21fdGltaW5nXzM1X2luaXQgPSBCMChUWF9ESUdfRU5fQVNTRVJUK1pHQkVfVFhfRElHX0VOX1RYX0hJX0FESiksIC8qIERBVEFfUEFERElORyBhZGp1c3RtZW50cyBhcmUgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIHRoZSBub24tWmlnYmVlIGJhc2UgdGltaW5nICovIAorI2Vsc2UKKyAgICAudHNtX3RpbWluZ18zNV9pbml0ID0gQjAoWkdCRV9UWF9ESUdfRU5fQVNTRVJUKSwKKyNlbmRpZiAvKiAoREFUQV9QQURESU5HX0VOKSAqLworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIC50eF9nZnNrX2N0cmwgPSBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfR0ZTS19NVUxUSVBMWV9UQUJMRV9NQU5VQUwoMHg0MDAwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9HRlNLX01JKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTUxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfRkxEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX0dGU0tfTU9EX0lOREVYX1NDQUxJTkcoMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSX09WUkRfRU4oMCkgfAorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RYX0RJR19HRlNLX0NUUkxfVFhfSU1BR0VfRklMVEVSXzBfT1ZSRCgwKSB8CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0dGU0tfQ1RSTF9UWF9JTUFHRV9GSUxURVJfMV9PVlJEKDApIHwKKyAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfR0ZTS19DVFJMX1RYX0lNQUdFX0ZJTFRFUl8yX09WUkQoMCkgLAorICAgIC50eF9nZnNrX2NvZWZmMV8yNm1oeiA9IDAsCisgICAgLnR4X2dmc2tfY29lZmYyXzI2bWh6ID0gMCwKKyAgICAudHhfZ2Zza19jb2VmZjFfMzJtaHogPSAwLAorICAgIC50eF9nZnNrX2NvZWZmMl8zMm1oeiA9IDAsCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9aSUdCRUVfNTAwa2Jwc19jb25maWcgPQoreworICAgIC5yYWRpb19tb2RlID0gWklHQkVFX01PREUsCisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisgICAgCisgICAgLmFuYV9zeV9jdHJsMi5tYXNrID0gWENWUl9BTkFMT0dfU1lfQ1RSTF8yX1NZX1ZDT19LVk1fTUFTSywKKyAgICAuYW5hX3N5X2N0cmwyLmluaXQgPSBYQ1ZSX0FOQUxPR19TWV9DVFJMXzJfU1lfVkNPX0tWTSgxKSwgLyogVkNPIEtWTSAqLworCisgICAgLmFuYV9yeF9iYmEubWFzayA9IFhDVlJfQU5BTE9HX1JYX0JCQV9SWF9CQkFfQldfU0VMX01BU0sgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUxfTUFTSywKKyAgICAuYW5hX3J4X2JiYS5pbml0ID0gWENWUl9BTkFMT0dfUlhfQkJBX1JYX0JCQV9CV19TRUwoMSkgfCBYQ1ZSX0FOQUxPR19SWF9CQkFfUlhfQkJBMl9CV19TRUwoMSksIC8qIEJCQV9CV19TRUwgYW5kIEJCQTJfQldfU0VMICovIAorICAgIC5hbmFfcnhfdHphLm1hc2sgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTF9NQVNLLAorICAgIC5hbmFfcnhfdHphLmluaXQgPSBYQ1ZSX0FOQUxPR19SWF9UWkFfUlhfVFpBX0JXX1NFTCgxKSwgLypUWkFfQldfU0VMICovIAorCisgICAgLnBoeV9jZmcyX2luaXQgPSBYQ1ZSX1BIWV9DRkcyX1BIWV9GSUZPX1BSRUNIRyg4KSB8CisgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1BIWV9DRkcyX1gyX0RFTU9EX0dBSU4oMHhBKSAsCisgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8qIEFHQyBjb25maWdzICovCisgICAgLmFnY19jdHJsXzJfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX0dBSU5fU0VUVExFX1RJTUUoOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9QREVUX1NFTF9MTyg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0hJKDYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9UWkFfUERFVF9TRUxfTE8oMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9ISSg1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQUdDX0ZBU1RfRVhQSVJFKDUpLAorICAgIC5hZ2NfY3RybF8yX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX0JCQV9HQUlOX1NFVFRMRV9USU1FKDEwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfQkJBX1BERVRfU0VMX0xPKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9CQkFfUERFVF9TRUxfSEkoNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8yX1RaQV9QREVUX1NFTF9MTygzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzJfVFpBX1BERVRfU0VMX0hJKDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMl9BR0NfRkFTVF9FWFBJUkUoNSksCisKKyAgICAvKiBBbGwgY29uc3RhbnQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyAxNiBiaXRzLCByZWdpc3RlciB3cml0ZXMgd2lsbCByZW1vdmUgdW51c2VkIGJpdHMgKi8KKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8wID0gMHhGRkZGLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMiA9IDB4MDAwMiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8zID0gMHgwMDA4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzQgPSAweDAwMEEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNSA9IDB4MDAwMCwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl82ID0gMHhGRkU4LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzcgPSAweEZGRDcsCisgICAgLnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfOCA9IDB4RkZFNiwKKyAgICAucnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl85ID0gMHgwMDIyLAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwID0gMHgwMDc1LAorICAgIC5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzExID0gMHgwMEIyLAorCisgICAgIC8qIElFRUUgODAyLjE1LjQgMzJNSHogQ2hhbm5lbCBGaWx0ZXIgLS0gMS41NS8xLjI1LzUvMC45Ny9CNSAqLworICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzAgPSAweEZGRkYsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMSA9IDB4RkZGRiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8yID0gMHgwMDA1LAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzMgPSAweDAwMDQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNCA9IDB4RkZGMiwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl81ID0gMHhGRkYyLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzYgPSAweDAwMUQsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNyA9IDB4MDAyNSwKKyAgICAucnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl84ID0gMHhGRkNFLAorICAgIC5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzkgPSAweEZGQTEsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTAgPSAweDAwNDAsCisgICAgLnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTEgPSAweDAxMjQsCisKKyAgICAucnhfcmNjYWxfY3RybF8wID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfQkJBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX0JCQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9CQkFfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfUkNDQUxfU01QX0RMWSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1JDQ0FMX0NPTVBfSU5WKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDBfVFpBX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwwX1RaQV9SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMF9UWkFfUkNDQUxfRElTKDApICwKKyAgICAucnhfcmNjYWxfY3RybF8xID0gWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQURDX1JDQ0FMX09GRlNFVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0FEQ19SQ0NBTF9NQU5VQUwoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9BRENfUkNDQUxfRElTKDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfUlhfUkNDQUxfQ1RSTDFfQkJBMl9SQ0NBTF9PRkZTRVQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9SQ0NBTF9DVFJMMV9CQkEyX1JDQ0FMX01BTlVBTCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX1JYX1JDQ0FMX0NUUkwxX0JCQTJfUkNDQUxfRElTKDApICwKKworICAgIC50eF9mc2tfc2NhbGVfMjZtaHogPSBYQ1ZSX1RYX0RJR19GU0tfU0NBTEVfRlNLX01PRFVMQVRJT05fU0NBTEVfMCgweDE2MjcpIHwgWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzEoMHgwOWQ5KSwKKyAgICAudHhfZnNrX3NjYWxlXzMybWh6ID0gWENWUl9UWF9ESUdfRlNLX1NDQUxFX0ZTS19NT0RVTEFUSU9OX1NDQUxFXzAoMHgxODAwKSB8IFhDVlJfVFhfRElHX0ZTS19TQ0FMRV9GU0tfTU9EVUxBVElPTl9TQ0FMRV8xKDB4MDgwMCksCit9OworCisvKiBDVVNUT00gZGF0YXJhdGUgZGVwZW5kZW50IGNvbmZpZyBzdHJ1Y3R1cmUgZm9yIE9OTFkgODAyLjE1LjQgKi8KKy8qIQorICogQGJyaWVmICBYQ1ZSIDUwMEsgYnBzIERBVEEgUkFURSBzcGVjaWZpYyBjb25maWd1cmUgc3RydWN0dXJlCisgKi8KK2NvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl84MDJfMTVfNF81MDBrYnBzX2NvbmZpZyA9Cit7CisgICAgLmRhdGFfcmF0ZSA9IERSXzUwMEtCUFMsCisgICAgLnBoeV9lbF9jZmdfaW5pdCA9IFhDVlJfUEhZX0VMX0NGR19FTF9aQl9XSU5fU0laRSgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUEhZX0VMX0NGR19FTF9XSU5fU0laRSgweDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgWENWUl9QSFlfRUxfQ0ZHX0VMX0lOVEVSVkFMKDB4MTApICwKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8yNm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUigxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOKDE2KSwKKyAgICAucnhfZGlnX2N0cmxfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUigyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9HQUlOKDE2KSwKKworICAgIC5hZ2NfY3RybF8xX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9HQUlOX1NFVFRMRV9USU1FKDEzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfUFJFU0xPV19FTihQUkVTTE9XX0VOQSksCisgICAgLmFnY19jdHJsXzFfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX0dBSU5fU0VUVExFX1RJTUUoMTApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9QUkVTTE9XX0VOKFBSRVNMT1dfRU5BKSwKKworICAgIC5kY29jX2N0cmxfMF9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0RMWSgxMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSX0hPTERfVElNRSgyOSksCisgICAgLmRjb2NfY3RybF8wX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfRExZKDIxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJfSE9MRF9USU1FKDQ3KSwKKworICAgIC5kY29jX2N0cmxfMV9pbml0XzI2bWh6ID0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfVFJLX0VTVF9HU19DTlQoMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19TSUdOX1NDQUxFX0dTX0lEWCgxKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBQ19TQ0FMRV9HU19JRFgoMykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19BTFBIQV9SQURJVVNfR1NfSURYKDIpLAorCisgICAgLmRjb2NfY3RybF8xX2luaXRfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzFfRENPQ19UUktfRVNUX0dTX0NOVCgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX1NJR05fU0NBTEVfR1NfSURYKDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8xX0RDT0NfQUxQSEFDX1NDQUxFX0dTX0lEWCgzKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMV9EQ09DX0FMUEhBX1JBRElVU19HU19JRFgoMiksCisKKyAgICAuZGNvY19jYWxfaWlyX2luaXRfMjZtaHogPSBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSM0FfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMkFfSURYKDIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0NBTF9JSVJfRENPQ19DQUxfSUlSMUFfSURYKDIpLAorICAgIC5kY29jX2NhbF9paXJfaW5pdF8zMm1oeiA9IFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIzQV9JRFgoMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIyQV9JRFgoMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfQ0FMX0lJUl9EQ09DX0NBTF9JSVIxQV9JRFgoMSksCisKKyAgICAuZGNfcmVzaWRfY3RybF8yNm1oeiA9IFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfTldJTigyNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENfUkVTSURfQ1RSTF9EQ19SRVNJRF9ETFkoNCksCisgICAgLmRjX3Jlc2lkX2N0cmxfMzJtaHogPSBYQ1ZSX1JYX0RJR19EQ19SRVNJRF9DVFJMX0RDX1JFU0lEX05XSU4oNDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDX1JFU0lEX0NUUkxfRENfUkVTSURfRExZKDApLAorfTsKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kYmdfcmFtX2NhcHR1cmUuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZGJnX3JhbV9jYXB0dXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExOWE4MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZGJnX3JhbV9jYXB0dXJlLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiZnNsX3hjdnIuaCIKKyNpbmNsdWRlICJkYmdfcmFtX2NhcHR1cmUuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyNkZWZpbmUgUEtUX1JBTV9TSVpFXzE2Ql9XT1JEUyAgKDExNTIpIC8qIE51bWJlciBvZiAxNmJpdCBlbnRyaWVzIGluIGVhY2ggUGFja2V0IFJBTSBiYW5rICovCisjZWxzZQorI2RlZmluZSBQS1RfUkFNX1NJWkVfMTZCX1dPUkRTICAoNTQ0KSAvKiBOdW1iZXIgb2YgMTZiaXQgZW50cmllcyBpbiBlYWNoIFBhY2tldCBSQU0gYmFuayAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyNkZWZpbmUgU0lHTl9FWFRORF8xMl8xNih4KSAgICAgKCh4KSB8ICgoKHgpICYgMHg4MDApID8gMHhGMDAwIDogMHgwKSkKKyNkZWZpbmUgU0lHTl9FWFRORF81XzgoeCkgICAgICAgKCh4KSB8ICgoKHgpICYgMHgxMCkgPyAweEUwIDogMHgwKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkYmdfcmFtX2luaXQodm9pZCkKK3sKKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgfD0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRE1BX0RURVNUX0VOX01BU0s7ICAvKiBUdXJucyBvbiBjbG9ja2luZyB0byBETUEvREJHIGJsb2NrcyAqLworICAgIFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMIHw9IFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfWENWUl9SQU1fQUxMT1dfTUFTSzsgIC8qIE1ha2UgUEtUIFJBTSBhdmFpbGFibGUgdG8ganVzdCBYQ1ZSICovCisKKyAgICAvKiBTb21lIGV4dGVybmFsIGNvZGUgbXVzdCBwZXJmb3JtIHRoZSBSWCB3YXJtdXAgcmVxdWVzdC4gKi8KK30KKworCitkYmdSYW1TdGF0dXNfdCBkYmdfcmFtX2NhcHR1cmUodWludDhfdCBkYmdfcGFnZSwgdWludDE2X3QgYnVmZmVyX3N6X2J5dGVzLCB2b2lkICogcmVzdWx0X2J1ZmZlcikKK3sKKyAgICBkYmdSYW1TdGF0dXNfdCBzdGF0dXMgPSBEQkdfUkFNX1NVQ0NFU1M7CisgICAgdWludDMyX3QgdGVtcDsKKyAgICB2b2xhdGlsZSB1aW50OF90ICpwa3RfcmFtX3B0cjAsICpwa3RfcmFtX3B0cjE7CisgICAgdWludDhfdCAqIG91dHB1dF9wdHI7CisgICAgdWludDE2X3QgaTsKKworICAgIC8qIFNvbWUgZXh0ZXJuYWwgY29kZSBtdXN0IHBlcmZvcm0gdGhlIFJYIHdhcm11cCByZXF1ZXN0IGFmdGVyIHRoZSBkYmdfcmFtX2luaXQoKSBjYWxsICovCisKKyAgICBpZiAocmVzdWx0X2J1ZmZlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gREJHX1JBTV9GQUlMX05VTExfUE9JTlRFUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlcl9zel9ieXRlcyA+ICg1NDQqMioyKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gREJHX1JBTV9GQUlMX1NBTVBMRV9OVU1fTElNSVQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wID0gWENWUl9NSVNDLT5QQUNLRVRfUkFNX0NUUkwgJiB+WENWUl9DVFJMX1BBQ0tFVF9SQU1fQ1RSTF9EQkdfUEFHRV9NQVNLOworICAgICAgICAgICAgc3dpdGNoIChkYmdfcGFnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIERCR19QQUdFX1JYRElHSVE6CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9SQVdBRENJUToKKyAgICAgICAgICAgICAgICBjYXNlIERCR19QQUdFX0RDRVNUSVE6CisgICAgICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMID0gIHRlbXAgfCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFKGRiZ19wYWdlKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShYQ1ZSX01JU0MtPlBBQ0tFVF9SQU1fQ1RSTCAmIFhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1JBTV9GVUxMKDIpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdGluZyBmb3IgUEtUX1JBTSB0byBmaWxsLCB3YWl0IGZvciBQS1RfUkFNXzEgZnVsbCB0byBlbnN1cmUgY29tcGxldGUgbWVtb3J5IGlzIGZpbGxlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHRvIG91dHB1dCBieSBieXRlcyB0byBhdm9pZCBhbnkgYWNjZXNzIHNpemUgcHJvYmxlbXMgaW4gMTYgYml0IHBhY2tldCBSQU0uICovCisgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wdHIgPSByZXN1bHRfYnVmZmVyOworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgIHBrdF9yYW1fcHRyMCA9ICh2b2xhdGlsZSB1aW50OF90ICopJihYQ1ZSX1BLVF9SQU0tPlBBQ0tFVF9SQU1fMFswXSk7CisgICAgICAgICAgICAgICAgICAgIHBrdF9yYW1fcHRyMSA9ICh2b2xhdGlsZSB1aW50OF90ICopJihYQ1ZSX1BLVF9SQU0tPlBBQ0tFVF9SQU1fMVswXSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBwa3RfcmFtX3B0cjAgPSAodm9sYXRpbGUgdWludDhfdCAqKSYoWENWUl9QS1RfUkFNLT5QQUNLRVRfUkFNWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgcGt0X3JhbV9wdHIxID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikmKFhDVlJfUEtUX1JBTS0+UEFDS0VUX1JBTVtYQ1ZSX1BLVF9SQU1fUEFDS0VUX1JBTV9DT1VOVD4+MV0pOyAvKiBTZWNvbmQgcGFja2V0IFJBTSBzdGFydHMgaGFsZndheSB0aHJvdWdoICovCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogRm9yICpJUSBwYWdlcyBJIGFuZCBRIGFyZSBzdG9yZWQgYWx0ZXJuYXRlbHkgaW4gcGFja2V0IHJhbSAwICYgMSAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX3N6X2J5dGVzIC8gNDsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X3B0cisrID0gKnBrdF9yYW1fcHRyMCsrOworICAgICAgICAgICAgICAgICAgICAgICAgKm91dHB1dF9wdHIrKyA9ICpwa3RfcmFtX3B0cjArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXRwdXRfcHRyKysgPSAqcGt0X3JhbV9wdHIxKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0cHV0X3B0cisrID0gKnBrdF9yYW1fcHRyMSsrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9SWElOUEg6CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9ERU1PRF9IQVJEOgorICAgICAgICAgICAgICAgIGNhc2UgREJHX1BBR0VfREVNT0RfU09GVDoKKyAgICAgICAgICAgICAgICBjYXNlIERCR19QQUdFX0RFTU9EX0RBVEE6CisgICAgICAgICAgICAgICAgY2FzZSBEQkdfUEFHRV9ERU1PRF9DRk9fUEg6CisgICAgICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+UEFDS0VUX1JBTV9DVFJMID0gIHRlbXAgfCBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19QQUdFKGRiZ19wYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoWENWUl9NSVNDLT5QQUNLRVRfUkFNX0NUUkwgJiBYQ1ZSX0NUUkxfUEFDS0VUX1JBTV9DVFJMX0RCR19SQU1fRlVMTCgyKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXRpbmcgZm9yIFBLVF9SQU0gdG8gZmlsbCwgd2FpdCBmb3IgUEtUX1JBTV8xIGZ1bGwgdG8gZW5zdXJlIGNvbXBsZXRlIG1lbW9yeSBpcyBmaWxsZWQuICovCisgICAgICAgICAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgICAgICAgICAgLyogQ29weSB0byBvdXRwdXQgYnkgYnl0ZXMgdG8gYXZvaWQgYW55IGFjY2VzcyBzaXplIHByb2JsZW1zIGluIDE2IGJpdCBwYWNrZXQgUkFNLiAqLworICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcHRyID0gcmVzdWx0X2J1ZmZlcjsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICBwa3RfcmFtX3B0cjAgPSAodm9sYXRpbGUgdWludDhfdCAqKSYoWENWUl9QS1RfUkFNLT5QQUNLRVRfUkFNXzBbMF0pOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcGt0X3JhbV9wdHIwID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikmKFhDVlJfUEtUX1JBTS0+UEFDS0VUX1JBTVswXSk7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBmb3Igbm9uIEkvUSAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX3N6X2J5dGVzOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvdXRwdXRfcHRyID0gKnBrdF9yYW1fcHRyMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9yYW1fcHRyMCsrOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3B0cisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgREJHX1BBR0VfSURMRToKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gREJHX1JBTV9GQUlMX1BBR0VfRVJST1I7IC8qIElsbGVnYWwgY2FwdHVyZSBwYWdlIHJlcXVlc3QuICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgWENWUl9NSVNDLT5QQUNLRVRfUkFNX0NUUkwgJj0gflhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfREJHX1BBR0VfTUFTSzsgLyogQ2xlYXIgREJHX1BBR0UgdG8gdGVybWluYXRlIHRoZSBhY3F1aXNpdGlvbiAqLworCisgICAgLyogUHJvY2VzcyB0aGUgc2FtcGxlcyBhbmQgY29weSB0byBvdXRwdXQgcG9pbnRlciAqLworCisgICAgWENWUl9NSVNDLT5QQUNLRVRfUkFNX0NUUkwgJj0gflhDVlJfQ1RSTF9QQUNLRVRfUkFNX0NUUkxfWENWUl9SQU1fQUxMT1dfTUFTSzsgLyogTWFrZSBQS1QgUkFNIGF2YWlsYWJsZSB0byBwcm90b2NvbCBibG9ja3MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgJj0gflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RNQV9EVEVTVF9FTl9NQVNLOyAvKiBUdXJucyBvZmYgY2xvY2tpbmcgdG8gRE1BL0RCRyBibG9ja3MgKi8KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZGJnX3JhbV9jYXB0dXJlLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmJhN2QKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RiZ19yYW1fY2FwdHVyZS5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0RCR19SQU1fQ0FQVFVSRV9IXworLyogY2xhbmctZm9ybWF0IG9mZiAqLworI2RlZmluZSBfREJHX1JBTV9DQVBUVVJFX0hfCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIHhjdnIKKyAqIEB7CisgKi8KKworLyohIEBmaWxlKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUGFnZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBEQkdfUEFHRV9JRExFICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgREJHX1BBR0VfUlhESUdJUSAgICAgICAgKDB4MDEpCisjZGVmaW5lIERCR19QQUdFX1JBV0FEQ0lRICAgICAgICgweDA0KQorI2RlZmluZSBEQkdfUEFHRV9EQ0VTVElRICAgICAgICAoMHgwNykKKyNkZWZpbmUgREJHX1BBR0VfUlhJTlBIICAgICAgICAgKDB4MEEpCisjZGVmaW5lIERCR19QQUdFX0RFTU9EX0hBUkQgICAgICgweDBCKQorI2RlZmluZSBEQkdfUEFHRV9ERU1PRF9TT0ZUICAgICAoMHgwQykKKyNkZWZpbmUgREJHX1BBR0VfREVNT0RfREFUQSAgICAgKDB4MEQpCisjZGVmaW5lIERCR19QQUdFX0RFTU9EX0NGT19QSCAgICgweDBFKQorCit0eXBlZGVmIGVudW0gX2RiZ1JhbVN0YXR1cworeworICAgIERCR19SQU1fU1VDQ0VTUyA9IDAsCisgICAgREJHX1JBTV9GQUlMX1NBTVBMRV9OVU1fTElNSVQgPSAxLAorICAgIERCR19SQU1fRkFJTF9QQUdFX0VSUk9SID0gMiwKKyAgICBEQkdfUkFNX0ZBSUxfTlVMTF9QT0lOVEVSID0gMywKKyAgICBEQkdfUkFNX0lOVkFMSURfVFJJR19TRVRUSU5HID0gNCwKKyAgICBEQkdfUkFNX0ZBSUxfTk9UX0VOT1VHSF9TQU1QTEVTID0gNSwKKyAgICBEQkdfUkFNX0NBUFRVUkVfTk9UX0NPTVBMRVRFID0gNiwgLyogTm90IGFuIGVycm9yIHJlc3BvbnNlLCBidXQgYW4gaW5kaWNhdGlvbiB0aGF0IGNhcHR1cmUgaXNuJ3QgY29tcGxldGUgZm9yIHN0YXR1cyBwb2xsaW5nICovCit9IGRiZ1JhbVN0YXR1c190OworCisjaWYgUkFESU9fSVNfR0VOXzNQMAordHlwZWRlZiBlbnVtIF9kYmdSYW1TdGFydFRyaWdnZXJUeXBlCit7CisgICAgTk9fU1RBUlRfVFJJRyA9IDAsCisgICAgU1RBUlRfT05fRlNLX1BSRUFNQkxFX0ZPVU5EID0gMSwKKyAgICBTVEFSVF9PTl9GU0tfQUFfTUFUQ0ggPSAyLAorICAgIFNUQVJUX09OX1pCREVNT0RfUFJFQU1CTEVfRk9VTkQgPSAzLAorICAgIFNUQVJUX09OX1pCREVNT0RfU0ZEX01BVENIID0gNCwKKyAgICBTVEFSVF9PTl9BR0NfRENPQ19HQUlOX0NIRyA9IDUsCisgICAgU1RBUlRfT05fVFNNX1JYX0RJR19FTiA9IDYsCisgICAgU1RBUlRfT05fVFNNX1NQQVJFMl9FTiA9IDcsCisgICAgSU5WQUxJRF9TVEFSVF9UUklHID0gOAorfSBkYmdSYW1TdGFydFRyaWdnZXJUeXBlOworCit0eXBlZGVmIGVudW0gX2RiZ1JhbVN0b3BUcmlnZ2VyVHlwZQoreworICAgIE5PX1NUT1BfVFJJRyA9IDAsCisgICAgU1RPUF9PTl9GU0tfUFJFQU1CTEVfRk9VTkQgPSAxLAorICAgIFNUT1BfT05fRlNLX0FBX01BVENIID0gMiwKKyAgICBTVE9QX09OX1pCREVNT0RfUFJFQU1CTEVfRk9VTkQgPSAzLAorICAgIFNUT1BfT05fWkJERU1PRF9TRkRfTUFUQ0ggPSA0LAorICAgIFNUT1BfT05fQUdDX0RDT0NfR0FJTl9DSEcgPSA1LAorICAgIFNUT1BfT05fVFNNX1JYX0RJR19FTiA9IDYsCisgICAgU1RPUF9PTl9UU01fU1BBUkUzX0VOID0gNywKKyAgICBTVE9QX09OX1RTTV9QTExfVU5MT0NLID0gOCwKKyAgICBTVE9QX09OX0JMRV9DUkNfRVJST1JfSU5DID0gOSwKKyAgICBTVE9QX09OX0NSQ19GQUlMX1pHQkVfR0VORlNLID0gMTAsCisgICAgU1RPUF9PTl9HRU5GU0tfSEVBREVSX0ZBSUwgPSAxMSwKKyAgICBJTlZBTElEX1NUT1BfVFJJRyA9IDEyCit9IGRiZ1JhbVN0b3BUcmlnZ2VyVHlwZTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBmb3Igc2FtcGxlIGNhcHR1cmUgdG8gcGFja2V0IFJBTS4KKyAqCisgKiBccmV0dXJuIE5vbmUuCisgKgorICogXGRldGFpbHMgCisgKiBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IHNvbWUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBjYWxsaW5nIHJvdXRpbmUgYm90aCBzZXQKKyAqIHRoZSBjaGFubmVsIGFuZCBmb3JjZSBSWCB3YXJtdXAgYmVmb3JlIGNhbGxpbmcgOjpkYmdfcmFtX2NhcHR1cmUoKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZGJnX3JhbV9pbml0KHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYW55IHN0YXRlIHJlc3RvcmF0aW9uIGF0IHRoZSBjb21wbGV0aW9uIG9mIFBLVCBSQU0gY2FwdHVyZS4KKyAqIAorICogXGRldGFpbHMKKyAqIEFueSBjbG9ja3MgZW5hYmxlZCB0byB0aGUgcGFja2V0IFJBTSBjYXB0dXJlIGNpcmN1aXRyeSBhcmUgZGlzYWJsZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRiZ19yYW1fcmVsZWFzZSh2b2lkKTsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgdGhlIGNhcHR1cmUgb2YgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgdHJhbnNjZWl2ZXIgcGFja2V0IFJBTS4KKyAqCisgKiBccGFyYW1baW5dIGRiZ19wYWdlIC0gVGhlIHBhZ2Ugc2VsZWN0b3IgKERCR19QQUdFKS4KKyAqIFxwYXJhbVtpbl0gZGJnX3N0YXJ0X3RyaWdnZXIgLSBUaGUgdHJpZ2dlciB0byBzdGFydCBhY3F1aXNpdGlvbiAobXVzdCBiZSAibm8gdHJpZ2dlciIgaWYgYSBzdG9wIHRyaWdnZXIgaXMgZW5hYmxlZCkuCisgKiBccGFyYW1baW5dIGRiZ19zdG9wX3RyaWdnZXIgLSBUaGUgdHJpZ2dlciB0byBzdG9wIGFjcXVpc2l0aW9uIChtdXN0IGJlICJubyB0cmlnZ2VyIiBpZiBhIHN0YXJ0IHRyaWdnZXIgaXMgZW5hYmxlZCkuCisgKgorICogXHJldHVybiBTdGF0dXMgb2YgdGhlIHJlcXVlc3QuCisgKgorICogXGRldGFpbHMgCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgcHJvY2VzcyBvZiBjYXB0dXJpbmcgZGF0YSB0byB0aGUgcGFja2V0IFJBTS4gRGVwZW5kaW5nIHVwb24gdGhlIHN0YXJ0IGFuZCBzdG9wIHRyaWdnZXIKKyAqIHNldHRpbmdzLCB0aGUgYWN0dWFsIGNhcHR1cmUgcHJvY2VzcyBjYW4gdGFrZSBhbiBpbmRldGVybWluYXRlIGFtb3VudCBvZiB0aW1lLiBPdGhlciBBUElzIGFyZSBwcm92aWRlZCB0byAKKyAqIHBlcmZvcm0gYSBibG9ja2luZyB3YWl0IGZvciBjb21wbGV0aW9uIG9yIGFsbG93IHBvbGxpbmcgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGNhcHR1cmUuCisgKiBBZnRlciBhbnkgY2FwdHVyZSBoYXMgY29tcGxldGVkLCBhIHNlcGFyYXRlIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgdG8gcG9zdHByb2Nlc3MgdGhlIGNhcHR1cmUgYW5kIGNvcHkgYWxsCisgKiBkYXRhIG91dCBvZiB0aGUgcGFja2V0IFJBTSBpbnRvIGEgbm9ybWFsIFJBTSBidWZmZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkYmdSYW1TdGF0dXNfdCBkYmdfcmFtX3N0YXJ0X2NhcHR1cmUodWludDhfdCBkYmdfcGFnZSwgZGJnUmFtU3RhcnRUcmlnZ2VyVHlwZSBzdGFydF90cmlnLCBkYmdSYW1TdG9wVHJpZ2dlclR5cGUgc3RvcF90cmlnKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgYmxvY2tpbmcgd2FpdCBmb3IgY29tcGxldGlvbiBvZiB0aGUgY2FwdHVyZSBvZiB0cmFuc2NlaXZlciBkYXRhIHRvIHRoZSB0cmFuc2NlaXZlciBwYWNrZXQgUkFNLgorICoKKyAqIFxyZXR1cm4gU3RhdHVzIG9mIHRoZSByZXF1ZXN0LCBEQkdfUkFNX1NVQ0NFU1MgaWYgY2FwdHVyZSBpcyBjb21wbGV0ZS4KKyAqCisgKiBcZGV0YWlscyAKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSB3YWl0IGxvb3AgZm9yIGNhcHR1cmUgY29tcGxldGlvbiBhbmQgbWF5IHRha2UgYW4gaW5kZXRlcm1pbmF0ZSBhbW91bnQgb2YgdGltZSBmb3IgCisgKiBzb21lIGNhcHR1cmUgdHJpZ2dlciB0eXBlcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RiZ1JhbVN0YXR1c190IGRiZ19yYW1fd2FpdF9mb3JfY29tcGxldGUodm9pZCk7IC8qIEJsb2NraW5nIHdhaXQgZm9yIGNhcHR1cmUgY29tcGxldGlvbiwgbm8gbWF0dGVyIHdoYXQgdHJpZ2dlciB0eXBlICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgc3RhdGUgb2YgdGhlIGNhcHR1cmUgb2YgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgdHJhbnNjZWl2ZXIgcGFja2V0IFJBTS4KKyAqCisgKiBccmV0dXJuIFN0YXR1cyBvZiB0aGUgcmVxdWVzdCwgREJHX1JBTV9TVUNDRVNTIGlmIGNhcHR1cmUgaXMgY29tcGxldGUsIERCR19SQU1fQ0FQVFVSRV9OT1RfQ09NUExFVEUgaWYgbm90IGNvbXBsZXRlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RiZ1JhbVN0YXR1c190IGRiZ19yYW1fcG9sbF9jYXB0dXJlX3N0YXR1cyh2b2lkKTsgLyogTm9uLWJsb2NraW5nIGNvbXBsZXRpb24gY2hlY2ssIGp1c3QgcmVhZHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBjYXB1cmUgKi8KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgY2FwdHVyZWQgZGF0YSBpbnRvIGEgdXNhYmxlIG9yZGVyIGFuZCBjb3BpZXMgZnJvbSBwYWNrZXQgUkFNIHRvIG5vcm1hbCBSQU0uCisgKgorICogXHBhcmFtW2luXSBkYmdfcGFnZSAtIFRoZSBwYWdlIHNlbGVjdG9yIChEQkdfUEFHRSkuCisgKiBccGFyYW1baW5dIGJ1ZmZlcl9zel9ieXRlcyAtIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChpbiBieXRlcykKKyAqIFxwYXJhbVtpbl0gcmVzdWx0X2J1ZmZlciAtIFRoZSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyIG9mIGEgc2l6ZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBzYW1wbGVzLgorICoKKyAqIFxyZXR1cm4gTm9uZS4KKyAqCisgKiBcZGV0YWlscyAKKyAqIERhdGEgaXMgY29waWVkIGZyb20gcGFja2V0IFJBTSBpbiBieXRlcyB0byBlbnN1cmUgbm8gYWNjZXNzIHByb2JsZW1zLiBEYXRhIGlzIHVucGFja2VkIGZyb20gcGFja2V0IFJBTSAKKyAqIChlaXRoZXIgc2VxdWVudGlhbGx5IGNhcHR1cmVkIG9yIHNpbXVsdGFuZW91c2x5IGNhcHR1cmVkKSBpbnRvIGEgbGluZWFyIFJBTSBidWZmZXIgaW4gc3lzdGVtIFJBTS4gCisgKiBJZiBhIHN0YXJ0IHRyaWdnZXIgaXMgZW5hYmxlZCB0aGVuIHRoZSBmaXJzdCBidWZmZXJfc3pfYnl0ZXMgdGhhdCBhcmUgY2FwdHVyZWQgYXJlIGNvcGllZCBvdXQuCisgKiBJZiBhIHN0b3AgdHJpZ2dlciBpcyBlbmFibGVkIHRoZW4gdGhlIGxhc3QgYnVmZmVyX3N6X2J5dGVzIHRoYXQgYXJlIGNhcHR1cmVkIGFyZSBjb3BpZWQgb3V0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZGJnUmFtU3RhdHVzX3QgZGJnX3JhbV9wb3N0cHJvY19jYXB0dXJlKHVpbnQ4X3QgZGJnX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdm9pZCAqIHJlc3VsdF9idWZmZXIpOyAvKiBwb3N0cHJvY2VzcyBhIGNhcHR1cmUgdG8gdW5wYWNrIGRhdGEgKi8KKworI2Vsc2UKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBjYXB0dXJlcyB0cmFuc2NlaXZlciBkYXRhIHRvIHRoZSB0cmFuc2NlaXZlciBwYWNrZXQgUkFNLgorICoKKyAqIFxwYXJhbVtpbl0gZGJnX3BhZ2UgLSBUaGUgcGFnZSBzZWxlY3RvciAoREJHX1BBR0UpLgorICogXHBhcmFtW2luXSBidWZmZXJfc3pfYnl0ZXMgLSBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoaW4gYnl0ZXMpCisgKiBccGFyYW1baW5dIHJlc3VsdF9idWZmZXIgLSBUaGUgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBvZiBhIHNpemUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgc2FtcGxlcy4KKyAqCisgKiBccmV0dXJuIE5vbmUuCisgKgorICogXGRldGFpbHMgCisgKiBUaGUgY2FwdHVyZSB0byBwYWNrZXQgUkFNIGFsd2F5cyBjYXB0dXJlcyBhIGZ1bGwgUEtUX1JBTSB3b3J0aCBvZiBzYW1wbGVzLiBUaGUgc2FtcGxlcyB3aWxsIGJlIAorICogY29waWVkIHRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSByZXN1bHRfYnVmZmVyIHBhcmFtZXRlciB1bnRpbCBidWZmZXJfc3pfYnl0ZXMgd29ydGggb2YgZGF0YSBoYXZlCisgKiBiZWVuIGNvcGllZC4gRGF0YSB3aWxsIGJlIGNvcGllZCAKKyAqIE5PVEU6IFRoaXMgcm91dGluZSBoYXMgYSBzbGlnaHQgaGF6YXJkIG9mIGdldHRpbmcgc3R1Y2sgd2FpdGluZyBmb3IgZGVidWcgUkFNIHRvIGZpbGwgdXAgd2hlbiBSWCBoYXMKKyAqIG5vdCBiZWVuIGVuYWJsZWQgb3IgUlggZW5kcyBiZWZvcmUgdGhlIFJBTSBmaWxscyB1cCAoc3VjaCBhcyB3aGVuIGNhcHR1cmluZyBwYWNrZXQgZGF0YSApLiBJdCBpcyAKKyAqIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBtYW51YWxseSB0cmlnZ2VyZWQgUlggd2hlcmUgUlggZGF0YSB3aWxsIGNvbnRpbnVlIGFzIGxvbmcgYXMgbmVlZGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZGJnUmFtU3RhdHVzX3QgZGJnX3JhbV9jYXB0dXJlKHVpbnQ4X3QgZGJnX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdm9pZCAqIHJlc3VsdF9idWZmZXIpOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyogQH0gKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9EQkdfUkFNX0NBUFRVUkVfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kbWFfY2FwdHVyZS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kbWFfY2FwdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWZmZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2RtYV9jYXB0dXJlLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgIk1LVzQxWjQuaCIKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorI2luY2x1ZGUgImZzbF9lZG1hLmgiCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorI2luY2x1ZGUgImRtYV9jYXB0dXJlLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUEtUX1JBTV9TSVpFXzE2Ql9XT1JEUyAgKDU0NCkgLyogTnVtYmVyIG9mIDE2Yml0IGVudHJpZXMgaW4gZWFjaCBQYWNrZXQgUkFNICovCisjZGVmaW5lIFNJR05fRVhUTkRfMTJfMTYoeCkgICAgICgoeCkgfCAoKCh4KSAmIDB4ODAwKSA/IDB4RjAwMCA6IDB4MCkpCisjZGVmaW5lIFNJR05fRVhUTkRfNV84KHgpICAgICAgICgoeCkgfCAoKCh4KSAmIDB4MTApID8gMHhFMCA6IDB4MCkpCisKK2NvbnN0IGRtYV9jYXB0dXJlX2x1dF90IGRtYV90YWJsZSBbRE1BX1BBR0VfTUFYXSA9IAoreworICAvKiBETUFfUEFHRSAgICAgICAgICAgICAgIE9TUiAqLworICAgIHtETUFfUEFHRV9JRExFLCAgICAgICAgIDB4Rn0sCisgICAge0RNQV9QQUdFX1JYRElHSVEsICAgICAgMHg0fSwKKyAgICB7RE1BX1BBR0VfUlhESUdJLCAgICAgICAweDJ9LAorICAgIHtETUFfUEFHRV9SWERJR1EsICAgICAgIDB4Mn0sCisgICAge0RNQV9QQUdFX1JBV0FEQ0lRLCAgICAgMHgyfSwKKyAgICB7RE1BX1BBR0VfUkFXQURDSSwgICAgICAweDF9LAorICAgIHtETUFfUEFHRV9SQVdBRENRLCAgICAgIDB4MX0sCisgICAge0RNQV9QQUdFX0RDRVNUSVEsICAgICAgMHg0fSwKKyAgICB7RE1BX1BBR0VfRENFU1RJLCAgICAgICAweDJ9LAorICAgIHtETUFfUEFHRV9EQ0VTVFEsICAgICAgIDB4Mn0sCisgICAge0RNQV9QQUdFX1JYSU5QSCwgICAgICAgMHgxfSwKKyAgICB7RE1BX1BBR0VfREVNT0RfSEFSRCwgICAweEZ9LAorICAgIHtETUFfUEFHRV9ERU1PRF9TT0ZULCAgIDB4Rn0sCisgICAge0RNQV9QQUdFX0RFTU9EX0RBVEEsICAgMHhGfSwKKyAgICB7RE1BX1BBR0VfREVNT0RfQ0ZPX1BILCAweEZ9LCAgCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbml0aWFsaXplIHRvIGFuIGludmFsaWQgdmFsdWUuICovCit1aW50OF90IG9zcl90ZW1wID0gMHhGOworZWRtYV9oYW5kbGVfdCBnX0VETUFfSGFuZGxlOwordm9sYXRpbGUgYm9vbCBnX1RyYW5zZmVyX0RvbmUgPSBmYWxzZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzZXIgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIEVETUEgdHJhbnNmZXIuICovCit2b2lkIEVETUFfQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpwYXJhbSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpCit7CisgICAgaWYgKHRyYW5zZmVyRG9uZSkKKyAgICB7CisgICAgICAgIGdfVHJhbnNmZXJfRG9uZSA9IHRydWU7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hX2luaXQodm9pZCkKK3sgICAKKyAgICBlZG1hX2NvbmZpZ190IGRtYUNvbmZpZzsKKyAgICAKKyAgICAvKiBDb25maWd1cmUgRE1BTVVYICovCisgICAgRE1BTVVYX0luaXQoRE1BTVVYMCk7CisgICAgRE1BTVVYX1NldFNvdXJjZShETUFNVVgwLCAwLCAxMSk7CisgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoRE1BTVVYMCwgMCk7CisgICAgCisgICAgLyogQ29uZmlndXJlIEVETUEgdHJhbnNmZXIgKi8KKyAgICBFRE1BX0dldERlZmF1bHRDb25maWcoJmRtYUNvbmZpZyk7CisgICAgRURNQV9Jbml0KERNQTAsICZkbWFDb25maWcpOworICAgIEVETUFfQ3JlYXRlSGFuZGxlKCZnX0VETUFfSGFuZGxlLCBETUEwLCAwKTsKKyAgICBFRE1BX1NldENhbGxiYWNrKCZnX0VETUFfSGFuZGxlLCBFRE1BX0NhbGxiYWNrLCBOVUxMKTsKKyAgICAKKyAgICAvKiBUdXJucyBvbiBjbG9ja2luZyB0byBETUEvREJHIGJsb2NrcyAqLworICAgIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCB8PSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ETUFfRFRFU1RfRU5fTUFTSzsKKyAgICAvKiBTYXZlIGN1cnJlbnQgb3NyIGNvbmZpZyAqLworICAgIG9zcl90ZW1wID0gKFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCAmIFhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUl9NQVNLKSA+PiBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1JfU0hJRlQ7CisKKyAgICAvKiBTb21lIGV4dGVybmFsIGNvZGUgbXVzdCBwZXJmb3JtIHRoZSBSWCB3YXJtdXAgcmVxdWVzdCAqLworfQorCitkbWFTdGF0dXNfdCBkbWFfd2FpdF9mb3JfY29tcGxldGUodm9pZCkKK3sKKyAgICBkbWFTdGF0dXNfdCBzdGF0dXMgPSBETUFfU1VDQ0VTUzsKKyAgICAKKyAgICAvKiBXYWl0IGZvciBFRE1BIHRyYW5zZmVyIGZpbmlzaCAqLworICAgIHdoaWxlIChnX1RyYW5zZmVyX0RvbmUgIT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIC8qIFRpbWVvdXQgKi8KKyAgICAgICAgaWYgKFhDVlJfTUlTQy0+RE1BX0NUUkwgJiBYQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1RJTUVEX09VVF9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDbGVhciBmbGFnICovCisgICAgICAgICAgICBYQ1ZSX01JU0MtPkRNQV9DVFJMIHw9IFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRURfT1VUX01BU0s7CisKKyAgICAgICAgICAgIC8qIENhcHR1cmUgZXJyb3IgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IERNQV9DQVBUVVJFX05PVF9DT01QTEVURTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogUmVsZWFzZSBETUEgbW9kdWxlICovCisgICAgZG1hX3JlbGVhc2UoKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitkbWFTdGF0dXNfdCBkbWFfcG9sbF9jYXB0dXJlX3N0YXR1cyh2b2lkKQoreyAgCisgIGRtYVN0YXR1c190IHN0YXR1cyA9IERNQV9TVUNDRVNTOworICAKKyAgaWYgKGdfVHJhbnNmZXJfRG9uZSAhPSB0cnVlKQorICB7CisgICAgICAvKiBUaW1lb3V0ICovCisgICAgICBpZiAoWENWUl9NSVNDLT5ETUFfQ1RSTCAmIFhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfVElNRURfT1VUX01BU0spCisgICAgICB7CisgICAgICAgICAgLyogQ2xlYXIgZmxhZyAqLworICAgICAgICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgfD0gWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9USU1FRF9PVVRfTUFTSzsKKyAgICAgICAgICAvKiBSZWxlYXNlIERNQSBtb2R1bGUgKi8KKyAgICAgICAgICBkbWFfcmVsZWFzZSgpOworICAgICAgICAgIC8qIENhcHR1cmUgZXJyb3IgKi8KKyAgICAgICAgICBzdGF0dXMgPSBETUFfQ0FQVFVSRV9OT1RfQ09NUExFVEU7CisgICAgICB9CisgIH0KKyAgCisgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgZG1hX3JlbGVhc2Uodm9pZCkKK3sgICAKKyAgICAvKiBSZXN0YXJ0IGZsYWcgKi8KKyAgICBnX1RyYW5zZmVyX0RvbmUgPSBmYWxzZTsKKyAgICAKKyAgICAvKiBEaXNhYmxlIERNQSAqLworICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgJj0gflhDVlJfQ1RSTF9ETUFfQ1RSTF9ETUFfUEFHRV9NQVNLOyAKKyAgICAKKyAgICAvKiBHYXNrZXQgYnlwYXNzIGRpc2FibGUgKi8KKyAgICBSU0lNLT5DT05UUk9MICY9IH4oUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTl9NQVNLIHwgCisgICAgICAgICAgICAgICAgICAgICAgIFJTSU1fQ09OVFJPTF9SQURJT19HQVNLRVRfQllQQVNTX09WUkRfTUFTSyk7IAorICAgIAorICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgb3NyIGNvbmZpZyAoaWYgYW55KSAqLworICAgIGlmIChvc3JfdGVtcCAhPSAweEYpCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgJj0gflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUl9NQVNLOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgfD0gWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfREVDX0ZJTFRfT1NSKG9zcl90ZW1wKTsKKyAgICAgICAgb3NyX3RlbXAgPSAweEY7CisgICAgfQorfQorCisjaWYgUkFESU9fSVNfR0VOXzNQMAorZG1hU3RhdHVzX3QgZG1hX3N0YXJ0X2NhcHR1cmUodWludDhfdCBkYmdfcGFnZSwgdWludDE2X3QgYnVmZmVyX3N6X2J5dGVzLCB2b2lkICogcmVzdWx0X2J1ZmZlciwgZG1hU3RhcnRUcmlnZ2VyVHlwZSBzdGFydF90cmlnKQoreworCQorfQorI2Vsc2UKK2RtYVN0YXR1c190IGRtYV9jYXB0dXJlKHVpbnQ4X3QgZG1hX3BhZ2UsIHVpbnQxNl90IGJ1ZmZlcl9zel9ieXRlcywgdWludDMyX3QgKiByZXN1bHRfYnVmZmVyKQoreworICAgIGRtYVN0YXR1c190IHN0YXR1cyA9IERNQV9TVUNDRVNTOworICAgIAorICAgIC8qIFNvbWUgZXh0ZXJuYWwgY29kZSBtdXN0IHBlcmZvcm0gdGhlIFJYIHdhcm11cCByZXF1ZXN0IGFmdGVyIHRoZSBkX2luaXQoKSBjYWxsLiAqLworICAgIGlmIChyZXN1bHRfYnVmZmVyID09IE5VTEwpCisgICAgeworICAgICAgICBzdGF0dXMgPSBETUFfRkFJTF9OVUxMX1BPSU5URVI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChidWZmZXJfc3pfYnl0ZXMgPiAoNDA5NikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IERNQV9GQUlMX1NBTVBMRV9OVU1fTElNSVQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCB0ZW1wID0gWENWUl9NSVNDLT5ETUFfQ1RSTCAmIH5YQ1ZSX0NUUkxfRE1BX0NUUkxfRE1BX1BBR0VfTUFTSzsKKyAgICAgICAgICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJDb25maWc7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIFdhaXQgZm9yIE5ldHdvcmsgQWRkcmVzcyBNYXRjaCB0byBzdGFydCBjYXB0dXJpbmcgKi8KKy8vICAgICAgICAgICAgd2hpbGUgKCEoKFhDVlJfTUlTQy0+RE1BX0NUUkwgJiBYQ1ZSX0NUUkxfRCAgTUFfQ1RSTF9ETUFfVFJJR0dFUlJFRF9NQVNLKSkpOyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChkbWFfcGFnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfUlhESUdJUToKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfUkFXQURDSVE6CisgICAgICAgICAgICBjYXNlIERNQV9QQUdFX0RDRVNUSVE6CisgICAgICAgICAgICBjYXNlIERNQV9QQUdFX1JYSU5QSDoKKyAgICAgICAgICAgIGNhc2UgRE1BX1BBR0VfREVNT0RfQ0ZPX1BIOgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIFNldCBPU1IgKi8KKyAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgJj0gflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RFQ19GSUxUX09TUl9NQVNLOworICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCB8PSBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9ERUNfRklMVF9PU1IoZG1hX3RhYmxlW2RtYV9wYWdlXS5vc3IpOyAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBTaW5nbGUgcmVxdWVzdCBtb2RlICovCisgICAgICAgICAgICAgICAgWENWUl9NSVNDLT5ETUFfQ1RSTCB8PSBYQ1ZSX0NUUkxfRE1BX0NUUkxfU0lOR0xFX1JFUV9NT0RFX01BU0s7CisgICAgICAgICAgICAgICAgWENWUl9NSVNDLT5ETUFfQ1RSTCAmPSB+WENWUl9DVFJMX0RNQV9DVFJMX0JZUEFTU19ETUFfU1lOQ19NQVNLOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIEdhc2tldCBieXBhc3MgZGlzYWJsZSAqLworICAgICAgICAgICAgICAgIFJTSU0tPkNPTlRST0wgJj0gfihSU0lNX0NPTlRST0xfUkFESU9fR0FTS0VUX0JZUEFTU19PVlJEX0VOX01BU0sgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9NQVNLKTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBETUFfUEFHRV9ERU1PRF9IQVJEOgorICAgICAgICAgICAgY2FzZSBETUFfUEFHRV9ERU1PRF9TT0ZUOgorICAgICAgICAgICAgY2FzZSBETUFfUEFHRV9ERU1PRF9EQVRBOgorICAgICAgICAgICAgICAgIC8qIERhdGEgcmF0ZSBpcyB0b28gbG93IHRvIHVzZSBTaW5nbGUgUmVxIG1vZGUgKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBSZXF1ZXN0IHBlciBzYW1wbGUgbW9kZSAqLworICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgJj0gWENWUl9DVFJMX0RNQV9DVFJMX1NJTkdMRV9SRVFfTU9ERV9NQVNLOworICAgICAgICAgICAgICAgIFhDVlJfTUlTQy0+RE1BX0NUUkwgfD0gWENWUl9DVFJMX0RNQV9DVFJMX0JZUEFTU19ETUFfU1lOQ19NQVNLOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIEdhc2tldCBieXBhc3MgZW5hYmxlICovCisgICAgICAgICAgICAgICAgUlNJTS0+Q09OVFJPTCB8PSAoUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9FTl9NQVNLIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNJTV9DT05UUk9MX1JBRElPX0dBU0tFVF9CWVBBU1NfT1ZSRF9NQVNLKTsgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBETUFfUEFHRV9JRExFOgorICAgICAgICAgICAgZGVmYXVsdDogICAgCisgICAgICAgICAgICAgICAgLyogSWxsZWdhbCBjYXB0dXJlIHBhZ2UgcmVxdWVzdCAqLworICAgICAgICAgICAgICAgIHN0YXR1cyA9IERNQV9GQUlMX1BBR0VfRVJST1I7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRE1BX1NVQ0NFU1MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2VsZWN0IERNQV9wYWdlICovCisgICAgICAgICAgICAgICAgWENWUl9NSVNDLT5ETUFfQ1RSTCA9ICB0ZW1wIHwgWENWUl9DVFJMX0RNQV9DVFJMX0RNQV9QQUdFKGRtYV9wYWdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBFRE1BIHRyYW5zZmVyIGNvbmZpZyAqLworICAgICAgICAgICAgICAgIEVETUFfUHJlcGFyZVRyYW5zZmVyKCZ0cmFuc2ZlckNvbmZpZywgLyogQ29uZmlnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopJlhDVlJfTUlTQy0+RE1BX0RBVEEsIC8qIFNvdXJjZSBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSwgLyogU291cmNlIGFkZHJlc3Mgd2lkdGgoYnl0ZXMpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1ZmZlciwgLyogRGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqcmVzdWx0X2J1ZmZlciksIC8qIERlc3RpbmF0aW9uIGFkZHJlc3Mgd2lkdGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3QpLCAvKiBUcmFuc2ZlciBieXRlcyBwZXIgY2hhbm5lbCByZXF1ZXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3N6X2J5dGVzLCAvKiBCeXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFRE1BX1BlcmlwaGVyYWxUb01lbW9yeSk7IC8qIFRyYW5zZmVyIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBFRE1BX1N1Ym1pdFRyYW5zZmVyKCZnX0VETUFfSGFuZGxlLCAmdHJhbnNmZXJDb25maWcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoJmdfRURNQV9IYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBzdGF0dXM7CQorfQorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZG1hX2NhcHR1cmUuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZG1hX2NhcHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg2MzRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9kbWFfY2FwdHVyZS5oCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0RNQV9DQVBUVVJFX0hfCisjZGVmaW5lIF9ETUFfQ0FQVFVSRV9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisjaWYgUkFESU9fSVNfR0VOXzNQMAorI2luY2x1ZGUgIkszMlcwNDJTMU0yX00wUC5oIgorI2Vsc2UKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyohCisgKiBAYWRkdG9ncm91cCB4Y3ZyCisgKiBAeworICovCisKKy8qISBAZmlsZSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBhZ2UgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRE1BX1BBR0VfSURMRSAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIERNQV9QQUdFX1JYRElHSVEgICAgICAgICgweDAxKQorI2RlZmluZSBETUFfUEFHRV9SWERJR0kgICAgICAgICAoMHgwMikKKyNkZWZpbmUgRE1BX1BBR0VfUlhESUdRICAgICAgICAgKDB4MDMpCisjZGVmaW5lIERNQV9QQUdFX1JBV0FEQ0lRICAgICAgICgweDA0KQorI2RlZmluZSBETUFfUEFHRV9SQVdBRENJICAgICAgICAoMHgwNSkKKyNkZWZpbmUgRE1BX1BBR0VfUkFXQURDUSAgICAgICAgKDB4MDYpCisjZGVmaW5lIERNQV9QQUdFX0RDRVNUSVEgICAgICAgICgweDA3KQorI2RlZmluZSBETUFfUEFHRV9EQ0VTVEkgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgRE1BX1BBR0VfRENFU1RRICAgICAgICAgKDB4MDkpCisjZGVmaW5lIERNQV9QQUdFX1JYSU5QSCAgICAgICAgICgweDBBKQorI2RlZmluZSBETUFfUEFHRV9ERU1PRF9IQVJEICAgICAoMHgwQikKKyNkZWZpbmUgRE1BX1BBR0VfREVNT0RfU09GVCAgICAgKDB4MEMpCisjZGVmaW5lIERNQV9QQUdFX0RFTU9EX0RBVEEgICAgICgweDBEKQorI2RlZmluZSBETUFfUEFHRV9ERU1PRF9DRk9fUEggICAoMHgwRSkKKworI2RlZmluZSBETUFfUEFHRV9NQVggICAoMHgwRikKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90IGRtYV9wYWdlOworICAgIHVpbnQ4X3Qgb3NyOworfSBkbWFfY2FwdHVyZV9sdXRfdDsKKwordHlwZWRlZiBlbnVtIF9kbWFTdGF0dXMKK3sKKyAgICBETUFfU1VDQ0VTUyA9IDAsCisgICAgRE1BX0ZBSUxfU0FNUExFX05VTV9MSU1JVCA9IDEsCisgICAgRE1BX0ZBSUxfUEFHRV9FUlJPUiA9IDIsCisgICAgRE1BX0ZBSUxfTlVMTF9QT0lOVEVSID0gMywKKyAgICBETUFfSU5WQUxJRF9UUklHX1NFVFRJTkcgPSA0LAorICAgIERNQV9GQUlMX05PVF9FTk9VR0hfU0FNUExFUyA9IDUsCisgICAgRE1BX0NBUFRVUkVfTk9UX0NPTVBMRVRFID0gNiwgICAgIC8qIE5vdCBhbiBlcnJvciByZXNwb25zZSwgYnV0IGFuIGluZGljYXRpb24gdGhhdCBjYXB0dXJlIGlzbid0IGNvbXBsZXRlIGZvciBzdGF0dXMgcG9sbGluZy4gKi8KK30gZG1hU3RhdHVzX3Q7IAorCisjaWYgUkFESU9fSVNfR0VOXzNQMAordHlwZWRlZiBlbnVtIGRtYVN0YXJ0VHJpZ2dlclR5cGUKK3sKKyAgICBOT19ETUFfU1RBUlRfVFJJRyA9IDAsCisgICAgU1RBUlRfRE1BX09OX0ZTS19QUkVBTUJMRV9GT1VORCA9IDEsCisgICAgU1RBUlRfRE1BX09OX0ZTS19BQV9NQVRDSCA9IDIsCisgICAgU1RBUlRfRE1BX09OX1pCREVNT0RfUFJFQU1CTEVfRk9VTkQgPSAzLAorICAgIFNUQVJUX0RNQV9PTl9aQkRFTU9EX1NGRF9NQVRDSCA9IDQsCisgICAgU1RBUlRfRE1BX09OX0FHQ19EQ09DX0dBSU5fQ0hHID0gNSwKKyAgICBTVEFSVF9ETUFfT05fVFNNX1JYX0RJR19FTiA9IDYsCisgICAgU1RBUlRfT0RNQV9OX1RTTV9TUEFSRTJfRU4gPSA3LAorICAgIElOVkFMSURfRE1BX1NUQVJUX1RSSUcgPSA4Cit9IGRtYVN0YXJ0VHJpZ2dlclR5cGU7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBmb3Igc2FtcGxlIGNhcHR1cmUgdG8gc3lzdGVtIFJBTSB1c2luZyBETUEuCisqCisqIFxyZXR1cm4gTm9uZS4KKyoKKyogXGRldGFpbHMgCisqIFRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgc29tZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGNhbGxpbmcgcm91dGluZSBib3RoIHNldAorKiB0aGUgY2hhbm5lbCBhbmQgZm9yY2UgUlggd2FybXVwIGJlZm9yZSBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBjYXB0dXJlIHJvdXRpbmUuCisqIFRoaXMgcm91dGluZSBtYXkgY29ycnVwdCB0aGUgT1NSIHZhbHVlIG9mIHRoZSBzeXN0ZW0gYnV0IHJlc3RvcmVzIGl0IGluIHRoZSA6OmRtYV9yZWxlYXNlKCkgcm91dGluZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFfaW5pdCh2b2lkKTsKKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBibG9ja2luZyB3YWl0IGZvciBjb21wbGV0aW9uIG9mIHRoZSBjYXB0dXJlIG9mIHRyYW5zY2VpdmVyIGRhdGEgdG8gdGhlIHN5c3RlbSBSQU0uCisqCisqIFxyZXR1cm4gU3RhdHVzIG9mIHRoZSByZXF1ZXN0LCBETUFfU1VDQ0VTUyBpZiBjYXB0dXJlIGlzIGNvbXBsZXRlLgorKgorKiBcZGV0YWlscyAKKyogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIHdhaXQgbG9vcCBmb3IgY2FwdHVyZSBjb21wbGV0aW9uIGFuZCBtYXkgdGFrZSBhbiBpbmRldGVybWluYXRlIGFtb3VudCBvZiB0aW1lIGZvciAKKyogc29tZSBjYXB0dXJlIHRyaWdnZXIgdHlwZXMuCisqIEJsb2NraW5nIHdhaXQgZm9yIGNhcHR1cmUgY29tcGxldGlvbiwgbm8gbWF0dGVyIHdoYXQgdHJpZ2dlciB0eXBlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkbWFTdGF0dXNfdCBkbWFfd2FpdF9mb3JfY29tcGxldGUodm9pZCk7CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIHBvbGxzIHRoZSBzdGF0ZSBvZiB0aGUgY2FwdHVyZSBvZiB0cmFuc2NlaXZlciBkYXRhIHRvIHRoZSB0cmFuc2NlaXZlciBwYWNrZXQgUkFNLgorKgorKiBccmV0dXJuIFN0YXR1cyBvZiB0aGUgcmVxdWVzdCwgRE1BX1NVQ0NFU1MgaWYgY2FwdHVyZSBpcyBjb21wbGV0ZSwgRE1BX0NBUFRVUkVfTk9UX0NPTVBMRVRFIGlmIG5vdCBjb21wbGV0ZS4KKyoKKyogXGRldGFpbHMKKyogTm9uLWJsb2NraW5nIGNvbXBsZXRpb24gY2hlY2ssIGp1c3QgcmVhZHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBjYXB1cmUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYVN0YXR1c190IGRtYV9wb2xsX2NhcHR1cmVfc3RhdHVzKHZvaWQpOworCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgc3RhdGUgcmVzdG9yYXRpb24gYXQgdGhlIGNvbXBsZXRpb24gb2YgRE1BIGNhcHR1cmUgdG8gc3lzdGVtIFJBTS4KKyogCisqIFxkZXRhaWxzCisqIEJlY2F1c2UgRE1BIGNhcHR1cmUgb25seSB3b3JrcyBhdCBzcGVjaWZpYyBPU1IgdmFsdWVzIHRoZSBETUEgY2FwdHVyZSByb3V0aW5lcyBtdXN0IGZvcmNlIHRoZSBPU1IgdG8gdGhlCisqIHN1cHBvcnRlZCB2YWx1ZSB3aGVuIGNhcHR1cmluZyBkYXRhLiBUaGlzIGZvcmNlZCBPU1IgdmFsdWUgbXVzdCBiZSByZXN0b3JlZCBhZnRlciBETUEgb3BlcmF0aW9ucyBhcmUgY29tcGxldGUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hX3JlbGVhc2Uodm9pZCk7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgdGhlIGNhcHR1cmUgb2YgdHJhbnNjZWl2ZXIgZGF0YSB0byB0aGUgc3lzdGVtIFJBTS4KKyoKKyogXHBhcmFtW2luXSBkYmdfcGFnZSAtIFRoZSBwYWdlIHNlbGVjdG9yIChEQkdfUEFHRSkuCisqIFxwYXJhbVtpbl0gYnVmZmVyX3N6X2J5dGVzIC0gVGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgKGluIGJ5dGVzKQorKiBccGFyYW1baW5dIHJlc3VsdF9idWZmZXIgLSBUaGUgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBvZiBhIHNpemUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgc2FtcGxlcy4KKyogXHBhcmFtW2luXSBkYmdfc3RhcnRfdHJpZ2dlciAtIFRoZSB0cmlnZ2VyIHRvIHN0YXJ0IGFjcXVpc2l0aW9uIChtdXN0IGJlICJubyB0cmlnZ2VyIiBpZiBhIHN0b3AgdHJpZ2dlciBpcyBlbmFibGVkKS4KKyoKKyogXHJldHVybiBTdGF0dXMgb2YgdGhlIHJlcXVlc3QuCisqCisqIFxkZXRhaWxzIAorKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgcHJvY2VzcyBvZiBjYXB0dXJpbmcgZGF0YSB0byB0aGUgc3lzdGVtIFJBTS4gRGVwZW5kaW5nIHVwb24gdGhlIHN0YXJ0ICB0cmlnZ2VyCisqIHNldHRpbmdzLCB0aGUgYWN0dWFsIGNhcHR1cmUgcHJvY2VzcyBjYW4gdGFrZSBhbiBpbmRldGVybWluYXRlIGFtb3VudCBvZiB0aW1lLiBPdGhlciBBUElzIGFyZSBwcm92aWRlZCB0byAKKyogcGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgZm9yIGNvbXBsZXRpb24gb3IgYWxsb3cgcG9sbGluZyBmb3IgY29tcGxldGlvbiBvZiB0aGUgY2FwdHVyZS4KKyogQWZ0ZXIgYW55IGNhcHR1cmUgaGFzIGNvbXBsZXRlZCwgZGF0YSB3aWxsIGJlIGxlZnQgaW4gc3lzdGVtIFJBTS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hU3RhdHVzX3QgZG1hX3N0YXJ0X2NhcHR1cmUodWludDhfdCBkYmdfcGFnZSwgdWludDE2X3QgYnVmZmVyX3N6X2J5dGVzLCB2b2lkICogcmVzdWx0X2J1ZmZlciwgZG1hU3RhcnRUcmlnZ2VyVHlwZSBzdGFydF90cmlnKTsKKworI2Vsc2UgLyogR2VuIDIuMCB2ZXJzaW9uICovCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBjYXB0dXJlcyB0cmFuc2NlaXZlciBkYXRhIHRvIHRoZSB0cmFuc2NlaXZlciBwYWNrZXQgUkFNLgorKgorKiBccGFyYW1baW5dIGRtYV9wYWdlIC0gVGhlIHBhZ2Ugc2VsZWN0b3IgKERCR19QQUdFKS4KKyogXHBhcmFtW2luXSBidWZmZXJfc3pfYnl0ZXMgLSBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoaW4gYnl0ZXMpCisqIFxwYXJhbVtpbl0gcmVzdWx0X2J1ZmZlciAtIFRoZSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyIG9mIGEgc2l6ZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBzYW1wbGVzLgorKgorKiBccmV0dXJuIE5vbmUuCisqCisqIFxkZXRhaWxzIAorKiBUaGUgY2FwdHVyZSB0byBzeXN0ZW0gUkFNIC4gVGhlIHNhbXBsZXMgd2lsbCBiZSAKKyogY29waWVkIHRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSByZXN1bHRfYnVmZmVyIHBhcmFtZXRlciB1bnRpbCBidWZmZXJfc3pfYnl0ZXMgd29ydGggb2YgZGF0YSBoYXZlCisqIGJlZW4gY29waWVkLiBEYXRhIHdpbGwgYmUgY29waWVkIAorKiBOT1RFOiBUaGlzIHJvdXRpbmUgaGFzIGEgc2xpZ2h0IGhhemFyZCBvZiBnZXR0aW5nIHN0dWNrIHdhaXRpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ1dGVzIHdoZW4gUlggaGFzCisqIG5vdCBiZWVuIGVuYWJsZWQgb3IgUlggZW5kcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBieXRlIGNvdW50IGlzIGFjaGlldmVkIChzdWNoIGFzIHdoZW4gY2FwdHVyaW5nIHBhY2tldCBkYXRhICkuIEl0IGlzIAorKiBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggbWFudWFsbHkgdHJpZ2dlcmVkIFJYIHdoZXJlIFJYIGRhdGEgd2lsbCBjb250aW51ZSBhcyBsb25nIGFzIG5lZWRlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hU3RhdHVzX3QgZG1hX2NhcHR1cmUodWludDhfdCBkbWFfcGFnZSwgdWludDE2X3QgYnVmZmVyX3N6X2J5dGVzLCB1aW50MzJfdCAqIHJlc3VsdF9idWZmZXIpOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyogQH0gKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9ETUFfQ0FQVFVSRV9IXyAqLworCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnIuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmMxNTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2ci5jCkBAIC0wLDAgKzEsMjEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorI2luY2x1ZGUgImZzbF94Y3ZyX3RyaW0uaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiaWZyX3JhZGlvLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgY2hhbm5lbE1hcFRhYmxlU2l6ZSAoMTI4VSkKKyNkZWZpbmUgZ1BsbERlbm9tX2MgICAgICAgICAweDAyMDAwMDAwVSAvKiBEZW5vbWluYXRvciBpcyBhIGNvbnN0YW50IHZhbHVlICovCisjZGVmaW5lIEFCUyh4KSAoKHgpID4gMCA/ICh4KSA6IC0oeCkpCisKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgKHRydWUpCisjZW5kaWYKKworI2lmbmRlZiBGQUxTRQorI2RlZmluZSBGQUxTRSAgICAgICAgICAgICAgICAgICAgICAgKGZhbHNlKQorI2VuZGlmCisjZGVmaW5lIFJGX09TQ0lMTEFUT1JfU1RBWVNfT04gICAgIChmYWxzZSkgLyogQ29udHJvbCB3aGV0aGVyIFJGX09TQyBjYW4gYmUgbGVmdCBvbiBhbGwgdGhlIHRpbWUuICovCisjZGVmaW5lIFJGX09TQ0lMTEFUT1JfUkVBRFkgICAgICAgICgoUlNJTS0+Q09OVFJPTCAmIFJTSU1fQ09OVFJPTF9SRl9PU0NfUkVBRFlfTUFTSykgIT0gMHgwVSkKKworI2lmbmRlZiBFWFRFUk5BTF9DTE9DS19HRU4KKyNkZWZpbmUgRVhURVJOQUxfQ0xPQ0tfR0VOICAgMAorI2VuZGlmCisKKyNkZWZpbmUgQU5UX0EgICAxCisjZGVmaW5lIEFOVF9CICAgMAorCisjaWZuZGVmIFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOCisjZGVmaW5lIFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOIEFOVF9CCisjZW5kaWYgLyogWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeGN2cl9wbGxDaGFubmVsX3RhZworeworICAgIHVuc2lnbmVkIGludCBpbnRlZ2VyOworICAgIHVuc2lnbmVkIGludCBudW1lcmF0b3I7Cit9IHhjdnJfcGxsQ2hhbm5lbF90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgWGN2clBhbmljKFhDVlJfUEFOSUNfSURfVCBwYW5pY19pZCwgdWludDMyX3QgcGFuaWNfYWRkcmVzcyk7Cit2b2lkIHJmX29zY19zdGFydHVwKHZvaWQpOwordm9pZCByZl9vc2Nfc2h1dGRvd24odm9pZCk7CitleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUpOworZXh0ZXJuIGRvdWJsZSByb3VuZCAoZG91YmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBwYW5pY19mcHRyIHNfUGFuaWNGdW5jdGlvblB0ciA9IE5VTEw7Citjb25zdCB4Y3ZyX3BsbENoYW5uZWxfdCBtYXBUYWJsZSBbY2hhbm5lbE1hcFRhYmxlU2l6ZV0gPQoreworICAgIHsweDAwMDAwMDI1LCAweDA3QzAwMDAwfSwgLyogMCAqLworICAgIHsweDAwMDAwMDI1LCAweDA3QzgwMDAwfSwgLyogMSAqLworICAgIHsweDAwMDAwMDI1LCAweDA3RDAwMDAwfSwgLyogMiAqLworICAgIHsweDAwMDAwMDI1LCAweDA3RDgwMDAwfSwgLyogMyAqLworICAgIHsweDAwMDAwMDI1LCAweDA3RTAwMDAwfSwgLyogNCAqLworICAgIHsweDAwMDAwMDI1LCAweDA3RTgwMDAwfSwgLyogNSAqLworICAgIHsweDAwMDAwMDI1LCAweDA3RjAwMDAwfSwgLyogNiAqLworICAgIHsweDAwMDAwMDI1LCAweDA3RjgwMDAwfSwgLyogNyAqLworICAgIHsweDAwMDAwMDI1LCAweDAwMDAwMDAwfSwgLyogOCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwMDgwMDAwfSwgLyogOSAqLworICAgIHsweDAwMDAwMDI1LCAweDAwMTAwMDAwfSwgLyogMTAgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDE4MDAwMH0sIC8qIDExICovCisgICAgezB4MDAwMDAwMjUsIDB4MDAyMDAwMDB9LCAvKiAxMiAqLworICAgIHsweDAwMDAwMDI1LCAweDAwMjgwMDAwfSwgLyogMTMgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDMwMDAwMH0sIC8qIDE0ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDAzODAwMDB9LCAvKiAxNSAqLworICAgIHsweDAwMDAwMDI1LCAweDAwNDAwMDAwfSwgLyogMTYgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDQ4MDAwMH0sIC8qIDE3ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA1MDAwMDB9LCAvKiAxOCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwNTgwMDAwfSwgLyogMTkgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDYwMDAwMH0sIC8qIDIwICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA2ODAwMDB9LCAvKiAyMSAqLworICAgIHsweDAwMDAwMDI1LCAweDAwNzAwMDAwfSwgLyogMjIgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDc4MDAwMH0sIC8qIDIzICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA4MDAwMDB9LCAvKiAyNCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwODgwMDAwfSwgLyogMjUgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMDkwMDAwMH0sIC8qIDI2ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDA5ODAwMDB9LCAvKiAyNyAqLworICAgIHsweDAwMDAwMDI1LCAweDAwQTAwMDAwfSwgLyogMjggKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEE4MDAwMH0sIC8qIDI5ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBCMDAwMDB9LCAvKiAzMCAqLworICAgIHsweDAwMDAwMDI1LCAweDAwQjgwMDAwfSwgLyogMzEgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEMwMDAwMH0sIC8qIDMyICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBDODAwMDB9LCAvKiAzMyAqLworICAgIHsweDAwMDAwMDI1LCAweDAwRDAwMDAwfSwgLyogMzQgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEQ4MDAwMH0sIC8qIDM1ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBFMDAwMDB9LCAvKiAzNiAqLworICAgIHsweDAwMDAwMDI1LCAweDAwRTgwMDAwfSwgLyogMzcgKi8KKyAgICB7MHgwMDAwMDAyNSwgMHgwMEYwMDAwMH0sIC8qIDM4ICovCisgICAgezB4MDAwMDAwMjUsIDB4MDBGODAwMDB9LCAvKiAzOSAqLworICAgIHsweDAwMDAwMDI1LCAweDAxMDAwMDAwfSwgLyogNDAgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzA4MDAwMH0sIC8qIDQxICovCisgICAgezB4MDAwMDAwMjYsIDB4MDcxMDAwMDB9LCAvKiA0MiAqLworICAgIHsweDAwMDAwMDI2LCAweDA3MTgwMDAwfSwgLyogNDMgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzIwMDAwMH0sIC8qIDQ0ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDcyODAwMDB9LCAvKiA0NSAqLworICAgIHsweDAwMDAwMDI2LCAweDA3MzAwMDAwfSwgLyogNDYgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzM4MDAwMH0sIC8qIDQ3ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc0MDAwMDB9LCAvKiA0OCAqLworICAgIHsweDAwMDAwMDI2LCAweDA3NDgwMDAwfSwgLyogNDkgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzUwMDAwMH0sIC8qIDUwICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc1ODAwMDB9LCAvKiA1MSAqLworICAgIHsweDAwMDAwMDI2LCAweDA3NjAwMDAwfSwgLyogNTIgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzY4MDAwMH0sIC8qIDUzICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc3MDAwMDB9LCAvKiA1NCAqLworICAgIHsweDAwMDAwMDI2LCAweDA3NzgwMDAwfSwgLyogNTUgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzgwMDAwMH0sIC8qIDU2ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDc4ODAwMDB9LCAvKiA1NyAqLworICAgIHsweDAwMDAwMDI2LCAweDA3OTAwMDAwfSwgLyogNTggKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwNzk4MDAwMH0sIC8qIDU5ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdBMDAwMDB9LCAvKiA2MCAqLworICAgIHsweDAwMDAwMDI2LCAweDA3QTgwMDAwfSwgLyogNjEgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0IwMDAwMH0sIC8qIDYyICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdCODAwMDB9LCAvKiA2MyAqLworICAgIHsweDAwMDAwMDI2LCAweDA3QzAwMDAwfSwgLyogNjQgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0M4MDAwMH0sIC8qIDY1ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdEMDAwMDB9LCAvKiA2NiAqLworICAgIHsweDAwMDAwMDI2LCAweDA3RDgwMDAwfSwgLyogNjcgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0UwMDAwMH0sIC8qIDY4ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDdFODAwMDB9LCAvKiA2OSAqLworICAgIHsweDAwMDAwMDI2LCAweDA3RjAwMDAwfSwgLyogNzAgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwN0Y4MDAwMH0sIC8qIDcxICovCisgICAgezB4MDAwMDAwMjYsIDB4MDAwMDAwMDB9LCAvKiA3MiAqLworICAgIHsweDAwMDAwMDI2LCAweDAwMDgwMDAwfSwgLyogNzMgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDEwMDAwMH0sIC8qIDc0ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDAxODAwMDB9LCAvKiA3NSAqLworICAgIHsweDAwMDAwMDI2LCAweDAwMjAwMDAwfSwgLyogNzYgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDI4MDAwMH0sIC8qIDc3ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDAzMDAwMDB9LCAvKiA3OCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwMzgwMDAwfSwgLyogNzkgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDQwMDAwMH0sIC8qIDgwICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA0ODAwMDB9LCAvKiA4MSAqLworICAgIHsweDAwMDAwMDI2LCAweDAwNTAwMDAwfSwgLyogODIgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDU4MDAwMH0sIC8qIDgzICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA2MDAwMDB9LCAvKiA4NCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwNjgwMDAwfSwgLyogODUgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDcwMDAwMH0sIC8qIDg2ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA3ODAwMDB9LCAvKiA4NyAqLworICAgIHsweDAwMDAwMDI2LCAweDAwODAwMDAwfSwgLyogODggKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMDg4MDAwMH0sIC8qIDg5ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDA5MDAwMDB9LCAvKiA5MCAqLworICAgIHsweDAwMDAwMDI2LCAweDAwOTgwMDAwfSwgLyogOTEgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEEwMDAwMH0sIC8qIDkyICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBBODAwMDB9LCAvKiA5MyAqLworICAgIHsweDAwMDAwMDI2LCAweDAwQjAwMDAwfSwgLyogOTQgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEI4MDAwMH0sIC8qIDk1ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBDMDAwMDB9LCAvKiA5NiAqLworICAgIHsweDAwMDAwMDI2LCAweDAwQzgwMDAwfSwgLyogOTcgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEQwMDAwMH0sIC8qIDk4ICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBEODAwMDB9LCAvKiA5OSAqLworICAgIHsweDAwMDAwMDI2LCAweDAwRTAwMDAwfSwgLyogMTAwICovCisgICAgezB4MDAwMDAwMjYsIDB4MDBFODAwMDB9LCAvKiAxMDEgKi8KKyAgICB7MHgwMDAwMDAyNiwgMHgwMEYwMDAwMH0sIC8qIDEwMiAqLworICAgIHsweDAwMDAwMDI2LCAweDAwRjgwMDAwfSwgLyogMTAzICovCisgICAgezB4MDAwMDAwMjYsIDB4MDEwMDAwMDB9LCAvKiAxMDQgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzA4MDAwMH0sIC8qIDEwNSAqLworICAgIHsweDAwMDAwMDI3LCAweDA3MTAwMDAwfSwgLyogMTA2ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDcxODAwMDB9LCAvKiAxMDcgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzIwMDAwMH0sIC8qIDEwOCAqLworICAgIHsweDAwMDAwMDI3LCAweDA3MjgwMDAwfSwgLyogMTA5ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDczMDAwMDB9LCAvKiAxMTAgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzM4MDAwMH0sIC8qIDExMSAqLworICAgIHsweDAwMDAwMDI3LCAweDA3NDAwMDAwfSwgLyogMTEyICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc0ODAwMDB9LCAvKiAxMTMgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzUwMDAwMH0sIC8qIDExNCAqLworICAgIHsweDAwMDAwMDI3LCAweDA3NTgwMDAwfSwgLyogMTE1ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc2MDAwMDB9LCAvKiAxMTYgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzY4MDAwMH0sIC8qIDExNyAqLworICAgIHsweDAwMDAwMDI3LCAweDA3NzAwMDAwfSwgLyogMTE4ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc3ODAwMDB9LCAvKiAxMTkgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzgwMDAwMH0sIC8qIDEyMCAqLworICAgIHsweDAwMDAwMDI3LCAweDA3ODgwMDAwfSwgLyogMTIxICovCisgICAgezB4MDAwMDAwMjcsIDB4MDc5MDAwMDB9LCAvKiAxMjIgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwNzk4MDAwMH0sIC8qIDEyMyAqLworICAgIHsweDAwMDAwMDI3LCAweDA3QTAwMDAwfSwgLyogMTI0ICovCisgICAgezB4MDAwMDAwMjcsIDB4MDdBODAwMDB9LCAvKiAxMjUgKi8KKyAgICB7MHgwMDAwMDAyNywgMHgwN0IwMDAwMH0sIC8qIDEyNiAqLworICAgIHsweDAwMDAwMDI3LCAweDA3QjgwMDAwfSAgLyogMTI3ICovCit9OworCisvKiBSZWdpc3RlcnMgZm9yIHRpbWluZyBvZiBUWCAmIFJYICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAordWludDE2X3QgdHhfcnhfb25fZGVsYXkgPSBUWF9SWF9PTl9ERUxpbml0OwordWludDE2X3QgdHhfcnhfc3ludGhfZGVsYXkgPSBUWF9SWF9TWU5USF9pbml0OworI2Vsc2UKKyNpZiBSRl9PU0NfMjZNSFogPT0gMQordWludDE2X3QgdHhfcnhfb25fZGVsYXkgPSBUWF9SWF9PTl9ERUxBWV9WQUxfMjZNSFo7CisjZWxzZQordWludDE2X3QgdHhfcnhfb25fZGVsYXkgPSBUWF9SWF9PTl9ERUxBWV9WQUw7CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KK3VpbnQxNl90IHR4X3J4X3N5bnRoX2RlbGF5ID0gVFhfUlhfU1lOVEhfREVMQVlfVkFMOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyogTk9URTogVGhlc2UgYXJyYXlzIE1VU1QgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgcmFkaW9fbW9kZV90IGVudW1lcmF0aW9uLiAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKK2NvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqIG1vZGVfY29uZmlnc19kcl8ybWJwc1tOVU1fUkFESU9fTU9ERVNdID0KK3sKKyAgICAoeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICopTlVMTCwgLyogMk1icHMgcmF0ZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG1vZGUgKi8KKyAgICAoeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICopTlVMTCwgLyogMk1icHMgcmF0ZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG1vZGUgKi8KKyAgICAoeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICopTlVMTCwgLyogMk1icHMgcmF0ZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG1vZGUgKi8KKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV8ybWJwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzJtYnBzX2NvbmZpZywKKyAgICAoeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICopTlVMTCwgLyogMk1icHMgcmF0ZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG1vZGUgKi8KKyAgICAoeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICopTlVMTCwgLyogMk1icHMgcmF0ZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIG1vZGUgKi8KKyAgICAmeGN2cl9HRlNLX0JUXzBwM19oXzBwNV8ybWJwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMm1icHNfY29uZmlnLAorICAgICZ4Y3ZyX01TS18ybWJwc19jb25maWcsCit9OworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICogbW9kZV9jb25maWdzX2RyXzFtYnBzW05VTV9SQURJT19NT0RFU10gPQoreworICAgICZ4Y3ZyX0JMRV8xbWJwc19jb25maWcsCisjaWYgUkFESU9fSVNfR0VOXzJQMQorICAgIE5VTEwsCisgICAgTlVMTCwKKyNlbHNlCisgICAgJnhjdnJfWklHQkVFXzUwMGticHNfY29uZmlnLCAvKiA4MDIuMTUuNCBvbmx5IHN1cHBvcnRzIG9uZSBjb25maWd1cmF0aW9uICovCisgICAgJnhjdnJfQU5UXzFtYnBzX2NvbmZpZywKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAxICovCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMW1icHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHAzMl8xbWJwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfMW1icHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMXAwXzFtYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwM19oXzBwNV8xbWJwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMW1icHNfY29uZmlnLAorICAgICZ4Y3ZyX01TS18xbWJwc19jb25maWcsCit9OworCitjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiBtb2RlX2NvbmZpZ3NfZHJfNTAwa2Jwc1tOVU1fUkFESU9fTU9ERVNdID0KK3sKKyAgICAmeGN2cl9CTEVfMW1icHNfY29uZmlnLCAvKiBJbnZhbGlkIG9wdGlvbiAqLworI2lmIFJBRElPX0lTX0dFTl8yUDEKKyAgICBOVUxMLAorICAgIE5VTEwsCisjZWxzZQorICAgICZ4Y3ZyX1pJR0JFRV81MDBrYnBzX2NvbmZpZywgLyogODAyLjE1LjQgc2V0dGluZyAqLworICAgICZ4Y3ZyX0FOVF8xbWJwc19jb25maWcsIC8qIEludmFsaWQgb3B0aW9uICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzJQMSAqLworICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA1XzUwMGticHNfY29uZmlnLAorICAgICZ4Y3ZyX0dGU0tfQlRfMHA1X2hfMHAzMl81MDBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwN181MDBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzFwMF81MDBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwM19oXzBwNV81MDBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwN19oXzBwNV81MDBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9NU0tfNTAwa2Jwc19jb25maWcsCit9OworY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICogbW9kZV9jb25maWdzX2RyXzI1MGticHNbTlVNX1JBRElPX01PREVTXSA9Cit7CisgICAgJnhjdnJfQkxFXzFtYnBzX2NvbmZpZywgLyogSW52YWxpZCBvcHRpb24gKi8KKyNpZiBSQURJT19JU19HRU5fMlAxCisgICAgTlVMTCwKKyAgICBOVUxMLAorI2Vsc2UKKyAgICAmeGN2cl9aSUdCRUVfNTAwa2Jwc19jb25maWcsIC8qIDgwMi4xNS40IG9ubHkgc3VwcG9ydHMgb25lIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAmeGN2cl9BTlRfMW1icHNfY29uZmlnLCAvKiBJbnZhbGlkIG9wdGlvbiAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV8yNTBrYnBzX2NvbmZpZywKKyAgICAmeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfMjUwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8wcDdfMjUwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfMjUwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfMjUwa2Jwc19jb25maWcsCisgICAgJnhjdnJfR0ZTS19CVF8wcDdfaF8wcDVfMjUwa2Jwc19jb25maWcsCisgICAgJnhjdnJfTVNLXzI1MGticHNfY29uZmlnLAorfTsKKworc3RhdGljIHhjdnJfY3VyckNvbmZpZ190IGN1cnJlbnRfeGN2cl9jb25maWc7CisKK3ZvaWQgcmZfb3NjX3N0YXJ0dXAodm9pZCkKK3sKKyAgICBpZiAoIVJGX09TQ0lMTEFUT1JfUkVBRFkpCisgICAgeworICAgICAgICBSU0lNLT5DT05UUk9MIHw9IFJTSU1fQ09OVFJPTF9SRl9PU0NfRU5fTUFTSzsKKyAgICB9CisgICAgd2hpbGUgKCFSRl9PU0NJTExBVE9SX1JFQURZKQorICAgIHsKKyAgICAgICAgLyogV2FpdCBmb3IgUkZfT1NDX1JFQURZIHRvIGJlIGFzc2VydGVkIGJlZm9yZSBjb250aW51aW5nICovCisgICAgfQorfQorCit2b2lkIHJmX29zY19zaHV0ZG93bih2b2lkKQoreworICAgIGlmICghUkZfT1NDSUxMQVRPUl9TVEFZU19PTikKKyAgICB7CisgICAgICAgIFJTSU0tPkNPTlRST0wgJj0gflJTSU1fQ09OVFJPTF9SRl9PU0NfRU5fTUFTSzsKKyAgICB9Cit9CisgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX0luaXQocmFkaW9fbW9kZV90IHJhZGlvX21vZGUsIGRhdGFfcmF0ZV90IGRhdGFfcmF0ZSkKK3sKKyAgICBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiBtb2RlX2RhdGFyYXRlX2NvbmZpZzsKKyAgICBjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICogZGF0YXJhdGVfY29uZmlnIDsKKyAgICBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKiByYWRpb19tb2RlX2NmZzsKKyAgICBjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqIHJhZGlvX2NvbW1vbl9jb25maWc7CisKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzOworCisgICAgSUZSX1NXX1RSSU1fVEJMX0VOVFJZX1Qgc3dfdHJpbV90YmxbXSA9CisgICAgeworICAgICAgICB7VFJJTV9TVEFUVVMsIDAsIEZBTFNFfSwgLyo8IEZldGNoIHRoZSB0cmltIHN0YXR1cyB3b3JkIGlmIGF2YWlsYWJsZS4qLworICAgICAgICB7VFJJTV9WRVJTSU9OLCAwLCBGQUxTRX0gLyo8IEZldGNoIHRoZSB0cmltIHZlcnNpb24gbnVtYmVyIGlmIGF2YWlsYWJsZS4qLworICAgIH07CisgICAgY29uc3QgdWludDhfdCBOVU1fVFJJTV9UQkxfRU5UUklFUyA9IHNpemVvZihzd190cmltX3RibCkvc2l6ZW9mKElGUl9TV19UUklNX1RCTF9FTlRSWV9UKTsKKworI2lmbmRlZiBTSU1VTEFUSU9OCisKKyNpZiAoRVhURVJOQUxfQ0xPQ0tfR0VOKQorICAgIFJTSU0tPlJGX09TQ19DVFJMIHw9IFJTSU1fUkZfT1NDX0NUUkxfUkZfT1NDX0JZUEFTU19FTl9NQVNLOyAvKiBPbmx5IHdoZW4gZXh0ZXJuYWwgY2xvY2sgaXMgYmVpbmcgdXNlZCAqLworI2VuZGlmIC8qIEVYVEVSTkFMX0NMT0NLX0dFTiAqLworCisjaWYgUkFESU9fSVNfR0VOXzJQMAorICAgIFJTSU0tPlJGX09TQ19DVFJMICY9IH5SU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9NQVNLOyAvKiBTZXQgRVhUX09TQ19PVlJEIHZhbHVlIHRvIHplcm8gKi8KKyAgICBSU0lNLT5SRl9PU0NfQ1RSTCB8PSBSU0lNX1JGX09TQ19DVFJMX1JBRElPX0VYVF9PU0NfT1ZSRF9FTl9NQVNLOyAvKiBFbmFibGUgb3Zlci1yaWRlIHdpdGggemVybyB2YWx1ZSAqLyAgIAorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDAgKi8KKworICAgIC8qIENoZWNrIHRoYXQgdGhpcyBpcyB0aGUgcHJvcGVyIHJhZGlvIHZlcnNpb24gKi8KKyAgICB7CisgICAgICAgIHVpbnQ4X3QgcmFkaW9faWQgPSAoKFJTSU0tPk1JU0MgJiBSU0lNX01JU0NfUkFESU9fVkVSU0lPTl9NQVNLKT4+UlNJTV9NSVNDX1JBRElPX1ZFUlNJT05fU0hJRlQpOworCisgICAgICAgIGlmICgKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgICAgICAocmFkaW9faWQgIT0gMHg1KSAvKiBLVzMgR2VuMyAqLworI2VsaWYgUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgKHJhZGlvX2lkICE9IDB4NSkgLyogS1czNSBHZW4yLjEgKi8KKyNlbHNlCisgICAgICAgICAgICAocmFkaW9faWQgIT0gMHgzKSAmJiAgLyogS1c0MS8zMS8yMSB2MSAqLworICAgICAgICAgICAgKHJhZGlvX2lkICE9IDB4QikgLyogS1c0MS8zMS8yMSB2MS4xICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBYY3ZyUGFuaWMoV1JPTkdfUkFESU9fSURfREVURUNURUQsICh1aW50MzJfdCkmWENWUl9Jbml0KTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAvKiBBc3NlcnQgUmFkaW8gUnVuIFJlcXVlc3QgYW5kIHdhaXQgZm9yIGFjayBmcm9tIFNQTS4gKi8KKyAgICBSU0lNLT5QT1dFUiB8PSBSU0lNX1BPV0VSX1JTSU1fUlVOX1JFUVVFU1RfTUFTSzsKKyAgICB3aGlsZSAoKFJTSU0tPlBPV0VSICYgUlNJTV9QT1dFUl9TUE1fUlVOX0FDS19TVEFUX01BU0spID09IDApCisgICAgeworICAgIH0KKyAgICBSU0lNLT5DT05UUk9MIHw9IFJTSU1fQ09OVFJPTF9SU0lNX0NHQ19YQ1ZSX0VOX01BU0s7IAorICAgIHJmX29zY19zdGFydHVwKCk7IC8qIFN0YXJ0IFJGX09TQyB0byBhbGxvdyByYWRpbyByZWdpc3RlcnMgYWNjZXNzICovCisjZWxzZQorICAgIFNJTS0+U0NHQzUgfD0gU0lNX1NDR0M1X1BIWURJR19NQVNLOworCisgICAgLyogTG9hZCBJRlIgdHJpbSB2YWx1ZXMgKi8KKyAgICBoYW5kbGVfaWZyKCZzd190cmltX3RibFswXSwgTlVNX1RSSU1fVEJMX0VOVFJJRVMpOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworI2VuZGlmIC8qIGlmbmRlZiBTSU1VTEFUSU9OICovCisKKyAgICAvKiBQZXJmb3JtIHRoZSBkZXNpcmVkIFhDVlIgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBzdGF0dXMgPSBYQ1ZSX0dldERlZmF1bHRDb25maWcocmFkaW9fbW9kZSwgZGF0YV9yYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190ICoqKSZyYWRpb19jb21tb25fY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKikmcmFkaW9fbW9kZV9jZmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICoqKSZtb2RlX2RhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICoqKSZkYXRhcmF0ZV9jb25maWcpOworCQkJCQkJCQkgIAorICAgIGlmIChzdGF0dXMgPT0gZ1hjdnJTdWNjZXNzX2MpCisgICAgeworICAgICAgICBzdGF0dXMgPSBYQ1ZSX0NvbmZpZ3VyZSgoY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKilyYWRpb19jb21tb25fY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKXJhZGlvX21vZGVfY2ZnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKW1vZGVfZGF0YXJhdGVfY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKilkYXRhcmF0ZV9jb25maWcsIDI1LCBYQ1ZSX0ZJUlNUX0lOSVQpOworICAgICAgICBjdXJyZW50X3hjdnJfY29uZmlnLnJhZGlvX21vZGUgPSByYWRpb19tb2RlOworICAgICAgICBjdXJyZW50X3hjdnJfY29uZmlnLmRhdGFfcmF0ZSA9IGRhdGFfcmF0ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit2b2lkIFhDVlJfRGVpbml0KHZvaWQpCit7CisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIHJmX29zY19zaHV0ZG93bigpOworICAgIFJTSU0tPlBPV0VSIHw9IFJTSU1fUE9XRVJfUlNJTV9TVE9QX01PREVfTUFTSzsgLyogU2V0IHJhZGlvIHN0b3AgbW9kZSB0byBSVkxMUyAqLworICAgIFJTSU0tPlBPV0VSICY9IH5SU0lNX1BPV0VSX1JTSU1fUlVOX1JFUVVFU1RfTUFTSzsgLyogQ2xlYXIgUlVOIHJlcXVlc3QgKi8KKyNlbHNlCisKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0dldERlZmF1bHRDb25maWcocmFkaW9fbW9kZV90IHJhZGlvX21vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3JhdGVfdCBkYXRhX3JhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqKiBjb21fY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICoqIG1vZGVfY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICoqIG1vZGVfZGF0YXJhdGVfY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKiBkYXRhcmF0ZV9jb25maWcpCit7CisgICAgeGN2clN0YXR1c190IHN0YXR1cyA9IGdYY3ZyU3VjY2Vzc19jOworICAgIC8qIENvbW1vbiBjb25maWd1cmF0aW9uIHBvaW50ZXIgKi8KKyAgICAqY29tX2NvbmZpZyA9IChjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqKSZ4Y3ZyX2NvbW1vbl9jb25maWc7CisKKyAgICAvKiBNb2RlIGRlcGVuZGVudCBjb25maWd1cmF0aW9uIHBvaW50ZXIgKi8KKyAgICBzd2l0Y2ggKHJhZGlvX21vZGUpCisgICAgeworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgIGNhc2UgWklHQkVFX01PREU6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZ6Z2JlX21vZGVfY29uZmlnOyAvKiBaaWdiZWUgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU5UX01PREU6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZhbnRfbW9kZV9jb25maWc7IC8qIEFOVCBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgICAgICBjYXNlIEJMRV9NT0RFOgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmYmxlX21vZGVfY29uZmlnOyAvKiBCTEUgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDU6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZnZnNrX2J0XzBwNV9oXzBwNV9tb2RlX2NvbmZpZzsgLyogR0ZTS19CVF8wcDVfaF8wcDUgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDMyOgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmZ2Zza19idF8wcDVfaF8wcDMyX21vZGVfY29uZmlnOyAvKiBHRlNLX0JUXzBwNV9oXzBwMzIgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDc6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZnZnNrX2J0XzBwNV9oXzBwN19tb2RlX2NvbmZpZzsgLyogR0ZTS19CVF8wcDVfaF8wcDcgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8xcDA6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZnZnNrX2J0XzBwNV9oXzFwMF9tb2RlX2NvbmZpZzsgLyogR0ZTS19CVF8wcDVfaF8xcDAgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDNfaF8wcDU6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZnZnNrX2J0XzBwM19oXzBwNV9tb2RlX2NvbmZpZzsgLyogR0ZTS19CVF8wcDNfaF8wcDUgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDdfaF8wcDU6CisgICAgICAgICAgICAqbW9kZV9jb25maWcgPSAoIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKSZnZnNrX2J0XzBwN19oXzBwNV9tb2RlX2NvbmZpZzsgLyogR0ZTS19CVF8wcDdfaF8wcDUgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVNLOgorICAgICAgICAgICAgKm1vZGVfY29uZmlnID0gKCBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKikmbXNrX21vZGVfY29uZmlnOyAvKiBNU0sgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgIAorICAgICAgICAgICAgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogRGF0YSByYXRlIGRlcGVuZGVudCBhbmQgbW9kZVhkYXRhcmF0ZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBwb2ludGVycyAqLworICAgIGlmIChzdGF0dXMgPT0gZ1hjdnJTdWNjZXNzX2MpIC8qIE9ubHkgYXR0ZW1wdCB0aGlzIHBvaW50ZXIgYXNzaWdubWVudCBwcm9jZXNzIGlmIHByaW9yIHN3aXRjaCgpIHN0YXRlbWVudCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCisgICAgeworICAgICAgICBzd2l0Y2ggKGRhdGFfcmF0ZSkKKyAgICAgICAgeworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgICAgIGNhc2UgRFJfMk1CUFM6CisgICAgICAgICAgICAgICAgaWYgKChyYWRpb19tb2RlID09IEdGU0tfQlRfMHA1X2hfMHA3KSB8fCAocmFkaW9fbW9kZSA9PSBHRlNLX0JUXzBwNV9oXzFwMCkgfHwgKHJhZGlvX21vZGUgPT0gWklHQkVFX01PREUpIHx8IChyYWRpb19tb2RlID09IEJMRV9NT0RFKSB8fCAocmFkaW9fbW9kZSA9PSBBTlRfTU9ERSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpkYXRhcmF0ZV9jb25maWcgPSAoY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKSZ4Y3ZyXzJtYnBzX2NvbmZpZzsgLyogMk1icHMgZGF0YXJhdGUgY29uZmlndXJhdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAgICAgKm1vZGVfZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKW1vZGVfY29uZmlnc19kcl8ybWJwc1tyYWRpb19tb2RlXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgICAgICAgICAgY2FzZSBEUl8xTUJQUzoKKyAgICAgICAgICAgICAgICAqZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKikmeGN2cl8xbWJwc19jb25maWc7IC8qIDFNYnBzIGRhdGFyYXRlIGNvbmZpZ3VyYXRpb25zICovCisgICAgICAgICAgICAgICAgKm1vZGVfZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKW1vZGVfY29uZmlnc19kcl8xbWJwc1tyYWRpb19tb2RlXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFJfNTAwS0JQUzoKKyAgICAgICAgICAgICAgICBpZiAocmFkaW9fbW9kZSA9PSBaSUdCRUVfTU9ERSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBmc2xfeGN2cl96Z2JlX2NvbmZpZy5jIGZvciBzZXR0aW5ncyAqLworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICpkYXRhcmF0ZV9jb25maWcgPSAoY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKSZ4Y3ZyXzgwMl8xNV80XzUwMGticHNfY29uZmlnOyAvKiA1MDBLYnBzIGRhdGFyYXRlIGNvbmZpZ3VyYXRpb25zICovCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKmRhdGFyYXRlX2NvbmZpZyA9IChjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICopJnhjdnJfNTAwa2Jwc19jb25maWc7IC8qIDUwMEticHMgZGF0YXJhdGUgY29uZmlndXJhdGlvbnMgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKm1vZGVfZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKW1vZGVfY29uZmlnc19kcl81MDBrYnBzW3JhZGlvX21vZGVdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEUl8yNTBLQlBTOgorICAgICAgICAgICAgICAgICpkYXRhcmF0ZV9jb25maWcgPSAoY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqKSZ4Y3ZyXzI1MGticHNfY29uZmlnOyAvKiAyNTBLYnBzIGRhdGFyYXRlIGNvbmZpZ3VyYXRpb25zICovCisgICAgICAgICAgICAgICAgKm1vZGVfZGF0YXJhdGVfY29uZmlnID0gKGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKW1vZGVfY29uZmlnc19kcl8yNTBrYnBzW3JhZGlvX21vZGVdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9Db25maWd1cmUoY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKmNvbV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqbW9kZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqbW9kZV9kYXRhcmF0ZV9jb25maWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKmRhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCB0ZW1wRGVnQywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9JTklUX01PREVfQ0hHX1QgZmlyc3RfaW5pdCkKK3sKKyAgICB4Y3ZyU3RhdHVzX3QgY29uZmlnX3N0YXR1cyA9IGdYY3ZyU3VjY2Vzc19jOworICAgIHVpbnQzMl90IHRlbXA7IAorCisgICAgLyogVHVybiBvbiB0aGUgbW9kdWxlIGNsb2NrcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgUlNJTS0+Q09OVFJPTCB8PSBtb2RlX2NvbmZpZy0+c2NnYzVfY2xvY2tfZW5hX2JpdHM7IC8qIFNhbWUgYml0IHN0b3JhZ2UgaXMgdXNlZCBidXQgUlNJTSBiaXQgYXNzaWdubWVudHMgYXJlIGFwcGxpZWQgKi8KKyNlbHNlCisgICAgU0lNLT5TQ0dDNSB8PSBtb2RlX2NvbmZpZy0+c2NnYzVfY2xvY2tfZW5hX2JpdHM7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyogWENWUl9BTkEgY29uZmlncyAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgLyogQ29uZmlndXJlIFBMTCBMb29wIEZpbHRlciAqLworICAgIGlmIChmaXJzdF9pbml0KQorICAgIHsKKyAgICAgICAgWENWUl9BTkEtPlNZX0NUUkxfMSAmPSB+Y29tX2NvbmZpZy0+YW5hX3N5X2N0cmwxLm1hc2s7CisgICAgICAgIFhDVlJfQU5BLT5TWV9DVFJMXzEgfD0gY29tX2NvbmZpZy0+YW5hX3N5X2N0cmwxLmluaXQ7CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIFZDTyBLVk0gKi8KKyAgICBYQ1ZSX0FOQS0+U1lfQ1RSTF8yICY9IH5tb2RlX2RhdGFyYXRlX2NvbmZpZy0+YW5hX3N5X2N0cmwyLm1hc2s7CisgICAgWENWUl9BTkEtPlNZX0NUUkxfMiB8PSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+YW5hX3N5X2N0cmwyLmluaXQ7CisKKyAgICAvKiBDb25maWd1cmUgYW5hbG9nIGZpbHRlciBiYW5kd2lkdGggKi8KKyAgICBYQ1ZSX0FOQS0+UlhfQkJBICY9IH5tb2RlX2RhdGFyYXRlX2NvbmZpZy0+YW5hX3J4X2JiYS5tYXNrOworICAgIFhDVlJfQU5BLT5SWF9CQkEgfD0gbW9kZV9kYXRhcmF0ZV9jb25maWctPmFuYV9yeF9iYmEuaW5pdDsKKyAgICBYQ1ZSX0FOQS0+UlhfVFpBICY9IH5tb2RlX2RhdGFyYXRlX2NvbmZpZy0+YW5hX3J4X3R6YS5tYXNrOworICAgIFhDVlJfQU5BLT5SWF9UWkEgfD0gbW9kZV9kYXRhcmF0ZV9jb25maWctPmFuYV9yeF90emEuaW5pdDsKKworI2lmIFJBRElPX0lTX0dFTl8yUDAKKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisgICAgICAgIHRlbXAgPSBYQ1ZSX0FOQS0+VFhfREFDX1BBOworICAgICAgICB0ZW1wICY9IH5YQ1ZSX0FOQUxPR19UWF9EQUNfUEFfVFhfUEFfQlVNUF9WQklBU19NQVNLOworICAgICAgICB0ZW1wIHw9IFhDVlJfQU5BTE9HX1RYX0RBQ19QQV9UWF9QQV9CVU1QX1ZCSUFTKDQpOworICAgICAgICBYQ1ZSX0FOQS0+VFhfREFDX1BBID0gdGVtcDsKKworICAgICAgICB0ZW1wID0gWENWUl9BTkEtPkJCX0xET18yOworICAgICAgICB0ZW1wICY9IH5YQ1ZSX0FOQUxPR19CQl9MRE9fMl9CQl9MRE9fVkNPTE9fVFJJTV9NQVNLOworICAgICAgICB0ZW1wIHw9IFhDVlJfQU5BTE9HX0JCX0xET18yX0JCX0xET19WQ09MT19UUklNKDApOworICAgICAgICBYQ1ZSX0FOQS0+QkJfTERPXzIgPSB0ZW1wOworCisgICAgICAgIHRlbXAgPSBYQ1ZSX0FOQS0+UlhfTE5BOworICAgICAgICB0ZW1wICY9IH5YQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0JVTVBfTUFTSzsKKyAgICAgICAgdGVtcCB8PSBYQ1ZSX0FOQUxPR19SWF9MTkFfUlhfTE5BX0JVTVAoMSk7CisgICAgICAgIFhDVlJfQU5BLT5SWF9MTkEgPSB0ZW1wOworCisgICAgICAgIHRlbXAgPSBYQ1ZSX0FOQS0+QkJfTERPXzE7CisgICAgICAgIHRlbXAgJj0gflhDVlJfQU5BTE9HX0JCX0xET18xX0JCX0xET19GREJLX1RSSU1fTUFTSzsKKyAgICAgICAgdGVtcCB8PSBYQ1ZSX0FOQUxPR19CQl9MRE9fMV9CQl9MRE9fRkRCS19UUklNKDEpOworICAgICAgICBYQ1ZSX0FOQS0+QkJfTERPXzEgPSB0ZW1wOworICAgIH0KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fMlAwICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBYQ1ZSX01JU0MgY29uZmlncyAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHRlbXAgPSBYQ1ZSX01JU0MtPlhDVlJfQ1RSTDsKKyAgICB0ZW1wICY9IH4obW9kZV9jb25maWctPnhjdnJfY3RybC5tYXNrIHwgWENWUl9DVFJMX1hDVlJfQ1RSTF9SRUZfQ0xLX0ZSRVFfTUFTSyk7CisgICAgdGVtcCB8PSBtb2RlX2NvbmZpZy0+eGN2cl9jdHJsLmluaXQ7CisJCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIHRlbXAgfD0gWENWUl9DVFJMX1hDVlJfQ1RSTF9SRUZfQ0xLX0ZSRVEoMSk7CisgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICBYQ1ZSX01JU0MtPlhDVlJfQ1RSTCA9IHRlbXA7CisKKyNpZiBSQURJT19JU19HRU5fMlAxCisgICAgWENWUl9NSVNDLT5GQURfQ1RSTCAmPSB+WENWUl9DVFJMX0ZBRF9DVFJMX0ZBRF9OT1RfR1BJT19NQVNLOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDEgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgWENWUl9QSFktPlBIWV9GU0tfUERfQ0ZHMCA9IG1vZGVfY29uZmlnLT5waHlfZnNrX3BkX2NmZzA7CisgICAgWENWUl9QSFktPlBIWV9GU0tfUERfQ0ZHMSA9IG1vZGVfY29uZmlnLT5waHlfZnNrX3BkX2NmZzE7CisgICAgWENWUl9QSFktPlBIWV9GU0tfQ0ZHID0gbW9kZV9jb25maWctPnBoeV9mc2tfY2ZnOworICAgIFhDVlJfUEhZLT5QSFlfRlNLX01JU0MgPSBtb2RlX2NvbmZpZy0+cGh5X2Zza19taXNjIHwgbW9kZV9kYXRhcmF0ZV9jb25maWctPnBoeV9mc2tfbWlzY19tb2RlX2RhdGFyYXRlOworICAgIFhDVlJfUEhZLT5GU0tfRkFEX0NUUkwgPSBtb2RlX2NvbmZpZy0+cGh5X2ZhZF9jdHJsOworI2Vsc2UKKyAgICBYQ1ZSX1BIWS0+UEhZX1BSRV9SRUYwID0gbW9kZV9jb25maWctPnBoeV9wcmVfcmVmMF9pbml0OworICAgIFhDVlJfUEhZLT5QUkVfUkVGMSA9IG1vZGVfY29uZmlnLT5waHlfcHJlX3JlZjFfaW5pdDsKKyAgICBYQ1ZSX1BIWS0+UFJFX1JFRjIgPSBtb2RlX2NvbmZpZy0+cGh5X3ByZV9yZWYyX2luaXQ7CisgICAgWENWUl9QSFktPkNGRzEgPSBtb2RlX2NvbmZpZy0+cGh5X2NmZzFfaW5pdDsKKyAgICBYQ1ZSX1BIWS0+Q0ZHMiA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5waHlfY2ZnMl9pbml0OworICAgIFhDVlJfUEhZLT5FTF9DRkcgPSBtb2RlX2NvbmZpZy0+cGh5X2VsX2NmZ19pbml0IHwgZGF0YXJhdGVfY29uZmlnLT5waHlfZWxfY2ZnX2luaXQ7IC8qIEVMX1dJTl9TSVpFIGFuZCBFTF9JTlRFUlZBTCBhcmUgZGF0YXJhdGUgZGVwZW5kZW50LCAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFhDVlJfUExMX0RJRyBjb25maWdzICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgaWYgKGZpcnN0X2luaXQpCisgICAgeworICAgICAgICBYQ1ZSX1BMTF9ESUctPkhQTV9CVU1QID0gY29tX2NvbmZpZy0+cGxsX2hwbV9idW1wOworICAgICAgICBYQ1ZSX1BMTF9ESUctPk1PRF9DVFJMID0gY29tX2NvbmZpZy0+cGxsX21vZF9jdHJsOworICAgICAgICBYQ1ZSX1BMTF9ESUctPkNIQU5fTUFQID0gY29tX2NvbmZpZy0+cGxsX2NoYW5fbWFwOworICAgICAgICBYQ1ZSX1BMTF9ESUctPkxPQ0tfREVURUNUID0gY29tX2NvbmZpZy0+cGxsX2xvY2tfZGV0ZWN0OworICAgICAgICBYQ1ZSX1BMTF9ESUctPkhQTV9DVFJMID0gY29tX2NvbmZpZy0+cGxsX2hwbV9jdHJsOworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgIFhDVlJfUExMX0RJRy0+SFBNQ0FMX0NUUkwgPSBjb21fY29uZmlnLT5wbGxfaHBtY2FsX2N0cmw7CisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgWENWUl9QTExfRElHLT5IUE1fU0RNX1JFUyA9IGNvbV9jb25maWctPnBsbF9ocG1fc2RtX3JlczsKKyAgICAgICAgWENWUl9QTExfRElHLT5MUE1fQ1RSTCA9IGNvbV9jb25maWctPnBsbF9scG1fY3RybDsKKyAgICAgICAgWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxID0gY29tX2NvbmZpZy0+cGxsX2xwbV9zZG1fY3RybDE7CisgICAgICAgIFhDVlJfUExMX0RJRy0+REVMQVlfTUFUQ0ggPSBjb21fY29uZmlnLT5wbGxfZGVsYXlfbWF0Y2g7CisgICAgICAgIFhDVlJfUExMX0RJRy0+Q1RVTkVfQ1RSTCA9IGNvbV9jb25maWctPnBsbF9jdHVuZV9jdHJsOworICAgIH0KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFhDVlJfUlhfRElHIGNvbmZpZ3MgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIC8qIENvbmZpZ3VyZSBSRiBBdXggUExMIGZvciBwcm9wZXIgb3BlcmF0aW9uIGJhc2VkIG9uIGV4dGVybmFsIGNsb2NrIGZyZXF1ZW5jeSAqLworICAgIGlmIChmaXJzdF9pbml0KQorICAgIHsKKyAgICAgICAgdGVtcCA9IFhDVlJfQU5BLT5SWF9BVVhQTEw7CisgICAgICAgIHRlbXAgJj0gflhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WQ09fREFDX1JFRl9BREpVU1RfTUFTSzsKKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wIHw9IFhDVlJfQU5BTE9HX1JYX0FVWFBMTF9WQ09fREFDX1JFRl9BREpVU1QoNCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgfD0gWENWUl9BTkFMT0dfUlhfQVVYUExMX1ZDT19EQUNfUkVGX0FESlVTVCg3KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisgICAgICAgIFhDVlJfQU5BLT5SWF9BVVhQTEwgPSB0ZW1wOworICAgIH0KKyAgICAKKyAgICAvKiBDb25maWd1cmUgUlhfRElHX0NUUkwgKi8KKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgIHsKKyAgICAgICAgdGVtcCA9IGNvbV9jb25maWctPnJ4X2RpZ19jdHJsX2luaXQgfCAvKiBDb21tb24gcG9ydGlvbiBvZiBSWF9ESUdfQ1RSTCBpbml0ICovCisgICAgICAgICAgICAgICBtb2RlX2NvbmZpZy0+cnhfZGlnX2N0cmxfaW5pdF8yNm1oeiB8IC8qIE1vZGUgIHNwZWNpZmljIHBvcnRpb24gb2YgUlhfRElHX0NUUkwgaW5pdCAqLworICAgICAgICAgICAgICAgZGF0YXJhdGVfY29uZmlnLT5yeF9kaWdfY3RybF9pbml0XzI2bWh6IHwgLyogRGF0YXJhdGUgc3BlY2lmaWMgcG9ydGlvbiBvZiBSWF9ESUdfQ1RSTCBpbml0ICovCisgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9TUkNfRU5fTUFTSzsgLyogQWx3YXlzIGVuYWJsZSB0aGUgc2FtcGxlIHJhdGUgY29udmVydGVyIGZvciAyNk1IeiAqLworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICB0ZW1wID0gY29tX2NvbmZpZy0+cnhfZGlnX2N0cmxfaW5pdCB8IC8qIENvbW1vbiBwb3J0aW9uIG9mIFJYX0RJR19DVFJMIGluaXQgKi8KKyAgICAgICAgICAgICAgIG1vZGVfY29uZmlnLT5yeF9kaWdfY3RybF9pbml0XzMybWh6IHwgLyogTW9kZSBzcGVjaWZpYyBwb3J0aW9uIG9mIFJYX0RJR19DVFJMIGluaXQgKi8KKyAgICAgICAgICAgICAgIGRhdGFyYXRlX2NvbmZpZy0+cnhfZGlnX2N0cmxfaW5pdF8zMm1oeiB8IC8qIERhdGFyYXRlIHNwZWNpZmljIHBvcnRpb24gb2YgUlhfRElHX0NUUkwgaW5pdCAqLworICAgICAgICAgICAgICAgMDsgLyogQWx3YXlzIGRpc2FibGUgdGhlIHNhbXBsZSByYXRlIGNvbnZlcnRlciBmb3IgMzJNSHogKi8KKyAgICB9CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworICAgIHRlbXAgfD0gY29tX2NvbmZpZy0+cnhfZGlnX2N0cmxfaW5pdDsgIC8qIENvbW1vbiBwb3J0aW9uIG9mIFJYX0RJR19DVFJMIGluaXQgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSB0ZW1wOworCisgICAgLyogRENPQ19DQUxfSUlSICovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NBTF9JSVIgPSBkYXRhcmF0ZV9jb25maWctPmRjb2NfY2FsX2lpcl9pbml0XzI2bWh6OworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfSUlSID0gZGF0YXJhdGVfY29uZmlnLT5kY29jX2NhbF9paXJfaW5pdF8zMm1oejsKKyAgICB9CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworICAgIC8qIERDX1JFU0lEX0NUUkwgKi8KKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDX1JFU0lEX0NUUkwgPSBjb21fY29uZmlnLT5kY19yZXNpZF9jdHJsX2luaXQgfCBkYXRhcmF0ZV9jb25maWctPmRjX3Jlc2lkX2N0cmxfMjZtaHo7CisgICAgfQorI2Vsc2UKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ19SRVNJRF9DVFJMID0gY29tX2NvbmZpZy0+ZGNfcmVzaWRfY3RybF9pbml0IHwgZGF0YXJhdGVfY29uZmlnLT5kY19yZXNpZF9jdHJsXzMybWh6OworICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgLyogRENPQ19DVFJMXzAgICYgXzEgKi8KKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wID0gY29tX2NvbmZpZy0+ZGNvY19jdHJsXzBfaW5pdF8yNm1oeiB8IGRhdGFyYXRlX2NvbmZpZy0+ZGNvY19jdHJsXzBfaW5pdF8yNm1oejsgLyogQ29tYmluZSBjb21tb24gYW5kIGRhdGFyYXRlIHNwZWNpZmljIHNldHRpbmdzICovCisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMSA9IGNvbV9jb25maWctPmRjb2NfY3RybF8xX2luaXQgfCBkYXRhcmF0ZV9jb25maWctPmRjb2NfY3RybF8xX2luaXRfMjZtaHo7IC8qIENvbWJpbmUgY29tbW9uIGFuZCBkYXRhcmF0ZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8yID0gZGF0YXJhdGVfY29uZmlnLT5kY29jX2N0cmxfMl9pbml0XzI2bWh6OworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgPSBjb21fY29uZmlnLT5kY29jX2N0cmxfMF9pbml0XzMybWh6IHwgZGF0YXJhdGVfY29uZmlnLT5kY29jX2N0cmxfMF9pbml0XzMybWh6OyAvKiBDb21iaW5lIGNvbW1vbiBhbmQgZGF0YXJhdGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8xID0gY29tX2NvbmZpZy0+ZGNvY19jdHJsXzFfaW5pdCB8IGRhdGFyYXRlX2NvbmZpZy0+ZGNvY19jdHJsXzFfaW5pdF8zMm1oejsgLyogQ29tYmluZSBjb21tb24gYW5kIGRhdGFyYXRlIHNwZWNpZmljIHNldHRpbmdzICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzIgPSBkYXRhcmF0ZV9jb25maWctPmRjb2NfY3RybF8yX2luaXRfMzJtaHo7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworICAgIGlmIChmaXJzdF9pbml0KQorICAgIHsKKyAgICAgICAgLyogRENPQ19DQUxfR0FJTiAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTiA9IGNvbV9jb25maWctPmRjb2NfY2FsX2dhaW5faW5pdDsKKworICAgICAgICAvKiBEQ09DX0NBTF9SQ1AgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ0FMX1JDUCA9IGNvbV9jb25maWctPmRjb2NfY2FsX3JjcF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+TE5BX0dBSU5fVkFMXzNfMCA9IGNvbV9jb25maWctPmxuYV9nYWluX3ZhbF8zXzA7CisgICAgICAgIFhDVlJfUlhfRElHLT5MTkFfR0FJTl9WQUxfN180ID0gY29tX2NvbmZpZy0+bG5hX2dhaW5fdmFsXzdfNDsKKyAgICAgICAgWENWUl9SWF9ESUctPkxOQV9HQUlOX1ZBTF84ID0gY29tX2NvbmZpZy0+bG5hX2dhaW5fdmFsXzg7CisgICAgICAgIFhDVlJfUlhfRElHLT5CQkFfUkVTX1RVTkVfVkFMXzdfMCA9IGNvbV9jb25maWctPmJiYV9yZXNfdHVuZV92YWxfN18wOworICAgICAgICBYQ1ZSX1JYX0RJRy0+QkJBX1JFU19UVU5FX1ZBTF8xMF84ID0gY29tX2NvbmZpZy0+YmJhX3Jlc190dW5lX3ZhbF8xMF84OworCisgICAgICAgIC8qIExOQV9HQUlOX0xJTl9WQUwgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkxOQV9HQUlOX0xJTl9WQUxfMl8wID0gY29tX2NvbmZpZy0+bG5hX2dhaW5fbGluX3ZhbF8yXzBfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkxOQV9HQUlOX0xJTl9WQUxfNV8zID0gY29tX2NvbmZpZy0+bG5hX2dhaW5fbGluX3ZhbF81XzNfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkxOQV9HQUlOX0xJTl9WQUxfOF82ID0gY29tX2NvbmZpZy0+bG5hX2dhaW5fbGluX3ZhbF84XzZfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkxOQV9HQUlOX0xJTl9WQUxfOSA9IGNvbV9jb25maWctPmxuYV9nYWluX2xpbl92YWxfOV9pbml0OworCisgICAgICAgIC8qIEJCQV9SRVNfVFVORV9MSU5fVkFMICovCisgICAgICAgIFhDVlJfUlhfRElHLT5CQkFfUkVTX1RVTkVfTElOX1ZBTF8zXzAgPSBjb21fY29uZmlnLT5iYmFfcmVzX3R1bmVfbGluX3ZhbF8zXzBfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkJCQV9SRVNfVFVORV9MSU5fVkFMXzdfNCA9IGNvbV9jb25maWctPmJiYV9yZXNfdHVuZV9saW5fdmFsXzdfNF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+QkJBX1JFU19UVU5FX0xJTl9WQUxfMTBfOCA9IGNvbV9jb25maWctPmJiYV9yZXNfdHVuZV9saW5fdmFsXzEwXzhfaW5pdDsKKworICAgICAgICAvKiBCQkFfU1RFUCAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19CQkFfU1RFUCA9IGNvbV9jb25maWctPmRjb2NfYmJhX3N0ZXBfaW5pdDsKKworICAgICAgICAvKiBEQ09DX1RaQV9TVEVQICovCisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzAgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzAwX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzEgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzAxX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzIgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzAyX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzMgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzAzX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzQgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzA0X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzUgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzA1X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzYgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzA2X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzcgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzA3X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzggPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzA4X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzkgPSBjb21fY29uZmlnLT5kY29jX3R6YV9zdGVwXzA5X2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzEwID0gY29tX2NvbmZpZy0+ZGNvY190emFfc3RlcF8xMF9pbml0OworCisjaWYgKFJBRElPX0lTX0dFTl8zUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkKKyAgICAgICAgLyogRENPQ19DQUxfRkFJTCBhbmQgRENPQ19DQUxfUEFTUyAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfRkFJTF9USCA9IGNvbV9jb25maWctPmRjb2NfY2FsX2ZhaWxfdGhfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfQ0FMX1BBU1NfVEggPSBjb21fY29uZmlnLT5kY29jX2NhbF9wYXNzX3RoX2luaXQ7CisjZW5kaWYgLyogKFJBRElPX0lTX0dFTl8zUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkgKi8KKyAgICB9CisKKyAgICAvKiBBR0NfQ1RSTF8wIC4uIF8zICovCisgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzAgPSBjb21fY29uZmlnLT5hZ2NfY3RybF8wX2luaXQgfCBtb2RlX2NvbmZpZy0+YWdjX2N0cmxfMF9pbml0OworCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gY29tX2NvbmZpZy0+YWdjX2N0cmxfMV9pbml0XzI2bWh6IHwgZGF0YXJhdGVfY29uZmlnLT5hZ2NfY3RybF8xX2luaXRfMjZtaHo7IC8qIENvbWJpbmUgY29tbW9uIGFuZCBkYXRhcmF0ZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMiA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5hZ2NfY3RybF8yX2luaXRfMjZtaHo7CisgICAgfQorI2Vsc2UKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gY29tX2NvbmZpZy0+YWdjX2N0cmxfMV9pbml0XzMybWh6IHwgZGF0YXJhdGVfY29uZmlnLT5hZ2NfY3RybF8xX2luaXRfMzJtaHo7IC8qIENvbWJpbmUgY29tbW9uIGFuZCBkYXRhcmF0ZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMiA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5hZ2NfY3RybF8yX2luaXRfMzJtaHo7CisgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8zID0gY29tX2NvbmZpZy0+YWdjX2N0cmxfM19pbml0OworCisgICAgICAgIC8qIEFHQ19HQUlOX1RCTF8qKiAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0dBSU5fVEJMXzAzXzAwID0gY29tX2NvbmZpZy0+YWdjX2dhaW5fdGJsXzAzXzAwX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfR0FJTl9UQkxfMDdfMDQgPSBjb21fY29uZmlnLT5hZ2NfZ2Fpbl90YmxfMDdfMDRfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19HQUlOX1RCTF8xMV8wOCA9IGNvbV9jb25maWctPmFnY19nYWluX3RibF8xMV8wOF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0dBSU5fVEJMXzE1XzEyID0gY29tX2NvbmZpZy0+YWdjX2dhaW5fdGJsXzE1XzEyX2luaXQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5BR0NfR0FJTl9UQkxfMTlfMTYgPSBjb21fY29uZmlnLT5hZ2NfZ2Fpbl90YmxfMTlfMTZfaW5pdDsKKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19HQUlOX1RCTF8yM18yMCA9IGNvbV9jb25maWctPmFnY19nYWluX3RibF8yM18yMF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+QUdDX0dBSU5fVEJMXzI2XzI0ID0gY29tX2NvbmZpZy0+YWdjX2dhaW5fdGJsXzI2XzI0X2luaXQ7CisKKyAgICAgICAgLyogUlNTSV9DVFJMXzAgKi8KKyAgICAgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wID0gY29tX2NvbmZpZy0+cnNzaV9jdHJsXzBfaW5pdDsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8xID0gY29tX2NvbmZpZy0+cnNzaV9jdHJsXzFfaW5pdDsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICAgICAgLyogQ0NBX0VEX0xRSV8wIGFuZCBfMSAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+Q0NBX0VEX0xRSV9DVFJMXzAgPSBjb21fY29uZmlnLT5jY2FfZWRfbHFpX2N0cmxfMF9pbml0OworICAgICAgICBYQ1ZSX1JYX0RJRy0+Q0NBX0VEX0xRSV9DVFJMXzEgPSBjb21fY29uZmlnLT5jY2FfZWRfbHFpX2N0cmxfMV9pbml0OworICAgIH0KKworICAgIC8qIENoYW5uZWwgZmlsdGVyIGNvZWZmaWNpZW50cyAqLworI2lmIFJGX09TQ18yNk1IWiA9PSAxCisgICAgeworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMCA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzA7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8xID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfMTsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzIgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8yOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMyA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzM7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl80ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNDsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzUgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl81OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfNiA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzY7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl83ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMjZtaHoucnhfY2hmX2NvZWZfNzsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzggPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl84OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfOSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzk7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8xMCA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzI2bWh6LnJ4X2NoZl9jb2VmXzEwOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMTEgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18yNm1oei5yeF9jaGZfY29lZl8xMTsKKyAgICB9CisjZWxzZQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzAgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8wOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzE7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl8yID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMjsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzMgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8zOworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfNCA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzQ7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl81ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfNTsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzYgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl82OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfNyA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9jaGZfY29lZmZzXzMybWh6LnJ4X2NoZl9jb2VmXzc7CisgICAgICAgIFhDVlJfUlhfRElHLT5SWF9DSEZfQ09FRl84ID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfODsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzkgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl85OworICAgICAgICBYQ1ZSX1JYX0RJRy0+UlhfQ0hGX0NPRUZfMTAgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfY2hmX2NvZWZmc18zMm1oei5yeF9jaGZfY29lZl8xMDsKKyAgICAgICAgWENWUl9SWF9ESUctPlJYX0NIRl9DT0VGXzExID0gbW9kZV9kYXRhcmF0ZV9jb25maWctPnJ4X2NoZl9jb2VmZnNfMzJtaHoucnhfY2hmX2NvZWZfMTE7CisgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICBYQ1ZSX1JYX0RJRy0+UlhfUkNDQUxfQ1RSTDAgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+cnhfcmNjYWxfY3RybF8wOworICAgIFhDVlJfUlhfRElHLT5SWF9SQ0NBTF9DVFJMMSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yeF9yY2NhbF9jdHJsXzE7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgWENWUl9UU00tPkNUUkwgPSBjb21fY29uZmlnLT50c21fY3RybDsKKworI2lmIFJBRElPX0lTX0dFTl8yUDAKKyAgICBpZiAoKG1vZGVfY29uZmlnLT5yYWRpb19tb2RlICE9IFpJR0JFRV9NT0RFKSAmJiAobW9kZV9jb25maWctPnJhZGlvX21vZGUgIT0gQkxFX01PREUpKQorICAgIHsKKyAgICAgICAgWENWUl9UU00tPkNUUkwgJj0gflhDVlJfVFNNX0NUUkxfREFUQV9QQURESU5HX0VOX01BU0s7CisgICAgfQorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDAgKi8KKworICAgIGlmIChmaXJzdF9pbml0KQorICAgIHsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICBYQ1ZSX01JU0MtPkxQUFNfQ1RSTCA9IGNvbV9jb25maWctPmxwcHNfY3RybF9pbml0OyAvKiBSZWdpc3RlciBpcyBpbiBYQ1ZSX01JU0MgYnV0IGdyb3VwZWQgd2l0aCBUU00gZm9yIGludGlhbGl6YXRpb24gKi8KKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworCisgICAgICAgIFhDVlJfVFNNLT5PVlJEMiA9IGNvbV9jb25maWctPnRzbV9vdnJkMl9pbml0OworICAgICAgICAvKiBUU00gcmVnaXN0ZXJzIGFuZCB0aW1pbmdzIC0gZGVwZW5kZW50IHVwb24gY2xvY2sgZnJlcXVlbmN5ICovCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICAgICAgeworICAgICAgICAgICAgWENWUl9UU00tPkVORF9PRl9TRVEgPSBjb21fY29uZmlnLT5lbmRfb2Zfc2VxX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+RkFTVF9DVFJMMiA9IGNvbV9jb25maWctPnRzbV9mYXN0X2N0cmwyX2luaXRfMjZtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+UkVDWUNMRV9DT1VOVCA9IGNvbV9jb25maWctPnJlY3ljbGVfY291bnRfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTRfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTZfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyNSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjVfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyNyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjdfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyOCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjhfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyOSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjlfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzBfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzFfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzJfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzNfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzZfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzdfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczOSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzlfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc0MCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNDBfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc0MSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNDFfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1MiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTJfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1NCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTRfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1NSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTVfaW5pdF8yNm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1NiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTZfaW5pdF8yNm1oejsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgeworICAgICAgICAgICAgWENWUl9UU00tPkVORF9PRl9TRVEgPSBjb21fY29uZmlnLT5lbmRfb2Zfc2VxX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+RkFTVF9DVFJMMiA9IGNvbV9jb25maWctPnRzbV9mYXN0X2N0cmwyX2luaXRfMzJtaHo7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+UkVDWUNMRV9DT1VOVCA9IGNvbV9jb25maWctPnJlY3ljbGVfY291bnRfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTRfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTZfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyNSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjVfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyNyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjdfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyOCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjhfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyOSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjlfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzBfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzFfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzJfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczMyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzNfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzZfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzdfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkczOSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzlfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc0MCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNDBfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc0MSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNDFfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1MiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTJfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1NCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTRfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1NSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTVfaW5pdF8zMm1oejsKKyAgICAgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1NiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTZfaW5pdF8zMm1oejsKKyAgICAgICAgfQorI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisKKyAgICAgICAgLyogVFNNIHRpbWluZ3MgaW5kZXBlbmRlbnQgb2YgY2xvY2sgZnJlcXVlbmN5ICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwMCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDBfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzAxID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18wMV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzAyX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwMyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDNfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzA0ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18wNF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzA1X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwNiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDZfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzA3ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18wN19pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDggPSBjb21fY29uZmlnLT50c21fdGltaW5nXzA4X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwOSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMDlfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzEwID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18xMF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTEgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzExX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxMiA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTJfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzEzID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18xM19pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTUgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE1X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxNyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMTdfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzE4ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18xOF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTkgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzE5X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyMCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjBfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzIxID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18yMV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjIgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzIyX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyMyA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMjNfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzI0ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18yNF9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMjYgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzI2X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzRfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM1ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18zNV9pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzggPSBjb21fY29uZmlnLT50c21fdGltaW5nXzM4X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1MSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNTFfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzUzID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ181M19pbml0OworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNTcgPSBjb21fY29uZmlnLT50c21fdGltaW5nXzU3X2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc1OCA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfNThfaW5pdDsKKwkJCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyAgICAgICAgeworICAgICAgICAgICAgWENWUl9UU00tPkVORF9PRl9TRVEgPSBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVShFTkRfT0ZfVFhfV1UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfVFhfV0QoRU5EX09GX1RYX1dEKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVKEVORF9PRl9SWF9XVV8yNk1IWikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XRChFTkRfT0ZfUlhfV0RfMjZNSFopOworICAgICAgICB9CisjZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBYQ1ZSX1RTTS0+RU5EX09GX1NFUSA9IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVKEVORF9PRl9UWF9XVSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XRChFTkRfT0ZfVFhfV0QpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1UoRU5EX09GX1JYX1dVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dEKEVORF9PRl9SWF9XRCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgICAgIFhDVlJfVFNNLT5QQV9SQU1QX1RCTDAgPSBjb21fY29uZmlnLT5wYV9yYW1wX3RibF8wX2luaXQ7CisgICAgICAgIFhDVlJfVFNNLT5QQV9SQU1QX1RCTDEgPSBjb21fY29uZmlnLT5wYV9yYW1wX3RibF8xX2luaXQ7CisJCQorI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgWENWUl9UU00tPlBBX1JBTVBfVEJMMiA9IGNvbV9jb25maWctPnBhX3JhbXBfdGJsXzJfaW5pdDsKKyAgICAgICAgWENWUl9UU00tPlBBX1JBTVBfVEJMMyA9IGNvbV9jb25maWctPnBhX3JhbXBfdGJsXzNfaW5pdDsKKworICAgICAgICAvKiBBcHBseSBQQV9SQU1QX1RJTUUgPT0gNHVzZWMgYWRqdXN0bWVudHMgdG8gVFhfV0Qgc2lnbmFscyAqLworI2lmIChQQV9SQU1QX1RJTUUgPT0gNCkKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzAwICs9IEIxKDIpOyAvKiAoYmJfbGRvX2hmX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDEgKz0gQjEoMik7IC8qIChiYl9sZG9fYWRjZGFjX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDMgKz0gQjEoMik7IC8qIChiYl9sZG9fcGRfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwNCArPSBCMSgyKTsgLyogKGJiX2xkb19mZGJrX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMDUgKz0gQjEoMik7IC8qIChiYl9sZG9fdmNvbG9fZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcwNiArPSBCMSgyKTsgLyogKGJiX2xkb192dHJlZl9lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzEwICs9IEIxKDIpOyAvKiAoYmJfeHRhbF9wbGxfcmVmX2Nsa19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzExICs9IEIxKDIpOyAvKiAoYmJfeHRhbF9kYWNfcmVmX2Nsa19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzE1ICs9IEIxKDIpOyAvKiAoc3lfdmNvX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMTcgKz0gQjEoMik7IC8qIChzeV9sb190eF9idWZfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcxOCArPSBCMSgyKTsgLyogKHN5X2Rpdm5fZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyMCArPSBCMSgyKTsgLyogIChzeV9wZF9lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzIxICs9IEIxKDIpOyAvKiAoc3lfbG9fZGl2bl9lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzIzICs9IEIxKDIpOyAvKiAoc3lfbG9fdHhfZW4pICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkcyNiArPSBCMSgyKTsgLyogKHR4X3BhX2VuKSAqLyAKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM0ICs9IEIxKDIpOyAvKiAocGxsX2RpZ19lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM1ICs9IEIxKDIpOyAvKiAodHhfZGlnX2VuKSAqLworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzggKz0gQjEoMik7IC8qIChzaWdtYV9kZWx0YV9lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzU4ICs9IEIxKDIpICAvKiAodHhfaHBtX2RhY19lbikgKi8KKyAgICAgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkcxNDsKKyAgICAgICAgdGVtcCAmPSAweEZGRkYwMDAwOyAKKyAgICAgICAgdGVtcCB8PSBCMChFTkRfT0ZfVFhfV1UgLSA0KSB8IEIxKEVORF9PRl9UWF9XVSArIDEpOyAvKiAoc3lfcGRfY3ljbGVfc2xpcF9sZF9mdF9lbikgKi8KKyAgICAgICAgWENWUl9UU00tPlRJTUlORzE0ID0gdGVtcDsKKyNlbmRpZiAvKiAoUEFfUkFNUF9USU1FID09IDQpICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgIH0KKyAgICAKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgaWYgKG1vZGVfY29uZmlnLT5yYWRpb19tb2RlID09IFpJR0JFRV9NT0RFKQorICAgIHsKKyAgICAgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkczNTsKKyAgICAgICAgdGVtcCAmPSB+KEIwKDB4RkYpKTsKKyAgICAgICAgaWYgKERBVEFfUEFERElOR19FTiA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wIHw9IEIwKEVORF9PRl9UWF9XVSAtIDIgLSA4KTsgLyogQWRqdXN0IGZvciBkYXRhIHBhZGRpbmcgdGltZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCB8PSBCMChFTkRfT0ZfVFhfV1UgLSAyKTsgLyogTm8gZGF0YSBwYWRkaW5nIGFkanVzdG1lbnQgKi8KKyAgICAgICAgfQorICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HMzUgPSB0ZW1wOworICAgIH0KKyNlbHNlCisKKyAgICBpZiAoKG1vZGVfZGF0YXJhdGVfY29uZmlnLT5yYWRpb19tb2RlID09IE1TSykgJiYgKChtb2RlX2RhdGFyYXRlX2NvbmZpZy0+ZGF0YV9yYXRlID09IERSXzUwMEtCUFMpIHx8IChtb2RlX2RhdGFyYXRlX2NvbmZpZy0+ZGF0YV9yYXRlID09IERSXzI1MEtCUFMpKSkKKyAgICB7CisgICAgICAgIC8qIEFwcGx5IGEgc3BlY2lmaWMgdmFsdWUgb2YgVFhfRElHX0VOIHdoaWNoIGFzc3VtZXMgbm8gREFUQSBQQURESU5HICovCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkczNSA9IGNvbV9jb25maWctPnRzbV90aW1pbmdfMzVfaW5pdCB8IEIwKFRYX0RJR19FTl9BU1NFUlRfTVNLNTAwKTsgLyogTFNieXRlIGlzIG1vZGUgc3BlY2lmaWMgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzM1ID0gY29tX2NvbmZpZy0+dHNtX3RpbWluZ18zNV9pbml0IHwgbW9kZV9jb25maWctPnRzbV90aW1pbmdfMzVfaW5pdDsgLyogTFNieXRlIGlzIG1vZGUgc3BlY2lmaWMsIG90aGVyIGJ5dGVzIGFyZSBjb21tb24gKi8KKyAgICB9CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgIAorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgIHsKKyAgICAgICAgWENWUl9UWF9ESUctPkZTS19TQ0FMRSA9IG1vZGVfZGF0YXJhdGVfY29uZmlnLT50eF9mc2tfc2NhbGVfMjZtaHo7IC8qIEFwcGxpZXMgb25seSB0byA4MDIuMTUuNCAmIE1TSyBidXQgd29uJ3QgaGFybSBvdGhlciBwcm90b2NvbHMgKi8KKyAgICAgICAgWENWUl9UWF9ESUctPkdGU0tfQ09FRkYxID0gbW9kZV9jb25maWctPnR4X2dmc2tfY29lZmYxXzI2bWh6OworICAgICAgICBYQ1ZSX1RYX0RJRy0+R0ZTS19DT0VGRjIgPSBtb2RlX2NvbmZpZy0+dHhfZ2Zza19jb2VmZjJfMjZtaHo7CisgICAgfQorI2Vsc2UKKyAgICB7CisgICAgICAgIFhDVlJfVFhfRElHLT5GU0tfU0NBTEUgPSBtb2RlX2RhdGFyYXRlX2NvbmZpZy0+dHhfZnNrX3NjYWxlXzMybWh6OyAvKiBBcHBsaWVzIG9ubHkgdG8gODAyLjE1LjQgJiBNU0sgYnV0IHdvbid0IGhhcm0gb3RoZXIgcHJvdG9jb2xzICovCisgICAgICAgIFhDVlJfVFhfRElHLT5HRlNLX0NPRUZGMSA9IG1vZGVfY29uZmlnLT50eF9nZnNrX2NvZWZmMV8zMm1oejsKKyAgICAgICAgWENWUl9UWF9ESUctPkdGU0tfQ09FRkYyID0gbW9kZV9jb25maWctPnR4X2dmc2tfY29lZmYyXzMybWh6OworICAgIH0KKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisgICAgaWYgKGZpcnN0X2luaXQpCisgICAgeworICAgICAgICBYQ1ZSX1RYX0RJRy0+Q1RSTCA9IGNvbV9jb25maWctPnR4X2N0cmw7CisgICAgICAgIFhDVlJfVFhfRElHLT5EQVRBX1BBRERJTkcgPSBjb21fY29uZmlnLT50eF9kYXRhX3BhZGRpbmc7CisgICAgICAgIFhDVlJfVFhfRElHLT5ERlRfUEFUVEVSTiA9IGNvbV9jb25maWctPnR4X2RmdF9wYXR0ZXJuOworCQkKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICBYQ1ZSX1RYX0RJRy0+UkZfREZUX0JJU1RfMSA9IGNvbV9jb25maWctPnJmX2RmdF9iaXN0XzE7CisgICAgICAgIFhDVlJfVFhfRElHLT5SRl9ERlRfQklTVF8yID0gY29tX2NvbmZpZy0+cmZfZGZ0X2Jpc3RfMjsKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgIH0KKworICAgIFhDVlJfVFhfRElHLT5HRlNLX0NUUkwgPSBtb2RlX2NvbmZpZy0+dHhfZ2Zza19jdHJsOworCisjaWZuZGVmIFNJTVVMQVRJT04KKyNpZiAoVFJJTV9CQkFfRENPQ19EQUNfQVRfSU5JVCkKKyAgICAvKiBQb3J0QyAxNyBmb3IgZnVuY3Rpb24gb2JzZXJ2YWJpbGl0eSAqLworICAgIFBPUlRDLT5QQ1JbMTddICY9IH5QT1JUX1BDUl9NVVhfTUFTSzsKKyAgICBQT1JUQy0+UENSWzE3XSB8PSBQT1JUX1BDUl9NVVgoMSk7IC8qIFBUQzE3IHRvIGFsdCAxIC0gR1BJTyAqLworICAgIEdQSU9DLT5QRERSIHw9ICgxPDwxNyk7IC8qIFNldCBQQzE3IEdQSU8gdG8gb3V0cHV0IGRpcmVjdGlvbiAqLworICAgIEdQSU9DLT5QQ09SID0gKDE8PDE3KTsgLyogU2V0IFBDMTcgR1BJTyB0byBMT1cgKi8KKyAgICBpZiAoZmlyc3RfaW5pdCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGVuZF9vZl9yeF93dSA9IDA7CisgICAgICAgIFhDVlJfRm9yY2VSeFd1KCk7CisgICAgICAgIC8qIFdhaXQgZm9yIFRTTSB0byByZWFjaCB0aGUgZW5kIG9mIHdhcm11cCAodW5sZXNzIHlvdSB3YW50IHRvIGNhcHR1cmUgc29tZSBzYW1wbGVzIGR1cmluZyBEQ09DIGNhbCBwaGFzZSkgKi8KKyAgICAgICAgdGVtcCA9IFhDVlJfVFNNLT5FTkRfT0ZfU0VROworICAgICAgICBlbmRfb2Zfcnhfd3UgPSAodGVtcCAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX01BU0spID4+IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUOworICAgICAgICB3aGlsZSAoKCggWENWUl9NSVNDLT5YQ1ZSX1NUQVRVUyAmIFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfTUFTSykgPj4gWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9TSElGVCApICE9IGVuZF9vZl9yeF93dSkge307CisgICAgICAgIEdQSU9DLT5QU09SID0gKDEgPDwgMTcpOyAvKiBTZXQgUEMxNyBHUElPIHRvIEhJR0ggKi8KKy8vICAgICAgICBpZiAoIXJ4X2JiYV9kY29jX2RhY190cmltX3Nob3J0SVEoKSkKKyAgICAgICAgaWYgKCFyeF9iYmFfZGNvY19kYWNfdHJpbV9EQ2VzdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWdfc3RhdHVzID0gZ1hjdnJUcmltRmFpbHVyZV9jOworICAgICAgICB9CisgICAgICAgIEdQSU9DLT5QQ09SID0gKDEgPDwgMTcpOyAvKiBTZXQgUEMxNyBHUElPIHRvIExPVyAqLworICAgICAgICBYQ1ZSX0ZvcmNlUnhXZCgpOworICAgICAgICBHUElPQy0+UFNPUiA9ICgxIDw8IDE3KTsgLyogU2V0IFBDMTcgR1BJTyB0byBISUdIICovCisgICAgICAgIERDT0NfREFDX0lOSVRfQ2FsKDEpOworICAgICAgICBHUElPQy0+UENPUiA9ICgxIDw8IDE3KTsgLyogU2V0IFBDMTcgR1BJTyB0byBMT1cgKi8KKyAgICB9CisjZW5kaWYgLyogVFJJTV9CQkFfRENPQ19EQUNfQVRfSU5JVCAqLworI2VuZGlmIC8qIGlmbmRlZiBTSU1VTEFUSU9OICovCisgICAgcmV0dXJuIGNvbmZpZ19zdGF0dXM7Cit9CisKK3ZvaWQgWENWUl9SZXNldCh2b2lkKQoreworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyNlbHNlCisgICAgUlNJTS0+Q09OVFJPTCB8PSBSU0lNX0NPTlRST0xfUkFESU9fUkVTRVRfQklUX01BU0s7IC8qIEFzc2VydCByYWRpbyBzb2Z0d2FyZSByZXNldCAqLworICAgIFJTSU0tPkNPTlRST0wgJj0gflJTSU1fQ09OVFJPTF9SQURJT19SRVNFVF9CSVRfTUFTSzsgLyogRGUtYXNzZXJ0IHJhZGlvIHNvZnR3YXJlIHJlc2V0ICovCisgICAgUlNJTS0+Q09OVFJPTCAmPSB+UlNJTV9DT05UUk9MX1JBRElPX1JFU0VUX0JJVF9NQVNLOyAvKiBEZS1hc3NlcnQgcmFkaW8gc29mdHdhcmUgcmVzZXQgYSBzZWNvbmQgdGltZSBwZXIgUkFESU9fUkVTRVQgYml0IGRlc2NyaXB0aW9uICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9DaGFuZ2VNb2RlIChyYWRpb19tb2RlX3QgbmV3X3JhZGlvX21vZGUsIGRhdGFfcmF0ZV90IG5ld19kYXRhX3JhdGUpIC8qIENoYW5nZSBmcm9tIG9uZSByYWRpbyBtb2RlIHRvIGFub3RoZXIgKi8KK3sKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzOworICAgIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqIG1vZGVfZGF0YXJhdGVfY29uZmlnOworICAgIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKiBkYXRhcmF0ZV9jb25maWcgOworICAgIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqIHJhZGlvX21vZGVfY2ZnOworICAgIGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190ICogcmFkaW9fY29tbW9uX2NvbmZpZzsKKworICAgIHN0YXR1cyA9IFhDVlJfR2V0RGVmYXVsdENvbmZpZyhuZXdfcmFkaW9fbW9kZSwgbmV3X2RhdGFfcmF0ZSwgKHZvaWQgKikmcmFkaW9fY29tbW9uX2NvbmZpZywgKHZvaWQgKikmcmFkaW9fbW9kZV9jZmcsICh2b2lkICopJm1vZGVfZGF0YXJhdGVfY29uZmlnLCAodm9pZCAqKSZkYXRhcmF0ZV9jb25maWcgKTsKKyAgICAKKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gWENWUl9Db25maWd1cmUoKGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190ICopcmFkaW9fY29tbW9uX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgKilyYWRpb19tb2RlX2NmZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgKiltb2RlX2RhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190ICopZGF0YXJhdGVfY29uZmlnLCAyNSwgWENWUl9NT0RFX0NIQU5HRSk7CisgICAgICAgIGN1cnJlbnRfeGN2cl9jb25maWcucmFkaW9fbW9kZSA9IG5ld19yYWRpb19tb2RlOworICAgICAgICBjdXJyZW50X3hjdnJfY29uZmlnLmRhdGFfcmF0ZSA9IG5ld19kYXRhX3JhdGU7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBYQ1ZSX0VuYU5CUlNTSU1lYXMoIHVpbnQ4X3QgSUlSbmJFbmFibGUgKQoreworICAgIGlmIChJSVJuYkVuYWJsZSkKKyAgICB7CisgICAgICAgIFhDVlJfUlhfRElHLT5SU1NJX0NUUkxfMCB8PSBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9DV19XRUlHSFRfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wICY9IH5YQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0lJUl9DV19XRUlHSFRfTUFTSzsKKyAgICB9Cit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX092ZXJyaWRlRnJlcXVlbmN5ICggdWludDMyX3QgZnJlcSwgdWludDMyX3QgcmVmT3NjICkKK3sKKyAgICBkb3VibGUgaW50ZWdlcl91c2VkX2luX0h6LCAKKyAgICAgICAgICAgaW50ZWdlcl91c2VkX2luX0xTQiwgCisgICAgICAgICAgIG51bWVyYXRvcl9mcmFjdGlvbiwgCisgICAgICAgICAgIG51bWVyYXRvcl9pbl9IeiwgCisgICAgICAgICAgIG51bWVyYXRvcl9pbl9MU0IsIAorICAgICAgICAgICBudW1lcmF0b3JfdW5yb3VuZGVkLAorICAgICAgICAgICByZWFsX2ludF9hbmRfZnJhY3Rpb24sIAorICAgICAgICAgICByZWFsX2ZyYWN0aW9uLCAKKyAgICAgICAgICAgcmVxdWVzdGVkX2ZyZXFfaW5fTFNCLAorICAgICAgICAgICBzZG1fbHNiOworICAgIHVpbnQzMl90IHRlbXA7CisgICAgc3RhdGljIHVpbnQzMl90IGludGVnZXJfdHJ1bmNhdGVkLAorICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyX3RvX3VzZTsKKyAgICBzdGF0aWMgaW50MzJfdCBudW1lcmF0b3Jfcm91bmRlZDsKKworICAgIC8qIENvbmZpZ3VyZSBmb3IgQ29hcnNlIFR1bmUgKi8KKyAgICB1aW50MzJfdCBjb2Fyc2VfdHVuZV90YXJnZXQgPSBmcmVxIC8gMTAwMDAwMDsKKworICAgIHRlbXAgPSBYQ1ZSX1BMTF9ESUctPkNUVU5FX0NUUkw7CisgICAgdGVtcCAmPSB+WENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX01BTlVBTF9NQVNLOworICAgIHRlbXAgfD0gWENWUl9QTExfRElHX0NUVU5FX0NUUkxfQ1RVTkVfVEFSR0VUX01BTlVBTChjb2Fyc2VfdHVuZV90YXJnZXQpOworICAgIFhDVlJfUExMX0RJRy0+Q1RVTkVfQ1RSTCA9IHRlbXA7CisKKyAgICAvKiBDYWxjdWxhdGUgdGhlIExvdyBQb3J0IHZhbHVlcyAqLworICAgIHNkbV9sc2IgPSByZWZPc2MgLyAxMzEwNzIuMDsKKworICAgIHJlYWxfaW50X2FuZF9mcmFjdGlvbiA9IGZyZXEgLyAocmVmT3NjICogMi4wKTsKKworICAgIGludGVnZXJfdHJ1bmNhdGVkID0gKHVpbnQzMl90KSB0cnVuYyhyZWFsX2ludF9hbmRfZnJhY3Rpb24pOworCisgICAgcmVhbF9mcmFjdGlvbiA9IHJlYWxfaW50X2FuZF9mcmFjdGlvbiAtIGludGVnZXJfdHJ1bmNhdGVkOworCisgICAgaWYgKHJlYWxfZnJhY3Rpb24gPiAwLjUpIAorICAgIHsKKyAgICAgICAgaW50ZWdlcl90b191c2UgPSBpbnRlZ2VyX3RydW5jYXRlZCArIDE7CisgICAgfSAKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgCisgICAgeworICAgICAgICBpbnRlZ2VyX3RvX3VzZSA9IGludGVnZXJfdHJ1bmNhdGVkOworICAgIH0KKworICAgIG51bWVyYXRvcl9mcmFjdGlvbiA9IHJlYWxfaW50X2FuZF9mcmFjdGlvbiAtIGludGVnZXJfdG9fdXNlOworCisgICAgaW50ZWdlcl91c2VkX2luX0h6ICA9IGludGVnZXJfdG9fdXNlICogcmVmT3NjICogMjsKKyAgICBpbnRlZ2VyX3VzZWRfaW5fTFNCID0gaW50ZWdlcl91c2VkX2luX0h6IC8gc2RtX2xzYjsKKworICAgIG51bWVyYXRvcl9pbl9IeiAgPSBudW1lcmF0b3JfZnJhY3Rpb24gKiByZWZPc2MgKiAyOworICAgIG51bWVyYXRvcl9pbl9MU0IgPSBudW1lcmF0b3JfaW5fSHogICAgLyBzZG1fbHNiOworCisgICAgcmVxdWVzdGVkX2ZyZXFfaW5fTFNCID0gaW50ZWdlcl91c2VkX2luX0xTQiArIG51bWVyYXRvcl9pbl9MU0I7CisKKyAgICBudW1lcmF0b3JfdW5yb3VuZGVkID0gKHJlcXVlc3RlZF9mcmVxX2luX0xTQiAtIGludGVnZXJfdXNlZF9pbl9MU0IpICogMjU2OworCisgICAgbnVtZXJhdG9yX3JvdW5kZWQgPSAoaW50MzJfdClyb3VuZChudW1lcmF0b3JfdW5yb3VuZGVkKTsKKworICAgIC8qIFdyaXRlIHRoZSBMb3cgUG9ydCBJbnRlZ2VyIGFuZCBOdW1lcmF0b3IgKi8KKyAgICB0ZW1wID0gWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxOworICAgIHRlbXAgJj0gflhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX01BU0s7CisgICAgdGVtcCB8PSAoWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEcoaW50ZWdlcl90b191c2UpIHwgCisgICAgICAgICAgICAgWENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFX01BU0spOworICAgIFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMSA9IHRlbXA7CisKKyAgICBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDIgPSBudW1lcmF0b3Jfcm91bmRlZDsKKworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsKK30KKwordm9pZCBYQ1ZSX1JlZ2lzdGVyUGFuaWNDYiAoIHBhbmljX2ZwdHIgZnB0ciApIC8qIEFsbG93IHVwcGVyIGxheWVycyB0byBwcm92aWRlIFBBTklDIGNhbGxiYWNrICovCit7CisgICAgc19QYW5pY0Z1bmN0aW9uUHRyID0gZnB0cjsKK30KKwordm9pZCBYY3ZyUGFuaWMoWENWUl9QQU5JQ19JRF9UIHBhbmljX2lkLCB1aW50MzJfdCBwYW5pY19hZGRyZXNzKQoreworICAgIGlmICggc19QYW5pY0Z1bmN0aW9uUHRyICE9IE5VTEwpCisgICAgeworICAgICAgICBzX1BhbmljRnVuY3Rpb25QdHIocGFuaWNfaWQsIHBhbmljX2FkZHJlc3MsIDAsIDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aW50OF90IGR1bW15OworCisgICAgICAgIHdoaWxlKDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGR1bW15ID0gZHVtbXk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2hlYWx0aFN0YXR1c190IFhDVlJfSGVhbHRoQ2hlY2sgKCB2b2lkICkgLyogQWxsb3cgdXBwZXIgbGF5ZXJzIHRvIHBvbGwgdGhlIHJhZGlvIGhlYWx0aCAqLworeworICAgIHJldHVybiAoaGVhbHRoU3RhdHVzX3QpTk9fRVJST1JTOworfQorCit2b2lkIFhDVlJfRmFkTHBwc0NvbnRyb2woRkFEX0xQUFNfQ1RSTF9UIGNvbnRyb2wpCit7CisKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIG1hcCByYWRpbyBtb2RlIHRvIExMIHVzYWdlICovCitsaW5rX2xheWVyX3QgbWFwX21vZGVfdG9fbGwocmFkaW9fbW9kZV90IG1vZGUpCit7CisgICAgbGlua19sYXllcl90IGxscmV0OworICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgQkxFX01PREU6CisgICAgICAgICAgICBsbHJldCA9IEJMRV9MTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpJR0JFRV9NT0RFOgorICAgICAgICAgICAgbGxyZXQgPSBaSUdCRUVfTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTlRfTU9ERToKKyAgICAgICAgICAgIGxscmV0ID0gQU5UX0xMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDU6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDMyOgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA3OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMXAwOgorICAgICAgICBjYXNlIEdGU0tfQlRfMHAzX2hfMHA1OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA3X2hfMHA1OgorICAgICAgICBjYXNlIE1TSzogCisgICAgICAgICAgICBsbHJldCA9IEdFTkZTS19MTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbGxyZXQgPSBVTkFTU0lHTkVEX0xMOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBsbHJldDsKK30KKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK3ZvaWQgWENWUl9TZXRCU01fTlRXX0FkZHJlc3ModWludDMyX3QgYnNtX250d19hZGRyZXNzKQoreworICAgIFhDVlJfUEhZLT5OVFdfQURSX0JTTSA9IGJzbV9udHdfYWRkcmVzczsKK30KKwordWludDMyX3QgWENWUl9HZXRCU01fTlRXX0FkZHJlc3Modm9pZCkKK3sKKyAgICByZXR1cm4gWENWUl9QSFktPk5UV19BRFJfQlNNOworfQorI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyogU2V0dXAgSVJRIG1hcHBpbmcgdG8gTEwgaW50ZXJydXB0IG91dHB1dHMgaW4gWENWUl9DVFJMICovCit4Y3ZyU3RhdHVzX3QgWENWUl9TZXRJUlFNYXBwaW5nKHJhZGlvX21vZGVfdCBpcnEwX21hcHBpbmcsIHJhZGlvX21vZGVfdCBpcnExX21hcHBpbmcpCit7CisgICAgbGlua19sYXllcl90IGludDAgPSBtYXBfbW9kZV90b19sbChpcnEwX21hcHBpbmcpOworICAgIGxpbmtfbGF5ZXJfdCBpbnQxID0gbWFwX21vZGVfdG9fbGwoaXJxMV9tYXBwaW5nKTsKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzcmV0OworICAgIC8qIE1ha2Ugc3VyZSB0aGUgdHdvIExMJ3MgcmVxdWVzdGVkIGFyZW4ndCB0aGUgc2FtZSAqLworICAgIGlmIChpbnQwID09IGludDEpCisgICAgeworICAgICAgICBzdGF0dXNyZXQgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHRlbXA7CisgICAgICAgIHRlbXAgPSBYQ1ZSX01JU0MtPlhDVlJfQ1RSTDsKKyAgICAgICAgdGVtcCAmPSB+KFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUxfTUFTSyB8IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8xX0lSUV9TRUxfTUFTSyk7CisgICAgICAgIHRlbXAgfD0gKFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUwoaW50MCkgfCBYQ1ZSX0NUUkxfWENWUl9DVFJMX1JBRElPMV9JUlFfU0VMKGludDEpKTsKKyAgICAgICAgWENWUl9NSVNDLT5YQ1ZSX0NUUkwgPSB0ZW1wOworICAgICAgICBzdGF0dXNyZXQgPSBnWGN2clN1Y2Nlc3NfYzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1c3JldDsKK30KKworLyogR2V0IGN1cnJlbnQgc3RhdGUgb2YgSVJRIG1hcHBpbmcgZm9yIGVpdGhlciAgcmFkaW8gSU5UMCBvciBJTlQxICovCitsaW5rX2xheWVyX3QgWENWUl9HZXRJUlFNYXBwaW5nKHVpbnQ4X3QgaW50X251bSkKK3sKKyAgICBpZiAoaW50X251bSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsaW5rX2xheWVyX3QpKChYQ1ZSX01JU0MtPlhDVlJfQ1RSTCAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUxfTUFTSyk+PlhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUkFESU8wX0lSUV9TRUxfU0hJRlQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gKGxpbmtfbGF5ZXJfdCkoKFhDVlJfTUlTQy0+WENWUl9DVFJMICYgWENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzFfSVJRX1NFTF9NQVNLKT4+WENWUl9DVFJMX1hDVlJfQ1RSTF9SQURJTzFfSVJRX1NFTF9TSElGVCk7CisgICAgfQorfQorCisvKiBHZXQgY3VycmVudCBzdGF0ZSBvZiByYWRpbyBtb2RlIGFuZCBkYXRhIHJhdGUgKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX0dldEN1cnJlbnRDb25maWcoeGN2cl9jdXJyQ29uZmlnX3QgKiBjdXJyX2NvbmZpZykKK3sKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgIGlmIChjdXJyX2NvbmZpZyAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgY3Vycl9jb25maWctPnJhZGlvX21vZGUgPSBjdXJyZW50X3hjdnJfY29uZmlnLnJhZGlvX21vZGU7CisgICAgICAgIGN1cnJfY29uZmlnLT5kYXRhX3JhdGUgPSBjdXJyZW50X3hjdnJfY29uZmlnLmRhdGFfcmF0ZTsKKyAgICAgICAgc3RhdHVzID0gZ1hjdnJTdWNjZXNzX2M7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qIEN1c3RvbWVyIGxldmVsIHRyaW0gZnVuY3Rpb25zICovCit4Y3ZyU3RhdHVzX3QgWENWUl9TZXRYdGFsVHJpbSh1aW50OF90IHh0YWxUcmltKQoreworICAgIHhjdnJTdGF0dXNfdCBzdGF0dXMgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisKKyAgICBpZiAoKHh0YWxUcmltICYgMHg4MCkgPT0gMCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHRlbXA7CisgICAgICAgIHRlbXAgPSBSU0lNLT5BTkFfVFJJTTsKKyAgICAgICAgdGVtcCAmPSB+UlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fTUFTSzsKKyAgICAgICAgUlNJTS0+QU5BX1RSSU0gPSB0ZW1wIHwgUlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU0oeHRhbFRyaW0pOworICAgICAgICBzdGF0dXMgPSBnWGN2clN1Y2Nlc3NfYzsKKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordWludDhfdCAgWENWUl9HZXRYdGFsVHJpbSh2b2lkKQoreworICAgIHVpbnQ4X3QgdGVtcF94dGFsOworICAgIHRlbXBfeHRhbCA9ICgoUlNJTS0+QU5BX1RSSU0gJiBSU0lNX0FOQV9UUklNX0JCX1hUQUxfVFJJTV9NQVNLKT4+UlNJTV9BTkFfVFJJTV9CQl9YVEFMX1RSSU1fU0hJRlQpOworICAgIHJldHVybiB0ZW1wX3h0YWw7Cit9CisKKy8qIFJTU0kgYWRqdXN0bWVudCAqLworeGN2clN0YXR1c190IFhDVlJfU2V0UnNzaUFkanVzdG1lbnQoaW50OF90IGFkaikKK3sKKyAgICBYQ1ZSX1JYX0RJRy0+UlNTSV9DVFJMXzAgJj0gflhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfQURKX01BU0s7CisgICAgWENWUl9SWF9ESUctPlJTU0lfQ1RSTF8wIHw9IFhDVlJfUlhfRElHX1JTU0lfQ1RSTF8wX1JTU0lfQURKKGFkaik7CisgICAgcmV0dXJuIGdYY3ZyU3VjY2Vzc19jOworfQorCitpbnQ4X3QgIFhDVlJfR2V0UnNzaUFkanVzdG1lbnQodm9pZCkKK3sKKyAgICBpbnQ4X3QgYWRqOworICAgIGFkaiA9IChYQ1ZSX1JYX0RJRy0+UlNTSV9DVFJMXzAgJiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESl9NQVNLKSA+PiBYQ1ZSX1JYX0RJR19SU1NJX0NUUkxfMF9SU1NJX0FESl9TSElGVDsKKyAgICByZXR1cm4gYWRqOworfQorCisvKiBSYWRpbyBkZWJ1ZyBmdW5jdGlvbnMgKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX092ZXJyaWRlQ2hhbm5lbCh1aW50OF90IGNoYW5uZWwsIHVpbnQ4X3QgdXNlTWFwcGVkQ2hhbm5lbCkKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworCisgICAgaWYgKGNoYW5uZWwgPT0gMHhGRikKKyAgICB7CisgICAgICAgIC8qIENsZWFyIGFsbCBvZiB0aGUgb3ZlcnJpZGVzIGFuZCByZXN0b3JlIHRvIExMIGNoYW5uZWwgY29udHJvbCAqLworICAgICAgICB0ZW1wID0gWENWUl9QTExfRElHLT5DSEFOX01BUDsKKyAgICAgICAgdGVtcCAmPSB+KFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTV9NQVNLIHwgWENWUl9QTExfRElHX0NIQU5fTUFQX0JPQ19NQVNLIAorI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgIHwgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQ19NQVNLCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgICAgICAgICAgICAgIHwgWENWUl9QTExfRElHX0NIQU5fTUFQX0hPUF9UQkxfQ0ZHX09WUkRfRU5fTUFTSworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICAgICAgICAgICAgICAgKTsKKworICAgICAgWENWUl9QTExfRElHLT5DSEFOX01BUCA9IHRlbXA7IAorCisgICAgICAvKiBTdG9wIHVzaW5nIHRoZSBtYW51YWwgZnJlcXVlbmN5IHNldHRpbmcgKi8KKyAgICAgIFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMSAmPSB+WENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfU0RNX01BUF9ESVNBQkxFX01BU0s7CisKKyAgICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsKKyAgICB9CisKKyAgICBpZiAoY2hhbm5lbCA+PSAxMjgpCisgICAgeworICAgICAgICByZXR1cm4gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgIH0KKworICAgIGlmICh1c2VNYXBwZWRDaGFubmVsKQorICAgIHsKKyAgICAgICAgdGVtcCA9IChYQ1ZSX01JU0MtPlhDVlJfQ1RSTCAmIFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfTUFTSyk+PlhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0xfU0hJRlQ7IC8qIEV4dHJhY3QgUFJPVE9DT0wgYml0ZmllbGQgKi8KKworICAgICAgICBzd2l0Y2ggKHRlbXApCisgICAgICAgIHsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgY2FzZSAweDM6IC8qIEFOVCBwcm90b2NvbCAqLworICAgICAgICAgICAgICAgIEFOVC0+Q0hBTk5FTF9OVU0gPSBjaGFubmVsOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICBjYXNlIDB4ODogLyogR0VORlNLIHByb3RvY29sICovCisgICAgICAgICAgICBjYXNlIDB4OTogLyogTVNLIHByb3RvY29sICovCisgICAgICAgICAgICAgICAgR0VORlNLLT5DSEFOTkVMX05VTSA9IGNoYW5uZWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAvKiBBbGwgb3RoZXIgcHJvdG9jb2xzICovCisgICAgICAgICAgICAgICAgdGVtcCA9IFhDVlJfUExMX0RJRy0+Q0hBTl9NQVA7CisgICAgICAgICAgICAgICAgdGVtcCAmPSB+KFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTV9NQVNLCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QTExfRElHX0NIQU5fTUFQX0hPUF9UQkxfQ0ZHX09WUkRfRU5fTUFTSworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHRlbXAgfD0gKFhDVlJfUExMX0RJR19DSEFOX01BUF9DSEFOTkVMX05VTShjaGFubmVsKSB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9CT0NfTUFTSworI2lmICFSQURJT19JU19HRU5fMlAxCisgICAgICAgICAgICAgICAgICAgICAgICB8IFhDVlJfUExMX0RJR19DSEFOX01BUF9aT0NfTUFTSworI2VuZGlmIC8qICFSQURJT19JU19HRU5fMlAxICovCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJRy0+Q0hBTl9NQVAgPSB0ZW1wOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBYQ1ZSX1BMTF9ESUctPkNIQU5fTUFQIHw9IChYQ1ZSX1BMTF9ESUdfQ0hBTl9NQVBfQk9DX01BU0sKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWENWUl9QTExfRElHX0NIQU5fTUFQX1pPQ19NQVNLCisjZW5kaWYgLyogIVJBRElPX0lTX0dFTl8yUDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyAKKworICAgICAgICBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDMgPSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMM19MUE1fREVOT00oZ1BsbERlbm9tX2MpOworICAgICAgICBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDIgPSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMl9MUE1fTlVNKG1hcFRhYmxlW2NoYW5uZWxdLm51bWVyYXRvcik7CisKKyAgICAgICAgdGVtcCA9IFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMTsKKyAgICAgICAgdGVtcCAmPSB+WENWUl9QTExfRElHX0xQTV9TRE1fQ1RSTDFfTFBNX0lOVEdfTUFTSzsKKyAgICAgICAgdGVtcCB8PSBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5URyhtYXBUYWJsZVtjaGFubmVsXS5pbnRlZ2VyKTsKKyAgICAgICAgWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxID0gdGVtcDsKKworICAgICAgICAvKiBTdG9wIHVzaW5nIHRoZSBMTCBjaGFubmVsIG1hcCBhbmQgdXNlIHRoZSBtYW51YWwgZnJlcXVlbmN5IHNldHRpbmcgKi8KKyAgICAgICAgWENWUl9QTExfRElHLT5MUE1fU0RNX0NUUkwxIHw9IFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX1NETV9NQVBfRElTQUJMRV9NQVNLOworICAgIH0KKworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsKK30KKwordWludDMyX3QgWENWUl9HZXRGcmVxICggdm9pZCApCit7CisgICAgdWludDMyX3QgcGxsX2ludDsKKyAgICB1aW50MzJfdCBwbGxfbnVtX3Vuc2lnbmVkOworICAgIGludDMyX3QgcGxsX251bTsKKyAgICB1aW50MzJfdCBwbGxfZGVub207CisgICAgZmxvYXQgZnJlcV9mbG9hdDsKKworICAgIGlmIChYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDEgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9TRE1fTUFQX0RJU0FCTEVfTUFTSykgLyogTm90IHVzaW5nIG1hcHBlZCBjaGFubmVscyAqLworICAgIHsKKyAgICAgICAgcGxsX2ludCA9IChYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDEgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX1NISUZUOworCisgICAgICAgIHBsbF9udW1fdW5zaWduZWQgPSBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDI7CisgICAgICAgIHBsbF9kZW5vbSA9IFhDVlJfUExMX0RJRy0+TFBNX1NETV9DVFJMMzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVXNpbmcgbWFwcGVkIGNoYW5uZWxzIHNvIG5lZWQgdG8gcmVhZCBmcm9tIHRoZSBfU0VMRUNURUQgZmllbGRzIHRvIGdldCB0aGUgdmFsdWVzIGJlaW5nIHVzZWQgKi8KKyAgICAgICAgcGxsX2ludCA9IChYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fQ1RSTDEgJiBYQ1ZSX1BMTF9ESUdfTFBNX1NETV9DVFJMMV9MUE1fSU5UR19TRUxFQ1RFRF9NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgIFhDVlJfUExMX0RJR19MUE1fU0RNX0NUUkwxX0xQTV9JTlRHX1NFTEVDVEVEX1NISUZUOworCisgICAgICAgIHBsbF9udW1fdW5zaWduZWQgPSBYQ1ZSX1BMTF9ESUctPkxQTV9TRE1fUkVTMTsKKyAgICAgICAgcGxsX2Rlbm9tID0gWENWUl9QTExfRElHLT5MUE1fU0RNX1JFUzI7CisgICAgfQorCisgICAgdWludDMyX3QgZnJlcSA9IDA7CisKKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorICAgIHVpbnQzMl90IHJlZl9jbGsgPSAyNlU7CisjZWxzZQorICAgIHVpbnQzMl90IHJlZl9jbGsgPSAzMlU7CisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworICAgIC8qIENoZWNrIGlmIHNpZ24gYml0IGlzIGFzc2VydGVkICovCisgICAgaWYgKHBsbF9udW1fdW5zaWduZWQgJiAweDA0MDAwMDAwVSkKKyAgICB7CisgICAgICAgIC8qIFNpZ24gZXh0ZW5kIHRoZSBudW1lcmF0b3IgKi8KKyAgICAgICAgcGxsX251bSA9ICh+cGxsX251bV91bnNpZ25lZCArIDEpICYgMHgwM0ZGRkZGRlU7IAorCisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5IGluIE1IeiAqLworICAgICAgICBmcmVxX2Zsb2F0ID0gKHJlZl9jbGsgKiAyICogKHBsbF9pbnQgLSAoKGZsb2F0KXBsbF9udW0gLyBwbGxfZGVub20pKSk7IAorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSBpbiBNSHogKi8KKyAgICAgICAgcGxsX251bSA9IHBsbF9udW1fdW5zaWduZWQ7CisgICAgICAgIGZyZXFfZmxvYXQgPSAocmVmX2NsayAqIDIgKiAocGxsX2ludCArICgoZmxvYXQpcGxsX251bSAvIChmbG9hdClwbGxfZGVub20pKSk7IAorICAgIH0KKworICAgIGZyZXEgPSAodWludDMyX3QpZnJlcV9mbG9hdDsKKworICAgIHJldHVybiBmcmVxOworfQorCit2b2lkIFhDVlJfRm9yY2VSeFd1KHZvaWQpCit7CisgICAgWENWUl9UU00tPkNUUkwgfD0gWENWUl9UU01fQ1RSTF9GT1JDRV9SWF9FTl9NQVNLOworfQorCit2b2lkIFhDVlJfRm9yY2VSeFdkKHZvaWQpCit7CisgICAgWENWUl9UU00tPkNUUkwgJj0gflhDVlJfVFNNX0NUUkxfRk9SQ0VfUlhfRU5fTUFTSzsKK30KKwordm9pZCBYQ1ZSX0ZvcmNlVHhXdSh2b2lkKQoreworICAgIFhDVlJfVFNNLT5DVFJMIHw9IFhDVlJfVFNNX0NUUkxfRk9SQ0VfVFhfRU5fTUFTSzsKK30KKwordm9pZCBYQ1ZSX0ZvcmNlVHhXZCh2b2lkKQoreworICAgIFhDVlJfVFNNLT5DVFJMICY9IH5YQ1ZSX1RTTV9DVFJMX0ZPUkNFX1RYX0VOX01BU0s7Cit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0RmdFR4Q1codWludDE2X3QgcmZfY2hhbm5lbF9mcmVxLCB1aW50OF90IHByb3RvY29sKQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgaWYgKChwcm90b2NvbCAhPSA2KSAmJiAocHJvdG9jb2wgIT0gNykpCisgICAgeworICAgICAgICByZXR1cm4gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOyAvKiBGYWlsdXJlICovCisgICAgfQorCisgICAgaWYgKChyZl9jaGFubmVsX2ZyZXEgPCAyMzYwKSB8fCAocmZfY2hhbm5lbF9mcmVxID4yNDg3KSkKKyAgICB7CisgICAgICAgIHJldHVybiBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7IC8qIGZhaWx1cmUgKi8KKyAgICB9CisKKyAgICAvKiBTZXQgdGhlIERGVCBNb2RlICovCisgICAgdGVtcCAgPSBYQ1ZSX1RYX0RJRy0+Q1RSTDsKKyAgICB0ZW1wICY9IH5YQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX01BU0s7CisgICAgdGVtcCB8PSBYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFKDEpOworICAgIFhDVlJfVFhfRElHLT5DVFJMID0gdGVtcDsKKworICAgIC8qIENob29zZSBQcm90b2NvbCA2IG9yIDcgaWYgdXNpbmcgdGhlIENoYW5uZWwgTnVtYmVyIHJlZ2lzdGVyICovCisgICAgdGVtcCAgPSBYQ1ZSX01JU0MtPlhDVlJfQ1RSTDsKKyAgICB0ZW1wICY9IH5YQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0s7CisgICAgdGVtcCB8PSBYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MKHByb3RvY29sKTsKKyAgICBYQ1ZSX01JU0MtPlhDVlJfQ1RSTCA9IHRlbXA7CisKKyAgICAvKiBTZWxlY3QgdGhlIFJGIENoYW5uZWwsIHVzaW5nIHRoZSBDaGFubmVsIE51bWJlciByZWdpc3RlciAqLworICAgIFhDVlJfT3ZlcnJpZGVDaGFubmVsKHJmX2NoYW5uZWxfZnJlcS0yMzYwLDEpOworCisgICAgLyogV2FybS11cCB0aGUgUmFkaW8gKi8KKyAgICBYQ1ZSX0ZvcmNlVHhXdSgpOworCisgICAgcmV0dXJuIGdYY3ZyU3VjY2Vzc19jOyAvKiBTdWNjZXNzICovCit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0RmdFR4UGF0dGVyblJlZyh1aW50MTZfdCBjaGFubmVsX251bSwgcmFkaW9fbW9kZV90IHJhZGlvX21vZGUsIGRhdGFfcmF0ZV90IGRhdGFfcmF0ZSwgdWludDMyX3QgdHhfcGF0dGVybikKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIHVpbnQ4X3QgZGZ0X21vZGUgPSAwOworICAgIHVpbnQ4X3QgZGZ0X2Nsa19zZWwgPSAwOworICAgIHhjdnJTdGF0dXNfdCBzdGF0dXMgPSBnWGN2clN1Y2Nlc3NfYzsKKyAgICAKKyAgICBYQ1ZSX0NoYW5nZU1vZGUocmFkaW9fbW9kZSwgZGF0YV9yYXRlKTsKKyAgICAKKyAgICAvKiBTZWxlY3QgdGhlIFJGIENoYW5uZWwsIHVzaW5nIHRoZSBDaGFubmVsIE51bWJlciByZWdpc3RlciAqLworICAgIFhDVlJfT3ZlcnJpZGVDaGFubmVsKGNoYW5uZWxfbnVtLCAxKTsKKworICAgIHN3aXRjaCAocmFkaW9fbW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgWklHQkVFX01PREU6CisgICAgICAgICAgICBkZnRfbW9kZSA9IDY7IC8qIE9RUFNLIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFOVF9NT0RFOgorICAgICAgICBjYXNlIEJMRV9NT0RFOgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA1OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHAzMjoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzBwNzoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwNV9oXzFwMDoKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwM19oXzBwNToKKyAgICAgICAgY2FzZSBHRlNLX0JUXzBwN19oXzBwNToKKyAgICAgICAgICAgIGRmdF9tb2RlID0gMjsgLyogR0ZTSyBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNU0s6CisgICAgICAgICAgICBkZnRfbW9kZSA9IDQ7IC8qIE1TSyBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN0YXR1cyA9IGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChzdGF0dXMgPT0gZ1hjdnJTdWNjZXNzX2MpIC8qIE9ubHkgYXR0ZW1wdCB0aGlzIHBvaW50ZXIgYXNzaWdubWVudCBwcm9jZXNzIGlmIHByaW9yIHN3aXRjaCgpIHN0YXRlbWVudCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCisgICAgeworICAgICAgICBzd2l0Y2ggKGRhdGFfcmF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBEUl8xTUJQUzoKKyAgICAgICAgICAgICAgICBkZnRfY2xrX3NlbCA9IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERSXzUwMEtCUFM6CisgICAgICAgICAgICAgICAgZGZ0X2Nsa19zZWwgPSAzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEUl8yNTBLQlBTOgorICAgICAgICAgICAgICAgIGRmdF9jbGtfc2VsID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcCA9IFhDVlJfVFhfRElHLT5DVFJMOworICAgIHRlbXAgJj0gfihYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX01BU0sgfCBYQ1ZSX1RYX0RJR19DVFJMX0RGVF9DTEtfU0VMX01BU0sgfCBYQ1ZSX1RYX0RJR19DVFJMX1RYX0RGVF9FTl9NQVNLIHwgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOX01BU0spOworICAgIHRlbXAgfD0gWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERShkZnRfbW9kZSkgfAorICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTChkZnRfY2xrX3NlbCkgfAorICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU4oMSkgfAorICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0VOKDApOworICAgIFhDVlJfVFhfRElHLT5DVFJMID0gdGVtcDsKKworICAgIFhDVlJfVFhfRElHLT5ERlRfUEFUVEVSTiA9IHR4X3BhdHRlcm47CisKKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKQorICAgIHsKKyAgICAgICAgLyogV2FybS11cCB0aGUgUmFkaW8gKi8KKyAgICAgICAgWENWUl9Gb3JjZVR4V3UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit4Y3ZyU3RhdHVzX3QgWENWUl9EZnRUeExmc3JSZWcodWludDE2X3QgY2hhbm5lbF9udW0sIHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBkYXRhX3JhdGUsIHVpbnQ4X3QgbGZzcl9sZW5ndGgpCit7CisgICAgdWludDMyX3QgdGVtcDsKKyAgICB1aW50OF90IGRmdF9tb2RlID0gMDsKKyAgICB1aW50OF90IGRmdF9jbGtfc2VsID0gMDsKKyAgICB4Y3ZyU3RhdHVzX3Qgc3RhdHVzID0gZ1hjdnJTdWNjZXNzX2M7CisgICAgdWludDhfdCBiaXRyYXRlX3NldHRpbmcgPSAweEZGOworCisgICAgaWYgKGxmc3JfbGVuZ3RoID4gNSkKKyAgICB7CisgICAgICAgIHJldHVybiBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgfQorICAgIAorICAgIFhDVlJfQ2hhbmdlTW9kZShyYWRpb19tb2RlLCBkYXRhX3JhdGUpOworICAgIAorICAgIC8qIFNlbGVjdCB0aGUgUkYgQ2hhbm5lbCwgdXNpbmcgdGhlIENoYW5uZWwgTnVtYmVyIHJlZ2lzdGVyICovCisgICAgWENWUl9PdmVycmlkZUNoYW5uZWwoY2hhbm5lbF9udW0sIDEpOworCisgICAgc3dpdGNoIChyYWRpb19tb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBaSUdCRUVfTU9ERToKKyAgICAgICAgICAgIGRmdF9tb2RlID0gNzsgLyogT1FQU0sgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU5UX01PREU6CisgICAgICAgIGNhc2UgQkxFX01PREU6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDU6CisgICAgICAgIGNhc2UgR0ZTS19CVF8wcDVfaF8wcDMyOgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMHA3OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA1X2hfMXAwOgorICAgICAgICBjYXNlIEdGU0tfQlRfMHAzX2hfMHA1OgorICAgICAgICBjYXNlIEdGU0tfQlRfMHA3X2hfMHA1OgorICAgICAgICAgICAgZGZ0X21vZGUgPSAzOyAvKiBHRlNLIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJpdHJhdGVfc2V0dGluZyA9IGRhdGFfcmF0ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1TSzoKKyAgICAgICAgICAgIGRmdF9tb2RlID0gNTsgLyogTVNLIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzdGF0dXMgPSBnWGN2ckludmFsaWRQYXJhbWV0ZXJzX2M7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChkYXRhX3JhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgRFJfMU1CUFM6CisgICAgICAgICAgICAgICAgZGZ0X2Nsa19zZWwgPSA0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEUl81MDBLQlBTOgorICAgICAgICAgICAgICAgIGRmdF9jbGtfc2VsID0gMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFJfMjUwS0JQUzoKKyAgICAgICAgICAgICAgICBkZnRfY2xrX3NlbCA9IDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGdYY3ZySW52YWxpZFBhcmFtZXRlcnNfYzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChiaXRyYXRlX3NldHRpbmcgPCA0KQorICAgIHsKKyAgICAgICAgR0VORlNLLT5CSVRSQVRFID0gYml0cmF0ZV9zZXR0aW5nOworICAgIH0KKworICAgIHRlbXAgPSBYQ1ZSX1RYX0RJRy0+Q1RSTDsKKyAgICB0ZW1wICY9IH4oWENWUl9UWF9ESUdfQ1RSTF9SQURJT19ERlRfTU9ERV9NQVNLIHwKKyAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9MRlNSX0xFTkdUSF9NQVNLIHwKKyAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLIHwKKyAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9UWF9ERlRfRU5fTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTl9NQVNLKTsKKyAgICB0ZW1wIHw9IFhDVlJfVFhfRElHX0NUUkxfUkFESU9fREZUX01PREUoZGZ0X21vZGUpIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9MRU5HVEgobGZzcl9sZW5ndGgpIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfREZUX0NMS19TRUwoZGZ0X2Nsa19zZWwpIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOKDApIHwKKyAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTigxKTsKKyAgICBYQ1ZSX1RYX0RJRy0+Q1RSTCA9IHRlbXA7CisKKyAgICBpZiAoc3RhdHVzID09IGdYY3ZyU3VjY2Vzc19jKQorICAgIHsKKyAgICAgICAgLyogV2FybS11cCB0aGUgUmFkaW8gKi8KKyAgICAgICAgWENWUl9Gb3JjZVR4V3UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit2b2lkIFhDVlJfRGZ0VHhPZmYodm9pZCkKK3sKKyAgICBYQ1ZSX0ZvcmNlVHhXZCgpOworICAgIFhDVlJfTUlTQy0+WENWUl9DVFJMIHw9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfVEdUX1BXUl9TUkNfTUFTSzsgLyogVXNlIFBBX1BPV0VSIGluIExMIHJlZ2lzdGVycyAqLworICAgIC8qIENsZWFyIHRoZSBSRiBDaGFubmVsIG92ZXItcmlkZSAqLworICAgIFhDVlJfT3ZlcnJpZGVDaGFubmVsKDB4RkYsMSk7CisgICAgWENWUl9UWF9ESUctPkNUUkwgJj0gfihYQ1ZSX1RYX0RJR19DVFJMX1JBRElPX0RGVF9NT0RFX01BU0sgfCAvKiBDbGVhciBERlRfTU9ERSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UWF9ESUdfQ1RSTF9ERlRfQ0xLX1NFTF9NQVNLIHwgLyogQ2xlYXIgREZUX0NMS19TRUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfVFhfREZUX0VOX01BU0sgfCAvKiBDbGVhciBERlRfRU4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFhfRElHX0NUUkxfTEZTUl9FTl9NQVNLKTsvKiBDbGVhciBMRlNSX0VOICovCit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0ZvcmNlUEFQb3dlcih1aW50OF90IHBhX3Bvd2VyKQoreworICAgIGlmIChwYV9wb3dlciA+IDB4M0YpCisgICAgeworICAgICAgICByZXR1cm4gZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jOyAvKiBGYWlsdXJlICovCisgICAgfQorICAgIAorICAgIGlmIChwYV9wb3dlciAhPSAxKQorICAgIHsKKyAgICAgICAgcGFfcG93ZXIgPSBwYV9wb3dlciAmIDB4RkVVOyAvKiBFbnN1cmUgTFNiaXQgaXMgY2xlYXJlZCAqLworICAgIH0KKyAgICAKKyAgICBYQ1ZSX01JU0MtPlhDVlJfQ1RSTCAmPSB+WENWUl9DVFJMX1hDVlJfQ1RSTF9UR1RfUFdSX1NSQ19NQVNLOyAvKiBVc2UgUEFfUE9XRVIgaW4gVFNNIHJlZ2lzdGVycyAqLworICAgIFhDVlJfVFNNLT5QQV9QT1dFUiA9IHBhX3Bvd2VyOworCisgICAgcmV0dXJuIGdYY3ZyU3VjY2Vzc19jOyAvKiBTdWNjZXNzICovCit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0NvZXhpc3RlbmNlSW5pdCh2b2lkKQoreworI2lmIGdNV1NfVXNlQ29leGlzdGVuY2VfZCAgCisgICAgdWludDMyX3QgdGVtcCA9IDB4MDBVOworICAgIHVpbnQzMl90IGVuZF9vZl90eF93dSA9IDB4MDBVOworICAgIHVpbnQzMl90IGVuZF9vZl9yeF93dSA9IDB4MDBVOworICAgIAorI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkKKyNpZiAoWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gPT0gQU5UX0EpCisgICAgdWludDMyX3QgdHNtX3RpbWluZzQ3ID0gMHgwMFU7CisjZWxzZSAvKiAoWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gPT0gQU5UX0IpICovCisgICAgdWludDMyX3QgdHNtX3RpbWluZzQ4ID0gMHgwMFU7CisjZW5kaWYgLyogKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKSAqLworICAgIHVpbnQzMl90IHRzbV90aW1pbmc1MCA9IDB4MDBVOyAgICAKKyNlbmRpZiAvKiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICovCisgICAgCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkKKyAgICAvLyBSRl9BQ1RJVkUgPSBBTlRfQiAoUFRDMSwgZ3BpbzFfdHJpZ19lbikKKyAgICB1aW50MzJfdCB0c21fdGltaW5nNDggPSAweDAwVTsKKyAgICAvLyBSRl9QUklPUklUWSA9IEFOVF9BIChQVEM0LCBncGlvMF90cmlnX2VuKQorICAgIHVpbnQzMl90IHRzbV90aW1pbmc0NyA9IDB4MDBVOyAgICAKKyNlbmRpZiAvKiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKSAqLworICAgIAorICAgIHVpbnQxNl90IHRzbV90aW1pbmc0M19yeCA9IDB4MDA7CisgICAgdWludDE2X3QgdHNtX3RpbWluZzQzX3R4ID0gMHgwMDsgICAgCisKKyAgICAvKiBTZWxlY3QgR1BJTyBtb2RlIGZvciBGQUQgcGlucyAqLworICAgIHRlbXAgPSBYQ1ZSX01JU0MtPkZBRF9DVFJMOworICAgIHRlbXAgJj0gfihYQ1ZSX0NUUkxfRkFEX0NUUkxfRkFEX05PVF9HUElPX01BU0spOworICAgIFhDVlJfTUlTQy0+RkFEX0NUUkwgPSB0ZW1wOworCisgICAgLyogUmVhZCB0aGUgRU5EX09GX1RYX1dVIGFuZCBFTkRfT0ZfUlhfV1UgZm9yIFhDVlIgKi8KKyAgICBlbmRfb2ZfdHhfd3UgPSAoWENWUl9UU00tPkVORF9PRl9TRVEgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9UWF9XVV9TSElGVDsKKyAgICBlbmRfb2Zfcnhfd3UgPSAoWENWUl9UU00tPkVORF9PRl9TRVEgJiBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9NQVNLKSA+PgorICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9FTkRfT0ZfU0VRX0VORF9PRl9SWF9XVV9TSElGVDsKKyAgICAKKy8qKioqKioqKioqKioqKioqKgorICogIFRYIFNFUVVFTkNFICAqCisgKioqKioqKioqKioqKioqKiovICAgIAorCisgICAgaWYgKGVuZF9vZl90eF93dSA8IGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kKQorICAgIHsKKyAgICAgICAgdGVtcCA9IGVuZF9vZl90eF93dTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGVtcCA9IGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kOworICAgIH0KKyAgICAKKyAgICAvKiBTYXZlIHRoZSBUWCBSRl9BQ1RJVkUgc3RhcnQgdGltZS4gKi8KKyAgICB0c21fdGltaW5nNDNfdHggPSBlbmRfb2ZfdHhfd3UgLSB0ZW1wOyAKKworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgICAgCisgICAgLyogU2V0IFJGX0FDVElWRSBwaW4gSElHSCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCB1UyBwcmlvciB0byBhbnkgVFggc2VxdWVuY2UuICovCisjaWYgKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKQorICAgIHRzbV90aW1pbmc0NyA9ICgoKHVpbnQzMl90KShlbmRfb2ZfdHhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0spOworI2Vsc2UKKyAgICB0c21fdGltaW5nNDggPSAoKCh1aW50MzJfdCkoZW5kX29mX3R4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9NQVNLKTsgICAgCisjZW5kaWYgLyogKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKSAqLworCisgICAgLyogU2V0IFNUQVRVUyBwaW4gSElHSCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCB1UyBwcmlvciB0byBhbnkgVFggc2VxdWVuY2UuICovCisgICAgdHNtX3RpbWluZzUwID0gKCgodWludDMyX3QpKGVuZF9vZl90eF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfTUFTSyk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkKKyAgICAvKiBTZXQgUkZfQUNUSVZFIHBpbiBISUdIIGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kIHVTIHByaW9yIHRvIGFueSBUWCBzZXF1ZW5jZS4gKi8KKyAgICB0c21fdGltaW5nNDggPSAoKCh1aW50MzJfdCkoZW5kX29mX3R4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9UWF9ISV9NQVNLKTsKKworICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFRYIHNlcXVlbmNlLiAqLworICAgIHRzbV90aW1pbmc0NyA9ICgoKHVpbnQzMl90KShlbmRfb2ZfdHhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0spOyAgICAgICAgCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8gIAorICAgIAorLyoqKioqKioqKioqKioqKioqCisgKiAgUlggU0VRVUVOQ0UgICoKKyAqKioqKioqKioqKioqKioqKi8KKworICAgIGlmIChlbmRfb2Zfcnhfd3UgPCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCkKKyAgICB7CisgICAgICAgIHRlbXAgPSBlbmRfb2Zfcnhfd3U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRlbXAgPSBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZDsKKyAgICB9CisKKyAgICAvKiBTYXZlIHRoZSBSWCBSRl9BQ1RJVkUgc3RhcnQgdGltZS4gKi8KKyAgICB0c21fdGltaW5nNDNfcnggPSBlbmRfb2Zfcnhfd3UgLSB0ZW1wOyAKKworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgICAgCisgICAgLyogU2V0IFJGX0FDVElWRSBwaW4gSElHSCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCB1UyBwcmlvciB0byBhbnkgUlggc2VxdWVuY2UuICovCisjaWYgKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKQorICAgIHRzbV90aW1pbmc0NyB8PSAoKCh1aW50MzJfdCkoZW5kX29mX3J4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfTUFTSyk7CisjZWxzZQorICAgIHRzbV90aW1pbmc0OCB8PSAoKCh1aW50MzJfdCkoZW5kX29mX3J4X3d1IC0gdGVtcCkgPDwgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ4X0dQSU8xX1RSSUdfRU5fUlhfSElfTUFTSyk7CisjZW5kaWYgLyogKFhDVlJfQ09FWF9SRl9BQ1RJVkVfUElOID09IEFOVF9BKSAqLworCisgICAgLyogU2V0IFNUQVRVUyBwaW4gSElHSCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCB1UyBwcmlvciB0byBhbnkgUlggc2VxdWVuY2UgYW5kIGNsZWFyIGl0IGdNV1NfQ29leFByaW9TaWduYWxUaW1lX2QgdVMgYmVmb3JlIFJYIHN0YXJ0LiAqLworICAgIHRzbV90aW1pbmc1MCB8PSAoKCgodWludDMyX3QpKGVuZF9vZl9yeF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9NQVNLKSB8CisgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoZW5kX29mX3J4X3d1IC0gZ01XU19Db2V4UHJpb1NpZ25hbFRpbWVfZCkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19NQVNLKSk7CisKKyNpZiAoWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gPT0gQU5UX0EpCisgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkc0NzsKKyAgICB0ZW1wICY9IH4oWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9ISV9NQVNLIHwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9NQVNLKTsKKyAgICB0ZW1wIHw9IHRzbV90aW1pbmc0NzsKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNDcgPSB0ZW1wOworI2Vsc2UKKyAgICB0ZW1wID0gWENWUl9UU00tPlRJTUlORzQ4OworICAgIHRlbXAgJj0gfihYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0hJX01BU0sgfCBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0hJX01BU0spOworICAgIHRlbXAgfD0gdHNtX3RpbWluZzQ4OworICAgIFhDVlJfVFNNLT5USU1JTkc0OCA9IHRlbXA7ICAgIAorI2VuZGlmIC8qIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkgKi8KKworICAgIHRlbXAgPSBYQ1ZSX1RTTS0+VElNSU5HNTA7CisgICAgdGVtcCAmPSB+KFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfTUFTSyB8IAorICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX01BU0sgfAorICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX01BU0spOworICAgIHRlbXAgfD0gdHNtX3RpbWluZzUwOworICAgIFhDVlJfVFNNLT5USU1JTkc1MCA9IHRlbXA7CisKKyNpZiAoWENWUl9DT0VYX1JGX0FDVElWRV9QSU4gPT0gQU5UX0EpCisgICAgR1BJT0MtPlBERFIgfD0gMHgxODsKKyAgICBQT1JUQy0+UENSWzRdID0gKFBPUlRDLT5QQ1JbNF0gJiB+UE9SVF9QQ1JfTVVYX01BU0spIHwgUE9SVF9QQ1JfTVVYKDIpOworICAgIFBPUlRDLT5QQ1JbM10gPSAoUE9SVEMtPlBDUlszXSAmIH5QT1JUX1BDUl9NVVhfTUFTSykgfCBQT1JUX1BDUl9NVVgoMik7CisjZWxzZQorICAgIEdQSU9DLT5QRERSIHw9IDB4MEE7CisgICAgUE9SVEMtPlBDUlsxXSA9IChQT1JUQy0+UENSWzFdICYgflBPUlRfUENSX01VWF9NQVNLKSB8IFBPUlRfUENSX01VWCgyKTsKKyAgICBQT1JUQy0+UENSWzNdID0gKFBPUlRDLT5QQ1JbM10gJiB+UE9SVF9QQ1JfTVVYX01BU0spIHwgUE9SVF9QQ1JfTVVYKDIpOworI2VuZGlmIC8qIChYQ1ZSX0NPRVhfUkZfQUNUSVZFX1BJTiA9PSBBTlRfQSkgKi8KKyNlbmRpZiAvKiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICovCisgICAgCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgICAgCisgICAgLyogU2V0IFJGX0FDVElWRSBwaW4gSElHSCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCB1UyBwcmlvciB0byBhbnkgUlggc2VxdWVuY2UuICovCisgICAgdHNtX3RpbWluZzQ4IHw9ICgoKHVpbnQzMl90KShlbmRfb2Zfcnhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDhfR1BJTzFfVFJJR19FTl9SWF9ISV9NQVNLKTsKKyAgICAKKyAgICAvKiBTZXQgUFJJT1JJVFkgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFJYIHNlcXVlbmNlIGFuZCBjbGVhciBpdCBnTVdTX0NvZXhQcmlvU2lnbmFsVGltZV9kIHVTIGJlZm9yZSBSWCBzdGFydC4gKi8KKyAgICB0c21fdGltaW5nNDcgfD0gKCgodWludDMyX3QpKGVuZF9vZl9yeF93dSAtIHRlbXApIDw8IFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9NQVNLKTsKKyAgICAKKyAgICAvKiBSRl9BQ1RJVkUgKi8KKyAgICB0ZW1wID0gWENWUl9UU00tPlRJTUlORzQ4OworICAgIHRlbXAgJj0gfihYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1RYX0hJX01BU0sgfCBYQ1ZSX1RTTV9USU1JTkc0OF9HUElPMV9UUklHX0VOX1JYX0hJX01BU0spOworICAgIHRlbXAgfD0gdHNtX3RpbWluZzQ4OworICAgIFhDVlJfVFNNLT5USU1JTkc0OCA9IHRlbXA7CisgICAgCisgICAgLyogUkZfUFJJT1JJVFkgKi8KKyAgICB0ZW1wID0gWENWUl9UU00tPlRJTUlORzQ3OworICAgIHRlbXAgJj0gfihYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0sgfCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX01BU0spOworICAgIHRlbXAgfD0gdHNtX3RpbWluZzQ3OworICAgIFhDVlJfVFNNLT5USU1JTkc0NyA9IHRlbXA7CisgICAgCisgICAgLyogT3ZlcndyaXRlIHBpbnMgc2V0dGluZ3MgKi8KKyAgICBHUElPQy0+UEREUiB8PSAweDEyOworICAgIFBPUlRDLT5QQ1JbNF0gPSAoUE9SVEMtPlBDUls0XSAmIH5QT1JUX1BDUl9NVVhfTUFTSykgfCBQT1JUX1BDUl9NVVgoMik7CisgICAgUE9SVEMtPlBDUlsxXSA9IChQT1JUQy0+UENSWzFdICYgflBPUlRfUENSX01VWF9NQVNLKSB8IFBPUlRfUENSX01VWCgyKTsgICAgCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8KKworICAgIHRzbV90aW1pbmc0M190eCArPSBnTVdTX0NvZXhDb25maXJtV2FpdFRpbWVfZDsKKworICAgIGlmICh0c21fdGltaW5nNDNfdHggPiBlbmRfb2ZfdHhfd3UgLSAxKQorICAgIHsKKyAgICAgICAgdHNtX3RpbWluZzQzX3R4ID0gZW5kX29mX3R4X3d1IC0gMTsKKyAgICB9CisKKyAgICB0c21fdGltaW5nNDNfcnggKz0gZ01XU19Db2V4Q29uZmlybVdhaXRUaW1lX2Q7CisgICAgCisgICAgaWYgKHRzbV90aW1pbmc0M19yeCA+IGVuZF9vZl9yeF93dSAtIDEpCisgICAgeworICAgICAgICB0c21fdGltaW5nNDNfcnggPSBlbmRfb2Zfcnhfd3UgLSAxOworICAgIH0KKworICAgIFhDVlJfVFNNLT5USU1JTkc0MyA9ICgoKCh1aW50MzJfdCkodHNtX3RpbWluZzQzX3R4KSA8PCBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0hJX1NISUZUKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fVFhfSElfTUFTSykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkodHNtX3RpbWluZzQzX3R4ICsgMikgPDwgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9UWF9MT19TSElGVCkgJiBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1RYX0xPX01BU0spIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSh0c21fdGltaW5nNDNfcngpIDw8IFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfSElfU0hJRlQpICYgWENWUl9UU01fVElNSU5HNDNfVFNNX1NQQVJFMF9FTl9SWF9ISV9NQVNLKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSh0c21fdGltaW5nNDNfcnggKyAyKSA8PCBYQ1ZSX1RTTV9USU1JTkc0M19UU01fU1BBUkUwX0VOX1JYX0xPX1NISUZUKSAmIFhDVlJfVFNNX1RJTUlORzQzX1RTTV9TUEFSRTBfRU5fUlhfTE9fTUFTSykpOworCisgICAgQlRMRV9SRi0+TUlTQ19DVFJMID0gMHgwMjsKKworICAgIFhDVlJfVFNNLT5DVFJMIHw9IFhDVlJfVFNNX0NUUkxfVFNNX0lSUTBfRU5fTUFTSzsKKworICAgIC8qIFNhdmUgdGhlIHVwZGF0ZWQgcmVnaXN0ZXJzIHZhbHVlcy4gKi8KKyAgICBYQ1ZSX0NvZXhpc3RlbmNlU2F2ZVJlc3RvcmVUaW1pbmdzKDEpOyAgICAKKyNlbmRpZiAvKiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QgKi8gCisKKyAgICByZXR1cm4gZ1hjdnJTdWNjZXNzX2M7Cit9CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0NvZXhpc3RlbmNlU2V0UHJpb3JpdHkoWENWUl9DT0VYX1BSSU9SSVRZX1QgcnhQcmlvcml0eSwgWENWUl9DT0VYX1BSSU9SSVRZX1QgdHhQcmlvcml0eSkKK3sKKyNpZiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QKKyAgICB1aW50MzJfdCB0ZW1wID0gMHgwMFU7CisgICAgdWludDMyX3QgZW5kX29mX3R4X3d1ID0gMHgwMFU7CisgICAgdWludDMyX3QgZW5kX29mX3J4X3d1ID0gMHgwMFU7CisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKQorICAgIHVpbnQzMl90IHRzbV90aW1pbmc1MCA9IDB4MDBVOworI2VuZGlmICAgIAorI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpCisgICAgdWludDMyX3QgdHNtX3RpbWluZzQ3ID0gMHgwMFU7CisjZW5kaWYgICAgCisKKyAgICAvKiBSZWFkIHRoZSBFTkRfT0ZfVFhfV1UgYW5kIEVORF9PRl9SWF9XVSBmb3IgWENWUiAqLworICAgIGVuZF9vZl90eF93dSA9IChYQ1ZSX1RTTS0+RU5EX09GX1NFUSAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVX01BU0spID4+CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1RYX1dVX1NISUZUOworICAgIGVuZF9vZl9yeF93dSA9IChYQ1ZSX1RTTS0+RU5EX09GX1NFUSAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX01BU0spID4+CisgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUOyAgICAKKworLyoqKioqKioqKioqKioqKioqCisgKiAgICAgIFJYICAgICAgICoKKyAqKioqKioqKioqKioqKioqKi8KKyAgICAKKyAgICBpZiAoWENWUl9DT0VYX0hJR0hfUFJJTyA9PSByeFByaW9yaXR5KQorICAgIHsKKyAgICAgICAgaWYgKGVuZF9vZl9yeF93dSA8IGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wID0gZW5kX29mX3J4X3d1OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCA9IGdNV1NfQ29leFJmQWN0aXZlQXNzZXJ0VGltZV9kOworICAgICAgICB9CisKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpCisgICAgICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFJYIHNlcXVlbmNlIGFuZCBjbGVhciBpdCBnTVdTX0NvZXhQcmlvU2lnbmFsVGltZV9kIHVTIGJlZm9yZSBSWCBzdGFydCBmb3IgaGlnaCBwcmlvcml0eSBSWC4gKi8KKyAgICAgICAgdHNtX3RpbWluZzUwID0gKCgoKHVpbnQzMl90KShlbmRfb2Zfcnhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfTUFTSykgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKGVuZF9vZl9yeF93dSAtIGdNV1NfQ29leFByaW9TaWduYWxUaW1lX2QpIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfTE9fU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19NQVNLKSk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpCisgICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFJYIHNlcXVlbmNlICovCisgICAgICAgIHRzbV90aW1pbmc0NyA9ICgoKHVpbnQzMl90KShlbmRfb2Zfcnhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9ISV9NQVNLKTsgICAKKyNlbmRpZiAvKiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKSAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBMb3cgcHJpb3JpdHkgUlggKi8KKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpCisgICAgICAgIHRzbV90aW1pbmc1MCA9ICgoKDB4RkZVIDw8IFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfU0hJRlQpICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fUlhfSElfTUFTSykgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCgweEZGVSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1JYX0xPX01BU0spKTsKKyNlbmRpZiAvKiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICovCisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgICAgICAgIAorICAgICAgICB0c21fdGltaW5nNDcgPSAoKCgweEZGVSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1JYX0hJX01BU0spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoMHhGRlUgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9MT19TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9SWF9MT19NQVNLKSk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8KKyAgICB9CisKKy8qKioqKioqKioqKioqKioqKgorICogICAgICBUWCAgICAgICAqCisgKioqKioqKioqKioqKioqKiovCisgICAgaWYgKFhDVlJfQ09FWF9ISUdIX1BSSU8gPT0gdHhQcmlvcml0eSkKKyAgICB7CisgICAgICAgIGlmIChlbmRfb2ZfdHhfd3UgPCBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCA9IGVuZF9vZl90eF93dTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgPSBnTVdTX0NvZXhSZkFjdGl2ZUFzc2VydFRpbWVfZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggZ01XU19Db2V4UmZBY3RpdmVBc3NlcnRUaW1lX2QgdVMgcHJpb3IgdG8gYW55IFRYIHNlcXVlbmNlIGZvciBISUdIIHByaW9yaXR5IFRYLiAqLworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkKKyAgICAgICAgdHNtX3RpbWluZzUwIHw9ICgoKHVpbnQzMl90KShlbmRfb2ZfdHhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc1MF9HUElPM19UUklHX0VOX1RYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfTUFTSyk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpICAgICAgICAKKyAgICAgICAgdHNtX3RpbWluZzQ3IHw9ICgoKHVpbnQzMl90KShlbmRfb2ZfdHhfd3UgLSB0ZW1wKSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfSElfTUFTSyk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8gICAgICAgICAgICAgICAgCisgICAgfQorICAgIGVsc2UKKyAgICB7ICAgICAgICAKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpCisgICAgICAgIC8qIFNldCBTVEFUVVMgcGluIEhJR0ggYXQgRU5EX09GX1RYX1dVIHByaW9yIHRvIGFueSBUWCBzZXF1ZW5jZSBmb3IgTE9XIHByaW9yaXR5IFRYLiAqLworICAgICAgICB0c21fdGltaW5nNTAgfD0gKCgodWludDMyX3QpKGVuZF9vZl90eF93dSkgPDwgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzUwX0dQSU8zX1RSSUdfRU5fVFhfSElfTUFTSyk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAqLworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfUHJpb19Pbmx5X2QpCisgICAgICAgIC8qIFNldCBTVEFUVVMgcGluIExPVyBhdCBFTkRfT0ZfVFhfV1UgcHJpb3IgdG8gYW55IFRYIHNlcXVlbmNlIGZvciBMT1cgcHJpb3JpdHkgVFguICovICAgICAgICAgICAgICAgIAorICAgICAgICB0c21fdGltaW5nNDcgPSAoKCgweEZGVSA8PCBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX1NISUZUKSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1RTTV9USU1JTkc0N19HUElPMF9UUklHX0VOX1RYX0hJX01BU0spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoMHhGRlUgPDwgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9MT19TSElGVCkgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNDdfR1BJTzBfVFJJR19FTl9UWF9MT19NQVNLKSk7CisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8KKyAgICB9CisKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpCisgICAgdGVtcCA9IFhDVlJfVFNNLT5USU1JTkc1MDsKKyAgICB0ZW1wICY9IH4oWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9UWF9ISV9NQVNLIHwKKyAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9ISV9NQVNLIHwKKyAgICAgICAgICAgICAgWENWUl9UU01fVElNSU5HNTBfR1BJTzNfVFJJR19FTl9SWF9MT19NQVNLKTsKKyAgICB0ZW1wIHw9IHRzbV90aW1pbmc1MDsKKyAgICBYQ1ZSX1RTTS0+VElNSU5HNTAgPSB0ZW1wOworI2VuZGlmIC8qIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgKi8KKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1ByaW9fT25seV9kKQorICAgIHRlbXAgPSBYQ1ZSX1RTTS0+VElNSU5HNDc7CisgICAgdGVtcCAmPSB+KFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfSElfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fVFhfTE9fTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfSElfTUFTSyB8CisgICAgICAgICAgICAgIFhDVlJfVFNNX1RJTUlORzQ3X0dQSU8wX1RSSUdfRU5fUlhfTE9fTUFTSyk7CisgICAgdGVtcCB8PSB0c21fdGltaW5nNDc7CisgICAgWENWUl9UU00tPlRJTUlORzQ3ID0gdGVtcDsgICAgCisjZW5kaWYgLyogKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9QcmlvX09ubHlfZCkgKi8KKyAgICAKKyAgICAvKiBTYXZlIHRoZSB1cGRhdGVkIHJlZ2lzdGVycyB2YWx1ZXMuICovCisgICAgWENWUl9Db2V4aXN0ZW5jZVNhdmVSZXN0b3JlVGltaW5ncygxKTsKKyNlbmRpZiAvKiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QgKi8KKworICAgIHJldHVybiBnWGN2clN1Y2Nlc3NfYzsKK30KKworeGN2clN0YXR1c190IFhDVlJfQ29leGlzdGVuY2VTYXZlUmVzdG9yZVRpbWluZ3ModWludDhfdCBzYXZlVGltaW5ncykKK3sKKyNpZiBnTVdTX1VzZUNvZXhpc3RlbmNlX2QKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX292cmQwX3NhdmVkID0gMHgwMDsKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX292cmQxX3NhdmVkID0gMHgwMDsKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX292cmQyX3NhdmVkID0gMHgwMDsKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX292cmQzX3NhdmVkID0gMHgwMDsKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX3RpbWluZzQ3X3NhdmVkID0gMHgwMDsKKyAgICBzdGF0aWMgdWludDMyX3QgdHNtX3RpbWluZzQ4X3NhdmVkID0gMHgwMDsKKyNpZiAoZ01XU19Db2V4X01vZGVsX2QgPT0gZ01XU19Db2V4X1N0YXR1c19QcmlvX2QpICAgIAorICAgIHN0YXRpYyB1aW50MzJfdCB0c21fdGltaW5nNDlfc2F2ZWQgPSAweDAwOworICAgIHN0YXRpYyB1aW50MzJfdCB0c21fdGltaW5nNTBfc2F2ZWQgPSAweDAwOworI2VuZGlmICAgIAorCisgICAgaWYgKHNhdmVUaW1pbmdzID09IDApCisgICAgeworICAgICAgICAvKiBSZXN0b3JlIHJlZ2lzdGVycyB2YWx1ZXMuICovCisgICAgICAgIFhDVlJfVFNNLT5PVlJEMCA9IHRzbV9vdnJkMF9zYXZlZDsgCisgICAgICAgIFhDVlJfVFNNLT5PVlJEMSA9IHRzbV9vdnJkMV9zYXZlZDsKKyAgICAgICAgWENWUl9UU00tPk9WUkQyID0gdHNtX292cmQyX3NhdmVkOworICAgICAgICBYQ1ZSX1RTTS0+T1ZSRDMgPSB0c21fb3ZyZDNfc2F2ZWQ7CisKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzQ3ID0gdHNtX3RpbWluZzQ3X3NhdmVkOworICAgICAgICBYQ1ZSX1RTTS0+VElNSU5HNDggPSB0c21fdGltaW5nNDhfc2F2ZWQ7CisjaWYgKGdNV1NfQ29leF9Nb2RlbF9kID09IGdNV1NfQ29leF9TdGF0dXNfUHJpb19kKSAgICAgICAgCisgICAgICAgIFhDVlJfVFNNLT5USU1JTkc0OSA9IHRzbV90aW1pbmc0OV9zYXZlZDsKKyAgICAgICAgWENWUl9UU00tPlRJTUlORzUwID0gdHNtX3RpbWluZzUwX3NhdmVkOworI2VuZGlmICAgICAgICAKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU2F2ZSByZWdpc3RlcnMgdmFsdWVzLiAqLworICAgICAgICB0c21fb3ZyZDBfc2F2ZWQgPSBYQ1ZSX1RTTS0+T1ZSRDA7CisgICAgICAgIHRzbV9vdnJkMV9zYXZlZCA9IFhDVlJfVFNNLT5PVlJEMTsKKyAgICAgICAgdHNtX292cmQyX3NhdmVkID0gWENWUl9UU00tPk9WUkQyOworICAgICAgICB0c21fb3ZyZDNfc2F2ZWQgPSBYQ1ZSX1RTTS0+T1ZSRDM7CisgICAgICAgIHRzbV90aW1pbmc0N19zYXZlZCA9IFhDVlJfVFNNLT5USU1JTkc0NzsKKyAgICAgICAgdHNtX3RpbWluZzQ4X3NhdmVkID0gWENWUl9UU00tPlRJTUlORzQ4OworI2lmIChnTVdTX0NvZXhfTW9kZWxfZCA9PSBnTVdTX0NvZXhfU3RhdHVzX1ByaW9fZCkgICAgICAgIAorICAgICAgICB0c21fdGltaW5nNDlfc2F2ZWQgPSBYQ1ZSX1RTTS0+VElNSU5HNDk7CisgICAgICAgIHRzbV90aW1pbmc1MF9zYXZlZCA9IFhDVlJfVFNNLT5USU1JTkc1MDsKKyNlbmRpZiAgICAgICAgCisgICAgfQorI2VuZGlmIC8qIGdNV1NfVXNlQ29leGlzdGVuY2VfZCAqLworCisgICAgcmV0dXJuIGdYY3ZyU3VjY2Vzc19jOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwM2Y4MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnIuaApAQCAtMCwwICsxLDEyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9YQ1ZSX0hfCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjZGVmaW5lIF9GU0xfWENWUl9IXworLyogY2xhbmctZm9ybWF0IG9uICovCisKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF94Y3ZyX3RyaW0uaCIKKworI2lmIGdNV1NfVXNlQ29leGlzdGVuY2VfZAorI2luY2x1ZGUgIk1XUy5oIgorI2VuZGlmIC8qIGdNV1NfVXNlQ29leGlzdGVuY2VfZCAqLworLyohCisgKiBAYWRkdG9ncm91cCB4Y3ZyCisgKiBAeworICovCisKKy8qISBAZmlsZSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEtXNHhaL0tXM3haL0tXMnhaIFJhZGlvIHR5cGUgKi8KKyNkZWZpbmUgUkFESU9fSVNfR0VOXzJQMCAgKDEpCisKKy8qIERlZmF1bHQgUkYgT1NDIGRlZmluaXRpb24uIEFsbG93cyBmb3IgY29tcGlsZSB0aW1lIGNsb2NrIGZyZXF1ZW5jeSBkZWZpbml0aW9uICovCisjaWZkZWYgQ0xPQ0tfTUFJTgorCisjZWxzZQorI2lmIFJGX09TQ18yNk1IWiA9PSAxCisjZGVmaW5lIENMT0NLX01BSU4gKEVYVF9DTEtfMjZfTUhaKSAvKiBTZWUgZXh0X2Nsb2NrX2NvbmZpZ190IGZvciB0aGlzIHZhbHVlICovCisjZWxzZQorI2RlZmluZSBDTE9DS19NQUlOIChFWFRfQ0xLXzMyX01IWikgLyogU2VlIGV4dF9jbG9ja19jb25maWdfdCBmb3IgdGhpcyB2YWx1ZSAqLworI2VuZGlmIC8qIFJGX09TQ18yNk1IWiA9PSAxICovCisjZW5kaWYgLyogQ0xPQ0tfTUFJTiAqLworIAorI2RlZmluZSBUQkRfWkVSTyAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgRlNMX1hDVlJfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigwLCAxLCAwKSkKKworI2RlZmluZSBCMCh4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgMCkpICYgMHhGRlUpCisjZGVmaW5lIEIxKHgpICAgKCgodWludDMyX3QpKCgodWludDMyX3QpKHgpKSA8PCA4KSkgJiAweEZGMDBVKQorI2RlZmluZSBCMih4KSAgICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KSh4KSkgPDwgMTYpKSAmIDB4RkYwMDAwVSkKKyNkZWZpbmUgQjMoeCkgICAoKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoeCkpIDw8IDI0KSkgJiAweEZGMDAwMDAwVSkKKworI2RlZmluZSBVU0VfREVGQVVMVF9QUkVfUkVGICAgICAgICAgICAgICgwKQorI2RlZmluZSBUUklNX0JCQV9EQ09DX0RBQ19BVF9JTklUICAgICAgICgxKQorI2RlZmluZSBQUkVTTE9XX0VOQSAgICAgICAgICAgICAgICAgICAgICgxKQorCisvKiBHRU4zIFRTTSBkZWZpbmVzICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorCisvKiBUU00gdGltaW5ncyBpbml0aWFsaXphdGlvbnMgZm9yIEdlbjMgcmFkaW8gKi8KKy8qIE5PVEU6IFRoZXNlIHRpbWluZ3MgYXJlIHN0b3JlZCBpbiAzMk1IeiBvciAyNk1IeiAiYmFzZWxpbmUiIHNldHRpbmdzLCBzZWxlY3RlZCBieSBjb25kaXRpb25hbCBjb21waWxlIGJlbG93ICovCisvKiBUaGUgaW5pdCBzdHJ1Y3R1cmVzIGZvciAzMk1oeiBhbmQgMjZNSHogYXJlIG1hZGUgaWRlbnRpY2FsIHRvIGFsbG93IHRoZSBzYW1lIGNvZGUgaW4gZnNsX3hjdnIuYyB0byBhcHBseSB0aGUgKi8KKy8qIHNldHRpbmdzIGZvciBhbGwgcmFkaW8gZ2VuZXJhdGlvbnMuIFRoZSBHZW4yIHJhZGlvIGluaXQgdmFsdWUgc3RvcmFnZSBoYWQgYSBkaWZmZXJlbnQgc3RydWN0dXJlIHNvIHRoaXMgcHJlc2VydmVzIGNvbXBhdGliaWxpdHkgKi8KKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorI2RlZmluZSBUU01fVElNSU5HMDBpbml0ICAoMHg2ZDAwNmYwMFUpIC8qIChiYl9sZG9faGZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwMWluaXQgICgweDZkMDA2ZjAwVSkgLyogKGJiX2xkb19hZGNkYWNfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwMmluaXQgICgweDZkMDBmZmZmVSkgLyogKGJiX2xkb19iYmFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwM2luaXQgICgweDZkMDA2ZjAwVSkgLyogKGJiX2xkb19wZF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA0aW5pdCAgKDB4NmQwMDZmMDBVKSAvKiAoYmJfbGRvX2ZkYmtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwNWluaXQgICgweDZkMDA2ZjAwVSkgLyogKGJiX2xkb192Y29sb19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA2aW5pdCAgKDB4NmQwMDZmMDBVKSAvKiAoYmJfbGRvX3Z0cmVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDdpbml0ICAoMHgwNTAwMDUwMFUpIC8qIChiYl9sZG9fZmRia19ibGVlZF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA4aW5pdCAgKDB4MDMwMDAzMDBVKSAvKiAoYmJfbGRvX3Zjb2xvX2JsZWVkX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDlpbml0ICAoMHgwMzAwMDMwMFUpIC8qIChiYl9sZG9fdmNvbG9fZmFzdGNoYXJnZV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzEwaW5pdCAgKDB4NmQwMzZmMDNVKSAvKiAoYmJfeHRhbF9wbGxfcmVmX2Nsa19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzExaW5pdCAgKDB4ZmZmZjZmMDNVKSAvKiAoYmJfeHRhbF9kYWNfcmVmX2Nsa19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzEyaW5pdCAgKDB4NmQwM2ZmZmZVKSAvKiAocnh0eF9hdXhwbGxfdmNvX3JlZl9jbGtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxM2luaXQgICgweDE4MDA0YzAwVSkgLyogKHN5X3Zjb19hdXRvdHVuZV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE0aW5pdCAgKDB4NmQzNTY4NjNVKSAvKiAoc3lfcGRfY3ljbGVfc2xpcF9sZF9mdF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE1aW5pdCAgKDB4NmQwMzZmMDNVKSAvKiAoc3lfdmNvX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMTZpbml0ICAoMHg2ZDIwZmZmZlUpIC8qIChzeV9sb19yeF9idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxN2luaXQgICgweGZmZmY2ZjU4VSkgLyogKHN5X2xvX3R4X2J1Zl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE4aW5pdCAgKDB4NmQwNTZmMDVVKSAvKiAoc3lfZGl2bl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE5aW5pdCAgKDB4MTgwMzRjMDNVKSAvKiAoc3lfcGRfZmlsdGVyX2NoYXJnZV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzIwaW5pdCAgKDB4NmQwMzZmMDNVKSAvKiAoc3lfcGRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyMWluaXQgICgweDZkMDQ2ZjA0VSkgLyogKHN5X2xvX2Rpdm5fZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyMmluaXQgICgweDZkMDRmZmZmVSkgLyogKHN5X2xvX3J4X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjNpbml0ICAoMHhmZmZmNmYwNFUpIC8qIChzeV9sb190eF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzI0aW5pdCAgKDB4MTgwMDRjMDBVKSAvKiAoc3lfZGl2bl9jYWxfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyNWluaXQgICgweDZkMjFmZmZmVSkgLyogKHJ4X2xuYV9taXhlcl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzI2aW5pdCAgKDB4ZmZmZjZlNThVKSAvKiAodHhfcGFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyN2luaXQgICgweDZkMjRmZmZmVSkgLyogKHJ4X2FkY19pX3FfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyOGluaXQgICgweDI1MjRmZmZmVSkgLyogKHJ4X2FkY19yZXNldF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzI5aW5pdCAgKDB4NmQyMmZmZmZVKSAvKiAocnhfYmJhX2lfcV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzMwaW5pdCAgKDB4NmQyNGZmZmZVKSAvKiAocnhfYmJhX3BkZXRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczMWluaXQgICgweDZkMjNmZmZmVSkgLyogKHJ4X2JiYV90emFfZGNvY19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzMyaW5pdCAgKDB4NmQyMWZmZmZVKSAvKiAocnhfdHphX2lfcV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzMzaW5pdCAgKDB4NmQyNGZmZmZVKSAvKiAocnhfdHphX3BkZXRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczNGluaXQgICgweDZkMDc2ZjA3VSkgLyogKHBsbF9kaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczNWluaXQgICgweGZmZmY2ZjVmVSkgLyogKHR4X2RpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM2aW5pdCAgKDB4NmQ2YWZmZmZVKSAvKiAocnhfZGlnX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzdpbml0ICAoMHg2YjZhZmZmZlUpIC8qIChyeF9pbml0KSAqLworI2RlZmluZSBUU01fVElNSU5HMzhpbml0ICAoMHg2ZDBlNmY0MlUpIC8qIChzaWdtYV9kZWx0YV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM5aW5pdCAgKDB4NmQ2YWZmZmZVKSAvKiAocnhfcGh5X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNDBpbml0ICAoMHg2ZDJhZmZmZlUpIC8qIChkY29jX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNDFpbml0ICAoMHgyYjJhZmZmZlUpIC8qIChkY29jX2luaXQpICovCisjZGVmaW5lIFRTTV9USU1JTkc0MmluaXQgICgweGZmZmZmZmZmVSkgLyogKHNhcl9hZGNfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQzaW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlMF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ0aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlMV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ1aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlMl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ2aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlM19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ3aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzBfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ4aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzFfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ5aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzJfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUwaW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzNfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUxaW5pdCAgKDB4NmQwM2ZmZmZVKSAvKiAocnh0eF9hdXhwbGxfYmlhc19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUyaW5pdCAgKDB4MWIwNmZmZmZVKSAvKiAocnh0eF9hdXhwbGxfZmNhbF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUzaW5pdCAgKDB4NmQwM2ZmZmZVKSAvKiAocnh0eF9hdXhwbGxfbGZfcGRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1NGluaXQgICgweDFiMDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX3BkX2xmX2ZpbHRlcl9jaGFyZ2VfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1NWluaXQgICgweDZkMjRmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2FkY19idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1NmluaXQgICgweDZkMjRmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2RpZ19idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1N2luaXQgICgweDFhMDNmZmZmVSkgLyogKHJ4dHhfcmNjYWxfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1OGluaXQgICgweGZmZmY2ZjAzVSkgLyogKHR4X2hwbV9kYWNfZW4pICovCisjZGVmaW5lIEVORF9PRl9TRVFpbml0ICAgICgweDZkNmM2ZjY3VSkgLyogICovCisjZGVmaW5lIFRYX1JYX09OX0RFTGluaXQgICgweDAwMDA4YTg2VSkgLyogICovCisjZGVmaW5lIFRYX1JYX1NZTlRIX2luaXQgICgweDAwMDAyMzE4VSkgLyogICovCisjZWxzZQorI2RlZmluZSBUU01fVElNSU5HMDBpbml0ICAoMHg2OTAwNmYwMFUpIC8qIChiYl9sZG9faGZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwMWluaXQgICgweDY5MDA2ZjAwVSkgLyogKGJiX2xkb19hZGNkYWNfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwMmluaXQgICgweDY5MDBmZmZmVSkgLyogKGJiX2xkb19iYmFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwM2luaXQgICgweDY5MDA2ZjAwVSkgLyogKGJiX2xkb19wZF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA0aW5pdCAgKDB4NjkwMDZmMDBVKSAvKiAoYmJfbGRvX2ZkYmtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcwNWluaXQgICgweDY5MDA2ZjAwVSkgLyogKGJiX2xkb192Y29sb19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA2aW5pdCAgKDB4NjkwMDZmMDBVKSAvKiAoYmJfbGRvX3Z0cmVmX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDdpbml0ICAoMHgwNTAwMDUwMFUpIC8qIChiYl9sZG9fZmRia19ibGVlZF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzA4aW5pdCAgKDB4MDMwMDAzMDBVKSAvKiAoYmJfbGRvX3Zjb2xvX2JsZWVkX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMDlpbml0ICAoMHgwMzAwMDMwMFUpIC8qIChiYl9sZG9fdmNvbG9fZmFzdGNoYXJnZV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzEwaW5pdCAgKDB4NjkwMzZmMDNVKSAvKiAoYmJfeHRhbF9wbGxfcmVmX2Nsa19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzExaW5pdCAgKDB4ZmZmZjZmMDNVKSAvKiAoYmJfeHRhbF9kYWNfcmVmX2Nsa19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzEyaW5pdCAgKDB4NjkwM2ZmZmZVKSAvKiAocnh0eF9hdXhwbGxfdmNvX3JlZl9jbGtfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxM2luaXQgICgweDE4MDA0YzAwVSkgLyogKHN5X3Zjb19hdXRvdHVuZV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE0aW5pdCAgKDB4NjkzMTY4NjNVKSAvKiAoc3lfcGRfY3ljbGVfc2xpcF9sZF9mdF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE1aW5pdCAgKDB4NjkwMzZmMDNVKSAvKiAoc3lfdmNvX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMTZpbml0ICAoMHg2OTFjZmZmZlUpIC8qIChzeV9sb19yeF9idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcxN2luaXQgICgweGZmZmY2ZjU4VSkgLyogKHN5X2xvX3R4X2J1Zl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE4aW5pdCAgKDB4NjkwNTZmMDVVKSAvKiAoc3lfZGl2bl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzE5aW5pdCAgKDB4MTgwMzRjMDNVKSAvKiAoc3lfcGRfZmlsdGVyX2NoYXJnZV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzIwaW5pdCAgKDB4NjkwMzZmMDNVKSAvKiAoc3lfcGRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyMWluaXQgICgweDY5MDQ2ZjA0VSkgLyogKHN5X2xvX2Rpdm5fZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyMmluaXQgICgweDY5MDRmZmZmVSkgLyogKHN5X2xvX3J4X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMjNpbml0ICAoMHhmZmZmNmYwNFUpIC8qIChzeV9sb190eF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzI0aW5pdCAgKDB4MTgwMDRjMDBVKSAvKiAoc3lfZGl2bl9jYWxfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyNWluaXQgICgweDY5MWRmZmZmVSkgLyogKHJ4X2xuYV9taXhlcl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzI2aW5pdCAgKDB4ZmZmZjZlNThVKSAvKiAodHhfcGFfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyN2luaXQgICgweDY5MjBmZmZmVSkgLyogKHJ4X2FkY19pX3FfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkcyOGluaXQgICgweDIxMjBmZmZmVSkgLyogKHJ4X2FkY19yZXNldF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzI5aW5pdCAgKDB4NjkxZWZmZmZVKSAvKiAocnhfYmJhX2lfcV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzMwaW5pdCAgKDB4NjkyMGZmZmZVKSAvKiAocnhfYmJhX3BkZXRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczMWluaXQgICgweDY5MWZmZmZmVSkgLyogKHJ4X2JiYV90emFfZGNvY19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzMyaW5pdCAgKDB4NjkxZGZmZmZVKSAvKiAocnhfdHphX2lfcV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzMzaW5pdCAgKDB4NjkyMGZmZmZVKSAvKiAocnhfdHphX3BkZXRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczNGluaXQgICgweDY5MDc2ZjA3VSkgLyogKHBsbF9kaWdfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkczNWluaXQgICgweGZmZmY2ZjVmVSkgLyogKHR4X2RpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM2aW5pdCAgKDB4Njk2NmZmZmZVKSAvKiAocnhfZGlnX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HMzdpbml0ICAoMHg2NzY2ZmZmZlUpIC8qIChyeF9pbml0KSAqLworI2RlZmluZSBUU01fVElNSU5HMzhpbml0ICAoMHg2OTBlNmY0MlUpIC8qIChzaWdtYV9kZWx0YV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzM5aW5pdCAgKDB4Njk2NmZmZmZVKSAvKiAocnhfcGh5X2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNDBpbml0ICAoMHg2OTI2ZmZmZlUpIC8qIChkY29jX2VuKSAqLworI2RlZmluZSBUU01fVElNSU5HNDFpbml0ICAoMHgyNzI2ZmZmZlUpIC8qIChkY29jX2luaXQpICovCisjZGVmaW5lIFRTTV9USU1JTkc0MmluaXQgICgweGZmZmZmZmZmVSkgLyogKHNhcl9hZGNfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQzaW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlMF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ0aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlMV9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ1aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlMl9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ2aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAodHNtX3NwYXJlM19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ3aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzBfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ4aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzFfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzQ5aW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzJfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUwaW5pdCAgKDB4ZmZmZmZmZmZVKSAvKiAoZ3BpbzNfdHJpZ19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUxaW5pdCAgKDB4NjkwM2ZmZmZVKSAvKiAocnh0eF9hdXhwbGxfYmlhc19lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUyaW5pdCAgKDB4MTcwNmZmZmZVKSAvKiAocnh0eF9hdXhwbGxfZmNhbF9lbikgKi8KKyNkZWZpbmUgVFNNX1RJTUlORzUzaW5pdCAgKDB4NjkwM2ZmZmZVKSAvKiAocnh0eF9hdXhwbGxfbGZfcGRfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1NGluaXQgICgweDE3MDNmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX3BkX2xmX2ZpbHRlcl9jaGFyZ2VfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1NWluaXQgICgweDY5MjBmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2FkY19idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1NmluaXQgICgweDY5MjBmZmZmVSkgLyogKHJ4dHhfYXV4cGxsX2RpZ19idWZfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1N2luaXQgICgweDFhMDNmZmZmVSkgLyogKHJ4dHhfcmNjYWxfZW4pICovCisjZGVmaW5lIFRTTV9USU1JTkc1OGluaXQgICgweGZmZmY2ZjAzVSkgLyogKHR4X2hwbV9kYWNfZW4pICovCisjZGVmaW5lIEVORF9PRl9TRVFpbml0ICAgICgweDY5Njg2ZjY3VSkgLyogICovCisjZGVmaW5lIFRYX1JYX09OX0RFTGluaXQgICgweDAwMDA4YTg2VSkgLyogICovCisjZGVmaW5lIFRYX1JYX1NZTlRIX2luaXQgICgweDAwMDAyMzE4VSkgLyogICovCisjZW5kaWYgLyogUkZfT1NDXzI2TUhaID09IDEgKi8KKworI2RlZmluZSBBVVhfUExMX0RFTEFZICAgICAgICgwKQorLyogVFNNIGJpdGZpZWxkIHNoaWZ0IGFuZCB2YWx1ZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUWF9ESUdfRU5fQVNTRVJUICAgICg5NSkgLyogQXNzZXJ0aW9uIHRpbWUgZm9yIFRYX0RJR19FTiwgdXNlZCBpbiBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCisjZGVmaW5lIFpHQkVfVFhfRElHX0VOX0FTU0VSVCAoVFhfRElHX0VOX0FTU0VSVCAtIDEpIC8qIFppZ2JlZSBUWF9ESUdfRU4gbXVzdCBhc3NlcnQgMSB0aWNrIHNvb25lciwgc2VlIGFkanVzdG1lbnQgYmVsb3cgYmFzZWQgb24gZGF0YSBwYWRkaW5nICovCisvKiBFRElUIFRISVMgTElORSBUTyBDT05UUk9MIFBBX1JBTVAhICovCisjZGVmaW5lIFBBX1JBTVBfVElNRSAgICAgICAgKDIpIC8qIE9ubHkgYWxsb3dhYmxlIHZhbHVlcyBhcmUgWzAsIDEsIDIsIG9yIDRdIGluIEdlbjMgKi8KKyNkZWZpbmUgUEFfUkFNUF9TRUxfMFVTICAgICAoMCkKKyNkZWZpbmUgUEFfUkFNUF9TRUxfMVVTICAgICAoMSkKKyNkZWZpbmUgUEFfUkFNUF9TRUxfMlVTICAgICAoMikKKyNkZWZpbmUgUEFfUkFNUF9TRUxfNFVTICAgICAoMykKKyNpZiAhKChQQV9SQU1QX1RJTUUgPT0gMCkgfHwgKFBBX1JBTVBfVElNRSA9PSAxKSB8fCAoUEFfUkFNUF9USU1FID09IDIpIHx8IChQQV9SQU1QX1RJTUUgPT0gNCkpCisjZXJyb3IgIkludmFsaWQgdmFsdWUgZm9yIFBBX1JBTVBfVElNRSBtYWNybyIKKyNlbmRpZiAvKiBFcnJvciBjaGVjayBvZiBQQSBSQU1QIFRJTUUgKi8KKworI2RlZmluZSBBRERfRk9SXzI2TUhaICAgICAgICAgICAoNCkKKyNkZWZpbmUgRU5EX09GX1RYX1dVX05PUkFNUCAgICAgKDEwMykgLyogTk9URTogTk9SQU1QIGFuZCAydXMgcmFtcCB0aW1lIGJlaGF2aW9ycyBhcmUgaWRlbnRpY2FsIGZvciBUWCBXVSBhbmQgV0QgKi8KKyNkZWZpbmUgRU5EX09GX1RYX1dEX05PUkFNUCAgICAgKDExMSkgLyogTk9URTogTk9SQU1QIGFuZCAydXMgcmFtcCB0aW1lIGJlaGF2aW9ycyBhcmUgaWRlbnRpY2FsIGZvciBUWCBXVSBhbmQgV0QgKi8KKy8qIFJlZGVmaW5lIHRoZSB2YWx1ZXMgb2YgRU5EX09GX1RYX1dVIGFuZCBFTkRfT0ZfVFhfV0QgYmFzZWQgb24gd2hldGhlciBEQVRBIFBBRERJTkcgaXMgZW5hYmxlZCBhbmQgdGhlIHNlbGVjdGlvbiBvZiByYW1wIHRpbWUgKi8KKy8qIFRoZXNlIHR3byBjb25zdGFudHMgYXJlIHRoZW4gdXNlZCBvbiBib3RoIGNvbW1vbiBjb25maWd1cmF0aW9uIGFuZCBtb2RlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZGVmaW5lIHRoZSBUU00gdGltaW5nIHZhbHVlcyAqLworI2lmICgoUEFfUkFNUF9USU1FID09IDApIHx8IChQQV9SQU1QX1RJTUUgPT0gMSkgfHwgKFBBX1JBTVBfVElNRSA9PSAyKSkKKyAgICAjZGVmaW5lIEVORF9PRl9UWF9XVSAgIChFTkRfT0ZfVFhfV1VfTk9SQU1QKQorICAgICNkZWZpbmUgRU5EX09GX1RYX1dEICAgKEVORF9PRl9UWF9XRF9OT1JBTVApCisgICAgI2lmIChQQV9SQU1QX1RJTUUgPT0gMCkKKyAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF8wVVMKKyAgICAgICAgI2RlZmluZSBEQVRBX1BBRERJTkdfRU4gKDApCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBEQVRBX1BBRERJTkdfRU4gKDEpCisgICAgICAgICNpZiAoUEFfUkFNUF9USU1FID09IDEpCisgICAgICAgICAgICAjZGVmaW5lIFBBX1JBTVBfU0VMIFBBX1JBTVBfU0VMXzFVUworICAgICAgICAjZWxzZQorICAgICAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF8yVVMKKyAgICAgICAgI2VuZGlmIC8qIChQQV9SQU1QX1RJTUUgPT0gMSkgKi8KKyAgICAjZW5kaWYgLyogKFBBX1JBTVBfVElNRSA9PSAwKSAqLworI2Vsc2UgLyogKChQQV9SQU1QX1RJTUUgPT0gMCkgfHwgKFBBX1JBTVBfVElNRSA9PSAxKSB8fCAoUEFfUkFNUF9USU1FID09IDIpKSAqLworICAgICNpZiAoUEFfUkFNUF9USU1FID09IDQpCisgICAgICAgICNkZWZpbmUgRU5EX09GX1RYX1dVICAgIChFTkRfT0ZfVFhfV1VfTk9SQU1QICsgMikKKyAgICAgICAgI2RlZmluZSBFTkRfT0ZfVFhfV0QgICAgKEVORF9PRl9UWF9XRF9OT1JBTVAgKyA0KQorICAgICAgICAjZGVmaW5lIFBBX1JBTVBfU0VMIFBBX1JBTVBfU0VMXzRVUworICAgICAgICAjZGVmaW5lIERBVEFfUEFERElOR19FTiAoMSkKKyAgICAjZWxzZSAvKiAoUEFfUkFNUF9USU1FID09IDQpICovCisgICAgICAgICNlcnJvciAiSW52YWxpZCB2YWx1ZSBmb3IgUEFfUkFNUF9USU1FIG1hY3JvIgorICAgICNlbmRpZiAvKiAoUEFfUkFNUF9USU1FID09IDQpICovCisjZW5kaWYvKiAoUEFfUkFNUF9USU1FID09IDQpICovCisKKyNkZWZpbmUgRU5EX09GX1JYX1dVICAgICgxMDQgKyBBVVhfUExMX0RFTEFZKQorCisjaWYgUkZfT1NDXzI2TUhaID09IDEKKyNkZWZpbmUgRU5EX09GX1JYX1dEICAgIChFTkRfT0ZfUlhfV1UgKyAxICsgQUREX0ZPUl8yNk1IWikgLyogTmVlZCB0byBoYW5kbGUgbm9ybWFsIHNpZ25hbHMgZXh0ZW5kaW5nIHdoZW4gMjZNSFogd2FybWRvd24gaXMgZXh0ZW5kZWQgKi8KKyNlbHNlCisjZGVmaW5lIEVORF9PRl9SWF9XRCAgICAoRU5EX09GX1JYX1dVICsgMSkKKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworCisjZGVmaW5lIEVORF9PRl9SWF9XVV8yNk1IWiAgKEVORF9PRl9SWF9XVSArIEFERF9GT1JfMjZNSFopCisjZGVmaW5lIEVORF9PRl9SWF9XRF8yNk1IWiAgKEVORF9PRl9SWF9XVSArIDEgKyBBRERfRk9SXzI2TUhaKQorCisvKiBQQSBCaWFzIFRhYmxlIC0gR2VuMyB2ZXJzaW9uICovCisjZGVmaW5lIFBBX1JBTVBfMCAweDEKKyNkZWZpbmUgUEFfUkFNUF8xIDB4MgorI2RlZmluZSBQQV9SQU1QXzIgMHg0CisjZGVmaW5lIFBBX1JBTVBfMyAweDYKKyNkZWZpbmUgUEFfUkFNUF80IDB4OAorI2RlZmluZSBQQV9SQU1QXzUgMHhjCisjZGVmaW5lIFBBX1JBTVBfNiAweDEwCisjZGVmaW5lIFBBX1JBTVBfNyAweDE0CisjZGVmaW5lIFBBX1JBTVBfOCAweDE4CisjZGVmaW5lIFBBX1JBTVBfOSAweDFjCisjZGVmaW5lIFBBX1JBTVBfMTAgMHgyMgorI2RlZmluZSBQQV9SQU1QXzExIDB4MjgKKyNkZWZpbmUgUEFfUkFNUF8xMiAweDJjCisjZGVmaW5lIFBBX1JBTVBfMTMgMHgzMAorI2RlZmluZSBQQV9SQU1QXzE0IDB4MzYKKyNkZWZpbmUgUEFfUkFNUF8xNSAweDNjCisKKyNlbHNlIC8qIEdlbjIgVFNNIGRlZmluaXRpb25zICovCisvKiBHRU4yIFRTTSBkZWZpbmVzICovCisjZGVmaW5lIEFVWF9QTExfREVMQVkgICAgICAgKDApCisvKiBUU00gYml0ZmllbGQgc2hpZnQgYW5kIHZhbHVlIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRYX0RJR19FTl9BU1NFUlQgICAgKDk1KQorI2RlZmluZSBaR0JFX1RYX0RJR19FTl9BU1NFUlQgKFRYX0RJR19FTl9BU1NFUlQgLSAxKSAvKiBaaWdiZWUgVFhfRElHX0VOIG11c3QgYXNzZXJ0IDEgdGljayBzb29uZXIsIHNlZSBhZGp1c3RtZW50IGJlbG93IGJhc2VkIG9uIGRhdGEgcGFkZGluZyAqLworLyogRURJVCBUSElTIExJTkUgVE8gQ09OVFJPTCBQQV9SQU1QISAqLworI2RlZmluZSBQQV9SQU1QX1RJTUUgICAgICAgICgyKSAvKiBPbmx5IGFsbG93YWJsZSB2YWx1ZXMgYXJlIFswLCAyLCA0LCBvciA4XSBmb3IgUEEgUkFNUCB0aW1lcyBpbiBHZW4yLjAgKi8KKyNkZWZpbmUgUEFfUkFNUF9TRUxfMFVTICAgICAoMCkKKyNkZWZpbmUgUEFfUkFNUF9TRUxfMlVTICAgICAoMSkKKyNkZWZpbmUgUEFfUkFNUF9TRUxfNFVTICAgICAoMikKKyNkZWZpbmUgUEFfUkFNUF9TRUxfOFVTICAgICAoMykKKworI2lmICEoKFBBX1JBTVBfVElNRSA9PSAwKSB8fCAoUEFfUkFNUF9USU1FID09IDIpIHx8IChQQV9SQU1QX1RJTUUgPT0gNCkgfHwgKFBBX1JBTVBfVElNRSA9PSA4KSkKKyNlcnJvciAiSW52YWxpZCB2YWx1ZSBmb3IgUEFfUkFNUF9USU1FIG1hY3JvIgorI2VuZGlmIC8qIEVycm9yIGNoZWNrIG9mIFBBIFJBTVAgVElNRSAqLworI2RlZmluZSBBRERfRk9SXzI2TUhaICAgICAgICAgICAoNCkKKyNkZWZpbmUgRU5EX09GX1RYX1dVX05PUkFNUCAgICAgKDEwMykgLyogTk9URTogTk9SQU1QIGFuZCAydXMgcmFtcCB0aW1lIGJlaGF2aW9ycyBhcmUgaWRlbnRpY2FsIGZvciBUWCBXVSBhbmQgV0QgKi8KKyNkZWZpbmUgRU5EX09GX1RYX1dEX05PUkFNUCAgICAgKDExMSkgLyogTk9URTogTk9SQU1QIGFuZCAydXMgcmFtcCB0aW1lIGJlaGF2aW9ycyBhcmUgaWRlbnRpY2FsIGZvciBUWCBXVSBhbmQgV0QgKi8KKy8qIFJlZGVmaW5lIHRoZSB2YWx1ZXMgb2YgRU5EX09GX1RYX1dVIGFuZCBFTkRfT0ZfVFhfV0QgYmFzZWQgb24gd2hldGhlciBEQVRBIFBBRERJTkcgaXMgZW5hYmxlZCBhbmQgdGhlIHNlbGVjdGlvbiBvZiByYW1wIHRpbWUgKi8KKy8qIFRoZXNlIHR3byBjb25zdGFudHMgYXJlIHRoZW4gdXNlZCBvbiBib3RoIGNvbW1vbiBjb25maWd1cmF0aW9uIGFuZCBtb2RlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZGVmaW5lIHRoZSBUU00gdGltaW5nIHZhbHVlcyAqLworI2lmICgoUEFfUkFNUF9USU1FID09IDApIHx8IChQQV9SQU1QX1RJTUUgPT0gMikpCisgICAgI2RlZmluZSBFTkRfT0ZfVFhfV1UgICAoRU5EX09GX1RYX1dVX05PUkFNUCkKKyAgICAjZGVmaW5lIEVORF9PRl9UWF9XRCAgIChFTkRfT0ZfVFhfV0RfTk9SQU1QKQorICAgICNkZWZpbmUgVFhfU1lOVEhfREVMQVlfQURKICAgICAgICgwKQorICAgICNkZWZpbmUgUERfQ1lDTEVfU0xJUF9UWF9ISV9BREogICgwKQorICAgICNkZWZpbmUgUERfQ1lDTEVfU0xJUF9UWF9MT19BREogICgxKQorICAgICNkZWZpbmUgWkdCRV9UWF9ESUdfRU5fVFhfSElfQURKICgtNSkgLyogT25seSBhcHBsaWVzIHRvIFppZ2JlZSBtb2RlICovCisgICAgI2lmIChQQV9SQU1QX1RJTUUgPT0gMCkKKyAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF8wVVMKKyAgICAgICAgI2RlZmluZSBEQVRBX1BBRERJTkdfRU4gICAgICgwKQorICAgICAgICAjZGVmaW5lIFRYX0RJR19FTl9UWF9ISV9BREogKC0yKQorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgREFUQV9QQURESU5HX0VOICAgICAoMSkKKyAgICAgICAgI2RlZmluZSBUWF9ESUdfRU5fVFhfSElfQURKICgwKQorICAgICAgICAjZGVmaW5lIFBBX1JBTVBfU0VMIFBBX1JBTVBfU0VMXzJVUworICAgICNlbmRpZiAvKiAoUEFfUkFNUF9USU1FID09IDApICovCisjZWxzZSAvKiAoKFBBX1JBTVBfVElNRSA9PSAwKSB8fCAoUEFfUkFNUF9USU1FID09IDIpKSAqLworICAgICNpZiAoUEFfUkFNUF9USU1FID09IDQpCisgICAgICAgICNkZWZpbmUgRU5EX09GX1RYX1dVICAgIChFTkRfT0ZfVFhfV1VfTk9SQU1QICsgMikKKyAgICAgICAgI2RlZmluZSBFTkRfT0ZfVFhfV0QgICAgKEVORF9PRl9UWF9XRF9OT1JBTVAgKyA0KQorICAgICAgICAjZGVmaW5lIFRYX1NZTlRIX0RFTEFZX0FESiAgICAgICAoMikKKyAgICAgICAgI2RlZmluZSBQRF9DWUNMRV9TTElQX1RYX0hJX0FESiAgKDIpCisgICAgICAgICNkZWZpbmUgUERfQ1lDTEVfU0xJUF9UWF9MT19BREogICgxKQorICAgICAgICAjZGVmaW5lIFRYX0RJR19FTl9UWF9ISV9BREogICAgICAoMCkKKyAgICAgICAgI2RlZmluZSBaR0JFX1RYX0RJR19FTl9UWF9ISV9BREogKC0zKSAvKiBPbmx5IGFwcGxpZXMgdG8gWmlnYmVlIG1vZGUgKi8KKyAgICAgICAgI2RlZmluZSBQQV9SQU1QX1NFTCBQQV9SQU1QX1NFTF80VVMKKyAgICAgICAgI2RlZmluZSBEQVRBX1BBRERJTkdfRU4gKDEpCisgICAgI2Vsc2UgLyogKFBBX1JBTVBfVElNRT09NCkgKi8KKyAgICAgICAgI2lmICgoUEFfUkFNUF9USU1FID09IDgpICYmICghUkFESU9fSVNfR0VOXzNQMCkpCisgICAgICAgICAgICAjZGVmaW5lIEVORF9PRl9UWF9XVSAgICAoRU5EX09GX1RYX1dVX05PUkFNUCArIDYpCisgICAgICAgICAgICAjZGVmaW5lIEVORF9PRl9UWF9XRCAgICAoRU5EX09GX1RYX1dEX05PUkFNUCArIDEyKQorICAgICAgICAgICAgI2RlZmluZSBUWF9TWU5USF9ERUxBWV9BREogICAgICAgKDYpCisgICAgICAgICAgICAjZGVmaW5lIFBEX0NZQ0xFX1NMSVBfVFhfSElfQURKICAoNikKKyAgICAgICAgICAgICNkZWZpbmUgUERfQ1lDTEVfU0xJUF9UWF9MT19BREogICgxKQorICAgICAgICAgICAgI2RlZmluZSBUWF9ESUdfRU5fVFhfSElfQURKICAgICAgKDQpCisgICAgICAgICAgICAjZGVmaW5lIFpHQkVfVFhfRElHX0VOX1RYX0hJX0FESiAoMSkgLyogT25seSBhcHBsaWVzIHRvIFppZ2JlZSBtb2RlICovCisgICAgICAgICAgICAjZGVmaW5lIFBBX1JBTVBfU0VMIFBBX1JBTVBfU0VMXzhVUworICAgICAgICAgICAgI2RlZmluZSBEQVRBX1BBRERJTkdfRU4gKDEpCisgICAgICAgICNlbHNlIC8qIChQQV9SQU1QX1RJTUUgPT0gOCkgKi8KKyAgICAgICAgICAgICNlcnJvciAiSW52YWxpZCB2YWx1ZSBmb3IgUEFfUkFNUF9USU1FIG1hY3JvIgorICAgICAgICAjZW5kaWYgLyogKFBBX1JBTVBfVElNRSA9PSA4KSAqLworICAgICNlbmRpZi8qIChQQV9SQU1QX1RJTUUgPT0gNCkgKi8KKyNlbmRpZiAvKiAoKFBBX1JBTVBfVElNRSA9PSAwKSB8fCAoUEFfUkFNUF9USU1FID09IDIpKSAqLworCisjZGVmaW5lIFRYX0RJR19FTl9BU1NFUlRfTVNLNTAwICAgIChFTkRfT0ZfVFhfV1UgLSAzKQorCisjZGVmaW5lIEVORF9PRl9SWF9XVSAgICAoMTA0ICsgQVVYX1BMTF9ERUxBWSkKKyNpZiBSRl9PU0NfMjZNSFogPT0gMQorI2RlZmluZSBFTkRfT0ZfUlhfV0QgICAgKEVORF9PRl9SWF9XVSArIDEgKyBBRERfRk9SXzI2TUhaKSAgLyogTmVlZCB0byBoYW5kbGUgbm9ybWFsIHNpZ25hbHMgZXh0ZW5kaW5nIHdoZW4gMjZNSFogd2FybWRvd24gaXMgZXh0ZW5kZWQgKi8KKyNlbHNlCisjZGVmaW5lIEVORF9PRl9SWF9XRCAgICAoRU5EX09GX1JYX1dVICsgMSkKKyNlbmRpZiAvKiBSRl9PU0NfMjZNSFogPT0gMSAqLworI2RlZmluZSBFTkRfT0ZfUlhfV1VfMjZNSFogIChFTkRfT0ZfUlhfV1UgKyBBRERfRk9SXzI2TUhaKQorI2RlZmluZSBFTkRfT0ZfUlhfV0RfMjZNSFogIChFTkRfT0ZfUlhfV1UgKyAxICsgQUREX0ZPUl8yNk1IWikKKworLyogUEEgQmlhcyBUYWJsZSAqLworI2RlZmluZSBQQV9SQU1QXzAgMHgxCisjZGVmaW5lIFBBX1JBTVBfMSAweDIKKyNkZWZpbmUgUEFfUkFNUF8yIDB4NAorI2RlZmluZSBQQV9SQU1QXzMgMHg4CisjZGVmaW5lIFBBX1JBTVBfNCAweGUKKyNkZWZpbmUgUEFfUkFNUF81IDB4MTYKKyNkZWZpbmUgUEFfUkFNUF82IDB4MjIKKyNkZWZpbmUgUEFfUkFNUF83IDB4MmUKKworLyogQkxFIExMIHRpbWluZyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUWF9PTl9ERUxBWSAgICAgKDB4ODUpIC8qIEFkanVzdGVkIFRYX09OX0RFTEFZIHRvIG1ha2UgdHVybmFyb3VuZCB0aW1lIDE1MHVzZWMgKi8KKyNkZWZpbmUgUlhfT05fREVMQVkgICAgICgyOSArIEVORF9PRl9SWF9XVSkKKyNkZWZpbmUgUlhfT05fREVMQVlfMjZNSFogICAgICgyOSArIEVORF9PRl9SWF9XVV8yNk1IWikKKyNkZWZpbmUgVFhfUlhfT05fREVMQVlfVkFMICAoVFhfT05fREVMQVkgPDwgOCB8IFJYX09OX0RFTEFZKQorI2RlZmluZSBUWF9SWF9PTl9ERUxBWV9WQUxfMjZNSFogIChUWF9PTl9ERUxBWSA8PCA4IHwgUlhfT05fREVMQVlfMjZNSFopCisjZGVmaW5lIFRYX1NZTlRIX0RFTEFZICAoVFhfT05fREVMQVkgLSBFTkRfT0ZfVFhfV1UgLSBUWF9TWU5USF9ERUxBWV9BREopIC8qIEFkanVzdG1lbnQgdG8gVFhfU1lOVEhfREVMQVkgZHVlIHRvIERBVEFfUEFERElORyAqLworI2RlZmluZSBSWF9TWU5USF9ERUxBWSAgKDB4MTgpCisjZGVmaW5lIFRYX1JYX1NZTlRIX0RFTEFZX1ZBTCAoVFhfU1lOVEhfREVMQVkgPDwgOCB8IFJYX1NZTlRIX0RFTEFZKQorCisvKiBQSFkgcmVmZXJlbmNlIHdhdmVmb3JtIGFzc2VtYmx5ICovCisjZGVmaW5lIFJXMFBTKGxvYywgdmFsKSAgICAgICgoKHZhbCkgJiAweDFGKSA8PCAoKGxvYykgKiA1KSkgLyogUmVmIFdvcmQgMCAtIGxvYyBpcyB0aGUgcGhhc2UgaW5mbyBzeW1ib2wgbnVtYmVyLCB2YWwgaXMgdGhlIHZhbHVlIG9mIHRoZSBwaGFzZSBpbmZvICovCisjZGVmaW5lIFJXMVBTKGxvYywgdmFsKSAgICAgICgoKHZhbCkgJiAweDFGKSA8PCAoKChsb2MpICogNSkgLSAzMikpIC8qIFJlZiBXb3JkIDEgLSBsb2MgaXMgdGhlIHBoYXNlIGluZm8gc3ltYm9sIG51bWJlciwgdmFsIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcGhhc2UgaW5mbyAqLworI2RlZmluZSBSVzJQUyhsb2MsIHZhbCkgICAgICAoKCh2YWwpICYgMHgxRikgPDwgKCgobG9jKSAqIDUpIC0gNjQpKSAvKiBSZWYgV29yZCAyIC0gbG9jIGlzIHRoZSBwaGFzZSBpbmZvIHN5bWJvbCBudW1iZXIsIHZhbCBpcyB0aGUgdmFsdWUgb2YgdGhlIHBoYXNlIGluZm8gKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qISBAYnJpZWYgIEVycm9yIGNvZGVzIGZvciB0aGUgWENWUiBkcml2ZXIuICovCit0eXBlZGVmIGVudW0gX3hjdnJTdGF0dXMKK3sKKyAgICBnWGN2clN1Y2Nlc3NfYyA9IDAsCisgICAgZ1hjdnJJbnZhbGlkUGFyYW1ldGVyc19jLAorICAgIGdYY3ZyVW5zdXBwb3J0ZWRPcGVyYXRpb25fYywKKyAgICBnWGN2clRyaW1GYWlsdXJlX2MKK30geGN2clN0YXR1c190OworCisvKiEgQGJyaWVmICBIZWFsdGggc3RhdHVzIHJldHVybmVkIGZyb20gUEhZIHVwb24gc3RhdHVzIGNoZWNrIGZ1bmN0aW9uIHJldHVybi4gKi8KK3R5cGVkZWYgZW51bSBfaGVhbHRoU3RhdHVzCit7CisgICAgTk9fRVJST1JTID0gMCwKKyAgICBQTExfQ1RVTkVfRkFJTCA9IDEsCisgICAgUExMX0NZQ0xFX1NMSVBfRkFJTCA9IDIsCisgICAgUExMX0ZSRVFfVEFSR19GQUlMID0gNCwKKyAgICBQTExfVFNNX0FCT1JUX0ZBSUwgPSA4LAorfSBoZWFsdGhTdGF0dXNfdDsKKworLyohIEBicmllZiAgSGVhbHRoIHN0YXR1cyByZXR1cm5lZCBmcm9tIFBIWSB1cG9uIHN0YXR1cyBjaGVjayBmdW5jdGlvbiByZXR1cm4uICovCit0eXBlZGVmIGVudW0gX2V4dF9jbG9ja19jb25maWcKK3sKKyAgICBFWFRfQ0xLXzMyX01IWiA9IDAsCisgICAgRVhUX0NMS18yNl9NSFogPSAxLAorfSBleHRfY2xvY2tfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgIFJhZGlvIG9wZXJhdGluZyBtb2RlIHNldHRpbmcgdHlwZXMuICovCit0eXBlZGVmIGVudW0gX3JhZGlvX21vZGUKK3sKKyAgICBCTEVfTU9ERSA9IDAsCisgICAgWklHQkVFX01PREUgPSAxLAorICAgIEFOVF9NT0RFID0gMiwKKworICAgIC8qIEJUPTAuNSwgaD0qKiAqLworICAgIEdGU0tfQlRfMHA1X2hfMHA1ICA9IDMsIC8qIDwgQlQ9MC41LCBoPTAuNSBbQkxFIGF0IDFNQlBTIGRhdGEgcmF0ZTsgQ1M0IGF0IDI1MEtCUFMgZGF0YSByYXRlXSAqLworICAgIEdGU0tfQlRfMHA1X2hfMHAzMiA9IDQsIC8qIDwgQlQ9MC41LCBoPTAuMzIqLworICAgIEdGU0tfQlRfMHA1X2hfMHA3ICA9IDUsIC8qIDwgQlQ9MC41LCBoPTAuNyBbIENTMSBhdCA1MDBLQlBTIGRhdGEgcmF0ZV0gKi8KKyAgICBHRlNLX0JUXzBwNV9oXzFwMCAgPSA2LCAvKiA8IEJUPTAuNSwgaD0xLjAgWyBDUzQgYXQgMjUwS0JQUyBkYXRhIHJhdGVdICovCisKKyAgICAvKiBCVD0qKiBoPTAuNSAqLworICAgIEdGU0tfQlRfMHAzX2hfMHA1ID0gNywgLyogPCBCVD0wLjMsIGg9MC41IFsgQ1MyIGF0IDFNQlBTIGRhdGEgcmF0ZV0gKi8KKyAgICBHRlNLX0JUXzBwN19oXzBwNSA9IDgsIC8qIDwgQlQ9MC43LCBoPTAuNSAqLworCisgICAgTVNLID0gOSwKKyAgICBOVU1fUkFESU9fTU9ERVMgPSAxMCwKK30gcmFkaW9fbW9kZV90OworCisvKiEgQGJyaWVmICBMaW5rIGxheWVyIHR5cGVzLiAqLwordHlwZWRlZiBlbnVtIF9saW5rX2xheWVyCit7CisgICAgQkxFX0xMID0gMCwgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBSQURJTzFfSVJRX1NFTCAqLworICAgIFpJR0JFRV9MTCA9IDEsIC8qIE11c3QgbWF0Y2ggYml0IGFzc2lnbm1lbnQgaW4gUkFESU8xX0lSUV9TRUwgKi8KKyAgICBBTlRfTEwgPSAyLCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIFJBRElPMV9JUlFfU0VMICovCisgICAgR0VORlNLX0xMID0gMywgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBSQURJTzFfSVJRX1NFTCAqLworICAgIFVOQVNTSUdORURfTEwgPSA0LCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIFJBRElPMV9JUlFfU0VMICovCit9IGxpbmtfbGF5ZXJfdDsKKworLyohIEBicmllZiAgRGF0YSByYXRlIHNlbGVjdGlvbnMuICovCit0eXBlZGVmIGVudW0gX2RhdGFfcmF0ZQoreworICAgIERSXzFNQlBTID0gMCwgLyogTXVzdCBtYXRjaCBiaXQgYXNzaWdubWVudCBpbiBCSVRSQVRFIGZpZWxkICovCisgICAgRFJfNTAwS0JQUyA9IDEsIC8qIE11c3QgbWF0Y2ggYml0IGFzc2lnbm1lbnQgaW4gQklUUkFURSBmaWVsZCAqLworICAgIERSXzI1MEtCUFMgPSAyLCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIEJJVFJBVEUgZmllbGQgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgRFJfMk1CUFMgPSAzLCAvKiBNdXN0IG1hdGNoIGJpdCBhc3NpZ25tZW50IGluIEJJVFJBVEUgZmllbGQgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisgICAgRFJfVU5BU1NJR05FRCA9IDQsIC8qIE11c3QgbWF0Y2ggYml0IGFzc2lnbm1lbnQgaW4gQklUUkFURSBmaWVsZCAqLworfSBkYXRhX3JhdGVfdDsKKworLyohIEBicmllZiAgQ29udHJvbCBzZXR0aW5ncyBmb3IgRmFzdCBBbnRlbm5hIERpdmVyc2l0eSAqLwordHlwZWRlZiBlbnVtICBfRkFEX0xQUFNfQ1RSTAoreworICAgIE5PTkUgPSAwLAorICAgIEZBRF9FTkFCTEVEID0gMSwKKyAgICBMUFBTX0VOQUJMRUQgPSAyCit9IEZBRF9MUFBTX0NUUkxfVDsKKworLyohIEBicmllZiAgWENWUiBYQ1ZSIFBhbmljIGNvZGVzIGZvciBpbmRpY2F0aW5nIHBhbmljIHJlYXNvbi4gKi8KK3R5cGVkZWYgZW51bSBfWENWUl9QQU5JQ19JRAoreworICAgIFdST05HX1JBRElPX0lEX0RFVEVDVEVEID0gMSwKKyAgICBDQUxJQlJBVElPTl9JTlZBTElEID0gMiwKK30gWENWUl9QQU5JQ19JRF9UOworCisvKiEgQGJyaWVmICBJbml0aWFsaXphdGlvbiBvciBtb2RlIGNoYW5nZSBzZWxlY3Rpb24gZm9yIGNvbmZpZyByb3V0aW5lLiAqLwordHlwZWRlZiBlbnVtIF9YQ1ZSX0lOSVRfTU9ERV9DSEcKK3sKKyAgICBYQ1ZSX01PREVfQ0hBTkdFID0gMCwKKyAgICBYQ1ZSX0ZJUlNUX0lOSVQgPSAxLAorfSBYQ1ZSX0lOSVRfTU9ERV9DSEdfVDsKKwordHlwZWRlZiBlbnVtIF9YQ1ZSX0NPRVhfUFJJT1JJVFkKK3sKKyAgICBYQ1ZSX0NPRVhfTE9XX1BSSU8gPSAwLAorICAgIFhDVlJfQ09FWF9ISUdIX1BSSU8gPSAxCit9ICAgWENWUl9DT0VYX1BSSU9SSVRZX1Q7CisKKy8qISBAYnJpZWYgQ3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSByYWRpby4gKi8KK3R5cGVkZWYgc3RydWN0IHhjdnJfY3VyckNvbmZpZ190YWcKK3sKKyAgICByYWRpb19tb2RlX3QgcmFkaW9fbW9kZTsKKyAgICBkYXRhX3JhdGVfdCBkYXRhX3JhdGU7Cit9IHhjdnJfY3VyckNvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBYQ1ZSIFJYX0RJRyBjaGFubmVsIGZpbHRlciBjb2VmZmljaWVudCBzdG9yYWdlCisgKiBTdG9yYWdlIG9mIHRoZSBjb2VmZmljaWVudHMgdmFyaWVzIGZyb20gNiBiaXRzIHRvIDEwIGJpdHMgc28gYWxsIHVzZSBpbnQxNl90IGZvciBzdG9yYWdlLgorICovCit0eXBlZGVmIHN0cnVjdCBfeGN2cl9yeF9jaGZfY29lZmZzCit7CisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfMDsgLyogPCA2IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfMTsgLyogPCA2IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfMjsgLyogPCA3IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfMzsgLyogPCA3IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfNDsgLyogPCA3IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfNTsgLyogPCA3IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfNjsgLyogPCA4IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfNzsgLyogPCA4IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfODsgLyogPCA5IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfOTsgLyogPCA5IGJpdCB0d28ncyBjb21wbGVtZW50IHN0b3JlZCBpbiBhIHVpbnQxNl90ICovCisgICAgdWludDE2X3QgcnhfY2hmX2NvZWZfMTA7IC8qIDwgMTAgYml0IHR3bydzIGNvbXBsZW1lbnQgc3RvcmVkIGluIGEgdWludDE2X3QgKi8KKyAgICB1aW50MTZfdCByeF9jaGZfY29lZl8xMTsgLyogPCAxMCBiaXQgdHdvJ3MgY29tcGxlbWVudCBzdG9yZWQgaW4gYSB1aW50MTZfdCAqLworfSB4Y3ZyX3J4X2NoZl9jb2VmZnNfdDsKKworLyohCisgKiBAYnJpZWYgWENWUiBtYXNrZWQgaW5pdCB0eXBlIGZvciAzMiBiaXQgcmVnaXN0ZXJzCisgKiBJbml0aWFsaXphdGlvbiB1c2VzIHRoZSBtYXNrIHRvIGNsZWFyIHNlbGVjdGVkIGZpZWxkcyBvZiB0aGUgcmVnaXN0ZXIgYW5kIHRoZW4gT1IncyBpbiB0aGUgaW5pdCB2YWx1ZS4gQWxsIGluaXQgdmFsdWVzIG11c3QgYmUgaW4gdGhlaXIgcHJvcGVyIGZpZWxkIHBvc2l0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfeGN2cl9tYXNrZWRfaW5pdF8zMgoreworICAgIHVpbnQzMl90IG1hc2s7CisgICAgdWludDMyX3QgaW5pdDsKK30geGN2cl9tYXNrZWRfaW5pdF8zMl90OworCisvKiEKKyAqIEBicmllZiBYQ1ZSIGNvbW1vbiBjb25maWd1cmUgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IF94Y3ZyX2NvbW1vbl9jb25maWcKK3sKKyAgICAvKiBYQ1ZSX0FOQSBjb25maWdzICovCisgICAgeGN2cl9tYXNrZWRfaW5pdF8zMl90IGFuYV9zeV9jdHJsMTsKKworICAgIC8qIFhDVlJfUExMX0RJRyBjb25maWdzICovCisgICAgdWludDMyX3QgcGxsX2hwbV9idW1wOworICAgIHVpbnQzMl90IHBsbF9tb2RfY3RybDsKKyAgICB1aW50MzJfdCBwbGxfY2hhbl9tYXA7CisgICAgdWludDMyX3QgcGxsX2xvY2tfZGV0ZWN0OworICAgIHVpbnQzMl90IHBsbF9ocG1fY3RybDsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgIHVpbnQzMl90IHBsbF9ocG1jYWxfY3RybDsKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgIHVpbnQzMl90IHBsbF9ocG1fc2RtX3JlczsKKyAgICB1aW50MzJfdCBwbGxfbHBtX2N0cmw7CisgICAgdWludDMyX3QgcGxsX2xwbV9zZG1fY3RybDE7CisgICAgdWludDMyX3QgcGxsX2RlbGF5X21hdGNoOworICAgIHVpbnQzMl90IHBsbF9jdHVuZV9jdHJsOworCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX2luaXQ7IC8qIE5PVEU6IENvbW1vbiBpbml0LCBtb2RlIGluaXQsIGFuZCBkYXRhcmF0ZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgUlhfRElHX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGRjb2NfY3RybF8wX2luaXRfMjZtaHo7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggbW9kZSBzcGVjaWZpYyBpbml0IGZvciBEQ09DX0NUUkxfMCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgZGNvY19jdHJsXzBfaW5pdF8zMm1oejsgLyogTk9URTogVGhpcyB3aWxsIGJlIE9SJ2Qgd2l0aCBtb2RlIHNwZWNpZmljIGluaXQgZm9yIERDT0NfQ1RSTF8wIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMV9pbml0OworICAgIHVpbnQzMl90IGRjb2NfY2FsX2dhaW5faW5pdDsKKyAgICB1aW50MzJfdCBkY19yZXNpZF9jdHJsX2luaXQ7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggZGF0YXJhdGUgc3BlY2lmaWMgaW5pdCBmb3IgRENPQ19SRVNJRF9DVFJMIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBkY29jX2NhbF9yY3BfaW5pdDsKKyAgICB1aW50MzJfdCBsbmFfZ2Fpbl92YWxfM18wOworICAgIHVpbnQzMl90IGxuYV9nYWluX3ZhbF83XzQ7CisgICAgdWludDMyX3QgbG5hX2dhaW5fdmFsXzg7CisgICAgdWludDMyX3QgYmJhX3Jlc190dW5lX3ZhbF83XzA7CisgICAgdWludDMyX3QgYmJhX3Jlc190dW5lX3ZhbF8xMF84OworICAgIHVpbnQzMl90IGxuYV9nYWluX2xpbl92YWxfMl8wX2luaXQ7CisgICAgdWludDMyX3QgbG5hX2dhaW5fbGluX3ZhbF81XzNfaW5pdDsKKyAgICB1aW50MzJfdCBsbmFfZ2Fpbl9saW5fdmFsXzhfNl9pbml0OworICAgIHVpbnQzMl90IGxuYV9nYWluX2xpbl92YWxfOV9pbml0OworICAgIHVpbnQzMl90IGJiYV9yZXNfdHVuZV9saW5fdmFsXzNfMF9pbml0OworICAgIHVpbnQzMl90IGJiYV9yZXNfdHVuZV9saW5fdmFsXzdfNF9pbml0OworICAgIHVpbnQzMl90IGJiYV9yZXNfdHVuZV9saW5fdmFsXzEwXzhfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX2JiYV9zdGVwX2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wMF9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDFfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzAyX2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wM19pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDRfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzA1X2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wNl9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMDdfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX3R6YV9zdGVwXzA4X2luaXQ7CisgICAgdWludDMyX3QgZGNvY190emFfc3RlcF8wOV9pbml0OworICAgIHVpbnQzMl90IGRjb2NfdHphX3N0ZXBfMTBfaW5pdDsKKyNpZiAoUkFESU9fSVNfR0VOXzNQMCB8fCBSQURJT19JU19HRU5fMlAxKQorICAgIHVpbnQzMl90IGRjb2NfY2FsX2ZhaWxfdGhfaW5pdDsKKyAgICB1aW50MzJfdCBkY29jX2NhbF9wYXNzX3RoX2luaXQ7CisjZW5kaWYgLyogKFJBRElPX0lTX0dFTl8zUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkgKi8KKyAgICB1aW50MzJfdCBhZ2NfY3RybF8wX2luaXQ7IC8qIE5PVEU6IENvbW1vbiBpbml0IGFuZCBtb2RlIGluaXQgd2lsbCBiZSBPUidkIHRvZ2V0aGVyIGZvciBBR0NfQ1RSTF8wIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBhZ2NfY3RybF8xX2luaXRfMjZtaHo7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggZGF0YXJhdGUgc3BlY2lmaWMgaW5pdCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgYWdjX2N0cmxfMV9pbml0XzMybWh6OyAvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGRhdGFyYXRlIHNwZWNpZmljIGluaXQgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGFnY19jdHJsXzNfaW5pdDsKKyAgICAvKiBPdGhlciBhZ2MgY29uZmlnIGluaXRzIG1vdmVkIHRvIG1vZGVYZGF0YXJhdGUgY29uZmlnIHRhYmxlICovCisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzAzXzAwX2luaXQ7CisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzA3XzA0X2luaXQ7CisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzExXzA4X2luaXQ7CisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzE1XzEyX2luaXQ7CisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzE5XzE2X2luaXQ7CisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzIzXzIwX2luaXQ7CisgICAgdWludDMyX3QgYWdjX2dhaW5fdGJsXzI2XzI0X2luaXQ7CisgICAgdWludDMyX3QgcnNzaV9jdHJsXzBfaW5pdDsKKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgdWludDMyX3QgcnNzaV9jdHJsXzFfaW5pdDsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisgICAgdWludDMyX3QgY2NhX2VkX2xxaV9jdHJsXzBfaW5pdDsKKyAgICB1aW50MzJfdCBjY2FfZWRfbHFpX2N0cmxfMV9pbml0OworCisgICAgLyogWENWUl9UU00gY29uZmlncyAqLworICAgIHVpbnQzMl90IHRzbV9jdHJsOworICAgIHVpbnQzMl90IHRzbV9vdnJkMl9pbml0OworICAgIHVpbnQzMl90IGVuZF9vZl9zZXFfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCBlbmRfb2Zfc2VxX2luaXRfMzJtaHo7CisjaWYgIVJBRElPX0lTX0dFTl8yUDEKKyAgICB1aW50MzJfdCBscHBzX2N0cmxfaW5pdDsKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworICAgIHVpbnQzMl90IHRzbV9mYXN0X2N0cmwyX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX2Zhc3RfY3RybDJfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCByZWN5Y2xlX2NvdW50X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgcmVjeWNsZV9jb3VudF9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHBhX3JhbXBfdGJsXzBfaW5pdDsKKyAgICB1aW50MzJfdCBwYV9yYW1wX3RibF8xX2luaXQ7CisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIHVpbnQzMl90IHBhX3JhbXBfdGJsXzJfaW5pdDsKKyAgICB1aW50MzJfdCBwYV9yYW1wX3RibF8zX2luaXQ7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDBfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzAxX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18wMl9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDNfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzA0X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18wNV9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDZfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzA3X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18wOF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMDlfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzEwX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xMV9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTJfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzEzX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xNF9pbml0XzI2bWh6OyAvKiB0c21fdGltaW5nXzE0IGhhcyBtb2RlIHNwZWNpZmljIExTYnl0ZSAoYm90aCBMUyBieXRlcykgKi8KKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzE0X2luaXRfMzJtaHo7IC8qIHRzbV90aW1pbmdfMTQgaGFzIG1vZGUgc3BlY2lmaWMgTFNieXRlIChib3RoIExTIGJ5dGVzKSAqLworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTVfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzE2X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xNl9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMTdfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzE4X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18xOV9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjBfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzIxX2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yMl9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjNfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI0X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yNV9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjVfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI2X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yN19pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjdfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI4X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18yOF9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMjlfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzI5X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zMF9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzBfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzMxX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zMV9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzJfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzMyX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zM19pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzNfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM0X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zNV9pbml0OyAvKiB0c21fdGltaW5nXzM1IGhhcyBhIG1vZGUgc3BlY2lmaWMgTFNieXRlKi8KKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM2X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zNl9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzdfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM3X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ18zOF9pbml0OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfMzlfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM5X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ180MF9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNDBfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzQxX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ180MV9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTFfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzUyX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181Ml9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTNfaW5pdDsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzU0X2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181NF9pbml0XzMybWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTVfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzU1X2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181Nl9pbml0XzI2bWh6OworICAgIHVpbnQzMl90IHRzbV90aW1pbmdfNTZfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzU3X2luaXQ7CisgICAgdWludDMyX3QgdHNtX3RpbWluZ181OF9pbml0OworCisgICAgLyogWENWUl9UWF9ESUcgY29uZmlncyAqLworICAgIHVpbnQzMl90IHR4X2N0cmw7CisgICAgdWludDMyX3QgdHhfZGF0YV9wYWRkaW5nOworICAgICB1aW50MzJfdCB0eF9kZnRfcGF0dGVybjsKKyNpZiAhUkFESU9fSVNfR0VOXzJQMQorICAgIHVpbnQzMl90IHJmX2RmdF9iaXN0XzE7CisgICAgdWludDMyX3QgcmZfZGZ0X2Jpc3RfMjsKKyNlbmRpZiAvKiAhUkFESU9fSVNfR0VOXzJQMSAqLworfSB4Y3ZyX2NvbW1vbl9jb25maWdfdDsKKworLyohIEBicmllZiBYQ1ZSIG1vZGUgc3BlY2lmaWMgY29uZmlndXJlIHN0cnVjdHVyZSAodmFyaWVzIGJ5IHJhZGlvIG1vZGUpICovCit0eXBlZGVmIHN0cnVjdCBfeGN2cl9tb2RlX2NvbmZpZworeworICAgIHJhZGlvX21vZGVfdCByYWRpb19tb2RlOworICAgIHVpbnQzMl90IHNjZ2M1X2Nsb2NrX2VuYV9iaXRzOworCisgICAgLyogWENWUl9NSVNDIGNvbmZpZ3MgKi8KKyAgICB4Y3ZyX21hc2tlZF9pbml0XzMyX3QgeGN2cl9jdHJsOyAgCisKKyAgICAvKiBYQ1ZSX1BIWSBjb25maWdzICovCisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIHVpbnQzMl90IHBoeV9mc2tfcGRfY2ZnMDsKKyAgICB1aW50MzJfdCBwaHlfZnNrX3BkX2NmZzE7CisgICAgdWludDMyX3QgcGh5X2Zza19jZmc7CisgICAgdWludDMyX3QgcGh5X2Zza19taXNjOworICAgIHVpbnQzMl90IHBoeV9mYWRfY3RybDsKKyNlbHNlCisgICAgdWludDMyX3QgcGh5X3ByZV9yZWYwX2luaXQ7CisgICAgdWludDMyX3QgcGh5X3ByZV9yZWYxX2luaXQ7CisgICAgdWludDMyX3QgcGh5X3ByZV9yZWYyX2luaXQ7CisgICAgdWludDMyX3QgcGh5X2NmZzFfaW5pdDsKKyAgICB1aW50MzJfdCBwaHlfZWxfY2ZnX2luaXQ7IC8qIFNob3VsZCBsZWF2ZSBFTF9XSU5fU0laRSBhbmQgRUxfSU5URVJWQUwgdG8gdGhlIGRhdGFfcmF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uICovCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX2luaXRfMjZtaHo7IC8qIE5PVEU6IENvbW1vbiBpbml0LCBtb2RlIGluaXQsIGFuZCBkYXRhcmF0ZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgUlhfRElHX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX2luaXRfMzJtaHo7IC8qIE5PVEU6IENvbW1vbiBpbml0LCBtb2RlIGluaXQsIGFuZCBkYXRhcmF0ZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgUlhfRElHX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGFnY19jdHJsXzBfaW5pdDsgLyogTk9URTogIENvbW1vbiBpbml0IGFuZCBtb2RlIGluaXQgd2lsbCBiZSBPUidkIHRvZ2V0aGVyIGZvciBBR0NfQ1RSTF8wIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8gCisKKyAgICAvKiBYQ1ZSX1RTTSBjb25maWdzICovCisjaWYgKFJBRElPX0lTX0dFTl8yUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkKKyAgICB1aW50MzJfdCB0c21fdGltaW5nXzM1X2luaXQ7IC8qIE9ubHkgdGhlIExTYnl0ZSBpcyBtb2RlIHNwZWNpZmljICovCisjZW5kaWYgLyogKFJBRElPX0lTX0dFTl8yUDAgfHwgUkFESU9fSVNfR0VOXzJQMSkgKi8KKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCB0eF9nZnNrX2N0cmw7CisgICAgdWludDMyX3QgdHhfZ2Zza19jb2VmZjFfMjZtaHo7CisgICAgdWludDMyX3QgdHhfZ2Zza19jb2VmZjJfMjZtaHo7CisgICAgdWludDMyX3QgdHhfZ2Zza19jb2VmZjFfMzJtaHo7CisgICAgdWludDMyX3QgdHhfZ2Zza19jb2VmZjJfMzJtaHo7Cit9IHhjdnJfbW9kZV9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgWENWUiBtb2RlWGRhdGFyYXRlIHNwZWNpZmljIGNvbmZpZ3VyZSBzdHJ1Y3R1cmUgKHZhcmllcyBieSByYWRpbyBtb2RlIEFORCBkYXRhIHJhdGUpCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHN0b3JlIGFsbCBvZiB0aGUgWENWUiBzZXR0aW5ncyB3aGljaCBhcmUgZGVwZW5kZW50IHVwb24gYm90aCByYWRpbyBtb2RlIGFuZCBkYXRhIHJhdGUuIEl0IGlzIHVzZWQgYXMgYW4gb3ZlcmxheQorICogb24gdG9wIG9mIHRoZSB4Y3ZyX21vZGVfY29uZmlnX3Qgc3RydWN0dXJlIHRvIHN1cHBseSBkZWZpbml0aW9ucyB3aGljaCBhcmUgZWl0aGVyIG5vdCBpbiB0aGF0IHRhYmxlIG9yIHdoaWNoIG11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgZGF0YSByYXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBfeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZworeworICAgIHJhZGlvX21vZGVfdCByYWRpb19tb2RlOworICAgIGRhdGFfcmF0ZV90IGRhdGFfcmF0ZTsKKworICAgIC8qIFhDVlJfQU5BIGNvbmZpZ3MgKi8KKyAgICB4Y3ZyX21hc2tlZF9pbml0XzMyX3QgYW5hX3N5X2N0cmwyOworICAgIHhjdnJfbWFza2VkX2luaXRfMzJfdCBhbmFfcnhfYmJhOworICAgIHhjdnJfbWFza2VkX2luaXRfMzJfdCBhbmFfcnhfdHphOworCisgICAgLyogWENWUl9QSFkgY29uZmlncyAqLworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICB1aW50MzJfdCBwaHlfZnNrX21pc2NfbW9kZV9kYXRhcmF0ZTsKKyNlbHNlCisgICAgdWludDMyX3QgcGh5X2NmZzJfaW5pdDsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICB1aW50MzJfdCBhZ2NfY3RybF8yX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgYWdjX2N0cmxfMl9pbml0XzMybWh6OworICAgIHhjdnJfcnhfY2hmX2NvZWZmc190IHJ4X2NoZl9jb2VmZnNfMjZtaHo7IC8qIDI2TUh6IGV4dCBjbGsgKi8KKyAgICB4Y3ZyX3J4X2NoZl9jb2VmZnNfdCByeF9jaGZfY29lZmZzXzMybWh6OyAvKiAzMk1IeiBleHQgY2xrICovCisgICAgdWludDMyX3QgcnhfcmNjYWxfY3RybF8wOworICAgIHVpbnQzMl90IHJ4X3JjY2FsX2N0cmxfMTsKKworICAgIC8qIFhDVlJfVFhfRElHIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCB0eF9mc2tfc2NhbGVfMjZtaHo7IC8qIE9ubHkgdXNlZCBieSBNU0sgbW9kZSwgYnV0IGRlcGVuZGVudCBvbiBkYXRhcmF0ZSAqLworICAgIHVpbnQzMl90IHR4X2Zza19zY2FsZV8zMm1oejsgLyogT25seSB1c2VkIGJ5IE1TSyBtb2RlLCBidXQgZGVwZW5kZW50IG9uIGRhdGFyYXRlICovCit9IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgWENWUiBkYXRhcmF0ZSBzcGVjaWZpYyBjb25maWd1cmUgc3RydWN0dXJlICh2YXJpZXMgYnkgZGF0YSByYXRlKQorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzdG9yZSBhbGwgb2YgdGhlIFhDVlIgc2V0dGluZ3Mgd2hpY2ggYXJlIGRlcGVuZGVudCB1cG9uIGRhdGEgcmF0ZS4gSXQgaXMgdXNlZCBhcyBhbiBvdmVybGF5CisgKiBvbiB0b3Agb2YgdGhlIHhjdnJfbW9kZV9jb25maWdfdCBzdHJ1Y3R1cmUgdG8gc3VwcGx5IGRlZmluaXRpb25zIHdoaWNoIGFyZSBlaXRoZXIgbm90IGluIHRoYXQgdGFibGUgb3Igd2hpY2ggbXVzdCBiZSBvdmVycmlkZGVuIGZvciBkYXRhIHJhdGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IF94Y3ZyX2RhdGFyYXRlX2NvbmZpZworeworICAgIGRhdGFfcmF0ZV90IGRhdGFfcmF0ZTsKKworICAgIC8qIFhDVlJfUEhZIGNvbmZpZ3MgKi8KKyAgICB1aW50MzJfdCBwaHlfZWxfY2ZnX2luaXQ7IC8qIE5vdGU6IEVMX0VOQUJMRSAgaXMgc2V0IGluIHhjdnJfbW9kZV9jb25maWdfdCBzZXR0aW5ncyAqLworCisgICAgLyogWENWUl9SWF9ESUcgY29uZmlncyAqLworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX2luaXRfMjZtaHo7IC8qIE5PVEU6IENvbW1vbiBpbml0LCBtb2RlIGluaXQsIGFuZCBkYXRhcmF0ZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgUlhfRElHX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX2luaXRfMzJtaHo7IC8qIE5PVEU6IENvbW1vbiBpbml0LCBtb2RlIGluaXQsIGFuZCBkYXRhcmF0ZSBpbml0IHdpbGwgYmUgT1InZCB0b2dldGhlciBmb3IgUlhfRElHX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGFnY19jdHJsXzFfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCBhZ2NfY3RybF8xX2luaXRfMzJtaHo7CisgICAgdWludDMyX3QgZGNvY19jdHJsXzBfaW5pdF8yNm1oejsgLyogTk9URTogVGhpcyB3aWxsIGJlIE9SJ2Qgd2l0aCBjb21tb24gaW5pdCBmb3IgRENPQ19DVFJMXzAgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGRjb2NfY3RybF8wX2luaXRfMzJtaHo7IC8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggY29tbW9uIGluaXQgZm9yIERDT0NfQ1RSTF8wIHRvIGZvcm0gY29tcGxldGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMV9pbml0XzI2bWh6OyAvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGNvbW1vbiBpbml0IGZvciBEQ09DX0NUUkxfMSB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgZGNvY19jdHJsXzFfaW5pdF8zMm1oejsgLyogTk9URTogVGhpcyB3aWxsIGJlIE9SJ2Qgd2l0aCBjb21tb24gaW5pdCBmb3IgRENPQ19DVFJMXzEgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworICAgIHVpbnQzMl90IGRjb2NfY3RybF8yX2luaXRfMjZtaHo7CisgICAgdWludDMyX3QgZGNvY19jdHJsXzJfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCBkY29jX2NhbF9paXJfaW5pdF8yNm1oejsKKyAgICB1aW50MzJfdCBkY29jX2NhbF9paXJfaW5pdF8zMm1oejsKKyAgICB1aW50MzJfdCBkY19yZXNpZF9jdHJsXzI2bWh6Oy8qIE5PVEU6IFRoaXMgd2lsbCBiZSBPUidkIHdpdGggY29tbW9uIGluaXQgZm9yIERDT0NfUkVTSURfQ1RSTCB0byBmb3JtIGNvbXBsZXRlIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCisgICAgdWludDMyX3QgZGNfcmVzaWRfY3RybF8zMm1oejsvKiBOT1RFOiBUaGlzIHdpbGwgYmUgT1InZCB3aXRoIGNvbW1vbiBpbml0IGZvciBEQ09DX1JFU0lEX0NUUkwgdG8gZm9ybSBjb21wbGV0ZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiAqLworfSB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBMUFVBUlQgY2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorICoKKyAqIFRoZSBwYW5pYyBjYWxsYmFjayBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5IHN5c3RlbSBpZiBzeXN0ZW0gbmVlZCB0byBiZSBpbmZvcm1lZCBvZiBYQ1ZSIGZhdGFsIGVycm9ycy4KKyAqIHJlZmVyIHRvICNYQ1ZSX1JlZ2lzdGVyUGFuaWNDYgorICovCit0eXBlZGVmIHZvaWQgKCpwYW5pY19mcHRyKSh1aW50MzJfdCBwYW5pY19pZCwgdWludDMyX3QgbG9jYXRpb24sIHVpbnQzMl90IGV4dHJhMSwgdWludDMyX3QgZXh0cmEyKTsKKworLyogTWFrZSBhdmFpbGFibGUgY29uc3Qgc3RydWN0dXJlcyBmcm9tIGNvbmZpZyBmaWxlcyAqLworZXh0ZXJuIGNvbnN0IHhjdnJfY29tbW9uX2NvbmZpZ190IHhjdnJfY29tbW9uX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgemdiZV9tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgYmxlX21vZGVfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBhbnRfbW9kZV9jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHA1X2hfMHA1X21vZGVfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwNV9oXzBwN19tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDVfaF8wcDMyX21vZGVfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBnZnNrX2J0XzBwNV9oXzFwMF9tb2RlX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfY29uZmlnX3QgZ2Zza19idF8wcDNfaF8wcDVfbW9kZV9jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190IGdmc2tfYnRfMHA3X2hfMHA1X21vZGVfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCBtc2tfbW9kZV9jb25maWc7CisKKyNpZiBSQURJT19JU19HRU5fM1AwCitleHRlcm4gY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyXzJtYnBzX2NvbmZpZzsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCitleHRlcm4gY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyXzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyXzI1MGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl84MDJfMTVfNF81MDBrYnBzX2NvbmZpZzsgLyogQ3VzdG9tIGRhdGFyYXRlIHNldHRpbmdzIGZvciA4MDIuMTUuNCBzaW5jZSBpdCBpcyAyTUNoaXBzL3NlYyAqLworCisjaWYgUkFESU9fSVNfR0VOXzNQMAorZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA1XzJtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfMm1icHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzJtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwN19oXzBwNV8ybWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfTVNLXzJtYnBzX2NvbmZpZzsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfQkxFXzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9aSUdCRUVfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfQU5UXzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwNV8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDVfMjUwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwMzJfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8wcDMyXzI1MGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA1X2hfMHA3XzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwN181MDBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzBwN18yNTBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwNV9oXzFwMF8xbWJwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfNTAwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDVfaF8xcDBfMjUwa2Jwc19jb25maWc7CitleHRlcm4gY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190IHhjdnJfR0ZTS19CVF8wcDNfaF8wcDVfMW1icHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzUwMGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHAzX2hfMHA1XzI1MGticHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX0dGU0tfQlRfMHA3X2hfMHA1XzFtYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwN19oXzBwNV81MDBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9HRlNLX0JUXzBwN19oXzBwNV8yNTBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9NU0tfMW1icHNfY29uZmlnOworZXh0ZXJuIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCB4Y3ZyX01TS181MDBrYnBzX2NvbmZpZzsKK2V4dGVybiBjb25zdCB4Y3ZyX21vZGVfZGF0YXJhdGVfY29uZmlnX3QgeGN2cl9NU0tfMjUwa2Jwc19jb25maWc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBYQ1ZSIGZ1bmN0aW9uYWwgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmICBJbml0aWFsaXplcyBhbiBYQ1ZSIGluc3RhbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFhDVlIgbW9kdWxlIGFjY29yZGluZyB0byB0aGUgcmFkaW9fbW9kZSBhbmQgZGF0YV9yYXRlIHNldHRpbmdzLiBUaGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGNhbGwgcmVxdWlyZWQgdG8gCisgKiBzdGFydCB1cCB0aGUgWENWUiBpbiBtb3N0IHNpdHVhdGlvbnMuIAorICoKKyAqIEBwYXJhbSByYWRpb19tb2RlIFRoZSByYWRpbyBtb2RlIGZvciB3aGljaCB0aGUgWENWUiBzaG91bGQgYmUgY29uZmlndXJlZC4KKyAqIEBwYXJhbSBkYXRhX3JhdGUgVGhlIGRhdGEgcmF0ZSBmb3Igd2hpY2ggdGhlIFhDVlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuIE9ubHkgbWF0dGVycyB3aGVuIEdGU0svTVNLIHJhZGlvX21vZGUgaXMgc2VsZWN0ZWQuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGVuY29tcGFzc2VzIHRoZSA6OlhDVlJHZXREZWZhZnVsdENvbmZpZygpIGFuZCA6OlhDVlJfQ29uZmlndXJlKCkgZnVuY3Rpb25zLgorICovCit4Y3ZyU3RhdHVzX3QgWENWUl9Jbml0KHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBkYXRhX3JhdGUpOworCisvKiEKKyAqIEBicmllZiAgRGVpbml0aWFsaXplcyBhbiBYQ1ZSIGluc3RhbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2F0ZSB0aGUgWENWUiBtb2R1bGUgY2xvY2sgYW5kIHNldCBhbGwgcmVnaXN0ZXIgdmFsdWUgdG8gcmVzZXQgdmFsdWUuCisgKgorICovCit2b2lkIFhDVlJfRGVpbml0KHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgSW5pdGlhbGl6ZXMgWENWUiBjb25maWd1cmUgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyBwb2ludGVycyB0byB0aGUgWENWUiBjb25maWd1cmUgc3RydWN0dXJlcyB3aXRoIGRlZmF1bHQgdmFsdWVzLiAKKyAqIFRoZSBjb25maWd1cmF0aW9ucyBhcmUgZGl2aWRlZCBpbnRvIGEgY29tbW9uIHN0cnVjdHVyZSwgYSBzZXQgb2YgcmFkaW8gbW9kZSBzcGVjaWZpYyAKKyAqIHN0cnVjdHVyZXMgKG9uZSBwZXIgcmFkaW9fbW9kZSksIGEgc2V0IG9mIG1vZGUmZGF0YXJhdGUgc3BlY2lmaWMgc3RydWN0dXJlcyAoZm9yIGVhY2ggbW9kZSBhdAorICogZWFjaCBkYXRhcmF0ZSksIGFuZCBhIHNldCBvZiBkYXRhIHJhdGUgc3BlY2lmaWMgc3RydWN0dXJlcy4KKyAqIFRoZSBwb2ludGVycyBwcm92aWRlZCBieSB0aGlzIHJvdXRpbmUgcG9pbnQgdG8gY29uc3Qgc3RydWN0dXJlcyB3aGljaCBjYW4gYmUKKyAqIGNvcGllZCB0byB2YXJpYWJsZSBzdHJ1Y3R1cmVzIGlmIGNoYW5nZXMgdG8gc2V0dGluZ3MgYXJlIHJlcXVpcmVkLgorICoKKyAqIEBwYXJhbSByYWRpb19tb2RlIFtpbl0gVGhlIHJhZGlvIG1vZGUgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYXJlIHJlcXVlc3RlZC4KKyAqIEBwYXJhbSBkYXRhX3JhdGUgW2luXSBUaGUgZGF0YSByYXRlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFyZSByZXF1ZXN0ZWQuCisgKiBAcGFyYW0gY29tX2NvbmZpZyBbaW4sb3V0XSBQb2ludGVyIHRvIGEgcG9pbnRlciB0byB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3RydWN0dXJlLgorICogQHBhcmFtIG1vZGVfY29uZmlnICBbaW4sb3V0XSBQb2ludGVyIHRvIGEgcG9pbnRlciB0byB0aGUgbW9kZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBtb2RlX2RhdGFyYXRlX2NvbmZpZyAgW2luLG91dF0gUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gdGhlIG1vZGVYZGF0YSByYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3RydWN0dXJlLgorICogQHBhcmFtIGRhdGFyYXRlX2NvbmZpZyAgW2luLG91dF0gUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgcmF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gMCBzdWNjZXNzLCBvdGhlcnMgZmFpbHVyZQorICogQHNlZSBYQ1ZSX0NvbmZpZ3VyZQorICovCit4Y3ZyU3RhdHVzX3QgWENWUl9HZXREZWZhdWx0Q29uZmlnKHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9yYXRlX3QgZGF0YV9yYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9jb21tb25fY29uZmlnX3QgKiogY29tX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9jb25maWdfdCAqKiBtb2RlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfbW9kZV9kYXRhcmF0ZV9jb25maWdfdCAqKiBtb2RlX2RhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhjdnJfZGF0YXJhdGVfY29uZmlnX3QgKiogZGF0YXJhdGVfY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgIEluaXRpYWxpemVzIGFuIFhDVlIgaW5zdGFuY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgWENWUiBtb2R1bGUgd2l0aCB1c2VyLWRlZmluZWQgc2V0dGluZ3MuCisgKgorICogQHBhcmFtIGNvbV9jb25maWcgUG9pbnRlciB0byB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3RydWN0dXJlLgorICogQHBhcmFtIG1vZGVfY29uZmlnIFBvaW50ZXIgdG8gdGhlIG1vZGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gbW9kZV9kYXRhcmF0ZV9jb25maWcgUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gdGhlIG1vZGVYZGF0YSByYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3RydWN0dXJlLgorICogQHBhcmFtIGRhdGFyYXRlX2NvbmZpZyBQb2ludGVyIHRvIGEgcG9pbnRlciB0byB0aGUgZGF0YSByYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3RydWN0dXJlLgorICogQHBhcmFtIHRlbXBEZWdDIHRlbXBlcmF0dXJlIG9mIHRoZSBkaWUgaW4gZGVncmVlcyBDLgorICogQHBhcmFtIGV4dF9jbGsgaW5kaWNhdGVzIHRoZSBleHRlcm5hbCBjbG9jayBzZXR0aW5nLCAzMk1IeiBvciAyNk1Iei4KKyAqIEBwYXJhbSBmaXJzdF9pbml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjYWxsIGlzIHRvIGluaXRpYWxpemUgKD09IDEpIG9yIHRoZSBjYWxsIGlzIHRvIHBlcmZvcm0gYSBtb2RlIGNoYW5nZSAoPT0gMCkKKyAqIEByZXR1cm4gMCBzdWNjZWVkLCBvdGhlcnMgZmFpbGVkCisgKi8KK3hjdnJTdGF0dXNfdCBYQ1ZSX0NvbmZpZ3VyZShjb25zdCB4Y3ZyX2NvbW1vbl9jb25maWdfdCAqY29tX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9tb2RlX2NvbmZpZ190ICptb2RlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9tb2RlX2RhdGFyYXRlX2NvbmZpZ190ICptb2RlX2RhdGFyYXRlX2NvbmZpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGN2cl9kYXRhcmF0ZV9jb25maWdfdCAqZGF0YXJhdGVfY29uZmlnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IHRlbXBEZWdDLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX0lOSVRfTU9ERV9DSEdfVCBmaXJzdF9pbml0KTsKKworLyohCisgKiBAYnJpZWYgU2V0IFhDVlIgcmVnaXN0ZXIgdG8gcmVzZXQgdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXQgWENWUiByZWdpc3RlciB0byB0aGUgcmVzZXQgdmFsdWUuCisgKgorICovCit2b2lkIFhDVlJfUmVzZXQodm9pZCk7CisKKy8qIQorICogQGJyaWVmICBDaGFuZ2UgdGhlIG9wZXJhdGluZyBtb2RlIG9mIHRoZSByYWRpby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIFhDVlIgdG8gYSBuZXcgcmFkaW8gb3BlcmF0aW5nIG1vZGUuCisgKgorICogQHBhcmFtIG5ld19yYWRpb19tb2RlIFRoZSByYWRpbyBtb2RlIGZvciB3aGljaCB0aGUgWENWUiBzaG91bGQgYmUgY29uZmlndXJlZC4KKyAqIEBwYXJhbSBuZXdfZGF0YV9yYXRlIFRoZSBkYXRhIHJhdGUgZm9yIHdoaWNoIHRoZSBYQ1ZSIHNob3VsZCBiZSBjb25maWd1cmVkLiBPbmx5IG1hdHRlcnMgd2hlbiBHRlNLL01TSyByYWRpb19tb2RlIGlzIHNlbGVjdGVkLgorICogQHJldHVybiBzdGF0dXMgb2YgdGhlIG1vZGUgY2hhbmdlLgorICovCisgeGN2clN0YXR1c190IFhDVlJfQ2hhbmdlTW9kZShyYWRpb19tb2RlX3QgbmV3X3JhZGlvX21vZGUsIGRhdGFfcmF0ZV90IG5ld19kYXRhX3JhdGUpOworCisvKiEKKyAqIEBicmllZiAgRW5hYmxlIE5hcnJvd2JhbmQgUlNTSSBtZWFzdXJlbWVudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIG5hcnJvd2JhbmQgUlNTSSBtZWFzdXJlbWVudAorICoKKyAqIEBwYXJhbSBJSVJuYkVuYWJsZSB0cnVlIGNhdXNlcyB0aGUgTkIgUlNTSSB0byBiZSBlbmFibGVkLCBmYWxzZSBkaXNhYmxlZC4KKyAqLwordm9pZCBYQ1ZSX0VuYU5CUlNTSU1lYXModWludDhfdCBJSVJuYkVuYWJsZSk7CisKKy8qIQorICogQGJyaWVmICBTZXQgYW4gYXJiaXRyYXJ5IGZyZXF1ZW5jeSBmb3IgUlggYW5kIFRYIGZvciB0aGUgcmFkaW8uCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByYWRpbyBmcmVxdWVuY3kgdXNlZCBmb3IgUlggYW5kIFJYLi4KKyAqCisgKiBAcGFyYW0gZnJlcSB0YXJnZXQgZnJlcXVlbmN5IHNldHRpbmcgaW4gSHouCisgKiBAcGFyYW0gcmVmT3NjIHJlZmVyZW5jZSBvc2NpbGxhdG9yIHNldHRpbmcgaW4gSHouCisgKiBAcmV0dXJuIHN0YXR1cyBvZiB0aGUgZnJlcXVlbmN5IGNoYW5nZS4KKyAqIEBkZXRhaWxzCisgKi8KKyB4Y3ZyU3RhdHVzX3QgWENWUl9PdmVycmlkZUZyZXF1ZW5jeSh1aW50MzJfdCBmcmVxLCB1aW50MzJfdCByZWZPc2MpOworCisvKiEKKyAqIEBicmllZiAgUmVnaXN0ZXIgYSBjYWxsYmFjayBmcm9tIHVwcGVyIGxheWVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGNhbGxiYWNrIGZyb20gdGhlIHVwcGVyIGxheWVycyBmb3IgdGhlIHJhZGlvIHRvIGNhbGwgaW4gY2FzZSBvZiBmYXRhbCBlcnJvcnMuCisgKgorICogQHBhcmFtIGZwdHIgVGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYSBwYW5pYyBjYWxsYmFjay4KKyAqLwordm9pZCBYQ1ZSX1JlZ2lzdGVyUGFuaWNDYihwYW5pY19mcHRyIGZwdHIpOyAvKiBhbGxvdyB1cHBlciBsYXllcnMgdG8gcHJvdmlkZSBQQU5JQyBjYWxsYmFjayAqLworCisvKiEKKyAqIEBicmllZiAgUmVhZCB0aGUgaGVhbHRoIHN0YXR1cyBvZiB0aGUgWENWUiB0byBkZXRlY3QgZXJyb3JzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgdXBwZXIgbGF5ZXJzIHRvIHJlcXVlc3QgdGhlIGN1cnJlbnQgcmFkaW8gaGVhbHRoLgorICoKKyAqIEByZXR1cm4gVGhlIGhlYWx0aCBzdGF0dXMgb2YgdGhlIHJhZGlvLi4KKyAqLworaGVhbHRoU3RhdHVzX3QgWENWUl9IZWFsdGhDaGVjayh2b2lkKTsgLyogYWxsb3cgdXBwZXIgbGF5ZXJzIHRvIHBvbGwgdGhlIHJhZGlvIGhlYWx0aCAqLworCisvKiEKKyAqIEBicmllZiAgQ29udHJvbCBGQUQgYW5kIExQUFMgZmVhdHVyZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb250cm9scyB0aGUgRmFzdCBBbnRlbm5hIERpdmVyc2l0eSAoRkFEKSBhbmQgTG93IFBvd2VyIFByZWFtYmxlIFNlYXJjaC4KKyAqCisgKiBAcGFyYW0gZnB0ciBjb250cm9sIHRoZSBGQUQgYW5kIExQUFMgc2V0dGluZ3MuCisgKgorICovCisgdm9pZCBYQ1ZSX0ZhZExwcHNDb250cm9sKEZBRF9MUFBTX0NUUkxfVCBjb250cm9sKTsKKworLyohCisgKiBAYnJpZWYgIENoYW5nZSB0aGUgbWFwcGluZyBvZiB0aGUgcmFkaW8gSVJRcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIG1hcHBpbmcgb2YgdGhlIHJhZGlvIExMIElSUSBzaWduYWxzIHRvIHRoZSAyLjRHIFJhZGlvIElOVDAgYW5kIDIuNEcgUmFkaW8gSU5UMSBsaW5lcy4KKyAqCisgKiBAcGFyYW0gaXJxMF9tYXBwaW5nICB0aGUgTEwgd2hpY2ggc2hvdWxkIGJlIG1hcHBlZCB0byB0aGUgSU5UMCBsaW5lLgorICogQHBhcmFtIGlycTFfbWFwcGluZyAgdGhlIExMIHdoaWNoIHNob3VsZCBiZSBtYXBwZWQgdG8gdGhlIElOVDEgbGluZS4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBtYXBwaW5nIHJlcXVlc3QuCisgKiBAIG5vdGUgVGhlIHJhZGlvX21vZGVfdCBwYXJhbWV0ZXJzIG1hcCB0byA6OmxpbmtfbGF5ZXJfdCBzZWxlY3Rpb25zIGZvciB0aGUgTEwgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZSBJTlQgbGluZS4KKyAqIEB3YXJuaW5nCisgKiAgVGhlIHNhbWUgTEwgbXVzdCBOT1QgYmUgbWFwcGVkIHRvIGJvdGggSU5UIGxpbmVzLgorICovCisgeGN2clN0YXR1c190IFhDVlJfU2V0SVJRTWFwcGluZyhyYWRpb19tb2RlX3QgaXJxMF9tYXBwaW5nLCByYWRpb19tb2RlX3QgaXJxMV9tYXBwaW5nKTsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKy8qIQorICogQGJyaWVmICBTZXRzIHRoZSBuZXR3b3JrIGFkZHJlc3MgdXNlZCBieSB0aGUgUEhZIGR1cmluZyBCTEUgQml0IFN0cmVhbWluZyBNb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIHJlZ2lzdGVyIGluIHRoZSBQSFkgd2hpY2ggY29udGFpbnMgdGhlIG5ldHdvcmsgYWRkcmVzcyB1c2VkIGR1cmluZyBCU00uCisgKgorICogQHBhcmFtIGJzbV9udHdfYWRkcmVzcyAgdGhlIGFkZHJlc3MgdG8gYmUgdXNlZCBkdXJpbmcgQlNNLgorICogQCBub3RlIFRoaXMgcm91dGluZSBkb2VzIE5PVCBlbmFibGUgQlNNLgorICovCit2b2lkIFhDVlJfU2V0QlNNX05UV19BZGRyZXNzKHVpbnQzMl90IGJzbV9udHdfYWRkcmVzcyk7CisKKy8qIQorICogQGJyaWVmICBSZWFkcyB0aGUgY3VycmVudGx5IHByb2dyYW1tZWQgbmV0d29yayBhZGRyZXNzIHVzZWQgYnkgdGhlIFBIWSBkdXJpbmcgQkxFIEJpdCBTdHJlYW1pbmcgTW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSByZWdpc3RlciBpbiB0aGUgUEhZIHdoaWNoIGNvbnRhaW5zIHRoZSBuZXR3b3JrIGFkZHJlc3MgdXNlZCBkdXJpbmcgQlNNLgorICoKKyAqIEByZXR1cm4gYnNtX250d19hZGRyZXNzICB0aGUgYWRkcmVzcyB0byBiZSB1c2VkIGR1cmluZyBCU00uCisgKiBAIG5vdGUgVGhpcyByb3V0aW5lIGRvZXMgTk9UIGVuYWJsZSBCU00uCisgKi8KK3VpbnQzMl90IFhDVlJfR2V0QlNNX05UV19BZGRyZXNzKHZvaWQpOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyohCisgKiBAYnJpZWYgIEdldCB0aGUgbWFwcGluZyBvZiB0aGUgb25lIG9mIHRoZSByYWRpbyBJUlFzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNldHRpbmcgZm9yIHRoZSBtYXBwaW5nIG9mIG9uZSBvZiB0aGUgcmFkaW8gTEwgSVJRIHNpZ25hbHMgdG8gdGhlIDIuNEcgUmFkaW8gSU5UMCBhbmQgMi40RyBSYWRpbyBJTlQxIGxpbmVzLgorICoKKyAqIEBwYXJhbSBpbnRfbnVtIHRoZSBudW1iZXIsIDAgb3IgMSwgb2YgdGhlIElOVCBsaW5lIHRvIGZldGNoZWQuCisgKiBAcmV0dXJuIHRoZSBtYXBwaW5nIHNldHRpbmcgb2YgdGhlIHNwZWNpZmllZCBsaW5lLgorICogQG5vdGUgQW55IHZhbHVlIHBhc3NlZCBpbnRvIHRoaXMgcm91dGluZSBvdGhlciB0aGFuIDAgd2lsbCBiZSB0cmVhdGVkIGFzIGEgMS4KKyAqLworIGxpbmtfbGF5ZXJfdCBYQ1ZSX0dldElSUU1hcHBpbmcodWludDhfdCBpbnRfbnVtKTsKKworLyohCisgKiBAYnJpZWYgIEdldCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSBYQ1ZSLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIChyYWRpbyBtb2RlIGFuZCByYWRpbyBkYXRhIHJhdGUpIG9mIHRoZSBYQ1ZSIHRvIGFsbG93IExMIHRvIHByb3Blcmx5IGNvbmZpZyBkYXRhIHJhdGVzLCBldGMKKyAqCisgKiBAcGFyYW0gY3Vycl9jb25maWcgcG9pbnRlciB0byBhIHN0cnVjdHVyZSB0byBiZSB1cGRhdGVkIHdpdGggdGhlIGN1cnJlbnQgbW9kZSBhbmQgZGF0YSByYXRlLgorICogQHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0LCBzdWNjZXNzIG9yIGludmFsaWQgcGFyYW1ldGVyIChudWxsIHBvaW50ZXIpLgorICogQG5vdGUgVGhpcyBBUEkgd2lsbCByZXR1cm4gbWVhbmluZ2xlc3MgcmVzdWx0cyBpZiBjYWxsZWQgYmVmb3JlIHRoZSByYWRpbyBpcyBpbml0aWFsaXplZC4uLgorICovCit4Y3ZyU3RhdHVzX3QgWENWUl9HZXRDdXJyZW50Q29uZmlnKHhjdnJfY3VyckNvbmZpZ190ICogY3Vycl9jb25maWcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ3VzdG9tZXIgbGV2ZWwgdHJpbSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiAgQ29udHJvbHMgc2V0dGluZyB0aGUgWFRBTCB0cmltIHZhbHVlLi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHVwcGVyIGxheWVycyBzZXQgYSBjcnlzdGFsIHRyaW0gY29tcGVuc2F0aW9uIGZhY29yCisgKgorICogQHBhcmFtIHh0YWxUcmltIHRoZSB0cmltIHZhbHVlIHRvIGFwcGx5IHRvIHRoZSBYVEFMIHRyaW1taW5nIHJlZ2lzdGVyLiBPbmx5IHRoZSA3IExTQiBhcmUgdmFsaWQsIHNldHRpbmcgdGhlIDh0aCBiaXQgcmV0dXJucyBhbiBlcnJvci4KKyAqIEByZXR1cm4gVGhlIGhlYWx0aCBzdGF0dXMgb2YgdGhlIHJhZGlvLi4KKyAqLworeGN2clN0YXR1c190IFhDVlJfU2V0WHRhbFRyaW0odWludDhfdCB4dGFsVHJpbSk7CisKKy8qIQorICogQGJyaWVmICBDb250cm9scyBnZXR0aW5nIHRoZSBYVEFMIHRyaW0gdmFsdWUuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgdXBwZXIgbGF5ZXJzIHRvIHJlYWQgdGhlIGN1cnJlbnQgWFRBTCBjb21wZW5zYXRpb24gZmFjdG9ycy4KKyAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC4uMTI3ICg3IGJpdHMpLgorICoKKyAqIEByZXR1cm4gVGhlIFhUQUwgdHJpbSBjb21wZW5zYXRpb24gZmFjdG9ycy4uCisgKi8gCit1aW50OF90ICBYQ1ZSX0dldFh0YWxUcmltKHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgQ29udHJvbHMgc2V0dGluZyB0aGUgUlNTSSBhZGp1c3RtZW50Li4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHVwcGVyIGxheWVycyB0byBzZXQgYW4gUlNTSSBhZGp1c3RtZW50IHZhbHVlLgorICoKKyAqIEBwYXJhbSBhZGogdGhlIGFkanVzdG1lbnQgdmFsdWUgdG8gYXBwbHkgdG8gdGhlIFJTU0kgYWRqdXN0bWVudCByZWdpc3Rlci4gVGhlIHZhbHVlIG11c3QgYmUgYSBzaWduZWQgOC1iaXQgdmFsdWUsIGluIDEvNCBkQm0gc3RlcC4KKyAqIEByZXR1cm4gVGhlIGhlYWx0aCBzdGF0dXMgb2YgdGhlIHJhZGlvLi4KKyAqLworeGN2clN0YXR1c190IFhDVlJfU2V0UnNzaUFkanVzdG1lbnQoaW50OF90IGFkaik7CisKKy8qIQorICogQGJyaWVmICBDb250cm9scyBnZXR0aW5nIHRoZSBSU1NJIGFkanVzdG1lbnQuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgdXBwZXIgbGF5ZXJzIHRvIHJlYWQgdGhlIGN1cnJlbnQgWENWUiBSU1NJIGFkanVzdG1lbnQgdmFsdWUuCisgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYSBzaWduZWQgOC1iaXQgdmFsdWUsIGluIDEvNCBkQm0gc3RlcC4KKyAqCisgKiBAcmV0dXJuIFRoZSBSU1NJIGFkanVzdG1lbnQgdmFsdWUuLgorICovIAoraW50OF90ICBYQ1ZSX0dldFJzc2lBZGp1c3RtZW50KHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgQ29udHJvbHMgc2V0dGluZyB0aGUgUExMIHRvIGEgcGFydGljdWxhciBjaGFubmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBzZXR0aW5nIHRoZSByYWRpbyBjaGFubmVsIGZvciBUWCBhbmQgUlguCisgKgorICogQHBhcmFtIGNoYW5uZWwgdGhlIGNoYW5uZWwgbnVtYmVyIHRvIHNldAorICogQHBhcmFtIHVzZU1hcHBlZENoYW5uZWwgd2hlbiB0cnVlLCBjaGFubmVsIGlzIGFzc3VtZWQgdG8gYmUgZnJvbSB0aGUgcHJvdG9jb2wgc3BlY2lmaWMgY2hhbm5lbCBtYXAuIHdoZW4gZmFsc2UsIGNoYW5uZWwgaXMgYXNzdW1lZCB0byBiZSBmcm9tIHRoZSAxMjggZ2VuZXJhbCBjaGFubmVsIGxpc3QuLgorICogQHJldHVybiBUaGUgc3RhdHVzIG9mIHRoZSBjaGFubmVsIG92ZXItcmlkZS4KKyAqLyAKK3hjdnJTdGF0dXNfdCBYQ1ZSX092ZXJyaWRlQ2hhbm5lbCh1aW50OF90IGNoYW5uZWwsIHVpbnQ4X3QgdXNlTWFwcGVkQ2hhbm5lbCk7CisKKy8qIQorICogQGJyaWVmICBSZWFkcyB0aGUgY3VycmVudCBmcmVxdWVuY3kgZm9yIFJYIGFuZCBUWCBmb3IgdGhlIHJhZGlvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHJhZGlvIGZyZXF1ZW5jeSB1c2VkIGZvciBSWCBhbmQgUlguLgorICoKKyAqIEByZXR1cm4gQ3VycmVudCByYWRpbyBmcmVxdWVuY3kgc2V0dGluZy4KKyAqLwordWludDMyX3QgWENWUl9HZXRGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiAgRm9yY2UgcmVjZWl2ZXIgd2FybXVwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIHRoZSBpbml0aWF0aW9uIG9mIGEgcmVjZWl2ZXIgd2FybXVwIHNlcXVlbmNlLgorICoKKyAqLwordm9pZCBYQ1ZSX0ZvcmNlUnhXdSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIEZvcmNlIHJlY2VpdmVyIHdhcm1kb3duLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIHRoZSBpbml0aWF0aW9uIG9mIGEgcmVjZWl2ZXIgd2FybWRvd24gc2VxdWVuY2UuCisgKgorICovCisgdm9pZCBYQ1ZSX0ZvcmNlUnhXZCh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIEZvcmNlIHRyYW5zbWl0dGVyIHdhcm11cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyB0aGUgaW5pdGlhdGlvbiBvZiBhIHRyYW5zbWl0IHdhcm11cCBzZXF1ZW5jZS4KKyAqCisgKi8KK3ZvaWQgWENWUl9Gb3JjZVR4V3Uodm9pZCk7CisKKy8qIQorICogQGJyaWVmICBGb3JjZSB0cmFuc21pdHRlciB3YXJtZG93bi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyB0aGUgaW5pdGlhdGlvbiBvZiBhIHRyYW5zbWl0IHdhcm1kb3duIHNlcXVlbmNlLgorICoKKyAqLwordm9pZCBYQ1ZSX0ZvcmNlVHhXZCh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgIFN0YXJ0cyB0cmFuc21pdCB3aXRoIGEgVFggcGF0dGVybiByZWdpc3RlciBkYXRhIHNlcXVlbmNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRyYW5zbWl0dGluZyB1c2luZyB0aGUgREZUIHBhdHRlcm4gcmVnaXN0ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gY2hhbm5lbF9udW0gLSAgdGhlIHByb3RvY29sIHNwZWNpZmljIGNoYW5uZWwgdG8gdHJhbnNtaXQgb24uIFZhbGlkIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiB0aGUgQ0hBTk5FTF9OVU0gcmVnaXN0ZXIgZG9jdW1lbnRhdGlvbi4KKyAqIEBwYXJhbSByYWRpb19tb2RlIFRoZSByYWRpbyBtb2RlIGZvciB3aGljaCB0aGUgWENWUiBzaG91bGQgYmUgY29uZmlndXJlZC4KKyAqIEBwYXJhbSBkYXRhX3JhdGUgVGhlIGRhdGEgcmF0ZSBmb3Igd2hpY2ggdGhlIFhDVlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuIE9ubHkgbWF0dGVycyB3aGVuIEdGU0svTVNLIHJhZGlvX21vZGUgaXMgc2VsZWN0ZWQuCisgKiBAcGFyYW0gdHhfcGF0dGVybiAtICB0aGUgZGF0YSBwYXR0ZXJuIHRvIHRyYW5zbWl0IG9uLgorICogQHJldHVybiBUaGUgc3RhdHVzIG9mIHRoZSBwYXR0ZXJuIHJlZyB0cmFuc21pdC4KKyAqIEBub3RlIFRoZSBYQ1ZSX0RmdFR4T2ZmKCkgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdG8gdHVybiBvZmYgVFggYW5kIHJldmVydCBhbGwgc2V0dGluZ3MuIFRoaXMgcm91dGluZSBjYWxscyBYQ1ZSX0NoYW5nZU1vZGUoKSB3aXRoIHRoZSBkZXNpcmVkIHJhZGlvIG1vZGUKKyAqICAgYW5kIGRhdGEgcmF0ZS4gCisgKi8gCit4Y3ZyU3RhdHVzX3QgWENWUl9EZnRUeFBhdHRlcm5SZWcodWludDE2X3QgY2hhbm5lbF9udW0sIHJhZGlvX21vZGVfdCByYWRpb19tb2RlLCBkYXRhX3JhdGVfdCBkYXRhX3JhdGUsIHVpbnQzMl90IHR4X3BhdHRlcm4pOworCisvKiEKKyAqIEBicmllZiAgU3RhcnRzIHRyYW5zbWl0IHdpdGggYSBUWCBMRlNSIHJlZ2lzdGVyIGRhdGEgc2VxdWVuY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgdHJhbnNtaXR0aW5nIHVzaW5nIHRoZSBERlQgTEZTUiByZWdpc3RlciBtb2RlLgorICoKKyAqIEBwYXJhbSBjaGFubmVsX251bSAtICB0aGUgcHJvdG9jb2wgc3BlY2lmaWMgY2hhbm5lbCB0byB0cmFuc21pdCBvbi4gVmFsaWQgdmFsdWVzIGFyZSBkZWZpbmVkIGluIHRoZSBDSEFOTkVMX05VTSByZWdpc3RlciBkb2N1bWVudGF0aW9uLgorICogQHBhcmFtIHJhZGlvX21vZGUgVGhlIHJhZGlvIG1vZGUgZm9yIHdoaWNoIHRoZSBYQ1ZSIHNob3VsZCBiZSBjb25maWd1cmVkLgorICogQHBhcmFtIGRhdGFfcmF0ZSBUaGUgZGF0YSByYXRlIGZvciB3aGljaCB0aGUgWENWUiBzaG91bGQgYmUgY29uZmlndXJlZC4gT25seSBtYXR0ZXJzIHdoZW4gR0ZTSy9NU0sgcmFkaW9fbW9kZSBpcyBzZWxlY3RlZC4KKyAqIEBwYXJhbSBsZnNyX2xlbmd0aCAtICB0aGUgbGVuZ3RoIG9mIHRoZSBMRlNSIHNlcXVlbmNlIHRvIHVzZS4KKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBvZiB0aGUgTEZTUiByZWcgdHJhbnNtaXQuCisgKiBAbm90ZSBUaGUgWENWUl9EZnRUeE9mZigpIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHRvIHR1cm4gb2ZmIFRYIGFuZCByZXZlcnQgYWxsIHNldHRpbmdzLiBUaGlzIHJvdXRpbmUgY2FsbHMgWENWUl9DaGFuZ2VNb2RlKCkgd2l0aCB0aGUgZGVzaXJlZCByYWRpbyBtb2RlCisgKiAgIGFuZCBkYXRhIHJhdGUuIAorICovIAoreGN2clN0YXR1c190IFhDVlJfRGZ0VHhMZnNyUmVnKHVpbnQxNl90IGNoYW5uZWxfbnVtLCByYWRpb19tb2RlX3QgcmFkaW9fbW9kZSwgZGF0YV9yYXRlX3QgZGF0YV9yYXRlLCB1aW50OF90IGxmc3JfbGVuZ3RoKTsKKworLyohCisgKiBAYnJpZWYgQ29udHJvbHMgY2xlYXJpbmcgYWxsIFRYIERGVCBzZXR0aW5ncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldmVydHMgYWxsIFRYIERGVCBzZXR0aW5ncyBmcm9tIHRoZSB0ZXN0IG1vZGVzIHRvIG5vcm1hbCBvcGVyYXRpbmcgbW9kZS4KKyAqCisgKi8gCit2b2lkIFhDVlJfRGZ0VHhPZmYodm9pZCk7CisKKy8qIQorICogQGJyaWVmICBDb250cm9scyBzZXR0aW5nIHRoZSBQQSBwb3dlciBsZXZlbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgc2V0dGluZyB0aGUgUEEgcG93ZXIgbGV2ZWwgdG8gYSBzcGVjaWZpYyBzZXR0aW5nLCBvdmVycmlkaW5nIGFueSBsaW5rIGxheWVyIHNldHRpbmdzLgorICoKKyAqIEBwYXJhbSBwYV9wb3dlciAtICB0aGUgcG93ZXIgbGV2ZWwgdG8gc2V0LiBWYWxpZCB2YWx1ZXMgYXJlIDAsIDEsIGFuZCBldmVuIHZhbHVlcyBmcm9tIDIgdG8gMHgzRSwgaW5jbHVzaXZlLgorICogQHJldHVybiBUaGUgc3RhdHVzIG9mIHRoZSBQQSBwb3dlciBvdmVyLXJpZGUuCisgKi8gCit4Y3ZyU3RhdHVzX3QgWENWUl9Gb3JjZVBBUG93ZXIodWludDhfdCBwYV9wb3dlcik7CisKKy8qIQorICogQGJyaWVmIFN0YXJ0cyBDVyBUWC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0cmFuc21pdHRpbmcgQ1cgKG5vIG1vZHVsYXRpb24pLgorICoKKyAqIEBwYXJhbSByZl9jaGFubmVsX2ZyZXEgLSAgdGhlIFJGIGNoYW5uZWwgdG8gdHJhbnNtaXQgb24uIFZhbGlkIHZhbHVlcyBhcmUgaW50ZWdlciB2YWx1ZXMgZnJvbSAyMzYwIHRvIDI0ODdNSHosIGluY2x1c2l2ZS4KKyAqIEBwYXJhbSBwcm90b2NvbCAtICB0aGUgcHJvdG9jb2wgc2V0dGluZyB0byB1c2UsIHZhbGlkIHNldHRpbmdzIGFyZSA2IChHRlNLKSBhbmQgNyAoRlNLKS4KKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBvZiB0aGUgQ1cgdHJhbnNtaXQuCisgKi8gCit4Y3ZyU3RhdHVzX3QgWENWUl9EZnRUeENXKHVpbnQxNl90IHJmX2NoYW5uZWxfZnJlcSwgdWludDhfdCBwcm90b2NvbCk7CisKK3hjdnJTdGF0dXNfdCBYQ1ZSX0NvZXhpc3RlbmNlSW5pdCh2b2lkKTsKK3hjdnJTdGF0dXNfdCBYQ1ZSX0NvZXhpc3RlbmNlU2V0UHJpb3JpdHkoWENWUl9DT0VYX1BSSU9SSVRZX1QgcnhQcmlvcml0eSwgWENWUl9DT0VYX1BSSU9SSVRZX1QgdHhQcmlvcml0eSk7Cit4Y3ZyU3RhdHVzX3QgWENWUl9Db2V4aXN0ZW5jZVNhdmVSZXN0b3JlVGltaW5ncyh1aW50OF90IHNhdmVUaW1pbmdzKTsKKworLyogQH0gKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfWENWUl9IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyX3RyaW0uYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvZnNsX3hjdnJfdHJpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGNiMGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyX3RyaW0uYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKyNpbmNsdWRlICJmc2xfeGN2ci5oIgorI2luY2x1ZGUgImZzbF94Y3ZyX3RyaW0uaCIKKyNpbmNsdWRlICJkYmdfcmFtX2NhcHR1cmUuaCIKKyNpbmNsdWRlICJtYXRoLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERlZmluaXRpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHJvdG90eXBlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBEQ19NZWFzdXJlX3Nob3J0KElRX3QgY2hhbiwgREFDX1NXRUVQX1NURVAyX3QgZGNvY19pbml0X3ZhbCk7CitmbG9hdCBjYWxjX2Rjb2NfZGFjX3N0ZXAoR0FJTl9DQUxDX1RCTF9FTlRSWTJfVCAqIG1lYXNfcHRyLCBHQUlOX0NBTENfVEJMX0VOVFJZMl9UICogYmFzZWxpbmVfbWVhc19wdHIgKTsKK2V4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVmFyaWFibGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCBpbnQ4X3QgVHNldHRsZUNhbCA9IDEwOworc3RhdGljIEdBSU5fQ0FMQ19UQkxfRU5UUlkyX1QgbWVhc3VyZW1lbnRfdGJsMltOVU1fSV9RX0NIQU5dW05VTV9TV0VFUF9TVEVQX0VOVFJJRVMyXTsgCitzdGF0aWMgY29uc3QgaW50OF90IHN3ZWVwX3N0ZXBfdmFsdWVzMltOVU1fU1dFRVBfU1RFUF9FTlRSSUVTMl0gPSAKK3sgCisgICAgMCwgLyogQmFzZWxpbmUgZW50cnkgaXMgZmlyc3QgYW5kIG5vdCB1c2VkIGluIHRoaXMgdGFibGUgKi8KKyAgICAtMTYsCisgICAgKzE2LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgIC00LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0LAorICAgICs0Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjcm9zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJU0lHTih4KSAhKCh1aW50MTZfdCl4ICYgMHg4MDAwKQorI2RlZmluZSBBQlMoeCkgKCh4KSA+IDAgPyAoeCkgOiAtKHgpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIHRyaW0gb2YgdGhlIEJCQSBEQ09DIERBQyBvbiB0aGUgRFVUCisgKgorICogXHJldHVybiBzdGF0dXMgLSAxIGlmIHBhc3NlZCwgMCBpZiBmYWlsZWQuCisgKgorICogXGluZ3JvdXAgUHVibGljQVBJcworICoKKyAqIFxkZXRhaWxzCisgKiAgIFJlcXVpcmVzIHRoZSBSWCB0byBiZSB3YXJtZWQgdXAgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQ4X3QgcnhfYmJhX2Rjb2NfZGFjX3RyaW1fc2hvcnRJUSh2b2lkKQoreworICAgIHVpbnQ4X3QgaTsKKyAgICBmbG9hdCB0ZW1wX21pID0gMDsKKyAgICBmbG9hdCB0ZW1wX21xID0gMDsKKyAgICBmbG9hdCB0ZW1wX3BpID0gMDsKKyAgICBmbG9hdCB0ZW1wX3BxID0gMDsKKyAgICBmbG9hdCB0ZW1wX3N0ZXAgPSAwOworICAgIHVpbnQ4X3QgYmJmX2RhY2luaXRfaSwgYmJmX2RhY2luaXRfcTsKKworICAgIHVpbnQzMl90IGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluID0gMHg4MDgwMjAyMDsgLyogVXNlZCBpbiAybmQgJiAzcmQgR2VuZXJhdGlvbiBEQ09DIFRyaW1zIG9ubHkuICovCisgICAgdWludDMyX3QgYmJmX2Rjb2Nfc3RlcDsKKyAgICB1aW50MzJfdCBiYmZfZGNvY19zdGVwX3JjcDsKKyAgICBUWkFkY29jc3RlcF90IHR6YV9kY29jX3N0ZXBbMTFdOworICAgIHVpbnQ4X3Qgc3RhdHVzID0gMDsKKyAgICAKKyAgICAvKiBTYXZlIHJlZ2lzdGVyIHZhbHVlcy4gKi8gIAorICAgIHVpbnQzMl90IGRjb2NfY3RybF8wX3N0YWNrOworICAgIHVpbnQzMl90IGRjb2NfY3RybF8xX3N0YWNrOworICAgIHVpbnQzMl90IGFnY19jdHJsXzFfc3RhY2s7CisgICAgdWludDMyX3QgcnhfZGlnX2N0cmxfc3RhY2s7CisgICAgdWludDMyX3QgZGNvY19jYWxfZ2Fpbl9zdGF0ZTsKKworICAgIFhjdnJDYWxEZWxheSgxMDAwKTsKKyAgICBkY29jX2N0cmxfMF9zdGFjayA9IFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMDsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NUUkxfMCBmb3IgbGF0ZXIgcmVzdG9yZS4gKi8KKyAgICBkY29jX2N0cmxfMV9zdGFjayA9IFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMTsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NUUkxfMSBmb3IgbGF0ZXIgcmVzdG9yZS4gKi8KKyAgICByeF9kaWdfY3RybF9zdGFjayA9ICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkw7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUuICovCisgICAgYWdjX2N0cmxfMV9zdGFjayA9IFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xOyAvKiBTYXZlIHN0YXRlIG9mIFJYX0RJR19DVFJMIGZvciBsYXRlciByZXN0b3JlLiAqLworICAgIGRjb2NfY2FsX2dhaW5fc3RhdGUgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTjsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NBTF9HQUlOIGZvciBsYXRlciByZXN0b3JlLiAqLworCisgICAgLyogRW5zdXJlIEFHQywgRENPQyBhbmQgUlhfRElHX0NUUkwgaXMgaW4gY29ycmVjdCBtb2RlLiAqLworICAgIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTCA9IChYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgJiB+WENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOX01BU0spIHwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfQUdDX0VOKDApOyAvKiBUdXJuIE9GRiBBR0MgKi8KKworICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gKFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xICYgflhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9MTkFfR0FJTl9FTl9NQVNLKSB8IFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfVVNFUl9MTkFfR0FJTl9FTigxKSA7IC8qIFNldCBMTkEgTWFudWFsIEdhaW4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IChYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSAmIH5YQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU5fTUFTSykgfCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU4oMSkgOyAvKiBTZXQgQkJBIE1hbnVhbCBHYWluICovCisKKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSAoWENWUl9SWF9ESUctPlJYX0RJR19DVFJMICYgflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0RDT0NfQ0FMX0VOX01BU0spIHwgWENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU4oMCk7IC8qIEVuYWJsZSBIVyBEQyBDYWxpYnJhdGlvbiAtLSBEaXNhYmxlIGZvciBTVy1EQ09DICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wID0gKFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCAmIH5YQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX01BTl9NQVNLKSB8IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfTUFOKDEpOyAvKiBFbmFibGUgIE1hbnVhbCBEQ09DICovCisgICAgLyogRENPQ19DVFJMXzAgQCA0MDA1X0MwMkMgLS0gRGVmaW5lIGRlZmF1bHQgRENPQyBEQUMgc2V0dGluZ3MgaW4gbWFudWFsIG1vZGUuICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSSgweDIwKSB8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKDB4MjApIHwgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JKDB4ODApIHwgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1EoMHg4MCk7CisgICAgLyogU2V0IERDT0MgVHJhY2tpbmcgU3RhdGUuICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wID0gKFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCAmIH5YQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDX01BU0spIHwgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19DT1JSRUNUX1NSQygwKTsgLyogRGlzYWJsZXMgRENPQyBUcmFja2luZyB3aGVuIHNldCB0byAwICovCisgICAgLyogQXBwbHkgTWFudWFsIEdhaW4uICovCisgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU4oMSkgfCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU4oMSkgfCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9VU0VSX0dBSU4oMHgwMikgfCBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU4oMHgwMCkgOworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsKKworICAgIGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluID0gWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQ7IC8qIENhcHR1cmUgREMgbnVsbCBzZXR0aW5nLiAqLworCisgICAgYmJmX2RhY2luaXRfaSA9IChkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiAmIDB4MDAwMDAwRkZVKTsKKyAgICBiYmZfZGFjaW5pdF9xID0gKGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluICYgMHgwMDAwRkYwMFUpID4+IDg7CisKKyAgICBEQ19NZWFzdXJlX3Nob3J0KElfQ0hBTk5FTCwgTk9NSU5BTDIpOworICAgIERDX01lYXN1cmVfc2hvcnQoUV9DSEFOTkVMLCBOT01JTkFMMik7CisKKyAgICAvKiBTV0VFUCBRIENIQU5ORUwgKi8KKyAgICAvKiBCQkYgTkVHIFNURVAgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IChYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCAmIH5YQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUV9NQVNLKSB8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKGJiZl9kYWNpbml0X3EgLSAxNik7CisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOworICAgIERDX01lYXN1cmVfc2hvcnQoUV9DSEFOTkVMLCBCQkZfTkVHKTsKKworICAgIC8qIEJCRiBQT1MgU1RFUCAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gKFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUICYgflhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RX01BU0spIHwgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1EoYmJmX2RhY2luaXRfcSArIDE2KTsKKyAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCk7CisgICAgRENfTWVhc3VyZV9zaG9ydChRX0NIQU5ORUwsIEJCRl9QT1MpOworCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSBkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbjsgLyogUmV0dXJuIERBQyBzZXR0aW5nIHRvIGluaXRpYWwuICovCisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOyAgCisKKyAgICAvKiBTV0VFUCBJIENIQU5ORUwgKi8KKyAgICAvKiBCQkYgTkVHIFNURVAgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IChYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCAmIH5YQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSV9NQVNLKSB8IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKGJiZl9kYWNpbml0X2kgLSAxNik7IAorICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsKTsKKyAgICBEQ19NZWFzdXJlX3Nob3J0KElfQ0hBTk5FTCwgQkJGX05FRyk7CisgICAgLyogQkJGIFBPUyBTVEVQICAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gKFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUICYgflhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JX01BU0spIHwgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koYmJmX2RhY2luaXRfaSArIDE2KTsgCisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOworICAgIERDX01lYXN1cmVfc2hvcnQoSV9DSEFOTkVMLCBCQkZfUE9TKTsKKworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW47IC8qIFJldHVybiBEQUNzIHRvIGluaXRpYWwuICovCisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOworCisgICAgLyogQ2FsY3VsYXRlIEJCRiBEQ09DIFNURVBTLCBSRUNJUFJPQ0FMUyAqLworICAgIHRlbXBfbWkgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfTkVHXSwgJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtOT01JTkFMMl0pOworICAgIHRlbXBfbXEgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfTkVHXSwgJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtOT01JTkFMMl0pOworICAgIHRlbXBfcGkgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtCQkZfUE9TXSwgJm1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtOT01JTkFMMl0pOworICAgIHRlbXBfcHEgPSBjYWxjX2Rjb2NfZGFjX3N0ZXAoJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfUE9TXSwgJm1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtOT01JTkFMMl0pOworCisgICAgdGVtcF9zdGVwID0gKHRlbXBfbWkrdGVtcF9waSArIHRlbXBfbXErdGVtcF9wcSkgLyA0OworCisgICAgYmJmX2Rjb2Nfc3RlcCA9ICh1aW50MzJfdClyb3VuZGYodGVtcF9zdGVwICogOFUpOworCisgICAgaWYgKChiYmZfZGNvY19zdGVwID4gMjY1KSAmIChiYmZfZGNvY19zdGVwIDwgMzA1KSkgCisgICAgeworICAgICAgICBiYmZfZGNvY19zdGVwX3JjcCA9ICh1aW50MzJfdClyb3VuZGYoKGZsb2F0KTB4ODAwMFUgLyB0ZW1wX3N0ZXApOworCisgICAgICAgIC8qIENhbGN1bGF0ZSBUWkEgRENPQyBTVEVQUyAmIFJFQ0lQUk9DQUxTIGFuZCBJUV9EQ19HQUlOX01JU01BVENILiAqLworICAgICAgICBmb3IgKGkgPSBUWkFfU1RFUF9OMDsgaSA8PSBUWkFfU1RFUF9OMTA7IGkrKykgLyogUmVseWluZyBvbiBlbnVtZXJhdGlvbiBvcmRlcmluZy4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2FsY3VsYXRlIFRaQSBEQ09DIFNURVBTSVpFICYgaXRzIFJFQ0lQUk9DQUwuICovCisgICAgICAgICAgICBzd2l0Y2goaSl7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04wOiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSAoYmJmX2Rjb2Nfc3RlcCA+PiAzVSkgLyAzLjZGOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMTogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAxX2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wMF9pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04yOiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDJfaW5pdCA+PiAxNikvKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAxX2luaXQgPj4gMTYpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjM6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wM19pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDJfaW5pdCA+PiAxNik7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9ONDogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA0X2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wM19pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX041OiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDVfaW5pdCA+PiAxNikvKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA0X2luaXQgPj4gMTYpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjY6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNl9pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDVfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX043OiAKKyAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDdfaW5pdCA+PiAxNikvKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA2X2luaXQgPj4gMTYpOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjg6IAorICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOF9pbml0ID4+IDE2KS8oeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDdfaW5pdCA+PiAxNik7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OOTogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA5X2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOF9pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04xMDogCisgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzEwX2luaXQgPj4gMTYpLyh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOV9pbml0ID4+IDE2KTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0emFfZGNvY19zdGVwW2ktVFpBX1NURVBfTjBdLmRjb2Nfc3RlcCA9ICh1aW50MzJfdClyb3VuZGYodGVtcF9zdGVwICogOCk7CisgICAgICAgICAgICB0emFfZGNvY19zdGVwW2ktVFpBX1NURVBfTjBdLmRjb2Nfc3RlcF9yY3AgPSAodWludDMyX3Qpcm91bmRmKChmbG9hdCkweDgwMDAgLyB0ZW1wX3N0ZXApOworICAgICAgICB9CisKKyAgICAgICAgLyogTWFrZSB0aGUgdHJpbXMgYWN0aXZlLiAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19CQkFfU1RFUCA9IFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUChiYmZfZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9SRUNJUChiYmZfZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8wID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfR0FJTl8wKHR6YV9kY29jX3N0ZXBbMF0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMF9EQ09DX1RaQV9TVEVQX1JDUF8wKHR6YV9kY29jX3N0ZXBbMF0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8xID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xX0RDT0NfVFpBX1NURVBfR0FJTl8xKHR6YV9kY29jX3N0ZXBbMV0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX1JDUF8xKHR6YV9kY29jX3N0ZXBbMV0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8yID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfR0FJTl8yKHR6YV9kY29jX3N0ZXBbMl0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yKHR6YV9kY29jX3N0ZXBbMl0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8zID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfR0FJTl8zKHR6YV9kY29jX3N0ZXBbM10uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfM19EQ09DX1RaQV9TVEVQX1JDUF8zKHR6YV9kY29jX3N0ZXBbM10uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF80ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF80X0RDT0NfVFpBX1NURVBfR0FJTl80KHR6YV9kY29jX3N0ZXBbNF0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX1JDUF80KHR6YV9kY29jX3N0ZXBbNF0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF81ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfR0FJTl81KHR6YV9kY29jX3N0ZXBbNV0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81KHR6YV9kY29jX3N0ZXBbNV0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF82ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfR0FJTl82KHR6YV9kY29jX3N0ZXBbNl0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNl9EQ09DX1RaQV9TVEVQX1JDUF82KHR6YV9kY29jX3N0ZXBbNl0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF83ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF83X0RDT0NfVFpBX1NURVBfR0FJTl83KHR6YV9kY29jX3N0ZXBbN10uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX1JDUF83KHR6YV9kY29jX3N0ZXBbN10uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF84ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfR0FJTl84KHR6YV9kY29jX3N0ZXBbOF0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX1JDUF84KHR6YV9kY29jX3N0ZXBbOF0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF85ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfR0FJTl85KHR6YV9kY29jX3N0ZXBbOV0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOV9EQ09DX1RaQV9TVEVQX1JDUF85KHR6YV9kY29jX3N0ZXBbOV0uZGNvY19zdGVwX3JjcCkgOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8xMCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMTBfRENPQ19UWkFfU1RFUF9HQUlOXzEwKHR6YV9kY29jX3N0ZXBbMTBdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfUkNQXzEwKHR6YV9kY29jX3N0ZXBbMTBdLmRjb2Nfc3RlcF9yY3ApIDsKKworICAgICAgICBzdGF0dXMgPSAxOyAvKiBTdWNjZXNzICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IDA7IC8qIEZhaWx1cmUgKi8KKyAgICB9CisKKyAgICAvKiBSZXN0b3JlIFJlZ2lzdGVycy4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzAgPSBkY29jX2N0cmxfMF9zdGFjazsgLyogUmVzdG9yZSBEQ09DX0NUUkxfMCBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncy4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzEgPSBkY29jX2N0cmxfMV9zdGFjazsgLyogUmVzdG9yZSBEQ09DX0NUUkxfMSBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncy4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSByeF9kaWdfY3RybF9zdGFjazsgLyogUmVzdG9yZSBSWF9ESUdfQ1RSTCBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncy4gKi8KKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTiA9IGRjb2NfY2FsX2dhaW5fc3RhdGU7IC8qIFJlc3RvcmUgRENPQ19DQUxfR0FJTiBzdGF0ZSB0byBwcmlvciBzZXR0aW5nLiAqLworICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gYWdjX2N0cmxfMV9zdGFjazsgLyogU2F2ZSBzdGF0ZSBvZiBSWF9ESUdfQ1RSTCBmb3IgbGF0ZXIgcmVzdG9yZS4gKi8KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBvbmUgcG9pbnQgb2YgdGhlIERDIEdBSU4gY2FsaWJyYXRpb24gcHJvY2VzcyBvbiB0aGUgRFVUCisgKgorICogXHBhcmFtW2luXSBjaGFuIC0gd2hldGhlciB0aGUgSSBvciBRIGNoYW5uZWwgaXMgYmVpbmcgdGVzdGVkLgorICogXHBhcmFtW2luXSBzdGFnZSAtIHdoZXRoZXIgdGhlIEJCRiBvciBUWkEgZ2FpbiBzdGFnZSBpcyBiZWluZyB0ZXN0ZWQuCisgKiBccGFyYW1baW5dIGRjb2NfaW5pdF92YWwgLSB0aGUgdmFsdWUgYmVpbmcgc2V0IGluIHRoZSAqKipEQ09DX0lOSVRfKiByZWdpc3RlciBieSB0aGUgcGFyZW50LgorICogXHBhcmFtW2luXSBleHRfbWVhc210IC0gdGhlIGV4dGVybmFsIG1lYXN1cmVtZW50IChpbiBtaWxsaVZvbHRzKSBjYXB0dXJlZCBieSB0aGUgcGFyZW50IGFmdGVyIHRoZSAqKipEQ09DX0lOSVRfKiByZWdpc3RlciB3YXMgc2V0dXAuCisgKgorICogXGluZ3JvdXAgUHVibGljQVBJcworICoKKyAqIFxkZXRhaWxzCisgKiAgIFJlbGllcyBvbiBhIHN0YXRpYyBhcnJheSB0byBzdG9yZSBlYWNoIHBvaW50IG9mIGRhdGEgZm9yIGxhdGVyIHByb2Nlc3NpbmcgaW4gOjpEQ19HYWluQ2FsYygpLgorICogICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgRENfTWVhc3VyZV9zaG9ydChJUV90IGNoYW4sIERBQ19TV0VFUF9TVEVQMl90IGRjb2NfaW5pdF92YWwpCit7CisgICAgaW50MTZfdCBkY19tZWFzX2kgPSAwOworICAgIGludDE2X3QgZGNfbWVhc19xID0gMDsKKyAgICBpbnQxNl90IHN1bV9kY19tZWFzX2kgPSAwOworICAgIGludDE2X3Qgc3VtX2RjX21lYXNfcSA9IDA7CisKKyAgICB7CisgICAgICAgIGludDhfdCBpOworICAgICAgICBjb25zdCBpbnQ4X3QgaXRlcmF0aW9ucyA9IDE7CisgICAgICAgIHN1bV9kY19tZWFzX2kgPSAwOworICAgICAgICBzdW1fZGNfbWVhc19xID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4X2RjX3NhbXBsZV9hdmVyYWdlKCZkY19tZWFzX2ksICZkY19tZWFzX3EpOworICAgICAgICAgICAgc3VtX2RjX21lYXNfaSA9IHN1bV9kY19tZWFzX2kgKyBkY19tZWFzX2k7CisgICAgICAgICAgICBzdW1fZGNfbWVhc19xID0gc3VtX2RjX21lYXNfcSArIGRjX21lYXNfcTsKKyAgICAgICAgfQorICAgICAgICBzdW1fZGNfbWVhc19pID0gc3VtX2RjX21lYXNfaSAvIGl0ZXJhdGlvbnM7CisgICAgICAgIHN1bV9kY19tZWFzX3EgPSBzdW1fZGNfbWVhc19xIC8gaXRlcmF0aW9uczsKKyAgICB9CisKKyAgICBtZWFzdXJlbWVudF90YmwyW2NoYW5dW2Rjb2NfaW5pdF92YWxdLnN0ZXBfdmFsdWUgPSBzd2VlcF9zdGVwX3ZhbHVlczJbZGNvY19pbml0X3ZhbF07CisKKyAgICBpZiAoY2hhbiA9PSBJX0NIQU5ORUwpCisgICAgeworICAgICAgICBtZWFzdXJlbWVudF90YmwyW2NoYW5dW2Rjb2NfaW5pdF92YWxdLmludGVybmFsX21lYXN1cmVtZW50ID0gZGNfbWVhc19pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtZWFzdXJlbWVudF90YmwyW2NoYW5dW2Rjb2NfaW5pdF92YWxdLmludGVybmFsX21lYXN1cmVtZW50ID0gZGNfbWVhc19xOworICAgIH0KK30gIAorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBvbmUgcG9pbnQgb2YgREMgREFDIHN0ZXAgYmFzZWQgb24gZGlnaXRhbCBzYW1wbGVzIG9mIEkgb3IgUS4KKyAqCisgKiBccGFyYW1baW5dIG1lYXNfcHRyIC0gcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIG1lYXN1cmVkIGRhdGEgZnJvbSBpbnRlcm5hbCBtZWFzdXJlbWVudC4KKyAqIFxwYXJhbVtpbl0gYmFzZWxpbmVfbWVhc19wdHIgLSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgYmFzZWxpbmUgbWVhc3VyZWQgZGF0YSBmcm9tIGludGVybmFsIG1lYXN1cmVtZW50LgorICoKKyAqIFxyZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxjdWxhdGlvbiwgdGhlIG1lYXN1cmVtZW50IERDT0MgREFDIHN0ZXAgdmFsdWUgZm9yIHRoaXMgbWVhc3VyZW1lbnQgcG9pbnQuCisgKiAgIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZmxvYXQgY2FsY19kY29jX2RhY19zdGVwKEdBSU5fQ0FMQ19UQkxfRU5UUlkyX1QgKiBtZWFzX3B0ciwgR0FJTl9DQUxDX1RCTF9FTlRSWTJfVCAqIGJhc2VsaW5lX21lYXNfcHRyICkKK3sKKyAgICBzdGF0aWMgaW50MTZfdCBub3JtX2RjX2NvZGU7CisgICAgc3RhdGljIGZsb2F0IGRjX3N0ZXA7CisKKyAgICAvKiBOb3JtYWxpemUgaW50ZXJuYWwgbWVhc3VyZW1lbnQgKi8KKyAgICBub3JtX2RjX2NvZGUgPSBtZWFzX3B0ci0+aW50ZXJuYWxfbWVhc3VyZW1lbnQgLSBiYXNlbGluZV9tZWFzX3B0ci0+aW50ZXJuYWxfbWVhc3VyZW1lbnQ7CisgICAgZGNfc3RlcCA9IChmbG9hdCkobm9ybV9kY19jb2RlKSAvIChmbG9hdCkobWVhc19wdHItPnN0ZXBfdmFsdWUpOworICAgIGRjX3N0ZXAgPSAoZGNfc3RlcCA8IDApPyAtZGNfc3RlcDogZGNfc3RlcDsKKworICAgIHJldHVybiBkY19zdGVwOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRlbXBvcmFyeSBkZWxheSBmdW5jdGlvbiAKKyAqCisgKiBccGFyYW1baW5dIG5vbmUuCisgKgorICogXHJldHVybiBub25lLgorICoKKyAqIFxkZXRhaWxzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBYY3ZyQ2FsRGVsYXkodWludDMyX3QgdGltZSkKK3sKKyAgICB3aGlsZSh0aW1lICogMzIgPiAwKSAvKiBUaW1lIGRlbGF5IGlzIHJvdWdobHkgaW4gdVNlYy4gKi8KKyAgICB7CisgICAgICAgIHRpbWUtLTsKKyAgICB9Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBhdmVyYWdlIChEQyB2YWx1ZSkgYmFzZWQgb24gYSBzbWFsbGVyIHNldCBvZiBkaWdpdGFsIHNhbXBsZXMgb2YgSSBhbmQgUS4KKyAqCisgKiBccGFyYW1baW5dIGlfYXZnIC0gcG9pbnRlciB0byB0aGUgbG9jYXRpb24gZm9yIHN0b3JpbmcgdGhlIGNhbGN1bGF0ZWQgYXZlcmFnZSBmb3IgSSBjaGFubmVsIHNhbXBsZXMuCisgKiBccGFyYW1baW5dIHFfYXZnIC0gcG9pbnRlciB0byB0aGUgbG9jYXRpb24gZm9yIHN0b3JpbmcgdGhlIGNhbGN1bGF0ZWQgYXZlcmFnZSBmb3IgUSBjaGFubmVsIHNhbXBsZXMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCByeF9kY19zYW1wbGVfYXZlcmFnZShpbnQxNl90ICogaV9hdmcsIGludDE2X3QgKiBxX2F2ZykKK3sKKyAgICBzdGF0aWMgdWludDMyX3Qgc2FtcGxlc1sxMjhdOyAvKiA1NDQqMioyIChlbnRpcmUgcGFja2V0IHJhbTEvMiBzaXplKSAqLworICAgIHVpbnQxNl90IGk7CisgICAgdWludDMyX3Qgcnhfc2FtcGxlOworICAgIHVpbnQxNl90ICogc2FtcGxlX3B0cjsKKyAgICB1aW50MzJfdCB0ZW1wLCBlbmRfb2Zfcnhfd3U7CisgICAgdWludDMyX3QgbnVtX2lxX3NhbXBsZXM7CisgICAgZmxvYXQgYXZnX2kgPSAwOworICAgIGZsb2F0IGF2Z19xID0gMDsKKworICAgIG51bV9pcV9zYW1wbGVzID0gMTI4OworCisgICAgLyogQ2xlYXIgdGhlIGVudGlyZSBhbGxvY2F0ZWQgc2FtcGxlIGJ1ZmZlciAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXFfc2FtcGxlczsgaSsrKQorICAgIHsKKyAgICAgICAgc2FtcGxlc1tpXT0wOworICAgIH0KKworICAgIC8qIEFzc3VtZSB0aGlzIGhhcyBiZWVuIGNhbGxlZCAqQUZURVIqIFJ4V3UgaGFzIGNvbXBsZXRlZC4gKi8KKyAgICAvKiBYQ1ZSX0ZvcmNlUnhXdSgpOyAqLworCisgICAgLyogV2FpdCBmb3IgVFNNIHRvIHJlYWNoIHRoZSBlbmQgb2Ygd2FybXVwICh1bmxlc3MgeW91IHdhbnQgdG8gY2FwdHVyZSBzb21lIHNhbXBsZXMgZHVyaW5nIERDT0MgY2FsIHBoYXNlKSAqLworICAgIHRlbXAgPSBYQ1ZSX1RTTS0+RU5EX09GX1NFUTsKKyAgICBlbmRfb2Zfcnhfd3UgPSAodGVtcCAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX01BU0spID4+IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUOworICAgIHdoaWxlICgoKCBYQ1ZSX01JU0MtPlhDVlJfU1RBVFVTICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9NQVNLKSA+PiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX1NISUZUICkgIT0gZW5kX29mX3J4X3d1KSB7fTsKKworICAgIGRiZ19yYW1faW5pdCgpOworICAgIC8qIEFyZ3VtZW50IGJlbG93IGlzICMgb2YgYnl0ZXMsIHNvICoyIChJK1EpIGFuZCAqMiAoMmJ5dGVzL3NhbXBsZSkgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgZGJnX3JhbV9zdGFydF9jYXB0dXJlKERCR19QQUdFX1JYRElHSVEsIE5PX1NUQVJUX1RSSUcsIE5PX1NUT1BfVFJJRyk7CisgICAgZGJnX3JhbV93YWl0X2Zvcl9jb21wbGV0ZSgpOworICAgIGRiZ19yYW1fcG9zdHByb2NfY2FwdHVyZShEQkdfUEFHRV9SWERJR0lRLCBudW1faXFfc2FtcGxlcyAqIDIgKiAyLCAmc2FtcGxlc1swXSk7CisgICAgZGJnX3JhbV9yZWxlYXNlKCk7CisjZWxzZQorICAgICh2b2lkKWRiZ19yYW1fY2FwdHVyZShEQkdfUEFHRV9SWERJR0lRLCBudW1faXFfc2FtcGxlcyAqIDIgKiAyLCAmc2FtcGxlc1swXSk7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzNQMCAqLworCisgICAgLyogU2lnbiBleHRlbmQgdGhlIElRIHNhbXBsZXMgaW4gcGxhY2UgaW4gdGhlIHNhbXBsZSBidWZmZXIuICovICAgIAorICAgIHNhbXBsZV9wdHIgPSAodWludDE2X3QgKikoJnNhbXBsZXNbMF0pOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXFfc2FtcGxlcyAqIDI7IGkrKykKKyAgICB7CisgICAgICAgIHJ4X3NhbXBsZSA9ICpzYW1wbGVfcHRyOworICAgICAgICByeF9zYW1wbGUgfD0gKChyeF9zYW1wbGUgJiAweDgwMFUpID8gMHhGMDAwVSA6IDB4MFUpOyAvKiBTaWduIGV4dGVuZCBmcm9tIDEyIHRvIDE2IGJpdHMuICovCisgICAgICAgICpzYW1wbGVfcHRyID0gcnhfc2FtcGxlOworICAgICAgICBzYW1wbGVfcHRyKys7CisgICAgfQorICAgIAorICAgIHNhbXBsZV9wdHIgPSAodWludDE2X3QgKikoJnNhbXBsZXNbMF0pOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXFfc2FtcGxlcyAqIDI7IGkgKz0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBpbnQxNl90IGlfdmFsdWU7CisgICAgICAgIHN0YXRpYyBpbnQxNl90IHFfdmFsdWU7CisKKyAgICAgICAgLyogQXZlcmFnZSBJICYgUSBjaGFubmVscyBzZXBhcmF0ZWx5LiAqLworICAgICAgICBpX3ZhbHVlID0gKihzYW1wbGVfcHRyICsgaSk7IC8qIFNpZ24gZXh0ZW5kIGZyb20gMTIgdG8gMTYgYml0cy4gKi8KKyAgICAgICAgcV92YWx1ZSA9ICooc2FtcGxlX3B0ciArIGkgKyAxKTsgLyogU2lnbiBleHRlbmQgZnJvbSAxMiB0byAxNiBiaXRzLiAqLworICAgICAgICBhdmdfaSArPSAoKGZsb2F0KWlfdmFsdWUgLSBhdmdfaSkgLyAoZmxvYXQpKGkgKyAxKTsgIC8qIFJvbGxpbmcgYXZlcmFnZSBJICovCisgICAgICAgIGF2Z19xICs9ICgoZmxvYXQpcV92YWx1ZSAtIGF2Z19xKSAvIChmbG9hdCkoaSArIDEpOyAgLyogUm9sbGluZyBhdmVyYWdlIFEgKi8KKyAgICB9CisgICAgWGN2ckNhbERlbGF5KDEwKTsKKyAgICAqaV9hdmcgPSAoaW50MTZfdClhdmdfaTsKKyAgICAqcV9hdmcgPSAoaW50MTZfdClhdmdfcTsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogXGJyaWVmICBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgKERDIHZhbHVlKSBiYXNlZCBvbiBhIGxhcmdlciBzZXQgb2YgZGlnaXRhbCBzYW1wbGVzIG9mIEkgYW5kIFEuCisgKgorICogXHBhcmFtW2luXSBpX2F2ZyAtIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIGZvciBzdG9yaW5nIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2UgZm9yIEkgY2hhbm5lbCBzYW1wbGVzLgorICogXHBhcmFtW2luXSBxX2F2ZyAtIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIGZvciBzdG9yaW5nIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2UgZm9yIFEgY2hhbm5lbCBzYW1wbGVzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcnhfZGNfc2FtcGxlX2F2ZXJhZ2VfbG9uZyhpbnQxNl90ICogaV9hdmcsIGludDE2X3QgKiBxX2F2ZykgCit7CisgICAgc3RhdGljIHVpbnQzMl90IHNhbXBsZXNbNTEyXTsgLyogNTQ0KjIqMiAoZW50aXJlIHBhY2tldCByYW0xLzIgc2l6ZSkgKi8KKyAgICB1aW50MTZfdCBpOworICAgIHVpbnQzMl90IHJ4X3NhbXBsZTsKKyAgICB1aW50MTZfdCAqIHNhbXBsZV9wdHI7CisgICAgdWludDMyX3QgdGVtcCwgZW5kX29mX3J4X3d1OworICAgIHVpbnQzMl90IG51bV9pcV9zYW1wbGVzOworICAgIGZsb2F0IGF2Z19pID0gMDsKKyAgICBmbG9hdCBhdmdfcSA9IDA7CisKKyAgICBudW1faXFfc2FtcGxlcyA9IDUxMjsKKworICAgIC8qIENsZWFyIHRoZSBlbnRpcmUgYWxsb2NhdGVkIHNhbXBsZSBidWZmZXIuICovCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9pcV9zYW1wbGVzOyBpKyspCisgICAgeworICAgICAgICBzYW1wbGVzW2ldPTA7CisgICAgfQorCisgICAgLyogQXNzdW1lIHRoaXMgaGFzIGJlZW4gY2FsbGVkICpBRlRFUiogUnhXdSBoYXMgY29tcGxldGVkLiAqLworICAgIC8qIFhDVlJfRm9yY2VSeFd1KCk7ICovCisKKyAgICAvKiBXYWl0IGZvciBUU00gdG8gcmVhY2ggdGhlIGVuZCBvZiB3YXJtdXAgKHVubGVzcyB5b3Ugd2FudCB0byBjYXB0dXJlIHNvbWUgc2FtcGxlcyBkdXJpbmcgRENPQyBjYWwgcGhhc2UpLiAqLworICAgIHRlbXAgPSBYQ1ZSX1RTTS0+RU5EX09GX1NFUTsKKyAgICBlbmRfb2Zfcnhfd3UgPSAodGVtcCAmIFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX01BU0spID4+IFhDVlJfVFNNX0VORF9PRl9TRVFfRU5EX09GX1JYX1dVX1NISUZUOworICAgIHdoaWxlICgoKCBYQ1ZSX01JU0MtPlhDVlJfU1RBVFVTICYgWENWUl9DVFJMX1hDVlJfU1RBVFVTX1RTTV9DT1VOVF9NQVNLKSA+PiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX1NISUZUICkgIT0gZW5kX29mX3J4X3d1KSB7fTsKKworICAgIGRiZ19yYW1faW5pdCgpOworICAgIC8qIEFyZ3VtZW50IGJlbG93IGlzICMgb2YgYnl0ZXMsIHNvICoyIChJK1EpIGFuZCAqMiAoMmJ5dGVzL3NhbXBsZSkgKi8KKyNpZiBSQURJT19JU19HRU5fM1AwCisgICAgZGJnX3JhbV9zdGFydF9jYXB0dXJlKERCR19QQUdFX1JYRElHSVEsIE5PX1NUQVJUX1RSSUcsIE5PX1NUT1BfVFJJRyk7CisgICAgZGJnX3JhbV93YWl0X2Zvcl9jb21wbGV0ZSgpOworICAgIGRiZ19yYW1fcG9zdHByb2NfY2FwdHVyZShEQkdfUEFHRV9SWERJR0lRLG51bV9pcV9zYW1wbGVzICogMiAqIDIsICZzYW1wbGVzWzBdKTsKKyAgICBkYmdfcmFtX3JlbGVhc2UoKTsKKyNlbHNlCisgICAgKHZvaWQpZGJnX3JhbV9jYXB0dXJlKERCR19QQUdFX1JYRElHSVEsIG51bV9pcV9zYW1wbGVzICogMiAqIDIsICZzYW1wbGVzWzBdKTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICAvKiBTaWduIGV4dGVuZCB0aGUgSVEgc2FtcGxlcyBpbiBwbGFjZSBpbiB0aGUgc2FtcGxlIGJ1ZmZlci4gKi8KKworICAgIHNhbXBsZV9wdHIgPSAodWludDE2X3QgKikoJnNhbXBsZXNbMF0pOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXFfc2FtcGxlcyAqIDI7IGkrKykKKyAgICB7CisgICAgICAgIHJ4X3NhbXBsZSA9ICpzYW1wbGVfcHRyOworICAgICAgICByeF9zYW1wbGUgfD0gKChyeF9zYW1wbGUgJiAweDgwMFUpID8gMHhGMDAwVSA6IDB4MFUpOyAvKiBTaWduIGV4dGVuZCBmcm9tIDEyIHRvIDE2IGJpdHMuICovCisgICAgICAgICpzYW1wbGVfcHRyID0gcnhfc2FtcGxlOworICAgICAgICBzYW1wbGVfcHRyKys7CisgICAgfQorICAgIAorICAgIHNhbXBsZV9wdHIgPSAodWludDE2X3QgKikoJnNhbXBsZXNbMF0pOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXFfc2FtcGxlcyAqIDI7IGkgKz0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBpbnQxNl90IGlfdmFsdWU7CisgICAgICAgIHN0YXRpYyBpbnQxNl90IHFfdmFsdWU7CisKKyAgICAgICAgLyogQXZlcmFnZSBJICYgUSBjaGFubmVscyBzZXBhcmF0ZWx5LiAqLworICAgICAgICBpX3ZhbHVlID0gKihzYW1wbGVfcHRyICsgaSk7IC8qIFNpZ24gZXh0ZW5kIGZyb20gMTIgdG8gMTYgYml0cyAqLworICAgICAgICBxX3ZhbHVlID0gKihzYW1wbGVfcHRyICsgaSArIDEpOyAvKiBTaWduIGV4dGVuZCBmcm9tIDEyIHRvIDE2IGJpdHMgKi8KKyAgICAgICAgYXZnX2kgKz0gKChmbG9hdClpX3ZhbHVlIC0gYXZnX2kpIC8gKGZsb2F0KShpICsgMSk7IC8qIFJvbGxpbmcgYXZlcmFnZSBJICovCisgICAgICAgIGF2Z19xICs9ICgoZmxvYXQpcV92YWx1ZSAtIGF2Z19xKSAvIChmbG9hdCkoaSArIDEpOyAvKiBSb2xsaW5nIGF2ZXJhZ2UgUSAqLworICAgIH0KKworICAgIFhjdnJDYWxEZWxheSgxMCk7CisgICAgKmlfYXZnID0gKGludDE2X3QpYXZnX2k7CisgICAgKnFfYXZnID0gKGludDE2X3QpYXZnX3E7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJ4X2RjX2VzdF9hdmVyYWdlIDogR2V0IERDIEVTVCB2YWx1ZXMgYW5kIHJldHVybiB0aGUgQXZlcmFnZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCByeF9kY19lc3RfYXZlcmFnZShpbnQxNl90ICogaV9hdmcsIGludDE2X3QgKiBxX2F2ZywgdWludDE2X3QgU2FtcGxlTnVtYmVyKQoreworICAgIGZsb2F0IGF2Z19pID0gMDsKKyAgICBmbG9hdCBhdmdfcSA9IDA7CisgICAgdWludDE2X3QgaSA9IDA7CisgICAgc3RhdGljIHVpbnQzMl90IGRjX3RlbXAsIHRlbXA7CisgICAgdWludDMyX3QgZW5kX29mX3J4X3d1ID0gMDsKKyAgICBzdGF0aWMgaW50MTZfdCBkY19tZWFzX2k7CisgICAgc3RhdGljIGludDE2X3QgZGNfbWVhc19xOworCisgICAgIC8qIFdhaXQgZm9yIFRTTSB0byByZWFjaCB0aGUgZW5kIG9mIHdhcm11cCAodW5sZXNzIHlvdSB3YW50IHRvIGNhcHR1cmUgc29tZSBzYW1wbGVzIGR1cmluZyBEQ09DIGNhbCBwaGFzZSkuICovCisgICAgdGVtcCA9IFhDVlJfVFNNLT5FTkRfT0ZfU0VROworICAgIGVuZF9vZl9yeF93dSA9ICh0ZW1wICYgWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1VfTUFTSykgPj4gWENWUl9UU01fRU5EX09GX1NFUV9FTkRfT0ZfUlhfV1VfU0hJRlQ7CisgICAgd2hpbGUgKCgoIFhDVlJfTUlTQy0+WENWUl9TVEFUVVMgJiBYQ1ZSX0NUUkxfWENWUl9TVEFUVVNfVFNNX0NPVU5UX01BU0spID4+IFhDVlJfQ1RSTF9YQ1ZSX1NUQVRVU19UU01fQ09VTlRfU0hJRlQgKSAhPSBlbmRfb2Zfcnhfd3UpIHt9OworCisgICAgLyogUmVhZCBEQ09DIERDIEVTVCByZWdpc3Rlci4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgU2FtcGxlTnVtYmVyOyBpKyspCisgICAgeworICAgICAgICBkY190ZW1wID0gWENWUl9SWF9ESUctPkRDT0NfRENfRVNUOworICAgICAgICBkY19tZWFzX2kgPSBkY190ZW1wICYgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX0lfTUFTSzsKKyAgICAgICAgdGVtcCA9IGRjX21lYXNfaTsKKyAgICAgICAgdGVtcCB8PSAoKHRlbXAgJiAweDgwMFUpID8gMHhGMDAwVSA6IDB4MFUpOyAvKiBTaWduIGV4dGVuZCBmcm9tIDEyIHRvIDE2IGJpdHMuICovCisgICAgICAgIGRjX21lYXNfaSA9IHRlbXA7CisgICAgICAgIGF2Z19pICs9IChmbG9hdCkgZGNfbWVhc19pOworCisgICAgICAgIGRjX21lYXNfcSA9IChkY190ZW1wICYgWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX1FfTUFTSykgPj4gWENWUl9SWF9ESUdfRENPQ19EQ19FU1RfRENfRVNUX1FfU0hJRlQ7CisgICAgICAgIHRlbXAgPSBkY19tZWFzX3E7CisgICAgICAgIHRlbXAgfD0gKCh0ZW1wICYgMHg4MDBVKSA/IDB4RjAwMFUgOiAweDBVKTsgLyogU2lnbiBleHRlbmQgZnJvbSAxMiB0byAxNiBiaXRzLiAqLworICAgICAgICBkY19tZWFzX3EgPSB0ZW1wOworICAgICAgICBhdmdfcSArPSAoZmxvYXQpIGRjX21lYXNfcTsKKyAgICB9CisKKyAgICBhdmdfaSAvPSAoZmxvYXQpIFNhbXBsZU51bWJlcjsKKyAgICBhdmdfcSAvPSAoZmxvYXQpIFNhbXBsZU51bWJlcjsKKworICAgICppX2F2ZyA9IChpbnQxNl90KWF2Z19pOworICAgICpxX2F2ZyA9IChpbnQxNl90KWF2Z19xOworfQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSB0cmltIG9mIHRoZSBCQkEgRENPQyBEQUMgb24gdGhlIERVVAorICoKKyAqIFxyZXR1cm4gc3RhdHVzIC0gMSBpZiBwYXNzZWQsIDAgaWYgZmFpbGVkLgorICoKKyAqIFxpbmdyb3VwIFB1YmxpY0FQSXMKKyAqCisgKiBcZGV0YWlscworICogICBSZXF1aXJlcyB0aGUgUlggdG8gYmUgd2FybWVkIHVwIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50OF90IHJ4X2JiYV9kY29jX2RhY190cmltX0RDZXN0KHZvaWQpIAoreworICAgIHVpbnQ4X3QgaTsKKyAgICBmbG9hdCB0ZW1wX21pID0gMDsKKyAgICBmbG9hdCB0ZW1wX21xID0gMDsKKyAgICBmbG9hdCB0ZW1wX3BpID0gMDsKKyAgICBmbG9hdCB0ZW1wX3BxID0gMDsKKyAgICBmbG9hdCB0ZW1wX3N0ZXAgPSAwOworCisgICAgdWludDMyX3QgYmJmX2Rjb2Nfc3RlcDsKKyAgICB1aW50MzJfdCBiYmZfZGNvY19zdGVwX3JjcDsKKyAgICBUWkFkY29jc3RlcF90IHR6YV9kY29jX3N0ZXBbMTFdOworICAgIHVpbnQ4X3Qgc3RhdHVzID0gMDsKKworICAgIHVpbnQ4X3QgYmJmX2RhY2luaXRfaSwgYmJmX2RhY2luaXRfcTsKKyAgICB1aW50OF90IHR6YV9kYWNpbml0X2ksIHR6YV9kYWNpbml0X3E7CisgICAgaW50MTZfdCBkY19tZWFzX2k7CisgICAgaW50MTZfdCBkY19tZWFzX3E7CisgICAgdWludDMyX3QgZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW4gPSAweDgwODAyMDIwOyAvKiBVc2VkIGluIDJuZCAmIDNyZCBHZW5lcmF0aW9uIERDT0MgVHJpbXMgb25seSAqLworICAgIHVpbnQzMl90IHRlbXA7CisKKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMF9zdGFjazsKKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMV9zdGFjazsKKyAgICB1aW50MzJfdCBhZ2NfY3RybF8xX3N0YWNrOworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX3N0YWNrOworICAgIHVpbnQzMl90IGRjb2NfY2FsX2dhaW5fc3RhdGU7CisKKyAgICAvKiBTYXZlIHJlZ2lzdGVyICovCisgICAgZGNvY19jdHJsXzBfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzA7IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DVFJMXzAgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICBkY29jX2N0cmxfMV9zdGFjayA9IFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMTsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NUUkxfMSBmb3IgbGF0ZXIgcmVzdG9yZSAqLworICAgIHJ4X2RpZ19jdHJsX3N0YWNrID0gIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTDsgLyogU2F2ZSBzdGF0ZSBvZiBSWF9ESUdfQ1RSTCBmb3IgbGF0ZXIgcmVzdG9yZSAqLworICAgIGFnY19jdHJsXzFfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMTsgLyogU2F2ZSBzdGF0ZSBvZiBSWF9ESUdfQ1RSTCBmb3IgbGF0ZXIgcmVzdG9yZSAqLworICAgIGRjb2NfY2FsX2dhaW5fc3RhdGUgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTjsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NBTF9HQUlOIGZvciBsYXRlciByZXN0b3JlICovCisKKyAgICAvKiBSZWdpc3RlciBjb25maWcgKi8KKyAgICAvKiBFbnN1cmUgQUdDLCBEQ09DIGFuZCBSWF9ESUdfQ1RSTCBpcyBpbiBjb3JyZWN0IG1vZGUgKi8KKyAgICB0ZW1wID0gWENWUl9SWF9ESUctPlJYX0RJR19DVFJMOworICAgIHRlbXAgJj0gflhDVlJfUlhfRElHX1JYX0RJR19DVFJMX1JYX0FHQ19FTl9NQVNLOyAvKiBUdXJuIE9GRiBBR0MgKi8KKyAgICB0ZW1wICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ09DX0NBTF9FTl9NQVNLOyAvKiBEaXNhYmxlIGZvciBTVyBjb250cm9sIG9mIERDT0MgKi8KKyAgICB0ZW1wICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9EQ19SRVNJRF9FTl9NQVNLOyAvKiBEaXNhYmxlIGZvciBTVyBjb250cm9sIG9mIERDT0MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSB0ZW1wOworCisgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU4oMSkgfCAvKiBFbmFibGUgTE5BIE1hbnVhbCBHYWluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU4oMSkgfCAvKiBFbmFibGUgQkJBIE1hbnVhbCBHYWluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0xOQV9VU0VSX0dBSU4oMHgwKSB8IC8qIFNldCBMTkEgTWFudWFsIEdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX1VTRVJfR0FJTigweDApOyAvKiBTZXQgQkJBIE1hbnVhbCBHYWluICovCisKKyAgICAvKiBEQ09DX0NUUkxfMCBAIDQwMDVfQzAyQyAtLSBEZWZpbmUgZGVmYXVsdCBEQ09DIERBQyBzZXR0aW5ncyBpbiBtYW51YWwgbW9kZSAqLworICAgIHRlbXAgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzA7CisgICAgdGVtcCB8PSAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU4oMSk7IC8qIEVuYWJsZSAgTWFudWFsIERDT0MgKi8KKyAgICB0ZW1wIHw9ICBYQ1ZSX1JYX0RJR19EQ09DX0NUUkxfMF9EQ09DX0NPUlJFQ1RfU1JDKDEpOyAvKiBFbnN1cmUgRENPQyBUcmFja2luZyBpcyBlbmFibGVkICovCisgICAgdGVtcCB8PSAgWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19UUktfRVNUX09WUigxKTsgLyogRW5hYmxlIERDIEVzdGltYXRvciAqLworICAgIHRlbXAgfD0gIFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTigxKTsgLyogRW5zdXJlIERDIGNvcnJlY3Rpb24gaXMgZW5hYmxlZCAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IHRlbXA7CisKKyAgICBYQ1ZSX1JYX0RJRy0+RENPQ19EQUNfSU5JVCA9IFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9JKDB4MjApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKDB4MjApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JKDB4ODApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKDB4ODApOworCisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwpOworCisgICAgLyogU2V0IGRlZmF1bHQgRENPQyBEQUMgSU5JVCBWYWx1ZSAqLworICAgIGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluID0gWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQ7IC8qIFN0b3JlIERDT0MgREFDIElOSVQgdmFsdWVzICovCisgICAgYmJmX2RhY2luaXRfaSA9IChkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiAmIDB4MDAwMDAwRkZVKTsKKyAgICBiYmZfZGFjaW5pdF9xID0gKGRjb2NfaW5pdF9yZWdfdmFsdWVfZGNnYWluICYgMHgwMDAwRkYwMFUpPj44OworICAgIHR6YV9kYWNpbml0X2kgPSAoZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW4gJiAweDAwRkYwMDAwVSk+PjE2OworICAgIHR6YV9kYWNpbml0X3EgPSBkY29jX2luaXRfcmVnX3ZhbHVlX2RjZ2FpbiA+PiAyNDsKKworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsICogNCk7CisgICAgcnhfZGNfZXN0X2F2ZXJhZ2UoJmRjX21lYXNfaSwgJmRjX21lYXNfcSwgNjQpOworICAgIG1lYXN1cmVtZW50X3RibDJbSV9DSEFOTkVMXVtOT01JTkFMMl0uc3RlcF92YWx1ZSA9IHN3ZWVwX3N0ZXBfdmFsdWVzMltOT01JTkFMMl07CisgICAgbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW05PTUlOQUwyXS5zdGVwX3ZhbHVlID0gc3dlZXBfc3RlcF92YWx1ZXMyW05PTUlOQUwyXTsKKyAgICBtZWFzdXJlbWVudF90YmwyW0lfQ0hBTk5FTF1bTk9NSU5BTDJdLmludGVybmFsX21lYXN1cmVtZW50ID0gZGNfbWVhc19pOworICAgIG1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtOT01JTkFMMl0uaW50ZXJuYWxfbWVhc3VyZW1lbnQgPSBkY19tZWFzX3E7CisKKyAgICAvKiBTV0VFUCBJL1EgQ0hBTk5FTCAqLworICAgIC8qIEJCRiBORUcgU1RFUCAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koYmJmX2RhY2luaXRfaSAtIDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUShiYmZfZGFjaW5pdF9xIC0gMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JKHR6YV9kYWNpbml0X2kpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9RKHR6YV9kYWNpbml0X3EpOworICAgIFhjdnJDYWxEZWxheShUc2V0dGxlQ2FsICogMik7CisKKyAgICByeF9kY19lc3RfYXZlcmFnZSgmZGNfbWVhc19pLCAmZGNfbWVhc19xLCA2NCk7CisgICAgbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW0JCRl9ORUddLnN0ZXBfdmFsdWUgPSAtMTY7CisgICAgbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW0JCRl9ORUddLnN0ZXBfdmFsdWUgPSAtMTY7CisgICAgbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW0JCRl9ORUddLmludGVybmFsX21lYXN1cmVtZW50ID0gZGNfbWVhc19pOworICAgIG1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfTkVHXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfcTsKKworCisgICAgLyogQkJGIFBPUyBTVEVQICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSShiYmZfZGFjaW5pdF9pICsgMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKGJiZl9kYWNpbml0X3EgKyAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX0kodHphX2RhY2luaXRfaSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1EodHphX2RhY2luaXRfcSk7CisgICAgWGN2ckNhbERlbGF5KFRzZXR0bGVDYWwgKiAyKTsKKyAgICByeF9kY19lc3RfYXZlcmFnZSgmZGNfbWVhc19pLCAmZGNfbWVhc19xLCA2NCk7CisgICAgbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW0JCRl9QT1NdLnN0ZXBfdmFsdWUgPSArMTY7CisgICAgbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW0JCRl9QT1NdLnN0ZXBfdmFsdWUgPSArMTY7CisgICAgbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW0JCRl9QT1NdLmludGVybmFsX21lYXN1cmVtZW50ID0gZGNfbWVhc19pOworICAgIG1lYXN1cmVtZW50X3RibDJbUV9DSEFOTkVMXVtCQkZfUE9TXS5pbnRlcm5hbF9tZWFzdXJlbWVudCA9IGRjX21lYXNfcTsKKworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gZGNvY19pbml0X3JlZ192YWx1ZV9kY2dhaW47IC8qIFJldHVybiBEQUMgc2V0dGluZyB0byBpbml0aWFsICovCisKKyAgICAvKiBDYWxjdWxhdGUgQkJGIERDT0MgU1RFUFMsIFJFQ0lQUk9DQUxTICovCisgICAgdGVtcF9taSA9IGNhbGNfZGNvY19kYWNfc3RlcCgmbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW0JCRl9ORUddLCAmbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW05PTUlOQUwyXSk7CisgICAgdGVtcF9tcSA9IGNhbGNfZGNvY19kYWNfc3RlcCgmbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW0JCRl9ORUddLCAmbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW05PTUlOQUwyXSk7CisgICAgdGVtcF9waSA9IGNhbGNfZGNvY19kYWNfc3RlcCgmbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW0JCRl9QT1NdLCAmbWVhc3VyZW1lbnRfdGJsMltJX0NIQU5ORUxdW05PTUlOQUwyXSk7CisgICAgdGVtcF9wcSA9IGNhbGNfZGNvY19kYWNfc3RlcCgmbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW0JCRl9QT1NdLCAmbWVhc3VyZW1lbnRfdGJsMltRX0NIQU5ORUxdW05PTUlOQUwyXSk7CisKKwl0ZW1wX3N0ZXAgPSAodGVtcF9taSArIHRlbXBfcGkgKyB0ZW1wX21xICsgdGVtcF9wcSkgLyA0OworICAgIGJiZl9kY29jX3N0ZXAgPSAodWludDMyX3Qpcm91bmRmKHRlbXBfc3RlcCAqIDhVKTsKKworICAgIGlmICgoYmJmX2Rjb2Nfc3RlcCA+IDI2NSkgJiAoYmJmX2Rjb2Nfc3RlcCA8IDMwNSkpCisgICAgeworICAgICAgICBiYmZfZGNvY19zdGVwX3JjcCA9ICh1aW50MzJfdClyb3VuZGYoKGZsb2F0KTB4ODAwMFUgLyB0ZW1wX3N0ZXApOworCisgICAgICAgIC8qIENhbGN1bGF0ZSBUWkEgRENPQyBTVEVQUyAmIFJFQ0lQUk9DQUxTIGFuZCBJUV9EQ19HQUlOX01JU01BVENIICovCisgICAgICAgIGZvciAoaSA9IFRaQV9TVEVQX04wOyBpIDw9IFRaQV9TVEVQX04xMDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDYWxjdWxhdGUgVFpBIERDT0MgU1RFUFNJWkUgJiBpdHMgUkVDSVBST0NBTCAqLworICAgICAgICAgICAgc3dpdGNoKGkpeworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjA6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IChiYmZfZGNvY19zdGVwPj4zVSkgLyAzLjZGOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04xOgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDFfaW5pdCA+PiAxNikgLyAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDBfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjI6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wMl9pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wMV9pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OMzoKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAzX2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzAyX2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX040OgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDRfaW5pdCA+PiAxNikgLyAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDNfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjU6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNV9pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wNF9pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9ONjoKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA2X2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA1X2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX043OgorICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0ZXAgPSB0ZW1wX3N0ZXAgKiAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDdfaW5pdCA+PiAxNikgLyAoeGN2cl9jb21tb25fY29uZmlnLmRjb2NfdHphX3N0ZXBfMDZfaW5pdCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFpBX1NURVBfTjg6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfc3RlcCA9IHRlbXBfc3RlcCAqICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wOF9pbml0ID4+IDE2KSAvICh4Y3ZyX2NvbW1vbl9jb25maWcuZGNvY190emFfc3RlcF8wN19pbml0ID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUWkFfU1RFUF9OOToKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA5X2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA4X2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRaQV9TVEVQX04xMDoKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGVwID0gdGVtcF9zdGVwICogKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzEwX2luaXQgPj4gMTYpIC8gKHhjdnJfY29tbW9uX2NvbmZpZy5kY29jX3R6YV9zdGVwXzA5X2luaXQgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHphX2Rjb2Nfc3RlcFtpLVRaQV9TVEVQX04wXS5kY29jX3N0ZXAgPSAodWludDMyX3Qpcm91bmRmKHRlbXBfc3RlcCAqIDgpOworICAgICAgICAgICAgdHphX2Rjb2Nfc3RlcFtpLVRaQV9TVEVQX04wXS5kY29jX3N0ZXBfcmNwID0gKHVpbnQzMl90KXJvdW5kZigoZmxvYXQpMHg4MDAwIC8gdGVtcF9zdGVwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE1ha2UgdGhlIHRyaW1zIGFjdGl2ZSAqLworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19CQkFfU1RFUCA9IFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUChiYmZfZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfQkJBX1NURVBfQkJBX0RDT0NfU1RFUF9SRUNJUChiYmZfZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzAgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzBfRENPQ19UWkFfU1RFUF9HQUlOXzAodHphX2Rjb2Nfc3RlcFswXS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8wX0RDT0NfVFpBX1NURVBfUkNQXzAodHphX2Rjb2Nfc3RlcFswXS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMSA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMV9EQ09DX1RaQV9TVEVQX0dBSU5fMSh0emFfZGNvY19zdGVwWzFdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzFfRENPQ19UWkFfU1RFUF9SQ1BfMSh0emFfZGNvY19zdGVwWzFdLmRjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF8yID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8yX0RDT0NfVFpBX1NURVBfR0FJTl8yKHR6YV9kY29jX3N0ZXBbMl0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfMl9EQ09DX1RaQV9TVEVQX1JDUF8yKHR6YV9kY29jX3N0ZXBbMl0uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzMgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzNfRENPQ19UWkFfU1RFUF9HQUlOXzModHphX2Rjb2Nfc3RlcFszXS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8zX0RDT0NfVFpBX1NURVBfUkNQXzModHphX2Rjb2Nfc3RlcFszXS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNCA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNF9EQ09DX1RaQV9TVEVQX0dBSU5fNCh0emFfZGNvY19zdGVwWzRdLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzRfRENPQ19UWkFfU1RFUF9SQ1BfNCh0emFfZGNvY19zdGVwWzRdLmRjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF81ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF81X0RDT0NfVFpBX1NURVBfR0FJTl81KHR6YV9kY29jX3N0ZXBbNV0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfNV9EQ09DX1RaQV9TVEVQX1JDUF81KHR6YV9kY29jX3N0ZXBbNV0uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzYgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzZfRENPQ19UWkFfU1RFUF9HQUlOXzYodHphX2Rjb2Nfc3RlcFs2XS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF82X0RDT0NfVFpBX1NURVBfUkNQXzYodHphX2Rjb2Nfc3RlcFs2XS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfNyA9IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfN19EQ09DX1RaQV9TVEVQX0dBSU5fNyh0emFfZGNvY19zdGVwWzddLmRjb2Nfc3RlcCkgfCBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzdfRENPQ19UWkFfU1RFUF9SQ1BfNyh0emFfZGNvY19zdGVwWzddLmRjb2Nfc3RlcF9yY3ApOworICAgICAgICBYQ1ZSX1JYX0RJRy0+RENPQ19UWkFfU1RFUF84ID0gWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF84X0RDT0NfVFpBX1NURVBfR0FJTl84KHR6YV9kY29jX3N0ZXBbOF0uZGNvY19zdGVwKSB8IFhDVlJfUlhfRElHX0RDT0NfVFpBX1NURVBfOF9EQ09DX1RaQV9TVEVQX1JDUF84KHR6YV9kY29jX3N0ZXBbOF0uZGNvY19zdGVwX3JjcCk7CisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX1RaQV9TVEVQXzkgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzlfRENPQ19UWkFfU1RFUF9HQUlOXzkodHphX2Rjb2Nfc3RlcFs5XS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF85X0RDT0NfVFpBX1NURVBfUkNQXzkodHphX2Rjb2Nfc3RlcFs5XS5kY29jX3N0ZXBfcmNwKTsKKyAgICAgICAgWENWUl9SWF9ESUctPkRDT0NfVFpBX1NURVBfMTAgPSBYQ1ZSX1JYX0RJR19EQ09DX1RaQV9TVEVQXzEwX0RDT0NfVFpBX1NURVBfR0FJTl8xMCh0emFfZGNvY19zdGVwWzEwXS5kY29jX3N0ZXApIHwgWENWUl9SWF9ESUdfRENPQ19UWkFfU1RFUF8xMF9EQ09DX1RaQV9TVEVQX1JDUF8xMCh0emFfZGNvY19zdGVwWzEwXS5kY29jX3N0ZXBfcmNwKTsKKworICAgICAgICBzdGF0dXMgPSAxOyAvKiBTdWNjZXNzICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IDA7IC8qIEZhaWx1cmUgKi8KKyAgICB9CisKKyAgICAvKiBSZXN0b3JlIFJlZ2lzdGVycyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IGRjb2NfY3RybF8wX3N0YWNrOyAvKiBSZXN0b3JlIERDT0NfQ1RSTF8wIHN0YXRlIHRvIHByaW9yIHNldHRpbmdzICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8xID0gZGNvY19jdHJsXzFfc3RhY2s7IC8qIFJlc3RvcmUgRENPQ19DVFJMXzEgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSByeF9kaWdfY3RybF9zdGFjazsgLyogUmVzdG9yZSBSWF9ESUdfQ1RSTCBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NBTF9HQUlOID0gZGNvY19jYWxfZ2Fpbl9zdGF0ZTsgLyogUmVzdG9yZSBEQ09DX0NBTF9HQUlOIHN0YXRlIHRvIHByaW9yIHNldHRpbmcgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IGFnY19jdHJsXzFfc3RhY2s7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKworICAgcmV0dXJuIHN0YXR1czsKK30KKworLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRENPQ19EQUNfSU5JVF9DYWwgOiBzbG9wZSBzaWduIHNlZWsgZGVwZW5kaW5nIG9uIG1lYXN1cmUncyBzaWduCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIERDT0NfREFDX0lOSVRfQ2FsKHVpbnQ4X3Qgc3RhbmRhbG9uZV9vcGVyYXRpb24pCit7CisgICAgaW50MTZfdCBkY19tZWFzX2kgPSAyMDAwLCBkY19tZWFzX2lfcCA9IDIwMDA7CisgICAgaW50MTZfdCBkY19tZWFzX3EgPSAyMDAwLCBkY19tZWFzX3FfcCA9IDIwMDA7CisgICAgdWludDhfdCBjdXJyX3R6YV9kYWNfaSwgY3Vycl90emFfZGFjX3E7CisgICAgdWludDhfdCBjdXJyX2JiYV9kYWNfaSwgY3Vycl9iYmFfZGFjX3E7CisgICAgdWludDhfdCBwX3R6YV9kYWNfaSwgcF90emFfZGFjX3E7CisgICAgdWludDhfdCBwX2JiYV9kYWNfaSwgcF9iYmFfZGFjX3E7CisgICAgdWludDhfdCBpID0gMDsKKyAgICB1aW50OF90IGJiYV9nYWluID0gMTE7CisgICAgYm9vbCBUWkFfSV9PSyA9IDAsIFRaQV9RX09LID0gMCwgQkJBX0lfT0sgPSAwLCBCQkFfUV9PSyA9IDA7CisKKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMF9zdGFjazsKKyAgICB1aW50MzJfdCBkY29jX2N0cmxfMV9zdGFjazsKKyAgICB1aW50MzJfdCBhZ2NfY3RybF8xX3N0YWNrOworICAgIHVpbnQzMl90IHJ4X2RpZ19jdHJsX3N0YWNrOworICAgIHVpbnQzMl90IGRjb2NfY2FsX2dhaW5fc3RhdGU7CisgICAgdWludDMyX3QgeGN2cl9jdHJsX3N0YWNrOworCisgICAgdWludDMyX3QgdGVtcDsKKworICAgIC8qIFNhdmUgcmVnaXN0ZXJzICovCisgICAgZGNvY19jdHJsXzBfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DVFJMXzA7IC8qIFNhdmUgc3RhdGUgb2YgRENPQ19DVFJMXzAgZm9yIGxhdGVyIHJlc3RvcmUgKi8KKyAgICBkY29jX2N0cmxfMV9zdGFjayA9IFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMTsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NUUkxfMSBmb3IgbGF0ZXIgcmVzdG9yZSAqLworICAgIHJ4X2RpZ19jdHJsX3N0YWNrID0gIFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTDsgLyogU2F2ZSBzdGF0ZSBvZiBSWF9ESUdfQ1RSTCBmb3IgbGF0ZXIgcmVzdG9yZSAqLworICAgIGFnY19jdHJsXzFfc3RhY2sgPSBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMTsgLyogU2F2ZSBzdGF0ZSBvZiBSWF9ESUdfQ1RSTCBmb3IgbGF0ZXIgcmVzdG9yZSAqLworICAgIGRjb2NfY2FsX2dhaW5fc3RhdGUgPSBYQ1ZSX1JYX0RJRy0+RENPQ19DQUxfR0FJTjsgLyogU2F2ZSBzdGF0ZSBvZiBEQ09DX0NBTF9HQUlOIGZvciBsYXRlciByZXN0b3JlICovCisKKyAgICAvKiBXYXJtVXAgKi8KKyAgICBpZiAoc3RhbmRhbG9uZV9vcGVyYXRpb24pCisgICAgeworICAgICAgICB0ZW1wID0gWENWUl9NSVNDLT5YQ1ZSX0NUUkw7CisgICAgICAgIHhjdnJfY3RybF9zdGFjayA9IHRlbXA7CisgICAgICAgIHRlbXAgJj0gfihYQ1ZSX0NUUkxfWENWUl9DVFJMX1BST1RPQ09MX01BU0spOworICAgICAgICB0ZW1wIHw9IFhDVlJfQ1RSTF9YQ1ZSX0NUUkxfUFJPVE9DT0woMCk7CisgICAgICAgIFhDVlJfTUlTQy0+WENWUl9DVFJMID0gdGVtcDsKKyAgICAgICAgWENWUl9PdmVycmlkZUNoYW5uZWwoMTIsIDEpOyAvKiBDYWxpYnJhdGUgb24gY2hhbm5lbCAjMTIsIDIuNDI2IEdIeiBpbiBCTEUgbWFwICovCisgICAgICAgIFhDVlJfRm9yY2VSeFd1KCk7CisgICAgICAgIFhjdnJDYWxEZWxheSgyMDAwKTsKKyAgICB9IAorCisgICAgLyogUmVnaXN0ZXIgY29uZmlnICovCisgICAgLyogRW5zdXJlIEFHQywgRENPQyBhbmQgUlhfRElHX0NUUkwgaXMgaW4gY29ycmVjdCBtb2RlICovCisgICAgdGVtcCA9IFhDVlJfUlhfRElHLT5SWF9ESUdfQ1RSTDsKKyAgICB0ZW1wICY9IH5YQ1ZSX1JYX0RJR19SWF9ESUdfQ1RSTF9SWF9BR0NfRU5fTUFTSzsgLyogVHVybiBPRkYgQUdDICovCisgICAgdGVtcCAmPSB+WENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENPQ19DQUxfRU5fTUFTSzsgLyogRGlzYWJsZSBmb3IgU1cgY29udHJvbCBvZiBEQ09DICovCisgICAgdGVtcCAmPSB+WENWUl9SWF9ESUdfUlhfRElHX0NUUkxfUlhfRENfUkVTSURfRU5fTUFTSzsgLyogRGlzYWJsZSBmb3IgU1cgY29udHJvbCBvZiBEQ09DICovCisgICAgWENWUl9SWF9ESUctPlJYX0RJR19DVFJMID0gdGVtcDsKKworICAgIFhDVlJfUlhfRElHLT5BR0NfQ1RSTF8xID0gWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0xOQV9HQUlOX0VOKDEpIHwgLyogRW5hYmxlIExOQSBNYW51YWwgR2FpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9VU0VSX0JCQV9HQUlOX0VOKDEpIHwgLyogRW5hYmxlIEJCQSBNYW51YWwgR2FpbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfQUdDX0NUUkxfMV9MTkFfVVNFUl9HQUlOKDB4MCkgfCAvKiBTZXQgTE5BIE1hbnVhbCBHYWluICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX0JCQV9VU0VSX0dBSU4oMHgwKTsgLyogU2V0IEJCQSBNYW51YWwgR2FpbiAqLworCisgICAgLyogRENPQ19DVFJMXzAgQCA0MDA1X0MwMkMgLS0gRGVmaW5lIGRlZmF1bHQgRENPQyBEQUMgc2V0dGluZ3MgaW4gbWFudWFsIG1vZGUgKi8KKyAgICB0ZW1wID0gWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8wOworICAgIHRlbXAgfD0gWENWUl9SWF9ESUdfRENPQ19DVFJMXzBfRENPQ19NQU4oMSk7IC8qIEVuYWJsZSAgTWFudWFsIERDT0MgKi8KKyAgICB0ZW1wIHw9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9TUkMoMSk7IC8qIEVuc3VyZSBEQ09DIFRyYWNraW5nIGlzIGVuYWJsZWQgKi8KKyAgICB0ZW1wIHw9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfVFJLX0VTVF9PVlIoMSk7IC8qIEVuYWJsZSBEQyBFc3RpbWF0b3IgKi8KKyAgICB0ZW1wIHw9IFhDVlJfUlhfRElHX0RDT0NfQ1RSTF8wX0RDT0NfQ09SUkVDVF9FTigxKTsgLyogRW5zdXJlIERDIGNvcnJlY3Rpb24gaXMgZW5hYmxlZCAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IHRlbXA7CisKKyAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCk7CisKKyAgICAvKiBTZXQgZGVmYXVsdCBEQ09DIERBQyBJTklUIFZhbHVlICovICAgICAgICAKKyAgICAvKiBMTkEgYW5kIEJCQSBEQUMgU3dlZXAgKi8KKyAgICBjdXJyX2JiYV9kYWNfaSA9IDB4MjA7CisgICAgY3Vycl9iYmFfZGFjX3EgPSAweDIwOworICAgIGN1cnJfdHphX2RhY19pID0gMHg4MDsKKyAgICBjdXJyX3R6YV9kYWNfcSA9IDB4ODA7CisKKyAgICAvKiBQZXJmb3JtIGEgZmlyc3QgREMgbWVhc3VyZW1lbnQgdG8gZW5zdXJlIHRoYXQgbWVhc3VyZW1lbnQgaXMgbm90IGNsaXBwaW5nICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfREFDX0lOSVQgPSBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfSShjdXJyX2JiYV9kYWNfaSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX1EoY3Vycl9iYmFfZGFjX3EpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JKGN1cnJfdHphX2RhY19pKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfUShjdXJyX3R6YV9kYWNfcSk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgYmJhX2dhaW4tLTsKKyAgICAgICAgLyogU2V0IERBQyB1c2VyIGdhaW4gKi8KKyAgICAgICAgWENWUl9SWF9ESUctPkFHQ19DVFJMXzEgPSBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfTE5BX0dBSU5fRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfTE5BX1VTRVJfR0FJTigwKSB8IC8qIDIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19BR0NfQ1RSTF8xX1VTRVJfQkJBX0dBSU5fRU4oMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0FHQ19DVFJMXzFfQkJBX1VTRVJfR0FJTihiYmFfZ2FpbikgOyAvKiAxMCAqLworICAgICAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCAqIDIpOworICAgICAgICByeF9kY19lc3RfYXZlcmFnZSgmZGNfbWVhc19pLCAmZGNfbWVhc19xLCA2NCk7CisgICAgfSB3aGlsZSAoKEFCUyhkY19tZWFzX2kpID4gMTkwMCkgfCAoQUJTKGRjX21lYXNfcSkgPiAxOTAwKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMHgwRjsgaSsrKQorICAgIHsKKyAgICAgICAgLyogSSBjaGFubmVsIDogICovCisgICAgICAgIGlmICghVFpBX0lfT0spCisgICAgICAgIHsgICAKKyAgICAgICAgICAgIGlmICgoSVNJR04oZGNfbWVhc19pKSAhPSBJU0lHTihkY19tZWFzX2lfcCkpICYmIChpID4gMCkpCisgICAgICAgICAgICB7ICAgIAorICAgICAgICAgICAgICAgIGlmIChBQlMoZGNfbWVhc19pKSAhPSBNSU4oQUJTKGRjX21lYXNfaSksIEFCUyhkY19tZWFzX2lfcCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3Vycl90emFfZGFjX2kgPSBwX3R6YV9kYWNfaTsgCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVFpBX0lfT0sgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwX3R6YV9kYWNfaSA9IGN1cnJfdHphX2RhY19pOworCisgICAgICAgICAgICAgICAgaWYgKElTSUdOKGRjX21lYXNfaSkpIC8qIElmIHBvc2l0aWYgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJfdHphX2RhY19pLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJyX3R6YV9kYWNfaSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qIFN3ZWVwIEJCQSBJICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghQkJBX0lfT0spCisgICAgICAgICAgICB7ICAKKyAgICAgICAgICAgICAgICBpZiAoKElTSUdOKGRjX21lYXNfaSkgIT0gSVNJR04oZGNfbWVhc19pX3ApKSAmJiAoY3Vycl9iYmFfZGFjX2kgIT0gMHgyMCkpCisgICAgICAgICAgICAgICAgeyAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoQUJTKGRjX21lYXNfaSkgIT0gTUlOKEFCUyhkY19tZWFzX2kpLCBBQlMoZGNfbWVhc19pX3ApKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9iYmFfZGFjX2kgPSBwX2JiYV9kYWNfaTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEJCQV9JX09LID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBfYmJhX2RhY19pID0gY3Vycl9iYmFfZGFjX2k7CisgICAgICAgICAgICAgICAgICAgIGlmIChJU0lHTihkY19tZWFzX2kpKSAvKiBJZiBwb3NpdGlmICovCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfYmJhX2RhY19pLS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9iYmFfZGFjX2krKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFEgY2hhbm5lbCA6ICovCisgICAgICAgIGlmICghVFpBX1FfT0spCisgICAgICAgIHsgICAKKyAgICAgICAgICAgIGlmICgoSVNJR04oZGNfbWVhc19xKSAhPSBJU0lHTihkY19tZWFzX3FfcCkpICYmIChpID4gMCkpCisgICAgICAgICAgICB7ICAgIAorICAgICAgICAgICAgICAgIGlmIChBQlMoZGNfbWVhc19xKSAhPSBNSU4oQUJTKGRjX21lYXNfcSksIEFCUyhkY19tZWFzX3FfcCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3Vycl90emFfZGFjX3EgPSBwX3R6YV9kYWNfcTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVFpBX1FfT0sgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBfdHphX2RhY19xID0gY3Vycl90emFfZGFjX3E7CisgICAgICAgICAgICAgICAgaWYgKElTSUdOKGRjX21lYXNfcSkpIC8qIElmIHBvc2l0aWYgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJfdHphX2RhY19xLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJyX3R6YV9kYWNfcSsrOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CisgICAgICAgIH0gCisgICAgICAgIGVsc2UgIC8qIFN3ZWVwIEJCQSBRICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghQkJBX1FfT0spCisgICAgICAgICAgICB7ICAKKyAgICAgICAgICAgICAgICBpZiAoKElTSUdOKGRjX21lYXNfcSkgIT0gSVNJR04oZGNfbWVhc19xX3ApKSAmJiAoY3Vycl9iYmFfZGFjX3EgIT0gMHgyMCkpCisgICAgICAgICAgICAgICAgeyAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoQUJTKGRjX21lYXNfcSkgIT0gTUlOKEFCUyhkY19tZWFzX3EpLCBBQlMoZGNfbWVhc19xX3ApKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9iYmFfZGFjX3EgPSBwX2JiYV9kYWNfcTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBCQkFfUV9PSyA9IDE7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcF9iYmFfZGFjX3EgPSBjdXJyX2JiYV9kYWNfcTsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChJU0lHTihkY19tZWFzX3EpKSAvKiBJZiBwb3NpdGlmICovCisgICAgICAgICAgICAgICAgICAgICB7IAorICAgICAgICAgICAgICAgICAgICAgICBjdXJyX2JiYV9kYWNfcS0tOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX2JiYV9kYWNfcSsrOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBEQyBPSyBicmVhayA6ICovCisgICAgICAgIGlmIChUWkFfSV9PSyAmJiBUWkFfUV9PSyAmJiBCQkFfSV9PSyAmJiBCQkFfUV9PSykKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkY19tZWFzX2lfcCA9IGRjX21lYXNfaTsgLyogU3RvcmUgYXMgcHJldmlvdXMgdmFsdWUgKi8KKyAgICAgICAgZGNfbWVhc19xX3AgPSBkY19tZWFzX3E7IC8qIFN0b3JlIGFzIHByZXZpb3VzIHZhbHVlICovCisgICAgICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koY3Vycl9iYmFfZGFjX2kpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX0JCQV9EQ09DX0lOSVRfUShjdXJyX2JiYV9kYWNfcSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfVFpBX0RDT0NfSU5JVF9JKGN1cnJfdHphX2RhY19pKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1EoY3Vycl90emFfZGFjX3EpOworICAgICAgICBYY3ZyQ2FsRGVsYXkoVHNldHRsZUNhbCAqIDIpOworICAgICAgICByeF9kY19lc3RfYXZlcmFnZSgmZGNfbWVhc19pLCAmZGNfbWVhc19xLCA2NCk7CisgICAgfQorCisgICAgLyogQXBwbHkgb3B0aW1pemVkIERDT0MgREFDIElOSVQgOiAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0RBQ19JTklUID0gWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9CQkFfRENPQ19JTklUX0koY3Vycl9iYmFfZGFjX2kpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfUlhfRElHX0RDT0NfREFDX0lOSVRfQkJBX0RDT0NfSU5JVF9RKGN1cnJfYmJhX2RhY19xKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ1ZSX1JYX0RJR19EQ09DX0RBQ19JTklUX1RaQV9EQ09DX0lOSVRfSShjdXJyX3R6YV9kYWNfaSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENWUl9SWF9ESUdfRENPQ19EQUNfSU5JVF9UWkFfRENPQ19JTklUX1EoY3Vycl90emFfZGFjX3EpOworCisgICAgLyogV2FybURvd24gKi8KKyAgICBpZiAoc3RhbmRhbG9uZV9vcGVyYXRpb24pCisgICAgeworICAgICAgICBYQ1ZSX0ZvcmNlUnhXZCgpOyAvKiBEb24ndCBsZWF2ZSB0aGUgcmVjZWl2ZXIgcnVubmluZy4gKi8KKyAgICAgICAgWGN2ckNhbERlbGF5KDIwMCk7CisgICAgICAgIFhDVlJfT3ZlcnJpZGVDaGFubmVsKDB4RkYsMSk7IC8qIFJlbGVhc2UgY2hhbm5lbCBvdmVycmlkZXMgKi8KKyAgICAgICAgWENWUl9NSVNDLT5YQ1ZSX0NUUkwgPSB4Y3ZyX2N0cmxfc3RhY2s7CisgICAgfQorCisgICAgLyogUmVzdG9yZSByZWdpc3RlciAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NUUkxfMCA9IGRjb2NfY3RybF8wX3N0YWNrOyAvKiBSZXN0b3JlIERDT0NfQ1RSTF8wIHN0YXRlIHRvIHByaW9yIHNldHRpbmdzICovCisgICAgWENWUl9SWF9ESUctPkRDT0NfQ1RSTF8xID0gZGNvY19jdHJsXzFfc3RhY2s7IC8qIFJlc3RvcmUgRENPQ19DVFJMXzEgc3RhdGUgdG8gcHJpb3Igc2V0dGluZ3MgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+UlhfRElHX0NUUkwgPSByeF9kaWdfY3RybF9zdGFjazsgLyogUmVzdG9yZSBSWF9ESUdfQ1RSTCBzdGF0ZSB0byBwcmlvciBzZXR0aW5ncyAqLworICAgIFhDVlJfUlhfRElHLT5EQ09DX0NBTF9HQUlOID0gZGNvY19jYWxfZ2Fpbl9zdGF0ZTsgLyogUmVzdG9yZSBEQ09DX0NBTF9HQUlOIHN0YXRlIHRvIHByaW9yIHNldHRpbmcgKi8KKyAgICBYQ1ZSX1JYX0RJRy0+QUdDX0NUUkxfMSA9IGFnY19jdHJsXzFfc3RhY2s7IC8qIFNhdmUgc3RhdGUgb2YgUlhfRElHX0NUUkwgZm9yIGxhdGVyIHJlc3RvcmUgKi8KK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2ZzbF94Y3ZyX3RyaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU0YjllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9mc2xfeGN2cl90cmltLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworI2lmbmRlZiBfRlNMX1hDVlJfVFJJTV9IXworLyogQ2xhbmctZm9ybWF0IG9mZi4gKi8KKyNkZWZpbmUgX0ZTTF9YQ1ZSX1RSSU1fSF8KKy8qIENsYW5nLWZvcm1hdCBvbi4gKi8KKworI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisvKiEKKyogQGFkZHRvZ3JvdXAgeGN2cgorKiBAeworKi8KKworLyohIEBmaWxlKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQdWJsaWMgY29uc3RhbnQgZGVmaW5pdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQdWJsaWMgdHlwZSBkZWZpbml0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBcYnJpZWYgIFRoZSBlbnVtZXJhdGlvbnMgdXNlZCB0byBkZWZpbmUgdGhlIEkgJiBRIGNoYW5uZWwgc2VsZWN0aW9ucy4gKi8KK3R5cGVkZWYgZW51bQoreworICAgIElfQ0hBTk5FTCA9IDAsCisgICAgUV9DSEFOTkVMID0gMSwKKyAgICBOVU1fSV9RX0NIQU4gPSAyCit9IElRX3Q7CisKK3R5cGVkZWYgZW51bSAvKiBFbnVtZXJhdGlvbiBvZiBBRENfR0FJTl9DQUwgMiAqLworeworICAgIE5PTUlOQUwyID0gMCwKKyAgICBCQkZfTkVHID0gMSwKKyAgICBCQkZfUE9TID0gMiwKKyAgICBUWkFfU1RFUF9OMCA9IDMsCisgICAgVFpBX1NURVBfTjEgPSA0LAorICAgIFRaQV9TVEVQX04yID0gNSwKKyAgICBUWkFfU1RFUF9OMyA9IDYsCisgICAgVFpBX1NURVBfTjQgPSA3LAorICAgIFRaQV9TVEVQX041ID0gOCwKKyAgICBUWkFfU1RFUF9ONiA9IDksCisgICAgVFpBX1NURVBfTjcgPSAxMCwKKyAgICBUWkFfU1RFUF9OOCA9IDExLAorICAgIFRaQV9TVEVQX045ID0gMTIsCisgICAgVFpBX1NURVBfTjEwID0gMTMsCisgICAgVFpBX1NURVBfUDAgPSAxNCwKKyAgICBUWkFfU1RFUF9QMSA9IDE1LAorICAgIFRaQV9TVEVQX1AyID0gMTYsCisgICAgVFpBX1NURVBfUDMgPSAxNywKKyAgICBUWkFfU1RFUF9QNCA9IDE4LAorICAgIFRaQV9TVEVQX1A1ID0gMTksCisgICAgVFpBX1NURVBfUDYgPSAyMCwKKyAgICBUWkFfU1RFUF9QNyA9IDIxLAorICAgIFRaQV9TVEVQX1A4ID0gMjIsCisgICAgVFpBX1NURVBfUDkgPSAyMywKKyAgICBUWkFfU1RFUF9QMTAgPSAyNCwKKworICAgIE5VTV9TV0VFUF9TVEVQX0VOVFJJRVMyID0gMjUgLyogSW5jbHVkaW5nIHRoZSBiYXNlbGluZSBlbnRyeSAjMC4gKi8KK30gREFDX1NXRUVQX1NURVAyX3Q7CisKKy8qIFxicmllZiAgRGVmaW5lcyBhbiBlbnRyeSBpbiBhbiBhcnJheSBvZiBzdHJ1Y3RzIHRvIGRlc2NyaWJlIFRaQSBEQ09DIFNURVAgYW5kIFRaQV9EQ09DX1NURVBfUkVDSVBST0NBTC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDE2X3QgZGNvY19zdGVwOyAKKyAgICB1aW50MTZfdCBkY29jX3N0ZXBfcmNwOyAKKy8vICAgIHVpbnQxNl90IGRjb2Nfc3RlcF9xOworLy8gICAgdWludDE2X3QgZGNvY19zdGVwX3JjcF9xOworfSBUWkFkY29jc3RlcF90OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludDhfdCBzdGVwX3ZhbHVlOyAvKiBUaGUgb2Zmc2V0IGZyb20gbm9taW5hbCBEQUMgdmFsdWUgKHNlZSBzd2VlcF9zdGVwX3ZhbHVlc1tdKSAqLworICAgIGludDE2X3QgaW50ZXJuYWxfbWVhc3VyZW1lbnQ7IC8qIFRoZSB2YWx1ZSAoYXZlcmFnZSBjb2RlKSBtZWFzdXJlZCBmcm9tIERNQSBzYW1wbGVzLiAqLworLy8gICAgdWludDhfdCB2YWxpZDsgLyogU2V0IHRvIFRSVUUgKG5vbiB6ZXJvKSB3aGVuIGEgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGlzIHRhYmxlIGVudHJ5LiAqLworfSBHQUlOX0NBTENfVEJMX0VOVFJZMl9UOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEZWZpbml0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCByeF9kY19zYW1wbGVfYXZlcmFnZShpbnQxNl90ICogaV9hdmcsIGludDE2X3QgKiBxX2F2Zyk7Cit2b2lkIHJ4X2RjX3NhbXBsZV9hdmVyYWdlX2xvbmcoaW50MTZfdCAqIGlfYXZnLCBpbnQxNl90ICogcV9hdmcpOwordWludDhfdCByeF9iYmFfZGNvY19kYWNfdHJpbV9zaG9ydElRKHZvaWQpOwordm9pZCBYY3ZyQ2FsRGVsYXkodWludDMyX3QgdGltZSk7Cit2b2lkIHJ4X2RjX2VzdF9hdmVyYWdlKGludDE2X3QgKiBpX2F2ZywgaW50MTZfdCAqIHFfYXZnLCB1aW50MTZfdCBTYW1wbGVOdW1iZXIpOwordWludDhfdCByeF9iYmFfZGNvY19kYWNfdHJpbV9EQ2VzdCh2b2lkKTsKK3ZvaWQgRENPQ19EQUNfSU5JVF9DYWwodWludDhfdCBzdGFuZGFsb25lX29wZXJhdGlvbik7CisKKworCisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1hDVlJfVFJJTV9IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9YQ1ZSL2lmcl9yYWRpby5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9pZnJfcmFkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2UyMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9pZnJfcmFkaW8uYwpAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZGV2aWNlX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgImZzbF94Y3ZyLmgiCisjaW5jbHVkZSAiaWZyX3JhZGlvLmgiCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElGUl9SQU0gICAgICAgICAgICAgKDApCisKKyNpZiBSQURJT19JU19HRU5fM1AwCisjZGVmaW5lIFJESU5EWCAgICAgICAgICAgICAgKDB4NDFVKSAKKyNkZWZpbmUgSzNfQkFTRV9JTkRFWCAgICAgICAoMHgxMVUpIC8qIEJhc2VkIGZvciByZWFkIGluZGV4ICovCisjZWxzZQorI2RlZmluZSBSRFJTUkMgICAgICAgICAgICAgICgweDAzVSkgCisjZGVmaW5lIEtXNHhfNTEyX0JBU0UgICAgICAgKDB4MjAwMDBVKQorI2RlZmluZSBLVzR4XzI1Nl9CQVNFICAgICAgICgweDEwMDAwVSkKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyNpZiBSQURJT19JU19HRU5fMlAxCisjZGVmaW5lIEZURkEgICAgKEZURkUpCisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzJQMSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHJlYWRfYW5vdGhlcl9pZnJfd29yZCh2b2lkKTsKK3VpbnQzMl90IHJlYWRfZmlyc3RfaWZyX3dvcmQodWludDMyX3QgcmVhZF9hZGRyKTsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKK3VpbnQ2NF90IHJlYWRfaW5kZXhfaWZyKHVpbnQzMl90IHJlYWRfYWRkcik7CisjZWxzZQorLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmICBSZWFkcyBhIGxvY2F0aW9uIGluIGJsb2NrIDEgSUZSIGZvciB1c2UgYnkgdGhlIHJhZGlvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nIElGUiBkYXRhIGZyb20gZmxhc2ggbWVtb3J5IGZvciB0cmltIGxvYWRpbmcuCisgKgorICogQHBhcmFtIHJlYWRfYWRkciB0aGUgYWRkcmVzcyBpbiB0aGUgSUZSIHRvIGJlIHJlYWQuCisgKgorICogQGRldGFpbHMgVGhpcyBmdW5jdGlvbiB3cmFwcyBib3RoIHRoZSBHZW4yIHJlYWRfcmVzb3VyY2UgY29tbWFuZCBhbmQgdGhlIEdlbjIuMSBhbmQgR2VuMyByZWFkX2luZGV4CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBSQURJT19JU19HRU5fMlAxCit1aW50NjRfdCByZWFkX3Jlc291cmNlX2lmcih1aW50MzJfdCByZWFkX2FkZHIpOworI2Vsc2UKK3VpbnQzMl90IHJlYWRfcmVzb3VyY2VfaWZyKHVpbnQzMl90IHJlYWRfYWRkcik7CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzJQMSAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKwordm9pZCBzdG9yZV9zd190cmltKElGUl9TV19UUklNX1RCTF9FTlRSWV9UICogc3dfdHJpbV90YmwsIHVpbnQxNl90IG51bV9lbnRyaWVzLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBkYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBpZnJfcmVhZF9hZGRyOworCisjaWYgUkFESU9fSVNfR0VOXzNQMAorc3RhdGljIHVpbnQ2NF90IHBhY2tlZF9kYXRhX2xvbmc7IC8qIFN0b3JhZ2UgZm9yIDIgMzIgYml0IHZhbHVlcyB0byBiZSByZWFkIGJ5IHJlYWRfaW5kZXggKi8KK3N0YXRpYyB1aW50OF90IG51bV93b3Jkc19hdmFpbDsgLyogTnVtYmVyIG9mIDMyIGJpdCB3b3JkcyBhdmFpbGFibGUgaW4gcGFja2VkX2RhdGFfbG9uZyBzdG9yYWdlICovCitjb25zdCB1aW50MzJfdCBCTE9DS18xX0lGUltdPQoreworICAgIC8qIFJldmlzZWQgZmFsbGJhY2sgdGFibGUgd2hpY2ggc2hvdWxkIHdvcmsgd2l0aCB1bnRyaW1tZWQgcGFydHMgKi8KKyAgICAweEFCQ0RGRkZFVSwgLyogVmVyc2lvbiAjRkZGRSBpbmRpY2F0ZXMgZGVmYXVsdCB0cmltIHZhbHVlcyAqLworCisgICAgLyogVHJpbSB0YWJsZSBpcyBlbXB0eSBmb3IgR2VuMyBieSBkZWZhdWx0ICovCisKKyAgICAvKiBObyBUUklNX1NUQVRVUyBpbiBTVyBmYWxsYmFjayBhcnJheS4gKi8KKyAgICAweEZFRUQwRTBGVSAvKiBFbmQgb2YgRmlsZSAqLworfTsKKyNlbHNlCisjaWYgUkFESU9fSVNfR0VOXzJQMAorY29uc3QgdWludDMyX3QgQkxPQ0tfMV9JRlJbXT0KK3sKKyAgICAvKiBSZXZpc2VkIGZhbGxiYWNrIHRhYmxlIHdoaWNoIHNob3VsZCB3b3JrIHdpdGggdW50cmltbWVkIHBhcnRzICovCisgICAgMHhBQkNERkZGRVUsIC8qIFZlcnNpb24gI0ZGRkUgaW5kaWNhdGVzIGRlZmF1bHQgdHJpbSB2YWx1ZXMgKi8KKworICAgIDB4NDAwNTkxMkNVLCAvKiBSU0lNX0FOQV9UUklNIGFkZHJlc3MgKi8KKyAgICAweDc4NEIwMDAwVSwgLyogUlNJTV9BTkFfVFJJTSBkZWZhdWx0IHZhbHVlICovCisKKyAgICAvKiBObyBUUklNX1NUQVRVUyBpbiBTVyBmYWxsYmFjayBhcnJheS4gKi8KKyAgICAweEZFRUQwRTBGVSAvKiBFbmQgb2YgRmlsZSAqLworfTsKKyNlbHNlCitzdGF0aWMgdWludDY0X3QgcGFja2VkX2RhdGFfbG9uZzsgLyogU3RvcmFnZSBmb3IgMiAzMiBiaXQgdmFsdWVzIHRvIGJlIHJlYWQgYnkgcmVhZF9pbmRleCAqLworc3RhdGljIHVpbnQ4X3QgbnVtX3dvcmRzX2F2YWlsOyAvKiBOdW1iZXIgb2YgMzIgYml0IHdvcmRzIGF2YWlsYWJsZSBpbiBwYWNrZWRfZGF0YV9sb25nIHN0b3JhZ2UgKi8KK2NvbnN0IHVpbnQzMl90IEJMT0NLXzFfSUZSW109Cit7CisgICAgLyogUmV2aXNlZCBmYWxsYmFjayB0YWJsZSB3aGljaCBzaG91bGQgd29yayB3aXRoIHVudHJpbW1lZCBwYXJ0cyAqLworICAgIDB4QUJDREZGRkVVLCAvKiBWZXJzaW9uICNGRkZFIGluZGljYXRlcyBkZWZhdWx0IHRyaW0gdmFsdWVzICovCisKKyAgICAweDQwMDU5MTJDVSwgLyogUlNJTV9BTkFfVFJJTSBhZGRyZXNzICovCisgICAgMHg3ODRCMDAwMFUsIC8qIFJTSU1fQU5BX1RSSU0gZGVmYXVsdCB2YWx1ZSAqLworCisgICAgLyogTm8gVFJJTV9TVEFUVVMgaW4gU1cgZmFsbGJhY2sgYXJyYXkuICovCisgICAgMHhGRUVEMEUwRlUgLyogRW5kIG9mIEZpbGUgKi8KK307CisjZW5kaWYgLyogUkFESU9fSVNfR0VOXzJQMCAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgUmVhZCBjb21tYW5kIGZvciByZWFkaW5nIHRoZSBmaXJzdCAzMmJpdCB3b3JkIGZyb20gSUZSLCBlbmNhcHN1bGF0ZXMgZGlmZmVyZW50IAorICogIGZsYXNoIElGUiByZWFkIG1lY2hhbmlzbXMgZm9yIG11bHRpcGxlIGdlbmVyYXRpb25zIG9mIFNPQworICogCisgKiBccGFyYW0gcmVhZF9hZGRyIGZsYXNoIGFkZHJlc3MKKyAqIAorICogXHJldHVybiA4IGJ5dGVzIG9mIHBhY2tlZCBkYXRhIGNvbnRhaW5pbmcgcmFkaW8gdHJpbXMgb25seQorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgcmVhZF9maXJzdF9pZnJfd29yZCh1aW50MzJfdCByZWFkX2FkZHIpCit7CisgICAgaWZyX3JlYWRfYWRkciA9IHJlYWRfYWRkcjsKKyAgICByZXR1cm4gcmVhZF9hbm90aGVyX2lmcl93b3JkKCk7Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgUmVhZCBjb21tYW5kIGZvciByZWFkaW5nIGFkZGl0aW9uYWwgMzJiaXQgd29yZHMgZnJvbSBJRlIuIEVuY2Fwc3VsYXRlcyBtdWx0aXBsZSBJRlIgcmVhZCBtZWNoYW5pc21zLgorICogCisgKiBccGFyYW0gcmVhZF9hZGRyIGZsYXNoIGFkZHJlc3MKKyAqIAorICogXHJldHVybiA4IGJ5dGVzIG9mIHBhY2tlZCBkYXRhIGNvbnRhaW5pbmcgcmFkaW8gdHJpbXMgb25seQorICoKKyAqIFxyZW1hcmtzIFBSRS1DT05ESVRJT05TOgorICogIFRoZSBmdW5jdGlvbiByZWFkX2ZpcnN0X2lmcl93b3JkKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIHNvIHRoYXQgdGhlIGlmcl9yZWFkX2FkZHIgdmFyaWFibGUgaXMgc2V0dXAgcHJpb3IgdG8gdXNlLgorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgcmVhZF9hbm90aGVyX2lmcl93b3JkKHZvaWQpCit7CisgICAgdWludDMyX3QgcGFja2VkX2RhdGE7CisKKyNpZiAoUkFESU9fSVNfR0VOXzNQMCB8fCBSQURJT19JU19HRU5fMlAxKQorICAgIC8qIFVzaW5nIHNvbWUgc3RhdGljIHN0b3JhZ2UgYW5kIGFsdGVybmF0aW5nIHJlYWRzIHRvIHJlYWRfaW5kZXhfaWZyIHRvIHJlcGxhY2UgcmVhZF9yZXNvdXJjZV9pZnIgKi8KKyAgICBpZiAobnVtX3dvcmRzX2F2YWlsID09IDApCisgICAgeworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICAgICAgcGFja2VkX2RhdGFfbG9uZyA9IHJlYWRfaW5kZXhfaWZyKGlmcl9yZWFkX2FkZHIpOworI2Vsc2UgLyogVXNlIDY0IGJpdCByZXR1cm4gdmVyc2lvbiBvZiByZWFkX3Jlc291cmNlICovCisgICAgICAgIHBhY2tlZF9kYXRhX2xvbmcgPSByZWFkX3Jlc291cmNlX2lmcihpZnJfcmVhZF9hZGRyKTsKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICAgICAgbnVtX3dvcmRzX2F2YWlsID0gMjsKKyAgICAgICAgaWZyX3JlYWRfYWRkcisrOyAvKiBSZWFkIGluZGV4IGFkZHJlc3NlcyBpbmNyZW1lbnQgYnkgMSAqLworICAgIH0KKworICAgIHBhY2tlZF9kYXRhID0gKHVpbnQzMl90KShwYWNrZWRfZGF0YV9sb25nICYgMHhGRkZGRkZGRik7CisgICAgcGFja2VkX2RhdGFfbG9uZyA9IHBhY2tlZF9kYXRhX2xvbmcgPj4gMzI7CisgICAgbnVtX3dvcmRzX2F2YWlsLS07CisjZWxzZQorICAgIHBhY2tlZF9kYXRhID0gcmVhZF9yZXNvdXJjZV9pZnIoaWZyX3JlYWRfYWRkcik7CisgICAgaWZyX3JlYWRfYWRkciArPSA0OyAvKiBSZWFkIHJlc291cmNlIGFkZHJlc3NlcyBpbmNyZW1lbnQgYnkgNCAqLworI2VuZGlmIC8qIChSQURJT19JU19HRU5fM1AwIHx8IFJBRElPX0lTX0dFTl8yUDEpICovCisKKyAgICByZXR1cm4gcGFja2VkX2RhdGE7Cit9CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFJlYWQgY29tbWFuZCBmb3IgcmVhZGluZyBmcm9tIElGUiB1c2luZyBSRElOREVYIGNvbW1hbmQKKyAqIAorICogXHBhcmFtIHJlYWRfYWRkciBmbGFzaCBhZGRyZXNzCisgKiAKKyAqIFxyZXR1cm4gOCBieXRlcyBvZiBwYWNrZWQgZGF0YSBjb250YWluaW5nIHJhZGlvIHRyaW1zIG9ubHkKKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQ2NF90IHJlYWRfaW5kZXhfaWZyKHVpbnQzMl90IHJlYWRfYWRkcikKK3sKKyAgICB1aW50OF90IHJkaW5kZXggPSByZWFkX2FkZHI7CisgICAgdWludDY0X3QgcmVhZF9kYXRhOworICAgIHVpbnQ4X3QgaTsKKyAgICB1aW50MzJfdCBwcmltYXNrOworCisgICAgd2hpbGUgKChGVEZFX0ZTVEFUX0NDSUZfTUFTSyAmIEZURkUtPkZTVEFUKSA9PSAwKTsgLyogV2FpdCB0aWxsIENDSUY9MSB0byBtYWtlIHN1cmUgbm90IGludGVycnVwdGluZyBhIHByaW9yIG9wZXJhdGlvbiAqLworCisgICAgaWYgKChGVEZFLT5GU1RBVCAmIEZURkVfRlNUQVRfQUNDRVJSX01BU0spID09IEZURkVfRlNUQVRfQUNDRVJSX01BU0sgKSAKKyAgICB7CisgICAgICAgIEZURkUtPkZTVEFUID0gKDEgPDwgRlRGRV9GU1RBVF9BQ0NFUlJfU0hJRlQpOyAvKiBXcml0ZSAxIHRvIEFDQ0VFUiB0byBjbGVhciBlcnJvcnMgKi8KKyAgICB9CisKKyAgICBGVEZFLT5GQ0NPQlswXSA9IFJESU5EWDsKKyAgICBGVEZFLT5GQ0NPQlsxXSA9IHJkaW5kZXg7CisKKyAgICBwcmltYXNrID0gRGlzYWJsZUdsb2JhbElSUSgpOworICAgIEZURkUtPkZTVEFUID0gRlRGRV9GU1RBVF9DQ0lGX01BU0s7CisgICAgd2hpbGUoKEZURkVfRlNUQVRfQ0NJRl9NQVNLICYgRlRGRS0+RlNUQVQpID09IDApOyAvKiBXYWl0IHRpbGwgQ0NJRj0xICovCisgICAgRW5hYmxlR2xvYmFsSVJRKHByaW1hc2spOworCisgICAgLyogUGFjayByZWFkIGRhdGEgYmFjayBpbnRvIDY0IGJpdCB0eXBlICovCisgICAgcmVhZF9kYXRhID0gRlRGRS0+RkNDT0JbMTFdOyAvKiBNU0IgZ29lcyBpbiBmaXJzdCwgd2lsbCBiZSBzaGlmdGVkIGxlZnQgc2VxdWVudGlhbGx5ICovCisgICAgZm9yIChpID0gMTA7IGkgPiAzOyBpLS0pCisgICAgeworICAgICAgICByZWFkX2RhdGEgPSByZWFkX2RhdGEgPDwgODsKKyAgICAgICAgcmVhZF9kYXRhIHw9IEZURkUtPkZDQ09CW2ldOworICAgIH0KKworICAgIHJldHVybiByZWFkX2RhdGE7Cit9CisjZWxzZQorCisvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBcYnJpZWYgIFJlYWQgY29tbWFuZCBmb3IgcmVhZGluZyBmcm9tIElGUgorICogCisgKiBccGFyYW0gcmVhZF9hZGRyIGZsYXNoIGFkZHJlc3MKKyAqIAorICogXHJldHVybiBwYWNrZWQgZGF0YSBjb250YWluaW5nIHJhZGlvIHRyaW1zIG9ubHkKKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBSQURJT19JU19HRU5fMlAwCit1aW50MzJfdCByZWFkX3Jlc291cmNlX2lmcih1aW50MzJfdCByZWFkX2FkZHIpCit7IAorICAgIHVpbnQzMl90IHByaW1hc2s7CisgICAgdWludDMyX3QgcGFja2VkX2RhdGE7CisgICAgdWludDhfdCBmbGFzaF9hZGRyMjNfMTYsIGZsYXNoX2FkZHIxNV84LCBmbGFzaF9hZGRyN18wOworICAgIHVpbnQzMl90IHJlYWRfZGF0YTMxXzI0LCByZWFkX2RhdGEyM18xNiwgcmVhZF9kYXRhMTVfOCwgcmVhZF9kYXRhN18wOworCisgICAgZmxhc2hfYWRkcjIzXzE2ID0gKHVpbnQ4X3QpKChyZWFkX2FkZHIgJiAweEZGMDAwMCkgPj4gMTYpOworICAgIGZsYXNoX2FkZHIxNV84ID0gKHVpbnQ4X3QpKChyZWFkX2FkZHIgJiAweDAwRkYwMCkgPj4gOCk7CisgICAgZmxhc2hfYWRkcjdfMCA9ICh1aW50OF90KShyZWFkX2FkZHIgJiAweEZGKTsKKworICAgIHdoaWxlICgoRlRGQV9GU1RBVF9DQ0lGX01BU0sgJiBGVEZBLT5GU1RBVCkgPT0gMCk7IC8qIFdhaXQgdGlsbCBDQ0lGPTEgKi8KKworICAgIGlmICgoRlRGQS0+RlNUQVQgJiBGVEZBX0ZTVEFUX0FDQ0VSUl9NQVNLKSA9PSBGVEZBX0ZTVEFUX0FDQ0VSUl9NQVNLICkKKyAgICB7CisgICAgICAgIEZURkEtPkZTVEFUID0gKDE8PEZURkFfRlNUQVRfQUNDRVJSX1NISUZUKTsgLyogV3JpdGUgMSB0byBBQ0NFRVIgdG8gY2xlYXIgZXJyb3JzICovCisgICAgfQorCisgICAgRlRGQS0+RkNDT0IwID0gUkRSU1JDOworICAgIEZURkEtPkZDQ09CMSA9IGZsYXNoX2FkZHIyM18xNjsKKyAgICBGVEZBLT5GQ0NPQjIgPSBmbGFzaF9hZGRyMTVfODsKKyAgICBGVEZBLT5GQ0NPQjMgPSBmbGFzaF9hZGRyN18wOworICAgIEZURkEtPkZDQ09COCA9IDB4MDA7CisKKyAgICBwcmltYXNrID0gRGlzYWJsZUdsb2JhbElSUSgpOworICAgIEZURkEtPkZTVEFUID0gRlRGQV9GU1RBVF9DQ0lGX01BU0s7CisgICAgd2hpbGUgKChGVEZBX0ZTVEFUX0NDSUZfTUFTSyAmIEZURkEtPkZTVEFUKSA9PSAwKTsgLyogV2FpdCB0aWxsIENDSUY9MSAqLworICAgIEVuYWJsZUdsb2JhbElSUShwcmltYXNrKTsKKworICAgIC8qIFN0YXJ0IHJlYWRpbmcgKi8KKyAgICByZWFkX2RhdGEzMV8yNCA9IEZURkEtPkZDQ09CNDsgLyogRlRGQS0+RkNDT0JbNF0gKi8KKyAgICByZWFkX2RhdGEyM18xNiA9IEZURkEtPkZDQ09CNTsgLyogRlRGQS0+RkNDT0JbNV0gKi8KKyAgICByZWFkX2RhdGExNV84ICA9IEZURkEtPkZDQ09CNjsgLyogRlRGQS0+RkNDT0JbNl0gKi8KKyAgICByZWFkX2RhdGE3XzAgICA9IEZURkEtPkZDQ09CNzsgLyogRlRGQS0+RkNDT0JbN10gKi8KKworICAgIHBhY2tlZF9kYXRhID0gKHJlYWRfZGF0YTMxXzI0IDw8IDI0KSB8IChyZWFkX2RhdGEyM18xNiA8PCAxNikgfCAocmVhZF9kYXRhMTVfOCA8PCA4KSB8IChyZWFkX2RhdGE3XzAgPDwgMCk7CisKKyAgICByZXR1cm4gcGFja2VkX2RhdGE7Cit9CisjZWxzZQordWludDY0X3QgcmVhZF9yZXNvdXJjZV9pZnIodWludDMyX3QgcmVhZF9hZGRyKQoreyAKKyAgICB1aW50MzJfdCBwcmltYXNrOworICAgIHVpbnQ2NF90IHBhY2tlZF9kYXRhOworICAgIHVpbnQ4X3QgZmxhc2hfYWRkcjIzXzE2LCBmbGFzaF9hZGRyMTVfOCwgZmxhc2hfYWRkcjdfMDsKKyAgICB1aW50OF90IHJlYWRfZGF0YVs4XTsKKyAgICB1aW50NjRfdCB0ZW1wXzY0OworICAgIHVpbnQ4X3QgaTsKKworICAgIGZsYXNoX2FkZHIyM18xNiA9ICh1aW50OF90KSgocmVhZF9hZGRyICYgMHhGRjAwMDApID4+IDE2KTsKKyAgICBmbGFzaF9hZGRyMTVfOCA9ICh1aW50OF90KSgocmVhZF9hZGRyICYgMHgwMEZGMDApID4+IDgpOworICAgIGZsYXNoX2FkZHI3XzAgPSAodWludDhfdCkocmVhZF9hZGRyICYgMHhGRik7CisgICAgd2hpbGUoKEZURkVfRlNUQVRfQ0NJRl9NQVNLICYgRlRGRS0+RlNUQVQpID09IDApOyAvKiBXYWl0IHRpbGwgQ0NJRj0xICovCisKKyAgICBpZiAoKEZURkUtPkZTVEFUICYgRlRGRV9GU1RBVF9BQ0NFUlJfTUFTSykgPT0gRlRGRV9GU1RBVF9BQ0NFUlJfTUFTSyApCisgICAgeworICAgICAgICBGVEZFLT5GU1RBVCA9ICgxPDxGVEZFX0ZTVEFUX0FDQ0VSUl9TSElGVCk7IC8qIFdyaXRlIDEgdG8gQUNDRUVSIHRvIGNsZWFyIGVycm9ycyAqLworICAgIH0KKworICAgIEZURkUtPkZDQ09CMCA9IFJEUlNSQzsKKyAgICBGVEZFLT5GQ0NPQjEgPSBmbGFzaF9hZGRyMjNfMTY7CisgICAgRlRGRS0+RkNDT0IyID0gZmxhc2hfYWRkcjE1Xzg7CisgICAgRlRGRS0+RkNDT0IzID0gZmxhc2hfYWRkcjdfMDsKKyAgICBGVEZFLT5GQ0NPQjQgPSAweDAwOworCisgICAgcHJpbWFzayA9IERpc2FibGVHbG9iYWxJUlEoKTsKKyAgICBGVEZFLT5GU1RBVCA9IEZURkVfRlNUQVRfQ0NJRl9NQVNLOworICAgIHdoaWxlICgoRlRGRV9GU1RBVF9DQ0lGX01BU0sgJiBGVEZFLT5GU1RBVCkgPT0gMCk7IC8qIFdhaXQgdGlsbCBDQ0lGPTEgKi8KKyAgICBFbmFibGVHbG9iYWxJUlEocHJpbWFzayk7CisKKyAgICAvKiBTdGFydCByZWFkaW5nICovCisgICAgcmVhZF9kYXRhWzddID0gRlRGRS0+RkNDT0I0OworICAgIHJlYWRfZGF0YVs2XSA9IEZURkUtPkZDQ09CNTsKKyAgICByZWFkX2RhdGFbNV0gPSBGVEZFLT5GQ0NPQjY7CisgICAgcmVhZF9kYXRhWzRdID0gRlRGRS0+RkNDT0I3OworICAgIHJlYWRfZGF0YVszXSA9IEZURkUtPkZDQ09CODsKKyAgICByZWFkX2RhdGFbMl0gPSBGVEZFLT5GQ0NPQjk7CisgICAgcmVhZF9kYXRhWzFdID0gRlRGRS0+RkNDT0JBOworICAgIHJlYWRfZGF0YVswXSA9IEZURkUtPkZDQ09CQjsKKworICAgIHBhY2tlZF9kYXRhID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorICAgIHsKKyAgICAgICAgdGVtcF82NCA9IHJlYWRfZGF0YVtpXTsKKyAgICAgICAgcGFja2VkX2RhdGEgfD0gdGVtcF82NCA8PCAoaSAqIDgpOworICAgIH0KKworICAgIHJldHVybiBwYWNrZWRfZGF0YTsKK30KKworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8yUDAgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgU3RvcmUgYSBTVyB0cmltIHZhbHVlIGluIHRoZSB0YWJsZSBwYXNzZWQgaW4gZnJvbSBjYWxsaW5nIGZ1bmN0aW9uLgorICogCisgKiBccGFyYW0gc3dfdHJpbV90YmwgcG9pbnRlciB0byB0aGUgc29mdHdhcmUgdHJpbSB0YWJsZSB0byBob2xkIFNXIHRyaW0gdmFsdWVzCisgKiBccGFyYW0gbnVtX2VudHJpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBTVyB0cmltIHRhYmxlCisgKiBccGFyYW0gYWRkciB0aGUgc29mdHdhcmUgdHJpbSBJRAorICogXHBhcmFtIGRhdGEgdGhlIHZhbHVlIG9mIHRoZSBzb2Z0d2FyZSB0cmltCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHN0b3JlX3N3X3RyaW0oSUZSX1NXX1RSSU1fVEJMX0VOVFJZX1QgKiBzd190cmltX3RibCwgdWludDE2X3QgbnVtX2VudHJpZXMsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IGRhdGEpCit7CisgICAgdWludDE2X3QgaTsKKworICAgIGlmIChzd190cmltX3RibCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhZGRyID09IHN3X3RyaW1fdGJsW2ldLnRyaW1faWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dfdHJpbV90YmxbaV0udHJpbV92YWx1ZSA9IGRhdGE7CisgICAgICAgICAgICAgICAgc3dfdHJpbV90YmxbaV0udmFsaWQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBEb24ndCBuZWVkIHRvIHNjYW4gdGhlIGFycmF5IGFueSBmdXJ0aGVyLi4uICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgUHJvY2VzcyBibG9jayAxIElGUiBkYXRhLgorICogCisgKiBccGFyYW0gc3dfdHJpbV90YmwgcG9pbnRlciB0byB0aGUgc29mdHdhcmUgdHJpbSB0YWJsZSB0byBob2xkIFNXIHRyaW0gdmFsdWVzCisgKiBccGFyYW0gbnVtX2VudHJpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBTVyB0cmltIHRhYmxlCisgKgorICogXHJlbWFya3MgCisgKiAgVXNlcyBhIElGUiB2MiBmb3JtYXR0ZWQgZGVmYXVsdCBhcnJheSBpZiB0aGUgSUZSIGlzIGJsYW5rIG9yIGNvcnJ1cHRlZC4KKyAqICBTdG9yZXMgU1cgdHJpbSB2YWx1ZXMgdG8gYW4gYXJyYXkgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbi4KKyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgaGFuZGxlX2lmcihJRlJfU1dfVFJJTV9UQkxfRU5UUllfVCAqIHN3X3RyaW1fdGJsLCB1aW50MTZfdCBudW1fZW50cmllcykKK3sKKyAgICB1aW50MzJfdCBkZXN0X2FkZHI7CisgICAgdWludDMyX3QgcmVhZF9hZGRyOworICAgIHVpbnQzMl90IGRlc3RfZGF0YTsKKyAgICB1aW50MzJfdCBwYWNrZWRfZGF0YTsKKyAgICB1aW50MzJfdCAqaWZyX3B0cjsKKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICBudW1fd29yZHNfYXZhaWwgPSAwOyAvKiBQcmVwIGZvciBoYW5kbGluZyA2NCBiaXQgd29yZHMgZnJvbSBmbGFzaCAqLworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKworI2lmIFJBRElPX0lTX0dFTl8zUDAKKyAgICByZWFkX2FkZHIgPSBLM19CQVNFX0lOREVYOworI2Vsc2UKKyNpZmRlZiBDUFVfTUtXNDFaMjU2VkhUNAorICAgIHJlYWRfYWRkciA9IEtXNHhfMjU2X0JBU0U7CisjZWxzZQorICAgIHJlYWRfYWRkciA9IEtXNHhfNTEyX0JBU0U7CisjZW5kaWYgLyogQ1BVX01LVzQxWjI1NlZIVDQgKi8KKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKyAgICAvKiBSZWFkIGZpcnN0IGVudHJ5IGluIElGUiB0YWJsZSAqLworICAgIHBhY2tlZF9kYXRhID0gcmVhZF9maXJzdF9pZnJfd29yZChyZWFkX2FkZHIpOworICAgIGlmICgocGFja2VkX2RhdGEmfklGUl9WRVJTSU9OX01BU0spID09IElGUl9WRVJTSU9OX0hEUikKKyAgICB7CisgICAgICAgIC8qIFZhbGlkIGhlYWRlciB3YXMgZm91bmQsIHByb2Nlc3MgcmVhbCBJRlIgZGF0YSAqLworICAgICAgICBYQ1ZSX01JU0MtPk9WRVJXUklURV9WRVIgPSAocGFja2VkX2RhdGEgJiBJRlJfVkVSU0lPTl9NQVNLKTsKKyAgICAgICAgc3RvcmVfc3dfdHJpbShzd190cmltX3RibCwgbnVtX2VudHJpZXMsIDB4QUJDRCwgKHBhY2tlZF9kYXRhICYgSUZSX1ZFUlNJT05fTUFTSykpOyAvKiBQbGFjZSBJRlIgdmVyc2lvbiAjIGluIFNXIHRyaW0gYXJyYXkqLworICAgICAgICBwYWNrZWRfZGF0YSA9IHJlYWRfYW5vdGhlcl9pZnJfd29yZCgpOworCisgICAgICAgIHdoaWxlIChwYWNrZWRfZGF0YSAhPUlGUl9FT0ZfU1lNQk9MKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSVNfQV9TV19JRChwYWNrZWRfZGF0YSkpIC8qIFNXIFRyaW0gY2FzZSAobm9uX3JlZyB3cml0ZXMpICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVzdF9hZGRyID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgcGFja2VkX2RhdGEgPSByZWFkX2Fub3RoZXJfaWZyX3dvcmQoKTsKKyAgICAgICAgICAgICAgICBkZXN0X2RhdGEgPSBwYWNrZWRfZGF0YTsKKyAgICAgICAgICAgICAgICAvKiBQbGFjZSBTVyB0cmltIGluIGFycmF5IGZvciBkcml2ZXIgU1cgdG8gdXNlICovCisgICAgICAgICAgICAgICAgc3RvcmVfc3dfdHJpbShzd190cmltX3RibCwgbnVtX2VudHJpZXMsIGRlc3RfYWRkciwgZGVzdF9kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoSVNfVkFMSURfUkVHX0FERFIocGFja2VkX2RhdGEpKSAvKiBWYWxpZCByZWdpc3RlciB3cml0ZSBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkZXN0X2FkZHIgPSBwYWNrZWRfZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcGFja2VkX2RhdGEgPSByZWFkX2Fub3RoZXJfaWZyX3dvcmQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9kYXRhID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgICAgICoodWludDMyX3QgKikoZGVzdF9hZGRyKSA9IGRlc3RfZGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsgLyogSW52YWxpZCBhZGRyZXNzIGNhc2UgKi8KKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgcGFja2VkX2RhdGE9cmVhZF9hbm90aGVyX2lmcl93b3JkKCk7CisgICAgICAgIH0KKyAgICB9IAorICAgIGVsc2UgCisgICAgeworICAgICAgICAvKiBWYWxpZCBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHVzZSBibGluZCBJRlIgdHJpbSB0YWJsZSAqLworICAgICAgICBpZnJfcHRyID0gKHZvaWQgKilCTE9DS18xX0lGUjsKKyAgICAgICAgcGFja2VkX2RhdGEgPSAqaWZyX3B0cjsKKyAgICAgICAgWENWUl9NSVNDLT5PVkVSV1JJVEVfVkVSID0gKHBhY2tlZF9kYXRhICYgSUZSX1ZFUlNJT05fTUFTSyk7CisgICAgICAgIHN0b3JlX3N3X3RyaW0oc3dfdHJpbV90YmwsIG51bV9lbnRyaWVzLCAweEFCQ0QsIChwYWNrZWRfZGF0YSAmIElGUl9WRVJTSU9OX01BU0spKTsgLyogUGxhY2UgSUZSIHZlcnNpb24gIyBpbiBTVyB0cmltIGFycmF5ICovCisgICAgICAgIGlmcl9wdHIrKzsKKyAgICAgICAgcGFja2VkX2RhdGE9ICppZnJfcHRyOworCisgICAgICAgIHdoaWxlIChwYWNrZWRfZGF0YSAhPSBJRlJfRU9GX1NZTUJPTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKElTX0FfU1dfSUQocGFja2VkX2RhdGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNXIFRyaW0gY2FzZSAobm9uX3JlZyB3cml0ZXMpICovCisgICAgICAgICAgICAgICAgZGVzdF9hZGRyID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgaWZyX3B0cisrOworICAgICAgICAgICAgICAgIHBhY2tlZF9kYXRhID0gKihpZnJfcHRyKTsKKyAgICAgICAgICAgICAgICBkZXN0X2RhdGEgPSBwYWNrZWRfZGF0YTsKKyAgICAgICAgICAgICAgICAvKiBQbGFjZSBTVyB0cmltIGluIGFycmF5IGZvciBkcml2ZXIgU1cgdG8gdXNlICovCisgICAgICAgICAgICAgICAgc3RvcmVfc3dfdHJpbShzd190cmltX3RibCwgbnVtX2VudHJpZXMsIGRlc3RfYWRkciwgZGVzdF9kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVzdF9hZGRyID0gcGFja2VkX2RhdGE7CisgICAgICAgICAgICAgICAgaWZyX3B0cisrOworICAgICAgICAgICAgICAgIHBhY2tlZF9kYXRhID0gKmlmcl9wdHI7CisgICAgICAgICAgICAgICAgZGVzdF9kYXRhID0gcGFja2VkX2RhdGE7CisKKyAgICAgICAgICAgICAgICAvKiBWYWxpZCByZWdpc3RlciB3cml0ZSBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgaWYgKElTX1ZBTElEX1JFR19BRERSKGRlc3RfYWRkcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqKHVpbnQzMl90ICopKGRlc3RfYWRkcikgPSBkZXN0X2RhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgYWRkcmVzcyBjYXNlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZnJfcHRyKys7CisgICAgICAgICAgICBwYWNrZWRfZGF0YT0gKmlmcl9wdHI7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBSQURJT19JU19HRU5fM1AwCisKKyNlbHNlCit1aW50MzJfdCBoYW5kbGVfaWZyX2RpZV9pZCh2b2lkKQoreworICAgIHVpbnQzMl90IGlkX3gsIGlkX3k7CisgICAgdWludDMyX3QgaWQ7CisKKyAgICBpZCA9IHJlYWRfcmVzb3VyY2VfaWZyKDB4OTApOworICAgIGlkX3ggPSBpZCAmIDB4MDBGRjAwMDA7CisgICAgaWRfeSA9IGlkICYgMHgwMDAwMDBGRjsKKworICAgIHJldHVybiAoaWRfeCB8IGlkX3kpOworfQorCit1aW50MzJfdCBoYW5kbGVfaWZyX2RpZV9rd190eXBlKHZvaWQpCit7CisgICAgdWludDMyX3QgemIsIGJsZTsKKworICAgIHpiID0gcmVhZF9yZXNvdXJjZV9pZnIoMHg4MCkgJiAweDgwMDA7CisgICAgYmxlPSByZWFkX3Jlc291cmNlX2lmcigweDg4KSAmIDB4MTAwMDAwOworCisgICAgcmV0dXJuICh6YiB8IGJsZSk7Cit9CisKKyNlbmRpZiAvKiBSQURJT19JU19HRU5fM1AwICovCisKKy8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFxicmllZiAgRHVtcHMgYmxvY2sgMSBJRlIgZGF0YSB0byBhbiBhcnJheS4KKyAqIAorICogXHBhcmFtIGR1bXBfdGJsIHBvaW50ZXIgdG8gdGhlIHRhYmxlIHRvIGhvbGQgdGhlIGR1bXBlZCBJRlIgdmFsdWVzCisgKiBccGFyYW0gbnVtX2VudHJpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIGR1bXAKKyAqCisgKiBccmVtYXJrcyAKKyAqICBTdGFydHMgYXQgdGhlIGZpcnN0IGFkZHJlc3MgaW4gSUZSIGFuZCBkdW1wcyBzZXF1ZW50aWFsIGVudHJpZXMuCisgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGR1bXBfaWZyKHVpbnQzMl90ICogZHVtcF90YmwsIHVpbnQ4X3QgbnVtX2VudHJpZXMpCit7CisjaWYgUkFESU9fSVNfR0VOXzNQMAorICAgIHVpbnQzMl90IGlmcl9hZGRyZXNzID0gMHgyMDAwMDsKKyNlbHNlCisgICAgdWludDMyX3QgaWZyX2FkZHJlc3MgPSAweDIwMDAwOworI2VuZGlmIC8qIFJBRElPX0lTX0dFTl8zUDAgKi8KKyAgICB1aW50MzJfdCAqIGR1bXBfcHRyID0gZHVtcF90Ymw7CisgICAgdWludDhfdCBpOworCisgICAgKmR1bXBfcHRyID0gcmVhZF9maXJzdF9pZnJfd29yZChpZnJfYWRkcmVzcyk7CisgICAgZHVtcF9wdHIrKzsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllcyAtIDE7IGkrKykKKyAgICB7CisgICAgICAgICpkdW1wX3B0ciA9IHJlYWRfYW5vdGhlcl9pZnJfd29yZCgpOworICAgICAgICBkdW1wX3B0cisrOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvWENWUi9pZnJfcmFkaW8uaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvaWZyX3JhZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyMjc3ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L1hDVlIvaWZyX3JhZGlvLmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfX0lGUl9SQURJT19IX18KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNkZWZpbmUgX19JRlJfUkFESU9fSF9fCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorLyogY2xhbmctZm9ybWF0IG9mZiAqLworI2RlZmluZSBfRlNMX1hDVlJfSF8KKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIHhjdnIKKyAqIEB7CisgKi8KKworLyohIEBmaWxlKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRlJfRU9GX1NZTUJPTCAgICAgICAgICAoMHhGRUVEMEUwRlUpIC8qIDwgRGVub3RlcyB0aGUgIkVuZCBvZiBGaWxlIiBmb3IgSUZSIGRhdGEgKi8KKyNkZWZpbmUgSUZSX1ZFUlNJT05fSERSICAgICAgICAgKDB4QUJDRDAwMDBVKSAvKiA8IENvbnN0YW50IHZhbHVlIGZvciB1cHBlciAxNiBiaXRzIG9mIElGUiBkYXRhIGhlYWRlciAqLworI2RlZmluZSBJRlJfVkVSU0lPTl9NQVNLICAgICAgICAoMHgwMDAwRkZGRlUpIC8qIDwgTWFzayBmb3IgdmVyc2lvbiBudW1iZXIgKGxvd2VyIDE2IGJpdHMpIG9mIElGUiBkYXRhIGhlYWRlciAqLworI2RlZmluZSBJRlJfU1dfSURfTUlOICAgICAgICAgICAoMHgwMDAwMDAwMFUpIC8qIDwgTG93ZXIgbGltaXQgb2YgU1cgdHJpbSBJRHMgKi8KKyNkZWZpbmUgSUZSX1NXX0lEX01BWCAgICAgICAgICAgKDB4MDAwMEZGRkZVKSAvKiA8IExvd2VyIGxpbWl0IG9mIFNXIHRyaW0gSURzICovCisKKyNkZWZpbmUgSVNfQV9TV19JRCh4KSAgICAgICAgICAgKChJRlJfU1dfSURfTUlOIDwgKHgpKSAmJiAoSUZSX1NXX0lEX01BWCA+PSAoeCkpKQorCisvKiBLMyB2YWxpZCByZWdpc3RlcnMgc3VwcG9ydCAqLworI2lmIChkZWZpbmVkKENQVV9LMzJXMDQyUzFNMkNBeF9NMFApIHx8IGRlZmluZWQoQ1BVX0szMlcwNDJTMU0yVlBKX00wUCkpCisjZGVmaW5lIElTX1ZBTElEX1JFR19BRERSKHgpICAgICgoKHgpICYgMHhGRkZGMDAwMFUpID09IDB4NDEwMDAwMDBVKSAvKiBWYWxpZCBhZGRyZXNzZXMgYXJlIDB4NDEweHh4eHggKi8KKyNlbmRpZiAvKiAoZGVmaW5lZChDUFVfSzMyVzA0MlMxTTJDQXhfTTBQKSB8fCBkZWZpbmVkKENQVV9LMzJXMDQyUzFNMlZQSl9NMFApKSAqLworLyogS1c0MSBhbmQgS1czNS8zNiB2YWxpZCByZWdpc3RlcnMgc3VwcG9ydCAqLworI2lmIChkZWZpbmVkKENQVV9NS1c0MVoyNTZWSFQ0KSB8fCBkZWZpbmVkKENQVV9NS1c0MVo1MTJWSFQ0KSB8fCBcCisgICAgIGRlZmluZWQoQ1BVX01LVzMxWjI1NlZIVDQpIHx8IGRlZmluZWQoQ1BVX01LVzMxWjUxMlZIVDQpIHx8IFwKKyAgICAgZGVmaW5lZChDUFVfTUtXMjFaMjU2VkhUNCkgfHwgZGVmaW5lZChDUFVfTUtXMjFaNTEyVkhUNCkgfHwgXAorICAgICBkZWZpbmVkKENQVV9NS1czNUE1MTJWRlA0KSB8fCBkZWZpbmVkKENQVV9NS1czNkE1MTJWRlA0KSApCisKKyNkZWZpbmUgSVNfVkFMSURfUkVHX0FERFIoeCkgICAgKCgoeCkgJiAweEZGRkYwMDAwVSkgPT0gMHg0MDA1MDAwMFUpIC8qIFZhbGlkIGFkZHJlc3NlcyBhcmUgMHg0MDA1eHh4eCAqLworI2VuZGlmCisKKyNkZWZpbmUgTUFLRV9NQVNLKHNpemUpICAgICAgICAgKCgxIDw8IChzaXplKSkgLSAxKQorI2RlZmluZSBNQUtFX01BU0tTSEZUKHNpemUsIGJpdHBvcykgIChNQUtFX01BU0soc2l6ZSkgPDwgKGJpdHBvcykpCisKKyNkZWZpbmUgSUZSX1RaQV9DQVBfVFVORV9NQVNLICAgICAgICAgICAoMHgwMDAwMDAwRlUpCisjZGVmaW5lIElGUl9UWkFfQ0FQX1RVTkVfU0hJRlQgICAgICAgICAgKDApCisjZGVmaW5lIElGUl9CQkZfQ0FQX1RVTkVfTUFTSyAgICAgICAgICAgKDB4MDAwRjAwMDBVKQorI2RlZmluZSBJRlJfQkJGX0NBUF9UVU5FX1NISUZUICAgICAgICAgICgxNikKKyNkZWZpbmUgSUZSX1JFU19UVU5FMl9NQVNLICAgICAgICAgICAgICAoMHgwMEYwMDAwMFUpCisjZGVmaW5lIElGUl9SRVNfVFVORTJfU0hJRlQgICAgICAgICAgICAgKDIwKQorCisvKiBcdmFyICB0eXBlZGVmIHVpbnQ4X3QgSUZSX0VSUk9SX1QgKi8KKy8qIFxicmllZiAgVGhlIElGUiBlcnJvciByZXBvcnRpbmcgdHlwZS4gKi8KKy8qIFNlZSAjSUZSX0VSUk9SX1RfZW51bSBmb3IgdGhlIGVudW1lcmF0aW9uIGRlZmluaXRpb25zLiAqLwordHlwZWRlZiB1aW50OF90IElGUl9FUlJPUl9UOworCisvKiBcYnJpZWYgIFRoZSBlbnVtZXJhdGlvbnMgdXNlZCB0byBkZXNjcmliZSBJRlIgZXJyb3JzLiAqLworZW51bSBJRlJfRVJST1JfVF9lbnVtCit7CisgICAgSUZSX1NVQ0NFU1MgPSAwLAorICAgIElOVkFMSURfUE9JTlRFUiA9IDEsIC8qIDwgTlVMTCBwb2ludGVyIGVycm9yICovCisgICAgSU5WQUxJRF9ERVNUX1NJWkVfU0hJRlQgPSAyLCAvKiA8IHRoZSBiaXRzIHdvbid0IGZpdCBhcyBzcGVjaWZpZWQgaW4gdGhlIGRlc3RpbmF0aW9uICovCit9OworCisvKiBcdmFyICB0eXBlZGVmIHVpbnQxNl90IFNXX1RSSU1fSURfVCAqLworLyogXGJyaWVmICBUaGUgU1cgdHJpbSBJRCB0eXBlLiAqLworLyogU2VlICNTV19UUklNX0lEX1RfZW51bSBmb3IgdGhlIGVudW1lcmF0aW9uIGRlZmluaXRpb25zLiAqLwordHlwZWRlZiB1aW50MTZfdCBTV19UUklNX0lEX1Q7CisKKy8qIFxicmllZiAgVGhlIGVudW1lcmF0aW9ucyB1c2VkIHRvIGRlZmluZSBTVyB0cmltIElEcy4gKi8KK2VudW0gU1dfVFJJTV9JRF9UX2VudW0KK3sKKyAgICBRX1JFTEFUSVZFX0dBSU5fQllfUEFSVCA9IDAsIC8qIDwgUSB2cyBJIHJlbGF0aXZlIGdhaW4gdHJpbSBJRCAqLworICAgIEFEQ19HQUlOID0gMSwgLyogPCBBREMgZ2FpbiB0cmltIElEICovCisgICAgWkJfRklMVF9UUklNID0gMiwgLyogPCBCYXNlYmFuZCBCYW5kd2lkdGggZmlsdGVyIHRyaW0gSUQgZm9yIEJMRSAqLworICAgIEJMRV9GSUxUX1RSSU0gPSAzLCAvKiA8IEJhc2ViYW5kIEJhbmR3aWR0aCBmaWx0ZXIgdHJpbSBJRCBmb3IgQkxFICovCisgICAgVFJJTV9TVEFUVVMgPSA0LCAvKiA8IFN0YXR1cyByZXN1bHQgb2YgdGhlIHRyaW0gcHJvY2VzcyAoZXJyb3IgaW5kaWNhdGlvbnMpICovCisgICAgVFJJTV9WRVJTSU9OID0gMHhBQkNELCAvKiA8IFZlcnNpb24gbnVtYmVyIG9mIHRoZSBJRlIgdHJpbSBhbGdvcml0aG0vZm9ybWF0LiAqLworfTsKKworLyogXHZhciAgdHlwZWRlZiB1aW50MzJfdCBJRlJfVFJJTV9TVEFUVVNfVCAqLworLyogXGJyaWVmICBUaGUgZGVmaW5pdGlvbiBvZiBmYWlsdXJlIGJpdHMgc3RvcmVkIGluIElGUiB0cmltIHN0YXR1cyB3b3JkLiAqLworLyogU2VlICNJRlJfVFJJTV9TVEFUVVNfVF9lbnVtIGZvciB0aGUgZW51bWVyYXRpb24gZGVmaW5pdGlvbnMuICovCit0eXBlZGVmIHVpbnQzMl90IElGUl9UUklNX1NUQVRVU19UOworCisvKiBcYnJpZWYgIFRoZSBlbnVtZXJhdGlvbnMgdXNlZCB0byBkZXNjcmliZSB0cmltIGFsZ29yaXRobSBmYWlsdXJlcyBpbiB0aGUgc3RhdHVzIGVudHJ5IGluIElGUi4gKi8KKy8qIFRoaXMgZW51bSByZXByZXNlbnRzIG11bHRpcGxlIHZhbHVlcyB3aGljaCBjYW4gYmUgT1InZCB0b2dldGhlciBpbiBhIHNpbmdsZSBzdGF0dXMgd29yZC4gKi8KK2VudW0gSUZSX1RSSU1fU1RBVFVTX1RfZW51bQoreworICAgIFRSSU1fQUxHT1JJVEhNX1NVQ0NFU1MgPSAwLAorICAgIEJHQVBfVk9MVEFHRV9UUklNX0ZBSUxFRCA9IDEsIC8qIDwgYWxnb3JpdGhtIGZhaWx1cmUgaW4gQkdBUCB2b2x0YWdldHJpbSAqLworICAgIElRTUNfR0FJTl9BREpfRkFJTEVEID0gMiwgLyogPCBhbGdvcml0aG0gZmFpbHVyZSBpbiBJUU1DIGdhaW4gdHJpbSAqLworICAgIElRTUNfUEhBU0VfQURKX0ZBSUxFRCA9IDQsIC8qIDwgYWxnb3JpdGhtIGZhaWx1cmUgaW4gSVFNQyBwaGFzZSB0cmltICovCisgICAgSVFNQ19EQ19HQUlOX0FESl9GQUlMRUQgPSA4LCAvKiA8ICovCisgICAgQURDX0dBSU5fVFJJTV9GQUlMRUQgPSAxMCwgLyogPCovCisgICAgWkJfRklMVF9UUklNX0ZBSUxFRCA9IDIwLCAvKiA8ICovCisgICAgQkxFX0ZJTFRfVFJJTV9GQUlMRUQgPSA0MCwgLyogPCAqLworfTsKKworLyogXHZhciAgdHlwZWRlZiBzdHJ1Y3QgSUZSX1NXX1RSSU1fVEJMX0VOVFJZX1QgKi8KKy8qIFxicmllZiAgU3RydWN0dXJlIGRlZmluaW5nIGFuIGVudHJ5IGluIGEgdGFibGUgdXNlZCB0byBjb250YWluIHZhbHVlcyB0byBiZSBwYXNzZWQgYmFjayBmcm9tIElGUiAqLworLyogIGhhbmRsaW5nIHJvdXRpbmUgdG8gWENWUiBkcml2ZXIgc29mdHdhcmUuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFNXX1RSSU1fSURfVCB0cmltX2lkOyAvKiA8IFRoZSBhc3NpZ25lZCBJRCAqLworICAgIHVpbnQzMl90IHRyaW1fdmFsdWU7IC8qIDwgVGhlIHZhbHVlIGZldGNoZWQgZnJvbSBJRlIuKi8KKyAgICB1aW50OF90IHZhbGlkOyAvKiA8IHZhbGlkaXR5IG9mIHRoZSB0cmltX3ZhbHVlIGZpZWxkIGFmdGVyIElGUiBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlIChUUlVFL0ZBTFNFKS4qLworfSBJRlJfU1dfVFJJTV9UQkxfRU5UUllfVDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIFJlYWRzIGEgbG9jYXRpb24gaW4gYmxvY2sgMSBJRlIgZm9yIHVzZSBieSB0aGUgcmFkaW8uCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWRpbmcgSUZSIGRhdGEgZnJvbSBmbGFzaCBtZW1vcnkgZm9yIHRyaW0gbG9hZGluZy4KKyAqCisgKiBAcGFyYW0gcmVhZF9hZGRyIHRoZSBhZGRyZXNzIGluIHRoZSBJRlIgdG8gYmUgcmVhZC4KKyAqLyAKK3VpbnQzMl90IHJlYWRfcmVzb3VyY2VfaWZyKHVpbnQzMl90IHJlYWRfYWRkcik7CisKKy8qIQorICogQGJyaWVmIFJlYWRzIGEgbG9jYXRpb24gaW4gYSBzaW11bGF0ZWQgZGF0YSBhcnJheSB0byBzdXBwb3J0IElGUiBoYW5kbGVyIHRlc3RpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWRpbmcgIGRhdGEgZnJvbSBhIGNvbnN0IHRhYmxlIGZvciB0ZXN0aW5nIHRoZSB0cmltIGxvYWRpbmcgZnVuY3Rpb25zLgorICoKKyAqIEBwYXJhbSByZWFkX2FkZHIgdGhlIGFkZHJlc3MgaW4gdGhlIElGUiB0byBiZSByZWFkLgorICovIAordWludDMyX3QgcmVhZF9yZXNvdXJjZSh1aW50MTZfdCByZXNvdXJjZV9pZCk7CisKKy8qIQorICogQGJyaWVmIE1haW4gSUZSIGhhbmRsZXIgZnVuY3Rpb24gY2FsbGVkIGJ5IFhDVlIgZHJpdmVyIHNvZnR3YXJlIHRvIHByb2Nlc3MgdHJpbSB0YWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgcmVhZGluZyAgZGF0YSBmcm9tIElGUiBhbmQgZWl0aGVyIGxvYWRpbmcgdG8gcmVnaXN0ZXJzIG9yIHN0b3JpbmcgdG8gYSBTVyB0cmltIHZhbHVlcyB0YWJsZS4KKyAqCisgKiBAcGFyYW0gc3dfdHJpbV90YmwgcG9pbnRlciB0byB0aGUgdGFibGUgdXNlZCB0byBzdG9yZSBzb2Z0d2FyZSB0cmltIHZhbHVlcy4KKyAqIEBwYXJhbSBudW1fZW50cmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBTVyB0cmltIHRhYmxlLgorICovIAordm9pZCBoYW5kbGVfaWZyKElGUl9TV19UUklNX1RCTF9FTlRSWV9UICogc3dfdHJpbV90YmwsIHVpbnQxNl90IG51bV9lbnRyaWVzKTsKKworLyohCisgKiBAYnJpZWYgSGFuZGxlciBmdW5jdGlvbiB0byByZWFkIGRpZV9pZCBmcm9tIElGUiBsb2NhdGlvbnMuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nIGRpZSBJRCB2YWx1ZSBmb3IgZGVidWcgYW5kIHRlc3RpbmcgdXNhZ2UuCisgKgorICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGRpZSBJRCBmaWVsZC4KKyAqLyAKK3VpbnQzMl90IGhhbmRsZV9pZnJfZGllX2lkKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlYWQgS1cgY2hpcCB2ZXJzaW9uIGZyb20gSUZSIGxvY2F0aW9ucy4uCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWRpbmcgS1cgY2hpcCB2ZXJzaW9uIGZvciBkZWJ1ZyBhbmQgdGVzdGluZyB1c2FnZS4KKyAqCisgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgS1cgdmVyc2lvbiBmaWVsZC4KKyAqLyAKK3VpbnQzMl90IGhhbmRsZV9pZnJfZGllX2t3X3R5cGUodm9pZCk7CisKKy8qIQorICogQGJyaWVmIERlYnVnIGZ1bmN0aW9uIHRvIGR1bXAgdGhlIElGUiBjb250ZW50cyB0byBhIFJBTSBhcnJheS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgcmVhZGluZyAgZGF0YSBmcm9tIElGUiBhbmQgc3RvcmluZyB0byBhIFJBTSBhcnJheSBmb3IgZGVidWcuCisgKgorICogQHBhcmFtIGR1bXBfdGJsIHBvaW50ZXIgdG8gdGhlIHRhYmxlIHVzZWQgdG8gc3RvcmUgSUZSIGVudHJ5IHZhbHVlcy4KKyAqIEBwYXJhbSBudW1fZW50cmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBkdW1wIHRhYmxlLgorICovIAordm9pZCBkdW1wX2lmcih1aW50MzJfdCAqIGR1bXBfdGJsLCB1aW50OF90IG51bV9lbnRyaWVzKTsKKworI2VuZGlmIC8qX19JRlJfUkFESU9fSF9fICovCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Nsb2NrX2NvbmZpZy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY2xvY2tfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3N2Y0MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Nsb2NrX2NvbmZpZy5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEhvdyB0byBzZXR1cCBjbG9jayB1c2luZyBjbG9jayBkcml2ZXIgZnVuY3Rpb25zOgorICoKKyAqIDEuIENMT0NLX1NldFNpbVNhZmVEaXZzLCB0byBtYWtlIHN1cmUgY29yZSBjbG9jaywgYnVzIGNsb2NrLCBmbGV4YnVzIGNsb2NrCisgKiAgICBhbmQgZmxhc2ggY2xvY2sgYXJlIGluIGFsbG93ZWQgcmFuZ2UgZHVyaW5nIGNsb2NrIG1vZGUgc3dpdGNoLgorICoKKyAqIDIuIENhbGwgQ0xPQ0tfT3NjMEluaXQgdG8gc2V0dXAgT1NDIGNsb2NrLCBpZiBpdCBpcyB1c2VkIGluIHRhcmdldCBtb2RlLgorICoKKyAqIDMuIFNldCBNQ0cgY29uZmlndXJhdGlvbiwgTUNHIGluY2x1ZGVzIHRocmVlIHBhcnRzOiBGTEwgY2xvY2ssIFBMTCBjbG9jayBhbmQKKyAqICAgIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayhNQ0dJUkNMSykuIEZvbGxvdyB0aGUgc3RlcHMgdG8gc2V0dXA6CisgKgorICogICAgMSkuIENhbGwgQ0xPQ0tfQm9vdFRvWHh4TW9kZSB0byBzZXQgTUNHIHRvIHRhcmdldCBtb2RlLgorICoKKyAqICAgIDIpLiBJZiB0YXJnZXQgbW9kZSBpcyBGQkkvQkxQSS9QQkkgbW9kZSwgdGhlIE1DR0lSQ0xLIGhhcyBiZWVuIGNvbmZpZ3VyZWQKKyAqICAgICAgICBjb3JyZWN0bHkuIEZvciBvdGhlciBtb2RlcywgbmVlZCB0byBjYWxsIENMT0NLX1NldEludGVybmFsUmVmQ2xrQ29uZmlnCisgKiAgICAgICAgZXhwbGljaXRseSB0byBzZXR1cCBNQ0dJUkNMSy4KKyAqCisgKiAgICAzKS4gRG9uJ3QgbmVlZCB0byBjb25maWd1cmUgRkxMIGV4cGxpY2l0bHksIGJlY2F1c2UgaWYgdGFyZ2V0IG1vZGUgaXMgRkxMCisgKiAgICAgICAgbW9kZSwgdGhlbiBGTEwgaGFzIGJlZW4gY29uZmlndXJlZCBieSB0aGUgZnVuY3Rpb24gQ0xPQ0tfQm9vdFRvWHh4TW9kZSwKKyAqICAgICAgICBpZiB0aGUgdGFyZ2V0IG1vZGUgaXMgbm90IEZMTCBtb2RlLCB0aGUgRkxMIGlzIGRpc2FibGVkLgorICoKKyAqICAgIDQpLiBJZiB0YXJnZXQgbW9kZSBpcyBQRUUvUEJFL1BFSS9QQkkgbW9kZSwgdGhlbiB0aGUgcmVsYXRlZCBQTEwgaGFzIGJlZW4KKyAqICAgICAgICBzZXR1cCBieSBDTE9DS19Cb290VG9YeHhNb2RlLiBJbiBGQkUvRkJJL0ZFRS9GQkUgbW9kZSwgdGhlIFBMTCBjb3VsZAorICogICAgICAgIGJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSwgY2FsbCBDTE9DS19FbmFibGVQbGwwIGV4cGxpY2l0bHkgaW4gdGhpcyBjYXNlLgorICoKKyAqIDQuIENhbGwgQ0xPQ0tfU2V0U2ltQ29uZmlnIHRvIHNldCB0aGUgY2xvY2sgY29uZmlndXJhdGlvbiBpbiBTSU0uCisgKi8KKworLyogVEVYVCBCRUxPVyBJUyBVU0VEIEFTIFNFVFRJTkcgRk9SIFRIRSBDTE9DS1MgVE9PTCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorISFDbG9ja3NQcm9maWxlCitwcm9kdWN0OiBDbG9ja3MgdjEuMAorcHJvY2Vzc29yOiBNS1c0MVo1MTJ4eHg0CitwYWNrYWdlX2lkOiBNS1c0MVo1MTJWSFQ0CittY3VfZGF0YToga3NkazJfMAorcHJvY2Vzc29yX3ZlcnNpb246IDAuMS4yOAorYm9hcmQ6IEZSRE0tS1c0MVoKKyAqIEJFIENBUkVGVUwgTU9ESUZZSU5HIFRISVMgQ09NTUVOVCAtIElUIElTIFlBTUwgU0VUVElOR1MgRk9SIFRIRSBDTE9DS1MgVE9PTCAqKi8KKworI2luY2x1ZGUgImZzbF9ydGMuaCIKKyNpbmNsdWRlICJjbG9ja19jb25maWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSVENfT1NDX0NBUF9MT0FEXzBQRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBVICAvKiE8IFJUQyBvc2NpbGxhdG9yIGNhcGFjaXR5IGxvYWQ6IDBwRiAqLworI2RlZmluZSBTSU1fTFBVQVJUX0NMS19TRUxfT1NDRVJDTEtfQ0xLICAgICAgICAgICAgICAgICAgIDJVICAvKiE8IExQVUFSVCBjbG9jayBzZWxlY3Q6IE9TQ0VSQ0xLIGNsb2NrICovCisjZGVmaW5lIFNJTV9PU0MzMktTRUxfT1NDMzJLQ0xLX0NMSyAgICAgICAgICAgICAgICAgICAgICAgMFUgIC8qITwgT1NDMzJLU0VMIHNlbGVjdDogT1NDMzJLQ0xLIGNsb2NrICovCisjZGVmaW5lIFNJTV9UUE1fQ0xLX1NFTF9PU0NFUkNMS19DTEsgICAgICAgICAgICAgICAgICAgICAgMlUgIC8qITwgVFBNIGNsb2NrIHNlbGVjdDogT1NDRVJDTEsgY2xvY2sgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN5c3RlbSBjbG9jayBmcmVxdWVuY3kuICovCitleHRlcm4gdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IENMT0NLX0NPTkZJR19GbGxTdGFibGVEZWxheQorICogRGVzY3JpcHRpb24gICA6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZWxheSBmb3IgRkxMIHN0YWJsZS4KKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgQ0xPQ0tfQ09ORklHX0ZsbFN0YWJsZURlbGF5KHZvaWQpCit7CisgICAgdWludDMyX3QgaSA9IDMwMDAwVTsKKworICAgIHdoaWxlIChpLS0pCisgICAgeworICAgICAgICBfX05PUCgpOworICAgIH0KK30KKworLypGVU5DVElPTioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGdW5jdGlvbiBOYW1lIDogQ0xPQ0tfQ09ORklHX1NldFJ0Y0Nsb2NrCisgKiBEZXNjcmlwdGlvbiAgIDogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyaW5nIFJUQyBjbG9jaworICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBDTE9DS19DT05GSUdfU2V0UnRjQ2xvY2soKQoreworICAgIC8qIFJUQyBjbG9jayBnYXRlIGVuYWJsZSAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19SdGMwKTsKKworICAgIC8qIFNldCBSVENfVFNSIGlmIHRoZXJlIGlzIGZhdWx0IHZhbHVlIGluIFJUQyAqLworICAgIGlmIChSVEMtPlNSICYgUlRDX1NSX1RJRl9NQVNLKQorICAgIHsKKyAgICAgICAgUlRDIC0+IFRTUiA9IFJUQyAtPiBUU1I7CisgICAgfQorCisgICAgLyogUlRDIGNsb2NrIGdhdGUgZGlzYWJsZSAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhrQ0xPQ0tfUnRjMCk7Cit9CisKKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IENMT0NLX0NPTkZJR19FbmFibGVSdGNPc2MKKyAqIERlc2NyaXB0aW9uICAgOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxpbmcgUlRDIG9zY2lsbGF0b3IKKyAqIFBhcmFtIGNhcExvYWQgOiBPc2NpbGxhdG9yIGNhcGFjaXR5IGxvYWQKKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgQ0xPQ0tfQ09ORklHX0VuYWJsZVJ0Y09zYyh1aW50MzJfdCBjYXBMb2FkKQoreworICAgIC8qIFJUQyBjbG9jayBnYXRlIGVuYWJsZSAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19SdGMwKTsKKworICAgIGlmICgoUlRDLT5DUiAmIFJUQ19DUl9PU0NFX01BU0spID09IDB1KSAgIC8qIE9ubHkgaWYgdGhlIFJ0YyBvc2NpbGxhdG9yIGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQgKi8KKyAgICB7CisgICAgICAgIC8qIFNldCB0aGUgc3BlY2lmaWVkIGNhcGFjaXRvciBjb25maWd1cmF0aW9uIGZvciB0aGUgUlRDIG9zY2lsbGF0b3IgKi8KKyAgICAgICAgUlRDX1NldE9zY0NhcExvYWQoUlRDLCBjYXBMb2FkKTsKKyAgICAgICAgLyogRW5hYmxlIHRoZSBSVEMgMzJLSHogb3NjaWxsYXRvciAqLworICAgICAgICBSVEMtPkNSIHw9IFJUQ19DUl9PU0NFX01BU0s7CisgICAgfQorCisgICAgLyogUlRDIGNsb2NrIGdhdGUgZGlzYWJsZSAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhrQ0xPQ0tfUnRjMCk7CisgICAgQ0xPQ0tfU2V0WHRhbDMyRnJlcSgzMjc2OCk7Cit9CisKKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IEJPQVJEX1JmT3NjSW5pdAorICogRGVzY3JpcHRpb24gICA6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXR1cCBSZWYgb3NjaWxsYXRvciBmb3IgS1c0MF81MTIuCisgKgorICpFTkQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgQk9BUkRfUmZPc2NJbml0KHZvaWQpCit7CisgICAgdWludDMyX3QgdGVtcFRyaW07CisgICAgdWludDhfdCByZXZJZDsKKworICAgIC8qIE9idGFpbiBSRVYgSUQgZnJvbSBTSU0gKi8KKyAgICByZXZJZCA9ICh1aW50OF90KSgodWludDMyX3QpKFNJTS0+U0RJRCAmIFNJTV9TRElEX1JFVklEX01BU0spID4+IFNJTV9TRElEX1JFVklEX1NISUZUKTsKKworICAgIGlmICgwID09IHJldklkKQorICAgIHsKKyAgICAgICAgdGVtcFRyaW0gPSBSU0lNLT5BTkFfVFJJTTsKKyAgICAgICAgUlNJTS0+QU5BX1RSSU0gfD0gUlNJTV9BTkFfVFJJTV9CQl9MRE9fWE9fVFJJTV9NQVNLOyAgICAgICAgICAgIC8qIFNldCBtYXggdHJpbSBmb3IgQkIgTERPIGZvciBYTyAqLworICAgIH0vKiBXb3JrYXJvdW5kIGZvciBSZXYgMS4wIFhUQUwgc3RhcnR1cCBhbmQgQURDIGFuYWxvZyBkaWFnbm9zdGljcyBjaXJjdWl0cnkgKi8KKworICAgIC8qIFR1cm4gb24gY2xvY2tzIGZvciB0aGUgWENWUiAqLworCisgICAgLyogRW5hYmxlIFJGIE9TQyBpbiBSU0lNIGFuZCB3YWl0IGZvciByZWFkeSAqLworICAgIFJTSU0tPkNPTlRST0wgPSAoKFJTSU0tPkNPTlRST0wgJiB+UlNJTV9DT05UUk9MX1JGX09TQ19FTl9NQVNLKSB8IFJTSU1fQ09OVFJPTF9SRl9PU0NfRU4oMSkpOworCisgICAgLyogRVJSMDEwMjI0ICovCisgICAgUlNJTS0+UkZfT1NDX0NUUkwgfD0KKyAgICAgICAgUlNJTV9SRl9PU0NfQ1RSTF9SQURJT19FWFRfT1NDX09WUkRfRU5fTUFTSzsgICAvKiBQcmV2ZW50IFhUQUxfT1VUX0VOIGZyb20gZ2VuZXJhdGluZyBYVEFMX09VVCByZXF1ZXN0ICovCisKKyAgICB3aGlsZSAoKFJTSU0tPkNPTlRST0wgJiBSU0lNX0NPTlRST0xfUkZfT1NDX1JFQURZX01BU0spID09IDApOyAgICAgIC8qIFdhaXQgZm9yIFJGX09TQ19SRUFEWSAqLworCisgICAgaWYgKDAgPT0gcmV2SWQpCisgICAgeworICAgICAgICBTSU0tPlNDR0M1IHw9IFNJTV9TQ0dDNV9QSFlESUdfTUFTSzsKKyAgICAgICAgWENWUl9UU00tPk9WUkQwIHw9IFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9FTl9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDVlJfVFNNX09WUkQwX0JCX0xET19BRENEQUNfRU5fT1ZSRF9NQVNLOyAvKiBGb3JjZSBBREMgREFDIExETyBvbiB0byBwcmV2ZW50IEJHQVAgZmFpbHVyZSAqLworCisgICAgICAgIFJTSU0tPkFOQV9UUklNID0gdGVtcFRyaW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBMRE8gdHJpbSBzZXR0aW5ncyAqLworICAgIH0vKiBXb3JrYXJvdW5kIGZvciBSZXYgMS4wIFhUQUwgc3RhcnR1cCBhbmQgQURDIGFuYWxvZyBkaWFnbm9zdGljcyBjaXJjdWl0cnkgKi8KKworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBCT0FSRF9Jbml0T3NjMAorICogRGVzY3JpcHRpb24gICA6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXR1cCBNQ0cgT1NDIHdpdGggUmVmIG9zY2lsbGF0b3IgZm9yIEtXNDBfNTEyLgorICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEJPQVJEX0luaXRPc2MwKHZvaWQpCit7CisgICAgY29uc3Qgb3NjX2NvbmZpZ190IG9zY0NvbmZpZyA9CisgICAgeworICAgICAgICAuZnJlcSA9IEJPQVJEX1hUQUwwX0NMS19IWiwgLndvcmtNb2RlID0ga09TQ19Nb2RlRXh0LAorICAgIH07CisKKyAgICAvKiBJbml0aWFsaXplcyBPU0MwIGFjY29yZGluZyB0byBwcmV2aW91cyBjb25maWd1cmF0aW9uIHRvIG1lZXQgUmVmIE9TQyBuZWVkcy4gKi8KKyAgICBDTE9DS19Jbml0T3NjMCgmb3NjQ29uZmlnKTsKKworICAgIC8qIFBhc3NpbmcgdGhlIFhUQUwwIGZyZXF1ZW5jeSB0byBjbG9jayBkcml2ZXIuICovCisgICAgQ0xPQ0tfU2V0WHRhbDBGcmVxKEJPQVJEX1hUQUwwX0NMS19IWik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKiBDb25maWd1cmF0aW9uIEJPQVJEX0Jvb3RDbG9ja1JVTiAqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRFWFQgQkVMT1cgSVMgVVNFRCBBUyBTRVRUSU5HIEZPUiBUSEUgQ0xPQ0tTIFRPT0wgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyEhQ29uZmlndXJhdGlvbgorbmFtZTogQk9BUkRfQm9vdENsb2NrUlVOCitvdXRwdXRzOgorLSB7aWQ6IEJ1c19jbG9jay5vdXRGcmVxLCB2YWx1ZTogMjMuOTg2MTc2IE1Ien0KKy0ge2lkOiBDb3JlX2Nsb2NrLm91dEZyZXEsIHZhbHVlOiA0Ny45NzIzNTIgTUh6fQorLSB7aWQ6IEVSQ0xLMzJLLm91dEZyZXEsIHZhbHVlOiAzMi43Njgga0h6fQorLSB7aWQ6IEZsYXNoX2Nsb2NrLm91dEZyZXEsIHZhbHVlOiAyMy45ODYxNzYgTUh6fQorLSB7aWQ6IExQT19jbG9jay5vdXRGcmVxLCB2YWx1ZTogMSBrSHp9CistIHtpZDogTFBVQVJUMENMSy5vdXRGcmVxLCB2YWx1ZTogMzIgTUh6fQorLSB7aWQ6IE1DR0ZMTENMSy5vdXRGcmVxLCB2YWx1ZTogNDcuOTcyMzUyIE1Ien0KKy0ge2lkOiBNQ0dJUkNMSy5vdXRGcmVxLCB2YWx1ZTogMzIuNzY4IGtIen0KKy0ge2lkOiBPU0NFUkNMSy5vdXRGcmVxLCB2YWx1ZTogMzIgTUh6fQorLSB7aWQ6IFN5c3RlbV9jbG9jay5vdXRGcmVxLCB2YWx1ZTogNDcuOTcyMzUyIE1Ien0KKy0ge2lkOiBUUE1DTEsub3V0RnJlcSwgdmFsdWU6IDMyIE1Ien0KK3NldHRpbmdzOgorLSB7aWQ6IE1DR01vZGUsIHZhbHVlOiBGRUV9CistIHtpZDogTFBVQVJUMENsa0NvbmZpZywgdmFsdWU6ICd5ZXMnfQorLSB7aWQ6IE1DRy5GQ1JESVYuc2NhbGUsIHZhbHVlOiAnMSd9CistIHtpZDogTUNHLkZMTF9tdWwuc2NhbGUsIHZhbHVlOiAnMTQ2NCd9CistIHtpZDogTUNHLklSRUZTLnNlbCwgdmFsdWU6IE1DRy5GUkRJVn0KKy0ge2lkOiBNQ0cuT1NDU0VMLnNlbCwgdmFsdWU6IFJUQ18zMksuT1NDQ0xLMzJLfQorLSB7aWQ6IE1DR19DMV9JUkNMS0VOX0NGRywgdmFsdWU6IEVuYWJsZWR9CistIHtpZDogUlRDX0NSX09TQ0VfQ0ZHLCB2YWx1ZTogT3NjaWxsYXRvcl9lbmFibGVkfQorLSB7aWQ6IFNJTS5MUFVBUlQwU1JDU0VMLnNlbCwgdmFsdWU6IFJFRk9TQy5PU0NDTEt9CistIHtpZDogU0lNLlRQTVNSQ1NFTC5zZWwsIHZhbHVlOiBSRUZPU0MuT1NDQ0xLfQorLSB7aWQ6IFRQTUNsa0NvbmZpZywgdmFsdWU6ICd5ZXMnfQorc291cmNlczoKKy0ge2lkOiBSRUZPU0MuT1NDLm91dEZyZXEsIHZhbHVlOiAzMiBNSHosIGVuYWJsZWQ6IHRydWV9CistIHtpZDogUlRDXzMySy5PU0MzMmtIei5vdXRGcmVxLCB2YWx1ZTogMzIuNzY4IGtIeiwgZW5hYmxlZDogdHJ1ZX0KKyAqIEJFIENBUkVGVUwgTU9ESUZZSU5HIFRISVMgQ09NTUVOVCAtIElUIElTIFlBTUwgU0VUVElOR1MgRk9SIFRIRSBDTE9DS1MgVE9PTCAqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcyBmb3IgQk9BUkRfQm9vdENsb2NrUlVOIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjb25zdCBtY2dfY29uZmlnX3QgbWNnQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTiA9Cit7CisgICAgLm1jZ01vZGUgPSBrTUNHX01vZGVGRUUsICAgICAgICAgICAgICAgICAgLyogRkVFIC0gRkxMIEVuZ2FnZWQgRXh0ZXJuYWwgKi8KKyAgICAuaXJjbGtFbmFibGVNb2RlID0ga01DR19JcmNsa0VuYWJsZSwgICAgICAvKiBNQ0dJUkNMSyBlbmFibGVkLCBNQ0dJUkNMSyBkaXNhYmxlZCBpbiBTVE9QIG1vZGUgKi8KKyAgICAuaXJjcyA9IGtNQ0dfSXJjU2xvdywgICAgICAgICAgICAgICAgICAgICAvKiBTbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCAqLworICAgIC5mY3JkaXYgPSAweDBVLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgSVJDIGRpdmlkZXI6IGRpdmlkZWQgYnkgMSAqLworICAgIC5mcmRpdiA9IDB4MFUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZMTCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlcjogZGl2aWRlZCBieSAxICovCisgICAgLmRycyA9IGtNQ0dfRHJzTWlkLCAgICAgICAgICAgICAgICAgICAgICAgLyogTWlkIGZyZXF1ZW5jeSByYW5nZSAqLworICAgIC5kbXgzMiA9IGtNQ0dfRG14MzJGaW5lLCAgICAgICAgICAgICAgICAgIC8qIERDTyBpcyBmaW5lLXR1bmVkIGZvciBtYXhpbXVtIGZyZXF1ZW5jeSB3aXRoIDMyLjc2OCBrSHogcmVmZXJlbmNlICovCisgICAgLm9zY3NlbCA9IGtNQ0dfT3Njc2VsUnRjLCAgICAgICAgICAgICAgICAgLyogU2VsZWN0cyAzMiBrSHogUlRDIE9zY2lsbGF0b3IgKi8KK307Citjb25zdCBzaW1fY2xvY2tfY29uZmlnX3Qgc2ltQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTiA9Cit7CisgICAgLmVyMzJrU3JjID0gU0lNX09TQzMyS1NFTF9PU0MzMktDTEtfQ0xLLCAgLyogT1NDMzJLU0VMIHNlbGVjdDogT1NDMzJLQ0xLIGNsb2NrICovCisgICAgLmNsa2RpdjEgPSAweDEwMDAwVSwgICAgICAgICAgICAgICAgICAgICAgLyogU0lNX0NMS0RJVjEgLSBPVVRESVYxOiAvMSwgT1VURElWNDogLzIgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlIGZvciBCT0FSRF9Cb290Q2xvY2tSVU4gY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgQk9BUkRfQm9vdENsb2NrUlVOKHZvaWQpCit7CisgICAgLyogU2V0dXAgdGhlIHJlZmVyZW5jZSBvc2NpbGxhdG9yLiAqLworICAgIEJPQVJEX1JmT3NjSW5pdCgpOworICAgIC8qIFNldCB0aGUgc3lzdGVtIGNsb2NrIGRpdmlkZXJzIGluIFNJTSB0byBzYWZlIHZhbHVlLiAqLworICAgIENMT0NLX1NldFNpbVNhZmVEaXZzKCk7CisgICAgLyogRW5hYmxlIFJUQyBvc2NpbGxhdG9yLiAqLworICAgIENMT0NLX0NPTkZJR19FbmFibGVSdGNPc2MoUlRDX09TQ19DQVBfTE9BRF8wUEYpOworICAgIC8qIEluaXRpYWxpemVzIE9TQzAgYWNjb3JkaW5nIHRvIFJlZiBPU0MgbmVlZHMuICovCisgICAgQk9BUkRfSW5pdE9zYzAoKTsKKyAgICAvKiBTZXQgTUNHIHRvIEZFRSBtb2RlLiAqLworICAgIENMT0NLX0Jvb3RUb0ZlZU1vZGUobWNnQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTi5vc2NzZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBtY2dDb25maWdfQk9BUkRfQm9vdENsb2NrUlVOLmZyZGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgbWNnQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTi5kbXgzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4uZHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0xPQ0tfQ09ORklHX0ZsbFN0YWJsZURlbGF5KTsKKyAgICAvKiBDb25maWd1cmUgdGhlIEludGVybmFsIFJlZmVyZW5jZSBjbG9jayAoTUNHSVJDTEspLiAqLworICAgIENMT0NLX1NldEludGVybmFsUmVmQ2xrQ29uZmlnKG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4uaXJjbGtFbmFibGVNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jZ0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU4uaXJjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY2dDb25maWdfQk9BUkRfQm9vdENsb2NrUlVOLmZjcmRpdik7CisgICAgLyogU2V0IHRoZSBjbG9jayBjb25maWd1cmF0aW9uIGluIFNJTSBtb2R1bGUuICovCisgICAgQ0xPQ0tfU2V0U2ltQ29uZmlnKCZzaW1Db25maWdfQk9BUkRfQm9vdENsb2NrUlVOKTsKKyAgICAvKiBDb25maWd1cmUgUlRDIGNsb2NrLiAqLworICAgIENMT0NLX0NPTkZJR19TZXRSdGNDbG9jaygpOworICAgIC8qIFNldCBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuICovCisgICAgU3lzdGVtQ29yZUNsb2NrID0gQk9BUkRfQk9PVENMT0NLUlVOX0NPUkVfQ0xPQ0s7CisgICAgLyogU2V0IExQVUFSVDAgY2xvY2sgc291cmNlLiAqLworICAgIENMT0NLX1NldExwdWFydENsb2NrKFNJTV9MUFVBUlRfQ0xLX1NFTF9PU0NFUkNMS19DTEspOworICAgIC8qIFNldCBUUE0gY2xvY2sgc291cmNlLiAqLworICAgIENMT0NLX1NldFRwbUNsb2NrKFNJTV9UUE1fQ0xLX1NFTF9PU0NFUkNMS19DTEspOworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Nsb2NrX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTkzOTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbG9ja19jb25maWcuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQ0xPQ0tfQ09ORklHX0hfCisjZGVmaW5lIF9DTE9DS19DT05GSUdfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBCT0FSRF9YVEFMMF9DTEtfSFogICAgICAgICAgICAgICAgICAgICAgICAgMzIwMDAwMDBVICAvKiE8IEJvYXJkIHh0YWwwIGZyZXF1ZW5jeSBpbiBIeiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBCT0FSRF9Cb290Q2xvY2tSVU4gKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMgZm9yIEJPQVJEX0Jvb3RDbG9ja1JVTiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBCT0FSRF9CT09UQ0xPQ0tSVU5fQ09SRV9DTE9DSyAgICAgICAgICAgICAgNDc5NzIzNTJVICAvKiE8IENvcmUgY2xvY2sgZnJlcXVlbmN5OiA0Nzk3MjM1Mkh6ICovCisKKy8qISBAYnJpZWYgTUNHIHNldCBmb3IgQk9BUkRfQm9vdENsb2NrUlVOIGNvbmZpZ3VyYXRpb24uCisgKi8KK2V4dGVybiBjb25zdCBtY2dfY29uZmlnX3QgbWNnQ29uZmlnX0JPQVJEX0Jvb3RDbG9ja1JVTjsKKy8qISBAYnJpZWYgU0lNIG1vZHVsZSBzZXQgZm9yIEJPQVJEX0Jvb3RDbG9ja1JVTiBjb25maWd1cmF0aW9uLgorICovCitleHRlcm4gY29uc3Qgc2ltX2Nsb2NrX2NvbmZpZ190IHNpbUNvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU47CisvKiEgQGJyaWVmIE9TQyBzZXQgZm9yIEJPQVJEX0Jvb3RDbG9ja1JVTiBjb25maWd1cmF0aW9uLgorICovCitleHRlcm4gY29uc3Qgb3NjX2NvbmZpZ190IG9zY0NvbmZpZ19CT0FSRF9Cb290Q2xvY2tSVU47CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkgZm9yIEJPQVJEX0Jvb3RDbG9ja1JVTiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyovCisKKy8qIQorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgY29uZmlndXJhdGlvbiBvZiBjbG9ja3MuCisgKgorICovCit2b2lkIEJPQVJEX0Jvb3RDbG9ja1JVTih2b2lkKTsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisjZW5kaWYgLyogX0NMT0NLX0NPTkZJR19IXyAqLworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9kc3BpX2Ntc2lzLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9kc3BpX2Ntc2lzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhMjA2YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2RzcGlfY21zaXMuYwpAQCAtMCwwICsxLDE2OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICogQ29weXJpZ2h0IChjKSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9kc3BpX2Ntc2lzLmgiCisKKyNpZiAoKFJURV9TUEkwICYmIGRlZmluZWQoRFNQSTApKSB8fCAoUlRFX1NQSTEgJiYgZGVmaW5lZChEU1BJMSkpIHx8IChSVEVfU1BJMiAmJiBkZWZpbmVkKERTUEkyKSkpCisKKyNkZWZpbmUgQVJNX0RTUElfRFJWX1ZFUlNJT04gQVJNX0RSSVZFUl9WRVJTSU9OX01BSk9SX01JTk9SKDIsIDApIC8qIGRyaXZlciB2ZXJzaW9uICovCisKKy8qCisgKiBBUk1DQyBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0IHRoZSBkYXRhIHNlY3Rpb24gYXV0b21hdGljYWxseSwgc28gdGhlIGRyaXZlcgorICogbmVlZHMgdG8gc3BsaXQgdGhlIGRhdGEgdG8gc2VwYXJhdGUgc2VjdGlvbnMgZXhwbGljaXRseSwgdG8gcmVkdWNlIGNvZGVzaXplLgorICovCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKKyNkZWZpbmUgQVJNQ0NfU0VDVElPTihzZWN0aW9uX25hbWUpIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oc2VjdGlvbl9uYW1lKSkpCisjZW5kaWYKKworc3RhdGljIGNsb2NrX2lwX25hbWVfdCBjb25zdCBzX2RzcGlDbG9ja1tdID0gRFNQSV9DTE9DS1M7CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9jbXNpc19kc3BpX3Jlc291cmNlCit7CisgICAgU1BJX1R5cGUgKmJhc2U7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisgICAgdWludDMyX3QgKCpHZXRGcmVxKSh2b2lkKTsKK30gY21zaXNfZHNwaV9yZXNvdXJjZV90OworCit0eXBlZGVmIHVuaW9uIF9jbXNpc19kc3BpX2hhbmRsZQoreworICAgIGRzcGlfbWFzdGVyX2hhbmRsZV90IG1hc3RlckhhbmRsZTsKKyAgICBkc3BpX3NsYXZlX2hhbmRsZV90IHNsYXZlSGFuZGxlOworfSBjbXNpc19kc3BpX2hhbmRsZV90OworCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlCit7CisgICAgY21zaXNfZHNwaV9yZXNvdXJjZV90ICpyZXNvdXJjZTsKKyAgICBjbXNpc19kc3BpX2hhbmRsZV90ICpoYW5kbGU7CisgICAgQVJNX1NQSV9TaWduYWxFdmVudF90IGV2ZW50OworCisgICAgdWludDMyX3QgYmF1ZFJhdGVfQnBzOworICAgIGJvb2wgaXNJbml0aWFsaXplZDsKKyAgICBib29sIGlzQ29uZmlndXJlZDsKKyAgICBib29sIGlzUG93ZXJPbjsKK30gY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3Q7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX2Ntc2lzX2RzcGlfZG1hX3Jlc291cmNlCit7CisgICAgRE1BX1R5cGUgKnR4RG1hQmFzZTsKKyAgICB1aW50MzJfdCB0eERtYUNoYW5uZWw7CisgICAgRE1BTVVYX1R5cGUgKnR4RG1hbXV4QmFzZTsKKyAgICB1aW50OF90IHR4RG1hUmVxdWVzdDsKKworICAgIERNQV9UeXBlICpyeERtYUJhc2U7CisgICAgdWludDMyX3QgcnhEbWFDaGFubmVsOworICAgIERNQU1VWF9UeXBlICpyeERtYW11eEJhc2U7CisgICAgdWludDhfdCByeERtYVJlcXVlc3Q7Cit9IGNtc2lzX2RzcGlfZG1hX3Jlc291cmNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19kc3BpX2RtYV9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19kc3BpX3Jlc291cmNlX3QgKnJlc291cmNlOworICAgIGNtc2lzX2RzcGlfZG1hX3Jlc291cmNlX3QgKmRtYVJlc291cmNlOworICAgIHVuaW9uIF9jbXNpc19kbWFfaGFuZGxlCisgICAgeworICAgICAgICBkc3BpX21hc3Rlcl9kbWFfaGFuZGxlX3QgbWFzdGVySGFuZGxlOworICAgICAgICBkc3BpX3NsYXZlX2RtYV9oYW5kbGVfdCBzbGF2ZUhhbmRsZTsKKyAgICB9IGhhbmRsZTsKKyAgICBkbWFfaGFuZGxlX3QgdHhIYW5kbGU7CisgICAgZG1hX2hhbmRsZV90IHJ4SGFuZGxlOworICAgIEFSTV9TUElfU2lnbmFsRXZlbnRfdCBldmVudDsKKworICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7CisgICAgYm9vbCBpc0NvbmZpZ3VyZWQ7CisgICAgYm9vbCBpc1Bvd2VyT247Cit9IGNtc2lzX2RzcGlfZG1hX2RyaXZlcl9zdGF0ZV90OworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCit0eXBlZGVmIHVuaW9uIF9jbXNpc19kc3BpX2VkbWFfaGFuZGxlCit7CisgICAgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCBtYXN0ZXJIYW5kbGU7CisgICAgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90IHNsYXZlSGFuZGxlOworfSBjbXNpc19kc3BpX2VkbWFfaGFuZGxlX3Q7CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9jbXNpc19kc3BpX2VkbWFfcmVzb3VyY2UKK3sKKyAgICBETUFfVHlwZSAqdHhFZG1hQmFzZTsKKyAgICB1aW50MzJfdCB0eEVkbWFDaGFubmVsOworICAgIERNQU1VWF9UeXBlICp0eERtYW11eEJhc2U7CisgICAgdWludDhfdCB0eERtYVJlcXVlc3Q7CisKKyAgICBETUFfVHlwZSAqcnhFZG1hQmFzZTsKKyAgICB1aW50MzJfdCByeEVkbWFDaGFubmVsOworICAgIERNQU1VWF9UeXBlICpyeERtYW11eEJhc2U7CisgICAgdWludDhfdCByeERtYVJlcXVlc3Q7CisKKyAgICBETUFfVHlwZSAqbWFzdGVyTGlua0VkbWFCYXNlOworICAgIHVpbnQzMl90IG1hc3RlckxpbmtDaGFubmVsOworfSBjbXNpc19kc3BpX2VkbWFfcmVzb3VyY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19kc3BpX3Jlc291cmNlX3QgKnJlc291cmNlOworICAgIGNtc2lzX2RzcGlfZWRtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZTsKKyAgICBjbXNpc19kc3BpX2VkbWFfaGFuZGxlX3QgKmhhbmRsZTsKKyAgICBlZG1hX2hhbmRsZV90ICplZG1hUnhSZWdUb1J4RGF0YUhhbmRsZTsKKyAgICBlZG1hX2hhbmRsZV90ICplZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGU7CisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGU7CisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGU7CisgICAgQVJNX1NQSV9TaWduYWxFdmVudF90IGV2ZW50OworCisgICAgdWludDMyX3QgYmF1ZFJhdGVfQnBzOworICAgIGJvb2wgaXNJbml0aWFsaXplZDsKKyAgICBib29sIGlzQ29uZmlndXJlZDsKKyAgICBib29sIGlzUG93ZXJPbjsKK30gY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90OworI2VuZGlmCisKKy8qIERyaXZlciBWZXJzaW9uICovCitzdGF0aWMgY29uc3QgQVJNX0RSSVZFUl9WRVJTSU9OIHNfZHNwaURyaXZlclZlcnNpb24gPSB7QVJNX1NQSV9BUElfVkVSU0lPTiwgQVJNX0RTUElfRFJWX1ZFUlNJT059OworCisvKiBEcml2ZXIgQ2FwYWJpbGl0aWVzICovCitzdGF0aWMgY29uc3QgQVJNX1NQSV9DQVBBQklMSVRJRVMgc19kc3BpRHJpdmVyQ2FwYWJpbGl0aWVzID0geworICAgIDEsIC8qIFNpbXBsZXggTW9kZSAoTWFzdGVyIGFuZCBTbGF2ZSkgKi8KKyAgICAwLCAvKiBUSSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlICovCisgICAgMCwgLyogTWljcm93aXJlIEludGVyZmFjZSAgKi8KKyAgICAwICAvKiBTaWduYWwgTW9kZSBGYXVsdCBldmVudDogXHJlZiBBUk1fU1BJX0VWRU5UX01PREVfRkFVTFQgKi8KK307CisKKy8qCisgKkNvbW1vbiBDb250cm9sIGZ1bmN0aW9uIHVzZWQgYnkgRFNQSV9JbnRlcnJ1cHRDb250cm9sIC8gRFNQSV9FZG1hQ29udHJvbC4KKyAqLworc3RhdGljIGludDMyX3QgRFNQSV9Db21tb25Db250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZywgY21zaXNfZHNwaV9yZXNvdXJjZV90ICpyZXNvdXJjZSwgYm9vbCAqaXNDb25maWd1cmVkKQoreworICAgIGRzcGlfbWFzdGVyX2NvbmZpZ190IG1hc3RlckNvbmZpZzsKKyAgICBEU1BJX01hc3RlckdldERlZmF1bHRDb25maWcoJm1hc3RlckNvbmZpZyk7CisgICAgZHNwaV9zbGF2ZV9jb25maWdfdCBzbGF2ZUNvbmZpZzsKKyAgICBEU1BJX1NsYXZlR2V0RGVmYXVsdENvbmZpZygmc2xhdmVDb25maWcpOworICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJhdWRSYXRlID0gYXJnOworCisjaWYgKGRlZmluZWQoUlRFX1NQSTBfUENTX1RPX1NDS19ERUxBWSkgJiYgZGVmaW5lZChSVEVfU1BJMF9TQ0tfVE9fUFNDX0RFTEFZKSAmJiBcCisgICAgIGRlZmluZWQoUlRFX1NQSTBfQkVUV0VFTl9UUkFOU0ZFUl9ERUxBWSkpCisgICAgaWYgKDBVID09IHJlc291cmNlLT5pbnN0YW5jZSkKKyAgICB7CisgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLnBjc1RvU2NrRGVsYXlJbk5hbm9TZWMgPSBSVEVfU1BJMF9QQ1NfVE9fU0NLX0RFTEFZOworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5sYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYyA9IFJURV9TUEkwX1NDS19UT19QU0NfREVMQVk7CisgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJldHdlZW5UcmFuc2ZlckRlbGF5SW5OYW5vU2VjID0gUlRFX1NQSTBfQkVUV0VFTl9UUkFOU0ZFUl9ERUxBWTsKKyAgICB9CisjZW5kaWYgLypSVEUgRFNQSTAgdHJuYWZlciBkZWxheSB0aW1lIGNvbmZpZ3VyZSAqLworCisjaWYgKGRlZmluZWQoUlRFX1NQSTFfUENTX1RPX1NDS19ERUxBWSkgJiYgZGVmaW5lZChSVEVfU1BJMV9TQ0tfVE9fUFNDX0RFTEFZKSAmJiBcCisgICAgIGRlZmluZWQoUlRFX1NQSTFfQkVUV0VFTl9UUkFOU0ZFUl9ERUxBWSkpCisgICAgaWYgKDFVID09IHJlc291cmNlLT5pbnN0YW5jZSkKKyAgICB7CisgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLnBjc1RvU2NrRGVsYXlJbk5hbm9TZWMgPSBSVEVfU1BJMV9QQ1NfVE9fU0NLX0RFTEFZOworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5sYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYyA9IFJURV9TUEkxX1NDS19UT19QU0NfREVMQVk7CisgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJldHdlZW5UcmFuc2ZlckRlbGF5SW5OYW5vU2VjID0gUlRFX1NQSTFfQkVUV0VFTl9UUkFOU0ZFUl9ERUxBWTsKKyAgICB9CisjZW5kaWYgLypSVEUgRFNQSTEgdHJuYWZlciBkZWxheSB0aW1lIGNvbmZpZ3VyZSAqLworCisjaWYgKGRlZmluZWQoUlRFX1NQSTJfUENTX1RPX1NDS19ERUxBWSkgJiYgZGVmaW5lZChSVEVfU1BJMl9TQ0tfVE9fUFNDX0RFTEFZKSAmJiBcCisgICAgIGRlZmluZWQoUlRFX1NQSTJfQkVUV0VFTl9UUkFOU0ZFUl9ERUxBWSkpCisgICAgaWYgKDJVID09IHJlc291cmNlLT5pbnN0YW5jZSkKKyAgICB7CisgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLnBjc1RvU2NrRGVsYXlJbk5hbm9TZWMgPSBSVEVfU1BJMl9QQ1NfVE9fU0NLX0RFTEFZOworICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5sYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYyA9IFJURV9TUEkyX1NDS19UT19QU0NfREVMQVk7CisgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJldHdlZW5UcmFuc2ZlckRlbGF5SW5OYW5vU2VjID0gUlRFX1NQSTJfQkVUV0VFTl9UUkFOU0ZFUl9ERUxBWTsKKyAgICB9CisjZW5kaWYgLypSVEUgRFNQSTIgdHJuYWZlciBkZWxheSB0aW1lIGNvbmZpZ3VyZSAqLworCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1NQSV9GUkFNRV9GT1JNQVRfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fU1BJX0NQT0wwX0NQSEEwOiAvKiBDbG9jayBQb2xhcml0eSAwLCBDbG9jayBQaGFzZSAwKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUxvdzsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZUZpcnN0RWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZy5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlTG93OworICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnLmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9TUElfQ1BPTDBfQ1BIQTE6IC8qIENsb2NrIFBvbGFyaXR5IDAsIENsb2NrIFBoYXNlIDEqLworICAgICAgICAgICAgaWYgKERTUElfSXNNYXN0ZXIocmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlTG93OworICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgPSBrRFNQSV9DbG9ja1BoYXNlU2Vjb25kRWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZy5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlTG93OworICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnLmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VTZWNvbmRFZGdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX0NQT0wxX0NQSEEwOiAvKiBDbG9jayBQb2xhcml0eSAxLCBDbG9jayBQaGFzZSAwKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUhpZ2g7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BoYSA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5jcG9sID0ga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUhpZ2g7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZUZpcnN0RWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9DUE9MMV9DUEhBMTogLyogQ2xvY2sgUG9sYXJpdHkgMSwgQ2xvY2sgUGhhc2UgMSovCisgICAgICAgICAgICBpZiAoRFNQSV9Jc01hc3RlcihyZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BvbCA9IGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVIaWdoOworICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgPSBrRFNQSV9DbG9ja1BoYXNlU2Vjb25kRWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZy5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaDsKKyAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZy5jdGFyQ29uZmlnLmNwaGEgPSBrRFNQSV9DbG9ja1BoYXNlU2Vjb25kRWRnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoY29udHJvbCAmIEFSTV9TUElfREFUQV9CSVRTX01zaykgLyogc2V0dGluZyBOdW1iZXIgb2YgRGF0YSBiaXRzICovCisgICAgeworICAgICAgICBpZiAoKCgoY29udHJvbCAmIEFSTV9TUElfREFUQV9CSVRTX01zaykgPj4gQVJNX1NQSV9EQVRBX0JJVFNfUG9zKSA+PSA0KSAmJgorICAgICAgICAgICAgKCgoY29udHJvbCAmIEFSTV9TUElfREFUQV9CSVRTX01zaykgPj4gQVJNX1NQSV9EQVRBX0JJVFNfUG9zKSA8PSAxNikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iaXRzUGVyRnJhbWUgPSAoKGNvbnRyb2wgJiBBUk1fU1BJX0RBVEFfQklUU19Nc2spID4+IEFSTV9TUElfREFUQV9CSVRTX1Bvcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2xhdmVDb25maWcuY3RhckNvbmZpZy5iaXRzUGVyRnJhbWUgPSAoKGNvbnRyb2wgJiBBUk1fU1BJX0RBVEFfQklUU19Nc2spID4+IEFSTV9TUElfREFUQV9CSVRTX1Bvcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQVJNX1NQSV9FUlJPUl9EQVRBX0JJVFM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fU1BJX0JJVF9PUkRFUl9Nc2spCisgICAgeworICAgICAgICBjYXNlIEFSTV9TUElfTFNCX01TQjogLyogU1BJIEJpdCBvcmRlciBmcm9tIExTQiB0byBNU0IgKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5kaXJlY3Rpb24gPSBrRFNQSV9Mc2JGaXJzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9NU0JfTFNCOiAvKiBTUEkgQml0IG9yZGVyIGZyb20gTVNCIHRvIExTQiAqLworICAgICAgICAgICAgaWYgKERTUElfSXNNYXN0ZXIocmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmRpcmVjdGlvbiA9IGtEU1BJX01zYkZpcnN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChEU1BJX0lzTWFzdGVyKHJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIGlmICgqaXNDb25maWd1cmVkKQorICAgICAgICB7CisgICAgICAgICAgICBEU1BJX0RlaW5pdChyZXNvdXJjZS0+YmFzZSk7CisgICAgICAgIH0KKyAgICAgICAgRFNQSV9NYXN0ZXJJbml0KHJlc291cmNlLT5iYXNlLCAmbWFzdGVyQ29uZmlnLCByZXNvdXJjZS0+R2V0RnJlcSgpKTsKKyAgICAgICAgKmlzQ29uZmlndXJlZCA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgqaXNDb25maWd1cmVkKQorICAgICAgICB7CisgICAgICAgICAgICBEU1BJX0RlaW5pdChyZXNvdXJjZS0+YmFzZSk7CisgICAgICAgIH0KKyAgICAgICAgRFNQSV9TbGF2ZUluaXQocmVzb3VyY2UtPmJhc2UsICZzbGF2ZUNvbmZpZyk7CisgICAgICAgICppc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIEFSTV9EUklWRVJfVkVSU0lPTiBEU1BJeF9HZXRWZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJuIHNfZHNwaURyaXZlclZlcnNpb247Cit9CisKK3N0YXRpYyBBUk1fU1BJX0NBUEFCSUxJVElFUyBEU1BJeF9HZXRDYXBhYmlsaXRpZXModm9pZCkKK3sKKyAgICByZXR1cm4gc19kc3BpRHJpdmVyQ2FwYWJpbGl0aWVzOworfQorCisjZW5kaWYKKworI2lmIChSVEVfU1BJMF9ETUFfRU4gfHwgUlRFX1NQSTFfRE1BX0VOIHx8IFJURV9TUEkyX0RNQV9FTikKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKwordm9pZCBLU0RLX0RTUElfTWFzdGVyRWRtYUNhbGxiYWNrKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fU1BJX0VWRU5UX1RSQU5TRkVSX0NPTVBMRVRFOworICAgIH0KKworICAgIGlmIChrU3RhdHVzX0RTUElfT3V0T2ZSYW5nZSA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfREFUQV9MT1NUOworICAgIH0KKyAgICAvKiBVc2VyIGRhdGEgaXMgYWN0dWFsbHkgQ01TSVMgZHJpdmVyIGNhbGxiYWNrLiAqLworICAgIGlmICgoMFUgIT0gZXZlbnQpICYmICh1c2VyRGF0YSkpCisgICAgeworICAgICAgICAoKEFSTV9TUElfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KK3ZvaWQgS1NES19EU1BJX1NsYXZlRWRtYUNhbGxiYWNrKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudCA9IDBVOworCisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfVFJBTlNGRVJfQ09NUExFVEU7CisgICAgfQorCisgICAgaWYgKGtTdGF0dXNfRFNQSV9PdXRPZlJhbmdlID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1NQSV9FVkVOVF9EQVRBX0xPU1Q7CisgICAgfQorICAgIC8qIFVzZXIgZGF0YSBpcyBhY3R1YWxseSBDTVNJUyBkcml2ZXIgY2FsbGJhY2suICovCisgICAgaWYgKCgwVSAhPSBldmVudCkgJiYgKHVzZXJEYXRhKSkKKyAgICB7CisgICAgICAgICgoQVJNX1NQSV9TaWduYWxFdmVudF90KXVzZXJEYXRhKShldmVudCk7CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0VkbWFJbml0aWFsaXplKEFSTV9TUElfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCwgY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGlmIChkc3BpLT5pc0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgfQorCisgICAgZHNwaS0+aXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgZHNwaS0+ZXZlbnQgPSBjYl9ldmVudDsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9FZG1hVW5pbml0aWFsaXplKGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBkc3BpLT5pc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUsIGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfT0ZGOgorICAgICAgICAgICAgaWYgKGRzcGktPmlzUG93ZXJPbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEU1BJX0RlaW5pdChkc3BpLT5yZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0Rpc2FibGVDaGFubmVsKGRzcGktPmRtYVJlc291cmNlLT5yeERtYW11eEJhc2UsIGRzcGktPmRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRGlzYWJsZUNoYW5uZWwoZHNwaS0+ZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZHNwaS0+ZG1hUmVzb3VyY2UtPnR4RWRtYUNoYW5uZWwpOworICAgICAgICAgICAgICAgIGRzcGktPmlzUG93ZXJPbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRzcGktPmlzQ29uZmlndXJlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICBjYXNlIEFSTV9QT1dFUl9GVUxMOgorICAgICAgICAgICAgaWYgKCFkc3BpLT5pc0luaXRpYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRW5hYmxlIENsb2NrIGdhdGUgKi8KKyAgICAgICAgICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfZHNwaUNsb2NrW2RzcGktPnJlc291cmNlLT5pbnN0YW5jZV0pOworICAgICAgICAgICAgZHNwaS0+aXNQb3dlck9uID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBkc3BpX3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIucnhEYXRhID0gTlVMTDsKKyAgICB4ZmVyLnR4RGF0YSA9ICh1aW50OF90ICopZGF0YTsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyNpZiAoZGVmaW5lZChSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMFUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMCBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMVUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMSBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMlUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMiBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRFNQSSBzbGF2ZSB1c2UgQ3RhcjAgc2V0dGluZyBhbmQgc2xhdmUgY2FuIG9ubHkgdXNlIFBDUzAuICovCisgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9TbGF2ZUN0YXIwOworICAgIH0KKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfTWFzdGVyVHJhbnNmZXJFRE1BKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9TbGF2ZVRyYW5zZmVyRURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0RTUElfQnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGRzcGlfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci50eERhdGEgPSBOVUxMOworICAgIHhmZXIucnhEYXRhID0gKHVpbnQ4X3QgKilkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworI2lmIChkZWZpbmVkKFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgwVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkwIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgxVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkxIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgyVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkyIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEU1BJIHNsYXZlIHVzZSBDdGFyMCBzZXR0aW5nIGFuZCBzbGF2ZSBjYW4gb25seSB1c2UgUENTMC4gKi8KKyAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX1NsYXZlQ3RhcjA7CisgICAgfQorCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9NYXN0ZXJUcmFuc2ZlckVETUEoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZSwgJnhmZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBEU1BJX1NsYXZlVHJhbnNmZXJFRE1BKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZSwgJnhmZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfRFNQSV9CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBkc3BpX3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIudHhEYXRhID0gKHVpbnQ4X3QgKilkYXRhX291dDsKKyAgICB4ZmVyLnJ4RGF0YSA9ICh1aW50OF90ICopZGF0YV9pbjsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyNpZiAoZGVmaW5lZChSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMFUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMF9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMCBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMVUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMV9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMSBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoZGVmaW5lZChSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUwpKQorICAgICAgICBpZiAoMlUgPT0gZHNwaS0+cmVzb3VyY2UtPmluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfTWFzdGVyQ3RhcjAgfCBSVEVfU1BJMl9NQVNURVJfUENTX1BJTl9TRUw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBEU1BJMiBQQ1Mgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRFNQSSBzbGF2ZSB1c2UgQ3RhcjAgc2V0dGluZyBhbmQgc2xhdmUgY2FuIG9ubHkgdXNlIFBDUzAuICovCisgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9TbGF2ZUN0YXIwOworICAgIH0KKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IERTUElfTWFzdGVyVHJhbnNmZXJFRE1BKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9TbGF2ZVRyYW5zZmVyRURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0RTUElfQnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CitzdGF0aWMgdWludDMyX3QgRFNQSV9FZG1hR2V0Q291bnQoY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIHVpbnQzMl90IGNudDsKKyAgICBzaXplX3QgYnl0ZXM7CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBpZiAoZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUuc3RhdGUgIT0ga0RTUElfSWRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgY250ID0gMFVMOworICAgICAgICAgICAgcmV0dXJuIGNudDsKKyAgICAgICAgfQorICAgICAgICBieXRlcyA9ICh1aW50MzJfdClkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZS5uYnl0ZXMgKgorICAgICAgICAgICAgICAgIEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoZHNwaS0+ZG1hUmVzb3VyY2UtPnJ4RWRtYUJhc2UsIGRzcGktPmRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKyAgICAgICAgY250ID0gZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUudG90YWxCeXRlQ291bnQgLSBieXRlczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUuc3RhdGUgIT0ga0RTUElfSWRsZSkKKyAgICAgICAgeworICAgICAgICAgICAgY250ID0gMFVMOworICAgICAgICAgICAgcmV0dXJuIGNudDsKKyAgICAgICAgfQorICAgICAgICBieXRlcyA9ICh1aW50MzJfdClkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLm5ieXRlcyAqCisgICAgICAgICAgICAgICAgRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChkc3BpLT5kbWFSZXNvdXJjZS0+cnhFZG1hQmFzZSwgZHNwaS0+ZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwpOworICAgICAgICBjbnQgPSBkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLnRvdGFsQnl0ZUNvdW50IC0gYnl0ZXM7CisgICAgfQorCisgICAgcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcsIGNtc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBpZiAoIWRzcGktPmlzUG93ZXJPbikKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgIH0KKworICAgIGNtc2lzX2RzcGlfZWRtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZSA9IGRzcGktPmRtYVJlc291cmNlOworCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1NQSV9DT05UUk9MX01zaykKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1NQSV9NT0RFX0lOQUNUSVZFOgorICAgICAgICAgICAgRFNQSV9FbmFibGUoZHNwaS0+cmVzb3VyY2UtPmJhc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9NT0RFX01BU1RFUjogLyogU1BJIE1hc3RlciAoT3V0cHV0IG9uIFNPVVQsIElucHV0IG9uIFNJTik7IGFyZyA9IEJ1cyBTcGVlZCBpbiBicHMgKi8KKyAgICAgICAgICAgIERTUElfU2V0TWFzdGVyU2xhdmVNb2RlKGRzcGktPnJlc291cmNlLT5iYXNlLCBrRFNQSV9NYXN0ZXIpOworICAgICAgICAgICAgbWVtc2V0KChkc3BpLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSksIDAsIHNpemVvZihlZG1hX2hhbmRsZV90KSk7CisgICAgICAgICAgICBtZW1zZXQoKGRzcGktPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSksIDAsIHNpemVvZihlZG1hX2hhbmRsZV90KSk7CisgICAgICAgICAgICBtZW1zZXQoKGRzcGktPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlKSwgMCwgc2l6ZW9mKGVkbWFfaGFuZGxlX3QpKTsKKworICAgICAgICAgICAgRURNQV9DcmVhdGVIYW5kbGUoZHNwaS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsIGRtYVJlc291cmNlLT5yeEVkbWFCYXNlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICBETUFNVVhfU2V0U291cmNlKGRtYVJlc291cmNlLT5yeERtYW11eEJhc2UsIGRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsLCBkbWFSZXNvdXJjZS0+cnhEbWFSZXF1ZXN0KTsKKyAgICAgICAgICAgIERNQU1VWF9FbmFibGVDaGFubmVsKGRtYVJlc291cmNlLT5yeERtYW11eEJhc2UsIGRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKworICAgICAgICAgICAgRURNQV9DcmVhdGVIYW5kbGUoZHNwaS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYVJlc291cmNlLT50eEVkbWFDaGFubmVsKTsKKworICAgICAgICAgICAgRURNQV9DcmVhdGVIYW5kbGUoZHNwaS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUsIGRtYVJlc291cmNlLT5tYXN0ZXJMaW5rRWRtYUJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFSZXNvdXJjZS0+bWFzdGVyTGlua0NoYW5uZWwpOworCisgICAgICAgICAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+bWFzdGVyTGlua0NoYW5uZWwsIGRtYVJlc291cmNlLT50eERtYVJlcXVlc3QpOworICAgICAgICAgICAgICAgIERNQU1VWF9FbmFibGVDaGFubmVsKGRtYVJlc291cmNlLT50eERtYW11eEJhc2UsIGRtYVJlc291cmNlLT5tYXN0ZXJMaW5rQ2hhbm5lbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEU1BJX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlRURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJihkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLU0RLX0RTUElfTWFzdGVyRWRtYUNhbGxiYWNrLCAodm9pZCAqKWRzcGktPmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzcGktPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlKSwgKGRzcGktPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHNwaS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUpKTsKKworICAgICAgICAgICAgZHNwaS0+YmF1ZFJhdGVfQnBzID0gYXJnOworICAgICAgICAgICAgZHNwaS0+aXNDb25maWd1cmVkID0gdHJ1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX01PREVfU0xBVkU6IC8qIFNQSSBTbGF2ZSAgKE91dHB1dCBvbiBTT1VULCBJbnB1dCBvbiBTSU4pICovCisgICAgICAgICAgICBEU1BJX1NldE1hc3RlclNsYXZlTW9kZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwga0RTUElfU2xhdmUpOworICAgICAgICAgICAgbWVtc2V0KGRzcGktPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLCAwLCBzaXplb2YoZWRtYV9oYW5kbGVfdCkpOworICAgICAgICAgICAgbWVtc2V0KGRzcGktPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLCAwLCBzaXplb2YoZWRtYV9oYW5kbGVfdCkpOworCisgICAgICAgICAgICBFRE1BX0NyZWF0ZUhhbmRsZShkc3BpLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSwgZG1hUmVzb3VyY2UtPnR4RWRtYUJhc2UsIGRtYVJlc291cmNlLT50eEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBETUFNVVhfU2V0U291cmNlKGRtYVJlc291cmNlLT50eERtYW11eEJhc2UsIGRtYVJlc291cmNlLT50eEVkbWFDaGFubmVsLCBkbWFSZXNvdXJjZS0+dHhEbWFSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEVETUFfQ3JlYXRlSGFuZGxlKGRzcGktPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQmFzZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwpOworICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCwgZG1hUmVzb3VyY2UtPnJ4RG1hUmVxdWVzdCk7CisgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgIERTUElfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICYoZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtTREtfRFNQSV9TbGF2ZUVkbWFDYWxsYmFjaywgKHZvaWQgKilkc3BpLT5ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRzcGktPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlKSwgKGRzcGktPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlKSk7CisKKyAgICAgICAgICAgIGRzcGktPmlzQ29uZmlndXJlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9TUElfU0VUX0JVU19TUEVFRDogLyogU2V0IEJ1cyBTcGVlZCBpbiBicHM7ICovCisgICAgICAgICAgICBpZiAoIURTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoMCA9PSBEU1BJX01hc3RlclNldEJhdWRSYXRlKGRzcGktPnJlc291cmNlLT5iYXNlLCBrRFNQSV9DdGFyMCwgYXJnLCBkc3BpLT5yZXNvdXJjZS0+R2V0RnJlcSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHNwaS0+YmF1ZFJhdGVfQnBzID0gYXJnOworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX0dFVF9CVVNfU1BFRUQ6IC8qIFNldCBCdXMgU3BlZWQgaW4gYnBzOyBhcmcgPSB2YWx1ZSAqLworICAgICAgICAgICAgaWYgKCFEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRzcGktPmJhdWRSYXRlX0JwczsKKworICAgICAgICBjYXNlIEFSTV9TUElfQ09OVFJPTF9TUzogLyogQ29udHJvbCBTbGF2ZSBTZWxlY3Q7IGFyZyA9IDA6aW5hY3RpdmUsIDE6YWN0aXZlICAqLworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgY2FzZSBBUk1fU1BJX0FCT1JUX1RSQU5TRkVSOiAvKiBBYm9ydCBjdXJyZW50IGRhdGEgdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEU1BJX01hc3RlclRyYW5zZmVyQWJvcnRFRE1BKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERTUElfU2xhdmVUcmFuc2ZlckFib3J0RURNQShkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBEU1BJX0NvbW1vbkNvbnRyb2woY29udHJvbCwgZHNwaS0+YmF1ZFJhdGVfQnBzLCBkc3BpLT5yZXNvdXJjZSwgJmRzcGktPmlzQ29uZmlndXJlZCk7Cit9CisKK0FSTV9TUElfU1RBVFVTIERTUElfRWRtYUdldFN0YXR1cyhjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgQVJNX1NQSV9TVEFUVVMgc3RhdDsKKyAgICB1aW50MzJfdCBrc2RrX2RzcGlfc3RhdHVzID0gRFNQSV9HZXRTdGF0dXNGbGFncyhkc3BpLT5yZXNvdXJjZS0+YmFzZSk7CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBzdGF0LmJ1c3kgPSAoa0RTUElfQnVzeSA9PSBkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZS5zdGF0ZSkgPyAoMVUpIDogKDBVKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdC5idXN5ID0gKGtEU1BJX0J1c3kgPT0gZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZS5zdGF0ZSkgPyAoMVUpIDogKDBVKTsKKyAgICB9CisKKyAgICBzdGF0LmRhdGFfbG9zdCA9CisgICAgICAgICgoa3Nka19kc3BpX3N0YXR1cyAmIGtEU1BJX1R4Rmlmb1VuZGVyZmxvd0ZsYWcpIHx8IChrc2RrX2RzcGlfc3RhdHVzICYga0RTUElfUnhGaWZvT3ZlcmZsb3dGbGFnKSkgPyAoMVUpIDogKDBVKTsKKyAgICBzdGF0Lm1vZGVfZmF1bHQgPSAwVTsKKworICAgIHJldHVybiBzdGF0OworfQorI2VuZGlmIC8qIGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICovCisKKyNlbmRpZgorCisjaWYgKChSVEVfU1BJMCAmJiAhUlRFX1NQSTBfRE1BX0VOKSB8fCAoUlRFX1NQSTEgJiYgIVJURV9TUEkxX0RNQV9FTikgfHwgKFJURV9TUEkyICYmICFSVEVfU1BJMl9ETUFfRU4pKQorCit2b2lkIEtTREtfRFNQSV9NYXN0ZXJJbnRlcnJ1cHRDYWxsYmFjayhTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudCA9IDBVOworCisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfVFJBTlNGRVJfQ09NUExFVEU7CisgICAgfQorCisgICAgaWYgKGtTdGF0dXNfRFNQSV9FcnJvciA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfREFUQV9MT1NUOworICAgIH0KKyAgICAvKiBVc2VyIGRhdGEgaXMgYWN0dWFsbHkgQ01TSVMgZHJpdmVyIGNhbGxiYWNrLiAqLworICAgIGlmICgoMFUgIT0gZXZlbnQpICYmICh1c2VyRGF0YSkpCisgICAgeworICAgICAgICAoKEFSTV9TUElfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KK3ZvaWQgS1NES19EU1BJX1NsYXZlSW50ZXJydXB0Q2FsbGJhY2soU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudCA9IDBVOworCisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfVFJBTlNGRVJfQ09NUExFVEU7CisgICAgfQorCisgICAgaWYgKGtTdGF0dXNfRFNQSV9FcnJvciA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9TUElfRVZFTlRfREFUQV9MT1NUOworICAgIH0KKyAgICAvKiBVc2VyIGRhdGEgaXMgYWN0dWFsbHkgQ01TSVMgZHJpdmVyIGNhbGxiYWNrLiAqLworICAgIGlmICgoMFUgIT0gZXZlbnQpICYmICh1c2VyRGF0YSkpCisgICAgeworICAgICAgICAoKEFSTV9TUElfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgRFNQSV9JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9TUElfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCwgY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaWYgKGRzcGktPmlzSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKyAgICB9CisgICAgZHNwaS0+ZXZlbnQgPSBjYl9ldmVudDsKKyAgICBkc3BpLT5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9JbnRlcnJ1cHRVbmluaXRpYWxpemUoY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgZHNwaS0+aXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUsIGNtc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICpkc3BpKQoreworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgICAgICBpZiAoZHNwaS0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERTUElfRGVpbml0KGRzcGktPnJlc291cmNlLT5iYXNlKTsKKyAgICAgICAgICAgICAgICBkc3BpLT5pc1Bvd2VyT24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBkc3BpLT5pc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0xPVzoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICBpZiAoIWRzcGktPmlzSW5pdGlhbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHNwaS0+aXNQb3dlck9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfZHNwaUNsb2NrW2RzcGktPnJlc291cmNlLT5pbnN0YW5jZV0pOworICAgICAgICAgICAgICAgIGRzcGktPmlzUG93ZXJPbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgRFNQSV9JbnRlcnJ1cHRTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGRzcGlfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci5yeERhdGEgPSBOVUxMOworICAgIHhmZXIudHhEYXRhID0gKHVpbnQ4X3QgKilkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworI2lmIChkZWZpbmVkKFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgwVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkwIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgxVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkxIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgyVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkyIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEU1BJIHNsYXZlIHVzZSBDdGFyMCBzZXR0aW5nIGFuZCBzbGF2ZSBjYW4gb25seSB1c2UgUENTMC4gKi8KKyAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX1NsYXZlQ3RhcjA7CisgICAgfQorCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9TbGF2ZVRyYW5zZmVyTm9uQmxvY2tpbmcoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLCAmeGZlcik7CisgICAgfQorCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19EU1BJX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0ludGVycnVwdFJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgZHNwaV90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLnR4RGF0YSA9IE5VTEw7CisgICAgeGZlci5yeERhdGEgPSAodWludDhfdCAqKWRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIGlmIChEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICB7CisjaWYgKGRlZmluZWQoUlRFX1NQSTBfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDBVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTBfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTAgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisjaWYgKGRlZmluZWQoUlRFX1NQSTFfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDFVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTFfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTEgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisjaWYgKGRlZmluZWQoUlRFX1NQSTJfTUFTVEVSX1BDU19QSU5fU0VMKSkKKyAgICAgICAgaWYgKDJVID09IGRzcGktPnJlc291cmNlLT5pbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX01hc3RlckN0YXIwIHwgUlRFX1NQSTJfTUFTVEVSX1BDU19QSU5fU0VMOworICAgICAgICB9CisjZW5kaWYgLyogRFNQSTIgUENTIHNlbGVjdCBjb25maWd1cmF0aW9uICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIERTUEkgc2xhdmUgdXNlIEN0YXIwIHNldHRpbmcgYW5kIHNsYXZlIGNhbiBvbmx5IHVzZSBQQ1MwLiAqLworICAgICAgICB4ZmVyLmNvbmZpZ0ZsYWdzID0ga0RTUElfU2xhdmVDdGFyMDsKKyAgICB9CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBEU1BJX01hc3RlclRyYW5zZmVyTm9uQmxvY2tpbmcoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZSwgJnhmZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBEU1BJX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZyhkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0RTUElfQnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUElfSW50ZXJydXB0VHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGFfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGRzcGlfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci50eERhdGEgPSAodWludDhfdCAqKWRhdGFfb3V0OworICAgIHhmZXIucnhEYXRhID0gKHVpbnQ4X3QgKilkYXRhX2luOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworI2lmIChkZWZpbmVkKFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgwVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkwX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkwIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgxVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkxX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkxIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworI2lmIChkZWZpbmVkKFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTCkpCisgICAgICAgIGlmICgyVSA9PSBkc3BpLT5yZXNvdXJjZS0+aW5zdGFuY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHhmZXIuY29uZmlnRmxhZ3MgPSBrRFNQSV9NYXN0ZXJDdGFyMCB8IFJURV9TUEkyX01BU1RFUl9QQ1NfUElOX1NFTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIERTUEkyIFBDUyBzZWxlY3QgY29uZmlndXJhdGlvbiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEU1BJIHNsYXZlIHVzZSBDdGFyMCBzZXR0aW5nIGFuZCBzbGF2ZSBjYW4gb25seSB1c2UgUENTMC4gKi8KKyAgICAgICAgeGZlci5jb25maWdGbGFncyA9IGtEU1BJX1NsYXZlQ3RhcjA7CisgICAgfQorCisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKGRzcGktPnJlc291cmNlLT5iYXNlLCAmZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUsICZ4ZmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gRFNQSV9TbGF2ZVRyYW5zZmVyTm9uQmxvY2tpbmcoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLCAmeGZlcik7CisgICAgfQorCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19EU1BJX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorc3RhdGljIHVpbnQzMl90IERTUElfSW50ZXJydXB0R2V0Q291bnQoY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLnRvdGFsQnl0ZUNvdW50IC0gZHNwaS0+aGFuZGxlLT5tYXN0ZXJIYW5kbGUucmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUudG90YWxCeXRlQ291bnQgLSBkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgfQorfQorCitzdGF0aWMgaW50MzJfdCBEU1BJX0ludGVycnVwdENvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqZHNwaSkKK3sKKyAgICBpZiAoIWRzcGktPmlzUG93ZXJPbikKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgIH0KKworICAgIHN3aXRjaCAoY29udHJvbCAmIEFSTV9TUElfQ09OVFJPTF9Nc2spCisgICAgeworICAgICAgICBjYXNlIEFSTV9TUElfTU9ERV9JTkFDVElWRToKKyAgICAgICAgICAgIERTUElfRW5hYmxlKGRzcGktPnJlc291cmNlLT5iYXNlLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBjYXNlIEFSTV9TUElfTU9ERV9NQVNURVI6IC8qIFNQSSBNYXN0ZXIgKE91dHB1dCBvbiBTT1VULCBJbnB1dCBvbiBTSU4pOyBhcmcgPSBCdXMgU3BlZWQgaW4gYnBzICovCisgICAgICAgICAgICBEU1BJX1NldE1hc3RlclNsYXZlTW9kZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwga0RTUElfTWFzdGVyKTsKKyAgICAgICAgICAgIERTUElfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPm1hc3RlckhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1NES19EU1BJX01hc3RlckludGVycnVwdENhbGxiYWNrLCAodm9pZCAqKWRzcGktPmV2ZW50KTsKKyAgICAgICAgICAgIGRzcGktPmJhdWRSYXRlX0JwcyA9IGFyZzsKKyAgICAgICAgICAgIGRzcGktPmlzQ29uZmlndXJlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFSTV9TUElfTU9ERV9TTEFWRTogLyogU1BJIFNsYXZlICAoT3V0cHV0IG9uIFNPVVQsIElucHV0IG9uIFNJTikgKi8KKyAgICAgICAgICAgIERTUElfU2V0TWFzdGVyU2xhdmVNb2RlKGRzcGktPnJlc291cmNlLT5iYXNlLCBrRFNQSV9TbGF2ZSk7CisgICAgICAgICAgICBEU1BJX1NsYXZlVHJhbnNmZXJDcmVhdGVIYW5kbGUoZHNwaS0+cmVzb3VyY2UtPmJhc2UsICZkc3BpLT5oYW5kbGUtPnNsYXZlSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtTREtfRFNQSV9TbGF2ZUludGVycnVwdENhbGxiYWNrLCAodm9pZCAqKWRzcGktPmV2ZW50KTsKKworICAgICAgICAgICAgZHNwaS0+aXNDb25maWd1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9HRVRfQlVTX1NQRUVEOiAvKiBHZXQgQnVzIFNwZWVkIGluIGJwcyAqLworICAgICAgICAgICAgaWYgKCFEU1BJX0lzTWFzdGVyKGRzcGktPnJlc291cmNlLT5iYXNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRzcGktPmJhdWRSYXRlX0JwczsKKworICAgICAgICBjYXNlIEFSTV9TUElfU0VUX0JVU19TUEVFRDogLyogU2V0IEJ1cyBTcGVlZCBpbiBicHM7ICovCisgICAgICAgICAgICBpZiAoIURTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKDAgPT0gRFNQSV9NYXN0ZXJTZXRCYXVkUmF0ZShkc3BpLT5yZXNvdXJjZS0+YmFzZSwga0RTUElfQ3RhcjAsIGFyZywgZHNwaS0+cmVzb3VyY2UtPkdldEZyZXEoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRzcGktPmJhdWRSYXRlX0JwcyA9IGFyZzsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGNhc2UgQVJNX1NQSV9DT05UUk9MX1NTOiAvKiBDb250cm9sIFNsYXZlIFNlbGVjdDsgYXJnID0gMDppbmFjdGl2ZSwgMTphY3RpdmUgICovCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKworICAgICAgICBjYXNlIEFSTV9TUElfQUJPUlRfVFJBTlNGRVI6IC8qIEFib3J0IGN1cnJlbnQgZGF0YSB0cmFuc2ZlciAqLworICAgICAgICAgICAgaWYgKERTUElfSXNNYXN0ZXIoZHNwaS0+cmVzb3VyY2UtPmJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERTUElfTWFzdGVyVHJhbnNmZXJBYm9ydChkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEU1BJX1NsYXZlVHJhbnNmZXJBYm9ydChkc3BpLT5yZXNvdXJjZS0+YmFzZSwgJmRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIERTUElfQ29tbW9uQ29udHJvbChjb250cm9sLCBkc3BpLT5iYXVkUmF0ZV9CcHMsIGRzcGktPnJlc291cmNlLCAmZHNwaS0+aXNDb25maWd1cmVkKTsKK30KKworQVJNX1NQSV9TVEFUVVMgRFNQSV9JbnRlcnJ1cHRHZXRTdGF0dXMoY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmRzcGkpCit7CisgICAgQVJNX1NQSV9TVEFUVVMgc3RhdDsKKyAgICB1aW50MzJfdCBrc2RrX2RzcGlfc3RhdHVzID0gRFNQSV9HZXRTdGF0dXNGbGFncyhkc3BpLT5yZXNvdXJjZS0+YmFzZSk7CisKKyAgICBpZiAoRFNQSV9Jc01hc3Rlcihkc3BpLT5yZXNvdXJjZS0+YmFzZSkpCisgICAgeworICAgICAgICBzdGF0LmJ1c3kgPSAoKGRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgKGRzcGktPmhhbmRsZS0+bWFzdGVySGFuZGxlLnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPiAwKSkgPworICAgICAgICAgICAgICAgICAgICAgICAgKDFVKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAoMFUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0LmJ1c3kgPSAoKGRzcGktPmhhbmRsZS0+c2xhdmVIYW5kbGUucmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDApIHx8CisgICAgICAgICAgICAgICAgICAgICAoZHNwaS0+aGFuZGxlLT5zbGF2ZUhhbmRsZS5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID4gMCkpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICgxVSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgKDBVKTsKKyAgICB9CisgICAgc3RhdC5kYXRhX2xvc3QgPQorICAgICAgICAoKGtzZGtfZHNwaV9zdGF0dXMgJiBrRFNQSV9UeEZpZm9VbmRlcmZsb3dGbGFnKSB8fCAoa3Nka19kc3BpX3N0YXR1cyAmIGtEU1BJX1J4Rmlmb092ZXJmbG93RmxhZykpID8gKDFVKSA6ICgwVSk7CisgICAgc3RhdC5tb2RlX2ZhdWx0ID0gMFU7CisKKyAgICByZXR1cm4gc3RhdDsKK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERTUEkwKSAmJiBSVEVfU1BJMAorCitleHRlcm4gdWludDMyX3QgRFNQSTBfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIERTUEkwX0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgRFNQSTBfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfZHNwaV9yZXNvdXJjZV90IERTUEkwX1Jlc291cmNlID0ge0RTUEkwLCAwLCBEU1BJMF9HZXRGcmVxfTsKKworI2lmIFJURV9TUEkwX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorY21zaXNfZHNwaV9lZG1hX3Jlc291cmNlX3QgRFNQSTBfRWRtYVJlc291cmNlID0geworICAgIFJURV9TUEkwX0RNQV9UWF9ETUFfQkFTRSwgICBSVEVfU1BJMF9ETUFfVFhfQ0gsICBSVEVfU1BJMF9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9TUEkwX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9TUEkwX0RNQV9SWF9ETUFfQkFTRSwgICBSVEVfU1BJMF9ETUFfUlhfQ0gsICBSVEVfU1BJMF9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9TUEkwX0RNQV9SWF9QRVJJX1NFTCwKKworICAgIFJURV9TUEkwX0RNQV9MSU5LX0RNQV9CQVNFLCBSVEVfU1BJMF9ETUFfTElOS19DSH07CisKK2Ntc2lzX2RzcGlfZWRtYV9oYW5kbGVfdCBEU1BJMF9FZG1hSGFuZGxlOworCitlZG1hX2hhbmRsZV90IERTUEkwX0VkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMF9FZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMF9FZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGU7CitlZG1hX2hhbmRsZV90IERTUEkwX0VlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJkc3BpMF9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgRFNQSTBfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCBEU1BJMF9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmRFNQSTBfUmVzb3VyY2UsCisgICAgJkRTUEkwX0VkbWFSZXNvdXJjZSwKKyAgICAmRFNQSTBfRWRtYUhhbmRsZSwKKyAgICAmRFNQSTBfRWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsCisgICAgJkRTUEkwX0VlZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUsCisgICAgJkRTUEkwX0VlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSwKKyAgICAmRFNQSTBfRWVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgRFNQSTBfRWRtYUluaXRpYWxpemUoQVJNX1NQSV9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIERTUEkwX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZEU1BJMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgRFNQSTBfRGVpbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0VkbWFVbmluaXRpYWxpemUoJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBEU1BJX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZEU1BJMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfRWRtYVNlbmQoZGF0YSwgbnVtLCAmRFNQSTBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmRFNQSTBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IERTUEkwX0VkbWFHZXRDb3VudCh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0VkbWFHZXRDb3VudCgmRFNQSTBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBEU1BJX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkRTUEkwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fU1BJX1NUQVRVUyBEU1BJMF9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfRWRtYUdldFN0YXR1cygmRFNQSTBfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCitjbXNpc19kc3BpX2hhbmRsZV90IERTUEkwX0hhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJkc3BpMF9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IERTUEkwX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2RzcGlfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IERTUEkwX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkRTUEkwX1Jlc291cmNlLCAmRFNQSTBfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgRFNQSTBfSW50ZXJydXB0SW5pdGlhbGl6ZShBUk1fU1BJX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgRFNQSTBfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRJbml0aWFsaXplKGNiX2V2ZW50LCAmRFNQSTBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9JbnRlcnJ1cHRVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBEU1BJMF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0VW5pbml0aWFsaXplKCZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0UG93ZXJDb250cm9sKHN0YXRlLCAmRFNQSTBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMF9JbnRlcnJ1cHRTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRTZW5kKGRhdGEsIG51bSwgJkRTUEkwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfSW50ZXJydXB0UmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0UmVjZWl2ZShkYXRhLCBudW0sICZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkwX0ludGVycnVwdFRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0VHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkRTUEkwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IERTUEkwX0ludGVycnVwdEdldENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0R2V0Q291bnQoJkRTUEkwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTBfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0Q29udHJvbChjb250cm9sLCBhcmcsICZEU1BJMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fU1BJX1NUQVRVUyBEU1BJMF9JbnRlcnJ1cHRHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRHZXRTdGF0dXMoJkRTUEkwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfU1BJIERyaXZlcl9TUEkwID0ge0RTUEl4X0dldFZlcnNpb24sICAgICBEU1BJeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX1NQSTBfRE1BX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMF9FZG1hSW5pdGlhbGl6ZSwgRFNQSTBfRWRtYVVuaW5pdGlhbGl6ZSwgRFNQSTBfRWRtYVBvd2VyQ29udHJvbCwgRFNQSTBfRWRtYVNlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMF9FZG1hUmVjZWl2ZSwgICAgRFNQSTBfRWRtYVRyYW5zZmVyLCAgICAgRFNQSTBfRWRtYUdldENvdW50LCAgICAgRFNQSTBfRWRtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMF9FZG1hR2V0U3RhdHVzCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTBfSW50ZXJydXB0SW5pdGlhbGl6ZSwgRFNQSTBfSW50ZXJydXB0VW5pbml0aWFsaXplLCBEU1BJMF9JbnRlcnJ1cHRQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMF9JbnRlcnJ1cHRTZW5kLCBEU1BJMF9JbnRlcnJ1cHRSZWNlaXZlLCBEU1BJMF9JbnRlcnJ1cHRUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkwX0ludGVycnVwdEdldENvdW50LCBEU1BJMF9JbnRlcnJ1cHRDb250cm9sLCBEU1BJMF9JbnRlcnJ1cHRHZXRTdGF0dXMKKyNlbmRpZgorfTsKKworI2VuZGlmIC8qICBEU1BJMCAgKi8KKworI2lmIGRlZmluZWQoRFNQSTEpICYmIFJURV9TUEkxCisKK2V4dGVybiB1aW50MzJfdCBEU1BJMV9HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgRFNQSTFfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBEU1BJMV9EZWluaXRQaW5zKHZvaWQpOworCitjbXNpc19kc3BpX3Jlc291cmNlX3QgRFNQSTFfUmVzb3VyY2UgPSB7RFNQSTEsIDEsIERTUEkxX0dldEZyZXF9OworCisjaWYgUlRFX1NQSTFfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCitjbXNpc19kc3BpX2VkbWFfcmVzb3VyY2VfdCBEU1BJMV9FZG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1NQSTFfRE1BX1RYX0RNQV9CQVNFLCAgIFJURV9TUEkxX0RNQV9UWF9DSCwgIFJURV9TUEkxX0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1NQSTFfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1NQSTFfRE1BX1JYX0RNQV9CQVNFLCAgIFJURV9TUEkxX0RNQV9SWF9DSCwgIFJURV9TUEkxX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1NQSTFfRE1BX1JYX1BFUklfU0VMLAorCisgICAgUlRFX1NQSTFfRE1BX0xJTktfRE1BX0JBU0UsIFJURV9TUEkxX0RNQV9MSU5LX0NIfTsKKworY21zaXNfZHNwaV9lZG1hX2hhbmRsZV90IERTUEkxX0VkbWFIYW5kbGU7CisKK2VkbWFfaGFuZGxlX3QgRFNQSTFfRWRtYVJ4UmVnVG9SeERhdGFIYW5kbGU7CitlZG1hX2hhbmRsZV90IERTUEkxX0VlZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGU7CitlZG1hX2hhbmRsZV90IERTUEkxX0VlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZTsKK2VkbWFfaGFuZGxlX3QgRFNQSTFfRWVkbWFUeERhdGFUb1R4UmVnSGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImRzcGkxX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCBEU1BJMV9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfZHNwaV9lZG1hX2RyaXZlcl9zdGF0ZV90IERTUEkxX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZEU1BJMV9SZXNvdXJjZSwKKyAgICAmRFNQSTFfRWRtYVJlc291cmNlLAorICAgICZEU1BJMV9FZG1hSGFuZGxlLAorICAgICZEU1BJMV9FZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwKKyAgICAmRFNQSTFfRWVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSwKKyAgICAmRFNQSTFfRWVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLAorICAgICZEU1BJMV9FZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBEU1BJMV9FZG1hSW5pdGlhbGl6ZShBUk1fU1BJX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgRFNQSTFfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkRTUEkxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBEU1BJMV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfRWRtYVVuaW5pdGlhbGl6ZSgmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIERTUElfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkRTUEkxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hU2VuZChkYXRhLCBudW0sICZEU1BJMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9FZG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfRWRtYVJlY2VpdmUoZGF0YSwgbnVtLCAmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfRWRtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZEU1BJMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgRFNQSTFfRWRtYUdldENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfRWRtYUdldENvdW50KCZEU1BJMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIERTUElfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmRFNQSTFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9TUElfU1RBVFVTIERTUEkxX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9FZG1hR2V0U3RhdHVzKCZEU1BJMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworY21zaXNfZHNwaV9oYW5kbGVfdCBEU1BJMV9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiZHNwaTFfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZSIpCitjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19kc3BpX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZEU1BJMV9SZXNvdXJjZSwgJkRTUEkxX0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0ludGVycnVwdEluaXRpYWxpemUoQVJNX1NQSV9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIERTUEkxX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0SW5pdGlhbGl6ZShjYl9ldmVudCwgJkRTUEkxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfSW50ZXJydXB0VW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgRFNQSTFfRGVpbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFVuaW5pdGlhbGl6ZSgmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9JbnRlcnJ1cHRQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFBvd2VyQ29udHJvbChzdGF0ZSwgJkRTUEkxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTFfSW50ZXJydXB0U2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0U2VuZChkYXRhLCBudW0sICZEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0ludGVycnVwdFJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFJlY2VpdmUoZGF0YSwgbnVtLCAmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMV9JbnRlcnJ1cHRUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBEU1BJMV9JbnRlcnJ1cHRHZXRDb3VudCh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdEdldENvdW50KCZEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkxX0ludGVycnVwdENvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdENvbnRyb2woY29udHJvbCwgYXJnLCAmRFNQSTFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1NQSV9TVEFUVVMgRFNQSTFfSW50ZXJydXB0R2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfSW50ZXJydXB0R2V0U3RhdHVzKCZEU1BJMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCitBUk1fRFJJVkVSX1NQSSBEcml2ZXJfU1BJMSA9IHtEU1BJeF9HZXRWZXJzaW9uLCAgICAgRFNQSXhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9TUEkxX0RNQV9FTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTFfRWRtYUluaXRpYWxpemUsIERTUEkxX0VkbWFVbmluaXRpYWxpemUsIERTUEkxX0VkbWFQb3dlckNvbnRyb2wsIERTUEkxX0VkbWFTZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTFfRWRtYVJlY2VpdmUsICAgIERTUEkxX0VkbWFUcmFuc2ZlciwgICAgIERTUEkxX0VkbWFHZXRDb3VudCwgICAgIERTUEkxX0VkbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTFfRWRtYUdldFN0YXR1cworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkxX0ludGVycnVwdEluaXRpYWxpemUsIERTUEkxX0ludGVycnVwdFVuaW5pdGlhbGl6ZSwgRFNQSTFfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTFfSW50ZXJydXB0U2VuZCwgRFNQSTFfSW50ZXJydXB0UmVjZWl2ZSwgRFNQSTFfSW50ZXJydXB0VHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMV9JbnRlcnJ1cHRHZXRDb3VudCwgRFNQSTFfSW50ZXJydXB0Q29udHJvbCwgRFNQSTFfSW50ZXJydXB0R2V0U3RhdHVzCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiAgRFNQSTEgICovCisKKyNpZiBkZWZpbmVkKERTUEkyKSAmJiBSVEVfU1BJMgorCitleHRlcm4gdWludDMyX3QgRFNQSTJfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIERTUEkyX0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgRFNQSTJfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfZHNwaV9yZXNvdXJjZV90IERTUEkyX1Jlc291cmNlID0ge0RTUEkyLCAyLCBEU1BJMl9HZXRGcmVxfTsKKworI2lmIFJURV9TUEkyX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorY21zaXNfZHNwaV9lZG1hX3Jlc291cmNlX3QgRFNQSTJfRWRtYVJlc291cmNlID0geworICAgIFJURV9TUEkyX0RNQV9UWF9ETUFfQkFTRSwgICBSVEVfU1BJMl9ETUFfVFhfQ0gsICBSVEVfU1BJMl9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9TUEkyX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9TUEkyX0RNQV9SWF9ETUFfQkFTRSwgICBSVEVfU1BJMl9ETUFfUlhfQ0gsICBSVEVfU1BJMl9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9TUEkyX0RNQV9SWF9QRVJJX1NFTCwKKworICAgIFJURV9TUEkyX0RNQV9MSU5LX0RNQV9CQVNFLCBSVEVfU1BJMl9ETUFfTElOS19DSH07CisKK2Ntc2lzX2RzcGlfZWRtYV9oYW5kbGVfdCBEU1BJMl9FZG1hSGFuZGxlOworCitlZG1hX2hhbmRsZV90IERTUEkyX0VkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMl9FZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlOworZWRtYV9oYW5kbGVfdCBEU1BJMl9FZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGU7CitlZG1hX2hhbmRsZV90IERTUEkyX0VlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJkc3BpMl9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19kc3BpX2VkbWFfZHJpdmVyX3N0YXRlX3QgRFNQSTJfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2RzcGlfZWRtYV9kcml2ZXJfc3RhdGVfdCBEU1BJMl9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmRFNQSTJfUmVzb3VyY2UsCisgICAgJkRTUEkyX0VkbWFSZXNvdXJjZSwKKyAgICAmRFNQSTJfRWRtYUhhbmRsZSwKKyAgICAmRFNQSTJfRWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsCisgICAgJkRTUEkyX0VlZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUsCisgICAgJkRTUEkyX0VlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSwKKyAgICAmRFNQSTJfRWVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgRFNQSTJfRWRtYUluaXRpYWxpemUoQVJNX1NQSV9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIERTUEkyX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIERTUElfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZEU1BJMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgRFNQSTJfRGVpbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0VkbWFVbmluaXRpYWxpemUoJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBEU1BJX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZEU1BJMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIERTUElfRWRtYVNlbmQoZGF0YSwgbnVtLCAmRFNQSTJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmRFNQSTJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IERTUEkyX0VkbWFHZXRDb3VudCh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0VkbWFHZXRDb3VudCgmRFNQSTJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBEU1BJX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkRTUEkyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fU1BJX1NUQVRVUyBEU1BJMl9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIERTUElfRWRtYUdldFN0YXR1cygmRFNQSTJfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2Ntc2lzX2RzcGlfaGFuZGxlX3QgRFNQSTJfSGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImRzcGkyX2ludGVycnVwdF9kcml2ZXJfc3RhdGUiKQorY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfZHNwaV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmRFNQSTJfUmVzb3VyY2UsICZEU1BJMl9IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBEU1BJMl9JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9TUElfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBEU1BJMl9Jbml0UGlucygpOworICAgIHJldHVybiBEU1BJX0ludGVycnVwdEluaXRpYWxpemUoY2JfZXZlbnQsICZEU1BJMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0ludGVycnVwdFVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIERTUEkyX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRVbmluaXRpYWxpemUoJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfSW50ZXJydXB0UG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRQb3dlckNvbnRyb2woc3RhdGUsICZEU1BJMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IERTUEkyX0ludGVycnVwdFNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdFNlbmQoZGF0YSwgbnVtLCAmRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9JbnRlcnJ1cHRSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRSZWNlaXZlKGRhdGEsIG51bSwgJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgRFNQSTJfSW50ZXJydXB0VHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgRFNQSTJfSW50ZXJydXB0R2V0Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRHZXRDb3VudCgmRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBEU1BJMl9JbnRlcnJ1cHRDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gRFNQSV9JbnRlcnJ1cHRDb250cm9sKGNvbnRyb2wsIGFyZywgJkRTUEkyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9TUElfU1RBVFVTIERTUEkyX0ludGVycnVwdEdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBEU1BJX0ludGVycnVwdEdldFN0YXR1cygmRFNQSTJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorI2VuZGlmCisKK0FSTV9EUklWRVJfU1BJIERyaXZlcl9TUEkyID0ge0RTUEl4X0dldFZlcnNpb24sICAgICBEU1BJeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX1NQSTJfRE1BX0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMl9FZG1hSW5pdGlhbGl6ZSwgRFNQSTJfRWRtYVVuaW5pdGlhbGl6ZSwgRFNQSTJfRWRtYVBvd2VyQ29udHJvbCwgRFNQSTJfRWRtYVNlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMl9FZG1hUmVjZWl2ZSwgICAgRFNQSTJfRWRtYVRyYW5zZmVyLCAgICAgRFNQSTJfRWRtYUdldENvdW50LCAgICAgRFNQSTJfRWRtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMl9FZG1hR2V0U3RhdHVzCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSTJfSW50ZXJydXB0SW5pdGlhbGl6ZSwgRFNQSTJfSW50ZXJydXB0VW5pbml0aWFsaXplLCBEU1BJMl9JbnRlcnJ1cHRQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJMl9JbnRlcnJ1cHRTZW5kLCBEU1BJMl9JbnRlcnJ1cHRSZWNlaXZlLCBEU1BJMl9JbnRlcnJ1cHRUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUEkyX0ludGVycnVwdEdldENvdW50LCBEU1BJMl9JbnRlcnJ1cHRDb250cm9sLCBEU1BJMl9JbnRlcnJ1cHRHZXRTdGF0dXMKKyNlbmRpZgorfTsKKworI2VuZGlmIC8qICBEU1BJMiAgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2RzcGlfY21zaXMuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2RzcGlfY21zaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkwZTMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfZHNwaV9jbXNpcy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICogQ29weXJpZ2h0IChjKSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0RTUElfQ01TSVNJX0hfCisjZGVmaW5lIF9GU0xfRFNQSV9DTVNJU0lfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKyNpbmNsdWRlICJSVEVfRGV2aWNlLmgiCisjaW5jbHVkZSAiRHJpdmVyX1NQSS5oIgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyNpbmNsdWRlICJmc2xfZHNwaV9lZG1hLmgiCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorI2luY2x1ZGUgImZzbF9lZG1hLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFNQSTApCitleHRlcm4gQVJNX0RSSVZFUl9TUEkgRHJpdmVyX1NQSTA7CisjZW5kaWYgLyogRFNQSTAgKi8KKworI2lmIGRlZmluZWQoRFNQSTEpCitleHRlcm4gQVJNX0RSSVZFUl9TUEkgRHJpdmVyX1NQSTE7CisjZW5kaWYgLyogRFNQSTEgKi8KKworI2lmIGRlZmluZWQoRFNQSTIpCitleHRlcm4gQVJNX0RSSVZFUl9TUEkgRHJpdmVyX1NQSTI7CisjZW5kaWYgLyogRFNQSTIgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9pMmNfY21zaXMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2kyY19jbXNpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDExZGIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9pMmNfY21zaXMuYwpAQCAtMCwwICsxLDE5OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICogQ29weXJpZ2h0IChjKSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9pMmNfY21zaXMuaCIKKworI2lmICgoUlRFX0kyQzAgJiYgZGVmaW5lZChJMkMwKSkgfHwgKFJURV9JMkMxICYmIGRlZmluZWQoSTJDMSkpIHx8IChSVEVfSTJDMiAmJiBkZWZpbmVkKEkyQzIpKSB8fCBcCisgICAgIChSVEVfSTJDMyAmJiBkZWZpbmVkKEkyQzMpKSkKKworI2RlZmluZSBBUk1fSTJDX0RSVl9WRVJTSU9OIEFSTV9EUklWRVJfVkVSU0lPTl9NQUpPUl9NSU5PUigyLCAwKQorCisvKgorICogQVJNQ0MgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdCB0aGUgZGF0YSBzZWN0aW9uIGF1dG9tYXRpY2FsbHksIHNvIHRoZSBkcml2ZXIKKyAqIG5lZWRzIHRvIHNwbGl0IHRoZSBkYXRhIHRvIHNlcGFyYXRlIHNlY3Rpb25zIGV4cGxpY2l0bHksIHRvIHJlZHVjZSBjb2Rlc2l6ZS4KKyAqLworI2lmIGRlZmluZWQoX19DQ19BUk0pCisjZGVmaW5lIEFSTUNDX1NFQ1RJT04oc2VjdGlvbl9uYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKHNlY3Rpb25fbmFtZSkpKQorI2VuZGlmCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9jbXNpc19pMmNfcmVzb3VyY2UKK3sKKyAgICBJMkNfVHlwZSAqYmFzZTsgICAgICAgICAgICAvKiE8IEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gICAgICAqLworICAgIHVpbnQzMl90ICgqR2V0RnJlcSkodm9pZCk7IC8qITwgRnVuY3Rpb24gdG8gZ2V0IHRoZSBjbG9jayBmcmVxdWVuY3kuICovCisKK30gY21zaXNfaTJjX3Jlc291cmNlX3Q7CisKK3R5cGVkZWYgdW5pb24gX2Ntc2lzX2kyY19oYW5kbGUKK3sKKyAgICBpMmNfbWFzdGVyX2hhbmRsZV90IG1hc3Rlcl9oYW5kbGU7IC8qITwgbWFzdGVyIEludGVydXB0IHRyYW5zZmVyIGhhbmRsZS4gKi8KKyAgICBpMmNfc2xhdmVfaGFuZGxlX3Qgc2xhdmVfaGFuZGxlOyAgIC8qITwgc2xhdmUgSW50ZXJ1cHQgdHJhbnNmZXIgaGFuZGxlLiAqLworfSBjbXNpc19pMmNfaGFuZGxlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZQoreworICAgIGNtc2lzX2kyY19yZXNvdXJjZV90ICpyZXNvdXJjZTsgLyohPCBCYXNpYyBJMkMgcmVzb3VyY2UuICovCisgICAgY21zaXNfaTJjX2hhbmRsZV90ICpoYW5kbGU7CisgICAgQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50OyAvKiE8IENhbGxiYWNrIGZ1bmN0aW9uLiAgICAgKi8KKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7ICAgICAgICAgICAgIC8qITwgSXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAqLworfSBjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90OworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9jbXNpc19pMmNfZG1hX3Jlc291cmNlCit7CisgICAgRE1BX1R5cGUgKmkyY0RtYUJhc2U7ICAgICAgIC8qITwgRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBpMmMuICAgICovCisgICAgdWludDMyX3QgaTJjRG1hQ2hhbm5lbDsgICAgIC8qITwgRE1BIGNoYW5uZWwgZm9yIGkyYy4gICAgICAgICAgICAgKi8KKyAgICBETUFNVVhfVHlwZSAqaTJjRG1hbXV4QmFzZTsgLyohPCBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIGkyYy4gKi8KKyAgICB1aW50MTZfdCBpMmNEbWFSZXF1ZXN0OyAgICAgLyohPCBpMmMgRE1BIHJlcXVlc3Qgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KK30gY21zaXNfaTJjX2RtYV9yZXNvdXJjZV90OworCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19pMmNfcmVzb3VyY2VfdCAqcmVzb3VyY2U7ICAgICAgICAgICAgIC8qITwgaTJjIGJhc2ljIHJlc291cmNlLiAgICAgICovCisgICAgY21zaXNfaTJjX2RtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZTsgICAgICAvKiE8IGkyYyBETUEgcmVzb3VyY2UuICAgICAgICAqLworICAgIGkyY19tYXN0ZXJfZG1hX2hhbmRsZV90ICptYXN0ZXJfZG1hX2hhbmRsZTsgLyohPCBpMmMgRE1BIHRyYW5zZmVyIGhhbmRsZS4gKi8KKyAgICBkbWFfaGFuZGxlX3QgKmRtYUhhbmRsZTsgICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIGkyYyBoYW5kbGUuICAgICAgICAgICovCisgICAgYm9vbCBpc0luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElzIGluaXRpYWxpemVkIG9yIG5vdC4gICAqLworfSBjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90OworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfY21zaXNfaTJjX2VkbWFfcmVzb3VyY2UKK3sKKyAgICBETUFfVHlwZSAqaTJjRWRtYUJhc2U7ICAgICAgLyohPCBFRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBpMmMuICAgICovCisgICAgdWludDMyX3QgaTJjRWRtYUNoYW5uZWw7ICAgIC8qITwgRURNQSBjaGFubmVsIGZvciBpMmMuICAgICAgICAgICAgICovCisgICAgRE1BTVVYX1R5cGUgKmkyY0RtYW11eEJhc2U7IC8qITwgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBpMmMuICAqLworICAgIHVpbnQxNl90IGkyY0RtYVJlcXVlc3Q7ICAgICAvKiE8IGkyYyBFRE1BIHJlcXVlc3Qgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KK30gY21zaXNfaTJjX2VkbWFfcmVzb3VyY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZQoreworICAgIGNtc2lzX2kyY19yZXNvdXJjZV90ICpyZXNvdXJjZTsgICAgICAgICAgICAgICAvKiE8IGkyYyBiYXNpYyByZXNvdXJjZS4gICAgICAgKi8KKyAgICBjbXNpc19pMmNfZWRtYV9yZXNvdXJjZV90ICplZG1hUmVzb3VyY2U7ICAgICAgLyohPCBpMmMgRURNQSByZXNvdXJjZS4gICAgICAgICovCisgICAgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICptYXN0ZXJfZWRtYV9oYW5kbGU7IC8qITwgaTJjIEVETUEgdHJhbnNmZXIgaGFuZGxlLiAqLworICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFIYW5kbGU7ICAgICAgICAgICAgICAgICAgICAvKiE8IEVETUEgaTJjIGhhbmRsZS4gICAgICAgICAgKi8KKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJcyBpbml0aWFsaXplZCBvciBub3QuICAgICovCit9IGNtc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UICovCisKK3N0YXRpYyBjb25zdCBBUk1fRFJJVkVSX1ZFUlNJT04gc19pMmNEcml2ZXJWZXJzaW9uID0ge0FSTV9JMkNfQVBJX1ZFUlNJT04sIEFSTV9JMkNfRFJWX1ZFUlNJT059Oworc3RhdGljIGNvbnN0IEFSTV9JMkNfQ0FQQUJJTElUSUVTIHNfaTJjRHJpdmVyQ2FwYWJpbGl0aWVzID0geworICAgIDAsIC8qPCBzdXBwb3J0cyAxMC1iaXQgYWRkcmVzc2luZyAqLworfTsKKworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2kyY0Nsb2Nrc1tdID0gSTJDX0NMT0NLUzsKK2V4dGVybiB1aW50MzJfdCBJMkNfR2V0SW5zdGFuY2UoSTJDX1R5cGUgKmJhc2UpOworCitzdGF0aWMgQVJNX0RSSVZFUl9WRVJTSU9OIEkyQ3hfR2V0VmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBzX2kyY0RyaXZlclZlcnNpb247Cit9CisKK3N0YXRpYyBBUk1fSTJDX0NBUEFCSUxJVElFUyBJMkN4X0dldENhcGFiaWxpdGllcyh2b2lkKQoreworICAgIHJldHVybiBzX2kyY0RyaXZlckNhcGFiaWxpdGllczsKK30KKworI2VuZGlmCisKKyNpZiAoUlRFX0kyQzBfRE1BX0VOIHx8IFJURV9JMkMxX0RNQV9FTiB8fCBSVEVfSTJDMl9ETUFfRU4gfHwgUlRFX0kyQzNfRE1BX0VOKQorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKK3ZvaWQgS1NES19JMkNfTUFTVEVSX0RtYUNhbGxiYWNrKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2RtYV9oYW5kbGVfdCAqaGFuZGxlLCBzdGF0dXNfdCBzdGF0dXMsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIHVpbnQzMl90IGV2ZW50OworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpIC8qIE9jY3VycyBhZnRlciBNYXN0ZXIgVHJhbnNtaXQvUmVjZWl2ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLiAqLworICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX1RSQU5TRkVSX0RPTkU7CisgICAgfQorCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX0kyQ19BZGRyX05haykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX0kyQ19FVkVOVF9BRERSRVNTX05BQ0s7CisgICAgfQorCisgICAgaWYgKHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgKChBUk1fSTJDX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQ19NYXN0ZXJfRG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsIGNtc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpZiAoIShpMmMtPmlzSW5pdGlhbGl6ZWQpKQorICAgIHsKKyAgICAgICAgLyogQ29uZmlndXJlIERNQU1VWCBjaGFubmVsICovCisgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hbXV4QmFzZSwgaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdClpMmMtPmRtYVJlc291cmNlLT5pMmNEbWFSZXF1ZXN0KTsKKyAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hbXV4QmFzZSwgaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hQ2hhbm5lbCk7CisgICAgICAgIC8qIENyZWF0IGRtYWhhbmRsZSAgKi8KKyAgICAgICAgRE1BX0NyZWF0ZUhhbmRsZShpMmMtPmRtYUhhbmRsZSwgaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hQmFzZSwgaTJjLT5kbWFSZXNvdXJjZS0+aTJjRG1hQ2hhbm5lbCk7CisgICAgICAgIC8qIENyZWF0ZSBtYXN0ZXJfZG1hX2hhbmRsZS4gKi8KKyAgICAgICAgSTJDX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlRE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUsIEtTREtfSTJDX01BU1RFUl9EbWFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopY2JfZXZlbnQsIGkyYy0+ZG1hSGFuZGxlKTsKKyAgICAgICAgaTJjLT5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9EbWFVbmluaXRpYWxpemUoY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGkyYy0+aXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfRG1hVHJhbnNtaXQoCisgICAgdWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZywgY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGludDMyX3Qgc3RhdHVzOworICAgIGludDMyX3QgcmV0OworICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCBtYXN0ZXJYZmVyOworCisgICAgLyogQ2hlY2sgaWYgdGhlIEkyQyBidXMgaXMgaWRsZSAtIGlmIG5vdCByZXR1cm4gYnVzeSBzdGF0dXMuICovCisgICAgaWYgKGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUtPnN0YXRlICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgIH0KKworICAgIG1hc3RlclhmZXIuc2xhdmVBZGRyZXNzID0gYWRkcjsgICAgICAgICAgICAgIC8qNy1iaXQgc2xhdmUgYWRkcmVzcy4qLworICAgIG1hc3RlclhmZXIuZGlyZWN0aW9uID0ga0kyQ19Xcml0ZTsgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpcmVjdGlvbi4qLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzcyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFN1YiBhZGRyZXNzICovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzU2l6ZSA9IDA7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjb21tYW5kIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YSA9ICh1aW50OF90ICopZGF0YTsgICAgICAgICAgIC8qIFRyYW5zZmVyIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YVNpemUgPSBudW07ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHNpemUuKi8KKyAgICBtYXN0ZXJYZmVyLmZsYWdzID0ga0kyQ19UcmFuc2ZlckRlZmF1bHRGbGFnOyAvKiBUcmFuc2ZlciBmbGFnIHdoaWNoIGNvbnRyb2xzIHRoZSB0cmFuc2Zlci4qLworCisgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPlMgJiAweDIwKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWc7CisgICAgfQorCisgICAgaWYgKHhmZXJfcGVuZGluZykKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWc7CisgICAgfQorCisgICAgc3RhdHVzID0gSTJDX01hc3RlclRyYW5zZmVyRE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUsICZtYXN0ZXJYZmVyKTsKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19UaW1lb3V0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0RtYVJlY2VpdmUoCisgICAgdWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZywgY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGludDMyX3Qgc3RhdHVzOworICAgIGludDMyX3QgcmV0OworICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCBtYXN0ZXJYZmVyOworCisgICAgLyogQ2hlY2sgaWYgdGhlIEkyQyBidXMgaXMgaWRsZSAtIGlmIG5vdCByZXR1cm4gYnVzeSBzdGF0dXMuICovCisgICAgaWYgKGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUtPnN0YXRlICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgIH0KKworICAgIG1hc3RlclhmZXIuc2xhdmVBZGRyZXNzID0gYWRkcjsgICAgICAgICAgICAgIC8qNy1iaXQgc2xhdmUgYWRkcmVzcy4qLworICAgIG1hc3RlclhmZXIuZGlyZWN0aW9uID0ga0kyQ19SZWFkOyAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpcmVjdGlvbi4qLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzcyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFN1YiBhZGRyZXNzICovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzU2l6ZSA9IDA7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBjb21tYW5kIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YSA9IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGJ1ZmZlci4qLworICAgIG1hc3RlclhmZXIuZGF0YVNpemUgPSBudW07ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHNpemUuKi8KKyAgICBtYXN0ZXJYZmVyLmZsYWdzID0ga0kyQ19UcmFuc2ZlckRlZmF1bHRGbGFnOyAvKiBUcmFuc2ZlciBmbGFnIHdoaWNoIGNvbnRyb2xzIHRoZSB0cmFuc2Zlci4qLworCisgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPlMgJiAweDIwKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWc7CisgICAgfQorCisgICAgaWYgKHhmZXJfcGVuZGluZykKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWc7CisgICAgfQorCisgICAgc3RhdHVzID0gSTJDX01hc3RlclRyYW5zZmVyRE1BKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUsICZtYXN0ZXJYZmVyKTsKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19UaW1lb3V0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0RtYUdldERhdGFDb3VudChjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgc2l6ZV90IGNudDsgLyogVGhlIG51bWJlciBvZiBjdXJyZW50bHkgdHJhbnNmZXJyZWQgZGF0YSBieXRlcyAqLworCisgICAgSTJDX01hc3RlclRyYW5zZmVyR2V0Q291bnRETUEoaTJjLT5yZXNvdXJjZS0+YmFzZSwgaTJjLT5tYXN0ZXJfZG1hX2hhbmRsZSwgJmNudCk7CisgICAgcmV0dXJuIGNudDsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgdWludDMyX3QgYmF1ZFJhdGVfQnBzOworICAgIHZvbGF0aWxlIHVpbnQ4X3QgZHVtbXkgPSAwOworCisgICAgLyogQWRkIHRoaXMgdG8gYXZvaWQgd2FybmluZy4gKi8KKyAgICBkdW1teSsrOworCisgICAgc3dpdGNoIChjb250cm9sKQorICAgIHsKKyAgICAgICAgLyogTm90IHN1cHBvcnRlZCAqLworICAgICAgICBjYXNlIEFSTV9JMkNfT1dOX0FERFJFU1M6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKworICAgICAgICAvKiBTZXQgQnVzIFNwZWVkOyBhcmcgPSBidXMgc3BlZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRDoKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRURfU1RBTkRBUkQ6CisgICAgICAgICAgICAgICAgICAgIGJhdWRSYXRlX0JwcyA9IDEwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEX0ZBU1Q6CisgICAgICAgICAgICAgICAgICAgIGJhdWRSYXRlX0JwcyA9IDQwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEX0ZBU1RfUExVUzoKKyAgICAgICAgICAgICAgICAgICAgYmF1ZFJhdGVfQnBzID0gMTAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSTJDX01hc3RlclNldEJhdWRSYXRlKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGJhdWRSYXRlX0JwcywgaTJjLT5yZXNvdXJjZS0+R2V0RnJlcSgpKTsKKworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgLyogTm90IHN1cHBvcnRlZCAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX0NMRUFSOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogQWJvcnRzIHRoZSBkYXRhIHRyYW5zZmVyICB3aGVuIE1hc3RlciBmb3IgVHJhbnNtaXQgb3IgUmVjZWl2ZSAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQUJPUlRfVFJBTlNGRVI6CisgICAgICAgICAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgJiBJMkNfQzFfTVNUX01BU0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBkbWEgKi8KKyAgICAgICAgICAgICAgICBJMkNfTWFzdGVyVHJhbnNmZXJBYm9ydERNQShpMmMtPnJlc291cmNlLT5iYXNlLCBpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAvKiBJZiBtYXN0ZXIgcmVjZWl2ZSAqLworICAgICAgICAgICAgICAgIGlmIChpMmMtPm1hc3Rlcl9kbWFfaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIEkyQ19TX1RDRl9NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICY9IH4oSTJDX0MxX01TVF9NQVNLIHwgSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtbXkgPSBpMmMtPnJlc291cmNlLT5iYXNlLT5EOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBJZiBtYXN0ZXIgdHJhbnNtaXQgKi8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShpMmMtPnJlc291cmNlLT5iYXNlLT5TICYgSTJDX1NfVENGX01BU0spKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgJj0gfihJMkNfQzFfTVNUX01BU0sgfCBJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGkyYy0+bWFzdGVyX2RtYV9oYW5kbGUtPnRyYW5zZmVyU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgaTJjLT5tYXN0ZXJfZG1hX2hhbmRsZS0+dHJhbnNmZXIuZGF0YSA9IE5VTEw7CisgICAgICAgICAgICAgICAgaTJjLT5tYXN0ZXJfZG1hX2hhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSwgY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICAvKiBUZXJtaW5hdGVzIGFueSBwZW5kaW5nIGRhdGEgdHJhbnNmZXJzLCBkaXNhYmxlIGkyYyBtb2R1b2xlIGFuZCBpMmMgY2xvY2sgYW5kIHJlbGF0ZWQgZG1hICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX09GRjoKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJfRG1hQ29udHJvbChBUk1fSTJDX0FCT1JUX1RSQU5TRkVSLCAwLCBpMmMpOworICAgICAgICAgICAgSTJDX01hc3RlckRlaW5pdChpMmMtPnJlc291cmNlLT5iYXNlKTsKKyAgICAgICAgICAgIERNQU1VWF9EaXNhYmxlQ2hhbm5lbChpMmMtPmRtYVJlc291cmNlLT5pMmNEbWFtdXhCYXNlLCBpMmMtPmRtYVJlc291cmNlLT5pMmNEbWFDaGFubmVsKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfTE9XOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogRW5hYmxlIGkyYyBtb2R1b2xlIGFuZCBpMmMgY2xvY2sgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfRlVMTDoKKyAgICAgICAgICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfaTJjQ2xvY2tzW0kyQ19HZXRJbnN0YW5jZShpMmMtPnJlc291cmNlLT5iYXNlKV0pOworICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgPSBJMkNfQzFfSUlDRU4oMSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorfQorCitBUk1fSTJDX1NUQVRVUyBJMkNfTWFzdGVyX0RtYUdldFN0YXR1cyhjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgQVJNX0kyQ19TVEFUVVMgc3RhdCA9IHswfTsKKyAgICB1aW50MzJfdCBrc2RrX2kyY19tYXN0ZXJfc3RhdHVzID0gSTJDX01hc3RlckdldFN0YXR1c0ZsYWdzKGkyYy0+cmVzb3VyY2UtPmJhc2UpOworCisgICAgc3RhdC5idXN5ID0gISghKGtzZGtfaTJjX21hc3Rlcl9zdGF0dXMgJiBrSTJDX0J1c0J1c3lGbGFnKSk7IC8qIEJ1c3kgZmxhZy4qLworCisgICAgc3RhdC5tb2RlID0gMTsgLyogTW9kZTogMD1TbGF2ZSwgMT1NYXN0ZXIuKi8KKworICAgIHN0YXQuZGlyZWN0aW9uID0KKyAgICAgICAgISghKGtzZGtfaTJjX21hc3Rlcl9zdGF0dXMgJiBrSTJDX1RyYW5zZmVyRGlyZWN0aW9uRmxhZykpOyAvKiBEaXJlY3Rpb246IDA9VHJhbnNtaXR0ZXIsIDE9UmVjZWl2ZXIuKi8KKworICAgIHN0YXQuYXJiaXRyYXRpb25fbG9zdCA9CisgICAgICAgICEoIShrc2RrX2kyY19tYXN0ZXJfc3RhdHVzICYKKyAgICAgICAgICAgIGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZykpOyAvKiBNYXN0ZXIgbG9zdCBhcmJpdHJhdGlvbiAoY2xlYXJlZCBvbiBzdGFydCBvZiBuZXh0IE1hc3RlciBvcGVyYXRpb24pKi8KKworICAgIHJldHVybiBzdGF0OworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCit2b2lkIEtTREtfSTJDX01BU1RFUl9FZG1hQ2FsbGJhY2soSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzdGF0dXNfdCBzdGF0dXMsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIHVpbnQzMl90IGV2ZW50OworCisgICAgLyogT2NjdXJzIGFmdGVyIE1hc3RlciBUcmFuc21pdC9SZWNlaXZlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuICovCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfVFJBTlNGRVJfRE9ORTsKKyAgICB9CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfSTJDX0FkZHJfTmFrKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX0FERFJFU1NfTkFDSzsKKyAgICB9CisKKyAgICBpZiAodXNlckRhdGEpCisgICAgeworICAgICAgICAoKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgSTJDX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsIGNtc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaWYgKCEoaTJjLT5pc0luaXRpYWxpemVkKSkKKyAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSBETUFNVVggY2hhbm5lbCAqLworICAgICAgICBETUFNVVhfU2V0U291cmNlKGkyYy0+ZWRtYVJlc291cmNlLT5pMmNEbWFtdXhCYXNlLCBpMmMtPmVkbWFSZXNvdXJjZS0+aTJjRWRtYUNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QpaTJjLT5lZG1hUmVzb3VyY2UtPmkyY0RtYVJlcXVlc3QpOworICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChpMmMtPmVkbWFSZXNvdXJjZS0+aTJjRG1hbXV4QmFzZSwgaTJjLT5lZG1hUmVzb3VyY2UtPmkyY0VkbWFDaGFubmVsKTsKKyAgICAgICAgLyogQ3JlYXQgZWRtYWhhbmRsZSAgKi8KKyAgICAgICAgRURNQV9DcmVhdGVIYW5kbGUoaTJjLT5lZG1hSGFuZGxlLCBpMmMtPmVkbWFSZXNvdXJjZS0+aTJjRWRtYUJhc2UsIGkyYy0+ZWRtYVJlc291cmNlLT5pMmNFZG1hQ2hhbm5lbCk7CisgICAgICAgIC8qIENyZWF0ZSBtYXN0ZXJfZWRtYV9oYW5kbGUuICovCisgICAgICAgIEkyQ19NYXN0ZXJDcmVhdGVFRE1BSGFuZGxlKGkyYy0+cmVzb3VyY2UtPmJhc2UsIGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLCBLU0RLX0kyQ19NQVNURVJfRWRtYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWNiX2V2ZW50LCBpMmMtPmVkbWFIYW5kbGUpOworICAgICAgICBpMmMtPmlzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUoY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpMmMtPmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0VkbWFUcmFuc21pdCgKKyAgICB1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nLCBjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGludDMyX3Qgc3RhdHVzOworICAgIGludDMyX3QgcmV0OworICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCBtYXN0ZXJYZmVyOworCisgICAgLyogQ2hlY2sgaWYgdGhlIEkyQyBidXMgaXMgaWRsZSAtIGlmIG5vdCByZXR1cm4gYnVzeSBzdGF0dXMuICovCisgICAgaWYgKGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLT5zdGF0ZSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICB9CisKKyAgICBtYXN0ZXJYZmVyLnNsYXZlQWRkcmVzcyA9IGFkZHI7ICAgICAgICAgICAgICAvKjctYml0IHNsYXZlIGFkZHJlc3MuKi8KKyAgICBtYXN0ZXJYZmVyLmRpcmVjdGlvbiA9IGtJMkNfV3JpdGU7ICAgICAgICAgICAvKiBUcmFuc2ZlciBkaXJlY3Rpb24uKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3MgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTdWIgYWRkcmVzcyAqLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzc1NpemUgPSAwOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgY29tbWFuZCBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGEgPSAodWludDhfdCAqKWRhdGE7ICAgICAgICAgICAvKiBUcmFuc2ZlciBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGFTaXplID0gbnVtOyAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBzaXplLiovCisgICAgbWFzdGVyWGZlci5mbGFncyA9IGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZzsgLyogVHJhbnNmZXIgZmxhZyB3aGljaCBjb250cm9scyB0aGUgdHJhbnNmZXIuKi8KKworICAgIGlmIChpMmMtPnJlc291cmNlLT5iYXNlLT5TICYgMHgyMCkKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2ZlclJlcGVhdGVkU3RhcnRGbGFnOworICAgIH0KKworICAgIGlmICh4ZmVyX3BlbmRpbmcpCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnOworICAgIH0KKworICAgIHN0YXR1cyA9IEkyQ19NYXN0ZXJUcmFuc2ZlckVETUEoaTJjLT5yZXNvdXJjZS0+YmFzZSwgaTJjLT5tYXN0ZXJfZWRtYV9oYW5kbGUsICZtYXN0ZXJYZmVyKTsKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19UaW1lb3V0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0VkbWFSZWNlaXZlKAorICAgIHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcsIGNtc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgaW50MzJfdCByZXQ7CisgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl90IG1hc3RlclhmZXI7CisKKyAgICAvKiBDaGVjayBpZiB0aGUgSTJDIGJ1cyBpcyBpZGxlIC0gaWYgbm90IHJldHVybiBidXN5IHN0YXR1cy4gKi8KKyAgICBpZiAoaTJjLT5tYXN0ZXJfZWRtYV9oYW5kbGUtPnN0YXRlICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgIH0KKworICAgIG1hc3RlclhmZXIuc2xhdmVBZGRyZXNzID0gYWRkcjsgICAgICAgICAgICAgIC8qIDctYml0IHNsYXZlIGFkZHJlc3MuKi8KKyAgICBtYXN0ZXJYZmVyLmRpcmVjdGlvbiA9IGtJMkNfUmVhZDsgICAgICAgICAgICAvKiBUcmFuc2ZlciBkaXJlY3Rpb24uKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3MgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTdWIgYWRkcmVzcyAqLworICAgIG1hc3RlclhmZXIuc3ViYWRkcmVzc1NpemUgPSAwOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgY29tbWFuZCBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGEgPSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBidWZmZXIuKi8KKyAgICBtYXN0ZXJYZmVyLmRhdGFTaXplID0gbnVtOyAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBzaXplLiovCisgICAgbWFzdGVyWGZlci5mbGFncyA9IGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZzsgLyogVHJhbnNmZXIgZmxhZyB3aGljaCBjb250cm9scyB0aGUgdHJhbnNmZXIuKi8KKworICAgIGlmIChpMmMtPnJlc291cmNlLT5iYXNlLT5TICYgMHgyMCkKKyAgICB7CisgICAgICAgIG1hc3RlclhmZXIuZmxhZ3MgfD0ga0kyQ19UcmFuc2ZlclJlcGVhdGVkU3RhcnRGbGFnOworICAgIH0KKworICAgIGlmICh4ZmVyX3BlbmRpbmcpCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnOworICAgIH0KKworICAgIHN0YXR1cyA9IEkyQ19NYXN0ZXJUcmFuc2ZlckVETUEoaTJjLT5yZXNvdXJjZS0+YmFzZSwgaTJjLT5tYXN0ZXJfZWRtYV9oYW5kbGUsICZtYXN0ZXJYZmVyKTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19CdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrU3RhdHVzX0kyQ19UaW1lb3V0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9USU1FT1VUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfRWRtYUdldERhdGFDb3VudChjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHNpemVfdCBjbnQ7IC8qIFRoZSBudW1iZXIgb2YgY3VycmVudGx5IHRyYW5zZmVycmVkIGRhdGEgYnl0ZXMgKi8KKworICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckdldENvdW50RURNQShpMmMtPnJlc291cmNlLT5iYXNlLCBpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZSwgJmNudCk7CisKKyAgICByZXR1cm4gY250OworfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsKKyAgICB2b2xhdGlsZSB1aW50OF90IGR1bW15ID0gMDsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworICAgIHN3aXRjaCAoY29udHJvbCkKKyAgICB7CisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX09XTl9BRERSRVNTOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogU2V0IEJ1cyBTcGVlZDsgYXJnID0gYnVzIHNwZWVkICovCisgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRUQ6CisgICAgICAgICAgICBzd2l0Y2ggKGFyZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEX1NUQU5EQVJEOgorICAgICAgICAgICAgICAgICAgICBiYXVkUmF0ZV9CcHMgPSAxMDAwMDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRF9GQVNUOgorICAgICAgICAgICAgICAgICAgICBiYXVkUmF0ZV9CcHMgPSA0MDAwMDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRF9GQVNUX1BMVVM6CisgICAgICAgICAgICAgICAgICAgIGJhdWRSYXRlX0JwcyA9IDEwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJTZXRCYXVkUmF0ZShpMmMtPnJlc291cmNlLT5iYXNlLCBiYXVkUmF0ZV9CcHMsIChpMmMtPnJlc291cmNlLT5HZXRGcmVxKSgpKTsKKworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgLyogTm90IHN1cHBvcnRlZCAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX0NMRUFSOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogQWJvcnRzIHRoZSBkYXRhIHRyYW5zZmVyICB3aGVuIE1hc3RlciBmb3IgVHJhbnNtaXQgb3IgUmVjZWl2ZSAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQUJPUlRfVFJBTlNGRVI6CisKKyAgICAgICAgICAgIGlmIChpMmMtPnJlc291cmNlLT5iYXNlLT5DMSAmIEkyQ19DMV9NU1RfTUFTSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGVkbWEgKi8KKyAgICAgICAgICAgICAgICBJMkNfTWFzdGVyVHJhbnNmZXJBYm9ydEVETUEoaTJjLT5yZXNvdXJjZS0+YmFzZSwgaTJjLT5tYXN0ZXJfZWRtYV9oYW5kbGUpOworICAgICAgICAgICAgICAgIC8qIElmIG1hc3RlciByZWNlaXZlICovCisgICAgICAgICAgICAgICAgaWYgKGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIEkyQ19TX1RDRl9NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICY9IH4oSTJDX0MxX01TVF9NQVNLIHwgSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtbXkgPSBpMmMtPnJlc291cmNlLT5iYXNlLT5EOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBJZiBtYXN0ZXIgdHJhbnNtaXQgKi8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShpMmMtPnJlc291cmNlLT5iYXNlLT5TICYgSTJDX1NfVENGX01BU0spKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgJj0gfihJMkNfQzFfTVNUX01BU0sgfCBJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLT50cmFuc2ZlclNpemUgPSAwOworICAgICAgICAgICAgICAgIGkyYy0+bWFzdGVyX2VkbWFfaGFuZGxlLT50cmFuc2Zlci5kYXRhID0gTlVMTDsKKyAgICAgICAgICAgICAgICBpMmMtPm1hc3Rlcl9lZG1hX2hhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorfQorCitpbnQzMl90IEkyQ19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUsIGNtc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAgICAgIC8qIFRlcm1pbmF0ZXMgYW55IHBlbmRpbmcgZGF0YSB0cmFuc2ZlcnMsIGRpc2FibGUgaTJjIG1vZHVvbGUgYW5kIGkyYyBjbG9jayBhbmQgcmVsYXRlZCBlZG1hICovCisgICAgICAgIGNhc2UgQVJNX1BPV0VSX09GRjoKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJfRWRtYUNvbnRyb2woQVJNX0kyQ19BQk9SVF9UUkFOU0ZFUiwgMCwgaTJjKTsKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJEZWluaXQoaTJjLT5yZXNvdXJjZS0+YmFzZSk7CisgICAgICAgICAgICBETUFNVVhfRGlzYWJsZUNoYW5uZWwoaTJjLT5lZG1hUmVzb3VyY2UtPmkyY0RtYW11eEJhc2UsIGkyYy0+ZWRtYVJlc291cmNlLT5pMmNFZG1hQ2hhbm5lbCk7CisKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfTE9XOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogRW5hYmxlIGkyYyBtb2R1b2xlIGFuZCBpMmMgY2xvY2sgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfRlVMTDoKKyAgICAgICAgICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfaTJjQ2xvY2tzW0kyQ19HZXRJbnN0YW5jZShpMmMtPnJlc291cmNlLT5iYXNlKV0pOworICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgPSBJMkNfQzFfSUlDRU4oMSk7CisKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQ19NYXN0ZXJfRWRtYUdldFN0YXR1cyhjbXNpc19pMmNfZWRtYV9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIEFSTV9JMkNfU1RBVFVTIHN0YXQgPSB7MH07CisgICAgdWludDMyX3Qga3Nka19pMmNfbWFzdGVyX3N0YXR1cyA9IEkyQ19NYXN0ZXJHZXRTdGF0dXNGbGFncyhpMmMtPnJlc291cmNlLT5iYXNlKTsKKworICAgIHN0YXQuYnVzeSA9ICEoIShrc2RrX2kyY19tYXN0ZXJfc3RhdHVzICYga0kyQ19CdXNCdXN5RmxhZykpOyAvKiBCdXN5IGZsYWcuKi8KKworICAgIHN0YXQubW9kZSA9IDE7IC8qIE1vZGU6IDA9U2xhdmUsIDE9TWFzdGVyLiovCisKKyAgICBzdGF0LmRpcmVjdGlvbiA9CisgICAgICAgICEoIShrc2RrX2kyY19tYXN0ZXJfc3RhdHVzICYga0kyQ19UcmFuc2ZlckRpcmVjdGlvbkZsYWcpKTsgLyogRGlyZWN0aW9uOiAwPVRyYW5zbWl0dGVyLCAxPVJlY2VpdmVyLiovCisKKyAgICBzdGF0LmFyYml0cmF0aW9uX2xvc3QgPQorICAgICAgICAhKCEoa3Nka19pMmNfbWFzdGVyX3N0YXR1cyAmCisgICAgICAgICAgICBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcpKTsgLyogTWFzdGVyIGxvc3QgYXJiaXRyYXRpb24gKGNsZWFyZWQgb24gc3RhcnQgb2YgbmV4dCBNYXN0ZXIgb3BlcmF0aW9uKSovCisKKyAgICByZXR1cm4gc3RhdDsKK30KKyNlbmRpZgorCisjZW5kaWYKKworI2lmICgoUlRFX0kyQzAgJiYgIVJURV9JMkMwX0RNQV9FTikgfHwgKFJURV9JMkMxICYmICFSVEVfSTJDMV9ETUFfRU4pIHx8IChSVEVfSTJDMiAmJiAhUlRFX0kyQzJfRE1BX0VOKSB8fCBcCisgICAgIChSVEVfSTJDMyAmJiAhUlRFX0kyQzNfRE1BX0VOKSkKKworc3RhdGljIHZvaWQgS1NES19JMkNfU0xBVkVfSW50ZXJydXB0Q2FsbGJhY2soSTJDX1R5cGUgKmJhc2UsIGkyY19zbGF2ZV90cmFuc2Zlcl90ICp4ZmVyLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudDsKKworICAgIHN3aXRjaCAoeGZlci0+ZXZlbnQpCisgICAgeworICAgICAgICBjYXNlIGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQ6IC8qIE9jY3VycyBhZnRlciBTbGF2ZSBUcmFuc21pdC9SZWNlaXZlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQuICovCisgICAgICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfVFJBTlNGRVJfRE9ORTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0kyQ19TbGF2ZUdlbmFyYWxjYWxsRXZlbnQ6CisgICAgICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfR0VORVJBTF9DQUxMOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGV2ZW50ID0gQVJNX0kyQ19FVkVOVF9UUkFOU0ZFUl9JTkNPTVBMRVRFOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgKChBUk1fSTJDX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CitzdGF0aWMgdm9pZCBLU0RLX0kyQ19NQVNURVJfSW50ZXJydXB0Q2FsbGJhY2soSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudDsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6IC8qIE9jY3VycyBhZnRlciBNYXN0ZXIgVHJhbnNtaXQvUmVjZWl2ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLiAqLworICAgICAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX1RSQU5TRkVSX0RPTkU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0FkZHJfTmFrOiAvKiBPY2N1cnMgaW4gbWFzdGVyIG1vZGUgd2hlbiBhZGRyZXNzIGlzIG5vdCBhY2tub3dsZWRnZWQgZnJvbSBzbGF2ZS4qLworICAgICAgICAgICAgZXZlbnQgPSBBUk1fSTJDX0VWRU5UX0FERFJFU1NfTkFDSzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0OiAvKiBPY2N1cnMgaW4gbWFzdGVyIG1vZGUgd2hlbiBhcmJpdHJhdGlvbiBpcyBsb3N0LiovCisgICAgICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfQVJCSVRSQVRJT05fTE9TVDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBldmVudCA9IEFSTV9JMkNfRVZFTlRfVFJBTlNGRVJfSU5DT01QTEVURTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIFVzZXIgZGF0YSBpcyBhY3R1YWxseSBDTVNJUyBkcml2ZXIgY2FsbGJhY2suICovCisgICAgaWYgKHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgKChBUk1fSTJDX1NpZ25hbEV2ZW50X3QpdXNlckRhdGEpKGV2ZW50KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQ19JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCwgY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGkyYy0+Y2JfZXZlbnQgPSBjYl9ldmVudDsgLyogY2JfZXZlbnQgaXMgQ01TSVMgZHJpdmVyIGNhbGxiYWNrLiAqLworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBJMkNfSW50ZXJydXB0VW5pbml0aWFsaXplKGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpMmMtPmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworaW50MzJfdCBJMkNfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KAorICAgIHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcsIGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICBpbnQzMl90IHJldDsKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgbWFzdGVyWGZlcjsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZS5zdGF0ZSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgbWFzdGVyX2hhbmRsZSAqLworICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZShpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5tYXN0ZXJfaGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1NES19JMkNfTUFTVEVSX0ludGVycnVwdENhbGxiYWNrLCAodm9pZCAqKWkyYy0+Y2JfZXZlbnQpOworCisgICAgbWFzdGVyWGZlci5zbGF2ZUFkZHJlc3MgPSBhZGRyOyAgICAgICAgICAgICAgLyo3LWJpdCBzbGF2ZSBhZGRyZXNzLiovCisgICAgbWFzdGVyWGZlci5kaXJlY3Rpb24gPSBrSTJDX1dyaXRlOyAgICAgICAgICAgLyogVHJhbnNmZXIgZGlyZWN0aW9uLiovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzID0gKHVpbnQzMl90KU5VTEw7ICAgICAgLyogU3ViIGFkZHJlc3MgKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3NTaXplID0gMDsgICAgICAgICAgICAgICAvKiBTaXplIG9mIGNvbW1hbmQgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhID0gKHVpbnQ4X3QgKilkYXRhOyAgICAgICAgICAgLyogVHJhbnNmZXIgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhU2l6ZSA9IG51bTsgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgc2l6ZS4qLworICAgIG1hc3RlclhmZXIuZmxhZ3MgPSBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWc7IC8qIFRyYW5zZmVyIGZsYWcgd2hpY2ggY29udHJvbHMgdGhlIHRyYW5zZmVyLiovCisKKyAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIDB4MjApCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZzsKKyAgICB9CisKKyAgICBpZiAoeGZlcl9wZW5kaW5nKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZzsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBJMkNfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5tYXN0ZXJfaGFuZGxlKSwgJm1hc3RlclhmZXIpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX1RpbWVvdXQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgSTJDX01hc3Rlcl9JbnRlcnJ1cHRSZWNlaXZlKAorICAgIHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcsIGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBpbnQzMl90IHN0YXR1czsKKyAgICBpbnQzMl90IHJldDsKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgbWFzdGVyWGZlcjsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZS5zdGF0ZSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgbWFzdGVyX2hhbmRsZSAqLworICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZShpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5tYXN0ZXJfaGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1NES19JMkNfTUFTVEVSX0ludGVycnVwdENhbGxiYWNrLCAodm9pZCAqKWkyYy0+Y2JfZXZlbnQpOworCisgICAgbWFzdGVyWGZlci5zbGF2ZUFkZHJlc3MgPSBhZGRyOyAgICAgICAgICAgICAgLyo3LWJpdCBzbGF2ZSBhZGRyZXNzLiovCisgICAgbWFzdGVyWGZlci5kaXJlY3Rpb24gPSBrSTJDX1JlYWQ7ICAgICAgICAgICAgLyogVHJhbnNmZXIgZGlyZWN0aW9uLiovCisgICAgbWFzdGVyWGZlci5zdWJhZGRyZXNzID0gKHVpbnQzMl90KU5VTEw7ICAgICAgLyogU3ViIGFkZHJlc3MgKi8KKyAgICBtYXN0ZXJYZmVyLnN1YmFkZHJlc3NTaXplID0gMDsgICAgICAgICAgICAgICAvKiBTaXplIG9mIGNvbW1hbmQgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhID0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgYnVmZmVyLiovCisgICAgbWFzdGVyWGZlci5kYXRhU2l6ZSA9IG51bTsgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgc2l6ZS4qLworICAgIG1hc3RlclhmZXIuZmxhZ3MgPSBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWc7IC8qIFRyYW5zZmVyIGZsYWcgd2hpY2ggY29udHJvbHMgdGhlIHRyYW5zZmVyLiovCisKKyAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+UyAmIDB4MjApCisgICAgeworICAgICAgICBtYXN0ZXJYZmVyLmZsYWdzIHw9IGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZzsKKyAgICB9CisKKyAgICBpZiAoeGZlcl9wZW5kaW5nKQorICAgIHsKKyAgICAgICAgbWFzdGVyWGZlci5mbGFncyB8PSBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZzsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBJMkNfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhpMmMtPnJlc291cmNlLT5iYXNlLCAmKGkyYy0+aGFuZGxlLT5tYXN0ZXJfaGFuZGxlKSwgJm1hc3RlclhmZXIpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX1RpbWVvdXQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgSTJDX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIGludDMyX3Qgc3RhdHVzOworICAgIGludDMyX3QgcmV0OworCisgICAgLyogQ3JlYXRlIHNsYXZlX2hhbmRsZSAqLworICAgIEkyQ19TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKGkyYy0+cmVzb3VyY2UtPmJhc2UsICYoaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZSksIEtTREtfSTJDX1NMQVZFX0ludGVycnVwdENhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaTJjLT5jYl9ldmVudCk7CisKKyAgICBzdGF0dXMgPSBJMkNfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKGkyYy0+cmVzb3VyY2UtPmJhc2UsICYoaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZSksIGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQpOworCisgICAgaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZS50cmFuc2Zlci5kYXRhID0KKyAgICAgICAgKHVpbnQ4X3QgKilkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGJ1ZmZlciB3aXRoIGRhdGEgdG8gdHJhbnNtaXQgdG8gSTJDIE1hc3RlciAqLworICAgIGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIuZGF0YVNpemUgPSBudW07IC8qIE51bWJlciBvZiBkYXRhIGJ5dGVzIHRvIHRyYW5zbWl0ICovCisgICAgaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZS50cmFuc2Zlci50cmFuc2ZlcnJlZENvdW50ID0KKyAgICAgICAgMDsgLyogTnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHRyYW5zZmVycmVkIHNpbmNlIHN0YXJ0IG9yIGxhc3QgcmVwZWF0ZWQgc3RhcnQuICovCisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1N0YXR1c19JMkNfQnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KK2ludDMyX3QgSTJDX1NsYXZlX0ludGVycnVwdFJlY2VpdmUodWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgaW50MzJfdCBzdGF0dXM7CisgICAgaW50MzJfdCByZXQ7CisKKyAgICBpMmMtPnJlc291cmNlLT5iYXNlLT5DMiA9IEkyQ19DMl9HQ0FFTigxKTsgLyogRW5hYmxlIGdlbmVyYWwgY2FsbCAqLworCisgICAgLyogQ3JlYXRlIHNsYXZlX2hhbmRsZSAqLworICAgIEkyQ19TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKGkyYy0+cmVzb3VyY2UtPmJhc2UsICYoaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZSksIEtTREtfSTJDX1NMQVZFX0ludGVycnVwdENhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaTJjLT5jYl9ldmVudCk7CisKKyAgICBzdGF0dXMgPSBJMkNfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKGkyYy0+cmVzb3VyY2UtPmJhc2UsICYoaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZSksIGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQpOworCisgICAgaTJjLT5oYW5kbGUtPnNsYXZlX2hhbmRsZS50cmFuc2Zlci5kYXRhID0gZGF0YTsgICAgLyogUG9pbnRlciB0byBidWZmZXIgd2l0aCBkYXRhIHRvIHRyYW5zbWl0IHRvIEkyQyBNYXN0ZXIgKi8KKyAgICBpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLmRhdGFTaXplID0gbnVtOyAvKiBOdW1iZXIgb2YgZGF0YSBieXRlcyB0byB0cmFuc21pdCAqLworICAgIGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIudHJhbnNmZXJyZWRDb3VudCA9CisgICAgICAgIDA7IC8qIE51bWJlciBvZiBieXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCBzaW5jZSBzdGFydCBvciBsYXN0IHJlcGVhdGVkIHN0YXJ0LiAqLworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtTdGF0dXNfSTJDX0J1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CitpbnQzMl90IEkyQ19JbnRlcnJ1cHRHZXREYXRhQ291bnQoY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCAqaTJjKQoreworICAgIHVpbnQzMl90IGNudDsgLyogVGhlIG51bWJlciBvZiBjdXJyZW50bHkgdHJhbnNmZXJyZWQgZGF0YSBieXRlcyAqLworCisgICAgaWYgKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIudHJhbnNmZXJyZWRDb3VudCkKKyAgICB7CisgICAgICAgIGNudCA9IGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIudHJhbnNmZXJyZWRDb3VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY250ID0gJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSkudHJhbnNmZXJTaXplIC0gJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSkudHJhbnNmZXIuZGF0YVNpemU7CisgICAgfQorCisgICAgcmV0dXJuIGNudDsKK30KKworaW50MzJfdCBJMkNfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcsIGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICB1aW50MzJfdCBiYXVkUmF0ZV9CcHM7CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wpCisgICAgeworICAgICAgICAvKiBTZXQgT3duIFNsYXZlIEFkZHJlc3M7IGFyZyA9IHNsYXZlIGFkZHJlc3MgKi8KKyAgICAgICAgY2FzZSBBUk1fSTJDX09XTl9BRERSRVNTOgorICAgICAgICAgICAgaTJjLT5yZXNvdXJjZS0+YmFzZS0+QTEgPSAoYXJnIDw8IDFVKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIFNldCBCdXMgU3BlZWQ7IGFyZyA9IGJ1cyBzcGVlZCAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX1NQRUVEOgorICAgICAgICAgICAgc3dpdGNoIChhcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBBUk1fSTJDX0JVU19TUEVFRF9TVEFOREFSRDoKKyAgICAgICAgICAgICAgICAgICAgYmF1ZFJhdGVfQnBzID0gMTAwMDAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRURfRkFTVDoKKyAgICAgICAgICAgICAgICAgICAgYmF1ZFJhdGVfQnBzID0gNDAwMDAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQVJNX0kyQ19CVVNfU1BFRURfRkFTVF9QTFVTOgorICAgICAgICAgICAgICAgICAgICBiYXVkUmF0ZV9CcHMgPSAxMDAwMDAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJMkNfTWFzdGVyU2V0QmF1ZFJhdGUoaTJjLT5yZXNvdXJjZS0+YmFzZSwgYmF1ZFJhdGVfQnBzLCBpMmMtPnJlc291cmNlLT5HZXRGcmVxKCkpOworCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgLyogTm90IHN1cHBvcnRlZCAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQlVTX0NMRUFSOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogQWJvcnRzIHRoZSBkYXRhIHRyYW5zZmVyIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZSBmb3IgVHJhbnNtaXQgb3IgUmVjZWl2ZSAqLworICAgICAgICBjYXNlIEFSTV9JMkNfQUJPUlRfVFJBTlNGRVI6CisgICAgICAgICAgICBpZiAoaTJjLT5yZXNvdXJjZS0+YmFzZS0+QzEgJiBJMkNfQzFfTVNUX01BU0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0IGFuZCBzZW5kIFNUT1Agc2lnbmFsICovCisgICAgICAgICAgICAgICAgSTJDX01hc3RlclRyYW5zZmVyQWJvcnQoaTJjLT5yZXNvdXJjZS0+YmFzZSwgJihpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZSkpOworCisgICAgICAgICAgICAgICAgaTJjLT5oYW5kbGUtPm1hc3Rlcl9oYW5kbGUudHJhbnNmZXJTaXplID0gMDsKKyAgICAgICAgICAgICAgICBpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZS50cmFuc2Zlci5kYXRhID0gTlVMTDsKKyAgICAgICAgICAgICAgICBpMmMtPmhhbmRsZS0+bWFzdGVyX2hhbmRsZS50cmFuc2Zlci5kYXRhU2l6ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBJZiBzbGF2ZSByZWNlaXZlICovCisgICAgICAgICAgICBpZiAoKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUuaXNCdXN5KSAmJiAoIShpMmMtPnJlc291cmNlLT5iYXNlLT5TICYga0kyQ19UcmFuc2ZlckRpcmVjdGlvbkZsYWcpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpMmMtPnJlc291cmNlLT5iYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworCisgICAgICAgICAgICAgICAgd2hpbGUgKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUuaXNCdXN5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBzbGF2ZSBpbnRlcnJ1cHQgKi8KKworICAgICAgICAgICAgICAgIEkyQ19TbGF2ZVRyYW5zZmVyQWJvcnQoaTJjLT5yZXNvdXJjZS0+YmFzZSwgJihpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlKSk7CisKKyAgICAgICAgICAgICAgICBpMmMtPmhhbmRsZS0+c2xhdmVfaGFuZGxlLnRyYW5zZmVyLmRhdGEgPSBOVUxMOworICAgICAgICAgICAgICAgIGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUudHJhbnNmZXIuZGF0YVNpemUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQ19JbnRlcnJ1cHRQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90ICppMmMpCit7CisgICAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAgICAgIC8qIFRlcm1pbmF0ZXMgYW55IHBlbmRpbmcgZGF0YSB0cmFuc2ZlcnMsIGRpc2FibGUgaTJjIG1vZHVvbGUgYW5kIGkyYyBjbG9jayAqLworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisKKyAgICAgICAgICAgIEkyQ19JbnRlcnJ1cHRDb250cm9sKEFSTV9JMkNfQUJPUlRfVFJBTlNGRVIsIDAsIGkyYyk7CisKKyAgICAgICAgICAgIEkyQ19NYXN0ZXJEZWluaXQoaTJjLT5yZXNvdXJjZS0+YmFzZSk7CisKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfTE9XOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisKKyAgICAgICAgLyogRW5hYmxlIGkyYyBtb2R1b2xlIGFuZCBpMmMgY2xvY2sgKi8KKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfRlVMTDoKKworICAgICAgICAgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19pMmNDbG9ja3NbSTJDX0dldEluc3RhbmNlKGkyYy0+cmVzb3VyY2UtPmJhc2UpXSk7CisKKyAgICAgICAgICAgIGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxID0gSTJDX0MxX0lJQ0VOKDEpOworCisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorfQorCitBUk1fSTJDX1NUQVRVUyBJMkNfSW50ZXJydXB0R2V0U3RhdHVzKGNtc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgKmkyYykKK3sKKyAgICBBUk1fSTJDX1NUQVRVUyBzdGF0ID0gezB9OworICAgIHVpbnQzMl90IGtzZGtfaTJjX3N0YXR1cyA9IEkyQ19TbGF2ZUdldFN0YXR1c0ZsYWdzKGkyYy0+cmVzb3VyY2UtPmJhc2UpOworICAgIHN0YXQuYnVzeSA9ICEoIShrc2RrX2kyY19zdGF0dXMgJiBrSTJDX0J1c0J1c3lGbGFnKSk7IC8qIEJ1c3kgZmxhZy4qLworCisgICAgaWYgKGkyYy0+cmVzb3VyY2UtPmJhc2UtPkMxICYgSTJDX0MxX01TVF9NQVNLKQorICAgIHsKKyAgICAgICAgc3RhdC5kaXJlY3Rpb24gPSAhKCEoa3Nka19pMmNfc3RhdHVzICYga0kyQ19UcmFuc2ZlckRpcmVjdGlvbkZsYWcpKTsgLyogRGlyZWN0aW9uOiAwPVRyYW5zbWl0dGVyLCAxPVJlY2VpdmVyLiovCisgICAgICAgIHN0YXQubW9kZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGU6IDA9U2xhdmUsIDE9TWFzdGVyLiovCisgICAgfQorCisgICAgaWYgKGkyYy0+aGFuZGxlLT5zbGF2ZV9oYW5kbGUuaXNCdXN5KQorICAgIHsKKyAgICAgICAgc3RhdC5kaXJlY3Rpb24gPSAhKGtzZGtfaTJjX3N0YXR1cyAmIGtJMkNfVHJhbnNmZXJEaXJlY3Rpb25GbGFnKTsgLyogRGlyZWN0aW9uOiAwPVRyYW5zbWl0dGVyLCAxPVJlY2VpdmVyLiovCisgICAgICAgIHN0YXQubW9kZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGU6IDA9U2xhdmUsIDE9TWFzdGVyLiovCisgICAgfQorCisgICAgc3RhdC5hcmJpdHJhdGlvbl9sb3N0ID0KKyAgICAgICAgISghKGtzZGtfaTJjX3N0YXR1cyAmCisgICAgICAgICAgICBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcpKTsgLyogTWFzdGVyIGxvc3QgYXJiaXRyYXRpb24gKGNsZWFyZWQgb24gc3RhcnQgb2YgbmV4dCBNYXN0ZXIgb3BlcmF0aW9uKSovCisKKyAgICByZXR1cm4gc3RhdDsKK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEkyQzApICYmIFJURV9JMkMwCitleHRlcm4gdWludDMyX3QgSTJDMF9HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgSTJDMF9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzBfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfaTJjX3Jlc291cmNlX3QgSTJDMF9SZXNvdXJjZSA9IHtJMkMwLCBJMkMwX0dldEZyZXF9OworCisjaWYgUlRFX0kyQzBfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19pMmNfZG1hX3Jlc291cmNlX3QgSTJDMF9EbWFSZXNvdXJjZSA9IHtSVEVfSTJDMF9NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMwX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfSTJDMF9NYXN0ZXJfRE1BTVVYX0JBU0UsIFJURV9JMkMwX01hc3Rlcl9QRVJJX1NFTH07CisKK2kyY19tYXN0ZXJfZG1hX2hhbmRsZV90IEkyQzBfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IEkyQzBfRG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMwX2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCBJMkMwX0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDMF9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMwX1Jlc291cmNlLCAmSTJDMF9EbWFSZXNvdXJjZSwgJkkyQzBfRG1hSGFuZGxlLCAmSTJDMF9EbWFUeFJ4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDMF9NYXN0ZXJfRG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDMF9Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMwX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMwX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFVbmluaXRpYWxpemUoJkkyQzBfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hUG93ZXJDb250cm9sKHN0YXRlLCAmSTJDMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFUcmFuc21pdChhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzBfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0RtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFSZWNlaXZlKGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KCZJMkMwX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzBfRG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMwX01hc3Rlcl9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFHZXRTdGF0dXMoJkkyQzBfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfaTJjX2VkbWFfcmVzb3VyY2VfdCBJMkMwX0VkbWFSZXNvdXJjZSA9IHtSVEVfSTJDMF9NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMwX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9JMkMwX01hc3Rlcl9ETUFNVVhfQkFTRSwgUlRFX0kyQzBfTWFzdGVyX1BFUklfU0VMfTsKKworaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IEkyQzBfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgSTJDMF9FZG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMwX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzBfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzBfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzBfUmVzb3VyY2UsICZJMkMwX0VkbWFSZXNvdXJjZSwgJkkyQzBfRWRtYUhhbmRsZSwgJkkyQzBfRWRtYVR4UnhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMwX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDMF9Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMwX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKCZJMkMwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzBfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9FZG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9NYXN0ZXJfRWRtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzBfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldERhdGFDb3VudCgmSTJDMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzBfTWFzdGVyX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hR2V0U3RhdHVzKCZJMkMwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitjbXNpc19pMmNfaGFuZGxlX3QgSTJDMF9oYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMF9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDMF9SZXNvdXJjZSwgJkkyQzBfaGFuZGxlLAorCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMwX0ludGVycnVwdEluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzBfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgSTJDMF9JbnRlcnJ1cHRVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMwX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdFVuaW5pdGlhbGl6ZSgmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzBfSW50ZXJydXB0UG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdFBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMwX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMwX01hc3Rlcl9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzBfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBJMkNfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQoZGF0YSwgbnVtLCAmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFJlY2VpdmUoZGF0YSwgbnVtLCAmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9JbnRlcnJ1cHRHZXREYXRhQ291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEdldERhdGFDb3VudCgmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMF9JbnRlcnJ1cHRDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdENvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDMF9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzBfSW50ZXJydXB0R2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXRTdGF0dXMoJkkyQzBfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9JMkMgRHJpdmVyX0kyQzAgPSB7STJDeF9HZXRWZXJzaW9uLCBJMkN4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfSTJDMF9ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZSwgSTJDMF9NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSwgSTJDMF9NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfTWFzdGVyX0VkbWFUcmFuc21pdCwgSTJDMF9NYXN0ZXJfRWRtYVJlY2VpdmUsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50LCBJMkMwX01hc3Rlcl9FZG1hQ29udHJvbCwgSTJDMF9NYXN0ZXJfRWRtYUdldFN0YXR1cworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfTWFzdGVyX0RtYUluaXRpYWxpemUsIEkyQzBfTWFzdGVyX0RtYVVuaW5pdGlhbGl6ZSwgSTJDMF9NYXN0ZXJfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMF9NYXN0ZXJfRG1hVHJhbnNtaXQsIEkyQzBfTWFzdGVyX0RtYVJlY2VpdmUsIE5VTEwsIE5VTEwsIEkyQzBfTWFzdGVyX0RtYUdldERhdGFDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfTWFzdGVyX0RtYUNvbnRyb2wsIEkyQzBfTWFzdGVyX0RtYUdldFN0YXR1cworI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMF9JbnRlcnJ1cHRJbml0aWFsaXplLCBJMkMwX0ludGVycnVwdFVuaW5pdGlhbGl6ZSwgSTJDMF9JbnRlcnJ1cHRQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMwX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCwgSTJDMF9NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSwgSTJDMF9TbGF2ZV9JbnRlcnJ1cHRUcmFuc21pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSwgSTJDMF9JbnRlcnJ1cHRHZXREYXRhQ291bnQsIEkyQzBfSW50ZXJydXB0Q29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzBfSW50ZXJydXB0R2V0U3RhdHVzCisjZW5kaWYKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMxKSAmJiBSVEVfSTJDMQorCitleHRlcm4gdWludDMyX3QgSTJDMV9HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgSTJDMV9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzFfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfaTJjX3Jlc291cmNlX3QgSTJDMV9SZXNvdXJjZSA9IHtJMkMxLCBJMkMxX0dldEZyZXF9OworCisjaWYgUlRFX0kyQzFfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19pMmNfZG1hX3Jlc291cmNlX3QgSTJDMV9EbWFSZXNvdXJjZSA9IHtSVEVfSTJDMV9NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMxX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfSTJDMV9NYXN0ZXJfRE1BTVVYX0JBU0UsIFJURV9JMkMxX01hc3Rlcl9QRVJJX1NFTH07CisKK2kyY19tYXN0ZXJfZG1hX2hhbmRsZV90IEkyQzFfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IEkyQzFfRG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMxX2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCBJMkMxX0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDMV9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMxX1Jlc291cmNlLCAmSTJDMV9EbWFSZXNvdXJjZSwgJkkyQzFfRG1hSGFuZGxlLCAmSTJDMV9EbWFUeFJ4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDMV9NYXN0ZXJfRG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDMV9Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMxX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMxX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFVbmluaXRpYWxpemUoJkkyQzFfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hUG93ZXJDb250cm9sKHN0YXRlLCAmSTJDMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFUcmFuc21pdChhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzFfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0RtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFSZWNlaXZlKGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KCZJMkMxX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzFfRG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMxX01hc3Rlcl9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFHZXRTdGF0dXMoJkkyQzFfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfaTJjX2VkbWFfcmVzb3VyY2VfdCBJMkMxX0VkbWFSZXNvdXJjZSA9IHtSVEVfSTJDMV9NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMxX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9JMkMxX01hc3Rlcl9ETUFNVVhfQkFTRSwgUlRFX0kyQzFfTWFzdGVyX1BFUklfU0VMfTsKKworaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IEkyQzFfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgSTJDMV9FZG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMxX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzFfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzFfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzFfUmVzb3VyY2UsICZJMkMxX0VkbWFSZXNvdXJjZSwgJkkyQzFfRWRtYUhhbmRsZSwgJkkyQzFfRWRtYVR4UnhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMxX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDMV9Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMxX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKCZJMkMxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzFfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9FZG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfRWRtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzFfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldERhdGFDb3VudCgmSTJDMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfTWFzdGVyX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzFfTWFzdGVyX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hR2V0U3RhdHVzKCZJMkMxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitjbXNpc19pMmNfaGFuZGxlX3QgSTJDMV9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMV9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgSTJDMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDMV9SZXNvdXJjZSwgJkkyQzFfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDMV9JbnRlcnJ1cHRJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBJMkMxX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzFfSW50ZXJydXB0VW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRVbmluaXRpYWxpemUoJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBJMkMxX0ludGVycnVwdFBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRQb3dlckNvbnRyb2woc3RhdGUsICZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMV9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMV9NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSh1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMxX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFRyYW5zbWl0KGRhdGEsIG51bSwgJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSh1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIEkyQ19TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKGRhdGEsIG51bSwgJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfSW50ZXJydXB0R2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXREYXRhQ291bnQoJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzFfSW50ZXJydXB0Q29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzFfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMxX0ludGVycnVwdEdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBJMkNfSW50ZXJydXB0R2V0U3RhdHVzKCZJMkMxX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMxID0ge0kyQ3hfR2V0VmVyc2lvbiwgSTJDeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX0kyQzFfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9NYXN0ZXJfRWRtYUluaXRpYWxpemUsIEkyQzFfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUsIEkyQzFfTWFzdGVyX0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX01hc3Rlcl9FZG1hVHJhbnNtaXQsIEkyQzFfTWFzdGVyX0VkbWFSZWNlaXZlLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9NYXN0ZXJfRWRtYUdldERhdGFDb3VudCwgSTJDMV9NYXN0ZXJfRWRtYUNvbnRyb2wsIEkyQzFfTWFzdGVyX0VkbWFHZXRTdGF0dXMKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX01hc3Rlcl9EbWFJbml0aWFsaXplLCBJMkMxX01hc3Rlcl9EbWFVbmluaXRpYWxpemUsIEkyQzFfTWFzdGVyX0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzFfTWFzdGVyX0RtYVRyYW5zbWl0LCBJMkMxX01hc3Rlcl9EbWFSZWNlaXZlLCBOVUxMLCBOVUxMLCBJMkMxX01hc3Rlcl9EbWFHZXREYXRhQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX01hc3Rlcl9EbWFDb250cm9sLCBJMkMxX01hc3Rlcl9EbWFHZXRTdGF0dXMKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzFfSW50ZXJydXB0SW5pdGlhbGl6ZSwgSTJDMV9JbnRlcnJ1cHRVbmluaXRpYWxpemUsIEkyQzFfSW50ZXJydXB0UG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMV9NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQsIEkyQzFfTWFzdGVyX0ludGVycnVwdFJlY2VpdmUsIEkyQzFfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX1NsYXZlX0ludGVycnVwdFJlY2VpdmUsIEkyQzFfSW50ZXJydXB0R2V0RGF0YUNvdW50LCBJMkMxX0ludGVycnVwdENvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMxX0ludGVycnVwdEdldFN0YXR1cworI2VuZGlmCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMikgJiYgUlRFX0kyQzIKKworZXh0ZXJuIHVpbnQzMl90IEkyQzJfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzJfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBJMkMyX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2kyY19yZXNvdXJjZV90IEkyQzJfUmVzb3VyY2UgPSB7STJDMiwgSTJDMl9HZXRGcmVxfTsKKworI2lmIFJURV9JMkMyX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfaTJjX2RtYV9yZXNvdXJjZV90IEkyQzJfRG1hUmVzb3VyY2UgPSB7UlRFX0kyQzJfTWFzdGVyX0RNQV9CQVNFLCBSVEVfSTJDMl9NYXN0ZXJfRE1BX0NILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0kyQzJfTWFzdGVyX0RNQU1VWF9CQVNFLCBSVEVfSTJDMl9NYXN0ZXJfUEVSSV9TRUx9OworCitpMmNfbWFzdGVyX2RtYV9oYW5kbGVfdCBJMkMyX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBJMkMyX0RtYVR4UnhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMl9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDMl9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzJfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDMl9SZXNvdXJjZSwgJkkyQzJfRG1hUmVzb3VyY2UsICZJMkMyX0RtYUhhbmRsZSwgJkkyQzJfRG1hVHhSeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IEkyQzJfTWFzdGVyX0RtYUluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzJfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgSTJDMl9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hVW5pbml0aWFsaXplKCZJMkMyX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbCgmSTJDMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFUcmFuc21pdChhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzJfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0RtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFSZWNlaXZlKGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hR2V0RGF0YUNvdW50KCZJMkMyX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzJfRG1hRHJpdmVyU3RhdGUpOworfQorCitBUk1fSTJDX1NUQVRVUyBJMkMyX01hc3Rlcl9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFHZXRTdGF0dXMoJkkyQzJfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfaTJjX2VkbWFfcmVzb3VyY2VfdCBJMkMyX0VkbWFSZXNvdXJjZSA9IHtSVEVfSTJDMl9NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMyX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJURV9JMkMyX01hc3Rlcl9ETUFNVVhfQkFTRSwgUlRFX0kyQzJfTWFzdGVyX1BFUklfU0VMfTsKKworaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IEkyQzJfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgSTJDMl9FZG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMyX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzJfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19lZG1hX2RyaXZlcl9zdGF0ZV90IEkyQzJfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkkyQzJfUmVzb3VyY2UsICZJMkMyX0VkbWFSZXNvdXJjZSwgJkkyQzJfRWRtYUhhbmRsZSwgJkkyQzJfRWRtYVR4UnhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMyX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDMl9Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmSTJDMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMyX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVW5pbml0aWFsaXplKCZJMkMyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzJfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9FZG1hVHJhbnNtaXQodWludDMyX3QgYWRkciwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hVHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9NYXN0ZXJfRWRtYVJlY2VpdmUodWludDMyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtLCBib29sIHhmZXJfcGVuZGluZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hUmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzJfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUdldERhdGFDb3VudCgmSTJDMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZJMkMyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzJfTWFzdGVyX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hR2V0U3RhdHVzKCZJMkMyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitjbXNpc19pMmNfaGFuZGxlX3QgSTJDMl9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigiaTJjMl9pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19pMmNfaW50ZXJydXB0X2RyaXZlcl9zdGF0ZV90IEkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDMl9SZXNvdXJjZSwgJkkyQzJfSGFuZGxlLAorCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMyX0ludGVycnVwdEluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzJfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgSTJDMl9JbnRlcnJ1cHRVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMyX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdFVuaW5pdGlhbGl6ZSgmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzJfSW50ZXJydXB0UG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdFBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMyX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMyX01hc3Rlcl9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzJfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBJMkNfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQoZGF0YSwgbnVtLCAmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFJlY2VpdmUoZGF0YSwgbnVtLCAmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9JbnRlcnJ1cHRHZXREYXRhQ291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEdldERhdGFDb3VudCgmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDMl9JbnRlcnJ1cHRDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdENvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDMl9JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzJfSW50ZXJydXB0R2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXRTdGF0dXMoJkkyQzJfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9JMkMgRHJpdmVyX0kyQzIgPSB7STJDeF9HZXRWZXJzaW9uLCBJMkN4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfSTJDMl9ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZSwgSTJDMl9NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSwgSTJDMl9NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfTWFzdGVyX0VkbWFUcmFuc21pdCwgSTJDMl9NYXN0ZXJfRWRtYVJlY2VpdmUsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50LCBJMkMyX01hc3Rlcl9FZG1hQ29udHJvbCwgSTJDMl9NYXN0ZXJfRWRtYUdldFN0YXR1cworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfTWFzdGVyX0RtYUluaXRpYWxpemUsIEkyQzJfTWFzdGVyX0RtYVVuaW5pdGlhbGl6ZSwgSTJDMl9NYXN0ZXJfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMl9NYXN0ZXJfRG1hVHJhbnNtaXQsIEkyQzJfTWFzdGVyX0RtYVJlY2VpdmUsIE5VTEwsIE5VTEwsIEkyQzJfTWFzdGVyX0RtYUdldERhdGFDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfTWFzdGVyX0RtYUNvbnRyb2wsIEkyQzJfTWFzdGVyX0RtYUdldFN0YXR1cworI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDMl9JbnRlcnJ1cHRJbml0aWFsaXplLCBJMkMyX0ludGVycnVwdFVuaW5pdGlhbGl6ZSwgSTJDMl9JbnRlcnJ1cHRQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMyX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCwgSTJDMl9NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSwgSTJDMl9TbGF2ZV9JbnRlcnJ1cHRUcmFuc21pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSwgSTJDMl9JbnRlcnJ1cHRHZXREYXRhQ291bnQsIEkyQzJfSW50ZXJydXB0Q29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzJfSW50ZXJydXB0R2V0U3RhdHVzCisjZW5kaWYKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMzKSAmJiBSVEVfSTJDMworCitleHRlcm4gdWludDMyX3QgSTJDM19HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgSTJDM19Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIEkyQzNfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfaTJjX3Jlc291cmNlX3QgSTJDM19SZXNvdXJjZSA9IHtJMkMzLCBJMkMzX0dldEZyZXF9OworCisjaWYgUlRFX0kyQzNfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19pMmNfZG1hX3Jlc291cmNlX3QgSTJDM19EbWFSZXNvdXJjZSA9IHtSVEVfSTJDM19NYXN0ZXJfRE1BX0JBU0UsIFJURV9JMkMzX01hc3Rlcl9ETUFfQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEVfSTJDM19NYXN0ZXJfRE1BTVVYX0JBU0UsIFJURV9JMkMzX01hc3Rlcl9QRVJJX1NFTH07CisKK2kyY19tYXN0ZXJfZG1hX2hhbmRsZV90IEkyQzNfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IEkyQzNfRG1hVHhSeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMzX2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfaTJjX2RtYV9kcml2ZXJfc3RhdGVfdCBJMkMzX0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19kbWFfZHJpdmVyX3N0YXRlX3QgSTJDM19EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMzX1Jlc291cmNlLCAmSTJDM19EbWFSZXNvdXJjZSwgJkkyQzNfRG1hSGFuZGxlLCAmSTJDM19EbWFUeFJ4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgSTJDM19NYXN0ZXJfRG1hSW5pdGlhbGl6ZShBUk1fSTJDX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgSTJDM19Jbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMzX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMzX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFVbmluaXRpYWxpemUoJkkyQzNfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRG1hUG93ZXJDb250cm9sKCZJMkMzX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9EbWFUcmFuc21pdCh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVRyYW5zbWl0KGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRG1hUmVjZWl2ZSh1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYVJlY2VpdmUoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMzX0RtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9EbWFHZXREYXRhQ291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9EbWFHZXREYXRhQ291bnQoJkkyQzNfRG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzNfTWFzdGVyX0RtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0RtYUdldFN0YXR1cygmSTJDM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorCitjbXNpc19pMmNfZWRtYV9yZXNvdXJjZV90IEkyQzNfRWRtYVJlc291cmNlID0ge1JURV9JMkMzX01hc3Rlcl9ETUFfQkFTRSwgUlRFX0kyQzNfTWFzdGVyX0RNQV9DSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRFX0kyQzNfTWFzdGVyX0RNQU1VWF9CQVNFLCBSVEVfSTJDM19NYXN0ZXJfUEVSSV9TRUx9OworCitpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgSTJDM19FZG1hSGFuZGxlOworZWRtYV9oYW5kbGVfdCBJMkMzX0VkbWFUeFJ4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImkyYzNfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgSTJDM19FZG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfaTJjX2VkbWFfZHJpdmVyX3N0YXRlX3QgSTJDM19FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmSTJDM19SZXNvdXJjZSwgJkkyQzNfRWRtYVJlc291cmNlLCAmSTJDM19FZG1hSGFuZGxlLCAmSTJDM19FZG1hVHhSeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IEkyQzNfTWFzdGVyX0VkbWFJbml0aWFsaXplKEFSTV9JMkNfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBJMkMzX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIEkyQzNfRGVpbml0UGlucygpOworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFVbmluaXRpYWxpemUoJkkyQzNfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmSTJDM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0VkbWFUcmFuc21pdCh1aW50MzJfdCBhZGRyLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFUcmFuc21pdChhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzNfRWRtYURyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9FZG1hUmVjZWl2ZSh1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBudW0sIGJvb2wgeGZlcl9wZW5kaW5nKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFSZWNlaXZlKGFkZHIsIGRhdGEsIG51bSwgeGZlcl9wZW5kaW5nLCAmSTJDM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0VkbWFHZXREYXRhQ291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50KCZJMkMzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19NYXN0ZXJfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkkyQzNfRWRtYURyaXZlclN0YXRlKTsKK30KKworQVJNX0kyQ19TVEFUVVMgSTJDM19NYXN0ZXJfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBJMkNfTWFzdGVyX0VkbWFHZXRTdGF0dXMoJkkyQzNfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2Ntc2lzX2kyY19oYW5kbGVfdCBJMkMzX0hhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJpMmMzX2ludGVycnVwdF9kcml2ZXJfc3RhdGUiKQorY21zaXNfaTJjX2ludGVycnVwdF9kcml2ZXJfc3RhdGVfdCBJMkMzX0ludGVycnVwdERyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2kyY19pbnRlcnJ1cHRfZHJpdmVyX3N0YXRlX3QgSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZJMkMzX1Jlc291cmNlLCAmSTJDM19IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBJMkMzX0ludGVycnVwdEluaXRpYWxpemUoQVJNX0kyQ19TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIEkyQzNfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEluaXRpYWxpemUoY2JfZXZlbnQsICZJMkMzX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgSTJDM19JbnRlcnJ1cHRVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBJMkMzX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdFVuaW5pdGlhbGl6ZSgmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IEkyQzNfSW50ZXJydXB0UG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdFBvd2VyQ29udHJvbChzdGF0ZSwgJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfTWFzdGVyX0ludGVycnVwdFRyYW5zbWl0KHVpbnQzMl90IGFkZHIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfSW50ZXJydXB0VHJhbnNtaXQoYWRkciwgZGF0YSwgbnVtLCB4ZmVyX3BlbmRpbmcsICZJMkMzX0ludGVycnVwdERyaXZlclN0YXRlKTsKK30KKworaW50MzJfdCBJMkMzX01hc3Rlcl9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQzMl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSwgYm9vbCB4ZmVyX3BlbmRpbmcpCit7CisgICAgcmV0dXJuIEkyQ19NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZShhZGRyLCBkYXRhLCBudW0sIHhmZXJfcGVuZGluZywgJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCitpbnQzMl90IEkyQzNfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBJMkNfU2xhdmVfSW50ZXJydXB0VHJhbnNtaXQoZGF0YSwgbnVtLCAmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19TbGF2ZV9JbnRlcnJ1cHRSZWNlaXZlKHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gSTJDX1NsYXZlX0ludGVycnVwdFJlY2VpdmUoZGF0YSwgbnVtLCAmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19JbnRlcnJ1cHRHZXREYXRhQ291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdEdldERhdGFDb3VudCgmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK2ludDMyX3QgSTJDM19JbnRlcnJ1cHRDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gSTJDX0ludGVycnVwdENvbnRyb2woY29udHJvbCwgYXJnLCAmSTJDM19JbnRlcnJ1cHREcml2ZXJTdGF0ZSk7Cit9CisKK0FSTV9JMkNfU1RBVFVTIEkyQzNfSW50ZXJydXB0R2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIEkyQ19JbnRlcnJ1cHRHZXRTdGF0dXMoJkkyQzNfSW50ZXJydXB0RHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9JMkMgRHJpdmVyX0kyQzMgPSB7STJDeF9HZXRWZXJzaW9uLCBJMkN4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfSTJDM19ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX01hc3Rlcl9FZG1hSW5pdGlhbGl6ZSwgSTJDM19NYXN0ZXJfRWRtYVVuaW5pdGlhbGl6ZSwgSTJDM19NYXN0ZXJfRWRtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfTWFzdGVyX0VkbWFUcmFuc21pdCwgSTJDM19NYXN0ZXJfRWRtYVJlY2VpdmUsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX01hc3Rlcl9FZG1hR2V0RGF0YUNvdW50LCBJMkMzX01hc3Rlcl9FZG1hQ29udHJvbCwgSTJDM19NYXN0ZXJfRWRtYUdldFN0YXR1cworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfTWFzdGVyX0RtYUluaXRpYWxpemUsIEkyQzNfTWFzdGVyX0RtYVVuaW5pdGlhbGl6ZSwgSTJDM19NYXN0ZXJfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDM19NYXN0ZXJfRG1hVHJhbnNtaXQsIEkyQzNfTWFzdGVyX0RtYVJlY2VpdmUsIE5VTEwsIE5VTEwsIEkyQzNfTWFzdGVyX0RtYUdldERhdGFDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfTWFzdGVyX0RtYUNvbnRyb2wsIEkyQzNfTWFzdGVyX0RtYUdldFN0YXR1cworI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDM19JbnRlcnJ1cHRJbml0aWFsaXplLCBJMkMzX0ludGVycnVwdFVuaW5pdGlhbGl6ZSwgSTJDM19JbnRlcnJ1cHRQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkMzX01hc3Rlcl9JbnRlcnJ1cHRUcmFuc21pdCwgSTJDM19NYXN0ZXJfSW50ZXJydXB0UmVjZWl2ZSwgSTJDM19TbGF2ZV9JbnRlcnJ1cHRUcmFuc21pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfU2xhdmVfSW50ZXJydXB0UmVjZWl2ZSwgSTJDM19JbnRlcnJ1cHRHZXREYXRhQ291bnQsIEkyQzNfSW50ZXJydXB0Q29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQzNfSW50ZXJydXB0R2V0U3RhdHVzCisjZW5kaWYKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfaTJjX2Ntc2lzLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9pMmNfY21zaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTNiZjdlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvY21zaXNfZHJpdmVycy9mc2xfaTJjX2Ntc2lzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5CisgKiBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfSTJDX0NNU0lTX0hfCisjZGVmaW5lIF9GU0xfSTJDX0NNU0lTX0hfCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorI2luY2x1ZGUgIkRyaXZlcl9JMkMuaCIKKyNpbmNsdWRlICJSVEVfRGV2aWNlLmgiCisjaW5jbHVkZSAiZnNsX2kyYy5oIgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFNVVhfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFNVVhfQ09VTlQpCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKyNpbmNsdWRlICJmc2xfaTJjX2RtYS5oIgorI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorI2luY2x1ZGUgImZzbF9pMmNfZWRtYS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEkyQzApCitleHRlcm4gQVJNX0RSSVZFUl9JMkMgRHJpdmVyX0kyQzA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSTJDMSkKK2V4dGVybiBBUk1fRFJJVkVSX0kyQyBEcml2ZXJfSTJDMTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMyKQorZXh0ZXJuIEFSTV9EUklWRVJfSTJDIERyaXZlcl9JMkMyOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEkyQzMpCitleHRlcm4gQVJNX0RSSVZFUl9JMkMgRHJpdmVyX0kyQzM7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9scHVhcnRfY21zaXMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2xwdWFydF9jbXNpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9scHVhcnRfY21zaXMuYwpAQCAtMCwwICsxLDI5NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICogQ29weXJpZ2h0IChjKSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9scHVhcnRfY21zaXMuaCIKKworLyogUmUtbWFwcGluZyBmb3IgTFBVQVJUICYgVUFSVCBpbmRleGluZy4gKi8KKyNpZiAoRlNMX0ZFQVRVUkVfU09DX0xQVUFSVF9DT1VOVCA9PSAxKSAmJiBGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVAorCisjaWZkZWYgUlRFX1VTQVJUMAorI3VuZGVmIFJURV9VU0FSVDAKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX0VOCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfRU4KKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1RYX0NICisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfVFhfQ0gKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1RYX1BFUklfU0VMCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfVFhfUEVSSV9TRUwKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1RYX0RNQU1VWF9CQVNFCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfVFhfRE1BTVVYX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1RYX0RNQV9CQVNFCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfVFhfRE1BX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1JYX0NICisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfUlhfQ0gKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1JYX1BFUklfU0VMCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfUlhfUEVSSV9TRUwKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1JYX0RNQU1VWF9CQVNFCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfUlhfRE1BTVVYX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDBfRE1BX1JYX0RNQV9CQVNFCisjdW5kZWYgUlRFX1VTQVJUMF9ETUFfUlhfRE1BX0JBU0UKKyNlbmRpZgorI2lmZGVmIFVTQVJUMF9SWF9CVUZGRVJfRU5BQkxFCisjdW5kZWYgVVNBUlQwX1JYX0JVRkZFUl9FTkFCTEUKKyNlbmRpZgorCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDMpCisKKyNpZmRlZiBSVEVfVVNBUlQzCisjZGVmaW5lIFJURV9VU0FSVDAgUlRFX1VTQVJUMworI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUM19ETUFfRU4KKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfRU4gUlRFX1VTQVJUM19ETUFfRU4KKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDNfRE1BX1RYX0NICisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX0NIIFJURV9VU0FSVDNfRE1BX1RYX0NICisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQzX0RNQV9UWF9QRVJJX1NFTAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9QRVJJX1NFTCBSVEVfVVNBUlQzX0RNQV9UWF9QRVJJX1NFTAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUM19ETUFfVFhfRE1BTVVYX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfRE1BTVVYX0JBU0UgUlRFX1VTQVJUM19ETUFfVFhfRE1BTVVYX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDNfRE1BX1RYX0RNQV9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX0RNQV9CQVNFIFJURV9VU0FSVDNfRE1BX1RYX0RNQV9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQzX0RNQV9SWF9DSAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9DSCBSVEVfVVNBUlQzX0RNQV9SWF9DSAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUM19ETUFfUlhfUEVSSV9TRUwKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfUEVSSV9TRUwgUlRFX1VTQVJUM19ETUFfUlhfUEVSSV9TRUwKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDNfRE1BX1JYX0RNQU1VWF9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX0RNQU1VWF9CQVNFIFJURV9VU0FSVDNfRE1BX1JYX0RNQU1VWF9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQzX0RNQV9SWF9ETUFfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9ETUFfQkFTRSBSVEVfVVNBUlQzX0RNQV9SWF9ETUFfQkFTRQorI2VuZGlmCisjaWZkZWYgVVNBUlQzX1JYX0JVRkZFUl9FTkFCTEUKKyNkZWZpbmUgVVNBUlQwX1JYX0JVRkZFUl9FTkFCTEUgVVNBUlQzX1JYX0JVRkZFUl9FTkFCTEUKKyNlbmRpZgorCisjZW5kaWYKKworI2lmIChGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSA0KQorCisjaWZkZWYgUlRFX1VTQVJUNAorI2RlZmluZSBSVEVfVVNBUlQwIFJURV9VU0FSVDQKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDRfRE1BX0VOCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX0VOIFJURV9VU0FSVDRfRE1BX0VOCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ0X0RNQV9UWF9DSAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9DSCBSVEVfVVNBUlQ0X0RNQV9UWF9DSAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNF9ETUFfVFhfUEVSSV9TRUwKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfUEVSSV9TRUwgUlRFX1VTQVJUNF9ETUFfVFhfUEVSSV9TRUwKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDRfRE1BX1RYX0RNQU1VWF9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX0RNQU1VWF9CQVNFIFJURV9VU0FSVDRfRE1BX1RYX0RNQU1VWF9CQVNFCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9ETUFfQkFTRSBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFfQkFTRQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNF9ETUFfUlhfQ0gKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfQ0ggUlRFX1VTQVJUNF9ETUFfUlhfQ0gKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDRfRE1BX1JYX1BFUklfU0VMCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX1BFUklfU0VMIFJURV9VU0FSVDRfRE1BX1JYX1BFUklfU0VMCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ0X0RNQV9SWF9ETUFNVVhfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9ETUFNVVhfQkFTRSBSVEVfVVNBUlQ0X0RNQV9SWF9ETUFNVVhfQkFTRQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNF9ETUFfUlhfRE1BX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfRE1BX0JBU0UgUlRFX1VTQVJUNF9ETUFfUlhfRE1BX0JBU0UKKyNlbmRpZgorI2lmZGVmIFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFCisjZGVmaW5lIFVTQVJUMF9SWF9CVUZGRVJfRU5BQkxFIFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiAoRlNMX0ZFQVRVUkVfU09DX1VBUlRfQ09VTlQgPT0gNSkKKworI2lmZGVmIFJURV9VU0FSVDUKKyNkZWZpbmUgUlRFX1VTQVJUMCBSVEVfVVNBUlQ1CisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ1X0RNQV9FTgorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9FTiBSVEVfVVNBUlQ1X0RNQV9FTgorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNV9ETUFfVFhfQ0gKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfQ0ggUlRFX1VTQVJUNV9ETUFfVFhfQ0gKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDVfRE1BX1RYX1BFUklfU0VMCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1RYX1BFUklfU0VMIFJURV9VU0FSVDVfRE1BX1RYX1BFUklfU0VMCisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ1X0RNQV9UWF9ETUFNVVhfQkFTRQorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9UWF9ETUFNVVhfQkFTRSBSVEVfVVNBUlQ1X0RNQV9UWF9ETUFNVVhfQkFTRQorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNV9ETUFfVFhfRE1BX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfVFhfRE1BX0JBU0UgUlRFX1VTQVJUNV9ETUFfVFhfRE1BX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDVfRE1BX1JYX0NICisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX0NIIFJURV9VU0FSVDVfRE1BX1JYX0NICisjZW5kaWYKKyNpZmRlZiBSVEVfVVNBUlQ1X0RNQV9SWF9QRVJJX1NFTAorI2RlZmluZSBSVEVfVVNBUlQwX0RNQV9SWF9QRVJJX1NFTCBSVEVfVVNBUlQ1X0RNQV9SWF9QRVJJX1NFTAorI2VuZGlmCisjaWZkZWYgUlRFX1VTQVJUNV9ETUFfUlhfRE1BTVVYX0JBU0UKKyNkZWZpbmUgUlRFX1VTQVJUMF9ETUFfUlhfRE1BTVVYX0JBU0UgUlRFX1VTQVJUNV9ETUFfUlhfRE1BTVVYX0JBU0UKKyNlbmRpZgorI2lmZGVmIFJURV9VU0FSVDVfRE1BX1JYX0RNQV9CQVNFCisjZGVmaW5lIFJURV9VU0FSVDBfRE1BX1JYX0RNQV9CQVNFIFJURV9VU0FSVDVfRE1BX1JYX0RNQV9CQVNFCisjZW5kaWYKKyNpZmRlZiBVU0FSVDVfUlhfQlVGRkVSX0VOQUJMRQorI2RlZmluZSBVU0FSVDBfUlhfQlVGRkVSX0VOQUJMRSBVU0FSVDVfUlhfQlVGRkVSX0VOQUJMRQorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKKworI2lmICgoUlRFX1VTQVJUMCAmJiBkZWZpbmVkKExQVUFSVDApKSB8fCAoUlRFX1VTQVJUMSAmJiBkZWZpbmVkKExQVUFSVDEpKSB8fCAoUlRFX1VTQVJUMiAmJiBkZWZpbmVkKExQVUFSVDIpKSB8fCBcCisgICAgIChSVEVfVVNBUlQzICYmIGRlZmluZWQoTFBVQVJUMykpIHx8IChSVEVfVVNBUlQ0ICYmIGRlZmluZWQoTFBVQVJUNCkpIHx8IChSVEVfVVNBUlQ1ICYmIGRlZmluZWQoTFBVQVJUNSkpKQorCisjZGVmaW5lIEFSTV9MUFVBUlRfRFJWX1ZFUlNJT04gQVJNX0RSSVZFUl9WRVJTSU9OX01BSk9SX01JTk9SKDIsIDApCisKKy8qCisgKiBBUk1DQyBkb2VzIG5vdCBzdXBwb3J0IHNwbGl0IHRoZSBkYXRhIHNlY3Rpb24gYXV0b21hdGljYWxseSwgc28gdGhlIGRyaXZlcgorICogbmVlZHMgdG8gc3BsaXQgdGhlIGRhdGEgdG8gc2VwYXJhdGUgc2VjdGlvbnMgZXhwbGljaXRseSwgdG8gcmVkdWNlIGNvZGVzaXplLgorICovCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKKyNkZWZpbmUgQVJNQ0NfU0VDVElPTihzZWN0aW9uX25hbWUpIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oc2VjdGlvbl9uYW1lKSkpCisjZW5kaWYKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX2Ntc2lzX2xwdWFydF9yZXNvdXJjZQoreworICAgIExQVUFSVF9UeXBlICpiYXNlOyAgICAgICAgIC8qITwgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLiAgICAgICovCisgICAgdWludDMyX3QgKCpHZXRGcmVxKSh2b2lkKTsgLyohPCBGdW5jdGlvbiB0byBnZXQgdGhlIGNsb2NrIGZyZXF1ZW5jeS4gKi8KK30gY21zaXNfbHB1YXJ0X3Jlc291cmNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZQoreworICAgIGNtc2lzX2xwdWFydF9yZXNvdXJjZV90ICpyZXNvdXJjZTsgLyohPCBCYXNpYyBMUFVBUlQgcmVzb3VyY2UuICovCisgICAgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGU7ICAgICAgICAgICAvKiE8IEludGVydXB0IHRyYW5zZmVyIGhhbmRsZS4gKi8KKyAgICBBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudDsgIC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24uICAgICAqLworICAgIGJvb2wgaXNJbml0aWFsaXplZDsgICAgICAgICAgICAgICAgLyohPCBJcyBpbml0aWFsaXplZCBvciBub3QuICovCisgICAgYm9vbCBpc1Bvd2VyT247ICAgICAgICAgICAgICAgICAgICAvKiE8IElzIHBvd2VyIG9uIG9yIG5vdC4gICAgKi8KKyAgICBib29sIGlzQ29uZmlndXJlZDsgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlZCB0byB3b3JrIG9yIG5vdC4gKi8KK30gY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdDsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfbHB1YXJ0X2RtYV9yZXNvdXJjZQoreworICAgIERNQV9UeXBlICp0eERtYUJhc2U7ICAgICAgIC8qITwgRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBUWC4gICAgKi8KKyAgICB1aW50MzJfdCB0eERtYUNoYW5uZWw7ICAgICAvKiE8IERNQSBjaGFubmVsIGZvciBMUFVBUlQgVFguICAgICAgICAgICAgICovCisgICAgRE1BTVVYX1R5cGUgKnR4RG1hbXV4QmFzZTsgLyohPCBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIFRYLiAqLworICAgIHVpbnQ4X3QgdHhEbWFSZXF1ZXN0OyAgICAgIC8qITwgVFggRE1BIHJlcXVlc3Qgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KKworICAgIERNQV9UeXBlICpyeERtYUJhc2U7ICAgICAgIC8qITwgRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGZvciBSWC4gICAgKi8KKyAgICB1aW50MzJfdCByeERtYUNoYW5uZWw7ICAgICAvKiE8IERNQSBjaGFubmVsIGZvciBMUFVBUlQgUlguICAgICAgICAgICAgICovCisgICAgRE1BTVVYX1R5cGUgKnJ4RG1hbXV4QmFzZTsgLyohPCBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgZm9yIFJYLiAqLworICAgIHVpbnQ4X3QgcnhEbWFSZXF1ZXN0OyAgICAgIC8qITwgUlggRE1BIHJlcXVlc3Qgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KK30gY21zaXNfbHB1YXJ0X2RtYV9yZXNvdXJjZV90OworCit0eXBlZGVmIHN0cnVjdCBfY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGUKK3sKKyAgICBjbXNpc19scHVhcnRfcmVzb3VyY2VfdCAqcmVzb3VyY2U7ICAgICAgICAvKiE8IExQVUFSVCBiYXNpYyByZXNvdXJjZS4gICAgICAqLworICAgIGNtc2lzX2xwdWFydF9kbWFfcmVzb3VyY2VfdCAqZG1hUmVzb3VyY2U7IC8qITwgTFBVQVJUIERNQSByZXNvdXJjZS4gICAgICAgICovCisgICAgbHB1YXJ0X2RtYV9oYW5kbGVfdCAqaGFuZGxlOyAgICAgICAgICAgICAgLyohPCBMUFVBUlQgRE1BIHRyYW5zZmVyIGhhbmRsZS4gKi8KKyAgICBkbWFfaGFuZGxlX3QgKnJ4SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiE8IERNQSBSWCBoYW5kbGUuICAgICAgICAgICAgICAqLworICAgIGRtYV9oYW5kbGVfdCAqdHhIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qITwgRE1BIFRYIGhhbmRsZS4gICAgICAgICAgICAgICovCisgICAgQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQ7ICAgICAgICAgLyohPCBDYWxsYmFjayBmdW5jdGlvbi4gICAgICovCisgICAgYm9vbCBpc0luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJcyBpbml0aWFsaXplZCBvciBub3QuICAgICAgKi8KKyAgICBib29sIGlzUG93ZXJPbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElzIHBvd2VyIG9uIG9yIG5vdC4gICAgICAgICAqLworICAgIGJvb2wgaXNDb25maWd1cmVkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlZCB0byB3b3JrIG9yIG5vdC4gICovCit9IGNtc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3Q7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKK3R5cGVkZWYgc3RydWN0IF9jbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZQoreworICAgIERNQV9UeXBlICp0eEVkbWFCYXNlOyAgICAgIC8qITwgRURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgVFguICAgICovCisgICAgdWludDMyX3QgdHhFZG1hQ2hhbm5lbDsgICAgLyohPCBFRE1BIGNoYW5uZWwgZm9yIExQVUFSVCBUWC4gICAgICAgICAgICAgKi8KKyAgICBETUFNVVhfVHlwZSAqdHhEbWFtdXhCYXNlOyAvKiE8IERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgVFguICovCisgICAgdWludDhfdCB0eERtYVJlcXVlc3Q7ICAgICAgLyohPCBUWCBFRE1BIHJlcXVlc3Qgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KKworICAgIERNQV9UeXBlICpyeEVkbWFCYXNlOyAgICAgIC8qITwgRURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgUlguICAgICovCisgICAgdWludDMyX3QgcnhFZG1hQ2hhbm5lbDsgICAgLyohPCBFRE1BIGNoYW5uZWwgZm9yIExQVUFSVCBSWC4gICAgICAgICAgICAgKi8KKyAgICBETUFNVVhfVHlwZSAqcnhEbWFtdXhCYXNlOyAvKiE8IERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgUlguICovCisgICAgdWludDhfdCByeERtYVJlcXVlc3Q7ICAgICAgLyohPCBSWCBFRE1BIHJlcXVlc3Qgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KK30gY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZQoreworICAgIGNtc2lzX2xwdWFydF9yZXNvdXJjZV90ICpyZXNvdXJjZTsgICAgICAgICAvKiE8IExQVUFSVCBiYXNpYyByZXNvdXJjZS4gICAgICAqLworICAgIGNtc2lzX2xwdWFydF9lZG1hX3Jlc291cmNlX3QgKmRtYVJlc291cmNlOyAvKiE8IExQVUFSVCBFRE1BIHJlc291cmNlLiAgICAgICAgKi8KKyAgICBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlOyAgICAgICAgICAgICAgLyohPCBMUFVBUlQgRURNQSB0cmFuc2ZlciBoYW5kbGUuICovCisgICAgZWRtYV9oYW5kbGVfdCAqcnhIYW5kbGU7ICAgICAgICAgICAgICAgICAgIC8qITwgRURNQSBSWCBoYW5kbGUuICAgICAgICAgICAgICAqLworICAgIGVkbWFfaGFuZGxlX3QgKnR4SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiE8IEVETUEgVFggaGFuZGxlLiAgICAgICAgICAgICAgKi8KKyAgICBBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudDsgICAgICAgICAgLyohPCBDYWxsYmFjayBmdW5jdGlvbi4gICAgICovCisgICAgYm9vbCBpc0luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAgICAgICovCisgICAgYm9vbCBpc1Bvd2VyT247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSXMgcG93ZXIgb24gb3Igbm90LiAgICAgICAgICovCisgICAgYm9vbCBpc0NvbmZpZ3VyZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlZCB0byB3b3JrIG9yIG5vdC4gKi8KK30gY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3Q7CisjZW5kaWYKKworZW51bSBfbHB1YXJ0X3RyYW5zZmVyX3N0YXRlcworeworICAgIGtMUFVBUlRfVHhJZGxlLCAvKiE8IFRYIGlkbGUuICovCisgICAga0xQVUFSVF9UeEJ1c3ksIC8qITwgVFggYnVzeS4gKi8KKyAgICBrTFBVQVJUX1J4SWRsZSwgLyohPCBSWCBpZGxlLiAqLworICAgIGtMUFVBUlRfUnhCdXN5ICAvKiE8IFJYIGJ1c3kuICovCit9OworCisvKiBEcml2ZXIgVmVyc2lvbiAqLworc3RhdGljIGNvbnN0IEFSTV9EUklWRVJfVkVSU0lPTiBzX2xwdWFydERyaXZlclZlcnNpb24gPSB7QVJNX1VTQVJUX0FQSV9WRVJTSU9OLCBBUk1fTFBVQVJUX0RSVl9WRVJTSU9OfTsKKworc3RhdGljIGNvbnN0IEFSTV9VU0FSVF9DQVBBQklMSVRJRVMgc19scHVhcnREcml2ZXJDYXBhYmlsaXRpZXMgPSB7CisgICAgMSwgLyogc3VwcG9ydHMgTFBVQVJUIChBc3luY2hyb25vdXMpIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBTeW5jaHJvbm91cyBNYXN0ZXIgbW9kZSAqLworICAgIDAsIC8qIHN1cHBvcnRzIFN5bmNocm9ub3VzIFNsYXZlIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBMUFVBUlQgU2luZ2xlLXdpcmUgbW9kZSAqLworICAgIDAsIC8qIHN1cHBvcnRzIExQVUFSVCBJckRBIG1vZGUgKi8KKyAgICAwLCAvKiBzdXBwb3J0cyBMUFVBUlQgU21hcnQgQ2FyZCBtb2RlICovCisgICAgMCwgLyogU21hcnQgQ2FyZCBDbG9jayBnZW5lcmF0b3IgKi8KKyAgICAwLCAvKiBSVFMgRmxvdyBDb250cm9sIGF2YWlsYWJsZSAqLworICAgIDAsIC8qIENUUyBGbG93IENvbnRyb2wgYXZhaWxhYmxlICovCisgICAgMCwgLyogVHJhbnNtaXQgY29tcGxldGVkIGV2ZW50OiBccmVmIEFSTV9VU0FSVF9FVkVOVF9UWF9DT01QTEVURSAqLworICAgIDAsIC8qIFNpZ25hbCByZWNlaXZlIGNoYXJhY3RlciB0aW1lb3V0IGV2ZW50OiBccmVmIEFSTV9VU0FSVF9FVkVOVF9SWF9USU1FT1VUICovCisgICAgMCwgLyogUlRTIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBDVFMgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIERUUiBMaW5lOiAwPW5vdCBhdmFpbGFibGUsIDE9YXZhaWxhYmxlICovCisgICAgMCwgLyogRFNSIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBEQ0QgTGluZTogMD1ub3QgYXZhaWxhYmxlLCAxPWF2YWlsYWJsZSAqLworICAgIDAsIC8qIFJJIExpbmU6IDA9bm90IGF2YWlsYWJsZSwgMT1hdmFpbGFibGUgKi8KKyAgICAwLCAvKiBTaWduYWwgQ1RTIGNoYW5nZSBldmVudDogXHJlZiBBUk1fVVNBUlRfRVZFTlRfQ1RTICovCisgICAgMCwgLyogU2lnbmFsIERTUiBjaGFuZ2UgZXZlbnQ6IFxyZWYgQVJNX1VTQVJUX0VWRU5UX0RTUiAqLworICAgIDAsIC8qIFNpZ25hbCBEQ0QgY2hhbmdlIGV2ZW50OiBccmVmIEFSTV9VU0FSVF9FVkVOVF9EQ0QgKi8KKyAgICAwLCAvKiBTaWduYWwgUkkgY2hhbmdlIGV2ZW50OiBccmVmIEFSTV9VU0FSVF9FVkVOVF9SSSAqLworfTsKKworLyoKKyAqIENvbW1vbiBjb250cm9sIGZ1bmN0aW9uIHVzZWQgYnkgTFBVQVJUX05vbkJsb2NraW5nQ29udHJvbC9MUFVBUlRfRG1hQ29udHJvbC9MUFVBUlRfRWRtYUNvbnRyb2wKKyAqLworc3RhdGljIGludDMyX3QgTFBVQVJUX0NvbW1vbkNvbnRyb2wodWludDMyX3QgY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2xwdWFydF9yZXNvdXJjZV90ICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmlzQ29uZmlndXJlZCkKK3sKKyAgICBscHVhcnRfY29uZmlnX3QgY29uZmlnOworCisgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmNvbmZpZyk7CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fVVNBUlRfQ09OVFJPTF9Nc2spCisgICAgeworICAgICAgICBjYXNlIEFSTV9VU0FSVF9NT0RFX0FTWU5DSFJPTk9VUzoKKyAgICAgICAgICAgIC8qIFVTQVJUIEJhdWRyYXRlICovCisgICAgICAgICAgICBjb25maWcuYmF1ZFJhdGVfQnBzID0gYXJnOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogVFgvUlggSU8gaXMgY29udHJvbGxlZCBpbiBhcHBsaWNhdGlvbiBsYXllci4gKi8KKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfQ09OVFJPTF9UWDoKKyAgICAgICAgICAgIGlmIChhcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0VuYWJsZVR4KHJlc291cmNlLT5iYXNlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMUFVBUlRfRW5hYmxlVHgocmVzb3VyY2UtPmJhc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0NPTlRST0xfUlg6CisgICAgICAgICAgICBpZiAoYXJnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9FbmFibGVSeChyZXNvdXJjZS0+YmFzZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0VuYWJsZVJ4KHJlc291cmNlLT5iYXNlLCBmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fVVNBUlRfREFUQV9CSVRTX01zaykKKyAgICB7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0RBVEFfQklUU183OgorICAgICAgICAgICAgY29uZmlnLmRhdGFCaXRzQ291bnQgPSBrTFBVQVJUX1NldmVuRGF0YUJpdHM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIEFSTV9VU0FSVF9EQVRBX0JJVFNfODoKKyAgICAgICAgICAgIGNvbmZpZy5kYXRhQml0c0NvdW50ID0ga0xQVUFSVF9FaWdodERhdGFCaXRzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBBUk1fVVNBUlRfRVJST1JfREFUQV9CSVRTOworICAgIH0KKworICAgIHN3aXRjaCAoY29udHJvbCAmIEFSTV9VU0FSVF9QQVJJVFlfTXNrKQorICAgIHsKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfUEFSSVRZX05PTkU6CisgICAgICAgICAgICBjb25maWcucGFyaXR5TW9kZSA9IGtMUFVBUlRfUGFyaXR5RGlzYWJsZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfUEFSSVRZX0VWRU46CisgICAgICAgICAgICBjb25maWcucGFyaXR5TW9kZSA9IGtMUFVBUlRfUGFyaXR5RXZlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFSTV9VU0FSVF9QQVJJVFlfT0REOgorICAgICAgICAgICAgY29uZmlnLnBhcml0eU1vZGUgPSBrTFBVQVJUX1Bhcml0eU9kZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9VU0FSVF9FUlJPUl9QQVJJVFk7CisgICAgfQorCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1VTQVJUX1NUT1BfQklUU19Nc2spCisgICAgeworICAgICAgICBjYXNlIEFSTV9VU0FSVF9TVE9QX0JJVFNfMToKKyAgICAgICAgICAgIC8qIFRoZSBHZXREZWZhdWx0Q29uZmlnIGhhcyBhbHJlYWR5IHNldCBmb3IgdGhpcyBjYXNlLiAqLworICAgICAgICAgICAgYnJlYWs7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NUT1BfQklUX0NPTkZJR19TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NUT1BfQklUX0NPTkZJR19TVVBQT1JUCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX1NUT1BfQklUU18yOgorICAgICAgICAgICAgY29uZmlnLnN0b3BCaXRDb3VudCA9IGtMUFVBUlRfVHdvU3RvcEJpdDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX1VTQVJUX0VSUk9SX1NUT1BfQklUUzsKKyAgICB9CisKKyAgICAvKiBJZiBMUFVBUlQgaXMgYWxyZWFkeSBjb25maWd1cmVkLCBkZWluaXQgaXQgZmlyc3QuICovCisgICAgaWYgKCppc0NvbmZpZ3VyZWQpCisgICAgeworICAgICAgICBMUFVBUlRfRGVpbml0KHJlc291cmNlLT5iYXNlKTsKKyAgICAgICAgKmlzQ29uZmlndXJlZCA9IGZhbHNlOworICAgIH0KKworICAgIGNvbmZpZy5lbmFibGVUeCA9IHRydWU7CisgICAgY29uZmlnLmVuYWJsZVJ4ID0gdHJ1ZTsKKworICAgIGlmIChrU3RhdHVzX0xQVUFSVF9CYXVkcmF0ZU5vdFN1cHBvcnQgPT0gTFBVQVJUX0luaXQocmVzb3VyY2UtPmJhc2UsICZjb25maWcsIHJlc291cmNlLT5HZXRGcmVxKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9VU0FSVF9FUlJPUl9CQVVEUkFURTsKKyAgICB9CisKKyAgICAqaXNDb25maWd1cmVkID0gdHJ1ZTsKKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgQVJNX0RSSVZFUl9WRVJTSU9OIExQVUFSVHhfR2V0VmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiBzX2xwdWFydERyaXZlclZlcnNpb247Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfQ0FQQUJJTElUSUVTIExQVUFSVHhfR2V0Q2FwYWJpbGl0aWVzKHZvaWQpCit7CisgICAgcmV0dXJuIHNfbHB1YXJ0RHJpdmVyQ2FwYWJpbGl0aWVzOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlR4X1NldE1vZGVtQ29udHJvbChBUk1fVVNBUlRfTU9ERU1fQ09OVFJPTCBjb250cm9sKQoreworICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SX1VOU1VQUE9SVEVEOworfQorCitzdGF0aWMgQVJNX1VTQVJUX01PREVNX1NUQVRVUyBMUFVBUlR4X0dldE1vZGVtU3RhdHVzKHZvaWQpCit7CisgICAgQVJNX1VTQVJUX01PREVNX1NUQVRVUyBtb2RlbV9zdGF0dXM7CisKKyAgICBtb2RlbV9zdGF0dXMuY3RzID0gMFU7CisgICAgbW9kZW1fc3RhdHVzLmRzciA9IDBVOworICAgIG1vZGVtX3N0YXR1cy5yaSA9IDBVOworICAgIG1vZGVtX3N0YXR1cy5kY2QgPSAwVTsKKworICAgIHJldHVybiBtb2RlbV9zdGF0dXM7Cit9CisKKyNlbmRpZgorCisjaWYgKChSVEVfVVNBUlQwX0RNQV9FTiAmJiBkZWZpbmVkKExQVUFSVDApKSB8fCAoUlRFX1VTQVJUMV9ETUFfRU4gJiYgZGVmaW5lZChMUFVBUlQxKSkgfHwgXAorICAgICAoUlRFX1VTQVJUMl9ETUFfRU4gJiYgZGVmaW5lZChMUFVBUlQyKSkgfHwgKFJURV9VU0FSVDNfRE1BX0VOICYmIGRlZmluZWQoTFBVQVJUMykpIHx8IFwKKyAgICAgKFJURV9VU0FSVDRfRE1BX0VOICYmIGRlZmluZWQoTFBVQVJUNCkpIHx8IChSVEVfVVNBUlQ1X0RNQV9FTiAmJiBkZWZpbmVkKExQVUFSVDUpKSkKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCit2b2lkIEtTREtfTFBVQVJUX0RtYUNhbGxiYWNrKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZG1hX2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX0xQVUFSVF9UeElkbGUgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fVVNBUlRfRVZFTlRfU0VORF9DT01QTEVURTsKKyAgICB9CisgICAgZWxzZSBpZiAoa1N0YXR1c19MUFVBUlRfUnhJZGxlID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1VTQVJUX0VWRU5UX1JFQ0VJVkVfQ09NUExFVEU7CisgICAgfQorCisgICAgLyogVXNlciBkYXRhIGlzIGFjdHVhbGx5IENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICBpZiAoKDBVICE9IGV2ZW50KSAmJiAodXNlckRhdGEpKQorICAgIHsKKyAgICAgICAgKChBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0RtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQsIGNtc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpZiAobHB1YXJ0LT5pc0luaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgLyogRHJpdmVyIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisgICAgfQorCisgICAgbHB1YXJ0LT5jYl9ldmVudCA9IGNiX2V2ZW50OworICAgIGxwdWFydC0+aXNJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0RtYVVuaW5pdGlhbGl6ZShjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgbHB1YXJ0LT5pc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgbHB1YXJ0X2NvbmZpZ190IGNvbmZpZzsKKyAgICBjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgKmRtYVJlc291cmNlOworCisgICAgc3dpdGNoIChzdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX09GRjoKKyAgICAgICAgICAgIGlmIChscHVhcnQtPmlzUG93ZXJPbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMUFVBUlRfRGVpbml0KGxwdWFydC0+cmVzb3VyY2UtPmJhc2UpOworICAgICAgICAgICAgICAgIERNQU1VWF9EaXNhYmxlQ2hhbm5lbChscHVhcnQtPmRtYVJlc291cmNlLT5yeERtYW11eEJhc2UsIGxwdWFydC0+ZG1hUmVzb3VyY2UtPnJ4RG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0Rpc2FibGVDaGFubmVsKGxwdWFydC0+ZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgbHB1YXJ0LT5kbWFSZXNvdXJjZS0+dHhEbWFDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzUG93ZXJPbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNDb25maWd1cmVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfTE9XOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICAvKiBNdXN0IGJlIGluaXRpYWxpemVkIGZpcnN0LiAqLworICAgICAgICAgICAgaWYgKCFscHVhcnQtPmlzSW5pdGlhbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmNvbmZpZyk7CisgICAgICAgICAgICAgICAgY29uZmlnLmVuYWJsZVR4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb25maWcuZW5hYmxlUnggPSB0cnVlOworCisgICAgICAgICAgICAgICAgZG1hUmVzb3VyY2UgPSBscHVhcnQtPmRtYVJlc291cmNlOworCisgICAgICAgICAgICAgICAgLyogU2V0IHVwIERNQSBzZXR0aW5nLiAqLworICAgICAgICAgICAgICAgIERNQV9DcmVhdGVIYW5kbGUobHB1YXJ0LT5yeEhhbmRsZSwgZG1hUmVzb3VyY2UtPnJ4RG1hQmFzZSwgZG1hUmVzb3VyY2UtPnJ4RG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhEbWFDaGFubmVsLCBkbWFSZXNvdXJjZS0+cnhEbWFSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+cnhEbWFDaGFubmVsKTsKKworICAgICAgICAgICAgICAgIERNQV9DcmVhdGVIYW5kbGUobHB1YXJ0LT50eEhhbmRsZSwgZG1hUmVzb3VyY2UtPnR4RG1hQmFzZSwgZG1hUmVzb3VyY2UtPnR4RG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+dHhEbWFDaGFubmVsLCBkbWFSZXNvdXJjZS0+dHhEbWFSZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRW5hYmxlQ2hhbm5lbChkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+dHhEbWFDaGFubmVsKTsKKworICAgICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBMUFVBUlQuICovCisgICAgICAgICAgICAgICAgTFBVQVJUX0luaXQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgJmNvbmZpZywgbHB1YXJ0LT5yZXNvdXJjZS0+R2V0RnJlcSgpKTsKKyAgICAgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGVETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsIEtTREtfTFBVQVJUX0RtYUNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWxwdWFydC0+Y2JfZXZlbnQsIGxwdWFydC0+dHhIYW5kbGUsIGxwdWFydC0+cnhIYW5kbGUpOworCisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc1Bvd2VyT24gPSB0cnVlOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNDb25maWd1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9EbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBscHVhcnRfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci5kYXRhID0gKHVpbnQ4X3QgKilkYXRhOworICAgIHhmZXIuZGF0YVNpemUgPSBudW07CisKKyAgICBzdGF0dXMgPSBMUFVBUlRfVHJhbnNmZXJTZW5kRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmeGZlcik7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0xQVUFSVF9SeEJ1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIuZGF0YSA9IGRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIHN0YXR1cyA9IExQVUFSVF9UcmFuc2ZlclJlY2VpdmVETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZ4ZmVyKTsKKworICAgIHN3aXRjaCAoc3RhdHVzKQorICAgIHsKKyAgICAgICAgY2FzZSBrU3RhdHVzX1N1Y2Nlc3M6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX09LOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX1BBUkFNRVRFUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfTFBVQVJUX1R4QnVzeToKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfQlVTWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9EbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgLyogT25seSBpbiBzeW5jaHJvbm91cyBtb2RlICovCisgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlRfRG1hR2V0VHhDb3VudChjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgdWludDMyX3QgY250OworCisgICAgLyogSWYgVFggbm90IGluIHByb2dyZXNzLCB0aGVuIHRoZSBUWCBjb3VudCBpcyB0eERhdGFTaXplQWxsIHNhdmVkIGluIGhhbmRsZS4gKi8KKyAgICBpZiAoa1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9PSBMUFVBUlRfVHJhbnNmZXJHZXRTZW5kQ291bnRETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZjbnQpKQorICAgIHsKKyAgICAgICAgY250ID0gbHB1YXJ0LT5oYW5kbGUtPnR4RGF0YVNpemVBbGw7CisgICAgfQorCisgICAgcmV0dXJuIGNudDsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVF9EbWFHZXRSeENvdW50KGNtc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICB1aW50MzJfdCBjbnQ7CisKKyAgICBpZiAoa1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9PSBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnRETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZjbnQpKQorICAgIHsKKyAgICAgICAgY250ID0gbHB1YXJ0LT5oYW5kbGUtPnJ4RGF0YVNpemVBbGw7CisgICAgfQorCisgICAgcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnLCBjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgLyogTXVzdCBiZSBwb3dlciBvbi4gKi8KKyAgICBpZiAoIWxwdWFydC0+aXNQb3dlck9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgfQorCisgICAgLyogRG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmZWF0dXJlcy4gKi8KKyAgICBpZiAoY29udHJvbCAmIChBUk1fVVNBUlRfRkxPV19DT05UUk9MX01zayB8IEFSTV9VU0FSVF9DUE9MX01zayB8IEFSTV9VU0FSVF9DUEhBX01zaykpCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fVVNBUlRfQ09OVFJPTF9Nc2spCisgICAgeworICAgICAgICAvKiBBYm9ydCBTZW5kICovCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0FCT1JUX1NFTkQ6CisgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFNlbmRETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgLyogQWJvcnQgcmVjZWl2ZSAqLworICAgICAgICBjYXNlIEFSTV9VU0FSVF9BQk9SVF9SRUNFSVZFOgorICAgICAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gTFBVQVJUX0NvbW1vbkNvbnRyb2woY29udHJvbCwgYXJnLCBscHVhcnQtPnJlc291cmNlLCAmbHB1YXJ0LT5pc0NvbmZpZ3VyZWQpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlRfRG1hR2V0U3RhdHVzKGNtc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBBUk1fVVNBUlRfU1RBVFVTIHN0YXQ7CisgICAgdWludDMyX3Qga3Nka19scHVhcnRfc3RhdHVzID0gTFBVQVJUX0dldFN0YXR1c0ZsYWdzKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UpOworCisgICAgc3RhdC50eF9idXN5ID0gKChrTFBVQVJUX1R4QnVzeSA9PSBscHVhcnQtPmhhbmRsZS0+dHhTdGF0ZSkgPyAoMVUpIDogKDBVKSk7CisgICAgc3RhdC5yeF9idXN5ID0gKChrTFBVQVJUX1J4QnVzeSA9PSBscHVhcnQtPmhhbmRsZS0+cnhTdGF0ZSkgPyAoMVUpIDogKDBVKSk7CisKKyAgICBzdGF0LnR4X3VuZGVyZmxvdyA9IDBVOworICAgIHN0YXQucnhfb3ZlcmZsb3cgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfUnhPdmVycnVuRmxhZykpKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAgc3RhdC5yeF9icmVhayA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9MaW5CcmVha0ZsYWcpKSk7CisjZWxzZQorICAgIHN0YXQucnhfYnJlYWsgPSAwVTsKKyNlbmRpZgorICAgIHN0YXQucnhfZnJhbWluZ19lcnJvciA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9GcmFtaW5nRXJyb3JGbGFnKSkpOworICAgIHN0YXQucnhfcGFyaXR5X2Vycm9yID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX1Bhcml0eUVycm9yRmxhZykpKTsKKworICAgIHJldHVybiBzdGF0OworfQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCit2b2lkIEtTREtfTFBVQVJUX0VkbWFDYWxsYmFjayhMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB1aW50MzJfdCBldmVudCA9IDBVOworCisgICAgaWYgKGtTdGF0dXNfTFBVQVJUX1R4SWRsZSA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9VU0FSVF9FVkVOVF9TRU5EX0NPTVBMRVRFOworICAgIH0KKyAgICBpZiAoa1N0YXR1c19MUFVBUlRfUnhJZGxlID09IHN0YXR1cykKKyAgICB7CisgICAgICAgIGV2ZW50ID0gQVJNX1VTQVJUX0VWRU5UX1JFQ0VJVkVfQ09NUExFVEU7CisgICAgfQorCisgICAgLyogVXNlciBkYXRhIGlzIGFjdHVhbGx5IENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICBpZiAoKDBVICE9IGV2ZW50KSAmJiAodXNlckRhdGEpKQorICAgIHsKKyAgICAgICAgKChBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0VkbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50LCBjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGlmIChscHVhcnQtPmlzSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICAvKiBEcml2ZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZCAqLworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKyAgICB9CisKKyAgICBscHVhcnQtPmNiX2V2ZW50ID0gY2JfZXZlbnQ7CisgICAgbHB1YXJ0LT5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRWRtYVVuaW5pdGlhbGl6ZShjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGxwdWFydC0+aXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUsIGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgbHB1YXJ0X2NvbmZpZ190IGNvbmZpZzsKKyAgICBjbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZV90ICpkbWFSZXNvdXJjZTsKKworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgICAgICBpZiAobHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0RlaW5pdChscHVhcnQtPnJlc291cmNlLT5iYXNlKTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRGlzYWJsZUNoYW5uZWwobHB1YXJ0LT5kbWFSZXNvdXJjZS0+cnhEbWFtdXhCYXNlLCBscHVhcnQtPmRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBETUFNVVhfRGlzYWJsZUNoYW5uZWwobHB1YXJ0LT5kbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBscHVhcnQtPmRtYVJlc291cmNlLT50eEVkbWFDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzUG93ZXJPbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNDb25maWd1cmVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfTE9XOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICAvKiBNdXN0IGJlIGluaXRpYWxpemVkIGZpcnN0LiAqLworICAgICAgICAgICAgaWYgKCFscHVhcnQtPmlzSW5pdGlhbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmNvbmZpZyk7CisgICAgICAgICAgICAgICAgY29uZmlnLmVuYWJsZVR4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb25maWcuZW5hYmxlUnggPSB0cnVlOworCisgICAgICAgICAgICAgICAgZG1hUmVzb3VyY2UgPSBscHVhcnQtPmRtYVJlc291cmNlOworCisgICAgICAgICAgICAgICAgLyogU2V0IHVwIEVETUEgc2V0dGluZy4gKi8KKyAgICAgICAgICAgICAgICBFRE1BX0NyZWF0ZUhhbmRsZShscHVhcnQtPnJ4SGFuZGxlLCBkbWFSZXNvdXJjZS0+cnhFZG1hQmFzZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwpOworICAgICAgICAgICAgICAgIERNQU1VWF9TZXRTb3VyY2UoZG1hUmVzb3VyY2UtPnJ4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnJ4RWRtYUNoYW5uZWwsIGRtYVJlc291cmNlLT5yeERtYVJlcXVlc3QpOworICAgICAgICAgICAgICAgIERNQU1VWF9FbmFibGVDaGFubmVsKGRtYVJlc291cmNlLT5yeERtYW11eEJhc2UsIGRtYVJlc291cmNlLT5yeEVkbWFDaGFubmVsKTsKKworICAgICAgICAgICAgICAgIEVETUFfQ3JlYXRlSGFuZGxlKGxwdWFydC0+dHhIYW5kbGUsIGRtYVJlc291cmNlLT50eEVkbWFCYXNlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX1NldFNvdXJjZShkbWFSZXNvdXJjZS0+dHhEbWFtdXhCYXNlLCBkbWFSZXNvdXJjZS0+dHhFZG1hQ2hhbm5lbCwgZG1hUmVzb3VyY2UtPnR4RG1hUmVxdWVzdCk7CisgICAgICAgICAgICAgICAgRE1BTVVYX0VuYWJsZUNoYW5uZWwoZG1hUmVzb3VyY2UtPnR4RG1hbXV4QmFzZSwgZG1hUmVzb3VyY2UtPnR4RWRtYUNoYW5uZWwpOworCisgICAgICAgICAgICAgICAgLyogU2V0dXAgdGhlIExQVUFSVC4gKi8KKyAgICAgICAgICAgICAgICBMUFVBUlRfSW5pdChscHVhcnQtPnJlc291cmNlLT5iYXNlLCAmY29uZmlnLCBscHVhcnQtPnJlc291cmNlLT5HZXRGcmVxKCkpOworICAgICAgICAgICAgICAgIExQVUFSVF9UcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsIEtTREtfTFBVQVJUX0VkbWFDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopbHB1YXJ0LT5jYl9ldmVudCwgbHB1YXJ0LT50eEhhbmRsZSwgbHB1YXJ0LT5yeEhhbmRsZSk7CisKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzUG93ZXJPbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSwgY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIuZGF0YSA9ICh1aW50OF90ICopZGF0YTsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgc3RhdHVzID0gTFBVQVJUX1NlbmRFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmeGZlcik7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0xQVUFSVF9SeEJ1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGludDMyX3QgcmV0OworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBscHVhcnRfdHJhbnNmZXJfdCB4ZmVyOworCisgICAgeGZlci5kYXRhID0gZGF0YTsKKyAgICB4ZmVyLmRhdGFTaXplID0gbnVtOworCisgICAgc3RhdHVzID0gTFBVQVJUX1JlY2VpdmVFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmeGZlcik7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICB7CisgICAgICAgIGNhc2Uga1N0YXR1c19TdWNjZXNzOgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9PSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9QQVJBTUVURVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0xQVUFSVF9UeEJ1c3k6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SX0JVU1k7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgLyogT25seSBpbiBzeW5jaHJvbm91cyBtb2RlICovCisgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlRfRWRtYUdldFR4Q291bnQoY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICB1aW50MzJfdCBjbnQ7CisKKyAgICBpZiAoa1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9PSBMUFVBUlRfVHJhbnNmZXJHZXRTZW5kQ291bnRFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmY250KSkKKyAgICB7CisgICAgICAgIGNudCA9IGxwdWFydC0+aGFuZGxlLT50eERhdGFTaXplQWxsOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlRfRWRtYUdldFJ4Q291bnQoY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICB1aW50MzJfdCBjbnQ7CisKKyAgICBpZiAoa1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9PQorICAgICAgICBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnRFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlLCAmY250KSkKKyAgICB7CisgICAgICAgIGNudCA9IGxwdWFydC0+aGFuZGxlLT5yeERhdGFTaXplQWxsOworICAgIH0KKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcsIGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgLyogTXVzdCBiZSBwb3dlciBvbi4gKi8KKyAgICBpZiAoIWxwdWFydC0+aXNQb3dlck9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgfQorCisgICAgLyogRG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmZWF0dXJlcy4gKi8KKyAgICBpZiAoY29udHJvbCAmIChBUk1fVVNBUlRfRkxPV19DT05UUk9MX01zayB8IEFSTV9VU0FSVF9DUE9MX01zayB8IEFSTV9VU0FSVF9DUEhBX01zaykpCisgICAgeworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvbnRyb2wgJiBBUk1fVVNBUlRfQ09OVFJPTF9Nc2spCisgICAgeworICAgICAgICAvKiBBYm9ydCBTZW5kICovCisgICAgICAgIGNhc2UgQVJNX1VTQVJUX0FCT1JUX1NFTkQ6CisgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFNlbmRFRE1BKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIEFib3J0IHJlY2VpdmUgKi8KKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfQUJPUlRfUkVDRUlWRToKKyAgICAgICAgICAgIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZUVETUEobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBMUFVBUlRfQ29tbW9uQ29udHJvbChjb250cm9sLCBhcmcsIGxwdWFydC0+cmVzb3VyY2UsICZscHVhcnQtPmlzQ29uZmlndXJlZCk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVF9FZG1hR2V0U3RhdHVzKGNtc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgQVJNX1VTQVJUX1NUQVRVUyBzdGF0OworICAgIHVpbnQzMl90IGtzZGtfbHB1YXJ0X3N0YXR1cyA9IExQVUFSVF9HZXRTdGF0dXNGbGFncyhscHVhcnQtPnJlc291cmNlLT5iYXNlKTsKKworICAgIHN0YXQudHhfYnVzeSA9ICgoa0xQVUFSVF9UeEJ1c3kgPT0gbHB1YXJ0LT5oYW5kbGUtPnR4U3RhdGUpID8gKDFVKSA6ICgwVSkpOworICAgIHN0YXQucnhfYnVzeSA9ICgoa0xQVUFSVF9SeEJ1c3kgPT0gbHB1YXJ0LT5oYW5kbGUtPnJ4U3RhdGUpID8gKDFVKSA6ICgwVSkpOworCisgICAgc3RhdC50eF91bmRlcmZsb3cgPSAwVTsKKyAgICBzdGF0LnJ4X292ZXJmbG93ID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX1J4T3ZlcnJ1bkZsYWcpKSk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVAorICAgIHN0YXQucnhfYnJlYWsgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfTGluQnJlYWtGbGFnKSkpOworI2Vsc2UKKyAgICBzdGF0LnJ4X2JyZWFrID0gMFU7CisjZW5kaWYKKyAgICBzdGF0LnJ4X2ZyYW1pbmdfZXJyb3IgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfRnJhbWluZ0Vycm9yRmxhZykpKTsKKyAgICBzdGF0LnJ4X3Bhcml0eV9lcnJvciA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9QYXJpdHlFcnJvckZsYWcpKSk7CisKKyAgICByZXR1cm4gc3RhdDsKK30KKyNlbmRpZgorCisjZW5kaWYKKworI2lmICgoKFJURV9VU0FSVDAgJiYgIVJURV9VU0FSVDBfRE1BX0VOKSAmJiBkZWZpbmVkKExQVUFSVDApKSB8fCBcCisgICAgICgoUlRFX1VTQVJUMSAmJiAhUlRFX1VTQVJUMV9ETUFfRU4pICYmIGRlZmluZWQoTFBVQVJUMSkpIHx8IFwKKyAgICAgKChSVEVfVVNBUlQyICYmICFSVEVfVVNBUlQyX0RNQV9FTikgJiYgZGVmaW5lZChMUFVBUlQyKSkgfHwgXAorICAgICAoKFJURV9VU0FSVDMgJiYgIVJURV9VU0FSVDNfRE1BX0VOKSAmJiBkZWZpbmVkKExQVUFSVDMpKSB8fCBcCisgICAgICgoUlRFX1VTQVJUNCAmJiAhUlRFX1VTQVJUNF9ETUFfRU4pICYmIGRlZmluZWQoTFBVQVJUNCkpIHx8IFwKKyAgICAgKChSVEVfVVNBUlQ1ICYmICFSVEVfVVNBUlQ1X0RNQV9FTikgJiYgZGVmaW5lZChMUFVBUlQ1KSkpCisKK3ZvaWQgS1NES19MUFVBUlRfTm9uQmxvY2tpbmdDYWxsYmFjayhMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsIHN0YXR1c190IHN0YXR1cywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgdWludDMyX3QgZXZlbnQgPSAwVTsKKworICAgIGlmIChrU3RhdHVzX0xQVUFSVF9UeElkbGUgPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fVVNBUlRfRVZFTlRfU0VORF9DT01QTEVURTsKKyAgICB9CisgICAgaWYgKGtTdGF0dXNfTFBVQVJUX1J4SWRsZSA9PSBzdGF0dXMpCisgICAgeworICAgICAgICBldmVudCA9IEFSTV9VU0FSVF9FVkVOVF9SRUNFSVZFX0NPTVBMRVRFOworICAgIH0KKyAgICBpZiAoa1N0YXR1c19MUFVBUlRfUnhIYXJkd2FyZU92ZXJydW4gPT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgZXZlbnQgPSBBUk1fVVNBUlRfRVZFTlRfUlhfT1ZFUkZMT1c7CisgICAgfQorCisgICAgLyogVXNlciBkYXRhIGlzIGFjdHVhbGx5IENNU0lTIGRyaXZlciBjYWxsYmFjay4gKi8KKyAgICBpZiAoKDBVICE9IGV2ZW50KSAmJiAodXNlckRhdGEpKQorICAgIHsKKyAgICAgICAgKChBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCl1c2VyRGF0YSkoZXZlbnQpOworICAgIH0KK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGlmIChscHVhcnQtPmlzSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICAvKiBEcml2ZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZCAqLworICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKyAgICB9CisKKyAgICBscHVhcnQtPmNiX2V2ZW50ID0gY2JfZXZlbnQ7CisgICAgbHB1YXJ0LT5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUoY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIGxwdWFydC0+aXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlLCBjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgbHB1YXJ0X2NvbmZpZ190IGNvbmZpZzsKKworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIEFSTV9QT1dFUl9PRkY6CisgICAgICAgICAgICBpZiAobHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0RlaW5pdChscHVhcnQtPnJlc291cmNlLT5iYXNlKTsKKyAgICAgICAgICAgICAgICBscHVhcnQtPmlzUG93ZXJPbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNDb25maWd1cmVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBUk1fUE9XRVJfTE9XOgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgICAgIGNhc2UgQVJNX1BPV0VSX0ZVTEw6CisgICAgICAgICAgICAvKiBNdXN0IGJlIGluaXRpYWxpemVkIGZpcnN0LiAqLworICAgICAgICAgICAgaWYgKCFscHVhcnQtPmlzSW5pdGlhbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbHB1YXJ0LT5pc1Bvd2VyT24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0dldERlZmF1bHRDb25maWcoJmNvbmZpZyk7CisgICAgICAgICAgICAgICAgY29uZmlnLmVuYWJsZVR4ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb25maWcuZW5hYmxlUnggPSB0cnVlOworCisgICAgICAgICAgICAgICAgTFBVQVJUX0luaXQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgJmNvbmZpZywgbHB1YXJ0LT5yZXNvdXJjZS0+R2V0RnJlcSgpKTsKKyAgICAgICAgICAgICAgICBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGUobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsIEtTREtfTFBVQVJUX05vbkJsb2NraW5nQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopbHB1YXJ0LT5jYl9ldmVudCk7CisgICAgICAgICAgICAgICAgbHB1YXJ0LT5pc1Bvd2VyT24gPSB0cnVlOworICAgICAgICAgICAgICAgIGxwdWFydC0+aXNDb25maWd1cmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVF9Ob25CbG9ja2luZ1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtLCBjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgaW50MzJfdCByZXQ7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIGxwdWFydF90cmFuc2Zlcl90IHhmZXI7CisKKyAgICB4ZmVyLmRhdGEgPSAodWludDhfdCAqKWRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIHN0YXR1cyA9IExQVUFSVF9UcmFuc2ZlclNlbmROb25CbG9ja2luZyhscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJnhmZXIpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19MUFVBUlRfUnhCdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0sIGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBpbnQzMl90IHJldDsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgeGZlcjsKKworICAgIHhmZXIuZGF0YSA9IGRhdGE7CisgICAgeGZlci5kYXRhU2l6ZSA9IG51bTsKKworICAgIHN0YXR1cyA9IExQVUFSVF9UcmFuc2ZlclJlY2VpdmVOb25CbG9ja2luZyhscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJnhmZXIsIE5VTEwpOworCisgICAgc3dpdGNoIChzdGF0dXMpCisgICAgeworICAgICAgICBjYXNlIGtTdGF0dXNfU3VjY2VzczoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfT0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDoKKyAgICAgICAgICAgIHJldCA9IEFSTV9EUklWRVJfRVJST1JfUEFSQU1FVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1N0YXR1c19MUFVBUlRfVHhCdXN5OgorICAgICAgICAgICAgcmV0ID0gQVJNX0RSSVZFUl9FUlJPUl9CVVNZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgPSBBUk1fRFJJVkVSX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIC8qIE9ubHkgaW4gc3luY2hyb25vdXMgbW9kZSAqLworICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUX05vbkJsb2NraW5nR2V0VHhDb3VudChjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90ICpscHVhcnQpCit7CisgICAgdWludDMyX3QgY250OworCisgICAgLyogSWYgVFggbm90IGluIHByb2dyZXNzLCB0aGVuIHRoZSBUWCBjb3VudCBpcyB0eERhdGFTaXplQWxsIHNhdmVkIGluIGhhbmRsZS4gKi8KKyAgICBpZiAoa1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9PSBMUFVBUlRfVHJhbnNmZXJHZXRTZW5kQ291bnQobHB1YXJ0LT5yZXNvdXJjZS0+YmFzZSwgbHB1YXJ0LT5oYW5kbGUsICZjbnQpKQorICAgIHsKKyAgICAgICAgY250ID0gbHB1YXJ0LT5oYW5kbGUtPnR4RGF0YVNpemVBbGw7CisgICAgfQorCisgICAgcmV0dXJuIGNudDsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVF9Ob25CbG9ja2luZ0dldFJ4Q291bnQoY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIHVpbnQzMl90IGNudDsKKworICAgIGlmIChrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzID09IExQVUFSVF9UcmFuc2ZlckdldFJlY2VpdmVDb3VudChscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSwgJmNudCkpCisgICAgeworICAgICAgICBjbnQgPSBscHVhcnQtPmhhbmRsZS0+cnhEYXRhU2l6ZUFsbDsKKyAgICB9CisKKyAgICByZXR1cm4gY250OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlRfTm9uQmxvY2tpbmdDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCAqbHB1YXJ0KQoreworICAgIC8qIE11c3QgYmUgcG93ZXIgb24uICovCisgICAgaWYgKCFscHVhcnQtPmlzUG93ZXJPbikKKyAgICB7CisgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX0VSUk9SOworICAgIH0KKworICAgIC8qIERvZXMgbm90IHN1cHBvcnQgdGhlc2UgZmVhdHVyZXMuICovCisgICAgaWYgKGNvbnRyb2wgJiAoQVJNX1VTQVJUX0ZMT1dfQ09OVFJPTF9Nc2sgfCBBUk1fVVNBUlRfQ1BPTF9Nc2sgfCBBUk1fVVNBUlRfQ1BIQV9Nc2spKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTV9EUklWRVJfRVJST1JfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgc3dpdGNoIChjb250cm9sICYgQVJNX1VTQVJUX0NPTlRST0xfTXNrKQorICAgIHsKKyAgICAgICAgLyogQWJvcnQgU2VuZCAqLworICAgICAgICBjYXNlIEFSTV9VU0FSVF9BQk9SVF9TRU5EOgorICAgICAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRTZW5kKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UsIGxwdWFydC0+aGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworCisgICAgICAgIC8qIEFib3J0IHJlY2VpdmUgKi8KKyAgICAgICAgY2FzZSBBUk1fVVNBUlRfQUJPUlRfUkVDRUlWRToKKyAgICAgICAgICAgIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZShscHVhcnQtPnJlc291cmNlLT5iYXNlLCBscHVhcnQtPmhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIExQVUFSVF9Db21tb25Db250cm9sKGNvbnRyb2wsIGFyZywgbHB1YXJ0LT5yZXNvdXJjZSwgJmxwdWFydC0+aXNDb25maWd1cmVkKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUX05vbkJsb2NraW5nR2V0U3RhdHVzKGNtc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgKmxwdWFydCkKK3sKKyAgICBBUk1fVVNBUlRfU1RBVFVTIHN0YXQ7CisgICAgdWludDMyX3Qga3Nka19scHVhcnRfc3RhdHVzID0gTFBVQVJUX0dldFN0YXR1c0ZsYWdzKGxwdWFydC0+cmVzb3VyY2UtPmJhc2UpOworCisgICAgc3RhdC50eF9idXN5ID0gKChrTFBVQVJUX1R4QnVzeSA9PSBscHVhcnQtPmhhbmRsZS0+dHhTdGF0ZSkgPyAoMVUpIDogKDBVKSk7CisgICAgc3RhdC5yeF9idXN5ID0gKChrTFBVQVJUX1J4QnVzeSA9PSBscHVhcnQtPmhhbmRsZS0+cnhTdGF0ZSkgPyAoMVUpIDogKDBVKSk7CisKKyAgICBzdGF0LnR4X3VuZGVyZmxvdyA9IDBVOworICAgIHN0YXQucnhfb3ZlcmZsb3cgPSAoISghKGtzZGtfbHB1YXJ0X3N0YXR1cyAmIGtMUFVBUlRfUnhPdmVycnVuRmxhZykpKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAgc3RhdC5yeF9icmVhayA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9MaW5CcmVha0ZsYWcpKSk7CisjZWxzZQorICAgIHN0YXQucnhfYnJlYWsgPSAwVTsKKyNlbmRpZgorICAgIHN0YXQucnhfZnJhbWluZ19lcnJvciA9ICghKCEoa3Nka19scHVhcnRfc3RhdHVzICYga0xQVUFSVF9GcmFtaW5nRXJyb3JGbGFnKSkpOworICAgIHN0YXQucnhfcGFyaXR5X2Vycm9yID0gKCEoIShrc2RrX2xwdWFydF9zdGF0dXMgJiBrTFBVQVJUX1Bhcml0eUVycm9yRmxhZykpKTsKKworICAgIHJldHVybiBzdGF0OworfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFBVQVJUMCkgJiYgUlRFX1VTQVJUMAorCitleHRlcm4gdWludDMyX3QgTFBVQVJUMF9HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUMF9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDBfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfbHB1YXJ0X3Jlc291cmNlX3QgTFBVQVJUMF9SZXNvdXJjZSA9IHtMUFVBUlQwLCBMUFVBUlQwX0dldEZyZXF9OworCisjaWYgUlRFX1VTQVJUMF9ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9kbWFfcmVzb3VyY2VfdCBMUFVBUlQwX0RtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDBfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQwX0RNQV9UWF9DSCwgUlRFX1VTQVJUMF9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDBfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUMF9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDBfRE1BX1JYX0NILCBSVEVfVVNBUlQwX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMF9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZG1hX2hhbmRsZV90IExQVUFSVDBfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDBfRG1hUnhIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUMF9EbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQwX2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQwX0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQwX1Jlc291cmNlLCAmTFBVQVJUMF9EbWFSZXNvdXJjZSwgJkxQVUFSVDBfRG1hSGFuZGxlLCAmTFBVQVJUMF9EbWFSeEhhbmRsZSwgJkxQVUFSVDBfRG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0RtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMF9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDBfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0RtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDBfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hVW5pbml0aWFsaXplKCZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDBfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0RtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9EbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDBfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMF9EbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRUeENvdW50KCZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDBfRG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0UnhDb3VudCgmTFBVQVJUMF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDBfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQwX0RtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0U3RhdHVzKCZMUFVBUlQwX0RtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9lZG1hX3Jlc291cmNlX3QgTFBVQVJUMF9FZG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUMF9ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDBfRE1BX1RYX0NILCBSVEVfVVNBUlQwX0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMF9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQwX0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUMF9ETUFfUlhfQ0gsIFJURV9VU0FSVDBfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQwX0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9lZG1hX2hhbmRsZV90IExQVUFSVDBfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUMF9FZG1hUnhIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDBfRWRtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDBfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMF9SZXNvdXJjZSwgJkxQVUFSVDBfRWRtYVJlc291cmNlLCAmTFBVQVJUMF9FZG1hSGFuZGxlLCAmTFBVQVJUMF9FZG1hUnhIYW5kbGUsICZMUFVBUlQwX0VkbWFUeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRWRtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMF9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDBfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQwX0VkbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0VHhDb3VudCgmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMF9FZG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFJ4Q291bnQoJkxQVUFSVDBfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQwX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDBfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFN0YXR1cygmTFBVQVJUMF9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworbHB1YXJ0X2hhbmRsZV90IExQVUFSVDBfSGFuZGxlOworCisjaWYgZGVmaW5lZChVU0FSVDBfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUMF9SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQwX3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0FSVDFfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUMV9SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQxX3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDBfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQwX1Jlc291cmNlLCAmTFBVQVJUMF9IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX05vbkJsb2NraW5nSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQwX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0luaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX05vbkJsb2NraW5nVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUMF9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSgmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKworI2lmIGRlZmluZWQoVVNBUlQwX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDBfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorICAgIGlmICgoc3RhdGUgPT0gQVJNX1BPV0VSX0ZVTEwpICYmIChMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgPT0gTlVMTCkpCisgICAgeworICAgICAgICBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZSwgbHB1YXJ0MF9yeFJpbmdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9SWF9CVUZGRVJfTEVOKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfTm9uQmxvY2tpbmdTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nU2VuZChkYXRhLCBudW0sICZMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQwX05vbkJsb2NraW5nUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1JlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMF9Ob25CbG9ja2luZ1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1RyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMF9Ob25CbG9ja2luZ0dldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0VHhDb3VudCgmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDBfTm9uQmxvY2tpbmdHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFJ4Q291bnQoJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDBfTm9uQmxvY2tpbmdDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICBpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ0NvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKyAgICBpZiAoQVJNX0RSSVZFUl9PSyAhPSByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIGlmIHJpbmcgYnVmZmVyIGlzIHVzZWQgKi8KKyAgICBpZiAoTFBVQVJUMF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhMUFVBUlQwX05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUMF9Ob25CbG9ja2luZ0dldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRTdGF0dXMoJkxQVUFSVDBfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlQgPT0gMSkKKyNpZiAoRlNMX0ZFQVRVUkVfU09DX1VBUlRfQ09VTlQgPT0gMykKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMyA9IHsKKyNlbGlmKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDQpCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDQgPSB7CisjZWxpZihGU0xfRkVBVFVSRV9TT0NfVUFSVF9DT1VOVCA9PSA1KQorQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ1ID0geworI2Vsc2UKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMCA9IHsKKyNlbmRpZgorI2Vsc2UKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMCA9IHsKKyNlbmRpZgorCisgICAgTFBVQVJUeF9HZXRWZXJzaW9uLCAgICAgIExQVUFSVHhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9VU0FSVDBfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgIExQVUFSVDBfRWRtYUluaXRpYWxpemUsICBMUFVBUlQwX0VkbWFVbmluaXRpYWxpemUsIExQVUFSVDBfRWRtYVBvd2VyQ29udHJvbCwgTFBVQVJUMF9FZG1hU2VuZCwKKyAgICBMUFVBUlQwX0VkbWFSZWNlaXZlLCAgICAgTFBVQVJUMF9FZG1hVHJhbnNmZXIsICAgICBMUFVBUlQwX0VkbWFHZXRUeENvdW50LCAgIExQVUFSVDBfRWRtYUdldFJ4Q291bnQsCisgICAgTFBVQVJUMF9FZG1hQ29udHJvbCwgICAgIExQVUFSVDBfRWRtYUdldFN0YXR1cywKKyNlbHNlCisgICAgTFBVQVJUMF9EbWFJbml0aWFsaXplLCAgIExQVUFSVDBfRG1hVW5pbml0aWFsaXplLCBMUFVBUlQwX0RtYVBvd2VyQ29udHJvbCwgTFBVQVJUMF9EbWFTZW5kLCAgICBMUFVBUlQwX0RtYVJlY2VpdmUsCisgICAgTFBVQVJUMF9EbWFUcmFuc2ZlciwgICAgIExQVUFSVDBfRG1hR2V0VHhDb3VudCwgICBMUFVBUlQwX0RtYUdldFJ4Q291bnQsICAgTFBVQVJUMF9EbWFDb250cm9sLCBMUFVBUlQwX0RtYUdldFN0YXR1cywKKyNlbmRpZgorI2Vsc2UKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nSW5pdGlhbGl6ZSwKKyAgICBMUFVBUlQwX05vbkJsb2NraW5nVW5pbml0aWFsaXplLAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2wsCisgICAgTFBVQVJUMF9Ob25CbG9ja2luZ1NlbmQsCisgICAgTFBVQVJUMF9Ob25CbG9ja2luZ1JlY2VpdmUsCisgICAgTFBVQVJUMF9Ob25CbG9ja2luZ1RyYW5zZmVyLAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdHZXRUeENvdW50LAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdHZXRSeENvdW50LAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdDb250cm9sLAorICAgIExQVUFSVDBfTm9uQmxvY2tpbmdHZXRTdGF0dXMsCisjZW5kaWYKKyAgICBMUFVBUlR4X1NldE1vZGVtQ29udHJvbCwgTFBVQVJUeF9HZXRNb2RlbVN0YXR1c307CisKKyNlbmRpZiAvKiBMUFVBUlQwICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDEpICYmIFJURV9VU0FSVDEKKworZXh0ZXJuIHVpbnQzMl90IExQVUFSVDFfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDFfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQxX0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2xwdWFydF9yZXNvdXJjZV90IExQVUFSVDFfUmVzb3VyY2UgPSB7TFBVQVJUMSwgTFBVQVJUMV9HZXRGcmVxfTsKKworI2lmIFJURV9VU0FSVDFfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgTFBVQVJUMV9EbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQxX0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUMV9ETUFfVFhfQ0gsIFJURV9VU0FSVDFfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQxX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDFfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQxX0RNQV9SWF9DSCwgUlRFX1VTQVJUMV9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDFfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2RtYV9oYW5kbGVfdCBMUFVBUlQxX0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQxX0RtYVJ4SGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDFfRG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0MV9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDFfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMV9SZXNvdXJjZSwgJkxQVUFSVDFfRG1hUmVzb3VyY2UsICZMUFVBUlQxX0RtYUhhbmRsZSwgJkxQVUFSVDFfRG1hUnhIYW5kbGUsICZMUFVBUlQxX0RtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9EbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDFfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQxX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQxX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDFfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0RtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQxX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9EbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQxX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDFfRG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0VHhDb3VudCgmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQxX0RtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFJ4Q291bnQoJkxQVUFSVDFfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQxX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUMV9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFN0YXR1cygmTFBVQVJUMV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZV90IExQVUFSVDFfRWRtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDFfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQxX0RNQV9UWF9DSCwgUlRFX1VTQVJUMV9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDFfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUMV9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDFfRE1BX1JYX0NILCBSVEVfVVNBUlQxX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMV9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZWRtYV9oYW5kbGVfdCBMUFVBUlQxX0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDFfRWRtYVJ4SGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQxX0VkbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQxX2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDFfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDFfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDFfUmVzb3VyY2UsICZMUFVBUlQxX0VkbWFSZXNvdXJjZSwgJkxQVUFSVDFfRWRtYUhhbmRsZSwgJkxQVUFSVDFfRWRtYVJ4SGFuZGxlLCAmTFBVQVJUMV9FZG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0VkbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDFfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQxX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFVbmluaXRpYWxpemUoJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRWRtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMV9FZG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFR4Q291bnQoJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDFfRWRtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRSeENvdW50KCZMUFVBUlQxX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUMV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQxX0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRTdGF0dXMoJkxQVUFSVDFfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2xwdWFydF9oYW5kbGVfdCBMUFVBUlQxX0hhbmRsZTsKKworI2lmIGRlZmluZWQoVVNBUlQxX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDFfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0MV9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNBUlQyX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDJfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0Ml9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQxX25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMV9SZXNvdXJjZSwgJkxQVUFSVDFfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9Ob25CbG9ja2luZ0luaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMV9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDFfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUoJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisKKyNpZiBkZWZpbmVkKFVTQVJUMV9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQxX1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKKyAgICBpZiAoKHN0YXRlID09IEFSTV9QT1dFUl9GVUxMKSAmJiAoTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyU3RhcnRSaW5nQnVmZmVyKExQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUsIGxwdWFydDFfcnhSaW5nQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfUlhfQlVGRkVSX0xFTik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX05vbkJsb2NraW5nU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1NlbmQoZGF0YSwgbnVtLCAmTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMV9Ob25CbG9ja2luZ1JlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDFfTm9uQmxvY2tpbmdUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDFfTm9uQmxvY2tpbmdHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFR4Q291bnQoJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQxX05vbkJsb2NraW5nR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRSeENvdW50KCZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQxX05vbkJsb2NraW5nQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgaW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisgICAgaWYgKEFSTV9EUklWRVJfT0sgIT0gcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIHJlY2VpdmUgaW50ZXJydXB0cyBpZiByaW5nIGJ1ZmZlciBpcyB1c2VkICovCisgICAgaWYgKExQVUFSVDFfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoTFBVQVJUMV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4T3ZlcnJ1bkludGVycnVwdEVuYWJsZSk7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDFfTm9uQmxvY2tpbmdHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0U3RhdHVzKCZMUFVBUlQxX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQxID0ge0xQVUFSVHhfR2V0VmVyc2lvbiwgICAgICBMUFVBUlR4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfVVNBUlQxX0RNQV9FTgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX0VkbWFJbml0aWFsaXplLCAgTFBVQVJUMV9FZG1hVW5pbml0aWFsaXplLCBMUFVBUlQxX0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9FZG1hU2VuZCwgICAgICAgIExQVUFSVDFfRWRtYVJlY2VpdmUsICAgICAgTFBVQVJUMV9FZG1hVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9FZG1hR2V0VHhDb3VudCwgIExQVUFSVDFfRWRtYUdldFJ4Q291bnQsICAgTFBVQVJUMV9FZG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX0VkbWFHZXRTdGF0dXMsCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfRG1hSW5pdGlhbGl6ZSwgICBMUFVBUlQxX0RtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUMV9EbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9EbWFTZW5kLCAgICAgICAgIExQVUFSVDFfRG1hUmVjZWl2ZSwgICAgICBMUFVBUlQxX0RtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfRG1hR2V0VHhDb3VudCwgICBMUFVBUlQxX0RtYUdldFJ4Q291bnQsICAgTFBVQVJUMV9EbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfRG1hR2V0U3RhdHVzLAorI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdJbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDFfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX05vbkJsb2NraW5nU2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX05vbkJsb2NraW5nUmVjZWl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQxX05vbkJsb2NraW5nVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ0dldFR4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ0dldFJ4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ0NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMV9Ob25CbG9ja2luZ0dldFN0YXR1cywKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVHhfU2V0TW9kZW1Db250cm9sLCBMUFVBUlR4X0dldE1vZGVtU3RhdHVzfTsKKworI2VuZGlmIC8qIExQVUFSVDEgKi8KKworI2lmIGRlZmluZWQoTFBVQVJUMikgJiYgUlRFX1VTQVJUMgorCitleHRlcm4gdWludDMyX3QgTFBVQVJUMl9HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUMl9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDJfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfbHB1YXJ0X3Jlc291cmNlX3QgTFBVQVJUMl9SZXNvdXJjZSA9IHtMUFVBUlQyLCBMUFVBUlQyX0dldEZyZXF9OworCisjaWYgUlRFX1VTQVJUMl9ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9kbWFfcmVzb3VyY2VfdCBMUFVBUlQyX0RtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDJfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQyX0RNQV9UWF9DSCwgUlRFX1VTQVJUMl9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDJfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUMl9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDJfRE1BX1JYX0NILCBSVEVfVVNBUlQyX0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMl9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZG1hX2hhbmRsZV90IExQVUFSVDJfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDJfRG1hUnhIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUMl9EbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQyX2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQyX0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQyX1Jlc291cmNlLCAmTFBVQVJUMl9EbWFSZXNvdXJjZSwgJkxQVUFSVDJfRG1hSGFuZGxlLCAmTFBVQVJUMl9EbWFSeEhhbmRsZSwgJkxQVUFSVDJfRG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0RtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMl9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDJfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0RtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDJfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hVW5pbml0aWFsaXplKCZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDJfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0RtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9EbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDJfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMl9EbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRUeENvdW50KCZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDJfRG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0UnhDb3VudCgmTFBVQVJUMl9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDJfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQyX0RtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0U3RhdHVzKCZMUFVBUlQyX0RtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9lZG1hX3Jlc291cmNlX3QgTFBVQVJUMl9FZG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUMl9ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDJfRE1BX1RYX0NILCBSVEVfVVNBUlQyX0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUMl9ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQyX0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUMl9ETUFfUlhfQ0gsIFJURV9VU0FSVDJfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQyX0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9lZG1hX2hhbmRsZV90IExQVUFSVDJfRWRtYUhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUMl9FZG1hUnhIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDJfRWRtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDJfZWRtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2VkbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUMl9SZXNvdXJjZSwgJkxQVUFSVDJfRWRtYVJlc291cmNlLCAmTFBVQVJUMl9FZG1hSGFuZGxlLCAmTFBVQVJUMl9FZG1hUnhIYW5kbGUsICZMUFVBUlQyX0VkbWFUeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRWRtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUMl9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRWRtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDJfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRWRtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0VkbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9FZG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfRWRtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX0VkbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQyX0VkbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0VHhDb3VudCgmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMl9FZG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFJ4Q291bnQoJkxQVUFSVDJfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9FZG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQyX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDJfRWRtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFN0YXR1cygmTFBVQVJUMl9FZG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2Vsc2UKKworbHB1YXJ0X2hhbmRsZV90IExQVUFSVDJfSGFuZGxlOworCisjaWYgZGVmaW5lZChVU0FSVDJfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUMl9SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQyX3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0FSVDNfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUM19SWF9CVUZGRVJfRU5BQkxFID09IDEpCitzdGF0aWMgdWludDhfdCBscHVhcnQzX3J4UmluZ0J1ZmZlcltVU0FSVF9SWF9CVUZGRVJfTEVOXTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDJfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfbm9uX2Jsb2NraW5nX2RyaXZlcl9zdGF0ZV90IExQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQyX1Jlc291cmNlLCAmTFBVQVJUMl9IYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX05vbkJsb2NraW5nSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQyX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0luaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX05vbkJsb2NraW5nVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUMl9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSgmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgdWludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKworI2lmIGRlZmluZWQoVVNBUlQyX1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDJfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorICAgIGlmICgoc3RhdGUgPT0gQVJNX1BPV0VSX0ZVTEwpICYmIChMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgPT0gTlVMTCkpCisgICAgeworICAgICAgICBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZSwgbHB1YXJ0Ml9yeFJpbmdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9SWF9CVUZGRVJfTEVOKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfTm9uQmxvY2tpbmdTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nU2VuZChkYXRhLCBudW0sICZMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQyX05vbkJsb2NraW5nUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1JlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUMl9Ob25CbG9ja2luZ1RyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1RyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUMl9Ob25CbG9ja2luZ0dldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0VHhDb3VudCgmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDJfTm9uQmxvY2tpbmdHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFJ4Q291bnQoJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDJfTm9uQmxvY2tpbmdDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICBpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ0NvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKKyAgICBpZiAoQVJNX0RSSVZFUl9PSyAhPSByZXN1bHQpCisgICAgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIEVuYWJsZSB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIGlmIHJpbmcgYnVmZmVyIGlzIHVzZWQgKi8KKyAgICBpZiAoTFBVQVJUMl9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyICE9IE5VTEwpCisgICAgeworICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhMUFVBUlQyX05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhPdmVycnVuSW50ZXJydXB0RW5hYmxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gQVJNX0RSSVZFUl9PSzsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUMl9Ob25CbG9ja2luZ0dldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRTdGF0dXMoJkxQVUFSVDJfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCitBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDIgPSB7TFBVQVJUeF9HZXRWZXJzaW9uLCAgICAgIExQVUFSVHhfR2V0Q2FwYWJpbGl0aWVzLAorI2lmIFJURV9VU0FSVDJfRE1BX0VOCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfRWRtYUluaXRpYWxpemUsICBMUFVBUlQyX0VkbWFVbmluaXRpYWxpemUsIExQVUFSVDJfRWRtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX0VkbWFTZW5kLCAgICAgICAgTFBVQVJUMl9FZG1hUmVjZWl2ZSwgICAgICBMUFVBUlQyX0VkbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX0VkbWFHZXRUeENvdW50LCAgTFBVQVJUMl9FZG1hR2V0UnhDb3VudCwgICBMUFVBUlQyX0VkbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfRWRtYUdldFN0YXR1cywKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9EbWFJbml0aWFsaXplLCAgIExQVUFSVDJfRG1hVW5pbml0aWFsaXplLCBMUFVBUlQyX0RtYVBvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX0RtYVNlbmQsICAgICAgICAgTFBVQVJUMl9EbWFSZWNlaXZlLCAgICAgIExQVUFSVDJfRG1hVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9EbWFHZXRUeENvdW50LCAgIExQVUFSVDJfRG1hR2V0UnhDb3VudCwgICBMUFVBUlQyX0RtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9EbWFHZXRTdGF0dXMsCisjZW5kaWYKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ0luaXRpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUMl9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfTm9uQmxvY2tpbmdTZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfTm9uQmxvY2tpbmdSZWNlaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDJfTm9uQmxvY2tpbmdUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nR2V0VHhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nR2V0UnhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQyX05vbkJsb2NraW5nR2V0U3RhdHVzLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUeF9TZXRNb2RlbUNvbnRyb2wsIExQVUFSVHhfR2V0TW9kZW1TdGF0dXN9OworCisjZW5kaWYgLyogTFBVQVJUMiAqLworCisjaWYgZGVmaW5lZChMUFVBUlQzKSAmJiBSVEVfVVNBUlQzCisKK2V4dGVybiB1aW50MzJfdCBMUFVBUlQzX0dldEZyZXEodm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQzX0luaXRQaW5zKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUM19EZWluaXRQaW5zKHZvaWQpOworCitjbXNpc19scHVhcnRfcmVzb3VyY2VfdCBMUFVBUlQzX1Jlc291cmNlID0ge0xQVUFSVDMsIExQVUFSVDNfR2V0RnJlcX07CisKKyNpZiBSVEVfVVNBUlQzX0RNQV9FTgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0RNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2RtYV9yZXNvdXJjZV90IExQVUFSVDNfRG1hUmVzb3VyY2UgPSB7CisgICAgUlRFX1VTQVJUM19ETUFfVFhfRE1BX0JBU0UsIFJURV9VU0FSVDNfRE1BX1RYX0NILCBSVEVfVVNBUlQzX0RNQV9UWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUM19ETUFfVFhfUEVSSV9TRUwsCisKKyAgICBSVEVfVVNBUlQzX0RNQV9SWF9ETUFfQkFTRSwgUlRFX1VTQVJUM19ETUFfUlhfQ0gsIFJURV9VU0FSVDNfRE1BX1JYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQzX0RNQV9SWF9QRVJJX1NFTCwKK307CisKK2xwdWFydF9kbWFfaGFuZGxlX3QgTFBVQVJUM19EbWFIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUM19EbWFSeEhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQzX0RtYVR4SGFuZGxlOworCisjaWYgZGVmaW5lZChfX0NDX0FSTSkKK0FSTUNDX1NFQ1RJT04oImxwdWFydDNfZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDNfRG1hRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQzX0RtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDNfUmVzb3VyY2UsICZMUFVBUlQzX0RtYVJlc291cmNlLCAmTFBVQVJUM19EbWFIYW5kbGUsICZMUFVBUlQzX0RtYVJ4SGFuZGxlLCAmTFBVQVJUM19EbWFUeEhhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQzX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9EbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUM19EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9EbWFVbmluaXRpYWxpemUoJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0RtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQzX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19EbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0RtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQzX0RtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFR4Q291bnQoJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUM19EbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRSeENvdW50KCZMUFVBUlQzX0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19EbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUM19EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDNfRG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRTdGF0dXMoJkxQVUFSVDNfRG1hRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2VfdCBMUFVBUlQzX0VkbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQzX0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUM19ETUFfVFhfQ0gsIFJURV9VU0FSVDNfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQzX0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDNfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQzX0RNQV9SWF9DSCwgUlRFX1VTQVJUM19ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDNfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2VkbWFfaGFuZGxlX3QgTFBVQVJUM19FZG1hSGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQzX0VkbWFSeEhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUM19FZG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0M19lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQzX1Jlc291cmNlLCAmTFBVQVJUM19FZG1hUmVzb3VyY2UsICZMUFVBUlQzX0VkbWFIYW5kbGUsICZMUFVBUlQzX0VkbWFSeEhhbmRsZSwgJkxQVUFSVDNfRWRtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUM19FZG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQzX0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDNfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUM19EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVW5pbml0aWFsaXplKCZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDNfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19FZG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDNfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDNfRWRtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRUeENvdW50KCZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQzX0VkbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0UnhDb3VudCgmTFBVQVJUM19FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDNfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUM19FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0U3RhdHVzKCZMUFVBUlQzX0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitscHVhcnRfaGFuZGxlX3QgTFBVQVJUM19IYW5kbGU7CisKKyNpZiBkZWZpbmVkKFVTQVJUM19SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQzX1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDNfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQ0X1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDRfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0M19ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDNfUmVzb3VyY2UsICZMUFVBUlQzX0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfTm9uQmxvY2tpbmdJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDNfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQzX0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVW5pbml0aWFsaXplKCZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX05vbkJsb2NraW5nUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworCisjaWYgZGVmaW5lZChVU0FSVDNfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUM19SWF9CVUZGRVJfRU5BQkxFID09IDEpCisgICAgaWYgKChzdGF0ZSA9PSBBUk1fUE9XRVJfRlVMTCkgJiYgKExQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIExQVUFSVF9UcmFuc2ZlclN0YXJ0UmluZ0J1ZmZlcihMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLCBscHVhcnQzX3J4UmluZ0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX1JYX0JVRkZFUl9MRU4pOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19Ob25CbG9ja2luZ1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDNfTm9uQmxvY2tpbmdSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQzX05vbkJsb2NraW5nVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQzX05vbkJsb2NraW5nR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRUeENvdW50KCZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUM19Ob25CbG9ja2luZ0dldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0UnhDb3VudCgmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUM19Ob25CbG9ja2luZ0NvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIGludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworICAgIGlmIChBUk1fRFJJVkVSX09LICE9IHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSByZWNlaXZlIGludGVycnVwdHMgaWYgcmluZyBidWZmZXIgaXMgdXNlZCAqLworICAgIGlmIChMUFVBUlQzX05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDNfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQzX05vbkJsb2NraW5nR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFN0YXR1cygmTFBVQVJUM19Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMyA9IHtMUFVBUlR4X0dldFZlcnNpb24sICAgICAgTFBVQVJUeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX1VTQVJUM19ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19FZG1hSW5pdGlhbGl6ZSwgIExQVUFSVDNfRWRtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUM19FZG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfRWRtYVNlbmQsICAgICAgICBMUFVBUlQzX0VkbWFSZWNlaXZlLCAgICAgIExQVUFSVDNfRWRtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfRWRtYUdldFR4Q291bnQsICBMUFVBUlQzX0VkbWFHZXRSeENvdW50LCAgIExQVUFSVDNfRWRtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19FZG1hR2V0U3RhdHVzLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX0RtYUluaXRpYWxpemUsICAgTFBVQVJUM19EbWFVbmluaXRpYWxpemUsIExQVUFSVDNfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfRG1hU2VuZCwgICAgICAgICBMUFVBUlQzX0RtYVJlY2VpdmUsICAgICAgTFBVQVJUM19EbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX0RtYUdldFR4Q291bnQsICAgTFBVQVJUM19EbWFHZXRSeENvdW50LCAgIExQVUFSVDNfRG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX0RtYUdldFN0YXR1cywKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nSW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQzX05vbkJsb2NraW5nVW5pbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19Ob25CbG9ja2luZ1NlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19Ob25CbG9ja2luZ1JlY2VpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUM19Ob25CbG9ja2luZ1RyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdHZXRUeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdHZXRSeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDNfTm9uQmxvY2tpbmdHZXRTdGF0dXMsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlR4X1NldE1vZGVtQ29udHJvbCwgTFBVQVJUeF9HZXRNb2RlbVN0YXR1c307CisKKyNlbmRpZiAvKiBMUFVBUlQzICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDQpICYmIFJURV9VU0FSVDQKKworZXh0ZXJuIHVpbnQzMl90IExQVUFSVDRfR2V0RnJlcSh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDRfSW5pdFBpbnModm9pZCk7CitleHRlcm4gdm9pZCBMUFVBUlQ0X0RlaW5pdFBpbnModm9pZCk7CisKK2Ntc2lzX2xwdWFydF9yZXNvdXJjZV90IExQVUFSVDRfUmVzb3VyY2UgPSB7TFBVQVJUNCwgTFBVQVJUNF9HZXRGcmVxfTsKKworI2lmIFJURV9VU0FSVDRfRE1BX0VOCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZG1hX3Jlc291cmNlX3QgTFBVQVJUNF9EbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQ0X0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUNF9ETUFfVFhfQ0gsIFJURV9VU0FSVDRfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQ0X0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDRfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQ0X0RNQV9SWF9DSCwgUlRFX1VTQVJUNF9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDRfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2RtYV9oYW5kbGVfdCBMUFVBUlQ0X0RtYUhhbmRsZTsKK2RtYV9oYW5kbGVfdCBMUFVBUlQ0X0RtYVJ4SGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDRfRG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0NF9kbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDRfRG1hRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUNF9SZXNvdXJjZSwgJkxQVUFSVDRfRG1hUmVzb3VyY2UsICZMUFVBUlQ0X0RtYUhhbmRsZSwgJkxQVUFSVDRfRG1hUnhIYW5kbGUsICZMUFVBUlQ0X0RtYVR4SGFuZGxlfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9EbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDRfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYUluaXRpYWxpemUoY2JfZXZlbnQsICZMUFVBUlQ0X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9EbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQ0X0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0RtYVVuaW5pdGlhbGl6ZSgmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVBvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDRfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0RtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hU2VuZChkYXRhLCBudW0sICZMUFVBUlQ0X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9EbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVJlY2VpdmUoZGF0YSwgbnVtLCAmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYVRyYW5zZmVyKGRhdGFfb3V0LCBkYXRhX2luLCBudW0sICZMUFVBUlQ0X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDRfRG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0VHhDb3VudCgmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ0X0RtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFJ4Q291bnQoJkxQVUFSVDRfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0RtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQ0X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUNF9EbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0RtYUdldFN0YXR1cygmTFBVQVJUNF9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKQorCitjbXNpc19scHVhcnRfZWRtYV9yZXNvdXJjZV90IExQVUFSVDRfRWRtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDRfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQ0X0RNQV9UWF9DSCwgUlRFX1VTQVJUNF9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDRfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUNF9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDRfRE1BX1JYX0NILCBSVEVfVVNBUlQ0X0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUNF9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZWRtYV9oYW5kbGVfdCBMUFVBUlQ0X0VkbWFIYW5kbGU7CitlZG1hX2hhbmRsZV90IExQVUFSVDRfRWRtYVJ4SGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQ0X0VkbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQ0X2VkbWFfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDRfRWRtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9lZG1hX2RyaXZlcl9zdGF0ZV90IExQVUFSVDRfRWRtYURyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDRfUmVzb3VyY2UsICZMUFVBUlQ0X0VkbWFSZXNvdXJjZSwgJkxQVUFSVDRfRWRtYUhhbmRsZSwgJkxQVUFSVDRfRWRtYVJ4SGFuZGxlLCAmTFBVQVJUNF9FZG1hVHhIYW5kbGV9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0VkbWFJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDRfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUNF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0VkbWFVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQ0X0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFVbmluaXRpYWxpemUoJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9FZG1hUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRWRtYVNlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYVNlbmQoZGF0YSwgbnVtLCAmTFBVQVJUNF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X0VkbWFSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9FZG1hVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUNF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNF9FZG1hR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUdldFR4Q291bnQoJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDRfRWRtYUdldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRSeENvdW50KCZMUFVBUlQ0X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfRWRtYUNvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIHJldHVybiBMUFVBUlRfRWRtYUNvbnRyb2woY29udHJvbCwgYXJnLCAmTFBVQVJUNF9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQ0X0VkbWFHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRTdGF0dXMoJkxQVUFSVDRfRWRtYURyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKKyNlbHNlCisKK2xwdWFydF9oYW5kbGVfdCBMUFVBUlQ0X0hhbmRsZTsKKworI2lmIGRlZmluZWQoVVNBUlQ0X1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDRfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0NF9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNBUlQ1X1JYX0JVRkZFUl9FTkFCTEUpICYmIChVU0FSVDVfUlhfQlVGRkVSX0VOQUJMRSA9PSAxKQorc3RhdGljIHVpbnQ4X3QgbHB1YXJ0NV9yeFJpbmdCdWZmZXJbVVNBUlRfUlhfQlVGRkVSX0xFTl07CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZWxzZQorY21zaXNfbHB1YXJ0X25vbl9ibG9ja2luZ19kcml2ZXJfc3RhdGVfdCBMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUgPSB7CisjZW5kaWYKKyAgICAmTFBVQVJUNF9SZXNvdXJjZSwgJkxQVUFSVDRfSGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9Ob25CbG9ja2luZ0luaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUNF9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdJbml0aWFsaXplKGNiX2V2ZW50LCAmTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9Ob25CbG9ja2luZ1VuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDRfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUoJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHVpbnQzMl90IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IExQVUFSVF9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbChzdGF0ZSwgJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisKKyNpZiBkZWZpbmVkKFVTQVJUNF9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQ0X1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKKyAgICBpZiAoKHN0YXRlID09IEFSTV9QT1dFUl9GVUxMKSAmJiAoTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLmhhbmRsZS0+cnhSaW5nQnVmZmVyID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyU3RhcnRSaW5nQnVmZmVyKExQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUsIGxwdWFydDRfcnhSaW5nQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfUlhfQlVGRkVSX0xFTik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X05vbkJsb2NraW5nU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ1NlbmQoZGF0YSwgbnVtLCAmTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNF9Ob25CbG9ja2luZ1JlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdSZWNlaXZlKGRhdGEsIG51bSwgJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDRfTm9uQmxvY2tpbmdUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdUcmFuc2ZlcihkYXRhX291dCwgZGF0YV9pbiwgbnVtLCAmTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDRfTm9uQmxvY2tpbmdHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFR4Q291bnQoJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ0X05vbkJsb2NraW5nR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRSeENvdW50KCZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ0X05vbkJsb2NraW5nQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgaW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7CisgICAgaWYgKEFSTV9EUklWRVJfT0sgIT0gcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIHJlY2VpdmUgaW50ZXJydXB0cyBpZiByaW5nIGJ1ZmZlciBpcyB1c2VkICovCisgICAgaWYgKExQVUFSVDRfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoTFBVQVJUNF9Ob25CbG9ja2luZ0RyaXZlclN0YXRlLnJlc291cmNlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4T3ZlcnJ1bkludGVycnVwdEVuYWJsZSk7CisgICAgfQorCisgICAgcmV0dXJuIEFSTV9EUklWRVJfT0s7Cit9CisKK3N0YXRpYyBBUk1fVVNBUlRfU1RBVFVTIExQVUFSVDRfTm9uQmxvY2tpbmdHZXRTdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0U3RhdHVzKCZMUFVBUlQ0X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCisjZW5kaWYKKworQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ0ID0ge0xQVUFSVHhfR2V0VmVyc2lvbiwgICAgICBMUFVBUlR4X0dldENhcGFiaWxpdGllcywKKyNpZiBSVEVfVVNBUlQ0X0RNQV9FTgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X0VkbWFJbml0aWFsaXplLCAgTFBVQVJUNF9FZG1hVW5pbml0aWFsaXplLCBMUFVBUlQ0X0VkbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9FZG1hU2VuZCwgICAgICAgIExQVUFSVDRfRWRtYVJlY2VpdmUsICAgICAgTFBVQVJUNF9FZG1hVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9FZG1hR2V0VHhDb3VudCwgIExQVUFSVDRfRWRtYUdldFJ4Q291bnQsICAgTFBVQVJUNF9FZG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X0VkbWFHZXRTdGF0dXMsCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfRG1hSW5pdGlhbGl6ZSwgICBMUFVBUlQ0X0RtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUNF9EbWFQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9EbWFTZW5kLCAgICAgICAgIExQVUFSVDRfRG1hUmVjZWl2ZSwgICAgICBMUFVBUlQ0X0RtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfRG1hR2V0VHhDb3VudCwgICBMUFVBUlQ0X0RtYUdldFJ4Q291bnQsICAgTFBVQVJUNF9EbWFDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfRG1hR2V0U3RhdHVzLAorI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdJbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDRfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ1Bvd2VyQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X05vbkJsb2NraW5nU2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X05vbkJsb2NraW5nUmVjZWl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ0X05vbkJsb2NraW5nVHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ0dldFR4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ0dldFJ4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ0NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNF9Ob25CbG9ja2luZ0dldFN0YXR1cywKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVHhfU2V0TW9kZW1Db250cm9sLCBMUFVBUlR4X0dldE1vZGVtU3RhdHVzfTsKKworI2VuZGlmIC8qIExQVUFSVDQgKi8KKworI2lmIGRlZmluZWQoTFBVQVJUNSkgJiYgUlRFX1VTQVJUNQorCitleHRlcm4gdWludDMyX3QgTFBVQVJUNV9HZXRGcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgTFBVQVJUNV9Jbml0UGlucyh2b2lkKTsKK2V4dGVybiB2b2lkIExQVUFSVDVfRGVpbml0UGlucyh2b2lkKTsKKworY21zaXNfbHB1YXJ0X3Jlc291cmNlX3QgTFBVQVJUNV9SZXNvdXJjZSA9IHtMUFVBUlQ1LCBMUFVBUlQ1X0dldEZyZXF9OworCisjaWYgUlRFX1VTQVJUNV9ETUFfRU4KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisKK2Ntc2lzX2xwdWFydF9kbWFfcmVzb3VyY2VfdCBMUFVBUlQ1X0RtYVJlc291cmNlID0geworICAgIFJURV9VU0FSVDVfRE1BX1RYX0RNQV9CQVNFLCBSVEVfVVNBUlQ1X0RNQV9UWF9DSCwgUlRFX1VTQVJUNV9ETUFfVFhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDVfRE1BX1RYX1BFUklfU0VMLAorCisgICAgUlRFX1VTQVJUNV9ETUFfUlhfRE1BX0JBU0UsIFJURV9VU0FSVDVfRE1BX1JYX0NILCBSVEVfVVNBUlQ1X0RNQV9SWF9ETUFNVVhfQkFTRSwgUlRFX1VTQVJUNV9ETUFfUlhfUEVSSV9TRUwsCit9OworCitscHVhcnRfZG1hX2hhbmRsZV90IExQVUFSVDVfRG1hSGFuZGxlOworZG1hX2hhbmRsZV90IExQVUFSVDVfRG1hUnhIYW5kbGU7CitkbWFfaGFuZGxlX3QgTFBVQVJUNV9EbWFUeEhhbmRsZTsKKworI2lmIGRlZmluZWQoX19DQ19BUk0pCitBUk1DQ19TRUNUSU9OKCJscHVhcnQ1X2RtYV9kcml2ZXJfc3RhdGUiKQorY21zaXNfbHB1YXJ0X2RtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQ1X0RtYURyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9kbWFfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQ1X1Jlc291cmNlLCAmTFBVQVJUNV9EbWFSZXNvdXJjZSwgJkxQVUFSVDVfRG1hSGFuZGxlLCAmTFBVQVJUNV9EbWFSeEhhbmRsZSwgJkxQVUFSVDVfRG1hVHhIYW5kbGUsCit9OworCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0RtYUluaXRpYWxpemUoQVJNX1VTQVJUX1NpZ25hbEV2ZW50X3QgY2JfZXZlbnQpCit7CisgICAgTFBVQVJUNV9Jbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDVfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0RtYVVuaW5pdGlhbGl6ZSh2b2lkKQoreworICAgIExQVUFSVDVfRGVpbml0UGlucygpOworICAgIHJldHVybiBMUFVBUlRfRG1hVW5pbml0aWFsaXplKCZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9EbWFQb3dlckNvbnRyb2woQVJNX1BPV0VSX1NUQVRFIHN0YXRlKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRG1hU2VuZChjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDVfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0RtYVJlY2VpdmUodm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9EbWFUcmFuc2Zlcihjb25zdCB2b2lkICpkYXRhX291dCwgdm9pZCAqZGF0YV9pbiwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDVfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNV9EbWFHZXRUeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFHZXRUeENvdW50KCZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDVfRG1hR2V0UnhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0UnhDb3VudCgmTFBVQVJUNV9EbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRG1hQ29udHJvbCh1aW50MzJfdCBjb250cm9sLCB1aW50MzJfdCBhcmcpCit7CisgICAgcmV0dXJuIExQVUFSVF9EbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDVfRG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQ1X0RtYUdldFN0YXR1cyh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfRG1hR2V0U3RhdHVzKCZMUFVBUlQ1X0RtYURyaXZlclN0YXRlKTsKK30KKworLyogTFBVQVJUNSBEcml2ZXIgQ29udHJvbCBCbG9jayAqLworCisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKworY21zaXNfbHB1YXJ0X2VkbWFfcmVzb3VyY2VfdCBMUFVBUlQ1X0VkbWFSZXNvdXJjZSA9IHsKKyAgICBSVEVfVVNBUlQ1X0RNQV9UWF9ETUFfQkFTRSwgUlRFX1VTQVJUNV9ETUFfVFhfQ0gsIFJURV9VU0FSVDVfRE1BX1RYX0RNQU1VWF9CQVNFLCBSVEVfVVNBUlQ1X0RNQV9UWF9QRVJJX1NFTCwKKworICAgIFJURV9VU0FSVDVfRE1BX1JYX0RNQV9CQVNFLCBSVEVfVVNBUlQ1X0RNQV9SWF9DSCwgUlRFX1VTQVJUNV9ETUFfUlhfRE1BTVVYX0JBU0UsIFJURV9VU0FSVDVfRE1BX1JYX1BFUklfU0VMLAorfTsKKworbHB1YXJ0X2VkbWFfaGFuZGxlX3QgTFBVQVJUNV9FZG1hSGFuZGxlOworZWRtYV9oYW5kbGVfdCBMUFVBUlQ1X0VkbWFSeEhhbmRsZTsKK2VkbWFfaGFuZGxlX3QgTFBVQVJUNV9FZG1hVHhIYW5kbGU7CisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0NV9lZG1hX2RyaXZlcl9zdGF0ZSIpCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbHNlCitjbXNpc19scHVhcnRfZWRtYV9kcml2ZXJfc3RhdGVfdCBMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSA9IHsKKyNlbmRpZgorICAgICZMUFVBUlQ1X1Jlc291cmNlLCAmTFBVQVJUNV9FZG1hUmVzb3VyY2UsICZMUFVBUlQ1X0VkbWFIYW5kbGUsICZMUFVBUlQ1X0VkbWFSeEhhbmRsZSwgJkxQVUFSVDVfRWRtYVR4SGFuZGxlLAorfTsKKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9FZG1hSW5pdGlhbGl6ZShBUk1fVVNBUlRfU2lnbmFsRXZlbnRfdCBjYl9ldmVudCkKK3sKKyAgICBMUFVBUlQ1X0luaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDVfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9FZG1hVW5pbml0aWFsaXplKHZvaWQpCit7CisgICAgTFBVQVJUNV9EZWluaXRQaW5zKCk7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVW5pbml0aWFsaXplKCZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRWRtYVBvd2VyQ29udHJvbChBUk1fUE9XRVJfU1RBVEUgc3RhdGUpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUG93ZXJDb250cm9sKHN0YXRlLCAmTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0VkbWFTZW5kKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDVfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9FZG1hUmVjZWl2ZSh2b2lkICpkYXRhLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfRWRtYVRyYW5zZmVyKGNvbnN0IHZvaWQgKmRhdGFfb3V0LCB2b2lkICpkYXRhX2luLCB1aW50MzJfdCBudW0pCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDVfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIHVpbnQzMl90IExQVUFSVDVfRWRtYUdldFR4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFHZXRUeENvdW50KCZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ1X0VkbWFHZXRSeENvdW50KHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0UnhDb3VudCgmTFBVQVJUNV9FZG1hRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X0VkbWFDb250cm9sKHVpbnQzMl90IGNvbnRyb2wsIHVpbnQzMl90IGFyZykKK3sKKyAgICByZXR1cm4gTFBVQVJUX0VkbWFDb250cm9sKGNvbnRyb2wsIGFyZywgJkxQVUFSVDVfRWRtYURyaXZlclN0YXRlKTsKK30KKworc3RhdGljIEFSTV9VU0FSVF9TVEFUVVMgTFBVQVJUNV9FZG1hR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9FZG1hR2V0U3RhdHVzKCZMUFVBUlQ1X0VkbWFEcml2ZXJTdGF0ZSk7Cit9CisKKyNlbmRpZgorCisjZWxzZQorCitscHVhcnRfaGFuZGxlX3QgTFBVQVJUNV9IYW5kbGU7CisKKyNpZiBkZWZpbmVkKFVTQVJUNV9SWF9CVUZGRVJfRU5BQkxFKSAmJiAoVVNBUlQ1X1JYX0JVRkZFUl9FTkFCTEUgPT0gMSkKK3N0YXRpYyB1aW50OF90IGxwdWFydDVfcnhSaW5nQnVmZmVyW1VTQVJUX1JYX0JVRkZFUl9MRU5dOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorQVJNQ0NfU0VDVElPTigibHB1YXJ0NV9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlIikKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2Vsc2UKK2Ntc2lzX2xwdWFydF9ub25fYmxvY2tpbmdfZHJpdmVyX3N0YXRlX3QgTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlID0geworI2VuZGlmCisgICAgJkxQVUFSVDVfUmVzb3VyY2UsICZMUFVBUlQ1X0hhbmRsZSwKK307CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfTm9uQmxvY2tpbmdJbml0aWFsaXplKEFSTV9VU0FSVF9TaWduYWxFdmVudF90IGNiX2V2ZW50KQoreworICAgIExQVUFSVDVfSW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nSW5pdGlhbGl6ZShjYl9ldmVudCwgJkxQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfTm9uQmxvY2tpbmdVbmluaXRpYWxpemUodm9pZCkKK3sKKyAgICBMUFVBUlQ1X0RlaW5pdFBpbnMoKTsKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVW5pbml0aWFsaXplKCZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X05vbkJsb2NraW5nUG93ZXJDb250cm9sKEFSTV9QT1dFUl9TVEFURSBzdGF0ZSkKK3sKKyAgICB1aW50MzJfdCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBMUFVBUlRfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2woc3RhdGUsICZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworCisjaWYgZGVmaW5lZChVU0FSVDVfUlhfQlVGRkVSX0VOQUJMRSkgJiYgKFVTQVJUNV9SWF9CVUZGRVJfRU5BQkxFID09IDEpCisgICAgaWYgKChzdGF0ZSA9PSBBUk1fUE9XRVJfRlVMTCkgJiYgKExQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5oYW5kbGUtPnJ4UmluZ0J1ZmZlciA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIExQVUFSVF9UcmFuc2ZlclN0YXJ0UmluZ0J1ZmZlcihMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUucmVzb3VyY2UtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLCBscHVhcnQ1X3J4UmluZ0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX1JYX0JVRkZFUl9MRU4pOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9Ob25CbG9ja2luZ1NlbmQoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbnVtKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdTZW5kKGRhdGEsIG51bSwgJkxQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IExQVUFSVDVfTm9uQmxvY2tpbmdSZWNlaXZlKHZvaWQgKmRhdGEsIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nUmVjZWl2ZShkYXRhLCBudW0sICZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgaW50MzJfdCBMUFVBUlQ1X05vbkJsb2NraW5nVHJhbnNmZXIoY29uc3Qgdm9pZCAqZGF0YV9vdXQsIHZvaWQgKmRhdGFfaW4sIHVpbnQzMl90IG51bSkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nVHJhbnNmZXIoZGF0YV9vdXQsIGRhdGFfaW4sIG51bSwgJkxQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBMUFVBUlQ1X05vbkJsb2NraW5nR2V0VHhDb3VudCh2b2lkKQoreworICAgIHJldHVybiBMUFVBUlRfTm9uQmxvY2tpbmdHZXRUeENvdW50KCZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworfQorCitzdGF0aWMgdWludDMyX3QgTFBVQVJUNV9Ob25CbG9ja2luZ0dldFJ4Q291bnQodm9pZCkKK3sKKyAgICByZXR1cm4gTFBVQVJUX05vbkJsb2NraW5nR2V0UnhDb3VudCgmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworc3RhdGljIGludDMyX3QgTFBVQVJUNV9Ob25CbG9ja2luZ0NvbnRyb2wodWludDMyX3QgY29udHJvbCwgdWludDMyX3QgYXJnKQoreworICAgIGludDMyX3QgcmVzdWx0OworCisgICAgcmVzdWx0ID0gTFBVQVJUX05vbkJsb2NraW5nQ29udHJvbChjb250cm9sLCBhcmcsICZMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUpOworICAgIGlmIChBUk1fRFJJVkVSX09LICE9IHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSByZWNlaXZlIGludGVycnVwdHMgaWYgcmluZyBidWZmZXIgaXMgdXNlZCAqLworICAgIGlmIChMUFVBUlQ1X05vbkJsb2NraW5nRHJpdmVyU3RhdGUuaGFuZGxlLT5yeFJpbmdCdWZmZXIgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDVfTm9uQmxvY2tpbmdEcml2ZXJTdGF0ZS5yZXNvdXJjZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIHJldHVybiBBUk1fRFJJVkVSX09LOworfQorCitzdGF0aWMgQVJNX1VTQVJUX1NUQVRVUyBMUFVBUlQ1X05vbkJsb2NraW5nR2V0U3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIExQVUFSVF9Ob25CbG9ja2luZ0dldFN0YXR1cygmTFBVQVJUNV9Ob25CbG9ja2luZ0RyaXZlclN0YXRlKTsKK30KKworI2VuZGlmCisKK0FSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUNSA9IHtMUFVBUlR4X0dldFZlcnNpb24sICAgICAgTFBVQVJUeF9HZXRDYXBhYmlsaXRpZXMsCisjaWYgUlRFX1VTQVJUNV9ETUFfRU4KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0VETUFfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9FZG1hSW5pdGlhbGl6ZSwgIExQVUFSVDVfRWRtYVVuaW5pdGlhbGl6ZSwgTFBVQVJUNV9FZG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfRWRtYVNlbmQsICAgICAgICBMUFVBUlQ1X0VkbWFSZWNlaXZlLCAgICAgIExQVUFSVDVfRWRtYVRyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfRWRtYUdldFR4Q291bnQsICBMUFVBUlQ1X0VkbWFHZXRSeENvdW50LCAgIExQVUFSVDVfRWRtYUNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9FZG1hR2V0U3RhdHVzLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X0RtYUluaXRpYWxpemUsICAgTFBVQVJUNV9EbWFVbmluaXRpYWxpemUsIExQVUFSVDVfRG1hUG93ZXJDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfRG1hU2VuZCwgICAgICAgICBMUFVBUlQ1X0RtYVJlY2VpdmUsICAgICAgTFBVQVJUNV9EbWFUcmFuc2ZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X0RtYUdldFR4Q291bnQsICAgTFBVQVJUNV9EbWFHZXRSeENvdW50LCAgIExQVUFSVDVfRG1hQ29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X0RtYUdldFN0YXR1cywKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nSW5pdGlhbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlQ1X05vbkJsb2NraW5nVW5pbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdQb3dlckNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9Ob25CbG9ja2luZ1NlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9Ob25CbG9ja2luZ1JlY2VpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBVQVJUNV9Ob25CbG9ja2luZ1RyYW5zZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdHZXRUeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdHZXRSeENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdDb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVUFSVDVfTm9uQmxvY2tpbmdHZXRTdGF0dXMsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlR4X1NldE1vZGVtQ29udHJvbCwgTFBVQVJUeF9HZXRNb2RlbVN0YXR1c307CisKKyNlbmRpZiAvKiBMUFVBUlQ1ICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9scHVhcnRfY21zaXMuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2Ntc2lzX2RyaXZlcnMvZnNsX2xwdWFydF9jbXNpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjViMmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9jbXNpc19kcml2ZXJzL2ZzbF9scHVhcnRfY21zaXMuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5CisgKiBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfTFBVQVJUX0NNU0lTX0hfCisjZGVmaW5lIF9GU0xfTFBVQVJUX0NNU0lTX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisjaW5jbHVkZSAiRHJpdmVyX1VTQVJULmgiCisjaW5jbHVkZSAiUlRFX0RldmljZS5oIgorI2luY2x1ZGUgImZzbF9scHVhcnQuaCIKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfRE1BTVVYX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRE1BTVVYX0NPVU5UKQorI2luY2x1ZGUgImZzbF9kbWFtdXguaCIKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19ETUFfQ09VTlQpCisjaW5jbHVkZSAiZnNsX2xwdWFydF9kbWEuaCIKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfRURNQV9DT1VOVCkKKyNpbmNsdWRlICJmc2xfbHB1YXJ0X2VkbWEuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMUFVBUlQwKQorZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMDsKKyNlbmRpZiAvKiBMUFVBUlQwICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDEpCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQxOworI2VuZGlmIC8qIExQVUFSVDEgKi8KKworI2lmIGRlZmluZWQoTFBVQVJUMikKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDI7CisjZW5kaWYgLyogTFBVQVJUMiAqLworCisjaWYgZGVmaW5lZChMUFVBUlQzKQorZXh0ZXJuIEFSTV9EUklWRVJfVVNBUlQgRHJpdmVyX1VTQVJUMzsKKyNlbmRpZiAvKiBMUFVBUlQzICovCisKKyNpZiBkZWZpbmVkKExQVUFSVDQpCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ0OworI2VuZGlmIC8qIExQVUFSVDQgKi8KKworI2lmIGRlZmluZWQoTFBVQVJUNSkKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDU7CisjZW5kaWYgLyogTFBVQVJUNSAqLworCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlQgPT0gMSkgJiYgKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDMpCisKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDM7CisKKyNlbmRpZgorCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlQgPT0gMSkgJiYgKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDQpCisKK2V4dGVybiBBUk1fRFJJVkVSX1VTQVJUIERyaXZlcl9VU0FSVDQ7CisKKyNlbmRpZgorCisjaWYgKEZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlQgPT0gMSkgJiYgKEZTTF9GRUFUVVJFX1NPQ19VQVJUX0NPVU5UID09IDUpCitleHRlcm4gQVJNX0RSSVZFUl9VU0FSVCBEcml2ZXJfVVNBUlQ1OworCisjZW5kaWYKKworI2VuZGlmIC8qIF9GU0xfTFBVQVJUX0NNU0lTX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9hZGMxNi5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfYWRjMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWY2YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfYWRjMTYuYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfYWRjMTYuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBBREMxNiBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIHVpbnQzMl90IEFEQzE2X0dldEluc3RhbmNlKEFEQ19UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gQURDMTYgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgQURDX1R5cGUgKmNvbnN0IHNfYWRjMTZCYXNlc1tdID0gQURDX0JBU0VfUFRSUzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gQURDMTYgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2FkYzE2Q2xvY2tzW10gPSBBREMxNl9DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVpbnQzMl90IEFEQzE2X0dldEluc3RhbmNlKEFEQ19UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2FkYzE2QmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfYWRjMTZCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfYWRjMTZCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIEFEQzE2X0luaXQoQURDX1R5cGUgKmJhc2UsIGNvbnN0IGFkYzE2X2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIHVpbnQzMl90IHRtcDMyOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEVuYWJsZSB0aGUgY2xvY2suICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19hZGMxNkNsb2Nrc1tBREMxNl9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisgICAgLyogQURDeF9DRkcxLiAqLworICAgIHRtcDMyID0gQURDX0NGRzFfQURJQ0xLKGNvbmZpZy0+Y2xvY2tTb3VyY2UpIHwgQURDX0NGRzFfTU9ERShjb25maWctPnJlc29sdXRpb24pOworICAgIGlmIChrQURDMTZfTG9uZ1NhbXBsZURpc2FibGVkICE9IGNvbmZpZy0+bG9uZ1NhbXBsZU1vZGUpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfQ0ZHMV9BRExTTVBfTUFTSzsKKyAgICB9CisgICAgdG1wMzIgfD0gQURDX0NGRzFfQURJVihjb25maWctPmNsb2NrRGl2aWRlcik7CisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlTG93UG93ZXIpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfQ0ZHMV9BRExQQ19NQVNLOworICAgIH0KKyAgICBiYXNlLT5DRkcxID0gdG1wMzI7CisKKyAgICAvKiBBREN4X0NGRzIuICovCisgICAgdG1wMzIgPSBiYXNlLT5DRkcyICYgfihBRENfQ0ZHMl9BREFDS0VOX01BU0sgfCBBRENfQ0ZHMl9BREhTQ19NQVNLIHwgQURDX0NGRzJfQURMU1RTX01BU0spOworICAgIGlmIChrQURDMTZfTG9uZ1NhbXBsZURpc2FibGVkICE9IGNvbmZpZy0+bG9uZ1NhbXBsZU1vZGUpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfQ0ZHMl9BRExTVFMoY29uZmlnLT5sb25nU2FtcGxlTW9kZSk7CisgICAgfQorICAgIGlmIChjb25maWctPmVuYWJsZUhpZ2hTcGVlZCkKKyAgICB7CisgICAgICAgIHRtcDMyIHw9IEFEQ19DRkcyX0FESFNDX01BU0s7CisgICAgfQorICAgIGlmIChjb25maWctPmVuYWJsZUFzeW5jaHJvbm91c0Nsb2NrKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX0NGRzJfQURBQ0tFTl9NQVNLOworICAgIH0KKyAgICBiYXNlLT5DRkcyID0gdG1wMzI7CisKKyAgICAvKiBBREN4X1NDMi4gKi8KKyAgICB0bXAzMiA9IGJhc2UtPlNDMiAmIH4oQURDX1NDMl9SRUZTRUxfTUFTSyk7CisgICAgdG1wMzIgfD0gQURDX1NDMl9SRUZTRUwoY29uZmlnLT5yZWZlcmVuY2VWb2x0YWdlU291cmNlKTsKKyAgICBiYXNlLT5TQzIgPSB0bXAzMjsKKworICAgIC8qIEFEQ3hfU0MzLiAqLworICAgIGlmIChjb25maWctPmVuYWJsZUNvbnRpbnVvdXNDb252ZXJzaW9uKQorICAgIHsKKyAgICAgICAgYmFzZS0+U0MzIHw9IEFEQ19TQzNfQURDT19NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5TQzMgJj0gfkFEQ19TQzNfQURDT19NQVNLOworICAgIH0KK30KKwordm9pZCBBREMxNl9EZWluaXQoQURDX1R5cGUgKmJhc2UpCit7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIERpc2FibGUgdGhlIGNsb2NrLiAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2FkYzE2Q2xvY2tzW0FEQzE2X0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKK3ZvaWQgQURDMTZfR2V0RGVmYXVsdENvbmZpZyhhZGMxNl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChOVUxMICE9IGNvbmZpZyk7CisKKyAgICBjb25maWctPnJlZmVyZW5jZVZvbHRhZ2VTb3VyY2UgPSBrQURDMTZfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWY7CisgICAgY29uZmlnLT5jbG9ja1NvdXJjZSA9IGtBREMxNl9DbG9ja1NvdXJjZUFzeW5jaHJvbm91c0Nsb2NrOworICAgIGNvbmZpZy0+ZW5hYmxlQXN5bmNocm9ub3VzQ2xvY2sgPSB0cnVlOworICAgIGNvbmZpZy0+Y2xvY2tEaXZpZGVyID0ga0FEQzE2X0Nsb2NrRGl2aWRlcjg7CisgICAgY29uZmlnLT5yZXNvbHV0aW9uID0ga0FEQzE2X1Jlc29sdXRpb25TRTEyQml0OworICAgIGNvbmZpZy0+bG9uZ1NhbXBsZU1vZGUgPSBrQURDMTZfTG9uZ1NhbXBsZURpc2FibGVkOworICAgIGNvbmZpZy0+ZW5hYmxlSGlnaFNwZWVkID0gZmFsc2U7CisgICAgY29uZmlnLT5lbmFibGVMb3dQb3dlciA9IGZhbHNlOworICAgIGNvbmZpZy0+ZW5hYmxlQ29udGludW91c0NvbnZlcnNpb24gPSBmYWxzZTsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04KK3N0YXR1c190IEFEQzE2X0RvQXV0b0NhbGlicmF0aW9uKEFEQ19UeXBlICpiYXNlKQoreworICAgIGJvb2wgYkhXVHJpZ2dlciA9IGZhbHNlOworICAgIHZvbGF0aWxlIHVpbnQzMl90IHRtcDMyOyAvKiAndm9sYXRpbGUnIGhlcmUgaXMgZm9yIHRoZSBkdW1teSByZWFkIG9mIEFEQ3hfUlswXSByZWdpc3Rlci4gKi8KKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICAvKiBUaGUgY2FsaWJyYXRpb24gd291bGQgYmUgZmFpbGVkIHdoZW4gaW4gaGFyZHdhciBtb2RlLgorICAgICAqIFJlbWVtYmVyIHRoZSBoYXJkd2FyZSB0cmlnZ2VyIHN0YXRlIGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIgaWYgdGhlIGhhcmR3YXJlIHRyaWdnZXIgaXMgZW5hYmxlZC4qLworICAgIGlmICgwVSAhPSAoQURDX1NDMl9BRFRSR19NQVNLICYgYmFzZS0+U0MyKSkKKyAgICB7CisgICAgICAgIGJIV1RyaWdnZXIgPSB0cnVlOworICAgICAgICBiYXNlLT5TQzIgJj0gfkFEQ19TQzJfQURUUkdfTUFTSzsKKyAgICB9CisKKyAgICAvKiBDbGVhciB0aGUgQ0FMRiBhbmQgbGF1bmNoIHRoZSBjYWxpYnJhdGlvbi4gKi8KKyAgICBiYXNlLT5TQzMgfD0gQURDX1NDM19DQUxfTUFTSyB8IEFEQ19TQzNfQ0FMRl9NQVNLOworICAgIHdoaWxlICgwVSA9PSAoa0FEQzE2X0NoYW5uZWxDb252ZXJzaW9uRG9uZUZsYWcgJiBBREMxNl9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoYmFzZSwgMFUpKSkKKyAgICB7CisgICAgICAgIC8qIENoZWNrIHRoZSBDQUxGIHdoZW4gdGhlIGNhbGlicmF0aW9uIGlzIGFjdGl2ZS4gKi8KKyAgICAgICAgaWYgKDBVICE9IChrQURDMTZfQ2FsaWJyYXRpb25GYWlsZWRGbGFnICYgQURDMTZfR2V0U3RhdHVzRmxhZ3MoYmFzZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ZhaWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB0bXAzMiA9IGJhc2UtPlJbMF07IC8qIER1bW15IHJlYWQgdG8gY2xlYXIgQ09DTyBjYXVzZWQgYnkgY2FsaWJyYXRpb24uICovCisKKyAgICAvKiBSZXN0b3JlIHRoZSBoYXJkd2FyZSB0cmlnZ2VyIHNldHRpbmcgaWYgaXQgd2FzIGVuYWJsZWQgYmVmb3JlLiAqLworICAgIGlmIChiSFdUcmlnZ2VyKQorICAgIHsKKyAgICAgICAgYmFzZS0+U0MyIHw9IEFEQ19TQzJfQURUUkdfTUFTSzsKKyAgICB9CisgICAgLyogQ2hlY2sgdGhlIENBTEYgYXQgdGhlIGVuZCBvZiBjYWxpYnJhdGlvbi4gKi8KKyAgICBpZiAoMFUgIT0gKGtBREMxNl9DYWxpYnJhdGlvbkZhaWxlZEZsYWcgJiBBREMxNl9HZXRTdGF0dXNGbGFncyhiYXNlKSkpCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ZhaWw7CisgICAgfQorICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKSAvKiBDaGVjayBpZiB0aGUgY2FsaWJyYXRpb24gcHJvY2VzcyBpcyBzdWNjZWVkLiAqLworICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgdGhlIGNhbGlicmF0aW9uIHZhbHVlcy4gKi8KKyAgICB0bXAzMiA9IGJhc2UtPkNMUDAgKyBiYXNlLT5DTFAxICsgYmFzZS0+Q0xQMiArIGJhc2UtPkNMUDMgKyBiYXNlLT5DTFA0ICsgYmFzZS0+Q0xQUzsKKyAgICB0bXAzMiA9IDB4ODAwMFUgfCAodG1wMzIgPj4gMVUpOworICAgIGJhc2UtPlBHID0gdG1wMzI7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUKKyAgICB0bXAzMiA9IGJhc2UtPkNMTTAgKyBiYXNlLT5DTE0xICsgYmFzZS0+Q0xNMiArIGJhc2UtPkNMTTMgKyBiYXNlLT5DTE00ICsgYmFzZS0+Q0xNUzsKKyAgICB0bXAzMiA9IDB4ODAwMFUgfCAodG1wMzIgPj4gMVUpOworICAgIGJhc2UtPk1HID0gdG1wMzI7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RJRkZfTU9ERSAqLworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04gKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19NVVhfU0VMRUNUCit2b2lkIEFEQzE2X1NldENoYW5uZWxNdXhNb2RlKEFEQ19UeXBlICpiYXNlLCBhZGMxNl9jaGFubmVsX211eF9tb2RlX3QgbW9kZSkKK3sKKyAgICBpZiAoa0FEQzE2X0NoYW5uZWxNdXhBID09IG1vZGUpCisgICAgeworICAgICAgICBiYXNlLT5DRkcyICY9IH5BRENfQ0ZHMl9NVVhTRUxfTUFTSzsKKyAgICB9CisgICAgZWxzZSAvKiBrQURDMTZfQ2hhbm5lbE11eEIuICovCisgICAgeworICAgICAgICBiYXNlLT5DRkcyIHw9IEFEQ19DRkcyX01VWFNFTF9NQVNLOworICAgIH0KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVCAqLworCit2b2lkIEFEQzE2X1NldEhhcmR3YXJlQ29tcGFyZUNvbmZpZyhBRENfVHlwZSAqYmFzZSwgY29uc3QgYWRjMTZfaGFyZHdhcmVfY29tcGFyZV9jb25maWdfdCAqY29uZmlnKQoreworICAgIHVpbnQzMl90IHRtcDMyID0gYmFzZS0+U0MyICYgfihBRENfU0MyX0FDRkVfTUFTSyB8IEFEQ19TQzJfQUNGR1RfTUFTSyB8IEFEQ19TQzJfQUNSRU5fTUFTSyk7CisKKyAgICBpZiAoIWNvbmZpZykgLyogUGFzcyAiTlVMTCIgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZS4gKi8KKyAgICB7CisgICAgICAgIGJhc2UtPlNDMiA9IHRtcDMyOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIEVuYWJsZSB0aGUgZmVhdHVyZS4gKi8KKyAgICB0bXAzMiB8PSBBRENfU0MyX0FDRkVfTUFTSzsKKworICAgIC8qIFNlbGVjdCB0aGUgaGFyZHdhcmUgY29tcGFyZSB3b3JraW5nIG1vZGUuICovCisgICAgc3dpdGNoIChjb25maWctPmhhcmR3YXJlQ29tcGFyZU1vZGUpCisgICAgeworICAgICAgICBjYXNlIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMToKKyAgICAgICAgICAgIHRtcDMyIHw9IEFEQ19TQzJfQUNGR1RfTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMjoKKyAgICAgICAgICAgIHRtcDMyIHw9IEFEQ19TQzJfQUNSRU5fTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMzoKKyAgICAgICAgICAgIHRtcDMyIHw9IEFEQ19TQzJfQUNGR1RfTUFTSyB8IEFEQ19TQzJfQUNSRU5fTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJhc2UtPlNDMiA9IHRtcDMyOworCisgICAgLyogTG9hZCB0aGUgY29tcGFyZSB2YWx1ZXMuICovCisgICAgYmFzZS0+Q1YxID0gQURDX0NWMV9DVihjb25maWctPnZhbHVlMSk7CisgICAgYmFzZS0+Q1YyID0gQURDX0NWMl9DVihjb25maWctPnZhbHVlMik7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfSFdfQVZFUkFHRQordm9pZCBBREMxNl9TZXRIYXJkd2FyZUF2ZXJhZ2UoQURDX1R5cGUgKmJhc2UsIGFkYzE2X2hhcmR3YXJlX2F2ZXJhZ2VfbW9kZV90IG1vZGUpCit7CisgICAgdWludDMyX3QgdG1wMzIgPSBiYXNlLT5TQzMgJiB+KEFEQ19TQzNfQVZHRV9NQVNLIHwgQURDX1NDM19BVkdTX01BU0spOworCisgICAgaWYgKGtBREMxNl9IYXJkd2FyZUF2ZXJhZ2VEaXNhYmxlZCAhPSBtb2RlKQorICAgIHsKKyAgICAgICAgdG1wMzIgfD0gQURDX1NDM19BVkdFX01BU0sgfCBBRENfU0MzX0FWR1MobW9kZSk7CisgICAgfQorICAgIGJhc2UtPlNDMyA9IHRtcDMyOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EKK3ZvaWQgQURDMTZfU2V0UEdBQ29uZmlnKEFEQ19UeXBlICpiYXNlLCBjb25zdCBhZGMxNl9wZ2FfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICB1aW50MzJfdCB0bXAzMjsKKworICAgIGlmICghY29uZmlnKSAvKiBQYXNzaW5nICJOVUxMIiBpcyB0byBkaXNhYmxlIHRoZSBmZWF0dXJlLiAqLworICAgIHsKKyAgICAgICAgYmFzZS0+UEdBID0gMFU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIFBHQSBhbmQgc2V0IHRoZSBnYWluIHZhbHVlLiAqLworICAgIHRtcDMyID0gQURDX1BHQV9QR0FFTl9NQVNLIHwgQURDX1BHQV9QR0FHKGNvbmZpZy0+cGdhR2Fpbik7CisKKyAgICAvKiBDb25maWd1cmUgdGhlIG1pc2MgZmVhdHVyZXMgZm9yIFBHQS4gKi8KKyAgICBpZiAoY29uZmlnLT5lbmFibGVSdW5Jbk5vcm1hbE1vZGUpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfUEdBX1BHQUxQYl9NQVNLOworICAgIH0KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfQ0hPUFBJTkcpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfQ0hPUFBJTkcKKyAgICBpZiAoY29uZmlnLT5kaXNhYmxlUGdhQ2hvcHBpbmcpCisgICAgeworICAgICAgICB0bXAzMiB8PSBBRENfUEdBX1BHQUNIUGJfTUFTSzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9DSE9QUElORyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9PRkZTRVRfTUVBU1VSRU1FTlQpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfT0ZGU0VUX01FQVNVUkVNRU5UCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlUnVuSW5PZmZzZXRNZWFzdXJlbWVudCkKKyAgICB7CisgICAgICAgIHRtcDMyIHw9IEFEQ19QR0FfUEdBT0ZTTV9NQVNLOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX09GRlNFVF9NRUFTVVJFTUVOVCAqLworICAgIGJhc2UtPlBHQSA9IHRtcDMyOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0EgKi8KKwordWludDMyX3QgQURDMTZfR2V0U3RhdHVzRmxhZ3MoQURDX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgcmV0ID0gMDsKKworICAgIGlmICgwVSAhPSAoYmFzZS0+U0MyICYgQURDX1NDMl9BREFDVF9NQVNLKSkKKyAgICB7CisgICAgICAgIHJldCB8PSBrQURDMTZfQWN0aXZlRmxhZzsKKyAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04pICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTgorICAgIGlmICgwVSAhPSAoYmFzZS0+U0MzICYgQURDX1NDM19DQUxGX01BU0spKQorICAgIHsKKyAgICAgICAgcmV0IHw9IGtBREMxNl9DYWxpYnJhdGlvbkZhaWxlZEZsYWc7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTiAqLworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgQURDMTZfQ2xlYXJTdGF0dXNGbGFncyhBRENfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTikgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OCisgICAgaWYgKDBVICE9IChtYXNrICYga0FEQzE2X0NhbGlicmF0aW9uRmFpbGVkRmxhZykpCisgICAgeworICAgICAgICBiYXNlLT5TQzMgfD0gQURDX1NDM19DQUxGX01BU0s7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTiAqLworfQorCit2b2lkIEFEQzE2X1NldENoYW5uZWxDb25maWcoQURDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWxHcm91cCwgY29uc3QgYWRjMTZfY2hhbm5lbF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjaGFubmVsR3JvdXAgPCBBRENfU0MxX0NPVU5UKTsKKyAgICBhc3NlcnQoTlVMTCAhPSBjb25maWcpOworCisgICAgdWludDMyX3Qgc2MxID0gQURDX1NDMV9BRENIKGNvbmZpZy0+Y2hhbm5lbE51bWJlcik7IC8qIFNldCB0aGUgY2hhbm5lbCBudW1iZXIuICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUKKyAgICAvKiBFbmFibGUgdGhlIGRpZmZlcmVudGlhbCBjb252ZXJzaW9uLiAqLworICAgIGlmIChjb25maWctPmVuYWJsZURpZmZlcmVudGlhbENvbnZlcnNpb24pCisgICAgeworICAgICAgICBzYzEgfD0gQURDX1NDMV9ESUZGX01BU0s7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUgKi8KKyAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdCB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIGRvbmUuICovCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlSW50ZXJydXB0T25Db252ZXJzaW9uQ29tcGxldGVkKQorICAgIHsKKyAgICAgICAgc2MxIHw9IEFEQ19TQzFfQUlFTl9NQVNLOworICAgIH0KKyAgICBiYXNlLT5TQzFbY2hhbm5lbEdyb3VwXSA9IHNjMTsKK30KKwordWludDMyX3QgQURDMTZfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKEFEQ19UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsR3JvdXApCit7CisgICAgYXNzZXJ0KGNoYW5uZWxHcm91cCA8IEFEQ19TQzFfQ09VTlQpOworCisgICAgdWludDMyX3QgcmV0ID0gMFU7CisKKyAgICBpZiAoMFUgIT0gKGJhc2UtPlNDMVtjaGFubmVsR3JvdXBdICYgQURDX1NDMV9DT0NPX01BU0spKQorICAgIHsKKyAgICAgICAgcmV0IHw9IGtBREMxNl9DaGFubmVsQ29udmVyc2lvbkRvbmVGbGFnOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfYWRjMTYuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2FkYzE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2MmM1NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2FkYzE2LmgKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfQURDMTZfSF8KKyNkZWZpbmUgX0ZTTF9BREMxNl9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGFkYzE2CisgKiBAeworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBBREMxNiBkcml2ZXIgdmVyc2lvbiAyLjAuMC4gKi8KKyNkZWZpbmUgRlNMX0FEQzE2X0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMCkpCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgQ2hhbm5lbCBzdGF0dXMgZmxhZ3MuCisgKi8KK2VudW0gX2FkYzE2X2NoYW5uZWxfc3RhdHVzX2ZsYWdzCit7CisgICAga0FEQzE2X0NoYW5uZWxDb252ZXJzaW9uRG9uZUZsYWcgPSBBRENfU0MxX0NPQ09fTUFTSywgLyohPCBDb252ZXJzaW9uIGRvbmUuICovCit9OworCisvKiEKKyAqIEBicmllZiBDb252ZXJ0ZXIgc3RhdHVzIGZsYWdzLgorICovCitlbnVtIF9hZGMxNl9zdGF0dXNfZmxhZ3MKK3sKKyAgICBrQURDMTZfQWN0aXZlRmxhZyA9IEFEQ19TQzJfQURBQ1RfTUFTSywgLyohPCBDb252ZXJ0ZXIgaXMgYWN0aXZlLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04KKyAgICBrQURDMTZfQ2FsaWJyYXRpb25GYWlsZWRGbGFnID0gQURDX1NDM19DQUxGX01BU0ssIC8qITwgQ2FsaWJyYXRpb24gaXMgZmFpbGVkLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0NBTElCUkFUSU9OICovCit9OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVCkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QKKy8qIQorICogQGJyaWVmIENoYW5uZWwgbXVsdGlwbGV4ZXIgbW9kZSBmb3IgZWFjaCBjaGFubmVsLgorICoKKyAqIEZvciBzb21lIEFEQzE2IGNoYW5uZWxzLCB0aGVyZSBhcmUgdHdvIHBpbiBzZWxlY3Rpb25zIGluIGNoYW5uZWwgbXVsdGlwbGV4ZXIuIEZvciBleGFtcGxlLCBBREMwX1NFNGEgYW5kIEFEQzBfU0U0YgorICogYXJlIHRoZSBkaWZmZXJlbnQgY2hhbm5lbHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBjaGFubmVsIG51bWJlci4KKyAqLwordHlwZWRlZiBlbnVtIF9hZGNfY2hhbm5lbF9tdXhfbW9kZQoreworICAgIGtBREMxNl9DaGFubmVsTXV4QSA9IDBVLCAvKiE8IEZvciBjaGFubmVsIHdpdGggY2hhbm5lbCBtdXggYS4gKi8KKyAgICBrQURDMTZfQ2hhbm5lbE11eEIgPSAxVSwgLyohPCBGb3IgY2hhbm5lbCB3aXRoIGNoYW5uZWwgbXV4IGIuICovCit9IGFkYzE2X2NoYW5uZWxfbXV4X21vZGVfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVCAqLworCisvKiEKKyAqIEBicmllZiBDbG9jayBkaXZpZGVyIGZvciB0aGUgY29udmVydGVyLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X2Nsb2NrX2RpdmlkZXIKK3sKKyAgICBrQURDMTZfQ2xvY2tEaXZpZGVyMSA9IDBVLCAvKiE8IEZvciBkaXZpZGVyIDEgZnJvbSB0aGUgaW5wdXQgY2xvY2sgdG8gdGhlIG1vZHVsZS4gKi8KKyAgICBrQURDMTZfQ2xvY2tEaXZpZGVyMiA9IDFVLCAvKiE8IEZvciBkaXZpZGVyIDIgZnJvbSB0aGUgaW5wdXQgY2xvY2sgdG8gdGhlIG1vZHVsZS4gKi8KKyAgICBrQURDMTZfQ2xvY2tEaXZpZGVyNCA9IDJVLCAvKiE8IEZvciBkaXZpZGVyIDQgZnJvbSB0aGUgaW5wdXQgY2xvY2sgdG8gdGhlIG1vZHVsZS4gKi8KKyAgICBrQURDMTZfQ2xvY2tEaXZpZGVyOCA9IDNVLCAvKiE8IEZvciBkaXZpZGVyIDggZnJvbSB0aGUgaW5wdXQgY2xvY2sgdG8gdGhlIG1vZHVsZS4gKi8KK30gYWRjMTZfY2xvY2tfZGl2aWRlcl90OworCisvKiEKKyAqQGJyaWVmIENvbnZlcnRlcidzIHJlc29sdXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBfYWRjMTZfcmVzb2x1dGlvbgoreworICAgIC8qIFRoaXMgZ3JvdXAgb2YgZW51bWVyYXRpb24gaXMgZm9yIGludGVybmFsIHVzZSB3aGljaCBpcyByZWxhdGVkIHRvIHJlZ2lzdGVyIHNldHRpbmcuICovCisgICAga0FEQzE2X1Jlc29sdXRpb244b3I5Qml0ID0gMFUsICAgLyohPCBTaW5nbGUgRW5kIDgtYml0IG9yIERpZmZlcmVudGlhbCBTYW1wbGUgOS1iaXQuICovCisgICAga0FEQzE2X1Jlc29sdXRpb24xMm9yMTNCaXQgPSAxVSwgLyohPCBTaW5nbGUgRW5kIDEyLWJpdCBvciBEaWZmZXJlbnRpYWwgU2FtcGxlIDEzLWJpdC4gKi8KKyAgICBrQURDMTZfUmVzb2x1dGlvbjEwb3IxMUJpdCA9IDJVLCAvKiE8IFNpbmdsZSBFbmQgMTAtYml0IG9yIERpZmZlcmVudGlhbCBTYW1wbGUgMTEtYml0LiAqLworCisgICAgLyogVGhpcyBncm91cCBvZiBlbnVtZXJhdGlvbiBpcyBmb3IgYSBwdWJsaWMgdXNlci4gKi8KKyAgICBrQURDMTZfUmVzb2x1dGlvblNFOEJpdCA9IGtBREMxNl9SZXNvbHV0aW9uOG9yOUJpdCwgICAgLyohPCBTaW5nbGUgRW5kIDgtYml0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uU0UxMkJpdCA9IGtBREMxNl9SZXNvbHV0aW9uMTJvcjEzQml0LCAvKiE8IFNpbmdsZSBFbmQgMTItYml0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uU0UxMEJpdCA9IGtBREMxNl9SZXNvbHV0aW9uMTBvcjExQml0LCAvKiE8IFNpbmdsZSBFbmQgMTAtYml0LiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RJRkZfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0RJRkZfTU9ERQorICAgIGtBREMxNl9SZXNvbHV0aW9uREY5Qml0ID0ga0FEQzE2X1Jlc29sdXRpb244b3I5Qml0LCAgICAvKiE8IERpZmZlcmVudGlhbCBTYW1wbGUgOS1iaXQuICovCisgICAga0FEQzE2X1Jlc29sdXRpb25ERjEzQml0ID0ga0FEQzE2X1Jlc29sdXRpb24xMm9yMTNCaXQsIC8qITwgRGlmZmVyZW50aWFsIFNhbXBsZSAxMy1iaXQuICovCisgICAga0FEQzE2X1Jlc29sdXRpb25ERjExQml0ID0ga0FEQzE2X1Jlc29sdXRpb24xMG9yMTFCaXQsIC8qITwgRGlmZmVyZW50aWFsIFNhbXBsZSAxMS1iaXQuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfTUFYX1JFU09MVVRJT04pICYmIChGU0xfRkVBVFVSRV9BREMxNl9NQVhfUkVTT0xVVElPTiA+PSAxNlUpCisgICAgLyogMTYtYml0IGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LiAqLworICAgIGtBREMxNl9SZXNvbHV0aW9uMTZCaXQgPSAzVSwgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2luZ2xlIEVuZCAxNi1iaXQgb3IgRGlmZmVyZW50aWFsIFNhbXBsZSAxNi1iaXQuICovCisgICAga0FEQzE2X1Jlc29sdXRpb25TRTE2Qml0ID0ga0FEQzE2X1Jlc29sdXRpb24xNkJpdCwgLyohPCBTaW5nbGUgRW5kIDE2LWJpdC4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUKKyAgICBrQURDMTZfUmVzb2x1dGlvbkRGMTZCaXQgPSBrQURDMTZfUmVzb2x1dGlvbjE2Qml0LCAvKiE8IERpZmZlcmVudGlhbCBTYW1wbGUgMTYtYml0LiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9BREMxNl9NQVhfUkVTT0xVVElPTiA+PSAxNlUgKi8KK30gYWRjMTZfcmVzb2x1dGlvbl90OworCisvKiEKKyAqIEBicmllZiBDbG9jayBzb3VyY2UuCisgKi8KK3R5cGVkZWYgZW51bSBfYWRjMTZfY2xvY2tfc291cmNlCit7CisgICAga0FEQzE2X0Nsb2NrU291cmNlQWx0MCA9IDBVLCAvKiE8IFNlbGVjdGlvbiAwIG9mIHRoZSBjbG9jayBzb3VyY2UuICovCisgICAga0FEQzE2X0Nsb2NrU291cmNlQWx0MSA9IDFVLCAvKiE8IFNlbGVjdGlvbiAxIG9mIHRoZSBjbG9jayBzb3VyY2UuICovCisgICAga0FEQzE2X0Nsb2NrU291cmNlQWx0MiA9IDJVLCAvKiE8IFNlbGVjdGlvbiAyIG9mIHRoZSBjbG9jayBzb3VyY2UuICovCisgICAga0FEQzE2X0Nsb2NrU291cmNlQWx0MyA9IDNVLCAvKiE8IFNlbGVjdGlvbiAzIG9mIHRoZSBjbG9jayBzb3VyY2UuICovCisKKyAgICAvKiBDaGlwIGRlZmluZWQgY2xvY2sgc291cmNlICovCisgICAga0FEQzE2X0Nsb2NrU291cmNlQXN5bmNocm9ub3VzQ2xvY2sgPSBrQURDMTZfQ2xvY2tTb3VyY2VBbHQzLCAvKiE8IFVzaW5nIGludGVybmFsIGFzeW5jaHJvbm91cyBjbG9jay4gKi8KK30gYWRjMTZfY2xvY2tfc291cmNlX3Q7CisKKy8qIQorICogQGJyaWVmIExvbmcgc2FtcGxlIG1vZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfYWRjMTZfbG9uZ19zYW1wbGVfbW9kZQoreworICAgIGtBREMxNl9Mb25nU2FtcGxlQ3ljbGUyNCA9IDBVLCAgLyohPCAyMCBleHRyYSBBRENLIGN5Y2xlcywgMjQgQURDSyBjeWNsZXMgdG90YWwuICovCisgICAga0FEQzE2X0xvbmdTYW1wbGVDeWNsZTE2ID0gMVUsICAvKiE8IDEyIGV4dHJhIEFEQ0sgY3ljbGVzLCAxNiBBRENLIGN5Y2xlcyB0b3RhbC4gKi8KKyAgICBrQURDMTZfTG9uZ1NhbXBsZUN5Y2xlMTAgPSAyVSwgIC8qITwgNiBleHRyYSBBRENLIGN5Y2xlcywgMTAgQURDSyBjeWNsZXMgdG90YWwuICovCisgICAga0FEQzE2X0xvbmdTYW1wbGVDeWNsZTYgPSAzVSwgICAvKiE8IDIgZXh0cmEgQURDSyBjeWNsZXMsIDYgQURDSyBjeWNsZXMgdG90YWwuICovCisgICAga0FEQzE2X0xvbmdTYW1wbGVEaXNhYmxlZCA9IDRVLCAvKiE8IERpc2FibGUgdGhlIGxvbmcgc2FtcGxlIGZlYXR1cmUuICovCit9IGFkYzE2X2xvbmdfc2FtcGxlX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgUmVmZXJlbmNlIHZvbHRhZ2Ugc291cmNlLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X3JlZmVyZW5jZV92b2x0YWdlX3NvdXJjZQoreworICAgIGtBREMxNl9SZWZlcmVuY2VWb2x0YWdlU291cmNlVnJlZiA9IDBVLCAvKiE8IEZvciBleHRlcm5hbCBwaW5zIHBhaXIgb2YgVnJlZkggYW5kIFZyZWZMLiAqLworICAgIGtBREMxNl9SZWZlcmVuY2VWb2x0YWdlU291cmNlVmFsdCA9IDFVLCAvKiE8IEZvciBhbHRlcm5hdGUgcmVmZXJlbmNlIHBhaXIgb2YgVmFsdEggYW5kIFZhbHRMLiAqLworfSBhZGMxNl9yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2VfdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX0FWRVJBR0UpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFCisvKiEKKyAqIEBicmllZiBIYXJkd2FyZSBhdmVyYWdlIG1vZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfYWRjMTZfaGFyZHdhcmVfYXZlcmFnZV9tb2RlCit7CisgICAga0FEQzE2X0hhcmR3YXJlQXZlcmFnZUNvdW50NCA9IDBVLCAgIC8qITwgRm9yIGhhcmR3YXJlIGF2ZXJhZ2Ugd2l0aCA0IHNhbXBsZXMuICovCisgICAga0FEQzE2X0hhcmR3YXJlQXZlcmFnZUNvdW50OCA9IDFVLCAgIC8qITwgRm9yIGhhcmR3YXJlIGF2ZXJhZ2Ugd2l0aCA4IHNhbXBsZXMuICovCisgICAga0FEQzE2X0hhcmR3YXJlQXZlcmFnZUNvdW50MTYgPSAyVSwgIC8qITwgRm9yIGhhcmR3YXJlIGF2ZXJhZ2Ugd2l0aCAxNiBzYW1wbGVzLiAqLworICAgIGtBREMxNl9IYXJkd2FyZUF2ZXJhZ2VDb3VudDMyID0gM1UsICAvKiE8IEZvciBoYXJkd2FyZSBhdmVyYWdlIHdpdGggMzIgc2FtcGxlcy4gKi8KKyAgICBrQURDMTZfSGFyZHdhcmVBdmVyYWdlRGlzYWJsZWQgPSA0VSwgLyohPCBEaXNhYmxlIHRoZSBoYXJkd2FyZSBhdmVyYWdlIGZlYXR1cmUuKi8KK30gYWRjMTZfaGFyZHdhcmVfYXZlcmFnZV9tb2RlX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX0FWRVJBR0UgKi8KKworLyohCisgKiBAYnJpZWYgSGFyZHdhcmUgY29tcGFyZSBtb2RlLgorICovCit0eXBlZGVmIGVudW0gX2FkYzE2X2hhcmR3YXJlX2NvbXBhcmVfbW9kZQoreworICAgIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMCA9IDBVLCAvKiE8IHggPCB2YWx1ZTEuICovCisgICAga0FEQzE2X0hhcmR3YXJlQ29tcGFyZU1vZGUxID0gMVUsIC8qITwgeCA+IHZhbHVlMS4gKi8KKyAgICBrQURDMTZfSGFyZHdhcmVDb21wYXJlTW9kZTIgPSAyVSwgLyohPCBpZiB2YWx1ZTEgPD0gdmFsdWUyLCB0aGVuIHggPCB2YWx1ZTEgfHwgeCA+IHZhbHVlMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlLCB2YWx1ZTEgPiB4ID4gdmFsdWUyLiAqLworICAgIGtBREMxNl9IYXJkd2FyZUNvbXBhcmVNb2RlMyA9IDNVLCAvKiE8IGlmIHZhbHVlMSA8PSB2YWx1ZTIsIHRoZW4gdmFsdWUxIDw9IHggPD0gdmFsdWUyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeCA+PSB2YWx1ZTEgfHwgeCA8PSB2YWx1ZTIuICovCit9IGFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfbW9kZV90OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBCisvKiEKKyAqIEBicmllZiBQR0EncyBHYWluIG1vZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfYWRjMTZfcGdhX2dhaW4KK3sKKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2YxID0gMFUsICAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiAxLiAgKi8KKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2YyID0gMVUsICAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiAyLiAgKi8KKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2Y0ID0gMlUsICAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiA0LiAgKi8KKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2Y4ID0gM1UsICAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiA4LiAgKi8KKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2YxNiA9IDRVLCAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiAxNi4gKi8KKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2YzMiA9IDVVLCAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiAzMi4gKi8KKyAgICBrQURDMTZfUEdBR2FpblZhbHVlT2Y2NCA9IDZVLCAvKiE8IEZvciBhbXBsaWZpZXIgZ2FpbiBvZiA2NC4gKi8KK30gYWRjMTZfcGdhX2dhaW5fdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBICovCisKKy8qIQorICogQGJyaWVmIEFEQzE2IGNvbnZlcnRlciBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfYWRjMTZfY29uZmlnCit7CisgICAgYWRjMTZfcmVmZXJlbmNlX3ZvbHRhZ2Vfc291cmNlX3QgcmVmZXJlbmNlVm9sdGFnZVNvdXJjZTsgLyohPCBTZWxlY3QgdGhlIHJlZmVyZW5jZSB2b2x0YWdlIHNvdXJjZS4gKi8KKyAgICBhZGMxNl9jbG9ja19zb3VyY2VfdCBjbG9ja1NvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCB0aGUgaW5wdXQgY2xvY2sgc291cmNlIHRvIGNvbnZlcnRlci4gKi8KKyAgICBib29sIGVuYWJsZUFzeW5jaHJvbm91c0Nsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSB0aGUgYXN5bmNocm9ub3VzIGNsb2NrIG91dHB1dC4gKi8KKyAgICBhZGMxNl9jbG9ja19kaXZpZGVyX3QgY2xvY2tEaXZpZGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCB0aGUgZGl2aWRlciBvZiBpbnB1dCBjbG9jayBzb3VyY2UuICovCisgICAgYWRjMTZfcmVzb2x1dGlvbl90IHJlc29sdXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgdGhlIHNhbXBsZSByZXNvbHV0aW9uIG1vZGUuICovCisgICAgYWRjMTZfbG9uZ19zYW1wbGVfbW9kZV90IGxvbmdTYW1wbGVNb2RlOyAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgdGhlIGxvbmcgc2FtcGxlIG1vZGUuICovCisgICAgYm9vbCBlbmFibGVIaWdoU3BlZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgdGhlIGhpZ2gtc3BlZWQgbW9kZS4gKi8KKyAgICBib29sIGVuYWJsZUxvd1Bvd2VyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBsb3cgcG93ZXIuICovCisgICAgYm9vbCBlbmFibGVDb250aW51b3VzQ29udmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgY29udGludW91cyBjb252ZXJzaW9uIG1vZGUuICovCit9IGFkYzE2X2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBBREMxNiBIYXJkd2FyZSBjb21wYXJpc29uIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9hZGMxNl9oYXJkd2FyZV9jb21wYXJlX2NvbmZpZworeworICAgIGFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfbW9kZV90IGhhcmR3YXJlQ29tcGFyZU1vZGU7IC8qITwgU2VsZWN0IHRoZSBoYXJkd2FyZSBjb21wYXJlIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgImFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfbW9kZV90Ii4gKi8KKyAgICBpbnQxNl90IHZhbHVlMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNldHRpbmcgdmFsdWUxIGZvciBoYXJkd2FyZSBjb21wYXJlIG1vZGUuICovCisgICAgaW50MTZfdCB2YWx1ZTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZXR0aW5nIHZhbHVlMiBmb3IgaGFyZHdhcmUgY29tcGFyZSBtb2RlLiAqLworfSBhZGMxNl9oYXJkd2FyZV9jb21wYXJlX2NvbmZpZ190OworCisvKiEKKyAqIEBicmllZiBBREMxNiBjaGFubmVsIGNvbnZlcnNpb24gY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2FkYzE2X2NoYW5uZWxfY29uZmlnCit7CisgICAgdWludDMyX3QgY2hhbm5lbE51bWJlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgU2V0dGluZyB0aGUgY29udmVyc2lvbiBjaGFubmVsIG51bWJlci4gVGhlIGF2YWlsYWJsZSByYW5nZSBpcyAwLTMxLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBjaGFubmVsIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggY2hpcCBpbiBSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgZG9jdW1lbnQuICovCisgICAgYm9vbCBlbmFibGVJbnRlcnJ1cHRPbkNvbnZlcnNpb25Db21wbGV0ZWQ7IC8qITwgR2VuZXJhdGUgYW4gaW50ZXJydXB0IHJlcXVlc3Qgb25jZSB0aGUgY29udmVyc2lvbiBpcyBjb21wbGV0ZWQuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRElGRl9NT0RFCisgICAgYm9vbCBlbmFibGVEaWZmZXJlbnRpYWxDb252ZXJzaW9uOyAvKiE8IFVzaW5nIERpZmZlcmVudGlhbCBzYW1wbGUgbW9kZS4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19ESUZGX01PREUgKi8KK30gYWRjMTZfY2hhbm5lbF9jb25maWdfdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQQorLyohCisgKiBAYnJpZWYgQURDMTYgcHJvZ3JhbW1hYmxlIGdhaW4gYW1wbGlmaWVyIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9hZGMxNl9wZ2FfY29uZmlnCit7CisgICAgYWRjMTZfcGdhX2dhaW5fdCBwZ2FHYWluOyAgIC8qITwgU2V0dGluZyBQR0EgZ2Fpbi4gKi8KKyAgICBib29sIGVuYWJsZVJ1bkluTm9ybWFsTW9kZTsgLyohPCBFbmFibGUgUEdBIHdvcmtpbmcgaW4gbm9ybWFsIG1vZGUsIG9yIGxvdyBwb3dlciBtb2RlIGJ5IGRlZmF1bHQuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX0NIT1BQSU5HKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBX0NIT1BQSU5HCisgICAgYm9vbCBkaXNhYmxlUGdhQ2hvcHBpbmc7IC8qITwgRGlzYWJsZSB0aGUgUEdBIGNob3BwaW5nIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQR0EgZW1wbG95cyBjaG9wcGluZyB0byByZW1vdmUvcmVkdWNlIG9mZnNldCBhbmQgMS9mIG5vaXNlIGFuZCBvZmZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBvZmZzZXQgbWVhc3VyZW1lbnQgY29uZmlndXJhdGlvbiB0aGF0IGFpZHMgdGhlIG9mZnNldCBjYWxpYnJhdGlvbi4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9DSE9QUElORyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQV9PRkZTRVRfTUVBU1VSRU1FTlQpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfT0ZGU0VUX01FQVNVUkVNRU5UCisgICAgYm9vbCBlbmFibGVSdW5Jbk9mZnNldE1lYXN1cmVtZW50OyAvKiE8IEVuYWJsZSB0aGUgUEdBIHdvcmtpbmcgaW4gb2Zmc2V0IG1lYXN1cmVtZW50IG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBQR0EgZGlzY29ubmVjdHMgaXRzZWxmIGZyb20gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cyBhbmQgYXV0by1jb25maWd1cmVzIGludG8gb2Zmc2V0IG1lYXN1cmVtZW50IG1vZGUuIFdpdGggdGhpcyBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIHJ1biB0aGUgQURDIGluIHRoZSByZWNvbW1lbmRlZCBzZXR0aW5ncyBhbmQgZW5hYmxlIHRoZSBtYXhpbXVtIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2ZXJhZ2luZyB0byBnZXQgdGhlIFBHQSBvZmZzZXQgbnVtYmVyLiBUaGUgb3V0cHV0IGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEdBIG9mZnNldCAqICg2NCsxKSkgZm9yIHRoZSBnaXZlbiBQR0Egc2V0dGluZy4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19QR0FfT0ZGU0VUX01FQVNVUkVNRU5UICovCit9IGFkYzE2X3BnYV9jb25maWdfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgQURDMTYgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFNlZSAiYWRjMTZfY29uZmlnX3QiLgorICovCit2b2lkIEFEQzE2X0luaXQoQURDX1R5cGUgKmJhc2UsIGNvbnN0IGFkYzE2X2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBEZS1pbml0aWFsaXplcyB0aGUgQURDMTYgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIEFEQzE2X0RlaW5pdChBRENfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgYW4gYXZhaWxhYmxlIHByZS1kZWZpbmVkIHNldHRpbmdzIGZvciB0aGUgY29udmVydGVyJ3MgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBjb252ZXJ0ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2l0aCBhdmFpbGFibGUgc2V0dGluZ3MuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXMgZm9sbG93cy4KKyAqIEBjb2RlCisgKiAgIGNvbmZpZy0+cmVmZXJlbmNlVm9sdGFnZVNvdXJjZSAgICAgPSBrQURDMTZfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWY7CisgKiAgIGNvbmZpZy0+Y2xvY2tTb3VyY2UgICAgICAgICAgICAgICAgPSBrQURDMTZfQ2xvY2tTb3VyY2VBc3luY2hyb25vdXNDbG9jazsKKyAqICAgY29uZmlnLT5lbmFibGVBc3luY2hyb25vdXNDbG9jayAgICA9IHRydWU7CisgKiAgIGNvbmZpZy0+Y2xvY2tEaXZpZGVyICAgICAgICAgICAgICAgPSBrQURDMTZfQ2xvY2tEaXZpZGVyODsKKyAqICAgY29uZmlnLT5yZXNvbHV0aW9uICAgICAgICAgICAgICAgICA9IGtBREMxNl9SZXNvbHV0aW9uU0UxMkJpdDsKKyAqICAgY29uZmlnLT5sb25nU2FtcGxlTW9kZSAgICAgICAgICAgICA9IGtBREMxNl9Mb25nU2FtcGxlRGlzYWJsZWQ7CisgKiAgIGNvbmZpZy0+ZW5hYmxlSGlnaFNwZWVkICAgICAgICAgICAgPSBmYWxzZTsKKyAqICAgY29uZmlnLT5lbmFibGVMb3dQb3dlciAgICAgICAgICAgICA9IGZhbHNlOworICogICBjb25maWctPmVuYWJsZUNvbnRpbnVvdXNDb252ZXJzaW9uID0gZmFsc2U7CisgKiBAZW5kY29kZQorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBBREMxNl9HZXREZWZhdWx0Q29uZmlnKGFkYzE2X2NvbmZpZ190ICpjb25maWcpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04pICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19DQUxJQlJBVElPTgorLyohCisgKiBAYnJpZWYgIEF1dG9tYXRlcyB0aGUgaGFyZHdhcmUgY2FsaWJyYXRpb24uCisgKgorICogVGhpcyBhdXRvIGNhbGlicmF0aW9uIGhlbHBzIHRvIGFkanVzdCB0aGUgcGx1cy9taW51cyBzaWRlIGdhaW4gYXV0b21hdGljYWxseS4KKyAqIEV4ZWN1dGUgdGhlIGNhbGlicmF0aW9uIGJlZm9yZSB1c2luZyB0aGUgY29udmVydGVyLiBOb3RlIHRoYXQgdGhlIGhhcmR3YXJlIHRyaWdnZXIgc2hvdWxkIGJlIHVzZWQKKyAqIGR1cmluZyB0aGUgY2FsaWJyYXRpb24uCisgKgorICogQHBhcmFtICBiYXNlIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBzdGF0dXMuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBDYWxpYnJhdGlvbiBpcyBkb25lIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwga1N0YXR1c19GYWlsICAgIENhbGlicmF0aW9uIGhhcyBmYWlsZWQuCisgKi8KK3N0YXR1c190IEFEQzE2X0RvQXV0b0NhbGlicmF0aW9uKEFEQ19UeXBlICpiYXNlKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfQ0FMSUJSQVRJT04gKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX09GRlNFVF9DT1JSRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfT0ZGU0VUX0NPUlJFQ1RJT04KKy8qIQorICogQGJyaWVmIFNldHMgdGhlIG9mZnNldCB2YWx1ZSBmb3IgdGhlIGNvbnZlcnNpb24gcmVzdWx0LgorICoKKyAqIFRoaXMgb2Zmc2V0IHZhbHVlIHRha2VzIGVmZmVjdCBvbiB0aGUgY29udmVyc2lvbiByZXN1bHQuIElmIHRoZSBvZmZzZXQgdmFsdWUgaXMgbm90IHplcm8sIHRoZSByZWFkaW5nIHJlc3VsdAorICogaXMgc3VidHJhY3RlZCBieSBpdC4gTm90ZSwgdGhlIGhhcmR3YXJlIGNhbGlicmF0aW9uIGZpbGxzIHRoZSBvZmZzZXQgdmFsdWUgYXV0b21hdGljYWxseS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gdmFsdWUgU2V0dGluZyBvZmZzZXQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBBREMxNl9TZXRPZmZzZXRWYWx1ZShBRENfVHlwZSAqYmFzZSwgaW50MTZfdCB2YWx1ZSkKK3sKKyAgICBiYXNlLT5PRlMgPSAodWludDMyX3QpKHZhbHVlKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfT0ZGU0VUX0NPUlJFQ1RJT04gKi8KKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBBZHZhbmNlZCBGZWF0dXJlcworICogQHsKKyAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9BREMxNl9IQVNfRE1BKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRE1BCisvKiEKKyAqIEBicmllZiBFbmFibGVzIGdlbmVyYXRpbmcgdGhlIERNQSB0cmlnZ2VyIHdoZW4gdGhlIGNvbnZlcnNpb24gaXMgY29tcGxldGUuCisgKgorICogQHBhcmFtIGJhc2UgICBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgU3dpdGNoZXIgb2YgdGhlIERNQSBmZWF0dXJlLiAidHJ1ZSIgbWVhbnMgZW5hYmxlZCwgImZhbHNlIiBtZWFucyBub3QgZW5hYmxlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEFEQzE2X0VuYWJsZURNQShBRENfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlNDMiB8PSBBRENfU0MyX0RNQUVOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlNDMiAmPSB+QURDX1NDMl9ETUFFTl9NQVNLOworICAgIH0KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfRE1BICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIGhhcmR3YXJlIHRyaWdnZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBTd2l0Y2hlciBvZiB0aGUgaGFyZHdhcmUgdHJpZ2dlciBmZWF0dXJlLiAidHJ1ZSIgbWVhbnMgZW5hYmxlZCwgImZhbHNlIiBtZWFucyBub3QgZW5hYmxlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEFEQzE2X0VuYWJsZUhhcmR3YXJlVHJpZ2dlcihBRENfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlNDMiB8PSBBRENfU0MyX0FEVFJHX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlNDMiAmPSB+QURDX1NDMl9BRFRSR19NQVNLOworICAgIH0KK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX01VWF9TRUxFQ1QpICYmIEZTTF9GRUFUVVJFX0FEQzE2X0hBU19NVVhfU0VMRUNUCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBjaGFubmVsIG11eCBtb2RlLgorICoKKyAqIFNvbWUgc2FtcGxlIHBpbnMgc2hhcmUgdGhlIHNhbWUgY2hhbm5lbCBpbmRleC4gVGhlIGNoYW5uZWwgbXV4IG1vZGUgZGVjaWRlcyB3aGljaCBwaW4gaXMgdXNlZCBmb3IgYW4KKyAqIGluZGljYXRlZCBjaGFubmVsLgorICoKKyAqIEBwYXJhbSBiYXNlIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1vZGUgU2V0dGluZyBjaGFubmVsIG11eCBtb2RlLiBTZWUgImFkYzE2X2NoYW5uZWxfbXV4X21vZGVfdCIuCisgKi8KK3ZvaWQgQURDMTZfU2V0Q2hhbm5lbE11eE1vZGUoQURDX1R5cGUgKmJhc2UsIGFkYzE2X2NoYW5uZWxfbXV4X21vZGVfdCBtb2RlKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfTVVYX1NFTEVDVCAqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBoYXJkd2FyZSBjb21wYXJlIG1vZGUuCisgKgorICogVGhlIGhhcmR3YXJlIGNvbXBhcmUgbW9kZSBwcm92aWRlcyBhIHdheSB0byBwcm9jZXNzIHRoZSBjb252ZXJzaW9uIHJlc3VsdCBhdXRvbWF0aWNhbGx5IGJ5IHVzaW5nIGhhcmR3YXJlLiBPbmx5IHRoZSByZXN1bHQKKyAqIGluIHRoZSBjb21wYXJlIHJhbmdlIGlzIGF2YWlsYWJsZS4gVG8gY29tcGFyZSB0aGUgcmFuZ2UsIHNlZSAiYWRjMTZfaGFyZHdhcmVfY29tcGFyZV9tb2RlX3QiIG9yIHRoZSBhcHBvcHJpYXRlIHJlZmVyZW5jZQorICogbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgICBQb2ludGVyIHRvIHRoZSAiYWRjMTZfaGFyZHdhcmVfY29tcGFyZV9jb25maWdfdCIgc3RydWN0dXJlLiBQYXNzaW5nICJOVUxMIiBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLwordm9pZCBBREMxNl9TZXRIYXJkd2FyZUNvbXBhcmVDb25maWcoQURDX1R5cGUgKmJhc2UsIGNvbnN0IGFkYzE2X2hhcmR3YXJlX2NvbXBhcmVfY29uZmlnX3QgKmNvbmZpZyk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0FEQzE2X0hBU19IV19BVkVSQUdFKSAmJiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfSFdfQVZFUkFHRQorLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgaGFyZHdhcmUgYXZlcmFnZSBtb2RlLgorICoKKyAqIFRoZSBoYXJkd2FyZSBhdmVyYWdlIG1vZGUgcHJvdmlkZXMgYSB3YXkgdG8gcHJvY2VzcyB0aGUgY29udmVyc2lvbiByZXN1bHQgYXV0b21hdGljYWxseSBieSB1c2luZyBoYXJkd2FyZS4gVGhlIG11bHRpcGxlCisgKiBjb252ZXJzaW9uIHJlc3VsdHMgYXJlIGFjY3VtdWxhdGVkIGFuZCBhdmVyYWdlZCBpbnRlcm5hbGx5IG1ha2luZyB0aGVtIGVhc2llciB0byByZWFkLgorICoKKyAqIEBwYXJhbSBiYXNlICBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtb2RlICBTZXR0aW5nIHRoZSBoYXJkd2FyZSBhdmVyYWdlIG1vZGUuIFNlZSAiYWRjMTZfaGFyZHdhcmVfYXZlcmFnZV9tb2RlX3QiLgorICovCit2b2lkIEFEQzE2X1NldEhhcmR3YXJlQXZlcmFnZShBRENfVHlwZSAqYmFzZSwgYWRjMTZfaGFyZHdhcmVfYXZlcmFnZV9tb2RlX3QgbW9kZSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQURDMTZfSEFTX0hXX0FWRVJBR0UgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQSkgJiYgRlNMX0ZFQVRVUkVfQURDMTZfSEFTX1BHQQorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgUEdBIGZvciB0aGUgY29udmVydGVyJ3MgZnJvbnQgZW5kLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyAgUG9pbnRlciB0byB0aGUgImFkYzE2X3BnYV9jb25maWdfdCIgc3RydWN0dXJlLiBQYXNzaW5nICJOVUxMIiBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLwordm9pZCBBREMxNl9TZXRQR0FDb25maWcoQURDX1R5cGUgKmJhc2UsIGNvbnN0IGFkYzE2X3BnYV9jb25maWdfdCAqY29uZmlnKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9BREMxNl9IQVNfUEdBICovCisKKy8qIQorICogQGJyaWVmICBHZXRzIHRoZSBzdGF0dXMgZmxhZ3Mgb2YgdGhlIGNvbnZlcnRlci4KKyAqCisgKiBAcGFyYW0gIGJhc2UgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHJldHVybiAgICAgIEZsYWdzJyBtYXNrIGlmIGluZGljYXRlZCBmbGFncyBhcmUgYXNzZXJ0ZWQuIFNlZSAiX2FkYzE2X3N0YXR1c19mbGFncyIuCisgKi8KK3VpbnQzMl90IEFEQzE2X0dldFN0YXR1c0ZsYWdzKEFEQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgIENsZWFycyB0aGUgc3RhdHVzIGZsYWdzIG9mIHRoZSBjb252ZXJ0ZXIuCisgKgorICogQHBhcmFtICBiYXNlIEFEQzE2IHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBtYXNrIE1hc2sgdmFsdWUgZm9yIHRoZSBjbGVhcmVkIGZsYWdzLiBTZWUgIl9hZGMxNl9zdGF0dXNfZmxhZ3MiLgorICovCit2b2lkIEFEQzE2X0NsZWFyU3RhdHVzRmxhZ3MoQURDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIENvbnZlcnNpb24gQ2hhbm5lbAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBjb252ZXJzaW9uIGNoYW5uZWwuCisgKgorICogVGhpcyBvcGVyYXRpb24gdHJpZ2dlcnMgdGhlIGNvbnZlcnNpb24gd2hlbiBpbiBzb2Z0d2FyZSB0cmlnZ2VyIG1vZGUuIFdoZW4gaW4gaGFyZHdhcmUgdHJpZ2dlciBtb2RlLCB0aGlzIEFQSQorICogY29uZmlndXJlcyB0aGUgY2hhbm5lbCB3aGlsZSB0aGUgZXh0ZXJuYWwgdHJpZ2dlciBzb3VyY2UgaGVscHMgdG8gdHJpZ2dlciB0aGUgY29udmVyc2lvbi4KKyAqCisgKiBOb3RlIHRoYXQgdGhlICJDaGFubmVsIEdyb3VwIiBoYXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKyAqIFRvIGFsbG93IHNlcXVlbnRpYWwgY29udmVyc2lvbnMgb2YgdGhlIEFEQyB0byBiZSB0cmlnZ2VyZWQgYnkgaW50ZXJuYWwgcGVyaXBoZXJhbHMsIHRoZSBBREMgaGFzIG1vcmUgdGhhbiBvbmUKKyAqIGdyb3VwIG9mIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMsIG9uZSBmb3IgZWFjaCBjb252ZXJzaW9uLiBUaGUgY2hhbm5lbCBncm91cCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoaWNoIGdyb3VwIG9mCisgKiByZWdpc3RlcnMgYXJlIHVzZWQsIGZvciBleGFtcGxlLCBjaGFubmVsIGdyb3VwIDAgaXMgZm9yIEdyb3VwIEEgcmVnaXN0ZXJzIGFuZCBjaGFubmVsIGdyb3VwIDEgaXMgZm9yIEdyb3VwIEIgcmVnaXN0ZXJzLiBUaGUKKyAqIGNoYW5uZWwgZ3JvdXBzIGFyZSB1c2VkIGluIGEgInBpbmctcG9uZyIgYXBwcm9hY2ggdG8gY29udHJvbCB0aGUgQURDIG9wZXJhdGlvbi4gIEF0IGFueSBwb2ludCwgb25seSBvbmUgb2YKKyAqIHRoZSBjaGFubmVsIGdyb3VwcyBpcyBhY3RpdmVseSBjb250cm9sbGluZyBBREMgY29udmVyc2lvbnMuIFRoZSBjaGFubmVsIGdyb3VwIDAgaXMgdXNlZCBmb3IgYm90aCBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUKKyAqIHRyaWdnZXIgbW9kZXMuIENoYW5uZWwgZ3JvdXAgMSBhbmQgZ3JlYXRlciBpbmRpY2F0ZXMgbXVsdGlwbGUgY2hhbm5lbCBncm91cCByZWdpc3RlcnMgZm9yCisgKiB1c2Ugb25seSBpbiBoYXJkd2FyZSB0cmlnZ2VyIG1vZGUuIFNlZSB0aGUgY2hpcCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZSBhcHByb3ByaWF0ZSBNQ1UgcmVmZXJlbmNlIG1hbnVhbCBmb3IgdGhlCisgKiBudW1iZXIgb2YgU0MxbiByZWdpc3RlcnMgKGNoYW5uZWwgZ3JvdXBzKSBzcGVjaWZpYyB0byB0aGlzIGRldmljZS4gIENoYW5uZWwgZ3JvdXAgMSBvciBncmVhdGVyIGFyZSBub3QgdXNlZAorICogZm9yIHNvZnR3YXJlIHRyaWdnZXIgb3BlcmF0aW9uLiBUaGVyZWZvcmUsIHdyaXRpbmcgdG8gdGhlc2UgY2hhbm5lbCBncm91cHMgZG9lcyBub3QgaW5pdGlhdGUgYSBuZXcgY29udmVyc2lvbi4KKyAqIFVwZGF0aW5nIHRoZSBjaGFubmVsIGdyb3VwIDAgd2hpbGUgYSBkaWZmZXJlbnQgY2hhbm5lbCBncm91cCBpcyBhY3RpdmVseSBjb250cm9sbGluZyBhIGNvbnZlcnNpb24gaXMgYWxsb3dlZCBhbmQKKyAqIHZpY2UgdmVyc2EuIFdyaXRpbmcgYW55IG9mIHRoZSBjaGFubmVsIGdyb3VwIHJlZ2lzdGVycyB3aGlsZSB0aGF0IHNwZWNpZmljIGNoYW5uZWwgZ3JvdXAgaXMgYWN0aXZlbHkgY29udHJvbGxpbmcgYQorICogY29udmVyc2lvbiBhYm9ydHMgdGhlIGN1cnJlbnQgY29udmVyc2lvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgICBBREMxNiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsR3JvdXAgIENoYW5uZWwgZ3JvdXAgaW5kZXguCisgKiBAcGFyYW0gY29uZmlnICAgICAgICBQb2ludGVyIHRvIHRoZSAiYWRjMTZfY2hhbm5lbF9jb25maWdfdCIgc3RydWN0dXJlIGZvciB0aGUgY29udmVyc2lvbiBjaGFubmVsLgorICovCit2b2lkIEFEQzE2X1NldENoYW5uZWxDb25maWcoQURDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWxHcm91cCwgY29uc3QgYWRjMTZfY2hhbm5lbF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgIEdldHMgdGhlIGNvbnZlcnNpb24gdmFsdWUuCisgKgorICogQHBhcmFtICBiYXNlICAgICAgICAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIGNoYW5uZWxHcm91cCBDaGFubmVsIGdyb3VwIGluZGV4LgorICoKKyAqIEByZXR1cm4gICAgICAgICAgICAgIENvbnZlcnNpb24gdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgQURDMTZfR2V0Q2hhbm5lbENvbnZlcnNpb25WYWx1ZShBRENfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbEdyb3VwKQoreworICAgIGFzc2VydChjaGFubmVsR3JvdXAgPCBBRENfUl9DT1VOVCk7CisKKyAgICByZXR1cm4gYmFzZS0+UltjaGFubmVsR3JvdXBdOworfQorCisvKiEKKyAqIEBicmllZiAgR2V0cyB0aGUgc3RhdHVzIGZsYWdzIG9mIGNoYW5uZWwuCisgKgorICogQHBhcmFtICBiYXNlICAgICAgICAgQURDMTYgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIGNoYW5uZWxHcm91cCBDaGFubmVsIGdyb3VwIGluZGV4LgorICoKKyAqIEByZXR1cm4gICAgICAgICAgICAgIEZsYWdzJyBtYXNrIGlmIGluZGljYXRlZCBmbGFncyBhcmUgYXNzZXJ0ZWQuIFNlZSAiX2FkYzE2X2NoYW5uZWxfc3RhdHVzX2ZsYWdzIi4KKyAqLwordWludDMyX3QgQURDMTZfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKEFEQ19UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsR3JvdXApOworCisvKiBAfSAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorLyohCisgKiBAfQorICovCisjZW5kaWYgLyogX0ZTTF9BREMxNl9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY2xvY2suYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4NWI5OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2Nsb2NrLmMKQEAgLTAsMCArMSwxMzc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAxNyAsIE5YUAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2Nsb2NrLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTWFjcm8gZGVmaW5pdGlvbiByZW1hcCB3b3JrYXJvdW5kLiAqLworI2lmIChkZWZpbmVkKE1DR19DMl9FUkVGU19NQVNLKSAmJiAhKGRlZmluZWQoTUNHX0MyX0VSRUZTMF9NQVNLKSkpCisjZGVmaW5lIE1DR19DMl9FUkVGUzBfTUFTSyBNQ0dfQzJfRVJFRlNfTUFTSworI2VuZGlmCisjaWYgKGRlZmluZWQoTUNHX0MyX0hHT19NQVNLKSAmJiAhKGRlZmluZWQoTUNHX0MyX0hHTzBfTUFTSykpKQorI2RlZmluZSBNQ0dfQzJfSEdPMF9NQVNLIE1DR19DMl9IR09fTUFTSworI2VuZGlmCisjaWYgKGRlZmluZWQoTUNHX0MyX1JBTkdFX01BU0spICYmICEoZGVmaW5lZChNQ0dfQzJfUkFOR0UwX01BU0spKSkKKyNkZWZpbmUgTUNHX0MyX1JBTkdFMF9NQVNLIE1DR19DMl9SQU5HRV9NQVNLCisjZW5kaWYKKyNpZiAoZGVmaW5lZChNQ0dfQzZfQ01FX01BU0spICYmICEoZGVmaW5lZChNQ0dfQzZfQ01FMF9NQVNLKSkpCisjZGVmaW5lIE1DR19DNl9DTUUwX01BU0sgTUNHX0M2X0NNRV9NQVNLCisjZW5kaWYKKworLyogUExMIGZpeGVkIG11bHRpcGxpZXIgd2hlbiB0aGVyZSBpcyBub3QgUFJESVYgYW5kIFZESVYuICovCisjZGVmaW5lIFBMTF9GSVhFRF9NVUxUICgzNzVVKQorLyogTWF4IGZyZXF1ZW5jeSBvZiB0aGUgcmVmZXJlbmNlIGNsb2NrIHVzZWQgZm9yIGludGVybmFsIGNsb2NrIHRyaW0uICovCisjZGVmaW5lIFRSSU1fUkVGX0NMS19NSU4gKDgwMDAwMDBVKQorLyogTWluIGZyZXF1ZW5jeSBvZiB0aGUgcmVmZXJlbmNlIGNsb2NrIHVzZWQgZm9yIGludGVybmFsIGNsb2NrIHRyaW0uICovCisjZGVmaW5lIFRSSU1fUkVGX0NMS19NQVggKDE2MDAwMDAwVSkKKy8qIE1heCB0cmltIHZhbHVlIG9mIGZhc3QgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLiAqLworI2RlZmluZSBUUklNX0ZJUkNfTUFYICg1MDAwMDAwVSkKKy8qIE1pbiB0cmltIHZhbHVlIG9mIGZhc3QgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLiAqLworI2RlZmluZSBUUklNX0ZJUkNfTUlOICgzMDAwMDAwVSkKKy8qIE1heCB0cmltIHZhbHVlIG9mIGZhc3QgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLiAqLworI2RlZmluZSBUUklNX1NJUkNfTUFYICgzOTA2M1UpCisvKiBNaW4gdHJpbSB2YWx1ZSBvZiBmYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4gKi8KKyNkZWZpbmUgVFJJTV9TSVJDX01JTiAoMzEyNTBVKQorCisjZGVmaW5lIE1DR19TX0lSQ1NUX1ZBTCAoKE1DRy0+UyAmIE1DR19TX0lSQ1NUX01BU0spID4+IE1DR19TX0lSQ1NUX1NISUZUKQorI2RlZmluZSBNQ0dfU19DTEtTVF9WQUwgKChNQ0ctPlMgJiBNQ0dfU19DTEtTVF9NQVNLKSA+PiBNQ0dfU19DTEtTVF9TSElGVCkKKyNkZWZpbmUgTUNHX1NfSVJFRlNUX1ZBTCAoKE1DRy0+UyAmIE1DR19TX0lSRUZTVF9NQVNLKSA+PiBNQ0dfU19JUkVGU1RfU0hJRlQpCisjZGVmaW5lIE1DR19TX1BMTFNUX1ZBTCAoKE1DRy0+UyAmIE1DR19TX1BMTFNUX01BU0spID4+IE1DR19TX1BMTFNUX1NISUZUKQorI2RlZmluZSBNQ0dfQzFfRlJESVZfVkFMICgoTUNHLT5DMSAmIE1DR19DMV9GUkRJVl9NQVNLKSA+PiBNQ0dfQzFfRlJESVZfU0hJRlQpCisjZGVmaW5lIE1DR19DMl9MUF9WQUwgKChNQ0ctPkMyICYgTUNHX0MyX0xQX01BU0spID4+IE1DR19DMl9MUF9TSElGVCkKKyNkZWZpbmUgTUNHX0MyX1JBTkdFX1ZBTCAoKE1DRy0+QzIgJiBNQ0dfQzJfUkFOR0VfTUFTSykgPj4gTUNHX0MyX1JBTkdFX1NISUZUKQorI2RlZmluZSBNQ0dfU0NfRkNSRElWX1ZBTCAoKE1DRy0+U0MgJiBNQ0dfU0NfRkNSRElWX01BU0spID4+IE1DR19TQ19GQ1JESVZfU0hJRlQpCisjZGVmaW5lIE1DR19TMl9QTExDU1RfVkFMICgoTUNHLT5TMiAmIE1DR19TMl9QTExDU1RfTUFTSykgPj4gTUNHX1MyX1BMTENTVF9TSElGVCkKKyNkZWZpbmUgTUNHX0M3X09TQ1NFTF9WQUwgKChNQ0ctPkM3ICYgTUNHX0M3X09TQ1NFTF9NQVNLKSA+PiBNQ0dfQzdfT1NDU0VMX1NISUZUKQorI2RlZmluZSBNQ0dfQzRfRE1YMzJfVkFMICgoTUNHLT5DNCAmIE1DR19DNF9ETVgzMl9NQVNLKSA+PiBNQ0dfQzRfRE1YMzJfU0hJRlQpCisjZGVmaW5lIE1DR19DNF9EUlNUX0RSU19WQUwgKChNQ0ctPkM0ICYgTUNHX0M0X0RSU1RfRFJTX01BU0spID4+IE1DR19DNF9EUlNUX0RSU19TSElGVCkKKyNkZWZpbmUgTUNHX0M3X1BMTDMyS1JFRlNFTF9WQUwgKChNQ0ctPkM3ICYgTUNHX0M3X1BMTDMyS1JFRlNFTF9NQVNLKSA+PiBNQ0dfQzdfUExMMzJLUkVGU0VMX1NISUZUKQorI2RlZmluZSBNQ0dfQzVfUExMUkVGU0VMMF9WQUwgKChNQ0ctPkM1ICYgTUNHX0M1X1BMTFJFRlNFTDBfTUFTSykgPj4gTUNHX0M1X1BMTFJFRlNFTDBfU0hJRlQpCisjZGVmaW5lIE1DR19DMTFfUExMUkVGU0VMMV9WQUwgKChNQ0ctPkMxMSAmIE1DR19DMTFfUExMUkVGU0VMMV9NQVNLKSA+PiBNQ0dfQzExX1BMTFJFRlNFTDFfU0hJRlQpCisjZGVmaW5lIE1DR19DMTFfUFJESVYxX1ZBTCAoKE1DRy0+QzExICYgTUNHX0MxMV9QUkRJVjFfTUFTSykgPj4gTUNHX0MxMV9QUkRJVjFfU0hJRlQpCisjZGVmaW5lIE1DR19DMTJfVkRJVjFfVkFMICgoTUNHLT5DMTIgJiBNQ0dfQzEyX1ZESVYxX01BU0spID4+IE1DR19DMTJfVkRJVjFfU0hJRlQpCisjZGVmaW5lIE1DR19DNV9QUkRJVjBfVkFMICgoTUNHLT5DNSAmIE1DR19DNV9QUkRJVjBfTUFTSykgPj4gTUNHX0M1X1BSRElWMF9TSElGVCkKKyNkZWZpbmUgTUNHX0M2X1ZESVYwX1ZBTCAoKE1DRy0+QzYgJiBNQ0dfQzZfVkRJVjBfTUFTSykgPj4gTUNHX0M2X1ZESVYwX1NISUZUKQorCisjZGVmaW5lIE9TQ19NT0RFX01BU0sgKE1DR19DMl9FUkVGUzBfTUFTSyB8IE1DR19DMl9IR08wX01BU0sgfCBNQ0dfQzJfUkFOR0UwX01BU0spCisKKyNkZWZpbmUgU0lNX0NMS0RJVjFfT1VURElWMV9WQUwgKChTSU0tPkNMS0RJVjEgJiBTSU1fQ0xLRElWMV9PVVRESVYxX01BU0spID4+IFNJTV9DTEtESVYxX09VVERJVjFfU0hJRlQpCisjZGVmaW5lIFNJTV9DTEtESVYxX09VVERJVjRfVkFMICgoU0lNLT5DTEtESVYxICYgU0lNX0NMS0RJVjFfT1VURElWNF9NQVNLKSA+PiBTSU1fQ0xLRElWMV9PVVRESVY0X1NISUZUKQorI2RlZmluZSBTSU1fU09QVDFfT1NDMzJLU0VMX1ZBTCAoKFNJTS0+U09QVDEgJiBTSU1fU09QVDFfT1NDMzJLU0VMX01BU0spID4+IFNJTV9TT1BUMV9PU0MzMktTRUxfU0hJRlQpCisKKy8qIE1DR19TX0NMS1NUIGRlZmluaXRpb24uICovCitlbnVtIF9tY2dfY2xrb3V0X3N0YXQKK3sKKyAgICBrTUNHX0Nsa091dFN0YXRGbGwsIC8qIEZMTC4gICAgICAgICAgICAqLworICAgIGtNQ0dfQ2xrT3V0U3RhdEludCwgLyogSW50ZXJuYWwgY2xvY2suICovCisgICAga01DR19DbGtPdXRTdGF0RXh0LCAvKiBFeHRlcm5hbCBjbG9jay4gKi8KKyAgICBrTUNHX0Nsa091dFN0YXRQbGwgIC8qIFBMTC4gICAgICAgICAgICAqLworfTsKKworLyogTUNHX1NfUExMU1QgZGVmaW5pdGlvbi4gKi8KK2VudW0gX21jZ19wbGxzdAoreworICAgIGtNQ0dfUGxsc3RGbGwsIC8qIEZMTCBpcyB1c2VkLiAqLworICAgIGtNQ0dfUGxsc3RQbGwgIC8qIFBMTCBpcyB1c2VkLiAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2xvdyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5LiAqLworc3RhdGljIHVpbnQzMl90IHNfc2xvd0lyY0ZyZXEgPSAzMjc2OFU7CisvKiBGYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kuICovCitzdGF0aWMgdWludDMyX3Qgc19mYXN0SXJjRnJlcSA9IDQwMDAwMDBVOworCisvKiBFeHRlcm5hbCBYVEFMMCAoT1NDMCkgY2xvY2sgZnJlcXVlbmN5LiAqLwordWludDMyX3QgZ194dGFsMEZyZXE7CisvKiBFeHRlcm5hbCBYVEFMMzJLIGNsb2NrIGZyZXF1ZW5jeS4gKi8KK3VpbnQzMl90IGdfeHRhbDMyRnJlcTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIE1DRyBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIEdldCB0aGUgY3VycmVudCBNQ0cgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4gSXQgaXMKKyAqIHRoZSBmcmVxdWVuY3kgc2VsZWN0IGJ5IE1DR19DN1tPU0NTRUxdLiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gTUNHIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3N0YXRpYyB1aW50MzJfdCBDTE9DS19HZXRNY2dFeHRDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIE1DRyBGTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBHZXQgdGhlIGN1cnJlbnQgTUNHIEZMTCBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGluIEh6LiBJdCBpcworICogdGhlIGZyZXF1ZW5jeSBhZnRlciBieSBNQ0dfQzFbRlJESVZdLiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gTUNHIEZMTCBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0RmxsRXh0UmVmQ2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBNQ0cgRkxMIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kuCisgKgorICogR2V0IHRoZSBjdXJyZW50IE1DRyBGTEwgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4gSXQgaXMKKyAqIHRoZSBmcmVxdWVuY3kgc2VsZWN0IGJ5IE1DR19DMVtJUkVGU10uIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24uCisgKgorICogQHJldHVybiBNQ0cgRkxMIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3N0YXRpYyB1aW50MzJfdCBDTE9DS19HZXRGbGxSZWZDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIGZyZXF1ZW5jeSBvZiBjbG9jayBzZWxlY3RlZCBieSBNQ0dfQzJbSVJDU10uCisgKgorICogVGhpcyBjbG9jaydzIHR3byBvdXRwdXQ6CisgKiAgMS4gTUNHT1VUQ0xLIHdoZW4gTUNHX1NbQ0xLU1RdPTAuCisgKiAgMi4gTUNHSVJDTEsgd2hlbiBNQ0dfQzFbSVJDTEtFTl09MS4KKyAqCisgKiBAcmV0dXJuIFRoZSBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3N0YXRpYyB1aW50MzJfdCBDTE9DS19HZXRJbnRlcm5hbFJlZkNsa1NlbGVjdEZyZXEodm9pZCk7CisKKworLyohCisgKiBAYnJpZWYgQ2FsY3VsYXRlIHRoZSBSQU5HRSB2YWx1ZSBiYXNlIG9uIGNyeXN0YWwgZnJlcXVlbmN5LgorICoKKyAqIFRvIHNldHVwIGV4dGVybmFsIGNyeXN0YWwgb3NjaWxsYXRvciwgbXVzdCBzZXQgdGhlIHJlZ2lzdGVyIGJpdHMgUkFOR0UKKyAqIGJhc2Ugb24gdGhlIGNyeXN0YWwgZnJlcXVlbmN5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFJBTkdFIGJhc2Ugb24gdGhlCisgKiBpbnB1dCBmcmVxdWVuY3kuIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIGZyZXEgQ3J5c3RhbCBmcmVxdWVuY3kgaW4gSHouCisgKiBAcmV0dXJuIFRoZSBSQU5HRSB2YWx1ZS4KKyAqLworc3RhdGljIHVpbnQ4X3QgQ0xPQ0tfR2V0T3NjUmFuZ2VGcm9tRnJlcSh1aW50MzJfdCBmcmVxKTsKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTUNHX1VTRVJfQ09ORklHX0ZMTF9TVEFCTEVfREVMQVlfRU4KKy8qIQorICogQGJyaWVmIERlbGF5IGZ1bmN0aW9uIHRvIHdhaXQgRkxMIHN0YWJsZS4KKyAqCisgKiBEZWxheSBmdW5jdGlvbiB0byB3YWl0IEZMTCBzdGFibGUgaW4gRkVJIG1vZGUgb3IgRkVFIG1vZGUsIHNob3VsZCB3YWl0IGF0IGxlYXN0CisgKiAxbXMuIEV2ZXJ5IHRpbWUgY2hhbmdlcyBGTEwgc2V0dGluZywgc2hvdWxkIHdhaXQgdGhpcyB0aW1lIGZvciBGTEwgc3RhYmxlLgorICovCit2b2lkIENMT0NLX0ZsbFN0YWJsZURlbGF5KHZvaWQpCit7CisgICAgLyoKKyAgICAgICBTaG91bGQgd2FpdCBhdCBsZWFzdCAxbXMuIEJlY2F1c2UgaW4gdGhlc2UgbW9kZXMsIHRoZSBjb3JlIGNsb2NrIGlzIDEwME1IegorICAgICAgIGF0IG1vc3QsIHNvIHRoaXMgZnVuY3Rpb24gY291bGQgb2J0YWluIHRoZSAxbXMgZGVsYXkuCisgICAgICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgaSA9IDMwMDAwVTsKKyAgICB3aGlsZSAoaS0tKQorICAgIHsKKyAgICAgICAgX19OT1AoKTsKKyAgICB9Cit9CisjZWxzZSAvKiBXaXRoIE1DR19VU0VSX0NPTkZJR19GTExfU1RBQkxFX0RFTEFZX0VOIGRlZmluZWQuICovCisvKiBPbmNlIHVzZXIgZGVmaW5lcyB0aGUgTUNHX1VTRVJfQ09ORklHX0ZMTF9TVEFCTEVfREVMQVlfRU4gdG8gdXNlIHRoZWlyIG93biBkZWxheSBmdW5jdGlvbiwgaGUgaGFzIHRvCisgKiBjcmVhdGUgaGlzIG93biBDTE9DS19GbGxTdGFibGVEZWxheSgpIGZ1bmN0aW9uIGluIGFwcGxpY2F0aW9uIGNvZGUuIFNpbmNlIHRoZSBjbG9jayBmdW5jdGlvbnMgaW4gdGhpcworICogZmlsZSB3b3VsZCBjYWxsIHRoZSBDTE9DS19GbGxTdGFibGVEZWxheSgpIHJlZ2FyZG5lc3MgaG93IGl0IGlzIGRlZmluZWQuCisgKi8KK2V4dGVybiB2b2lkIENMT0NLX0ZsbFN0YWJsZURlbGF5KHZvaWQpOworI2VuZGlmIC8qIE1DR19VU0VSX0NPTkZJR19GTExfU1RBQkxFX0RFTEFZX0VOICovCisKK3N0YXRpYyB1aW50MzJfdCBDTE9DS19HZXRNY2dFeHRDbGtGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgZnJlcTsKKworICAgIHN3aXRjaCAoTUNHX0M3X09TQ1NFTF9WQUwpCisgICAgeworICAgICAgICBjYXNlIDBVOgorICAgICAgICAgICAgLyogUGxlYXNlIGNhbGwgQ0xPQ0tfU2V0WHRhbDBGcmVxIGJhc2Ugb24gYm9hcmQgc2V0dGluZyBiZWZvcmUgdXNpbmcgT1NDMCBjbG9jay4gKi8KKyAgICAgICAgICAgIGFzc2VydChnX3h0YWwwRnJlcSk7CisgICAgICAgICAgICBmcmVxID0gZ194dGFsMEZyZXE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxVToKKyAgICAgICAgICAgIC8qIFBsZWFzZSBjYWxsIENMT0NLX1NldFh0YWwzMkZyZXEgYmFzZSBvbiBib2FyZCBzZXR0aW5nIGJlZm9yZSB1c2luZyBYVEFMMzJLL1JUQ19DTEtJTiBjbG9jay4gKi8KKyAgICAgICAgICAgIGFzc2VydChnX3h0YWwzMkZyZXEpOworICAgICAgICAgICAgZnJlcSA9IGdfeHRhbDMyRnJlcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnJlcSA9IDBVOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZyZXE7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBDTE9DS19HZXRGbGxFeHRSZWZDbGtGcmVxKHZvaWQpCit7CisgICAgLyogRmxsRXh0UmVmID0gTWNnRXh0UmVmIC8gRmxsRXh0UmVmRGl2ICovCisgICAgdWludDhfdCBmcmRpdjsKKyAgICB1aW50OF90IHJhbmdlOworICAgIHVpbnQ4X3Qgb3Njc2VsOworCisgICAgdWludDMyX3QgZnJlcSA9IENMT0NLX0dldE1jZ0V4dENsa0ZyZXEoKTsKKworICAgIGlmICghZnJlcSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcmVxOworICAgIH0KKworICAgIGZyZGl2ID0gTUNHX0MxX0ZSRElWX1ZBTDsKKyAgICBmcmVxID4+PSBmcmRpdjsKKworICAgIHJhbmdlID0gTUNHX0MyX1JBTkdFX1ZBTDsKKyAgICBvc2NzZWwgPSBNQ0dfQzdfT1NDU0VMX1ZBTDsKKworICAgIC8qCisgICAgICAgV2hlbiBzaG91bGQgdXNlIGRpdmlkZXIgMzIsIDY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAxMjgwLCAxNTM2LgorICAgICAgIDEuIE1DR19DN1tPU0NTRUxdIHNlbGVjdHMgSVJDNDhNLgorICAgICAgIDIuIE1DR19DN1tPU0NTRUxdIHNlbGVjdHMgT1NDMCBhbmQgTUNHX0MyW1JBTkdFXSBpcyBub3QgMC4KKyAgICAqLworICAgIGlmICgoKDBVICE9IHJhbmdlKQorICAgICAgICAgJiYgKGtNQ0dfT3Njc2VsT3NjID09IG9zY3NlbCkKKyAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgeworICAgICAgICBzd2l0Y2ggKGZyZGl2KQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgZnJlcSA+Pj0gNXU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgLyogNjQqMjA9MTI4MCAqLworICAgICAgICAgICAgICAgIGZyZXEgLz0gMjB1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgIC8qIDEyOCoxMj0xNTM2ICovCisgICAgICAgICAgICAgICAgZnJlcSAvPSAxMnU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGZyZXEgPSAwdTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmcmVxOworfQorCitzdGF0aWMgdWludDMyX3QgQ0xPQ0tfR2V0SW50ZXJuYWxSZWZDbGtTZWxlY3RGcmVxKHZvaWQpCit7CisgICAgaWYgKGtNQ0dfSXJjU2xvdyA9PSBNQ0dfU19JUkNTVF9WQUwpCisgICAgeworICAgICAgICAvKiBTbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCovCisgICAgICAgIHJldHVybiBzX3Nsb3dJcmNGcmVxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBGYXN0IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCovCisgICAgICAgIHJldHVybiBzX2Zhc3RJcmNGcmVxID4+IE1DR19TQ19GQ1JESVZfVkFMOworICAgIH0KK30KKworc3RhdGljIHVpbnQzMl90IENMT0NLX0dldEZsbFJlZkNsa0ZyZXEodm9pZCkKK3sKKyAgICAvKiBJZiB1c2UgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLiAqLworICAgIGlmIChrTUNHX0ZsbFNyY0V4dGVybmFsID09IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgICAgICByZXR1cm4gQ0xPQ0tfR2V0RmxsRXh0UmVmQ2xrRnJlcSgpOworICAgIH0KKyAgICAvKiBJZiB1c2UgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLiAqLworICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzX3Nsb3dJcmNGcmVxOworICAgIH0KK30KKworCitzdGF0aWMgdWludDhfdCBDTE9DS19HZXRPc2NSYW5nZUZyb21GcmVxKHVpbnQzMl90IGZyZXEpCit7CisgICAgdWludDhfdCByYW5nZTsKKworICAgIGlmIChmcmVxIDw9IDM5MDYzVSkKKyAgICB7CisgICAgICAgIHJhbmdlID0gMFU7CisgICAgfQorICAgIGVsc2UgaWYgKGZyZXEgPD0gODAwMDAwMFUpCisgICAgeworICAgICAgICByYW5nZSA9IDFVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByYW5nZSA9IDJVOworICAgIH0KKworICAgIHJldHVybiByYW5nZTsKK30KKworCit1aW50MzJfdCBDTE9DS19HZXRFcjMya0Nsa0ZyZXEodm9pZCkKK3sKKyAgICB1aW50MzJfdCBmcmVxOworCisgICAgc3dpdGNoIChTSU1fU09QVDFfT1NDMzJLU0VMX1ZBTCkKKyAgICB7CisgICAgICAgIGNhc2UgMFU6IC8qIE9TQyAzMmsgY2xvY2sgICovCisgICAgICAgIGNhc2UgMlU6IC8qIFJUQyAzMmsgY2xvY2sgICovCisgICAgICAgICAgICAvKiBQbGVhc2UgY2FsbCBDTE9DS19TZXRYdGFsMzJGcmVxIGJhc2Ugb24gYm9hcmQgc2V0dGluZyBiZWZvcmUgdXNpbmcgWFRBTDMySy9SVENfQ0xLSU4gY2xvY2suICovCisgICAgICAgICAgICBhc3NlcnQoZ194dGFsMzJGcmVxKTsKKyAgICAgICAgICAgIGZyZXEgPSBnX3h0YWwzMkZyZXE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzVTogLyogTFBPIGNsb2NrICAgICAgKi8KKyAgICAgICAgICAgIGZyZXEgPSBMUE9fQ0xLX0ZSRVE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZyZXEgPSAwVTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZnJlcTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0T3NjMEVyQ2xrRnJlcSh2b2lkKQoreworICAgIC8qIFBsZWFzZSBjYWxsIENMT0NLX1NldFh0YWwwRnJlcSBiYXNlIG9uIGJvYXJkIHNldHRpbmcgYmVmb3JlIHVzaW5nIE9TQzAgY2xvY2suICovCisgICAgYXNzZXJ0KGdfeHRhbDBGcmVxKTsKKyAgICByZXR1cm4gZ194dGFsMEZyZXE7Cit9CisKK3VpbnQzMl90IENMT0NLX0dldFBsYXRDbGtGcmVxKHZvaWQpCit7CisgICAgcmV0dXJuIENMT0NLX0dldE91dENsa0ZyZXEoKSAvIChTSU1fQ0xLRElWMV9PVVRESVYxX1ZBTCArIDEpOworfQorCit1aW50MzJfdCBDTE9DS19HZXRGbGFzaENsa0ZyZXEodm9pZCkKK3sKKyAgICB1aW50MzJfdCBmcmVxOworCisgICAgZnJlcSA9IENMT0NLX0dldE91dENsa0ZyZXEoKSAvIChTSU1fQ0xLRElWMV9PVVRESVYxX1ZBTCArIDEpOworICAgIGZyZXEgLz0gKFNJTV9DTEtESVYxX09VVERJVjRfVkFMICsgMSk7CisKKyAgICByZXR1cm4gZnJlcTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0QnVzQ2xrRnJlcSh2b2lkKQoreworICAgIHVpbnQzMl90IGZyZXE7CisKKyAgICBmcmVxID0gQ0xPQ0tfR2V0T3V0Q2xrRnJlcSgpIC8gKFNJTV9DTEtESVYxX09VVERJVjFfVkFMICsgMSk7CisgICAgZnJlcSAvPSAoU0lNX0NMS0RJVjFfT1VURElWNF9WQUwgKyAxKTsKKworICAgIHJldHVybiBmcmVxOworfQorCit1aW50MzJfdCBDTE9DS19HZXRDb3JlU3lzQ2xrRnJlcSh2b2lkKQoreworICAgIHJldHVybiBDTE9DS19HZXRPdXRDbGtGcmVxKCkgLyAoU0lNX0NMS0RJVjFfT1VURElWMV9WQUwgKyAxKTsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0RnJlcShjbG9ja19uYW1lX3QgY2xvY2tOYW1lKQoreworICAgIHVpbnQzMl90IGZyZXE7CisKKyAgICBzd2l0Y2ggKGNsb2NrTmFtZSkKKyAgICB7CisgICAgICAgIGNhc2Uga0NMT0NLX0NvcmVTeXNDbGs6CisgICAgICAgIGNhc2Uga0NMT0NLX1BsYXRDbGs6CisgICAgICAgICAgICBmcmVxID0gQ0xPQ0tfR2V0T3V0Q2xrRnJlcSgpIC8gKFNJTV9DTEtESVYxX09VVERJVjFfVkFMICsgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0xPQ0tfQnVzQ2xrOgorICAgICAgICBjYXNlIGtDTE9DS19GbGFzaENsazoKKyAgICAgICAgICAgIGZyZXEgPSBDTE9DS19HZXRPdXRDbGtGcmVxKCkgLyAoU0lNX0NMS0RJVjFfT1VURElWMV9WQUwgKyAxKTsKKyAgICAgICAgICAgIGZyZXEgLz0gKFNJTV9DTEtESVYxX09VVERJVjRfVkFMICsgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0xPQ0tfRXIzMmtDbGs6CisgICAgICAgICAgICBmcmVxID0gQ0xPQ0tfR2V0RXIzMmtDbGtGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0xPQ0tfTWNnSW50ZXJuYWxSZWZDbGs6CisgICAgICAgICAgICBmcmVxID0gQ0xPQ0tfR2V0SW50ZXJuYWxSZWZDbGtGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0xPQ0tfTWNnRmxsQ2xrOgorICAgICAgICAgICAgZnJlcSA9IENMT0NLX0dldEZsbEZyZXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtDTE9DS19McG9DbGs6CisgICAgICAgICAgICBmcmVxID0gTFBPX0NMS19GUkVROworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NMT0NLX09zYzBFckNsazoKKyAgICAgICAgICAgIC8qIFBsZWFzZSBjYWxsIENMT0NLX1NldFh0YWwwRnJlcSBiYXNlIG9uIGJvYXJkIHNldHRpbmcgYmVmb3JlIHVzaW5nIE9TQzAgY2xvY2suICovCisgICAgICAgICAgICBhc3NlcnQoZ194dGFsMEZyZXEpOworICAgICAgICAgICAgZnJlcSA9IGdfeHRhbDBGcmVxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcmVxID0gMFU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZnJlcTsKK30KKwordm9pZCBDTE9DS19TZXRTaW1Db25maWcoc2ltX2Nsb2NrX2NvbmZpZ190IGNvbnN0ICpjb25maWcpCit7CisgICAgU0lNLT5DTEtESVYxID0gY29uZmlnLT5jbGtkaXYxOworICAgIENMT0NLX1NldEVyMzJrQ2xvY2soY29uZmlnLT5lcjMya1NyYyk7Cit9CisKK3VpbnQzMl90IENMT0NLX0dldE91dENsa0ZyZXEodm9pZCkKK3sKKyAgICB1aW50MzJfdCBtY2dvdXRjbGs7CisgICAgdWludDMyX3QgY2xrc3QgPSBNQ0dfU19DTEtTVF9WQUw7CisKKyAgICBzd2l0Y2ggKGNsa3N0KQorICAgIHsKKyAgICAgICAgY2FzZSBrTUNHX0Nsa091dFN0YXRGbGw6CisgICAgICAgICAgICBtY2dvdXRjbGsgPSBDTE9DS19HZXRGbGxGcmVxKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTUNHX0Nsa091dFN0YXRJbnQ6CisgICAgICAgICAgICBtY2dvdXRjbGsgPSBDTE9DS19HZXRJbnRlcm5hbFJlZkNsa1NlbGVjdEZyZXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtNQ0dfQ2xrT3V0U3RhdEV4dDoKKyAgICAgICAgICAgIG1jZ291dGNsayA9IENMT0NLX0dldE1jZ0V4dENsa0ZyZXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbWNnb3V0Y2xrID0gMFU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG1jZ291dGNsazsKK30KKwordWludDMyX3QgQ0xPQ0tfR2V0RmxsRnJlcSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBmbGxGYWN0b3JUYWJsZVs0XVsyXSA9IHt7NjQwLCA3MzJ9LCB7MTI4MCwgMTQ2NH0sIHsxOTIwLCAyMTk3fSwgezI1NjAsIDI5Mjl9fTsKKworICAgIHVpbnQ4X3QgZHJzLCBkbXgzMjsKKyAgICB1aW50MzJfdCBmcmVxOworCisgICAgLyogSWYgRkxMIGlzIG5vdCBlbmFibGVkIGN1cnJlbnRseSwgdGhlbiByZXR1cm4gMFUuICovCisgICAgaWYgKChNQ0ctPkMyICYgTUNHX0MyX0xQX01BU0spCisgICAgICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gMFU7CisgICAgfQorCisgICAgLyogR2V0IEZMTCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5LiAqLworICAgIGZyZXEgPSBDTE9DS19HZXRGbGxSZWZDbGtGcmVxKCk7CisgICAgaWYgKCFmcmVxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyZXE7CisgICAgfQorCisgICAgZHJzID0gTUNHX0M0X0RSU1RfRFJTX1ZBTDsKKyAgICBkbXgzMiA9IE1DR19DNF9ETVgzMl9WQUw7CisKKyAgICByZXR1cm4gZnJlcSAqIGZsbEZhY3RvclRhYmxlW2Ryc11bZG14MzJdOworfQorCit1aW50MzJfdCBDTE9DS19HZXRJbnRlcm5hbFJlZkNsa0ZyZXEodm9pZCkKK3sKKyAgICAvKiBJZiBNQ0dJUkNMSyBpcyBnYXRlZC4gKi8KKyAgICBpZiAoIShNQ0ctPkMxICYgTUNHX0MxX0lSQ0xLRU5fTUFTSykpCisgICAgeworICAgICAgICByZXR1cm4gMFU7CisgICAgfQorCisgICAgcmV0dXJuIENMT0NLX0dldEludGVybmFsUmVmQ2xrU2VsZWN0RnJlcSgpOworfQorCit1aW50MzJfdCBDTE9DS19HZXRGaXhlZEZyZXFDbGtGcmVxKHZvaWQpCit7CisgICAgdWludDMyX3QgZnJlcSA9IENMT0NLX0dldEZsbFJlZkNsa0ZyZXEoKTsKKworICAgIC8qIE1DR0ZGQ0xLIG11c3QgYmUgbm8gbW9yZSB0aGFuIE1DR09VVENMSy84LiAqLworICAgIGlmICgoZnJlcSkgJiYgKGZyZXEgPD0gKENMT0NLX0dldE91dENsa0ZyZXEoKSAvIDhVKSkpCisgICAgeworICAgICAgICByZXR1cm4gZnJlcTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDBVOworICAgIH0KK30KKworCitzdGF0dXNfdCBDTE9DS19TZXRFeHRlcm5hbFJlZkNsa0NvbmZpZyhtY2dfb3Njc2VsX3Qgb3Njc2VsKQoreworICAgIGJvb2wgbmVlZERlbGF5OworICAgIHVpbnQzMl90IGk7CisKKyNpZiAoZGVmaW5lZChNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKSAmJiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKQorICAgIC8qIElmIGNoYW5nZSBNQ0dfQzdbT1NDU0VMXSBhbmQgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHN5c3RlbSBjbG9jayBzb3VyY2UsIHJldHVybiBlcnJvci4gKi8KKyAgICBpZiAoKE1DR19DN19PU0NTRUxfVkFMICE9IG9zY3NlbCkgJiYgKCEoTUNHLT5TICYgTUNHX1NfSVJFRlNUX01BU0spKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Tb3VyY2VVc2VkOworICAgIH0KKyNlbmRpZiAvKiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNICovCisKKyAgICBpZiAoTUNHX0M3X09TQ1NFTF9WQUwgIT0gb3Njc2VsKQorICAgIHsKKyAgICAgICAgLyogSWYgY2hhbmdlIE9TQ1NFTCwgbmVlZCB0byBkZWxheSwgRVJSMDA5ODc4LiAqLworICAgICAgICBuZWVkRGVsYXkgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVkRGVsYXkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBNQ0ctPkM3ID0gKE1DRy0+QzcgJiB+TUNHX0M3X09TQ1NFTF9NQVNLKSB8IE1DR19DN19PU0NTRUwob3Njc2VsKTsKKyAgICBpZiAobmVlZERlbGF5KQorICAgIHsKKyAgICAgICAgLyogRVJSMDA5ODc4IERlbGF5IGF0IGxlYXN0IDUwIG1pY3JvLXNlY29uZHMgZm9yIGV4dGVybmFsIGNsb2NrIGNoYW5nZSB2YWxpZC4gKi8KKyAgICAgICAgaSA9IDE1MDBVOworICAgICAgICB3aGlsZSAoaS0tKQorICAgICAgICB7CisgICAgICAgICAgICBfX05PUCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgQ0xPQ0tfU2V0SW50ZXJuYWxSZWZDbGtDb25maWcodWludDhfdCBlbmFibGVNb2RlLCBtY2dfaXJjX21vZGVfdCBpcmNzLCB1aW50OF90IGZjcmRpdikKK3sKKyAgICB1aW50MzJfdCBtY2dPdXRDbGtTdGF0ZSA9IE1DR19TX0NMS1NUX1ZBTDsKKyAgICBtY2dfaXJjX21vZGVfdCBjdXJJcmNzID0gKG1jZ19pcmNfbW9kZV90KU1DR19TX0lSQ1NUX1ZBTDsKKyAgICB1aW50OF90IGN1ckZjcmRpdiA9IE1DR19TQ19GQ1JESVZfVkFMOworCisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICAvKiBJZiBNQ0dJUkNMSyBpcyB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UuICovCisgICAgaWYgKGtNQ0dfQ2xrT3V0U3RhdEludCA9PSBtY2dPdXRDbGtTdGF0ZSkKKyAgICB7CisgICAgICAgIC8qIElmIG5lZWQgdG8gY2hhbmdlIE1DR0lSQ0xLIHNvdXJjZSBvciBkcml2ZXIsIHJldHVybiBlcnJvci4gKi8KKyAgICAgICAgaWYgKCgoa01DR19JcmNGYXN0ID09IGN1cklyY3MpICYmIChmY3JkaXYgIT0gY3VyRmNyZGl2KSkgfHwgKGlyY3MgIT0gY3VySXJjcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Tb3VyY2VVc2VkOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBJZiBuZWVkIHRvIHVwZGF0ZSB0aGUgRkNSRElWLiAqLworICAgIGlmIChmY3JkaXYgIT0gY3VyRmNyZGl2KQorICAgIHsKKyAgICAgICAgLyogSWYgZmFzdCBJUkMgaXMgaW4gdXNlIGN1cnJlbnRseSwgY2hhbmdlIHRvIHNsb3cgSVJDLiAqLworICAgICAgICBpZiAoKGtNQ0dfSXJjRmFzdCA9PSBjdXJJcmNzKSAmJiAoKG1jZ091dENsa1N0YXRlID09IGtNQ0dfQ2xrT3V0U3RhdEludCkgfHwgKE1DRy0+QzEgJiBNQ0dfQzFfSVJDTEtFTl9NQVNLKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIE1DRy0+QzIgPSAoKE1DRy0+QzIgJiB+TUNHX0MyX0lSQ1NfTUFTSykgfCAoTUNHX0MyX0lSQ1Moa01DR19JcmNTbG93KSkpOworICAgICAgICAgICAgd2hpbGUgKE1DR19TX0lSQ1NUX1ZBTCAhPSBrTUNHX0lyY1Nsb3cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogVXBkYXRlIEZDUkRJVi4gKi8KKyAgICAgICAgTUNHLT5TQyA9IChNQ0ctPlNDICYgfihNQ0dfU0NfRkNSRElWX01BU0sgfCBNQ0dfU0NfQVRNRl9NQVNLIHwgTUNHX1NDX0xPQ1MwX01BU0spKSB8IE1DR19TQ19GQ1JESVYoZmNyZGl2KTsKKyAgICB9CisKKyAgICAvKiBTZXQgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIHNlbGVjdGlvbi4gKi8KKyAgICBNQ0ctPkMyID0gKE1DRy0+QzIgJiB+TUNHX0MyX0lSQ1NfTUFTSykgfCAoTUNHX0MyX0lSQ1MoaXJjcykpOworICAgIE1DRy0+QzEgPSAoTUNHLT5DMSAmIH4oTUNHX0MxX0lSQ0xLRU5fTUFTSyB8IE1DR19DMV9JUkVGU1RFTl9NQVNLKSkgfCAodWludDhfdCllbmFibGVNb2RlOworCisgICAgLyogSWYgTUNHSVJDTEsgaXMgdXNlZCwgbmVlZCB0byB3YWl0IGZvciBNQ0dfU19JUkNTVC4gKi8KKyAgICBpZiAoKG1jZ091dENsa1N0YXRlID09IGtNQ0dfQ2xrT3V0U3RhdEludCkgfHwgKGVuYWJsZU1vZGUgJiBrTUNHX0lyY2xrRW5hYmxlKSkKKyAgICB7CisgICAgICAgIHdoaWxlIChNQ0dfU19JUkNTVF9WQUwgIT0gaXJjcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworCisKK3ZvaWQgQ0xPQ0tfU2V0T3NjME1vbml0b3JNb2RlKG1jZ19tb25pdG9yX21vZGVfdCBtb2RlKQoreworICAgIC8qIENsZWFyIHRoZSBwcmV2aW91cyBmbGFnLCBNQ0dfU0NbTE9DUzBdLiAqLworICAgIE1DRy0+U0MgJj0gfk1DR19TQ19BVE1GX01BU0s7CisKKyAgICBpZiAoa01DR19Nb25pdG9yTm9uZSA9PSBtb2RlKQorICAgIHsKKyAgICAgICAgTUNHLT5DNiAmPSB+TUNHX0M2X0NNRTBfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGtNQ0dfTW9uaXRvckludCA9PSBtb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBNQ0ctPkMyICY9IH5NQ0dfQzJfTE9DUkUwX01BU0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBNQ0ctPkMyIHw9IE1DR19DMl9MT0NSRTBfTUFTSzsKKyAgICAgICAgfQorICAgICAgICBNQ0ctPkM2IHw9IE1DR19DNl9DTUUwX01BU0s7CisgICAgfQorfQorCisKK3ZvaWQgQ0xPQ0tfU2V0UnRjT3NjTW9uaXRvck1vZGUobWNnX21vbml0b3JfbW9kZV90IG1vZGUpCit7CisgICAgdWludDhfdCBtY2dfYzggPSBNQ0ctPkM4OworCisgICAgbWNnX2M4ICY9IH4oTUNHX0M4X0NNRTFfTUFTSyB8IE1DR19DOF9MT0NSRTFfTUFTSyk7CisKKyAgICBpZiAoa01DR19Nb25pdG9yTm9uZSAhPSBtb2RlKQorICAgIHsKKyAgICAgICAgaWYgKGtNQ0dfTW9uaXRvclJlc2V0ID09IG1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1jZ19jOCB8PSBNQ0dfQzhfTE9DUkUxX01BU0s7CisgICAgICAgIH0KKyAgICAgICAgbWNnX2M4IHw9IE1DR19DOF9DTUUxX01BU0s7CisgICAgfQorICAgIE1DRy0+QzggPSBtY2dfYzg7Cit9CisKKwordWludDMyX3QgQ0xPQ0tfR2V0U3RhdHVzRmxhZ3Modm9pZCkKK3sKKyAgICB1aW50MzJfdCByZXQgPSAwVTsKKworICAgIGlmIChNQ0ctPkM4ICYgTUNHX0M4X0xPQ1MxX01BU0spCisgICAgeworICAgICAgICByZXQgfD0ga01DR19SdGNPc2NMb3N0RmxhZzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBDTE9DS19DbGVhclN0YXR1c0ZsYWdzKHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDhfdCByZWc7CisKKyAgICBpZiAobWFzayAmIGtNQ0dfUnRjT3NjTG9zdEZsYWcpCisgICAgeworICAgICAgICByZWcgPSBNQ0ctPkM4OworICAgICAgICBNQ0ctPkM4ID0gcmVnOworICAgIH0KK30KKwordm9pZCBDTE9DS19Jbml0T3NjMChvc2NfY29uZmlnX3QgY29uc3QgKmNvbmZpZykKK3sKKyAgICB1aW50OF90IHJhbmdlID0gQ0xPQ0tfR2V0T3NjUmFuZ2VGcm9tRnJlcShjb25maWctPmZyZXEpOworCisKKyAgICBNQ0ctPkMyID0gKChNQ0ctPkMyICYgfk9TQ19NT0RFX01BU0spIHwgTUNHX0MyX1JBTkdFKHJhbmdlKSB8ICh1aW50OF90KWNvbmZpZy0+d29ya01vZGUpOworCisgICAgaWYgKChrT1NDX01vZGVFeHQgIT0gY29uZmlnLT53b3JrTW9kZSkKKyAgICAgICAgICAgICkKKyAgICB7CisgICAgICAgIC8qIFdhaXQgZm9yIHN0YWJsZS4gKi8KKyAgICAgICAgd2hpbGUgKCEoTUNHLT5TICYgTUNHX1NfT1NDSU5JVDBfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDTE9DS19EZWluaXRPc2MwKHZvaWQpCit7CisgICAgTUNHLT5DMiAmPSB+T1NDX01PREVfTUFTSzsKK30KKworCitzdGF0dXNfdCBDTE9DS19UcmltSW50ZXJuYWxSZWZDbGsodWludDMyX3QgZXh0RnJlcSwgdWludDMyX3QgZGVzaXJlRnJlcSwgdWludDMyX3QgKmFjdHVhbEZyZXEsIG1jZ19hdG1fc2VsZWN0X3QgYXRtcykKK3sKKyAgICB1aW50MzJfdCBtdWx0aTsgLyogZXh0RnJlcSAvIGRlc2lyZUZyZXEgKi8KKyAgICB1aW50MzJfdCBhY3R2OyAgLyogQXV0byB0cmltIHZhbHVlLiAqLworICAgIHVpbnQ4X3QgbWNnX3NjOworCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHRyaW1SYW5nZVsyXVsyXSA9IHsKKyAgICAgICAgLyogICAgIE1pbiAgICAgICAgICAgTWF4ICAgICAgKi8KKyAgICAgICAge1RSSU1fU0lSQ19NSU4sIFRSSU1fU0lSQ19NQVh9LCAvKiBTbG93IElSQy4gKi8KKyAgICAgICAge1RSSU1fRklSQ19NSU4sIFRSSU1fRklSQ19NQVh9ICAvKiBGYXN0IElSQy4gKi8KKyAgICB9OworCisgICAgaWYgKChleHRGcmVxID4gVFJJTV9SRUZfQ0xLX01BWCkgfHwgKGV4dEZyZXEgPCBUUklNX1JFRl9DTEtfTUlOKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19BdG1CdXNDbG9ja0ludmFsaWQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgZGVzaXJlZCBmcmVxdWVuY3kgcmFuZ2UuICovCisgICAgaWYgKChkZXNpcmVGcmVxIDwgdHJpbVJhbmdlW2F0bXNdWzBdKSB8fCAoZGVzaXJlRnJlcSA+IHRyaW1SYW5nZVthdG1zXVsxXSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfQXRtRGVzaXJlZEZyZXFJbnZhbGlkOworICAgIH0KKworICAgIC8qCisgICAgICAgTWFrZSBzdXJlIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBub3QgdXNlZCB0byBnZW5lcmF0ZSBidXMgY2xvY2suCisgICAgICAgSGVyZSBvbmx5IG5lZWQgdG8gY2hlY2sgKE1DR19TX0lSRUZTVCA9PSAxKS4KKyAgICAgKi8KKyAgICBpZiAoTUNHX1NfSVJFRlNUKGtNQ0dfRmxsU3JjSW50ZXJuYWwpID09IChNQ0ctPlMgJiBNQ0dfU19JUkVGU1RfTUFTSykpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfQXRtSXJjVXNlZDsKKyAgICB9CisKKyAgICBtdWx0aSA9IGV4dEZyZXEgLyBkZXNpcmVGcmVxOworICAgIGFjdHYgPSBtdWx0aSAqIDIxVTsKKworICAgIGlmIChrTUNHX0F0bVNlbDRtID09IGF0bXMpCisgICAgeworICAgICAgICBhY3R2ICo9IDEyOFU7CisgICAgfQorCisgICAgLyogTm93IGJlZ2luIHRvIHN0YXJ0IHRyaW0uICovCisgICAgTUNHLT5BVENWTCA9ICh1aW50OF90KWFjdHY7CisgICAgTUNHLT5BVENWSCA9ICh1aW50OF90KShhY3R2ID4+IDhVKTsKKworICAgIG1jZ19zYyA9IE1DRy0+U0M7CisgICAgbWNnX3NjICY9IH4oTUNHX1NDX0FUTVNfTUFTSyB8IE1DR19TQ19MT0NTMF9NQVNLKTsKKyAgICBtY2dfc2MgfD0gKE1DR19TQ19BVE1GX01BU0sgfCBNQ0dfU0NfQVRNUyhhdG1zKSk7CisgICAgTUNHLT5TQyA9IChtY2dfc2MgfCBNQ0dfU0NfQVRNRV9NQVNLKTsKKworICAgIC8qIFdhaXQgZm9yIGZpbmlzaGVkLiAqLworICAgIHdoaWxlIChNQ0ctPlNDICYgTUNHX1NDX0FUTUVfTUFTSykKKyAgICB7CisgICAgfQorCisgICAgLyogRXJyb3Igb2NjdXJzPyAqLworICAgIGlmIChNQ0ctPlNDICYgTUNHX1NDX0FUTUZfTUFTSykKKyAgICB7CisgICAgICAgIC8qIENsZWFyIHRoZSBmYWlsZWQgZmxhZy4gKi8KKyAgICAgICAgTUNHLT5TQyA9IG1jZ19zYzsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX0F0bUhhcmR3YXJlRmFpbDsKKyAgICB9CisKKyAgICAqYWN0dWFsRnJlcSA9IGV4dEZyZXEgLyBtdWx0aTsKKworICAgIGlmIChrTUNHX0F0bVNlbDRtID09IGF0bXMpCisgICAgeworICAgICAgICBzX2Zhc3RJcmNGcmVxID0gKmFjdHVhbEZyZXE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNfc2xvd0lyY0ZyZXEgPSAqYWN0dWFsRnJlcTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCittY2dfbW9kZV90IENMT0NLX0dldE1vZGUodm9pZCkKK3sKKyAgICBtY2dfbW9kZV90IG1vZGUgPSBrTUNHX01vZGVFcnJvcjsKKyAgICB1aW50MzJfdCBjbGtzdCA9IE1DR19TX0NMS1NUX1ZBTDsKKyAgICB1aW50MzJfdCBpcmVmc3QgPSBNQ0dfU19JUkVGU1RfVkFMOworICAgIHVpbnQzMl90IGxwID0gTUNHX0MyX0xQX1ZBTDsKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIGFuZCBSZWdpc3RlcnMKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBNb2RlICAgfCAgIENMS1NUICAgIHwgICBJUkVGU1QgICB8ICAgUExMU1QgICB8ICAgICAgTFAKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBGRUkgICAgfCAgMDAoRkxMKSAgIHwgICAxKElOVCkgICB8ICAgMChGTEwpICB8ICAgICAgWAorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIEZFRSAgICB8ICAwMChGTEwpICAgfCAgIDAoRVhUKSAgIHwgICAwKEZMTCkgIHwgICAgICBYCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgRkJFICAgIHwgIDEwKEVYVCkgICB8ICAgMChFWFQpICAgfCAgIDAoRkxMKSAgfCAgIDAoTk9STUFMKQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIEZCSSAgICB8ICAwMShJTlQpICAgfCAgIDEoSU5UKSAgIHwgICAwKEZMTCkgIHwgICAwKE5PUk1BTCkKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBCTFBJICAgfCAgMDEoSU5UKSAgIHwgICAxKElOVCkgICB8ICAgMChGTEwpICB8ICAgMShMT1cgUE9XRVIpCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgQkxQRSAgIHwgIDEwKEVYVCkgICB8ICAgMChFWFQpICAgfCAgICAgWCAgICAgfCAgIDEoTE9XIFBPV0VSKQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIFBFRSAgICB8ICAxMShQTEwpICAgfCAgIDAoRVhUKSAgIHwgICAxKFBMTCkgIHwgICAgICBYCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgUEJFICAgIHwgIDEwKEVYVCkgICB8ICAgMChFWFQpICAgfCAgIDEoUExMKSAgfCAgIE8oTk9STUFMKQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgIFBCSSAgICB8ICAwMShJTlQpICAgfCAgIDEoSU5UKSAgIHwgICAxKFBMTCkgIHwgICAwKE5PUk1BTCkKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgICBQRUkgICAgfCAgMTEoUExMKSAgIHwgICAxKElOVCkgICB8ICAgMShQTEwpICB8ICAgICAgWAorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIHN3aXRjaCAoY2xrc3QpCisgICAgeworICAgICAgICBjYXNlIGtNQ0dfQ2xrT3V0U3RhdEZsbDoKKyAgICAgICAgICAgIGlmIChrTUNHX0ZsbFNyY0V4dGVybmFsID09IGlyZWZzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtb2RlID0ga01DR19Nb2RlRkVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1vZGUgPSBrTUNHX01vZGVGRUk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTUNHX0Nsa091dFN0YXRJbnQ6CisgICAgICAgICAgICBpZiAobHApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbW9kZSA9IGtNQ0dfTW9kZUJMUEk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtb2RlID0ga01DR19Nb2RlRkJJOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtNQ0dfQ2xrT3V0U3RhdEV4dDoKKyAgICAgICAgICAgIGlmIChscCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtb2RlID0ga01DR19Nb2RlQkxQRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBrTUNHX01vZGVGQkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gbW9kZTsKK30KKworc3RhdHVzX3QgQ0xPQ0tfU2V0RmVpTW9kZShtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSkKK3sKKyAgICB1aW50OF90IG1jZ19jNDsKKyAgICBib29sIGNoYW5nZV9kcnMgPSBmYWxzZTsKKworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgbWNnX21vZGVfdCBtb2RlID0gQ0xPQ0tfR2V0TW9kZSgpOworICAgIGlmICghKChrTUNHX01vZGVGRUkgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZCSSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkJFID09IG1vZGUpIHx8IChrTUNHX01vZGVGRUUgPT0gbW9kZSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZTsKKyAgICB9CisjZW5kaWYKKyAgICBtY2dfYzQgPSBNQ0ctPkM0OworCisgICAgLyoKKyAgICAgICBFcnJhdGE6IEVSUjAwNzk5MworICAgICAgIFdvcmthcm91bmQ6IEludmVydCBNQ0dfQzRbRE1YMzJdIG9yIGNoYW5nZSBNQ0dfQzRbRFJTVF9EUlNdIGJlZm9yZQorICAgICAgIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UgY2hhbmdlcywgdGhlbiByZXNldCB0byBwcmV2aW91cyB2YWx1ZSBhZnRlcgorICAgICAgIHJlZmVyZW5jZSBjbG9jayBjaGFuZ2VzLgorICAgICAqLworICAgIGlmIChrTUNHX0ZsbFNyY0V4dGVybmFsID09IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgICAgICBjaGFuZ2VfZHJzID0gdHJ1ZTsKKyAgICAgICAgLyogQ2hhbmdlIHRoZSBMU0Igb2YgRFJTVF9EUlMuICovCisgICAgICAgIE1DRy0+QzQgXj0gKDFVIDw8IE1DR19DNF9EUlNUX0RSU19TSElGVCk7CisgICAgfQorCisgICAgLyogU2V0IENMS1MgYW5kIElSRUZTLiAqLworICAgIE1DRy0+QzEgPQorICAgICAgICAoKE1DRy0+QzEgJiB+KE1DR19DMV9DTEtTX01BU0sgfCBNQ0dfQzFfSVJFRlNfTUFTSykpKSB8IChNQ0dfQzFfQ0xLUyhrTUNHX0Nsa091dFNyY091dCkgICAgICAgIC8qIENMS1MgPSAwICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTUNHX0MxX0lSRUZTKGtNQ0dfRmxsU3JjSW50ZXJuYWwpKTsgLyogSVJFRlMgPSAxICovCisKKyAgICAvKiBXYWl0IGFuZCBjaGVjayBzdGF0dXMuICovCisgICAgd2hpbGUgKGtNQ0dfRmxsU3JjSW50ZXJuYWwgIT0gTUNHX1NfSVJFRlNUX1ZBTCkKKyAgICB7CisgICAgfQorCisgICAgLyogRXJyYXRhOiBFUlIwMDc5OTMgKi8KKyAgICBpZiAoY2hhbmdlX2RycykKKyAgICB7CisgICAgICAgIE1DRy0+QzQgPSBtY2dfYzQ7CisgICAgfQorCisgICAgLyogSW4gRkVJIG1vZGUsIHRoZSBNQ0dfQzRbRE1YMzJdIGlzIHNldCB0byAwVS4gKi8KKyAgICBNQ0ctPkM0ID0gKG1jZ19jNCAmIH4oTUNHX0M0X0RNWDMyX01BU0sgfCBNQ0dfQzRfRFJTVF9EUlNfTUFTSykpIHwgKE1DR19DNF9ETVgzMihkbXgzMikgfCBNQ0dfQzRfRFJTVF9EUlMoZHJzKSk7CisKKyAgICAvKiBDaGVjayBNQ0dfU1tDTEtTVF0gKi8KKyAgICB3aGlsZSAoa01DR19DbGtPdXRTdGF0RmxsICE9IE1DR19TX0NMS1NUX1ZBTCkKKyAgICB7CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgRkxMIHN0YWJsZSB0aW1lLiAqLworICAgIGlmIChmbGxTdGFibGVEZWxheSkKKyAgICB7CisgICAgICAgIGZsbFN0YWJsZURlbGF5KCk7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgQ0xPQ0tfU2V0RmVlTW9kZSh1aW50OF90IGZyZGl2LCBtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSkKK3sKKyAgICB1aW50OF90IG1jZ19jNDsKKyAgICBib29sIGNoYW5nZV9kcnMgPSBmYWxzZTsKKworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgbWNnX21vZGVfdCBtb2RlID0gQ0xPQ0tfR2V0TW9kZSgpOworICAgIGlmICghKChrTUNHX01vZGVGRUUgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZCSSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkJFID09IG1vZGUpIHx8IChrTUNHX01vZGVGRUkgPT0gbW9kZSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZTsKKyAgICB9CisjZW5kaWYKKyAgICBtY2dfYzQgPSBNQ0ctPkM0OworCisgICAgLyoKKyAgICAgICBFcnJhdGE6IEVSUjAwNzk5MworICAgICAgIFdvcmthcm91bmQ6IEludmVydCBNQ0dfQzRbRE1YMzJdIG9yIGNoYW5nZSBNQ0dfQzRbRFJTVF9EUlNdIGJlZm9yZQorICAgICAgIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UgY2hhbmdlcywgdGhlbiByZXNldCB0byBwcmV2aW91cyB2YWx1ZSBhZnRlcgorICAgICAgIHJlZmVyZW5jZSBjbG9jayBjaGFuZ2VzLgorICAgICAqLworICAgIGlmIChrTUNHX0ZsbFNyY0ludGVybmFsID09IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgICAgICBjaGFuZ2VfZHJzID0gdHJ1ZTsKKyAgICAgICAgLyogQ2hhbmdlIHRoZSBMU0Igb2YgRFJTVF9EUlMuICovCisgICAgICAgIE1DRy0+QzQgXj0gKDFVIDw8IE1DR19DNF9EUlNUX0RSU19TSElGVCk7CisgICAgfQorCisgICAgLyogU2V0IENMS1MgYW5kIElSRUZTLiAqLworICAgIE1DRy0+QzEgPSAoKE1DRy0+QzEgJiB+KE1DR19DMV9DTEtTX01BU0sgfCBNQ0dfQzFfRlJESVZfTUFTSyB8IE1DR19DMV9JUkVGU19NQVNLKSkgfAorICAgICAgICAgICAgICAgKE1DR19DMV9DTEtTKGtNQ0dfQ2xrT3V0U3JjT3V0KSAgICAgICAgIC8qIENMS1MgPSAwICovCisgICAgICAgICAgICAgICAgfCBNQ0dfQzFfRlJESVYoZnJkaXYpICAgICAgICAgICAgICAgICAgLyogRlJESVYgKi8KKyAgICAgICAgICAgICAgICB8IE1DR19DMV9JUkVGUyhrTUNHX0ZsbFNyY0V4dGVybmFsKSkpOyAvKiBJUkVGUyA9IDAgKi8KKworICAgIC8qIElmIHVzZSBleHRlcm5hbCBjcnlzdGFsIGFzIGNsb2NrIHNvdXJjZSwgd2FpdCBmb3IgaXQgc3RhYmxlLiAqLworICAgIGlmIChNQ0dfQzdfT1NDU0VMKGtNQ0dfT3Njc2VsT3NjKSA9PSAoTUNHLT5DNyAmIE1DR19DN19PU0NTRUxfTUFTSykpCisgICAgeworICAgICAgICBpZiAoTUNHLT5DMiAmIE1DR19DMl9FUkVGU19NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIShNQ0ctPlMgJiBNQ0dfU19PU0NJTklUMF9NQVNLKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdhaXQgYW5kIGNoZWNrIHN0YXR1cy4gKi8KKyAgICB3aGlsZSAoa01DR19GbGxTcmNFeHRlcm5hbCAhPSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBFcnJhdGE6IEVSUjAwNzk5MyAqLworICAgIGlmIChjaGFuZ2VfZHJzKQorICAgIHsKKyAgICAgICAgTUNHLT5DNCA9IG1jZ19jNDsKKyAgICB9CisKKyAgICAvKiBTZXQgRFJTIGFuZCBETVgzMi4gKi8KKyAgICBtY2dfYzQgPSAoKG1jZ19jNCAmIH4oTUNHX0M0X0RNWDMyX01BU0sgfCBNQ0dfQzRfRFJTVF9EUlNfTUFTSykpIHwgKE1DR19DNF9ETVgzMihkbXgzMikgfCBNQ0dfQzRfRFJTVF9EUlMoZHJzKSkpOworICAgIE1DRy0+QzQgPSBtY2dfYzQ7CisKKyAgICAvKiBXYWl0IGZvciBEUlNUX0RSUyB1cGRhdGUuICovCisgICAgd2hpbGUgKE1DRy0+QzQgIT0gbWNnX2M0KQorICAgIHsKKyAgICB9CisKKyAgICAvKiBDaGVjayBNQ0dfU1tDTEtTVF0gKi8KKyAgICB3aGlsZSAoa01DR19DbGtPdXRTdGF0RmxsICE9IE1DR19TX0NMS1NUX1ZBTCkKKyAgICB7CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgRkxMIHN0YWJsZSB0aW1lLiAqLworICAgIGlmIChmbGxTdGFibGVEZWxheSkKKyAgICB7CisgICAgICAgIGZsbFN0YWJsZURlbGF5KCk7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgQ0xPQ0tfU2V0RmJpTW9kZShtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSkKK3sKKyAgICB1aW50OF90IG1jZ19jNDsKKyAgICBib29sIGNoYW5nZV9kcnMgPSBmYWxzZTsKKworI2lmIChkZWZpbmVkKE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pICYmIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0pCisgICAgbWNnX21vZGVfdCBtb2RlID0gQ0xPQ0tfR2V0TW9kZSgpOworCisgICAgaWYgKCEoKGtNQ0dfTW9kZUZFRSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkJJID09IG1vZGUpIHx8IChrTUNHX01vZGVGQkUgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZFSSA9PSBtb2RlKSB8fAorICAgICAgICAgIChrTUNHX01vZGVCTFBJID09IG1vZGUpKSkKKworICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZTsKKyAgICB9CisjZW5kaWYKKworICAgIG1jZ19jNCA9IE1DRy0+QzQ7CisKKyAgICBNQ0ctPkMyICY9IH5NQ0dfQzJfTFBfTUFTSzsgLyogRGlzYWJsZSBsb3dwb3dlci4gKi8KKworICAgIC8qCisgICAgICAgRXJyYXRhOiBFUlIwMDc5OTMKKyAgICAgICBXb3JrYXJvdW5kOiBJbnZlcnQgTUNHX0M0W0RNWDMyXSBvciBjaGFuZ2UgTUNHX0M0W0RSU1RfRFJTXSBiZWZvcmUKKyAgICAgICByZWZlcmVuY2UgY2xvY2sgc291cmNlIGNoYW5nZXMsIHRoZW4gcmVzZXQgdG8gcHJldmlvdXMgdmFsdWUgYWZ0ZXIKKyAgICAgICByZWZlcmVuY2UgY2xvY2sgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBpZiAoa01DR19GbGxTcmNFeHRlcm5hbCA9PSBNQ0dfU19JUkVGU1RfVkFMKQorICAgIHsKKyAgICAgICAgY2hhbmdlX2RycyA9IHRydWU7CisgICAgICAgIC8qIENoYW5nZSB0aGUgTFNCIG9mIERSU1RfRFJTLiAqLworICAgICAgICBNQ0ctPkM0IF49ICgxVSA8PCBNQ0dfQzRfRFJTVF9EUlNfU0hJRlQpOworICAgIH0KKworICAgIC8qIFNldCBDTEtTIGFuZCBJUkVGUy4gKi8KKyAgICBNQ0ctPkMxID0KKyAgICAgICAgKChNQ0ctPkMxICYgfihNQ0dfQzFfQ0xLU19NQVNLIHwgTUNHX0MxX0lSRUZTX01BU0spKSB8IChNQ0dfQzFfQ0xLUyhrTUNHX0Nsa091dFNyY0ludGVybmFsKSAgICAvKiBDTEtTID0gMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTUNHX0MxX0lSRUZTKGtNQ0dfRmxsU3JjSW50ZXJuYWwpKSk7IC8qIElSRUZTID0gMSAqLworCisgICAgLyogV2FpdCBhbmQgY2hlY2sgc3RhdHVzLiAqLworICAgIHdoaWxlIChrTUNHX0ZsbFNyY0ludGVybmFsICE9IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgIH0KKworICAgIC8qIEVycmF0YTogRVJSMDA3OTkzICovCisgICAgaWYgKGNoYW5nZV9kcnMpCisgICAgeworICAgICAgICBNQ0ctPkM0ID0gbWNnX2M0OworICAgIH0KKworICAgIHdoaWxlIChrTUNHX0Nsa091dFN0YXRJbnQgIT0gTUNHX1NfQ0xLU1RfVkFMKQorICAgIHsKKyAgICB9CisKKyAgICBNQ0ctPkM0ID0gKG1jZ19jNCAmIH4oTUNHX0M0X0RNWDMyX01BU0sgfCBNQ0dfQzRfRFJTVF9EUlNfTUFTSykpIHwgKE1DR19DNF9ETVgzMihkbXgzMikgfCBNQ0dfQzRfRFJTVF9EUlMoZHJzKSk7CisKKyAgICAvKiBXYWl0IGZvciBGTEwgc3RhYmxlIHRpbWUuICovCisgICAgaWYgKGZsbFN0YWJsZURlbGF5KQorICAgIHsKKyAgICAgICAgZmxsU3RhYmxlRGVsYXkoKTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBDTE9DS19TZXRGYmVNb2RlKHVpbnQ4X3QgZnJkaXYsIG1jZ19kbXgzMl90IGRteDMyLCBtY2dfZHJzX3QgZHJzLCB2b2lkICgqZmxsU3RhYmxlRGVsYXkpKHZvaWQpKQoreworICAgIHVpbnQ4X3QgbWNnX2M0OworICAgIGJvb2wgY2hhbmdlX2RycyA9IGZhbHNlOworCisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICBtY2dfbW9kZV90IG1vZGUgPSBDTE9DS19HZXRNb2RlKCk7CisgICAgaWYgKCEoKGtNQ0dfTW9kZUZFRSA9PSBtb2RlKSB8fCAoa01DR19Nb2RlRkJJID09IG1vZGUpIHx8IChrTUNHX01vZGVGQkUgPT0gbW9kZSkgfHwgKGtNQ0dfTW9kZUZFSSA9PSBtb2RlKSB8fAorICAgICAgICAgIChrTUNHX01vZGVCTFBFID09IG1vZGUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGU7CisgICAgfQorI2VuZGlmCisKKworICAgIC8qIFNldCBMUCBiaXQgdG8gZW5hYmxlIHRoZSBGTEwgKi8KKyAgICBNQ0ctPkMyICY9IH5NQ0dfQzJfTFBfTUFTSzsKKworICAgIG1jZ19jNCA9IE1DRy0+QzQ7CisKKyAgICAvKgorICAgICAgIEVycmF0YTogRVJSMDA3OTkzCisgICAgICAgV29ya2Fyb3VuZDogSW52ZXJ0IE1DR19DNFtETVgzMl0gb3IgY2hhbmdlIE1DR19DNFtEUlNUX0RSU10gYmVmb3JlCisgICAgICAgcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSBjaGFuZ2VzLCB0aGVuIHJlc2V0IHRvIHByZXZpb3VzIHZhbHVlIGFmdGVyCisgICAgICAgcmVmZXJlbmNlIGNsb2NrIGNoYW5nZXMuCisgICAgICovCisgICAgaWYgKGtNQ0dfRmxsU3JjSW50ZXJuYWwgPT0gTUNHX1NfSVJFRlNUX1ZBTCkKKyAgICB7CisgICAgICAgIGNoYW5nZV9kcnMgPSB0cnVlOworICAgICAgICAvKiBDaGFuZ2UgdGhlIExTQiBvZiBEUlNUX0RSUy4gKi8KKyAgICAgICAgTUNHLT5DNCBePSAoMVUgPDwgTUNHX0M0X0RSU1RfRFJTX1NISUZUKTsKKyAgICB9CisKKyAgICAvKiBTZXQgQ0xLUyBhbmQgSVJFRlMuICovCisgICAgTUNHLT5DMSA9ICgoTUNHLT5DMSAmIH4oTUNHX0MxX0NMS1NfTUFTSyB8IE1DR19DMV9GUkRJVl9NQVNLIHwgTUNHX0MxX0lSRUZTX01BU0spKSB8CisgICAgICAgICAgICAgICAoTUNHX0MxX0NMS1Moa01DR19DbGtPdXRTcmNFeHRlcm5hbCkgICAgLyogQ0xLUyA9IDIgKi8KKyAgICAgICAgICAgICAgICB8IE1DR19DMV9GUkRJVihmcmRpdikgICAgICAgICAgICAgICAgICAvKiBGUkRJViA9IGZyZGl2ICovCisgICAgICAgICAgICAgICAgfCBNQ0dfQzFfSVJFRlMoa01DR19GbGxTcmNFeHRlcm5hbCkpKTsgLyogSVJFRlMgPSAwICovCisKKyAgICAvKiBJZiB1c2UgZXh0ZXJuYWwgY3J5c3RhbCBhcyBjbG9jayBzb3VyY2UsIHdhaXQgZm9yIGl0IHN0YWJsZS4gKi8KKyAgICBpZiAoTUNHX0M3X09TQ1NFTChrTUNHX09zY3NlbE9zYykgPT0gKE1DRy0+QzcgJiBNQ0dfQzdfT1NDU0VMX01BU0spKQorICAgIHsKKyAgICAgICAgaWYgKE1DRy0+QzIgJiBNQ0dfQzJfRVJFRlNfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCEoTUNHLT5TICYgTUNHX1NfT1NDSU5JVDBfTUFTSykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXYWl0IGZvciBSZWZlcmVuY2UgY2xvY2sgU3RhdHVzIGJpdCB0byBjbGVhciAqLworICAgIHdoaWxlIChrTUNHX0ZsbFNyY0V4dGVybmFsICE9IE1DR19TX0lSRUZTVF9WQUwpCisgICAgeworICAgIH0KKworICAgIC8qIEVycmF0YTogRVJSMDA3OTkzICovCisgICAgaWYgKGNoYW5nZV9kcnMpCisgICAgeworICAgICAgICBNQ0ctPkM0ID0gbWNnX2M0OworICAgIH0KKworICAgIC8qIFNldCBEUlNUX0RSUyBhbmQgRE1YMzIuICovCisgICAgbWNnX2M0ID0gKChtY2dfYzQgJiB+KE1DR19DNF9ETVgzMl9NQVNLIHwgTUNHX0M0X0RSU1RfRFJTX01BU0spKSB8IChNQ0dfQzRfRE1YMzIoZG14MzIpIHwgTUNHX0M0X0RSU1RfRFJTKGRycykpKTsKKworICAgIC8qIFdhaXQgZm9yIGNsb2NrIHN0YXR1cyBiaXRzIHRvIHNob3cgY2xvY2sgc291cmNlIGlzIGV4dCByZWYgY2xrICovCisgICAgd2hpbGUgKGtNQ0dfQ2xrT3V0U3RhdEV4dCAhPSBNQ0dfU19DTEtTVF9WQUwpCisgICAgeworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIGZsbCBzdGFibGUgdGltZS4gKi8KKyAgICBpZiAoZmxsU3RhYmxlRGVsYXkpCisgICAgeworICAgICAgICBmbGxTdGFibGVEZWxheSgpOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX1NldEJscGlNb2RlKHZvaWQpCit7CisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICBpZiAoTUNHX1NfQ0xLU1RfVkFMICE9IGtNQ0dfQ2xrT3V0U3RhdEludCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGU7CisgICAgfQorI2VuZGlmIC8qIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0gKi8KKworICAgIC8qIFNldCBMUC4gKi8KKyAgICBNQ0ctPkMyIHw9IE1DR19DMl9MUF9NQVNLOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgQ0xPQ0tfU2V0QmxwZU1vZGUodm9pZCkKK3sKKyNpZiAoZGVmaW5lZChNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKSAmJiBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNKQorICAgIGlmIChNQ0dfU19DTEtTVF9WQUwgIT0ga01DR19DbGtPdXRTdGF0RXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFNldCBMUCBiaXQgdG8gZW50ZXIgQkxQRSBtb2RlLiAqLworICAgIE1DRy0+QzIgfD0gTUNHX0MyX0xQX01BU0s7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisKK3N0YXR1c190IENMT0NLX0V4dGVybmFsTW9kZVRvRmJlTW9kZVF1aWNrKHZvaWQpCit7CisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICBpZiAoTUNHLT5TICYgTUNHX1NfSVJFRlNUX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfTW9kZUludmFsaWQ7CisgICAgfQorI2VuZGlmIC8qIE1DR19DT05GSUdfQ0hFQ0tfUEFSQU0gKi8KKworICAgIC8qIERpc2FibGUgbG93IHBvd2VyICovCisgICAgTUNHLT5DMiAmPSB+TUNHX0MyX0xQX01BU0s7CisKKyAgICBNQ0ctPkMxID0gKChNQ0ctPkMxICYgfk1DR19DMV9DTEtTX01BU0spIHwgTUNHX0MxX0NMS1Moa01DR19DbGtPdXRTcmNFeHRlcm5hbCkpOworICAgIHdoaWxlIChNQ0dfU19DTEtTVF9WQUwgIT0ga01DR19DbGtPdXRTdGF0RXh0KQorICAgIHsKKyAgICB9CisKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX0ludGVybmFsTW9kZVRvRmJpTW9kZVF1aWNrKHZvaWQpCit7CisjaWYgKGRlZmluZWQoTUNHX0NPTkZJR19DSEVDS19QQVJBTSkgJiYgTUNHX0NPTkZJR19DSEVDS19QQVJBTSkKKyAgICBpZiAoIShNQ0ctPlMgJiBNQ0dfU19JUkVGU1RfTUFTSykpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19NQ0dfTW9kZUludmFsaWQ7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBEaXNhYmxlIGxvdyBwb3dlciAqLworICAgIE1DRy0+QzIgJj0gfk1DR19DMl9MUF9NQVNLOworCisgICAgTUNHLT5DMSA9ICgoTUNHLT5DMSAmIH5NQ0dfQzFfQ0xLU19NQVNLKSB8IE1DR19DMV9DTEtTKGtNQ0dfQ2xrT3V0U3JjSW50ZXJuYWwpKTsKKyAgICB3aGlsZSAoTUNHX1NfQ0xLU1RfVkFMICE9IGtNQ0dfQ2xrT3V0U3RhdEludCkKKyAgICB7CisgICAgfQorCisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBDTE9DS19Cb290VG9GZWlNb2RlKG1jZ19kbXgzMl90IGRteDMyLCBtY2dfZHJzX3QgZHJzLCB2b2lkICgqZmxsU3RhYmxlRGVsYXkpKHZvaWQpKQoreworICAgIHJldHVybiBDTE9DS19TZXRGZWlNb2RlKGRteDMyLCBkcnMsIGZsbFN0YWJsZURlbGF5KTsKK30KKworc3RhdHVzX3QgQ0xPQ0tfQm9vdFRvRmVlTW9kZSgKKyAgICBtY2dfb3Njc2VsX3Qgb3Njc2VsLCB1aW50OF90IGZyZGl2LCBtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSkKK3sKKworICAgIENMT0NLX1NldEV4dGVybmFsUmVmQ2xrQ29uZmlnKG9zY3NlbCk7CisKKyAgICByZXR1cm4gQ0xPQ0tfU2V0RmVlTW9kZShmcmRpdiwgZG14MzIsIGRycywgZmxsU3RhYmxlRGVsYXkpOworfQorCitzdGF0dXNfdCBDTE9DS19Cb290VG9CbHBpTW9kZSh1aW50OF90IGZjcmRpdiwgbWNnX2lyY19tb2RlX3QgaXJjcywgdWludDhfdCBpcmNFbmFibGVNb2RlKQoreworICAgIC8qIElmIHJlc2V0IG1vZGUgaXMgRkVJIG1vZGUsIHNldCBNQ0dJUkNMSyBhbmQgYWx3YXlzIHN1Y2Nlc3MuICovCisgICAgQ0xPQ0tfU2V0SW50ZXJuYWxSZWZDbGtDb25maWcoaXJjRW5hYmxlTW9kZSwgaXJjcywgZmNyZGl2KTsKKworICAgIC8qIElmIHJlc2V0IG1vZGUgaXMgbm90IEJMUEksIGZpcnN0IGVudGVyIEZCSSBtb2RlLiAqLworICAgIE1DRy0+QzEgPSAoTUNHLT5DMSAmIH5NQ0dfQzFfQ0xLU19NQVNLKSB8IE1DR19DMV9DTEtTKGtNQ0dfQ2xrT3V0U3JjSW50ZXJuYWwpOworICAgIHdoaWxlIChNQ0dfU19DTEtTVF9WQUwgIT0ga01DR19DbGtPdXRTdGF0SW50KQorICAgIHsKKyAgICB9CisKKyAgICAvKiBFbnRlciBCTFBJIG1vZGUuICovCisgICAgTUNHLT5DMiB8PSBNQ0dfQzJfTFBfTUFTSzsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IENMT0NLX0Jvb3RUb0JscGVNb2RlKG1jZ19vc2NzZWxfdCBvc2NzZWwpCit7CisKKyAgICBDTE9DS19TZXRFeHRlcm5hbFJlZkNsa0NvbmZpZyhvc2NzZWwpOworCisgICAgLyogU2V0IHRvIEZCRSBtb2RlLiAqLworICAgIE1DRy0+QzEgPQorICAgICAgICAoKE1DRy0+QzEgJiB+KE1DR19DMV9DTEtTX01BU0sgfCBNQ0dfQzFfSVJFRlNfTUFTSykpIHwgKE1DR19DMV9DTEtTKGtNQ0dfQ2xrT3V0U3JjRXh0ZXJuYWwpICAgIC8qIENMS1MgPSAyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNQ0dfQzFfSVJFRlMoa01DR19GbGxTcmNFeHRlcm5hbCkpKTsgLyogSVJFRlMgPSAwICovCisKKyAgICAvKiBJZiB1c2UgZXh0ZXJuYWwgY3J5c3RhbCBhcyBjbG9jayBzb3VyY2UsIHdhaXQgZm9yIGl0IHN0YWJsZS4gKi8KKyAgICBpZiAoTUNHX0M3X09TQ1NFTChrTUNHX09zY3NlbE9zYykgPT0gKE1DRy0+QzcgJiBNQ0dfQzdfT1NDU0VMX01BU0spKQorICAgIHsKKyAgICAgICAgaWYgKE1DRy0+QzIgJiBNQ0dfQzJfRVJFRlNfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCEoTUNHLT5TICYgTUNHX1NfT1NDSU5JVDBfTUFTSykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXYWl0IGZvciBNQ0dfU1tDTEtTVF0gYW5kIE1DR19TW0lSRUZTVF0uICovCisgICAgd2hpbGUgKChNQ0ctPlMgJiAoTUNHX1NfSVJFRlNUX01BU0sgfCBNQ0dfU19DTEtTVF9NQVNLKSkgIT0KKyAgICAgICAgICAgKE1DR19TX0lSRUZTVChrTUNHX0ZsbFNyY0V4dGVybmFsKSB8IE1DR19TX0NMS1NUKGtNQ0dfQ2xrT3V0U3RhdEV4dCkpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBJbiBGQkUgbm93LCBzdGFydCB0byBlbnRlciBCTFBFLiAqLworICAgIE1DRy0+QzIgfD0gTUNHX0MyX0xQX01BU0s7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisKKy8qCisgICBUaGUgdHJhbnNhY3Rpb24gbWF0cml4LiBJdCBkZWZpbmVzIHRoZSBwYXRoIGZvciBtb2RlIHN3aXRjaCwgdGhlIHJvdyBpcyBmb3IKKyAgIGN1cnJlbnQgbW9kZSBhbmQgdGhlIGNvbHVtbiBpcyB0YXJnZXQgbW9kZS4KKyAgIEZvciBleGFtcGxlLCBzd2l0Y2ggZnJvbSBGRUkgdG8gUEVFOgorICAgMS4gQ3VycmVudCBtb2RlIEZFSSwgbmV4dCBtb2RlIGlzIG1jZ01vZGVNYXRyaXhbRkVJXVtQRUVdID0gRkJFLCBzbyBzd2l0aCB0byBGQkUuCisgICAyLiBDdXJyZW50IG1vZGUgRkJFLCBuZXh0IG1vZGUgaXMgbWNnTW9kZU1hdHJpeFtGQkVdW1BFRV0gPSBQQkUsIHNvIHN3aXRoIHRvIFBCRS4KKyAgIDMuIEN1cnJlbnQgbW9kZSBQQkUsIG5leHQgbW9kZSBpcyBtY2dNb2RlTWF0cml4W1BCRV1bUEVFXSA9IFBFRSwgc28gc3dpdGggdG8gUEVFLgorICAgVGh1cyB0aGUgTUNHIG1vZGUgaGFzIGNoYW5nZWQgZnJvbSBGRUkgdG8gUEVFLgorICovCitzdGF0aWMgY29uc3QgbWNnX21vZGVfdCBtY2dNb2RlTWF0cml4WzZdWzZdID0geworICAgIHtrTUNHX01vZGVGRUksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlRkJJLCBrTUNHX01vZGVGRUUsIGtNQ0dfTW9kZUZCRSwga01DR19Nb2RlRkJFfSwgIC8qIEZFSSAqLworICAgIHtrTUNHX01vZGVGRUksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlQkxQSSwga01DR19Nb2RlRkVFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUZCRX0sIC8qIEZCSSAqLworICAgIHtrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlQkxQSSwga01DR19Nb2RlRkJJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZCSX0sIC8qIEJMUEkgKi8KKyAgICB7a01DR19Nb2RlRkVJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlRkVFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUZCRX0sICAvKiBGRUUgKi8KKyAgICB7a01DR19Nb2RlRkVJLCBrTUNHX01vZGVGQkksIGtNQ0dfTW9kZUZCSSwga01DR19Nb2RlRkVFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUJMUEV9LCAvKiBGQkUgKi8KKyAgICB7a01DR19Nb2RlRkJFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUZCRSwga01DR19Nb2RlRkJFLCBrTUNHX01vZGVGQkUsIGtNQ0dfTW9kZUJMUEV9LCAvKiBCTFBFICovCisgICAgLyogICAgICBGRUkgICAgICAgICAgIEZCSSAgICAgICAgICAgQkxQSSAgICAgICAgICBGRUUgICAgICAgICAgIEZCRSAgICAgICAgICAgQkxQRSAgICAgICovCit9OworCitzdGF0dXNfdCBDTE9DS19TZXRNY2dDb25maWcoY29uc3QgbWNnX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgbWNnX21vZGVfdCBuZXh0X21vZGU7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworCisKKyAgICAvKiBJZiBuZWVkIHRvIGNoYW5nZSBleHRlcm5hbCBjbG9jaywgTUNHX0M3W09TQ1NFTF0uICovCisgICAgaWYgKE1DR19DN19PU0NTRUxfVkFMICE9IGNvbmZpZy0+b3Njc2VsKQorICAgIHsKKyAgICAgICAgLyogSWYgZXh0ZXJuYWwgY2xvY2sgaXMgaW4gdXNlLCBjaGFuZ2UgdG8gRkVJIGZpcnN0LiAqLworICAgICAgICBpZiAoIShNQ0ctPlMgJiBNQ0dfU19JUkNTVF9NQVNLKSkKKyAgICAgICAgeworICAgICAgICAgICAgQ0xPQ0tfRXh0ZXJuYWxNb2RlVG9GYmVNb2RlUXVpY2soKTsKKyAgICAgICAgICAgIENMT0NLX1NldEZlaU1vZGUoY29uZmlnLT5kbXgzMiwgY29uZmlnLT5kcnMsICh2b2lkICgqKSh2b2lkKSkwKTsKKyAgICAgICAgfQorCisgICAgICAgIENMT0NLX1NldEV4dGVybmFsUmVmQ2xrQ29uZmlnKGNvbmZpZy0+b3Njc2VsKTsKKyAgICB9CisKKyAgICAvKiBSZS1jb25maWd1cmUgTUNHSVJDTEssIGlmIE1DR0lSQ0xLIGlzIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSwgdGhlbiBjaGFuZ2UgdG8gRkVJL1BFSSBmaXJzdC4gKi8KKyAgICBpZiAoTUNHX1NfQ0xLU1RfVkFMID09IGtNQ0dfQ2xrT3V0U3RhdEludCkKKyAgICB7CisgICAgICAgIE1DRy0+QzIgJj0gfk1DR19DMl9MUF9NQVNLOyAvKiBEaXNhYmxlIGxvd3Bvd2VyLiAqLworCisgICAgICAgIHsKKyAgICAgICAgICAgIENMT0NLX1NldEZlaU1vZGUoY29uZmlnLT5kbXgzMiwgY29uZmlnLT5kcnMsIENMT0NLX0ZsbFN0YWJsZURlbGF5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbmZpZ3VyZSBNQ0dJUkNMSy4gKi8KKyAgICBDTE9DS19TZXRJbnRlcm5hbFJlZkNsa0NvbmZpZyhjb25maWctPmlyY2xrRW5hYmxlTW9kZSwgY29uZmlnLT5pcmNzLCBjb25maWctPmZjcmRpdik7CisKKyAgICBuZXh0X21vZGUgPSBDTE9DS19HZXRNb2RlKCk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgbmV4dF9tb2RlID0gbWNnTW9kZU1hdHJpeFtuZXh0X21vZGVdW2NvbmZpZy0+bWNnTW9kZV07CisKKyAgICAgICAgc3dpdGNoIChuZXh0X21vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Uga01DR19Nb2RlRkVJOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IENMT0NLX1NldEZlaU1vZGUoY29uZmlnLT5kbXgzMiwgY29uZmlnLT5kcnMsIENMT0NLX0ZsbFN0YWJsZURlbGF5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga01DR19Nb2RlRkVFOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IENMT0NLX1NldEZlZU1vZGUoY29uZmlnLT5mcmRpdiwgY29uZmlnLT5kbXgzMiwgY29uZmlnLT5kcnMsIENMT0NLX0ZsbFN0YWJsZURlbGF5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga01DR19Nb2RlRkJJOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IENMT0NLX1NldEZiaU1vZGUoY29uZmlnLT5kbXgzMiwgY29uZmlnLT5kcnMsICh2b2lkICgqKSh2b2lkKSkwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga01DR19Nb2RlRkJFOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IENMT0NLX1NldEZiZU1vZGUoY29uZmlnLT5mcmRpdiwgY29uZmlnLT5kbXgzMiwgY29uZmlnLT5kcnMsICh2b2lkICgqKSh2b2lkKSkwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga01DR19Nb2RlQkxQSToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBDTE9DS19TZXRCbHBpTW9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrTUNHX01vZGVCTFBFOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IENMT0NLX1NldEJscGVNb2RlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfSB3aGlsZSAobmV4dF9tb2RlICE9IGNvbmZpZy0+bWNnTW9kZSk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY2xvY2suaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3NjQyMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2Nsb2NrLmgKQEAgLTAsMCArMSwxMTkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAxNyAsIE5YUAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfQ0xPQ0tfSF8KKyNkZWZpbmUgX0ZTTF9DTE9DS19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEgQGFkZHRvZ3JvdXAgY2xvY2sgKi8KKy8qISBAeyAqLworCisvKiEgQGZpbGUgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29uZmlndXJhdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAYnJpZWYgQ29uZmlndXJlcyB3aGV0aGVyIHRvIGNoZWNrIGEgcGFyYW1ldGVyIGluIGEgZnVuY3Rpb24uCisgKgorICogU29tZSBNQ0cgc2V0dGluZ3MgbXVzdCBiZSBjaGFuZ2VkIHdpdGggY29uZGl0aW9ucywgZm9yIGV4YW1wbGU6CisgKiAgMS4gTUNHSVJDTEsgc2V0dGluZ3MsIHN1Y2ggYXMgdGhlIHNvdXJjZSwgZGl2aWRlciwgYW5kIHRoZSB0cmltIHZhbHVlIHNob3VsZCBub3QgY2hhbmdlIHdoZW4KKyAqICAgICBNQ0dJUkNMSyBpcyB1c2VkIGFzIGEgc3lzdGVtIGNsb2NrIHNvdXJjZS4KKyAqICAyLiBNQ0dfQzdbT1NDU0VMXSBzaG91bGQgbm90IGJlIGNoYW5nZWQgIHdoZW4gdGhlIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyB1c2VkCisgKiAgICAgYXMgYSBzeXN0ZW0gY2xvY2sgc291cmNlLiBGb3IgZXhhbXBsZSwgaW4gRkJFL0JMUEUvUEJFIG1vZGVzLgorICogIDMuIFRoZSB1c2VycyBzaG91bGQgb25seSBzd2l0Y2ggYmV0d2VlbiB0aGUgc3VwcG9ydGVkIGNsb2NrIG1vZGVzLgorICoKKyAqIE1DRyBmdW5jdGlvbnMgY2hlY2sgdGhlIHBhcmFtZXRlciBhbmQgTUNHIHN0YXR1cyBiZWZvcmUgc2V0dGluZywgaWYgbm90IGFsbG93ZWQKKyAqIHRvIGNoYW5nZSwgdGhlIGZ1bmN0aW9ucyByZXR1cm4gZXJyb3IuIFRoZSBwYXJhbWV0ZXIgY2hlY2tpbmcgaW5jcmVhc2VzIGNvZGUgc2l6ZSwKKyAqIGlmIGNvZGUgc2l6ZSBpcyBhIGNyaXRpY2FsIHJlcXVpcmVtZW50LCBjaGFuZ2UgI01DR19DT05GSUdfQ0hFQ0tfUEFSQU0gdG8gMCB0bworICogZGlzYWJsZSBwYXJhbWV0ZXIgY2hlY2tpbmcuCisgKi8KKyNpZm5kZWYgTUNHX0NPTkZJR19DSEVDS19QQVJBTQorI2RlZmluZSBNQ0dfQ09ORklHX0NIRUNLX1BBUkFNIDBVCisjZW5kaWYKKworLyohIEBicmllZiBDb25maWd1cmUgd2hldGhlciBkcml2ZXIgY29udHJvbHMgY2xvY2sKKyAqCisgKiBXaGVuIHNldCB0byAwLCBwZXJpcGhlcmFsIGRyaXZlcnMgd2lsbCBlbmFibGUgY2xvY2sgaW4gaW5pdGlhbGl6ZSBmdW5jdGlvbgorICogYW5kIGRpc2FibGUgY2xvY2sgaW4gZGUtaW5pdGlhbGl6ZSBmdW5jdGlvbi4gV2hlbiBzZXQgdG8gMSwgcGVyaXBoZXJhbAorICogZHJpdmVyIHdpbGwgbm90IGNvbnRyb2wgdGhlIGNsb2NrLCBhcHBsaWNhdGlvbiBjb3VsZCBjb250b2wgdGhlIGNsb2NrIG91dCBvZgorICogdGhlIGRyaXZlci4KKyAqCisgKiBAbm90ZSBBbGwgZHJpdmVycyBzaGFyZSB0aGlzIGZlYXR1cmUgc3dpdGNoZXIuIElmIGl0IGlzIHNldCB0byAxLCBhcHBsaWNhdGlvbgorICogc2hvdWxkIGhhbmRsZSBjbG9jayBlbmFibGUgYW5kIGRpc2FibGUgZm9yIGFsbCBkcml2ZXJzLgorICovCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkpCisjZGVmaW5lIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAwCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIENMT0NLIGRyaXZlciB2ZXJzaW9uIDIuMi4xLiAqLworI2RlZmluZSBGU0xfQ0xPQ0tfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAyLCAxKSkKKy8qQH0qLworCisvKiEgQGJyaWVmIEV4dGVybmFsIFhUQUwwIChPU0MwKSBjbG9jayBmcmVxdWVuY3kuCisgKgorICogVGhlIFhUQUwwL0VYVEFMMCAoT1NDMCkgY2xvY2sgZnJlcXVlbmN5IGluIEh6LiBXaGVuIHRoZSBjbG9jayBpcyBzZXQgdXAsIHVzZSB0aGUKKyAqIGZ1bmN0aW9uIENMT0NLX1NldFh0YWwwRnJlcSB0byBzZXQgdGhlIHZhbHVlIGluIHRoZSBjbG9jayBkcml2ZXIuIEZvciBleGFtcGxlLAorICogaWYgWFRBTDAgaXMgOCBNSHo6CisgKiBAY29kZQorICogQ0xPQ0tfSW5pdE9zYzAoLi4uKTsgLy8gU2V0IHVwIHRoZSBPU0MwCisgKiBDTE9DS19TZXRYdGFsMEZyZXEoODAwMDAwMDApOyAvLyBTZXQgdGhlIFhUQUwwIHZhbHVlIHRvIHRoZSBjbG9jayBkcml2ZXIuCisgKiBAZW5kY29kZQorICoKKyAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciB0aGUgbXVsdGljb3JlIHBsYXRmb3JtcyB3aGVyZSBvbmx5IG9uZSBjb3JlIG5lZWRzIHRvIHNldCB1cCB0aGUKKyAqIE9TQzAgdXNpbmcgdGhlIENMT0NLX0luaXRPc2MwLiBBbGwgb3RoZXIgY29yZXMgbmVlZCB0byBjYWxsIHRoZSBDTE9DS19TZXRYdGFsMEZyZXEKKyAqIHRvIGdldCBhIHZhbGlkIGNsb2NrIGZyZXF1ZW5jeS4KKyAqLworZXh0ZXJuIHVpbnQzMl90IGdfeHRhbDBGcmVxOworCisKKy8qISBAYnJpZWYgRXh0ZXJuYWwgWFRBTDMyL0VYVEFMMzIvUlRDX0NMS0lOIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGUgWFRBTDMyL0VYVEFMMzIvUlRDX0NMS0lOIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4gV2hlbiB0aGUgY2xvY2sgaXMgc2V0IHVwLCB1c2UgdGhlCisgKiBmdW5jdGlvbiBDTE9DS19TZXRYdGFsMzJGcmVxIHRvIHNldCB0aGUgdmFsdWUgaW4gdGhlIGNsb2NrIGRyaXZlci4KKyAqCisgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdGhlIG11bHRpY29yZSBwbGF0Zm9ybXMgd2hlcmUgb25seSBvbmUgY29yZSBuZWVkcyB0byBzZXQgdXAKKyAqIHRoZSBjbG9jay4gQWxsIG90aGVyIGNvcmVzIG5lZWQgdG8gY2FsbCB0aGUgQ0xPQ0tfU2V0WHRhbDMyRnJlcQorICogdG8gZ2V0IGEgdmFsaWQgY2xvY2sgZnJlcXVlbmN5LgorICovCitleHRlcm4gdWludDMyX3QgZ194dGFsMzJGcmVxOworCisKKyNpZiAoZGVmaW5lZChPU0MpICYmICEoZGVmaW5lZChPU0MwKSkpCisjZGVmaW5lIE9TQzAgT1NDCisjZW5kaWYKKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBETUFNVVguICovCisjZGVmaW5lIERNQU1VWF9DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfRG1hbXV4MCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIFJUQy4gKi8KKyNkZWZpbmUgUlRDX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19SdGMwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgUElULiAqLworI2RlZmluZSBQSVRfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX1BpdDAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBQT1JULiAqLworI2RlZmluZSBQT1JUX0NMT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19Qb3J0QSwga0NMT0NLX1BvcnRCLCBrQ0xPQ0tfUG9ydEMgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBUU0kuICovCisjZGVmaW5lIFRTSV9DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfVHNpMCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIERTUEkuICovCisjZGVmaW5lIERTUElfQ0xPQ0tTICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19TcGkwLCBrQ0xPQ0tfU3BpMSBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIExQVUFSVC4gKi8KKyNkZWZpbmUgTFBVQVJUX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19McHVhcnQwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgREFDLiAqLworI2RlZmluZSBEQUNfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0RhYzAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBMUFRNUi4gKi8KKyNkZWZpbmUgTFBUTVJfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfTHB0bXIwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgQURDMTYuICovCisjZGVmaW5lIEFEQzE2X0NMT0NLUyBcCisgICAgeyAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19BZGMwICBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIFRSTkcuICovCisjZGVmaW5lIFRSTkdfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19Ucm5nMCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIERNQS4gKi8KKyNkZWZpbmUgRURNQV9DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfRG1hMCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIENNVC4gKi8KKyNkZWZpbmUgQ01UX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19DbXQwIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgVFBNLiAqLworI2RlZmluZSBUUE1fQ0xPQ0tTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGtDTE9DS19UcG0wLCBrQ0xPQ0tfVHBtMSwga0NMT0NLX1RwbTIgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBMVEMuICovCisjZGVmaW5lIExUQ19DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfTHRjMCBcCisgICAgfQorCisvKiEgQGJyaWVmIENsb2NrIGlwIG5hbWUgYXJyYXkgZm9yIEkyQy4gKi8KKyNkZWZpbmUgSTJDX0NMT0NLUyAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0kyYzAsIGtDTE9DS19JMmMxIFwKKyAgICB9CisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgQ01QLiAqLworI2RlZmluZSBDTVBfQ0xPQ0tTICBcCisgICAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0NtcDAgXAorICAgIH0KKworLyohIEBicmllZiBDbG9jayBpcCBuYW1lIGFycmF5IGZvciBWUkVGLiAqLworI2RlZmluZSBWUkVGX0NMT0NLUyAgXAorICAgIHsgICAgICAgICAgICAgICAgXAorICAgICAgICBrQ0xPQ0tfVnJlZjAgXAorICAgIH0gICAgCisKKy8qISBAYnJpZWYgQ2xvY2sgaXAgbmFtZSBhcnJheSBmb3IgRENEQy4gKi8KKyNkZWZpbmUgRENEQ19DTE9DS1MgIFwKKyAgICB7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAga0NMT0NLX0RjZGMwIFwKKyAgICB9CisKKy8qIQorICogQGJyaWVmIExQTyBjbG9jayBmcmVxdWVuY3kuCisgKi8KKyNkZWZpbmUgTFBPX0NMS19GUkVRIDEwMDBVCisKKy8qISBAYnJpZWYgUHJlcGhlcmlhbHMgY2xvY2sgc291cmNlIGRlZmluaXRpb24uICovCisjZGVmaW5lIFNZU19DTEsga0NMT0NLX0NvcmVTeXNDbGsKKyNkZWZpbmUgQlVTX0NMSyBrQ0xPQ0tfQnVzQ2xrCisKKyNkZWZpbmUgSTJDMF9DTEtfU1JDIEJVU19DTEsKKyNkZWZpbmUgSTJDMV9DTEtfU1JDIFNZU19DTEsKKyNkZWZpbmUgRFNQSTBfQ0xLX1NSQyBCVVNfQ0xLCisjZGVmaW5lIERTUEkxX0NMS19TUkMgQlVTX0NMSworCisvKiEgQGJyaWVmIENsb2NrIG5hbWUgdXNlZCB0byBnZXQgY2xvY2sgZnJlcXVlbmN5LiAqLwordHlwZWRlZiBlbnVtIF9jbG9ja19uYW1lCit7CisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGxheWVyIGNsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGtDTE9DS19Db3JlU3lzQ2xrLCAvKiE8IENvcmUvc3lzdGVtIGNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGtDTE9DS19QbGF0Q2xrLCAgICAvKiE8IFBsYXRmb3JtIGNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGtDTE9DS19CdXNDbGssICAgICAvKiE8IEJ1cyBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGtDTE9DS19GbGFzaENsaywgICAvKiE8IEZsYXNoIGNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPU0MgY2xvY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGtDTE9DS19FcjMya0NsaywgIC8qITwgRXh0ZXJuYWwgcmVmZXJlbmNlIDMySyBjbG9jayAoRVJDTEszMkspICAgICAgICAgICAgICAgICAgICovCisgICAga0NMT0NLX09zYzBFckNsaywgLyohPCBPU0MwIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayAoT1NDMEVSQ0xLKSAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1DRyBhbmQgTUNHLUxpdGUgY2xvY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBrQ0xPQ0tfTWNnRml4ZWRGcmVxQ2xrLCAgIC8qITwgTUNHIGZpeGVkIGZyZXF1ZW5jeSBjbG9jayAoTUNHRkZDTEspICAgICAgICAgICAgICAgICAgICAgICovCisgICAga0NMT0NLX01jZ0ludGVybmFsUmVmQ2xrLCAvKiE8IE1DRyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKE1DR0lSQ0xLKSAgICAgICAgICAgICAgICAgICAqLworICAgIGtDTE9DS19NY2dGbGxDbGssICAgICAgICAgLyohPCBNQ0dGTExDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrQ0xPQ0tfTWNnUGVyaXBoQ2xrLCAgICAgIC8qITwgTUNHIHBlcmlwaGVyYWwgY2xvY2sgKE1DR1BDTEspICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXIgY2xvY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAga0NMT0NLX0xwb0NsaywgLyohPCBMUE8gY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworfSBjbG9ja19uYW1lX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBjbG9ja19nYXRlX3QgZGVmaW5pdGlvbjoKKworIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8IFNJTV9TQ0dDIHJlZ2lzdGVyIG9mZnNldCAgICAgICB8ICAgY29udHJvbCBiaXQgb2Zmc2V0IGluIFNDR0MgfAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBGb3IgZXhhbXBsZSwgdGhlIFNESEMgY2xvY2sgZ2F0ZSBpcyBjb250cm9sbGVkIGJ5IFNJTV9TQ0dDM1sxN10sIHRoZQorIFNJTV9TQ0dDMyBvZmZzZXQgaW4gU0lNIGlzIDB4MTAzMCwgdGhlbiBrQ2xvY2tHYXRlU2RoYzAgaXMgZGVmaW5lZCBhcworCisgICAgICAgICAgICAgIGtDbG9ja0dhdGVTZGhjMCA9ICgweDEwMzAgPDwgMTYpIHwgMTc7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgQ0xLX0dBVEVfUkVHX09GRlNFVF9TSElGVCAxNlUKKyNkZWZpbmUgQ0xLX0dBVEVfUkVHX09GRlNFVF9NQVNLIDB4RkZGRjAwMDBVCisjZGVmaW5lIENMS19HQVRFX0JJVF9TSElGVF9TSElGVCAwVQorI2RlZmluZSBDTEtfR0FURV9CSVRfU0hJRlRfTUFTSyAweDAwMDBGRkZGVQorCisjZGVmaW5lIENMS19HQVRFX0RFRklORShyZWdfb2Zmc2V0LCBiaXRfc2hpZnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKCgocmVnX29mZnNldCkgPDwgQ0xLX0dBVEVfUkVHX09GRlNFVF9TSElGVCkgJiBDTEtfR0FURV9SRUdfT0ZGU0VUX01BU0spIHwgXAorICAgICAoKChiaXRfc2hpZnQpIDw8IENMS19HQVRFX0JJVF9TSElGVF9TSElGVCkgJiBDTEtfR0FURV9CSVRfU0hJRlRfTUFTSykpCisKKyNkZWZpbmUgQ0xLX0dBVEVfQUJTVFJBQ1RfUkVHX09GRlNFVCh4KSAoKCh4KSZDTEtfR0FURV9SRUdfT0ZGU0VUX01BU0spID4+IENMS19HQVRFX1JFR19PRkZTRVRfU0hJRlQpCisjZGVmaW5lIENMS19HQVRFX0FCU1RSQUNUX0JJVFNfU0hJRlQoeCkgKCgoeCkmQ0xLX0dBVEVfQklUX1NISUZUX01BU0spID4+IENMS19HQVRFX0JJVF9TSElGVF9TSElGVCkKKworLyohIEBicmllZiBDbG9jayBnYXRlIG5hbWUgdXNlZCBmb3IgQ0xPQ0tfRW5hYmxlQ2xvY2svQ0xPQ0tfRGlzYWJsZUNsb2NrLiAqLwordHlwZWRlZiBlbnVtIF9jbG9ja19pcF9uYW1lCit7CisgICAga0NMT0NLX0lwSW52YWxpZCA9IDBVLAorCisgICAga0NMT0NLX0NtdDAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM0VSwgMlUpLAorICAgIGtDTE9DS19JMmMwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzNFUsIDZVKSwKKyAgICBrQ0xPQ0tfSTJjMSA9IENMS19HQVRFX0RFRklORSgweDEwMzRVLCA3VSksCisgICAga0NMT0NLX0NtcDAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM0VSwgMTlVKSwKKyAgICBrQ0xPQ0tfVnJlZjAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM0VSwgMjBVKSwKKworICAgIGtDTE9DS19McHRtcjAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMFUpLAorICAgIGtDTE9DS19Uc2kwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDVVKSwKKyAgICBrQ0xPQ0tfUG9ydEEgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgOVUpLAorICAgIGtDTE9DS19Qb3J0QiA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAxMFUpLAorICAgIGtDTE9DS19Qb3J0QyA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAxMVUpLAorICAgIGtDTE9DS19McHVhcnQwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDIwVSksCisgICAga0NMT0NLX0Flc2EgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMjRVKSwKKyAgICBrQ0xPQ0tfTHRjMCA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAyNFUpLAorICAgIGtDTE9DS19Sc2ltID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDI1VSksCisgICAga0NMT0NLX0RjZGMwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDI2VSksCisgICAga0NMT0NLX0J0bGwgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMjdVKSwKKyAgICBrQ0xPQ0tfUGh5RGlnID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzOFUsIDI4VSksCisgICAga0NMT0NLX1ppZ0JlZSA9IENMS19HQVRFX0RFRklORSgweDEwMzhVLCAyOVUpLAorICAgIGtDTE9DS19HZW5Gc2sgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDM4VSwgMzFVKSwKKworICAgIGtDTE9DS19GdGYwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDBVKSwKKyAgICBrQ0xPQ0tfRG1hbXV4MCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAxVSksCisgICAga0NMT0NLX1RybmcwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDlVKSwKKyAgICBrQ0xPQ0tfU3BpMCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAxMlUpLAorICAgIGtDTE9DS19TcGkxID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDEzVSksCisgICAga0NMT0NLX1BpdDAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMjNVKSwKKyAgICBrQ0xPQ0tfVHBtMCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAyNFUpLAorICAgIGtDTE9DS19UcG0xID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDI1VSksCisgICAga0NMT0NLX1RwbTIgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMjZVKSwKKyAgICBrQ0xPQ0tfQWRjMCA9IENMS19HQVRFX0RFRklORSgweDEwM0NVLCAyN1UpLAorICAgIGtDTE9DS19SdGMwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTAzQ1UsIDI5VSksCisgICAga0NMT0NLX0RhYzAgPSBDTEtfR0FURV9ERUZJTkUoMHgxMDNDVSwgMzFVKSwKKworICAgIGtDTE9DS19EbWEwID0gQ0xLX0dBVEVfREVGSU5FKDB4MTA0MFUsIDhVKSwKK30gY2xvY2tfaXBfbmFtZV90OworCisvKiFAYnJpZWYgU0lNIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBjbG9jayBzZXR0aW5nLiAqLwordHlwZWRlZiBzdHJ1Y3QgX3NpbV9jbG9ja19jb25maWcKK3sKKyAgICB1aW50OF90IHBsbEZsbFNlbDsgIC8qITwgUExML0ZMTC9JUkM0OE0gc2VsZWN0aW9uLiAgICAgICAgICovCisgICAgdWludDhfdCBwbGxGbGxEaXY7ICAvKiE8IFBMTEZMTFNFTCBjbG9jayBkaXZpZGVyIGRpdmlzb3IuICAqLworICAgIHVpbnQ4X3QgcGxsRmxsRnJhYzsgLyohPCBQTExGTExTRUwgY2xvY2sgZGl2aWRlciBmcmFjdGlvbi4gKi8KKyAgICB1aW50OF90IGVyMzJrU3JjOyAgIC8qITwgRVJDTEszMksgc291cmNlIHNlbGVjdGlvbi4gICAgICAgICovCisgICAgdWludDMyX3QgY2xrZGl2MTsgICAvKiE8IFNJTV9DTEtESVYxLiAgICAgICAgICAgICAgICAgICAgICAqLworfSBzaW1fY2xvY2tfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgT1NDIHdvcmsgbW9kZS4gKi8KK3R5cGVkZWYgZW51bSBfb3NjX21vZGUKK3sKKyAgICBrT1NDX01vZGVFeHQgPSAwVSwgLyohPCBVc2UgYW4gZXh0ZXJuYWwgY2xvY2suICAgKi8KKyNpZiAoZGVmaW5lZChNQ0dfQzJfRVJFRlNfTUFTSykgJiYgIShkZWZpbmVkKE1DR19DMl9FUkVGUzBfTUFTSykpKQorICAgIGtPU0NfTW9kZU9zY0xvd1Bvd2VyID0gTUNHX0MyX0VSRUZTX01BU0ssIC8qITwgT3NjaWxsYXRvciBsb3cgcG93ZXIuICovCisjZWxzZQorICAgIGtPU0NfTW9kZU9zY0xvd1Bvd2VyID0gTUNHX0MyX0VSRUZTMF9NQVNLLCAvKiE8IE9zY2lsbGF0b3IgbG93IHBvd2VyLiAqLworI2VuZGlmCisgICAga09TQ19Nb2RlT3NjSGlnaEdhaW4gPSAwVQorI2lmIChkZWZpbmVkKE1DR19DMl9FUkVGU19NQVNLKSAmJiAhKGRlZmluZWQoTUNHX0MyX0VSRUZTMF9NQVNLKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ0dfQzJfRVJFRlNfTUFTSworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DR19DMl9FUkVGUzBfTUFTSworI2VuZGlmCisjaWYgKGRlZmluZWQoTUNHX0MyX0hHT19NQVNLKSAmJiAhKGRlZmluZWQoTUNHX0MyX0hHTzBfTUFTSykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUNHX0MyX0hHT19NQVNLLCAvKiE8IE9zY2lsbGF0b3IgaGlnaCBnYWluLiAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DR19DMl9IR08wX01BU0ssIC8qITwgT3NjaWxsYXRvciBoaWdoIGdhaW4uICovCisjZW5kaWYKK30gb3NjX21vZGVfdDsKKworCisvKiEKKyAqIEBicmllZiBPU0MgSW5pdGlhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBTdHJ1Y3R1cmUKKyAqCisgKiBEZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlIHRvIGluaXRpYWxpemUgdGhlIE9TQy4KKyAqIFdoZW4gcG9ydGluZyB0byBhIG5ldyBib2FyZCwgc2V0IHRoZSBmb2xsb3dpbmcgbWVtYmVycworICogYWNjb3JkaW5nIHRvIHRoZSBib2FyZCBzZXR0aW5nOgorICogMS4gZnJlcTogVGhlIGV4dGVybmFsIGZyZXF1ZW5jeS4KKyAqIDIuIHdvcmtNb2RlOiBUaGUgT1NDIG1vZHVsZSBtb2RlLgorICovCit0eXBlZGVmIHN0cnVjdCBfb3NjX2NvbmZpZworeworICAgIHVpbnQzMl90IGZyZXE7IC8qITwgRXh0ZXJuYWwgY2xvY2sgZnJlcXVlbmN5LiAgICAqLworICAgIG9zY19tb2RlX3Qgd29ya01vZGU7IC8qITwgT1NDIHdvcmsgbW9kZSBzZXR0aW5nLiAgICAgICAqLworfSBvc2NfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgTUNHIEZMTCByZWZlcmVuY2UgY2xvY2sgc291cmNlIHNlbGVjdC4gKi8KK3R5cGVkZWYgZW51bSBfbWNnX2ZsbF9zcmMKK3sKKyAgICBrTUNHX0ZsbFNyY0V4dGVybmFsLCAvKiE8IEV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBzZWxlY3RlZCAgICAgICAgICAqLworICAgIGtNQ0dfRmxsU3JjSW50ZXJuYWwgIC8qITwgVGhlIHNsb3cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHNlbGVjdGVkICovCit9IG1jZ19mbGxfc3JjX3Q7CisKKy8qISBAYnJpZWYgTUNHIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3QgKi8KK3R5cGVkZWYgZW51bSBfbWNnX2lyY19tb2RlCit7CisgICAga01DR19JcmNTbG93LCAvKiE8IFNsb3cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIHNlbGVjdGVkICovCisgICAga01DR19JcmNGYXN0ICAvKiE8IEZhc3QgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIHNlbGVjdGVkICovCit9IG1jZ19pcmNfbW9kZV90OworCisvKiEgQGJyaWVmIE1DRyBEQ08gTWF4aW11bSBGcmVxdWVuY3kgd2l0aCAzMi43Njgga0h6IFJlZmVyZW5jZSAqLwordHlwZWRlZiBlbnVtIF9tY2dfZG14MzIKK3sKKyAgICBrTUNHX0RteDMyRGVmYXVsdCwgLyohPCBEQ08gaGFzIGEgZGVmYXVsdCByYW5nZSBvZiAyNSUgKi8KKyAgICBrTUNHX0RteDMyRmluZSAgICAgLyohPCBEQ08gaXMgZmluZS10dW5lZCBmb3IgbWF4aW11bSBmcmVxdWVuY3kgd2l0aCAzMi43Njgga0h6IHJlZmVyZW5jZSAqLworfSBtY2dfZG14MzJfdDsKKworLyohIEBicmllZiBNQ0cgRENPIHJhbmdlIHNlbGVjdCAqLwordHlwZWRlZiBlbnVtIF9tY2dfZHJzCit7CisgICAga01DR19EcnNMb3csICAgICAvKiE8IExvdyBmcmVxdWVuY3kgcmFuZ2UgICAgICAgKi8KKyAgICBrTUNHX0Ryc01pZCwgICAgIC8qITwgTWlkIGZyZXF1ZW5jeSByYW5nZSAgICAgICAqLworICAgIGtNQ0dfRHJzTWlkSGlnaCwgLyohPCBNaWQtSGlnaCBmcmVxdWVuY3kgcmFuZ2UgICovCisgICAga01DR19EcnNIaWdoICAgICAvKiE8IEhpZ2ggZnJlcXVlbmN5IHJhbmdlICAgICAgKi8KK30gbWNnX2Ryc190OworCisvKiEgQGJyaWVmIE1DRyBQTEwgcmVmZXJlbmNlIGNsb2NrIHNlbGVjdCAqLwordHlwZWRlZiBlbnVtIF9tY2dfcGxsX3JlZl9zcmMKK3sKKyAgICBrTUNHX1BsbFJlZk9zYzAsICAvKiE8IFNlbGVjdHMgT1NDMCBhcyBQTEwgcmVmZXJlbmNlIGNsb2NrICAgICAgICAgICAgICAgICAqLworICAgIGtNQ0dfUGxsUmVmT3NjMSAgIC8qITwgU2VsZWN0cyBPU0MxIGFzIFBMTCByZWZlcmVuY2UgY2xvY2sgICAgICAgICAgICAgICAgICovCit9IG1jZ19wbGxfcmVmX3NyY190OworCisvKiEgQGJyaWVmIE1DR09VVCBjbG9jayBzb3VyY2UuICovCit0eXBlZGVmIGVudW0gX21jZ19jbGtvdXRfc3JjCit7CisgICAga01DR19DbGtPdXRTcmNPdXQsICAgICAgLyohPCBPdXRwdXQgb2YgdGhlIEZMTCBpcyBzZWxlY3RlZCAocmVzZXQgZGVmYXVsdCkgICovCisgICAga01DR19DbGtPdXRTcmNJbnRlcm5hbCwgLyohPCBJbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgc2VsZWN0ZWQgICAgICAgICAgICovCisgICAga01DR19DbGtPdXRTcmNFeHRlcm5hbCwgLyohPCBFeHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgc2VsZWN0ZWQgICAgICAgICAgICovCit9IG1jZ19jbGtvdXRfc3JjX3Q7CisKKy8qISBAYnJpZWYgTUNHIEF1dG9tYXRpYyBUcmltIE1hY2hpbmUgU2VsZWN0ICovCit0eXBlZGVmIGVudW0gX21jZ19hdG1fc2VsZWN0Cit7CisgICAga01DR19BdG1TZWwzMmssIC8qITwgMzIga0h6IEludGVybmFsIFJlZmVyZW5jZSBDbG9jayBzZWxlY3RlZCAgKi8KKyAgICBrTUNHX0F0bVNlbDRtICAgLyohPCA0IE1IeiBJbnRlcm5hbCBSZWZlcmVuY2UgQ2xvY2sgc2VsZWN0ZWQgICAqLworfSBtY2dfYXRtX3NlbGVjdF90OworCisvKiEgQGJyaWVmIE1DRyBPU0MgQ2xvY2sgU2VsZWN0ICovCit0eXBlZGVmIGVudW0gX21jZ19vc2NzZWwKK3sKKyAgICBrTUNHX09zY3NlbE9zYywgLyohPCBTZWxlY3RzIFN5c3RlbSBPc2NpbGxhdG9yIChPU0NDTEspICovCisgICAga01DR19Pc2NzZWxSdGMsIC8qITwgU2VsZWN0cyAzMiBrSHogUlRDIE9zY2lsbGF0b3IgICAgICAqLworfSBtY2dfb3Njc2VsX3Q7CisKKy8qISBAYnJpZWYgTUNHIFBMTENTIHNlbGVjdCAqLwordHlwZWRlZiBlbnVtIF9tY2dfcGxsX2Nsa19zZWxlY3QKK3sKKyAgICBrTUNHX1BsbENsa1NlbFBsbDAsIC8qITwgUExMMCBvdXRwdXQgY2xvY2sgaXMgc2VsZWN0ZWQgICovCisgICAga01DR19QbGxDbGtTZWxQbGwxICAgICAgICAgICAgICAgICAgICAgICAvKiBQTEwxIG91dHB1dCBjbG9jayBpcyBzZWxlY3RlZCAgICAqLworfSBtY2dfcGxsX2Nsa19zZWxlY3RfdDsKKworLyohIEBicmllZiBNQ0cgY2xvY2sgbW9uaXRvciBtb2RlLiAqLwordHlwZWRlZiBlbnVtIF9tY2dfbW9uaXRvcl9tb2RlCit7CisgICAga01DR19Nb25pdG9yTm9uZSwgLyohPCBDbG9jayBtb25pdG9yIGlzIGRpc2FibGVkLiAgICAgICAgICovCisgICAga01DR19Nb25pdG9ySW50LCAgLyohPCBUcmlnZ2VyIGludGVycnVwdCB3aGVuIGNsb2NrIGxvc3QuICovCisgICAga01DR19Nb25pdG9yUmVzZXQgLyohPCBTeXN0ZW0gcmVzZXQgd2hlbiBjbG9jayBsb3N0LiAgICAgICovCit9IG1jZ19tb25pdG9yX21vZGVfdDsKKworLyohIEBicmllZiBNQ0cgc3RhdHVzLiAqLworZW51bSBfbWNnX3N0YXR1cworeworICAgIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9NQ0csIDApLCAgICAgICAvKiE8IENhbid0IHN3aXRjaCB0byB0YXJnZXQgbW9kZS4gKi8KKyAgICBrU3RhdHVzX01DR19Nb2RlSW52YWxpZCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9NQ0csIDEpLCAgICAgICAgICAgLyohPCBDdXJyZW50IG1vZGUgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uICovCisgICAga1N0YXR1c19NQ0dfQXRtQnVzQ2xvY2tJbnZhbGlkID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX01DRywgMiksICAgIC8qITwgSW52YWxpZCBidXMgY2xvY2sgZm9yIEFUTS4gKi8KKyAgICBrU3RhdHVzX01DR19BdG1EZXNpcmVkRnJlcUludmFsaWQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfTUNHLCAzKSwgLyohPCBJbnZhbGlkIGRlc2lyZWQgZnJlcXVlbmN5IGZvciBBVE0uICovCisgICAga1N0YXR1c19NQ0dfQXRtSXJjVXNlZCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9NQ0csIDQpLCAgICAgICAgICAgIC8qITwgSVJDIGlzIHVzZWQgd2hlbiB1c2luZyBBVE0uICovCisgICAga1N0YXR1c19NQ0dfQXRtSGFyZHdhcmVGYWlsID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX01DRywgNSksICAgICAgIC8qITwgSGFyZHdhcmUgZmFpbCBvY2N1cnMgZHVyaW5nIEFUTS4gKi8KKyAgICBrU3RhdHVzX01DR19Tb3VyY2VVc2VkID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX01DRywgNikgICAgICAgICAgICAgLyohPCBDYW4ndCBjaGFuZ2UgdGhlIGNsb2NrIHNvdXJjZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW4gdXNlLiAqLworfTsKKworLyohIEBicmllZiBNQ0cgc3RhdHVzIGZsYWdzLiAqLworZW51bSBfbWNnX3N0YXR1c19mbGFnc190Cit7CisgICAga01DR19SdGNPc2NMb3N0RmxhZyA9ICgxVSA8PCA0VSksIC8qITwgUlRDIE9TQyBsb3N0LiAgICAgICovCit9OworCisvKiEgQGJyaWVmIE1DRyBpbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgKE1DR0lSQ0xLKSBlbmFibGUgbW9kZSBkZWZpbml0aW9uLiAqLworZW51bSBfbWNnX2lyY2xrX2VuYWJsZV9tb2RlCit7CisgICAga01DR19JcmNsa0VuYWJsZSA9IE1DR19DMV9JUkNMS0VOX01BU0ssICAgICAgIC8qITwgTUNHSVJDTEsgZW5hYmxlLiAgICAgICAgICAgICAgKi8KKyAgICBrTUNHX0lyY2xrRW5hYmxlSW5TdG9wID0gTUNHX0MxX0lSRUZTVEVOX01BU0sgLyohPCBNQ0dJUkNMSyBlbmFibGUgaW4gc3RvcCBtb2RlLiAqLworfTsKKworCisvKiEgQGJyaWVmIE1DRyBtb2RlIGRlZmluaXRpb25zICovCit0eXBlZGVmIGVudW0gX21jZ19tb2RlCit7CisgICAga01DR19Nb2RlRkVJID0gMFUsIC8qITwgRkVJICAgLSBGTEwgRW5nYWdlZCBJbnRlcm5hbCAgICAgICAgICovCisgICAga01DR19Nb2RlRkJJLCAgICAgIC8qITwgRkJJICAgLSBGTEwgQnlwYXNzZWQgSW50ZXJuYWwgICAgICAgICovCisgICAga01DR19Nb2RlQkxQSSwgICAgIC8qITwgQkxQSSAgLSBCeXBhc3NlZCBMb3cgUG93ZXIgSW50ZXJuYWwgICovCisgICAga01DR19Nb2RlRkVFLCAgICAgIC8qITwgRkVFICAgLSBGTEwgRW5nYWdlZCBFeHRlcm5hbCAgICAgICAgICovCisgICAga01DR19Nb2RlRkJFLCAgICAgIC8qITwgRkJFICAgLSBGTEwgQnlwYXNzZWQgRXh0ZXJuYWwgICAgICAgICovCisgICAga01DR19Nb2RlQkxQRSwgICAgIC8qITwgQkxQRSAgLSBCeXBhc3NlZCBMb3cgUG93ZXIgRXh0ZXJuYWwgICovCisgICAga01DR19Nb2RlRXJyb3IgLyohPCBVbmtub3duIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gbWNnX21vZGVfdDsKKworCisvKiEgQGJyaWVmIE1DRyBtb2RlIGNoYW5nZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICoKKyAqIFdoZW4gcG9ydGluZyB0byBhIG5ldyBib2FyZCwgc2V0IHRoZSBmb2xsb3dpbmcgbWVtYmVycworICogYWNjb3JkaW5nIHRvIHRoZSBib2FyZCBzZXR0aW5nOgorICogMS4gZnJkaXY6IElmIHRoZSBGTEwgdXNlcyB0aGUgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLCBzZXQgdGhpcworICogICAgdmFsdWUgdG8gZW5zdXJlIHRoYXQgdGhlIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBkaXZpZGVkIGJ5IGZyZGl2IGlzCisgKiAgICBpbiB0aGUgMzEuMjUga0h6IHRvIDM5LjA2MjUga0h6IHJhbmdlLgorICogMi4gVGhlIFBMTCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlciBQUkRJVjogUExMIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgYWZ0ZXIKKyAqICAgIFBSRElWIHNob3VsZCBiZSBpbiB0aGUgRlNMX0ZFQVRVUkVfTUNHX1BMTF9SRUZfTUlOIHRvCisgKiAgICBGU0xfRkVBVFVSRV9NQ0dfUExMX1JFRl9NQVggcmFuZ2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9tY2dfY29uZmlnCit7CisgICAgbWNnX21vZGVfdCBtY2dNb2RlOyAvKiE8IE1DRyBtb2RlLiAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUNHSVJDQ0xLIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIHVpbnQ4X3QgaXJjbGtFbmFibGVNb2RlOyAvKiE8IE1DR0lSQ0xLIGVuYWJsZSBtb2RlLiAgICAgICAqLworICAgIG1jZ19pcmNfbW9kZV90IGlyY3M7ICAgICAvKiE8IFNvdXJjZSwgTUNHX0MyW0lSQ1NdLiAgICAgICAqLworICAgIHVpbnQ4X3QgZmNyZGl2OyAgICAgICAgICAvKiE8IERpdmlkZXIsIE1DR19TQ1tGQ1JESVZdLiAgICAqLworCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1DRyBGTEwgc2V0dGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIHVpbnQ4X3QgZnJkaXY7ICAgICAvKiE8IERpdmlkZXIgTUNHX0MxW0ZSRElWXS4gICAgICAqLworICAgIG1jZ19kcnNfdCBkcnM7ICAgICAvKiE8IERDTyByYW5nZSBNQ0dfQzRbRFJTVF9EUlNdLiAqLworICAgIG1jZ19kbXgzMl90IGRteDMyOyAvKiE8IE1DR19DNFtETVgzMl0uICAgICAgICAgICAgICAqLworICAgIG1jZ19vc2NzZWxfdCBvc2NzZWw7IC8qITwgT1NDIHNlbGVjdCBNQ0dfQzdbT1NDU0VMXS4gICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNQ0cgUExMIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK30gbWNnX2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZSB0aGUgY2xvY2sgZm9yIHNwZWNpZmljIElQLgorICoKKyAqIEBwYXJhbSBuYW1lICBXaGljaCBjbG9jayB0byBlbmFibGUsIHNlZSBccmVmIGNsb2NrX2lwX25hbWVfdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX0VuYWJsZUNsb2NrKGNsb2NrX2lwX25hbWVfdCBuYW1lKQoreworICAgIHVpbnQzMl90IHJlZ0FkZHIgPSBTSU1fQkFTRSArIENMS19HQVRFX0FCU1RSQUNUX1JFR19PRkZTRVQoKHVpbnQzMl90KW5hbWUpOworICAgICgqKHZvbGF0aWxlIHVpbnQzMl90ICopcmVnQWRkcikgfD0gKDFVIDw8IENMS19HQVRFX0FCU1RSQUNUX0JJVFNfU0hJRlQoKHVpbnQzMl90KW5hbWUpKTsKK30KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZSB0aGUgY2xvY2sgZm9yIHNwZWNpZmljIElQLgorICoKKyAqIEBwYXJhbSBuYW1lICBXaGljaCBjbG9jayB0byBkaXNhYmxlLCBzZWUgXHJlZiBjbG9ja19pcF9uYW1lX3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19EaXNhYmxlQ2xvY2soY2xvY2tfaXBfbmFtZV90IG5hbWUpCit7CisgICAgdWludDMyX3QgcmVnQWRkciA9IFNJTV9CQVNFICsgQ0xLX0dBVEVfQUJTVFJBQ1RfUkVHX09GRlNFVCgodWludDMyX3QpbmFtZSk7CisgICAgKCoodm9sYXRpbGUgdWludDMyX3QgKilyZWdBZGRyKSAmPSB+KDFVIDw8IENMS19HQVRFX0FCU1RSQUNUX0JJVFNfU0hJRlQoKHVpbnQzMl90KW5hbWUpKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0IEVSQ0xLMzJLIHNvdXJjZS4KKyAqCisgKiBAcGFyYW0gc3JjIFRoZSB2YWx1ZSB0byBzZXQgRVJDTEszMksgY2xvY2sgc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfU2V0RXIzMmtDbG9jayh1aW50MzJfdCBzcmMpCit7CisgICAgU0lNLT5TT1BUMSA9ICgoU0lNLT5TT1BUMSAmIH5TSU1fU09QVDFfT1NDMzJLU0VMX01BU0spIHwgU0lNX1NPUFQxX09TQzMyS1NFTChzcmMpKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0IExQVUFSVCBjbG9jayBzb3VyY2UuCisgKgorICogQHBhcmFtIHNyYyBUaGUgdmFsdWUgdG8gc2V0IExQVUFSVCBjbG9jayBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19TZXRMcHVhcnRDbG9jayh1aW50MzJfdCBzcmMpCit7CisgICAgU0lNLT5TT1BUMiA9ICgoU0lNLT5TT1BUMiAmIH5TSU1fU09QVDJfTFBVQVJUMFNSQ19NQVNLKSB8IFNJTV9TT1BUMl9MUFVBUlQwU1JDKHNyYykpOworfQorCisvKiEKKyAqIEBicmllZiBTZXQgVFBNIGNsb2NrIHNvdXJjZS4KKyAqCisgKiBAcGFyYW0gc3JjIFRoZSB2YWx1ZSB0byBzZXQgVFBNIGNsb2NrIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldFRwbUNsb2NrKHVpbnQzMl90IHNyYykKK3sKKyAgICBTSU0tPlNPUFQyID0gKChTSU0tPlNPUFQyICYgflNJTV9TT1BUMl9UUE1TUkNfTUFTSykgfCBTSU1fU09QVDJfVFBNU1JDKHNyYykpOworfQorCisvKiEKKyAqIEBicmllZiBTZXQgQ0xLT1VUIHNvdXJjZS4KKyAqCisgKiBAcGFyYW0gc3JjIFRoZSB2YWx1ZSB0byBzZXQgQ0xLT1VUIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldENsa091dENsb2NrKHVpbnQzMl90IHNyYykKK3sKKyAgICBTSU0tPlNPUFQyID0gKChTSU0tPlNPUFQyICYgflNJTV9TT1BUMl9DTEtPVVRTRUxfTUFTSykgfCBTSU1fU09QVDJfQ0xLT1VUU0VMKHNyYykpOworfQorCisvKiEKKyAqIEBicmllZiBTeXN0ZW0gY2xvY2sgZGl2aWRlcgorICoKKyAqIFNldCB0aGUgU0lNX0NMS0RJVjFbT1VURElWMV0sIFNJTV9DTEtESVYxW09VVERJVjRdLgorICoKKyAqIEBwYXJhbSBvdXRkaXYxIENsb2NrIDEgb3V0cHV0IGRpdmlkZXIgdmFsdWUuCisgKgorICogQHBhcmFtIG91dGRpdjQgQ2xvY2sgNCBvdXRwdXQgZGl2aWRlciB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldE91dERpdih1aW50MzJfdCBvdXRkaXYxLCB1aW50MzJfdCBvdXRkaXY0KQoreworICAgIFNJTS0+Q0xLRElWMSA9IFNJTV9DTEtESVYxX09VVERJVjEob3V0ZGl2MSkgfCBTSU1fQ0xLRElWMV9PVVRESVY0KG91dGRpdjQpOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBjbG9jayBmcmVxdWVuY3kgZm9yIGEgc3BlY2lmaWMgY2xvY2sgbmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgY3VycmVudCBjbG9jayBjb25maWd1cmF0aW9ucyBhbmQgdGhlbiBjYWxjdWxhdGVzCisgKiB0aGUgY2xvY2sgZnJlcXVlbmN5IGZvciBhIHNwZWNpZmljIGNsb2NrIG5hbWUgZGVmaW5lZCBpbiBjbG9ja19uYW1lX3QuCisgKiBUaGUgTUNHIG11c3QgYmUgcHJvcGVybHkgY29uZmlndXJlZCBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gY2xvY2tOYW1lIENsb2NrIG5hbWVzIGRlZmluZWQgaW4gY2xvY2tfbmFtZV90CisgKiBAcmV0dXJuIENsb2NrIGZyZXF1ZW5jeSB2YWx1ZSBpbiBIZXJ0egorICovCit1aW50MzJfdCBDTE9DS19HZXRGcmVxKGNsb2NrX25hbWVfdCBjbG9ja05hbWUpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIGNvcmUgY2xvY2sgb3Igc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBAcmV0dXJuIENsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0Q29yZVN5c0Nsa0ZyZXEodm9pZCk7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgcGxhdGZvcm0gY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIEByZXR1cm4gQ2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCit1aW50MzJfdCBDTE9DS19HZXRQbGF0Q2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBidXMgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIEByZXR1cm4gQ2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCit1aW50MzJfdCBDTE9DS19HZXRCdXNDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIGZsYXNoIGNsb2NrIGZyZXF1ZW5jeS4KKyAqCisgKiBAcmV0dXJuIENsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqLwordWludDMyX3QgQ0xPQ0tfR2V0Rmxhc2hDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXQgdGhlIGV4dGVybmFsIHJlZmVyZW5jZSAzMksgY2xvY2sgZnJlcXVlbmN5IChFUkNMSzMySykuCisgKgorICogQHJldHVybiBDbG9jayBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3VpbnQzMl90IENMT0NLX0dldEVyMzJrQ2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBPU0MwIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgKE9TQzBFUkNMSykuCisgKgorICogQHJldHVybiBDbG9jayBmcmVxdWVuY3kgaW4gSHouCisgKi8KK3VpbnQzMl90IENMT0NLX0dldE9zYzBFckNsa0ZyZXEodm9pZCk7CisKKy8qIQorICogQGJyaWVmIFNldCB0aGUgY2xvY2sgY29uZmlndXJlIGluIFNJTSBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHN5c3RlbSBsYXllciBjbG9jayBzZXR0aW5ncyBpbiBTSU0gbW9kdWxlLgorICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJlIHN0cnVjdHVyZS4KKyAqLwordm9pZCBDTE9DS19TZXRTaW1Db25maWcoc2ltX2Nsb2NrX2NvbmZpZ190IGNvbnN0ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBTZXQgdGhlIHN5c3RlbSBjbG9jayBkaXZpZGVycyBpbiBTSU0gdG8gc2FmZSB2YWx1ZS4KKyAqCisgKiBUaGUgc3lzdGVtIGxldmVsIGNsb2NrcyAoY29yZSBjbG9jaywgYnVzIGNsb2NrLCBmbGV4YnVzIGNsb2NrIGFuZCBmbGFzaCBjbG9jaykKKyAqIG11c3QgYmUgaW4gYWxsb3dlZCByYW5nZXMuIER1cmluZyBNQ0cgY2xvY2sgbW9kZSBzd2l0Y2gsIHRoZSBNQ0cgb3V0cHV0IGNsb2NrCisgKiBjaGFuZ2VzIHRoZW4gdGhlIHN5c3RlbSBsZXZlbCBjbG9ja3MgbWF5IGJlIG91dCBvZiByYW5nZS4gVGhpcyBmdW5jdGlvbiBjb3VsZAorICogYmUgdXNlZCBiZWZvcmUgTUNHIG1vZGUgY2hhbmdlLCB0byBtYWtlIHN1cmUgc3lzdGVtIGxldmVsIGNsb2NrcyBhcmUgaW4gYWxsb3dlZAorICogcmFuZ2UuCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmUgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfU2V0U2ltU2FmZURpdnModm9pZCkKK3sKKyAgICBTSU0tPkNMS0RJVjEgPSAweDAwMDQwMDAwVTsKK30KKworLyohIEBuYW1lIE1DRyBmcmVxdWVuY3kgZnVuY3Rpb25zLiAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIE1DRyBvdXRwdXQgY2xvY2sgKE1DR09VVENMSykgZnJlcXVlbmN5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgTUNHIG91dHB1dCBjbG9jayBmcmVxdWVuY3kgaW4gSHogYmFzZWQgb24gdGhlIGN1cnJlbnQgTUNHCisgKiByZWdpc3RlciB2YWx1ZS4KKyAqCisgKiBAcmV0dXJuIFRoZSBmcmVxdWVuY3kgb2YgTUNHT1VUQ0xLLgorICovCit1aW50MzJfdCBDTE9DS19HZXRPdXRDbGtGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBNQ0cgRkxMIGNsb2NrIChNQ0dGTExDTEspIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIE1DRyBGTEwgY2xvY2sgZnJlcXVlbmN5IGluIEh6IGJhc2VkIG9uIHRoZSBjdXJyZW50IE1DRworICogcmVnaXN0ZXIgdmFsdWUuIFRoZSBGTEwgaXMgZW5hYmxlZCBpbiBGRUkvRkJJL0ZFRS9GQkUgbW9kZSBhbmQKKyAqIGRpc2FibGVkIGluIGxvdyBwb3dlciBzdGF0ZSBpbiBvdGhlciBtb2Rlcy4KKyAqCisgKiBAcmV0dXJuIFRoZSBmcmVxdWVuY3kgb2YgTUNHRkxMQ0xLLgorICovCit1aW50MzJfdCBDTE9DS19HZXRGbGxGcmVxKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBNQ0cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIChNQ0dJUkNMSykgZnJlcXVlbmN5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgTUNHIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgaW4gSHogYmFzZWQKKyAqIG9uIHRoZSBjdXJyZW50IE1DRyByZWdpc3RlciB2YWx1ZS4KKyAqCisgKiBAcmV0dXJuIFRoZSBmcmVxdWVuY3kgb2YgTUNHSVJDTEsuCisgKi8KK3VpbnQzMl90IENMT0NLX0dldEludGVybmFsUmVmQ2xrRnJlcSh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTUNHIGZpeGVkIGZyZXF1ZW5jeSBjbG9jayAoTUNHRkZDTEspIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIE1DRyBmaXhlZCBmcmVxdWVuY3kgY2xvY2sgZnJlcXVlbmN5IGluIEh6IGJhc2VkCisgKiBvbiB0aGUgY3VycmVudCBNQ0cgcmVnaXN0ZXIgdmFsdWUuCisgKgorICogQHJldHVybiBUaGUgZnJlcXVlbmN5IG9mIE1DR0ZGQ0xLLgorICovCit1aW50MzJfdCBDTE9DS19HZXRGaXhlZEZyZXFDbGtGcmVxKHZvaWQpOworCisKKy8qQH0qLworCisvKiEgQG5hbWUgTUNHIGNsb2NrIGNvbmZpZ3VyYXRpb24uICovCisvKkB7Ki8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTUNHIGxvdyBwb3dlci4KKyAqCisgKiBFbmFibGluZyB0aGUgTUNHIGxvdyBwb3dlciBkaXNhYmxlcyB0aGUgUExMIGFuZCBGTEwgaW4gYnlwYXNzIG1vZGVzLiBJbiBvdGhlciB3b3JkcywKKyAqIGluIEZCRSBhbmQgUEJFIG1vZGVzLCBlbmFibGluZyBsb3cgcG93ZXIgc2V0cyB0aGUgTUNHIHRvIEJMUEUgbW9kZS4gSW4gRkJJIGFuZAorICogUEJJIG1vZGVzLCBlbmFibGluZyBsb3cgcG93ZXIgc2V0cyB0aGUgTUNHIHRvIEJMUEkgbW9kZS4KKyAqIFdoZW4gZGlzYWJsaW5nIHRoZSBNQ0cgbG93IHBvd2VyLCB0aGUgUExMIG9yIEZMTCBhcmUgZW5hYmxlZCBiYXNlZCBvbiBNQ0cgc2V0dGluZ3MuCisgKgorICogQHBhcmFtIGVuYWJsZSBUcnVlIHRvIGVuYWJsZSBNQ0cgbG93IHBvd2VyLCBmYWxzZSB0byBkaXNhYmxlIE1DRyBsb3cgcG93ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTE9DS19TZXRMb3dQb3dlckVuYWJsZShib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgTUNHLT5DMiB8PSBNQ0dfQzJfTFBfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUNHLT5DMiAmPSB+TUNHX0MyX0xQX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBJbnRlcm5hbCBSZWZlcmVuY2UgY2xvY2sgKE1DR0lSQ0xLKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFxjIE1DR0lSQ0xLIGJhc2Ugb24gcGFyYW1ldGVycy4gSXQgYWxzbyBzZWxlY3RzIHRoZSBJUkMKKyAqIHNvdXJjZS4gSWYgdGhlIGZhc3QgSVJDIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZmFzdCBJUkMgZGl2aWRlci4KKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBzZXRzIHdoZXRoZXIgdGhlIFxjIE1DR0lSQ0xLIGlzIGVuYWJsZWQgaW4gc3RvcCBtb2RlLgorICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGluIEZCSS9QQkkvQkxQSSBtb2RlcyBtYXkgY2hhbmdlIHRoZSBzeXN0ZW0gY2xvY2suIEFzIGEgcmVzdWx0LAorICogdXNpbmcgdGhlIGZ1bmN0aW9uIGluIHRoZXNlIG1vZGVzIGl0IGlzIG5vdCBhbGxvd2VkLgorICoKKyAqIEBwYXJhbSBlbmFibGVNb2RlIE1DR0lSQ0xLIGVuYWJsZSBtb2RlLCBPUidlZCB2YWx1ZSBvZiBAcmVmIF9tY2dfaXJjbGtfZW5hYmxlX21vZGUuCisgKiBAcGFyYW0gaXJjcyAgICAgICBNQ0dJUkNMSyBjbG9jayBzb3VyY2UsIGNob29zZSBmYXN0IG9yIHNsb3cuCisgKiBAcGFyYW0gZmNyZGl2ICAgICBGYXN0IElSQyBkaXZpZGVyIHNldHRpbmcgKFxjIEZDUkRJVikuCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX1NvdXJjZVVzZWQgQmVjYXVzZSB0aGUgaW50ZXJuYWxsIHJlZmVyZW5jZSBjbG9jayBpcyB1c2VkIGFzIGEgY2xvY2sgc291cmNlLAorICogdGhlIGNvbmZ1cmF0aW9uIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gT3RoZXJ3aXNlLCBhIGdsaXRjaCBvY2N1cnMuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBNQ0dJUkNMSyBjb25maWd1cmF0aW9uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0SW50ZXJuYWxSZWZDbGtDb25maWcodWludDhfdCBlbmFibGVNb2RlLCBtY2dfaXJjX21vZGVfdCBpcmNzLCB1aW50OF90IGZjcmRpdik7CisKKy8qIQorICogQGJyaWVmIFNlbGVjdHMgdGhlIE1DRyBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2suCisgKgorICogU2VsZWN0cyB0aGUgTUNHIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBzb3VyY2UsIGNoYW5nZXMgdGhlIE1DR19DN1tPU0NTRUxdLAorICogYW5kIHdhaXRzIGZvciB0aGUgY2xvY2sgc291cmNlIHRvIGJlIHN0YWJsZS4gQmVjYXVzZSB0aGUgZXh0ZXJuYWwgcmVmZXJlbmNlCisgKiBjbG9jayBzaG91bGQgbm90IGJlIGNoYW5nZWQgaW4gRkVFL0ZCRS9CTFBFL1BCRS9QRUUgbW9kZXMsIGRvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gdGhlc2UgbW9kZXMuCisgKgorICogQHBhcmFtIG9zY3NlbCBNQ0cgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSwgTUNHX0M3W09TQ1NFTF0uCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX1NvdXJjZVVzZWQgQmVjYXVzZSB0aGUgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHVzZWQgYXMgYSBjbG9jayBzb3VyY2UsCisgKiB0aGUgY29uZnVyYXRpb24gc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBPdGhlcndpc2UsIGEgZ2xpdGNoIG9jY3Vycy4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIEV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZXQgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBDTE9DS19TZXRFeHRlcm5hbFJlZkNsa0NvbmZpZyhtY2dfb3Njc2VsX3Qgb3Njc2VsKTsKKworLyohCisgKiBAYnJpZWYgU2V0IHRoZSBGTEwgZXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGRpdmlkZXIgdmFsdWUuCisgKgorICogU2V0cyB0aGUgRkxMIGV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBkaXZpZGVyIHZhbHVlLCB0aGUgcmVnaXN0ZXIgTUNHX0MxW0ZSRElWXS4KKyAqCisgKiBAcGFyYW0gZnJkaXYgVGhlIEZMTCBleHRlcm5hbCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlciB2YWx1ZSwgTUNHX0MxW0ZSRElWXS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENMT0NLX1NldEZsbEV4dFJlZkRpdih1aW50OF90IGZyZGl2KQoreworICAgIE1DRy0+QzEgPSAoTUNHLT5DMSAmIH5NQ0dfQzFfRlJESVZfTUFTSykgfCBNQ0dfQzFfRlJESVYoZnJkaXYpOworfQorCisKKworLypAfSovCisKKy8qISBAbmFtZSBNQ0cgY2xvY2sgbG9jayBtb25pdG9yIGZ1bmN0aW9ucy4gKi8KKy8qQHsqLworCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFJUQyBPU0MgY2xvY2sgbW9uaXRvciBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUlRDIE9TQyBjbG9jayBtb25pdG9yIG1vZGUuIFNlZSBAcmVmIG1jZ19tb25pdG9yX21vZGVfdCBmb3IgZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gbW9kZSBNb25pdG9yIG1vZGUgdG8gc2V0LgorICovCit2b2lkIENMT0NLX1NldFJ0Y09zY01vbml0b3JNb2RlKG1jZ19tb25pdG9yX21vZGVfdCBtb2RlKTsKKworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBNQ0cgc3RhdHVzIGZsYWdzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgTUNHIGNsb2NrIHN0YXR1cyBmbGFncy4gQWxsIHN0YXR1cyBmbGFncyBhcmUKKyAqIHJldHVybmVkIGFzIGEgbG9naWNhbCBPUiBvZiB0aGUgZW51bWVyYXRpb24gQHJlZiBfbWNnX3N0YXR1c19mbGFnc190LiBUbworICogY2hlY2sgYSBzcGVjaWZpYyBmbGFnLCBjb21wYXJlIHRoZSByZXR1cm4gdmFsdWUgd2l0aCB0aGUgZmxhZy4KKyAqCisgKiBFeGFtcGxlOgorICogQGNvZGUKKyAgIC8vIFRvIGNoZWNrIHRoZSBjbG9jayBsb3N0IGxvY2sgc3RhdHVzIG9mIE9TQzAgYW5kIFBMTDAuCisgICB1aW50MzJfdCBtY2dGbGFnczsKKworICAgbWNnRmxhZ3MgPSBDTE9DS19HZXRTdGF0dXNGbGFncygpOworCisgICBpZiAobWNnRmxhZ3MgJiBrTUNHX09zYzBMb3N0RmxhZykKKyAgIHsKKyAgICAgICAvLyBPU0MwIGNsb2NrIGxvY2sgbG9zdC4gRG8gc29tZXRoaW5nLgorICAgfQorICAgaWYgKG1jZ0ZsYWdzICYga01DR19QbGwwTG9zdEZsYWcpCisgICB7CisgICAgICAgLy8gUExMMCBjbG9jayBsb2NrIGxvc3QuIERvIHNvbWV0aGluZy4KKyAgIH0KKyAgIEBlbmRjb2RlCisgKgorICogQHJldHVybiAgTG9naWNhbCBPUiB2YWx1ZSBvZiB0aGUgQHJlZiBfbWNnX3N0YXR1c19mbGFnc190LgorICovCit1aW50MzJfdCBDTE9DS19HZXRTdGF0dXNGbGFncyh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBNQ0cgc3RhdHVzIGZsYWdzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBNQ0cgY2xvY2sgbG9jayBsb3N0IHN0YXR1cy4gVGhlIHBhcmFtZXRlciBpcyBhIGxvZ2ljYWwKKyAqIE9SIHZhbHVlIG9mIHRoZSBmbGFncyB0byBjbGVhci4gU2VlIEByZWYgX21jZ19zdGF0dXNfZmxhZ3NfdC4KKyAqCisgKiBFeGFtcGxlOgorICogQGNvZGUKKyAgIC8vIFRvIGNsZWFyIHRoZSBjbG9jayBsb3N0IGxvY2sgc3RhdHVzIGZsYWdzIG9mIE9TQzAgYW5kIFBMTDAuCisKKyAgIENMT0NLX0NsZWFyU3RhdHVzRmxhZ3Moa01DR19Pc2MwTG9zdEZsYWcgfCBrTUNHX1BsbDBMb3N0RmxhZyk7CisgICBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBtYXNrIFRoZSBzdGF0dXMgZmxhZ3MgdG8gY2xlYXIuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiBAcmVmIF9tY2dfc3RhdHVzX2ZsYWdzX3QuCisgKi8KK3ZvaWQgQ0xPQ0tfQ2xlYXJTdGF0dXNGbGFncyh1aW50MzJfdCBtYXNrKTsKKworLypAfSovCisKKy8qIQorICogQG5hbWUgT1NDIGNvbmZpZ3VyYXRpb24KKyAqIEB7CisgKi8KKworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgT1NDMC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBPU0MwIGFjY29yZGluZyB0byB0aGUgYm9hcmQgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBPU0MwIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIENMT0NLX0luaXRPc2MwKG9zY19jb25maWdfdCBjb25zdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGVpbml0aWFsaXplcyB0aGUgT1NDMC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlaW5pdGlhbGl6ZXMgdGhlIE9TQzAuCisgKi8KK3ZvaWQgQ0xPQ0tfRGVpbml0T3NjMCh2b2lkKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBFeHRlcm5hbCBjbG9jayBmcmVxdWVuY3kKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgWFRBTDAgZnJlcXVlbmN5IGJhc2VkIG9uIGJvYXJkIHNldHRpbmdzLgorICoKKyAqIEBwYXJhbSBmcmVxIFRoZSBYVEFMMC9FWFRBTDAgaW5wdXQgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfU2V0WHRhbDBGcmVxKHVpbnQzMl90IGZyZXEpCit7CisgICAgZ194dGFsMEZyZXEgPSBmcmVxOworfQorCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFhUQUwzMi9SVENfQ0xLSU4gZnJlcXVlbmN5IGJhc2VkIG9uIGJvYXJkIHNldHRpbmdzLgorICoKKyAqIEBwYXJhbSBmcmVxIFRoZSBYVEFMMzIvRVhUQUwzMi9SVENfQ0xLSU4gaW5wdXQgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ0xPQ0tfU2V0WHRhbDMyRnJlcSh1aW50MzJfdCBmcmVxKQoreworICAgIGdfeHRhbDMyRnJlcSA9IGZyZXE7Cit9CisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIE1DRyBhdXRvLXRyaW0gbWFjaGluZS4KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgQXV0byB0cmltcyB0aGUgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJpbXMgdGhlIGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBieSB1c2luZyB0aGUgZXh0ZXJuYWwgY2xvY2suIElmCisgKiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHRoZSBrU3RhdHVzX1N1Y2Nlc3MgYW5kIHRoZSBmcmVxdWVuY3kgYWZ0ZXIKKyAqIHRyaW1taW5nIGlzIHJlY2VpdmVkIGluIHRoZSBwYXJhbWV0ZXIgQHAgYWN0dWFsRnJlcS4gSWYgYW4gZXJyb3Igb2NjdXJzLAorICogdGhlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCisgKgorICogQHBhcmFtIGV4dEZyZXEgICAgICBFeHRlcm5hbCBjbG9jayBmcmVxdWVuY3ksIHdoaWNoIHNob3VsZCBiZSBhIGJ1cyBjbG9jay4KKyAqIEBwYXJhbSBkZXNpcmVGcmVxICAgRnJlcXVlbmN5IHRvIHRyaW0gdG8uCisgKiBAcGFyYW0gYWN0dWFsRnJlcSAgIEFjdHVhbCBmcmVxdWVuY3kgYWZ0ZXIgdHJpbW1pbmcuCisgKiBAcGFyYW0gYXRtcyAgICAgICAgIFRyaW0gZmFzdCBvciBzbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jay4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIEFUTSBzdWNjZXNzLgorICogQHJldHZhbCBrU3RhdHVzX01DR19BdG1CdXNDbG9ja0ludmFsaWQgVGhlIGJ1cyBjbG9jayBpcyBub3QgaW4gYWxsb3dlZCByYW5nZSBmb3IgdGhlIEFUTS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfQXRtRGVzaXJlZEZyZXFJbnZhbGlkIE1DR0lSQ0xLIGNvdWxkIG5vdCBiZSB0cmltbWVkIHRvIHRoZSBkZXNpcmVkIGZyZXF1ZW5jeS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfQXRtSXJjVXNlZCBDb3VsZCBub3QgdHJpbSBiZWNhdXNlIE1DR0lSQ0xLIGlzIHVzZWQgYXMgYSBidXMgY2xvY2sgc291cmNlLgorICogQHJldHZhbCBrU3RhdHVzX01DR19BdG1IYXJkd2FyZUZhaWwgSGFyZHdhcmUgZmFpbHMgd2hpbGUgdHJpbW1pbmcuCisgKi8KK3N0YXR1c190IENMT0NLX1RyaW1JbnRlcm5hbFJlZkNsayh1aW50MzJfdCBleHRGcmVxLCB1aW50MzJfdCBkZXNpcmVGcmVxLCB1aW50MzJfdCAqYWN0dWFsRnJlcSwgbWNnX2F0bV9zZWxlY3RfdCBhdG1zKTsKKy8qIEB9ICovCisKKy8qISBAbmFtZSBNQ0cgbW9kZSBmdW5jdGlvbnMuICovCisvKkB7Ki8KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgY3VycmVudCBNQ0cgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgTUNHIHJlZ2lzdGVycyBhbmQgZGV0ZXJtaW5lcyB0aGUgY3VycmVudCBNQ0cgbW9kZS4KKyAqCisgKiBAcmV0dXJuIEN1cnJlbnQgTUNHIG1vZGUgb3IgZXJyb3IgY29kZTsgU2VlIEByZWYgbWNnX21vZGVfdC4KKyAqLworbWNnX21vZGVfdCBDTE9DS19HZXRNb2RlKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gRkVJIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBNQ0cgdG8gRkVJIG1vZGUuIElmIHNldHRpbmcgdG8gRkVJIG1vZGUgZmFpbHMKKyAqIGZyb20gdGhlIGN1cnJlbnQgbW9kZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLgorICoKKyAqIEBwYXJhbSAgICAgICBkbXgzMiAgRE1YMzIgaW4gRkVJIG1vZGUuCisgKiBAcGFyYW0gICAgICAgZHJzIFRoZSBEQ08gcmFuZ2Ugc2VsZWN0aW9uLgorICogQHBhcmFtICAgICAgIGZsbFN0YWJsZURlbGF5IERlbGF5IGZ1bmN0aW9uIHRvICBlbnN1cmUgdGhhdCB0aGUgRkxMIGlzIHN0YWJsZS4gUGFzc2luZworICogICAgICAgICAgICAgIE5VTEwgZG9lcyBub3QgY2F1c2UgYSBkZWxheS4KKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlIENvdWxkIG5vdCBzd2l0Y2ggdG8gdGhlIHRhcmdldCBtb2RlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgdG8gdGhlIHRhcmdldCBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAqIEBub3RlIElmIEBwIGRteDMyIGlzIHNldCB0byBrTUNHX0RteDMyRmluZSwgdGhlIHNsb3cgSVJDIG11c3Qgbm90IGJlIHRyaW1tZWQKKyAqIHRvIGEgZnJlcXVlbmN5IGFib3ZlIDMyNzY4IEh6LgorICovCitzdGF0dXNfdCBDTE9DS19TZXRGZWlNb2RlKG1jZ19kbXgzMl90IGRteDMyLCBtY2dfZHJzX3QgZHJzLCB2b2lkICgqZmxsU3RhYmxlRGVsYXkpKHZvaWQpKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEZFRSBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEZFRSBtb2RlLiBJZiBzZXR0aW5nIHRvIEZFRSBtb2RlIGZhaWxzCisgKiBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBAcGFyYW0gICBmcmRpdiAgRkxMIHJlZmVyZW5jZSBjbG9jayBkaXZpZGVyIHNldHRpbmcsIEZSRElWLgorICogQHBhcmFtICAgZG14MzIgIERNWDMyIGluIEZFRSBtb2RlLgorICogQHBhcmFtICAgZHJzICAgIFRoZSBEQ08gcmFuZ2Ugc2VsZWN0aW9uLgorICogQHBhcmFtICAgZmxsU3RhYmxlRGVsYXkgRGVsYXkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIEZMTCBpcyBzdGFibGUuIFBhc3NpbmcKKyAqICAgICAgICAgIE5VTEwgZG9lcyBub3QgY2F1c2UgYSBkZWxheS4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX1NldEZlZU1vZGUodWludDhfdCBmcmRpdiwgbWNnX2RteDMyX3QgZG14MzIsIG1jZ19kcnNfdCBkcnMsIHZvaWQgKCpmbGxTdGFibGVEZWxheSkodm9pZCkpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gRkJJIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBNQ0cgdG8gRkJJIG1vZGUuIElmIHNldHRpbmcgdG8gRkJJIG1vZGUgZmFpbHMKKyAqIGZyb20gdGhlIGN1cnJlbnQgbW9kZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLgorICoKKyAqIEBwYXJhbSAgZG14MzIgIERNWDMyIGluIEZCSSBtb2RlLgorICogQHBhcmFtICBkcnMgIFRoZSBEQ08gcmFuZ2Ugc2VsZWN0aW9uLgorICogQHBhcmFtICBmbGxTdGFibGVEZWxheSBEZWxheSBmdW5jdGlvbiB0byBtYWtlIHN1cmUgRkxMIGlzIHN0YWJsZS4gSWYgdGhlIEZMTAorICogICAgICAgICBpcyBub3QgdXNlZCBpbiBGQkkgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwuIFBhc3NpbmcKKyAqICAgICAgICAgTlVMTCBkb2VzIG5vdCBjYXVzZSBhIGRlbGF5LgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGUgQ291bGQgbm90IHN3aXRjaCB0byB0aGUgdGFyZ2V0IG1vZGUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCB0byB0aGUgdGFyZ2V0IG1vZGUgc3VjY2Vzc2Z1bGx5LgorICogQG5vdGUgSWYgQHAgZG14MzIgaXMgc2V0IHRvIGtNQ0dfRG14MzJGaW5lLCB0aGUgc2xvdyBJUkMgbXVzdCBub3QgYmUgdHJpbW1lZAorICogdG8gZnJlcXVlbmN5IGFib3ZlIDMyNzY4IEh6LgorICovCitzdGF0dXNfdCBDTE9DS19TZXRGYmlNb2RlKG1jZ19kbXgzMl90IGRteDMyLCBtY2dfZHJzX3QgZHJzLCB2b2lkICgqZmxsU3RhYmxlRGVsYXkpKHZvaWQpKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEZCRSBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEZCRSBtb2RlLiBJZiBzZXR0aW5nIHRvIEZCRSBtb2RlIGZhaWxzCisgKiBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBAcGFyYW0gICBmcmRpdiAgRkxMIHJlZmVyZW5jZSBjbG9jayBkaXZpZGVyIHNldHRpbmcsIEZSRElWLgorICogQHBhcmFtICAgZG14MzIgIERNWDMyIGluIEZCRSBtb2RlLgorICogQHBhcmFtICAgZHJzICAgIFRoZSBEQ08gcmFuZ2Ugc2VsZWN0aW9uLgorICogQHBhcmFtICAgZmxsU3RhYmxlRGVsYXkgRGVsYXkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIEZMTCBpcyBzdGFibGUuIElmIHRoZSBGTEwKKyAqICAgICAgICAgIGlzIG5vdCB1c2VkIGluIEZCRSBtb2RlLCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgTlVMTC4gUGFzc2luZyBOVUxMCisgKiAgICAgICAgICBkb2VzIG5vdCBjYXVzZSBhIGRlbGF5LgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlVW5yZWFjaGFibGUgQ291bGQgbm90IHN3aXRjaCB0byB0aGUgdGFyZ2V0IG1vZGUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCB0byB0aGUgdGFyZ2V0IG1vZGUgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBDTE9DS19TZXRGYmVNb2RlKHVpbnQ4X3QgZnJkaXYsIG1jZ19kbXgzMl90IGRteDMyLCBtY2dfZHJzX3QgZHJzLCB2b2lkICgqZmxsU3RhYmxlRGVsYXkpKHZvaWQpKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgTUNHIHRvIEJMUEkgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1DRyB0byBCTFBJIG1vZGUuIElmIHNldHRpbmcgdG8gQkxQSSBtb2RlIGZhaWxzCisgKiBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX1NldEJscGlNb2RlKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gQkxQRSBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEJMUEUgbW9kZS4gSWYgc2V0dGluZyB0byBCTFBFIG1vZGUgZmFpbHMKKyAqIGZyb20gdGhlIGN1cnJlbnQgbW9kZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLgorICoKKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlIENvdWxkIG5vdCBzd2l0Y2ggdG8gdGhlIHRhcmdldCBtb2RlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgdG8gdGhlIHRhcmdldCBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0QmxwZU1vZGUodm9pZCk7CisKKworLyohCisgKiBAYnJpZWYgU3dpdGNoZXMgdGhlIE1DRyB0byBGQkUgbW9kZSBmcm9tIHRoZSBleHRlcm5hbCBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3dpdGNoZXMgdGhlIE1DRyBmcm9tIGV4dGVybmFsIG1vZGVzIChQRUUvUEJFL0JMUEUvRkVFKSB0byB0aGUgRkJFIG1vZGUgcXVpY2tseS4KKyAqIFRoZSBleHRlcm5hbCBjbG9jayBpcyB1c2VkIGFzIHRoZSBzeXN0ZW0gY2xvY2sgc291Y2UgYW5kIFBMTCBpcyBkaXNhYmxlZC4gSG93ZXZlciwKKyAqIHRoZSBGTEwgc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLiBUaGlzIGlzIGEgbGl0ZSBmdW5jdGlvbiB3aXRoIGEgc21hbGwgY29kZSBzaXplLCB3aGljaCBpcyB1c2VmdWwKKyAqIGR1cmluZyB0aGUgbW9kZSBzd2l0Y2guIEZvciBleGFtcGxlLCB0byBzd2l0Y2ggZnJvbSBQRUUgbW9kZSB0byBGRUkgbW9kZToKKyAqCisgKiBAY29kZQorICogQ0xPQ0tfRXh0ZXJuYWxNb2RlVG9GYmVNb2RlUXVpY2soKTsKKyAqIENMT0NLX1NldEZlaU1vZGUoLi4uKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCBrU3RhdHVzX01DR19Nb2RlSW52YWxpZCBJZiB0aGUgY3VycmVudCBtb2RlIGlzIG5vdCBhbiBleHRlcm5hbCBtb2RlLCBkbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0dXNfdCBDTE9DS19FeHRlcm5hbE1vZGVUb0ZiZU1vZGVRdWljayh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgU3dpdGNoZXMgdGhlIE1DRyB0byBGQkkgbW9kZSBmcm9tIGludGVybmFsIG1vZGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3dpdGNoZXMgdGhlIE1DRyBmcm9tIGludGVybmFsIG1vZGVzIChQRUkvUEJJL0JMUEkvRkVJKSB0byB0aGUgRkJJIG1vZGUgcXVpY2tseS4KKyAqIFRoZSBNQ0dJUkNMSyBpcyB1c2VkIGFzIHRoZSBzeXN0ZW0gY2xvY2sgc291Y2UgYW5kIFBMTCBpcyBkaXNhYmxlZC4gSG93ZXZlciwKKyAqIEZMTCBzZXR0aW5ncyBhcmUgbm90IGNvbmZpZ3VyZWQuIFRoaXMgaXMgYSBsaXRlIGZ1bmN0aW9uIHdpdGggYSBzbWFsbCBjb2RlIHNpemUsIHdoaWNoIGlzIHVzZWZ1bAorICogZHVyaW5nIHRoZSBtb2RlIHN3aXRjaC4gRm9yIGV4YW1wbGUsIHRvIHN3aXRjaCBmcm9tIFBFSSBtb2RlIHRvIEZFRSBtb2RlOgorICoKKyAqIEBjb2RlCisgKiBDTE9DS19JbnRlcm5hbE1vZGVUb0ZiaU1vZGVRdWljaygpOworICogQ0xPQ0tfU2V0RmVlTW9kZSguLi4pOworICogQGVuZGNvZGUKKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTd2l0Y2hlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVJbnZhbGlkIElmIHRoZSBjdXJyZW50IG1vZGUgaXMgbm90IGFuIGludGVybmFsIG1vZGUsIGRvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXR1c190IENMT0NLX0ludGVybmFsTW9kZVRvRmJpTW9kZVF1aWNrKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gRkVJIG1vZGUgZHVyaW5nIHN5c3RlbSBib290IHVwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEZFSSBtb2RlIGZyb20gdGhlIHJlc2V0IG1vZGUuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8KKyAqIHNldCB1cCBNQ0cgZHVyaW5nIHN5c3RlbSBib290IHVwLgorICoKKyAqIEBwYXJhbSAgZG14MzIgIERNWDMyIGluIEZFSSBtb2RlLgorICogQHBhcmFtICBkcnMgVGhlIERDTyByYW5nZSBzZWxlY3Rpb24uCisgKiBAcGFyYW0gIGZsbFN0YWJsZURlbGF5IERlbGF5IGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBGTEwgaXMgc3RhYmxlLgorICoKKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlIENvdWxkIG5vdCBzd2l0Y2ggdG8gdGhlIHRhcmdldCBtb2RlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgdG8gdGhlIHRhcmdldCBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAqIEBub3RlIElmIEBwIGRteDMyIGlzIHNldCB0byBrTUNHX0RteDMyRmluZSwgdGhlIHNsb3cgSVJDIG11c3Qgbm90IGJlIHRyaW1tZWQKKyAqIHRvIGZyZXF1ZW5jeSBhYm92ZSAzMjc2OCBIei4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfQm9vdFRvRmVpTW9kZShtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIE1DRyB0byBGRUUgbW9kZSBkdXJpbmcgc3lzdGVtIGJvb3R1cC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgTUNHIHRvIEZFRSBtb2RlIGZyb20gdGhlIHJlc2V0IG1vZGUuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8KKyAqIHNldCB1cCB0aGUgTUNHIGR1cmluZyBzeXN0ZW0gYm9vdCB1cC4KKyAqCisgKiBAcGFyYW0gICBvc2NzZWwgT1NDIGNsb2NrIHNlbGVjdCwgT1NDU0VMLgorICogQHBhcmFtICAgZnJkaXYgIEZMTCByZWZlcmVuY2UgY2xvY2sgZGl2aWRlciBzZXR0aW5nLCBGUkRJVi4KKyAqIEBwYXJhbSAgIGRteDMyICBETVgzMiBpbiBGRUUgbW9kZS4KKyAqIEBwYXJhbSAgIGRycyAgICBUaGUgRENPIHJhbmdlIHNlbGVjdGlvbi4KKyAqIEBwYXJhbSAgIGZsbFN0YWJsZURlbGF5IERlbGF5IGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBGTEwgaXMgc3RhYmxlLgorICoKKyAqIEByZXR2YWwga1N0YXR1c19NQ0dfTW9kZVVucmVhY2hhYmxlIENvdWxkIG5vdCBzd2l0Y2ggdG8gdGhlIHRhcmdldCBtb2RlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3dpdGNoZWQgdG8gdGhlIHRhcmdldCBtb2RlIHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfQm9vdFRvRmVlTW9kZSgKKyAgICBtY2dfb3Njc2VsX3Qgb3Njc2VsLCB1aW50OF90IGZyZGl2LCBtY2dfZG14MzJfdCBkbXgzMiwgbWNnX2Ryc190IGRycywgdm9pZCAoKmZsbFN0YWJsZURlbGF5KSh2b2lkKSk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIE1DRyB0byBCTFBJIG1vZGUgZHVyaW5nIHN5c3RlbSBib290IHVwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEJMUEkgbW9kZSBmcm9tIHRoZSByZXNldCBtb2RlLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCisgKiBzZXQgdXAgdGhlIE1DRyBkdXJpbmcgc3l0ZW0gYm9vdCB1cC4KKyAqCisgKiBAcGFyYW0gIGZjcmRpdiBGYXN0IElSQyBkaXZpZGVyLCBGQ1JESVYuCisgKiBAcGFyYW0gIGlyY3MgICBUaGUgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIHRvIHNlbGVjdCwgSVJDUy4KKyAqIEBwYXJhbSAgaXJjRW5hYmxlTW9kZSAgVGhlIE1DR0lSQ0xLIGVuYWJsZSBtb2RlLCBPUidlZCB2YWx1ZSBvZiBAcmVmIF9tY2dfaXJjbGtfZW5hYmxlX21vZGUuCisgKgorICogQHJldHZhbCBrU3RhdHVzX01DR19Tb3VyY2VVc2VkIENvdWxkIG5vdCBjaGFuZ2UgTUNHSVJDTEsgc2V0dGluZy4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX0Jvb3RUb0JscGlNb2RlKHVpbnQ4X3QgZmNyZGl2LCBtY2dfaXJjX21vZGVfdCBpcmNzLCB1aW50OF90IGlyY0VuYWJsZU1vZGUpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBNQ0cgdG8gQkxQRSBtb2RlIGR1cmluZyBzeXRlbSBib290IHVwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUNHIHRvIEJMUEUgbW9kZSBmcm9tIHRoZSByZXNldCBtb2RlLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCisgKiBzZXQgdXAgdGhlIE1DRyBkdXJpbmcgc3l0ZW0gYm9vdCB1cC4KKyAqCisgKiBAcGFyYW0gIG9zY3NlbCBPU0MgY2xvY2sgc2VsZWN0LCBNQ0dfQzdbT1NDU0VMXS4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfTUNHX01vZGVVbnJlYWNoYWJsZSBDb3VsZCBub3Qgc3dpdGNoIHRvIHRoZSB0YXJnZXQgbW9kZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN3aXRjaGVkIHRvIHRoZSB0YXJnZXQgbW9kZSBzdWNjZXNzZnVsbHkuCisgKi8KK3N0YXR1c190IENMT0NLX0Jvb3RUb0JscGVNb2RlKG1jZ19vc2NzZWxfdCBvc2NzZWwpOworCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIE1DRyB0byBhIHRhcmdldCBtb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBNQ0cgdG8gYSB0YXJnZXQgbW9kZSBkZWZpbmVkIGJ5IHRoZSBjb25maWd1cmF0aW9uCisgKiBzdHJ1Y3R1cmUuIElmIHN3aXRjaGluZyB0byB0aGUgdGFyZ2V0IG1vZGUgZmFpbHMsIHRoaXMgZnVuY3Rpb24KKyAqIGNob29zZXMgdGhlIGNvcnJlY3QgcGF0aC4KKyAqCisgKiBAcGFyYW0gIGNvbmZpZyBQb2ludGVyIHRvIHRoZSB0YXJnZXQgTUNHIG1vZGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIFJldHVybiBrU3RhdHVzX1N1Y2Nlc3MgaWYgc3dpdGNoZWQgc3VjY2Vzc2Z1bGx5OyBPdGhlcndpc2UsIGl0IHJldHVybnMgYW4gZXJyb3IgY29kZSAjX21jZ19zdGF0dXMuCisgKgorICogQG5vdGUgSWYgdGhlIGV4dGVybmFsIGNsb2NrIGlzIHVzZWQgaW4gdGhlIHRhcmdldCBtb2RlLCBlbnN1cmUgdGhhdCBpdCBpcworICogZW5hYmxlZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBPU0MwIGlzIHVzZWQsIHNldCB1cCBPU0MwIGNvcnJlY3RseSBiZWZvcmUgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbi4KKyAqLworc3RhdHVzX3QgQ0xPQ0tfU2V0TWNnQ29uZmlnKG1jZ19jb25maWdfdCBjb25zdCAqY29uZmlnKTsKKworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qISBAfSAqLworCisjZW5kaWYgLyogX0ZTTF9DTE9DS19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY21wLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVmMTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY21wLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2NtcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIEdldCBpbnN0YW5jZSBudW1iZXIgZm9yIENNUCBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyB1aW50MzJfdCBDTVBfR2V0SW5zdGFuY2UoQ01QX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIEBicmllZiBQb2ludGVycyB0byBDTVAgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgQ01QX1R5cGUgKmNvbnN0IHNfY21wQmFzZXNbXSA9IENNUF9CQVNFX1BUUlM7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyohIEBicmllZiBQb2ludGVycyB0byBDTVAgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2NtcENsb2Nrc1tdID0gQ01QX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVpbnQzMl90IENNUF9HZXRJbnN0YW5jZShDTVBfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19jbXBCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19jbXBCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfY21wQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBDTVBfSW5pdChDTVBfVHlwZSAqYmFzZSwgY29uc3QgY21wX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIHVpbnQ4X3QgdG1wODsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBFbmFibGUgdGhlIGNsb2NrLiAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfY21wQ2xvY2tzW0NNUF9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisgICAgLyogQ29uZmlndXJlLiAqLworICAgIENNUF9FbmFibGUoYmFzZSwgZmFsc2UpOyAvKiBEaXNhYmxlIHRoZSBDTVAgbW9kdWxlIGR1cmluZyBjb25maWd1cmluZy4gKi8KKyAgICAvKiBDTVB4X0NSMS4gKi8KKyAgICB0bXA4ID0gYmFzZS0+Q1IxICYgfihDTVBfQ1IxX1BNT0RFX01BU0sgfCBDTVBfQ1IxX0lOVl9NQVNLIHwgQ01QX0NSMV9DT1NfTUFTSyB8IENNUF9DUjFfT1BFX01BU0spOworICAgIGlmIChjb25maWctPmVuYWJsZUhpZ2hTcGVlZCkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX0NSMV9QTU9ERV9NQVNLOworICAgIH0KKyAgICBpZiAoY29uZmlnLT5lbmFibGVJbnZlcnRPdXRwdXQpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9DUjFfSU5WX01BU0s7CisgICAgfQorICAgIGlmIChjb25maWctPnVzZVVuZmlsdGVyZWRPdXRwdXQpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9DUjFfQ09TX01BU0s7CisgICAgfQorICAgIGlmIChjb25maWctPmVuYWJsZVBpbk91dCkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX0NSMV9PUEVfTUFTSzsKKyAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19UUklHR0VSX01PREUKKyAgICBpZiAoY29uZmlnLT5lbmFibGVUcmlnZ2VyTW9kZSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX0NSMV9UUklHTV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0bXA4ICY9IH5DTVBfQ1IxX1RSSUdNX01BU0s7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfVFJJR0dFUl9NT0RFICovCisgICAgYmFzZS0+Q1IxID0gdG1wODsKKworICAgIC8qIENNUHhfQ1IwLiAqLworICAgIHRtcDggPSBiYXNlLT5DUjAgJiB+Q01QX0NSMF9IWVNUQ1RSX01BU0s7CisgICAgdG1wOCB8PSBDTVBfQ1IwX0hZU1RDVFIoY29uZmlnLT5oeXN0ZXJlc2lzTW9kZSk7CisgICAgYmFzZS0+Q1IwID0gdG1wODsKKworICAgIENNUF9FbmFibGUoYmFzZSwgY29uZmlnLT5lbmFibGVDbXApOyAvKiBFbmFibGUgdGhlIENNUCBtb2R1bGUgYWZ0ZXIgY29uZmlndXJlZCBvciBub3QuICovCit9CisKK3ZvaWQgQ01QX0RlaW5pdChDTVBfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBEaXNhYmxlIHRoZSBDTVAgbW9kdWxlLiAqLworICAgIENNUF9FbmFibGUoYmFzZSwgZmFsc2UpOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIERpc2FibGUgdGhlIGNsb2NrLiAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2NtcENsb2Nrc1tDTVBfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBDTVBfR2V0RGVmYXVsdENvbmZpZyhjbXBfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoTlVMTCAhPSBjb25maWcpOworCisgICAgY29uZmlnLT5lbmFibGVDbXAgPSB0cnVlOyAvKiBFbmFibGUgdGhlIENNUCBtb2R1bGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uICovCisgICAgY29uZmlnLT5oeXN0ZXJlc2lzTW9kZSA9IGtDTVBfSHlzdGVyZXNpc0xldmVsMDsKKyAgICBjb25maWctPmVuYWJsZUhpZ2hTcGVlZCA9IGZhbHNlOworICAgIGNvbmZpZy0+ZW5hYmxlSW52ZXJ0T3V0cHV0ID0gZmFsc2U7CisgICAgY29uZmlnLT51c2VVbmZpbHRlcmVkT3V0cHV0ID0gZmFsc2U7CisgICAgY29uZmlnLT5lbmFibGVQaW5PdXQgPSBmYWxzZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NNUF9IQVNfVFJJR0dFUl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERQorICAgIGNvbmZpZy0+ZW5hYmxlVHJpZ2dlck1vZGUgPSBmYWxzZTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSAqLworfQorCit2b2lkIENNUF9TZXRJbnB1dENoYW5uZWxzKENNUF9UeXBlICpiYXNlLCB1aW50OF90IHBvc2l0aXZlQ2hhbm5lbCwgdWludDhfdCBuZWdhdGl2ZUNoYW5uZWwpCit7CisgICAgdWludDhfdCB0bXA4ID0gYmFzZS0+TVVYQ1I7CisKKyAgICB0bXA4ICY9IH4oQ01QX01VWENSX1BTRUxfTUFTSyB8IENNUF9NVVhDUl9NU0VMX01BU0spOworICAgIHRtcDggfD0gQ01QX01VWENSX1BTRUwocG9zaXRpdmVDaGFubmVsKSB8IENNUF9NVVhDUl9NU0VMKG5lZ2F0aXZlQ2hhbm5lbCk7CisgICAgYmFzZS0+TVVYQ1IgPSB0bXA4OworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX0RNQSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19ETUEKK3ZvaWQgQ01QX0VuYWJsZURNQShDTVBfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgdWludDhfdCB0bXA4ID0gYmFzZS0+U0NSICYgfihDTVBfU0NSX0NGUl9NQVNLIHwgQ01QX1NDUl9DRkZfTUFTSyk7IC8qIFRvIGF2b2lkIGNoYW5nZSB0aGUgdzFjIGJpdHMuICovCisKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgdG1wOCB8PSBDTVBfU0NSX0RNQUVOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRtcDggJj0gfkNNUF9TQ1JfRE1BRU5fTUFTSzsKKyAgICB9CisgICAgYmFzZS0+U0NSID0gdG1wODsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9DTVBfSEFTX0RNQSAqLworCit2b2lkIENNUF9TZXRGaWx0ZXJDb25maWcoQ01QX1R5cGUgKmJhc2UsIGNvbnN0IGNtcF9maWx0ZXJfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoTlVMTCAhPSBjb25maWcpOworCisgICAgdWludDhfdCB0bXA4OworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX0VYVEVSTkFMX1NBTVBMRV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9DTVBfSEFTX0VYVEVSTkFMX1NBTVBMRV9TVVBQT1JUCisgICAgLyogQ2hvb3NlIHRoZSBjbG9jayBzb3VyY2UgZm9yIHNhbXBsaW5nLiAqLworICAgIGlmIChjb25maWctPmVuYWJsZVNhbXBsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkNSMSB8PSBDTVBfQ1IxX1NFX01BU0s7IC8qIENob29zZSB0aGUgZXh0ZXJuYWwgU0FNUExFIGNsb2NrLiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DUjEgJj0gfkNNUF9DUjFfU0VfTUFTSzsgLyogQ2hvb3NlIHRoZSBpbnRlcm5hbCBkaXZpZGVkIGJ1cyBjbG9jay4gKi8KKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ01QX0hBU19FWFRFUk5BTF9TQU1QTEVfU1VQUE9SVCAqLworICAgIC8qIFNldCB0aGUgZmlsdGVyIGNvdW50LiAqLworICAgIHRtcDggPSBiYXNlLT5DUjAgJiB+Q01QX0NSMF9GSUxURVJfQ05UX01BU0s7CisgICAgdG1wOCB8PSBDTVBfQ1IwX0ZJTFRFUl9DTlQoY29uZmlnLT5maWx0ZXJDb3VudCk7CisgICAgYmFzZS0+Q1IwID0gdG1wODsKKyAgICAvKiBTZXQgdGhlIGZpbHRlciBwZXJpb2QuIEl0IGlzIHVzZWQgYXMgdGhlIGRpdmlkZXIgdG8gYnVzIGNsb2NrLiAqLworICAgIGJhc2UtPkZQUiA9IENNUF9GUFJfRklMVF9QRVIoY29uZmlnLT5maWx0ZXJQZXJpb2QpOworfQorCit2b2lkIENNUF9TZXREQUNDb25maWcoQ01QX1R5cGUgKmJhc2UsIGNvbnN0IGNtcF9kYWNfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICB1aW50OF90IHRtcDggPSAwVTsKKworICAgIGlmIChOVUxMID09IGNvbmZpZykKKyAgICB7CisgICAgICAgIC8qIFBhc3NpbmcgIk5VTEwiIGFzIGlucHV0IHBhcmFtZXRlciBtZWFucyBubyBhdmFpbGFibGUgY29uZmlndXJhdGlvbi4gU28gdGhlIERBQyBmZWF0dXJlIGlzIGRpc2FibGVkLiovCisgICAgICAgIGJhc2UtPkRBQ0NSID0gMFU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLyogQ01QeF9EQUNDUi4gKi8KKyAgICB0bXA4IHw9IENNUF9EQUNDUl9EQUNFTl9NQVNLOyAvKiBFbmFibGUgdGhlIGludGVybmFsIERBQy4gKi8KKyAgICBpZiAoa0NNUF9WcmVmU291cmNlVmluMiA9PSBjb25maWctPnJlZmVyZW5jZVZvbHRhZ2VTb3VyY2UpCisgICAgeworICAgICAgICB0bXA4IHw9IENNUF9EQUNDUl9WUlNFTF9NQVNLOworICAgIH0KKyAgICB0bXA4IHw9IENNUF9EQUNDUl9WT1NFTChjb25maWctPkRBQ1ZhbHVlKTsKKworICAgIGJhc2UtPkRBQ0NSID0gdG1wODsKK30KKwordm9pZCBDTVBfRW5hYmxlSW50ZXJydXB0cyhDTVBfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50OF90IHRtcDggPSBiYXNlLT5TQ1IgJiB+KENNUF9TQ1JfQ0ZSX01BU0sgfCBDTVBfU0NSX0NGRl9NQVNLKTsgLyogVG8gYXZvaWQgY2hhbmdlIHRoZSB3MWMgYml0cy4gKi8KKworICAgIGlmICgwVSAhPSAoa0NNUF9PdXRwdXRSaXNpbmdJbnRlcnJ1cHRFbmFibGUgJiBtYXNrKSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX1NDUl9JRVJfTUFTSzsKKyAgICB9CisgICAgaWYgKDBVICE9IChrQ01QX091dHB1dEZhbGxpbmdJbnRlcnJ1cHRFbmFibGUgJiBtYXNrKSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX1NDUl9JRUZfTUFTSzsKKyAgICB9CisgICAgYmFzZS0+U0NSID0gdG1wODsKK30KKwordm9pZCBDTVBfRGlzYWJsZUludGVycnVwdHMoQ01QX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDhfdCB0bXA4ID0gYmFzZS0+U0NSICYgfihDTVBfU0NSX0NGUl9NQVNLIHwgQ01QX1NDUl9DRkZfTUFTSyk7IC8qIFRvIGF2b2lkIGNoYW5nZSB0aGUgdzFjIGJpdHMuICovCisKKyAgICBpZiAoMFUgIT0gKGtDTVBfT3V0cHV0UmlzaW5nSW50ZXJydXB0RW5hYmxlICYgbWFzaykpCisgICAgeworICAgICAgICB0bXA4ICY9IH5DTVBfU0NSX0lFUl9NQVNLOworICAgIH0KKyAgICBpZiAoMFUgIT0gKGtDTVBfT3V0cHV0RmFsbGluZ0ludGVycnVwdEVuYWJsZSAmIG1hc2spKQorICAgIHsKKyAgICAgICAgdG1wOCAmPSB+Q01QX1NDUl9JRUZfTUFTSzsKKyAgICB9CisgICAgYmFzZS0+U0NSID0gdG1wODsKK30KKwordWludDMyX3QgQ01QX0dldFN0YXR1c0ZsYWdzKENNUF9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHJldDMyID0gMFU7CisKKyAgICBpZiAoMFUgIT0gKENNUF9TQ1JfQ0ZSX01BU0sgJiBiYXNlLT5TQ1IpKQorICAgIHsKKyAgICAgICAgcmV0MzIgfD0ga0NNUF9PdXRwdXRSaXNpbmdFdmVudEZsYWc7CisgICAgfQorICAgIGlmICgwVSAhPSAoQ01QX1NDUl9DRkZfTUFTSyAmIGJhc2UtPlNDUikpCisgICAgeworICAgICAgICByZXQzMiB8PSBrQ01QX091dHB1dEZhbGxpbmdFdmVudEZsYWc7CisgICAgfQorICAgIGlmICgwVSAhPSAoQ01QX1NDUl9DT1VUX01BU0sgJiBiYXNlLT5TQ1IpKQorICAgIHsKKyAgICAgICAgcmV0MzIgfD0ga0NNUF9PdXRwdXRBc3NlcnRFdmVudEZsYWc7CisgICAgfQorICAgIHJldHVybiByZXQzMjsKK30KKwordm9pZCBDTVBfQ2xlYXJTdGF0dXNGbGFncyhDTVBfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50OF90IHRtcDggPSBiYXNlLT5TQ1IgJiB+KENNUF9TQ1JfQ0ZSX01BU0sgfCBDTVBfU0NSX0NGRl9NQVNLKTsgLyogVG8gYXZvaWQgY2hhbmdlIHRoZSB3MWMgYml0cy4gKi8KKworICAgIGlmICgwVSAhPSAoa0NNUF9PdXRwdXRSaXNpbmdFdmVudEZsYWcgJiBtYXNrKSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX1NDUl9DRlJfTUFTSzsKKyAgICB9CisgICAgaWYgKDBVICE9IChrQ01QX091dHB1dEZhbGxpbmdFdmVudEZsYWcgJiBtYXNrKSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gQ01QX1NDUl9DRkZfTUFTSzsKKyAgICB9CisgICAgYmFzZS0+U0NSID0gdG1wODsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtcC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxNmJmMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtcC5oCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX0NNUF9IXworI2RlZmluZSBfRlNMX0NNUF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGNtcAorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgQ01QIGRyaXZlciB2ZXJzaW9uIDIuMC4wLiAqLworI2RlZmluZSBGU0xfQ01QX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMCkpCisvKkB9Ki8KKworLyohCisqIEBicmllZiBJbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUgbWFzay4KKyovCitlbnVtIF9jbXBfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtDTVBfT3V0cHV0UmlzaW5nSW50ZXJydXB0RW5hYmxlID0gQ01QX1NDUl9JRVJfTUFTSywgIC8qITwgQ29tcGFyYXRvciBpbnRlcnJ1cHQgZW5hYmxlIHJpc2luZy4gKi8KKyAgICBrQ01QX091dHB1dEZhbGxpbmdJbnRlcnJ1cHRFbmFibGUgPSBDTVBfU0NSX0lFRl9NQVNLLCAvKiE8IENvbXBhcmF0b3IgaW50ZXJydXB0IGVuYWJsZSBmYWxsaW5nLiAqLworfTsKKworLyohCisgKiBAYnJpZWYgU3RhdHVzIGZsYWdzJyBtYXNrLgorICovCitlbnVtIF9jbXBfc3RhdHVzX2ZsYWdzCit7CisgICAga0NNUF9PdXRwdXRSaXNpbmdFdmVudEZsYWcgPSBDTVBfU0NSX0NGUl9NQVNLLCAgLyohPCBSaXNpbmctZWRnZSBvbiB0aGUgY29tcGFyaXNvbiBvdXRwdXQgaGFzIG9jY3VycmVkLiAqLworICAgIGtDTVBfT3V0cHV0RmFsbGluZ0V2ZW50RmxhZyA9IENNUF9TQ1JfQ0ZGX01BU0ssIC8qITwgRmFsbGluZy1lZGdlIG9uIHRoZSBjb21wYXJpc29uIG91dHB1dCBoYXMgb2NjdXJyZWQuICovCisgICAga0NNUF9PdXRwdXRBc3NlcnRFdmVudEZsYWcgPSBDTVBfU0NSX0NPVVRfTUFTSywgLyohPCBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFuYWxvZyBjb21wYXJhdG9yIG91dHB1dC4gKi8KK307CisKKy8qIQorICogQGJyaWVmIENNUCBIeXN0ZXJlc2lzIG1vZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfY21wX2h5c3RlcmVzaXNfbW9kZQoreworICAgIGtDTVBfSHlzdGVyZXNpc0xldmVsMCA9IDBVLCAvKiE8IEh5c3RlcmVzaXMgbGV2ZWwgMC4gKi8KKyAgICBrQ01QX0h5c3RlcmVzaXNMZXZlbDEgPSAxVSwgLyohPCBIeXN0ZXJlc2lzIGxldmVsIDEuICovCisgICAga0NNUF9IeXN0ZXJlc2lzTGV2ZWwyID0gMlUsIC8qITwgSHlzdGVyZXNpcyBsZXZlbCAyLiAqLworICAgIGtDTVBfSHlzdGVyZXNpc0xldmVsMyA9IDNVLCAvKiE8IEh5c3RlcmVzaXMgbGV2ZWwgMy4gKi8KK30gY21wX2h5c3RlcmVzaXNfbW9kZV90OworCisvKiEKKyAqIEBicmllZiBDTVAgVm9sdGFnZSBSZWZlcmVuY2Ugc291cmNlLgorICovCit0eXBlZGVmIGVudW0gX2NtcF9yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2UKK3sKKyAgICBrQ01QX1ZyZWZTb3VyY2VWaW4xID0gMFUsIC8qITwgVmluMSBpcyBzZWxlY3RlZCBhcyBhIHJlc2lzdG9yIGxhZGRlciBuZXR3b3JrIHN1cHBseSByZWZlcmVuY2UgVmluLiAqLworICAgIGtDTVBfVnJlZlNvdXJjZVZpbjIgPSAxVSwgLyohPCBWaW4yIGlzIHNlbGVjdGVkIGFzIGEgcmVzaXN0b3IgbGFkZGVyIG5ldHdvcmsgc3VwcGx5IHJlZmVyZW5jZSBWaW4uICovCit9IGNtcF9yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2VfdDsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgY29tcGFyYXRvci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NtcF9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZUNtcDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIHRoZSBDTVAgbW9kdWxlLiAqLworICAgIGNtcF9oeXN0ZXJlc2lzX21vZGVfdCBoeXN0ZXJlc2lzTW9kZTsgLyohPCBDTVAgSHlzdGVyZXNpcyBtb2RlLiAqLworICAgIGJvb2wgZW5hYmxlSGlnaFNwZWVkOyAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgSGlnaC1zcGVlZCAoSFMpIGNvbXBhcmlzb24gbW9kZS4gKi8KKyAgICBib29sIGVuYWJsZUludmVydE91dHB1dDsgICAgICAgICAgICAgIC8qITwgRW5hYmxlIHRoZSBpbnZlcnRlZCBjb21wYXJhdG9yIG91dHB1dC4gKi8KKyAgICBib29sIHVzZVVuZmlsdGVyZWRPdXRwdXQ7ICAgICAgICAgICAgIC8qITwgU2V0IHRoZSBjb21wYXJlIG91dHB1dChDT1VUKSB0byBlcXVhbCBDT1VUQSh0cnVlKSBvciBDT1VUKGZhbHNlKS4gKi8KKyAgICBib29sIGVuYWJsZVBpbk91dDsgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIGNvbXBhcmF0b3Igb3V0cHV0IGlzIGF2YWlsYWJsZSBvbiB0aGUgYXNzb2NpYXRlZCBwaW4uICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX1RSSUdHRVJfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19UUklHR0VSX01PREUKKyAgICBib29sIGVuYWJsZVRyaWdnZXJNb2RlOyAvKiE8IEVuYWJsZSB0aGUgdHJpZ2dlciBtb2RlLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfVFJJR0dFUl9NT0RFICovCit9IGNtcF9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZmlsdGVyLgorICovCit0eXBlZGVmIHN0cnVjdCBfY21wX2ZpbHRlcl9jb25maWcKK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NNUF9IQVNfRVhURVJOQUxfU0FNUExFX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0NNUF9IQVNfRVhURVJOQUxfU0FNUExFX1NVUFBPUlQKKyAgICBib29sIGVuYWJsZVNhbXBsZTsgICAgLyohPCBVc2luZyB0aGUgZXh0ZXJuYWwgU0FNUExFIGFzIGEgc2FtcGxpbmcgY2xvY2sgaW5wdXQgb3IgdXNpbmcgYSBkaXZpZGVkIGJ1cyBjbG9jay4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfQ01QX0hBU19FWFRFUk5BTF9TQU1QTEVfU1VQUE9SVCAqLworICAgIHVpbnQ4X3QgZmlsdGVyQ291bnQ7ICAvKiE8IEZpbHRlciBTYW1wbGUgQ291bnQuIEF2YWlsYWJsZSByYW5nZSBpcyAxLTc7IDAgZGlzYWJsZXMgdGhlIGZpbHRlci4qLworICAgIHVpbnQ4X3QgZmlsdGVyUGVyaW9kOyAvKiE8IEZpbHRlciBTYW1wbGUgUGVyaW9kLiBUaGUgZGl2aWRlciB0byB0aGUgYnVzIGNsb2NrLiBBdmFpbGFibGUgcmFuZ2UgaXMgMC0yNTUuICovCit9IGNtcF9maWx0ZXJfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGludGVybmFsIERBQy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NtcF9kYWNfY29uZmlnCit7CisgICAgY21wX3JlZmVyZW5jZV92b2x0YWdlX3NvdXJjZV90IHJlZmVyZW5jZVZvbHRhZ2VTb3VyY2U7IC8qITwgU3VwcGx5IHZvbHRhZ2UgcmVmZXJlbmNlIHNvdXJjZS4gKi8KKyAgICB1aW50OF90IERBQ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBWYWx1ZSBmb3IgdGhlIERBQyBPdXRwdXQgVm9sdGFnZS4gQXZhaWxhYmxlIHJhbmdlIGlzIDAtNjMuKi8KK30gY21wX2RhY19jb25maWdfdDsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBDTVAuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgQ01QIG1vZHVsZS4gVGhlIG9wZXJhdGlvbnMgaW5jbHVkZWQgYXJlIGFzIGZvbGxvd3MuCisgKiAtIEVuYWJsaW5nIHRoZSBjbG9jayBmb3IgQ01QIG1vZHVsZS4KKyAqIC0gQ29uZmlndXJpbmcgdGhlIGNvbXBhcmF0b3IuCisgKiAtIEVuYWJsaW5nIHRoZSBDTVAgbW9kdWxlLgorICogTm90ZSB0aGF0IGZvciBzb21lIGRldmljZXMsIG11bHRpcGxlIENNUCBpbnN0YW5jZXMgc2hhcmUgdGhlIHNhbWUgY2xvY2sgZ2F0ZS4gSW4gdGhpcyBjYXNlLCB0byBlbmFibGUgdGhlIGNsb2NrIGZvcgorICogYW55IGluc3RhbmNlIGVuYWJsZXMgYWxsIENNUHMuIFNlZSB0aGUgYXBwcm9wcmlhdGUgTUNVIHJlZmVyZW5jZSBtYW51YWwgZm9yIHRoZSBjbG9jayBhc3NpZ25tZW50IG9mIHRoZSBDTVAuCisgKgorICogQHBhcmFtIGJhc2UgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIENNUF9Jbml0KENNUF9UeXBlICpiYXNlLCBjb25zdCBjbXBfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIERlLWluaXRpYWxpemVzIHRoZSBDTVAgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGUtaW5pdGlhbGl6ZXMgdGhlIENNUCBtb2R1bGUuIFRoZSBvcGVyYXRpb25zIGluY2x1ZGVkIGFyZSBhcyBmb2xsb3dzLgorICogLSBEaXNhYmxpbmcgdGhlIENNUCBtb2R1bGUuCisgKiAtIERpc2FibGluZyB0aGUgY2xvY2sgZm9yIENNUCBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgY2xvY2sgZm9yIHRoZSBDTVAuCisgKiBOb3RlIHRoYXQgZm9yIHNvbWUgZGV2aWNlcywgbXVsdGlwbGUgQ01QIGluc3RhbmNlcyBzaGFyZSB0aGUgc2FtZSBjbG9jayBnYXRlLiBJbiB0aGlzIGNhc2UsIGJlZm9yZSBkaXNhYmxpbmcgdGhlCisgKiBjbG9jayBmb3IgdGhlIENNUCwgZW5zdXJlIHRoYXQgYWxsIHRoZSBDTVAgaW5zdGFuY2VzIGFyZSBub3QgdXNlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3ZvaWQgQ01QX0RlaW5pdChDTVBfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMvZGlzYWJsZXMgdGhlIENNUCBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBtb2R1bGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTVBfRW5hYmxlKENNUF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1IxIHw9IENNUF9DUjFfRU5fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1IxICY9IH5DTVBfQ1IxX0VOX01BU0s7CisgICAgfQorfQorCisvKiEKKyogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBDTVAgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyoKKyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byB0aGVzZSBkZWZhdWx0IHZhbHVlcy4KKyogQGNvZGUKKyogICBjb25maWctPmVuYWJsZUNtcCAgICAgICAgICAgPSB0cnVlOworKiAgIGNvbmZpZy0+aHlzdGVyZXNpc01vZGUgICAgICA9IGtDTVBfSHlzdGVyZXNpc0xldmVsMDsKKyogICBjb25maWctPmVuYWJsZUhpZ2hTcGVlZCAgICAgPSBmYWxzZTsKKyogICBjb25maWctPmVuYWJsZUludmVydE91dHB1dCAgPSBmYWxzZTsKKyogICBjb25maWctPnVzZVVuZmlsdGVyZWRPdXRwdXQgPSBmYWxzZTsKKyogICBjb25maWctPmVuYWJsZVBpbk91dCAgICAgICAgPSBmYWxzZTsKKyogICBjb25maWctPmVuYWJsZVRyaWdnZXJNb2RlICAgPSBmYWxzZTsKKyogQGVuZGNvZGUKKyogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyovCit2b2lkIENNUF9HZXREZWZhdWx0Q29uZmlnKGNtcF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgIFNldHMgdGhlIGlucHV0IGNoYW5uZWxzIGZvciB0aGUgY29tcGFyYXRvci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGlucHV0IGNoYW5uZWxzIGZvciB0aGUgY29tcGFyYXRvci4KKyAqIE5vdGUgdGhhdCB0d28gaW5wdXQgY2hhbm5lbHMgY2Fubm90IGJlIHNldCB0aGUgc2FtZSB3YXkgaW4gdGhlIGFwcGxpY2F0aW9uLiBXaGVuIHRoZSB1c2VyIHNlbGVjdHMgdGhlIHNhbWUgaW5wdXQKKyAqIGZyb20gdGhlIGFuYWxvZyBtdXggdG8gdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBwb3J0LCB0aGUgY29tcGFyYXRvciBpcyBkaXNhYmxlZCBhdXRvbWF0aWNhbGx5LgorICoKKyAqIEBwYXJhbSAgYmFzZSAgICAgICAgICAgIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSAgcG9zaXRpdmVDaGFubmVsIFBvc2l0aXZlIHNpZGUgaW5wdXQgY2hhbm5lbCBudW1iZXIuIEF2YWlsYWJsZSByYW5nZSBpcyAwLTcuCisgKiBAcGFyYW0gIG5lZ2F0aXZlQ2hhbm5lbCBOZWdhdGl2ZSBzaWRlIGlucHV0IGNoYW5uZWwgbnVtYmVyLiBBdmFpbGFibGUgcmFuZ2UgaXMgMC03LgorICovCit2b2lkIENNUF9TZXRJbnB1dENoYW5uZWxzKENNUF9UeXBlICpiYXNlLCB1aW50OF90IHBvc2l0aXZlQ2hhbm5lbCwgdWludDhfdCBuZWdhdGl2ZUNoYW5uZWwpOworCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIEFkdmFuY2VkIEZlYXR1cmVzCisgKiBAeworICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NNUF9IQVNfRE1BKSAmJiBGU0xfRkVBVFVSRV9DTVBfSEFTX0RNQQorLyohCisgKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgRE1BIHJlcXVlc3QgZm9yIHJpc2luZy9mYWxsaW5nIGV2ZW50cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMvZGlzYWJsZXMgdGhlIERNQSByZXF1ZXN0IGZvciByaXNpbmcvZmFsbGluZyBldmVudHMuIEVpdGhlciBldmVudCB0cmlnZ2VycyB0aGUgZ2VuZXJhdGlvbiBvZgorICogdGhlIERNQSByZXF1ZXN0IGZyb20gQ01QIGlmIHRoZSBETUEgZmVhdHVyZSBpcyBlbmFibGVkLiBCb3RoIGV2ZW50cyBhcmUgaWdub3JlZCBmb3IgZ2VuZXJhdGluZyB0aGUgRE1BIHJlcXVlc3QgZnJvbSB0aGUgQ01QCisgKiBpZiB0aGUgRE1BIGlzIGRpc2FibGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIENNUCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLwordm9pZCBDTVBfRW5hYmxlRE1BKENNUF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ01QX0hBU19ETUEgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ01QX0hBU19XSU5ET1dfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ01QX0hBU19XSU5ET1dfTU9ERQorLyohCisgKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgd2luZG93IG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmZWF0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01QX0VuYWJsZVdpbmRvd01vZGUoQ01QX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DUjEgfD0gQ01QX0NSMV9XRV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DUjEgJj0gfkNNUF9DUjFfV0VfTUFTSzsKKyAgICB9Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ01QX0hBU19XSU5ET1dfTU9ERSAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DTVBfSEFTX1BBU1NfVEhST1VHSF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9DTVBfSEFTX1BBU1NfVEhST1VHSF9NT0RFCisvKiEKKyAqIEBicmllZiBFbmFibGVzL2Rpc2FibGVzIHRoZSBwYXNzIHRocm91Z2ggbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTVBfRW5hYmxlUGFzc1Rocm91Z2hNb2RlKENNUF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+TVVYQ1IgfD0gQ01QX01VWENSX1BTVE1fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+TVVYQ1IgJj0gfkNNUF9NVVhDUl9QU1RNX01BU0s7CisgICAgfQorfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NNUF9IQVNfUEFTU19USFJPVUdIX01PREUgKi8KKworLyohCisgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIGZpbHRlci4KKyAqCisgKiBAcGFyYW0gIGJhc2UgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBDTVBfU2V0RmlsdGVyQ29uZmlnKENNUF9UeXBlICpiYXNlLCBjb25zdCBjbXBfZmlsdGVyX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBpbnRlcm5hbCBEQUMuCisgKgorICogQHBhcmFtIGJhc2UgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiAiTlVMTCIgZGlzYWJsZXMgdGhlIGZlYXR1cmUuCisgKi8KK3ZvaWQgQ01QX1NldERBQ0NvbmZpZyhDTVBfVHlwZSAqYmFzZSwgY29uc3QgY21wX2RhY19jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayAgICBNYXNrIHZhbHVlIGZvciBpbnRlcnJ1cHRzLiBTZWUgIl9jbXBfaW50ZXJydXB0X2VuYWJsZSIuCisgKi8KK3ZvaWQgQ01QX0VuYWJsZUludGVycnVwdHMoQ01QX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayAgICBNYXNrIHZhbHVlIGZvciBpbnRlcnJ1cHRzLiBTZWUgIl9jbXBfaW50ZXJydXB0X2VuYWJsZSIuCisgKi8KK3ZvaWQgQ01QX0Rpc2FibGVJbnRlcnJ1cHRzKENNUF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBSZXN1bHRzCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmICBHZXRzIHRoZSBzdGF0dXMgZmxhZ3MuCisgKgorICogQHBhcmFtICBiYXNlICAgICBDTVAgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHJldHVybiAgICAgICAgICBNYXNrIHZhbHVlIGZvciB0aGUgYXNzZXJ0ZWQgZmxhZ3MuIFNlZSAiX2NtcF9zdGF0dXNfZmxhZ3MiLgorICovCit1aW50MzJfdCBDTVBfR2V0U3RhdHVzRmxhZ3MoQ01QX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgQ01QIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgICAgIE1hc2sgdmFsdWUgZm9yIHRoZSBmbGFncy4gU2VlICJfY21wX3N0YXR1c19mbGFncyIuCisgKi8KK3ZvaWQgQ01QX0NsZWFyU3RhdHVzRmxhZ3MoQ01QX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiBAfSAqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKy8qIQorICogQH0KKyAqLworI2VuZGlmIC8qIF9GU0xfQ01QX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXQuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZjcyYmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXQuYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfY210LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlIHN0YW5kYXJkIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgKElGKS4gKi8KKyNkZWZpbmUgQ01UX0lOVEVSTUVESUFURUZSRVFVRU5DWV84TUhaICg4MDAwMDAwVSkKKy8qIENNVCBkYXRhIG1vZHVsYXRlIG1hc2suICovCisjZGVmaW5lIENNVF9NT0RVTEFURV9DT1VOVF9XSURUSCAoOFUpCisvKiBDTVQgZGl2ZXIgMS4gKi8KKyNkZWZpbmUgQ01UX0NNVERJVl9PTkUgKDEpCisvKiBDTVQgZGl2ZXIgMi4gKi8KKyNkZWZpbmUgQ01UX0NNVERJVl9UV08gKDIpCisvKiBDTVQgZGl2ZXIgNC4gKi8KKyNkZWZpbmUgQ01UX0NNVERJVl9GT1VSICg0KQorLyogQ01UIGRpdmVyIDguICovCisjZGVmaW5lIENNVF9DTVRESVZfRUlHSFQgKDgpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBDTVQgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIHVpbnQzMl90IENNVF9HZXRJbnN0YW5jZShDTVRfVHlwZSAqYmFzZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGNtdCBjbG9ja3MgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfY210Q2xvY2tbRlNMX0ZFQVRVUkVfU09DX0NNVF9DT1VOVF0gPSBDTVRfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGNtdCBiYXNlcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBDTVRfVHlwZSAqY29uc3Qgc19jbXRCYXNlc1tdID0gQ01UX0JBU0VfUFRSUzsKKworLyohIEBicmllZiBQb2ludGVycyB0byBjbXQgSVJRIG51bWJlciBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBjb25zdCBJUlFuX1R5cGUgc19jbXRJcnFzW10gPSBDTVRfSVJRUzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdWludDMyX3QgQ01UX0dldEluc3RhbmNlKENNVF9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2NtdEJhc2VzKTsgaW5zdGFuY2UrKykKKyAgICB7CisgICAgICAgIGlmIChzX2NtdEJhc2VzW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19jbXRCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIENNVF9HZXREZWZhdWx0Q29uZmlnKGNtdF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgLyogRGVmYXVsdCBpbmZyYXJlZCBvdXRwdXQgaXMgZW5hYmxlZCBhbmQgc2V0IHdpdGggaGlnaCBhY3RpdmUsIHRoZSBkaXZpZGVyIGlzIHNldCB0byAxLiAqLworICAgIGNvbmZpZy0+aXNJbnRlcnJ1cHRFbmFibGVkID0gZmFsc2U7CisgICAgY29uZmlnLT5pc0lyb0VuYWJsZWQgPSB0cnVlOworICAgIGNvbmZpZy0+aXJvUG9sYXJpdHkgPSBrQ01UX0lST0FjdGl2ZUhpZ2g7CisgICAgY29uZmlnLT5kaXZpZGVyID0ga0NNVF9TZWNvbmRDbGtEaXYxOworfQorCit2b2lkIENNVF9Jbml0KENNVF9UeXBlICpiYXNlLCBjb25zdCBjbXRfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgYnVzQ2xvY2tfSHopCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisgICAgYXNzZXJ0KGJ1c0Nsb2NrX0h6ID49IENNVF9JTlRFUk1FRElBVEVGUkVRVUVOQ1lfOE1IWik7CisKKyAgICB1aW50OF90IGRpdmlkZXI7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogVW5nYXRlIGNsb2NrLiAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfY210Q2xvY2tbQ01UX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICAvKiBTZXRzIGNsb2NrIGRpdmlkZXIuIFRoZSBkaXZpZGVyIHNldCBpbiBwcHMgc2hvdWxkIGJlIHNldAorICAgICAgIHRvIG1ha2Ugc3ljQ2xvY2tfSHovZGl2ZGVyID0gOE1IeiAqLworICAgIGJhc2UtPlBQUyA9IENNVF9QUFNfUFBTRElWKGJ1c0Nsb2NrX0h6IC8gQ01UX0lOVEVSTUVESUFURUZSRVFVRU5DWV84TUhaIC0gMSk7CisgICAgZGl2aWRlciA9IGJhc2UtPk1TQzsKKyAgICBkaXZpZGVyICY9IH5DTVRfTVNDX0NNVERJVl9NQVNLOworICAgIGRpdmlkZXIgfD0gQ01UX01TQ19DTVRESVYoY29uZmlnLT5kaXZpZGVyKTsKKyAgICBiYXNlLT5NU0MgPSBkaXZpZGVyOworCisgICAgLyogU2V0IHRoZSBJUk8gc2lnbmFsLiAqLworICAgIGJhc2UtPk9DID0gQ01UX09DX0NNVFBPTChjb25maWctPmlyb1BvbGFyaXR5KSB8IENNVF9PQ19JUk9QRU4oY29uZmlnLT5pc0lyb0VuYWJsZWQpOworCisgICAgLyogU2V0IGludGVycnVwdC4gKi8KKyAgICBpZiAoY29uZmlnLT5pc0ludGVycnVwdEVuYWJsZWQpCisgICAgeworICAgICAgICBDTVRfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrQ01UX0VuZE9mQ3ljbGVJbnRlcnJ1cHRFbmFibGUpOworICAgICAgICBFbmFibGVJUlEoc19jbXRJcnFzW0NNVF9HZXRJbnN0YW5jZShiYXNlKV0pOworICAgIH0KK30KKwordm9pZCBDTVRfRGVpbml0KENNVF9UeXBlICpiYXNlKQoreworICAgIC8qRGlzYWJsZSB0aGUgQ01UIG1vZHVsYXRvci4gKi8KKyAgICBiYXNlLT5NU0MgPSAwOworCisgICAgLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAqLworICAgIENNVF9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrQ01UX0VuZE9mQ3ljbGVJbnRlcnJ1cHRFbmFibGUpOworICAgIERpc2FibGVJUlEoc19jbXRJcnFzW0NNVF9HZXRJbnN0YW5jZShiYXNlKV0pOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEdhdGUgdGhlIGNsb2NrLiAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2NtdENsb2NrW0NNVF9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIENNVF9TZXRNb2RlKENNVF9UeXBlICpiYXNlLCBjbXRfbW9kZV90IG1vZGUsIGNtdF9tb2R1bGF0ZV9jb25maWdfdCAqbW9kdWxhdGVDb25maWcpCit7CisgICAgdWludDhfdCBtc2NSZWcgPSBiYXNlLT5NU0M7CisKKyAgICAvKiBKdWRnZSB0aGUgbW9kZS4gKi8KKyAgICBpZiAobW9kZSAhPSBrQ01UX0RpcmVjdElST0N0bCkKKyAgICB7CisgICAgICAgIGFzc2VydChtb2R1bGF0ZUNvbmZpZyk7CisKKyAgICAgICAgLyogU2V0IGNhcnJpZXIgZ2VuZXJhdG9yLiAqLworICAgICAgICBDTVRfU2V0Q2FycmlyR2VuZXJhdGVDb3VudE9uZShiYXNlLCBtb2R1bGF0ZUNvbmZpZy0+aGlnaENvdW50MSwgbW9kdWxhdGVDb25maWctPmxvd0NvdW50MSk7CisgICAgICAgIGlmIChtb2RlID09IGtDTVRfRlNLTW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ01UX1NldENhcnJpckdlbmVyYXRlQ291bnRUd28oYmFzZSwgbW9kdWxhdGVDb25maWctPmhpZ2hDb3VudDIsIG1vZHVsYXRlQ29uZmlnLT5sb3dDb3VudDIpOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0IGNhcnJpZXIgbW9kdWxhdG9yLiAqLworICAgICAgICBDTVRfU2V0TW9kdWxhdGVNYXJrU3BhY2UoYmFzZSwgbW9kdWxhdGVDb25maWctPm1hcmtDb3VudCwgbW9kdWxhdGVDb25maWctPnNwYWNlQ291bnQpOworICAgICAgICBtc2NSZWcgJj0gfiAoQ01UX01TQ19GU0tfTUFTSyB8IENNVF9NU0NfQkFTRV9NQVNLKTsKKyAgICAgICAgbXNjUmVnIHw9IG1vZGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1zY1JlZyAmPSB+Q01UX01TQ19NQ0dFTl9NQVNLOworICAgIH0KKyAgICAvKiBTZXQgdGhlIENNVCBtb2RlLiAqLworICAgIGJhc2UtPk1TQyA9IG1zY1JlZzsKK30KKworY210X21vZGVfdCBDTVRfR2V0TW9kZShDTVRfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50OF90IG1vZGUgPSBiYXNlLT5NU0M7CisKKyAgICBpZiAoIShtb2RlICYgQ01UX01TQ19NQ0dFTl9NQVNLKSkKKyAgICB7IC8qIENhcnJpZXIgbW9kdWxhdG9yIGRpc2FibGVkIGFuZCB0aGUgSVJPIHNpZ25hbCBpcyBpbiBkaXJlY3Qgc29mdHdhcmUgY29udHJvbC4gKi8KKyAgICAgICAgcmV0dXJuIGtDTVRfRGlyZWN0SVJPQ3RsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBDYXJyaWVyIG1vZHVsYXRvciBpcyBlbmFibGVkLiAqLworICAgICAgICBpZiAobW9kZSAmIENNVF9NU0NfQkFTRV9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBCYXNlIGJhbmQgbW9kZS4gKi8KKyAgICAgICAgICAgIHJldHVybiBrQ01UX0Jhc2ViYW5kTW9kZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtb2RlICYgQ01UX01TQ19GU0tfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogRlNLIG1vZGUuICovCisgICAgICAgICAgICByZXR1cm4ga0NNVF9GU0tNb2RlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGltZSBtb2RlLiAqLworICAgICAgICAgICAgcmV0dXJuIGtDTVRfVGltZU1vZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3VpbnQzMl90IENNVF9HZXRDTVRGcmVxdWVuY3koQ01UX1R5cGUgKmJhc2UsIHVpbnQzMl90IGJ1c0Nsb2NrX0h6KQoreworICAgIHVpbnQzMl90IGZyZXF1ZW5jeTsKKyAgICB1aW50MzJfdCBkaXZpZGVyOworCisgICAgLyogR2V0IGludGVybWVkaWF0ZSBmcmVxdWVuY3kuICovCisgICAgZnJlcXVlbmN5ID0gYnVzQ2xvY2tfSHogLyAoKGJhc2UtPlBQUyAmIENNVF9QUFNfUFBTRElWX01BU0spICsgMSk7CisKKyAgICAvKiBHZXQgdGhlIHNlY29uZCBkaXZpZGVyLiAqLworICAgIGRpdmlkZXIgPSAoKGJhc2UtPk1TQyAmIENNVF9NU0NfQ01URElWX01BU0spID4+IENNVF9NU0NfQ01URElWX1NISUZUKTsKKyAgICAvKiBHZXQgQ01UIGZyZXF1ZW5jeS4gKi8KKyAgICBzd2l0Y2ggKChjbXRfc2Vjb25kX2Nsa2Rpdl90KWRpdmlkZXIpCisgICAgeworICAgICAgICBjYXNlIGtDTVRfU2Vjb25kQ2xrRGl2MToKKyAgICAgICAgICAgIGZyZXF1ZW5jeSA9IGZyZXF1ZW5jeSAvIENNVF9DTVRESVZfT05FOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NNVF9TZWNvbmRDbGtEaXYyOgorICAgICAgICAgICAgZnJlcXVlbmN5ID0gZnJlcXVlbmN5IC8gQ01UX0NNVERJVl9UV087CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ01UX1NlY29uZENsa0RpdjQ6CisgICAgICAgICAgICBmcmVxdWVuY3kgPSBmcmVxdWVuY3kgLyBDTVRfQ01URElWX0ZPVVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ01UX1NlY29uZENsa0Rpdjg6CisgICAgICAgICAgICBmcmVxdWVuY3kgPSBmcmVxdWVuY3kgLyBDTVRfQ01URElWX0VJR0hUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcmVxdWVuY3kgPSBmcmVxdWVuY3kgLyBDTVRfQ01URElWX09ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmcmVxdWVuY3k7Cit9CisKK3ZvaWQgQ01UX1NldE1vZHVsYXRlTWFya1NwYWNlKENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXJrQ291bnQsIHVpbnQzMl90IHNwYWNlQ291bnQpCit7CisgICAgLyogU2V0IG1vZHVsYXRlIG1hcmsuICovCisgICAgYmFzZS0+Q01EMSA9IChtYXJrQ291bnQgPj4gQ01UX01PRFVMQVRFX0NPVU5UX1dJRFRIKSAmIENNVF9DTUQxX01CX01BU0s7CisgICAgYmFzZS0+Q01EMiA9IChtYXJrQ291bnQgJiBDTVRfQ01EMl9NQl9NQVNLKTsKKyAgICAvKiBTZXQgbW9kdWxhdGUgc3BhY2UuICovCisgICAgYmFzZS0+Q01EMyA9IChzcGFjZUNvdW50ID4+IENNVF9NT0RVTEFURV9DT1VOVF9XSURUSCkgJiBDTVRfQ01EM19TQl9NQVNLOworICAgIGJhc2UtPkNNRDQgPSBzcGFjZUNvdW50ICYgQ01UX0NNRDRfU0JfTUFTSzsKK30KKwordm9pZCBDTVRfU2V0SXJvU3RhdGUoQ01UX1R5cGUgKmJhc2UsIGNtdF9pbmZyYXJlZF9vdXRwdXRfc3RhdGVfdCBzdGF0ZSkKK3sKKyAgICB1aW50OF90IG9jUmVnID0gYmFzZS0+T0M7CisKKyAgICBvY1JlZyAmPSB+Q01UX09DX0lST0xfTUFTSzsKKyAgICBvY1JlZyB8PSBDTVRfT0NfSVJPTChzdGF0ZSk7CisKKyAgICAvKiBTZXQgdGhlIGluZnJhcmVkIG91dHB1dCBzaWduYWwgY29udHJvbC4gKi8KKyAgICBiYXNlLT5PQyA9IG9jUmVnOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY210LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDgxZjhhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY210LmgKQEAgLTAsMCArMSw0MDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0NNVF9IXworI2RlZmluZSBfRlNMX0NNVF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGNtdAorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgQ01UIGRyaXZlciB2ZXJzaW9uIDIuMC4xLiAqLworI2RlZmluZSBGU0xfQ01UX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMSkpCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgVGhlIG1vZGVzIG9mIENNVC4KKyAqLwordHlwZWRlZiBlbnVtIF9jbXRfbW9kZQoreworICAgIGtDTVRfRGlyZWN0SVJPQ3RsID0gMHgwMFUsIC8qITwgQ2FycmllciBtb2R1bGF0b3IgaXMgZGlzYWJsZWQgYW5kIHRoZSBJUk8gc2lnbmFsIGlzIGRpcmVjdGx5IGluIHNvZnR3YXJlIGNvbnRyb2wgKi8KKyAgICBrQ01UX1RpbWVNb2RlID0gMHgwMVUsICAgICAvKiE8IENhcnJpZXIgbW9kdWxhdG9yIGlzIGVuYWJsZWQgaW4gdGltZSBtb2RlLiAqLworICAgIGtDTVRfRlNLTW9kZSA9IDB4MDVVLCAgICAgIC8qITwgQ2FycmllciBtb2R1bGF0b3IgaXMgZW5hYmxlZCBpbiBGU0sgbW9kZS4gKi8KKyAgICBrQ01UX0Jhc2ViYW5kTW9kZSA9IDB4MDlVICAvKiE8IENhcnJpZXIgbW9kdWxhdG9yIGlzIGVuYWJsZWQgaW4gYmFzZWJhbmQgbW9kZS4gKi8KK30gY210X21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgVGhlIENNVCBjbG9jayBkaXZpZGUgcHJpbWFyeSBwcmVzY2FsZXIuCisgKiBUaGUgcHJpbWFyeSBjbG9jayBkaXZpZGVyIGlzIHVzZWQgdG8gZGl2aWRlciB0aGUgYnVzIGNsb2NrIHRvCisgKiBnZXQgdGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgdG8gYXBwcm94aW1hdGVseSBlcXVhbCB0byA4IE1IWi4KKyAqIFdoZW4gdGhlIGJ1cyBjbG9jayBpcyA4IE1IWiwgc2V0IHByaW1hcnkgcHJlc2NhbGVyIHRvICJrQ01UX1ByaW1hcnlDbGtEaXYxIi4KKyAqLwordHlwZWRlZiBlbnVtIF9jbXRfcHJpbWFyeV9jbGtkaXYKK3sKKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYxID0gMFUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMS4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYyID0gMVUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMi4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYzID0gMlUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMy4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXY0ID0gM1UsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgNC4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXY1ID0gNFUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgNS4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXY2ID0gNVUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgNi4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXY3ID0gNlUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgNy4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXY4ID0gN1UsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgOC4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXY5ID0gOFUsICAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgOS4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYxMCA9IDlVLCAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMTAuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MTEgPSAxMFUsIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDExLiAqLworICAgIGtDTVRfUHJpbWFyeUNsa0RpdjEyID0gMTFVLCAvKiE8IFRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGlzIHRoZSBidXMgY2xvY2sgZGl2aWRlZCBieSAxMi4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYxMyA9IDEyVSwgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMTMuICovCisgICAga0NNVF9QcmltYXJ5Q2xrRGl2MTQgPSAxM1UsIC8qITwgVGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaXMgdGhlIGJ1cyBjbG9jayBkaXZpZGVkIGJ5IDE0LiAqLworICAgIGtDTVRfUHJpbWFyeUNsa0RpdjE1ID0gMTRVLCAvKiE8IFRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGlzIHRoZSBidXMgY2xvY2sgZGl2aWRlZCBieSAxNS4gKi8KKyAgICBrQ01UX1ByaW1hcnlDbGtEaXYxNiA9IDE1VSAgLyohPCBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpcyB0aGUgYnVzIGNsb2NrIGRpdmlkZWQgYnkgMTYuICovCit9IGNtdF9wcmltYXJ5X2Nsa2Rpdl90OworCisvKiEKKyAqIEBicmllZiBUaGUgQ01UIGNsb2NrIGRpdmlkZSBzZWNvbmRhcnkgcHJlc2NhbGVyLgorICogVGhlIHNlY29uZCBwcmVzY2FsZXIgY2FuIGJlIHVzZWQgdG8gZGl2aWRlIHRoZSA4IE1IWiBDTVQgY2xvY2sKKyAqIGJ5IDEsIDIsIDQsIG9yIDggYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLgorICovCit0eXBlZGVmIGVudW0gX2NtdF9zZWNvbmRfY2xrZGl2Cit7CisgICAga0NNVF9TZWNvbmRDbGtEaXYxID0gMFUsIC8qITwgVGhlIENNVCBjbG9jayBpcyB0aGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBmcmVxdWVuY3kgZGl2aWRlZCBieSAxLiAqLworICAgIGtDTVRfU2Vjb25kQ2xrRGl2MiA9IDFVLCAvKiE8IFRoZSBDTVQgY2xvY2sgaXMgdGhlIGludGVybWVkaWF0ZSBmcmVxdWVuY3kgZnJlcXVlbmN5IGRpdmlkZWQgYnkgMi4gKi8KKyAgICBrQ01UX1NlY29uZENsa0RpdjQgPSAyVSwgLyohPCBUaGUgQ01UIGNsb2NrIGlzIHRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDQuICovCisgICAga0NNVF9TZWNvbmRDbGtEaXY4ID0gM1UgIC8qITwgVGhlIENNVCBjbG9jayBpcyB0aGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBmcmVxdWVuY3kgZGl2aWRlZCBieSA4LiAqLworfSBjbXRfc2Vjb25kX2Nsa2Rpdl90OworCisvKiEKKyAqIEBicmllZiBUaGUgQ01UIGluZnJhcmVkIG91dHB1dCBwb2xhcml0eS4KKyAqLwordHlwZWRlZiBlbnVtIF9jbXRfaW5mcmFyZWRfb3V0cHV0X3BvbGFyaXR5Cit7CisgICAga0NNVF9JUk9BY3RpdmVMb3cgPSAwVSwgLyohPCBUaGUgQ01UIGluZnJhcmVkIG91dHB1dCBzaWduYWwgcG9sYXJpdHkgaXMgYWN0aXZlLWxvdy4gKi8KKyAgICBrQ01UX0lST0FjdGl2ZUhpZ2ggPSAxVSAvKiE8IFRoZSBDTVQgaW5mcmFyZWQgb3V0cHV0IHNpZ25hbCBwb2xhcml0eSBpcyBhY3RpdmUtaGlnaC4gKi8KK30gY210X2luZnJhcmVkX291dHB1dF9wb2xhcml0eV90OworCisvKiEKKyAqIEBicmllZiBUaGUgQ01UIGluZnJhcmVkIG91dHB1dCBzaWduYWwgc3RhdGUgY29udHJvbC4KKyAqLwordHlwZWRlZiBlbnVtIF9jbXRfaW5mcmFyZWRfb3V0cHV0X3N0YXRlCit7CisgICAga0NNVF9JUk9DdGxMb3cgPSAwVSwgLyohPCBUaGUgQ01UIEluZnJhcmVkIG91dHB1dCBzaWduYWwgc3RhdGUgaXMgY29udHJvbGxlZCB0byBsb3cuICovCisgICAga0NNVF9JUk9DdGxIaWdoID0gMVUgLyohPCBUaGUgQ01UIEluZnJhcmVkIG91dHB1dCBzaWduYWwgc3RhdGUgaXMgY29udHJvbGxlZCB0byBoaWdoLiAqLworfSBjbXRfaW5mcmFyZWRfb3V0cHV0X3N0YXRlX3Q7CisKKy8qIQorICogQGJyaWVmIENNVCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUsIGRlZmF1bHQgc2V0dGluZ3MgYWxsIGRpc2FibGVkLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBzZXR0aW5ncyBmb3IgYWxsIG9mIHRoZSBDTVQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLgorICovCitlbnVtIF9jbXRfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtDTVRfRW5kT2ZDeWNsZUludGVycnVwdEVuYWJsZSA9IENNVF9NU0NfRU9DSUVfTUFTSywgLyohPCBDTVQgZW5kIG9mIGN5Y2xlIGludGVycnVwdC4gKi8KK307CisKKy8qIQorICogQGJyaWVmIENNVCBjYXJyaWVyIGdlbmVyYXRvciBhbmQgbW9kdWxhdG9yIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICovCit0eXBlZGVmIHN0cnVjdCBfY210X21vZHVsYXRlX2NvbmZpZworeworICAgIHVpbnQ4X3QgaGlnaENvdW50MTsgIC8qITwgVGhlIGhpZ2gtdGltZSBmb3IgY2FycmllciBnZW5lcmF0b3IgZmlyc3QgcmVnaXN0ZXIuICovCisgICAgdWludDhfdCBsb3dDb3VudDE7ICAgLyohPCBUaGUgbG93LXRpbWUgZm9yIGNhcnJpZXIgZ2VuZXJhdG9yIGZpcnN0IHJlZ2lzdGVyLiAqLworICAgIHVpbnQ4X3QgaGlnaENvdW50MjsgIC8qITwgVGhlIGhpZ2gtdGltZSBmb3IgY2FycmllciBnZW5lcmF0b3Igc2Vjb25kIHJlZ2lzdGVyIGZvciBGU0sgbW9kZS4gKi8KKyAgICB1aW50OF90IGxvd0NvdW50MjsgICAvKiE8IFRoZSBsb3ctdGltZSBmb3IgY2FycmllciBnZW5lcmF0b3Igc2Vjb25kIHJlZ2lzdGVyIGZvciBGU0sgbW9kZS4gKi8KKyAgICB1aW50MTZfdCBtYXJrQ291bnQ7ICAvKiE8IFRoZSBtYXJrIHRpbWUgZm9yIHRoZSBtb2R1bGF0b3IgZ2F0ZS4gKi8KKyAgICB1aW50MTZfdCBzcGFjZUNvdW50OyAvKiE8IFRoZSBzcGFjZSB0aW1lIGZvciB0aGUgbW9kdWxhdG9yIGdhdGUuICovCit9IGNtdF9tb2R1bGF0ZV9jb25maWdfdDsKKworLyohIEBicmllZiBDTVQgYmFzaWMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHN0cnVjdCBfY210X2NvbmZpZworeworICAgIGJvb2wgaXNJbnRlcnJ1cHRFbmFibGVkOyAgICAgICAgICAgICAgICAgICAgLyohPCBUaW1lciBpbnRlcnJ1cHQgMC1kaXNhYmxlLCAxLWVuYWJsZS4gKi8KKyAgICBib29sIGlzSXJvRW5hYmxlZDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIElSTyBvdXRwdXQgMC1kaXNhYmxlZCwgMS1lbmFibGVkLiAqLworICAgIGNtdF9pbmZyYXJlZF9vdXRwdXRfcG9sYXJpdHlfdCBpcm9Qb2xhcml0eTsgLyohPCBUaGUgSVJPIHBvbGFyaXR5LiAqLworICAgIGNtdF9zZWNvbmRfY2xrZGl2X3QgZGl2aWRlcjsgICAgICAgICAgICAgICAgLyohPCBUaGUgQ01UIGNsb2NrIGRpdmlkZSBwcmVzY2FsZXIuICovCit9IGNtdF9jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uIGFuZCBkZWluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIENNVCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBUaGlzIEFQSQorICogZ2V0cyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgdGhlIENNVF9Jbml0KCkuCisgKiBVc2UgdGhlIGluaXRpYWxpemVkIHN0cnVjdHVyZSB1bmNoYW5nZWQgaW4gQ01UX0luaXQoKSBvciBtb2RpZnkKKyAqIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIGJlZm9yZSBjYWxsaW5nIHRoZSBDTVRfSW5pdCgpLgorICoKKyAqIEBwYXJhbSBjb25maWcgVGhlIENNVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBwb2ludGVyLgorICovCit2b2lkIENNVF9HZXREZWZhdWx0Q29uZmlnKGNtdF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIENNVCBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiB1bmdhdGVzIHRoZSBtb2R1bGUgY2xvY2sgYW5kIHNldHMgdGhlIENNVCBpbnRlcm5hbCBjbG9jaywKKyAqIGludGVycnVwdCwgYW5kIGluZnJhcmVkIG91dHB1dCBzaWduYWwgZm9yIHRoZSBDTVQgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICAgICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyAgICAgICAgICBUaGUgQ01UIGJhc2ljIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHBhcmFtIGJ1c0Nsb2NrX0h6ICAgICBUaGUgQ01UIG1vZHVsZSBpbnB1dCBjbG9jayAtIGJ1cyBjbG9jayBmcmVxdWVuY3kuCisgKi8KK3ZvaWQgQ01UX0luaXQoQ01UX1R5cGUgKmJhc2UsIGNvbnN0IGNtdF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBidXNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBDTVQgbW9kdWxlIGFuZCBnYXRlIGNvbnRyb2wuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBDTVQgbW9kdWxhdG9yLCBpbnRlcnJ1cHRzLCBhbmQgZ2F0ZXMgdGhlCisgKiBDTVQgY2xvY2sgY29udHJvbC4gQ01UX0luaXQgbXVzdCBiZSBjYWxsZWQgIHRvIHVzZSB0aGUgQ01UIGFnYWluLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIENNVF9EZWluaXQoQ01UX1R5cGUgKmJhc2UpOworCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIEJhc2ljIENvbnRyb2wgT3BlcmF0aW9ucworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTZWxlY3RzIHRoZSBtb2RlIGZvciBDTVQuCisgKgorICogQHBhcmFtIGJhc2UgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbW9kZSAgIFRoZSBDTVQgZmVhdHVyZSBtb2RlIGVudW1lcmF0aW9uLiBTZWUgImNtdF9tb2RlX3QiLgorICogQHBhcmFtIG1vZHVsYXRlQ29uZmlnICBUaGUgY2FycmllciBnZW5lcmF0aW9uIGFuZCBtb2R1bGF0b3IgY29uZmlndXJhdGlvbi4KKyAqLwordm9pZCBDTVRfU2V0TW9kZShDTVRfVHlwZSAqYmFzZSwgY210X21vZGVfdCBtb2RlLCBjbXRfbW9kdWxhdGVfY29uZmlnX3QgKm1vZHVsYXRlQ29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgbW9kZSBvZiB0aGUgQ01UIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gVGhlIENNVCBtb2RlLgorICogICAgIGtDTVRfRGlyZWN0SVJPQ3RsICAgICBDYXJyaWVyIG1vZHVsYXRvciBpcyBkaXNhYmxlZDsgdGhlIElSTyBzaWduYWwgaXMgZGlyZWN0bHkgaW4gc29mdHdhcmUgY29udHJvbC4KKyAqICAgICBrQ01UX1RpbWVNb2RlICAgICAgICAgQ2FycmllciBtb2R1bGF0b3IgaXMgZW5hYmxlZCBpbiB0aW1lIG1vZGUuCisgKiAgICAga0NNVF9GU0tNb2RlICAgICAgICAgIENhcnJpZXIgbW9kdWxhdG9yIGlzIGVuYWJsZWQgaW4gRlNLIG1vZGUuCisgKiAgICAga0NNVF9CYXNlYmFuZE1vZGUgICAgIENhcnJpZXIgbW9kdWxhdG9yIGlzIGVuYWJsZWQgaW4gYmFzZWJhbmQgbW9kZS4KKyAqLworY210X21vZGVfdCBDTVRfR2V0TW9kZShDTVRfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGFjdHVhbCBDTVQgY2xvY2sgZnJlcXVlbmN5LgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gYnVzQ2xvY2tfSHogQ01UIG1vZHVsZSBpbnB1dCBjbG9jayAtIGJ1cyBjbG9jayBmcmVxdWVuY3kuCisgKiBAcmV0dXJuIFRoZSBDTVQgY2xvY2sgZnJlcXVlbmN5LgorICovCit1aW50MzJfdCBDTVRfR2V0Q01URnJlcXVlbmN5KENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBidXNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHByaW1hcnkgZGF0YSBzZXQgZm9yIHRoZSBDTVQgY2FycmllciBnZW5lcmF0b3IgY291bnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGhpZ2gtdGltZSBhbmQgbG93LXRpbWUgb2YgdGhlIHByaW1hcnkgZGF0YSBzZXQgZm9yIHRoZQorICogQ01UIGNhcnJpZXIgZ2VuZXJhdG9yIGNvdW50ZXIgdG8gY29udHJvbCB0aGUgcGVyaW9kIGFuZCB0aGUgZHV0eSBjeWNsZSBvZiB0aGUKKyAqIG91dHB1dCBjYXJyaWVyIHNpZ25hbC4KKyAqIElmIHRoZSBDTVQgY2xvY2sgcGVyaW9kIGlzIFRjbXQsIHRoZSBwZXJpb2Qgb2YgdGhlIGNhcnJpZXIgZ2VuZXJhdG9yIHNpZ25hbCBlcXVhbHMKKyAqIChoaWdoQ291bnQgKyBsb3dDb3VudCkgKiBUY210LiBUaGUgZHV0eSBjeWNsZSBlcXVhbHMgdG8gaGlnaENvdW50IC8gKGhpZ2hDb3VudCArIGxvd0NvdW50KS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgIENNVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoaWdoQ291bnQgVGhlIG51bWJlciBvZiBDTVQgY2xvY2tzIGZvciBjYXJyaWVyIGdlbmVyYXRvciBzaWduYWwgaGlnaCB0aW1lLAorICogICAgICAgICAgICAgICAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAxIH4gMHhGRi4KKyAqIEBwYXJhbSBsb3dDb3VudCAgVGhlIG51bWJlciBvZiBDTVQgY2xvY2tzIGZvciBjYXJyaWVyIGdlbmVyYXRvciBzaWduYWwgbG93IHRpbWUsCisgKiAgICAgICAgICAgICAgICAgIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDEgfiAweEZGLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01UX1NldENhcnJpckdlbmVyYXRlQ291bnRPbmUoQ01UX1R5cGUgKmJhc2UsIHVpbnQzMl90IGhpZ2hDb3VudCwgdWludDMyX3QgbG93Q291bnQpCit7CisgICAgYXNzZXJ0KGhpZ2hDb3VudCA8PSBDTVRfQ0dIMV9QSF9NQVNLKTsKKyAgICBhc3NlcnQoaGlnaENvdW50KTsKKyAgICBhc3NlcnQobG93Q291bnQgPD0gQ01UX0NHTDFfUExfTUFTSyk7CisgICAgYXNzZXJ0KGxvd0NvdW50KTsKKworICAgIGJhc2UtPkNHSDEgPSBoaWdoQ291bnQ7CisgICAgYmFzZS0+Q0dMMSA9IGxvd0NvdW50OworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBzZWNvbmRhcnkgZGF0YSBzZXQgZm9yIHRoZSBDTVQgY2FycmllciBnZW5lcmF0b3IgY291bnRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEZTSyBtb2RlIHNldHRpbmcgdGhlIGhpZ2gtdGltZSBhbmQgbG93LXRpbWUgb2YgdGhlIHNlY29uZGFyeQorICogZGF0YSBzZXQgQ01UIGNhcnJpZXIgZ2VuZXJhdG9yIGNvdW50ZXIgdG8gY29udHJvbCB0aGUgcGVyaW9kIGFuZCB0aGUgZHV0eSBjeWNsZQorICogb2YgdGhlIG91dHB1dCBjYXJyaWVyIHNpZ25hbC4KKyAqIElmIHRoZSBDTVQgY2xvY2sgcGVyaW9kIGlzIFRjbXQsIHRoZSBwZXJpb2Qgb2YgdGhlIGNhcnJpZXIgZ2VuZXJhdG9yIHNpZ25hbCBlcXVhbHMKKyAqIChoaWdoQ291bnQgKyBsb3dDb3VudCkgKiBUY210LiBUaGUgZHV0eSBjeWNsZSBlcXVhbHMgIGhpZ2hDb3VudCAvIChoaWdoQ291bnQgKyBsb3dDb3VudCkuCisgKgorICogQHBhcmFtIGJhc2UgICAgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGlnaENvdW50IFRoZSBudW1iZXIgb2YgQ01UIGNsb2NrcyBmb3IgY2FycmllciBnZW5lcmF0b3Igc2lnbmFsIGhpZ2ggdGltZSwKKyAqICAgICAgICAgICAgICAgICAgaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMSB+IDB4RkYuCisgKiBAcGFyYW0gbG93Q291bnQgIFRoZSBudW1iZXIgb2YgQ01UIGNsb2NrcyBmb3IgY2FycmllciBnZW5lcmF0b3Igc2lnbmFsIGxvdyB0aW1lLAorICogICAgICAgICAgICAgICAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAxIH4gMHhGRi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENNVF9TZXRDYXJyaXJHZW5lcmF0ZUNvdW50VHdvKENNVF9UeXBlICpiYXNlLCB1aW50MzJfdCBoaWdoQ291bnQsIHVpbnQzMl90IGxvd0NvdW50KQoreworICAgIGFzc2VydChoaWdoQ291bnQgPD0gQ01UX0NHSDJfU0hfTUFTSyk7CisgICAgYXNzZXJ0KGhpZ2hDb3VudCk7CisgICAgYXNzZXJ0KGxvd0NvdW50IDw9IENNVF9DR0wyX1NMX01BU0spOworICAgIGFzc2VydChsb3dDb3VudCk7CisKKyAgICBiYXNlLT5DR0gyID0gaGlnaENvdW50OworICAgIGJhc2UtPkNHTDIgPSBsb3dDb3VudDsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgbW9kdWxhdGlvbiBtYXJrIGFuZCBzcGFjZSB0aW1lIHBlcmlvZCBmb3IgdGhlIENNVCBtb2R1bGF0b3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtYXJrIHRpbWUgcGVyaW9kIG9mIHRoZSBDTVQgbW9kdWxhdG9yIGNvdW50ZXIKKyAqIHRvIGNvbnRyb2wgdGhlIG1hcmsgdGltZSBvZiB0aGUgb3V0cHV0IG1vZHVsYXRlZCBzaWduYWwgZnJvbSB0aGUgY2FycmllciBnZW5lcmF0b3Igb3V0cHV0IHNpZ25hbC4KKyAqIElmIHRoZSBDTVQgY2xvY2sgZnJlcXVlbmN5IGlzIEZjbXQgYW5kIHRoZSBjYXJyaWVyIG91dCBzaWduYWwgZnJlcXVlbmN5IGlzIGZjZzoKKyAqICAgICAgLSBJbiBUaW1lIGFuZCBCYXNlYmFuZCBtb2RlOiBUaGUgbWFyayBwZXJpb2Qgb2YgdGhlIGdlbmVyYXRlZCBzaWduYWwgZXF1YWxzIChtYXJrQ291bnQgKyAxKSAvIChGY210LzgpLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzcGFjZSBwZXJpb2Qgb2YgdGhlIGdlbmVyYXRlZCBzaWduYWwgZXF1YWxzIHNwYWNlQ291bnQgLyAoRmNtdC84KS4KKyAqICAgICAgLSBJbiBGU0sgbW9kZTogVGhlIG1hcmsgcGVyaW9kIG9mIHRoZSBnZW5lcmF0ZWQgc2lnbmFsIGVxdWFscyAobWFya0NvdW50ICsgMSkvZmNnLgorICogICAgICAgICAgICAgICAgICAgICBUaGUgc3BhY2UgcGVyaW9kIG9mIHRoZSBnZW5lcmF0ZWQgc2lnbmFsIGVxdWFscyBzcGFjZUNvdW50IC8gZmNnLgorICoKKyAqIEBwYXJhbSBiYXNlIEJhc2UgYWRkcmVzcyBmb3IgY3VycmVudCBDTVQgaW5zdGFuY2UuCisgKiBAcGFyYW0gbWFya0NvdW50IFRoZSBudW1iZXIgb2YgY2xvY2sgcGVyaW9kIGZvciBDTVQgbW9kdWxhdG9yIHNpZ25hbCBtYXJrIHBlcmlvZCwKKyAqICAgICAgICAgICAgICAgICAgIGluIHRoZSByYW5nZSBvZiAwIH4gMHhGRkZGLgorICogQHBhcmFtIHNwYWNlQ291bnQgVGhlIG51bWJlciBvZiBjbG9jayBwZXJpb2QgZm9yIENNVCBtb2R1bGF0b3Igc2lnbmFsIHNwYWNlIHBlcmlvZCwKKyAqICAgICAgICAgICAgICAgICAgIGluIHRoZSByYW5nZSBvZiB0aGUgMCB+IDB4RkZGRi4KKyAqLwordm9pZCBDTVRfU2V0TW9kdWxhdGVNYXJrU3BhY2UoQ01UX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hcmtDb3VudCwgdWludDMyX3Qgc3BhY2VDb3VudCk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGV4dGVuZGVkIHNwYWNlIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFrZSB0aGUgc3BhY2UgcGVyaW9kIGxvbmdlcgorICogZm9yIHRpbWUsIGJhc2ViYW5kLCBhbmQgRlNLIG1vZGVzLgorICoKKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBUcnVlIGVuYWJsZSB0aGUgZXh0ZW5kZWQgc3BhY2UsIGZhbHNlIGRpc2FibGUgdGhlIGV4dGVuZGVkIHNwYWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgQ01UX0VuYWJsZUV4dGVuZGVkU3BhY2UoQ01UX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5NU0MgfD0gQ01UX01TQ19FWFNQQ19NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5NU0MgJj0gfkNNVF9NU0NfRVhTUENfTUFTSzsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIElSTyAoaW5mcmFyZWQgb3V0cHV0KSBzaWduYWwgc3RhdGUuCisgKgorICogQ2hhbmdlcyB0aGUgc3RhdGVzIG9mIHRoZSBJUk8gc2lnbmFsIHdoZW4gdGhlIGtDTVRfRGlyZWN0SVJPTW9kZSBtb2RlIGlzIHNldAorICogYW5kIHRoZSBJUk8gc2lnbmFsIGlzIGVuYWJsZWQuCisgKgorICogQHBhcmFtIGJhc2UgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gc3RhdGUgIFRoZSBjb250cm9sIG9mIHRoZSBJUk8gc2lnbmFsLiBTZWUgImNtdF9pbmZyYXJlZF9vdXRwdXRfc3RhdGVfdCIKKyAqLwordm9pZCBDTVRfU2V0SXJvU3RhdGUoQ01UX1R5cGUgKmJhc2UsIGNtdF9pbmZyYXJlZF9vdXRwdXRfc3RhdGVfdCBzdGF0ZSk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIENNVCBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBDTVQgaW50ZXJydXB0cyBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIG1hc2sgaWYgZW5hYmxlZC4KKyAqIFRoZSBDTVQgb25seSBoYXMgdGhlIGVuZCBvZiB0aGUgY3ljbGUgaW50ZXJydXB0IC0gYW4gaW50ZXJydXB0IG9jY3VycyBhdCB0aGUgZW5kCisgKiBvZiB0aGUgbW9kdWxhdG9yIGN5Y2xlLiBUaGlzIGludGVycnVwdCBwcm92aWRlcyBhIG1lYW5zIGZvciB0aGUgdXNlcgorICogdG8gcmVsb2FkIHRoZSBuZXcgbWFyay9zcGFjZSB2YWx1ZXMgaW50byB0aGUgQ01UIG1vZHVsYXRvciBkYXRhIHJlZ2lzdGVycworICogYW5kIHZlcmlmeSB0aGUgbW9kdWxhdG9yIG1hcmsgYW5kIHNwYWNlLgorICogRm9yIGV4YW1wbGUsIHRvIGVuYWJsZSB0aGUgZW5kIG9mIGN5Y2xlLCBkbyB0aGUgZm9sbG93aW5nLgorICogQGNvZGUKKyAqICAgICBDTVRfRW5hYmxlSW50ZXJydXB0cyhDTVQsIGtDTVRfRW5kT2ZDeWNsZUludGVycnVwdEVuYWJsZSk7CisgKiBAZW5kY29kZQorICogQHBhcmFtIGJhc2UgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIExvZ2ljYWwgT1Igb2YgQHJlZiBfY210X2ludGVycnVwdF9lbmFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTVRfRW5hYmxlSW50ZXJydXB0cyhDTVRfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5NU0MgfD0gbWFzazsKK30KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIENNVCBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgQ01UIGludGVycnVwdHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBtYXNrSWYgZW5hYmxlZC4KKyAqIFRoZSBDTVQgb25seSBoYXMgdGhlIGVuZCBvZiB0aGUgY3ljbGUgaW50ZXJydXB0LgorICogRm9yIGV4YW1wbGUsIHRvIGRpc2FibGUgdGhlIGVuZCBvZiBjeWNsZSwgZG8gdGhlIGZvbGxvd2luZy4KKyAqIEBjb2RlCisgKiAgICAgQ01UX0Rpc2FibGVJbnRlcnJ1cHRzKENNVCwga0NNVF9FbmRPZkN5Y2xlSW50ZXJydXB0RW5hYmxlKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgICBDTVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIExvZ2ljYWwgT1Igb2YgQHJlZiBfY210X2ludGVycnVwdF9lbmFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBDTVRfRGlzYWJsZUludGVycnVwdHMoQ01UX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+TVNDICY9IH5tYXNrOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlIHN0YXR1cyBmbGFnLgorICoKKyAqIFRoZSBmbGFnIGlzIHNldDoKKyAqICAgICAgICAgICAtIFdoZW4gdGhlIG1vZHVsYXRvciBpcyBub3QgY3VycmVudGx5IGFjdGl2ZSBhbmQgY2FycmllciBhbmQgbW9kdWxhdG9yCisgKiAgICAgICAgICAgICBhcmUgc2V0IHRvIHN0YXJ0IHRoZSBpbml0aWFsIENNVCB0cmFuc21pc3Npb24uCisgKiAgICAgICAgICAgLSBBdCB0aGUgZW5kIG9mIGVhY2ggbW9kdWxhdGlvbiBjeWNsZSB3aGVuIHRoZSBjb3VudGVyIGlzIHJlbG9hZGVkIGFuZAorICogICAgICAgICAgICAgdGhlIGNhcnJpZXIgYW5kIG1vZHVsYXRvciBhcmUgZW5hYmxlZC4KKyAqIEBwYXJhbSBiYXNlICAgQ01UIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgZW5kIG9mIGN5Y2xlIHN0YXR1cyBmbGFnCisgKiAgICAgICAgIEBhcmcgbm9uLXplcm86ICBFbmQtb2YtY3ljbGUgaGFzIG9jY3VycmVkLgorICogICAgICAgICBAYXJnIHplcm86IEVuZC1vZi1jeWNsZSBoYXMgbm90IHlldCBvY2N1cnJlZCBzaW5jZSB0aGUgZmxhZyBsYXN0IGNsZWFyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgQ01UX0dldFN0YXR1c0ZsYWdzKENNVF9UeXBlICpiYXNlKQoreworICAgIHJldHVybiBiYXNlLT5NU0MgJiBDTVRfTVNDX0VPQ0ZfTUFTSzsKK30KKworLyohIEB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfQ01UX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvbW1vbi5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvbW1vbi5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorLy8jaW5jbHVkZSAiZnNsX2RlYnVnX2NvbnNvbGUuaCIKKworI2lmbmRlZiBOREVCVUcKKyNpZiAoZGVmaW5lZChfX0NDX0FSTSkpIHx8IChkZWZpbmVkKF9fSUNDQVJNX18pKQordm9pZCBfX2FlYWJpX2Fzc2VydChjb25zdCBjaGFyICpmYWlsZWRFeHByLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyAgICAvL1BSSU5URigiQVNTRVJUIEVSUk9SIFwiICVzIFwiOiBmaWxlIFwiJXNcIiBMaW5lIFwiJWRcIiBcbiIsIGZhaWxlZEV4cHIsIGZpbGUsIGxpbmUpOworICAgIGZvciAoOzspCisgICAgeworICAgICAgICBfX0JLUFQoMCk7CisgICAgfQorfQorI2VsaWYoZGVmaW5lZChfX1JFRExJQl9fKSkKKworI2lmIFNES19ERUJVR0NPTlNPTEUKK3ZvaWQgX19hc3NlcnRpb25fZmFpbGVkKGNoYXIgKl9FeHByKQoreworICAgIFBSSU5URigiJXNcbiIsIF9FeHByKTsKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgX19hc20oImJrcHQgIzAiKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2VsaWYoZGVmaW5lZChfX0dOVUNfXykpCit2b2lkIF9fYXNzZXJ0X2Z1bmMoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZhaWxlZEV4cHIpCit7CisgICAgUFJJTlRGKCJBU1NFUlQgRVJST1IgXCIgJXMgXCI6IGZpbGUgXCIlc1wiIExpbmUgXCIlZFwiIGZ1bmN0aW9uIG5hbWUgXCIlc1wiIFxuIiwgZmFpbGVkRXhwciwgZmlsZSwgbGluZSwgZnVuYyk7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIF9fQktQVCgwKTsKKyAgICB9Cit9CisjZW5kaWYgLyogKGRlZmluZWQoX19DQ19BUk0pKSB8fCAgKGRlZmluZWQgKF9fSUNDQVJNX18pKSAqLworI2VuZGlmIC8qIE5ERUJVRyAqLworCisjaWZuZGVmIF9fR0lDX1BSSU9fQklUUwordWludDMyX3QgSW5zdGFsbElSUUhhbmRsZXIoSVJRbl9UeXBlIGlycSwgdWludDMyX3QgaXJxSGFuZGxlcikKK3sKKy8qIEFkZHJlc3NlcyBmb3IgVkVDVE9SX1RBQkxFIGFuZCBWRUNUT1JfUkFNIGNvbWUgZnJvbSB0aGUgbGlua2VyIGZpbGUgKi8KKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorICAgIGV4dGVybiB1aW50MzJfdCBJbWFnZSQkVkVDVE9SX1JPTSQkQmFzZVtdOworICAgIGV4dGVybiB1aW50MzJfdCBJbWFnZSQkVkVDVE9SX1JBTSQkQmFzZVtdOworICAgIGV4dGVybiB1aW50MzJfdCBJbWFnZSQkUldfbV9kYXRhJCRCYXNlW107CisKKyNkZWZpbmUgX19WRUNUT1JfVEFCTEUgSW1hZ2UkJFZFQ1RPUl9ST00kJEJhc2UKKyNkZWZpbmUgX19WRUNUT1JfUkFNIEltYWdlJCRWRUNUT1JfUkFNJCRCYXNlCisjZGVmaW5lIF9fUkFNX1ZFQ1RPUl9UQUJMRV9TSVpFICgoKHVpbnQzMl90KUltYWdlJCRSV19tX2RhdGEkJEJhc2UgLSAodWludDMyX3QpSW1hZ2UkJFZFQ1RPUl9SQU0kJEJhc2UpKQorI2VsaWYgZGVmaW5lZChfX0lDQ0FSTV9fKQorICAgIGV4dGVybiB1aW50MzJfdCBfX1JBTV9WRUNUT1JfVEFCTEVfU0laRVtdOworICAgIGV4dGVybiB1aW50MzJfdCBfX1ZFQ1RPUl9UQUJMRVtdOworICAgIGV4dGVybiB1aW50MzJfdCBfX1ZFQ1RPUl9SQU1bXTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisgICAgZXh0ZXJuIHVpbnQzMl90IF9fVkVDVE9SX1RBQkxFW107CisgICAgZXh0ZXJuIHVpbnQzMl90IF9fVkVDVE9SX1JBTVtdOworICAgIGV4dGVybiB1aW50MzJfdCBfX1JBTV9WRUNUT1JfVEFCTEVfU0laRV9CWVRFU1tdOworICAgIHVpbnQzMl90IF9fUkFNX1ZFQ1RPUl9UQUJMRV9TSVpFID0gKHVpbnQzMl90KShfX1JBTV9WRUNUT1JfVEFCTEVfU0laRV9CWVRFUyk7CisjZW5kaWYgLyogZGVmaW5lZChfX0NDX0FSTSkgKi8KKyAgICB1aW50MzJfdCBuOworICAgIHVpbnQzMl90IHJldDsKKyAgICB1aW50MzJfdCBpcnFNYXNrVmFsdWU7CisKKyAgICBpcnFNYXNrVmFsdWUgPSBEaXNhYmxlR2xvYmFsSVJRKCk7CisgICAgaWYgKFNDQi0+VlRPUiAhPSAodWludDMyX3QpX19WRUNUT1JfUkFNKQorICAgIHsKKyAgICAgICAgLyogQ29weSB0aGUgdmVjdG9yIHRhYmxlIGZyb20gUk9NIHRvIFJBTSAqLworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKCh1aW50MzJfdClfX1JBTV9WRUNUT1JfVEFCTEVfU0laRSkgLyBzaXplb2YodWludDMyX3QpOyBuKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fVkVDVE9SX1JBTVtuXSA9IF9fVkVDVE9SX1RBQkxFW25dOworICAgICAgICB9CisgICAgICAgIC8qIFBvaW50IHRoZSBWVE9SIHRvIHRoZSBwb3NpdGlvbiBvZiB2ZWN0b3IgdGFibGUgKi8KKyAgICAgICAgU0NCLT5WVE9SID0gKHVpbnQzMl90KV9fVkVDVE9SX1JBTTsKKyAgICB9CisKKyAgICByZXQgPSBfX1ZFQ1RPUl9SQU1baXJxICsgMTZdOworICAgIC8qIG1ha2Ugc3VyZSB0aGUgX19WRUNUT1JfUkFNIGlzIG5vbmNhY2hhYmxlICovCisgICAgX19WRUNUT1JfUkFNW2lycSArIDE2XSA9IGlycUhhbmRsZXI7CisKKyAgICBFbmFibGVHbG9iYWxJUlEoaXJxTWFza1ZhbHVlKTsKKworICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBDUFVfUU45MDhYCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX1NZU0NPTl9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQgPiAwKSkKKwordm9pZCBFbmFibGVEZWVwU2xlZXBJUlEoSVJRbl9UeXBlIGludGVycnVwdCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IDA7CisgICAgdWludDMyX3QgaW50TnVtYmVyID0gKHVpbnQzMl90KWludGVycnVwdDsKKyAgICB3aGlsZSAoaW50TnVtYmVyID49IDMydSkKKyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGludE51bWJlciAtPSAzMnU7CisgICAgfQorCisgICAgU1lTQ09OLT5TVEFSVEVSU0VUW2luZGV4XSA9IDF1IDw8IGludE51bWJlcjsKKyAgICBFbmFibGVJUlEoaW50ZXJydXB0KTsgLyogYWxzbyBlbmFibGUgaW50ZXJydXB0IGF0IE5WSUMgKi8KK30KKwordm9pZCBEaXNhYmxlRGVlcFNsZWVwSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpCit7CisgICAgdWludDMyX3QgaW5kZXggPSAwOworICAgIHVpbnQzMl90IGludE51bWJlciA9ICh1aW50MzJfdClpbnRlcnJ1cHQ7CisgICAgd2hpbGUgKGludE51bWJlciA+PSAzMnUpCisgICAgeworICAgICAgICBpbmRleCsrOworICAgICAgICBpbnROdW1iZXIgLT0gMzJ1OworICAgIH0KKworICAgIERpc2FibGVJUlEoaW50ZXJydXB0KTsgLyogYWxzbyBkaXNhYmxlIGludGVycnVwdCBhdCBOVklDICovCisgICAgU1lTQ09OLT5TVEFSVEVSQ0xSW2luZGV4XSA9IDF1IDw8IGludE51bWJlcjsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TT0NfU1lTQ09OX0NPVU5UICovCisjZWxzZQordm9pZCBFbmFibGVEZWVwU2xlZXBJUlEoSVJRbl9UeXBlIGludGVycnVwdCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IDA7CisgICAgdWludDMyX3QgaW50TnVtYmVyID0gKHVpbnQzMl90KWludGVycnVwdDsKKyAgICB3aGlsZSAoaW50TnVtYmVyID49IDMydSkKKyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGludE51bWJlciAtPSAzMnU7CisgICAgfQorCisgICAgLyogICBTWVNDT04tPlNUQVJURVJTRVRbaW5kZXhdID0gMXUgPDwgaW50TnVtYmVyOyAqLworICAgIEVuYWJsZUlSUShpbnRlcnJ1cHQpOyAvKiBhbHNvIGVuYWJsZSBpbnRlcnJ1cHQgYXQgTlZJQyAqLworfQorCit2b2lkIERpc2FibGVEZWVwU2xlZXBJUlEoSVJRbl9UeXBlIGludGVycnVwdCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IDA7CisgICAgdWludDMyX3QgaW50TnVtYmVyID0gKHVpbnQzMl90KWludGVycnVwdDsKKyAgICB3aGlsZSAoaW50TnVtYmVyID49IDMydSkKKyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGludE51bWJlciAtPSAzMnU7CisgICAgfQorCisgICAgRGlzYWJsZUlSUShpbnRlcnJ1cHQpOyAvKiBhbHNvIGRpc2FibGUgaW50ZXJydXB0IGF0IE5WSUMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgU1lTQ09OLT5TVEFSVEVSQ0xSW2luZGV4XSA9IDF1IDw8IGludE51bWJlcjsgKi8KK30KKyNlbmRpZiAvKkNQVV9RTjkwOFggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvbW1vbi5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwYzA5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2NvbW1vbi5oCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfQ09NTU9OX0hfCisjZGVmaW5lIF9GU0xfQ09NTU9OX0hfCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKF9fSUNDQVJNX18pCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImZzbF9kZXZpY2VfcmVnaXN0ZXJzLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAga3Nka19jb21tb24KKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIENvbnN0cnVjdCBhIHN0YXR1cyBjb2RlIHZhbHVlIGZyb20gYSBncm91cCBhbmQgY29kZSBudW1iZXIuICovCisjZGVmaW5lIE1BS0VfU1RBVFVTKGdyb3VwLCBjb2RlKSAoKCgoZ3JvdXApKjEwMCkgKyAoY29kZSkpKQorCisvKiEgQGJyaWVmIENvbnN0cnVjdCB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIGRyaXZlcnMuICovCisjZGVmaW5lIE1BS0VfVkVSU0lPTihtYWpvciwgbWlub3IsIGJ1Z2ZpeCkgKCgobWFqb3IpIDw8IDE2KSB8ICgobWlub3IpIDw8IDgpIHwgKGJ1Z2ZpeCkpCisKKy8qIERlYnVnIGNvbnNvbGUgdHlwZSBkZWZpbml0aW9uLiAqLworI2RlZmluZSBERUJVR19DT05TT0xFX0RFVklDRV9UWVBFX05PTkUgMFUgICAgIC8qITwgTm8gZGVidWcgY29uc29sZS4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVCVUdfQ09OU09MRV9ERVZJQ0VfVFlQRV9VQVJUIDFVICAgICAvKiE8IERlYnVnIGNvbnNvbGUgYmFzZSBvbiBVQVJULiAgICovCisjZGVmaW5lIERFQlVHX0NPTlNPTEVfREVWSUNFX1RZUEVfTFBVQVJUIDJVICAgLyohPCBEZWJ1ZyBjb25zb2xlIGJhc2Ugb24gTFBVQVJULiAqLworI2RlZmluZSBERUJVR19DT05TT0xFX0RFVklDRV9UWVBFX0xQU0NJIDNVICAgIC8qITwgRGVidWcgY29uc29sZSBiYXNlIG9uIExQU0NJLiAgKi8KKyNkZWZpbmUgREVCVUdfQ09OU09MRV9ERVZJQ0VfVFlQRV9VU0JDREMgNFUgICAvKiE8IERlYnVnIGNvbnNvbGUgYmFzZSBvbiBVU0JDREMuICovCisjZGVmaW5lIERFQlVHX0NPTlNPTEVfREVWSUNFX1RZUEVfRkxFWENPTU0gNVUgLyohPCBEZWJ1ZyBjb25zb2xlIGJhc2Ugb24gVVNCQ0RDLiAqLworI2RlZmluZSBERUJVR19DT05TT0xFX0RFVklDRV9UWVBFX0lVQVJUIDZVICAgIC8qITwgRGVidWcgY29uc29sZSBiYXNlIG9uIGkuTVggVUFSVC4gKi8KKworLyohIEBicmllZiBTdGF0dXMgZ3JvdXAgbnVtYmVycy4gKi8KK2VudW0gX3N0YXR1c19ncm91cHMKK3sKKyAgICBrU3RhdHVzR3JvdXBfR2VuZXJpYyA9IDAsICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgZ2VuZXJpYyBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0ZMQVNIID0gMSwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMQVNIIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfTFBTUEkgPSA0LCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgTFBTUEkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYSU9fU1BJID0gNSwgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYSU8gU1BJIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRFNQSSA9IDYsICAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRFNQSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0ZMRVhJT19VQVJUID0gNywgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMRVhJTyBVQVJUIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRkxFWElPX0kyQyA9IDgsICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRkxFWElPIEkyQyBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0xQSTJDID0gOSwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIExQSTJDIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfVUFSVCA9IDEwLCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgVUFSVCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0kyQyA9IDExLCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFVBUlQgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9MUFNDSSA9IDEyLCAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBMUFNDSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0xQVUFSVCA9IDEzLCAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIExQVUFSVCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX1NQSSA9IDE0LCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFNQSSBzdGF0dXMgY29kZS4qLworICAgIGtTdGF0dXNHcm91cF9YUkRDID0gMTUsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBYUkRDIHN0YXR1cyBjb2RlLiovCisgICAga1N0YXR1c0dyb3VwX1NFTUE0MiA9IDE2LCAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFNFTUE0MiBzdGF0dXMgY29kZS4qLworICAgIGtTdGF0dXNHcm91cF9TREhDID0gMTcsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTREhDIHN0YXR1cyBjb2RlICovCisgICAga1N0YXR1c0dyb3VwX1NETU1DID0gMTgsICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFNETU1DIHN0YXR1cyBjb2RlICovCisgICAga1N0YXR1c0dyb3VwX1NBSSA9IDE5LCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFNBSSBzdGF0dXMgY29kZSAqLworICAgIGtTdGF0dXNHcm91cF9NQ0cgPSAyMCwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBNQ0cgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9TQ0cgPSAyMSwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTQ0cgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9TRFNQSSA9IDIyLCAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTRFNQSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0ZMRVhJT19JMlMgPSAyMywgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMRVhJTyBJMlMgc3RhdHVzIGNvZGVzICovCisgICAga1N0YXR1c0dyb3VwX0ZMRVhJT19NQ1VMQ0QgPSAyNCwgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMRVhJTyBMQ0Qgc3RhdHVzIGNvZGVzICovCisgICAga1N0YXR1c0dyb3VwX0ZMQVNISUFQID0gMjUsICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMQVNISUFQIHN0YXR1cyBjb2RlcyAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYQ09NTV9JMkMgPSAyNiwgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYQ09NTSBJMkMgc3RhdHVzIGNvZGVzICovCisgICAga1N0YXR1c0dyb3VwX0kyUyA9IDI3LCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEkyUyBzdGF0dXMgY29kZXMgKi8KKyAgICBrU3RhdHVzR3JvdXBfSVVBUlQgPSAyOCwgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgSVVBUlQgc3RhdHVzIGNvZGVzICovCisgICAga1N0YXR1c0dyb3VwX1NEUkFNQyA9IDM1LCAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFNEUkFNQyBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX1BPV0VSID0gMzksICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFBPV0VSIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRU5FVCA9IDQwLCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRU5FVCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX1BIWSA9IDQxLCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFBIWSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX1RSR01VWCA9IDQyLCAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFRSR01VWCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX1NNQVJUQ0FSRCA9IDQzLCAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIFNNQVJUQ0FSRCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0xNRU0gPSA0NCwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIExNRU0gc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9RU1BJID0gNDUsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBRU1BJIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRE1BID0gNTAsICAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRE1BIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRURNQSA9IDUxLCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRURNQSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0RNQU1HUiA9IDUyLCAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIERNQU1HUiBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0ZMRVhDQU4gPSA1MywgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZsZXhDQU4gc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9MVEMgPSA1NCwgICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBMVEMgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9GTEVYSU9fQ0FNRVJBID0gNTUsICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBGTEVYSU8gQ0FNRVJBIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfTFBDX1NQSSA9IDU2LCAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgTFBDX1NQSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0xQQ19VU0FSVCA9IDU3LCAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIExQQ19VU0FSVCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0RNSUMgPSA1OCwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIERNSUMgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9TRElGID0gNTksICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTRElGIHN0YXR1cyBjb2Rlcy4qLworICAgIGtTdGF0dXNHcm91cF9TUElGSSA9IDYwLCAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBTUElGSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX09UUCA9IDYxLCAgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIE9UUCBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX01DQU4gPSA2MiwgICAgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIE1DQU4gc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9DQUFNID0gNjMsICAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBDQUFNIHN0YXR1cyBjb2Rlcy4gKi8KKyAgICBrU3RhdHVzR3JvdXBfRUNTUEkgPSA2NCwgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRUNTUEkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9VU0RIQyA9IDY1LCAgICAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBVU0RIQyBzdGF0dXMgY29kZXMuKi8KKyAgICBrU3RhdHVzR3JvdXBfRVNBSSA9IDY5LCAgICAgICAgICAgICAgICAgICAvKiE8IEdyb3VwIG51bWJlciBmb3IgRVNBSSBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0ZMRVhTUEkgPSA3MCwgICAgICAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIEZMRVhTUEkgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9OT1RJRklFUiA9IDk4LCAgICAgICAgICAgICAgIC8qITwgR3JvdXAgbnVtYmVyIGZvciBOT1RJRklFUiBzdGF0dXMgY29kZXMuICovCisgICAga1N0YXR1c0dyb3VwX0RlYnVnQ29uc29sZSA9IDk5LCAgICAgICAgICAgLyohPCBHcm91cCBudW1iZXIgZm9yIGRlYnVnIGNvbnNvbGUgc3RhdHVzIGNvZGVzLiAqLworICAgIGtTdGF0dXNHcm91cF9BcHBsaWNhdGlvblJhbmdlU3RhcnQgPSAxMDAsIC8qITwgU3RhcnRpbmcgbnVtYmVyIGZvciBhcHBsaWNhdGlvbiBncm91cHMuICovCit9OworCisvKiEgQGJyaWVmIEdlbmVyaWMgc3RhdHVzIHJldHVybiBjb2Rlcy4gKi8KK2VudW0gX2dlbmVyaWNfc3RhdHVzCit7CisgICAga1N0YXR1c19TdWNjZXNzID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0dlbmVyaWMsIDApLAorICAgIGtTdGF0dXNfRmFpbCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9HZW5lcmljLCAxKSwKKyAgICBrU3RhdHVzX1JlYWRPbmx5ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0dlbmVyaWMsIDIpLAorICAgIGtTdGF0dXNfT3V0T2ZSYW5nZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9HZW5lcmljLCAzKSwKKyAgICBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9HZW5lcmljLCA0KSwKKyAgICBrU3RhdHVzX1RpbWVvdXQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfR2VuZXJpYywgNSksCisgICAga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9HZW5lcmljLCA2KSwKK307CisKKy8qISBAYnJpZWYgVHlwZSB1c2VkIGZvciBhbGwgc3RhdHVzIGFuZCBlcnJvciByZXR1cm4gdmFsdWVzLiAqLwordHlwZWRlZiBpbnQzMl90IHN0YXR1c190OworCisvKgorICogVGhlIGZzbF9jbG9jay5oIGlzIGluY2x1ZGVkIGhlcmUgYmVjYXVzZSBpdCBuZWVkcyBNQUtFX1ZFUlNJT04vTUFLRV9TVEFUVVMvc3RhdHVzX3QKKyAqIGRlZmluZWQgaW4gcHJldmlvdXMgb2YgdGhpcyBmaWxlLgorICovCisjaW5jbHVkZSAiZnNsX2Nsb2NrLmgiCisKKy8qCisgKiBDaGlwIGxldmVsIHBlcmlwaGVyYWwgcmVzZXQgQVBJLCBmb3IgTUNVcyB0aGF0IGltcGxlbWVudCBwZXJpcGhlcmFsIHJlc2V0IGNvbnRyb2wgZXh0ZXJuYWwgdG8gYSBwZXJpcGhlcmFsCisgKi8KKyNpZiAoKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX1NZU0NPTl9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQgPiAwKSkgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfQVNZTkNfU1lTQ09OX0NPVU5UKSAmJiAoRlNMX0ZFQVRVUkVfU09DX0FTWU5DX1NZU0NPTl9DT1VOVCA+IDApKSkKKyNpbmNsdWRlICJmc2xfcmVzZXQuaCIKKyNlbmRpZgorCisvKiEgQG5hbWUgTWluL21heCBtYWNyb3MgKi8KKy8qIEB7ICovCisjaWYgIWRlZmluZWQoTUlOKQorI2RlZmluZSBNSU4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTUFYKQorI2RlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyNlbmRpZgorLyogQH0gKi8KKworLyohIEBicmllZiBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIGFycmF5LiAqLworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKKworLyohIEBuYW1lIFVJTlQxNl9NQVgvVUlOVDMyX01BWCB2YWx1ZSAqLworLyogQHsgKi8KKyNpZiAhZGVmaW5lZChVSU5UMTZfTUFYKQorI2RlZmluZSBVSU5UMTZfTUFYICgodWludDE2X3QpLTEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFVJTlQzMl9NQVgpCisjZGVmaW5lIFVJTlQzMl9NQVggKCh1aW50MzJfdCktMSkKKyNlbmRpZgorLyogQH0gKi8KKworLyohIEBuYW1lIFRpbWVyIHV0aWxpdGllcyAqLworLyogQHsgKi8KKy8qISBNYWNybyB0byBjb252ZXJ0IGEgbWljcm9zZWNvbmQgcGVyaW9kIHRvIHJhdyBjb3VudCB2YWx1ZSAqLworI2RlZmluZSBVU0VDX1RPX0NPVU5UKHVzLCBjbG9ja0ZyZXFJbkh6KSAodWludDY0X3QpKCh1aW50NjRfdCl1cyAqIGNsb2NrRnJlcUluSHogLyAxMDAwMDAwVSkKKy8qISBNYWNybyB0byBjb252ZXJ0IGEgcmF3IGNvdW50IHZhbHVlIHRvIG1pY3Jvc2Vjb25kICovCisjZGVmaW5lIENPVU5UX1RPX1VTRUMoY291bnQsIGNsb2NrRnJlcUluSHopICh1aW50NjRfdCkoKHVpbnQ2NF90KWNvdW50ICogMTAwMDAwMFUgLyBjbG9ja0ZyZXFJbkh6KQorCisvKiEgTWFjcm8gdG8gY29udmVydCBhIG1pbGxpc2Vjb25kIHBlcmlvZCB0byByYXcgY291bnQgdmFsdWUgKi8KKyNkZWZpbmUgTVNFQ19UT19DT1VOVChtcywgY2xvY2tGcmVxSW5IeikgKHVpbnQ2NF90KSgodWludDY0X3QpbXMgKiBjbG9ja0ZyZXFJbkh6IC8gMTAwMFUpCisvKiEgTWFjcm8gdG8gY29udmVydCBhIHJhdyBjb3VudCB2YWx1ZSB0byBtaWxsaXNlY29uZCAqLworI2RlZmluZSBDT1VOVF9UT19NU0VDKGNvdW50LCBjbG9ja0ZyZXFJbkh6KSAodWludDY0X3QpKCh1aW50NjRfdCljb3VudCAqIDEwMDBVIC8gY2xvY2tGcmVxSW5IeikKKy8qIEB9ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgRW5hYmxlIHNwZWNpZmljIGludGVycnVwdC4KKyAqCisgKiBFbmFibGUgdGhlIGludGVycnVwdCBub3Qgcm91dGVkIGZyb20gaW50bXV4LgorICoKKyAqIEBwYXJhbSBpbnRlcnJ1cHQgVGhlIElSUSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBFbmFibGVJUlEoSVJRbl9UeXBlIGludGVycnVwdCkKK3sKKyAgICBpZiAoTm90QXZhaWxfSVJRbiA9PSBpbnRlcnJ1cHQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9TT0NfSU5UTVVYX0NPVU5UKSAmJiAoRlNMX0ZFQVRVUkVfU09DX0lOVE1VWF9DT1VOVCA+IDApCisgICAgaWYgKGludGVycnVwdCA8IEZTTF9GRUFUVVJFX0lOVE1VWF9JUlFfU1RBUlRfSU5ERVgpCisjZW5kaWYKKyAgICB7CisjaWYgZGVmaW5lZChfX0dJQ19QUklPX0JJVFMpCisgICAgICAgIEdJQ19FbmFibGVJUlEoaW50ZXJydXB0KTsKKyNlbHNlCisgICAgICAgIE5WSUNfRW5hYmxlSVJRKGludGVycnVwdCk7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGUgc3BlY2lmaWMgaW50ZXJydXB0LgorICoKKyAqIERpc2FibGUgdGhlIGludGVycnVwdCBub3Qgcm91dGVkIGZyb20gaW50bXV4LgorICoKKyAqIEBwYXJhbSBpbnRlcnJ1cHQgVGhlIElSUSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEaXNhYmxlSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpCit7CisgICAgaWYgKE5vdEF2YWlsX0lSUW4gPT0gaW50ZXJydXB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX0lOVE1VWF9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX1NPQ19JTlRNVVhfQ09VTlQgPiAwKQorICAgIGlmIChpbnRlcnJ1cHQgPCBGU0xfRkVBVFVSRV9JTlRNVVhfSVJRX1NUQVJUX0lOREVYKQorI2VuZGlmCisgICAgeworI2lmIGRlZmluZWQoX19HSUNfUFJJT19CSVRTKQorICAgICAgICBHSUNfRGlzYWJsZUlSUShpbnRlcnJ1cHQpOworI2Vsc2UKKyAgICAgICAgTlZJQ19EaXNhYmxlSVJRKGludGVycnVwdCk7CisjZW5kaWYKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGUgdGhlIGdsb2JhbCBJUlEKKyAqCisgKiBEaXNhYmxlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgcHJpbWFzayByZWdpc3Rlci4gVXNlciBpcyByZXF1aXJlZCB0byBwcm92aWRlZCB0aGUgcHJpbWFzaworICogcmVnaXN0ZXIgZm9yIHRoZSBFbmFibGVHbG9iYWxJUlEoKS4KKyAqCisgKiBAcmV0dXJuIEN1cnJlbnQgcHJpbWFzayB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBEaXNhYmxlR2xvYmFsSVJRKHZvaWQpCit7CisjaWYgZGVmaW5lZChDUFNSX0lfTXNrKQorICAgIHVpbnQzMl90IGNwc3IgPSBfX2dldF9DUFNSKCkgJiBDUFNSX0lfTXNrOworCisgICAgX19kaXNhYmxlX2lycSgpOworCisgICAgcmV0dXJuIGNwc3I7CisjZWxzZQorICAgIHVpbnQzMl90IHJlZ1ByaW1hc2sgPSBfX2dldF9QUklNQVNLKCk7CisKKyAgICBfX2Rpc2FibGVfaXJxKCk7CisKKyAgICByZXR1cm4gcmVnUHJpbWFzazsKKyNlbmRpZgorfQorCisvKiEKKyAqIEBicmllZiBFbmFhYmxlIHRoZSBnbG9iYWwgSVJRCisgKgorICogU2V0IHRoZSBwcmltYXNrIHJlZ2lzdGVyIHdpdGggdGhlIHByb3ZpZGVkIHByaW1hc2sgdmFsdWUgYnV0IG5vdCBqdXN0IGVuYWJsZSB0aGUgcHJpbWFzay4gVGhlIGlkZWEgaXMgZm9yIHRoZQorICogY29udmluaWVuY2Ugb2YgaW50ZWdyYXRpb24gb2YgUlRPUy4gc29tZSBSVE9TIGdldCBpdHMgb3duIG1hbmFnZW1lbnQgbWVjaGFuaXNtIG9mIHByaW1hc2suIFVzZXIgaXMgcmVxdWlyZWQgdG8KKyAqIHVzZSB0aGUgRW5hYmxlR2xvYmFsSVJRKCkgYW5kIERpc2FibGVHbG9iYWxJUlEoKSBpbiBwYWlyLgorICoKKyAqIEBwYXJhbSBwcmltYXNrIHZhbHVlIG9mIHByaW1hc2sgcmVnaXN0ZXIgdG8gYmUgcmVzdG9yZWQuIFRoZSBwcmltYXNrIHZhbHVlIGlzIHN1cHBvc2VkIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZQorICogRGlzYWJsZUdsb2JhbElSUSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRW5hYmxlR2xvYmFsSVJRKHVpbnQzMl90IHByaW1hc2spCit7CisjaWYgZGVmaW5lZChDUFNSX0lfTXNrKQorICAgIF9fc2V0X0NQU1IoKF9fZ2V0X0NQU1IoKSAmIH5DUFNSX0lfTXNrKSB8IHByaW1hc2spOworI2Vsc2UKKyAgICBfX3NldF9QUklNQVNLKHByaW1hc2spOworI2VuZGlmCit9CisKKy8qIQorICogQGJyaWVmIGluc3RhbGwgSVJRIGhhbmRsZXIKKyAqCisgKiBAcGFyYW0gaXJxIElSUSBudW1iZXIKKyAqIEBwYXJhbSBpcnFIYW5kbGVyIElSUSBoYW5kbGVyIGFkZHJlc3MKKyAqIEByZXR1cm4gVGhlIG9sZCBJUlEgaGFuZGxlciBhZGRyZXNzCisgKi8KK3VpbnQzMl90IEluc3RhbGxJUlFIYW5kbGVyKElSUW5fVHlwZSBpcnEsIHVpbnQzMl90IGlycUhhbmRsZXIpOworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX1NZU0NPTl9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQgPiAwKSkKKy8qIQorICogQGJyaWVmIEVuYWJsZSBzcGVjaWZpYyBpbnRlcnJ1cHQgZm9yIHdha2UtdXAgZnJvbSBkZWVwLXNsZWVwIG1vZGUuCisgKgorICogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIHdha2UtdXAgZnJvbSBkZWVwIHNsZWVwIG1vZGUuCisgKiBTb21lIGludGVycnVwdHMgYXJlIHR5cGljYWxseSB1c2VkIGluIHNsZWVwIG1vZGUgb25seSBhbmQgd2lsbCBub3Qgb2NjdXIgZHVyaW5nCisgKiBkZWVwLXNsZWVwIG1vZGUgYmVjYXVzZSByZWxldmFudCBjbG9ja3MgYXJlIHN0b3BwZWQuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGVuYWJsZQorICogdGhvc2UgY2xvY2tzIChzaWduaWZpY2FudGx5IGluY3JlYXNpbmcgcG93ZXIgY29uc3VtcHRpb24gaW4gdGhlIHJlZHVjZWQgcG93ZXIgbW9kZSksCisgKiBtYWtpbmcgdGhlc2Ugd2FrZS11cHMgcG9zc2libGUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBhbHNvIGVuYWJsZXMgdGhlIGludGVycnVwdCBpbiB0aGUgTlZJQyAoRW5hYmxlSVJRKCkgaXMgY2FsbGVkIGludGVybmFsbHkpLgorICoKKyAqIEBwYXJhbSBpbnRlcnJ1cHQgVGhlIElSUSBudW1iZXIuCisgKi8KK3ZvaWQgRW5hYmxlRGVlcFNsZWVwSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlIHNwZWNpZmljIGludGVycnVwdCBmb3Igd2FrZS11cCBmcm9tIGRlZXAtc2xlZXAgbW9kZS4KKyAqCisgKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIHdha2UtdXAgZnJvbSBkZWVwIHNsZWVwIG1vZGUuCisgKiBTb21lIGludGVycnVwdHMgYXJlIHR5cGljYWxseSB1c2VkIGluIHNsZWVwIG1vZGUgb25seSBhbmQgd2lsbCBub3Qgb2NjdXIgZHVyaW5nCisgKiBkZWVwLXNsZWVwIG1vZGUgYmVjYXVzZSByZWxldmFudCBjbG9ja3MgYXJlIHN0b3BwZWQuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGVuYWJsZQorICogdGhvc2UgY2xvY2tzIChzaWduaWZpY2FudGx5IGluY3JlYXNpbmcgcG93ZXIgY29uc3VtcHRpb24gaW4gdGhlIHJlZHVjZWQgcG93ZXIgbW9kZSksCisgKiBtYWtpbmcgdGhlc2Ugd2FrZS11cHMgcG9zc2libGUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBhbHNvIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgKERpc2FibGVJUlEoKSBpcyBjYWxsZWQgaW50ZXJuYWxseSkuCisgKgorICogQHBhcmFtIGludGVycnVwdCBUaGUgSVJRIG51bWJlci4KKyAqLwordm9pZCBEaXNhYmxlRGVlcFNsZWVwSVJRKElSUW5fVHlwZSBpbnRlcnJ1cHQpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NPQ19TWVNDT05fQ09VTlQgKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9ICovCisKKyNlbmRpZiAvKiBfRlNMX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29wLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg0ZGFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29wLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfY29wLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIENPUF9HZXREZWZhdWx0Q29uZmlnKGNvcF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgY29uZmlnLT5lbmFibGVXaW5kb3dNb2RlID0gZmFsc2U7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUpICYmIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERQorICAgIGNvbmZpZy0+dGltZW91dE1vZGUgPSBrQ09QX0xvbmdUaW1lb3V0TW9kZTsKKyAgICBjb25maWctPmVuYWJsZVN0b3AgPSBmYWxzZTsKKyAgICBjb25maWctPmVuYWJsZURlYnVnID0gZmFsc2U7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFICovCisgICAgY29uZmlnLT5jbG9ja1NvdXJjZSA9IGtDT1BfTHBvQ2xvY2s7CisgICAgY29uZmlnLT50aW1lb3V0Q3ljbGVzID0ga0NPUF8yUG93ZXIxMEN5Y2xlc09yMlBvd2VyMThDeWNsZXM7Cit9CisKK3ZvaWQgQ09QX0luaXQoU0lNX1R5cGUgKmJhc2UsIGNvbnN0IGNvcF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgdWludDMyX3QgdmFsdWUgPSAwVTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFKSAmJiBGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUKKyAgICB2YWx1ZSA9IFNJTV9DT1BDX0NPUFcoY29uZmlnLT5lbmFibGVXaW5kb3dNb2RlKSB8IFNJTV9DT1BDX0NPUENMS1MoY29uZmlnLT50aW1lb3V0TW9kZSkgfAorICAgICAgICAgICAgU0lNX0NPUENfQ09QVChjb25maWctPnRpbWVvdXRDeWNsZXMpIHwgU0lNX0NPUENfQ09QU1RQRU4oY29uZmlnLT5lbmFibGVTdG9wKSB8CisgICAgICAgICAgICBTSU1fQ09QQ19DT1BEQkdFTihjb25maWctPmVuYWJsZURlYnVnKSB8IFNJTV9DT1BDX0NPUENMS1NFTChjb25maWctPmNsb2NrU291cmNlKTsKKyNlbHNlCisgICAgdmFsdWUgPSBTSU1fQ09QQ19DT1BXKGNvbmZpZy0+ZW5hYmxlV2luZG93TW9kZSkgfCBTSU1fQ09QQ19DT1BDTEtTKGNvbmZpZy0+Y2xvY2tTb3VyY2UpIHwKKyAgICAgICAgICAgIFNJTV9DT1BDX0NPUFQoY29uZmlnLT50aW1lb3V0Q3ljbGVzKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUgKi8KKyAgICBiYXNlLT5DT1BDID0gdmFsdWU7Cit9CisKK3ZvaWQgQ09QX1JlZnJlc2goU0lNX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgcHJpbWFza1ZhbHVlID0gMFU7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBnbG9iYWwgaW50ZXJydXB0IHRvIHByb3RlY3QgcmVmcmVzaCBzZXF1ZW5jZSAqLworICAgIHByaW1hc2tWYWx1ZSA9IERpc2FibGVHbG9iYWxJUlEoKTsKKyAgICBiYXNlLT5TUlZDT1AgPSBDT1BfRklSU1RfQllURV9PRl9SRUZSRVNIOworICAgIGJhc2UtPlNSVkNPUCA9IENPUF9TRUNPTkRfQllURV9PRl9SRUZSRVNIOworICAgIEVuYWJsZUdsb2JhbElSUShwcmltYXNrVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29wLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9jb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZmYjIxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfY29wLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0NPUF9IXworI2RlZmluZSBfRlNMX0NPUF9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGNvcAorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIENPUCBkcml2ZXIgdmVyc2lvbiAyLjAuMC4gKi8KKyNkZWZpbmUgRlNMX0NPUF9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDApKQorLypAfSovCisKKy8qISBAbmFtZSBDT1AgcmVmcmVzaCBzZXF1ZW5jZS4gKi8KKy8qQHsqLworI2RlZmluZSBDT1BfRklSU1RfQllURV9PRl9SRUZSRVNIICgweDU1VSkgIC8qITwgRmlyc3QgYnl0ZSBvZiByZWZyZXNoIHNlcXVlbmNlICovCisjZGVmaW5lIENPUF9TRUNPTkRfQllURV9PRl9SRUZSRVNIICgweEFBVSkgLyohPCBTZWNvbmQgYnl0ZSBvZiByZWZyZXNoIHNlcXVlbmNlICovCisvKkB9Ki8KKworLyohIEBicmllZiBDT1AgY2xvY2sgc291cmNlIHNlbGVjdGlvbi4gKi8KK3R5cGVkZWYgZW51bSBfY29wX2Nsb2NrX3NvdXJjZQoreworICAgIGtDT1BfTHBvQ2xvY2sgPSAwVSwgLyohPCBDT1AgY2xvY2sgc291cmNlZCBmcm9tIExQTyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfQ09QX0hBU19NT1JFX0NMS1NSQykgJiYgRlNMX0ZFQVRVUkVfQ09QX0hBU19NT1JFX0NMS1NSQworICAgIGtDT1BfTWNnSXJDbG9jayA9IDFVLCAvKiE8IENPUCBjbG9jayBzb3VyY2VkIGZyb20gTUNHSVJDTEsgKi8KKyAgICBrQ09QX09zY0VyQ2xvY2sgPSAyVSwgLyohPCBDT1AgY2xvY2sgc291cmNlZCBmcm9tIE9TQ0VSQ0xLICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0NPUF9IQVNfTU9SRV9DTEtTUkMgKi8KKyAgICBrQ09QX0J1c0Nsb2NrID0gM1UsICAgLyohPCBDT1AgY2xvY2sgc291cmNlZCBmcm9tIEJ1cyBjbG9jayAqLworfSBjb3BfY2xvY2tfc291cmNlX3Q7CisKKy8qISBAYnJpZWYgRGVmaW5lIHRoZSBDT1AgdGltZW91dCBjeWNsZXMuICovCit0eXBlZGVmIGVudW0gX2NvcF90aW1lb3V0X2N5Y2xlcworeworICAgIGtDT1BfMlBvd2VyNUN5Y2xlc09yMlBvd2VyMTNDeWNsZXMgPSAxVSwgIC8qITwgMl41IG9yIDJeMTMgY2xvY2sgY3ljbGVzICovCisgICAga0NPUF8yUG93ZXI4Q3ljbGVzT3IyUG93ZXIxNkN5Y2xlcyA9IDJVLCAgLyohPCAyXjggb3IgMl4xNiBjbG9jayBjeWNsZXMgKi8KKyAgICBrQ09QXzJQb3dlcjEwQ3ljbGVzT3IyUG93ZXIxOEN5Y2xlcyA9IDNVLCAvKiE8IDJeMTAgb3IgMl4xOCBjbG9jayBjeWNsZXMgKi8KK30gY29wX3RpbWVvdXRfY3ljbGVzX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFCisvKiEgQGJyZWlmIERlZmluZSB0aGUgQ09QIHRpbWVvdXQgbW9kZS4gKi8KK3R5cGVkZWYgZW51bSBfY29wX3RpbWVvdXRfbW9kZQoreworICAgIGtDT1BfU2hvcnRUaW1lb3V0TW9kZSA9IDBVLCAvKiE8IENPUCBzZWxlY3RzIGxvbmcgdGltZW91dCAqLworICAgIGtDT1BfTG9uZ1RpbWVvdXRNb2RlID0gMVUsICAvKiE8IENPUCBzZWxlY3RzIHNob3J0IHRpbWVvdXQgKi8KK30gY29wX3RpbWVvdXRfbW9kZV90OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERSAqLworCisvKiEgQGJyaWVmIERlc2NyaWJlcyBDT1AgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuICovCit0eXBlZGVmIHN0cnVjdCBfY29wX2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlV2luZG93TW9kZTsgLyohPCBDT1AgcnVuIG1vZGU6IHdpbmRvdyBtb2RlIG9yIG5vcm1hbCBtb2RlICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9DT1BfSEFTX0xPTkdUSU1FX01PREUpICYmIEZTTF9GRUFUVVJFX0NPUF9IQVNfTE9OR1RJTUVfTU9ERQorICAgIGNvcF90aW1lb3V0X21vZGVfdCB0aW1lb3V0TW9kZTsgICAgIC8qITwgQ09QIHRpbWVvdXQgbW9kZTogbG9uZyB0aW1lb3V0IG9yIHNob3J0IHRpbWVvdXQgKi8KKyAgICBib29sIGVuYWJsZVN0b3A7ICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIENPUCBpbiBTVE9QIG1vZGUgKi8KKyAgICBib29sIGVuYWJsZURlYnVnOyAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIENPUCBpbiBERUJVRyBtb2RlICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfQ09QX0hBU19MT05HVElNRV9NT0RFICovCisgICAgY29wX2Nsb2NrX3NvdXJjZV90IGNsb2NrU291cmNlOyAgICAgLyohPCBTZXQgQ09QIGNsb2NrIHNvdXJjZSAqLworICAgIGNvcF90aW1lb3V0X2N5Y2xlc190IHRpbWVvdXRDeWNsZXM7IC8qITwgU2V0IENPUCB0aW1lb3V0IHZhbHVlICovCit9IGNvcF9jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisvKiEKKyAqIEBuYW1lIENPUCBGdW5jdGlvbmFsIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgQ09QIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIENPUCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBkZWZhdWx0IHZhbHVlcy4gVGhlIGRlZmF1bHQKKyAqIHZhbHVlcyBhcmU6CisgKiBAY29kZQorICogICBjb3BDb25maWctPmVuYWJsZVdpbmRvd01vZGUgPSBmYWxzZTsKKyAqICAgY29wQ29uZmlnLT50aW1lb3V0TW9kZSA9IGtDT1BfTG9uZ1RpbWVvdXRNb2RlOworICogICBjb3BDb25maWctPmVuYWJsZVN0b3AgPSBmYWxzZTsKKyAqICAgY29wQ29uZmlnLT5lbmFibGVEZWJ1ZyA9IGZhbHNlOworICogICBjb3BDb25maWctPmNsb2NrU291cmNlID0ga0NPUF9McG9DbG9jazsKKyAqICAgY29wQ29uZmlnLT50aW1lb3V0Q3ljbGVzID0ga0NPUF8yUG93ZXIxMEN5Y2xlc09yMlBvd2VyMThDeWNsZXM7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgQ09QIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHNlZSBjb3BfY29uZmlnX3QKKyAqLwordm9pZCBDT1BfR2V0RGVmYXVsdENvbmZpZyhjb3BfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBDT1AgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgQ09QLiBBZnRlciBpdCBpcyBjYWxsZWQsIHRoZSBDT1AKKyAqIHN0YXJ0cyBydW5uaW5nIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbi4KKyAqIEJlY2F1c2UgYWxsIENPUCBjb250cm9sIHJlZ2lzdGVycyBhcmUgd3JpdGUtb25jZSBvbmx5LCB0aGUgQ09QX0luaXQgZnVuY3Rpb24KKyAqIGFuZCB0aGUgQ09QX0Rpc2FibGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbmx5IG9uY2UuIEEgc2Vjb25kIGNhbGwgaGFzIG5vIGVmZmVjdC4KKyAqCisgKiBFeGFtcGxlOgorICogQGNvZGUKKyAqICBjb3BfY29uZmlnX3QgY29uZmlnOworICogIENPUF9HZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworICogIGNvbmZpZy50aW1lb3V0Q3ljbGVzID0ga0NPUF8yUG93ZXI4Q3ljbGVzT3IyUG93ZXIxNkN5Y2xlczsKKyAqICBDT1BfSW5pdChzaW1fYmFzZSwmY29uZmlnKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgICBTSU0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIG9mIENPUC4KKyAqLwordm9pZCBDT1BfSW5pdChTSU1fVHlwZSAqYmFzZSwgY29uc3QgY29wX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBEZS1pbml0aWFsaXplcyB0aGUgQ09QIG1vZHVsZS4KKyAqIFRoaXMgZGVkaWNhdGVkIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZC4gSW5zdGVhZCwgdGhlIENPUF9EaXNhYmxlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhlIENPUC4KKyAqLworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgQ09QIG1vZHVsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBDT1AgV2F0Y2hkb2cuCisgKiBOb3RlOiBUaGUgQ09QIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgYSB3cml0ZS1vbmNlIGFmdGVyIHJlc2V0LgorICogVG8gZGlzYWJsZSB0aGUgQ09QIFdhdGNoZG9nLCBjYWxsIHRoaXMgZnVuY3Rpb24gZmlyc3QuCisgKgorICogQHBhcmFtIGJhc2UgIFNJTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIENPUF9EaXNhYmxlKFNJTV9UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkNPUEMgJj0gflNJTV9DT1BDX0NPUFRfTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgUmVmcmVzaGVzIHRoZSBDT1AgdGltZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZlZWRzIHRoZSBDT1AuCisgKgorICogQHBhcmFtIGJhc2UgIFNJTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLwordm9pZCBDT1BfUmVmcmVzaChTSU1fVHlwZSAqYmFzZSk7CisKKy8qQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9DT1BfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RhYy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxM2Q2MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RhYy5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9kYWMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXQgaW5zdGFuY2UgbnVtYmVyIGZvciBEQUMgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCitzdGF0aWMgdWludDMyX3QgREFDX0dldEluc3RhbmNlKERBQ19UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gREFDIGJhc2VzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIERBQ19UeXBlICpjb25zdCBzX2RhY0Jhc2VzW10gPSBEQUNfQkFTRV9QVFJTOworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gREFDIGNsb2NrcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19kYWNDbG9ja3NbXSA9IERBQ19DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBEQUNfR2V0SW5zdGFuY2UoREFDX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfZGFjQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfZGFjQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2RhY0Jhc2VzKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgREFDX0luaXQoREFDX1R5cGUgKmJhc2UsIGNvbnN0IGRhY19jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChOVUxMICE9IGNvbmZpZyk7CisKKyAgICB1aW50OF90IHRtcDg7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogRW5hYmxlIHRoZSBjbG9jay4gKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2RhY0Nsb2Nrc1tEQUNfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIENvbmZpZ3VyZS4gKi8KKyAgICAvKiBEQUN4X0MwLiAqLworICAgIHRtcDggPSBiYXNlLT5DMCAmIH4oREFDX0MwX0RBQ1JGU19NQVNLIHwgREFDX0MwX0xQRU5fTUFTSyk7CisgICAgaWYgKGtEQUNfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWYyID09IGNvbmZpZy0+cmVmZXJlbmNlVm9sdGFnZVNvdXJjZSkKKyAgICB7CisgICAgICAgIHRtcDggfD0gREFDX0MwX0RBQ1JGU19NQVNLOworICAgIH0KKyAgICBpZiAoY29uZmlnLT5lbmFibGVMb3dQb3dlck1vZGUpCisgICAgeworICAgICAgICB0bXA4IHw9IERBQ19DMF9MUEVOX01BU0s7CisgICAgfQorICAgIGJhc2UtPkMwID0gdG1wODsKKworICAgIC8qIERBQ19FbmFibGUoYmFzZSwgdHJ1ZSk7ICovCisgICAgLyogVGlwOiBUaGUgREFDIG91dHB1dCBjYW4gYmUgZW5hYmxlZCB0aWxsIHRoZW4gYWZ0ZXIgdXNlciBzZXRzIHRoZWlyIG93biBhdmFpbGFibGUgZGF0YSBpbiBhcHBsaWNhdGlvbi4gKi8KK30KKwordm9pZCBEQUNfRGVpbml0KERBQ19UeXBlICpiYXNlKQoreworICAgIERBQ19FbmFibGUoYmFzZSwgZmFsc2UpOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIERpc2FibGUgdGhlIGNsb2NrLiAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2RhY0Nsb2Nrc1tEQUNfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBEQUNfR2V0RGVmYXVsdENvbmZpZyhkYWNfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoTlVMTCAhPSBjb25maWcpOworCisgICAgY29uZmlnLT5yZWZlcmVuY2VWb2x0YWdlU291cmNlID0ga0RBQ19SZWZlcmVuY2VWb2x0YWdlU291cmNlVnJlZjI7CisgICAgY29uZmlnLT5lbmFibGVMb3dQb3dlck1vZGUgPSBmYWxzZTsKK30KKwordm9pZCBEQUNfU2V0QnVmZmVyQ29uZmlnKERBQ19UeXBlICpiYXNlLCBjb25zdCBkYWNfYnVmZmVyX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIHVpbnQ4X3QgdG1wODsKKworICAgIC8qIERBQ3hfQzAuICovCisgICAgdG1wOCA9IGJhc2UtPkMwICYgfihEQUNfQzBfREFDVFJHU0VMX01BU0spOworICAgIGlmIChrREFDX0J1ZmZlclRyaWdnZXJCeVNvZnR3YXJlTW9kZSA9PSBjb25maWctPnRyaWdnZXJNb2RlKQorICAgIHsKKyAgICAgICAgdG1wOCB8PSBEQUNfQzBfREFDVFJHU0VMX01BU0s7CisgICAgfQorICAgIGJhc2UtPkMwID0gdG1wODsKKworICAgIC8qIERBQ3hfQzEuICovCisgICAgdG1wOCA9IGJhc2UtPkMxICYKKyAgICAgICAgICAgfigKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OCisgICAgICAgICAgICAgICBEQUNfQzFfREFDQkZXTV9NQVNLIHwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04gKi8KKyAgICAgICAgICAgICAgIERBQ19DMV9EQUNCRk1EX01BU0spOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04KKyAgICB0bXA4IHw9IERBQ19DMV9EQUNCRldNKGNvbmZpZy0+d2F0ZXJtYXJrKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04gKi8KKyAgICB0bXA4IHw9IERBQ19DMV9EQUNCRk1EKGNvbmZpZy0+d29ya01vZGUpOworICAgIGJhc2UtPkMxID0gdG1wODsKKworICAgIC8qIERBQ3hfQzIuICovCisgICAgdG1wOCA9IGJhc2UtPkMyICYgfkRBQ19DMl9EQUNCRlVQX01BU0s7CisgICAgdG1wOCB8PSBEQUNfQzJfREFDQkZVUChjb25maWctPnVwcGVyTGltaXQpOworICAgIGJhc2UtPkMyID0gdG1wODsKK30KKwordm9pZCBEQUNfR2V0RGVmYXVsdEJ1ZmZlckNvbmZpZyhkYWNfYnVmZmVyX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KE5VTEwgIT0gY29uZmlnKTsKKworICAgIGNvbmZpZy0+dHJpZ2dlck1vZGUgPSBrREFDX0J1ZmZlclRyaWdnZXJCeVNvZnR3YXJlTW9kZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OCisgICAgY29uZmlnLT53YXRlcm1hcmsgPSBrREFDX0J1ZmZlcldhdGVybWFyazFXb3JkOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTiAqLworICAgIGNvbmZpZy0+d29ya01vZGUgPSBrREFDX0J1ZmZlcldvcmtBc05vcm1hbE1vZGU7CisgICAgY29uZmlnLT51cHBlckxpbWl0ID0gREFDX0RBVExfQ09VTlQgLSAxVTsKK30KKwordm9pZCBEQUNfU2V0QnVmZmVyVmFsdWUoREFDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgaW5kZXgsIHVpbnQxNl90IHZhbHVlKQoreworICAgIGFzc2VydChpbmRleCA8IERBQ19EQVRMX0NPVU5UKTsKKworICAgIGJhc2UtPkRBVFtpbmRleF0uREFUTCA9ICh1aW50OF90KSgweEZGVSAmIHZhbHVlKTsgICAgICAgICAvKiBMb3cgOC1iaXQuICovCisgICAgYmFzZS0+REFUW2luZGV4XS5EQVRIID0gKHVpbnQ4X3QpKCgweEYwMFUgJiB2YWx1ZSkgPj4gOCk7IC8qIEhpZ2ggNC1iaXQuICovCit9CisKK3ZvaWQgREFDX1NldEJ1ZmZlclJlYWRQb2ludGVyKERBQ19UeXBlICpiYXNlLCB1aW50OF90IGluZGV4KQoreworICAgIGFzc2VydChpbmRleCA8IERBQ19EQVRMX0NPVU5UKTsKKworICAgIHVpbnQ4X3QgdG1wOCA9IGJhc2UtPkMyICYgfkRBQ19DMl9EQUNCRlJQX01BU0s7CisKKyAgICB0bXA4IHw9IERBQ19DMl9EQUNCRlJQKGluZGV4KTsKKyAgICBiYXNlLT5DMiA9IHRtcDg7Cit9CisKK3ZvaWQgREFDX0VuYWJsZUJ1ZmZlckludGVycnVwdHMoREFDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgbWFzayAmPSAoCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04pICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTgorICAgICAgICBEQUNfQzBfREFDQldJRU5fTUFTSyB8CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OICovCisgICAgICAgIERBQ19DMF9EQUNCVElFTl9NQVNLIHwgREFDX0MwX0RBQ0JCSUVOX01BU0spOworICAgIGJhc2UtPkMwIHw9ICgodWludDhfdCltYXNrKTsgLyogV3JpdGUgMSB0byBlbmFibGUuICovCit9CisKK3ZvaWQgREFDX0Rpc2FibGVCdWZmZXJJbnRlcnJ1cHRzKERBQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIG1hc2sgJj0gKAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04KKyAgICAgICAgREFDX0MwX0RBQ0JXSUVOX01BU0sgfAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTiAqLworICAgICAgICBEQUNfQzBfREFDQlRJRU5fTUFTSyB8IERBQ19DMF9EQUNCQklFTl9NQVNLKTsKKyAgICBiYXNlLT5DMCAmPSAodWludDhfdCkofigodWludDhfdCltYXNrKSk7IC8qIFdyaXRlIDAgdG8gZGlzYWJsZS4gKi8KK30KKwordWludDMyX3QgREFDX0dldEJ1ZmZlclN0YXR1c0ZsYWdzKERBQ19UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDMyX3QpKGJhc2UtPlNSICYgKAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfU1JfREFDQkZXTUZfTUFTSyB8CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX1NSX0RBQ0JGUlBURl9NQVNLIHwgREFDX1NSX0RBQ0JGUlBCRl9NQVNLKSk7Cit9CisKK3ZvaWQgREFDX0NsZWFyQnVmZmVyU3RhdHVzRmxhZ3MoREFDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgbWFzayAmPSAoCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04pICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTgorICAgICAgICBEQUNfU1JfREFDQkZXTUZfTUFTSyB8CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OICovCisgICAgICAgIERBQ19TUl9EQUNCRlJQVEZfTUFTSyB8IERBQ19TUl9EQUNCRlJQQkZfTUFTSyk7CisgICAgYmFzZS0+U1IgJj0gKHVpbnQ4X3QpKH4oKHVpbnQ4X3QpbWFzaykpOyAvKiBXcml0ZSAwIHRvIGNsZWFyIGZsYWdzLiAqLworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZGFjLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFmZWJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZGFjLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfREFDX0hfCisjZGVmaW5lIF9GU0xfREFDX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgZGFjCisgKiBAeworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBEQUMgZHJpdmVyIHZlcnNpb24gMi4wLjEuICovCisjZGVmaW5lIEZTTF9EQUNfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAxKSkKKy8qQH0qLworCisvKiEKKyAqIEBicmllZiBEQUMgYnVmZmVyIGZsYWdzLgorICovCitlbnVtIF9kYWNfYnVmZmVyX3N0YXR1c19mbGFncworeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04KKyAgICBrREFDX0J1ZmZlcldhdGVybWFya0ZsYWcgPSBEQUNfU1JfREFDQkZXTUZfTUFTSywgICAgICAgICAgICAgICAgICAvKiE8IERBQyBCdWZmZXIgV2F0ZXJtYXJrIEZsYWcuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OICovCisgICAga0RBQ19CdWZmZXJSZWFkUG9pbnRlclRvcFBvc2l0aW9uRmxhZyA9IERBQ19TUl9EQUNCRlJQVEZfTUFTSywgICAgLyohPCBEQUMgQnVmZmVyIFJlYWQgUG9pbnRlciBUb3AgUG9zaXRpb24gRmxhZy4gKi8KKyAgICBrREFDX0J1ZmZlclJlYWRQb2ludGVyQm90dG9tUG9zaXRpb25GbGFnID0gREFDX1NSX0RBQ0JGUlBCRl9NQVNLLCAvKiE8IERBQyBCdWZmZXIgUmVhZCBQb2ludGVyIEJvdHRvbSBQb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZy4gKi8KK307CisKKy8qIQorICogQGJyaWVmIERBQyBidWZmZXIgaW50ZXJydXB0cy4KKyAqLworZW51bSBfZGFjX2J1ZmZlcl9pbnRlcnJ1cHRfZW5hYmxlCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19ERVRFQ1RJT04pICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX0RFVEVDVElPTgorICAgIGtEQUNfQnVmZmVyV2F0ZXJtYXJrSW50ZXJydXB0RW5hYmxlID0gREFDX0MwX0RBQ0JXSUVOX01BU0ssICAgICAgICAgLyohPCBEQUMgQnVmZmVyIFdhdGVybWFyayBJbnRlcnJ1cHQgRW5hYmxlLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfREVURUNUSU9OICovCisgICAga0RBQ19CdWZmZXJSZWFkUG9pbnRlclRvcEludGVycnVwdEVuYWJsZSA9IERBQ19DMF9EQUNCVElFTl9NQVNLLCAgICAvKiE8IERBQyBCdWZmZXIgUmVhZCBQb2ludGVyIFRvcCBGbGFnIEludGVycnVwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUuICovCisgICAga0RBQ19CdWZmZXJSZWFkUG9pbnRlckJvdHRvbUludGVycnVwdEVuYWJsZSA9IERBQ19DMF9EQUNCQklFTl9NQVNLLCAvKiE8IERBQyBCdWZmZXIgUmVhZCBQb2ludGVyIEJvdHRvbSBGbGFnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBFbmFibGUgKi8KK307CisKKy8qIQorICogQGJyaWVmIERBQyByZWZlcmVuY2Ugdm9sdGFnZSBzb3VyY2UuCisgKi8KK3R5cGVkZWYgZW51bSBfZGFjX3JlZmVyZW5jZV92b2x0YWdlX3NvdXJjZQoreworICAgIGtEQUNfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWYxID0gMFUsIC8qITwgVGhlIERBQyBzZWxlY3RzIERBQ1JFRl8xIGFzIHRoZSByZWZlcmVuY2Ugdm9sdGFnZS4gKi8KKyAgICBrREFDX1JlZmVyZW5jZVZvbHRhZ2VTb3VyY2VWcmVmMiA9IDFVLCAvKiE8IFRoZSBEQUMgc2VsZWN0cyBEQUNSRUZfMiBhcyB0aGUgcmVmZXJlbmNlIHZvbHRhZ2UuICovCit9IGRhY19yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2VfdDsKKworLyohCisgKiBAYnJpZWYgREFDIGJ1ZmZlciB0cmlnZ2VyIG1vZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfZGFjX2J1ZmZlcl90cmlnZ2VyX21vZGUKK3sKKyAgICBrREFDX0J1ZmZlclRyaWdnZXJCeUhhcmR3YXJlTW9kZSA9IDBVLCAvKiE8IFRoZSBEQUMgaGFyZHdhcmUgdHJpZ2dlciBpcyBzZWxlY3RlZC4gKi8KKyAgICBrREFDX0J1ZmZlclRyaWdnZXJCeVNvZnR3YXJlTW9kZSA9IDFVLCAvKiE8IFRoZSBEQUMgc29mdHdhcmUgdHJpZ2dlciBpcyBzZWxlY3RlZC4gKi8KK30gZGFjX2J1ZmZlcl90cmlnZ2VyX21vZGVfdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04KKy8qIQorICogQGJyaWVmIERBQyBidWZmZXIgd2F0ZXJtYXJrLgorICovCit0eXBlZGVmIGVudW0gX2RhY19idWZmZXJfd2F0ZXJtYXJrCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18xX1dPUkQpICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzFfV09SRAorICAgIGtEQUNfQnVmZmVyV2F0ZXJtYXJrMVdvcmQgPSAwVSwgLyohPCAxIHdvcmQgIGF3YXkgZnJvbSB0aGUgdXBwZXIgbGltaXQuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18xX1dPUkQgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzJfV09SRFMpICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzJfV09SRFMKKyAgICBrREFDX0J1ZmZlcldhdGVybWFyazJXb3JkID0gMVUsIC8qITwgMiB3b3JkcyBhd2F5IGZyb20gdGhlIHVwcGVyIGxpbWl0LiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfMl9XT1JEUyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfM19XT1JEUykgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfM19XT1JEUworICAgIGtEQUNfQnVmZmVyV2F0ZXJtYXJrM1dvcmQgPSAyVSwgLyohPCAzIHdvcmRzIGF3YXkgZnJvbSB0aGUgdXBwZXIgbGltaXQuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS18zX1dPUkRTICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS180X1dPUkRTKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS180X1dPUkRTCisgICAga0RBQ19CdWZmZXJXYXRlcm1hcms0V29yZCA9IDNVLCAvKiE8IDQgd29yZHMgYXdheSBmcm9tIHRoZSB1cHBlciBsaW1pdC4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLXzRfV09SRFMgKi8KK30gZGFjX2J1ZmZlcl93YXRlcm1hcmtfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX1dBVEVSTUFSS19TRUxFQ1RJT04gKi8KKworLyohCisgKiBAYnJpZWYgREFDIGJ1ZmZlciB3b3JrIG1vZGUuCisgKi8KK3R5cGVkZWYgZW51bSBfZGFjX2J1ZmZlcl93b3JrX21vZGUKK3sKKyAgICBrREFDX0J1ZmZlcldvcmtBc05vcm1hbE1vZGUgPSAwVSwgLyohPCBOb3JtYWwgbW9kZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfQlVGRkVSX1NXSU5HX01PREUpICYmIEZTTF9GRUFUVVJFX0RBQ19IQVNfQlVGRkVSX1NXSU5HX01PREUKKyAgICBrREFDX0J1ZmZlcldvcmtBc1N3aW5nTW9kZSwgICAgICAgLyohPCBTd2luZyBtb2RlLiAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX0JVRkZFUl9TV0lOR19NT0RFICovCisgICAga0RBQ19CdWZmZXJXb3JrQXNPbmVUaW1lU2Nhbk1vZGUsIC8qITwgT25lLVRpbWUgU2NhbiBtb2RlLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfREFDX0hBU19CVUZGRVJfRklGT19NT0RFKSAmJiBGU0xfRkVBVFVSRV9EQUNfSEFTX0JVRkZFUl9GSUZPX01PREUKKyAgICBrREFDX0J1ZmZlcldvcmtBc0ZJRk9Nb2RlLCAvKiE8IEZJRk8gbW9kZS4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9EQUNfSEFTX0JVRkZFUl9GSUZPX01PREUgKi8KK30gZGFjX2J1ZmZlcl93b3JrX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgREFDIG1vZHVsZSBjb25maWd1cmF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfZGFjX2NvbmZpZworeworICAgIGRhY19yZWZlcmVuY2Vfdm9sdGFnZV9zb3VyY2VfdCByZWZlcmVuY2VWb2x0YWdlU291cmNlOyAvKiE8IFNlbGVjdCB0aGUgREFDIHJlZmVyZW5jZSB2b2x0YWdlIHNvdXJjZS4gKi8KKyAgICBib29sIGVuYWJsZUxvd1Bvd2VyTW9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgdGhlIGxvdy1wb3dlciBtb2RlLiAqLworfSBkYWNfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIERBQyBidWZmZXIgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RhY19idWZmZXJfY29uZmlnCit7CisgICAgZGFjX2J1ZmZlcl90cmlnZ2VyX21vZGVfdCB0cmlnZ2VyTW9kZTsgLyohPCBTZWxlY3QgdGhlIGJ1ZmZlcidzIHRyaWdnZXIgbW9kZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTikgJiYgRlNMX0ZFQVRVUkVfREFDX0hBU19XQVRFUk1BUktfU0VMRUNUSU9OCisgICAgZGFjX2J1ZmZlcl93YXRlcm1hcmtfdCB3YXRlcm1hcms7IC8qITwgU2VsZWN0IHRoZSBidWZmZXIncyB3YXRlcm1hcmsuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0RBQ19IQVNfV0FURVJNQVJLX1NFTEVDVElPTiAqLworICAgIGRhY19idWZmZXJfd29ya19tb2RlX3Qgd29ya01vZGU7ICAvKiE8IFNlbGVjdCB0aGUgYnVmZmVyJ3Mgd29yayBtb2RlLiAqLworICAgIHVpbnQ4X3QgdXBwZXJMaW1pdDsgICAgICAgICAgICAgICAvKiE8IFNldCB0aGUgdXBwZXIgbGltaXQgZm9yIHRoZSBidWZmZXIgaW5kZXguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsbHksIDAtMTUgaXMgYXZhaWxhYmxlIGZvciBhIGJ1ZmZlciB3aXRoIDE2IGl0ZW1zLiAqLworfSBkYWNfYnVmZmVyX2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIEluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEQUMgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERBQyBtb2R1bGUgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucy4KKyAqICAtIEVuYWJsaW5nIHRoZSBjbG9jayBmb3IgREFDIG1vZHVsZS4KKyAqICAtIENvbmZpZ3VyaW5nIHRoZSBEQUMgY29udmVydGVyIHdpdGggYSB1c2VyIGNvbmZpZ3VyYXRpb24uCisgKiAgLSBFbmFibGluZyB0aGUgREFDIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBTZWUgImRhY19jb25maWdfdCIuCisgKi8KK3ZvaWQgREFDX0luaXQoREFDX1R5cGUgKmJhc2UsIGNvbnN0IGRhY19jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGUtaW5pdGlhbGl6ZXMgdGhlIERBQyBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZS1pbml0aWFsaXplcyB0aGUgREFDIG1vZHVsZSBpbmNsdWRpbmcgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zLgorICogIC0gRGlzYWJsaW5nIHRoZSBEQUMgbW9kdWxlLgorICogIC0gRGlzYWJsaW5nIHRoZSBjbG9jayBmb3IgdGhlIERBQyBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIERBQ19EZWluaXQoREFDX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgREFDIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdmFsdWUuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXMgZm9sbG93cy4KKyAqIEBjb2RlCisgKiAgIGNvbmZpZy0+cmVmZXJlbmNlVm9sdGFnZVNvdXJjZSA9IGtEQUNfUmVmZXJlbmNlVm9sdGFnZVNvdXJjZVZyZWYyOworICogICBjb25maWctPmVuYWJsZUxvd1Bvd2VyTW9kZSA9IGZhbHNlOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFNlZSAiZGFjX2NvbmZpZ190Ii4KKyAqLwordm9pZCBEQUNfR2V0RGVmYXVsdENvbmZpZyhkYWNfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIERBQyBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgREFDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmZWF0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgREFDX0VuYWJsZShEQUNfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkMwIHw9IERBQ19DMF9EQUNFTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DMCAmPSB+REFDX0MwX0RBQ0VOX01BU0s7CisgICAgfQorfQorCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIEJ1ZmZlcgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBEQUMgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERBQ19FbmFibGVCdWZmZXIoREFDX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DMSB8PSBEQUNfQzFfREFDQkZFTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DMSAmPSB+REFDX0MxX0RBQ0JGRU5fTUFTSzsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIENNUCBidWZmZXIuCisgKgorICogQHBhcmFtIGJhc2UgICBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiBTZWUgImRhY19idWZmZXJfY29uZmlnX3QiLgorICovCit2b2lkIERBQ19TZXRCdWZmZXJDb25maWcoREFDX1R5cGUgKmJhc2UsIGNvbnN0IGRhY19idWZmZXJfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEQUMgYnVmZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERBQyBidWZmZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCB2YWx1ZXMuIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXMgZm9sbG93cy4KKyAqIEBjb2RlCisgKiAgIGNvbmZpZy0+dHJpZ2dlck1vZGUgPSBrREFDX0J1ZmZlclRyaWdnZXJCeVNvZnR3YXJlTW9kZTsKKyAqICAgY29uZmlnLT53YXRlcm1hcmsgICA9IGtEQUNfQnVmZmVyV2F0ZXJtYXJrMVdvcmQ7CisgKiAgIGNvbmZpZy0+d29ya01vZGUgICAgPSBrREFDX0J1ZmZlcldvcmtBc05vcm1hbE1vZGU7CisgKiAgIGNvbmZpZy0+dXBwZXJMaW1pdCAgPSBEQUNfREFUTF9DT1VOVCAtIDFVOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIFNlZSAiZGFjX2J1ZmZlcl9jb25maWdfdCIuCisgKi8KK3ZvaWQgREFDX0dldERlZmF1bHRCdWZmZXJDb25maWcoZGFjX2J1ZmZlcl9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRE1BIGZvciBEQUMgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZmVhdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERBQ19FbmFibGVCdWZmZXJETUEoREFDX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DMSB8PSBEQUNfQzFfRE1BRU5fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgJj0gfkRBQ19DMV9ETUFFTl9NQVNLOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgdmFsdWUgZm9yICBpdGVtcyBpbiB0aGUgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlICBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaW5kZXggU2V0dGluZyB0aGUgaW5kZXggZm9yIGl0ZW1zIGluIHRoZSBidWZmZXIuIFRoZSBhdmFpbGFibGUgaW5kZXggc2hvdWxkIG5vdCBleGNlZWQgdGhlIHNpemUgb2YgdGhlIERBQyBidWZmZXIuCisgKiBAcGFyYW0gdmFsdWUgU2V0dGluZyB0aGUgdmFsdWUgZm9yIGl0ZW1zIGluIHRoZSBidWZmZXIuIDEyLWJpdHMgYXJlIGF2YWlsYWJsZS4KKyAqLwordm9pZCBEQUNfU2V0QnVmZmVyVmFsdWUoREFDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgaW5kZXgsIHVpbnQxNl90IHZhbHVlKTsKKworLyohCisgKiBAYnJpZWYgVHJpZ2dlcnMgdGhlIGJ1ZmZlciB1c2luZyBzb2Z0d2FyZSBhbmQgdXBkYXRlcyB0aGUgcmVhZCBwb2ludGVyIG9mIHRoZSBEQUMgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgdGhlIGZ1bmN0aW9uIHVzaW5nIHNvZnR3YXJlLiBUaGUgcmVhZCBwb2ludGVyIG9mIHRoZSBEQUMgYnVmZmVyIGlzIHVwZGF0ZWQgd2l0aCBvbmUgc3RlcAorICogYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIENoYW5naW5nIHRoZSByZWFkIHBvaW50ZXIgZGVwZW5kcyBvbiB0aGUgYnVmZmVyJ3Mgd29yayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERBQ19Eb1NvZnR3YXJlVHJpZ2dlckJ1ZmZlcihEQUNfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5DMCB8PSBEQUNfQzBfREFDU1dUUkdfTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgY3VycmVudCByZWFkIHBvaW50ZXIgb2YgdGhlIERBQyBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IHJlYWQgcG9pbnRlciBvZiB0aGUgREFDIGJ1ZmZlci4KKyAqIFRoZSBjdXJyZW50IG91dHB1dCB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBpdGVtIGluZGV4ZWQgYnkgdGhlIHJlYWQgcG9pbnRlci4gSXQgaXMgdXBkYXRlZCBlaXRoZXIKKyAqIGJ5IGEgc29mdHdhcmUgdHJpZ2dlciBvciBhIGhhcmR3YXJlIHRyaWdnZXIuCisgKgorICogQHBhcmFtICBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqCisgKiBAcmV0dXJuICAgICAgVGhlIGN1cnJlbnQgcmVhZCBwb2ludGVyIG9mIHRoZSBEQUMgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgREFDX0dldEJ1ZmZlclJlYWRQb2ludGVyKERBQ19UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoKGJhc2UtPkMyICYgREFDX0MyX0RBQ0JGUlBfTUFTSykgPj4gREFDX0MyX0RBQ0JGUlBfU0hJRlQpOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBjdXJyZW50IHJlYWQgcG9pbnRlciBvZiB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGN1cnJlbnQgcmVhZCBwb2ludGVyIG9mIHRoZSBEQUMgYnVmZmVyLgorICogVGhlIGN1cnJlbnQgb3V0cHV0IHZhbHVlIGRlcGVuZHMgb24gdGhlIGl0ZW0gaW5kZXhlZCBieSB0aGUgcmVhZCBwb2ludGVyLiBJdCBpcyB1cGRhdGVkIGVpdGhlciBieSBhCisgKiBzb2Z0d2FyZSB0cmlnZ2VyIG9yIGEgaGFyZHdhcmUgdHJpZ2dlci4gQWZ0ZXIgdGhlIHJlYWQgcG9pbnRlciBjaGFuZ2VzLCB0aGUgREFDIG91dHB1dCB2YWx1ZSBhbHNvIGNoYW5nZXMuCisgKgorICogQHBhcmFtIGJhc2UgIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBpbmRleCBTZXR0aW5nIGFuIGluZGV4IHZhbHVlIGZvciB0aGUgcG9pbnRlci4KKyAqLwordm9pZCBEQUNfU2V0QnVmZmVyUmVhZFBvaW50ZXIoREFDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgaW5kZXgpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIGludGVycnVwdHMgZm9yIHRoZSBEQUMgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIE1hc2sgdmFsdWUgZm9yIGludGVycnVwdHMuIFNlZSAiX2RhY19idWZmZXJfaW50ZXJydXB0X2VuYWJsZSIuCisgKi8KK3ZvaWQgREFDX0VuYWJsZUJ1ZmZlckludGVycnVwdHMoREFDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyBpbnRlcnJ1cHRzIGZvciB0aGUgREFDIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBNYXNrIHZhbHVlIGZvciBpbnRlcnJ1cHRzLiBTZWUgICJfZGFjX2J1ZmZlcl9pbnRlcnJ1cHRfZW5hYmxlIi4KKyAqLwordm9pZCBEQUNfRGlzYWJsZUJ1ZmZlckludGVycnVwdHMoREFDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBmbGFncyBvZiBldmVudHMgZm9yIHRoZSBEQUMgYnVmZmVyLgorICoKKyAqIEBwYXJhbSAgYmFzZSBEQUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHJldHVybiAgICAgIE1hc2sgdmFsdWUgZm9yIHRoZSBhc3NlcnRlZCBmbGFncy4gU2VlICAiX2RhY19idWZmZXJfc3RhdHVzX2ZsYWdzIi4KKyAqLwordWludDMyX3QgREFDX0dldEJ1ZmZlclN0YXR1c0ZsYWdzKERBQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBmbGFncyBvZiBldmVudHMgZm9yIHRoZSBEQUMgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIERBQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIE1hc2sgdmFsdWUgZm9yIGZsYWdzLiBTZWUgIl9kYWNfYnVmZmVyX3N0YXR1c19mbGFnc190Ii4KKyAqLwordm9pZCBEQUNfQ2xlYXJCdWZmZXJTdGF0dXNGbGFncyhEQUNfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisvKiEKKyAqIEB9CisgKi8KKyNlbmRpZiAvKiBfRlNMX0RBQ19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZG1hbXV4LmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kbWFtdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNlOWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZG1hbXV4LmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZG1hbXV4LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIEdldCBpbnN0YW5jZSBudW1iZXIgZm9yIERNQU1VWC4KKyAqCisgKiBAcGFyYW0gYmFzZSBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB1aW50MzJfdCBETUFNVVhfR2V0SW5zdGFuY2UoRE1BTVVYX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIEFycmF5IHRvIG1hcCBETUFNVVggaW5zdGFuY2UgbnVtYmVyIHRvIGJhc2UgcG9pbnRlci4gKi8KK3N0YXRpYyBETUFNVVhfVHlwZSAqY29uc3Qgc19kbWFtdXhCYXNlc1tdID0gRE1BTVVYX0JBU0VfUFRSUzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgQXJyYXkgdG8gbWFwIERNQU1VWCBpbnN0YW5jZSBudW1iZXIgdG8gY2xvY2sgbmFtZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19kbWFtdXhDbG9ja05hbWVbXSA9IERNQU1VWF9DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVpbnQzMl90IERNQU1VWF9HZXRJbnN0YW5jZShETUFNVVhfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19kbWFtdXhCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19kbWFtdXhCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfZG1hbXV4QmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBETUFNVVhfSW5pdChETUFNVVhfVHlwZSAqYmFzZSkKK3sKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19kbWFtdXhDbG9ja05hbWVbRE1BTVVYX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKK3ZvaWQgRE1BTVVYX0RlaW5pdChETUFNVVhfVHlwZSAqYmFzZSkKK3sKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfZG1hbXV4Q2xvY2tOYW1lW0RNQU1VWF9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZG1hbXV4LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kbWFtdXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzEzNDhiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZG1hbXV4LmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfRE1BTVVYX0hfCisjZGVmaW5lIF9GU0xfRE1BTVVYX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgZG1hbXV4CisgKiBAeworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBETUFNVVggZHJpdmVyIHZlcnNpb24gMi4wLjIuICovCisjZGVmaW5lIEZTTF9ETUFNVVhfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAyKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIQorICogQG5hbWUgRE1BTVVYIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgRE1BTVVYIHBlcmlwaGVyYWwuCisgKgorICogVGhpcyBmdW5jdGlvbiB1bmdhdGVzIHRoZSBETUFNVVggY2xvY2suCisgKgorICogQHBhcmFtIGJhc2UgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICoKKyAqLwordm9pZCBETUFNVVhfSW5pdChETUFNVVhfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIERlaW5pdGlhbGl6ZXMgdGhlIERNQU1VWCBwZXJpcGhlcmFsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2F0ZXMgdGhlIERNQU1VWCBjbG9jay4KKyAqCisgKiBAcGFyYW0gYmFzZSBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3ZvaWQgRE1BTVVYX0RlaW5pdChETUFNVVhfVHlwZSAqYmFzZSk7CisKKy8qIEB9ICovCisvKiEKKyAqIEBuYW1lIERNQU1VWCBDaGFubmVsIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBETUFNVVggY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIERNQU1VWCBjaGFubmVsLgorICoKKyAqIEBwYXJhbSBiYXNlIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIERNQU1VWCBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERNQU1VWF9FbmFibGVDaGFubmVsKERNQU1VWF9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPkNIQ0ZHW2NoYW5uZWxdIHw9IERNQU1VWF9DSENGR19FTkJMX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBETUFNVVggY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBETUFNVVggY2hhbm5lbC4KKyAqCisgKiBAbm90ZSBUaGUgdXNlciBtdXN0IGRpc2FibGUgdGhlIERNQU1VWCBjaGFubmVsIGJlZm9yZSBjb25maWd1cmluZyBpdC4KKyAqIEBwYXJhbSBiYXNlIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIERNQU1VWCBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERNQU1VWF9EaXNhYmxlQ2hhbm5lbChETUFNVVhfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5DSENGR1tjaGFubmVsXSAmPSB+RE1BTVVYX0NIQ0ZHX0VOQkxfTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgRE1BTVVYIGNoYW5uZWwgc291cmNlLgorICoKKyAqIEBwYXJhbSBiYXNlIERNQU1VWCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIERNQU1VWCBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSBzb3VyY2UgQ2hhbm5lbCBzb3VyY2UsIHdoaWNoIGlzIHVzZWQgdG8gdHJpZ2dlciB0aGUgRE1BIHRyYW5zZmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRE1BTVVYX1NldFNvdXJjZShETUFNVVhfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgdWludDMyX3Qgc291cmNlKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPkNIQ0ZHW2NoYW5uZWxdID0gKChiYXNlLT5DSENGR1tjaGFubmVsXSAmIH5ETUFNVVhfQ0hDRkdfU09VUkNFX01BU0spIHwgRE1BTVVYX0NIQ0ZHX1NPVVJDRShzb3VyY2UpKTsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRE1BTVVYX0hBU19UUklHKSAmJiBGU0xfRkVBVFVSRV9ETUFNVVhfSEFTX1RSSUcgPiAwVQorLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgRE1BTVVYIHBlcmlvZCB0cmlnZ2VyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgRE1BTVVYIHBlcmlvZCB0cmlnZ2VyIGZlYXR1cmUuCisgKgorICogQHBhcmFtIGJhc2UgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgRE1BTVVYIGNoYW5uZWwgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRE1BTVVYX0VuYWJsZVBlcmlvZFRyaWdnZXIoRE1BTVVYX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9ETUFNVVhfTU9EVUxFX0NIQU5ORUwpOworCisgICAgYmFzZS0+Q0hDRkdbY2hhbm5lbF0gfD0gRE1BTVVYX0NIQ0ZHX1RSSUdfTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIERNQU1VWCBwZXJpb2QgdHJpZ2dlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBETUFNVVggcGVyaW9kIHRyaWdnZXIuCisgKgorICogQHBhcmFtIGJhc2UgRE1BTVVYIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgRE1BTVVYIGNoYW5uZWwgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRE1BTVVYX0Rpc2FibGVQZXJpb2RUcmlnZ2VyKERNQU1VWF9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPkNIQ0ZHW2NoYW5uZWxdICY9IH5ETUFNVVhfQ0hDRkdfVFJJR19NQVNLOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0RNQU1VWF9IQVNfVFJJRyAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfRE1BTVVYX0hBU19BX09OKSAmJiBGU0xfRkVBVFVSRV9ETUFNVVhfSEFTX0FfT04pCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBETUEgY2hhbm5lbCB0byBiZSBhbHdheXMgT04uCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBETUFNVVggY2hhbm5lbCBhbHdheXMgT04gZmVhdHVyZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBETUFNVVggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBETUFNVVggY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gZW5hYmxlIFN3aXRjaGVyIG9mIHRoZSBhbHdheXMgT04gZmVhdHVyZS4gInRydWUiIG1lYW5zIGVuYWJsZWQsICJmYWxzZSIgbWVhbnMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBETUFNVVhfRW5hYmxlQWx3YXlzT24oRE1BTVVYX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGJvb2wgZW5hYmxlKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DSENGR1tjaGFubmVsXSB8PSBETUFNVVhfQ0hDRkdfQV9PTl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5DSENGR1tjaGFubmVsXSAmPSB+RE1BTVVYX0NIQ0ZHX0FfT05fTUFTSzsKKyAgICB9Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRE1BTVVYX0hBU19BX09OICovCisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIEB9ICovCisKKyNlbmRpZiAvKiBfRlNMX0RNQU1VWF9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjkwYmEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpLmMKQEAgLTAsMCArMSwxNjY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9kc3BpLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qISBAYnJpZWYgVHlwZWRlZiBmb3IgbWFzdGVyIGludGVycnVwdCBoYW5kbGVyLiAqLwordHlwZWRlZiB2b2lkICgqZHNwaV9tYXN0ZXJfaXNyX3QpKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohIEBicmllZiBUeXBlZGVmIGZvciBzbGF2ZSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KK3R5cGVkZWYgdm9pZCAoKmRzcGlfc2xhdmVfaXNyX3QpKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIEdldCBpbnN0YW5jZSBudW1iZXIgZm9yIERTUEkgbW9kdWxlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3VpbnQzMl90IERTUElfR2V0SW5zdGFuY2UoU1BJX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBEU1BJIHBlcmlwaGVyYWwgY2hpcCBzZWxlY3QgcG9sYXJpdHkuCisgKgorICogVGhpcyBmdW5jdGlvbiAgdGFrZXMgaW4gdGhlIGRlc2lyZWQgcGVyaXBoZXJhbCBjaGlwIHNlbGVjdCAoUGNzKSBhbmQgaXQncyBjb3JyZXNwb25kaW5nIGRlc2lyZWQgcG9sYXJpdHkgYW5kCisgKiBjb25maWd1cmVzIHRoZSBQY3Mgc2lnbmFsIHRvIG9wZXJhdGUgd2l0aCB0aGUgZGVzaXJlZCBjaGFyYWN0ZXJpc3RpYy4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBwY3MgVGhlIHBhcnRpY3VsYXIgcGVyaXBoZXJhbCBjaGlwIHNlbGVjdCAocGFyYW1ldGVyIHZhbHVlIGlzIG9mIHR5cGUgZHNwaV93aGljaF9wY3NfdCkgZm9yIHdoaWNoIHdlIHdpc2ggdG8KKyAqICAgICAgICAgICAgYXBwbHkgdGhlIGFjdGl2ZSBoaWdoIG9yIGFjdGl2ZSBsb3cgY2hhcmFjdGVyaXN0aWMuCisgKiBAcGFyYW0gYWN0aXZlTG93T3JIaWdoIFRoZSBzZXR0aW5nIGZvciBlaXRoZXIgImFjdGl2ZSBoaWdoLCBpbmFjdGl2ZSBsb3cgKDApIiAgb3IgImFjdGl2ZSBsb3csIGluYWN0aXZlIGhpZ2goMSkiIG9mCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgZHNwaV9wY3NfcG9sYXJpdHlfY29uZmlnX3QuCisgKi8KK3N0YXRpYyB2b2lkIERTUElfU2V0T25lUGNzUG9sYXJpdHkoU1BJX1R5cGUgKmJhc2UsIGRzcGlfd2hpY2hfcGNzX3QgcGNzLCBkc3BpX3Bjc19wb2xhcml0eV9jb25maWdfdCBhY3RpdmVMb3dPckhpZ2gpOworCisvKiEKKyAqIEBicmllZiBNYXN0ZXIgZmlsbCB1cCB0aGUgVFggRklGTyB3aXRoIGRhdGEuCisgKiBUaGlzIGlzIG5vdCBhIHB1YmxpYyBBUEkuCisgKi8KK3N0YXRpYyB2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJGaWxsVXBUeEZpZm8oU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBNYXN0ZXIgZmluaXNoIHVwIGEgdHJhbnNmZXIuCisgKiBJdCB3b3VsZCBjYWxsIGJhY2sgaWYgdGhlcmUgaXMgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNldCB0aGUgc3RhdGUgdG8gaWRsZS4KKyAqIFRoaXMgaXMgbm90IGEgcHVibGljIEFQSS4KKyAqLworc3RhdGljIHZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckNvbXBsZXRlKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgU2xhdmUgZmlsbCB1cCB0aGUgVFggRklGTyB3aXRoIGRhdGEuCisgKiBUaGlzIGlzIG5vdCBhIHB1YmxpYyBBUEkuCisgKi8KK3N0YXRpYyB2b2lkIERTUElfU2xhdmVUcmFuc2ZlckZpbGxVcFR4RmlmbyhTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgU2xhdmUgZmluaXNoIHVwIGEgdHJhbnNmZXIuCisgKiBJdCB3b3VsZCBjYWxsIGJhY2sgaWYgdGhlcmUgaXMgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNldCB0aGUgc3RhdGUgdG8gaWRsZS4KKyAqIFRoaXMgaXMgbm90IGEgcHVibGljIEFQSS4KKyAqLworc3RhdGljIHZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQ29tcGxldGUoU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIERTUEkgY29tbW9uIGludGVycnVwdCBoYW5kbGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGdfZHNwaUhhbmRsZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBEU1BJX0NvbW1vbklSUUhhbmRsZXIoU1BJX1R5cGUgKmJhc2UsIHZvaWQgKnBhcmFtKTsKKworLyohCisgKiBAYnJpZWYgTWFzdGVyIHByZXBhcmUgdGhlIHRyYW5zZmVyLgorICogQmFzaWNhbGx5IGl0IHNldCB1cCBkc3BpX21hc3Rlcl9oYW5kbGUgLgorICogVGhpcyBpcyBub3QgYSBwdWJsaWMgQVBJLgorICovCitzdGF0aWMgdm9pZCBEU1BJX01hc3RlclRyYW5zZmVyUHJlcGFyZShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERlZmluZXMgY29uc3RhbnQgdmFsdWUgYXJyYXlzIGZvciB0aGUgYmF1ZCByYXRlIHByZS1zY2FsYXIgYW5kIHNjYWxhciBkaXZpZGVyIHZhbHVlcy4qLworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfYmF1ZHJhdGVQcmVzY2FsZXJbXSA9IHsyLCAzLCA1LCA3fTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzX2JhdWRyYXRlU2NhbGVyW10gPSB7MiwgICA0LCAgIDYsICAgIDgsICAgIDE2LCAgIDMyLCAgIDY0LCAgICAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxNjM4NCwgMzI3Njh9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc19kZWxheVByZXNjYWxlcltdID0gezEsIDMsIDUsIDd9Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfZGVsYXlTY2FsZXJbXSA9IHsyLCAgIDQsICAgIDgsICAgIDE2LCAgIDMyLCAgIDY0LCAgICAxMjgsICAgMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzZ9OworCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGRzcGkgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgU1BJX1R5cGUgKmNvbnN0IHNfZHNwaUJhc2VzW10gPSBTUElfQkFTRV9QVFJTOworCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGRzcGkgSVJRIG51bWJlciBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBJUlFuX1R5cGUgY29uc3Qgc19kc3BpSVJRW10gPSBTUElfSVJRUzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gZHNwaSBjbG9ja3MgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY2xvY2tfaXBfbmFtZV90IGNvbnN0IHNfZHNwaUNsb2NrW10gPSBEU1BJX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyohIEBicmllZiBQb2ludGVycyB0byBkc3BpIGhhbmRsZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgdm9pZCAqZ19kc3BpSGFuZGxlW0FSUkFZX1NJWkUoc19kc3BpQmFzZXMpXTsKKworLyohIEBicmllZiBQb2ludGVyIHRvIG1hc3RlciBJUlEgaGFuZGxlciBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBkc3BpX21hc3Rlcl9pc3JfdCBzX2RzcGlNYXN0ZXJJc3I7CisKKy8qISBAYnJpZWYgUG9pbnRlciB0byBzbGF2ZSBJUlEgaGFuZGxlciBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBkc3BpX3NsYXZlX2lzcl90IHNfZHNwaVNsYXZlSXNyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb2RlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCBEU1BJX0dldEluc3RhbmNlKFNQSV9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2RzcGlCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19kc3BpQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2RzcGlCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIERTUElfTWFzdGVySW5pdChTUElfVHlwZSAqYmFzZSwgY29uc3QgZHNwaV9tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZywgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgYXNzZXJ0KG1hc3RlckNvbmZpZyk7CisKKyAgICB1aW50MzJfdCB0ZW1wOworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBlbmFibGUgRFNQSSBjbG9jayAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfZHNwaUNsb2NrW0RTUElfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIERTUElfRW5hYmxlKGJhc2UsIHRydWUpOworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgRFNQSV9TZXRNYXN0ZXJTbGF2ZU1vZGUoYmFzZSwga0RTUElfTWFzdGVyKTsKKworICAgIHRlbXAgPSBiYXNlLT5NQ1IgJiAofihTUElfTUNSX0NPTlRfU0NLRV9NQVNLIHwgU1BJX01DUl9NVEZFX01BU0sgfCBTUElfTUNSX1JPT0VfTUFTSyB8IFNQSV9NQ1JfU01QTF9QVF9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX01DUl9ESVNfVFhGX01BU0sgfCBTUElfTUNSX0RJU19SWEZfTUFTSykpOworCisgICAgYmFzZS0+TUNSID0gdGVtcCB8IFNQSV9NQ1JfQ09OVF9TQ0tFKG1hc3RlckNvbmZpZy0+ZW5hYmxlQ29udGludW91c1NDSykgfAorICAgICAgICAgICAgICAgIFNQSV9NQ1JfTVRGRShtYXN0ZXJDb25maWctPmVuYWJsZU1vZGlmaWVkVGltaW5nRm9ybWF0KSB8CisgICAgICAgICAgICAgICAgU1BJX01DUl9ST09FKG1hc3RlckNvbmZpZy0+ZW5hYmxlUnhGaWZvT3ZlcldyaXRlKSB8IFNQSV9NQ1JfU01QTF9QVChtYXN0ZXJDb25maWctPnNhbXBsZVBvaW50KSB8CisgICAgICAgICAgICAgICAgU1BJX01DUl9ESVNfVFhGKGZhbHNlKSB8IFNQSV9NQ1JfRElTX1JYRihmYWxzZSk7CisKKyAgICBEU1BJX1NldE9uZVBjc1BvbGFyaXR5KGJhc2UsIG1hc3RlckNvbmZpZy0+d2hpY2hQY3MsIG1hc3RlckNvbmZpZy0+cGNzQWN0aXZlSGlnaE9yTG93KTsKKworICAgIGlmICgwID09IERTUElfTWFzdGVyU2V0QmF1ZFJhdGUoYmFzZSwgbWFzdGVyQ29uZmlnLT53aGljaEN0YXIsIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5iYXVkUmF0ZSwgc3JjQ2xvY2tfSHopKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICB9CisKKyAgICB0ZW1wID0gYmFzZS0+Q1RBUlttYXN0ZXJDb25maWctPndoaWNoQ3Rhcl0gJgorICAgICAgICAgICB+KFNQSV9DVEFSX0ZNU1pfTUFTSyB8IFNQSV9DVEFSX0NQT0xfTUFTSyB8IFNQSV9DVEFSX0NQSEFfTUFTSyB8IFNQSV9DVEFSX0xTQkZFX01BU0spOworCisgICAgYmFzZS0+Q1RBUlttYXN0ZXJDb25maWctPndoaWNoQ3Rhcl0gPQorICAgICAgICB0ZW1wIHwgU1BJX0NUQVJfRk1TWihtYXN0ZXJDb25maWctPmN0YXJDb25maWcuYml0c1BlckZyYW1lIC0gMSkgfCBTUElfQ1RBUl9DUE9MKG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5jcG9sKSB8CisgICAgICAgIFNQSV9DVEFSX0NQSEEobWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmNwaGEpIHwgU1BJX0NUQVJfTFNCRkUobWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmRpcmVjdGlvbik7CisKKyAgICBEU1BJX01hc3RlclNldERlbGF5VGltZXMoYmFzZSwgbWFzdGVyQ29uZmlnLT53aGljaEN0YXIsIGtEU1BJX1Bjc1RvU2NrLCBzcmNDbG9ja19IeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLnBjc1RvU2NrRGVsYXlJbk5hbm9TZWMpOworICAgIERTUElfTWFzdGVyU2V0RGVsYXlUaW1lcyhiYXNlLCBtYXN0ZXJDb25maWctPndoaWNoQ3Rhciwga0RTUElfTGFzdFNja1RvUGNzLCBzcmNDbG9ja19IeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmxhc3RTY2tUb1Bjc0RlbGF5SW5OYW5vU2VjKTsKKyAgICBEU1BJX01hc3RlclNldERlbGF5VGltZXMoYmFzZSwgbWFzdGVyQ29uZmlnLT53aGljaEN0YXIsIGtEU1BJX0JldHdlZW5UcmFuc2Zlciwgc3JjQ2xvY2tfSHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5iZXR3ZWVuVHJhbnNmZXJEZWxheUluTmFub1NlYyk7CisKKyAgICBEU1BJX1N0YXJ0VHJhbnNmZXIoYmFzZSk7Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKGRzcGlfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcpCit7CisgICAgYXNzZXJ0KG1hc3RlckNvbmZpZyk7CisKKyAgICBtYXN0ZXJDb25maWctPndoaWNoQ3RhciA9IGtEU1BJX0N0YXIwOworICAgIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5iYXVkUmF0ZSA9IDUwMDAwMDsKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuYml0c1BlckZyYW1lID0gODsKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuY3BvbCA9IGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVIaWdoOworICAgIG1hc3RlckNvbmZpZy0+Y3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZUZpcnN0RWRnZTsKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuZGlyZWN0aW9uID0ga0RTUElfTXNiRmlyc3Q7CisKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcucGNzVG9TY2tEZWxheUluTmFub1NlYyA9IDEwMDA7CisgICAgbWFzdGVyQ29uZmlnLT5jdGFyQ29uZmlnLmxhc3RTY2tUb1Bjc0RlbGF5SW5OYW5vU2VjID0gMTAwMDsKKyAgICBtYXN0ZXJDb25maWctPmN0YXJDb25maWcuYmV0d2VlblRyYW5zZmVyRGVsYXlJbk5hbm9TZWMgPSAxMDAwOworCisgICAgbWFzdGVyQ29uZmlnLT53aGljaFBjcyA9IGtEU1BJX1BjczA7CisgICAgbWFzdGVyQ29uZmlnLT5wY3NBY3RpdmVIaWdoT3JMb3cgPSBrRFNQSV9QY3NBY3RpdmVMb3c7CisKKyAgICBtYXN0ZXJDb25maWctPmVuYWJsZUNvbnRpbnVvdXNTQ0sgPSBmYWxzZTsKKyAgICBtYXN0ZXJDb25maWctPmVuYWJsZVJ4Rmlmb092ZXJXcml0ZSA9IGZhbHNlOworICAgIG1hc3RlckNvbmZpZy0+ZW5hYmxlTW9kaWZpZWRUaW1pbmdGb3JtYXQgPSBmYWxzZTsKKyAgICBtYXN0ZXJDb25maWctPnNhbXBsZVBvaW50ID0ga0RTUElfU2NrVG9TaW4wQ2xvY2s7Cit9CisKK3ZvaWQgRFNQSV9TbGF2ZUluaXQoU1BJX1R5cGUgKmJhc2UsIGNvbnN0IGRzcGlfc2xhdmVfY29uZmlnX3QgKnNsYXZlQ29uZmlnKQoreworICAgIGFzc2VydChzbGF2ZUNvbmZpZyk7CisKKyAgICB1aW50MzJfdCB0ZW1wID0gMDsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBlbmFibGUgRFNQSSBjbG9jayAqLworICAgIENMT0NLX0VuYWJsZUNsb2NrKHNfZHNwaUNsb2NrW0RTUElfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIERTUElfRW5hYmxlKGJhc2UsIHRydWUpOworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgRFNQSV9TZXRNYXN0ZXJTbGF2ZU1vZGUoYmFzZSwga0RTUElfU2xhdmUpOworCisgICAgdGVtcCA9IGJhc2UtPk1DUiAmICh+KFNQSV9NQ1JfQ09OVF9TQ0tFX01BU0sgfCBTUElfTUNSX01URkVfTUFTSyB8IFNQSV9NQ1JfUk9PRV9NQVNLIHwgU1BJX01DUl9TTVBMX1BUX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBTUElfTUNSX0RJU19UWEZfTUFTSyB8IFNQSV9NQ1JfRElTX1JYRl9NQVNLKSk7CisKKyAgICBiYXNlLT5NQ1IgPSB0ZW1wIHwgU1BJX01DUl9DT05UX1NDS0Uoc2xhdmVDb25maWctPmVuYWJsZUNvbnRpbnVvdXNTQ0spIHwKKyAgICAgICAgICAgICAgICBTUElfTUNSX01URkUoc2xhdmVDb25maWctPmVuYWJsZU1vZGlmaWVkVGltaW5nRm9ybWF0KSB8CisgICAgICAgICAgICAgICAgU1BJX01DUl9ST09FKHNsYXZlQ29uZmlnLT5lbmFibGVSeEZpZm9PdmVyV3JpdGUpIHwgU1BJX01DUl9TTVBMX1BUKHNsYXZlQ29uZmlnLT5zYW1wbGVQb2ludCkgfAorICAgICAgICAgICAgICAgIFNQSV9NQ1JfRElTX1RYRihmYWxzZSkgfCBTUElfTUNSX0RJU19SWEYoZmFsc2UpOworCisgICAgRFNQSV9TZXRPbmVQY3NQb2xhcml0eShiYXNlLCBrRFNQSV9QY3MwLCBrRFNQSV9QY3NBY3RpdmVMb3cpOworCisgICAgdGVtcCA9IGJhc2UtPkNUQVJbc2xhdmVDb25maWctPndoaWNoQ3Rhcl0gJgorICAgICAgICAgICB+KFNQSV9DVEFSX0ZNU1pfTUFTSyB8IFNQSV9DVEFSX0NQT0xfTUFTSyB8IFNQSV9DVEFSX0NQSEFfTUFTSyB8IFNQSV9DVEFSX0xTQkZFX01BU0spOworCisgICAgYmFzZS0+Q1RBUltzbGF2ZUNvbmZpZy0+d2hpY2hDdGFyXSA9IHRlbXAgfCBTUElfQ1RBUl9TTEFWRV9GTVNaKHNsYXZlQ29uZmlnLT5jdGFyQ29uZmlnLmJpdHNQZXJGcmFtZSAtIDEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0NUQVJfU0xBVkVfQ1BPTChzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5jcG9sKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9DVEFSX1NMQVZFX0NQSEEoc2xhdmVDb25maWctPmN0YXJDb25maWcuY3BoYSk7CisKKyAgICBEU1BJX1N0YXJ0VHJhbnNmZXIoYmFzZSk7Cit9CisKK3ZvaWQgRFNQSV9TbGF2ZUdldERlZmF1bHRDb25maWcoZHNwaV9zbGF2ZV9jb25maWdfdCAqc2xhdmVDb25maWcpCit7CisgICAgYXNzZXJ0KHNsYXZlQ29uZmlnKTsKKworICAgIHNsYXZlQ29uZmlnLT53aGljaEN0YXIgPSBrRFNQSV9DdGFyMDsKKyAgICBzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5iaXRzUGVyRnJhbWUgPSA4OworICAgIHNsYXZlQ29uZmlnLT5jdGFyQ29uZmlnLmNwb2wgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaDsKKyAgICBzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5jcGhhID0ga0RTUElfQ2xvY2tQaGFzZUZpcnN0RWRnZTsKKworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVDb250aW51b3VzU0NLID0gZmFsc2U7CisgICAgc2xhdmVDb25maWctPmVuYWJsZVJ4Rmlmb092ZXJXcml0ZSA9IGZhbHNlOworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVNb2RpZmllZFRpbWluZ0Zvcm1hdCA9IGZhbHNlOworICAgIHNsYXZlQ29uZmlnLT5zYW1wbGVQb2ludCA9IGtEU1BJX1Nja1RvU2luMENsb2NrOworfQorCit2b2lkIERTUElfRGVpbml0KFNQSV9UeXBlICpiYXNlKQoreworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworICAgIERTUElfRW5hYmxlKGJhc2UsIGZhbHNlKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAvKiBkaXNhYmxlIERTUEkgY2xvY2sgKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19kc3BpQ2xvY2tbRFNQSV9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCitzdGF0aWMgdm9pZCBEU1BJX1NldE9uZVBjc1BvbGFyaXR5KFNQSV9UeXBlICpiYXNlLCBkc3BpX3doaWNoX3Bjc190IHBjcywgZHNwaV9wY3NfcG9sYXJpdHlfY29uZmlnX3QgYWN0aXZlTG93T3JIaWdoKQoreworICAgIHVpbnQzMl90IHRlbXA7CisKKyAgICB0ZW1wID0gYmFzZS0+TUNSOworCisgICAgaWYgKGFjdGl2ZUxvd09ySGlnaCA9PSBrRFNQSV9QY3NBY3RpdmVMb3cpCisgICAgeworICAgICAgICB0ZW1wIHw9IFNQSV9NQ1JfUENTSVMocGNzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdGVtcCAmPSB+U1BJX01DUl9QQ1NJUyhwY3MpOworICAgIH0KKworICAgIGJhc2UtPk1DUiA9IHRlbXA7Cit9CisKK3VpbnQzMl90IERTUElfTWFzdGVyU2V0QmF1ZFJhdGUoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCB3aGljaEN0YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgLyogZm9yIG1hc3RlciBtb2RlIGNvbmZpZ3VyYXRpb24sIGlmIHNsYXZlIG1vZGUgZGV0ZWN0ZWQsIHJldHVybiAwKi8KKyAgICBpZiAoIURTUElfSXNNYXN0ZXIoYmFzZSkpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdWludDMyX3QgdGVtcDsKKyAgICB1aW50MzJfdCBwcmVzY2FsZXIsIGJlc3RQcmVzY2FsZXI7CisgICAgdWludDMyX3Qgc2NhbGVyLCBiZXN0U2NhbGVyOworICAgIHVpbnQzMl90IGRiciwgYmVzdERicjsKKyAgICB1aW50MzJfdCByZWFsQmF1ZHJhdGUsIGJlc3RCYXVkcmF0ZTsKKyAgICB1aW50MzJfdCBkaWZmLCBtaW5fZGlmZjsKKyAgICB1aW50MzJfdCBiYXVkcmF0ZSA9IGJhdWRSYXRlX0JwczsKKworICAgIC8qIGZpbmQgY29tYmluYXRpb24gb2YgcHJlc2NhbGVyIGFuZCBzY2FsZXIgcmVzdWx0aW5nIGluIGJhdWRyYXRlIGNsb3Nlc3QgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZSAqLworICAgIG1pbl9kaWZmID0gMHhGRkZGRkZGRlU7CisgICAgYmVzdFByZXNjYWxlciA9IDA7CisgICAgYmVzdFNjYWxlciA9IDA7CisgICAgYmVzdERiciA9IDE7CisgICAgYmVzdEJhdWRyYXRlID0gMDsgLyogcmVxdWlyZWQgdG8gYXZvaWQgY29tcGlsYXRpb24gd2FybmluZyAqLworCisgICAgLyogSW4gYWxsIGZvciBsb29wcywgaWYgbWluX2RpZmYgPSAwLCB0aGUgZXhpdCBmb3IgbG9vcCovCisgICAgZm9yIChwcmVzY2FsZXIgPSAwOyAocHJlc2NhbGVyIDwgNCkgJiYgbWluX2RpZmY7IHByZXNjYWxlcisrKQorICAgIHsKKyAgICAgICAgZm9yIChzY2FsZXIgPSAwOyAoc2NhbGVyIDwgMTYpICYmIG1pbl9kaWZmOyBzY2FsZXIrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChkYnIgPSAxOyAoZGJyIDwgMykgJiYgbWluX2RpZmY7IGRicisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlYWxCYXVkcmF0ZSA9ICgoc3JjQ2xvY2tfSHogKiBkYnIpIC8gKHNfYmF1ZHJhdGVQcmVzY2FsZXJbcHJlc2NhbGVyXSAqIChzX2JhdWRyYXRlU2NhbGVyW3NjYWxlcl0pKSk7CisKKyAgICAgICAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIGJhdWQgcmF0ZSBkaWZmZXJlbmNlIGJhc2VkIG9uIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCBzdGF0ZXMgdGhhdCB0aGUgY2FsY3VsYXRlZAorICAgICAgICAgICAgICAgICogYmF1ZCByYXRlIG11c3Qgbm90IGV4Y2VlZCB0aGUgZGVzaXJlZCBiYXVkIHJhdGUuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoYmF1ZHJhdGUgPj0gcmVhbEJhdWRyYXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGJhdWRyYXRlIC0gcmVhbEJhdWRyYXRlOworICAgICAgICAgICAgICAgICAgICBpZiAobWluX2RpZmYgPiBkaWZmKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBhIGJldHRlciBtYXRjaCBmb3VuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgbWluX2RpZmYgPSBkaWZmOworICAgICAgICAgICAgICAgICAgICAgICAgYmVzdFByZXNjYWxlciA9IHByZXNjYWxlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RTY2FsZXIgPSBzY2FsZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBiZXN0QmF1ZHJhdGUgPSByZWFsQmF1ZHJhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBiZXN0RGJyID0gZGJyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogd3JpdGUgdGhlIGJlc3QgZGJyLCBwcmVzY2FsYXIsIGFuZCBiYXVkIHJhdGUgc2NhbGFyIHRvIHRoZSBDVEFSICovCisgICAgdGVtcCA9IGJhc2UtPkNUQVJbd2hpY2hDdGFyXSAmIH4oU1BJX0NUQVJfREJSX01BU0sgfCBTUElfQ1RBUl9QQlJfTUFTSyB8IFNQSV9DVEFSX0JSX01BU0spOworCisgICAgYmFzZS0+Q1RBUlt3aGljaEN0YXJdID0gdGVtcCB8ICgoYmVzdERiciAtIDEpIDw8IFNQSV9DVEFSX0RCUl9TSElGVCkgfCAoYmVzdFByZXNjYWxlciA8PCBTUElfQ1RBUl9QQlJfU0hJRlQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmVzdFNjYWxlciA8PCBTUElfQ1RBUl9CUl9TSElGVCk7CisKKyAgICAvKiByZXR1cm4gdGhlIGFjdHVhbCBjYWxjdWxhdGVkIGJhdWQgcmF0ZSAqLworICAgIHJldHVybiBiZXN0QmF1ZHJhdGU7Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJTZXREZWxheVNjYWxlcigKKyAgICBTUElfVHlwZSAqYmFzZSwgZHNwaV9jdGFyX3NlbGVjdGlvbl90IHdoaWNoQ3RhciwgdWludDMyX3QgcHJlc2NhbGVyLCB1aW50MzJfdCBzY2FsZXIsIGRzcGlfZGVsYXlfdHlwZV90IHdoaWNoRGVsYXkpCit7CisgICAgLyogdGhlc2Ugc2V0dGluZ3MgYXJlIG9ubHkgcmVsZXZhbnQgaW4gbWFzdGVyIG1vZGUgKi8KKyAgICBpZiAoRFNQSV9Jc01hc3RlcihiYXNlKSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAod2hpY2hEZWxheSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBrRFNQSV9QY3NUb1NjazoKKyAgICAgICAgICAgICAgICBiYXNlLT5DVEFSW3doaWNoQ3Rhcl0gPSAoYmFzZS0+Q1RBUlt3aGljaEN0YXJdICYgKH5TUElfQ1RBUl9QQ1NTQ0tfTUFTSykgJiAoflNQSV9DVEFSX0NTU0NLX01BU0spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0NUQVJfUENTU0NLKHByZXNjYWxlcikgfCBTUElfQ1RBUl9DU1NDSyhzY2FsZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrRFNQSV9MYXN0U2NrVG9QY3M6CisgICAgICAgICAgICAgICAgYmFzZS0+Q1RBUlt3aGljaEN0YXJdID0gKGJhc2UtPkNUQVJbd2hpY2hDdGFyXSAmICh+U1BJX0NUQVJfUEFTQ19NQVNLKSAmICh+U1BJX0NUQVJfQVNDX01BU0spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0NUQVJfUEFTQyhwcmVzY2FsZXIpIHwgU1BJX0NUQVJfQVNDKHNjYWxlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtEU1BJX0JldHdlZW5UcmFuc2ZlcjoKKyAgICAgICAgICAgICAgICBiYXNlLT5DVEFSW3doaWNoQ3Rhcl0gPSAoYmFzZS0+Q1RBUlt3aGljaEN0YXJdICYgKH5TUElfQ1RBUl9QRFRfTUFTSykgJiAoflNQSV9DVEFSX0RUX01BU0spKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0NUQVJfUERUKHByZXNjYWxlcikgfCBTUElfQ1RBUl9EVChzY2FsZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordWludDMyX3QgRFNQSV9NYXN0ZXJTZXREZWxheVRpbWVzKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCB3aGljaEN0YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9kZWxheV90eXBlX3Qgd2hpY2hEZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19IeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWxheVRpbWVJbk5hbm9TZWMpCit7CisgICAgLyogZm9yIG1hc3RlciBtb2RlIGNvbmZpZ3VyYXRpb24sIGlmIHNsYXZlIG1vZGUgZGV0ZWN0ZWQsIHJldHVybiAwICovCisgICAgaWYgKCFEU1BJX0lzTWFzdGVyKGJhc2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdWludDMyX3QgcHJlc2NhbGVyLCBiZXN0UHJlc2NhbGVyOworICAgIHVpbnQzMl90IHNjYWxlciwgYmVzdFNjYWxlcjsKKyAgICB1aW50MzJfdCByZWFsRGVsYXksIGJlc3REZWxheTsKKyAgICB1aW50MzJfdCBkaWZmLCBtaW5fZGlmZjsKKyAgICB1aW50MzJfdCBpbml0aWFsRGVsYXlOYW5vU2VjOworCisgICAgLyogZmluZCBjb21iaW5hdGlvbiBvZiBwcmVzY2FsZXIgYW5kIHNjYWxlciByZXN1bHRpbmcgaW4gdGhlIGRlbGF5IGNsb3Nlc3QgdG8gdGhlCisgICAgKiByZXF1ZXN0ZWQgdmFsdWUKKyAgICAqLworICAgIG1pbl9kaWZmID0gMHhGRkZGRkZGRlU7CisgICAgLyogSW5pdGlhbGl6ZSBwcmVzY2FsZXIgYW5kIHNjYWxlciB0byB0aGVpciBtYXggdmFsdWVzIHRvIGdlbmVyYXRlIHRoZSBtYXggZGVsYXkgKi8KKyAgICBiZXN0UHJlc2NhbGVyID0gMHgzOworICAgIGJlc3RTY2FsZXIgPSAweEY7CisgICAgYmVzdERlbGF5ID0gKCgoMTAwMDAwMDAwMFUgKiA0KSAvIHNyY0Nsb2NrX0h6KSAqIHNfZGVsYXlQcmVzY2FsZXJbYmVzdFByZXNjYWxlcl0gKiBzX2RlbGF5U2NhbGVyW2Jlc3RTY2FsZXJdKSAvIDQ7CisKKyAgICAvKiBGaXJzdCBjYWxjdWxhdGUgdGhlIGluaXRpYWwsIGRlZmF1bHQgZGVsYXkgKi8KKyAgICBpbml0aWFsRGVsYXlOYW5vU2VjID0gMTAwMDAwMDAwMFUgLyBzcmNDbG9ja19IeiAqIDI7CisKKyAgICAvKiBJZiB0aGUgaW5pdGlhbCwgZGVmYXVsdCBkZWxheSBpcyBhbHJlYWR5IGdyZWF0ZXIgdGhhbiB0aGUgZGVzaXJlZCBkZWxheSwgdGhlbgorICAgICogc2V0IHRoZSBkZWxheXMgdG8gdGhlaXIgaW5pdGlhbCB2YWx1ZSAoMCkgYW5kIHJldHVybiB0aGUgZGVsYXkuIEluIG90aGVyIHdvcmRzLAorICAgICogdGhlcmUgaXMgbm8gd2F5IHRvIGRlY3JlYXNlIHRoZSBkZWxheSB2YWx1ZSBmdXJ0aGVyLgorICAgICovCisgICAgaWYgKGluaXRpYWxEZWxheU5hbm9TZWMgPj0gZGVsYXlUaW1lSW5OYW5vU2VjKQorICAgIHsKKyAgICAgICAgRFNQSV9NYXN0ZXJTZXREZWxheVNjYWxlcihiYXNlLCB3aGljaEN0YXIsIDAsIDAsIHdoaWNoRGVsYXkpOworICAgICAgICByZXR1cm4gaW5pdGlhbERlbGF5TmFub1NlYzsKKyAgICB9CisKKyAgICAvKiBJbiBhbGwgZm9yIGxvb3BzLCBpZiBtaW5fZGlmZiA9IDAsIHRoZSBleGl0IGZvciBsb29wICovCisgICAgZm9yIChwcmVzY2FsZXIgPSAwOyAocHJlc2NhbGVyIDwgNCkgJiYgbWluX2RpZmY7IHByZXNjYWxlcisrKQorICAgIHsKKyAgICAgICAgZm9yIChzY2FsZXIgPSAwOyAoc2NhbGVyIDwgMTYpICYmIG1pbl9kaWZmOyBzY2FsZXIrKykKKyAgICAgICAgeworICAgICAgICAgICAgcmVhbERlbGF5ID0gKCg0MDAwMDAwMDAwVSAvIHNyY0Nsb2NrX0h6KSAqIHNfZGVsYXlQcmVzY2FsZXJbcHJlc2NhbGVyXSAqIHNfZGVsYXlTY2FsZXJbc2NhbGVyXSkgLyA0OworCisgICAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIGRlbGF5IGRpZmZlcmVuY2UgYmFzZWQgb24gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudAorICAgICAgICAgICAgKiB0aGF0IHN0YXRlcyB0aGF0IHRoZSBjYWxjdWxhdGVkIGRlbGF5IG11c3Qgbm90IGJlIGxlc3MgdGhlbiB0aGUgZGVzaXJlZCBkZWxheQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChyZWFsRGVsYXkgPj0gZGVsYXlUaW1lSW5OYW5vU2VjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRpZmYgPSByZWFsRGVsYXkgLSBkZWxheVRpbWVJbk5hbm9TZWM7CisgICAgICAgICAgICAgICAgaWYgKG1pbl9kaWZmID4gZGlmZikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIGEgYmV0dGVyIG1hdGNoIGZvdW5kICovCisgICAgICAgICAgICAgICAgICAgIG1pbl9kaWZmID0gZGlmZjsKKyAgICAgICAgICAgICAgICAgICAgYmVzdFByZXNjYWxlciA9IHByZXNjYWxlcjsKKyAgICAgICAgICAgICAgICAgICAgYmVzdFNjYWxlciA9IHNjYWxlcjsKKyAgICAgICAgICAgICAgICAgICAgYmVzdERlbGF5ID0gcmVhbERlbGF5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHdyaXRlIHRoZSBiZXN0IGRiciwgcHJlc2NhbGFyLCBhbmQgYmF1ZCByYXRlIHNjYWxhciB0byB0aGUgQ1RBUiAqLworICAgIERTUElfTWFzdGVyU2V0RGVsYXlTY2FsZXIoYmFzZSwgd2hpY2hDdGFyLCBiZXN0UHJlc2NhbGVyLCBiZXN0U2NhbGVyLCB3aGljaERlbGF5KTsKKworICAgIC8qIHJldHVybiB0aGUgYWN0dWFsIGNhbGN1bGF0ZWQgYmF1ZCByYXRlICovCisgICAgcmV0dXJuIGJlc3REZWxheTsKK30KKwordm9pZCBEU1BJX0dldERlZmF1bHREYXRhQ29tbWFuZENvbmZpZyhkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCAqY29tbWFuZCkKK3sKKyAgICBhc3NlcnQoY29tbWFuZCk7CisKKyAgICBjb21tYW5kLT5pc1Bjc0NvbnRpbnVvdXMgPSBmYWxzZTsKKyAgICBjb21tYW5kLT53aGljaEN0YXIgPSBrRFNQSV9DdGFyMDsKKyAgICBjb21tYW5kLT53aGljaFBjcyA9IGtEU1BJX1BjczA7CisgICAgY29tbWFuZC0+aXNFbmRPZlF1ZXVlID0gZmFsc2U7CisgICAgY29tbWFuZC0+Y2xlYXJUcmFuc2ZlckNvdW50ID0gZmFsc2U7Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJXcml0ZURhdGFCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3QgKmNvbW1hbmQsIHVpbnQxNl90IGRhdGEpCit7CisgICAgYXNzZXJ0KGNvbW1hbmQpOworCisgICAgLyogRmlyc3QsIGNsZWFyIFRyYW5zbWl0IENvbXBsZXRlIEZsYWcgKFRDRikgKi8KKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhDb21wbGV0ZUZsYWcpOworCisgICAgd2hpbGUgKCEoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykpCisgICAgeworICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICB9CisKKyAgICBiYXNlLT5QVVNIUiA9IFNQSV9QVVNIUl9DT05UKGNvbW1hbmQtPmlzUGNzQ29udGludW91cykgfCBTUElfUFVTSFJfQ1RBUyhjb21tYW5kLT53aGljaEN0YXIpIHwKKyAgICAgICAgICAgICAgICAgIFNQSV9QVVNIUl9QQ1MoY29tbWFuZC0+d2hpY2hQY3MpIHwgU1BJX1BVU0hSX0VPUShjb21tYW5kLT5pc0VuZE9mUXVldWUpIHwKKyAgICAgICAgICAgICAgICAgIFNQSV9QVVNIUl9DVENOVChjb21tYW5kLT5jbGVhclRyYW5zZmVyQ291bnQpIHwgU1BJX1BVU0hSX1RYREFUQShkYXRhKTsKKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgIC8qIFdhaXQgdGlsbCBUQ0Ygc2V0cyAqLworICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeENvbXBsZXRlRmxhZykpCisgICAgeworICAgIH0KK30KKwordm9pZCBEU1BJX01hc3RlcldyaXRlQ29tbWFuZERhdGFCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgZGF0YSkKK3sKKyAgICAvKiBGaXJzdCwgY2xlYXIgVHJhbnNtaXQgQ29tcGxldGUgRmxhZyAoVENGKSAqLworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeENvbXBsZXRlRmxhZyk7CisKKyAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSkKKyAgICB7CisgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgIH0KKworICAgIGJhc2UtPlBVU0hSID0gZGF0YTsKKworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworCisgICAgLyogV2FpdCB0aWxsIFRDRiBzZXRzICovCisgICAgd2hpbGUgKCEoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Q29tcGxldGVGbGFnKSkKKyAgICB7CisgICAgfQorfQorCit2b2lkIERTUElfU2xhdmVXcml0ZURhdGFCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgZGF0YSkKK3sKKyAgICAvKiBGaXJzdCwgY2xlYXIgVHJhbnNtaXQgQ29tcGxldGUgRmxhZyAoVENGKSAqLworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeENvbXBsZXRlRmxhZyk7CisKKyAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSkKKyAgICB7CisgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgIH0KKworICAgIGJhc2UtPlBVU0hSX1NMQVZFID0gZGF0YTsKKworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworCisgICAgLyogV2FpdCB0aWxsIFRDRiBzZXRzICovCisgICAgd2hpbGUgKCEoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Q29tcGxldGVGbGFnKSkKKyAgICB7CisgICAgfQorfQorCit2b2lkIERTUElfRW5hYmxlSW50ZXJydXB0cyhTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBpZiAobWFzayAmIFNQSV9SU0VSX1RGRkZfUkVfTUFTSykKKyAgICB7CisgICAgICAgIGJhc2UtPlJTRVIgJj0gflNQSV9SU0VSX1RGRkZfRElSU19NQVNLOworICAgIH0KKyAgICBpZiAobWFzayAmIFNQSV9SU0VSX1JGREZfUkVfTUFTSykKKyAgICB7CisgICAgICAgIGJhc2UtPlJTRVIgJj0gflNQSV9SU0VSX1JGREZfRElSU19NQVNLOworICAgIH0KKyAgICBiYXNlLT5SU0VSIHw9IG1hc2s7Cit9CisKKy8qVHJhbnNhY3Rpb25hbCBBUElzIC0tIE1hc3RlciovCisKK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICAvKiBaZXJvIHRoZSBoYW5kbGUuICovCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIGdfZHNwaUhhbmRsZVtEU1BJX0dldEluc3RhbmNlKGJhc2UpXSA9IGhhbmRsZTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7Cit9CisKK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJCbG9ja2luZyhTUElfVHlwZSAqYmFzZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2ZlcikKK3sKKyAgICBhc3NlcnQodHJhbnNmZXIpOworCisgICAgdWludDE2X3Qgd29yZFRvU2VuZCA9IDA7CisgICAgdWludDE2X3Qgd29yZFJlY2VpdmVkID0gMDsKKyAgICB1aW50OF90IGR1bW15RGF0YSA9IERTUElfRFVNTVlfREFUQTsKKyAgICB1aW50OF90IGJpdHNQZXJGcmFtZTsKKworICAgIHVpbnQzMl90IGNvbW1hbmQ7CisgICAgdWludDMyX3QgbGFzdENvbW1hbmQ7CisKKyAgICB1aW50OF90ICp0eERhdGE7CisgICAgdWludDhfdCAqcnhEYXRhOworICAgIHVpbnQzMl90IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisgICAgdWludDMyX3QgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKworICAgIHVpbnQzMl90IGZpZm9TaXplOworICAgIGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190IGNvbW1hbmRTdHJ1Y3Q7CisKKyAgICAvKiBJZiB0aGUgdHJhbnNmZXIgY291bnQgaXMgemVybywgdGhlbiByZXR1cm4gaW1tZWRpYXRlbHkuKi8KKyAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID09IDApCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisgICAgRFNQSV9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9BbGxJbnRlcnJ1cHRFbmFibGUpOworICAgIERTUElfRmx1c2hGaWZvKGJhc2UsIHRydWUsIHRydWUpOworICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9BbGxTdGF0dXNGbGFnKTsKKworICAgIC8qQ2FsY3VsYXRlIHRoZSBjb21tYW5kIGFuZCBsYXN0Q29tbWFuZCovCisgICAgY29tbWFuZFN0cnVjdC53aGljaFBjcyA9CisgICAgICAgIChkc3BpX3doaWNoX3Bjc190KSgxVSA8PCAoKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIERTUElfTUFTVEVSX1BDU19NQVNLKSA+PiBEU1BJX01BU1RFUl9QQ1NfU0hJRlQpKTsKKyAgICBjb21tYW5kU3RydWN0LmlzRW5kT2ZRdWV1ZSA9IGZhbHNlOworICAgIGNvbW1hbmRTdHJ1Y3QuY2xlYXJUcmFuc2ZlckNvdW50ID0gZmFsc2U7CisgICAgY29tbWFuZFN0cnVjdC53aGljaEN0YXIgPQorICAgICAgICAoZHNwaV9jdGFyX3NlbGVjdGlvbl90KSgodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYgRFNQSV9NQVNURVJfQ1RBUl9NQVNLKSA+PiBEU1BJX01BU1RFUl9DVEFSX1NISUZUKTsKKyAgICBjb21tYW5kU3RydWN0LmlzUGNzQ29udGludW91cyA9IChib29sKSh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBrRFNQSV9NYXN0ZXJQY3NDb250aW51b3VzKTsKKworICAgIGNvbW1hbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJihjb21tYW5kU3RydWN0KSk7CisKKyAgICBjb21tYW5kU3RydWN0LmlzRW5kT2ZRdWV1ZSA9IHRydWU7CisgICAgY29tbWFuZFN0cnVjdC5pc1Bjc0NvbnRpbnVvdXMgPSAoYm9vbCkodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYga0RTUElfTWFzdGVyQWN0aXZlQWZ0ZXJUcmFuc2Zlcik7CisgICAgbGFzdENvbW1hbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJihjb21tYW5kU3RydWN0KSk7CisKKyAgICAvKkNhbGN1bGF0ZSB0aGUgYml0c1BlckZyYW1lKi8KKyAgICBiaXRzUGVyRnJhbWUgPSAoKGJhc2UtPkNUQVJbY29tbWFuZFN0cnVjdC53aGljaEN0YXJdICYgU1BJX0NUQVJfRk1TWl9NQVNLKSA+PiBTUElfQ1RBUl9GTVNaX1NISUZUKSArIDE7CisKKyAgICB0eERhdGEgPSB0cmFuc2Zlci0+dHhEYXRhOworICAgIHJ4RGF0YSA9IHRyYW5zZmVyLT5yeERhdGE7CisgICAgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKyAgICByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID0gdHJhbnNmZXItPmRhdGFTaXplOworCisgICAgaWYgKChiYXNlLT5NQ1IgJiBTUElfTUNSX0RJU19SWEZfTUFTSykgfHwgKGJhc2UtPk1DUiAmIFNQSV9NQ1JfRElTX1RYRl9NQVNLKSkKKyAgICB7CisgICAgICAgIGZpZm9TaXplID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZmlmb1NpemUgPSBGU0xfRkVBVFVSRV9EU1BJX0ZJRk9fU0laRW4oYmFzZSk7CisgICAgfQorCisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworCisgICAgaWYgKGJpdHNQZXJGcmFtZSA8PSA4KQorICAgIHsKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHR4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSAoKnR4RGF0YSkgfCAobGFzdENvbW1hbmQpOworICAgICAgICAgICAgICAgICAgICB0eERhdGErKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSAobGFzdENvbW1hbmQpIHwgKGR1bW15RGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgIHJlbWFpbmluZ1NlbmRCeXRlQ291bnQtLTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChyZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgZGF0YSBmcm9tIFBPUFIqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocnhEYXRhKSA9IERTUElfUmVhZERhdGEoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhEYXRhKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNQSV9SZWFkRGF0YShiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQtLTsKKworICAgICAgICAgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qV2FpdCB1bnRpbCBUeCBGaWZvIGlzIG5vdCBmdWxsKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoIShEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodHhEYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUiA9IGNvbW1hbmQgfCAodWludDE2X3QpKCp0eERhdGEpOworICAgICAgICAgICAgICAgICAgICB0eERhdGErKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSBjb21tYW5kIHwgZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdTZW5kQnl0ZUNvdW50LS07CisKKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgICAgIHdoaWxlICgocmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtIHJlbWFpbmluZ1NlbmRCeXRlQ291bnQpID49IGZpZm9TaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnhEYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihyeERhdGEpID0gRFNQSV9SZWFkRGF0YShiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByeERhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU1BJX1JlYWREYXRhKGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudC0tOworCisgICAgICAgICAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmVtYWluaW5nU2VuZEJ5dGVDb3VudCA8PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHR4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICoodHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKyt0eERhdGE7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kIHw9ICh1bnNpZ25lZCkoKih0eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdHhEYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSBsYXN0Q29tbWFuZCB8IHdvcmRUb1NlbmQ7CisKKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdTZW5kQnl0ZUNvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIHdoaWxlIChyZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFJlY2VpdmVkID0gRFNQSV9SZWFkRGF0YShiYXNlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgIT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnhEYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHJ4RGF0YSkgPSB3b3JkUmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcnhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHJ4RGF0YSkgPSB3b3JkUmVjZWl2ZWQgPj4gODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytyeERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnhEYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHJ4RGF0YSkgPSB3b3JkUmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcnhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50LS07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLypXYWl0IHVudGlsIFR4IEZpZm8gaXMgbm90IGZ1bGwqLworICAgICAgICAgICAgICAgIHdoaWxlICghKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHR4RGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICoodHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKyt0eERhdGE7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgfD0gKHVuc2lnbmVkKSgqKHR4RGF0YSkpIDw8IDhVOworICAgICAgICAgICAgICAgICAgICArK3R4RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSBjb21tYW5kIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdTZW5kQnl0ZUNvdW50IC09IDI7CisKKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgICAgIHdoaWxlICgoKHJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLSByZW1haW5pbmdTZW5kQnl0ZUNvdW50KSAvIDIpID49IGZpZm9TaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkUmVjZWl2ZWQgPSBEU1BJX1JlYWREYXRhKGJhc2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnhEYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJ4RGF0YSA9IHdvcmRSZWNlaXZlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3J4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcnhEYXRhID0gd29yZFJlY2VpdmVkID4+IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytyeERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC09IDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJQcmVwYXJlKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh0cmFuc2Zlcik7CisKKyAgICBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCBjb21tYW5kU3RydWN0OworCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisgICAgRFNQSV9GbHVzaEZpZm8oYmFzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX0FsbFN0YXR1c0ZsYWcpOworCisgICAgY29tbWFuZFN0cnVjdC53aGljaFBjcyA9CisgICAgICAgIChkc3BpX3doaWNoX3Bjc190KSgxVSA8PCAoKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIERTUElfTUFTVEVSX1BDU19NQVNLKSA+PiBEU1BJX01BU1RFUl9QQ1NfU0hJRlQpKTsKKyAgICBjb21tYW5kU3RydWN0LmlzRW5kT2ZRdWV1ZSA9IGZhbHNlOworICAgIGNvbW1hbmRTdHJ1Y3QuY2xlYXJUcmFuc2ZlckNvdW50ID0gZmFsc2U7CisgICAgY29tbWFuZFN0cnVjdC53aGljaEN0YXIgPQorICAgICAgICAoZHNwaV9jdGFyX3NlbGVjdGlvbl90KSgodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYgRFNQSV9NQVNURVJfQ1RBUl9NQVNLKSA+PiBEU1BJX01BU1RFUl9DVEFSX1NISUZUKTsKKyAgICBjb21tYW5kU3RydWN0LmlzUGNzQ29udGludW91cyA9IChib29sKSh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBrRFNQSV9NYXN0ZXJQY3NDb250aW51b3VzKTsKKyAgICBoYW5kbGUtPmNvbW1hbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJihjb21tYW5kU3RydWN0KSk7CisKKyAgICBjb21tYW5kU3RydWN0LmlzRW5kT2ZRdWV1ZSA9IHRydWU7CisgICAgY29tbWFuZFN0cnVjdC5pc1Bjc0NvbnRpbnVvdXMgPSAoYm9vbCkodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYga0RTUElfTWFzdGVyQWN0aXZlQWZ0ZXJUcmFuc2Zlcik7CisgICAgaGFuZGxlLT5sYXN0Q29tbWFuZCA9IERTUElfTWFzdGVyR2V0Rm9ybWF0dGVkQ29tbWFuZCgmKGNvbW1hbmRTdHJ1Y3QpKTsKKworICAgIGhhbmRsZS0+Yml0c1BlckZyYW1lID0gKChiYXNlLT5DVEFSW2NvbW1hbmRTdHJ1Y3Qud2hpY2hDdGFyXSAmIFNQSV9DVEFSX0ZNU1pfTUFTSykgPj4gU1BJX0NUQVJfRk1TWl9TSElGVCkgKyAxOworCisgICAgaWYgKChiYXNlLT5NQ1IgJiBTUElfTUNSX0RJU19SWEZfTUFTSykgfHwgKGJhc2UtPk1DUiAmIFNQSV9NQ1JfRElTX1RYRl9NQVNLKSkKKyAgICB7CisgICAgICAgIGhhbmRsZS0+Zmlmb1NpemUgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoYW5kbGUtPmZpZm9TaXplID0gRlNMX0ZFQVRVUkVfRFNQSV9GSUZPX1NJWkVuKGJhc2UpOworICAgIH0KKyAgICBoYW5kbGUtPnR4RGF0YSA9IHRyYW5zZmVyLT50eERhdGE7CisgICAgaGFuZGxlLT5yeERhdGEgPSB0cmFuc2Zlci0+cnhEYXRhOworICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT50b3RhbEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKK30KKworc3RhdHVzX3QgRFNQSV9NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh0cmFuc2Zlcik7CisKKyAgICAvKiBJZiB0aGUgdHJhbnNmZXIgY291bnQgaXMgemVybywgdGhlbiByZXR1cm4gaW1tZWRpYXRlbHkuKi8KKyAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID09IDApCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYnVzeS4qLworICAgIGlmIChoYW5kbGUtPnN0YXRlID09IGtEU1BJX0J1c3kpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19EU1BJX0J1c3k7CisgICAgfQorCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0J1c3k7CisKKyAgICBEU1BJX01hc3RlclRyYW5zZmVyUHJlcGFyZShiYXNlLCBoYW5kbGUsIHRyYW5zZmVyKTsKKyAgICBEU1BJX1N0YXJ0VHJhbnNmZXIoYmFzZSk7CisKKyAgICAvKiBFbmFibGUgdGhlIE5WSUMgZm9yIERTUEkgcGVyaXBoZXJhbC4gKi8KKyAgICBFbmFibGVJUlEoc19kc3BpSVJRW0RTUElfR2V0SW5zdGFuY2UoYmFzZSldKTsKKworICAgIERTUElfTWFzdGVyVHJhbnNmZXJGaWxsVXBUeEZpZm8oYmFzZSwgaGFuZGxlKTsKKworICAgIC8qIFJYIEZJRk8gRHJhaW4gcmVxdWVzdDogUkZERl9SRSB0byBlbmFibGUgUkZERiBpbnRlcnJ1cHQKKyAgICAqIFNpbmNlIFNQSSBpcyBhIHN5bmNocm9ub3VzIGludGVyZmFjZSwgd2Ugb25seSBuZWVkIHRvIGVuYWJsZSB0aGUgUlggaW50ZXJydXB0LgorICAgICogVGhlIElSUSBoYW5kbGVyIHdpbGwgZ2V0IHRoZSBzdGF0dXMgb2YgUlggYW5kIFRYIGludGVycnVwdCBmbGFncy4KKyAgICAqLworICAgIHNfZHNwaU1hc3RlcklzciA9IERTUElfTWFzdGVyVHJhbnNmZXJIYW5kbGVJUlE7CisKKyAgICBEU1BJX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0SW50ZXJydXB0RW5hYmxlKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJHZXRDb3VudChTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGlmICghY291bnQpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2F0Y2ggd2hlbiB0aGVyZSBpcyBub3QgYW4gYWN0aXZlIHRyYW5zZmVyLiAqLworICAgIGlmIChoYW5kbGUtPnN0YXRlICE9IGtEU1BJX0J1c3kpCisgICAgeworICAgICAgICAqY291bnQgPSAwOworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnRvdGFsQnl0ZUNvdW50IC0gaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJDb21wbGV0ZShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIC8qIERpc2FibGUgaW50ZXJydXB0IHJlcXVlc3RzKi8KKyAgICBEU1BJX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEludGVycnVwdEVuYWJsZSB8IGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0SW50ZXJydXB0RW5hYmxlKTsKKworICAgIHN0YXR1c190IHN0YXR1cyA9IDA7CisgICAgaWYgKGhhbmRsZS0+c3RhdGUgPT0ga0RTUElfRXJyb3IpCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0RTUElfRXJyb3I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB9CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKworICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIHN0YXR1cywgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBEU1BJX01hc3RlclRyYW5zZmVyRmlsbFVwVHhGaWZvKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDE2X3Qgd29yZFRvU2VuZCA9IDA7CisgICAgdWludDhfdCBkdW1teURhdGEgPSBEU1BJX0RVTU1ZX0RBVEE7CisKKyAgICAvKiBJZiBiaXRzL2ZyYW1lIGlzIGdyZWF0ZXIgdGhhbiBvbmUgYnl0ZSAqLworICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpCisgICAgeworICAgICAgICAvKiBGaWxsIHRoZSBmaWZvIHVudGlsIGl0IGlzIGZ1bGwgb3IgdW50aWwgdGhlIHNlbmQgd29yZCBjb3VudCBpcyAwIG9yIHVudGlsIHRoZSBkaWZmZXJlbmNlCisgICAgICAgICogYmV0d2VlbiB0aGUgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCBhbmQgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCBlcXVhbHMgdGhlIEZJRk8gZGVwdGguCisgICAgICAgICogVGhlIHJlYXNvbiBmb3IgY2hlY2tpbmcgdGhlIGRpZmZlcmVuY2UgaXMgdG8gZW5zdXJlIHdlIG9ubHkgc2VuZCBhcyBtdWNoIGFzIHRoZQorICAgICAgICAqIFJYIEZJRk8gY2FuIHJlY2VpdmUuCisgICAgICAgICogRm9yIHRoaXMgY2FzZSB3aGVyZSBiaXRzUGVyRnJhbWUgPiA4LCBlYWNoIGVudHJ5IGluIHRoZSBGSUZPIGNvbnRhaW5zIDIgYnl0ZXMgb2YgdGhlCisgICAgICAgICogc2VuZCBkYXRhLCBoZW5jZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IGFuZAorICAgICAgICAqIHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgbXVzdCBiZSBkaXZpZGVkIGJ5IDIgdG8gY29udmVydCB0aGlzIGRpZmZlcmVuY2UgaW50byBhCisgICAgICAgICogMTYtYml0ICgyIGJ5dGUpIHZhbHVlLgorICAgICAgICAqLworICAgICAgICB3aGlsZSAoKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpICYmCisgICAgICAgICAgICAgICAoKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCkgLyAyIDwgaGFuZGxlLT5maWZvU2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPD0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7IC8qIGluY3JlbWVudCB0byBuZXh0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPSAwOworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gaGFuZGxlLT5sYXN0Q29tbWFuZCB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBGb3IgYWxsIHdvcmRzIGV4Y2VwdCB0aGUgbGFzdCB3b3JkICovCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBpbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogaW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAtPSAyOyAvKiBkZWNyZW1lbnQgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCBieSAyICovCisgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSBoYW5kbGUtPmNvbW1hbmQgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBUcnkgdG8gY2xlYXIgdGhlIFRGRkY7IGlmIHRoZSBUWCBGSUZPIGlzIGZ1bGwgdGhpcyB3aWxsIGNsZWFyICovCisgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgLyogZXhpdCBsb29wIGlmIHNlbmQgY291bnQgaXMgemVybywgZWxzZSB1cGRhdGUgbG9jYWwgdmFyaWFibGVzIGZvciBuZXh0IGxvb3AgKi8KKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvKiBFbmQgb2YgVFggRklGTyBmaWxsIHdoaWxlIGxvb3AgKi8KKyAgICB9CisgICAgLyogT3B0aW1pemVkIGZvciBiaXRzL2ZyYW1lIGxlc3MgdGhhbiBvciBlcXVhbCB0byBvbmUgYnl0ZS4gKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBGaWxsIHRoZSBmaWZvIHVudGlsIGl0IGlzIGZ1bGwgb3IgdW50aWwgdGhlIHNlbmQgd29yZCBjb3VudCBpcyAwIG9yIHVudGlsIHRoZSBkaWZmZXJlbmNlCisgICAgICAgICogYmV0d2VlbiB0aGUgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCBhbmQgcmVtYWluaW5nU2VuZEJ5dGVDb3VudCBlcXVhbHMgdGhlIEZJRk8gZGVwdGguCisgICAgICAgICogVGhlIHJlYXNvbiBmb3IgY2hlY2tpbmcgdGhlIGRpZmZlcmVuY2UgaXMgdG8gZW5zdXJlIHdlIG9ubHkgc2VuZCBhcyBtdWNoIGFzIHRoZQorICAgICAgICAqIFJYIEZJRk8gY2FuIHJlY2VpdmUuCisgICAgICAgICovCisgICAgICAgIHdoaWxlICgoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykgJiYKKyAgICAgICAgICAgICAgICgoaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50KSA8IGhhbmRsZS0+Zmlmb1NpemUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9IGR1bW15RGF0YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gaGFuZGxlLT5sYXN0Q29tbWFuZCB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSBoYW5kbGUtPmNvbW1hbmQgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBUcnkgdG8gY2xlYXIgdGhlIFRGRkY7IGlmIHRoZSBUWCBGSUZPIGlzIGZ1bGwgdGhpcyB3aWxsIGNsZWFyICovCisgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisKKyAgICAgICAgICAgIC8qIGV4aXQgbG9vcCBpZiBzZW5kIGNvdW50IGlzIHplcm8sIGVsc2UgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcyBmb3IgbmV4dCBsb29wICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckFib3J0KFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdCByZXF1ZXN0cyovCisgICAgRFNQSV9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RJbnRlcnJ1cHRFbmFibGUgfCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEludGVycnVwdEVuYWJsZSk7CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKK30KKwordm9pZCBEU1BJX01hc3RlclRyYW5zZmVySGFuZGxlSVJRKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgLyogUkVDRUlWRSBJUlEgaGFuZGxlcjogQ2hlY2sgcmVhZCBidWZmZXIgb25seSBpZiB0aGVyZSBhcmUgcmVtYWluaW5nIGJ5dGVzIHRvIHJlYWQuICovCisgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCkKKyAgICB7CisgICAgICAgIC8qIENoZWNrIHJlYWQgYnVmZmVyLiovCisgICAgICAgIHVpbnQxNl90IHdvcmRSZWNlaXZlZDsgLyogTWF4aW11bSBzdXBwb3J0ZWQgZGF0YSBiaXQgbGVuZ3RoIGluIG1hc3RlciBtb2RlIGlzIDE2LWJpdHMgKi8KKworICAgICAgICAvKiBJZiBiaXRzL2ZyYW1lIGlzIGdyZWF0ZXIgdGhhbiBvbmUgYnl0ZSAqLworICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd29yZFJlY2VpdmVkID0gRFNQSV9SZWFkRGF0YShiYXNlKTsKKyAgICAgICAgICAgICAgICAvKiBjbGVhciB0aGUgcnggZmlmbyBkcmFpbiByZXF1ZXN0LCBuZWVkZWQgZm9yIG5vbi1ETUEgYXBwbGljYXRpb25zIGFzIHRoaXMgZmxhZworICAgICAgICAgICAgICAgICogd2lsbCByZW1haW4gc2V0IGV2ZW4gaWYgdGhlIHJ4IGZpZm8gaXMgZW1wdHkuIEJ5IG1hbnVhbGx5IGNsZWFyaW5nIHRoaXMgZmxhZywgaXQKKyAgICAgICAgICAgICAgICAqIGVpdGhlciByZW1haW4gY2xlYXIgaWYgbm8gbW9yZSBkYXRhIGlzIGluIHRoZSBmaWZvLCBvciBpdCB3aWxsIHNldCBpZiB0aGVyZSBpcworICAgICAgICAgICAgICAgICogbW9yZSBkYXRhIGluIHRoZSBmaWZvLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcpOworCisgICAgICAgICAgICAgICAgLyogU3RvcmUgcmVhZCBieXRlcyBpbnRvIHJ4IGJ1ZmZlciBvbmx5IGlmIGEgYnVmZmVyIHBvaW50ZXIgd2FzIHByb3ZpZGVkICovCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cnhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogRm9yIHRoZSBsYXN0IHdvcmQgcmVjZWl2ZWQsIGlmIHRoZXJlIGlzIGFuIGV4dHJhIGJ5dGUgZHVlIHRvIHRoZSBvZGQgdHJhbnNmZXIKKyAgICAgICAgICAgICAgICAgICAgKiBieXRlIGNvdW50LCBvbmx5IHNhdmUgdGhlIHRoZSBsYXN0IGJ5dGUgYW5kIGRpc2NhcmQgdGhlIHVwcGVyIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSB3b3JkUmVjZWl2ZWQ7IC8qIFdyaXRlIGZpcnN0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSB3b3JkUmVjZWl2ZWQ7ICAgICAgLyogV3JpdGUgZmlyc3QgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+cnhEYXRhOyAgICAgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSB3b3JkUmVjZWl2ZWQgPj4gODsgLyogV3JpdGUgc2Vjb25kIGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnJ4RGF0YTsgICAgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudCB0byBuZXh0IGRhdGEgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIFJYIEZJRk8gZHJhaW4gd2hpbGUgbG9vcCAqLworICAgICAgICB9CisgICAgICAgIC8qIE9wdGltaXplZCBmb3IgYml0cy9mcmFtZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb25lIGJ5dGUuICovCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRSZWNlaXZlZCA9IERTUElfUmVhZERhdGEoYmFzZSk7CisgICAgICAgICAgICAgICAgLyogY2xlYXIgdGhlIHJ4IGZpZm8gZHJhaW4gcmVxdWVzdCwgbmVlZGVkIGZvciBub24tRE1BIGFwcGxpY2F0aW9ucyBhcyB0aGlzIGZsYWcKKyAgICAgICAgICAgICAgICAqIHdpbGwgcmVtYWluIHNldCBldmVuIGlmIHRoZSByeCBmaWZvIGlzIGVtcHR5LiBCeSBtYW51YWxseSBjbGVhcmluZyB0aGlzIGZsYWcsIGl0CisgICAgICAgICAgICAgICAgKiBlaXRoZXIgcmVtYWluIGNsZWFyIGlmIG5vIG1vcmUgZGF0YSBpcyBpbiB0aGUgZmlmbywgb3IgaXQgd2lsbCBzZXQgaWYgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAqIG1vcmUgZGF0YSBpbiB0aGUgZmlmby4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgICAgIC8qIFN0b3JlIHJlYWQgYnl0ZXMgaW50byByeCBidWZmZXIgb25seSBpZiBhIGJ1ZmZlciBwb2ludGVyIHdhcyBwcm92aWRlZCAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpoYW5kbGUtPnJ4RGF0YSA9IHdvcmRSZWNlaXZlZDsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnJ4RGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIFJYIEZJRk8gZHJhaW4gd2hpbGUgbG9vcCAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgd3JpdGUgYnVmZmVyLiBXZSBhbHdheXMgaGF2ZSB0byBzZW5kIGEgd29yZCBpbiBvcmRlciB0byBrZWVwIHRoZSB0cmFuc2ZlcgorICAgICogbW92aW5nLiBTbyBpZiB0aGUgY2FsbGVyIGRpZG4ndCBwcm92aWRlIGEgc2VuZCBidWZmZXIsIHdlIGp1c3Qgc2VuZCBhIHplcm8uCisgICAgKi8KKyAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50KQorICAgIHsKKyAgICAgICAgRFNQSV9NYXN0ZXJUcmFuc2ZlckZpbGxVcFR4RmlmbyhiYXNlLCBoYW5kbGUpOworICAgIH0KKworICAgIC8qIENoZWNrIGlmIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIHRyYW5zZmVyLiovCisgICAgaWYgKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMCkgJiYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAwKSkKKyAgICB7CisgICAgICAgIC8qIENvbXBsZXRlIHRoZSB0cmFuc2ZlciBhbmQgZGlzYWJsZSB0aGUgaW50ZXJydXB0cyAqLworICAgICAgICBEU1BJX01hc3RlclRyYW5zZmVyQ29tcGxldGUoYmFzZSwgaGFuZGxlKTsKKyAgICB9Cit9CisKKy8qVHJhbnNhY3Rpb25hbCBBUElzIC0tIFNsYXZlKi8KK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9zbGF2ZV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICAvKiBaZXJvIHRoZSBoYW5kbGUuICovCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIGdfZHNwaUhhbmRsZVtEU1BJX0dldEluc3RhbmNlKGJhc2UpXSA9IGhhbmRsZTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7Cit9CisKK3N0YXR1c190IERTUElfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHRyYW5zZmVyKTsKKworICAgIC8qIElmIHJlY2VpdmUgbGVuZ3RoIGlzIHplcm8gKi8KKyAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID09IDApCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogSWYgYm90aCBzZW5kIGJ1ZmZlciBhbmQgcmVjZWl2ZSBidWZmZXIgaXMgbnVsbCAqLworICAgIGlmICgoISh0cmFuc2Zlci0+dHhEYXRhKSkgJiYgKCEodHJhbnNmZXItPnJ4RGF0YSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENoZWNrIHRoYXQgd2UncmUgbm90IGJ1c3kuKi8KKyAgICBpZiAoaGFuZGxlLT5zdGF0ZSA9PSBrRFNQSV9CdXN5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9CdXN5OworICAgIH0KKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfQnVzeTsKKworICAgIC8qIEVuYWJsZSB0aGUgTlZJQyBmb3IgRFNQSSBwZXJpcGhlcmFsLiAqLworICAgIEVuYWJsZUlSUShzX2RzcGlJUlFbRFNQSV9HZXRJbnN0YW5jZShiYXNlKV0pOworCisgICAgLyogU3RvcmUgdHJhbnNmZXIgaW5mb3JtYXRpb24gKi8KKyAgICBoYW5kbGUtPnR4RGF0YSA9IHRyYW5zZmVyLT50eERhdGE7CisgICAgaGFuZGxlLT5yeERhdGEgPSB0cmFuc2Zlci0+cnhEYXRhOworICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT50b3RhbEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKworICAgIGhhbmRsZS0+ZXJyb3JDb3VudCA9IDA7CisKKyAgICB1aW50OF90IHdoaWNoQ3RhciA9ICh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBEU1BJX1NMQVZFX0NUQVJfTUFTSykgPj4gRFNQSV9TTEFWRV9DVEFSX1NISUZUOworICAgIGhhbmRsZS0+Yml0c1BlckZyYW1lID0KKyAgICAgICAgKCgoYmFzZS0+Q1RBUl9TTEFWRVt3aGljaEN0YXJdKSAmIFNQSV9DVEFSX1NMQVZFX0ZNU1pfTUFTSykgPj4gU1BJX0NUQVJfU0xBVkVfRk1TWl9TSElGVCkgKyAxOworCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisKKyAgICBEU1BJX0ZsdXNoRmlmbyhiYXNlLCB0cnVlLCB0cnVlKTsKKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfQWxsU3RhdHVzRmxhZyk7CisKKyAgICBEU1BJX1N0YXJ0VHJhbnNmZXIoYmFzZSk7CisKKyAgICAvKiBQcmVwYXJlIGRhdGEgdG8gdHJhbnNtaXQgKi8KKyAgICBEU1BJX1NsYXZlVHJhbnNmZXJGaWxsVXBUeEZpZm8oYmFzZSwgaGFuZGxlKTsKKworICAgIHNfZHNwaVNsYXZlSXNyID0gRFNQSV9TbGF2ZVRyYW5zZmVySGFuZGxlSVJROworCisgICAgLyogRW5hYmxlIFJYIEZJRk8gZHJhaW4gcmVxdWVzdCwgdGhlIHNsYXZlIG9ubHkgdXNlIHRoaXMgaW50ZXJydXB0ICovCisgICAgRFNQSV9FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEludGVycnVwdEVuYWJsZSk7CisKKyAgICBpZiAoaGFuZGxlLT5yeERhdGEpCisgICAgeworICAgICAgICAvKiBSWCBGSUZPIG92ZXJmbG93IHJlcXVlc3QgZW5hYmxlICovCisgICAgICAgIERTUElfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9SeEZpZm9PdmVyZmxvd0ludGVycnVwdEVuYWJsZSk7CisgICAgfQorICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICB7CisgICAgICAgIC8qIFRYIEZJRk8gdW5kZXJmbG93IHJlcXVlc3QgZW5hYmxlICovCisgICAgICAgIERTUElfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9UeEZpZm9VbmRlcmZsb3dJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IERTUElfU2xhdmVUcmFuc2ZlckdldENvdW50KFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBpZiAoIWNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENhdGNoIHdoZW4gdGhlcmUgaXMgbm90IGFuIGFjdGl2ZSB0cmFuc2Zlci4gKi8KKyAgICBpZiAoaGFuZGxlLT5zdGF0ZSAhPSBrRFNQSV9CdXN5KQorICAgIHsKKyAgICAgICAgKmNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3M7CisgICAgfQorCisgICAgKmNvdW50ID0gaGFuZGxlLT50b3RhbEJ5dGVDb3VudCAtIGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgdm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJGaWxsVXBUeEZpZm8oU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIHVpbnQxNl90IHRyYW5zbWl0RGF0YSA9IDA7CisgICAgdWludDhfdCBkdW1teVBhdHRlcm4gPSBEU1BJX0RVTU1ZX0RBVEE7CisKKyAgICAvKiBTZXJ2aWNlIHRoZSB0cmFuc21pdHRlciwgaWYgdHJhbnNtaXQgYnVmZmVyIHByb3ZpZGVkLCB0cmFuc21pdCB0aGUgZGF0YSwKKyAgICAqIGVsc2UgdHJhbnNtaXQgZHVtbXkgcGF0dGVybgorICAgICovCisgICAgd2hpbGUgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpCisgICAgeworICAgICAgICAvKiBUcmFuc21pdCBkYXRhICovCisgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBIYXZlIGRhdGEgdG8gdHJhbnNtaXQsIHVwZGF0ZSB0aGUgdHJhbnNtaXQgZGF0YSBhbmQgcHVzaCB0byBGSUZPICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBiaXRzL2ZyYW1lIGlzIDEgYnl0ZSAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0cmFuc21pdCBkYXRhIGFuZCB0cmFuc21pdCBwb2ludGVyICovCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0RGF0YSA9ICpoYW5kbGUtPnR4RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50eERhdGErKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXREYXRhID0gZHVtbXlQYXR0ZXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIERlY3JlYXNlIHJlbWFpbmluZyBkYXRhU2l6ZSAqLworICAgICAgICAgICAgICAgIC0taGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogYml0cy9mcmFtZSBpcyAyIGJ5dGVzICovCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogV2l0aCBtdWx0aWJ5dGVzIHBlciBmcmFtZSB0cmFuc21pc3Npb24sIHRoZSB0cmFuc21pdCBmcmFtZSBjb250YWlucyBkYXRhIGZyb20KKyAgICAgICAgICAgICAgICAqIHRyYW5zbWl0IGJ1ZmZlciB1bnRpbCBzZW50IGRhdGFTaXplIG1hdGNoZXMgdXNlciByZXF1ZXN0LiBPdGhlciBieXRlcyB3aWxsIHNldCB0bworICAgICAgICAgICAgICAgICogZHVtbXkgcGF0dGVybiB2YWx1ZS4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBmaXJzdCBieXRlIG9mIHRyYW5zbWl0IGRhdGEgYW5kIHRyYW5zbWl0IHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXREYXRhID0gKmhhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR4RGF0YSsrOworCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVjcmVhc2UgcmVtYWluaW5nIGRhdGFTaXplICovCisgICAgICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBzZWNvbmQgYnl0ZSBvZiB0cmFuc21pdCBkYXRhIHRvIHNlY29uZCBieXRlIG9mIGR1bW15IHBhdHRlcm4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0RGF0YSA9IHRyYW5zbWl0RGF0YSB8ICh1aW50MTZfdCkoKCh1aW50MTZfdClkdW1teVBhdHRlcm4pIDw8IDgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIHNlY29uZCBieXRlIG9mIHRyYW5zbWl0IGRhdGEgYW5kIHRyYW5zbWl0IHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0RGF0YSA9IHRyYW5zbWl0RGF0YSB8ICh1aW50MTZfdCkoKHVpbnQxNl90KSgqaGFuZGxlLT50eERhdGEpIDw8IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50eERhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAtPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cmFuc21pdERhdGEgPSAodWludDE2X3QpKCh1aW50MTZfdCkoZHVtbXlQYXR0ZXJuKSA8PCA4KSB8IGR1bW15UGF0dGVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBEU1BJIGRhdGEgcmVnaXN0ZXIgKi8KKyAgICAgICAgYmFzZS0+UFVTSFJfU0xBVkUgPSB0cmFuc21pdERhdGE7CisKKyAgICAgICAgLyogVHJ5IHRvIGNsZWFyIFRGRkYgYnkgd3JpdGluZyBhIG9uZSB0byBpdDsgaXQgd2lsbCBub3QgY2xlYXIgaWYgVFggRklGTyBub3QgZnVsbCAqLworICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIERTUElfU2xhdmVUcmFuc2ZlckNvbXBsZXRlKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdCByZXF1ZXN0cyAqLworICAgIERTUElfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0RTUElfVHhGaWZvVW5kZXJmbG93SW50ZXJydXB0RW5hYmxlIHwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RJbnRlcnJ1cHRFbmFibGUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtEU1BJX1J4Rmlmb092ZXJmbG93SW50ZXJydXB0RW5hYmxlIHwga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0SW50ZXJydXB0RW5hYmxlKTsKKworICAgIC8qIFRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gKi8KKyAgICBoYW5kbGUtPnR4RGF0YSA9IE5VTEw7CisgICAgaGFuZGxlLT5yeERhdGEgPSBOVUxMOworICAgIGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9IDA7CisgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID0gMDsKKworICAgIHN0YXR1c190IHN0YXR1cyA9IDA7CisgICAgaWYgKGhhbmRsZS0+c3RhdGUgPT0ga0RTUElfRXJyb3IpCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0RTUElfRXJyb3I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB9CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKworICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIHN0YXR1cywgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgfQorfQorCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckFib3J0KFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBEU1BJX1N0b3BUcmFuc2ZlcihiYXNlKTsKKworICAgIC8qIERpc2FibGUgaW50ZXJydXB0IHJlcXVlc3RzICovCisgICAgRFNQSV9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9UeEZpZm9VbmRlcmZsb3dJbnRlcnJ1cHRFbmFibGUgfCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEludGVycnVwdEVuYWJsZSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0RTUElfUnhGaWZvT3ZlcmZsb3dJbnRlcnJ1cHRFbmFibGUgfCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RJbnRlcnJ1cHRFbmFibGUpOworCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID0gMDsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPSAwOworfQorCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckhhbmRsZUlSUShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDhfdCBkdW1teVBhdHRlcm4gPSBEU1BJX0RVTU1ZX0RBVEE7CisgICAgdWludDMyX3QgZGF0YVJlY2VpdmVkOworICAgIHVpbnQzMl90IGRhdGFTZW5kID0gMDsKKworICAgIC8qIEJlY2F1c2UgU1BJIHByb3RvY29sIGlzIHN5bmNocm9ub3VzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhhdCBzbGF2ZSByZWNlaXZlZCBmcm9tIHRoZQorICAgICogbWFzdGVyIGlzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHNsYXZlIHRyYW5zbWl0dGVkIHRvIHRoZSBtYXN0ZXIuIFNvIHdlIG9ubHkKKyAgICAqIG1vbml0b3IgdGhlIHJlY2VpdmVkIGRhdGFTaXplIHRvIGtub3cgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCisgICAgKi8KKyAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID4gMCkKKyAgICB7CisgICAgICAgIHdoaWxlIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfUnhGaWZvRHJhaW5SZXF1ZXN0RmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgLyogSGF2ZSByZWNlaXZlZCBkYXRhIGluIHRoZSBidWZmZXIuICovCisgICAgICAgICAgICBkYXRhUmVjZWl2ZWQgPSBiYXNlLT5QT1BSOworICAgICAgICAgICAgLypDbGVhciB0aGUgcnggZmlmbyBkcmFpbiByZXF1ZXN0LCBuZWVkZWQgZm9yIG5vbi1ETUEgYXBwbGljYXRpb25zIGFzIHRoaXMgZmxhZworICAgICAgICAgICAgKiB3aWxsIHJlbWFpbiBzZXQgZXZlbiBpZiB0aGUgcnggZmlmbyBpcyBlbXB0eS4gQnkgbWFudWFsbHkgY2xlYXJpbmcgdGhpcyBmbGFnLCBpdAorICAgICAgICAgICAgKiBlaXRoZXIgcmVtYWluIGNsZWFyIGlmIG5vIG1vcmUgZGF0YSBpcyBpbiB0aGUgZmlmbywgb3IgaXQgd2lsbCBzZXQgaWYgdGhlcmUgaXMKKyAgICAgICAgICAgICogbW9yZSBkYXRhIGluIHRoZSBmaWZvLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9SeEZpZm9EcmFpblJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgLyogSWYgYml0cy9mcmFtZSBpcyBvbmUgYnl0ZSAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cnhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBidWZmZXIgaXMgbm90IG51bGwsIHN0b3JlIGRhdGEgaW50byBpdCAqLworICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSBkYXRhUmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT5yeERhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIERlc2NyZWFzZSByZW1haW5pbmcgcmVjZWl2ZSBieXRlIGNvdW50ICovCisgICAgICAgICAgICAgICAgLS1oYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNlbmQgPSAqaGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNlbmQgPSBkdW1teVBhdHRlcm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgdGhlIGRhdGEgdG8gdGhlIERTUEkgZGF0YSByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUl9TTEFWRSA9IGRhdGFTZW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgLyogSWYgYml0cy9mcmFtZSBpcyAyIGJ5dGVzICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogV2l0aCBtdWx0aWJ5dGVzIGZyYW1lIHJlY2VpdmluZywgd2Ugb25seSByZWNlaXZlIHRpbGwgdGhlIHJlY2VpdmVkIGRhdGFTaXplCisgICAgICAgICAgICAgICAgKiBtYXRjaGVzIHVzZXIgcmVxdWVzdC4gT3RoZXIgYnl0ZXMgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cnhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBidWZmZXIgaXMgbm90IG51bGwsIHN0b3JlIGZpcnN0IGJ5dGUgaW50byBpdCAqLworICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSBkYXRhUmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT5yeERhdGE7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWNyZWFzZSByZW1haW5pbmcgcmVjZWl2ZSBieXRlIGNvdW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgYnVmZmVyIGlzIG5vdCBudWxsLCBzdG9yZSBzZWNvbmQgYnl0ZSBpbnRvIGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAqaGFuZGxlLT5yeERhdGEgPSBkYXRhUmVjZWl2ZWQgPj4gODsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT5yeERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBJZiBubyBoYW5kbGUtPnJ4RGF0YSovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWNyZWFzZSByZW1haW5pbmcgcmVjZWl2ZSBieXRlIGNvdW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCAtPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTZW5kID0gKmhhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTZW5kIHw9ICh1aW50MTZfdCkoKHVpbnQxNl90KShkdW1teVBhdHRlcm4pIDw8IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTZW5kIHw9ICh1aW50MzJfdCkoKmhhbmRsZS0+dHhEYXRhKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogSWYgbm8gaGFuZGxlLT50eERhdGEqLworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTZW5kID0gKHVpbnQxNl90KSgodWludDE2X3QpKGR1bW15UGF0dGVybikgPDwgOCkgfCBkdW1teVBhdHRlcm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgdGhlIGRhdGEgdG8gdGhlIERTUEkgZGF0YSByZWdpc3RlciAqLworICAgICAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUl9TTEFWRSA9IGRhdGFTZW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFRyeSB0byBjbGVhciBURkZGIGJ5IHdyaXRpbmcgYSBvbmUgdG8gaXQ7IGl0IHdpbGwgbm90IGNsZWFyIGlmIFRYIEZJRk8gbm90IGZ1bGwgKi8KKyAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLyogQ2hlY2sgaWYgcmVtYWluaW5nIHJlY2VpdmUgYnl0ZSBjb3VudCBtYXRjaGVzIHVzZXIgcmVxdWVzdCAqLworICAgIGlmICgoaGFuZGxlLT5yZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50ID09IDApIHx8IChoYW5kbGUtPnN0YXRlID09IGtEU1BJX0Vycm9yKSkKKyAgICB7CisgICAgICAgIC8qIE90aGVyIGNhc2VzLCBzdG9wIHRoZSB0cmFuc2Zlci4gKi8KKyAgICAgICAgRFNQSV9TbGF2ZVRyYW5zZmVyQ29tcGxldGUoYmFzZSwgaGFuZGxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIENhdGNoIHR4IGZpZm8gdW5kZXJmbG93IGNvbmRpdGlvbnMsIHNlcnZpY2Ugb25seSBpZiB0eCB1bmRlciBmbG93IGludGVycnVwdCBlbmFibGVkICovCisgICAgaWYgKChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvVW5kZXJmbG93RmxhZykgJiYgKGJhc2UtPlJTRVIgJiBTUElfUlNFUl9URlVGX1JFX01BU0spKQorICAgIHsKKyAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb1VuZGVyZmxvd0ZsYWcpOworICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgdG8gZXJyb3IgYW5kIGNsZWFyIGZsYWcgKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfRXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaGFuZGxlLT5lcnJvckNvdW50Kys7CisgICAgfQorICAgIC8qIENhdGNoIHJ4IGZpZm8gb3ZlcmZsb3cgY29uZGl0aW9ucywgc2VydmljZSBvbmx5IGlmIHJ4IG92ZXIgZmxvdyBpbnRlcnJ1cHQgZW5hYmxlZCAqLworICAgIGlmICgoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1J4Rmlmb092ZXJmbG93RmxhZykgJiYgKGJhc2UtPlJTRVIgJiBTUElfUlNFUl9SRk9GX1JFX01BU0spKQorICAgIHsKKyAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1J4Rmlmb092ZXJmbG93RmxhZyk7CisgICAgICAgIC8qIENoYW5nZSBzdGF0ZSB0byBlcnJvciBhbmQgY2xlYXIgZmxhZyAqLworICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGUtPmVycm9yQ291bnQrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUElfVHlwZSAqYmFzZSwgdm9pZCAqcGFyYW0pCit7CisgICAgaWYgKERTUElfSXNNYXN0ZXIoYmFzZSkpCisgICAgeworICAgICAgICBzX2RzcGlNYXN0ZXJJc3IoYmFzZSwgKGRzcGlfbWFzdGVyX2hhbmRsZV90ICopcGFyYW0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzX2RzcGlTbGF2ZUlzcihiYXNlLCAoZHNwaV9zbGF2ZV9oYW5kbGVfdCAqKXBhcmFtKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKFNQSTApCit2b2lkIFNQSTBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGFzc2VydChnX2RzcGlIYW5kbGVbMF0pOworICAgIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUEkwLCBnX2RzcGlIYW5kbGVbMF0pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNQSTEpCit2b2lkIFNQSTFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGFzc2VydChnX2RzcGlIYW5kbGVbMV0pOworICAgIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUEkxLCBnX2RzcGlIYW5kbGVbMV0pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNQSTIpCit2b2lkIFNQSTJfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGFzc2VydChnX2RzcGlIYW5kbGVbMl0pOworICAgIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUEkyLCBnX2RzcGlIYW5kbGVbMl0pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNQSTMpCit2b2lkIFNQSTNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGFzc2VydChnX2RzcGlIYW5kbGVbM10pOworICAgIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUEkzLCBnX2RzcGlIYW5kbGVbM10pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNQSTQpCit2b2lkIFNQSTRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGFzc2VydChnX2RzcGlIYW5kbGVbNF0pOworICAgIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUEk0LCBnX2RzcGlIYW5kbGVbNF0pOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNQSTUpCit2b2lkIFNQSTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGFzc2VydChnX2RzcGlIYW5kbGVbNV0pOworICAgIERTUElfQ29tbW9uSVJRSGFuZGxlcihTUEk1LCBnX2RzcGlIYW5kbGVbNV0pOworfQorI2VuZGlmCisKKyNpZiAoRlNMX0ZFQVRVUkVfU09DX0RTUElfQ09VTlQgPiA2KQorI2Vycm9yICJTaG91bGQgd3JpdGUgdGhlIFNQSXhfRHJpdmVySVJRSGFuZGxlciBmdW5jdGlvbiB0aGF0IGluc3RhbmNlIGdyZWF0ZXIgdGhhbiA1ICEiCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGkuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGQ5NmFmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaS5oCkBAIC0wLDAgKzEsMTE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfRFNQSV9IXworI2RlZmluZSBfRlNMX0RTUElfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBkc3BpX2RyaXZlcgorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgRFNQSSBkcml2ZXIgdmVyc2lvbiAyLjEuNC4gKi8KKyNkZWZpbmUgRlNMX0RTUElfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAxLCA0KSkKKy8qQH0qLworCisjaWZuZGVmIERTUElfRFVNTVlfREFUQQorLyohIEBicmllZiBEU1BJIGR1bW15IGRhdGEgaWYgdGhlcmUgaXMgbm8gVHggZGF0YS4qLworI2RlZmluZSBEU1BJX0RVTU1ZX0RBVEEgKDB4MDBVKSAvKiE8IER1bW15IGRhdGEgdXNlZCBmb3IgVHggaWYgdGhlcmUgaXMgbm8gdHhEYXRhLiAqLworI2VuZGlmCisKKy8qISBAYnJpZWYgU3RhdHVzIGZvciB0aGUgRFNQSSBkcml2ZXIuKi8KK2VudW0gX2RzcGlfc3RhdHVzCit7CisgICAga1N0YXR1c19EU1BJX0J1c3kgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfRFNQSSwgMCksICAgICAgLyohPCBEU1BJIHRyYW5zZmVyIGlzIGJ1c3kuKi8KKyAgICBrU3RhdHVzX0RTUElfRXJyb3IgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfRFNQSSwgMSksICAgICAvKiE8IERTUEkgZHJpdmVyIGVycm9yLiAqLworICAgIGtTdGF0dXNfRFNQSV9JZGxlID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0RTUEksIDIpLCAgICAgIC8qITwgRFNQSSBpcyBpZGxlLiovCisgICAga1N0YXR1c19EU1BJX091dE9mUmFuZ2UgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfRFNQSSwgMykgLyohPCBEU1BJIHRyYW5zZmVyIG91dCBvZiByYW5nZS4gKi8KK307CisKKy8qISBAYnJpZWYgRFNQSSBzdGF0dXMgZmxhZ3MgaW4gU1BJeF9TUiByZWdpc3Rlci4qLworZW51bSBfZHNwaV9mbGFncworeworICAgIGtEU1BJX1R4Q29tcGxldGVGbGFnID0gU1BJX1NSX1RDRl9NQVNLLCAgICAgICAgICAvKiE8IFRyYW5zZmVyIENvbXBsZXRlIEZsYWcuICovCisgICAga0RTUElfRW5kT2ZRdWV1ZUZsYWcgPSBTUElfU1JfRU9RRl9NQVNLLCAgICAgICAgIC8qITwgRW5kIG9mIFF1ZXVlIEZsYWcuKi8KKyAgICBrRFNQSV9UeEZpZm9VbmRlcmZsb3dGbGFnID0gU1BJX1NSX1RGVUZfTUFTSywgICAgLyohPCBUcmFuc21pdCBGSUZPIFVuZGVyZmxvdyBGbGFnLiovCisgICAga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnID0gU1BJX1NSX1RGRkZfTUFTSywgIC8qITwgVHJhbnNtaXQgRklGTyBGaWxsIEZsYWcuKi8KKyAgICBrRFNQSV9SeEZpZm9PdmVyZmxvd0ZsYWcgPSBTUElfU1JfUkZPRl9NQVNLLCAgICAgLyohPCBSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgRmxhZy4qLworICAgIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEZsYWcgPSBTUElfU1JfUkZERl9NQVNLLCAvKiE8IFJlY2VpdmUgRklGTyBEcmFpbiBGbGFnLiovCisgICAga0RTUElfVHhBbmRSeFN0YXR1c0ZsYWcgPSBTUElfU1JfVFhSWFNfTUFTSywgICAgIC8qITwgVGhlIG1vZHVsZSBpcyBpbiBTdG9wcGVkL1J1bm5pbmcgc3RhdGUuKi8KKyAgICBrRFNQSV9BbGxTdGF0dXNGbGFnID0gU1BJX1NSX1RDRl9NQVNLIHwgU1BJX1NSX0VPUUZfTUFTSyB8IFNQSV9TUl9URlVGX01BU0sgfCBTUElfU1JfVEZGRl9NQVNLIHwgU1BJX1NSX1JGT0ZfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9TUl9SRkRGX01BU0sgfCBTUElfU1JfVFhSWFNfTUFTSyAvKiE8IEFsbCBzdGF0dXNlcyBhYm92ZS4qLworfTsKKworLyohIEBicmllZiBEU1BJIGludGVycnVwdCBzb3VyY2UuKi8KK2VudW0gX2RzcGlfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtEU1BJX1R4Q29tcGxldGVJbnRlcnJ1cHRFbmFibGUgPSBTUElfUlNFUl9UQ0ZfUkVfTUFTSywgICAgICAgICAgLyohPCBUQ0YgIGludGVycnVwdCBlbmFibGUuKi8KKyAgICBrRFNQSV9FbmRPZlF1ZXVlSW50ZXJydXB0RW5hYmxlID0gU1BJX1JTRVJfRU9RRl9SRV9NQVNLLCAgICAgICAgIC8qITwgRU9RRiBpbnRlcnJ1cHQgZW5hYmxlLiovCisgICAga0RTUElfVHhGaWZvVW5kZXJmbG93SW50ZXJydXB0RW5hYmxlID0gU1BJX1JTRVJfVEZVRl9SRV9NQVNLLCAgICAvKiE8IFRGVUYgaW50ZXJydXB0IGVuYWJsZS4qLworICAgIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0SW50ZXJydXB0RW5hYmxlID0gU1BJX1JTRVJfVEZGRl9SRV9NQVNLLCAgLyohPCBURkZGIGludGVycnVwdCBlbmFibGUsIERNQSBkaXNhYmxlLiovCisgICAga0RTUElfUnhGaWZvT3ZlcmZsb3dJbnRlcnJ1cHRFbmFibGUgPSBTUElfUlNFUl9SRk9GX1JFX01BU0ssICAgICAvKiE8IFJGT0YgaW50ZXJydXB0IGVuYWJsZS4qLworICAgIGtEU1BJX1J4Rmlmb0RyYWluUmVxdWVzdEludGVycnVwdEVuYWJsZSA9IFNQSV9SU0VSX1JGREZfUkVfTUFTSywgLyohPCBSRkRGIGludGVycnVwdCBlbmFibGUsIERNQSBkaXNhYmxlLiovCisgICAga0RTUElfQWxsSW50ZXJydXB0RW5hYmxlID0gU1BJX1JTRVJfVENGX1JFX01BU0sgfCBTUElfUlNFUl9FT1FGX1JFX01BU0sgfCBTUElfUlNFUl9URlVGX1JFX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9SU0VSX1RGRkZfUkVfTUFTSyB8IFNQSV9SU0VSX1JGT0ZfUkVfTUFTSyB8IFNQSV9SU0VSX1JGREZfUkVfTUFTSworICAgIC8qITwgQWxsIGFib3ZlIGludGVycnVwdHMgZW5hYmxlLiovCit9OworCisvKiEgQGJyaWVmIERTUEkgRE1BIHNvdXJjZS4qLworZW51bSBfZHNwaV9kbWFfZW5hYmxlCit7CisgICAga0RTUElfVHhEbWFFbmFibGUgPSAoU1BJX1JTRVJfVEZGRl9SRV9NQVNLIHwgU1BJX1JTRVJfVEZGRl9ESVJTX01BU0spLCAvKiE8IFRGRkYgZmxhZyBnZW5lcmF0ZXMgRE1BIHJlcXVlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBUeCBpbnRlcnJ1cHQgcmVxdWVzdC4gKi8KKyAgICBrRFNQSV9SeERtYUVuYWJsZSA9IChTUElfUlNFUl9SRkRGX1JFX01BU0sgfCBTUElfUlNFUl9SRkRGX0RJUlNfTUFTSykgIC8qITwgUkZERiBmbGFnIGdlbmVyYXRlcyBETUEgcmVxdWVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIFJ4IGludGVycnVwdCByZXF1ZXN0LiAqLworfTsKKworLyohIEBicmllZiBEU1BJIG1hc3RlciBvciBzbGF2ZSBtb2RlIGNvbmZpZ3VyYXRpb24uKi8KK3R5cGVkZWYgZW51bSBfZHNwaV9tYXN0ZXJfc2xhdmVfbW9kZQoreworICAgIGtEU1BJX01hc3RlciA9IDFVLCAvKiE8IERTUEkgcGVyaXBoZXJhbCBvcGVyYXRlcyBpbiBtYXN0ZXIgbW9kZS4qLworICAgIGtEU1BJX1NsYXZlID0gMFUgICAvKiE8IERTUEkgcGVyaXBoZXJhbCBvcGVyYXRlcyBpbiBzbGF2ZSBtb2RlLiovCit9IGRzcGlfbWFzdGVyX3NsYXZlX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgRFNQSSBTYW1wbGUgUG9pbnQ6IENvbnRyb2xzIHdoZW4gdGhlIERTUEkgbWFzdGVyIHNhbXBsZXMgU0lOIGluIHRoZSBNb2RpZmllZCBUcmFuc2ZlciBGb3JtYXQuIFRoaXMgZmllbGQgaXMgdmFsaWQKKyAqIG9ubHkgd2hlbiB0aGUgQ1BIQSBiaXQgaW4gdGhlIENUQVIgcmVnaXN0ZXIgaXMgMC4KKyAqLwordHlwZWRlZiBlbnVtIF9kc3BpX21hc3Rlcl9zYW1wbGVfcG9pbnQKK3sKKyAgICBrRFNQSV9TY2tUb1NpbjBDbG9jayA9IDBVLCAvKiE8IDAgc3lzdGVtIGNsb2NrcyBiZXR3ZWVuIFNDSyBlZGdlIGFuZCBTSU4gc2FtcGxlLiovCisgICAga0RTUElfU2NrVG9TaW4xQ2xvY2sgPSAxVSwgLyohPCAxIHN5c3RlbSBjbG9jayAgYmV0d2VlbiBTQ0sgZWRnZSBhbmQgU0lOIHNhbXBsZS4qLworICAgIGtEU1BJX1Nja1RvU2luMkNsb2NrID0gMlUgIC8qITwgMiBzeXN0ZW0gY2xvY2tzIGJldHdlZW4gU0NLIGVkZ2UgYW5kIFNJTiBzYW1wbGUuKi8KK30gZHNwaV9tYXN0ZXJfc2FtcGxlX3BvaW50X3Q7CisKKy8qISBAYnJpZWYgRFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IChQY3MpIGNvbmZpZ3VyYXRpb24gKHdoaWNoIFBjcyB0byBjb25maWd1cmUpLiovCit0eXBlZGVmIGVudW0gX2RzcGlfd2hpY2hfcGNzX2NvbmZpZworeworICAgIGtEU1BJX1BjczAgPSAxVSA8PCAwLCAvKiE8IFBjc1swXSAqLworICAgIGtEU1BJX1BjczEgPSAxVSA8PCAxLCAvKiE8IFBjc1sxXSAqLworICAgIGtEU1BJX1BjczIgPSAxVSA8PCAyLCAvKiE8IFBjc1syXSAqLworICAgIGtEU1BJX1BjczMgPSAxVSA8PCAzLCAvKiE8IFBjc1szXSAqLworICAgIGtEU1BJX1BjczQgPSAxVSA8PCA0LCAvKiE8IFBjc1s0XSAqLworICAgIGtEU1BJX1BjczUgPSAxVSA8PCA1ICAvKiE8IFBjc1s1XSAqLworfSBkc3BpX3doaWNoX3Bjc190OworCisvKiEgQGJyaWVmIERTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAoUGNzKSBQb2xhcml0eSBjb25maWd1cmF0aW9uLiovCit0eXBlZGVmIGVudW0gX2RzcGlfcGNzX3BvbGFyaXR5X2NvbmZpZworeworICAgIGtEU1BJX1Bjc0FjdGl2ZUhpZ2ggPSAwVSwgLyohPCBQY3MgQWN0aXZlIEhpZ2ggKGlkbGVzIGxvdykuICovCisgICAga0RTUElfUGNzQWN0aXZlTG93ID0gMVUgICAvKiE8IFBjcyBBY3RpdmUgTG93IChpZGxlcyBoaWdoKS4gKi8KK30gZHNwaV9wY3NfcG9sYXJpdHlfY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IChQY3MpIFBvbGFyaXR5LiovCitlbnVtIF9kc3BpX3Bjc19wb2xhcml0eQoreworICAgIGtEU1BJX1BjczBBY3RpdmVMb3cgPSAxVSA8PCAwLCAvKiE8IFBjczAgQWN0aXZlIExvdyAoaWRsZXMgaGlnaCkuICovCisgICAga0RTUElfUGNzMUFjdGl2ZUxvdyA9IDFVIDw8IDEsIC8qITwgUGNzMSBBY3RpdmUgTG93IChpZGxlcyBoaWdoKS4gKi8KKyAgICBrRFNQSV9QY3MyQWN0aXZlTG93ID0gMVUgPDwgMiwgLyohPCBQY3MyIEFjdGl2ZSBMb3cgKGlkbGVzIGhpZ2gpLiAqLworICAgIGtEU1BJX1BjczNBY3RpdmVMb3cgPSAxVSA8PCAzLCAvKiE8IFBjczMgQWN0aXZlIExvdyAoaWRsZXMgaGlnaCkuICovCisgICAga0RTUElfUGNzNEFjdGl2ZUxvdyA9IDFVIDw8IDQsIC8qITwgUGNzNCBBY3RpdmUgTG93IChpZGxlcyBoaWdoKS4gKi8KKyAgICBrRFNQSV9QY3M1QWN0aXZlTG93ID0gMVUgPDwgNSwgLyohPCBQY3M1IEFjdGl2ZSBMb3cgKGlkbGVzIGhpZ2gpLiAqLworICAgIGtEU1BJX1Bjc0FsbEFjdGl2ZUxvdyA9IDB4RkZVICAvKiE8IFBjczAgdG8gUGNzNSBBY3RpdmUgTG93IChpZGxlcyBoaWdoKS4gKi8KK307CisKKy8qISBAYnJpZWYgRFNQSSBjbG9jayBwb2xhcml0eSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIENUQVIuKi8KK3R5cGVkZWYgZW51bSBfZHNwaV9jbG9ja19wb2xhcml0eQoreworICAgIGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVIaWdoID0gMFUsIC8qITwgQ1BPTD0wLiBBY3RpdmUtaGlnaCBEU1BJIGNsb2NrIChpZGxlcyBsb3cpLiovCisgICAga0RTUElfQ2xvY2tQb2xhcml0eUFjdGl2ZUxvdyA9IDFVICAgLyohPCBDUE9MPTEuIEFjdGl2ZS1sb3cgRFNQSSBjbG9jayAoaWRsZXMgaGlnaCkuKi8KK30gZHNwaV9jbG9ja19wb2xhcml0eV90OworCisvKiEgQGJyaWVmIERTUEkgY2xvY2sgcGhhc2UgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBDVEFSLiovCit0eXBlZGVmIGVudW0gX2RzcGlfY2xvY2tfcGhhc2UKK3sKKyAgICBrRFNQSV9DbG9ja1BoYXNlRmlyc3RFZGdlID0gMFUsIC8qITwgQ1BIQT0wLiBEYXRhIGlzIGNhcHR1cmVkIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIFNDSyBhbmQgY2hhbmdlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGVkZ2UuKi8KKyAgICBrRFNQSV9DbG9ja1BoYXNlU2Vjb25kRWRnZSA9IDFVIC8qITwgQ1BIQT0xLiBEYXRhIGlzIGNoYW5nZWQgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgU0NLIGFuZCBjYXB0dXJlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZWRnZS4qLworfSBkc3BpX2Nsb2NrX3BoYXNlX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBkYXRhIHNoaWZ0ZXIgZGlyZWN0aW9uIG9wdGlvbnMgZm9yIGEgZ2l2ZW4gQ1RBUi4qLwordHlwZWRlZiBlbnVtIF9kc3BpX3NoaWZ0X2RpcmVjdGlvbgoreworICAgIGtEU1BJX01zYkZpcnN0ID0gMFUsIC8qITwgRGF0YSB0cmFuc2ZlcnMgc3RhcnQgd2l0aCBtb3N0IHNpZ25pZmljYW50IGJpdC4qLworICAgIGtEU1BJX0xzYkZpcnN0ID0gMVUgIC8qITwgRGF0YSB0cmFuc2ZlcnMgc3RhcnQgd2l0aCBsZWFzdCBzaWduaWZpY2FudCBiaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGlmdGluZyBvdXQgb2YgTFNCIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNsYXZlICovCit9IGRzcGlfc2hpZnRfZGlyZWN0aW9uX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBkZWxheSB0eXBlIHNlbGVjdGlvbi4qLwordHlwZWRlZiBlbnVtIF9kc3BpX2RlbGF5X3R5cGUKK3sKKyAgICBrRFNQSV9QY3NUb1NjayA9IDFVLCAgLyohPCBQY3MtdG8tU0NLIGRlbGF5LiAqLworICAgIGtEU1BJX0xhc3RTY2tUb1BjcywgICAvKiE8IFRoZSBsYXN0IFNDSyBlZGdlIHRvIFBjcyBkZWxheS4gKi8KKyAgICBrRFNQSV9CZXR3ZWVuVHJhbnNmZXIgLyohPCBEZWxheSBiZXR3ZWVuIHRyYW5zZmVycy4gKi8KK30gZHNwaV9kZWxheV90eXBlX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyBSZWdpc3RlciAoQ1RBUikgc2VsZWN0aW9uLiovCit0eXBlZGVmIGVudW0gX2RzcGlfY3Rhcl9zZWxlY3Rpb24KK3sKKyAgICBrRFNQSV9DdGFyMCA9IDBVLCAvKiE8IENUQVIwIHNlbGVjdGlvbiBvcHRpb24gZm9yIG1hc3RlciBvciBzbGF2ZSBtb2RlOyBub3RlIHRoYXQgQ1RBUjAgYW5kIENUQVIwX1NMQVZFIGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIHJlZ2lzdGVyIGFkZHJlc3MuICovCisgICAga0RTUElfQ3RhcjEgPSAxVSwgLyohPCBDVEFSMSBzZWxlY3Rpb24gb3B0aW9uIGZvciBtYXN0ZXIgbW9kZSBvbmx5LiAqLworICAgIGtEU1BJX0N0YXIyID0gMlUsIC8qITwgQ1RBUjIgc2VsZWN0aW9uIG9wdGlvbiBmb3IgbWFzdGVyIG1vZGUgb25seTsgbm90ZSB0aGF0IHNvbWUgZGV2aWNlcyBkbyBub3Qgc3VwcG9ydCBDVEFSMi4gKi8KKyAgICBrRFNQSV9DdGFyMyA9IDNVLCAvKiE8IENUQVIzIHNlbGVjdGlvbiBvcHRpb24gZm9yIG1hc3RlciBtb2RlIG9ubHk7IG5vdGUgdGhhdCBzb21lIGRldmljZXMgZG8gbm90IHN1cHBvcnQgQ1RBUjMuICovCisgICAga0RTUElfQ3RhcjQgPSA0VSwgLyohPCBDVEFSNCBzZWxlY3Rpb24gb3B0aW9uIGZvciBtYXN0ZXIgbW9kZSBvbmx5OyBub3RlIHRoYXQgc29tZSBkZXZpY2VzIGRvIG5vdCBzdXBwb3J0IENUQVI0LiAqLworICAgIGtEU1BJX0N0YXI1ID0gNVUsIC8qITwgQ1RBUjUgc2VsZWN0aW9uIG9wdGlvbiBmb3IgbWFzdGVyIG1vZGUgb25seTsgbm90ZSB0aGF0IHNvbWUgZGV2aWNlcyBkbyBub3Qgc3VwcG9ydCBDVEFSNS4gKi8KKyAgICBrRFNQSV9DdGFyNiA9IDZVLCAvKiE8IENUQVI2IHNlbGVjdGlvbiBvcHRpb24gZm9yIG1hc3RlciBtb2RlIG9ubHk7IG5vdGUgdGhhdCBzb21lIGRldmljZXMgZG8gbm90IHN1cHBvcnQgQ1RBUjYuICovCisgICAga0RTUElfQ3RhcjcgPSA3VSAgLyohPCBDVEFSNyBzZWxlY3Rpb24gb3B0aW9uIGZvciBtYXN0ZXIgbW9kZSBvbmx5OyBub3RlIHRoYXQgc29tZSBkZXZpY2VzIGRvIG5vdCBzdXBwb3J0IENUQVI3LiAqLworfSBkc3BpX2N0YXJfc2VsZWN0aW9uX3Q7CisKKyNkZWZpbmUgRFNQSV9NQVNURVJfQ1RBUl9TSElGVCAoMFUpICAgLyohPCBEU1BJIG1hc3RlciBDVEFSIHNoaWZ0IG1hY3JvOyB1c2VkIGludGVybmFsbHkuICovCisjZGVmaW5lIERTUElfTUFTVEVSX0NUQVJfTUFTSyAoMHgwRlUpIC8qITwgRFNQSSBtYXN0ZXIgQ1RBUiBtYXNrIG1hY3JvOyB1c2VkIGludGVybmFsbHkuICovCisjZGVmaW5lIERTUElfTUFTVEVSX1BDU19TSElGVCAoNFUpICAgIC8qITwgRFNQSSBtYXN0ZXIgUENTIHNoaWZ0IG1hY3JvOyB1c2VkIGludGVybmFsbHkuICovCisjZGVmaW5lIERTUElfTUFTVEVSX1BDU19NQVNLICgweEYwVSkgIC8qITwgRFNQSSBtYXN0ZXIgUENTIG1hc2sgbWFjcm87IHVzZWQgaW50ZXJuYWxseS4gKi8KKy8qISBAYnJpZWYgVXNlIHRoaXMgZW51bWVyYXRpb24gZm9yIHRoZSBEU1BJIG1hc3RlciB0cmFuc2ZlciBjb25maWdGbGFncy4gKi8KK2VudW0gX2RzcGlfdHJhbnNmZXJfY29uZmlnX2ZsYWdfZm9yX21hc3RlcgoreworICAgIGtEU1BJX01hc3RlckN0YXIwID0gMFUgPDwgRFNQSV9NQVNURVJfQ1RBUl9TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgQ1RBUjAgc2V0dGluZy4gKi8KKyAgICBrRFNQSV9NYXN0ZXJDdGFyMSA9IDFVIDw8IERTUElfTUFTVEVSX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIENUQVIxIHNldHRpbmcuICovCisgICAga0RTUElfTWFzdGVyQ3RhcjIgPSAyVSA8PCBEU1BJX01BU1RFUl9DVEFSX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBDVEFSMiBzZXR0aW5nLiAqLworICAgIGtEU1BJX01hc3RlckN0YXIzID0gM1UgPDwgRFNQSV9NQVNURVJfQ1RBUl9TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgQ1RBUjMgc2V0dGluZy4gKi8KKyAgICBrRFNQSV9NYXN0ZXJDdGFyNCA9IDRVIDw8IERTUElfTUFTVEVSX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIENUQVI0IHNldHRpbmcuICovCisgICAga0RTUElfTWFzdGVyQ3RhcjUgPSA1VSA8PCBEU1BJX01BU1RFUl9DVEFSX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBDVEFSNSBzZXR0aW5nLiAqLworICAgIGtEU1BJX01hc3RlckN0YXI2ID0gNlUgPDwgRFNQSV9NQVNURVJfQ1RBUl9TSElGVCwgLyohPCBEU1BJIG1hc3RlciB0cmFuc2ZlciB1c2UgQ1RBUjYgc2V0dGluZy4gKi8KKyAgICBrRFNQSV9NYXN0ZXJDdGFyNyA9IDdVIDw8IERTUElfTUFTVEVSX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIENUQVI3IHNldHRpbmcuICovCisKKyAgICBrRFNQSV9NYXN0ZXJQY3MwID0gMFUgPDwgRFNQSV9NQVNURVJfUENTX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBQQ1MwIHNpZ25hbC4gKi8KKyAgICBrRFNQSV9NYXN0ZXJQY3MxID0gMVUgPDwgRFNQSV9NQVNURVJfUENTX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBQQ1MxIHNpZ25hbC4gKi8KKyAgICBrRFNQSV9NYXN0ZXJQY3MyID0gMlUgPDwgRFNQSV9NQVNURVJfUENTX1NISUZULCAvKiE8IERTUEkgbWFzdGVyIHRyYW5zZmVyIHVzZSBQQ1MyIHNpZ25hbC4qLworICAgIGtEU1BJX01hc3RlclBjczMgPSAzVSA8PCBEU1BJX01BU1RFUl9QQ1NfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIFBDUzMgc2lnbmFsLiAqLworICAgIGtEU1BJX01hc3RlclBjczQgPSA0VSA8PCBEU1BJX01BU1RFUl9QQ1NfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIFBDUzQgc2lnbmFsLiAqLworICAgIGtEU1BJX01hc3RlclBjczUgPSA1VSA8PCBEU1BJX01BU1RFUl9QQ1NfU0hJRlQsIC8qITwgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgdXNlIFBDUzUgc2lnbmFsLiAqLworCisgICAga0RTUElfTWFzdGVyUGNzQ29udGludW91cyA9IDFVIDw8IDIwLCAgICAgICAvKiE8IEluZGljYXRlcyB3aGV0aGVyIHRoZSBQQ1Mgc2lnbmFsIGlzIGNvbnRpbnVvdXMuICovCisgICAga0RTUElfTWFzdGVyQWN0aXZlQWZ0ZXJUcmFuc2ZlciA9IDFVIDw8IDIxLCAvKiE8IEluZGljYXRlcyB3aGV0aGVyIHRoZSBQQ1Mgc2lnbmFsIGlzIGFjdGl2ZSBhZnRlciB0aGUgbGFzdCBmcmFtZSB0cmFuc2Zlci4qLworfTsKKworI2RlZmluZSBEU1BJX1NMQVZFX0NUQVJfU0hJRlQgKDBVKSAgIC8qITwgRFNQSSBzbGF2ZSBDVEFSIHNoaWZ0IG1hY3JvOyB1c2VkIGludGVybmFsbHkuICovCisjZGVmaW5lIERTUElfU0xBVkVfQ1RBUl9NQVNLICgweDA3VSkgLyohPCBEU1BJIHNsYXZlIENUQVIgbWFzayBtYWNybzsgdXNlZCBpbnRlcm5hbGx5LiAqLworLyohIEBicmllZiBVc2UgdGhpcyBlbnVtZXJhdGlvbiBmb3IgdGhlIERTUEkgc2xhdmUgdHJhbnNmZXIgY29uZmlnRmxhZ3MuICovCitlbnVtIF9kc3BpX3RyYW5zZmVyX2NvbmZpZ19mbGFnX2Zvcl9zbGF2ZQoreworICAgIGtEU1BJX1NsYXZlQ3RhcjAgPSAwVSA8PCBEU1BJX1NMQVZFX0NUQVJfU0hJRlQsIC8qITwgRFNQSSBzbGF2ZSB0cmFuc2ZlciB1c2UgQ1RBUjAgc2V0dGluZy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERTUEkgc2xhdmUgY2FuIG9ubHkgdXNlIFBDUzAuICovCit9OworCisvKiEgQGJyaWVmIERTUEkgdHJhbnNmZXIgc3RhdGUsIHdoaWNoIGlzIHVzZWQgZm9yIERTUEkgdHJhbnNhY3Rpb25hbCBBUEkgc3RhdGUgbWFjaGluZS4gKi8KK2VudW0gX2RzcGlfdHJhbnNmZXJfc3RhdGUKK3sKKyAgICBrRFNQSV9JZGxlID0gMHgwVSwgLyohPCBOb3RoaW5nIGluIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlci4gKi8KKyAgICBrRFNQSV9CdXN5LCAgICAgICAgLyohPCBUcmFuc2ZlciBxdWV1ZSBpcyBub3QgZmluaXNoZWQuICovCisgICAga0RTUElfRXJyb3IgICAgICAgIC8qITwgVHJhbnNmZXIgZXJyb3IuICovCit9OworCisvKiEgQGJyaWVmIERTUEkgbWFzdGVyIGNvbW1hbmQgZGF0ZSBjb25maWd1cmF0aW9uIHVzZWQgZm9yIHRoZSBTUEl4X1BVU0hSLiovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnCit7CisgICAgYm9vbCBpc1Bjc0NvbnRpbnVvdXM7ICAgICAgICAgICAgLyohPCBPcHRpb24gdG8gZW5hYmxlIHRoZSBjb250aW51b3VzIGFzc2VydGlvbiBvZiB0aGUgY2hpcCBzZWxlY3QgYmV0d2VlbiB0cmFuc2ZlcnMuKi8KKyAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyOyAvKiE8IFRoZSBkZXNpcmVkIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciAoQ1RBUikgdG8gdXNlIGZvciBDVEFTLiovCisgICAgZHNwaV93aGljaF9wY3NfdCB3aGljaFBjczsgICAgICAgLyohPCBUaGUgZGVzaXJlZCBQQ1Mgc2lnbmFsIHRvIHVzZSBmb3IgdGhlIGRhdGEgdHJhbnNmZXIuKi8KKyAgICBib29sIGlzRW5kT2ZRdWV1ZTsgICAgICAgICAgICAgICAvKiE8IFNpZ25hbHMgdGhhdCB0aGUgY3VycmVudCB0cmFuc2ZlciBpcyB0aGUgbGFzdCBpbiB0aGUgcXVldWUuKi8KKyAgICBib29sIGNsZWFyVHJhbnNmZXJDb3VudDsgICAgICAgICAvKiE8IENsZWFycyB0aGUgU1BJIFRyYW5zZmVyIENvdW50ZXIgKFNQSV9UQ05UKSBiZWZvcmUgdHJhbnNtaXNzaW9uIHN0YXJ0cy4qLworfSBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdDsKKworLyohIEBicmllZiBEU1BJIG1hc3RlciBjdGFyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9tYXN0ZXJfY3Rhcl9jb25maWcKK3sKKyAgICB1aW50MzJfdCBiYXVkUmF0ZTsgICAgICAgICAgICAgICAgLyohPCBCYXVkIFJhdGUgZm9yIERTUEkuICovCisgICAgdWludDMyX3QgYml0c1BlckZyYW1lOyAgICAgICAgICAgIC8qITwgQml0cyBwZXIgZnJhbWUsIG1pbmltdW0gNCwgbWF4aW11bSAxNi4qLworICAgIGRzcGlfY2xvY2tfcG9sYXJpdHlfdCBjcG9sOyAgICAgICAvKiE8IENsb2NrIHBvbGFyaXR5LiAqLworICAgIGRzcGlfY2xvY2tfcGhhc2VfdCBjcGhhOyAgICAgICAgICAvKiE8IENsb2NrIHBoYXNlLiAqLworICAgIGRzcGlfc2hpZnRfZGlyZWN0aW9uX3QgZGlyZWN0aW9uOyAvKiE8IE1TQiBvciBMU0IgZGF0YSBzaGlmdCBkaXJlY3Rpb24uICovCisKKyAgICB1aW50MzJfdCBwY3NUb1Nja0RlbGF5SW5OYW5vU2VjOyAgICAgICAgLyohPCBQQ1MgdG8gU0NLIGRlbGF5IHRpbWUgaW4gbmFub3NlY29uZHM7IHNldHRpbmcgdG8gMCBzZXRzIHRoZSBtaW5pbXVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5LiBJdCBhbHNvIHNldHMgdGhlIGJvdW5kYXJ5IHZhbHVlIGlmIG91dCBvZiByYW5nZS4qLworICAgIHVpbnQzMl90IGxhc3RTY2tUb1Bjc0RlbGF5SW5OYW5vU2VjOyAgICAvKiE8IFRoZSBsYXN0IFNDSyB0byBQQ1MgZGVsYXkgdGltZSBpbiBuYW5vc2Vjb25kczsgc2V0dGluZyB0byAwIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW0gZGVsYXkuIEl0IGFsc28gc2V0cyB0aGUgYm91bmRhcnkgdmFsdWUgaWYgb3V0IG9mIHJhbmdlLiovCisKKyAgICB1aW50MzJfdCBiZXR3ZWVuVHJhbnNmZXJEZWxheUluTmFub1NlYzsgLyohPCBBZnRlciB0aGUgU0NLIGRlbGF5IHRpbWUgaW4gbmFub3NlY29uZHM7IHNldHRpbmcgdG8gMCBzZXRzIHRoZSBtaW5pbXVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheS4gSXQgYWxzbyBzZXRzIHRoZSBib3VuZGFyeSB2YWx1ZSBpZiBvdXQgb2YgcmFuZ2UuKi8KK30gZHNwaV9tYXN0ZXJfY3Rhcl9jb25maWdfdDsKKworLyohIEBicmllZiBEU1BJIG1hc3RlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4qLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfbWFzdGVyX2NvbmZpZworeworICAgIGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCB3aGljaEN0YXI7ICAgICAgLyohPCBUaGUgZGVzaXJlZCBDVEFSIHRvIHVzZS4gKi8KKyAgICBkc3BpX21hc3Rlcl9jdGFyX2NvbmZpZ190IGN0YXJDb25maWc7IC8qITwgU2V0IHRoZSBjdGFyQ29uZmlnIHRvIHRoZSBkZXNpcmVkIENUQVIuICovCisKKyAgICBkc3BpX3doaWNoX3Bjc190IHdoaWNoUGNzOyAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIGRlc2lyZWQgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAocGNzKS4gKi8KKyAgICBkc3BpX3Bjc19wb2xhcml0eV9jb25maWdfdCBwY3NBY3RpdmVIaWdoT3JMb3c7IC8qITwgVGhlIGRlc2lyZWQgUENTIGFjdGl2ZSBoaWdoIG9yIGxvdy4gKi8KKworICAgIGJvb2wgZW5hYmxlQ29udGludW91c1NDSzsgICAvKiE8IENPTlRfU0NLRSwgY29udGludW91cyBTQ0sgZW5hYmxlLiBOb3RlIHRoYXQgdGhlIGNvbnRpbnVvdXMgU0NLIGlzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgZm9yIENQSEEgPSAxLiovCisgICAgYm9vbCBlbmFibGVSeEZpZm9PdmVyV3JpdGU7IC8qITwgUk9PRSwgcmVjZWl2ZSBGSUZPIG92ZXJmbG93IG92ZXJ3cml0ZSBlbmFibGUuIElmIFJPT0UgPSAwLCB0aGUgaW5jb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIGlzIGlnbm9yZWQgYW5kIHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdmVyZmxvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaWdub3JlZC4gSWYgUk9PRSA9IDEsIHRoZSBpbmNvbWluZyBkYXRhIGlzIHNoaWZ0ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgcmVnaXN0ZXIuICovCisKKyAgICBib29sIGVuYWJsZU1vZGlmaWVkVGltaW5nRm9ybWF0OyAgICAgICAgLyohPCBFbmFibGVzIGEgbW9kaWZpZWQgdHJhbnNmZXIgZm9ybWF0IHRvIGJlIHVzZWQgaWYgdHJ1ZS4qLworICAgIGRzcGlfbWFzdGVyX3NhbXBsZV9wb2ludF90IHNhbXBsZVBvaW50OyAvKiE8IENvbnRyb2xzIHdoZW4gdGhlIG1vZHVsZSBtYXN0ZXIgc2FtcGxlcyBTSU4gaW4gdGhlIE1vZGlmaWVkIFRyYW5zZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0LiBJdCdzIHZhbGlkIG9ubHkgd2hlbiBDUEhBPTAuICovCit9IGRzcGlfbWFzdGVyX2NvbmZpZ190OworCisvKiEgQGJyaWVmIERTUEkgc2xhdmUgY3RhciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4qLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfc2xhdmVfY3Rhcl9jb25maWcKK3sKKyAgICB1aW50MzJfdCBiaXRzUGVyRnJhbWU7ICAgICAgLyohPCBCaXRzIHBlciBmcmFtZSwgbWluaW11bSA0LCBtYXhpbXVtIDE2LiovCisgICAgZHNwaV9jbG9ja19wb2xhcml0eV90IGNwb2w7IC8qITwgQ2xvY2sgcG9sYXJpdHkuICovCisgICAgZHNwaV9jbG9ja19waGFzZV90IGNwaGE7ICAgIC8qITwgQ2xvY2sgcGhhc2UuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2xhdmUgb25seSBzdXBwb3J0cyBNU0IgYW5kIGRvZXMgbm90IHN1cHBvcnQgTFNCLiovCit9IGRzcGlfc2xhdmVfY3Rhcl9jb25maWdfdDsKKworLyohIEBicmllZiBEU1BJIHNsYXZlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLiovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9zbGF2ZV9jb25maWcKK3sKKyAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyOyAgICAgLyohPCBUaGUgZGVzaXJlZCBDVEFSIHRvIHVzZS4gKi8KKyAgICBkc3BpX3NsYXZlX2N0YXJfY29uZmlnX3QgY3RhckNvbmZpZzsgLyohPCBTZXQgdGhlIGN0YXJDb25maWcgdG8gdGhlIGRlc2lyZWQgQ1RBUi4gKi8KKworICAgIGJvb2wgZW5hYmxlQ29udGludW91c1NDSzsgICAgICAgICAgICAgICAvKiE8IENPTlRfU0NLRSwgY29udGludW91cyBTQ0sgZW5hYmxlLiBOb3RlIHRoYXQgdGhlIGNvbnRpbnVvdXMgU0NLIGlzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgZm9yIENQSEEgPSAxLiovCisgICAgYm9vbCBlbmFibGVSeEZpZm9PdmVyV3JpdGU7ICAgICAgICAgICAgIC8qITwgUk9PRSwgcmVjZWl2ZSBGSUZPIG92ZXJmbG93IG92ZXJ3cml0ZSBlbmFibGUuIElmIFJPT0UgPSAwLCB0aGUgaW5jb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIGlzIGlnbm9yZWQgYW5kIHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdmVyZmxvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaWdub3JlZC4gSWYgUk9PRSA9IDEsIHRoZSBpbmNvbWluZyBkYXRhIGlzIHNoaWZ0ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgcmVnaXN0ZXIuICovCisgICAgYm9vbCBlbmFibGVNb2RpZmllZFRpbWluZ0Zvcm1hdDsgICAgICAgIC8qITwgRW5hYmxlcyBhIG1vZGlmaWVkIHRyYW5zZmVyIGZvcm1hdCB0byBiZSB1c2VkIGlmIHRydWUuKi8KKyAgICBkc3BpX21hc3Rlcl9zYW1wbGVfcG9pbnRfdCBzYW1wbGVQb2ludDsgLyohPCBDb250cm9scyB3aGVuIHRoZSBtb2R1bGUgbWFzdGVyIHNhbXBsZXMgU0lOIGluIHRoZSBNb2RpZmllZCBUcmFuc2ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQuIEl0J3MgdmFsaWQgb25seSB3aGVuIENQSEE9MC4gKi8KK30gZHNwaV9zbGF2ZV9jb25maWdfdDsKKworLyohCisqIEBicmllZiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBfZHNwaV9tYXN0ZXJfaGFuZGxlIHR5cGVkZWZzLgorKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX21hc3Rlcl9oYW5kbGUgZHNwaV9tYXN0ZXJfaGFuZGxlX3Q7CisKKy8qIQorKiBAYnJpZWYgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgX2RzcGlfc2xhdmVfaGFuZGxlIHR5cGVkZWZzLgorKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX3NsYXZlX2hhbmRsZSBkc3BpX3NsYXZlX2hhbmRsZV90OworCisvKiEKKyAqIEBicmllZiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgaGFuZGxlIGZvciB0aGUgRFNQSSBtYXN0ZXIuCisgKiBAcGFyYW0gc3RhdHVzIFN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIHRyYW5zZmVyIGNvbXBsZXRlZC4KKyAqIEBwYXJhbSB1c2VyRGF0YSBBcmJpdHJhcnkgcG9pbnRlci1kYXRhU2l6ZWQgdmFsdWUgcGFzc2VkIGZyb20gdGhlIGFwcGxpY2F0aW9uLgorICovCit0eXBlZGVmIHZvaWQgKCpkc3BpX21hc3Rlcl90cmFuc2Zlcl9jYWxsYmFja190KShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7CisvKiEKKyAqIEBicmllZiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgaGFuZGxlIGZvciB0aGUgRFNQSSBzbGF2ZS4KKyAqIEBwYXJhbSBzdGF0dXMgU3VjY2VzcyBvciBlcnJvciBjb2RlIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdHJhbnNmZXIgY29tcGxldGVkLgorICogQHBhcmFtIHVzZXJEYXRhIEFyYml0cmFyeSBwb2ludGVyLWRhdGFTaXplZCB2YWx1ZSBwYXNzZWQgZnJvbSB0aGUgYXBwbGljYXRpb24uCisgKi8KK3R5cGVkZWYgdm9pZCAoKmRzcGlfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCkoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7CisKKy8qISBAYnJpZWYgRFNQSSBtYXN0ZXIvc2xhdmUgdHJhbnNmZXIgc3RydWN0dXJlLiovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV90cmFuc2ZlcgoreworICAgIHVpbnQ4X3QgKnR4RGF0YTsgICAgICAgICAgLyohPCBTZW5kIGJ1ZmZlci4gKi8KKyAgICB1aW50OF90ICpyeERhdGE7ICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IGRhdGFTaXplOyAvKiE8IFRyYW5zZmVyIGJ5dGVzLiAqLworCisgICAgdWludDMyX3QKKyAgICAgICAgY29uZmlnRmxhZ3M7IC8qITwgVHJhbnNmZXIgdHJhbnNmZXIgY29uZmlndXJhdGlvbiBmbGFnczsgc2V0IGZyb20gX2RzcGlfdHJhbnNmZXJfY29uZmlnX2ZsYWdfZm9yX21hc3RlciBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIGlzIHVzZWQgZm9yIG1hc3RlciBvciBfZHNwaV90cmFuc2Zlcl9jb25maWdfZmxhZ19mb3Jfc2xhdmUgZW51bWVyYXRpb24gaWYgdGhlIHRyYW5zZmVyCisgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGZvciBzbGF2ZS4qLworfSBkc3BpX3RyYW5zZmVyX3Q7CisKKy8qISBAYnJpZWYgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgaGFuZGxlIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFuc2FjdGlvbmFsIEFQSS4gKi8KK3N0cnVjdCBfZHNwaV9tYXN0ZXJfaGFuZGxlCit7CisgICAgdWludDMyX3QgYml0c1BlckZyYW1lOyAgICAgICAgIC8qITwgVGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJpdHMgcGVyIGZyYW1lLiAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IGNvbW1hbmQ7ICAgICAvKiE8IFRoZSBkZXNpcmVkIGRhdGEgY29tbWFuZC4gKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBsYXN0Q29tbWFuZDsgLyohPCBUaGUgZGVzaXJlZCBsYXN0IGRhdGEgY29tbWFuZC4gKi8KKworICAgIHVpbnQ4X3QgZmlmb1NpemU7IC8qITwgRklGTyBkYXRhU2l6ZS4gKi8KKworICAgIHZvbGF0aWxlIGJvb2wgaXNQY3NBY3RpdmVBZnRlclRyYW5zZmVyOyAvKiE8IEluZGljYXRlcyB3aGV0aGVyIHRoZSBQQ1Mgc2lnbmFsIGlzIGFjdGl2ZSBhZnRlciB0aGUgbGFzdCBmcmFtZSB0cmFuc2Zlci4qLworICAgIHZvbGF0aWxlIGJvb2wgaXNUaGVyZUV4dHJhQnl0ZTsgICAgICAgICAvKiE8IEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBleHRyYSBieXRlcy4qLworCisgICAgdWludDhfdCAqdm9sYXRpbGUgdHhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgU2VuZCBidWZmZXIuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgcnhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7ICAgIC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHNlbmQuKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsgLyohPCBBIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gcmVjZWl2ZS4qLworICAgIHNpemVfdCB0b3RhbEJ5dGVDb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgbnVtYmVyIG9mIHRyYW5zZmVyIGJ5dGVzKi8KKworICAgIHZvbGF0aWxlIHVpbnQ4X3Qgc3RhdGU7IC8qITwgRFNQSSB0cmFuc2ZlciBzdGF0ZSwgc2VlIF9kc3BpX3RyYW5zZmVyX3N0YXRlLiovCisKKyAgICBkc3BpX21hc3Rlcl90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IENvbXBsZXRpb24gY2FsbGJhY2suICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDYWxsYmFjayB1c2VyIGRhdGEuICovCit9OworCisvKiEgQGJyaWVmIERTUEkgc2xhdmUgdHJhbnNmZXIgaGFuZGxlIHN0cnVjdHVyZSB1c2VkIGZvciB0aGUgdHJhbnNhY3Rpb25hbCBBUEkuICovCitzdHJ1Y3QgX2RzcGlfc2xhdmVfaGFuZGxlCit7CisgICAgdWludDMyX3QgYml0c1BlckZyYW1lOyAgICAgICAgICAvKiE8IFRoZSBkZXNpcmVkIG51bWJlciBvZiBiaXRzIHBlciBmcmFtZS4gKi8KKyAgICB2b2xhdGlsZSBib29sIGlzVGhlcmVFeHRyYUJ5dGU7IC8qITwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlcmUgYXJlIGV4dHJhIGJ5dGVzLiovCisKKyAgICB1aW50OF90ICp2b2xhdGlsZSB0eERhdGE7ICAgICAgICAgICAgICAgICAgLyohPCBTZW5kIGJ1ZmZlci4gKi8KKyAgICB1aW50OF90ICp2b2xhdGlsZSByeERhdGE7ICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIGJ1ZmZlci4gKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgcmVtYWluaW5nU2VuZEJ5dGVDb3VudDsgICAgLyohPCBBIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gc2VuZC4qLworICAgIHZvbGF0aWxlIHNpemVfdCByZW1haW5pbmdSZWNlaXZlQnl0ZUNvdW50OyAvKiE8IEEgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyB0byByZWNlaXZlLiovCisgICAgc2l6ZV90IHRvdGFsQnl0ZUNvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBudW1iZXIgb2YgdHJhbnNmZXIgYnl0ZXMqLworCisgICAgdm9sYXRpbGUgdWludDhfdCBzdGF0ZTsgLyohPCBEU1BJIHRyYW5zZmVyIHN0YXRlLiovCisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBlcnJvckNvdW50OyAvKiE8IEVycm9yIGNvdW50IGZvciBzbGF2ZSB0cmFuc2Zlci4qLworCisgICAgZHNwaV9zbGF2ZV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IENvbXBsZXRpb24gY2FsbGJhY2suICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENhbGxiYWNrIHVzZXIgZGF0YS4gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qX2NwbHVzcGx1cyovCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIERTUEkgbWFzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERTUEkgbWFzdGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgYW4gZXhhbXBsZSB1c2UgY2FzZS4KKyAqICBAY29kZQorICogICBkc3BpX21hc3Rlcl9jb25maWdfdCAgbWFzdGVyQ29uZmlnOworICogICBtYXN0ZXJDb25maWcud2hpY2hDdGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGtEU1BJX0N0YXIwOworICogICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iYXVkUmF0ZSAgICAgICAgICAgICAgICAgICAgICA9IDUwMDAwMDAwMFU7CisgKiAgIG1hc3RlckNvbmZpZy5jdGFyQ29uZmlnLmJpdHNQZXJGcmFtZSAgICAgICAgICAgICAgICAgID0gODsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BvbCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBrRFNQSV9DbG9ja1BvbGFyaXR5QWN0aXZlSGlnaDsKKyAqICAgbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuY3BoYSAgICAgICAgICAgICAgICAgICAgICAgICAgPSBrRFNQSV9DbG9ja1BoYXNlRmlyc3RFZGdlOworICogICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5kaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgICA9IGtEU1BJX01zYkZpcnN0OworICogICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5wY3NUb1Nja0RlbGF5SW5OYW5vU2VjICAgICAgICA9IDEwMDAwMDAwMDBVIC8gbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuYmF1ZFJhdGUgOworICogICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5sYXN0U2NrVG9QY3NEZWxheUluTmFub1NlYyAgICA9IDEwMDAwMDAwMDBVIC8gbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuYmF1ZFJhdGUgOworICogICBtYXN0ZXJDb25maWcuY3RhckNvbmZpZy5iZXR3ZWVuVHJhbnNmZXJEZWxheUluTmFub1NlYyA9IDEwMDAwMDAwMDBVIC8gbWFzdGVyQ29uZmlnLmN0YXJDb25maWcuYmF1ZFJhdGUgOworICogICBtYXN0ZXJDb25maWcud2hpY2hQY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGtEU1BJX1BjczA7CisgKiAgIG1hc3RlckNvbmZpZy5wY3NBY3RpdmVIaWdoT3JMb3cgICAgICAgICAgICAgICAgICAgICAgID0ga0RTUElfUGNzQWN0aXZlTG93OworICogICBtYXN0ZXJDb25maWcuZW5hYmxlQ29udGludW91c1NDSyAgICAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICogICBtYXN0ZXJDb25maWcuZW5hYmxlUnhGaWZvT3ZlcldyaXRlICAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICogICBtYXN0ZXJDb25maWcuZW5hYmxlTW9kaWZpZWRUaW1pbmdGb3JtYXQgICAgICAgICAgICAgICA9IGZhbHNlOworICogICBtYXN0ZXJDb25maWcuc2FtcGxlUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGtEU1BJX1Nja1RvU2luMENsb2NrOworICogICBEU1BJX01hc3RlckluaXQoYmFzZSwgJm1hc3RlckNvbmZpZywgc3JjQ2xvY2tfSHopOworICogIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzdGVyQ29uZmlnIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBkc3BpX21hc3Rlcl9jb25maWdfdC4KKyAqIEBwYXJhbSBzcmNDbG9ja19IeiBNb2R1bGUgc291cmNlIGlucHV0IGNsb2NrIGluIEhlcnR6LgorICovCit2b2lkIERTUElfTWFzdGVySW5pdChTUElfVHlwZSAqYmFzZSwgY29uc3QgZHNwaV9tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZywgdWludDMyX3Qgc3JjQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBkc3BpX21hc3Rlcl9jb25maWdfdCBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBpbml0aWFsaXplZCBmb3IgdGhlIERTUElfTWFzdGVySW5pdCgpLgorICogVXNlcnMgbWF5IHVzZSB0aGUgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHVuY2hhbmdlZCBpbiB0aGUgRFNQSV9NYXN0ZXJJbml0KCkgb3IgbW9kaWZ5IHRoZSBzdHJ1Y3R1cmUKKyAqIGJlZm9yZSBjYWxsaW5nIHRoZSBEU1BJX01hc3RlckluaXQoKS4KKyAqIEV4YW1wbGU6CisgKiBAY29kZQorICogIGRzcGlfbWFzdGVyX2NvbmZpZ190ICBtYXN0ZXJDb25maWc7CisgKiAgRFNQSV9NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKCZtYXN0ZXJDb25maWcpOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBtYXN0ZXJDb25maWcgcG9pbnRlciB0byBkc3BpX21hc3Rlcl9jb25maWdfdCBzdHJ1Y3R1cmUKKyAqLwordm9pZCBEU1BJX01hc3RlckdldERlZmF1bHRDb25maWcoZHNwaV9tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIERTUEkgc2xhdmUgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBEU1BJIHNsYXZlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgYW4gZXhhbXBsZSB1c2UgY2FzZS4KKyAqICBAY29kZQorICogICBkc3BpX3NsYXZlX2NvbmZpZ190ICBzbGF2ZUNvbmZpZzsKKyAqICBzbGF2ZUNvbmZpZy0+d2hpY2hDdGFyICAgICAgICAgICAgICAgICAgPSBrRFNQSV9DdGFyMDsKKyAqICBzbGF2ZUNvbmZpZy0+Y3RhckNvbmZpZy5iaXRzUGVyRnJhbWUgICAgPSA4OworICogIHNsYXZlQ29uZmlnLT5jdGFyQ29uZmlnLmNwb2wgICAgICAgICAgICA9IGtEU1BJX0Nsb2NrUG9sYXJpdHlBY3RpdmVIaWdoOworICogIHNsYXZlQ29uZmlnLT5jdGFyQ29uZmlnLmNwaGEgICAgICAgICAgICA9IGtEU1BJX0Nsb2NrUGhhc2VGaXJzdEVkZ2U7CisgKiAgc2xhdmVDb25maWctPmVuYWJsZUNvbnRpbnVvdXNTQ0sgICAgICAgID0gZmFsc2U7CisgKiAgc2xhdmVDb25maWctPmVuYWJsZVJ4Rmlmb092ZXJXcml0ZSAgICAgID0gZmFsc2U7CisgKiAgc2xhdmVDb25maWctPmVuYWJsZU1vZGlmaWVkVGltaW5nRm9ybWF0ID0gZmFsc2U7CisgKiAgc2xhdmVDb25maWctPnNhbXBsZVBvaW50ICAgICAgICAgICAgICAgID0ga0RTUElfU2NrVG9TaW4wQ2xvY2s7CisgKiAgIERTUElfU2xhdmVJbml0KGJhc2UsICZzbGF2ZUNvbmZpZyk7CisgKiAgQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBzbGF2ZUNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgZHNwaV9tYXN0ZXJfY29uZmlnX3QuCisgKi8KK3ZvaWQgRFNQSV9TbGF2ZUluaXQoU1BJX1R5cGUgKmJhc2UsIGNvbnN0IGRzcGlfc2xhdmVfY29uZmlnX3QgKnNsYXZlQ29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZHNwaV9zbGF2ZV9jb25maWdfdCBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHZhbHVlLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgZm9yIHRoZSBEU1BJX1NsYXZlSW5pdCgpLgorICogVXNlcnMgbWF5IHVzZSB0aGUgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHVuY2hhbmdlZCBpbiB0aGUgRFNQSV9TbGF2ZUluaXQoKSBvciBtb2RpZnkgdGhlIHN0cnVjdHVyZQorICogYmVmb3JlIGNhbGxpbmcgdGhlIERTUElfU2xhdmVJbml0KCkuCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogIGRzcGlfc2xhdmVfY29uZmlnX3QgIHNsYXZlQ29uZmlnOworICogIERTUElfU2xhdmVHZXREZWZhdWx0Q29uZmlnKCZzbGF2ZUNvbmZpZyk7CisgKiBAZW5kY29kZQorICogQHBhcmFtIHNsYXZlQ29uZmlnIFBvaW50ZXIgdG8gdGhlIGRzcGlfc2xhdmVfY29uZmlnX3Qgc3RydWN0dXJlLgorICovCit2b2lkIERTUElfU2xhdmVHZXREZWZhdWx0Q29uZmlnKGRzcGlfc2xhdmVfY29uZmlnX3QgKnNsYXZlQ29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGUtaW5pdGlhbGl6ZXMgdGhlIERTUEkgcGVyaXBoZXJhbC4gQ2FsbCB0aGlzIEFQSSB0byBkaXNhYmxlIHRoZSBEU1BJIGNsb2NrLgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKi8KK3ZvaWQgRFNQSV9EZWluaXQoU1BJX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBEU1BJIHBlcmlwaGVyYWwgYW5kIHNldHMgdGhlIE1DUiBNRElTIHRvIDAuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIFBhc3MgdHJ1ZSB0byBlbmFibGUgbW9kdWxlLCBmYWxzZSB0byBkaXNhYmxlIG1vZHVsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfRW5hYmxlKFNQSV9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+TUNSICY9IH5TUElfTUNSX01ESVNfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+TUNSIHw9IFNQSV9NQ1JfTURJU19NQVNLOworICAgIH0KK30KKworLyohCisgKkB9CisqLworCisvKiEKKyAqIEBuYW1lIFN0YXR1cworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBEU1BJIHN0YXR1cyBmbGFnIHN0YXRlLgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcmV0dXJuIERTUEkgc3RhdHVzIChpbiBTUiByZWdpc3RlcikuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgRFNQSV9HZXRTdGF0dXNGbGFncyhTUElfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPlNSKTsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBEU1BJIHN0YXR1cyBmbGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gIGNsZWFycyB0aGUgZGVzaXJlZCBzdGF0dXMgYml0IGJ5IHVzaW5nIGEgd3JpdGUtMS10by1jbGVhci4gVGhlIHVzZXIgcGFzc2VzIGluIHRoZSBiYXNlIGFuZCB0aGUKKyAqIGRlc2lyZWQgc3RhdHVzIGJpdCB0byBjbGVhci4gIFRoZSBsaXN0IG9mIHN0YXR1cyBiaXRzIGlzIGRlZmluZWQgaW4gdGhlIGRzcGlfc3RhdHVzX2FuZF9pbnRlcnJ1cHRfcmVxdWVzdF90LiBUaGUKKyAqIGZ1bmN0aW9uIHVzZXMgdGhlc2UgYml0IHBvc2l0aW9ucyBpbiBpdHMgYWxnb3JpdGhtIHRvIGNsZWFyIHRoZSBkZXNpcmVkIGZsYWcgc3RhdGUuCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeENvbXBsZXRlRmxhZ3xrRFNQSV9FbmRPZlF1ZXVlRmxhZyk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIHN0YXR1c0ZsYWdzIFRoZSBzdGF0dXMgZmxhZyB1c2VkIGZyb20gdGhlIHR5cGUgZHNwaV9mbGFncy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfQ2xlYXJTdGF0dXNGbGFncyhTUElfVHlwZSAqYmFzZSwgdWludDMyX3Qgc3RhdHVzRmxhZ3MpCit7CisgICAgYmFzZS0+U1IgPSBzdGF0dXNGbGFnczsgLyohPCBUaGUgc3RhdHVzIGZsYWdzIGFyZSBjbGVhcmVkIGJ5IHdyaXRpbmcgMSAodzFjKS4qLworfQorCisvKiEKKyAqQH0KKyovCisKKy8qIQorICogQG5hbWUgSW50ZXJydXB0cworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBEU1BJIGludGVycnVwdHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSB2YXJpb3VzIGludGVycnVwdCBtYXNrcyBvZiB0aGUgRFNQSS4gIFRoZSBwYXJhbWV0ZXJzIGFyZSBhIGJhc2UgYW5kIGFuIGludGVycnVwdCBtYXNrLgorICogTm90ZSwgZm9yIFR4IEZpbGwgYW5kIFJ4IEZJRk8gZHJhaW4gcmVxdWVzdHMsIGVuYWJsZSB0aGUgaW50ZXJydXB0IHJlcXVlc3QgYW5kIGRpc2FibGUgdGhlIERNQSByZXF1ZXN0LgorICoKKyAqIEBjb2RlCisgKiAgRFNQSV9FbmFibGVJbnRlcnJ1cHRzKGJhc2UsIGtEU1BJX1R4Q29tcGxldGVJbnRlcnJ1cHRFbmFibGUgfCBrRFNQSV9FbmRPZlF1ZXVlSW50ZXJydXB0RW5hYmxlICk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgVGhlIGludGVycnVwdCBtYXNrOyB1c2UgdGhlIGVudW0gX2RzcGlfaW50ZXJydXB0X2VuYWJsZS4KKyAqLwordm9pZCBEU1BJX0VuYWJsZUludGVycnVwdHMoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgRFNQSSBpbnRlcnJ1cHRzLgorICoKKyAqIEBjb2RlCisgKiAgRFNQSV9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrRFNQSV9UeENvbXBsZXRlSW50ZXJydXB0RW5hYmxlIHwga0RTUElfRW5kT2ZRdWV1ZUludGVycnVwdEVuYWJsZSApOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHQgbWFzazsgdXNlIHRoZSBlbnVtIF9kc3BpX2ludGVycnVwdF9lbmFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEU1BJX0Rpc2FibGVJbnRlcnJ1cHRzKFNQSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlJTRVIgJj0gfm1hc2s7Cit9CisKKy8qIQorICpAfQorKi8KKworLyohCisgKiBAbmFtZSBETUEgQ29udHJvbAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBEU1BJIERNQSByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgUnggYW5kIFR4IERNQSBtYXNrIG9mIHRoZSBEU1BJLiAgVGhlIHBhcmFtZXRlcnMgYXJlIGEgYmFzZSBhbmQgYSBETUEgbWFzay4KKyAqIEBjb2RlCisgKiAgRFNQSV9FbmFibGVETUEoYmFzZSwga0RTUElfVHhEbWFFbmFibGUgfCBrRFNQSV9SeERtYUVuYWJsZSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgVGhlIGludGVycnVwdCBtYXNrOyB1c2UgdGhlIGVudW0gZHNwaV9kbWFfZW5hYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9FbmFibGVETUEoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+UlNFUiB8PSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyB0aGUgRFNQSSBETUEgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFJ4IGFuZCBUeCBETUEgbWFzayBvZiB0aGUgRFNQSS4gIFRoZSBwYXJhbWV0ZXJzIGFyZSBhIGJhc2UgYW5kIGEgRE1BIG1hc2suCisgKiBAY29kZQorICogIFNQSV9EaXNhYmxlRE1BKGJhc2UsIGtEU1BJX1R4RG1hRW5hYmxlIHwga0RTUElfUnhEbWFFbmFibGUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHQgbWFzazsgdXNlIHRoZSBlbnVtIGRzcGlfZG1hX2VuYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIERTUElfRGlzYWJsZURNQShTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5SU0VSICY9IH5tYXNrOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBEU1BJIG1hc3RlciBQVVNIUiBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoZSBETUEgb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgRFNQSSBtYXN0ZXIgUFVTSFIgZGF0YSByZWdpc3RlciBhZGRyZXNzIGJlY2F1c2UgdGhpcyB2YWx1ZSBpcyBuZWVkZWQgZm9yIHRoZSBETUEgb3BlcmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHJldHVybiBUaGUgRFNQSSBtYXN0ZXIgUFVTSFIgZGF0YSByZWdpc3RlciBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IERTUElfTWFzdGVyR2V0VHhSZWdpc3RlckFkZHJlc3MoU1BJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuICh1aW50MzJfdCkgJiAoYmFzZS0+UFVTSFIpOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBEU1BJIHNsYXZlIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhlIERNQSBvcGVyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBEU1BJIHNsYXZlIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcyBhcyB0aGlzIHZhbHVlIGlzIG5lZWRlZCBmb3IgdGhlIERNQSBvcGVyYXRpb24uCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcmV0dXJuIFRoZSBEU1BJIHNsYXZlIFBVU0hSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBEU1BJX1NsYXZlR2V0VHhSZWdpc3RlckFkZHJlc3MoU1BJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuICh1aW50MzJfdCkgJiAoYmFzZS0+UFVTSFJfU0xBVkUpOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBEU1BJIFBPUFIgZGF0YSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgRE1BIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIERTUEkgUE9QUiBkYXRhIHJlZ2lzdGVyIGFkZHJlc3MgYXMgdGhpcyB2YWx1ZSBpcyBuZWVkZWQgZm9yIHRoZSBETUEgb3BlcmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHJldHVybiBUaGUgRFNQSSBQT1BSIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBEU1BJX0dldFJ4UmVnaXN0ZXJBZGRyZXNzKFNQSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDMyX3QpICYgKGJhc2UtPlBPUFIpOworfQorCisvKiEKKyAqQH0KKyovCisKKy8qIQorICogQG5hbWUgQnVzIE9wZXJhdGlvbnMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgRFNQSSBmb3IgbWFzdGVyIG9yIHNsYXZlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIG1vZGUgTW9kZSBzZXR0aW5nIChtYXN0ZXIgb3Igc2xhdmUpIG9mIHR5cGUgZHNwaV9tYXN0ZXJfc2xhdmVfbW9kZV90LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9TZXRNYXN0ZXJTbGF2ZU1vZGUoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX3NsYXZlX21vZGVfdCBtb2RlKQoreworICAgIGJhc2UtPk1DUiA9IChiYXNlLT5NQ1IgJiAoflNQSV9NQ1JfTVNUUl9NQVNLKSkgfCBTUElfTUNSX01TVFIobW9kZSk7Cit9CisKKy8qIQorICogQGJyaWVmIFJldHVybnMgd2hldGhlciB0aGUgRFNQSSBtb2R1bGUgaXMgaW4gbWFzdGVyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kdWxlIGlzIGluIG1hc3RlciBtb2RlIG9yIGZhbHNlIGlmIHRoZSBtb2R1bGUgaXMgaW4gc2xhdmUgbW9kZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIERTUElfSXNNYXN0ZXIoU1BJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKSgoYmFzZS0+TUNSKSAmIFNQSV9NQ1JfTVNUUl9NQVNLKTsKK30KKy8qIQorICogQGJyaWVmIFN0YXJ0cyB0aGUgRFNQSSB0cmFuc2ZlcnMgYW5kIGNsZWFycyBIQUxUIGJpdCBpbiBNQ1IuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtb2R1bGUgdG8gc3RhcnQgZGF0YSB0cmFuc2ZlciBpbiBlaXRoZXIgbWFzdGVyIG9yIHNsYXZlIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEU1BJX1N0YXJ0VHJhbnNmZXIoU1BJX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+TUNSICY9IH5TUElfTUNSX0hBTFRfTUFTSzsKK30KKy8qIQorICogQGJyaWVmIFN0b3BzIERTUEkgdHJhbnNmZXJzIGFuZCBzZXRzIHRoZSBIQUxUIGJpdCBpbiBNQ1IuCisgKgorICogVGhpcyBmdW5jdGlvbiBzdG9wcyBkYXRhIHRyYW5zZmVycyBpbiBlaXRoZXIgbWFzdGVyIG9yIHNsYXZlIG1vZGVzLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9TdG9wVHJhbnNmZXIoU1BJX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+TUNSIHw9IFNQSV9NQ1JfSEFMVF9NQVNLOworfQorCisvKiEKKyAqIEBicmllZiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBEU1BJIEZJRk9zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gIGFsbG93cyB0aGUgY2FsbGVyIHRvIGRpc2FibGUvZW5hYmxlIHRoZSBUeCBhbmQgUnggRklGT3MgaW5kZXBlbmRlbnRseS4KKyAqIE5vdGUgdGhhdCB0byBkaXNhYmxlLCBwYXNzIGluIGEgbG9naWMgMCAoZmFsc2UpIGZvciB0aGUgcGFydGljdWxhciBGSUZPIGNvbmZpZ3VyYXRpb24uICBUbyBlbmFibGUsCisgKiBwYXNzIGluIGEgbG9naWMgMSAodHJ1ZSkuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlVHhGaWZvIERpc2FibGVzIChmYWxzZSkgdGhlIFRYIEZJRk87IE90aGVyd2lzZSwgZW5hYmxlcyAodHJ1ZSkgdGhlIFRYIEZJRk8KKyAqIEBwYXJhbSBlbmFibGVSeEZpZm8gRGlzYWJsZXMgKGZhbHNlKSB0aGUgUlggRklGTzsgT3RoZXJ3aXNlLCBlbmFibGVzICh0cnVlKSB0aGUgUlggRklGTworICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9TZXRGaWZvRW5hYmxlKFNQSV9UeXBlICpiYXNlLCBib29sIGVuYWJsZVR4RmlmbywgYm9vbCBlbmFibGVSeEZpZm8pCit7CisgICAgYmFzZS0+TUNSID0gKGJhc2UtPk1DUiAmICh+KFNQSV9NQ1JfRElTX1JYRl9NQVNLIHwgU1BJX01DUl9ESVNfVFhGX01BU0spKSkgfCBTUElfTUNSX0RJU19UWEYoIWVuYWJsZVR4RmlmbykgfAorICAgICAgICAgICAgICAgIFNQSV9NQ1JfRElTX1JYRighZW5hYmxlUnhGaWZvKTsKK30KKworLyohCisgKiBAYnJpZWYgRmx1c2hlcyB0aGUgRFNQSSBGSUZPcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBmbHVzaFR4RmlmbyBGbHVzaGVzICh0cnVlKSB0aGUgVHggRklGTzsgT3RoZXJ3aXNlLCBkb2VzIG5vdCBmbHVzaCAoZmFsc2UpIHRoZSBUeCBGSUZPCisgKiBAcGFyYW0gZmx1c2hSeEZpZm8gRmx1c2hlcyAodHJ1ZSkgdGhlIFJ4IEZJRk87IE90aGVyd2lzZSwgZG9lcyBub3QgZmx1c2ggKGZhbHNlKSB0aGUgUnggRklGTworICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9GbHVzaEZpZm8oU1BJX1R5cGUgKmJhc2UsIGJvb2wgZmx1c2hUeEZpZm8sIGJvb2wgZmx1c2hSeEZpZm8pCit7CisgICAgYmFzZS0+TUNSID0gKGJhc2UtPk1DUiAmICh+KFNQSV9NQ1JfQ0xSX1RYRl9NQVNLIHwgU1BJX01DUl9DTFJfUlhGX01BU0spKSkgfCBTUElfTUNSX0NMUl9UWEYoZmx1c2hUeEZpZm8pIHwKKyAgICAgICAgICAgICAgICBTUElfTUNSX0NMUl9SWEYoZmx1c2hSeEZpZm8pOworfQorCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBEU1BJIHBlcmlwaGVyYWwgY2hpcCBzZWxlY3QgcG9sYXJpdHkgc2ltdWx0YW5lb3VzbHkuCisgKiBGb3IgZXhhbXBsZSwgUENTMCBhbmQgUENTMSBhcmUgc2V0IHRvIGFjdGl2ZSBsb3cgYW5kIG90aGVyIFBDUyBpcyBzZXQgdG8gYWN0aXZlIGhpZ2guIE5vdGUgdGhhdCB0aGUgbnVtYmVyIG9mCisgKiBQQ1NzIGlzIHNwZWNpZmljIHRvIHRoZSBkZXZpY2UuCisgKiBAY29kZQorICogIERTUElfU2V0QWxsUGNzUG9sYXJpdHkoYmFzZSwga0RTUElfUGNzMEFjdGl2ZUxvdyB8IGtEU1BJX1BjczFBY3RpdmVMb3cpOworICAgQGVuZGNvZGUKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgVGhlIFBDUyBwb2xhcml0eSBtYXNrOyB1c2UgdGhlIGVudW0gX2RzcGlfcGNzX3BvbGFyaXR5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9TZXRBbGxQY3NQb2xhcml0eShTUElfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5NQ1IgPSAoYmFzZS0+TUNSICYgflNQSV9NQ1JfUENTSVNfTUFTSykgfCBTUElfTUNSX1BDU0lTKG1hc2spOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBEU1BJIGJhdWQgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiAgdGFrZXMgaW4gdGhlIGRlc2lyZWQgYmF1ZFJhdGVfQnBzIChiYXVkIHJhdGUpIGFuZCBjYWxjdWxhdGVzIHRoZSBuZWFyZXN0IHBvc3NpYmxlIGJhdWQgcmF0ZSB3aXRob3V0CisgKiBleGNlZWRpbmcgdGhlIGRlc2lyZWQgYmF1ZCByYXRlLCBhbmQgcmV0dXJucyB0aGUgY2FsY3VsYXRlZCBiYXVkIHJhdGUgaW4gYml0cy1wZXItc2Vjb25kLiBJdCByZXF1aXJlcyB0aGF0IHRoZQorICogY2FsbGVyIGFsc28gcHJvdmlkZSB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGUgc291cmNlIGNsb2NrIChpbiBIZXJ0eikuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gd2hpY2hDdGFyIFRoZSBkZXNpcmVkIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIFJlZ2lzdGVyIChDVEFSKSBvZiB0aGUgdHlwZSBkc3BpX2N0YXJfc2VsZWN0aW9uX3QKKyAqIEBwYXJhbSBiYXVkUmF0ZV9CcHMgVGhlIGRlc2lyZWQgYmF1ZCByYXRlIGluIGJpdHMgcGVyIHNlY29uZAorICogQHBhcmFtIHNyY0Nsb2NrX0h6IE1vZHVsZSBzb3VyY2UgaW5wdXQgY2xvY2sgaW4gSGVydHoKKyAqIEByZXR1cm4gVGhlIGFjdHVhbCBjYWxjdWxhdGVkIGJhdWQgcmF0ZQorICovCit1aW50MzJfdCBEU1BJX01hc3RlclNldEJhdWRSYXRlKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiYXVkUmF0ZV9CcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgTWFudWFsbHkgY29uZmlndXJlcyB0aGUgZGVsYXkgcHJlc2NhbGVyIGFuZCBzY2FsZXIgZm9yIGEgcGFydGljdWxhciBDVEFSLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgUENTIHRvIFNDSyBkZWxheSBwcmUtc2NhbGFyIChQY3NTQ0spIGFuZCBzY2FsYXIgKENTU0NLKSwgYWZ0ZXIgU0NLIGRlbGF5IHByZS1zY2FsYXIKKyAqIChQQVNDKSBhbmQgc2NhbGFyIChBU0MpLCBhbmQgdGhlIGRlbGF5IGFmdGVyIHRyYW5zZmVyIHByZS1zY2FsYXIgKFBEVCkgYW5kIHNjYWxhciAoRFQpLgorICoKKyAqIFRoZXNlIGRlbGF5IG5hbWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHR5cGUgZHNwaV9kZWxheV90eXBlX3QuCisgKgorICogVGhlIHVzZXIgcGFzc2VzIHRoZSBkZWxheSB0byB0aGUgY29uZmlndXJhdGlvbiBhbG9uZyB3aXRoIHRoZSBwcmVzY2FsZXIgYW5kIHNjYWxlciB2YWx1ZS4KKyAqIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGRpcmVjdGx5IHNldCB0aGUgcHJlc2NhbGVyL3NjYWxlciB2YWx1ZXMgaWYgcHJlLWNhbGN1bGF0ZWQgb3IKKyAqIHRvIG1hbnVhbGx5IGluY3JlbWVudCBlaXRoZXIgdmFsdWUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gd2hpY2hDdGFyIFRoZSBkZXNpcmVkIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIFJlZ2lzdGVyIChDVEFSKSBvZiB0eXBlIGRzcGlfY3Rhcl9zZWxlY3Rpb25fdC4KKyAqIEBwYXJhbSBwcmVzY2FsZXIgVGhlIHByZXNjYWxlciBkZWxheSB2YWx1ZSAoY2FuIGJlIGFuIGludGVnZXIgMCwgMSwgMiwgb3IgMykuCisgKiBAcGFyYW0gc2NhbGVyIFRoZSBzY2FsZXIgZGVsYXkgdmFsdWUgKGNhbiBiZSBhbnkgaW50ZWdlciBiZXR3ZWVuIDAgdG8gMTUpLgorICogQHBhcmFtIHdoaWNoRGVsYXkgVGhlIGRlc2lyZWQgZGVsYXkgdG8gY29uZmlndXJlOyBtdXN0IGJlIG9mIHR5cGUgZHNwaV9kZWxheV90eXBlX3QKKyAqLwordm9pZCBEU1BJX01hc3RlclNldERlbGF5U2NhbGVyKAorICAgIFNQSV9UeXBlICpiYXNlLCBkc3BpX2N0YXJfc2VsZWN0aW9uX3Qgd2hpY2hDdGFyLCB1aW50MzJfdCBwcmVzY2FsZXIsIHVpbnQzMl90IHNjYWxlciwgZHNwaV9kZWxheV90eXBlX3Qgd2hpY2hEZWxheSk7CisKKy8qIQorICogQGJyaWVmIENhbGN1bGF0ZXMgdGhlIGRlbGF5IHByZXNjYWxlciBhbmQgc2NhbGVyIGJhc2VkIG9uIHRoZSBkZXNpcmVkIGRlbGF5IGlucHV0IGluIG5hbm9zZWNvbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nLgorICogUENTIHRvIFNDSyBkZWxheSBwcmUtc2NhbGFyIChQQ1NTQ0spIGFuZCBzY2FsYXIgKENTU0NLKSwgb3IKKyAqIEFmdGVyIFNDSyBkZWxheSBwcmUtc2NhbGFyIChQQVNDKSBhbmQgc2NhbGFyIChBU0MpLCBvcgorICogRGVsYXkgYWZ0ZXIgdHJhbnNmZXIgcHJlLXNjYWxhciAoUERUKSBhbmQgc2NhbGFyIChEVCkuCisgKgorICogVGhlc2UgZGVsYXkgbmFtZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgdHlwZSBkc3BpX2RlbGF5X3R5cGVfdC4KKyAqCisgKiBUaGUgdXNlciBwYXNzZXMgd2hpY2ggZGVsYXkgdG8gY29uZmlndXJlIGFsb25nIHdpdGggdGhlIGRlc2lyZWQgZGVsYXkgdmFsdWUgaW4gbmFub3NlY29uZHMuICBUaGUgZnVuY3Rpb24KKyAqIGNhbGN1bGF0ZXMgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHRoZSBwcmVzY2FsZXIgYW5kIHNjYWxlci4gTm90ZSB0aGF0IHJldHVybmluZyB0aGUgY2FsY3VsYXRlZCBkZWxheSBhcyBhbiBleGFjdAorICogZGVsYXkgbWF0Y2ggbWF5IG5vdCBiZSBwb3NzaWJsZS4gSW4gdGhpcyBjYXNlLCB0aGUgY2xvc2VzdCBtYXRjaCBpcyBjYWxjdWxhdGVkIHdpdGhvdXQgZ29pbmcgYmVsb3cgdGhlIGRlc2lyZWQKKyAqIGRlbGF5IHZhbHVlIGlucHV0LgorICogSXQgaXMgcG9zc2libGUgdG8gaW5wdXQgYSB2ZXJ5IGxhcmdlIGRlbGF5IHZhbHVlIHRoYXQgZXhjZWVkcyB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgcGFydCwgaW4gd2hpY2ggY2FzZSB0aGUgbWF4aW11bQorICogc3VwcG9ydGVkIGRlbGF5IGlzIHJldHVybmVkLiBUaGUgaGlnaGVyLWxldmVsIHBlcmlwaGVyYWwgZHJpdmVyIGFsZXJ0cyB0aGUgdXNlciBvZiBhbiBvdXQgb2YgcmFuZ2UgZGVsYXkKKyAqIGlucHV0LgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBhZGRyZXNzLgorICogQHBhcmFtIHdoaWNoQ3RhciBUaGUgZGVzaXJlZCBDbG9jayBhbmQgVHJhbnNmZXIgQXR0cmlidXRlcyBSZWdpc3RlciAoQ1RBUikgb2YgdHlwZSBkc3BpX2N0YXJfc2VsZWN0aW9uX3QuCisgKiBAcGFyYW0gd2hpY2hEZWxheSBUaGUgZGVzaXJlZCBkZWxheSB0byBjb25maWd1cmUsIG11c3QgYmUgb2YgdHlwZSBkc3BpX2RlbGF5X3R5cGVfdAorICogQHBhcmFtIHNyY0Nsb2NrX0h6IE1vZHVsZSBzb3VyY2UgaW5wdXQgY2xvY2sgaW4gSGVydHoKKyAqIEBwYXJhbSBkZWxheVRpbWVJbk5hbm9TZWMgVGhlIGRlc2lyZWQgZGVsYXkgdmFsdWUgaW4gbmFub3NlY29uZHMuCisgKiBAcmV0dXJuIFRoZSBhY3R1YWwgY2FsY3VsYXRlZCBkZWxheSB2YWx1ZS4KKyAqLwordWludDMyX3QgRFNQSV9NYXN0ZXJTZXREZWxheVRpbWVzKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfY3Rhcl9zZWxlY3Rpb25fdCB3aGljaEN0YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9kZWxheV90eXBlX3Qgd2hpY2hEZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19IeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZWxheVRpbWVJbk5hbm9TZWMpOworCisvKiEKKyAqIEBicmllZiBXcml0ZXMgZGF0YSBpbnRvIHRoZSBkYXRhIGJ1ZmZlciBmb3IgbWFzdGVyIG1vZGUuCisgKgorICogSW4gbWFzdGVyIG1vZGUsIHRoZSAxNi1iaXQgZGF0YSBpcyBhcHBlbmRlZCB0byB0aGUgMTYtYml0IGNvbW1hbmQgaW5mby4gVGhlIGNvbW1hbmQgcG9ydGlvbgorICogcHJvdmlkZXMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhLCBzdWNoIGFzIHRoZSBvcHRpb25hbCBjb250aW51b3VzIGNoaXAgc2VsZWN0CisgKiBvcGVyYXRpb24gYmV0d2VlbiB0cmFuc2ZlcnMsIHRoZSBkZXNpcmVkIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIHJlZ2lzdGVyIHRvIHVzZSBmb3IgdGhlCisgKiBhc3NvY2lhdGVkIFNQSSBmcmFtZSwgdGhlIGRlc2lyZWQgUENTIHNpZ25hbCB0byB1c2UgZm9yIHRoZSBkYXRhIHRyYW5zZmVyLCB3aGV0aGVyIHRoZSBjdXJyZW50CisgKiB0cmFuc2ZlciBpcyB0aGUgbGFzdCBpbiB0aGUgcXVldWUsIGFuZCB3aGV0aGVyIHRvIGNsZWFyIHRoZSB0cmFuc2ZlciBjb3VudCAobm9ybWFsbHkgbmVlZGVkIHdoZW4KKyAqIHNlbmRpbmcgdGhlIGZpcnN0IGZyYW1lIG9mIGEgZGF0YSBwYWNrZXQpLiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogIGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190IGNvbW1hbmRDb25maWc7CisgKiAgY29tbWFuZENvbmZpZy5pc1Bjc0NvbnRpbnVvdXMgPSB0cnVlOworICogIGNvbW1hbmRDb25maWcud2hpY2hDdGFyID0ga0RTUElDdGFyMDsKKyAqICBjb21tYW5kQ29uZmlnLndoaWNoUGNzID0ga0RTUElQY3MwOworICogIGNvbW1hbmRDb25maWcuY2xlYXJUcmFuc2ZlckNvdW50ID0gZmFsc2U7CisgKiAgY29tbWFuZENvbmZpZy5pc0VuZE9mUXVldWUgPSBmYWxzZTsKKyAqICBEU1BJX01hc3RlcldyaXRlRGF0YShiYXNlLCAmY29tbWFuZENvbmZpZywgZGF0YVdvcmQpOworICAgQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb21tYW5kIFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgc3RydWN0dXJlLgorICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgd29yZCB0byBiZSBzZW50LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRFNQSV9NYXN0ZXJXcml0ZURhdGEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190ICpjb21tYW5kLCB1aW50MTZfdCBkYXRhKQoreworICAgIGJhc2UtPlBVU0hSID0gU1BJX1BVU0hSX0NPTlQoY29tbWFuZC0+aXNQY3NDb250aW51b3VzKSB8IFNQSV9QVVNIUl9DVEFTKGNvbW1hbmQtPndoaWNoQ3RhcikgfAorICAgICAgICAgICAgICAgICAgU1BJX1BVU0hSX1BDUyhjb21tYW5kLT53aGljaFBjcykgfCBTUElfUFVTSFJfRU9RKGNvbW1hbmQtPmlzRW5kT2ZRdWV1ZSkgfAorICAgICAgICAgICAgICAgICAgU1BJX1BVU0hSX0NUQ05UKGNvbW1hbmQtPmNsZWFyVHJhbnNmZXJDb3VudCkgfCBTUElfUFVTSFJfVFhEQVRBKGRhdGEpOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBpbml0aWFsaXplZCBmb3IgdXNlIGluIHRoZSBEU1BJX01hc3RlcldyaXRlX3h4KCkuCisgKiBVc2VycyBtYXkgdXNlIHRoZSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdW5jaGFuZ2VkIGluIHRoZSBEU1BJX01hc3RlcldyaXRlX3h4KCkgb3IgbW9kaWZ5IHRoZSBzdHJ1Y3R1cmUKKyAqIGJlZm9yZSBjYWxsaW5nIHRoZSBEU1BJX01hc3RlcldyaXRlX3h4KCkuCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogIGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190ICBjb21tYW5kOworICogIERTUElfR2V0RGVmYXVsdERhdGFDb21tYW5kQ29uZmlnKCZjb21tYW5kKTsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29tbWFuZCBQb2ludGVyIHRvIHRoZSBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgRFNQSV9HZXREZWZhdWx0RGF0YUNvbW1hbmRDb25maWcoZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3QgKmNvbW1hbmQpOworCisvKiEKKyAqIEBicmllZiBXcml0ZXMgZGF0YSBpbnRvIHRoZSBkYXRhIGJ1ZmZlciBtYXN0ZXIgbW9kZSBhbmQgd2FpdHMgdGlsbCBjb21wbGV0ZSB0byByZXR1cm4uCisgKgorICogSW4gbWFzdGVyIG1vZGUsIHRoZSAxNi1iaXQgZGF0YSBpcyBhcHBlbmRlZCB0byB0aGUgMTYtYml0IGNvbW1hbmQgaW5mby4gVGhlIGNvbW1hbmQgcG9ydGlvbgorICogcHJvdmlkZXMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBkYXRhLCBzdWNoIGFzIHRoZSBvcHRpb25hbCBjb250aW51b3VzIGNoaXAgc2VsZWN0CisgKiBvcGVyYXRpb24gYmV0d2VlbiB0cmFuc2ZlcnMsIHRoZSBkZXNpcmVkIENsb2NrIGFuZCBUcmFuc2ZlciBBdHRyaWJ1dGVzIHJlZ2lzdGVyIHRvIHVzZSBmb3IgdGhlCisgKiBhc3NvY2lhdGVkIFNQSSBmcmFtZSwgdGhlIGRlc2lyZWQgUENTIHNpZ25hbCB0byB1c2UgZm9yIHRoZSBkYXRhIHRyYW5zZmVyLCB3aGV0aGVyIHRoZSBjdXJyZW50CisgKiB0cmFuc2ZlciBpcyB0aGUgbGFzdCBpbiB0aGUgcXVldWUsIGFuZCB3aGV0aGVyIHRvIGNsZWFyIHRoZSB0cmFuc2ZlciBjb3VudCAobm9ybWFsbHkgbmVlZGVkIHdoZW4KKyAqIHNlbmRpbmcgdGhlIGZpcnN0IGZyYW1lIG9mIGEgZGF0YSBwYWNrZXQpLiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogIGRzcGlfY29tbWFuZF9jb25maWdfdCBjb21tYW5kQ29uZmlnOworICogIGNvbW1hbmRDb25maWcuaXNQY3NDb250aW51b3VzID0gdHJ1ZTsKKyAqICBjb21tYW5kQ29uZmlnLndoaWNoQ3RhciA9IGtEU1BJQ3RhcjA7CisgKiAgY29tbWFuZENvbmZpZy53aGljaFBjcyA9IGtEU1BJUGNzMTsKKyAqICBjb21tYW5kQ29uZmlnLmNsZWFyVHJhbnNmZXJDb3VudCA9IGZhbHNlOworICogIGNvbW1hbmRDb25maWcuaXNFbmRPZlF1ZXVlID0gZmFsc2U7CisgKiAgRFNQSV9NYXN0ZXJXcml0ZURhdGFCbG9ja2luZyhiYXNlLCAmY29tbWFuZENvbmZpZywgZGF0YVdvcmQpOworICogQGVuZGNvZGUKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gdW50aWwgYWZ0ZXIgdGhlIHRyYW5zbWl0IGlzIGNvbXBsZXRlLiBBbHNvIG5vdGUgdGhhdCB0aGUgRFNQSSBtdXN0IGJlCisgKiBlbmFibGVkIGFuZCBydW5uaW5nIHRvIHRyYW5zbWl0IGRhdGEgKE1DUltNRElTXSAmIFtIQUxUXSA9IDApLiBCZWNhdXNlIHRoZSBTUEkgaXMgYSBzeW5jaHJvbm91cyBwcm90b2NvbCwKKyAqIHRoZSByZWNlaXZlZCBkYXRhIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSB0cmFuc21pdCBjb21wbGV0ZXMuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGFkZHJlc3MuCisgKiBAcGFyYW0gY29tbWFuZCBQb2ludGVyIHRvIHRoZSBjb21tYW5kIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHdvcmQgdG8gYmUgc2VudC4KKyAqLwordm9pZCBEU1BJX01hc3RlcldyaXRlRGF0YUJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCBkc3BpX2NvbW1hbmRfZGF0YV9jb25maWdfdCAqY29tbWFuZCwgdWludDE2X3QgZGF0YSk7CisKKy8qIQorICogQGJyaWVmIFJldHVybnMgdGhlIERTUEkgY29tbWFuZCB3b3JkIGZvcm1hdHRlZCB0byB0aGUgUFVTSFIgZGF0YSByZWdpc3RlciBiaXQgZmllbGQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0byBwYXNzIGluIHRoZSBkYXRhIGNvbW1hbmQgc3RydWN0dXJlIGFuZCByZXR1cm5zIHRoZSBjb21tYW5kIHdvcmQgZm9ybWF0dGVkCisgKiBhY2NvcmRpbmcgdG8gdGhlIERTUEkgUFVTSFIgcmVnaXN0ZXIgYml0IGZpZWxkIHBsYWNlbWVudC4gVGhlIHVzZXIgY2FuIHRoZW4gIk9SIiB0aGUgcmV0dXJuZWQgY29tbWFuZCB3b3JkIHdpdGggdGhlCisgKiBkZXNpcmVkIGRhdGEgdG8gc2VuZCBhbmQgdXNlIHRoZSBmdW5jdGlvbiBEU1BJX0hBTF9Xcml0ZUNvbW1hbmREYXRhTWFzdGVybW9kZSBvcgorICogRFNQSV9IQUxfV3JpdGVDb21tYW5kRGF0YU1hc3Rlcm1vZGVCbG9ja2luZyB0byB3cml0ZSB0aGUgZW50aXJlIDMyLWJpdCBjb21tYW5kIGRhdGEgd29yZCB0byB0aGUgUFVTSFIuIFRoaXMgaGVscHMKKyAqIGltcHJvdmUgcGVyZm9ybWFuY2UgaW4gY2FzZXMgd2hlcmUgdGhlIGNvbW1hbmQgc3RydWN0dXJlIGlzIGNvbnN0YW50LiBGb3IgZXhhbXBsZSwgdGhlIHVzZXIgY2FsbHMgdGhpcyBmdW5jdGlvbgorICogYmVmb3JlIHN0YXJ0aW5nIGEgdHJhbnNmZXIgdG8gZ2VuZXJhdGUgdGhlIGNvbW1hbmQgd29yZC4gV2hlbiB0aGV5IGFyZSByZWFkeSB0byB0cmFuc21pdCB0aGUgZGF0YSwgdGhleSBPUgorICogdGhpcyBmb3JtYXR0ZWQgY29tbWFuZCB3b3JkIHdpdGggdGhlIGRlc2lyZWQgZGF0YSB0byB0cmFuc21pdC4gVGhpcyBwcm9jZXNzIGluY3JlYXNlcyB0cmFuc21pdCBwZXJmb3JtYW5jZSB3aGVuCisgKiBjb21wYXJlZCB0byBjYWxsaW5nIHNlbmQgZnVuY3Rpb25zLCBzdWNoIGFzIERTUElfSEFMX1dyaXRlRGF0YU1hc3Rlcm1vZGUsICB3aGljaCBmb3JtYXQgdGhlIGNvbW1hbmQgd29yZCBlYWNoIHRpbWUgYQorICogZGF0YSB3b3JkIGlzIHRvIGJlIHNlbnQuCisgKgorICogQHBhcmFtIGNvbW1hbmQgUG9pbnRlciB0byB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIFRoZSBjb21tYW5kIHdvcmQgZm9ybWF0dGVkIHRvIHRoZSBQVVNIUiBkYXRhIHJlZ2lzdGVyIGJpdCBmaWVsZC4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoZHNwaV9jb21tYW5kX2RhdGFfY29uZmlnX3QgKmNvbW1hbmQpCit7CisgICAgLyogRm9ybWF0IHRoZSAxNi1iaXQgY29tbWFuZCB3b3JkIGFjY29yZGluZyB0byB0aGUgUFVTSFIgZGF0YSByZWdpc3RlciBiaXQgZmllbGQqLworICAgIHJldHVybiAodWludDMyX3QpKFNQSV9QVVNIUl9DT05UKGNvbW1hbmQtPmlzUGNzQ29udGludW91cykgfCBTUElfUFVTSFJfQ1RBUyhjb21tYW5kLT53aGljaEN0YXIpIHwKKyAgICAgICAgICAgICAgICAgICAgICBTUElfUFVTSFJfUENTKGNvbW1hbmQtPndoaWNoUGNzKSB8IFNQSV9QVVNIUl9FT1EoY29tbWFuZC0+aXNFbmRPZlF1ZXVlKSB8CisgICAgICAgICAgICAgICAgICAgICAgU1BJX1BVU0hSX0NUQ05UKGNvbW1hbmQtPmNsZWFyVHJhbnNmZXJDb3VudCkpOworfQorCisvKiEKKyAqIEBicmllZiBXcml0ZXMgYSAzMi1iaXQgZGF0YSB3b3JkICgxNi1iaXQgY29tbWFuZCBhcHBlbmRlZCB3aXRoIDE2LWJpdCBkYXRhKSBpbnRvIHRoZSBkYXRhCisgKiAgICAgICAgYnVmZmVyIG1hc3RlciBtb2RlIGFuZCB3YWl0cyB0aWxsIGNvbXBsZXRlIHRvIHJldHVybi4KKyAqCisgKiBJbiB0aGlzIGZ1bmN0aW9uLCB0aGUgdXNlciBtdXN0IGFwcGVuZCB0aGUgMTYtYml0IGRhdGEgdG8gdGhlIDE2LWJpdCBjb21tYW5kIGluZm9ybWF0aW9uIGFuZCB0aGVuIHByb3ZpZGUgdGhlIHRvdGFsIDMyLWJpdCB3b3JkCisgKiBhcyB0aGUgZGF0YSB0byBzZW5kLgorICogVGhlIGNvbW1hbmQgcG9ydGlvbiBwcm92aWRlcyBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRhdGEsIHN1Y2ggYXMgdGhlIG9wdGlvbmFsIGNvbnRpbnVvdXMgY2hpcCBzZWxlY3Qgb3BlcmF0aW9uCisgKiBiZXR3ZWVuIHRyYW5zZmVycywgdGhlIGRlc2lyZWQgQ2xvY2sgYW5kIFRyYW5zZmVyIEF0dHJpYnV0ZXMgcmVnaXN0ZXIgdG8gdXNlIGZvciB0aGUgYXNzb2NpYXRlZCBTUEkgZnJhbWUsIHRoZSBkZXNpcmVkIFBDUworICogc2lnbmFsIHRvIHVzZSBmb3IgdGhlIGRhdGEgdHJhbnNmZXIsIHdoZXRoZXIgdGhlIGN1cnJlbnQgdHJhbnNmZXIgaXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlLCBhbmQgd2hldGhlciB0byBjbGVhciB0aGUKKyAqIHRyYW5zZmVyIGNvdW50IChub3JtYWxseSBuZWVkZWQgd2hlbiBzZW5kaW5nIHRoZSBmaXJzdCBmcmFtZSBvZiBhIGRhdGEgcGFja2V0KS4gVGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBhcHBlbmRpbmcgdGhpcyBjb21tYW5kIHdpdGggdGhlIGRhdGEgdG8gc2VuZC4gVGhpcyBpcyBhbiBleGFtcGxlOgorICogQGNvZGUKKyAqICBkYXRhV29yZCA9IDwxNi1iaXQgY29tbWFuZD4gfCA8MTYtYml0IGRhdGE+OworICogIERTUElfTWFzdGVyV3JpdGVDb21tYW5kRGF0YUJsb2NraW5nKGJhc2UsIGRhdGFXb3JkKTsKKyAqIEBlbmRjb2RlCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHVudGlsIGFmdGVyIHRoZSB0cmFuc21pdCBpcyBjb21wbGV0ZS4gQWxzbyBub3RlIHRoYXQgdGhlIERTUEkgbXVzdCBiZQorICogZW5hYmxlZCBhbmQgcnVubmluZyB0byB0cmFuc21pdCBkYXRhIChNQ1JbTURJU10gJiBbSEFMVF0gPSAwKS4KKyAqIEJlY2F1c2UgdGhlIFNQSSBpcyBhIHN5bmNocm9ub3VzIHByb3RvY29sLCB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBhdmFpbGFibGUgd2hlbiB0aGUgdHJhbnNtaXQgY29tcGxldGVzLgorICoKKyAqICBGb3IgYSBibG9ja2luZyBwb2xsaW5nIHRyYW5zZmVyLCBzZWUgbWV0aG9kcyBiZWxvdy4KKyAqICBPcHRpb24gMToKKyogICB1aW50MzJfdCBjb21tYW5kX3RvX3NlbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJmNvbW1hbmQpOworKiAgIHVpbnQzMl90IGRhdGEwID0gY29tbWFuZF90b19zZW5kIHwgZGF0YV9uZWVkX3RvX3NlbmRfMDsKKyogICB1aW50MzJfdCBkYXRhMSA9IGNvbW1hbmRfdG9fc2VuZCB8IGRhdGFfbmVlZF90b19zZW5kXzE7CisqICAgdWludDMyX3QgZGF0YTIgPSBjb21tYW5kX3RvX3NlbmQgfCBkYXRhX25lZWRfdG9fc2VuZF8yOworKgorKiAgIERTUElfTWFzdGVyV3JpdGVDb21tYW5kRGF0YUJsb2NraW5nKGJhc2UsZGF0YTApOworKiAgIERTUElfTWFzdGVyV3JpdGVDb21tYW5kRGF0YUJsb2NraW5nKGJhc2UsZGF0YTEpOworKiAgIERTUElfTWFzdGVyV3JpdGVDb21tYW5kRGF0YUJsb2NraW5nKGJhc2UsZGF0YTIpOworKgorKiAgT3B0aW9uIDI6CisqICAgRFNQSV9NYXN0ZXJXcml0ZURhdGFCbG9ja2luZyhiYXNlLCZjb21tYW5kLGRhdGFfbmVlZF90b19zZW5kXzApOworKiAgIERTUElfTWFzdGVyV3JpdGVEYXRhQmxvY2tpbmcoYmFzZSwmY29tbWFuZCxkYXRhX25lZWRfdG9fc2VuZF8xKTsKKyogICBEU1BJX01hc3RlcldyaXRlRGF0YUJsb2NraW5nKGJhc2UsJmNvbW1hbmQsZGF0YV9uZWVkX3RvX3NlbmRfMik7CisqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHdvcmQgKGNvbW1hbmQgYW5kIGRhdGEgY29tYmluZWQpIHRvIGJlIHNlbnQuCisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJXcml0ZUNvbW1hbmREYXRhQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIHVpbnQzMl90IGRhdGEpOworCisvKiEKKyAqIEBicmllZiBXcml0ZXMgZGF0YSBpbnRvIHRoZSBkYXRhIGJ1ZmZlciBpbiBzbGF2ZSBtb2RlLgorICoKKyAqIEluIHNsYXZlIG1vZGUsIHVwIHRvIDE2LWJpdCB3b3JkcyBtYXkgYmUgd3JpdHRlbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHNlbmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBEU1BJX1NsYXZlV3JpdGVEYXRhKFNQSV9UeXBlICpiYXNlLCB1aW50MzJfdCBkYXRhKQoreworICAgIGJhc2UtPlBVU0hSX1NMQVZFID0gZGF0YTsKK30KKworLyohCisgKiBAYnJpZWYgV3JpdGVzIGRhdGEgaW50byB0aGUgZGF0YSBidWZmZXIgaW4gc2xhdmUgbW9kZSwgd2FpdHMgdGlsbCBkYXRhIHdhcyB0cmFuc21pdHRlZCwgYW5kIHJldHVybnMuCisgKgorICogSW4gc2xhdmUgbW9kZSwgdXAgdG8gMTYtYml0IHdvcmRzIG1heSBiZSB3cml0dGVuLiBUaGUgZnVuY3Rpb24gZmlyc3QgY2xlYXJzIHRoZSB0cmFuc21pdCBjb21wbGV0ZSBmbGFnLCB3cml0ZXMgZGF0YQorICogaW50byBkYXRhIHJlZ2lzdGVyLCBhbmQgZmluYWxseSB3YWl0cyB1bnRpbCB0aGUgZGF0YSBpcyB0cmFuc21pdHRlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHNlbmQuCisgKi8KK3ZvaWQgRFNQSV9TbGF2ZVdyaXRlRGF0YUJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCB1aW50MzJfdCBkYXRhKTsKKworLyohCisgKiBAYnJpZWYgUmVhZHMgZGF0YSBmcm9tIHRoZSBkYXRhIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYWRkcmVzcy4KKyAqIEByZXR1cm4gVGhlIGRhdGEgZnJvbSB0aGUgcmVhZCBkYXRhIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBEU1BJX1JlYWREYXRhKFNQSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYmFzZS0+UE9QUik7Cit9CisKKy8qIQorICpAfQorKi8KKworLyohCisgKiBAbmFtZSBUcmFuc2FjdGlvbmFsCisgKiBAeworICovCisvKlRyYW5zYWN0aW9uYWwgQVBJcyovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEU1BJIG1hc3RlciBoYW5kbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgRFNQSSBoYW5kbGUsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBvdGhlciBEU1BJIHRyYW5zYWN0aW9uYWwgQVBJcy4gIFVzdWFsbHksIGZvciBhCisgKiBzcGVjaWZpZWQgRFNQSSBpbnN0YW5jZSwgIGNhbGwgdGhpcyBBUEkgb25jZSB0byBnZXQgdGhlIGluaXRpYWxpemVkIGhhbmRsZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBEU1BJIGhhbmRsZSBwb2ludGVyIHRvIGRzcGlfbWFzdGVyX2hhbmRsZV90LgorICogQHBhcmFtIGNhbGxiYWNrIERTUEkgY2FsbGJhY2suCisgKiBAcGFyYW0gdXNlckRhdGEgQ2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLgorICovCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgZGF0YSB1c2luZyBwb2xsaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNmZXJzIGRhdGEgdXNpbmcgcG9sbGluZy4gVGhpcyBpcyBhIGJsb2NraW5nIGZ1bmN0aW9uLCB3aGljaCBkb2VzIG5vdCByZXR1cm4gdW50aWwgYWxsIHRyYW5zZmVycworICogaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHRyYW5zZmVyIFBvaW50ZXIgdG8gdGhlIGRzcGlfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiBzdGF0dXNfdC4KKyAqLworc3RhdHVzX3QgRFNQSV9NYXN0ZXJUcmFuc2ZlckJsb2NraW5nKFNQSV9UeXBlICpiYXNlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBtYXN0ZXIgdHJhbnNmZXIgZGF0YSB1c2luZyBpbnRlcnJ1cHRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNmZXJzIGRhdGEgdXNpbmcgaW50ZXJydXB0cy4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyByaWdodCBhd2F5LiBXaGVuIGFsbAorICogZGF0YSBpcyB0cmFuc2ZlcnJlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKworICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gdHJhbnNmZXIgUG9pbnRlciB0byB0aGUgZHNwaV90cmFuc2Zlcl90IHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHN0YXR1c190LgorICovCitzdGF0dXNfdCBEU1BJX01hc3RlclRyYW5zZmVyTm9uQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBtYXN0ZXIgdHJhbnNmZXIgY291bnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBtYXN0ZXIgdHJhbnNmZXIgY291bnQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBieSB1c2luZyB0aGUgbm9uLWJsb2NraW5nIHRyYW5zYWN0aW9uLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJHZXRDb3VudChTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCk7CisKKy8qIQorICogQGJyaWVmIERTUEkgbWFzdGVyIGFib3J0cyBhIHRyYW5zZmVyIHVzaW5nIGFuIGludGVycnVwdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyBhIHRyYW5zZmVyIHVzaW5nIGFuIGludGVycnVwdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvIHRoZSBkc3BpX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLwordm9pZCBEU1BJX01hc3RlclRyYW5zZmVyQWJvcnQoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBEU1BJIE1hc3RlciBJUlEgaGFuZGxlciBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgRFNQSSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBJUlEuCisKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gdGhlIGRzcGlfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICovCit2b2lkIERTUElfTWFzdGVyVHJhbnNmZXJIYW5kbGVJUlEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgRFNQSSBzbGF2ZSBoYW5kbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgRFNQSSBoYW5kbGUsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBvdGhlciBEU1BJIHRyYW5zYWN0aW9uYWwgQVBJcy4gIFVzdWFsbHksIGZvciBhCisgKiBzcGVjaWZpZWQgRFNQSSBpbnN0YW5jZSwgY2FsbCB0aGlzIEFQSSBvbmNlIHRvIGdldCB0aGUgaW5pdGlhbGl6ZWQgaGFuZGxlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgRFNQSSBoYW5kbGUgcG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9oYW5kbGVfdC4KKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2FsbGJhY2sgRFNQSSBjYWxsYmFjay4KKyAqIEBwYXJhbSB1c2VyRGF0YSBDYWxsYmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuCisgKi8KK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9zbGF2ZV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiEKKyAqIEBicmllZiBEU1BJIHNsYXZlIHRyYW5zZmVycyBkYXRhIHVzaW5nIGFuIGludGVycnVwdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYW5zZmVycyBkYXRhIHVzaW5nIGFuIGludGVycnVwdC4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyByaWdodCBhd2F5LiBXaGVuIGFsbAorICogZGF0YSBpcyB0cmFuc2ZlcnJlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvIHRoZSBkc3BpX3NsYXZlX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIHRyYW5zZmVyIFBvaW50ZXIgdG8gdGhlIGRzcGlfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiBzdGF0dXNfdC4KKyAqLworc3RhdHVzX3QgRFNQSV9TbGF2ZVRyYW5zZmVyTm9uQmxvY2tpbmcoU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHNsYXZlIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgc2xhdmUgdHJhbnNmZXIgY291bnQuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBieSB1c2luZyB0aGUgbm9uLWJsb2NraW5nIHRyYW5zYWN0aW9uLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfU2xhdmVUcmFuc2ZlckdldENvdW50KFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpOworCisvKiEKKyAqIEBicmllZiBEU1BJIHNsYXZlIGFib3J0cyBhIHRyYW5zZmVyIHVzaW5nIGFuIGludGVycnVwdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyBhIHRyYW5zZmVyIHVzaW5nIGFuIGludGVycnVwdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvIHRoZSBkc3BpX3NsYXZlX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICovCit2b2lkIERTUElfU2xhdmVUcmFuc2ZlckFib3J0KFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBEU1BJIE1hc3RlciBJUlEgaGFuZGxlciBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgRFNQSSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBJUlEuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLwordm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJIYW5kbGVJUlEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICpAfQorKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLypfY3BsdXNwbHVzKi8KKyAgICAgICAvKiEKKyAgICAgICAgKkB9CisgICAgICAgKi8KKworI2VuZGlmIC8qX0ZTTF9EU1BJX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZWRtYS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9lZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwZDE1MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZWRtYS5jCkBAIC0wLDAgKzEsMTI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZHNwaV9lZG1hLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEZWZpbml0b25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisqIEBicmllZiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmb3IgZHNwaV9tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90LiBUaGUgc3RydWN0dXJlIGlzIHByaXZhdGUuCisqLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGUKK3sKKyAgICBTUElfVHlwZSAqYmFzZTsgICAgICAgICAgICAgICAgICAgIC8qITwgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gKi8KKyAgICBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGU7IC8qITwgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCBoYW5kbGUgKi8KK30gZHNwaV9tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90OworCisvKiEKKyogQGJyaWVmIFN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBkc3BpX3NsYXZlX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdC4gVGhlIHN0cnVjdHVyZSBpcyBwcml2YXRlLgorKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX3NsYXZlX2VkbWFfcHJpdmF0ZV9oYW5kbGUKK3sKKyAgICBTUElfVHlwZSAqYmFzZTsgICAgICAgICAgICAgICAgICAgLyohPCBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLiAqLworICAgIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCAqaGFuZGxlOyAvKiE8IGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgaGFuZGxlICovCit9IGRzcGlfc2xhdmVfZWRtYV9wcml2YXRlX2hhbmRsZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHJvdG90eXBlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyogQGJyaWVmIEVETUFfRHNwaU1hc3RlckNhbGxiYWNrIGFmdGVyIHRoZSBEU1BJIG1hc3RlciB0cmFuc2ZlciBjb21wbGV0ZWQgYnkgdXNpbmcgRURNQS4KKyogVGhpcyBpcyBub3QgYSBwdWJsaWMgQVBJLgorKi8KK3N0YXRpYyB2b2lkIEVETUFfRHNwaU1hc3RlckNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmVkbWFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpnX2RzcGlFZG1hUHJpdmF0ZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmZXJEb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGNkcyk7CisKKy8qIQorKiBAYnJpZWYgRURNQV9Ec3BpU2xhdmVDYWxsYmFjayBhZnRlciB0aGUgRFNQSSBzbGF2ZSB0cmFuc2ZlciBjb21wbGV0ZWQgYnkgdXNpbmcgRURNQS4KKyogVGhpcyBpcyBub3QgYSBwdWJsaWMgQVBJLgorKi8KK3N0YXRpYyB2b2lkIEVETUFfRHNwaVNsYXZlQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqZWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZ19kc3BpRWRtYVByaXZhdGVIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmZXJEb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0Y2RzKTsKKy8qIQorKiBAYnJpZWYgR2V0IGluc3RhbmNlIG51bWJlciBmb3IgRFNQSSBtb2R1bGUuCisqCisqIFRoaXMgaXMgbm90IGEgcHVibGljIEFQSSBhbmQgaXQncyBleHRlcm4gZnJvbSBmc2xfZHNwaS5jLgorKgorKiBAcGFyYW0gYmFzZSBEU1BJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisqLworZXh0ZXJuIHVpbnQzMl90IERTUElfR2V0SW5zdGFuY2UoU1BJX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVmFyaWFibGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBQb2ludGVycyB0byBkc3BpIGVkbWEgaGFuZGxlcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBkc3BpX21hc3Rlcl9lZG1hX3ByaXZhdGVfaGFuZGxlX3Qgc19kc3BpTWFzdGVyRWRtYVByaXZhdGVIYW5kbGVbRlNMX0ZFQVRVUkVfU09DX0RTUElfQ09VTlRdOworc3RhdGljIGRzcGlfc2xhdmVfZWRtYV9wcml2YXRlX2hhbmRsZV90IHNfZHNwaVNsYXZlRWRtYVByaXZhdGVIYW5kbGVbRlNMX0ZFQVRVUkVfU09DX0RTUElfQ09VTlRdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlKTsKKyAgICBhc3NlcnQoZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlKTsKKyAgICBhc3NlcnQoZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUpOworCisgICAgLyogWmVybyB0aGUgaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IERTUElfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICBzX2RzcGlNYXN0ZXJFZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uYmFzZSA9IGJhc2U7CisgICAgc19kc3BpTWFzdGVyRWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZSA9IGhhbmRsZTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisKKyAgICBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlID0gZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGU7CisgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUgPSBlZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGU7CisgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSA9IGVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlOworfQorCitzdGF0dXNfdCBEU1BJX01hc3RlclRyYW5zZmVyRURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydCh0cmFuc2Zlcik7CisKKyAgICAvKiBJZiB0aGUgdHJhbnNmZXIgY291bnQgaXMgemVybywgdGhlbiByZXR1cm4gaW1tZWRpYXRlbHkuKi8KKyAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID09IDApCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogSWYgYm90aCBzZW5kIGJ1ZmZlciBhbmQgcmVjZWl2ZSBidWZmZXIgaXMgbnVsbCAqLworICAgIGlmICgoISh0cmFuc2Zlci0+dHhEYXRhKSkgJiYgKCEodHJhbnNmZXItPnJ4RGF0YSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENoZWNrIHRoYXQgd2UncmUgbm90IGJ1c3kuKi8KKyAgICBpZiAoaGFuZGxlLT5zdGF0ZSA9PSBrRFNQSV9CdXN5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9CdXN5OworICAgIH0KKworICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9CdXN5OworCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBEU1BJX0dldEluc3RhbmNlKGJhc2UpOworICAgIHVpbnQxNl90IHdvcmRUb1NlbmQgPSAwOworICAgIHVpbnQ4X3QgZHVtbXlEYXRhID0gRFNQSV9EVU1NWV9EQVRBOworICAgIHVpbnQ4X3QgZGF0YUFscmVhZHlGZWQgPSAwOworICAgIHVpbnQ4X3QgZGF0YUZlZE1heCA9IDI7CisKKyAgICB1aW50MzJfdCByeEFkZHIgPSBEU1BJX0dldFJ4UmVnaXN0ZXJBZGRyZXNzKGJhc2UpOworICAgIHVpbnQzMl90IHR4QWRkciA9IERTUElfTWFzdGVyR2V0VHhSZWdpc3RlckFkZHJlc3MoYmFzZSk7CisKKyAgICBlZG1hX3RjZF90ICpzb2Z0d2FyZVRDRCA9IChlZG1hX3RjZF90ICopKCh1aW50MzJfdCkoJmhhbmRsZS0+ZHNwaVNvZnR3YXJlVENEWzFdKSAmICh+MHgxRlUpKTsKKworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJDb25maWdBOworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJDb25maWdCOworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJDb25maWdDOworCisgICAgaGFuZGxlLT50eEJ1ZmZJZk51bGwgPSAoKHVpbnQzMl90KURTUElfRFVNTVlfREFUQSA8PCA4KSB8IERTUElfRFVNTVlfREFUQTsKKworICAgIGRzcGlfY29tbWFuZF9kYXRhX2NvbmZpZ190IGNvbW1hbmRTdHJ1Y3Q7CisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisgICAgRFNQSV9GbHVzaEZpZm8oYmFzZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX0FsbFN0YXR1c0ZsYWcpOworCisgICAgY29tbWFuZFN0cnVjdC53aGljaFBjcyA9CisgICAgICAgIChkc3BpX3doaWNoX3Bjc190KSgxVSA8PCAoKHRyYW5zZmVyLT5jb25maWdGbGFncyAmIERTUElfTUFTVEVSX1BDU19NQVNLKSA+PiBEU1BJX01BU1RFUl9QQ1NfU0hJRlQpKTsKKyAgICBjb21tYW5kU3RydWN0LmlzRW5kT2ZRdWV1ZSA9IGZhbHNlOworICAgIGNvbW1hbmRTdHJ1Y3QuY2xlYXJUcmFuc2ZlckNvdW50ID0gZmFsc2U7CisgICAgY29tbWFuZFN0cnVjdC53aGljaEN0YXIgPQorICAgICAgICAoZHNwaV9jdGFyX3NlbGVjdGlvbl90KSgodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYgRFNQSV9NQVNURVJfQ1RBUl9NQVNLKSA+PiBEU1BJX01BU1RFUl9DVEFSX1NISUZUKTsKKyAgICBjb21tYW5kU3RydWN0LmlzUGNzQ29udGludW91cyA9IChib29sKSh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBrRFNQSV9NYXN0ZXJQY3NDb250aW51b3VzKTsKKyAgICBoYW5kbGUtPmNvbW1hbmQgPSBEU1BJX01hc3RlckdldEZvcm1hdHRlZENvbW1hbmQoJihjb21tYW5kU3RydWN0KSk7CisKKyAgICBjb21tYW5kU3RydWN0LmlzRW5kT2ZRdWV1ZSA9IHRydWU7CisgICAgY29tbWFuZFN0cnVjdC5pc1Bjc0NvbnRpbnVvdXMgPSAoYm9vbCkodHJhbnNmZXItPmNvbmZpZ0ZsYWdzICYga0RTUElfTWFzdGVyQWN0aXZlQWZ0ZXJUcmFuc2Zlcik7CisgICAgaGFuZGxlLT5sYXN0Q29tbWFuZCA9IERTUElfTWFzdGVyR2V0Rm9ybWF0dGVkQ29tbWFuZCgmKGNvbW1hbmRTdHJ1Y3QpKTsKKworICAgIGhhbmRsZS0+Yml0c1BlckZyYW1lID0gKChiYXNlLT5DVEFSW2NvbW1hbmRTdHJ1Y3Qud2hpY2hDdGFyXSAmIFNQSV9DVEFSX0ZNU1pfTUFTSykgPj4gU1BJX0NUQVJfRk1TWl9TSElGVCkgKyAxOworCisgICAgaWYgKChiYXNlLT5NQ1IgJiBTUElfTUNSX0RJU19SWEZfTUFTSykgfHwgKGJhc2UtPk1DUiAmIFNQSV9NQ1JfRElTX1RYRl9NQVNLKSkKKyAgICB7CisgICAgICAgIGhhbmRsZS0+Zmlmb1NpemUgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoYW5kbGUtPmZpZm9TaXplID0gRlNMX0ZFQVRVUkVfRFNQSV9GSUZPX1NJWkVuKGJhc2UpOworICAgIH0KKyAgICBoYW5kbGUtPnR4RGF0YSA9IHRyYW5zZmVyLT50eERhdGE7CisgICAgaGFuZGxlLT5yeERhdGEgPSB0cmFuc2Zlci0+cnhEYXRhOworICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT50b3RhbEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKworICAgIC8qIElmIHVzaW5nIGEgc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0LCB0aGVuIHRoaXMgbGltaXRzIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSBjYW4gdHJhbnNmZXIKKyAgICAqIGR1ZSB0byB0aGUgbGlua2VkIGNoYW5uZWwuIFRoZSBtYXggYnl0ZXMgaXMgNTExIGlmIDgtYml0L2ZyYW1lIG9yIDEwMjIgaWYgMTYtYml0L2ZyYW1lCisgICAgKi8KKyAgICB1aW50MzJfdCBsaW1pdGVkX3NpemUgPSAwOworICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgbGltaXRlZF9zaXplID0gMzI3Njd1OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsaW1pdGVkX3NpemUgPSA1MTF1OworICAgIH0KKworICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpCisgICAgeworICAgICAgICBpZiAodHJhbnNmZXItPmRhdGFTaXplID4gKGxpbWl0ZWRfc2l6ZSA8PCAxdSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9PdXRPZlJhbmdlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2Zlci0+ZGF0YVNpemUgPiBsaW1pdGVkX3NpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRFNQSV9PdXRPZlJhbmdlOworICAgICAgICB9CisgICAgfQorCisgICAgLypUaGUgZGF0YSBzaXplIHNob3VsZCBiZSBldmVuIGlmIHRoZSBiaXRzUGVyRnJhbWUgaXMgZ3JlYXRlciB0aGFuIDggKHRoYXQgaXMgMiBieXRlcyBwZXIgZnJhbWUgaW4gZHNwaSkgKi8KKyAgICBpZiAoKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkgJiYgKHRyYW5zZmVyLT5kYXRhU2l6ZSAmIDB4MSkpCisgICAgeworICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIERTUElfRGlzYWJsZURNQShiYXNlLCBrRFNQSV9SeERtYUVuYWJsZSB8IGtEU1BJX1R4RG1hRW5hYmxlKTsKKworICAgIEVETUFfU2V0Q2FsbGJhY2soaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwgRURNQV9Ec3BpTWFzdGVyQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAmc19kc3BpTWFzdGVyRWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdKTsKKworICAgIC8qCisgICAgKDEpRm9yIERTUEkgaW5zdGFuY2VzIHdpdGggc2hhcmVkIFJYL1RYIERNQSByZXF1ZXN0czogUnggRE1BIHJlcXVlc3QgLT4gY2hhbm5lbF9BIC0+IGNoYW5uZWxfQi0+IGNoYW5uZWxfQy4KKyAgICBjaGFubmVsX0EgbWlub3IgbGluayB0byBjaGFubmVsX0IgLCBjaGFubmVsX0IgbWlub3IgbGluayB0byBjaGFubmVsX0MuCisKKyAgICBBbHJlYWR5IHB1c2hlZCAxIG9yIDIgZGF0YSBpbiBTUElfUFVTSFIgLCB0aGVuIHN0YXJ0IHRoZSBETUEgdGFuc2Zlci4KKyAgICBjaGFubmVsX0E6U1BJX1BPUFIgdG8gcnhEYXRhLAorICAgIGNoYW5uZWxfQjpuZXh0IHR4RGF0YSB0byBoYW5kbGUtPmNvbW1hbmQgKGxvdyAxNiBiaXRzKSwKKyAgICBjaGFubmVsX0M6aGFuZGxlLT5jb21tYW5kICgzMiBiaXRzKSB0byBTUElfUFVTSFIsIGFuZCB1c2UgdGhlIHNjYXR0ZXIvZ2F0aGVyIHRvIHRyYW5zZmVyIHRoZSBsYXN0IGRhdGEKKyAgICAoaGFuZGxlLT5sYXN0Q29tbWFuZCB0byBTUElfUFVTSFIpLgorCisgICAgKDIpRm9yIERTUEkgaW5zdGFuY2VzIHdpdGggc2VwYXJhdGUgUlggYW5kIFRYIERNQSByZXF1ZXN0czoKKyAgICBSeCBETUEgcmVxdWVzdCAtPiBjaGFubmVsX0EKKyAgICBUeCBETUEgcmVxdWVzdCAtPiBjaGFubmVsX0MgLT4gY2hhbm5lbF9CIC4KKyAgICBjaGFubmVsX0MgbWFqb3IgbGluayB0byBjaGFubmVsX0IuCisgICAgU28gbmVlZCBwcmVwYXJlIHRoZSBmaXJzdCBkYXRhIGluICJpbnRlcm1lZGlhcnkiICBiZWZvcmUgdGhlIERNQQorICAgIHRyYW5zZmVyIGFuZCB0aGVuIGNoYW5uZWxfQiBpcyB1c2VkIHRvIHByZXBhcmUgdGhlIG5leHQgZGF0YSB0byAiaW50ZXJtZWRpYXJ5IgorCisgICAgY2hhbm5lbF9BOlNQSV9QT1BSIHRvIHJ4RGF0YSwKKyAgICBjaGFubmVsX0M6IGhhbmRsZS0+Y29tbWFuZCAoMzIgYml0cykgdG8gU1BJX1BVU0hSLAorICAgIGNoYW5uZWxfQjogbmV4dCB0eERhdGEgdG8gaGFuZGxlLT5jb21tYW5kIChsb3cgMTYgYml0cyksIGFuZCB1c2UgdGhlIHNjYXR0ZXIvZ2F0aGVyIHRvIHByZXBhcmUgdGhlIGxhc3QgZGF0YQorICAgIChoYW5kbGUtPmxhc3RDb21tYW5kIHRvIGhhbmRsZS0+Q29tbWFuZCkuCisgICAgKi8KKworICAgIC8qSWYgZHNwaSBoYXMgc2VwYXJhdGUgZG1hIHJlcXVlc3QgLCBwcmVwYXJlIHRoZSBmaXJzdCBkYXRhIGluICJpbnRlcm1lZGlhcnkiIC4KKyAgICBlbHNlIChkc3BpIGhhcyBzaGFyZWQgZG1hIHJlcXVlc3QpICwgc2VuZCBmaXJzdCAyIGRhdGEgaWYgdGhlcmUgaXMgZmlmbyBvciBzZW5kIGZpcnN0IDEgZGF0YSBpZiB0aGVyZSBpcyBubyBmaWZvKi8KKyAgICBpZiAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkKKyAgICB7CisgICAgICAgIC8qIEZvciBEU1BJIGluc3RhbmNlcyB3aXRoIHNlcGFyYXRlIFJYL1RYIERNQSByZXF1ZXN0cywgd2UnbGwgdXNlIHRoZSBUWCBETUEgcmVxdWVzdCB0bworICAgICAgICAqIHRyaWdnZXIgdGhlIFRYIERNQSBjaGFubmVsIGFuZCBSWCBETUEgcmVxdWVzdCB0byB0cmlnZ2VyIHRoZSBSWCBETUEgY2hhbm5lbAorICAgICAgICAqLworCisgICAgICAgIC8qUHJlcGFyZSB0aGUgZmlydCBkYXRhKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogSWYgaXQncyB0aGUgbGFzdCB3b3JkICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IDw9IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBpbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICgodWludDMyX3QpZHVtbXlEYXRhIDw8IDgpIHwgZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYW5kbGUtPmxhc3RDb21tYW5kID0gKGhhbmRsZS0+bGFzdENvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y29tbWFuZCA9IGhhbmRsZS0+bGFzdENvbW1hbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIC8qIEZvciBhbGwgd29yZHMgZXhjZXB0IHRoZSBsYXN0IHdvcmQgLCBmcmFtZSA+IDhiaXRzICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBpbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsgLyogaW5jcmVtZW50IHRvIG5leHQgZGF0YSBieXRlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAoKHVpbnQzMl90KWR1bW15RGF0YSA8PCA4KSB8IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFuZGxlLT5jb21tYW5kID0gKGhhbmRsZS0+Y29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBPcHRpbWl6ZWQgZm9yIGJpdHMvZnJhbWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9uZSBieXRlLiAqLworICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7IC8qIGluY3JlbWVudCB0byBuZXh0IGRhdGEgd29yZCovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9IGR1bW15RGF0YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+bGFzdENvbW1hbmQgPSAoaGFuZGxlLT5sYXN0Q29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5jb21tYW5kID0gaGFuZGxlLT5sYXN0Q29tbWFuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmNvbW1hbmQgPSAoaGFuZGxlLT5jb21tYW5kICYgMHhmZmZmMDAwMFUpIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGVsc2UgLypkc3BpIGhhcyBzaGFyZWQgZG1hIHJlcXVlc3QqLworCisgICAgeworICAgICAgICAvKiBGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzaGFyZWQgUlgvVFggRE1BIHJlcXVlc3RzLCB3ZSdsbCB1c2UgdGhlIFJYIERNQSByZXF1ZXN0IHRvCisgICAgICAgICogdHJpZ2dlciBvbmdvaW5nIHRyYW5zZmVycyBhbmQgd2lsbCBsaW5rIHRvIHRoZSBUWCBETUEgY2hhbm5lbCBmcm9tIHRoZSBSWCBETUEgY2hhbm5lbC4KKyAgICAgICAgKi8KKworICAgICAgICAvKiBJZiBiaXRzL2ZyYW1lIGlzIGdyZWF0ZXIgdGhhbiBvbmUgYnl0ZSAqLworICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IDw9IDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kIHw9ICh1bnNpZ25lZCkoKihoYW5kbGUtPnR4RGF0YSkpIDw8IDhVOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICgodWludDMyX3QpZHVtbXlEYXRhIDw8IDgpIHwgZHVtbXlEYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gKGhhbmRsZS0+bGFzdENvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCB3b3JkVG9TZW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBGb3IgYWxsIHdvcmRzIGV4Y2VwdCB0aGUgbGFzdCB3b3JkICovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKihoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCB8PSAodW5zaWduZWQpKCooaGFuZGxlLT50eERhdGEpKSA8PCA4VTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKCh1aW50MzJfdClkdW1teURhdGEgPDwgOCkgfCBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSID0gKGhhbmRsZS0+Y29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGNsZWFyIHRoZSBURkZGOyBpZiB0aGUgVFggRklGTyBpcyBmdWxsIHRoaXMgd2lsbCBjbGVhciAqLworICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworCisgICAgICAgICAgICAgICAgZGF0YUFscmVhZHlGZWQgKz0gMjsKKworICAgICAgICAgICAgICAgIC8qIGV4aXQgbG9vcCBpZiBzZW5kIGNvdW50IGlzIHplcm8sIGVsc2UgdXBkYXRlIGxvY2FsIHZhcmlhYmxlcyBmb3IgbmV4dCBsb29wICovCisgICAgICAgICAgICAgICAgaWYgKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPT0gMCkgfHwgKGRhdGFBbHJlYWR5RmVkID09IChkYXRhRmVkTWF4ICogMikpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBFbmQgb2YgVFggRklGTyBmaWxsIHdoaWxlIGxvb3AgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qIE9wdGltaXplZCBmb3IgYml0cy9mcmFtZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb25lIGJ5dGUuICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChEU1BJX0dldFN0YXR1c0ZsYWdzKGJhc2UpICYga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAqKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgKytoYW5kbGUtPnR4RGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9IGR1bW15RGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiYXNlLT5QVVNIUiA9IChoYW5kbGUtPmxhc3RDb21tYW5kICYgMHhmZmZmMDAwMFUpIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFIgPSAoaGFuZGxlLT5jb21tYW5kICYgMHhmZmZmMDAwMFUpIHwgd29yZFRvU2VuZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gY2xlYXIgdGhlIFRGRkY7IGlmIHRoZSBUWCBGSUZPIGlzIGZ1bGwgdGhpcyB3aWxsIGNsZWFyICovCisgICAgICAgICAgICAgICAgRFNQSV9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZyk7CisKKyAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKworICAgICAgICAgICAgICAgIGRhdGFBbHJlYWR5RmVkKys7CisKKyAgICAgICAgICAgICAgICAvKiBleGl0IGxvb3AgaWYgc2VuZCBjb3VudCBpcyB6ZXJvLCBlbHNlIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG5leHQgbG9vcCAqLworICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApIHx8IChkYXRhQWxyZWFkeUZlZCA9PSBkYXRhRmVkTWF4KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIFRYIEZJRk8gZmlsbCB3aGlsZSBsb29wICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioqY2hhbm5lbF9BICoqKiB1c2VkIGZvciBjYXJyeSB0aGUgZGF0YSBmcm9tIFJ4X0RhdGFfUmVnaXN0ZXIoUE9QUikgdG8gVXNlcl9SZWNlaXZlX0J1ZmZlcihyeERhdGEpKi8KKyAgICBFRE1BX1Jlc2V0Q2hhbm5lbChoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsKTsKKworICAgIHRyYW5zZmVyQ29uZmlnQS5zcmNBZGRyID0gKHVpbnQzMl90KXJ4QWRkcjsKKyAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjT2Zmc2V0ID0gMDsKKworICAgIGlmIChoYW5kbGUtPnJ4RGF0YSkKKyAgICB7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5kZXN0QWRkciA9ICh1aW50MzJfdCkgJiAoaGFuZGxlLT5yeERhdGFbMF0pOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdE9mZnNldCA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5kZXN0QWRkciA9ICh1aW50MzJfdCkgJiAoaGFuZGxlLT5yeEJ1ZmZJZk51bGwpOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdE9mZnNldCA9IDA7CisgICAgfQorCisgICAgdHJhbnNmZXJDb25maWdBLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisKKyAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICB7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5taW5vckxvb3BCeXRlcyA9IDE7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUyQnl0ZXM7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5taW5vckxvb3BCeXRlcyA9IDI7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLyAyOworICAgIH0KKworICAgIC8qIFN0b3JlIHRoZSBpbml0aWFsbHkgY29uZmlndXJlZCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW50byB0aGUgRFNQSSBoYW5kbGUgKi8KKyAgICBoYW5kbGUtPm5ieXRlcyA9IHRyYW5zZmVyQ29uZmlnQS5taW5vckxvb3BCeXRlczsKKworICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2ZlckNvbmZpZ0EsIE5VTEwpOworICAgIEVETUFfRW5hYmxlQ2hhbm5lbEludGVycnVwdHMoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFRE1BX01ham9ySW50ZXJydXB0RW5hYmxlKTsKKworICAgIC8qKipjaGFubmVsX0IgKioqIHVzZWQgZm9yIGNhcnJ5IHRoZSBkYXRhIGZyb20gVXNlcl9TZW5kX0J1ZmZlciB0byAiaW50ZXJtZWRpYXJ5IiBiZWNhdXNlIHRoZSBTUEl4X1BVU0hSIHNob3VsZAorICAgIHdyaXRlIHRoZSAzMmJpdHMgYXQgb25jZSB0aW1lIC4gVGhlbiB1c2UgY2hhbm5lbF9DIHRvIGNhcnJ5IHRoZSAiaW50ZXJtZWRpYXJ5IiB0byBTUEl4X1BVU0hSLiBOb3RlIHRoYXQgdGhlCisgICAgU1BJeF9QVVNIUiB1cHBlciAxNiBiaXRzIGFyZSB0aGUgImNvbW1hbmQiIGFuZCB0aGUgbG93IDE2Yml0cyBhcmUgZGF0YSAqLworCisgICAgRURNQV9SZXNldENoYW5uZWwoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsKTsKKworICAgIC8qQ2FsY3VsYXRlIHRoZSBsYXN0IGRhdGEgOiBoYW5kbGUtPmxhc3RDb21tYW5kKi8KKyAgICBpZiAoKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKSAmJiAoMSAhPSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkpIHx8CisgICAgICAgICgoKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAxKSAmJiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkpIHx8CisgICAgICAgICAgKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAyKSAmJiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KSkpICYmCisgICAgICAgICAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkpKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJJbmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5kZXggPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZmZXJJbmRleCA9IGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAtIDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ1ZmZlckluZGV4ID0gaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPmxhc3RDb21tYW5kID0gKGhhbmRsZS0+bGFzdENvbW1hbmQgJiAweGZmZmYwMDAwVSkgfCBoYW5kbGUtPnR4RGF0YVtidWZmZXJJbmRleCAtIDFdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+bGFzdENvbW1hbmQgPSAoaGFuZGxlLT5sYXN0Q29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpaGFuZGxlLT50eERhdGFbYnVmZmVySW5kZXggLSAxXSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHhEYXRhW2J1ZmZlckluZGV4IC0gMl07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gZHVtbXlEYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSAoKHVpbnQzMl90KWR1bW15RGF0YSA8PCA4KSB8IGR1bW15RGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhbmRsZS0+bGFzdENvbW1hbmQgPSAoaGFuZGxlLT5sYXN0Q29tbWFuZCAmIDB4ZmZmZjAwMDBVKSB8IHdvcmRUb1NlbmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKkZvciBEU1BJIGluc3RhbmNlcyB3aXRoIHNlcGFyYXRlIFJYIGFuZCBUWCBETUEgcmVxdWVzdHM6IHVzZSB0aGUgc2NhdHRlci9nYXRoZXIgdG8gcHJlcGFyZSB0aGUgbGFzdCBkYXRhCisgICAgICogKGhhbmRsZS0+bGFzdENvbW1hbmQpIHRvIGhhbmRsZS0+Q29tbWFuZCovCisgICAgaWYgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Iuc3JjQWRkciA9ICh1aW50MzJfdCkgJiAoaGFuZGxlLT5sYXN0Q29tbWFuZCk7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5kZXN0QWRkciA9ICh1aW50MzJfdCkgJiAoaGFuZGxlLT5jb21tYW5kKTsKKyAgICAgICAgdHJhbnNmZXJDb25maWdCLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlczsKKyAgICAgICAgdHJhbnNmZXJDb25maWdCLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemU0Qnl0ZXM7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5zcmNPZmZzZXQgPSAwOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0IuZGVzdE9mZnNldCA9IDA7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5taW5vckxvb3BCeXRlcyA9IDQ7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5tYWpvckxvb3BDb3VudHMgPSAxOworCisgICAgICAgIEVETUFfVGNkUmVzZXQoc29mdHdhcmVUQ0QpOworICAgICAgICBFRE1BX1RjZFNldFRyYW5zZmVyQ29uZmlnKHNvZnR3YXJlVENELCAmdHJhbnNmZXJDb25maWdCLCBOVUxMKTsKKyAgICB9CisKKyAgICAvKlVzZXJfU2VuZF9CdWZmZXIodHhEYXRhKSB0byBpbnRlcm1lZGlhcnkoaGFuZGxlLT5jb21tYW5kKSovCisgICAgaWYgKCgoKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAyKSAmJiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkpIHx8CisgICAgICAgICAgKChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiA0KSAmJiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KSkpICYmCisgICAgICAgICAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkpIHx8CisgICAgICAgICgxICE9IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUtPnR4RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLnNyY0FkZHIgPSAodWludDMyX3QpKGhhbmRsZS0+dHhEYXRhKTsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5zcmNPZmZzZXQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLnNyY0FkZHIgPSAodWludDMyX3QpKCZoYW5kbGUtPnR4QnVmZklmTnVsbCk7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Iuc3JjT2Zmc2V0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5kZXN0QWRkciA9ICh1aW50MzJfdCkoJmhhbmRsZS0+Y29tbWFuZCk7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5kZXN0T2Zmc2V0ID0gMDsKKworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Iuc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworCisgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0IuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5taW5vckxvb3BCeXRlcyA9IDE7CisKKyAgICAgICAgICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qT25seSBlbmFibGUgY2hhbm5lbF9CIG1pbm9ybGluayB0byBjaGFubmVsX0MgLCBzbyBuZWVkIHRvIGFkZCBvbmUgY291bnQgZHVlIHRvIHRoZSBsYXN0IHRpbWUgaXMKKyAgICAgICAgICAgICAgICBtYWpvcmxpbmsgLCB0aGUgbWFqb3JsaW5rIHdvdWxkIG5vdCB0cmlnZ2VyIHRoZSBjaGFubmVsX0MqLworICAgICAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQi5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUyQnl0ZXM7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0IubWlub3JMb29wQnl0ZXMgPSAyOworICAgICAgICAgICAgaWYgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLm1ham9yTG9vcENvdW50cyA9IGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAvIDIgLSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qT25seSBlbmFibGUgY2hhbm5lbF9CIG1pbm9ybGluayB0byBjaGFubmVsX0MgLCBzbyBuZWVkIHRvIGFkZCBvbmUgY291bnQgZHVlIHRvIHRoZSBsYXN0IHRpbWUgaXMKKyAgICAgICAgICAgICAgICAqIG1ham9ybGluayovCisgICAgICAgICAgICAgICAgdHJhbnNmZXJDb25maWdCLm1ham9yTG9vcENvdW50cyA9IGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCAvIDIgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsLCAmdHJhbnNmZXJDb25maWdCLCBzb2Z0d2FyZVRDRCk7CisgICAgICAgICAgICBFRE1BX0VuYWJsZUF1dG9TdG9wUmVxdWVzdChoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmNoYW5uZWwsICZ0cmFuc2ZlckNvbmZpZ0IsIE5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmNoYW5uZWwsICZ0cmFuc2ZlckNvbmZpZ0IsIE5VTEwpOworICAgIH0KKworICAgIC8qKipjaGFubmVsX0MgKioqY2FycnkgdGhlICJpbnRlcm1lZGlhcnkiIHRvIFNQSXhfUFVTSFIuIHVzZWQgdGhlIGVkbWEgU2NhdHRlciBHYXRoZXIgZnVuY3Rpb24gb24gY2hhbm5lbF9DIHRvCisgICAgaGFuZGxlIHRoZSBsYXN0IGRhdGEgKi8KKworICAgIEVETUFfUmVzZXRDaGFubmVsKGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmNoYW5uZWwpOworCisgICAgLypGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzaGFyZWQgUlgvVFggRE1BIHJlcXVlc3RzOiB1c2UgdGhlIHNjYXR0ZXIvZ2F0aGVyIHRvIHByZXBhcmUgdGhlIGxhc3QgZGF0YQorICAgICAqIChoYW5kbGUtPmxhc3RDb21tYW5kKSB0byBTUElfUFVTSFIqLworICAgIGlmICgoKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpICYmIChoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgPiAwKSkpCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjQWRkciA9ICh1aW50MzJfdCkgJiAoaGFuZGxlLT5sYXN0Q29tbWFuZCk7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0QWRkciA9ICh1aW50MzJfdCl0eEFkZHI7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemU0Qnl0ZXM7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplNEJ5dGVzOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjT2Zmc2V0ID0gMDsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLmRlc3RPZmZzZXQgPSAwOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWlub3JMb29wQnl0ZXMgPSA0OworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWFqb3JMb29wQ291bnRzID0gMTsKKworICAgICAgICBFRE1BX1RjZFJlc2V0KHNvZnR3YXJlVENEKTsKKyAgICAgICAgRURNQV9UY2RTZXRUcmFuc2ZlckNvbmZpZyhzb2Z0d2FyZVRDRCwgJnRyYW5zZmVyQ29uZmlnQywgTlVMTCk7CisgICAgfQorCisgICAgaWYgKCgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMSkgJiYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpKSB8fAorICAgICAgICAoKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDIpICYmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA+IDgpKSB8fAorICAgICAgICAoMSA9PSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkpCisgICAgeworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjQWRkciA9ICh1aW50MzJfdCkoJihoYW5kbGUtPmNvbW1hbmQpKTsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLmRlc3RBZGRyID0gKHVpbnQzMl90KXR4QWRkcjsKKworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplNEJ5dGVzOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlczsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY09mZnNldCA9IDA7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0T2Zmc2V0ID0gMDsKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLm1pbm9yTG9vcEJ5dGVzID0gNDsKKyAgICAgICAgaWYgKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLyAyIC0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCAmdHJhbnNmZXJDb25maWdDLCBzb2Z0d2FyZVRDRCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWFqb3JMb29wQ291bnRzID0gMTsKKworICAgICAgICAgICAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCAmdHJhbnNmZXJDb25maWdDLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIEVETUFfRW5hYmxlQXV0b1N0b3BSZXF1ZXN0KGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmNoYW5uZWwsIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUtPmNoYW5uZWwsICZ0cmFuc2ZlckNvbmZpZ0MsIE5VTEwpOworICAgIH0KKworICAgIC8qU3RhcnQgdGhlIEVETUEgY2hhbm5lbF9BICwgY2hhbm5lbF9CICwgY2hhbm5lbF9DIHRyYW5zZmVyKi8KKyAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSk7CisgICAgRURNQV9TdGFydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlKTsKKyAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSk7CisKKyAgICAvKlNldCBjaGFubmVsIHByaW9yaXR5Ki8KKyAgICB1aW50OF90IGNoYW5uZWxQcmlvcml0eUxvdyA9IGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWw7CisgICAgdWludDhfdCBjaGFubmVsUHJpb3JpdHlNaWQgPSBoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+Y2hhbm5lbDsKKyAgICB1aW50OF90IGNoYW5uZWxQcmlvcml0eUhpZ2ggPSBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsOworICAgIHVpbnQ4X3QgdCA9IDA7CisgICAgaWYgKGNoYW5uZWxQcmlvcml0eUxvdyA+IGNoYW5uZWxQcmlvcml0eU1pZCkKKyAgICB7CisgICAgICAgIHQgPSBjaGFubmVsUHJpb3JpdHlMb3c7CisgICAgICAgIGNoYW5uZWxQcmlvcml0eUxvdyA9IGNoYW5uZWxQcmlvcml0eU1pZDsKKyAgICAgICAgY2hhbm5lbFByaW9yaXR5TWlkID0gdDsKKyAgICB9CisKKyAgICBpZiAoY2hhbm5lbFByaW9yaXR5TG93ID4gY2hhbm5lbFByaW9yaXR5SGlnaCkKKyAgICB7CisgICAgICAgIHQgPSBjaGFubmVsUHJpb3JpdHlMb3c7CisgICAgICAgIGNoYW5uZWxQcmlvcml0eUxvdyA9IGNoYW5uZWxQcmlvcml0eUhpZ2g7CisgICAgICAgIGNoYW5uZWxQcmlvcml0eUhpZ2ggPSB0OworICAgIH0KKworICAgIGlmIChjaGFubmVsUHJpb3JpdHlNaWQgPiBjaGFubmVsUHJpb3JpdHlIaWdoKQorICAgIHsKKyAgICAgICAgdCA9IGNoYW5uZWxQcmlvcml0eU1pZDsKKyAgICAgICAgY2hhbm5lbFByaW9yaXR5TWlkID0gY2hhbm5lbFByaW9yaXR5SGlnaDsKKyAgICAgICAgY2hhbm5lbFByaW9yaXR5SGlnaCA9IHQ7CisgICAgfQorICAgIGVkbWFfY2hhbm5lbF9QcmVlbXB0aW9uX2NvbmZpZ190IHByZWVtcHRpb25fY29uZmlnX3Q7CisgICAgcHJlZW1wdGlvbl9jb25maWdfdC5lbmFibGVDaGFubmVsUHJlZW1wdGlvbiA9IHRydWU7CisgICAgcHJlZW1wdGlvbl9jb25maWdfdC5lbmFibGVQcmVlbXB0QWJpbGl0eSA9IHRydWU7CisgICAgcHJlZW1wdGlvbl9jb25maWdfdC5jaGFubmVsUHJpb3JpdHkgPSBjaGFubmVsUHJpb3JpdHlMb3c7CisKKyAgICBpZiAoMSAhPSBGU0xfRkVBVFVSRV9EU1BJX0hBU19TRVBBUkFURV9ETUFfUlhfVFhfUkVRbihiYXNlKSkKKyAgICB7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisKKyAgICAgICAgcHJlZW1wdGlvbl9jb25maWdfdC5jaGFubmVsUHJpb3JpdHkgPSBjaGFubmVsUHJpb3JpdHlNaWQ7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmNoYW5uZWwsICZwcmVlbXB0aW9uX2NvbmZpZ190KTsKKworICAgICAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmNoYW5uZWxQcmlvcml0eSA9IGNoYW5uZWxQcmlvcml0eUhpZ2g7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisKKyAgICAgICAgcHJlZW1wdGlvbl9jb25maWdfdC5jaGFubmVsUHJpb3JpdHkgPSBjaGFubmVsUHJpb3JpdHlNaWQ7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmNoYW5uZWwsICZwcmVlbXB0aW9uX2NvbmZpZ190KTsKKworICAgICAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmNoYW5uZWxQcmlvcml0eSA9IGNoYW5uZWxQcmlvcml0eUhpZ2g7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisgICAgfQorCisgICAgLypTZXQgdGhlIGNoYW5uZWwgbGluay4qLworICAgIGlmICgxID09IEZTTF9GRUFUVVJFX0RTUElfSEFTX1NFUEFSQVRFX0RNQV9SWF9UWF9SRVFuKGJhc2UpKQorICAgIHsKKyAgICAgICAgLyppZiB0aGVyZSBpcyBUeCBETUEgcmVxdWVzdCAsIGNhcnJ5IHRoZSAzMmJpdHMgZGF0YSAoaGFuZGxlLT5jb21tYW5kKSB0byBQVVNIUiBmaXJzdCAsIHRoZW4gbGluayB0byBjaGFubmVsQgorICAgICAgICB0byBwcmVwYXJlIHRoZSBuZXh0IDMyYml0cyBkYXRhICh0eERhdGEgdG8gaGFuZGxlLT5jb21tYW5kKSAqLworICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgRURNQV9TZXRDaGFubmVsTGluayhoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFJbnRlcm1lZGlhcnlUb1R4UmVnSGFuZGxlLT5jaGFubmVsLCBrRURNQV9NYWpvckxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsKTsKKyAgICAgICAgfQorCisgICAgICAgIERTUElfRW5hYmxlRE1BKGJhc2UsIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRURNQV9TZXRDaGFubmVsTGluayhoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9NaW5vckxpbmssIGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlLT5jaGFubmVsKTsKKworICAgICAgICAgICAgRURNQV9TZXRDaGFubmVsTGluayhoYW5kbGUtPmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZS0+YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUtPmNoYW5uZWwsIGtFRE1BX01pbm9yTGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbCk7CisgICAgICAgIH0KKworICAgICAgICBEU1BJX0VuYWJsZURNQShiYXNlLCBrRFNQSV9SeERtYUVuYWJsZSk7CisgICAgfQorCisgICAgRFNQSV9TdGFydFRyYW5zZmVyKGJhc2UpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHZvaWQgRURNQV9Ec3BpTWFzdGVyQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqZWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdfZHNwaUVkbWFQcml2YXRlSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2ZlckRvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0Y2RzKQoreworICAgIGFzc2VydChlZG1hSGFuZGxlKTsKKyAgICBhc3NlcnQoZ19kc3BpRWRtYVByaXZhdGVIYW5kbGUpOworCisgICAgZHNwaV9tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90ICpkc3BpRWRtYVByaXZhdGVIYW5kbGU7CisKKyAgICBkc3BpRWRtYVByaXZhdGVIYW5kbGUgPSAoZHNwaV9tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90ICopZ19kc3BpRWRtYVByaXZhdGVIYW5kbGU7CisKKyAgICBEU1BJX0Rpc2FibGVETUEoKGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+YmFzZSksIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworCisgICAgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKworICAgIGlmIChkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2spCisgICAgeworICAgICAgICBkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2soZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5iYXNlLCBkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTdGF0dXNfU3VjY2VzcywgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnVzZXJEYXRhKTsKKyAgICB9Cit9CisKK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckFib3J0RURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisKKyAgICBEU1BJX0Rpc2FibGVETUEoYmFzZSwga0RTUElfUnhEbWFFbmFibGUgfCBrRFNQSV9UeERtYUVuYWJsZSk7CisKKyAgICBFRE1BX0Fib3J0VHJhbnNmZXIoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSk7CisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlKTsKKyAgICBFRE1BX0Fib3J0VHJhbnNmZXIoaGFuZGxlLT5lZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSk7CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKK30KKworc3RhdHVzX3QgRFNQSV9NYXN0ZXJUcmFuc2ZlckdldENvdW50RURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgaWYgKCFjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDYXRjaCB3aGVuIHRoZXJlIGlzIG5vdCBhbiBhY3RpdmUgdHJhbnNmZXIuICovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgIT0ga0RTUElfQnVzeSkKKyAgICB7CisgICAgICAgICpjb3VudCA9IDA7CisgICAgICAgIHJldHVybiBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzOworICAgIH0KKworICAgIHNpemVfdCBieXRlczsKKworICAgIGJ5dGVzID0gKHVpbnQzMl90KWhhbmRsZS0+bmJ5dGVzICogRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsKTsKKworICAgICpjb3VudCA9IGhhbmRsZS0+dG90YWxCeXRlQ291bnQgLSBieXRlczsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlRURNQShTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX3NsYXZlX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUpOworICAgIGFzc2VydChlZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSk7CisKKyAgICAvKiBaZXJvIHRoZSBoYW5kbGUuICovCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIHVpbnQzMl90IGluc3RhbmNlID0gRFNQSV9HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIHNfZHNwaVNsYXZlRWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmJhc2UgPSBiYXNlOworICAgIHNfZHNwaVNsYXZlRWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZSA9IGhhbmRsZTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisKKyAgICBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlID0gZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGU7CisgICAgaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZSA9IGVkbWFUeERhdGFUb1R4UmVnSGFuZGxlOworfQorCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2ZlcikKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQodHJhbnNmZXIpOworCisgICAgLyogSWYgc2VuZC9yZWNlaXZlIGxlbmd0aCBpcyB6ZXJvICovCisgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIElmIGJvdGggc2VuZCBidWZmZXIgYW5kIHJlY2VpdmUgYnVmZmVyIGlzIG51bGwgKi8KKyAgICBpZiAoKCEodHJhbnNmZXItPnR4RGF0YSkpICYmICghKHRyYW5zZmVyLT5yeERhdGEpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBidXN5LiovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgPT0ga0RTUElfQnVzeSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0RTUElfQnVzeTsKKyAgICB9CisKKyAgICBoYW5kbGUtPnN0YXRlID0ga0RTUElfQnVzeTsKKworICAgIHVpbnQzMl90IGluc3RhbmNlID0gRFNQSV9HZXRJbnN0YW5jZShiYXNlKTsKKyAgICB1aW50OF90IHdoaWNoQ3RhciA9ICh0cmFuc2Zlci0+Y29uZmlnRmxhZ3MgJiBEU1BJX1NMQVZFX0NUQVJfTUFTSykgPj4gRFNQSV9TTEFWRV9DVEFSX1NISUZUOworICAgIGhhbmRsZS0+Yml0c1BlckZyYW1lID0KKyAgICAgICAgKCgoYmFzZS0+Q1RBUl9TTEFWRVt3aGljaEN0YXJdKSAmIFNQSV9DVEFSX1NMQVZFX0ZNU1pfTUFTSykgPj4gU1BJX0NUQVJfU0xBVkVfRk1TWl9TSElGVCkgKyAxOworCisgICAgLyogSWYgdXNpbmcgYSBzaGFyZWQgUlgvVFggRE1BIHJlcXVlc3QsIHRoZW4gdGhpcyBsaW1pdHMgdGhlIGFtb3VudCBvZiBkYXRhIHdlIGNhbiB0cmFuc2ZlcgorICAgICogZHVlIHRvIHRoZSBsaW5rZWQgY2hhbm5lbC4gVGhlIG1heCBieXRlcyBpcyA1MTEgaWYgOC1iaXQvZnJhbWUgb3IgMTAyMiBpZiAxNi1iaXQvZnJhbWUKKyAgICAqLworICAgIHVpbnQzMl90IGxpbWl0ZWRfc2l6ZSA9IDA7CisgICAgaWYgKDEgPT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICBsaW1pdGVkX3NpemUgPSAzMjc2N3U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxpbWl0ZWRfc2l6ZSA9IDUxMXU7CisgICAgfQorCisgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2Zlci0+ZGF0YVNpemUgPiAobGltaXRlZF9zaXplIDw8IDF1KSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19EU1BJX091dE9mUmFuZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZmVyLT5kYXRhU2l6ZSA+IGxpbWl0ZWRfc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtEU1BJX0lkbGU7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19EU1BJX091dE9mUmFuZ2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKlRoZSBkYXRhIHNpemUgc2hvdWxkIGJlIGV2ZW4gaWYgdGhlIGJpdHNQZXJGcmFtZSBpcyBncmVhdGVyIHRoYW4gOCAodGhhdCBpcyAyIGJ5dGVzIHBlciBmcmFtZSBpbiBkc3BpKSAqLworICAgIGlmICgoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPiA4KSAmJiAodHJhbnNmZXItPmRhdGFTaXplICYgMHgxKSkKKyAgICB7CisgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgRURNQV9TZXRDYWxsYmFjayhoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLCBFRE1BX0RzcGlTbGF2ZUNhbGxiYWNrLCAmc19kc3BpU2xhdmVFZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0pOworCisgICAgLyogU3RvcmUgdHJhbnNmZXIgaW5mb3JtYXRpb24gKi8KKyAgICBoYW5kbGUtPnR4RGF0YSA9IHRyYW5zZmVyLT50eERhdGE7CisgICAgaGFuZGxlLT5yeERhdGEgPSB0cmFuc2Zlci0+cnhEYXRhOworICAgIGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKyAgICBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgPSB0cmFuc2Zlci0+ZGF0YVNpemU7CisgICAgaGFuZGxlLT50b3RhbEJ5dGVDb3VudCA9IHRyYW5zZmVyLT5kYXRhU2l6ZTsKKworICAgIHVpbnQxNl90IHdvcmRUb1NlbmQgPSAwOworICAgIHVpbnQ4X3QgZHVtbXlEYXRhID0gRFNQSV9EVU1NWV9EQVRBOworICAgIHVpbnQ4X3QgZGF0YUFscmVhZHlGZWQgPSAwOworICAgIHVpbnQ4X3QgZGF0YUZlZE1heCA9IDI7CisKKyAgICB1aW50MzJfdCByeEFkZHIgPSBEU1BJX0dldFJ4UmVnaXN0ZXJBZGRyZXNzKGJhc2UpOworICAgIHVpbnQzMl90IHR4QWRkciA9IERTUElfU2xhdmVHZXRUeFJlZ2lzdGVyQWRkcmVzcyhiYXNlKTsKKworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJDb25maWdBOworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJDb25maWdDOworCisgICAgRFNQSV9TdG9wVHJhbnNmZXIoYmFzZSk7CisKKyAgICBEU1BJX0ZsdXNoRmlmbyhiYXNlLCB0cnVlLCB0cnVlKTsKKyAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfQWxsU3RhdHVzRmxhZyk7CisKKyAgICBEU1BJX0Rpc2FibGVETUEoYmFzZSwga0RTUElfUnhEbWFFbmFibGUgfCBrRFNQSV9UeERtYUVuYWJsZSk7CisKKyAgICBEU1BJX1N0YXJ0VHJhbnNmZXIoYmFzZSk7CisKKyAgICAvKmlmIGRzcGkgaGFzIHNlcGFyYXRlIGRtYSByZXF1ZXN0ICwgbmVlZCBub3QgcHJlcGFyZSBkYXRhIGZpcnN0IC4KKyAgICBlbHNlIChkc3BpIGhhcyBzaGFyZWQgZG1hIHJlcXVlc3QpICwgc2VuZCBmaXJzdCAyIGRhdGEgaW50byBmaWZvIGlmIHRoZXJlIGlzIGZpZm8gb3Igc2VuZCBmaXJzdCAxIGRhdGEgdG8KKyAgICBzbGF2ZUdldFR4UmVnaXN0ZXIgaWYgdGhlcmUgaXMgbm8gZmlmbyovCisgICAgaWYgKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICAvKiBGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzaGFyZWQgUlgvVFggRE1BIHJlcXVlc3RzLCB3ZSdsbCB1c2UgdGhlIFJYIERNQSByZXF1ZXN0IHRvCisgICAgICAgICogdHJpZ2dlciBvbmdvaW5nIHRyYW5zZmVycyBhbmQgd2lsbCBsaW5rIHRvIHRoZSBUWCBETUEgY2hhbm5lbCBmcm9tIHRoZSBSWCBETUEgY2hhbm5lbC4KKyAgICAgICAgKi8KKyAgICAgICAgLyogSWYgYml0cy9mcmFtZSBpcyBncmVhdGVyIHRoYW4gb25lIGJ5dGUgKi8KKyAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lID4gOCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKERTUElfR2V0U3RhdHVzRmxhZ3MoYmFzZSkgJiBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICooaGFuZGxlLT50eERhdGEpOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBJbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kIHw9ICh1bnNpZ25lZCkoKihoYW5kbGUtPnR4RGF0YSkpIDw8IDhVOworICAgICAgICAgICAgICAgICAgICArK2hhbmRsZS0+dHhEYXRhOyAvKiBJbmNyZW1lbnQgdG8gbmV4dCBkYXRhIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZFRvU2VuZCA9ICgodWludDMyX3QpZHVtbXlEYXRhIDw8IDgpIHwgZHVtbXlEYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLT0gMjsgLyogZGVjcmVtZW50IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQgYnkgMiAqLworICAgICAgICAgICAgICAgIGJhc2UtPlBVU0hSX1NMQVZFID0gd29yZFRvU2VuZDsKKworICAgICAgICAgICAgICAgIC8qIFRyeSB0byBjbGVhciB0aGUgVEZGRjsgaWYgdGhlIFRYIEZJRk8gaXMgZnVsbCB0aGlzIHdpbGwgY2xlYXIgKi8KKyAgICAgICAgICAgICAgICBEU1BJX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0RTUElfVHhGaWZvRmlsbFJlcXVlc3RGbGFnKTsKKworICAgICAgICAgICAgICAgIGRhdGFBbHJlYWR5RmVkICs9IDI7CisKKyAgICAgICAgICAgICAgICAvKiBFeGl0IGxvb3AgaWYgc2VuZCBjb3VudCBpcyB6ZXJvLCBlbHNlIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG5leHQgbG9vcCAqLworICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApIHx8IChkYXRhQWxyZWFkeUZlZCA9PSAoZGF0YUZlZE1heCAqIDIpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIFRYIEZJRk8gZmlsbCB3aGlsZSBsb29wICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBPcHRpbWl6ZWQgZm9yIGJpdHMvZnJhbWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9uZSBieXRlLiAqLworICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoRFNQSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtEU1BJX1R4Rmlmb0ZpbGxSZXF1ZXN0RmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50eERhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3b3JkVG9TZW5kID0gKihoYW5kbGUtPnR4RGF0YSk7CisgICAgICAgICAgICAgICAgICAgIC8qIEluY3JlbWVudCB0byBuZXh0IGRhdGEgd29yZCovCisgICAgICAgICAgICAgICAgICAgICsraGFuZGxlLT50eERhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdvcmRUb1NlbmQgPSBkdW1teURhdGE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYmFzZS0+UFVTSFJfU0xBVkUgPSB3b3JkVG9TZW5kOworCisgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGNsZWFyIHRoZSBURkZGOyBpZiB0aGUgVFggRklGTyBpcyBmdWxsIHRoaXMgd2lsbCBjbGVhciAqLworICAgICAgICAgICAgICAgIERTUElfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrRFNQSV9UeEZpZm9GaWxsUmVxdWVzdEZsYWcpOworICAgICAgICAgICAgICAgIC8qIERlY3JlbWVudCByZW1haW5pbmdTZW5kQnl0ZUNvdW50Ki8KKyAgICAgICAgICAgICAgICAtLWhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKworICAgICAgICAgICAgICAgIGRhdGFBbHJlYWR5RmVkKys7CisKKyAgICAgICAgICAgICAgICAvKiBFeGl0IGxvb3AgaWYgc2VuZCBjb3VudCBpcyB6ZXJvLCBlbHNlIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG5leHQgbG9vcCAqLworICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID09IDApIHx8IChkYXRhQWxyZWFkeUZlZCA9PSBkYXRhRmVkTWF4KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIFRYIEZJRk8gZmlsbCB3aGlsZSBsb29wICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioqY2hhbm5lbF9BICoqKiB1c2VkIGZvciBjYXJyeSB0aGUgZGF0YSBmcm9tIFJ4X0RhdGFfUmVnaXN0ZXIoUE9QUikgdG8gVXNlcl9SZWNlaXZlX0J1ZmZlciovCisgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudCA+IDApCisgICAgeworICAgICAgICBFRE1BX1Jlc2V0Q2hhbm5lbChoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsKTsKKworICAgICAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjQWRkciA9ICh1aW50MzJfdClyeEFkZHI7CisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5zcmNPZmZzZXQgPSAwOworCisgICAgICAgIGlmIChoYW5kbGUtPnJ4RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLmRlc3RBZGRyID0gKHVpbnQzMl90KSAmIChoYW5kbGUtPnJ4RGF0YVswXSk7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdE9mZnNldCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0EuZGVzdEFkZHIgPSAodWludDMyX3QpICYgKGhhbmRsZS0+cnhCdWZmSWZOdWxsKTsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5kZXN0T2Zmc2V0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworCisgICAgICAgIGlmIChoYW5kbGUtPmJpdHNQZXJGcmFtZSA8PSA4KQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLm1pbm9yTG9vcEJ5dGVzID0gMTsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Euc3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdBLm1pbm9yTG9vcEJ5dGVzID0gMjsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQS5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1JlY2VpdmVCeXRlQ291bnQgLyAyOworICAgICAgICB9CisKKyAgICAgICAgLyogU3RvcmUgdGhlIGluaXRpYWxseSBjb25maWd1cmVkIGVETUEgbWlub3IgYnl0ZSB0cmFuc2ZlciBjb3VudCBpbnRvIHRoZSBEU1BJIGhhbmRsZSAqLworICAgICAgICBoYW5kbGUtPm5ieXRlcyA9IHRyYW5zZmVyQ29uZmlnQS5taW5vckxvb3BCeXRlczsKKworICAgICAgICBFRE1BX1NldFRyYW5zZmVyQ29uZmlnKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zZmVyQ29uZmlnQSwgTlVMTCk7CisgICAgICAgIEVETUFfRW5hYmxlQ2hhbm5lbEludGVycnVwdHMoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSk7CisgICAgfQorCisgICAgaWYgKGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudCA+IDApCisgICAgeworICAgICAgICAvKioqY2hhbm5lbF9DICoqKiB1c2VkIGZvciBjYXJyeSB0aGUgZGF0YSBmcm9tIFVzZXJfU2VuZF9CdWZmZXIgdG8gVHhfRGF0YV9SZWdpc3RlcihQVVNIUl9TTEFWRSkqLworICAgICAgICBFRE1BX1Jlc2V0Q2hhbm5lbChoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5jaGFubmVsKTsKKworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdEFkZHIgPSAodWludDMyX3QpdHhBZGRyOworICAgICAgICB0cmFuc2ZlckNvbmZpZ0MuZGVzdE9mZnNldCA9IDA7CisKKyAgICAgICAgaWYgKGhhbmRsZS0+dHhEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjQWRkciA9ICh1aW50MzJfdCkoJihoYW5kbGUtPnR4RGF0YVswXSkpOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY09mZnNldCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0Muc3JjQWRkciA9ICh1aW50MzJfdCkoJmhhbmRsZS0+dHhCdWZmSWZOdWxsKTsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5zcmNPZmZzZXQgPSAwOworICAgICAgICAgICAgaWYgKGhhbmRsZS0+Yml0c1BlckZyYW1lIDw9IDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT50eEJ1ZmZJZk51bGwgPSBEU1BJX0RVTU1ZX0RBVEE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT50eEJ1ZmZJZk51bGwgPSAoRFNQSV9EVU1NWV9EQVRBIDw8IDgpIHwgRFNQSV9EVU1NWV9EQVRBOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdHJhbnNmZXJDb25maWdDLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKworICAgICAgICBpZiAoaGFuZGxlLT5iaXRzUGVyRnJhbWUgPD0gOCkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgICAgICB0cmFuc2ZlckNvbmZpZ0MubWlub3JMb29wQnl0ZXMgPSAxOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLm1ham9yTG9vcENvdW50cyA9IGhhbmRsZS0+cmVtYWluaW5nU2VuZEJ5dGVDb3VudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMkJ5dGVzOworICAgICAgICAgICAgdHJhbnNmZXJDb25maWdDLm1pbm9yTG9vcEJ5dGVzID0gMjsKKyAgICAgICAgICAgIHRyYW5zZmVyQ29uZmlnQy5tYWpvckxvb3BDb3VudHMgPSBoYW5kbGUtPnJlbWFpbmluZ1NlbmRCeXRlQ291bnQgLyAyOworICAgICAgICB9CisKKyAgICAgICAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2ZlckNvbmZpZ0MsIE5VTEwpOworCisgICAgICAgIEVETUFfU3RhcnRUcmFuc2ZlcihoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlKTsKKyAgICB9CisKKyAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZSk7CisKKyAgICAvKlNldCBjaGFubmVsIHByaW9yaXR5Ki8KKyAgICB1aW50OF90IGNoYW5uZWxQcmlvcml0eUxvdyA9IGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWw7CisgICAgdWludDhfdCBjaGFubmVsUHJpb3JpdHlIaWdoID0gaGFuZGxlLT5lZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZS0+Y2hhbm5lbDsKKyAgICB1aW50OF90IHQgPSAwOworCisgICAgaWYgKGNoYW5uZWxQcmlvcml0eUxvdyA+IGNoYW5uZWxQcmlvcml0eUhpZ2gpCisgICAgeworICAgICAgICB0ID0gY2hhbm5lbFByaW9yaXR5TG93OworICAgICAgICBjaGFubmVsUHJpb3JpdHlMb3cgPSBjaGFubmVsUHJpb3JpdHlIaWdoOworICAgICAgICBjaGFubmVsUHJpb3JpdHlIaWdoID0gdDsKKyAgICB9CisKKyAgICBlZG1hX2NoYW5uZWxfUHJlZW1wdGlvbl9jb25maWdfdCBwcmVlbXB0aW9uX2NvbmZpZ190OworICAgIHByZWVtcHRpb25fY29uZmlnX3QuZW5hYmxlQ2hhbm5lbFByZWVtcHRpb24gPSB0cnVlOworICAgIHByZWVtcHRpb25fY29uZmlnX3QuZW5hYmxlUHJlZW1wdEFiaWxpdHkgPSB0cnVlOworICAgIHByZWVtcHRpb25fY29uZmlnX3QuY2hhbm5lbFByaW9yaXR5ID0gY2hhbm5lbFByaW9yaXR5TG93OworCisgICAgaWYgKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICBFRE1BX1NldENoYW5uZWxQcmVlbXB0aW9uQ29uZmlnKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmJhc2UsIGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZWVtcHRpb25fY29uZmlnX3QpOworCisgICAgICAgIHByZWVtcHRpb25fY29uZmlnX3QuY2hhbm5lbFByaW9yaXR5ID0gY2hhbm5lbFByaW9yaXR5SGlnaDsKKyAgICAgICAgRURNQV9TZXRDaGFubmVsUHJlZW1wdGlvbkNvbmZpZyhoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVlbXB0aW9uX2NvbmZpZ190KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRURNQV9TZXRDaGFubmVsUHJlZW1wdGlvbkNvbmZpZyhoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVlbXB0aW9uX2NvbmZpZ190KTsKKworICAgICAgICBwcmVlbXB0aW9uX2NvbmZpZ190LmNoYW5uZWxQcmlvcml0eSA9IGNoYW5uZWxQcmlvcml0eUhpZ2g7CisgICAgICAgIEVETUFfU2V0Q2hhbm5lbFByZWVtcHRpb25Db25maWcoaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+YmFzZSwgaGFuZGxlLT5lZG1hUnhSZWdUb1J4RGF0YUhhbmRsZS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlZW1wdGlvbl9jb25maWdfdCk7CisgICAgfQorCisgICAgLypTZXQgdGhlIGNoYW5uZWwgbGluay4KKyAgICBGb3IgRFNQSSBpbnN0YW5jZXMgd2l0aCBzaGFyZWQgUlgvVFggRE1BIHJlcXVlc3RzOiBSeCBETUEgcmVxdWVzdCAtPiBjaGFubmVsX0EgLT4gY2hhbm5lbF9DLgorICAgIEZvciBEU1BJIGluc3RhbmNlcyB3aXRoIHNlcGFyYXRlIFJYIGFuZCBUWCBETUEgcmVxdWVzdHM6CisgICAgUnggRE1BIHJlcXVlc3QgLT4gY2hhbm5lbF9BCisgICAgVHggRE1BIHJlcXVlc3QgLT4gY2hhbm5lbF9DICovCisgICAgaWYgKDEgIT0gRlNMX0ZFQVRVUkVfRFNQSV9IQVNfU0VQQVJBVEVfRE1BX1JYX1RYX1JFUW4oYmFzZSkpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5yZW1haW5pbmdTZW5kQnl0ZUNvdW50ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRURNQV9TZXRDaGFubmVsTGluayhoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9NaW5vckxpbmssIGhhbmRsZS0+ZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUtPmNoYW5uZWwpOworICAgICAgICB9CisgICAgICAgIERTUElfRW5hYmxlRE1BKGJhc2UsIGtEU1BJX1J4RG1hRW5hYmxlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRFNQSV9FbmFibGVETUEoYmFzZSwga0RTUElfUnhEbWFFbmFibGUgfCBrRFNQSV9UeERtYUVuYWJsZSk7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHZvaWQgRURNQV9Ec3BpU2xhdmVDYWxsYmFjayhlZG1hX2hhbmRsZV90ICplZG1hSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpnX2RzcGlFZG1hUHJpdmF0ZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2ZlckRvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRjZHMpCit7CisgICAgYXNzZXJ0KGVkbWFIYW5kbGUpOworICAgIGFzc2VydChnX2RzcGlFZG1hUHJpdmF0ZUhhbmRsZSk7CisKKyAgICBkc3BpX3NsYXZlX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqZHNwaUVkbWFQcml2YXRlSGFuZGxlOworCisgICAgZHNwaUVkbWFQcml2YXRlSGFuZGxlID0gKGRzcGlfc2xhdmVfZWRtYV9wcml2YXRlX2hhbmRsZV90ICopZ19kc3BpRWRtYVByaXZhdGVIYW5kbGU7CisKKyAgICBEU1BJX0Rpc2FibGVETUEoKGRzcGlFZG1hUHJpdmF0ZUhhbmRsZS0+YmFzZSksIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworCisgICAgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnN0YXRlID0ga0RTUElfSWRsZTsKKworICAgIGlmIChkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2spCisgICAgeworICAgICAgICBkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2soZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5iYXNlLCBkc3BpRWRtYVByaXZhdGVIYW5kbGUtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTdGF0dXNfU3VjY2VzcywgZHNwaUVkbWFQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnVzZXJEYXRhKTsKKyAgICB9Cit9CisKK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQWJvcnRFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIERTUElfU3RvcFRyYW5zZmVyKGJhc2UpOworCisgICAgRFNQSV9EaXNhYmxlRE1BKGJhc2UsIGtEU1BJX1J4RG1hRW5hYmxlIHwga0RTUElfVHhEbWFFbmFibGUpOworCisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+ZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUpOworICAgIEVETUFfQWJvcnRUcmFuc2ZlcihoYW5kbGUtPmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlKTsKKworICAgIGhhbmRsZS0+c3RhdGUgPSBrRFNQSV9JZGxlOworfQorCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJHZXRDb3VudEVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgaWYgKCFjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDYXRjaCB3aGVuIHRoZXJlIGlzIG5vdCBhbiBhY3RpdmUgdHJhbnNmZXIuICovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgIT0ga0RTUElfQnVzeSkKKyAgICB7CisgICAgICAgICpjb3VudCA9IDA7CisgICAgICAgIHJldHVybiBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzOworICAgIH0KKworICAgIHNpemVfdCBieXRlczsKKworICAgIGJ5dGVzID0gKHVpbnQzMl90KWhhbmRsZS0+bmJ5dGVzICogRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLT5jaGFubmVsKTsKKworICAgICpjb3VudCA9IGhhbmRsZS0+dG90YWxCeXRlQ291bnQgLSBieXRlczsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2VkbWEuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZTI5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2VkbWEuaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfRFNQSV9FRE1BX0hfCisjZGVmaW5lIF9GU0xfRFNQSV9FRE1BX0hfCisKKyNpbmNsdWRlICJmc2xfZHNwaS5oIgorI2luY2x1ZGUgImZzbF9lZG1hLmgiCisvKiEKKyAqIEBhZGR0b2dyb3VwIGRzcGlfZWRtYV9kcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorKiBAYnJpZWYgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgRFNQSSBlRE1BIG1hc3RlciBoYW5kbGUgdHlwZWRlZnMuCisqLwordHlwZWRlZiBzdHJ1Y3QgX2RzcGlfbWFzdGVyX2VkbWFfaGFuZGxlIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3Q7CisKKy8qIQorKiBAYnJpZWYgRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgRFNQSSBlRE1BIHNsYXZlIGhhbmRsZSB0eXBlZGVmcy4KKyovCit0eXBlZGVmIHN0cnVjdCBfZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZSBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3Q7CisKKy8qIQorICogQGJyaWVmIENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0eXBlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgaGFuZGxlIGZvciB0aGUgRFNQSSBtYXN0ZXIuCisgKiBAcGFyYW0gc3RhdHVzIFN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIHRyYW5zZmVyIGNvbXBsZXRlZC4KKyAqIEBwYXJhbSB1c2VyRGF0YSBBbiBhcmJpdHJhcnkgcG9pbnRlci1kYXRhU2l6ZWQgdmFsdWUgcGFzc2VkIGZyb20gdGhlIGFwcGxpY2F0aW9uLgorICovCit0eXBlZGVmIHZvaWQgKCpkc3BpX21hc3Rlcl9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QpKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworLyohCisgKiBAYnJpZWYgQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIHR5cGUuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgQSBwb2ludGVyIHRvIHRoZSBoYW5kbGUgZm9yIHRoZSBEU1BJIHNsYXZlLgorICogQHBhcmFtIHN0YXR1cyBTdWNjZXNzIG9yIGVycm9yIGNvZGUgZGVzY3JpYmluZyB3aGV0aGVyIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQuCisgKiBAcGFyYW0gdXNlckRhdGEgQW4gYXJiaXRyYXJ5IHBvaW50ZXItZGF0YVNpemVkIHZhbHVlIHBhc3NlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4KKyAqLwordHlwZWRlZiB2b2lkICgqZHNwaV9zbGF2ZV9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QpKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSk7CisKKy8qISBAYnJpZWYgRFNQSSBtYXN0ZXIgZURNQSB0cmFuc2ZlciBoYW5kbGUgc3RydWN0dXJlIHVzZWQgZm9yIHRoZSB0cmFuc2FjdGlvbmFsIEFQSS4gKi8KK3N0cnVjdCBfZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGUKK3sKKyAgICB1aW50MzJfdCBiaXRzUGVyRnJhbWU7ICAgICAgICAgLyohPCBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBwZXIgZnJhbWUuICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgY29tbWFuZDsgICAgIC8qITwgVGhlIGRlc2lyZWQgZGF0YSBjb21tYW5kLiAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IGxhc3RDb21tYW5kOyAvKiE8IFRoZSBkZXNpcmVkIGxhc3QgZGF0YSBjb21tYW5kLiAqLworCisgICAgdWludDhfdCBmaWZvU2l6ZTsgLyohPCBGSUZPIGRhdGFTaXplLiAqLworCisgICAgdm9sYXRpbGUgYm9vbAorICAgICAgICBpc1Bjc0FjdGl2ZUFmdGVyVHJhbnNmZXI7IC8qITwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFBDUyBzaWduYWwga2VlcHMgYWN0aXZlIGFmdGVyIHRoZSBsYXN0IGZyYW1lIHRyYW5zZmVyLiovCisKKyAgICB1aW50OF90IG5ieXRlczsgICAgICAgICAvKiE8IGVETUEgbWlub3IgYnl0ZSB0cmFuc2ZlciBjb3VudCBpbml0aWFsbHkgY29uZmlndXJlZC4gKi8KKyAgICB2b2xhdGlsZSB1aW50OF90IHN0YXRlOyAvKiE8IERTUEkgdHJhbnNmZXIgc3RhdGUgLCBfZHNwaV90cmFuc2Zlcl9zdGF0ZS4qLworCisgICAgdWludDhfdCAqdm9sYXRpbGUgdHhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgU2VuZCBidWZmZXIuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgcnhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7ICAgIC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHNlbmQuKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsgLyohPCBBIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gcmVjZWl2ZS4qLworICAgIHNpemVfdCB0b3RhbEJ5dGVDb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgbnVtYmVyIG9mIHRyYW5zZmVyIGJ5dGVzKi8KKworICAgIHVpbnQzMl90IHJ4QnVmZklmTnVsbDsgLyohPCBVc2VkIGlmIHRoZXJlIGlzIG5vdCByeERhdGEgZm9yIERNQSBwdXJwb3NlLiovCisgICAgdWludDMyX3QgdHhCdWZmSWZOdWxsOyAvKiE8IFVzZWQgaWYgdGhlcmUgaXMgbm90IHR4RGF0YSBmb3IgRE1BIHB1cnBvc2UuKi8KKworICAgIGRzcGlfbWFzdGVyX2VkbWFfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjazsgLyohPCBDb21wbGV0aW9uIGNhbGxiYWNrLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDYWxsYmFjayB1c2VyIGRhdGEuICovCisKKyAgICBlZG1hX2hhbmRsZV90ICplZG1hUnhSZWdUb1J4RGF0YUhhbmRsZTsgICAgICAgIC8qITxlZG1hX2hhbmRsZV90IGhhbmRsZSBwb2ludCB1c2VkIGZvciBSeFJlZyB0byBSeERhdGEgYnVmZiovCisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlOyAvKiE8ZWRtYV9oYW5kbGVfdCBoYW5kbGUgcG9pbnQgdXNlZCBmb3IgVHhEYXRhIHRvIEludGVybWVkaWFyeSovCisgICAgZWRtYV9oYW5kbGVfdCAqZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGU7ICAvKiE8ZWRtYV9oYW5kbGVfdCBoYW5kbGUgcG9pbnQgdXNlZCBmb3IgSW50ZXJtZWRpYXJ5IHRvIFR4UmVnKi8KKworICAgIGVkbWFfdGNkX3QgZHNwaVNvZnR3YXJlVENEWzJdOyAvKiE8U29mdHdhcmVUQ0QgLCBpbnRlcm5hbCB1c2VkKi8KK307CisKKy8qISBAYnJpZWYgRFNQSSBzbGF2ZSBlRE1BIHRyYW5zZmVyIGhhbmRsZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdGhlIHRyYW5zYWN0aW9uYWwgQVBJLiovCitzdHJ1Y3QgX2RzcGlfc2xhdmVfZWRtYV9oYW5kbGUKK3sKKyAgICB1aW50MzJfdCBiaXRzUGVyRnJhbWU7IC8qITwgVGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJpdHMgcGVyIGZyYW1lLiAqLworCisgICAgdWludDhfdCAqdm9sYXRpbGUgdHhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgU2VuZCBidWZmZXIuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgcnhEYXRhOyAgICAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBidWZmZXIuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IHJlbWFpbmluZ1NlbmRCeXRlQ291bnQ7ICAgIC8qITwgQSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIHNlbmQuKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgcmVtYWluaW5nUmVjZWl2ZUJ5dGVDb3VudDsgLyohPCBBIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gcmVjZWl2ZS4qLworICAgIHNpemVfdCB0b3RhbEJ5dGVDb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiE8IEEgbnVtYmVyIG9mIHRyYW5zZmVyIGJ5dGVzKi8KKworICAgIHVpbnQzMl90IHJ4QnVmZklmTnVsbDsgLyohPCBVc2VkIGlmIHRoZXJlIGlzIG5vdCByeERhdGEgZm9yIERNQSBwdXJwb3NlLiovCisgICAgdWludDMyX3QgdHhCdWZmSWZOdWxsOyAvKiE8IFVzZWQgaWYgdGhlcmUgaXMgbm90IHR4RGF0YSBmb3IgRE1BIHB1cnBvc2UuKi8KKyAgICB1aW50MzJfdCB0eExhc3REYXRhOyAgIC8qITwgVXNlZCBpZiB0aGVyZSBpcyBhbiBleHRyYSBieXRlIHdoZW4gMTZiaXRzIHBlciBmcmFtZSBmb3IgRE1BIHB1cnBvc2UuKi8KKworICAgIHVpbnQ4X3QgbmJ5dGVzOyAvKiE8IGVETUEgbWlub3IgYnl0ZSB0cmFuc2ZlciBjb3VudCBpbml0aWFsbHkgY29uZmlndXJlZC4gKi8KKworICAgIHZvbGF0aWxlIHVpbnQ4X3Qgc3RhdGU7IC8qITwgRFNQSSB0cmFuc2ZlciBzdGF0ZS4qLworCisgICAgZHNwaV9zbGF2ZV9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2s7IC8qITwgQ29tcGxldGlvbiBjYWxsYmFjay4gKi8KKyAgICB2b2lkICp1c2VyRGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDYWxsYmFjayB1c2VyIGRhdGEuICovCisKKyAgICBlZG1hX2hhbmRsZV90ICplZG1hUnhSZWdUb1J4RGF0YUhhbmRsZTsgLyohPGVkbWFfaGFuZGxlX3QgaGFuZGxlIHBvaW50IHVzZWQgZm9yIFJ4UmVnIHRvIFJ4RGF0YSBidWZmKi8KKyAgICBlZG1hX2hhbmRsZV90ICplZG1hVHhEYXRhVG9UeFJlZ0hhbmRsZTsgLyohPGVkbWFfaGFuZGxlX3QgaGFuZGxlIHBvaW50IHVzZWQgZm9yIFR4RGF0YSB0byBUeFJlZyovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qX2NwbHVzcGx1cyovCisKKy8qVHJhbnNhY3Rpb25hbCBBUElzKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIERTUEkgbWFzdGVyIGVETUEgaGFuZGxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERTUEkgZURNQSBoYW5kbGUgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIG90aGVyIERTUEkgdHJhbnNhY3Rpb25hbCBBUElzLiAgVXN1YWxseSwgZm9yIGEKKyAqIHNwZWNpZmllZCBEU1BJIGluc3RhbmNlLCBjYWxsIHRoaXMgQVBJIG9uY2UgdG8gZ2V0IHRoZSBpbml0aWFsaXplZCBoYW5kbGUuCisgKgorICogTm90ZSB0aGF0IERTUEkgZURNQSBoYXMgc2VwYXJhdGVkIChSWCBhbmQgVFggYXMgdHdvIHNvdXJjZXMpIG9yIHNoYXJlZCAoUlggIGFuZCBUWCBhcmUgdGhlIHNhbWUgc291cmNlKSBETUEgcmVxdWVzdAorICogc291cmNlLgorICogKDEpIEZvciB0aGUgc2VwYXJhdGVkIERNQSByZXF1ZXN0IHNvdXJjZSwgZW5hYmxlIGFuZCBzZXQgdGhlIFJYIERNQU1VWCBzb3VyY2UgZm9yIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlIGFuZAorICogVFggRE1BTVVYIHNvdXJjZSBmb3IgZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUuCisgKiAoMikgRm9yIHRoZSBzaGFyZWQgRE1BIHJlcXVlc3Qgc291cmNlLCBlbmFibGUgYW5kIHNldCB0aGUgUlgvUlggRE1BTVVYIHNvdXJjZSBmb3IgdGhlIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIERTUEkgaGFuZGxlIHBvaW50ZXIgdG8gZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdC4KKyAqIEBwYXJhbSBjYWxsYmFjayBEU1BJIGNhbGxiYWNrLgorICogQHBhcmFtIHVzZXJEYXRhIEEgY2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLgorICogQHBhcmFtIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlIHBvaW50ZXIgdG8gZWRtYV9oYW5kbGVfdC4KKyAqIEBwYXJhbSBlZG1hVHhEYXRhVG9JbnRlcm1lZGlhcnlIYW5kbGUgZWRtYVR4RGF0YVRvSW50ZXJtZWRpYXJ5SGFuZGxlIHBvaW50ZXIgdG8gZWRtYV9oYW5kbGVfdC4KKyAqIEBwYXJhbSBlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSBlZG1hSW50ZXJtZWRpYXJ5VG9UeFJlZ0hhbmRsZSBwb2ludGVyIHRvIGVkbWFfaGFuZGxlX3QuCisgKi8KK3ZvaWQgRFNQSV9NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNwaV9tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFUeERhdGFUb0ludGVybWVkaWFyeUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYUludGVybWVkaWFyeVRvVHhSZWdIYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBEU1BJIG1hc3RlciB0cmFuc2ZlciBkYXRhIHVzaW5nIGVETUEuCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2ZlcnMgZGF0YSB1c2luZyBlRE1BLiBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIHJpZ2h0IGF3YXkuIFdoZW4gYWxsIGRhdGEKKyAqIGlzIHRyYW5zZmVycmVkLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSB0cmFuc2ZlciBBIHBvaW50ZXIgdG8gdGhlIGRzcGlfdHJhbnNmZXJfdCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHN0YXR1cyBvZiBzdGF0dXNfdC4KKyAqLworc3RhdHVzX3QgRFNQSV9NYXN0ZXJUcmFuc2ZlckVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qIQorICogQGJyaWVmIERTUEkgbWFzdGVyIGFib3J0cyBhIHRyYW5zZmVyIHdoaWNoIGlzIHVzaW5nIGVETUEuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgYSB0cmFuc2ZlciB3aGljaCBpcyB1c2luZyBlRE1BLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqLwordm9pZCBEU1BJX01hc3RlclRyYW5zZmVyQWJvcnRFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBtYXN0ZXIgZURNQSB0cmFuc2ZlciBjb3VudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIG1hc3RlciBlRE1BIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgZHNwaV9tYXN0ZXJfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSBjb3VudCBBIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBieSB0aGUgbm9uLWJsb2NraW5nIHRyYW5zYWN0aW9uLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfTWFzdGVyVHJhbnNmZXJHZXRDb3VudEVETUEoU1BJX1R5cGUgKmJhc2UsIGRzcGlfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCk7CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEU1BJIHNsYXZlIGVETUEgaGFuZGxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERTUEkgZURNQSBoYW5kbGUgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIG90aGVyIERTUEkgdHJhbnNhY3Rpb25hbCBBUElzLiAgVXN1YWxseSwgZm9yIGEKKyAqIHNwZWNpZmllZCBEU1BJIGluc3RhbmNlLCBjYWxsIHRoaXMgQVBJIG9uY2UgdG8gZ2V0IHRoZSBpbml0aWFsaXplZCBoYW5kbGUuCisgKgorICogTm90ZSB0aGF0IERTUEkgZURNQSBoYXMgc2VwYXJhdGVkIChSTiBhbmQgVFggaW4gMiBzb3VyY2VzKSBvciBzaGFyZWQgKFJYICBhbmQgVFggYXJlIHRoZSBzYW1lIHNvdXJjZSkgRE1BIHJlcXVlc3QKKyAqIHNvdXJjZS4KKyAqICgxKUZvciB0aGUgc2VwYXJhdGVkIERNQSByZXF1ZXN0IHNvdXJjZSwgZW5hYmxlIGFuZCBzZXQgdGhlIFJYIERNQU1VWCBzb3VyY2UgZm9yIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlIGFuZAorICogVFggRE1BTVVYIHNvdXJjZSBmb3IgZWRtYVR4RGF0YVRvVHhSZWdIYW5kbGUuCisgKiAoMilGb3IgdGhlIHNoYXJlZCBETUEgcmVxdWVzdCBzb3VyY2UsICBlbmFibGUgYW5kIHNldCB0aGUgUlgvUlggRE1BTVVYIHNvdXJjZSBmb3IgdGhlIGVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIERTUEkgaGFuZGxlIHBvaW50ZXIgdG8gZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90LgorICogQHBhcmFtIGNhbGxiYWNrIERTUEkgY2FsbGJhY2suCisgKiBAcGFyYW0gdXNlckRhdGEgQSBjYWxsYmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuCisgKiBAcGFyYW0gZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUgZWRtYVJ4UmVnVG9SeERhdGFIYW5kbGUgcG9pbnRlciB0byBlZG1hX2hhbmRsZV90LgorICogQHBhcmFtIGVkbWFUeERhdGFUb1R4UmVnSGFuZGxlIGVkbWFUeERhdGFUb1R4UmVnSGFuZGxlIHBvaW50ZXIgdG8gZWRtYV9oYW5kbGVfdC4KKyAqLwordm9pZCBEU1BJX1NsYXZlVHJhbnNmZXJDcmVhdGVIYW5kbGVFRE1BKFNQSV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzcGlfc2xhdmVfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFSeFJlZ1RvUnhEYXRhSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKmVkbWFUeERhdGFUb1R4UmVnSGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgRFNQSSBzbGF2ZSB0cmFuc2ZlciBkYXRhIHVzaW5nIGVETUEuCisgKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2ZlcnMgZGF0YSB1c2luZyBlRE1BLiBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIHJpZ2h0IGF3YXkuIFdoZW4gYWxsIGRhdGEKKyAqIGlzIHRyYW5zZmVycmVkLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogTm90ZSB0aGF0IHRoZSBzbGF2ZSBlRE1BIHRyYW5zZmVyIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc2Zlcl9zaXplIGlzIDEgd2hlbiB0aGUgYml0c1BlckZyYW1lIGlzIGdyZWF0ZXIKKyAqIHRoYW4gZWlnaHQuCisKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIHRyYW5zZmVyIEEgcG9pbnRlciB0byB0aGUgZHNwaV90cmFuc2Zlcl90IHN0cnVjdHVyZS4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHN0YXR1c190LgorICovCitzdGF0dXNfdCBEU1BJX1NsYXZlVHJhbnNmZXJFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZHNwaV90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qIQorICogQGJyaWVmIERTUEkgc2xhdmUgYWJvcnRzIGEgdHJhbnNmZXIgd2hpY2ggaXMgdXNpbmcgZURNQS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyBhIHRyYW5zZmVyIHdoaWNoIGlzIHVzaW5nIGVETUEuCisgKgorICogQHBhcmFtIGJhc2UgRFNQSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgQSBwb2ludGVyIHRvIHRoZSBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKi8KK3ZvaWQgRFNQSV9TbGF2ZVRyYW5zZmVyQWJvcnRFRE1BKFNQSV9UeXBlICpiYXNlLCBkc3BpX3NsYXZlX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHNsYXZlIGVETUEgdHJhbnNmZXIgY291bnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzbGF2ZSBlRE1BIHRyYW5zZmVyIGNvdW50LgorICoKKyAqIEBwYXJhbSBiYXNlIERTUEkgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIGNvdW50IEEgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIHNvIGZhciBieSB0aGUgbm9uLWJsb2NraW5nIHRyYW5zYWN0aW9uLgorICogQHJldHVybiBzdGF0dXMgb2Ygc3RhdHVzX3QuCisgKi8KK3N0YXR1c190IERTUElfU2xhdmVUcmFuc2ZlckdldENvdW50RURNQShTUElfVHlwZSAqYmFzZSwgZHNwaV9zbGF2ZV9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKl9jcGx1c3BsdXMqLworICAgICAgIC8qIQorICAgICAgICAqQH0KKyAgICAgICAgKi8KKworI2VuZGlmIC8qX0ZTTF9EU1BJX0VETUFfSF8qLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9mcmVlcnRvcy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZHNwaV9mcmVlcnRvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWVlY2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2ZyZWVydG9zLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2RzcGlfZnJlZXJ0b3MuaCIKKworc3RhdGljIHZvaWQgRFNQSV9SVE9TX0NhbGxiYWNrKFNQSV9UeXBlICpiYXNlLCBkc3BpX21hc3Rlcl9oYW5kbGVfdCAqZHJ2X2hhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBkc3BpX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSA9IChkc3BpX3J0b3NfaGFuZGxlX3QgKil1c2VyRGF0YTsKKyAgICBCYXNlVHlwZV90IHJlc2NoZWR1bGU7CisKKyAgICB4U2VtYXBob3JlR2l2ZUZyb21JU1IoaGFuZGxlLT5ldmVudCwgJnJlc2NoZWR1bGUpOworICAgIHBvcnRZSUVMRF9GUk9NX0lTUihyZXNjaGVkdWxlKTsKK30KKworc3RhdHVzX3QgRFNQSV9SVE9TX0luaXQoZHNwaV9ydG9zX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBTUElfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRzcGlfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19IeikKK3sKKyAgICBpZiAoaGFuZGxlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoZHNwaV9ydG9zX2hhbmRsZV90KSk7CisKKyNpZiAoY29uZmlnU1VQUE9SVF9TVEFUSUNfQUxMT0NBVElPTiA9PSAxKQorICAgIGhhbmRsZS0+bXV0ZXggPSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXhTdGF0aWMoJmhhbmRsZS0+bXV0ZXhCdWZmZXIpOworI2Vsc2UKKyAgICBoYW5kbGUtPm11dGV4ID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAoaGFuZGxlLT5tdXRleCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBoYW5kbGUtPmV2ZW50ID0geFNlbWFwaG9yZUNyZWF0ZUJpbmFyeVN0YXRpYygmaGFuZGxlLT5zZW1hcGhvcmVCdWZmZXIpOworI2Vsc2UKKyAgICBoYW5kbGUtPmV2ZW50ID0geFNlbWFwaG9yZUNyZWF0ZUJpbmFyeSgpOworI2VuZGlmCisgICAgaWYgKGhhbmRsZS0+ZXZlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT5tdXRleCk7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorCisgICAgaGFuZGxlLT5iYXNlID0gYmFzZTsKKworICAgIERTUElfTWFzdGVySW5pdChoYW5kbGUtPmJhc2UsIG1hc3RlckNvbmZpZywgc3JjQ2xvY2tfSHopOworICAgIERTUElfTWFzdGVyVHJhbnNmZXJDcmVhdGVIYW5kbGUoaGFuZGxlLT5iYXNlLCAmaGFuZGxlLT5kcnZfaGFuZGxlLCBEU1BJX1JUT1NfQ2FsbGJhY2ssICh2b2lkICopaGFuZGxlKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IERTUElfUlRPU19EZWluaXQoZHNwaV9ydG9zX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgRFNQSV9EZWluaXQoaGFuZGxlLT5iYXNlKTsKKyAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+ZXZlbnQpOworICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT5tdXRleCk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBEU1BJX1JUT1NfVHJhbnNmZXIoZHNwaV9ydG9zX2hhbmRsZV90ICpoYW5kbGUsIGRzcGlfdHJhbnNmZXJfdCAqdHJhbnNmZXIpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogTG9jayByZXNvdXJjZSBtdXRleCAqLworICAgIGlmICh4U2VtYXBob3JlVGFrZShoYW5kbGUtPm11dGV4LCBwb3J0TUFYX0RFTEFZKSAhPSBwZFRSVUUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19EU1BJX0J1c3k7CisgICAgfQorCisgICAgc3RhdHVzID0gRFNQSV9NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKGhhbmRsZS0+YmFzZSwgJmhhbmRsZS0+ZHJ2X2hhbmRsZSwgdHJhbnNmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgeFNlbWFwaG9yZUdpdmUoaGFuZGxlLT5tdXRleCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgdHJhbnNmZXIgdG8gZmluaXNoICovCisgICAgeFNlbWFwaG9yZVRha2UoaGFuZGxlLT5ldmVudCwgcG9ydE1BWF9ERUxBWSk7CisKKyAgICAvKiBVbmxvY2sgcmVzb3VyY2UgbXV0ZXggKi8KKyAgICB4U2VtYXBob3JlR2l2ZShoYW5kbGUtPm11dGV4KTsKKworICAgIC8qIFJldHVybiBzdGF0dXMgY2FwdHVyZWQgYnkgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyAgICByZXR1cm4gaGFuZGxlLT5hc3luY19zdGF0dXM7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2ZyZWVydG9zLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9kc3BpX2ZyZWVydG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3MTc5YgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2RzcGlfZnJlZXJ0b3MuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9fRlNMX0RTUElfRlJFRVJUT1NfSF9fCisjZGVmaW5lIF9fRlNMX0RTUElfRlJFRVJUT1NfSF9fCisKKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIgorI2luY2x1ZGUgIkZyZWVSVE9TLmgiCisjaW5jbHVkZSAicG9ydGFibGUuaCIKKyNpbmNsdWRlICJzZW1waHIuaCIKKworI2luY2x1ZGUgImZzbF9kc3BpLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgZHNwaV9mcmVlcnRvc19kcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyogQGNvbmQgUlRPU19QUklWQVRFCisqIEBicmllZiBEU1BJIEZyZWVSVE9TIGhhbmRsZQorKi8KK3R5cGVkZWYgc3RydWN0IF9kc3BpX3J0b3NfaGFuZGxlCit7CisgICAgU1BJX1R5cGUgKmJhc2U7ICAgICAgICAgICAgICAgICAgLyohPCBEU1BJIGJhc2UgYWRkcmVzcyAqLworICAgIGRzcGlfbWFzdGVyX2hhbmRsZV90IGRydl9oYW5kbGU7IC8qITwgSGFuZGxlIG9mIHRoZSB1bmRlcmx5aW5nIGRyaXZlciwgdHJlYXRlZCBhcyBvcGFxdWUgYnkgdGhlIFJUT1MgbGF5ZXIgKi8KKyAgICBzdGF0dXNfdCBhc3luY19zdGF0dXM7ICAgICAgICAgICAvKiE8IFRyYW5zYWN0aW9uYWwgc3RhdGUgb2YgdGhlIHVuZGVybHlpbmcgZHJpdmVyICovCisgICAgU2VtYXBob3JlSGFuZGxlX3QgbXV0ZXg7ICAgICAgICAgLyohPCBNdXRleCB0byBsb2NrIHRoZSBoYW5kbGUgZHVyaW5nIGEgdHJhbnNmZXIgKi8KKyAgICBTZW1hcGhvcmVIYW5kbGVfdCBldmVudDsgICAgICAgICAvKiE8IFNlbWFwaG9yZSB0byBub3RpZnkgYW5kIHVuYmxvY2sgYSB0YXNrIHdoZW4gYSB0cmFuc2ZlciBlbmRzICovCisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBTdGF0aWNTZW1hcGhvcmVfdCBtdXRleEJ1ZmZlcjsgICAgIC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBtdXRleCAqLworICAgIFN0YXRpY1NlbWFwaG9yZV90IHNlbWFwaG9yZUJ1ZmZlcjsgLyohPCBTdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yIGV2ZW50ICovCisjZW5kaWYKK30gZHNwaV9ydG9zX2hhbmRsZV90OworLyohIFxlbmRjb25kICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBEU1BJIFJUT1MgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBEU1BJLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERTUEkgbW9kdWxlIGFuZCB0aGUgcmVsYXRlZCBSVE9TIGNvbnRleHQuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBEU1BJIGhhbmRsZSwgdGhlIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIGZvciBSVE9TIGNvbnRleHQuCisgKiBAcGFyYW0gYmFzZSBUaGUgcG9pbnRlciBiYXNlIGFkZHJlc3Mgb2YgdGhlIERTUEkgaW5zdGFuY2UgdG8gaW5pdGlhbGl6ZS4KKyAqIEBwYXJhbSBtYXN0ZXJDb25maWcgQSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBzZXQtdXAgdGhlIERTUEkgaW4gbWFzdGVyIG1vZGUuCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogQSBmcmVxdWVuY3kgb2YgdGhlIGlucHV0IGNsb2NrIG9mIHRoZSBEU1BJIG1vZHVsZS4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3N0YXR1c190IERTUElfUlRPU19Jbml0KGRzcGlfcnRvc19oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgU1BJX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkc3BpX21hc3Rlcl9jb25maWdfdCAqbWFzdGVyQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBEZWluaXRpYWxpemVzIHRoZSBEU1BJLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVpbml0aWFsaXplcyB0aGUgRFNQSSBtb2R1bGUgYW5kIHRoZSByZWxhdGVkIFJUT1MgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBSVE9TIERTUEkgaGFuZGxlLgorICovCitzdGF0dXNfdCBEU1BJX1JUT1NfRGVpbml0KGRzcGlfcnRvc19oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgdGhlIFNQSSB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBTUEkgdHJhbnNmZXIgYWNjb3JkaW5nIHRvIHRoZSBkYXRhIGdpdmVuIGluIHRoZSB0cmFuc2ZlciBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBEU1BJIGhhbmRsZS4KKyAqIEBwYXJhbSB0cmFuc2ZlciBBIHN0cnVjdHVyZSBzcGVjaWZ5aW5nIHRoZSB0cmFuc2ZlciBwYXJhbWV0ZXJzLgorICogQHJldHVybiBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLworc3RhdHVzX3QgRFNQSV9SVE9TX1RyYW5zZmVyKGRzcGlfcnRvc19oYW5kbGVfdCAqaGFuZGxlLCBkc3BpX3RyYW5zZmVyX3QgKnRyYW5zZmVyKTsKKworLyohCisgKiBAfQorICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qIQorICogQH0KKyAqLworCisjZW5kaWYgLyogX19GU0xfRFNQSV9GUkVFUlRPU19IX18gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2VkbWEuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2VkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUxZjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZWRtYS5jCkBAIC0wLDAgKzEsMTc1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfZWRtYS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRURNQV9UUkFOU0ZFUl9FTkFCTEVEX01BU0sgMHg4MFUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIEdldCBpbnN0YW5jZSBudW1iZXIgZm9yIEVETUEuCisgKgorICogQHBhcmFtIGJhc2UgRURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIHVpbnQzMl90IEVETUFfR2V0SW5zdGFuY2UoRE1BX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBQdXNoIGNvbnRlbnQgb2YgVENEIHN0cnVjdHVyZSBpbnRvIGhhcmR3YXJlIFRDRCByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBFRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgRURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSB0Y2QgUG9pbnQgdG8gVENEIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHZvaWQgRURNQV9JbnN0YWxsVENEKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX3RjZF90ICp0Y2QpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIEFycmF5IHRvIG1hcCBFRE1BIGluc3RhbmNlIG51bWJlciB0byBiYXNlIHBvaW50ZXIuICovCitzdGF0aWMgRE1BX1R5cGUgKmNvbnN0IHNfZWRtYUJhc2VzW10gPSBETUFfQkFTRV9QVFJTOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorLyohIEBicmllZiBBcnJheSB0byBtYXAgRURNQSBpbnN0YW5jZSBudW1iZXIgdG8gY2xvY2sgbmFtZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19lZG1hQ2xvY2tOYW1lW10gPSBFRE1BX0NMT0NLUzsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworLyohIEBicmllZiBBcnJheSB0byBtYXAgRURNQSBpbnN0YW5jZSBudW1iZXIgdG8gSVJRIG51bWJlci4gKi8KK3N0YXRpYyBjb25zdCBJUlFuX1R5cGUgc19lZG1hSVJRTnVtYmVyW11bRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTF0gPSBETUFfQ0hOX0lSUVM7CisKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gdHJhbnNmZXIgaGFuZGxlIGZvciBlYWNoIEVETUEgY2hhbm5lbC4gKi8KK3N0YXRpYyBlZG1hX2hhbmRsZV90ICpzX0VETUFIYW5kbGVbRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCAqIEZTTF9GRUFUVVJFX1NPQ19FRE1BX0NPVU5UXTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1aW50MzJfdCBFRE1BX0dldEluc3RhbmNlKERNQV9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2VkbWFCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19lZG1hQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2VkbWFCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitzdGF0aWMgdm9pZCBFRE1BX0luc3RhbGxUQ0QoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGVkbWFfdGNkX3QgKnRjZCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpdGNkICYgMHgxRlUpID09IDApOworCisgICAgLyogUHVzaCB0Y2QgaW50byBoYXJkd2FyZSBUQ0QgcmVnaXN0ZXIgKi8KKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uU0FERFIgPSB0Y2QtPlNBRERSOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5TT0ZGID0gdGNkLT5TT0ZGOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5BVFRSID0gdGNkLT5BVFRSOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5OQllURVNfTUxOTyA9IHRjZC0+TkJZVEVTOworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5TTEFTVCA9IHRjZC0+U0xBU1Q7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkRBRERSID0gdGNkLT5EQUREUjsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uRE9GRiA9IHRjZC0+RE9GRjsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQ0lURVJfRUxJTktOTyA9IHRjZC0+Q0lURVI7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkRMQVNUX1NHQSA9IHRjZC0+RExBU1RfU0dBOworICAgIC8qIENsZWFyIERPTkUgYml0IGZpcnN0LCBvdGhlcndpc2UgRVNHIGNhbm5vdCBiZSBzZXQgKi8KKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSID0gMDsKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSID0gdGNkLT5DU1I7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkJJVEVSX0VMSU5LTk8gPSB0Y2QtPkJJVEVSOworfQorCit2b2lkIEVETUFfSW5pdChETUFfVHlwZSAqYmFzZSwgY29uc3QgZWRtYV9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcgIT0gTlVMTCk7CisKKyAgICB1aW50MzJfdCB0bXByZWc7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogVW5nYXRlIEVETUEgcGVyaXBocmFsIGNsb2NrICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19lZG1hQ2xvY2tOYW1lW0VETUFfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKyAgICAvKiBDb25maWd1cmUgRURNQSBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuICovCisgICAgdG1wcmVnID0gYmFzZS0+Q1I7CisgICAgdG1wcmVnICY9IH4oRE1BX0NSX0VSQ0FfTUFTSyB8IERNQV9DUl9IT0VfTUFTSyB8IERNQV9DUl9DTE1fTUFTSyB8IERNQV9DUl9FREJHX01BU0spOworICAgIHRtcHJlZyB8PSAoRE1BX0NSX0VSQ0EoY29uZmlnLT5lbmFibGVSb3VuZFJvYmluQXJiaXRyYXRpb24pIHwgRE1BX0NSX0hPRShjb25maWctPmVuYWJsZUhhbHRPbkVycm9yKSB8CisgICAgICAgICAgICAgICBETUFfQ1JfQ0xNKGNvbmZpZy0+ZW5hYmxlQ29udGludW91c0xpbmtNb2RlKSB8IERNQV9DUl9FREJHKGNvbmZpZy0+ZW5hYmxlRGVidWdNb2RlKSB8IERNQV9DUl9FTUxNKHRydWUpKTsKKyAgICBiYXNlLT5DUiA9IHRtcHJlZzsKK30KKwordm9pZCBFRE1BX0RlaW5pdChETUFfVHlwZSAqYmFzZSkKK3sKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogR2F0ZSBFRE1BIHBlcmlwaHJhbCBjbG9jayAqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2VkbWFDbG9ja05hbWVbRURNQV9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIEVETUFfR2V0RGVmYXVsdENvbmZpZyhlZG1hX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKworICAgIGNvbmZpZy0+ZW5hYmxlUm91bmRSb2JpbkFyYml0cmF0aW9uID0gZmFsc2U7CisgICAgY29uZmlnLT5lbmFibGVIYWx0T25FcnJvciA9IHRydWU7CisgICAgY29uZmlnLT5lbmFibGVDb250aW51b3VzTGlua01vZGUgPSBmYWxzZTsKKyAgICBjb25maWctPmVuYWJsZURlYnVnTW9kZSA9IGZhbHNlOworfQorCit2b2lkIEVETUFfUmVzZXRDaGFubmVsKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBFRE1BX1RjZFJlc2V0KChlZG1hX3RjZF90ICopJmJhc2UtPlRDRFtjaGFubmVsXSk7Cit9CisKK3ZvaWQgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgY29uc3QgZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnLCBlZG1hX3RjZF90ICpuZXh0VGNkKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCluZXh0VGNkICYgMHgxRlUpID09IDApOworCisgICAgRURNQV9UY2RTZXRUcmFuc2ZlckNvbmZpZygoZWRtYV90Y2RfdCAqKSZiYXNlLT5UQ0RbY2hhbm5lbF0sIGNvbmZpZywgbmV4dFRjZCk7Cit9CisKK3ZvaWQgRURNQV9TZXRNaW5vck9mZnNldENvbmZpZyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgY29uc3QgZWRtYV9taW5vcl9vZmZzZXRfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworICAgIGFzc2VydChjb25maWcgIT0gTlVMTCk7CisKKyAgICB1aW50MzJfdCB0bXByZWc7CisKKyAgICB0bXByZWcgPSBiYXNlLT5UQ0RbY2hhbm5lbF0uTkJZVEVTX01MT0ZGWUVTOworICAgIHRtcHJlZyAmPSB+KERNQV9OQllURVNfTUxPRkZZRVNfU01MT0VfTUFTSyB8IERNQV9OQllURVNfTUxPRkZZRVNfRE1MT0VfTUFTSyB8IERNQV9OQllURVNfTUxPRkZZRVNfTUxPRkZfTUFTSyk7CisgICAgdG1wcmVnIHw9CisgICAgICAgIChETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FKGNvbmZpZy0+ZW5hYmxlU3JjTWlub3JPZmZzZXQpIHwKKyAgICAgICAgIERNQV9OQllURVNfTUxPRkZZRVNfRE1MT0UoY29uZmlnLT5lbmFibGVEZXN0TWlub3JPZmZzZXQpIHwgRE1BX05CWVRFU19NTE9GRllFU19NTE9GRihjb25maWctPm1pbm9yT2Zmc2V0KSk7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLk5CWVRFU19NTE9GRllFUyA9IHRtcHJlZzsKK30KKwordm9pZCBFRE1BX1NldENoYW5uZWxMaW5rKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX2NoYW5uZWxfbGlua190eXBlX3QgdHlwZSwgdWludDMyX3QgbGlua2VkQ2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworICAgIGFzc2VydChsaW5rZWRDaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBFRE1BX1RjZFNldENoYW5uZWxMaW5rKChlZG1hX3RjZF90ICopJmJhc2UtPlRDRFtjaGFubmVsXSwgdHlwZSwgbGlua2VkQ2hhbm5lbCk7Cit9CisKK3ZvaWQgRURNQV9TZXRCYW5kV2lkdGgoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGVkbWFfYmFuZHdpZHRoX3QgYmFuZFdpZHRoKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSID0gKGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgJiAofkRNQV9DU1JfQldDX01BU0spKSB8IERNQV9DU1JfQldDKGJhbmRXaWR0aCk7Cit9CisKK3ZvaWQgRURNQV9TZXRNb2R1bG8oRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGVkbWFfbW9kdWxvX3Qgc3JjTW9kdWxvLCBlZG1hX21vZHVsb190IGRlc3RNb2R1bG8pCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIHVpbnQzMl90IHRtcHJlZzsKKworICAgIHRtcHJlZyA9IGJhc2UtPlRDRFtjaGFubmVsXS5BVFRSICYgKH4oRE1BX0FUVFJfU01PRF9NQVNLIHwgRE1BX0FUVFJfRE1PRF9NQVNLKSk7CisgICAgYmFzZS0+VENEW2NoYW5uZWxdLkFUVFIgPSB0bXByZWcgfCBETUFfQVRUUl9ETU9EKGRlc3RNb2R1bG8pIHwgRE1BX0FUVFJfU01PRChzcmNNb2R1bG8pOworfQorCit2b2lkIEVETUFfRW5hYmxlQ2hhbm5lbEludGVycnVwdHMoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIC8qIEVuYWJsZSBlcnJvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX0Vycm9ySW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+RUVJIHw9ICgweDFVIDw8IGNoYW5uZWwpOworICAgIH0KKworICAgIC8qIEVuYWJsZSBNYWpvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX01ham9ySW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiB8PSBETUFfQ1NSX0lOVE1BSk9SX01BU0s7CisgICAgfQorCisgICAgLyogRW5hYmxlIEhhbGYgbWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9IYWxmSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiB8PSBETUFfQ1NSX0lOVEhBTEZfTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9EaXNhYmxlQ2hhbm5lbEludGVycnVwdHMoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIC8qIERpc2FibGUgZXJyb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9FcnJvckludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkVFSSAmPSB+KDB4MVUgPDwgY2hhbm5lbCk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBNYWpvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX01ham9ySW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+VENEW2NoYW5uZWxdLkNTUiAmPSB+RE1BX0NTUl9JTlRNQUpPUl9NQVNLOworICAgIH0KKworICAgIC8qIERpc2FibGUgSGFsZiBtYWpvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX0hhbGZJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5UQ0RbY2hhbm5lbF0uQ1NSICY9IH5ETUFfQ1NSX0lOVEhBTEZfTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9UY2RSZXNldChlZG1hX3RjZF90ICp0Y2QpCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCl0Y2QgJiAweDFGVSkgPT0gMCk7CisKKyAgICAvKiBSZXNldCBjaGFubmVsIFRDRCAqLworICAgIHRjZC0+U0FERFIgPSAwVTsKKyAgICB0Y2QtPlNPRkYgPSAwVTsKKyAgICB0Y2QtPkFUVFIgPSAwVTsKKyAgICB0Y2QtPk5CWVRFUyA9IDBVOworICAgIHRjZC0+U0xBU1QgPSAwVTsKKyAgICB0Y2QtPkRBRERSID0gMFU7CisgICAgdGNkLT5ET0ZGID0gMFU7CisgICAgdGNkLT5DSVRFUiA9IDBVOworICAgIHRjZC0+RExBU1RfU0dBID0gMFU7CisgICAgLyogRW5hYmxlIGF1dG8gZGlzYWJsZSByZXF1ZXN0IGZlYXR1cmUgKi8KKyAgICB0Y2QtPkNTUiA9IERNQV9DU1JfRFJFUSh0cnVlKTsKKyAgICB0Y2QtPkJJVEVSID0gMFU7Cit9CisKK3ZvaWQgRURNQV9UY2RTZXRUcmFuc2ZlckNvbmZpZyhlZG1hX3RjZF90ICp0Y2QsIGNvbnN0IGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgKmNvbmZpZywgZWRtYV90Y2RfdCAqbmV4dFRjZCkKK3sKKyAgICBhc3NlcnQodGNkICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KXRjZCAmIDB4MUZVKSA9PSAwKTsKKyAgICBhc3NlcnQoY29uZmlnICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KW5leHRUY2QgJiAweDFGVSkgPT0gMCk7CisKKyAgICAvKiBzb3VyY2UgYWRkcmVzcyAqLworICAgIHRjZC0+U0FERFIgPSBjb25maWctPnNyY0FkZHI7CisgICAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIHRjZC0+REFERFIgPSBjb25maWctPmRlc3RBZGRyOworICAgIC8qIFNvdXJjZSBkYXRhIGFuZCBkZXN0aW5hdGlvbiBkYXRhIHRyYW5zZmVyIHNpemUgKi8KKyAgICB0Y2QtPkFUVFIgPSBETUFfQVRUUl9TU0laRShjb25maWctPnNyY1RyYW5zZmVyU2l6ZSkgfCBETUFfQVRUUl9EU0laRShjb25maWctPmRlc3RUcmFuc2ZlclNpemUpOworICAgIC8qIFNvdXJjZSBhZGRyZXNzIHNpZ25lZCBvZmZzZXQgKi8KKyAgICB0Y2QtPlNPRkYgPSBjb25maWctPnNyY09mZnNldDsKKyAgICAvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHNpZ25lZCBvZmZzZXQgKi8KKyAgICB0Y2QtPkRPRkYgPSBjb25maWctPmRlc3RPZmZzZXQ7CisgICAgLyogTWlub3IgYnl0ZSB0cmFuc2ZlciBjb3VudCAqLworICAgIHRjZC0+TkJZVEVTID0gY29uZmlnLT5taW5vckxvb3BCeXRlczsKKyAgICAvKiBDdXJyZW50IG1ham9yIGl0ZXJhdGlvbiBjb3VudCAqLworICAgIHRjZC0+Q0lURVIgPSBjb25maWctPm1ham9yTG9vcENvdW50czsKKyAgICAvKiBTdGFydGluZyBtYWpvciBpdGVyYXRpb24gY291bnQgKi8KKyAgICB0Y2QtPkJJVEVSID0gY29uZmlnLT5tYWpvckxvb3BDb3VudHM7CisgICAgLyogRW5hYmxlIHNjYXR0ZXIvZ2F0aGVyIHByb2Nlc3NpbmcgKi8KKyAgICBpZiAobmV4dFRjZCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgdGNkLT5ETEFTVF9TR0EgPSAodWludDMyX3QpbmV4dFRjZDsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIEJlZm9yZSBjYWxsIEVETUFfVGNkU2V0VHJhbnNmZXJDb25maWcgb3IgRURNQV9TZXRUcmFuc2ZlckNvbmZpZywKKyAgICAgICAgICAgIHVzZXIgbXVzdCBjYWxsIEVETUFfVGNkUmVzZXQgb3IgRURNQV9SZXNldENoYW5uZWwgd2hpY2ggd2lsbCBzZXQKKyAgICAgICAgICAgIERSRVEsIHNvIG11c3QgdXNlICJ8IiBvciAiJiIgcmF0aGVyIHRoYW4gIj0iLgorCisgICAgICAgICAgICBDbGVhciB0aGUgRFJFUSBiaXQgYmVjYXVzZSBzY2F0dGVyIGdhdGhlciBoYXMgYmVlbiBlbmFibGVkLCBzbyB0aGUKKyAgICAgICAgICAgIHByZXZpb3VzIHRyYW5zZmVyIGlzIG5vdCB0aGUgbGFzdCB0cmFuc2ZlciwgYW5kIGNoYW5uZWwgcmVxdWVzdCBzaG91bGQKKyAgICAgICAgICAgIGJlIGVuYWJsZWQgYXQgdGhlIG5leHQgdHJhbnNmZXIodGhlIG5leHQgVENEKS4KKyAgICAgICAgKi8KKyAgICAgICAgdGNkLT5DU1IgPSAodGNkLT5DU1IgfCBETUFfQ1NSX0VTR19NQVNLKSAmIH5ETUFfQ1NSX0RSRVFfTUFTSzsKKyAgICB9Cit9CisKK3ZvaWQgRURNQV9UY2RTZXRNaW5vck9mZnNldENvbmZpZyhlZG1hX3RjZF90ICp0Y2QsIGNvbnN0IGVkbWFfbWlub3Jfb2Zmc2V0X2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCl0Y2QgJiAweDFGVSkgPT0gMCk7CisKKyAgICB1aW50MzJfdCB0bXByZWc7CisKKyAgICB0bXByZWcgPSB0Y2QtPk5CWVRFUyAmCisgICAgICAgICAgICAgfihETUFfTkJZVEVTX01MT0ZGWUVTX1NNTE9FX01BU0sgfCBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FX01BU0sgfCBETUFfTkJZVEVTX01MT0ZGWUVTX01MT0ZGX01BU0spOworICAgIHRtcHJlZyB8PQorICAgICAgICAoRE1BX05CWVRFU19NTE9GRllFU19TTUxPRShjb25maWctPmVuYWJsZVNyY01pbm9yT2Zmc2V0KSB8CisgICAgICAgICBETUFfTkJZVEVTX01MT0ZGWUVTX0RNTE9FKGNvbmZpZy0+ZW5hYmxlRGVzdE1pbm9yT2Zmc2V0KSB8IERNQV9OQllURVNfTUxPRkZZRVNfTUxPRkYoY29uZmlnLT5taW5vck9mZnNldCkpOworICAgIHRjZC0+TkJZVEVTID0gdG1wcmVnOworfQorCit2b2lkIEVETUFfVGNkU2V0Q2hhbm5lbExpbmsoZWRtYV90Y2RfdCAqdGNkLCBlZG1hX2NoYW5uZWxfbGlua190eXBlX3QgdHlwZSwgdWludDMyX3QgbGlua2VkQ2hhbm5lbCkKK3sKKyAgICBhc3NlcnQodGNkICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KXRjZCAmIDB4MUZVKSA9PSAwKTsKKyAgICBhc3NlcnQobGlua2VkQ2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworCisgICAgaWYgKHR5cGUgPT0ga0VETUFfTWlub3JMaW5rKSAvKiBNaW5vciBsaW5rIGNvbmZpZyAqLworICAgIHsKKyAgICAgICAgdWludDMyX3QgdG1wcmVnOworCisgICAgICAgIC8qIEVuYWJsZSBtaW5vciBsaW5rICovCisgICAgICAgIHRjZC0+Q0lURVIgfD0gRE1BX0NJVEVSX0VMSU5LWUVTX0VMSU5LX01BU0s7CisgICAgICAgIHRjZC0+QklURVIgfD0gRE1BX0JJVEVSX0VMSU5LWUVTX0VMSU5LX01BU0s7CisgICAgICAgIC8qIFNldCBsaWtuZWQgY2hhbm5lbCAqLworICAgICAgICB0bXByZWcgPSB0Y2QtPkNJVEVSICYgKH5ETUFfQ0lURVJfRUxJTktZRVNfTElOS0NIX01BU0spOworICAgICAgICB0bXByZWcgfD0gRE1BX0NJVEVSX0VMSU5LWUVTX0xJTktDSChsaW5rZWRDaGFubmVsKTsKKyAgICAgICAgdGNkLT5DSVRFUiA9IHRtcHJlZzsKKyAgICAgICAgdG1wcmVnID0gdGNkLT5CSVRFUiAmICh+RE1BX0JJVEVSX0VMSU5LWUVTX0xJTktDSF9NQVNLKTsKKyAgICAgICAgdG1wcmVnIHw9IERNQV9CSVRFUl9FTElOS1lFU19MSU5LQ0gobGlua2VkQ2hhbm5lbCk7CisgICAgICAgIHRjZC0+QklURVIgPSB0bXByZWc7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0ga0VETUFfTWFqb3JMaW5rKSAvKiBNYWpvciBsaW5rIGNvbmZpZyAqLworICAgIHsKKyAgICAgICAgdWludDMyX3QgdG1wcmVnOworCisgICAgICAgIC8qIEVuYWJsZSBtYWpvciBsaW5rICovCisgICAgICAgIHRjZC0+Q1NSIHw9IERNQV9DU1JfTUFKT1JFTElOS19NQVNLOworICAgICAgICAvKiBTZXQgbWFqb3IgbGlua2VkIGNoYW5uZWwgKi8KKyAgICAgICAgdG1wcmVnID0gdGNkLT5DU1IgJiAofkRNQV9DU1JfTUFKT1JMSU5LQ0hfTUFTSyk7CisgICAgICAgIHRjZC0+Q1NSID0gdG1wcmVnIHwgRE1BX0NTUl9NQUpPUkxJTktDSChsaW5rZWRDaGFubmVsKTsKKyAgICB9CisgICAgZWxzZSAvKiBMaW5rIG5vbmUgKi8KKyAgICB7CisgICAgICAgIHRjZC0+Q0lURVIgJj0gfkRNQV9DSVRFUl9FTElOS1lFU19FTElOS19NQVNLOworICAgICAgICB0Y2QtPkJJVEVSICY9IH5ETUFfQklURVJfRUxJTktZRVNfRUxJTktfTUFTSzsKKyAgICAgICAgdGNkLT5DU1IgJj0gfkRNQV9DU1JfTUFKT1JFTElOS19NQVNLOworICAgIH0KK30KKwordm9pZCBFRE1BX1RjZFNldE1vZHVsbyhlZG1hX3RjZF90ICp0Y2QsIGVkbWFfbW9kdWxvX3Qgc3JjTW9kdWxvLCBlZG1hX21vZHVsb190IGRlc3RNb2R1bG8pCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKCh1aW50MzJfdCl0Y2QgJiAweDFGVSkgPT0gMCk7CisKKyAgICB1aW50MzJfdCB0bXByZWc7CisKKyAgICB0bXByZWcgPSB0Y2QtPkFUVFIgJiAofihETUFfQVRUUl9TTU9EX01BU0sgfCBETUFfQVRUUl9ETU9EX01BU0spKTsKKyAgICB0Y2QtPkFUVFIgPSB0bXByZWcgfCBETUFfQVRUUl9ETU9EKGRlc3RNb2R1bG8pIHwgRE1BX0FUVFJfU01PRChzcmNNb2R1bG8pOworfQorCit2b2lkIEVETUFfVGNkRW5hYmxlSW50ZXJydXB0cyhlZG1hX3RjZF90ICp0Y2QsIHVpbnQzMl90IG1hc2spCit7CisgICAgYXNzZXJ0KHRjZCAhPSBOVUxMKTsKKworICAgIC8qIEVuYWJsZSBNYWpvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX01ham9ySW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgdGNkLT5DU1IgfD0gRE1BX0NTUl9JTlRNQUpPUl9NQVNLOworICAgIH0KKworICAgIC8qIEVuYWJsZSBIYWxmIG1ham9yIGludGVycnVwdCAqLworICAgIGlmIChtYXNrICYga0VETUFfSGFsZkludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHRjZC0+Q1NSIHw9IERNQV9DU1JfSU5USEFMRl9NQVNLOworICAgIH0KK30KKwordm9pZCBFRE1BX1RjZERpc2FibGVJbnRlcnJ1cHRzKGVkbWFfdGNkX3QgKnRjZCwgdWludDMyX3QgbWFzaykKK3sKKyAgICBhc3NlcnQodGNkICE9IE5VTEwpOworCisgICAgLyogRGlzYWJsZSBNYWpvciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWFzayAmIGtFRE1BX01ham9ySW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgdGNkLT5DU1IgJj0gfkRNQV9DU1JfSU5UTUFKT1JfTUFTSzsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIEhhbGYgbWFqb3IgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9IYWxmSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgdGNkLT5DU1IgJj0gfkRNQV9DU1JfSU5USEFMRl9NQVNLOworICAgIH0KK30KKwordWludDMyX3QgRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpOworCisgICAgdWludDMyX3QgcmVtYWluaW5nQ291bnQgPSAwOworCisgICAgaWYgKERNQV9DU1JfRE9ORV9NQVNLICYgYmFzZS0+VENEW2NoYW5uZWxdLkNTUikKKyAgICB7CisgICAgICAgIHJlbWFpbmluZ0NvdW50ID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSB1bmZpbmlzaGVkIGJ5dGVzICovCisgICAgICAgIGlmIChiYXNlLT5UQ0RbY2hhbm5lbF0uQ0lURVJfRUxJTktOTyAmIERNQV9DSVRFUl9FTElOS05PX0VMSU5LX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlbWFpbmluZ0NvdW50ID0KKyAgICAgICAgICAgICAgICAoYmFzZS0+VENEW2NoYW5uZWxdLkNJVEVSX0VMSU5LWUVTICYgRE1BX0NJVEVSX0VMSU5LWUVTX0NJVEVSX01BU0spID4+IERNQV9DSVRFUl9FTElOS1lFU19DSVRFUl9TSElGVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlbWFpbmluZ0NvdW50ID0KKyAgICAgICAgICAgICAgICAoYmFzZS0+VENEW2NoYW5uZWxdLkNJVEVSX0VMSU5LTk8gJiBETUFfQ0lURVJfRUxJTktOT19DSVRFUl9NQVNLKSA+PiBETUFfQ0lURVJfRUxJTktOT19DSVRFUl9TSElGVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZW1haW5pbmdDb3VudDsKK30KKwordWludDMyX3QgRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpCit7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIHVpbnQzMl90IHJldHZhbCA9IDA7CisKKyAgICAvKiBHZXQgRE9ORSBiaXQgZmxhZyAqLworICAgIHJldHZhbCB8PSAoKGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgJiBETUFfQ1NSX0RPTkVfTUFTSykgPj4gRE1BX0NTUl9ET05FX1NISUZUKTsKKyAgICAvKiBHZXQgRVJST1IgYml0IGZsYWcgKi8KKyAgICByZXR2YWwgfD0gKCgoYmFzZS0+RVJSID4+IGNoYW5uZWwpICYgMHgxVSkgPDwgMVUpOworICAgIC8qIEdldCBJTlQgYml0IGZsYWcgKi8KKyAgICByZXR2YWwgfD0gKCgoYmFzZS0+SU5UID4+IGNoYW5uZWwpICYgMHgxVSkgPDwgMlUpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBFRE1BX0NsZWFyQ2hhbm5lbFN0YXR1c0ZsYWdzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCB1aW50MzJfdCBtYXNrKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICAvKiBDbGVhciBET05FIGJpdCBmbGFnICovCisgICAgaWYgKG1hc2sgJiBrRURNQV9Eb25lRmxhZykKKyAgICB7CisgICAgICAgIGJhc2UtPkNETkUgPSBjaGFubmVsOworICAgIH0KKyAgICAvKiBDbGVhciBFUlJPUiBiaXQgZmxhZyAqLworICAgIGlmIChtYXNrICYga0VETUFfRXJyb3JGbGFnKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q0VSUiA9IGNoYW5uZWw7CisgICAgfQorICAgIC8qIENsZWFyIElOVCBiaXQgZmxhZyAqLworICAgIGlmIChtYXNrICYga0VETUFfSW50ZXJydXB0RmxhZykKKyAgICB7CisgICAgICAgIGJhc2UtPkNJTlQgPSBjaGFubmVsOworICAgIH0KK30KKwordm9pZCBFRE1BX0NyZWF0ZUhhbmRsZShlZG1hX2hhbmRsZV90ICpoYW5kbGUsIERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChoYW5kbGUgIT0gTlVMTCk7CisgICAgYXNzZXJ0KGNoYW5uZWwgPCBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKTsKKworICAgIHVpbnQzMl90IGVkbWFJbnN0YW5jZTsKKyAgICB1aW50MzJfdCBjaGFubmVsSW5kZXg7CisgICAgZWRtYV90Y2RfdCAqdGNkUmVnczsKKworICAgIC8qIFplcm8gdGhlIGhhbmRsZSAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICBoYW5kbGUtPmJhc2UgPSBiYXNlOworICAgIGhhbmRsZS0+Y2hhbm5lbCA9IGNoYW5uZWw7CisgICAgLyogR2V0IHRoZSBETUEgaW5zdGFuY2UgbnVtYmVyICovCisgICAgZWRtYUluc3RhbmNlID0gRURNQV9HZXRJbnN0YW5jZShiYXNlKTsKKyAgICBjaGFubmVsSW5kZXggPSAoZWRtYUluc3RhbmNlICogRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgKyBjaGFubmVsOworICAgIHNfRURNQUhhbmRsZVtjaGFubmVsSW5kZXhdID0gaGFuZGxlOworCisgICAgLyogRW5hYmxlIE5WSUMgaW50ZXJydXB0ICovCisgICAgRW5hYmxlSVJRKHNfZWRtYUlSUU51bWJlcltlZG1hSW5zdGFuY2VdW2NoYW5uZWxdKTsKKworICAgIC8qCisgICAgICAgUmVzZXQgVENEIHJlZ2lzdGVycyB0byB6ZXJvLiBVbmxpa2UgdGhlIEVETUFfVGNkUmVzZXQoRFJFUSB3aWxsIGJlIHNldCksCisgICAgICAgQ1NSIHdpbGwgYmUgMC4gQmVjYXVzZSBpbiBvcmRlciB0byBzdWl0IEVETUEgYnVzeSBjaGVjayBtZWNoYW5pc20gaW4KKyAgICAgICBFRE1BX1N1Ym1pdFRyYW5zZmVyLCBDU1IgbXVzdCBiZSBzZXQgMC4KKyAgICAqLworICAgIHRjZFJlZ3MgPSAoZWRtYV90Y2RfdCAqKSZoYW5kbGUtPmJhc2UtPlRDRFtoYW5kbGUtPmNoYW5uZWxdOworICAgIHRjZFJlZ3MtPlNBRERSID0gMDsKKyAgICB0Y2RSZWdzLT5TT0ZGID0gMDsKKyAgICB0Y2RSZWdzLT5BVFRSID0gMDsKKyAgICB0Y2RSZWdzLT5OQllURVMgPSAwOworICAgIHRjZFJlZ3MtPlNMQVNUID0gMDsKKyAgICB0Y2RSZWdzLT5EQUREUiA9IDA7CisgICAgdGNkUmVncy0+RE9GRiA9IDA7CisgICAgdGNkUmVncy0+Q0lURVIgPSAwOworICAgIHRjZFJlZ3MtPkRMQVNUX1NHQSA9IDA7CisgICAgdGNkUmVncy0+Q1NSID0gMDsKKyAgICB0Y2RSZWdzLT5CSVRFUiA9IDA7Cit9CisKK3ZvaWQgRURNQV9JbnN0YWxsVENETWVtb3J5KGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZWRtYV90Y2RfdCAqdGNkUG9vbCwgdWludDMyX3QgdGNkU2l6ZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlICE9IE5VTEwpOworICAgIGFzc2VydCgoKHVpbnQzMl90KXRjZFBvb2wgJiAweDFGVSkgPT0gMCk7CisKKyAgICAvKiBJbml0aWFsaXplIHRjZCBxdWV1ZSBhdHRpYnV0ZS4gKi8KKyAgICBoYW5kbGUtPmhlYWRlciA9IDA7CisgICAgaGFuZGxlLT50YWlsID0gMDsKKyAgICBoYW5kbGUtPnRjZFVzZWQgPSAwOworICAgIGhhbmRsZS0+dGNkU2l6ZSA9IHRjZFNpemU7CisgICAgaGFuZGxlLT5mbGFncyA9IDA7CisgICAgaGFuZGxlLT50Y2RQb29sID0gdGNkUG9vbDsKK30KKwordm9pZCBFRE1BX1NldENhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgZWRtYV9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlckRhdGEpCit7CisgICAgYXNzZXJ0KGhhbmRsZSAhPSBOVUxMKTsKKworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7Cit9CisKK3ZvaWQgRURNQV9QcmVwYXJlVHJhbnNmZXIoZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdEFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRlc3RXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYnl0ZXNFYWNoUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHJhbnNmZXJCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV90cmFuc2Zlcl90eXBlX3QgdHlwZSkKK3sKKyAgICBhc3NlcnQoY29uZmlnICE9IE5VTEwpOworICAgIGFzc2VydChzcmNBZGRyICE9IE5VTEwpOworICAgIGFzc2VydChkZXN0QWRkciAhPSBOVUxMKTsKKyAgICBhc3NlcnQoKHNyY1dpZHRoID09IDFVKSB8fCAoc3JjV2lkdGggPT0gMlUpIHx8IChzcmNXaWR0aCA9PSA0VSkgfHwgKHNyY1dpZHRoID09IDE2VSkgfHwgKHNyY1dpZHRoID09IDMyVSkpOworICAgIGFzc2VydCgoZGVzdFdpZHRoID09IDFVKSB8fCAoZGVzdFdpZHRoID09IDJVKSB8fCAoZGVzdFdpZHRoID09IDRVKSB8fCAoZGVzdFdpZHRoID09IDE2VSkgfHwgKGRlc3RXaWR0aCA9PSAzMlUpKTsKKyAgICBhc3NlcnQodHJhbnNmZXJCeXRlcyAlIGJ5dGVzRWFjaFJlcXVlc3QgPT0gMCk7CisKKyAgICBjb25maWctPmRlc3RBZGRyID0gKHVpbnQzMl90KWRlc3RBZGRyOworICAgIGNvbmZpZy0+c3JjQWRkciA9ICh1aW50MzJfdClzcmNBZGRyOworICAgIGNvbmZpZy0+bWlub3JMb29wQnl0ZXMgPSBieXRlc0VhY2hSZXF1ZXN0OworICAgIGNvbmZpZy0+bWFqb3JMb29wQ291bnRzID0gdHJhbnNmZXJCeXRlcyAvIGJ5dGVzRWFjaFJlcXVlc3Q7CisgICAgc3dpdGNoIChzcmNXaWR0aCkKKyAgICB7CisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICBjb25maWctPnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgY29uZmlnLT5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUyQnl0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0VToKKyAgICAgICAgICAgIGNvbmZpZy0+c3JjVHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplNEJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTZVOgorICAgICAgICAgICAgY29uZmlnLT5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxNkJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzJVOgorICAgICAgICAgICAgY29uZmlnLT5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUzMkJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgc3dpdGNoIChkZXN0V2lkdGgpCisgICAgeworICAgICAgICBjYXNlIDFVOgorICAgICAgICAgICAgY29uZmlnLT5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMlU6CisgICAgICAgICAgICBjb25maWctPmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUyQnl0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0VToKKyAgICAgICAgICAgIGNvbmZpZy0+ZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2VToKKyAgICAgICAgICAgIGNvbmZpZy0+ZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTE2Qnl0ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzMlU6CisgICAgICAgICAgICBjb25maWctPmRlc3RUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUzMkJ5dGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBrRURNQV9NZW1vcnlUb01lbW9yeToKKyAgICAgICAgICAgIGNvbmZpZy0+ZGVzdE9mZnNldCA9IGRlc3RXaWR0aDsKKyAgICAgICAgICAgIGNvbmZpZy0+c3JjT2Zmc2V0ID0gc3JjV2lkdGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRURNQV9NZW1vcnlUb1BlcmlwaGVyYWw6CisgICAgICAgICAgICBjb25maWctPmRlc3RPZmZzZXQgPSAwVTsKKyAgICAgICAgICAgIGNvbmZpZy0+c3JjT2Zmc2V0ID0gc3JjV2lkdGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRURNQV9QZXJpcGhlcmFsVG9NZW1vcnk6CisgICAgICAgICAgICBjb25maWctPmRlc3RPZmZzZXQgPSBkZXN0V2lkdGg7CisgICAgICAgICAgICBjb25maWctPnNyY09mZnNldCA9IDBVOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXR1c190IEVETUFfU3VibWl0VHJhbnNmZXIoZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCBlZG1hX3RyYW5zZmVyX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGhhbmRsZSAhPSBOVUxMKTsKKyAgICBhc3NlcnQoY29uZmlnICE9IE5VTEwpOworCisgICAgZWRtYV90Y2RfdCAqdGNkUmVncyA9IChlZG1hX3RjZF90ICopJmhhbmRsZS0+YmFzZS0+VENEW2hhbmRsZS0+Y2hhbm5lbF07CisKKyAgICBpZiAoaGFuZGxlLT50Y2RQb29sID09IE5VTEwpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgICAgQ2hlY2sgaWYgRURNQSBpcyBidXN5OiBpZiB0aGUgZ2l2ZW4gY2hhbm5lbCBzdGFydGVkIHRyYW5zZmVyLCBDU1Igd2lsbCBiZSBub3QgemVyby4gQmVjYXVzZQorICAgICAgICAgICAgaWYgaXQgaXMgdGhlIGxhc3QgdHJhbnNmZXIsIERSRVEgd2lsbCBiZSBzZXQuIElmIG5vdCwgRVNHIHdpbGwgYmUgc2V0LiBTbyBpbiBvcmRlciB0byBzdWl0CisgICAgICAgICAgICB0aGlzIGNoZWNrIG1lY2hhbmlzbSwgRURNQV9DcmVhdEhhbmRsZSB3aWxsIGNsZWFyIENTUiByZWdpc3Rlci4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKCh0Y2RSZWdzLT5DU1IgIT0gMCkgJiYgKCh0Y2RSZWdzLT5DU1IgJiBETUFfQ1NSX0RPTkVfTUFTSykgPT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0VETUFfQnVzeTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEVETUFfU2V0VHJhbnNmZXJDb25maWcoaGFuZGxlLT5iYXNlLCBoYW5kbGUtPmNoYW5uZWwsIGNvbmZpZywgTlVMTCk7CisgICAgICAgICAgICAvKiBFbmFibGUgYXV0byBkaXNhYmxlIHJlcXVlc3QgZmVhdHVyZSAqLworICAgICAgICAgICAgaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXS5DU1IgfD0gRE1BX0NTUl9EUkVRX01BU0s7CisgICAgICAgICAgICAvKiBFbmFibGUgbWFqb3IgaW50ZXJydXB0ICovCisgICAgICAgICAgICBoYW5kbGUtPmJhc2UtPlRDRFtoYW5kbGUtPmNoYW5uZWxdLkNTUiB8PSBETUFfQ1NSX0lOVE1BSk9SX01BU0s7CisKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvKiBVc2UgdGhlIFRDRCBxdWV1ZS4gKi8KKyAgICB7CisgICAgICAgIHVpbnQzMl90IHByaW1hc2s7CisgICAgICAgIHVpbnQzMl90IGNzcjsKKyAgICAgICAgaW50OF90IGN1cnJlbnRUY2Q7CisgICAgICAgIGludDhfdCBwcmV2aW91c1RjZDsKKyAgICAgICAgaW50OF90IG5leHRUY2Q7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGNkIHBvb2wgaXMgZnVsbC4gKi8KKyAgICAgICAgcHJpbWFzayA9IERpc2FibGVHbG9iYWxJUlEoKTsKKyAgICAgICAgaWYgKGhhbmRsZS0+dGNkVXNlZCA+PSBoYW5kbGUtPnRjZFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVuYWJsZUdsb2JhbElSUShwcmltYXNrKTsKKworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRURNQV9RdWV1ZUZ1bGw7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFRjZCA9IGhhbmRsZS0+dGFpbDsKKyAgICAgICAgaGFuZGxlLT50Y2RVc2VkKys7CisgICAgICAgIC8qIENhbGN1bGF0ZSBpbmRleCBvZiBuZXh0IFRDRCAqLworICAgICAgICBuZXh0VGNkID0gY3VycmVudFRjZCArIDFVOworICAgICAgICBpZiAobmV4dFRjZCA9PSBoYW5kbGUtPnRjZFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHRUY2QgPSAwVTsKKyAgICAgICAgfQorICAgICAgICAvKiBBZHZhbmNlIHF1ZXVlIHRhaWwgaW5kZXggKi8KKyAgICAgICAgaGFuZGxlLT50YWlsID0gbmV4dFRjZDsKKyAgICAgICAgRW5hYmxlR2xvYmFsSVJRKHByaW1hc2spOworICAgICAgICAvKiBDYWxjdWxhdGUgaW5kZXggb2YgcHJldmlvdXMgVENEICovCisgICAgICAgIHByZXZpb3VzVGNkID0gY3VycmVudFRjZCA/IGN1cnJlbnRUY2QgLSAxVSA6IGhhbmRsZS0+dGNkU2l6ZSAtIDFVOworICAgICAgICAvKiBDb25maWd1cmUgY3VycmVudCBUQ0QgYmxvY2suICovCisgICAgICAgIEVETUFfVGNkUmVzZXQoJmhhbmRsZS0+dGNkUG9vbFtjdXJyZW50VGNkXSk7CisgICAgICAgIEVETUFfVGNkU2V0VHJhbnNmZXJDb25maWcoJmhhbmRsZS0+dGNkUG9vbFtjdXJyZW50VGNkXSwgY29uZmlnLCBOVUxMKTsKKyAgICAgICAgLyogRW5hYmxlIG1ham9yIGludGVycnVwdCAqLworICAgICAgICBoYW5kbGUtPnRjZFBvb2xbY3VycmVudFRjZF0uQ1NSIHw9IERNQV9DU1JfSU5UTUFKT1JfTUFTSzsKKyAgICAgICAgLyogTGluayBjdXJyZW50IFRDRCB3aXRoIG5leHQgVENEIGZvciBpZGVudGlmaWNhdGlvbiBvZiBjdXJyZW50IFRDRCAqLworICAgICAgICBoYW5kbGUtPnRjZFBvb2xbY3VycmVudFRjZF0uRExBU1RfU0dBID0gKHVpbnQzMl90KSZoYW5kbGUtPnRjZFBvb2xbbmV4dFRjZF07CisgICAgICAgIC8qIENoYWluIGZyb20gcHJldmlvdXMgZGVzY3JpcHRvciB1bmxlc3MgdGNkIHBvb2wgc2l6ZSBpcyAxKHRoaXMgZGVzY3JpcHRvciBpcyBpdHMgb3duIHByZWRlY2Vzc29yKS4gKi8KKyAgICAgICAgaWYgKGN1cnJlbnRUY2QgIT0gcHJldmlvdXNUY2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVuYWJsZSBzY2F0dGVyL2dhdGhlciBmZWF0dXJlIGluIHRoZSBwcmV2aW91cyBUQ0QgYmxvY2suICovCisgICAgICAgICAgICBjc3IgPSAoaGFuZGxlLT50Y2RQb29sW3ByZXZpb3VzVGNkXS5DU1IgfCBETUFfQ1NSX0VTR19NQVNLKSAmIH5ETUFfQ1NSX0RSRVFfTUFTSzsKKyAgICAgICAgICAgIGhhbmRsZS0+dGNkUG9vbFtwcmV2aW91c1RjZF0uQ1NSID0gY3NyOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBDaGVjayBpZiB0aGUgVENEIGJsY29rIGluIHRoZSByZWdpc3RlcnMgaXMgdGhlIHByZXZpb3VzIG9uZSAocG9pbnRzIHRvIGN1cnJlbnQgVENEIGJsb2NrKS4gSXQKKyAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBwcmV2aW91cyBUQ0QgbGlua2VkIGhhcyBiZWVuIGxvYWRlZCBpbiBUQ0QgcmVnaXN0ZXIuIElmIHNvLCBpdCBuZWVkIHRvCisgICAgICAgICAgICAgICAgbGluayB0aGUgVENEIHJlZ2lzdGVyIGluIGNhc2UgbGluayB0aGUgY3VycmVudCBUQ0Qgd2l0aCB0aGUgZGVhZCBjaGFpbiB3aGVuIFRDRCBsb2FkaW5nIG9jY3VycworICAgICAgICAgICAgICAgIGJlZm9yZSBsaW5rIHRoZSBwcmV2aW91cyBUQ0QgYmxvY2suCisgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHRjZFJlZ3MtPkRMQVNUX1NHQSA9PSAodWludDMyX3QpJmhhbmRsZS0+dGNkUG9vbFtjdXJyZW50VGNkXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFbmFibGUgc2NhdHRlci9nYXRoZXIgYWxzbyBpbiB0aGUgVENEIHJlZ2lzdGVycy4gKi8KKyAgICAgICAgICAgICAgICBjc3IgPSAodGNkUmVncy0+Q1NSIHwgRE1BX0NTUl9FU0dfTUFTSykgJiB+RE1BX0NTUl9EUkVRX01BU0s7CisgICAgICAgICAgICAgICAgLyogTXVzdCB3cml0ZSB0aGUgQ1NSIHJlZ2lzdGVyIG9uZS10aW1lLCBiZWNhdXNlIHRoZSB0cmFuc2ZlciBtYXliZSBmaW5pc2hlZCBhbnl0aW1lLiAqLworICAgICAgICAgICAgICAgIHRjZFJlZ3MtPkNTUiA9IGNzcjsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBjaGVjayB0aGUgRVNHIGJpdCEKKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGlzIGhhcmR3YXJlIGRlc2lnbjogaWYgRE9ORSBiaXQgaXMgc2V0LCB0aGUgRVNHIGJpdCBjYW4gbm90IGJlIHNldC4gU28gaXQgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGR5bmFtaWMgVENEIGxpbmsgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIElmIEVTRyBiaXQgaXMgbm90IHNldAorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIERMQVNUX1NHQSBpcyBub3QgdGhlIG5leHQgVENEIGFkZHJlc3MoaXQgbWVhbnMgdGhlIGR5bmFtaWMgVENEIGxpbmsgc3VjY2VlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgVENEIGJsb2NrIGhhcyBiZWVuIGxvYWRlZCBpbnRvIFRDRCByZWdpc3RlcnMpLCBpdCBtZWFucyB0cmFuc2ZlciBmaW5pc2hlZAorICAgICAgICAgICAgICAgICAgICBhbmQgVENEIGxpbmsgb3BlcmF0aW9uIGZhaWwsIHNvIG11c3QgaW5zdGFsbCBUQ0QgY29udGVudCBpbnRvIFRDRCByZWdpc3RlcnMgYW5kIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBhZ2Fpbi4gQW5kIGlmIEVTRyBpcyBzZXQsIGl0IG1lYW5zIHRyYW5zZmVyIGhhcyBub3RmaW5pc2hlZCwgc28gVENEIGR5bmFtaWMKKyAgICAgICAgICAgICAgICAgICAgbGluayBzdWNjZWVkLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHRjZFJlZ3MtPkNTUiAmIERNQV9DU1JfRVNHX01BU0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IFRDRCBibG9jayBpcyBhbHJlYWR5IGxvYWRlZCBpbiB0aGUgVENEIHJlZ2lzdGVycy4gSXQgaXMgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gd2hlbiBFU0cgYml0IGlzIG5vdCBzZXQ6IGl0IG1lYW5zIHRoZSBkeW5hbWljIFRDRCBsaW5rIHN1Y2NlZWQgYW5kIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIFRDRCBibG9jayBoYXMgYmVlbiBsb2FkZWQgaW50byBUQ0QgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHRjZFJlZ3MtPkRMQVNUX1NHQSA9PSAodWludDMyX3QpJmhhbmRsZS0+dGNkUG9vbFtuZXh0VGNkXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIElmIGdvIHRvIHRoaXMsIG1lYW5zIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBmaW5pc2hlZCwgYW5kIHRoZSBET05FIGJpdCBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgIFNvIHNoYWxsIGNvbmZpZ3VyZSBUQ0QgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0Y2RSZWdzLT5ETEFTVF9TR0EgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBUaGUgY3VycmVudCBUQ0QgYmxvY2sgaGFzIGJlZW4gbGlua2VkIHN1Y2Nlc3NmdWxseS4gKi8KKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIERMQVNUX1NHQSBpcyAwIGFuZCBpdCBtZWFucyB0aGUgZmlyc3Qgc3VibWl0IHRyYW5zZmVyLCBzbyBzaGFsbCBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgVENEIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIFRoZXJlIGlzIG5vIGxpdmUgY2hhaW4sIFRDRCBibG9jayBuZWVkIHRvIGJlIGluc3RhbGxlZCBpbiBUQ0QgcmVnaXN0ZXJzLiAqLworICAgICAgICBFRE1BX0luc3RhbGxUQ0QoaGFuZGxlLT5iYXNlLCBoYW5kbGUtPmNoYW5uZWwsICZoYW5kbGUtPnRjZFBvb2xbY3VycmVudFRjZF0pOworICAgICAgICAvKiBFbmFibGUgY2hhbm5lbCByZXF1ZXN0IGFnYWluLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5mbGFncyAmIEVETUFfVFJBTlNGRVJfRU5BQkxFRF9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPmJhc2UtPlNFUlEgPSBETUFfU0VSUV9TRVJRKGhhbmRsZS0+Y2hhbm5lbCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgIH0KK30KKwordm9pZCBFRE1BX1N0YXJ0VHJhbnNmZXIoZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUgIT0gTlVMTCk7CisKKyAgICBpZiAoaGFuZGxlLT50Y2RQb29sID09IE5VTEwpCisgICAgeworICAgICAgICBoYW5kbGUtPmJhc2UtPlNFUlEgPSBETUFfU0VSUV9TRVJRKGhhbmRsZS0+Y2hhbm5lbCk7CisgICAgfQorICAgIGVsc2UgLyogVXNlIHRoZSBUQ0QgcXVldWUuICovCisgICAgeworICAgICAgICB1aW50MzJfdCBwcmltYXNrOworICAgICAgICBlZG1hX3RjZF90ICp0Y2RSZWdzID0gKGVkbWFfdGNkX3QgKikmaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXTsKKworICAgICAgICBoYW5kbGUtPmZsYWdzIHw9IEVETUFfVFJBTlNGRVJfRU5BQkxFRF9NQVNLOworCisgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgZGVzY3JpcHRvciBzdWJtaXR0ZWQgc2luY2UgcmVzZXQgKFRDRCBpbiByZWdpc3RlcnMgaXMgdmFsaWQpICovCisgICAgICAgIGlmICh0Y2RSZWdzLT5ETEFTVF9TR0EgIT0gMFUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW1hc2sgPSBEaXNhYmxlR2xvYmFsSVJRKCk7CisgICAgICAgICAgICAvKiBDaGVjayBpZiBjaGFubmVsIHJlcXVlc3QgaXMgYWN0dWFsbHkgZGlzYWJsZS4gKi8KKyAgICAgICAgICAgIGlmICgoaGFuZGxlLT5iYXNlLT5FUlEgJiAoMVUgPDwgaGFuZGxlLT5jaGFubmVsKSkgPT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdHJhbnNmZXIgaXMgcGF1c2VkLiAqLworICAgICAgICAgICAgICAgIGlmICgoISh0Y2RSZWdzLT5DU1IgJiBETUFfQ1NSX0RPTkVfTUFTSykpIHx8ICh0Y2RSZWdzLT5DU1IgJiBETUFfQ1NSX0VTR19NQVNLKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICBSZS1lbmFibGUgY2hhbm5lbCByZXF1ZXN0IG11c3QgYmUgYXMgc29vbiBhcyBwb3NzaWJsZSwgc28gbXVzdCBwdXQgaXQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgY3JpdGljYWwgc2VjdGlvbiB0byBhdm9pZCB0YXNrIHN3aXRjaGluZyBvciBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmJhc2UtPlNFUlEgPSBETUFfU0VSUV9TRVJRKGhhbmRsZS0+Y2hhbm5lbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgRW5hYmxlR2xvYmFsSVJRKHByaW1hc2spOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEVETUFfU3RvcFRyYW5zZmVyKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlICE9IE5VTEwpOworCisgICAgaGFuZGxlLT5mbGFncyAmPSAofkVETUFfVFJBTlNGRVJfRU5BQkxFRF9NQVNLKTsKKyAgICBoYW5kbGUtPmJhc2UtPkNFUlEgPSBETUFfQ0VSUV9DRVJRKGhhbmRsZS0+Y2hhbm5lbCk7Cit9CisKK3ZvaWQgRURNQV9BYm9ydFRyYW5zZmVyKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBoYW5kbGUtPmJhc2UtPkNFUlEgPSBETUFfQ0VSUV9DRVJRKGhhbmRsZS0+Y2hhbm5lbCk7CisgICAgLyoKKyAgICAgICAgQ2xlYXIgQ1NSIHRvIHJlbGVhc2UgY2hhbm5lbC4gQmVjYXVzZSBpZiB0aGUgZ2l2ZW4gY2hhbm5lbCBzdGFydGVkIHRyYW5zZmVyLAorICAgICAgICBDU1Igd2lsbCBiZSBub3QgemVyby4gQmVjYXVzZSBpZiBpdCBpcyB0aGUgbGFzdCB0cmFuc2ZlciwgRFJFUSB3aWxsIGJlIHNldC4KKyAgICAgICAgSWYgbm90LCBFU0cgd2lsbCBiZSBzZXQuCisgICAgKi8KKyAgICBoYW5kbGUtPmJhc2UtPlRDRFtoYW5kbGUtPmNoYW5uZWxdLkNTUiA9IDA7CisgICAgLyogQ2FuY2VsIGFsbCBuZXh0IFRDRCB0cmFuc2Zlci4gKi8KKyAgICBoYW5kbGUtPmJhc2UtPlRDRFtoYW5kbGUtPmNoYW5uZWxdLkRMQVNUX1NHQSA9IDA7Cit9CisKK3ZvaWQgRURNQV9IYW5kbGVJUlEoZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUgIT0gTlVMTCk7CisKKyAgICAvKiBDbGVhciBFRE1BIGludGVycnVwdCBmbGFnICovCisgICAgaGFuZGxlLT5iYXNlLT5DSU5UID0gaGFuZGxlLT5jaGFubmVsOworICAgIGlmICgoaGFuZGxlLT50Y2RQb29sID09IE5VTEwpICYmIChoYW5kbGUtPmNhbGxiYWNrICE9IE5VTEwpKQorICAgIHsKKyAgICAgICAgKGhhbmRsZS0+Y2FsbGJhY2spKGhhbmRsZSwgaGFuZGxlLT51c2VyRGF0YSwgdHJ1ZSwgMCk7CisgICAgfQorICAgIGVsc2UgLyogVXNlIHRoZSBUQ0QgcXVldWUuIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRlc2NyaXB0aW9ucyBpbiB0aGUgZURNQSBoZWFkZXIgZmlsZSBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uICovCisgICAgeworICAgICAgICB1aW50MzJfdCBzZ2EgPSBoYW5kbGUtPmJhc2UtPlRDRFtoYW5kbGUtPmNoYW5uZWxdLkRMQVNUX1NHQTsKKyAgICAgICAgdWludDMyX3Qgc2dhX2luZGV4OworICAgICAgICBpbnQzMl90IHRjZHNfZG9uZTsKKyAgICAgICAgdWludDhfdCBuZXdfaGVhZGVyOworICAgICAgICBib29sIHRyYW5zZmVyX2RvbmU7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdHJhbnNmZXIgaXMgYWxyZWFkeSBmaW5pc2hlZC4gKi8KKyAgICAgICAgdHJhbnNmZXJfZG9uZSA9ICgoaGFuZGxlLT5iYXNlLT5UQ0RbaGFuZGxlLT5jaGFubmVsXS5DU1IgJiBETUFfQ1NSX0RPTkVfTUFTSykgIT0gMCk7CisgICAgICAgIC8qIEdldCB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IHRyYW5zZmVyIFRDRCBibGNva3MgdG8gYmUgbG9hZGVkIGludG8gdGhlIGVETUEgZW5naW5lLiAqLworICAgICAgICBzZ2EgLT0gKHVpbnQzMl90KWhhbmRsZS0+dGNkUG9vbDsKKyAgICAgICAgLyogR2V0IHRoZSBpbmRleCBvZiB0aGUgbmV4dCB0cmFuc2ZlciBUQ0QgYmxjb2tzIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBlRE1BIGVuZ2luZS4gKi8KKyAgICAgICAgc2dhX2luZGV4ID0gc2dhIC8gc2l6ZW9mKGVkbWFfdGNkX3QpOworICAgICAgICAvKiBBZGp1c3QgaGVhZGVyIHBvc2l0aW9ucy4gKi8KKyAgICAgICAgaWYgKHRyYW5zZmVyX2RvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE5ldyBoZWFkZXIgc2hhbGwgcG9pbnQgdG8gdGhlIG5leHQgVENEIHRvIGJlIGxvYWRlZCAoY3VycmVudCBvbmUgaXMgYWxyZWFkeSBmaW5pc2hlZCkgKi8KKyAgICAgICAgICAgIG5ld19oZWFkZXIgPSBzZ2FfaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBOZXcgaGVhZGVyIHNoYWxsIHBvaW50IHRvIHRoaXMgZGVzY3JpcHRvciBjdXJyZW50bHkgbG9hZGVkIChub3QgZmluaXNoZWQgeWV0KSAqLworICAgICAgICAgICAgbmV3X2hlYWRlciA9IHNnYV9pbmRleCA/IHNnYV9pbmRleCAtIDFVIDogaGFuZGxlLT50Y2RTaXplIC0gMVU7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZmluaXNoZWQgVENEcyAqLworICAgICAgICBpZiAobmV3X2hlYWRlciA9PSBoYW5kbGUtPmhlYWRlcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dGNkVXNlZCA9PSBoYW5kbGUtPnRjZFNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGNkc19kb25lID0gaGFuZGxlLT50Y2RVc2VkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIE5vIFRDRCBpbiB0aGUgbWVtb3J5IGFyZSBnb2luZyB0byBiZSBsb2FkZWQgb3IgaW50ZXJuYWwgZXJyb3Igb2NjdXJzLiAqLworICAgICAgICAgICAgICAgIHRjZHNfZG9uZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0Y2RzX2RvbmUgPSBuZXdfaGVhZGVyIC0gaGFuZGxlLT5oZWFkZXI7CisgICAgICAgICAgICBpZiAodGNkc19kb25lIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0Y2RzX2RvbmUgKz0gaGFuZGxlLT50Y2RTaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIEFkdmFuY2UgaGVhZGVyIHdoaWNoIHBvaW50cyB0byB0aGUgVENEIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBlRE1BIGVuZ2luZSBmcm9tIG1lbW9yeS4gKi8KKyAgICAgICAgaGFuZGxlLT5oZWFkZXIgPSBuZXdfaGVhZGVyOworICAgICAgICAvKiBSZWxlYXNlIFRDRCBibG9ja3MuIHRjZFVzZWQgaXMgdGhlIFRDRCBudW1iZXIgd2hpY2ggY2FuIGJlIHVzZWQvbG9hZGVkIGluIHRoZSBtZW1vcnkgcG9vbC4gKi8KKyAgICAgICAgaGFuZGxlLT50Y2RVc2VkIC09IHRjZHNfZG9uZTsKKyAgICAgICAgLyogSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgKGhhbmRsZS0+Y2FsbGJhY2spKGhhbmRsZSwgaGFuZGxlLT51c2VyRGF0YSwgdHJhbnNmZXJfZG9uZSwgdGNkc19kb25lKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogOCBjaGFubmVscyAoU2hhcmVkKToga2wyOCAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA9PSA4VQorCit2b2lkIERNQTBfMDRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMF0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzRdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNV0pOworICAgIH0KK30KKwordm9pZCBETUEwXzI2X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDJVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzJdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA2VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs2XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMzdfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbM10pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzddKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKERNQTEpCit2b2lkIERNQTFfMDRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOF0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEyXSk7CisgICAgfQorfQorCit2b2lkIERNQTFfMTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEzXSk7CisgICAgfQorfQorCit2b2lkIERNQTFfMjZfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCA2VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxNF0pOworICAgIH0KK30KKwordm9pZCBETUExXzM3X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDNVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzExXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgN1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTVdKTsKKyAgICB9Cit9CisjZW5kaWYKKyNlbmRpZiAvKiA4IGNoYW5uZWxzIChTaGFyZWQpICovCisKKy8qIDE2IGNoYW5uZWxzIChTaGFyZWQpOiBLMzJIODQ0UCAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA9PSAxNlUKKwordm9pZCBETUEwXzA4X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA4VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs4XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfMTlfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzldKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yMTBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMl0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDEwVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMF0pOworICAgIH0KK30KKwordm9pZCBETUEwXzMxMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAzVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVszXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzExXSk7CisgICAgfQorfQorCit2b2lkIERNQTBfNDEyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzRdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTJdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF81MTNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDEzVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxM10pOworICAgIH0KK30KKwordm9pZCBETUEwXzYxNF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA2VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs2XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE0XSk7CisgICAgfQorfQorCit2b2lkIERNQTBfNzE1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzddKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTVdKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKERNQTEpCit2b2lkIERNQTFfMDhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTZdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCA4VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyNF0pOworICAgIH0KK30KKwordm9pZCBETUExXzE5X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTEsIDFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE3XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgOVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjVdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV8yMTBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMThdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjZdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV8zMTFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTldKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjddKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV80MTJfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgNFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjhdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV81MTNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjFdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjldKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV82MTRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjJdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxNFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzBdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMV83MTVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMSwgN1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjNdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUExLCAxNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzFdKTsKKyAgICB9Cit9CisjZW5kaWYKKyNlbmRpZiAvKiAxNiBjaGFubmVscyAoU2hhcmVkKSAqLworCisvKiAzMiBjaGFubmVscyAoU2hhcmVkKTogazgwICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKSAmJiBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMID09IDMyVQorCit2b2lkIERNQTBfRE1BMTZfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMF0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDE2VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxNl0pOworICAgIH0KK30KKwordm9pZCBETUExX0RNQTE3X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzFdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxN1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTddKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMl9ETUExOF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMThVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE4XSk7CisgICAgfQorfQorCit2b2lkIERNQTNfRE1BMTlfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbM10pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDE5VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxOV0pOworICAgIH0KK30KKwordm9pZCBETUE0X0RNQTIwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzRdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjBdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BNV9ETUEyMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA1VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs1XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIxXSk7CisgICAgfQorfQorCit2b2lkIERNQTZfRE1BMjJfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNl0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDIyVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyMl0pOworICAgIH0KK30KKwordm9pZCBETUE3X0RNQTIzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzddKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjNdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BOF9ETUEyNF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCA4VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs4XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI0XSk7CisgICAgfQorfQorCit2b2lkIERNQTlfRE1BMjVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgOVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDI1VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyNV0pOworICAgIH0KK30KKwordm9pZCBETUExMF9ETUEyNl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjZdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMTFfRE1BMjdfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTFVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzExXSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMjdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI3XSk7CisgICAgfQorfQorCit2b2lkIERNQTEyX0RNQTI4X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDEyVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMl0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDI4VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyOF0pOworICAgIH0KK30KKwordm9pZCBETUExM19ETUEyOV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTNdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyOVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjldKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMTRfRE1BMzBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMTRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE0XSk7CisgICAgfQorICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMzBVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzMwXSk7CisgICAgfQorfQorCit2b2lkIERNQTE1X0RNQTMxX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDE1VSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxNV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDMxVSkgJiBrRURNQV9JbnRlcnJ1cHRGbGFnKSAhPSAwVSkKKyAgICB7CisgICAgICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVszMV0pOworICAgIH0KK30KKyNlbmRpZiAvKiAzMiBjaGFubmVscyAoU2hhcmVkKSAqLworCisvKiAzMiBjaGFubmVscyAoU2hhcmVkKTogTUNJTVg3VTVfTTQgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpICYmIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPT0gMzJVCisKK3ZvaWQgRE1BMF8wXzRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMF0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDRVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzRdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xXzVfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMV0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDVVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzVdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yXzZfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMl0pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDZVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzZdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8zXzdfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIGlmICgoRURNQV9HZXRDaGFubmVsU3RhdHVzRmxhZ3MoRE1BMCwgM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbM10pOworICAgIH0KKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDdVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzddKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF84XzEyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDhVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzhdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTJdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF85XzEzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBpZiAoKEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQTAsIDlVKSAmIGtFRE1BX0ludGVycnVwdEZsYWcpICE9IDBVKQorICAgIHsKKyAgICAgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzldKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTNdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xMF8xNF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTBdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxNFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTRdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xMV8xNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTFdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTVdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xNl8yMF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTZdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjBdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xN18yMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxN1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTddKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjFdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xOF8yMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxOFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMThdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyMlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjJdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8xOV8yM19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAxOVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTldKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyM1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjNdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yNF8yOF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyNFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjRdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyOFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjhdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yNV8yOV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyNVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjVdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyOVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjldKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yNl8zMF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyNlUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjZdKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAzMFUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzBdKTsKKyAgICB9Cit9CisKK3ZvaWQgRE1BMF8yN18zMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAyN1UpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjddKTsKKyAgICB9CisgICAgaWYgKChFRE1BX0dldENoYW5uZWxTdGF0dXNGbGFncyhETUEwLCAzMVUpICYga0VETUFfSW50ZXJydXB0RmxhZykgIT0gMFUpCisgICAgeworICAgICAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzFdKTsKKyAgICB9Cit9CisjZW5kaWYgLyogMzIgY2hhbm5lbHMgKFNoYXJlZCk6IE1DSU1YN1U1ICovCisKKy8qIDQgY2hhbm5lbHMgKE5vIFNoYXJlZCk6IGt2MTAgICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKSAmJiBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMID4gMAorCit2b2lkIERNQTBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVswXSk7Cit9CisKK3ZvaWQgRE1BMV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzFdKTsKK30KKwordm9pZCBETUEyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMl0pOworfQorCit2b2lkIERNQTNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVszXSk7Cit9CisKKy8qIDggY2hhbm5lbHMgKE5vIFNoYXJlZCkgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwpICYmIEZTTF9GRUFUVVJFX0VETUFfTU9EVUxFX0NIQU5ORUwgPiA0VQorCit2b2lkIERNQTRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs0XSk7Cit9CisKK3ZvaWQgRE1BNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzVdKTsKK30KKwordm9pZCBETUE2X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbNl0pOworfQorCit2b2lkIERNQTdfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs3XSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA9PSA4ICovCisKKy8qIDE2IGNoYW5uZWxzIChObyBTaGFyZWQpICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMKSAmJiBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMID4gOFUKKwordm9pZCBETUE4X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbOF0pOworfQorCit2b2lkIERNQTlfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVs5XSk7Cit9CisKK3ZvaWQgRE1BMTBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxMF0pOworfQorCit2b2lkIERNQTExX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTFdKTsKK30KKwordm9pZCBETUExMl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzEyXSk7Cit9CisKK3ZvaWQgRE1BMTNfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxM10pOworfQorCit2b2lkIERNQTE0X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTRdKTsKK30KKwordm9pZCBETUExNV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE1XSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA9PSAxNiAqLworCisvKiAzMiBjaGFubmVscyAoTm8gU2hhcmVkKSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCA+IDE2VQorCit2b2lkIERNQTE2X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTZdKTsKK30KKwordm9pZCBETUExN19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzE3XSk7Cit9CisKK3ZvaWQgRE1BMThfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsxOF0pOworfQorCit2b2lkIERNQTE5X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMTldKTsKK30KKwordm9pZCBETUEyMF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIwXSk7Cit9CisKK3ZvaWQgRE1BMjFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyMV0pOworfQorCit2b2lkIERNQTIyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjJdKTsKK30KKwordm9pZCBETUEyM19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzIzXSk7Cit9CisKK3ZvaWQgRE1BMjRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyNF0pOworfQorCit2b2lkIERNQTI1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjVdKTsKK30KKwordm9pZCBETUEyNl9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI2XSk7Cit9CisKK3ZvaWQgRE1BMjdfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVsyN10pOworfQorCit2b2lkIERNQTI4X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMjhdKTsKK30KKwordm9pZCBETUEyOV9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgRURNQV9IYW5kbGVJUlEoc19FRE1BSGFuZGxlWzI5XSk7Cit9CisKK3ZvaWQgRE1BMzBfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIEVETUFfSGFuZGxlSVJRKHNfRURNQUhhbmRsZVszMF0pOworfQorCit2b2lkIERNQTMxX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBFRE1BX0hhbmRsZUlSUShzX0VETUFIYW5kbGVbMzFdKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9FRE1BX01PRFVMRV9DSEFOTkVMID09IDMyICovCisKKyNlbmRpZiAvKiA0LzgvMTYvMzIgY2hhbm5lbHMgKE5vIFNoYXJlZCkgICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9lZG1hLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9lZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3NjIyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2VkbWEuaApAQCAtMCwwICsxLDkxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZTTF9FRE1BX0hfCisjZGVmaW5lIF9GU0xfRURNQV9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGVkbWEKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBlRE1BIGRyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEZTTF9FRE1BX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMSwgMSkpIC8qITwgVmVyc2lvbiAyLjEuMS4gKi8KKy8qQH0qLworCisvKiEgQGJyaWVmIENvbXB1dGUgdGhlIG9mZnNldCB1bml0IGZyb20gRENIUFJJMyAqLworI2RlZmluZSBETUFfRENIUFJJX0lOREVYKGNoYW5uZWwpICgoKGNoYW5uZWwpICYgfjB4MDNVKSB8ICgzIC0gKChjaGFubmVsKSYweDAzVSkpKQorCisvKiEgQGJyaWVmIEdldCB0aGUgcG9pbnRlciBvZiBEQ0hQUkluICovCisjZGVmaW5lIERNQV9EQ0hQUkluKGJhc2UsIGNoYW5uZWwpICgodm9sYXRpbGUgdWludDhfdCAqKSYoYmFzZS0+RENIUFJJMykpW0RNQV9EQ0hQUklfSU5ERVgoY2hhbm5lbCldCisKKy8qISBAYnJpZWYgZURNQSB0cmFuc2ZlciBjb25maWd1cmF0aW9uICovCit0eXBlZGVmIGVudW0gX2VkbWFfdHJhbnNmZXJfc2l6ZQoreworICAgIGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlcyA9IDB4MFUsICAvKiE8IFNvdXJjZS9EZXN0aW5hdGlvbiBkYXRhIHRyYW5zZmVyIHNpemUgaXMgMSBieXRlIGV2ZXJ5IHRpbWUgKi8KKyAgICBrRURNQV9UcmFuc2ZlclNpemUyQnl0ZXMgPSAweDFVLCAgLyohPCBTb3VyY2UvRGVzdGluYXRpb24gZGF0YSB0cmFuc2ZlciBzaXplIGlzIDIgYnl0ZXMgZXZlcnkgdGltZSAqLworICAgIGtFRE1BX1RyYW5zZmVyU2l6ZTRCeXRlcyA9IDB4MlUsICAvKiE8IFNvdXJjZS9EZXN0aW5hdGlvbiBkYXRhIHRyYW5zZmVyIHNpemUgaXMgNCBieXRlcyBldmVyeSB0aW1lICovCisgICAga0VETUFfVHJhbnNmZXJTaXplMTZCeXRlcyA9IDB4NFUsIC8qITwgU291cmNlL0Rlc3RpbmF0aW9uIGRhdGEgdHJhbnNmZXIgc2l6ZSBpcyAxNiBieXRlcyBldmVyeSB0aW1lICovCisgICAga0VETUFfVHJhbnNmZXJTaXplMzJCeXRlcyA9IDB4NVUsIC8qITwgU291cmNlL0Rlc3RpbmF0aW9uIGRhdGEgdHJhbnNmZXIgc2l6ZSBpcyAzMiBieXRlcyBldmVyeSB0aW1lICovCit9IGVkbWFfdHJhbnNmZXJfc2l6ZV90OworCisvKiEgQGJyaWVmIGVETUEgbW9kdWxvIGNvbmZpZ3VyYXRpb24gKi8KK3R5cGVkZWYgZW51bSBfZWRtYV9tb2R1bG8KK3sKKyAgICBrRURNQV9Nb2R1bG9EaXNhYmxlID0gMHgwVSwgLyohPCBEaXNhYmxlIG1vZHVsbyAqLworICAgIGtFRE1BX01vZHVsbzJieXRlcywgICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDIgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvNGJ5dGVzLCAgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgNCBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG84Ynl0ZXMsICAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA4IGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzE2Ynl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDE2IGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzMyYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDMyIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzY0Ynl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDY0IGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzEyOGJ5dGVzLCAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDEyOCBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8yNTZieXRlcywgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAyNTYgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvNTEyYnl0ZXMsICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgNTEyIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzFLYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDEgSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8yS2J5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAyIEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvNEtieXRlcywgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgNCBLIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzhLYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDggSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8xNktieXRlcywgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAxNiBLIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzMyS2J5dGVzLCAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDMyIEsgYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvNjRLYnl0ZXMsICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgNjQgSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8xMjhLYnl0ZXMsICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAxMjggSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8yNTZLYnl0ZXMsICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAyNTYgSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG81MTJLYnl0ZXMsICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA1MTIgSyBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8xTWJ5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAxIE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMk1ieXRlcywgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMiBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzRNYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDQgTSBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG84TWJ5dGVzLCAgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyA4IE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMTZNYnl0ZXMsICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMTYgTSBieXRlcy4gKi8KKyAgICBrRURNQV9Nb2R1bG8zMk1ieXRlcywgICAgICAgLyohPCBDaXJjdWxhciBidWZmZXIgc2l6ZSBpcyAzMiBNIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzY0TWJ5dGVzLCAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDY0IE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMTI4TWJ5dGVzLCAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMTI4IE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMjU2TWJ5dGVzLCAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMjU2IE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvNTEyTWJ5dGVzLCAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgNTEyIE0gYnl0ZXMuICovCisgICAga0VETUFfTW9kdWxvMUdieXRlcywgICAgICAgIC8qITwgQ2lyY3VsYXIgYnVmZmVyIHNpemUgaXMgMSBHIGJ5dGVzLiAqLworICAgIGtFRE1BX01vZHVsbzJHYnl0ZXMsICAgICAgICAvKiE8IENpcmN1bGFyIGJ1ZmZlciBzaXplIGlzIDIgRyBieXRlcy4gKi8KK30gZWRtYV9tb2R1bG9fdDsKKworLyohIEBicmllZiBCYW5kd2lkdGggY29udHJvbCAqLwordHlwZWRlZiBlbnVtIF9lZG1hX2JhbmR3aWR0aAoreworICAgIGtFRE1BX0JhbmR3aWR0aFN0YWxsTm9uZSA9IDB4MFUsICAgLyohPCBObyBlRE1BIGVuZ2luZSBzdGFsbHMuICovCisgICAga0VETUFfQmFuZHdpZHRoU3RhbGw0Q3ljbGUgPSAweDJVLCAvKiE8IGVETUEgZW5naW5lIHN0YWxscyBmb3IgNCBjeWNsZXMgYWZ0ZXIgZWFjaCByZWFkL3dyaXRlLiAqLworICAgIGtFRE1BX0JhbmR3aWR0aFN0YWxsOEN5Y2xlID0gMHgzVSwgLyohPCBlRE1BIGVuZ2luZSBzdGFsbHMgZm9yIDggY3ljbGVzIGFmdGVyIGVhY2ggcmVhZC93cml0ZS4gKi8KK30gZWRtYV9iYW5kd2lkdGhfdDsKKworLyohIEBicmllZiBDaGFubmVsIGxpbmsgdHlwZSAqLwordHlwZWRlZiBlbnVtIF9lZG1hX2NoYW5uZWxfbGlua190eXBlCit7CisgICAga0VETUFfTGlua05vbmUgPSAweDBVLCAvKiE8IE5vIGNoYW5uZWwgbGluayAgKi8KKyAgICBrRURNQV9NaW5vckxpbmssICAgICAgIC8qITwgQ2hhbm5lbCBsaW5rIGFmdGVyIGVhY2ggbWlub3IgbG9vcCAqLworICAgIGtFRE1BX01ham9yTGluaywgICAgICAgLyohPCBDaGFubmVsIGxpbmsgd2hpbGUgbWFqb3IgbG9vcCBjb3VudCBleGhhdXN0ZWQgKi8KK30gZWRtYV9jaGFubmVsX2xpbmtfdHlwZV90OworCisvKiFAYnJpZWYgZURNQSBjaGFubmVsIHN0YXR1cyBmbGFncy4gKi8KK2VudW0gX2VkbWFfY2hhbm5lbF9zdGF0dXNfZmxhZ3MKK3sKKyAgICBrRURNQV9Eb25lRmxhZyA9IDB4MVUsICAgICAgLyohPCBET05FIGZsYWcsIHNldCB3aGlsZSB0cmFuc2ZlciBmaW5pc2hlZCwgQ0lURVIgdmFsdWUgZXhoYXVzdGVkKi8KKyAgICBrRURNQV9FcnJvckZsYWcgPSAweDJVLCAgICAgLyohPCBlRE1BIGVycm9yIGZsYWcsIGFuIGVycm9yIG9jY3VycmVkIGluIGEgdHJhbnNmZXIgKi8KKyAgICBrRURNQV9JbnRlcnJ1cHRGbGFnID0gMHg0VSwgLyohPCBlRE1BIGludGVycnVwdCBmbGFnLCBzZXQgd2hpbGUgYW4gaW50ZXJydXB0IG9jY3VycmVkIG9mIHRoaXMgY2hhbm5lbCAqLworfTsKKworLyohIEBicmllZiBlRE1BIGNoYW5uZWwgZXJyb3Igc3RhdHVzIGZsYWdzLiAqLworZW51bSBfZWRtYV9lcnJvcl9zdGF0dXNfZmxhZ3MKK3sKKyAgICBrRURNQV9EZXN0aW5hdGlvbkJ1c0Vycm9yRmxhZyA9IERNQV9FU19EQkVfTUFTSywgICAgLyohPCBCdXMgZXJyb3Igb24gZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIGtFRE1BX1NvdXJjZUJ1c0Vycm9yRmxhZyA9IERNQV9FU19TQkVfTUFTSywgICAgICAgICAvKiE8IEJ1cyBlcnJvciBvbiB0aGUgc291cmNlIGFkZHJlc3MgKi8KKyAgICBrRURNQV9TY2F0dGVyR2F0aGVyRXJyb3JGbGFnID0gRE1BX0VTX1NHRV9NQVNLLCAgICAgLyohPCBFcnJvciBvbiB0aGUgU2NhdHRlci9HYXRoZXIgYWRkcmVzcywgbm90IDMyYnl0ZSBhbGlnbmVkLiAqLworICAgIGtFRE1BX05ieXRlc0Vycm9yRmxhZyA9IERNQV9FU19OQ0VfTUFTSywgICAgICAgICAgICAvKiE8IE5CWVRFUy9DSVRFUiBjb25maWd1cmF0aW9uIGVycm9yICovCisgICAga0VETUFfRGVzdGluYXRpb25PZmZzZXRFcnJvckZsYWcgPSBETUFfRVNfRE9FX01BU0ssIC8qITwgRGVzdGluYXRpb24gb2Zmc2V0IG5vdCBhbGlnbmVkIHdpdGggZGVzdGluYXRpb24gc2l6ZSAqLworICAgIGtFRE1BX0Rlc3RpbmF0aW9uQWRkcmVzc0Vycm9yRmxhZyA9IERNQV9FU19EQUVfTUFTSywgLyohPCBEZXN0aW5hdGlvbiBhZGRyZXNzIG5vdCBhbGlnbmVkIHdpdGggZGVzdGluYXRpb24gc2l6ZSAqLworICAgIGtFRE1BX1NvdXJjZU9mZnNldEVycm9yRmxhZyA9IERNQV9FU19TT0VfTUFTSywgICAgICAgLyohPCBTb3VyY2Ugb2Zmc2V0IG5vdCBhbGlnbmVkIHdpdGggc291cmNlIHNpemUgKi8KKyAgICBrRURNQV9Tb3VyY2VBZGRyZXNzRXJyb3JGbGFnID0gRE1BX0VTX1NBRV9NQVNLLCAgICAgIC8qITwgU291cmNlIGFkZHJlc3Mgbm90IGFsaWduZWQgd2l0aCBzb3VyY2Ugc2l6ZSovCisgICAga0VETUFfRXJyb3JDaGFubmVsRmxhZyA9IERNQV9FU19FUlJDSE5fTUFTSywgICAgICAgICAvKiE8IEVycm9yIGNoYW5uZWwgbnVtYmVyIG9mIHRoZSBjYW5jZWxsZWQgY2hhbm5lbCBudW1iZXIgKi8KKyAgICBrRURNQV9DaGFubmVsUHJpb3JpdHlFcnJvckZsYWcgPSBETUFfRVNfQ1BFX01BU0ssICAgIC8qITwgQ2hhbm5lbCBwcmlvcml0eSBpcyBub3QgdW5pcXVlLiAqLworICAgIGtFRE1BX1RyYW5zZmVyQ2FuY2VsZWRGbGFnID0gRE1BX0VTX0VDWF9NQVNLLCAgICAgICAgLyohPCBUcmFuc2ZlciBjYW5jZWxsZWQgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0VETUFfQ0hBTk5FTF9HUk9VUF9DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfRURNQV9DSEFOTkVMX0dST1VQX0NPVU5UID4gMQorICAgIGtFRE1BX0dyb3VwUHJpb3JpdHlFcnJvckZsYWcgPSBETUFfRVNfR1BFX01BU0ssIC8qITwgR3JvdXAgcHJpb3JpdHkgaXMgbm90IHVuaXF1ZS4gKi8KKyNlbmRpZgorICAgIGtFRE1BX1ZhbGlkRmxhZyA9IERNQV9FU19WTERfTUFTSywgLyohPCBObyBlcnJvciBvY2N1cnJlZCwgdGhpcyBiaXQgaXMgMC4gT3RoZXJ3aXNlLCBpdCBpcyAxLiAqLworfTsKKworLyohIEBicmllZiBlRE1BIGludGVycnVwdCBzb3VyY2UgKi8KK3R5cGVkZWYgZW51bSBfZWRtYV9pbnRlcnJ1cHRfZW5hYmxlCit7CisgICAga0VETUFfRXJyb3JJbnRlcnJ1cHRFbmFibGUgPSAweDFVLCAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIGludGVycnVwdCB3aGlsZSBjaGFubmVsIGVycm9yIG9jY3Vycy4gKi8KKyAgICBrRURNQV9NYWpvckludGVycnVwdEVuYWJsZSA9IERNQV9DU1JfSU5UTUFKT1JfTUFTSywgLyohPCBFbmFibGUgaW50ZXJydXB0IHdoaWxlIG1ham9yIGNvdW50IGV4aGF1c3RlZC4gKi8KKyAgICBrRURNQV9IYWxmSW50ZXJydXB0RW5hYmxlID0gRE1BX0NTUl9JTlRIQUxGX01BU0ssICAgLyohPCBFbmFibGUgaW50ZXJydXB0IHdoaWxlIG1ham9yIGNvdW50IHRvIGhhbGYgdmFsdWUuICovCit9IGVkbWFfaW50ZXJydXB0X2VuYWJsZV90OworCisvKiEgQGJyaWVmIGVETUEgdHJhbnNmZXIgdHlwZSAqLwordHlwZWRlZiBlbnVtIF9lZG1hX3RyYW5zZmVyX3R5cGUKK3sKKyAgICBrRURNQV9NZW1vcnlUb01lbW9yeSA9IDB4MFUsIC8qITwgVHJhbnNmZXIgZnJvbSBtZW1vcnkgdG8gbWVtb3J5ICovCisgICAga0VETUFfUGVyaXBoZXJhbFRvTWVtb3J5LCAgICAvKiE8IFRyYW5zZmVyIGZyb20gcGVyaXBoZXJhbCB0byBtZW1vcnkgKi8KKyAgICBrRURNQV9NZW1vcnlUb1BlcmlwaGVyYWwsICAgIC8qITwgVHJhbnNmZXIgZnJvbSBtZW1vcnkgdG8gcGVyaXBoZXJhbCAqLworfSBlZG1hX3RyYW5zZmVyX3R5cGVfdDsKKworLyohIEBicmllZiBlRE1BIHRyYW5zZmVyIHN0YXR1cyAqLworZW51bSBfZWRtYV90cmFuc2Zlcl9zdGF0dXMKK3sKKyAgICBrU3RhdHVzX0VETUFfUXVldWVGdWxsID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0VETUEsIDApLCAvKiE8IFRDRCBxdWV1ZSBpcyBmdWxsLiAqLworICAgIGtTdGF0dXNfRURNQV9CdXN5ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0VETUEsIDEpLCAgICAgIC8qITwgQ2hhbm5lbCBpcyBidXN5IGFuZCBjYW4ndCBoYW5kbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciByZXF1ZXN0LiAqLworfTsKKworLyohIEBicmllZiBlRE1BIGdsb2JhbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4qLwordHlwZWRlZiBzdHJ1Y3QgX2VkbWFfY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVDb250aW51b3VzTGlua01vZGU7ICAgIC8qITwgRW5hYmxlICh0cnVlKSBjb250aW51b3VzIGxpbmsgbW9kZS4gVXBvbiBtaW5vciBsb29wIGNvbXBsZXRpb24sIHRoZSBjaGFubmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVzIGFnYWluIGlmIHRoYXQgY2hhbm5lbCBoYXMgYSBtaW5vciBsb29wIGNoYW5uZWwgbGluayBlbmFibGVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaW5rIGNoYW5uZWwgaXMgaXRzZWxmLiAqLworICAgIGJvb2wgZW5hYmxlSGFsdE9uRXJyb3I7ICAgICAgICAgICAvKiE8IEVuYWJsZSAodHJ1ZSkgdHJhbnNmZXIgaGFsdCBvbiBlcnJvci4gQW55IGVycm9yIGNhdXNlcyB0aGUgSEFMVCBiaXQgdG8gc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnRseSwgYWxsIHNlcnZpY2UgcmVxdWVzdHMgYXJlIGlnbm9yZWQgdW50aWwgdGhlIEhBTFQgYml0IGlzIGNsZWFyZWQuKi8KKyAgICBib29sIGVuYWJsZVJvdW5kUm9iaW5BcmJpdHJhdGlvbjsgLyohPCBFbmFibGUgKHRydWUpIHJvdW5kIHJvYmluIGNoYW5uZWwgYXJiaXRyYXRpb24gbWV0aG9kIG9yIGZpeGVkIHByaW9yaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJiaXRyYXRpb24gaXMgdXNlZCBmb3IgY2hhbm5lbCBzZWxlY3Rpb24gKi8KKyAgICBib29sIGVuYWJsZURlYnVnTW9kZTsgLyohPCBFbmFibGUodHJ1ZSkgZURNQSBkZWJ1ZyBtb2RlLiBXaGVuIGluIGRlYnVnIG1vZGUsIHRoZSBlRE1BIHN0YWxscyB0aGUgc3RhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG5ldyBjaGFubmVsLiBFeGVjdXRpbmcgY2hhbm5lbHMgYXJlIGFsbG93ZWQgdG8gY29tcGxldGUuICovCit9IGVkbWFfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIGVETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiB0cmFuc2ZlciBhdHRyaWJ1dGUuCisgKiBUaGlzIGZpZ3VyZSBzaG93cyB0aGUgZURNQSdzIHRyYW5zZmVyIG1vZGVsOgorICogIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICAgICAgICB8IFRyYW5zZmVyIFNpemUgfCAgICAgICAgICAgICAgICAgICAgfAorICogICBNaW5vciBMb29wIHxfX19fX19fX19fX19fX198IE1ham9yIGxvb3AgQ291bnQgMSB8CisgKiAgICAgQnl0ZXMgICAgfCBUcmFuc2ZlciBTaXplIHwgICAgICAgICAgICAgICAgICAgIHwKKyAqICBfX19fX19fX19fX198X19fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19ffC0tPiBNaW5vciBsb29wIGNvbXBsZXRlCisgKiAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX3wgTWFqb3IgTG9vcCBDb3VudCAyIHwKKyAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgIHxfX19fX19fX19fX19fX198X19fX19fX19fX19fX19fX19fX198LS0+IE1pbm9yIGxvb3AgIENvbXBsZXRlCisgKgorICogICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IFRyYW5zZmVyIGNvbXBsZXRlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9lZG1hX3RyYW5zZmVyX2NvbmZpZworeworICAgIHVpbnQzMl90IHNyY0FkZHI7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgU291cmNlIGRhdGEgYWRkcmVzcy4gKi8KKyAgICB1aW50MzJfdCBkZXN0QWRkcjsgICAgICAgICAgICAgICAgICAgICAvKiE8IERlc3RpbmF0aW9uIGRhdGEgYWRkcmVzcy4gKi8KKyAgICBlZG1hX3RyYW5zZmVyX3NpemVfdCBzcmNUcmFuc2ZlclNpemU7ICAvKiE8IFNvdXJjZSBkYXRhIHRyYW5zZmVyIHNpemUuICovCisgICAgZWRtYV90cmFuc2Zlcl9zaXplX3QgZGVzdFRyYW5zZmVyU2l6ZTsgLyohPCBEZXN0aW5hdGlvbiBkYXRhIHRyYW5zZmVyIHNpemUuICovCisgICAgaW50MTZfdCBzcmNPZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTaWduLWV4dGVuZGVkIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBhZGRyZXNzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtIHRoZSBuZXh0LXN0YXRlIHZhbHVlIGFzIGVhY2ggc291cmNlIHJlYWQgaXMgY29tcGxldGVkLiAqLworICAgIGludDE2X3QgZGVzdE9mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qITwgU2lnbi1leHRlbmRlZCBvZmZzZXQgYXBwbGllZCB0byB0aGUgY3VycmVudCBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtIHRoZSBuZXh0LXN0YXRlIHZhbHVlIGFzIGVhY2ggZGVzdGluYXRpb24gd3JpdGUgaXMgY29tcGxldGVkLiAqLworICAgIHVpbnQzMl90IG1pbm9yTG9vcEJ5dGVzOyAgICAgICAgICAgICAgIC8qITwgQnl0ZXMgdG8gdHJhbnNmZXIgaW4gYSBtaW5vciBsb29wKi8KKyAgICB1aW50MzJfdCBtYWpvckxvb3BDb3VudHM7ICAgICAgICAgICAgICAvKiE8IE1ham9yIGxvb3AgaXRlcmF0aW9uIGNvdW50LiAqLworfSBlZG1hX3RyYW5zZmVyX2NvbmZpZ190OworCisvKiEgQGJyaWVmIGVETUEgY2hhbm5lbCBwcmlvcml0eSBjb25maWd1cmF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBfZWRtYV9jaGFubmVsX1ByZWVtcHRpb25fY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVDaGFubmVsUHJlZW1wdGlvbjsgLyohPCBJZiB0cnVlOiBhIGNoYW5uZWwgY2FuIGJlIHN1c3BlbmRlZCBieSBvdGhlciBjaGFubmVsIHdpdGggaGlnaGVyIHByaW9yaXR5ICovCisgICAgYm9vbCBlbmFibGVQcmVlbXB0QWJpbGl0eTsgICAgLyohPCBJZiB0cnVlOiBhIGNoYW5uZWwgY2FuIHN1c3BlbmQgb3RoZXIgY2hhbm5lbCB3aXRoIGxvdyBwcmlvcml0eSAqLworICAgIHVpbnQ4X3QgY2hhbm5lbFByaW9yaXR5OyAgICAgIC8qITwgQ2hhbm5lbCBwcmlvcml0eSAqLworfSBlZG1hX2NoYW5uZWxfUHJlZW1wdGlvbl9jb25maWdfdDsKKworLyohIEBicmllZiBlRE1BIG1pbm9yIG9mZnNldCBjb25maWd1cmF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBfZWRtYV9taW5vcl9vZmZzZXRfY29uZmlnCit7CisgICAgYm9vbCBlbmFibGVTcmNNaW5vck9mZnNldDsgIC8qITwgRW5hYmxlKHRydWUpIG9yIERpc2FibGUoZmFsc2UpIHNvdXJjZSBtaW5vciBsb29wIG9mZnNldC4gKi8KKyAgICBib29sIGVuYWJsZURlc3RNaW5vck9mZnNldDsgLyohPCBFbmFibGUodHJ1ZSkgb3IgRGlzYWJsZShmYWxzZSkgZGVzdGluYXRpb24gbWlub3IgbG9vcCBvZmZzZXQuICovCisgICAgdWludDMyX3QgbWlub3JPZmZzZXQ7ICAgICAgIC8qITwgT2Zmc2V0IGZvciBhIG1pbm9yIGxvb3AgbWFwcGluZy4gKi8KK30gZWRtYV9taW5vcl9vZmZzZXRfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIGVETUEgVENELgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHNhbWUgYXMgVENEIHJlZ2lzdGVyIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiByZWZlcmVuY2UgbWFudWFsLAorICogYW5kIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBzY2F0dGVyL2dhdGhlciBmZWF0dXJlIGFzIGEgbmV4dCBoYXJkd2FyZSBUQ0QuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9lZG1hX3RjZAoreworICAgIF9fSU8gdWludDMyX3QgU0FERFI7ICAgICAvKiE8IFNBRERSIHJlZ2lzdGVyLCB1c2VkIHRvIHNhdmUgc291cmNlIGFkZHJlc3MgKi8KKyAgICBfX0lPIHVpbnQxNl90IFNPRkY7ICAgICAgLyohPCBTT0ZGIHJlZ2lzdGVyLCBzYXZlIG9mZnNldCBieXRlcyBldmVyeSB0cmFuc2ZlciAqLworICAgIF9fSU8gdWludDE2X3QgQVRUUjsgICAgICAvKiE8IEFUVFIgcmVnaXN0ZXIsIHNvdXJjZS9kZXN0aW5hdGlvbiB0cmFuc2ZlciBzaXplIGFuZCBtb2R1bG8gKi8KKyAgICBfX0lPIHVpbnQzMl90IE5CWVRFUzsgICAgLyohPCBOYnl0ZXMgcmVnaXN0ZXIsIG1pbm9yIGxvb3AgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgX19JTyB1aW50MzJfdCBTTEFTVDsgICAgIC8qITwgU0xBU1QgcmVnaXN0ZXIgKi8KKyAgICBfX0lPIHVpbnQzMl90IERBRERSOyAgICAgLyohPCBEQUREUiByZWdpc3RlciwgdXNlZCBmb3IgZGVzdGluYXRpb24gYWRkcmVzcyAqLworICAgIF9fSU8gdWludDE2X3QgRE9GRjsgICAgICAvKiE8IERPRkYgcmVnaXN0ZXIsIHVzZWQgZm9yIGRlc3RpbmF0aW9uIG9mZnNldCAqLworICAgIF9fSU8gdWludDE2X3QgQ0lURVI7ICAgICAvKiE8IENJVEVSIHJlZ2lzdGVyLCBjdXJyZW50IG1pbm9yIGxvb3AgbnVtYmVycywgZm9yIHVuZmluaXNoZWQgbWlub3IgbG9vcC4qLworICAgIF9fSU8gdWludDMyX3QgRExBU1RfU0dBOyAvKiE8IERMQVNUU0dBIHJlZ2lzdGVyLCBuZXh0IHN0Y2QgYWRkcmVzcyB1c2VkIGluIHNjYXR0ZXItZ2F0aGVyIG1vZGUgKi8KKyAgICBfX0lPIHVpbnQxNl90IENTUjsgICAgICAgLyohPCBDU1IgcmVnaXN0ZXIsIGZvciBUQ0QgY29udHJvbCBzdGF0dXMgKi8KKyAgICBfX0lPIHVpbnQxNl90IEJJVEVSOyAgICAgLyohPCBCSVRFUiByZWdpc3RlciwgYmVnaW4gbWlub3IgbG9vcCBjb3VudC4gKi8KK30gZWRtYV90Y2RfdDsKKworLyohIEBicmllZiBDYWxsYmFjayBmb3IgZURNQSAqLworc3RydWN0IF9lZG1hX2hhbmRsZTsKKworLyohIEBicmllZiBEZWZpbmUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVETUEuICovCit0eXBlZGVmIHZvaWQgKCplZG1hX2NhbGxiYWNrKShzdHJ1Y3QgX2VkbWFfaGFuZGxlICpoYW5kbGUsIHZvaWQgKnVzZXJEYXRhLCBib29sIHRyYW5zZmVyRG9uZSwgdWludDMyX3QgdGNkcyk7CisKKy8qISBAYnJpZWYgZURNQSB0cmFuc2ZlciBoYW5kbGUgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBfZWRtYV9oYW5kbGUKK3sKKyAgICBlZG1hX2NhbGxiYWNrIGNhbGxiYWNrOyAvKiE8IENhbGxiYWNrIGZ1bmN0aW9uIGZvciBtYWpvciBjb3VudCBleGhhdXN0ZWQuICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgLyohPCBDYWxsYmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuICovCisgICAgRE1BX1R5cGUgKmJhc2U7ICAgICAgICAgLyohPCBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLiAqLworICAgIGVkbWFfdGNkX3QgKnRjZFBvb2w7ICAgIC8qITwgUG9pbnRlciB0byBtZW1vcnkgc3RvcmVkIFRDRHMuICovCisgICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgLyohPCBlRE1BIGNoYW5uZWwgbnVtYmVyLiAqLworICAgIHZvbGF0aWxlIGludDhfdCBoZWFkZXI7IC8qITwgVGhlIGZpcnN0IFRDRCBpbmRleC4gU2hvdWxkIHBvaW50IHRvIHRoZSBuZXh0IFRDRCB0byBiZSBsb2FkZWQgaW50byB0aGUgZURNQSBlbmdpbmUuICovCisgICAgdm9sYXRpbGUgaW50OF90IHRhaWw7ICAgLyohPCBUaGUgbGFzdCBUQ0QgaW5kZXguIFNob3VsZCBwb2ludCB0byB0aGUgbmV4dCBUQ0QgdG8gYmUgc3RvcmVkIGludG8gdGhlIG1lbW9yeSBwb29sLiAqLworICAgIHZvbGF0aWxlIGludDhfdCB0Y2RVc2VkOyAvKiE8IFRoZSBudW1iZXIgb2YgdXNlZCBUQ0Qgc2xvdHMuIFNob3VsZCByZWZsZWN0IHRoZSBudW1iZXIgb2YgVENEcyBjYW4gYmUgdXNlZC9sb2FkZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbW9yeS4gKi8KKyAgICB2b2xhdGlsZSBpbnQ4X3QgdGNkU2l6ZTsgLyohPCBUaGUgdG90YWwgbnVtYmVyIG9mIFRDRCBzbG90cyBpbiB0aGUgcXVldWUuICovCisgICAgdWludDhfdCBmbGFnczsgICAgICAgICAgIC8qITwgVGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudCBjaGFubmVsLiAqLworfSBlZG1hX2hhbmRsZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyohCisgKiBAbmFtZSBlRE1BIGluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgZURNQSBwZXJpcGhlcmFsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5nYXRlcyB0aGUgZURNQSBjbG9jayBhbmQgY29uZmlndXJlcyB0aGUgZURNQSBwZXJpcGhlcmFsIGFjY29yZGluZworICogdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUsIHNlZSAiZWRtYV9jb25maWdfdCIuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIG1pbm9yIGxvb3AgbWFwIGZlYXR1cmUuCisgKi8KK3ZvaWQgRURNQV9Jbml0KERNQV9UeXBlICpiYXNlLCBjb25zdCBlZG1hX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBEZWluaXRpYWxpemVzIHRoZSBlRE1BIHBlcmlwaGVyYWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBnYXRlcyB0aGUgZURNQSBjbG9jay4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIEVETUFfRGVpbml0KERNQV9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZURNQSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIHNldCB0byB0aGUgZm9sbG93aW5nIHZhbHVlcy4KKyAqIEBjb2RlCisgKiAgIGNvbmZpZy5lbmFibGVDb250aW51b3VzTGlua01vZGUgPSBmYWxzZTsKKyAqICAgY29uZmlnLmVuYWJsZUhhbHRPbkVycm9yID0gdHJ1ZTsKKyAqICAgY29uZmlnLmVuYWJsZVJvdW5kUm9iaW5BcmJpdHJhdGlvbiA9IGZhbHNlOworICogICBjb25maWcuZW5hYmxlRGVidWdNb2RlID0gZmFsc2U7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBlRE1BIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIEVETUFfR2V0RGVmYXVsdENvbmZpZyhlZG1hX2NvbmZpZ190ICpjb25maWcpOworCisvKiBAfSAqLworLyohCisgKiBAbmFtZSBlRE1BIENoYW5uZWwgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgYWxsIFRDRCByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIFRDRCByZWdpc3RlcnMgZm9yIHRoaXMgY2hhbm5lbCB0byBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBjaGFubmVsIHRyYW5zZmVyIGlzIG9uZ29pbmcKKyAqICAgICAgIG9yIGl0IGNhdXNlcyB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGF1dG8gc3RvcCByZXF1ZXN0IGZlYXR1cmUuCisgKi8KK3ZvaWQgRURNQV9SZXNldENoYW5uZWwoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBlRE1BIHRyYW5zZmVyIGF0dHJpYnV0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHRyYW5zZmVyIGF0dHJpYnV0ZSwgaW5jbHVkaW5nIHNvdXJjZSBhZGRyZXNzLCBkZXN0aW5hdGlvbiBhZGRyZXNzLAorICogdHJhbnNmZXIgc2l6ZSwgYWRkcmVzcyBvZmZzZXQsIGFuZCBzbyBvbi4gSXQgYWxzbyBjb25maWd1cmVzIHRoZSBzY2F0dGVyIGdhdGhlciBmZWF0dXJlIGlmIHRoZQorICogdXNlciBzdXBwbGllcyB0aGUgVENEIGFkZHJlc3MuCisgKiBFeGFtcGxlOgorICogQGNvZGUKKyAqICBlZG1hX3RyYW5zZmVyX3QgY29uZmlnOworICogIGVkbWFfdGNkX3QgdGNkOworICogIGNvbmZpZy5zcmNBZGRyID0gLi47CisgKiAgY29uZmlnLmRlc3RBZGRyID0gLi47CisgKiAgLi4uCisgKiAgRURNQV9TZXRUcmFuc2ZlckNvbmZpZyhETUEwLCBjaGFubmVsLCAmY29uZmlnLCAmc3RjZCk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIGVETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gbmV4dFRjZCBQb2ludCB0byBUQ0Qgc3RydWN0dXJlLiBJdCBjYW4gYmUgTlVMTCBpZiB1c2VycworICogICAgICAgICAgICAgICAgZG8gbm90IHdhbnQgdG8gZW5hYmxlIHNjYXR0ZXIvZ2F0aGVyIGZlYXR1cmUuCisgKiBAbm90ZSBJZiBuZXh0VGNkIGlzIG5vdCBOVUxMLCBpdCBtZWFucyBzY2F0dGVyIGdhdGhlciBmZWF0dXJlIGlzIGVuYWJsZWQKKyAqICAgICAgIGFuZCBEUkVRIGJpdCBpcyBjbGVhcmVkIGluIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBjb25maWd1cmF0aW9uLCB3aGljaAorICogICAgICAgaXMgc2V0IGluIHRoZSBlRE1BX1Jlc2V0Q2hhbm5lbC4KKyAqLwordm9pZCBFRE1BX1NldFRyYW5zZmVyQ29uZmlnKERNQV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfdGNkX3QgKm5leHRUY2QpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBlRE1BIG1pbm9yIG9mZnNldCBmZWF0dXJlLgorICoKKyAqIFRoZSBtaW5vciBvZmZzZXQgbWVhbnMgdGhhdCB0aGUgc2lnbmVkLWV4dGVuZGVkIHZhbHVlIGlzIGFkZGVkIHRvIHRoZSBzb3VyY2UgYWRkcmVzcyBvciBkZXN0aW5hdGlvbgorICogYWRkcmVzcyBhZnRlciBlYWNoIG1pbm9yIGxvb3AuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgbWlub3Igb2Zmc2V0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIEVETUFfU2V0TWlub3JPZmZzZXRDb25maWcoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGNvbnN0IGVkbWFfbWlub3Jfb2Zmc2V0X2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBlRE1BIGNoYW5uZWwgcHJlZW1wdGlvbiBmZWF0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgY2hhbm5lbCBwcmVlbXB0aW9uIGF0dHJpYnV0ZSBhbmQgdGhlIHByaW9yaXR5IG9mIHRoZSBjaGFubmVsLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgY2hhbm5lbCBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRURNQV9TZXRDaGFubmVsUHJlZW1wdGlvbkNvbmZpZyhETUFfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZG1hX2NoYW5uZWxfUHJlZW1wdGlvbl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRURNQV9NT0RVTEVfQ0hBTk5FTCk7CisgICAgYXNzZXJ0KGNvbmZpZyAhPSBOVUxMKTsKKworICAgIERNQV9EQ0hQUkluKGJhc2UsIGNoYW5uZWwpID0KKyAgICAgICAgKERNQV9EQ0hQUkkwX0RQQSghY29uZmlnLT5lbmFibGVQcmVlbXB0QWJpbGl0eSkgfCBETUFfRENIUFJJMF9FQ1AoY29uZmlnLT5lbmFibGVDaGFubmVsUHJlZW1wdGlvbikgfAorICAgICAgICAgRE1BX0RDSFBSSTBfQ0hQUkkoY29uZmlnLT5jaGFubmVsUHJpb3JpdHkpKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgY2hhbm5lbCBsaW5rIGZvciB0aGUgZURNQSB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgZWl0aGVyIHRoZSBtaW5vciBsaW5rIG9yIHRoZSBtYWpvciBsaW5rIG1vZGUuIFRoZSBtaW5vciBsaW5rIG1lYW5zIHRoYXQgdGhlIGNoYW5uZWwgbGluayBpcworICogdHJpZ2dlcmVkIGV2ZXJ5IHRpbWUgQ0lURVIgZGVjcmVhc2VzIGJ5IDEuIFRoZSBtYWpvciBsaW5rIG1lYW5zIHRoYXQgdGhlIGNoYW5uZWwgbGluayBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgQ0lURVIgaXMKKyAqIGV4aGF1c3RlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSB0eXBlIEEgY2hhbm5lbCBsaW5rIHR5cGUsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqICAgQGFyZyBrRURNQV9MaW5rTm9uZQorICogICBAYXJnIGtFRE1BX01pbm9yTGluaworICogICBAYXJnIGtFRE1BX01ham9yTGluaworICogQHBhcmFtIGxpbmtlZENoYW5uZWwgVGhlIGxpbmtlZCBjaGFubmVsIG51bWJlci4KKyAqIEBub3RlIFVzZXJzIHNob3VsZCBlbnN1cmUgdGhhdCBET05FIGZsYWcgaXMgY2xlYXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGludGVyZmFjZSwgb3IgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4KKyAqLwordm9pZCBFRE1BX1NldENoYW5uZWxMaW5rKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX2NoYW5uZWxfbGlua190eXBlX3QgdHlwZSwgdWludDMyX3QgbGlua2VkQ2hhbm5lbCk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGJhbmR3aWR0aCBmb3IgdGhlIGVETUEgdHJhbnNmZXIuCisgKgorICogQmVjYXVzZSB0aGUgZURNQSBwcm9jZXNzZXMgdGhlIG1pbm9yIGxvb3AsIGl0IGNvbnRpbnVvdXNseSBnZW5lcmF0ZXMgcmVhZC93cml0ZSBzZXF1ZW5jZXMKKyAqIHVudGlsIHRoZSBtaW5vciBjb3VudCBpcyBleGhhdXN0ZWQuIFRoZSBiYW5kd2lkdGggZm9yY2VzIHRoZSBlRE1BIHRvIHN0YWxsIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mCisgKiBlYWNoIHJlYWQvd3JpdGUgYWNjZXNzIHRvIGNvbnRyb2wgdGhlIGJ1cyByZXF1ZXN0IGJhbmR3aWR0aCBzZWVuIGJ5IHRoZSBjcm9zc2JhciBzd2l0Y2guCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gYmFuZFdpZHRoIEEgYmFuZHdpZHRoIHNldHRpbmcsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqICAgICBAYXJnIGtFRE1BQmFuZHdpZHRoU3RhbGxOb25lCisgKiAgICAgQGFyZyBrRURNQUJhbmR3aWR0aFN0YWxsNEN5Y2xlCisgKiAgICAgQGFyZyBrRURNQUJhbmR3aWR0aFN0YWxsOEN5Y2xlCisgKi8KK3ZvaWQgRURNQV9TZXRCYW5kV2lkdGgoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGVkbWFfYmFuZHdpZHRoX3QgYmFuZFdpZHRoKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgc291cmNlIG1vZHVsbyBhbmQgdGhlIGRlc3RpbmF0aW9uIG1vZHVsbyBmb3IgdGhlIGVETUEgdHJhbnNmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWZpbmVzIGEgc3BlY2lmaWMgYWRkcmVzcyByYW5nZSBzcGVjaWZpZWQgdG8gYmUgdGhlIHZhbHVlIGFmdGVyIChTQUREUiArIFNPRkYpLyhEQUREUiArIERPRkYpCisgKiBjYWxjdWxhdGlvbiBpcyBwZXJmb3JtZWQgb3IgdGhlIG9yaWdpbmFsIHJlZ2lzdGVyIHZhbHVlLiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBpbXBsZW1lbnQgYSBjaXJjdWxhciBkYXRhCisgKiBxdWV1ZSBlYXNpbHkuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gc3JjTW9kdWxvIEEgc291cmNlIG1vZHVsbyB2YWx1ZS4KKyAqIEBwYXJhbSBkZXN0TW9kdWxvIEEgZGVzdGluYXRpb24gbW9kdWxvIHZhbHVlLgorICovCit2b2lkIEVETUFfU2V0TW9kdWxvKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBlZG1hX21vZHVsb190IHNyY01vZHVsbywgZWRtYV9tb2R1bG9fdCBkZXN0TW9kdWxvKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRURNQV9BU1lOQ0hST19SRVFVRVNUX0NIQU5ORUxfQ09VTlQpICYmIEZTTF9GRUFUVVJFX0VETUFfQVNZTkNIUk9fUkVRVUVTVF9DSEFOTkVMX0NPVU5UCisvKiEKKyAqIEBicmllZiBFbmFibGVzIGFuIGFzeW5jIHJlcXVlc3QgZm9yIHRoZSBlRE1BIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIGVuYWJsZSBUaGUgY29tbWFuZCB0byBlbmFibGUgKHRydWUpIG9yIGRpc2FibGUgKGZhbHNlKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVETUFfRW5hYmxlQXN5bmNSZXF1ZXN0KERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5FQVJTID0gKGJhc2UtPkVBUlMgJiAofigxVSA8PCBjaGFubmVsKSkpIHwgKCh1aW50MzJfdCllbmFibGUgPDwgY2hhbm5lbCk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRURNQV9BU1lOQ0hST19SRVFVRVNUX0NIQU5ORUxfQ09VTlQgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBhbiBhdXRvIHN0b3AgcmVxdWVzdCBmb3IgdGhlIGVETUEgdHJhbnNmZXIuCisgKgorICogSWYgZW5hYmxpbmcgdGhlIGF1dG8gc3RvcCByZXF1ZXN0LCB0aGUgZURNQSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIHRoZSBoYXJkd2FyZSBjaGFubmVsIHJlcXVlc3QuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcGFyYW0gZW5hYmxlIFRoZSBjb21tYW5kIHRvIGVuYWJsZSAodHJ1ZSkgb3IgZGlzYWJsZSAoZmFsc2UpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRURNQV9FbmFibGVBdXRvU3RvcFJlcXVlc3QoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIGJvb2wgZW5hYmxlKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPlRDRFtjaGFubmVsXS5DU1IgPSAoYmFzZS0+VENEW2NoYW5uZWxdLkNTUiAmICh+RE1BX0NTUl9EUkVRX01BU0spKSB8IERNQV9DU1JfRFJFUShlbmFibGUpOworfQorCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgZURNQSB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqIEBwYXJhbSBtYXNrIFRoZSBtYXNrIG9mIGludGVycnVwdCBzb3VyY2UgdG8gYmUgc2V0LiBVc2VycyBuZWVkIHRvIHVzZQorICogICAgICAgICAgICAgdGhlIGRlZmluZWQgZWRtYV9pbnRlcnJ1cHRfZW5hYmxlX3QgdHlwZS4KKyAqLwordm9pZCBFRE1BX0VuYWJsZUNoYW5uZWxJbnRlcnJ1cHRzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIGludGVycnVwdCBzb3VyY2UgZm9yIHRoZSBlRE1BIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIG1hc2sgVGhlIG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2UgdG8gYmUgc2V0LiBVc2UKKyAqICAgICAgICAgICAgIHRoZSBkZWZpbmVkIGVkbWFfaW50ZXJydXB0X2VuYWJsZV90IHR5cGUuCisgKi8KK3ZvaWQgRURNQV9EaXNhYmxlQ2hhbm5lbEludGVycnVwdHMoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwsIHVpbnQzMl90IG1hc2spOworCisvKiBAfSAqLworLyohCisgKiBAbmFtZSBlRE1BIFRDRCBPcGVyYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyBhbGwgZmllbGRzIHRvIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgVENEIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgYWxsIGZpZWxkcyBmb3IgdGhpcyBUQ0Qgc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWUuCisgKgorICogQHBhcmFtIHRjZCBQb2ludGVyIHRvIHRoZSBUQ0Qgc3RydWN0dXJlLgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBhdXRvIHN0b3AgcmVxdWVzdCBmZWF0dXJlLgorICovCit2b2lkIEVETUFfVGNkUmVzZXQoZWRtYV90Y2RfdCAqdGNkKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZURNQSBUQ0QgdHJhbnNmZXIgYXR0cmlidXRlLgorICoKKyAqIFRoZSBUQ0QgaXMgYSB0cmFuc2ZlciBjb250cm9sIGRlc2NyaXB0b3IuIFRoZSBjb250ZW50IG9mIHRoZSBUQ0QgaXMgdGhlIHNhbWUgYXMgdGhlIGhhcmR3YXJlIFRDRCByZWdpc3RlcnMuCisgKiBUaGUgU1RDRCBpcyB1c2VkIGluIHRoZSBzY2F0dGVyLWdhdGhlciBtb2RlLgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBUQ0QgdHJhbnNmZXIgYXR0cmlidXRlLCBpbmNsdWRpbmcgc291cmNlIGFkZHJlc3MsIGRlc3RpbmF0aW9uIGFkZHJlc3MsCisgKiB0cmFuc2ZlciBzaXplLCBhZGRyZXNzIG9mZnNldCwgYW5kIHNvIG9uLiBJdCBhbHNvIGNvbmZpZ3VyZXMgdGhlIHNjYXR0ZXIgZ2F0aGVyIGZlYXR1cmUgaWYgdGhlCisgKiB1c2VyIHN1cHBsaWVzIHRoZSBuZXh0IFRDRCBhZGRyZXNzLgorICogRXhhbXBsZToKKyAqIEBjb2RlCisgKiAgIGVkbWFfdHJhbnNmZXJfdCBjb25maWcgPSB7CisgKiAgIC4uLgorICogICB9CisgKiAgIGVkbWFfdGNkX3QgdGNkIF9fYWxpZ25lZCgzMik7CisgKiAgIGVkbWFfdGNkX3QgbmV4dFRjZCBfX2FsaWduZWQoMzIpOworICogICBFRE1BX1RjZFNldFRyYW5zZmVyQ29uZmlnKCZ0Y2QsICZjb25maWcsICZuZXh0VGNkKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIHRjZCBQb2ludGVyIHRvIHRoZSBUQ0Qgc3RydWN0dXJlLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIGVETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gbmV4dFRjZCBQb2ludGVyIHRvIHRoZSBuZXh0IFRDRCBzdHJ1Y3R1cmUuIEl0IGNhbiBiZSBOVUxMIGlmIHVzZXJzCisgKiAgICAgICAgICAgICAgICBkbyBub3Qgd2FudCB0byBlbmFibGUgc2NhdHRlci9nYXRoZXIgZmVhdHVyZS4KKyAqIEBub3RlIFRDRCBhZGRyZXNzIHNob3VsZCBiZSAzMiBieXRlcyBhbGlnbmVkIG9yIGl0IGNhdXNlcyBhbiBlRE1BIGVycm9yLgorICogQG5vdGUgSWYgdGhlIG5leHRUY2QgaXMgbm90IE5VTEwsIHRoZSBzY2F0dGVyIGdhdGhlciBmZWF0dXJlIGlzIGVuYWJsZWQKKyAqICAgICAgIGFuZCBEUkVRIGJpdCBpcyBjbGVhcmVkIGluIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBjb25maWd1cmF0aW9uLCB3aGljaAorICogICAgICAgaXMgc2V0IGluIHRoZSBFRE1BX1RjZFJlc2V0LgorICovCit2b2lkIEVETUFfVGNkU2V0VHJhbnNmZXJDb25maWcoZWRtYV90Y2RfdCAqdGNkLCBjb25zdCBlZG1hX3RyYW5zZmVyX2NvbmZpZ190ICpjb25maWcsIGVkbWFfdGNkX3QgKm5leHRUY2QpOworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBlRE1BIFRDRCBtaW5vciBvZmZzZXQgZmVhdHVyZS4KKyAqCisgKiBBIG1pbm9yIG9mZnNldCBpcyBhIHNpZ25lZC1leHRlbmRlZCB2YWx1ZSBhZGRlZCB0byB0aGUgc291cmNlIGFkZHJlc3Mgb3IgYSBkZXN0aW5hdGlvbgorICogYWRkcmVzcyBhZnRlciBlYWNoIG1pbm9yIGxvb3AuCisgKgorICogQHBhcmFtIHRjZCBBIHBvaW50IHRvIHRoZSBUQ0Qgc3RydWN0dXJlLgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIG1pbm9yIG9mZnNldCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBFRE1BX1RjZFNldE1pbm9yT2Zmc2V0Q29uZmlnKGVkbWFfdGNkX3QgKnRjZCwgY29uc3QgZWRtYV9taW5vcl9vZmZzZXRfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGNoYW5uZWwgbGluayBmb3IgdGhlIGVETUEgVENELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyBlaXRoZXIgYSBtaW5vciBsaW5rIG9yIGEgbWFqb3IgbGluay4gVGhlIG1pbm9yIGxpbmsgbWVhbnMgdGhlIGNoYW5uZWwgbGluayBpcworICogdHJpZ2dlcmVkIGV2ZXJ5IHRpbWUgQ0lURVIgZGVjcmVhc2VzIGJ5IDEuIFRoZSBtYWpvciBsaW5rIG1lYW5zIHRoYXQgdGhlIGNoYW5uZWwgbGluayAgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIENJVEVSIGlzCisgKiBleGhhdXN0ZWQuCisgKgorICogQG5vdGUgVXNlcnMgc2hvdWxkIGVuc3VyZSB0aGF0IERPTkUgZmxhZyBpcyBjbGVhcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgaW50ZXJmYWNlLCBvciB0aGUgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLgorICogQHBhcmFtIHRjZCBQb2ludCB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSB0eXBlIENoYW5uZWwgbGluayB0eXBlLCBpdCBjYW4gYmUgb25lIG9mOgorICogICBAYXJnIGtFRE1BX0xpbmtOb25lCisgKiAgIEBhcmcga0VETUFfTWlub3JMaW5rCisgKiAgIEBhcmcga0VETUFfTWFqb3JMaW5rCisgKiBAcGFyYW0gbGlua2VkQ2hhbm5lbCBUaGUgbGlua2VkIGNoYW5uZWwgbnVtYmVyLgorICovCit2b2lkIEVETUFfVGNkU2V0Q2hhbm5lbExpbmsoZWRtYV90Y2RfdCAqdGNkLCBlZG1hX2NoYW5uZWxfbGlua190eXBlX3QgdHlwZSwgdWludDMyX3QgbGlua2VkQ2hhbm5lbCk7CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGJhbmR3aWR0aCBmb3IgdGhlIGVETUEgVENELgorICoKKyAqIEJlY2F1c2UgdGhlIGVETUEgcHJvY2Vzc2VzIHRoZSBtaW5vciBsb29wLCBpdCBjb250aW51b3VzbHkgZ2VuZXJhdGVzIHJlYWQvd3JpdGUgc2VxdWVuY2VzCisgKiB1bnRpbCB0aGUgbWlub3IgY291bnQgaXMgZXhoYXVzdGVkLiBUaGUgYmFuZHdpZHRoIGZvcmNlcyB0aGUgZURNQSB0byBzdGFsbCBhZnRlciB0aGUgY29tcGxldGlvbiBvZgorICogZWFjaCByZWFkL3dyaXRlIGFjY2VzcyB0byBjb250cm9sIHRoZSBidXMgcmVxdWVzdCBiYW5kd2lkdGggc2VlbiBieSB0aGUgY3Jvc3NiYXIgc3dpdGNoLgorICogQHBhcmFtIHRjZCBBIHBvaW50ZXIgdG8gdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gYmFuZFdpZHRoIEEgYmFuZHdpZHRoIHNldHRpbmcsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqICAgICBAYXJnIGtFRE1BQmFuZHdpZHRoU3RhbGxOb25lCisgKiAgICAgQGFyZyBrRURNQUJhbmR3aWR0aFN0YWxsNEN5Y2xlCisgKiAgICAgQGFyZyBrRURNQUJhbmR3aWR0aFN0YWxsOEN5Y2xlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBFRE1BX1RjZFNldEJhbmRXaWR0aChlZG1hX3RjZF90ICp0Y2QsIGVkbWFfYmFuZHdpZHRoX3QgYmFuZFdpZHRoKQoreworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpdGNkICYgMHgxRlUpID09IDApOworCisgICAgdGNkLT5DU1IgPSAodGNkLT5DU1IgJiAofkRNQV9DU1JfQldDX01BU0spKSB8IERNQV9DU1JfQldDKGJhbmRXaWR0aCk7Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHNvdXJjZSBtb2R1bG8gYW5kIHRoZSBkZXN0aW5hdGlvbiBtb2R1bG8gZm9yIHRoZSBlRE1BIFRDRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlZmluZXMgYSBzcGVjaWZpYyBhZGRyZXNzIHJhbmdlIHNwZWNpZmllZCB0byBiZSB0aGUgdmFsdWUgYWZ0ZXIgKFNBRERSICsgU09GRikvKERBRERSICsgRE9GRikKKyAqIGNhbGN1bGF0aW9uIGlzIHBlcmZvcm1lZCBvciB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIgdmFsdWUuIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGltcGxlbWVudCBhIGNpcmN1bGFyIGRhdGEKKyAqIHF1ZXVlIGVhc2lseS4KKyAqCisgKiBAcGFyYW0gdGNkIEEgcG9pbnRlciB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBzcmNNb2R1bG8gQSBzb3VyY2UgbW9kdWxvIHZhbHVlLgorICogQHBhcmFtIGRlc3RNb2R1bG8gQSBkZXN0aW5hdGlvbiBtb2R1bG8gdmFsdWUuCisgKi8KK3ZvaWQgRURNQV9UY2RTZXRNb2R1bG8oZWRtYV90Y2RfdCAqdGNkLCBlZG1hX21vZHVsb190IHNyY01vZHVsbywgZWRtYV9tb2R1bG9fdCBkZXN0TW9kdWxvKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgYXV0byBzdG9wIHJlcXVlc3QgZm9yIHRoZSBlRE1BIFRDRC4KKyAqCisgKiBJZiBlbmFibGluZyB0aGUgYXV0byBzdG9wIHJlcXVlc3QsIHRoZSBlRE1BIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZXMgdGhlIGhhcmR3YXJlIGNoYW5uZWwgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gdGNkIEEgcG9pbnRlciB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBlbmFibGUgVGhlIGNvbW1hbmQgdG8gZW5hYmxlICh0cnVlKSBvciBkaXNhYmxlIChmYWxzZSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBFRE1BX1RjZEVuYWJsZUF1dG9TdG9wUmVxdWVzdChlZG1hX3RjZF90ICp0Y2QsIGJvb2wgZW5hYmxlKQoreworICAgIGFzc2VydCh0Y2QgIT0gTlVMTCk7CisgICAgYXNzZXJ0KCgodWludDMyX3QpdGNkICYgMHgxRlUpID09IDApOworCisgICAgdGNkLT5DU1IgPSAodGNkLT5DU1IgJiAofkRNQV9DU1JfRFJFUV9NQVNLKSkgfCBETUFfQ1NSX0RSRVEoZW5hYmxlKTsKK30KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIGVETUEgVENELgorICoKKyAqIEBwYXJhbSB0Y2QgUG9pbnQgdG8gdGhlIFRDRCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gbWFzayBUaGUgbWFzayBvZiBpbnRlcnJ1cHQgc291cmNlIHRvIGJlIHNldC4gVXNlcnMgbmVlZCB0byB1c2UKKyAqICAgICAgICAgICAgIHRoZSBkZWZpbmVkIGVkbWFfaW50ZXJydXB0X2VuYWJsZV90IHR5cGUuCisgKi8KK3ZvaWQgRURNQV9UY2RFbmFibGVJbnRlcnJ1cHRzKGVkbWFfdGNkX3QgKnRjZCwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgZURNQSBUQ0QuCisgKgorICogQHBhcmFtIHRjZCBQb2ludCB0byB0aGUgVENEIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBtYXNrIFRoZSBtYXNrIG9mIGludGVycnVwdCBzb3VyY2UgdG8gYmUgc2V0LiBVc2VycyBuZWVkIHRvIHVzZQorICogICAgICAgICAgICAgdGhlIGRlZmluZWQgZWRtYV9pbnRlcnJ1cHRfZW5hYmxlX3QgdHlwZS4KKyAqLwordm9pZCBFRE1BX1RjZERpc2FibGVJbnRlcnJ1cHRzKGVkbWFfdGNkX3QgKnRjZCwgdWludDMyX3QgbWFzayk7CisKKy8qISBAfSAqLworLyohCisgKiBAbmFtZSBlRE1BIENoYW5uZWwgVHJhbnNmZXIgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIGVETUEgaGFyZHdhcmUgY2hhbm5lbCByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgY2hhbm5lbCByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRURNQV9FbmFibGVDaGFubmVsUmVxdWVzdChETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX0RNQU1VWF9NT0RVTEVfQ0hBTk5FTCk7CisKKyAgICBiYXNlLT5TRVJRID0gRE1BX1NFUlFfU0VSUShjaGFubmVsKTsKK30KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIGVETUEgaGFyZHdhcmUgY2hhbm5lbCByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGhhcmR3YXJlIGNoYW5uZWwgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBlRE1BIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNoYW5uZWwgZURNQSBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEVETUFfRGlzYWJsZUNoYW5uZWxSZXF1ZXN0KERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPkNFUlEgPSBETUFfQ0VSUV9DRVJRKGNoYW5uZWwpOworfQorCisvKiEKKyAqIEBicmllZiBTdGFydHMgdGhlIGVETUEgdHJhbnNmZXIgYnkgdXNpbmcgdGhlIHNvZnR3YXJlIHRyaWdnZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgYSBtaW5vciBsb29wIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRURNQV9UcmlnZ2VyQ2hhbm5lbFN0YXJ0KERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKQoreworICAgIGFzc2VydChjaGFubmVsIDwgRlNMX0ZFQVRVUkVfRE1BTVVYX01PRFVMRV9DSEFOTkVMKTsKKworICAgIGJhc2UtPlNTUlQgPSBETUFfU1NSVF9TU1JUKGNoYW5uZWwpOworfQorCisvKiEgQH0gKi8KKy8qIQorICogQG5hbWUgZURNQSBDaGFubmVsIFN0YXR1cyBPcGVyYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgcmVtYWluaW5nIG1ham9yIGxvb3AgY291bnQgZnJvbSB0aGUgZURNQSBjdXJyZW50IGNoYW5uZWwgVENELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBUQ0QgKFRhc2sgQ29udHJvbCBEZXNjcmlwdG9yKSBzdGF0dXMgZm9yIGEgc3BlY2lmaWVkCisgKiBlRE1BIGNoYW5uZWwgYW5kIHJldHVybnMgdGhlIHRoZSBudW1iZXIgb2YgbWFqb3IgbG9vcCBjb3VudCB0aGF0IGhhcyBub3QgZmluaXNoZWQuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcmV0dXJuIE1ham9yIGxvb3AgY291bnQgd2hpY2ggaGFzIG5vdCBiZWVuIHRyYW5zZmVycmVkIHlldCBmb3IgdGhlIGN1cnJlbnQgVENELgorICogQG5vdGUgMS4gVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIGdldCB1bmZpbmlzaGVkIG1ham9yIGxvb3AgY291bnQgb2YgdHJhbnNmZXIgd2l0aG91dAorICogICAgICAgICAgdGhlIG5leHQgVENELCBvciBpdCBtaWdodCBiZSBpbmFjY3VyYWN5LgorICogICAgICAgMi4gVGhlIHVuZmluaXNoZWQvcmVtYWluaW5nIHRyYW5zZmVyIGJ5dGVzIGNhbm5vdCBiZSBvYnRhaW5lZCBkaXJlY3RseSBmcm9tIHJlZ2lzdGVycyB3aGlsZQorICogICAgICAgICAgdGhlIGNoYW5uZWwgaXMgcnVubmluZy4KKyAqICAgICAgICAgIEJlY2F1c2UgdG8gY2FsY3VsYXRlIHRoZSByZW1haW5pbmcgYnl0ZXMsIHRoZSBpbml0aWFsIE5CWVRFUyBjb25maWd1cmVkIGluIERNQV9UQ0RuX05CWVRFU19NTE5PCisgKiAgICAgICAgICByZWdpc3RlciBpcyBuZWVkZWQgd2hpbGUgdGhlIGVETUEgSVAgZG9lcyBub3Qgc3VwcG9ydCBnZXR0aW5nIGl0IHdoaWxlIGEgY2hhbm5lbCBpcyBhY3RpdmUuCisgKiAgICAgICAgICBJbiBhbm90aGVyIHdvcmQsIHRoZSBOQllURVMgdmFsdWUgcmVhZGluZyBpcyBhbHdheXMgdGhlIGFjdHVhbCAoZGVjcmVtZW50aW5nKSBOQllURVMgdmFsdWUgdGhlIGRtYV9lbmdpbmUKKyAqICAgICAgICAgIGlzIHdvcmtpbmcgd2l0aCB3aGlsZSBhIGNoYW5uZWwgaXMgcnVubmluZy4KKyAqICAgICAgICAgIENvbnNlcXVlbnRseSwgdG8gZ2V0IHRoZSByZW1haW5pbmcgdHJhbnNmZXIgYnl0ZXMsIGEgc29mdHdhcmUtc2F2ZWQgaW5pdGlhbCB2YWx1ZSBvZiBOQllURVMgKGZvciBleGFtcGxlCisgKiAgICAgICAgICBjb3BpZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBjaGFubmVsKSBpcyBuZWVkZWQuIFRoZSBmb3JtdWxhIHRvIGNhbGN1bGF0ZSBpdCBpcyBzaG93biBiZWxvdzoKKyAqICAgICAgICAgIFJlbWFpbmluZ0J5dGVzID0gUmVtYWluaW5nTWFqb3JMb29wQ291bnQgKiBOQllURVMoaW5pdGlhbGx5IGNvbmZpZ3VyZWQpCisgKi8KK3VpbnQzMl90IEVETUFfR2V0UmVtYWluaW5nTWFqb3JMb29wQ291bnQoRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBlRE1BIGNoYW5uZWwgZXJyb3Igc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFRoZSBtYXNrIG9mIGVycm9yIHN0YXR1cyBmbGFncy4gVXNlcnMgbmVlZCB0byB1c2UgdGhlCisqICAgICAgICAgX2VkbWFfZXJyb3Jfc3RhdHVzX2ZsYWdzIHR5cGUgdG8gZGVjb2RlIHRoZSByZXR1cm4gdmFyaWFibGVzLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IEVETUFfR2V0RXJyb3JTdGF0dXNGbGFncyhETUFfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gYmFzZS0+RVM7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGVETUEgY2hhbm5lbCBzdGF0dXMgZmxhZ3MuCisgKgorICogQHBhcmFtIGJhc2UgZURNQSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjaGFubmVsIGVETUEgY2hhbm5lbCBudW1iZXIuCisgKiBAcmV0dXJuIFRoZSBtYXNrIG9mIGNoYW5uZWwgc3RhdHVzIGZsYWdzLiBVc2VycyBuZWVkIHRvIHVzZSB0aGUKKyAqICAgICAgICAgX2VkbWFfY2hhbm5lbF9zdGF0dXNfZmxhZ3MgdHlwZSB0byBkZWNvZGUgdGhlIHJldHVybiB2YXJpYWJsZXMuCisgKi8KK3VpbnQzMl90IEVETUFfR2V0Q2hhbm5lbFN0YXR1c0ZsYWdzKERNQV9UeXBlICpiYXNlLCB1aW50MzJfdCBjaGFubmVsKTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBlRE1BIGNoYW5uZWwgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICogQHBhcmFtIG1hc2sgVGhlIG1hc2sgb2YgY2hhbm5lbCBzdGF0dXMgdG8gYmUgY2xlYXJlZC4gVXNlcnMgbmVlZCB0byB1c2UKKyAqICAgICAgICAgICAgIHRoZSBkZWZpbmVkIF9lZG1hX2NoYW5uZWxfc3RhdHVzX2ZsYWdzIHR5cGUuCisgKi8KK3ZvaWQgRURNQV9DbGVhckNoYW5uZWxTdGF0dXNGbGFncyhETUFfVHlwZSAqYmFzZSwgdWludDMyX3QgY2hhbm5lbCwgdWludDMyX3QgbWFzayk7CisKKy8qISBAfSAqLworLyohCisgKiBAbmFtZSBlRE1BIFRyYW5zYWN0aW9uYWwgT3BlcmF0aW9uCisgKi8KKworLyohCisgKiBAYnJpZWYgQ3JlYXRlcyB0aGUgZURNQSBoYW5kbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgdXNpbmcgdGhlIHRyYW5zYWN0aW9uYWwgQVBJIGZvciBlRE1BLiBUaGlzIGZ1bmN0aW9uCisgKiBpbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGVETUEgaGFuZGxlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4gVGhlIGVETUEgaGFuZGxlIHN0b3JlcyBjYWxsYmFjayBmdW5jdGlvbiBhbmQKKyAqICAgICAgICAgICAgICAgcGFyYW1ldGVycy4KKyAqIEBwYXJhbSBiYXNlIGVETUEgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY2hhbm5lbCBlRE1BIGNoYW5uZWwgbnVtYmVyLgorICovCit2b2lkIEVETUFfQ3JlYXRlSGFuZGxlKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgRE1BX1R5cGUgKmJhc2UsIHVpbnQzMl90IGNoYW5uZWwpOworCisvKiEKKyAqIEBicmllZiBJbnN0YWxscyB0aGUgVENEcyBtZW1vcnkgcG9vbCBpbnRvIHRoZSBlRE1BIGhhbmRsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgRURNQV9DcmVhdGVIYW5kbGUgdG8gdXNlIHNjYXR0ZXIvZ2F0aGVyIGZlYXR1cmUuCisgKgorICogQHBhcmFtIGhhbmRsZSBlRE1BIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIHRjZFBvb2wgQSBtZW1vcnkgcG9vbCB0byBzdG9yZSBUQ0RzLiBJdCBtdXN0IGJlIDMyIGJ5dGVzIGFsaWduZWQuCisgKiBAcGFyYW0gdGNkU2l6ZSBUaGUgbnVtYmVyIG9mIFRDRCBzbG90cy4KKyAqLwordm9pZCBFRE1BX0luc3RhbGxUQ0RNZW1vcnkoZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBlZG1hX3RjZF90ICp0Y2RQb29sLCB1aW50MzJfdCB0Y2RTaXplKTsKKworLyohCisgKiBAYnJpZWYgSW5zdGFsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGVETUEgdHJhbnNmZXIuCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgaW4gdGhlIGVETUEgSVJRIGhhbmRsZXIuIFVzZSB0aGUgY2FsbGJhY2sgdG8gZG8gc29tZXRoaW5nIGFmdGVyCisgKiB0aGUgY3VycmVudCBtYWpvciBsb29wIHRyYW5zZmVyIGNvbXBsZXRlcy4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIGVETUEgaGFuZGxlIHBvaW50ZXIuCisgKiBAcGFyYW0gY2FsbGJhY2sgZURNQSBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLgorICogQHBhcmFtIHVzZXJEYXRhIEEgcGFyYW1ldGVyIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKi8KK3ZvaWQgRURNQV9TZXRDYWxsYmFjayhlZG1hX2hhbmRsZV90ICpoYW5kbGUsIGVkbWFfY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJEYXRhKTsKKworLyohCisgKiBAYnJpZWYgUHJlcGFyZXMgdGhlIGVETUEgdHJhbnNmZXIgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIHRyYW5zZmVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGFjY29yZGluZyB0byB0aGUgdXNlciBpbnB1dC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG9mIHR5cGUgZWRtYV90cmFuc2Zlcl90LgorICogQHBhcmFtIHNyY0FkZHIgZURNQSB0cmFuc2ZlciBzb3VyY2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBzcmNXaWR0aCBlRE1BIHRyYW5zZmVyIHNvdXJjZSBhZGRyZXNzIHdpZHRoKGJ5dGVzKS4KKyAqIEBwYXJhbSBkZXN0QWRkciBlRE1BIHRyYW5zZmVyIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgKiBAcGFyYW0gZGVzdFdpZHRoIGVETUEgdHJhbnNmZXIgZGVzdGluYXRpb24gYWRkcmVzcyB3aWR0aChieXRlcykuCisgKiBAcGFyYW0gYnl0ZXNFYWNoUmVxdWVzdCBlRE1BIHRyYW5zZmVyIGJ5dGVzIHBlciBjaGFubmVsIHJlcXVlc3QuCisgKiBAcGFyYW0gdHJhbnNmZXJCeXRlcyBlRE1BIHRyYW5zZmVyIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLgorICogQHBhcmFtIHR5cGUgZURNQSB0cmFuc2ZlciB0eXBlLgorICogQG5vdGUgVGhlIGRhdGEgYWRkcmVzcyBhbmQgdGhlIGRhdGEgd2lkdGggbXVzdCBiZSBjb25zaXN0ZW50LiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNSQworICogICAgICAgaXMgNCBieXRlcywgdGhlIHNvdXJjZSBhZGRyZXNzIG11c3QgYmUgNCBieXRlcyBhbGlnbmVkLCBvciBpdCByZXN1bHRzIGluCisgKiAgICAgICBzb3VyY2UgYWRkcmVzcyBlcnJvciAoU0FFKS4KKyAqLwordm9pZCBFRE1BX1ByZXBhcmVUcmFuc2ZlcihlZG1hX3RyYW5zZmVyX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyY0FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBieXRlc0VhY2hSZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0cmFuc2ZlckJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX3RyYW5zZmVyX3R5cGVfdCB0eXBlKTsKKworLyohCisgKiBAYnJpZWYgU3VibWl0cyB0aGUgZURNQSB0cmFuc2ZlciByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3VibWl0cyB0aGUgZURNQSB0cmFuc2ZlciByZXF1ZXN0IGFjY29yZGluZyB0byB0aGUgdHJhbnNmZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBJZiBzdWJtaXR0aW5nIHRoZSB0cmFuc2ZlciByZXF1ZXN0IHJlcGVhdGVkbHksIHRoaXMgZnVuY3Rpb24gcGFja3MgYW4gdW5wcm9jZXNzZWQgcmVxdWVzdCBhcworICogYSBUQ0QgYW5kIGVuYWJsZXMgc2NhdHRlci9nYXRoZXIgZmVhdHVyZSB0byBwcm9jZXNzIGl0IGluIHRoZSBuZXh0IHRpbWUuCisgKgorICogQHBhcmFtIGhhbmRsZSBlRE1BIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIGVETUEgdHJhbnNmZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcmV0dmFsIGtTdGF0dXNfRURNQV9TdWNjZXNzIEl0IG1lYW5zIHN1Ym1pdCB0cmFuc2ZlciByZXF1ZXN0IHN1Y2NlZWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfRURNQV9RdWV1ZUZ1bGwgSXQgbWVhbnMgVENEIHF1ZXVlIGlzIGZ1bGwuIFN1Ym1pdCB0cmFuc2ZlciByZXF1ZXN0IGlzIG5vdCBhbGxvd2VkLgorICogQHJldHZhbCBrU3RhdHVzX0VETUFfQnVzeSBJdCBtZWFucyB0aGUgZ2l2ZW4gY2hhbm5lbCBpcyBidXN5LCBuZWVkIHRvIHN1Ym1pdCByZXF1ZXN0IGxhdGVyLgorICovCitzdGF0dXNfdCBFRE1BX1N1Ym1pdFRyYW5zZmVyKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgZWRtYV90cmFuc2Zlcl9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgZURNQSBzdGFydHMgdHJhbnNmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBjaGFubmVsIHJlcXVlc3QuIFVzZXJzIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgc3VibWl0dGluZyB0aGUgdHJhbnNmZXIgcmVxdWVzdAorICogb3IgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIHRyYW5zZmVyIHJlcXVlc3QuCisgKgorICogQHBhcmFtIGhhbmRsZSBlRE1BIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIEVETUFfU3RhcnRUcmFuc2ZlcihlZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBlRE1BIHN0b3BzIHRyYW5zZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGNoYW5uZWwgcmVxdWVzdCB0byBwYXVzZSB0aGUgdHJhbnNmZXIuIFVzZXJzIGNhbiBjYWxsIEVETUFfU3RhcnRUcmFuc2ZlcigpCisgKiBhZ2FpbiB0byByZXN1bWUgdGhlIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgZURNQSBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBFRE1BX1N0b3BUcmFuc2ZlcihlZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBlRE1BIGFib3J0cyB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBjaGFubmVsIHJlcXVlc3QgYW5kIGNsZWFyIHRyYW5zZmVyIHN0YXR1cyBiaXRzLgorICogVXNlcnMgY2FuIHN1Ym1pdCBhbm90aGVyIHRyYW5zZmVyIGFmdGVyIGNhbGxpbmcgdGhpcyBBUEkuCisgKgorICogQHBhcmFtIGhhbmRsZSBETUEgaGFuZGxlIHBvaW50ZXIuCisgKi8KK3ZvaWQgRURNQV9BYm9ydFRyYW5zZmVyKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIGVETUEgSVJRIGhhbmRsZXIgZm9yIHRoZSBjdXJyZW50IG1ham9yIGxvb3AgdHJhbnNmZXIgY29tcGxldGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgY2hhbm5lbCBtYWpvciBpbnRlcnJ1cHQgZmxhZyBhbmQgY2FsbHMKKyAqIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpZiBpdCBpcyBub3QgTlVMTC4KKyAqCisgKiBOb3RlOgorICogRm9yIHRoZSBjYXNlIHVzaW5nIFRDRCBxdWV1ZSwgd2hlbiB0aGUgbWFqb3IgaXRlcmF0aW9uIGNvdW50IGlzIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuCisgKiBUaGVzZSBpbmNsdWRlIHRoZSBmaW5hbCBhZGRyZXNzIGFkanVzdG1lbnRzIGFuZCByZWxvYWRpbmcgb2YgdGhlIEJJVEVSIGZpZWxkIGludG8gdGhlIENJVEVSLgorICogQXNzZXJ0aW9uIG9mIGFuIG9wdGlvbmFsIGludGVycnVwdCByZXF1ZXN0IGFsc28gb2NjdXJzIGF0IHRoaXMgdGltZSwgYXMgZG9lcyBhIHBvc3NpYmxlIGZldGNoIG9mIGEgbmV3IFRDRCBmcm9tCisgKiBtZW1vcnkgdXNpbmcgdGhlIHNjYXR0ZXIvZ2F0aGVyIGFkZHJlc3MgcG9pbnRlciBpbmNsdWRlZCBpbiB0aGUgZGVzY3JpcHRvciAoaWYgc2NhdHRlci9nYXRoZXIgaXMgZW5hYmxlZCkuCisgKgorICogRm9yIGluc3RhbmNlLCB3aGVuIHRoZSB0aW1lIGludGVycnVwdCBvZiBUQ0RbMF0gaGFwcGVucywgdGhlIFRDRFsxXSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCBpbnRvIHRoZSBlRE1BIGVuZ2luZS4KKyAqIEFzIHNnYSBhbmQgc2dhX2luZGV4IGFyZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBETEFTVF9TR0EgYml0ZmllbGQgbGllcyBpbiB0aGUgVENEX0NTUiByZWdpc3RlciwgdGhlIHNnYV9pbmRleAorICogaW4gdGhpcyBjYXNlIHNob3VsZCBiZSAyIChETEFTVF9TR0Egb2YgVENEWzFdIHN0b3JlcyB0aGUgYWRkcmVzcyBvZiBUQ0RbMl0pLiBUaHVzLCB0aGUgInRjZFVzZWQiIHVwZGF0ZWQgc2hvdWxkIGJlCisgKiAodGNkVXNlZCAtIDJVKSB3aGljaCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBUQ0RzIGNhbiBiZSBsb2FkZWQgaW4gdGhlIG1lbW9yeSBwb29sIChiZWNhdXNlIFRDRFswXSBhbmQgVENEWzFdIGhhdmUKKyAqIGJlZW4gbG9hZGVkIGludG8gdGhlIGVETUEgZW5naW5lIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4pLgorICoKKyAqIEZvciB0aGUgbGFzdCB0d28gY29udGludW91cyBJU1JzIGluIGEgc2NhdHRlci9nYXRoZXIgcHJvY2VzcywgdGhleSAgYm90aCBsb2FkIHRoZSBsYXN0IFRDRCAoVGhlIGxhc3QgSVNSIGRvZXMgbm90CisgKiBsb2FkIGEgbmV3IFRDRCkgZnJvbSB0aGUgbWVtb3J5IHBvb2wgdG8gdGhlIGVETUEgZW5naW5lIHdoZW4gbWFqb3IgbG9vcCBjb21wbGV0ZXMuCisgKiBUaGVyZWZvcmUsIGVuc3VyZSB0aGF0IHRoZSBoZWFkZXIgYW5kIHRjZFVzZWQgdXBkYXRlZCBhcmUgaWRlbnRpY2FsIGZvciB0aGVtLgorICogdGNkVXNlZCBhcmUgYm90aCAwIGluIHRoaXMgY2FzZSBhcyBubyBUQ0QgdG8gYmUgbG9hZGVkLgorICoKKyAqIFNlZSB0aGUgImVETUEgYmFzaWMgZGF0YSBmbG93IiBpbiB0aGUgZURNQSBGdW5jdGlvbmFsIGRlc2NyaXB0aW9uIHNlY3Rpb24gb2YgdGhlIFJlZmVyZW5jZSBNYW51YWwgZm9yCisgKiBmdXJ0aGVyIGRldGFpbHMuCisgKgorICogQHBhcmFtIGhhbmRsZSBlRE1BIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIEVETUFfSGFuZGxlSVJRKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIEB9ICovCisKKyNlbmRpZiAvKl9GU0xfRURNQV9IXyovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9mbGFzaC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI4MmFiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZmxhc2guYwpAQCAtMCwwICsxLDM1MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2IE5YUAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9mbGFzaC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQG5hbWUgTWlzYyB1dGlsaXR5IGRlZmluZXMKKyAqIEB7CisgKi8KKy8qISBAYnJpZWYgQWxpZ25tZW50IHV0aWxpdHkuICovCisjaWZuZGVmIEFMSUdOX0RPV04KKyNkZWZpbmUgQUxJR05fRE9XTih4LCBhKSAoKHgpICYgKHVpbnQzMl90KSgtKChpbnQzMl90KShhKSkpKQorI2VuZGlmCisjaWZuZGVmIEFMSUdOX1VQCisjZGVmaW5lIEFMSUdOX1VQKHgsIGEpICgtKChpbnQzMl90KSgodWludDMyX3QpKC0oKGludDMyX3QpKHgpKSkgJiAodWludDMyX3QpKC0oKGludDMyX3QpKGEpKSkpKSkKKyNlbmRpZgorCisvKiEgQGJyaWVmIEpvaW4gYnl0ZXMgdG8gd29yZCB1dGlsaXR5LiAqLworI2RlZmluZSBCMVA0KGIpICgoKHVpbnQzMl90KShiKSYweEZGVSkgPDwgMjQpCisjZGVmaW5lIEIxUDMoYikgKCgodWludDMyX3QpKGIpJjB4RkZVKSA8PCAxNikKKyNkZWZpbmUgQjFQMihiKSAoKCh1aW50MzJfdCkoYikmMHhGRlUpIDw8IDgpCisjZGVmaW5lIEIxUDEoYikgKCh1aW50MzJfdCkoYikmMHhGRlUpCisjZGVmaW5lIEIyUDMoYikgKCgodWludDMyX3QpKGIpJjB4RkZGRlUpIDw8IDE2KQorI2RlZmluZSBCMlAyKGIpICgoKHVpbnQzMl90KShiKSYweEZGRkZVKSA8PCA4KQorI2RlZmluZSBCMlAxKGIpICgodWludDMyX3QpKGIpJjB4RkZGRlUpCisjZGVmaW5lIEIzUDIoYikgKCgodWludDMyX3QpKGIpJjB4RkZGRkZGVSkgPDwgOCkKKyNkZWZpbmUgQjNQMShiKSAoKHVpbnQzMl90KShiKSYweEZGRkZGRlUpCisjZGVmaW5lIEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoeCwgeSkgKEIxUDQoeCkgfCBCM1AxKHkpKQorI2RlZmluZSBCWVRFU19KT0lOX1RPX1dPUkRfMl8yKHgsIHkpIChCMlAzKHgpIHwgQjJQMSh5KSkKKyNkZWZpbmUgQllURVNfSk9JTl9UT19XT1JEXzNfMSh4LCB5KSAoQjNQMih4KSB8IEIxUDEoeSkpCisjZGVmaW5lIEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMih4LCB5LCB6KSAoQjFQNCh4KSB8IEIxUDMoeSkgfCBCMlAxKHopKQorI2RlZmluZSBCWVRFU19KT0lOX1RPX1dPUkRfMV8yXzEoeCwgeSwgeikgKEIxUDQoeCkgfCBCMlAyKHkpIHwgQjFQMSh6KSkKKyNkZWZpbmUgQllURVNfSk9JTl9UT19XT1JEXzJfMV8xKHgsIHksIHopIChCMlAzKHgpIHwgQjFQMih5KSB8IEIxUDEoeikpCisjZGVmaW5lIEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMV8xKHgsIHksIHosIHcpIChCMVA0KHgpIHwgQjFQMyh5KSB8IEIxUDIoeikgfCBCMVAxKHcpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgU2Vjb25kYXJ5IGZsYXNoIGNvbmZpZ3VyYXRpb24KKyAqIEB7CisgKi8KKy8qISBAYnJpZWYgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNlY29uZGFyeSBmbGFzaCBoYXMgaXRzIG93biBwcm90ZWN0aW9uIHJlZ2lzdGVyIGluIGZsYXNoIG1vZHVsZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19NVUxUSVBMRV9GTEFTSCkgJiYgZGVmaW5lZChGVEZFX0ZQUk9UU19QUk9UU19NQVNLKQorI2RlZmluZSBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX1BST1RFQ1RJT05fUkVHSVNURVIgKDEpCisjZWxzZQorI2RlZmluZSBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX1BST1RFQ1RJT05fUkVHSVNURVIgKDApCisjZW5kaWYKKworLyohIEBicmllZiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2Vjb25kYXJ5IGZsYXNoIGhhcyBpdHMgb3duIEV4ZWN1dGUtT25seSBhY2Nlc3MgcmVnaXN0ZXIgaW4gZmxhc2ggbW9kdWxlLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX01VTFRJUExFX0ZMQVNIKSAmJiBkZWZpbmVkKEZURkVfRkFDU1NTX1NHU0laRV9TX01BU0spCisjZGVmaW5lIEZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fQUNDRVNTX1JFR0lTVEVSICgxKQorI2Vsc2UKKyNkZWZpbmUgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9BQ0NFU1NfUkVHSVNURVIgKDApCisjZW5kaWYKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIEZsYXNoIGNhY2hlIGFuZHMgc3BlY3VsYXRpb24gY29udHJvbCBkZWZpbmVzCisgKiBAeworICovCisjaWYgZGVmaW5lZChNQ01fUExBQ1JfQ0ZDQ19NQVNLKSB8fCBkZWZpbmVkKE1DTV9DUENSMl9DQ0JDX01BU0spCisjZGVmaW5lIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfTUNNICgxKQorI2Vsc2UKKyNkZWZpbmUgRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9NQ00gKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfQ0lOVl9XQVlfTUFTSykgfHwgZGVmaW5lZChGTUNfUEZCMDFDUl9DSU5WX1dBWV9NQVNLKQorI2RlZmluZSBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX0ZNQyAoMSkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfRk1DICgwKQorI2VuZGlmCisjaWYgZGVmaW5lZChNQ01fUExBQ1JfREZDU19NQVNLKQorI2RlZmluZSBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01DTSAoMSkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTUNNICgwKQorI2VuZGlmCisjaWYgZGVmaW5lZChNU0NNX09DTURSX09DTTFfTUFTSykgfHwgZGVmaW5lZChNU0NNX09DTURSX09DTUMxX01BU0spCisjZGVmaW5lIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTSAoMSkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTSAoMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoRk1DX1BGQjBDUl9TX0lOVl9NQVNLKSB8fCBkZWZpbmVkKEZNQ19QRkIwQ1JfU19CX0lOVl9NQVNLKSB8fCBkZWZpbmVkKEZNQ19QRkIwMUNSX1NfSU5WX01BU0spCisjZGVmaW5lIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfRk1DICgxKQorI2Vsc2UKKyNkZWZpbmUgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9GTUMgKDApCisjZW5kaWYKKy8qQH0qLworCisvKiEgQGJyaWVmIERhdGEgZmxhc2ggSUZSIG1hcCBGaWVsZCovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZFKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZFCisjZGVmaW5lIERGTEFTSF9JRlJfUkVBRFJFU09VUkNFX1NUQVJUX0FERFJFU1MgMHg4MDAzRjhVCisjZWxzZSAvKiBGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZMID09IDEgb3IgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGQSA9ID0xICovCisjZGVmaW5lIERGTEFTSF9JRlJfUkVBRFJFU09VUkNFX1NUQVJUX0FERFJFU1MgMHg4MDAwRjhVCisjZW5kaWYKKworLyohCisgKiBAbmFtZSBSZXNlcnZlZCBGbGV4TlZNIHNpemUgKEZvciBhIHZhcmlldHkgb2YgcHVycG9zZXMpIGRlZmluZXMKKyAqIEB7CisgKi8KKyNkZWZpbmUgRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRCAweEZGRkZGRkZGVQorI2RlZmluZSBGTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV9SRVNFUlZFRCAweEZGRkZVCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBGbGFzaCBQcm9ncmFtIE9uY2UgRmllbGQgZGVmaW5lcworICogQHsKKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGQSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGQQorLyogRlRGQSBwYXJ0cyhlZy4gSzgwLCBLTDgwLCBMNUspIHN1cHBvcnQgYm90aCA0LWJ5dGVzIGFuZCA4LWJ5dGVzIHVuaXQgc2l6ZSAqLworI2RlZmluZSBGTEFTSF9QUk9HUkFNX09OQ0VfTUlOX0lEXzhCWVRFUyBcCisgICAgMHgxMFUgLyogTWluaW11bSBJbmRleCBpbmRjYXRpbmcgb25lIG9mIFByb2dhbSBPbmNlIEZpZWxkcyB3aGljaCBpcyBhY2Nlc3NlZCBpbiA4LWJ5dGUgcmVjb3JkcyAqLworI2RlZmluZSBGTEFTSF9QUk9HUkFNX09OQ0VfTUFYX0lEXzhCWVRFUyBcCisgICAgMHgxM1UgLyogTWF4aW11bSBJbmRleCBpbmRjYXRpbmcgb25lIG9mIFByb2dhbSBPbmNlIEZpZWxkcyB3aGljaCBpcyBhY2Nlc3NlZCBpbiA4LWJ5dGUgcmVjb3JkcyAqLworI2RlZmluZSBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfNEJZVEVTX1VOSVRfU1VQUE9SVCAxCisjZGVmaW5lIEZMQVNIX1BST0dSQU1fT05DRV9JU184QllURVNfVU5JVF9TVVBQT1JUIDEKKyNlbGlmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRQorLyogRlRGRSBwYXJ0cyhlZy4gSzY1LCBLRTE4KSBvbmx5IHN1cHBvcnQgOC1ieXRlcyB1bml0IHNpemUgKi8KKyNkZWZpbmUgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzRCWVRFU19VTklUX1NVUFBPUlQgMAorI2RlZmluZSBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfOEJZVEVTX1VOSVRfU1VQUE9SVCAxCisjZWxpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkwpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkwKKy8qIEZURkwgcGFydHMoZWcuIEsyMCkgb25seSBzdXBwb3J0IDQtYnl0ZXMgdW5pdCBzaXplICovCisjZGVmaW5lIEZMQVNIX1BST0dSQU1fT05DRV9JU180QllURVNfVU5JVF9TVVBQT1JUIDEKKyNkZWZpbmUgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzhCWVRFU19VTklUX1NVUFBPUlQgMAorI2VuZGlmCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBGbGFzaCBzZWN1cml0eSBzdGF0dXMgZGVmaW5lcworICogQHsKKyAqLworI2RlZmluZSBGTEFTSF9TRUNVUklUWV9TVEFURV9LRVlFTiAweDgwVQorI2RlZmluZSBGTEFTSF9TRUNVUklUWV9TVEFURV9VTlNFQ1VSRUQgMHgwMlUKKyNkZWZpbmUgRkxBU0hfTk9UX1NFQ1VSRSAweDAxVQorI2RlZmluZSBGTEFTSF9TRUNVUkVfQkFDS0RPT1JfRU5BQkxFRCAweDAyVQorI2RlZmluZSBGTEFTSF9TRUNVUkVfQkFDS0RPT1JfRElTQUJMRUQgMHgwNFUKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIEZsYXNoIGNvbnRyb2xsZXIgY29tbWFuZCBudW1iZXJzCisgKiBAeworICovCisjZGVmaW5lIEZURnhfVkVSSUZZX0JMT0NLIDB4MDBVICAgICAgICAgICAgICAgICAgICAvKiE8IFJEMUJMSyovCisjZGVmaW5lIEZURnhfVkVSSUZZX1NFQ1RJT04gMHgwMVUgICAgICAgICAgICAgICAgICAvKiE8IFJEMVNFQyovCisjZGVmaW5lIEZURnhfUFJPR1JBTV9DSEVDSyAweDAyVSAgICAgICAgICAgICAgICAgICAvKiE8IFBHTUNISyovCisjZGVmaW5lIEZURnhfUkVBRF9SRVNPVVJDRSAweDAzVSAgICAgICAgICAgICAgICAgICAvKiE8IFJEUlNSQyovCisjZGVmaW5lIEZURnhfUFJPR1JBTV9MT05HV09SRCAweDA2VSAgICAgICAgICAgICAgICAvKiE8IFBHTTQqLworI2RlZmluZSBGVEZ4X1BST0dSQU1fUEhSQVNFIDB4MDdVICAgICAgICAgICAgICAgICAgLyohPCBQR004Ki8KKyNkZWZpbmUgRlRGeF9FUkFTRV9CTE9DSyAweDA4VSAgICAgICAgICAgICAgICAgICAgIC8qITwgRVJTQkxLKi8KKyNkZWZpbmUgRlRGeF9FUkFTRV9TRUNUT1IgMHgwOVUgICAgICAgICAgICAgICAgICAgIC8qITwgRVJTU0NSKi8KKyNkZWZpbmUgRlRGeF9QUk9HUkFNX1NFQ1RJT04gMHgwQlUgICAgICAgICAgICAgICAgIC8qITwgUEdNU0VDKi8KKyNkZWZpbmUgRlRGeF9HRU5FUkFURV9DUkMgMHgwQ1UgICAgICAgICAgICAgICAgICAgIC8qITwgQ1JDR0VOKi8KKyNkZWZpbmUgRlRGeF9WRVJJRllfQUxMX0JMT0NLIDB4NDBVICAgICAgICAgICAgICAgIC8qITwgUkQxQUxMKi8KKyNkZWZpbmUgRlRGeF9SRUFEX09OQ0UgMHg0MVUgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUkRPTkNFIG9yIFJESU5ERVgqLworI2RlZmluZSBGVEZ4X1BST0dSQU1fT05DRSAweDQzVSAgICAgICAgICAgICAgICAgICAgLyohPCBQR01PTkNFIG9yIFBHTUlOREVYKi8KKyNkZWZpbmUgRlRGeF9FUkFTRV9BTExfQkxPQ0sgMHg0NFUgICAgICAgICAgICAgICAgIC8qITwgRVJTQUxMKi8KKyNkZWZpbmUgRlRGeF9TRUNVUklUWV9CWV9QQVNTIDB4NDVVICAgICAgICAgICAgICAgIC8qITwgVkZZS0VZKi8KKyNkZWZpbmUgRlRGeF9TV0FQX0NPTlRST0wgMHg0NlUgICAgICAgICAgICAgICAgICAgIC8qITwgU1dBUCovCisjZGVmaW5lIEZURnhfRVJBU0VfQUxMX0JMT0NLX1VOU0VDVVJFIDB4NDlVICAgICAgICAvKiE8IEVSU0FMTFUqLworI2RlZmluZSBGVEZ4X1ZFUklGWV9BTExfRVhFQ1VURV9PTkxZX1NFR01FTlQgMHg0QVUgLyohPCBSRDFYQSovCisjZGVmaW5lIEZURnhfRVJBU0VfQUxMX0VYRUNVVEVfT05MWV9TRUdNRU5UIDB4NEJVICAvKiE8IEVSU1hBKi8KKyNkZWZpbmUgRlRGeF9QUk9HUkFNX1BBUlRJVElPTiAweDgwVSAgICAgICAgICAgICAgIC8qITwgUEdNUEFSVCkqLworI2RlZmluZSBGVEZ4X1NFVF9GTEVYUkFNX0ZVTkNUSU9OIDB4ODFVICAgICAgICAgICAgLyohPCBTRVRSQU0qLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypAfSovCisKKy8qIQorICogQG5hbWUgQ29tbW9uIGZsYXNoIHJlZ2lzdGVyIGluZm8gZGVmaW5lcworICogQHsKKyAqLworI2lmIGRlZmluZWQoRlRGQSkKKyNkZWZpbmUgRlRGeCBGVEZBCisjZGVmaW5lIEZURnhfQkFTRSBGVEZBX0JBU0UKKyNkZWZpbmUgRlRGeF9GU1RBVF9DQ0lGX01BU0sgRlRGQV9GU1RBVF9DQ0lGX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9SRENPTEVSUl9NQVNLIEZURkFfRlNUQVRfUkRDT0xFUlJfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX0FDQ0VSUl9NQVNLIEZURkFfRlNUQVRfQUNDRVJSX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9GUFZJT0xfTUFTSyBGVEZBX0ZTVEFUX0ZQVklPTF9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfTUdTVEFUMF9NQVNLIEZURkFfRlNUQVRfTUdTVEFUMF9NQVNLCisjZGVmaW5lIEZURnhfRlNFQ19TRUNfTUFTSyBGVEZBX0ZTRUNfU0VDX01BU0sKKyNkZWZpbmUgRlRGeF9GU0VDX0tFWUVOX01BU0sgRlRGQV9GU0VDX0tFWUVOX01BU0sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNCisjZGVmaW5lIEZURnhfRkNORkdfUkFNUkRZX01BU0sgRlRGQV9GQ05GR19SQU1SRFlfTUFTSworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0KKyNkZWZpbmUgRlRGeF9GQ05GR19FRUVSRFlfTUFTSyBGVEZBX0ZDTkZHX0VFRVJEWV9NQVNLCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNICovCisjZWxpZiBkZWZpbmVkKEZURkUpCisjZGVmaW5lIEZURnggRlRGRQorI2RlZmluZSBGVEZ4X0JBU0UgRlRGRV9CQVNFCisjZGVmaW5lIEZURnhfRlNUQVRfQ0NJRl9NQVNLIEZURkVfRlNUQVRfQ0NJRl9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfUkRDT0xFUlJfTUFTSyBGVEZFX0ZTVEFUX1JEQ09MRVJSX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9BQ0NFUlJfTUFTSyBGVEZFX0ZTVEFUX0FDQ0VSUl9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfRlBWSU9MX01BU0sgRlRGRV9GU1RBVF9GUFZJT0xfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX01HU1RBVDBfTUFTSyBGVEZFX0ZTVEFUX01HU1RBVDBfTUFTSworI2RlZmluZSBGVEZ4X0ZTRUNfU0VDX01BU0sgRlRGRV9GU0VDX1NFQ19NQVNLCisjZGVmaW5lIEZURnhfRlNFQ19LRVlFTl9NQVNLIEZURkVfRlNFQ19LRVlFTl9NQVNLCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0pICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX1JBTQorI2RlZmluZSBGVEZ4X0ZDTkZHX1JBTVJEWV9NQVNLIEZURkVfRkNORkdfUkFNUkRZX01BU0sKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTSkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNCisjZGVmaW5lIEZURnhfRkNORkdfRUVFUkRZX01BU0sgRlRGRV9GQ05GR19FRUVSRFlfTUFTSworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTSAqLworI2VsaWYgZGVmaW5lZChGVEZMKQorI2RlZmluZSBGVEZ4IEZURkwKKyNkZWZpbmUgRlRGeF9CQVNFIEZURkxfQkFTRQorI2RlZmluZSBGVEZ4X0ZTVEFUX0NDSUZfTUFTSyBGVEZMX0ZTVEFUX0NDSUZfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX1JEQ09MRVJSX01BU0sgRlRGTF9GU1RBVF9SRENPTEVSUl9NQVNLCisjZGVmaW5lIEZURnhfRlNUQVRfQUNDRVJSX01BU0sgRlRGTF9GU1RBVF9BQ0NFUlJfTUFTSworI2RlZmluZSBGVEZ4X0ZTVEFUX0ZQVklPTF9NQVNLIEZURkxfRlNUQVRfRlBWSU9MX01BU0sKKyNkZWZpbmUgRlRGeF9GU1RBVF9NR1NUQVQwX01BU0sgRlRGTF9GU1RBVF9NR1NUQVQwX01BU0sKKyNkZWZpbmUgRlRGeF9GU0VDX1NFQ19NQVNLIEZURkxfRlNFQ19TRUNfTUFTSworI2RlZmluZSBGVEZ4X0ZTRUNfS0VZRU5fTUFTSyBGVEZMX0ZTRUNfS0VZRU5fTUFTSworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9SQU0KKyNkZWZpbmUgRlRGeF9GQ05GR19SQU1SRFlfTUFTSyBGVEZMX0ZDTkZHX1JBTVJEWV9NQVNLCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfUkFNICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0pICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19GTEVYX05WTQorI2RlZmluZSBGVEZ4X0ZDTkZHX0VFRVJEWV9NQVNLIEZURkxfRkNORkdfRUVFUkRZX01BU0sKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRkxFWF9OVk0gKi8KKyNlbHNlCisjZXJyb3IgIlVua25vd24gZmxhc2ggY29udHJvbGxlciIKKyNlbmRpZgorLypAfSovCisKKy8qIQorICogQG5hbWUgQ29tbW9uIGZsYXNoIHJlZ2lzdGVyIGFjY2VzcyBpbmZvIGRlZmluZXMKKyAqIEB7CisgKi8KKyNpZiBkZWZpbmVkKEZURkFfRkNDT0JfQ0NPQm5fTUFTSykgfHwgZGVmaW5lZChGVEZFX0ZDQ09CX0NDT0JuX01BU0spIHx8IGRlZmluZWQoRlRGTF9GQ0NPQl9DQ09Cbl9NQVNLKQorI2RlZmluZSBGVEZ4X0ZDQ09CM19SRUcgKEZURngtPkZDQ09CWzBdKQorI2RlZmluZSBGVEZ4X0ZDQ09CNV9SRUcgKEZURngtPkZDQ09CWzZdKQorI2RlZmluZSBGVEZ4X0ZDQ09CNl9SRUcgKEZURngtPkZDQ09CWzVdKQorI2RlZmluZSBGVEZ4X0ZDQ09CN19SRUcgKEZURngtPkZDQ09CWzRdKQorI2Vsc2UKKyNkZWZpbmUgRlRGeF9GQ0NPQjNfUkVHIChGVEZ4LT5GQ0NPQjMpCisjZGVmaW5lIEZURnhfRkNDT0I1X1JFRyAoRlRGeC0+RkNDT0I1KQorI2RlZmluZSBGVEZ4X0ZDQ09CNl9SRUcgKEZURngtPkZDQ09CNikKKyNkZWZpbmUgRlRGeF9GQ0NPQjdfUkVHIChGVEZ4LT5GQ0NPQjcpCisjZW5kaWYKKworI2lmIGRlZmluZWQoRlRGQV9GUFJPVF9QUk9UX01BU0spIHx8IGRlZmluZWQoRlRGRV9GUFJPVF9QUk9UX01BU0spIHx8IGRlZmluZWQoRlRGTF9GUFJPVF9QUk9UX01BU0spCisjZGVmaW5lIEZURnhfRlBST1RfTE9XX1JFRyAoRlRGeC0+RlBST1RbNF0pCisjZGVmaW5lIEZURnhfRlBST1RMM19SRUcgKEZURngtPkZQUk9UWzRdKQorI2RlZmluZSBGVEZ4X0ZQUk9UTDJfUkVHIChGVEZ4LT5GUFJPVFs1XSkKKyNkZWZpbmUgRlRGeF9GUFJPVEwxX1JFRyAoRlRGeC0+RlBST1RbNl0pCisjZGVmaW5lIEZURnhfRlBST1RMMF9SRUcgKEZURngtPkZQUk9UWzddKQorI2RlZmluZSBGVEZ4X0ZQUk9UX0hJR0hfUkVHIChGVEZ4LT5GUFJPVFswXSkKKyNkZWZpbmUgRlRGeF9GUFJPVEgzX1JFRyAoRlRGeC0+RlBST1RbMF0pCisjZGVmaW5lIEZURnhfRlBST1RIMl9SRUcgKEZURngtPkZQUk9UWzFdKQorI2RlZmluZSBGVEZ4X0ZQUk9USDFfUkVHIChGVEZ4LT5GUFJPVFsyXSkKKyNkZWZpbmUgRlRGeF9GUFJPVEgwX1JFRyAoRlRGeC0+RlBST1RbM10pCisjZWxzZQorI2RlZmluZSBGVEZ4X0ZQUk9UX0xPV19SRUcgKEZURngtPkZQUk9UMykKKyNkZWZpbmUgRlRGeF9GUFJPVEwzX1JFRyAoRlRGeC0+RlBST1QzKQorI2RlZmluZSBGVEZ4X0ZQUk9UTDJfUkVHIChGVEZ4LT5GUFJPVDIpCisjZGVmaW5lIEZURnhfRlBST1RMMV9SRUcgKEZURngtPkZQUk9UMSkKKyNkZWZpbmUgRlRGeF9GUFJPVEwwX1JFRyAoRlRGeC0+RlBST1QwKQorI2VuZGlmCisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSCisjaWYgZGVmaW5lZChGVEZBX0ZQUk9UU19QUk9UU19NQVNLKSB8fCBkZWZpbmVkKEZURkVfRlBST1RTX1BST1RTX01BU0spIHx8IGRlZmluZWQoRlRGTF9GUFJPVFNfUFJPVFNfTUFTSykKKyNkZWZpbmUgRlRGeF9GUFJPVFNIX1JFRyAoRlRGeC0+RlBST1RTWzFdKQorI2RlZmluZSBGVEZ4X0ZQUk9UU0xfUkVHIChGVEZ4LT5GUFJPVFNbMF0pCisjZWxzZQorI2RlZmluZSBGVEZ4X0ZQUk9UU0hfUkVHIChGVEZ4LT5GUFJPVFNIKQorI2RlZmluZSBGVEZ4X0ZQUk9UU0xfUkVHIChGVEZ4LT5GUFJPVFNMKQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoRlRGQV9YQUNDX1hBX01BU0spIHx8IGRlZmluZWQoRlRGRV9YQUNDX1hBX01BU0spIHx8IGRlZmluZWQoRlRGTF9YQUNDX1hBX01BU0spCisjZGVmaW5lIEZURnhfWEFDQ0gzX1JFRyAoRlRGeC0+WEFDQ1swXSkKKyNkZWZpbmUgRlRGeF9YQUNDTDNfUkVHIChGVEZ4LT5YQUNDWzRdKQorI2Vsc2UKKyNkZWZpbmUgRlRGeF9YQUNDSDNfUkVHIChGVEZ4LT5YQUNDSDMpCisjZGVmaW5lIEZURnhfWEFDQ0wzX1JFRyAoRlRGeC0+WEFDQ0wzKQorI2VuZGlmCisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9BQ0NFU1NfUkVHSVNURVIKKyNpZiBkZWZpbmVkKEZURkFfWEFDQ1NfWEFfU19NQVNLKSB8fCBkZWZpbmVkKEZURkVfWEFDQ1NfWEFfU19NQVNLKSB8fCBkZWZpbmVkKEZURkxfWEFDQ1NfWEFfU19NQVNLKQorI2RlZmluZSBGVEZ4X1hBQ0NTSF9SRUcgKEZURngtPlhBQ0NTWzFdKQorI2RlZmluZSBGVEZ4X1hBQ0NTTF9SRUcgKEZURngtPlhBQ0NTWzBdKQorI2Vsc2UKKyNkZWZpbmUgRlRGeF9YQUNDU0hfUkVHIChGVEZ4LT5YQUNDU0gpCisjZGVmaW5lIEZURnhfWEFDQ1NMX1JFRyAoRlRGeC0+WEFDQ1NMKQorI2VuZGlmCisjZW5kaWYKKy8qQH0qLworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgYWNjZXNzIHNlZ21lbnQgcHJvcGVydHkuCisgKi8KK2VudW0gX2ZsYXNoX2FjY2Vzc19zZWdtZW50X3Byb3BlcnR5Cit7CisgICAga0ZMQVNIX0FjY2Vzc1NlZ21lbnRCYXNlID0gMjU2VUwsCit9OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgZmxhc2ggY29uZmlnIGFyZWEuCisgKi8KK2VudW0gX2ZsYXNoX2NvbmZpZ19hcmVhX3JhbmdlCit7CisgICAga0ZMQVNIX0NvbmZpZ0FyZWFTdGFydCA9IDB4NDAwVSwKKyAgICBrRkxBU0hfQ29uZmlnQXJlYUVuZCA9IDB4NDBGVQorfTsKKworLyohCisgKiBAbmFtZSBGbGFzaCByZWdpc3RlciBhY2Nlc3MgdHlwZSBkZWZpbmVzCisgKiBAeworICovCisjZGVmaW5lIEZURnhfUkVHOF9BQ0NFU1NfVFlQRSB2b2xhdGlsZSB1aW50OF90ICoKKyNkZWZpbmUgRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSB2b2xhdGlsZSB1aW50MzJfdCAqCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgTUNNIGNhY2hlIHJlZ2lzdGVyIGFjY2VzcyBpbmZvIGRlZmluZXMuCisgKi8KKyNpZiBkZWZpbmVkKE1DTV9QTEFDUl9DRkNDX01BU0spCisjZGVmaW5lIE1DTV9DQUNIRV9DTEVBUl9NQVNLIE1DTV9QTEFDUl9DRkNDX01BU0sKKyNkZWZpbmUgTUNNX0NBQ0hFX0NMRUFSX1NISUZUIE1DTV9QTEFDUl9DRkNDX1NISUZUCisjaWYgZGVmaW5lZChNQ00pCisjZGVmaW5lIE1DTTBfQ0FDSEVfUkVHIE1DTS0+UExBQ1IKKyNlbGlmIGRlZmluZWQoTUNNMCkKKyNkZWZpbmUgTUNNMF9DQUNIRV9SRUcgTUNNMC0+UExBQ1IKKyNlbmRpZgorI2lmIGRlZmluZWQoTUNNMSkKKyNkZWZpbmUgTUNNMV9DQUNIRV9SRUcgTUNNMS0+UExBQ1IKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChNQ01fQ1BDUjJfQ0NCQ19NQVNLKQorI2RlZmluZSBNQ01fQ0FDSEVfQ0xFQVJfTUFTSyBNQ01fQ1BDUjJfQ0NCQ19NQVNLCisjZGVmaW5lIE1DTV9DQUNIRV9DTEVBUl9TSElGVCBNQ01fQ1BDUjJfQ0NCQ19TSElGVAorI2lmIGRlZmluZWQoTUNNKQorI2RlZmluZSBNQ00wX0NBQ0hFX1JFRyBNQ00tPkNQQ1IyCisjZWxpZiBkZWZpbmVkKE1DTTApCisjZGVmaW5lIE1DTTBfQ0FDSEVfUkVHIE1DTTAtPkNQQ1IyCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1DTTEpCisjZGVmaW5lIE1DTTFfQ0FDSEVfUkVHIE1DTTEtPkNQQ1IyCisjZW5kaWYKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBNU0NNIGNhY2hlIHJlZ2lzdGVyIGFjY2VzcyBpbmZvIGRlZmluZXMuCisgKi8KKyNpZiBkZWZpbmVkKE1TQ01fT0NNRFJfT0NNMV9NQVNLKQorI2RlZmluZSBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEVfTUFTSyBNU0NNX09DTURSX09DTTFfTUFTSworI2RlZmluZSBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEVfU0hJRlQgTVNDTV9PQ01EUl9PQ00xX1NISUZUCisjZGVmaW5lIE1TQ01fU1BFQ1VMQVRJT05fRElTQUJMRSh4KSBNU0NNX09DTURSX09DTTEoeCkKKyNlbGlmIGRlZmluZWQoTVNDTV9PQ01EUl9PQ01DMV9NQVNLKQorI2RlZmluZSBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEVfTUFTSyBNU0NNX09DTURSX09DTUMxX01BU0sKKyNkZWZpbmUgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX1NISUZUIE1TQ01fT0NNRFJfT0NNQzFfU0hJRlQKKyNkZWZpbmUgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFKHgpIE1TQ01fT0NNRFJfT0NNQzEoeCkKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBNU0NNIHByZWZldGNoIHNwZWN1bGF0aW9uIGRlZmluZXMuCisgKi8KKyNkZWZpbmUgTVNDTV9PQ01EUl9PQ01DMV9ERkRTX01BU0sgKDB4MTBVKQorI2RlZmluZSBNU0NNX09DTURSX09DTUMxX0RGQ1NfTUFTSyAoMHgyMFUpCisKKyNkZWZpbmUgTVNDTV9PQ01EUl9PQ01DMV9ERkRTX1NISUZUICg0VSkKKyNkZWZpbmUgTVNDTV9PQ01EUl9PQ01DMV9ERkNTX1NISUZUICg1VSkKKworLyohCisgKiBAYnJpZWYgRmxhc2ggc2l6ZSBlbmNvZGluZyBydWxlLgorICovCisjZGVmaW5lIEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEVfSzFfMiAoMHgwMFUpCisjZGVmaW5lIEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEVfSzMgKDB4MDFVKQorCisjaWYgZGVmaW5lZChLMzJXMDQyUzFNMl9NMFBfU0VSSUVTKSB8fCBkZWZpbmVkKEszMlcwNDJTMU0yX000X1NFUklFUykKKyNkZWZpbmUgRkxBU0hfTUVNT1JZX1NJWkVfRU5DT0RJTkdfUlVMRSAoRkxBU0hfTUVNT1JZX1NJWkVfRU5DT0RJTkdfUlVMRV9LMykKKyNlbHNlCisjZGVmaW5lIEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEUgKEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEVfSzFfMikKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorLyohIEBicmllZiBDb3B5IGZsYXNoX3J1bl9jb21tYW5kKCkgdG8gUkFNKi8KK3N0YXRpYyB2b2lkIGNvcHlfZmxhc2hfcnVuX2NvbW1hbmQodWludDMyX3QgKmZsYXNoUnVuQ29tbWFuZCk7CisvKiEgQGJyaWVmIENvcHkgZmxhc2hfY2FjaGVfY2xlYXJfY29tbWFuZCgpIHRvIFJBTSovCitzdGF0aWMgdm9pZCBjb3B5X2ZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKHVpbnQzMl90ICpmbGFzaENvbW1vbkJpdE9wZXJhdGlvbik7CisvKiEgQGJyaWVmIENoZWNrIHdoZXRoZXIgZmxhc2ggZXhlY3V0ZS1pbi1yYW0gZnVuY3Rpb25zIGFyZSByZWFkeSovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfY2hlY2tfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25faW5mbyhmbGFzaF9jb25maWdfdCAqY29uZmlnKTsKKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworLyohIEBicmllZiBJbnRlcm5hbCBmdW5jdGlvbiBGbGFzaCBjb21tYW5kIHNlcXVlbmNlLiBDYWxsZWQgYnkgZHJpdmVyIEFQSXMgb25seSovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShmbGFzaF9jb25maWdfdCAqY29uZmlnKTsKKworLyohIEBicmllZiBQZXJmb3JtIHRoZSBjYWNoZSBjbGVhciB0byB0aGUgZmxhc2gqLwordm9pZCBmbGFzaF9jYWNoZV9jbGVhcihmbGFzaF9jb25maWdfdCAqY29uZmlnKTsKKworLyohIEBicmllZiBQcm9jZXNzIHRoZSBjYWNoZSB0byB0aGUgZmxhc2gqLworc3RhdGljIHZvaWQgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2VzcyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzX3QgcHJvY2Vzcyk7CisKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSByYW5nZSBhbmQgYWxpZ25tZW50IG9mIHRoZSBnaXZlbiBhZGRyZXNzIHJhbmdlLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfY2hlY2tfcmFuZ2UoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhbGlnbm1lbnRCYXNlbGluZSk7CisvKiEgQGJyaWVmIEdldHMgdGhlIHJpZ2h0IGFkZHJlc3MsIHNlY3RvciBhbmQgYmxvY2sgc2l6ZSBvZiBjdXJyZW50IGZsYXNoIHR5cGUgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IGFkZHJlc3MuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9nZXRfbWF0Y2hlZF9vcGVyYXRpb25faW5mbyhmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfb3BlcmF0aW9uX2NvbmZpZ190ICppbmZvKTsKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSBnaXZlbiB1c2VyIGtleSBmb3IgZmxhc2ggZXJhc2UgQVBJcy4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3VzZXJfa2V5KHVpbnQzMl90IGtleSk7CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisvKiEgQGJyaWVmIFVwZGF0ZXMgRmxleE5WTSBtZW1vcnkgcGFydGl0aW9uIHN0YXR1cyBhY2NvcmRpbmcgdG8gZGF0YSBmbGFzaCAwIElGUi4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX3VwZGF0ZV9mbGV4bnZtX21lbW9yeV9wYXJ0aXRpb25fc3RhdHVzKGZsYXNoX2NvbmZpZ190ICpjb25maWcpOworI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSByYW5nZSBvZiB0aGUgZ2l2ZW4gcmVzb3VyY2UgYWRkcmVzcy4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3Jlc291cmNlX3JhbmdlKHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWxpZ25tZW50QmFzZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfcmVhZF9yZXNvdXJjZV9vcHRpb25fdCBvcHRpb24pOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSBnaXZlZCBzd2FwIGNvbnRyb2wgb3B0aW9uLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfY2hlY2tfc3dhcF9jb250cm9sX29wdGlvbihmbGFzaF9zd2FwX2NvbnRyb2xfb3B0aW9uX3Qgb3B0aW9uKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVApICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUAorLyohIEBicmllZiBWYWxpZGF0ZXMgdGhlIGdpdmVkIGFkZHJlc3MgdG8gc2VlIGlmIGl0IGlzIGVxdWFsIHRvIHN3YXAgaW5kaWNhdG9yIGFkZHJlc3MgaW4gcGZsYXNoIHN3YXAgSUZSLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfdmFsaWRhdGVfc3dhcF9pbmRpY2F0b3JfYWRkcmVzcyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBhZGRyZXNzKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRAorLyohIEBicmllZiBWYWxpZGF0ZXMgdGhlIGdpdmVkIGZsZXhyYW0gZnVuY3Rpb24gb3B0aW9uLiovCitzdGF0aWMgaW5saW5lIHN0YXR1c190IGZsYXNuX2NoZWNrX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3JhbmdlKGZsYXNoX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3Qgb3B0aW9uKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EICovCisKKy8qISBAYnJpZWYgR2V0cyB0aGUgZmxhc2ggcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiAocmVnaW9uIHNpemUsIHJlZ2lvbiBjb3VudCkuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9nZXRfcHJvdGVjdGlvbl9pbmZvKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3Byb3RlY3Rpb25fY29uZmlnX3QgKmluZm8pOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTAorLyohIEBicmllZiBHZXRzIHRoZSBmbGFzaCBFeGVjdXRlLU9ubHkgYWNjZXNzIGluZm9ybWF0aW9uIChTZWdtZW50IHNpemUsIFNlZ21lbnQgY291bnQpLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfZ2V0X2FjY2Vzc19pbmZvKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX2FjY2Vzc19jb25maWdfdCAqaW5mbyk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MICovCisKKyNpZiBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX01DTQorLyohIEBicmllZiBQZXJmb3JtcyB0aGUgY2FjaGUgY2xlYXIgdG8gdGhlIGZsYXNoIGJ5IE1DTS4qLwordm9pZCBtY21fZmxhc2hfY2FjaGVfY2xlYXIoZmxhc2hfY29uZmlnX3QgKmNvbmZpZyk7CisjZW5kaWYgLyogRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9NQ00gKi8KKworI2lmIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfRk1DCisvKiEgQGJyaWVmIFBlcmZvcm1zIHRoZSBjYWNoZSBjbGVhciB0byB0aGUgZmxhc2ggYnkgRk1DLiovCit2b2lkIGZtY19mbGFzaF9jYWNoZV9jbGVhcih2b2lkKTsKKyNlbmRpZiAvKiBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX0ZNQyAqLworCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNCisvKiEgQGJyaWVmIFNldHMgdGhlIHByZWZldGNoIHNwZWN1bGF0aW9uIGJ1ZmZlciB0byB0aGUgZmxhc2ggYnkgTVNDTS4qLwordm9pZCBtc2NtX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX2VuYWJsZShib29sIGVuYWJsZSk7CisjZW5kaWYgLyogRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNICovCisKKyNpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX0ZNQworLyohIEBicmllZiBQZXJmb3JtcyB0aGUgcHJlZmV0Y2ggc3BlY3VsYXRpb24gYnVmZmVyIGNsZWFyIHRvIHRoZSBmbGFzaCBieSBGTUMuKi8KK3ZvaWQgZm1jX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX2NsZWFyKHZvaWQpOworI2VuZGlmIC8qIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfRk1DICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAYnJpZWYgQWNjZXNzIHRvIEZURngtPkZDQ09CICovCit2b2xhdGlsZSB1aW50MzJfdCAqY29uc3Qga0ZDQ09CeCA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKSZGVEZ4X0ZDQ09CM19SRUc7CisvKiEgQGJyaWVmIEFjY2VzcyB0byBGVEZ4LT5GUFJPVCAqLwordm9sYXRpbGUgdWludDMyX3QgKmNvbnN0IGtGUFJPVEwgPSAodm9sYXRpbGUgdWludDMyX3QgKikmRlRGeF9GUFJPVF9MT1dfUkVHOworI2lmIGRlZmluZWQoRlRGeF9GUFJPVF9ISUdIX1JFRykKK3ZvbGF0aWxlIHVpbnQzMl90ICpjb25zdCBrRlBST1RIID0gKHZvbGF0aWxlIHVpbnQzMl90ICopJkZURnhfRlBST1RfSElHSF9SRUc7CisjZW5kaWYKKworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAmJiBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX1BST1RFQ1RJT05fUkVHSVNURVIKK3ZvbGF0aWxlIHVpbnQ4X3QgKmNvbnN0IGtGUFJPVFNMID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikmRlRGeF9GUFJPVFNMX1JFRzsKK3ZvbGF0aWxlIHVpbnQ4X3QgKmNvbnN0IGtGUFJPVFNIID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikmRlRGeF9GUFJPVFNIX1JFRzsKKyNlbmRpZgorCisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCisvKiEgQGJyaWVmIEEgZnVuY3Rpb24gcG9pbnRlciB1c2VkIHRvIHBvaW50IHRvIHJlbG9jYXRlZCBmbGFzaF9ydW5fY29tbWFuZCgpICovCitzdGF0aWMgdm9pZCAoKmNhbGxGbGFzaFJ1bkNvbW1hbmQpKEZURnhfUkVHOF9BQ0NFU1NfVFlQRSBmdGZ4X2ZzdGF0KTsKKy8qISBAYnJpZWYgQSBmdW5jdGlvbiBwb2ludGVyIHVzZWQgdG8gcG9pbnQgdG8gcmVsb2NhdGVkIGZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKCkgKi8KK3N0YXRpYyB2b2lkICgqY2FsbEZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKShGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYml0TWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRWYWx1ZSk7CisKKy8qIQorICogQGJyaWVmIFBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgb2YgZmxhc2hfcnVuX2NvbW1hbmQoKQorICoKKyAqIE5vdGUxOiBUaGUgcHJvdG90eXBlIG9mIEMgZnVuY3Rpb24gaXMgc2hvd24gYXMgYmVsb3c6CisgKiBAY29kZQorICogICB2b2lkIGZsYXNoX3J1bl9jb21tYW5kKEZURnhfUkVHOF9BQ0NFU1NfVFlQRSBmdGZ4X2ZzdGF0KQorICogICB7CisgKiAgICAgICAvLyBjbGVhciBDQ0lGIGJpdAorICogICAgICAgKmZ0ZnhfZnN0YXQgPSBGVEZ4X0ZTVEFUX0NDSUZfTUFTSzsKKyAqCisgKiAgICAgICAvLyBDaGVjayBDQ0lGIGJpdCBvZiB0aGUgZmxhc2ggc3RhdHVzIHJlZ2lzdGVyLCB3YWl0IHRpbGwgaXQgaXMgc2V0LgorICogICAgICAgLy8gSVAgdGVhbSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGxvb3Agd2lsbCBhbHdheXMgY29tcGxldGUuCisgKiAgICAgICB3aGlsZSAoISgoKmZ0ZnhfZnN0YXQpICYgRlRGeF9GU1RBVF9DQ0lGX01BU0spKQorICogICAgICAgeworICogICAgICAgfQorICogICB9CisgKiBAZW5kY29kZQorICogTm90ZTI6IFRoZSBiaW5hcnkgY29kZSBpcyBnZW5lcmF0ZWQgYnkgSUFSIDcuNzAuMQorICovCitjb25zdCBzdGF0aWMgdWludDE2X3Qgc19mbGFzaFJ1bkNvbW1hbmRGdW5jdGlvbkNvZGVbXSA9IHsKKyAgICAweDIxODAsIC8qIE1PVlMgIFIxLCAjMTI4IDsgMHg4MCAqLworICAgIDB4NzAwMSwgLyogU1RSQiAgUjEsIFtSMF0gKi8KKyAgICAvKiBANDogKi8KKyAgICAweDc4MDIsIC8qIExEUkIgIFIyLCBbUjBdICovCisgICAgMHg0MjBhLCAvKiBUU1QgICBSMiwgUjEgKi8KKyAgICAweGQwZmMsIC8qIEJFUS5OIEA0ICovCisgICAgMHg0NzcwICAvKiBCWCAgICBMUiAqLworfTsKKworLyohCisgKiBAYnJpZWYgUG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBvZiBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbigpCisgKgorICogTm90ZTE6IFRoZSBwcm90b3R5cGUgb2YgQyBmdW5jdGlvbiBpcyBzaG93biBhcyBiZWxvdzoKKyAqIEBjb2RlCisgKiAgIHZvaWQgZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24oRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSBiYXNlLCB1aW50MzJfdCBiaXRNYXNrLCB1aW50MzJfdCBiaXRTaGlmdCwgdWludDMyX3QKKyAqIGJpdFZhbHVlKQorICogICB7CisgKiAgICAgICBpZiAoYml0TWFzaykKKyAqICAgICAgIHsKKyAqICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9ICgoKHVpbnQzMl90KSgoKHVpbnQzMl90KShiaXRWYWx1ZSkpIDw8IGJpdFNoaWZ0KSkgJiBiaXRNYXNrKTsKKyAqICAgICAgICAgICAqYmFzZSA9ICgqYmFzZSAmICh+Yml0TWFzaykpIHwgdmFsdWU7CisgKiAgICAgICB9CisgKgorICogICAgICAgX19JU0IoKTsKKyAqICAgICAgIF9fRFNCKCk7CisgKiAgIH0KKyAqIEBlbmRjb2RlCisgKiBOb3RlMjogVGhlIGJpbmFyeSBjb2RlIGlzIGdlbmVyYXRlZCBieSBJQVIgNy43MC4xCisgKi8KK2NvbnN0IHN0YXRpYyB1aW50MTZfdCBzX2ZsYXNoQ29tbW9uQml0T3BlcmF0aW9uRnVuY3Rpb25Db2RlW10gPSB7CisgICAgMHhiNTEwLCAvKiBQVVNIICB7UjQsIExSfSAqLworICAgIDB4MjkwMCwgLyogQ01QICAgUjEsICMwICovCisgICAgMHhkMDA1LCAvKiBCRVEuTiBAMTIgKi8KKyAgICAweDY4MDQsIC8qIExEUiAgIFI0LCBbUjBdICovCisgICAgMHg0MzhjLCAvKiBCSUNTICBSNCwgUjQsIFIxICovCisgICAgMHg0MDkzLCAvKiBMU0xTICBSMywgUjMsIFIyICovCisgICAgMHg0MDE5LCAvKiBBTkRTICBSMSwgUjEsIFIzICovCisgICAgMHg0MzIxLCAvKiBPUlJTICBSMSwgUjEsIFI0ICovCisgICAgMHg2MDAxLCAvKiBTVFIgICBSMSwgW1IwXSAqLworICAgIC8qICBAMTI6ICovCisgICAgMHhmM2JmLCAweDhmNmYsIC8qIElTQiAqLworICAgIDB4ZjNiZiwgMHg4ZjRmLCAvKiBEU0IgKi8KKyAgICAweGJkMTAgICAgICAgICAgLyogUE9QICAge1I0LCBQQ30gKi8KK307CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisKKyNpZiAoRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICFGTEFTSF9EUklWRVJfSVNfRVhQT1JURUQpCisvKiEgQGJyaWVmIEEgc3RhdGljIGJ1ZmZlciB1c2VkIHRvIGhvbGQgZmxhc2hfcnVuX2NvbW1hbmQoKSAqLworc3RhdGljIHVpbnQzMl90IHNfZmxhc2hSdW5Db21tYW5kW2tGTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk1heFNpemVJbldvcmRzXTsKKy8qISBAYnJpZWYgQSBzdGF0aWMgYnVmZmVyIHVzZWQgdG8gaG9sZCBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbigpICovCitzdGF0aWMgdWludDMyX3Qgc19mbGFzaENvbW1vbkJpdE9wZXJhdGlvbltrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3Jkc107CisvKiEgQGJyaWVmIEZsYXNoIGV4ZWN1dGUtaW4tcmFtIGZ1bmN0aW9uIGluZm9ybWF0aW9uICovCitzdGF0aWMgZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uZmlnX3Qgc19mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbzsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBUYWJsZSBvZiBwZmxhc2ggc2l6ZXMuCisgKgorICogIFRoZSBpbmRleCBpbnRvIHRoaXMgdGFibGUgaXMgdGhlIHZhbHVlIG9mIHRoZSBTSU1fRkNGRzEuUEZTSVpFIGJpdGZpZWxkLgorICoKKyAqICBUaGUgdmFsdWVzIGluIHRoaXMgdGFibGUgaGF2ZSBiZWVuIHJpZ2h0IHNoaWZ0ZWQgMTAgYml0cyBzbyB0aGF0IHRoZXkgd2lsbCBhbGwgZml0IHdpdGhpbgorICogIGFuIDE2LWJpdCBpbnRlZ2VyLiBUbyBnZXQgdGhlIGFjdHVhbCBmbGFzaCBkZW5zaXR5LCB5b3UgbXVzdCBsZWZ0IHNoaWZ0IHRoZSBsb29rZWQgdXAgdmFsdWUKKyAqICBieSAxMCBiaXRzLgorICoKKyAqICBFbGVtZW50cyBvZiB0aGlzIHRhYmxlIGhhdmUgYSB2YWx1ZSBvZiAwIGluIGNhc2VzIHdoZXJlIHRoZSBQRlNJWkUgYml0ZmllbGQgdmFsdWUgaXMKKyAqICByZXNlcnZlZC4KKyAqCisgKiAgQ29kZSB0byB1c2UgdGhlIHRhYmxlOgorICogIEBjb2RlCisgKiAgICAgIHVpbnQ4X3QgcGZzaXplID0gKFNJTS0+RkNGRzEgJiBTSU1fRkNGRzFfUEZTSVpFX01BU0spID4+IFNJTV9GQ0ZHMV9QRlNJWkVfU0hJRlQ7CisgKiAgICAgIGZsYXNoRGVuc2l0eSA9ICgodWludDMyX3Qpa1BGbGFzaERlbnNpdGllc1twZnNpemVdKSA8PCAxMDsKKyAqICBAZW5kY29kZQorICovCisjaWYgKEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEUgPT0gRkxBU0hfTUVNT1JZX1NJWkVfRU5DT0RJTkdfUlVMRV9LMV8yKQorY29uc3QgdWludDE2X3Qga1BGbGFzaERlbnNpdGllc1tdID0geworICAgIDgsICAgIC8qIDB4MCAtIDgxOTIsIDhLQiAqLworICAgIDE2LCAgIC8qIDB4MSAtIDE2Mzg0LCAxNktCICovCisgICAgMjQsICAgLyogMHgyIC0gMjQ1NzYsIDI0S0IgKi8KKyAgICAzMiwgICAvKiAweDMgLSAzMjc2OCwgMzJLQiAqLworICAgIDQ4LCAgIC8qIDB4NCAtIDQ5MTUyLCA0OEtCICovCisgICAgNjQsICAgLyogMHg1IC0gNjU1MzYsIDY0S0IgKi8KKyAgICA5NiwgICAvKiAweDYgLSA5ODMwNCwgOTZLQiAqLworICAgIDEyOCwgIC8qIDB4NyAtIDEzMTA3MiwgMTI4S0IgKi8KKyAgICAxOTIsICAvKiAweDggLSAxOTY2MDgsIDE5MktCICovCisgICAgMjU2LCAgLyogMHg5IC0gMjYyMTQ0LCAyNTZLQiAqLworICAgIDM4NCwgIC8qIDB4YSAtIDM5MzIxNiwgMzg0S0IgKi8KKyAgICA1MTIsICAvKiAweGIgLSA1MjQyODgsIDUxMktCICovCisgICAgNzY4LCAgLyogMHhjIC0gNzg2NDMyLCA3NjhLQiAqLworICAgIDEwMjQsIC8qIDB4ZCAtIDEwNDg1NzYsIDFNQiAqLworICAgIDE1MzYsIC8qIDB4ZSAtIDE1NzI4NjQsIDEuNU1CICovCisgICAgLyogMjA0OCwgIDB4ZiAtIDIwOTcxNTIsIDJNQiAqLworfTsKKyNlbGlmKEZMQVNIX01FTU9SWV9TSVpFX0VOQ09ESU5HX1JVTEUgPT0gRkxBU0hfTUVNT1JZX1NJWkVfRU5DT0RJTkdfUlVMRV9LMykKK2NvbnN0IHVpbnQxNl90IGtQRmxhc2hEZW5zaXRpZXNbXSA9IHsKKyAgICAwLCAgICAvKiAweDAgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDEgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDIgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDMgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDQgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDUgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDYgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDcgLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDggLSB1bmRlZmluZWQgKi8KKyAgICAwLCAgICAvKiAweDkgLSB1bmRlZmluZWQgKi8KKyAgICAyNTYsICAvKiAweGEgLSAyNjIxNDQsIDI1NktCICovCisgICAgMCwgICAgLyogMHhiIC0gdW5kZWZpbmVkICovCisgICAgMTAyNCwgLyogMHhjIC0gMTA0ODU3NiwgMU1CICovCisgICAgMCwgICAgLyogMHhkIC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHhlIC0gdW5kZWZpbmVkICovCisgICAgMCwgICAgLyogMHhmIC0gdW5kZWZpbmVkICovCit9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0dXNfdCBGTEFTSF9Jbml0KGZsYXNoX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRAorICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgeworLyogY2FsY3VsYXRlIHRoZSBmbGFzaCBkZW5zaXR5IGZyb20gU0lNX0ZDRkcxLlBGU0laRSAqLworI2lmIGRlZmluZWQoU0lNX0ZDRkcxX0NPUkUxX1BGU0laRV9NQVNLKQorICAgICAgICB1aW50MzJfdCBmbGFzaERlbnNpdHk7CisgICAgICAgIHVpbnQ4X3QgcGZzaXplID0gKFNJTS0+RkNGRzEgJiBTSU1fRkNGRzFfQ09SRTFfUEZTSVpFX01BU0spID4+IFNJTV9GQ0ZHMV9DT1JFMV9QRlNJWkVfU0hJRlQ7CisgICAgICAgIGlmIChwZnNpemUgPT0gMHhmKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFzaERlbnNpdHkgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9CTE9DS19DT1VOVCAqIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX0JMT0NLX1NJWkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmbGFzaERlbnNpdHkgPSAoKHVpbnQzMl90KWtQRmxhc2hEZW5zaXRpZXNbcGZzaXplXSkgPDwgMTA7CisgICAgICAgIH0KKyAgICAgICAgY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgPSBmbGFzaERlbnNpdHk7CisjZWxzZQorICAgICAgICAvKiBVbnVzZWQgY29kZSB0byBzb2x2ZSBNSVNSQS1DIGlzc3VlKi8KKyAgICAgICAgY29uZmlnLT5QRmxhc2hCbG9ja0Jhc2UgPSBrUEZsYXNoRGVuc2l0aWVzWzBdOworICAgICAgICBjb25maWctPlBGbGFzaFRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfQkxPQ0tfU0laRTsKKyNlbmRpZgorICAgICAgICBjb25maWctPlBGbGFzaEJsb2NrQmFzZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX1NUQVJUX0FERFJFU1M7CisgICAgICAgIGNvbmZpZy0+UEZsYXNoQmxvY2tDb3VudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF8xX0JMT0NLX0NPVU5UOworICAgICAgICBjb25maWctPlBGbGFzaFNlY3RvclNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9CTE9DS19TRUNUT1JfU0laRTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAqLworICAgIHsKKyAgICAgICAgdWludDMyX3QgZmxhc2hEZW5zaXR5OworCisvKiBjYWxjdWxhdGUgdGhlIGZsYXNoIGRlbnNpdHkgZnJvbSBTSU1fRkNGRzEuUEZTSVpFICovCisjaWYgZGVmaW5lZChTSU1fRkNGRzFfQ09SRTBfUEZTSVpFX01BU0spCisgICAgICAgIHVpbnQ4X3QgcGZzaXplID0gKFNJTS0+RkNGRzEgJiBTSU1fRkNGRzFfQ09SRTBfUEZTSVpFX01BU0spID4+IFNJTV9GQ0ZHMV9DT1JFMF9QRlNJWkVfU0hJRlQ7CisjZWxpZiBkZWZpbmVkKFNJTV9GQ0ZHMV9QRlNJWkVfTUFTSykKKyAgICAgICAgdWludDhfdCBwZnNpemUgPSAoU0lNLT5GQ0ZHMSAmIFNJTV9GQ0ZHMV9QRlNJWkVfTUFTSykgPj4gU0lNX0ZDRkcxX1BGU0laRV9TSElGVDsKKyNlbHNlCisjZXJyb3IgIlVua25vd24gZmxhc2ggc2l6ZSIKKyNlbmRpZgorICAgICAgICAvKiBQRlNJWkU9MHhmIG1lYW5zIHRoYXQgb24gY3VzdG9tZXIgcGFydHMgdGhlIElGUiB3YXMgbm90IGNvcnJlY3RseSBwcm9ncmFtbWVkLgorICAgICAgICAgKiBXZSBqdXN0IHVzZSB0aGUgcHJlLWRlZmluZWQgZmxhc2ggc2l6ZSBpbiBmZWF0dXJlIGZpbGUgaGVyZSB0byBzdXBwb3J0IHByZS1wcm9kdWN0aW9uIHBhcnRzICovCisgICAgICAgIGlmIChwZnNpemUgPT0gMHhmKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFzaERlbnNpdHkgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ09VTlQgKiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYXNoRGVuc2l0eSA9ICgodWludDMyX3Qpa1BGbGFzaERlbnNpdGllc1twZnNpemVdKSA8PCAxMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGZpbGwgb3V0IGEgZmV3IG9mIHRoZSBzdHJ1Y3R1cmUgbWVtYmVycyAqLworICAgICAgICBjb25maWctPlBGbGFzaEJsb2NrQmFzZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TVEFSVF9BRERSRVNTOworICAgICAgICBjb25maWctPlBGbGFzaFRvdGFsU2l6ZSA9IGZsYXNoRGVuc2l0eTsKKyAgICAgICAgY29uZmlnLT5QRmxhc2hCbG9ja0NvdW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UOworICAgICAgICBjb25maWctPlBGbGFzaFNlY3RvclNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0VDVE9SX1NJWkU7CisgICAgfQorCisgICAgeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9BQ0NFU1NfUkVHSVNURVIKKyAgICAgICAgaWYgKGNvbmZpZy0+Rmxhc2hNZW1vcnlJbmRleCA9PSAodWludDhfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLT5QRmxhc2hBY2Nlc3NTZWdtZW50U2l6ZSA9IGtGTEFTSF9BY2Nlc3NTZWdtZW50QmFzZSA8PCBGVEZ4LT5GQUNTU1M7CisgICAgICAgICAgICBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRDb3VudCA9IEZURngtPkZBQ1NOUzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLT5QRmxhc2hBY2Nlc3NTZWdtZW50U2l6ZSA9IGtGTEFTSF9BY2Nlc3NTZWdtZW50QmFzZSA8PCBGVEZ4LT5GQUNTUzsKKyAgICAgICAgICAgIGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudENvdW50ID0gRlRGeC0+RkFDU047CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudFNpemUgPSAwOworICAgICAgICBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRDb3VudCA9IDA7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MICovCisgICAgfQorCisgICAgY29uZmlnLT5QRmxhc2hDYWxsYmFjayA9IE5VTEw7CisKKy8qIGNvcHkgcmVxdWlyZWQgZmxhc2ggY29tbWFuZHMgdG8gUkFNICovCisjaWYgKEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAhRkxBU0hfRFJJVkVSX0lTX0VYUE9SVEVEKQorICAgIGlmIChrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgIT0gZmxhc2hfY2hlY2tfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25faW5mbyhjb25maWcpKQorICAgIHsKKyAgICAgICAgc19mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mby5hY3RpdmVGdW5jdGlvbkNvdW50ID0gMDsKKyAgICAgICAgc19mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mby5mbGFzaFJ1bkNvbW1hbmQgPSBzX2ZsYXNoUnVuQ29tbWFuZDsKKyAgICAgICAgc19mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mby5mbGFzaENvbW1vbkJpdE9wZXJhdGlvbiA9IHNfZmxhc2hDb21tb25CaXRPcGVyYXRpb247CisgICAgICAgIGNvbmZpZy0+Zmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8gPSAmc19mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mby5hY3RpdmVGdW5jdGlvbkNvdW50OworICAgICAgICBGTEFTSF9QcmVwYXJlRXhlY3V0ZUluUmFtRnVuY3Rpb25zKGNvbmZpZyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25maWctPkZsZXhSQU1CbG9ja0Jhc2UgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX1JBTV9TVEFSVF9BRERSRVNTOworICAgIGNvbmZpZy0+RmxleFJBTVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfUkFNX1NJWkU7CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisgICAgeworICAgICAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworICAgICAgICBjb25maWctPkRGbGFzaEJsb2NrQmFzZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1NUQVJUX0FERFJFU1M7CisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF91cGRhdGVfZmxleG52bV9tZW1vcnlfcGFydGl0aW9uX3N0YXR1cyhjb25maWcpOworICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCitzdGF0dXNfdCBGTEFTSF9TZXRDYWxsYmFjayhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9jYWxsYmFja190IGNhbGxiYWNrKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBjb25maWctPlBGbGFzaENhbGxiYWNrID0gY2FsbGJhY2s7CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCitzdGF0dXNfdCBGTEFTSF9QcmVwYXJlRXhlY3V0ZUluUmFtRnVuY3Rpb25zKGZsYXNoX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uZmlnX3QgKmZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvOworCisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvID0gKGZsYXNoX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2NvbmZpZ190ICopY29uZmlnLT5mbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbzsKKworICAgIGNvcHlfZmxhc2hfcnVuX2NvbW1hbmQoZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8tPmZsYXNoUnVuQ29tbWFuZCk7CisgICAgY29weV9mbGFzaF9jb21tb25fYml0X29wZXJhdGlvbihmbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mby0+Zmxhc2hDb21tb25CaXRPcGVyYXRpb24pOworICAgIGZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvLT5hY3RpdmVGdW5jdGlvbkNvdW50ID0ga0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uVG90YWxOdW07CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCitzdGF0dXNfdCBGTEFTSF9FcmFzZUFsbChmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBrZXkpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gZXJhc2UgYWxsIGZsYXNoIGJsb2NrcyAqLworICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfRVJBU0VfQUxMX0JMT0NLLCAweEZGRkZGRlUpOworCisgICAgLyogVmFsaWRhdGUgdGhlIHVzZXIga2V5ICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3VzZXJfa2V5KGtleSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGNvbmZpZywga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlKTsKKworICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgIGZsYXNoX2NhY2hlX2NsZWFyKGNvbmZpZyk7CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisgICAgLyogRGF0YSBmbGFzaCBJRlIgd2lsbCBiZSBlcmFzZWQgYnkgZXJhc2UgYWxsIGNvbW1hbmQsIHNvIHdlIG5lZWQgdG8KKyAgICAgKiAgdXBkYXRlIEZsZXhOVk0gbWVtb3J5IHBhcnRpdGlvbiBzdGF0dXMgc3luY2hyb25vdXNseSAqLworICAgIGlmIChyZXR1cm5Db2RlID09IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF91cGRhdGVfZmxleG52bV9tZW1vcnlfcGFydGl0aW9uX3N0YXR1cyhjb25maWcpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisKK3N0YXR1c190IEZMQVNIX0VyYXNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCB1aW50MzJfdCBrZXkpCit7CisgICAgdWludDMyX3Qgc2VjdG9yU2l6ZTsKKyAgICBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QgZmxhc2hPcGVyYXRpb25JbmZvOworICAgIHVpbnQzMl90IGVuZEFkZHJlc3M7ICAgICAgLyogc3RvcmluZyBlbmQgYWRkcmVzcyAqLworICAgIHVpbnQzMl90IG51bWJlck9mU2VjdG9yczsgLyogbnVtYmVyIG9mIHNlY3RvcnMgY2FsY3VsYXRlZCBieSBlbmRBZGRyZXNzICovCisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworCisgICAgLyogQ2hlY2sgdGhlIHN1cHBsaWVkIGFkZHJlc3MgcmFuZ2UuICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3JhbmdlKGNvbmZpZywgc3RhcnQsIGxlbmd0aEluQnl0ZXMsIGZsYXNoT3BlcmF0aW9uSW5mby5zZWN0b3JDbWRBZGRyZXNzQWxpZ21lbnQpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgLyogVmFsaWRhdGUgdGhlIHVzZXIga2V5ICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3VzZXJfa2V5KGtleSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBzdGFydCA9IGZsYXNoT3BlcmF0aW9uSW5mby5jb252ZXJ0ZWRBZGRyZXNzOworICAgIHNlY3RvclNpemUgPSBmbGFzaE9wZXJhdGlvbkluZm8uYWN0aXZlU2VjdG9yU2l6ZTsKKworICAgIC8qIGNhbGN1bGF0aW5nIEZsYXNoIGVuZCBhZGRyZXNzICovCisgICAgZW5kQWRkcmVzcyA9IHN0YXJ0ICsgbGVuZ3RoSW5CeXRlcyAtIDE7CisKKyAgICAvKiByZS1jYWxjdWxhdGUgdGhlIGVuZEFkZHJlc3MgYW5kIGFsaWduIGl0IHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzZWN0b3IKKyAgICAgKiB3aGljaCB3aWxsIGJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gYmVsb3cgKi8KKyAgICBpZiAoZW5kQWRkcmVzcyAlIHNlY3RvclNpemUpCisgICAgeworICAgICAgICBudW1iZXJPZlNlY3RvcnMgPSBlbmRBZGRyZXNzIC8gc2VjdG9yU2l6ZSArIDE7CisgICAgICAgIGVuZEFkZHJlc3MgPSBudW1iZXJPZlNlY3RvcnMgKiBzZWN0b3JTaXplIC0gMTsKKyAgICB9CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGNvbmZpZywga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlKTsKKworICAgIC8qIHRoZSBzdGFydCBhZGRyZXNzIHdpbGwgaW5jcmVtZW50IHRvIHRoZSBuZXh0IHNlY3RvciBhZGRyZXNzCisgICAgICogdW50aWwgaXQgcmVhY2hlcyB0aGUgZW5kQWRkZHJlc3MgKi8KKyAgICB3aGlsZSAoc3RhcnQgPD0gZW5kQWRkcmVzcykKKyAgICB7CisgICAgICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byBlcmFzZSBhIGZsYXNoIGJsb2NrICovCisgICAgICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfRVJBU0VfU0VDVE9SLCBzdGFydCk7CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgICAgICAvKiBjYWxsaW5nIGZsYXNoIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworICAgICAgICBpZiAoY29uZmlnLT5QRmxhc2hDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLT5QRmxhc2hDYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2tpbmcgdGhlIHN1Y2Nlc3Mgb2YgY29tbWFuZCBleGVjdXRpb24gKi8KKyAgICAgICAgaWYgKGtTdGF0dXNfRkxBU0hfU3VjY2VzcyAhPSByZXR1cm5Db2RlKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEluY3JlbWVudCB0byB0aGUgbmV4dCBzZWN0b3IgKi8KKyAgICAgICAgICAgIHN0YXJ0ICs9IHNlY3RvclNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworCisgICAgcmV0dXJuIChyZXR1cm5Db2RlKTsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfVU5TRUNVUkVfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfQUxMX0JMT0NLU19VTlNFQ1VSRV9DTUQKK3N0YXR1c190IEZMQVNIX0VyYXNlQWxsVW5zZWN1cmUoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qga2V5KQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogUHJlcGFyZSBwYXNzaW5nIHBhcmFtZXRlciB0byBlcmFzZSBhbGwgZmxhc2ggYmxvY2tzICh1bnNlY3VyZSkuICovCisgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9FUkFTRV9BTExfQkxPQ0tfVU5TRUNVUkUsIDB4RkZGRkZGVSk7CisKKyAgICAvKiBWYWxpZGF0ZSB0aGUgdXNlciBrZXkgKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfdXNlcl9rZXkoa2V5KTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoY29uZmlnLCBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQcmUpOworCisgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKKyAgICAvKiBEYXRhIGZsYXNoIElGUiB3aWxsIGJlIGVyYXNlZCBieSBlcmFzZSBhbGwgdW5zZWN1cmUgY29tbWFuZCwgc28gd2UgbmVlZCB0bworICAgICAqICB1cGRhdGUgRmxleE5WTSBtZW1vcnkgcGFydGl0aW9uIHN0YXR1cyBzeW5jaHJvbm91c2x5ICovCisgICAgaWYgKHJldHVybkNvZGUgPT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX3VwZGF0ZV9mbGV4bnZtX21lbW9yeV9wYXJ0aXRpb25fc3RhdHVzKGNvbmZpZyk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gcmV0dXJuQ29kZTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfQUxMX0JMT0NLU19VTlNFQ1VSRV9DTUQgKi8KKworc3RhdHVzX3QgRkxBU0hfRXJhc2VBbGxFeGVjdXRlT25seVNlZ21lbnRzKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGtleSkKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworCisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byBlcmFzZSBhbGwgZXhlY3V0ZS1vbmx5IHNlZ21lbnRzCisgICAgICogMXN0IGVsZW1lbnQgZm9yIHRoZSBGQ0NPQiByZWdpc3RlciAqLworICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfRVJBU0VfQUxMX0VYRUNVVEVfT05MWV9TRUdNRU5ULCAweEZGRkZGRlUpOworCisgICAgLyogVmFsaWRhdGUgdGhlIHVzZXIga2V5ICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3VzZXJfa2V5KGtleSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGNvbmZpZywga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlKTsKKworICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgIGZsYXNoX2NhY2hlX2NsZWFyKGNvbmZpZyk7CisKKyAgICByZXR1cm4gcmV0dXJuQ29kZTsKK30KKworc3RhdHVzX3QgRkxBU0hfUHJvZ3JhbShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcykKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworICAgIGZsYXNoX29wZXJhdGlvbl9jb25maWdfdCBmbGFzaE9wZXJhdGlvbkluZm87CisKKyAgICBpZiAoc3JjID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oY29uZmlnLCBzdGFydCwgJmZsYXNoT3BlcmF0aW9uSW5mbyk7CisKKyAgICAvKiBDaGVjayB0aGUgc3VwcGxpZWQgYWRkcmVzcyByYW5nZS4gKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfcmFuZ2UoY29uZmlnLCBzdGFydCwgbGVuZ3RoSW5CeXRlcywgZmxhc2hPcGVyYXRpb25JbmZvLmJsb2NrV3JpdGVVbml0U2l6ZSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICBzdGFydCA9IGZsYXNoT3BlcmF0aW9uSW5mby5jb252ZXJ0ZWRBZGRyZXNzOworCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICB3aGlsZSAobGVuZ3RoSW5CeXRlcyA+IDApCisgICAgeworICAgICAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gcHJvZ3JhbSB0aGUgZmxhc2ggYmxvY2sgKi8KKyAgICAgICAga0ZDQ09CeFsxXSA9ICpzcmMrKzsKKyAgICAgICAgaWYgKDQgPT0gZmxhc2hPcGVyYXRpb25JbmZvLmJsb2NrV3JpdGVVbml0U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9QUk9HUkFNX0xPTkdXT1JELCBzdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoOCA9PSBmbGFzaE9wZXJhdGlvbkluZm8uYmxvY2tXcml0ZVVuaXRTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBrRkNDT0J4WzJdID0gKnNyYysrOworICAgICAgICAgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9QUk9HUkFNX1BIUkFTRSwgc3RhcnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgICAgICAvKiBjYWxsaW5nIGZsYXNoIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworICAgICAgICBpZiAoY29uZmlnLT5QRmxhc2hDYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgY29uZmlnLT5QRmxhc2hDYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2tpbmcgZm9yIHRoZSBzdWNjZXNzIG9mIGNvbW1hbmQgZXhlY3V0aW9uICovCisgICAgICAgIGlmIChrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgIT0gcmV0dXJuQ29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiB1cGRhdGUgc3RhcnQgYWRkcmVzcyBmb3IgbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgICAgICAgIHN0YXJ0ICs9IGZsYXNoT3BlcmF0aW9uSW5mby5ibG9ja1dyaXRlVW5pdFNpemU7CisKKyAgICAgICAgICAgIC8qIHVwZGF0ZSBsZW5ndGhJbkJ5dGVzIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgICAgICAgbGVuZ3RoSW5CeXRlcyAtPSBmbGFzaE9wZXJhdGlvbkluZm8uYmxvY2tXcml0ZVVuaXRTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisKK3N0YXR1c190IEZMQVNIX1Byb2dyYW1PbmNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCAqc3JjLCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzKQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAoc3JjID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHBhc3MgcGFyYW10ZXJzIHRvIEZURnggKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8yKEZURnhfUFJPR1JBTV9PTkNFLCBpbmRleCwgMHhGRkZGVSk7CisKKyAgICBrRkNDT0J4WzFdID0gKnNyYzsKKworLyogTm90ZTogSGF2ZSB0byBzZXBlcmF0ZSB0aGUgZmlyc3QgaW5kZXggZnJvbSB0aGUgcmVzdCBpZiBpdCBlcXVhbHMgMAorICogdG8gYXZvaWQgYSBwb2ludGxlc3MgY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBpbnQgdG8gMCBjb21waWxlciB3YXJuaW5nICovCisjaWYgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzhCWVRFU19VTklUX1NVUFBPUlQKKyNpZiBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfNEJZVEVTX1VOSVRfU1VQUE9SVAorICAgIGlmICgoKGluZGV4ID09IEZMQVNIX1BST0dSQU1fT05DRV9NSU5fSURfOEJZVEVTKSB8fAorICAgICAgICAgLyogUmFuZ2UgY2hlY2sgKi8KKyAgICAgICAgICgoaW5kZXggPj0gRkxBU0hfUFJPR1JBTV9PTkNFX01JTl9JRF84QllURVMgKyAxKSAmJiAoaW5kZXggPD0gRkxBU0hfUFJPR1JBTV9PTkNFX01BWF9JRF84QllURVMpKSkgJiYKKyAgICAgICAgKGxlbmd0aEluQnl0ZXMgPT0gOCkpCisjZW5kaWYgLyogRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzRCWVRFU19VTklUX1NVUFBPUlQgKi8KKyAgICB7CisgICAgICAgIGtGQ0NPQnhbMl0gPSAqKHNyYyArIDEpOworICAgIH0KKyNlbmRpZiAvKiBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfOEJZVEVTX1VOSVRfU1VQUE9SVCAqLworCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1NFQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9TRUNUSU9OX0NNRAorc3RhdHVzX3QgRkxBU0hfUHJvZ3JhbVNlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90ICpzcmMsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyAgICB1aW50MzJfdCBzZWN0b3JTaXplOworICAgIGZsYXNoX29wZXJhdGlvbl9jb25maWdfdCBmbGFzaE9wZXJhdGlvbkluZm87CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01ECisgICAgYm9vbCBuZWVkU3dpdGNoRmxleFJhbU1vZGUgPSBmYWxzZTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EICovCisKKyAgICBpZiAoc3JjID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oY29uZmlnLCBzdGFydCwgJmZsYXNoT3BlcmF0aW9uSW5mbyk7CisKKyAgICAvKiBDaGVjayB0aGUgc3VwcGxpZWQgYWRkcmVzcyByYW5nZS4gKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfcmFuZ2UoY29uZmlnLCBzdGFydCwgbGVuZ3RoSW5CeXRlcywgZmxhc2hPcGVyYXRpb25JbmZvLnNlY3Rpb25DbWRBZGRyZXNzQWxpZ21lbnQpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgc3RhcnQgPSBmbGFzaE9wZXJhdGlvbkluZm8uY29udmVydGVkQWRkcmVzczsKKyAgICBzZWN0b3JTaXplID0gZmxhc2hPcGVyYXRpb25JbmZvLmFjdGl2ZVNlY3RvclNpemU7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQKKyAgICAvKiBTd2l0Y2ggZnVuY3Rpb24gb2YgRmxleFJBTSBpZiBuZWVkZWQgKi8KKyAgICBpZiAoIShGVEZ4LT5GQ05GRyAmIEZURnhfRkNORkdfUkFNUkRZX01BU0spKQorICAgIHsKKyAgICAgICAgbmVlZFN3aXRjaEZsZXhSYW1Nb2RlID0gdHJ1ZTsKKworICAgICAgICByZXR1cm5Db2RlID0gRkxBU0hfU2V0RmxleHJhbUZ1bmN0aW9uKGNvbmZpZywga0ZMQVNIX0ZsZXhyYW1GdW5jdGlvbk9wdGlvbkF2YWlsYWJsZUFzUmFtKTsKKyAgICAgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TZXRGbGV4cmFtQXNSYW1FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EICovCisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcl9wcm9jZXNzKGNvbmZpZywga0ZMQVNIX0NhY2hlQ2xlYXJQcm9jZXNzUHJlKTsKKworICAgIHdoaWxlIChsZW5ndGhJbkJ5dGVzID4gMCkKKyAgICB7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgd3JpdGUgb3BlcmF0aW9uIGRvZXNuJ3Qgc3BhbiB0d28gc2VjdG9ycyAqLworICAgICAgICB1aW50MzJfdCBlbmRBZGRyZXNzT2ZDdXJyZW50U2VjdG9yID0gQUxJR05fVVAoc3RhcnQsIHNlY3RvclNpemUpOworICAgICAgICB1aW50MzJfdCBsZW5ndGhUb2JlUHJvZ3JhbW1lZE9mQ3VycmVudFNlY3RvcjsKKyAgICAgICAgdWludDMyX3QgY3VycmVudE9mZnNldCA9IDA7CisKKyAgICAgICAgaWYgKGVuZEFkZHJlc3NPZkN1cnJlbnRTZWN0b3IgPT0gc3RhcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuZEFkZHJlc3NPZkN1cnJlbnRTZWN0b3IgKz0gc2VjdG9yU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZW5ndGhJbkJ5dGVzICsgc3RhcnQgPiBlbmRBZGRyZXNzT2ZDdXJyZW50U2VjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGhUb2JlUHJvZ3JhbW1lZE9mQ3VycmVudFNlY3RvciA9IGVuZEFkZHJlc3NPZkN1cnJlbnRTZWN0b3IgLSBzdGFydDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aFRvYmVQcm9ncmFtbWVkT2ZDdXJyZW50U2VjdG9yID0gbGVuZ3RoSW5CeXRlczsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFByb2dyYW0gQ3VycmVudCBTZWN0b3IgKi8KKyAgICAgICAgd2hpbGUgKGxlbmd0aFRvYmVQcm9ncmFtbWVkT2ZDdXJyZW50U2VjdG9yID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBwcm9ncmFtIHNpemUgZG9lc24ndCBleGNlZWRzIEFjY2VsZXJhdGlvbiBSQU0gc2l6ZSAqLworICAgICAgICAgICAgdWludDMyX3QgcHJvZ3JhbVNpemVPZkN1cnJlbnRQYXNzOworICAgICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZQaGFzZXM7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGhUb2JlUHJvZ3JhbW1lZE9mQ3VycmVudFNlY3RvciA+IGtGTEFTSF9BY2NlbGVyYXRpb25SYW1TaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByb2dyYW1TaXplT2ZDdXJyZW50UGFzcyA9IGtGTEFTSF9BY2NlbGVyYXRpb25SYW1TaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByb2dyYW1TaXplT2ZDdXJyZW50UGFzcyA9IGxlbmd0aFRvYmVQcm9ncmFtbWVkT2ZDdXJyZW50U2VjdG9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDb3B5IGRhdGEgdG8gRmxleFJBTSAqLworICAgICAgICAgICAgbWVtY3B5KCh2b2lkICopRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9SQU1fU1RBUlRfQUREUkVTUywgc3JjICsgY3VycmVudE9mZnNldCAvIDQsIHByb2dyYW1TaXplT2ZDdXJyZW50UGFzcyk7CisgICAgICAgICAgICAvKiBTZXQgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGF0YSB0byBiZSBwcm9ncmFtbWVkICovCisgICAgICAgICAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X1BST0dSQU1fU0VDVElPTiwgc3RhcnQgKyBjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgICAgIC8qIFNldCBwcm9ncmFtIHNpemUgaW4gdGVybXMgb2YgRkVBVFVSRV9GTEFTSF9TRUNUSU9OX0NNRF9BRERSRVNTX0FMSUdNRU5UICovCisgICAgICAgICAgICBudW1iZXJPZlBoYXNlcyA9IHByb2dyYW1TaXplT2ZDdXJyZW50UGFzcyAvIGZsYXNoT3BlcmF0aW9uSW5mby5zZWN0aW9uQ21kQWRkcmVzc0FsaWdtZW50OworCisgICAgICAgICAgICBrRkNDT0J4WzFdID0gQllURVNfSk9JTl9UT19XT1JEXzJfMihudW1iZXJPZlBoYXNlcywgMHhGRkZGVSk7CisKKyAgICAgICAgICAgIC8qIFBlZm9ybSBjb21tYW5kIHNlcXVlbmNlICovCisgICAgICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgICAgICAgICAvKiBjYWxsaW5nIGZsYXNoIGNhbGxiYWNrIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgaWYgKGNvbmZpZy0+UEZsYXNoQ2FsbGJhY2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uZmlnLT5QRmxhc2hDYWxsYmFjaygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhc2hfY2FjaGVfY2xlYXIoY29uZmlnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVuZ3RoVG9iZVByb2dyYW1tZWRPZkN1cnJlbnRTZWN0b3IgLT0gcHJvZ3JhbVNpemVPZkN1cnJlbnRQYXNzOworICAgICAgICAgICAgY3VycmVudE9mZnNldCArPSBwcm9ncmFtU2l6ZU9mQ3VycmVudFBhc3M7CisgICAgICAgIH0KKworICAgICAgICBzcmMgKz0gY3VycmVudE9mZnNldCAvIDQ7CisgICAgICAgIHN0YXJ0ICs9IGN1cnJlbnRPZmZzZXQ7CisgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gY3VycmVudE9mZnNldDsKKyAgICB9CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01ECisgICAgLyogUmVzdG9yZSBmdW5jdGlvbiBvZiBGbGV4UkFNIGlmIG5lZWRlZC4gKi8KKyAgICBpZiAobmVlZFN3aXRjaEZsZXhSYW1Nb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1NldEZsZXhyYW1GdW5jdGlvbihjb25maWcsIGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVGb3JFZXByb20pOworICAgICAgICBpZiAocmV0dXJuQ29kZSAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1JlY292ZXJGbGV4cmFtQXNFZXByb21FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EICovCisKKyAgICByZXR1cm4gcmV0dXJuQ29kZTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9TRUNUSU9OX0NNRCAqLworCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRWVwcm9tV3JpdGUoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQ4X3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcykKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworICAgIGJvb2wgbmVlZFN3aXRjaEZsZXhSYW1Nb2RlID0gZmFsc2U7CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogVmFsaWRhdGVzIHRoZSByYW5nZSBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyAqLworICAgIGlmICgoc3RhcnQgPCBjb25maWctPkZsZXhSQU1CbG9ja0Jhc2UpIHx8CisgICAgICAgICgoc3RhcnQgKyBsZW5ndGhJbkJ5dGVzKSA+IChjb25maWctPkZsZXhSQU1CbG9ja0Jhc2UgKyBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yOworICAgIH0KKworICAgIHJldHVybkNvZGUgPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisKKyAgICAvKiBTd2l0Y2ggZnVuY3Rpb24gb2YgRmxleFJBTSBpZiBuZWVkZWQgKi8KKyAgICBpZiAoIShGVEZ4LT5GQ05GRyAmIEZURnhfRkNORkdfRUVFUkRZX01BU0spKQorICAgIHsKKyAgICAgICAgbmVlZFN3aXRjaEZsZXhSYW1Nb2RlID0gdHJ1ZTsKKworICAgICAgICByZXR1cm5Db2RlID0gRkxBU0hfU2V0RmxleHJhbUZ1bmN0aW9uKGNvbmZpZywga0ZMQVNIX0ZsZXhyYW1GdW5jdGlvbk9wdGlvbkF2YWlsYWJsZUZvckVlcHJvbSk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU2V0RmxleHJhbUFzRWVwcm9tRXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXcml0ZSBkYXRhIHRvIEZsZXhSQU0gd2hlbiBpdCBpcyB1c2VkIGFzIEVFUFJPTSBlbXVsYXRvciAqLworICAgIHdoaWxlIChsZW5ndGhJbkJ5dGVzID4gMCkKKyAgICB7CisgICAgICAgIGlmICgoIShzdGFydCAmIDB4M1UpKSAmJiAobGVuZ3RoSW5CeXRlcyA+PSA0KSkKKyAgICAgICAgeworICAgICAgICAgICAgKih1aW50MzJfdCAqKXN0YXJ0ID0gKih1aW50MzJfdCAqKXNyYzsKKyAgICAgICAgICAgIHN0YXJ0ICs9IDQ7CisgICAgICAgICAgICBzcmMgKz0gNDsKKyAgICAgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoIShzdGFydCAmIDB4MVUpKSAmJiAobGVuZ3RoSW5CeXRlcyA+PSAyKSkKKyAgICAgICAgeworICAgICAgICAgICAgKih1aW50MTZfdCAqKXN0YXJ0ID0gKih1aW50MTZfdCAqKXNyYzsKKyAgICAgICAgICAgIHN0YXJ0ICs9IDI7CisgICAgICAgICAgICBzcmMgKz0gMjsKKyAgICAgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICoodWludDhfdCAqKXN0YXJ0ID0gKnNyYzsKKyAgICAgICAgICAgIHN0YXJ0ICs9IDE7CisgICAgICAgICAgICBzcmMgKz0gMTsKKyAgICAgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gMTsKKyAgICAgICAgfQorICAgICAgICAvKiBXYWl0IHRpbGwgRUVFUkRZIGJpdCBpcyBzZXQgKi8KKyAgICAgICAgd2hpbGUgKCEoRlRGeC0+RkNORkcgJiBGVEZ4X0ZDTkZHX0VFRVJEWV9NQVNLKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIHByb3RlY3Rpb24gdmlvbGF0aW9uIGVycm9yICovCisgICAgICAgIGlmIChGVEZ4LT5GU1RBVCAmIEZURnhfRlNUQVRfRlBWSU9MX01BU0spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggZnVuY3Rpb24gb2YgRmxleFJBTSBpZiBuZWVkZWQgKi8KKyAgICBpZiAobmVlZFN3aXRjaEZsZXhSYW1Nb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1NldEZsZXhyYW1GdW5jdGlvbihjb25maWcsIGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVBc1JhbSk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfUmVjb3ZlckZsZXhyYW1Bc1JhbUVycm9yOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisjZW5kaWYgLyogRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRAorc3RhdHVzX3QgRkxBU0hfUmVhZFJlc291cmNlKAorICAgIGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCAqZHN0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCBmbGFzaF9yZWFkX3Jlc291cmNlX29wdGlvbl90IG9wdGlvbikKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworICAgIGZsYXNoX29wZXJhdGlvbl9jb25maWdfdCBmbGFzaE9wZXJhdGlvbkluZm87CisKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAoZHN0ID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGZsYXNoX2dldF9tYXRjaGVkX29wZXJhdGlvbl9pbmZvKGNvbmZpZywgc3RhcnQsICZmbGFzaE9wZXJhdGlvbkluZm8pOworCisgICAgLyogQ2hlY2sgdGhlIHN1cHBsaWVkIGFkZHJlc3MgcmFuZ2UuICovCisgICAgcmV0dXJuQ29kZSA9CisgICAgICAgIGZsYXNoX2NoZWNrX3Jlc291cmNlX3JhbmdlKHN0YXJ0LCBsZW5ndGhJbkJ5dGVzLCBmbGFzaE9wZXJhdGlvbkluZm8ucmVzb3VyY2VDbWRBZGRyZXNzQWxpZ21lbnQsIG9wdGlvbik7CisgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgd2hpbGUgKGxlbmd0aEluQnl0ZXMgPiAwKQorICAgIHsKKyAgICAgICAgLyogcHJlcGFyaW5nIHBhc3NpbmcgcGFyYW1ldGVyICovCisgICAgICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfUkVBRF9SRVNPVVJDRSwgc3RhcnQpOworICAgICAgICBpZiAoZmxhc2hPcGVyYXRpb25JbmZvLnJlc291cmNlQ21kQWRkcmVzc0FsaWdtZW50ID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGtGQ0NPQnhbMl0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKG9wdGlvbiwgMHhGRkZGRkZVKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFzaE9wZXJhdGlvbkluZm8ucmVzb3VyY2VDbWRBZGRyZXNzQWxpZ21lbnQgPT0gOCkKKyAgICAgICAgeworICAgICAgICAgICAga0ZDQ09CeFsxXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMob3B0aW9uLCAweEZGRkZGRlUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLyogY2FsbGluZyBmbGFzaCBjb21tYW5kIHNlcXVlbmNlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKKworICAgICAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzICE9IHJldHVybkNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogZmV0Y2ggZGF0YSAqLworICAgICAgICAqZHN0KysgPSBrRkNDT0J4WzFdOworICAgICAgICBpZiAoZmxhc2hPcGVyYXRpb25JbmZvLnJlc291cmNlQ21kQWRkcmVzc0FsaWdtZW50ID09IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkc3QrKyA9IGtGQ0NPQnhbMl07CisgICAgICAgIH0KKyAgICAgICAgLyogdXBkYXRlIHN0YXJ0IGFkZHJlc3MgZm9yIG5leHQgaXRlcmF0aW9uICovCisgICAgICAgIHN0YXJ0ICs9IGZsYXNoT3BlcmF0aW9uSW5mby5yZXNvdXJjZUNtZEFkZHJlc3NBbGlnbWVudDsKKyAgICAgICAgLyogdXBkYXRlIGxlbmd0aEluQnl0ZXMgZm9yIG5leHQgaXRlcmF0aW9uICovCisgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gZmxhc2hPcGVyYXRpb25JbmZvLnJlc291cmNlQ21kQWRkcmVzc0FsaWdtZW50OworICAgIH0KKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01EICovCisKK3N0YXR1c190IEZMQVNIX1JlYWRPbmNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCAqZHN0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzKQoreworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAoZHN0ID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHBhc3MgcGFyYW10ZXJzIHRvIEZURnggKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8yKEZURnhfUkVBRF9PTkNFLCBpbmRleCwgMHhGRkZGVSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzID09IHJldHVybkNvZGUpCisgICAgeworICAgICAgICAqZHN0ID0ga0ZDQ09CeFsxXTsKKy8qIE5vdGU6IEhhdmUgdG8gc2VwZXJhdGUgdGhlIGZpcnN0IGluZGV4IGZyb20gdGhlIHJlc3QgaWYgaXQgZXF1YWxzIDAKKyAqICAgICAgIHRvIGF2b2lkIGEgcG9pbnRsZXNzIGNvbXBhcmlzb24gb2YgdW5zaWduZWQgaW50IHRvIDAgY29tcGlsZXIgd2FybmluZyAqLworI2lmIEZMQVNIX1BST0dSQU1fT05DRV9JU184QllURVNfVU5JVF9TVVBQT1JUCisjaWYgRkxBU0hfUFJPR1JBTV9PTkNFX0lTXzRCWVRFU19VTklUX1NVUFBPUlQKKyAgICAgICAgaWYgKCgoaW5kZXggPT0gRkxBU0hfUFJPR1JBTV9PTkNFX01JTl9JRF84QllURVMpIHx8CisgICAgICAgICAgICAgLyogUmFuZ2UgY2hlY2sgKi8KKyAgICAgICAgICAgICAoKGluZGV4ID49IEZMQVNIX1BST0dSQU1fT05DRV9NSU5fSURfOEJZVEVTICsgMSkgJiYgKGluZGV4IDw9IEZMQVNIX1BST0dSQU1fT05DRV9NQVhfSURfOEJZVEVTKSkpICYmCisgICAgICAgICAgICAobGVuZ3RoSW5CeXRlcyA9PSA4KSkKKyNlbmRpZiAvKiBGTEFTSF9QUk9HUkFNX09OQ0VfSVNfNEJZVEVTX1VOSVRfU1VQUE9SVCAqLworICAgICAgICB7CisgICAgICAgICAgICAqKGRzdCArIDEpID0ga0ZDQ09CeFsyXTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZMQVNIX1BST0dSQU1fT05DRV9JU184QllURVNfVU5JVF9TVVBQT1JUICovCisgICAgfQorCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisKK3N0YXR1c190IEZMQVNIX0dldFNlY3VyaXR5U3RhdGUoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfc2VjdXJpdHlfc3RhdGVfdCAqc3RhdGUpCit7CisgICAgLyogc3RvcmUgZGF0YSByZWFkIGZyb20gZmxhc2ggcmVnaXN0ZXIgKi8KKyAgICB1aW50OF90IHJlZ2lzdGVyVmFsdWU7CisKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAoc3RhdGUgPT0gTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogR2V0IGZsYXNoIHNlY3VyaXR5IHJlZ2lzdGVyIHZhbHVlICovCisgICAgcmVnaXN0ZXJWYWx1ZSA9IEZURngtPkZTRUM7CisKKyAgICAvKiBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBmbGFzaCBzZWN1cml0eSBiaXRzIGluIHRoZSBzZWN1cml0eSByZWdpc3RlciAqLworICAgIGlmIChGTEFTSF9TRUNVUklUWV9TVEFURV9VTlNFQ1VSRUQgPT0gKHJlZ2lzdGVyVmFsdWUgJiBGVEZ4X0ZTRUNfU0VDX01BU0spKQorICAgIHsKKyAgICAgICAgLyogRmxhc2ggaW4gdW5zZWN1cmVkIHN0YXRlICovCisgICAgICAgICpzdGF0ZSA9IGtGTEFTSF9TZWN1cml0eVN0YXRlTm90U2VjdXJlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBGbGFzaCBpbiBzZWN1cmVkIHN0YXRlCisgICAgICAgICAqIGNoZWNrIGZvciBiYWNrZG9vciBrZXkgc2VjdXJpdHkgZW5hYmxlIGJpdCAqLworICAgICAgICBpZiAoRkxBU0hfU0VDVVJJVFlfU1RBVEVfS0VZRU4gPT0gKHJlZ2lzdGVyVmFsdWUgJiBGVEZ4X0ZTRUNfS0VZRU5fTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEJhY2tkb29yIGtleSBzZWN1cml0eSBlbmFibGVkICovCisgICAgICAgICAgICAqc3RhdGUgPSBrRkxBU0hfU2VjdXJpdHlTdGF0ZUJhY2tkb29yRW5hYmxlZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEJhY2tkb29yIGtleSBzZWN1cml0eSBkaXNhYmxlZCAqLworICAgICAgICAgICAgKnN0YXRlID0ga0ZMQVNIX1NlY3VyaXR5U3RhdGVCYWNrZG9vckRpc2FibGVkOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpOworfQorCitzdGF0dXNfdCBGTEFTSF9TZWN1cml0eUJ5cGFzcyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBjb25zdCB1aW50OF90ICpiYWNrZG9vcktleSkKK3sKKyAgICB1aW50OF90IHJlZ2lzdGVyVmFsdWU7IC8qIHJlZ2lzdGVyVmFsdWUgKi8KKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOyAgIC8qIHJldHVybiBjb2RlIHZhcmlhYmxlICovCisKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAoYmFja2Rvb3JLZXkgPT0gTlVMTCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogc2V0IHRoZSBkZWZhdWx0IHJldHVybiBjb2RlIGFzIGtTdGF0dXNfU3VjY2VzcyAqLworICAgIHJldHVybkNvZGUgPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisKKyAgICAvKiBHZXQgZmxhc2ggc2VjdXJpdHkgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICByZWdpc3RlclZhbHVlID0gRlRGeC0+RlNFQzsKKworICAgIC8qIENoZWNrIHRvIHNlZSBpZiBmbGFzaCBpcyBpbiBzZWN1cmUgc3RhdGUgKGFueSBzdGF0ZSBvdGhlciB0aGFuIDB4MikKKyAgICAgKiBJZiBub3QsIHRoZW4gc2tpcCB0aGlzIHNpbmNlIGZsYXNoIGlzIG5vdCBzZWN1cmUgKi8KKyAgICBpZiAoMHgwMiAhPSAocmVnaXN0ZXJWYWx1ZSAmIDB4MDMpKQorICAgIHsKKyAgICAgICAgLyogcHJlcGFyaW5nIHBhc3NpbmcgcGFyYW1ldGVyIHRvIGVyYXNlIGEgZmxhc2ggYmxvY2sgKi8KKyAgICAgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMoRlRGeF9TRUNVUklUWV9CWV9QQVNTLCAweEZGRkZGRlUpOworICAgICAgICBrRkNDT0J4WzFdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8xXzEoYmFja2Rvb3JLZXlbMF0sIGJhY2tkb29yS2V5WzFdLCBiYWNrZG9vcktleVsyXSwgYmFja2Rvb3JLZXlbM10pOworICAgICAgICBrRkNDT0J4WzJdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8xXzEoYmFja2Rvb3JLZXlbNF0sIGJhY2tkb29yS2V5WzVdLCBiYWNrZG9vcktleVs2XSwgYmFja2Rvb3JLZXlbN10pOworCisgICAgICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisgICAgfQorCisgICAgcmV0dXJuIChyZXR1cm5Db2RlKTsKK30KKworc3RhdHVzX3QgRkxBU0hfVmVyaWZ5RXJhc2VBbGwoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBwcmVwYXJpbmcgcGFzc2luZyBwYXJhbWV0ZXIgdG8gdmVyaWZ5IGFsbCBibG9jayBjb21tYW5kICovCisgICAga0ZDQ09CeFswXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzFfMihGVEZ4X1ZFUklGWV9BTExfQkxPQ0ssIG1hcmdpbiwgMHhGRkZGVSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybiBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7Cit9CisKK3N0YXR1c190IEZMQVNIX1ZlcmlmeUVyYXNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCBmbGFzaF9tYXJnaW5fdmFsdWVfdCBtYXJnaW4pCit7CisgICAgLyogQ2hlY2sgYXJndW1lbnRzLiAqLworICAgIHVpbnQzMl90IGJsb2NrU2l6ZTsKKyAgICBmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QgZmxhc2hPcGVyYXRpb25JbmZvOworICAgIHVpbnQzMl90IG5leHRCbG9ja1N0YXJ0QWRkcmVzczsKKyAgICB1aW50MzJfdCByZW1haW5pbmdCeXRlczsKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworCisgICAgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oY29uZmlnLCBzdGFydCwgJmZsYXNoT3BlcmF0aW9uSW5mbyk7CisKKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfcmFuZ2UoY29uZmlnLCBzdGFydCwgbGVuZ3RoSW5CeXRlcywgZmxhc2hPcGVyYXRpb25JbmZvLnNlY3Rpb25DbWRBZGRyZXNzQWxpZ21lbnQpOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oY29uZmlnLCBzdGFydCwgJmZsYXNoT3BlcmF0aW9uSW5mbyk7CisgICAgc3RhcnQgPSBmbGFzaE9wZXJhdGlvbkluZm8uY29udmVydGVkQWRkcmVzczsKKyAgICBibG9ja1NpemUgPSBmbGFzaE9wZXJhdGlvbkluZm8uYWN0aXZlQmxvY2tTaXplOworCisgICAgbmV4dEJsb2NrU3RhcnRBZGRyZXNzID0gQUxJR05fVVAoc3RhcnQsIGJsb2NrU2l6ZSk7CisgICAgaWYgKG5leHRCbG9ja1N0YXJ0QWRkcmVzcyA9PSBzdGFydCkKKyAgICB7CisgICAgICAgIG5leHRCbG9ja1N0YXJ0QWRkcmVzcyArPSBibG9ja1NpemU7CisgICAgfQorCisgICAgcmVtYWluaW5nQnl0ZXMgPSBsZW5ndGhJbkJ5dGVzOworCisgICAgd2hpbGUgKHJlbWFpbmluZ0J5dGVzKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZQaHJhc2VzOworICAgICAgICB1aW50MzJfdCB2ZXJpZnlMZW5ndGggPSBuZXh0QmxvY2tTdGFydEFkZHJlc3MgLSBzdGFydDsKKyAgICAgICAgaWYgKHZlcmlmeUxlbmd0aCA+IHJlbWFpbmluZ0J5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICB2ZXJpZnlMZW5ndGggPSByZW1haW5pbmdCeXRlczsKKyAgICAgICAgfQorCisgICAgICAgIG51bWJlck9mUGhyYXNlcyA9IHZlcmlmeUxlbmd0aCAvIGZsYXNoT3BlcmF0aW9uSW5mby5zZWN0aW9uQ21kQWRkcmVzc0FsaWdtZW50OworCisgICAgICAgIC8qIEZpbGwgaW4gdmVyaWZ5IHNlY3Rpb24gY29tbWFuZCBwYXJhbWV0ZXJzLiAqLworICAgICAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X1ZFUklGWV9TRUNUSU9OLCBzdGFydCk7CisgICAgICAgIGtGQ0NPQnhbMV0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMl8xXzEobnVtYmVyT2ZQaHJhc2VzLCBtYXJnaW4sIDB4RkZVKTsKKworICAgICAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworICAgICAgICBpZiAocmV0dXJuQ29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgIH0KKworICAgICAgICByZW1haW5pbmdCeXRlcyAtPSB2ZXJpZnlMZW5ndGg7CisgICAgICAgIHN0YXJ0ICs9IHZlcmlmeUxlbmd0aDsKKyAgICAgICAgbmV4dEJsb2NrU3RhcnRBZGRyZXNzICs9IGJsb2NrU2l6ZTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCitzdGF0dXNfdCBGTEFTSF9WZXJpZnlQcm9ncmFtKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqZXhwZWN0ZWREYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9tYXJnaW5fdmFsdWVfdCBtYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpmYWlsZWRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZmFpbGVkRGF0YSkKK3sKKyAgICBzdGF0dXNfdCByZXR1cm5Db2RlOworICAgIGZsYXNoX29wZXJhdGlvbl9jb25maWdfdCBmbGFzaE9wZXJhdGlvbkluZm87CisKKyAgICBpZiAoZXhwZWN0ZWREYXRhID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgZmxhc2hfZ2V0X21hdGNoZWRfb3BlcmF0aW9uX2luZm8oY29uZmlnLCBzdGFydCwgJmZsYXNoT3BlcmF0aW9uSW5mbyk7CisKKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfcmFuZ2UoY29uZmlnLCBzdGFydCwgbGVuZ3RoSW5CeXRlcywgZmxhc2hPcGVyYXRpb25JbmZvLmNoZWNrQ21kQWRkcmVzc0FsaWdtZW50KTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIHN0YXJ0ID0gZmxhc2hPcGVyYXRpb25JbmZvLmNvbnZlcnRlZEFkZHJlc3M7CisKKyAgICB3aGlsZSAobGVuZ3RoSW5CeXRlcykKKyAgICB7CisgICAgICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byBwcm9ncmFtIGNoZWNrIHRoZSBmbGFzaCBibG9jayAqLworICAgICAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhGVEZ4X1BST0dSQU1fQ0hFQ0ssIHN0YXJ0KTsKKyAgICAgICAga0ZDQ09CeFsxXSA9IEJZVEVTX0pPSU5fVE9fV09SRF8xXzMobWFyZ2luLCAweEZGRkZGRlUpOworICAgICAgICBrRkNDT0J4WzJdID0gKmV4cGVjdGVkRGF0YTsKKworICAgICAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgICAgIC8qIGNoZWNraW5nIGZvciB0aGUgc3VjY2VzcyBvZiBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgICAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzICE9IHJldHVybkNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmYWlsZWRBZGRyZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmYWlsZWRBZGRyZXNzID0gc3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmFpbGVkRGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZmFpbGVkRGF0YSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGxlbmd0aEluQnl0ZXMgLT0gZmxhc2hPcGVyYXRpb25JbmZvLmNoZWNrQ21kQWRkcmVzc0FsaWdtZW50OworICAgICAgICBleHBlY3RlZERhdGEgKz0gZmxhc2hPcGVyYXRpb25JbmZvLmNoZWNrQ21kQWRkcmVzc0FsaWdtZW50IC8gc2l6ZW9mKCpleHBlY3RlZERhdGEpOworICAgICAgICBzdGFydCArPSBmbGFzaE9wZXJhdGlvbkluZm8uY2hlY2tDbWRBZGRyZXNzQWxpZ21lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIChyZXR1cm5Db2RlKTsKK30KKworc3RhdHVzX3QgRkxBU0hfVmVyaWZ5RXJhc2VBbGxFeGVjdXRlT25seVNlZ21lbnRzKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX21hcmdpbl92YWx1ZV90IG1hcmdpbikKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogcHJlcGFyaW5nIHBhc3NpbmcgcGFyYW1ldGVyIHRvIHZlcmlmeSBlcmFzZSBhbGwgZXhlY3V0ZS1vbmx5IHNlZ21lbnRzIGNvbW1hbmQgKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8yKEZURnhfVkVSSUZZX0FMTF9FWEVDVVRFX09OTFlfU0VHTUVOVCwgbWFyZ2luLCAweEZGRkZVKTsKKworICAgIC8qIGNhbGxpbmcgZmxhc2ggY29tbWFuZCBzZXF1ZW5jZSBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBjb21tYW5kICovCisgICAgcmV0dXJuIGZsYXNoX2NvbW1hbmRfc2VxdWVuY2UoY29uZmlnKTsKK30KKworc3RhdHVzX3QgRkxBU0hfSXNQcm90ZWN0ZWQoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3Byb3RlY3Rpb25fc3RhdGVfdCAqcHJvdGVjdGlvbl9zdGF0ZSkKK3sKKyAgICB1aW50MzJfdCBlbmRBZGRyZXNzOyAgICAgICAgICAgLyogZW5kIGFkZHJlc3MgZm9yIHByb3RlY3Rpb24gY2hlY2sgKi8KKyAgICB1aW50MzJfdCByZWdpb25DaGVja2VkQ291bnRlcjsgLyogaW5jcmVtZW50cyBlYWNoIHRpbWUgdGhlIGZsYXNoIGFkZHJlc3Mgd2FzIGNoZWNrZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3RlY3Rpb24gc3RhdHVzICovCisgICAgdWludDMyX3QgcmVnaW9uQ291bnRlcjsgICAgICAgIC8qIGluY3JlbWVudGluZyB2YXJpYWJsZSB1c2VkIHRvIGluY3JlbWVudCB0aHJvdWdoIHRoZSBmbGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwcm90ZWN0aW9uIHJlZ2lvbnMgKi8KKyAgICB1aW50MzJfdCBwcm90ZWN0U3RhdHVzQ291bnRlcjsgLyogaW5jcmVtZW50cyBlYWNoIHRpbWUgYSBmbGFzaCByZWdpb24gd2FzIGRldGVjdGVkIGFzIHByb3RlY3RlZCAqLworCisgICAgdWludDhfdCBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UXTsgLyogYXJyYXkgb2YgdGhlIHByb3RlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0YXR1cyBmb3IgZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdGVjdGlvbiByZWdpb24gKi8KKyAgICB1aW50MzJfdCBmbGFzaFJlZ2lvbkFkZHJlc3NbRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV07ICAgICAgICAgICAgICAgIC8qIGFycmF5IG9mIHRoZSBzdGFydCBhZGRyZXNzZXMgZm9yIGVhY2ggZmxhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdGVjdGlvbiByZWdpb24uIE5vdGUgdGhpcyBpcyBSRUdJT05fQ09VTlQrMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkdWUgdG8gcmVxdWlyaW5nIHRoZSBuZXh0IHN0YXJ0IGFkZHJlc3MgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGVuZCBvZiBmbGFzaCBmb3IgbG9vcC1jaGVjayBwdXJwb3NlcyBiZWxvdyAqLworICAgIGZsYXNoX3Byb3RlY3Rpb25fY29uZmlnX3QgZmxhc2hQcm90ZWN0aW9uSW5mbzsgLyogZmxhc2ggcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiAqLworICAgIHN0YXR1c190IHJldHVybkNvZGU7CisKKyAgICBpZiAocHJvdGVjdGlvbl9zdGF0ZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENoZWNrIHRoZSBzdXBwbGllZCBhZGRyZXNzIHJhbmdlLiAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jaGVja19yYW5nZShjb25maWcsIHN0YXJ0LCBsZW5ndGhJbkJ5dGVzLCBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfV1JJVEVfVU5JVF9TSVpFKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIC8qIEdldCBuZWNlc3NhcnkgZmxhc2ggcHJvdGVjdGlvbiBpbmZvcm1hdGlvbi4gKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfZ2V0X3Byb3RlY3Rpb25faW5mbyhjb25maWcsICZmbGFzaFByb3RlY3Rpb25JbmZvKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIC8qIGNhbGN1bGF0aW5nIEZsYXNoIGVuZCBhZGRyZXNzICovCisgICAgZW5kQWRkcmVzcyA9IHN0YXJ0ICsgbGVuZ3RoSW5CeXRlczsKKworICAgIC8qIHBvcHVsYXRlIHRoZSBmbGFzaFJlZ2lvbkFkZHJlc3MgYXJyYXkgd2l0aCB0aGUgc3RhcnQgYWRkcmVzcyBvZiBlYWNoIGZsYXNoIHJlZ2lvbiAqLworICAgIHJlZ2lvbkNvdW50ZXIgPSAwOyAvKiBtYWtlIHN1cmUgcmVnaW9uQ291bnRlciBpcyBpbml0aWFsaXplZCB0byAwIGZpcnN0ICovCisKKyAgICAvKiBwb3B1bGF0ZSB1cCB0byAzM3JkIGVsZW1lbnQgb2YgYXJyYXksIHRoaXMgaXMgdGhlIG5leHQgYWRkcmVzcyBhZnRlciBlbmQgb2YgZmxhc2ggYXJyYXkgKi8KKyAgICB3aGlsZSAocmVnaW9uQ291bnRlciA8PSBmbGFzaFByb3RlY3Rpb25JbmZvLnJlZ2lvbkNvdW50KQorICAgIHsKKyAgICAgICAgZmxhc2hSZWdpb25BZGRyZXNzW3JlZ2lvbkNvdW50ZXJdID0KKyAgICAgICAgICAgIGZsYXNoUHJvdGVjdGlvbkluZm8ucmVnaW9uQmFzZSArIGZsYXNoUHJvdGVjdGlvbkluZm8ucmVnaW9uU2l6ZSAqIHJlZ2lvbkNvdW50ZXI7CisgICAgICAgIHJlZ2lvbkNvdW50ZXIrKzsKKyAgICB9CisKKyAgICAvKiBwb3B1bGF0ZSBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXMgYXJyYXkgd2l0aCBzdGF0dXMgaW5mb3JtYXRpb24KKyAgICAgKiBQcm90ZWN0aW9uIHN0YXR1cyBmb3IgZWFjaCByZWdpb24gaXMgc3RvcmVkIGluIHRoZSBGUFJPVFszOjBdIHJlZ2lzdGVycworICAgICAqIEVhY2ggYml0IHJlcHJlc2VudHMgb25lIHJlZ2lvbiBvZiBmbGFzaAorICAgICAqIDQgcmVnaXN0ZXJzICogOC1iaXRzLXBlci1yZWdpc3RlciA9IDMyLWJpdHMgKDMyLXJlZ2lvbnMpCisgICAgICogVGhlIGNvbnZlbnRpb24gaXM6CisgICAgICogRlBST1QzW2JpdCAwXSBpcyB0aGUgZmlyc3QgcHJvdGVjdGlvbiByZWdpb24gKHN0YXJ0IG9mIGZsYXNoIG1lbW9yeSkKKyAgICAgKiBGUFJPVDBbYml0IDddIGlzIHRoZSBsYXN0IHByb3RlY3Rpb24gcmVnaW9uIChlbmQgb2YgZmxhc2ggbWVtb3J5KQorICAgICAqIHJlZ2lvbkNvdW50ZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggRlBST1RbMzowXSByZWdpc3RlciB0byBjaGVjayBmb3IgcHJvdGVjdGlvbiBzdGF0dXMKKyAgICAgKiBOb3RlOiBGUFJPVD0xIG1lYW5zIE5PVCBwcm90ZWN0ZWQsIEZQUk9UPTAgbWVhbnMgcHJvdGVjdGVkICovCisgICAgcmVnaW9uQ291bnRlciA9IDA7IC8qIG1ha2Ugc3VyZSByZWdpb25Db3VudGVyIGlzIGluaXRpYWxpemVkIHRvIDAgZmlyc3QgKi8KKyAgICB3aGlsZSAocmVnaW9uQ291bnRlciA8IGZsYXNoUHJvdGVjdGlvbkluZm8ucmVnaW9uQ291bnQpCisgICAgeworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAmJiBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX1BST1RFQ1RJT05fUkVHSVNURVIKKyAgICAgICAgaWYgKGNvbmZpZy0+Rmxhc2hNZW1vcnlJbmRleCA9PSAodWludDhfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlZ2lvbkNvdW50ZXIgPCA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9UU0xfUkVHID4+IHJlZ2lvbkNvdW50ZXIpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChyZWdpb25Db3VudGVyID49IDgpICYmIChyZWdpb25Db3VudGVyIDwgMTYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9UU0hfUkVHID4+IChyZWdpb25Db3VudGVyIC0gOCkpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgLyogTm90ZTogU28gZmFyIHByb3RlY3Rpb24gcmVnaW9uIGNvdW50IG1heSBiZSAxNi8yMC8yNC8zMi82NCAqLworICAgICAgICAgICAgaWYgKHJlZ2lvbkNvdW50ZXIgPCA4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9UTDNfUkVHID4+IHJlZ2lvbkNvdW50ZXIpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChyZWdpb25Db3VudGVyID49IDgpICYmIChyZWdpb25Db3VudGVyIDwgMTYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9UTDJfUkVHID4+IChyZWdpb25Db3VudGVyIC0gOCkpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVCkgJiYgKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9QUk9URUNUSU9OX1JFR0lPTl9DT1VOVCA+IDE2KQorI2lmIChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQgPT0gMjApCisgICAgICAgICAgICBlbHNlIGlmICgocmVnaW9uQ291bnRlciA+PSAxNikgJiYgKHJlZ2lvbkNvdW50ZXIgPCAyMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW3JlZ2lvbkNvdW50ZXJdID0gKEZURnhfRlBST1RMMV9SRUcgPj4gKHJlZ2lvbkNvdW50ZXIgLSAxNikpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBlbHNlIGlmICgocmVnaW9uQ291bnRlciA+PSAxNikgJiYgKHJlZ2lvbkNvdW50ZXIgPCAyNCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW3JlZ2lvbkNvdW50ZXJdID0gKEZURnhfRlBST1RMMV9SRUcgPj4gKHJlZ2lvbkNvdW50ZXIgLSAxNikpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UID09IDIwKSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQpICYmIChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQgPiAyNCkKKyAgICAgICAgICAgIGVsc2UgaWYgKChyZWdpb25Db3VudGVyID49IDI0KSAmJiAocmVnaW9uQ291bnRlciA8IDMyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVEwwX1JFRyA+PiAocmVnaW9uQ291bnRlciAtIDI0KSkgJiAoMHgwMXUpOworICAgICAgICAgICAgfQorI2VuZGlmCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQpICYmIFwKKyAgICAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX1BST1RFQ1RJT05fUkVHSU9OX0NPVU5UID09IDY0KQorICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uQ291bnRlciA8IDQwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9USDNfUkVHID4+IChyZWdpb25Db3VudGVyIC0gMzIpKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25Db3VudGVyIDwgNDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW3JlZ2lvbkNvdW50ZXJdID0gKEZURnhfRlBST1RIMl9SRUcgPj4gKHJlZ2lvbkNvdW50ZXIgLSA0MCkpICYgKDB4MDF1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbkNvdW50ZXIgPCA1NikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFzaFJlZ2lvblByb3RlY3RTdGF0dXNbcmVnaW9uQ291bnRlcl0gPSAoRlRGeF9GUFJPVEgxX1JFRyA+PiAocmVnaW9uQ291bnRlciAtIDQ4KSkgJiAoMHgwMXUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uQ291bnRlciA8IDY0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZsYXNoUmVnaW9uUHJvdGVjdFN0YXR1c1tyZWdpb25Db3VudGVyXSA9IChGVEZ4X0ZQUk9USDBfUkVHID4+IChyZWdpb25Db3VudGVyIC0gNTYpKSAmICgweDAxdSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlZ2lvbkNvdW50ZXIrKzsKKyAgICB9CisKKyAgICAvKiBsb29wIHRocm91Z2ggdGhlIGZsYXNoIHJlZ2lvbnMgYW5kIGNoZWNrCisgICAgICogZGVzaXJlZCBmbGFzaCBhZGRyZXNzIHJhbmdlIGZvciBwcm90ZWN0aW9uIHN0YXR1cworICAgICAqIGxvb3Agc3RvcHMgd2hlbiBpdCBpcyBkZXRlY3RlZCB0aGF0IHN0YXJ0IGhhcyBleGNlZWRlZCB0aGUgZW5kQWRkcmVzcyAqLworICAgIHJlZ2lvbkNvdW50ZXIgPSAwOyAvKiBtYWtlIHN1cmUgcmVnaW9uQ291bnRlciBpcyBpbml0aWFsaXplZCB0byAwIGZpcnN0ICovCisgICAgcmVnaW9uQ2hlY2tlZENvdW50ZXIgPSAwOworICAgIHByb3RlY3RTdGF0dXNDb3VudGVyID0gMDsgLyogbWFrZSBzdXJlIHByb3RlY3RTdGF0dXNDb3VudGVyIGlzIGluaXRpYWxpemVkIHRvIDAgZmlyc3QgKi8KKyAgICB3aGlsZSAoc3RhcnQgPCBlbmRBZGRyZXNzKQorICAgIHsKKyAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBhZGRyZXNzIGZhbGxzIHdpdGhpbiB0aGlzIHByb3RlY3Rpb24gcmVnaW9uCisgICAgICAgICAqIE5vdGUgdGhhdCBpZiB0aGUgZW50aXJlIGZsYXNoIGlzIHRvIGJlIGNoZWNrZWQsIHRoZSBsYXN0IHByb3RlY3Rpb24KKyAgICAgICAgICogcmVnaW9uIGNoZWNrZWQgd291bGQgY29uc2lzdCBvZiB0aGUgbGFzdCBwcm90ZWN0aW9uIHN0YXJ0IGFkZHJlc3MgYW5kCisgICAgICAgICAqIHRoZSBzdGFydCBhZGRyZXNzIGZvbGxvd2luZyB0aGUgZW5kIG9mIGZsYXNoICovCisgICAgICAgIGlmICgoc3RhcnQgPj0gZmxhc2hSZWdpb25BZGRyZXNzW3JlZ2lvbkNvdW50ZXJdKSAmJiAoc3RhcnQgPCBmbGFzaFJlZ2lvbkFkZHJlc3NbcmVnaW9uQ291bnRlciArIDFdKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogaW5jcmVtZW50IHJlZ2lvbkNoZWNrZWRDb3VudGVyIHRvIGluZGljYXRlIHRoaXMgcmVnaW9uIHdhcyBjaGVja2VkICovCisgICAgICAgICAgICByZWdpb25DaGVja2VkQ291bnRlcisrOworCisgICAgICAgICAgICAvKiBjaGVjayB0aGUgcHJvdGVjdGlvbiBzdGF0dXMgb2YgdGhpcyByZWdpb24KKyAgICAgICAgICAgICAqIE5vdGU6IEZQUk9UPTEgbWVhbnMgTk9UIHByb3RlY3RlZCwgRlBST1Q9MCBtZWFucyBwcm90ZWN0ZWQgKi8KKyAgICAgICAgICAgIGlmICghZmxhc2hSZWdpb25Qcm90ZWN0U3RhdHVzW3JlZ2lvbkNvdW50ZXJdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudCBwcm90ZWN0U3RhdHVzQ291bnRlciB0byBpbmRpY2F0ZSB0aGlzIHJlZ2lvbiBpcyBwcm90ZWN0ZWQgKi8KKyAgICAgICAgICAgICAgICBwcm90ZWN0U3RhdHVzQ291bnRlcisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnQgKz0gZmxhc2hQcm90ZWN0aW9uSW5mby5yZWdpb25TaXplOyAvKiBpbmNyZW1lbnQgdG8gYW4gYWRkcmVzcyB3aXRoaW4gdGhlIG5leHQgcmVnaW9uICovCisgICAgICAgIH0KKyAgICAgICAgcmVnaW9uQ291bnRlcisrOyAvKiBpbmNyZW1lbnQgcmVnaW9uQ291bnRlciB0byBjaGVjayBmb3IgdGhlIG5leHQgZmxhc2ggcHJvdGVjdGlvbiByZWdpb24gKi8KKyAgICB9CisKKyAgICAvKiBpZiBwcm90ZWN0U3RhdHVzQ291bnRlciA9PSAwLCB0aGVuIG5vIHJlZ2lvbiBvZiB0aGUgZGVzaXJlZCBmbGFzaCByZWdpb24gaXMgcHJvdGVjdGVkICovCisgICAgaWYgKHByb3RlY3RTdGF0dXNDb3VudGVyID09IDApCisgICAgeworICAgICAgICAqcHJvdGVjdGlvbl9zdGF0ZSA9IGtGTEFTSF9Qcm90ZWN0aW9uU3RhdGVVbnByb3RlY3RlZDsKKyAgICB9CisgICAgLyogaWYgcHJvdGVjdFN0YXR1c0NvdW50ZXIgPT0gcmVnaW9uQ2hlY2tlZENvdW50ZXIsIHRoZW4gZWFjaCByZWdpb24gY2hlY2tlZCB3YXMgcHJvdGVjdGVkICovCisgICAgZWxzZSBpZiAocHJvdGVjdFN0YXR1c0NvdW50ZXIgPT0gcmVnaW9uQ2hlY2tlZENvdW50ZXIpCisgICAgeworICAgICAgICAqcHJvdGVjdGlvbl9zdGF0ZSA9IGtGTEFTSF9Qcm90ZWN0aW9uU3RhdGVQcm90ZWN0ZWQ7CisgICAgfQorICAgIC8qIGlmIHByb3RlY3RTdGF0dXNDb3VudGVyICE9IHJlZ2lvbkNoZWNrZWRDb3VudGVyLCB0aGVuIHByb3RlY3Rpb24gc3RhdHVzIGlzIG1peGVkCisgICAgICogSW4gb3RoZXIgd29yZHMsIHNvbWUgcmVnaW9ucyBhcmUgcHJvdGVjdGVkIHdoaWxlIG90aGVycyBhcmUgdW5wcm90ZWN0ZWQgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICAqcHJvdGVjdGlvbl9zdGF0ZSA9IGtGTEFTSF9Qcm90ZWN0aW9uU3RhdGVNaXhlZDsKKyAgICB9CisKKyAgICByZXR1cm4gKHJldHVybkNvZGUpOworfQorCitzdGF0dXNfdCBGTEFTSF9Jc0V4ZWN1dGVPbmx5KGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9leGVjdXRlX29ubHlfYWNjZXNzX3N0YXRlX3QgKmFjY2Vzc19zdGF0ZSkKK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MCisgICAgZmxhc2hfYWNjZXNzX2NvbmZpZ190IGZsYXNoQWNjZXNzSW5mbzsgLyogZmxhc2ggRXhlY3V0ZS1Pbmx5IGluZm9ybWF0aW9uICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MICovCisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGlmIChhY2Nlc3Nfc3RhdGUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGUgc3VwcGxpZWQgYWRkcmVzcyByYW5nZS4gKi8KKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY2hlY2tfcmFuZ2UoY29uZmlnLCBzdGFydCwgbGVuZ3RoSW5CeXRlcywgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1dSSVRFX1VOSVRfU0laRSk7CisgICAgaWYgKHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MCisgICAgLyogR2V0IG5lY2Vzc2FyeSBmbGFzaCBFeGVjdXRlLU9ubHkgaW5mb3JtYXRpb24uICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2dldF9hY2Nlc3NfaW5mbyhjb25maWcsICZmbGFzaEFjY2Vzc0luZm8pOworICAgIGlmIChyZXR1cm5Db2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgfQorCisgICAgeworICAgICAgICB1aW50MzJfdCBleGVjdXRlT25seVNlZ21lbnRDb3VudGVyID0gMDsKKworICAgICAgICAvKiBjYWxjdWxhdGluZyBlbmQgYWRkcmVzcyAqLworICAgICAgICB1aW50MzJfdCBlbmRBZGRyZXNzID0gc3RhcnQgKyBsZW5ndGhJbkJ5dGVzOworCisgICAgICAgIC8qIEFsaWduaW5nIHN0YXJ0IGFkZHJlc3MgYW5kIGVuZCBhZGRyZXNzICovCisgICAgICAgIHVpbnQzMl90IGFsaWduZWRTdGFydEFkZHJlc3MgPSBBTElHTl9ET1dOKHN0YXJ0LCBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudFNpemUpOworICAgICAgICB1aW50MzJfdCBhbGlnbmVkRW5kQWRkcmVzcyA9IEFMSUdOX1VQKGVuZEFkZHJlc3MsIGZsYXNoQWNjZXNzSW5mby5TZWdtZW50U2l6ZSk7CisKKyAgICAgICAgdWludDMyX3Qgc2VnbWVudEluZGV4ID0gMDsKKyAgICAgICAgdWludDMyX3QgbWF4U3VwcG9ydGVkRXhlY3V0ZU9ubHlTZWdtZW50Q291bnQgPQorICAgICAgICAgICAgKGFsaWduZWRFbmRBZGRyZXNzIC0gYWxpZ25lZFN0YXJ0QWRkcmVzcykgLyBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudFNpemU7CisKKyAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kQWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgeGFjYzsKKworICAgICAgICAgICAgc2VnbWVudEluZGV4ID0gKHN0YXJ0IC0gZmxhc2hBY2Nlc3NJbmZvLlNlZ21lbnRCYXNlKSAvIGZsYXNoQWNjZXNzSW5mby5TZWdtZW50U2l6ZTsKKworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAmJiBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX0FDQ0VTU19SRUdJU1RFUgorICAgICAgICAgICAgaWYgKGNvbmZpZy0+Rmxhc2hNZW1vcnlJbmRleCA9PSAodWludDhfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBGb3Igc2Vjb25kYXJ5IGZsYXNoLCBUaGUgdHdvIFhBQ0NTIHJlZ2lzdGVycyBhbGxvdyB1cCB0byAxNiByZXN0cmljdGVkIHNlZ21lbnRzIG9mIGVxdWFsIG1lbW9yeSBzaXplLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChzZWdtZW50SW5kZXggPCA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeGFjYyA9ICooY29uc3Qgdm9sYXRpbGUgdWludDhfdCAqKSZGVEZ4X1hBQ0NTTF9SRUc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlZ21lbnRJbmRleCA8IGZsYXNoQWNjZXNzSW5mby5TZWdtZW50Q291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB4YWNjID0gKihjb25zdCB2b2xhdGlsZSB1aW50OF90ICopJkZURnhfWEFDQ1NIX1JFRzsKKyAgICAgICAgICAgICAgICAgICAgc2VnbWVudEluZGV4IC09IDg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEZvciBwcmltYXJ5IGZsYXNoLCBUaGUgZWlnaHQgWEFDQyByZWdpc3RlcnMgYWxsb3cgdXAgdG8gNjQgcmVzdHJpY3RlZCBzZWdtZW50cyBvZiBlcXVhbCBtZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMzIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB4YWNjID0gKihjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqKSZGVEZ4X1hBQ0NMM19SRUc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlZ21lbnRJbmRleCA8IGZsYXNoQWNjZXNzSW5mby5TZWdtZW50Q291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB4YWNjID0gKihjb25zdCB2b2xhdGlsZSB1aW50MzJfdCAqKSZGVEZ4X1hBQ0NIM19SRUc7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleCAtPSAzMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBEZXRlcm1pbmUgaWYgdGhpcyBhZGRyZXNzIHJhbmdlIGlzIGluIGEgZXhlY3V0ZS1vbmx5IHByb3RlY3Rpb24gZmxhc2ggc2VnbWVudC4gKi8KKyAgICAgICAgICAgIGlmICgofnhhY2MpICYgKDF1IDw8IHNlZ21lbnRJbmRleCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhlY3V0ZU9ubHlTZWdtZW50Q291bnRlcisrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGFydCArPSBmbGFzaEFjY2Vzc0luZm8uU2VnbWVudFNpemU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhlY3V0ZU9ubHlTZWdtZW50Q291bnRlciA8IDF1KQorICAgICAgICB7CisgICAgICAgICAgICAqYWNjZXNzX3N0YXRlID0ga0ZMQVNIX0FjY2Vzc1N0YXRlVW5MaW1pdGVkOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV4ZWN1dGVPbmx5U2VnbWVudENvdW50ZXIgPCBtYXhTdXBwb3J0ZWRFeGVjdXRlT25seVNlZ21lbnRDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgKmFjY2Vzc19zdGF0ZSA9IGtGTEFTSF9BY2Nlc3NTdGF0ZU1peGVkOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKmFjY2Vzc19zdGF0ZSA9IGtGTEFTSF9BY2Nlc3NTdGF0ZUV4ZWN1dGVPbmx5OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICAqYWNjZXNzX3N0YXRlID0ga0ZMQVNIX0FjY2Vzc1N0YXRlVW5MaW1pdGVkOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCAqLworCisgICAgcmV0dXJuIChyZXR1cm5Db2RlKTsKK30KKworc3RhdHVzX3QgRkxBU0hfR2V0UHJvcGVydHkoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfcHJvcGVydHlfdGFnX3Qgd2hpY2hQcm9wZXJ0eSwgdWludDMyX3QgKnZhbHVlKQoreworICAgIGlmICgoY29uZmlnID09IE5VTEwpIHx8ICh2YWx1ZSA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHdoaWNoUHJvcGVydHkpCisgICAgeworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaFNlY3RvclNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPlBGbGFzaFNlY3RvclNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaFRvdGFsU2l6ZToKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+UEZsYXNoVG90YWxTaXplOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja1NpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPlBGbGFzaFRvdGFsU2l6ZSAvIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9CTE9DS19DT1VOVDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQmxvY2tDb3VudDoKKyAgICAgICAgICAgICp2YWx1ZSA9ICh1aW50MzJfdCljb25maWctPlBGbGFzaEJsb2NrQ291bnQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEJsb2NrQmFzZUFkZHI6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPlBGbGFzaEJsb2NrQmFzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoRmFjU3VwcG9ydDoKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCkKKyAgICAgICAgICAgICp2YWx1ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTDsKKyNlbHNlCisgICAgICAgICAgICAqdmFsdWUgPSAwOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hBY2Nlc3NTZWdtZW50U2l6ZToKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudFNpemU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEFjY2Vzc1NlZ21lbnRDb3VudDoKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudENvdW50OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlGbGV4UmFtQmxvY2tCYXNlQWRkcjoKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+RmxleFJBTUJsb2NrQmFzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RmxleFJhbVRvdGFsU2l6ZToKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+RmxleFJBTVRvdGFsU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaFNlY3RvclNpemU6CisgICAgICAgICAgICAqdmFsdWUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19TRUNUT1JfU0laRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaFRvdGFsU2l6ZToKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+REZsYXNoVG90YWxTaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RGZsYXNoQmxvY2tTaXplOgorICAgICAgICAgICAgKnZhbHVlID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfU0laRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrQ291bnQ6CisgICAgICAgICAgICAqdmFsdWUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9CTE9DS19DT1VOVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrQmFzZUFkZHI6CisgICAgICAgICAgICAqdmFsdWUgPSBjb25maWctPkRGbGFzaEJsb2NrQmFzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eUVlcHJvbVRvdGFsU2l6ZToKKyAgICAgICAgICAgICp2YWx1ZSA9IGNvbmZpZy0+RUVwcm9tVG90YWxTaXplOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCAqLworCisgICAgICAgIGRlZmF1bHQ6IC8qIGNhdGNoIGlucHV0cyB0aGF0IGFyZSBub3QgcmVjb2duaXplZCAqLworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfVW5rbm93blByb3BlcnR5OworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IEZMQVNIX1NldFByb3BlcnR5KGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3Byb3BlcnR5X3RhZ190IHdoaWNoUHJvcGVydHksIHVpbnQzMl90IHZhbHVlKQoreworICAgIHN0YXR1c190IHN0YXR1cyA9IGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHdoaWNoUHJvcGVydHkpCisgICAgeworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRAorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eUZsYXNoTWVtb3J5SW5kZXg6CisgICAgICAgICAgICBpZiAoKHZhbHVlICE9ICh1aW50MzJfdClrRkxBU0hfTWVtb3J5SW5kZXhQcmltYXJ5Rmxhc2gpICYmCisgICAgICAgICAgICAgICAgKHZhbHVlICE9ICh1aW50MzJfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZFByb3BlcnR5VmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPSAodWludDhfdCl2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAqLworCisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5Rmxhc2hDYWNoZUNvbnRyb2xsZXJJbmRleDoKKyAgICAgICAgICAgIGlmICgodmFsdWUgIT0gKHVpbnQzMl90KWtGTEFTSF9DYWNoZUNvbnRyb2xsZXJJbmRleEZvckNvcmUwKSAmJgorICAgICAgICAgICAgICAgICh2YWx1ZSAhPSAodWludDMyX3Qpa0ZMQVNIX0NhY2hlQ29udHJvbGxlckluZGV4Rm9yQ29yZTEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRQcm9wZXJ0eVZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnLT5GbGFzaENhY2hlQ29udHJvbGxlckluZGV4ID0gKHVpbnQ4X3QpdmFsdWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaFNlY3RvclNpemU6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoVG90YWxTaXplOgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEJsb2NrU2l6ZToKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja0NvdW50OgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaEJsb2NrQmFzZUFkZHI6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5UGZsYXNoRmFjU3VwcG9ydDoKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hBY2Nlc3NTZWdtZW50U2l6ZToKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlQZmxhc2hBY2Nlc3NTZWdtZW50Q291bnQ6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RmxleFJhbUJsb2NrQmFzZUFkZHI6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RmxleFJhbVRvdGFsU2l6ZToKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RGZsYXNoU2VjdG9yU2l6ZToKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlEZmxhc2hUb3RhbFNpemU6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RGZsYXNoQmxvY2tTaXplOgorICAgICAgICBjYXNlIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaEJsb2NrQ291bnQ6CisgICAgICAgIGNhc2Uga0ZMQVNIX1Byb3BlcnR5RGZsYXNoQmxvY2tCYXNlQWRkcjoKKyAgICAgICAgY2FzZSBrRkxBU0hfUHJvcGVydHlFZXByb21Ub3RhbFNpemU6CisjZW5kaWYgLyogRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCAqLworICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GTEFTSF9SZWFkT25seVByb3BlcnR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8qIGNhdGNoIGlucHV0cyB0aGF0IGFyZSBub3QgcmVjb2duaXplZCAqLworICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GTEFTSF9Vbmtub3duUHJvcGVydHk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01ECitzdGF0dXNfdCBGTEFTSF9TZXRGbGV4cmFtRnVuY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfZmxleHJhbV9mdW5jdGlvbl9vcHRpb25fdCBvcHRpb24pCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHN0YXR1cyA9IGZsYXNuX2NoZWNrX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3JhbmdlKG9wdGlvbik7CisgICAgaWYgKHN0YXR1cyAhPSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byB2ZXJpZnkgYWxsIGJsb2NrIGNvbW1hbmQgKi8KKyAgICBrRkNDT0J4WzBdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8yKEZURnhfU0VUX0ZMRVhSQU1fRlVOQ1RJT04sIG9wdGlvbiwgMHhGRkZGVSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybiBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQKK3N0YXR1c190IEZMQVNIX1N3YXBDb250cm9sKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfc3dhcF9jb250cm9sX29wdGlvbl90IG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3N3YXBfc3RhdGVfY29uZmlnX3QgKnJldHVybkluZm8pCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGlmICgoY29uZmlnID09IE5VTEwpIHx8IChyZXR1cm5JbmZvID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmIChhZGRyZXNzICYgKEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TV0FQX0NPTlRST0xfQ01EX0FERFJFU1NfQUxJR01FTlQgLSAxKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yOworICAgIH0KKworICAgIC8qIE1ha2Ugc3VyZSBhZGRyZXNzIHByb3ZpZGVkIGlzIGluIHRoZSBsb3dlciBoYWxmIG9mIFByb2dyYW0gZmxhc2ggYnV0IG5vdCBpbiB0aGUgRmxhc2ggQ29uZmlndXJhdGlvbiBGaWVsZCAqLworICAgIGlmICgoYWRkcmVzcyA+PSAoY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgLyAyKSkgfHwKKyAgICAgICAgKChhZGRyZXNzID49IGtGTEFTSF9Db25maWdBcmVhU3RhcnQpICYmIChhZGRyZXNzIDw9IGtGTEFTSF9Db25maWdBcmVhRW5kKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Td2FwSW5kaWNhdG9yQWRkcmVzc0Vycm9yOworICAgIH0KKworICAgIC8qIENoZWNrIHRoZSBvcHRpb24uICovCisgICAgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX3N3YXBfY29udHJvbF9vcHRpb24ob3B0aW9uKTsKKyAgICBpZiAocmV0dXJuQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKworICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8zKEZURnhfU1dBUF9DT05UUk9MLCBhZGRyZXNzKTsKKyAgICBrRkNDT0J4WzFdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMyhvcHRpb24sIDB4RkZGRkZGVSk7CisKKyAgICByZXR1cm5Db2RlID0gZmxhc2hfY29tbWFuZF9zZXF1ZW5jZShjb25maWcpOworCisgICAgcmV0dXJuSW5mby0+Zmxhc2hTd2FwU3RhdGUgPSAoZmxhc2hfc3dhcF9zdGF0ZV90KUZURnhfRkNDT0I1X1JFRzsKKyAgICByZXR1cm5JbmZvLT5jdXJyZW50U3dhcEJsb2NrU3RhdHVzID0gKGZsYXNoX3N3YXBfYmxvY2tfc3RhdHVzX3QpRlRGeF9GQ0NPQjZfUkVHOworICAgIHJldHVybkluZm8tPm5leHRTd2FwQmxvY2tTdGF0dXMgPSAoZmxhc2hfc3dhcF9ibG9ja19zdGF0dXNfdClGVEZ4X0ZDQ09CN19SRUc7CisKKyAgICByZXR1cm4gcmV0dXJuQ29kZTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU1dBUF9DT05UUk9MX0NNRCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVApICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUAorc3RhdHVzX3QgRkxBU0hfU3dhcChmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBhZGRyZXNzLCBmbGFzaF9zd2FwX2Z1bmN0aW9uX29wdGlvbl90IG9wdGlvbikKK3sKKyAgICBmbGFzaF9zd2FwX3N0YXRlX2NvbmZpZ190IHJldHVybkluZm87CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIG1lbXNldCgmcmV0dXJuSW5mbywgMHhGRlUsIHNpemVvZihyZXR1cm5JbmZvKSk7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1N3YXBDb250cm9sKGNvbmZpZywgYWRkcmVzcywga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uUmVwb3J0U3RhdHVzLCAmcmV0dXJuSW5mbyk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoa0ZMQVNIX1N3YXBGdW5jdGlvbk9wdGlvbkRpc2FibGUgPT0gb3B0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmV0dXJuSW5mby5mbGFzaFN3YXBTdGF0ZSA9PSBrRkxBU0hfU3dhcFN0YXRlRGlzYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJldHVybkluZm8uZmxhc2hTd2FwU3RhdGUgPT0ga0ZMQVNIX1N3YXBTdGF0ZVVuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVGhlIHN3YXAgc3lzdGVtIGNoYW5nZWQgdG8gdGhlIERJU0FCTEVEIHN0YXRlIHdpdGggUHJvZ3JhbSBmbGFzaCBibG9jayAwCisgICAgICAgICAgICAgICAgICogbG9jYXRlZCBhdCByZWxhdGl2ZSBmbGFzaCBhZGRyZXNzIDB4MF8wMDAwICovCisgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1N3YXBDb250cm9sKGNvbmZpZywgYWRkcmVzcywga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uRGlzYWJsZVN5c3RlbSwgJnJldHVybkluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFN3YXAgZGlzYWJsZSBzaG91bGQgYmUgcmVxdWVzdGVkIG9ubHkgd2hlbiBzd2FwIHN5c3RlbSBpcyBpbiB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSAqLworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N3YXBTeXN0ZW1Ob3RJblVuaW5pdGlhbGl6ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXaGVuIGZpcnN0IHN3YXA6IHRoZSBpbml0aWFsIHN3YXAgc3RhdGUgaXMgVW5pbml0aWFsaXplZCwgZmxhc2ggc3dhcCBpbmlkaWNhdG9yIGFkZHJlc3MgaXMgdW5zZXQsCisgICAgICAgICAgICAgKiAgICB0aGUgc3dhcCBwcm9jZWR1cmUgc2hvdWxkIGJlIFVuaW5pdGlhbGl6ZWQgLT4gVXBkYXRlLUVyYXNlZCAtPiBDb21wbGV0ZS4KKyAgICAgICAgICAgICAqIEFmdGVyIHRoZSBmaXJzdCBzd2FwIGhhcyBiZWVuIGNvbXBsZXRlZCwgdGhlIGZsYXNoIHN3YXAgaW5pZGljYXRvciBhZGRyZXNzIGNhbm5vdCBiZSBtb2RpZmllZAorICAgICAgICAgICAgICogICAgdW5sZXNzIEVyYXNlQWxsQmxvY2tzIGNvbW1hbmQgaXMgaXNzdWVkLCB0aGUgc3dhcCBwcm9jZWR1cmUgaXMgY2hhbmdlZCB0byBVcGRhdGUgLT4gVXBkYXRlLUVyYXNlZCAtPgorICAgICAgICAgICAgICogICAgQ29tcGxldGUuICovCisgICAgICAgICAgICBzd2l0Y2ggKHJldHVybkluZm8uZmxhc2hTd2FwU3RhdGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBrRkxBU0hfU3dhcFN0YXRlVW5pbml0aWFsaXplZDoKKyAgICAgICAgICAgICAgICAgICAgLyogSWYgY3VycmVudCBzd2FwIG1vZGUgaXMgVW5pbml0aWFsaXplZCwgSW5pdGlhbGl6ZSBTd2FwIHRvIEluaXRpYWxpemVkL1JFQURZIHN0YXRlLiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm5Db2RlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX1N3YXBDb250cm9sKGNvbmZpZywgYWRkcmVzcywga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uSW50aWFsaXplU3lzdGVtLCAmcmV0dXJuSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Uga0ZMQVNIX1N3YXBTdGF0ZVJlYWR5OgorICAgICAgICAgICAgICAgICAgICAvKiBWYWxpZGF0ZSB3aGV0aGVyIHRoZSBhZGRyZXNzIHByb3ZpZGVkIHRvIHRoZSBzd2FwIHN5c3RlbSBpcyBtYXRjaGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAqIHN3YXAgaW5kaWNhdG9yIGFkZHJlc3MgaW4gdGhlIElGUiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm5Db2RlID0gZmxhc2hfdmFsaWRhdGVfc3dhcF9pbmRpY2F0b3JfYWRkcmVzcyhjb25maWcsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0dXJuQ29kZSA9PSBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnJlbnQgc3dhcCBtb2RlIGlzIEluaXRpYWxpemVkL1JlYWR5LCBJbml0aWFsaXplIFN3YXAgdG8gVVBEQVRFIHN0YXRlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfU3dhcENvbnRyb2woY29uZmlnLCBhZGRyZXNzLCBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25TZXRJblVwZGF0ZVN0YXRlLCAmcmV0dXJuSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBrRkxBU0hfU3dhcFN0YXRlVXBkYXRlOgorICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJyZW50IHN3YXAgbW9kZSBpcyBVcGRhdGUsIEVyYXNlIGluZGljYXRvciBzZWN0b3IgaW4gbm9uIGFjdGl2ZSBibG9jaworICAgICAgICAgICAgICAgICAgICAgKiB0byBwcm9jZWVkIHN3YXAgc3lzdGVtIHRvIHVwZGF0ZS1lcmFzZWQgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX0VyYXNlKGNvbmZpZywgYWRkcmVzcyArIChjb25maWctPlBGbGFzaFRvdGFsU2l6ZSA+PiAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TRUNUT1JfQ01EX0FERFJFU1NfQUxJR01FTlQsIGtGTEFTSF9BcGlFcmFzZUtleSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Uga0ZMQVNIX1N3YXBTdGF0ZVVwZGF0ZUVyYXNlZDoKKyAgICAgICAgICAgICAgICAgICAgLyogSWYgY3VycmVudCBzd2FwIG1vZGUgaXMgVXBkYXRlIG9yIFVwZGF0ZS1FcmFzZWQsIHByb2dyZXNzIFN3YXAgdG8gQ09NUExFVEUgU3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9Td2FwQ29udHJvbChjb25maWcsIGFkZHJlc3MsIGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvblNldEluQ29tcGxldGVTdGF0ZSwgJnJldHVybkluZm8pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGtGTEFTSF9Td2FwU3RhdGVDb21wbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBrRkxBU0hfU3dhcFN0YXRlRGlzYWJsZWQ6CisgICAgICAgICAgICAgICAgICAgIC8qIFdoZW4gc3dhcCBzeXN0ZW0gaXMgaW4gZGlzYWJsZWQgc3RhdGUsIFdlIG5lZWQgdG8gY2xlYXIgc3dhcCBzeXN0ZW0gYmFjayB0byB1bmluaXRpYWxpemVkCisgICAgICAgICAgICAgICAgICAgICAqIGJ5IGlzc3VpbmcgRXJhc2VBbGxCbG9ja3MgY29tbWFuZCAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm5Db2RlID0ga1N0YXR1c19GTEFTSF9Td2FwU3lzdGVtTm90SW5VbmluaXRpYWxpemVkOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5Db2RlID0ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghKChrRkxBU0hfU3dhcFN0YXRlQ29tcGxldGUgPT0gcmV0dXJuSW5mby5mbGFzaFN3YXBTdGF0ZSkgJiYgKGtGTEFTSF9Td2FwRnVuY3Rpb25PcHRpb25FbmFibGUgPT0gb3B0aW9uKSkpOworCisgICAgcmV0dXJuIHJldHVybkNvZGU7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1BBUlRJVElPTl9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1BBUlRJVElPTl9DTUQKK3N0YXR1c190IEZMQVNIX1Byb2dyYW1QYXJ0aXRpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfcGFydGl0aW9uX2ZsZXhyYW1fbG9hZF9vcHRpb25fdCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVlcHJvbURhdGFTaXplQ29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxleG52bVBhcnRpdGlvbkNvZGUpCit7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBlZXByb21EYXRhU2l6ZUNvZGVbNzo2XSwgZmxleG52bVBhcnRpdGlvbkNvZGVbNzo0XSBzaG91bGQgYmUgYWxsIDEnYjAKKyAgICAgKiAgb3IgaXQgd2lsbCBjYXVzZSBhY2Nlc3MgZXJyb3IuICovCisgICAgLyogZWVwcm9tRGF0YVNpemVDb2RlICY9IDB4M0ZVOyAgKi8KKyAgICAvKiBmbGV4bnZtUGFydGl0aW9uQ29kZSAmPSAweDBGVTsgKi8KKworICAgIC8qIHByZXBhcmluZyBwYXNzaW5nIHBhcmFtZXRlciB0byBwcm9ncmFtIHRoZSBmbGFzaCBibG9jayAqLworICAgIGtGQ0NPQnhbMF0gPSBCWVRFU19KT0lOX1RPX1dPUkRfMV8yXzEoRlRGeF9QUk9HUkFNX1BBUlRJVElPTiwgMHhGRkZGVSwgb3B0aW9uKTsKKyAgICBrRkNDT0J4WzFdID0gQllURVNfSk9JTl9UT19XT1JEXzFfMV8yKGVlcHJvbURhdGFTaXplQ29kZSwgZmxleG52bVBhcnRpdGlvbkNvZGUsIDB4RkZGRlUpOworCisgICAgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzcyhjb25maWcsIGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1ByZSk7CisKKyAgICAvKiBjYWxsaW5nIGZsYXNoIGNvbW1hbmQgc2VxdWVuY2UgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIHJldHVybkNvZGUgPSBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGNvbmZpZyk7CisKKyAgICBmbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorICAgIC8qIERhdGEgZmxhc2ggSUZSIHdpbGwgYmUgdXBkYXRlZCBieSBwcm9ncmFtIHBhcnRpdGlvbiBjb21tYW5kIGR1cmluZyByZXNldCBzZXF1ZW5jZSwKKyAgICAgKiBzbyB3ZSBqdXN0IHNldCByZXNlcnZlZCB2YWx1ZXMgZm9yIHBhcnRpdGlvbmVkIEZsZXhOVk0gc2l6ZSBoZXJlICovCisgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV9SRVNFUlZFRDsKKyAgICBjb25maWctPkRGbGFzaFRvdGFsU2l6ZSA9IEZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfUkVTRVJWRUQ7CisjZW5kaWYKKworICAgIHJldHVybiAocmV0dXJuQ29kZSk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fUEFSVElUSU9OX0NNRCAqLworCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hTZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHBmbGFzaF9wcm90ZWN0aW9uX3N0YXR1c190ICpwcm90ZWN0U3RhdHVzKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSCisgICAgaWYgKGNvbmZpZy0+Rmxhc2hNZW1vcnlJbmRleCA9PSAodWludDhfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkKKyAgICB7CisgICAgICAgICprRlBST1RTTCA9IHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RzMTZiLnByb3RzbDsKKyAgICAgICAgaWYgKHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RzMTZiLnByb3RzbCAhPSAqa0ZQUk9UU0wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlOworICAgICAgICB9CisKKyAgICAgICAgKmtGUFJPVFNIID0gcHJvdGVjdFN0YXR1cy0+dmFsdWVMb3czMmIucHJvdHMxNmIucHJvdHNoOworICAgICAgICBpZiAocHJvdGVjdFN0YXR1cy0+dmFsdWVMb3czMmIucHJvdHMxNmIucHJvdHNoICE9ICprRlBST1RTSCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICAqa0ZQUk9UTCA9IHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RsMzJiOworICAgICAgICBpZiAocHJvdGVjdFN0YXR1cy0+dmFsdWVMb3czMmIucHJvdGwzMmIgIT0gKmtGUFJPVEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKEZURnhfRlBST1RfSElHSF9SRUcpCisgICAgICAgICprRlBST1RIID0gcHJvdGVjdFN0YXR1cy0+dmFsdWVIaWdoMzJiLnByb3RoMzJiOworICAgICAgICBpZiAocHJvdGVjdFN0YXR1cy0+dmFsdWVIaWdoMzJiLnByb3RoMzJiICE9ICprRlBST1RIKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworc3RhdHVzX3QgRkxBU0hfUGZsYXNoR2V0UHJvdGVjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCBwZmxhc2hfcHJvdGVjdGlvbl9zdGF0dXNfdCAqcHJvdGVjdFN0YXR1cykKK3sKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAocHJvdGVjdFN0YXR1cyA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSCisgICAgaWYgKGNvbmZpZy0+Rmxhc2hNZW1vcnlJbmRleCA9PSAodWludDhfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkKKyAgICB7CisgICAgICAgIHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RzMTZiLnByb3RzbCA9ICprRlBST1RTTDsKKyAgICAgICAgcHJvdGVjdFN0YXR1cy0+dmFsdWVMb3czMmIucHJvdHMxNmIucHJvdHNoID0gKmtGUFJPVFNIOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHByb3RlY3RTdGF0dXMtPnZhbHVlTG93MzJiLnByb3RsMzJiID0gKmtGUFJPVEw7CisjaWYgZGVmaW5lZChGVEZ4X0ZQUk9UX0hJR0hfUkVHKQorICAgICAgICBwcm90ZWN0U3RhdHVzLT52YWx1ZUhpZ2gzMmIucHJvdGgzMmIgPSAqa0ZQUk9USDsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9EZmxhc2hTZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgcHJvdGVjdFN0YXR1cykKK3sKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKChjb25maWctPkRGbGFzaFRvdGFsU2l6ZSA9PSAwKSB8fCAoY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPT0gRkxFWF9OVk1fREZMQVNIX1NJWkVfRk9SX0RFUEFSVF9SRVNFUlZFRCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkOworICAgIH0KKworICAgIEZURngtPkZEUFJPVCA9IHByb3RlY3RTdGF0dXM7CisKKyAgICBpZiAoRlRGeC0+RkRQUk9UICE9IHByb3RlY3RTdGF0dXMpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKK3N0YXR1c190IEZMQVNIX0RmbGFzaEdldFByb3RlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDhfdCAqcHJvdGVjdFN0YXR1cykKK3sKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAocHJvdGVjdFN0YXR1cyA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoKGNvbmZpZy0+REZsYXNoVG90YWxTaXplID09IDApIHx8IChjb25maWctPkRGbGFzaFRvdGFsU2l6ZSA9PSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0NvbW1hbmROb3RTdXBwb3J0ZWQ7CisgICAgfQorCisgICAgKnByb3RlY3RTdGF0dXMgPSBGVEZ4LT5GRFBST1Q7CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKK3N0YXR1c190IEZMQVNIX0VlcHJvbVNldFByb3RlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDhfdCBwcm90ZWN0U3RhdHVzKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoKGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID09IDApIHx8IChjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9PSBGTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV9SRVNFUlZFRCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkOworICAgIH0KKworICAgIEZURngtPkZFUFJPVCA9IHByb3RlY3RTdGF0dXM7CisKKyAgICBpZiAoRlRGeC0+RkVQUk9UICE9IHByb3RlY3RTdGF0dXMpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKK3N0YXR1c190IEZMQVNIX0VlcHJvbUdldFByb3RlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDhfdCAqcHJvdGVjdFN0YXR1cykKK3sKKyAgICBpZiAoKGNvbmZpZyA9PSBOVUxMKSB8fCAocHJvdGVjdFN0YXR1cyA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoKGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID09IDApIHx8IChjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9PSBGTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV9SRVNFUlZFRCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkOworICAgIH0KKworICAgICpwcm90ZWN0U3RhdHVzID0gRlRGeC0+RkVQUk9UOworCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEICovCisKK3N0YXR1c190IEZMQVNIX1BmbGFzaFNldFByZWZldGNoU3BlY3VsYXRpb24oZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fc3RhdHVzX3QgKnNwZWN1bGF0aW9uU3RhdHVzKQoreworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgdm9pZCAoKmZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2spKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgYmFzZSwgdWludDMyX3QgYml0TWFzaywgdWludDMyX3QgYml0U2hpZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJpdFZhbHVlKTsKKyAgICB1aW50MzJfdCBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkJ1ZmZlcltrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3Jkc107CisKKyAgICBhc3NlcnQoc2l6ZW9mKHNfZmxhc2hDb21tb25CaXRPcGVyYXRpb25GdW5jdGlvbkNvZGUpIDw9IChrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3JkcyAqIDQpKTsKKworICAgIG1lbWNweSgodm9pZCAqKWZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQnVmZmVyLCAodm9pZCAqKXNfZmxhc2hDb21tb25CaXRPcGVyYXRpb25GdW5jdGlvbkNvZGUsCisgICAgICAgICAgIHNpemVvZihzX2ZsYXNoQ29tbW9uQml0T3BlcmF0aW9uRnVuY3Rpb25Db2RlKSk7CisgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayA9ICh2b2lkICgqKShGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIGJhc2UsIHVpbnQzMl90IGJpdE1hc2ssIHVpbnQzMl90IGJpdFNoaWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYml0VmFsdWUpKSgodWludDMyX3QpZmxhc2hDb21tb25CaXRPcGVyYXRpb25CdWZmZXIgKyAxKTsKKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKworI2lmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTUNNCisgICAgeworICAgICAgICBGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIHJlZ0Jhc2U7CisjaWYgZGVmaW5lZChNQ00pCisgICAgICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmTUNNLT5QTEFDUjsKKyNlbGlmIGRlZmluZWQoTUNNMCkKKyAgICAgICAgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZNQ00wLT5QTEFDUjsKKyNlbmRpZgorICAgICAgICBpZiAoc3BlY3VsYXRpb25TdGF0dXMtPmluc3RydWN0aW9uT3B0aW9uID09IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNwZWN1bGF0aW9uU3RhdHVzLT5kYXRhT3B0aW9uID09IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRTcGVjdWxhdGlvbk9wdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgTUNNX1BMQUNSX0RGQ1NfTUFTSywgTUNNX1BMQUNSX0RGQ1NfU0hJRlQsIDFVKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgKnJlZ0Jhc2UgfD0gTUNNX1BMQUNSX0RGQ1NfTUFTSzsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIE1DTV9QTEFDUl9ERkNTX01BU0ssIE1DTV9QTEFDUl9ERkNTX1NISUZULCAwVSk7CisjZWxzZQorICAgICAgICAgICAgKnJlZ0Jhc2UgJj0gfk1DTV9QTEFDUl9ERkNTX01BU0s7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSkKKyAgICAgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgTUNNX1BMQUNSX0VGRFNfTUFTSywgTUNNX1BMQUNSX0VGRFNfU0hJRlQsIDFVKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgKnJlZ0Jhc2UgfD0gTUNNX1BMQUNSX0VGRFNfTUFTSzsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICAgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayhyZWdCYXNlLCBNQ01fUExBQ1JfRUZEU19NQVNLLCBNQ01fUExBQ1JfRUZEU19TSElGVCwgMFUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAqcmVnQmFzZSAmPSB+TUNNX1BMQUNSX0VGRFNfTUFTSzsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VsaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9GTUMKKyAgICB7CisgICAgICAgIEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgcmVnQmFzZTsKKyAgICAgICAgdWludDMyX3QgYjBkcGVNYXNrLCBiMGlwZU1hc2s7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgdWludDMyX3QgYjBkcGVTaGlmdCwgYjBpcGVTaGlmdDsKKyNlbmRpZgorI2lmIGRlZmluZWQoRk1DX1BGQjAxQ1JfQjBEUEVfTUFTSykKKyAgICAgICAgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZGTUMtPlBGQjAxQ1I7CisgICAgICAgIGIwZHBlTWFzayA9IEZNQ19QRkIwMUNSX0IwRFBFX01BU0s7CisgICAgICAgIGIwaXBlTWFzayA9IEZNQ19QRkIwMUNSX0IwSVBFX01BU0s7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgYjBkcGVTaGlmdCA9IEZNQ19QRkIwMUNSX0IwRFBFX1NISUZUOworICAgICAgICBiMGlwZVNoaWZ0ID0gRk1DX1BGQjAxQ1JfQjBJUEVfU0hJRlQ7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjBDUl9CMERQRV9NQVNLKQorICAgICAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJkZNQy0+UEZCMENSOworICAgICAgICBiMGRwZU1hc2sgPSBGTUNfUEZCMENSX0IwRFBFX01BU0s7CisgICAgICAgIGIwaXBlTWFzayA9IEZNQ19QRkIwQ1JfQjBJUEVfTUFTSzsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICBiMGRwZVNoaWZ0ID0gRk1DX1BGQjBDUl9CMERQRV9TSElGVDsKKyAgICAgICAgYjBpcGVTaGlmdCA9IEZNQ19QRkIwQ1JfQjBJUEVfU0hJRlQ7CisjZW5kaWYKKyNlbmRpZgorICAgICAgICBpZiAoc3BlY3VsYXRpb25TdGF0dXMtPmluc3RydWN0aW9uT3B0aW9uID09IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlKQorICAgICAgICB7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgYjBpcGVNYXNrLCBiMGlwZVNoaWZ0LCAxVSk7CisjZWxzZQorICAgICAgICAgICAgKnJlZ0Jhc2UgfD0gYjBpcGVNYXNrOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgYjBpcGVNYXNrLCBiMGlwZVNoaWZ0LCAwVSk7CisjZWxzZQorICAgICAgICAgICAgKnJlZ0Jhc2UgJj0gfmIwaXBlTWFzazsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGlmIChzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9PSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSkKKyAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIGIwZHBlTWFzaywgYjBkcGVTaGlmdCwgMVUpOworI2Vsc2UKKyAgICAgICAgICAgICpyZWdCYXNlIHw9IGIwZHBlTWFzazsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICBmbGFzaENvbW1vbkJpdE9wZXJhdGlvbkNhbGxiYWNrKHJlZ0Jhc2UsIGIwZHBlTWFzaywgYjBkcGVTaGlmdCwgMFUpOworI2Vsc2UKKyAgICAgICAgICAgICpyZWdCYXNlICY9IH5iMGRwZU1hc2s7CisjZW5kaWYKKyAgICAgICAgfQorCisvKiBJbnZhbGlkYXRlIFByZWZldGNoIFNwZWN1bGF0aW9uIEJ1ZmZlciAqLworI2lmIGRlZmluZWQoRk1DX1BGQjAxQ1JfU19JTlZfTUFTSykKKyAgICAgICAgRk1DLT5QRkIwMUNSIHw9IEZNQ19QRkIwMUNSX1NfSU5WX01BU0s7CisjZWxpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfU19JTlZfTUFTSykKKyAgICAgICAgRk1DLT5QRkIwQ1IgfD0gRk1DX1BGQjBDUl9TX0lOVl9NQVNLOworI2VsaWYgZGVmaW5lZChGTUNfUEZCMENSX1NfQl9JTlZfTUFTSykKKyAgICAgICAgRk1DLT5QRkIwQ1IgfD0gRk1DX1BGQjBDUl9TX0JfSU5WX01BU0s7CisjZW5kaWYKKyAgICB9CisjZWxpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01TQ00KKyAgICB7CisgICAgICAgIEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgcmVnQmFzZTsKKyAgICAgICAgdWludDMyX3QgZmxhc2hTcGVjdWxhdGlvbk1hc2ssIGRhdGFQcmVmZXRjaE1hc2s7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICYmICghKGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSkKKyAgICAgICAgdWludDMyX3QgZmxhc2hTcGVjdWxhdGlvblNoaWZ0LCBkYXRhUHJlZmV0Y2hTaGlmdDsKKyAgICAgICAgZmxhc2hTcGVjdWxhdGlvblNoaWZ0ID0gTVNDTV9PQ01EUl9PQ01DMV9ERkNTX1NISUZUOworICAgICAgICBkYXRhUHJlZmV0Y2hTaGlmdCA9IE1TQ01fT0NNRFJfT0NNQzFfREZEU19TSElGVDsKKyNlbmRpZgorCisgICAgICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmTVNDTS0+T0NNRFJbMF07CisgICAgICAgIGZsYXNoU3BlY3VsYXRpb25NYXNrID0gTVNDTV9PQ01EUl9PQ01DMV9ERkNTX01BU0s7CisgICAgICAgIGRhdGFQcmVmZXRjaE1hc2sgPSBNU0NNX09DTURSX09DTUMxX0RGRFNfTUFTSzsKKworICAgICAgICBpZiAoc3BlY3VsYXRpb25TdGF0dXMtPmluc3RydWN0aW9uT3B0aW9uID09IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNwZWN1bGF0aW9uU3RhdHVzLT5kYXRhT3B0aW9uID09IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRTcGVjdWxhdGlvbk9wdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgJiYgKCEoZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9DT05UUk9MX0lOX0ZMQVNIKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpKQorICAgICAgICAgICAgICAgIGZsYXNoQ29tbW9uQml0T3BlcmF0aW9uQ2FsbGJhY2socmVnQmFzZSwgZmxhc2hTcGVjdWxhdGlvbk1hc2ssIGZsYXNoU3BlY3VsYXRpb25TaGlmdCwgMVUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAqcmVnQmFzZSB8PSBmbGFzaFNwZWN1bGF0aW9uTWFzazsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgKnJlZ0Jhc2UgJj0gfmZsYXNoU3BlY3VsYXRpb25NYXNrOworICAgICAgICAgICAgaWYgKHNwZWN1bGF0aW9uU3RhdHVzLT5kYXRhT3B0aW9uID09IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlKQorICAgICAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICAgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayhyZWdCYXNlLCBkYXRhUHJlZmV0Y2hNYXNrLCBkYXRhUHJlZmV0Y2hTaGlmdCwgMFUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAqcmVnQmFzZSAmPSB+ZGF0YVByZWZldGNoTWFzazsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgICAgICAgICAgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjayhyZWdCYXNlLCBkYXRhUHJlZmV0Y2hNYXNrLCBkYXRhUHJlZmV0Y2hTaGlmdCwgMVUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAqcmVnQmFzZSB8PSBkYXRhUHJlZmV0Y2hNYXNrOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAmJiAoIShkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0NPTlRST0xfSU5fRkxBU0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fQ09OVFJPTF9JTl9GTEFTSCkpCisgICAgZmxhc2hDb21tb25CaXRPcGVyYXRpb25DYWxsYmFjaygoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkwLCAwLCAwLCAwKTsKKyNlbmRpZgorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZURnhfTUNNX0ZMQVNIX0NBQ0hFX0NPTlRST0xTICovCisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hHZXRQcmVmZXRjaFNwZWN1bGF0aW9uKGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX3N0YXR1c190ICpzcGVjdWxhdGlvblN0YXR1cykKK3sKKyAgICBtZW1zZXQoc3BlY3VsYXRpb25TdGF0dXMsIDAsIHNpemVvZihmbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9zdGF0dXNfdCkpOworCisgICAgLyogQXNzdW1pbmcgdGhhdCBhbGwgc3BlY3VsYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gKi8KKyAgICBzcGVjdWxhdGlvblN0YXR1cy0+aW5zdHJ1Y3Rpb25PcHRpb24gPSBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZTsKKyAgICBzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlOworCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NQ00KKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhbHVlOworI2lmIGRlZmluZWQoTUNNKQorICAgICAgICB2YWx1ZSA9IE1DTS0+UExBQ1I7CisjZWxpZiBkZWZpbmVkKE1DTTApCisgICAgICAgIHZhbHVlID0gTUNNMC0+UExBQ1I7CisjZW5kaWYKKyAgICAgICAgaWYgKHZhbHVlICYgTUNNX1BMQUNSX0RGQ1NfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogU3BlY3VsYXRpb24gYnVmZmVyIGlzIG9mZi4gKi8KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uU3RhdHVzLT5pbnN0cnVjdGlvbk9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uU3RhdHVzLT5kYXRhT3B0aW9uID0ga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25EaXNhYmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogU3BlY3VsYXRpb24gYnVmZmVyIGlzIG9uIGZvciBpbnN0cnVjdGlvbi4gKi8KKyAgICAgICAgICAgIGlmICghKHZhbHVlICYgTUNNX1BMQUNSX0VGRFNfTUFTSykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU3BlY3VsYXRpb24gYnVmZmVyIGlzIG9mZiBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbGlmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfRk1DCisgICAgeworICAgICAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICAgICAgdWludDMyX3QgYjBkcGVNYXNrLCBiMGlwZU1hc2s7CisjaWYgZGVmaW5lZChGTUNfUEZCMDFDUl9CMERQRV9NQVNLKQorICAgICAgICB2YWx1ZSA9IEZNQy0+UEZCMDFDUjsKKyAgICAgICAgYjBkcGVNYXNrID0gRk1DX1BGQjAxQ1JfQjBEUEVfTUFTSzsKKyAgICAgICAgYjBpcGVNYXNrID0gRk1DX1BGQjAxQ1JfQjBJUEVfTUFTSzsKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjBDUl9CMERQRV9NQVNLKQorICAgICAgICB2YWx1ZSA9IEZNQy0+UEZCMENSOworICAgICAgICBiMGRwZU1hc2sgPSBGTUNfUEZCMENSX0IwRFBFX01BU0s7CisgICAgICAgIGIwaXBlTWFzayA9IEZNQ19QRkIwQ1JfQjBJUEVfTUFTSzsKKyNlbmRpZgorICAgICAgICBpZiAoISh2YWx1ZSAmIGIwZHBlTWFzaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERvIG5vdCBwcmVmZXRjaCBpbiByZXNwb25zZSB0byBkYXRhIHJlZmVyZW5jZXMuICovCisgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoISh2YWx1ZSAmIGIwaXBlTWFzaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERvIG5vdCBwcmVmZXRjaCBpbiByZXNwb25zZSB0byBpbnN0cnVjdGlvbiBmZXRjaGVzLiAqLworICAgICAgICAgICAgc3BlY3VsYXRpb25TdGF0dXMtPmluc3RydWN0aW9uT3B0aW9uID0ga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25EaXNhYmxlOworICAgICAgICB9CisgICAgfQorI2VsaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNCisgICAgeworICAgICAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICAgICAgdWludDMyX3QgZmxhc2hTcGVjdWxhdGlvbk1hc2ssIGRhdGFQcmVmZXRjaE1hc2s7CisgICAgICAgIHZhbHVlID0gTVNDTS0+T0NNRFJbMF07CisgICAgICAgIGZsYXNoU3BlY3VsYXRpb25NYXNrID0gTVNDTV9PQ01EUl9PQ01DMV9ERkNTX01BU0s7CisgICAgICAgIGRhdGFQcmVmZXRjaE1hc2sgPSBNU0NNX09DTURSX09DTUMxX0RGRFNfTUFTSzsKKworICAgICAgICBpZiAodmFsdWUgJiBmbGFzaFNwZWN1bGF0aW9uTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgLyogU3BlY3VsYXRpb24gYnVmZmVyIGlzIG9mZi4gKi8KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uU3RhdHVzLT5pbnN0cnVjdGlvbk9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uU3RhdHVzLT5kYXRhT3B0aW9uID0ga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25EaXNhYmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogU3BlY3VsYXRpb24gYnVmZmVyIGlzIG9uIGZvciBpbnN0cnVjdGlvbi4gKi8KKyAgICAgICAgICAgIGlmICh2YWx1ZSAmIGRhdGFQcmVmZXRjaE1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU3BlY3VsYXRpb24gYnVmZmVyIGlzIG9mZiBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvblN0YXR1cy0+ZGF0YU9wdGlvbiA9IGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorLyohCisgKiBAYnJpZWYgQ29weSBQSUMgb2YgZmxhc2hfcnVuX2NvbW1hbmQoKSB0byBSQU0KKyAqLworc3RhdGljIHZvaWQgY29weV9mbGFzaF9ydW5fY29tbWFuZCh1aW50MzJfdCAqZmxhc2hSdW5Db21tYW5kKQoreworICAgIGFzc2VydChzaXplb2Yoc19mbGFzaFJ1bkNvbW1hbmRGdW5jdGlvbkNvZGUpIDw9IChrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3JkcyAqIDQpKTsKKworICAgIC8qIFNpbmNlIHRoZSB2YWx1ZSBvZiBBUk0gZnVuY3Rpb24gcG9pbnRlciBpcyBhbHdheXMgb2RkLCBidXQgdGhlIHJlYWwgc3RhcnQgYWRkcmVzcworICAgICAqIG9mIGZ1bmN0aW9uIG1lbW9yeSBzaG91bGQgYmUgZXZlbiwgdGhhdCdzIHdoeSArMSBvcGVyYXRpb24gZXhpc3QuICovCisgICAgbWVtY3B5KCh2b2lkICopZmxhc2hSdW5Db21tYW5kLCAodm9pZCAqKXNfZmxhc2hSdW5Db21tYW5kRnVuY3Rpb25Db2RlLCBzaXplb2Yoc19mbGFzaFJ1bkNvbW1hbmRGdW5jdGlvbkNvZGUpKTsKKyAgICBjYWxsRmxhc2hSdW5Db21tYW5kID0gKHZvaWQgKCopKEZURnhfUkVHOF9BQ0NFU1NfVFlQRSBmdGZ4X2ZzdGF0KSkoKHVpbnQzMl90KWZsYXNoUnVuQ29tbWFuZCArIDEpOworfQorI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCisvKiEKKyAqIEBicmllZiBGbGFzaCBDb21tYW5kIFNlcXVlbmNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQgd3JpdGUgc2VxdWVuY2UgdG8gdGhlIGZsYXNoLgorICoKKyAqIEBwYXJhbSBkcml2ZXIgUG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcmV0dXJuIEFuIGVycm9yIGNvZGUgb3Iga1N0YXR1c19GTEFTSF9TdWNjZXNzCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9jb21tYW5kX3NlcXVlbmNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgdWludDhfdCByZWdpc3RlclZhbHVlOworCisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCisgICAgLyogY2xlYXIgUkRDT0xFUlIgJiBBQ0NFUlIgJiBGUFZJT0wgZmxhZyBpbiBmbGFzaCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgICBGVEZ4LT5GU1RBVCA9IEZURnhfRlNUQVRfUkRDT0xFUlJfTUFTSyB8IEZURnhfRlNUQVRfQUNDRVJSX01BU0sgfCBGVEZ4X0ZTVEFUX0ZQVklPTF9NQVNLOworCisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2luZm8oY29uZmlnKTsKKyAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzICE9IHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICB9CisKKyAgICAvKiBXZSBwYXNzIHRoZSBmdGZ4X2ZzdGF0IGFkZHJlc3MgYXMgYSBwYXJhbWV0ZXIgdG8gZmxhc2hfcnVuX2NvbWFtbmQoKSBpbnN0ZWFkIG9mIHVzaW5nCisgICAgICogcHJlLXByb2Nlc3NlZCBNSUNSTyBzZW50ZW5jZXMgb3Igb3BlcmF0aW5nIGdsb2JhbCB2YXJpYWJsZSBpbiBmbGFzaF9ydW5fY29tYW1uZCgpCisgICAgICogdG8gbWFrZSBzdXJlIHRoYXQgZmxhc2hfcnVuX2NvbW1hbmQoKSB3aWxsIGJlIGNvbXBpbGVkIGludG8gcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKS4gKi8KKyAgICBjYWxsRmxhc2hSdW5Db21tYW5kKChGVEZ4X1JFRzhfQUNDRVNTX1RZUEUpKCZGVEZ4LT5GU1RBVCkpOworI2Vsc2UKKyAgICAvKiBjbGVhciBSRENPTEVSUiAmIEFDQ0VSUiAmIEZQVklPTCBmbGFnIGluIGZsYXNoIHN0YXR1cyByZWdpc3RlciAqLworICAgIEZURngtPkZTVEFUID0gRlRGeF9GU1RBVF9SRENPTEVSUl9NQVNLIHwgRlRGeF9GU1RBVF9BQ0NFUlJfTUFTSyB8IEZURnhfRlNUQVRfRlBWSU9MX01BU0s7CisKKyAgICAvKiBjbGVhciBDQ0lGIGJpdCAqLworICAgIEZURngtPkZTVEFUID0gRlRGeF9GU1RBVF9DQ0lGX01BU0s7CisKKyAgICAvKiBDaGVjayBDQ0lGIGJpdCBvZiB0aGUgZmxhc2ggc3RhdHVzIHJlZ2lzdGVyLCB3YWl0IHRpbGwgaXQgaXMgc2V0LgorICAgICAqIElQIHRlYW0gaW5kaWNhdGVzIHRoYXQgdGhpcyBsb29wIHdpbGwgYWx3YXlzIGNvbXBsZXRlLiAqLworICAgIHdoaWxlICghKEZURngtPkZTVEFUICYgRlRGeF9GU1RBVF9DQ0lGX01BU0spKQorICAgIHsKKyAgICB9CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisKKyAgICAvKiBDaGVjayBlcnJvciBiaXRzICovCisgICAgLyogR2V0IGZsYXNoIHN0YXR1cyByZWdpc3RlciB2YWx1ZSAqLworICAgIHJlZ2lzdGVyVmFsdWUgPSBGVEZ4LT5GU1RBVDsKKworICAgIC8qIGNoZWNraW5nIGFjY2VzcyBlcnJvciAqLworICAgIGlmIChyZWdpc3RlclZhbHVlICYgRlRGeF9GU1RBVF9BQ0NFUlJfTUFTSykKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yOworICAgIH0KKyAgICAvKiBjaGVja2luZyBwcm90ZWN0aW9uIGVycm9yICovCisgICAgZWxzZSBpZiAocmVnaXN0ZXJWYWx1ZSAmIEZURnhfRlNUQVRfRlBWSU9MX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uOworICAgIH0KKyAgICAvKiBjaGVja2luZyBNR1NUQVQwIG5vbi1jb3JyZWN0YWJsZSBlcnJvciAqLworICAgIGVsc2UgaWYgKHJlZ2lzdGVyVmFsdWUgJiBGVEZ4X0ZTVEFUX01HU1RBVDBfTUFTSykKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworICAgIH0KK30KKworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorLyohCisgKiBAYnJpZWYgQ29weSBQSUMgb2YgZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24oKSB0byBSQU0KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfZmxhc2hfY29tbW9uX2JpdF9vcGVyYXRpb24odWludDMyX3QgKmZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKQoreworICAgIGFzc2VydChzaXplb2Yoc19mbGFzaENvbW1vbkJpdE9wZXJhdGlvbkZ1bmN0aW9uQ29kZSkgPD0gKGtGTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk1heFNpemVJbldvcmRzICogNCkpOworCisgICAgLyogU2luY2UgdGhlIHZhbHVlIG9mIEFSTSBmdW5jdGlvbiBwb2ludGVyIGlzIGFsd2F5cyBvZGQsIGJ1dCB0aGUgcmVhbCBzdGFydCBhZGRyZXNzCisgICAgICogb2YgZnVuY3Rpb24gbWVtb3J5IHNob3VsZCBiZSBldmVuLCB0aGF0J3Mgd2h5ICsxIG9wZXJhdGlvbiBleGlzdC4gKi8KKyAgICBtZW1jcHkoKHZvaWQgKilmbGFzaENvbW1vbkJpdE9wZXJhdGlvbiwgKHZvaWQgKilzX2ZsYXNoQ29tbW9uQml0T3BlcmF0aW9uRnVuY3Rpb25Db2RlLAorICAgICAgICAgICBzaXplb2Yoc19mbGFzaENvbW1vbkJpdE9wZXJhdGlvbkZ1bmN0aW9uQ29kZSkpOworICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbiA9ICh2b2lkICgqKShGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFIGJhc2UsIHVpbnQzMl90IGJpdE1hc2ssIHVpbnQzMl90IGJpdFNoaWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRWYWx1ZSkpKCh1aW50MzJfdClmbGFzaENvbW1vbkJpdE9wZXJhdGlvbiArIDEpOworICAgIC8qIFdvcmtyb3VuZCBmb3Igc29tZSBkZXZpY2VzIHdoaWNoIGRvZXNuJ3QgbmVlZCB0aGlzIGZ1bmN0aW9uICovCisgICAgY2FsbEZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKTAsIDAsIDAsIDApOworfQorI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCisjaWYgRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9NQ00KKy8qISBAYnJpZWYgUGVyZm9ybXMgdGhlIGNhY2hlIGNsZWFyIHRvIHRoZSBmbGFzaCBieSBNQ00uKi8KK3ZvaWQgbWNtX2ZsYXNoX2NhY2hlX2NsZWFyKGZsYXNoX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJk1DTTBfQ0FDSEVfUkVHOworCisjaWYgZGVmaW5lZChNQ00wKSAmJiBkZWZpbmVkKE1DTTEpCisgICAgaWYgKGNvbmZpZy0+Rmxhc2hDYWNoZUNvbnRyb2xsZXJJbmRleCA9PSAodWludDhfdClrRkxBU0hfQ2FjaGVDb250cm9sbGVySW5kZXhGb3JDb3JlMSkKKyAgICB7CisgICAgICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmTUNNMV9DQUNIRV9SRUc7CisgICAgfQorI2VuZGlmCisKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24ocmVnQmFzZSwgTUNNX0NBQ0hFX0NMRUFSX01BU0ssIE1DTV9DQUNIRV9DTEVBUl9TSElGVCwgMVUpOworI2Vsc2UgIC8qICFGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKyAgICAqcmVnQmFzZSB8PSBNQ01fQ0FDSEVfQ0xFQVJfTUFTSzsKKworICAgIC8qIE1lbW9yeSBiYXJyaWVycyBmb3IgZ29vZCBtZWFzdXJlLgorICAgICAqIEFsbCBDYWNoZSwgQnJhbmNoIHByZWRpY3RvciBhbmQgVExCIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUgKi8KKyAgICBfX0lTQigpOworICAgIF9fRFNCKCk7CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCit9CisjZW5kaWYgLyogRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9NQ00gKi8KKworI2lmIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfRk1DCisvKiEgQGJyaWVmIFBlcmZvcm1zIHRoZSBjYWNoZSBjbGVhciB0byB0aGUgZmxhc2ggYnkgRk1DLiovCit2b2lkIGZtY19mbGFzaF9jYWNoZV9jbGVhcih2b2lkKQoreworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorICAgIEZURnhfUkVHMzJfQUNDRVNTX1RZUEUgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKTA7CisjaWYgZGVmaW5lZChGTUNfUEZCMDFDUl9DSU5WX1dBWV9NQVNLKQorICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmRk1DLT5QRkIwMUNSOworICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbihyZWdCYXNlLCBGTUNfUEZCMDFDUl9DSU5WX1dBWV9NQVNLLCBGTUNfUEZCMDFDUl9DSU5WX1dBWV9TSElGVCwgMHhGVSk7CisjZWxzZQorICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmRk1DLT5QRkIwQ1I7CisgICAgY2FsbEZsYXNoQ29tbW9uQml0T3BlcmF0aW9uKHJlZ0Jhc2UsIEZNQ19QRkIwQ1JfQ0lOVl9XQVlfTUFTSywgRk1DX1BGQjBDUl9DSU5WX1dBWV9TSElGVCwgMHhGVSk7CisjZW5kaWYKKyNlbHNlIC8qICFGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKyNpZiBkZWZpbmVkKEZNQ19QRkIwMUNSX0NJTlZfV0FZX01BU0spCisgICAgRk1DLT5QRkIwMUNSID0gKEZNQy0+UEZCMDFDUiAmIH5GTUNfUEZCMDFDUl9DSU5WX1dBWV9NQVNLKSB8IEZNQ19QRkIwMUNSX0NJTlZfV0FZKH4wKTsKKyNlbHNlCisgICAgRk1DLT5QRkIwQ1IgPSAoRk1DLT5QRkIwQ1IgJiB+Rk1DX1BGQjBDUl9DSU5WX1dBWV9NQVNLKSB8IEZNQ19QRkIwQ1JfQ0lOVl9XQVkofjApOworI2VuZGlmCisgICAgLyogTWVtb3J5IGJhcnJpZXJzIGZvciBnb29kIG1lYXN1cmUuCisgICAgICogQWxsIENhY2hlLCBCcmFuY2ggcHJlZGljdG9yIGFuZCBUTEIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucyBiZWZvcmUgdGhpcyBpbnN0cnVjdGlvbiBjb21wbGV0ZSAqLworICAgIF9fSVNCKCk7CisgICAgX19EU0IoKTsKKyNlbmRpZiAvKiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KK30KKyNlbmRpZiAvKiBGTEFTSF9DQUNIRV9JU19DT05UUk9MTEVEX0JZX0ZNQyAqLworCisjaWYgRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNCisvKiEgQGJyaWVmIFBlcmZvcm1zIHRoZSBwcmVmZXRjaCBzcGVjdWxhdGlvbiBidWZmZXIgY2xlYXIgdG8gdGhlIGZsYXNoIGJ5IE1TQ00uKi8KK3ZvaWQgbXNjbV9mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9lbmFibGUoYm9vbCBlbmFibGUpCit7CisgICAgdWludDhfdCBzZXRWYWx1ZTsKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgc2V0VmFsdWUgPSAweDBVOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzZXRWYWx1ZSA9IDB4M1U7CisgICAgfQorCisvKiBUaGUgT0NNRFJbMF0gaXMgYWx3YXlzIHVzZWQgdG8gcHJlZmV0Y2ggbWFpbiBQZmxhc2gqLworLyogRm9yIGRldmljZSB3aXRoIEZsZXhOVk0gc3VwcG9ydCwgdGhlIE9DTURSWzFdIGlzIHVzZWQgdG8gcHJlZmV0Y2ggRGZsYXNoLgorICogRm9yIGRldmljZSB3aXRoIHNlY29uZGFyeSBmbGFzaCBzdXBwb3J0LCB0aGUgT0NNRFJbMV0gaXMgdXNlZCB0byBwcmVmZXRjaCBzZWNvbmRhcnkgUGZsYXNoLiAqLworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbigoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmTVNDTS0+T0NNRFJbMF0sIE1TQ01fU1BFQ1VMQVRJT05fRElTQUJMRV9NQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEVfU0hJRlQsIHNldFZhbHVlKTsKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEIHx8IEJMX0hBU19TRUNPTkRBUllfSU5URVJOQUxfRkxBU0gKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24oKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJk1TQ00tPk9DTURSWzFdLCBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEVfTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNDTV9TUEVDVUxBVElPTl9ESVNBQkxFX1NISUZULCBzZXRWYWx1ZSk7CisjZW5kaWYKKyNlbHNlIC8qICFGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgKi8KKyAgICBNU0NNLT5PQ01EUlswXSB8PSBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEUoc2V0VmFsdWUpOworCisgICAgLyogTWVtb3J5IGJhcnJpZXJzIGZvciBnb29kIG1lYXN1cmUuCisgICAgICogQWxsIENhY2hlLCBCcmFuY2ggcHJlZGljdG9yIGFuZCBUTEIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucyBiZWZvcmUgdGhpcyBpbnN0cnVjdGlvbiBjb21wbGV0ZSAqLworICAgIF9fSVNCKCk7CisgICAgX19EU0IoKTsKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEIHx8IEJMX0hBU19TRUNPTkRBUllfSU5URVJOQUxfRkxBU0gKKyAgICBNU0NNLT5PQ01EUlsxXSB8PSBNU0NNX1NQRUNVTEFUSU9OX0RJU0FCTEUoc2V0VmFsdWUpOworCisgICAgLyogRWFjaCBjYWhjZSBjbGVhciBpbnN0YXJ1Y3Rpb24gc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGJlbG93IGNvZGUqLworICAgIF9fSVNCKCk7CisgICAgX19EU0IoKTsKKyNlbmRpZgorCisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCit9CisjZW5kaWYgLyogRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9NU0NNICovCisKKyNpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX0ZNQworLyohIEBicmllZiBQZXJmb3JtcyB0aGUgcHJlZmV0Y2ggc3BlY3VsYXRpb24gYnVmZmVyIGNsZWFyIHRvIHRoZSBmbGFzaCBieSBGTUMuKi8KK3ZvaWQgZm1jX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX2NsZWFyKHZvaWQpCit7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCisgICAgRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpMDsKKyNpZiBkZWZpbmVkKEZNQ19QRkIwQ1JfU19JTlZfTUFTSykKKyAgICByZWdCYXNlID0gKEZURnhfUkVHMzJfQUNDRVNTX1RZUEUpJkZNQy0+UEZCMENSOworICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbihyZWdCYXNlLCBGTUNfUEZCMENSX1NfSU5WX01BU0ssIEZNQ19QRkIwQ1JfU19JTlZfU0hJRlQsIDFVKTsKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjBDUl9TX0JfSU5WX01BU0spCisgICAgcmVnQmFzZSA9IChGVEZ4X1JFRzMyX0FDQ0VTU19UWVBFKSZGTUMtPlBGQjBDUjsKKyAgICBjYWxsRmxhc2hDb21tb25CaXRPcGVyYXRpb24ocmVnQmFzZSwgRk1DX1BGQjBDUl9TX0JfSU5WX01BU0ssIEZNQ19QRkIwQ1JfU19CX0lOVl9TSElGVCwgMVUpOworI2VsaWYgZGVmaW5lZChGTUNfUEZCMDFDUl9TX0lOVl9NQVNLKQorICAgIHJlZ0Jhc2UgPSAoRlRGeF9SRUczMl9BQ0NFU1NfVFlQRSkmRk1DLT5QRkIwMUNSOworICAgIGNhbGxGbGFzaENvbW1vbkJpdE9wZXJhdGlvbihyZWdCYXNlLCBGTUNfUEZCMDFDUl9TX0lOVl9NQVNLLCBGTUNfUEZCMDFDUl9TX0lOVl9TSElGVCwgMVUpOworI2VuZGlmCisjZWxzZSAvKiAhRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCisjaWYgZGVmaW5lZChGTUNfUEZCMENSX1NfSU5WX01BU0spCisgICAgRk1DLT5QRkIwQ1IgfD0gRk1DX1BGQjBDUl9TX0lOVl9NQVNLOworI2VsaWYgZGVmaW5lZChGTUNfUEZCMENSX1NfQl9JTlZfTUFTSykKKyAgICBGTUMtPlBGQjBDUiB8PSBGTUNfUEZCMENSX1NfQl9JTlZfTUFTSzsKKyNlbGlmIGRlZmluZWQoRk1DX1BGQjAxQ1JfU19JTlZfTUFTSykKKyAgICBGTUMtPlBGQjAxQ1IgfD0gRk1DX1BGQjAxQ1JfU19JTlZfTUFTSzsKKyNlbmRpZgorICAgIC8qIE1lbW9yeSBiYXJyaWVycyBmb3IgZ29vZCBtZWFzdXJlLgorICAgICAqIEFsbCBDYWNoZSwgQnJhbmNoIHByZWRpY3RvciBhbmQgVExCIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgYmVmb3JlIHRoaXMgaW5zdHJ1Y3Rpb24gY29tcGxldGUgKi8KKyAgICBfX0lTQigpOworICAgIF9fRFNCKCk7CisjZW5kaWYgLyogRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UICovCit9CisjZW5kaWYgLyogRkxBU0hfUFJFRkVUQ0hfU1BFQ1VMQVRJT05fSVNfQ09OVFJPTExFRF9CWV9GTUMgKi8KKworLyohCisgKiBAYnJpZWYgRmxhc2ggQ2FjaGUgQ2xlYXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGVyZm9ybSB0aGUgY2FjaGUgYW5kIHByZWZldGNoIHNwZWN1bGF0aW9uIGNsZWFyIHRvIHRoZSBmbGFzaC4KKyAqLwordm9pZCBmbGFzaF9jYWNoZV9jbGVhcihmbGFzaF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoY29uZmlnLCBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQb3N0KTsKK30KKworLyohCisgKiBAYnJpZWYgRmxhc2ggQ2FjaGUgQ2xlYXIgUHJvY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwZXJmb3JtIHRoZSBjYWNoZSBhbmQgcHJlZmV0Y2ggc3BlY3VsYXRpb24gY2xlYXIgcHJvY2VzcyB0byB0aGUgZmxhc2guCisgKi8KK3N0YXRpYyB2b2lkIGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfY2FjaGVfY2xlYXJfcHJvY2Vzc190IHByb2Nlc3MpCit7CisjaWYgRkxBU0hfRFJJVkVSX0lTX0ZMQVNIX1JFU0lERU5UCisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZSA9IGZsYXNoX2NoZWNrX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2luZm8oY29uZmlnKTsKKyAgICBpZiAoa1N0YXR1c19GTEFTSF9TdWNjZXNzICE9IHJldHVybkNvZGUpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCisgICAgLyogV2UgcGFzcyB0aGUgZnRmeCByZWdpc3RlciBhZGRyZXNzIGFzIGEgcGFyYW1ldGVyIHRvIGZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKCkgaW5zdGVhZCBvZiB1c2luZworICAgICAqIHByZS1wcm9jZXNzZWQgTUFDUk9zIG9yIGEgZ2xvYmFsIHZhcmlhYmxlIGluIGZsYXNoX2NvbW1vbl9iaXRfb3BlcmF0aW9uKCkKKyAgICAgKiB0byBtYWtlIHN1cmUgdGhhdCBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbigpIHdpbGwgYmUgY29tcGlsZWQgaW50byBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIChQSUMpLiAqLworICAgIGlmIChwcm9jZXNzID09IGtGTEFTSF9DYWNoZUNsZWFyUHJvY2Vzc1Bvc3QpCisgICAgeworI2lmIEZMQVNIX0NBQ0hFX0lTX0NPTlRST0xMRURfQllfTUNNCisgICAgICAgIG1jbV9mbGFzaF9jYWNoZV9jbGVhcihjb25maWcpOworI2VuZGlmCisjaWYgRkxBU0hfQ0FDSEVfSVNfQ09OVFJPTExFRF9CWV9GTUMKKyAgICAgICAgZm1jX2ZsYXNoX2NhY2hlX2NsZWFyKCk7CisjZW5kaWYKKyNpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX01TQ00KKyAgICAgICAgbXNjbV9mbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9lbmFibGUodHJ1ZSk7CisjZW5kaWYKKyNpZiBGTEFTSF9QUkVGRVRDSF9TUEVDVUxBVElPTl9JU19DT05UUk9MTEVEX0JZX0ZNQworICAgICAgICBmbWNfZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fY2xlYXIoKTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAocHJvY2VzcyA9PSBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQcmUpCisgICAgeworI2lmIEZMQVNIX1BSRUZFVENIX1NQRUNVTEFUSU9OX0lTX0NPTlRST0xMRURfQllfTVNDTQorICAgICAgICBtc2NtX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX2VuYWJsZShmYWxzZSk7CisjZW5kaWYKKyAgICB9Cit9CisKKyNpZiBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQKKy8qISBAYnJpZWYgQ2hlY2sgd2hldGhlciBmbGFzaCBleGVjdXRlLWluLXJhbSBmdW5jdGlvbnMgYXJlIHJlYWR5ICAqLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX2V4ZWN1dGVfaW5fcmFtX2Z1bmN0aW9uX2luZm8oZmxhc2hfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBmbGFzaF9leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9jb25maWdfdCAqZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm87CisKKyAgICBpZiAoY29uZmlnID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8gPSAoZmxhc2hfZXhlY3V0ZV9pbl9yYW1fZnVuY3Rpb25fY29uZmlnX3QgKiljb25maWctPmZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvOworCisgICAgaWYgKChjb25maWctPmZsYXNoRXhlY3V0ZUluUmFtRnVuY3Rpb25JbmZvKSAmJgorICAgICAgICAoa0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uVG90YWxOdW0gPT0gZmxhc2hFeGVjdXRlSW5SYW1GdW5jdGlvbkluZm8tPmFjdGl2ZUZ1bmN0aW9uQ291bnQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5OworfQorI2VuZGlmIC8qIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAqLworCisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgcmFuZ2UgYW5kIGFsaWdubWVudCBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyByYW5nZS4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3JhbmdlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhcnRBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWxpZ25tZW50QmFzZWxpbmUpCit7CisgICAgaWYgKGNvbmZpZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIFZlcmlmeSB0aGUgc3RhcnQgYW5kIGxlbmd0aCBhcmUgYWxpZ25tZW50QmFzZWxpbmUgYWxpZ25lZC4gKi8KKyAgICBpZiAoKHN0YXJ0QWRkcmVzcyAmIChhbGlnbm1lbnRCYXNlbGluZSAtIDEpKSB8fCAobGVuZ3RoSW5CeXRlcyAmIChhbGlnbm1lbnRCYXNlbGluZSAtIDEpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yOworICAgIH0KKworICAgIC8qIGNoZWNrIGZvciB2YWxpZCByYW5nZSBvZiB0aGUgdGFyZ2V0IGFkZHJlc3NlcyAqLworICAgIGlmICgKKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECisgICAgICAgICgoc3RhcnRBZGRyZXNzID49IGNvbmZpZy0+REZsYXNoQmxvY2tCYXNlKSAmJgorICAgICAgICAgKChzdGFydEFkZHJlc3MgKyBsZW5ndGhJbkJ5dGVzKSA8PSAoY29uZmlnLT5ERmxhc2hCbG9ja0Jhc2UgKyBjb25maWctPkRGbGFzaFRvdGFsU2l6ZSkpKSB8fAorI2VuZGlmCisgICAgICAgICgoc3RhcnRBZGRyZXNzID49IGNvbmZpZy0+UEZsYXNoQmxvY2tCYXNlKSAmJgorICAgICAgICAgKChzdGFydEFkZHJlc3MgKyBsZW5ndGhJbkJ5dGVzKSA8PSAoY29uZmlnLT5QRmxhc2hCbG9ja0Jhc2UgKyBjb25maWctPlBGbGFzaFRvdGFsU2l6ZSkpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yOworfQorCisvKiEgQGJyaWVmIEdldHMgdGhlIHJpZ2h0IGFkZHJlc3MsIHNlY3RvciBhbmQgYmxvY2sgc2l6ZSBvZiBjdXJyZW50IGZsYXNoIHR5cGUgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IGFkZHJlc3MuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9nZXRfbWF0Y2hlZF9vcGVyYXRpb25faW5mbyhmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfb3BlcmF0aW9uX2NvbmZpZ190ICppbmZvKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDbGVhbiB1cCBpbmZvIFN0cnVjdHVyZSovCisgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZihmbGFzaF9vcGVyYXRpb25fY29uZmlnX3QpKTsKKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKKyAgICBpZiAoKGFkZHJlc3MgPj0gY29uZmlnLT5ERmxhc2hCbG9ja0Jhc2UpICYmIChhZGRyZXNzIDw9IChjb25maWctPkRGbGFzaEJsb2NrQmFzZSArIGNvbmZpZy0+REZsYXNoVG90YWxTaXplKSkpCisgICAgeworICAgICAgICAvKiBXaGVuIHJlcXVpcmVkIGJ5IHRoZSBjb21tYW5kLCBhZGRyZXNzIGJpdCAyMyBzZWxlY3RzIGJldHdlZW4gcHJvZ3JhbSBmbGFzaCBtZW1vcnkKKyAgICAgICAgICogKD0wKSBhbmQgZGF0YSBmbGFzaCBtZW1vcnkgKD0xKS4qLworICAgICAgICBpbmZvLT5jb252ZXJ0ZWRBZGRyZXNzID0gYWRkcmVzcyAtIGNvbmZpZy0+REZsYXNoQmxvY2tCYXNlICsgMHg4MDAwMDBVOworICAgICAgICBpbmZvLT5hY3RpdmVTZWN0b3JTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfU0VDVE9SX1NJWkU7CisgICAgICAgIGluZm8tPmFjdGl2ZUJsb2NrU2l6ZSA9IGNvbmZpZy0+REZsYXNoVG90YWxTaXplIC8gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfQ09VTlQ7CisKKyAgICAgICAgaW5mby0+YmxvY2tXcml0ZVVuaXRTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fQkxPQ0tfV1JJVEVfVU5JVF9TSVpFOworICAgICAgICBpbmZvLT5zZWN0b3JDbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9TRUNUT1JfQ01EX0FERFJFU1NfQUxJR01FTlQ7CisgICAgICAgIGluZm8tPnNlY3Rpb25DbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9TRUNUSU9OX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgICAgICBpbmZvLT5yZXNvdXJjZUNtZEFkZHJlc3NBbGlnbWVudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX1JFU09VUkNFX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgICAgICBpbmZvLT5jaGVja0NtZEFkZHJlc3NBbGlnbWVudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0NIRUNLX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRCAqLworICAgIHsKKyAgICAgICAgaW5mby0+Y29udmVydGVkQWRkcmVzcyA9IGFkZHJlc3MgLSBjb25maWctPlBGbGFzaEJsb2NrQmFzZTsKKyAgICAgICAgaW5mby0+YWN0aXZlU2VjdG9yU2l6ZSA9IGNvbmZpZy0+UEZsYXNoU2VjdG9yU2l6ZTsKKyAgICAgICAgaW5mby0+YWN0aXZlQmxvY2tTaXplID0gY29uZmlnLT5QRmxhc2hUb3RhbFNpemUgLyBjb25maWctPlBGbGFzaEJsb2NrQ291bnQ7CisjaWYgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVECisgICAgICAgIGlmIChjb25maWctPkZsYXNoTWVtb3J5SW5kZXggPT0gKHVpbnQ4X3Qpa0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2gpCisgICAgICAgIHsKKyNpZiBGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX1BST1RFQ1RJT05fUkVHSVNURVIgfHwgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9BQ0NFU1NfUkVHSVNURVIKKyAgICAgICAgICAgIC8qIFdoZW4gcmVxdWlyZWQgYnkgdGhlIGNvbW1hbmQsIGFkZHJlc3MgYml0IDIzIHNlbGVjdHMgYmV0d2VlbiBtYWluIGZsYXNoIG1lbW9yeQorICAgICAgICAgICAgICogKD0wKSBhbmQgc2Vjb25kYXJ5IGZsYXNoIG1lbW9yeSAoPTEpLiovCisgICAgICAgICAgICBpbmZvLT5jb252ZXJ0ZWRBZGRyZXNzICs9IDB4ODAwMDAwVTsKKyNlbmRpZgorICAgICAgICAgICAgaW5mby0+YmxvY2tXcml0ZVVuaXRTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfQkxPQ0tfV1JJVEVfVU5JVF9TSVpFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgaW5mby0+YmxvY2tXcml0ZVVuaXRTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1dSSVRFX1VOSVRfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGluZm8tPnNlY3RvckNtZEFkZHJlc3NBbGlnbWVudCA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TRUNUT1JfQ01EX0FERFJFU1NfQUxJR01FTlQ7CisgICAgICAgIGluZm8tPnNlY3Rpb25DbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU0VDVElPTl9DTURfQUREUkVTU19BTElHTUVOVDsKKyAgICAgICAgaW5mby0+cmVzb3VyY2VDbWRBZGRyZXNzQWxpZ21lbnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUkVTT1VSQ0VfQ01EX0FERFJFU1NfQUxJR01FTlQ7CisgICAgICAgIGluZm8tPmNoZWNrQ21kQWRkcmVzc0FsaWdtZW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0NIRUNLX0NNRF9BRERSRVNTX0FMSUdNRU5UOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSBnaXZlbiB1c2VyIGtleSBmb3IgZmxhc2ggZXJhc2UgQVBJcy4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3VzZXJfa2V5KHVpbnQzMl90IGtleSkKK3sKKyAgICAvKiBWYWxpZGF0ZSB0aGUgdXNlciBrZXkgKi8KKyAgICBpZiAoa2V5ICE9IGtGTEFTSF9BcGlFcmFzZUtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0VyYXNlS2V5RXJyb3I7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKworI2lmIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQKKy8qISBAYnJpZWYgVXBkYXRlcyBGbGV4TlZNIG1lbW9yeSBwYXJ0aXRpb24gc3RhdHVzIGFjY29yZGluZyB0byBkYXRhIGZsYXNoIDAgSUZSLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfdXBkYXRlX2ZsZXhudm1fbWVtb3J5X3BhcnRpdGlvbl9zdGF0dXMoZmxhc2hfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHJlc2VydmVkMDsKKyAgICAgICAgdWludDhfdCBGbGV4TlZNUGFydGl0aW9uQ29kZTsKKyAgICAgICAgdWludDhfdCBFRVBST01EYXRhU2V0U2l6ZTsKKyAgICAgICAgdWludDE2X3QgcmVzZXJ2ZWQxOworICAgIH0gZGF0YUlGUlJlYWRPdXQ7CisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01ECisgICAgLyogR2V0IEZsZXhOVk0gbWVtb3J5IHBhcnRpdGlvbiBpbmZvIGZyb20gZGF0YSBmbGFzaCBJRlIgKi8KKyAgICByZXR1cm5Db2RlID0gRkxBU0hfUmVhZFJlc291cmNlKGNvbmZpZywgREZMQVNIX0lGUl9SRUFEUkVTT1VSQ0VfU1RBUlRfQUREUkVTUywgKHVpbnQzMl90ICopJmRhdGFJRlJSZWFkT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGFJRlJSZWFkT3V0KSwga0ZMQVNIX1Jlc291cmNlT3B0aW9uRmxhc2hJZnIpOworICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1BhcnRpdGlvblN0YXR1c1VwZGF0ZUZhaWx1cmU7CisgICAgfQorI2Vsc2UKKyNlcnJvciAiQ2Fubm90IGdldCBGbGV4TlZNIG1lbW9yeSBwYXJ0aXRpb24gaW5mbyIKKyNlbmRpZgorCisgICAgLyogRmlsbCBvdXQgcGFydGl0aW9uZWQgRUVQUk9NIHNpemUgKi8KKyAgICBkYXRhSUZSUmVhZE91dC5FRVBST01EYXRhU2V0U2l6ZSAmPSAweDBGVTsKKyAgICBzd2l0Y2ggKGRhdGFJRlJSZWFkT3V0LkVFUFJPTURhdGFTZXRTaXplKQorICAgIHsKKyAgICAgICAgY2FzZSAweDAwVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAwMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDFVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMDAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwMlU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAwMTA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDAzVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDAxMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDRVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNVU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzAxMDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA2VToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMDExMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDdVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8wMTExOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwOFU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA5VToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTAwMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MEFVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMDEwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwQlU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzEwMTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDBDVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTEwMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MERVOgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV8xMTAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwRVU6CisgICAgICAgICAgICBjb25maWctPkVFcHJvbVRvdGFsU2l6ZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0VFUFJPTV9TSVpFX0ZPUl9FRUVTSVpFXzExMTA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDBGVToKKyAgICAgICAgICAgIGNvbmZpZy0+RUVwcm9tVG90YWxTaXplID0gRlNMX0ZFQVRVUkVfRkxBU0hfRkxFWF9OVk1fRUVQUk9NX1NJWkVfRk9SX0VFRVNJWkVfMTExMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29uZmlnLT5FRXByb21Ub3RhbFNpemUgPSBGTEVYX05WTV9FRVBST01fU0laRV9GT1JfRUVFU0laRV9SRVNFUlZFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIEZpbGwgb3V0IHBhcnRpdGlvbmVkIERGbGFzaCBzaXplICovCisgICAgZGF0YUlGUlJlYWRPdXQuRmxleE5WTVBhcnRpdGlvbkNvZGUgJj0gMHgwRlU7CisgICAgc3dpdGNoIChkYXRhSUZSUmVhZE91dC5GbGV4TlZNUGFydGl0aW9uQ29kZSkKKyAgICB7CisgICAgICAgIGNhc2UgMHgwMFU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwMVU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMDE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAwMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwMlU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwM1U6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAwMTE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDAxMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNFU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDEwMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDEwMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNVU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDEwMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMDE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDEwMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNlU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwN1U6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzAxMTE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMDExMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwOFU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwOVU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMDE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAwMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwQVU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAxMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAxMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwQlU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAxMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzEwMTE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTAxMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwQ1U6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwRFU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMDE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTEwMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwRVU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMCAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTA7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwRlU6CisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMSAhPSAweEZGRkZGRkZGKQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9GTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUXzExMTE7CisjZWxzZQorICAgICAgICAgICAgY29uZmlnLT5ERmxhc2hUb3RhbFNpemUgPSBGTEVYX05WTV9ERkxBU0hfU0laRV9GT1JfREVQQVJUX1JFU0VSVkVEOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0ZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfMTExMSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb25maWctPkRGbGFzaFRvdGFsU2l6ZSA9IEZMRVhfTlZNX0RGTEFTSF9TSVpFX0ZPUl9ERVBBUlRfUkVTRVJWRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9TdWNjZXNzOworfQorI2VuZGlmIC8qIEZMQVNIX1NTRF9JU19GTEVYTlZNX0VOQUJMRUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSByYW5nZSBvZiB0aGUgZ2l2ZW4gcmVzb3VyY2UgYWRkcmVzcy4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3Jlc291cmNlX3JhbmdlKHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWxpZ25tZW50QmFzZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfcmVhZF9yZXNvdXJjZV9vcHRpb25fdCBvcHRpb24pCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworICAgIHVpbnQzMl90IG1heFJlYWRibGVBZGRyZXNzOworCisgICAgaWYgKChzdGFydCAmIChhbGlnbm1lbnRCYXNlbGluZSAtIDEpKSB8fCAobGVuZ3RoSW5CeXRlcyAmIChhbGlnbm1lbnRCYXNlbGluZSAtIDEpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yOworICAgIH0KKworICAgIHN0YXR1cyA9IGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKKworICAgIG1heFJlYWRibGVBZGRyZXNzID0gc3RhcnQgKyBsZW5ndGhJbkJ5dGVzIC0gMTsKKyAgICBpZiAob3B0aW9uID09IGtGTEFTSF9SZXNvdXJjZU9wdGlvblZlcnNpb25JZCkKKyAgICB7CisgICAgICAgIGlmICgoc3RhcnQgIT0ga0ZMQVNIX1Jlc291cmNlUmFuZ2VWZXJzaW9uSWRTdGFydCkgfHwKKyAgICAgICAgICAgICgoc3RhcnQgKyBsZW5ndGhJbkJ5dGVzIC0gMSkgIT0ga0ZMQVNIX1Jlc291cmNlUmFuZ2VWZXJzaW9uSWRFbmQpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChvcHRpb24gPT0ga0ZMQVNIX1Jlc291cmNlT3B0aW9uRmxhc2hJZnIpCisgICAgeworICAgICAgICBpZiAobWF4UmVhZGJsZUFkZHJlc3MgPCBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaElmclNpemVJbkJ5dGVzKQorICAgICAgICB7CisgICAgICAgIH0KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQCisgICAgICAgIGVsc2UgaWYgKChzdGFydCA+PSBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCkgJiYKKyAgICAgICAgICAgICAgICAgKG1heFJlYWRibGVBZGRyZXNzIDw9IGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoU3dhcElmckVuZCkpCisgICAgICAgIHsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUCAqLworICAgICAgICBlbHNlIGlmICgoc3RhcnQgPj0ga0ZMQVNIX1Jlc291cmNlUmFuZ2VEZmxhc2hJZnJTdGFydCkgJiYKKyAgICAgICAgICAgICAgICAgKG1heFJlYWRibGVBZGRyZXNzIDw9IGtGTEFTSF9SZXNvdXJjZVJhbmdlRGZsYXNoSWZyRW5kKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUkVBRF9SRVNPVVJDRV9DTUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01ECisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgZ2l2ZWQgc3dhcCBjb250cm9sIG9wdGlvbi4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX2NoZWNrX3N3YXBfY29udHJvbF9vcHRpb24oZmxhc2hfc3dhcF9jb250cm9sX29wdGlvbl90IG9wdGlvbikKK3sKKyAgICBpZiAoKG9wdGlvbiA9PSBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25JbnRpYWxpemVTeXN0ZW0pIHx8IChvcHRpb24gPT0ga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uU2V0SW5VcGRhdGVTdGF0ZSkgfHwKKyAgICAgICAgKG9wdGlvbiA9PSBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25TZXRJbkNvbXBsZXRlU3RhdGUpIHx8IChvcHRpb24gPT0ga0ZMQVNIX1N3YXBDb250cm9sT3B0aW9uUmVwb3J0U3RhdHVzKSB8fAorICAgICAgICAob3B0aW9uID09IGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvbkRpc2FibGVTeXN0ZW0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQ7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BGTEFTSF9CTE9DS19TV0FQKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVAKKy8qISBAYnJpZWYgVmFsaWRhdGVzIHRoZSBnaXZlZCBhZGRyZXNzIHRvIHNlZSBpZiBpdCBpcyBlcXVhbCB0byBzd2FwIGluZGljYXRvciBhZGRyZXNzIGluIHBmbGFzaCBzd2FwIElGUi4qLworc3RhdGljIHN0YXR1c190IGZsYXNoX3ZhbGlkYXRlX3N3YXBfaW5kaWNhdG9yX2FkZHJlc3MoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBmbGFzaF9zd2FwX2lmcl9maWVsZF9kYXRhX3QgZmxhc2hTd2FwSWZyRmllbGREYXRhOworICAgIHVpbnQzMl90IHN3YXBJbmRpY2F0b3JBZGRyZXNzOworCisgICAgc3RhdHVzX3QgcmV0dXJuQ29kZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01ECisgICAgcmV0dXJuQ29kZSA9CisgICAgICAgIEZMQVNIX1JlYWRSZXNvdXJjZShjb25maWcsIGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoU3dhcElmclN0YXJ0LCBmbGFzaFN3YXBJZnJGaWVsZERhdGEuZmxhc2hTd2FwSWZyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmbGFzaFN3YXBJZnJGaWVsZERhdGEuZmxhc2hTd2FwSWZyRGF0YSksIGtGTEFTSF9SZXNvdXJjZU9wdGlvbkZsYXNoSWZyKTsKKworICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICAvKiBGcm9tIFJNLCB0aGUgYWN0dWFsIGluZm8gYXJlIHN0b3JlZCBpbiBGQ0NPQjYsNyAqLworICAgICAgICB1aW50MzJfdCByZXR1cm5WYWx1ZVsyXTsKKyAgICAgICAgcmV0dXJuQ29kZSA9IEZMQVNIX1JlYWRPbmNlKGNvbmZpZywga0ZMQVNIX1JlY29yZEluZGV4U3dhcEFkZHIsIHJldHVyblZhbHVlLCA0KTsKKyAgICAgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICAgICAgfQorICAgICAgICBmbGFzaFN3YXBJZnJGaWVsZERhdGEuZmxhc2hTd2FwSWZyRmllbGQuc3dhcEluZGljYXRvckFkZHJlc3MgPSAodWludDE2X3QpcmV0dXJuVmFsdWVbMF07CisgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9SZWFkT25jZShjb25maWcsIGtGTEFTSF9SZWNvcmRJbmRleFN3YXBFbmFibGUsIHJldHVyblZhbHVlLCA0KTsKKyAgICAgICAgaWYgKHJldHVybkNvZGUgIT0ga1N0YXR1c19GTEFTSF9TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICAgICAgfQorICAgICAgICBmbGFzaFN3YXBJZnJGaWVsZERhdGEuZmxhc2hTd2FwSWZyRmllbGQuc3dhcEVuYWJsZVdvcmQgPSAodWludDE2X3QpcmV0dXJuVmFsdWVbMF07CisgICAgICAgIHJldHVybkNvZGUgPSBGTEFTSF9SZWFkT25jZShjb25maWcsIGtGTEFTSF9SZWNvcmRJbmRleFN3YXBEaXNhYmxlLCByZXR1cm5WYWx1ZSwgNCk7CisgICAgICAgIGlmIChyZXR1cm5Db2RlICE9IGtTdGF0dXNfRkxBU0hfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgIH0KKyAgICAgICAgZmxhc2hTd2FwSWZyRmllbGREYXRhLmZsYXNoU3dhcElmckZpZWxkLnN3YXBEaXNhYmxlV29yZCA9ICh1aW50MTZfdClyZXR1cm5WYWx1ZVswXTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFRoZSBoaWdoIGJpdHMgdmFsdWUgb2YgU3dhcCBJbmRpY2F0b3IgQWRkcmVzcyBpcyBzdG9yZWQgaW4gUHJvZ3JhbSBGbGFzaCBTd2FwIElGUiBGaWVsZCwKKyAgICAgKiB0aGUgbG93IHNldmVydmFsIGJpdCB2YWx1ZSBvZiBTd2FwIEluZGljYXRvciBBZGRyZXNzIGlzIGFsd2F5cyAxJ2IwICovCisgICAgc3dhcEluZGljYXRvckFkZHJlc3MgPSAodWludDMyX3QpZmxhc2hTd2FwSWZyRmllbGREYXRhLmZsYXNoU3dhcElmckZpZWxkLnN3YXBJbmRpY2F0b3JBZGRyZXNzICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TV0FQX0NPTlRST0xfQ01EX0FERFJFU1NfQUxJR01FTlQ7CisgICAgaWYgKGFkZHJlc3MgIT0gc3dhcEluZGljYXRvckFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GTEFTSF9Td2FwSW5kaWNhdG9yQWRkcmVzc0Vycm9yOworICAgIH0KKworICAgIHJldHVybiByZXR1cm5Db2RlOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfU0VUX0ZMRVhSQU1fRlVOQ1RJT05fQ01ECisvKiEgQGJyaWVmIFZhbGlkYXRlcyB0aGUgZ2l2ZWQgZmxleHJhbSBmdW5jdGlvbiBvcHRpb24uKi8KK3N0YXRpYyBpbmxpbmUgc3RhdHVzX3QgZmxhc25fY2hlY2tfZmxleHJhbV9mdW5jdGlvbl9vcHRpb25fcmFuZ2UoZmxhc2hfZmxleHJhbV9mdW5jdGlvbl9vcHRpb25fdCBvcHRpb24pCit7CisgICAgaWYgKChvcHRpb24gIT0ga0ZMQVNIX0ZsZXhyYW1GdW5jdGlvbk9wdGlvbkF2YWlsYWJsZUFzUmFtKSAmJgorICAgICAgICAob3B0aW9uICE9IGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVGb3JFZXByb20pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NFVF9GTEVYUkFNX0ZVTkNUSU9OX0NNRCAqLworCisvKiEgQGJyaWVmIEdldHMgdGhlIGZsYXNoIHByb3RlY3Rpb24gaW5mb3JtYXRpb24gKHJlZ2lvbiBzaXplLCByZWdpb24gY291bnQpLiovCitzdGF0aWMgc3RhdHVzX3QgZmxhc2hfZ2V0X3Byb3RlY3Rpb25faW5mbyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9wcm90ZWN0aW9uX2NvbmZpZ190ICppbmZvKQoreworICAgIHVpbnQzMl90IHBmbGFzaFRvdGFsU2l6ZTsKKworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDbGVhbiB1cCBpbmZvIFN0cnVjdHVyZSovCisgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZihmbGFzaF9wcm90ZWN0aW9uX2NvbmZpZ190KSk7CisKKy8qIE5vdGU6IEtXNDAgaGFzIGEgc2Vjb25kYXJ5IGZsYXNoLCBidXQgaXQgZG9lc24ndCBoYXZlIGluZGVwZW5kZW50IHByb3RlY3Rpb24gcmVnaXN0ZXIqLworI2lmIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAmJiAoIUZMQVNIX1NTRF9TRUNPTkRBUllfRkxBU0hfSEFTX0lUU19PV05fUFJPVEVDVElPTl9SRUdJU1RFUikKKyAgICBwZmxhc2hUb3RhbFNpemUgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ09VTlQgKiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRSArCisgICAgICAgICAgICAgICAgICAgICAgRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfQkxPQ0tfQ09VTlQgKiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfMV9CTE9DS19TSVpFOworICAgIGluZm8tPnJlZ2lvbkJhc2UgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfU1RBUlRfQUREUkVTUzsKKyNlbHNlCisgICAgcGZsYXNoVG90YWxTaXplID0gY29uZmlnLT5QRmxhc2hUb3RhbFNpemU7CisgICAgaW5mby0+cmVnaW9uQmFzZSA9IGNvbmZpZy0+UEZsYXNoQmxvY2tCYXNlOworI2VuZGlmCisKKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgRkxBU0hfU1NEX1NFQ09OREFSWV9GTEFTSF9IQVNfSVRTX09XTl9QUk9URUNUSU9OX1JFR0lTVEVSCisgICAgaWYgKGNvbmZpZy0+Rmxhc2hNZW1vcnlJbmRleCA9PSAodWludDhfdClrRkxBU0hfTWVtb3J5SW5kZXhTZWNvbmRhcnlGbGFzaCkKKyAgICB7CisgICAgICAgIGluZm8tPnJlZ2lvbkNvdW50ID0gRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQ7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaW5mby0+cmVnaW9uQ291bnQgPSBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfUFJPVEVDVElPTl9SRUdJT05fQ09VTlQ7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBmbGFzaCBwcm90ZWN0aW9uIHJlZ2lvbgorICAgICAqIElmIHRoZSBmbGFzaCBkZW5zaXR5IGlzID4gMzJLQiwgdGhlbiBwcm90ZWN0aW9uIHJlZ2lvbiBpcyAxLzMyIG9mIHRvdGFsIGZsYXNoIGRlbnNpdHkKKyAgICAgKiBFbHNlIGlmIGZsYXNoIGRlbnNpdHkgaXMgPCAzMktCLCB0aGVuIGZsYXNoIHByb3RlY3Rpb24gcmVnaW9uIGlzIHNldCB0byAxS0IgKi8KKyAgICBpZiAocGZsYXNoVG90YWxTaXplID4gaW5mby0+cmVnaW9uQ291bnQgKiAxMDI0KQorICAgIHsKKyAgICAgICAgaW5mby0+cmVnaW9uU2l6ZSA9IChwZmxhc2hUb3RhbFNpemUpIC8gaW5mby0+cmVnaW9uQ291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGluZm8tPnJlZ2lvblNpemUgPSAxMDI0OworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3M7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19BQ0NFU1NfQ09OVFJPTCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0FDQ0VTU19DT05UUk9MCisvKiEgQGJyaWVmIEdldHMgdGhlIGZsYXNoIEV4ZWN1dGUtT25seSBhY2Nlc3MgaW5mb3JtYXRpb24gKFNlZ21lbnQgc2l6ZSwgU2VnbWVudCBjb3VudCkuKi8KK3N0YXRpYyBzdGF0dXNfdCBmbGFzaF9nZXRfYWNjZXNzX2luZm8oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfYWNjZXNzX2NvbmZpZ190ICppbmZvKQoreworICAgIGlmIChjb25maWcgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBDbGVhbiB1cCBpbmZvIFN0cnVjdHVyZSovCisgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZihmbGFzaF9hY2Nlc3NfY29uZmlnX3QpKTsKKworLyogTm90ZTogS1c0MCBoYXMgYSBzZWNvbmRhcnkgZmxhc2gsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgaW5kZXBlbmRlbnQgYWNjZXNzIHJlZ2lzdGVyKi8KKyNpZiBGTEFTSF9TU0RfSVNfU0VDT05EQVJZX0ZMQVNIX0VOQUJMRUQgJiYgKCFGTEFTSF9TU0RfU0VDT05EQVJZX0ZMQVNIX0hBU19JVFNfT1dOX0FDQ0VTU19SRUdJU1RFUikKKyAgICBpbmZvLT5TZWdtZW50QmFzZSA9IEZTTF9GRUFUVVJFX0ZMQVNIX1BGTEFTSF9TVEFSVF9BRERSRVNTOworI2Vsc2UKKyAgICBpbmZvLT5TZWdtZW50QmFzZSA9IGNvbmZpZy0+UEZsYXNoQmxvY2tCYXNlOworI2VuZGlmCisgICAgaW5mby0+U2VnbWVudFNpemUgPSBjb25maWctPlBGbGFzaEFjY2Vzc1NlZ21lbnRTaXplOworICAgIGluZm8tPlNlZ21lbnRDb3VudCA9IGNvbmZpZy0+UEZsYXNoQWNjZXNzU2VnbWVudENvdW50OworCisgICAgcmV0dXJuIGtTdGF0dXNfRkxBU0hfU3VjY2VzczsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfQUNDRVNTX0NPTlRST0wgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2ZsYXNoLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODVkODAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9mbGFzaC5oCkBAIC0wLDAgKzEsMTM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYgTlhQCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9GU0xfRkxBU0hfSF8KKyNkZWZpbmUgX0ZTTF9GTEFTSF9IXworCisjaWYgKGRlZmluZWQoQkxfVEFSR0VUX0ZMQVNIKSB8fCBkZWZpbmVkKEJMX1RBUkdFVF9ST00pIHx8IGRlZmluZWQoQkxfVEFSR0VUX1JBTSkpCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKyNpbmNsdWRlICJib290bG9hZGVyX2NvbW1vbi5oIgorI2Vsc2UKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIGZsYXNoX2RyaXZlcgorICogQHsKKyAqLworCisvKiEKKyAqIEBuYW1lIEZsYXNoIHZlcnNpb24KKyAqIEB7CisgKi8KKy8qISBAYnJpZWYgQ29uc3RydWN0cyB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIGRyaXZlcnMuICovCisjaWYgIWRlZmluZWQoTUFLRV9WRVJTSU9OKQorI2RlZmluZSBNQUtFX1ZFUlNJT04obWFqb3IsIG1pbm9yLCBidWdmaXgpICgoKG1ham9yKSA8PCAxNikgfCAoKG1pbm9yKSA8PCA4KSB8IChidWdmaXgpKQorI2VuZGlmCisKKy8qISBAYnJpZWYgRmxhc2ggZHJpdmVyIHZlcnNpb24gZm9yIFNESyovCisjZGVmaW5lIEZTTF9GTEFTSF9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDMsIDEpKSAvKiE8IFZlcnNpb24gMi4zLjEuICovCisKKy8qISBAYnJpZWYgRmxhc2ggZHJpdmVyIHZlcnNpb24gZm9yIFJPTSovCitlbnVtIF9mbGFzaF9kcml2ZXJfdmVyc2lvbl9jb25zdGFudHMKK3sKKyAgICBrRkxBU0hfRHJpdmVyVmVyc2lvbk5hbWUgPSAnRicsIC8qITwgRmxhc2ggZHJpdmVyIHZlcnNpb24gbmFtZS4qLworICAgIGtGTEFTSF9Ecml2ZXJWZXJzaW9uTWFqb3IgPSAyLCAgLyohPCBNYWpvciBmbGFzaCBkcml2ZXIgdmVyc2lvbi4qLworICAgIGtGTEFTSF9Ecml2ZXJWZXJzaW9uTWlub3IgPSAzLCAgLyohPCBNaW5vciBmbGFzaCBkcml2ZXIgdmVyc2lvbi4qLworICAgIGtGTEFTSF9Ecml2ZXJWZXJzaW9uQnVnZml4ID0gMSAgLyohPCBCdWdmaXggZm9yIGZsYXNoIGRyaXZlciB2ZXJzaW9uLiovCit9OworLypAfSovCisKKy8qIQorICogQG5hbWUgRmxhc2ggY29uZmlndXJhdGlvbgorICogQHsKKyAqLworLyohIEBicmllZiBJbmRpY2F0ZXMgd2hldGhlciB0byBzdXBwb3J0IEZsZXhOVk0gaW4gdGhlIEZsYXNoIGRyaXZlciAqLworI2lmICFkZWZpbmVkKEZMQVNIX1NTRF9DT05GSUdfRU5BQkxFX0ZMRVhOVk1fU1VQUE9SVCkKKyNkZWZpbmUgRkxBU0hfU1NEX0NPTkZJR19FTkFCTEVfRkxFWE5WTV9TVVBQT1JUIDEgLyohPCBFbmFibGVzIHRoZSBGbGV4TlZNIHN1cHBvcnQgYnkgZGVmYXVsdC4gKi8KKyNlbmRpZgorCisvKiEgQGJyaWVmIEluZGljYXRlcyB3aGV0aGVyIHRoZSBGbGV4TlZNIGlzIGVuYWJsZWQgaW4gdGhlIEZsYXNoIGRyaXZlciAqLworI2RlZmluZSBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVEIChGTEFTSF9TU0RfQ09ORklHX0VOQUJMRV9GTEVYTlZNX1NVUFBPUlQgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0ZMRVhfTlZNKQorCisvKiEgQGJyaWVmIEluZGljYXRlcyB3aGV0aGVyIHRvIHN1cHBvcnQgU2Vjb25kYXJ5IGZsYXNoIGluIHRoZSBGbGFzaCBkcml2ZXIgKi8KKyNpZiAhZGVmaW5lZChGTEFTSF9TU0RfQ09ORklHX0VOQUJMRV9TRUNPTkRBUllfRkxBU0hfU1VQUE9SVCkKKyNkZWZpbmUgRkxBU0hfU1NEX0NPTkZJR19FTkFCTEVfU0VDT05EQVJZX0ZMQVNIX1NVUFBPUlQgMSAvKiE8IEVuYWJsZXMgdGhlIHNlY29uZGFyeSBmbGFzaCBzdXBwb3J0IGJ5IGRlZmF1bHQuICovCisjZW5kaWYKKworLyohIEBicmllZiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2Vjb25kYXJ5IGZsYXNoIGlzIHN1cHBvcnRlZCBpbiB0aGUgRmxhc2ggZHJpdmVyICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfTVVMVElQTEVfRkxBU0gpIHx8IGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIXzFfU1RBUlRfQUREUkVTUykKKyNkZWZpbmUgRkxBU0hfU1NEX0lTX1NFQ09OREFSWV9GTEFTSF9FTkFCTEVEIChGTEFTSF9TU0RfQ09ORklHX0VOQUJMRV9TRUNPTkRBUllfRkxBU0hfU1VQUE9SVCkKKyNlbHNlCisjZGVmaW5lIEZMQVNIX1NTRF9JU19TRUNPTkRBUllfRkxBU0hfRU5BQkxFRCAoMCkKKyNlbmRpZgorCisvKiEgQGJyaWVmIEZsYXNoIGRyaXZlciBsb2NhdGlvbi4gKi8KKyNpZiAhZGVmaW5lZChGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQpCisjaWYgKCFkZWZpbmVkKEJMX1RBUkdFVF9ST00pICYmICFkZWZpbmVkKEJMX1RBUkdFVF9SQU0pKQorI2RlZmluZSBGTEFTSF9EUklWRVJfSVNfRkxBU0hfUkVTSURFTlQgMSAvKiE8IFVzZWQgZm9yIHRoZSBmbGFzaCByZXNpZGVudCBhcHBsaWNhdGlvbi4gKi8KKyNlbHNlCisjZGVmaW5lIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVCAwIC8qITwgVXNlZCBmb3IgdGhlIG5vbi1mbGFzaCByZXNpZGVudCBhcHBsaWNhdGlvbi4gKi8KKyNlbmRpZgorI2VuZGlmCisKKy8qISBAYnJpZWYgRmxhc2ggRHJpdmVyIEV4cG9ydCBvcHRpb24gKi8KKyNpZiAhZGVmaW5lZChGTEFTSF9EUklWRVJfSVNfRVhQT1JURUQpCisjaWYgKGRlZmluZWQoQkxfVEFSR0VUX1JPTSkgfHwgZGVmaW5lZChCTF9UQVJHRVRfRkxBU0gpKQorI2RlZmluZSBGTEFTSF9EUklWRVJfSVNfRVhQT1JURUQgMSAvKiE8IFVzZWQgZm9yIHRoZSBST00gYm9vdGxvYWRlci4gKi8KKyNlbHNlCisjZGVmaW5lIEZMQVNIX0RSSVZFUl9JU19FWFBPUlRFRCAwIC8qITwgVXNlZCBmb3IgdGhlIEtTREsgYXBwbGljYXRpb24uICovCisjZW5kaWYKKyNlbmRpZgorLypAfSovCisKKy8qIQorICogQG5hbWUgRmxhc2ggc3RhdHVzCisgKiBAeworICovCisvKiEgQGJyaWVmIEZsYXNoIGRyaXZlciBzdGF0dXMgZ3JvdXAuICovCisjaWYgZGVmaW5lZChrU3RhdHVzR3JvdXBfRmxhc2hEcml2ZXIpCisjZGVmaW5lIGtTdGF0dXNHcm91cEdlbmVyaWMga1N0YXR1c0dyb3VwX0dlbmVyaWMKKyNkZWZpbmUga1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIga1N0YXR1c0dyb3VwX0ZsYXNoRHJpdmVyCisjZWxpZiBkZWZpbmVkKGtTdGF0dXNHcm91cF9GTEFTSCkKKyNkZWZpbmUga1N0YXR1c0dyb3VwR2VuZXJpYyBrU3RhdHVzR3JvdXBfR2VuZXJpYworI2RlZmluZSBrU3RhdHVzR3JvdXBGbGFzaERyaXZlciBrU3RhdHVzR3JvdXBfRkxBU0gKKyNlbHNlCisjZGVmaW5lIGtTdGF0dXNHcm91cEdlbmVyaWMgMAorI2RlZmluZSBrU3RhdHVzR3JvdXBGbGFzaERyaXZlciAxCisjZW5kaWYKKworLyohIEBicmllZiBDb25zdHJ1Y3RzIGEgc3RhdHVzIGNvZGUgdmFsdWUgZnJvbSBhIGdyb3VwIGFuZCBhIGNvZGUgbnVtYmVyLiAqLworI2lmICFkZWZpbmVkKE1BS0VfU1RBVFVTKQorI2RlZmluZSBNQUtFX1NUQVRVUyhncm91cCwgY29kZSkgKCgoKGdyb3VwKSoxMDApICsgKGNvZGUpKSkKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBGbGFzaCBkcml2ZXIgc3RhdHVzIGNvZGVzLgorICovCitlbnVtIF9mbGFzaF9zdGF0dXMKK3sKKyAgICBrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBHZW5lcmljLCAwKSwgICAgICAgICAvKiE8IEFQSSBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkqLworICAgIGtTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50ID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwR2VuZXJpYywgNCksIC8qITwgSW52YWxpZCBhcmd1bWVudCovCisgICAga1N0YXR1c19GTEFTSF9TaXplRXJyb3IgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMCksICAgLyohPCBFcnJvciBzaXplKi8KKyAgICBrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDEpLCAvKiE8IFBhcmFtZXRlciBpcyBub3QgYWxpZ25lZCB3aXRoIHRoZSBzcGVjaWZpZWQgYmFzZWxpbmUqLworICAgIGtTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDIpLCAvKiE8IEFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlICovCisgICAga1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAzKSwgLyohPCBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmQgYWRkcmVzc2VzICovCisgICAga1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uID0gTUFLRV9TVEFUVVMoCisgICAgICAgIGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCA0KSwgLyohPCBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzICovCisgICAga1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCA1KSwgLyohPCBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uICovCisgICAga1N0YXR1c19GTEFTSF9Vbmtub3duUHJvcGVydHkgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgNiksIC8qITwgVW5rbm93biBwcm9wZXJ0eS4qLworICAgIGtTdGF0dXNfRkxBU0hfRXJhc2VLZXlFcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCA3KSwgICAvKiE8IEFQSSBlcmFzZSBrZXkgaXMgaW52YWxpZC4qLworICAgIGtTdGF0dXNfRkxBU0hfUmVnaW9uRXhlY3V0ZU9ubHkgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgOCksIC8qITwgVGhlIGN1cnJlbnQgcmVnaW9uIGlzIGV4ZWN1dGUtb25seS4qLworICAgIGtTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCA5KSwgLyohPCBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLiovCisgICAga1N0YXR1c19GTEFTSF9QYXJ0aXRpb25TdGF0dXNVcGRhdGVGYWlsdXJlID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDEwKSwgLyohPCBGYWlsZWQgdG8gdXBkYXRlIHBhcnRpdGlvbiBzdGF0dXMuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX1NldEZsZXhyYW1Bc0VlcHJvbUVycm9yID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDExKSwgLyohPCBGYWlsZWQgdG8gc2V0IEZsZXhSQU0gYXMgRUVQUk9NLiovCisgICAga1N0YXR1c19GTEFTSF9SZWNvdmVyRmxleHJhbUFzUmFtRXJyb3IgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMTIpLCAvKiE8IEZhaWxlZCB0byByZWNvdmVyIEZsZXhSQU0gYXMgUkFNLiovCisgICAga1N0YXR1c19GTEFTSF9TZXRGbGV4cmFtQXNSYW1FcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxMyksIC8qITwgRmFpbGVkIHRvIHNldCBGbGV4UkFNIGFzIFJBTS4qLworICAgIGtTdGF0dXNfRkxBU0hfUmVjb3ZlckZsZXhyYW1Bc0VlcHJvbUVycm9yID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDE0KSwgLyohPCBGYWlsZWQgdG8gcmVjb3ZlciBGbGV4UkFNIGFzIEVFUFJPTS4qLworICAgIGtTdGF0dXNfRkxBU0hfQ29tbWFuZE5vdFN1cHBvcnRlZCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cEZsYXNoRHJpdmVyLCAxNSksIC8qITwgRmxhc2ggQVBJIGlzIG5vdCBzdXBwb3J0ZWQuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX1N3YXBTeXN0ZW1Ob3RJblVuaW5pdGlhbGl6ZWQgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMTYpLCAvKiE8IFN3YXAgc3lzdGVtIGlzIG5vdCBpbiBhbiB1bmluaXRpYWx6ZWQgc3RhdGUuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX1N3YXBJbmRpY2F0b3JBZGRyZXNzRXJyb3IgPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMTcpLCAvKiE8IFRoZSBzd2FwIGluZGljYXRvciBhZGRyZXNzIGlzIGludmFsaWQuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX1JlYWRPbmx5UHJvcGVydHkgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMTgpLCAvKiE8IFRoZSBmbGFzaCBwcm9wZXJ0eSBpcyByZWFkLW9ubHkuKi8KKyAgICBrU3RhdHVzX0ZMQVNIX0ludmFsaWRQcm9wZXJ0eVZhbHVlID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwRmxhc2hEcml2ZXIsIDE5KSwgLyohPCBUaGUgZmxhc2ggcHJvcGVydHkgdmFsdWUgaXMgb3V0IG9mIHJhbmdlLiovCisgICAga1N0YXR1c19GTEFTSF9JbnZhbGlkU3BlY3VsYXRpb25PcHRpb24gPQorICAgICAgICBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBGbGFzaERyaXZlciwgMjApLCAvKiE8IFRoZSBvcHRpb24gb2YgZmxhc2ggcHJlZmV0Y2ggc3BlY3VsYXRpb24gaXMgaW52YWxpZC4qLworfTsKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIEZsYXNoIEFQSSBrZXkKKyAqIEB7CisgKi8KKy8qISBAYnJpZWYgQ29uc3RydWN0cyB0aGUgZm91ciBjaGFyYWN0ZXIgY29kZSBmb3IgdGhlIEZsYXNoIGRyaXZlciBBUEkga2V5LiAqLworI2lmICFkZWZpbmVkKEZPVVJfQ0hBUl9DT0RFKQorI2RlZmluZSBGT1VSX0NIQVJfQ09ERShhLCBiLCBjLCBkKSAoKChkKSA8PCAyNCkgfCAoKGMpIDw8IDE2KSB8ICgoYikgPDwgOCkgfCAoKGEpKSkKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgRmxhc2ggZHJpdmVyIEFQSSBrZXlzLgorICoKKyAqIEBub3RlIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgYnVpbHQgd2l0aCBhIGJ5dGUgb3JkZXIgc3VjaCB0aGF0IHRoZSBzdHJpbmcKKyAqIGJlaW5nIHJlYWRhYmxlIGluIGV4cGVjdGVkIG9yZGVyIHdoZW4gdmlld2VkIGluIGEgaGV4IGVkaXRvciwgaWYgdGhlIHZhbHVlCisgKiBpcyB0cmVhdGVkIGFzIGEgMzItYml0IGxpdHRsZSBlbmRpYW4gdmFsdWUuCisgKi8KK2VudW0gX2ZsYXNoX2RyaXZlcl9hcGlfa2V5cworeworICAgIGtGTEFTSF9BcGlFcmFzZUtleSA9IEZPVVJfQ0hBUl9DT0RFKCdrJywgJ2YnLCAnZScsICdrJykgLyohPCBLZXkgdmFsdWUgdXNlZCB0byB2YWxpZGF0ZSBhbGwgZmxhc2ggZXJhc2UgQVBJcy4qLworfTsKKy8qQH0qLworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3Igc3VwcG9ydGVkIGZsYXNoIG1hcmdpbiBsZXZlbHMuCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfbWFyZ2luX3ZhbHVlCit7CisgICAga0ZMQVNIX01hcmdpblZhbHVlTm9ybWFsLCAgLyohPCBVc2UgdGhlICdub3JtYWwnIHJlYWQgbGV2ZWwgZm9yIDFzLiovCisgICAga0ZMQVNIX01hcmdpblZhbHVlVXNlciwgICAgLyohPCBBcHBseSB0aGUgJ1VzZXInIG1hcmdpbiB0byB0aGUgbm9ybWFsIHJlYWQtMSBsZXZlbC4qLworICAgIGtGTEFTSF9NYXJnaW5WYWx1ZUZhY3RvcnksIC8qITwgQXBwbHkgdGhlICdGYWN0b3J5JyBtYXJnaW4gdG8gdGhlIG5vcm1hbCByZWFkLTEgbGV2ZWwuKi8KKyAgICBrRkxBU0hfTWFyZ2luVmFsdWVJbnZhbGlkICAvKiE8IE5vdCByZWFsIG1hcmdpbiBsZXZlbCwgVXNlZCB0byBkZXRlcm1pbmUgdGhlIHJhbmdlIG9mIHZhbGlkIG1hcmdpbiBsZXZlbC4gKi8KK30gZmxhc2hfbWFyZ2luX3ZhbHVlX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgdGhyZWUgcG9zc2libGUgZmxhc2ggc2VjdXJpdHkgc3RhdGVzLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3NlY3VyaXR5X3N0YXRlCit7CisgICAga0ZMQVNIX1NlY3VyaXR5U3RhdGVOb3RTZWN1cmUsICAgICAgIC8qITwgRmxhc2ggaXMgbm90IHNlY3VyZS4qLworICAgIGtGTEFTSF9TZWN1cml0eVN0YXRlQmFja2Rvb3JFbmFibGVkLCAvKiE8IEZsYXNoIGJhY2tkb29yIGlzIGVuYWJsZWQuKi8KKyAgICBrRkxBU0hfU2VjdXJpdHlTdGF0ZUJhY2tkb29yRGlzYWJsZWQgLyohPCBGbGFzaCBiYWNrZG9vciBpcyBkaXNhYmxlZC4qLworfSBmbGFzaF9zZWN1cml0eV9zdGF0ZV90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHRocmVlIHBvc3NpYmxlIGZsYXNoIHByb3RlY3Rpb24gbGV2ZWxzLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3Byb3RlY3Rpb25fc3RhdGUKK3sKKyAgICBrRkxBU0hfUHJvdGVjdGlvblN0YXRlVW5wcm90ZWN0ZWQsIC8qITwgRmxhc2ggcmVnaW9uIGlzIG5vdCBwcm90ZWN0ZWQuKi8KKyAgICBrRkxBU0hfUHJvdGVjdGlvblN0YXRlUHJvdGVjdGVkLCAgIC8qITwgRmxhc2ggcmVnaW9uIGlzIHByb3RlY3RlZC4qLworICAgIGtGTEFTSF9Qcm90ZWN0aW9uU3RhdGVNaXhlZCAgICAgICAgLyohPCBGbGFzaCBpcyBtaXhlZCB3aXRoIHByb3RlY3RlZCBhbmQgdW5wcm90ZWN0ZWQgcmVnaW9uLiovCit9IGZsYXNoX3Byb3RlY3Rpb25fc3RhdGVfdDsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSB0aHJlZSBwb3NzaWJsZSBmbGFzaCBleGVjdXRlIGFjY2VzcyBsZXZlbHMuCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfZXhlY3V0ZV9vbmx5X2FjY2Vzc19zdGF0ZQoreworICAgIGtGTEFTSF9BY2Nlc3NTdGF0ZVVuTGltaXRlZCwgICAvKiE8IEZsYXNoIHJlZ2lvbiBpcyB1bmxpbWl0ZWQuKi8KKyAgICBrRkxBU0hfQWNjZXNzU3RhdGVFeGVjdXRlT25seSwgLyohPCBGbGFzaCByZWdpb24gaXMgZXhlY3V0ZSBvbmx5LiovCisgICAga0ZMQVNIX0FjY2Vzc1N0YXRlTWl4ZWQgICAgICAgIC8qITwgRmxhc2ggaXMgbWl4ZWQgd2l0aCB1bmxpbWl0ZWQgYW5kIGV4ZWN1dGUgb25seSByZWdpb24uKi8KK30gZmxhc2hfZXhlY3V0ZV9vbmx5X2FjY2Vzc19zdGF0ZV90OworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdmFyaW91cyBmbGFzaCBwcm9wZXJ0aWVzLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3Byb3BlcnR5X3RhZworeworICAgIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaFNlY3RvclNpemUgPSAweDAwVSwgICAgICAgICAvKiE8IFBmbGFzaCBzZWN0b3Igc2l6ZSBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eVBmbGFzaFRvdGFsU2l6ZSA9IDB4MDFVLCAgICAgICAgICAvKiE8IFBmbGFzaCB0b3RhbCBzaXplIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQmxvY2tTaXplID0gMHgwMlUsICAgICAgICAgIC8qITwgUGZsYXNoIGJsb2NrIHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja0NvdW50ID0gMHgwM1UsICAgICAgICAgLyohPCBQZmxhc2ggYmxvY2sgY291bnQgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlQZmxhc2hCbG9ja0Jhc2VBZGRyID0gMHgwNFUsICAgICAgLyohPCBQZmxhc2ggYmxvY2sgYmFzZSBhZGRyZXNzIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5UGZsYXNoRmFjU3VwcG9ydCA9IDB4MDVVLCAgICAgICAgIC8qITwgUGZsYXNoIGZhYyBzdXBwb3J0IHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5UGZsYXNoQWNjZXNzU2VnbWVudFNpemUgPSAweDA2VSwgIC8qITwgUGZsYXNoIGFjY2VzcyBzZWdtZW50IHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlQZmxhc2hBY2Nlc3NTZWdtZW50Q291bnQgPSAweDA3VSwgLyohPCBQZmxhc2ggYWNjZXNzIHNlZ21lbnQgY291bnQgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlGbGV4UmFtQmxvY2tCYXNlQWRkciA9IDB4MDhVLCAgICAgLyohPCBGbGV4UmFtIGJsb2NrIGJhc2UgYWRkcmVzcyBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eUZsZXhSYW1Ub3RhbFNpemUgPSAweDA5VSwgICAgICAgICAvKiE8IEZsZXhSYW0gdG90YWwgc2l6ZSBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaFNlY3RvclNpemUgPSAweDEwVSwgICAgICAgICAvKiE8IERmbGFzaCBzZWN0b3Igc2l6ZSBwcm9wZXJ0eS4qLworICAgIGtGTEFTSF9Qcm9wZXJ0eURmbGFzaFRvdGFsU2l6ZSA9IDB4MTFVLCAgICAgICAgICAvKiE8IERmbGFzaCB0b3RhbCBzaXplIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5RGZsYXNoQmxvY2tTaXplID0gMHgxMlUsICAgICAgICAgIC8qITwgRGZsYXNoIGJsb2NrIHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlEZmxhc2hCbG9ja0NvdW50ID0gMHgxM1UsICAgICAgICAgLyohPCBEZmxhc2ggYmxvY2sgY291bnQgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlEZmxhc2hCbG9ja0Jhc2VBZGRyID0gMHgxNFUsICAgICAgLyohPCBEZmxhc2ggYmxvY2sgYmFzZSBhZGRyZXNzIHByb3BlcnR5LiovCisgICAga0ZMQVNIX1Byb3BlcnR5RWVwcm9tVG90YWxTaXplID0gMHgxNVUsICAgICAgICAgIC8qITwgRUVQUk9NIHRvdGFsIHNpemUgcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlGbGFzaE1lbW9yeUluZGV4ID0gMHgyMFUsICAgICAgICAgLyohPCBGbGFzaCBtZW1vcnkgaW5kZXggcHJvcGVydHkuKi8KKyAgICBrRkxBU0hfUHJvcGVydHlGbGFzaENhY2hlQ29udHJvbGxlckluZGV4ID0gMHgyMVUgLyohPCBGbGFzaCBjYWNoZSBjb250cm9sbGVyIGluZGV4IHByb3BlcnR5LiovCit9IGZsYXNoX3Byb3BlcnR5X3RhZ190OworCisvKiEKKyAqIEBicmllZiBDb25zdGFudHMgZm9yIGV4ZWN1dGUtaW4tUkFNIGZsYXNoIGZ1bmN0aW9uLgorICovCitlbnVtIF9mbGFzaF9leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9jb25zdGFudHMKK3sKKyAgICBrRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25NYXhTaXplSW5Xb3JkcyA9IDE2VSwgLyohPCBUaGUgbWF4aW11bSBzaXplIG9mIGV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uLiovCisgICAga0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uVG90YWxOdW0gPSAyVSAgICAgICAgIC8qITwgVG90YWwgbnVtYmVyIG9mIGV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9ucy4qLworfTsKKworLyohCisgKiBAYnJpZWYgRmxhc2ggZXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9jb25maWcKK3sKKyAgICB1aW50MzJfdCBhY3RpdmVGdW5jdGlvbkNvdW50OyAgICAgIC8qITwgTnVtYmVyIG9mIGF2YWlsYWJsZSBleGVjdXRlLWluLVJBTSBmdW5jdGlvbnMuKi8KKyAgICB1aW50MzJfdCAqZmxhc2hSdW5Db21tYW5kOyAgICAgICAgIC8qITwgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb246IGZsYXNoX3J1bl9jb21tYW5kLiovCisgICAgdWludDMyX3QgKmZsYXNoQ29tbW9uQml0T3BlcmF0aW9uOyAvKiE8IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uOiBmbGFzaF9jb21tb25fYml0X29wZXJhdGlvbi4qLworfSBmbGFzaF9leGVjdXRlX2luX3JhbV9mdW5jdGlvbl9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSB0d28gcG9zc2libGUgb3B0aW9ucyBvZiBmbGFzaCByZWFkIHJlc291cmNlIGNvbW1hbmQuCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfcmVhZF9yZXNvdXJjZV9vcHRpb24KK3sKKyAgICBrRkxBU0hfUmVzb3VyY2VPcHRpb25GbGFzaElmciA9CisgICAgICAgIDB4MDBVLCAvKiE8IFNlbGVjdCBjb2RlIGZvciBQcm9ncmFtIGZsYXNoIDAgSUZSLCBQcm9ncmFtIGZsYXNoIHN3YXAgMCBJRlIsIERhdGEgZmxhc2ggMCBJRlIgKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VPcHRpb25WZXJzaW9uSWQgPSAweDAxVSAvKiE8IFNlbGVjdCBjb2RlIGZvciB0aGUgdmVyc2lvbiBJRCovCit9IGZsYXNoX3JlYWRfcmVzb3VyY2Vfb3B0aW9uX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgcmFuZ2Ugb2Ygc3BlY2lhbC1wdXJwb3NlIGZsYXNoIHJlc291cmNlCisgKi8KK2VudW0gX2ZsYXNoX3JlYWRfcmVzb3VyY2VfcmFuZ2UKK3sKKyNpZiAoRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGRSA9PSAxKQorICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoSWZyU2l6ZUluQnl0ZXMgPSAxMDI0VSwgIC8qITwgUGZsYXNoIElGUiBzaXplIGluIGJ5dGUuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVZlcnNpb25JZFNpemVJbkJ5dGVzID0gOFUsICAgICAvKiE8IFZlcnNpb24gSUQgSUZSIHNpemUgaW4gYnl0ZS4qLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlVmVyc2lvbklkU3RhcnQgPSAweDA4VSwgICAgICAgIC8qITwgVmVyc2lvbiBJRCBJRlIgc3RhcnQgYWRkcmVzcy4qLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlVmVyc2lvbklkRW5kID0gMHgwRlUsICAgICAgICAgIC8qITwgVmVyc2lvbiBJRCBJRlIgZW5kIGFkZHJlc3MuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCA9IDB4NDAwMDBVLCAvKiE8IFBmbGFzaCBzd2FwIElGUiBzdGFydCBhZGRyZXNzLiovCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyRW5kID0KKyAgICAgICAgKGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoU3dhcElmclN0YXJ0ICsgMHgzRkZVKSwgLyohPCBQZmxhc2ggc3dhcCBJRlIgZW5kIGFkZHJlc3MuKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGTCA9PSAxIG9yIEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkEgPSA9MSAqLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlUGZsYXNoSWZyU2l6ZUluQnl0ZXMgPSAyNTZVLCAgLyohPCBQZmxhc2ggSUZSIHNpemUgaW4gYnl0ZS4qLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlVmVyc2lvbklkU2l6ZUluQnl0ZXMgPSA4VSwgICAgLyohPCBWZXJzaW9uIElEIElGUiBzaXplIGluIGJ5dGUuKi8KKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVZlcnNpb25JZFN0YXJ0ID0gMHgwMFUsICAgICAgIC8qITwgVmVyc2lvbiBJRCBJRlIgc3RhcnQgYWRkcmVzcy4qLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlVmVyc2lvbklkRW5kID0gMHgwN1UsICAgICAgICAgLyohPCBWZXJzaW9uIElEIElGUiBlbmQgYWRkcmVzcy4qLworI2lmIDB4MjAwMDBVID09IChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ09VTlQgKiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRSkKKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCA9IDB4ODAwMFUsIC8qITwgUGZsYXNoIHN3YXAgSUZSIHN0YXJ0IGFkZHJlc3MuKi8KKyNlbGlmIDB4NDAwMDBVID09IChGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfQ09VTlQgKiBGU0xfRkVBVFVSRV9GTEFTSF9QRkxBU0hfQkxPQ0tfU0laRSkKKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCA9IDB4MTAwMDBVLCAvKiE8IFBmbGFzaCBzd2FwIElGUiBzdGFydCBhZGRyZXNzLiovCisjZWxpZiAweDgwMDAwVSA9PSAoRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX0NPVU5UICogRlNMX0ZFQVRVUkVfRkxBU0hfUEZMQVNIX0JMT0NLX1NJWkUpCisgICAga0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQgPSAweDIwMDAwVSwgLyohPCBQZmxhc2ggc3dhcCBJRlIgc3RhcnQgYWRkcmVzcy4qLworI2Vsc2UKKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJTdGFydCA9IDAsCisjZW5kaWYKKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZVBmbGFzaFN3YXBJZnJFbmQgPQorICAgICAgICAoa0ZMQVNIX1Jlc291cmNlUmFuZ2VQZmxhc2hTd2FwSWZyU3RhcnQgKyAweEZGVSksIC8qITwgUGZsYXNoIHN3YXAgSUZSIGVuZCBhZGRyZXNzLiovCisjZW5kaWYKKyAgICBrRkxBU0hfUmVzb3VyY2VSYW5nZURmbGFzaElmclN0YXJ0ID0gMHg4MDAwMDBVLCAvKiE8IERmbGFzaCBJRlIgc3RhcnQgYWRkcmVzcy4qLworICAgIGtGTEFTSF9SZXNvdXJjZVJhbmdlRGZsYXNoSWZyRW5kID0gMHg4MDAzRkZVLCAgIC8qITwgRGZsYXNoIElGUiBlbmQgYWRkcmVzcy4qLworfTsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSBpbmRleCBvZiByZWFkL3Byb2dyYW0gb25jZSByZWNvcmQKKyAqLworZW51bSBfazNfZmxhc2hfcmVhZF9vbmNlX2luZGV4Cit7CisgICAga0ZMQVNIX1JlY29yZEluZGV4U3dhcEFkZHIgPSAweEExVSwgICAgLyohPCBJbmRleCBvZiBTd2FwIGluZGljYXRvciBhZGRyZXNzLiovCisgICAga0ZMQVNIX1JlY29yZEluZGV4U3dhcEVuYWJsZSA9IDB4QTJVLCAgLyohPCBJbmRleCBvZiBTd2FwIHN5c3RlbSBlbmFibGUuKi8KKyAgICBrRkxBU0hfUmVjb3JkSW5kZXhTd2FwRGlzYWJsZSA9IDB4QTNVLCAvKiE8IEluZGV4IG9mIFN3YXAgc3lzdGVtIGRpc2FibGUuKi8KK307CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgdHdvIHBvc3NpbGJlIG9wdGlvbnMgb2Ygc2V0IEZsZXhSQU0gZnVuY3Rpb24gY29tbWFuZC4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9mbGV4cmFtX2Z1bmN0aW9uX29wdGlvbgoreworICAgIGtGTEFTSF9GbGV4cmFtRnVuY3Rpb25PcHRpb25BdmFpbGFibGVBc1JhbSA9IDB4RkZVLCAgICAvKiE8IEFuIG9wdGlvbiB1c2VkIHRvIG1ha2UgRmxleFJBTSBhdmFpbGFibGUgYXMgUkFNICovCisgICAga0ZMQVNIX0ZsZXhyYW1GdW5jdGlvbk9wdGlvbkF2YWlsYWJsZUZvckVlcHJvbSA9IDB4MDBVIC8qITwgQW4gb3B0aW9uIHVzZWQgdG8gbWFrZSBGbGV4UkFNIGF2YWlsYWJsZSBmb3IgRUVQUk9NICovCit9IGZsYXNoX2ZsZXhyYW1fZnVuY3Rpb25fb3B0aW9uX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciBhY2NlbGVyYXRpb24gUkFNIHByb3BlcnR5LgorICovCitlbnVtIF9mbGFzaF9hY2NlbGVyYXRpb25fcmFtX3Byb3BlcnR5Cit7CisgICAga0ZMQVNIX0FjY2VsZXJhdGlvblJhbVNpemUgPSAweDQwMFUKK307CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgcG9zc2libGUgb3B0aW9ucyBvZiBTd2FwIGZ1bmN0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfc3dhcF9mdW5jdGlvbl9vcHRpb24KK3sKKyAgICBrRkxBU0hfU3dhcEZ1bmN0aW9uT3B0aW9uRW5hYmxlID0gMHgwMFUsIC8qITwgQW4gb3B0aW9uIHVzZWQgdG8gZW5hYmxlIHRoZSBTd2FwIGZ1bmN0aW9uICovCisgICAga0ZMQVNIX1N3YXBGdW5jdGlvbk9wdGlvbkRpc2FibGUgPSAweDAxVSAvKiE8IEFuIG9wdGlvbiB1c2VkIHRvIGRpc2FibGUgdGhlIFN3YXAgZnVuY3Rpb24gKi8KK30gZmxhc2hfc3dhcF9mdW5jdGlvbl9vcHRpb25fdDsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSBwb3NzaWJsZSBvcHRpb25zIG9mIFN3YXAgY29udHJvbCBjb21tYW5kcworICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3N3YXBfY29udHJvbF9vcHRpb24KK3sKKyAgICBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25JbnRpYWxpemVTeXN0ZW0gPSAweDAxVSwgICAgLyohPCBBbiBvcHRpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBTd2FwIHN5c3RlbSAqLworICAgIGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvblNldEluVXBkYXRlU3RhdGUgPSAweDAyVSwgICAvKiE8IEFuIG9wdGlvbiB1c2VkIHRvIHNldCB0aGUgU3dhcCBpbiBhbiB1cGRhdGUgc3RhdGUgKi8KKyAgICBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25TZXRJbkNvbXBsZXRlU3RhdGUgPSAweDA0VSwgLyohPCBBbiBvcHRpb24gdXNlZCB0byBzZXQgdGhlIFN3YXAgaW4gYSBjb21wbGV0ZSBzdGF0ZSAqLworICAgIGtGTEFTSF9Td2FwQ29udHJvbE9wdGlvblJlcG9ydFN0YXR1cyA9IDB4MDhVLCAgICAgICAvKiE8IEFuIG9wdGlvbiB1c2VkIHRvIHJlcG9ydCB0aGUgU3dhcCBzdGF0dXMgKi8KKyAgICBrRkxBU0hfU3dhcENvbnRyb2xPcHRpb25EaXNhYmxlU3lzdGVtID0gMHgxMFUgICAgICAgLyohPCBBbiBvcHRpb24gdXNlZCB0byBkaXNhYmxlIHRoZSBTd2FwIHN0YXR1cyAqLworfSBmbGFzaF9zd2FwX2NvbnRyb2xfb3B0aW9uX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgcG9zc2libGUgZmxhc2ggU3dhcCBzdGF0dXMuCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfc3dhcF9zdGF0ZQoreworICAgIGtGTEFTSF9Td2FwU3RhdGVVbmluaXRpYWxpemVkID0gMHgwMFUsIC8qITwgRmxhc2ggU3dhcCBzeXN0ZW0gaXMgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZS4qLworICAgIGtGTEFTSF9Td2FwU3RhdGVSZWFkeSA9IDB4MDFVLCAgICAgICAgIC8qITwgRmxhc2ggU3dhcCBzeXN0ZW0gaXMgaW4gYSByZWFkeSBzdGF0ZS4qLworICAgIGtGTEFTSF9Td2FwU3RhdGVVcGRhdGUgPSAweDAyVSwgICAgICAgIC8qITwgRmxhc2ggU3dhcCBzeXN0ZW0gaXMgaW4gYW4gdXBkYXRlIHN0YXRlLiovCisgICAga0ZMQVNIX1N3YXBTdGF0ZVVwZGF0ZUVyYXNlZCA9IDB4MDNVLCAgLyohPCBGbGFzaCBTd2FwIHN5c3RlbSBpcyBpbiBhbiB1cGRhdGVFcmFzZWQgc3RhdGUuKi8KKyAgICBrRkxBU0hfU3dhcFN0YXRlQ29tcGxldGUgPSAweDA0VSwgICAgICAvKiE8IEZsYXNoIFN3YXAgc3lzdGVtIGlzIGluIGEgY29tcGxldGUgc3RhdGUuKi8KKyAgICBrRkxBU0hfU3dhcFN0YXRlRGlzYWJsZWQgPSAweDA1VSAgICAgICAvKiE8IEZsYXNoIFN3YXAgc3lzdGVtIGlzIGluIGEgZGlzYWJsZWQgc3RhdGUuKi8KK30gZmxhc2hfc3dhcF9zdGF0ZV90OworCisvKiEKKyAqIEBicmVpZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHBvc3NpYmxlIGZsYXNoIFN3YXAgYmxvY2sgc3RhdHVzCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfc3dhcF9ibG9ja19zdGF0dXMKK3sKKyAgICBrRkxBU0hfU3dhcEJsb2NrU3RhdHVzTG93ZXJIYWxmUHJvZ3JhbUJsb2Nrc0F0WmVybyA9CisgICAgICAgIDB4MDBVLCAvKiE8IFN3YXAgYmxvY2sgc3RhdHVzIGlzIHRoYXQgbG93ZXIgaGFsZiBwcm9ncmFtIGJsb2NrIGF0IHplcm8uKi8KKyAgICBrRkxBU0hfU3dhcEJsb2NrU3RhdHVzVXBwZXJIYWxmUHJvZ3JhbUJsb2Nrc0F0WmVybyA9CisgICAgICAgIDB4MDFVLCAvKiE8IFN3YXAgYmxvY2sgc3RhdHVzIGlzIHRoYXQgdXBwZXIgaGFsZiBwcm9ncmFtIGJsb2NrIGF0IHplcm8uKi8KK30gZmxhc2hfc3dhcF9ibG9ja19zdGF0dXNfdDsKKworLyohCisgKiBAYnJpZWYgRmxhc2ggU3dhcCBpbmZvcm1hdGlvbgorICovCit0eXBlZGVmIHN0cnVjdCBfZmxhc2hfc3dhcF9zdGF0ZV9jb25maWcKK3sKKyAgICBmbGFzaF9zd2FwX3N0YXRlX3QgZmxhc2hTd2FwU3RhdGU7ICAgICAgICAgICAgICAgIC8qITxUaGUgY3VycmVudCBTd2FwIHN5c3RlbSBzdGF0dXMuKi8KKyAgICBmbGFzaF9zd2FwX2Jsb2NrX3N0YXR1c190IGN1cnJlbnRTd2FwQmxvY2tTdGF0dXM7IC8qITwgVGhlIGN1cnJlbnQgU3dhcCBibG9jayBzdGF0dXMuKi8KKyAgICBmbGFzaF9zd2FwX2Jsb2NrX3N0YXR1c190IG5leHRTd2FwQmxvY2tTdGF0dXM7ICAgIC8qITwgVGhlIG5leHQgU3dhcCBibG9jayBzdGF0dXMuKi8KK30gZmxhc2hfc3dhcF9zdGF0ZV9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgRmxhc2ggU3dhcCBJRlIgZmllbGRzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9zd2FwX2lmcl9maWVsZF9jb25maWcKK3sKKyAgICB1aW50MTZfdCBzd2FwSW5kaWNhdG9yQWRkcmVzczsgLyohPCBBIFN3YXAgaW5kaWNhdG9yIGFkZHJlc3MgZmllbGQuKi8KKyAgICB1aW50MTZfdCBzd2FwRW5hYmxlV29yZDsgICAgICAgLyohPCBBIFN3YXAgZW5hYmxlIHdvcmQgZmllbGQuKi8KKyAgICB1aW50OF90IHJlc2VydmVkMFs0XTsgICAgICAgICAgLyohPCBBIHJlc2VydmVkIGZpZWxkLiovCisjaWYgKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkUgPT0gMSkKKyAgICB1aW50OF90IHJlc2VydmVkMVsyXTsgICAgIC8qITwgQSByZXNlcnZlZCBmaWVsZC4qLworICAgIHVpbnQxNl90IHN3YXBEaXNhYmxlV29yZDsgLyohPCBBIFN3YXAgZGlzYWJsZSB3b3JkIGZpZWxkLiovCisgICAgdWludDhfdCByZXNlcnZlZDJbNF07ICAgICAvKiE8IEEgcmVzZXJ2ZWQgZmllbGQuKi8KKyNlbmRpZgorfSBmbGFzaF9zd2FwX2lmcl9maWVsZF9jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgRmxhc2ggU3dhcCBJRlIgZmllbGQgZGF0YQorICovCit0eXBlZGVmIHVuaW9uIF9mbGFzaF9zd2FwX2lmcl9maWVsZF9kYXRhCit7CisgICAgdWludDMyX3QgZmxhc2hTd2FwSWZyRGF0YVsyXTsgICAgICAgICAgICAgICAgICAgIC8qITwgQSBmbGFzaCBTd2FwIElGUiBmaWVsZCBkYXRhIC4qLworICAgIGZsYXNoX3N3YXBfaWZyX2ZpZWxkX2NvbmZpZ190IGZsYXNoU3dhcElmckZpZWxkOyAvKiE8IEEgZmxhc2ggU3dhcCBJRlIgZmllbGQgc3RydWN0dXJlLiovCit9IGZsYXNoX3N3YXBfaWZyX2ZpZWxkX2RhdGFfdDsKKworLyohCisgKiBAYnJpZWYgUEZsYXNoIHByb3RlY3Rpb24gc3RhdHVzIC0gbG93IDMyYml0CisgKi8KK3R5cGVkZWYgdW5pb24gX3BmbGFzaF9wcm90ZWN0aW9uX3N0YXR1c19sb3cKK3sKKyAgICB1aW50MzJfdCBwcm90bDMyYjsgLyohPCBQUk9UWzMxOjBdIC4qLworICAgIHN0cnVjdAorICAgIHsKKyAgICAgICAgdWludDhfdCBwcm90c2w7IC8qITwgUFJPVFNbNzowXSAuKi8KKyAgICAgICAgdWludDhfdCBwcm90c2g7IC8qITwgUFJPVFNbMTU6OF0gLiovCisgICAgICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbMl07CisgICAgfSBwcm90czE2YjsKK30gcGZsYXNoX3Byb3RlY3Rpb25fc3RhdHVzX2xvd190OworCisvKiEKKyAqIEBicmllZiBQRmxhc2ggcHJvdGVjdGlvbiBzdGF0dXMgLSBmdWxsCisgKi8KK3R5cGVkZWYgc3RydWN0IF9wZmxhc2hfcHJvdGVjdGlvbl9zdGF0dXMKK3sKKyAgICBwZmxhc2hfcHJvdGVjdGlvbl9zdGF0dXNfbG93X3QgdmFsdWVMb3czMmI7IC8qITwgUFJPVFszMTowXSBvciBQUk9UU1sxNTowXS4qLworI2lmICgoRlNMX0ZFQVRVUkVfRkxBU0hfSVNfRlRGQSA9PSAxKSAmJiAoZGVmaW5lZChGVEZBX0ZQUk9UX1BST1RfTUFTSykpKSB8fCBcCisgICAgKChGU0xfRkVBVFVSRV9GTEFTSF9JU19GVEZFID09IDEpICYmIChkZWZpbmVkKEZURkVfRlBST1RfUFJPVF9NQVNLKSkpIHx8IFwKKyAgICAoKEZTTF9GRUFUVVJFX0ZMQVNIX0lTX0ZURkwgPT0gMSkgJiYgKGRlZmluZWQoRlRGTF9GUFJPVF9QUk9UX01BU0spKSkKKyAgICAvLyB1aW50MzJfdCBwcm90SGlnaDsgLyohPCBQUk9UWzYzOjMyXS4qLworICAgIHN0cnVjdAorICAgIHsKKyAgICAgICAgdWludDMyX3QgcHJvdGgzMmI7CisgICAgfSB2YWx1ZUhpZ2gzMmI7CisjZW5kaWYKK30gcGZsYXNoX3Byb3RlY3Rpb25fc3RhdHVzX3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgRmxleFJBTSBsb2FkIGR1cmluZyByZXNldCBvcHRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfcGFydGl0aW9uX2ZsZXhyYW1fbG9hZF9vcHRpb24KK3sKKyAgICBrRkxBU0hfUGFydGl0aW9uRmxleHJhbUxvYWRPcHRpb25Mb2FkZWRXaXRoVmFsaWRFZXByb21EYXRhID0KKyAgICAgICAgMHgwMFUsIC8qITwgRmxleFJBTSBpcyBsb2FkZWQgd2l0aCB2YWxpZCBFRVBST00gZGF0YSBkdXJpbmcgcmVzZXQgc2VxdWVuY2UuKi8KKyAgICBrRkxBU0hfUGFydGl0aW9uRmxleHJhbUxvYWRPcHRpb25Ob3RMb2FkZWQgPSAweDAxVSAvKiE8IEZsZXhSQU0gaXMgbm90IGxvYWRlZCBkdXJpbmcgcmVzZXQgc2VxdWVuY2UuKi8KK30gZmxhc2hfcGFydGl0aW9uX2ZsZXhyYW1fbG9hZF9vcHRpb25fdDsKKworLyohCisgKiBAYnJpZWYgRW51bWVyYXRpb24gZm9yIHRoZSBmbGFzaCBtZW1vcnkgaW5kZXguCisgKi8KK3R5cGVkZWYgZW51bSBfZmxhc2hfbWVtb3J5X2luZGV4Cit7CisgICAga0ZMQVNIX01lbW9yeUluZGV4UHJpbWFyeUZsYXNoID0gMHgwMFUsICAgLyohPCBDdXJyZW50IGZsYXNoIG1lbW9yeSBpcyBwcmltYXJ5IGZsYXNoLiovCisgICAga0ZMQVNIX01lbW9yeUluZGV4U2Vjb25kYXJ5Rmxhc2ggPSAweDAxVSwgLyohPCBDdXJyZW50IGZsYXNoIG1lbW9yeSBpcyBzZWNvbmRhcnkgZmxhc2guKi8KK30gZmxhc2hfbWVtb3J5X2luZGV4X3Q7CisKKy8qIQorICogQGJyaWVmIEVudW1lcmF0aW9uIGZvciB0aGUgZmxhc2ggY2FjaGUgY29udHJvbGxlciBpbmRleC4KKyAqLwordHlwZWRlZiBlbnVtIF9mbGFzaF9jYWNoZV9jb250cm9sbGVyX2luZGV4Cit7CisgICAga0ZMQVNIX0NhY2hlQ29udHJvbGxlckluZGV4Rm9yQ29yZTAgPSAweDAwVSwgLyohPCBDdXJyZW50IGZsYXNoIGNhY2hlIGNvbnRyb2xsZXIgaXMgZm9yIGNvcmUgMC4qLworICAgIGtGTEFTSF9DYWNoZUNvbnRyb2xsZXJJbmRleEZvckNvcmUxID0gMHgwMVUsIC8qITwgQ3VycmVudCBmbGFzaCBjYWNoZSBjb250cm9sbGVyIGlzIGZvciBjb3JlIDEuKi8KK30gZmxhc2hfY2FjaGVfY29udHJvbGxlcl9pbmRleF90OworCisvKiEgQGJyaWVmIEEgY2FsbGJhY2sgdHlwZSB1c2VkIGZvciB0aGUgUGZsYXNoIGJsb2NrKi8KK3R5cGVkZWYgdm9pZCAoKmZsYXNoX2NhbGxiYWNrX3QpKHZvaWQpOworCisvKiEKKyAqIEBicmllZiBFbnVtZXJhdGlvbiBmb3IgdGhlIHR3byBwb3NzaWJsZSBvcHRpb25zIG9mIGZsYXNoIHByZWZldGNoIHNwZWN1bGF0aW9uLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX29wdGlvbgoreworICAgIGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlID0gMHgwMFUsCisgICAga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25EaXNhYmxlID0gMHgwMVUKK30gZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fb3B0aW9uX3Q7CisKKy8qIQorICogQGJyaWVmIEZsYXNoIHByZWZldGNoIHNwZWN1bGF0aW9uIHN0YXR1cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2ZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX3N0YXR1cworeworICAgIGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX29wdGlvbl90IGluc3RydWN0aW9uT3B0aW9uOyAvKiE8IEluc3RydWN0aW9uIHNwZWN1bGF0aW9uLiovCisgICAgZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fb3B0aW9uX3QgZGF0YU9wdGlvbjsgICAgICAgIC8qITwgRGF0YSBzcGVjdWxhdGlvbi4qLworfSBmbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9zdGF0dXNfdDsKKworLyohCisgKiBAYnJpZWYgRmxhc2ggY2FjaGUgY2xlYXIgcHJvY2VzcyBjb2RlLgorICovCit0eXBlZGVmIGVudW0gX2ZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3MKK3sKKyAgICBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQcmUgPSAweDAwVSwgIC8qITwgUHJlIGZsYXNoIGNhY2hlIGNsZWFyIHByb2Nlc3MuKi8KKyAgICBrRkxBU0hfQ2FjaGVDbGVhclByb2Nlc3NQb3N0ID0gMHgwMVUsIC8qITwgUG9zdCBmbGFzaCBjYWNoZSBjbGVhciBwcm9jZXNzLiovCit9IGZsYXNoX2NhY2hlX2NsZWFyX3Byb2Nlc3NfdDsKKworLyohCisgKiBAYnJpZWYgQWN0aXZlIGZsYXNoIHByb3RlY3Rpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IG9wZXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2ZsYXNoX3Byb3RlY3Rpb25fY29uZmlnCit7CisgICAgdWludDMyX3QgcmVnaW9uQmFzZTsgIC8qITwgQmFzZSBhZGRyZXNzIG9mIGZsYXNoIHByb3RlY3Rpb24gcmVnaW9uLiovCisgICAgdWludDMyX3QgcmVnaW9uU2l6ZTsgIC8qITwgc2l6ZSBvZiBmbGFzaCBwcm90ZWN0aW9uIHJlZ2lvbi4qLworICAgIHVpbnQzMl90IHJlZ2lvbkNvdW50OyAvKiE8IGZsYXNoIHByb3RlY3Rpb24gcmVnaW9uIGNvdW50LiovCit9IGZsYXNoX3Byb3RlY3Rpb25fY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIEFjdGl2ZSBmbGFzaCBFeGVjdXRlLU9ubHkgYWNjZXNzIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9hY2Nlc3NfY29uZmlnCit7CisgICAgdWludDMyX3QgU2VnbWVudEJhc2U7ICAvKiE8IEJhc2UgYWRkcmVzcyBvZiBmbGFzaCBFeGVjdXRlLU9ubHkgc2VnbWVudC4qLworICAgIHVpbnQzMl90IFNlZ21lbnRTaXplOyAgLyohPCBzaXplIG9mIGZsYXNoIEV4ZWN1dGUtT25seSBzZWdtZW50LiovCisgICAgdWludDMyX3QgU2VnbWVudENvdW50OyAvKiE8IGZsYXNoIEV4ZWN1dGUtT25seSBzZWdtZW50IGNvdW50LiovCit9IGZsYXNoX2FjY2Vzc19jb25maWdfdDsKKworLyohCisgKiBAYnJpZWYgQWN0aXZlIGZsYXNoIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9mbGFzaF9vcGVyYXRpb25fY29uZmlnCit7CisgICAgdWludDMyX3QgY29udmVydGVkQWRkcmVzczsgICAgICAgICAgIC8qITwgQSBjb252ZXJ0ZWQgYWRkcmVzcyBmb3IgdGhlIGN1cnJlbnQgZmxhc2ggdHlwZS4qLworICAgIHVpbnQzMl90IGFjdGl2ZVNlY3RvclNpemU7ICAgICAgICAgICAvKiE8IEEgc2VjdG9yIHNpemUgb2YgdGhlIGN1cnJlbnQgZmxhc2ggdHlwZS4qLworICAgIHVpbnQzMl90IGFjdGl2ZUJsb2NrU2l6ZTsgICAgICAgICAgICAvKiE8IEEgYmxvY2sgc2l6ZSBvZiB0aGUgY3VycmVudCBmbGFzaCB0eXBlLiovCisgICAgdWludDMyX3QgYmxvY2tXcml0ZVVuaXRTaXplOyAgICAgICAgIC8qITwgVGhlIHdyaXRlIHVuaXQgc2l6ZS4qLworICAgIHVpbnQzMl90IHNlY3RvckNtZEFkZHJlc3NBbGlnbWVudDsgICAvKiE8IEFuIGVyYXNlIHNlY3RvciBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiovCisgICAgdWludDMyX3Qgc2VjdGlvbkNtZEFkZHJlc3NBbGlnbWVudDsgIC8qITwgQSBwcm9ncmFtL3ZlcmlmeSBzZWN0aW9uIGNvbW1hbmQgYWRkcmVzcyBhbGlnbm1lbnQuKi8KKyAgICB1aW50MzJfdCByZXNvdXJjZUNtZEFkZHJlc3NBbGlnbWVudDsgLyohPCBBIHJlYWQgcmVzb3VyY2UgY29tbWFuZCBhZGRyZXNzIGFsaWdubWVudC4qLworICAgIHVpbnQzMl90IGNoZWNrQ21kQWRkcmVzc0FsaWdtZW50OyAgICAvKiE8IEEgcHJvZ3JhbSBjaGVjayBjb21tYW5kIGFkZHJlc3MgYWxpZ25tZW50LiovCit9IGZsYXNoX29wZXJhdGlvbl9jb25maWdfdDsKKworLyohIEBicmllZiBGbGFzaCBkcml2ZXIgc3RhdGUgaW5mb3JtYXRpb24uCisgKgorICogQW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIG9mIHRoZSBmbGFzaCBkcml2ZXIgYW5kCisgKiBwYXNzZWQgaW50byBlYWNoIG9mIHRoZSBkcml2ZXIgQVBJcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2ZsYXNoX2NvbmZpZworeworICAgIHVpbnQzMl90IFBGbGFzaEJsb2NrQmFzZTsgICAgICAgICAgICAgICAgLyohPCBBIGJhc2UgYWRkcmVzcyBvZiB0aGUgZmlyc3QgUEZsYXNoIGJsb2NrICovCisgICAgdWludDMyX3QgUEZsYXNoVG90YWxTaXplOyAgICAgICAgICAgICAgICAvKiE8IFRoZSBzaXplIG9mIHRoZSBjb21iaW5lZCBQRmxhc2ggYmxvY2suICovCisgICAgdWludDhfdCBQRmxhc2hCbG9ja0NvdW50OyAgICAgICAgICAgICAgICAvKiE8IEEgbnVtYmVyIG9mIFBGbGFzaCBibG9ja3MuICovCisgICAgdWludDhfdCBGbGFzaE1lbW9yeUluZGV4OyAgICAgICAgICAgICAgICAvKiE8IDAgLSBwcmltYXJ5IGZsYXNoOyAxIC0gc2Vjb25kYXJ5IGZsYXNoKi8KKyAgICB1aW50OF90IEZsYXNoQ2FjaGVDb250cm9sbGVySW5kZXg7ICAgICAgIC8qITwgMCAtIENvbnRyb2xsZXIgZm9yIGNvcmUgMDsgMSAtIENvbnRyb2xsZXIgZm9yIGNvcmUgMSAqLworICAgIHVpbnQ4X3QgUmVzZXJ2ZWQwOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXNlcnZlZCBmaWVsZCAwICovCisgICAgdWludDMyX3QgUEZsYXNoU2VjdG9yU2l6ZTsgICAgICAgICAgICAgICAvKiE8IFRoZSBzaXplIGluIGJ5dGVzIG9mIGEgc2VjdG9yIG9mIFBGbGFzaC4gKi8KKyAgICBmbGFzaF9jYWxsYmFja190IFBGbGFzaENhbGxiYWNrOyAgICAgICAgIC8qITwgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgZmxhc2ggQVBJLiAqLworICAgIHVpbnQzMl90IFBGbGFzaEFjY2Vzc1NlZ21lbnRTaXplOyAgICAgICAgLyohPCBBIHNpemUgaW4gYnl0ZXMgb2YgYW4gYWNjZXNzIHNlZ21lbnQgb2YgUEZsYXNoLiAqLworICAgIHVpbnQzMl90IFBGbGFzaEFjY2Vzc1NlZ21lbnRDb3VudDsgICAgICAgLyohPCBBIG51bWJlciBvZiBQRmxhc2ggYWNjZXNzIHNlZ21lbnRzLiAqLworICAgIHVpbnQzMl90ICpmbGFzaEV4ZWN1dGVJblJhbUZ1bmN0aW9uSW5mbzsgLyohPCBBbiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgb2YgdGhlIGZsYXNoIGV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uLiAqLworICAgIHVpbnQzMl90IEZsZXhSQU1CbG9ja0Jhc2U7ICAgICAgICAgICAgICAgLyohPCBGb3IgdGhlIEZsZXhOVk0gZGV2aWNlLCB0aGlzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEZsZXhSQU0gKi8KKyAgICAvKiE8IEZvciB0aGUgbm9uLUZsZXhOVk0gZGV2aWNlLCB0aGlzIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFjY2VsZXJhdGlvbiBSQU0gbWVtb3J5ICovCisgICAgdWludDMyX3QgRmxleFJBTVRvdGFsU2l6ZTsgLyohPCBGb3IgdGhlIEZsZXhOVk0gZGV2aWNlLCB0aGlzIGlzIHRoZSBzaXplIG9mIHRoZSBGbGV4UkFNICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgdGhlIG5vbi1GbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgYWNjZWxlcmF0aW9uIFJBTSBtZW1vcnkgKi8KKyAgICB1aW50MzJfdAorICAgICAgICBERmxhc2hCbG9ja0Jhc2U7IC8qITwgRm9yIHRoZSBGbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBELUZsYXNoIG1lbW9yeSAoRmxleE5WTSBtZW1vcnkpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgdGhlIG5vbi1GbGV4TlZNIGRldmljZSwgdGhpcyBmaWVsZCBpcyB1bnVzZWQgKi8KKyAgICB1aW50MzJfdCBERmxhc2hUb3RhbFNpemU7IC8qITwgRm9yIHRoZSBGbGV4TlZNIGRldmljZSwgdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgRmxleE5WTSBtZW1vcnk7ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZvciB0aGUgbm9uLUZsZXhOVk0gZGV2aWNlLCB0aGlzIGZpZWxkIGlzIHVudXNlZCAqLworICAgIHVpbnQzMl90IEVFcHJvbVRvdGFsU2l6ZTsgLyohPCBGb3IgdGhlIEZsZXhOVk0gZGV2aWNlLCB0aGlzIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBFRVBST00gYXJlYSB3aGljaCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbmVkIGZyb20gRmxleFJBTSAqLworICAgIC8qITwgRm9yIHRoZSBub24tRmxleE5WTSBkZXZpY2UsIHRoaXMgZmllbGQgaXMgdW51c2VkICovCit9IGZsYXNoX2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIGdsb2JhbCBmbGFzaCBwcm9wZXJ0aWVzIHN0cnVjdHVyZSBtZW1iZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGFuZCBpbml0aWFsaXplcyB0aGUgRmxhc2ggbW9kdWxlIGZvciB0aGUgb3RoZXIgRmxhc2ggQVBJcy4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1BhcnRpdGlvblN0YXR1c1VwZGF0ZUZhaWx1cmUgRmFpbGVkIHRvIHVwZGF0ZSB0aGUgcGFydGl0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgRkxBU0hfSW5pdChmbGFzaF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZGVzaXJlZCBmbGFzaCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIHN0b3JlZCBpbiB0aGUgZHJpdmVyLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKi8KK3N0YXR1c190IEZMQVNIX1NldENhbGxiYWNrKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX2NhbGxiYWNrX3QgY2FsbGJhY2spOworCisvKiEKKyAqIEBicmllZiBQcmVwYXJlcyBmbGFzaCBleGVjdXRlLWluLVJBTSBmdW5jdGlvbnMuCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqLworI2lmIEZMQVNIX0RSSVZFUl9JU19GTEFTSF9SRVNJREVOVAorc3RhdHVzX3QgRkxBU0hfUHJlcGFyZUV4ZWN1dGVJblJhbUZ1bmN0aW9ucyhmbGFzaF9jb25maWdfdCAqY29uZmlnKTsKKyNlbmRpZgorCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBFcmFzaW5nCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVyYXNlcyBlbnRpcmUgZmxhc2gKKyAqCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBrZXkgQSB2YWx1ZSB1c2VkIHRvIHZhbGlkYXRlIGFsbCBmbGFzaCBlcmFzZSBBUElzLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0VyYXNlS2V5RXJyb3IgQVBJIGVyYXNlIGtleSBpcyBpbnZhbGlkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUGFydGl0aW9uU3RhdHVzVXBkYXRlRmFpbHVyZSBGYWlsZWQgdG8gdXBkYXRlIHRoZSBwYXJ0aXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBGTEFTSF9FcmFzZUFsbChmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBrZXkpOworCisvKiEKKyAqIEBicmllZiBFcmFzZXMgdGhlIGZsYXNoIHNlY3RvcnMgZW5jb21wYXNzZWQgYnkgcGFyYW1ldGVycyBwYXNzZWQgaW50byBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVyYXNlcyB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGZsYXNoIHNlY3RvcnMgYmFzZWQgb24gdGhlCisgKiBkZXNpcmVkIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFRoZSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIGVyYXNlZC4KKyAqICAgICAgICAgICAgICBUaGUgc3RhcnQgYWRkcmVzcyBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3Rvci1hbGlnbmVkIGJ1dCBtdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcykKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGVyYXNlZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0ga2V5IFRoZSB2YWx1ZSB1c2VkIHRvIHZhbGlkYXRlIGFsbCBmbGFzaCBlcmFzZSBBUElzLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yIFRoZSBwYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BZGRyZXNzRXJyb3IgVGhlIGFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FcmFzZUtleUVycm9yIFRoZSBBUEkgZXJhc2Uga2V5IGlzIGludmFsaWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfRXJhc2UoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsIHVpbnQzMl90IGtleSk7CisKKy8qIQorICogQGJyaWVmIEVyYXNlcyB0aGUgZW50aXJlIGZsYXNoLCBpbmNsdWRpbmcgcHJvdGVjdGVkIHNlY3RvcnMuCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0ga2V5IEEgdmFsdWUgdXNlZCB0byB2YWxpZGF0ZSBhbGwgZmxhc2ggZXJhc2UgQVBJcy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FcmFzZUtleUVycm9yIEFQSSBlcmFzZSBrZXkgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1BhcnRpdGlvblN0YXR1c1VwZGF0ZUZhaWx1cmUgRmFpbGVkIHRvIHVwZGF0ZSB0aGUgcGFydGl0aW9uIHN0YXR1cy4KKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX0VSQVNFX0FMTF9CTE9DS1NfVU5TRUNVUkVfQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfRVJBU0VfQUxMX0JMT0NLU19VTlNFQ1VSRV9DTUQKK3N0YXR1c190IEZMQVNIX0VyYXNlQWxsVW5zZWN1cmUoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qga2V5KTsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBFcmFzZXMgYWxsIHByb2dyYW0gZmxhc2ggZXhlY3V0ZS1vbmx5IHNlZ21lbnRzIGRlZmluZWQgYnkgdGhlIEZYQUNDIHJlZ2lzdGVycy4KKyAqCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBrZXkgQSB2YWx1ZSB1c2VkIHRvIHZhbGlkYXRlIGFsbCBmbGFzaCBlcmFzZSBBUElzLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0VyYXNlS2V5RXJyb3IgQVBJIGVyYXNlIGtleSBpcyBpbnZhbGlkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX0VyYXNlQWxsRXhlY3V0ZU9ubHlTZWdtZW50cyhmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBrZXkpOworCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBQcm9ncmFtbWluZworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBQcm9ncmFtcyBmbGFzaCB3aXRoIGRhdGEgYXQgbG9jYXRpb25zIHBhc3NlZCBpbiB0aHJvdWdoIHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aGUgZmxhc2ggbWVtb3J5IHdpdGggdGhlIGRlc2lyZWQgZGF0YSBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdGFydCBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIHByb2dyYW1tZWQuIE11c3QgYmUKKyAqICAgICAgICAgICAgICB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gc3JjIEEgcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgaXMgdG8gYmUgcHJvZ3JhbW1lZAorICogICAgICAgICAgICBpbnRvIHRoZSBmbGFzaC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcyksCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BZGRyZXNzRXJyb3IgQWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfUHJvZ3JhbShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcyk7CisKKy8qIQorICogQGJyaWVmIFByb2dyYW1zIFByb2dyYW0gT25jZSBGaWVsZCB0aHJvdWdoIHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aGUgUHJvZ3JhbSBPbmNlIEZpZWxkIHdpdGggdGhlIGRlc2lyZWQgZGF0YSBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluZGljYXRpbmcgd2hpY2ggYXJlYSBvZiB0aGUgUHJvZ3JhbSBPbmNlIEZpZWxkIHRvIGJlIHByb2dyYW1tZWQuCisgKiBAcGFyYW0gc3JjIEEgcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgaXMgdG8gYmUgcHJvZ3JhbW1lZAorICogICAgICAgICAgICBpbnRvIHRoZSBQcm9ncmFtIE9uY2UgRmllbGQuCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpLAorICogICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcHJvZ3JhbW1lZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCitzdGF0dXNfdCBGTEFTSF9Qcm9ncmFtT25jZShmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBpbmRleCwgdWludDMyX3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcyk7CisKKy8qIQorICogQGJyaWVmIFByb2dyYW1zIGZsYXNoIHdpdGggZGF0YSBhdCBsb2NhdGlvbnMgcGFzc2VkIGluIHRocm91Z2ggcGFyYW1ldGVycyB2aWEgdGhlIFByb2dyYW0gU2VjdGlvbiBjb21tYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIGZsYXNoIG1lbW9yeSB3aXRoIHRoZSBkZXNpcmVkIGRhdGEgZm9yIGEgZ2l2ZW4KKyAqIGZsYXNoIGFyZWEgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgZmxhc2ggbWVtb3J5IHRvIGJlIHByb2dyYW1tZWQuIE11c3QgYmUKKyAqICAgICAgICAgICAgICB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gc3JjIEEgcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgaXMgdG8gYmUgcHJvZ3JhbW1lZAorICogICAgICAgICAgICBpbnRvIHRoZSBmbGFzaC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcyksCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCBzcGVjaWZpZWQgYmFzZWxpbmUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvciBBZGRyZXNzIGlzIG91dCBvZiByYW5nZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU2V0RmxleHJhbUFzUmFtRXJyb3IgRmFpbGVkIHRvIHNldCBmbGV4cmFtIGFzIFJBTS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1JlY292ZXJGbGV4cmFtQXNFZXByb21FcnJvciBGYWlsZWQgdG8gcmVjb3ZlciBGbGV4UkFNIGFzIEVFUFJPTS4KKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1BST0dSQU1fU0VDVElPTl9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QUk9HUkFNX1NFQ1RJT05fQ01ECitzdGF0dXNfdCBGTEFTSF9Qcm9ncmFtU2VjdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcyk7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgUHJvZ3JhbXMgdGhlIEVFUFJPTSB3aXRoIGRhdGEgYXQgbG9jYXRpb25zIHBhc3NlZCBpbiB0aHJvdWdoIHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aGUgZW11bGF0ZWQgRUVQUk9NIHdpdGggdGhlIGRlc2lyZWQgZGF0YSBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGguCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBtZW1vcnkgdG8gYmUgcHJvZ3JhbW1lZC4gTXVzdCBiZQorICogICAgICAgICAgICAgIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBzcmMgQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgYnVmZmVyIG9mIGRhdGEgdGhhdCBpcyB0byBiZSBwcm9ncmFtbWVkCisgKiAgICAgICAgICAgIGludG8gdGhlIGZsYXNoLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKSwKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHByb2dyYW1tZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FkZHJlc3NFcnJvciBBZGRyZXNzIGlzIG91dCBvZiByYW5nZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU2V0RmxleHJhbUFzRWVwcm9tRXJyb3IgRmFpbGVkIHRvIHNldCBmbGV4cmFtIGFzIGVlcHJvbS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9SZWNvdmVyRmxleHJhbUFzUmFtRXJyb3IgRmFpbGVkIHRvIHJlY292ZXIgdGhlIEZsZXhSQU0gYXMgUkFNLgorICovCisjaWYgRkxBU0hfU1NEX0lTX0ZMRVhOVk1fRU5BQkxFRAorc3RhdHVzX3QgRkxBU0hfRWVwcm9tV3JpdGUoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQ4X3QgKnNyYywgdWludDMyX3QgbGVuZ3RoSW5CeXRlcyk7CisjZW5kaWYKKworLypAfSovCisKKy8qIQorICogQG5hbWUgUmVhZGluZworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgcmVzb3VyY2Ugd2l0aCBkYXRhIGF0IGxvY2F0aW9ucyBwYXNzZWQgaW4gdGhyb3VnaCBwYXJhbWV0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGZsYXNoIG1lbW9yeSB3aXRoIHRoZSBkZXNpcmVkIGxvY2F0aW9uIGZvciBhIGdpdmVuCisgKiBmbGFzaCBhcmVhIGFzIGRldGVybWluZWQgYnkgdGhlIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGZsYXNoIG1lbW9yeSB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlCisgKiAgICAgICAgICAgICAgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGRzdCBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvZiBkYXRhIHRoYXQgaXMgdXNlZCB0byBzdG9yZQorICogICAgICAgIGRhdGEgdG8gYmUgcmVhZC4KKyAqIEBwYXJhbSBsZW5ndGhJbkJ5dGVzIFRoZSBsZW5ndGgsIGdpdmVuIGluIGJ5dGVzIChub3Qgd29yZHMgb3IgbG9uZy13b3JkcyksCisgKiAgICAgICAgdG8gYmUgcmVhZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gb3B0aW9uIFRoZSByZXNvdXJjZSBvcHRpb24gd2hpY2ggaW5kaWNhdGVzIHdoaWNoIGFyZWEgc2hvdWxkIGJlIHJlYWQgYmFjay4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19SRUFEX1JFU09VUkNFX0NNRCkgJiYgRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1JFQURfUkVTT1VSQ0VfQ01ECitzdGF0dXNfdCBGTEFTSF9SZWFkUmVzb3VyY2UoCisgICAgZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90ICpkc3QsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsIGZsYXNoX3JlYWRfcmVzb3VyY2Vfb3B0aW9uX3Qgb3B0aW9uKTsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgUHJvZ3JhbSBPbmNlIEZpZWxkIHRocm91Z2ggcGFyYW1ldGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSByZWFkIG9uY2UgZmVpbGQgd2l0aCBnaXZlbiBpbmRleCBhbmQgbGVuZ3RoLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluZGljYXRpbmcgdGhlIGFyZWEgb2YgcHJvZ3JhbSBvbmNlIGZpZWxkIHRvIGJlIHJlYWQuCisgKiBAcGFyYW0gZHN0IEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9mIGRhdGEgdGhhdCBpcyB1c2VkIHRvIHN0b3JlCisgKiAgICAgICAgZGF0YSB0byBiZSByZWFkLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKSwKKyAqICAgICAgICB0byBiZSBwcm9ncmFtbWVkLiBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1JlYWRPbmNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCAqZHN0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzKTsKKworLypAfSovCisKKy8qIQorICogQG5hbWUgU2VjdXJpdHkKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgUmV0dXJucyB0aGUgc2VjdXJpdHkgc3RhdGUgdmlhIHRoZSBwb2ludGVyIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgY3VycmVudCBmbGFzaCBzZWN1cml0eSBzdGF0dXMsIGluY2x1ZGluZyB0aGUKKyAqIHNlY3VyaXR5IGVuYWJsaW5nIHN0YXRlIGFuZCB0aGUgYmFja2Rvb3Iga2V5IGVuYWJsaW5nIHN0YXRlLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGF0ZSBBIHBvaW50ZXIgdG8gdGhlIHZhbHVlIHJldHVybmVkIGZvciB0aGUgY3VycmVudCBzZWN1cml0eSBzdGF0dXMgY29kZToKKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICovCitzdGF0dXNfdCBGTEFTSF9HZXRTZWN1cml0eVN0YXRlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIGZsYXNoX3NlY3VyaXR5X3N0YXRlX3QgKnN0YXRlKTsKKworLyohCisgKiBAYnJpZWYgQWxsb3dzIHVzZXJzIHRvIGJ5cGFzcyBzZWN1cml0eSB3aXRoIGEgYmFja2Rvb3Iga2V5LgorICoKKyAqIElmIHRoZSBNQ1UgaXMgaW4gc2VjdXJlZCBzdGF0ZSwgdGhpcyBmdW5jdGlvbiB1bnNlY3VyZXMgdGhlIE1DVSBieQorICogY29tcGFyaW5nIHRoZSBwcm92aWRlZCBiYWNrZG9vciBrZXkgd2l0aCBvbmVzIGluIHRoZSBmbGFzaCBjb25maWd1cmF0aW9uCisgKiBmaWVsZC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIGJhY2tkb29yS2V5IEEgcG9pbnRlciB0byB0aGUgdXNlciBidWZmZXIgY29udGFpbmluZyB0aGUgYmFja2Rvb3Iga2V5LgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfU2VjdXJpdHlCeXBhc3MoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgY29uc3QgdWludDhfdCAqYmFja2Rvb3JLZXkpOworCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBWZXJpZmljYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgVmVyaWZpZXMgZXJhc3VyZSBvZiB0aGUgZW50aXJlIGZsYXNoIGF0IGEgc3BlY2lmaWVkIG1hcmdpbiBsZXZlbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBmbGFzaCBpcyBlcmFzZWQgdG8gdGhlCisgKiBzcGVjaWZpZWQgcmVhZCBtYXJnaW4gbGV2ZWwuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBtYXJnaW4gUmVhZCBtYXJnaW4gY2hvaWNlLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfVmVyaWZ5RXJhc2VBbGwoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luKTsKKworLyohCisgKiBAYnJpZWYgVmVyaWZpZXMgYW4gZXJhc3VyZSBvZiB0aGUgZGVzaXJlZCBmbGFzaCBhcmVhIGF0IGEgc3BlY2lmaWVkIG1hcmdpbiBsZXZlbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGZsYXNoIHNlY3RvcnMgYmFzZWQgb24KKyAqIHRoZSBkZXNpcmVkIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbmd0aCB0byBjaGVjayB3aGV0aGVyIHRoZSBmbGFzaCBpcyBlcmFzZWQKKyAqIHRvIHRoZSBzcGVjaWZpZWQgcmVhZCBtYXJnaW4gbGV2ZWwuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBtZW1vcnkgdG8gYmUgdmVyaWZpZWQuCisgKiAgICAgICAgVGhlIHN0YXJ0IGFkZHJlc3MgZG9lcyBub3QgbmVlZCB0byBiZSBzZWN0b3ItYWxpZ25lZCBidXQgbXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpLAorICogICAgICAgIHRvIGJlIHZlcmlmaWVkLiBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBtYXJnaW4gUmVhZCBtYXJnaW4gY2hvaWNlLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yIFBhcmFtZXRlciBpcyBub3QgYWxpZ25lZCB3aXRoIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yIEFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1ZlcmlmeUVyYXNlKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCBmbGFzaF9tYXJnaW5fdmFsdWVfdCBtYXJnaW4pOworCisvKiEKKyAqIEBicmllZiBWZXJpZmllcyBwcm9ncmFtbWluZyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBhcmVhIGF0IGEgc3BlY2lmaWVkIG1hcmdpbiBsZXZlbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBkYXRhIHByb2dyYW1lZCBpbiB0aGUgZmxhc2ggbWVtb3J5IHVzaW5nIHRoZQorICogRmxhc2ggUHJvZ3JhbSBDaGVjayBDb21tYW5kIGFuZCBjb21wYXJlcyBpdCB0byB0aGUgZXhwZWN0ZWQgZGF0YSBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGguCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBtZW1vcnkgdG8gYmUgdmVyaWZpZWQuIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIGxlbmd0aEluQnl0ZXMgVGhlIGxlbmd0aCwgZ2l2ZW4gaW4gYnl0ZXMgKG5vdCB3b3JkcyBvciBsb25nLXdvcmRzKSwKKyAqICAgICAgICB0byBiZSB2ZXJpZmllZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gZXhwZWN0ZWREYXRhIEEgcG9pbnRlciB0byB0aGUgZXhwZWN0ZWQgZGF0YSB0aGF0IGlzIHRvIGJlCisgKiAgICAgICAgdmVyaWZpZWQgYWdhaW5zdC4KKyAqIEBwYXJhbSBtYXJnaW4gUmVhZCBtYXJnaW4gY2hvaWNlLgorICogQHBhcmFtIGZhaWxlZEFkZHJlc3MgQSBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBmYWlsaW5nIGFkZHJlc3MuCisgKiBAcGFyYW0gZmFpbGVkRGF0YSBBIHBvaW50ZXIgdG8gdGhlIHJldHVybmVkIGZhaWxpbmcgZGF0YS4gIFNvbWUgZGVyaXZhdGl2ZXMgZG8KKyAqICAgICAgICBub3QgaW5jbHVkZSBmYWlsZWQgZGF0YSBhcyBwYXJ0IG9mIHRoZSBGQ0NPQnggcmVnaXN0ZXJzLiAgSW4gdGhpcworICogICAgICAgIGNhc2UsIHplcm9zIGFyZSByZXR1cm5lZCB1cG9uIGZhaWx1cmUuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWxpZ25tZW50RXJyb3IgUGFyYW1ldGVyIGlzIG5vdCBhbGlnbmVkIHdpdGggc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BZGRyZXNzRXJyb3IgQWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworc3RhdHVzX3QgRkxBU0hfVmVyaWZ5UHJvZ3JhbShmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmV4cGVjdGVkRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZmFpbGVkQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmZhaWxlZERhdGEpOworCisvKiEKKyAqIEBicmllZiBWZXJpZmllcyB3aGV0aGVyIHRoZSBwcm9ncmFtIGZsYXNoIGV4ZWN1dGUtb25seSBzZWdtZW50cyBoYXZlIGJlZW4gZXJhc2VkIHRvCisgKiAgdGhlIHNwZWNpZmllZCByZWFkIG1hcmdpbiBsZXZlbC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIG1hcmdpbiBSZWFkIG1hcmdpbiBjaG9pY2UuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfRXhlY3V0ZUluUmFtRnVuY3Rpb25Ob3RSZWFkeSBFeGVjdXRlLWluLVJBTSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BY2Nlc3NFcnJvciBJbnZhbGlkIGluc3RydWN0aW9uIGNvZGVzIGFuZCBvdXQtb2YgYm91bmRzIGFkZHJlc3Nlcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfUHJvdGVjdGlvblZpb2xhdGlvbiBUaGUgcHJvZ3JhbS9lcmFzZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIHRvIGV4ZWN1dGUgb24gcHJvdGVjdGVkIGFyZWFzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCitzdGF0dXNfdCBGTEFTSF9WZXJpZnlFcmFzZUFsbEV4ZWN1dGVPbmx5U2VnbWVudHMoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfbWFyZ2luX3ZhbHVlX3QgbWFyZ2luKTsKKworLypAfSovCisKKy8qIQorICogQG5hbWUgUHJvdGVjdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBwcm90ZWN0aW9uIHN0YXRlIG9mIHRoZSBkZXNpcmVkIGZsYXNoIGFyZWEgdmlhIHRoZSBwb2ludGVyIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgY3VycmVudCBmbGFzaCBwcm90ZWN0IHN0YXR1cyBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGguCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBtZW1vcnkgdG8gYmUgY2hlY2tlZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpCisgKiAgICAgICAgdG8gYmUgY2hlY2tlZC4gIE11c3QgYmUgd29yZC1hbGlnbmVkLgorICogQHBhcmFtIHByb3RlY3Rpb25fc3RhdGUgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgdGhlIGN1cnJlbnQKKyAqICAgICAgICBwcm90ZWN0aW9uIHN0YXR1cyBjb2RlIGZvciB0aGUgZGVzaXJlZCBmbGFzaCBhcmVhLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yIFBhcmFtZXRlciBpcyBub3QgYWxpZ25lZCB3aXRoIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWRkcmVzc0Vycm9yIFRoZSBhZGRyZXNzIGlzIG91dCBvZiByYW5nZS4KKyAqLworc3RhdHVzX3QgRkxBU0hfSXNQcm90ZWN0ZWQoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoSW5CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3Byb3RlY3Rpb25fc3RhdGVfdCAqcHJvdGVjdGlvbl9zdGF0ZSk7CisKKy8qIQorICogQGJyaWVmIFJldHVybnMgdGhlIGFjY2VzcyBzdGF0ZSBvZiB0aGUgZGVzaXJlZCBmbGFzaCBhcmVhIHZpYSB0aGUgcG9pbnRlciBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZmxhc2ggYWNjZXNzIHN0YXR1cyBmb3IgYSBnaXZlbgorICogZmxhc2ggYXJlYSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdGFydCBhZGRyZXNzIGFuZCBsZW5ndGguCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBmbGFzaCBtZW1vcnkgdG8gYmUgY2hlY2tlZC4gTXVzdCBiZSB3b3JkLWFsaWduZWQuCisgKiBAcGFyYW0gbGVuZ3RoSW5CeXRlcyBUaGUgbGVuZ3RoLCBnaXZlbiBpbiBieXRlcyAobm90IHdvcmRzIG9yIGxvbmctd29yZHMpLAorICogICAgICAgIHRvIGJlIGNoZWNrZWQuICBNdXN0IGJlIHdvcmQtYWxpZ25lZC4KKyAqIEBwYXJhbSBhY2Nlc3Nfc3RhdGUgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgdGhlIGN1cnJlbnQKKyAqICAgICAgICBhY2Nlc3Mgc3RhdHVzIGNvZGUgZm9yIHRoZSBkZXNpcmVkIGZsYXNoIGFyZWEuCisgKgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkQXJndW1lbnQgQW4gaW52YWxpZCBhcmd1bWVudCBpcyBwcm92aWRlZC4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWxpZ25tZW50RXJyb3IgVGhlIHBhcmFtZXRlciBpcyBub3QgYWxpZ25lZCB0byB0aGUgc3BlY2lmaWVkIGJhc2VsaW5lLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BZGRyZXNzRXJyb3IgVGhlIGFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlLgorICovCitzdGF0dXNfdCBGTEFTSF9Jc0V4ZWN1dGVPbmx5KGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9leGVjdXRlX29ubHlfYWNjZXNzX3N0YXRlX3QgKmFjY2Vzc19zdGF0ZSk7CisKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFByb3BlcnRpZXMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgUmV0dXJucyB0aGUgZGVzaXJlZCBmbGFzaCBwcm9wZXJ0eS4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHdoaWNoUHJvcGVydHkgVGhlIGRlc2lyZWQgcHJvcGVydHkgZnJvbSB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGluCisgKiAgICAgICAgZW51bSBmbGFzaF9wcm9wZXJ0eV90YWdfdAorICogQHBhcmFtIHZhbHVlIEEgcG9pbnRlciB0byB0aGUgdmFsdWUgcmV0dXJuZWQgZm9yIHRoZSBkZXNpcmVkIGZsYXNoIHByb3BlcnR5LgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Vua25vd25Qcm9wZXJ0eSBBbiB1bmtub3duIHByb3BlcnR5IHRhZy4KKyAqLworc3RhdHVzX3QgRkxBU0hfR2V0UHJvcGVydHkoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfcHJvcGVydHlfdGFnX3Qgd2hpY2hQcm9wZXJ0eSwgdWludDMyX3QgKnZhbHVlKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgZGVzaXJlZCBmbGFzaCBwcm9wZXJ0eS4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHdoaWNoUHJvcGVydHkgVGhlIGRlc2lyZWQgcHJvcGVydHkgZnJvbSB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGluCisgKiAgICAgICAgZW51bSBmbGFzaF9wcm9wZXJ0eV90YWdfdAorICogQHBhcmFtIHZhbHVlIEEgdG8gc2V0IGZvciB0aGUgZGVzaXJlZCBmbGFzaCBwcm9wZXJ0eS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Vbmtub3duUHJvcGVydHkgQW4gdW5rbm93biBwcm9wZXJ0eSB0YWcuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRQcm9wZXJ0eVZhbHVlIEFuIGludmFsaWQgcHJvcGVydHkgdmFsdWUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1JlYWRPbmx5UHJvcGVydHkgQW4gcmVhZC1vbmx5IHByb3BlcnR5IHRhZy4KKyAqLworc3RhdHVzX3QgRkxBU0hfU2V0UHJvcGVydHkoZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgZmxhc2hfcHJvcGVydHlfdGFnX3Qgd2hpY2hQcm9wZXJ0eSwgdWludDMyX3QgdmFsdWUpOworCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBGbGV4UkFNCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIEZsZXhSQU0gZnVuY3Rpb24gY29tbWFuZC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIG9wdGlvbiBUaGUgb3B0aW9uIHVzZWQgdG8gc2V0IHRoZSB3b3JrIG1vZGUgb2YgRmxleFJBTS4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TRVRfRkxFWFJBTV9GVU5DVElPTl9DTUQKK3N0YXR1c190IEZMQVNIX1NldEZsZXhyYW1GdW5jdGlvbihmbGFzaF9jb25maWdfdCAqY29uZmlnLCBmbGFzaF9mbGV4cmFtX2Z1bmN0aW9uX29wdGlvbl90IG9wdGlvbik7CisjZW5kaWYKKworLypAfSovCisKKy8qIQorICogQG5hbWUgU3dhcAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBTd2FwIGZ1bmN0aW9uIG9yIGNoZWNrcyB0aGUgdGhlIHN3YXAgc3RhdGUgb2YgdGhlIEZsYXNoIG1vZHVsZS4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIGFkZHJlc3MgQWRkcmVzcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZmxhc2ggU3dhcCBmdW5jdGlvbi4KKyAqIEBwYXJhbSBvcHRpb24gVGhlIHBvc3NpYmxlIG9wdGlvbiB1c2VkIHRvIGNvbmZpZ3VyZSBGbGFzaCBTd2FwIGZ1bmN0aW9uIG9yIGNoZWNrIHRoZSBmbGFzaCBTd2FwIHN0YXR1cworICogQHBhcmFtIHJldHVybkluZm8gQSBwb2ludGVyIHRvIHRoZSBkYXRhIHdoaWNoIGlzIHVzZWQgdG8gcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBvZiBmbGFzaCBTd2FwLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FsaWdubWVudEVycm9yIFBhcmFtZXRlciBpcyBub3QgYWxpZ25lZCB3aXRoIHNwZWNpZmllZCBiYXNlbGluZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3dhcEluZGljYXRvckFkZHJlc3NFcnJvciBTd2FwIGluZGljYXRvciBhZGRyZXNzIGlzIGludmFsaWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfRkxBU0hfSEFTX1NXQVBfQ09OVFJPTF9DTUQpICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19TV0FQX0NPTlRST0xfQ01ECitzdGF0dXNfdCBGTEFTSF9Td2FwQ29udHJvbChmbGFzaF9jb25maWdfdCAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3N3YXBfY29udHJvbF9vcHRpb25fdCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFzaF9zd2FwX3N0YXRlX2NvbmZpZ190ICpyZXR1cm5JbmZvKTsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBTd2FwcyB0aGUgbG93ZXIgaGFsZiBmbGFzaCB3aXRoIHRoZSBoaWdoZXIgaGFsZiBmbGFzaC4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIGFkZHJlc3MgQWRkcmVzcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZmxhc2ggc3dhcCBmdW5jdGlvbgorICogQHBhcmFtIG9wdGlvbiBUaGUgcG9zc2libGUgb3B0aW9uIHVzZWQgdG8gY29uZmlndXJlIHRoZSBGbGFzaCBTd2FwIGZ1bmN0aW9uIG9yIGNoZWNrIHRoZSBmbGFzaCBTd2FwIHN0YXR1cy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9BbGlnbm1lbnRFcnJvciBQYXJhbWV0ZXIgaXMgbm90IGFsaWduZWQgd2l0aCBzcGVjaWZpZWQgYmFzZWxpbmUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N3YXBJbmRpY2F0b3JBZGRyZXNzRXJyb3IgU3dhcCBpbmRpY2F0b3IgYWRkcmVzcyBpcyBpbnZhbGlkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9FeGVjdXRlSW5SYW1GdW5jdGlvbk5vdFJlYWR5IEV4ZWN1dGUtaW4tUkFNIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0FjY2Vzc0Vycm9yIEludmFsaWQgaW5zdHJ1Y3Rpb24gY29kZXMgYW5kIG91dC1vZiBib3VuZHMgYWRkcmVzc2VzLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Qcm90ZWN0aW9uVmlvbGF0aW9uIFRoZSBwcm9ncmFtL2VyYXNlIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgdG8gZXhlY3V0ZSBvbiBwcm90ZWN0ZWQgYXJlYXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmRGYWlsdXJlIFJ1bi10aW1lIGVycm9yIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbi4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3dhcFN5c3RlbU5vdEluVW5pbml0aWFsaXplZCBTd2FwIHN5c3RlbSBpcyBub3QgaW4gYW4gdW5pbml0aWFsemVkIHN0YXRlLgorICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUEZMQVNIX0JMT0NLX1NXQVApICYmIEZTTF9GRUFUVVJFX0ZMQVNIX0hBU19QRkxBU0hfQkxPQ0tfU1dBUAorc3RhdHVzX3QgRkxBU0hfU3dhcChmbGFzaF9jb25maWdfdCAqY29uZmlnLCB1aW50MzJfdCBhZGRyZXNzLCBmbGFzaF9zd2FwX2Z1bmN0aW9uX29wdGlvbl90IG9wdGlvbik7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBGbGV4TlZNCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFByZXBhcmVzIHRoZSBGbGV4TlZNIGJsb2NrIGZvciB1c2UgYXMgZGF0YSBmbGFzaCwgRUVQUk9NIGJhY2t1cCwgb3IgYSBjb21iaW5hdGlvbiBvZiBib3RoIGFuZCBpbml0aWFsaXplcyB0aGUKKyAqIEZsZXhSQU0uCisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBvcHRpb24gVGhlIG9wdGlvbiB1c2VkIHRvIHNldCBGbGV4UkFNIGxvYWQgYmVoYXZpb3IgZHVyaW5nIHJlc2V0LgorICogQHBhcmFtIGVlcHJvbURhdGFTaXplQ29kZSBEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2YgRmxleFJBTSB1c2VkIGluIGVhY2ggb2YgdGhlIGF2YWlsYWJsZSBFRVBST00gc3Vic3lzdGVtcy4KKyAqIEBwYXJhbSBmbGV4bnZtUGFydGl0aW9uQ29kZSBTcGVjaWZpZXMgaG93IHRvIHNwbGl0IHRoZSBGbGV4TlZNIGJsb2NrIGJldHdlZW4gZGF0YSBmbGFzaCBtZW1vcnkgYW5kIEVFUFJPTSBiYWNrdXAKKyAqICAgICAgICBtZW1vcnkgc3VwcG9ydGluZyBFRVBST00gZnVuY3Rpb25zLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0V4ZWN1dGVJblJhbUZ1bmN0aW9uTm90UmVhZHkgRXhlY3V0ZS1pbi1SQU0gZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQWNjZXNzRXJyb3IgSW52YWxpZCBpbnN0cnVjdGlvbiBjb2RlcyBhbmQgb3V0LW9mIGJvdW5kcyBhZGRyZXNzZXMuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1Byb3RlY3Rpb25WaW9sYXRpb24gVGhlIHByb2dyYW0vZXJhc2Ugb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB0byBleGVjdXRlIG9uIHByb3RlY3RlZCBhcmVhcy4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfQ29tbWFuZEZhaWx1cmUgUnVuLXRpbWUgZXJyb3IgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLgorICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9QQVJUSVRJT05fQ01EKSAmJiBGU0xfRkVBVFVSRV9GTEFTSF9IQVNfUFJPR1JBTV9QQVJUSVRJT05fQ01ECitzdGF0dXNfdCBGTEFTSF9Qcm9ncmFtUGFydGl0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXNoX3BhcnRpdGlvbl9mbGV4cmFtX2xvYWRfb3B0aW9uX3Qgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlZXByb21EYXRhU2l6ZUNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsZXhudm1QYXJ0aXRpb25Db2RlKTsKKyNlbmRpZgorCisvKkB9Ki8KKworLyohCisqIEBuYW1lIEZsYXNoIFByb3RlY3Rpb24gVXRpbGl0aWVzCisqIEB7CisqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBQRmxhc2ggUHJvdGVjdGlvbiB0byB0aGUgaW50ZW5kZWQgcHJvdGVjdGlvbiBzdGF0dXMuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHByb3RlY3RTdGF0dXMgVGhlIGV4cGVjdGVkIHByb3RlY3Qgc3RhdHVzIHRvIHNldCB0byB0aGUgUEZsYXNoIHByb3RlY3Rpb24gcmVnaXN0ZXIuIEVhY2ggYml0IGlzCisgKiBjb3JyZXNwb25kaW5nIHRvIHByb3RlY3Rpb24gb2YgMS8zMig2NCkgb2YgdGhlIHRvdGFsIFBGbGFzaC4gVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb3dlc3QKKyAqIGFkZHJlc3MgYXJlYSBvZiBQRmxhc2guIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBoaWdoZXN0IGFkZHJlc3MgYXJlYSBvZiBQRmxhc2guIFRoZXJlIGFyZQorICogdHdvIHBvc3NpYmxlIGNhc2VzIGFzIHNob3duIGJlbG93OgorICogICAgICAgMDogdGhpcyBhcmVhIGlzIHByb3RlY3RlZC4KKyAqICAgICAgIDE6IHRoaXMgYXJlYSBpcyB1bnByb3RlY3RlZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKi8KK3N0YXR1c190IEZMQVNIX1BmbGFzaFNldFByb3RlY3Rpb24oZmxhc2hfY29uZmlnX3QgKmNvbmZpZywgcGZsYXNoX3Byb3RlY3Rpb25fc3RhdHVzX3QgKnByb3RlY3RTdGF0dXMpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBQRmxhc2ggcHJvdGVjdGlvbiBzdGF0dXMuCisgKgorICogQHBhcmFtIGNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgZm9yIHRoZSBkcml2ZXIgcnVudGltZSBzdGF0ZS4KKyAqIEBwYXJhbSBwcm90ZWN0U3RhdHVzICBQcm90ZWN0IHN0YXR1cyByZXR1cm5lZCBieSB0aGUgUEZsYXNoIElQLiBFYWNoIGJpdCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90ZWN0aW9uIG9mCisgKiAxLzMyKDY0KQorICogb2YgdGhlCisgKiB0b3RhbCBQRmxhc2guIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGxvd2VzdCBhZGRyZXNzIGFyZWEgb2YgdGhlIFBGbGFzaC4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQKKyAqIGJpdCBjb3JyZXNwb25kcyB0byB0aGUgaGlnaGVzdCBhZGRyZXNzIGFyZWEgb2YgUEZsYXNoLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGNhc2VzIGFzIHNob3duIGJlbG93OgorICogICAgICAgMDogdGhpcyBhcmVhIGlzIHByb3RlY3RlZC4KKyAqICAgICAgIDE6IHRoaXMgYXJlYSBpcyB1bnByb3RlY3RlZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICovCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hHZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHBmbGFzaF9wcm90ZWN0aW9uX3N0YXR1c190ICpwcm90ZWN0U3RhdHVzKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgREZsYXNoIHByb3RlY3Rpb24gdG8gdGhlIGludGVuZGVkIHByb3RlY3Rpb24gc3RhdHVzLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gcHJvdGVjdFN0YXR1cyBUaGUgZXhwZWN0ZWQgcHJvdGVjdCBzdGF0dXMgdG8gc2V0IHRvIHRoZSBERmxhc2ggcHJvdGVjdGlvbiByZWdpc3Rlci4gRWFjaCBiaXQKKyAqIGNvcnJlc3BvbmRzIHRvIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSAxLzggb2YgdGhlIHRvdGFsIERGbGFzaC4gVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBjb3JyZXNwb25kcyB0byB0aGUgbG93ZXN0CisgKiBhZGRyZXNzIGFyZWEgb2YgdGhlIERGbGFzaC4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBoaWdoZXN0IGFkZHJlc3MgYXJlYSBvZiAgdGhlIERGbGFzaC4gVGhlcmUKKyAqIGFyZQorICogdHdvIHBvc3NpYmxlIGNhc2VzIGFzIHNob3duIGJlbG93OgorICogICAgICAgMDogdGhpcyBhcmVhIGlzIHByb3RlY3RlZC4KKyAqICAgICAgIDE6IHRoaXMgYXJlYSBpcyB1bnByb3RlY3RlZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkIEZsYXNoIEFQSSBpcyBub3Qgc3VwcG9ydGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKi8KKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9EZmxhc2hTZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgcHJvdGVjdFN0YXR1cyk7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgREZsYXNoIHByb3RlY3Rpb24gc3RhdHVzLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gcHJvdGVjdFN0YXR1cyAgREZsYXNoIFByb3RlY3Qgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBQRmxhc2ggSVAuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm90ZWN0aW9uIG9mIHRoZQorICogMS84IG9mCisgKiB0aGUgdG90YWwgREZsYXNoLiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBsb3dlc3QgYWRkcmVzcyBhcmVhIG9mIHRoZSBERmxhc2guIFRoZSBtb3N0CisgKiBzaWduaWZpY2FudCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhcmVhIG9mIHRoZSBERmxhc2gsIGFuZCBzbyBvbi4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBjYXNlcyBhcworICogYmVsb3c6CisgKiAgICAgICAwOiB0aGlzIGFyZWEgaXMgcHJvdGVjdGVkLgorICogICAgICAgMTogdGhpcyBhcmVhIGlzIHVucHJvdGVjdGVkLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmROb3RTdXBwb3J0ZWQgRmxhc2ggQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCisgKi8KKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9EZmxhc2hHZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgKnByb3RlY3RTdGF0dXMpOworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIEVFUFJPTSBwcm90ZWN0aW9uIHRvIHRoZSBpbnRlbmRlZCBwcm90ZWN0aW9uIHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgc3RvcmFnZSBmb3IgdGhlIGRyaXZlciBydW50aW1lIHN0YXRlLgorICogQHBhcmFtIHByb3RlY3RTdGF0dXMgVGhlIGV4cGVjdGVkIHByb3RlY3Qgc3RhdHVzIHRvIHNldCB0byB0aGUgRUVQUk9NIHByb3RlY3Rpb24gcmVnaXN0ZXIuIEVhY2ggYml0CisgKiBjb3JyZXNwb25kcyB0byB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgMS84IG9mIHRoZSB0b3RhbCBFRVBST00uIFRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGxvd2VzdAorICogYWRkcmVzcyBhcmVhIG9mIHRoZSBFRVBST00uIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBjb3JyZXNwb25kcyB0byB0aGUgaGlnaGVzdCBhZGRyZXNzIGFyZWEgb2YgRUVQUk9NLCBhbmQgc28gb24uCisgKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGNhc2VzIGFzIHNob3duIGJlbG93OgorICogICAgICAgMDogdGhpcyBhcmVhIGlzIHByb3RlY3RlZC4KKyAqICAgICAgIDE6IHRoaXMgYXJlYSBpcyB1bnByb3RlY3RlZC4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX1N1Y2Nlc3MgQVBJIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0ludmFsaWRBcmd1bWVudCBBbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHByb3ZpZGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kTm90U3VwcG9ydGVkIEZsYXNoIEFQSSBpcyBub3Qgc3VwcG9ydGVkLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9Db21tYW5kRmFpbHVyZSBSdW4tdGltZSBlcnJvciBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uCisgKi8KKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9FZXByb21TZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgcHJvdGVjdFN0YXR1cyk7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgREZsYXNoIHByb3RlY3Rpb24gc3RhdHVzLgorICoKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlIGZvciB0aGUgZHJpdmVyIHJ1bnRpbWUgc3RhdGUuCisgKiBAcGFyYW0gcHJvdGVjdFN0YXR1cyAgREZsYXNoIFByb3RlY3Qgc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBQRmxhc2ggSVAuIEVhY2ggYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm90ZWN0aW9uIG9mIHRoZQorICogMS84IG9mCisgKiB0aGUgdG90YWwgRUVQUk9NLiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGNvcnJlc3BvbmRzIHRvIHRoZSBsb3dlc3QgYWRkcmVzcyBhcmVhIG9mIHRoZSBFRVBST00uIFRoZSBtb3N0CisgKiBzaWduaWZpY2FudCBiaXQgY29ycmVzcG9uZHMgdG8gdGhlIGhpZ2hlc3QgYWRkcmVzcyBhcmVhIG9mIHRoZSBFRVBST00uIFRoZXJlIGFyZSB0d28gcG9zc2libGUgY2FzZXMgYXMgYmVsb3c6CisgKiAgICAgICAwOiB0aGlzIGFyZWEgaXMgcHJvdGVjdGVkLgorICogICAgICAgMTogdGhpcyBhcmVhIGlzIHVucHJvdGVjdGVkLgorICoKKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfU3VjY2VzcyBBUEkgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KKyAqIEByZXR2YWwgI2tTdGF0dXNfRkxBU0hfSW52YWxpZEFyZ3VtZW50IEFuIGludmFsaWQgYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0ZMQVNIX0NvbW1hbmROb3RTdXBwb3J0ZWQgRmxhc2ggQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCisgKi8KKyNpZiBGTEFTSF9TU0RfSVNfRkxFWE5WTV9FTkFCTEVECitzdGF0dXNfdCBGTEFTSF9FZXByb21HZXRQcm90ZWN0aW9uKGZsYXNoX2NvbmZpZ190ICpjb25maWcsIHVpbnQ4X3QgKnByb3RlY3RTdGF0dXMpOworI2VuZGlmCisKKy8qQH0qLworCisvKkB9Ki8KKworLyohCisqIEBuYW1lIEZsYXNoIFNwZWN1bGF0aW9uIFV0aWxpdGllcworKiBAeworKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgUEZsYXNoIHByZWZldGNoIHNwZWN1bGF0aW9uIHRvIHRoZSBpbnRlbmRlZCBzcGVjdWxhdGlvbiBzdGF0dXMuCisgKgorICogQHBhcmFtIHNwZWN1bGF0aW9uU3RhdHVzIFRoZSBleHBlY3RlZCBwcm90ZWN0IHN0YXR1cyB0byBzZXQgdG8gdGhlIFBGbGFzaCBwcm90ZWN0aW9uIHJlZ2lzdGVyLiBFYWNoIGJpdCBpcworICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9JbnZhbGlkU3BlY3VsYXRpb25PcHRpb24gQW4gaW52YWxpZCBzcGVjdWxhdGlvbiBvcHRpb24gYXJndW1lbnQgaXMgcHJvdmlkZWQuCisgKi8KK3N0YXR1c190IEZMQVNIX1BmbGFzaFNldFByZWZldGNoU3BlY3VsYXRpb24oZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fc3RhdHVzX3QgKnNwZWN1bGF0aW9uU3RhdHVzKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgUEZsYXNoIHByZWZldGNoIHNwZWN1bGF0aW9uIHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gc3BlY3VsYXRpb25TdGF0dXMgIFNwZWN1bGF0aW9uIHN0YXR1cyByZXR1cm5lZCBieSB0aGUgUEZsYXNoIElQLgorICogQHJldHZhbCAja1N0YXR1c19GTEFTSF9TdWNjZXNzIEFQSSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0dXNfdCBGTEFTSF9QZmxhc2hHZXRQcmVmZXRjaFNwZWN1bGF0aW9uKGZsYXNoX3ByZWZldGNoX3NwZWN1bGF0aW9uX3N0YXR1c190ICpzcGVjdWxhdGlvblN0YXR1cyk7CisKKy8qQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9GTEFTSF9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZ3Bpby5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MGVlM2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ncGlvLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2dwaW8uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZhcmlhYmxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBQT1JUX1R5cGUgKmNvbnN0IHNfcG9ydEJhc2VzW10gPSBQT1JUX0JBU0VfUFRSUzsKK3N0YXRpYyBHUElPX1R5cGUgKmNvbnN0IHNfZ3Bpb0Jhc2VzW10gPSBHUElPX0JBU0VfUFRSUzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHJvdG90eXBlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyogQGJyaWVmIEdldHMgdGhlIEdQSU8gaW5zdGFuY2UgYWNjb3JkaW5nIHRvIHRoZSBHUElPIGJhc2UKKyoKKyogQHBhcmFtIGJhc2UgICAgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlcihQVEEsIFBUQiwgUFRDLCBldGMuKQorKiBAcmV0dmFsIEdQSU8gaW5zdGFuY2UKKyovCitzdGF0aWMgdWludDMyX3QgR1BJT19HZXRJbnN0YW5jZShHUElPX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHVpbnQzMl90IEdQSU9fR2V0SW5zdGFuY2UoR1BJT19UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2dwaW9CYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19ncGlvQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2dwaW9CYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIEdQSU9fUGluSW5pdChHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgY29uc3QgZ3Bpb19waW5fY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIGlmIChjb25maWctPnBpbkRpcmVjdGlvbiA9PSBrR1BJT19EaWdpdGFsSW5wdXQpCisgICAgeworICAgICAgICBiYXNlLT5QRERSICY9IH4oMVUgPDwgcGluKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgR1BJT19Xcml0ZVBpbk91dHB1dChiYXNlLCBwaW4sIGNvbmZpZy0+b3V0cHV0TG9naWMpOworICAgICAgICBiYXNlLT5QRERSIHw9ICgxVSA8PCBwaW4pOworICAgIH0KK30KKwordWludDMyX3QgR1BJT19HZXRQaW5zSW50ZXJydXB0RmxhZ3MoR1BJT19UeXBlICpiYXNlKQoreworICAgIHVpbnQ4X3QgaW5zdGFuY2U7CisgICAgUE9SVF9UeXBlICpwb3J0QmFzZTsKKyAgICBpbnN0YW5jZSA9IEdQSU9fR2V0SW5zdGFuY2UoYmFzZSk7CisgICAgcG9ydEJhc2UgPSBzX3BvcnRCYXNlc1tpbnN0YW5jZV07CisgICAgcmV0dXJuIHBvcnRCYXNlLT5JU0ZSOworfQorCit2b2lkIEdQSU9fQ2xlYXJQaW5zSW50ZXJydXB0RmxhZ3MoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQ4X3QgaW5zdGFuY2U7CisgICAgUE9SVF9UeXBlICpwb3J0QmFzZTsKKyAgICBpbnN0YW5jZSA9IEdQSU9fR2V0SW5zdGFuY2UoYmFzZSk7CisgICAgcG9ydEJhc2UgPSBzX3BvcnRCYXNlc1tpbnN0YW5jZV07CisgICAgcG9ydEJhc2UtPklTRlIgPSBtYXNrOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9HUElPX0hBU19BVFRSSUJVVEVfQ0hFQ0tFUikgJiYgRlNMX0ZFQVRVUkVfR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIKK3ZvaWQgR1BJT19DaGVja0F0dHJpYnV0ZUJ5dGVzKEdQSU9fVHlwZSAqYmFzZSwgZ3Bpb19jaGVja2VyX2F0dHJpYnV0ZV90IGF0dHJpYnV0ZSkKK3sKKyAgICBiYXNlLT5HQUNSID0gKCh1aW50MzJfdClhdHRyaWJ1dGUgPDwgR1BJT19HQUNSX0FDQjBfU0hJRlQpIHwgKCh1aW50MzJfdClhdHRyaWJ1dGUgPDwgR1BJT19HQUNSX0FDQjFfU0hJRlQpIHwKKyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClhdHRyaWJ1dGUgPDwgR1BJT19HQUNSX0FDQjJfU0hJRlQpIHwgKCh1aW50MzJfdClhdHRyaWJ1dGUgPDwgR1BJT19HQUNSX0FDQjNfU0hJRlQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19GR1BJT19DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0ZHUElPX0NPVU5UCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgRkdQSU9fVHlwZSAqY29uc3Qgc19mZ3Bpb0Jhc2VzW10gPSBGR1BJT19CQVNFX1BUUlM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFByb3RvdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorKiBAYnJpZWYgR2V0cyB0aGUgRkdQSU8gaW5zdGFuY2UgYWNjb3JkaW5nIHRvIHRoZSBHUElPIGJhc2UKKyoKKyogQHBhcmFtIGJhc2UgICAgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIoUFRBLCBQVEIsIFBUQywgZXRjLikKKyogQHJldHZhbCBGR1BJTyBpbnN0YW5jZQorKi8KK3N0YXRpYyB1aW50MzJfdCBGR1BJT19HZXRJbnN0YW5jZShGR1BJT19UeXBlICpiYXNlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1aW50MzJfdCBGR1BJT19HZXRJbnN0YW5jZShGR1BJT19UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2ZncGlvQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfZmdwaW9CYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfZmdwaW9CYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIEZHUElPX1BpbkluaXQoRkdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgcGluLCBjb25zdCBncGlvX3Bpbl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgaWYgKGNvbmZpZy0+cGluRGlyZWN0aW9uID09IGtHUElPX0RpZ2l0YWxJbnB1dCkKKyAgICB7CisgICAgICAgIGJhc2UtPlBERFIgJj0gfigxVSA8PCBwaW4pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBGR1BJT19Xcml0ZVBpbk91dHB1dChiYXNlLCBwaW4sIGNvbmZpZy0+b3V0cHV0TG9naWMpOworICAgICAgICBiYXNlLT5QRERSIHw9ICgxVSA8PCBwaW4pOworICAgIH0KK30KKwordWludDMyX3QgRkdQSU9fR2V0UGluc0ludGVycnVwdEZsYWdzKEZHUElPX1R5cGUgKmJhc2UpCit7CisgICAgdWludDhfdCBpbnN0YW5jZTsKKyAgICBpbnN0YW5jZSA9IEZHUElPX0dldEluc3RhbmNlKGJhc2UpOworICAgIFBPUlRfVHlwZSAqcG9ydEJhc2U7CisgICAgcG9ydEJhc2UgPSBzX3BvcnRCYXNlc1tpbnN0YW5jZV07CisgICAgcmV0dXJuIHBvcnRCYXNlLT5JU0ZSOworfQorCit2b2lkIEZHUElPX0NsZWFyUGluc0ludGVycnVwdEZsYWdzKEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDhfdCBpbnN0YW5jZTsKKyAgICBpbnN0YW5jZSA9IEZHUElPX0dldEluc3RhbmNlKGJhc2UpOworICAgIFBPUlRfVHlwZSAqcG9ydEJhc2U7CisgICAgcG9ydEJhc2UgPSBzX3BvcnRCYXNlc1tpbnN0YW5jZV07CisgICAgcG9ydEJhc2UtPklTRlIgPSBtYXNrOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9GR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIpICYmIEZTTF9GRUFUVVJFX0ZHUElPX0hBU19BVFRSSUJVVEVfQ0hFQ0tFUgordm9pZCBGR1BJT19DaGVja0F0dHJpYnV0ZUJ5dGVzKEZHUElPX1R5cGUgKmJhc2UsIGdwaW9fY2hlY2tlcl9hdHRyaWJ1dGVfdCBhdHRyaWJ1dGUpCit7CisgICAgYmFzZS0+R0FDUiA9IChhdHRyaWJ1dGUgPDwgRkdQSU9fR0FDUl9BQ0IwX1NISUZUKSB8IChhdHRyaWJ1dGUgPDwgRkdQSU9fR0FDUl9BQ0IxX1NISUZUKSB8CisgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGUgPDwgRkdQSU9fR0FDUl9BQ0IyX1NISUZUKSB8IChhdHRyaWJ1dGUgPDwgRkdQSU9fR0FDUl9BQ0IzX1NISUZUKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU09DX0ZHUElPX0NPVU5UICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ncGlvLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwZTJiOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2dwaW8uaApAQCAtMCwwICsxLDQ0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZTTF9HUElPX0hfCisjZGVmaW5lIF9GU0xfR1BJT19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGdwaW8KKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBHUElPIGRyaXZlciB2ZXJzaW9uIDIuMS4xLiAqLworI2RlZmluZSBGU0xfR1BJT19EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDEsIDEpKQorLypAfSovCisKKy8qISBAYnJpZWYgR1BJTyBkaXJlY3Rpb24gZGVmaW5pdGlvbiAqLwordHlwZWRlZiBlbnVtIF9ncGlvX3Bpbl9kaXJlY3Rpb24KK3sKKyAgICBrR1BJT19EaWdpdGFsSW5wdXQgPSAwVSwgIC8qITwgU2V0IGN1cnJlbnQgcGluIGFzIGRpZ2l0YWwgaW5wdXQqLworICAgIGtHUElPX0RpZ2l0YWxPdXRwdXQgPSAxVSwgLyohPCBTZXQgY3VycmVudCBwaW4gYXMgZGlnaXRhbCBvdXRwdXQqLworfSBncGlvX3Bpbl9kaXJlY3Rpb25fdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIpICYmIEZTTF9GRUFUVVJFX0dQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSCisvKiEgQGJyaWVmIEdQSU8gY2hlY2tlciBhdHRyaWJ1dGUgKi8KK3R5cGVkZWYgZW51bSBfZ3Bpb19jaGVja2VyX2F0dHJpYnV0ZQoreworICAgIGtHUElPX1VzZXJub25zZWN1cmVSV1VzZXJzZWN1cmVSV1ByaXZpbGVnZWRzZWN1cmVSVyA9CisgICAgICAgIDB4MDBVLCAvKiE8IFVzZXIgbm9uc2VjdXJlOlJlYWQrV3JpdGU7IFVzZXIgU2VjdXJlOlJlYWQrV3JpdGU7IFByaXZpbGVnZWQgU2VjdXJlOlJlYWQrV3JpdGUgKi8KKyAgICBrR1BJT19Vc2Vybm9uc2VjdXJlUlVzZXJzZWN1cmVSV1ByaXZpbGVnZWRzZWN1cmVSVyA9CisgICAgICAgIDB4MDFVLCAvKiE8IFVzZXIgbm9uc2VjdXJlOlJlYWQ7ICAgICAgIFVzZXIgU2VjdXJlOlJlYWQrV3JpdGU7IFByaXZpbGVnZWQgU2VjdXJlOlJlYWQrV3JpdGUgKi8KKyAgICBrR1BJT19Vc2Vybm9uc2VjdXJlTlVzZXJzZWN1cmVSV1ByaXZpbGVnZWRzZWN1cmVSVyA9CisgICAgICAgIDB4MDJVLCAvKiE8IFVzZXIgbm9uc2VjdXJlOk5vbmU7ICAgICAgIFVzZXIgU2VjdXJlOlJlYWQrV3JpdGU7IFByaXZpbGVnZWQgU2VjdXJlOlJlYWQrV3JpdGUgKi8KKyAgICBrR1BJT19Vc2Vybm9uc2VjdXJlUlVzZXJzZWN1cmVSUHJpdmlsZWdlZHNlY3VyZVJXID0KKyAgICAgICAgMHgwM1UsIC8qITwgVXNlciBub25zZWN1cmU6UmVhZDsgICAgICAgVXNlciBTZWN1cmU6UmVhZDsgICAgICAgUHJpdmlsZWdlZCBTZWN1cmU6UmVhZCtXcml0ZSAqLworICAgIGtHUElPX1VzZXJub25zZWN1cmVOVXNlcnNlY3VyZVJQcml2aWxlZ2Vkc2VjdXJlUlcgPQorICAgICAgICAweDA0VSwgLyohPCBVc2VyIG5vbnNlY3VyZTpOb25lOyAgICAgICBVc2VyIFNlY3VyZTpSZWFkOyAgICAgICBQcml2aWxlZ2VkIFNlY3VyZTpSZWFkK1dyaXRlICovCisgICAga0dQSU9fVXNlcm5vbnNlY3VyZU5Vc2Vyc2VjdXJlTlByaXZpbGVnZWRzZWN1cmVSVyA9CisgICAgICAgIDB4MDVVLCAvKiE8IFVzZXIgbm9uc2VjdXJlOk5vbmU7ICAgICAgIFVzZXIgU2VjdXJlOk5vbmU7ICAgICAgIFByaXZpbGVnZWQgU2VjdXJlOlJlYWQrV3JpdGUgKi8KKyAgICBrR1BJT19Vc2Vybm9uc2VjdXJlTlVzZXJzZWN1cmVOUHJpdmlsZWdlZHNlY3VyZVIgPQorICAgICAgICAweDA2VSwgLyohPCBVc2VyIG5vbnNlY3VyZTpOb25lOyAgICAgICBVc2VyIFNlY3VyZTpOb25lOyAgICAgICBQcml2aWxlZ2VkIFNlY3VyZTpSZWFkICovCisgICAga0dQSU9fVXNlcm5vbnNlY3VyZU5Vc2Vyc2VjdXJlTlByaXZpbGVnZWRzZWN1cmVOID0KKyAgICAgICAgMHgwN1UsIC8qITwgVXNlciBub25zZWN1cmU6Tm9uZTsgICAgICAgVXNlciBTZWN1cmU6Tm9uZTsgICAgICAgUHJpdmlsZWdlZCBTZWN1cmU6Tm9uZSAqLworICAgIGtHUElPX0lnbm9yZUF0dHJpYnV0ZUNoZWNrID0gMHgxMFUsIC8qITwgSWdub3JlcyB0aGUgYXR0cmlidXRlIGNoZWNrICovCit9IGdwaW9fY2hlY2tlcl9hdHRyaWJ1dGVfdDsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBUaGUgR1BJTyBwaW4gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogRWFjaCBwaW4gY2FuIG9ubHkgYmUgY29uZmlndXJlZCBhcyBlaXRoZXIgYW4gb3V0cHV0IHBpbiBvciBhbiBpbnB1dCBwaW4gYXQgYSB0aW1lLgorICogSWYgY29uZmlndXJlZCBhcyBhbiBpbnB1dCBwaW4sIGxlYXZlIHRoZSBvdXRwdXRDb25maWcgdW51c2VkLgorICogTm90ZSB0aGF0IGluIHNvbWUgdXNlIGNhc2VzLCB0aGUgY29ycmVzcG9uZGluZyBwb3J0IHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmVkIGluIGFkdmFuY2UKKyAqICAgICAgICB3aXRoIHRoZSBQT1JUX1NldFBpbkNvbmZpZygpLgorICovCit0eXBlZGVmIHN0cnVjdCBfZ3Bpb19waW5fY29uZmlnCit7CisgICAgZ3Bpb19waW5fZGlyZWN0aW9uX3QgcGluRGlyZWN0aW9uOyAvKiE8IEdQSU8gZGlyZWN0aW9uLCBpbnB1dCBvciBvdXRwdXQgKi8KKyAgICAvKiBPdXRwdXQgY29uZmlndXJhdGlvbnM7IGlnbm9yZSBpZiBjb25maWd1cmVkIGFzIGFuIGlucHV0IHBpbiAqLworICAgIHVpbnQ4X3Qgb3V0cHV0TG9naWM7IC8qITwgU2V0IGEgZGVmYXVsdCBvdXRwdXQgbG9naWMsIHdoaWNoIGhhcyBubyB1c2UgaW4gaW5wdXQgKi8KK30gZ3Bpb19waW5fY29uZmlnX3Q7CisKKy8qISBAfSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQGFkZHRvZ3JvdXAgZ3Bpb19kcml2ZXIKKyAqIEB7CisgKi8KKworLyohIEBuYW1lIEdQSU8gQ29uZmlndXJhdGlvbiAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIGEgR1BJTyBwaW4gdXNlZCBieSB0aGUgYm9hcmQuCisgKgorICogVG8gaW5pdGlhbGl6ZSB0aGUgR1BJTywgZGVmaW5lIGEgcGluIGNvbmZpZ3VyYXRpb24sIGFzIGVpdGhlciBpbnB1dCBvciBvdXRwdXQsIGluIHRoZSB1c2VyIGZpbGUuCisgKiBUaGVuLCBjYWxsIHRoZSBHUElPX1BpbkluaXQoKSBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgdG8gZGVmaW5lIGFuIGlucHV0IHBpbiBvciBhbiBvdXRwdXQgcGluIGNvbmZpZ3VyYXRpb24uCisgKiBAY29kZQorICogLy8gRGVmaW5lIGEgZGlnaXRhbCBpbnB1dCBwaW4gY29uZmlndXJhdGlvbiwKKyAqIGdwaW9fcGluX2NvbmZpZ190IGNvbmZpZyA9CisgKiB7CisgKiAgIGtHUElPX0RpZ2l0YWxJbnB1dCwKKyAqICAgMCwKKyAqIH0KKyAqIC8vRGVmaW5lIGEgZGlnaXRhbCBvdXRwdXQgcGluIGNvbmZpZ3VyYXRpb24sCisgKiBncGlvX3Bpbl9jb25maWdfdCBjb25maWcgPQorICogeworICogICBrR1BJT19EaWdpdGFsT3V0cHV0LAorICogICAwLAorICogfQorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSAgIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEdQSU9BLCBHUElPQiwgR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gcGluICAgIEdQSU8gcG9ydCBwaW4gbnVtYmVyCisgKiBAcGFyYW0gY29uZmlnIEdQSU8gcGluIGNvbmZpZ3VyYXRpb24gcG9pbnRlcgorICovCit2b2lkIEdQSU9fUGluSW5pdChHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgY29uc3QgZ3Bpb19waW5fY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qQH0qLworCisvKiEgQG5hbWUgR1BJTyBPdXRwdXQgT3BlcmF0aW9ucyAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIG91dHB1dCBsZXZlbCBvZiB0aGUgbXVsdGlwbGUgR1BJTyBwaW5zIHRvIHRoZSBsb2dpYyAxIG9yIDAuCisgKgorICogQHBhcmFtIGJhc2UgICAgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoR1BJT0EsIEdQSU9CLCBHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBwaW4gICAgIEdQSU8gcGluIG51bWJlcgorICogQHBhcmFtIG91dHB1dCAgR1BJTyBwaW4gb3V0cHV0IGxvZ2ljIGxldmVsLgorICogICAgICAgIC0gMDogY29ycmVzcG9uZGluZyBwaW4gb3V0cHV0IGxvdy1sb2dpYyBsZXZlbC4KKyAqICAgICAgICAtIDE6IGNvcnJlc3BvbmRpbmcgcGluIG91dHB1dCBoaWdoLWxvZ2ljIGxldmVsLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgR1BJT19Xcml0ZVBpbk91dHB1dChHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgdWludDhfdCBvdXRwdXQpCit7CisgICAgaWYgKG91dHB1dCA9PSAwVSkKKyAgICB7CisgICAgICAgIGJhc2UtPlBDT1IgPSAxVSA8PCBwaW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlBTT1IgPSAxVSA8PCBwaW47CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvdXRwdXQgbGV2ZWwgb2YgdGhlIG11bHRpcGxlIEdQSU8gcGlucyB0byB0aGUgbG9naWMgMS4KKyAqCisgKiBAcGFyYW0gYmFzZSBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBHUElPX1NldFBpbnNPdXRwdXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlBTT1IgPSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvdXRwdXQgbGV2ZWwgb2YgdGhlIG11bHRpcGxlIEdQSU8gcGlucyB0byB0aGUgbG9naWMgMC4KKyAqCisgKiBAcGFyYW0gYmFzZSBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBHUElPX0NsZWFyUGluc091dHB1dChHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+UENPUiA9IG1hc2s7Cit9CisKKy8qIQorICogQGJyaWVmIFJldmVyc2VzIHRoZSBjdXJyZW50IG91dHB1dCBsb2dpYyBvZiB0aGUgbXVsdGlwbGUgR1BJTyBwaW5zLgorICoKKyAqIEBwYXJhbSBiYXNlIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEdQSU9BLCBHUElPQiwgR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gbWFzayBHUElPIHBpbiBudW1iZXIgbWFjcm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEdQSU9fVG9nZ2xlUGluc091dHB1dChHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+UFRPUiA9IG1hc2s7Cit9CisvKkB9Ki8KKworLyohIEBuYW1lIEdQSU8gSW5wdXQgT3BlcmF0aW9ucyAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlIG9mIHRoZSBHUElPIHBvcnQuCisgKgorICogQHBhcmFtIGJhc2UgR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoR1BJT0EsIEdQSU9CLCBHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBwaW4gICAgIEdQSU8gcGluIG51bWJlcgorICogQHJldHZhbCBHUElPIHBvcnQgaW5wdXQgdmFsdWUKKyAqICAgICAgICAtIDA6IGNvcnJlc3BvbmRpbmcgcGluIGlucHV0IGxvdy1sb2dpYyBsZXZlbC4KKyAqICAgICAgICAtIDE6IGNvcnJlc3BvbmRpbmcgcGluIGlucHV0IGhpZ2gtbG9naWMgbGV2ZWwuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgR1BJT19SZWFkUGluSW5wdXQoR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4pCit7CisgICAgcmV0dXJuICgoKGJhc2UtPlBESVIpID4+IHBpbikgJiAweDAxVSk7Cit9CisvKkB9Ki8KKworLyohIEBuYW1lIEdQSU8gSW50ZXJydXB0ICovCisvKkB7Ki8KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIEdQSU8gcG9ydCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgKgorICogSWYgYSBwaW4gaXMgY29uZmlndXJlZCB0byBnZW5lcmF0ZSB0aGUgRE1BIHJlcXVlc3QsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKyAqIGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdGVkIERNQSB0cmFuc2Zlci4KKyAqIE90aGVyd2lzZSwgdGhlIGZsYWcgcmVtYWlucyBzZXQgdW50aWwgYSBsb2dpYyBvbmUgaXMgd3JpdHRlbiB0byB0aGF0IGZsYWcuCisgKiBJZiBjb25maWd1cmVkIGZvciBhIGxldmVsIHNlbnNpdGl2ZSBpbnRlcnJ1cHQgdGhhdCByZW1haW5zIGFzc2VydGVkLCB0aGUgZmxhZworICogaXMgc2V0IGFnYWluIGltbWVkaWF0ZWx5LgorICoKKyAqIEBwYXJhbSBiYXNlIEdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEdQSU9BLCBHUElPQiwgR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcmV0dmFsIFRoZSBjdXJyZW50IEdQSU8gcG9ydCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcsIGZvciBleGFtcGxlLCAweDAwMDEwMDAxIG1lYW5zIHRoZQorICogICAgICAgICBwaW4gMCBhbmQgMTcgaGF2ZSB0aGUgaW50ZXJydXB0LgorICovCit1aW50MzJfdCBHUElPX0dldFBpbnNJbnRlcnJ1cHRGbGFncyhHUElPX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBDbGVhcnMgbXVsdGlwbGUgR1BJTyBwaW4gaW50ZXJydXB0IHN0YXR1cyBmbGFncy4KKyAqCisgKiBAcGFyYW0gYmFzZSBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3ZvaWQgR1BJT19DbGVhclBpbnNJbnRlcnJ1cHRGbGFncyhHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9HUElPX0hBU19BVFRSSUJVVEVfQ0hFQ0tFUikgJiYgRlNMX0ZFQVRVUkVfR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIKKy8qIQorICogQGJyaWVmIFRoZSBHUElPIG1vZHVsZSBzdXBwb3J0cyBhIGRldmljZS1zcGVjaWZpYyBudW1iZXIgb2YgZGF0YSBwb3J0cywgb3JnYW5pemVkIGFzIDMyLWJpdAorICogd29yZHMuIEVhY2ggMzItYml0IGRhdGEgcG9ydCBpbmNsdWRlcyBhIEdBQ1IgcmVnaXN0ZXIsIHdoaWNoIGRlZmluZXMgdGhlIGJ5dGUtbGV2ZWwKKyAqIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIGEgc3VjY2Vzc2Z1bCBhY2Nlc3MgdG8gdGhlIEdQSU8gcHJvZ3JhbW1pbmcgbW9kZWwuIFRoZSBhdHRyaWJ1dGUgY29udHJvbHMgZm9yIHRoZSA0IGRhdGEKKyAqIGJ5dGVzIGluIHRoZSBHQUNSIGZvbGxvdyBhIHN0YW5kYXJkIGxpdHRsZSBlbmRpYW4KKyAqIGRhdGEgY29udmVudGlvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChHUElPQSwgR1BJT0IsIEdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3ZvaWQgR1BJT19DaGVja0F0dHJpYnV0ZUJ5dGVzKEdQSU9fVHlwZSAqYmFzZSwgZ3Bpb19jaGVja2VyX2F0dHJpYnV0ZV90IGF0dHJpYnV0ZSk7CisjZW5kaWYKKworLypAfSovCisvKiEgQH0gKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBmZ3Bpb19kcml2ZXIKKyAqIEB7CisgKi8KKworLyoKKyAqIEludHJvZHVjZXMgdGhlIEZHUElPIGZlYXR1cmUuCisgKgorICogVGhlIEZHUElPIGZlYXR1cmVzIGFyZSBvbmx5IHN1cHBvcnQgb24gc29tZSBLaW5ldGlzIE1DVXMuIFRoZSBGR1BJTyByZWdpc3RlcnMgYXJlIGFsaWFzZWQgdG8gdGhlIElPUE9SVAorICogaW50ZXJmYWNlLiBBY2Nlc3NlcyB2aWEgdGhlIElPUE9SVCBpbnRlcmZhY2Ugb2NjdXIgaW4gcGFyYWxsZWwgd2l0aCBhbnkgaW5zdHJ1Y3Rpb24gZmV0Y2hlcyBhbmQKKyAqIGNvbXBsZXRlIGluIGEgc2luZ2xlIGN5Y2xlLiBUaGlzIGFsaWFzZWQgRmFzdCBHUElPIG1lbW9yeSBtYXAgaXMgY2FsbGVkIEZHUElPLgorICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19GR1BJT19DT1VOVCkgJiYgRlNMX0ZFQVRVUkVfU09DX0ZHUElPX0NPVU5UCisKKy8qISBAbmFtZSBGR1BJTyBDb25maWd1cmF0aW9uICovCisvKkB7Ki8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgYSBGR1BJTyBwaW4gdXNlZCBieSB0aGUgYm9hcmQuCisgKgorICogVG8gaW5pdGlhbGl6ZSB0aGUgRkdQSU8gZHJpdmVyLCBkZWZpbmUgYSBwaW4gY29uZmlndXJhdGlvbiwgYXMgZWl0aGVyIGlucHV0IG9yIG91dHB1dCwgaW4gdGhlIHVzZXIgZmlsZS4KKyAqIFRoZW4sIGNhbGwgdGhlIEZHUElPX1BpbkluaXQoKSBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgdG8gZGVmaW5lIGFuIGlucHV0IHBpbiBvciBhbiBvdXRwdXQgcGluIGNvbmZpZ3VyYXRpb246CisgKiBAY29kZQorICogLy8gRGVmaW5lIGEgZGlnaXRhbCBpbnB1dCBwaW4gY29uZmlndXJhdGlvbiwKKyAqIGdwaW9fcGluX2NvbmZpZ190IGNvbmZpZyA9CisgKiB7CisgKiAgIGtHUElPX0RpZ2l0YWxJbnB1dCwKKyAqICAgMCwKKyAqIH0KKyAqIC8vRGVmaW5lIGEgZGlnaXRhbCBvdXRwdXQgcGluIGNvbmZpZ3VyYXRpb24sCisgKiBncGlvX3Bpbl9jb25maWdfdCBjb25maWcgPQorICogeworICogICBrR1BJT19EaWdpdGFsT3V0cHV0LAorICogICAwLAorICogfQorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSAgIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChGR1BJT0EsIEZHUElPQiwgRkdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIHBpbiAgICBGR1BJTyBwb3J0IHBpbiBudW1iZXIKKyAqIEBwYXJhbSBjb25maWcgRkdQSU8gcGluIGNvbmZpZ3VyYXRpb24gcG9pbnRlcgorICovCit2b2lkIEZHUElPX1BpbkluaXQoRkdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgcGluLCBjb25zdCBncGlvX3Bpbl9jb25maWdfdCAqY29uZmlnKTsKKworLypAfSovCisKKy8qISBAbmFtZSBGR1BJTyBPdXRwdXQgT3BlcmF0aW9ucyAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIG91dHB1dCBsZXZlbCBvZiB0aGUgbXVsdGlwbGUgRkdQSU8gcGlucyB0byB0aGUgbG9naWMgMSBvciAwLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChGR1BJT0EsIEZHUElPQiwgRkdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIHBpbiAgICAgRkdQSU8gcGluIG51bWJlcgorICogQHBhcmFtIG91dHB1dCAgRkdQSU9waW4gb3V0cHV0IGxvZ2ljIGxldmVsLgorICogICAgICAgIC0gMDogY29ycmVzcG9uZGluZyBwaW4gb3V0cHV0IGxvdy1sb2dpYyBsZXZlbC4KKyAqICAgICAgICAtIDE6IGNvcnJlc3BvbmRpbmcgcGluIG91dHB1dCBoaWdoLWxvZ2ljIGxldmVsLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgRkdQSU9fV3JpdGVQaW5PdXRwdXQoRkdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgcGluLCB1aW50OF90IG91dHB1dCkKK3sKKyAgICBpZiAob3V0cHV0ID09IDBVKQorICAgIHsKKyAgICAgICAgYmFzZS0+UENPUiA9IDEgPDwgcGluOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5QU09SID0gMSA8PCBwaW47CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBvdXRwdXQgbGV2ZWwgb2YgdGhlIG11bHRpcGxlIEZHUElPIHBpbnMgdG8gdGhlIGxvZ2ljIDEuCisgKgorICogQHBhcmFtIGJhc2UgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEZHUElPQSwgRkdQSU9CLCBGR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gbWFzayBGR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBGR1BJT19TZXRQaW5zT3V0cHV0KEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+UFNPUiA9IG1hc2s7Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIG91dHB1dCBsZXZlbCBvZiB0aGUgbXVsdGlwbGUgRkdQSU8gcGlucyB0byB0aGUgbG9naWMgMC4KKyAqCisgKiBAcGFyYW0gYmFzZSBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEZHUElPIHBpbiBudW1iZXIgbWFjcm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEZHUElPX0NsZWFyUGluc091dHB1dChGR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPlBDT1IgPSBtYXNrOworfQorCisvKiEKKyAqIEBicmllZiBSZXZlcnNlcyB0aGUgY3VycmVudCBvdXRwdXQgbG9naWMgb2YgdGhlIG11bHRpcGxlIEZHUElPIHBpbnMuCisgKgorICogQHBhcmFtIGJhc2UgRkdQSU8gcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIgKEZHUElPQSwgRkdQSU9CLCBGR1BJT0MsIGFuZCBzbyBvbi4pCisgKiBAcGFyYW0gbWFzayBGR1BJTyBwaW4gbnVtYmVyIG1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBGR1BJT19Ub2dnbGVQaW5zT3V0cHV0KEZHUElPX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+UFRPUiA9IG1hc2s7Cit9CisvKkB9Ki8KKworLyohIEBuYW1lIEZHUElPIElucHV0IE9wZXJhdGlvbnMgKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZSBvZiB0aGUgRkdQSU8gcG9ydC4KKyAqCisgKiBAcGFyYW0gYmFzZSBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBwaW4gIEZHUElPIHBpbiBudW1iZXIKKyAqIEByZXR2YWwgRkdQSU8gcG9ydCBpbnB1dCB2YWx1ZQorICogICAgICAgIC0gMDogY29ycmVzcG9uZGluZyBwaW4gaW5wdXQgbG93LWxvZ2ljIGxldmVsLgorICogICAgICAgIC0gMTogY29ycmVzcG9uZGluZyBwaW4gaW5wdXQgaGlnaC1sb2dpYyBsZXZlbC4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBGR1BJT19SZWFkUGluSW5wdXQoRkdQSU9fVHlwZSAqYmFzZSwgdWludDMyX3QgcGluKQoreworICAgIHJldHVybiAoKChiYXNlLT5QRElSKSA+PiBwaW4pICYgMHgwMVUpOworfQorLypAfSovCisKKy8qISBAbmFtZSBGR1BJTyBJbnRlcnJ1cHQgKi8KKy8qQHsqLworCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgRkdQSU8gcG9ydCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgKgorICogSWYgYSBwaW4gaXMgY29uZmlndXJlZCB0byBnZW5lcmF0ZSB0aGUgRE1BIHJlcXVlc3QsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKyAqIGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdGVkIERNQSB0cmFuc2Zlci4KKyAqIE90aGVyd2lzZSwgdGhlIGZsYWcgcmVtYWlucyBzZXQgdW50aWwgYSBsb2dpYyBvbmUgaXMgd3JpdHRlbiB0byB0aGF0IGZsYWcuCisgKiBJZiBjb25maWd1cmVkIGZvciBhIGxldmVsLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgdGhhdCByZW1haW5zIGFzc2VydGVkLCB0aGUgZmxhZworICogaXMgc2V0IGFnYWluIGltbWVkaWF0ZWx5LgorICoKKyAqIEBwYXJhbSBiYXNlIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChGR1BJT0EsIEZHUElPQiwgRkdQSU9DLCBhbmQgc28gb24uKQorICogQHJldHZhbCBUaGUgY3VycmVudCBGR1BJTyBwb3J0IGludGVycnVwdCBzdGF0dXMgZmxhZ3MsIGZvciBleGFtcGxlLCAweDAwMDEwMDAxIG1lYW5zIHRoZQorICogICAgICAgICBwaW4gMCBhbmQgMTcgaGF2ZSB0aGUgaW50ZXJydXB0LgorICovCit1aW50MzJfdCBGR1BJT19HZXRQaW5zSW50ZXJydXB0RmxhZ3MoRkdQSU9fVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgbXVsdGlwbGUgRkdQSU8gcGluIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAqCisgKiBAcGFyYW0gYmFzZSBGR1BJTyBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlciAoRkdQSU9BLCBGR1BJT0IsIEZHUElPQywgYW5kIHNvIG9uLikKKyAqIEBwYXJhbSBtYXNrIEZHUElPIHBpbiBudW1iZXIgbWFjcm8KKyAqLwordm9pZCBGR1BJT19DbGVhclBpbnNJbnRlcnJ1cHRGbGFncyhGR1BJT19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfR1BJT19IQVNfQVRUUklCVVRFX0NIRUNLRVIpICYmIEZTTF9GRUFUVVJFX0dQSU9fSEFTX0FUVFJJQlVURV9DSEVDS0VSCisvKiEKKyAqIEBicmllZiBUaGUgRkdQSU8gbW9kdWxlIHN1cHBvcnRzIGEgZGV2aWNlLXNwZWNpZmljIG51bWJlciBvZiBkYXRhIHBvcnRzLCBvcmdhbml6ZWQgYXMgMzItYml0CisgKiB3b3Jkcy4gRWFjaCAzMi1iaXQgZGF0YSBwb3J0IGluY2x1ZGVzIGEgR0FDUiByZWdpc3Rlciwgd2hpY2ggZGVmaW5lcyB0aGUgYnl0ZS1sZXZlbAorICogYXR0cmlidXRlcyByZXF1aXJlZCBmb3IgYSBzdWNjZXNzZnVsIGFjY2VzcyB0byB0aGUgR1BJTyBwcm9ncmFtbWluZyBtb2RlbC4gVGhlIGF0dHJpYnV0ZSBjb250cm9scyBmb3IgdGhlIDQgZGF0YQorICogYnl0ZXMgaW4gdGhlIEdBQ1IgZm9sbG93IGEgc3RhbmRhcmQgbGl0dGxlIGVuZGlhbgorICogZGF0YSBjb252ZW50aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIEZHUElPIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyIChGR1BJT0EsIEZHUElPQiwgRkdQSU9DLCBhbmQgc28gb24uKQorICogQHBhcmFtIG1hc2sgRkdQSU8gcGluIG51bWJlciBtYWNybworICovCit2b2lkIEZHUElPX0NoZWNrQXR0cmlidXRlQnl0ZXMoRkdQSU9fVHlwZSAqYmFzZSwgZ3Bpb19jaGVja2VyX2F0dHJpYnV0ZV90IGF0dHJpYnV0ZSk7CisjZW5kaWYKKworLypAfSovCisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TT0NfRkdQSU9fQ09VTlQgKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohCisgKiBAfQorICovCisKKyNlbmRpZiAvKiBfRlNMX0dQSU9fSF8qLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk3NzBhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjLmMKQEAgLTAsMCArMSwxNzU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJmc2xfaTJjLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBicmllZiBpMmMgdHJhbnNmZXIgc3RhdGUuICovCitlbnVtIF9pMmNfdHJhbnNmZXJfc3RhdGVzCit7CisgICAga0lkbGVTdGF0ZSA9IDB4MFUsICAgICAgICAgICAgIC8qITwgSTJDIGJ1cyBpZGxlLiAqLworICAgIGtDaGVja0FkZHJlc3NTdGF0ZSA9IDB4MVUsICAgICAvKiE8IDctYml0IGFkZHJlc3MgY2hlY2sgc3RhdGUuICovCisgICAga1NlbmRDb21tYW5kU3RhdGUgPSAweDJVLCAgICAgIC8qITwgU2VuZCBjb21tYW5kIGJ5dGUgcGhhc2UuICovCisgICAga1NlbmREYXRhU3RhdGUgPSAweDNVLCAgICAgICAgIC8qITwgU2VuZCBkYXRhIHRyYW5zZmVyIHBoYXNlLiAqLworICAgIGtSZWNlaXZlRGF0YUJlZ2luU3RhdGUgPSAweDRVLCAvKiE8IFJlY2VpdmUgZGF0YSB0cmFuc2ZlciBwaGFzZSBiZWdpbi4gKi8KKyAgICBrUmVjZWl2ZURhdGFTdGF0ZSA9IDB4NVUsICAgICAgLyohPCBSZWNlaXZlIGRhdGEgdHJhbnNmZXIgcGhhc2UuICovCit9OworCisvKiEgQGJyaWVmIENvbW1vbiBzZXRzIG9mIGZsYWdzIHVzZWQgYnkgdGhlIGRyaXZlci4gKi8KK2VudW0gX2kyY19mbGFnX2NvbnN0YW50cworeworLyohIEFsbCBmbGFncyB3aGljaCBhcmUgY2xlYXJlZCBieSB0aGUgZHJpdmVyIHVwb24gc3RhcnRpbmcgYSB0cmFuc2Zlci4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICBrQ2xlYXJGbGFncyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZyB8IGtJMkNfSW50UGVuZGluZ0ZsYWcgfCBrSTJDX1N0YXJ0RGV0ZWN0RmxhZyB8IGtJMkNfU3RvcERldGVjdEZsYWcsCisgICAga0lycUZsYWdzID0ga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUgfCBrSTJDX1N0YXJ0U3RvcERldGVjdEludGVycnVwdEVuYWJsZSwKKyNlbGlmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGtDbGVhckZsYWdzID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIHwga0kyQ19JbnRQZW5kaW5nRmxhZyB8IGtJMkNfU3RvcERldGVjdEZsYWcsCisgICAga0lycUZsYWdzID0ga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUgfCBrSTJDX1N0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUsCisjZWxzZQorICAgIGtDbGVhckZsYWdzID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIHwga0kyQ19JbnRQZW5kaW5nRmxhZywKKyAgICBrSXJxRmxhZ3MgPSBrSTJDX0dsb2JhbEludGVycnVwdEVuYWJsZSwKKyNlbmRpZgorCit9OworCisvKiEgQGJyaWVmIFR5cGVkZWYgZm9yIGludGVycnVwdCBoYW5kbGVyLiAqLwordHlwZWRlZiB2b2lkICgqaTJjX2lzcl90KShJMkNfVHlwZSAqYmFzZSwgdm9pZCAqaTJjSGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIEdldCBpbnN0YW5jZSBudW1iZXIgZm9yIEkyQyBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCit1aW50MzJfdCBJMkNfR2V0SW5zdGFuY2UoSTJDX1R5cGUgKmJhc2UpOworCisvKiEKKyogQGJyaWVmIFNldCBTQ0wvU0RBIGhvbGQgdGltZSwgdGhpcyBBUEkgcmVjZWl2ZXMgU0NMIHN0b3AgaG9sZCB0aW1lLCBjYWxjdWxhdGUgdGhlCisqIGNsb3Nlc3QgU0NMIGRpdmlkZXIgYW5kIE1VTFQgdmFsdWUgZm9yIHRoZSBTREEgaG9sZCB0aW1lLCBTQ0wgc3RhcnQgYW5kIFNDTCBzdG9wCisqIGhvbGQgdGltZS4gVG8gcmVkdWNlIHRoZSBST00gc2l6ZSwgU0RBL1NDTCBob2xkIHZhbHVlIG1hcHBpbmcgdGFibGUgaXMgbm90IHByb3ZpZGVkLAorKiBhc3N1bWUgU0NMIGRpdmlkZXIgPSBTQ0wgc3RvcCBob2xkIHZhbHVlICoyIHRvIGdldCB0aGUgY2xvc2VzdCBTQ0wgZGl2aWRlciB2YWx1ZSBhbmQgTVVMVAorKiB2YWx1ZSwgdGhlbiB0aGUgcmVsYXRlZCBTREEgaG9sZCB0aW1lLCBTQ0wgc3RhcnQgYW5kIFNDTCBzdG9wIGhvbGQgdGltZSBpcyB1c2VkLgorKgorKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSBzb3VyY2VDbG9ja19IeiBJMkMgZnVuY3Rpb25hbCBjbG9jayBmcmVxdWVuY3kgaW4gSGVydHouCisqIEBwYXJhbSBzY2xTdG9wSG9sZFRpbWVfbnMgU0NMIHN0b3AgaG9sZCB0aW1lIGluIG5zLgorKi8KK3N0YXRpYyB2b2lkIEkyQ19TZXRIb2xkVGltZShJMkNfVHlwZSAqYmFzZSwgdWludDMyX3Qgc2NsU3RvcEhvbGRUaW1lX25zLCB1aW50MzJfdCBzb3VyY2VDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIFNldCB1cCBtYXN0ZXIgdHJhbnNmZXIsIHNlbmQgc2xhdmUgYWRkcmVzcyBhbmQgZGVjaWRlIHRoZSBpbml0aWFsCisgKiB0cmFuc2ZlciBzdGF0ZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSB4ZmVyIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl90cmFuc2Zlcl90IHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0YXR1c190IEkyQ19Jbml0VHJhbnNmZXJTdGF0ZU1hY2hpbmUoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgQ2hlY2sgYW5kIGNsZWFyIHN0YXR1cyBvcGVyYXRpb24uCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHN0YXR1cyBjdXJyZW50IGkyYyBoYXJkd2FyZSBzdGF0dXMuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBObyBlcnJvciBmb3VuZC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0IFRyYW5zZmVyIGVycm9yLCBhcmJpdHJhdGlvbiBsb3N0LgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19OYWsgUmVjZWl2ZWQgTmFrIGVycm9yLgorICovCitzdGF0aWMgc3RhdHVzX3QgSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihJMkNfVHlwZSAqYmFzZSwgdWludDMyX3Qgc3RhdHVzKTsKKworLyohCisgKiBAYnJpZWYgTWFzdGVyIHJ1biB0cmFuc2ZlciBzdGF0ZSBtYWNoaW5lIHRvIHBlcmZvcm0gYSBieXRlIG9mIHRyYW5zZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlCisgKiBAcGFyYW0gaXNEb25lIGlucHV0IHBhcmFtIHRvIGdldCB3aGV0aGVyIHRoZSB0aGluZyBpcyBkb25lLCB0cnVlIGlzIGRvbmUKKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIE5vIGVycm9yIGZvdW5kLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3QgVHJhbnNmZXIgZXJyb3IsIGFyYml0cmF0aW9uIGxvc3QuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX05hayBSZWNlaXZlZCBOYWsgZXJyb3IuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX1RpbWVvdXQgVHJhbnNmZXIgZXJyb3IsIHdhaXQgc2lnbmFsIHRpbWVvdXQuCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJSdW5TdGF0ZU1hY2hpbmUoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgYm9vbCAqaXNEb25lKTsKKworLyohCisgKiBAYnJpZWYgSTJDIGNvbW1vbiBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBJMkNfVHJhbnNmZXJDb21tb25JUlFIYW5kbGVyKEkyQ19UeXBlICpiYXNlLCB2b2lkICpoYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGkyYyBoYW5kbGVzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIHZvaWQgKnNfaTJjSGFuZGxlW0ZTTF9GRUFUVVJFX1NPQ19JMkNfQ09VTlRdID0ge05VTEx9OworCisvKiEgQGJyaWVmIFNDTCBjbG9jayBkaXZpZGVyIHVzZWQgdG8gY2FsY3VsYXRlIGJhdWRyYXRlLiAqLworc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfaTJjRGl2aWRlclRhYmxlW10gPSB7CisgICAgMjAsICAyMiwgIDI0LCAgMjYsICAgMjgsICAgMzAsICAgMzQsICAgNDAsICAgMjgsICAgMzIsICAgMzYsICAgNDAsICAgNDQsICAgNDgsICAgNTYsICAgNjgsCisgICAgNDgsICA1NiwgIDY0LCAgNzIsICAgODAsICAgODgsICAgMTA0LCAgMTI4LCAgODAsICAgOTYsICAgMTEyLCAgMTI4LCAgMTQ0LCAgMTYwLCAgMTkyLCAgMjQwLAorICAgIDE2MCwgMTkyLCAyMjQsIDI1NiwgIDI4OCwgIDMyMCwgIDM4NCwgIDQ4MCwgIDMyMCwgIDM4NCwgIDQ0OCwgIDUxMiwgIDU3NiwgIDY0MCwgIDc2OCwgIDk2MCwKKyAgICA2NDAsIDc2OCwgODk2LCAxMDI0LCAxMTUyLCAxMjgwLCAxNTM2LCAxOTIwLCAxMjgwLCAxNTM2LCAxNzkyLCAyMDQ4LCAyMzA0LCAyNTYwLCAzMDcyLCAzODQwfTsKKworLyohIEBicmllZiBQb2ludGVycyB0byBpMmMgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgSTJDX1R5cGUgKmNvbnN0IHNfaTJjQmFzZXNbXSA9IEkyQ19CQVNFX1BUUlM7CisKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gaTJjIElSUSBudW1iZXIgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgSVJRbl9UeXBlIHNfaTJjSXJxc1tdID0gSTJDX0lSUVM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIGkyYyBjbG9ja3MgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfaTJjQ2xvY2tzW10gPSBJMkNfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKiEgQGJyaWVmIFBvaW50ZXIgdG8gbWFzdGVyIElSUSBoYW5kbGVyIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGkyY19pc3JfdCBzX2kyY01hc3RlcklzcjsKKworLyohIEBicmllZiBQb2ludGVyIHRvIHNsYXZlIElSUSBoYW5kbGVyIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGkyY19pc3JfdCBzX2kyY1NsYXZlSXNyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3VpbnQzMl90IEkyQ19HZXRJbnN0YW5jZShJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19pMmNCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19pMmNCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfaTJjQmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworc3RhdGljIHZvaWQgSTJDX1NldEhvbGRUaW1lKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBzY2xTdG9wSG9sZFRpbWVfbnMsIHVpbnQzMl90IHNvdXJjZUNsb2NrX0h6KQoreworICAgIHVpbnQzMl90IG11bHRpcGxpZXI7CisgICAgdWludDMyX3QgY29tcHV0ZWRTY2xIb2xkVGltZTsKKyAgICB1aW50MzJfdCBhYnNFcnJvcjsKKyAgICB1aW50MzJfdCBiZXN0RXJyb3IgPSBVSU5UMzJfTUFYOworICAgIHVpbnQzMl90IGJlc3RNdWx0ID0gMHU7CisgICAgdWludDMyX3QgYmVzdEljciA9IDB1OworICAgIHVpbnQ4X3QgbXVsdDsKKyAgICB1aW50OF90IGk7CisKKyAgICAvKiBTZWFyY2ggZm9yIHRoZSBzZXR0aW5ncyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IuIE11bHQgaXMgdGhlIE1VTFQgZmllbGQgb2YgdGhlIEkyQ19GIHJlZ2lzdGVyLAorICAgICAqIGFuZCByYW5nZXMgZnJvbSAwLTIuIEl0IHNlbGVjdHMgdGhlIG11bHRpcGxpZXIgZmFjdG9yIGZvciB0aGUgZGl2aWRlci4gKi8KKyAgICAvKiBTREEgaG9sZCB0aW1lID0gYnVzIHBlcmlvZCAocykgKiBtdWwgKiBTREEgaG9sZCB2YWx1ZS4gKi8KKyAgICAvKiBTQ0wgc3RhcnQgaG9sZCB0aW1lID0gYnVzIHBlcmlvZCAocykgKiBtdWwgKiBTQ0wgc3RhcnQgaG9sZCB2YWx1ZS4gKi8KKyAgICAvKiBTQ0wgc3RvcCBob2xkIHRpbWUgPSBidXMgcGVyaW9kIChzKSAqIG11bCAqIFNDTCBzdG9wIGhvbGQgdmFsdWUuICovCisKKyAgICBmb3IgKG11bHQgPSAwdTsgKG11bHQgPD0gMnUpICYmIChiZXN0RXJyb3IgIT0gMCk7ICsrbXVsdCkKKyAgICB7CisgICAgICAgIG11bHRpcGxpZXIgPSAxdSA8PCBtdWx0OworCisgICAgICAgIC8qIFNjYW4gdGFibGUgdG8gZmluZCBiZXN0IG1hdGNoLiAqLworICAgICAgICBmb3IgKGkgPSAwdTsgaSA8IHNpemVvZihzX2kyY0RpdmlkZXJUYWJsZSkgLyBzaXplb2Yoc19pMmNEaXZpZGVyVGFibGVbMF0pOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFzc3VtZSBTQ0wgaG9sZChzdG9wKSB2YWx1ZSA9IHNfaTJjRGl2aWRlclRhYmxlW2ldLzIuICovCisgICAgICAgICAgICBjb21wdXRlZFNjbEhvbGRUaW1lID0gKChtdWx0aXBsaWVyICogc19pMmNEaXZpZGVyVGFibGVbaV0pICogNTAwMDAwMDAwVSkgLyBzb3VyY2VDbG9ja19IejsKKyAgICAgICAgICAgIGFic0Vycm9yID0gc2NsU3RvcEhvbGRUaW1lX25zID4gY29tcHV0ZWRTY2xIb2xkVGltZSA/IChzY2xTdG9wSG9sZFRpbWVfbnMgLSBjb21wdXRlZFNjbEhvbGRUaW1lKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcHV0ZWRTY2xIb2xkVGltZSAtIHNjbFN0b3BIb2xkVGltZV9ucyk7CisKKyAgICAgICAgICAgIGlmIChhYnNFcnJvciA8IGJlc3RFcnJvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiZXN0TXVsdCA9IG11bHQ7CisgICAgICAgICAgICAgICAgYmVzdEljciA9IGk7CisgICAgICAgICAgICAgICAgYmVzdEVycm9yID0gYWJzRXJyb3I7CisKKyAgICAgICAgICAgICAgICAvKiBJZiB0aGUgZXJyb3IgaXMgMCwgdGhlbiB3ZSBjYW4gc3RvcCBzZWFyY2hpbmcgYmVjYXVzZSB3ZSB3b24ndCBmaW5kIGEgYmV0dGVyIG1hdGNoLiAqLworICAgICAgICAgICAgICAgIGlmIChhYnNFcnJvciA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogU2V0IGZyZXF1ZW5jeSByZWdpc3RlciBiYXNlZCBvbiBiZXN0IHNldHRpbmdzLiAqLworICAgIGJhc2UtPkYgPSBJMkNfRl9NVUxUKGJlc3RNdWx0KSB8IEkyQ19GX0lDUihiZXN0SWNyKTsKK30KKworc3RhdGljIHN0YXR1c190IEkyQ19Jbml0VHJhbnNmZXJTdGF0ZU1hY2hpbmUoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICBpMmNfZGlyZWN0aW9uX3QgZGlyZWN0aW9uID0geGZlci0+ZGlyZWN0aW9uOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFuZGxlIHRyYW5zZmVyIGluZm9ybWF0aW9uLiAqLworICAgIGhhbmRsZS0+dHJhbnNmZXIgPSAqeGZlcjsKKworICAgIC8qIFNhdmUgdG90YWwgdHJhbnNmZXIgc2l6ZS4gKi8KKyAgICBoYW5kbGUtPnRyYW5zZmVyU2l6ZSA9IHhmZXItPmRhdGFTaXplOworCisgICAgLyogSW5pdGlhbCB0cmFuc2ZlciBzdGF0ZS4gKi8KKyAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzU2l6ZSA+IDApCisgICAgeworICAgICAgICBpZiAoeGZlci0+ZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgZGlyZWN0aW9uID0ga0kyQ19Xcml0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGhhbmRsZS0+c3RhdGUgPSBrQ2hlY2tBZGRyZXNzU3RhdGU7CisKKyAgICAvKiBDbGVhciBhbGwgc3RhdHVzIGJlZm9yZSB0cmFuc2Zlci4gKi8KKyAgICBJMkNfTWFzdGVyQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrQ2xlYXJGbGFncyk7CisKKyAgICAvKiBJZiByZXBlYXRlZCBzdGFydCBpcyByZXF1ZXN0ZWQsIHNlbmQgcmVwZWF0ZWQgc3RhcnQuICovCisgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZmxhZ3MgJiBrSTJDX1RyYW5zZmVyUmVwZWF0ZWRTdGFydEZsYWcpCisgICAgeworICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyUmVwZWF0ZWRTdGFydChiYXNlLCBoYW5kbGUtPnRyYW5zZmVyLnNsYXZlQWRkcmVzcywgZGlyZWN0aW9uKTsKKyAgICB9CisgICAgZWxzZSAvKiBGb3Igbm9ybWFsIHRyYW5zZmVyLCBzZW5kIHN0YXJ0LiAqLworICAgIHsKKyAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0YXJ0KGJhc2UsIGhhbmRsZS0+dHJhbnNmZXIuc2xhdmVBZGRyZXNzLCBkaXJlY3Rpb24pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBJMkNfQ2hlY2tBbmRDbGVhckVycm9yKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBzdGF0dXMpCit7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgLyogQ2hlY2sgYXJiaXRyYXRpb24gbG9zdC4gKi8KKyAgICBpZiAoc3RhdHVzICYga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgYXJiaXRyYXRpb24gbG9zdCBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnOworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3Q7CisgICAgfQorICAgIC8qIENoZWNrIE5BSyAqLworICAgIGVsc2UgaWYgKHN0YXR1cyAmIGtJMkNfUmVjZWl2ZU5ha0ZsYWcpCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19OYWs7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0YXR1c190IEkyQ19NYXN0ZXJUcmFuc2ZlclJ1blN0YXRlTWFjaGluZShJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBib29sICppc0RvbmUpCit7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgIHVpbnQzMl90IHN0YXR1c0ZsYWdzID0gYmFzZS0+UzsKKyAgICAqaXNEb25lID0gZmFsc2U7CisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisgICAgYm9vbCBpZ25vcmVOYWsgPSAoKGhhbmRsZS0+c3RhdGUgPT0ga1NlbmREYXRhU3RhdGUpICYmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID09IDBVKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICgoaGFuZGxlLT5zdGF0ZSA9PSBrUmVjZWl2ZURhdGFTdGF0ZSkgJiYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgPT0gMVUpKTsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIGJ1aWxkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworICAgIC8qIENoZWNrICYgY2xlYXIgZXJyb3IgZmxhZ3MuICovCisgICAgcmVzdWx0ID0gSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihiYXNlLCBzdGF0dXNGbGFncyk7CisKKyAgICAvKiBJZ25vcmUgTmFrIHdoZW4gaXQncyBhcHBlYXJlZCBmb3IgbGFzdCBieXRlLiAqLworICAgIGlmICgocmVzdWx0ID09IGtTdGF0dXNfSTJDX05haykgJiYgaWdub3JlTmFrKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIC8qIEhhbmRsZSBDaGVjayBhZGRyZXNzIHN0YXRlIHRvIGNoZWNrIHRoZSBzbGF2ZSBhZGRyZXNzIGlzIEFja2VkIGluIHNsYXZlCisgICAgICAgcHJvYmUgYXBwbGljYXRpb24uICovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgPT0ga0NoZWNrQWRkcmVzc1N0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1c0ZsYWdzICYga0kyQ19SZWNlaXZlTmFrRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQWRkcl9OYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzU2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtTZW5kQ29tbWFuZFN0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1dyaXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTmV4dCBzdGF0ZSwgc2VuZCBkYXRhLiAqLworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga1NlbmREYXRhU3RhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgc3RhdGUsIHJlY2VpdmUgZGF0YSBiZWdpbi4gKi8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtSZWNlaXZlRGF0YUJlZ2luU3RhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogUnVuIHN0YXRlIG1hY2hpbmUuICovCisgICAgc3dpdGNoIChoYW5kbGUtPnN0YXRlKQorICAgIHsKKyAgICAgICAgLyogU2VuZCBJMkMgY29tbWFuZC4gKi8KKyAgICAgICAgY2FzZSBrU2VuZENvbW1hbmRTdGF0ZToKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3NTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzc1NpemUtLTsKKyAgICAgICAgICAgICAgICBiYXNlLT5EID0gKChoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3MpID4+ICg4ICogaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzU2l6ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1dyaXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTmV4dCBzdGF0ZSwgc2VuZCBkYXRhLiAqLworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga1NlbmREYXRhU3RhdGU7CisKKyAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBmaXJzdCBieXRlIG9mIGRhdGEuICovCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID4gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS0+RCA9ICpoYW5kbGUtPnRyYW5zZmVyLmRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnRyYW5zZmVyLmRhdGErKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdGVkIHN0YXJ0IGFuZCBzbGF2ZSBhZGRyZXNzLiAqLworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyUmVwZWF0ZWRTdGFydChiYXNlLCBoYW5kbGUtPnRyYW5zZmVyLnNsYXZlQWRkcmVzcywga0kyQ19SZWFkKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBOZXh0IHN0YXRlLCByZWNlaXZlIGRhdGEgYmVnaW4uICovCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrUmVjZWl2ZURhdGFCZWdpblN0YXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFNlbmQgSTJDIGRhdGEuICovCisgICAgICAgIGNhc2Uga1NlbmREYXRhU3RhdGU6CisgICAgICAgICAgICAvKiBTZW5kIG9uZSBieXRlIG9mIGRhdGEuICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFzZS0+RCA9ICpoYW5kbGUtPnRyYW5zZmVyLmRhdGE7CisgICAgICAgICAgICAgICAgaGFuZGxlLT50cmFuc2Zlci5kYXRhKys7CisgICAgICAgICAgICAgICAgaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICppc0RvbmUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogU3RhcnQgSTJDIGRhdGEgcmVjZWl2ZS4gKi8KKyAgICAgICAgY2FzZSBrUmVjZWl2ZURhdGFCZWdpblN0YXRlOgorICAgICAgICAgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworCisgICAgICAgICAgICAvKiBTZW5kIG5hayBhdCB0aGUgbGFzdCByZWNlaXZlIGJ5dGUuICovCisgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9UWEFLX01BU0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSB0aGUgYnVzLiAqLworICAgICAgICAgICAgZHVtbXkgPSBiYXNlLT5EOworCisgICAgICAgICAgICAvKiBOZXh0IHN0YXRlLCByZWNlaXZlIGRhdGEuICovCisgICAgICAgICAgICBoYW5kbGUtPnN0YXRlID0ga1JlY2VpdmVEYXRhU3RhdGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBSZWNlaXZlIEkyQyBkYXRhLiAqLworICAgICAgICBjYXNlIGtSZWNlaXZlRGF0YVN0YXRlOgorICAgICAgICAgICAgLyogUmVjZWl2ZSBvbmUgYnl0ZSBvZiBkYXRhLiAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUtLSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKmlzRG9uZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBzdG9wIGlmIGtJMkNfVHJhbnNmZXJOb1N0b3AgaXMgbm90IGFzc2VydGVkLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIShoYW5kbGUtPnRyYW5zZmVyLmZsYWdzICYga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWcpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyU3RvcChiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9UWF9NQVNLOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogU2VuZCBOQUsgYXQgdGhlIGxhc3QgcmVjZWl2ZSBieXRlLiAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgYnl0ZSBpbnRvIHRoZSB0cmFuc2ZlciBidWZmZXIuICovCisgICAgICAgICAgICAgICAgKmhhbmRsZS0+dHJhbnNmZXIuZGF0YSA9IGJhc2UtPkQ7CisgICAgICAgICAgICAgICAgaGFuZGxlLT50cmFuc2Zlci5kYXRhKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgSTJDX1RyYW5zZmVyQ29tbW9uSVJRSGFuZGxlcihJMkNfVHlwZSAqYmFzZSwgdm9pZCAqaGFuZGxlKQoreworICAgIC8qIENoZWNrIGlmIG1hc3RlciBpbnRlcnJ1cHQuICovCisgICAgaWYgKChiYXNlLT5TICYga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnKSB8fCAoYmFzZS0+QzEgJiBJMkNfQzFfTVNUX01BU0spKQorICAgIHsKKyAgICAgICAgc19pMmNNYXN0ZXJJc3IoYmFzZSwgaGFuZGxlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc19pMmNTbGF2ZUlzcihiYXNlLCBoYW5kbGUpOworICAgIH0KKyAgICBfX0RTQigpOworfQorCit2b2lkIEkyQ19NYXN0ZXJJbml0KEkyQ19UeXBlICpiYXNlLCBjb25zdCBpMmNfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIGFzc2VydChtYXN0ZXJDb25maWcgJiYgc3JjQ2xvY2tfSHopOworCisgICAgLyogVGVtcG9yYXJ5IHJlZ2lzdGVyIGZvciBmaWx0ZXIgcmVhZC4gKi8KKyAgICB1aW50OF90IGZsdFJlZzsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUKKyAgICB1aW50OF90IHMyUmVnOworI2VuZGlmCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEVuYWJsZSBJMkMgY2xvY2suICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19pMmNDbG9ja3NbSTJDX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyAgICAvKiBSZXNldCB0aGUgbW9kdWxlLiAqLworICAgIGJhc2UtPkExID0gMDsKKyAgICBiYXNlLT5GID0gMDsKKyAgICBiYXNlLT5DMSA9IDA7CisgICAgYmFzZS0+UyA9IDB4RkZVOworICAgIGJhc2UtPkMyID0gMDsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICBiYXNlLT5GTFQgPSAweDUwVTsKKyNlbGlmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGJhc2UtPkZMVCA9IDB4NDBVOworI2VuZGlmCisgICAgYmFzZS0+UkEgPSAwOworCisgICAgLyogRGlzYWJsZSBJMkMgcHJpb3IgdG8gY29uZmlndXJpbmcgaXQuICovCisgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfSUlDRU5fTUFTSyk7CisKKyAgICAvKiBDbGVhciBhbGwgZmxhZ3MuICovCisgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0NsZWFyRmxhZ3MpOworCisgICAgLyogQ29uZmlndXJlIGJhdWQgcmF0ZS4gKi8KKyAgICBJMkNfTWFzdGVyU2V0QmF1ZFJhdGUoYmFzZSwgbWFzdGVyQ29uZmlnLT5iYXVkUmF0ZV9CcHMsIHNyY0Nsb2NrX0h6KTsKKworICAgIC8qIFJlYWQgb3V0IHRoZSBGTFQgcmVnaXN0ZXIuICovCisgICAgZmx0UmVnID0gYmFzZS0+RkxUOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfSE9MRF9PRkYpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9IT0xEX09GRgorICAgIC8qIENvbmZpZ3VyZSB0aGUgc3RvcCAvIGhvbGQgZW5hYmxlLiAqLworICAgIGZsdFJlZyAmPSB+KEkyQ19GTFRfU0hFTl9NQVNLKTsKKyAgICBmbHRSZWcgfD0gSTJDX0ZMVF9TSEVOKG1hc3RlckNvbmZpZy0+ZW5hYmxlU3RvcEhvbGQpOworI2VuZGlmCisKKyAgICAvKiBDb25maWd1cmUgdGhlIGdsaXRjaCBmaWx0ZXIgdmFsdWUuICovCisgICAgZmx0UmVnICY9IH4oSTJDX0ZMVF9GTFRfTUFTSyk7CisgICAgZmx0UmVnIHw9IEkyQ19GTFRfRkxUKG1hc3RlckNvbmZpZy0+Z2xpdGNoRmlsdGVyV2lkdGgpOworCisgICAgLyogV3JpdGUgdGhlIHJlZ2lzdGVyIHZhbHVlIGJhY2sgdG8gdGhlIGZpbHRlciByZWdpc3Rlci4gKi8KKyAgICBiYXNlLT5GTFQgPSBmbHRSZWc7CisKKy8qIEVuYWJsZS9EaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgczJSZWcgPSBiYXNlLT5TMiAmICh+STJDX1MyX0RGRU5fTUFTSyk7CisgICAgYmFzZS0+UzIgPSBzMlJlZyB8IEkyQ19TMl9ERkVOKG1hc3RlckNvbmZpZy0+ZW5hYmxlRG91YmxlQnVmZmVyaW5nKTsKKyNlbmRpZgorCisgICAgLyogRW5hYmxlIHRoZSBJMkMgcGVyaXBoZXJhbCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbi4gKi8KKyAgICBiYXNlLT5DMSA9IEkyQ19DMV9JSUNFTihtYXN0ZXJDb25maWctPmVuYWJsZU1hc3Rlcik7Cit9CisKK3ZvaWQgSTJDX01hc3RlckRlaW5pdChJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBEaXNhYmxlIEkyQyBtb2R1bGUuICovCisgICAgSTJDX0VuYWJsZShiYXNlLCBmYWxzZSk7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogRGlzYWJsZSBJMkMgY2xvY2suICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfaTJjQ2xvY2tzW0kyQ19HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIEkyQ19NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKGkyY19tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZykKK3sKKyAgICBhc3NlcnQobWFzdGVyQ29uZmlnKTsKKworICAgIC8qIERlZmF1bHQgYmF1ZCByYXRlIGF0IDEwMGticHMuICovCisgICAgbWFzdGVyQ29uZmlnLT5iYXVkUmF0ZV9CcHMgPSAxMDAwMDBVOworCisvKiBEZWZhdWx0IHN0b3AgaG9sZCBlbmFibGUgaXMgZGlzYWJsZWQuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfSE9MRF9PRkYpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9IT0xEX09GRgorICAgIG1hc3RlckNvbmZpZy0+ZW5hYmxlU3RvcEhvbGQgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgLyogRGVmYXVsdCBnbGl0Y2ggZmlsdGVyIHZhbHVlIGlzIG5vIGZpbHRlci4gKi8KKyAgICBtYXN0ZXJDb25maWctPmdsaXRjaEZpbHRlcldpZHRoID0gMFU7CisKKy8qIERlZmF1bHQgZW5hYmxlIGRvdWJsZSBidWZmZXJpbmcuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgbWFzdGVyQ29uZmlnLT5lbmFibGVEb3VibGVCdWZmZXJpbmcgPSB0cnVlOworI2VuZGlmCisKKyAgICAvKiBFbmFibGUgdGhlIEkyQyBwZXJpcGhlcmFsLiAqLworICAgIG1hc3RlckNvbmZpZy0+ZW5hYmxlTWFzdGVyID0gdHJ1ZTsKK30KKwordm9pZCBJMkNfRW5hYmxlSW50ZXJydXB0cyhJMkNfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyNpZmRlZiBJMkNfSEFTX1NUT1BfREVURUNUCisgICAgdWludDhfdCBmbHRSZWc7CisjZW5kaWYKKworICAgIGlmIChtYXNrICYga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfSUlDSUVfTUFTSzsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICBpZiAobWFzayAmIGtJMkNfU3RvcERldGVjdEludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGZsdFJlZyA9IGJhc2UtPkZMVDsKKworICAgICAgICAvKiBLZWVwIFNUT1BGIGZsYWcuICovCisgICAgICAgIGZsdFJlZyAmPSB+STJDX0ZMVF9TVE9QRl9NQVNLOworCisgICAgICAgIC8qIFN0b3AgZGV0ZWN0IGVuYWJsZS4gKi8KKyAgICAgICAgZmx0UmVnIHw9IEkyQ19GTFRfU1RPUElFX01BU0s7CisgICAgICAgIGJhc2UtPkZMVCA9IGZsdFJlZzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAgaWYgKG1hc2sgJiBrSTJDX1N0YXJ0U3RvcERldGVjdEludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGZsdFJlZyA9IGJhc2UtPkZMVDsKKworICAgICAgICAvKiBLZWVwIFNUQVJURiBhbmQgU1RPUEYgZmxhZ3MuICovCisgICAgICAgIGZsdFJlZyAmPSB+KEkyQ19GTFRfU1RPUEZfTUFTSyB8IEkyQ19GTFRfU1RBUlRGX01BU0spOworCisgICAgICAgIC8qIFN0YXJ0IGFuZCBzdG9wIGRldGVjdCBlbmFibGUuICovCisgICAgICAgIGZsdFJlZyB8PSBJMkNfRkxUX1NTSUVfTUFTSzsKKyAgICAgICAgYmFzZS0+RkxUID0gZmx0UmVnOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCit9CisKK3ZvaWQgSTJDX0Rpc2FibGVJbnRlcnJ1cHRzKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGlmIChtYXNrICYga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DMSAmPSB+STJDX0MxX0lJQ0lFX01BU0s7CisgICAgfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUCisgICAgaWYgKG1hc2sgJiBrSTJDX1N0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5GTFQgJj0gfihJMkNfRkxUX1NUT1BJRV9NQVNLIHwgSTJDX0ZMVF9TVE9QRl9NQVNLKTsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAgaWYgKG1hc2sgJiBrSTJDX1N0YXJ0U3RvcERldGVjdEludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkZMVCAmPSB+KEkyQ19GTFRfU1NJRV9NQVNLIHwgSTJDX0ZMVF9TVE9QRl9NQVNLIHwgSTJDX0ZMVF9TVEFSVEZfTUFTSyk7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgKi8KK30KKwordm9pZCBJMkNfTWFzdGVyU2V0QmF1ZFJhdGUoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGJhdWRSYXRlX0JwcywgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgdWludDMyX3QgbXVsdGlwbGllcjsKKyAgICB1aW50MzJfdCBjb21wdXRlZFJhdGU7CisgICAgdWludDMyX3QgYWJzRXJyb3I7CisgICAgdWludDMyX3QgYmVzdEVycm9yID0gVUlOVDMyX01BWDsKKyAgICB1aW50MzJfdCBiZXN0TXVsdCA9IDB1OworICAgIHVpbnQzMl90IGJlc3RJY3IgPSAwdTsKKyAgICB1aW50OF90IG11bHQ7CisgICAgdWludDhfdCBpOworCisgICAgLyogU2VhcmNoIGZvciB0aGUgc2V0dGluZ3Mgd2l0aCB0aGUgbG93ZXN0IGVycm9yLiBNdWx0IGlzIHRoZSBNVUxUIGZpZWxkIG9mIHRoZSBJMkNfRiByZWdpc3RlciwKKyAgICAgKiBhbmQgcmFuZ2VzIGZyb20gMC0yLiBJdCBzZWxlY3RzIHRoZSBtdWx0aXBsaWVyIGZhY3RvciBmb3IgdGhlIGRpdmlkZXIuICovCisgICAgZm9yIChtdWx0ID0gMHU7IChtdWx0IDw9IDJ1KSAmJiAoYmVzdEVycm9yICE9IDApOyArK211bHQpCisgICAgeworICAgICAgICBtdWx0aXBsaWVyID0gMXUgPDwgbXVsdDsKKworICAgICAgICAvKiBTY2FuIHRhYmxlIHRvIGZpbmQgYmVzdCBtYXRjaC4gKi8KKyAgICAgICAgZm9yIChpID0gMHU7IGkgPCBzaXplb2Yoc19pMmNEaXZpZGVyVGFibGUpIC8gc2l6ZW9mKHVpbnQxNl90KTsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wdXRlZFJhdGUgPSBzcmNDbG9ja19IeiAvIChtdWx0aXBsaWVyICogc19pMmNEaXZpZGVyVGFibGVbaV0pOworICAgICAgICAgICAgYWJzRXJyb3IgPSBiYXVkUmF0ZV9CcHMgPiBjb21wdXRlZFJhdGUgPyAoYmF1ZFJhdGVfQnBzIC0gY29tcHV0ZWRSYXRlKSA6IChjb21wdXRlZFJhdGUgLSBiYXVkUmF0ZV9CcHMpOworCisgICAgICAgICAgICBpZiAoYWJzRXJyb3IgPCBiZXN0RXJyb3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmVzdE11bHQgPSBtdWx0OworICAgICAgICAgICAgICAgIGJlc3RJY3IgPSBpOworICAgICAgICAgICAgICAgIGJlc3RFcnJvciA9IGFic0Vycm9yOworCisgICAgICAgICAgICAgICAgLyogSWYgdGhlIGVycm9yIGlzIDAsIHRoZW4gd2UgY2FuIHN0b3Agc2VhcmNoaW5nIGJlY2F1c2Ugd2Ugd29uJ3QgZmluZCBhIGJldHRlciBtYXRjaC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoYWJzRXJyb3IgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNldCBmcmVxdWVuY3kgcmVnaXN0ZXIgYmFzZWQgb24gYmVzdCBzZXR0aW5ncy4gKi8KKyAgICBiYXNlLT5GID0gSTJDX0ZfTVVMVChiZXN0TXVsdCkgfCBJMkNfRl9JQ1IoYmVzdEljcik7Cit9CisKK3N0YXR1c190IEkyQ19NYXN0ZXJTdGFydChJMkNfVHlwZSAqYmFzZSwgdWludDhfdCBhZGRyZXNzLCBpMmNfZGlyZWN0aW9uX3QgZGlyZWN0aW9uKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB1aW50MzJfdCBzdGF0dXNGbGFncyA9IEkyQ19NYXN0ZXJHZXRTdGF0dXNGbGFncyhiYXNlKTsKKworICAgIC8qIFJldHVybiBhbiBlcnJvciBpZiB0aGUgYnVzIGlzIGFscmVhZHkgaW4gdXNlLiAqLworICAgIGlmIChzdGF0dXNGbGFncyAmIGtJMkNfQnVzQnVzeUZsYWcpCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19CdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBTZW5kIHRoZSBTVEFSVCBzaWduYWwuICovCisgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9NU1RfTUFTSyB8IEkyQ19DMV9UWF9NQVNLOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJJTkcpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUklORworICAgICAgICB3aGlsZSAoIShiYXNlLT5TMiAmIEkyQ19TMl9FTVBUWV9NQVNLKSkKKyAgICAgICAgeworICAgICAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSSU5HICovCisKKyAgICAgICAgYmFzZS0+RCA9ICgoKHVpbnQzMl90KWFkZHJlc3MpIDw8IDFVIHwgKChkaXJlY3Rpb24gPT0ga0kyQ19SZWFkKSA/IDFVIDogMFUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyUmVwZWF0ZWRTdGFydChJMkNfVHlwZSAqYmFzZSwgdWludDhfdCBhZGRyZXNzLCBpMmNfZGlyZWN0aW9uX3QgZGlyZWN0aW9uKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB1aW50OF90IHNhdmVkTXVsdDsKKyAgICB1aW50MzJfdCBzdGF0dXNGbGFncyA9IEkyQ19NYXN0ZXJHZXRTdGF0dXNGbGFncyhiYXNlKTsKKyAgICB1aW50OF90IHRpbWVEZWxheSA9IDY7CisKKyAgICAvKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGJ1cyBpcyBhbHJlYWR5IGluIHVzZSwgYnV0IG5vdCBieSB1cy4gKi8KKyAgICBpZiAoKHN0YXR1c0ZsYWdzICYga0kyQ19CdXNCdXN5RmxhZykgJiYgKChiYXNlLT5DMSAmIEkyQ19DMV9NU1RfTUFTSykgPT0gMCkpCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19CdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzYXZlZE11bHQgPSBiYXNlLT5GOworICAgICAgICBiYXNlLT5GID0gc2F2ZWRNdWx0ICYgKH5JMkNfRl9NVUxUX01BU0spOworCisgICAgICAgIC8qIFdlIGFyZSBhbHJlYWR5IGluIGEgdHJhbnNmZXIsIHNvIHNlbmQgYSByZXBlYXRlZCBzdGFydC4gKi8KKyAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1JTVEFfTUFTSyB8IEkyQ19DMV9UWF9NQVNLOworCisgICAgICAgIC8qIFJlc3RvcmUgdGhlIG11bHRpcGxpZXIgZmFjdG9yLiAqLworICAgICAgICBiYXNlLT5GID0gc2F2ZWRNdWx0OworCisgICAgICAgIC8qIEFkZCBzb21lIGRlbGF5IHRvIHdhaXQgdGhlIFJlLVN0YXJ0IHNpZ25hbC4gKi8KKyAgICAgICAgd2hpbGUgKHRpbWVEZWxheS0tKQorICAgICAgICB7CisgICAgICAgICAgICBfX05PUCgpOworICAgICAgICB9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUklORykgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19ET1VCTEVfQlVGRkVSSU5HCisgICAgICAgIHdoaWxlICghKGJhc2UtPlMyICYgSTJDX1MyX0VNUFRZX01BU0spKQorICAgICAgICB7CisgICAgICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJJTkcgKi8KKworICAgICAgICBiYXNlLT5EID0gKCgodWludDMyX3QpYWRkcmVzcykgPDwgMVUgfCAoKGRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpID8gMVUgOiAwVSkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXR1c190IEkyQ19NYXN0ZXJTdG9wKEkyQ19UeXBlICpiYXNlKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB1aW50MTZfdCB0aW1lb3V0ID0gVUlOVDE2X01BWDsKKworICAgIC8qIElzc3VlIHRoZSBTVE9QIGNvbW1hbmQgb24gdGhlIGJ1cy4gKi8KKyAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9NU1RfTUFTSyB8IEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisKKyAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgd2hpbGUgKChiYXNlLT5TICYga0kyQ19CdXNCdXN5RmxhZykgJiYgKC0tdGltZW91dCkpCisgICAgeworICAgIH0KKworICAgIGlmICh0aW1lb3V0ID09IDApCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19UaW1lb3V0OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3VpbnQzMl90IEkyQ19NYXN0ZXJHZXRTdGF0dXNGbGFncyhJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBzdGF0dXNGbGFncyA9IGJhc2UtPlM7CisKKyNpZmRlZiBJMkNfSEFTX1NUT1BfREVURUNUCisgICAgLyogTG9vayB1cCB0aGUgU1RPUEYgYml0IGZyb20gdGhlIGZpbHRlciByZWdpc3Rlci4gKi8KKyAgICBpZiAoYmFzZS0+RkxUICYgSTJDX0ZMVF9TVE9QRl9NQVNLKQorICAgIHsKKyAgICAgICAgc3RhdHVzRmxhZ3MgfD0ga0kyQ19TdG9wRGV0ZWN0RmxhZzsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIC8qIExvb2sgdXAgdGhlIFNUQVJURiBiaXQgZnJvbSB0aGUgZmlsdGVyIHJlZ2lzdGVyLiAqLworICAgIGlmIChiYXNlLT5GTFQgJiBJMkNfRkxUX1NUQVJURl9NQVNLKQorICAgIHsKKyAgICAgICAgc3RhdHVzRmxhZ3MgfD0ga0kyQ19TdGFydERldGVjdEZsYWc7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgKi8KKworICAgIHJldHVybiBzdGF0dXNGbGFnczsKK30KKworc3RhdHVzX3QgSTJDX01hc3RlcldyaXRlQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKnR4QnVmZiwgc2l6ZV90IHR4U2l6ZSwgdWludDMyX3QgZmxhZ3MpCit7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgIHVpbnQ4X3Qgc3RhdHVzRmxhZ3MgPSAwOworCisgICAgLyogV2FpdCB1bnRpbCB0aGUgZGF0YSByZWdpc3RlciBpcyByZWFkeSBmb3IgdHJhbnNtaXQuICovCisgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfVHJhbnNmZXJDb21wbGV0ZUZsYWcpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgIC8qIFNldHVwIHRoZSBJMkMgcGVyaXBoZXJhbCB0byB0cmFuc21pdCBkYXRhLiAqLworICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9UWF9NQVNLOworCisgICAgd2hpbGUgKHR4U2l6ZS0tKQorICAgIHsKKyAgICAgICAgLyogU2VuZCBhIGJ5dGUgb2YgZGF0YS4gKi8KKyAgICAgICAgYmFzZS0+RCA9ICp0eEJ1ZmYrKzsKKworICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzRmxhZ3MgPSBiYXNlLT5TOworCisgICAgICAgIC8qIENsZWFyIHRoZSBJSUNJRiBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAvKiBDaGVjayBpZiBhcmJpdHJhdGlvbiBsb3N0IG9yIG5vIGFja25vd2xlZGdlbWVudCAoTkFLKSwgcmV0dXJuIGZhaWx1cmUgc3RhdHVzLiAqLworICAgICAgICBpZiAoc3RhdHVzRmxhZ3MgJiBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPlMgPSBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWc7CisgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19BcmJpdHJhdGlvbkxvc3Q7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHN0YXR1c0ZsYWdzICYga0kyQ19SZWNlaXZlTmFrRmxhZykgJiYgdHhTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5TID0ga0kyQ19SZWNlaXZlTmFrRmxhZzsKKyAgICAgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX05hazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBCcmVha2luZyBvdXQgb2YgdGhlIHNlbmQgbG9vcC4gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCgocmVzdWx0ID09IGtTdGF0dXNfU3VjY2VzcykgJiYgKCEoZmxhZ3MgJiBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZykpKSB8fCAocmVzdWx0ID09IGtTdGF0dXNfSTJDX05haykpCisgICAgeworICAgICAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgLyogU2VuZCBzdG9wLiAqLworICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyU3RvcChiYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyUmVhZEJsb2NraW5nKEkyQ19UeXBlICpiYXNlLCB1aW50OF90ICpyeEJ1ZmYsIHNpemVfdCByeFNpemUsIHVpbnQzMl90IGZsYWdzKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB2b2xhdGlsZSB1aW50OF90IGR1bW15ID0gMDsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIGJ1aWxkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworICAgIC8qIFdhaXQgdW50aWwgdGhlIGRhdGEgcmVnaXN0ZXIgaXMgcmVhZHkgZm9yIHRyYW5zbWl0LiAqLworICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX1RyYW5zZmVyQ29tcGxldGVGbGFnKSkKKyAgICB7CisgICAgfQorCisgICAgLyogQ2xlYXIgdGhlIElJQ0lGIGZsYWcuICovCisgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAvKiBTZXR1cCB0aGUgSTJDIHBlcmlwaGVyYWwgdG8gcmVjZWl2ZSBkYXRhLiAqLworICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKworICAgIC8qIElmIHJ4U2l6ZSBlcXVhbHMgMSwgY29uZmlndXJlIHRvIHNlbmQgTkFLLiAqLworICAgIGlmIChyeFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIC8qIElzc3VlIE5BQ0sgb24gcmVhZC4gKi8KKyAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKyAgICB9CisKKyAgICAvKiBEbyBkdW1teSByZWFkLiAqLworICAgIGR1bW15ID0gYmFzZS0+RDsKKworICAgIHdoaWxlICgocnhTaXplLS0pKQorICAgIHsKKyAgICAgICAgLyogV2FpdCB1bnRpbCBkYXRhIHRyYW5zZmVyIGNvbXBsZXRlLiAqLworICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENsZWFyIHRoZSBJSUNJRiBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAvKiBTaW5nbGUgYnl0ZSB1c2UgY2FzZS4gKi8KKyAgICAgICAgaWYgKHJ4U2l6ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShmbGFncyAmIGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJc3N1ZSBTVE9QIGNvbW1hbmQgYmVmb3JlIHJlYWRpbmcgbGFzdCBieXRlLiAqLworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJTdG9wKGJhc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENoYW5nZSBkaXJlY3Rpb24gdG8gVHggdG8gYXZvaWQgZXh0cmEgY2xvY2tzLiAqLworICAgICAgICAgICAgICAgIGJhc2UtPkMxIHw9IEkyQ19DMV9UWF9NQVNLOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ4U2l6ZSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJc3N1ZSBOQUNLIG9uIHJlYWQuICovCisgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworICAgICAgICB9CisKKyAgICAgICAgLyogUmVhZCBmcm9tIHRoZSBkYXRhIHJlZ2lzdGVyLiAqLworICAgICAgICAqcnhCdWZmKysgPSBiYXNlLT5EOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXR1c190IEkyQ19NYXN0ZXJUcmFuc2ZlckJsb2NraW5nKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgKnhmZXIpCit7CisgICAgYXNzZXJ0KHhmZXIpOworCisgICAgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbiA9IHhmZXItPmRpcmVjdGlvbjsKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICAvKiBDbGVhciBhbGwgc3RhdHVzIGJlZm9yZSB0cmFuc2Zlci4gKi8KKyAgICBJMkNfTWFzdGVyQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrQ2xlYXJGbGFncyk7CisKKyAgICAvKiBXYWl0IHVudGlsIHJlYWR5IHRvIGNvbXBsZXRlLiAqLworICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX1RyYW5zZmVyQ29tcGxldGVGbGFnKSkKKyAgICB7CisgICAgfQorCisgICAgLyogQ2hhbmdlIHRvIHNlbmQgd3JpdGUgYWRkcmVzcyB3aGVuIGl0J3MgYSByZWFkIG9wZXJhdGlvbiB3aXRoIGNvbW1hbmQuICovCisgICAgaWYgKCh4ZmVyLT5zdWJhZGRyZXNzU2l6ZSA+IDApICYmICh4ZmVyLT5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKSkKKyAgICB7CisgICAgICAgIGRpcmVjdGlvbiA9IGtJMkNfV3JpdGU7CisgICAgfQorCisgICAgLyogSWYgcmVwZWF0ZWQgc3RhcnQgaXMgcmVxdWVzdGVkLCBzZW5kIHJlcGVhdGVkIHN0YXJ0LiAqLworICAgIGlmICh4ZmVyLT5mbGFncyAmIGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZykKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJSZXBlYXRlZFN0YXJ0KGJhc2UsIHhmZXItPnNsYXZlQWRkcmVzcywgZGlyZWN0aW9uKTsKKyAgICB9CisgICAgZWxzZSAvKiBGb3Igbm9ybWFsIHRyYW5zZmVyLCBzZW5kIHN0YXJ0LiAqLworICAgIHsKKyAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0YXJ0KGJhc2UsIHhmZXItPnNsYXZlQWRkcmVzcywgZGlyZWN0aW9uKTsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gaWYgZXJyb3IuICovCisgICAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiB0aGVyZSdzIHRyYW5zZmVyIGVycm9yLiAqLworICAgIHJlc3VsdCA9IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoYmFzZSwgYmFzZS0+Uyk7CisKKyAgICAvKiBSZXR1cm4gaWYgZXJyb3IuICovCisgICAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgPT0ga1N0YXR1c19JMkNfTmFrKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19BZGRyX05hazsKKworICAgICAgICAgICAgSTJDX01hc3RlclN0b3AoYmFzZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIFNlbmQgc3ViYWRkcmVzcy4gKi8KKyAgICBpZiAoeGZlci0+c3ViYWRkcmVzc1NpemUpCisgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICAvKiBDbGVhciBpbnRlcnJ1cHQgcGVuZGluZyBmbGFnLiAqLworICAgICAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgICAgIHhmZXItPnN1YmFkZHJlc3NTaXplLS07CisgICAgICAgICAgICBiYXNlLT5EID0gKCh4ZmVyLT5zdWJhZGRyZXNzKSA+PiAoOCAqIHhmZXItPnN1YmFkZHJlc3NTaXplKSk7CisKKyAgICAgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZS4gKi8KKyAgICAgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUncyB0cmFuc2ZlciBlcnJvci4gKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoYmFzZSwgYmFzZS0+Uyk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19OYWspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBJMkNfTWFzdGVyU3RvcChiYXNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKCh4ZmVyLT5zdWJhZGRyZXNzU2l6ZSA+IDApICYmIChyZXN1bHQgPT0ga1N0YXR1c19TdWNjZXNzKSk7CisKKyAgICAgICAgaWYgKHhmZXItPmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENsZWFyIHBlbmRpbmcgZmxhZy4gKi8KKyAgICAgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgICAgICAgICAvKiBTZW5kIHJlcGVhdGVkIHN0YXJ0IGFuZCBzbGF2ZSBhZGRyZXNzLiAqLworICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoYmFzZSwgeGZlci0+c2xhdmVBZGRyZXNzLCBrSTJDX1JlYWQpOworCisgICAgICAgICAgICAvKiBSZXR1cm4gaWYgZXJyb3IuICovCisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZS4gKi8KKyAgICAgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUncyB0cmFuc2ZlciBlcnJvci4gKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoYmFzZSwgYmFzZS0+Uyk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19OYWspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19BZGRyX05hazsKKworICAgICAgICAgICAgICAgICAgICBJMkNfTWFzdGVyU3RvcChiYXNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogVHJhbnNtaXQgZGF0YS4gKi8KKyAgICBpZiAoKHhmZXItPmRpcmVjdGlvbiA9PSBrSTJDX1dyaXRlKSAmJiAoeGZlci0+ZGF0YVNpemUgPiAwKSkKKyAgICB7CisgICAgICAgIC8qIFNlbmQgRGF0YS4gKi8KKyAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlcldyaXRlQmxvY2tpbmcoYmFzZSwgeGZlci0+ZGF0YSwgeGZlci0+ZGF0YVNpemUsIHhmZXItPmZsYWdzKTsKKyAgICB9CisKKyAgICAvKiBSZWNlaXZlIERhdGEuICovCisgICAgaWYgKCh4ZmVyLT5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKSAmJiAoeGZlci0+ZGF0YVNpemUgPiAwKSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJSZWFkQmxvY2tpbmcoYmFzZSwgeGZlci0+ZGF0YSwgeGZlci0+ZGF0YVNpemUsIHhmZXItPmZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckNyZWF0ZUhhbmRsZShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBJMkNfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICAvKiBaZXJvIGhhbmRsZS4gKi8KKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOworCisgICAgLyogU2V0IGNhbGxiYWNrIGFuZCB1c2VyRGF0YS4gKi8KKyAgICBoYW5kbGUtPmNvbXBsZXRpb25DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGhhbmRsZS0+dXNlckRhdGEgPSB1c2VyRGF0YTsKKworICAgIC8qIFNhdmUgdGhlIGNvbnRleHQgaW4gZ2xvYmFsIHZhcmlhYmxlcyB0byBzdXBwb3J0IHRoZSBkb3VibGUgd2VhayBtZWNoYW5pc20uICovCisgICAgc19pMmNIYW5kbGVbaW5zdGFuY2VdID0gaGFuZGxlOworCisgICAgLyogU2F2ZSBtYXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIuICovCisgICAgc19pMmNNYXN0ZXJJc3IgPSBJMkNfTWFzdGVyVHJhbnNmZXJIYW5kbGVJUlE7CisKKyAgICAvKiBFbmFibGUgTlZJQyBpbnRlcnJ1cHQuICovCisgICAgRW5hYmxlSVJRKHNfaTJjSXJxc1tpbnN0YW5jZV0pOworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgKnhmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHhmZXIpOworCisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgLyogQ2hlY2sgaWYgdGhlIEkyQyBidXMgaXMgaWRsZSAtIGlmIG5vdCByZXR1cm4gYnVzeSBzdGF0dXMuICovCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgIT0ga0lkbGVTdGF0ZSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX0J1c3k7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFN0YXJ0IHVwIHRoZSBtYXN0ZXIgdHJhbnNmZXIgc3RhdGUgbWFjaGluZS4gKi8KKyAgICAgICAgcmVzdWx0ID0gSTJDX0luaXRUcmFuc2ZlclN0YXRlTWFjaGluZShiYXNlLCBoYW5kbGUsIHhmZXIpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBFbmFibGUgdGhlIEkyQyBpbnRlcnJ1cHRzLiAqLworICAgICAgICAgICAgSTJDX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJMkNfTWFzdGVyVHJhbnNmZXJBYm9ydChJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCBidWlsZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdC4gKi8KKyAgICBJMkNfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworCisgICAgLyogUmVzZXQgdGhlIHN0YXRlIHRvIGlkbGUuICovCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtJZGxlU3RhdGU7CisKKyAgICAvKiBTZW5kIFNUT1Agc2lnbmFsLiAqLworICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgeworICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9NU1RfTUFTSyB8IEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisgICAgICAgIGR1bW15ID0gYmFzZS0+RDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisgICAgICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX01TVF9NQVNLIHwgSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKyAgICB9Cit9CisKK3N0YXR1c190IEkyQ19NYXN0ZXJUcmFuc2ZlckdldENvdW50KEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsIHNpemVfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICBpZiAoIWNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgICpjb3VudCA9IGhhbmRsZS0+dHJhbnNmZXJTaXplIC0gaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3ZvaWQgSTJDX01hc3RlclRyYW5zZmVySGFuZGxlSVJRKEkyQ19UeXBlICpiYXNlLCB2b2lkICppMmNIYW5kbGUpCit7CisgICAgYXNzZXJ0KGkyY0hhbmRsZSk7CisKKyAgICBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUgPSAoaTJjX21hc3Rlcl9oYW5kbGVfdCAqKWkyY0hhbmRsZTsKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgYm9vbCBpc0RvbmU7CisKKyAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuICovCisgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAvKiBDaGVjayB0cmFuc2ZlciBjb21wbGV0ZSBmbGFnLiAqLworICAgIHJlc3VsdCA9IEkyQ19NYXN0ZXJUcmFuc2ZlclJ1blN0YXRlTWFjaGluZShiYXNlLCBoYW5kbGUsICZpc0RvbmUpOworCisgICAgaWYgKGlzRG9uZSB8fCByZXN1bHQpCisgICAgeworICAgICAgICAvKiBTZW5kIHN0b3AgY29tbWFuZCBpZiB0cmFuc2ZlciBkb25lIG9yIHJlY2VpdmVkIE5hay4gKi8KKyAgICAgICAgaWYgKCghKGhhbmRsZS0+dHJhbnNmZXIuZmxhZ3MgJiBrSTJDX1RyYW5zZmVyTm9TdG9wRmxhZykpIHx8IChyZXN1bHQgPT0ga1N0YXR1c19JMkNfTmFrKSB8fAorICAgICAgICAgICAgKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19BZGRyX05haykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVuc3VyZSBzdG9wIGNvbW1hbmQgaXMgYSBuZWVkLiAqLworICAgICAgICAgICAgaWYgKChiYXNlLT5DMSAmIEkyQ19DMV9NU1RfTUFTSykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKEkyQ19NYXN0ZXJTdG9wKGJhc2UpICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfSTJDX1RpbWVvdXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogUmVzdG9yZSBoYW5kbGUgdG8gaWRsZSBzdGF0ZS4gKi8KKyAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtJZGxlU3RhdGU7CisKKyAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHQuICovCisgICAgICAgIEkyQ19EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrSTJDX0dsb2JhbEludGVycnVwdEVuYWJsZSk7CisKKyAgICAgICAgLyogQ2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYWZ0ZXIgdGhlIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQuICovCisgICAgICAgIGlmIChoYW5kbGUtPmNvbXBsZXRpb25DYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2soYmFzZSwgaGFuZGxlLCByZXN1bHQsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEkyQ19TbGF2ZUluaXQoSTJDX1R5cGUgKmJhc2UsIGNvbnN0IGkyY19zbGF2ZV9jb25maWdfdCAqc2xhdmVDb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIGFzc2VydChzbGF2ZUNvbmZpZyk7CisKKyAgICB1aW50OF90IHRtcFJlZzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2kyY0Nsb2Nrc1tJMkNfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIFJlc2V0IHRoZSBtb2R1bGUuICovCisgICAgYmFzZS0+QTEgPSAwOworICAgIGJhc2UtPkYgPSAwOworICAgIGJhc2UtPkMxID0gMDsKKyAgICBiYXNlLT5TID0gMHhGRlU7CisgICAgYmFzZS0+QzIgPSAwOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIGJhc2UtPkZMVCA9IDB4NTBVOworI2VsaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUCisgICAgYmFzZS0+RkxUID0gMHg0MFU7CisjZW5kaWYKKyAgICBiYXNlLT5SQSA9IDA7CisKKyAgICAvKiBDb25maWd1cmUgYWRkcmVzc2luZyBtb2RlLiAqLworICAgIHN3aXRjaCAoc2xhdmVDb25maWctPmFkZHJlc3NpbmdNb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBrSTJDX0FkZHJlc3M3Yml0OgorICAgICAgICAgICAgYmFzZS0+QTEgPSAoKHVpbnQzMl90KShzbGF2ZUNvbmZpZy0+c2xhdmVBZGRyZXNzKSkgPDwgMVU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtJMkNfUmFuZ2VNYXRjaDoKKyAgICAgICAgICAgIGFzc2VydChzbGF2ZUNvbmZpZy0+c2xhdmVBZGRyZXNzIDwgc2xhdmVDb25maWctPnVwcGVyQWRkcmVzcyk7CisgICAgICAgICAgICBiYXNlLT5BMSA9ICgodWludDMyX3QpKHNsYXZlQ29uZmlnLT5zbGF2ZUFkZHJlc3MpKSA8PCAxVTsKKyAgICAgICAgICAgIGJhc2UtPlJBID0gKCh1aW50MzJfdCkoc2xhdmVDb25maWctPnVwcGVyQWRkcmVzcykpIDw8IDFVOworICAgICAgICAgICAgYmFzZS0+QzIgfD0gSTJDX0MyX1JNRU5fTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBDb25maWd1cmUgbG93IHBvd2VyIHdha2UgdXAgZmVhdHVyZS4gKi8KKyAgICB0bXBSZWcgPSBiYXNlLT5DMTsKKyAgICB0bXBSZWcgJj0gfkkyQ19DMV9XVUVOX01BU0s7CisgICAgYmFzZS0+QzEgPSB0bXBSZWcgfCBJMkNfQzFfV1VFTihzbGF2ZUNvbmZpZy0+ZW5hYmxlV2FrZVVwKSB8IEkyQ19DMV9JSUNFTihzbGF2ZUNvbmZpZy0+ZW5hYmxlU2xhdmUpOworCisgICAgLyogQ29uZmlndXJlIGdlbmVyYWwgY2FsbCAmIGJhdWQgcmF0ZSBjb250cm9sLiAqLworICAgIHRtcFJlZyA9IGJhc2UtPkMyOworICAgIHRtcFJlZyAmPSB+KEkyQ19DMl9TQlJDX01BU0sgfCBJMkNfQzJfR0NBRU5fTUFTSyk7CisgICAgdG1wUmVnIHw9IEkyQ19DMl9TQlJDKHNsYXZlQ29uZmlnLT5lbmFibGVCYXVkUmF0ZUN0bCkgfCBJMkNfQzJfR0NBRU4oc2xhdmVDb25maWctPmVuYWJsZUdlbmVyYWxDYWxsKTsKKyAgICBiYXNlLT5DMiA9IHRtcFJlZzsKKworLyogRW5hYmxlL0Rpc2FibGUgZG91YmxlIGJ1ZmZlcmluZy4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUKKyAgICB0bXBSZWcgPSBiYXNlLT5TMiAmICh+STJDX1MyX0RGRU5fTUFTSyk7CisgICAgYmFzZS0+UzIgPSB0bXBSZWcgfCBJMkNfUzJfREZFTihzbGF2ZUNvbmZpZy0+ZW5hYmxlRG91YmxlQnVmZmVyaW5nKTsKKyNlbmRpZgorCisgICAgLyogU2V0IGhvbGQgdGltZS4gKi8KKyAgICBJMkNfU2V0SG9sZFRpbWUoYmFzZSwgc2xhdmVDb25maWctPnNjbFN0b3BIb2xkVGltZV9ucywgc3JjQ2xvY2tfSHopOworfQorCit2b2lkIEkyQ19TbGF2ZURlaW5pdChJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBEaXNhYmxlIEkyQyBtb2R1bGUuICovCisgICAgSTJDX0VuYWJsZShiYXNlLCBmYWxzZSk7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogRGlzYWJsZSBJMkMgY2xvY2suICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfaTJjQ2xvY2tzW0kyQ19HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIEkyQ19TbGF2ZUdldERlZmF1bHRDb25maWcoaTJjX3NsYXZlX2NvbmZpZ190ICpzbGF2ZUNvbmZpZykKK3sKKyAgICBhc3NlcnQoc2xhdmVDb25maWcpOworCisgICAgLyogQnkgZGVmYXVsdCBzbGF2ZSBpcyBhZGRyZXNzZWQgd2l0aCA3LWJpdCBhZGRyZXNzLiAqLworICAgIHNsYXZlQ29uZmlnLT5hZGRyZXNzaW5nTW9kZSA9IGtJMkNfQWRkcmVzczdiaXQ7CisKKyAgICAvKiBHZW5lcmFsIGNhbGwgbW9kZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiAqLworICAgIHNsYXZlQ29uZmlnLT5lbmFibGVHZW5lcmFsQ2FsbCA9IGZhbHNlOworCisgICAgLyogU2xhdmUgYWRkcmVzcyBtYXRjaCB3YWtpbmcgdXAgTUNVIGZyb20gbG93IHBvd2VyIG1vZGUgaXMgZGlzYWJsZWQuICovCisgICAgc2xhdmVDb25maWctPmVuYWJsZVdha2VVcCA9IGZhbHNlOworCisgICAgLyogSW5kZXBlbmRlbnQgc2xhdmUgbW9kZSBiYXVkIHJhdGUgYXQgbWF4aW11bSBmcmVxdWVuY3kgaXMgZGlzYWJsZWQuICovCisgICAgc2xhdmVDb25maWctPmVuYWJsZUJhdWRSYXRlQ3RsID0gZmFsc2U7CisKKy8qIERlZmF1bHQgZW5hYmxlIGRvdWJsZSBidWZmZXJpbmcuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgc2xhdmVDb25maWctPmVuYWJsZURvdWJsZUJ1ZmZlcmluZyA9IHRydWU7CisjZW5kaWYKKworICAgIC8qIFNldCBkZWZhdWx0IFNDTCBzdG9wIGhvbGQgdGltZSB0byA0dXMgd2hpY2ggaXMgbWluaW11bSByZXF1aXJlbWVudCBpbiBJMkMgc3BlYy4gKi8KKyAgICBzbGF2ZUNvbmZpZy0+c2NsU3RvcEhvbGRUaW1lX25zID0gNDAwMDsKKworICAgIC8qIEVuYWJsZSB0aGUgSTJDIHBlcmlwaGVyYWwuICovCisgICAgc2xhdmVDb25maWctPmVuYWJsZVNsYXZlID0gdHJ1ZTsKK30KKworc3RhdHVzX3QgSTJDX1NsYXZlV3JpdGVCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqdHhCdWZmLCBzaXplX3QgdHhTaXplKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB2b2xhdGlsZSB1aW50OF90IGR1bW15ID0gMDsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIGJ1aWxkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIC8qIENoZWNrIHN0YXJ0IGZsYWcuICovCisgICAgd2hpbGUgKCEoYmFzZS0+RkxUICYgSTJDX0ZMVF9TVEFSVEZfTUFTSykpCisgICAgeworICAgIH0KKyAgICAvKiBDbGVhciBTVEFSVEYgZmxhZy4gKi8KKyAgICBiYXNlLT5GTFQgfD0gSTJDX0ZMVF9TVEFSVEZfTUFTSzsKKyAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCisKKyAgICAvKiBXYWl0IGZvciBhZGRyZXNzIG1hdGNoIGZsYWcuICovCisgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfQWRkcmVzc01hdGNoRmxhZykpCisgICAgeworICAgIH0KKworICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSBidXMuICovCisgICAgZHVtbXkgPSBiYXNlLT5EOworCisgICAgcmVzdWx0ID0gSTJDX01hc3RlcldyaXRlQmxvY2tpbmcoYmFzZSwgdHhCdWZmLCB0eFNpemUsIGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZyk7CisKKyAgICAvKiBTd2l0Y2ggdG8gcmVjZWl2ZSBtb2RlLiAqLworICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKworICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSBidXMuICovCisgICAgZHVtbXkgPSBiYXNlLT5EOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJMkNfU2xhdmVSZWFkQmxvY2tpbmcoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKnJ4QnVmZiwgc2l6ZV90IHJ4U2l6ZSkKK3sKKyAgICB2b2xhdGlsZSB1aW50OF90IGR1bW15ID0gMDsKKworICAgIC8qIEFkZCB0aGlzIHRvIGF2b2lkIGJ1aWxkIHdhcm5pbmcuICovCisgICAgZHVtbXkrKzsKKworLyogV2FpdCB1bnRpbCBhZGRyZXNzIG1hdGNoLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIC8qIENoZWNrIHN0YXJ0IGZsYWcuICovCisgICAgd2hpbGUgKCEoYmFzZS0+RkxUICYgSTJDX0ZMVF9TVEFSVEZfTUFTSykpCisgICAgeworICAgIH0KKyAgICAvKiBDbGVhciBTVEFSVEYgZmxhZy4gKi8KKyAgICBiYXNlLT5GTFQgfD0gSTJDX0ZMVF9TVEFSVEZfTUFTSzsKKyAgICAvKiBDbGVhciB0aGUgSUlDSUYgZmxhZy4gKi8KKyAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUICovCisKKyAgICAvKiBXYWl0IGZvciBhZGRyZXNzIG1hdGNoIGFuZCBpbnQgcGVuZGluZyBmbGFnLiAqLworICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0FkZHJlc3NNYXRjaEZsYWcpKQorICAgIHsKKyAgICB9CisgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBSZWFkIGR1bW15IHRvIHJlbGVhc2UgYnVzLiAqLworICAgIGR1bW15ID0gYmFzZS0+RDsKKworICAgIC8qIENsZWFyIHRoZSBJSUNJRiBmbGFnLiAqLworICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgLyogU2V0dXAgdGhlIEkyQyBwZXJpcGhlcmFsIHRvIHJlY2VpdmUgZGF0YS4gKi8KKyAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9UWF9NQVNLKTsKKworICAgIHdoaWxlIChyeFNpemUtLSkKKyAgICB7CisgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZS4gKi8KKyAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2xlYXIgdGhlIElJQ0lGIGZsYWcuICovCisgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgICAgIC8qIFJlYWQgZnJvbSB0aGUgZGF0YSByZWdpc3Rlci4gKi8KKyAgICAgICAgKnJ4QnVmZisrID0gYmFzZS0+RDsKKyAgICB9Cit9CisKK3ZvaWQgSTJDX1NsYXZlVHJhbnNmZXJDcmVhdGVIYW5kbGUoSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IEkyQ19HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIC8qIFplcm8gaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICAvKiBTZXQgY2FsbGJhY2sgYW5kIHVzZXJEYXRhLiAqLworICAgIGhhbmRsZS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBoYW5kbGUtPnVzZXJEYXRhID0gdXNlckRhdGE7CisKKyAgICAvKiBTYXZlIHRoZSBjb250ZXh0IGluIGdsb2JhbCB2YXJpYWJsZXMgdG8gc3VwcG9ydCB0aGUgZG91YmxlIHdlYWsgbWVjaGFuaXNtLiAqLworICAgIHNfaTJjSGFuZGxlW2luc3RhbmNlXSA9IGhhbmRsZTsKKworICAgIC8qIFNhdmUgc2xhdmUgaW50ZXJydXB0IGhhbmRsZXIuICovCisgICAgc19pMmNTbGF2ZUlzciA9IEkyQ19TbGF2ZVRyYW5zZmVySGFuZGxlSVJROworCisgICAgLyogRW5hYmxlIE5WSUMgaW50ZXJydXB0LiAqLworICAgIEVuYWJsZUlSUShzX2kyY0lycXNbaW5zdGFuY2VdKTsKK30KKworc3RhdHVzX3QgSTJDX1NsYXZlVHJhbnNmZXJOb25CbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgaTJjX3NsYXZlX2hhbmRsZV90ICpoYW5kbGUsIHVpbnQzMl90IGV2ZW50TWFzaykKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIC8qIENoZWNrIGlmIHRoZSBJMkMgYnVzIGlzIGlkbGUgLSBpZiBub3QgcmV0dXJuIGJ1c3kgc3RhdHVzLiAqLworICAgIGlmIChoYW5kbGUtPmlzQnVzeSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0kyQ19CdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEaXNhYmxlIExQSTJDIElSUSBzb3VyY2VzIHdoaWxlIHdlIGNvbmZpZ3VyZSBzdHVmZi4gKi8KKyAgICAgICAgSTJDX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtJcnFGbGFncyk7CisKKyAgICAgICAgLyogQ2xlYXIgdHJhbnNmZXIgaW4gaGFuZGxlLiAqLworICAgICAgICBtZW1zZXQoJmhhbmRsZS0+dHJhbnNmZXIsIDAsIHNpemVvZihoYW5kbGUtPnRyYW5zZmVyKSk7CisKKyAgICAgICAgLyogUmVjb3JkIHRoYXQgd2UncmUgYnVzeS4gKi8KKyAgICAgICAgaGFuZGxlLT5pc0J1c3kgPSB0cnVlOworCisgICAgICAgIC8qIFNldCB1cCBldmVudCBtYXNrLiB0eCBhbmQgcnggYXJlIGFsd2F5cyBlbmFibGVkLiAqLworICAgICAgICBoYW5kbGUtPmV2ZW50TWFzayA9IGV2ZW50TWFzayB8IGtJMkNfU2xhdmVUcmFuc21pdEV2ZW50IHwga0kyQ19TbGF2ZVJlY2VpdmVFdmVudCB8IGtJMkNfU2xhdmVHZW5hcmFsY2FsbEV2ZW50OworCisgICAgICAgIC8qIENsZWFyIGFsbCBmbGFncy4gKi8KKyAgICAgICAgSTJDX1NsYXZlQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrQ2xlYXJGbGFncyk7CisKKyAgICAgICAgLyogRW5hYmxlIEkyQyBpbnRlcm5hbCBJUlEgc291cmNlcy4gTlZJQyBJUlEgd2FzIGVuYWJsZWQgaW4gQ3JlYXRlSGFuZGxlKCkgKi8KKyAgICAgICAgSTJDX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0lycUZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIEkyQ19TbGF2ZVRyYW5zZmVyQWJvcnQoSTJDX1R5cGUgKmJhc2UsIGkyY19zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgaWYgKGhhbmRsZS0+aXNCdXN5KQorICAgIHsKKyAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiAqLworICAgICAgICBJMkNfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0lycUZsYWdzKTsKKworICAgICAgICAvKiBSZXNldCB0cmFuc2ZlciBpbmZvLiAqLworICAgICAgICBtZW1zZXQoJmhhbmRsZS0+dHJhbnNmZXIsIDAsIHNpemVvZihoYW5kbGUtPnRyYW5zZmVyKSk7CisKKyAgICAgICAgLyogUmVzZXQgdGhlIHN0YXRlIHRvIGlkbGUuICovCisgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gZmFsc2U7CisgICAgfQorfQorCitzdGF0dXNfdCBJMkNfU2xhdmVUcmFuc2ZlckdldENvdW50KEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGlmICghY291bnQpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogQ2F0Y2ggd2hlbiB0aGVyZSBpcyBub3QgYW4gYWN0aXZlIHRyYW5zZmVyLiAqLworICAgIGlmICghaGFuZGxlLT5pc0J1c3kpCisgICAgeworICAgICAgICAqY291bnQgPSAwOworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICAvKiBGb3IgYW4gYWN0aXZlIHRyYW5zZmVyLCBqdXN0IHJldHVybiB0aGUgY291bnQgZnJvbSB0aGUgaGFuZGxlLiAqLworICAgICpjb3VudCA9IGhhbmRsZS0+dHJhbnNmZXIudHJhbnNmZXJyZWRDb3VudDsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3ZvaWQgSTJDX1NsYXZlVHJhbnNmZXJIYW5kbGVJUlEoSTJDX1R5cGUgKmJhc2UsIHZvaWQgKmkyY0hhbmRsZSkKK3sKKyAgICBhc3NlcnQoaTJjSGFuZGxlKTsKKworICAgIHVpbnQxNl90IHN0YXR1czsKKyAgICBib29sIGRvVHJhbnNtaXQgPSBmYWxzZTsKKyAgICBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSA9IChpMmNfc2xhdmVfaGFuZGxlX3QgKilpMmNIYW5kbGU7CisgICAgaTJjX3NsYXZlX3RyYW5zZmVyX3QgKnhmZXI7CisgICAgdm9sYXRpbGUgdWludDhfdCBkdW1teSA9IDA7CisKKyAgICAvKiBBZGQgdGhpcyB0byBhdm9pZCBidWlsZCB3YXJuaW5nLiAqLworICAgIGR1bW15Kys7CisKKyAgICBzdGF0dXMgPSBJMkNfU2xhdmVHZXRTdGF0dXNGbGFncyhiYXNlKTsKKyAgICB4ZmVyID0gJihoYW5kbGUtPnRyYW5zZmVyKTsKKworI2lmZGVmIEkyQ19IQVNfU1RPUF9ERVRFQ1QKKyAgICAvKiBDaGVjayBzdG9wIGZsYWcuICovCisgICAgaWYgKHN0YXR1cyAmIGtJMkNfU3RvcERldGVjdEZsYWcpCisgICAgeworICAgICAgICBJMkNfTWFzdGVyQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrSTJDX1N0b3BEZXRlY3RGbGFnKTsKKworICAgICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcuICovCisgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworCisgICAgICAgIC8qIENhbGwgc2xhdmUgY2FsbGJhY2sgaWYgdGhpcyBpcyB0aGUgU1RPUCBvZiB0aGUgdHJhbnNmZXIuICovCisgICAgICAgIGlmIChoYW5kbGUtPmlzQnVzeSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50OworICAgICAgICAgICAgeGZlci0+Y29tcGxldGlvblN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICAgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgoaGFuZGxlLT5ldmVudE1hc2sgJiB4ZmVyLT5ldmVudCkgJiYgKGhhbmRsZS0+Y2FsbGJhY2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShzdGF0dXMgJiBrSTJDX0FkZHJlc3NNYXRjaEZsYWcpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogSTJDX0hBU19TVE9QX0RFVEVDVCAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAgLyogQ2hlY2sgc3RhcnQgZmxhZy4gKi8KKyAgICBpZiAoc3RhdHVzICYga0kyQ19TdGFydERldGVjdEZsYWcpCisgICAgeworICAgICAgICBJMkNfTWFzdGVyQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrSTJDX1N0YXJ0RGV0ZWN0RmxhZyk7CisKKyAgICAgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICB4ZmVyLT5ldmVudCA9IGtJMkNfU2xhdmVTdGFydEV2ZW50OworCisgICAgICAgIGlmICgoaGFuZGxlLT5ldmVudE1hc2sgJiB4ZmVyLT5ldmVudCkgJiYgKGhhbmRsZS0+Y2FsbGJhY2spKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIHhmZXIsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoc3RhdHVzICYga0kyQ19BZGRyZXNzTWF0Y2hGbGFnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgKi8KKworICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZy4gKi8KKyAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgIC8qIENoZWNrIE5BSyAqLworICAgIGlmIChzdGF0dXMgJiBrSTJDX1JlY2VpdmVOYWtGbGFnKQorICAgIHsKKyAgICAgICAgLyogU2V0IHJlY2VpdmUgbW9kZS4gKi8KKyAgICAgICAgYmFzZS0+QzEgJj0gfihJMkNfQzFfVFhfTUFTSyB8IEkyQ19DMV9UWEFLX01BU0spOworCisgICAgICAgIC8qIFJlYWQgZHVtbXkuICovCisgICAgICAgIGR1bW15ID0gYmFzZS0+RDsKKworICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICB4ZmVyLT5ldmVudCA9IGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQ7CisgICAgICAgICAgICB4ZmVyLT5jb21wbGV0aW9uU3RhdHVzID0ga1N0YXR1c19JMkNfTmFrOworICAgICAgICAgICAgaGFuZGxlLT5pc0J1c3kgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKChoYW5kbGUtPmV2ZW50TWFzayAmIHhmZXItPmV2ZW50KSAmJiAoaGFuZGxlLT5jYWxsYmFjaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCB4ZmVyLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZm5kZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50OworICAgICAgICAgICAgeGZlci0+Y29tcGxldGlvblN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICAgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgoaGFuZGxlLT5ldmVudE1hc2sgJiB4ZmVyLT5ldmVudCkgJiYgKGhhbmRsZS0+Y2FsbGJhY2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogIUZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1Qgb3IgIUZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9ERVRFQ1QgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBDaGVjayBhZGRyZXNzIG1hdGNoLiAqLworICAgIGVsc2UgaWYgKHN0YXR1cyAmIGtJMkNfQWRkcmVzc01hdGNoRmxhZykKKyAgICB7CisgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gdHJ1ZTsKKyAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlQWRkcmVzc01hdGNoRXZlbnQ7CisKKyAgICAgICAgLyogU2xhdmUgdHJhbnNtaXQsIG1hc3RlciByZWFkaW5nIGZyb20gc2xhdmUuICovCisgICAgICAgIGlmIChzdGF0dXMgJiBrSTJDX1RyYW5zZmVyRGlyZWN0aW9uRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hhbmdlIGRpcmVjdGlvbiB0byBzZW5kIGRhdGEuICovCisgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhfTUFTSzsKKworICAgICAgICAgICAgZG9UcmFuc21pdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTbGF2ZSByZWNlaXZlLCBtYXN0ZXIgd3JpdGluZyB0byBzbGF2ZS4gKi8KKyAgICAgICAgICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKworICAgICAgICAgICAgLyogUmVhZCBkdW1teSB0byByZWxlYXNlIHRoZSBidXMuICovCisgICAgICAgICAgICBkdW1teSA9IGJhc2UtPkQ7CisKKyAgICAgICAgICAgIGlmIChkdW1teSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHhmZXItPmV2ZW50ID0ga0kyQ19TbGF2ZUdlbmFyYWxjYWxsRXZlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGhhbmRsZS0+ZXZlbnRNYXNrICYgeGZlci0+ZXZlbnQpICYmIChoYW5kbGUtPmNhbGxiYWNrKSkKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCB4ZmVyLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBDaGVjayB0cmFuc2ZlciBjb21wbGV0ZSBmbGFnLiAqLworICAgIGVsc2UgaWYgKHN0YXR1cyAmIGtJMkNfVHJhbnNmZXJDb21wbGV0ZUZsYWcpCisgICAgeworICAgICAgICAvKiBTbGF2ZSB0cmFuc21pdCwgbWFzdGVyIHJlYWRpbmcgZnJvbSBzbGF2ZS4gKi8KKyAgICAgICAgaWYgKHN0YXR1cyAmIGtJMkNfVHJhbnNmZXJEaXJlY3Rpb25GbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBkb1RyYW5zbWl0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dCBvZiBkYXRhLCBpbnZva2UgY2FsbGJhY2sgdG8gZ2V0IG1vcmUuICovCisgICAgICAgICAgICBpZiAoKCF4ZmVyLT5kYXRhKSB8fCAoIXhmZXItPmRhdGFTaXplKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4ZmVyLT5ldmVudCA9IGtJMkNfU2xhdmVSZWNlaXZlRXZlbnQ7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgeGZlciwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHRyYW5zZmVycmVkIGNvdW50IG5vdyB0aGF0IHdlIGhhdmUgYSBuZXcgYnVmZmVyLiAqLworICAgICAgICAgICAgICAgIHhmZXItPnRyYW5zZmVycmVkQ291bnQgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTbGF2ZSByZWNlaXZlLCBtYXN0ZXIgd3JpdGluZyB0byBzbGF2ZS4gKi8KKyAgICAgICAgICAgIHVpbnQ4X3QgZGF0YSA9IGJhc2UtPkQ7CisKKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICAqaGFuZGxlLT50cmFuc2Zlci5kYXRhKysgPSBkYXRhOworICAgICAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUtLTsKKyAgICAgICAgICAgICAgICB4ZmVyLT50cmFuc2ZlcnJlZENvdW50Kys7CisgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplKQorICAgICAgICAgICAgICAgIHsKKyNpZm5kZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgICAgICAgICAgICAgICAgICB4ZmVyLT5ldmVudCA9IGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQ7CisgICAgICAgICAgICAgICAgICAgIHhmZXItPmNvbXBsZXRpb25TdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgLyogUHJvY2VlZCByZWNlaXZlIGNvbXBsZXRlIGV2ZW50LiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKGhhbmRsZS0+ZXZlbnRNYXNrICYgeGZlci0+ZXZlbnQpICYmIChoYW5kbGUtPmNhbGxiYWNrKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCB4ZmVyLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qICFGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUIG9yICFGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSBidXMuICovCisgICAgICAgIGR1bW15ID0gYmFzZS0+RDsKKyAgICB9CisKKyAgICAvKiBTZW5kIGRhdGEgaWYgdGhlcmUgaXMgdGhlIG5lZWQuICovCisgICAgaWYgKGRvVHJhbnNtaXQpCisgICAgeworICAgICAgICAvKiBJZiB3ZSdyZSBvdXQgb2YgZGF0YSwgaW52b2tlIGNhbGxiYWNrIHRvIGdldCBtb3JlLiAqLworICAgICAgICBpZiAoKCF4ZmVyLT5kYXRhKSB8fCAoIXhmZXItPmRhdGFTaXplKSkKKyAgICAgICAgeworICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlVHJhbnNtaXRFdmVudDsKKworICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCB4ZmVyLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHRyYW5zZmVycmVkIGNvdW50IG5vdyB0aGF0IHdlIGhhdmUgYSBuZXcgYnVmZmVyLiAqLworICAgICAgICAgICAgeGZlci0+dHJhbnNmZXJyZWRDb3VudCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2VuZCBkYXRhLiAqLworICAgICAgICAgICAgYmFzZS0+RCA9ICpoYW5kbGUtPnRyYW5zZmVyLmRhdGErKzsKKyAgICAgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUtLTsKKyAgICAgICAgICAgIHhmZXItPnRyYW5zZmVycmVkQ291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFN3aXRjaCB0byByZWNlaXZlIG1vZGUuICovCisgICAgICAgICAgICBiYXNlLT5DMSAmPSB+KEkyQ19DMV9UWF9NQVNLIHwgSTJDX0MxX1RYQUtfTUFTSyk7CisKKyAgICAgICAgICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSBidXMuICovCisgICAgICAgICAgICBkdW1teSA9IGJhc2UtPkQ7CisKKyNpZm5kZWYgSTJDX0hBU19TVE9QX0RFVEVDVAorICAgICAgICAgICAgeGZlci0+ZXZlbnQgPSBrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50OworICAgICAgICAgICAgeGZlci0+Y29tcGxldGlvblN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICAgICAgICAgIGhhbmRsZS0+aXNCdXN5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8qIFByb2NlZWQgdHhkb25lIGV2ZW50LiAqLworICAgICAgICAgICAgaWYgKChoYW5kbGUtPmV2ZW50TWFzayAmIHhmZXItPmV2ZW50KSAmJiAoaGFuZGxlLT5jYWxsYmFjaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCB4ZmVyLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiAhRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCBvciAhRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCAqLworICAgICAgICB9CisgICAgfQorfQorCisjaWYgZGVmaW5lZChJMkMwKQordm9pZCBJMkMwX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBJMkNfVHJhbnNmZXJDb21tb25JUlFIYW5kbGVyKEkyQzAsIHNfaTJjSGFuZGxlWzBdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMxKQordm9pZCBJMkMxX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBJMkNfVHJhbnNmZXJDb21tb25JUlFIYW5kbGVyKEkyQzEsIHNfaTJjSGFuZGxlWzFdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMyKQordm9pZCBJMkMyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBJMkNfVHJhbnNmZXJDb21tb25JUlFIYW5kbGVyKEkyQzIsIHNfaTJjSGFuZGxlWzJdKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChJMkMzKQordm9pZCBJMkMzX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBJMkNfVHJhbnNmZXJDb21tb25JUlFIYW5kbGVyKEkyQzMsIHNfaTJjSGFuZGxlWzNdKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTVmZDFkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjLmgKQEAgLTAsMCArMSw3OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX0kyQ19IXworI2RlZmluZSBfRlNMX0kyQ19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGkyY19kcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBJMkMgZHJpdmVyIHZlcnNpb24gMi4wLjMuICovCisjZGVmaW5lIEZTTF9JMkNfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAzKSkKKy8qQH0qLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCB8fCBcCisgICAgIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkKKyNkZWZpbmUgSTJDX0hBU19TVE9QX0RFVEVDVAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgLyBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUICovCisKKy8qISBAYnJpZWYgIEkyQyBzdGF0dXMgcmV0dXJuIGNvZGVzLiAqLworZW51bSBfaTJjX3N0YXR1cworeworICAgIGtTdGF0dXNfSTJDX0J1c3kgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfSTJDLCAwKSwgICAgICAgICAgICAvKiE8IEkyQyBpcyBidXN5IHdpdGggY3VycmVudCB0cmFuc2Zlci4gKi8KKyAgICBrU3RhdHVzX0kyQ19JZGxlID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0kyQywgMSksICAgICAgICAgICAgLyohPCBCdXMgaXMgSWRsZS4gKi8KKyAgICBrU3RhdHVzX0kyQ19OYWsgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfSTJDLCAyKSwgICAgICAgICAgICAgLyohPCBOQUsgcmVjZWl2ZWQgZHVyaW5nIHRyYW5zZmVyLiAqLworICAgIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9JMkMsIDMpLCAvKiE8IEFyYml0cmF0aW9uIGxvc3QgZHVyaW5nIHRyYW5zZmVyLiAqLworICAgIGtTdGF0dXNfSTJDX1RpbWVvdXQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfSTJDLCA0KSwgICAgICAgICAvKiE8IFdhaXQgZXZlbnQgdGltZW91dC4gKi8KKyAgICBrU3RhdHVzX0kyQ19BZGRyX05hayA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9JMkMsIDUpLCAgICAgICAgLyohPCBOQUsgcmVjZWl2ZWQgZHVyaW5nIHRoZSBhZGRyZXNzIHByb2JlLiAqLworfTsKKworLyohCisgKiBAYnJpZWYgSTJDIHBlcmlwaGVyYWwgZmxhZ3MKKyAqCisgKiBUaGUgZm9sbG93aW5nIHN0YXR1cyByZWdpc3RlciBmbGFncyBjYW4gYmUgY2xlYXJlZDoKKyAqIC0gI2tJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZworICogLSAja0kyQ19JbnRQZW5kaW5nRmxhZworICogLSAja0kyQ19TdGFydERldGVjdEZsYWcKKyAqIC0gI2tJMkNfU3RvcERldGVjdEZsYWcKKyAqCisgKiBAbm90ZSBUaGVzZSBlbnVtZXJhdGlvbnMgYXJlIG1lYW50IHRvIGJlIE9SJ2QgdG9nZXRoZXIgdG8gZm9ybSBhIGJpdCBtYXNrLgorICoKKyAqLworZW51bSBfaTJjX2ZsYWdzCit7CisgICAga0kyQ19SZWNlaXZlTmFrRmxhZyA9IEkyQ19TX1JYQUtfTUFTSywgICAgICAgLyohPCBJMkMgcmVjZWl2ZSBOQUsgZmxhZy4gKi8KKyAgICBrSTJDX0ludFBlbmRpbmdGbGFnID0gSTJDX1NfSUlDSUZfTUFTSywgICAgICAvKiE8IEkyQyBpbnRlcnJ1cHQgcGVuZGluZyBmbGFnLiAqLworICAgIGtJMkNfVHJhbnNmZXJEaXJlY3Rpb25GbGFnID0gSTJDX1NfU1JXX01BU0ssIC8qITwgSTJDIHRyYW5zZmVyIGRpcmVjdGlvbiBmbGFnLiAqLworICAgIGtJMkNfUmFuZ2VBZGRyZXNzTWF0Y2hGbGFnID0gSTJDX1NfUkFNX01BU0ssIC8qITwgSTJDIHJhbmdlIGFkZHJlc3MgbWF0Y2ggZmxhZy4gKi8KKyAgICBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcgPSBJMkNfU19BUkJMX01BU0ssICAvKiE8IEkyQyBhcmJpdHJhdGlvbiBsb3N0IGZsYWcuICovCisgICAga0kyQ19CdXNCdXN5RmxhZyA9IEkyQ19TX0JVU1lfTUFTSywgICAgICAgICAgLyohPCBJMkMgYnVzIGJ1c3kgZmxhZy4gKi8KKyAgICBrSTJDX0FkZHJlc3NNYXRjaEZsYWcgPSBJMkNfU19JQUFTX01BU0ssICAgICAvKiE8IEkyQyBhZGRyZXNzIG1hdGNoIGZsYWcuICovCisgICAga0kyQ19UcmFuc2ZlckNvbXBsZXRlRmxhZyA9IEkyQ19TX1RDRl9NQVNLLCAgLyohPCBJMkMgdHJhbnNmZXIgY29tcGxldGUgZmxhZy4gKi8KKyNpZmRlZiBJMkNfSEFTX1NUT1BfREVURUNUCisgICAga0kyQ19TdG9wRGV0ZWN0RmxhZyA9IEkyQ19GTFRfU1RPUEZfTUFTSyA8PCA4LCAvKiE8IEkyQyBzdG9wIGRldGVjdCBmbGFnLiAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgLyBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICBrSTJDX1N0YXJ0RGV0ZWN0RmxhZyA9IEkyQ19GTFRfU1RBUlRGX01BU0sgPDwgOCwgLyohPCBJMkMgc3RhcnQgZGV0ZWN0IGZsYWcuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QgKi8KK307CisKKy8qISBAYnJpZWYgSTJDIGZlYXR1cmUgaW50ZXJydXB0IHNvdXJjZS4gKi8KK2VudW0gX2kyY19pbnRlcnJ1cHRfZW5hYmxlCit7CisgICAga0kyQ19HbG9iYWxJbnRlcnJ1cHRFbmFibGUgPSBJMkNfQzFfSUlDSUVfTUFTSywgLyohPCBJMkMgZ2xvYmFsIGludGVycnVwdC4gKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGtJMkNfU3RvcERldGVjdEludGVycnVwdEVuYWJsZSA9IEkyQ19GTFRfU1RPUElFX01BU0ssIC8qITwgSTJDIHN0b3AgZGV0ZWN0IGludGVycnVwdC4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfREVURUNUICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RBUlRfU1RPUF9ERVRFQ1QKKyAgICBrSTJDX1N0YXJ0U3RvcERldGVjdEludGVycnVwdEVuYWJsZSA9IEkyQ19GTFRfU1NJRV9NQVNLLCAvKiE8IEkyQyBzdGFydCZzdG9wIGRldGVjdCBpbnRlcnJ1cHQuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCAqLworfTsKKworLyohIEBicmllZiBUaGUgZGlyZWN0aW9uIG9mIG1hc3RlciBhbmQgc2xhdmUgdHJhbnNmZXJzLiAqLwordHlwZWRlZiBlbnVtIF9pMmNfZGlyZWN0aW9uCit7CisgICAga0kyQ19Xcml0ZSA9IDB4MFUsIC8qITwgTWFzdGVyIHRyYW5zbWl0cyB0byB0aGUgc2xhdmUuICovCisgICAga0kyQ19SZWFkID0gMHgxVSwgIC8qITwgTWFzdGVyIHJlY2VpdmVzIGZyb20gdGhlIHNsYXZlLiAqLworfSBpMmNfZGlyZWN0aW9uX3Q7CisKKy8qISBAYnJpZWYgQWRkcmVzc2luZyBtb2RlLiAqLwordHlwZWRlZiBlbnVtIF9pMmNfc2xhdmVfYWRkcmVzc19tb2RlCit7CisgICAga0kyQ19BZGRyZXNzN2JpdCA9IDB4MFUsIC8qITwgNy1iaXQgYWRkcmVzc2luZyBtb2RlLiAqLworICAgIGtJMkNfUmFuZ2VNYXRjaCA9IDBYMlUsICAvKiE8IFJhbmdlIGFkZHJlc3MgbWF0Y2ggYWRkcmVzc2luZyBtb2RlLiAqLworfSBpMmNfc2xhdmVfYWRkcmVzc19tb2RlX3Q7CisKKy8qISBAYnJpZWYgSTJDIHRyYW5zZmVyIGNvbnRyb2wgZmxhZy4gKi8KK2VudW0gX2kyY19tYXN0ZXJfdHJhbnNmZXJfZmxhZ3MKK3sKKyAgICBrSTJDX1RyYW5zZmVyRGVmYXVsdEZsYWcgPSAweDBVLCAgICAgICAvKiE8IEEgdHJhbnNmZXIgc3RhcnRzIHdpdGggYSBzdGFydCBzaWduYWwsIHN0b3BzIHdpdGggYSBzdG9wIHNpZ25hbC4gKi8KKyAgICBrSTJDX1RyYW5zZmVyTm9TdGFydEZsYWcgPSAweDFVLCAgICAgICAvKiE8IEEgdHJhbnNmZXIgc3RhcnRzIHdpdGhvdXQgYSBzdGFydCBzaWduYWwuICovCisgICAga0kyQ19UcmFuc2ZlclJlcGVhdGVkU3RhcnRGbGFnID0gMHgyVSwgLyohPCBBIHRyYW5zZmVyIHN0YXJ0cyB3aXRoIGEgcmVwZWF0ZWQgc3RhcnQgc2lnbmFsLiAqLworICAgIGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnID0gMHg0VSwgICAgICAgIC8qITwgQSB0cmFuc2ZlciBlbmRzIHdpdGhvdXQgYSBzdG9wIHNpZ25hbC4gKi8KK307CisKKy8qIQorICogQGJyaWVmIFNldCBvZiBldmVudHMgc2VudCB0byB0aGUgY2FsbGJhY2sgZm9yIG5vbmJsb2NraW5nIHNsYXZlIHRyYW5zZmVycy4KKyAqCisgKiBUaGVzZSBldmVudCBlbnVtZXJhdGlvbnMgYXJlIHVzZWQgZm9yIHR3byByZWxhdGVkIHB1cnBvc2VzLiBGaXJzdCwgYSBiaXQgbWFzayBjcmVhdGVkIGJ5IE9SJ2luZyB0b2dldGhlcgorICogZXZlbnRzIGlzIHBhc3NlZCB0byBJMkNfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKCkgdG8gc3BlY2lmeSB3aGljaCBldmVudHMgdG8gZW5hYmxlLgorICogVGhlbiwgd2hlbiB0aGUgc2xhdmUgY2FsbGJhY2sgaXMgaW52b2tlZCwgaXQgaXMgcGFzc2VkIHRoZSBjdXJyZW50IGV2ZW50IHRocm91Z2ggaXRzIEBhIHRyYW5zZmVyCisgKiBwYXJhbWV0ZXIuCisgKgorICogQG5vdGUgVGhlc2UgZW51bWVyYXRpb25zIGFyZSBtZWFudCB0byBiZSBPUidkIHRvZ2V0aGVyIHRvIGZvcm0gYSBiaXQgbWFzayBvZiBldmVudHMuCisgKi8KK3R5cGVkZWYgZW51bSBfaTJjX3NsYXZlX3RyYW5zZmVyX2V2ZW50Cit7CisgICAga0kyQ19TbGF2ZUFkZHJlc3NNYXRjaEV2ZW50ID0gMHgwMVUsIC8qITwgUmVjZWl2ZWQgdGhlIHNsYXZlIGFkZHJlc3MgYWZ0ZXIgYSBzdGFydCBvciByZXBlYXRlZCBzdGFydC4gKi8KKyAgICBrSTJDX1NsYXZlVHJhbnNtaXRFdmVudCA9IDB4MDJVLCAgICAgLyohPCBBIGNhbGxiYWNrIGlzIHJlcXVlc3RlZCB0byBwcm92aWRlIGRhdGEgdG8gdHJhbnNtaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzbGF2ZS10cmFuc21pdHRlciByb2xlKS4gKi8KKyAgICBrSTJDX1NsYXZlUmVjZWl2ZUV2ZW50ID0gMHgwNFUsICAgICAgLyohPCBBIGNhbGxiYWNrIGlzIHJlcXVlc3RlZCB0byBwcm92aWRlIGEgYnVmZmVyIGluIHdoaWNoIHRvIHBsYWNlIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAoc2xhdmUtcmVjZWl2ZXIgcm9sZSkuICovCisgICAga0kyQ19TbGF2ZVRyYW5zbWl0QWNrRXZlbnQgPSAweDA4VSwgIC8qITwgQSBjYWxsYmFjayBuZWVkcyB0byBlaXRoZXIgdHJhbnNtaXQgYW4gQUNLIG9yIE5BQ0suICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAga0kyQ19TbGF2ZVN0YXJ0RXZlbnQgPSAweDEwVSwgLyohPCBBIHN0YXJ0L3JlcGVhdGVkIHN0YXJ0IHdhcyBkZXRlY3RlZC4gKi8KKyNlbmRpZgorICAgIGtJMkNfU2xhdmVDb21wbGV0aW9uRXZlbnQgPSAweDIwVSwgIC8qITwgQSBzdG9wIHdhcyBkZXRlY3RlZCBvciBmaW5pc2hlZCB0cmFuc2ZlciwgY29tcGxldGluZyB0aGUgdHJhbnNmZXIuICovCisgICAga0kyQ19TbGF2ZUdlbmFyYWxjYWxsRXZlbnQgPSAweDQwVSwgLyohPCBSZWNlaXZlZCB0aGUgZ2VuZXJhbCBjYWxsIGFkZHJlc3MgYWZ0ZXIgYSBzdGFydCBvciByZXBlYXRlZCBzdGFydC4gKi8KKworICAgIC8qISBBIGJpdCBtYXNrIG9mIGFsbCBhdmFpbGFibGUgZXZlbnRzLiAqLworICAgIGtJMkNfU2xhdmVBbGxFdmVudHMgPSBrSTJDX1NsYXZlQWRkcmVzc01hdGNoRXZlbnQgfCBrSTJDX1NsYXZlVHJhbnNtaXRFdmVudCB8IGtJMkNfU2xhdmVSZWNlaXZlRXZlbnQgfAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgICAgICAgICAgICAgICAgICAgICAgICBrSTJDX1NsYXZlU3RhcnRFdmVudCB8CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAga0kyQ19TbGF2ZUNvbXBsZXRpb25FdmVudCB8IGtJMkNfU2xhdmVHZW5hcmFsY2FsbEV2ZW50LAorfSBpMmNfc2xhdmVfdHJhbnNmZXJfZXZlbnRfdDsKKworLyohIEBicmllZiBJMkMgbWFzdGVyIHVzZXIgY29uZmlndXJhdGlvbi4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfbWFzdGVyX2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlTWFzdGVyOyAvKiE8IEVuYWJsZXMgdGhlIEkyQyBwZXJpcGhlcmFsIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUT1BfSE9MRF9PRkYpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfU1RPUF9IT0xEX09GRgorICAgIGJvb2wgZW5hYmxlU3RvcEhvbGQ7IC8qITwgQ29udHJvbHMgdGhlIHN0b3AgaG9sZCBlbmFibGUuICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX0kyQ19IQVNfRE9VQkxFX0JVRkZFUl9FTkFCTEUKKyAgICBib29sIGVuYWJsZURvdWJsZUJ1ZmZlcmluZzsgLyohPCBDb250cm9scyBkb3VibGUgYnVmZmVyIGVuYWJsZTsgbm90aWNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGluZyB0aGUgZG91YmxlIGJ1ZmZlciBkaXNhYmxlcyB0aGUgY2xvY2sgc3RyZXRjaC4gKi8KKyNlbmRpZgorICAgIHVpbnQzMl90IGJhdWRSYXRlX0JwczsgICAgIC8qITwgQmF1ZCByYXRlIGNvbmZpZ3VyYXRpb24gb2YgSTJDIHBlcmlwaGVyYWwuICovCisgICAgdWludDhfdCBnbGl0Y2hGaWx0ZXJXaWR0aDsgLyohPCBDb250cm9scyB0aGUgd2lkdGggb2YgdGhlIGdsaXRjaC4gKi8KK30gaTJjX21hc3Rlcl9jb25maWdfdDsKKworLyohIEBicmllZiBJMkMgc2xhdmUgdXNlciBjb25maWd1cmF0aW9uLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2kyY19zbGF2ZV9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZVNsYXZlOyAgICAgICAvKiE8IEVuYWJsZXMgdGhlIEkyQyBwZXJpcGhlcmFsIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuICovCisgICAgYm9vbCBlbmFibGVHZW5lcmFsQ2FsbDsgLyohPCBFbmFibGVzIHRoZSBnZW5lcmFsIGNhbGwgYWRkcmVzc2luZyBtb2RlLiAqLworICAgIGJvb2wgZW5hYmxlV2FrZVVwOyAgICAgIC8qITwgRW5hYmxlcy9kaXNhYmxlcyB3YWtpbmcgdXAgTUNVIGZyb20gbG93LXBvd2VyIG1vZGUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RPVUJMRV9CVUZGRVJfRU5BQkxFCisgICAgYm9vbCBlbmFibGVEb3VibGVCdWZmZXJpbmc7IC8qITwgQ29udHJvbHMgYSBkb3VibGUgYnVmZmVyIGVuYWJsZTsgbm90aWNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGluZyB0aGUgZG91YmxlIGJ1ZmZlciBkaXNhYmxlcyB0aGUgY2xvY2sgc3RyZXRjaC4gKi8KKyNlbmRpZgorICAgIGJvb2wgZW5hYmxlQmF1ZFJhdGVDdGw7IC8qITwgRW5hYmxlcy9kaXNhYmxlcyBpbmRlcGVuZGVudCBzbGF2ZSBiYXVkIHJhdGUgb24gU0NMIGluIHZlcnkgZmFzdCBJMkMgbW9kZXMuICovCisgICAgdWludDE2X3Qgc2xhdmVBZGRyZXNzOyAgLyohPCBBIHNsYXZlIGFkZHJlc3MgY29uZmlndXJhdGlvbi4gKi8KKyAgICB1aW50MTZfdCB1cHBlckFkZHJlc3M7ICAvKiE8IEEgbWF4aW11bSBib3VuZGFyeSBzbGF2ZSBhZGRyZXNzIHVzZWQgaW4gYSByYW5nZSBtYXRjaGluZyBtb2RlLiAqLworICAgIGkyY19zbGF2ZV9hZGRyZXNzX21vZGVfdAorICAgICAgICBhZGRyZXNzaW5nTW9kZTsgICAgICAgICAgLyohPCBBbiBhZGRyZXNzaW5nIG1vZGUgY29uZmlndXJhdGlvbiBvZiBpMmNfc2xhdmVfYWRkcmVzc19tb2RlX2NvbmZpZ190LiAqLworICAgIHVpbnQzMl90IHNjbFN0b3BIb2xkVGltZV9uczsgLyohPCB0aGUgZGVsYXkgZnJvbSB0aGUgcmlzaW5nIGVkZ2Ugb2YgU0NMIChJMkMgY2xvY2spIHRvIHRoZSByaXNpbmcgZWRnZSBvZiBTREEgKEkyQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkgd2hpbGUgU0NMIGlzIGhpZ2ggKHN0b3AgY29uZGl0aW9uKSwgU0RBIGhvbGQgdGltZSBhbmQgU0NMIHN0YXJ0IGhvbGQgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGFsc28gY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gdGhlIFNDTCBzdG9wIGhvbGQgdGltZS4gKi8KK30gaTJjX3NsYXZlX2NvbmZpZ190OworCisvKiEgQGJyaWVmIEkyQyBtYXN0ZXIgaGFuZGxlIHR5cGVkZWYuICovCit0eXBlZGVmIHN0cnVjdCBfaTJjX21hc3Rlcl9oYW5kbGUgaTJjX21hc3Rlcl9oYW5kbGVfdDsKKworLyohIEBicmllZiBJMkMgbWFzdGVyIHRyYW5zZmVyIGNhbGxiYWNrIHR5cGVkZWYuICovCit0eXBlZGVmIHZvaWQgKCppMmNfbWFzdGVyX3RyYW5zZmVyX2NhbGxiYWNrX3QpKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiEgQGJyaWVmIEkyQyBzbGF2ZSBoYW5kbGUgdHlwZWRlZi4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfc2xhdmVfaGFuZGxlIGkyY19zbGF2ZV9oYW5kbGVfdDsKKworLyohIEBicmllZiBJMkMgbWFzdGVyIHRyYW5zZmVyIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfbWFzdGVyX3RyYW5zZmVyCit7CisgICAgdWludDMyX3QgZmxhZ3M7ICAgICAgICAgICAgLyohPCBBIHRyYW5zZmVyIGZsYWcgd2hpY2ggY29udHJvbHMgdGhlIHRyYW5zZmVyLiAqLworICAgIHVpbnQ4X3Qgc2xhdmVBZGRyZXNzOyAgICAgIC8qITwgNy1iaXQgc2xhdmUgYWRkcmVzcy4gKi8KKyAgICBpMmNfZGlyZWN0aW9uX3QgZGlyZWN0aW9uOyAvKiE8IEEgdHJhbnNmZXIgZGlyZWN0aW9uLCByZWFkIG9yIHdyaXRlLiAqLworICAgIHVpbnQzMl90IHN1YmFkZHJlc3M7ICAgICAgIC8qITwgQSBzdWIgYWRkcmVzcy4gVHJhbnNmZXJyZWQgTVNCIGZpcnN0LiAqLworICAgIHVpbnQ4X3Qgc3ViYWRkcmVzc1NpemU7ICAgIC8qITwgQSBzaXplIG9mIHRoZSBjb21tYW5kIGJ1ZmZlci4gKi8KKyAgICB1aW50OF90ICp2b2xhdGlsZSBkYXRhOyAgICAvKiE8IEEgdHJhbnNmZXIgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCBkYXRhU2l6ZTsgIC8qITwgQSB0cmFuc2ZlciBzaXplLiAqLworfSBpMmNfbWFzdGVyX3RyYW5zZmVyX3Q7CisKKy8qISBAYnJpZWYgSTJDIG1hc3RlciBoYW5kbGUgc3RydWN0dXJlLiAqLworc3RydWN0IF9pMmNfbWFzdGVyX2hhbmRsZQoreworICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfdCB0cmFuc2ZlcjsgICAgICAgICAgICAgICAgICAgIC8qITwgSTJDIG1hc3RlciB0cmFuc2ZlciBjb3B5LiAqLworICAgIHNpemVfdCB0cmFuc2ZlclNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVG90YWwgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQuICovCisgICAgdWludDhfdCBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIHRyYW5zZmVyIHN0YXRlIG1haW50YWluZWQgZHVyaW5nIHRyYW5zZmVyLiAqLworICAgIGkyY19tYXN0ZXJfdHJhbnNmZXJfY2FsbGJhY2tfdCBjb21wbGV0aW9uQ2FsbGJhY2s7IC8qITwgQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIGNhbGxiYWNrIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiAqLworfTsKKworLyohIEBicmllZiBJMkMgc2xhdmUgdHJhbnNmZXIgc3RydWN0dXJlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2kyY19zbGF2ZV90cmFuc2ZlcgoreworICAgIGkyY19zbGF2ZV90cmFuc2Zlcl9ldmVudF90IGV2ZW50OyAvKiE8IEEgcmVhc29uIHRoYXQgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgZGF0YTsgICAgICAgICAgIC8qITwgQSB0cmFuc2ZlciBidWZmZXIuICovCisgICAgdm9sYXRpbGUgc2l6ZV90IGRhdGFTaXplOyAgICAgICAgIC8qITwgQSB0cmFuc2ZlciBzaXplLiAqLworICAgIHN0YXR1c190IGNvbXBsZXRpb25TdGF0dXM7ICAgICAgICAvKiE8IFN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBkZXNjcmliaW5nIGhvdyB0aGUgdHJhbnNmZXIgY29tcGxldGVkLiBPbmx5IGFwcGxpZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrSTJDX1NsYXZlQ29tcGxldGlvbkV2ZW50LiAqLworICAgIHNpemVfdCB0cmFuc2ZlcnJlZENvdW50OyAvKiE8IEEgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHRyYW5zZmVycmVkIHNpbmNlIHRoZSBzdGFydCBvciBzaW5jZSB0aGUgbGFzdCByZXBlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC4gKi8KK30gaTJjX3NsYXZlX3RyYW5zZmVyX3Q7CisKKy8qISBAYnJpZWYgSTJDIHNsYXZlIHRyYW5zZmVyIGNhbGxiYWNrIHR5cGVkZWYuICovCit0eXBlZGVmIHZvaWQgKCppMmNfc2xhdmVfdHJhbnNmZXJfY2FsbGJhY2tfdCkoSTJDX1R5cGUgKmJhc2UsIGkyY19zbGF2ZV90cmFuc2Zlcl90ICp4ZmVyLCB2b2lkICp1c2VyRGF0YSk7CisKKy8qISBAYnJpZWYgSTJDIHNsYXZlIGhhbmRsZSBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgX2kyY19zbGF2ZV9oYW5kbGUKK3sKKyAgICB2b2xhdGlsZSBib29sIGlzQnVzeTsgICAgICAgICAgICAgICAgICAgLyohPCBJbmRpY2F0ZXMgd2hldGhlciBhIHRyYW5zZmVyIGlzIGJ1c3kuICovCisgICAgaTJjX3NsYXZlX3RyYW5zZmVyX3QgdHJhbnNmZXI7ICAgICAgICAgIC8qITwgSTJDIHNsYXZlIHRyYW5zZmVyIGNvcHkuICovCisgICAgdWludDMyX3QgZXZlbnRNYXNrOyAgICAgICAgICAgICAgICAgICAgIC8qITwgQSBtYXNrIG9mIGVuYWJsZWQgZXZlbnRzLiAqLworICAgIGkyY19zbGF2ZV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrOyAvKiE8IEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSB0cmFuc2ZlciBldmVudC4gKi8KKyAgICB2b2lkICp1c2VyRGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBIGNhbGxiYWNrIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKl9jcGx1c3BsdXMuICovCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEkyQyBwZXJpcGhlcmFsLiBDYWxsIHRoaXMgQVBJIHRvIHVuZ2F0ZSB0aGUgSTJDIGNsb2NrCisgKiBhbmQgY29uZmlndXJlIHRoZSBJMkMgd2l0aCBtYXN0ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwcGxpY2F0aW9uLgorICogT3RoZXJ3aXNlLCBhbnkgb3BlcmF0aW9uIHRvIHRoZSBJMkMgbW9kdWxlIGNhbiBjYXVzZSBhIGhhcmQgZmF1bHQKKyAqIGJlY2F1c2UgdGhlIGNsb2NrIGlzIG5vdCBlbmFibGVkLiBUaGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgY2FuIGJlIGN1c3RvbSBmaWxsZWQKKyAqIG9yIGl0IGNhbiBiZSBzZXQgd2l0aCBkZWZhdWx0IHZhbHVlcyBieSB1c2luZyB0aGUgSTJDX01hc3RlckdldERlZmF1bHRDb25maWcoKS4KKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBBUEksIHRoZSBtYXN0ZXIgaXMgcmVhZHkgdG8gdHJhbnNmZXIuCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgKiBAY29kZQorICogaTJjX21hc3Rlcl9jb25maWdfdCBjb25maWcgPSB7CisgKiAuZW5hYmxlTWFzdGVyID0gdHJ1ZSwKKyAqIC5lbmFibGVTdG9wSG9sZCA9IGZhbHNlLAorICogLmhpZ2hEcml2ZSA9IGZhbHNlLAorICogLmJhdWRSYXRlX0JwcyA9IDEwMDAwMCwKKyAqIC5nbGl0Y2hGaWx0ZXJXaWR0aCA9IDAKKyAqIH07CisgKiBJMkNfTWFzdGVySW5pdChJMkMwLCAmY29uZmlnLCAxMjAwMDAwMFUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKiBAcGFyYW0gbWFzdGVyQ29uZmlnIEEgcG9pbnRlciB0byB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogSTJDIHBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IGluIEh6CisgKi8KK3ZvaWQgSTJDX01hc3RlckluaXQoSTJDX1R5cGUgKmJhc2UsIGNvbnN0IGkyY19tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZywgdWludDMyX3Qgc3JjQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgSTJDIHBlcmlwaGVyYWwuIENhbGwgdGhpcyBBUEkgdG8gdW5nYXRlIHRoZSBJMkMgY2xvY2sKKyAqIGFuZCBpbml0aWFsaXplIHRoZSBJMkMgd2l0aCB0aGUgc2xhdmUgY29uZmlndXJhdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwcGxpY2F0aW9uLgorICogT3RoZXJ3aXNlLCBhbnkgb3BlcmF0aW9uIHRvIHRoZSBJMkMgbW9kdWxlIGNhbiBjYXVzZSBhIGhhcmQgZmF1bHQKKyAqIGJlY2F1c2UgdGhlIGNsb2NrIGlzIG5vdCBlbmFibGVkLiBUaGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgY2FuIHBhcnRseSBiZSBzZXQKKyAqIHdpdGggZGVmYXVsdCB2YWx1ZXMgYnkgSTJDX1NsYXZlR2V0RGVmYXVsdENvbmZpZygpIG9yIGl0IGNhbiBiZSBjdXN0b20gZmlsbGVkIGJ5IHRoZSB1c2VyLgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqIGkyY19zbGF2ZV9jb25maWdfdCBjb25maWcgPSB7CisgKiAuZW5hYmxlU2xhdmUgPSB0cnVlLAorICogLmVuYWJsZUdlbmVyYWxDYWxsID0gZmFsc2UsCisgKiAuYWRkcmVzc2luZ01vZGUgPSBrSTJDX0FkZHJlc3M3Yml0LAorICogLnNsYXZlQWRkcmVzcyA9IDB4MURVLAorICogLmVuYWJsZVdha2VVcCA9IGZhbHNlLAorICogLmVuYWJsZWhpZ2hEcml2ZSA9IGZhbHNlLAorICogLmVuYWJsZUJhdWRSYXRlQ3RsID0gZmFsc2UsCisgKiAuc2NsU3RvcEhvbGRUaW1lX25zID0gNDAwMAorICogfTsKKyAqIEkyQ19TbGF2ZUluaXQoSTJDMCwgJmNvbmZpZywgMTIwMDAwMDBVKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIHNsYXZlQ29uZmlnIEEgcG9pbnRlciB0byB0aGUgc2xhdmUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBzcmNDbG9ja19IeiBJMkMgcGVyaXBoZXJhbCBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyAqLwordm9pZCBJMkNfU2xhdmVJbml0KEkyQ19UeXBlICpiYXNlLCBjb25zdCBpMmNfc2xhdmVfY29uZmlnX3QgKnNsYXZlQ29uZmlnLCB1aW50MzJfdCBzcmNDbG9ja19Ieik7CisKKy8qIQorICogQGJyaWVmIERlLWluaXRpYWxpemVzIHRoZSBJMkMgbWFzdGVyIHBlcmlwaGVyYWwuIENhbGwgdGhpcyBBUEkgdG8gZ2F0ZSB0aGUgSTJDIGNsb2NrLgorICogVGhlIEkyQyBtYXN0ZXIgbW9kdWxlIGNhbid0IHdvcmsgdW5sZXNzIHRoZSBJMkNfTWFzdGVySW5pdCBpcyBjYWxsZWQuCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKi8KK3ZvaWQgSTJDX01hc3RlckRlaW5pdChJMkNfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIERlLWluaXRpYWxpemVzIHRoZSBJMkMgc2xhdmUgcGVyaXBoZXJhbC4gQ2FsbGluZyB0aGlzIEFQSSBnYXRlcyB0aGUgSTJDIGNsb2NrLgorICogVGhlIEkyQyBzbGF2ZSBtb2R1bGUgY2FuJ3Qgd29yayB1bmxlc3MgdGhlIEkyQ19TbGF2ZUluaXQgaXMgY2FsbGVkIHRvIGVuYWJsZSB0aGUgY2xvY2suCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKi8KK3ZvaWQgSTJDX1NsYXZlRGVpbml0KEkyQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgIFNldHMgdGhlIEkyQyBtYXN0ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBpbml0aWFsaXplZCBmb3IgdXNlIGluIHRoZSBJMkNfTWFzdGVyQ29uZmlndXJlKCkuCisgKiBVc2UgdGhlIGluaXRpYWxpemVkIHN0cnVjdHVyZSB1bmNoYW5nZWQgaW4gdGhlIEkyQ19NYXN0ZXJDb25maWd1cmUoKSBvciBtb2RpZnkKKyAqIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlIGNhbGxpbmcgdGhlIEkyQ19NYXN0ZXJDb25maWd1cmUoKS4KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZS4KKyAqIEBjb2RlCisgKiBpMmNfbWFzdGVyX2NvbmZpZ190IGNvbmZpZzsKKyAqIEkyQ19NYXN0ZXJHZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBtYXN0ZXJDb25maWcgQSBwb2ludGVyIHRvIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisqLwordm9pZCBJMkNfTWFzdGVyR2V0RGVmYXVsdENvbmZpZyhpMmNfbWFzdGVyX2NvbmZpZ190ICptYXN0ZXJDb25maWcpOworCisvKiEKKyAqIEBicmllZiAgU2V0cyB0aGUgSTJDIHNsYXZlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgZm9yIHVzZSBpbiB0aGUgSTJDX1NsYXZlQ29uZmlndXJlKCkuCisgKiBNb2RpZnkgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlIGNhbGxpbmcgdGhlIEkyQ19TbGF2ZUNvbmZpZ3VyZSgpLgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICogQGNvZGUKKyAqIGkyY19zbGF2ZV9jb25maWdfdCBjb25maWc7CisgKiBJMkNfU2xhdmVHZXREZWZhdWx0Q29uZmlnKCZjb25maWcpOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBzbGF2ZUNvbmZpZyBBIHBvaW50ZXIgdG8gdGhlIHNsYXZlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIEkyQ19TbGF2ZUdldERlZmF1bHRDb25maWcoaTJjX3NsYXZlX2NvbmZpZ190ICpzbGF2ZUNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgb3IgZGlzYWJsZXNzIHRoZSBJMkMgcGVyaXBoZXJhbCBvcGVyYXRpb24uCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIGVuYWJsZSBQYXNzIHRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIHRoZSBtb2R1bGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJMkNfRW5hYmxlKEkyQ19UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX0lJQ0VOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkMxICY9IH5JMkNfQzFfSUlDRU5fTUFTSzsKKyAgICB9Cit9CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgU3RhdHVzCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIEkyQyBzdGF0dXMgZmxhZ3MuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHJldHVybiBzdGF0dXMgZmxhZywgdXNlIHN0YXR1cyBmbGFnIHRvIEFORCAjX2kyY19mbGFncyB0byBnZXQgdGhlIHJlbGF0ZWQgc3RhdHVzLgorICovCit1aW50MzJfdCBJMkNfTWFzdGVyR2V0U3RhdHVzRmxhZ3MoSTJDX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBJMkMgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEByZXR1cm4gc3RhdHVzIGZsYWcsIHVzZSBzdGF0dXMgZmxhZyB0byBBTkQgI19pMmNfZmxhZ3MgdG8gZ2V0IHRoZSByZWxhdGVkIHN0YXR1cy4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBJMkNfU2xhdmVHZXRTdGF0dXNGbGFncyhJMkNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gSTJDX01hc3RlckdldFN0YXR1c0ZsYWdzKGJhc2UpOworfQorCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIEkyQyBzdGF0dXMgZmxhZyBzdGF0ZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHN0YXR1cyByZWdpc3RlciBmbGFncyBjYW4gYmUgY2xlYXJlZCBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcgYW5kIGtJMkNfSW50UGVuZGluZ0ZsYWcuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIHN0YXR1c01hc2sgVGhlIHN0YXR1cyBmbGFnIG1hc2ssIGRlZmluZWQgaW4gdHlwZSBpMmNfc3RhdHVzX2ZsYWdfdC4KKyAqICAgICAgVGhlIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICogICAgICAgICAgQGFyZyBrSTJDX1N0YXJ0RGV0ZWN0RmxhZyAoaWYgYXZhaWxhYmxlKQorICogICAgICAgICAgQGFyZyBrSTJDX1N0b3BEZXRlY3RGbGFnIChpZiBhdmFpbGFibGUpCisgKiAgICAgICAgICBAYXJnIGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZworICogICAgICAgICAgQGFyZyBrSTJDX0ludFBlbmRpbmdGbGFnRmxhZworICovCitzdGF0aWMgaW5saW5lIHZvaWQgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IHN0YXR1c01hc2spCit7CisvKiBNdXN0IGNsZWFyIHRoZSBTVEFSVEYgLyBTVE9QRiBiaXRzIHByaW9yIHRvIGNsZWFyaW5nIElJQ0lGICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9JMkNfSEFTX1NUQVJUX1NUT1BfREVURUNUCisgICAgaWYgKHN0YXR1c01hc2sgJiBrSTJDX1N0YXJ0RGV0ZWN0RmxhZykKKyAgICB7CisgICAgICAgIC8qIFNoaWZ0IHRoZSBvZGQtYmFsbCBmbGFncyBiYWNrIGludG8gcGxhY2UuICovCisgICAgICAgIGJhc2UtPkZMVCB8PSAodWludDhfdCkoc3RhdHVzTWFzayA+PiA4VSk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBJMkNfSEFTX1NUT1BfREVURUNUCisgICAgaWYgKHN0YXR1c01hc2sgJiBrSTJDX1N0b3BEZXRlY3RGbGFnKQorICAgIHsKKyAgICAgICAgLyogU2hpZnQgdGhlIG9kZC1iYWxsIGZsYWdzIGJhY2sgaW50byBwbGFjZS4gKi8KKyAgICAgICAgYmFzZS0+RkxUIHw9ICh1aW50OF90KShzdGF0dXNNYXNrID4+IDhVKTsKKyAgICB9CisjZW5kaWYKKworICAgIGJhc2UtPlMgPSAodWludDhfdClzdGF0dXNNYXNrOworfQorCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIEkyQyBzdGF0dXMgZmxhZyBzdGF0ZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHN0YXR1cyByZWdpc3RlciBmbGFncyBjYW4gYmUgY2xlYXJlZCBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcgYW5kIGtJMkNfSW50UGVuZGluZ0ZsYWcKKyAqCisgICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICAqIEBwYXJhbSBzdGF0dXNNYXNrIFRoZSBzdGF0dXMgZmxhZyBtYXNrLCBkZWZpbmVkIGluIHR5cGUgaTJjX3N0YXR1c19mbGFnX3QuCisgKiAgICAgIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqICAgICAgICAgIEBhcmcga0kyQ19TdGFydERldGVjdEZsYWcgKGlmIGF2YWlsYWJsZSkKKyAqICAgICAgICAgIEBhcmcga0kyQ19TdG9wRGV0ZWN0RmxhZyAoaWYgYXZhaWxhYmxlKQorICogICAgICAgICAgQGFyZyBrSTJDX0FyYml0cmF0aW9uTG9zdEZsYWcKKyAqICAgICAgICAgIEBhcmcga0kyQ19JbnRQZW5kaW5nRmxhZ0ZsYWcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIEkyQ19TbGF2ZUNsZWFyU3RhdHVzRmxhZ3MoSTJDX1R5cGUgKmJhc2UsIHVpbnQzMl90IHN0YXR1c01hc2spCit7CisgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwgc3RhdHVzTWFzayk7Cit9CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgSW50ZXJydXB0cworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIEkyQyBpbnRlcnJ1cHQgcmVxdWVzdHMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIG1hc2sgaW50ZXJydXB0IHNvdXJjZQorICogICAgIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgc291cmNlIGlmIGRlZmluZWQ6CisgKiAgICAgQGFyZyBrSTJDX0dsb2JhbEludGVycnVwdEVuYWJsZQorICogICAgIEBhcmcga0kyQ19TdG9wRGV0ZWN0SW50ZXJydXB0RW5hYmxlL2tJMkNfU3RhcnREZXRlY3RJbnRlcnJ1cHRFbmFibGUKKyAqICAgICBAYXJnIGtJMkNfU2RhVGltZW91dEludGVycnVwdEVuYWJsZQorICovCit2b2lkIEkyQ19FbmFibGVJbnRlcnJ1cHRzKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgSTJDIGludGVycnVwdCByZXF1ZXN0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKiBAcGFyYW0gbWFzayBpbnRlcnJ1cHQgc291cmNlCisgKiAgICAgVGhlIHBhcmFtZXRlciBjYW4gYmUgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBzb3VyY2UgaWYgZGVmaW5lZDoKKyAqICAgICBAYXJnIGtJMkNfR2xvYmFsSW50ZXJydXB0RW5hYmxlCisgKiAgICAgQGFyZyBrSTJDX1N0b3BEZXRlY3RJbnRlcnJ1cHRFbmFibGUva0kyQ19TdGFydERldGVjdEludGVycnVwdEVuYWJsZQorICogICAgIEBhcmcga0kyQ19TZGFUaW1lb3V0SW50ZXJydXB0RW5hYmxlCisgKi8KK3ZvaWQgSTJDX0Rpc2FibGVJbnRlcnJ1cHRzKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAbmFtZSBETUEgQ29udHJvbAorICogQHsKKyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19ETUFfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19ETUFfU1VQUE9SVAorLyohCisgKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgSTJDIERNQSBpbnRlcnJ1cHQuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlcgorICogQHBhcmFtIGVuYWJsZSB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZQorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBJMkNfRW5hYmxlRE1BKEkyQ19UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QzEgfD0gSTJDX0MxX0RNQUVOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkMxICY9IH5JMkNfQzFfRE1BRU5fTUFTSzsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9JMkNfSEFTX0RNQV9TVVBQT1JUICovCisKKy8qIQorICogQGJyaWVmICBHZXRzIHRoZSBJMkMgdHgvcnggZGF0YSByZWdpc3RlciBhZGRyZXNzLiBUaGlzIEFQSSBpcyB1c2VkIHRvIHByb3ZpZGUgYSB0cmFuc2ZlciBhZGRyZXNzCisgKiBmb3IgSTJDIERNQSB0cmFuc2ZlciBjb25maWd1cmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIKKyAqIEByZXR1cm4gZGF0YSByZWdpc3RlciBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgSTJDX0dldERhdGFSZWdBZGRyKEkyQ19UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDMyX3QpKCYoYmFzZS0+RCkpOworfQorCisvKiBAfSAqLworLyohCisgKiBAbmFtZSBCdXMgT3BlcmF0aW9ucworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBJMkMgbWFzdGVyIHRyYW5zZmVyIGJhdWQgcmF0ZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyCisgKiBAcGFyYW0gYmF1ZFJhdGVfQnBzIHRoZSBiYXVkIHJhdGUgdmFsdWUgaW4gYnBzCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogU291cmNlIGNsb2NrCisgKi8KK3ZvaWQgSTJDX01hc3RlclNldEJhdWRSYXRlKEkyQ19UeXBlICpiYXNlLCB1aW50MzJfdCBiYXVkUmF0ZV9CcHMsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgU2VuZHMgYSBTVEFSVCBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhdGUgYSBuZXcgbWFzdGVyIG1vZGUgdHJhbnNmZXIgYnkgc2VuZGluZyB0aGUgU1RBUlQgc2lnbmFsLgorICogVGhlIHNsYXZlIGFkZHJlc3MgaXMgc2VudCBmb2xsb3dpbmcgdGhlIEkyQyBTVEFSVCBzaWduYWwuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyCisgKiBAcGFyYW0gYWRkcmVzcyA3LWJpdCBzbGF2ZSBkZXZpY2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkaXJlY3Rpb24gTWFzdGVyIHRyYW5zZmVyIGRpcmVjdGlvbnModHJhbnNtaXQvcmVjZWl2ZSkuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgc3RhcnQgc2lnbmFsLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19CdXN5IEN1cnJlbnQgYnVzIGlzIGJ1c3kuCisgKi8KK3N0YXR1c190IEkyQ19NYXN0ZXJTdGFydChJMkNfVHlwZSAqYmFzZSwgdWludDhfdCBhZGRyZXNzLCBpMmNfZGlyZWN0aW9uX3QgZGlyZWN0aW9uKTsKKworLyohCisgKiBAYnJpZWYgU2VuZHMgYSBTVE9QIHNpZ25hbCBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgc2VuZCB0aGUgc3RvcCBzaWduYWwuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX1RpbWVvdXQgU2VuZCBzdG9wIHNpZ25hbCBmYWlsZWQsIHRpbWVvdXQuCisgKi8KK3N0YXR1c190IEkyQ19NYXN0ZXJTdG9wKEkyQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgU2VuZHMgYSBSRVBFQVRFRCBTVEFSVCBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIKKyAqIEBwYXJhbSBhZGRyZXNzIDctYml0IHNsYXZlIGRldmljZSBhZGRyZXNzLgorICogQHBhcmFtIGRpcmVjdGlvbiBNYXN0ZXIgdHJhbnNmZXIgZGlyZWN0aW9ucyh0cmFuc21pdC9yZWNlaXZlKS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBzZW5kIHRoZSBzdGFydCBzaWduYWwuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0J1c3kgQ3VycmVudCBidXMgaXMgYnVzeSBidXQgbm90IG9jY3VwaWVkIGJ5IGN1cnJlbnQgSTJDIG1hc3Rlci4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoSTJDX1R5cGUgKmJhc2UsIHVpbnQ4X3QgYWRkcmVzcywgaTJjX2RpcmVjdGlvbl90IGRpcmVjdGlvbik7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIGEgcG9sbGluZyBzZW5kIHRyYW5zYWN0aW9uIG9uIHRoZSBJMkMgYnVzLgorICoKKyAqIEBwYXJhbSBiYXNlICBUaGUgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIHR4QnVmZiBUaGUgcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIEBwYXJhbSB0eFNpemUgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIEBwYXJhbSBmbGFncyBUcmFuc2ZlciBjb250cm9sIGZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgbmVlZCB0byBzZW5kIGEgc3RvcCwgdXNlIGtJMkNfVHJhbnNmZXJEZWZhdWx0RmxhZworKiAgdG8gaXNzdWUgYSBzdG9wIGFuZCBrSTJDX1RyYW5zZmVyTm9TdG9wIHRvIG5vdCBzZW5kIGEgc3RvcC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgZGF0YSB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCBUcmFuc2ZlciBlcnJvciwgYXJiaXRyYXRpb24gbG9zdC4KKyAqIEByZXR2YWwga1N0YXRhdXNfSTJDX05hayBUcmFuc2ZlciBlcnJvciwgcmVjZWl2ZSBOQUsgZHVyaW5nIHRyYW5zZmVyLgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyV3JpdGVCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqdHhCdWZmLCBzaXplX3QgdHhTaXplLCB1aW50MzJfdCBmbGFncyk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIGEgcG9sbGluZyByZWNlaXZlIHRyYW5zYWN0aW9uIG9uIHRoZSBJMkMgYnVzLgorICoKKyAqIEBub3RlIFRoZSBJMkNfTWFzdGVyUmVhZEJsb2NraW5nIGZ1bmN0aW9uIHN0b3BzIHRoZSBidXMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbmFsIGJ5dGUuCisgKiBXaXRob3V0IHN0b3BwaW5nIHRoZSBidXMgcHJpb3IgZm9yIHRoZSBmaW5hbCByZWFkLCB0aGUgYnVzIGlzc3VlcyBhbm90aGVyIHJlYWQsIHJlc3VsdGluZworICogaW4gZ2FyYmFnZSBkYXRhIGJlaW5nIHJlYWQgaW50byB0aGUgZGF0YSByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gcnhCdWZmIFRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHN0b3JlIHRoZSByZWNlaXZlZCBkYXRhLgorICogQHBhcmFtIHJ4U2l6ZSBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIGJlIHJlY2VpdmVkLgorICogQHBhcmFtIGZsYWdzIFRyYW5zZmVyIGNvbnRyb2wgZmxhZyB0byBkZWNpZGUgd2hldGhlciBuZWVkIHRvIHNlbmQgYSBzdG9wLCB1c2Uga0kyQ19UcmFuc2ZlckRlZmF1bHRGbGFnCisqICB0byBpc3N1ZSBhIHN0b3AgYW5kIGtJMkNfVHJhbnNmZXJOb1N0b3AgdG8gbm90IHNlbmQgYSBzdG9wLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfVGltZW91dCBTZW5kIHN0b3Agc2lnbmFsIGZhaWxlZCwgdGltZW91dC4KKyAqLworc3RhdHVzX3QgSTJDX01hc3RlclJlYWRCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgdWludDhfdCAqcnhCdWZmLCBzaXplX3QgcnhTaXplLCB1aW50MzJfdCBmbGFncyk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIGEgcG9sbGluZyBzZW5kIHRyYW5zYWN0aW9uIG9uIHRoZSBJMkMgYnVzLgorICoKKyAqIEBwYXJhbSBiYXNlICBUaGUgSTJDIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIHR4QnVmZiBUaGUgcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIEBwYXJhbSB0eFNpemUgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgZGF0YSB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCBUcmFuc2ZlciBlcnJvciwgYXJiaXRyYXRpb24gbG9zdC4KKyAqIEByZXR2YWwga1N0YXRhdXNfSTJDX05hayBUcmFuc2ZlciBlcnJvciwgcmVjZWl2ZSBOQUsgZHVyaW5nIHRyYW5zZmVyLgorICovCitzdGF0dXNfdCBJMkNfU2xhdmVXcml0ZUJsb2NraW5nKEkyQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICp0eEJ1ZmYsIHNpemVfdCB0eFNpemUpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIHBvbGxpbmcgcmVjZWl2ZSB0cmFuc2FjdGlvbiBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gcnhCdWZmIFRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHN0b3JlIHRoZSByZWNlaXZlZCBkYXRhLgorICogQHBhcmFtIHJ4U2l6ZSBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIGJlIHJlY2VpdmVkLgorICovCit2b2lkIEkyQ19TbGF2ZVJlYWRCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgdWludDhfdCAqcnhCdWZmLCBzaXplX3QgcnhTaXplKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgYSBtYXN0ZXIgcG9sbGluZyB0cmFuc2ZlciBvbiB0aGUgSTJDIGJ1cy4KKyAqCisgKiBAbm90ZSBUaGUgQVBJIGRvZXMgbm90IHJldHVybiB1bnRpbCB0aGUgdHJhbnNmZXIgc3VjY2VlZHMgb3IgZmFpbHMgZHVlCisgKiB0byBhcmJpdHJhdGlvbiBsb3N0IG9yIHJlY2VpdmluZyBhIE5BSy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0geGZlciBQb2ludGVyIHRvIHRoZSB0cmFuc2ZlciBzdHJ1Y3R1cmUuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIGRhdGEgdHJhbnNtaXNzaW9uLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19CdXN5IFByZXZpb3VzIHRyYW5zbWlzc2lvbiBzdGlsbCBub3QgZmluaXNoZWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX1RpbWVvdXQgVHJhbnNmZXIgZXJyb3IsIHdhaXQgc2lnbmFsIHRpbWVvdXQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCBUcmFuc2ZlciBlcnJvciwgYXJiaXRyYXRpb24gbG9zdC4KKyAqIEByZXR2YWwga1N0YXRhdXNfSTJDX05hayBUcmFuc2ZlciBlcnJvciwgcmVjZWl2ZSBOQUsgZHVyaW5nIHRyYW5zZmVyLgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJCbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBUcmFuc2FjdGlvbmFsCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBJMkMgaGFuZGxlIHdoaWNoIGlzIHVzZWQgaW4gdHJhbnNhY3Rpb25hbCBmdW5jdGlvbnMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgdHJhbnNmZXIgc3RhdGUuCisgKiBAcGFyYW0gY2FsbGJhY2sgcG9pbnRlciB0byB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBhcmFtIHVzZXJEYXRhIHVzZXIgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKi8KK3ZvaWQgSTJDX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIG1hc3RlciBpbnRlcnJ1cHQgbm9uLWJsb2NraW5nIHRyYW5zZmVyIG9uIHRoZSBJMkMgYnVzLgorICoKKyAqIEBub3RlIENhbGxpbmcgdGhlIEFQSSByZXR1cm5zIGltbWVkaWF0ZWx5IGFmdGVyIHRyYW5zZmVyIGluaXRpYXRlcy4gVGhlIHVzZXIgbmVlZHMKKyAqIHRvIGNhbGwgSTJDX01hc3RlckdldFRyYW5zZmVyQ291bnQgdG8gcG9sbCB0aGUgdHJhbnNmZXIgc3RhdHVzIHRvIGNoZWNrIHdoZXRoZXIKKyAqIHRoZSB0cmFuc2ZlciBpcyBmaW5pc2hlZC4gSWYgdGhlIHJldHVybiBzdGF0dXMgaXMgbm90IGtTdGF0dXNfSTJDX0J1c3ksIHRoZSB0cmFuc2ZlcgorICogaXMgZmluaXNoZWQuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIHhmZXIgcG9pbnRlciB0byBpMmNfbWFzdGVyX3RyYW5zZmVyX3Qgc3RydWN0dXJlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IHN0YXJ0IHRoZSBkYXRhIHRyYW5zbWlzc2lvbi4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQnVzeSBQcmV2aW91cyB0cmFuc21pc3Npb24gc3RpbGwgbm90IGZpbmlzaGVkLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19UaW1lb3V0IFRyYW5zZmVyIGVycm9yLCB3YWl0IHNpZ25hbCB0aW1lb3V0LgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJOb25CbG9ja2luZyhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgKnhmZXIpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBtYXN0ZXIgdHJhbnNmZXIgc3RhdHVzIGR1cmluZyBhIGludGVycnVwdCBub24tYmxvY2tpbmcgdHJhbnNmZXIuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBzbyBmYXIgYnkgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgY291bnQgaXMgSW52YWxpZC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSByZXR1cm4gdGhlIGNvdW50LgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJHZXRDb3VudChJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIGFuIGludGVycnVwdCBub24tYmxvY2tpbmcgdHJhbnNmZXIgZWFybHkuCisgKgorICogQG5vdGUgVGhpcyBBUEkgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSB3aGVuIGFuIGludGVycnVwdCBub24tYmxvY2tpbmcgdHJhbnNmZXIgaW5pdGlhdGVzCisgKiB0byBhYm9ydCB0aGUgdHJhbnNmZXIgZWFybHkuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlCisgKi8KK3ZvaWQgSTJDX01hc3RlclRyYW5zZmVyQWJvcnQoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIE1hc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIGkyY0hhbmRsZSBwb2ludGVyIHRvIGkyY19tYXN0ZXJfaGFuZGxlX3Qgc3RydWN0dXJlLgorICovCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckhhbmRsZUlSUShJMkNfVHlwZSAqYmFzZSwgdm9pZCAqaTJjSGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEkyQyBoYW5kbGUgd2hpY2ggaXMgdXNlZCBpbiB0cmFuc2FjdGlvbmFsIGZ1bmN0aW9ucy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGkyY19zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIHRyYW5zZmVyIHN0YXRlLgorICogQHBhcmFtIGNhbGxiYWNrIHBvaW50ZXIgdG8gdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwYXJhbSB1c2VyRGF0YSB1c2VyIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICovCit2b2lkIEkyQ19TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX3NsYXZlX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohCisgKiBAYnJpZWYgU3RhcnRzIGFjY2VwdGluZyBzbGF2ZSB0cmFuc2ZlcnMuCisgKgorICogQ2FsbCB0aGlzIEFQSSBhZnRlciBjYWxsaW5nIHRoZSBJMkNfU2xhdmVJbml0KCkgYW5kIEkyQ19TbGF2ZVRyYW5zZmVyQ3JlYXRlSGFuZGxlKCkgdG8gc3RhcnQgcHJvY2Vzc2luZworICogdHJhbnNhY3Rpb25zIGRyaXZlbiBieSBhbiBJMkMgbWFzdGVyLiBUaGUgc2xhdmUgbW9uaXRvcnMgdGhlIEkyQyBidXMgYW5kIHBhc3NlcyBldmVudHMgdG8gdGhlCisgKiBjYWxsYmFjayB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY2FsbCB0byBJMkNfU2xhdmVUcmFuc2ZlckNyZWF0ZUhhbmRsZSgpLiBUaGUgY2FsbGJhY2sgaXMgYWx3YXlzIGludm9rZWQKKyAqIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFRoZSBzZXQgb2YgZXZlbnRzIHJlY2VpdmVkIGJ5IHRoZSBjYWxsYmFjayBpcyBjdXN0b21pemFibGUuIFRvIGRvIHNvLCBzZXQgdGhlIEBhIGV2ZW50TWFzayBwYXJhbWV0ZXIgdG8KKyAqIHRoZSBPUidkIGNvbWJpbmF0aW9uIG9mICNpMmNfc2xhdmVfdHJhbnNmZXJfZXZlbnRfdCBlbnVtZXJhdG9ycyBmb3IgdGhlIGV2ZW50cyB5b3Ugd2lzaCB0byByZWNlaXZlLgorICogVGhlICNrSTJDX1NsYXZlVHJhbnNtaXRFdmVudCBhbmQgI2tMUEkyQ19TbGF2ZVJlY2VpdmVFdmVudCBldmVudHMgYXJlIGFsd2F5cyBlbmFibGVkIGFuZCBkbyBub3QgbmVlZAorICogdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1hc2suIEFsdGVybmF0aXZlbHksIHBhc3MgMCB0byBnZXQgYSBkZWZhdWx0IHNldCBvZiBvbmx5IHRoZSB0cmFuc21pdCBhbmQKKyAqIHJlY2VpdmUgZXZlbnRzIHRoYXQgYXJlIGFsd2F5cyBlbmFibGVkLiBJbiBhZGRpdGlvbiwgdGhlICNrSTJDX1NsYXZlQWxsRXZlbnRzIGNvbnN0YW50IGlzIHByb3ZpZGVkIGFzCisgKiBhIGNvbnZlbmllbnQgd2F5IHRvIGVuYWJsZSBhbGwgZXZlbnRzLgorICoKKyAqIEBwYXJhbSBiYXNlIFRoZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gI2kyY19zbGF2ZV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2ZlciBzdGF0ZS4KKyAqIEBwYXJhbSBldmVudE1hc2sgQml0IG1hc2sgZm9ybWVkIGJ5IE9SJ2luZyB0b2dldGhlciAjaTJjX3NsYXZlX3RyYW5zZmVyX2V2ZW50X3QgZW51bWVyYXRvcnMgdG8gc3BlY2lmeQorICogICAgICB3aGljaCBldmVudHMgdG8gc2VuZCB0byB0aGUgY2FsbGJhY2suIE90aGVyIGFjY2VwdGVkIHZhbHVlcyBhcmUgMCB0byBnZXQgYSBkZWZhdWx0IHNldCBvZgorICogICAgICBvbmx5IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBldmVudHMsIGFuZCAja0kyQ19TbGF2ZUFsbEV2ZW50cyB0byBlbmFibGUgYWxsIGV2ZW50cy4KKyAqCisgKiBAcmV0dmFsICNrU3RhdHVzX1N1Y2Nlc3MgU2xhdmUgdHJhbnNmZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuCisgKiBAcmV0dmFsICNrU3RhdHVzX0kyQ19CdXN5IFNsYXZlIHRyYW5zZmVycyBoYXZlIGFscmVhZHkgYmVlbiBzdGFydGVkIG9uIHRoaXMgaGFuZGxlLgorICovCitzdGF0dXNfdCBJMkNfU2xhdmVUcmFuc2Zlck5vbkJsb2NraW5nKEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgZXZlbnRNYXNrKTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIHRoZSBzbGF2ZSB0cmFuc2Zlci4KKyAqCisgKiBAbm90ZSBUaGlzIEFQSSBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIHRvIHN0b3Agc2xhdmUgZm9yIGhhbmRsaW5nIHRoZSBidXMgZXZlbnRzLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gaTJjX3NsYXZlX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlLgorICovCit2b2lkIEkyQ19TbGF2ZVRyYW5zZmVyQWJvcnQoSTJDX1R5cGUgKmJhc2UsIGkyY19zbGF2ZV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgc2xhdmUgdHJhbnNmZXIgcmVtYWluaW5nIGJ5dGVzIGR1cmluZyBhIGludGVycnVwdCBub24tYmxvY2tpbmcgdHJhbnNmZXIuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfc2xhdmVfaGFuZGxlX3Qgc3RydWN0dXJlLgorICogQHBhcmFtIGNvdW50IE51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBzbyBmYXIgYnkgdGhlIG5vbi1ibG9ja2luZyB0cmFuc2FjdGlvbi4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgY291bnQgaXMgSW52YWxpZC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSByZXR1cm4gdGhlIGNvdW50LgorICovCitzdGF0dXNfdCBJMkNfU2xhdmVUcmFuc2ZlckdldENvdW50KEkyQ19UeXBlICpiYXNlLCBpMmNfc2xhdmVfaGFuZGxlX3QgKmhhbmRsZSwgc2l6ZV90ICpjb3VudCk7CisKKy8qIQorICogQGJyaWVmIFNsYXZlIGludGVycnVwdCBoYW5kbGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gaTJjSGFuZGxlIHBvaW50ZXIgdG8gaTJjX3NsYXZlX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zZmVyIHN0YXRlCisgKi8KK3ZvaWQgSTJDX1NsYXZlVHJhbnNmZXJIYW5kbGVJUlEoSTJDX1R5cGUgKmJhc2UsIHZvaWQgKmkyY0hhbmRsZSk7CisKKy8qIEB9ICovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZiAvKl9jcGx1c3BsdXMuICovCisvKkB9Ki8KKworI2VuZGlmIC8qIF9GU0xfSTJDX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2kyY19lZG1hLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmNfZWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTQxNWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmNfZWRtYS5jCkBAIC0wLDAgKzEsNTY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9pMmNfZWRtYS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qPCEgQGJyZWlmIFN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBpMmNfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdC4gVGhlIHN0cnVjdHVyZSBpcyBwcml2YXRlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2kyY19tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZQoreworICAgIEkyQ19UeXBlICpiYXNlOworICAgIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlOworfSBpMmNfbWFzdGVyX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdDsKKworLyohIEBicmllZiBpMmMgbWFzdGVyIERNQSB0cmFuc2ZlciBzdGF0ZS4gKi8KK2VudW0gX2kyY19tYXN0ZXJfZG1hX3RyYW5zZmVyX3N0YXRlcworeworICAgIGtJZGxlU3RhdGUgPSAweDBVLCAgICAgICAgIC8qITwgSTJDIGJ1cyBpZGxlLiAqLworICAgIGtUcmFuc2ZlckRhdGFTdGF0ZSA9IDB4MVUsIC8qITwgNy1iaXQgYWRkcmVzcyBjaGVjayBzdGF0ZS4gKi8KK307CisKKy8qISBAYnJpZWYgQ29tbW9uIHNldHMgb2YgZmxhZ3MgdXNlZCBieSB0aGUgZHJpdmVyLiAqLworZW51bSBfaTJjX2ZsYWdfY29uc3RhbnRzCit7CisvKiEgQWxsIGZsYWdzIHdoaWNoIGFyZSBjbGVhcmVkIGJ5IHRoZSBkcml2ZXIgdXBvbiBzdGFydGluZyBhIHRyYW5zZmVyLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVEFSVF9TVE9QX0RFVEVDVAorICAgIGtDbGVhckZsYWdzID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIHwga0kyQ19JbnRQZW5kaW5nRmxhZyB8IGtJMkNfU3RhcnREZXRlY3RGbGFnIHwga0kyQ19TdG9wRGV0ZWN0RmxhZywKKyNlbGlmIGRlZmluZWQoRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfSTJDX0hBU19TVE9QX0RFVEVDVAorICAgIGtDbGVhckZsYWdzID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIHwga0kyQ19JbnRQZW5kaW5nRmxhZyB8IGtJMkNfU3RvcERldGVjdEZsYWcsCisjZWxzZQorICAgIGtDbGVhckZsYWdzID0ga0kyQ19BcmJpdHJhdGlvbkxvc3RGbGFnIHwga0kyQ19JbnRQZW5kaW5nRmxhZywKKyNlbmRpZgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIEVETUEgY2FsbGJhY2sgZm9yIEkyQyBtYXN0ZXIgRURNQSBkcml2ZXIuCisgKgorICogQHBhcmFtIGhhbmRsZSBFRE1BIGhhbmRsZXIgZm9yIEkyQyBtYXN0ZXIgRURNQSBkcml2ZXIKKyAqIEBwYXJhbSB1c2VyRGF0YSB1c2VyIHBhcmFtIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgSTJDX01hc3RlclRyYW5zZmVyQ2FsbGJhY2tFRE1BKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqdXNlckRhdGEsIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKTsKKworLyohCisgKiBAYnJpZWYgQ2hlY2sgYW5kIGNsZWFyIHN0YXR1cyBvcGVyYXRpb24uCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHN0YXR1cyBjdXJyZW50IGkyYyBoYXJkd2FyZSBzdGF0dXMuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBObyBlcnJvciBmb3VuZC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0IFRyYW5zZmVyIGVycm9yLCBhcmJpdHJhdGlvbiBsb3N0LgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19OYWsgUmVjZWl2ZWQgTmFrIGVycm9yLgorICovCitzdGF0aWMgc3RhdHVzX3QgSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihJMkNfVHlwZSAqYmFzZSwgdWludDMyX3Qgc3RhdHVzKTsKKworLyohCisgKiBAYnJpZWYgRURNQSBjb25maWcgZm9yIEkyQyBtYXN0ZXIgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgSTJDX01hc3RlclRyYW5zZmVyRURNQUNvbmZpZyhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBTZXQgdXAgbWFzdGVyIHRyYW5zZmVyLCBzZW5kIHNsYXZlIGFkZHJlc3MgYW5kIHN1YiBhZGRyZXNzKGlmIGFueSksIHdhaXQgdW50aWwgdGhlCisgKiB3YWl0IHVudGlsIGFkZHJlc3Mgc2VudCBzdGF0dXMgcmV0dXJuLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNmZXIgc3RhdGUKKyAqIEBwYXJhbSB4ZmVyIHBvaW50ZXIgdG8gaTJjX21hc3Rlcl90cmFuc2Zlcl90IHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RhdHVzX3QgSTJDX0luaXRUcmFuc2ZlclN0YXRlTWFjaGluZUVETUEoSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgR2V0IHRoZSBJMkMgaW5zdGFuY2UgZnJvbSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIEkyQyBpbnN0YW5jZS4KKyAqLworZXh0ZXJuIHVpbnQzMl90IEkyQ19HZXRJbnN0YW5jZShJMkNfVHlwZSAqYmFzZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qPCEgUHJpdmF0ZSBoYW5kbGUgb25seSB1c2VkIGZvciBpbnRlcm5hbGx5LiAqLworc3RhdGljIGkyY19tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90IHNfZWRtYVByaXZhdGVIYW5kbGVbRlNMX0ZFQVRVUkVfU09DX0kyQ19DT1VOVF07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgSTJDX01hc3RlclRyYW5zZmVyQ2FsbGJhY2tFRE1BKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqdXNlckRhdGEsIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKQoreworICAgIGkyY19tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90ICppMmNQcml2YXRlSGFuZGxlID0gKGkyY19tYXN0ZXJfZWRtYV9wcml2YXRlX2hhbmRsZV90ICopdXNlckRhdGE7CisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgLyogRGlzYWJsZSBETUEuICovCisgICAgSTJDX0VuYWJsZURNQShpMmNQcml2YXRlSGFuZGxlLT5iYXNlLCBmYWxzZSk7CisKKyAgICAvKiBTZW5kIHN0b3AgaWYga0kyQ19UcmFuc2Zlck5vU3RvcCBmbGFnIGlzIG5vdCBhc3NlcnRlZC4gKi8KKyAgICBpZiAoIShpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnRyYW5zZmVyLmZsYWdzICYga0kyQ19UcmFuc2Zlck5vU3RvcEZsYWcpKQorICAgIHsKKyAgICAgICAgaWYgKGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hhbmdlIHRvIHNlbmQgTkFLIGF0IHRoZSBsYXN0IGJ5dGUuICovCisgICAgICAgICAgICBpMmNQcml2YXRlSGFuZGxlLT5iYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworCisgICAgICAgICAgICAvKiBXYWl0IHRoZSBsYXN0IGRhdGEgdG8gYmUgcmVjZWl2ZWQuICovCisgICAgICAgICAgICB3aGlsZSAoIShpMmNQcml2YXRlSGFuZGxlLT5iYXNlLT5TICYga0kyQ19UcmFuc2ZlckNvbXBsZXRlRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFNlbmQgc3RvcCBzaWduYWwuICovCisgICAgICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyU3RvcChpMmNQcml2YXRlSGFuZGxlLT5iYXNlKTsKKworICAgICAgICAgICAgLyogUmVhZCB0aGUgbGFzdCBkYXRhIGJ5dGUuICovCisgICAgICAgICAgICAqKGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dHJhbnNmZXIuZGF0YSArIGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgLSAxKSA9CisgICAgICAgICAgICAgICAgaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+RDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdhaXQgdGhlIGxhc3QgZGF0YSB0byBiZSBzZW50LiAqLworICAgICAgICAgICAgd2hpbGUgKCEoaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZS0+UyAmIGtJMkNfVHJhbnNmZXJDb21wbGV0ZUZsYWcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTZW5kIHN0b3Agc2lnbmFsLiAqLworICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0b3AoaTJjUHJpdmF0ZUhhbmRsZS0+YmFzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGkyY1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hhbmdlIHRvIHNlbmQgTkFLIGF0IHRoZSBsYXN0IGJ5dGUuICovCisgICAgICAgICAgICBpMmNQcml2YXRlSGFuZGxlLT5iYXNlLT5DMSB8PSBJMkNfQzFfVFhBS19NQVNLOworCisgICAgICAgICAgICAvKiBXYWl0IHRoZSBsYXN0IGRhdGEgdG8gYmUgcmVjZWl2ZWQuICovCisgICAgICAgICAgICB3aGlsZSAoIShpMmNQcml2YXRlSGFuZGxlLT5iYXNlLT5TICYga0kyQ19UcmFuc2ZlckNvbXBsZXRlRmxhZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoYW5nZSBkaXJlY3Rpb24gdG8gc2VuZC4gKi8KKyAgICAgICAgICAgIGkyY1ByaXZhdGVIYW5kbGUtPmJhc2UtPkMxIHw9IEkyQ19DMV9UWF9NQVNLOworCisgICAgICAgICAgICAvKiBSZWFkIHRoZSBsYXN0IGRhdGEgYnl0ZS4gKi8KKyAgICAgICAgICAgICooaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT50cmFuc2Zlci5kYXRhICsgaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT50cmFuc2Zlci5kYXRhU2l6ZSAtIDEpID0KKyAgICAgICAgICAgICAgICBpMmNQcml2YXRlSGFuZGxlLT5iYXNlLT5EOworICAgICAgICB9CisgICAgfQorCisgICAgaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5zdGF0ZSA9IGtJZGxlU3RhdGU7CisKKyAgICBpZiAoaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2spCisgICAgeworICAgICAgICBpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPmNvbXBsZXRpb25DYWxsYmFjayhpMmNQcml2YXRlSGFuZGxlLT5iYXNlLCBpMmNQcml2YXRlSGFuZGxlLT5oYW5kbGUsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT51c2VyRGF0YSk7CisgICAgfQorfQorCitzdGF0aWMgc3RhdHVzX3QgSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihJMkNfVHlwZSAqYmFzZSwgdWludDMyX3Qgc3RhdHVzKQoreworICAgIHN0YXR1c190IHJlc3VsdCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIC8qIENoZWNrIGFyYml0cmF0aW9uIGxvc3QuICovCisgICAgaWYgKHN0YXR1cyAmIGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZykKKyAgICB7CisgICAgICAgIC8qIENsZWFyIGFyYml0cmF0aW9uIGxvc3QgZmxhZy4gKi8KKyAgICAgICAgYmFzZS0+UyA9IGtJMkNfQXJiaXRyYXRpb25Mb3N0RmxhZzsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQXJiaXRyYXRpb25Mb3N0OworICAgIH0KKyAgICAvKiBDaGVjayBOQUsgKi8KKyAgICBlbHNlIGlmIChzdGF0dXMgJiBrSTJDX1JlY2VpdmVOYWtGbGFnKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfTmFrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBJMkNfSW5pdFRyYW5zZmVyU3RhdGVNYWNoaW5lRURNQShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgKnhmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHhmZXIpOworCisgICAgc3RhdHVzX3QgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgaWYgKGhhbmRsZS0+c3RhdGUgIT0ga0lkbGVTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0kyQ19CdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpMmNfZGlyZWN0aW9uX3QgZGlyZWN0aW9uID0geGZlci0+ZGlyZWN0aW9uOworCisgICAgICAgIC8qIEluaXQgdGhlIGhhbmRsZSBtZW1iZXIuICovCisgICAgICAgIGhhbmRsZS0+dHJhbnNmZXIgPSAqeGZlcjsKKworICAgICAgICAvKiBTYXZlIHRvdGFsIHRyYW5zZmVyIHNpemUuICovCisgICAgICAgIGhhbmRsZS0+dHJhbnNmZXJTaXplID0geGZlci0+ZGF0YVNpemU7CisKKyAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IGtUcmFuc2ZlckRhdGFTdGF0ZTsKKworICAgICAgICAvKiBDbGVhciBhbGwgc3RhdHVzIGJlZm9yZSB0cmFuc2Zlci4gKi8KKyAgICAgICAgSTJDX01hc3RlckNsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0NsZWFyRmxhZ3MpOworCisgICAgICAgIC8qIENoYW5nZSB0byBzZW5kIHdyaXRlIGFkZHJlc3Mgd2hlbiBpdCdzIGEgcmVhZCBvcGVyYXRpb24gd2l0aCBjb21tYW5kLiAqLworICAgICAgICBpZiAoKHhmZXItPnN1YmFkZHJlc3NTaXplID4gMCkgJiYgKHhmZXItPmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpKQorICAgICAgICB7CisgICAgICAgICAgICBkaXJlY3Rpb24gPSBrSTJDX1dyaXRlOworICAgICAgICB9CisKKyAgICAgICAgLyogSWYgcmVwZWF0ZWQgc3RhcnQgaXMgcmVxdWVzdGVkLCBzZW5kIHJlcGVhdGVkIHN0YXJ0LiAqLworICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5mbGFncyAmIGtJMkNfVHJhbnNmZXJSZXBlYXRlZFN0YXJ0RmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoYmFzZSwgaGFuZGxlLT50cmFuc2Zlci5zbGF2ZUFkZHJlc3MsIGRpcmVjdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBGb3Igbm9ybWFsIHRyYW5zZmVyLCBzZW5kIHN0YXJ0LiAqLworICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBJMkNfTWFzdGVyU3RhcnQoYmFzZSwgaGFuZGxlLT50cmFuc2Zlci5zbGF2ZUFkZHJlc3MsIGRpcmVjdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSdzIHRyYW5zZmVyIGVycm9yLiAqLworICAgICAgICByZXN1bHQgPSBJMkNfQ2hlY2tBbmRDbGVhckVycm9yKGJhc2UsIGJhc2UtPlMpOworCisgICAgICAgIC8qIFJldHVybiBpZiBlcnJvci4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBrU3RhdHVzX0kyQ19OYWspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfQWRkcl9OYWs7CisKKyAgICAgICAgICAgICAgICBpZiAoSTJDX01hc3RlclN0b3AoYmFzZSkgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JMkNfVGltZW91dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAoaGFuZGxlLT5jb21wbGV0aW9uQ2FsbGJhY2spKGJhc2UsIGhhbmRsZSwgcmVzdWx0LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZW5kIHN1YmFkZHJlc3MuICovCisgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3NTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENsZWFyIGludGVycnVwdCBwZW5kaW5nIGZsYWcuICovCisgICAgICAgICAgICAgICAgYmFzZS0+UyA9IGtJMkNfSW50UGVuZGluZ0ZsYWc7CisKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnRyYW5zZmVyLnN1YmFkZHJlc3NTaXplLS07CisgICAgICAgICAgICAgICAgYmFzZS0+RCA9ICgoaGFuZGxlLT50cmFuc2Zlci5zdWJhZGRyZXNzKSA+PiAoOCAqIGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzc1NpemUpKTsKKworICAgICAgICAgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZS4gKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoIShiYXNlLT5TICYga0kyQ19JbnRQZW5kaW5nRmxhZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlJ3MgdHJhbnNmZXIgZXJyb3IuICovCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSTJDX0NoZWNrQW5kQ2xlYXJFcnJvcihiYXNlLCBiYXNlLT5TKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSB3aGlsZSAoKGhhbmRsZS0+dHJhbnNmZXIuc3ViYWRkcmVzc1NpemUgPiAwKSAmJiAocmVzdWx0ID09IGtTdGF0dXNfU3VjY2VzcykpOworCisgICAgICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENsZWFyIHBlbmRpbmcgZmxhZy4gKi8KKyAgICAgICAgICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAgICAgICAgIC8qIFNlbmQgcmVwZWF0ZWQgc3RhcnQgYW5kIHNsYXZlIGFkZHJlc3MuICovCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclJlcGVhdGVkU3RhcnQoYmFzZSwgaGFuZGxlLT50cmFuc2Zlci5zbGF2ZUFkZHJlc3MsIGtJMkNfUmVhZCk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCEoYmFzZS0+UyAmIGtJMkNfSW50UGVuZGluZ0ZsYWcpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSdzIHRyYW5zZmVyIGVycm9yLiAqLworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEkyQ19DaGVja0FuZENsZWFyRXJyb3IoYmFzZSwgYmFzZS0+Uyk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDbGVhciBwZW5kaW5nIGZsYWcuICovCisgICAgICAgIGJhc2UtPlMgPSBrSTJDX0ludFBlbmRpbmdGbGFnOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckVETUFDb25maWcoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgdHJhbnNmZXJfY29uZmlnOworCisgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICB7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5zcmNBZGRyID0gKHVpbnQzMl90KUkyQ19HZXREYXRhUmVnQWRkcihiYXNlKTsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLmRlc3RBZGRyID0gKHVpbnQzMl90KShoYW5kbGUtPnRyYW5zZmVyLmRhdGEpOworICAgICAgICB0cmFuc2Zlcl9jb25maWcubWFqb3JMb29wQ291bnRzID0gKGhhbmRsZS0+dHJhbnNmZXIuZGF0YVNpemUgLSAxKTsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLnNyY1RyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLnNyY09mZnNldCA9IDA7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5kZXN0VHJhbnNmZXJTaXplID0ga0VETUFfVHJhbnNmZXJTaXplMUJ5dGVzOworICAgICAgICB0cmFuc2Zlcl9jb25maWcuZGVzdE9mZnNldCA9IDE7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5taW5vckxvb3BCeXRlcyA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5zcmNBZGRyID0gKHVpbnQzMl90KShoYW5kbGUtPnRyYW5zZmVyLmRhdGEgKyAxKTsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLmRlc3RBZGRyID0gKHVpbnQzMl90KUkyQ19HZXREYXRhUmVnQWRkcihiYXNlKTsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLm1ham9yTG9vcENvdW50cyA9IChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplIC0gMSk7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5zcmNUcmFuc2ZlclNpemUgPSBrRURNQV9UcmFuc2ZlclNpemUxQnl0ZXM7CisgICAgICAgIHRyYW5zZmVyX2NvbmZpZy5zcmNPZmZzZXQgPSAxOworICAgICAgICB0cmFuc2Zlcl9jb25maWcuZGVzdFRyYW5zZmVyU2l6ZSA9IGtFRE1BX1RyYW5zZmVyU2l6ZTFCeXRlczsKKyAgICAgICAgdHJhbnNmZXJfY29uZmlnLmRlc3RPZmZzZXQgPSAwOworICAgICAgICB0cmFuc2Zlcl9jb25maWcubWlub3JMb29wQnl0ZXMgPSAxOworICAgIH0KKworICAgIC8qIFN0b3JlIHRoZSBpbml0aWFsbHkgY29uZmlndXJlZCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW50byB0aGUgSTJDIGhhbmRsZSAqLworICAgIGhhbmRsZS0+bmJ5dGVzID0gdHJhbnNmZXJfY29uZmlnLm1pbm9yTG9vcEJ5dGVzOworCisgICAgRURNQV9TdWJtaXRUcmFuc2ZlcihoYW5kbGUtPmRtYUhhbmRsZSwgJnRyYW5zZmVyX2NvbmZpZyk7CisgICAgRURNQV9TdGFydFRyYW5zZmVyKGhhbmRsZS0+ZG1hSGFuZGxlKTsKK30KKwordm9pZCBJMkNfTWFzdGVyQ3JlYXRlRURNQUhhbmRsZShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRtYV9oYW5kbGVfdCAqZWRtYUhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoZWRtYUhhbmRsZSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IEkyQ19HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIC8qIFplcm8gaGFuZGxlLiAqLworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICAvKiBTZXQgdGhlIHVzZXIgY2FsbGJhY2sgYW5kIHVzZXJEYXRhLiAqLworICAgIGhhbmRsZS0+Y29tcGxldGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworCisgICAgLyogU2V0IHRoZSBiYXNlIGZvciB0aGUgaGFuZGxlLiAqLworICAgIGJhc2UgPSBiYXNlOworCisgICAgLyogU2V0IHRoZSBoYW5kbGUgZm9yIEVETUEuICovCisgICAgaGFuZGxlLT5kbWFIYW5kbGUgPSBlZG1hSGFuZGxlOworCisgICAgc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uYmFzZSA9IGJhc2U7CisgICAgc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uaGFuZGxlID0gaGFuZGxlOworCisgICAgRURNQV9TZXRDYWxsYmFjayhlZG1hSGFuZGxlLCAoZWRtYV9jYWxsYmFjaylJMkNfTWFzdGVyVHJhbnNmZXJDYWxsYmFja0VETUEsICZzX2VkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXSk7Cit9CisKK3N0YXR1c190IEkyQ19NYXN0ZXJUcmFuc2ZlckVETUEoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgKnhmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHhmZXIpOworCisgICAgc3RhdHVzX3QgcmVzdWx0OworICAgIHVpbnQ4X3QgdG1wUmVnOworICAgIHZvbGF0aWxlIHVpbnQ4X3QgZHVtbXkgPSAwOworCisgICAgLyogQWRkIHRoaXMgdG8gYXZvaWQgYnVpbGQgd2FybmluZy4gKi8KKyAgICBkdW1teSsrOworCisgICAgLyogRGlzYWJsZSBkbWEgeGZlci4gKi8KKyAgICBJMkNfRW5hYmxlRE1BKGJhc2UsIGZhbHNlKTsKKworICAgIC8qIFNlbmQgYWRkcmVzcyBhbmQgY29tbWFuZCBidWZmZXIoaWYgdGhlcmUgaXMpLCB1bnRpbCBzZW5kZGF0YSBwaGFzZSBvciByZWNlaXZlIGRhdGEgcGhhc2UuICovCisgICAgcmVzdWx0ID0gSTJDX0luaXRUcmFuc2ZlclN0YXRlTWFjaGluZUVETUEoYmFzZSwgaGFuZGxlLCB4ZmVyKTsKKworICAgIGlmIChyZXN1bHQpCisgICAgeworICAgICAgICAvKiBTZW5kIHN0b3AgaWYgcmVjZWl2ZWQgTmFrLiAqLworICAgICAgICBpZiAocmVzdWx0ID09IGtTdGF0dXNfSTJDX05haykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEkyQ19NYXN0ZXJTdG9wKGJhc2UpICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0kyQ19UaW1lb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogUmVzZXQgdGhlIHN0YXRlIHRvIGlkbGUgc3RhdGUuICovCisgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBrSWRsZVN0YXRlOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogQ29uZmlndXJlIGRtYSB0cmFuc2Zlci4gKi8KKyAgICAvKiBGb3IgaTJjIHNlbmQsIG5lZWQgdG8gc2VuZCAxIGJ5dGUgZmlyc3QgdG8gdHJpZ2dlciB0aGUgZG1hLCBmb3IgaTJjIHJlYWQsCisgICAgbmVlZCB0byBzZW5kIHN0b3AgYmVmb3JlIHJlYWRpbmcgdGhlIGxhc3QgYnl0ZSwgc28gdGhlIGRtYSB0cmFuc2ZlciBzaXplIHNob3VsZAorICAgIGJlICh4U2l6ZSAtIDEpLiAqLworICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRhdGFTaXplID4gMSkKKyAgICB7CisgICAgICAgIEkyQ19NYXN0ZXJUcmFuc2ZlckVETUFDb25maWcoYmFzZSwgaGFuZGxlKTsKKyAgICAgICAgaWYgKGhhbmRsZS0+dHJhbnNmZXIuZGlyZWN0aW9uID09IGtJMkNfUmVhZCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hhbmdlIGRpcmVjdGlvbiBmb3IgcmVjZWl2ZS4gKi8KKyAgICAgICAgICAgIGJhc2UtPkMxICY9IH4oSTJDX0MxX1RYX01BU0sgfCBJMkNfQzFfVFhBS19NQVNLKTsKKworICAgICAgICAgICAgLyogUmVhZCBkdW1teSB0byByZWxlYXNlIHRoZSBidXMuICovCisgICAgICAgICAgICBkdW1teSA9IGJhc2UtPkQ7CisKKyAgICAgICAgICAgIC8qIEVuYWJlIGRtYSB0cmFuc2Zlci4gKi8KKyAgICAgICAgICAgIEkyQ19FbmFibGVETUEoYmFzZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBFbmFiZSBkbWEgdHJhbnNmZXIuICovCisgICAgICAgICAgICBJMkNfRW5hYmxlRE1BKGJhc2UsIHRydWUpOworCisgICAgICAgICAgICAvKiBTZW5kIHRoZSBmaXJzdCBkYXRhLiAqLworICAgICAgICAgICAgYmFzZS0+RCA9ICpoYW5kbGUtPnRyYW5zZmVyLmRhdGE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvKiBJZiB0cmFuc2ZlciBzaXplIGlzIDEsIHVzZSBwb2xsaW5nIG1ldGhvZC4gKi8KKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUtPnRyYW5zZmVyLmRpcmVjdGlvbiA9PSBrSTJDX1JlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRtcFJlZyA9IGJhc2UtPkMxOworCisgICAgICAgICAgICAvKiBDaGFuZ2UgZGlyZWN0aW9uIHRvIFJ4LiAqLworICAgICAgICAgICAgdG1wUmVnICY9IH5JMkNfQzFfVFhfTUFTSzsKKworICAgICAgICAgICAgLyogQ29uZmlndXJlIHNlbmQgTkFLICovCisgICAgICAgICAgICB0bXBSZWcgfD0gSTJDX0MxX1RYQUtfTUFTSzsKKworICAgICAgICAgICAgYmFzZS0+QzEgPSB0bXBSZWc7CisKKyAgICAgICAgICAgIC8qIFJlYWQgZHVtbXkgdG8gcmVsZWFzZSB0aGUgYnVzLiAqLworICAgICAgICAgICAgZHVtbXkgPSBiYXNlLT5EOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+RCA9ICpoYW5kbGUtPnRyYW5zZmVyLmRhdGE7CisgICAgICAgIH0KKworICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgdHJhbnNmZXIgY29tcGxldGUuICovCisgICAgICAgIHdoaWxlICghKGJhc2UtPlMgJiBrSTJDX0ludFBlbmRpbmdGbGFnKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLyogQ2xlYXIgcGVuZGluZyBmbGFnLiAqLworICAgICAgICBiYXNlLT5TID0ga0kyQ19JbnRQZW5kaW5nRmxhZzsKKworICAgICAgICAvKiBTZW5kIHN0b3AgaWYga0kyQ19UcmFuc2Zlck5vU3RvcCBmbGFnIGlzIG5vdCBhc3NlcnRlZC4gKi8KKyAgICAgICAgaWYgKCEoaGFuZGxlLT50cmFuc2Zlci5mbGFncyAmIGtJMkNfVHJhbnNmZXJOb1N0b3BGbGFnKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gSTJDX01hc3RlclN0b3AoYmFzZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGFuZ2UgZGlyZWN0aW9uIHRvIHNlbmQuICovCisgICAgICAgICAgICBiYXNlLT5DMSB8PSBJMkNfQzFfVFhfTUFTSzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlYWQgdGhlIGxhc3QgYnl0ZSBvZiBkYXRhLiAqLworICAgICAgICBpZiAoaGFuZGxlLT50cmFuc2Zlci5kaXJlY3Rpb24gPT0ga0kyQ19SZWFkKQorICAgICAgICB7CisgICAgICAgICAgICAqaGFuZGxlLT50cmFuc2Zlci5kYXRhID0gYmFzZS0+RDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSB0byBpZGxlLiAqLworICAgICAgICBoYW5kbGUtPnN0YXRlID0ga0lkbGVTdGF0ZTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJHZXRDb3VudEVETUEoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KQoreworICAgIGFzc2VydChoYW5kbGUtPmRtYUhhbmRsZSk7CisKKyAgICBpZiAoIWNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmIChrSWRsZVN0YXRlICE9IGhhbmRsZS0+c3RhdGUpCisgICAgeworICAgICAgICAqY291bnQgPSAoaGFuZGxlLT50cmFuc2ZlclNpemUgLQorICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KWhhbmRsZS0+bmJ5dGVzICoKKyAgICAgICAgICAgICAgICAgICAgICBFRE1BX0dldFJlbWFpbmluZ01ham9yTG9vcENvdW50KGhhbmRsZS0+ZG1hSGFuZGxlLT5iYXNlLCBoYW5kbGUtPmRtYUhhbmRsZS0+Y2hhbm5lbCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqY291bnQgPSBoYW5kbGUtPnRyYW5zZmVyU2l6ZTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckFib3J0RURNQShJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgRURNQV9BYm9ydFRyYW5zZmVyKGhhbmRsZS0+ZG1hSGFuZGxlKTsKKworICAgIC8qIERpc2FibGUgZG1hIHRyYW5zZmVyLiAqLworICAgIEkyQ19FbmFibGVETUEoYmFzZSwgZmFsc2UpOworCisgICAgLyogUmVzZXQgdGhlIHN0YXRlIHRvIGlkbGUuICovCisgICAgaGFuZGxlLT5zdGF0ZSA9IGtJZGxlU3RhdGU7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmNfZWRtYS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2VkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGNiNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2VkbWEuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfSTJDX0RNQV9IXworI2RlZmluZSBfRlNMX0kyQ19ETUFfSF8KKworI2luY2x1ZGUgImZzbF9pMmMuaCIKKyNpbmNsdWRlICJmc2xfZG1hbXV4LmgiCisjaW5jbHVkZSAiZnNsX2VkbWEuaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBpMmNfZWRtYV9kcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQGJyaWVmIEkyQyBtYXN0ZXIgZURNQSBoYW5kbGUgdHlwZWRlZi4gKi8KK3R5cGVkZWYgc3RydWN0IF9pMmNfbWFzdGVyX2VkbWFfaGFuZGxlIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdDsKKworLyohIEBicmllZiBJMkMgbWFzdGVyIGVETUEgdHJhbnNmZXIgY2FsbGJhY2sgdHlwZWRlZi4gKi8KK3R5cGVkZWYgdm9pZCAoKmkyY19tYXN0ZXJfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190KShJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiEgQGJyaWVmIEkyQyBtYXN0ZXIgZURNQSB0cmFuc2ZlciBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgX2kyY19tYXN0ZXJfZWRtYV9oYW5kbGUKK3sKKyAgICBpMmNfbWFzdGVyX3RyYW5zZmVyX3QgdHJhbnNmZXI7IC8qITwgSTJDIG1hc3RlciB0cmFuc2ZlciBzdHJ1Y3R1cmUuICovCisgICAgc2l6ZV90IHRyYW5zZmVyU2l6ZTsgICAgICAgICAgICAvKiE8IFRvdGFsIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLiAqLworICAgIHVpbnQ4X3QgbmJ5dGVzOyAgICAgICAgICAgICAgICAgLyohPCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW5pdGlhbGx5IGNvbmZpZ3VyZWQuICovCisgICAgdWludDhfdCBzdGF0ZTsgICAgICAgICAgICAgICAgICAvKiE8IEkyQyBtYXN0ZXIgdHJhbnNmZXIgc3RhdHVzLiAqLworICAgIGVkbWFfaGFuZGxlX3QgKmRtYUhhbmRsZTsgICAgICAgLyohPCBUaGUgZURNQSBoYW5kbGVyIHVzZWQuICovCisgICAgaTJjX21hc3Rlcl9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrOyAvKiE8IEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHRoZSBlRE1BIHRyYW5zZmVyIGlzIGZpbmlzaGVkLiAqLworICAgIHZvaWQgKnVzZXJEYXRhOyAgICAgICAgIC8qITwgQSBjYWxsYmFjayBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLypfY3BsdXNwbHVzLiAqLworCisvKiEKKyAqIEBuYW1lIEkyQyBCbG9jayBlRE1BIFRyYW5zZmVyIE9wZXJhdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgSTJDIGhhbmRsZSB3aGljaCBpcyB1c2VkIGluIHRyYW5zY2F0aW9uYWwgZnVuY3Rpb25zLgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgQSBwb2ludGVyIHRvIHRoZSBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlLgorICogQHBhcmFtIGNhbGxiYWNrIEEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwYXJhbSB1c2VyRGF0YSBBIHVzZXIgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBAcGFyYW0gZWRtYUhhbmRsZSBlRE1BIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIEkyQ19NYXN0ZXJDcmVhdGVFRE1BSGFuZGxlKEkyQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjX21hc3Rlcl9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICplZG1hSGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgYSBtYXN0ZXIgZURNQSBub24tYmxvY2tpbmcgdHJhbnNmZXIgb24gdGhlIEkyQyBidXMuCisgKgorICogQHBhcmFtIGJhc2UgSTJDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBBIHBvaW50ZXIgdG8gdGhlIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0geGZlciBBIHBvaW50ZXIgdG8gdGhlIHRyYW5zZmVyIHN0cnVjdHVyZSBvZiBpMmNfbWFzdGVyX3RyYW5zZmVyX3QuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBTdWNlc3NmdWxseSBjb21wbGV0ZWQgdGhlIGRhdGEgdHJhbnNtaXNzaW9uLgorICogQHJldHZhbCBrU3RhdHVzX0kyQ19CdXN5IEEgcHJldmlvdXMgdHJhbnNtaXNzaW9uIGlzIHN0aWxsIG5vdCBmaW5pc2hlZC4KKyAqIEByZXR2YWwga1N0YXR1c19JMkNfVGltZW91dCBUcmFuc2ZlciBlcnJvciwgd2FpdHMgZm9yIGEgc2lnbmFsIHRpbWVvdXQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSTJDX0FyYml0cmF0aW9uTG9zdCBUcmFuc2ZlciBlcnJvciwgYXJiaXRyYXRpb24gbG9zdC4KKyAqIEByZXR2YWwga1N0YXRhdXNfSTJDX05hayBUcmFuc2ZlciBlcnJvciwgcmVjZWl2ZSBOQUsgZHVyaW5nIHRyYW5zZmVyLgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJFRE1BKEkyQ19UeXBlICpiYXNlLCBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyBhIG1hc3RlciB0cmFuc2ZlciBzdGF0dXMgZHVyaW5nIHRoZSBlRE1BIG5vbi1ibG9ja2luZyB0cmFuc2Zlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBJMkMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIEEgcG9pbnRlciB0byB0aGUgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBjb3VudCBBIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBieSB0aGUgbm9uLWJsb2NraW5nIHRyYW5zYWN0aW9uLgorICovCitzdGF0dXNfdCBJMkNfTWFzdGVyVHJhbnNmZXJHZXRDb3VudEVETUEoSTJDX1R5cGUgKmJhc2UsIGkyY19tYXN0ZXJfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBzaXplX3QgKmNvdW50KTsKKworLyohCisgKiBAYnJpZWYgQWJvcnRzIGEgbWFzdGVyIGVETUEgbm9uLWJsb2NraW5nIHRyYW5zZmVyIGVhcmx5LgorICoKKyAqIEBwYXJhbSBiYXNlIEkyQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgQSBwb2ludGVyIHRvIHRoZSBpMmNfbWFzdGVyX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlLgorICovCit2b2lkIEkyQ19NYXN0ZXJUcmFuc2ZlckFib3J0RURNQShJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiBAfSAqLworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLypfY3BsdXNwbHVzLiAqLworLypAfSovCisjZW5kaWYgLypfRlNMX0kyQ19ETUFfSF8qLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2ZyZWVydG9zLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmNfZnJlZXJ0b3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIyZmJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2ZyZWVydG9zLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2kyY19mcmVlcnRvcy5oIgorCitzdGF0aWMgdm9pZCBJMkNfUlRPU19DYWxsYmFjayhJMkNfVHlwZSAqYmFzZSwgaTJjX21hc3Rlcl9oYW5kbGVfdCAqZHJ2X2hhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBpMmNfcnRvc19oYW5kbGVfdCAqaGFuZGxlID0gKGkyY19ydG9zX2hhbmRsZV90ICopdXNlckRhdGE7CisgICAgQmFzZVR5cGVfdCByZXNjaGVkdWxlOworICAgIGhhbmRsZS0+YXN5bmNfc3RhdHVzID0gc3RhdHVzOworICAgIHhTZW1hcGhvcmVHaXZlRnJvbUlTUihoYW5kbGUtPnNlbWFwaG9yZSwgJnJlc2NoZWR1bGUpOworICAgIHBvcnRZSUVMRF9GUk9NX0lTUihyZXNjaGVkdWxlKTsKK30KKworc3RhdHVzX3QgSTJDX1JUT1NfSW5pdChpMmNfcnRvc19oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICBJMkNfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaTJjX21hc3Rlcl9jb25maWdfdCAqbWFzdGVyQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNDbG9ja19IeikKK3sKKyAgICBpZiAoaGFuZGxlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBtZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoaTJjX3J0b3NfaGFuZGxlX3QpKTsKKyNpZiAoY29uZmlnU1VQUE9SVF9TVEFUSUNfQUxMT0NBVElPTiA9PSAxKQorICAgIGhhbmRsZS0+bXV0ZXggPSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXhTdGF0aWMoJmhhbmRsZS0+bXV0ZXhCdWZmZXIpOworI2Vsc2UKKyAgICBoYW5kbGUtPm11dGV4ID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAoaGFuZGxlLT5tdXRleCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBoYW5kbGUtPnNlbWFwaG9yZSA9IHhTZW1hcGhvcmVDcmVhdGVCaW5hcnlTdGF0aWMoJmhhbmRsZS0+c2VtYXBob3JlQnVmZmVyKTsKKyNlbHNlCisgICAgaGFuZGxlLT5zZW1hcGhvcmUgPSB4U2VtYXBob3JlQ3JlYXRlQmluYXJ5KCk7CisjZW5kaWYKKyAgICBpZiAoaGFuZGxlLT5zZW1hcGhvcmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT5tdXRleCk7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorCisgICAgaGFuZGxlLT5iYXNlID0gYmFzZTsKKworICAgIEkyQ19NYXN0ZXJJbml0KGhhbmRsZS0+YmFzZSwgbWFzdGVyQ29uZmlnLCBzcmNDbG9ja19Ieik7CisgICAgSTJDX01hc3RlclRyYW5zZmVyQ3JlYXRlSGFuZGxlKGJhc2UsICZoYW5kbGUtPmRydl9oYW5kbGUsIEkyQ19SVE9TX0NhbGxiYWNrLCAodm9pZCAqKWhhbmRsZSk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBJMkNfUlRPU19EZWluaXQoaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBJMkNfTWFzdGVyRGVpbml0KGhhbmRsZS0+YmFzZSk7CisKKyAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+c2VtYXBob3JlKTsKKyAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+bXV0ZXgpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgSTJDX1JUT1NfVHJhbnNmZXIoaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp0cmFuc2ZlcikKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvKiBMb2NrIHJlc291cmNlIG11dGV4ICovCisgICAgaWYgKHhTZW1hcGhvcmVUYWtlKGhhbmRsZS0+bXV0ZXgsIHBvcnRNQVhfREVMQVkpICE9IHBkVFJVRSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0kyQ19CdXN5OworICAgIH0KKworICAgIHN0YXR1cyA9IEkyQ19NYXN0ZXJUcmFuc2Zlck5vbkJsb2NraW5nKGhhbmRsZS0+YmFzZSwgJmhhbmRsZS0+ZHJ2X2hhbmRsZSwgdHJhbnNmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgeFNlbWFwaG9yZUdpdmUoaGFuZGxlLT5tdXRleCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogV2FpdCBmb3IgdHJhbnNmZXIgdG8gZmluaXNoICovCisgICAgeFNlbWFwaG9yZVRha2UoaGFuZGxlLT5zZW1hcGhvcmUsIHBvcnRNQVhfREVMQVkpOworCisgICAgLyogVW5sb2NrIHJlc291cmNlIG11dGV4ICovCisgICAgeFNlbWFwaG9yZUdpdmUoaGFuZGxlLT5tdXRleCk7CisKKyAgICAvKiBSZXR1cm4gc3RhdHVzIGNhcHR1cmVkIGJ5IGNhbGxiYWNrIGZ1bmN0aW9uICovCisgICAgcmV0dXJuIGhhbmRsZS0+YXN5bmNfc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2ZyZWVydG9zLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9pMmNfZnJlZXJ0b3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVkMmQwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfaTJjX2ZyZWVydG9zLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfX0ZTTF9JMkNfRlJFRVJUT1NfSF9fCisjZGVmaW5lIF9fRlNMX0kyQ19GUkVFUlRPU19IX18KKworI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiCisjaW5jbHVkZSAiRnJlZVJUT1MuaCIKKyNpbmNsdWRlICJwb3J0YWJsZS5oIgorI2luY2x1ZGUgInNlbXBoci5oIgorCisjaW5jbHVkZSAiZnNsX2kyYy5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGkyY19mcmVlcnRvc19kcml2ZXIgSTJDIEZyZWVSVE9TIGRyaXZlcgorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGNvbmQgUlRPU19QUklWQVRFCisgKiBAYnJpZWYgSTJDIEZyZWVSVE9TIGhhbmRsZQorICovCit0eXBlZGVmIHN0cnVjdCBfaTJjX3J0b3NfaGFuZGxlCit7CisgICAgSTJDX1R5cGUgKmJhc2U7ICAgICAgICAgICAgICAgICAvKiE8IEkyQyBiYXNlIGFkZHJlc3MgKi8KKyAgICBpMmNfbWFzdGVyX2hhbmRsZV90IGRydl9oYW5kbGU7IC8qITwgQSBoYW5kbGUgb2YgdGhlIHVuZGVybHlpbmcgZHJpdmVyLCB0cmVhdGVkIGFzIG9wYXF1ZSBieSB0aGUgUlRPUyBsYXllciAqLworICAgIHN0YXR1c190IGFzeW5jX3N0YXR1czsgICAgICAgICAgLyohPCBUcmFuc2FjdGlvbmFsIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGRyaXZlciAqLworICAgIFNlbWFwaG9yZUhhbmRsZV90IG11dGV4OyAgICAgICAgLyohPCBBIG11dGV4IHRvIGxvY2sgdGhlIGhhbmRsZSBkdXJpbmcgYSB0cmFuc2ZlciAqLworICAgIFNlbWFwaG9yZUhhbmRsZV90IHNlbWFwaG9yZTsgICAgLyohPCBBIHNlbWFwaG9yZSB0byBub3RpZnkgYW5kIHVuYmxvY2sgdGFzayB3aGVuIHRoZSB0cmFuc2ZlciBlbmRzICovCisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBTdGF0aWNTZW1hcGhvcmVfdCBtdXRleEJ1ZmZlcjsgICAgIC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBtdXRleCAqLworICAgIFN0YXRpY1NlbWFwaG9yZV90IHNlbWFwaG9yZUJ1ZmZlcjsgLyohPCBTdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yIHNlbWFwaG9yZSAqLworI2VuZGlmCit9IGkyY19ydG9zX2hhbmRsZV90OworLyohIFxlbmRjb25kICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBJMkMgUlRPUyBPcGVyYXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgSTJDLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEkyQyBtb2R1bGUgYW5kIHRoZSByZWxhdGVkIFJUT1MgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBSVE9TIEkyQyBoYW5kbGUsIHRoZSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBzcGFjZSBmb3IgUlRPUyBjb250ZXh0LgorICogQHBhcmFtIGJhc2UgVGhlIHBvaW50ZXIgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgaW5zdGFuY2UgdG8gaW5pdGlhbGl6ZS4KKyAqIEBwYXJhbSBtYXN0ZXJDb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIHNldC11cCBJMkMgaW4gbWFzdGVyIG1vZGUuCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogVGhlIGZyZXF1ZW5jeSBvZiBhbiBpbnB1dCBjbG9jayBvZiB0aGUgSTJDIG1vZHVsZS4KKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3N0YXR1c190IEkyQ19SVE9TX0luaXQoaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgSTJDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGkyY19tYXN0ZXJfY29uZmlnX3QgKm1hc3RlckNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjQ2xvY2tfSHopOworCisvKiEKKyAqIEBicmllZiBEZWluaXRpYWxpemVzIHRoZSBJMkMuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWluaXRpYWxpemVzIHRoZSBJMkMgbW9kdWxlIGFuZCB0aGUgcmVsYXRlZCBSVE9TIGNvbnRleHQuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBJMkMgaGFuZGxlLgorICovCitzdGF0dXNfdCBJMkNfUlRPU19EZWluaXQoaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIFBlcmZvcm1zIHRoZSBJMkMgdHJhbnNmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgSTJDIHRyYW5zZmVyIGFjY29yZGluZyB0byB0aGUgZGF0YSBnaXZlbiBpbiB0aGUgdHJhbnNmZXIgc3RydWN0dXJlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgSTJDIGhhbmRsZS4KKyAqIEBwYXJhbSB0cmFuc2ZlciBBIHN0cnVjdHVyZSBzcGVjaWZ5aW5nIHRoZSB0cmFuc2ZlciBwYXJhbWV0ZXJzLgorICogQHJldHVybiBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLworc3RhdHVzX3QgSTJDX1JUT1NfVHJhbnNmZXIoaTJjX3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgaTJjX21hc3Rlcl90cmFuc2Zlcl90ICp0cmFuc2Zlcik7CisKKy8qIQorICogQH0KKyAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEKKyAqIEB9CisgKi8KKworI2VuZGlmIC8qIF9fRlNMX0kyQ19GUkVFUlRPU19IX18gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xsd3UuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xsd3UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGIxMDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbGx3dS5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9sbHd1LmgiCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikKK3ZvaWQgTExXVV9TZXRFeHRlcm5hbFdha2V1cFBpbk1vZGUoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBwaW5JbmRleCwgbGx3dV9leHRlcm5hbF9waW5fbW9kZV90IHBpbk1vZGUpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgdm9sYXRpbGUgdWludDMyX3QgKnJlZ0Jhc2U7CisgICAgdWludDMyX3QgcmVnT2Zmc2V0OworICAgIHVpbnQzMl90IHJlZzsKKworICAgIHN3aXRjaCAocGluSW5kZXggPj4gNFUpCisgICAgeworICAgICAgICBjYXNlIDBVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAxNikpCisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFMjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZWdCYXNlID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlCisgICAgdm9sYXRpbGUgdWludDhfdCAqcmVnQmFzZTsKKyAgICB1aW50OF90IHJlZ09mZnNldDsKKyAgICB1aW50OF90IHJlZzsKKyAgICBzd2l0Y2ggKHBpbkluZGV4ID4+IDJVKQorICAgIHsKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEUxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMVU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFMjsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDgpKQorICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDEyKSkKKyAgICAgICAgY2FzZSAzVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEU0OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAxNikpCisgICAgICAgIGNhc2UgNFU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFNTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMjApKQorICAgICAgICBjYXNlIDVVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRTY7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiA+IDI0KSkKKyAgICAgICAgY2FzZSA2VToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEU3OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAyOCkpCisgICAgICAgIGNhc2UgN1U6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBFODsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZWdCYXNlID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMiAqLworCisgICAgaWYgKHJlZ0Jhc2UpCisgICAgeworICAgICAgICByZWcgPSAqcmVnQmFzZTsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCkgJiYgKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIID09IDMyKSkKKyAgICAgICAgcmVnT2Zmc2V0ID0gKChwaW5JbmRleCAmIDB4MEZVKSA8PCAxVSk7CisjZWxzZQorICAgICAgICByZWdPZmZzZXQgPSAoKHBpbkluZGV4ICYgMHgwM1UpIDw8IDFVKTsKKyNlbmRpZgorICAgICAgICByZWcgJj0gfigweDNVIDw8IHJlZ09mZnNldCk7CisgICAgICAgIHJlZyB8PSAoKHVpbnQzMl90KXBpbk1vZGUgPDwgcmVnT2Zmc2V0KTsKKyAgICAgICAgKnJlZ0Jhc2UgPSByZWc7CisgICAgfQorfQorCitib29sIExMV1VfR2V0RXh0ZXJuYWxXYWtldXBQaW5GbGFnKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluSW5kZXgpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgcmV0dXJuIChib29sKShiYXNlLT5QRiAmICgxVSA8PCBwaW5JbmRleCkpOworI2Vsc2UKKyAgICB2b2xhdGlsZSB1aW50OF90ICpyZWdCYXNlOworCisgICAgc3dpdGNoIChwaW5JbmRleCA+PiAzVSkKKyAgICB7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEYpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGKQorICAgICAgICBjYXNlIDBVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRjE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiA4KSkKKyAgICAgICAgY2FzZSAxVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEYyOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRjM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAyNCkpCisgICAgICAgIGNhc2UgM1U6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBGNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2Vsc2UKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RjE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiA4KSkKKyAgICAgICAgY2FzZSAxVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RjI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAxNikpCisgICAgICAgIGNhc2UgMlU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkYzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMjQpKQorICAgICAgICBjYXNlIDNVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZWdCYXNlID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChyZWdCYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChib29sKSgqcmVnQmFzZSAmICgxVSA8PCBwaW5JbmRleCAlIDgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCAqLworfQorCit2b2lkIExMV1VfQ2xlYXJFeHRlcm5hbFdha2V1cFBpbkZsYWcoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBwaW5JbmRleCkKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCkgJiYgKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIID09IDMyKSkKKyAgICBiYXNlLT5QRiA9ICgxVSA8PCBwaW5JbmRleCk7CisjZWxzZQorICAgIHZvbGF0aWxlIHVpbnQ4X3QgKnJlZ0Jhc2U7CisgICAgc3dpdGNoIChwaW5JbmRleCA+PiAzVSkKKyAgICB7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEYpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGKQorICAgICAgICBjYXNlIDBVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRjE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiA4KSkKKyAgICAgICAgY2FzZSAxVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+UEYyOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgICAgICBjYXNlIDJVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5QRjM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAyNCkpCisgICAgICAgIGNhc2UgM1U6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPlBGNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2Vsc2UKKyAgICAgICAgY2FzZSAwVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RjE7CisgICAgICAgICAgICBicmVhazsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiA4KSkKKyAgICAgICAgY2FzZSAxVToKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RjI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4gPiAxNikpCisgICAgICAgIGNhc2UgMlU6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkYzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMjQpKQorICAgICAgICBjYXNlIDNVOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GNDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZWdCYXNlID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocmVnQmFzZSkKKyAgICB7CisgICAgICAgICpyZWdCYXNlID0gKDFVIDw8IHBpbkluZGV4ICUgOFUpOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCAqLworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikKK3ZvaWQgTExXVV9TZXRQaW5GaWx0ZXJNb2RlKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgZmlsdGVySW5kZXgsIGxsd3VfZXh0ZXJuYWxfcGluX2ZpbHRlcl9tb2RlX3QgZmlsdGVyTW9kZSkKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCkgJiYgKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIID09IDMyKSkKKyAgICB1aW50MzJfdCByZWc7CisKKyAgICByZWcgPSBiYXNlLT5GSUxUOworICAgIHJlZyAmPSB+KChMTFdVX0ZJTFRfRklMVFNFTDFfTUFTSyB8IExMV1VfRklMVF9GSUxURTFfTUFTSykgPDwgKGZpbHRlckluZGV4ICogOFUgLSAxVSkpOworICAgIHJlZyB8PSAoKChmaWx0ZXJNb2RlLnBpbkluZGV4IDw8IExMV1VfRklMVF9GSUxUU0VMMV9TSElGVCkgfCAoZmlsdGVyTW9kZS5maWx0ZXJNb2RlIDw8IExMV1VfRklMVF9GSUxURTFfU0hJRlQpCisgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIEZpbHRlciBEZXRlY3QgRmxhZyAqLworICAgICAgICAgICAgIHwgTExXVV9GSUxUX0ZJTFRGMV9NQVNLKQorICAgICAgICAgICAgPDwgKGZpbHRlckluZGV4ICogOFUgLSAxVSkpOworICAgIGJhc2UtPkZJTFQgPSByZWc7CisjZWxzZQorICAgIHZvbGF0aWxlIHVpbnQ4X3QgKnJlZ0Jhc2U7CisgICAgdWludDhfdCByZWc7CisKKyAgICBzd2l0Y2ggKGZpbHRlckluZGV4KQorICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GSUxUMTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSID4gMSkpCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RklMVDI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgPiAyKSkKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GSUxUMzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiA+IDMpKQorICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkZJTFQ0OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVnQmFzZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmVnQmFzZSkKKyAgICB7CisgICAgICAgIHJlZyA9ICpyZWdCYXNlOworICAgICAgICByZWcgJj0gfihMTFdVX0ZJTFQxX0ZJTFRTRUxfTUFTSyB8IExMV1VfRklMVDFfRklMVEVfTUFTSyk7CisgICAgICAgIHJlZyB8PSAoKHVpbnQzMl90KWZpbHRlck1vZGUucGluSW5kZXggPDwgTExXVV9GSUxUMV9GSUxUU0VMX1NISUZUKTsKKyAgICAgICAgcmVnIHw9ICgodWludDMyX3QpZmlsdGVyTW9kZS5maWx0ZXJNb2RlIDw8IExMV1VfRklMVDFfRklMVEVfU0hJRlQpOworICAgICAgICAvKiBDbGVhciB0aGUgRmlsdGVyIERldGVjdCBGbGFnICovCisgICAgICAgIHJlZyB8PSBMTFdVX0ZJTFQxX0ZJTFRGX01BU0s7CisgICAgICAgICpyZWdCYXNlID0gcmVnOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCAqLworfQorCitib29sIExMV1VfR2V0UGluRmlsdGVyRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IGZpbHRlckluZGV4KQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggPT0gMzIpKQorICAgIHJldHVybiAoYm9vbCkoYmFzZS0+RklMVCAmICgxVSA8PCAoZmlsdGVySW5kZXggKiA4VSAtIDEpKSk7CisjZWxzZQorICAgIGJvb2wgc3RhdHVzID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZpbHRlckluZGV4KQorICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgc3RhdHVzID0gKGJhc2UtPkZJTFQxICYgTExXVV9GSUxUMV9GSUxURl9NQVNLKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSID4gMSkpCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHN0YXR1cyA9IChiYXNlLT5GSUxUMiAmIExMV1VfRklMVDJfRklMVEZfTUFTSyk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgPiAyKSkKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgc3RhdHVzID0gKGJhc2UtPkZJTFQzICYgTExXVV9GSUxUM19GSUxURl9NQVNLKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiA+IDMpKQorICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBzdGF0dXMgPSAoYmFzZS0+RklMVDQgJiBMTFdVX0ZJTFQ0X0ZJTFRGX01BU0spOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCAqLworfQorCit2b2lkIExMV1VfQ2xlYXJQaW5GaWx0ZXJGbGFnKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgZmlsdGVySW5kZXgpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEgpICYmIChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCA9PSAzMikpCisgICAgdWludDMyX3QgcmVnOworCisgICAgcmVnID0gYmFzZS0+RklMVDsKKyAgICBzd2l0Y2ggKGZpbHRlckluZGV4KQorICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmVnIHw9IExMV1VfRklMVF9GSUxURjFfTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZWcgfD0gTExXVV9GSUxUX0ZJTFRGMl9NQVNLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJlZyB8PSBMTFdVX0ZJTFRfRklMVEYzX01BU0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmVnIHw9IExMV1VfRklMVF9GSUxURjRfTUFTSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJhc2UtPkZJTFQgPSByZWc7CisjZWxzZQorICAgIHZvbGF0aWxlIHVpbnQ4X3QgKnJlZ0Jhc2U7CisgICAgdWludDhfdCByZWc7CisKKyAgICBzd2l0Y2ggKGZpbHRlckluZGV4KQorICAgIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GSUxUMTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSID4gMSkpCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJlZ0Jhc2UgPSAmYmFzZS0+RklMVDI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUikgJiYgKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgPiAyKSkKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcmVnQmFzZSA9ICZiYXNlLT5GSUxUMzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiA+IDMpKQorICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZWdCYXNlID0gJmJhc2UtPkZJTFQ0OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVnQmFzZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmVnQmFzZSkKKyAgICB7CisgICAgICAgIHJlZyA9ICpyZWdCYXNlOworICAgICAgICByZWcgfD0gTExXVV9GSUxUMV9GSUxURl9NQVNLOworICAgICAgICAqcmVnQmFzZSA9IHJlZzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKi8KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19SRVNFVF9FTkFCTEUpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1JFU0VUX0VOQUJMRSkKK3ZvaWQgTExXVV9TZXRSZXNldFBpbk1vZGUoTExXVV9UeXBlICpiYXNlLCBib29sIHBpbkVuYWJsZSwgYm9vbCBlbmFibGVJbkxvd0xlYWthZ2VNb2RlKQoreworICAgIHVpbnQ4X3QgcmVnOworCisgICAgcmVnID0gYmFzZS0+UlNUOworICAgIHJlZyAmPSB+KExMV1VfUlNUX0xMUlNURV9NQVNLIHwgTExXVV9SU1RfUlNURklMVF9NQVNLKTsKKyAgICByZWcgfD0KKyAgICAgICAgKCgodWludDMyX3QpcGluRW5hYmxlIDw8IExMV1VfUlNUX0xMUlNURV9TSElGVCkgfCAoKHVpbnQzMl90KWVuYWJsZUluTG93TGVha2FnZU1vZGUgPDwgTExXVV9SU1RfUlNURklMVF9TSElGVCkpOworICAgIGJhc2UtPlJTVCA9IHJlZzsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19SRVNFVF9FTkFCTEUgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xsd3UuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xsd3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWEwMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbGx3dS5oCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9MTFdVX0hfCisjZGVmaW5lIF9GU0xfTExXVV9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEgQGFkZHRvZ3JvdXAgbGx3dSAqLworLyohIEB7ICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBMTFdVIGRyaXZlciB2ZXJzaW9uIDIuMC4xLiAqLworI2RlZmluZSBGU0xfTExXVV9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDEpKQorLypAfSovCisKKy8qIQorICogQGJyaWVmIEV4dGVybmFsIGlucHV0IHBpbiBjb250cm9sIG1vZGVzCisgKi8KK3R5cGVkZWYgZW51bSBfbGx3dV9leHRlcm5hbF9waW5fbW9kZQoreworICAgIGtMTFdVX0V4dGVybmFsUGluRGlzYWJsZSA9IDBVLCAgICAgLyohPCBQaW4gZGlzYWJsZWQgYXMgYSB3YWtldXAgaW5wdXQuICAgICAgICAgICAqLworICAgIGtMTFdVX0V4dGVybmFsUGluUmlzaW5nRWRnZSA9IDFVLCAgLyohPCBQaW4gZW5hYmxlZCB3aXRoIHRoZSByaXNpbmcgZWRnZSBkZXRlY3Rpb24uICovCisgICAga0xMV1VfRXh0ZXJuYWxQaW5GYWxsaW5nRWRnZSA9IDJVLCAvKiE8IFBpbiBlbmFibGVkIHdpdGggdGhlIGZhbGxpbmcgZWRnZSBkZXRlY3Rpb24uKi8KKyAgICBrTExXVV9FeHRlcm5hbFBpbkFueUVkZ2UgPSAzVSAgICAgIC8qITwgUGluIGVuYWJsZWQgd2l0aCBhbnkgY2hhbmdlIGRldGVjdGlvbi4gICovCit9IGxsd3VfZXh0ZXJuYWxfcGluX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgRGlnaXRhbCBmaWx0ZXIgY29udHJvbCBtb2RlcworICovCit0eXBlZGVmIGVudW0gX2xsd3VfcGluX2ZpbHRlcl9tb2RlCit7CisgICAga0xMV1VfUGluRmlsdGVyRGlzYWJsZSA9IDBVLCAgICAgLyohPCBGaWx0ZXIgZGlzYWJsZWQuICAgICAgICAgICAgICAgKi8KKyAgICBrTExXVV9QaW5GaWx0ZXJSaXNpbmdFZGdlID0gMVUsICAvKiE8IEZpbHRlciBwb3NpdGl2ZSBlZGdlIGRldGVjdGlvbi4qLworICAgIGtMTFdVX1BpbkZpbHRlckZhbGxpbmdFZGdlID0gMlUsIC8qITwgRmlsdGVyIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uLiovCisgICAga0xMV1VfUGluRmlsdGVyQW55RWRnZSA9IDNVICAgICAgLyohPCBGaWx0ZXIgYW55IGVkZ2UgZGV0ZWN0aW9uLiAgICAgKi8KK30gbGx3dV9waW5fZmlsdGVyX21vZGVfdDsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1ZFUklEKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19WRVJJRCkKKy8qIQorICogQGJyaWVmIElQIHZlcnNpb24gSUQgZGVmaW5pdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2xsd3VfdmVyc2lvbl9pZAoreworICAgIHVpbnQxNl90IGZlYXR1cmU7IC8qITwgQSBmZWF0dXJlIHNwZWNpZmljYXRpb24gbnVtYmVyLiAqLworICAgIHVpbnQ4X3QgbWlub3I7ICAgIC8qITwgVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICovCisgICAgdWludDhfdCBtYWpvcjsgICAgLyohPCBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgKi8KK30gbGx3dV92ZXJzaW9uX2lkX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfVkVSSUQgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QQVJBTSkKKy8qIQorICogQGJyaWVmIElQIHBhcmFtZXRlciBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfbGx3dV9wYXJhbQoreworICAgIHVpbnQ4X3QgZmlsdGVyczsgLyohPCBBIG51bWJlciBvZiB0aGUgcGluIGZpbHRlci4gICAgICAqLworICAgIHVpbnQ4X3QgZG1hczsgICAgLyohPCBBIG51bWJlciBvZiB0aGUgd2FrZXVwIERNQS4gICAgICAqLworICAgIHVpbnQ4X3QgbW9kdWxlczsgLyohPCBBIG51bWJlciBvZiB0aGUgd2FrZXVwIG1vZHVsZS4gICAqLworICAgIHVpbnQ4X3QgcGluczsgICAgLyohPCBBIG51bWJlciBvZiB0aGUgd2FrZSB1cCBwaW4uICAgICAqLworfSBsbHd1X3BhcmFtX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEFSQU0gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BJTl9GSUxURVIpCisvKiEKKyAqIEBicmllZiBBbiBleHRlcm5hbCBpbnB1dCBwaW4gZmlsdGVyIGNvbnRyb2wgc3RydWN0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9sbHd1X2V4dGVybmFsX3Bpbl9maWx0ZXJfbW9kZQoreworICAgIHVpbnQzMl90IHBpbkluZGV4OyAgICAgICAgICAgICAgICAgLyohPCBBIHBpbiBudW1iZXIgICovCisgICAgbGx3dV9waW5fZmlsdGVyX21vZGVfdCBmaWx0ZXJNb2RlOyAvKiE8IEZpbHRlciBtb2RlICovCit9IGxsd3VfZXh0ZXJuYWxfcGluX2ZpbHRlcl9tb2RlX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgTG93LUxlYWthZ2UgV2FrZXVwIFVuaXQgQ29udHJvbCBBUElzCisgKiBAeworICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19WRVJJRCkgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfVkVSSUQpCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBMTFdVIHZlcnNpb24gSUQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBMTFdVIHZlcnNpb24gSUQsIGluY2x1ZGluZyB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIsCisgKiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIsIGFuZCB0aGUgZmVhdHVyZSBzcGVjaWZpY2F0aW9uIG51bWJlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHZlcnNpb25JZCAgICAgQSBwb2ludGVyIHRvIHRoZSB2ZXJzaW9uIElEIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExMV1VfR2V0VmVyc2lvbklkKExMV1VfVHlwZSAqYmFzZSwgbGx3dV92ZXJzaW9uX2lkX3QgKnZlcnNpb25JZCkKK3sKKyAgICAqKCh1aW50MzJfdCAqKXZlcnNpb25JZCkgPSBiYXNlLT5WRVJJRDsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19WRVJJRCAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEFSQU0pICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BBUkFNKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTExXVSBwYXJhbWV0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBMTFdVIHBhcmFtZXRlciwgaW5jbHVkaW5nIGEgd2FrZXVwIHBpbiBudW1iZXIsIGEgbW9kdWxlCisgKiBudW1iZXIsIGEgRE1BIG51bWJlciwgYW5kIGEgcGluIGZpbHRlciBudW1iZXIuCisgKgorICogQHBhcmFtIGJhc2UgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBwYXJhbSAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTExXVSBwYXJhbWV0ZXIgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTExXVV9HZXRQYXJhbShMTFdVX1R5cGUgKmJhc2UsIGxsd3VfcGFyYW1fdCAqcGFyYW0pCit7CisgICAgKigodWludDMyX3QgKilwYXJhbSkgPSBiYXNlLT5QQVJBTTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QQVJBTSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19FWFRFUk5BTF9QSU4pCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBleHRlcm5hbCBpbnB1dCBwaW4gc291cmNlIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBleHRlcm5hbCBpbnB1dCBwaW4gc291cmNlIG1vZGUgdGhhdCBpcyB1c2VkCisgKiBhcyBhIHdha2UgdXAgc291cmNlLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gcGluSW5kZXggQSBwaW4gaW5kZXggdG8gYmUgZW5hYmxlZCBhcyBhbiBleHRlcm5hbCB3YWtldXAgc291cmNlIHN0YXJ0aW5nIGZyb20gMS4KKyAqIEBwYXJhbSBwaW5Nb2RlIEEgcGluIGNvbmZpZ3VyYXRpb24gbW9kZSBkZWZpbmVkIGluIHRoZSBsbHd1X2V4dGVybmFsX3Bpbl9tb2Rlc190LgorICovCit2b2lkIExMV1VfU2V0RXh0ZXJuYWxXYWtldXBQaW5Nb2RlKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluSW5kZXgsIGxsd3VfZXh0ZXJuYWxfcGluX21vZGVfdCBwaW5Nb2RlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZXh0ZXJuYWwgd2FrZXVwIHNvdXJjZSBmbGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBleHRlcm5hbCBwaW4gZmxhZyB0byBkZXRlY3Qgd2hldGhlciB0aGUgTUNVIGlzCisgKiB3b2tlbiB1cCBieSB0aGUgc3BlY2lmaWMgcGluLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gcGluSW5kZXggICAgIEEgcGluIGluZGV4LCB3aGljaCBzdGFydHMgZnJvbSAxLgorICogQHJldHVybiBUcnVlIGlmIHRoZSBzcGVjaWZpYyBwaW4gaXMgYSB3YWtldXAgc291cmNlLgorICovCitib29sIExMV1VfR2V0RXh0ZXJuYWxXYWtldXBQaW5GbGFnKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgcGluSW5kZXgpOworCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIGV4dGVybmFsIHdha2V1cCBzb3VyY2UgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgZXh0ZXJuYWwgd2FrZXVwIHNvdXJjZSBmbGFnIGZvciBhIHNwZWNpZmljIHBpbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHBpbkluZGV4IEEgcGluIGluZGV4LCB3aGljaCBzdGFydHMgZnJvbSAxLgorICovCit2b2lkIExMV1VfQ2xlYXJFeHRlcm5hbFdha2V1cFBpbkZsYWcoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBwaW5JbmRleCk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19JTlRFUk5BTF9NT0RVTEUpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0lOVEVSTkFMX01PRFVMRSkKKy8qIQorICogQGJyaWVmIEVuYWJsZXMvZGlzYWJsZXMgdGhlIGludGVybmFsIG1vZHVsZSBzb3VyY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBpbnRlcm5hbCBtb2R1bGUgc291cmNlIG1vZGUgdGhhdCBpcyB1c2VkCisgKiBhcyBhIHdha2UgdXAgc291cmNlLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbW9kdWxlSW5kZXggICBBIG1vZHVsZSBpbmRleCB0byBiZSBlbmFibGVkIGFzIGFuIGludGVybmFsIHdha2V1cCBzb3VyY2Ugc3RhcnRpbmcgZnJvbSAxLgorICogQHBhcmFtIGVuYWJsZSAgICAgICAgQW4gZW5hYmxlIG9yIGEgZGlzYWJsZSBzZXR0aW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMTFdVX0VuYWJsZUludGVybmFsTW9kdWxlSW50ZXJydXB0V2FrdXAoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBtb2R1bGVJbmRleCwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPk1FIHw9IDFVIDw8IG1vZHVsZUluZGV4OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5NRSAmPSB+KDFVIDw8IG1vZHVsZUluZGV4KTsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGV4dGVybmFsIHdha2V1cCBzb3VyY2UgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgZXh0ZXJuYWwgcGluIGZsYWcgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBpcworICogd29rZW4gdXAgYnkgdGhlIHNwZWNpZmljIHBpbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1vZHVsZUluZGV4ICBBIG1vZHVsZSBpbmRleCwgd2hpY2ggc3RhcnRzIGZyb20gMS4KKyAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgc3BlY2lmaWMgcGluIGlzIGEgd2FrZSB1cCBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBMTFdVX0dldEludGVybmFsV2FrZXVwTW9kdWxlRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1vZHVsZUluZGV4KQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX0xMV1VfSEFTX01GKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19NRikKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX1JFR19CSVRXSURUSCkgJiYgKEZTTF9GRUFUVVJFX0xMV1VfUkVHX0JJVFdJRFRIID09IDMyKSkKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPk1GICYgKDFVIDw8IG1vZHVsZUluZGV4KSk7CisjZWxzZQorICAgIHJldHVybiAoYm9vbCkoYmFzZS0+TUY1ICYgKDFVIDw8IG1vZHVsZUluZGV4KSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9SRUdfQklUV0lEVEggKi8KKyNlbHNlCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOKSAmJiAoRlNMX0ZFQVRVUkVfTExXVV9IQVNfRVhURVJOQUxfUElOID4gMTYpKQorICAgIHJldHVybiAoYm9vbCkoYmFzZS0+RjUgJiAoMVUgPDwgbW9kdWxlSW5kZXgpKTsKKyNlbHNlCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUEYpICYmIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1BGKQorICAgIHJldHVybiAoYm9vbCkoYmFzZS0+UEYzICYgKDFVIDw8IG1vZHVsZUluZGV4KSk7CisjZWxzZQorICAgIHJldHVybiAoYm9vbCkoYmFzZS0+RjMgJiAoMVUgPDwgbW9kdWxlSW5kZXgpKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QRiAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0VYVEVSTkFMX1BJTiAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX01GICovCit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfSU5URVJOQUxfTU9EVUxFICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19ETUFfRU5BQkxFX1JFRykgJiYgRlNMX0ZFQVRVUkVfTExXVV9IQVNfRE1BX0VOQUJMRV9SRUcpCisvKiEKKyAqIEBicmllZiBFbmFibGVzL2Rpc2FibGVzIHRoZSBpbnRlcm5hbCBtb2R1bGUgRE1BIHdha2V1cCBzb3VyY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBpbnRlcm5hbCBETUEgdGhhdCBpcyB1c2VkIGFzIGEgd2FrZSB1cCBzb3VyY2UuCisgKgorICogQHBhcmFtIGJhc2UgTExXVSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtb2R1bGVJbmRleCAgIEFuIGludGVybmFsIG1vZHVsZSBpbmRleCB3aGljaCBpcyB1c2VkIGFzIGEgRE1BIHJlcXVlc3Qgc291cmNlLCBzdGFydGluZyBmcm9tIDEuCisgKiBAcGFyYW0gZW5hYmxlICAgICAgICBFbmFibGUgb3IgZGlzYWJsZSB0aGUgRE1BIHJlcXVlc3Qgc291cmNlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMTFdVX0VuYWJsZUludGVybmFsTW9kdWxlRG1hUmVxdWVzdFdha3VwKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgbW9kdWxlSW5kZXgsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5ERSB8PSAxVSA8PCBtb2R1bGVJbmRleDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+REUgJj0gfigxVSA8PCBtb2R1bGVJbmRleCk7CisgICAgfQorfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX0RNQV9FTkFCTEVfUkVHICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19QSU5fRklMVEVSKQorLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgcGluIGZpbHRlciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcGluIGZpbHRlciBjb25maWd1cmF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZmlsdGVySW5kZXggQSBwaW4gZmlsdGVyIGluZGV4IHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGRpZ2l0YWwgZmlsdGVyLCBzdGFydGluZyBmcm9tIDEuCisgKiBAcGFyYW0gZmlsdGVyTW9kZSBBIGZpbHRlciBtb2RlIGNvbmZpZ3VyYXRpb24KKyAqLwordm9pZCBMTFdVX1NldFBpbkZpbHRlck1vZGUoTExXVV9UeXBlICpiYXNlLCB1aW50MzJfdCBmaWx0ZXJJbmRleCwgbGx3dV9leHRlcm5hbF9waW5fZmlsdGVyX21vZGVfdCBmaWx0ZXJNb2RlKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgcGluIGZpbHRlciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgcGluIGZpbHRlciBmbGFnLgorICoKKyAqIEBwYXJhbSBiYXNlIExMV1UgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZmlsdGVySW5kZXggQSBwaW4gZmlsdGVyIGluZGV4LCB3aGljaCBzdGFydHMgZnJvbSAxLgorICogQHJldHVybiBUcnVlIGlmIHRoZSBmbGFnIGlzIGEgc291cmNlIG9mIHRoZSBleGlzdGluZyBsb3ctbGVha2FnZSBwb3dlciBtb2RlLgorICovCitib29sIExMV1VfR2V0UGluRmlsdGVyRmxhZyhMTFdVX1R5cGUgKmJhc2UsIHVpbnQzMl90IGZpbHRlckluZGV4KTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBwaW4gZmlsdGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIHBpbiBmaWx0ZXIgZmxhZy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMTFdVIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGZpbHRlckluZGV4IEEgcGluIGZpbHRlciBpbmRleCB0byBjbGVhciB0aGUgZmxhZywgc3RhcnRpbmcgZnJvbSAxLgorICovCit2b2lkIExMV1VfQ2xlYXJQaW5GaWx0ZXJGbGFnKExMV1VfVHlwZSAqYmFzZSwgdWludDMyX3QgZmlsdGVySW5kZXgpOworCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTExXVV9IQVNfUElOX0ZJTFRFUiAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfTExXVV9IQVNfUkVTRVRfRU5BQkxFKSAmJiBGU0xfRkVBVFVSRV9MTFdVX0hBU19SRVNFVF9FTkFCTEUpCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSByZXNldCBwaW4gbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaG93IHRoZSByZXNldCBwaW4gaXMgdXNlZCBhcyBhIGxvdyBsZWFrYWdlIG1vZGUgZXhpdCBzb3VyY2UuCisgKgorICogQHBhcmFtIHBpbkVuYWJsZSAgICAgICBFbmFibGUgcmVzZXQgdGhlIHBpbiBmaWx0ZXIKKyAqIEBwYXJhbSBwaW5GaWx0ZXJFbmFibGUgU3BlY2lmeSB3aGV0aGVyIHRoZSBwaW4gZmlsdGVyIGlzIGVuYWJsZWQgaW4gTG93LUxlYWthZ2UgcG93ZXIgbW9kZS4KKyAqLwordm9pZCBMTFdVX1NldFJlc2V0UGluTW9kZShMTFdVX1R5cGUgKmJhc2UsIGJvb2wgcGluRW5hYmxlLCBib29sIGVuYWJsZUluTG93TGVha2FnZU1vZGUpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xMV1VfSEFTX1JFU0VUX0VOQUJMRSAqLworCisvKkB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKyNlbmRpZiAvKiBfRlNMX0xMV1VfSF8qLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB0bXIuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdG1yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiM2I5NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdG1yLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2xwdG1yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgYmFzZSBhZGRyZXNzIHRvIGJlIHVzZWQgdG8gZ2F0ZSBvciB1bmdhdGUgdGhlIG1vZHVsZSBjbG9jaworICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgTFBUTVIgaW5zdGFuY2UKKyAqLworc3RhdGljIHVpbnQzMl90IExQVE1SX0dldEluc3RhbmNlKExQVE1SX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIEBicmllZiBQb2ludGVycyB0byBMUFRNUiBiYXNlcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBMUFRNUl9UeXBlICpjb25zdCBzX2xwdG1yQmFzZXNbXSA9IExQVE1SX0JBU0VfUFRSUzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gTFBUTVIgY2xvY2tzIGZvciBlYWNoIGluc3RhbmNlLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2xwdG1yQ2xvY2tzW10gPSBMUFRNUl9DTE9DS1M7CisKKyNpZiBkZWZpbmVkKExQVE1SX1BFUklQSF9DTE9DS1MpCisvKiBBcnJheSBvZiBMUFRNUiBmdW5jdGlvbmFsIGNsb2NrIG5hbWUuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfbHB0bXJQZXJpcGhDbG9ja3NbXSA9IExQVE1SX1BFUklQSF9DTE9DS1M7CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBMUFRNUl9HZXRJbnN0YW5jZShMUFRNUl9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX2xwdG1yQmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfbHB0bXJCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfbHB0bXJCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIExQVE1SX0luaXQoTFBUTVJfVHlwZSAqYmFzZSwgY29uc3QgbHB0bXJfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICAKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IExQVE1SX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgLyogVW5nYXRlIHRoZSBMUFRNUiBjbG9jayovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19scHRtckNsb2Nrc1tpbnN0YW5jZV0pOworI2lmIGRlZmluZWQoTFBUTVJfUEVSSVBIX0NMT0NLUykKKyAgICBDTE9DS19FbmFibGVDbG9jayhzX2xwdG1yUGVyaXBoQ2xvY2tzW2luc3RhbmNlXSk7CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisgICAgLyogQ29uZmlndXJlIHRoZSB0aW1lcnMgb3BlcmF0aW9uIG1vZGUgYW5kIGlucHV0IHBpbiBzZXR1cCAqLworICAgIGJhc2UtPkNTUiA9IChMUFRNUl9DU1JfVE1TKGNvbmZpZy0+dGltZXJNb2RlKSB8IExQVE1SX0NTUl9URkMoY29uZmlnLT5lbmFibGVGcmVlUnVubmluZykgfAorICAgICAgICAgICAgICAgICBMUFRNUl9DU1JfVFBQKGNvbmZpZy0+cGluUG9sYXJpdHkpIHwgTFBUTVJfQ1NSX1RQUyhjb25maWctPnBpblNlbGVjdCkpOworCisgICAgLyogQ29uZmlndXJlIHRoZSBwcmVzY2FsZSB2YWx1ZSBhbmQgY2xvY2sgc291cmNlICovCisgICAgYmFzZS0+UFNSID0gKExQVE1SX1BTUl9QUkVTQ0FMRShjb25maWctPnZhbHVlKSB8IExQVE1SX1BTUl9QQllQKGNvbmZpZy0+YnlwYXNzUHJlc2NhbGVyKSB8CisgICAgICAgICAgICAgICAgIExQVE1SX1BTUl9QQ1MoY29uZmlnLT5wcmVzY2FsZXJDbG9ja1NvdXJjZSkpOworfQorCit2b2lkIExQVE1SX0RlaW5pdChMUFRNUl9UeXBlICpiYXNlKQoreworICAgIC8qIERpc2FibGUgdGhlIExQVE1SIGFuZCByZXNldCB0aGUgaW50ZXJuYWwgbG9naWMgKi8KKyAgICBiYXNlLT5DU1IgJj0gfkxQVE1SX0NTUl9URU5fTUFTSzsKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IExQVE1SX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgLyogR2F0ZSB0aGUgTFBUTVIgY2xvY2sqLworICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2xwdG1yQ2xvY2tzW2luc3RhbmNlXSk7CisjaWYgZGVmaW5lZChMUFRNUl9QRVJJUEhfQ0xPQ0tTKQorICAgIENMT0NLX0Rpc2FibGVDbG9jayhzX2xwdG1yUGVyaXBoQ2xvY2tzW2luc3RhbmNlXSk7CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIExQVE1SX0dldERlZmF1bHRDb25maWcobHB0bXJfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIC8qIFVzZSB0aW1lIGNvdW50ZXIgbW9kZSAqLworICAgIGNvbmZpZy0+dGltZXJNb2RlID0ga0xQVE1SX1RpbWVyTW9kZVRpbWVDb3VudGVyOworICAgIC8qIFVzZSBpbnB1dCAwIGFzIHNvdXJjZSBpbiBwdWxzZSBjb3VudGVyIG1vZGUgKi8KKyAgICBjb25maWctPnBpblNlbGVjdCA9IGtMUFRNUl9QaW5TZWxlY3RJbnB1dF8wOworICAgIC8qIFB1bHNlIGlucHV0IHBpbiBwb2xhcml0eSBpcyBhY3RpdmUtaGlnaCAqLworICAgIGNvbmZpZy0+cGluUG9sYXJpdHkgPSBrTFBUTVJfUGluUG9sYXJpdHlBY3RpdmVIaWdoOworICAgIC8qIENvdW50ZXIgcmVzZXRzIHdoZW5ldmVyIFRDRiBmbGFnIGlzIHNldCAqLworICAgIGNvbmZpZy0+ZW5hYmxlRnJlZVJ1bm5pbmcgPSBmYWxzZTsKKyAgICAvKiBCeXBhc3MgdGhlIHByZXNjYWxlciAqLworICAgIGNvbmZpZy0+YnlwYXNzUHJlc2NhbGVyID0gdHJ1ZTsKKyAgICAvKiBMUFRNUiBjbG9jayBzb3VyY2UgKi8KKyAgICBjb25maWctPnByZXNjYWxlckNsb2NrU291cmNlID0ga0xQVE1SX1ByZXNjYWxlckNsb2NrXzE7CisgICAgLyogRGl2aWRlIHRoZSBwcmVzY2FsZXIgY2xvY2sgYnkgMiAqLworICAgIGNvbmZpZy0+dmFsdWUgPSBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzA7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHRtci5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB0bXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2M5MDliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB0bXIuaApAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfTFBUTVJfSF8KKyNkZWZpbmUgX0ZTTF9MUFRNUl9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGxwdG1yCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKyNkZWZpbmUgRlNMX0xQVE1SX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMSkpIC8qITwgVmVyc2lvbiAyLjAuMSAqLworLypAfSovCisKKy8qISBAYnJpZWYgTFBUTVIgcGluIHNlbGVjdGlvbiB1c2VkIGluIHB1bHNlIGNvdW50ZXIgbW9kZS4qLwordHlwZWRlZiBlbnVtIF9scHRtcl9waW5fc2VsZWN0Cit7CisgICAga0xQVE1SX1BpblNlbGVjdElucHV0XzAgPSAweDBVLCAvKiE8IFB1bHNlIGNvdW50ZXIgaW5wdXQgMCBpcyBzZWxlY3RlZCAqLworICAgIGtMUFRNUl9QaW5TZWxlY3RJbnB1dF8xID0gMHgxVSwgLyohPCBQdWxzZSBjb3VudGVyIGlucHV0IDEgaXMgc2VsZWN0ZWQgKi8KKyAgICBrTFBUTVJfUGluU2VsZWN0SW5wdXRfMiA9IDB4MlUsIC8qITwgUHVsc2UgY291bnRlciBpbnB1dCAyIGlzIHNlbGVjdGVkICovCisgICAga0xQVE1SX1BpblNlbGVjdElucHV0XzMgPSAweDNVICAvKiE8IFB1bHNlIGNvdW50ZXIgaW5wdXQgMyBpcyBzZWxlY3RlZCAqLworfSBscHRtcl9waW5fc2VsZWN0X3Q7CisKKy8qISBAYnJpZWYgTFBUTVIgcGluIHBvbGFyaXR5IHVzZWQgaW4gcHVsc2UgY291bnRlciBtb2RlLiovCit0eXBlZGVmIGVudW0gX2xwdG1yX3Bpbl9wb2xhcml0eQoreworICAgIGtMUFRNUl9QaW5Qb2xhcml0eUFjdGl2ZUhpZ2ggPSAweDBVLCAvKiE8IFB1bHNlIENvdW50ZXIgaW5wdXQgc291cmNlIGlzIGFjdGl2ZS1oaWdoICovCisgICAga0xQVE1SX1BpblBvbGFyaXR5QWN0aXZlTG93ID0gMHgxVSAgIC8qITwgUHVsc2UgQ291bnRlciBpbnB1dCBzb3VyY2UgaXMgYWN0aXZlLWxvdyAqLworfSBscHRtcl9waW5fcG9sYXJpdHlfdDsKKworLyohIEBicmllZiBMUFRNUiB0aW1lciBtb2RlIHNlbGVjdGlvbi4qLwordHlwZWRlZiBlbnVtIF9scHRtcl90aW1lcl9tb2RlCit7CisgICAga0xQVE1SX1RpbWVyTW9kZVRpbWVDb3VudGVyID0gMHgwVSwgLyohPCBUaW1lIENvdW50ZXIgbW9kZSAqLworICAgIGtMUFRNUl9UaW1lck1vZGVQdWxzZUNvdW50ZXIgPSAweDFVIC8qITwgUHVsc2UgQ291bnRlciBtb2RlICovCit9IGxwdG1yX3RpbWVyX21vZGVfdDsKKworLyohIEBicmllZiBMUFRNUiBwcmVzY2FsZXIvZ2xpdGNoIGZpbHRlciB2YWx1ZXMqLwordHlwZWRlZiBlbnVtIF9scHRtcl9wcmVzY2FsZXJfZ2xpdGNoX3ZhbHVlCit7CisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8wID0gMHgwVSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSAyLCBnbGl0Y2ggZmlsdGVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBzZXR0aW5nICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8xID0gMHgxVSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA0LCBnbGl0Y2ggZmlsdGVyIDIgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzIgPSAweDJVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDgsIGdsaXRjaCBmaWx0ZXIgNCAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMyA9IDB4M1UsICAvKiE8IFByZXNjYWxlciBkaXZpZGUgMTYsIGdsaXRjaCBmaWx0ZXIgOCAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfNCA9IDB4NFUsICAvKiE8IFByZXNjYWxlciBkaXZpZGUgMzIsIGdsaXRjaCBmaWx0ZXIgMTYgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzUgPSAweDVVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDY0LCBnbGl0Y2ggZmlsdGVyIDMyICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF82ID0gMHg2VSwgIC8qITwgUHJlc2NhbGVyIGRpdmlkZSAxMjgsIGdsaXRjaCBmaWx0ZXIgNjQgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzcgPSAweDdVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDI1NiwgZ2xpdGNoIGZpbHRlciAxMjggKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzggPSAweDhVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDUxMiwgZ2xpdGNoIGZpbHRlciAyNTYgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzkgPSAweDlVLCAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDEwMjQsIGdsaXRjaCBmaWx0ZXIgNTEyKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzEwID0gMHhBVSwgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDIwNDggZ2xpdGNoIGZpbHRlciAxMDI0ICovCisgICAga0xQVE1SX1ByZXNjYWxlX0dsaXRjaF8xMSA9IDB4QlUsIC8qITwgUHJlc2NhbGVyIGRpdmlkZSA0MDk2LCBnbGl0Y2ggZmlsdGVyIDIwNDggKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzEyID0gMHhDVSwgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDgxOTIsIGdsaXRjaCBmaWx0ZXIgNDA5NiAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMTMgPSAweERVLCAvKiE8IFByZXNjYWxlciBkaXZpZGUgMTYzODQsIGdsaXRjaCBmaWx0ZXIgODE5MiAqLworICAgIGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMTQgPSAweEVVLCAvKiE8IFByZXNjYWxlciBkaXZpZGUgMzI3NjgsIGdsaXRjaCBmaWx0ZXIgMTYzODQgKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVfR2xpdGNoXzE1ID0gMHhGVSAgLyohPCBQcmVzY2FsZXIgZGl2aWRlIDY1NTM2LCBnbGl0Y2ggZmlsdGVyIDMyNzY4ICovCit9IGxwdG1yX3ByZXNjYWxlcl9nbGl0Y2hfdmFsdWVfdDsKKworLyohCisgKiBAYnJpZWYgTFBUTVIgcHJlc2NhbGVyL2dsaXRjaCBmaWx0ZXIgY2xvY2sgc2VsZWN0LgorICogQG5vdGUgQ2xvY2sgY29ubmVjdGlvbnMgYXJlIFNvQy1zcGVjaWZpYworICovCit0eXBlZGVmIGVudW0gX2xwdG1yX3ByZXNjYWxlcl9jbG9ja19zZWxlY3QKK3sKKyAgICBrTFBUTVJfUHJlc2NhbGVyQ2xvY2tfMCA9IDB4MFUsIC8qITwgUHJlc2NhbGVyL2dsaXRjaCBmaWx0ZXIgY2xvY2sgMCBzZWxlY3RlZC4gKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVyQ2xvY2tfMSA9IDB4MVUsIC8qITwgUHJlc2NhbGVyL2dsaXRjaCBmaWx0ZXIgY2xvY2sgMSBzZWxlY3RlZC4gKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVyQ2xvY2tfMiA9IDB4MlUsIC8qITwgUHJlc2NhbGVyL2dsaXRjaCBmaWx0ZXIgY2xvY2sgMiBzZWxlY3RlZC4gKi8KKyAgICBrTFBUTVJfUHJlc2NhbGVyQ2xvY2tfMyA9IDB4M1UsIC8qITwgUHJlc2NhbGVyL2dsaXRjaCBmaWx0ZXIgY2xvY2sgMyBzZWxlY3RlZC4gKi8KK30gbHB0bXJfcHJlc2NhbGVyX2Nsb2NrX3NlbGVjdF90OworCisvKiEgQGJyaWVmIExpc3Qgb2YgdGhlIExQVE1SIGludGVycnVwdHMgKi8KK3R5cGVkZWYgZW51bSBfbHB0bXJfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtMUFRNUl9UaW1lckludGVycnVwdEVuYWJsZSA9IExQVE1SX0NTUl9USUVfTUFTSywgLyohPCBUaW1lciBpbnRlcnJ1cHQgZW5hYmxlICovCit9IGxwdG1yX2ludGVycnVwdF9lbmFibGVfdDsKKworLyohIEBicmllZiBMaXN0IG9mIHRoZSBMUFRNUiBzdGF0dXMgZmxhZ3MgKi8KK3R5cGVkZWYgZW51bSBfbHB0bXJfc3RhdHVzX2ZsYWdzCit7CisgICAga0xQVE1SX1RpbWVyQ29tcGFyZUZsYWcgPSBMUFRNUl9DU1JfVENGX01BU0ssIC8qITwgVGltZXIgY29tcGFyZSBmbGFnICovCit9IGxwdG1yX3N0YXR1c19mbGFnc190OworCisvKiEKKyAqIEBicmllZiBMUFRNUiBjb25maWcgc3RydWN0dXJlCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBMUFRNUiBwZXJpcGhlcmFsLiBUbyBpbml0aWFsaXplIHRoaXMKKyAqIHN0cnVjdHVyZSB0byByZWFzb25hYmxlIGRlZmF1bHRzLCBjYWxsIHRoZSBMUFRNUl9HZXREZWZhdWx0Q29uZmlnKCkgZnVuY3Rpb24gYW5kIHBhc3MgYQorICogcG9pbnRlciB0byB5b3VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGluc3RhbmNlLgorICoKKyAqIFRoZSBjb25maWd1cmF0aW9uIHN0cnVjdCBjYW4gYmUgbWFkZSBjb25zdGFudCBzbyBpdCByZXNpZGVzIGluIGZsYXNoLgorICovCit0eXBlZGVmIHN0cnVjdCBfbHB0bXJfY29uZmlnCit7CisgICAgbHB0bXJfdGltZXJfbW9kZV90IHRpbWVyTW9kZTsgICAgIC8qITwgVGltZSBjb3VudGVyIG1vZGUgb3IgcHVsc2UgY291bnRlciBtb2RlICovCisgICAgbHB0bXJfcGluX3NlbGVjdF90IHBpblNlbGVjdDsgICAgIC8qITwgTFBUTVIgcHVsc2UgaW5wdXQgcGluIHNlbGVjdDsgdXNlZCBvbmx5IGluIHB1bHNlIGNvdW50ZXIgbW9kZSAqLworICAgIGxwdG1yX3Bpbl9wb2xhcml0eV90IHBpblBvbGFyaXR5OyAvKiE8IExQVE1SIHB1bHNlIGlucHV0IHBpbiBwb2xhcml0eTsgdXNlZCBvbmx5IGluIHB1bHNlIGNvdW50ZXIgbW9kZSAqLworICAgIGJvb2wgZW5hYmxlRnJlZVJ1bm5pbmc7ICAgICAgICAgICAvKiE8IFRydWU6IGVuYWJsZSBmcmVlIHJ1bm5pbmcsIGNvdW50ZXIgaXMgcmVzZXQgb24gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZTogY291bnRlciBpcyByZXNldCB3aGVuIHRoZSBjb21wYXJlIGZsYWcgaXMgc2V0ICovCisgICAgYm9vbCBieXBhc3NQcmVzY2FsZXI7ICAgICAgICAgICAgIC8qITwgVHJ1ZTogYnlwYXNzIHByZXNjYWxlcjsgZmFsc2U6IHVzZSBjbG9jayBmcm9tIHByZXNjYWxlciAqLworICAgIGxwdG1yX3ByZXNjYWxlcl9jbG9ja19zZWxlY3RfdCBwcmVzY2FsZXJDbG9ja1NvdXJjZTsgLyohPCBMUFRNUiBjbG9jayBzb3VyY2UgKi8KKyAgICBscHRtcl9wcmVzY2FsZXJfZ2xpdGNoX3ZhbHVlX3QgdmFsdWU7ICAgICAgICAgICAgICAgIC8qITwgUHJlc2NhbGVyIG9yIGdsaXRjaCBmaWx0ZXIgdmFsdWUgKi8KK30gbHB0bXJfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbiBhbmQgZGVpbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBVbmdhdGVzIHRoZSBMUFRNUiBjbG9jayBhbmQgY29uZmlndXJlcyB0aGUgcGVyaXBoZXJhbCBmb3IgYSBiYXNpYyBvcGVyYXRpb24uCisgKgorICogQG5vdGUgVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcHBsaWNhdGlvbiB1c2luZyB0aGUgTFBUTVIgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjb25maWcgQSBwb2ludGVyIHRvIHRoZSBMUFRNUiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBMUFRNUl9Jbml0KExQVE1SX1R5cGUgKmJhc2UsIGNvbnN0IGxwdG1yX2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBHYXRlcyB0aGUgTFBUTVIgY2xvY2suCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLwordm9pZCBMUFRNUl9EZWluaXQoTFBUTVJfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEZpbGxzIGluIHRoZSBMUFRNUiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuCisgKgorICogVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhcyBmb2xsb3dzLgorICogQGNvZGUKKyAqICAgIGNvbmZpZy0+dGltZXJNb2RlID0ga0xQVE1SX1RpbWVyTW9kZVRpbWVDb3VudGVyOworICogICAgY29uZmlnLT5waW5TZWxlY3QgPSBrTFBUTVJfUGluU2VsZWN0SW5wdXRfMDsKKyAqICAgIGNvbmZpZy0+cGluUG9sYXJpdHkgPSBrTFBUTVJfUGluUG9sYXJpdHlBY3RpdmVIaWdoOworICogICAgY29uZmlnLT5lbmFibGVGcmVlUnVubmluZyA9IGZhbHNlOworICogICAgY29uZmlnLT5ieXBhc3NQcmVzY2FsZXIgPSB0cnVlOworICogICAgY29uZmlnLT5wcmVzY2FsZXJDbG9ja1NvdXJjZSA9IGtMUFRNUl9QcmVzY2FsZXJDbG9ja18xOworICogICAgY29uZmlnLT52YWx1ZSA9IGtMUFRNUl9QcmVzY2FsZV9HbGl0Y2hfMDsKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29uZmlnIEEgcG9pbnRlciB0byB0aGUgTFBUTVIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgTFBUTVJfR2V0RGVmYXVsdENvbmZpZyhscHRtcl9jb25maWdfdCAqY29uZmlnKTsKKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBJbnRlcnJ1cHQgSW50ZXJmYWNlCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIHNlbGVjdGVkIExQVE1SIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6bHB0bXJfaW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFRNUl9FbmFibGVJbnRlcnJ1cHRzKExQVE1SX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDMyX3QgcmVnID0gYmFzZS0+Q1NSOworCisgICAgLyogQ2xlYXIgdGhlIFRDRiBiaXQgc28gdGhhdCB3ZSBkb24ndCBjbGVhciB0aGlzIHcxYyBiaXQgd2hlbiB3cml0aW5nIGJhY2sgKi8KKyAgICByZWcgJj0gfihMUFRNUl9DU1JfVENGX01BU0spOworICAgIHJlZyB8PSBtYXNrOworICAgIGJhc2UtPkNTUiA9IHJlZzsKK30KKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIHNlbGVjdGVkIExQVE1SIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGRpc2FibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OmxwdG1yX2ludGVycnVwdF9lbmFibGVfdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVE1SX0Rpc2FibGVJbnRlcnJ1cHRzKExQVE1SX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDMyX3QgcmVnID0gYmFzZS0+Q1NSOworCisgICAgLyogQ2xlYXIgdGhlIFRDRiBiaXQgc28gdGhhdCB3ZSBkb24ndCBjbGVhciB0aGlzIHcxYyBiaXQgd2hlbiB3cml0aW5nIGJhY2sgKi8KKyAgICByZWcgJj0gfihMUFRNUl9DU1JfVENGX01BU0spOworICAgIHJlZyAmPSB+bWFzazsKKyAgICBiYXNlLT5DU1IgPSByZWc7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGVuYWJsZWQgTFBUTVIgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIGVuYWJsZWQgaW50ZXJydXB0cy4gVGhpcyBpcyB0aGUgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICBlbnVtZXJhdGlvbiA6OmxwdG1yX2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IExQVE1SX0dldEVuYWJsZWRJbnRlcnJ1cHRzKExQVE1SX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5DU1IgJiBMUFRNUl9DU1JfVElFX01BU0spOworfQorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFN0YXR1cyBJbnRlcmZhY2UKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTFBUTVIgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgc3RhdHVzIGZsYWdzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgIGVudW1lcmF0aW9uIDo6bHB0bXJfc3RhdHVzX2ZsYWdzX3QKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBMUFRNUl9HZXRTdGF0dXNGbGFncyhMUFRNUl9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYmFzZS0+Q1NSICYgTFBUTVJfQ1NSX1RDRl9NQVNLKTsKK30KKworLyohCisgKiBAYnJpZWYgIENsZWFycyB0aGUgTFBUTVIgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgc3RhdHVzIGZsYWdzIHRvIGNsZWFyLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgZW51bWVyYXRpb24gOjpscHRtcl9zdGF0dXNfZmxhZ3NfdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVE1SX0NsZWFyU3RhdHVzRmxhZ3MoTFBUTVJfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5DU1IgfD0gbWFzazsKK30KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBSZWFkIGFuZCB3cml0ZSB0aGUgdGltZXIgcGVyaW9kCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHRpbWVyIHBlcmlvZCBpbiB1bml0cyBvZiBjb3VudC4KKyAqCisgKiBUaW1lcnMgY291bnRzIGZyb20gMCB1bnRpbCBpdCBlcXVhbHMgdGhlIGNvdW50IHZhbHVlIHNldCBoZXJlLiBUaGUgY291bnQgdmFsdWUgaXMgd3JpdHRlbiB0bworICogdGhlIENNUiByZWdpc3Rlci4KKyAqCisgKiBAbm90ZQorICogMS4gVGhlIFRDRiBmbGFnIGlzIHNldCB3aXRoIHRoZSBDTlIgZXF1YWxzIHRoZSBjb3VudCBwcm92aWRlZCBoZXJlIGFuZCB0aGVuIGluY3JlbWVudHMuCisgKiAyLiBDYWxsIHRoZSB1dGlsaXR5IG1hY3JvcyBwcm92aWRlZCBpbiB0aGUgZnNsX2NvbW1vbi5oIHRvIGNvbnZlcnQgdG8gdGlja3MuCisgKgorICogQHBhcmFtIGJhc2UgIExQVE1SIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gdGlja3MgQSB0aW1lciBwZXJpb2QgaW4gdW5pdHMgb2YgdGlja3MsIHdoaWNoIHNob3VsZCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVE1SX1NldFRpbWVyUGVyaW9kKExQVE1SX1R5cGUgKmJhc2UsIHVpbnQzMl90IHRpY2tzKQoreworICAgIGFzc2VydCh0aWNrcyA+IDApOworICAgIGJhc2UtPkNNUiA9IHRpY2tzIC0gMTsKK30KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIGN1cnJlbnQgdGltZXIgY291bnRpbmcgdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZWFsLXRpbWUgdGltZXIgY291bnRpbmcgdmFsdWUgaW4gYSByYW5nZSBmcm9tIDAgdG8gYQorICogdGltZXIgcGVyaW9kLgorICoKKyAqIEBub3RlIENhbGwgdGhlIHV0aWxpdHkgbWFjcm9zIHByb3ZpZGVkIGluIHRoZSBmc2xfY29tbW9uLmggdG8gY29udmVydCB0aWNrcyB0byB1c2VjIG9yIG1zZWMuCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgaW4gdGlja3MKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBMUFRNUl9HZXRDdXJyZW50VGltZXJDb3VudChMUFRNUl9UeXBlICpiYXNlKQoreworICAgIC8qIE11c3QgZmlyc3Qgd3JpdGUgYW55IHZhbHVlIHRvIHRoZSBDTlIuIFRoaXMgc3luY2hyb25pemVzIGFuZCByZWdpc3RlcnMgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgKiBvZiB0aGUgQ05SIGludG8gYSB0ZW1wb3JhcnkgcmVnaXN0ZXIgd2hpY2ggY2FuIHRoZW4gYmUgcmVhZAorICAgICAqLworICAgIGJhc2UtPkNOUiA9IDBVOworICAgIHJldHVybiAodWludDMyX3QpKChiYXNlLT5DTlIgJiBMUFRNUl9DTlJfQ09VTlRFUl9NQVNLKSA+PiBMUFRNUl9DTlJfQ09VTlRFUl9TSElGVCk7Cit9CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgVGltZXIgU3RhcnQgYW5kIFN0b3AKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU3RhcnRzIHRoZSB0aW1lci4KKyAqCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSB0aW1lciBjb3VudHMgdXAgdG8gdGhlIENNUiByZWdpc3RlciB2YWx1ZS4KKyAqIEVhY2ggdGltZSB0aGUgdGltZXIgcmVhY2hlcyB0aGUgQ01SIHZhbHVlIGFuZCB0aGVuIGluY3JlbWVudHMsIGl0IGdlbmVyYXRlcyBhCisgKiB0cmlnZ2VyIHB1bHNlIGFuZCBzZXRzIHRoZSB0aW1lb3V0IGludGVycnVwdCBmbGFnLiBBbiBpbnRlcnJ1cHQgaXMgYWxzbworICogdHJpZ2dlcmVkIGlmIHRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFRNUiBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgTFBUTVJfU3RhcnRUaW1lcihMUFRNUl9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPkNTUjsKKworICAgIC8qIENsZWFyIHRoZSBUQ0YgYml0IHRvIGF2b2lkIGNsZWFyaW5nIHRoZSB3MWMgYml0IHdoZW4gd3JpdGluZyBiYWNrLiAqLworICAgIHJlZyAmPSB+KExQVE1SX0NTUl9UQ0ZfTUFTSyk7CisgICAgcmVnIHw9IExQVE1SX0NTUl9URU5fTUFTSzsKKyAgICBiYXNlLT5DU1IgPSByZWc7Cit9CisKKy8qIQorICogQGJyaWVmIFN0b3BzIHRoZSB0aW1lci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIHRoZSB0aW1lciBhbmQgcmVzZXRzIHRoZSB0aW1lcidzIGNvdW50ZXIgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIGJhc2UgTFBUTVIgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVE1SX1N0b3BUaW1lcihMUFRNUl9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPkNTUjsKKworICAgIC8qIENsZWFyIHRoZSBUQ0YgYml0IHRvIGF2b2lkIGNsZWFyaW5nIHRoZSB3MWMgYml0IHdoZW4gd3JpdGluZyBiYWNrLiAqLworICAgIHJlZyAmPSB+KExQVE1SX0NTUl9UQ0ZfTUFTSyk7CisgICAgcmVnICY9IH5MUFRNUl9DU1JfVEVOX01BU0s7CisgICAgYmFzZS0+Q1NSID0gcmVnOworfQorCisvKiEgQH0qLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9MUFRNUl9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTgzYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmMKQEAgLTAsMCArMSwxMjk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX2xwdWFydC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMUFVBUlQgdHJhbnNmZXIgc3RhdGUuICovCitlbnVtIF9scHVhcnRfdHJhbnNmZXJfc3RhdGVzCit7CisgICAga0xQVUFSVF9UeElkbGUsIC8qITwgVFggaWRsZS4gKi8KKyAgICBrTFBVQVJUX1R4QnVzeSwgLyohPCBUWCBidXN5LiAqLworICAgIGtMUFVBUlRfUnhJZGxlLCAvKiE8IFJYIGlkbGUuICovCisgICAga0xQVUFSVF9SeEJ1c3kgIC8qITwgUlggYnVzeS4gKi8KK307CisKKy8qIFR5cGVkZWYgZm9yIGludGVycnVwdCBoYW5kbGVyLiAqLwordHlwZWRlZiB2b2lkICgqbHB1YXJ0X2lzcl90KShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIEdldCB0aGUgTFBVQVJUIGluc3RhbmNlIGZyb20gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBMUFVBUlQgaW5zdGFuY2UuCisgKi8KK3VpbnQzMl90IExQVUFSVF9HZXRJbnN0YW5jZShMUFVBUlRfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgbGVuZ3RoIG9mIHJlY2VpdmVkIGRhdGEgaW4gUlggcmluZyBidWZmZXIuCisgKgorICogQHVzZXJEYXRhIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKiBAcmV0dXJuIExlbmd0aCBvZiByZWNlaXZlZCBkYXRhIGluIFJYIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgc2l6ZV90IExQVUFSVF9UcmFuc2ZlckdldFJ4UmluZ0J1ZmZlckxlbmd0aChMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBDaGVjayB3aGV0aGVyIHRoZSBSWCByaW5nIGJ1ZmZlciBpcyBmdWxsLgorICoKKyAqIEB1c2VyRGF0YSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHJldHZhbCB0cnVlICBSWCByaW5nIGJ1ZmZlciBpcyBmdWxsLgorICogQHJldHZhbCBmYWxzZSBSWCByaW5nIGJ1ZmZlciBpcyBub3QgZnVsbC4KKyAqLworc3RhdGljIGJvb2wgTFBVQVJUX1RyYW5zZmVySXNSeFJpbmdCdWZmZXJGdWxsKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIFdyaXRlIHRvIFRYIHJlZ2lzdGVyIHVzaW5nIG5vbi1ibG9ja2luZyBtZXRob2QuCisgKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byB0aGUgVFggcmVnaXN0ZXIgZGlyZWN0bHksIHVwcGVyIGxheWVyIG11c3QgbWFrZQorICogc3VyZSB0aGUgVFggcmVnaXN0ZXIgaXMgZW1wdHkgb3IgVFggRklGTyBoYXMgZW1wdHkgcm9vbSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciBhbGwgdGhlIGRhdGEgaGFzIGJlZW4gc2VudCBvdXQgdG8gYnVzLAorICogc28gYmVmb3JlIGRpc2FibGUgVFgsIGNoZWNrIGtMUFVBUlRfVHJhbnNtaXNzaW9uQ29tcGxldGVGbGFnIHRvIGVuc3VyZSB0aGUgVFggaXMKKyAqIGZpbmlzaGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFN0YXJ0IGFkZHJlc3NzIG9mIHRoZSBkYXRhIHRvIHdyaXRlLgorICogQHBhcmFtIGxlbmd0aCBTaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgc2VudC4KKyAqLworc3RhdGljIHZvaWQgTFBVQVJUX1dyaXRlTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpOworCisvKiEKKyAqIEBicmllZiBSZWFkIFJYIHJlZ2lzdGVyIHVzaW5nIG5vbi1ibG9ja2luZyBtZXRob2QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBkYXRhIGZyb20gdGhlIFRYIHJlZ2lzdGVyIGRpcmVjdGx5LCB1cHBlciBsYXllciBtdXN0IG1ha2UKKyAqIHN1cmUgdGhlIFJYIHJlZ2lzdGVyIGlzIGZ1bGwgb3IgVFggRklGTyBoYXMgZGF0YSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFN0YXJ0IGFkZHJlc3NzIG9mIHRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIHJlY2VpdmVkIGRhdGEuCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgb2YgdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgTFBVQVJUX1JlYWROb25CbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBcnJheSBvZiBMUFVBUlQgaGFuZGxlLiAqLworc3RhdGljIGxwdWFydF9oYW5kbGVfdCAqc19scHVhcnRIYW5kbGVbRlNMX0ZFQVRVUkVfU09DX0xQVUFSVF9DT1VOVF07CisvKiBBcnJheSBvZiBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuICovCitzdGF0aWMgTFBVQVJUX1R5cGUgKmNvbnN0IHNfbHB1YXJ0QmFzZXNbXSA9IExQVUFSVF9CQVNFX1BUUlM7CisvKiBBcnJheSBvZiBMUFVBUlQgSVJRIG51bWJlci4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUQorc3RhdGljIGNvbnN0IElSUW5fVHlwZSBzX2xwdWFydFJ4SVJRW10gPSBMUFVBUlRfUlhfSVJRUzsKK3N0YXRpYyBjb25zdCBJUlFuX1R5cGUgc19scHVhcnRUeElSUVtdID0gTFBVQVJUX1RYX0lSUVM7CisjZWxzZQorc3RhdGljIGNvbnN0IElSUW5fVHlwZSBzX2xwdWFydElSUVtdID0gTFBVQVJUX1JYX1RYX0lSUVM7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiBBcnJheSBvZiBMUFVBUlQgY2xvY2sgbmFtZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc19scHVhcnRDbG9ja1tdID0gTFBVQVJUX0NMT0NLUzsKKworI2lmIGRlZmluZWQoTFBVQVJUX1BFUklQSF9DTE9DS1MpCisvKiBBcnJheSBvZiBMUFVBUlQgZnVuY3Rpb25hbCBjbG9jayBuYW1lLiAqLworc3RhdGljIGNvbnN0IGNsb2NrX2lwX25hbWVfdCBzX2xwdWFydFBlcmlwaENsb2Nrc1tdID0gTFBVQVJUX1BFUklQSF9DTE9DS1M7CisjZW5kaWYKKworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKiBMUFVBUlQgSVNSIGZvciB0cmFuc2FjdGlvbmFsIEFQSXMuICovCitzdGF0aWMgbHB1YXJ0X2lzcl90IHNfbHB1YXJ0SXNyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IExQVUFSVF9HZXRJbnN0YW5jZShMUFVBUlRfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKworICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGluZGV4IGZyb20gYmFzZSBhZGRyZXNzIG1hcHBpbmdzLiAqLworICAgIGZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IEFSUkFZX1NJWkUoc19scHVhcnRCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc19scHVhcnRCYXNlc1tpbnN0YW5jZV0gPT0gYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfbHB1YXJ0QmFzZXMpKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworc3RhdGljIHNpemVfdCBMUFVBUlRfVHJhbnNmZXJHZXRSeFJpbmdCdWZmZXJMZW5ndGgoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgc2l6ZV90IHNpemU7CisKKyAgICBpZiAoaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsID4gaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkKQorICAgIHsKKyAgICAgICAgc2l6ZSA9IChzaXplX3QpKGhhbmRsZS0+cnhSaW5nQnVmZmVySGVhZCArIGhhbmRsZS0+cnhSaW5nQnVmZmVyU2l6ZSAtIGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNpemUgPSAoc2l6ZV90KShoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWQgLSBoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwpOworICAgIH0KKworICAgIHJldHVybiBzaXplOworfQorCitzdGF0aWMgYm9vbCBMUFVBUlRfVHJhbnNmZXJJc1J4UmluZ0J1ZmZlckZ1bGwoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgYm9vbCBmdWxsOworCisgICAgaWYgKExQVUFSVF9UcmFuc2ZlckdldFJ4UmluZ0J1ZmZlckxlbmd0aChiYXNlLCBoYW5kbGUpID09IChoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUgLSAxVSkpCisgICAgeworICAgICAgICBmdWxsID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZnVsbCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZnVsbDsKK30KKworc3RhdGljIHZvaWQgTFBVQVJUX1dyaXRlTm9uQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgc2l6ZV90IGk7CisKKyAgICAvKiBUaGUgTm9uIEJsb2NraW5nIHdyaXRlIGRhdGEgQVBJIGFzc3VtZSB1c2VyIGhhdmUgZW5zdXJlZCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4KKyAgICBwZXJpcGhlcmFsIHRvIHdyaXRlLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGJhc2UtPkRBVEEgPSBkYXRhW2ldOworICAgIH0KK30KKworc3RhdGljIHZvaWQgTFBVQVJUX1JlYWROb25CbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhc3NlcnQoZGF0YSk7CisKKyAgICBzaXplX3QgaTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICB1aW50MzJfdCBjdHJsID0gYmFzZS0+Q1RSTDsKKyAgICBib29sIGlzU2V2ZW5EYXRhQml0cyA9CisgICAgICAgICgoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spIHx8CisgICAgICAgICAoKCEoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spKSAmJiAoIShjdHJsICYgTFBVQVJUX0NUUkxfTV9NQVNLKSkgJiYgKGN0cmwgJiBMUFVBUlRfQ1RSTF9QRV9NQVNLKSkpOworI2VuZGlmCisKKyAgICAvKiBUaGUgTm9uIEJsb2NraW5nIHJlYWQgZGF0YSBBUEkgYXNzdW1lIHVzZXIgaGF2ZSBlbnN1cmVkIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpbgorICAgIHBlcmlwaGVyYWwgdG8gd3JpdGUuICovCisgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgIHsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICAgICAgaWYgKGlzU2V2ZW5EYXRhQml0cykKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YVtpXSA9IChiYXNlLT5EQVRBICYgMHg3Rik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkYXRhW2ldID0gYmFzZS0+REFUQTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgZGF0YVtpXSA9IGJhc2UtPkRBVEE7CisjZW5kaWYKKyAgICB9Cit9CisKK3N0YXR1c190IExQVUFSVF9Jbml0KExQVUFSVF9UeXBlICpiYXNlLCBjb25zdCBscHVhcnRfY29uZmlnX3QgKmNvbmZpZywgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisgICAgYXNzZXJ0KGNvbmZpZy0+YmF1ZFJhdGVfQnBzKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgYXNzZXJ0KEZTTF9GRUFUVVJFX0xQVUFSVF9GSUZPX1NJWkVuKGJhc2UpID49IGNvbmZpZy0+dHhGaWZvV2F0ZXJtYXJrKTsKKyAgICBhc3NlcnQoRlNMX0ZFQVRVUkVfTFBVQVJUX0ZJRk9fU0laRW4oYmFzZSkgPj0gY29uZmlnLT5yeEZpZm9XYXRlcm1hcmspOworI2VuZGlmCisKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIHVpbnQxNl90IHNiciwgc2JyVGVtcDsKKyAgICB1aW50MzJfdCBvc3IsIG9zclRlbXAsIHRlbXBEaWZmLCBjYWxjdWxhdGVkQmF1ZCwgYmF1ZERpZmY7CisKKyAgICAvKiBUaGlzIExQVUFSVCBpbnN0YW50aWF0aW9uIHVzZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgYmF1ZCByYXRlIGNhbGN1bGF0aW9uCisgICAgICogVGhlIGlkZWEgaXMgdG8gdXNlIHRoZSBiZXN0IE9TUiAob3Zlci1zYW1wbGluZyByYXRlKSBwb3NzaWJsZQorICAgICAqIE5vdGUsIE9TUiBpcyB0eXBpY2FsbHkgaGFyZC1zZXQgdG8gMTYgaW4gb3RoZXIgTFBVQVJUIGluc3RhbnRpYXRpb25zCisgICAgICogbG9vcCB0byBmaW5kIHRoZSBiZXN0IE9TUiB2YWx1ZSBwb3NzaWJsZSwgb25lIHRoYXQgZ2VuZXJhdGVzIG1pbmltdW0gYmF1ZERpZmYKKyAgICAgKiBpdGVyYXRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgb2YgT1NSICovCisKKyAgICBiYXVkRGlmZiA9IGNvbmZpZy0+YmF1ZFJhdGVfQnBzOworICAgIG9zciA9IDA7CisgICAgc2JyID0gMDsKKyAgICBmb3IgKG9zclRlbXAgPSA0OyBvc3JUZW1wIDw9IDMyOyBvc3JUZW1wKyspCisgICAgeworICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIHRlbXBvcmFyeSBzYnIgdmFsdWUgICAqLworICAgICAgICBzYnJUZW1wID0gKHNyY0Nsb2NrX0h6IC8gKGNvbmZpZy0+YmF1ZFJhdGVfQnBzICogb3NyVGVtcCkpOworICAgICAgICAvKnNldCBzYnJUZW1wIHRvIDEgaWYgdGhlIHNvdXJjZUNsb2NrSW5IeiBjYW4gbm90IHNhdGlzZnkgdGhlIGRlc2lyZWQgYmF1ZCByYXRlKi8KKyAgICAgICAgaWYgKHNiclRlbXAgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc2JyVGVtcCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSBiYXVkIHJhdGUgYmFzZWQgb24gdGhlIHRlbXBvcmFyeSBPU1IgYW5kIFNCUiB2YWx1ZXMgKi8KKyAgICAgICAgY2FsY3VsYXRlZEJhdWQgPSAoc3JjQ2xvY2tfSHogLyAob3NyVGVtcCAqIHNiclRlbXApKTsKKworICAgICAgICB0ZW1wRGlmZiA9IGNhbGN1bGF0ZWRCYXVkIC0gY29uZmlnLT5iYXVkUmF0ZV9CcHM7CisKKyAgICAgICAgLyogU2VsZWN0IHRoZSBiZXR0ZXIgdmFsdWUgYmV0d2VlbiBzcmIgYW5kIChzYnIgKyAxKSAqLworICAgICAgICBpZiAodGVtcERpZmYgPiAoY29uZmlnLT5iYXVkUmF0ZV9CcHMgLSAoc3JjQ2xvY2tfSHogLyAob3NyVGVtcCAqIChzYnJUZW1wICsgMSkpKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBEaWZmID0gY29uZmlnLT5iYXVkUmF0ZV9CcHMgLSAoc3JjQ2xvY2tfSHogLyAob3NyVGVtcCAqIChzYnJUZW1wICsgMSkpKTsKKyAgICAgICAgICAgIHNiclRlbXArKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZW1wRGlmZiA8PSBiYXVkRGlmZikKKyAgICAgICAgeworICAgICAgICAgICAgYmF1ZERpZmYgPSB0ZW1wRGlmZjsKKyAgICAgICAgICAgIG9zciA9IG9zclRlbXA7IC8qIHVwZGF0ZSBhbmQgc3RvcmUgdGhlIGJlc3QgT1NSIHZhbHVlIGNhbGN1bGF0ZWQgKi8KKyAgICAgICAgICAgIHNiciA9IHNiclRlbXA7IC8qIHVwZGF0ZSBzdG9yZSB0aGUgYmVzdCBTQlIgdmFsdWUgY2FsY3VsYXRlZCAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgdG8gc2VlIGlmIGFjdHVhbCBiYXVkIHJhdGUgaXMgd2l0aGluIDMlIG9mIGRlc2lyZWQgYmF1ZCByYXRlCisgICAgICogYmFzZWQgb24gdGhlIGJlc3QgY2FsY3VsYXRlIE9TUiB2YWx1ZSAqLworICAgIGlmIChiYXVkRGlmZiA+ICgoY29uZmlnLT5iYXVkUmF0ZV9CcHMgLyAxMDApICogMykpCisgICAgeworICAgICAgICAvKiBVbmFjY2VwdGFibGUgYmF1ZCByYXRlIGRpZmZlcmVuY2Ugb2YgbW9yZSB0aGFuIDMlKi8KKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTFBVQVJUX0JhdWRyYXRlTm90U3VwcG9ydDsKKyAgICB9CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgCisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBMUFVBUlRfR2V0SW5zdGFuY2UoYmFzZSk7CisKKyAgICAvKiBFbmFibGUgbHB1YXJ0IGNsb2NrICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19scHVhcnRDbG9ja1tpbnN0YW5jZV0pOworI2lmIGRlZmluZWQoTFBVQVJUX1BFUklQSF9DTE9DS1MpCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc19scHVhcnRQZXJpcGhDbG9ja3NbaW5zdGFuY2VdKTsKKyNlbmRpZgorCisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfR0xPQkFMKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0dMT0JBTAorICAgIC8qUmVzZXQgYWxsIGludGVybmFsIGxvZ2ljIGFuZCByZWdpc3RlcnMsIGV4Y2VwdCB0aGUgR2xvYmFsIFJlZ2lzdGVyICovCisgICAgTFBVQVJUX1NvZnR3YXJlUmVzZXQoYmFzZSk7CisjZWxzZQorICAgIC8qIERpc2FibGUgTFBVQVJUIFRYIFJYIGJlZm9yZSBzZXR0aW5nLiAqLworICAgIGJhc2UtPkNUUkwgJj0gfihMUFVBUlRfQ1RSTF9URV9NQVNLIHwgTFBVQVJUX0NUUkxfUkVfTUFTSyk7CisjZW5kaWYKKworICAgIHRlbXAgPSBiYXNlLT5CQVVEOworCisgICAgLyogQWNjZXB0YWJsZSBiYXVkIHJhdGUsIGNoZWNrIGlmIE9TUiBpcyBiZXR3ZWVuIDR4IGFuZCA3eCBvdmVyc2FtcGxpbmcuCisgICAgICogSWYgc28sIHRoZW4gIkJPVEhFREdFIiBzYW1wbGluZyBtdXN0IGJlIHR1cm5lZCBvbiAqLworICAgIGlmICgob3NyID4gMykgJiYgKG9zciA8IDgpKQorICAgIHsKKyAgICAgICAgdGVtcCB8PSBMUFVBUlRfQkFVRF9CT1RIRURHRV9NQVNLOworICAgIH0KKworICAgIC8qIHByb2dyYW0gdGhlIG9zciB2YWx1ZSAoYml0IHZhbHVlIGlzIG9uZSBsZXNzIHRoYW4gYWN0dWFsIHZhbHVlKSAqLworICAgIHRlbXAgJj0gfkxQVUFSVF9CQVVEX09TUl9NQVNLOworICAgIHRlbXAgfD0gTFBVQVJUX0JBVURfT1NSKG9zciAtIDEpOworCisgICAgLyogd3JpdGUgdGhlIHNiciB2YWx1ZSB0byB0aGUgQkFVRCByZWdpc3RlcnMgKi8KKyAgICB0ZW1wICY9IH5MUFVBUlRfQkFVRF9TQlJfTUFTSzsKKyAgICBiYXNlLT5CQVVEID0gdGVtcCB8IExQVUFSVF9CQVVEX1NCUihzYnIpOworCisgICAgLyogU2V0IGJpdCBjb3VudCBhbmQgcGFyaXR5IG1vZGUuICovCisgICAgYmFzZS0+QkFVRCAmPSB+TFBVQVJUX0JBVURfTTEwX01BU0s7CisKKyAgICB0ZW1wID0gYmFzZS0+Q1RSTCAmIH4oTFBVQVJUX0NUUkxfUEVfTUFTSyB8IExQVUFSVF9DVFJMX1BUX01BU0sgfCBMUFVBUlRfQ1RSTF9NX01BU0spOworCisgICAgdGVtcCB8PSAodWludDhfdCljb25maWctPnBhcml0eU1vZGU7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICBpZiAoa0xQVUFSVF9TZXZlbkRhdGFCaXRzID09IGNvbmZpZy0+ZGF0YUJpdHNDb3VudCkKKyAgICB7CisgICAgICAgIGlmIChrTFBVQVJUX1Bhcml0eURpc2FibGVkICE9IGNvbmZpZy0+cGFyaXR5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCAmPSB+TFBVQVJUX0NUUkxfTTdfTUFTSzsgLyogU2V2ZW4gZGF0YSBiaXRzIGFuZCBvbmUgcGFyaXR5IGJpdCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCB8PSBMUFVBUlRfQ1RSTF9NN19NQVNLOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKGtMUFVBUlRfUGFyaXR5RGlzYWJsZWQgIT0gY29uZmlnLT5wYXJpdHlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wIHw9IExQVUFSVF9DVFJMX01fTUFTSzsgLyogRWlnaHQgZGF0YSBiaXRzIGFuZCBvbmUgcGFyaXR5IGJpdCAqLworICAgICAgICB9CisgICAgfQorCisgICAgYmFzZS0+Q1RSTCA9IHRlbXA7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU1RPUF9CSVRfQ09ORklHX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU1RPUF9CSVRfQ09ORklHX1NVUFBPUlQKKyAgICAvKiBzZXQgc3RvcCBiaXQgcGVyIGNoYXIgKi8KKyAgICB0ZW1wID0gYmFzZS0+QkFVRCAmIH5MUFVBUlRfQkFVRF9TQk5TX01BU0s7CisgICAgYmFzZS0+QkFVRCA9IHRlbXAgfCBMUFVBUlRfQkFVRF9TQk5TKCh1aW50OF90KWNvbmZpZy0+c3RvcEJpdENvdW50KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIC8qIFNldCB0eC9yeCBXQVRFUiB3YXRlcm1hcmsgKi8KKyAgICBiYXNlLT5XQVRFUiA9ICgoKHVpbnQzMl90KShjb25maWctPnJ4Rmlmb1dhdGVybWFyaykgPDwgMTYpIHwgY29uZmlnLT50eEZpZm9XYXRlcm1hcmspOworCisgICAgLyogRW5hYmxlIHR4L3J4IEZJRk8gKi8KKyAgICBiYXNlLT5GSUZPIHw9IChMUFVBUlRfRklGT19UWEZFX01BU0sgfCBMUFVBUlRfRklGT19SWEZFX01BU0spOworCisgICAgLyogRmx1c2ggRklGTyAqLworICAgIGJhc2UtPkZJRk8gfD0gKExQVUFSVF9GSUZPX1RYRkxVU0hfTUFTSyB8IExQVUFSVF9GSUZPX1JYRkxVU0hfTUFTSyk7CisjZW5kaWYKKworICAgIC8qIENsZWFyIGFsbCBzdGF0dXMgZmxhZ3MgKi8KKyAgICB0ZW1wID0gKExQVUFSVF9TVEFUX1JYRURHSUZfTUFTSyB8IExQVUFSVF9TVEFUX0lETEVfTUFTSyB8IExQVUFSVF9TVEFUX09SX01BU0sgfCBMUFVBUlRfU1RBVF9ORl9NQVNLIHwKKyAgICAgICAgICAgIExQVUFSVF9TVEFUX0ZFX01BU0sgfCBMUFVBUlRfU1RBVF9QRl9NQVNLKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QKKyAgICB0ZW1wIHw9IExQVUFSVF9TVEFUX0xCS0RJRl9NQVNLOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19BRERSRVNTX01BVENISU5HCisgICAgdGVtcCB8PSAoTFBVQVJUX1NUQVRfTUExRl9NQVNLIHwgTFBVQVJUX1NUQVRfTUEyRl9NQVNLKTsKKyNlbmRpZgorCisgICAgLyogU2V0IGRhdGEgYml0cyBvcmRlci4gKi8KKyAgICBpZiAoY29uZmlnLT5pc01zYikKKyAgICB7CisgICAgICAgIHRlbXAgfD0gTFBVQVJUX1NUQVRfTVNCRl9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0ZW1wICY9IH5MUFVBUlRfU1RBVF9NU0JGX01BU0s7CisgICAgfQorCisgICAgYmFzZS0+U1RBVCB8PSB0ZW1wOworCisgICAgLyogRW5hYmxlIFRYL1JYIGJhc2Ugb24gY29uZmlndXJlIHN0cnVjdHVyZS4gKi8KKyAgICB0ZW1wID0gYmFzZS0+Q1RSTDsKKyAgICBpZiAoY29uZmlnLT5lbmFibGVUeCkKKyAgICB7CisgICAgICAgIHRlbXAgfD0gTFBVQVJUX0NUUkxfVEVfTUFTSzsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLT5lbmFibGVSeCkKKyAgICB7CisgICAgICAgIHRlbXAgfD0gTFBVQVJUX0NUUkxfUkVfTUFTSzsKKyAgICB9CisKKyAgICBiYXNlLT5DVFJMID0gdGVtcDsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9Cit2b2lkIExQVUFSVF9EZWluaXQoTFBVQVJUX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgdGVtcDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAvKiBXYWl0IHR4IEZJRk8gc2VuZCBvdXQqLworICAgIHdoaWxlICgwICE9ICgoYmFzZS0+V0FURVIgJiBMUFVBUlRfV0FURVJfVFhDT1VOVF9NQVNLKSA+PiBMUFVBUlRfV0FURVJfVFhXQVRFUl9TSElGVCkpCisgICAgeworICAgIH0KKyNlbmRpZgorICAgIC8qIFdhaXQgbGFzdCBjaGFyIHNob2Z0IG91dCAqLworICAgIHdoaWxlICgwID09IChiYXNlLT5TVEFUICYgTFBVQVJUX1NUQVRfVENfTUFTSykpCisgICAgeworICAgIH0KKworICAgIC8qIENsZWFyIGFsbCBzdGF0dXMgZmxhZ3MgKi8KKyAgICB0ZW1wID0gKExQVUFSVF9TVEFUX1JYRURHSUZfTUFTSyB8IExQVUFSVF9TVEFUX0lETEVfTUFTSyB8IExQVUFSVF9TVEFUX09SX01BU0sgfCBMUFVBUlRfU1RBVF9ORl9NQVNLIHwKKyAgICAgICAgICAgIExQVUFSVF9TVEFUX0ZFX01BU0sgfCBMUFVBUlRfU1RBVF9QRl9NQVNLKTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QKKyAgICB0ZW1wIHw9IExQVUFSVF9TVEFUX0xCS0RJRl9NQVNLOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19BRERSRVNTX01BVENISU5HCisgICAgdGVtcCB8PSAoTFBVQVJUX1NUQVRfTUExRl9NQVNLIHwgTFBVQVJUX1NUQVRfTUEyRl9NQVNLKTsKKyNlbmRpZgorCisgICAgYmFzZS0+U1RBVCB8PSB0ZW1wOworCisgICAgLyogRGlzYWJsZSB0aGUgbW9kdWxlLiAqLworICAgIGJhc2UtPkNUUkwgPSAwOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIHVpbnQzMl90IGluc3RhbmNlID0gTFBVQVJUX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgLyogRGlzYWJsZSBscHVhcnQgY2xvY2sgKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19scHVhcnRDbG9ja1tpbnN0YW5jZV0pOworCisjaWYgZGVmaW5lZChMUFVBUlRfUEVSSVBIX0NMT0NLUykKKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soc19scHVhcnRQZXJpcGhDbG9ja3NbaW5zdGFuY2VdKTsKKyNlbmRpZgorCisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCit9CisKK3ZvaWQgTFBVQVJUX0dldERlZmF1bHRDb25maWcobHB1YXJ0X2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyAgICBjb25maWctPmJhdWRSYXRlX0JwcyA9IDExNTIwMFU7CisgICAgY29uZmlnLT5wYXJpdHlNb2RlID0ga0xQVUFSVF9QYXJpdHlEaXNhYmxlZDsKKyAgICBjb25maWctPmRhdGFCaXRzQ291bnQgPSBrTFBVQVJUX0VpZ2h0RGF0YUJpdHM7CisgICAgY29uZmlnLT5pc01zYiA9IGZhbHNlOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVAorICAgIGNvbmZpZy0+c3RvcEJpdENvdW50ID0ga0xQVUFSVF9PbmVTdG9wQml0OworI2VuZGlmCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIGNvbmZpZy0+dHhGaWZvV2F0ZXJtYXJrID0gMDsKKyAgICBjb25maWctPnJ4Rmlmb1dhdGVybWFyayA9IDA7CisjZW5kaWYKKyAgICBjb25maWctPmVuYWJsZVR4ID0gZmFsc2U7CisgICAgY29uZmlnLT5lbmFibGVSeCA9IGZhbHNlOworfQorCitzdGF0dXNfdCBMUFVBUlRfU2V0QmF1ZFJhdGUoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQzMl90IGJhdWRSYXRlX0JwcywgdWludDMyX3Qgc3JjQ2xvY2tfSHopCit7CisgICAgYXNzZXJ0KGJhdWRSYXRlX0Jwcyk7CisKKyAgICB1aW50MzJfdCB0ZW1wLCBvbGRDdHJsOworICAgIHVpbnQxNl90IHNiciwgc2JyVGVtcDsKKyAgICB1aW50MzJfdCBvc3IsIG9zclRlbXAsIHRlbXBEaWZmLCBjYWxjdWxhdGVkQmF1ZCwgYmF1ZERpZmY7CisKKyAgICAvKiBUaGlzIExQVUFSVCBpbnN0YW50aWF0aW9uIHVzZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgYmF1ZCByYXRlIGNhbGN1bGF0aW9uCisgICAgICogVGhlIGlkZWEgaXMgdG8gdXNlIHRoZSBiZXN0IE9TUiAob3Zlci1zYW1wbGluZyByYXRlKSBwb3NzaWJsZQorICAgICAqIE5vdGUsIE9TUiBpcyB0eXBpY2FsbHkgaGFyZC1zZXQgdG8gMTYgaW4gb3RoZXIgTFBVQVJUIGluc3RhbnRpYXRpb25zCisgICAgICogbG9vcCB0byBmaW5kIHRoZSBiZXN0IE9TUiB2YWx1ZSBwb3NzaWJsZSwgb25lIHRoYXQgZ2VuZXJhdGVzIG1pbmltdW0gYmF1ZERpZmYKKyAgICAgKiBpdGVyYXRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgb2YgT1NSICovCisKKyAgICBiYXVkRGlmZiA9IGJhdWRSYXRlX0JwczsKKyAgICBvc3IgPSAwOworICAgIHNiciA9IDA7CisgICAgZm9yIChvc3JUZW1wID0gNDsgb3NyVGVtcCA8PSAzMjsgb3NyVGVtcCsrKQorICAgIHsKKyAgICAgICAgLyogY2FsY3VsYXRlIHRoZSB0ZW1wb3Jhcnkgc2JyIHZhbHVlICAgKi8KKyAgICAgICAgc2JyVGVtcCA9IChzcmNDbG9ja19IeiAvIChiYXVkUmF0ZV9CcHMgKiBvc3JUZW1wKSk7CisgICAgICAgIC8qc2V0IHNiclRlbXAgdG8gMSBpZiB0aGUgc291cmNlQ2xvY2tJbkh6IGNhbiBub3Qgc2F0aXNmeSB0aGUgZGVzaXJlZCBiYXVkIHJhdGUqLworICAgICAgICBpZiAoc2JyVGVtcCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBzYnJUZW1wID0gMTsKKyAgICAgICAgfQorICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIGJhdWQgcmF0ZSBiYXNlZCBvbiB0aGUgdGVtcG9yYXJ5IE9TUiBhbmQgU0JSIHZhbHVlcyAqLworICAgICAgICBjYWxjdWxhdGVkQmF1ZCA9IChzcmNDbG9ja19IeiAvIChvc3JUZW1wICogc2JyVGVtcCkpOworCisgICAgICAgIHRlbXBEaWZmID0gY2FsY3VsYXRlZEJhdWQgLSBiYXVkUmF0ZV9CcHM7CisKKyAgICAgICAgLyogU2VsZWN0IHRoZSBiZXR0ZXIgdmFsdWUgYmV0d2VlbiBzcmIgYW5kIChzYnIgKyAxKSAqLworICAgICAgICBpZiAodGVtcERpZmYgPiAoYmF1ZFJhdGVfQnBzIC0gKHNyY0Nsb2NrX0h6IC8gKG9zclRlbXAgKiAoc2JyVGVtcCArIDEpKSkpKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wRGlmZiA9IGJhdWRSYXRlX0JwcyAtIChzcmNDbG9ja19IeiAvIChvc3JUZW1wICogKHNiclRlbXAgKyAxKSkpOworICAgICAgICAgICAgc2JyVGVtcCsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRlbXBEaWZmIDw9IGJhdWREaWZmKQorICAgICAgICB7CisgICAgICAgICAgICBiYXVkRGlmZiA9IHRlbXBEaWZmOworICAgICAgICAgICAgb3NyID0gb3NyVGVtcDsgLyogdXBkYXRlIGFuZCBzdG9yZSB0aGUgYmVzdCBPU1IgdmFsdWUgY2FsY3VsYXRlZCAqLworICAgICAgICAgICAgc2JyID0gc2JyVGVtcDsgLyogdXBkYXRlIHN0b3JlIHRoZSBiZXN0IFNCUiB2YWx1ZSBjYWxjdWxhdGVkICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDaGVjayB0byBzZWUgaWYgYWN0dWFsIGJhdWQgcmF0ZSBpcyB3aXRoaW4gMyUgb2YgZGVzaXJlZCBiYXVkIHJhdGUKKyAgICAgKiBiYXNlZCBvbiB0aGUgYmVzdCBjYWxjdWxhdGUgT1NSIHZhbHVlICovCisgICAgaWYgKGJhdWREaWZmIDwgKChiYXVkUmF0ZV9CcHMgLyAxMDApICogMykpCisgICAgeworICAgICAgICAvKiBTdG9yZSBDVFJMIGJlZm9yZSBkaXNhYmxlIFR4IGFuZCBSeCAqLworICAgICAgICBvbGRDdHJsID0gYmFzZS0+Q1RSTDsKKworICAgICAgICAvKiBEaXNhYmxlIExQVUFSVCBUWCBSWCBiZWZvcmUgc2V0dGluZy4gKi8KKyAgICAgICAgYmFzZS0+Q1RSTCAmPSB+KExQVUFSVF9DVFJMX1RFX01BU0sgfCBMUFVBUlRfQ1RSTF9SRV9NQVNLKTsKKworICAgICAgICB0ZW1wID0gYmFzZS0+QkFVRDsKKworICAgICAgICAvKiBBY2NlcHRhYmxlIGJhdWQgcmF0ZSwgY2hlY2sgaWYgT1NSIGlzIGJldHdlZW4gNHggYW5kIDd4IG92ZXJzYW1wbGluZy4KKyAgICAgICAgICogSWYgc28sIHRoZW4gIkJPVEhFREdFIiBzYW1wbGluZyBtdXN0IGJlIHR1cm5lZCBvbiAqLworICAgICAgICBpZiAoKG9zciA+IDMpICYmIChvc3IgPCA4KSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcCB8PSBMUFVBUlRfQkFVRF9CT1RIRURHRV9NQVNLOworICAgICAgICB9CisKKyAgICAgICAgLyogcHJvZ3JhbSB0aGUgb3NyIHZhbHVlIChiaXQgdmFsdWUgaXMgb25lIGxlc3MgdGhhbiBhY3R1YWwgdmFsdWUpICovCisgICAgICAgIHRlbXAgJj0gfkxQVUFSVF9CQVVEX09TUl9NQVNLOworICAgICAgICB0ZW1wIHw9IExQVUFSVF9CQVVEX09TUihvc3IgLSAxKTsKKworICAgICAgICAvKiB3cml0ZSB0aGUgc2JyIHZhbHVlIHRvIHRoZSBCQVVEIHJlZ2lzdGVycyAqLworICAgICAgICB0ZW1wICY9IH5MUFVBUlRfQkFVRF9TQlJfTUFTSzsKKyAgICAgICAgYmFzZS0+QkFVRCA9IHRlbXAgfCBMUFVBUlRfQkFVRF9TQlIoc2JyKTsKKworICAgICAgICAvKiBSZXN0b3JlIENUUkwuICovCisgICAgICAgIGJhc2UtPkNUUkwgPSBvbGRDdHJsOworCisgICAgICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFVuYWNjZXB0YWJsZSBiYXVkIHJhdGUgZGlmZmVyZW5jZSBvZiBtb3JlIHRoYW4gMyUqLworICAgICAgICByZXR1cm4ga1N0YXR1c19MUFVBUlRfQmF1ZHJhdGVOb3RTdXBwb3J0OworICAgIH0KK30KKwordm9pZCBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhMUFVBUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5CQVVEIHw9ICgobWFzayA8PCA4KSAmIChMUFVBUlRfQkFVRF9MQktESUVfTUFTSyB8IExQVUFSVF9CQVVEX1JYRURHSUVfTUFTSykpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICBiYXNlLT5GSUZPID0gKGJhc2UtPkZJRk8gJiB+KExQVUFSVF9GSUZPX1RYT0ZfTUFTSyB8IExQVUFSVF9GSUZPX1JYVUZfTUFTSykpIHwKKyAgICAgICAgICAgICAgICAgKChtYXNrIDw8IDgpICYgKExQVUFSVF9GSUZPX1RYT0ZFX01BU0sgfCBMUFVBUlRfRklGT19SWFVGRV9NQVNLKSk7CisjZW5kaWYKKyAgICBtYXNrICY9IDB4RkZGRkZGMDBVOworICAgIGJhc2UtPkNUUkwgfD0gbWFzazsKK30KKwordm9pZCBMUFVBUlRfRGlzYWJsZUludGVycnVwdHMoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+QkFVRCAmPSB+KChtYXNrIDw8IDgpICYgKExQVUFSVF9CQVVEX0xCS0RJRV9NQVNLIHwgTFBVQVJUX0JBVURfUlhFREdJRV9NQVNLKSk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIGJhc2UtPkZJRk8gPSAoYmFzZS0+RklGTyAmIH4oTFBVQVJUX0ZJRk9fVFhPRl9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhVRl9NQVNLKSkgJgorICAgICAgICAgICAgICAgICB+KChtYXNrIDw8IDgpICYgKExQVUFSVF9GSUZPX1RYT0ZFX01BU0sgfCBMUFVBUlRfRklGT19SWFVGRV9NQVNLKSk7CisjZW5kaWYKKyAgICBtYXNrICY9IDB4RkZGRkZGMDBVOworICAgIGJhc2UtPkNUUkwgJj0gfm1hc2s7Cit9CisKK3VpbnQzMl90IExQVUFSVF9HZXRFbmFibGVkSW50ZXJydXB0cyhMUFVBUlRfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCB0ZW1wOworICAgIHRlbXAgPSAoYmFzZS0+QkFVRCAmIChMUFVBUlRfQkFVRF9MQktESUVfTUFTSyB8IExQVUFSVF9CQVVEX1JYRURHSUVfTUFTSykpID4+IDg7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIHRlbXAgfD0gKGJhc2UtPkZJRk8gJiAoTFBVQVJUX0ZJRk9fVFhPRkVfTUFTSyB8IExQVUFSVF9GSUZPX1JYVUZFX01BU0spKSA+PiA4OworI2VuZGlmCisgICAgdGVtcCB8PSAoYmFzZS0+Q1RSTCAmIDB4RkYwQzAwMCk7CisKKyAgICByZXR1cm4gdGVtcDsKK30KKwordWludDMyX3QgTFBVQVJUX0dldFN0YXR1c0ZsYWdzKExQVUFSVF9UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgdGVtcCA9IGJhc2UtPlNUQVQ7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgIHRlbXAgfD0gKGJhc2UtPkZJRk8gJgorICAgICAgICAgICAgIChMUFVBUlRfRklGT19UWEVNUFRfTUFTSyB8IExQVUFSVF9GSUZPX1JYRU1QVF9NQVNLIHwgTFBVQVJUX0ZJRk9fVFhPRl9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhVRl9NQVNLKSkgPj4KKyAgICAgICAgICAgIDE2OworI2VuZGlmCisgICAgcmV0dXJuIHRlbXA7Cit9CisKK3N0YXR1c190IExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKExQVUFSVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IHRlbXA7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICB0ZW1wID0gKHVpbnQzMl90KWJhc2UtPkZJRk87CisgICAgdGVtcCAmPSAodWludDMyX3QpKH4oTFBVQVJUX0ZJRk9fVFhPRl9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhVRl9NQVNLKSk7CisgICAgdGVtcCB8PSAobWFzayA8PCAxNikgJiAoTFBVQVJUX0ZJRk9fVFhPRl9NQVNLIHwgTFBVQVJUX0ZJRk9fUlhVRl9NQVNLKTsKKyAgICBiYXNlLT5GSUZPID0gdGVtcDsKKyNlbmRpZgorICAgIHRlbXAgPSAodWludDMyX3QpYmFzZS0+U1RBVDsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfTElOX0JSRUFLX0RFVEVDVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUCisgICAgdGVtcCAmPSAodWludDMyX3QpKH4oTFBVQVJUX1NUQVRfTEJLRElGX01BU0spKTsKKyAgICB0ZW1wIHw9IG1hc2sgJiBMUFVBUlRfU1RBVF9MQktESUZfTUFTSzsKKyNlbmRpZgorICAgIHRlbXAgJj0gKHVpbnQzMl90KSh+KExQVUFSVF9TVEFUX1JYRURHSUZfTUFTSyB8IExQVUFSVF9TVEFUX0lETEVfTUFTSyB8IExQVUFSVF9TVEFUX09SX01BU0sgfCBMUFVBUlRfU1RBVF9ORl9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBMUFVBUlRfU1RBVF9GRV9NQVNLIHwgTFBVQVJUX1NUQVRfUEZfTUFTSykpOworICAgIHRlbXAgfD0gbWFzayAmIChMUFVBUlRfU1RBVF9SWEVER0lGX01BU0sgfCBMUFVBUlRfU1RBVF9JRExFX01BU0sgfCBMUFVBUlRfU1RBVF9PUl9NQVNLIHwgTFBVQVJUX1NUQVRfTkZfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgIExQVUFSVF9TVEFUX0ZFX01BU0sgfCBMUFVBUlRfU1RBVF9QRl9NQVNLKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19BRERSRVNTX01BVENISU5HCisgICAgdGVtcCAmPSAodWludDMyX3QpKH4oTFBVQVJUX1NUQVRfTUEyRl9NQVNLIHwgTFBVQVJUX1NUQVRfTUExRl9NQVNLKSk7CisgICAgdGVtcCB8PSBtYXNrICYgKExQVUFSVF9TVEFUX01BMkZfTUFTSyB8IExQVUFSVF9TVEFUX01BMUZfTUFTSyk7CisjZW5kaWYKKyAgICBiYXNlLT5TVEFUID0gdGVtcDsKKyAgICAvKiBJZiBzb21lIGZsYWdzIHN0aWxsIHBlbmRpbmcuICovCisgICAgaWYgKG1hc2sgJiBMUFVBUlRfR2V0U3RhdHVzRmxhZ3MoYmFzZSkpCisgICAgeworICAgICAgICAvKiBTb21lIGZsYWdzIGNhbiBvbmx5IGNsZWFyIG9yIHNldCBieSB0aGUgaGFyZHdhcmUgaXRzZWxmLCB0aGVzZSBmbGFncyBhcmU6IGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlGbGFnLAorICAgICAgICBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlRmxhZywga0xQVUFSVF9SeERhdGFSZWdGdWxsRmxhZywga0xQVUFSVF9SeEFjdGl2ZUZsYWcsCisgICAgICAgIGtMUFVBUlRfTm9pc2VFcnJvckluUnhEYXRhUmVnRmxhZywga0xQVUFSVF9QYXJpdHlFcnJvckluUnhEYXRhUmVnRmxhZywKKyAgICAgICAga0xQVUFSVF9UeEZpZm9FbXB0eUZsYWcsIGtMUFVBUlRfUnhGaWZvRW1wdHlGbGFnLiAqLworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0xQVUFSVF9GbGFnQ2Fubm90Q2xlYXJNYW51YWxseTsgLyogZmxhZ3MgY2FuIG5vdCBjbGVhciBtYW51YWxseSAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBMUFVBUlRfV3JpdGVCbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhc3NlcnQoZGF0YSk7CisKKyAgICAvKiBUaGlzIEFQSSBjYW4gb25seSBlbnN1cmUgdGhhdCB0aGUgZGF0YSBpcyB3cml0dGVuIGludG8gdGhlIGRhdGEgYnVmZmVyIGJ1dCBjYW4ndAorICAgIGVuc3VyZSBhbGwgZGF0YSBpbiB0aGUgZGF0YSBidWZmZXIgYXJlIHNlbnQgaW50byB0aGUgdHJhbnNtaXQgc2hpZnQgYnVmZmVyLiAqLworICAgIHdoaWxlIChsZW5ndGgtLSkKKyAgICB7CisgICAgICAgIHdoaWxlICghKGJhc2UtPlNUQVQgJiBMUFVBUlRfU1RBVF9URFJFX01BU0spKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgYmFzZS0+REFUQSA9ICooZGF0YSsrKTsKKyAgICB9Cit9CisKK3N0YXR1c190IExQVUFSVF9SZWFkQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgdWludDMyX3Qgc3RhdHVzRmxhZzsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICB1aW50MzJfdCBjdHJsID0gYmFzZS0+Q1RSTDsKKyAgICBib29sIGlzU2V2ZW5EYXRhQml0cyA9CisgICAgICAgICgoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spIHx8CisgICAgICAgICAoKCEoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spKSAmJiAoIShjdHJsICYgTFBVQVJUX0NUUkxfTV9NQVNLKSkgJiYgKGN0cmwgJiBMUFVBUlRfQ1RSTF9QRV9NQVNLKSkpOworI2VuZGlmCisKKyAgICB3aGlsZSAobGVuZ3RoLS0pCisgICAgeworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAgICAgd2hpbGUgKDAgPT0gKChiYXNlLT5XQVRFUiAmIExQVUFSVF9XQVRFUl9SWENPVU5UX01BU0spID4+IExQVUFSVF9XQVRFUl9SWENPVU5UX1NISUZUKSkKKyNlbHNlCisgICAgICAgIHdoaWxlICghKGJhc2UtPlNUQVQgJiBMUFVBUlRfU1RBVF9SRFJGX01BU0spKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1c0ZsYWcgPSBMUFVBUlRfR2V0U3RhdHVzRmxhZ3MoYmFzZSk7CisKKyAgICAgICAgICAgIGlmIChzdGF0dXNGbGFnICYga0xQVUFSVF9SeE92ZXJydW5GbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtMUFVBUlRfUnhPdmVycnVuRmxhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfTFBVQVJUX1J4SGFyZHdhcmVPdmVycnVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhdHVzRmxhZyAmIGtMUFVBUlRfTm9pc2VFcnJvckZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTFBVQVJUX0NsZWFyU3RhdHVzRmxhZ3MoYmFzZSwga0xQVUFSVF9Ob2lzZUVycm9yRmxhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfTFBVQVJUX05vaXNlRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdGF0dXNGbGFnICYga0xQVUFSVF9GcmFtaW5nRXJyb3JGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtMUFVBUlRfRnJhbWluZ0Vycm9yRmxhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfTFBVQVJUX0ZyYW1pbmdFcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXR1c0ZsYWcgJiBrTFBVQVJUX1Bhcml0eUVycm9yRmxhZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMUFVBUlRfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrTFBVQVJUX1Bhcml0eUVycm9yRmxhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtTdGF0dXNfTFBVQVJUX1Bhcml0eUVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgICAgIGlmIChpc1NldmVuRGF0YUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgICooZGF0YSsrKSA9IChiYXNlLT5EQVRBICYgMHg3Rik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqKGRhdGErKykgPSBiYXNlLT5EQVRBOworICAgICAgICB9CisjZWxzZQorICAgICAgICAqKGRhdGErKykgPSBiYXNlLT5EQVRBOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGUoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwdWFydF90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICB1aW50MzJfdCBjdHJsID0gYmFzZS0+Q1RSTDsKKyAgICBib29sIGlzU2V2ZW5EYXRhQml0cyA9CisgICAgICAgICgoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spIHx8CisgICAgICAgICAoKCEoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spKSAmJiAoIShjdHJsICYgTFBVQVJUX0NUUkxfTV9NQVNLKSkgJiYgKGN0cmwgJiBMUFVBUlRfQ1RSTF9QRV9NQVNLKSkpOworI2VuZGlmCisKKyAgICAvKiBaZXJvIHRoZSBoYW5kbGUuICovCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKGxwdWFydF9oYW5kbGVfdCkpOworCisgICAgLyogU2V0IHRoZSBUWC9SWCBzdGF0ZS4gKi8KKyAgICBoYW5kbGUtPnJ4U3RhdGUgPSBrTFBVQVJUX1J4SWRsZTsKKyAgICBoYW5kbGUtPnR4U3RhdGUgPSBrTFBVQVJUX1R4SWRsZTsKKworICAgIC8qIFNldCB0aGUgY2FsbGJhY2sgYW5kIHVzZXIgZGF0YS4gKi8KKyAgICBoYW5kbGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgaGFuZGxlLT51c2VyRGF0YSA9IHVzZXJEYXRhOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTXzdCSVRfREFUQV9TVVBQT1JUCisgICAgLyogSW5pdGlhbCBzZXZlbiBkYXRhIGJpdHMgZmxhZyAqLworICAgIGhhbmRsZS0+aXNTZXZlbkRhdGFCaXRzID0gaXNTZXZlbkRhdGFCaXRzOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgLyogTm90ZToKKyAgICAgICBUYWtlIGNhcmUgb2YgdGhlIFJYIEZJRk8sIFJYIGludGVycnVwdCByZXF1ZXN0IG9ubHkgYXNzZXJ0IHdoZW4gcmVjZWl2ZWQgYnl0ZXMKKyAgICAgICBlcXVhbCBvciBtb3JlIHRoYW4gUlggd2F0ZXIgbWFyaywgdGhlcmUgaXMgcG90ZW50aWFsIGlzc3VlIGlmIFJYIHdhdGVyCisgICAgICAgbWFyayBsYXJnZXIgdGhhbiAxLgorICAgICAgIEZvciBleGFtcGxlLCBpZiBSWCBGSUZPIHdhdGVyIG1hcmsgaXMgMiwgdXBwZXIgbGF5ZXIgbmVlZHMgNSBieXRlcyBhbmQKKyAgICAgICA1IGJ5dGVzIGFyZSByZWNlaXZlZC4gdGhlIGxhc3QgYnl0ZSB3aWxsIGJlIHNhdmVkIGluIEZJRk8gYnV0IG5vdCB0cmlnZ2VyCisgICAgICAgUlggaW50ZXJydXB0IGJlY2F1c2UgdGhlIHdhdGVyIG1hcmsgaXMgMi4KKyAgICAgKi8KKyAgICBiYXNlLT5XQVRFUiAmPSAofkxQVUFSVF9XQVRFUl9SWFdBVEVSX01BU0spOworI2VuZGlmCisKKyAgICAvKiBHZXQgaW5zdGFuY2UgZnJvbSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4gKi8KKyAgICBpbnN0YW5jZSA9IExQVUFSVF9HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIC8qIFNhdmUgdGhlIGhhbmRsZSBpbiBnbG9iYWwgdmFyaWFibGVzIHRvIHN1cHBvcnQgdGhlIGRvdWJsZSB3ZWFrIG1lY2hhbmlzbS4gKi8KKyAgICBzX2xwdWFydEhhbmRsZVtpbnN0YW5jZV0gPSBoYW5kbGU7CisKKyAgICBzX2xwdWFydElzciA9IExQVUFSVF9UcmFuc2ZlckhhbmRsZUlSUTsKKworLyogRW5hYmxlIGludGVycnVwdCBpbiBOVklDLiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRCisgICAgRW5hYmxlSVJRKHNfbHB1YXJ0UnhJUlFbaW5zdGFuY2VdKTsKKyAgICBFbmFibGVJUlEoc19scHVhcnRUeElSUVtpbnN0YW5jZV0pOworI2Vsc2UKKyAgICBFbmFibGVJUlEoc19scHVhcnRJUlFbaW5zdGFuY2VdKTsKKyNlbmRpZgorfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlclN0YXJ0UmluZ0J1ZmZlcihMUFVBUlRfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmluZ0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByaW5nQnVmZmVyU2l6ZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQocmluZ0J1ZmZlcik7CisKKyAgICAvKiBTZXR1cCB0aGUgcmluZyBidWZmZXIgYWRkcmVzcyAqLworICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVyID0gcmluZ0J1ZmZlcjsKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUgPSByaW5nQnVmZmVyU2l6ZTsKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWQgPSAwVTsKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwgPSAwVTsKKworICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IHRvIGFjY2VwdCB0aGUgZGF0YSB3aGVuIHVzZXIgbmVlZCB0aGUgcmluZyBidWZmZXIuICovCisgICAgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlclN0b3BSaW5nQnVmZmVyKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKworICAgIGlmIChoYW5kbGUtPnJ4U3RhdGUgPT0ga0xQVUFSVF9SeElkbGUpCisgICAgeworICAgICAgICBMUFVBUlRfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVyID0gTlVMTDsKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUgPSAwVTsKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWQgPSAwVTsKKyAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwgPSAwVTsKK30KKworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyU2VuZE5vbkJsb2NraW5nKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwgbHB1YXJ0X3RyYW5zZmVyX3QgKnhmZXIpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHhmZXIpOworICAgIGFzc2VydCh4ZmVyLT5kYXRhKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YVNpemUpOworCisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogUmV0dXJuIGVycm9yIGlmIGN1cnJlbnQgVFggYnVzeS4gKi8KKyAgICBpZiAoa0xQVUFSVF9UeEJ1c3kgPT0gaGFuZGxlLT50eFN0YXRlKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19MUFVBUlRfVHhCdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoYW5kbGUtPnR4RGF0YSA9IHhmZXItPmRhdGE7CisgICAgICAgIGhhbmRsZS0+dHhEYXRhU2l6ZSA9IHhmZXItPmRhdGFTaXplOworICAgICAgICBoYW5kbGUtPnR4RGF0YVNpemVBbGwgPSB4ZmVyLT5kYXRhU2l6ZTsKKyAgICAgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeEJ1c3k7CisKKyAgICAgICAgLyogRW5hYmxlIHRyYW5zbWl0ZXIgaW50ZXJydXB0LiAqLworICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrTFBVQVJUX1R4RGF0YVJlZ0VtcHR5SW50ZXJydXB0RW5hYmxlKTsKKworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJBYm9ydFNlbmQoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKGJhc2UsIGtMUFVBUlRfVHhEYXRhUmVnRW1wdHlJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlSW50ZXJydXB0RW5hYmxlKTsKKworICAgIGhhbmRsZS0+dHhEYXRhU2l6ZSA9IDA7CisgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeElkbGU7Cit9CisKK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlckdldFNlbmRDb3VudChMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsIHVpbnQzMl90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoY291bnQpOworCisgICAgaWYgKGtMUFVBUlRfVHhJZGxlID09IGhhbmRsZS0+dHhTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzOworICAgIH0KKworICAgICpjb3VudCA9IGhhbmRsZS0+dHhEYXRhU2l6ZUFsbCAtIGhhbmRsZS0+dHhEYXRhU2l6ZTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlclJlY2VpdmVOb25CbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfdHJhbnNmZXJfdCAqeGZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnJlY2VpdmVkQnl0ZXMpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KHhmZXIpOworICAgIGFzc2VydCh4ZmVyLT5kYXRhKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YVNpemUpOworCisgICAgdWludDMyX3QgaTsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgLyogSG93IG1hbnkgYnl0ZXMgdG8gY29weSBmcm9tIHJpbmcgYnVmZmVyIHRvIHVzZXIgbWVtb3J5LiAqLworICAgIHNpemVfdCBieXRlc1RvQ29weSA9IDBVOworICAgIC8qIEhvdyBtYW55IGJ5dGVzIHRvIHJlY2VpdmUuICovCisgICAgc2l6ZV90IGJ5dGVzVG9SZWNlaXZlOworICAgIC8qIEhvdyBtYW55IGJ5dGVzIGN1cnJlbnRseSBoYXZlIHJlY2VpdmVkLiAqLworICAgIHNpemVfdCBieXRlc0N1cnJlbnRSZWNlaXZlZDsKKworICAgIC8qIEhvdyB0byBnZXQgZGF0YToKKyAgICAgICAxLiBJZiBSWCByaW5nIGJ1ZmZlciBpcyBub3QgZW5hYmxlZCwgdGhlbiBzYXZlIHhmZXItPmRhdGEgYW5kIHhmZXItPmRhdGFTaXplCisgICAgICAgICAgdG8gbHB1YXJ0IGhhbmRsZSwgZW5hYmxlIGludGVycnVwdCB0byBzdG9yZSByZWNlaXZlZCBkYXRhIHRvIHhmZXItPmRhdGEuIFdoZW4KKyAgICAgICAgICBhbGwgZGF0YSByZWNlaXZlZCwgdHJpZ2dlciBjYWxsYmFjay4KKyAgICAgICAyLiBJZiBSWCByaW5nIGJ1ZmZlciBpcyBlbmFibGVkIGFuZCBub3QgZW1wdHksIGdldCBkYXRhIGZyb20gcmluZyBidWZmZXIgZmlyc3QuCisgICAgICAgICAgSWYgdGhlcmUgYXJlIGVub3VnaCBkYXRhIGluIHJpbmcgYnVmZmVyLCBjb3B5IHRoZW0gdG8geGZlci0+ZGF0YSBhbmQgcmV0dXJuLgorICAgICAgICAgIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIGRhdGEgaW4gcmluZyBidWZmZXIsIGNvcHkgYWxsIG9mIHRoZW0gdG8geGZlci0+ZGF0YSwKKyAgICAgICAgICBzYXZlIHRoZSB4ZmVyLT5kYXRhIHJlbWFpbmVkIGVtcHR5IHNwYWNlIHRvIGxwdWFydCBoYW5kbGUsIHJlY2VpdmUgZGF0YQorICAgICAgICAgIHRvIHRoaXMgZW1wdHkgc3BhY2UgYW5kIHRyaWdnZXIgY2FsbGJhY2sgd2hlbiBmaW5pc2hlZC4gKi8KKworICAgIGlmIChrTFBVQVJUX1J4QnVzeSA9PSBoYW5kbGUtPnJ4U3RhdGUpCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0xQVUFSVF9SeEJ1c3k7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJ5dGVzVG9SZWNlaXZlID0geGZlci0+ZGF0YVNpemU7CisgICAgICAgIGJ5dGVzQ3VycmVudFJlY2VpdmVkID0gMDsKKworICAgICAgICAvKiBJZiBSWCByaW5nIGJ1ZmZlciBpcyB1c2VkLiAqLworICAgICAgICBpZiAoaGFuZGxlLT5yeFJpbmdCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERpc2FibGUgTFBVQVJUIFJYIElSUSwgcHJvdGVjdCByaW5nIGJ1ZmZlci4gKi8KKyAgICAgICAgICAgIExQVUFSVF9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUpOworCisgICAgICAgICAgICAvKiBIb3cgbWFueSBieXRlcyBpbiBSWCByaW5nIGJ1ZmZlciBjdXJyZW50bHkuICovCisgICAgICAgICAgICBieXRlc1RvQ29weSA9IExQVUFSVF9UcmFuc2ZlckdldFJ4UmluZ0J1ZmZlckxlbmd0aChiYXNlLCBoYW5kbGUpOworCisgICAgICAgICAgICBpZiAoYnl0ZXNUb0NvcHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnl0ZXNUb0NvcHkgPSBNSU4oYnl0ZXNUb1JlY2VpdmUsIGJ5dGVzVG9Db3B5KTsKKworICAgICAgICAgICAgICAgIGJ5dGVzVG9SZWNlaXZlIC09IGJ5dGVzVG9Db3B5OworCisgICAgICAgICAgICAgICAgLyogQ29weSBkYXRhIGZyb20gcmluZyBidWZmZXIgdG8gdXNlciBtZW1vcnkuICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMFU7IGkgPCBieXRlc1RvQ29weTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeGZlci0+ZGF0YVtieXRlc0N1cnJlbnRSZWNlaXZlZCsrXSA9IGhhbmRsZS0+cnhSaW5nQnVmZmVyW2hhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbF07CisKKyAgICAgICAgICAgICAgICAgICAgLyogV3JhcCB0byAwLiBOb3QgdXNlIG1vZHVsbyAoJSkgYmVjYXVzZSBpdCBtaWdodCBiZSBsYXJnZSBhbmQgc2xvdy4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCArIDFVID09IGhhbmRsZS0+cnhSaW5nQnVmZmVyU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsID0gMFU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYgcmluZyBidWZmZXIgZG9lcyBub3QgaGF2ZSBlbm91Z2ggZGF0YSwgc3RpbGwgbmVlZCB0byByZWFkIG1vcmUgZGF0YS4gKi8KKyAgICAgICAgICAgIGlmIChieXRlc1RvUmVjZWl2ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBObyBkYXRhIGluIHJpbmcgYnVmZmVyLCBzYXZlIHRoZSByZXF1ZXN0IHRvIExQVUFSVCBoYW5kbGUuICovCisgICAgICAgICAgICAgICAgaGFuZGxlLT5yeERhdGEgPSB4ZmVyLT5kYXRhICsgYnl0ZXNDdXJyZW50UmVjZWl2ZWQ7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5yeERhdGFTaXplID0gYnl0ZXNUb1JlY2VpdmU7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5yeERhdGFTaXplQWxsID0gYnl0ZXNUb1JlY2VpdmU7CisgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeEJ1c3k7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBFbmFibGUgTFBVQVJUIFJYIElSUSBpZiBwcmV2aW91c2x5IGVuYWJsZWQuICovCisgICAgICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUpOworCisgICAgICAgICAgICAvKiBDYWxsIHVzZXIgY2FsbGJhY2sgc2luY2UgYWxsIGRhdGEgYXJlIHJlY2VpdmVkLiAqLworICAgICAgICAgICAgaWYgKDAgPT0gYnl0ZXNUb1JlY2VpdmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwga1N0YXR1c19MUFVBUlRfUnhJZGxlLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogUmluZyBidWZmZXIgbm90IHVzZWQuICovCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5yeERhdGEgPSB4ZmVyLT5kYXRhICsgYnl0ZXNDdXJyZW50UmVjZWl2ZWQ7CisgICAgICAgICAgICBoYW5kbGUtPnJ4RGF0YVNpemUgPSBieXRlc1RvUmVjZWl2ZTsKKyAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhU2l6ZUFsbCA9IGJ5dGVzVG9SZWNlaXZlOworICAgICAgICAgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeEJ1c3k7CisKKyAgICAgICAgICAgIC8qIEVuYWJsZSBSWCBpbnRlcnJ1cHQuICovCisgICAgICAgICAgICBMUFVBUlRfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxJbnRlcnJ1cHRFbmFibGUgfCBrTFBVQVJUX1J4T3ZlcnJ1bkludGVycnVwdEVuYWJsZSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBSZXR1cm4gdGhlIGhvdyBtYW55IGJ5dGVzIGhhdmUgcmVhZC4gKi8KKyAgICAgICAgaWYgKHJlY2VpdmVkQnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWNlaXZlZEJ5dGVzID0gYnl0ZXNDdXJyZW50UmVjZWl2ZWQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBMUFVBUlRfVHJhbnNmZXJBYm9ydFJlY2VpdmUoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIGFzc2VydChoYW5kbGUpOworCisgICAgLyogT25seSBhYm9ydCB0aGUgcmVjZWl2ZSB0byBoYW5kbGUtPnJ4RGF0YSwgdGhlIFJYIHJpbmcgYnVmZmVyIGlzIHN0aWxsIHdvcmtpbmcuICovCisgICAgaWYgKCFoYW5kbGUtPnJ4UmluZ0J1ZmZlcikKKyAgICB7CisgICAgICAgIC8qIERpc2FibGUgUlggaW50ZXJydXB0LiAqLworICAgICAgICBMUFVBUlRfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKworICAgIGhhbmRsZS0+cnhEYXRhU2l6ZSA9IDBVOworICAgIGhhbmRsZS0+cnhTdGF0ZSA9IGtMUFVBUlRfUnhJZGxlOworfQorCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnQoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGNvdW50KTsKKworICAgIGlmIChrTFBVQVJUX1J4SWRsZSA9PSBoYW5kbGUtPnJ4U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzczsKKyAgICB9CisKKyAgICAqY291bnQgPSBoYW5kbGUtPnJ4RGF0YVNpemVBbGwgLSBoYW5kbGUtPnJ4RGF0YVNpemU7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlckhhbmRsZUlSUShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICB1aW50OF90IGNvdW50OworICAgIHVpbnQ4X3QgdGVtcENvdW50OworCisgICAgLyogSWYgUlggb3ZlcnJ1bi4gKi8KKyAgICBpZiAoTFBVQVJUX1NUQVRfT1JfTUFTSyAmIGJhc2UtPlNUQVQpCisgICAgeworICAgICAgICAvKiBDbGVhciBvdmVycnVuIGZsYWcsIG90aGVyd2lzZSB0aGUgUlggZG9lcyBub3Qgd29yay4gKi8KKyAgICAgICAgYmFzZS0+U1RBVCA9ICgoYmFzZS0+U1RBVCAmIDB4M0ZFMDAwMDBVKSB8IExQVUFSVF9TVEFUX09SX01BU0spOworCisgICAgICAgIC8qIFRyaWdnZXIgY2FsbGJhY2suICovCisgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwga1N0YXR1c19MUFVBUlRfUnhIYXJkd2FyZU92ZXJydW4sIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUmVjZWl2ZSBkYXRhIHJlZ2lzdGVyIGZ1bGwgKi8KKyAgICBpZiAoKExQVUFSVF9TVEFUX1JEUkZfTUFTSyAmIGJhc2UtPlNUQVQpICYmIChMUFVBUlRfQ1RSTF9SSUVfTUFTSyAmIGJhc2UtPkNUUkwpKQorICAgIHsKKy8qIEdldCB0aGUgc2l6ZSB0aGF0IGNhbiBiZSBzdG9yZWQgaW50byBidWZmZXIgZm9yIHRoaXMgaW50ZXJydXB0LiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAgICAgY291bnQgPSAoKHVpbnQ4X3QpKChiYXNlLT5XQVRFUiAmIExQVUFSVF9XQVRFUl9SWENPVU5UX01BU0spID4+IExQVUFSVF9XQVRFUl9SWENPVU5UX1NISUZUKSk7CisjZWxzZQorICAgICAgICBjb3VudCA9IDE7CisjZW5kaWYKKworICAgICAgICAvKiBJZiBoYW5kbGUtPnJ4RGF0YVNpemUgaXMgbm90IDAsIGZpcnN0IHNhdmUgZGF0YSB0byBoYW5kbGUtPnJ4RGF0YS4gKi8KKyAgICAgICAgd2hpbGUgKChjb3VudCkgJiYgKGhhbmRsZS0+cnhEYXRhU2l6ZSkpCisgICAgICAgIHsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAgICAgICAgICB0ZW1wQ291bnQgPSBNSU4oaGFuZGxlLT5yeERhdGFTaXplLCBjb3VudCk7CisjZWxzZQorICAgICAgICAgICAgdGVtcENvdW50ID0gMTsKKyNlbmRpZgorCisgICAgICAgICAgICAvKiBVc2luZyBub24gYmxvY2sgQVBJIHRvIHJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVnaXN0ZXJzLiAqLworICAgICAgICAgICAgTFBVQVJUX1JlYWROb25CbG9ja2luZyhiYXNlLCBoYW5kbGUtPnJ4RGF0YSwgdGVtcENvdW50KTsKKyAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhICs9IHRlbXBDb3VudDsKKyAgICAgICAgICAgIGhhbmRsZS0+cnhEYXRhU2l6ZSAtPSB0ZW1wQ291bnQ7CisgICAgICAgICAgICBjb3VudCAtPSB0ZW1wQ291bnQ7CisKKyAgICAgICAgICAgIC8qIElmIGFsbCB0aGUgZGF0YSByZXF1aXJlZCBmb3IgdXBwZXIgbGF5ZXIgaXMgcmVhZHksIHRyaWdnZXIgY2FsbGJhY2suICovCisgICAgICAgICAgICBpZiAoIWhhbmRsZS0+cnhEYXRhU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnJ4U3RhdGUgPSBrTFBVQVJUX1J4SWRsZTsKKworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfTFBVQVJUX1J4SWRsZSwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdXNlIFJYIHJpbmcgYnVmZmVyLCByZWNlaXZlIGRhdGEgdG8gcmluZyBidWZmZXIuICovCisgICAgICAgIGlmIChoYW5kbGUtPnJ4UmluZ0J1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSWYgUlggcmluZyBidWZmZXIgaXMgZnVsbCwgdHJpZ2dlciBjYWxsYmFjayB0byBub3RpZnkgb3ZlciBydW4uICovCisgICAgICAgICAgICAgICAgaWYgKExQVUFSVF9UcmFuc2ZlcklzUnhSaW5nQnVmZmVyRnVsbChiYXNlLCBoYW5kbGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0xQVUFSVF9SeFJpbmdCdWZmZXJPdmVycnVuLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIElmIHJpbmcgYnVmZmVyIGlzIHN0aWxsIGZ1bGwgYWZ0ZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBvbGRlc3QgZGF0YSBpcyBvdmVycmlkZWQuICovCisgICAgICAgICAgICAgICAgaWYgKExQVUFSVF9UcmFuc2ZlcklzUnhSaW5nQnVmZmVyRnVsbChiYXNlLCBoYW5kbGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogSW5jcmVhc2UgaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsIHRvIG1ha2Ugcm9vbSBmb3IgbmV3IGRhdGEuICovCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4UmluZ0J1ZmZlclRhaWwgKyAxVSA9PSBoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cnhSaW5nQnVmZmVyVGFpbCA9IDBVOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJUYWlsKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKy8qIFJlYWQgZGF0YS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5pc1NldmVuRGF0YUJpdHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlcltoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWRdID0gKGJhc2UtPkRBVEEgJiAweDdGKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJbaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkXSA9IGJhc2UtPkRBVEE7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlcltoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWRdID0gYmFzZS0+REFUQTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgLyogSW5jcmVhc2UgaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkLiAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWQgKyAxVSA9PSBoYW5kbGUtPnJ4UmluZ0J1ZmZlclNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnJ4UmluZ0J1ZmZlckhlYWQgPSAwVTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5yeFJpbmdCdWZmZXJIZWFkKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIElmIG5vIHJlY2VpdmUgcmVxdXN0IHBlbmRpbmcsIHN0b3AgUlggaW50ZXJydXB0LiAqLworICAgICAgICBlbHNlIGlmICghaGFuZGxlLT5yeERhdGFTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBMUFVBUlRfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga0xQVUFSVF9SeERhdGFSZWdGdWxsSW50ZXJydXB0RW5hYmxlIHwga0xQVUFSVF9SeE92ZXJydW5JbnRlcnJ1cHRFbmFibGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICB9CisgICAgfQorCisgICAgLyogU2VuZCBkYXRhIHJlZ2lzdGVyIGVtcHR5IGFuZCB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQuICovCisgICAgaWYgKChiYXNlLT5TVEFUICYgTFBVQVJUX1NUQVRfVERSRV9NQVNLKSAmJiAoYmFzZS0+Q1RSTCAmIExQVUFSVF9DVFJMX1RJRV9NQVNLKSkKKyAgICB7CisvKiBHZXQgdGhlIGJ5dGVzIHRoYXQgYXZhaWxhYmxlIGF0IHRoaXMgbW9tZW50LiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAgICAgY291bnQgPSBGU0xfRkVBVFVSRV9MUFVBUlRfRklGT19TSVpFbihiYXNlKSAtCisgICAgICAgICAgICAgICAgKChiYXNlLT5XQVRFUiAmIExQVUFSVF9XQVRFUl9UWENPVU5UX01BU0spID4+IExQVUFSVF9XQVRFUl9UWENPVU5UX1NISUZUKTsKKyNlbHNlCisgICAgICAgIGNvdW50ID0gMTsKKyNlbmRpZgorCisgICAgICAgIHdoaWxlICgoY291bnQpICYmIChoYW5kbGUtPnR4RGF0YVNpemUpKQorICAgICAgICB7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8pICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTworICAgICAgICAgICAgdGVtcENvdW50ID0gTUlOKGhhbmRsZS0+dHhEYXRhU2l6ZSwgY291bnQpOworI2Vsc2UKKyAgICAgICAgICAgIHRlbXBDb3VudCA9IDE7CisjZW5kaWYKKworICAgICAgICAgICAgLyogVXNpbmcgbm9uIGJsb2NrIEFQSSB0byB3cml0ZSB0aGUgZGF0YSB0byB0aGUgcmVnaXN0ZXJzLiAqLworICAgICAgICAgICAgTFBVQVJUX1dyaXRlTm9uQmxvY2tpbmcoYmFzZSwgaGFuZGxlLT50eERhdGEsIHRlbXBDb3VudCk7CisgICAgICAgICAgICBoYW5kbGUtPnR4RGF0YSArPSB0ZW1wQ291bnQ7CisgICAgICAgICAgICBoYW5kbGUtPnR4RGF0YVNpemUgLT0gdGVtcENvdW50OworICAgICAgICAgICAgY291bnQgLT0gdGVtcENvdW50OworCisgICAgICAgICAgICAvKiBJZiBhbGwgdGhlIGRhdGEgYXJlIHdyaXR0ZW4gdG8gZGF0YSByZWdpc3Rlciwgbm90aWZ5IHVzZXIgd2l0aCB0aGUgY2FsbGJhY2ssIHRoZW4gVFggZmluaXNoZWQuICovCisgICAgICAgICAgICBpZiAoIWhhbmRsZS0+dHhEYXRhU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUtPnR4U3RhdGUgPSBrTFBVQVJUX1R4SWRsZTsKKworICAgICAgICAgICAgICAgIC8qIERpc2FibGUgVFggcmVnaXN0ZXIgZW1wdHkgaW50ZXJydXB0LiAqLworICAgICAgICAgICAgICAgIGJhc2UtPkNUUkwgPSAoYmFzZS0+Q1RSTCAmIH5MUFVBUlRfQ1RSTF9USUVfTUFTSyk7CisKKyAgICAgICAgICAgICAgICAvKiBUcmlnZ2VyIGNhbGxiYWNrLiAqLworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfTFBVQVJUX1R4SWRsZSwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlckhhbmRsZUVycm9ySVJRKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICAvKiBUbyBiZSBpbXBsZW1lbnRlZCBieSBVc2VyLiAqLworfQorCisjaWYgZGVmaW5lZChMUFVBUlQwKQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRCit2b2lkIExQVUFSVDBfVFhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDAsIHNfbHB1YXJ0SGFuZGxlWzBdKTsKK30KK3ZvaWQgTFBVQVJUMF9SWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMCwgc19scHVhcnRIYW5kbGVbMF0pOworfQorI2Vsc2UKK3ZvaWQgTFBVQVJUMF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMCwgc19scHVhcnRIYW5kbGVbMF0pOworfQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFBVQVJUMSkKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUQordm9pZCBMUFVBUlQxX1RYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQxLCBzX2xwdWFydEhhbmRsZVsxXSk7Cit9Cit2b2lkIExQVUFSVDFfUlhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDEsIHNfbHB1YXJ0SGFuZGxlWzFdKTsKK30KKyNlbHNlCit2b2lkIExQVUFSVDFfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDEsIHNfbHB1YXJ0SGFuZGxlWzFdKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExQVUFSVDIpCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUSkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEKK3ZvaWQgTFBVQVJUMl9UWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMiwgc19scHVhcnRIYW5kbGVbMl0pOworfQordm9pZCBMUFVBUlQyX1JYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQyLCBzX2xwdWFydEhhbmRsZVsyXSk7Cit9CisjZWxzZQordm9pZCBMUFVBUlQyX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQyLCBzX2xwdWFydEhhbmRsZVsyXSk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMUFVBUlQzKQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRCit2b2lkIExQVUFSVDNfVFhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDMsIHNfbHB1YXJ0SGFuZGxlWzNdKTsKK30KK3ZvaWQgTFBVQVJUM19SWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMywgc19scHVhcnRIYW5kbGVbM10pOworfQorI2Vsc2UKK3ZvaWQgTFBVQVJUM19Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUMywgc19scHVhcnRIYW5kbGVbM10pOworfQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFBVQVJUNCkKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfU0VQQVJBVEVfUlhfVFhfSVJRKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUQordm9pZCBMUFVBUlQ0X1RYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQ0LCBzX2xwdWFydEhhbmRsZVs0XSk7Cit9Cit2b2lkIExQVUFSVDRfUlhfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDQsIHNfbHB1YXJ0SGFuZGxlWzRdKTsKK30KKyNlbHNlCit2b2lkIExQVUFSVDRfRHJpdmVySVJRSGFuZGxlcih2b2lkKQoreworICAgIHNfbHB1YXJ0SXNyKExQVUFSVDQsIHNfbHB1YXJ0SGFuZGxlWzRdKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExQVUFSVDUpCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX1NFUEFSQVRFX1JYX1RYX0lSUSkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TRVBBUkFURV9SWF9UWF9JUlEKK3ZvaWQgTFBVQVJUNV9UWF9Ecml2ZXJJUlFIYW5kbGVyKHZvaWQpCit7CisgICAgc19scHVhcnRJc3IoTFBVQVJUNSwgc19scHVhcnRIYW5kbGVbNV0pOworfQordm9pZCBMUFVBUlQ1X1JYX0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQ1LCBzX2xwdWFydEhhbmRsZVs1XSk7Cit9CisjZWxzZQordm9pZCBMUFVBUlQ1X0RyaXZlcklSUUhhbmRsZXIodm9pZCkKK3sKKyAgICBzX2xwdWFydElzcihMUFVBUlQ1LCBzX2xwdWFydEhhbmRsZVs1XSk7Cit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzYwZjgyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0LmgKQEAgLTAsMCArMSw4MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfTFBVQVJUX0hfCisjZGVmaW5lIF9GU0xfTFBVQVJUX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHB1YXJ0X2RyaXZlcgorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIExQVUFSVCBkcml2ZXIgdmVyc2lvbiAyLjIuMy4gKi8KKyNkZWZpbmUgRlNMX0xQVUFSVF9EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDIsIDMpKQorLypAfSovCisKKy8qISBAYnJpZWYgRXJyb3IgY29kZXMgZm9yIHRoZSBMUFVBUlQgZHJpdmVyLiAqLworZW51bSBfbHB1YXJ0X3N0YXR1cworeworICAgIGtTdGF0dXNfTFBVQVJUX1R4QnVzeSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDApLCAgICAgICAgICAgICAgICAgIC8qITwgVFggYnVzeSAqLworICAgIGtTdGF0dXNfTFBVQVJUX1J4QnVzeSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDEpLCAgICAgICAgICAgICAgICAgIC8qITwgUlggYnVzeSAqLworICAgIGtTdGF0dXNfTFBVQVJUX1R4SWRsZSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDIpLCAgICAgICAgICAgICAgICAgIC8qITwgTFBVQVJUIHRyYW5zbWl0dGVyIGlzIGlkbGUuICovCisgICAga1N0YXR1c19MUFVBUlRfUnhJZGxlID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgMyksICAgICAgICAgICAgICAgICAgLyohPCBMUFVBUlQgcmVjZWl2ZXIgaXMgaWRsZS4gKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9UeFdhdGVybWFya1Rvb0xhcmdlID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgNCksICAgICAvKiE8IFRYIEZJRk8gd2F0ZXJtYXJrIHRvbyBsYXJnZSAgKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9SeFdhdGVybWFya1Rvb0xhcmdlID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgNSksICAgICAvKiE8IFJYIEZJRk8gd2F0ZXJtYXJrIHRvbyBsYXJnZSAgKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9GbGFnQ2Fubm90Q2xlYXJNYW51YWxseSA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDYpLCAvKiE8IFNvbWUgZmxhZyBjYW4ndCBtYW51YWxseSBjbGVhciAqLworICAgIGtTdGF0dXNfTFBVQVJUX0Vycm9yID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgNyksICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3IgaGFwcGVucyBvbiBMUFVBUlQuICovCisgICAga1N0YXR1c19MUFVBUlRfUnhSaW5nQnVmZmVyT3ZlcnJ1biA9CisgICAgICAgIE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDgpLCAvKiE8IExQVUFSVCBSWCBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBvdmVycnVuLiAqLworICAgIGtTdGF0dXNfTFBVQVJUX1J4SGFyZHdhcmVPdmVycnVuID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgOSksIC8qITwgTFBVQVJUIFJYIHJlY2VpdmVyIG92ZXJydW4uICovCisgICAga1N0YXR1c19MUFVBUlRfTm9pc2VFcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDEwKSwgICAgICAgLyohPCBMUFVBUlQgbm9pc2UgZXJyb3IuICovCisgICAga1N0YXR1c19MUFVBUlRfRnJhbWluZ0Vycm9yID0gTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgMTEpLCAgICAgLyohPCBMUFVBUlQgZnJhbWluZyBlcnJvci4gKi8KKyAgICBrU3RhdHVzX0xQVUFSVF9QYXJpdHlFcnJvciA9IE1BS0VfU1RBVFVTKGtTdGF0dXNHcm91cF9MUFVBUlQsIDEyKSwgICAgICAvKiE8IExQVUFSVCBwYXJpdHkgZXJyb3IuICovCisgICAga1N0YXR1c19MUFVBUlRfQmF1ZHJhdGVOb3RTdXBwb3J0ID0KKyAgICAgICAgTUFLRV9TVEFUVVMoa1N0YXR1c0dyb3VwX0xQVUFSVCwgMTMpLCAvKiE8IEJhdWRyYXRlIGlzIG5vdCBzdXBwb3J0IGluIGN1cnJlbnQgY2xvY2sgc291cmNlICovCit9OworCisvKiEgQGJyaWVmIExQVUFSVCBwYXJpdHkgbW9kZS4gKi8KK3R5cGVkZWYgZW51bSBfbHB1YXJ0X3Bhcml0eV9tb2RlCit7CisgICAga0xQVUFSVF9QYXJpdHlEaXNhYmxlZCA9IDB4MFUsIC8qITwgUGFyaXR5IGRpc2FibGVkICovCisgICAga0xQVUFSVF9QYXJpdHlFdmVuID0gMHgyVSwgICAgIC8qITwgUGFyaXR5IGVuYWJsZWQsIHR5cGUgZXZlbiwgYml0IHNldHRpbmc6IFBFfFBUID0gMTAgKi8KKyAgICBrTFBVQVJUX1Bhcml0eU9kZCA9IDB4M1UsICAgICAgLyohPCBQYXJpdHkgZW5hYmxlZCwgdHlwZSBvZGQsICBiaXQgc2V0dGluZzogUEV8UFQgPSAxMSAqLworfSBscHVhcnRfcGFyaXR5X21vZGVfdDsKKworLyohIEBicmllZiBMUFVBUlQgZGF0YSBiaXRzIGNvdW50LiAqLwordHlwZWRlZiBlbnVtIF9scHVhcnRfZGF0YV9iaXRzCit7CisgICAga0xQVUFSVF9FaWdodERhdGFCaXRzID0gMHgwVSwgLyohPCBFaWdodCBkYXRhIGJpdCAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVAorICAgIGtMUFVBUlRfU2V2ZW5EYXRhQml0cyA9IDB4MVUsIC8qITwgU2V2ZW4gZGF0YSBiaXQgKi8KKyNlbmRpZgorfSBscHVhcnRfZGF0YV9iaXRzX3Q7CisKKy8qISBAYnJpZWYgTFBVQVJUIHN0b3AgYml0IGNvdW50LiAqLwordHlwZWRlZiBlbnVtIF9scHVhcnRfc3RvcF9iaXRfY291bnQKK3sKKyAgICBrTFBVQVJUX09uZVN0b3BCaXQgPSAwVSwgLyohPCBPbmUgc3RvcCBiaXQgKi8KKyAgICBrTFBVQVJUX1R3b1N0b3BCaXQgPSAxVSwgLyohPCBUd28gc3RvcCBiaXRzICovCit9IGxwdWFydF9zdG9wX2JpdF9jb3VudF90OworCisvKiEKKyAqIEBicmllZiBMUFVBUlQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCBkZWZhdWx0IHNldHRpbmdzIGFsbCBkaXNhYmxlZC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgc2V0dGluZ3MgZm9yIGFsbCBMUFVBUlQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLgorICovCitlbnVtIF9scHVhcnRfaW50ZXJydXB0X2VuYWJsZQoreworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QKKyAgICBrTFBVQVJUX0xpbkJyZWFrSW50ZXJydXB0RW5hYmxlID0gKExQVUFSVF9CQVVEX0xCS0RJRV9NQVNLID4+IDgpLCAvKiE8IExJTiBicmVhayBkZXRlY3QuICovCisjZW5kaWYKKyAgICBrTFBVQVJUX1J4QWN0aXZlRWRnZUludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQkFVRF9SWEVER0lFX01BU0sgPj4gOCksIC8qITwgUmVjZWl2ZSBBY3RpdmUgRWRnZS4gKi8KKyAgICBrTFBVQVJUX1R4RGF0YVJlZ0VtcHR5SW50ZXJydXB0RW5hYmxlID0gKExQVUFSVF9DVFJMX1RJRV9NQVNLKSwgICAgICAgIC8qITwgVHJhbnNtaXQgZGF0YSByZWdpc3RlciBlbXB0eS4gKi8KKyAgICBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlSW50ZXJydXB0RW5hYmxlID0gKExQVUFSVF9DVFJMX1RDSUVfTUFTSyksIC8qITwgVHJhbnNtaXNzaW9uIGNvbXBsZXRlLiAqLworICAgIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQ1RSTF9SSUVfTUFTSyksICAgICAgICAgLyohPCBSZWNlaXZlciBkYXRhIHJlZ2lzdGVyIGZ1bGwuICovCisgICAga0xQVUFSVF9JZGxlTGluZUludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQ1RSTF9JTElFX01BU0spLCAgICAgICAgICAgICAvKiE8IElkbGUgbGluZS4gKi8KKyAgICBrTFBVQVJUX1J4T3ZlcnJ1bkludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQ1RSTF9PUklFX01BU0spLCAgICAgICAgICAgIC8qITwgUmVjZWl2ZXIgT3ZlcnJ1bi4gKi8KKyAgICBrTFBVQVJUX05vaXNlRXJyb3JJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0NUUkxfTkVJRV9NQVNLKSwgICAgICAgICAgIC8qITwgTm9pc2UgZXJyb3IgZmxhZy4gKi8KKyAgICBrTFBVQVJUX0ZyYW1pbmdFcnJvckludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfQ1RSTF9GRUlFX01BU0spLCAgICAgICAgIC8qITwgRnJhbWluZyBlcnJvciBmbGFnLiAqLworICAgIGtMUFVBUlRfUGFyaXR5RXJyb3JJbnRlcnJ1cHRFbmFibGUgPSAoTFBVQVJUX0NUUkxfUEVJRV9NQVNLKSwgICAgICAgICAgLyohPCBQYXJpdHkgZXJyb3IgZmxhZy4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAga0xQVUFSVF9UeEZpZm9PdmVyZmxvd0ludGVycnVwdEVuYWJsZSA9IChMUFVBUlRfRklGT19UWE9GRV9NQVNLID4+IDgpLCAgLyohPCBUcmFuc21pdCBGSUZPIE92ZXJmbG93LiAqLworICAgIGtMUFVBUlRfUnhGaWZvVW5kZXJmbG93SW50ZXJydXB0RW5hYmxlID0gKExQVUFSVF9GSUZPX1JYVUZFX01BU0sgPj4gOCksIC8qITwgUmVjZWl2ZSBGSUZPIFVuZGVyZmxvdy4gKi8KKyNlbmRpZgorfTsKKworLyohCisgKiBAYnJpZWYgTFBVQVJUIHN0YXR1cyBmbGFncy4KKyAqCisgKiBUaGlzIHByb3ZpZGVzIGNvbnN0YW50cyBmb3IgdGhlIExQVUFSVCBzdGF0dXMgZmxhZ3MgZm9yIHVzZSBpbiB0aGUgTFBVQVJUIGZ1bmN0aW9ucy4KKyAqLworZW51bSBfbHB1YXJ0X2ZsYWdzCit7CisgICAga0xQVUFSVF9UeERhdGFSZWdFbXB0eUZsYWcgPQorICAgICAgICAoTFBVQVJUX1NUQVRfVERSRV9NQVNLKSwgLyohPCBUcmFuc21pdCBkYXRhIHJlZ2lzdGVyIGVtcHR5IGZsYWcsIHNldHMgd2hlbiB0cmFuc21pdCBidWZmZXIgaXMgZW1wdHkgKi8KKyAgICBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlRmxhZyA9CisgICAgICAgIChMUFVBUlRfU1RBVF9UQ19NQVNLKSwgLyohPCBUcmFuc21pc3Npb24gY29tcGxldGUgZmxhZywgc2V0cyB3aGVuIHRyYW5zbWlzc2lvbiBhY3Rpdml0eSBjb21wbGV0ZSAqLworICAgIGtMUFVBUlRfUnhEYXRhUmVnRnVsbEZsYWcgPQorICAgICAgICAoTFBVQVJUX1NUQVRfUkRSRl9NQVNLKSwgLyohPCBSZWNlaXZlIGRhdGEgcmVnaXN0ZXIgZnVsbCBmbGFnLCBzZXRzIHdoZW4gdGhlIHJlY2VpdmUgZGF0YSBidWZmZXIgaXMgZnVsbCAqLworICAgIGtMUFVBUlRfSWRsZUxpbmVGbGFnID0gKExQVUFSVF9TVEFUX0lETEVfTUFTSyksIC8qITwgSWRsZSBsaW5lIGRldGVjdCBmbGFnLCBzZXRzIHdoZW4gaWRsZSBsaW5lIGRldGVjdGVkICovCisgICAga0xQVUFSVF9SeE92ZXJydW5GbGFnID0gKExQVUFSVF9TVEFUX09SX01BU0spLCAgLyohPCBSZWNlaXZlIE92ZXJydW4sIHNldHMgd2hlbiBuZXcgZGF0YSBpcyByZWNlaXZlZCBiZWZvcmUgZGF0YSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgZnJvbSByZWNlaXZlIHJlZ2lzdGVyICovCisgICAga0xQVUFSVF9Ob2lzZUVycm9yRmxhZyA9IChMUFVBUlRfU1RBVF9ORl9NQVNLKSwgLyohPCBSZWNlaXZlIHRha2VzIDMgc2FtcGxlcyBvZiBlYWNoIHJlY2VpdmVkIGJpdC4gIElmIGFueSBvZiB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgZGlmZmVyLCBub2lzZSBmbGFnIHNldHMgKi8KKyAgICBrTFBVQVJUX0ZyYW1pbmdFcnJvckZsYWcgPQorICAgICAgICAoTFBVQVJUX1NUQVRfRkVfTUFTSyksIC8qITwgRnJhbWUgZXJyb3IgZmxhZywgc2V0cyBpZiBsb2dpYyAwIHdhcyBkZXRlY3RlZCB3aGVyZSBzdG9wIGJpdCBleHBlY3RlZCAqLworICAgIGtMUFVBUlRfUGFyaXR5RXJyb3JGbGFnID0gKExQVUFSVF9TVEFUX1BGX01BU0spLCAvKiE8IElmIHBhcml0eSBlbmFibGVkLCBzZXRzIHVwb24gcGFyaXR5IGVycm9yIGRldGVjdGlvbiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19MSU5fQlJFQUtfREVURUNUKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0xJTl9CUkVBS19ERVRFQ1QKKyAgICBrTFBVQVJUX0xpbkJyZWFrRmxhZyA9IChMUFVBUlRfU1RBVF9MQktESUZfTUFTSyksIC8qITwgTElOIGJyZWFrIGRldGVjdCBpbnRlcnJ1cHQgZmxhZywgc2V0cyB3aGVuIExJTiBicmVhayBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBhbmQgTElOIGNpcmN1aXQgZW5hYmxlZCAqLworI2VuZGlmCisgICAga0xQVUFSVF9SeEFjdGl2ZUVkZ2VGbGFnID0KKyAgICAgICAgKExQVUFSVF9TVEFUX1JYRURHSUZfTUFTSyksIC8qITwgUmVjZWl2ZSBwaW4gYWN0aXZlIGVkZ2UgaW50ZXJydXB0IGZsYWcsIHNldHMgd2hlbiBhY3RpdmUgZWRnZSBkZXRlY3RlZCAqLworICAgIGtMUFVBUlRfUnhBY3RpdmVGbGFnID0KKyAgICAgICAgKExQVUFSVF9TVEFUX1JBRl9NQVNLKSwgLyohPCBSZWNlaXZlciBBY3RpdmUgRmxhZyAoUkFGKSwgc2V0cyBhdCBiZWdpbm5pbmcgb2YgdmFsaWQgc3RhcnQgYml0ICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0FERFJFU1NfTUFUQ0hJTkcpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfQUREUkVTU19NQVRDSElORworICAgIGtMUFVBUlRfRGF0YU1hdGNoMUZsYWcgPSBMUFVBUlRfU1RBVF9NQTFGX01BU0ssIC8qITwgVGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlYWQgZnJvbSBMUFVBUlRfREFUQSBtYXRjaGVzIE1BMSovCisgICAga0xQVUFSVF9EYXRhTWF0Y2gyRmxhZyA9IExQVUFSVF9TVEFUX01BMkZfTUFTSywgLyohPCBUaGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBmcm9tIExQVUFSVF9EQVRBIG1hdGNoZXMgTUEyKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19FWFRFTkRFRF9EQVRBX1JFR0lTVEVSX0ZMQUdTKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0VYVEVOREVEX0RBVEFfUkVHSVNURVJfRkxBR1MKKyAgICBrTFBVQVJUX05vaXNlRXJyb3JJblJ4RGF0YVJlZ0ZsYWcgPQorICAgICAgICAoTFBVQVJUX0RBVEFfTk9JU1lfTUFTSyA+PiAxMCksIC8qITwgTk9JU1kgYml0LCBzZXRzIGlmIG5vaXNlIGRldGVjdGVkIGluIGN1cnJlbnQgZGF0YSB3b3JkICovCisgICAga0xQVUFSVF9QYXJpdHlFcnJvckluUnhEYXRhUmVnRmxhZyA9CisgICAgICAgIChMUFVBUlRfREFUQV9QQVJJVFlFX01BU0sgPj4gMTApLCAvKiE8IFBBUklUWUUgYml0LCBzZXRzIGlmIG5vaXNlIGRldGVjdGVkIGluIGN1cnJlbnQgZGF0YSB3b3JkICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRklGTykgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPCisgICAga0xQVUFSVF9UeEZpZm9FbXB0eUZsYWcgPSAoTFBVQVJUX0ZJRk9fVFhFTVBUX01BU0sgPj4gMTYpLCAvKiE8IFRYRU1QVCBiaXQsIHNldHMgaWYgdHJhbnNtaXQgYnVmZmVyIGlzIGVtcHR5ICovCisgICAga0xQVUFSVF9SeEZpZm9FbXB0eUZsYWcgPSAoTFBVQVJUX0ZJRk9fUlhFTVBUX01BU0sgPj4gMTYpLCAvKiE8IFJYRU1QVCBiaXQsIHNldHMgaWYgcmVjZWl2ZSBidWZmZXIgaXMgZW1wdHkgKi8KKyAgICBrTFBVQVJUX1R4Rmlmb092ZXJmbG93RmxhZyA9CisgICAgICAgIChMUFVBUlRfRklGT19UWE9GX01BU0sgPj4gMTYpLCAvKiE8IFRYT0YgYml0LCBzZXRzIGlmIHRyYW5zbWl0IGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCAqLworICAgIGtMUFVBUlRfUnhGaWZvVW5kZXJmbG93RmxhZyA9CisgICAgICAgIChMUFVBUlRfRklGT19SWFVGX01BU0sgPj4gMTYpLCAvKiE8IFJYVUYgYml0LCBzZXRzIGlmIHJlY2VpdmUgYnVmZmVyIHVuZGVyZmxvdyBvY2N1cnJlZCAqLworI2VuZGlmCit9OworCisvKiEgQGJyaWVmIExQVUFSVCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9scHVhcnRfY29uZmlnCit7CisgICAgdWludDMyX3QgYmF1ZFJhdGVfQnBzOyAgICAgICAgICAgIC8qITwgTFBVQVJUIGJhdWQgcmF0ZSAgKi8KKyAgICBscHVhcnRfcGFyaXR5X21vZGVfdCBwYXJpdHlNb2RlOyAgLyohPCBQYXJpdHkgbW9kZSwgZGlzYWJsZWQgKGRlZmF1bHQpLCBldmVuLCBvZGQgKi8KKyAgICBscHVhcnRfZGF0YV9iaXRzX3QgZGF0YUJpdHNDb3VudDsgLyohPCBEYXRhIGJpdHMgY291bnQsIGVpZ2h0IChkZWZhdWx0KSwgc2V2ZW4gKi8KKyAgICBib29sIGlzTXNiOyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIGJpdHMgb3JkZXIsIExTQiAoZGVmYXVsdCksIE1TQiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19TVE9QX0JJVF9DT05GSUdfU1VQUE9SVAorICAgIGxwdWFydF9zdG9wX2JpdF9jb3VudF90IHN0b3BCaXRDb3VudDsgLyohPCBOdW1iZXIgb2Ygc3RvcCBiaXRzLCAxIHN0b3AgYml0IChkZWZhdWx0KSBvciAyIHN0b3AgYml0cyAgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICB1aW50OF90IHR4Rmlmb1dhdGVybWFyazsgLyohPCBUWCBGSUZPIHdhdGVybWFyayAqLworICAgIHVpbnQ4X3QgcnhGaWZvV2F0ZXJtYXJrOyAvKiE8IFJYIEZJRk8gd2F0ZXJtYXJrICovCisjZW5kaWYKKyAgICBib29sIGVuYWJsZVR4OyAvKiE8IEVuYWJsZSBUWCAqLworICAgIGJvb2wgZW5hYmxlUng7IC8qITwgRW5hYmxlIFJYICovCit9IGxwdWFydF9jb25maWdfdDsKKworLyohIEBicmllZiBMUFVBUlQgdHJhbnNmZXIgc3RydWN0dXJlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2xwdWFydF90cmFuc2ZlcgoreworICAgIHVpbnQ4X3QgKmRhdGE7ICAgLyohPCBUaGUgYnVmZmVyIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXIuKi8KKyAgICBzaXplX3QgZGF0YVNpemU7IC8qITwgVGhlIGJ5dGUgY291bnQgdG8gYmUgdHJhbnNmZXIuICovCit9IGxwdWFydF90cmFuc2Zlcl90OworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBoYW5kbGUgdHlwZWRlZi4gKi8KK3R5cGVkZWYgc3RydWN0IF9scHVhcnRfaGFuZGxlIGxwdWFydF9oYW5kbGVfdDsKKworLyohIEBicmllZiBMUFVBUlQgdHJhbnNmZXIgY2FsbGJhY2sgZnVuY3Rpb24uICovCit0eXBlZGVmIHZvaWQgKCpscHVhcnRfdHJhbnNmZXJfY2FsbGJhY2tfdCkoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLCBzdGF0dXNfdCBzdGF0dXMsIHZvaWQgKnVzZXJEYXRhKTsKKworLyohIEBicmllZiBMUFVBUlQgaGFuZGxlIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBfbHB1YXJ0X2hhbmRsZQoreworICAgIHVpbnQ4X3QgKnZvbGF0aWxlIHR4RGF0YTsgICAvKiE8IEFkZHJlc3Mgb2YgcmVtYWluaW5nIGRhdGEgdG8gc2VuZC4gKi8KKyAgICB2b2xhdGlsZSBzaXplX3QgdHhEYXRhU2l6ZTsgLyohPCBTaXplIG9mIHRoZSByZW1haW5pbmcgZGF0YSB0byBzZW5kLiAqLworICAgIHNpemVfdCB0eERhdGFTaXplQWxsOyAgICAgICAvKiE8IFNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZCBvdXQuICovCisgICAgdWludDhfdCAqdm9sYXRpbGUgcnhEYXRhOyAgIC8qITwgQWRkcmVzcyBvZiByZW1haW5pbmcgZGF0YSB0byByZWNlaXZlLiAqLworICAgIHZvbGF0aWxlIHNpemVfdCByeERhdGFTaXplOyAvKiE8IFNpemUgb2YgdGhlIHJlbWFpbmluZyBkYXRhIHRvIHJlY2VpdmUuICovCisgICAgc2l6ZV90IHJ4RGF0YVNpemVBbGw7ICAgICAgIC8qITwgU2l6ZSBvZiB0aGUgZGF0YSB0byByZWNlaXZlLiAqLworCisgICAgdWludDhfdCAqcnhSaW5nQnVmZmVyOyAgICAgICAgICAgICAgLyohPCBTdGFydCBhZGRyZXNzIG9mIHRoZSByZWNlaXZlciByaW5nIGJ1ZmZlci4gKi8KKyAgICBzaXplX3QgcnhSaW5nQnVmZmVyU2l6ZTsgICAgICAgICAgICAvKiE8IFNpemUgb2YgdGhlIHJpbmcgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHVpbnQxNl90IHJ4UmluZ0J1ZmZlckhlYWQ7IC8qITwgSW5kZXggZm9yIHRoZSBkcml2ZXIgdG8gc3RvcmUgcmVjZWl2ZWQgZGF0YSBpbnRvIHJpbmcgYnVmZmVyLiAqLworICAgIHZvbGF0aWxlIHVpbnQxNl90IHJ4UmluZ0J1ZmZlclRhaWw7IC8qITwgSW5kZXggZm9yIHRoZSB1c2VyIHRvIGdldCBkYXRhIGZyb20gdGhlIHJpbmcgYnVmZmVyLiAqLworCisgICAgbHB1YXJ0X3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2s7IC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24uICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8qITwgTFBVQVJUIGNhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4qLworCisgICAgdm9sYXRpbGUgdWludDhfdCB0eFN0YXRlOyAvKiE8IFRYIHRyYW5zZmVyIHN0YXRlLiAqLworICAgIHZvbGF0aWxlIHVpbnQ4X3QgcnhTdGF0ZTsgLyohPCBSWCB0cmFuc2ZlciBzdGF0ZS4gKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVCkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU183QklUX0RBVEFfU1VQUE9SVAorICAgIGJvb2wgaXNTZXZlbkRhdGFCaXRzOyAvKiE8IFNldmVuIGRhdGEgYml0cyBmbGFnLiAqLworI2VuZGlmCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9jcGx1c3BsdXMgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19HTE9CQUwpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfR0xPQkFMCisKKy8qIQorICogQG5hbWUgU29mdHdhcmUgUmVzZXQKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgUmVzZXRzIHRoZSBMUFVBUlQgdXNpbmcgc29mdHdhcmUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgYWxsIGludGVybmFsIGxvZ2ljIGFuZCByZWdpc3RlcnMgZXhjZXB0IHRoZSBHbG9iYWwgUmVnaXN0ZXIuCisgKiBSZW1haW5zIHNldCB1bnRpbCBjbGVhcmVkIGJ5IHNvZnR3YXJlLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVUFSVF9Tb2Z0d2FyZVJlc2V0KExQVUFSVF9UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkdMT0JBTCB8PSBMUFVBUlRfR0xPQkFMX1JTVF9NQVNLOworICAgIGJhc2UtPkdMT0JBTCAmPSB+TFBVQVJUX0dMT0JBTF9SU1RfTUFTSzsKK30KKy8qIEB9ICovCisjZW5kaWYgLypGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0dMT0JBTCovCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgYW4gTFBVQVJUIGluc3RhbmNlIHdpdGggdGhlIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgYW5kIHRoZSBwZXJpcGhlcmFsIGNsb2NrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgTFBVQVJUIG1vZHVsZSB3aXRoIHVzZXItZGVmaW5lZCBzZXR0aW5ncy4gQ2FsbCB0aGUgTFBVQVJUX0dldERlZmF1bHRDb25maWcoKSBmdW5jdGlvbgorICogdG8gY29uZmlndXJlIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBhbmQgZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgKiBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgdG8gdXNlIHRoaXMgQVBJIHRvIGNvbmZpZ3VyZSB0aGUgTFBVQVJULgorICogQGNvZGUKKyAqICBscHVhcnRfY29uZmlnX3QgbHB1YXJ0Q29uZmlnOworICogIGxwdWFydENvbmZpZy5iYXVkUmF0ZV9CcHMgPSAxMTUyMDBVOworICogIGxwdWFydENvbmZpZy5wYXJpdHlNb2RlID0ga0xQVUFSVF9QYXJpdHlEaXNhYmxlZDsKKyAqICBscHVhcnRDb25maWcuZGF0YUJpdHNDb3VudCA9IGtMUFVBUlRfRWlnaHREYXRhQml0czsKKyAqICBscHVhcnRDb25maWcuaXNNc2IgPSBmYWxzZTsKKyAqICBscHVhcnRDb25maWcuc3RvcEJpdENvdW50ID0ga0xQVUFSVF9PbmVTdG9wQml0OworICogIGxwdWFydENvbmZpZy50eEZpZm9XYXRlcm1hcmsgPSAwOworICogIGxwdWFydENvbmZpZy5yeEZpZm9XYXRlcm1hcmsgPSAxOworICogIExQVUFSVF9Jbml0KExQVUFSVDEsICZscHVhcnRDb25maWcsIDIwMDAwMDAwVSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byBhIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBzcmNDbG9ja19IeiBMUFVBUlQgY2xvY2sgc291cmNlIGZyZXF1ZW5jeSBpbiBIWi4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfQmF1ZHJhdGVOb3RTdXBwb3J0IEJhdWRyYXRlIGlzIG5vdCBzdXBwb3J0IGluIGN1cnJlbnQgY2xvY2sgc291cmNlLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgTFBVQVJUIGluaXRpYWxpemUgc3VjY2VlZAorICovCitzdGF0dXNfdCBMUFVBUlRfSW5pdChMUFVBUlRfVHlwZSAqYmFzZSwgY29uc3QgbHB1YXJ0X2NvbmZpZ190ICpjb25maWcsIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgRGVpbml0aWFsaXplcyBhIExQVUFSVCBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciB0cmFuc21pdCB0byBjb21wbGV0ZSwgZGlzYWJsZXMgVFggYW5kIFJYLCBhbmQgZGlzYWJsZXMgdGhlIExQVUFSVCBjbG9jay4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3ZvaWQgTFBVQVJUX0RlaW5pdChMUFVBUlRfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgTFBVQVJUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQKKyAqIHZhbHVlcyBhcmU6CisgKiAgIGxwdWFydENvbmZpZy0+YmF1ZFJhdGVfQnBzID0gMTE1MjAwVTsKKyAqICAgbHB1YXJ0Q29uZmlnLT5wYXJpdHlNb2RlID0ga0xQVUFSVF9QYXJpdHlEaXNhYmxlZDsKKyAqICAgbHB1YXJ0Q29uZmlnLT5kYXRhQml0c0NvdW50ID0ga0xQVUFSVF9FaWdodERhdGFCaXRzOworICogICBscHVhcnRDb25maWctPmlzTXNiID0gZmFsc2U7CisgKiAgIGxwdWFydENvbmZpZy0+c3RvcEJpdENvdW50ID0ga0xQVUFSVF9PbmVTdG9wQml0OworICogICBscHVhcnRDb25maWctPnR4Rmlmb1dhdGVybWFyayA9IDA7CisgKiAgIGxwdWFydENvbmZpZy0+cnhGaWZvV2F0ZXJtYXJrID0gMTsKKyAqICAgbHB1YXJ0Q29uZmlnLT5lbmFibGVUeCA9IGZhbHNlOworICogICBscHVhcnRDb25maWctPmVuYWJsZVJ4ID0gZmFsc2U7CisgKgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIGEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgTFBVQVJUX0dldERlZmF1bHRDb25maWcobHB1YXJ0X2NvbmZpZ190ICpjb25maWcpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBMUFVBUlQgaW5zdGFuY2UgYmF1ZHJhdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBMUFVBUlQgbW9kdWxlIGJhdWRyYXRlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRlCisgKiB0aGUgTFBVQVJUIG1vZHVsZSBiYXVkcmF0ZSBhZnRlciB0aGUgTFBVQVJUIG1vZHVsZSBpcyBpbml0aWFsaXplZCBieSB0aGUgTFBVQVJUX0luaXQuCisgKiBAY29kZQorICogIExQVUFSVF9TZXRCYXVkUmF0ZShMUFVBUlQxLCAxMTUyMDBVLCAyMDAwMDAwMFUpOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gYmF1ZFJhdGVfQnBzIExQVUFSVCBiYXVkcmF0ZSB0byBiZSBzZXQuCisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogTFBVQVJUIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kgaW4gSFouCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX0JhdWRyYXRlTm90U3VwcG9ydCBCYXVkcmF0ZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGNsb2NrIHNvdXJjZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFNldCBiYXVkcmF0ZSBzdWNjZWVkZWQuCisgKi8KK3N0YXR1c190IExQVUFSVF9TZXRCYXVkUmF0ZShMUFVBUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgYmF1ZFJhdGVfQnBzLCB1aW50MzJfdCBzcmNDbG9ja19Ieik7CisKKy8qIEB9ICovCisKKy8qIQorICogQG5hbWUgU3RhdHVzCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgTFBVQVJUIHN0YXR1cyBmbGFncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYWxsIExQVUFSVCBzdGF0dXMgZmxhZ3MuIFRoZSBmbGFncyBhcmUgcmV0dXJuZWQgYXMgdGhlIGxvZ2ljYWwKKyAqIE9SIHZhbHVlIG9mIHRoZSBlbnVtZXJhdG9ycyBAcmVmIF9scHVhcnRfZmxhZ3MuIFRvIGNoZWNrIGZvciBhIHNwZWNpZmljIHN0YXR1cywKKyAqIGNvbXBhcmUgdGhlIHJldHVybiB2YWx1ZSB3aXRoIGVudW1lcmF0b3JzIGluIHRoZSBAcmVmIF9scHVhcnRfZmxhZ3MuCisgKiBGb3IgZXhhbXBsZSwgdG8gY2hlY2sgd2hldGhlciB0aGUgVFggaXMgZW1wdHk6CisgKiBAY29kZQorICogICAgIGlmIChrTFBVQVJUX1R4RGF0YVJlZ0VtcHR5RmxhZyAmIExQVUFSVF9HZXRTdGF0dXNGbGFncyhMUFVBUlQxKSkKKyAqICAgICB7CisgKiAgICAgICAgIC4uLgorICogICAgIH0KKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBMUFVBUlQgc3RhdHVzIGZsYWdzIHdoaWNoIGFyZSBPUmVkIGJ5IHRoZSBlbnVtZXJhdG9ycyBpbiB0aGUgX2xwdWFydF9mbGFncy4KKyAqLwordWludDMyX3QgTFBVQVJUX0dldFN0YXR1c0ZsYWdzKExQVUFSVF9UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHN0YXR1cyBmbGFncyB3aXRoIGEgcHJvdmlkZWQgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyBMUFVBUlQgc3RhdHVzIGZsYWdzIHdpdGggYSBwcm92aWRlZCBtYXNrLiBBdXRvbWF0aWNhbGx5IGNsZWFyZWQgZmxhZ3MKKyAqIGNhbid0IGJlIGNsZWFyZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqIEZsYWdzIHRoYXQgY2FuIG9ubHkgY2xlYXJlZCBvciBzZXQgYnkgaGFyZHdhcmUgYXJlOgorICogICAga0xQVUFSVF9UeERhdGFSZWdFbXB0eUZsYWcsIGtMUFVBUlRfVHJhbnNtaXNzaW9uQ29tcGxldGVGbGFnLCBrTFBVQVJUX1J4RGF0YVJlZ0Z1bGxGbGFnLAorICogICAga0xQVUFSVF9SeEFjdGl2ZUZsYWcsIGtMUFVBUlRfTm9pc2VFcnJvckluUnhEYXRhUmVnRmxhZywga0xQVUFSVF9QYXJpdHlFcnJvckluUnhEYXRhUmVnRmxhZywKKyAqICAgIGtMUFVBUlRfVHhGaWZvRW1wdHlGbGFnLGtMUFVBUlRfUnhGaWZvRW1wdHlGbGFnCisgKiBOb3RlOiBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIFR4L1J4IGlzIGlkbGUsIG90aGVyd2lzZSBpdCB0YWtlcyBubyBlZmZlY3RzLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIHRoZSBzdGF0dXMgZmxhZ3MgdG8gYmUgY2xlYXJlZC4gVGhlIHVzZXIgY2FuIHVzZSB0aGUgZW51bWVyYXRvcnMgaW4gdGhlCisgKiAgX2xwdWFydF9zdGF0dXNfZmxhZ190IHRvIGRvIHRoZSBPUiBvcGVyYXRpb24gYW5kIGdldCB0aGUgbWFzay4KKyAqIEByZXR1cm4gMCBzdWNjZWVkLCBvdGhlcnMgZmFpbGVkLgorICogQHJldHZhbCBrU3RhdHVzX0xQVUFSVF9GbGFnQ2Fubm90Q2xlYXJNYW51YWxseSBUaGUgZmxhZyBjYW4ndCBiZSBjbGVhcmVkIGJ5IHRoaXMgZnVuY3Rpb24gYnV0CisgKiAgICAgICAgIGl0IGlzIGNsZWFyZWQgYXV0b21hdGljYWxseSBieSBoYXJkd2FyZS4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN0YXR1cyBpbiB0aGUgbWFzayBhcmUgY2xlYXJlZC4KKyAqLworc3RhdHVzX3QgTFBVQVJUX0NsZWFyU3RhdHVzRmxhZ3MoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiBAfSAqLworCisvKiEKKyAqIEBuYW1lIEludGVycnVwdHMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBMUFVBUlQgaW50ZXJydXB0cyBhY2NvcmRpbmcgdG8gYSBwcm92aWRlZCBtYXNrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgTFBVQVJUIGludGVycnVwdHMgYWNjb3JkaW5nIHRvIGEgcHJvdmlkZWQgbWFzay4gVGhlIG1hc2sKKyAqIGlzIGEgbG9naWNhbCBPUiBvZiBlbnVtZXJhdGlvbiBtZW1iZXJzLiBTZWUgdGhlIEByZWYgX2xwdWFydF9pbnRlcnJ1cHRfZW5hYmxlLgorICogVGhpcyBleGFtcGxlcyBzaG93cyBob3cgdG8gZW5hYmxlIFRYIGVtcHR5IGludGVycnVwdCBhbmQgUlggZnVsbCBpbnRlcnJ1cHQ6CisgKiBAY29kZQorICogICAgIExQVUFSVF9FbmFibGVJbnRlcnJ1cHRzKExQVUFSVDEsa0xQVUFSVF9UeERhdGFSZWdFbXB0eUludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4gTG9naWNhbCBPUiBvZiBAcmVmIF91YXJ0X2ludGVycnVwdF9lbmFibGUuCisgKi8KK3ZvaWQgTFBVQVJUX0VuYWJsZUludGVycnVwdHMoTFBVQVJUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBEaXNhYmxlcyAgTFBVQVJUIGludGVycnVwdHMgYWNjb3JkaW5nIHRvIGEgcHJvdmlkZWQgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBMUFVBUlQgaW50ZXJydXB0cyBhY2NvcmRpbmcgdG8gYSBwcm92aWRlZCBtYXNrLiBUaGUgbWFzaworICogaXMgYSBsb2dpY2FsIE9SIG9mIGVudW1lcmF0aW9uIG1lbWJlcnMuIFNlZSBAcmVmIF9scHVhcnRfaW50ZXJydXB0X2VuYWJsZS4KKyAqIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gZGlzYWJsZSB0aGUgVFggZW1wdHkgaW50ZXJydXB0IGFuZCBSWCBmdWxsIGludGVycnVwdDoKKyAqIEBjb2RlCisgKiAgICAgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKExQVUFSVDEsa0xQVUFSVF9UeERhdGFSZWdFbXB0eUludGVycnVwdEVuYWJsZSB8IGtMUFVBUlRfUnhEYXRhUmVnRnVsbEludGVycnVwdEVuYWJsZSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGRpc2FibGUuIExvZ2ljYWwgT1Igb2YgQHJlZiBfbHB1YXJ0X2ludGVycnVwdF9lbmFibGUuCisgKi8KK3ZvaWQgTFBVQVJUX0Rpc2FibGVJbnRlcnJ1cHRzKExQVUFSVF9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyBlbmFibGVkIExQVUFSVCBpbnRlcnJ1cHRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgZW5hYmxlZCBMUFVBUlQgaW50ZXJydXB0cy4gVGhlIGVuYWJsZWQgaW50ZXJydXB0cyBhcmUgcmV0dXJuZWQKKyAqIGFzIHRoZSBsb2dpY2FsIE9SIHZhbHVlIG9mIHRoZSBlbnVtZXJhdG9ycyBAcmVmIF9scHVhcnRfaW50ZXJydXB0X2VuYWJsZS4gVG8gY2hlY2sKKyAqIGEgc3BlY2lmaWMgaW50ZXJydXB0IGVuYWJsZSBzdGF0dXMsIGNvbXBhcmUgdGhlIHJldHVybiB2YWx1ZSB3aXRoIGVudW1lcmF0b3JzCisgKiBpbiBAcmVmIF9scHVhcnRfaW50ZXJydXB0X2VuYWJsZS4KKyAqIEZvciBleGFtcGxlLCB0byBjaGVjayB3aGV0aGVyIHRoZSBUWCBlbXB0eSBpbnRlcnJ1cHQgaXMgZW5hYmxlZDoKKyAqIEBjb2RlCisgKiAgICAgdWludDMyX3QgZW5hYmxlZEludGVycnVwdHMgPSBMUFVBUlRfR2V0RW5hYmxlZEludGVycnVwdHMoTFBVQVJUMSk7CisgKgorICogICAgIGlmIChrTFBVQVJUX1R4RGF0YVJlZ0VtcHR5SW50ZXJydXB0RW5hYmxlICYgZW5hYmxlZEludGVycnVwdHMpCisgKiAgICAgeworICogICAgICAgICAuLi4KKyAqICAgICB9CisgKiBAZW5kY29kZQorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gTFBVQVJUIGludGVycnVwdCBmbGFncyB3aGljaCBhcmUgbG9naWNhbCBPUiBvZiB0aGUgZW51bWVyYXRvcnMgaW4gQHJlZiBfbHB1YXJ0X2ludGVycnVwdF9lbmFibGUuCisgKi8KK3VpbnQzMl90IExQVUFSVF9HZXRFbmFibGVkSW50ZXJydXB0cyhMUFVBUlRfVHlwZSAqYmFzZSk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfRE1BX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19ETUFfRU5BQkxFCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBMUFVBUlQgZGF0YSByZWdpc3RlciBhZGRyZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgTFBVQVJUIGRhdGEgcmVnaXN0ZXIgYWRkcmVzcywgd2hpY2ggaXMgbWFpbmx5IHVzZWQgYnkgdGhlIERNQS9lRE1BLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gTFBVQVJUIGRhdGEgcmVnaXN0ZXIgYWRkcmVzc2VzIHdoaWNoIGFyZSB1c2VkIGJvdGggYnkgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlci4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBMUFVBUlRfR2V0RGF0YVJlZ2lzdGVyQWRkcmVzcyhMUFVBUlRfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHVpbnQzMl90KSAmIChiYXNlLT5EQVRBKTsKK30KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTFBVQVJUIHRyYW5zbWl0dGVyIERNQSByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgdHJhbnNtaXQgZGF0YSByZWdpc3RlciBlbXB0eSBmbGFnLCBTVEFUW1REUkVdLCB0byBnZW5lcmF0ZSBETUEgcmVxdWVzdHMuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBUcnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVUFSVF9FbmFibGVUeERNQShMUFVBUlRfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkJBVUQgfD0gTFBVQVJUX0JBVURfVERNQUVfTUFTSzsKKyAgICAgICAgYmFzZS0+Q1RSTCB8PSBMUFVBUlRfQ1RSTF9USUVfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+QkFVRCAmPSB+TFBVQVJUX0JBVURfVERNQUVfTUFTSzsKKyAgICAgICAgYmFzZS0+Q1RSTCAmPSB+TFBVQVJUX0NUUkxfVElFX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBMUFVBUlQgcmVjZWl2ZXIgRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcmVjZWl2ZXIgZGF0YSByZWdpc3RlciBmdWxsIGZsYWcsIFNUQVRbUkRSRl0sIHRvIGdlbmVyYXRlIERNQSByZXF1ZXN0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gZW5hYmxlIFRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTFBVQVJUX0VuYWJsZVJ4RE1BKExQVUFSVF9UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+QkFVRCB8PSBMUFVBUlRfQkFVRF9SRE1BRV9NQVNLOworICAgICAgICBiYXNlLT5DVFJMIHw9IExQVUFSVF9DVFJMX1JJRV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5CQVVEICY9IH5MUFVBUlRfQkFVRF9SRE1BRV9NQVNLOworICAgICAgICBiYXNlLT5DVFJMICY9IH5MUFVBUlRfQ1RSTF9SSUVfTUFTSzsKKyAgICB9Cit9CisKKy8qIEB9ICovCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19ETUFfRU5BQkxFICovCisKKy8qIQorICogQG5hbWUgQnVzIE9wZXJhdGlvbnMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTFBVQVJUIHRyYW5zbWl0dGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTFBVQVJUIHRyYW5zbWl0dGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMUFVBUlRfRW5hYmxlVHgoTFBVQVJUX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5DVFJMIHw9IExQVUFSVF9DVFJMX1RFX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNUUkwgJj0gfkxQVUFSVF9DVFJMX1RFX01BU0s7CisgICAgfQorfQorCisvKiEKKyAqIEBicmllZiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBMUFVBUlQgcmVjZWl2ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBMUFVBUlQgcmVjZWl2ZXIuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBUcnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExQVUFSVF9FbmFibGVSeChMUFVBUlRfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkNUUkwgfD0gTFBVQVJUX0NUUkxfUkVfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1RSTCAmPSB+TFBVQVJUX0NUUkxfUkVfTUFTSzsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIFdyaXRlcyB0byB0aGUgdHJhbnNtaXR0ZXIgcmVnaXN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byB0aGUgdHJhbnNtaXR0ZXIgcmVnaXN0ZXIgZGlyZWN0bHkuIFRoZSB1cHBlciBsYXllciBtdXN0CisgKiBlbnN1cmUgdGhhdCB0aGUgVFggcmVnaXN0ZXIgaXMgZW1wdHkgb3IgdGhhdCB0aGUgVFggRklGTyBoYXMgcm9vbSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIERhdGEgd3JpdGUgdG8gdGhlIFRYIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgTFBVQVJUX1dyaXRlQnl0ZShMUFVBUlRfVHlwZSAqYmFzZSwgdWludDhfdCBkYXRhKQoreworICAgIGJhc2UtPkRBVEEgPSBkYXRhOworfQorCisvKiEKKyAqIEBicmllZiBSZWFkcyB0aGUgcmVjZWl2ZXIgcmVnaXN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBkYXRhIGZyb20gdGhlIHJlY2VpdmVyIHJlZ2lzdGVyIGRpcmVjdGx5LiBUaGUgdXBwZXIgbGF5ZXIgbXVzdAorICogZW5zdXJlIHRoYXQgdGhlIHJlY2VpdmVyIHJlZ2lzdGVyIGlzIGZ1bGwgb3IgdGhhdCB0aGUgUlggRklGTyBoYXMgZGF0YSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gRGF0YSByZWFkIGZyb20gZGF0YSByZWdpc3Rlci4KKyAqLworc3RhdGljIGlubGluZSB1aW50OF90IExQVUFSVF9SZWFkQnl0ZShMUFVBUlRfVHlwZSAqYmFzZSkKK3sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQpICYmIEZTTF9GRUFUVVJFX0xQVUFSVF9IQVNfN0JJVF9EQVRBX1NVUFBPUlQKKyAgICB1aW50MzJfdCBjdHJsID0gYmFzZS0+Q1RSTDsKKyAgICBib29sIGlzU2V2ZW5EYXRhQml0cyA9CisgICAgICAgICgoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spIHx8CisgICAgICAgICAoKCEoY3RybCAmIExQVUFSVF9DVFJMX003X01BU0spKSAmJiAoIShjdHJsICYgTFBVQVJUX0NUUkxfTV9NQVNLKSkgJiYgKGN0cmwgJiBMUFVBUlRfQ1RSTF9QRV9NQVNLKSkpOworCisgICAgaWYgKGlzU2V2ZW5EYXRhQml0cykKKyAgICB7CisgICAgICAgIHJldHVybiAoYmFzZS0+REFUQSAmIDB4N0YpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gYmFzZS0+REFUQTsKKyAgICB9CisjZWxzZQorICAgIHJldHVybiBiYXNlLT5EQVRBOworI2VuZGlmCit9CisKKy8qIQorICogQGJyaWVmIFdyaXRlcyB0byB0aGUgdHJhbnNtaXR0ZXIgcmVnaXN0ZXIgdXNpbmcgYSBibG9ja2luZyBtZXRob2QuCisgKgorICogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgdHJhbnNtaXR0ZXIgcmVnaXN0ZXIsIHdhaXRzIGZvciB0aGUgcmVnaXN0ZXIgdG8gYmUgZW1wdHkgb3IgIGZvciBUWCBGSUZPIHRvIGhhdmUKKyAqIHJvb20sIGFuZCB3cml0ZXMgZGF0YSB0byB0aGUgdHJhbnNtaXR0ZXIgYnVmZmVyLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciBhbGwgZGF0YSBoYXMgYmVlbiBzZW50IG91dCB0byB0aGUgYnVzLgorICogQmVmb3JlIGRpc2FibGluZyB0aGUgdHJhbnNtaXR0ZXIsIGNoZWNrIHRoZSBrTFBVQVJUX1RyYW5zbWlzc2lvbkNvbXBsZXRlRmxhZyB0byBlbnN1cmUgdGhhdCB0aGUgdHJhbnNtaXQgaXMKKyAqIGZpbmlzaGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRhdGEgdG8gd3JpdGUuCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgb2YgdGhlIGRhdGEgdG8gd3JpdGUuCisgKi8KK3ZvaWQgTFBVQVJUX1dyaXRlQmxvY2tpbmcoTFBVQVJUX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpOworCisvKiEKKyogQGJyaWVmIFJlYWRzIHRoZSByZWNlaXZlciBkYXRhIHJlZ2lzdGVyIHVzaW5nIGEgYmxvY2tpbmcgbWV0aG9kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcG9sbHMgdGhlIHJlY2VpdmVyIHJlZ2lzdGVyLCB3YWl0cyBmb3IgdGhlIHJlY2VpdmVyIHJlZ2lzdGVyIGZ1bGwgb3IgcmVjZWl2ZXIgRklGTworICogaGFzIGRhdGEsIGFuZCByZWFkcyBkYXRhIGZyb20gdGhlIFRYIHJlZ2lzdGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBkYXRhIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVjZWl2ZWQgZGF0YS4KKyAqIEBwYXJhbSBsZW5ndGggU2l6ZSBvZiB0aGUgYnVmZmVyLgorICogQHJldHZhbCBrU3RhdHVzX0xQVUFSVF9SeEhhcmR3YXJlT3ZlcnJ1biBSZWNlaXZlciBvdmVycnVuIGhhcHBlbmVkIHdoaWxlIHJlY2VpdmluZyBkYXRhLgorICogQHJldHZhbCBrU3RhdHVzX0xQVUFSVF9Ob2lzZUVycm9yIE5vaXNlIGVycm9yIGhhcHBlbmVkIHdoaWxlIHJlY2VpdmluZyBkYXRhLgorICogQHJldHZhbCBrU3RhdHVzX0xQVUFSVF9GcmFtaW5nRXJyb3IgRnJhbWluZyBlcnJvciBoYXBwZW5lZCB3aGlsZSByZWNlaXZpbmcgZGF0YS4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfUGFyaXR5RXJyb3IgUGFyaXR5IGVycm9yIGhhcHBlbmVkIHdoaWxlIHJlY2VpdmluZyBkYXRhLgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGFsbCBkYXRhLgorICovCitzdGF0dXNfdCBMUFVBUlRfUmVhZEJsb2NraW5nKExQVUFSVF9UeXBlICpiYXNlLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKKworLyogQH0gKi8KKworLyohCisgKiBAbmFtZSBUcmFuc2FjdGlvbmFsCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBMUFVBUlQgaGFuZGxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIExQVUFSVCBoYW5kbGUsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBvdGhlciBMUFVBUlQKKyAqIHRyYW5zYWN0aW9uYWwgQVBJcy4gVXN1YWxseSwgZm9yIGEgc3BlY2lmaWVkIExQVUFSVCBpbnN0YW5jZSwKKyAqIGNhbGwgdGhpcyBBUEkgb25jZSB0byBnZXQgdGhlIGluaXRpYWxpemVkIGhhbmRsZS4KKyAqCisgKiBUaGUgTFBVQVJUIGRyaXZlciBzdXBwb3J0cyB0aGUgImJhY2tncm91bmQiIHJlY2VpdmluZywgd2hpY2ggbWVhbnMgdGhhdCB1c2VyIGNhbiBzZXQgdXAKKyAqIGFuIFJYIHJpbmcgYnVmZmVyIG9wdGlvbmFsbHkuIERhdGEgcmVjZWl2ZWQgaXMgc3RvcmVkIGludG8gdGhlIHJpbmcgYnVmZmVyIGV2ZW4gd2hlbiB0aGUKKyAqIHVzZXIgZG9lc24ndCBjYWxsIHRoZSBMUFVBUlRfVHJhbnNmZXJSZWNlaXZlTm9uQmxvY2tpbmcoKSBBUEkuIElmIHRoZXJlIGlzIGFscmVhZHkgZGF0YSByZWNlaXZlZAorICogaW4gdGhlIHJpbmcgYnVmZmVyLCB0aGUgdXNlciBjYW4gZ2V0IHRoZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIHJpbmcgYnVmZmVyIGRpcmVjdGx5LgorICogVGhlIHJpbmcgYnVmZmVyIGlzIGRpc2FibGVkIGlmIHBhc3NpbmcgTlVMTCBhcyBAcCByaW5nQnVmZmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLgorICogQHBhcmFtIHVzZXJEYXRhIFVzZXIgZGF0YS4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGUoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwdWFydF90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlckRhdGEpOworLyohCisgKiBAYnJpZWYgVHJhbnNtaXRzIGEgYnVmZmVyIG9mIGRhdGEgdXNpbmcgdGhlIGludGVycnVwdCBtZXRob2QuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kIGRhdGEgdXNpbmcgYW4gaW50ZXJydXB0IG1ldGhvZC4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbiwgd2hpY2gKKyAqIHJldHVybnMgZGlyZWN0bHkgd2l0aG91dCB3YWl0aW5nIGZvciBhbGwgZGF0YSB3cml0dGVuIHRvIHRoZSB0cmFuc21pdHRlciByZWdpc3Rlci4gV2hlbgorICogYWxsIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgVFggcmVnaXN0ZXIgaW4gdGhlIElTUiwgdGhlIExQVUFSVCBkcml2ZXIgY2FsbHMgdGhlIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBhbmQgcGFzc2VzIHRoZSBAcmVmIGtTdGF0dXNfTFBVQVJUX1R4SWRsZSBhcyBzdGF0dXMgcGFyYW1ldGVyLgorICoKKyAqIEBub3RlIFRoZSBrU3RhdHVzX0xQVUFSVF9UeElkbGUgaXMgcGFzc2VkIHRvIHRoZSB1cHBlciBsYXllciB3aGVuIGFsbCBkYXRhIGFyZSB3cml0dGVuCisgKiB0byB0aGUgVFggcmVnaXN0ZXIuIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgZGF0YSBzZW50IG91dC4gQmVmb3JlIGRpc2FibGluZyB0aGUgVFgsCisgKiBjaGVjayB0aGUga0xQVUFSVF9UcmFuc21pc3Npb25Db21wbGV0ZUZsYWcgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zbWl0IGlzIGZpbmlzaGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIHhmZXIgTFBVQVJUIHRyYW5zZmVyIHN0cnVjdHVyZSwgc2VlICNscHVhcnRfdHJhbnNmZXJfdC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIFN1Y2Nlc3NmdWxseSBzdGFydCB0aGUgZGF0YSB0cmFuc21pc3Npb24uCisgKiBAcmV0dmFsIGtTdGF0dXNfTFBVQVJUX1R4QnVzeSBQcmV2aW91cyB0cmFuc21pc3Npb24gc3RpbGwgbm90IGZpbmlzaGVkLCBkYXRhIG5vdCBhbGwgd3JpdHRlbiB0byB0aGUgVFggcmVnaXN0ZXIuCisgKiBAcmV0dmFsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50IEludmFsaWQgYXJndW1lbnQuCisgKi8KK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlclNlbmROb25CbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUsIGxwdWFydF90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB1cCB0aGUgUlggcmluZyBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBSWCByaW5nIGJ1ZmZlciB0byBhIHNwZWNpZmljIFVBUlQgaGFuZGxlLgorICoKKyAqIFdoZW4gdGhlIFJYIHJpbmcgYnVmZmVyIGlzIHVzZWQsIGRhdGEgcmVjZWl2ZWQgaXMgc3RvcmVkIGludG8gdGhlIHJpbmcgYnVmZmVyIGV2ZW4gd2hlbgorICogdGhlIHVzZXIgZG9lc24ndCBjYWxsIHRoZSBVQVJUX1RyYW5zZmVyUmVjZWl2ZU5vbkJsb2NraW5nKCkgQVBJLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGRhdGEgcmVjZWl2ZWQKKyAqIGluIHRoZSByaW5nIGJ1ZmZlciwgdGhlIHVzZXIgY2FuIGdldCB0aGUgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSByaW5nIGJ1ZmZlciBkaXJlY3RseS4KKyAqCisgKiBAbm90ZSBXaGVuIHVzaW5nIFJYIHJpbmcgYnVmZmVyLCBvbmUgYnl0ZSBpcyByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLiBJbiBvdGhlcgorICogd29yZHMsIGlmIEBwIHJpbmdCdWZmZXJTaXplIGlzIDMyLCB0aGVuIG9ubHkgMzEgYnl0ZXMgYXJlIHVzZWQgZm9yIHNhdmluZyBkYXRhLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIHJpbmdCdWZmZXIgU3RhcnQgYWRkcmVzcyBvZiByaW5nIGJ1ZmZlciBmb3IgYmFja2dyb3VuZCByZWNlaXZpbmcuIFBhc3MgTlVMTCB0byBkaXNhYmxlIHRoZSByaW5nIGJ1ZmZlci4KKyAqIEBwYXJhbSByaW5nQnVmZmVyU2l6ZSBzaXplIG9mIHRoZSByaW5nIGJ1ZmZlci4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJTdGFydFJpbmdCdWZmZXIoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJpbmdCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmluZ0J1ZmZlclNpemUpOworCisvKiEKKyAqIEBicmllZiBBYm9ydHMgdGhlIGJhY2tncm91bmQgdHJhbnNmZXIgYW5kIHVuaW5zdGFsbHMgdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWJvcnRzIHRoZSBiYWNrZ3JvdW5kIHRyYW5zZmVyIGFuZCB1bmluc3RhbGxzIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJTdG9wUmluZ0J1ZmZlcihMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBBYm9ydHMgdGhlIGludGVycnVwdC1kcml2ZW4gZGF0YSB0cmFuc21pdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyB0aGUgaW50ZXJydXB0IGRyaXZlbiBkYXRhIHNlbmRpbmcuIFRoZSB1c2VyIGNhbiBnZXQgdGhlIHJlbWFpbkJ0eWVzIHRvIGZpbmQgb3V0CisgKiBob3cgbWFueSBieXRlcyBhcmUgbm90IHNlbnQgb3V0LgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIExQVUFSVF9UcmFuc2ZlckFib3J0U2VuZChMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGUgTFBVQVJUIHRyYW5zbWl0dGVyIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gTFBVQVJUIFRYCisgKiByZWdpc3RlciBieSBhbiBpbnRlcnJ1cHQgbWV0aG9kLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIGNvdW50IFNlbmQgYnl0ZXMgY291bnQuCisgKiBAcmV0dmFsIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3MgTm8gc2VuZCBpbiBwcm9ncmVzcy4KKyAqIEByZXR2YWwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQgUGFyYW1ldGVyIGlzIGludmFsaWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBHZXQgc3VjY2Vzc2Z1bGx5IHRocm91Z2ggdGhlIHBhcmFtZXRlciBccCBjb3VudDsKKyAqLworc3RhdHVzX3QgTFBVQVJUX1RyYW5zZmVyR2V0U2VuZENvdW50KExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwgdWludDMyX3QgKmNvdW50KTsKKworLyohCisgKiBAYnJpZWYgUmVjZWl2ZXMgYSBidWZmZXIgb2YgZGF0YSB1c2luZyB0aGUgaW50ZXJydXB0IG1ldGhvZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGRhdGEgdXNpbmcgYW4gaW50ZXJydXB0IG1ldGhvZC4gVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbgorICogd2hpY2ggcmV0dXJucyB3aXRob3V0IHdhaXRpbmcgdG8gZW5zdXJlIHRoYXQgYWxsIGRhdGEgYXJlIHJlY2VpdmVkLgorICogSWYgdGhlIFJYIHJpbmcgYnVmZmVyIGlzIHVzZWQgYW5kIG5vdCBlbXB0eSwgdGhlIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyIGlzIGNvcGllZCBhbmQKKyAqIHRoZSBwYXJhbWV0ZXIgQHAgcmVjZWl2ZWRCeXRlcyBzaG93cyBob3cgbWFueSBieXRlcyBhcmUgY29waWVkIGZyb20gdGhlIHJpbmcgYnVmZmVyLgorICogQWZ0ZXIgY29weWluZywgaWYgdGhlIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyIGlzIG5vdCBlbm91Z2ggZm9yIHJlYWQsIHRoZSByZWNlaXZlCisgKiByZXF1ZXN0IGlzIHNhdmVkIGJ5IHRoZSBMUFVBUlQgZHJpdmVyLiBXaGVuIHRoZSBuZXcgZGF0YSBhcnJpdmVzLCB0aGUgcmVjZWl2ZSByZXF1ZXN0CisgKiBpcyBzZXJ2aWNlZCBmaXJzdC4gV2hlbiBhbGwgZGF0YSBpcyByZWNlaXZlZCwgdGhlIExQVUFSVCBkcml2ZXIgbm90aWZpZXMgdGhlIHVwcGVyIGxheWVyCisgKiB0aHJvdWdoIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHBhc3NlcyBhIHN0YXR1cyBwYXJhbWV0ZXIgQHJlZiBrU3RhdHVzX1VBUlRfUnhJZGxlLgorICogRm9yIGV4YW1wbGUsIHRoZSB1cHBlciBsYXllciBuZWVkcyAxMCBieXRlcyBidXQgdGhlcmUgYXJlIG9ubHkgNSBieXRlcyBpbiByaW5nIGJ1ZmZlci4KKyAqIFRoZSA1IGJ5dGVzIGFyZSBjb3BpZWQgdG8geGZlci0+ZGF0YSwgd2hpY2ggcmV0dXJucyB3aXRoIHRoZQorICogcGFyYW1ldGVyIEBwIHJlY2VpdmVkQnl0ZXMgc2V0IHRvIDUuIEZvciB0aGUgcmVtYWluaW5nIDUgYnl0ZXMsIHRoZSBuZXdseSBhcnJpdmVkIGRhdGEgaXMKKyAqIHNhdmVkIGZyb20geGZlci0+ZGF0YVs1XS4gV2hlbiA1IGJ5dGVzIGFyZSByZWNlaXZlZCwgdGhlIExQVUFSVCBkcml2ZXIgbm90aWZpZXMgdGhlIHVwcGVyIGxheWVyLgorICogSWYgdGhlIFJYIHJpbmcgYnVmZmVyIGlzIG5vdCBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIFJYIGFuZCBSWCBpbnRlcnJ1cHQKKyAqIHRvIHJlY2VpdmUgZGF0YSB0byB4ZmVyLT5kYXRhLiBXaGVuIGFsbCBkYXRhIGlzIHJlY2VpdmVkLCB0aGUgdXBwZXIgbGF5ZXIgaXMgbm90aWZpZWQuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKiBAcGFyYW0geGZlciBMUFVBUlQgdHJhbnNmZXIgc3RydWN0dXJlLCBzZWUgI3VhcnRfdHJhbnNmZXJfdC4KKyAqIEBwYXJhbSByZWNlaXZlZEJ5dGVzIEJ5dGVzIHJlY2VpdmVkIGZyb20gdGhlIHJpbmcgYnVmZmVyIGRpcmVjdGx5LgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgU3VjY2Vzc2Z1bGx5IHF1ZXVlIHRoZSB0cmFuc2ZlciBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZS4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfUnhCdXN5IFByZXZpb3VzIHJlY2VpdmUgcmVxdWVzdCBpcyBub3QgZmluaXNoZWQuCisgKiBAcmV0dmFsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50IEludmFsaWQgYXJndW1lbnQuCisgKi8KK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlclJlY2VpdmVOb25CbG9ja2luZyhMUFVBUlRfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfdHJhbnNmZXJfdCAqeGZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnJlY2VpdmVkQnl0ZXMpOworCisvKiEKKyAqIEBicmllZiBBYm9ydHMgdGhlIGludGVycnVwdC1kcml2ZW4gZGF0YSByZWNlaXZpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBhYm9ydHMgdGhlIGludGVycnVwdC1kcml2ZW4gZGF0YSByZWNlaXZpbmcuIFRoZSB1c2VyIGNhbiBnZXQgdGhlIHJlbWFpbkJ5dGVzIHRvIGZpbmQgb3V0CisgKiBob3cgbWFueSBieXRlcyBub3QgcmVjZWl2ZWQgeWV0LgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICovCit2b2lkIExQVUFSVF9UcmFuc2ZlckFib3J0UmVjZWl2ZShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKiBAcGFyYW0gY291bnQgUmVjZWl2ZSBieXRlcyBjb3VudC4KKyAqIEByZXR2YWwga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyBObyByZWNlaXZlIGluIHByb2dyZXNzLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBQYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIEdldCBzdWNjZXNzZnVsbHkgdGhyb3VnaCB0aGUgcGFyYW1ldGVyIFxwIGNvdW50OworICovCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnQoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpOworCisvKiEKKyAqIEBicmllZiBMUFVBUlQgSVJRIGhhbmRsZSBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIExQVUFSVCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBJUlEgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIExQVUFSVCBoYW5kbGUgcG9pbnRlci4KKyAqLwordm9pZCBMUFVBUlRfVHJhbnNmZXJIYW5kbGVJUlEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyohCisgKiBAYnJpZWYgTFBVQVJUIEVycm9yIElSUSBoYW5kbGUgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBMUFVBUlQgZXJyb3IgSVJRIHJlcXVlc3QuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKi8KK3ZvaWQgTFBVQVJUX1RyYW5zZmVySGFuZGxlRXJyb3JJUlEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyogQH0gKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfTFBVQVJUX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZWRtYS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2VkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGRhNDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2VkbWEuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfbHB1YXJ0X2VkbWEuaCIKKyNpbmNsdWRlICJmc2xfZG1hbXV4LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyo8ISBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmb3IgbHB1YXJ0X2VkbWFfcHJpdmF0ZV9oYW5kbGVfdC4gVGhlIHN0cnVjdHVyZSBpcyBwcml2YXRlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2xwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlCit7CisgICAgTFBVQVJUX1R5cGUgKmJhc2U7CisgICAgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZTsKK30gbHB1YXJ0X2VkbWFfcHJpdmF0ZV9oYW5kbGVfdDsKKworLyogTFBVQVJUIEVETUEgdHJhbnNmZXIgaGFuZGxlLiAqLworZW51bSBfbHB1YXJ0X2VkbWFfdGFuc2Zlcl9zdGF0ZXMKK3sKKyAgICBrTFBVQVJUX1R4SWRsZSwgLyogVFggaWRsZS4gKi8KKyAgICBrTFBVQVJUX1R4QnVzeSwgLyogVFggYnVzeS4gKi8KKyAgICBrTFBVQVJUX1J4SWRsZSwgLyogUlggaWRsZS4gKi8KKyAgICBrTFBVQVJUX1J4QnVzeSAgLyogUlggYnVzeS4gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyo8ISBQcml2YXRlIGhhbmRsZSBvbmx5IHVzZWQgZm9yIGludGVybmFsbHkuICovCitzdGF0aWMgbHB1YXJ0X2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCBzX2VkbWFQcml2YXRlSGFuZGxlW0ZTTF9GRUFUVVJFX1NPQ19MUFVBUlRfQ09VTlRdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgTFBVQVJUIEVETUEgc2VuZCBmaW5pc2hlZCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIExQVUFSVCBFRE1BIHNlbmQgZmluaXNoZWQuIEl0IGRpc2FibGVzIHRoZSBMUFVBUlQKKyAqIFRYIEVETUEgcmVxdWVzdCBhbmQgc2VuZHMgQHJlZiBrU3RhdHVzX0xQVUFSVF9UeElkbGUgdG8gTFBVQVJUIGNhbGxiYWNrLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIEVETUEgaGFuZGxlLgorICogQHBhcmFtIHBhcmFtIENhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4KKyAqLworc3RhdGljIHZvaWQgTFBVQVJUX1NlbmRFRE1BQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpwYXJhbSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpOworCisvKiEKKyAqIEBicmllZiBMUFVBUlQgRURNQSByZWNlaXZlIGZpbmlzaGVkIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gTFBVQVJUIEVETUEgcmVjZWl2ZSBmaW5pc2hlZC4gSXQgZGlzYWJsZXMgdGhlIExQVUFSVAorICogUlggRURNQSByZXF1ZXN0IGFuZCBzZW5kcyBAcmVmIGtTdGF0dXNfTFBVQVJUX1J4SWRsZSB0byBMUFVBUlQgY2FsbGJhY2suCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgRURNQSBoYW5kbGUuCisgKiBAcGFyYW0gcGFyYW0gQ2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLgorICovCitzdGF0aWMgdm9pZCBMUFVBUlRfUmVjZWl2ZUVETUFDYWxsYmFjayhlZG1hX2hhbmRsZV90ICpoYW5kbGUsIHZvaWQgKnBhcmFtLCBib29sIHRyYW5zZmVyRG9uZSwgdWludDMyX3QgdGNkcyk7CisKKy8qIQorICogQGJyaWVmIEdldCB0aGUgTFBVQVJUIGluc3RhbmNlIGZyb20gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBMUFVBUlQgaW5zdGFuY2UuCisgKi8KK2V4dGVybiB1aW50MzJfdCBMUFVBUlRfR2V0SW5zdGFuY2UoTFBVQVJUX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgTFBVQVJUX1NlbmRFRE1BQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpwYXJhbSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpCit7CisgICAgYXNzZXJ0KHBhcmFtKTsKKworICAgIGxwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlX3QgKmxwdWFydFByaXZhdGVIYW5kbGUgPSAobHB1YXJ0X2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqKXBhcmFtOworCisgICAgLyogQXZvaWQgdGhlIHdhcm5pbmcgZm9yIHVudXNlZCB2YXJpYWJsZXMuICovCisgICAgaGFuZGxlID0gaGFuZGxlOworICAgIHRjZHMgPSB0Y2RzOworCisgICAgaWYgKHRyYW5zZmVyRG9uZSkKKyAgICB7CisgICAgICAgIExQVUFSVF9UcmFuc2ZlckFib3J0U2VuZEVETUEobHB1YXJ0UHJpdmF0ZUhhbmRsZS0+YmFzZSwgbHB1YXJ0UHJpdmF0ZUhhbmRsZS0+aGFuZGxlKTsKKworICAgICAgICBpZiAobHB1YXJ0UHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgbHB1YXJ0UHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5jYWxsYmFjayhscHVhcnRQcml2YXRlSGFuZGxlLT5iYXNlLCBscHVhcnRQcml2YXRlSGFuZGxlLT5oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTdGF0dXNfTFBVQVJUX1R4SWRsZSwgbHB1YXJ0UHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIExQVUFSVF9SZWNlaXZlRURNQUNhbGxiYWNrKGVkbWFfaGFuZGxlX3QgKmhhbmRsZSwgdm9pZCAqcGFyYW0sIGJvb2wgdHJhbnNmZXJEb25lLCB1aW50MzJfdCB0Y2RzKQoreworICAgIGFzc2VydChwYXJhbSk7CisKKyAgICBscHVhcnRfZWRtYV9wcml2YXRlX2hhbmRsZV90ICpscHVhcnRQcml2YXRlSGFuZGxlID0gKGxwdWFydF9lZG1hX3ByaXZhdGVfaGFuZGxlX3QgKilwYXJhbTsKKworICAgIC8qIEF2b2lkIHdhcm5pbmcgZm9yIHVudXNlZCBwYXJhbWV0ZXJzLiAqLworICAgIGhhbmRsZSA9IGhhbmRsZTsKKyAgICB0Y2RzID0gdGNkczsKKworICAgIGlmICh0cmFuc2ZlckRvbmUpCisgICAgeworICAgICAgICAvKiBEaXNhYmxlIHRyYW5zZmVyLiAqLworICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFJlY2VpdmVFRE1BKGxwdWFydFByaXZhdGVIYW5kbGUtPmJhc2UsIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZSk7CisKKyAgICAgICAgaWYgKGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZS0+Y2FsbGJhY2sobHB1YXJ0UHJpdmF0ZUhhbmRsZS0+YmFzZSwgbHB1YXJ0UHJpdmF0ZUhhbmRsZS0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3RhdHVzX0xQVUFSVF9SeElkbGUsIGxwdWFydFByaXZhdGVIYW5kbGUtPmhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExQVUFSVF9UcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKnR4RWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICpyeEVkbWFIYW5kbGUpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IExQVUFSVF9HZXRJbnN0YW5jZShiYXNlKTsKKworICAgIHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmJhc2UgPSBiYXNlOworICAgIHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZSA9IGhhbmRsZTsKKworICAgIG1lbXNldChoYW5kbGUsIDAsIHNpemVvZigqaGFuZGxlKSk7CisKKyAgICBoYW5kbGUtPnJ4U3RhdGUgPSBrTFBVQVJUX1J4SWRsZTsKKyAgICBoYW5kbGUtPnR4U3RhdGUgPSBrTFBVQVJUX1R4SWRsZTsKKworICAgIGhhbmRsZS0+cnhFZG1hSGFuZGxlID0gcnhFZG1hSGFuZGxlOworICAgIGhhbmRsZS0+dHhFZG1hSGFuZGxlID0gdHhFZG1hSGFuZGxlOworCisgICAgaGFuZGxlLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGhhbmRsZS0+dXNlckRhdGEgPSB1c2VyRGF0YTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFBVQVJUX0hBU19GSUZPKSAmJiBGU0xfRkVBVFVSRV9MUFVBUlRfSEFTX0ZJRk8KKyAgICAvKiBOb3RlOgorICAgICAgIFRha2UgY2FyZSBvZiB0aGUgUlggRklGTywgRURNQSByZXF1ZXN0IG9ubHkgYXNzZXJ0IHdoZW4gcmVjZWl2ZWQgYnl0ZXMKKyAgICAgICBlcXVhbCBvciBtb3JlIHRoYW4gUlggd2F0ZXIgbWFyaywgdGhlcmUgaXMgcG90ZW50aWFsIGlzc3VlIGlmIFJYIHdhdGVyCisgICAgICAgbWFyayBsYXJnZXIgdGhhbiAxLgorICAgICAgIEZvciBleGFtcGxlLCBpZiBSWCBGSUZPIHdhdGVyIG1hcmsgaXMgMiwgdXBwZXIgbGF5ZXIgbmVlZHMgNSBieXRlcyBhbmQKKyAgICAgICA1IGJ5dGVzIGFyZSByZWNlaXZlZC4gdGhlIGxhc3QgYnl0ZSB3aWxsIGJlIHNhdmVkIGluIEZJRk8gYnV0IG5vdCB0cmlnZ2VyCisgICAgICAgRURNQSB0cmFuc2ZlciBiZWNhdXNlIHRoZSB3YXRlciBtYXJrIGlzIDIuCisgICAgICovCisgICAgaWYgKHJ4RWRtYUhhbmRsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPldBVEVSICY9ICh+TFBVQVJUX1dBVEVSX1JYV0FURVJfTUFTSyk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBDb25maWd1cmUgVFguICovCisgICAgaWYgKHR4RWRtYUhhbmRsZSkKKyAgICB7CisgICAgICAgIEVETUFfU2V0Q2FsbGJhY2soaGFuZGxlLT50eEVkbWFIYW5kbGUsIExQVUFSVF9TZW5kRURNQUNhbGxiYWNrLCAmc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0pOworICAgIH0KKworICAgIC8qIENvbmZpZ3VyZSBSWC4gKi8KKyAgICBpZiAocnhFZG1hSGFuZGxlKQorICAgIHsKKyAgICAgICAgRURNQV9TZXRDYWxsYmFjayhoYW5kbGUtPnJ4RWRtYUhhbmRsZSwgTFBVQVJUX1JlY2VpdmVFRE1BQ2FsbGJhY2ssICZzX2VkbWFQcml2YXRlSGFuZGxlW2luc3RhbmNlXSk7CisgICAgfQorfQorCitzdGF0dXNfdCBMUFVBUlRfU2VuZEVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGxwdWFydF90cmFuc2Zlcl90ICp4ZmVyKQoreworICAgIGFzc2VydChoYW5kbGUpOworICAgIGFzc2VydChoYW5kbGUtPnR4RWRtYUhhbmRsZSk7CisgICAgYXNzZXJ0KHhmZXIpOworICAgIGFzc2VydCh4ZmVyLT5kYXRhKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YVNpemUpOworCisgICAgZWRtYV90cmFuc2Zlcl9jb25maWdfdCB4ZmVyQ29uZmlnOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIC8qIElmIHByZXZpb3VzIFRYIG5vdCBmaW5pc2hlZC4gKi8KKyAgICBpZiAoa0xQVUFSVF9UeEJ1c3kgPT0gaGFuZGxlLT50eFN0YXRlKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19MUFVBUlRfVHhCdXN5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoYW5kbGUtPnR4U3RhdGUgPSBrTFBVQVJUX1R4QnVzeTsKKyAgICAgICAgaGFuZGxlLT50eERhdGFTaXplQWxsID0geGZlci0+ZGF0YVNpemU7CisKKyAgICAgICAgLyogUHJlcGFyZSB0cmFuc2Zlci4gKi8KKyAgICAgICAgRURNQV9QcmVwYXJlVHJhbnNmZXIoJnhmZXJDb25maWcsIHhmZXItPmRhdGEsIHNpemVvZih1aW50OF90KSwgKHZvaWQgKilMUFVBUlRfR2V0RGF0YVJlZ2lzdGVyQWRkcmVzcyhiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLCBzaXplb2YodWludDhfdCksIHhmZXItPmRhdGFTaXplLCBrRURNQV9NZW1vcnlUb1BlcmlwaGVyYWwpOworCisgICAgICAgIC8qIFN0b3JlIHRoZSBpbml0aWFsbHkgY29uZmlndXJlZCBlRE1BIG1pbm9yIGJ5dGUgdHJhbnNmZXIgY291bnQgaW50byB0aGUgTFBVQVJUIGhhbmRsZSAqLworICAgICAgICBoYW5kbGUtPm5ieXRlcyA9IHNpemVvZih1aW50OF90KTsKKworICAgICAgICAvKiBTdWJtaXQgdHJhbnNmZXIuICovCisgICAgICAgIEVETUFfU3VibWl0VHJhbnNmZXIoaGFuZGxlLT50eEVkbWFIYW5kbGUsICZ4ZmVyQ29uZmlnKTsKKyAgICAgICAgRURNQV9TdGFydFRyYW5zZmVyKGhhbmRsZS0+dHhFZG1hSGFuZGxlKTsKKworICAgICAgICAvKiBFbmFibGUgTFBVQVJUIFRYIEVETUEuICovCisgICAgICAgIExQVUFSVF9FbmFibGVUeERNQShiYXNlLCB0cnVlKTsKKworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFBVQVJUX1JlY2VpdmVFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCBscHVhcnRfdHJhbnNmZXJfdCAqeGZlcikKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoaGFuZGxlLT5yeEVkbWFIYW5kbGUpOworICAgIGFzc2VydCh4ZmVyKTsKKyAgICBhc3NlcnQoeGZlci0+ZGF0YSk7CisgICAgYXNzZXJ0KHhmZXItPmRhdGFTaXplKTsKKworICAgIGVkbWFfdHJhbnNmZXJfY29uZmlnX3QgeGZlckNvbmZpZzsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICAvKiBJZiBwcmV2aW91cyBSWCBub3QgZmluaXNoZWQuICovCisgICAgaWYgKGtMUFVBUlRfUnhCdXN5ID09IGhhbmRsZS0+cnhTdGF0ZSkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfTFBVQVJUX1J4QnVzeTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeEJ1c3k7CisgICAgICAgIGhhbmRsZS0+cnhEYXRhU2l6ZUFsbCA9IHhmZXItPmRhdGFTaXplOworCisgICAgICAgIC8qIFByZXBhcmUgdHJhbnNmZXIuICovCisgICAgICAgIEVETUFfUHJlcGFyZVRyYW5zZmVyKCZ4ZmVyQ29uZmlnLCAodm9pZCAqKUxQVUFSVF9HZXREYXRhUmVnaXN0ZXJBZGRyZXNzKGJhc2UpLCBzaXplb2YodWludDhfdCksIHhmZXItPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50OF90KSwgc2l6ZW9mKHVpbnQ4X3QpLCB4ZmVyLT5kYXRhU2l6ZSwga0VETUFfUGVyaXBoZXJhbFRvTWVtb3J5KTsKKworICAgICAgICAvKiBTdG9yZSB0aGUgaW5pdGlhbGx5IGNvbmZpZ3VyZWQgZURNQSBtaW5vciBieXRlIHRyYW5zZmVyIGNvdW50IGludG8gdGhlIExQVUFSVCBoYW5kbGUgKi8KKyAgICAgICAgaGFuZGxlLT5uYnl0ZXMgPSBzaXplb2YodWludDhfdCk7CisKKyAgICAgICAgLyogU3VibWl0IHRyYW5zZmVyLiAqLworICAgICAgICBFRE1BX1N1Ym1pdFRyYW5zZmVyKGhhbmRsZS0+cnhFZG1hSGFuZGxlLCAmeGZlckNvbmZpZyk7CisgICAgICAgIEVETUFfU3RhcnRUcmFuc2ZlcihoYW5kbGUtPnJ4RWRtYUhhbmRsZSk7CisKKyAgICAgICAgLyogRW5hYmxlIExQVUFSVCBSWCBFRE1BLiAqLworICAgICAgICBMUFVBUlRfRW5hYmxlUnhETUEoYmFzZSwgdHJ1ZSk7CisKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQWJvcnRTZW5kRURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoaGFuZGxlLT50eEVkbWFIYW5kbGUpOworCisgICAgLyogRGlzYWJsZSBMUFVBUlQgVFggRURNQS4gKi8KKyAgICBMUFVBUlRfRW5hYmxlVHhETUEoYmFzZSwgZmFsc2UpOworCisgICAgLyogU3RvcCB0cmFuc2Zlci4gKi8KKyAgICBFRE1BX0Fib3J0VHJhbnNmZXIoaGFuZGxlLT50eEVkbWFIYW5kbGUpOworCisgICAgaGFuZGxlLT50eFN0YXRlID0ga0xQVUFSVF9UeElkbGU7Cit9CisKK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlRURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoaGFuZGxlLT5yeEVkbWFIYW5kbGUpOworCisgICAgLyogRGlzYWJsZSBMUFVBUlQgUlggRURNQS4gKi8KKyAgICBMUFVBUlRfRW5hYmxlUnhETUEoYmFzZSwgZmFsc2UpOworCisgICAgLyogU3RvcCB0cmFuc2Zlci4gKi8KKyAgICBFRE1BX0Fib3J0VHJhbnNmZXIoaGFuZGxlLT5yeEVkbWFIYW5kbGUpOworCisgICAgaGFuZGxlLT5yeFN0YXRlID0ga0xQVUFSVF9SeElkbGU7Cit9CisKK3N0YXR1c190IExQVUFSVF9UcmFuc2ZlckdldFJlY2VpdmVDb3VudEVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIHVpbnQzMl90ICpjb3VudCkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoaGFuZGxlLT5yeEVkbWFIYW5kbGUpOworICAgIGFzc2VydChjb3VudCk7CisKKyAgICBpZiAoa0xQVUFSVF9SeElkbGUgPT0gaGFuZGxlLT5yeFN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfTm9UcmFuc2ZlckluUHJvZ3Jlc3M7CisgICAgfQorCisgICAgKmNvdW50ID0gaGFuZGxlLT5yeERhdGFTaXplQWxsIC0KKyAgICAgICAgICAgICAodWludDMyX3QpaGFuZGxlLT5uYnl0ZXMgKgorICAgICAgICAgICAgICAgICBFRE1BX0dldFJlbWFpbmluZ01ham9yTG9vcENvdW50KGhhbmRsZS0+cnhFZG1hSGFuZGxlLT5iYXNlLCBoYW5kbGUtPnJ4RWRtYUhhbmRsZS0+Y2hhbm5lbCk7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRTZW5kQ291bnRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpCit7CisgICAgYXNzZXJ0KGhhbmRsZSk7CisgICAgYXNzZXJ0KGhhbmRsZS0+dHhFZG1hSGFuZGxlKTsKKyAgICBhc3NlcnQoY291bnQpOworCisgICAgaWYgKGtMUFVBUlRfVHhJZGxlID09IGhhbmRsZS0+dHhTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX05vVHJhbnNmZXJJblByb2dyZXNzOworICAgIH0KKworICAgICpjb3VudCA9IGhhbmRsZS0+dHhEYXRhU2l6ZUFsbCAtCisgICAgICAgICAgICAgKHVpbnQzMl90KWhhbmRsZS0+bmJ5dGVzICoKKyAgICAgICAgICAgICAgICAgRURNQV9HZXRSZW1haW5pbmdNYWpvckxvb3BDb3VudChoYW5kbGUtPnR4RWRtYUhhbmRsZS0+YmFzZSwgaGFuZGxlLT50eEVkbWFIYW5kbGUtPmNoYW5uZWwpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9lZG1hLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTY1YzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZWRtYS5oCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9MUFVBUlRfRURNQV9IXworI2RlZmluZSBfRlNMX0xQVUFSVF9FRE1BX0hfCisKKyNpbmNsdWRlICJmc2xfbHB1YXJ0LmgiCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorI2luY2x1ZGUgImZzbF9lZG1hLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHB1YXJ0X2VkbWFfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgaGFuZGxlIHR5cGVkZWYuICovCit0eXBlZGVmIHN0cnVjdCBfbHB1YXJ0X2VkbWFfaGFuZGxlIGxwdWFydF9lZG1hX2hhbmRsZV90OworCisvKiEgQGJyaWVmIExQVUFSVCB0cmFuc2ZlciBjYWxsYmFjayBmdW5jdGlvbi4gKi8KK3R5cGVkZWYgdm9pZCAoKmxwdWFydF9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QpKExQVUFSVF9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyohCisqIEBicmllZiBMUFVBUlQgZURNQSBoYW5kbGUKKyovCitzdHJ1Y3QgX2xwdWFydF9lZG1hX2hhbmRsZQoreworICAgIGxwdWFydF9lZG1hX3RyYW5zZmVyX2NhbGxiYWNrX3QgY2FsbGJhY2s7IC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24uICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMUFVBUlQgY2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLiovCisgICAgc2l6ZV90IHJ4RGF0YVNpemVBbGw7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIHRoZSBkYXRhIHRvIHJlY2VpdmUuICovCisgICAgc2l6ZV90IHR4RGF0YVNpemVBbGw7ICAgICAgICAgICAgICAgICAgICAgLyohPCBTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQgb3V0LiAqLworCisgICAgZWRtYV9oYW5kbGVfdCAqdHhFZG1hSGFuZGxlOyAvKiE8IFRoZSBlRE1BIFRYIGNoYW5uZWwgdXNlZC4gKi8KKyAgICBlZG1hX2hhbmRsZV90ICpyeEVkbWFIYW5kbGU7IC8qITwgVGhlIGVETUEgUlggY2hhbm5lbCB1c2VkLiAqLworCisgICAgdWludDhfdCBuYnl0ZXM7IC8qITwgZURNQSBtaW5vciBieXRlIHRyYW5zZmVyIGNvdW50IGluaXRpYWxseSBjb25maWd1cmVkLiAqLworCisgICAgdm9sYXRpbGUgdWludDhfdCB0eFN0YXRlOyAvKiE8IFRYIHRyYW5zZmVyIHN0YXRlLiAqLworICAgIHZvbGF0aWxlIHVpbnQ4X3QgcnhTdGF0ZTsgLyohPCBSWCB0cmFuc2ZlciBzdGF0ZSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBuYW1lIGVETUEgdHJhbnNhY3Rpb25hbAorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgTFBVQVJUIGhhbmRsZSB3aGljaCBpcyB1c2VkIGluIHRyYW5zYWN0aW9uYWwgZnVuY3Rpb25zLgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBQb2ludGVyIHRvIGxwdWFydF9lZG1hX2hhbmRsZV90IHN0cnVjdHVyZS4KKyAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwYXJhbSB1c2VyRGF0YSBVc2VyIGRhdGEuCisgKiBAcGFyYW0gdHhFZG1hSGFuZGxlIFVzZXIgcmVxdWVzdGVkIERNQSBoYW5kbGUgZm9yIFRYIERNQSB0cmFuc2Zlci4KKyAqIEBwYXJhbSByeEVkbWFIYW5kbGUgVXNlciByZXF1ZXN0ZWQgRE1BIGhhbmRsZSBmb3IgUlggRE1BIHRyYW5zZmVyLgorICovCit2b2lkIExQVUFSVF9UcmFuc2ZlckNyZWF0ZUhhbmRsZUVETUEoTFBVQVJUX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscHVhcnRfZWRtYV90cmFuc2Zlcl9jYWxsYmFja190IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkbWFfaGFuZGxlX3QgKnR4RWRtYUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICpyeEVkbWFIYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBTZW5kcyBkYXRhIHVzaW5nIGVETUEuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBkYXRhIHVzaW5nIGVETUEuIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMKKyAqIHJpZ2h0IGF3YXkuIFdoZW4gYWxsIGRhdGEgaXMgc2VudCwgdGhlIHNlbmQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgTFBVQVJUIGhhbmRsZSBwb2ludGVyLgorICogQHBhcmFtIHhmZXIgTFBVQVJUIGVETUEgdHJhbnNmZXIgc3RydWN0dXJlLiBTZWUgI2xwdWFydF90cmFuc2Zlcl90LgorICogQHJldHZhbCBrU3RhdHVzX1N1Y2Nlc3MgaWYgc3VjY2VlZCwgb3RoZXJzIGZhaWxlZC4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfVHhCdXN5IFByZXZpb3VzIHRyYW5zZmVyIG9uIGdvaW5nLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBJbnZhbGlkIGFyZ3VtZW50LgorICovCitzdGF0dXNfdCBMUFVBUlRfU2VuZEVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUsIGxwdWFydF90cmFuc2Zlcl90ICp4ZmVyKTsKKworLyohCisgKiBAYnJpZWYgUmVjZWl2ZXMgZGF0YSB1c2luZyBlRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgZGF0YSB1c2luZyBlRE1BLiBUaGlzIGlzIG5vbi1ibG9ja2luZyBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucworICogcmlnaHQgYXdheS4gV2hlbiBhbGwgZGF0YSBpcyByZWNlaXZlZCwgdGhlIHJlY2VpdmUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byBscHVhcnRfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0geGZlciBMUFVBUlQgZURNQSB0cmFuc2ZlciBzdHJ1Y3R1cmUsIHNlZSAjbHB1YXJ0X3RyYW5zZmVyX3QuCisgKiBAcmV0dmFsIGtTdGF0dXNfU3VjY2VzcyBpZiBzdWNjZWVkLCBvdGhlcnMgZmFpbC4KKyAqIEByZXR2YWwga1N0YXR1c19MUFVBUlRfUnhCdXN5IFByZXZpb3VzIHRyYW5zZmVyIG9uZ29pbmcuCisgKiBAcmV0dmFsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50IEludmFsaWQgYXJndW1lbnQuCisgKi8KK3N0YXR1c190IExQVUFSVF9SZWNlaXZlRURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgbHB1YXJ0X3RyYW5zZmVyX3QgKnhmZXIpOworCisvKiEKKyAqIEBicmllZiBBYm9ydHMgdGhlIHNlbnQgZGF0YSB1c2luZyBlRE1BLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWJvcnRzIHRoZSBzZW50IGRhdGEgdXNpbmcgZURNQS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMUFVBUlQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gaGFuZGxlIFBvaW50ZXIgdG8gbHB1YXJ0X2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlLgorICovCit2b2lkIExQVUFSVF9UcmFuc2ZlckFib3J0U2VuZEVETUEoTFBVQVJUX1R5cGUgKmJhc2UsIGxwdWFydF9lZG1hX2hhbmRsZV90ICpoYW5kbGUpOworCisvKiEKKyAqIEBicmllZiBBYm9ydHMgdGhlIHJlY2VpdmVkIGRhdGEgdXNpbmcgZURNQS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFib3J0cyB0aGUgcmVjZWl2ZWQgZGF0YSB1c2luZyBlRE1BLgorICoKKyAqIEBwYXJhbSBiYXNlIExQVUFSVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBoYW5kbGUgUG9pbnRlciB0byBscHVhcnRfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlRURNQShMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2VkbWFfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBMUFVBUlQgVFggcmVnaXN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgTFBVQVJUIFRYCisgKiByZWdpc3RlciBieSBETUEuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKiBAcGFyYW0gY291bnQgU2VuZCBieXRlcyBjb3VudC4KKyAqIEByZXR2YWwga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyBObyBzZW5kIGluIHByb2dyZXNzLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBQYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIEdldCBzdWNjZXNzZnVsbHkgdGhyb3VnaCB0aGUgcGFyYW1ldGVyIFxwIGNvdW50OworICovCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRTZW5kQ291bnRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMuCisgKgorICogQHBhcmFtIGJhc2UgTFBVQVJUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGhhbmRsZSBMUFVBUlQgaGFuZGxlIHBvaW50ZXIuCisgKiBAcGFyYW0gY291bnQgUmVjZWl2ZSBieXRlcyBjb3VudC4KKyAqIEByZXR2YWwga1N0YXR1c19Ob1RyYW5zZmVySW5Qcm9ncmVzcyBObyByZWNlaXZlIGluIHByb2dyZXNzLgorICogQHJldHZhbCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCBQYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAqIEByZXR2YWwga1N0YXR1c19TdWNjZXNzIEdldCBzdWNjZXNzZnVsbHkgdGhyb3VnaCB0aGUgcGFyYW1ldGVyIFxwIGNvdW50OworICovCitzdGF0dXNfdCBMUFVBUlRfVHJhbnNmZXJHZXRSZWNlaXZlQ291bnRFRE1BKExQVUFSVF9UeXBlICpiYXNlLCBscHVhcnRfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB1aW50MzJfdCAqY291bnQpOworCisvKkB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfTFBVQVJUX0VETUFfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9mcmVlcnRvcy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2ZyZWVydG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiNjc3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2xwdWFydF9mcmVlcnRvcy5jCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9scHVhcnRfZnJlZXJ0b3MuaCIKKyNpbmNsdWRlIDxGcmVlUlRPUy5oPgorI2luY2x1ZGUgPGV2ZW50X2dyb3Vwcy5oPgorI2luY2x1ZGUgPHNlbXBoci5oPgorCitzdGF0aWMgdm9pZCBMUFVBUlRfUlRPU19DYWxsYmFjayhMUFVBUlRfVHlwZSAqYmFzZSwgbHB1YXJ0X2hhbmRsZV90ICpzdGF0ZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICpwYXJhbSkKK3sKKyAgICBscHVhcnRfcnRvc19oYW5kbGVfdCAqaGFuZGxlID0gKGxwdWFydF9ydG9zX2hhbmRsZV90ICopcGFyYW07CisgICAgQmFzZVR5cGVfdCB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4sIHhSZXN1bHQ7CisKKyAgICB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZEZBTFNFOworICAgIHhSZXN1bHQgPSBwZEZBSUw7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfTFBVQVJUX1J4SWRsZSkKKyAgICB7CisgICAgICAgIHhSZXN1bHQgPSB4RXZlbnRHcm91cFNldEJpdHNGcm9tSVNSKGhhbmRsZS0+cnhFdmVudCwgUlRPU19MUFVBUlRfQ09NUExFVEUsICZ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4pOworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0dXMgPT0ga1N0YXR1c19MUFVBUlRfVHhJZGxlKQorICAgIHsKKyAgICAgICAgeFJlc3VsdCA9IHhFdmVudEdyb3VwU2V0Qml0c0Zyb21JU1IoaGFuZGxlLT50eEV2ZW50LCBSVE9TX0xQVUFSVF9DT01QTEVURSwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbik7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX0xQVUFSVF9SeFJpbmdCdWZmZXJPdmVycnVuKQorICAgIHsKKyAgICAgICAgeFJlc3VsdCA9CisgICAgICAgICAgICB4RXZlbnRHcm91cFNldEJpdHNGcm9tSVNSKGhhbmRsZS0+cnhFdmVudCwgUlRPU19MUFVBUlRfUklOR19CVUZGRVJfT1ZFUlJVTiwgJnhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbik7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX0xQVUFSVF9SeEhhcmR3YXJlT3ZlcnJ1bikKKyAgICB7CisgICAgICAgIC8qIENsZWFyIE92ZXJydW4gZmxhZyAoT1IpIGluIExQVUFSVCBTVEFUIHJlZ2lzdGVyICovCisgICAgICAgIExQVUFSVF9DbGVhclN0YXR1c0ZsYWdzKGJhc2UsIGtMUFVBUlRfUnhPdmVycnVuRmxhZyk7CisgICAgICAgIHhSZXN1bHQgPQorICAgICAgICAgICAgeEV2ZW50R3JvdXBTZXRCaXRzRnJvbUlTUihoYW5kbGUtPnJ4RXZlbnQsIFJUT1NfTFBVQVJUX0hBUkRXQVJFX0JVRkZFUl9PVkVSUlVOLCAmeEhpZ2hlclByaW9yaXR5VGFza1dva2VuKTsKKyAgICB9CisKKyAgICBpZiAoeFJlc3VsdCAhPSBwZEZBSUwpCisgICAgeworICAgICAgICBwb3J0WUlFTERfRlJPTV9JU1IoeEhpZ2hlclByaW9yaXR5VGFza1dva2VuKTsKKyAgICB9Cit9CisKKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IExQVUFSVF9SVE9TX0luaXQKKyAqIERlc2NyaXB0aW9uICAgOiBJbml0aWFsaXplcyB0aGUgTFBVQVJUIGluc3RhbmNlIGZvciBhcHBsaWNhdGlvbgorICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgTFBVQVJUX1JUT1NfSW5pdChscHVhcnRfcnRvc19oYW5kbGVfdCAqaGFuZGxlLCBscHVhcnRfaGFuZGxlX3QgKnRfaGFuZGxlLCBjb25zdCBscHVhcnRfcnRvc19jb25maWdfdCAqY2ZnKQoreworICAgIGxwdWFydF9jb25maWdfdCBkZWZjZmc7CisKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIGlmIChOVUxMID09IHRfaGFuZGxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBjZmcpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIGlmIChOVUxMID09IGNmZy0+YmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgaWYgKDAgPT0gY2ZnLT5zcmNjbGspCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIGlmICgwID09IGNmZy0+YmF1ZHJhdGUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaGFuZGxlLT5iYXNlID0gY2ZnLT5iYXNlOworICAgIGhhbmRsZS0+dF9zdGF0ZSA9IHRfaGFuZGxlOworI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgaGFuZGxlLT50eFNlbWFwaG9yZSA9IHhTZW1hcGhvcmVDcmVhdGVNdXRleFN0YXRpYygmaGFuZGxlLT50eFNlbWFwaG9yZUJ1ZmZlcik7CisjZWxzZQorICAgIGhhbmRsZS0+dHhTZW1hcGhvcmUgPSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChOVUxMID09IGhhbmRsZS0+dHhTZW1hcGhvcmUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKyNpZiAoY29uZmlnU1VQUE9SVF9TVEFUSUNfQUxMT0NBVElPTiA9PSAxKQorICAgIGhhbmRsZS0+cnhTZW1hcGhvcmUgPSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXhTdGF0aWMoJmhhbmRsZS0+cnhTZW1hcGhvcmVCdWZmZXIpOworI2Vsc2UKKyAgICBoYW5kbGUtPnJ4U2VtYXBob3JlID0geFNlbWFwaG9yZUNyZWF0ZU11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGUtPnJ4U2VtYXBob3JlKQorICAgIHsKKyAgICAgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPnR4U2VtYXBob3JlKTsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisjaWYgKGNvbmZpZ1NVUFBPUlRfU1RBVElDX0FMTE9DQVRJT04gPT0gMSkKKyAgICBoYW5kbGUtPnR4RXZlbnQgPSB4RXZlbnRHcm91cENyZWF0ZVN0YXRpYygmaGFuZGxlLT50eEV2ZW50QnVmZmVyKTsKKyNlbHNlCisgICAgaGFuZGxlLT50eEV2ZW50ID0geEV2ZW50R3JvdXBDcmVhdGUoKTsKKyNlbmRpZgorICAgIGlmIChOVUxMID09IGhhbmRsZS0+dHhFdmVudCkKKyAgICB7CisgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT5yeFNlbWFwaG9yZSk7CisgICAgICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT50eFNlbWFwaG9yZSk7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgaGFuZGxlLT5yeEV2ZW50ID0geEV2ZW50R3JvdXBDcmVhdGVTdGF0aWMoJmhhbmRsZS0+cnhFdmVudEJ1ZmZlcik7CisjZWxzZQorICAgIGhhbmRsZS0+cnhFdmVudCA9IHhFdmVudEdyb3VwQ3JlYXRlKCk7CisjZW5kaWYKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGUtPnJ4RXZlbnQpCisgICAgeworICAgICAgICB2RXZlbnRHcm91cERlbGV0ZShoYW5kbGUtPnR4RXZlbnQpOworICAgICAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+cnhTZW1hcGhvcmUpOworICAgICAgICB2U2VtYXBob3JlRGVsZXRlKGhhbmRsZS0+dHhTZW1hcGhvcmUpOworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKyAgICBMUFVBUlRfR2V0RGVmYXVsdENvbmZpZygmZGVmY2ZnKTsKKworICAgIGRlZmNmZy5iYXVkUmF0ZV9CcHMgPSBjZmctPmJhdWRyYXRlOworICAgIGRlZmNmZy5wYXJpdHlNb2RlID0gY2ZnLT5wYXJpdHk7CisgICAgZGVmY2ZnLnN0b3BCaXRDb3VudCA9IGNmZy0+c3RvcGJpdHM7CisKKyAgICBMUFVBUlRfSW5pdChoYW5kbGUtPmJhc2UsICZkZWZjZmcsIGNmZy0+c3JjY2xrKTsKKyAgICBMUFVBUlRfVHJhbnNmZXJDcmVhdGVIYW5kbGUoaGFuZGxlLT5iYXNlLCBoYW5kbGUtPnRfc3RhdGUsIExQVUFSVF9SVE9TX0NhbGxiYWNrLCBoYW5kbGUpOworICAgIExQVUFSVF9UcmFuc2ZlclN0YXJ0UmluZ0J1ZmZlcihoYW5kbGUtPmJhc2UsIGhhbmRsZS0+dF9zdGF0ZSwgY2ZnLT5idWZmZXIsIGNmZy0+YnVmZmVyX3NpemUpOworCisgICAgTFBVQVJUX0VuYWJsZVR4KGhhbmRsZS0+YmFzZSwgdHJ1ZSk7CisgICAgTFBVQVJUX0VuYWJsZVJ4KGhhbmRsZS0+YmFzZSwgdHJ1ZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworLypGVU5DVElPTioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGdW5jdGlvbiBOYW1lIDogTFBVQVJUX1JUT1NfRGVpbml0CisgKiBEZXNjcmlwdGlvbiAgIDogRGVpbml0aWFsaXplcyB0aGUgTFBVQVJUIGluc3RhbmNlIGFuZCBmcmVlcyByZXNvdXJjZXMKKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IExQVUFSVF9SVE9TX0RlaW5pdChscHVhcnRfcnRvc19oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIExQVUFSVF9EZWluaXQoaGFuZGxlLT5iYXNlKTsKKworICAgIHZFdmVudEdyb3VwRGVsZXRlKGhhbmRsZS0+dHhFdmVudCk7CisgICAgdkV2ZW50R3JvdXBEZWxldGUoaGFuZGxlLT5yeEV2ZW50KTsKKworICAgIC8qIEdpdmUgdGhlIHNlbWFwaG9yZS4gVGhpcyBpcyBmb3IgZnVuY3Rpb25hbCBzYWZldHkgKi8KKyAgICB4U2VtYXBob3JlR2l2ZShoYW5kbGUtPnR4U2VtYXBob3JlKTsKKyAgICB4U2VtYXBob3JlR2l2ZShoYW5kbGUtPnJ4U2VtYXBob3JlKTsKKworICAgIHZTZW1hcGhvcmVEZWxldGUoaGFuZGxlLT50eFNlbWFwaG9yZSk7CisgICAgdlNlbWFwaG9yZURlbGV0ZShoYW5kbGUtPnJ4U2VtYXBob3JlKTsKKworICAgIC8qIEludmFsaWRhdGUgdGhlIGhhbmRsZSAqLworICAgIGhhbmRsZS0+YmFzZSA9IE5VTEw7CisgICAgaGFuZGxlLT50X3N0YXRlID0gTlVMTDsKKworICAgIHJldHVybiAwOworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uIE5hbWUgOiBVQVJUX1JUT1NfU2VuZAorICogRGVzY3JpcHRpb24gICA6IEluaXRpYWxpemVzIHRoZSBVQVJUIGluc3RhbmNlIGZvciBhcHBsaWNhdGlvbgorICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgTFBVQVJUX1JUT1NfU2VuZChscHVhcnRfcnRvc19oYW5kbGVfdCAqaGFuZGxlLCBjb25zdCB1aW50OF90ICpidWZmZXIsIHVpbnQzMl90IGxlbmd0aCkKK3sKKyAgICBFdmVudEJpdHNfdCBldjsKKyAgICBpbnQgcmV0dmFsID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgaWYgKE5VTEwgPT0gaGFuZGxlLT5iYXNlKQorICAgIHsKKyAgICAgICAgLyogSW52YWxpZCBoYW5kbGUuICovCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorICAgIGlmICgwID09IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKHBkRkFMU0UgPT0geFNlbWFwaG9yZVRha2UoaGFuZGxlLT50eFNlbWFwaG9yZSwgMCkpCisgICAgeworICAgICAgICAvKiBXZSBjb3VsZCBub3QgdGFrZSB0aGUgc2VtYXBob3JlLCBleGl0IHdpdGggMCBkYXRhIHJlY2VpdmVkICovCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorCisgICAgaGFuZGxlLT50eFRyYW5zZmVyLmRhdGEgPSAodWludDhfdCAqKWJ1ZmZlcjsKKyAgICBoYW5kbGUtPnR4VHJhbnNmZXIuZGF0YVNpemUgPSAodWludDMyX3QpbGVuZ3RoOworCisgICAgLyogTm9uLWJsb2NraW5nIGNhbGwgKi8KKyAgICBMUFVBUlRfVHJhbnNmZXJTZW5kTm9uQmxvY2tpbmcoaGFuZGxlLT5iYXNlLCBoYW5kbGUtPnRfc3RhdGUsICZoYW5kbGUtPnR4VHJhbnNmZXIpOworCisgICAgZXYgPSB4RXZlbnRHcm91cFdhaXRCaXRzKGhhbmRsZS0+dHhFdmVudCwgUlRPU19MUFVBUlRfQ09NUExFVEUsIHBkVFJVRSwgcGRGQUxTRSwgcG9ydE1BWF9ERUxBWSk7CisgICAgaWYgKCEoZXYgJiBSVE9TX0xQVUFSVF9DT01QTEVURSkpCisgICAgeworICAgICAgICByZXR2YWwgPSBrU3RhdHVzX0ZhaWw7CisgICAgfQorCisgICAgaWYgKHBkRkFMU0UgPT0geFNlbWFwaG9yZUdpdmUoaGFuZGxlLT50eFNlbWFwaG9yZSkpCisgICAgeworICAgICAgICAvKiBXZSBjb3VsZCBub3QgcG9zdCB0aGUgc2VtYXBob3JlLCBleGl0IHdpdGggZXJyb3IgKi8KKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qRlVOQ1RJT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IExQVUFSVF9SVE9TX1JlY3YKKyAqIERlc2NyaXB0aW9uICAgOiBSZWNlaXZlcyBjaGFycyBmb3IgdGhlIGFwcGxpY2F0aW9uCisgKgorICpFTkQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBMUFVBUlRfUlRPU19SZWNlaXZlKGxwdWFydF9ydG9zX2hhbmRsZV90ICpoYW5kbGUsIHVpbnQ4X3QgKmJ1ZmZlciwgdWludDMyX3QgbGVuZ3RoLCBzaXplX3QgKnJlY2VpdmVkKQoreworICAgIEV2ZW50Qml0c190IGV2OworICAgIHNpemVfdCBuID0gMDsKKyAgICBpbnQgcmV0dmFsID0ga1N0YXR1c19GYWlsOworICAgIHNpemVfdCBsb2NhbF9yZWNlaXZlZCA9IDA7CisKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGUtPmJhc2UpCisgICAgeworICAgICAgICAvKiBJbnZhbGlkIGhhbmRsZS4gKi8KKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfRmFpbDsKKyAgICB9CisgICAgaWYgKDAgPT0gbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKHJlY2VpdmVkICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWNlaXZlZCA9IG47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChOVUxMID09IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBOZXcgdHJhbnNmZXIgY2FuIGJlIHBlcmZvcm1lZCBvbmx5IGFmdGVyIGN1cnJlbnQgb25lIGlzIGZpbmlzaGVkICovCisgICAgaWYgKHBkRkFMU0UgPT0geFNlbWFwaG9yZVRha2UoaGFuZGxlLT5yeFNlbWFwaG9yZSwgcG9ydE1BWF9ERUxBWSkpCisgICAgeworICAgICAgICAvKiBXZSBjb3VsZCBub3QgdGFrZSB0aGUgc2VtYXBob3JlLCBleGl0IHdpdGggMCBkYXRhIHJlY2VpdmVkICovCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgfQorCisgICAgaGFuZGxlLT5yeFRyYW5zZmVyLmRhdGEgPSBidWZmZXI7CisgICAgaGFuZGxlLT5yeFRyYW5zZmVyLmRhdGFTaXplID0gKHVpbnQzMl90KWxlbmd0aDsKKworICAgIC8qIE5vbi1ibG9ja2luZyBjYWxsICovCisgICAgTFBVQVJUX1RyYW5zZmVyUmVjZWl2ZU5vbkJsb2NraW5nKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT50X3N0YXRlLCAmaGFuZGxlLT5yeFRyYW5zZmVyLCAmbik7CisKKyAgICBldiA9IHhFdmVudEdyb3VwV2FpdEJpdHMoCisgICAgICAgIGhhbmRsZS0+cnhFdmVudCwgUlRPU19MUFVBUlRfQ09NUExFVEUgfCBSVE9TX0xQVUFSVF9SSU5HX0JVRkZFUl9PVkVSUlVOIHwgUlRPU19MUFVBUlRfSEFSRFdBUkVfQlVGRkVSX09WRVJSVU4sCisgICAgICAgIHBkVFJVRSwgcGRGQUxTRSwgcG9ydE1BWF9ERUxBWSk7CisgICAgaWYgKGV2ICYgUlRPU19MUFVBUlRfSEFSRFdBUkVfQlVGRkVSX09WRVJSVU4pCisgICAgeworICAgICAgICAvKiBTdG9wIGRhdGEgdHJhbnNmZXIgdG8gYXBwbGljYXRpb24gYnVmZmVyLCByaW5nIGJ1ZmZlciBpcyBzdGlsbCBhY3RpdmUgKi8KKyAgICAgICAgTFBVQVJUX1RyYW5zZmVyQWJvcnRSZWNlaXZlKGhhbmRsZS0+YmFzZSwgaGFuZGxlLT50X3N0YXRlKTsKKyAgICAgICAgLyogUHJldmVudCBmYWxzZSBpbmRpY2F0aW9uIG9mIHN1Y2Nlc3NmdWwgdHJhbnNmZXIgaW4gbmV4dCBjYWxsIG9mIExQVUFSVF9SVE9TX1JlY2VpdmUuCisgICAgICAgICAgIFJUT1NfTFBVQVJUX0NPTVBMRVRFIGZsYWcgY291bGQgYmUgc2V0IG1lYW53aGlsZSBvdmVycnVuIGlzIGhhbmRsZWQgKi8KKyAgICAgICAgeEV2ZW50R3JvdXBDbGVhckJpdHMoaGFuZGxlLT5yeEV2ZW50LCBSVE9TX0xQVUFSVF9DT01QTEVURSk7CisgICAgICAgIHJldHZhbCA9IGtTdGF0dXNfTFBVQVJUX1J4SGFyZHdhcmVPdmVycnVuOworICAgICAgICBsb2NhbF9yZWNlaXZlZCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKGV2ICYgUlRPU19MUFVBUlRfUklOR19CVUZGRVJfT1ZFUlJVTikKKyAgICB7CisgICAgICAgIC8qIFN0b3AgZGF0YSB0cmFuc2ZlciB0byBhcHBsaWNhdGlvbiBidWZmZXIsIHJpbmcgYnVmZmVyIGlzIHN0aWxsIGFjdGl2ZSAqLworICAgICAgICBMUFVBUlRfVHJhbnNmZXJBYm9ydFJlY2VpdmUoaGFuZGxlLT5iYXNlLCBoYW5kbGUtPnRfc3RhdGUpOworICAgICAgICAvKiBQcmV2ZW50IGZhbHNlIGluZGljYXRpb24gb2Ygc3VjY2Vzc2Z1bCB0cmFuc2ZlciBpbiBuZXh0IGNhbGwgb2YgTFBVQVJUX1JUT1NfUmVjZWl2ZS4KKyAgICAgICAgICAgUlRPU19MUFVBUlRfQ09NUExFVEUgZmxhZyBjb3VsZCBiZSBzZXQgbWVhbndoaWxlIG92ZXJydW4gaXMgaGFuZGxlZCAqLworICAgICAgICB4RXZlbnRHcm91cENsZWFyQml0cyhoYW5kbGUtPnJ4RXZlbnQsIFJUT1NfTFBVQVJUX0NPTVBMRVRFKTsKKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19MUFVBUlRfUnhSaW5nQnVmZmVyT3ZlcnJ1bjsKKyAgICAgICAgbG9jYWxfcmVjZWl2ZWQgPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChldiAmIFJUT1NfTFBVQVJUX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19TdWNjZXNzOworICAgICAgICBsb2NhbF9yZWNlaXZlZCA9IGxlbmd0aDsKKyAgICB9CisKKyAgICAvKiBQcmV2ZW50IHJlcGV0aXRpdmUgTlVMTCBjaGVjayAqLworICAgIGlmIChyZWNlaXZlZCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgKnJlY2VpdmVkID0gbG9jYWxfcmVjZWl2ZWQ7CisgICAgfQorCisgICAgLyogRW5hYmxlIG5leHQgdHJhbnNmZXIuIEN1cnJlbnQgb25lIGlzIGZpbmlzaGVkICovCisgICAgaWYgKHBkRkFMU0UgPT0geFNlbWFwaG9yZUdpdmUoaGFuZGxlLT5yeFNlbWFwaG9yZSkpCisgICAgeworICAgICAgICAvKiBXZSBjb3VsZCBub3QgcG9zdCB0aGUgc2VtYXBob3JlLCBleGl0IHdpdGggZXJyb3IgKi8KKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19GYWlsOworICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2ZyZWVydG9zLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9scHVhcnRfZnJlZXJ0b3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmI0NWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHB1YXJ0X2ZyZWVydG9zLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfX0ZTTF9MUFVBUlRfUlRPU19IX18KKyNkZWZpbmUgX19GU0xfTFBVQVJUX1JUT1NfSF9fCisKKyNpbmNsdWRlICJGcmVlUlRPU0NvbmZpZy5oIgorI2luY2x1ZGUgImZzbF9scHVhcnQuaCIKKyNpbmNsdWRlIDxGcmVlUlRPUy5oPgorI2luY2x1ZGUgPGV2ZW50X2dyb3Vwcy5oPgorI2luY2x1ZGUgPHNlbXBoci5oPgorCisvKiEKKyAqIEBhZGR0b2dyb3VwIGxwdWFydF9mcmVlcnRvc19kcml2ZXIKKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIEBicmllZiBMUFVBUlQgUlRPUyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9scHVhcnRfcnRvc19jb25maWcKK3sKKyAgICBMUFVBUlRfVHlwZSAqYmFzZTsgICAgICAgICAgICAgICAgLyohPCBVQVJUIGJhc2UgYWRkcmVzcyAqLworICAgIHVpbnQzMl90IHNyY2NsazsgICAgICAgICAgICAgICAgICAvKiE8IFVBUlQgc291cmNlIGNsb2NrIGluIEh6Ki8KKyAgICB1aW50MzJfdCBiYXVkcmF0ZTsgICAgICAgICAgICAgICAgLyohPCBEZXNpcmVkIGNvbW11bmljYXRpb24gc3BlZWQgKi8KKyAgICBscHVhcnRfcGFyaXR5X21vZGVfdCBwYXJpdHk7ICAgICAgLyohPCBQYXJpdHkgc2V0dGluZyAqLworICAgIGxwdWFydF9zdG9wX2JpdF9jb3VudF90IHN0b3BiaXRzOyAvKiE8IE51bWJlciBvZiBzdG9wIGJpdHMgdG8gdXNlICovCisgICAgdWludDhfdCAqYnVmZmVyOyAgICAgICAgICAgICAgICAgIC8qITwgQnVmZmVyIGZvciBiYWNrZ3JvdW5kIHJlY2VwdGlvbiAqLworICAgIHVpbnQzMl90IGJ1ZmZlcl9zaXplOyAgICAgICAgICAgICAvKiE8IFNpemUgb2YgYnVmZmVyIGZvciBiYWNrZ3JvdW5kIHJlY2VwdGlvbiAqLworfSBscHVhcnRfcnRvc19jb25maWdfdDsKKworLyohCisqIEBjb25kIFJUT1NfUFJJVkFURQorKiBAbmFtZSBMUFVBUlQgZXZlbnQgZmxhZ3MKKyoKKyogVGhpcyBhcmUgb25seSB2YWxpZCBzdGF0ZXMgZm9yIHR4RXZlbnQgYW5kIHJ4RXZlbnQgKGxwdWFydF9ydG9zX2hhbmRsZV90KS4KKyovCisvKkB7Ki8KKy8qISBAYnJpZWYgRXZlbnQgZmxhZyAtIHRyYW5zZmVyIGNvbXBsZXRlLiAqLworI2RlZmluZSBSVE9TX0xQVUFSVF9DT01QTEVURSAweDEKKy8qISBAYnJpZWYgRXZlbnQgZmxhZyAtIHJpbmcgYnVmZmVyIG92ZXJydW4uICovCisjZGVmaW5lIFJUT1NfTFBVQVJUX1JJTkdfQlVGRkVSX09WRVJSVU4gMHgyCisvKiEgQGJyaWVmIEV2ZW50IGZsYWcgLSBoYXJkd2FyZSBidWZmZXIgb3ZlcnJ1bi4gKi8KKyNkZWZpbmUgUlRPU19MUFVBUlRfSEFSRFdBUkVfQlVGRkVSX09WRVJSVU4gMHg0CisvKkB9Ki8KKworLyohIEBicmllZiBMUFVBUlQgRnJlZVJUT1MgdHJhbnNmZXIgc3RydWN0dXJlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX2xwdWFydF9ydG9zX2hhbmRsZQoreworICAgIExQVUFSVF9UeXBlICpiYXNlOyAgICAgICAgICAgICAvKiE8IFVBUlQgYmFzZSBhZGRyZXNzICovCisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgdHhUcmFuc2ZlcjsgIC8qITwgVFggdHJhbnNmZXIgc3RydWN0dXJlICovCisgICAgbHB1YXJ0X3RyYW5zZmVyX3QgcnhUcmFuc2ZlcjsgIC8qITwgUlggdHJhbnNmZXIgc3RydWN0dXJlICovCisgICAgU2VtYXBob3JlSGFuZGxlX3QgcnhTZW1hcGhvcmU7IC8qITwgUlggc2VtYXBob3JlIGZvciByZXNvdXJjZSBzaGFyaW5nICovCisgICAgU2VtYXBob3JlSGFuZGxlX3QgdHhTZW1hcGhvcmU7IC8qITwgVFggc2VtYXBob3JlIGZvciByZXNvdXJjZSBzaGFyaW5nICovCisgICAgRXZlbnRHcm91cEhhbmRsZV90IHJ4RXZlbnQ7ICAgIC8qITwgUlggY29tcGxldGlvbiBldmVudCAqLworICAgIEV2ZW50R3JvdXBIYW5kbGVfdCB0eEV2ZW50OyAgICAvKiE8IFRYIGNvbXBsZXRpb24gZXZlbnQgKi8KKyAgICB2b2lkICp0X3N0YXRlOyAgICAgICAgICAgICAgICAgLyohPCBUcmFuc2FjdGlvbmFsIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGRyaXZlciAqLworI2lmIChjb25maWdTVVBQT1JUX1NUQVRJQ19BTExPQ0FUSU9OID09IDEpCisgICAgU3RhdGljU2VtYXBob3JlX3QgdHhTZW1hcGhvcmVCdWZmZXI7IC8qITwgU3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0eFNlbWFwaG9yZSAqLworICAgIFN0YXRpY1NlbWFwaG9yZV90IHJ4U2VtYXBob3JlQnVmZmVyOyAvKiE8IFN0YXRpY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBmb3IgcnhTZW1hcGhvcmUgKi8KKyAgICBTdGF0aWNFdmVudEdyb3VwX3QgdHhFdmVudEJ1ZmZlcjsgICAgLyohPCBTdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yIHR4RXZlbnQgKi8KKyAgICBTdGF0aWNFdmVudEdyb3VwX3QgcnhFdmVudEJ1ZmZlcjsgICAgLyohPCBTdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yIHJ4RXZlbnQgKi8KKyNlbmRpZgorfSBscHVhcnRfcnRvc19oYW5kbGVfdDsKKy8qISBcZW5kY29uZCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgTFBVQVJUIFJUT1MgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIGFuIExQVUFSVCBpbnN0YW5jZSBmb3Igb3BlcmF0aW9uIGluIFJUT1MuCisgKgorICogQHBhcmFtIGhhbmRsZSBUaGUgUlRPUyBMUFVBUlQgaGFuZGxlLCB0aGUgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgZm9yIFJUT1MgY29udGV4dC4KKyAqIEBwYXJhbSB0X2hhbmRsZSBUaGUgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgdG8gc3RvcmUgdGhlIHRyYW5zYWN0aW9uYWwgbGF5ZXIgaW50ZXJuYWwgc3RhdGUuCisgKiBAcGFyYW0gY2ZnIFRoZSBwb2ludGVyIHRvIHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIHRvIGNvbmZpZ3VyZSB0aGUgTFBVQVJUIGFmdGVyIGluaXRpYWxpemF0aW9uLgorICogQHJldHVybiAwIHN1Y2NlZWQsIG90aGVycyBmYWlsZWQKKyAqLworaW50IExQVUFSVF9SVE9TX0luaXQobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgbHB1YXJ0X2hhbmRsZV90ICp0X2hhbmRsZSwgY29uc3QgbHB1YXJ0X3J0b3NfY29uZmlnX3QgKmNmZyk7CisKKy8qIQorICogQGJyaWVmIERlaW5pdGlhbGl6ZXMgYW4gTFBVQVJUIGluc3RhbmNlIGZvciBvcGVyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBkZWluaXRpYWxpemVzIHRoZSBMUFVBUlQgbW9kdWxlLCBzZXRzIGFsbCByZWdpc3RlciB2YWx1ZSB0byB0aGUgcmVzZXQgdmFsdWUsCisgKiBhbmQgcmVsZWFzZXMgdGhlIHJlc291cmNlcy4KKyAqCisgKiBAcGFyYW0gaGFuZGxlIFRoZSBSVE9TIExQVUFSVCBoYW5kbGUuCisgKi8KK2ludCBMUFVBUlRfUlRPU19EZWluaXQobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorICogQG5hbWUgTFBVQVJUIHRyYW5zYWN0aW9uYWwgT3BlcmF0aW9uCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFNlbmRzIGRhdGEgaW4gdGhlIGJhY2tncm91bmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBkYXRhLiBJdCBpcyBhbiBzeW5jaHJvbm91cyBBUEkuCisgKiBJZiB0aGUgaGFyZHdhcmUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB0YXNrIGlzIGluIHRoZSBibG9ja2VkIHN0YXRlLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgTFBVQVJUIGhhbmRsZS4KKyAqIEBwYXJhbSBidWZmZXIgVGhlIHBvaW50ZXIgdG8gYnVmZmVyIHRvIHNlbmQuCisgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZC4KKyAqLworaW50IExQVUFSVF9SVE9TX1NlbmQobHB1YXJ0X3J0b3NfaGFuZGxlX3QgKmhhbmRsZSwgY29uc3QgdWludDhfdCAqYnVmZmVyLCB1aW50MzJfdCBsZW5ndGgpOworCisvKiEKKyAqIEBicmllZiBSZWNlaXZlcyBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgZGF0YSBmcm9tIExQVUFSVC4gSXQgaXMgYW4gc3luY2hyb25vdXMgQVBJLiBJZiBhbnkgZGF0YSBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUKKyAqIGl0IGlzIHJldHVybmVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgVGhlIFJUT1MgTFBVQVJUIGhhbmRsZS4KKyAqIEBwYXJhbSBidWZmZXIgVGhlIHBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIHRvIHdyaXRlIHJlY2VpdmVkIGRhdGEuCisgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVjZWl2ZS4KKyAqIEBwYXJhbSByZWNlaXZlZCBUaGUgcG9pbnRlciB0byBhIHZhcmlhYmxlIG9mIHNpemVfdCB3aGVyZSB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEgaXMgZmlsbGVkLgorICovCitpbnQgTFBVQVJUX1JUT1NfUmVjZWl2ZShscHVhcnRfcnRvc19oYW5kbGVfdCAqaGFuZGxlLCB1aW50OF90ICpidWZmZXIsIHVpbnQzMl90IGxlbmd0aCwgc2l6ZV90ICpyZWNlaXZlZCk7CisKKy8qIEB9ICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfX0ZTTF9MUFVBUlRfUlRPU19IX18gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Yy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2N2E3NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Yy5jCkBAIC0wLDAgKzEsNDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9sdGMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIEZ1bGwgd29yZCByZXByZXNlbnRpbmcgdGhlIGFjdHVhbCBiaXQgdmFsdWVzIGZvciB0aGUgTFRDIG1vZGUgcmVnaXN0ZXIuICovCit0eXBlZGVmIHVpbnQzMl90IGx0Y19tb2RlX3Q7CisKKyNkZWZpbmUgTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTiAoMHhmZjB1KQorI2RlZmluZSBMVENfTURfQUxHX0FFUyAoMHgxMFUpICAgICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FMRzogQUVTICovCisjZGVmaW5lIExUQ19NRF9BTEdfREVTICgweDIwVSkgICAgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiBERVMgKi8KKyNkZWZpbmUgTFRDX01EX0FMR19UUklQTEVfREVTICgweDIxVSkgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BTEc6IDNERVMgKi8KKyNkZWZpbmUgTFRDX01EX0FMR19TSEExICgweDQxVSkgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BTEc6IFNIQS0xICovCisjZGVmaW5lIExUQ19NRF9BTEdfU0hBMjI0ICgweDQyVSkgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiBTSEEtMjI0ICovCisjZGVmaW5lIExUQ19NRF9BTEdfU0hBMjU2ICgweDQzVSkgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiBTSEEtMjU2ICovCisjZGVmaW5lIExUQ19NRFBLX0FMR19QS0hBICgweDgwVSkgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURQS19BTEc6IFBLSEEgKi8KKyNkZWZpbmUgTFRDX01EX0VOQ19ERUNSWVBUICgwVSkgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9FTkM6IERlY3J5cHQuICovCisjZGVmaW5lIExUQ19NRF9FTkNfRU5DUllQVCAoMHgxVSkgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfRU5DOiBFbmNyeXB0LiAqLworI2RlZmluZSBMVENfTURfQVNfVVBEQVRFICgwVSkgICAgICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FTOiBVcGRhdGUgKi8KKyNkZWZpbmUgTFRDX01EX0FTX0lOSVRJQUxJWkUgKDB4MVUpICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogSW5pdGlhbGl6ZSAqLworI2RlZmluZSBMVENfTURfQVNfRklOQUxJWkUgKDB4MlUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FTOiBGaW5hbGl6ZSAqLworI2RlZmluZSBMVENfTURfQVNfSU5JVF9GSU5BTCAoMHgzVSkgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FTOiBJbml0aWFsaXplL0ZpbmFsaXplICovCisKKyNkZWZpbmUgTFRDX0FFU19HQ01fVFlQRV9BQUQgNTUKKyNkZWZpbmUgTFRDX0FFU19HQ01fVFlQRV9JViAwCisKKyNkZWZpbmUgTFRDX0NDTV9UQUdfSURYIDggLyohIEZvciBDQ00gZW5jcnlwdGlvbiwgdGhlIGVuY3J5cHRlZCBmaW5hbCBNQUMgaXMgd3JpdHRlbiB0byB0aGUgY29udGV4dCB3b3JkIDgtMTEgKi8KKyNkZWZpbmUgTFRDX0dDTV9UQUdfSURYIDAgLyohIEZvciBHQ00gZW5jcnlwdGlvbiwgdGhlIGVuY3J5cHRlZCBmaW5hbCBNQUMgaXMgd3JpdHRlbiB0byB0aGUgY29udGV4dCB3b3JkIDAtMyAqLworCitlbnVtIF9sdGNfbWRfZGtfYml0X3NoaWZ0Cit7CisgICAga0xUQ19Nb2RlUmVnQml0U2hpZnRESyA9IDEyVSwKK307CisKK3R5cGVkZWYgZW51bSBfbHRjX2FsZ29yaXRobQoreworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEKKyAgICBrTFRDX0FsZ29yaXRobVBLSEEgPSBMVENfTURQS19BTEdfUEtIQSA8PCBMVENfTURfQUxHX1NISUZULAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAqLworICAgIGtMVENfQWxnb3JpdGhtQUVTID0gTFRDX01EX0FMR19BRVMgPDwgTFRDX01EX0FMR19TSElGVCwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUworICAgIGtMVENfQWxnb3JpdGhtREVTID0gTFRDX01EX0FMR19ERVMgPDwgTFRDX01EX0FMR19TSElGVCwKKyAgICBrTFRDX0FsZ29yaXRobTNERVMgPSBMVENfTURfQUxHX1RSSVBMRV9ERVMgPDwgTFRDX01EX0FMR19TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAga0xUQ19BbGdvcml0aG1TSEExID0gTFRDX01EX0FMR19TSEExIDw8IExUQ19NRF9BTEdfU0hJRlQsCisgICAga0xUQ19BbGdvcml0aG1TSEEyMjQgPSBMVENfTURfQUxHX1NIQTIyNCA8PCBMVENfTURfQUxHX1NISUZULAorICAgIGtMVENfQWxnb3JpdGhtU0hBMjU2ID0gTFRDX01EX0FMR19TSEEyNTYgPDwgTFRDX01EX0FMR19TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworfSBsdGNfYWxnb3JpdGhtX3Q7CisKK3R5cGVkZWYgZW51bSBfbHRjX21vZGVfc3ltbWV0cmljX2FsZworeworICAgIGtMVENfTW9kZUNUUiA9IDB4MDBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlQ0JDID0gMHgxMFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVFQ0IgPSAweDIwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUNGQiA9IDB4MzBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlT0ZCID0gMHg0MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVDTUFDID0gMHg2MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVYQ0JDTUFDID0gMHg3MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVDQ00gPSAweDgwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUdDTSA9IDB4OTBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCit9IGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdDsKKwordHlwZWRlZiBlbnVtIF9sdGNfbW9kZV9lbmNyeXB0Cit7CisgICAga0xUQ19Nb2RlRGVjcnlwdCA9IExUQ19NRF9FTkNfREVDUllQVCA8PCBMVENfTURfRU5DX1NISUZULAorICAgIGtMVENfTW9kZUVuY3J5cHQgPSBMVENfTURfRU5DX0VOQ1JZUFQgPDwgTFRDX01EX0VOQ19TSElGVCwKK30gbHRjX21vZGVfZW5jcnlwdF90OworCit0eXBlZGVmIGVudW0gX2x0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZQoreworICAgIGtMVENfTW9kZVVwZGF0ZSA9IExUQ19NRF9BU19VUERBVEUgPDwgTFRDX01EX0FTX1NISUZULAorICAgIGtMVENfTW9kZUluaXQgPSBMVENfTURfQVNfSU5JVElBTElaRSA8PCBMVENfTURfQVNfU0hJRlQsCisgICAga0xUQ19Nb2RlRmluYWxpemUgPSBMVENfTURfQVNfRklOQUxJWkUgPDwgTFRDX01EX0FTX1NISUZULAorICAgIGtMVENfTW9kZUluaXRGaW5hbCA9IExUQ19NRF9BU19JTklUX0ZJTkFMIDw8IExUQ19NRF9BU19TSElGVAorfSBsdGNfbW9kZV9hbGdvcml0aG1fc3RhdGVfdDsKKworLyohIEBicmllZiBMVEMgc3RhdHVzIGZsYWdzICovCitlbnVtIF9sdGNfc3RhdHVzX2ZsYWcKK3sKKyAgICBrTFRDX1N0YXR1c0Flc0J1c3kgPSAxVSA8PCBMVENfU1RBX0FCX1NISUZULAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTCisgICAga0xUQ19TdGF0dXNEZXNCdXN5ID0gMVUgPDwgTFRDX1NUQV9EQl9TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEKKyAgICBrTFRDX1N0YXR1c1BraGFCdXN5ID0gMVUgPDwgTFRDX1NUQV9QQl9TSElGVCwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgIGtMVENfU3RhdHVzTWRoYUJ1c3kgPSAxVSA8PCBMVENfU1RBX01CX1NISUZULAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisgICAga0xUQ19TdGF0dXNEb25lSXNyID0gMVUgPDwgTFRDX1NUQV9ESV9TSElGVCwKKyAgICBrTFRDX1N0YXR1c0Vycm9ySXNyID0gMVUgPDwgTFRDX1NUQV9FSV9TSElGVCwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAga0xUQ19TdGF0dXNQdWJsaWNLZXlQcmltZSA9IDFVIDw8IExUQ19TVEFfUEtQX1NISUZULAorICAgIGtMVENfU3RhdHVzUHVibGljS2V5T3BPbmUgPSAxVSA8PCBMVENfU1RBX1BLT19TSElGVCwKKyAgICBrTFRDX1N0YXR1c1B1YmxpY0tleU9wWmVybyA9IDFVIDw8IExUQ19TVEFfUEtaX1NISUZULAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAqLworICAgIGtMVENfU3RhdHVzQWxsID0gTFRDX1NUQV9BQl9NQVNLIHwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUworICAgICAgICAgICAgICAgICAgICAgTFRDX1NUQV9EQl9NQVNLIHwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0RFUyAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgICAgICAgICAgICAgICBMVENfU1RBX01CX01BU0sgfAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisgICAgICAgICAgICAgICAgICAgICBMVENfU1RBX0RJX01BU0sgfCBMVENfU1RBX0VJX01BU0sKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBMVENfU1RBX1BCX01BU0sgfCBMVENfU1RBX1BLUF9NQVNLIHwgTFRDX1NUQV9QS09fTUFTSyB8IExUQ19TVEFfUEtaX01BU0sKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KK307CisKKy8qISBAYnJpZWYgTFRDIGNsZWFyIHJlZ2lzdGVyICovCit0eXBlZGVmIGVudW0gX2x0Y19jbGVhcl93cml0dGVuCit7CisgICAga0xUQ19DbGVhck1vZGUgPSAxVSA8PCBMVENfQ1dfQ01fU0hJRlQsCisgICAga0xUQ19DbGVhckRhdGFTaXplID0gMVUgPDwgTFRDX0NXX0NEU19TSElGVCwKKyAgICBrTFRDX0NsZWFySWN2U2l6ZSA9IDFVIDw8IExUQ19DV19DSUNWX1NISUZULAorICAgIGtMVENfQ2xlYXJDb250ZXh0ID0gMVUgPDwgTFRDX0NXX0NDUl9TSElGVCwKKyAgICBrTFRDX0NsZWFyS2V5ID0gMVUgPDwgTFRDX0NXX0NLUl9TSElGVCwKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisgICAga0xUQ19DbGVhclBraGFTaXplQSA9IDFVIDw8IExUQ19DV19DUEtBX1NISUZULAorICAgIGtMVENfQ2xlYXJQa2hhU2l6ZUIgPSAxVSA8PCBMVENfQ1dfQ1BLQl9TSElGVCwKKyAgICBrTFRDX0NsZWFyUGtoYVNpemVOID0gMVUgPDwgTFRDX0NXX0NQS05fU0hJRlQsCisgICAga0xUQ19DbGVhclBraGFTaXplRSA9IDFVIDw8IExUQ19DV19DUEtFX1NISUZULAorICAgIGtMVENfQ2xlYXJBbGxTaXplID0gKGludClrTFRDX0NsZWFyUGtoYVNpemVBIHwga0xUQ19DbGVhclBraGFTaXplQiB8IGtMVENfQ2xlYXJQa2hhU2l6ZU4gfCBrTFRDX0NsZWFyUGtoYVNpemVFLAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAqLworICAgIGtMVENfQ2xlYXJPdXRwdXRGaWZvID0gMVUgPDwgTFRDX0NXX0NPRl9TSElGVCwKKyAgICBrTFRDX0NsZWFySW5wdXRGaWZvID0gKGludCkoMVUgPDwgTFRDX0NXX0NJRl9TSElGVCksCisgICAga0xUQ19DbGVhckFsbCA9IChpbnQpKExUQ19DV19DTV9NQVNLIHwgTFRDX0NXX0NEU19NQVNLIHwgTFRDX0NXX0NJQ1ZfTUFTSyB8IExUQ19DV19DQ1JfTUFTSyB8IExUQ19DV19DS1JfTUFTSyB8CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQ1dfQ1BLQV9NQVNLIHwgTFRDX0NXX0NQS0JfTUFTSyB8IExUQ19DV19DUEtOX01BU0sgfCBMVENfQ1dfQ1BLRV9NQVNLIHwKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0NXX0NPRl9NQVNLIHwgTFRDX0NXX0NJRl9NQVNLKQorfSBsdGNfY2xlYXJfd3JpdHRlbl90OworCitlbnVtIF9sdGNfY3RybF9zd2FwCit7CisgICAga0xUQ19DdHJsU3dhcEFsbCA9CisgICAgICAgIExUQ19DVExfSUZTX01BU0sgfCBMVENfQ1RMX09GU19NQVNLIHwgTFRDX0NUTF9LSVNfTUFTSyB8IExUQ19DVExfS09TX01BU0sgfCBMVENfQ1RMX0NJU19NQVNLIHwgTFRDX0NUTF9DT1NfTUFTSywKK307CisKKy8qISBAYnJpZWYgVHlwZSB1c2VkIGluIEdDTSBhbmQgQ0NNIG1vZGVzLgorCisgICAgQ29udGVudCBvZiBhIGJsb2NrIGlzIGVzdGFibGlzaGVkIHZpYSBpbmRpdmlkdWFsIGJ5dGVzIGFuZCBtb3ZlZCB0byBMVEMKKyAgIElGSUZPIGJ5IG1vdmluZyAzMi1iaXQgd29yZHMuCisqLwordHlwZWRlZiB1bmlvbiBfbHRjX3hjbV9ibG9ja190Cit7CisgICAgdWludDMyX3Qgd1s0XTsgLyohPCBMVEMgY29udGV4dCByZWdpc3RlciBpcyAxNiBieXRlcyB3cml0dGVuIGFzIGZvdXIgMzItYml0IHdvcmRzICovCisgICAgdWludDhfdCBiWzE2XTsgLyohPCAxNiBvY3RldHMgYmxvY2sgZm9yIENDTSBCMCBhbmQgQ1RSMCBhbmQgZm9yIEdDTSAqLworfSBsdGNfeGNtX2Jsb2NrX3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCisKKy8qISBAYnJpZWYgUEtIQSBmdW5jdGlvbnMgLSBhcml0aG1ldGljLCBjb3B5L2NsZWFyIG1lbW9yeS4gKi8KK3R5cGVkZWYgZW51bSBfbHRjX3BraGFfZnVuY190Cit7CisgICAga0xUQ19QS0hBX0NsZWFyTWVtID0gMVUsCisgICAga0xUQ19QS0hBX0FyaXRoTW9kQWRkID0gMlUsICAgICAgICAgLyohPCAoQSArIEIpIG1vZCBOICovCisgICAga0xUQ19QS0hBX0FyaXRoTW9kU3ViMSA9IDNVLCAgICAgICAgLyohPCAoQSAtIEIpIG1vZCBOICovCisgICAga0xUQ19QS0hBX0FyaXRoTW9kU3ViMiA9IDRVLCAgICAgICAgLyohPCAoQiAtIEEpIG1vZCBOICovCisgICAga0xUQ19QS0hBX0FyaXRoTW9kTXVsID0gNVUsICAgICAgICAgLyohPCAoQSB4IEIpIG1vZCBOICovCisgICAga0xUQ19QS0hBX0FyaXRoTW9kRXhwID0gNlUsICAgICAgICAgLyohPCAoQV5FKSBtb2QgTiAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZFJlZCA9IDdVLCAgICAgICAgIC8qITwgKEEpIG1vZCBOICovCisgICAga0xUQ19QS0hBX0FyaXRoTW9kSW52ID0gOFUsICAgICAgICAgLyohPCAoQV4tMSkgbW9kIE4gKi8KKyAgICBrTFRDX1BLSEFfQXJpdGhFY2NBZGQgPSA5VSwgICAgICAgICAvKiE8IChQMSArIFAyKSAqLworICAgIGtMVENfUEtIQV9Bcml0aEVjY0RvdWJsZSA9IDEwVSwgICAgIC8qITwgKFAyICsgUDIpICovCisgICAga0xUQ19QS0hBX0FyaXRoRWNjTXVsID0gMTFVLCAgICAgICAgLyohPCAoRSB4IFAxKSAqLworICAgIGtMVENfUEtIQV9Bcml0aE1vZFIyID0gMTJVLCAgICAgICAgIC8qITwgKFJeMiBtb2QgTikgKi8KKyAgICBrTFRDX1BLSEFfQXJpdGhHY2QgPSAxNFUsICAgICAgICAgICAvKiE8IEdDRCAoQSwgTikgKi8KKyAgICBrTFRDX1BLSEFfQXJpdGhQcmltYWxpdHlUZXN0ID0gMTVVLCAvKiE8IE1pbGxlci1SYWJpbiAqLworICAgIGtMVENfUEtIQV9Db3B5TWVtU2l6ZU4gPSAxNlUsCisgICAga0xUQ19QS0hBX0NvcHlNZW1TaXplU3JjID0gMTdVLAorfSBsdGNfcGtoYV9mdW5jX3Q7CisKKy8qISBAYnJpZWYgUmVnaXN0ZXIgYXJlYXMgZm9yIFBLSEEgY2xlYXIgbWVtb3J5IG9wZXJhdGlvbnMuICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX3JlZ19hcmVhCit7CisgICAga0xUQ19QS0hBX1JlZ0EgPSA4VSwKKyAgICBrTFRDX1BLSEFfUmVnQiA9IDRVLAorICAgIGtMVENfUEtIQV9SZWdFID0gMlUsCisgICAga0xUQ19QS0hBX1JlZ04gPSAxVSwKKyAgICBrTFRDX1BLSEFfUmVnQWxsID0ga0xUQ19QS0hBX1JlZ0EgfCBrTFRDX1BLSEFfUmVnQiB8IGtMVENfUEtIQV9SZWdFIHwga0xUQ19QS0hBX1JlZ04sCit9IGx0Y19wa2hhX3JlZ19hcmVhX3Q7CisKKy8qISBAYnJpZWYgUXVhZHJhbnQgYXJlYXMgZm9yIDIwNDgtYml0IHJlZ2lzdGVycyBmb3IgUEtIQSBjb3B5IG1lbW9yeQorICogb3BlcmF0aW9ucy4gKi8KK3R5cGVkZWYgZW51bSBfbHRjX3BraGFfcXVhZF9hcmVhX3QKK3sKKyAgICBrTFRDX1BLSEFfUXVhZDAgPSAwVSwKKyAgICBrTFRDX1BLSEFfUXVhZDEgPSAxVSwKKyAgICBrTFRDX1BLSEFfUXVhZDIgPSAyVSwKKyAgICBrTFRDX1BLSEFfUXVhZDMgPSAzVSwKK30gbHRjX3BraGFfcXVhZF9hcmVhX3Q7CisKKy8qISBAYnJpZWYgVXNlci1zdXBwbGllZCAoUl4yIG1vZCBOKSBpbnB1dCBvciBMVEMgc2hvdWxkIGNhbGN1bGF0ZS4gKi8KK3R5cGVkZWYgZW51bSBfbHRjX3BraGFfcjJfdAoreworICAgIGtMVENfUEtIQV9DYWxjUjIgPSAwVSwgLyohPCBDYWxjdWxhdGUgKFJeMiBtb2QgTikgKi8KKyAgICBrTFRDX1BLSEFfSW5wdXRSMiA9IDFVIC8qITwgKFJeMiBtb2QgTikgc3VwcGxpZWQgYXMgaW5wdXQgKi8KK30gbHRjX3BraGFfcjJfdDsKKworLyohIEBicmllZiBMVEMgUEtIQSBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBfbHRjX3BraGFfbW9kZV9wYXJhbXNfdAoreworICAgIGx0Y19wa2hhX2Z1bmNfdCBmdW5jOworICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZTsKKyAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250Rm9ybUluOworICAgIGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90IG1vbnRGb3JtT3V0OworICAgIGx0Y19wa2hhX3JlZ19hcmVhX3Qgc3JjUmVnOworICAgIGx0Y19wa2hhX3F1YWRfYXJlYV90IHNyY1F1YWQ7CisgICAgbHRjX3BraGFfcmVnX2FyZWFfdCBkc3RSZWc7CisgICAgbHRjX3BraGFfcXVhZF9hcmVhX3QgZHN0UXVhZDsKKyAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWU7CisgICAgbHRjX3BraGFfcjJfdCByMm1vZG47Cit9IGx0Y19wa2hhX21vZGVfcGFyYW1zX3Q7CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQQorc3RhdGljIHN0YXR1c190IGx0Y19wa2hhX2NsZWFyX3JlZ2FibmUoTFRDX1R5cGUgKmJhc2UsIGJvb2wgQSwgYm9vbCBCLCBib29sIE4sIGJvb2wgRSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTFRDIENvbW1vbiBjb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGJyaWVmIFRlc3RzIHRoZSBjb3JyZWN0IGtleSBzaXplLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGVzdHMgdGhlIGNvcnJlY3Qga2V5IHNpemUuCisgKiBAcGFyYW0ga2V5U2l6ZSBJbnB1dCBrZXkgbGVuZ3RoIGluIGJ5dGVzLgorICogQHJldHVybiBUcnVlIGlmIHRoZSBrZXkgbGVuZ3RoIGlzIHN1cHBvcnRlZCwgZmFsc2UgaWYgbm90LgorICovCitib29sIGx0Y19jaGVja19rZXlfc2l6ZShjb25zdCB1aW50MzJfdCBrZXlTaXplKQoreworICAgIHJldHVybiAoKGtleVNpemUgPT0gMTZ1KQorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19BRVMxOTIpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfQUVTMTkyCisgICAgICAgICAgICB8fCAoKGtleVNpemUgPT0gMjR1KSkKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0FFUzE5MiAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19BRVMyNTYpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfQUVTMjU2CisgICAgICAgICAgICB8fCAoKGtleVNpemUgPT0gMzJ1KSkKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0FFUzI1NiAqLworICAgICAgICAgICAgICAgICk7Cit9CisKKy8qISBAYnJpZWYgTFRDIGRyaXZlciB3YWl0IG1lY2hhbmlzbS4gKi8KK3N0YXR1c190IGx0Y193YWl0KExUQ19UeXBlICpiYXNlKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICBib29sIGRvbmUgPSBmYWxzZTsKKworICAgIC8qIFdhaXQgZm9yICdkb25lJyBvciAnZXJyb3InIGZsYWcuICovCisgICAgd2hpbGUgKCghZXJyb3IpICYmICghZG9uZSkpCisgICAgeworICAgICAgICB1aW50MzJfdCB0ZW1wMzIgPSBiYXNlLT5TVEE7CisgICAgICAgIGVycm9yID0gdGVtcDMyICYgTFRDX1NUQV9FSV9NQVNLOworICAgICAgICBkb25lID0gdGVtcDMyICYgTFRDX1NUQV9ESV9NQVNLOworICAgIH0KKworICAgIGlmIChlcnJvcikKKyAgICB7CisgICAgICAgIGJhc2UtPkNPTSA9IExUQ19DT01fQUxMX01BU0s7IC8qIFJlc2V0IGFsbCBlbmdpbmUgdG8gY2xlYXIgdGhlIGVycm9yIGZsYWcgKi8KKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19GYWlsOworICAgIH0KKyAgICBlbHNlIC8qICdkb25lJyAqLworICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgICAgIGJhc2UtPkNXID0ga0xUQ19DbGVhckRhdGFTaXplOworICAgICAgICAvKiBDbGVhciAnZG9uZScgaW50ZXJydXB0IHN0YXR1cy4gIFRoaXMgYWxzbyBjbGVhcnMgdGhlIG1vZGUgcmVnaXN0ZXIuICovCisgICAgICAgIGJhc2UtPlNUQSA9IGtMVENfU3RhdHVzRG9uZUlzcjsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIExUQyBtb2R1bGUuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNsZWFyIGFsbCBzZW5zaXRpdmUgZGF0YSBmcm9tIHRoZUxUQyBtb2R1bGUsIHN1Y2ggYXMgcHJpdmF0ZSBrZXlzLiBJdCBpcyBjYWxsZWQKKyAqIGludGVybmFsbHkgYnkgdGhlIExUQyBkcml2ZXIgaW4gY2FzZSBvZiBhbiBlcnJvciBvciBvcGVyYXRpb24gY29tcGxldGUuCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwa2hhIEluY2x1ZGUgTFRDIFBLSEEgcmVnaXN0ZXIgY2xlYXIuIElmIHRoZXJlIGlzIG5vIFBLSEEsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgorICovCit2b2lkIGx0Y19jbGVhcl9hbGwoTFRDX1R5cGUgKmJhc2UsIGJvb2wgYWRkUEtIQSkKK3sKKyAgICBiYXNlLT5DVyA9ICh1aW50MzJfdClrTFRDX0NsZWFyQWxsOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1BLSEEKKyAgICBpZiAoYWRkUEtIQSkKKyAgICB7CisgICAgICAgIGx0Y19wa2hhX2NsZWFyX3JlZ2FibmUoYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSAqLworfQorCit2b2lkIGx0Y19tZW1jcHkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQoreworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisgICAgcmVnaXN0ZXIgdWludDhfdCAqdG8gPSAodWludDhfdCAqKWRzdDsKKyAgICByZWdpc3RlciBjb25zdCB1aW50OF90ICpmcm9tID0gKGNvbnN0IHVpbnQ4X3QgKilzcmM7CisjZWxzZQorICAgIHJlZ2lzdGVyIHVpbnQ4X3QgKnRvID0gZHN0OworICAgIHJlZ2lzdGVyIGNvbnN0IHVpbnQ4X3QgKmZyb20gPSBzcmM7CisjZW5kaWYKKyAgICB3aGlsZSAoc2l6ZSkKKyAgICB7CisgICAgICAgICp0byA9ICpmcm9tOworICAgICAgICBzaXplLS07CisgICAgICAgIHRvKys7CisgICAgICAgIGZyb20rKzsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIFJlYWRzIGFuIHVuYWxpZ25lZCB3b3JkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIDMyLWJpdCB3b3JkIGZyb20gYW4gaW5wdXQgYXJyYXkgb2YgZm91ciBieXRlcy4KKyAqCisgKiBAcGFyYW0gc3JjIElucHV0IGFycmF5IG9mIGZvdXIgYnl0ZXMuIFRoZSBhcnJheSBjYW4gc3RhcnQgYXQgYW55IGFkZHJlc3MgaW4gbWVtb3J5LgorICogQHJldHVybiAzMi1iaXQgdW5zaWduZWQgaW50IGNyZWF0ZWQgZnJvbSB0aGUgaW5wdXQgYnl0ZSBhcnJheS4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBsdGNfZ2V0X3dvcmRfZnJvbV91bmFsaWduZWQoY29uc3QgdWludDhfdCAqc3JjQWRkcikKK3sKKyNpZiAoIShkZWZpbmVkKF9fQ09SVEVYX00pKSB8fCAoZGVmaW5lZChfX0NPUlRFWF9NKSAmJiAoX19DT1JURVhfTSA9PSAwKSkpCisgICAgcmVnaXN0ZXIgY29uc3QgdWludDhfdCAqc3JjID0gc3JjQWRkcjsKKyAgICAvKiBDb3J0ZXggTTAgZG9lcyBub3Qgc3VwcG9ydCBtaXNhbGlnbmVkIGxvYWRzICovCisgICAgaWYgKCh1aW50MzJfdClzcmMgJiAweDN1KQorICAgIHsKKyAgICAgICAgdW5pb24gX2FsaWduX2J5dGVzX3QKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3Qgd29yZDsKKyAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZVtzaXplb2YodWludDMyX3QpXTsKKyAgICAgICAgfSBteV9ieXRlczsKKworICAgICAgICBteV9ieXRlcy5ieXRlWzBdID0gKnNyYzsKKyAgICAgICAgbXlfYnl0ZXMuYnl0ZVsxXSA9ICooc3JjICsgMSk7CisgICAgICAgIG15X2J5dGVzLmJ5dGVbMl0gPSAqKHNyYyArIDIpOworICAgICAgICBteV9ieXRlcy5ieXRlWzNdID0gKihzcmMgKyAzKTsKKyAgICAgICAgcmV0dXJuIG15X2J5dGVzLndvcmQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIGFkZHIgYWxpZ25lZCB0byAwLW1vZHVsby00IHNvIGl0IGlzIHNhZmUgdG8gdHlwZSBjYXN0ICovCisgICAgICAgIHJldHVybiAqKChjb25zdCB1aW50MzJfdCAqKXNyYyk7CisgICAgfQorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkKKyAgICAvKiAtTzMgb3B0aW1pemF0aW9uIGluIEtlaWwgNS4xNSBhbmQgNS4xNmEgdXNlcyBMRE0gaW5zdHJ1Y3Rpb24gaGVyZSAoTERNIHI0ISwge3IwfSkKKyAgICAgKiAgICB3aGljaCBpcyB3cm9uZywgYmVjYXVzZSBzcmNBZGRyIG1pZ2h0IGJlIHVuYWxpZ25lZC4KKyAgICAgKiAgICBMRE0gb24gdW5hbGlnbmVkIGFkZHJlc3MgY2F1c2VzIGhhcmQtZmF1bHQuIGluIGNvbnRyYXJ5LAorICAgICAqICAgIExEUiBzdXBwb3J0cyB1bmFsaWduZWQgYWRkcmVzcyBvbiBDb3J0ZXggTTQgKi8KKyAgICByZWdpc3RlciB1aW50MzJfdCByZXRWYWw7CisgICAgX19hc20KKyAgICB7CisgICAgICAgIExEUiByZXRWYWwsIFtzcmNBZGRyXQorICAgIH0KKyAgICByZXR1cm4gcmV0VmFsOworI2Vsc2UKKyAgICByZXR1cm4gKigoY29uc3QgdWludDMyX3QgKilzcmNBZGRyKTsKKyNlbmRpZgorfQorCisvKiEKKyAqIEBicmllZiBDb252ZXJ0cyBhIDMyLWJpdCB3b3JkIGludG8gYSBieXRlIGFycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBvdXRwdXQgYXJyYXkgb2YgZm91ciBieXRlcyBmcm9tIGFuIGlucHV0IDMyLWJpdCB3b3JkLgorICoKKyAqIEBwYXJhbSBzcmNXb3JkIElucHV0IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorICogQHBhcmFtIGRzdCBPdXRwdXQgYXJyYXkgb2YgZm91ciBieXRlcy4gVGhlIGFycmF5IGNhbiBzdGFydCBhdCBhbnkgYWRkcmVzcyBpbiBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsdGNfc2V0X3VuYWxpZ25lZF9mcm9tX3dvcmQodWludDMyX3Qgc3JjV29yZCwgdWludDhfdCAqZHN0QWRkcikKK3sKKyNpZiAoIShkZWZpbmVkKF9fQ09SVEVYX00pKSB8fCAoZGVmaW5lZChfX0NPUlRFWF9NKSAmJiAoX19DT1JURVhfTSA9PSAwKSkpCisgICAgcmVnaXN0ZXIgdWludDhfdCAqZHN0ID0gZHN0QWRkcjsKKyAgICAvKiBDb3J0ZXggTTAgZG9lcyBub3Qgc3VwcG9ydCBtaXNhbGlnbmVkIHN0b3JlcyAqLworICAgIGlmICgodWludDMyX3QpZHN0ICYgMHgzdSkKKyAgICB7CisgICAgICAgICpkc3QrKyA9IChzcmNXb3JkICYgMHgwMDAwMDBGRlUpOworICAgICAgICAqZHN0KysgPSAoc3JjV29yZCAmIDB4MDAwMEZGMDBVKSA+PiA4OworICAgICAgICAqZHN0KysgPSAoc3JjV29yZCAmIDB4MDBGRjAwMDBVKSA+PiAxNjsKKyAgICAgICAgKmRzdCsrID0gKHNyY1dvcmQgJiAweEZGMDAwMDAwVSkgPj4gMjQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICooKHVpbnQzMl90ICopZHN0QWRkcikgPSBzcmNXb3JkOyAvKiBhZGRyIGFsaWduZWQgdG8gMC1tb2R1bG8tNCBzbyBpdCBpcyBzYWZlIHRvIHR5cGUgY2FzdCAqLworICAgIH0KKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pCisgICAgX19hc20KKyAgICB7CisgICAgICAgIFNUUiBzcmNXb3JkLCBbZHN0QWRkcl0KKyAgICB9CisgICAgcmV0dXJuOworI2Vsc2UKKyAgICAqKCh1aW50MzJfdCAqKWRzdEFkZHIpID0gc3JjV29yZDsKKyNlbmRpZgorfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBMVEMga2V5cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgTFRDIGtleXMgaW50byB0aGUga2V5IHJlZ2lzdGVyLiAgVGhlIGtleXMgc2hvdWxkCisgKiBiZSB3cml0dGVuIGJlZm9yZSB0aGUga2V5IHNpemUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0ga2V5IEtleQorICogQHBhcmFtIGtleVNpemUgTnVtYmVyIG9mIGJ5dGVzIGZvciBhbGwga2V5cyB0byBiZSBsb2FkZWQgKG1heGltdW0gMzIsIG11c3QgYmUgYQorICogICAgICAgICAgICAgICAgbXVsdGlwbGUgb2YgNCkuCisgKiBAcmV0dXJucyBLZXkgc2V0IHN0YXR1cworICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3NldF9rZXkoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmtleSwgdWludDhfdCBrZXlTaXplKQoreworICAgIGludDMyX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAoa2V5U2l6ZSAvIDQpOyBpKyspCisgICAgeworICAgICAgICBiYXNlLT5LRVlbaV0gPSBsdGNfZ2V0X3dvcmRfZnJvbV91bmFsaWduZWQoa2V5ICsgaSAqIHNpemVvZih1aW50MzJfdCkpOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIExUQyBrZXlzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBMVEMga2V5cyBmcm9tIHRoZSBrZXkgcmVnaXN0ZXIuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0ga2V5IEFycmF5IG9mIGRhdGEgdG8gc3RvcmUga2V5cworICogQHBhcmFtIGtleVNpemUgTnVtYmVyIG9mIGJ5dGVzIG9mIGtleXMgdG8gcmV0cmlldmUKKyAqIEByZXR1cm5zIEtleSBzZXQgc3RhdHVzCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfZ2V0X2tleShMVENfVHlwZSAqYmFzZSwgdWludDhfdCAqa2V5LCB1aW50OF90IGtleVNpemUpCit7CisgICAgaW50MzJfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IChrZXlTaXplIC8gNCk7IGkrKykKKyAgICB7CisgICAgICAgIGx0Y19zZXRfdW5hbGlnbmVkX2Zyb21fd29yZChiYXNlLT5LRVlbaV0sIGtleSArIGkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisvKiEKKyAqIEBicmllZiBXcml0ZXMgdGhlIExUQyBjb250ZXh0IHJlZ2lzdGVyOworICoKKyAqIFRoZSBMVEMgY29udGV4dCByZWdpc3RlciBpcyBhIDUxMiBiaXQgKDY0IGJ5dGUpIHJlZ2lzdGVyIHRoYXQgaG9sZHMKKyAqIGludGVybmFsIGNvbnRleHQgZm9yIHRoZSBjcnlwdG8gZW5naW5lLiAgVGhlIG1lYW5pbmcgdmFyaWVzIGJhc2VkIG9uIHRoZQorICogYWxnb3JpdGhtIGFuZCBvcGVyYXRpbmcgc3RhdGUgYmVpbmcgdXNlZC4gIFRoaXMgcmVnaXN0ZXIgaXMgd3JpdHRlbiBieSB0aGUKKyAqIGRyaXZlci9hcHBsaWNhdGlvbiB0byBsb2FkIHN0YXRlIHN1Y2ggYXMgSVYsIGNvdW50ZXIsIGFuZCBzbyBvbi4gVGhlbiwgaXQgaXMKKyAqIHVwZGF0ZWQgYnkgdGhlIGludGVybmFsIGNyeXB0byBlbmdpbmUgYXMgbmVlZGVkLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGRhdGEgRGF0YSB0byB3cml0ZQorICogQHBhcmFtIGRhdGFTaXplIFNpemUgb2YgZGF0YSB0byB3cml0ZSBpbiBieXRlcworICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnRpbmcgd29yZCAoNC1ieXRlKSBpbmRleCBpbnRvIHRoZSAxNi13b3JkIHJlZ2lzdGVyLgorICogQHJldHVybiBTdGF0dXMgb2Ygd3JpdGUKKyAqLworc3RhdHVzX3QgbHRjX3NldF9jb250ZXh0KExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50OF90IGRhdGFTaXplLCB1aW50OF90IHN0YXJ0SW5kZXgpCit7CisgICAgaW50MzJfdCBpOworICAgIGludDMyX3QgajsKKyAgICBpbnQzMl90IHN6TGVmdDsKKworICAgIC8qIENvbnRleHQgcmVnaXN0ZXIgaXMgMTYgd29yZHMgaW4gc2l6ZSAoNjQgYnl0ZXMpLiAgRW5zdXJlIHdlIGFyZSBvbmx5CisgICAgICogd3JpdGluZyBhIHZhbGlkIGFtb3VudCBvZiBkYXRhLiAqLworICAgIGlmIChzdGFydEluZGV4ICsgKGRhdGFTaXplIC8gNCkgPj0gMTYpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaiA9IDA7CisgICAgc3pMZWZ0ID0gZGF0YVNpemUgJSA0OworICAgIGZvciAoaSA9IHN0YXJ0SW5kZXg7IGkgPCAoc3RhcnRJbmRleCArIGRhdGFTaXplIC8gNCk7IGkrKykKKyAgICB7CisgICAgICAgIGJhc2UtPkNUWFtpXSA9IGx0Y19nZXRfd29yZF9mcm9tX3VuYWxpZ25lZChkYXRhICsgaik7CisgICAgICAgIGogKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisKKyAgICBpZiAoc3pMZWZ0KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgY29udGV4dF9kYXRhID0gezB9OworICAgICAgICBsdGNfbWVtY3B5KCZjb250ZXh0X2RhdGEsIGRhdGEgKyBqLCBzekxlZnQpOworICAgICAgICBiYXNlLT5DVFhbaV0gPSBjb250ZXh0X2RhdGE7CisgICAgfQorICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSBMVEMgY29udGV4dCByZWdpc3Rlci4KKyAqCisgKiBUaGUgTFRDIGNvbnRleHQgcmVnaXN0ZXIgaXMgYSA1MTIgYml0ICg2NCBieXRlKSByZWdpc3RlciB0aGF0IGhvbGRzCisgKiBpbnRlcm5hbCBjb250ZXh0IGZvciB0aGUgY3J5cHRvIGVuZ2luZS4gIFRoZSBtZWFuaW5nIHZhcmllcyBiYXNlZCBvbiB0aGUKKyAqIGFsZ29yaXRobSBhbmQgb3BlcmF0aW5nIHN0YXRlIGJlaW5nIHVzZWQuICBUaGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gYnkgdGhlCisgKiBkcml2ZXIvYXBwbGljYXRpb24gdG8gbG9hZCBzdGF0ZSBzdWNoIGFzIElWLCBjb3VudGVyLCBhbmQgc28gb24uIFRoZW4sIGl0IGlzCisgKiB1cGRhdGVkIGJ5IHRoZSBpbnRlcm5hbCBjcnlwdG8gZW5naW5lIGFzIG5lZWRlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBkYXRhIERlc3RpbmF0aW9uIG9mIHJlYWQgZGF0YQorICogQHBhcmFtIGRhdGFTaXplIFNpemUgb2YgZGF0YSB0byByZWFkIGluIGJ5dGVzCisgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydGluZyB3b3JkICg0LWJ5dGUpIGluZGV4IGludG8gdGhlIDE2LXdvcmQgcmVnaXN0ZXIuCisgKiBAcmV0dXJuIFN0YXR1cyBvZiByZWFkCisgKi8KK3N0YXR1c190IGx0Y19nZXRfY29udGV4dChMVENfVHlwZSAqYmFzZSwgdWludDhfdCAqZGVzdCwgdWludDhfdCBkYXRhU2l6ZSwgdWludDhfdCBzdGFydEluZGV4KQoreworICAgIGludDMyX3QgaTsKKyAgICBpbnQzMl90IGo7CisgICAgaW50MzJfdCBzekxlZnQ7CisgICAgdWludDMyX3QgcmRDdHg7CisKKyAgICAvKiBDb250ZXh0IHJlZ2lzdGVyIGlzIDE2IHdvcmRzIGluIHNpemUgKDY0IGJ5dGVzKS4gIEVuc3VyZSB3ZSBhcmUgb25seQorICAgICAqIHdyaXRpbmcgYSB2YWxpZCBhbW91bnQgb2YgZGF0YS4gKi8KKyAgICBpZiAoc3RhcnRJbmRleCArIChkYXRhU2l6ZSAvIDQpID49IDE2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGogPSAwOworICAgIHN6TGVmdCA9IGRhdGFTaXplICUgNDsKKyAgICBmb3IgKGkgPSBzdGFydEluZGV4OyBpIDwgKHN0YXJ0SW5kZXggKyBkYXRhU2l6ZSAvIDQpOyBpKyspCisgICAgeworICAgICAgICBsdGNfc2V0X3VuYWxpZ25lZF9mcm9tX3dvcmQoYmFzZS0+Q1RYW2ldLCBkZXN0ICsgaik7CisgICAgICAgIGogKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisKKyAgICBpZiAoc3pMZWZ0KQorICAgIHsKKyAgICAgICAgcmRDdHggPSAwOworICAgICAgICByZEN0eCA9IGJhc2UtPkNUWFtpXTsKKyAgICAgICAgbHRjX21lbWNweShkZXN0ICsgaiwgJnJkQ3R4LCBzekxlZnQpOworICAgIH0KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX3N5bW1ldHJpY19hbGdfc3RhdGUoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfYWxnb3JpdGhtX3N0YXRlX3QgYXMpCit7CisgICAgbHRjX21vZGVfdCBtb2RlUmVnOworCisgICAgLyogQ2xlYXIgaW50ZXJuYWwgcmVnaXN0ZXIgc3RhdGVzLiAqLworICAgIGJhc2UtPkNXID0gKHVpbnQzMl90KWtMVENfQ2xlYXJBbGw7CisKKyAgICAvKiBTZXQgYnl0ZSBzd2FwIG9uIGZvciBzZXZlcmFsIHJlZ2lzdGVycyB3ZSB3aWxsIGJlIHJlYWRpbmcgYW5kIHdyaXRpbmcKKyAgICAgKiB1c2VyIGRhdGEgdG8vZnJvbS4gKi8KKyAgICBiYXNlLT5DVEwgfD0ga0xUQ19DdHJsU3dhcEFsbDsKKworICAgIC8qIFdyaXRlIHRoZSBrZXkgaW4gcGxhY2UuICovCisgICAgbHRjX3NldF9rZXkoYmFzZSwga2V5LCBrZXlTaXplKTsKKworICAgIC8qIFdyaXRlIHRoZSBrZXkgc2l6ZS4gIFRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHdyaXRpbmcgdGhlIGtleSwgYW5kIHRoaXMKKyAgICAgKiBhY3Rpb24gbG9ja3MgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IHRoZSBrZXkgcmVnaXN0ZXJzLiAqLworICAgIGJhc2UtPktTID0ga2V5U2l6ZTsKKworICAgIC8qIENsZWFyIHRoZSAnZG9uZScgaW50ZXJydXB0LiAqLworICAgIGJhc2UtPlNUQSA9IGtMVENfU3RhdHVzRG9uZUlzcjsKKworICAgIC8qIFNldCB0aGUgcHJvcGVyIGJsb2NrIGFuZCBhbGdvcml0aG0gbW9kZS4gKi8KKyAgICBtb2RlUmVnID0gKHVpbnQzMl90KWFsZyB8ICh1aW50MzJfdCllbmMgfCAodWludDMyX3QpYXMgfCAodWludDMyX3QpbW9kZTsKKworICAgIC8qIFdyaXRlIHRoZSBtb2RlIHJlZ2lzdGVyIHRvIHRoZSBoYXJkd2FyZS4gKi8KKyAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgTFRDIGZvciBzeW1tZXRyaWMgZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbi4gTW9kZSBpcyBzZXQgdG8gVVBEQVRFLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDgsIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0gYWxnIFN5bW1ldHJpYyBhbGdvcml0aG0KKyAqIEBwYXJhbSBtb2RlIFN5bW1ldHJpYyBibG9jayBtb2RlCisgKiBAcGFyYW0gZW5jIEVuY3J5cHQvZGVjcnlwdCBjb250cm9sCisgKiBAcmV0dXJuIFN0YXR1cworICovCitzdGF0dXNfdCBsdGNfc3ltbWV0cmljX3VwZGF0ZShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hbGdvcml0aG1fdCBhbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBlbmMpCit7CisgICAgcmV0dXJuIGx0Y19zeW1tZXRyaWNfYWxnX3N0YXRlKGJhc2UsIGtleSwga2V5U2l6ZSwgYWxnLCBtb2RlLCBlbmMsIGtMVENfTW9kZVVwZGF0ZSk7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfR0NNKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTQorLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIExUQyBmb3Igc3ltbWV0cmljIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24uIE1vZGUgaXMgc2V0IHRvIEZJTkFMSVpFLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDgsIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0gYWxnIFN5bW1ldHJpYyBhbGdvcml0aG0KKyAqIEBwYXJhbSBtb2RlIFN5bW1ldHJpYyBibG9jayBtb2RlCisgKiBAcGFyYW0gZW5jIEVuY3J5cHQvZGVjcnlwdCBjb250cm9sCisgKiBAcmV0dXJuIFN0YXR1cworICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3N5bW1ldHJpY19maW5hbChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hbGdvcml0aG1fdCBhbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBlbmMpCit7CisgICAgcmV0dXJuIGx0Y19zeW1tZXRyaWNfYWxnX3N0YXRlKGJhc2UsIGtleSwga2V5U2l6ZSwgYWxnLCBtb2RlLCBlbmMsIGtMVENfTW9kZUZpbmFsaXplKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSAqLworCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgTFRDIGZvciBzeW1tZXRyaWMgZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbi4gTW9kZSBpcyBzZXQgdG8gSU5JVElBTElaRS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSA4LCAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtIGFsZyBTeW1tZXRyaWMgYWxnb3JpdGhtCisgKiBAcGFyYW0gbW9kZSBTeW1tZXRyaWMgYmxvY2sgbW9kZQorICogQHBhcmFtIGVuYyBFbmNyeXB0L2RlY3J5cHQgY29udHJvbAorICogQHJldHVybiBTdGF0dXMKKyAqLworc3RhdGljIHN0YXR1c190IGx0Y19zeW1tZXRyaWNfaW5pdChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hbGdvcml0aG1fdCBhbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jKQoreworICAgIHJldHVybiBsdGNfc3ltbWV0cmljX2FsZ19zdGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGFsZywgbW9kZSwgZW5jLCBrTFRDX01vZGVJbml0KTsKK30KKworLyohCisgKiBAYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIExUQyBmb3Igc3ltbWV0cmljIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24uIE1vZGUgaXMgc2V0IHRvIElOSVRJQUxJWkUvRklOQUxJWkUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgOCwgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbSBhbGcgU3ltbWV0cmljIGFsZ29yaXRobQorICogQHBhcmFtIG1vZGUgU3ltbWV0cmljIGJsb2NrIG1vZGUKKyAqIEBwYXJhbSBlbmMgRW5jcnlwdC9kZWNyeXB0IGNvbnRyb2wKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfc3ltbWV0cmljX2luaXRfZmluYWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfZW5jcnlwdF90IGVuYykKK3sKKyAgICByZXR1cm4gbHRjX3N5bW1ldHJpY19hbGdfc3RhdGUoYmFzZSwga2V5LCBrZXlTaXplLCBhbGcsIG1vZGUsIGVuYywga0xUQ19Nb2RlSW5pdEZpbmFsKTsKK30KKwordm9pZCBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGluU2l6ZSwgY29uc3QgdWludDhfdCAqKmluRGF0YSwgdWludDhfdCAqKm91dERhdGEpCit7CisgICAgdWludDMyX3Qgb3V0U2l6ZTsKKyAgICB1aW50MzJfdCBmaWZvRGF0YTsKKyAgICB1aW50MzJfdCBmaWZvU3RhdHVzOworCisgICAgcmVnaXN0ZXIgY29uc3QgdWludDhfdCAqaW4gPSAqaW5EYXRhOworICAgIHJlZ2lzdGVyIHVpbnQ4X3QgKm91dCA9ICpvdXREYXRhOworCisgICAgb3V0U2l6ZSA9IGluU2l6ZTsKKyAgICB3aGlsZSAoKG91dFNpemUgPiAwKSB8fCAoaW5TaXplID4gMCkpCisgICAgeworICAgICAgICBmaWZvU3RhdHVzID0gYmFzZS0+RklGT1NUQTsKKworICAgICAgICAvKiBDaGVjayBvdXRwdXQgRklGTyBsZXZlbCB0byBtYWtlIHN1cmUgdGhlcmUgaXMgYXQgbGVhc3QgYW4gZW50cnkKKyAgICAgICAgICogcmVhZHkgdG8gYmUgcmVhZC4gKi8KKyAgICAgICAgaWYgKGZpZm9TdGF0dXMgJiBMVENfRklGT1NUQV9PRkxfTUFTSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmVhZCBkYXRhIGZyb20gdGhlIG91dHB1dCBGSUZPLiAqLworICAgICAgICAgICAgaWYgKG91dFNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvdXRTaXplID49IHNpemVvZih1aW50MzJfdCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsdGNfc2V0X3VuYWxpZ25lZF9mcm9tX3dvcmQoYmFzZS0+T0ZJRk8sIG91dCk7CisgICAgICAgICAgICAgICAgICAgIG91dCArPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgICAgICAgICBvdXRTaXplIC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgLyogKG91dFNpemUgPiAwKSAmJiAob3V0U2l6ZSA8IDQpICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaWZvRGF0YSA9IGJhc2UtPk9GSUZPOworICAgICAgICAgICAgICAgICAgICBsdGNfbWVtY3B5KG91dCwgJmZpZm9EYXRhLCBvdXRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0ICs9IG91dFNpemU7CisgICAgICAgICAgICAgICAgICAgIG91dFNpemUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGlucHV0IEZJRk8gc3RhdHVzIHRvIHNlZSBpZiBpdCBpcyBmdWxsLiAgV2UgY2FuCisgICAgICAgICAqIG9ubHkgd3JpdGUgbW9yZSBkYXRhIHdoZW4gYm90aCBpbnB1dCBhbmQgb3V0cHV0IEZJRk9zIGFyZSBub3QgYXQgYSBmdWxsIHN0YXRlLgorICAgICAgICAgKiBBdCB0aGUgc2FtZSB0aW1lIHdlIGFyZSBzdXJlIE91dHB1dCBGSUZPIGlzIG5vdCBmdWxsIGJlY2F1c2Ugd2UgaGF2ZSBwb3BlZCBhdCBsZWFzdCBvbmUgZW50cnkKKyAgICAgICAgICogYnkgdGhlIHdoaWxlIGxvb3AgYWJvdmUuCisgICAgICAgICAqLworICAgICAgICBpZiAoIShmaWZvU3RhdHVzICYgTFRDX0ZJRk9TVEFfSUZGX01BU0spKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDb3B5IGRhdGEgdG8gdGhlIGlucHV0IEZJRk8uCisgICAgICAgICAgICAgKiBEYXRhIGNhbiBvbmx5IGJlIGNvcGllZCBvbmUgd29yZCBhdCBhIHRpbWUsIHNvIHBhZCB0aGUgZGF0YQorICAgICAgICAgICAgICogYXBwcm9wcmlhdGVseSBpZiBpdCBpcyBsZXNzIHRoYW4gdGhpcyBzaXplLiAqLworICAgICAgICAgICAgaWYgKGluU2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSA+PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+SUZJRk8gPSBsdGNfZ2V0X3dvcmRfZnJvbV91bmFsaWduZWQoaW4pOworICAgICAgICAgICAgICAgICAgICBpblNpemUgLT0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgICAgICAgICAgaW4gKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAvKiAoaW5TaXplID4gMCkgJiYgKGluU2l6ZSA8IDQpICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaWZvRGF0YSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGx0Y19tZW1jcHkoJmZpZm9EYXRhLCBpbiwgaW5TaXplKTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+SUZJRk8gPSBmaWZvRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgaW4gKz0gaW5TaXplOworICAgICAgICAgICAgICAgICAgICBpblNpemUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAqaW5EYXRhID0gaW47CisgICAgKm91dERhdGEgPSBvdXQ7Cit9CisKKy8qIQorICogQGJyaWVmIFByb2Nlc3NlcyBzeW1tZXRyaWMgZGF0YSB0aHJvdWdoIExUQyBBRVMgYW5kIERFUyBlbmdpbmVzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGluRGF0YSBJbnB1dCBkYXRhCisgKiBAcGFyYW0gaW5TaXplIFNpemUgb2YgaW5wdXQgZGF0YSwgaW4gYnl0ZXMKKyAqIEBwYXJhbSBvdXREYXRhIE91dHB1dCBkYXRhCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmluRGF0YSwgdWludDMyX3QgaW5TaXplLCB1aW50OF90ICpvdXREYXRhKQoreworICAgIHVpbnQzMl90IGxhc3RTaXplOworCisgICAgaWYgKCghaW5EYXRhKSB8fCAoIW91dERhdGEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIFdyaXRlIHRoZSBkYXRhIHNpemUuICovCisgICAgYmFzZS0+RFMgPSBpblNpemU7CisKKyAgICAvKiBTcGxpdCB0aGUgaW5TaXplIGludG8gZnVsbCAxNi1ieXRlIGNodW5rcyBhbmQgbGFzdCBpbmNvbXBsZXRlIGJsb2NrIGR1ZSB0byBMVEMgQUVTIE9GSUZPIGVycmF0YSAqLworICAgIGlmIChpblNpemUgPD0gMTZ1KQorICAgIHsKKyAgICAgICAgbGFzdFNpemUgPSBpblNpemU7CisgICAgICAgIGluU2l6ZSA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFByb2Nlc3MgYWxsIDE2LWJ5dGUgZGF0YSBjaHVua3MuICovCisgICAgICAgIGxhc3RTaXplID0gaW5TaXplICUgMTZ1OworICAgICAgICBpZiAobGFzdFNpemUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbGFzdFNpemUgPSAxNjsKKyAgICAgICAgICAgIGluU2l6ZSAtPSAxNjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGluU2l6ZSAtPSBsYXN0U2l6ZTsgLyogaW5TaXplIHdpbGwgYmUgcm91bmRlZCBkb3duIHRvIDE2IGJ5dGUgYm91bmRhcnkuIHJlbWFpbmluZyBieXRlcyBpbiBsYXN0U2l6ZSAqLworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX3N5bW1ldHJpY19wcm9jZXNzKGJhc2UsIGluU2l6ZSwgJmluRGF0YSwgJm91dERhdGEpOworICAgIGx0Y19zeW1tZXRyaWNfcHJvY2VzcyhiYXNlLCBsYXN0U2l6ZSwgJmluRGF0YSwgJm91dERhdGEpOworICAgIHJldHVybiBsdGNfd2FpdChiYXNlKTsKK30KKworLyohCisgKiBAYnJpZWYgU3BsaXRzIHRoZSBMVEMgam9iIGludG8gc2Vzc2lvbnMuIFVzZWQgZm9yIENCQywgQ1RSLCBDRkIsIE9GQiBjaXBoZXIgYmxvY2sgbW9kZXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaW5EYXRhIElucHV0IGRhdGEgdG8gcHJvY2Vzcy4KKyAqIEBwYXJhbSBpblNpemUgSW5wdXQgc2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG91dERhdGEgT3V0cHV0IGRhdGEgYnVmZmVyLgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9ucyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dERhdGEpCit7CisgICAgdWludDMyX3Qgc3o7CisgICAgc3RhdHVzX3QgcmV0dmFsOworICAgIGx0Y19tb2RlX3QgbW9kZVJlZzsgLyogcmVhZCBhbmQgd3JpdGUgTFRDIG1vZGUgcmVnaXN0ZXIgKi8KKworICAgIHN6ID0gTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTjsKKyAgICBtb2RlUmVnID0gYmFzZS0+TUQ7CisgICAgcmV0dmFsID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgd2hpbGUgKGluU2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChpblNpemUgPD0gc3opCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhKGJhc2UsIGluRGF0YSwgaW5TaXplLCBvdXREYXRhKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpblNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoYmFzZSwgaW5EYXRhLCBzeiwgb3V0RGF0YSk7CisgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5EYXRhICs9IHN6OworICAgICAgICAgICAgaW5TaXplIC09IHN6OworICAgICAgICAgICAgb3V0RGF0YSArPSBzejsKKyAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBsdGNfbW92ZV9ibG9ja190b19pZmlmbyhMVENfVHlwZSAqYmFzZSwgY29uc3QgbHRjX3hjbV9ibG9ja190ICpibGssIHVpbnQzMl90IG51bV9ieXRlcykKK3sKKyAgICB1aW50MzJfdCBpID0gMDsKKyAgICB1aW50MzJfdCB3b3JkczsKKworICAgIHdvcmRzID0gbnVtX2J5dGVzIC8gNHU7CisgICAgaWYgKG51bV9ieXRlcyAlIDR1KQorICAgIHsKKyAgICAgICAgd29yZHMrKzsKKyAgICB9CisKKyAgICBpZiAod29yZHMgPiA0KQorICAgIHsKKyAgICAgICAgd29yZHMgPSA0OworICAgIH0KKworICAgIHdoaWxlIChpIDwgd29yZHMpCisgICAgeworICAgICAgICBpZiAoMFUgPT0gKGJhc2UtPkZJRk9TVEEgJiBMVENfRklGT1NUQV9JRkZfTUFTSykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvcHkgZGF0YSB0byB0aGUgaW5wdXQgRklGTy4gKi8KKyAgICAgICAgICAgIGJhc2UtPklGSUZPID0gYmxrLT53W2krK107CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19tb3ZlX3RvX2lmaWZvKExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBkYXRhU2l6ZSkKK3sKKyAgICBsdGNfeGNtX2Jsb2NrX3QgYmxrOworICAgIGx0Y194Y21fYmxvY2tfdCBibGtaZXJvID0ge3sweDB1LCAweDB1LCAweDB1LCAweDB1fX07CisKKyAgICB3aGlsZSAoZGF0YVNpemUpCisgICAgeworICAgICAgICBpZiAoZGF0YVNpemUgPiAxNnUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y19tZW1jcHkoJmJsaywgZGF0YSwgMTZ1KTsKKyAgICAgICAgICAgIGRhdGFTaXplIC09IDE2dTsKKyAgICAgICAgICAgIGRhdGEgKz0gMTZ1OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX21lbWNweSgmYmxrLCAmYmxrWmVybywgc2l6ZW9mKGx0Y194Y21fYmxvY2tfdCkpOyAvKiBtZW1zZXQgYmxrIHRvIHplcm9lcyAqLworICAgICAgICAgICAgbHRjX21lbWNweSgmYmxrLCBkYXRhLCBkYXRhU2l6ZSk7CisgICAgICAgICAgICBkYXRhU2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbHRjX21vdmVfYmxvY2tfdG9faWZpZm8oYmFzZSwgJmJsaywgc2l6ZW9mKGx0Y194Y21fYmxvY2tfdCkpOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgUHJvY2Vzc2VzIHN5bW1ldHJpYyBkYXRhIHRocm91Z2ggTFRDIEFFUyBpbiBtdWx0aXBsZSBzZXNzaW9ucy4KKyAqCisgKiBTcGVjaWZpYyBmb3IgQUVTIENDTSBhbmQgR0NNIG1vZGVzIGFzIHRoZXkgbmVlZCB0byB1cGRhdGUgbW9kZSByZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBpbkRhdGEgSW5wdXQgZGF0YQorICogQHBhcmFtIGluU2l6ZSBTaXplIG9mIGlucHV0IGRhdGEsIGluIGJ5dGVzCisgKiBAcGFyYW0gb3V0RGF0YSBPdXRwdXQgZGF0YQorICogQHBhcmFtIGxhc3RBcyBUaGUgTFRDIEFsZ29yaXRobSBzdGF0ZSB0byBiZSBzZXQgc3VwIGZvciBsYXN0IGJsb2NrIGR1cmluZyBtZXNzYWdlIHByb2Nlc3NpbmcgaW4gbXVsdGlwbGUgc2Vzc2lvbnMuCisgKiAgICAgICAgICAgICAgIEZvciBDQ00gaXQgaXMga0xUQ19Nb2RlRmluYWxpemUuIEZvciBHQ00gaXQgaXMga0xUQ19Nb2RlSW5pdEZpbmFsLgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YV9tdWx0aXBsZShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5TaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfdCBtb2RlUmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZV90IGxhc3RBcykKK3sKKyAgICB1aW50MzJfdCBmaWZvQ29uc3VtZWQ7CisgICAgdWludDMyX3QgbGFzdFNpemU7CisgICAgdWludDMyX3Qgc3o7CisgICAgdWludDMyX3QgbWF4X2x0Y19maWZvX3NpemU7CisgICAgbHRjX21vZGVfYWxnb3JpdGhtX3N0YXRlX3QgZnNtOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmICgoIWluRGF0YSkgfHwgKCFvdXREYXRhKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoISgoa0xUQ19Nb2RlRmluYWxpemUgPT0gbGFzdEFzKSB8fCAoa0xUQ19Nb2RlSW5pdEZpbmFsID09IGxhc3RBcykpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGlmICgwID09IGluU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorCisgICAgaWYgKGluU2l6ZSA8PSAxNnUpCisgICAgeworICAgICAgICBmc20gPSBsYXN0QXM7CisgICAgICAgIGxhc3RTaXplID0gaW5TaXplOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmc20gPSAobHRjX21vZGVfYWxnb3JpdGhtX3N0YXRlX3QpKAorICAgICAgICAgICAgbW9kZVJlZyAmCisgICAgICAgICAgICBMVENfTURfQVNfTUFTSyk7IC8qIHRoaXMgd2lsbCBiZSBlaXRoZXIga0xUQ19Nb2RlSW5pdCBvciBrTFRDX01vZGVVcGRhdGUsIGJhc2VkIG9uIHByaW9yIHByb2Nlc3NpbmcgKi8KKworICAgICAgICAvKiBQcm9jZXNzIGFsbCAxNi1ieXRlIGRhdGEgY2h1bmtzLiAqLworICAgICAgICBsYXN0U2l6ZSA9IGluU2l6ZSAlIDE2dTsKKyAgICAgICAgaWYgKGxhc3RTaXplID09IDB1KQorICAgICAgICB7CisgICAgICAgICAgICBsYXN0U2l6ZSA9IDE2dTsKKyAgICAgICAgICAgIGluU2l6ZSAtPSAxNnU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpblNpemUgLT0gbGFzdFNpemU7IC8qIGluU2l6ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxNiBieXRlIGJvdW5kYXJ5LiByZW1haW5pbmcgYnl0ZXMgaW4gbGFzdFNpemUgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIG1heF9sdGNfZmlmb19zaXplID0gTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTjsKKyAgICBmaWZvQ29uc3VtZWQgPSBiYXNlLT5EUzsKKworICAgIHdoaWxlIChsYXN0U2l6ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZnNtKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGtMVENfTW9kZVVwZGF0ZToKKyAgICAgICAgICAgIGNhc2Uga0xUQ19Nb2RlSW5pdDoKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5TaXplKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSA+IChtYXhfbHRjX2ZpZm9fc2l6ZSAtIGZpZm9Db25zdW1lZCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gKG1heF9sdGNfZmlmb19zaXplIC0gZmlmb0NvbnN1bWVkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gaW5TaXplOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPkRTID0gc3o7CisgICAgICAgICAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2VzcyhiYXNlLCBzeiwgJmluRGF0YSwgJm91dERhdGEpOworICAgICAgICAgICAgICAgICAgICBpblNpemUgLT0gc3o7CisgICAgICAgICAgICAgICAgICAgIGZpZm9Db25zdW1lZCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgLyogYWZ0ZXIgd2UgY29tcGxldGVkIElOSVRJQUxJWkUgam9iLCBhcmUgdGhlcmUgc3RpbGwgYW55IGRhdGEgbGVmdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZnNtID0ga0xUQ19Nb2RlVXBkYXRlOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlUmVnIHw9ICh1aW50MzJfdClmc207CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmc20gPSBsYXN0QXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Uga0xUQ19Nb2RlRmluYWxpemU6CisgICAgICAgICAgICBjYXNlIGtMVENfTW9kZUluaXRGaW5hbDoKKyAgICAgICAgICAgICAgICAvKiBwcm9jZXNzIGxhc3QgYmxvY2sgaW4gRklOQUxJWkUgKi8KKworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtb2RlUmVnICY9IH5MVENfTURfQVNfTUFTSzsKKyAgICAgICAgICAgICAgICBtb2RlUmVnIHw9ICh1aW50MzJfdClsYXN0QXM7CisgICAgICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworCisgICAgICAgICAgICAgICAgYmFzZS0+RFMgPSBsYXN0U2l6ZTsKKyAgICAgICAgICAgICAgICBsdGNfc3ltbWV0cmljX3Byb2Nlc3MoYmFzZSwgbGFzdFNpemUsICZpbkRhdGEsICZvdXREYXRhKTsKKyAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKiEKKyAqIEBicmllZiBSZWNlaXZlcyBNQUMgY29tcGFyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgc3ViLXByb2Nlc3Mgb2YgQ0NNIGFuZCBHQ00gZGVjcnlwdGlvbi4KKyAqIEl0IGNvbXBhcmVzIHJlY2VpdmVkIE1BQyB3aXRoIHRoZSBNQUMgY29tcHV0ZWQgZHVyaW5nIGRlY3J5cHRpb24uCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gdGFnIFJlY2VpdmVkIE1BQy4KKyAqIEBwYXJhbSB0YWdTaXplIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVjZWl2ZWQgTUFDLgorICogQHBhcmFtIG1vZGVSZWcgTFRDIE1vZGUgUmVnaXN0ZXIgY3VycmVudCB2YWx1ZS4gSXQgaXMgbW9kaWZpZWQgYW5kIHdyaXR0ZW4gdG8gTFRDIE1vZGUgUmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfYWVzX3JlY2VpdmVkX21hY19jb21wYXJlKExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICp0YWcsIHVpbnQzMl90IHRhZ1NpemUsIGx0Y19tb2RlX3QgbW9kZVJlZykKK3sKKyAgICBsdGNfeGNtX2Jsb2NrX3QgYmxrID0ge3sweDB1LCAweDB1LCAweDB1LCAweDB1fX07CisKKyAgICBiYXNlLT5DVyA9IGtMVENfQ2xlYXJEYXRhU2l6ZTsKKyAgICBiYXNlLT5TVEEgPSBrTFRDX1N0YXR1c0RvbmVJc3I7CisKKyAgICBtb2RlUmVnICY9IH5MVENfTURfQVNfTUFTSzsKKyAgICBtb2RlUmVnIHw9ICh1aW50MzJfdClrTFRDX01vZGVVcGRhdGUgfCBMVENfTURfSUNWX1RFU1RfTUFTSzsKKyAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisKKyAgICBiYXNlLT5EUyA9IDB1OworICAgIGJhc2UtPklDVlMgPSB0YWdTaXplOworICAgIGx0Y19tZW1jcHkoJmJsay5iWzBdLCAmdGFnWzBdLCB0YWdTaXplKTsKKworICAgIGx0Y19tb3ZlX2Jsb2NrX3RvX2lmaWZvKGJhc2UsICZibGssIHRhZ1NpemUpOworICAgIHJldHVybiBsdGNfd2FpdChiYXNlKTsKK30KKworLyohCisgKiBAYnJpZWYgUHJvY2Vzc2VzIHRhZyBkdXJpbmcgQUVTIEdDTSBhbmQgQ0NNLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBzdWItcHJvY2VzcyBvZiBDQ00gYW5kIEdDTSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLgorICogRm9yIGVuY3J5cHRpb24sIGl0IHdyaXRlcyBjb21wdXRlZCBNQUMgdG8gdGhlIG91dHB1dCB0YWcuCisgKiBGb3IgZGVjcnlwdGlvbiwgaXQgY29tcGFyZXMgdGhlIHJlY2VpdmVkIE1BQyB3aXRoIHRoZSBjb21wdXRlZCBNQUMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW1baW4sb3V0XSB0YWcgT3V0cHV0IGNvbXB1dGVkIE1BQyBkdXJpbmcgZW5jcnlwdGlvbiBvciBJbnB1dCByZWNlaXZlZCBNQUMgZHVyaW5nIGRlY3J5cHRpb24uCisgKiBAcGFyYW0gdGFnU2l6ZSBTaXplIG9mIE1BQyBidWZmZXIgaW4gYnl0ZXMuCisgKiBAcGFyYW0gbW9kZVJlZyBMVEMgTW9kZSBSZWdpc3RlciBjdXJyZW50IHZhbHVlLiBJdCBpcyBjaGVja2VkIHRvIHJlYWQgRW5jL0RlYyBiaXQuCisgKiAgICAgICAgICAgICAgICAgSXQgaXMgbW9kaWZpZWQgYW5kIHdyaXR0ZW4gdG8gTFRDIE1vZGUgUmVnaXN0ZXIgZHVyaW5nIGRlY3J5cHRpb24uCisgKiBAcGFyYW0gY3R4IEluZGV4IHRvIExUQyBjb250ZXh0IHJlZ2lzdGVycyB3aXRoIGNvbXB1dGVkIE1BQyBmb3IgZW5jcnlwdGlvbiBwcm9jZXNzLgorICovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19wcm9jZXNzX3RhZyhMVENfVHlwZSAqYmFzZSwgdWludDhfdCAqdGFnLCB1aW50MzJfdCB0YWdTaXplLCBsdGNfbW9kZV90IG1vZGVSZWcsIHVpbnQzMl90IGN0eCkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgaWYgKHRhZykKKyAgICB7CisgICAgICAgIC8qIEZvciBkZWNyeXB0LCBjb21wYXJlIHJlY2VpdmVkIE1BQyB3aXRoIHRoZSBjb21wdXRlZCBNQUMuICovCisgICAgICAgIGlmIChrTFRDX01vZGVEZWNyeXB0ID09IChtb2RlUmVnICYgTFRDX01EX0VOQ19NQVNLKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gbHRjX2Flc19yZWNlaXZlZF9tYWNfY29tcGFyZShiYXNlLCB0YWcsIHRhZ1NpemUsIG1vZGVSZWcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogRlNMX0FFU19HQ01fVFlQRV9FTkNSWVBUICovCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEZvciBlbmNyeXB0aW9uLCB3cml0ZSB0aGUgY29tcHV0ZWQgYW5kIGVuY3J5cHRlZCBNQUMgdG8gdXNlciBidWZmZXIgKi8KKyAgICAgICAgICAgIGx0Y19nZXRfY29udGV4dChiYXNlLCAmdGFnWzBdLCB0YWdTaXplLCBjdHgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMVEMgQ29tbW9uIGNvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBMVENfSW5pdChMVENfVHlwZSAqYmFzZSkKK3sKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogdW5nYXRlIGNsb2NrICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soa0NMT0NLX0x0YzApOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIExUQ19EZWluaXQoTFRDX1R5cGUgKmJhc2UpCit7CisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIGdhdGUgY2xvY2sgKi8KKyAgICBDTE9DS19EaXNhYmxlQ2xvY2soa0NMT0NLX0x0YzApOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0RQQU1TKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RQQU1TCit2b2lkIExUQ19TZXREcGFNYXNrU2VlZChMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5EUEFNUyA9IG1hc2s7CisgICAgLyogc2Vjb25kIHdyaXRlIGFzIHdvcmthcm91bmQgZm9yIERQQSBtYXNrIHJlLXNlZWQgZXJyYXRhICovCisgICAgYmFzZS0+RFBBTVMgPSBtYXNrOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfRFBBTVMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFFUyBDb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfYWVzX2RlY3J5cHRfZWNiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2Flc19rZXlfdCBrZXlUeXBlKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRGVjcnlwdCk7CisKKyAgICAvKiBzZXQgREsgYml0IGluIHRoZSBMVEMgTW9kZSBSZWdpc3RlciBBQUkgZmllbGQgZm9yIGRpcmVjdGx5IGxvYWRlZCBkZWNyeXB0IGtleXMgKi8KKyAgICBpZiAoa2V5VHlwZSA9PSBrTFRDX0RlY3J5cHRLZXkpCisgICAgeworICAgICAgICBiYXNlLT5NRCB8PSAoMVUgPDwga0xUQ19Nb2RlUmVnQml0U2hpZnRESyk7CisgICAgfQorCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgJmNpcGhlcnRleHRbMF0sIHNpemUsICZwbGFpbnRleHRbMF0pOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBRVMgQ29kZSBwdWJsaWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0dXNfdCBMVENfQUVTX0dlbmVyYXRlRGVjcnlwdEtleShMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqZW5jcnlwdEtleSwgdWludDhfdCAqZGVjcnlwdEtleSwgdWludDMyX3Qga2V5U2l6ZSkKK3sKKyAgICB1aW50OF90IHBsYWludGV4dFtMVENfQUVTX0JMT0NLX1NJWkVdOworICAgIHVpbnQ4X3QgY2lwaGVydGV4dFtMVENfQUVTX0JMT0NLX1NJWkVdOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIEVDQiBkZWNyeXB0IHdpdGggZW5jcnlwdCBrZXkgd2lsbCBjb252ZXJ0IHRoZSBrZXkgaW4gTFRDIGNvbnRleHQgaW50byBkZWNyeXB0IGZvcm0gb2YgdGhlIGtleSAqLworICAgIHN0YXR1cyA9IGx0Y19hZXNfZGVjcnlwdF9lY2IoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBMVENfQUVTX0JMT0NLX1NJWkUsIGVuY3J5cHRLZXksIGtleVNpemUsIGtMVENfRW5jcnlwdEtleSk7CisgICAgLyogbm93IHRoZXJlIGlzIGRlY3J5cHQgZm9ybSBvZiB0aGUga2V5IGluIHRoZSBMVEMgY29udGV4dCwgc28gdGFrZSBpdCAqLworICAgIGx0Y19nZXRfa2V5KGJhc2UsIGRlY3J5cHRLZXksIGtleVNpemUpOworCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRFY2IoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwgdWludDhfdCAqY2lwaGVydGV4dCwgdWludDMyX3Qgc2l6ZSwgY29uc3QgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlTaXplKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICAvKiBFQ0IgbW9kZSwgc2l6ZSBtdXN0IGJlIDE2LWJ5dGUgbXVsdGlwbGUgKi8KKyAgICBpZiAoKHNpemUgPCAxNnUpIHx8IChzaXplICUgMTZ1KSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZUVuY3J5cHQpOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgJnBsYWludGV4dFswXSwgc2l6ZSwgJmNpcGhlcnRleHRbMF0pOworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBpZiAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgLyogRUNCIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgaWYgKChzaXplIDwgMTZ1KSB8fCAoc2l6ZSAlIDE2dSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgc3RhdHVzID0gbHRjX2Flc19kZWNyeXB0X2VjYihiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGtleSwga2V5U2l6ZSwga2V5VHlwZSk7CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIENCQyBtb2RlLCBzaXplIG11c3QgYmUgMTYtYnl0ZSBtdWx0aXBsZSAqLworICAgIGlmICgoc2l6ZSA8IDE2dSkgfHwgKHNpemUgJSAxNnUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRW5jcnlwdCk7CisKKyAgICAvKiBXcml0ZSBJViBkYXRhIHRvIHRoZSBjb250ZXh0IHJlZ2lzdGVyLiAqLworICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCAmaXZbMF0sIExUQ19BRVNfSVZfU0laRSwgMCk7CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgcmV0dmFsID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9ucyhiYXNlLCAmcGxhaW50ZXh0WzBdLCBzaXplLCAmY2lwaGVydGV4dFswXSk7CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdHVzX3QgTFRDX0FFU19EZWNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICBpZiAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgLyogQ0JDIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgaWYgKChzaXplIDwgMTZ1KSB8fCAoc2l6ZSAlIDE2dSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogc2V0IERLIGJpdCBpbiB0aGUgTFRDIE1vZGUgUmVnaXN0ZXIgQUFJIGZpZWxkIGZvciBkaXJlY3RseSBsb2FkZWQgZGVjcnlwdCBrZXlzICovCisgICAgaWYgKGtleVR5cGUgPT0ga0xUQ19EZWNyeXB0S2V5KQorICAgIHsKKyAgICAgICAgYmFzZS0+TUQgfD0gKDFVIDw8IGtMVENfTW9kZVJlZ0JpdFNoaWZ0REspOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRGVjcnlwdCk7CisKKyAgICAvKiBXcml0ZSBJViBkYXRhIHRvIHRoZSBjb250ZXh0IHJlZ2lzdGVyLiAqLworICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCAmaXZbMF0sIExUQ19BRVNfSVZfU0laRSwgMCk7CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgcmV0dmFsID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9ucyhiYXNlLCAmY2lwaGVydGV4dFswXSwgc2l6ZSwgJnBsYWludGV4dFswXSk7CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdHVzX3QgTFRDX0FFU19DcnlwdEN0cihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb3VudGVyW0xUQ19BRVNfQkxPQ0tfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb3VudGVybGFzdFtMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc3pMZWZ0KQoreworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICB1aW50MzJfdCBsYXN0U2l6ZTsKKworICAgIGlmICghbHRjX2NoZWNrX2tleV9zaXplKGtleVNpemUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIGxhc3RTaXplID0gMFU7CisgICAgaWYgKGNvdW50ZXJsYXN0ICE9IE5VTEwpCisgICAgeworICAgICAgICAvKiBTcGxpdCB0aGUgc2l6ZSBpbnRvIGZ1bGwgMTYtYnl0ZSBjaHVua3MgYW5kIGxhc3QgaW5jb21wbGV0ZSBibG9jayBkdWUgdG8gTFRDIEFFUyBPRklGTyBlcnJhdGEgKi8KKyAgICAgICAgaWYgKHNpemUgPD0gMTZVKQorICAgICAgICB7CisgICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemU7CisgICAgICAgICAgICBzaXplID0gMFU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBQcm9jZXNzIGFsbCAxNi1ieXRlIGRhdGEgY2h1bmtzLiAqLworICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplICUgMTZVOworICAgICAgICAgICAgaWYgKGxhc3RTaXplID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxhc3RTaXplID0gMTZVOworICAgICAgICAgICAgICAgIHNpemUgLT0gMTZVOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNpemUgLT0gbGFzdFNpemU7IC8qIHNpemUgd2lsbCBiZSByb3VuZGVkIGRvd24gdG8gMTYgYnl0ZSBib3VuZGFyeS4gcmVtYWluaW5nIGJ5dGVzIGluIGxhc3RTaXplICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDVFIsIGtMVENfTW9kZUVuY3J5cHQpOworCisgICAgLyogV3JpdGUgaW5pdGlhbCBjb3VudGVyIGRhdGEgdG8gdGhlIGNvbnRleHQgcmVnaXN0ZXIuCisgICAgICogTk9URSB0aGUgY291bnRlciB2YWx1ZXMgc3RhcnQgYXQgNC1ieXRlcyBvZmZzZXQgaW50byB0aGUgY29udGV4dC4gKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJmNvdW50ZXJbMF0sIDE2VSwgNFUpOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgaW5wdXQsIHNpemUsIG91dHB1dCk7CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKworICAgIGlucHV0ICs9IHNpemU7CisgICAgb3V0cHV0ICs9IHNpemU7CisKKyAgICBpZiAoKGNvdW50ZXJsYXN0ICE9IE5VTEwpICYmIGxhc3RTaXplKQorICAgIHsKKyAgICAgICAgdWludDhfdCB6ZXJvZXNbMTZdID0gezB9OworICAgICAgICBsdGNfbW9kZV90IG1vZGVSZWc7CisKKyAgICAgICAgbW9kZVJlZyA9ICh1aW50MzJfdClrTFRDX0FsZ29yaXRobUFFUyB8ICh1aW50MzJfdClrTFRDX01vZGVDVFIgfCAodWludDMyX3Qpa0xUQ19Nb2RlRW5jcnlwdDsKKyAgICAgICAgLyogV3JpdGUgdGhlIG1vZGUgcmVnaXN0ZXIgdG8gdGhlIGhhcmR3YXJlLiAqLworICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWcgfCAodWludDMyX3Qpa0xUQ19Nb2RlRmluYWxpemU7CisKKyAgICAgICAgLyogY29udGV4dCBpcyByZS11c2VkIChDVFJpKSAqLworCisgICAgICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICAgICAgcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoYmFzZSwgaW5wdXQsIGxhc3RTaXplLCBvdXRwdXQpOworICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3pMZWZ0KQorICAgICAgICB7CisgICAgICAgICAgICAqc3pMZWZ0ID0gMTZVIC0gbGFzdFNpemU7CisgICAgICAgIH0KKworICAgICAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnIHwgKHVpbnQzMl90KWtMVENfTW9kZVVwZGF0ZTsKKworICAgICAgICAvKiBjb250ZXh0IGlzIHJlLXVzZWQgKENUUmkpICovCisKKyAgICAgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgICAgICByZXR2YWwgPSBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YShiYXNlLCB6ZXJvZXMsIDE2VSwgY291bnRlcmxhc3QpOworICAgIH0KKyAgICBsdGNfZ2V0X2NvbnRleHQoYmFzZSwgJmNvdW50ZXJbMF0sIDE2VSwgNFUpOworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfR0NNKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdDTSBDb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfYWVzX2djbV9jaGVja19pbnB1dF9hcmdzKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpCit7CisgICAgaWYgKCFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHRhZyBjYW4gYmUgTlVMTCB0byBza2lwIHRhZyBwcm9jZXNzaW5nICovCisgICAgaWYgKCgha2V5KSB8fCAoaXZTaXplICYmICghaXYpKSB8fCAoYWFkU2l6ZSAmJiAoIWFhZCkpIHx8IChpbnB1dFNpemUgJiYgKCghc3JjKSB8fCAoIWRzdCkpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBvY3RldCBsZW5ndGggb2YgdGFnICh0YWdTaXplKSBtdXN0IGJlIGVsZW1lbnQgb2YgNCw4LDEyLDEzLDE0LDE1LDE2ICovCisgICAgaWYgKCgodGFnU2l6ZSA+IDE2dSkgfHwgKHRhZ1NpemUgPCAxMnUpKSAmJiAodGFnU2l6ZSAhPSA0dSkgJiYgKHRhZ1NpemUgIT0gOHUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIGNoZWNrIGlmIGtleVNpemUgaXMgc3VwcG9ydGVkICovCisgICAgaWYgKCFsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogbm8gSVYgQUFEIERBVEEgbWFrZXMgbm8gc2Vuc2UgKi8KKyAgICBpZiAoMCA9PSAoaW5wdXRTaXplICsgaXZTaXplICsgYWFkU2l6ZSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworLyohCisgKiBAYnJpZWYgUHJvY2VzcyBXcmFwcGVyIGZvciB2b2lkICgqcGZ1bmMpKExUQ19UeXBlKiwgdWludDMyX3QsIGJvb2wpLiBTZXRzIElWIFNpemUgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGl2c2l6ZV9uZXh0KExUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBpdlNpemUsIGJvb2wgaXZfb25seSkKK3sKKyAgICBiYXNlLT5JVlNaID0gTFRDX0lWU1pfSUwoaXZfb25seSkgfCAoKGl2U2l6ZSkmTFRDX0RTX0RTX01BU0spOworfQorCisvKiEKKyAqIEBicmllZiBQcm9jZXNzIFdyYXBwZXIgZm9yIHZvaWQgKCpwZnVuYykoTFRDX1R5cGUqLCB1aW50MzJfdCwgYm9vbCkuIFNldHMgQUFEIFNpemUgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGFhZHNpemVfbmV4dChMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgYWFkU2l6ZSwgYm9vbCBhYWRfb25seSkKK3sKKyAgICBiYXNlLT5BQURTWiA9IExUQ19BQURTWl9BTChhYWRfb25seSkgfCAoKGFhZFNpemUpJkxUQ19EU19EU19NQVNLKTsKK30KKworLyohCisgKiBAYnJpZWYgUHJvY2VzcyBJViBvciBBQUQgc3RyaW5nIGluIG11bHRpLXNlc3Npb24uCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaXYgSVYgb3IgQUFEIGRhdGEKKyAqIEBwYXJhbSBpdlNpemUgU2l6ZSBpbiBieXRlcyBvZiBJViBvciBBQUQgZGF0YQorICogQHBhcmFtIG1vZGVSZWcgTFRDIHBlcmlwaGVyYWwgTW9kZSByZWdpc3RlciB2YWx1ZQorICogQHBhcmFtIGl2X29ubHkgSVYgb25seSBvciBBQUQgb25seSBmbGFnCisgKiBAcGFyYW0gdHlwZSBzZWxlY3RzIGJldHdlZW4gSVYgb3IgQUFECisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfYWVzX2djbV9wcm9jZXNzX2l2X2FhZCgKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqaXYsIHVpbnQzMl90IGl2U2l6ZSwgbHRjX21vZGVfdCBtb2RlUmVnLCBib29sIGl2X29ubHksIGludCB0eXBlLCBsdGNfbW9kZV90IG1vZGVMYXN0KQoreworICAgIHVpbnQzMl90IHN6OworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICB2b2lkICgqbmV4dF9zaXplX2Z1bmMpKExUQ19UeXBlICpsdGNCYXNlLCB1aW50MzJfdCBuZXh0U2l6ZSwgYm9vbCBhdXRoT25seSk7CisKKyAgICBpZiAoKE5VTEwgPT0gaXYpIHx8IChpdlNpemUgPT0gMCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgc3ogPSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOOworICAgIG5leHRfc2l6ZV9mdW5jID0gdHlwZSA9PSBMVENfQUVTX0dDTV9UWVBFX0FBRCA/IGFhZHNpemVfbmV4dCA6IGl2c2l6ZV9uZXh0OworCisgICAgd2hpbGUgKGl2U2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChpdlNpemUgPCBzeikKKyAgICAgICAgeworICAgICAgICAgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICBtb2RlUmVnIHw9IG1vZGVMYXN0OworICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworICAgICAgICAgICAgbmV4dF9zaXplX2Z1bmMoYmFzZSwgaXZTaXplLCBpdl9vbmx5KTsKKyAgICAgICAgICAgIGx0Y19tb3ZlX3RvX2lmaWZvKGJhc2UsIGl2LCBpdlNpemUpOworICAgICAgICAgICAgaXZTaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNldCBhbGdvcml0aG0gc3RhdGUgdG8gVVBEQVRFICovCisgICAgICAgICAgICBtb2RlUmVnICY9IH5MVENfTURfQVNfTUFTSzsKKyAgICAgICAgICAgIG1vZGVSZWcgfD0ga0xUQ19Nb2RlVXBkYXRlOworICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworCisgICAgICAgICAgICBuZXh0X3NpemVfZnVuYyhiYXNlLCAodWludDE2X3Qpc3osIHRydWUpOworICAgICAgICAgICAgbHRjX21vdmVfdG9faWZpZm8oYmFzZSwgaXYsIHN6KTsKKyAgICAgICAgICAgIGl2U2l6ZSAtPSBzejsKKyAgICAgICAgICAgIGl2ICs9IHN6OworICAgICAgICB9CisKKyAgICAgICAgcmV0dmFsID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9CisgICAgfSAvKiBlbmQgd2hpbGUgKi8KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19nY21fcHJvY2VzcyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBlbmNyeXB0TW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlucHV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKQoreworICAgIHN0YXR1c190IHJldHZhbDsgICAgICAgICAgLyogcmV0dXJuIHZhbHVlICovCisgICAgdWludDMyX3QgbWF4X2x0Y19maWZvX3N6OyAvKiBtYXhpbXVtIGRhdGEgc2l6ZSB0aGF0IHdlIGNhbiBwdXQgdG8gTFRDIEZJRk8gaW4gb25lIHNlc3Npb24uIDEyLWJpdCBsaW1pdC4gKi8KKyAgICBsdGNfbW9kZV90IG1vZGVSZWc7ICAgICAgIC8qIHJlYWQgYW5kIHdyaXRlIExUQyBtb2RlIHJlZ2lzdGVyICovCisKKyAgICBib29sIHNpbmdsZV9zZXNfcHJvY19hbGw7IC8qIGl2LCBhYWQgYW5kIHNyYyBkYXRhIGNhbiBiZSBwcm9jZXNzZWQgaW4gb25lIHNlc3Npb24gKi8KKyAgICBib29sIGl2X29ubHk7CisgICAgYm9vbCBhYWRfb25seTsKKworICAgIHJldHZhbCA9IGx0Y19hZXNfZ2NtX2NoZWNrX2lucHV0X2FyZ3MoYmFzZSwgc3JjLCBpdiwgYWFkLCBrZXksIGRzdCwgaW5wdXRTaXplLCBpdlNpemUsIGFhZFNpemUsIGtleVNpemUsIHRhZ1NpemUpOworCisgICAgLyogQVBJIGlucHV0IHZhbGlkYXRpb24gKi8KKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorCisgICAgbWF4X2x0Y19maWZvX3N6ID0gTFRDX0RTX0RTX01BU0s7IC8qIDEyLWJpdCBmaWVsZCBsaW1pdCAqLworCisgICAgLyoKKyAgICAgKiBXcml0ZSB2YWx1ZSB0byBMVEMgQUFEU0laRSAocm91bmRlZCB1cCB0byBuZXh0IDE2IGJ5dGUgYm91bmRhcnkpCisgICAgICogcGx1cyB0aGUgd3JpdGUgdmFsdWUgdG8gTFRDIElWIChyb3VuZGVkIHVwIHRvIG5leHQgMTYgYnl0ZSBib3VuZGFyeSkKKyAgICAgKiBwbHVzIHRoZSBpbnB1dFNpemUuIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIG1heF9sdGNfZmlmb19zegorICAgICAqIHRoZW4gYWxsIGNhbiBiZSBwcm9jZXNzZWQgaW4gb25lIHNlc3Npb24gRklOQUxJWkUuCisgICAgICogT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIHNwbGl0IGludG8gbXVsdGlwbGUgc2Vzc2lvbiwgZ29pbmcgdGhyb3VnaCBVUERBVEUocyksIElOSVRJQUxJWkUsIFVQREFURShzKSBhbmQgRklOQUxJWkUuCisgICAgICovCisgICAgc2luZ2xlX3Nlc19wcm9jX2FsbCA9CisgICAgICAgICgoKGFhZFNpemUgKyAxNXUpICYgMHhmZmZmZmZmMHUpICsgKChpdlNpemUgKyAxNXUpICYgMHhmZmZmZmZmMHUpICsgaW5wdXRTaXplKSA8PSBtYXhfbHRjX2ZpZm9fc3o7CisKKyAgICAvKiBzZXR1cCBrZXksIGFsZ29yaXRobSBhbmQgc2V0IHRoZSBhbGcuc3RhdGUgKi8KKyAgICBpZiAoc2luZ2xlX3Nlc19wcm9jX2FsbCkKKyAgICB7CisgICAgICAgIGx0Y19zeW1tZXRyaWNfZmluYWwoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlR0NNLCBlbmNyeXB0TW9kZSk7CisgICAgICAgIG1vZGVSZWcgPSBiYXNlLT5NRDsKKworICAgICAgICBpdl9vbmx5ID0gKGFhZFNpemUgPT0gMCkgJiYgKGlucHV0U2l6ZSA9PSAwKTsKKyAgICAgICAgYWFkX29ubHkgPSAoaW5wdXRTaXplID09IDApOworCisgICAgICAgIC8qIERTX01BU0sgaGVyZSBpcyBub3QgYSBidWcuIElWIHNpemUgZmllbGQgY2FuIGJlIHdyaXR0ZW4gd2l0aCBtb3JlIHRoYW4gNC1iaXRzLAorICAgICAgICAgKiBhcyB0aGUgSVZTWiB3cml0ZSB2YWx1ZSwgYWxpZ25lZCB0byBuZXh0IDE2IGJ5dGVzIGJvdW5kYXJ5LCBpcyB3cml0dGVuIGFsc28gdG8gdGhlIERhdGEgU2l6ZS4KKyAgICAgICAgICogRm9yIGV4YW1wbGUsIEkgY2FuIHdyaXRlIDIyIHRvIElWU1osIDMyIHdpbGwgYmUgd3JpdHRlbiB0byBEYXRhIFNpemUgYW5kIElWU1ogd2lsbCBoYXZlIHZhbHVlIDYsIHdoaWNoIGlzIDIyCisgICAgICAgICAqIG1vZCAxNi4KKyAgICAgICAgICovCisgICAgICAgIGJhc2UtPklWU1ogPSBMVENfSVZTWl9JTChpdl9vbmx5KSB8ICgoaXZTaXplKSZMVENfRFNfRFNfTUFTSyk7CisgICAgICAgIGx0Y19tb3ZlX3RvX2lmaWZvKGJhc2UsIGl2LCBpdlNpemUpOworICAgICAgICBpZiAoaXZfb25seSAmJiBpdlNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBiYXNlLT5BQURTWiA9IExUQ19BQURTWl9BTChhYWRfb25seSkgfCAoKGFhZFNpemUpJkxUQ19EU19EU19NQVNLKTsKKyAgICAgICAgbHRjX21vdmVfdG9faWZpZm8oYmFzZSwgYWFkLCBhYWRTaXplKTsKKyAgICAgICAgaWYgKGFhZF9vbmx5ICYmIGFhZFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnB1dFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdvcmthcm91bmQgZm9yIHRoZSBMVEMgRGF0YSBTaXplIHJlZ2lzdGVyIHVwZGF0ZSBlcnJhdGEgVEtUMjYxMTgwICovCisgICAgICAgICAgICB3aGlsZSAoMTZVIDwgYmFzZS0+RFMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhKGJhc2UsICZzcmNbMF0sIGlucHV0U2l6ZSwgJmRzdFswXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbHRjX3N5bW1ldHJpY19pbml0KGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUdDTSwgZW5jcnlwdE1vZGUpOworICAgICAgICBtb2RlUmVnID0gYmFzZS0+TUQ7CisKKyAgICAgICAgLyogcHJvY2VzcyBJViAqLworICAgICAgICBpZiAoaXZTaXplKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBsYXN0IGNodW5rIG9mIElWIGlzIGFsd2F5cyBJTklUSUFMSVpFIChmb3IgR0hBU0ggdG8gb2NjdXIpICovCisgICAgICAgICAgICByZXR2YWwgPSBsdGNfYWVzX2djbV9wcm9jZXNzX2l2X2FhZChiYXNlLCBpdiwgaXZTaXplLCBtb2RlUmVnLCB0cnVlLCBMVENfQUVTX0dDTV9UWVBFX0lWLCBrTFRDX01vZGVJbml0KTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBwcm9jZXNzIEFBRCAqLworICAgICAgICBpZiAoYWFkU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQVMgbW9kZSB0byBwcm9jZXNzIGxhc3QgY2h1bmsgb2YgQUFELiBpdCBkaWZmZXJzIGlmIHdlIGFyZSBpbiBHTUFDIG9yIEdDTSAqLworICAgICAgICAgICAgbHRjX21vZGVfdCBsYXN0TW9kZVJlZzsKKyAgICAgICAgICAgIGlmICgwID09IGlucHV0U2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBpZiB0aGVyZSBpcyBubyBEQVRBLCBzZXQgbW9kZSB0byBjb21wdXRlIGZpbmFsIE1BQy4gdGhpcyBpcyBHTUFDIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBsYXN0TW9kZVJlZyA9IGtMVENfTW9kZUluaXRGaW5hbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiB0aGVyZSBhcmUgY29uZmlkZW50aWFsIERBVEEuIHNvIHByb2Nlc3MgbGFzdCBjaHVuayBvZiBBQUQgaW4gVVBEQVRFIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBsYXN0TW9kZVJlZyA9IGtMVENfTW9kZVVwZGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHZhbCA9IGx0Y19hZXNfZ2NtX3Byb2Nlc3NfaXZfYWFkKGJhc2UsIGFhZCwgYWFkU2l6ZSwgbW9kZVJlZywgdHJ1ZSwgTFRDX0FFU19HQ01fVFlQRV9BQUQsIGxhc3RNb2RlUmVnKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiB0aGVyZSBhcmUgREFUQS4gKi8KKyAgICAgICAgaWYgKGlucHV0U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogc2V0IGFsZ29yaXRobSBzdGF0ZSB0byBVUERBVEUgKi8KKyAgICAgICAgICAgIG1vZGVSZWcgJj0gfkxUQ19NRF9BU19NQVNLOworICAgICAgICAgICAgbW9kZVJlZyB8PSBrTFRDX01vZGVVcGRhdGU7CisgICAgICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisgICAgICAgICAgICByZXR2YWwgPQorICAgICAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19kYXRhX211bHRpcGxlKGJhc2UsICZzcmNbMF0sIGlucHV0U2l6ZSwgJmRzdFswXSwgbW9kZVJlZywga0xUQ19Nb2RlSW5pdEZpbmFsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorICAgIHJldHZhbCA9IGx0Y19hZXNfcHJvY2Vzc190YWcoYmFzZSwgdGFnLCB0YWdTaXplLCBtb2RlUmVnLCBMVENfR0NNX1RBR19JRFgpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHQ00gQ29kZSBwdWJsaWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRUYWdHY20oTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgc3RhdHVzID0gbHRjX2Flc19nY21fcHJvY2VzcyhiYXNlLCBrTFRDX01vZGVFbmNyeXB0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBpdlNpemUsIGFhZCwgYWFkU2l6ZSwga2V5LCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dCwgdGFnLCB0YWdTaXplKTsKKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdFRhZ0djbShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICB1aW50OF90IHRlbXBfdGFnWzE2XSA9IHswfTsgLyogbWF4LiBvY3RldCBsZW5ndGggb2YgSW50ZWdyaXR5IENoZWNrIFZhbHVlIElDViAodGFnKSBpcyAxNiAqLworICAgIHVpbnQ4X3QgKnRhZ19wdHI7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgdGFnX3B0ciA9IE5VTEw7CisgICAgaWYgKHRhZykKKyAgICB7CisgICAgICAgIGx0Y19tZW1jcHkodGVtcF90YWcsIHRhZywgdGFnU2l6ZSk7CisgICAgICAgIHRhZ19wdHIgPSAmdGVtcF90YWdbMF07CisgICAgfQorICAgIHN0YXR1cyA9IGx0Y19hZXNfZ2NtX3Byb2Nlc3MoYmFzZSwga0xUQ19Nb2RlRGVjcnlwdCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGl2U2l6ZSwgYWFkLCBhYWRTaXplLCBrZXksIGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbnRleHQsIHRhZ19wdHIsIHRhZ1NpemUpOworCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ0NNIENvZGUgc3RhdGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0YXR1c190IGx0Y19hZXNfY2NtX2NoZWNrX2lucHV0X2FyZ3MoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICBpZiAoIWJhc2UpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogdGFnIGNhbiBiZSBOVUxMIHRvIHNraXAgdGFnIHByb2Nlc3NpbmcgKi8KKyAgICBpZiAoKCFzcmMpIHx8ICghaXYpIHx8ICgha2V5KSB8fCAoIWRzdCkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogc2l6ZSBvZiBOb25jZSAoaXZTaXplKSBtdXN0IGJlIGVsZW1lbnQgb2YgNyw4LDksMTAsMTEsMTIsMTMgKi8KKyAgICBpZiAoKGl2U2l6ZSA8IDd1KSB8fCAoaXZTaXplID4gMTN1KSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisgICAgLyogb2N0ZXQgbGVuZ3RoIG9mIE1BQyAodGFnU2l6ZSkgbXVzdCBiZSBlbGVtZW50IG9mIDQsNiw4LDEwLDEyLDE0LDE2IGZvciB0YWcgcHJvY2Vzc2luZyBvciB6ZXJvIHRvIHNraXAgdGFnCisgICAgICogcHJvY2Vzc2luZyAqLworICAgIGlmICgoKHRhZ1NpemUgPiAwKSAmJiAodGFnU2l6ZSA8IDR1KSkgfHwgKHRhZ1NpemUgPiAxNnUpIHx8ICh0YWdTaXplICYgMXUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIGNoZWNrIGlmIGtleVNpemUgaXMgc3VwcG9ydGVkICovCisgICAgaWYgKCFsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogTFRDIGRvZXMgbm90IHN1cHBvcnQgbW9yZSBBQUQgdGhhbiB0aGlzICovCisgICAgaWYgKGFhZFNpemUgPj0gNjUyODB1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgdWludDMyX3Qgc3dhcF9ieXRlcyh1aW50MzJfdCBpbikKK3sKKyAgICByZXR1cm4gKCgoaW4gJiAweDAwMDAwMGZmdSkgPDwgMjQpIHwgKChpbiAmIDB4MDAwMGZmMDB1KSA8PCA4KSB8ICgoaW4gJiAweDAwZmYwMDAwdSkgPj4gOCkgfAorICAgICAgICAgICAgKChpbiAmIDB4ZmYwMDAwMDB1KSA+PiAyNCkpOworfQorCitzdGF0aWMgdm9pZCBsdGNfYWVzX2NjbV9jb250ZXh0X2luaXQoCisgICAgTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGlucHV0U2l6ZSwgY29uc3QgdWludDhfdCAqaXYsIHVpbnQzMl90IGl2U2l6ZSwgdWludDMyX3QgYWFkU2l6ZSwgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICBsdGNfeGNtX2Jsb2NrX3QgYmxrOworICAgIGx0Y194Y21fYmxvY2tfdCBibGtaZXJvID0ge3sweDB1LCAweDB1LCAweDB1LCAweDB1fX07CisKKyAgICBpbnQgcTsgLyogb2N0ZXQgbGVuZ3RoIG9mIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2N0ZXQgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkLiBjb21wdXRlZCBhcyAoMTUgLSBuKSwgd2hlcmUgbiBpcworICAgICAgICAgICAgICBsZW5ndGggb2Ygbm9uY2UoPWl2U2l6ZSkgKi8KKyAgICB1aW50OF90IGZsYWdzOyAvKiBmbGFncyBmaWVsZCBpbiBCMCBhbmQgQ1RSMCAqLworCisgICAgLyogY29tcHV0ZSBCMCAqLworICAgIGx0Y19tZW1jcHkoJmJsaywgJmJsa1plcm8sIHNpemVvZihibGspKTsKKyAgICAvKiB0YWdTaXplIC0gc2l6ZSBvZiBvdXRwdXQgTUFDICovCisgICAgcSA9IDE1IC0gaXZTaXplOworICAgIGZsYWdzID0gKHVpbnQ4X3QpKDggKiAoKHRhZ1NpemUgLSAyKSAvIDIpICsgcSAtIDEpOyAvKiA4Kk0nICsgTCcgKi8KKyAgICBpZiAoYWFkU2l6ZSkKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IDB4NDA7IC8qIEFkYXRhICovCisgICAgfQorICAgIGJsay5iWzBdID0gZmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgZmllbGQgKi8KKyAgICBibGsud1szXSA9IHN3YXBfYnl0ZXMoaW5wdXRTaXplKTsgIC8qIG1lc3NhZ2Ugc2l6ZSwgbW9zdCBzaWduaWZpY2FudCBieXRlIGZpcnN0ICovCisgICAgbHRjX21lbWNweSgmYmxrLmJbMV0sIGl2LCBpdlNpemUpOyAvKiBub25jZSBmaWVsZCAqLworCisgICAgLyogV3JpdGUgQjAgZGF0YSB0byB0aGUgY29udGV4dCByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJmJsay5iWzBdLCAxNiwgMCk7CisKKyAgICAvKiBXcml0ZSBDVFIwIHRvIHRoZSBjb250ZXh0IHJlZ2lzdGVyLgorICAgICAqLworICAgIGx0Y19tZW1jcHkoJmJsaywgJmJsa1plcm8sIHNpemVvZihibGspKTsgLyogY3RyKDApIGZpZWxkID0gemVybyAqLworICAgIGJsay5iWzBdID0gcSAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgZmllbGQgKi8KKyAgICBsdGNfbWVtY3B5KCZibGsuYlsxXSwgaXYsIGl2U2l6ZSk7ICAgICAgIC8qIG5vbmNlIGZpZWxkICovCisgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsICZibGsuYlswXSwgMTYsIDQpOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX2Flc19jY21fcHJvY2Vzc19hYWQoCisgICAgTFRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IGlucHV0U2l6ZSwgY29uc3QgdWludDhfdCAqYWFkLCB1aW50MzJfdCBhYWRTaXplLCBsdGNfbW9kZV90ICptb2RlUmVnKQoreworICAgIGx0Y194Y21fYmxvY2tfdCBibGsgPSB7ezB4MHUsIDB4MHUsIDB4MHUsIDB4MHV9fTsKKyAgICB1aW50MzJfdCBzd2FwcGVkOyAvKiBob2xkcyBieXRlIHN3YXAgb2YgdWludDMyX3QgKi8KKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICBpZiAoYWFkU2l6ZSkKKyAgICB7CisgICAgICAgIGJvb2wgYWFkX29ubHk7CisgICAgICAgIGJvb2wgYWFkX3NpbmdsZV9zZXNzaW9uOworCisgICAgICAgIHVpbnQzMl90IHN6ID0gMDsKKworICAgICAgICBhYWRfb25seSA9IGlucHV0U2l6ZSA9PSAwdTsKKyAgICAgICAgYWFkX3NpbmdsZV9zZXNzaW9uID0gKCgoYWFkU2l6ZSArIDJ1KSArIDE1dSkgJiAweGZmZmZmZmYwdSkgPD0gTFRDX0ZJRk9fU1pfTUFYX0RPV05fQUxHTjsKKworICAgICAgICAvKiBsaW1pdCBieSBDQ00gc3BlYzogMl4xNiAtIDJeOCA9IDY1MjgwICovCisKKyAgICAgICAgLyogZW5jb2RpbmcgaXMgdHdvIG9jdGV0cywgbXNieXRlIGZpcnN0ICovCisgICAgICAgIHN3YXBwZWQgPSBzd2FwX2J5dGVzKGFhZFNpemUpOworICAgICAgICBsdGNfbWVtY3B5KCZibGsuYlswXSwgKCh1aW50OF90ICopJnN3YXBwZWQpICsgc2l6ZW9mKHVpbnQxNl90KSwgc2l6ZW9mKHVpbnQxNl90KSk7CisKKyAgICAgICAgc3ogPSBhYWRTaXplID4gMTR1ID8gMTR1IDogYWFkU2l6ZTsgLyogbGltaXQgYWFkIHRvIHRoZSBlbmQgb2YgMTYgYnl0ZXMgYmxrICovCisgICAgICAgIGx0Y19tZW1jcHkoJmJsay5iWzJdLCBhYWQsIHN6KTsgICAgIC8qIGZpbGwgQjEgd2l0aCBhYWQgKi8KKworICAgICAgICBpZiAoYWFkX3NpbmdsZV9zZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5BQURTWiA9IExUQ19BQURTWl9BTChhYWRfb25seSkgfCAoKGFhZFNpemUgKyAyVSkgJiBMVENfRFNfRFNfTUFTSyk7CisgICAgICAgICAgICAvKiBtb3ZlIGZpcnN0IEFBRCBibG9jayAoMTYgYnl0ZXMgYmxvY2sgQjEpIHRvIEZJRk8gKi8KKyAgICAgICAgICAgIGx0Y19tb3ZlX2Jsb2NrX3RvX2lmaWZvKGJhc2UsICZibGssIHNpemVvZihibGspKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPkFBRFNaID0gTFRDX0FBRFNaX0FMKHRydWUpIHwgKDE2VSk7CisgICAgICAgICAgICAvKiBtb3ZlIGZpcnN0IEFBRCBibG9jayAoMTYgYnl0ZXMgYmxvY2sgQjEpIHRvIEZJRk8gKi8KKyAgICAgICAgICAgIGx0Y19tb3ZlX2Jsb2NrX3RvX2lmaWZvKGJhc2UsICZibGssIHNpemVvZihibGspKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHRyYWNrIGNvbnN1bWVkIEFBRC4gc3ogYnl0ZXMgaGF2ZSBiZWVuIG1vdmVkIHRvIGZpZm8uICovCisgICAgICAgIGFhZFNpemUgLT0gc3o7CisgICAgICAgIGFhZCArPSBzejsKKworICAgICAgICBpZiAoYWFkX3NpbmdsZV9zZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBtb3ZlIHJlbWFpbmluZyBBQUQgdG8gRklGTywgdGhlbiByZXR1cm4sIHRvIGNvbnRpbnVlIHdpdGggTURBVEEgKi8KKyAgICAgICAgICAgIGx0Y19tb3ZlX3RvX2lmaWZvKGJhc2UsIGFhZCwgYWFkU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWFkU2l6ZSA9PSAwdSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dmFsID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGFhZFNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICptb2RlUmVnICY9IH5MVENfTURfQVNfTUFTSzsKKyAgICAgICAgICAgICAgICAqbW9kZVJlZyB8PSAodWludDMyX3Qpa0xUQ19Nb2RlVXBkYXRlOworICAgICAgICAgICAgICAgIGJhc2UtPk1EID0gKm1vZGVSZWc7CisKKyAgICAgICAgICAgICAgICBzeiA9IExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR047CisgICAgICAgICAgICAgICAgaWYgKGFhZFNpemUgPCBzeikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJhc2UtPkFBRFNaID0gTFRDX0FBRFNaX0FMKGFhZF9vbmx5KSB8IChhYWRTaXplICYgTFRDX0RTX0RTX01BU0spOworICAgICAgICAgICAgICAgICAgICBsdGNfbW92ZV90b19pZmlmbyhiYXNlLCBhYWQsIGFhZFNpemUpOworICAgICAgICAgICAgICAgICAgICBhYWRTaXplID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+QUFEU1ogPSBMVENfQUFEU1pfQUwodHJ1ZSkgfCAoc3ogJiBMVENfRFNfRFNfTUFTSyk7CisgICAgICAgICAgICAgICAgICAgIGx0Y19tb3ZlX3RvX2lmaWZvKGJhc2UsIGFhZCwgc3opOworICAgICAgICAgICAgICAgICAgICBhYWRTaXplIC09IHN6OworICAgICAgICAgICAgICAgICAgICBhYWQgKz0gc3o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBlbmQgd2hpbGUgKi8KKyAgICAgICAgfSAgICAgLyogZW5kIGVsc2UgKi8KKyAgICB9ICAgICAgICAgLyogZW5kIGlmICovCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHN0YXR1c190IGx0Y19hZXNfY2NtX3Byb2Nlc3MoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgZW5jcnlwdE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7ICAgICAgICAgIC8qIHJldHVybiB2YWx1ZSAqLworICAgIHVpbnQzMl90IG1heF9sdGNfZmlmb19zejsgLyogbWF4aW11bSBkYXRhIHNpemUgdGhhdCB3ZSBjYW4gcHV0IHRvIExUQyBGSUZPIGluIG9uZSBzZXNzaW9uLiAxMi1iaXQgbGltaXQuICovCisgICAgbHRjX21vZGVfdCBtb2RlUmVnOyAgICAgICAvKiByZWFkIGFuZCB3cml0ZSBMVEMgbW9kZSByZWdpc3RlciAqLworCisgICAgYm9vbCBzaW5nbGVfc2VzX3Byb2NfYWxsOyAvKiBhYWQgYW5kIHNyYyBkYXRhIGNhbiBiZSBwcm9jZXNzZWQgaW4gb25lIHNlc3Npb24gKi8KKworICAgIHJldHZhbCA9IGx0Y19hZXNfY2NtX2NoZWNrX2lucHV0X2FyZ3MoYmFzZSwgc3JjLCBpdiwga2V5LCBkc3QsIGl2U2l6ZSwgYWFkU2l6ZSwga2V5U2l6ZSwgdGFnU2l6ZSk7CisKKyAgICAvKiBBUEkgaW5wdXQgdmFsaWRhdGlvbiAqLworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgICBtYXhfbHRjX2ZpZm9fc3ogPSBMVENfRFNfRFNfTUFTSzsgLyogMTItYml0IGZpZWxkIGxpbWl0ICovCisKKyAgICAvKiBXcml0ZSB2YWx1ZSB0byBMVEMgQUFEU0laRSB3aWxsIGJlIChhYWRTaXplKzIpIHZhbHVlLgorICAgICAqIFRoZSB2YWx1ZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gbmV4dCAxNiBieXRlIGJvdW5kYXJ5IGFuZCBhZGRlZCB0byBEYXRhIFNpemUgcmVnaXN0ZXIuCisgICAgICogV2UgdGhlbiBhZGQgaW5wdXRTaXplIHRvIERhdGEgU2l6ZSByZWdpc3Rlci4gSWYgdGhlIHJlc3VsdGluZyBEYXRhIFNpemUgaXMgbGVzcyB0aGFuIG1heF9sdGNfZmlmb19zegorICAgICAqIHRoZW4gYWxsIGNhbiBiZSBwcm9jZXNzZWQgaW4gb25lIHNlc3Npb24gSU5JVElBTElaRS9GSU5BTElaRS4KKyAgICAgKiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gc3BsaXQgaW50byBtdWx0aXBsZSBzZXNzaW9uLCBnb2luZyB0aHJvdWdoIElOSVRJQUxJWkUsIFVQREFURSAoaWYgcmVxdWlyZWQpIGFuZCBGSU5BTElaRS4KKyAgICAgKi8KKyAgICBzaW5nbGVfc2VzX3Byb2NfYWxsID0gKCgoKGFhZFNpemUgKyAyKSArIDE1dSkgJiAweGZmZmZmZmYwdSkgKyBpbnB1dFNpemUpIDw9IG1heF9sdGNfZmlmb19zejsKKworICAgIC8qIHNldHVwIGtleSwgYWxnb3JpdGhtIGFuZCBzZXQgdGhlIGFsZy5zdGF0ZSB0byBJTklUSUFMSVpFICovCisgICAgaWYgKHNpbmdsZV9zZXNfcHJvY19hbGwpCisgICAgeworICAgICAgICBsdGNfc3ltbWV0cmljX2luaXRfZmluYWwoYmFzZSwga2V5LCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobUFFUywga0xUQ19Nb2RlQ0NNLCBlbmNyeXB0TW9kZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGx0Y19zeW1tZXRyaWNfaW5pdChiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDQ00sIGVuY3J5cHRNb2RlKTsKKyAgICB9CisgICAgbW9kZVJlZyA9IGJhc2UtPk1EOworCisgICAgLyogSW5pdGlhbGl6ZSBMVEMgY29udGV4dCBmb3IgQUVTIENDTTogYmxvY2sgQjAgYW5kIGluaXRpYWwgY291bnRlciBDVFIwICovCisgICAgbHRjX2Flc19jY21fY29udGV4dF9pbml0KGJhc2UsIGlucHV0U2l6ZSwgaXYsIGl2U2l6ZSwgYWFkU2l6ZSwgdGFnU2l6ZSk7CisKKyAgICAvKiBQcm9jZXNzIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YSwgaWYgdGhlcmUgYXJlIGFueS4KKyAgICAgKiBOZWVkIHRvIHNwbGl0IHRoZSBqb2IgaW50byBpbmRpdmlkdWFsIHNlc3Npb25zIG9mIHVwIHRvIDQwOTYgYnl0ZXMsIGR1ZSB0byBMVEMgSUZJRk8gZGF0YSBzaXplIGxpbWl0LgorICAgICAqLworICAgIHJldHZhbCA9IGx0Y19hZXNfY2NtX3Byb2Nlc3NfYWFkKGJhc2UsIGlucHV0U2l6ZSwgYWFkLCBhYWRTaXplLCAmbW9kZVJlZyk7CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKworICAgIC8qIFdvcmthcm91bmQgZm9yIHRoZSBMVEMgRGF0YSBTaXplIHJlZ2lzdGVyIHVwZGF0ZSBlcnJhdGEgVEtUMjYxMTgwICovCisgICAgaWYgKGlucHV0U2l6ZSkKKyAgICB7CisgICAgICAgIHdoaWxlICgxNnUgPCBiYXNlLT5EUykKKyAgICAgICAgeworICAgICAgICB9CisgICAgfQorCisgICAgLyogUHJvY2VzcyBtZXNzYWdlICovCisgICAgaWYgKHNpbmdsZV9zZXNfcHJvY19hbGwpCisgICAgeworICAgICAgICByZXR2YWwgPSBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YShiYXNlLCAmc3JjWzBdLCBpbnB1dFNpemUsICZkc3RbMF0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR2YWwgPSBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YV9tdWx0aXBsZShiYXNlLCAmc3JjWzBdLCBpbnB1dFNpemUsICZkc3RbMF0sIG1vZGVSZWcsIGtMVENfTW9kZUZpbmFsaXplKTsKKyAgICB9CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSByZXR2YWwpCisgICAgeworICAgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKyAgICByZXR2YWwgPSBsdGNfYWVzX3Byb2Nlc3NfdGFnKGJhc2UsIHRhZywgdGFnU2l6ZSwgbW9kZVJlZywgTFRDX0NDTV9UQUdfSURYKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ0NNIENvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0VGFnQ2NtKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBzdGF0dXMgPSBsdGNfYWVzX2NjbV9wcm9jZXNzKGJhc2UsIGtMVENfTW9kZUVuY3J5cHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGl2U2l6ZSwgYWFkLCBhYWRTaXplLCBrZXksIGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCB0YWcsIHRhZ1NpemUpOworCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX0FFU19EZWNyeXB0VGFnQ2NtKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YWdTaXplKQoreworICAgIHVpbnQ4X3QgdGVtcF90YWdbMTZdID0gezB9OyAvKiBtYXguIG9jdGV0IGxlbmd0aCBvZiBNQUMgKHRhZykgaXMgMTYgKi8KKyAgICB1aW50OF90ICp0YWdfcHRyOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIHRhZ19wdHIgPSBOVUxMOworICAgIGlmICh0YWcpCisgICAgeworICAgICAgICBsdGNfbWVtY3B5KHRlbXBfdGFnLCB0YWcsIHRhZ1NpemUpOworICAgICAgICB0YWdfcHRyID0gJnRlbXBfdGFnWzBdOworICAgIH0KKworICAgIHN0YXR1cyA9IGx0Y19hZXNfY2NtX3Byb2Nlc3MoYmFzZSwga0xUQ19Nb2RlRGVjcnlwdCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGl2U2l6ZSwgYWFkLCBhYWRTaXplLCBrZXksIGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbnRleHQsIHRhZ19wdHIsIHRhZ1NpemUpOworCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIC8gM0RFUyBDb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfZGVzX3Byb2Nlc3MoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlQXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBtb2RlRW5jKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIC8qIGFsbCBidXQgT0ZCLCBzaXplIG11c3QgYmUgOC1ieXRlIG11bHRpcGxlICovCisgICAgaWYgKChtb2RlQXMgIT0ga0xUQ19Nb2RlT0ZCKSAmJiAoKHNpemUgPCA4dSkgfHwgKHNpemUgJSA4dSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsICZrZXlbMF0sIExUQ19ERVNfS0VZX1NJWkUsIGtMVENfQWxnb3JpdGhtREVTLCBtb2RlQXMsIG1vZGVFbmMpOworCisgICAgaWYgKChtb2RlQXMgIT0ga0xUQ19Nb2RlRUNCKSkKKyAgICB7CisgICAgICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCBpdiwgTFRDX0RFU19JVl9TSVpFLCAwKTsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgcmV0dmFsID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9ucyhiYXNlLCBpbnB1dCwgc2l6ZSwgb3V0cHV0KTsKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIGZhbHNlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0dXNfdCBsdGNfM2Rlc19jaGVja19pbnB1dF9hcmdzKGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlQXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleTIpCit7CisgICAgLyogYWxsIGJ1dCBPRkIsIHNpemUgbXVzdCBiZSA4LWJ5dGUgbXVsdGlwbGUgKi8KKyAgICBpZiAoKG1vZGVBcyAhPSBrTFRDX01vZGVPRkIpICYmICgoc2l6ZSA8IDh1KSB8fCAoc2l6ZSAlIDh1KSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgaWYgKChrZXkxID09IE5VTEwpIHx8IChrZXkyID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjXzNkZXNfcHJvY2VzcyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlQXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9lbmNyeXB0X3QgbW9kZUVuYykKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisgICAgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRSAqIDNdOworICAgIHVpbnQ4X3Qga2V5U2l6ZSA9IExUQ19ERVNfS0VZX1NJWkUgKiAyOworCisgICAgcmV0dmFsID0gbHRjXzNkZXNfY2hlY2tfaW5wdXRfYXJncyhtb2RlQXMsIHNpemUsIGtleTEsIGtleTIpOworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gcmV0dmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgICBsdGNfbWVtY3B5KCZrZXlbMF0sICZrZXkxWzBdLCBMVENfREVTX0tFWV9TSVpFKTsKKyAgICBsdGNfbWVtY3B5KCZrZXlbTFRDX0RFU19LRVlfU0laRV0sICZrZXkyWzBdLCBMVENfREVTX0tFWV9TSVpFKTsKKyAgICBpZiAoa2V5MykKKyAgICB7CisgICAgICAgIGx0Y19tZW1jcHkoJmtleVtMVENfREVTX0tFWV9TSVpFICogMl0sICZrZXkzWzBdLCBMVENfREVTX0tFWV9TSVpFKTsKKyAgICAgICAga2V5U2l6ZSA9IHNpemVvZihrZXkpOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsICZrZXlbMF0sIGtleVNpemUsIGtMVENfQWxnb3JpdGhtM0RFUywgbW9kZUFzLCBtb2RlRW5jKTsKKworICAgIGlmICgobW9kZUFzICE9IGtMVENfTW9kZUVDQikpCisgICAgeworICAgICAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgaXYsIExUQ19ERVNfSVZfU0laRSwgMCk7CisgICAgfQorCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIHJldHZhbCA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnMoYmFzZSwgaW5wdXQsIHNpemUsIG91dHB1dCk7CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBERVMgLyAzREVTIENvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0RWNiKAorICAgIExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsIHVpbnQ4X3QgKmNpcGhlcnRleHQsIHVpbnQzMl90IHNpemUsIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBOVUxMLCBrZXksIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdEVjYigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwgdWludDhfdCAqcGxhaW50ZXh0LCB1aW50MzJfdCBzaXplLCBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgTlVMTCwga2V5LCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNCQywga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5LCBrTFRDX01vZGVDRkIsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y19kZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXksIGtMVENfTW9kZUNGQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlT0ZCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0T2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5LCBrTFRDX01vZGVPRkIsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0RWNiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgTlVMTCwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgTlVMTCwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUVDQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUNGQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUNGQiwga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVDRkIsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2VzcyhiYXNlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVDRkIsIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0T2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlT0ZCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3MoYmFzZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlT0ZCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRPZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzKGJhc2UsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZU9GQiwga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhBU0ggRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyNkZWZpbmUgTFRDX1NIQV9CTE9DS19TSVpFIDY0ICAgICAgICAgICAgICAgICAgLyohPCBTSEEtMSwgU0hBLTIyNCAmIFNIQS0yNTYgYmxvY2sgc2l6ZSAgKi8KKyNkZWZpbmUgTFRDX0hBU0hfQkxPQ0tfU0laRSBMVENfU0hBX0JMT0NLX1NJWkUgLyohPCBMVEMgaGFzaCBibG9jayBzaXplICAqLworCitlbnVtIF9sdGNfc2hhX2RpZ2VzdF9sZW4KK3sKKyAgICBrTFRDX1J1bkxlblNoYTEgPSAyOHUsCisgICAga0xUQ19PdXRMZW5TaGExID0gMjB1LAorICAgIGtMVENfUnVuTGVuU2hhMjI0ID0gNDB1LAorICAgIGtMVENfT3V0TGVuU2hhMjI0ID0gMjh1LAorICAgIGtMVENfUnVuTGVuU2hhMjU2ID0gNDB1LAorICAgIGtMVENfT3V0TGVuU2hhMjU2ID0gMzJ1LAorfTsKKyNlbHNlCisjZGVmaW5lIExUQ19IQVNIX0JMT0NLX1NJWkUgTFRDX0FFU19CTE9DS19TSVpFIC8qITwgTFRDIGhhc2ggYmxvY2sgc2l6ZSAgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKworLyohIEludGVybmFsIHN0YXRlcyBvZiB0aGUgSEFTSCBjcmVhdGlvbiBwcm9jZXNzICovCit0eXBlZGVmIGVudW0gX2x0Y19oYXNoX2FsZ29fc3RhdGUKK3sKKyAgICBrTFRDX0hhc2hJbml0ID0gMXUsIC8qITwgS2V5IGluIHRoZSBIQVNIIGNvbnRleHQgaXMgdGhlIGlucHV0IGtleS4gKi8KKyAgICBrTFRDX0hhc2hVcGRhdGUsICAgIC8qITwgSEFTSCBjb250ZXh0IGhhcyBhbGdvcml0aG0gc3BlY2lmaWMgY29udGV4dDogTUFDLCBLMiBhbmQgSzMgKFhDQkMtTUFDKSwgTUFDIGFuZCBMIChDTUFDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgZGlnZXN0IChNREhBKS4gS2V5IGluIHRoZSBIQVNIIGNvbnRleHQgaXMgdGhlIGRlcml2ZWQga2V5LiAqLworfSBsdGNfaGFzaF9hbGdvX3N0YXRlX3Q7CisKKy8qISAxNi82NC1ieXRlIGJsb2NrIHJlcHJlc2VudGVkIGFzIGJ5dGUgYXJyYXkgb3IgNC8xNiAzMi1iaXQgd29yZHMgKi8KK3R5cGVkZWYgdW5pb24gX2x0Y19oYXNoX2Jsb2NrCit7CisgICAgdWludDMyX3Qgd1tMVENfSEFTSF9CTE9DS19TSVpFIC8gNF07IC8qITwgYXJyYXkgb2YgMzItYml0IHdvcmRzICovCisgICAgdWludDhfdCBiW0xUQ19IQVNIX0JMT0NLX1NJWkVdOyAgICAgIC8qITwgYnl0ZSBhcnJheSAqLworfSBsdGNfaGFzaF9ibG9ja190OworCisvKiEgRGVmaW5pdGlvbnMgb2YgaW5kZXhlcyBpbnRvIGhhc2ggY29udGV4dCBhcnJheSAqLwordHlwZWRlZiBlbnVtIF9sdGNfaGFzaF9jdHhfaW5kZXhlcworeworICAgIGtMVENfSGFzaEN0eEtleVN0YXJ0SWR4ID0gMTIsIC8qITwgY29udGV4dCB3b3JkIGFycmF5IGluZGV4IHdoZXJlIGtleSBpcyBzdG9yZWQgKi8KKyAgICBrTFRDX0hhc2hDdHhLZXlTaXplID0gMjAsICAgICAvKiE8IGNvbnRleHQgd29yZCBhcnJheSBpbmRleCB3aGVyZSBrZXkgc2l6ZSBpcyBzdG9yZWQgKi8KKyAgICBrTFRDX0hhc2hDdHhOdW1Xb3JkcyA9IDIxLCAgICAvKiE8IG51bWJlciBvZiBjb250ZXh0IGFycmF5IDMyLWJpdCB3b3JkcyAgKi8KK30gbHRjX2hhc2hfY3R4X2luZGV4ZXM7CisKK3R5cGVkZWYgc3RydWN0IF9sdGNfaGFzaF9jdHhfaW50ZXJuYWwKK3sKKyAgICBsdGNfaGFzaF9ibG9ja190IGJsazsgLyohPCBtZW1vcnkgYnVmZmVyLiBvbmx5IGZ1bGwgNjQvMTYtYnl0ZSBibG9ja3MgYXJlIHdyaXR0ZW4gdG8gTFRDIGR1cmluZyBoYXNoIHVwZGF0ZXMgKi8KKyAgICB1aW50MzJfdCBibGtzejsgICAgICAgLyohPCBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgaW4gbWVtb3J5IGJ1ZmZlciAqLworICAgIExUQ19UeXBlICpiYXNlOyAgICAgICAvKiE8IExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyAqLworICAgIGx0Y19oYXNoX2FsZ29fdCBhbGdvOyAvKiE8IHNlbGVjdGVkIGFsZ29yaXRobSBmcm9tIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIGFsZ29yaXRobXMgaW4gbHRjX2Rydl9oYXNoX2FsZ28gKi8KKyAgICBsdGNfaGFzaF9hbGdvX3N0YXRlX3Qgc3RhdGU7ICAgICAgICAgLyohPCBmaW5pdGUgbWFjaGluZSBzdGF0ZSBvZiB0aGUgaGFzaCBzb2Z0d2FyZSBwcm9jZXNzICovCisgICAgdWludDMyX3Qgd29yZFtrTFRDX0hhc2hDdHhOdW1Xb3Jkc107IC8qITwgTFRDIG1vZHVsZSBjb250ZXh0IHRoYXQgbmVlZHMgdG8gYmUgc2F2ZWQvcmVzdG9yZWQgYmV0d2VlbiBMVEMgam9icyAqLworfSBsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhBU0ggQ29kZSBzdGF0aWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgbHRjX2hhc2hfY2hlY2tfaW5wdXRfYWxnKGx0Y19oYXNoX2FsZ29fdCBhbGdvKQoreworICAgIGlmICgoYWxnbyAhPSBrTFRDX1hjYmNNYWMpICYmIChhbGdvICE9IGtMVENfQ21hYykKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICAmJiAoYWxnbyAhPSBrTFRDX1NoYTEpICYmIChhbGdvICE9IGtMVENfU2hhMjI0KSAmJiAoYWxnbyAhPSBrTFRDX1NoYTI1NikKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbHRjX2hhc2hfYWxnX2lzX2NtYWMobHRjX2hhc2hfYWxnb190IGFsZ28pCit7CisgICAgcmV0dXJuICgoYWxnbyA9PSBrTFRDX1hjYmNNYWMpIHx8IChhbGdvID09IGtMVENfQ21hYykpOworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKK3N0YXRpYyBpbmxpbmUgYm9vbCBsdGNfaGFzaF9hbGdfaXNfc2hhKGx0Y19oYXNoX2FsZ29fdCBhbGdvKQoreworICAgIHJldHVybiAoKGFsZ28gPT0ga0xUQ19TaGExKSB8fCAoYWxnbyA9PSBrTFRDX1NoYTIyNCkgfHwgKGFsZ28gPT0ga0xUQ19TaGEyNTYpKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworCitzdGF0aWMgc3RhdHVzX3QgbHRjX2hhc2hfY2hlY2tfaW5wdXRfYXJncygKKyAgICBMVENfVHlwZSAqYmFzZSwgbHRjX2hhc2hfY3R4X3QgKmN0eCwgbHRjX2hhc2hfYWxnb190IGFsZ28sIGNvbnN0IHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5U2l6ZSkKK3sKKyAgICAvKiBDaGVjayB2YWxpZGl0eSBvZiBpbnB1dCBhbGdvcml0aG0gKi8KKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IGx0Y19oYXNoX2NoZWNrX2lucHV0X2FsZyhhbGdvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAoKE5VTEwgPT0gY3R4KSB8fCAoTlVMTCA9PSBiYXNlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBpZiAobHRjX2hhc2hfYWxnX2lzX2NtYWMoYWxnbykpCisgICAgeworICAgICAgICBpZiAoKE5VTEwgPT0ga2V5KSB8fCAoIWx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfaGFzaF9jaGVja19jb250ZXh0KGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICpjdHhJbnRlcm5hbCwgY29uc3QgdWludDhfdCAqZGF0YSkKK3sKKyAgICBpZiAoKE5VTEwgPT0gZGF0YSkgfHwgKE5VTEwgPT0gY3R4SW50ZXJuYWwpIHx8IChOVUxMID09IGN0eEludGVybmFsLT5iYXNlKSB8fAorICAgICAgICAoa1N0YXR1c19TdWNjZXNzICE9IGx0Y19oYXNoX2NoZWNrX2lucHV0X2FsZyhjdHhJbnRlcm5hbC0+YWxnbykpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0aWMgdWludDMyX3QgbHRjX2hhc2hfYWxnbzJtb2RlKGx0Y19oYXNoX2FsZ29fdCBhbGdvLCBsdGNfbW9kZV9hbGdvcml0aG1fc3RhdGVfdCBhc01vZGUsIHVpbnQzMl90ICphbGdPdXRTaXplKQoreworICAgIHVpbnQzMl90IG1vZGVSZWcgPSAwdTsKKyAgICB1aW50MzJfdCBvdXRTaXplID0gMHU7CisKKyAgICAvKiBTZXQgTFRDIGFsZ29yaXRobSAqLworICAgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgICAgIGNhc2Uga0xUQ19YY2JjTWFjOgorICAgICAgICAgICAgbW9kZVJlZyA9ICh1aW50MzJfdClrTFRDX0FsZ29yaXRobUFFUyB8ICh1aW50MzJfdClrTFRDX01vZGVYQ0JDTUFDOworICAgICAgICAgICAgb3V0U2l6ZSA9IDE2dTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfQ21hYzoKKyAgICAgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1BRVMgfCAodWludDMyX3Qpa0xUQ19Nb2RlQ01BQzsKKyAgICAgICAgICAgIG91dFNpemUgPSAxNnU7CisgICAgICAgICAgICBicmVhazsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICBjYXNlIGtMVENfU2hhMToKKyAgICAgICAgICAgIG1vZGVSZWcgPSAodWludDMyX3Qpa0xUQ19BbGdvcml0aG1TSEExOworICAgICAgICAgICAgb3V0U2l6ZSA9IGtMVENfT3V0TGVuU2hhMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfU2hhMjI0OgorICAgICAgICAgICAgbW9kZVJlZyA9ICh1aW50MzJfdClrTFRDX0FsZ29yaXRobVNIQTIyNDsKKyAgICAgICAgICAgIG91dFNpemUgPSBrTFRDX091dExlblNoYTIyNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfU2hhMjU2OgorICAgICAgICAgICAgbW9kZVJlZyA9ICh1aW50MzJfdClrTFRDX0FsZ29yaXRobVNIQTI1NjsKKyAgICAgICAgICAgIG91dFNpemUgPSBrTFRDX091dExlblNoYTI1NjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtb2RlUmVnIHw9ICh1aW50MzJfdClhc01vZGU7CisgICAgaWYgKGFsZ091dFNpemUpCisgICAgeworICAgICAgICAqYWxnT3V0U2l6ZSA9IG91dFNpemU7CisgICAgfQorCisgICAgcmV0dXJuIG1vZGVSZWc7Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19oYXNoX2VuZ2luZV9pbml0KGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICpjdHgpCit7CisgICAgdWludDhfdCAqa2V5OworICAgIHVpbnQzMl90IGtleVNpemU7CisgICAgTFRDX1R5cGUgKmJhc2U7CisgICAgbHRjX21vZGVfc3ltbWV0cmljX2FsZ190IGFsZ287CisKKyAgICBiYXNlID0gY3R4LT5iYXNlOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgaWYgKGx0Y19oYXNoX2FsZ19pc19jbWFjKGN0eC0+YWxnbykpCisgICAgeworI2VuZGlmICAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICAvKgorICAgICAgICAgKiAgd29yZFtrTHRjQ21hY0N0eEtleVNpemVdID0ga2V5X2xlbmd0aAorICAgICAgICAgKiAgd29yZFsxLThdID0ga2V5CisgICAgICAgICAqLworICAgICAgICBrZXlTaXplID0gY3R4LT53b3JkW2tMVENfSGFzaEN0eEtleVNpemVdOworICAgICAgICBrZXkgPSAodWludDhfdCAqKSZjdHgtPndvcmRba0xUQ19IYXNoQ3R4S2V5U3RhcnRJZHhdOworCisgICAgICAgIC8qIHNldCBMVEMgbW9kZSByZWdpc3RlciB0byBJTklUSUFMSVpFICovCisgICAgICAgIGFsZ28gPSAoY3R4LT5hbGdvID09IGtMVENfWGNiY01hYykgPyBrTFRDX01vZGVYQ0JDTUFDIDoga0xUQ19Nb2RlQ01BQzsKKyAgICAgICAgbHRjX3N5bW1ldHJpY19pbml0KGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGFsZ28sIGtMVENfTW9kZUVuY3J5cHQpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgfQorICAgIGVsc2UgaWYgKGx0Y19oYXNoX2FsZ19pc19zaGEoY3R4LT5hbGdvKSkKKyAgICB7CisgICAgICAgIC8qIENsZWFyIGludGVybmFsIHJlZ2lzdGVyIHN0YXRlcy4gKi8KKyAgICAgICAgYmFzZS0+Q1cgPSAodWludDMyX3Qpa0xUQ19DbGVhckFsbDsKKworICAgICAgICAvKiBTZXQgYnl0ZSBzd2FwIG9uIGZvciBzZXZlcmFsIHJlZ2lzdGVycyB3ZSB3aWxsIGJlIHJlYWRpbmcgYW5kIHdyaXRpbmcKKyAgICAgICAgICogdXNlciBkYXRhIHRvL2Zyb20uICovCisgICAgICAgIGJhc2UtPkNUTCB8PSBrTFRDX0N0cmxTd2FwQWxsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBkbyBub3RoaW5nIGluIHRoaXMgY2FzZSAqLworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworfQorCitzdGF0aWMgdm9pZCBsdGNfaGFzaF9zYXZlX2NvbnRleHQobHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eCkKK3sKKyAgICB1aW50MzJfdCBzejsKKyAgICBMVENfVHlwZSAqYmFzZTsKKworICAgIGJhc2UgPSBjdHgtPmJhc2U7CisgICAgLyogR2V0IGNvbnRleHQgc2l6ZSAqLworICAgIHN3aXRjaCAoY3R4LT5hbGdvKQorICAgIHsKKyAgICAgICAgY2FzZSBrTFRDX1hjYmNNYWM6CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgKiAgd29yZFswLTNdID0gbWFjCisgICAgICAgICAgICAqICB3b3JkWzMtN10gPSBrMworICAgICAgICAgICAgKiAgd29yZFs4LTExXSA9IGsyCisgICAgICAgICAgICAqICB3b3JkW2tMdGNDbWFjQ3R4S2V5U2l6ZV0gPSBrZXlTaXplCisgICAgICAgICAgICAqLworICAgICAgICAgICAgc3ogPSAxMiAqIHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTFRDX0NtYWM6CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgKiAgd29yZFswLTNdID0gbWFjCisgICAgICAgICAgICAqICB3b3JkWzMtN10gPSBMICovCisgICAgICAgICAgICBzeiA9IDggKiBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICAgICAgY2FzZSBrTFRDX1NoYTE6CisgICAgICAgICAgICBzeiA9IChrTFRDX1J1bkxlblNoYTEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0xUQ19TaGEyMjQ6CisgICAgICAgICAgICBzeiA9IChrTFRDX1J1bkxlblNoYTIyNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrTFRDX1NoYTI1NjoKKyAgICAgICAgICAgIHN6ID0gKGtMVENfUnVuTGVuU2hhMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzeiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsdGNfZ2V0X2NvbnRleHQoYmFzZSwgKHVpbnQ4X3QgKikmY3R4LT53b3JkWzBdLCBzeiwgMCk7CisKKyAgICBpZiAodHJ1ZSA9PSBsdGNfaGFzaF9hbGdfaXNfY21hYyhjdHgtPmFsZ28pKQorICAgIHsKKyAgICAgICAgLyogd29yZFsxMi0xOV0gPSBrZXkgKi8KKyAgICAgICAgbHRjX2dldF9rZXkoYmFzZSwgKHVpbnQ4X3QgKikmY3R4LT53b3JkW2tMVENfSGFzaEN0eEtleVN0YXJ0SWR4XSwgY3R4LT53b3JkW2tMVENfSGFzaEN0eEtleVNpemVdKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19oYXNoX3Jlc3RvcmVfY29udGV4dChsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4KQoreworICAgIHVpbnQzMl90IHN6OworICAgIHVpbnQzMl90IGtleVNpemU7CisgICAgTFRDX1R5cGUgKmJhc2U7CisKKyAgICBiYXNlID0gY3R4LT5iYXNlOworICAgIC8qIEdldCBjb250ZXh0IHNpemUgKi8KKyAgICBzd2l0Y2ggKGN0eC0+YWxnbykKKyAgICB7CisgICAgICAgIGNhc2Uga0xUQ19YY2JjTWFjOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICogIHdvcmRbMC0zXSA9IG1hYworICAgICAgICAgICAgKiAgd29yZFszLTddID0gazMKKyAgICAgICAgICAgICogIHdvcmRbOC0xMV0gPSBrMgorICAgICAgICAgICAgKiAgd29yZFtrTHRjQ21hY0N0eEtleVNpemVdID0ga2V5U2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN6ID0gMTIgKiBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0xUQ19DbWFjOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICogIHdvcmRbMC0zXSA9IG1hYworICAgICAgICAgICAgKiAgd29yZFszLTddID0gTCAqLworICAgICAgICAgICAgc3ogPSA4ICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgIGNhc2Uga0xUQ19TaGExOgorICAgICAgICAgICAgc3ogPSAoa0xUQ19SdW5MZW5TaGExKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtMVENfU2hhMjI0OgorICAgICAgICAgICAgc3ogPSAoa0xUQ19SdW5MZW5TaGEyMjQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0xUQ19TaGEyNTY6CisgICAgICAgICAgICBzeiA9IChrTFRDX1J1bkxlblNoYTI1Nik7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ogPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsIChjb25zdCB1aW50OF90ICopJmN0eC0+d29yZFswXSwgc3osIDApOworCisgICAgaWYgKGx0Y19oYXNoX2FsZ19pc19jbWFjKGN0eC0+YWxnbykpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiAgd29yZFsxMi0xOV0gPSBrZXkKKyAgICAgICAgICogIHdvcmRba0x0Y0NtYWNDdHhLZXlTaXplXSA9IGtleVNpemUKKyAgICAgICAgICovCisgICAgICAgIGJhc2UtPkNXID0ga0xUQ19DbGVhcktleTsgLyogY2xlYXIgS2V5IGFuZCBLZXkgU2l6ZSByZWdpc3RlcnMgKi8KKworICAgICAgICBrZXlTaXplID0gY3R4LT53b3JkW2tMVENfSGFzaEN0eEtleVNpemVdOworICAgICAgICAvKiBXcml0ZSB0aGUga2V5IGluIHBsYWNlLiAqLworICAgICAgICBsdGNfc2V0X2tleShiYXNlLCAoY29uc3QgdWludDhfdCAqKSZjdHgtPndvcmRba0xUQ19IYXNoQ3R4S2V5U3RhcnRJZHhdLCBrZXlTaXplKTsKKworICAgICAgICAvKiBXcml0ZSB0aGUga2V5IHNpemUuICBUaGlzIG11c3QgYmUgZG9uZSBhZnRlciB3cml0aW5nIHRoZSBrZXksIGFuZCB0aGlzCisgICAgICAgICAqIGFjdGlvbiBsb2NrcyB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIGtleSByZWdpc3RlcnMuICovCisgICAgICAgIGJhc2UtPktTID0ga2V5U2l6ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19oYXNoX3ByZXBhcmVfY29udGV4dF9zd2l0Y2goTFRDX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+Q1cgPSAodWludDMyX3Qpa0xUQ19DbGVhckRhdGFTaXplIHwgKHVpbnQzMl90KWtMVENfQ2xlYXJNb2RlOworICAgIGJhc2UtPlNUQSA9IGtMVENfU3RhdHVzRG9uZUlzcjsKK30KKworc3RhdGljIHVpbnQzMl90IGx0Y19oYXNoX2dldF9ibG9ja19zaXplKGx0Y19oYXNoX2FsZ29fdCBhbGdvKQoreworICAgIGlmICgoYWxnbyA9PSBrTFRDX1hjYmNNYWMpIHx8IChhbGdvID09IGtMVENfQ21hYykpCisgICAgeworICAgICAgICByZXR1cm4gKHVpbnQzMl90KUxUQ19BRVNfQkxPQ0tfU0laRTsKKyAgICB9CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICBlbHNlIGlmICgoYWxnbyA9PSBrTFRDX1NoYTEpIHx8IChhbGdvID09IGtMVENfU2hhMjI0KSB8fCAoYWxnbyA9PSBrTFRDX1NoYTI1NikpCisgICAgeworICAgICAgICByZXR1cm4gKHVpbnQzMl90KUxUQ19TSEFfQkxPQ0tfU0laRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBsdGNfaGFzaF9ibG9ja190b19pZmlmbyhMVENfVHlwZSAqYmFzZSwgY29uc3QgbHRjX2hhc2hfYmxvY2tfdCAqYmxrLCB1aW50MzJfdCBudW1CeXRlcywgdWludDMyX3QgYmxvY2tTaXplKQoreworICAgIHVpbnQzMl90IGkgPSAwOworICAgIHVpbnQzMl90IHdvcmRzOworCisgICAgd29yZHMgPSBudW1CeXRlcyAvIDR1OworICAgIGlmIChudW1CeXRlcyAlIDR1KQorICAgIHsKKyAgICAgICAgd29yZHMrKzsKKyAgICB9CisKKyAgICBpZiAod29yZHMgPiBibG9ja1NpemUgLyA0dSkKKyAgICB7CisgICAgICAgIHdvcmRzID0gYmxvY2tTaXplIC8gNHU7CisgICAgfQorCisgICAgd2hpbGUgKGkgPCB3b3JkcykKKyAgICB7CisgICAgICAgIGlmICgwVSA9PSAoYmFzZS0+RklGT1NUQSAmIExUQ19GSUZPU1RBX0lGRl9NQVNLKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ29weSBkYXRhIHRvIHRoZSBpbnB1dCBGSUZPLiAqLworICAgICAgICAgICAgYmFzZS0+SUZJRk8gPSBibGstPndbaSsrXTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgbHRjX2hhc2hfbW92ZV90b19pZmlmbyhsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmxvY2tTaXplKQoreworICAgIGx0Y19oYXNoX2Jsb2NrX3QgYmxrWmVybzsKKyAgICB1aW50MzJfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmxrWmVyby53KTsgaSsrKQorICAgIHsKKyAgICAgICAgYmxrWmVyby53W2ldID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSAoZGF0YVNpemUpCisgICAgeworICAgICAgICBpZiAoZGF0YVNpemUgPj0gYmxvY2tTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBsdGNfbWVtY3B5KCZjdHgtPmJsaywgZGF0YSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgIGx0Y19oYXNoX2Jsb2NrX3RvX2lmaWZvKGN0eC0+YmFzZSwgJmN0eC0+YmxrLCBibG9ja1NpemUsIGJsb2NrU2l6ZSk7CisgICAgICAgICAgICBkYXRhU2l6ZSAtPSBibG9ja1NpemU7CisgICAgICAgICAgICBkYXRhICs9IGJsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGxhc3QgaW5jb21wbGV0ZSAxNi82NC1ieXRlcyBibG9jayBvZiB0aGlzIG1lc3NhZ2UgY2h1bmsgKi8KKyAgICAgICAgICAgIGx0Y19tZW1jcHkoJmN0eC0+YmxrLCAmYmxrWmVybywgc2l6ZW9mKGN0eC0+YmxrKSk7CisgICAgICAgICAgICBsdGNfbWVtY3B5KCZjdHgtPmJsaywgZGF0YSwgZGF0YVNpemUpOworICAgICAgICAgICAgY3R4LT5ibGtzeiA9IGRhdGFTaXplOworICAgICAgICAgICAgZGF0YVNpemUgPSAwOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgc3RhdHVzX3QgbHRjX2hhc2hfbWVyZ2VfYW5kX2ZsdXNoX2J1ZihsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV90IG1vZGVSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBibG9ja1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY29uc3VtZWRTaXplKQoreworICAgIHVpbnQzMl90IHN6OworICAgIExUQ19UeXBlICpiYXNlOworICAgIHN0YXR1c190IHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIGJhc2UgPSBjdHgtPmJhc2U7CisgICAgc3ogPSAwOworICAgIGlmIChjdHgtPmJsa3N6KQorICAgIHsKKyAgICAgICAgc3ogPSBibG9ja1NpemUgLSBjdHgtPmJsa3N6OworICAgICAgICBpZiAoc3ogPiBpbnB1dFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN6ID0gaW5wdXRTaXplOworICAgICAgICB9CisgICAgICAgIGx0Y19tZW1jcHkoY3R4LT5ibGsuYiArIGN0eC0+Ymxrc3osIGlucHV0LCBzeik7CisgICAgICAgIGlucHV0ICs9IHN6OworICAgICAgICBpbnB1dFNpemUgLT0gc3o7CisgICAgICAgIGN0eC0+Ymxrc3ogKz0gc3o7CisKKyAgICAgICAgaWYgKGN0eC0+Ymxrc3ogPT0gYmxvY2tTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5EUyA9IGJsb2NrU2l6ZTsKKyAgICAgICAgICAgIGx0Y19oYXNoX2Jsb2NrX3RvX2lmaWZvKGJhc2UsICZjdHgtPmJsaywgYmxvY2tTaXplLCBibG9ja1NpemUpOworICAgICAgICAgICAgY3R4LT5ibGtzeiA9IDA7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogaWYgdGhlcmUgaXMgc3RpbGwgaW5wdXRTaXplIGxlZnQsIG1ha2Ugc3VyZSBMVEMgYWxnLnN0YXRlIGlzIHNldCB0byBVUERBVEUgYW5kIGNvbnRpbnVlICovCisgICAgICAgICAgICBpZiAoaW5wdXRTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHNldCBhbGdvcml0aG0gc3RhdGUgdG8gVVBEQVRFICovCisgICAgICAgICAgICAgICAgbW9kZVJlZyAmPSB+TFRDX01EX0FTX01BU0s7CisgICAgICAgICAgICAgICAgbW9kZVJlZyB8PSBrTFRDX01vZGVVcGRhdGU7CisgICAgICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChjb25zdW1lZFNpemUpCisgICAgeworICAgICAgICAqY29uc3VtZWRTaXplID0gc3o7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfaGFzaF9tb3ZlX3Jlc3RfdG9fY29udGV4dCgKKyAgICBsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4LCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBkYXRhU2l6ZSwgbHRjX21vZGVfdCBtb2RlUmVnLCB1aW50MzJfdCBibG9ja1NpemUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzID0ga1N0YXR1c19TdWNjZXNzOworICAgIGx0Y19oYXNoX2Jsb2NrX3QgYmxrWmVybzsKKyAgICB1aW50MzJfdCBpOworCisgICAgLyogbWFrZSBibGtaZXJvIGNsZWFyICovCisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmxrWmVyby53KTsgaSsrKQorICAgIHsKKyAgICAgICAgYmxrWmVyby53W2ldID0gMDsKKyAgICB9CisKKyAgICB3aGlsZSAoZGF0YVNpemUpCisgICAgeworICAgICAgICBpZiAoZGF0YVNpemUgPiBibG9ja1NpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFTaXplIC09IGJsb2NrU2l6ZTsKKyAgICAgICAgICAgIGRhdGEgKz0gYmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRhdGFTaXplICsgY3R4LT5ibGtzeiA+IGJsb2NrU2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBzejsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBsdGNfaGFzaF9tZXJnZV9hbmRfZmx1c2hfYnVmKGN0eCwgZGF0YSwgZGF0YVNpemUsIG1vZGVSZWcsIGJsb2NrU2l6ZSwgJnN6KTsKKyAgICAgICAgICAgICAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRhdGEgKz0gc3o7CisgICAgICAgICAgICAgICAgZGF0YVNpemUgLT0gc3o7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBsYXN0IGluY29tcGxldGUgMTYvNjQtYnl0ZXMgYmxvY2sgb2YgdGhpcyBtZXNzYWdlIGNodW5rICovCisgICAgICAgICAgICBsdGNfbWVtY3B5KCZjdHgtPmJsaywgJmJsa1plcm8sIGJsb2NrU2l6ZSk7CisgICAgICAgICAgICBsdGNfbWVtY3B5KCZjdHgtPmJsaywgZGF0YSwgZGF0YVNpemUpOworICAgICAgICAgICAgY3R4LT5ibGtzeiA9IGRhdGFTaXplOworICAgICAgICAgICAgZGF0YVNpemUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfaGFzaF9wcm9jZXNzX2lucHV0X2RhdGEobHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlucHV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfdCBtb2RlUmVnKQoreworICAgIHVpbnQzMl90IHN6ID0gMDsKKyAgICBMVENfVHlwZSAqYmFzZTsKKyAgICB1aW50MzJfdCBibG9ja1NpemUgPSAwOworICAgIHN0YXR1c190IHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIGJsb2NrU2l6ZSA9IGx0Y19oYXNoX2dldF9ibG9ja19zaXplKGN0eC0+YWxnbyk7CisgICAgYmFzZSA9IGN0eC0+YmFzZTsKKworICAgIC8qIGZpbGwgY29udGV4dCBzdHJ1Y3QgYmxrIGFuZCBmbHVzaCB0byBMVEMgaWZpZm8gaW4gY2FzZSBpdCBpcyBmdWxsIGJsb2NrICovCisgICAgc3RhdHVzID0gbHRjX2hhc2hfbWVyZ2VfYW5kX2ZsdXNoX2J1ZihjdHgsIGlucHV0LCBpbnB1dFNpemUsIG1vZGVSZWcsIGJsb2NrU2l6ZSwgJnN6KTsKKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHN0YXR1cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIGlucHV0ICs9IHN6OworICAgIGlucHV0U2l6ZSAtPSBzejsKKworICAgIC8qIGlmIHRoZXJlIGlzIHN0aWxsIG1vcmUgdGhhbiBvciBlcXVhbCB0byA2NCBieXRlcywgbW92ZSBlYWNoIDY0IGJ5dGVzIHRocm91Z2ggTFRDICovCisgICAgc3ogPSBMVENfRFNfRFNfTUFTSyArIDF1IC0gTFRDX0hBU0hfQkxPQ0tfU0laRTsKKyAgICB3aGlsZSAoaW5wdXRTaXplKQorICAgIHsKKyAgICAgICAgaWYgKGlucHV0U2l6ZSA8IHN6KQorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBsYXN0U2l6ZTsKKworICAgICAgICAgICAgbGFzdFNpemUgPSBpbnB1dFNpemUgJSBibG9ja1NpemU7CisgICAgICAgICAgICBpZiAobGFzdFNpemUgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IGJsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlucHV0U2l6ZSAtPSBsYXN0U2l6ZTsKKyAgICAgICAgICAgIGlmIChpbnB1dFNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogbW92ZSBhbGwgY29tcGxldGUgYmxvY2tzIHRvIGlmaWZvLiAqLworICAgICAgICAgICAgICAgIGJhc2UtPkRTID0gaW5wdXRTaXplOworICAgICAgICAgICAgICAgIGx0Y19oYXNoX21vdmVfdG9faWZpZm8oY3R4LCBpbnB1dCwgaW5wdXRTaXplLCBibG9ja1NpemUpOworCisgICAgICAgICAgICAgICAgc3RhdHVzID0gbHRjX3dhaXQoYmFzZSk7CisgICAgICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGtlZXAgbGFzdCAoaW4pY29tcGxldGUgMTYtYnl0ZXMgYmxvY2sgaW4gY29udGV4dCBzdHJ1Y3QuICovCisgICAgICAgICAgICAvKiB3aGVuIDNyZCBhcmd1bWVudCBvZiBjbWFjX21vdmVfdG9faWZpZm8oKSBpcyA8PSAxNiBieXRlcywgaXQgb25seSBzdG9yZXMgdGhlIGRhdGEgdG8gY29udGV4dCBzdHJ1Y3QgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IGx0Y19oYXNoX21vdmVfcmVzdF90b19jb250ZXh0KGN0eCwgaW5wdXQsIGxhc3RTaXplLCBtb2RlUmVnLCBibG9ja1NpemUpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlucHV0U2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5EUyA9IHN6OworICAgICAgICAgICAgbHRjX2hhc2hfbW92ZV90b19pZmlmbyhjdHgsIGlucHV0LCBzeiwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgIGlucHV0U2l6ZSAtPSBzejsKKyAgICAgICAgICAgIGlucHV0ICs9IHN6OworCisgICAgICAgICAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHNldCBhbGdvcml0aG0gc3RhdGUgdG8gVVBEQVRFICovCisgICAgICAgICAgICBtb2RlUmVnICY9IH5MVENfTURfQVNfTUFTSzsKKyAgICAgICAgICAgIG1vZGVSZWcgfD0ga0xUQ19Nb2RlVXBkYXRlOworICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworICAgICAgICB9CisgICAgfSAvKiBlbmQgd2hpbGUgKi8KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIQVNIIENvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgTFRDX0hBU0hfSW5pdChMVENfVHlwZSAqYmFzZSwgbHRjX2hhc2hfY3R4X3QgKmN0eCwgbHRjX2hhc2hfYWxnb190IGFsZ28sIGNvbnN0IHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5U2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXQ7CisgICAgbHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKmN0eEludGVybmFsOworICAgIHVpbnQzMl90IGk7CisKKyAgICByZXQgPSBsdGNfaGFzaF9jaGVja19pbnB1dF9hcmdzKGJhc2UsIGN0eCwgYWxnbywga2V5LCBrZXlTaXplKTsKKyAgICBpZiAocmV0ICE9IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgLyogc2V0IGFsZ29yaXRobSBpbiBjb250ZXh0IHN0cnVjdCBmb3IgbGF0ZXIgdXNlICovCisgICAgY3R4SW50ZXJuYWwgPSAobHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKiljdHg7CisgICAgY3R4SW50ZXJuYWwtPmFsZ28gPSBhbGdvOworICAgIGZvciAoaSA9IDA7IGkgPCBrTFRDX0hhc2hDdHhOdW1Xb3JkczsgaSsrKQorICAgIHsKKyAgICAgICAgY3R4SW50ZXJuYWwtPndvcmRbaV0gPSAwdTsKKyAgICB9CisKKyAgICAvKiBTdGVwcyByZXF1aXJlZCBvbmx5IHVzaW5nIEFFUyBlbmdpbmUgKi8KKyAgICBpZiAobHRjX2hhc2hfYWxnX2lzX2NtYWMoYWxnbykpCisgICAgeworICAgICAgICAvKiBzdG9yZSBpbnB1dCBrZXkgYW5kIGtleSBsZW5ndGggaW4gY29udGV4dCBzdHJ1Y3QgZm9yIGxhdGVyIHVzZSAqLworICAgICAgICBjdHhJbnRlcm5hbC0+d29yZFtrTFRDX0hhc2hDdHhLZXlTaXplXSA9IGtleVNpemU7CisgICAgICAgIGx0Y19tZW1jcHkoJmN0eEludGVybmFsLT53b3JkW2tMVENfSGFzaEN0eEtleVN0YXJ0SWR4XSwga2V5LCBrZXlTaXplKTsKKyAgICB9CisgICAgY3R4SW50ZXJuYWwtPmJsa3N6ID0gMHU7CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihjdHhJbnRlcm5hbC0+YmxrLncpIC8gc2l6ZW9mKGN0eEludGVybmFsLT5ibGsud1swXSk7IGkrKykKKyAgICB7CisgICAgICAgIGN0eEludGVybmFsLT5ibGsud1swXSA9IDB1OworICAgIH0KKyAgICBjdHhJbnRlcm5hbC0+c3RhdGUgPSBrTFRDX0hhc2hJbml0OworICAgIGN0eEludGVybmFsLT5iYXNlID0gYmFzZTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IExUQ19IQVNIX1VwZGF0ZShsdGNfaGFzaF9jdHhfdCAqY3R4LCBjb25zdCB1aW50OF90ICppbnB1dCwgdWludDMyX3QgaW5wdXRTaXplKQoreworICAgIGJvb2wgaXNVcGRhdGVTdGF0ZTsKKyAgICBsdGNfbW9kZV90IG1vZGVSZWcgPSAwOyAvKiByZWFkIGFuZCB3cml0ZSBMVEMgbW9kZSByZWdpc3RlciAqLworICAgIExUQ19UeXBlICpiYXNlOworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4SW50ZXJuYWw7CisgICAgdWludDMyX3QgYmxvY2tTaXplOworCisgICAgY3R4SW50ZXJuYWwgPSAobHRjX2hhc2hfY3R4X2ludGVybmFsX3QgKiljdHg7CisgICAgc3RhdHVzID0gbHRjX2hhc2hfY2hlY2tfY29udGV4dChjdHhJbnRlcm5hbCwgaW5wdXQpOworICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBiYXNlID0gY3R4SW50ZXJuYWwtPmJhc2U7CisgICAgYmxvY2tTaXplID0gbHRjX2hhc2hfZ2V0X2Jsb2NrX3NpemUoY3R4SW50ZXJuYWwtPmFsZ28pOworICAgIC8qIGlmIHdlIGFyZSBzdGlsbCBsZXNzIHRoYW4gNjQgYnl0ZXMsIGtlZXAgb25seSBpbiBjb250ZXh0ICovCisgICAgaWYgKChjdHhJbnRlcm5hbC0+Ymxrc3ogKyBpbnB1dFNpemUpIDw9IGJsb2NrU2l6ZSkKKyAgICB7CisgICAgICAgIGx0Y19tZW1jcHkoKCZjdHhJbnRlcm5hbC0+YmxrLmJbMF0pICsgY3R4SW50ZXJuYWwtPmJsa3N6LCBpbnB1dCwgaW5wdXRTaXplKTsKKyAgICAgICAgY3R4SW50ZXJuYWwtPmJsa3N6ICs9IGlucHV0U2l6ZTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaXNVcGRhdGVTdGF0ZSA9IGN0eEludGVybmFsLT5zdGF0ZSA9PSBrTFRDX0hhc2hVcGRhdGU7CisgICAgICAgIGlmIChjdHhJbnRlcm5hbC0+c3RhdGUgPT0ga0xUQ19IYXNoSW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogc2V0IExUQyBtb2RlIHJlZ2lzdGVyIHRvIElOSVRJQUxJWkUgam9iICovCisgICAgICAgICAgICBsdGNfaGFzaF9lbmdpbmVfaW5pdChjdHhJbnRlcm5hbCk7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQQorICAgICAgICAgICAgaWYgKGx0Y19oYXNoX2FsZ19pc19jbWFjKGN0eEludGVybmFsLT5hbGdvKSkKKyAgICAgICAgICAgIHsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICAgICAgICAgIGN0eEludGVybmFsLT5zdGF0ZSA9IGtMVENfSGFzaFVwZGF0ZTsKKyAgICAgICAgICAgICAgICBpc1VwZGF0ZVN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBiYXNlLT5EUyA9IDB1OworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGx0Y193YWl0KGJhc2UpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBwcm9wZXIgYmxvY2sgYW5kIGFsZ29yaXRobSBtb2RlLiAqLworICAgICAgICAgICAgICAgIG1vZGVSZWcgPSBsdGNfaGFzaF9hbGdvMm1vZGUoY3R4SW50ZXJuYWwtPmFsZ28sIGtMVENfTW9kZUluaXQsIE5VTEwpOworICAgICAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKworICAgICAgICAgICAgICAgIGN0eEludGVybmFsLT5zdGF0ZSA9IGtMVENfSGFzaFVwZGF0ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBsdGNfaGFzaF9wcm9jZXNzX2lucHV0X2RhdGEoY3R4SW50ZXJuYWwsIGlucHV0LCBpbnB1dFNpemUsIG1vZGVSZWcpOworICAgICAgICAgICAgICAgIGx0Y19oYXNoX3NhdmVfY29udGV4dChjdHhJbnRlcm5hbCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc1VwZGF0ZVN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICAvKiByZXN0b3JlIExUQyBjb250ZXh0IGZyb20gY29udGV4dCBzdHJ1Y3QgKi8KKyAgICAgICAgICAgIGx0Y19oYXNoX3Jlc3RvcmVfY29udGV4dChjdHhJbnRlcm5hbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBub3RoaW5nIHNwZWNpYWwgYXQgdGhpcyBwbGFjZSAqLworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmIChpc1VwZGF0ZVN0YXRlKQorICAgIHsKKyAgICAgICAgLyogc2V0IExUQyBtb2RlIHJlZ2lzdGVyIHRvIFVQREFURSBqb2IgKi8KKyAgICAgICAgbHRjX2hhc2hfcHJlcGFyZV9jb250ZXh0X3N3aXRjaChiYXNlKTsKKyAgICAgICAgYmFzZS0+Q1cgPSBrTFRDX0NsZWFyRGF0YVNpemU7CisgICAgICAgIG1vZGVSZWcgPSBsdGNfaGFzaF9hbGdvMm1vZGUoY3R4SW50ZXJuYWwtPmFsZ28sIGtMVENfTW9kZVVwZGF0ZSwgTlVMTCk7CisgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZzsKKworICAgICAgICAvKiBwcm9jZXNzIGlucHV0IGRhdGEgYW5kIHNhdmUgTFRDIGNvbnRleHQgdG8gY29udGV4dCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgc3RhdHVzID0gbHRjX2hhc2hfcHJvY2Vzc19pbnB1dF9kYXRhKGN0eEludGVybmFsLCBpbnB1dCwgaW5wdXRTaXplLCBtb2RlUmVnKTsKKyAgICAgICAgbHRjX2hhc2hfc2F2ZV9jb250ZXh0KGN0eEludGVybmFsKTsKKyAgICB9CisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX0hBU0hfRmluaXNoKGx0Y19oYXNoX2N0eF90ICpjdHgsIHVpbnQ4X3QgKm91dHB1dCwgdWludDMyX3QgKm91dHB1dFNpemUpCit7CisgICAgbHRjX21vZGVfdCBtb2RlUmVnOyAvKiByZWFkIGFuZCB3cml0ZSBMVEMgbW9kZSByZWdpc3RlciAqLworICAgIExUQ19UeXBlICpiYXNlOworICAgIHVpbnQzMl90IGFsZ091dFNpemUgPSAwOworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBsdGNfaGFzaF9jdHhfaW50ZXJuYWxfdCAqY3R4SW50ZXJuYWw7CisgICAgdWludDMyX3QgKmN0eFc7CisgICAgdWludDMyX3QgaTsKKworICAgIGN0eEludGVybmFsID0gKGx0Y19oYXNoX2N0eF9pbnRlcm5hbF90ICopY3R4OworICAgIHN0YXR1cyA9IGx0Y19oYXNoX2NoZWNrX2NvbnRleHQoY3R4SW50ZXJuYWwsIG91dHB1dCk7CisgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGJhc2UgPSBjdHhJbnRlcm5hbC0+YmFzZTsKKyAgICBsdGNfaGFzaF9wcmVwYXJlX2NvbnRleHRfc3dpdGNoKGJhc2UpOworCisgICAgYmFzZS0+Q1cgPSBrTFRDX0NsZWFyRGF0YVNpemU7CisgICAgaWYgKGN0eEludGVybmFsLT5zdGF0ZSA9PSBrTFRDX0hhc2hJbml0KQorICAgIHsKKyAgICAgICAgbHRjX2hhc2hfZW5naW5lX2luaXQoY3R4SW50ZXJuYWwpOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAgICAgIGlmIChsdGNfaGFzaF9hbGdfaXNfY21hYyhjdHhJbnRlcm5hbC0+YWxnbykpCisgICAgICAgIHsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSAqLworICAgICAgICAgICAgYmFzZS0+RFMgPSAwdTsKKyAgICAgICAgICAgIHN0YXR1cyA9IGx0Y193YWl0KGJhc2UpOworICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vZGVSZWcgPSBsdGNfaGFzaF9hbGdvMm1vZGUoY3R4SW50ZXJuYWwtPmFsZ28sIGtMVENfTW9kZUZpbmFsaXplLCAmYWxnT3V0U2l6ZSk7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1vZGVSZWcgPSBsdGNfaGFzaF9hbGdvMm1vZGUoY3R4SW50ZXJuYWwtPmFsZ28sIGtMVENfTW9kZUluaXRGaW5hbCwgJmFsZ091dFNpemUpOworICAgICAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKyAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtb2RlUmVnID0gbHRjX2hhc2hfYWxnbzJtb2RlKGN0eEludGVybmFsLT5hbGdvLCBrTFRDX01vZGVGaW5hbGl6ZSwgJmFsZ091dFNpemUpOworICAgICAgICBiYXNlLT5NRCA9IG1vZGVSZWc7CisKKyAgICAgICAgLyogcmVzdG9yZSBMVEMgY29udGV4dCBmcm9tIGNvbnRleHQgc3RydWN0ICovCisgICAgICAgIGx0Y19oYXNoX3Jlc3RvcmVfY29udGV4dChjdHhJbnRlcm5hbCk7CisgICAgfQorCisgICAgLyogZmx1c2ggbWVzc2FnZSBsYXN0IGluY29tcGxldGUgYmxvY2ssIGlmIHRoZXJlIGlzIGFueSwgb3Igd3JpdGUgemVybyB0byBkYXRhIHNpemUgcmVnaXN0ZXIuICovCisgICAgYmFzZS0+RFMgPSBjdHhJbnRlcm5hbC0+Ymxrc3o7CisgICAgbHRjX2hhc2hfYmxvY2tfdG9faWZpZm8oYmFzZSwgJmN0eEludGVybmFsLT5ibGssIGN0eEludGVybmFsLT5ibGtzeiwgbHRjX2hhc2hfZ2V0X2Jsb2NrX3NpemUoY3R4SW50ZXJuYWwtPmFsZ28pKTsKKyAgICAvKiBXYWl0IGZvciBmaW5pc2ggb2YgdGhlIGVuY3J5cHRpb24gKi8KKyAgICBzdGF0dXMgPSBsdGNfd2FpdChiYXNlKTsKKworICAgIGlmIChvdXRwdXRTaXplKQorICAgIHsKKyAgICAgICAgaWYgKGFsZ091dFNpemUgPCAqb3V0cHV0U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgKm91dHB1dFNpemUgPSBhbGdPdXRTaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYWxnT3V0U2l6ZSA9ICpvdXRwdXRTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2dldF9jb250ZXh0KGJhc2UsICZvdXRwdXRbMF0sIGFsZ091dFNpemUsIDB1KTsKKworICAgIGN0eFcgPSAodWludDMyX3QgKiljdHg7CisgICAgZm9yIChpID0gMDsgaSA8IExUQ19IQVNIX0NUWF9TSVpFOyBpKyspCisgICAgeworICAgICAgICBjdHhXW2ldID0gMHU7CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX0hBU0goTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICBsdGNfaGFzaF9hbGdvX3QgYWxnbywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpvdXRwdXRTaXplKQoreworICAgIHN0YXR1c190IHN0YXR1czsKKyAgICBsdGNfaGFzaF9jdHhfdCBjdHg7CisKKyAgICBzdGF0dXMgPSBMVENfSEFTSF9Jbml0KGJhc2UsICZjdHgsIGFsZ28sIGtleSwga2V5U2l6ZSk7CisgICAgaWYgKHN0YXR1cyAhPSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBzdGF0dXMgPSBMVENfSEFTSF9VcGRhdGUoJmN0eCwgaW5wdXQsIGlucHV0U2l6ZSk7CisgICAgaWYgKHN0YXR1cyAhPSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBzdGF0dXMgPSBMVENfSEFTSF9GaW5pc2goJmN0eCwgb3V0cHV0LCBvdXRwdXRTaXplKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEtIQSBDb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfUEtIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBCitzdGF0aWMgc3RhdHVzX3QgbHRjX3BraGFfY2xlYXJfcmVnYWJuZShMVENfVHlwZSAqYmFzZSwgYm9vbCBBLCBib29sIEIsIGJvb2wgTiwgYm9vbCBFKQoreworICAgIGx0Y19tb2RlX3QgbW9kZTsKKworICAgIC8qIFNldCB0aGUgUEtIQSBhbGdvcml0aG0gYW5kIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbi4gKi8KKyAgICBtb2RlID0gKHVpbnQzMl90KWtMVENfQWxnb3JpdGhtUEtIQSB8IDFVOworCisgICAgLyogU2V0IHJhbSBhcmVhIHRvIGNsZWFyLiBDbGVhciBhbGwuICovCisgICAgaWYgKEEpCisgICAgeworICAgICAgICBtb2RlIHw9IDFVIDw8IDE5VTsKKyAgICB9CisgICAgaWYgKEIpCisgICAgeworICAgICAgICBtb2RlIHw9IDFVIDw8IDE4VTsKKyAgICB9CisgICAgaWYgKE4pCisgICAgeworICAgICAgICBtb2RlIHw9IDFVIDw8IDE2VTsKKyAgICB9CisgICAgaWYgKEUpCisgICAgeworICAgICAgICBtb2RlIHw9IDFVIDw8IDE3VTsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUgbW9kZSByZWdpc3RlciB0byB0aGUgaGFyZHdhcmUuCisgICAgICogTk9URTogVGhpcyB3aWxsIGJlZ2luIHRoZSBvcGVyYXRpb24uICovCisgICAgYmFzZS0+TURQSyA9IG1vZGU7CisKKyAgICAvKiBXYWl0IGZvciAnZG9uZScgKi8KKyAgICByZXR1cm4gbHRjX3dhaXQoYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMobHRjX3BraGFfbW9kZV9wYXJhbXNfdCAqcGFyYW1zKQoreworICAgIHBhcmFtcy0+ZnVuYyA9IChsdGNfcGtoYV9mdW5jX3QpMDsKKyAgICBwYXJhbXMtPmFyaXRoVHlwZSA9IGtMVENfUEtIQV9JbnRlZ2VyQXJpdGg7CisgICAgcGFyYW1zLT5tb250Rm9ybUluID0ga0xUQ19QS0hBX05vcm1hbFZhbHVlOworICAgIHBhcmFtcy0+bW9udEZvcm1PdXQgPSBrTFRDX1BLSEFfTm9ybWFsVmFsdWU7CisgICAgcGFyYW1zLT5zcmNSZWcgPSBrTFRDX1BLSEFfUmVnQWxsOworICAgIHBhcmFtcy0+c3JjUXVhZCA9IGtMVENfUEtIQV9RdWFkMDsKKyAgICBwYXJhbXMtPmRzdFJlZyA9IGtMVENfUEtIQV9SZWdBbGw7CisgICAgcGFyYW1zLT5kc3RRdWFkID0ga0xUQ19QS0hBX1F1YWQwOworICAgIHBhcmFtcy0+ZXF1YWxUaW1lID0ga0xUQ19QS0hBX05vVGltaW5nRXF1YWxpemVkOworICAgIHBhcmFtcy0+cjJtb2RuID0ga0xUQ19QS0hBX0NhbGNSMjsKK30KKworc3RhdGljIHZvaWQgbHRjX3BraGFfd3JpdGVfd29yZChMVENfVHlwZSAqYmFzZSwgbHRjX3BraGFfcmVnX2FyZWFfdCByZWcsIHVpbnQ4X3QgaW5kZXgsIHVpbnQzMl90IGRhdGEpCit7CisgICAgc3dpdGNoIChyZWcpCisgICAgeworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdBOgorICAgICAgICAgICAgYmFzZS0+UEtBW2luZGV4XSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdCOgorICAgICAgICAgICAgYmFzZS0+UEtCW2luZGV4XSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdOOgorICAgICAgICAgICAgYmFzZS0+UEtOW2luZGV4XSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdFOgorICAgICAgICAgICAgYmFzZS0+UEtFW2luZGV4XSA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdWludDMyX3QgbHRjX3BraGFfcmVhZF93b3JkKExUQ19UeXBlICpiYXNlLCBsdGNfcGtoYV9yZWdfYXJlYV90IHJlZywgdWludDhfdCBpbmRleCkKK3sKKyAgICB1aW50MzJfdCByZXR2YWw7CisKKyAgICBzd2l0Y2ggKHJlZykKKyAgICB7CisgICAgICAgIGNhc2Uga0xUQ19QS0hBX1JlZ0E6CisgICAgICAgICAgICByZXR2YWwgPSBiYXNlLT5QS0FbaW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTFRDX1BLSEFfUmVnQjoKKyAgICAgICAgICAgIHJldHZhbCA9IGJhc2UtPlBLQltpbmRleF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtMVENfUEtIQV9SZWdOOgorICAgICAgICAgICAgcmV0dmFsID0gYmFzZS0+UEtOW2luZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga0xUQ19QS0hBX1JlZ0U6CisgICAgICAgICAgICByZXR2YWwgPSBiYXNlLT5QS0VbaW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHZhbCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0YXR1c190IGx0Y19wa2hhX3dyaXRlX3JlZygKKyAgICBMVENfVHlwZSAqYmFzZSwgbHRjX3BraGFfcmVnX2FyZWFfdCByZWcsIHVpbnQ4X3QgcXVhZCwgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDE2X3QgZGF0YVNpemUpCit7CisgICAgLyogU2VsZWN0IHRoZSB3b3JkLWJhc2VkIHN0YXJ0IGluZGV4IGZvciBlYWNoIHF1YWRyYW50IG9mIDY0IGJ5dGVzLiAqLworICAgIHVpbnQ4X3Qgc3RhcnRJbmRleCA9IChxdWFkICogMTZ1KTsKKyAgICB1aW50MzJfdCBvdXRXb3JkOworCisgICAgd2hpbGUgKGRhdGFTaXplID4gMCkKKyAgICB7CisgICAgICAgIGlmIChkYXRhU2l6ZSA+PSBzaXplb2YodWludDMyX3QpKQorICAgICAgICB7CisgICAgICAgICAgICBsdGNfcGtoYV93cml0ZV93b3JkKGJhc2UsIHJlZywgc3RhcnRJbmRleCsrLCBsdGNfZ2V0X3dvcmRfZnJvbV91bmFsaWduZWQoZGF0YSkpOworICAgICAgICAgICAgZGF0YVNpemUgLT0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIGRhdGEgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8qIChkYXRhU2l6ZSA+IDApICYmIChkYXRhU2l6ZSA8IDQpICovCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFdvcmQgPSAwOworICAgICAgICAgICAgbHRjX21lbWNweSgmb3V0V29yZCwgZGF0YSwgZGF0YVNpemUpOworICAgICAgICAgICAgbHRjX3BraGFfd3JpdGVfd29yZChiYXNlLCByZWcsIHN0YXJ0SW5kZXgsIG91dFdvcmQpOworICAgICAgICAgICAgZGF0YVNpemUgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdGljIHZvaWQgbHRjX3BraGFfcmVhZF9yZWcoTFRDX1R5cGUgKmJhc2UsIGx0Y19wa2hhX3JlZ19hcmVhX3QgcmVnLCB1aW50OF90IHF1YWQsIHVpbnQ4X3QgKmRhdGEsIHVpbnQxNl90IGRhdGFTaXplKQoreworICAgIC8qIFNlbGVjdCB0aGUgd29yZC1iYXNlZCBzdGFydCBpbmRleCBmb3IgZWFjaCBxdWFkcmFudCBvZiA2NCBieXRlcy4gKi8KKyAgICB1aW50OF90IHN0YXJ0SW5kZXggPSAocXVhZCAqIDE2dSk7CisgICAgdWludDE2X3QgY2FsY1NpemU7CisgICAgdWludDMyX3Qgd29yZDsKKworICAgIHdoaWxlIChkYXRhU2l6ZSA+IDApCisgICAgeworICAgICAgICB3b3JkID0gbHRjX3BraGFfcmVhZF93b3JkKGJhc2UsIHJlZywgc3RhcnRJbmRleCsrKTsKKworICAgICAgICBjYWxjU2l6ZSA9IChkYXRhU2l6ZSA+PSBzaXplb2YodWludDMyX3QpKSA/IHNpemVvZih1aW50MzJfdCkgOiBkYXRhU2l6ZTsKKyAgICAgICAgbHRjX21lbWNweShkYXRhLCAmd29yZCwgY2FsY1NpemUpOworCisgICAgICAgIGRhdGEgKz0gY2FsY1NpemU7CisgICAgICAgIGRhdGFTaXplIC09IGNhbGNTaXplOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbHRjX3BraGFfaW5pdF9kYXRhKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUUpCit7CisgICAgdWludDMyX3QgY2xlYXJNYXNrID0ga0xUQ19DbGVhck1vZGU7IC8qIGNsZWFyIE1vZGUgUmVnaXN0ZXIgKi8KKworICAgIC8qIENsZWFyIGludGVybmFsIHJlZ2lzdGVyIHN0YXRlcy4gKi8KKyAgICBpZiAoc2l6ZUEpCisgICAgeworICAgICAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQTsKKyAgICB9CisgICAgaWYgKHNpemVCKQorICAgIHsKKyAgICAgICAgY2xlYXJNYXNrIHw9IGtMVENfQ2xlYXJQa2hhU2l6ZUI7CisgICAgfQorICAgIGlmIChzaXplTikKKyAgICB7CisgICAgICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVOOworICAgIH0KKyAgICBpZiAoc2l6ZUUpCisgICAgeworICAgICAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplRTsKKyAgICB9CisKKyAgICBiYXNlLT5DVyA9IGNsZWFyTWFzazsKKyAgICBiYXNlLT5TVEEgPSBrTFRDX1N0YXR1c0RvbmVJc3I7CisgICAgbHRjX3BraGFfY2xlYXJfcmVnYWJuZShiYXNlLCBBLCBCLCBOLCBFKTsKKworICAgIC8qIFdyaXRlIHJlZ2lzdGVyIHNpemVzLiAqLworICAgIC8qIFdyaXRlIG1vZHVsdXMgKE4pIGFuZCBBIGFuZCBCIHJlZ2lzdGVyIGFyZ3VtZW50cy4gKi8KKyAgICBpZiAoc2l6ZU4pCisgICAgeworICAgICAgICBiYXNlLT5QS05TWiA9IHNpemVOOworICAgICAgICBpZiAoTikKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdOLCAwLCBOLCBzaXplTik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2l6ZUEpCisgICAgeworICAgICAgICBiYXNlLT5QS0FTWiA9IHNpemVBOworICAgICAgICBpZiAoQSkKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdBLCAwLCBBLCBzaXplQSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2l6ZUIpCisgICAgeworICAgICAgICBiYXNlLT5QS0JTWiA9IHNpemVCOworICAgICAgICBpZiAoQikKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCBCLCBzaXplQik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2l6ZUUpCisgICAgeworICAgICAgICBiYXNlLT5QS0VTWiA9IHNpemVFOworICAgICAgICBpZiAoRSkKKyAgICAgICAgeworICAgICAgICAgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdFLCAwLCBFLCBzaXplRSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19wa2hhX21vZGVfc2V0X3NyY19yZWdfY29weShsdGNfbW9kZV90ICpvdXRNb2RlLCBsdGNfcGtoYV9yZWdfYXJlYV90IHJlZykKK3sKKyAgICBpbnQgaSA9IDA7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcmVnID0gKGx0Y19wa2hhX3JlZ19hcmVhX3QpKCgodWludDMyX3QpcmVnKSA+PiAxdSk7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlIChyZWcpOworCisgICAgaSA9IDQgLSBpOworICAgIC8qIFNvdXJjZSByZWdpc3RlciBtdXN0IG5vdCBiZSBFLiAqLworICAgIGlmIChpICE9IDIpCisgICAgeworICAgICAgICAqb3V0TW9kZSB8PSAoKHVpbnQzMl90KWkgPDwgMTd1KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGx0Y19wa2hhX21vZGVfc2V0X2RzdF9yZWdfY29weShsdGNfbW9kZV90ICpvdXRNb2RlLCBsdGNfcGtoYV9yZWdfYXJlYV90IHJlZykKK3sKKyAgICBpbnQgaSA9IDA7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgcmVnID0gKGx0Y19wa2hhX3JlZ19hcmVhX3QpKCgodWludDMyX3QpcmVnKSA+PiAxdSk7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlIChyZWcpOworCisgICAgaSA9IDQgLSBpOworICAgICpvdXRNb2RlIHw9ICgodWludDMyX3QpaSA8PCAxMHUpOworfQorCitzdGF0aWMgdm9pZCBsdGNfcGtoYV9tb2RlX3NldF9zcmNfc2VnX2NvcHkobHRjX21vZGVfdCAqb3V0TW9kZSwgY29uc3QgbHRjX3BraGFfcXVhZF9hcmVhX3QgcXVhZCkKK3sKKyAgICAqb3V0TW9kZSB8PSAoKHVpbnQzMl90KXF1YWQgPDwgOHUpOworfQorCitzdGF0aWMgdm9pZCBsdGNfcGtoYV9tb2RlX3NldF9kc3Rfc2VnX2NvcHkobHRjX21vZGVfdCAqb3V0TW9kZSwgY29uc3QgbHRjX3BraGFfcXVhZF9hcmVhX3QgcXVhZCkKK3sKKyAgICAqb3V0TW9kZSB8PSAoKHVpbnQzMl90KXF1YWQgPDwgNnUpOworfQorCisvKiEKKyAqIEBicmllZiBTdGFydHMgdGhlIFBLSEEgb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGFuIG9wZXJhdGlvbiBjb25maWd1cmVkIGJ5IHRoZSBwYXJhbXMgcGFyYW1ldGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBhcmFtcyBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSBjb250YWluaW5nIGFsbCBzZXR0aW5ncyByZXF1aXJlZCBmb3IgUEtIQSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfcGtoYV9pbml0X21vZGUoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgKnBhcmFtcykKK3sKKyAgICBsdGNfbW9kZV90IG1vZGVSZWc7CisgICAgc3RhdHVzX3QgcmV0dmFsOworCisgICAgLyogU2V0IHRoZSBQS0hBIGFsZ29yaXRobSBhbmQgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLiAqLworICAgIG1vZGVSZWcgPSBrTFRDX0FsZ29yaXRobVBLSEE7CisgICAgbW9kZVJlZyB8PSAodWludDMyX3QpcGFyYW1zLT5mdW5jOworCisgICAgaWYgKChwYXJhbXMtPmZ1bmMgPT0ga0xUQ19QS0hBX0NvcHlNZW1TaXplTikgfHwgKHBhcmFtcy0+ZnVuYyA9PSBrTFRDX1BLSEFfQ29weU1lbVNpemVTcmMpKQorICAgIHsKKyAgICAgICAgLyogU2V0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaXN0ZXJzIGFuZCBxdWFkcy4gKi8KKyAgICAgICAgbHRjX3BraGFfbW9kZV9zZXRfc3JjX3JlZ19jb3B5KCZtb2RlUmVnLCBwYXJhbXMtPnNyY1JlZyk7CisgICAgICAgIGx0Y19wa2hhX21vZGVfc2V0X2RzdF9yZWdfY29weSgmbW9kZVJlZywgcGFyYW1zLT5kc3RSZWcpOworICAgICAgICBsdGNfcGtoYV9tb2RlX3NldF9zcmNfc2VnX2NvcHkoJm1vZGVSZWcsIHBhcmFtcy0+c3JjUXVhZCk7CisgICAgICAgIGx0Y19wa2hhX21vZGVfc2V0X2RzdF9zZWdfY29weSgmbW9kZVJlZywgcGFyYW1zLT5kc3RRdWFkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogU2V0IHRoZSBhcml0aG1ldGljIHR5cGUgLSBpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsIChGMm0pLiAqLworICAgICAgICBtb2RlUmVnIHw9ICgodWludDMyX3QpcGFyYW1zLT5hcml0aFR5cGUgPDwgMTd1KTsKKworICAgICAgICAvKiBTZXQgdG8gdXNlIE1vbnRnb21lcnkgZm9ybSBvZiBpbnB1dHMgYW5kL29yIG91dHB1dHMuICovCisgICAgICAgIG1vZGVSZWcgfD0gKCh1aW50MzJfdClwYXJhbXMtPm1vbnRGb3JtSW4gPDwgMTl1KTsKKyAgICAgICAgbW9kZVJlZyB8PSAoKHVpbnQzMl90KXBhcmFtcy0+bW9udEZvcm1PdXQgPDwgMTh1KTsKKworICAgICAgICAvKiBTZXQgdG8gdXNlIHByZS1jb21wdXRlZCBSMm1vZE4gKi8KKyAgICAgICAgbW9kZVJlZyB8PSAoKHVpbnQzMl90KXBhcmFtcy0+cjJtb2RuIDw8IDE2dSk7CisgICAgfQorCisgICAgbW9kZVJlZyB8PSAoKHVpbnQzMl90KXBhcmFtcy0+ZXF1YWxUaW1lIDw8IDEwdSk7CisKKyAgICAvKiBXcml0ZSB0aGUgbW9kZSByZWdpc3RlciB0byB0aGUgaGFyZHdhcmUuCisgICAgICogTk9URTogVGhpcyB3aWxsIGJlZ2luIHRoZSBvcGVyYXRpb24uICovCisgICAgYmFzZS0+TURQSyA9IG1vZGVSZWc7CisKKyAgICByZXR2YWwgPSBsdGNfd2FpdChiYXNlKTsKKyAgICByZXR1cm4gKHJldHZhbCk7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfcGtoYV9tb2RSMigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqTiwgdWludDE2X3Qgc2l6ZU4sIHVpbnQ4X3QgKnJlc3VsdCwgdWludDE2X3QgKnJlc3VsdFNpemUsIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoTW9kUjI7CisgICAgcGFyYW1zLmFyaXRoVHlwZSA9IGFyaXRoVHlwZTsKKworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBOVUxMLCAwLCBOVUxMLCAwLCBOLCBzaXplTiwgTlVMTCwgMCk7CisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSByZXN1bHQgYW5kIHNpemUgZnJvbSByZWdpc3RlciBCMC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdFNpemUgJiYgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVzdWx0U2l6ZSA9IGJhc2UtPlBLQlNaOworICAgICAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCByZXN1bHQsICpyZXN1bHRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfcGtoYV9tb2RtdWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udEluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250T3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKGFyaXRoVHlwZSA9PSBrTFRDX1BLSEFfSW50ZWdlckFyaXRoKQorICAgIHsKKyAgICAgICAgaWYgKExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oQSwgc2l6ZUEsIE4sIHNpemVOKSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEIsIHNpemVCLCBOLCBzaXplTikgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoTW9kTXVsOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisgICAgcGFyYW1zLm1vbnRGb3JtSW4gPSBtb250SW47CisgICAgcGFyYW1zLm1vbnRGb3JtT3V0ID0gbW9udE91dDsKKyAgICBwYXJhbXMuZXF1YWxUaW1lID0gZXF1YWxUaW1lOworCisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBCLCBzaXplQiwgTiwgc2l6ZU4sIE5VTEwsIDApOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgcmVzdWx0IGFuZCBzaXplIGZyb20gcmVnaXN0ZXIgQjAuICovCisgICAgICAgIGlmIChyZXN1bHRTaXplICYmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlc3VsdFNpemUgPSBiYXNlLT5QS0JTWjsKKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVzdWx0IHJlZ2lzdGVyIGludG8gcGxhY2UuICovCisgICAgICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgcmVzdWx0LCAqcmVzdWx0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEtIQSBDb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBMVENfUEtIQV9Db21wYXJlQmlnTnVtKGNvbnN0IHVpbnQ4X3QgKmEsIHNpemVfdCBzaXplQSwgY29uc3QgdWludDhfdCAqYiwgc2l6ZV90IHNpemVCKQoreworICAgIGludCByZXR2YWwgPSAwOworCisgICAgLyogc2tpcCB6ZXJvIG1zYnl0ZXMgLSBpbnRlZ2VyIGEgKi8KKyAgICB3aGlsZSAoKHNpemVBKSAmJiAoMHUgPT0gYVtzaXplQSAtIDFdKSkKKyAgICB7CisgICAgICAgIHNpemVBLS07CisgICAgfQorCisgICAgLyogc2tpcCB6ZXJvIG1zYnl0ZXMgLSBpbnRlZ2VyIGIgKi8KKyAgICB3aGlsZSAoKHNpemVCKSAmJiAoMHUgPT0gYltzaXplQiAtIDFdKSkKKyAgICB7CisgICAgICAgIHNpemVCLS07CisgICAgfQorCisgICAgaWYgKHNpemVBID4gc2l6ZUIpCisgICAgeworICAgICAgICByZXR2YWwgPSAxOworICAgIH0gLyogaW50IGEgaGFzIG1vcmUgbm9uLXplcm8gYnl0ZXMsIHRodXMgaXQgaXMgYmlnZ2VyIHRoYW4gYiAqLworICAgIGVsc2UgaWYgKHNpemVBIDwgc2l6ZUIpCisgICAgeworICAgICAgICByZXR2YWwgPSAtMTsKKyAgICB9IC8qIGludCBiIGhhcyBtb3JlIG5vbi16ZXJvIGJ5dGVzLCB0aHVzIGl0IGlzIGJpZ2dlciB0aGFuIGEgKi8KKyAgICBlbHNlIGlmIChzaXplQSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICB9IC8qIHNpemVBID0gc2l6ZUIgPSAwICovCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IG47CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgdmFsOworICAgICAgICB1aW50MzJfdCBlcXVhbDsKKworICAgICAgICBuID0gc2l6ZUEgLSAxOworICAgICAgICBpID0gMDsKKyAgICAgICAgZXF1YWwgPSAwOworCisgICAgICAgIHdoaWxlIChuID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGNoWG9yID0gYVtpXSBeIGJbaV07CisKKyAgICAgICAgICAgIGVxdWFsIHw9IGNoWG9yOworICAgICAgICAgICAgdmFsID0gKGludCljaFhvciAqIChhW2ldIC0gYltpXSk7CisKKyAgICAgICAgICAgIGlmICh2YWwgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmFsID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmFsID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKDAgPT0gZXF1YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHZhbCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChyZXR2YWwpOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Ob3JtYWxUb01vbnRnb21lcnkoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqc2l6ZVIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX3RpbWluZ190IGVxdWFsVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogbmVlZCB0byBjb252ZXJ0IG91ciBJbnRlZ2VyIGlucHV0cyBpbnRvIE1vbnRnb21lcnkgZm9ybWF0ICovCisgICAgaWYgKE4gJiYgc2l6ZU4gJiYgUjIgJiYgc2l6ZVIyKQorICAgIHsKKyAgICAgICAgLyogMS4gUjIgPSBNT0RfUjIoTikgKi8KKyAgICAgICAgc3RhdHVzID0gbHRjX3BraGFfbW9kUjIoYmFzZSwgTiwgc2l6ZU4sIFIyLCBzaXplUjIsIGFyaXRoVHlwZSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKyAgICAgICAgLyogMi4gQShNb250Z29tZXJ5KSA9IE1PRF9NVUxfSU1fT00oQSwgUjIsIE4pICovCisgICAgICAgIGlmIChBICYmIHNpemVBKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSBsdGNfcGtoYV9tb2RtdWwoYmFzZSwgQSwgKnNpemVBLCBSMiwgKnNpemVSMiwgTiwgc2l6ZU4sIEEsIHNpemVBLCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19QS0hBX01vbnRnb21lcnlGb3JtYXQsIGtMVENfUEtIQV9Nb250Z29tZXJ5Rm9ybWF0LCBlcXVhbFRpbWUpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIDIuIEIoTW9udGdvbWVyeSkgPSBNT0RfTVVMX0lNX09NKEIsIFIyLCBOKSAqLworICAgICAgICBpZiAoQiAmJiBzaXplQikKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gbHRjX3BraGFfbW9kbXVsKGJhc2UsIEIsICpzaXplQiwgUjIsICpzaXplUjIsIE4sIHNpemVOLCBCLCBzaXplQiwgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfUEtIQV9Nb250Z29tZXJ5Rm9ybWF0LCBrTFRDX1BLSEFfTW9udGdvbWVyeUZvcm1hdCwgZXF1YWxUaW1lKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0ga1N0YXR1c19TdWNjZXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb250Z29tZXJ5VG9Ob3JtYWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKQoreworICAgIHVpbnQ4X3Qgb25lID0gMTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKworICAgIC8qIEEgPSBNT0RfTVVMX0lNX09NKEEoTW9udGdvbWVyeSksIDEsIE4pICovCisgICAgaWYgKEEgJiYgc2l6ZUEpCisgICAgeworICAgICAgICBzdGF0dXMgPSBsdGNfcGtoYV9tb2RtdWwoYmFzZSwgQSwgKnNpemVBLCAmb25lLCBzaXplb2Yob25lKSwgTiwgc2l6ZU4sIEEsIHNpemVBLCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX1BLSEFfTW9udGdvbWVyeUZvcm1hdCwga0xUQ19QS0hBX01vbnRnb21lcnlGb3JtYXQsIGVxdWFsVGltZSk7CisgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgIT0gc3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQiA9IE1PRF9NVUxfSU1fT00oQihNb250Z29tZXJ5KSwgMSwgTikgKi8KKyAgICBpZiAoQiAmJiBzaXplQikKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGx0Y19wa2hhX21vZG11bChiYXNlLCBCLCAqc2l6ZUIsICZvbmUsIHNpemVvZihvbmUpLCBOLCBzaXplTiwgQiwgc2l6ZUIsIGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfUEtIQV9Nb250Z29tZXJ5Rm9ybWF0LCBrTFRDX1BLSEFfTW9udGdvbWVyeUZvcm1hdCwgZXF1YWxUaW1lKTsKKyAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyAhPSBzdGF0dXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19QS0hBX01vZEFkZChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmIChhcml0aFR5cGUgPT0ga0xUQ19QS0hBX0ludGVnZXJBcml0aCkKKyAgICB7CisgICAgICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEEsIHNpemVBLCBOLCBzaXplTikgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoTFRDX1BLSEFfQ29tcGFyZUJpZ051bShCLCBzaXplQiwgTiwgc2l6ZU4pID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoa1N0YXR1c19JbnZhbGlkQXJndW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZEFkZDsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworCisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBCLCBzaXplQiwgTiwgc2l6ZU4sIE5VTEwsIDApOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgcmVzdWx0IGFuZCBzaXplIGZyb20gcmVnaXN0ZXIgQjAuICovCisgICAgICAgIGlmIChyZXN1bHRTaXplICYmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlc3VsdFNpemUgPSBiYXNlLT5QS0JTWjsKKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVzdWx0IHJlZ2lzdGVyIGludG8gcGxhY2UuICovCisgICAgICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgcmVzdWx0LCAqcmVzdWx0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19QS0hBX01vZFN1YjEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oQSwgc2l6ZUEsIE4sIHNpemVOKSA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgfQorCisgICAgaWYgKExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oQiwgc2l6ZUIsIE4sIHNpemVOKSA+PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgfQorCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aE1vZFN1YjE7CisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBCLCBzaXplQiwgTiwgc2l6ZU4sIE5VTEwsIDApOworCisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSByZXN1bHQgYW5kIHNpemUgZnJvbSByZWdpc3RlciBCMC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdFNpemUgJiYgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVzdWx0U2l6ZSA9IGJhc2UtPlBLQlNaOworICAgICAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgICAgIGx0Y19wa2hhX3JlYWRfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCByZXN1bHQsICpyZXN1bHRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdHVzX3QgTFRDX1BLSEFfTW9kU3ViMihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVCLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSkKK3sKKyAgICBsdGNfcGtoYV9tb2RlX3BhcmFtc190IHBhcmFtczsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoTW9kU3ViMjsKKworICAgIGx0Y19wa2hhX2luaXRfZGF0YShiYXNlLCBBLCBzaXplQSwgQiwgc2l6ZUIsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RNdWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVCLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250SW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udE91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgc3RhdHVzID0KKyAgICAgICAgbHRjX3BraGFfbW9kbXVsKGJhc2UsIEEsIHNpemVBLCBCLCBzaXplQiwgTiwgc2l6ZU4sIHJlc3VsdCwgcmVzdWx0U2l6ZSwgYXJpdGhUeXBlLCBtb250SW4sIG1vbnRPdXQsIGVxdWFsVGltZSk7CisKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19QS0hBX01vZEV4cChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90IG1vbnRJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKGFyaXRoVHlwZSA9PSBrTFRDX1BLSEFfSW50ZWdlckFyaXRoKQorICAgIHsKKyAgICAgICAgaWYgKExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oQSwgc2l6ZUEsIE4sIHNpemVOKSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMoJnBhcmFtcyk7CisgICAgcGFyYW1zLmZ1bmMgPSBrTFRDX1BLSEFfQXJpdGhNb2RFeHA7CisgICAgcGFyYW1zLmFyaXRoVHlwZSA9IGFyaXRoVHlwZTsKKyAgICBwYXJhbXMubW9udEZvcm1JbiA9IG1vbnRJbjsKKyAgICBwYXJhbXMuZXF1YWxUaW1lID0gZXF1YWxUaW1lOworCisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBOVUxMLCAwLCBOLCBzaXplTiwgRSwgc2l6ZUUpOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgcmVzdWx0IGFuZCBzaXplIGZyb20gcmVnaXN0ZXIgQjAuICovCisgICAgICAgIGlmIChyZXN1bHRTaXplICYmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlc3VsdFNpemUgPSBiYXNlLT5QS0JTWjsKKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgcmVzdWx0IHJlZ2lzdGVyIGludG8gcGxhY2UuICovCisgICAgICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgcmVzdWx0LCAqcmVzdWx0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19QS0hBX01vZFJlZChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSkKK3sKKyAgICBsdGNfcGtoYV9tb2RlX3BhcmFtc190IHBhcmFtczsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoTW9kUmVkOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisKKyAgICBsdGNfcGtoYV9pbml0X2RhdGEoYmFzZSwgQSwgc2l6ZUEsIE5VTEwsIDAsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RJbnYoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgLyogQSBtdXN0IGJlIGxlc3MgdGhhbiBOIC0+IExUQ19QS0hBX0NvbXBhcmVCaWdOdW0oKSBtdXN0IHJldHVybiAtMSAqLworICAgIGlmIChhcml0aFR5cGUgPT0ga0xUQ19QS0hBX0ludGVnZXJBcml0aCkKKyAgICB7CisgICAgICAgIGlmIChMVENfUEtIQV9Db21wYXJlQmlnTnVtKEEsIHNpemVBLCBOLCBzaXplTikgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChrU3RhdHVzX0ludmFsaWRBcmd1bWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoTW9kSW52OworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisKKyAgICBsdGNfcGtoYV9pbml0X2RhdGEoYmFzZSwgQSwgc2l6ZUEsIE5VTEwsIDAsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RSMigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqTiwgdWludDE2X3Qgc2l6ZU4sIHVpbnQ4X3QgKnJlc3VsdCwgdWludDE2X3QgKnJlc3VsdFNpemUsIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSkKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisgICAgc3RhdHVzID0gbHRjX3BraGFfbW9kUjIoYmFzZSwgTiwgc2l6ZU4sIHJlc3VsdCwgcmVzdWx0U2l6ZSwgYXJpdGhUeXBlKTsKKyAgICBsdGNfY2xlYXJfYWxsKGJhc2UsIHRydWUpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19QS0hBX0dDRChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSkKK3sKKyAgICBsdGNfcGtoYV9tb2RlX3BhcmFtc190IHBhcmFtczsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoR2NkOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisKKyAgICBsdGNfcGtoYV9pbml0X2RhdGEoYmFzZSwgQSwgc2l6ZUEsIE5VTEwsIDAsIE4sIHNpemVOLCBOVUxMLCAwKTsKKyAgICBzdGF0dXMgPSBsdGNfcGtoYV9pbml0X21vZGUoYmFzZSwgJnBhcmFtcyk7CisKKyAgICBpZiAoc3RhdHVzID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICB7CisgICAgICAgIC8qIFJlYWQgdGhlIHJlc3VsdCBhbmQgc2l6ZSBmcm9tIHJlZ2lzdGVyIEIwLiAqLworICAgICAgICBpZiAocmVzdWx0U2l6ZSAmJiByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZXN1bHRTaXplID0gYmFzZS0+UEtCU1o7CisgICAgICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIHJlc3VsdCwgKnJlc3VsdFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9QcmltYWxpdHlUZXN0KExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpyZXMpCit7CisgICAgdWludDhfdCByZXN1bHQ7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgbHRjX3BraGFfZGVmYXVsdF9wYXJtcygmcGFyYW1zKTsKKyAgICBwYXJhbXMuZnVuYyA9IGtMVENfUEtIQV9Bcml0aFByaW1hbGl0eVRlc3Q7CisgICAgbHRjX3BraGFfaW5pdF9kYXRhKGJhc2UsIEEsIHNpemVBLCBCLCBzaXplQiwgTiwgc2l6ZU4sIE5VTEwsIDApOworICAgIHN0YXR1cyA9IGx0Y19wa2hhX2luaXRfbW9kZShiYXNlLCAmcGFyYW1zKTsKKworICAgIGlmIChzdGF0dXMgPT0ga1N0YXR1c19TdWNjZXNzKQorICAgIHsKKyAgICAgICAgLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSByZXN1bHQgcmVnaXN0ZXIgaW50byBwbGFjZS4gKi8KKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsICZyZXN1bHQsIDEpOworCisgICAgICAgICpyZXMgPSAoYm9vbClyZXN1bHQ7CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9FQ0NfUG9pbnRBZGQoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHRjX3BraGFfZWNjX3BvaW50X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHRjX3BraGFfZWNjX3BvaW50X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpSMm1vZE4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYkN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqcmVzdWx0KQoreworICAgIGx0Y19wa2hhX21vZGVfcGFyYW1zX3QgcGFyYW1zOworICAgIHVpbnQzMl90IGNsZWFyTWFzazsKKyAgICBzdGF0dXNfdCBzdGF0dXM7CisKKyAgICBsdGNfcGtoYV9kZWZhdWx0X3Bhcm1zKCZwYXJhbXMpOworICAgIHBhcmFtcy5mdW5jID0ga0xUQ19QS0hBX0FyaXRoRWNjQWRkOworICAgIHBhcmFtcy5hcml0aFR5cGUgPSBhcml0aFR5cGU7CisgICAgcGFyYW1zLnIybW9kbiA9IFIybW9kTiA/IGtMVENfUEtIQV9JbnB1dFIyIDoga0xUQ19QS0hBX0NhbGNSMjsKKworICAgIGNsZWFyTWFzayA9IGtMVENfQ2xlYXJNb2RlOworCisgICAgLyogQ2xlYXIgaW50ZXJuYWwgcmVnaXN0ZXIgc3RhdGVzLiAqLworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVBOworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVCOworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVOOworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVFOworCisgICAgYmFzZS0+Q1cgPSBjbGVhck1hc2s7CisgICAgYmFzZS0+U1RBID0ga0xUQ19TdGF0dXNEb25lSXNyOworICAgIGx0Y19wa2hhX2NsZWFyX3JlZ2FibmUoYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworCisgICAgLyogc2l6ZU4gc2hvdWxkIGJlIGxlc3MgdGhhbiA2NCBieXRlcy4gKi8KKyAgICBiYXNlLT5QS05TWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdOLCAwLCBOLCBzaXplKTsKKworICAgIGJhc2UtPlBLQVNaID0gc2l6ZTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0EsIDAsIEEtPlgsIHNpemUpOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQSwgMSwgQS0+WSwgc2l6ZSk7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdBLCAzLCBhQ3VydmVQYXJhbSwgc2l6ZSk7CisKKyAgICBiYXNlLT5QS0JTWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAwLCBiQ3VydmVQYXJhbSwgc2l6ZSk7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdCLCAxLCBCLT5YLCBzaXplKTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDIsIEItPlksIHNpemUpOworICAgIGlmIChSMm1vZE4pCisgICAgeworICAgICAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDMsIFIybW9kTiwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMSwgcmVzdWx0LT5YLCBzaXplKTsKKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDIsIHJlc3VsdC0+WSwgc2l6ZSk7CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9FQ0NfUG9pbnREb3VibGUoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHRjX3BraGFfZWNjX3BvaW50X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpiQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2VjY19wb2ludF90ICpyZXN1bHQpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgdWludDMyX3QgY2xlYXJNYXNrOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMoJnBhcmFtcyk7CisgICAgcGFyYW1zLmZ1bmMgPSBrTFRDX1BLSEFfQXJpdGhFY2NEb3VibGU7CisgICAgcGFyYW1zLmFyaXRoVHlwZSA9IGFyaXRoVHlwZTsKKworICAgIGNsZWFyTWFzayA9IGtMVENfQ2xlYXJNb2RlOworCisgICAgLyogQ2xlYXIgaW50ZXJuYWwgcmVnaXN0ZXIgc3RhdGVzLiAqLworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVBOworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVCOworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVOOworICAgIGNsZWFyTWFzayB8PSBrTFRDX0NsZWFyUGtoYVNpemVFOworCisgICAgYmFzZS0+Q1cgPSBjbGVhck1hc2s7CisgICAgYmFzZS0+U1RBID0ga0xUQ19TdGF0dXNEb25lSXNyOworICAgIGx0Y19wa2hhX2NsZWFyX3JlZ2FibmUoYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworCisgICAgLyogc2l6ZU4gc2hvdWxkIGJlIGxlc3MgdGhhbiA2NCBieXRlcy4gKi8KKyAgICBiYXNlLT5QS05TWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdOLCAwLCBOLCBzaXplKTsKKworICAgIGJhc2UtPlBLQVNaID0gc2l6ZTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0EsIDMsIGFDdXJ2ZVBhcmFtLCBzaXplKTsKKworICAgIGJhc2UtPlBLQlNaID0gc2l6ZTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDAsIGJDdXJ2ZVBhcmFtLCBzaXplKTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDEsIEItPlgsIHNpemUpOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMiwgQi0+WSwgc2l6ZSk7CisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMSwgcmVzdWx0LT5YLCBzaXplKTsKKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDIsIHJlc3VsdC0+WSwgc2l6ZSk7CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0dXNfdCBMVENfUEtIQV9FQ0NfUG9pbnRNdWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHRjX3BraGFfZWNjX3BvaW50X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNpemVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqUjJtb2ROLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2VjY19wb2ludF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaW5maW5pdHkpCit7CisgICAgbHRjX3BraGFfbW9kZV9wYXJhbXNfdCBwYXJhbXM7CisgICAgdWludDMyX3QgY2xlYXJNYXNrOworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGx0Y19wa2hhX2RlZmF1bHRfcGFybXMoJnBhcmFtcyk7CisgICAgcGFyYW1zLmZ1bmMgPSBrTFRDX1BLSEFfQXJpdGhFY2NNdWw7CisgICAgcGFyYW1zLmVxdWFsVGltZSA9IGVxdWFsVGltZTsKKyAgICBwYXJhbXMuYXJpdGhUeXBlID0gYXJpdGhUeXBlOworICAgIHBhcmFtcy5yMm1vZG4gPSBSMm1vZE4gPyBrTFRDX1BLSEFfSW5wdXRSMiA6IGtMVENfUEtIQV9DYWxjUjI7CisKKyAgICBjbGVhck1hc2sgPSBrTFRDX0NsZWFyTW9kZTsKKworICAgIC8qIENsZWFyIGludGVybmFsIHJlZ2lzdGVyIHN0YXRlcy4gKi8KKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQTsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplQjsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplTjsKKyAgICBjbGVhck1hc2sgfD0ga0xUQ19DbGVhclBraGFTaXplRTsKKworICAgIGJhc2UtPkNXID0gY2xlYXJNYXNrOworICAgIGJhc2UtPlNUQSA9IGtMVENfU3RhdHVzRG9uZUlzcjsKKyAgICBsdGNfcGtoYV9jbGVhcl9yZWdhYm5lKGJhc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUpOworCisgICAgLyogc2l6ZU4gc2hvdWxkIGJlIGxlc3MgdGhhbiA2NCBieXRlcy4gKi8KKyAgICBiYXNlLT5QS05TWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdOLCAwLCBOLCBzaXplKTsKKworICAgIGJhc2UtPlBLRVNaID0gc2l6ZUU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdFLCAwLCBFLCBzaXplRSk7CisKKyAgICBiYXNlLT5QS0FTWiA9IHNpemU7CisgICAgbHRjX3BraGFfd3JpdGVfcmVnKGJhc2UsIGtMVENfUEtIQV9SZWdBLCAwLCBBLT5YLCBzaXplKTsKKyAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0EsIDEsIEEtPlksIHNpemUpOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQSwgMywgYUN1cnZlUGFyYW0sIHNpemUpOworCisgICAgYmFzZS0+UEtCU1ogPSBzaXplOworICAgIGx0Y19wa2hhX3dyaXRlX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMCwgYkN1cnZlUGFyYW0sIHNpemUpOworICAgIGlmIChSMm1vZE4pCisgICAgeworICAgICAgICBsdGNfcGtoYV93cml0ZV9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDEsIFIybW9kTiwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdHVzID0gbHRjX3BraGFfaW5pdF9tb2RlKGJhc2UsICZwYXJhbXMpOworCisgICAgaWYgKHN0YXR1cyA9PSBrU3RhdHVzX1N1Y2Nlc3MpCisgICAgeworICAgICAgICAvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIHJlc3VsdCByZWdpc3RlciBpbnRvIHBsYWNlLiAqLworICAgICAgICBsdGNfcGtoYV9yZWFkX3JlZyhiYXNlLCBrTFRDX1BLSEFfUmVnQiwgMSwgcmVzdWx0LT5YLCBzaXplKTsKKyAgICAgICAgbHRjX3BraGFfcmVhZF9yZWcoYmFzZSwga0xUQ19QS0hBX1JlZ0IsIDIsIHJlc3VsdC0+WSwgc2l6ZSk7CisKKyAgICAgICAgaWYgKGluZmluaXR5KQorICAgICAgICB7CisgICAgICAgICAgICAqaW5maW5pdHkgPSAoYm9vbCkoYmFzZS0+U1RBICYga0xUQ19TdGF0dXNQdWJsaWNLZXlPcFplcm8pOworICAgICAgICB9CisgICAgfQorCisgICAgbHRjX2NsZWFyX2FsbChiYXNlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19QS0hBICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGMuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOWVmMTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGMuaApAQCAtMCwwICsxLDE1ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfTFRDX0hfCisjZGVmaW5lIF9GU0xfTFRDX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjCisgKiBAeworICovCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworLyohIEBicmllZiBMVEMgZHJpdmVyIHZlcnNpb24uIFZlcnNpb24gMi4wLjQuCisgKgorICogQ3VycmVudCB2ZXJzaW9uOiAyLjAuNAorICoKKyAqIENoYW5nZSBsb2c6CisgKiAtIFZlcnNpb24gMi4wLjEKKyAqICAgLSBmaXhlZCB3YXJuaW5nIGR1cmluZyBnKysgY29tcGlsYXRpb24KKyAqCisgKiAtIFZlcnNpb24gMi4wLjIKKyAqICAgLSBmaXhlZCBbS1BTREstMTA5MzJdW0xUQ11bU0hBXSBMVENfSEFTSCgpIGJsb2NrcyBpbmRlZmluaXRlbHkgd2hlbiBtZXNzYWdlIHNpemUgZXhjZWVkcyA0MDgwIGJ5dGVzCisgKgorICogLSBWZXJzaW9uIDIuMC4zCisgKiAgIC0gZml4ZWQgTFRDX1BLSEFfQ29tcGFyZUJpZ051bSgpIGluIGNhc2UgYW4gaW50ZWdlciBhcmd1bWVudCBpcyBhbiBhcnJheSBvZiBhbGwgemVyb2VzCisgKgorICogLSBWZXJzaW9uIDIuMC40CisgKiAgIC0gY29uc3RhbnQgTFRDX1BLSEFfQ29tcGFyZUJpZ051bSgpIHByb2Nlc3NpbmcgdGltZQorICovCisjZGVmaW5lIEZTTF9MVENfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCA0KSkKKy8qQH0qLworLyohIEB9ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBRVMgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX2FlcworICogQHsKKyAqLworLyohIEFFUyBibG9jayBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIExUQ19BRVNfQkxPQ0tfU0laRSAxNgorLyohIEFFUyBJbnB1dCBWZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBMVENfQUVTX0lWX1NJWkUgMTYKKworLyohIEBicmllZiBUeXBlIG9mIEFFUyBrZXkgZm9yIEVDQiBhbmQgQ0JDIGRlY3J5cHQgb3BlcmF0aW9ucy4gKi8KK3R5cGVkZWYgZW51bSBfbHRjX2Flc19rZXlfdAoreworICAgIGtMVENfRW5jcnlwdEtleSA9IDBVLCAvKiE8IElucHV0IGtleSBpcyBhbiBlbmNyeXB0IGtleSAqLworICAgIGtMVENfRGVjcnlwdEtleSA9IDFVLCAvKiE8IElucHV0IGtleSBpcyBhIGRlY3J5cHQga2V5ICovCit9IGx0Y19hZXNfa2V5X3Q7CisKKy8qIQorICpAfQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBERVMgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX2RlcworICogQHsKKyAqLworCisvKiEgQGJyaWVmIExUQyBERVMga2V5IHNpemUgLSA2NCBiaXRzLiAqLworI2RlZmluZSBMVENfREVTX0tFWV9TSVpFIDgKKworLyohIEBicmllZiBMVEMgREVTIElWIHNpemUgLSA4IGJ5dGVzICovCisjZGVmaW5lIExUQ19ERVNfSVZfU0laRSA4CisKKy8qIQorICpAfQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIQVNIIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX2hhc2gKKyAqIEB7CisgKi8KKy8qISBTdXBwb3J0ZWQgY3J5cHRvZ3JhcGhpYyBibG9jayBjaXBoZXIgZnVuY3Rpb25zIGZvciBIQVNIIGNyZWF0aW9uICovCit0eXBlZGVmIGVudW0gX2x0Y19oYXNoX2FsZ29fdAoreworICAgIGtMVENfWGNiY01hYyA9IDAsIC8qITwgWENCQy1NQUMgKEFFUyBlbmdpbmUpICovCisgICAga0xUQ19DbWFjLCAgICAgICAgLyohPCBDTUFDIChBRVMgZW5naW5lKSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBCisgICAga0xUQ19TaGExLCAgIC8qITwgU0hBXzEgICAoTURIQSBlbmdpbmUpICAqLworICAgIGtMVENfU2hhMjI0LCAvKiE8IFNIQV8yMjQgKE1ESEEgZW5naW5lKSAgKi8KKyAgICBrTFRDX1NoYTI1NiwgLyohPCBTSEFfMjU2IChNREhBIGVuZ2luZSkgICovCisjZW5kaWYgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfU0hBICovCit9IGx0Y19oYXNoX2FsZ29fdDsKKworLyohIEBicmllZiBMVEMgSEFTSCBDb250ZXh0IHNpemUuICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX1NIQSkgJiYgRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEKKyNkZWZpbmUgTFRDX0hBU0hfQ1RYX1NJWkUgNDEKKyNlbHNlCisjZGVmaW5lIExUQ19IQVNIX0NUWF9TSVpFIDI5CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19TSEEgKi8KKworLyohIEBicmllZiBTdG9yYWdlIHR5cGUgdXNlZCB0byBzYXZlIGhhc2ggY29udGV4dC4gKi8KK3R5cGVkZWYgdWludDMyX3QgbHRjX2hhc2hfY3R4X3RbTFRDX0hBU0hfQ1RYX1NJWkVdOworCisvKiEKKyAqQH0KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBLSEEgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0Y19kcml2ZXJfcGtoYQorICogQHsKKyAqLworLyohIFBLSEEgRUNDIHBvaW50IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX2x0Y19wa2hhX2VjY19wb2ludF90Cit7CisgICAgdWludDhfdCAqWDsgLyohPCBYIGNvb3JkaW5hdGUgKGFmZmluZSkgKi8KKyAgICB1aW50OF90ICpZOyAvKiE8IFkgY29vcmRpbmF0ZSAoYWZmaW5lKSAqLworfSBsdGNfcGtoYV9lY2NfcG9pbnRfdDsKKworLyohIEBicmllZiBVc2Ugb2YgdGltaW5nIGVxdWFsaXplZCB2ZXJzaW9uIG9mIGEgUEtIQSBmdW5jdGlvbi4gKi8KK3R5cGVkZWYgZW51bSBfbHRjX3BraGFfdGltaW5nX3QKK3sKKyAgICBrTFRDX1BLSEFfTm9UaW1pbmdFcXVhbGl6ZWQgPSAwVSwgLyohPCBOb3JtYWwgdmVyc2lvbiBvZiBhIFBLSEEgb3BlcmF0aW9uICovCisgICAga0xUQ19QS0hBX1RpbWluZ0VxdWFsaXplZCA9IDFVICAgIC8qITwgVGltaW5nLWVxdWFsaXplZCB2ZXJzaW9uIG9mIGEgUEtIQSBvcGVyYXRpb24gICovCit9IGx0Y19wa2hhX3RpbWluZ190OworCisvKiEgQGJyaWVmIEludGVnZXIgdnMgYmluYXJ5IHBvbHlub21pYWwgYXJpdGhtZXRpYyBzZWxlY3Rpb24uICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX2YybV90Cit7CisgICAga0xUQ19QS0hBX0ludGVnZXJBcml0aCA9IDBVLCAvKiE8IFVzZSBpbnRlZ2VyIGFyaXRobWV0aWMgKi8KKyAgICBrTFRDX1BLSEFfRjJtQXJpdGggPSAxVSAgICAgIC8qITwgVXNlIGJpbmFyeSBwb2x5bm9taWFsIGFyaXRobWV0aWMgKi8KK30gbHRjX3BraGFfZjJtX3Q7CisKKy8qISBAYnJpZWYgTW9udGdvbWVyeSBvciBub3JtYWwgUEtIQSBpbnB1dCBmb3JtYXQuICovCit0eXBlZGVmIGVudW0gX2x0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90Cit7CisgICAga0xUQ19QS0hBX05vcm1hbFZhbHVlID0gMFUsICAgICAvKiE8IFBLSEEgbnVtYmVyIGlzIG5vcm1hbCBpbnRlZ2VyICovCisgICAga0xUQ19QS0hBX01vbnRnb21lcnlGb3JtYXQgPSAxVSAvKiE8IFBLSEEgbnVtYmVyIGlzIGluIG1vbnRnb21lcnkgZm9ybWF0ICovCit9IGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90OworCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBMVEMgZHJpdmVyLgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgTFRDIGRyaXZlci4KKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCit2b2lkIExUQ19Jbml0KExUQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgRGVpbml0aWFsaXplcyB0aGUgTFRDIGRyaXZlci4KKyAqIFRoaXMgZnVuY3Rpb24gZGVpbml0aWFsaXplcyB0aGUgTFRDIGRyaXZlci4KKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCit2b2lkIExUQ19EZWluaXQoTFRDX1R5cGUgKmJhc2UpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9MVENfSEFTX0RQQU1TKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0RQQU1TCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBEUEEgTWFzayBTZWVkIHJlZ2lzdGVyLgorICoKKyAqIFRoZSBEUEEgTWFzayBTZWVkIHJlZ2lzdGVyIHJlc2VlZHMgdGhlIG1hc2sgdGhhdCBwcm92aWRlcyByZXNpc3RhbmNlIGFnYWluc3QgRFBBIChkaWZmZXJlbnRpYWwgcG93ZXIgYW5hbHlzaXMpCisgKiBhdHRhY2tzIG9uIEFFUyBvciBERVMga2V5cy4KKyAqCisgKiBEaWZmZXJlbnRpYWwgUG93ZXIgQW5hbHlzaXMgTWFzayAoRFBBKSByZXNpc3RhbmNlIHVzZXMgYSByYW5kb21seSBjaGFuZ2luZyBtYXNrIHRoYXQgaW50cm9kdWNlcworICogIm5vaXNlIiBpbnRvIHRoZSBwb3dlciBjb25zdW1lZCBieSB0aGUgQUVTIG9yIERFUy4gVGhpcyByZWR1Y2VzIHRoZSBzaWduYWwtdG8tbm9pc2UgcmF0aW8gdGhhdCBkaWZmZXJlbnRpYWwKKyAqIHBvd2VyIGFuYWx5c2lzIGF0dGFja3MgdXNlIHRvICJndWVzcyIgYml0cyBvZiB0aGUga2V5LiBUaGlzIHJhbmRvbWx5IGNoYW5naW5nIG1hc2sgc2hvdWxkIGJlCisgKiBzZWVkZWQgYXQgUE9SLCBhbmQgY29udGludWVzIHRvIHByb3ZpZGUgRFBBIHJlc2lzdGFuY2UgZnJvbSB0aGF0IHBvaW50IG9uLiBIb3dldmVyLCB0byBwcm92aWRlIGV2ZW4gbW9yZQorICogRFBBIHByb3RlY3Rpb24gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgRFBBIG1hc2sgYmUgcmVzZWVkZWQgYWZ0ZXIgZXZlcnkgNTAsMDAwIGJsb2NrcyBoYXZlCisgKiBiZWVuIHByb2Nlc3NlZC4gQXQgdGhhdCB0aW1lLCBzb2Z0d2FyZSBjYW4gb3B0IHRvIHdyaXRlIGEgbmV3IHNlZWQgKHByZWZlcmFibHkgb2J0YWluZWQgZnJvbSBhbiBSTkcpCisgKiBpbnRvIHRoZSBEUEEgTWFzayBTZWVkIHJlZ2lzdGVyIChEUEFNUyksIG9yIHNvZnR3YXJlIGNhbiBvcHQgdG8gcHJvdmlkZSB0aGUgbmV3IHNlZWQgZWFybGllciBvcgorICogbGF0ZXIsIG9yIG5vdCBhdCBhbGwuIERQQSByZXNpc3RhbmNlIGNvbnRpbnVlcyBldmVuIGlmIHRoZSBEUEEgbWFzayBpcyBuZXZlciByZXNlZWRlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBEUEEgbWFzayBzZWVkLgorICovCit2b2lkIExUQ19TZXREcGFNYXNrU2VlZChMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19EUEFNUyAqLworCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQUVTIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX2FlcworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBUcmFuc2Zvcm1zIGFuIEFFUyBlbmNyeXB0IGtleSAoZm9yd2FyZCBBRVMpIGludG8gdGhlIGRlY3J5cHQga2V5IChpbnZlcnNlIEFFUykuCisgKgorICogVHJhbnNmb3JtcyB0aGUgQUVTIGVuY3J5cHQga2V5IChmb3J3YXJkIEFFUykgaW50byB0aGUgZGVjcnlwdCBrZXkgKGludmVyc2UgQUVTKS4KKyAqIFRoZSBrZXkgZGVyaXZlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgZGlyZWN0IGxvYWQgZGVjcnlwdCBrZXkKKyAqIGZvciBBRVMgRUNCIGFuZCBDQkMgZGVjcnlwdGlvbiBvcGVyYXRpb25zIChrZXlUeXBlIGFyZ3VtZW50KS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBlbmNyeXB0S2V5IElucHV0IGtleSBmb3IgZGVjcnlwdCBrZXkgdHJhbnNmb3JtYXRpb24KKyAqIEBwYXJhbVtvdXRdIGRlY3J5cHRLZXkgT3V0cHV0IGtleSwgdGhlIGRlY3J5cHQgZm9ybSBvZiB0aGUgQUVTIGtleS4KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSBhbmQgb3V0cHV0IGtleSBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHJldHVybiBTdGF0dXMgZnJvbSBrZXkgZ2VuZXJhdGlvbiBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19HZW5lcmF0ZURlY3J5cHRLZXkoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmVuY3J5cHRLZXksIHVpbnQ4X3QgKmRlY3J5cHRLZXksIHVpbnQzMl90IGtleVNpemUpOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyBBRVMgdXNpbmcgdGhlIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIEFFUyB1c2luZyB0aGUgRUNCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWluIHRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVyIHRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfRW5jcnlwdEVjYigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LCB1aW50OF90ICpjaXBoZXJ0ZXh0LCB1aW50MzJfdCBzaXplLCBjb25zdCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleVNpemUpOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBBRVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgQUVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVyIHRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbiB0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5LgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtIGtleVR5cGUgSW5wdXQgdHlwZSBvZiB0aGUga2V5IChhbGxvd3MgdG8gZGlyZWN0bHkgbG9hZCBkZWNyeXB0IGtleSBmb3IgQUVTIEVDQiBkZWNyeXB0IG9wZXJhdGlvbi4pCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGRlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIEFFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW4gdGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXIgdGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBpbnB1dCBibG9jay4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19BRVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUpOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBBRVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXIgdGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWluIHRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgaW5wdXQgYmxvY2suCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbSBrZXlUeXBlIElucHV0IHR5cGUgb2YgdGhlIGtleSAoYWxsb3dzIHRvIGRpcmVjdGx5IGxvYWQgZGVjcnlwdCBrZXkgZm9yIEFFUyBDQkMgZGVjcnlwdCBvcGVyYXRpb24uKQorICogQHJldHVybiBTdGF0dXMgZnJvbSBkZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19BRVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2Flc19rZXlfdCBrZXlUeXBlKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgb3IgZGVjcnlwdHMgQUVTIHVzaW5nIENUUiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIG9yIGRlY3J5cHRzIEFFUyB1c2luZyBDVFIgYmxvY2sgbW9kZS4KKyAqIEFFUyBDVFIgbW9kZSB1c2VzIG9ubHkgZm9yd2FyZCBBRVMgY2lwaGVyIGFuZCBzYW1lIGFsZ29yaXRobSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4KKyAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGlzIHRoYXQsIGZvciBlbmNyeXB0aW9uLCB0aGUgaW5wdXQgYXJndW1lbnQKKyAqIGlzIHBsYWluIHRleHQgYW5kIHRoZSBvdXRwdXQgYXJndW1lbnQgaXMgY2lwaGVyIHRleHQuIEZvciBkZWNyeXB0aW9uLCB0aGUgaW5wdXQgYXJndW1lbnQgaXMgY2lwaGVyIHRleHQKKyAqIGFuZCB0aGUgb3V0cHV0IGFyZ3VtZW50IGlzIHBsYWluIHRleHQuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaW5wdXQgSW5wdXQgZGF0YSBmb3IgQ1RSIGJsb2NrIG1vZGUKKyAqIEBwYXJhbVtvdXRdIG91dHB1dCBPdXRwdXQgZGF0YSBmb3IgQ1RSIGJsb2NrIG1vZGUKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW1baW4sb3V0XSBjb3VudGVyIElucHV0IGNvdW50ZXIgKHVwZGF0ZXMgb24gcmV0dXJuKQorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBmb3J3YXJkIEFFUyBjaXBoZXIKKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbVtvdXRdIGNvdW50ZXJsYXN0IE91dHB1dCBjaXBoZXIgb2YgbGFzdCBjb3VudGVyLCBmb3IgY2hhaW5lZCBDVFIgY2FsbHMuIE5VTEwgY2FuIGJlIHBhc3NlZCBpZiBjaGFpbmVkIGNhbGxzIGFyZQorICogbm90IHVzZWQuCisgKiBAcGFyYW1bb3V0XSBzekxlZnQgT3V0cHV0IG51bWJlciBvZiBieXRlcyBpbiBsZWZ0IHVudXNlZCBpbiBjb3VudGVybGFzdCBibG9jay4gTlVMTCBjYW4gYmUgcGFzc2VkIGlmIGNoYWluZWQgY2FsbHMKKyAqIGFyZSBub3QgdXNlZC4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19DcnlwdEN0cihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb3VudGVyW0xUQ19BRVNfQkxPQ0tfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb3VudGVybGFzdFtMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc3pMZWZ0KTsKKworLyohIEFFUyBDVFIgZGVjcnlwdCBpcyBtYXBwZWQgdG8gdGhlIEFFUyBDVFIgZ2VuZXJpYyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTFRDX0FFU19EZWNyeXB0Q3RyKGJhc2UsIGlucHV0LCBvdXRwdXQsIHNpemUsIGNvdW50ZXIsIGtleSwga2V5U2l6ZSwgY291bnRlcmxhc3QsIHN6TGVmdCkgXAorICAgIExUQ19BRVNfQ3J5cHRDdHIoYmFzZSwgaW5wdXQsIG91dHB1dCwgc2l6ZSwgY291bnRlciwga2V5LCBrZXlTaXplLCBjb3VudGVybGFzdCwgc3pMZWZ0KQorCisvKiEgQUVTIENUUiBlbmNyeXB0IGlzIG1hcHBlZCB0byB0aGUgQUVTIENUUiBnZW5lcmljIG9wZXJhdGlvbiAqLworI2RlZmluZSBMVENfQUVTX0VuY3J5cHRDdHIoYmFzZSwgaW5wdXQsIG91dHB1dCwgc2l6ZSwgY291bnRlciwga2V5LCBrZXlTaXplLCBjb3VudGVybGFzdCwgc3pMZWZ0KSBcCisgICAgTFRDX0FFU19DcnlwdEN0cihiYXNlLCBpbnB1dCwgb3V0cHV0LCBzaXplLCBjb3VudGVyLCBrZXksIGtleVNpemUsIGNvdW50ZXJsYXN0LCBzekxlZnQpCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX0xUQ19IQVNfR0NNKSAmJiBGU0xfRkVBVFVSRV9MVENfSEFTX0dDTQorLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgQUVTIGFuZCB0YWdzIHVzaW5nIEdDTSBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIEFFUyBhbmQgb3B0aW9uYWxseSB0YWdzIHVzaW5nIEdDTSBibG9jayBtb2RlLiBJZiBwbGFpbnRleHQgaXMgTlVMTCwgb25seSB0aGUgR0hBU0ggaXMgY2FsY3VsYXRlZCBhbmQgb3V0cHV0CisgKiBpbiB0aGUgJ3RhZycgZmllbGQuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWluIHRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVyIHRleHQuCisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yCisgKiBAcGFyYW0gaXZTaXplIFNpemUgb2YgdGhlIElWCisgKiBAcGFyYW0gYWFkIElucHV0IGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YQorICogQHBhcmFtIGFhZFNpemUgSW5wdXQgc2l6ZSBpbiBieXRlcyBvZiBBQUQKKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHBhcmFtW291dF0gdGFnIE91dHB1dCBoYXNoIHRhZy4gU2V0IHRvIE5VTEwgdG8gc2tpcCB0YWcgcHJvY2Vzc2luZy4KKyAqIEBwYXJhbSB0YWdTaXplIElucHV0IHNpemUgb2YgdGhlIHRhZyB0byBnZW5lcmF0ZSwgaW4gYnl0ZXMuIE11c3QgYmUgNCw4LDEyLDEzLDE0LDE1IG9yIDE2LgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRUYWdHY20oTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBBRVMgYW5kIGF1dGhlbnRpY2F0ZXMgdXNpbmcgR0NNIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgQUVTIGFuZCBvcHRpb25hbGx5IGF1dGhlbnRpY2F0ZXMgdXNpbmcgR0NNIGJsb2NrIG1vZGUuIElmIGNpcGhlcnRleHQgaXMgTlVMTCwgb25seSB0aGUgR0hBU0ggaXMgY2FsY3VsYXRlZAorICogYW5kIGNvbXBhcmVkIHdpdGggdGhlIHJlY2VpdmVkIEdIQVNIIGluICd0YWcnIGZpZWxkLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVyIHRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbiB0ZXh0LgorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvcgorICogQHBhcmFtIGl2U2l6ZSBTaXplIG9mIHRoZSBJVgorICogQHBhcmFtIGFhZCBJbnB1dCBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEKKyAqIEBwYXJhbSBhYWRTaXplIElucHV0IHNpemUgaW4gYnl0ZXMgb2YgQUFECisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbSB0YWcgSW5wdXQgaGFzaCB0YWcgdG8gY29tcGFyZS4gU2V0IHRvIE5VTEwgdG8gc2tpcCB0YWcgcHJvY2Vzc2luZy4KKyAqIEBwYXJhbSB0YWdTaXplIElucHV0IHNpemUgb2YgdGhlIHRhZywgaW4gYnl0ZXMuIE11c3QgYmUgNCwgOCwgMTIsIDEzLCAxNCwgMTUsIG9yIDE2LgorICogQHJldHVybiBTdGF0dXMgZnJvbSBkZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0RlY3J5cHRUYWdHY20oTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpdlNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZ1NpemUpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfR0NNICovCisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIEFFUyBhbmQgdGFncyB1c2luZyBDQ00gYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBBRVMgYW5kIG9wdGlvbmFsbHkgdGFncyB1c2luZyBDQ00gYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW4gdGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXIgdGV4dC4KKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBaZXJvIG1lYW5zIGF1dGhlbnRpY2F0aW9uIG9ubHkuCisgKiBAcGFyYW0gaXYgTm9uY2UKKyAqIEBwYXJhbSBpdlNpemUgTGVuZ3RoIG9mIHRoZSBOb25jZSBpbiBieXRlcy4gTXVzdCBiZSA3LCA4LCA5LCAxMCwgMTEsIDEyLCBvciAxMy4KKyAqIEBwYXJhbSBhYWQgSW5wdXQgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLiBDYW4gYmUgTlVMTCBpZiBhYWRTaXplIGlzIHplcm8uCisgKiBAcGFyYW0gYWFkU2l6ZSBJbnB1dCBzaXplIGluIGJ5dGVzIG9mIEFBRC4gWmVybyBtZWFucyBkYXRhIG1vZGUgb25seSAoYXV0aGVudGljYXRpb24gc2tpcHBlZCkuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbVtvdXRdIHRhZyBHZW5lcmF0ZWQgb3V0cHV0IHRhZy4gU2V0IHRvIE5VTEwgdG8gc2tpcCB0YWcgcHJvY2Vzc2luZy4KKyAqIEBwYXJhbSB0YWdTaXplIElucHV0IHNpemUgb2YgdGhlIHRhZyB0byBnZW5lcmF0ZSwgaW4gYnl0ZXMuIE11c3QgYmUgNCwgNiwgOCwgMTAsIDEyLCAxNCwgb3IgMTYuCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfRW5jcnlwdFRhZ0NjbShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIEFFUyBhbmQgYXV0aGVudGljYXRlcyB1c2luZyBDQ00gYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBBRVMgYW5kIG9wdGlvbmFsbHkgYXV0aGVudGljYXRlcyB1c2luZyBDQ00gYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlciB0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW4gdGV4dC4KKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBaZXJvIG1lYW5zIGF1dGhlbnRpY2F0aW9uIG9ubHkuCisgKiBAcGFyYW0gaXYgTm9uY2UKKyAqIEBwYXJhbSBpdlNpemUgTGVuZ3RoIG9mIHRoZSBOb25jZSBpbiBieXRlcy4gTXVzdCBiZSA3LCA4LCA5LCAxMCwgMTEsIDEyLCBvciAxMy4KKyAqIEBwYXJhbSBhYWQgSW5wdXQgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLiBDYW4gYmUgTlVMTCBpZiBhYWRTaXplIGlzIHplcm8uCisgKiBAcGFyYW0gYWFkU2l6ZSBJbnB1dCBzaXplIGluIGJ5dGVzIG9mIEFBRC4gWmVybyBtZWFucyBkYXRhIG1vZGUgb25seSAoYXV0aGVudGljYXRpb24gc2tpcHBlZCkuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbSB0YWcgUmVjZWl2ZWQgdGFnLiBTZXQgdG8gTlVMTCB0byBza2lwIHRhZyBwcm9jZXNzaW5nLgorICogQHBhcmFtIHRhZ1NpemUgSW5wdXQgc2l6ZSBvZiB0aGUgcmVjZWl2ZWQgdGFnIHRvIGNvbXBhcmUgd2l0aCB0aGUgY29tcHV0ZWQgdGFnLCBpbiBieXRlcy4gTXVzdCBiZSA0LCA2LCA4LCAxMCwgMTIsCisgKiAxNCwgb3IgMTYuCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGRlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdFRhZ0NjbShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGl2U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdGFnU2l6ZSk7CisKKy8qIQorICpAfQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBERVMgQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX2RlcworICogQHsKKyAqLworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRFY2IoCisgICAgTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwgdWludDhfdCAqY2lwaGVydGV4dCwgdWludDMyX3Qgc2l6ZSwgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdEVjYigKKyAgICBMVENfVHlwZSAqYmFzZSwgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwgdWludDhfdCAqcGxhaW50ZXh0LCB1aW50MzJfdCBzaXplLCBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENiYyhMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIENGQiBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRW5jcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZGVjcnlwdGlvbgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVNfRGVjcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdEVjYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0Q2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0RWNiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRFY2IoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0Q2JjKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDYmMoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdENmYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDZmIoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IHVuaXF1ZSBpbnB1dCB2ZWN0b3IuIFRoZSBPRkIgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBJViBiZSB1bmlxdWUKKyAqICAgICAgICAgICBmb3IgZWFjaCBleGVjdXRpb24gb2YgdGhlIG1vZGUgdW5kZXIgdGhlIGdpdmVuIGtleS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdE9mYihMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0T2ZiKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICpAfQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIQVNIIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYWRkdG9ncm91cCBsdGNfZHJpdmVyX2hhc2gKKyAqIEB7CisgKi8KKy8qIQorICogQGJyaWVmIEluaXRpYWxpemUgSEFTSCBjb250ZXh0CisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSBIQVNILgorICogS2V5IHNoYWxsIGJlIHN1cHBsaWVkIGlmIHRoZSB1bmRlcmxheWluZyBhbGdvcml0bSBpcyBBRVMgWENCQy1NQUMgb3IgQ01BQy4KKyAqIEtleSBzaGFsbCBiZSBOVUxMIGlmIHRoZSB1bmRlcmxheWluZyBhbGdvcml0bSBpcyBTSEEuCisgKgorICogRm9yIFhDQkMtTUFDLCB0aGUga2V5IGxlbmd0aCBtdXN0IGJlIDE2LiBGb3IgQ01BQywgdGhlIGtleSBsZW5ndGggY2FuIGJlCisgKiB0aGUgQUVTIGtleSBsZW5ndGhzIHN1cHBvcnRlZCBieSBBRVMgZW5naW5lLiBGb3IgTURIQSB0aGUga2V5IGxlbmd0aCBhcmd1bWVudAorICogaXMgaWdub3JlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbVtvdXRdIGN0eCBPdXRwdXQgaGFzaCBjb250ZXh0CisgKiBAcGFyYW0gYWxnbyBVbmRlcmxheWluZyBhbGdvcml0aG0gdG8gdXNlIGZvciBoYXNoIGNvbXB1dGF0aW9uLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgKE5VTEwgaWYgdW5kZXJsYXlpbmcgYWxnb3JpdGhtIGlzIFNIQSkKKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgaW5wdXQga2V5IGluIGJ5dGVzCisgKiBAcmV0dXJuIFN0YXR1cyBvZiBpbml0aWFsaXphdGlvbgorICovCitzdGF0dXNfdCBMVENfSEFTSF9Jbml0KExUQ19UeXBlICpiYXNlLCBsdGNfaGFzaF9jdHhfdCAqY3R4LCBsdGNfaGFzaF9hbGdvX3QgYWxnbywgY29uc3QgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlTaXplKTsKKworLyohCisgKiBAYnJpZWYgQWRkIGRhdGEgdG8gY3VycmVudCBIQVNICisgKgorICogQWRkIGRhdGEgdG8gY3VycmVudCBIQVNILiBUaGlzIGNhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSB3aXRoIGFuIGFyYml0cmFyeSBhbW91bnQgb2YgZGF0YSB0byBiZQorICogaGFzaGVkLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIGN0eCBIQVNIIGNvbnRleHQKKyAqIEBwYXJhbSBpbnB1dCBJbnB1dCBkYXRhCisgKiBAcGFyYW0gaW5wdXRTaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHJldHVybiBTdGF0dXMgb2YgdGhlIGhhc2ggdXBkYXRlIG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfSEFTSF9VcGRhdGUobHRjX2hhc2hfY3R4X3QgKmN0eCwgY29uc3QgdWludDhfdCAqaW5wdXQsIHVpbnQzMl90IGlucHV0U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIEZpbmFsaXplIGhhc2hpbmcKKyAqCisgKiBPdXRwdXRzIHRoZSBmaW5hbCBoYXNoIGFuZCBlcmFzZXMgdGhlIGNvbnRleHQuCisgKgorICogQHBhcmFtW2luLG91dF0gY3R4IElucHV0IGhhc2ggY29udGV4dAorICogQHBhcmFtW291dF0gb3V0cHV0IE91dHB1dCBoYXNoIGRhdGEKKyAqIEBwYXJhbVtvdXRdIG91dHB1dFNpemUgT3V0cHV0IHBhcmFtZXRlciBzdG9yaW5nIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgaGFzaCBpbiBieXRlcworICogQHJldHVybiBTdGF0dXMgb2YgdGhlIGhhc2ggZmluaXNoIG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfSEFTSF9GaW5pc2gobHRjX2hhc2hfY3R4X3QgKmN0eCwgdWludDhfdCAqb3V0cHV0LCB1aW50MzJfdCAqb3V0cHV0U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIENyZWF0ZSBIQVNIIG9uIGdpdmVuIGRhdGEKKyAqCisgKiBQZXJmb3JtIHRoZSBmdWxsIGtleWVkIEhBU0ggaW4gb25lIGZ1bmN0aW9uIGNhbGwuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gYWxnbyBCbG9jayBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZSBmb3IgQ01BQyBjcmVhdGlvbgorICogQHBhcmFtIGlucHV0IElucHV0IGRhdGEKKyAqIEBwYXJhbSBpbnB1dFNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0ga2V5IElucHV0IGtleQorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiBpbnB1dCBrZXkgaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIG91dHB1dCBPdXRwdXQgaGFzaCBkYXRhCisgKiBAcGFyYW1bb3V0XSBvdXRwdXRTaXplIE91dHB1dCBwYXJhbWV0ZXIgc3RvcmluZyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGhhc2ggaW4gYnl0ZXMKKyAqIEByZXR1cm4gU3RhdHVzIG9mIHRoZSBvbmUgY2FsbCBoYXNoIG9wZXJhdGlvbi4KKyAqLworc3RhdHVzX3QgTFRDX0hBU0goTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICBsdGNfaGFzaF9hbGdvX3QgYWxnbywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpvdXRwdXRTaXplKTsKKy8qIQorICpAfQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQS0hBIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2RyaXZlcl9wa2hhCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIENvbXBhcmUgdHdvIFBLSEEgYmlnIG51bWJlcnMuCisgKgorICogQ29tcGFyZSB0d28gUEtIQSBiaWcgbnVtYmVycy4gUmV0dXJuIDEgZm9yIGEgPiBiLCAtMSBmb3IgYSA8IGIgYW5kIDAgaWYgdGhleSBhcmUgc2FtZS4KKyAqIFBLSEEgYmlnIG51bWJlciBpcyBsc2J5dGUgZmlyc3QuIFRodXMgdGhlIGNvbXBhcmlzb24gc3RhcnRzIGF0IG1zYnl0ZSB3aGljaCBpcyB0aGUgbGFzdCBtZW1iZXIgb2YgdGVzdGVkIGFycmF5cy4KKyAqCisgKiBAcGFyYW0gYSBGaXJzdCBpbnRlZ2VyIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIGJ5dGVzLCBsc2J5dGUgZmlyc3QuCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBpbiBieXRlcyBvZiB0aGUgZmlyc3QgaW50ZWdlci4KKyAqIEBwYXJhbSBiIFNlY29uZCBpbnRlZ2VyIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIGJ5dGVzLCBsc2J5dGUgZmlyc3QuCisgKiBAcGFyYW0gc2l6ZUIgU2l6ZSBpbiBieXRlcyBvZiB0aGUgc2Vjb25kIGludGVnZXIuCisgKiBAcmV0dXJuIDEgaWYgYSA+IGIuCisgKiBAcmV0dXJuIC0xIGlmIGEgPCBiLgorICogQHJldHVybiAwIGlmIGEgPSBiLgorICovCitpbnQgTFRDX1BLSEFfQ29tcGFyZUJpZ051bShjb25zdCB1aW50OF90ICphLCBzaXplX3Qgc2l6ZUEsIGNvbnN0IHVpbnQ4X3QgKmIsIHNpemVfdCBzaXplQik7CisKKy8qIQorICogQGJyaWVmIENvbnZlcnRzIGZyb20gaW50ZWdlciB0byBNb250Z29tZXJ5IGZvcm1hdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIFIyIG1vZCBOIGFuZCBvcHRpb25hbGx5IGNvbnZlcnRzIEEgb3IgQiBpbnRvIE1vbnRnb21lcnkgZm9ybWF0IG9mIEEgb3IgQi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBOIG1vZHVsdXMKKyAqIEBwYXJhbSBzaXplTiBzaXplIG9mIE4gaW4gYnl0ZXMKKyAqIEBwYXJhbVtpbixvdXRdIEEgVGhlIGZpcnN0IGlucHV0IGluIG5vbi1Nb250Z29tZXJ5IGZvcm1hdC4gT3V0cHV0IE1vbnRnb21lcnkgZm9ybWF0IG9mIHRoZSBmaXJzdCBpbnB1dC4KKyAqIEBwYXJhbVtpbixvdXRdIHNpemVBIHBvaW50ZXIgdG8gc2l6ZSB2YXJpYWJsZS4gT24gaW5wdXQgaXQgaG9sZHMgc2l6ZSBvZiBpbnB1dCBBIGluIGJ5dGVzLiBPbiBvdXRwdXQgaXQgaG9sZHMgc2l6ZSBvZgorICogICAgICAgICAgICAgICAgTW9udGdvbWVyeSBmb3JtYXQgb2YgQSBpbiBieXRlcy4KKyAqIEBwYXJhbVtpbixvdXRdIEIgU2Vjb25kIGlucHV0IGluIG5vbi1Nb250Z29tZXJ5IGZvcm1hdC4gT3V0cHV0IE1vbnRnb21lcnkgZm9ybWF0IG9mIHRoZSBzZWNvbmQgaW5wdXQuCisgKiBAcGFyYW1baW4sb3V0XSBzaXplQiBwb2ludGVyIHRvIHNpemUgdmFyaWFibGUuIE9uIGlucHV0IGl0IGhvbGRzIHNpemUgb2YgaW5wdXQgQiBpbiBieXRlcy4gT24gb3V0cHV0IGl0IGhvbGRzIHNpemUgb2YKKyAqICAgICAgICAgICAgICAgIE1vbnRnb21lcnkgZm9ybWF0IG9mIEIgaW4gYnl0ZXMuCisgKiBAcGFyYW1bb3V0XSBSMiBPdXRwdXQgTW9udGdvbWVyeSBmYWN0b3IgUjIgbW9kIE4uCisgKiBAcGFyYW1bb3V0XSBzaXplUjIgcG9pbnRlciB0byBzaXplIHZhcmlhYmxlLiBPbiBvdXRwdXQgaXQgaG9sZHMgc2l6ZSBvZiBNb250Z29tZXJ5IGZhY3RvciBSMiBtb2QgTiBpbiBieXRlcy4KKyAqIEBwYXJhbSBlcXVhbFRpbWUgUnVuIHRoZSBmdW5jdGlvbiB0aW1lIGVxdWFsaXplZCBvciBubyB0aW1pbmcgZXF1YWxpemF0aW9uLgorICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX05vcm1hbFRvTW9udGdvbWVyeShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnNpemVCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKlIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplUjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSk7CisKKy8qIQorICogQGJyaWVmIENvbnZlcnRzIGZyb20gTW9udGdvbWVyeSBmb3JtYXQgdG8gaW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgTW9udGdvbWVyeSBmb3JtYXQgb2YgQSBvciBCIGludG8gaW50IEEgb3IgQi4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBOIG1vZHVsdXMuCisgKiBAcGFyYW0gc2l6ZU4gc2l6ZSBvZiBOIG1vZHVsdXMgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW4sb3V0XSBBIElucHV0IGZpcnN0IG51bWJlciBpbiBNb250Z29tZXJ5IGZvcm1hdC4gT3V0cHV0IGlzIG5vbi1Nb250Z29tZXJ5IGZvcm1hdC4KKyAqIEBwYXJhbVtpbixvdXRdIHNpemVBIHBvaW50ZXIgdG8gc2l6ZSB2YXJpYWJsZS4gT24gaW5wdXQgaXQgaG9sZHMgc2l6ZSBvZiB0aGUgaW5wdXQgQSBpbiBieXRlcy4gT24gb3V0cHV0IGl0IGhvbGRzCisgKiBzaXplIG9mIG5vbi1Nb250Z29tZXJ5IEEgaW4gYnl0ZXMuCisgKiBAcGFyYW1baW4sb3V0XSBCIElucHV0IGZpcnN0IG51bWJlciBpbiBNb250Z29tZXJ5IGZvcm1hdC4gT3V0cHV0IGlzIG5vbi1Nb250Z29tZXJ5IGZvcm1hdC4KKyAqIEBwYXJhbVtpbixvdXRdIHNpemVCIHBvaW50ZXIgdG8gc2l6ZSB2YXJpYWJsZS4gT24gaW5wdXQgaXQgaG9sZHMgc2l6ZSBvZiB0aGUgaW5wdXQgQiBpbiBieXRlcy4gT24gb3V0cHV0IGl0IGhvbGRzCisgKiBzaXplIG9mIG5vbi1Nb250Z29tZXJ5IEIgaW4gYnl0ZXMuCisgKiBAcGFyYW0gZXF1YWxUaW1lIFJ1biB0aGUgZnVuY3Rpb24gdGltZSBlcXVhbGl6ZWQgb3Igbm8gdGltaW5nIGVxdWFsaXphdGlvbi4KKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9Nb250Z29tZXJ5VG9Ob3JtYWwoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV90aW1pbmdfdCBlcXVhbFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciBhZGRpdGlvbiAtIChBICsgQikgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtb2R1bGFyIGFkZGl0aW9uIG9mIChBICsgQikgbW9kIE4sIHdpdGggZWl0aGVyCisgKiBpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsIChGMm0pIGlucHV0cy4gIEluIHRoZSBGMm0gZm9ybSwgdGhpcyBmdW5jdGlvbiBpcworICogZXF1aXZhbGVudCB0byBhIGJpdHdpc2UgWE9SIGFuZCBpdCBpcyBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgc3VidHJhY3Rpb24uCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gQiBzZWNvbmQgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVCIFNpemUgb2YgQiBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cy4gRm9yIEYybSBvcGVyYXRpb24gdGhpcyBjYW4gYmUgTlVMTCwgYXMgTiBpcyBpZ25vcmVkIGR1cmluZyBGMm0gcG9seW5vbWlhbCBhZGRpdGlvbi4KKyAqIEBwYXJhbSBzaXplTiBTaXplIG9mIE4gaW4gYnl0ZXMuIFRoaXMgbXVzdCBiZSBnaXZlbiBmb3IgYm90aCBpbnRlZ2VyIGFuZCBGMm0gcG9seW5vbWlhbCBhZGRpdGlvbnMuCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgT3V0cHV0IGFycmF5IHRvIHN0b3JlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdFNpemUgT3V0cHV0IHNpemUgb2Ygb3BlcmF0aW9uIGluIGJ5dGVzCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9kQWRkKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBtb2R1bGFyIHN1YnRyYWN0aW9uIC0gKEEgLSBCKSBtb2QgTi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG1vZHVsYXIgc3VidHJhY3Rpb24gb2YgKEEgLSBCKSBtb2QgTiB3aXRoCisgKiBpbnRlZ2VyIGlucHV0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBBIGZpcnN0IGFkZGVuZCAoaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCkKKyAqIEBwYXJhbSBzaXplQSBTaXplIG9mIEEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBCIHNlY29uZCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUIgU2l6ZSBvZiBCIGluIGJ5dGVzCisgKiBAcGFyYW0gTiBtb2R1bHVzCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgT3V0cHV0IGFycmF5IHRvIHN0b3JlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdFNpemUgT3V0cHV0IHNpemUgb2Ygb3BlcmF0aW9uIGluIGJ5dGVzCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX01vZFN1YjEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUpOworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBtb2R1bGFyIHN1YnRyYWN0aW9uIC0gKEIgLSBBKSBtb2QgTi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG1vZHVsYXIgc3VidHJhY3Rpb24gb2YgKEIgLSBBKSBtb2QgTiwKKyAqIHdpdGggaW50ZWdlciBpbnB1dHMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gQiBzZWNvbmQgYWRkZW5kIChpbnRlZ2VyIG9yIGJpbmFyeSBwb2x5bm9taWFsKQorICogQHBhcmFtIHNpemVCIFNpemUgb2YgQiBpbiBieXRlcworICogQHBhcmFtIE4gbW9kdWx1cworICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RTdWIyKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciBtdWx0aXBsaWNhdGlvbiAtIChBIHggQikgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtb2R1bGFyIG11bHRpcGxpY2F0aW9uIHdpdGggZWl0aGVyIGludGVnZXIgb3IKKyAqIGJpbmFyeSBwb2x5bm9taWFsIChGMm0pIGlucHV0cy4gIEl0IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgd2hldGhlciBpbnB1dHMKKyAqIGFuZC9vciBvdXRwdXRzIHdpbGwgYmUgaW4gTW9udGdvbWVyeSBmb3JtIG9yIG5vdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBBIGZpcnN0IGFkZGVuZCAoaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCkKKyAqIEBwYXJhbSBzaXplQSBTaXplIG9mIEEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBCIHNlY29uZCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUIgU2l6ZSBvZiBCIGluIGJ5dGVzCisgKiBAcGFyYW0gTiBtb2R1bHVzLgorICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcGFyYW0gbW9udEluIEZvcm1hdCBvZiBpbnB1dHMKKyAqIEBwYXJhbSBtb250T3V0IEZvcm1hdCBvZiBvdXRwdXQKKyAqIEBwYXJhbSBlcXVhbFRpbWUgUnVuIHRoZSBmdW5jdGlvbiB0aW1lIGVxdWFsaXplZCBvciBubyB0aW1pbmcgZXF1YWxpemF0aW9uLiBUaGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQgZm9yIEYybSBtb2R1bGFyCisgKiBtdWx0aXBsaWNhdGlvbi4KKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9kTXVsKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfbW9udGdvbWVyeV9mb3JtX3QgbW9udEluLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX21vbnRnb21lcnlfZm9ybV90IG1vbnRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciBleHBvbmVudGlhdGlvbiAtIChBXkUpIG1vZCBOLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbW9kdWxhciBleHBvbmVudGlhdGlvbiB3aXRoIGVpdGhlciBpbnRlZ2VyIG9yCisgKiBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKSBpbnB1dHMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gTiBtb2R1bHVzCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW0gRSBleHBvbmVudAorICogQHBhcmFtIHNpemVFIFNpemUgb2YgRSBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHBhcmFtIG1vbnRJbiBGb3JtYXQgb2YgQSBpbnB1dCAobm9ybWFsIG9yIE1vbnRnb21lcnkpCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEBwYXJhbSBlcXVhbFRpbWUgUnVuIHRoZSBmdW5jdGlvbiB0aW1lIGVxdWFsaXplZCBvciBubyB0aW1pbmcgZXF1YWxpemF0aW9uLgorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9Nb2RFeHAoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpyZXN1bHRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2YybV90IGFyaXRoVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9tb250Z29tZXJ5X2Zvcm1fdCBtb250SW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfdGltaW5nX3QgZXF1YWxUaW1lKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciByZWR1Y3Rpb24gLSAoQSkgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtb2R1bGFyIHJlZHVjdGlvbiB3aXRoIGVpdGhlciBpbnRlZ2VyIG9yCisgKiBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKSBpbnB1dHMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gTiBtb2R1bHVzCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgT3V0cHV0IGFycmF5IHRvIHN0b3JlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdFNpemUgT3V0cHV0IHNpemUgb2Ygb3BlcmF0aW9uIGluIGJ5dGVzCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9kUmVkKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKTsKKworLyohCisgKiBAYnJpZWYgUGVyZm9ybXMgbW9kdWxhciBpbnZlcnNpb24gLSAoQV4tMSkgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtb2R1bGFyIGludmVyc2lvbiB3aXRoIGVpdGhlciBpbnRlZ2VyIG9yCisgKiBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKSBpbnB1dHMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCBhZGRlbmQgKGludGVnZXIgb3IgYmluYXJ5IHBvbHlub21pYWwpCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gTiBtb2R1bHVzCisgKiBAcGFyYW0gc2l6ZU4gU2l6ZSBvZiBOIGluIGJ5dGVzCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgT3V0cHV0IGFycmF5IHRvIHN0b3JlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdFNpemUgT3V0cHV0IHNpemUgb2Ygb3BlcmF0aW9uIGluIGJ5dGVzCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfTW9kSW52KExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnJlc3VsdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKTsKKworLyohCisgKiBAYnJpZWYgQ29tcHV0ZXMgaW50ZWdlciBNb250Z29tZXJ5IGZhY3RvciBSXjIgbW9kIE4uCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyBhIGNvbnN0YW50IHRvIGFzc2lzdCBpbiBjb252ZXJ0aW5nIG9wZXJhbmRzCisgKiBpbnRvIHRoZSBNb250Z29tZXJ5IHJlc2lkdWUgc3lzdGVtIHJlcHJlc2VudGF0aW9uLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIE4gbW9kdWx1cworICogQHBhcmFtIHNpemVOIFNpemUgb2YgTiBpbiBieXRlcworICogQHBhcmFtW291dF0gcmVzdWx0IE91dHB1dCBhcnJheSB0byBzdG9yZSByZXN1bHQgb2Ygb3BlcmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHRTaXplIE91dHB1dCBzaXplIG9mIG9wZXJhdGlvbiBpbiBieXRlcworICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX01vZFIyKAorICAgIExUQ19UeXBlICpiYXNlLCBjb25zdCB1aW50OF90ICpOLCB1aW50MTZfdCBzaXplTiwgdWludDhfdCAqcmVzdWx0LCB1aW50MTZfdCAqcmVzdWx0U2l6ZSwgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlKTsKKworLyohCisgKiBAYnJpZWYgQ2FsY3VsYXRlcyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgLSBHQ0QgKEEsIE4pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdHdvIGlucHV0cyB3aXRoCisgKiBlaXRoZXIgaW50ZWdlciBvciBiaW5hcnkgcG9seW5vbWlhbCAoRjJtKSBpbnB1dHMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBmaXJzdCB2YWx1ZSAobXVzdCBiZSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gTikKKyAqIEBwYXJhbSBzaXplQSBTaXplIG9mIEEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBOIHNlY29uZCB2YWx1ZSAobXVzdCBiZSBub24temVybykKKyAqIEBwYXJhbSBzaXplTiBTaXplIG9mIE4gaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBPdXRwdXQgYXJyYXkgdG8gc3RvcmUgcmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHBhcmFtW291dF0gcmVzdWx0U2l6ZSBPdXRwdXQgc2l6ZSBvZiBvcGVyYXRpb24gaW4gYnl0ZXMKKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9HQ0QoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpOLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVOLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcmVzdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUpOworCisvKiEKKyAqIEBicmllZiBFeGVjdXRlcyBNaWxsZXItUmFiaW4gcHJpbWFsaXR5IHRlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHdoZXRoZXIgb3Igbm90IGEgY2FuZGlkYXRlIHByaW1lIG51bWJlciBpcyBsaWtlbHkKKyAqIHRvIGJlIGEgcHJpbWUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBpbml0aWFsIHJhbmRvbSBzZWVkCisgKiBAcGFyYW0gc2l6ZUEgU2l6ZSBvZiBBIGluIGJ5dGVzCisgKiBAcGFyYW0gQiBudW1iZXIgb2YgdHJpYWwgcnVucworICogQHBhcmFtIHNpemVCIFNpemUgb2YgQiBpbiBieXRlcworICogQHBhcmFtIE4gY2FuZGlkYXRlIHByaW1lIGludGVnZXIKKyAqIEBwYXJhbSBzaXplTiBTaXplIG9mIE4gaW4gYnl0ZXMKKyAqIEBwYXJhbVtvdXRdIHJlcyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBsaWtlbHkgcHJpbWUgb3IgZmFsc2Ugb3RoZXJ3aXNlCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX1ByaW1hbGl0eVRlc3QoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHNpemVBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBzaXplQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgc2l6ZU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnJlcyk7CisKKy8qIQorICogQGJyaWVmIEFkZHMgZWxsaXB0aWMgY3VydmUgcG9pbnRzIC0gQSArIEIuCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBFQ0MgcG9pbnQgYWRkaXRpb24gb3ZlciBhIHByaW1lIGZpZWxkIChGcCkgb3IgYmluYXJ5IGZpZWxkIChGMm0pIHVzaW5nCisgKiBhZmZpbmUgY29vcmRpbmF0ZXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQSBMZWZ0LWhhbmQgcG9pbnQKKyAqIEBwYXJhbSBCIFJpZ2h0LWhhbmQgcG9pbnQKKyAqIEBwYXJhbSBOIFByaW1lIG1vZHVsdXMgb2YgdGhlIGZpZWxkCisgKiBAcGFyYW0gUjJtb2ROIE5VTEwgKHRoZSBmdW5jdGlvbiBjb21wdXRlcyBSMm1vZE4gaW50ZXJuYWxseSkgb3IgcG9pbnRlciB0byBwcmUtY29tcHV0ZWQgUjJtb2ROIChvYnRhaW5lZCBmcm9tCisgKiAgICAgICAgICAgICAgIExUQ19QS0hBX01vZFIyKCkgZnVuY3Rpb24pLgorICogQHBhcmFtIGFDdXJ2ZVBhcmFtIEEgcGFyYW1ldGVyIGZyb20gY3VydmUgZXF1YXRpb24KKyAqIEBwYXJhbSBiQ3VydmVQYXJhbSBCIHBhcmFtZXRlciBmcm9tIGN1cnZlIGVxdWF0aW9uIChjb25zdGFudCkKKyAqIEBwYXJhbSBzaXplIFNpemUgaW4gYnl0ZXMgb2YgY3VydmUgcG9pbnRzIGFuZCBwYXJhbWV0ZXJzCisgKiBAcGFyYW0gYXJpdGhUeXBlIFR5cGUgb2YgYXJpdGhtZXRpYyB0byBwZXJmb3JtIChpbnRlZ2VyIG9yIEYybSkKKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCBSZXN1bHQgcG9pbnQKKyAqIEByZXR1cm4gT3BlcmF0aW9uIHN0YXR1cy4KKyAqLworc3RhdHVzX3QgTFRDX1BLSEFfRUNDX1BvaW50QWRkKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19wa2hhX2VjY19wb2ludF90ICpCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqUjJtb2ROLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJDdXJ2ZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZWNjX3BvaW50X3QgKnJlc3VsdCk7CisKKy8qIQorICogQGJyaWVmIERvdWJsZXMgZWxsaXB0aWMgY3VydmUgcG9pbnRzIC0gQiArIEIuCisgKgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBFQ0MgcG9pbnQgZG91Ymxpbmcgb3ZlciBhIHByaW1lIGZpZWxkIChGcCkgb3IgYmluYXJ5IGZpZWxkIChGMm0pIHVzaW5nCisgKiBhZmZpbmUgY29vcmRpbmF0ZXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gQiBQb2ludCB0byBkb3VibGUKKyAqIEBwYXJhbSBOIFByaW1lIG1vZHVsdXMgb2YgdGhlIGZpZWxkCisgKiBAcGFyYW0gYUN1cnZlUGFyYW0gQSBwYXJhbWV0ZXIgZnJvbSBjdXJ2ZSBlcXVhdGlvbgorICogQHBhcmFtIGJDdXJ2ZVBhcmFtIEIgcGFyYW1ldGVyIGZyb20gY3VydmUgZXF1YXRpb24gKGNvbnN0YW50KQorICogQHBhcmFtIHNpemUgU2l6ZSBpbiBieXRlcyBvZiBjdXJ2ZSBwb2ludHMgYW5kIHBhcmFtZXRlcnMKKyAqIEBwYXJhbSBhcml0aFR5cGUgVHlwZSBvZiBhcml0aG1ldGljIHRvIHBlcmZvcm0gKGludGVnZXIgb3IgRjJtKQorICogQHBhcmFtW291dF0gcmVzdWx0IFJlc3VsdCBwb2ludAorICogQHJldHVybiBPcGVyYXRpb24gc3RhdHVzLgorICovCitzdGF0dXNfdCBMVENfUEtIQV9FQ0NfUG9pbnREb3VibGUoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHRjX3BraGFfZWNjX3BvaW50X3QgKkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICphQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpiQ3VydmVQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZjJtX3QgYXJpdGhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX2VjY19wb2ludF90ICpyZXN1bHQpOworCisvKiEKKyAqIEBicmllZiBNdWx0aXBsaWVzIGFuIGVsbGlwdGljIGN1cnZlIHBvaW50IGJ5IGEgc2NhbGFyIC0gRSB4IChBMCwgQTEpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgRUNDIHBvaW50IG11bHRpcGxpY2F0aW9uIHRvIG11bHRpcGx5IGFuIEVDQyBwb2ludCBieQorICogYSBzY2FsYXIgaW50ZWdlciBtdWx0aXBsaWVyIG92ZXIgYSBwcmltZSBmaWVsZCAoRnApIG9yIGEgYmluYXJ5IGZpZWxkIChGMm0pLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIEEgUG9pbnQgYXMgbXVsdGlwbGljYW5kCisgKiBAcGFyYW0gRSBTY2FsYXIgbXVsdGlwbGUKKyAqIEBwYXJhbSBzaXplRSBUaGUgc2l6ZSBvZiBFLCBpbiBieXRlcworICogQHBhcmFtIE4gTW9kdWx1cywgYSBwcmltZSBudW1iZXIgZm9yIHRoZSBGcCBmaWVsZCBvciBJcnJlZHVjaWJsZSBwb2x5bm9taWFsIGZvciBGMm0gZmllbGQuCisgKiBAcGFyYW0gUjJtb2ROIE5VTEwgKHRoZSBmdW5jdGlvbiBjb21wdXRlcyBSMm1vZE4gaW50ZXJuYWxseSkgb3IgcG9pbnRlciB0byBwcmUtY29tcHV0ZWQgUjJtb2ROIChvYnRhaW5lZCBmcm9tCisgKiAgICAgICAgTFRDX1BLSEFfTW9kUjIoKSBmdW5jdGlvbikuCisgKiBAcGFyYW0gYUN1cnZlUGFyYW0gQSBwYXJhbWV0ZXIgZnJvbSBjdXJ2ZSBlcXVhdGlvbgorICogQHBhcmFtIGJDdXJ2ZVBhcmFtIEIgcGFyYW1ldGVyIGZyb20gY3VydmUgZXF1YXRpb24gKEMgcGFyYW1ldGVyIGZvciBvcGVyYXRpb24gb3ZlciBGMm0pLgorICogQHBhcmFtIHNpemUgU2l6ZSBpbiBieXRlcyBvZiBjdXJ2ZSBwb2ludHMgYW5kIHBhcmFtZXRlcnMKKyAqIEBwYXJhbSBlcXVhbFRpbWUgUnVuIHRoZSBmdW5jdGlvbiB0aW1lIGVxdWFsaXplZCBvciBubyB0aW1pbmcgZXF1YWxpemF0aW9uLgorICogQHBhcmFtIGFyaXRoVHlwZSBUeXBlIG9mIGFyaXRobWV0aWMgdG8gcGVyZm9ybSAoaW50ZWdlciBvciBGMm0pCisgKiBAcGFyYW1bb3V0XSByZXN1bHQgUmVzdWx0IHBvaW50CisgKiBAcGFyYW1bb3V0XSBpbmZpbml0eSBPdXRwdXQgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHBvaW50IG9mIGluZmluaXR5LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiBXcml0aW5nIG9mIHRoaXMgb3V0cHV0IHdpbGwKKyAqIGJlIGlnbm9yZWQgaWYgdGhlIGFyZ3VtZW50IGlzIE5VTEwuCisgKiBAcmV0dXJuIE9wZXJhdGlvbiBzdGF0dXMuCisgKi8KK3N0YXR1c190IExUQ19QS0hBX0VDQ19Qb2ludE11bChMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsdGNfcGtoYV9lY2NfcG9pbnRfdCAqQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2l6ZUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpSMm1vZE4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYUN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYkN1cnZlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19wa2hhX3RpbWluZ190IGVxdWFsVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfcGtoYV9mMm1fdCBhcml0aFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3BraGFfZWNjX3BvaW50X3QgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICppbmZpbml0eSk7CisKKy8qIQorICpAfQorICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qIQorICpAfQorICovCisKKyNlbmRpZiAvKiBfRlNMX0xUQ19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfbHRjX2VkbWEuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Y19lZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNDNkZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Y19lZG1hLmMKQEAgLTAsMCArMSwxMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9sdGNfZWRtYS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qPCEgU3RydWN0dXJlIGRlZmluaXRpb24gZm9yIGx0Y19lZG1hX3ByaXZhdGVfaGFuZGxlX3QuIFRoZSBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9sdGNfZWRtYV9wcml2YXRlX2hhbmRsZQoreworICAgIExUQ19UeXBlICpiYXNlOworICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGU7Cit9IGx0Y19lZG1hX3ByaXZhdGVfaGFuZGxlX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qPCEgUHJpdmF0ZSBoYW5kbGUgb25seSB1c2VkIGZvciBpbnRlcm5hbGx5LiAqLworc3RhdGljIGx0Y19lZG1hX3ByaXZhdGVfaGFuZGxlX3Qgc19lZG1hUHJpdmF0ZUhhbmRsZVtGU0xfRkVBVFVSRV9TT0NfTFRDX0NPVU5UXTsKKworLyogQXJyYXkgb2YgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLiAqLworc3RhdGljIExUQ19UeXBlICpjb25zdCBzX2x0Y0Jhc2VbXSA9IExUQ19CQVNFX1BUUlM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN0YXRlIG1hY2hpbmUgc3RhdGUuKi8KKyNkZWZpbmUgTFRDX1NNX1NUQVRFX1NUQVJUIDB4MDAwMHUKKyNkZWZpbmUgTFRDX1NNX1NUQVRFX0ZJTklTSCAweEZGRkZ1CisKKy8qISBGdWxsIHdvcmQgcmVwcmVzZW50aW5nIHRoZSBhY3R1YWwgYml0IHZhbHVlcyBmb3IgdGhlIExUQyBtb2RlIHJlZ2lzdGVyLiAqLwordHlwZWRlZiB1aW50MzJfdCBsdGNfbW9kZV90OworCisjZGVmaW5lIExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR04gKDB4ZmYwdSkKKyNkZWZpbmUgTFRDX01EX0FMR19BRVMgKDB4MTBVKSAgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BTEc6IEFFUyAqLworI2RlZmluZSBMVENfTURfQUxHX0RFUyAoMHgyMFUpICAgICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FMRzogREVTICovCisjZGVmaW5lIExUQ19NRF9BTEdfVFJJUExFX0RFUyAoMHgyMVUpIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfQUxHOiAzREVTICovCisjZGVmaW5lIExUQ19NRFBLX0FMR19QS0hBICgweDgwVSkgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURQS19BTEc6IFBLSEEgKi8KKyNkZWZpbmUgTFRDX01EX0VOQ19ERUNSWVBUICgwVSkgICAgICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9FTkM6IERlY3J5cHQuICovCisjZGVmaW5lIExUQ19NRF9FTkNfRU5DUllQVCAoMHgxVSkgICAgIC8qITwgQml0IGZpZWxkIHZhbHVlIGZvciBMVENfTURfRU5DOiBFbmNyeXB0LiAqLworI2RlZmluZSBMVENfTURfQVNfVVBEQVRFICgwVSkgICAgICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FTOiBVcGRhdGUgKi8KKyNkZWZpbmUgTFRDX01EX0FTX0lOSVRJQUxJWkUgKDB4MVUpICAgLyohPCBCaXQgZmllbGQgdmFsdWUgZm9yIExUQ19NRF9BUzogSW5pdGlhbGl6ZSAqLworI2RlZmluZSBMVENfTURfQVNfRklOQUxJWkUgKDB4MlUpICAgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FTOiBGaW5hbGl6ZSAqLworI2RlZmluZSBMVENfTURfQVNfSU5JVF9GSU5BTCAoMHgzVSkgICAvKiE8IEJpdCBmaWVsZCB2YWx1ZSBmb3IgTFRDX01EX0FTOiBJbml0aWFsaXplL0ZpbmFsaXplICovCisKK2VudW0gX2x0Y19tZF9ka19iaXRfc2hpZnQKK3sKKyAgICBrTFRDX01vZGVSZWdCaXRTaGlmdERLID0gMTJVLAorfTsKKwordHlwZWRlZiBlbnVtIF9sdGNfYWxnb3JpdGhtCit7CisgICAga0xUQ19BbGdvcml0aG1BRVMgPSBMVENfTURfQUxHX0FFUyA8PCBMVENfTURfQUxHX1NISUZULAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTCisgICAga0xUQ19BbGdvcml0aG1ERVMgPSBMVENfTURfQUxHX0RFUyA8PCBMVENfTURfQUxHX1NISUZULAorICAgIGtMVENfQWxnb3JpdGhtM0RFUyA9IExUQ19NRF9BTEdfVFJJUExFX0RFUyA8PCBMVENfTURfQUxHX1NISUZULAorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTICovCit9IGx0Y19hbGdvcml0aG1fdDsKKwordHlwZWRlZiBlbnVtIF9sdGNfbW9kZV9zeW1tZXRyaWNfYWxnCit7CisgICAga0xUQ19Nb2RlQ1RSID0gMHgwMFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVDQkMgPSAweDEwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUVDQiA9IDB4MjBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlQ0ZCID0gMHgzMFUgPDwgTFRDX01EX0FBSV9TSElGVCwKKyAgICBrTFRDX01vZGVPRkIgPSAweDQwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUNNQUMgPSAweDYwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZVhDQkNNQUMgPSAweDcwVSA8PCBMVENfTURfQUFJX1NISUZULAorICAgIGtMVENfTW9kZUNDTSA9IDB4ODBVIDw8IExUQ19NRF9BQUlfU0hJRlQsCisgICAga0xUQ19Nb2RlR0NNID0gMHg5MFUgPDwgTFRDX01EX0FBSV9TSElGVCwKK30gbHRjX21vZGVfc3ltbWV0cmljX2FsZ190OworCit0eXBlZGVmIGVudW0gX2x0Y19tb2RlX2VuY3J5cHQKK3sKKyAgICBrTFRDX01vZGVEZWNyeXB0ID0gTFRDX01EX0VOQ19ERUNSWVBUIDw8IExUQ19NRF9FTkNfU0hJRlQsCisgICAga0xUQ19Nb2RlRW5jcnlwdCA9IExUQ19NRF9FTkNfRU5DUllQVCA8PCBMVENfTURfRU5DX1NISUZULAorfSBsdGNfbW9kZV9lbmNyeXB0X3Q7CisKK3R5cGVkZWYgZW51bSBfbHRjX21vZGVfYWxnb3JpdGhtX3N0YXRlCit7CisgICAga0xUQ19Nb2RlVXBkYXRlID0gTFRDX01EX0FTX1VQREFURSA8PCBMVENfTURfQVNfU0hJRlQsCisgICAga0xUQ19Nb2RlSW5pdCA9IExUQ19NRF9BU19JTklUSUFMSVpFIDw8IExUQ19NRF9BU19TSElGVCwKKyAgICBrTFRDX01vZGVGaW5hbGl6ZSA9IExUQ19NRF9BU19GSU5BTElaRSA8PCBMVENfTURfQVNfU0hJRlQsCisgICAga0xUQ19Nb2RlSW5pdEZpbmFsID0gTFRDX01EX0FTX0lOSVRfRklOQUwgPDwgTFRDX01EX0FTX1NISUZUCit9IGx0Y19tb2RlX2FsZ29yaXRobV9zdGF0ZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIHN0YXR1c190IGx0Y19nZXRfY29udGV4dChMVENfVHlwZSAqYmFzZSwgdWludDhfdCAqZGVzdCwgdWludDhfdCBkYXRhU2l6ZSwgdWludDhfdCBzdGFydEluZGV4KTsKK2V4dGVybiBzdGF0dXNfdCBsdGNfc2V0X2NvbnRleHQoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgZGF0YVNpemUsIHVpbnQ4X3Qgc3RhcnRJbmRleCk7CitleHRlcm4gc3RhdHVzX3QgbHRjX3N5bW1ldHJpY191cGRhdGUoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3N5bW1ldHJpY19hbGdfdCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBlbmMpOworZXh0ZXJuIHZvaWQgbHRjX21lbWNweSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpOworZXh0ZXJuIGJvb2wgbHRjX2NoZWNrX2tleV9zaXplKGNvbnN0IHVpbnQzMl90IGtleVNpemUpOworZXh0ZXJuIHN0YXR1c190IGx0Y193YWl0KExUQ19UeXBlICpiYXNlKTsKK2V4dGVybiB2b2lkIGx0Y19jbGVhcl9hbGwoTFRDX1R5cGUgKmJhc2UsIGJvb2wgYWRkUEtIQSk7CitleHRlcm4gc3RhdHVzX3QgbHRjXzNkZXNfY2hlY2tfaW5wdXRfYXJncyhsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZUFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXkyKTsKK2V4dGVybiB2b2lkIGx0Y19zeW1tZXRyaWNfcHJvY2VzcyhMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgaW5TaXplLCBjb25zdCB1aW50OF90ICoqaW5EYXRhLCB1aW50OF90ICoqb3V0RGF0YSk7CitleHRlcm4gc3RhdHVzX3QgbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGEoTFRDX1R5cGUgKmJhc2UsIGNvbnN0IHVpbnQ4X3QgKmluRGF0YSwgdWludDMyX3QgaW5TaXplLCB1aW50OF90ICpvdXREYXRhKTsKKworc3RhdGljIHVpbnQzMl90IExUQ19HZXRJbnN0YW5jZShMVENfVHlwZSAqYmFzZSk7CitzdGF0aWMgdm9pZCBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfRURNQShMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgaW5TaXplLCBjb25zdCB1aW50OF90ICoqaW5EYXRhLCB1aW50OF90ICoqb3V0RGF0YSk7CitzdGF0aWMgc3RhdHVzX3QgbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19FRE1BKExUQ19UeXBlICpiYXNlLCBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMVEMgQ29tbW9uIGNvZGUgc3RhdGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBTcGxpdHMgdGhlIExUQyBqb2IgaW50byBzZXNzaW9ucy4gVXNlZCBmb3IgQ0JDLCBDVFIsIENGQiwgT0ZCIGNpcGhlciBibG9jayBtb2Rlcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBpbkRhdGEgSW5wdXQgZGF0YSB0byBwcm9jZXNzLgorICogQHBhcmFtIGluU2l6ZSBJbnB1dCBzaXplIG9mIHRoZSBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gb3V0RGF0YSBPdXRwdXQgZGF0YSBidWZmZXIuCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zX0VETUEoTFRDX1R5cGUgKmJhc2UsIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworICAgIGJvb2wgZXhpdF9zbSA9IGZhbHNlOworCisgICAgaGFuZGxlLT5tb2RlUmVnID0gYmFzZS0+TUQ7CisgICAgcmV0dmFsID0ga1N0YXR1c19TdWNjZXNzOworCisgICAgaWYgKCghaGFuZGxlLT5pbkRhdGEpIHx8ICghaGFuZGxlLT5vdXREYXRhKSkKKyAgICB7CisgICAgICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfRklOSVNIOyAvKiBFTkQgKi8KKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgd2hpbGUgKGV4aXRfc20gPT0gZmFsc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZS0+c3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTFRDX1NNX1NUQVRFX1NUQVJUOgorICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzejsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5zaXplIDw9IExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR04pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gaGFuZGxlLT5zaXplOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGFfRURNQShiYXNlLCBoYW5kbGUtPmluRGF0YSwgc3osIGhhbmRsZS0+b3V0RGF0YSk7ICovCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5TaXplID0gc3o7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHNpemUuICovCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT5EUyA9IGluU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogU3BsaXQgdGhlIGluU2l6ZSBpbnRvIGZ1bGwgMTYtYnl0ZSBjaHVua3MgYW5kIGxhc3QgaW5jb21wbGV0ZSBibG9jayBkdWUgdG8gTFRDIEFFUyBPRklGTworICAgICAgICAgICAgICAgICAgICAgICAgICogZXJyYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5TaXplIDw9IDE2dSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IGluU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgYWxsIDE2LWJ5dGUgZGF0YSBjaHVua3MuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSBpblNpemUgJSAxNnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RTaXplID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUgLT0gMTY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluU2l6ZSAtPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemU7IC8qIGluU2l6ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxNiBieXRlIGJvdW5kYXJ5LiByZW1haW5pbmcgYnl0ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnNpemUgLT0gaW5TaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19FRE1BKGJhc2UsIGluU2l6ZSwgJmhhbmRsZS0+aW5EYXRhLCAmaGFuZGxlLT5vdXREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X3NtID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhc3RTaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2VzcyhiYXNlLCBsYXN0U2l6ZSwgJmhhbmRsZS0+aW5EYXRhLCAmaGFuZGxlLT5vdXREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnNpemUgLT0gbGFzdFNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IExUQ19TTV9TVEFURV9GSU5JU0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMVENfU01fU1RBVEVfRklOSVNIOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBiYXNlLT5NRCA9IGhhbmRsZS0+bW9kZVJlZzsKKworICAgICAgICAgICAgICAgIGx0Y19jbGVhcl9hbGwoYmFzZSwgZmFsc2UpOworCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwgcmV0dmFsLCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXhpdF9zbSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisvKiEKKyAqIEBicmllZiBTcGxpdHMgdGhlIExUQyBqb2IgaW50byBzZXNzaW9ucy4gVXNlZCBmb3IgQ0JDLCBDVFIsIENGQiwgT0ZCIGNpcGhlciBibG9jayBtb2Rlcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBpbkRhdGEgSW5wdXQgZGF0YSB0byBwcm9jZXNzLgorICogQHBhcmFtIGluU2l6ZSBJbnB1dCBzaXplIG9mIHRoZSBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gb3V0RGF0YSBPdXRwdXQgZGF0YSBidWZmZXIuCisgKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfcHJvY2Vzc19tZXNzYWdlX2luX3Nlc3Npb25zX2N0cl9FRE1BKExUQ19UeXBlICpiYXNlLCBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKyAgICBib29sIGV4aXRfc20gPSBmYWxzZTsKKworICAgIGhhbmRsZS0+bW9kZVJlZyA9IGJhc2UtPk1EOworICAgIHJldHZhbCA9IGtTdGF0dXNfU3VjY2VzczsKKworICAgIGlmICgoIWhhbmRsZS0+aW5EYXRhKSB8fCAoIWhhbmRsZS0+b3V0RGF0YSkpCisgICAgeworICAgICAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX0ZJTklTSDsKKyAgICAgICAgcmV0dmFsID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgd2hpbGUgKGV4aXRfc20gPT0gZmFsc2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZS0+c3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgTFRDX1NNX1NUQVRFX1NUQVJUOgorICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnNpemUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzejsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5zaXplIDw9IExUQ19GSUZPX1NaX01BWF9ET1dOX0FMR04pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gaGFuZGxlLT5zaXplOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBMVENfRklGT19TWl9NQVhfRE9XTl9BTEdOOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogcmV0dmFsID0gbHRjX3N5bW1ldHJpY19wcm9jZXNzX2RhdGFfRURNQShiYXNlLCBoYW5kbGUtPmluRGF0YSwgc3osIGhhbmRsZS0+b3V0RGF0YSk7ICovCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5TaXplID0gc3o7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHNpemUuICovCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT5EUyA9IGluU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogU3BsaXQgdGhlIGluU2l6ZSBpbnRvIGZ1bGwgMTYtYnl0ZSBjaHVua3MgYW5kIGxhc3QgaW5jb21wbGV0ZSBibG9jayBkdWUgdG8gTFRDIEFFUyBPRklGTworICAgICAgICAgICAgICAgICAgICAgICAgICogZXJyYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5TaXplIDw9IDE2dSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IGluU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgYWxsIDE2LWJ5dGUgZGF0YSBjaHVua3MuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSBpblNpemUgJSAxNnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RTaXplID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2l6ZSA9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNpemUgLT0gMTY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluU2l6ZSAtPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNpemU7IC8qIGluU2l6ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxNiBieXRlIGJvdW5kYXJ5LiByZW1haW5pbmcgYnl0ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnNpemUgLT0gaW5TaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2Vzc19FRE1BKGJhc2UsIGluU2l6ZSwgJmhhbmRsZS0+aW5EYXRhLCAmaGFuZGxlLT5vdXREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X3NtID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhc3RTaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19zeW1tZXRyaWNfcHJvY2VzcyhiYXNlLCBsYXN0U2l6ZSwgJmhhbmRsZS0+aW5EYXRhLCAmaGFuZGxlLT5vdXREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBsdGNfd2FpdChiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnNpemUgLT0gbGFzdFNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT5zdGF0ZSA9IExUQ19TTV9TVEFURV9GSU5JU0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMVENfU01fU1RBVEVfRklOSVNIOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBiYXNlLT5NRCA9IGhhbmRsZS0+bW9kZVJlZzsKKworICAgICAgICAgICAgICAgIC8qIENUUiBmaW5hbCBwaGFzZS4qLworICAgICAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gcmV0dmFsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQgPSBoYW5kbGUtPmluRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0ID0gaGFuZGxlLT5vdXREYXRhOworCisgICAgICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlLT5jb3VudGVybGFzdCAhPSBOVUxMKSAmJiAoaGFuZGxlLT5sYXN0U2l6ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgemVyb2VzWzE2XSA9IHswfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX3QgbW9kZVJlZzsKKworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZVJlZyA9ICh1aW50MzJfdClrTFRDX0FsZ29yaXRobUFFUyB8ICh1aW50MzJfdClrTFRDX01vZGVDVFIgfCAodWludDMyX3Qpa0xUQ19Nb2RlRW5jcnlwdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBtb2RlIHJlZ2lzdGVyIHRvIHRoZSBoYXJkd2FyZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UtPk1EID0gbW9kZVJlZyB8ICh1aW50MzJfdClrTFRDX01vZGVGaW5hbGl6ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udGV4dCBpcyByZS11c2VkIChDVFJpKSAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YShiYXNlLCBpbnB1dCwgaGFuZGxlLT5sYXN0U2l6ZSwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrU3RhdHVzX1N1Y2Nlc3MgPT0gcmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUtPnN6TGVmdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpoYW5kbGUtPnN6TGVmdCA9IDE2VSAtIGhhbmRsZS0+bGFzdFNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBhbGdvcml0aG0gc3RhdGUuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS0+TUQgPSBtb2RlUmVnIHwgKHVpbnQzMl90KWtMVENfTW9kZVVwZGF0ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRleHQgaXMgcmUtdXNlZCAoQ1RSaSkgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfZGF0YShiYXNlLCB6ZXJvZXMsIDE2VSwgaGFuZGxlLT5jb3VudGVybGFzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGtTdGF0dXNfU3VjY2VzcyA9PSByZXR2YWwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19nZXRfY29udGV4dChiYXNlLCAmaGFuZGxlLT5jb3VudGVyWzBdLCAxNlUsIDRVKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2NsZWFyX2FsbChiYXNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCByZXR2YWwsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGV4aXRfc20gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFFUyBDb2RlIHB1YmxpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdHVzX3QgTFRDX0FFU19FbmNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworCisgICAgaWYgKChsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkgPT0gMCkgfHwgKHNpemUgPCAxNnUpIHx8CisgICAgICAgIChzaXplICUgMTZ1KSkgLyogRUNCIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZUVuY3J5cHQpOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIGhhbmRsZS0+aW5EYXRhID0gJnBsYWludGV4dFswXTsKKyAgICBoYW5kbGUtPm91dERhdGEgPSAmY2lwaGVydGV4dFswXTsKKyAgICBoYW5kbGUtPnNpemUgPSBzaXplOworICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfU1RBUlQ7CisgICAgaGFuZGxlLT5zdGF0ZV9tYWNoaW5lID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19FRE1BOworICAgIHJldHZhbCA9IGhhbmRsZS0+c3RhdGVfbWFjaGluZShiYXNlLCBoYW5kbGUpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYWVzX2tleV90IGtleVR5cGUpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKChsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkgPT0gMCkgfHwgKHNpemUgPCAxNnUpIHx8CisgICAgICAgIChzaXplICUgMTZ1KSkgLyogRUNCIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVFQ0IsIGtMVENfTW9kZURlY3J5cHQpOworCisgICAgLyogc2V0IERLIGJpdCBpbiB0aGUgTFRDIE1vZGUgUmVnaXN0ZXIgQUFJIGZpZWxkIGZvciBkaXJlY3RseSBsb2FkZWQgZGVjcnlwdCBrZXlzICovCisgICAgaWYgKGtleVR5cGUgPT0ga0xUQ19EZWNyeXB0S2V5KQorICAgIHsKKyAgICAgICAgYmFzZS0+TUQgfD0gKDFVIDw8IGtMVENfTW9kZVJlZ0JpdFNoaWZ0REspOworICAgIH0KKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICBoYW5kbGUtPmluRGF0YSA9ICZjaXBoZXJ0ZXh0WzBdOworICAgIGhhbmRsZS0+b3V0RGF0YSA9ICZwbGFpbnRleHRbMF07CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQTsKKyAgICBzdGF0dXMgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRW5jcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworCisgICAgaWYgKChsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkgPT0gMCkgfHwgKHNpemUgPCAxNnUpIHx8CisgICAgICAgIChzaXplICUgMTZ1KSkgLyogQ0JDIG1vZGUsIHNpemUgbXVzdCBiZSAxNi1ieXRlIG11bHRpcGxlICovCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZUVuY3J5cHQpOworCisgICAgLyogV3JpdGUgSVYgZGF0YSB0byB0aGUgY29udGV4dCByZWdpc3Rlci4gKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJml2WzBdLCBMVENfQUVTX0lWX1NJWkUsIDApOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIGhhbmRsZS0+aW5EYXRhID0gJnBsYWludGV4dFswXTsKKyAgICBoYW5kbGUtPm91dERhdGEgPSAmY2lwaGVydGV4dFswXTsKKyAgICBoYW5kbGUtPnNpemUgPSBzaXplOworICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfU1RBUlQ7CisgICAgaGFuZGxlLT5zdGF0ZV9tYWNoaW5lID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19FRE1BOworICAgIHJldHZhbCA9IGhhbmRsZS0+c3RhdGVfbWFjaGluZShiYXNlLCBoYW5kbGUpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXR1c190IExUQ19BRVNfRGVjcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfQUVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSkKK3sKKyAgICBzdGF0dXNfdCByZXR2YWw7CisKKyAgICBpZiAoKGx0Y19jaGVja19rZXlfc2l6ZShrZXlTaXplKSA9PSAwKSB8fCAoc2l6ZSA8IDE2dSkgfHwKKyAgICAgICAgKHNpemUgJSAxNnUpKSAvKiBDQkMgbW9kZSwgc2l6ZSBtdXN0IGJlIDE2LWJ5dGUgbXVsdGlwbGUgKi8KKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIHNldCBESyBiaXQgaW4gdGhlIExUQyBNb2RlIFJlZ2lzdGVyIEFBSSBmaWVsZCBmb3IgZGlyZWN0bHkgbG9hZGVkIGRlY3J5cHQga2V5cyAqLworICAgIGlmIChrZXlUeXBlID09IGtMVENfRGVjcnlwdEtleSkKKyAgICB7CisgICAgICAgIGJhc2UtPk1EIHw9ICgxVSA8PCBrTFRDX01vZGVSZWdCaXRTaGlmdERLKTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCBrZXksIGtleVNpemUsIGtMVENfQWxnb3JpdGhtQUVTLCBrTFRDX01vZGVDQkMsIGtMVENfTW9kZURlY3J5cHQpOworCisgICAgLyogV3JpdGUgSVYgZGF0YSB0byB0aGUgY29udGV4dCByZWdpc3Rlci4gKi8KKyAgICBsdGNfc2V0X2NvbnRleHQoYmFzZSwgJml2WzBdLCBMVENfQUVTX0lWX1NJWkUsIDApOworCisgICAgLyogUHJvY2VzcyBkYXRhIGFuZCByZXR1cm4gc3RhdHVzLiAqLworICAgIGhhbmRsZS0+aW5EYXRhID0gJmNpcGhlcnRleHRbMF07CisgICAgaGFuZGxlLT5vdXREYXRhID0gJnBsYWludGV4dFswXTsKKyAgICBoYW5kbGUtPnNpemUgPSBzaXplOworICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfU1RBUlQ7CisgICAgaGFuZGxlLT5zdGF0ZV9tYWNoaW5lID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19FRE1BOworICAgIHJldHZhbCA9IGhhbmRsZS0+c3RhdGVfbWFjaGluZShiYXNlLCBoYW5kbGUpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXR1c190IExUQ19BRVNfQ3J5cHRDdHJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcltMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY291bnRlcmxhc3RbTFRDX0FFU19CTE9DS19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpzekxlZnQpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworICAgIHVpbnQzMl90IGxhc3RTaXplOworCisgICAgaWYgKCFsdGNfY2hlY2tfa2V5X3NpemUoa2V5U2l6ZSkpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlLT5jYWxsYmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaGFuZGxlLT5jYWxsYmFjayhiYXNlLCBoYW5kbGUsIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50LCBoYW5kbGUtPnVzZXJEYXRhKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgbGFzdFNpemUgPSAwVTsKKyAgICBpZiAoY291bnRlcmxhc3QgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8qIFNwbGl0IHRoZSBzaXplIGludG8gZnVsbCAxNi1ieXRlIGNodW5rcyBhbmQgbGFzdCBpbmNvbXBsZXRlIGJsb2NrIGR1ZSB0byBMVEMgQUVTIE9GSUZPIGVycmF0YSAqLworICAgICAgICBpZiAoc2l6ZSA8PSAxNlUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKKyAgICAgICAgICAgIHNpemUgPSAwVTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFByb2Nlc3MgYWxsIDE2LWJ5dGUgZGF0YSBjaHVua3MuICovCisgICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemUgJSAxNlU7CisgICAgICAgICAgICBpZiAobGFzdFNpemUgPT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGFzdFNpemUgPSAxNlU7CisgICAgICAgICAgICAgICAgc2l6ZSAtPSAxNlU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2l6ZSAtPSBsYXN0U2l6ZTsgLyogc2l6ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxNiBieXRlIGJvdW5kYXJ5LiByZW1haW5pbmcgYnl0ZXMgaW4gbGFzdFNpemUgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsIGtleSwga2V5U2l6ZSwga0xUQ19BbGdvcml0aG1BRVMsIGtMVENfTW9kZUNUUiwga0xUQ19Nb2RlRW5jcnlwdCk7CisKKyAgICAvKiBXcml0ZSBpbml0aWFsIGNvdW50ZXIgZGF0YSB0byB0aGUgY29udGV4dCByZWdpc3Rlci4KKyAgICAgKiBOT1RFIHRoZSBjb3VudGVyIHZhbHVlcyBzdGFydCBhdCA0LWJ5dGVzIG9mZnNldCBpbnRvIHRoZSBjb250ZXh0LiAqLworICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCAmY291bnRlclswXSwgMTZVLCA0VSk7CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgaGFuZGxlLT5pbkRhdGEgPSAmaW5wdXRbMF07CisgICAgaGFuZGxlLT5vdXREYXRhID0gJm91dHB1dFswXTsKKyAgICBoYW5kbGUtPnNpemUgPSBzaXplOworICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfU1RBUlQ7CisgICAgaGFuZGxlLT5zdGF0ZV9tYWNoaW5lID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19jdHJfRURNQTsKKworICAgIGhhbmRsZS0+Y291bnRlciA9IGNvdW50ZXI7CisgICAgaGFuZGxlLT5rZXkgPSBrZXk7CisgICAgaGFuZGxlLT5rZXlTaXplID0ga2V5U2l6ZTsKKyAgICBoYW5kbGUtPmNvdW50ZXJsYXN0ID0gY291bnRlcmxhc3Q7CisgICAgaGFuZGxlLT5zekxlZnQgPSBzekxlZnQ7CisgICAgaGFuZGxlLT5sYXN0U2l6ZSA9IGxhc3RTaXplOworICAgIHJldHZhbCA9IGhhbmRsZS0+c3RhdGVfbWFjaGluZShiYXNlLCBoYW5kbGUpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMpICYmIEZTTF9GRUFUVVJFX0xUQ19IQVNfREVTCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIC8gM0RFUyBDb2RlIHN0YXRpYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdGF0dXNfdCBsdGNfZGVzX3Byb2Nlc3NfRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfbW9kZV9zeW1tZXRyaWNfYWxnX3QgbW9kZUFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19tb2RlX2VuY3J5cHRfdCBtb2RlRW5jKQoreworICAgIHN0YXR1c190IHJldHZhbDsKKworICAgIC8qIGFsbCBidXQgT0ZCLCBzaXplIG11c3QgYmUgOC1ieXRlIG11bHRpcGxlICovCisgICAgaWYgKChtb2RlQXMgIT0ga0xUQ19Nb2RlT0ZCKSAmJiAoKHNpemUgPCA4dSkgfHwgKHNpemUgJSA4dSkpKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+Y2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZS0+Y2FsbGJhY2soYmFzZSwgaGFuZGxlLCBrU3RhdHVzX0ludmFsaWRBcmd1bWVudCwgaGFuZGxlLT51c2VyRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgYWxnb3JpdGhtIHN0YXRlLiAqLworICAgIGx0Y19zeW1tZXRyaWNfdXBkYXRlKGJhc2UsICZrZXlbMF0sIExUQ19ERVNfS0VZX1NJWkUsIGtMVENfQWxnb3JpdGhtREVTLCBtb2RlQXMsIG1vZGVFbmMpOworCisgICAgaWYgKChtb2RlQXMgIT0ga0xUQ19Nb2RlRUNCKSkKKyAgICB7CisgICAgICAgIGx0Y19zZXRfY29udGV4dChiYXNlLCBpdiwgTFRDX0RFU19JVl9TSVpFLCAwKTsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNzIGRhdGEgYW5kIHJldHVybiBzdGF0dXMuICovCisgICAgaGFuZGxlLT5pbkRhdGEgPSBpbnB1dDsKKyAgICBoYW5kbGUtPm91dERhdGEgPSBvdXRwdXQ7CisgICAgaGFuZGxlLT5zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUtPnN0YXRlID0gTFRDX1NNX1NUQVRFX1NUQVJUOworICAgIGhhbmRsZS0+c3RhdGVfbWFjaGluZSA9IGx0Y19wcm9jZXNzX21lc3NhZ2VfaW5fc2Vzc2lvbnNfRURNQTsKKyAgICByZXR2YWwgPSBoYW5kbGUtPnN0YXRlX21hY2hpbmUoYmFzZSwgaGFuZGxlKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdGF0dXNfdCBsdGNfM2Rlc19wcm9jZXNzX0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfc3ltbWV0cmljX2FsZ190IG1vZGVBcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX21vZGVfZW5jcnlwdF90IG1vZGVFbmMpCit7CisgICAgc3RhdHVzX3QgcmV0dmFsOworICAgIHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkUgKiAzXTsKKyAgICB1aW50OF90IGtleVNpemUgPSBMVENfREVTX0tFWV9TSVpFICogMjsKKworICAgIHJldHZhbCA9IGx0Y18zZGVzX2NoZWNrX2lucHV0X2FyZ3MobW9kZUFzLCBzaXplLCBrZXkxLCBrZXkyKTsKKyAgICBpZiAoa1N0YXR1c19TdWNjZXNzICE9IHJldHZhbCkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUtPmNhbGxiYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUtPmNhbGxiYWNrKGJhc2UsIGhhbmRsZSwga1N0YXR1c19JbnZhbGlkQXJndW1lbnQsIGhhbmRsZS0+dXNlckRhdGEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorCisgICAgbHRjX21lbWNweSgma2V5WzBdLCAma2V5MVswXSwgTFRDX0RFU19LRVlfU0laRSk7CisgICAgbHRjX21lbWNweSgma2V5W0xUQ19ERVNfS0VZX1NJWkVdLCAma2V5MlswXSwgTFRDX0RFU19LRVlfU0laRSk7CisgICAgaWYgKGtleTMpCisgICAgeworICAgICAgICBsdGNfbWVtY3B5KCZrZXlbTFRDX0RFU19LRVlfU0laRSAqIDJdLCAma2V5M1swXSwgTFRDX0RFU19LRVlfU0laRSk7CisgICAgICAgIGtleVNpemUgPSBzaXplb2Yoa2V5KTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIGFsZ29yaXRobSBzdGF0ZS4gKi8KKyAgICBsdGNfc3ltbWV0cmljX3VwZGF0ZShiYXNlLCAma2V5WzBdLCBrZXlTaXplLCBrTFRDX0FsZ29yaXRobTNERVMsIG1vZGVBcywgbW9kZUVuYyk7CisKKyAgICBpZiAoKG1vZGVBcyAhPSBrTFRDX01vZGVFQ0IpKQorICAgIHsKKyAgICAgICAgbHRjX3NldF9jb250ZXh0KGJhc2UsIGl2LCBMVENfREVTX0lWX1NJWkUsIDApOworICAgIH0KKworICAgIC8qIFByb2Nlc3MgZGF0YSBhbmQgcmV0dXJuIHN0YXR1cy4gKi8KKyAgICBoYW5kbGUtPmluRGF0YSA9IGlucHV0OworICAgIGhhbmRsZS0+b3V0RGF0YSA9IG91dHB1dDsKKyAgICBoYW5kbGUtPnNpemUgPSBzaXplOworICAgIGhhbmRsZS0+c3RhdGUgPSBMVENfU01fU1RBVEVfU1RBUlQ7CisgICAgaGFuZGxlLT5zdGF0ZV9tYWNoaW5lID0gbHRjX3Byb2Nlc3NfbWVzc2FnZV9pbl9zZXNzaW9uc19FRE1BOworICAgIHJldHZhbCA9IGhhbmRsZS0+c3RhdGVfbWFjaGluZShiYXNlLCBoYW5kbGUpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBERVMgLyAzREVTIENvZGUgcHVibGljCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIE5VTEwsIGtleSwga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleVtMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjX2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIE5VTEwsIGtleSwga0xUQ19Nb2RlRUNCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlQ0JDLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlQ0ZCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlQ0ZCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlT0ZCLCBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleSwga0xUQ19Nb2RlT0ZCLCBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgTlVMTCwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIE5VTEwsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUVDQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBOVUxMLCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVFQ0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgTlVMTCwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlRUNCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVDQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUNCQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlQ0JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVDQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZUNGQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZUVuY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlQ0ZCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBOVUxMLCBrTFRDX01vZGVDRkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVEZWNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIGtleTMsIGtMVENfTW9kZUNGQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5MiwgTlVMTCwga0xUQ19Nb2RlT0ZCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRW5jcnlwdCk7Cit9CisKK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRPZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKQoreworICAgIHJldHVybiBsdGNfM2Rlc19wcm9jZXNzX0VETUEoYmFzZSwgaGFuZGxlLCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIHNpemUsIGl2LCBrZXkxLCBrZXkyLCBrZXkzLCBrTFRDX01vZGVPRkIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTFRDX01vZGVFbmNyeXB0KTsKK30KKworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pCit7CisgICAgcmV0dXJuIGx0Y18zZGVzX3Byb2Nlc3NfRURNQShiYXNlLCBoYW5kbGUsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgc2l6ZSwgaXYsIGtleTEsIGtleTIsIE5VTEwsIGtMVENfTW9kZU9GQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMVENfTW9kZURlY3J5cHQpOworfQorCitzdGF0dXNfdCBMVENfREVTM19EZWNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSkKK3sKKyAgICByZXR1cm4gbHRjXzNkZXNfcHJvY2Vzc19FRE1BKGJhc2UsIGhhbmRsZSwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBzaXplLCBpdiwga2V5MSwga2V5Miwga2V5Mywga0xUQ19Nb2RlT0ZCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0xUQ19Nb2RlRGVjcnlwdCk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfTFRDX0hBU19ERVMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqIExUQyBFRE1BIHRvb2xzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHVpbnQzMl90IExUQ19HZXRJbnN0YW5jZShMVENfVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZSA9IDA7CisgICAgdWludDMyX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGU0xfRkVBVFVSRV9TT0NfTFRDX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAoc19sdGNCYXNlW2luc3RhbmNlXSA9PSBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpbnN0YW5jZSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKKy8qIQorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIExUQyBJbnB1dCBGSUZPIERNQSByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcyBETUEgcmVxdWVzdCBhbmQgZG9uZSBzaWduYWxzIGZvciBJbnB1dCBGSUZPLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBlbmFibGUgVHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBMVENfRW5hYmxlSW5wdXRGaWZvRE1BKExUQ19UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1RMIHw9IExUQ19DVExfSUZFX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNUTCAmPSB+TFRDX0NUTF9JRkVfTUFTSzsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIEVuYWJsZSBvciBkaXNhYmxlIExUQyBPdXRwdXQgRklGTyBETUEgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgRE1BIHJlcXVlc3QgYW5kIGRvbmUgc2lnbmFscyBmb3IgT3V0cHV0IEZJRk8uCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGVuYWJsZSBUcnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIExUQ19FbmFibGVPdXRwdXRGaWZvRE1BKExUQ19UeXBlICpiYXNlLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q1RMIHw9IExUQ19DVExfT0ZFX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNUTCAmPSB+TFRDX0NUTF9PRkVfTUFTSzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIExUQ19JbnB1dEZpZm9FRE1BQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpwYXJhbSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpCit7CisgICAgbHRjX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqbHRjUHJpdmF0ZUhhbmRsZSA9IChsdGNfZWRtYV9wcml2YXRlX2hhbmRsZV90ICopcGFyYW07CisKKyAgICAvKiBBdm9pZCB0aGUgd2FybmluZyBmb3IgdW51c2VkIHZhcmlhYmxlcy4gKi8KKyAgICBoYW5kbGUgPSBoYW5kbGU7CisgICAgdGNkcyA9IHRjZHM7CisKKyAgICBpZiAodHJhbnNmZXJEb25lKQorICAgIHsKKyAgICAgICAgLyogU3RvcCBETUEgY2hhbm5lbC4gKi8KKyAgICAgICAgRURNQV9TdG9wVHJhbnNmZXIobHRjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5pbnB1dEZpZm9FZG1hSGFuZGxlKTsKKworICAgICAgICAvKiBEaXNhYmxlIElucHV0IEZpZm8gRE1BICovCisgICAgICAgIExUQ19FbmFibGVJbnB1dEZpZm9ETUEobHRjUHJpdmF0ZUhhbmRsZS0+YmFzZSwgZmFsc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgTFRDX091dHB1dEZpZm9FRE1BQ2FsbGJhY2soZWRtYV9oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpwYXJhbSwgYm9vbCB0cmFuc2ZlckRvbmUsIHVpbnQzMl90IHRjZHMpCit7CisgICAgbHRjX2VkbWFfcHJpdmF0ZV9oYW5kbGVfdCAqbHRjUHJpdmF0ZUhhbmRsZSA9IChsdGNfZWRtYV9wcml2YXRlX2hhbmRsZV90ICopcGFyYW07CisKKyAgICAvKiBBdm9pZCB0aGUgd2FybmluZyBmb3IgdW51c2VkIHZhcmlhYmxlcy4gKi8KKyAgICBoYW5kbGUgPSBoYW5kbGU7CisgICAgdGNkcyA9IHRjZHM7CisKKyAgICBpZiAodHJhbnNmZXJEb25lKQorICAgIHsKKyAgICAgICAgLyogU3RvcCBETUEgY2hhbm5lbC4gKi8KKyAgICAgICAgRURNQV9TdG9wVHJhbnNmZXIobHRjUHJpdmF0ZUhhbmRsZS0+aGFuZGxlLT5vdXRwdXRGaWZvRWRtYUhhbmRsZSk7CisKKyAgICAgICAgLyogRGlzYWJsZSBPdXRwdXQgRmlmbyBETUEgKi8KKyAgICAgICAgTFRDX0VuYWJsZU91dHB1dEZpZm9ETUEobHRjUHJpdmF0ZUhhbmRsZS0+YmFzZSwgZmFsc2UpOworCisgICAgICAgIGlmIChsdGNQcml2YXRlSGFuZGxlLT5oYW5kbGUtPnN0YXRlX21hY2hpbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGx0Y1ByaXZhdGVIYW5kbGUtPmhhbmRsZS0+c3RhdGVfbWFjaGluZShsdGNQcml2YXRlSGFuZGxlLT5iYXNlLCBsdGNQcml2YXRlSGFuZGxlLT5oYW5kbGUpOworICAgICAgICB9CisgICAgfQorfQorCisvKiBAYnJpZWYgQ29weSBkYXRhIHRvIElucHV0IEZJRk8gYW5kIHJlYWRpbmcgZnJvbSBPdXB1dCBGSUZPIHVzaW5nIGVETUEuICovCitzdGF0aWMgdm9pZCBsdGNfc3ltbWV0cmljX3Byb2Nlc3NfRURNQShMVENfVHlwZSAqYmFzZSwgdWludDMyX3QgaW5TaXplLCBjb25zdCB1aW50OF90ICoqaW5EYXRhLCB1aW50OF90ICoqb3V0RGF0YSkKK3sKKyAgICBjb25zdCB1aW50OF90ICppbiA9ICppbkRhdGE7CisgICAgdWludDhfdCAqb3V0ID0gKm91dERhdGE7CisgICAgdWludDMyX3QgaW5zdGFuY2UgPSBMVENfR2V0SW5zdGFuY2UoYmFzZSk7CisgICAgdWludDMyX3QgZW50cnlfbnVtYmVyID0gaW5TaXplIC8gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBjb25zdCB1aW50OF90ICppbnB1dEJ1ZmZlciA9ICppbkRhdGE7CisgICAgdWludDhfdCAqb3V0cHV0QnVmZmVyID0gKm91dERhdGE7CisgICAgZWRtYV90cmFuc2Zlcl9jb25maWdfdCBjb25maWc7CisKKyAgICBpZiAoZW50cnlfbnVtYmVyKQorICAgIHsKKyAgICAgICAgLyogPT09PT09PT09PT0gSW5pdCBJbnB1dCBGSUZPIERNQSA9PT09PT09PT09PT09PT09PT09PT09Ki8KKyAgICAgICAgbWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsKKworICAgICAgICAvKiBQcmVwYXJlIHRyYW5zZmVyLiAqLworICAgICAgICBFRE1BX1ByZXBhcmVUcmFuc2ZlcigmY29uZmlnLCAodm9pZCAqKWlucHV0QnVmZmVyLCAxLCAodm9pZCAqKSgmKChiYXNlKS0+SUZJRk8pKSwgNFUsIDRVLCBlbnRyeV9udW1iZXIgKiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9NZW1vcnlUb1BlcmlwaGVyYWwpOworICAgICAgICAvKiBTdWJtaXQgdHJhbnNmZXIuICovCisgICAgICAgIEVETUFfU3VibWl0VHJhbnNmZXIoc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uaGFuZGxlLT5pbnB1dEZpZm9FZG1hSGFuZGxlLCAmY29uZmlnKTsKKworICAgICAgICAvKiBTZXQgcmVxdWVzdCBzaXplLiovCisgICAgICAgIGJhc2UtPkNUTCAmPSB+TFRDX0NUTF9JRlJfTUFTSzsgLyogMSBlbnRyeSAqLworICAgICAgICAvKiBFbmFibGUgSW5wdXQgRmlmbyBETUEgKi8KKyAgICAgICAgTFRDX0VuYWJsZUlucHV0Rmlmb0RNQShiYXNlLCB0cnVlKTsKKworICAgICAgICAvKiBTdGFydCB0aGUgRE1BIGNoYW5uZWwgKi8KKyAgICAgICAgRURNQV9TdGFydFRyYW5zZmVyKHNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdLmhhbmRsZS0+aW5wdXRGaWZvRWRtYUhhbmRsZSk7CisKKyAgICAgICAgLyogPT09PT09PT09PT0gSW5pdCBPdXRwdXQgRklGTyBETUEgPT09PT09PT09PT09PT09PT09PT09PSovCisgICAgICAgIG1lbXNldCgmY29uZmlnLCAwLCBzaXplb2YoY29uZmlnKSk7CisKKyAgICAgICAgLyogUHJlcGFyZSB0cmFuc2Zlci4gKi8KKyAgICAgICAgRURNQV9QcmVwYXJlVHJhbnNmZXIoJmNvbmZpZywgKHZvaWQgKikoJigoYmFzZSktPk9GSUZPKSksIDRVLCAodm9pZCAqKW91dHB1dEJ1ZmZlciwgMVUsIDRVLCBlbnRyeV9udW1iZXIgKiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRURNQV9QZXJpcGhlcmFsVG9NZW1vcnkpOworICAgICAgICAvKiBTdWJtaXQgdHJhbnNmZXIuICovCisgICAgICAgIEVETUFfU3VibWl0VHJhbnNmZXIoc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uaGFuZGxlLT5vdXRwdXRGaWZvRWRtYUhhbmRsZSwgJmNvbmZpZyk7CisKKyAgICAgICAgLyogU2V0IHJlcXVlc3Qgc2l6ZS4qLworICAgICAgICBiYXNlLT5DVEwgJj0gfkxUQ19DVExfT0ZSX01BU0s7IC8qIDEgZW50cnkgKi8KKworICAgICAgICAvKiBFbmFibGUgT3V0cHV0IEZpZm8gRE1BICovCisgICAgICAgIExUQ19FbmFibGVPdXRwdXRGaWZvRE1BKGJhc2UsIHRydWUpOworCisgICAgICAgIC8qIFN0YXJ0IHRoZSBETUEgY2hhbm5lbCAqLworICAgICAgICBFRE1BX1N0YXJ0VHJhbnNmZXIoc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uaGFuZGxlLT5vdXRwdXRGaWZvRWRtYUhhbmRsZSk7CisKKyAgICAgICAgeyAvKiBEdW1teSByZWFkIG9mIExUQyByZWdpc3Rlci4gRG8gbm90IGRlbGV0ZS4qLworICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3Qgc3RhdHVzX3JlZzsKKworICAgICAgICAgICAgc3RhdHVzX3JlZyA9IChiYXNlKS0+U1RBOworCisgICAgICAgICAgICAodm9pZClzdGF0dXNfcmVnOworICAgICAgICB9CisKKyAgICAgICAgb3V0ICs9IGVudHJ5X251bWJlciAqIHNpemVvZih1aW50MzJfdCk7CisgICAgICAgIGluICs9IGVudHJ5X251bWJlciAqIHNpemVvZih1aW50MzJfdCk7CisKKyAgICAgICAgKmluRGF0YSA9IGluOworICAgICAgICAqb3V0RGF0YSA9IG91dDsKKyAgICB9Cit9CisKK3ZvaWQgTFRDX0NyZWF0ZUhhbmRsZUVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICppbnB1dEZpZm9FZG1hSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICpvdXRwdXRGaWZvRWRtYUhhbmRsZSkKK3sKKyAgICBhc3NlcnQoaGFuZGxlKTsKKyAgICBhc3NlcnQoaW5wdXRGaWZvRWRtYUhhbmRsZSk7CisgICAgYXNzZXJ0KG91dHB1dEZpZm9FZG1hSGFuZGxlKTsKKworICAgIHVpbnQzMl90IGluc3RhbmNlID0gTFRDX0dldEluc3RhbmNlKGJhc2UpOworCisgICAgc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uYmFzZSA9IGJhc2U7CisgICAgc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0uaGFuZGxlID0gaGFuZGxlOworCisgICAgbWVtc2V0KGhhbmRsZSwgMCwgc2l6ZW9mKCpoYW5kbGUpKTsKKworICAgIGhhbmRsZS0+aW5wdXRGaWZvRWRtYUhhbmRsZSA9IGlucHV0Rmlmb0VkbWFIYW5kbGU7CisgICAgaGFuZGxlLT5vdXRwdXRGaWZvRWRtYUhhbmRsZSA9IG91dHB1dEZpZm9FZG1hSGFuZGxlOworCisgICAgaGFuZGxlLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGhhbmRsZS0+dXNlckRhdGEgPSB1c2VyRGF0YTsKKworICAgIC8qIFJlZ2lzdGVyIERNQSBjYWxsYmFjayBmdW5jdGlvbnMgKi8KKyAgICBFRE1BX1NldENhbGxiYWNrKGhhbmRsZS0+aW5wdXRGaWZvRWRtYUhhbmRsZSwgTFRDX0lucHV0Rmlmb0VETUFDYWxsYmFjaywgJnNfZWRtYVByaXZhdGVIYW5kbGVbaW5zdGFuY2VdKTsKKyAgICBFRE1BX1NldENhbGxiYWNrKGhhbmRsZS0+b3V0cHV0Rmlmb0VkbWFIYW5kbGUsIExUQ19PdXRwdXRGaWZvRURNQUNhbGxiYWNrLCAmc19lZG1hUHJpdmF0ZUhhbmRsZVtpbnN0YW5jZV0pOworCisgICAgLyogU2V0IHJlcXVlc3Qgc2l6ZS4gRE1BIHJlcXVlc3Qgc2l6ZSBpcyAxIGVudHJ5LiovCisgICAgYmFzZS0+Q1RMICY9IH5MVENfQ1RMX0lGUl9NQVNLOworICAgIGJhc2UtPkNUTCAmPSB+TFRDX0NUTF9PRlJfTUFTSzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX2x0Y19lZG1hLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGNfZWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzMwNmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9sdGNfZWRtYS5oCkBAIC0wLDAgKzEsODUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9MVENfRURNQV9IXworI2RlZmluZSBfRlNMX0xUQ19FRE1BX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKyNpbmNsdWRlICJmc2xfbHRjLmgiCisjaW5jbHVkZSAiZnNsX2RtYW11eC5oIgorI2luY2x1ZGUgImZzbF9lZG1hLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2VkbWFfZHJpdmVyCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQGJyaWVmIFRoZSBMVEMgZURNQSBoYW5kbGUgdHlwZS4gKi8KK3R5cGVkZWYgc3RydWN0IF9sdGNfZWRtYV9oYW5kbGUgbHRjX2VkbWFfaGFuZGxlX3Q7CisKKy8qISBAYnJpZWYgTFRDIGVETUEgY2FsbGJhY2sgZnVuY3Rpb24uICovCit0eXBlZGVmIHZvaWQgKCpsdGNfZWRtYV9jYWxsYmFja190KShMVENfVHlwZSAqYmFzZSwgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwgc3RhdHVzX3Qgc3RhdHVzLCB2b2lkICp1c2VyRGF0YSk7CisKKy8qISBAYnJpZWYgTFRDIGVETUEgc3RhdGUgbWFjaGluZSBmdW5jdGlvbi4gSXQgaXMgZGVmaW5lZCBvbmx5IGZvciBwcml2YXRlIHVzYWdlIGluc2lkZSBMVEMgZURNQSBkcml2ZXIuICovCit0eXBlZGVmIHN0YXR1c190ICgqbHRjX2VkbWFfc3RhdGVfbWFjaGluZV90KShMVENfVHlwZSAqYmFzZSwgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSk7CisKKy8qIQorKiBAYnJpZWYgTFRDIGVETUEgaGFuZGxlLiBJdCBpcyBkZWZpbmVkIG9ubHkgZm9yIHByaXZhdGUgdXNhZ2UgaW5zaWRlIExUQyBlRE1BIGRyaXZlci4KKyovCitzdHJ1Y3QgX2x0Y19lZG1hX2hhbmRsZQoreworICAgIGx0Y19lZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2s7IC8qITwgQ2FsbGJhY2sgZnVuY3Rpb24uICovCisgICAgdm9pZCAqdXNlckRhdGE7ICAgICAgICAgICAgICAgLyohPCBMVEMgY2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLiovCisKKyAgICBlZG1hX2hhbmRsZV90ICppbnB1dEZpZm9FZG1hSGFuZGxlOyAgLyohPCBUaGUgZURNQSBUWCBjaGFubmVsIHVzZWQuICovCisgICAgZWRtYV9oYW5kbGVfdCAqb3V0cHV0Rmlmb0VkbWFIYW5kbGU7IC8qITwgVGhlIGVETUEgUlggY2hhbm5lbCB1c2VkLiAqLworCisgICAgbHRjX2VkbWFfc3RhdGVfbWFjaGluZV90IHN0YXRlX21hY2hpbmU7IC8qITwgU3RhdGUgbWFjaGluZS4gKi8KKyAgICB1aW50MzJfdCBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJbnRlcm5hbCBzdGF0ZS4gKi8KKyAgICBjb25zdCB1aW50OF90ICppbkRhdGE7ICAgICAgICAgICAgICAgICAgLyohPCBJbnB1dCBkYXRhLiAqLworICAgIHVpbnQ4X3QgKm91dERhdGE7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE91dHB1dCBkYXRhLiAqLworICAgIHVpbnQzMl90IHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiovCisgICAgdWludDMyX3QgbW9kZVJlZzsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTFRDIG1vZGUgcmVnaXN0ZXIuKi8KKyAgICAvKiBVc2VkIGJ5IEFFUyBDVFIqLworICAgIHVpbnQ4X3QgKmNvdW50ZXI7ICAgLyohPCBJbnB1dCBjb3VudGVyICh1cGRhdGVzIG9uIHJldHVybikqLworICAgIGNvbnN0IHVpbnQ4X3QgKmtleTsgLyohPCBJbnB1dCBrZXkgdG8gdXNlIGZvciBmb3J3YXJkIEFFUyBjaXBoZXIqLworICAgIHVpbnQzMl90IGtleVNpemU7ICAgLyohPCBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuKi8KKyAgICB1aW50OF90CisgICAgICAgICpjb3VudGVybGFzdDsgLyohPCBPdXRwdXQgY2lwaGVyIG9mIGxhc3QgY291bnRlciwgZm9yIGNoYWluZWQgQ1RSIGNhbGxzLiBOVUxMIGNhbiBiZSBwYXNzZWQgaWYgY2hhaW5lZCBjYWxscyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3QgdXNlZC4qLworICAgIHVpbnQzMl90ICpzekxlZnQ7IC8qITwgT3V0cHV0IG51bWJlciBvZiBieXRlcyBpbiBsZWZ0IHVudXNlZCBpbiBjb3VudGVybGFzdCBibG9jay4gTlVMTCBjYW4gYmUgcGFzc2VkIGlmIGNoYWluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBjYWxscyBhcmUgbm90IHVzZWQuKi8KKyAgICB1aW50MzJfdCBsYXN0U2l6ZTsgLyohPCBMYXN0IHNpemUuKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgSW5pdCB0aGUgTFRDIGVETUEgaGFuZGxlIHdoaWNoIGlzIHVzZWQgaW4gdHJhbnNjYXRpb25hbCBmdW5jdGlvbnMKKyAqIEBwYXJhbSBiYXNlICAgICAgTFRDIG1vZHVsZSBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgICAgUG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBjYWxsYmFjayAgQ2FsbGJhY2sgZnVuY3Rpb24sIE5VTEwgbWVhbnMgbm8gY2FsbGJhY2suCisgKiBAcGFyYW0gdXNlckRhdGEgIENhbGxiYWNrIGZ1bmN0aW9uIHBhcmFtZXRlci4KKyAqIEBwYXJhbSBpbnB1dEZpZm9FZG1hSGFuZGxlIFVzZXIgcmVxdWVzdGVkIGVETUEgaGFuZGxlIGZvciBJbnB1dCBGSUZPIGVETUEuCisgKiBAcGFyYW0gb3V0cHV0Rmlmb0VkbWFIYW5kbGUgVXNlciByZXF1ZXN0ZWQgZURNQSBoYW5kbGUgZm9yIE91dHB1dCBGSUZPIGVETUEuCisgKi8KK3ZvaWQgTFRDX0NyZWF0ZUhhbmRsZUVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICppbnB1dEZpZm9FZG1hSGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlZG1hX2hhbmRsZV90ICpvdXRwdXRGaWZvRWRtYUhhbmRsZSk7CisKKy8qISBAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBRVMgQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBhZGR0b2dyb3VwIGx0Y19lZG1hX2RyaXZlcl9hZXMKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgQUVTIHVzaW5nIHRoZSBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBFbmNyeXB0cyBBRVMgdXNpbmcgdGhlIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbiB0ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlciB0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIEFFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBEZWNyeXB0cyBBRVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXIgdGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWluIHRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkuCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0ga2V5VHlwZSBJbnB1dCB0eXBlIG9mIHRoZSBrZXkgKGFsbG93cyB0byBkaXJlY3RseSBsb2FkIGRlY3J5cHQga2V5IGZvciBBRVMgRUNCIGRlY3J5cHQgb3BlcmF0aW9uLikKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19EZWNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGtleVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hZXNfa2V5X3Qga2V5VHlwZSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIEFFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW4gdGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXIgdGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBpbnB1dCBibG9jay4KKyAqIEBwYXJhbSBrZXkgSW5wdXQga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbgorICogQHBhcmFtIGtleVNpemUgU2l6ZSBvZiB0aGUgaW5wdXQga2V5LCBpbiBieXRlcy4gTXVzdCBiZSAxNiwgMjQsIG9yIDMyLgorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfQUVTX0VuY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0FFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgQUVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVyIHRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbiB0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiAxNiBieXRlcy4KKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IGlucHV0IGJsb2NrLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcGFyYW0ga2V5U2l6ZSBTaXplIG9mIHRoZSBpbnB1dCBrZXksIGluIGJ5dGVzLiBNdXN0IGJlIDE2LCAyNCwgb3IgMzIuCisgKiBAcGFyYW0ga2V5VHlwZSBJbnB1dCB0eXBlIG9mIHRoZSBrZXkgKGFsbG93cyB0byBkaXJlY3RseSBsb2FkIGRlY3J5cHQga2V5IGZvciBBRVMgQ0JDIGRlY3J5cHQgb3BlcmF0aW9uLikKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19EZWNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19BRVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2Flc19rZXlfdCBrZXlUeXBlKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgb3IgZGVjcnlwdHMgQUVTIHVzaW5nIENUUiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIG9yIGRlY3J5cHRzIEFFUyB1c2luZyBDVFIgYmxvY2sgbW9kZS4KKyAqIEFFUyBDVFIgbW9kZSB1c2VzIG9ubHkgZm9yd2FyZCBBRVMgY2lwaGVyIGFuZCBzYW1lIGFsZ29yaXRobSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4KKyAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGlzIHRoYXQsIGZvciBlbmNyeXB0aW9uLCB0aGUgaW5wdXQgYXJndW1lbnQKKyAqIGlzIHBsYWluIHRleHQgYW5kIHRoZSBvdXRwdXQgYXJndW1lbnQgaXMgY2lwaGVyIHRleHQuIEZvciBkZWNyeXB0aW9uLCB0aGUgaW5wdXQgYXJndW1lbnQgaXMgY2lwaGVyIHRleHQKKyAqIGFuZCB0aGUgb3V0cHV0IGFyZ3VtZW50IGlzIHBsYWluIHRleHQuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gaW5wdXQgSW5wdXQgZGF0YSBmb3IgQ1RSIGJsb2NrIG1vZGUKKyAqIEBwYXJhbVtvdXRdIG91dHB1dCBPdXRwdXQgZGF0YSBmb3IgQ1RSIGJsb2NrIG1vZGUKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW1baW4sb3V0XSBjb3VudGVyIElucHV0IGNvdW50ZXIgKHVwZGF0ZXMgb24gcmV0dXJuKQorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBmb3J3YXJkIEFFUyBjaXBoZXIKKyAqIEBwYXJhbSBrZXlTaXplIFNpemUgb2YgdGhlIGlucHV0IGtleSwgaW4gYnl0ZXMuIE11c3QgYmUgMTYsIDI0LCBvciAzMi4KKyAqIEBwYXJhbVtvdXRdIGNvdW50ZXJsYXN0IE91dHB1dCBjaXBoZXIgb2YgbGFzdCBjb3VudGVyLCBmb3IgY2hhaW5lZCBDVFIgY2FsbHMuIE5VTEwgY2FuIGJlIHBhc3NlZCBpZiBjaGFpbmVkIGNhbGxzIGFyZQorICogbm90IHVzZWQuCisgKiBAcGFyYW1bb3V0XSBzekxlZnQgT3V0cHV0IG51bWJlciBvZiBieXRlcyBpbiBsZWZ0IHVudXNlZCBpbiBjb3VudGVybGFzdCBibG9jay4gTlVMTCBjYW4gYmUgcGFzc2VkIGlmIGNoYWluZWQgY2FsbHMKKyAqIGFyZSBub3QgdXNlZC4KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0FFU19DcnlwdEN0ckVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb3VudGVyW0xUQ19BRVNfQkxPQ0tfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjb3VudGVybGFzdFtMVENfQUVTX0JMT0NLX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnN6TGVmdCk7CisKKy8qISBBRVMgQ1RSIGRlY3J5cHQgaXMgbWFwcGVkIHRvIHRoZSBBRVMgQ1RSIGdlbmVyaWMgb3BlcmF0aW9uICovCisjZGVmaW5lIExUQ19BRVNfRGVjcnlwdEN0ckVETUEoYmFzZSwgaGFuZGxlLCBpbnB1dCwgb3V0cHV0LCBzaXplLCBjb3VudGVyLCBrZXksIGtleVNpemUsIGNvdW50ZXJsYXN0LCBzekxlZnQpIFwKKyAgICBMVENfQUVTX0NyeXB0Q3RyRURNQShiYXNlLCBoYW5kbGUsIGlucHV0LCBvdXRwdXQsIHNpemUsIGNvdW50ZXIsIGtleSwga2V5U2l6ZSwgY291bnRlcmxhc3QsIHN6TGVmdCkKKworLyohIEFFUyBDVFIgZW5jcnlwdCBpcyBtYXBwZWQgdG8gdGhlIEFFUyBDVFIgZ2VuZXJpYyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTFRDX0FFU19FbmNyeXB0Q3RyRURNQShiYXNlLCBoYW5kbGUsIGlucHV0LCBvdXRwdXQsIHNpemUsIGNvdW50ZXIsIGtleSwga2V5U2l6ZSwgY291bnRlcmxhc3QsIHN6TGVmdCkgXAorICAgIExUQ19BRVNfQ3J5cHRDdHJFRE1BKGJhc2UsIGhhbmRsZSwgaW5wdXQsIG91dHB1dCwgc2l6ZSwgY291bnRlciwga2V5LCBrZXlTaXplLCBjb3VudGVybGFzdCwgc3pMZWZ0KQorCisvKiEKKyAqQH0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogREVTIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIQorICogQGFkZHRvZ3JvdXAgbHRjX2VkbWFfZHJpdmVyX2RlcworICogQHsKKyAqLworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGRlY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0RlY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgREVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3VwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgREVTIHVzaW5nIENCQyBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCB2ZWN0b3IgdG8gY29tYmluZSB3aXRoIHRoZSBmaXJzdCBwbGFpbnRleHQgYmxvY2suCisgKiAgICAgICAgICAgVGhlIGl2IGRvZXMgbm90IG5lZWQgdG8gYmUgc2VjcmV0LCBidXQgaXQgbXVzdCBiZSB1bnByZWRpY3RhYmxlLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgREVTIHVzaW5nIENGQiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgYmxvY2suCisgKiBAcGFyYW0ga2V5IElucHV0IGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24KKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTX0VuY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXlbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUuCisgKgorICogRGVjcnlwdHMgREVTIHVzaW5nIENGQiBibG9jayBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlLgorICoKKyAqIEVuY3J5cHRzIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19FbmNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlLgorICoKKyAqIERlY3J5cHRzIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleSBJbnB1dCBrZXkgdG8gdXNlIGZvciBkZWNyeXB0aW9uCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFU19EZWNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5W0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBFQ0IgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0RWNiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcy4gTXVzdCBiZSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRGVjcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9FbmNyeXB0Q2JjRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0JDIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENCQyBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0VuY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMyX0RlY3J5cHRDZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0d28ga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzJfRW5jcnlwdE9mYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdHdvIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBPRkIgYmxvY2sgbW9kZSB3aXRoIHR3byBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCB1bmlxdWUgaW5wdXQgdmVjdG9yLiBUaGUgT0ZCIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgSVYgYmUgdW5pcXVlCisgKiAgICAgICAgICAgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBtb2RlIHVuZGVyIHRoZSBnaXZlbiBrZXkuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTMl9EZWNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEVuY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgRUNCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIHBsYWludGV4dCBJbnB1dCBwbGFpbnRleHQgdG8gZW5jcnlwdAorICogQHBhcmFtW291dF0gY2lwaGVydGV4dCBPdXRwdXQgY2lwaGVydGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMuIE11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcy4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRW5jcnlwdEVjYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBEZWNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIEVDQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBjaXBoZXJ0ZXh0IElucHV0IGNpcGhlcnRleHQgdG8gZGVjcnlwdAorICogQHBhcmFtW291dF0gcGxhaW50ZXh0IE91dHB1dCBwbGFpbnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzLiBNdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRFY2JFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRW5jcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gcGxhaW50ZXh0IElucHV0IHBsYWludGV4dCB0byBlbmNyeXB0CisgKiBAcGFyYW1bb3V0XSBjaXBoZXJ0ZXh0IE91dHB1dCBjaXBoZXJ0ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIHZlY3RvciB0byBjb21iaW5lIHdpdGggdGhlIGZpcnN0IHBsYWludGV4dCBibG9jay4KKyAqICAgICAgICAgICBUaGUgaXYgZG9lcyBub3QgbmVlZCB0byBiZSBzZWNyZXQsIGJ1dCBpdCBtdXN0IGJlIHVucHJlZGljdGFibGUuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0VuY3J5cHRDYmNFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKiBAYnJpZWYgRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogRGVjcnlwdHMgdHJpcGxlIERFUyB1c2luZyBDQkMgYmxvY2sgbW9kZSB3aXRoIHRocmVlIGtleXMuCisgKgorICogQHBhcmFtIGJhc2UgTFRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gaGFuZGxlIHBvaW50ZXIgdG8gbHRjX2VkbWFfaGFuZGxlX3Qgc3RydWN0dXJlIHdoaWNoIHN0b3JlcyB0aGUgdHJhbnNhY3Rpb24gc3RhdGUuCisgKiBAcGFyYW0gY2lwaGVydGV4dCBJbnB1dCBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQKKyAqIEBwYXJhbVtvdXRdIHBsYWludGV4dCBPdXRwdXQgcGxhaW50ZXh0CisgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBpbiBieXRlcworICogQHBhcmFtIGl2IElucHV0IGluaXRpYWwgdmVjdG9yIHRvIGNvbWJpbmUgd2l0aCB0aGUgZmlyc3QgcGxhaW50ZXh0IGJsb2NrLgorICogICAgICAgICAgIFRoZSBpdiBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3JldCwgYnV0IGl0IG11c3QgYmUgdW5wcmVkaWN0YWJsZS4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdENiY0VETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIENGQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCBpbml0aWFsIGJsb2NrLgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0Q2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgQ0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgaW5pdGlhbCBibG9jay4KKyAqIEBwYXJhbSBrZXkxIEZpcnN0IGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTIgU2Vjb25kIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHBhcmFtIGtleTMgVGhpcmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcmV0dXJuIFN0YXR1cyBmcm9tIGVuY3J5cHQvZGVjcnlwdCBvcGVyYXRpb24KKyAqLworc3RhdHVzX3QgTFRDX0RFUzNfRGVjcnlwdENmYkVETUEoTFRDX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfZWRtYV9oYW5kbGVfdCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBsYWludGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGl2W0xUQ19ERVNfSVZfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTFbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTJbTFRDX0RFU19LRVlfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGtleTNbTFRDX0RFU19LRVlfU0laRV0pOworCisvKiEKKyAqIEBicmllZiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBFbmNyeXB0cyB0cmlwbGUgREVTIHVzaW5nIE9GQiBibG9jayBtb2RlIHdpdGggdGhyZWUga2V5cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBMVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBoYW5kbGUgcG9pbnRlciB0byBsdGNfZWRtYV9oYW5kbGVfdCBzdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZS4KKyAqIEBwYXJhbSBwbGFpbnRleHQgSW5wdXQgcGxhaW50ZXh0IHRvIGVuY3J5cHQKKyAqIEBwYXJhbVtvdXRdIGNpcGhlcnRleHQgT3V0cHV0IGNpcGhlcnRleHQKKyAqIEBwYXJhbSBzaXplIFNpemUgb2YgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGluIGJ5dGVzCisgKiBAcGFyYW0gaXYgSW5wdXQgdW5pcXVlIGlucHV0IHZlY3Rvci4gVGhlIE9GQiBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIElWIGJlIHVuaXF1ZQorICogICAgICAgICAgIGZvciBlYWNoIGV4ZWN1dGlvbiBvZiB0aGUgbW9kZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LgorICogQHBhcmFtIGtleTEgRmlyc3QgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MiBTZWNvbmQgaW5wdXQga2V5IGZvciBrZXkgYnVuZGxlCisgKiBAcGFyYW0ga2V5MyBUaGlyZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEByZXR1cm4gU3RhdHVzIGZyb20gZW5jcnlwdC9kZWNyeXB0IG9wZXJhdGlvbgorICovCitzdGF0dXNfdCBMVENfREVTM19FbmNyeXB0T2ZiRURNQShMVENfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lZG1hX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbTFRDX0RFU19JVl9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MVtMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5MltMVENfREVTX0tFWV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5M1tMVENfREVTX0tFWV9TSVpFXSk7CisKKy8qIQorICogQGJyaWVmIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIERlY3J5cHRzIHRyaXBsZSBERVMgdXNpbmcgT0ZCIGJsb2NrIG1vZGUgd2l0aCB0aHJlZSBrZXlzLgorICoKKyAqIEBwYXJhbSBiYXNlIExUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGhhbmRsZSBwb2ludGVyIHRvIGx0Y19lZG1hX2hhbmRsZV90IHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlLgorICogQHBhcmFtIGNpcGhlcnRleHQgSW5wdXQgY2lwaGVydGV4dCB0byBkZWNyeXB0CisgKiBAcGFyYW1bb3V0XSBwbGFpbnRleHQgT3V0cHV0IHBsYWludGV4dAorICogQHBhcmFtIHNpemUgU2l6ZSBvZiBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgaW4gYnl0ZXMKKyAqIEBwYXJhbSBpdiBJbnB1dCB1bmlxdWUgaW5wdXQgdmVjdG9yLiBUaGUgT0ZCIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgSVYgYmUgdW5pcXVlCisgKiAgICAgICAgICAgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBtb2RlIHVuZGVyIHRoZSBnaXZlbiBrZXkuCisgKiBAcGFyYW0ga2V5MSBGaXJzdCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkyIFNlY29uZCBpbnB1dCBrZXkgZm9yIGtleSBidW5kbGUKKyAqIEBwYXJhbSBrZXkzIFRoaXJkIGlucHV0IGtleSBmb3Iga2V5IGJ1bmRsZQorICogQHJldHVybiBTdGF0dXMgZnJvbSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uCisgKi8KK3N0YXR1c190IExUQ19ERVMzX0RlY3J5cHRPZmJFRE1BKExUQ19UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VkbWFfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwbGFpbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBpdltMVENfREVTX0lWX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkxW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkyW0xUQ19ERVNfS0VZX1NJWkVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBrZXkzW0xUQ19ERVNfS0VZX1NJWkVdKTsKKworLyohCisgKkB9CisgKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9GU0xfTFRDX0VETUFfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjM2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImZzbF9waXQuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBiYXNlIGFkZHJlc3MgdG8gYmUgdXNlZCB0byBnYXRlIG9yIHVuZ2F0ZSB0aGUgbW9kdWxlIGNsb2NrCisgKgorICogQHBhcmFtIGJhc2UgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgUElUIGluc3RhbmNlCisgKi8KK3N0YXRpYyB1aW50MzJfdCBQSVRfR2V0SW5zdGFuY2UoUElUX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmFyaWFibGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohIEBicmllZiBQb2ludGVycyB0byBQSVQgYmFzZXMgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgUElUX1R5cGUgKmNvbnN0IHNfcGl0QmFzZXNbXSA9IFBJVF9CQVNFX1BUUlM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIFBJVCBjbG9ja3MgZm9yIGVhY2ggaW5zdGFuY2UuICovCitzdGF0aWMgY29uc3QgY2xvY2tfaXBfbmFtZV90IHNfcGl0Q2xvY2tzW10gPSBQSVRfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MzJfdCBQSVRfR2V0SW5zdGFuY2UoUElUX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgaW5zdGFuY2U7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCBBUlJBWV9TSVpFKHNfcGl0QmFzZXMpOyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfcGl0QmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX3BpdEJhc2VzKSk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgUElUX0luaXQoUElUX1R5cGUgKmJhc2UsIGNvbnN0IHBpdF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIFVuZ2F0ZSB0aGUgUElUIGNsb2NrKi8KKyAgICBDTE9DS19FbmFibGVDbG9jayhzX3BpdENsb2Nrc1tQSVRfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIEVuYWJsZSBQSVQgdGltZXJzICovCisgICAgYmFzZS0+TUNSICY9IH5QSVRfTUNSX01ESVNfTUFTSzsKKworICAgIC8qIENvbmZpZyB0aW1lciBvcGVyYXRpb24gd2hlbiBpbiBkZWJ1ZyBtb2RlICovCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlUnVuSW5EZWJ1ZykKKyAgICB7CisgICAgICAgIGJhc2UtPk1DUiAmPSB+UElUX01DUl9GUlpfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+TUNSIHw9IFBJVF9NQ1JfRlJaX01BU0s7CisgICAgfQorfQorCit2b2lkIFBJVF9EZWluaXQoUElUX1R5cGUgKmJhc2UpCit7CisgICAgLyogRGlzYWJsZSBQSVQgdGltZXJzICovCisgICAgYmFzZS0+TUNSIHw9IFBJVF9NQ1JfTURJU19NQVNLOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEdhdGUgdGhlIFBJVCBjbG9jayovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfcGl0Q2xvY2tzW1BJVF9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QSVRfSEFTX0xJRkVUSU1FX1RJTUVSKSAmJiBGU0xfRkVBVFVSRV9QSVRfSEFTX0xJRkVUSU1FX1RJTUVSCisKK3VpbnQ2NF90IFBJVF9HZXRMaWZldGltZVRpbWVyQ291bnQoUElUX1R5cGUgKmJhc2UpCit7CisgICAgdWludDMyX3QgdmFsdWVIID0gMFU7CisgICAgdWludDMyX3QgdmFsdWVMID0gMFU7CisKKyAgICAvKiBMVE1SNjRIIHNob3VsZCBiZSByZWFkIGJlZm9yZSBMVE1SNjRMICovCisgICAgdmFsdWVIID0gYmFzZS0+TFRNUjY0SDsKKyAgICB2YWx1ZUwgPSBiYXNlLT5MVE1SNjRMOworCisgICAgcmV0dXJuICgoKHVpbnQ2NF90KXZhbHVlSCA8PCAzMlUpICsgKHVpbnQ2NF90KSh2YWx1ZUwpKTsKK30KKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BJVF9IQVNfTElGRVRJTUVfVElNRVIgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljMzBlMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BpdC5oCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9QSVRfSF8KKyNkZWZpbmUgX0ZTTF9QSVRfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCBwaXQKKyAqIEB7CisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisjZGVmaW5lIEZTTF9QSVRfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAwKSkgLyohPCBWZXJzaW9uIDIuMC4wICovCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgTGlzdCBvZiBQSVQgY2hhbm5lbHMKKyAqIEBub3RlIEFjdHVhbCBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYW5uZWxzIGlzIFNvQyBkZXBlbmRlbnQKKyAqLwordHlwZWRlZiBlbnVtIF9waXRfY2hubAoreworICAgIGtQSVRfQ2hubF8wID0gMFUsIC8qITwgUElUIGNoYW5uZWwgbnVtYmVyIDAqLworICAgIGtQSVRfQ2hubF8xLCAgICAgIC8qITwgUElUIGNoYW5uZWwgbnVtYmVyIDEgKi8KKyAgICBrUElUX0NobmxfMiwgICAgICAvKiE8IFBJVCBjaGFubmVsIG51bWJlciAyICovCisgICAga1BJVF9DaG5sXzMsICAgICAgLyohPCBQSVQgY2hhbm5lbCBudW1iZXIgMyAqLworfSBwaXRfY2hubF90OworCisvKiEgQGJyaWVmIExpc3Qgb2YgUElUIGludGVycnVwdHMgKi8KK3R5cGVkZWYgZW51bSBfcGl0X2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrUElUX1RpbWVySW50ZXJydXB0RW5hYmxlID0gUElUX1RDVFJMX1RJRV9NQVNLLCAvKiE8IFRpbWVyIGludGVycnVwdCBlbmFibGUqLworfSBwaXRfaW50ZXJydXB0X2VuYWJsZV90OworCisvKiEgQGJyaWVmIExpc3Qgb2YgUElUIHN0YXR1cyBmbGFncyAqLwordHlwZWRlZiBlbnVtIF9waXRfc3RhdHVzX2ZsYWdzCit7CisgICAga1BJVF9UaW1lckZsYWcgPSBQSVRfVEZMR19USUZfTUFTSywgLyohPCBUaW1lciBmbGFnICovCit9IHBpdF9zdGF0dXNfZmxhZ3NfdDsKKworLyohCisgKiBAYnJpZWYgUElUIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBQSVQgcGVyaXBoZXJhbC4gVG8gaW5pdGlhbGl6ZSB0aGlzCisgKiBzdHJ1Y3R1cmUgdG8gcmVhc29uYWJsZSBkZWZhdWx0cywgY2FsbCB0aGUgUElUX0dldERlZmF1bHRDb25maWcoKSBmdW5jdGlvbiBhbmQgcGFzcyBhCisgKiBwb2ludGVyIHRvIHlvdXIgY29uZmlnIHN0cnVjdHVyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgY2FuIGJlIG1hZGUgY29uc3RhbnQgc28gaXQgcmVzaWRlcyBpbiBmbGFzaC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3BpdF9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZVJ1bkluRGVidWc7IC8qITwgdHJ1ZTogVGltZXJzIHJ1biBpbiBkZWJ1ZyBtb2RlOyBmYWxzZTogVGltZXJzIHN0b3AgaW4gZGVidWcgbW9kZSAqLworfSBwaXRfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbiBhbmQgZGVpbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBVbmdhdGVzIHRoZSBQSVQgY2xvY2ssIGVuYWJsZXMgdGhlIFBJVCBtb2R1bGUsIGFuZCBjb25maWd1cmVzIHRoZSBwZXJpcGhlcmFsIGZvciBiYXNpYyBvcGVyYXRpb25zLgorICoKKyAqIEBub3RlIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIFBJVCBkcml2ZXIuCisgKgorICogQHBhcmFtIGJhc2UgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgdXNlcidzIFBJVCBjb25maWcgc3RydWN0dXJlCisgKi8KK3ZvaWQgUElUX0luaXQoUElUX1R5cGUgKmJhc2UsIGNvbnN0IHBpdF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2F0ZXMgdGhlIFBJVCBjbG9jayBhbmQgZGlzYWJsZXMgdGhlIFBJVCBtb2R1bGUuCisgKgorICogQHBhcmFtIGJhc2UgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3ZvaWQgUElUX0RlaW5pdChQSVRfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEZpbGxzIGluIHRoZSBQSVQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAqCisgKiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MuCisgKiBAY29kZQorICogICAgIGNvbmZpZy0+ZW5hYmxlUnVuSW5EZWJ1ZyA9IGZhbHNlOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9HZXREZWZhdWx0Q29uZmlnKHBpdF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgLyogVGltZXJzIGFyZSBzdG9wcGVkIGluIERlYnVnIG1vZGUgKi8KKyAgICBjb25maWctPmVuYWJsZVJ1bkluRGVidWcgPSBmYWxzZTsKK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUElUX0hBU19DSEFJTl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9QSVRfSEFTX0NIQUlOX01PREUKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBvciBkaXNhYmxlcyBjaGFpbmluZyBhIHRpbWVyIHdpdGggdGhlIHByZXZpb3VzIHRpbWVyLgorICoKKyAqIFdoZW4gYSB0aW1lciBoYXMgYSBjaGFpbiBtb2RlIGVuYWJsZWQsIGl0IG9ubHkgY291bnRzIGFmdGVyIHRoZSBwcmV2aW91cworICogdGltZXIgaGFzIGV4cGlyZWQuIElmIHRoZSB0aW1lciBuLTEgaGFzIGNvdW50ZWQgZG93biB0byAwLCBjb3VudGVyIG4KKyAqIGRlY3JlbWVudHMgdGhlIHZhbHVlIGJ5IG9uZS4gRWFjaCB0aW1lciBpcyAzMi1iaXRzLCB3aGljaCBhbGxvd3MgdGhlIGRldmVsb3BlcnMKKyAqIHRvIGNoYWluIHRpbWVycyB0b2dldGhlciBhbmQgZm9ybSBhIGxvbmdlciB0aW1lciAoNjQtYml0cyBhbmQgbGFyZ2VyKS4gVGhlIGZpcnN0IHRpbWVyCisgKiAodGltZXIgMCkgY2FuJ3QgYmUgY2hhaW5lZCB0byBhbnkgb3RoZXIgdGltZXIuCisgKgorICogQHBhcmFtIGJhc2UgICAgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2hhbm5lbCBUaW1lciBjaGFubmVsIG51bWJlciB3aGljaCBpcyBjaGFpbmVkIHdpdGggdGhlIHByZXZpb3VzIHRpbWVyCisgKiBAcGFyYW0gZW5hYmxlICBFbmFibGUgb3IgZGlzYWJsZSBjaGFpbi4KKyAqICAgICAgICAgICAgICAgIHRydWU6ICBDdXJyZW50IHRpbWVyIGlzIGNoYWluZWQgd2l0aCB0aGUgcHJldmlvdXMgdGltZXIuCisgKiAgICAgICAgICAgICAgICBmYWxzZTogVGltZXIgZG9lc24ndCBjaGFpbiB3aXRoIG90aGVyIHRpbWVycy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9TZXRUaW1lckNoYWluTW9kZShQSVRfVHlwZSAqYmFzZSwgcGl0X2NobmxfdCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgIHsKKyAgICAgICAgYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5UQ1RSTCB8PSBQSVRfVENUUkxfQ0hOX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkNIQU5ORUxbY2hhbm5lbF0uVENUUkwgJj0gflBJVF9UQ1RSTF9DSE5fTUFTSzsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QSVRfSEFTX0NIQUlOX01PREUgKi8KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBJbnRlcnJ1cHQgSW50ZXJmYWNlCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEVuYWJsZXMgdGhlIHNlbGVjdGVkIFBJVCBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIKKyAqIEBwYXJhbSBtYXNrICAgIFRoZSBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6cGl0X2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUElUX0VuYWJsZUludGVycnVwdHMoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRDVFJMIHw9IG1hc2s7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBzZWxlY3RlZCBQSVQgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gbWFzayAgICBUaGUgaW50ZXJydXB0cyB0byBkaXNhYmxlLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgICAgZW51bWVyYXRpb24gOjpwaXRfaW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQSVRfRGlzYWJsZUludGVycnVwdHMoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRDVFJMICY9IH5tYXNrOworfQorCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBlbmFibGVkIFBJVCBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIKKyAqCisgKiBAcmV0dXJuIFRoZSBlbmFibGVkIGludGVycnVwdHMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjpwaXRfaW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUElUX0dldEVuYWJsZWRJbnRlcnJ1cHRzKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwpCit7CisgICAgcmV0dXJuIChiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRDVFJMICYgUElUX1RDVFJMX1RJRV9NQVNLKTsKK30KKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBTdGF0dXMgSW50ZXJmYWNlCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFBJVCBzdGF0dXMgZmxhZ3MuCisgKgorICogQHBhcmFtIGJhc2UgICAgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2hhbm5lbCBUaW1lciBjaGFubmVsIG51bWJlcgorICoKKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBmbGFncy4gVGhpcyBpcyB0aGUgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICBlbnVtZXJhdGlvbiA6OnBpdF9zdGF0dXNfZmxhZ3NfdAorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFBJVF9HZXRTdGF0dXNGbGFncyhQSVRfVHlwZSAqYmFzZSwgcGl0X2NobmxfdCBjaGFubmVsKQoreworICAgIHJldHVybiAoYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5URkxHICYgUElUX1RGTEdfVElGX01BU0spOworfQorCisvKiEKKyAqIEBicmllZiAgQ2xlYXJzIHRoZSBQSVQgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIKKyAqIEBwYXJhbSBtYXNrICAgIFRoZSBzdGF0dXMgZmxhZ3MgdG8gY2xlYXIuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnBpdF9zdGF0dXNfZmxhZ3NfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUElUX0NsZWFyU3RhdHVzRmxhZ3MoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRGTEcgPSBtYXNrOworfQorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFJlYWQgYW5kIFdyaXRlIHRoZSB0aW1lciBwZXJpb2QKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgdGltZXIgcGVyaW9kIGluIHVuaXRzIG9mIGNvdW50LgorICoKKyAqIFRpbWVycyBiZWdpbiBjb3VudGluZyBmcm9tIHRoZSB2YWx1ZSBzZXQgYnkgdGhpcyBmdW5jdGlvbiB1bnRpbCBpdCByZWFjaGVzIDAsCisgKiB0aGVuIGl0IGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgYW5kIGxvYWQgdGhpcyByZWdpc3RlciB2YWx1ZSBhZ2Fpbi4KKyAqIFdyaXRpbmcgYSBuZXcgdmFsdWUgdG8gdGhpcyByZWdpc3RlciBkb2VzIG5vdCByZXN0YXJ0IHRoZSB0aW1lci4gSW5zdGVhZCwgdGhlIHZhbHVlCisgKiBpcyBsb2FkZWQgYWZ0ZXIgdGhlIHRpbWVyIGV4cGlyZXMuCisgKgorICogQG5vdGUgVXNlcnMgY2FuIGNhbGwgdGhlIHV0aWxpdHkgbWFjcm9zIHByb3ZpZGVkIGluIGZzbF9jb21tb24uaCB0byBjb252ZXJ0IHRvIHRpY2tzLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIKKyAqIEBwYXJhbSBjb3VudCAgIFRpbWVyIHBlcmlvZCBpbiB1bml0cyBvZiB0aWNrcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgUElUX1NldFRpbWVyUGVyaW9kKFBJVF9UeXBlICpiYXNlLCBwaXRfY2hubF90IGNoYW5uZWwsIHVpbnQzMl90IGNvdW50KQoreworICAgIGJhc2UtPkNIQU5ORUxbY2hhbm5lbF0uTERWQUwgPSBjb3VudDsKK30KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIGN1cnJlbnQgdGltZXIgY291bnRpbmcgdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZWFsLXRpbWUgdGltZXIgY291bnRpbmcgdmFsdWUsIGluIGEgcmFuZ2UgZnJvbSAwIHRvIGEKKyAqIHRpbWVyIHBlcmlvZC4KKyAqCisgKiBAbm90ZSBVc2VycyBjYW4gY2FsbCB0aGUgdXRpbGl0eSBtYWNyb3MgcHJvdmlkZWQgaW4gZnNsX2NvbW1vbi5oIHRvIGNvbnZlcnQgdGlja3MgdG8gdXNlYyBvciBtc2VjLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFBJVCBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNoYW5uZWwgVGltZXIgY2hhbm5lbCBudW1iZXIKKyAqCisgKiBAcmV0dXJuIEN1cnJlbnQgdGltZXIgY291bnRpbmcgdmFsdWUgaW4gdGlja3MKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBQSVRfR2V0Q3VycmVudFRpbWVyQ291bnQoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCkKK3sKKyAgICByZXR1cm4gYmFzZS0+Q0hBTk5FTFtjaGFubmVsXS5DVkFMOworfQorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFRpbWVyIFN0YXJ0IGFuZCBTdG9wCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFN0YXJ0cyB0aGUgdGltZXIgY291bnRpbmcuCisgKgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aW1lcnMgbG9hZCBwZXJpb2QgdmFsdWUsIGNvdW50IGRvd24gdG8gMCBhbmQKKyAqIHRoZW4gbG9hZCB0aGUgcmVzcGVjdGl2ZSBzdGFydCB2YWx1ZSBhZ2Fpbi4gRWFjaCB0aW1lIGEgdGltZXIgcmVhY2hlcyAwLAorICogaXQgZ2VuZXJhdGVzIGEgdHJpZ2dlciBwdWxzZSBhbmQgc2V0cyB0aGUgdGltZW91dCBpbnRlcnJ1cHQgZmxhZy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQSVQgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaGFubmVsIFRpbWVyIGNoYW5uZWwgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUElUX1N0YXJ0VGltZXIoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCkKK3sKKyAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRDVFJMIHw9IFBJVF9UQ1RSTF9URU5fTUFTSzsKK30KKworLyohCisgKiBAYnJpZWYgU3RvcHMgdGhlIHRpbWVyIGNvdW50aW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgZXZlcnkgdGltZXIgY291bnRpbmcuIFRpbWVycyByZWxvYWQgdGhlaXIgcGVyaW9kcworICogcmVzcGVjdGl2ZWx5IGFmdGVyIHRoZSBuZXh0IHRpbWUgdGhleSBjYWxsIHRoZSBQSVRfRFJWX1N0YXJ0VGltZXIuCisgKgorICogQHBhcmFtIGJhc2UgICAgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2hhbm5lbCBUaW1lciBjaGFubmVsIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBJVF9TdG9wVGltZXIoUElUX1R5cGUgKmJhc2UsIHBpdF9jaG5sX3QgY2hhbm5lbCkKK3sKKyAgICBiYXNlLT5DSEFOTkVMW2NoYW5uZWxdLlRDVFJMICY9IH5QSVRfVENUUkxfVEVOX01BU0s7Cit9CisKKy8qISBAfSovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BJVF9IQVNfTElGRVRJTUVfVElNRVIpICYmIEZTTF9GRUFUVVJFX1BJVF9IQVNfTElGRVRJTUVfVElNRVIKKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIGN1cnJlbnQgbGlmZXRpbWUgY291bnRlciB2YWx1ZS4KKyAqCisgKiBUaGUgbGlmZXRpbWUgdGltZXIgaXMgYSA2NC1iaXQgdGltZXIgd2hpY2ggY2hhaW5zIHRpbWVyIDAgYW5kIHRpbWVyIDEgdG9nZXRoZXIuCisgKiBUaW1lciAwIGFuZCAxIGFyZSBjaGFpbmVkIGJ5IGNhbGxpbmcgdGhlIFBJVF9TZXRUaW1lckNoYWluTW9kZSBiZWZvcmUgdXNpbmcgdGhpcyB0aW1lci4KKyAqIFRoZSBwZXJpb2Qgb2YgbGlmZXRpbWUgdGltZXIgaXMgZXF1YWwgdG8gdGhlICJwZXJpb2Qgb2YgdGltZXIgMCAqIHBlcmlvZCBvZiB0aW1lciAxIi4KKyAqIEZvciB0aGUgNjQtYml0IHZhbHVlLCB0aGUgaGlnaGVyIDMyLWJpdCBoYXMgdGhlIHZhbHVlIG9mIHRpbWVyIDEsIGFuZCB0aGUgbG93ZXIgMzItYml0CisgKiBoYXMgdGhlIHZhbHVlIG9mIHRpbWVyIDAuCisgKgorICogQHBhcmFtIGJhc2UgUElUIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBDdXJyZW50IGxpZmV0aW1lIHRpbWVyIHZhbHVlCisgKi8KK3VpbnQ2NF90IFBJVF9HZXRMaWZldGltZVRpbWVyQ291bnQoUElUX1R5cGUgKmJhc2UpOworCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUElUX0hBU19MSUZFVElNRV9USU1FUiAqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9QSVRfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BtYy5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcG1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkZDVjYgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BtYy5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImZzbF9wbWMuaCIKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfUEFSQU0pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfUEFSQU0pCit2b2lkIFBNQ19HZXRQYXJhbShQTUNfVHlwZSAqYmFzZSwgcG1jX3BhcmFtX3QgKnBhcmFtKQoreworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPlBBUkFNOworICAgIDsKKyAgICBwYXJhbS0+dmxwb0VuYWJsZSA9IChib29sKShyZWcgJiBQTUNfUEFSQU1fVkxQT0VfTUFTSyk7CisgICAgcGFyYW0tPmh2ZEVuYWJsZSA9IChib29sKShyZWcgJiBQTUNfUEFSQU1fSFZERV9NQVNLKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX1BBUkFNICovCisKK3ZvaWQgUE1DX0NvbmZpZ3VyZUxvd1ZvbHREZXRlY3QoUE1DX1R5cGUgKmJhc2UsIGNvbnN0IHBtY19sb3dfdm9sdF9kZXRlY3RfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBiYXNlLT5MVkRTQzEgPSAoMFUgfAorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZEVikgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19MVkRWKQorICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWNvbmZpZy0+dm9sdFNlbGVjdCA8PCBQTUNfTFZEU0MxX0xWRFZfU0hJRlQpIHwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWNvbmZpZy0+ZW5hYmxlSW50IDw8IFBNQ19MVkRTQzFfTFZESUVfU0hJRlQpIHwKKyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljb25maWctPmVuYWJsZVJlc2V0IDw8IFBNQ19MVkRTQzFfTFZEUkVfU0hJRlQpCisgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBMb3cgVm9sdGFnZSBEZXRlY3QgRmxhZyB3aXRoIHByZXZpb3VzZSBwb3dlciBkZXRlY3Qgc2V0dGluZyAqLworICAgICAgICAgICAgICAgICAgICB8IFBNQ19MVkRTQzFfTFZEQUNLX01BU0spOworfQorCit2b2lkIFBNQ19Db25maWd1cmVMb3dWb2x0V2FybmluZyhQTUNfVHlwZSAqYmFzZSwgY29uc3QgcG1jX2xvd192b2x0X3dhcm5pbmdfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBiYXNlLT5MVkRTQzIgPSAoMFUgfAorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZXVikgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19MVldWKQorICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWNvbmZpZy0+dm9sdFNlbGVjdCA8PCBQTUNfTFZEU0MyX0xWV1ZfU0hJRlQpIHwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWNvbmZpZy0+ZW5hYmxlSW50IDw8IFBNQ19MVkRTQzJfTFZXSUVfU0hJRlQpCisgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBMb3cgVm9sdGFnZSBXYXJuaW5nIEZsYWcgd2l0aCBwcmV2aW91c2UgcG93ZXIgZGV0ZWN0IHNldHRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgfCBQTUNfTFZEU0MyX0xWV0FDS19NQVNLKTsKK30KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0hWRFNDMSkKK3ZvaWQgUE1DX0NvbmZpZ3VyZUhpZ2hWb2x0RGV0ZWN0KFBNQ19UeXBlICpiYXNlLCBjb25zdCBwbWNfaGlnaF92b2x0X2RldGVjdF9jb25maWdfdCAqY29uZmlnKQoreworICAgIGJhc2UtPkhWRFNDMSA9ICgoKHVpbnQzMl90KWNvbmZpZy0+dm9sdFNlbGVjdCA8PCBQTUNfSFZEU0MxX0hWRFZfU0hJRlQpIHwKKyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCljb25maWctPmVuYWJsZUludCA8PCBQTUNfSFZEU0MxX0hWRElFX1NISUZUKSB8CisgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpY29uZmlnLT5lbmFibGVSZXNldCA8PCBQTUNfSFZEU0MxX0hWRFJFX1NISUZUKQorICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgSGlnaCBWb2x0YWdlIERldGVjdCBGbGFnIHdpdGggcHJldmlvdXNlIHBvd2VyIGRldGVjdCBzZXR0aW5nICovCisgICAgICAgICAgICAgICAgICAgIHwgUE1DX0hWRFNDMV9IVkRBQ0tfTUFTSyk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEgKi8KKworI2lmICgoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRSkgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTikgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSkKK3ZvaWQgUE1DX0NvbmZpZ3VyZUJhbmRnYXBCdWZmZXIoUE1DX1R5cGUgKmJhc2UsIGNvbnN0IHBtY19iYW5kZ2FwX2J1ZmZlcl9jb25maWdfdCAqY29uZmlnKQoreworICAgIGJhc2UtPlJFR1NDID0gKDBVCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpCisgICAgICAgICAgICAgICAgICAgfCAoKHVpbnQzMl90KWNvbmZpZy0+ZW5hYmxlIDw8IFBNQ19SRUdTQ19CR0JFX1NISUZUKQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRSAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTikgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOKQorICAgICAgICAgICAgICAgICAgIHwgKCgodWludDMyX3QpY29uZmlnLT5lbmFibGVJbkxvd1Bvd2VyTW9kZSA8PCBQTUNfUkVHU0NfQkdFTl9TSElGVCkpCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykKKyAgICAgICAgICAgICAgICAgICB8ICgodWludDMyX3QpY29uZmlnLT5kcml2ZSA8PCBQTUNfUkVHU0NfQkdCRFNfU0hJRlQpCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUyAqLworICAgICAgICAgICAgICAgICAgICAgICApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9wbWMuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3BtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZmMxNDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9wbWMuaApAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfUE1DX0hfCisjZGVmaW5lIF9GU0xfUE1DX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qISBAYWRkdG9ncm91cCBwbWMgKi8KKy8qISBAeyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUE1DIGRyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEZTTF9QTUNfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAwKSkgLyohPCBWZXJzaW9uIDIuMC4wLiAqLworLypAfSovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0xWRFYpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZEVikKKy8qIQorICogQGJyaWVmIExvdy12b2x0YWdlIERldGVjdCBWb2x0YWdlIFNlbGVjdAorICovCit0eXBlZGVmIGVudW0gX3BtY19sb3dfdm9sdF9kZXRlY3Rfdm9sdF9zZWxlY3QKK3sKKyAgICBrUE1DX0xvd1ZvbHREZXRlY3RMb3dUcmlwID0gMFUsIC8qITwgTG93LXRyaXAgcG9pbnQgc2VsZWN0ZWQgKFZMVkQgPSBWTFZETCApKi8KKyAgICBrUE1DX0xvd1ZvbHREZXRlY3RIaWdoVHJpcCA9IDFVIC8qITwgSGlnaC10cmlwIHBvaW50IHNlbGVjdGVkIChWTFZEID0gVkxWREggKSovCit9IHBtY19sb3dfdm9sdF9kZXRlY3Rfdm9sdF9zZWxlY3RfdDsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19MVldWKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0xWV1YpCisvKiEKKyAqIEBicmllZiBMb3ctdm9sdGFnZSBXYXJuaW5nIFZvbHRhZ2UgU2VsZWN0CisgKi8KK3R5cGVkZWYgZW51bSBfcG1jX2xvd192b2x0X3dhcm5pbmdfdm9sdF9zZWxlY3QKK3sKKyAgICBrUE1DX0xvd1ZvbHRXYXJuaW5nTG93VHJpcCA9IDBVLCAgLyohPCBMb3ctdHJpcCBwb2ludCBzZWxlY3RlZCAoVkxWVyA9IFZMVlcxKSovCisgICAga1BNQ19Mb3dWb2x0V2FybmluZ01pZDFUcmlwID0gMVUsIC8qITwgTWlkIDEgdHJpcCBwb2ludCBzZWxlY3RlZCAoVkxWVyA9IFZMVlcyKSovCisgICAga1BNQ19Mb3dWb2x0V2FybmluZ01pZDJUcmlwID0gMlUsIC8qITwgTWlkIDIgdHJpcCBwb2ludCBzZWxlY3RlZCAoVkxWVyA9IFZMVlczKSovCisgICAga1BNQ19Mb3dWb2x0V2FybmluZ0hpZ2hUcmlwID0gM1UgIC8qITwgSGlnaC10cmlwIHBvaW50IHNlbGVjdGVkIChWTFZXID0gVkxWVzQpKi8KK30gcG1jX2xvd192b2x0X3dhcm5pbmdfdm9sdF9zZWxlY3RfdDsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxKQorLyohCisgKiBAYnJpZWYgSGlnaC12b2x0YWdlIERldGVjdCBWb2x0YWdlIFNlbGVjdAorICovCit0eXBlZGVmIGVudW0gX3BtY19oaWdoX3ZvbHRfZGV0ZWN0X3ZvbHRfc2VsZWN0Cit7CisgICAga1BNQ19IaWdoVm9sdERldGVjdExvd1RyaXAgPSAwVSwgLyohPCBMb3ctdHJpcCBwb2ludCBzZWxlY3RlZCAoVkhWRCA9IFZIVkRMICkqLworICAgIGtQTUNfSGlnaFZvbHREZXRlY3RIaWdoVHJpcCA9IDFVIC8qITwgSGlnaC10cmlwIHBvaW50IHNlbGVjdGVkIChWSFZEID0gVkhWREggKSovCit9IHBtY19oaWdoX3ZvbHRfZGV0ZWN0X3ZvbHRfc2VsZWN0X3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRFMpCisvKiEKKyAqIEBicmllZiBCYW5kZ2FwIEJ1ZmZlciBEcml2ZSBTZWxlY3QuCisgKi8KK3R5cGVkZWYgZW51bSBfcG1jX2JhbmRnYXBfYnVmZmVyX2RyaXZlX3NlbGVjdAoreworICAgIGtQTUNfQmFuZGdhcEJ1ZmZlckRyaXZlTG93ID0gMFUsIC8qITwgTG93LWRyaXZlLiAgKi8KKyAgICBrUE1DX0JhbmRnYXBCdWZmZXJEcml2ZUhpZ2ggPSAxVSAvKiE8IEhpZ2gtZHJpdmUuICovCit9IHBtY19iYW5kZ2FwX2J1ZmZlcl9kcml2ZV9zZWxlY3RfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX1ZMUE8pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfVkxQTykKKy8qIQorICogQGJyaWVmIFZMUHggT3B0aW9uCisgKi8KK3R5cGVkZWYgZW51bSBfcG1jX3ZscF9mcmVxX29wdGlvbgoreworICAgIGtQTUNfRnJlcVJlc3RyaWN0ID0gMFUsICAvKiE8IEZyZXF1ZW5jeSBpcyByZXN0cmljdGVkIGluIFZMUHggbW9kZS4gKi8KKyAgICBrUE1DX0ZyZXFVbnJlc3RyaWN0ID0gMVUgLyohPCBGcmVxdWVuY3kgaXMgdW5yZXN0cmljdGVkIGluIFZMUHggbW9kZS4gKi8KK30gcG1jX3ZscF9mcmVxX21vZGVfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX1ZMUE8gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfVkVSSUQpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfVkVSSUQpCisvKiEKKyBAYnJpZWYgSVAgdmVyc2lvbiBJRCBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfcG1jX3ZlcnNpb25faWQKK3sKKyAgICB1aW50MTZfdCBmZWF0dXJlOyAvKiE8IEZlYXR1cmUgU3BlY2lmaWNhdGlvbiBOdW1iZXIuICovCisgICAgdWludDhfdCBtaW5vcjsgICAgLyohPCBNaW5vciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAqLworICAgIHVpbnQ4X3QgbWFqb3I7ICAgIC8qITwgTWFqb3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgKi8KK30gcG1jX3ZlcnNpb25faWRfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX1ZFUklEICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX1BBUkFNKQorLyohIEBicmllZiBJUCBwYXJhbWV0ZXIgZGVmaW5pdGlvbi4gKi8KK3R5cGVkZWYgc3RydWN0IF9wbWNfcGFyYW0KK3sKKyAgICBib29sIHZscG9FbmFibGU7IC8qITwgVkxQTyBlbmFibGUuICovCisgICAgYm9vbCBodmRFbmFibGU7ICAvKiE8IEhWRCBlbmFibGUuICAqLworfSBwbWNfcGFyYW1fdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX1BBUkFNICovCisKKy8qIQorICogQGJyaWVmIExvdy12b2x0YWdlIERldGVjdCBDb25maWd1cmF0aW9uIFN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCBfcG1jX2xvd192b2x0X2RldGVjdF9jb25maWcKK3sKKyAgICBib29sIGVuYWJsZUludDsgICAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgd2hlbiBMb3ctdm9sdGFnZSBkZXRlY3QqLworICAgIGJvb2wgZW5hYmxlUmVzZXQ7IC8qITwgRW5hYmxlIHN5c3RlbSByZXNldCB3aGVuIExvdy12b2x0YWdlIGRldGVjdCovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19MVkRWKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0xWRFYpCisgICAgcG1jX2xvd192b2x0X2RldGVjdF92b2x0X3NlbGVjdF90IHZvbHRTZWxlY3Q7IC8qITwgTG93LXZvbHRhZ2UgZGV0ZWN0IHRyaXAgcG9pbnQgdm9sdGFnZSBzZWxlY3Rpb24qLworI2VuZGlmCit9IHBtY19sb3dfdm9sdF9kZXRlY3RfY29uZmlnX3Q7CisKKy8qIQorICogQGJyaWVmIExvdy12b2x0YWdlIFdhcm5pbmcgQ29uZmlndXJhdGlvbiBTdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3BtY19sb3dfdm9sdF93YXJuaW5nX2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlSW50OyAvKiE8IEVuYWJsZSBpbnRlcnJ1cHQgd2hlbiBsb3ctdm9sdGFnZSB3YXJuaW5nKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0xWV1YpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfTFZXVikKKyAgICBwbWNfbG93X3ZvbHRfd2FybmluZ192b2x0X3NlbGVjdF90IHZvbHRTZWxlY3Q7IC8qITwgTG93LXZvbHRhZ2Ugd2FybmluZyB0cmlwIHBvaW50IHZvbHRhZ2Ugc2VsZWN0aW9uKi8KKyNlbmRpZgorfSBwbWNfbG93X3ZvbHRfd2FybmluZ19jb25maWdfdDsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0hWRFNDMSkKKy8qIQorICogQGJyaWVmIEhpZ2gtdm9sdGFnZSBEZXRlY3QgQ29uZmlndXJhdGlvbiBTdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3BtY19oaWdoX3ZvbHRfZGV0ZWN0X2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlSW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgaW50ZXJydXB0IHdoZW4gaGlnaC12b2x0YWdlIGRldGVjdCovCisgICAgYm9vbCBlbmFibGVSZXNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBzeXN0ZW0gcmVzZXQgd2hlbiBoaWdoLXZvbHRhZ2UgZGV0ZWN0Ki8KKyAgICBwbWNfaGlnaF92b2x0X2RldGVjdF92b2x0X3NlbGVjdF90IHZvbHRTZWxlY3Q7IC8qITwgSGlnaC12b2x0YWdlIGRldGVjdCB0cmlwIHBvaW50IHZvbHRhZ2Ugc2VsZWN0aW9uKi8KK30gcG1jX2hpZ2hfdm9sdF9kZXRlY3RfY29uZmlnX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEgKi8KKworI2lmICgoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRSkgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTikgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSkKKy8qIQorICogQGJyaWVmIEJhbmRnYXAgQnVmZmVyIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9wbWNfYmFuZGdhcF9idWZmZXJfY29uZmlnCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JFKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpCisgICAgYm9vbCBlbmFibGU7IC8qITwgRW5hYmxlIGJhbmRnYXAgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pCisgICAgYm9vbCBlbmFibGVJbkxvd1Bvd2VyTW9kZTsgLyohPCBFbmFibGUgYmFuZGdhcCBidWZmZXIgaW4gbG93LXBvd2VyIG1vZGUuICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0VOICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUykKKyAgICBwbWNfYmFuZGdhcF9idWZmZXJfZHJpdmVfc2VsZWN0X3QgZHJpdmU7IC8qITwgQmFuZGdhcCBidWZmZXIgZHJpdmUgc2VsZWN0LiAgICAgICAgICAgICAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19CR0JEUyAqLworfSBwbWNfYmFuZGdhcF9idWZmZXJfY29uZmlnX3Q7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyovCisKKy8qISBAbmFtZSBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xsZXIgQ29udHJvbCBBUElzKi8KKy8qQHsqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19WRVJJRCkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19WRVJJRCkKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFBNQyB2ZXJzaW9uIElELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgUE1DIHZlcnNpb24gSUQsIGluY2x1ZGluZyBtYWpvciB2ZXJzaW9uIG51bWJlciwKKyAqIG1pbm9yIHZlcnNpb24gbnVtYmVyLCBhbmQgYSBmZWF0dXJlIHNwZWNpZmljYXRpb24gbnVtYmVyLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSB2ZXJzaW9uSWQgICAgIFBvaW50ZXIgdG8gdmVyc2lvbiBJRCBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQTUNfR2V0VmVyc2lvbklkKFBNQ19UeXBlICpiYXNlLCBwbWNfdmVyc2lvbl9pZF90ICp2ZXJzaW9uSWQpCit7CisgICAgKigodWludDMyX3QgKil2ZXJzaW9uSWQpID0gYmFzZS0+VkVSSUQ7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19WRVJJRCAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfUE1DX0hBU19QQVJBTSkKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFBNQyBwYXJhbWV0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBQTUMgcGFyYW1ldGVyIGluY2x1ZGluZyB0aGUgVkxQTyBlbmFibGUgYW5kIHRoZSBIVkQgZW5hYmxlLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBwYXJhbSAgICAgICAgIFBvaW50ZXIgdG8gUE1DIHBhcmFtIHN0cnVjdHVyZS4KKyAqLwordm9pZCBQTUNfR2V0UGFyYW0oUE1DX1R5cGUgKmJhc2UsIHBtY19wYXJhbV90ICpwYXJhbSk7CisjZW5kaWYKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgbG93LXZvbHRhZ2UgZGV0ZWN0IHNldHRpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBsb3ctdm9sdGFnZSBkZXRlY3Qgc2V0dGluZywgaW5jbHVkaW5nIHRoZSB0cmlwCisgKiBwb2ludCB2b2x0YWdlIHNldHRpbmcsIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGludGVycnVwdCwgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3lzdGVtIHJlc2V0LgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgIExvdy12b2x0YWdlIGRldGVjdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBQTUNfQ29uZmlndXJlTG93Vm9sdERldGVjdChQTUNfVHlwZSAqYmFzZSwgY29uc3QgcG1jX2xvd192b2x0X2RldGVjdF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTG93LXZvbHRhZ2UgRGV0ZWN0IEZsYWcgc3RhdHVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gIHJlYWRzIHRoZSBjdXJyZW50IExWREYgc3RhdHVzLiBJZiBpdCByZXR1cm5zIDEsIGEgbG93LXZvbHRhZ2UgZXZlbnQgaXMgZGV0ZWN0ZWQuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBDdXJyZW50IGxvdy12b2x0YWdlIGRldGVjdCBmbGFnCisgKiAgICAgICAgICAgICAgICAtIHRydWU6IExvdy12b2x0YWdlIGRldGVjdGVkCisgKiAgICAgICAgICAgICAgICAtIGZhbHNlOiBMb3ctdm9sdGFnZSBub3QgZGV0ZWN0ZWQKKyAqLworc3RhdGljIGlubGluZSBib29sIFBNQ19HZXRMb3dWb2x0RGV0ZWN0RmxhZyhQTUNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPkxWRFNDMSAmIFBNQ19MVkRTQzFfTFZERl9NQVNLKTsKK30KKworLyohCisgKiBAYnJpZWYgQWNrbm93bGVkZ2VzIGNsZWFyaW5nIHRoZSBMb3ctdm9sdGFnZSBEZXRlY3QgZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFja25vd2xlZGdlcyB0aGUgbG93LXZvbHRhZ2UgZGV0ZWN0aW9uIGVycm9ycyAod3JpdGUgMSB0bworICogY2xlYXIgTFZERikuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE1DX0NsZWFyTG93Vm9sdERldGVjdEZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+TFZEU0MxIHw9IFBNQ19MVkRTQzFfTFZEQUNLX01BU0s7Cit9CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGxvdy12b2x0YWdlIHdhcm5pbmcgc2V0dGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGxvdy12b2x0YWdlIHdhcm5pbmcgc2V0dGluZywgaW5jbHVkaW5nIHRoZSB0cmlwCisgKiBwb2ludCB2b2x0YWdlIHNldHRpbmcgYW5kIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgaW50ZXJydXB0LgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgIExvdy12b2x0YWdlIHdhcm5pbmcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgUE1DX0NvbmZpZ3VyZUxvd1ZvbHRXYXJuaW5nKFBNQ19UeXBlICpiYXNlLCBjb25zdCBwbWNfbG93X3ZvbHRfd2FybmluZ19jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgTG93LXZvbHRhZ2UgV2FybmluZyBGbGFnIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvbGxzIHRoZSBjdXJyZW50IExWV0Ygc3RhdHVzLiBXaGVuIDEgaXMgcmV0dXJuZWQsIGl0CisgKiBpbmRpY2F0ZXMgYSBsb3ctdm9sdGFnZSB3YXJuaW5nIGV2ZW50LiBMVldGIGlzIHNldCB3aGVuIFYgU3VwcGx5IHRyYW5zaXRpb25zCisgKiBiZWxvdyB0aGUgdHJpcCBwb2ludCBvciBhZnRlciByZXNldCBhbmQgViBTdXBwbHkgaXMgYWxyZWFkeSBiZWxvdyB0aGUgViBMVlcuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBDdXJyZW50IExWV0Ygc3RhdHVzCisgKiAgICAgICAgICAgICAgICAgIC0gdHJ1ZTogTG93LXZvbHRhZ2UgV2FybmluZyBGbGFnIGlzIHNldC4KKyAqICAgICAgICAgICAgICAgICAgLSBmYWxzZTogdGhlICBMb3ctdm9sdGFnZSBXYXJuaW5nIGRvZXMgbm90IGhhcHBlbi4KKyAqLworc3RhdGljIGlubGluZSBib29sIFBNQ19HZXRMb3dWb2x0V2FybmluZ0ZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKShiYXNlLT5MVkRTQzIgJiBQTUNfTFZEU0MyX0xWV0ZfTUFTSyk7Cit9CisKKy8qIQorICogQGJyaWVmIEFja25vd2xlZGdlcyB0aGUgTG93LXZvbHRhZ2UgV2FybmluZyBmbGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWNrbm93bGVkZ2VzIHRoZSBsb3cgdm9sdGFnZSB3YXJuaW5nIGVycm9ycyAod3JpdGUgMSB0bworICogY2xlYXIgTFZXRikuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE1DX0NsZWFyTG93Vm9sdFdhcm5pbmdGbGFnKFBNQ19UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkxWRFNDMiB8PSBQTUNfTFZEU0MyX0xWV0FDS19NQVNLOworfQorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfSFZEU0MxKQorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgaGlnaC12b2x0YWdlIGRldGVjdCBzZXR0aW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgaGlnaC12b2x0YWdlIGRldGVjdCBzZXR0aW5nLCBpbmNsdWRpbmcgdGhlIHRyaXAKKyAqIHBvaW50IHZvbHRhZ2Ugc2V0dGluZywgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBpbnRlcnJ1cHQsIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgc3lzdGVtIHJlc2V0LgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBjb25maWcgIEhpZ2gtdm9sdGFnZSBkZXRlY3QgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgUE1DX0NvbmZpZ3VyZUhpZ2hWb2x0RGV0ZWN0KFBNQ19UeXBlICpiYXNlLCBjb25zdCBwbWNfaGlnaF92b2x0X2RldGVjdF9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgSGlnaC12b2x0YWdlIERldGVjdCBGbGFnIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICByZWFkcyB0aGUgY3VycmVudCBIVkRGIHN0YXR1cy4gSWYgaXQgcmV0dXJucyAxLCBhIGxvdworICogdm9sdGFnZSBldmVudCBpcyBkZXRlY3RlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIEN1cnJlbnQgaGlnaC12b2x0YWdlIGRldGVjdCBmbGFnCisgKiAgICAgICAgICAgICAgICAtIHRydWU6IEhpZ2gtdm9sdGFnZSBkZXRlY3RlZAorICogICAgICAgICAgICAgICAgLSBmYWxzZTogSGlnaC12b2x0YWdlIG5vdCBkZXRlY3RlZAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgUE1DX0dldEhpZ2hWb2x0RGV0ZWN0RmxhZyhQTUNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPkhWRFNDMSAmIFBNQ19IVkRTQzFfSFZERl9NQVNLKTsKK30KKworLyohCisgKiBAYnJpZWYgQWNrbm93bGVkZ2VzIGNsZWFyaW5nIHRoZSBIaWdoLXZvbHRhZ2UgRGV0ZWN0IGZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBhY2tub3dsZWRnZXMgdGhlIGhpZ2gtdm9sdGFnZSBkZXRlY3Rpb24gZXJyb3JzICh3cml0ZSAxIHRvCisgKiBjbGVhciBIVkRGKS4KKyAqCisgKiBAcGFyYW0gYmFzZSBQTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQTUNfQ2xlYXJIaWdoVm9sdERldGVjdEZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+SFZEU0MxIHw9IFBNQ19IVkRTQzFfSFZEQUNLX01BU0s7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19IVkRTQzEgKi8KKworI2lmICgoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkUpICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdCRSkgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHRU4pICYmIEZTTF9GRUFUVVJFX1BNQ19IQVNfQkdFTikgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0JHQkRTKSkKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIFBNQyBiYW5kZ2FwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgUE1DIGJhbmRnYXAsIGluY2x1ZGluZyB0aGUgZHJpdmUgc2VsZWN0IGFuZAorICogYmVoYXZpb3IgaW4gbG93LXBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGNvbmZpZyBQb2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorICovCit2b2lkIFBNQ19Db25maWd1cmVCYW5kZ2FwQnVmZmVyKFBNQ19UeXBlICpiYXNlLCBjb25zdCBwbWNfYmFuZGdhcF9idWZmZXJfY29uZmlnX3QgKmNvbmZpZyk7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfQUNLSVNPKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX0FDS0lTTykKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIGFja25vd2xlZGdlIFBlcmlwaGVyYWxzIGFuZCBJL08gcGFkcyBpc29sYXRpb24gZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICByZWFkcyB0aGUgQWNrbm93bGVkZ2UgSXNvbGF0aW9uIHNldHRpbmcgdGhhdCBpbmRpY2F0ZXMKKyAqIHdoZXRoZXIgY2VydGFpbiBwZXJpcGhlcmFscyBhbmQgdGhlIEkvTyBwYWRzIGFyZSBpbiBhIGxhdGNoZWQgc3RhdGUgYXMKKyAqIGEgcmVzdWx0IG9mIGhhdmluZyBiZWVuIGluIHRoZSBWTExTIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgUE1DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGJhc2UgIEJhc2UgYWRkcmVzcyBmb3IgY3VycmVudCBQTUMgaW5zdGFuY2UuCisgKiBAcmV0dXJuIEFDSyBpc29sYXRpb24KKyAqICAgICAgICAgICAgICAgMCAtIFBlcmlwaGVyYWxzIGFuZCBJL08gcGFkcyBhcmUgaW4gYSBub3JtYWwgcnVuIHN0YXRlLgorICogICAgICAgICAgICAgICAxIC0gQ2VydGFpbiBwZXJpcGhlcmFscyBhbmQgSS9PIHBhZHMgYXJlIGluIGFuIGlzb2xhdGVkIGFuZAorICogICAgICAgICAgICAgICAgICAgbGF0Y2hlZCBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIFBNQ19HZXRQZXJpcGhJT0lzb2xhdGlvbkZsYWcoUE1DX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKShiYXNlLT5SRUdTQyAmIFBNQ19SRUdTQ19BQ0tJU09fTUFTSyk7Cit9CisKKy8qIQorICogQGJyaWVmIEFja25vd2xlZGdlcyB0aGUgaXNvbGF0aW9uIGZsYWcgdG8gUGVyaXBoZXJhbHMgYW5kIEkvTyBwYWRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gIGNsZWFycyB0aGUgQUNLIElzb2xhdGlvbiBmbGFnLiBXcml0aW5nIG9uZSB0byB0aGlzIHNldHRpbmcKKyAqIHdoZW4gaXQgaXMgc2V0IHJlbGVhc2VzIHRoZSBJL08gcGFkcyBhbmQgY2VydGFpbiBwZXJpcGhlcmFscyB0byB0aGVpciBub3JtYWwKKyAqIHJ1biBtb2RlIHN0YXRlLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFBNQ19DbGVhclBlcmlwaElPSXNvbGF0aW9uRmxhZyhQTUNfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5SRUdTQyB8PSBQTUNfUkVHU0NfQUNLSVNPX01BU0s7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE1DX0hBU19BQ0tJU08gKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1BNQ19IQVNfUkVHT05TKSAmJiBGU0xfRkVBVFVSRV9QTUNfSEFTX1JFR09OUykKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHJlZ3VsYXRvciByZWd1bGF0aW9uIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICByZXR1cm5zIHRoZSByZWd1bGF0b3IgdG8gcnVuIGEgcmVndWxhdGlvbiBzdGF0dXMuIEl0IHByb3ZpZGVzCisgKiB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIGludGVybmFsIHZvbHRhZ2UgcmVndWxhdG9yLgorICoKKyAqIEBwYXJhbSBiYXNlIFBNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBiYXNlICBCYXNlIGFkZHJlc3MgZm9yIGN1cnJlbnQgUE1DIGluc3RhbmNlLgorICogQHJldHVybiBSZWd1bGF0aW9uIHN0YXR1cworICogICAgICAgICAgICAgICAwIC0gUmVndWxhdG9yIGlzIGluIGEgc3RvcCByZWd1bGF0aW9uIG9yIGluIHRyYW5zaXRpb24gdG8vZnJvbSB0aGUgcmVndWxhdGlvbi4KKyAqICAgICAgICAgICAgICAgMSAtIFJlZ3VsYXRvciBpcyBpbiBhIHJ1biByZWd1bGF0aW9uLgorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIFBNQ19Jc1JlZ3VsYXRvckluUnVuUmVndWxhdGlvbihQTUNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJvb2wpKGJhc2UtPlJFR1NDICYgUE1DX1JFR1NDX1JFR09OU19NQVNLKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QTUNfSEFTX1JFR09OUyAqLworCisvKkB9Ki8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9QTUNfSF8qLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcG9ydC5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOGU3N2UKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9wb3J0LmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX1BPUlRfSF8KKyNkZWZpbmUgX0ZTTF9QT1JUX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgcG9ydAorICogQHsKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgVmVyc2lvbiAyLjAuMi4gKi8KKyNkZWZpbmUgRlNMX1BPUlRfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAwLCAyKSkKKy8qQH0qLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19QVUxMX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUKKy8qISBAYnJpZWYgSW50ZXJuYWwgcmVzaXN0b3IgcHVsbCBmZWF0dXJlIHNlbGVjdGlvbiAqLworZW51bSBfcG9ydF9wdWxsCit7CisgICAga1BPUlRfUHVsbERpc2FibGUgPSAwVSwgLyohPCBJbnRlcm5hbCBwdWxsLXVwL2Rvd24gcmVzaXN0b3IgaXMgZGlzYWJsZWQuICovCisgICAga1BPUlRfUHVsbERvd24gPSAyVSwgICAgLyohPCBJbnRlcm5hbCBwdWxsLWRvd24gcmVzaXN0b3IgaXMgZW5hYmxlZC4gKi8KKyAgICBrUE9SVF9QdWxsVXAgPSAzVSwgICAgICAvKiE8IEludGVybmFsIHB1bGwtdXAgcmVzaXN0b3IgaXMgZW5hYmxlZC4gKi8KK307CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfU0xFV19SQVRFKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19TTEVXX1JBVEUKKy8qISBAYnJpZWYgU2xldyByYXRlIHNlbGVjdGlvbiAqLworZW51bSBfcG9ydF9zbGV3X3JhdGUKK3sKKyAgICBrUE9SVF9GYXN0U2xld1JhdGUgPSAwVSwgLyohPCBGYXN0IHNsZXcgcmF0ZSBpcyBjb25maWd1cmVkLiAqLworICAgIGtQT1JUX1Nsb3dTbGV3UmF0ZSA9IDFVLCAvKiE8IFNsb3cgc2xldyByYXRlIGlzIGNvbmZpZ3VyZWQuICovCit9OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1NMRVdfUkFURSAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19PUEVOX0RSQUlOKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19PUEVOX0RSQUlOCisvKiEgQGJyaWVmIE9wZW4gRHJhaW4gZmVhdHVyZSBlbmFibGUvZGlzYWJsZSAqLworZW51bSBfcG9ydF9vcGVuX2RyYWluX2VuYWJsZQoreworICAgIGtQT1JUX09wZW5EcmFpbkRpc2FibGUgPSAwVSwgLyohPCBPcGVuIGRyYWluIG91dHB1dCBpcyBkaXNhYmxlZC4gKi8KKyAgICBrUE9SVF9PcGVuRHJhaW5FbmFibGUgPSAxVSwgIC8qITwgT3BlbiBkcmFpbiBvdXRwdXQgaXMgZW5hYmxlZC4gKi8KK307CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9IQVNfT1BFTl9EUkFJTiAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19QQVNTSVZFX0ZJTFRFUikgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUEFTU0lWRV9GSUxURVIKKy8qISBAYnJpZWYgUGFzc2l2ZSBmaWx0ZXIgZmVhdHVyZSBlbmFibGUvZGlzYWJsZSAqLworZW51bSBfcG9ydF9wYXNzaXZlX2ZpbHRlcl9lbmFibGUKK3sKKyAgICBrUE9SVF9QYXNzaXZlRmlsdGVyRGlzYWJsZSA9IDBVLCAvKiE8IFBhc3NpdmUgaW5wdXQgZmlsdGVyIGlzIGRpc2FibGVkLiAqLworICAgIGtQT1JUX1Bhc3NpdmVGaWx0ZXJFbmFibGUgPSAxVSwgIC8qITwgUGFzc2l2ZSBpbnB1dCBmaWx0ZXIgaXMgZW5hYmxlZC4gKi8KK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRFJJVkVfU1RSRU5HVEgpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RSSVZFX1NUUkVOR1RICisvKiEgQGJyaWVmIENvbmZpZ3VyZXMgdGhlIGRyaXZlIHN0cmVuZ3RoLiAqLworZW51bSBfcG9ydF9kcml2ZV9zdHJlbmd0aAoreworICAgIGtQT1JUX0xvd0RyaXZlU3RyZW5ndGggPSAwVSwgIC8qITwgTG93LWRyaXZlIHN0cmVuZ3RoIGlzIGNvbmZpZ3VyZWQuICovCisgICAga1BPUlRfSGlnaERyaXZlU3RyZW5ndGggPSAxVSwgLyohPCBIaWdoLWRyaXZlIHN0cmVuZ3RoIGlzIGNvbmZpZ3VyZWQuICovCit9OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RSSVZFX1NUUkVOR1RIICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BJTl9DT05UUk9MX0xPQ0spICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BJTl9DT05UUk9MX0xPQ0sKKy8qISBAYnJpZWYgVW5sb2NrL2xvY2sgdGhlIHBpbiBjb250cm9sIHJlZ2lzdGVyIGZpZWxkWzE1OjBdICovCitlbnVtIF9wb3J0X2xvY2tfcmVnaXN0ZXIKK3sKKyAgICBrUE9SVF9VbmxvY2tSZWdpc3RlciA9IDBVLCAvKiE8IFBpbiBDb250cm9sIFJlZ2lzdGVyIGZpZWxkcyBbMTU6MF0gYXJlIG5vdCBsb2NrZWQuICovCisgICAga1BPUlRfTG9ja1JlZ2lzdGVyID0gMVUsICAgLyohPCBQaW4gQ29udHJvbCBSZWdpc3RlciBmaWVsZHMgWzE1OjBdIGFyZSBsb2NrZWQuICovCit9OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BJTl9DT05UUk9MX0xPQ0sgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRIKSAmJiBGU0xfRkVBVFVSRV9QT1JUX1BDUl9NVVhfV0lEVEgKKy8qISBAYnJpZWYgUGluIG11eCBzZWxlY3Rpb24gKi8KK3R5cGVkZWYgZW51bSBfcG9ydF9tdXgKK3sKKyAgICBrUE9SVF9QaW5EaXNhYmxlZE9yQW5hbG9nID0gMFUsIC8qITwgQ29ycmVzcG9uZGluZyBwaW4gaXMgZGlzYWJsZWQsIGJ1dCBpcyB1c2VkIGFzIGFuIGFuYWxvZyBwaW4uICovCisgICAga1BPUlRfTXV4QXNHcGlvID0gMVUsICAgICAgICAgICAvKiE8IENvcnJlc3BvbmRpbmcgcGluIGlzIGNvbmZpZ3VyZWQgYXMgR1BJTy4gKi8KKyAgICBrUE9SVF9NdXhBbHQyID0gMlUsICAgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDMgPSAzVSwgICAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0NCA9IDRVLCAgICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQ1ID0gNVUsICAgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDYgPSA2VSwgICAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0NyA9IDdVLCAgICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQ4ID0gOFUsICAgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDkgPSA5VSwgICAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0MTAgPSAxMFUsICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQxMSA9IDExVSwgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDEyID0gMTJVLCAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCisgICAga1BPUlRfTXV4QWx0MTMgPSAxM1UsICAgICAgICAgICAvKiE8IENoaXAtc3BlY2lmaWMgKi8KKyAgICBrUE9SVF9NdXhBbHQxNCA9IDE0VSwgICAgICAgICAgIC8qITwgQ2hpcC1zcGVjaWZpYyAqLworICAgIGtQT1JUX011eEFsdDE1ID0gMTVVLCAgICAgICAgICAgLyohPCBDaGlwLXNwZWNpZmljICovCit9IHBvcnRfbXV4X3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRIICovCisKKy8qISBAYnJpZWYgQ29uZmlndXJlcyB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gY29uZGl0aW9uLiAqLwordHlwZWRlZiBlbnVtIF9wb3J0X2ludGVycnVwdAoreworICAgIGtQT1JUX0ludGVycnVwdE9yRE1BRGlzYWJsZWQgPSAweDBVLCAvKiE8IEludGVycnVwdC9ETUEgcmVxdWVzdCBpcyBkaXNhYmxlZC4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RNQV9SRVFVRVNUKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19ETUFfUkVRVUVTVAorICAgIGtQT1JUX0RNQVJpc2luZ0VkZ2UgPSAweDFVLCAgLyohPCBETUEgcmVxdWVzdCBvbiByaXNpbmcgZWRnZS4gKi8KKyAgICBrUE9SVF9ETUFGYWxsaW5nRWRnZSA9IDB4MlUsIC8qITwgRE1BIHJlcXVlc3Qgb24gZmFsbGluZyBlZGdlLiAqLworICAgIGtQT1JUX0RNQUVpdGhlckVkZ2UgPSAweDNVLCAgLyohPCBETUEgcmVxdWVzdCBvbiBlaXRoZXIgZWRnZS4gKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfSVJRQ19GTEFHKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19JUlFDX0ZMQUcKKyAgICBrUE9SVF9GbGFnUmlzaW5nRWRnZSA9IDB4MDVVLCAgLyohPCBGbGFnIHNldHMgb24gcmlzaW5nIGVkZ2UuICovCisgICAga1BPUlRfRmxhZ0ZhbGxpbmdFZGdlID0gMHgwNlUsIC8qITwgRmxhZyBzZXRzIG9uIGZhbGxpbmcgZWRnZS4gKi8KKyAgICBrUE9SVF9GbGFnRWl0aGVyRWRnZSA9IDB4MDdVLCAgLyohPCBGbGFnIHNldHMgb24gZWl0aGVyIGVkZ2UuICovCisjZW5kaWYKKyAgICBrUE9SVF9JbnRlcnJ1cHRMb2dpY1plcm8gPSAweDhVLCAgIC8qITwgSW50ZXJydXB0IHdoZW4gbG9naWMgemVyby4gKi8KKyAgICBrUE9SVF9JbnRlcnJ1cHRSaXNpbmdFZGdlID0gMHg5VSwgIC8qITwgSW50ZXJydXB0IG9uIHJpc2luZyBlZGdlLiAqLworICAgIGtQT1JUX0ludGVycnVwdEZhbGxpbmdFZGdlID0gMHhBVSwgLyohPCBJbnRlcnJ1cHQgb24gZmFsbGluZyBlZGdlLiAqLworICAgIGtQT1JUX0ludGVycnVwdEVpdGhlckVkZ2UgPSAweEJVLCAgLyohPCBJbnRlcnJ1cHQgb24gZWl0aGVyIGVkZ2UuICovCisgICAga1BPUlRfSW50ZXJydXB0TG9naWNPbmUgPSAweENVLCAgICAvKiE8IEludGVycnVwdCB3aGVuIGxvZ2ljIG9uZS4gKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX0lSUUNfVFJJR0dFUikgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfSVJRQ19UUklHR0VSCisgICAga1BPUlRfQWN0aXZlSGlnaFRyaWdnZXJPdXRwdXRFbmFibGUgPSAweERVLCAvKiE8IEVuYWJsZSBhY3RpdmUgaGlnaC10cmlnZ2VyIG91dHB1dC4gKi8KKyAgICBrUE9SVF9BY3RpdmVMb3dUcmlnZ2VyT3V0cHV0RW5hYmxlID0gMHhFVSwgIC8qITwgRW5hYmxlIGFjdGl2ZSBsb3ctdHJpZ2dlciBvdXRwdXQuICovCisjZW5kaWYKK30gcG9ydF9pbnRlcnJ1cHRfdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRElHSVRBTF9GSUxURVIpICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RJR0lUQUxfRklMVEVSCisvKiEgQGJyaWVmIERpZ2l0YWwgZmlsdGVyIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKi8KK3R5cGVkZWYgZW51bSBfcG9ydF9kaWdpdGFsX2ZpbHRlcl9jbG9ja19zb3VyY2UKK3sKKyAgICBrUE9SVF9CdXNDbG9jayA9IDBVLCAvKiE8IERpZ2l0YWwgZmlsdGVycyBhcmUgY2xvY2tlZCBieSB0aGUgYnVzIGNsb2NrLiAqLworICAgIGtQT1JUX0xwb0Nsb2NrID0gMVUsIC8qITwgRGlnaXRhbCBmaWx0ZXJzIGFyZSBjbG9ja2VkIGJ5IHRoZSAxIGtIeiBMUE8gY2xvY2suICovCit9IHBvcnRfZGlnaXRhbF9maWx0ZXJfY2xvY2tfc291cmNlX3Q7CisKKy8qISBAYnJpZWYgUE9SVCBkaWdpdGFsIGZpbHRlciBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgX3BvcnRfZGlnaXRhbF9maWx0ZXJfY29uZmlnCit7CisgICAgdWludDMyX3QgZGlnaXRhbEZpbHRlcldpZHRoOyAgICAgICAgICAgICAgICAgICAgLyohPCBTZXQgZGlnaXRhbCBmaWx0ZXIgd2lkdGggKi8KKyAgICBwb3J0X2RpZ2l0YWxfZmlsdGVyX2Nsb2NrX3NvdXJjZV90IGNsb2NrU291cmNlOyAvKiE8IFNldCBkaWdpdGFsIGZpbHRlciBjbG9ja1NvdXJjZSAqLworfSBwb3J0X2RpZ2l0YWxfZmlsdGVyX2NvbmZpZ190OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RJR0lUQUxfRklMVEVSICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRICisvKiEgQGJyaWVmIFBPUlQgcGluIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBfcG9ydF9waW5fY29uZmlnCit7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19QVUxMX0VOQUJMRSkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUKKyAgICB1aW50MTZfdCBwdWxsU2VsZWN0IDogMjsgLyohPCBOby1wdWxsL3B1bGwtZG93bi9wdWxsLXVwIHNlbGVjdCAqLworI2Vsc2UKKyAgICB1aW50MTZfdCA6IDI7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUFVMTF9FTkFCTEUgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfU0xFV19SQVRFKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19TTEVXX1JBVEUKKyAgICB1aW50MTZfdCBzbGV3UmF0ZSA6IDE7IC8qITwgRmFzdC9zbG93IHNsZXcgcmF0ZSBDb25maWd1cmUgKi8KKyNlbHNlCisgICAgdWludDE2X3QgOiAxOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1NMRVdfUkFURSAqLworCisgICAgdWludDE2X3QgOiAxOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19QQVNTSVZFX0ZJTFRFUikgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUEFTU0lWRV9GSUxURVIKKyAgICB1aW50MTZfdCBwYXNzaXZlRmlsdGVyRW5hYmxlIDogMTsgLyohPCBQYXNzaXZlIGZpbHRlciBlbmFibGUvZGlzYWJsZSAqLworI2Vsc2UKKyAgICB1aW50MTZfdCA6IDE7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9IQVNfUEFTU0lWRV9GSUxURVIgKi8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfUE9SVF9IQVNfT1BFTl9EUkFJTikgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfT1BFTl9EUkFJTgorICAgIHVpbnQxNl90IG9wZW5EcmFpbkVuYWJsZSA6IDE7IC8qITwgT3BlbiBkcmFpbiBlbmFibGUvZGlzYWJsZSAqLworI2Vsc2UKKyAgICB1aW50MTZfdCA6IDE7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9IQVNfT1BFTl9EUkFJTiAqLworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX0hBU19EUklWRV9TVFJFTkdUSCkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9IQVNfRFJJVkVfU1RSRU5HVEgKKyAgICB1aW50MTZfdCBkcml2ZVN0cmVuZ3RoIDogMTsgLyohPCBGYXN0L3Nsb3cgZHJpdmUgc3RyZW5ndGggY29uZmlndXJlICovCisjZWxzZQorICAgIHVpbnQxNl90IDogMTsKKyNlbmRpZgorCisgICAgdWludDE2X3QgOiAxOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9QT1JUX1BDUl9NVVhfV0lEVEgpICYmIEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSAorICAgIHVpbnQxNl90IG11eCA6IDM7IC8qITwgUGluIG11eCBDb25maWd1cmUgKi8KKyNlbHNlCisgICAgdWludDE2X3QgOiAzOworI2VuZGlmCisKKyAgICB1aW50MTZfdCA6IDQ7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BJTl9DT05UUk9MX0xPQ0spICYmIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BJTl9DT05UUk9MX0xPQ0sKKyAgICB1aW50MTZfdCBsb2NrUmVnaXN0ZXIgOiAxOyAvKiE8IExvY2svdW5sb2NrIHRoZSBQQ1IgZmllbGRbMTU6MF0gKi8KKyNlbHNlCisgICAgdWludDE2X3QgOiAxOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1BPUlRfSEFTX1BJTl9DT05UUk9MX0xPQ0sgKi8KK30gcG9ydF9waW5fY29uZmlnX3Q7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRIICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEFQSQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfUENSX01VWF9XSURUSCkgJiYgRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRICisvKiEgQG5hbWUgQ29uZmlndXJhdGlvbiAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIHBvcnQgUENSIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSB0byBkZWZpbmUgYW4gaW5wdXQgcGluIG9yIG91dHB1dCBwaW4gUENSIGNvbmZpZ3VyYXRpb24uCisgKiBAY29kZQorICogLy8gRGVmaW5lIGEgZGlnaXRhbCBpbnB1dCBwaW4gUENSIGNvbmZpZ3VyYXRpb24KKyAqIHBvcnRfcGluX2NvbmZpZ190IGNvbmZpZyA9IHsKKyAqICAgICAga1BPUlRfUHVsbFVwLAorICogICAgICBrUE9SVF9GYXN0U2xld1JhdGUsCisgKiAgICAgIGtQT1JUX1Bhc3NpdmVGaWx0ZXJEaXNhYmxlLAorICogICAgICBrUE9SVF9PcGVuRHJhaW5EaXNhYmxlLAorICogICAgICBrUE9SVF9Mb3dEcml2ZVN0cmVuZ3RoLAorICogICAgICBrUE9SVF9NdXhBc0dwaW8sCisgKiAgICAgIGtQT1JUX1VuTG9ja1JlZ2lzdGVyLAorICogfTsKKyAqIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgICBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIHBpbiAgICBQT1JUIHBpbiBudW1iZXIuCisgKiBAcGFyYW0gY29uZmlnIFBPUlQgUENSIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9TZXRQaW5Db25maWcoUE9SVF9UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4sIGNvbnN0IHBvcnRfcGluX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisgICAgdWludDMyX3QgYWRkciA9ICh1aW50MzJfdCkmYmFzZS0+UENSW3Bpbl07CisgICAgKih2b2xhdGlsZSB1aW50MTZfdCAqKShhZGRyKSA9ICooKGNvbnN0IHVpbnQxNl90ICopY29uZmlnKTsKK30KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgcG9ydCBQQ1IgcmVnaXN0ZXIgZm9yIG11bHRpcGxlIHBpbnMuCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlIHRvIGRlZmluZSBpbnB1dCBwaW5zIG9yIG91dHB1dCBwaW5zIFBDUiBjb25maWd1cmF0aW9uLgorICogQGNvZGUKKyAqIC8vIERlZmluZSBhIGRpZ2l0YWwgaW5wdXQgcGluIFBDUiBjb25maWd1cmF0aW9uCisgKiBwb3J0X3Bpbl9jb25maWdfdCBjb25maWcgPSB7CisgKiAgICAgIGtQT1JUX1B1bGxVcCAsCisgKiAgICAgIGtQT1JUX1B1bGxFbmFibGUsCisgKiAgICAgIGtQT1JUX0Zhc3RTbGV3UmF0ZSwKKyAqICAgICAga1BPUlRfUGFzc2l2ZUZpbHRlckRpc2FibGUsCisgKiAgICAgIGtQT1JUX09wZW5EcmFpbkRpc2FibGUsCisgKiAgICAgIGtQT1JUX0xvd0RyaXZlU3RyZW5ndGgsCisgKiAgICAgIGtQT1JUX011eEFzR3BpbywKKyAqICAgICAga1BPUlRfVW5sb2NrUmVnaXN0ZXIsCisgKiB9OworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSAgIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gbWFzayAgIFBPUlQgcGluIG51bWJlciBtYWNyby4KKyAqIEBwYXJhbSBjb25maWcgUE9SVCBQQ1IgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQT1JUX1NldE11bHRpcGxlUGluc0NvbmZpZyhQT1JUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2ssIGNvbnN0IHBvcnRfcGluX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyAgICB1aW50MTZfdCBwY3JsID0gKigoY29uc3QgdWludDE2X3QgKiljb25maWcpOworCisgICAgaWYgKG1hc2sgJiAweGZmZmZVKQorICAgIHsKKyAgICAgICAgYmFzZS0+R1BDTFIgPSAoKG1hc2sgJiAweGZmZmZVKSA8PCAxNikgfCBwY3JsOworICAgIH0KKyAgICBpZiAobWFzayA+PiAxNikKKyAgICB7CisgICAgICAgIGJhc2UtPkdQQ0hSID0gKG1hc2sgJiAweGZmZmYwMDAwVSkgfCBwY3JsOworICAgIH0KK30KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgcGluIG11eGluZy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgUE9SVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlci4KKyAqIEBwYXJhbSBwaW4gICBQT1JUIHBpbiBudW1iZXIuCisgKiBAcGFyYW0gbXV4ICAgcGluIG11eGluZyBzbG90IHNlbGVjdGlvbi4KKyAqICAgICAgICAtICNrUE9SVF9QaW5EaXNhYmxlZE9yQW5hbG9nOiBQaW4gZGlzYWJsZWQgb3Igd29yayBpbiBhbmFsb2cgZnVuY3Rpb24uCisgKiAgICAgICAgLSAja1BPUlRfTXV4QXNHcGlvICAgICAgICAgIDogU2V0IGFzIEdQSU8uCisgKiAgICAgICAgLSAja1BPUlRfTXV4QWx0MiAgICAgICAgICAgIDogY2hpcC1zcGVjaWZpYy4KKyAqICAgICAgICAtICNrUE9SVF9NdXhBbHQzICAgICAgICAgICAgOiBjaGlwLXNwZWNpZmljLgorICogICAgICAgIC0gI2tQT1JUX011eEFsdDQgICAgICAgICAgICA6IGNoaXAtc3BlY2lmaWMuCisgKiAgICAgICAgLSAja1BPUlRfTXV4QWx0NSAgICAgICAgICAgIDogY2hpcC1zcGVjaWZpYy4KKyAqICAgICAgICAtICNrUE9SVF9NdXhBbHQ2ICAgICAgICAgICAgOiBjaGlwLXNwZWNpZmljLgorICogICAgICAgIC0gI2tQT1JUX011eEFsdDcgICAgICAgICAgICA6IGNoaXAtc3BlY2lmaWMuCisgKiBATm90ZSA6IFRoaXMgZnVuY3Rpb24gaXMgTk9UIHJlY29tbWVuZGVkIHRvIHVzZSB0b2dldGhlciB3aXRoIHRoZSBQT1JUX1NldFBpbnNDb25maWcsIGJlY2F1c2UKKyAqICAgICAgICAgdGhlIFBPUlRfU2V0UGluc0NvbmZpZyBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgcGluIG11eCBhbnl3YXkgKE90aGVyd2lzZSB0aGUgcGluIG11eCBpcworICogICAgICAgICByZXNldCB0byB6ZXJvIDoga1BPUlRfUGluRGlzYWJsZWRPckFuYWxvZykuCisgKiAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZWNvbW1lbmRlZCB0byB1c2UgdG8gcmVzZXQgdGhlIHBpbiBtdXgKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQT1JUX1NldFBpbk11eChQT1JUX1R5cGUgKmJhc2UsIHVpbnQzMl90IHBpbiwgcG9ydF9tdXhfdCBtdXgpCit7CisgICAgYmFzZS0+UENSW3Bpbl0gPSAoYmFzZS0+UENSW3Bpbl0gJiB+UE9SVF9QQ1JfTVVYX01BU0spIHwgUE9SVF9QQ1JfTVVYKG11eCk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUE9SVF9QQ1JfTVVYX1dJRFRIICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1BPUlRfSEFTX0RJR0lUQUxfRklMVEVSKSAmJiBGU0xfRkVBVFVSRV9QT1JUX0hBU19ESUdJVEFMX0ZJTFRFUgorCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBkaWdpdGFsIGZpbHRlciBpbiBvbmUgcG9ydCwgZWFjaCBiaXQgb2YgdGhlIDMyLWJpdCByZWdpc3RlciByZXByZXNlbnRzIG9uZSBwaW4uCisgKgorICogQHBhcmFtIGJhc2UgIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gbWFzayAgUE9SVCBwaW4gbnVtYmVyIG1hY3JvLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9FbmFibGVQaW5zRGlnaXRhbEZpbHRlcihQT1JUX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2ssIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkRGRVIgfD0gbWFzazsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+REZFUiAmPSB+bWFzazsKKyAgICB9Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIGRpZ2l0YWwgZmlsdGVyIGluIG9uZSBwb3J0LCBlYWNoIGJpdCBvZiB0aGUgMzItYml0IHJlZ2lzdGVyIHJlcHJlc2VudHMgb25lIHBpbi4KKyAqCisgKiBAcGFyYW0gYmFzZSAgIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gY29uZmlnIFBPUlQgZGlnaXRhbCBmaWx0ZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQT1JUX1NldERpZ2l0YWxGaWx0ZXJDb25maWcoUE9SVF9UeXBlICpiYXNlLCBjb25zdCBwb3J0X2RpZ2l0YWxfZmlsdGVyX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyAgICBiYXNlLT5ERkNSID0gUE9SVF9ERkNSX0NTKGNvbmZpZy0+Y2xvY2tTb3VyY2UpOworICAgIGJhc2UtPkRGV1IgPSBQT1JUX0RGV1JfRklMVChjb25maWctPmRpZ2l0YWxGaWx0ZXJXaWR0aCk7Cit9CisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9QT1JUX0hBU19ESUdJVEFMX0ZJTFRFUiAqLworCisvKkB9Ki8KKworLyohIEBuYW1lIEludGVycnVwdCAqLworLypAeyovCisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHBvcnQgcGluIGludGVycnVwdC9ETUEgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICBQT1JUIHBlcmlwaGVyYWwgYmFzZSBwb2ludGVyLgorICogQHBhcmFtIHBpbiAgICAgUE9SVCBwaW4gbnVtYmVyLgorICogQHBhcmFtIGNvbmZpZyAgUE9SVCBwaW4gaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uCisgKiAgICAgICAgLSAja1BPUlRfSW50ZXJydXB0T3JETUFEaXNhYmxlZDogSW50ZXJydXB0L0RNQSByZXF1ZXN0IGRpc2FibGVkLgorICogICAgICAgIC0gI2tQT1JUX0RNQVJpc2luZ0VkZ2UgOiBETUEgcmVxdWVzdCBvbiByaXNpbmcgZWRnZShpZiB0aGUgRE1BIHJlcXVlc3RzIGV4aXQpLgorICogICAgICAgIC0gI2tQT1JUX0RNQUZhbGxpbmdFZGdlOiBETUEgcmVxdWVzdCBvbiBmYWxsaW5nIGVkZ2UoaWYgdGhlIERNQSByZXF1ZXN0cyBleGl0KS4KKyAqICAgICAgICAtICNrUE9SVF9ETUFFaXRoZXJFZGdlIDogRE1BIHJlcXVlc3Qgb24gZWl0aGVyIGVkZ2UoaWYgdGhlIERNQSByZXF1ZXN0cyBleGl0KS4KKyAqICAgICAgICAtICNrUE9SVF9GbGFnUmlzaW5nRWRnZSA6IEZsYWcgc2V0cyBvbiByaXNpbmcgZWRnZShpZiB0aGUgRmxhZyBzdGF0ZXMgZXhpdCkuCisgKiAgICAgICAgLSAja1BPUlRfRmxhZ0ZhbGxpbmdFZGdlIDogRmxhZyBzZXRzIG9uIGZhbGxpbmcgZWRnZShpZiB0aGUgRmxhZyBzdGF0ZXMgZXhpdCkuCisgKiAgICAgICAgLSAja1BPUlRfRmxhZ0VpdGhlckVkZ2UgOiBGbGFnIHNldHMgb24gZWl0aGVyIGVkZ2UoaWYgdGhlIEZsYWcgc3RhdGVzIGV4aXQpLgorICogICAgICAgIC0gI2tQT1JUX0ludGVycnVwdExvZ2ljWmVybyAgOiBJbnRlcnJ1cHQgd2hlbiBsb2dpYyB6ZXJvLgorICogICAgICAgIC0gI2tQT1JUX0ludGVycnVwdFJpc2luZ0VkZ2UgOiBJbnRlcnJ1cHQgb24gcmlzaW5nIGVkZ2UuCisgKiAgICAgICAgLSAja1BPUlRfSW50ZXJydXB0RmFsbGluZ0VkZ2U6IEludGVycnVwdCBvbiBmYWxsaW5nIGVkZ2UuCisgKiAgICAgICAgLSAja1BPUlRfSW50ZXJydXB0RWl0aGVyRWRnZSA6IEludGVycnVwdCBvbiBlaXRoZXIgZWRnZS4KKyAqICAgICAgICAtICNrUE9SVF9JbnRlcnJ1cHRMb2dpY09uZSAgIDogSW50ZXJydXB0IHdoZW4gbG9naWMgb25lLgorICogICAgICAgIC0gI2tQT1JUX0FjdGl2ZUhpZ2hUcmlnZ2VyT3V0cHV0RW5hYmxlIDogRW5hYmxlIGFjdGl2ZSBoaWdoLXRyaWdnZXIgb3V0cHV0IChpZiB0aGUgdHJpZ2dlciBzdGF0ZXMgZXhpdCkuCisgKiAgICAgICAgLSAja1BPUlRfQWN0aXZlTG93VHJpZ2dlck91dHB1dEVuYWJsZSAgOiBFbmFibGUgYWN0aXZlIGxvdy10cmlnZ2VyIG91dHB1dCAoaWYgdGhlIHRyaWdnZXIgc3RhdGVzIGV4aXQpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUE9SVF9TZXRQaW5JbnRlcnJ1cHRDb25maWcoUE9SVF9UeXBlICpiYXNlLCB1aW50MzJfdCBwaW4sIHBvcnRfaW50ZXJydXB0X3QgY29uZmlnKQoreworICAgIGJhc2UtPlBDUltwaW5dID0gKGJhc2UtPlBDUltwaW5dICYgflBPUlRfUENSX0lSUUNfTUFTSykgfCBQT1JUX1BDUl9JUlFDKGNvbmZpZyk7Cit9CisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSB3aG9sZSBwb3J0IHN0YXR1cyBmbGFnLgorICoKKyAqIElmIGEgcGluIGlzIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgdGhlIERNQSByZXF1ZXN0LCAgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworICogaXMgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBjb21wbGV0aW9uIG9mIHRoZSByZXF1ZXN0ZWQgRE1BIHRyYW5zZmVyLgorICogT3RoZXJ3aXNlLCB0aGUgZmxhZyByZW1haW5zIHNldCB1bnRpbCBhIGxvZ2ljIG9uZSBpcyB3cml0dGVuIHRvIHRoYXQgZmxhZy4KKyAqIElmIGNvbmZpZ3VyZWQgZm9yIGEgbGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdCB0aGF0IHJlbWFpbnMgYXNzZXJ0ZWQsIHRoZSBmbGFnCisgKiBpcyBzZXQgYWdhaW4gaW1tZWRpYXRlbHkuCisgKgorICogQHBhcmFtIGJhc2UgUE9SVCBwZXJpcGhlcmFsIGJhc2UgcG9pbnRlci4KKyAqIEByZXR1cm4gQ3VycmVudCBwb3J0IGludGVycnVwdCBzdGF0dXMgZmxhZ3MsIGZvciBleGFtcGxlLCAweDAwMDEwMDAxIG1lYW5zIHRoZQorICogICAgICAgICBwaW4gMCBhbmQgMTYgaGF2ZSB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFBPUlRfR2V0UGluc0ludGVycnVwdEZsYWdzKFBPUlRfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gYmFzZS0+SVNGUjsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBtdWx0aXBsZSBwaW4gaW50ZXJydXB0IHN0YXR1cyBmbGFnLgorICoKKyAqIEBwYXJhbSBiYXNlIFBPUlQgcGVyaXBoZXJhbCBiYXNlIHBvaW50ZXIuCisgKiBAcGFyYW0gbWFzayBQT1JUIHBpbiBudW1iZXIgbWFjcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBQT1JUX0NsZWFyUGluc0ludGVycnVwdEZsYWdzKFBPUlRfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICBiYXNlLT5JU0ZSID0gbWFzazsKK30KKworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1BPUlRfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3JjbS5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcmNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3Mzg2NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3JjbS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3JjbS5oIgorCit2b2lkIFJDTV9Db25maWd1cmVSZXNldFBpbkZpbHRlcihSQ01fVHlwZSAqYmFzZSwgY29uc3QgcmNtX3Jlc2V0X3Bpbl9maWx0ZXJfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnKTsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEgpICYmIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSkKKyAgICB1aW50MzJfdCByZWc7CisKKyAgICByZWcgPSAoKCh1aW50MzJfdCljb25maWctPmVuYWJsZUZpbHRlckluU3RvcCA8PCBSQ01fUlBDX1JTVEZMVFNTX1NISUZUKSB8ICh1aW50MzJfdCljb25maWctPmZpbHRlckluUnVuV2FpdCk7CisgICAgaWYgKGNvbmZpZy0+ZmlsdGVySW5SdW5XYWl0ID09IGtSQ01fRmlsdGVyQnVzQ2xvY2spCisgICAgeworICAgICAgICByZWcgfD0gKCh1aW50MzJfdCljb25maWctPmJ1c0Nsb2NrRmlsdGVyQ291bnQgPDwgUkNNX1JQQ19SU1RGTFRTRUxfU0hJRlQpOworICAgIH0KKyAgICBiYXNlLT5SUEMgPSByZWc7CisjZWxzZQorICAgIGJhc2UtPlJQRkMgPSAoKHVpbnQ4X3QpKGNvbmZpZy0+ZW5hYmxlRmlsdGVySW5TdG9wIDw8IFJDTV9SUEZDX1JTVEZMVFNTX1NISUZUKSB8ICh1aW50OF90KWNvbmZpZy0+ZmlsdGVySW5SdW5XYWl0KTsKKyAgICBpZiAoY29uZmlnLT5maWx0ZXJJblJ1bldhaXQgPT0ga1JDTV9GaWx0ZXJCdXNDbG9jaykKKyAgICB7CisgICAgICAgIGJhc2UtPlJQRlcgPSBjb25maWctPmJ1c0Nsb2NrRmlsdGVyQ291bnQ7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEggKi8KK30KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19CT09UUk9NKQordm9pZCBSQ01fU2V0Rm9yY2VCb290Um9tU291cmNlKFJDTV9UeXBlICpiYXNlLCByY21fYm9vdF9yb21fY29uZmlnX3QgY29uZmlnKQoreworICAgIHVpbnQzMl90IHJlZzsKKworICAgIHJlZyA9IGJhc2UtPkZNOworICAgIHJlZyAmPSB+UkNNX0ZNX0ZPUkNFUk9NX01BU0s7CisgICAgcmVnIHw9ICgodWludDMyX3QpY29uZmlnIDw8IFJDTV9GTV9GT1JDRVJPTV9TSElGVCk7CisgICAgYmFzZS0+Rk0gPSByZWc7Cit9CisjZW5kaWYgLyogI2lmIEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcmNtLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9yY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI4NDNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfcmNtLmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX1JDTV9IXworI2RlZmluZSBfRlNMX1JDTV9IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEgQGFkZHRvZ3JvdXAgcmNtICovCisvKiEgQHsqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUkNNIGRyaXZlciB2ZXJzaW9uIDIuMC4xLiAqLworI2RlZmluZSBGU0xfUkNNX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMSkpCisvKkB9Ki8KKworLyohCisgKiBAYnJpZWYgU3lzdGVtIFJlc2V0IFNvdXJjZSBOYW1lIGRlZmluaXRpb25zCisgKi8KK3R5cGVkZWYgZW51bSBfcmNtX3Jlc2V0X3NvdXJjZQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEgpICYmIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSkKKy8qIFJDTSByZWdpc3RlciBiaXQgd2lkdGggaXMgMzIuICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19XQUtFVVApICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfV0FLRVVQKQorICAgIGtSQ01fU291cmNlV2FrZXVwID0gUkNNX1NSU19XQUtFVVBfTUFTSywgLyohPCBMb3ctbGVha2FnZSB3YWtldXAgcmVzZXQgKi8KKyNlbmRpZgorICAgIGtSQ01fU291cmNlTHZkID0gUkNNX1NSU19MVkRfTUFTSywgLyohPCBMb3ctdm9sdGFnZSBkZXRlY3QgcmVzZXQgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0xPQykgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0MpCisgICAga1JDTV9Tb3VyY2VMb2MgPSBSQ01fU1JTX0xPQ19NQVNLLCAvKiE8IExvc3Mgb2YgY2xvY2sgcmVzZXQgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9DICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0wpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9MKQorICAgIGtSQ01fU291cmNlTG9sID0gUkNNX1NSU19MT0xfTUFTSywgICAvKiE8IExvc3Mgb2YgbG9jayByZXNldCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0xPTCAqLworICAgIGtSQ01fU291cmNlV2RvZyA9IFJDTV9TUlNfV0RPR19NQVNLLCAvKiE8IFdhdGNoZG9nIHJlc2V0ICovCisgICAga1JDTV9Tb3VyY2VQaW4gPSBSQ01fU1JTX1BJTl9NQVNLLCAgIC8qITwgRXh0ZXJuYWwgcGluIHJlc2V0ICovCisgICAga1JDTV9Tb3VyY2VQb3IgPSBSQ01fU1JTX1BPUl9NQVNLLCAgIC8qITwgUG93ZXIgb24gcmVzZXQgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0pUQUcpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfSlRBRykKKyAgICBrUkNNX1NvdXJjZUp0YWcgPSBSQ01fU1JTX0pUQUdfTUFTSywgICAgIC8qITwgSlRBRyBnZW5lcmF0ZWQgcmVzZXQgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfSlRBRyAqLworICAgIGtSQ01fU291cmNlTG9ja3VwID0gUkNNX1NSU19MT0NLVVBfTUFTSywgLyohPCBDb3JlIGxvY2sgdXAgcmVzZXQgKi8KKyAgICBrUkNNX1NvdXJjZVN3ID0gUkNNX1NSU19TV19NQVNLLCAgICAgICAgIC8qITwgU29mdHdhcmUgcmVzZXQgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX01ETV9BUCkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19NRE1fQVApCisgICAga1JDTV9Tb3VyY2VNZG1hcCA9IFJDTV9TUlNfTURNX0FQX01BU0ssIC8qITwgTURNLUFQIHN5c3RlbSByZXNldCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX01ETV9BUCAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQT1JUKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0VaUE9SVCkKKyAgICBrUkNNX1NvdXJjZUV6cHQgPSBSQ01fU1JTX0VaUFRfTUFTSywgICAgICAgLyohPCBFelBvcnQgcmVzZXQgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBPUlQgKi8KKyAgICBrUkNNX1NvdXJjZVNhY2tlcnIgPSBSQ01fU1JTX1NBQ0tFUlJfTUFTSywgLyohPCBQYXJhbWV0ZXIgY291bGQgZ2V0IGFsbCByZXNldCBmbGFncyAqLworCisjZWxzZSAvKiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikgKi8KKy8qIFJDTSByZWdpc3RlciBiaXQgd2lkdGggaXMgOC4gKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX1dBS0VVUCkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19XQUtFVVApCisgICAga1JDTV9Tb3VyY2VXYWtldXAgPSBSQ01fU1JTMF9XQUtFVVBfTUFTSywgLyohPCBMb3ctbGVha2FnZSB3YWtldXAgcmVzZXQgKi8KKyNlbmRpZgorICAgIGtSQ01fU291cmNlTHZkID0gUkNNX1NSUzBfTFZEX01BU0ssIC8qITwgTG93LXZvbHRhZ2UgZGV0ZWN0IHJlc2V0ICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0MpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9DKQorICAgIGtSQ01fU291cmNlTG9jID0gUkNNX1NSUzBfTE9DX01BU0ssICAgLyohPCBMb3NzIG9mIGNsb2NrIHJlc2V0ICovCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0MgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0xPTCkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19MT0wpCisgICAga1JDTV9Tb3VyY2VMb2wgPSBSQ01fU1JTMF9MT0xfTUFTSywgICAvKiE8IExvc3Mgb2YgbG9jayByZXNldCAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfTE9MICovCisgICAga1JDTV9Tb3VyY2VXZG9nID0gUkNNX1NSUzBfV0RPR19NQVNLLCAvKiE8IFdhdGNoZG9nIHJlc2V0ICovCisgICAga1JDTV9Tb3VyY2VQaW4gPSBSQ01fU1JTMF9QSU5fTUFTSywgICAvKiE8IEV4dGVybmFsIHBpbiByZXNldCAqLworICAgIGtSQ01fU291cmNlUG9yID0gUkNNX1NSUzBfUE9SX01BU0ssIC8qITwgUG93ZXIgb24gcmVzZXQgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0pUQUcpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfSlRBRykKKyAgICBrUkNNX1NvdXJjZUp0YWcgPSBSQ01fU1JTMV9KVEFHX01BU0sgPDwgOFUsICAgICAvKiE8IEpUQUcgZ2VuZXJhdGVkIHJlc2V0ICovCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19KVEFHICovCisgICAga1JDTV9Tb3VyY2VMb2NrdXAgPSBSQ01fU1JTMV9MT0NLVVBfTUFTSyA8PCA4VSwgLyohPCBDb3JlIGxvY2sgdXAgcmVzZXQgKi8KKyAgICBrUkNNX1NvdXJjZVN3ID0gUkNNX1NSUzFfU1dfTUFTSyA8PCA4VSwgLyohPCBTb2Z0d2FyZSByZXNldCAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfTURNX0FQKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX01ETV9BUCkKKyAgICBrUkNNX1NvdXJjZU1kbWFwID0gUkNNX1NSUzFfTURNX0FQX01BU0sgPDwgOFUsICAgIC8qITwgTURNLUFQIHN5c3RlbSByZXNldCAqLworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfTURNX0FQICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBPUlQpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfRVpQT1JUKQorICAgIGtSQ01fU291cmNlRXpwdCA9IFJDTV9TUlMxX0VaUFRfTUFTSyA8PCA4VSwgICAgICAgLyohPCBFelBvcnQgcmVzZXQgKi8KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX0VaUE9SVCAqLworICAgIGtSQ01fU291cmNlU2Fja2VyciA9IFJDTV9TUlMxX1NBQ0tFUlJfTUFTSyA8PCA4VSwgLyohPCBQYXJhbWV0ZXIgY291bGQgZ2V0IGFsbCByZXNldCBmbGFncyAqLworI2VuZGlmIC8qIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSAqLworICAgIGtSQ01fU291cmNlQWxsID0gMHhmZmZmZmZmZlUsCit9IHJjbV9yZXNldF9zb3VyY2VfdDsKKworLyohCisgKiBAYnJpZWYgUmVzZXQgcGluIGZpbHRlciBzZWxlY3QgaW4gUnVuIGFuZCBXYWl0IG1vZGVzLgorICovCit0eXBlZGVmIGVudW0gX3JjbV9ydW5fd2FpdF9maWx0ZXJfbW9kZQoreworICAgIGtSQ01fRmlsdGVyRGlzYWJsZSA9IDBVLCAgLyohPCBBbGwgZmlsdGVyaW5nIGRpc2FibGVkICovCisgICAga1JDTV9GaWx0ZXJCdXNDbG9jayA9IDFVLCAvKiE8IEJ1cyBjbG9jayBmaWx0ZXIgZW5hYmxlZCAqLworICAgIGtSQ01fRmlsdGVyTHBvQ2xvY2sgPSAyVSAgLyohPCBMUE8gY2xvY2sgZmlsdGVyIGVuYWJsZWQgKi8KK30gcmNtX3J1bl93YWl0X2ZpbHRlcl9tb2RlX3Q7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00pICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSkKKy8qIQorICogQGJyaWVmIEJvb3QgZnJvbSBST00gY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIF9yY21fYm9vdF9yb21fY29uZmlnCit7CisgICAga1JDTV9Cb290Rmxhc2ggPSAwVSwgICAvKiE8IEJvb3QgZnJvbSBmbGFzaCAqLworICAgIGtSQ01fQm9vdFJvbUNmZzAgPSAxVSwgLyohPCBCb290IGZyb20gYm9vdCBST00gZHVlIHRvIEJPT1RDRkcwICovCisgICAga1JDTV9Cb290Um9tRm9wdCA9IDJVLCAvKiE8IEJvb3QgZnJvbSBib290IFJPTSBkdWUgdG8gRk9QVFs3XSAqLworICAgIGtSQ01fQm9vdFJvbUJvdGggPSAzVSAgLyohPCBCb290IGZyb20gYm9vdCBST00gZHVlIHRvIGJvdGggQk9PVENGRzAgYW5kIEZPUFRbN10gKi8KK30gcmNtX2Jvb3Rfcm9tX2NvbmZpZ190OworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19TUklFKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX1NSSUUpCisvKiEKKyAqIEBicmllZiBNYXhpbXVtIGRlbGF5IHRpbWUgZnJvbSBpbnRlcnJ1cHQgYXNzZXJ0cyB0byBzeXN0ZW0gcmVzZXQuCisgKi8KK3R5cGVkZWYgZW51bSBfcmNtX3Jlc2V0X2RlbGF5Cit7CisgICAga1JDTV9SZXNldERlbGF5OExwbyA9IDBVLCAgIC8qITwgRGVsYXkgOCBMUE8gY3ljbGVzLiAgICovCisgICAga1JDTV9SZXNldERlbGF5MzJMcG8gPSAxVSwgIC8qITwgRGVsYXkgMzIgTFBPIGN5Y2xlcy4gICovCisgICAga1JDTV9SZXNldERlbGF5MTI4THBvID0gMlUsIC8qITwgRGVsYXkgMTI4IExQTyBjeWNsZXMuICovCisgICAga1JDTV9SZXNldERlbGF5NTEyTHBvID0gM1UgIC8qITwgRGVsYXkgNTEyIExQTyBjeWNsZXMuICovCit9IHJjbV9yZXNldF9kZWxheV90OworCisvKiEKKyAqIEBicmllZiBTeXN0ZW0gcmVzZXQgaW50ZXJydXB0IGVuYWJsZSBiaXQgZGVmaW5pdGlvbnMuCisgKi8KK3R5cGVkZWYgZW51bSBfcmNtX2ludGVycnVwdF9lbmFibGUKK3sKKyAgICBrUkNNX0ludE5vbmUgPSAwVSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5vIGludGVycnVwdCBlbmFibGVkLiAgICAgICAgICAgKi8KKyAgICBrUkNNX0ludExvc3NPZkNsayA9IFJDTV9TUklFX0xPQ19NQVNLLCAgICAgICAgICAvKiE8IExvc3Mgb2YgY2xvY2sgaW50ZXJydXB0LiAgICAgICAgKi8KKyAgICBrUkNNX0ludExvc3NPZkxvY2sgPSBSQ01fU1JJRV9MT0xfTUFTSywgICAgICAgICAvKiE8IExvc3Mgb2YgbG9jayBpbnRlcnJ1cHQuICAgICAgICAgKi8KKyAgICBrUkNNX0ludFdhdGNoRG9nID0gUkNNX1NSSUVfV0RPR19NQVNLLCAgICAgICAgICAvKiE8IFdhdGNoIGRvZyBpbnRlcnJ1cHQuICAgICAgICAgICAgKi8KKyAgICBrUkNNX0ludEV4dGVybmFsUGluID0gUkNNX1NSSUVfUElOX01BU0ssICAgICAgICAvKiE8IEV4dGVybmFsIHBpbiBpbnRlcnJ1cHQuICAgICAgICAgKi8KKyAgICBrUkNNX0ludEdsb2JhbCA9IFJDTV9TUklFX0dJRV9NQVNLLCAgICAgICAgICAgICAvKiE8IEdsb2JhbCBpbnRlcnJ1cHRzLiAgICAgICAgICAgICAgKi8KKyAgICBrUkNNX0ludENvcmVMb2NrdXAgPSBSQ01fU1JJRV9MT0NLVVBfTUFTSywgICAgICAvKiE8IENvcmUgbG9jayB1cCBpbnRlcnJ1cHQgICAgICAgICAgICovCisgICAga1JDTV9JbnRTb2Z0d2FyZSA9IFJDTV9TUklFX1NXX01BU0ssICAgICAgICAgICAgLyohPCBzb2Z0d2FyZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICovCisgICAga1JDTV9JbnRTdG9wTW9kZUFja0VyciA9IFJDTV9TUklFX1NBQ0tFUlJfTUFTSywgLyohPCBTdG9wIG1vZGUgQUNLIGVycm9yIGludGVycnVwdC4gICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19DT1JFMSkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19DT1JFMSkKKyAgICBrUkNNX0ludENvcmUxID0gUkNNX1NSSUVfQ09SRTFfTUFTSywgLyohPCBDb3JlIDEgaW50ZXJydXB0LiAgICAgICAgICAgICAgICovCisjZW5kaWYKKyAgICBrUkNNX0ludEFsbCA9IFJDTV9TUklFX0xPQ19NQVNLIC8qITwgRW5hYmxlIGFsbCBpbnRlcnJ1cHRzLiAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgUkNNX1NSSUVfTE9MX01BU0sgfCBSQ01fU1JJRV9XRE9HX01BU0sgfCBSQ01fU1JJRV9QSU5fTUFTSyB8IFJDTV9TUklFX0dJRV9NQVNLIHwKKyAgICAgICAgICAgICAgICAgIFJDTV9TUklFX0xPQ0tVUF9NQVNLIHwgUkNNX1NSSUVfU1dfTUFTSyB8IFJDTV9TUklFX1NBQ0tFUlJfTUFTSworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfQ09SRTEpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfQ09SRTEpCisgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICBSQ01fU1JJRV9DT1JFMV9NQVNLCisjZW5kaWYKK30gcmNtX2ludGVycnVwdF9lbmFibGVfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX1NSSUUgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfVkVSSUQpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfVkVSSUQpCisvKiEKKyAqIEBicmllZiBJUCB2ZXJzaW9uIElEIGRlZmluaXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9yY21fdmVyc2lvbl9pZAoreworICAgIHVpbnQxNl90IGZlYXR1cmU7IC8qITwgRmVhdHVyZSBTcGVjaWZpY2F0aW9uIE51bWJlci4gKi8KKyAgICB1aW50OF90IG1pbm9yOyAgICAvKiE8IE1pbm9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICovCisgICAgdWludDhfdCBtYWpvcjsgICAgLyohPCBNYWpvciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAqLworfSByY21fdmVyc2lvbl9pZF90OworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIFJlc2V0IHBpbiBmaWx0ZXIgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3JjbV9yZXNldF9waW5fZmlsdGVyX2NvbmZpZworeworICAgIGJvb2wgZW5hYmxlRmlsdGVySW5TdG9wOyAgICAgICAgICAgICAgICAgICAgLyohPCBSZXNldCBwaW4gZmlsdGVyIHNlbGVjdCBpbiBzdG9wIG1vZGUuICovCisgICAgcmNtX3J1bl93YWl0X2ZpbHRlcl9tb2RlX3QgZmlsdGVySW5SdW5XYWl0OyAvKiE8IFJlc2V0IHBpbiBmaWx0ZXIgaW4gcnVuL3dhaXQgbW9kZS4gKi8KKyAgICB1aW50OF90IGJ1c0Nsb2NrRmlsdGVyQ291bnQ7ICAgICAgICAgICAgICAgIC8qITwgUmVzZXQgcGluIGJ1cyBjbG9jayBmaWx0ZXIgd2lkdGguICAqLworfSByY21fcmVzZXRfcGluX2ZpbHRlcl9jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMqLworCisvKiEgQG5hbWUgUmVzZXQgQ29udHJvbCBNb2R1bGUgQVBJcyovCisvKkB7Ki8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9IQVNfVkVSSUQpICYmIEZTTF9GRUFUVVJFX1JDTV9IQVNfVkVSSUQpCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBSQ00gdmVyc2lvbiBJRC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFJDTSB2ZXJzaW9uIElEIGluY2x1ZGluZyB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIsCisgKiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIsIGFuZCB0aGUgZmVhdHVyZSBzcGVjaWZpY2F0aW9uIG51bWJlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBSQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gdmVyc2lvbklkICAgICBQb2ludGVyIHRvIHRoZSB2ZXJzaW9uIElEIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJDTV9HZXRWZXJzaW9uSWQoUkNNX1R5cGUgKmJhc2UsIHJjbV92ZXJzaW9uX2lkX3QgKnZlcnNpb25JZCkKK3sKKyAgICAqKCh1aW50MzJfdCAqKXZlcnNpb25JZCkgPSBiYXNlLT5WRVJJRDsKK30KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19QQVJBTSkgJiYgRlNMX0ZFQVRVUkVfUkNNX0hBU19QQVJBTSkKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHJlc2V0IHNvdXJjZSBpbXBsZW1lbnRlZCBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBSQ00gcGFyYW1ldGVyIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgcmVzZXQgc291cmNlIGlzIGltcGxlbWVudGVkLgorICogVXNlIHNvdXJjZSBtYXNrcyBkZWZpbmVkIGluIHRoZSByY21fcmVzZXRfc291cmNlX3QgdG8gZ2V0IHRoZSBkZXNpcmVkIHNvdXJjZSBzdGF0dXMuCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICAgQGNvZGUKKyAgIHVpbnQzMl90IHN0YXR1czsKKworICAgLy8gVG8gdGVzdCB3aGV0aGVyIHRoZSBNQ1UgaXMgcmVzZXQgdXNpbmcgV2F0Y2hkb2cuCisgICBzdGF0dXMgPSBSQ01fR2V0UmVzZXRTb3VyY2VJbXBsZW1lbnRlZFN0YXR1cyhSQ00pICYgKGtSQ01fU291cmNlV2RvZyB8IGtSQ01fU291cmNlUGluKTsKKyAgIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBBbGwgcmVzZXQgc291cmNlIGltcGxlbWVudGVkIHN0YXR1cyBiaXQgbWFwLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJDTV9HZXRSZXNldFNvdXJjZUltcGxlbWVudGVkU3RhdHVzKFJDTV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiBiYXNlLT5QQVJBTTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SQ01fSEFTX1BBUkFNICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIHJlc2V0IHNvdXJjZSBzdGF0dXMgd2hpY2ggY2F1c2VkIGEgcHJldmlvdXMgcmVzZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IHJlc2V0IHNvdXJjZSBzdGF0dXMuIFVzZSBzb3VyY2UgbWFza3MKKyAqIGRlZmluZWQgaW4gdGhlIHJjbV9yZXNldF9zb3VyY2VfdCB0byBnZXQgdGhlIGRlc2lyZWQgc291cmNlIHN0YXR1cy4KKyAqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUuCisgICBAY29kZQorICAgdWludDMyX3QgcmVzZXRTdGF0dXM7CisKKyAgIC8vIFRvIGdldCBhbGwgcmVzZXQgc291cmNlIHN0YXR1c2VzLgorICAgcmVzZXRTdGF0dXMgPSBSQ01fR2V0UHJldmlvdXNSZXNldFNvdXJjZXMoUkNNKSAmIGtSQ01fU291cmNlQWxsOworCisgICAvLyBUbyB0ZXN0IHdoZXRoZXIgdGhlIE1DVSBpcyByZXNldCB1c2luZyBXYXRjaGRvZy4KKyAgIHJlc2V0U3RhdHVzID0gUkNNX0dldFByZXZpb3VzUmVzZXRTb3VyY2VzKFJDTSkgJiBrUkNNX1NvdXJjZVdkb2c7CisKKyAgIC8vIFRvIHRlc3QgbXVsdGlwbGUgcmVzZXQgc291cmNlcy4KKyAgIHJlc2V0U3RhdHVzID0gUkNNX0dldFByZXZpb3VzUmVzZXRTb3VyY2VzKFJDTSkgJiAoa1JDTV9Tb3VyY2VXZG9nIHwga1JDTV9Tb3VyY2VQaW4pOworICAgQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gYmFzZSBSQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIEFsbCByZXNldCBzb3VyY2Ugc3RhdHVzIGJpdCBtYXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUkNNX0dldFByZXZpb3VzUmVzZXRTb3VyY2VzKFJDTV9UeXBlICpiYXNlKQoreworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEgpICYmIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSkKKyAgICByZXR1cm4gYmFzZS0+U1JTOworI2Vsc2UKKyAgICByZXR1cm4gKHVpbnQzMl90KSgodWludDMyX3QpYmFzZS0+U1JTMCB8ICgodWludDMyX3QpYmFzZS0+U1JTMSA8PCA4VSkpOworI2VuZGlmIC8qIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSAqLworfQorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19TU1JTKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX1NTUlMpCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBzdGlja3kgcmVzZXQgc291cmNlIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnQgcmVzZXQgc291cmNlIHN0YXR1cyB0aGF0IGhhcyBub3QgYmVlbiBjbGVhcmVkCisgKiBieSBzb2Z0d2FyZSBmb3IgYSBzcGVjaWZpYyBzb3VyY2UuCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICAgQGNvZGUKKyAgIHVpbnQzMl90IHJlc2V0U3RhdHVzOworCisgICAvLyBUbyBnZXQgYWxsIHJlc2V0IHNvdXJjZSBzdGF0dXNlcy4KKyAgIHJlc2V0U3RhdHVzID0gUkNNX0dldFN0aWNreVJlc2V0U291cmNlcyhSQ00pICYga1JDTV9Tb3VyY2VBbGw7CisKKyAgIC8vIFRvIHRlc3Qgd2hldGhlciB0aGUgTUNVIGlzIHJlc2V0IHVzaW5nIFdhdGNoZG9nLgorICAgcmVzZXRTdGF0dXMgPSBSQ01fR2V0U3RpY2t5UmVzZXRTb3VyY2VzKFJDTSkgJiBrUkNNX1NvdXJjZVdkb2c7CisKKyAgIC8vIFRvIHRlc3QgbXVsdGlwbGUgcmVzZXQgc291cmNlcy4KKyAgIHJlc2V0U3RhdHVzID0gUkNNX0dldFN0aWNreVJlc2V0U291cmNlcyhSQ00pICYgKGtSQ01fU291cmNlV2RvZyB8IGtSQ01fU291cmNlUGluKTsKKyAgIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBBbGwgcmVzZXQgc291cmNlIHN0YXR1cyBiaXQgbWFwLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJDTV9HZXRTdGlja3lSZXNldFNvdXJjZXMoUkNNX1R5cGUgKmJhc2UpCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCkgJiYgKEZTTF9GRUFUVVJFX1JDTV9SRUdfV0lEVEggPT0gMzIpKQorICAgIHJldHVybiBiYXNlLT5TU1JTOworI2Vsc2UKKyAgICByZXR1cm4gKGJhc2UtPlNTUlMwIHwgKCh1aW50MzJfdCliYXNlLT5TU1JTMSA8PCA4VSkpOworI2VuZGlmIC8qIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSAqLworfQorCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIHN0aWNreSByZXNldCBzb3VyY2Ugc3RhdHVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBzdGlja3kgc3lzdGVtIHJlc2V0IGZsYWdzIGluZGljYXRlZCBieSBzb3VyY2UgbWFza3MuCisgKgorICogVGhpcyBpcyBhbiBleGFtcGxlLgorICAgQGNvZGUKKyAgIC8vIENsZWFycyBtdWx0aXBsZSByZXNldCBzb3VyY2VzLgorICAgUkNNX0NsZWFyU3RpY2t5UmVzZXRTb3VyY2VzKGtSQ01fU291cmNlV2RvZyB8IGtSQ01fU291cmNlUGluKTsKKyAgIEBlbmRjb2RlCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIHNvdXJjZU1hc2tzIHJlc2V0IHNvdXJjZSBzdGF0dXMgYml0IG1hcAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUkNNX0NsZWFyU3RpY2t5UmVzZXRTb3VyY2VzKFJDTV9UeXBlICpiYXNlLCB1aW50MzJfdCBzb3VyY2VNYXNrcykKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIKSAmJiAoRlNMX0ZFQVRVUkVfUkNNX1JFR19XSURUSCA9PSAzMikpCisgICAgYmFzZS0+U1NSUyA9IHNvdXJjZU1hc2tzOworI2Vsc2UKKyAgICBiYXNlLT5TU1JTMCA9IChzb3VyY2VNYXNrcyAmIDB4ZmZVKTsKKyAgICBiYXNlLT5TU1JTMSA9ICgoc291cmNlTWFza3MgPj4gOFUpICYgMHhmZlUpOworI2VuZGlmIC8qIChGU0xfRkVBVFVSRV9SQ01fUkVHX1dJRFRIID09IDMyKSAqLworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfU1NSUyAqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSByZXNldCBwaW4gZmlsdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmVzZXQgcGluIGZpbHRlciBpbmNsdWRpbmcgdGhlIGZpbHRlciBzb3VyY2UsIGZpbHRlcgorICogd2lkdGgsIGFuZCBzbyBvbi4KKyAqCisgKiBAcGFyYW0gYmFzZSBSQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIFJDTV9Db25maWd1cmVSZXNldFBpbkZpbHRlcihSQ01fVHlwZSAqYmFzZSwgY29uc3QgcmNtX3Jlc2V0X3Bpbl9maWx0ZXJfY29uZmlnX3QgKmNvbmZpZyk7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9SQ01fSEFTX0VaUE1TKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0VaUE1TKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgRVpQX01TX0IgcGluIGFzc2VydCBzdGF0dXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBlYXN5IHBvcnQgbW9kZSBzdGF0dXMgKEVaUF9NU19CKSBwaW4gYXNzZXJ0IHN0YXR1cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIHN0YXR1cyAgdHJ1ZSAtIGFzc2VydGVkLCBmYWxzZSAtIHJlYXNzZXJ0ZWQKKyAqLworc3RhdGljIGlubGluZSBib29sIFJDTV9HZXRFYXN5UG9ydE1vZGVQaW5TdGF0dXMoUkNNX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChib29sKShiYXNlLT5NUiAmIFJDTV9NUl9FWlBfTVNfTUFTSyk7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfUkNNX0hBU19FWlBNUyAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19CT09UUk9NKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX0JPT1RST00pCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBST00gYm9vdCBzb3VyY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBST00gYm9vdCBzb3VyY2UgZHVyaW5nIHRoZSBsYXN0IGNoaXAgcmVzZXQuCisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBUaGUgUk9NIGJvb3Qgc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIHJjbV9ib290X3JvbV9jb25maWdfdCBSQ01fR2V0Qm9vdFJvbVNvdXJjZShSQ01fVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHJjbV9ib290X3JvbV9jb25maWdfdCkoKGJhc2UtPk1SICYgUkNNX01SX0JPT1RST01fTUFTSykgPj4gUkNNX01SX0JPT1RST01fU0hJRlQpOworfQorCisvKiEKKyAqIEBicmllZiBDbGVhcnMgdGhlIFJPTSBib290IHNvdXJjZSBmbGFnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBST00gYm9vdCBzb3VyY2UgZmxhZy4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgUmVnaXN0ZXIgYmFzZSBhZGRyZXNzIG9mIFJDTQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUkNNX0NsZWFyQm9vdFJvbVNvdXJjZShSQ01fVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5NUiB8PSBSQ01fTVJfQk9PVFJPTV9NQVNLOworfQorCisvKiEKKyAqIEBicmllZiBGb3JjZXMgdGhlIGJvb3QgZnJvbSBST00uCisgKgorICogVGhpcyBmdW5jdGlvbiBmb3JjZXMgYm9vdGluZyBmcm9tIFJPTSBkdXJpbmcgYWxsIHN1YnNlcXVlbnQgc3lzdGVtIHJlc2V0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSQ00gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gY29uZmlnICAgQm9vdCBjb25maWd1cmF0aW9uLgorICovCit2b2lkIFJDTV9TZXRGb3JjZUJvb3RSb21Tb3VyY2UoUkNNX1R5cGUgKmJhc2UsIHJjbV9ib290X3JvbV9jb25maWdfdCBjb25maWcpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfQk9PVFJPTSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUkNNX0hBU19TUklFKSAmJiBGU0xfRkVBVFVSRV9SQ01fSEFTX1NSSUUpCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBzeXN0ZW0gcmVzZXQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uCisgKgorICogRm9yIGEgZ3JhY2VmdWwgc2h1dCBkb3duLCB0aGUgUkNNIHN1cHBvcnRzIGRlbGF5aW5nIHRoZSBhc3NlcnRpb24gb2YgdGhlIHN5c3RlbQorICogcmVzZXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgd2hlbiB0aGUgcmVzZXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVGhpcyBmdW5jdGlvbgorICogY2FuIGJlIHVzZWQgdG8gZW5hYmxlIHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSBkZWxheSBwZXJpb2QuIFRoZSBpbnRlcnJ1cHRzCisgKiBhcmUgcGFzc2VkIGluIGFzIGJpdCBtYXNrLiBTZWUgcmNtX2ludF90IGZvciBkZXRhaWxzLiBGb3IgZXhhbXBsZSwgdG8KKyAqIGRlbGF5IGEgcmVzZXQgZm9yIDUxMiBMUE8gY3ljbGVzIGFmdGVyIHRoZSBXRE9HIHRpbWVvdXQgb3IgbG9zcy1vZi1jbG9jayBvY2N1cnMsCisgKiBjb25maWd1cmUgYXMgZm9sbG93czoKKyAqIFJDTV9TZXRTeXN0ZW1SZXNldEludGVycnVwdENvbmZpZyhrUkNNX0ludFdhdGNoRG9nIHwga1JDTV9JbnRMb3NzT2ZDbGssIGtSQ01fUmVzZXREZWxheTUxMkxwbyk7CisgKgorICogQHBhcmFtIGJhc2UgUkNNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGludE1hc2sgICBCaXQgbWFzayBvZiB0aGUgc3lzdGVtIHJlc2V0IGludGVycnVwdHMgdG8gZW5hYmxlLiBTZWUKKyAqICAgICAgICAgICAgICAgICAgcmNtX2ludGVycnVwdF9lbmFibGVfdCBmb3IgZGV0YWlscy4KKyAqIEBwYXJhbSBEZWxheSAgICAgQml0IG1hc2sgb2YgdGhlIHN5c3RlbSByZXNldCBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJDTV9TZXRTeXN0ZW1SZXNldEludGVycnVwdENvbmZpZyhSQ01fVHlwZSAqYmFzZSwgdWludDMyX3QgaW50TWFzaywgcmNtX3Jlc2V0X2RlbGF5X3QgZGVsYXkpCit7CisgICAgYmFzZS0+U1JJRSA9IChpbnRNYXNrIHwgZGVsYXkpOworfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JDTV9IQVNfU1JJRSAqLworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzKi8KKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfUkNNX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ydGMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ODA1NWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ydGMuYwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfcnRjLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU0VDT05EU19JTl9BX0RBWSAoODY0MDBVKQorI2RlZmluZSBTRUNPTkRTX0lOX0FfSE9VUiAoMzYwMFUpCisjZGVmaW5lIFNFQ09ORFNfSU5fQV9NSU5VVEUgKDYwVSkKKyNkZWZpbmUgREFZU19JTl9BX1lFQVIgKDM2NVUpCisjZGVmaW5lIFlFQVJfUkFOR0VfU1RBUlQgKDE5NzBVKQorI2RlZmluZSBZRUFSX1JBTkdFX0VORCAoMjA5OVUpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyohCisgKiBAYnJpZWYgQ2hlY2tzIHdoZXRoZXIgdGhlIGRhdGUgYW5kIHRpbWUgcGFzc2VkIGluIGlzIHZhbGlkCisgKgorICogQHBhcmFtIGRhdGV0aW1lIFBvaW50ZXIgdG8gc3RydWN0dXJlIHdoZXJlIHRoZSBkYXRlIGFuZCB0aW1lIGRldGFpbHMgYXJlIHN0b3JlZAorICoKKyAqIEByZXR1cm4gUmV0dXJucyBmYWxzZSBpZiB0aGUgZGF0ZSAmIHRpbWUgZGV0YWlscyBhcmUgb3V0IG9mIHJhbmdlOyB0cnVlIGlmIGluIHJhbmdlCisgKi8KK3N0YXRpYyBib29sIFJUQ19DaGVja0RhdGV0aW1lRm9ybWF0KGNvbnN0IHJ0Y19kYXRldGltZV90ICpkYXRldGltZSk7CisKKy8qIQorICogQGJyaWVmIENvbnZlcnRzIHRpbWUgZGF0YSBmcm9tIGRhdGV0aW1lIHRvIHNlY29uZHMKKyAqCisgKiBAcGFyYW0gZGF0ZXRpbWUgUG9pbnRlciB0byBkYXRldGltZSBzdHJ1Y3R1cmUgd2hlcmUgdGhlIGRhdGUgYW5kIHRpbWUgZGV0YWlscyBhcmUgc3RvcmVkCisgKgorICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIGluIHNlY29uZHMKKyAqLworc3RhdGljIHVpbnQzMl90IFJUQ19Db252ZXJ0RGF0ZXRpbWVUb1NlY29uZHMoY29uc3QgcnRjX2RhdGV0aW1lX3QgKmRhdGV0aW1lKTsKKworLyohCisgKiBAYnJpZWYgQ29udmVydHMgdGltZSBkYXRhIGZyb20gc2Vjb25kcyB0byBhIGRhdGV0aW1lIHN0cnVjdHVyZQorICoKKyAqIEBwYXJhbSBzZWNvbmRzICBTZWNvbmRzIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGRhdGV0aW1lIGZvcm1hdAorICogQHBhcmFtIGRhdGV0aW1lIFBvaW50ZXIgdG8gdGhlIGRhdGV0aW1lIHN0cnVjdHVyZSB3aGVyZSB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIGlzIHN0b3JlZAorICovCitzdGF0aWMgdm9pZCBSVENfQ29udmVydFNlY29uZHNUb0RhdGV0aW1lKHVpbnQzMl90IHNlY29uZHMsIHJ0Y19kYXRldGltZV90ICpkYXRldGltZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGJvb2wgUlRDX0NoZWNrRGF0ZXRpbWVGb3JtYXQoY29uc3QgcnRjX2RhdGV0aW1lX3QgKmRhdGV0aW1lKQoreworICAgIGFzc2VydChkYXRldGltZSk7CisKKyAgICAvKiBUYWJsZSBvZiBkYXlzIGluIGEgbW9udGggZm9yIGEgbm9uIGxlYXAgeWVhci4gRmlyc3QgZW50cnkgaW4gdGhlIHRhYmxlIGlzIG5vdCB1c2VkLAorICAgICAqIHZhbGlkIG1vbnRocyBzdGFydCBmcm9tIDEKKyAgICAgKi8KKyAgICB1aW50OF90IGRheXNQZXJNb250aFtdID0gezBVLCAzMVUsIDI4VSwgMzFVLCAzMFUsIDMxVSwgMzBVLCAzMVUsIDMxVSwgMzBVLCAzMVUsIDMwVSwgMzFVfTsKKworICAgIC8qIENoZWNrIHllYXIsIG1vbnRoLCBob3VyLCBtaW51dGUsIHNlY29uZHMgKi8KKyAgICBpZiAoKGRhdGV0aW1lLT55ZWFyIDwgWUVBUl9SQU5HRV9TVEFSVCkgfHwgKGRhdGV0aW1lLT55ZWFyID4gWUVBUl9SQU5HRV9FTkQpIHx8IChkYXRldGltZS0+bW9udGggPiAxMlUpIHx8CisgICAgICAgIChkYXRldGltZS0+bW9udGggPCAxVSkgfHwgKGRhdGV0aW1lLT5ob3VyID49IDI0VSkgfHwgKGRhdGV0aW1lLT5taW51dGUgPj0gNjBVKSB8fCAoZGF0ZXRpbWUtPnNlY29uZCA+PSA2MFUpKQorICAgIHsKKyAgICAgICAgLyogSWYgbm90IGNvcnJlY3QgdGhlbiBlcnJvciovCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiBBZGp1c3QgdGhlIGRheXMgaW4gRmVicnVhcnkgZm9yIGEgbGVhcCB5ZWFyICovCisgICAgaWYgKCgoKGRhdGV0aW1lLT55ZWFyICYgM1UpID09IDApICYmIChkYXRldGltZS0+eWVhciAlIDEwMCAhPSAwKSkgfHwgKGRhdGV0aW1lLT55ZWFyICUgNDAwID09IDApKQorICAgIHsKKyAgICAgICAgZGF5c1Blck1vbnRoWzJdID0gMjlVOworICAgIH0KKworICAgIC8qIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGF5ICovCisgICAgaWYgKChkYXRldGltZS0+ZGF5ID4gZGF5c1Blck1vbnRoW2RhdGV0aW1lLT5tb250aF0pIHx8IChkYXRldGltZS0+ZGF5IDwgMVUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdWludDMyX3QgUlRDX0NvbnZlcnREYXRldGltZVRvU2Vjb25kcyhjb25zdCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpCit7CisgICAgYXNzZXJ0KGRhdGV0aW1lKTsKKworICAgIC8qIE51bWJlciBvZiBkYXlzIGZyb20gYmVnaW4gb2YgdGhlIG5vbiBMZWFwLXllYXIqLworICAgIC8qIE51bWJlciBvZiBkYXlzIGZyb20gYmVnaW4gb2YgdGhlIG5vbiBMZWFwLXllYXIqLworICAgIHVpbnQxNl90IG1vbnRoRGF5c1tdID0gezBVLCAwVSwgMzFVLCA1OVUsIDkwVSwgMTIwVSwgMTUxVSwgMTgxVSwgMjEyVSwgMjQzVSwgMjczVSwgMzA0VSwgMzM0VX07CisgICAgdWludDMyX3Qgc2Vjb25kczsKKworICAgIC8qIENvbXB1dGUgbnVtYmVyIG9mIGRheXMgZnJvbSAxOTcwIHRpbGwgZ2l2ZW4geWVhciovCisgICAgc2Vjb25kcyA9IChkYXRldGltZS0+eWVhciAtIDE5NzBVKSAqIERBWVNfSU5fQV9ZRUFSOworICAgIC8qIEFkZCBsZWFwIHllYXIgZGF5cyAqLworICAgIHNlY29uZHMgKz0gKChkYXRldGltZS0+eWVhciAvIDQpIC0gKDE5NzBVIC8gNCkpOworICAgIC8qIEFkZCBudW1iZXIgb2YgZGF5cyB0aWxsIGdpdmVuIG1vbnRoKi8KKyAgICBzZWNvbmRzICs9IG1vbnRoRGF5c1tkYXRldGltZS0+bW9udGhdOworICAgIC8qIEFkZCBkYXlzIGluIGdpdmVuIG1vbnRoLiBXZSBzdWJ0cmFjdCB0aGUgY3VycmVudCBkYXkgYXMgaXQgaXMKKyAgICAgKiByZXByZXNlbnRlZCBpbiB0aGUgaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMgZmllbGQqLworICAgIHNlY29uZHMgKz0gKGRhdGV0aW1lLT5kYXkgLSAxKTsKKyAgICAvKiBGb3IgbGVhcCB5ZWFyIGlmIG1vbnRoIGxlc3MgdGhhbiBvciBlcXVhbCB0byBGZWJyYXVyeSwgZGVjcmVtZW50IGRheSBjb3VudGVyKi8KKyAgICBpZiAoKCEoZGF0ZXRpbWUtPnllYXIgJiAzVSkpICYmIChkYXRldGltZS0+bW9udGggPD0gMlUpKQorICAgIHsKKyAgICAgICAgc2Vjb25kcy0tOworICAgIH0KKworICAgIHNlY29uZHMgPSAoc2Vjb25kcyAqIFNFQ09ORFNfSU5fQV9EQVkpICsgKGRhdGV0aW1lLT5ob3VyICogU0VDT05EU19JTl9BX0hPVVIpICsKKyAgICAgICAgICAgICAgKGRhdGV0aW1lLT5taW51dGUgKiBTRUNPTkRTX0lOX0FfTUlOVVRFKSArIGRhdGV0aW1lLT5zZWNvbmQ7CisKKyAgICByZXR1cm4gc2Vjb25kczsKK30KKworc3RhdGljIHZvaWQgUlRDX0NvbnZlcnRTZWNvbmRzVG9EYXRldGltZSh1aW50MzJfdCBzZWNvbmRzLCBydGNfZGF0ZXRpbWVfdCAqZGF0ZXRpbWUpCit7CisgICAgYXNzZXJ0KGRhdGV0aW1lKTsKKworICAgIHVpbnQzMl90IHg7CisgICAgdWludDMyX3Qgc2Vjb25kc1JlbWFpbmluZywgZGF5czsKKyAgICB1aW50MTZfdCBkYXlzSW5ZZWFyOworICAgIC8qIFRhYmxlIG9mIGRheXMgaW4gYSBtb250aCBmb3IgYSBub24gbGVhcCB5ZWFyLiBGaXJzdCBlbnRyeSBpbiB0aGUgdGFibGUgaXMgbm90IHVzZWQsCisgICAgICogdmFsaWQgbW9udGhzIHN0YXJ0IGZyb20gMQorICAgICAqLworICAgIHVpbnQ4X3QgZGF5c1Blck1vbnRoW10gPSB7MFUsIDMxVSwgMjhVLCAzMVUsIDMwVSwgMzFVLCAzMFUsIDMxVSwgMzFVLCAzMFUsIDMxVSwgMzBVLCAzMVV9OworCisgICAgLyogU3RhcnQgd2l0aCB0aGUgc2Vjb25kcyB2YWx1ZSB0aGF0IGlzIHBhc3NlZCBpbiB0byBiZSBjb252ZXJ0ZWQgdG8gZGF0ZSB0aW1lIGZvcm1hdCAqLworICAgIHNlY29uZHNSZW1haW5pbmcgPSBzZWNvbmRzOworCisgICAgLyogQ2FsY3VhdGUgdGhlIG51bWJlciBvZiBkYXlzLCB3ZSBhZGQgMSBmb3IgdGhlIGN1cnJlbnQgZGF5IHdoaWNoIGlzIHJlcHJlc2VudGVkIGluIHRoZQorICAgICAqIGhvdXJzIGFuZCBzZWNvbmRzIGZpZWxkCisgICAgICovCisgICAgZGF5cyA9IHNlY29uZHNSZW1haW5pbmcgLyBTRUNPTkRTX0lOX0FfREFZICsgMTsKKworICAgIC8qIFVwZGF0ZSBzZWNvbmRzIGxlZnQqLworICAgIHNlY29uZHNSZW1haW5pbmcgPSBzZWNvbmRzUmVtYWluaW5nICUgU0VDT05EU19JTl9BX0RBWTsKKworICAgIC8qIENhbGN1bGF0ZSB0aGUgZGF0ZXRpbWUgaG91ciwgbWludXRlIGFuZCBzZWNvbmQgZmllbGRzICovCisgICAgZGF0ZXRpbWUtPmhvdXIgPSBzZWNvbmRzUmVtYWluaW5nIC8gU0VDT05EU19JTl9BX0hPVVI7CisgICAgc2Vjb25kc1JlbWFpbmluZyA9IHNlY29uZHNSZW1haW5pbmcgJSBTRUNPTkRTX0lOX0FfSE9VUjsKKyAgICBkYXRldGltZS0+bWludXRlID0gc2Vjb25kc1JlbWFpbmluZyAvIDYwVTsKKyAgICBkYXRldGltZS0+c2Vjb25kID0gc2Vjb25kc1JlbWFpbmluZyAlIFNFQ09ORFNfSU5fQV9NSU5VVEU7CisKKyAgICAvKiBDYWxjdWxhdGUgeWVhciAqLworICAgIGRheXNJblllYXIgPSBEQVlTX0lOX0FfWUVBUjsKKyAgICBkYXRldGltZS0+eWVhciA9IFlFQVJfUkFOR0VfU1RBUlQ7CisgICAgd2hpbGUgKGRheXMgPiBkYXlzSW5ZZWFyKQorICAgIHsKKyAgICAgICAgLyogRGVjcmVhc2UgZGF5IGNvdW50IGJ5IGEgeWVhciBhbmQgaW5jcmVtZW50IHllYXIgYnkgMSAqLworICAgICAgICBkYXlzIC09IGRheXNJblllYXI7CisgICAgICAgIGRhdGV0aW1lLT55ZWFyKys7CisKKyAgICAgICAgLyogQWRqdXN0IHRoZSBudW1iZXIgb2YgZGF5cyBmb3IgYSBsZWFwIHllYXIgKi8KKyAgICAgICAgaWYgKGRhdGV0aW1lLT55ZWFyICYgM1UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRheXNJblllYXIgPSBEQVlTX0lOX0FfWUVBUjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRheXNJblllYXIgPSBEQVlTX0lOX0FfWUVBUiArIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBZGp1c3QgdGhlIGRheXMgaW4gRmVicnVhcnkgZm9yIGEgbGVhcCB5ZWFyICovCisgICAgaWYgKCEoZGF0ZXRpbWUtPnllYXIgJiAzVSkpCisgICAgeworICAgICAgICBkYXlzUGVyTW9udGhbMl0gPSAyOVU7CisgICAgfQorCisgICAgZm9yICh4ID0gMVU7IHggPD0gMTJVOyB4KyspCisgICAgeworICAgICAgICBpZiAoZGF5cyA8PSBkYXlzUGVyTW9udGhbeF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGV0aW1lLT5tb250aCA9IHg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRheXMgLT0gZGF5c1Blck1vbnRoW3hdOworICAgICAgICB9CisgICAgfQorCisgICAgZGF0ZXRpbWUtPmRheSA9IGRheXM7Cit9CisKK3ZvaWQgUlRDX0luaXQoUlRDX1R5cGUgKmJhc2UsIGNvbnN0IHJ0Y19jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgdWludDMyX3QgcmVnOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIENMT0NLX0VuYWJsZUNsb2NrKGtDTE9DS19SdGMwKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKworICAgIC8qIElzc3VlIGEgc29mdHdhcmUgcmVzZXQgaWYgdGltZXIgaXMgaW52YWxpZCAqLworICAgIGlmIChSVENfR2V0U3RhdHVzRmxhZ3MoUlRDKSAmIGtSVENfVGltZUludmFsaWRGbGFnKQorICAgIHsKKyAgICAgICAgUlRDX1Jlc2V0KFJUQyk7CisgICAgfQorCisgICAgcmVnID0gYmFzZS0+Q1I7CisgICAgLyogU2V0dXAgdGhlIHVwZGF0ZSBtb2RlIGFuZCBzdXBlcnZpc29yIGFjY2VzcyBtb2RlICovCisgICAgcmVnICY9IH4oUlRDX0NSX1VNX01BU0sgfCBSVENfQ1JfU1VQX01BU0spOworICAgIHJlZyB8PSBSVENfQ1JfVU0oY29uZmlnLT51cGRhdGVNb2RlKSB8IFJUQ19DUl9TVVAoY29uZmlnLT5zdXBlcnZpc29yQWNjZXNzKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1JUQ19IQVNfV0FLRVVQX1BJTl9TRUxFQ1RJT04pICYmIEZTTF9GRUFUVVJFX1JUQ19IQVNfV0FLRVVQX1BJTl9TRUxFQ1RJT04KKyAgICAvKiBTZXR1cCB0aGUgd2FrZXVwIHBpbiBzZWxlY3QgKi8KKyAgICByZWcgJj0gfihSVENfQ1JfV1BTX01BU0spOworICAgIHJlZyB8PSBSVENfQ1JfV1BTKGNvbmZpZy0+d2FrZXVwU2VsZWN0KTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9SVENfSEFTX1dBS0VVUF9QSU4gKi8KKyAgICBiYXNlLT5DUiA9IHJlZzsKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgUlRDIHRpbWUgY29tcGVuc2F0aW9uIHJlZ2lzdGVyICovCisgICAgYmFzZS0+VENSID0gKFJUQ19UQ1JfQ0lSKGNvbmZpZy0+Y29tcGVuc2F0aW9uSW50ZXJ2YWwpIHwgUlRDX1RDUl9UQ1IoY29uZmlnLT5jb21wZW5zYXRpb25UaW1lKSk7Cit9CisKK3ZvaWQgUlRDX0dldERlZmF1bHRDb25maWcocnRjX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgYXNzZXJ0KGNvbmZpZyk7CisKKyAgICAvKiBXYWtldXAgcGluIHdpbGwgYXNzZXJ0IGlmIHRoZSBSVEMgaW50ZXJydXB0IGFzc2VydHMgb3IgaWYgdGhlIHdha2V1cCBwaW4gaXMgdHVybmVkIG9uICovCisgICAgY29uZmlnLT53YWtldXBTZWxlY3QgPSBmYWxzZTsKKyAgICAvKiBSZWdpc3RlcnMgY2Fubm90IGJlIHdyaXR0ZW4gd2hlbiBsb2NrZWQgKi8KKyAgICBjb25maWctPnVwZGF0ZU1vZGUgPSBmYWxzZTsKKyAgICAvKiBOb24tc3VwZXJ2aXNvciBtb2RlIHdyaXRlIGFjY2Vzc2VzIGFyZSBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGdlbmVyYXRlIGEgYnVzIGVycm9yICovCisgICAgY29uZmlnLT5zdXBlcnZpc29yQWNjZXNzID0gZmFsc2U7CisgICAgLyogQ29tcGVuc2F0aW9uIGludGVydmFsIHVzZWQgYnkgdGhlIGNyeXN0YWwgY29tcGVuc2F0aW9uIGxvZ2ljICovCisgICAgY29uZmlnLT5jb21wZW5zYXRpb25JbnRlcnZhbCA9IDA7CisgICAgLyogQ29tcGVuc2F0aW9uIHRpbWUgdXNlZCBieSB0aGUgY3J5c3RhbCBjb21wZW5zYXRpb24gbG9naWMgKi8KKyAgICBjb25maWctPmNvbXBlbnNhdGlvblRpbWUgPSAwOworfQorCitzdGF0dXNfdCBSVENfU2V0RGF0ZXRpbWUoUlRDX1R5cGUgKmJhc2UsIGNvbnN0IHJ0Y19kYXRldGltZV90ICpkYXRldGltZSkKK3sKKyAgICBhc3NlcnQoZGF0ZXRpbWUpOworCisgICAgLyogUmV0dXJuIGVycm9yIGlmIHRoZSB0aW1lIHByb3ZpZGVkIGlzIG5vdCB2YWxpZCAqLworICAgIGlmICghKFJUQ19DaGVja0RhdGV0aW1lRm9ybWF0KGRhdGV0aW1lKSkpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgLyogU2V0IHRpbWUgaW4gc2Vjb25kcyAqLworICAgIGJhc2UtPlRTUiA9IFJUQ19Db252ZXJ0RGF0ZXRpbWVUb1NlY29uZHMoZGF0ZXRpbWUpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKwordm9pZCBSVENfR2V0RGF0ZXRpbWUoUlRDX1R5cGUgKmJhc2UsIHJ0Y19kYXRldGltZV90ICpkYXRldGltZSkKK3sKKyAgICBhc3NlcnQoZGF0ZXRpbWUpOworCisgICAgdWludDMyX3Qgc2Vjb25kcyA9IDA7CisKKyAgICBzZWNvbmRzID0gYmFzZS0+VFNSOworICAgIFJUQ19Db252ZXJ0U2Vjb25kc1RvRGF0ZXRpbWUoc2Vjb25kcywgZGF0ZXRpbWUpOworfQorCitzdGF0dXNfdCBSVENfU2V0QWxhcm0oUlRDX1R5cGUgKmJhc2UsIGNvbnN0IHJ0Y19kYXRldGltZV90ICphbGFybVRpbWUpCit7CisgICAgYXNzZXJ0KGFsYXJtVGltZSk7CisKKyAgICB1aW50MzJfdCBhbGFybVNlY29uZHMgPSAwOworICAgIHVpbnQzMl90IGN1cnJTZWNvbmRzID0gMDsKKworICAgIC8qIFJldHVybiBlcnJvciBpZiB0aGUgYWxhcm0gdGltZSBwcm92aWRlZCBpcyBub3QgdmFsaWQgKi8KKyAgICBpZiAoIShSVENfQ2hlY2tEYXRldGltZUZvcm1hdChhbGFybVRpbWUpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICBhbGFybVNlY29uZHMgPSBSVENfQ29udmVydERhdGV0aW1lVG9TZWNvbmRzKGFsYXJtVGltZSk7CisKKyAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdGltZSAqLworICAgIGN1cnJTZWNvbmRzID0gYmFzZS0+VFNSOworCisgICAgLyogUmV0dXJuIGVycm9yIGlmIHRoZSBhbGFybSB0aW1lIGhhcyBwYXNzZWQgKi8KKyAgICBpZiAoYWxhcm1TZWNvbmRzIDwgY3VyclNlY29uZHMpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIC8qIFNldCBhbGFybSBpbiBzZWNvbmRzKi8KKyAgICBiYXNlLT5UQVIgPSBhbGFybVNlY29uZHM7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCit2b2lkIFJUQ19HZXRBbGFybShSVENfVHlwZSAqYmFzZSwgcnRjX2RhdGV0aW1lX3QgKmRhdGV0aW1lKQoreworICAgIGFzc2VydChkYXRldGltZSk7CisKKyAgICB1aW50MzJfdCBhbGFybVNlY29uZHMgPSAwOworCisgICAgLyogR2V0IGFsYXJtIGluIHNlY29uZHMgICovCisgICAgYWxhcm1TZWNvbmRzID0gYmFzZS0+VEFSOworCisgICAgUlRDX0NvbnZlcnRTZWNvbmRzVG9EYXRldGltZShhbGFybVNlY29uZHMsIGRhdGV0aW1lKTsKK30KKwordm9pZCBSVENfQ2xlYXJTdGF0dXNGbGFncyhSVENfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICAvKiBUaGUgYWxhcm0gZmxhZyBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgdG8gdGhlIFRBUiByZWdpc3RlciAqLworICAgIGlmIChtYXNrICYga1JUQ19BbGFybUZsYWcpCisgICAgeworICAgICAgICBiYXNlLT5UQVIgPSAwVTsKKyAgICB9CisKKyAgICAvKiBUaGUgdGltZXIgb3ZlcmZsb3cgZmxhZyBpcyBjbGVhcmVkIGJ5IGluaXRpYWxpemluZyB0aGUgVFNSIHJlZ2lzdGVyLgorICAgICAqIFRoZSB0aW1lIGNvdW50ZXIgc2hvdWxkIGJlIGRpc2FibGVkIGZvciB0aGlzIHdyaXRlIHRvIGJlIHN1Y2Nlc3NmdWwKKyAgICAgKi8KKyAgICBpZiAobWFzayAmIGtSVENfVGltZU92ZXJmbG93RmxhZykKKyAgICB7CisgICAgICAgIGJhc2UtPlRTUiA9IDFVOworICAgIH0KKworICAgIC8qIFRoZSB0aW1lciBvdmVyZmxvdyBmbGFnIGlzIGNsZWFyZWQgYnkgaW5pdGlhbGl6aW5nIHRoZSBUU1IgcmVnaXN0ZXIuCisgICAgICogVGhlIHRpbWUgY291bnRlciBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIHRoaXMgd3JpdGUgdG8gYmUgc3VjY2Vzc2Z1bAorICAgICAqLworICAgIGlmIChtYXNrICYga1JUQ19UaW1lSW52YWxpZEZsYWcpCisgICAgeworICAgICAgICBiYXNlLT5UU1IgPSAxVTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDKSAmJiAoRlNMX0ZFQVRVUkVfUlRDX0hBU19NT05PVE9OSUMpCisKK3ZvaWQgUlRDX0dldE1vbm90b25pY0NvdW50ZXIoUlRDX1R5cGUgKmJhc2UsIHVpbnQ2NF90ICpjb3VudGVyKQoreworICAgIGFzc2VydChjb3VudGVyKTsKKworICAgICpjb3VudGVyID0gKCgodWludDY0X3QpYmFzZS0+TUNIUiA8PCAzMikgfCAoKHVpbnQ2NF90KWJhc2UtPk1DTFIpKTsKK30KKwordm9pZCBSVENfU2V0TW9ub3RvbmljQ291bnRlcihSVENfVHlwZSAqYmFzZSwgdWludDY0X3QgY291bnRlcikKK3sKKyAgICAvKiBQcmVwYXJlIHRvIGluaXRpYWxpemUgdGhlIHJlZ2lzdGVyIHdpdGggdGhlIG5ldyB2YWx1ZSB3cml0dGVuICovCisgICAgYmFzZS0+TUVSICY9IH5SVENfTUVSX01DRV9NQVNLOworCisgICAgYmFzZS0+TUNIUiA9ICh1aW50MzJfdCkoKGNvdW50ZXIpID4+IDMyKTsKKyAgICBiYXNlLT5NQ0xSID0gKHVpbnQzMl90KShjb3VudGVyKTsKK30KKworc3RhdHVzX3QgUlRDX0luY3JlbWVudE1vbm90b25pY0NvdW50ZXIoUlRDX1R5cGUgKmJhc2UpCit7CisgICAgaWYgKGJhc2UtPlNSICYgKFJUQ19TUl9NT0ZfTUFTSyB8IFJUQ19TUl9USUZfTUFTSykpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIC8qIFByZXBhcmUgdG8gc3dpdGNoIHRvIGluY3JlbWVudCBtb2RlICovCisgICAgYmFzZS0+TUVSIHw9IFJUQ19NRVJfTUNFX01BU0s7CisgICAgLyogV3JpdGUgYW55dGhpbmcgc28gdGhlIGNvdW50ZXIgaW5jcmVtZW50cyovCisgICAgYmFzZS0+TUNMUiA9IDFVOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ydGMuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZWZmYzYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9ydGMuaApAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfUlRDX0hfCisjZGVmaW5lIF9GU0xfUlRDX0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgcnRjCisgKiBAeworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworI2RlZmluZSBGU0xfUlRDX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMCkpIC8qITwgVmVyc2lvbiAyLjAuMCAqLworLypAfSovCisKKy8qISBAYnJpZWYgTGlzdCBvZiBSVEMgaW50ZXJydXB0cyAqLwordHlwZWRlZiBlbnVtIF9ydGNfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtSVENfVGltZUludmFsaWRJbnRlcnJ1cHRFbmFibGUgPSBSVENfSUVSX1RJSUVfTUFTSywgIC8qITwgVGltZSBpbnZhbGlkIGludGVycnVwdC4qLworICAgIGtSVENfVGltZU92ZXJmbG93SW50ZXJydXB0RW5hYmxlID0gUlRDX0lFUl9UT0lFX01BU0ssIC8qITwgVGltZSBvdmVyZmxvdyBpbnRlcnJ1cHQuKi8KKyAgICBrUlRDX0FsYXJtSW50ZXJydXB0RW5hYmxlID0gUlRDX0lFUl9UQUlFX01BU0ssICAgICAgICAvKiE8IEFsYXJtIGludGVycnVwdC4qLworICAgIGtSVENfU2Vjb25kc0ludGVycnVwdEVuYWJsZSA9IFJUQ19JRVJfVFNJRV9NQVNLICAgICAgIC8qITwgU2Vjb25kcyBpbnRlcnJ1cHQuKi8KK30gcnRjX2ludGVycnVwdF9lbmFibGVfdDsKKworLyohIEBicmllZiBMaXN0IG9mIFJUQyBmbGFncyAqLwordHlwZWRlZiBlbnVtIF9ydGNfc3RhdHVzX2ZsYWdzCit7CisgICAga1JUQ19UaW1lSW52YWxpZEZsYWcgPSBSVENfU1JfVElGX01BU0ssICAvKiE8IFRpbWUgaW52YWxpZCBmbGFnICovCisgICAga1JUQ19UaW1lT3ZlcmZsb3dGbGFnID0gUlRDX1NSX1RPRl9NQVNLLCAvKiE8IFRpbWUgb3ZlcmZsb3cgZmxhZyAqLworICAgIGtSVENfQWxhcm1GbGFnID0gUlRDX1NSX1RBRl9NQVNLICAgICAgICAgLyohPCBBbGFybSBmbGFnKi8KK30gcnRjX3N0YXR1c19mbGFnc190OworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfUlRDX0hBU19PU0NfU0NYUCkgJiYgRlNMX0ZFQVRVUkVfUlRDX0hBU19PU0NfU0NYUCkKKworLyohIEBicmllZiBMaXN0IG9mIFJUQyBPc2NpbGxhdG9yIGNhcGFjaXRvciBsb2FkIHNldHRpbmdzICovCit0eXBlZGVmIGVudW0gX3J0Y19vc2NfY2FwX2xvYWQKK3sKKyAgICBrUlRDX0NhcGFjaXRvcl8ycCA9IFJUQ19DUl9TQzJQX01BU0ssICAvKiE8IDIgcEYgY2FwYWNpdG9yIGxvYWQgKi8KKyAgICBrUlRDX0NhcGFjaXRvcl80cCA9IFJUQ19DUl9TQzRQX01BU0ssICAvKiE8IDQgcEYgY2FwYWNpdG9yIGxvYWQgKi8KKyAgICBrUlRDX0NhcGFjaXRvcl84cCA9IFJUQ19DUl9TQzhQX01BU0ssICAvKiE8IDggcEYgY2FwYWNpdG9yIGxvYWQgKi8KKyAgICBrUlRDX0NhcGFjaXRvcl8xNnAgPSBSVENfQ1JfU0MxNlBfTUFTSyAvKiE8IDE2IHBGIGNhcGFjaXRvciBsb2FkICovCit9IHJ0Y19vc2NfY2FwX2xvYWRfdDsKKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NDR19IQVNfT1NDX1NDWFAgKi8KKworLyohIEBicmllZiBTdHJ1Y3R1cmUgaXMgdXNlZCB0byBob2xkIHRoZSBkYXRlIGFuZCB0aW1lICovCit0eXBlZGVmIHN0cnVjdCBfcnRjX2RhdGV0aW1lCit7CisgICAgdWludDE2X3QgeWVhcjsgIC8qITwgUmFuZ2UgZnJvbSAxOTcwIHRvIDIwOTkuKi8KKyAgICB1aW50OF90IG1vbnRoOyAgLyohPCBSYW5nZSBmcm9tIDEgdG8gMTIuKi8KKyAgICB1aW50OF90IGRheTsgICAgLyohPCBSYW5nZSBmcm9tIDEgdG8gMzEgKGRlcGVuZGluZyBvbiBtb250aCkuKi8KKyAgICB1aW50OF90IGhvdXI7ICAgLyohPCBSYW5nZSBmcm9tIDAgdG8gMjMuKi8KKyAgICB1aW50OF90IG1pbnV0ZTsgLyohPCBSYW5nZSBmcm9tIDAgdG8gNTkuKi8KKyAgICB1aW50OF90IHNlY29uZDsgLyohPCBSYW5nZSBmcm9tIDAgdG8gNTkuKi8KK30gcnRjX2RhdGV0aW1lX3Q7CisKKy8qIQorICogQGJyaWVmIFJUQyBjb25maWcgc3RydWN0dXJlCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBSVEMgcGVyaXBoZXJhbC4gVG8gaW5pdGlhbGl6ZSB0aGlzCisgKiBzdHJ1Y3R1cmUgdG8gcmVhc29uYWJsZSBkZWZhdWx0cywgY2FsbCB0aGUgUlRDX0dldERlZmF1bHRDb25maWcoKSBmdW5jdGlvbiBhbmQgcGFzcyBhCisgKiBwb2ludGVyIHRvIHlvdXIgY29uZmlnIHN0cnVjdHVyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGUgY29uZmlnIHN0cnVjdCBjYW4gYmUgbWFkZSBjb25zdCBzbyBpdCByZXNpZGVzIGluIGZsYXNoCisgKi8KK3R5cGVkZWYgc3RydWN0IF9ydGNfY29uZmlnCit7CisgICAgYm9vbCB3YWtldXBTZWxlY3Q7ICAgICAgICAgICAgIC8qITwgdHJ1ZTogV2FrZXVwIHBpbiBvdXRwdXRzIHRoZSAzMiBLSHogY2xvY2s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U6V2FrZXVwIHBpbiB1c2VkIHRvIHdha2V1cCB0aGUgY2hpcCAgKi8KKyAgICBib29sIHVwZGF0ZU1vZGU7ICAgICAgICAgICAgICAgLyohPCB0cnVlOiBSZWdpc3RlcnMgY2FuIGJlIHdyaXR0ZW4gZXZlbiB3aGVuIGxvY2tlZCB1bmRlciBjZXJ0YWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucywgZmFsc2U6IE5vIHdyaXRlcyBhbGxvd2VkIHdoZW4gcmVnaXN0ZXJzIGFyZSBsb2NrZWQgKi8KKyAgICBib29sIHN1cGVydmlzb3JBY2Nlc3M7ICAgICAgICAgLyohPCB0cnVlOiBOb24tc3VwZXJ2aXNvciBhY2Nlc3NlcyBhcmUgYWxsb3dlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogTm9uLXN1cGVydmlzb3IgYWNjZXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICB1aW50MzJfdCBjb21wZW5zYXRpb25JbnRlcnZhbDsgLyohPCBDb21wZW5zYXRpb24gaW50ZXJ2YWwgdGhhdCBpcyB3cml0dGVuIHRvIHRoZSBDSVIgZmllbGQgaW4gUlRDIFRDUiBSZWdpc3RlciAqLworICAgIHVpbnQzMl90IGNvbXBlbnNhdGlvblRpbWU7ICAgICAvKiE8IENvbXBlbnNhdGlvbiB0aW1lIHRoYXQgaXMgd3JpdHRlbiB0byB0aGUgVENSIGZpZWxkIGluIFJUQyBUQ1IgUmVnaXN0ZXIgKi8KK30gcnRjX2NvbmZpZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQG5hbWUgSW5pdGlhbGl6YXRpb24gYW5kIGRlaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgVW5nYXRlcyB0aGUgUlRDIGNsb2NrIGFuZCBjb25maWd1cmVzIHRoZSBwZXJpcGhlcmFsIGZvciBiYXNpYyBvcGVyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYSBzb2Z0d2FyZSByZXNldCBpZiB0aGUgdGltZXIgaW52YWxpZCBmbGFnIGlzIHNldC4KKyAqCisgKiBAbm90ZSBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBSVEMgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdGhlIHVzZXIncyBSVEMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgUlRDX0luaXQoUlRDX1R5cGUgKmJhc2UsIGNvbnN0IHJ0Y19jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgU3RvcHMgdGhlIHRpbWVyIGFuZCBnYXRlIHRoZSBSVEMgY2xvY2suCisgKgorICogQHBhcmFtIGJhc2UgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSVENfRGVpbml0KFJUQ19UeXBlICpiYXNlKQoreworICAgIC8qIFN0b3AgdGhlIFJUQyB0aW1lciAqLworICAgIGJhc2UtPlNSICY9IH5SVENfU1JfVENFX01BU0s7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogR2F0ZSB0aGUgbW9kdWxlIGNsb2NrICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKGtDTE9DS19SdGMwKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKworLyohCisgKiBAYnJpZWYgRmlsbHMgaW4gdGhlIFJUQyBjb25maWcgc3RydWN0IHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgKgorICogVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhcyBmb2xsb3dzLgorICogQGNvZGUKKyAqICAgIGNvbmZpZy0+d2FrZXVwU2VsZWN0ID0gZmFsc2U7CisgKiAgICBjb25maWctPnVwZGF0ZU1vZGUgPSBmYWxzZTsKKyAqICAgIGNvbmZpZy0+c3VwZXJ2aXNvckFjY2VzcyA9IGZhbHNlOworICogICAgY29uZmlnLT5jb21wZW5zYXRpb25JbnRlcnZhbCA9IDA7CisgKiAgICBjb25maWctPmNvbXBlbnNhdGlvblRpbWUgPSAwOworICogQGVuZGNvZGUKKyAqIEBwYXJhbSBjb25maWcgUG9pbnRlciB0byB0aGUgdXNlcidzIFJUQyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBSVENfR2V0RGVmYXVsdENvbmZpZyhydGNfY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgQ3VycmVudCBUaW1lICYgQWxhcm0KKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgUlRDIGRhdGUgYW5kIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgUlRDIGNvdW50ZXIgbXVzdCBiZSBzdG9wcGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIHdyaXRlcyB0byB0aGUgUlRDCisgKiBzZWNvbmRzIHJlZ2lzdGVyIGZhaWwgaWYgdGhlIFJUQyBjb3VudGVyIGlzIHJ1bm5pbmcuCisgKgorICogQHBhcmFtIGJhc2UgICAgIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGRhdGV0aW1lIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aGVyZSB0aGUgZGF0ZSBhbmQgdGltZSBkZXRhaWxzIGFyZSBzdG9yZWQuCisgKgorICogQHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M6IFN1Y2Nlc3MgaW4gc2V0dGluZyB0aGUgdGltZSBhbmQgc3RhcnRpbmcgdGhlIFJUQworICogICAgICAgICBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDogRXJyb3IgYmVjYXVzZSB0aGUgZGF0ZXRpbWUgZm9ybWF0IGlzIGluY29ycmVjdAorICovCitzdGF0dXNfdCBSVENfU2V0RGF0ZXRpbWUoUlRDX1R5cGUgKmJhc2UsIGNvbnN0IHJ0Y19kYXRldGltZV90ICpkYXRldGltZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFJUQyB0aW1lIGFuZCBzdG9yZXMgaXQgaW4gdGhlIGdpdmVuIHRpbWUgc3RydWN0dXJlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBkYXRldGltZSBQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2hlcmUgdGhlIGRhdGUgYW5kIHRpbWUgZGV0YWlscyBhcmUgc3RvcmVkLgorICovCit2b2lkIFJUQ19HZXREYXRldGltZShSVENfVHlwZSAqYmFzZSwgcnRjX2RhdGV0aW1lX3QgKmRhdGV0aW1lKTsKKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgUlRDIGFsYXJtIHRpbWUuCisgKgorICogVGhlIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgYWxhcm0gdGltZSBpcyBncmVhdGVyIHRoYW4gdGhlIHByZXNlbnQKKyAqIHRpbWUuIElmIG5vdCwgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IHNldCB0aGUgYWxhcm0gYW5kIHJldHVybnMgYW4gZXJyb3IuCisgKgorICogQHBhcmFtIGJhc2UgICAgICBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBhbGFybVRpbWUgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSBhbGFybSB0aW1lIGlzIHN0b3JlZC4KKyAqCisgKiBAcmV0dXJuIGtTdGF0dXNfU3VjY2Vzczogc3VjY2VzcyBpbiBzZXR0aW5nIHRoZSBSVEMgYWxhcm0KKyAqICAgICAgICAga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ6IEVycm9yIGJlY2F1c2UgdGhlIGFsYXJtIGRhdGV0aW1lIGZvcm1hdCBpcyBpbmNvcnJlY3QKKyAqICAgICAgICAga1N0YXR1c19GYWlsOiBFcnJvciBiZWNhdXNlIHRoZSBhbGFybSB0aW1lIGhhcyBhbHJlYWR5IHBhc3NlZAorICovCitzdGF0dXNfdCBSVENfU2V0QWxhcm0oUlRDX1R5cGUgKmJhc2UsIGNvbnN0IHJ0Y19kYXRldGltZV90ICphbGFybVRpbWUpOworCisvKiEKKyAqIEBicmllZiBSZXR1cm5zIHRoZSBSVEMgYWxhcm0gdGltZS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gZGF0ZXRpbWUgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSBhbGFybSBkYXRlIGFuZCB0aW1lIGRldGFpbHMgYXJlIHN0b3JlZC4KKyAqLwordm9pZCBSVENfR2V0QWxhcm0oUlRDX1R5cGUgKmJhc2UsIHJ0Y19kYXRldGltZV90ICpkYXRldGltZSk7CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgSW50ZXJydXB0IEludGVyZmFjZQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBzZWxlY3RlZCBSVEMgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6cnRjX2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUlRDX0VuYWJsZUludGVycnVwdHMoUlRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgYmFzZS0+SUVSIHw9IG1hc2s7Cit9CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBzZWxlY3RlZCBSVEMgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGVuYWJsZS4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6cnRjX2ludGVycnVwdF9lbmFibGVfdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUlRDX0Rpc2FibGVJbnRlcnJ1cHRzKFJUQ19UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIGJhc2UtPklFUiAmPSB+bWFzazsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgZW5hYmxlZCBSVEMgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBlbmFibGVkIGludGVycnVwdHMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjpydGNfaW50ZXJydXB0X2VuYWJsZV90CisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUlRDX0dldEVuYWJsZWRJbnRlcnJ1cHRzKFJUQ19UeXBlICpiYXNlKQoreworICAgIHJldHVybiAoYmFzZS0+SUVSICYgKFJUQ19JRVJfVElJRV9NQVNLIHwgUlRDX0lFUl9UT0lFX01BU0sgfCBSVENfSUVSX1RBSUVfTUFTSyB8IFJUQ19JRVJfVFNJRV9NQVNLKSk7Cit9CisKKy8qISBAfSovCisKKy8qIQorICogQG5hbWUgU3RhdHVzIEludGVyZmFjZQorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBSVEMgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIHN0YXR1cyBmbGFncy4gVGhpcyBpcyB0aGUgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICBlbnVtZXJhdGlvbiA6OnJ0Y19zdGF0dXNfZmxhZ3NfdAorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJUQ19HZXRTdGF0dXNGbGFncyhSVENfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPlNSICYgKFJUQ19TUl9USUZfTUFTSyB8IFJUQ19TUl9UT0ZfTUFTSyB8IFJUQ19TUl9UQUZfTUFTSykpOworfQorCisvKiEKKyAqIEBicmllZiAgQ2xlYXJzIHRoZSBSVEMgc3RhdHVzIGZsYWdzLgorICoKKyAqIEBwYXJhbSBiYXNlIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIG1hc2sgVGhlIHN0YXR1cyBmbGFncyB0byBjbGVhci4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6cnRjX3N0YXR1c19mbGFnc190CisgKi8KK3ZvaWQgUlRDX0NsZWFyU3RhdHVzRmxhZ3MoUlRDX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFRpbWVyIFN0YXJ0IGFuZCBTdG9wCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFN0YXJ0cyB0aGUgUlRDIHRpbWUgY291bnRlci4KKyAqCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSB0aW1lciBjb3VudGVyIGluY3JlbWVudHMgb25jZSBhIHNlY29uZCBwcm92aWRlZCBTUltUT0ZdIG9yCisgKiBTUltUSUZdIGFyZSBub3Qgc2V0LgorICoKKyAqIEBwYXJhbSBiYXNlIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgUlRDX1N0YXJ0VGltZXIoUlRDX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+U1IgfD0gUlRDX1NSX1RDRV9NQVNLOworfQorCisvKiEKKyAqIEBicmllZiBTdG9wcyB0aGUgUlRDIHRpbWUgY291bnRlci4KKyAqCisgKiBSVEMncyBzZWNvbmRzIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuIHRvIG9ubHkgd2hlbiB0aGUgdGltZXIgaXMgc3RvcHBlZC4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJUQ19TdG9wVGltZXIoUlRDX1R5cGUgKmJhc2UpCit7CisgICAgYmFzZS0+U1IgJj0gflJUQ19TUl9UQ0VfTUFTSzsKK30KKworLyohIEB9Ki8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1JUQ19IQVNfT1NDX1NDWFApICYmIEZTTF9GRUFUVVJFX1JUQ19IQVNfT1NDX1NDWFApCisKKy8qIQorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgc3BlY2lmaWVkIGNhcGFjaXRvciBjb25maWd1cmF0aW9uIGZvciB0aGUgUlRDIG9zY2lsbGF0b3IuCisgKgorICogQHBhcmFtIGJhc2UgICAgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY2FwTG9hZCBPc2NpbGxhdG9yIGxvYWRzIHRvIGVuYWJsZS4gVGhpcyBpcyBhIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgICAgICAgIGVudW1lcmF0aW9uIDo6cnRjX29zY19jYXBfbG9hZF90CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBSVENfU2V0T3NjQ2FwTG9hZChSVENfVHlwZSAqYmFzZSwgdWludDMyX3QgY2FwTG9hZCkKK3sKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5DUjsKKworICAgIHJlZyAmPSB+KFJUQ19DUl9TQzJQX01BU0sgfCBSVENfQ1JfU0M0UF9NQVNLIHwgUlRDX0NSX1NDOFBfTUFTSyB8IFJUQ19DUl9TQzE2UF9NQVNLKTsKKyAgICByZWcgfD0gY2FwTG9hZDsKKworICAgIGJhc2UtPkNSID0gcmVnOworfQorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU0NHX0hBU19PU0NfU0NYUCAqLworCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIHNvZnR3YXJlIHJlc2V0IG9uIHRoZSBSVEMgbW9kdWxlLgorICoKKyAqIFRoaXMgcmVzZXRzIGFsbCBSVEMgcmVnaXN0ZXJzIGV4Y2VwdCBmb3IgdGhlIFNXUiBiaXQgYW5kIHRoZSBSVENfV0FSIGFuZCBSVENfUkFSCisgKiByZWdpc3RlcnMuIFRoZSBTV1IgYml0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgZXhwbGljaXRseSBjbGVhcmluZyBpdC4KKyAqCisgKiBAcGFyYW0gYmFzZSBSVEMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJUQ19SZXNldChSVENfVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5DUiB8PSBSVENfQ1JfU1dSX01BU0s7CisgICAgYmFzZS0+Q1IgJj0gflJUQ19DUl9TV1JfTUFTSzsKKworICAgIC8qIFNldCBUU1IgcmVnaXN0ZXIgdG8gMHgxIHRvIGF2b2lkIHRoZSB0aW1lciBpbnZhbGlkIChUSUYpIGJpdCBiZWluZyBzZXQgaW4gdGhlIFNSIHJlZ2lzdGVyICovCisgICAgYmFzZS0+VFNSID0gMVU7Cit9CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDKSAmJiAoRlNMX0ZFQVRVUkVfUlRDX0hBU19NT05PVE9OSUMpCisKKy8qIQorICogQG5hbWUgTW9ub3RvbmljIGNvdW50ZXIgZnVuY3Rpb25zCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFJlYWRzIHRoZSB2YWx1ZXMgb2YgdGhlIE1vbm90b25pYyBDb3VudGVyIEhpZ2ggYW5kIE1vbm90b25pYyBDb3VudGVyIExvdyBhbmQgcmV0dXJucworICogICAgICAgIHRoZW0gYXMgYSBzaW5nbGUgdmFsdWUuCisgKgorICogQHBhcmFtIGJhc2UgICAgUlRDIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY291bnRlciBQb2ludGVyIHRvIHZhcmlhYmxlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzdG9yZWQuCisgKi8KK3ZvaWQgUlRDX0dldE1vbm90b25pY0NvdW50ZXIoUlRDX1R5cGUgKmJhc2UsIHVpbnQ2NF90ICpjb3VudGVyKTsKKworLyohCisgKiBAYnJpZWYgV3JpdGVzIHZhbHVlcyBNb25vdG9uaWMgQ291bnRlciBIaWdoIGFuZCBNb25vdG9uaWMgQ291bnRlciBMb3cgYnkgZGVjb21wb3NpbmcKKyAqICAgICAgICB0aGUgZ2l2ZW4gc2luZ2xlIHZhbHVlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNvdW50ZXIgQ291bnRlciB2YWx1ZQorICovCit2b2lkIFJUQ19TZXRNb25vdG9uaWNDb3VudGVyKFJUQ19UeXBlICpiYXNlLCB1aW50NjRfdCBjb3VudGVyKTsKKworLyohCisgKiBAYnJpZWYgSW5jcmVtZW50cyB0aGUgTW9ub3RvbmljIENvdW50ZXIgYnkgb25lLgorICoKKyAqIEluY3JlbWVudHMgdGhlIE1vbm90b25pYyBDb3VudGVyIChyZWdpc3RlcnMgUlRDX01DTFIgYW5kIFJUQ19NQ0hSIGFjY29yZGluZ2x5KSBieSBzZXR0aW5nCisgKiB0aGUgbW9ub3RvbmljIGNvdW50ZXIgZW5hYmxlIChNRVJbTUNFXSkgYW5kIHRoZW4gd3JpdGluZyB0byB0aGUgUlRDX01DTFIgcmVnaXN0ZXIuIEEgd3JpdGUgdG8gdGhlCisgKiBtb25vdG9uaWMgY291bnRlciBsb3cgdGhhdCBjYXVzZXMgaXQgdG8gb3ZlcmZsb3cgYWxzbyBpbmNyZW1lbnRzIHRoZSBtb25vdG9uaWMgY291bnRlciBoaWdoLgorICoKKyAqIEBwYXJhbSBiYXNlIFJUQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4ga1N0YXR1c19TdWNjZXNzOiBzdWNjZXNzCisgKiAgICAgICAgIGtTdGF0dXNfRmFpbDogZXJyb3Igb2NjdXJyZWQsIGVpdGhlciB0aW1lIGludmFsaWQgb3IgbW9ub3RvbmljIG92ZXJmbG93IGZsYWcgd2FzIGZvdW5kCisgKi8KK3N0YXR1c190IFJUQ19JbmNyZW1lbnRNb25vdG9uaWNDb3VudGVyKFJUQ19UeXBlICpiYXNlKTsKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1JUQ19IQVNfTU9OT1RPTklDICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1JUQ19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc2ltLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU1MTJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc2ltLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfc2ltLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IpICYmIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQl9WT0xUQUdFX1JFR1VMQVRPUikKK3ZvaWQgU0lNX1NldFVzYlZvbHRSZWd1bGF0b3JFbmFibGVNb2RlKHVpbnQzMl90IG1hc2spCit7CisgICAgU0lNLT5TT1BUMUNGRyB8PSAoU0lNX1NPUFQxQ0ZHX1VSV0VfTUFTSyB8IFNJTV9TT1BUMUNGR19VVlNXRV9NQVNLIHwgU0lNX1NPUFQxQ0ZHX1VTU1dFX01BU0spOworCisgICAgU0lNLT5TT1BUMSA9IChTSU0tPlNPUFQxICYgfmtTSU1fVXNiVm9sdFJlZ0VuYWJsZUluQWxsTW9kZXMpIHwgbWFzazsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IgKi8KKwordm9pZCBTSU1fR2V0VW5pcXVlSWQoc2ltX3VpZF90ICp1aWQpCit7CisjaWYgZGVmaW5lZChTSU1fVUlESCkKKyAgICB1aWQtPkggPSBTSU0tPlVJREg7CisjZW5kaWYKKyAgICB1aWQtPk1IID0gU0lNLT5VSURNSDsKKyAgICB1aWQtPk1MID0gU0lNLT5VSURNTDsKKyAgICB1aWQtPkwgPSBTSU0tPlVJREw7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zaW0uaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMGU0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zaW0uaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZTTF9TSU1fSF8KKyNkZWZpbmUgX0ZTTF9TSU1fSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohIEBhZGR0b2dyb3VwIHNpbSAqLworLyohIEB7Ki8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworI2RlZmluZSBGU0xfU0lNX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMCkpIC8qITwgRHJpdmVyIHZlcnNpb24gMi4wLjAgKi8KKy8qQH0qLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SKSAmJiBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IpCisvKiFAYnJpZWYgVVNCIHZvbHRhZ2UgcmVndWxhdG9yIGVuYWJsZSBzZXR0aW5nLiAqLworZW51bSBfc2ltX3VzYl92b2x0X3JlZ19lbmFibGVfbW9kZQoreworICAgIGtTSU1fVXNiVm9sdFJlZ0VuYWJsZSA9IFNJTV9TT1BUMV9VU0JSRUdFTl9NQVNLLCAgICAgICAgICAgLyohPCBFbmFibGUgdm9sdGFnZSByZWd1bGF0b3IuICovCisgICAga1NJTV9Vc2JWb2x0UmVnRW5hYmxlSW5Mb3dQb3dlciA9IFNJTV9TT1BUMV9VU0JWU1RCWV9NQVNLLCAvKiE8IEVuYWJsZSB2b2x0YWdlIHJlZ3VsYXRvciBpbiBWTFBSL1ZMUFcgbW9kZXMuICovCisgICAga1NJTV9Vc2JWb2x0UmVnRW5hYmxlSW5TdG9wID0gU0lNX1NPUFQxX1VTQlNTVEJZX01BU0ssIC8qITwgRW5hYmxlIHZvbHRhZ2UgcmVndWxhdG9yIGluIFNUT1AvVkxQUy9MTFMvVkxMUyBtb2Rlcy4gKi8KKyAgICBrU0lNX1VzYlZvbHRSZWdFbmFibGVJbkFsbE1vZGVzID0gU0lNX1NPUFQxX1VTQlJFR0VOX01BU0sgfCBTSU1fU09QVDFfVVNCU1NUQllfTUFTSyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJTV9TT1BUMV9VU0JWU1RCWV9NQVNLIC8qITwgRW5hYmxlIHZvbHRhZ2UgcmVndWxhdG9yIGluIGFsbCBwb3dlciBtb2Rlcy4gKi8KK307CisjZW5kaWYgLyogKGRlZmluZWQoRlNMX0ZFQVRVUkVfU0lNX09QVF9IQVNfVVNCX1ZPTFRBR0VfUkVHVUxBVE9SKSAmJiBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IpICovCisKKy8qIUBicmllZiBVbmlxdWUgSUQuICovCit0eXBlZGVmIHN0cnVjdCBfc2ltX3VpZAoreworI2lmIGRlZmluZWQoU0lNX1VJREgpCisgICAgdWludDMyX3QgSDsgLyohPCBVSURILiAgKi8KKyNlbmRpZgorICAgIHVpbnQzMl90IE1IOyAvKiE8IFVJRE1ILiAqLworICAgIHVpbnQzMl90IE1MOyAvKiE8IFVJRE1MLiAqLworICAgIHVpbnQzMl90IEw7ICAvKiE8IFVJREwuICAqLworfSBzaW1fdWlkX3Q7CisKKy8qIUBicmllZiBGbGFzaCBlbmFibGUgbW9kZS4gKi8KK2VudW0gX3NpbV9mbGFzaF9tb2RlCit7CisgICAga1NJTV9GbGFzaERpc2FibGVJbldhaXQgPSBTSU1fRkNGRzFfRkxBU0hET1pFX01BU0ssIC8qITwgRGlzYWJsZSBmbGFzaCBpbiB3YWl0IG1vZGUuICAgKi8KKyAgICBrU0lNX0ZsYXNoRGlzYWJsZSA9IFNJTV9GQ0ZHMV9GTEFTSERJU19NQVNLICAgICAgICAgLyohPCBEaXNhYmxlIGZsYXNoIGluIG5vcm1hbCBtb2RlLiAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IpICYmIEZTTF9GRUFUVVJFX1NJTV9PUFRfSEFTX1VTQl9WT0xUQUdFX1JFR1VMQVRPUikKKy8qIQorICogQGJyaWVmIFNldHMgdGhlIFVTQiB2b2x0YWdlIHJlZ3VsYXRvciBzZXR0aW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB3aGV0aGVyIHRoZSBVU0Igdm9sdGFnZSByZWd1bGF0b3IgaXMgZW5hYmxlZCBpbgorICogbm9ybWFsIFJVTiBtb2RlLCBTVE9QL1ZMUFMvTExTL1ZMTFMgbW9kZXMsIGFuZCBWTFBSL1ZMUFcgbW9kZXMuIFRoZSBjb25maWd1cmF0aW9ucworICogYXJlIHBhc3NlZCBpbiBhcyBtYXNrIHZhbHVlIG9mIFxyZWYgX3NpbV91c2Jfdm9sdF9yZWdfZW5hYmxlX21vZGUuIEZvciBleGFtcGxlLCB0byBlbmFibGUKKyAqIFVTQiB2b2x0YWdlIHJlZ3VsYXRvciBpbiBSVU4vVkxQUi9WTFBXIG1vZGVzIGFuZCBkaXNhYmxlIGluIFNUT1AvVkxQUy9MTFMvVkxMUyBtb2RlLAorICogdXNlOgorICoKKyAqIFNJTV9TZXRVc2JWb2x0UmVndWxhdG9yRW5hYmxlTW9kZShrU0lNX1VzYlZvbHRSZWdFbmFibGUgfCBrU0lNX1VzYlZvbHRSZWdFbmFibGVJbkxvd1Bvd2VyKTsKKyAqCisgKiBAcGFyYW0gbWFzayAgVVNCIHZvbHRhZ2UgcmVndWxhdG9yIGVuYWJsZSBzZXR0aW5nLgorICovCit2b2lkIFNJTV9TZXRVc2JWb2x0UmVndWxhdG9yRW5hYmxlTW9kZSh1aW50MzJfdCBtYXNrKTsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TSU1fT1BUX0hBU19VU0JfVk9MVEFHRV9SRUdVTEFUT1IgKi8KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpY2F0aW9uIHJlZ2lzdGVyIHZhbHVlLgorICoKKyAqIEBwYXJhbSB1aWQgUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHRvIHNhdmUgdGhlIFVJRCB2YWx1ZS4KKyAqLwordm9pZCBTSU1fR2V0VW5pcXVlSWQoc2ltX3VpZF90ICp1aWQpOworCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBmbGFzaCBlbmFibGUgbW9kZS4KKyAqCisgKiBAcGFyYW0gbW9kZSBUaGUgbW9kZSB0byBzZXQ7IHNlZSBccmVmIF9zaW1fZmxhc2hfbW9kZSBmb3IgbW9kZSBkZXRhaWxzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgU0lNX1NldEZsYXNoTW9kZSh1aW50OF90IG1vZGUpCit7CisgICAgU0lNLT5GQ0ZHMSA9IG1vZGU7Cit9CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzKi8KKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfU0lNX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zbWMuYyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2YxOTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF9zbWMuYwpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmc2xfc21jLmgiCisjaW5jbHVkZSAiZnNsX2ZsYXNoLmgiCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNKQordm9pZCBTTUNfR2V0UGFyYW0oU01DX1R5cGUgKmJhc2UsIHNtY19wYXJhbV90ICpwYXJhbSkKK3sKKyAgICB1aW50MzJfdCByZWcgPSBiYXNlLT5QQVJBTTsKKyAgICBwYXJhbS0+aHNydW5FbmFibGUgPSAoYm9vbCkocmVnICYgU01DX1BBUkFNX0VIU1JVTl9NQVNLKTsKKyAgICBwYXJhbS0+bGxzRW5hYmxlID0gKGJvb2wpKHJlZyAmIFNNQ19QQVJBTV9FTExTX01BU0spOworICAgIHBhcmFtLT5sbHMyRW5hYmxlID0gKGJvb2wpKHJlZyAmIFNNQ19QQVJBTV9FTExTMl9NQVNLKTsKKyAgICBwYXJhbS0+dmxsczBFbmFibGUgPSAoYm9vbCkocmVnICYgU01DX1BBUkFNX0VWTExTMF9NQVNLKTsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNICovCisKK3ZvaWQgU01DX1ByZUVudGVyU3RvcE1vZGVzKHZvaWQpCit7CisgICAgZmxhc2hfcHJlZmV0Y2hfc3BlY3VsYXRpb25fc3RhdHVzX3Qgc3BlY3VsYXRpb25TdGF0dXMgPQorICAgIHsKKyAgICAgICAga0ZMQVNIX3ByZWZldGNoU3BlY3VsYXRpb25PcHRpb25EaXNhYmxlLCAvKiBEaXNhYmxlIGluc3RydWN0aW9uIHNwZWN1bGF0aW9uLiovCisgICAgICAgIGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRGlzYWJsZSwgLyogRGlzYWJsZSBkYXRhIHNwZWN1bGF0aW9uLiovCisgICAgfTsKKworICAgIF9fZGlzYWJsZV9pcnEoKTsKKyAgICBfX0lTQigpOworCisgICAgLyoKKyAgICAgKiBCZWZvcmUgZW50ZXIgc3RvcCBtb2RlcywgdGhlIGZsYXNoIGNhY2hlIHByZWZldGNoIHNob3VsZCBiZSBkaXNhYmxlZC4KKyAgICAgKiBPdGhlcndpc2UgdGhlIHByZWZldGNoIG1pZ2h0IGJlIGludGVycnVwdGVkIGJ5IHN0b3AsIHRoZW4gdGhlIGRhdGEgYW5kCisgICAgICogYW5kIGluc3RydWN0aW9uIGZyb20gZmxhc2ggYXJlIHdyb25nLgorICAgICAqLworICAgIEZMQVNIX1BmbGFzaFNldFByZWZldGNoU3BlY3VsYXRpb24oJnNwZWN1bGF0aW9uU3RhdHVzKTsKK30KKwordm9pZCBTTUNfUG9zdEV4aXRTdG9wTW9kZXModm9pZCkKK3sKKyAgICBmbGFzaF9wcmVmZXRjaF9zcGVjdWxhdGlvbl9zdGF0dXNfdCBzcGVjdWxhdGlvblN0YXR1cyA9CisgICAgeworICAgICAgICBrRkxBU0hfcHJlZmV0Y2hTcGVjdWxhdGlvbk9wdGlvbkVuYWJsZSwgLyogRW5hYmxlIGluc3RydWN0aW9uIHNwZWN1bGF0aW9uLiovCisgICAgICAgIGtGTEFTSF9wcmVmZXRjaFNwZWN1bGF0aW9uT3B0aW9uRW5hYmxlLCAvKiBFbmFibGUgZGF0YSBzcGVjdWxhdGlvbi4qLworICAgIH07CisKKyAgICBGTEFTSF9QZmxhc2hTZXRQcmVmZXRjaFNwZWN1bGF0aW9uKCZzcGVjdWxhdGlvblN0YXR1cyk7CisKKyAgICBfX2VuYWJsZV9pcnEoKTsKKyAgICBfX0lTQigpOworfQorCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlUnVuKFNNQ19UeXBlICpiYXNlKQoreworICAgIHVpbnQ4X3QgcmVnOworCisgICAgcmVnID0gYmFzZS0+UE1DVFJMOworICAgIC8qIGNvbmZpZ3VyZSBOb3JtYWwgUlVOIG1vZGUgKi8KKyAgICByZWcgJj0gflNNQ19QTUNUUkxfUlVOTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19SdW5Ob3JtYWwgPDwgU01DX1BNQ1RSTF9SVU5NX1NISUZUKTsKKyAgICBiYXNlLT5QTUNUUkwgPSByZWc7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlSHNydW4oU01DX1R5cGUgKmJhc2UpCit7CisgICAgdWludDhfdCByZWc7CisKKyAgICByZWcgPSBiYXNlLT5QTUNUUkw7CisgICAgLyogY29uZmlndXJlIEhpZ2ggU3BlZWQgUlVOIG1vZGUgKi8KKyAgICByZWcgJj0gflNNQ19QTUNUUkxfUlVOTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19Ic3J1biA8PCBTTUNfUE1DVFJMX1JVTk1fU0hJRlQpOworICAgIGJhc2UtPlBNQ1RSTCA9IHJlZzsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFICovCisKK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVXYWl0KFNNQ19UeXBlICpiYXNlKQoreworICAgIC8qIGNvbmZpZ3VyZSBOb3JtYWwgV2FpdCBtb2RlICovCisgICAgU0NCLT5TQ1IgJj0gflNDQl9TQ1JfU0xFRVBERUVQX01zazsKKyAgICBfX0RTQigpOworICAgIF9fV0ZJKCk7CisgICAgX19JU0IoKTsKKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVTdG9wKFNNQ19UeXBlICpiYXNlLCBzbWNfcGFydGlhbF9zdG9wX29wdGlvbl90IG9wdGlvbikKK3sKKyAgICB1aW50OF90IHJlZzsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfUFNUT1BPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BTVE9QTykKKyAgICAvKiBjb25maWd1cmUgdGhlIFBhcnRpYWwgU3RvcCBtb2RlIGluIE5vcmFtbCBTdG9wIG1vZGUgKi8KKyAgICByZWcgPSBiYXNlLT5TVE9QQ1RSTDsKKyAgICByZWcgJj0gflNNQ19TVE9QQ1RSTF9QU1RPUE9fTUFTSzsKKyAgICByZWcgfD0gKCh1aW50MzJfdClvcHRpb24gPDwgU01DX1NUT1BDVFJMX1BTVE9QT19TSElGVCk7CisgICAgYmFzZS0+U1RPUENUUkwgPSByZWc7CisjZW5kaWYKKworICAgIC8qIGNvbmZpZ3VyZSBOb3JtYWwgU3RvcCBtb2RlICovCisgICAgcmVnID0gYmFzZS0+UE1DVFJMOworICAgIHJlZyAmPSB+U01DX1BNQ1RSTF9TVE9QTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19TdG9wTm9ybWFsIDw8IFNNQ19QTUNUUkxfU1RPUE1fU0hJRlQpOworICAgIGJhc2UtPlBNQ1RSTCA9IHJlZzsKKworICAgIC8qIFNldCB0aGUgU0xFRVBERUVQIGJpdCB0byBlbmFibGUgZGVlcCBzbGVlcCBtb2RlIChzdG9wIG1vZGUpICovCisgICAgU0NCLT5TQ1IgfD0gU0NCX1NDUl9TTEVFUERFRVBfTXNrOworCisgICAgLyogcmVhZCBiYWNrIHRvIG1ha2Ugc3VyZSB0aGUgY29uZmlndXJhdGlvbiB2YWxpZCBiZWZvcmUgZW50ZXIgc3RvcCBtb2RlICovCisgICAgKHZvaWQpYmFzZS0+UE1DVFJMOworICAgIF9fRFNCKCk7CisgICAgX19XRkkoKTsKKyAgICBfX0lTQigpOworCisgICAgLyogY2hlY2sgd2hldGhlciB0aGUgcG93ZXIgbW9kZSBlbnRlciBTdG9wIG1vZGUgc3VjY2VlZCAqLworICAgIGlmIChiYXNlLT5QTUNUUkwgJiBTTUNfUE1DVFJMX1NUT1BBX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TTUNfU3RvcEFib3J0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgIH0KK30KKworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVZscHIoU01DX1R5cGUgKmJhc2UKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xQV1VJKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQV1VJKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3YWtldXBNb2RlCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyAgICB1aW50OF90IHJlZzsKKworICAgIHJlZyA9IGJhc2UtPlBNQ1RSTDsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xQV1VJKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQV1VJKQorICAgIC8qIGNvbmZpZ3VyZSB3aGV0aGVyIHRoZSBzeXN0ZW0gcmVtYWlucyBpbiBWTFAgbW9kZSBvbiBhbiBpbnRlcnJ1cHQgKi8KKyAgICBpZiAod2FrZXVwTW9kZSkKKyAgICB7CisgICAgICAgIC8qIGV4aXRzIHRvIFJVTiBtb2RlIG9uIGFuIGludGVycnVwdCAqLworICAgICAgICByZWcgfD0gU01DX1BNQ1RSTF9MUFdVSV9NQVNLOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiByZW1haW5zIGluIFZMUCBtb2RlIG9uIGFuIGludGVycnVwdCAqLworICAgICAgICByZWcgJj0gflNNQ19QTUNUUkxfTFBXVUlfTUFTSzsKKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSAqLworCisgICAgLyogY29uZmlndXJlIFZMUFIgbW9kZSAqLworICAgIHJlZyAmPSB+U01DX1BNQ1RSTF9SVU5NX01BU0s7CisgICAgcmVnIHw9IChrU01DX1J1blZscHIgPDwgU01DX1BNQ1RSTF9SVU5NX1NISUZUKTsKKyAgICBiYXNlLT5QTUNUUkwgPSByZWc7CisKKyAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworfQorCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlVmxwdyhTTUNfVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBjb25maWd1cmUgVkxQVyBtb2RlICovCisgICAgLyogU2V0IHRoZSBTTEVFUERFRVAgYml0IHRvIGVuYWJsZSBkZWVwIHNsZWVwIG1vZGUgKi8KKyAgICBTQ0ItPlNDUiAmPSB+U0NCX1NDUl9TTEVFUERFRVBfTXNrOworICAgIF9fRFNCKCk7CisgICAgX19XRkkoKTsKKyAgICBfX0lTQigpOworCisgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKK30KKworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVZscHMoU01DX1R5cGUgKmJhc2UpCit7CisgICAgdWludDhfdCByZWc7CisKKyAgICAvKiBjb25maWd1cmUgVkxQUyBtb2RlICovCisgICAgcmVnID0gYmFzZS0+UE1DVFJMOworICAgIHJlZyAmPSB+U01DX1BNQ1RSTF9TVE9QTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19TdG9wVmxwcyA8PCBTTUNfUE1DVFJMX1NUT1BNX1NISUZUKTsKKyAgICBiYXNlLT5QTUNUUkwgPSByZWc7CisKKyAgICAvKiBTZXQgdGhlIFNMRUVQREVFUCBiaXQgdG8gZW5hYmxlIGRlZXAgc2xlZXAgbW9kZSAqLworICAgIFNDQi0+U0NSIHw9IFNDQl9TQ1JfU0xFRVBERUVQX01zazsKKworICAgIC8qIHJlYWQgYmFjayB0byBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWQgYmVmb3JlIGVudGVyIHN0b3AgbW9kZSAqLworICAgICh2b2lkKWJhc2UtPlBNQ1RSTDsKKyAgICBfX0RTQigpOworICAgIF9fV0ZJKCk7CisgICAgX19JU0IoKTsKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHBvd2VyIG1vZGUgZW50ZXIgVkxQUyBtb2RlIHN1Y2NlZWQgKi8KKyAgICBpZiAoYmFzZS0+UE1DVFJMICYgU01DX1BNQ1RSTF9TVE9QQV9NQVNLKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU01DX1N0b3BBYm9ydDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtTdGF0dXNfU3VjY2VzczsKKyAgICB9Cit9CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlTGxzKFNNQ19UeXBlICpiYXNlCisjaWYgKChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpIHx8IFwKKyAgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc21jX3Bvd2VyX21vZGVfbGxzX2NvbmZpZ190ICpjb25maWcKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgICAgdWludDhfdCByZWc7CisKKyAgICAvKiBjb25maWd1cmUgdG8gTExTIG1vZGUgKi8KKyAgICByZWcgPSBiYXNlLT5QTUNUUkw7CisgICAgcmVnICY9IH5TTUNfUE1DVFJMX1NUT1BNX01BU0s7CisgICAgcmVnIHw9IChrU01DX1N0b3BMbHMgPDwgU01DX1BNQ1RSTF9TVE9QTV9TSElGVCk7CisgICAgYmFzZS0+UE1DVFJMID0gcmVnOworCisvKiBjb25maWd1cmUgTExTIHN1Yi1tb2RlKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKQorICAgIHJlZyA9IGJhc2UtPlNUT1BDVFJMOworICAgIHJlZyAmPSB+U01DX1NUT1BDVFJMX0xMU01fTUFTSzsKKyAgICByZWcgfD0gKCh1aW50MzJfdCljb25maWctPnN1Yk1vZGUgPDwgU01DX1NUT1BDVFJMX0xMU01fU0hJRlQpOworICAgIGJhc2UtPlNUT1BDVFJMID0gcmVnOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pCisgICAgaWYgKGNvbmZpZy0+ZW5hYmxlTHBvQ2xvY2spCisgICAgeworICAgICAgICBiYXNlLT5TVE9QQ1RSTCAmPSB+U01DX1NUT1BDVFJMX0xQT1BPX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlNUT1BDVFJMIHw9IFNNQ19TVE9QQ1RSTF9MUE9QT19NQVNLOworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPICovCisKKyAgICAvKiBTZXQgdGhlIFNMRUVQREVFUCBiaXQgdG8gZW5hYmxlIGRlZXAgc2xlZXAgbW9kZSAqLworICAgIFNDQi0+U0NSIHw9IFNDQl9TQ1JfU0xFRVBERUVQX01zazsKKworICAgIC8qIHJlYWQgYmFjayB0byBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWQgYmVmb3JlIGVudGVyIHN0b3AgbW9kZSAqLworICAgICh2b2lkKWJhc2UtPlBNQ1RSTDsKKyAgICBfX0RTQigpOworICAgIF9fV0ZJKCk7CisgICAgX19JU0IoKTsKKworICAgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHBvd2VyIG1vZGUgZW50ZXIgTExTIG1vZGUgc3VjY2VlZCAqLworICAgIGlmIChiYXNlLT5QTUNUUkwgJiBTTUNfUE1DVFJMX1NUT1BBX01BU0spCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TTUNfU3RvcEFib3J0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19TdWNjZXNzOworICAgIH0KK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbGxzKFNNQ19UeXBlICpiYXNlLCBjb25zdCBzbWNfcG93ZXJfbW9kZV92bGxzX2NvbmZpZ190ICpjb25maWcpCit7CisgICAgdWludDhfdCByZWc7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1BPUlBPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BPUlBPKQorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgfHwgICAgIFwKKyAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1NUT1BDVFJMX1ZMTFNNKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1NUT1BDVFJMX1ZMTFNNKSB8fCBcCisgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkKKyAgICBpZiAoY29uZmlnLT5zdWJNb2RlID09IGtTTUNfU3RvcFN1YjApCisjZW5kaWYKKyAgICB7CisgICAgICAgIC8qIGNvbmZpZ3VyZSB3aGV0aGVyIHRoZSBQb3IgRGV0ZWN0IHdvcmsgaW4gVmxsczAgbW9kZSAqLworICAgICAgICBpZiAoY29uZmlnLT5lbmFibGVQb3JEZXRlY3RJblZsbHMwKQorICAgICAgICB7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpICYmIEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKQorICAgICAgICAgICAgYmFzZS0+VkxMU0NUUkwgJj0gflNNQ19WTExTQ1RSTF9QT1JQT19NQVNLOworI2Vsc2UKKyAgICAgICAgICAgIGJhc2UtPlNUT1BDVFJMICY9IH5TTUNfU1RPUENUUkxfUE9SUE9fTUFTSzsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykKKyAgICAgICAgICAgIGJhc2UtPlZMTFNDVFJMIHw9IFNNQ19WTExTQ1RSTF9QT1JQT19NQVNLOworI2Vsc2UKKyAgICAgICAgICAgIGJhc2UtPlNUT1BDVFJMIHw9IFNNQ19TVE9QQ1RSTF9QT1JQT19NQVNLOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19QT1JQTyAqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19SQU0yX1BPV0VSX09QVElPTikgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19SQU0yX1BPV0VSX09QVElPTikKKyAgICBlbHNlIGlmIChjb25maWctPnN1Yk1vZGUgPT0ga1NNQ19TdG9wU3ViMikKKyAgICB7CisgICAgICAgIC8qIGNvbmZpZ3VyZSB3aGV0aGVyIHRoZSBQb3IgRGV0ZWN0IHdvcmsgaW4gVmxsczAgbW9kZSAqLworICAgICAgICBpZiAoY29uZmlnLT5lbmFibGVSYW0ySW5WbGxzMikKKyAgICAgICAgeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykKKyAgICAgICAgICAgIGJhc2UtPlZMTFNDVFJMIHw9IFNNQ19WTExTQ1RSTF9SQU0yUE9fTUFTSzsKKyNlbHNlCisgICAgICAgICAgICBiYXNlLT5TVE9QQ1RSTCB8PSBTTUNfU1RPUENUUkxfUkFNMlBPX01BU0s7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpCisgICAgICAgICAgICBiYXNlLT5WTExTQ1RSTCAmPSB+U01DX1ZMTFNDVFJMX1JBTTJQT19NQVNLOworI2Vsc2UKKyAgICAgICAgICAgIGJhc2UtPlNUT1BDVFJMICY9IH5TTUNfU1RPUENUUkxfUkFNMlBPX01BU0s7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgIH0KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1JBTTJfUE9XRVJfT1BUSU9OICovCisKKyAgICAvKiBjb25maWd1cmUgdG8gVkxMUyBtb2RlICovCisgICAgcmVnID0gYmFzZS0+UE1DVFJMOworICAgIHJlZyAmPSB+U01DX1BNQ1RSTF9TVE9QTV9NQVNLOworICAgIHJlZyB8PSAoa1NNQ19TdG9wVmxscyA8PCBTTUNfUE1DVFJMX1NUT1BNX1NISUZUKTsKKyAgICBiYXNlLT5QTUNUUkwgPSByZWc7CisKKy8qIGNvbmZpZ3VyZSB0aGUgVkxMUyBzdWItbW9kZSAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykKKyAgICByZWcgPSBiYXNlLT5WTExTQ1RSTDsKKyAgICByZWcgJj0gflNNQ19WTExTQ1RSTF9WTExTTV9NQVNLOworICAgIHJlZyB8PSAoKHVpbnQzMl90KWNvbmZpZy0+c3ViTW9kZSA8PCBTTUNfVkxMU0NUUkxfVkxMU01fU0hJRlQpOworICAgIGJhc2UtPlZMTFNDVFJMID0gcmVnOworI2Vsc2UKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKQorICAgIHJlZyA9IGJhc2UtPlNUT1BDVFJMOworICAgIHJlZyAmPSB+U01DX1NUT1BDVFJMX0xMU01fTUFTSzsKKyAgICByZWcgfD0gKCh1aW50MzJfdCljb25maWctPnN1Yk1vZGUgPDwgU01DX1NUT1BDVFJMX0xMU01fU0hJRlQpOworICAgIGJhc2UtPlNUT1BDVFJMID0gcmVnOworI2Vsc2UKKyAgICByZWcgPSBiYXNlLT5TVE9QQ1RSTDsKKyAgICByZWcgJj0gflNNQ19TVE9QQ1RSTF9WTExTTV9NQVNLOworICAgIHJlZyB8PSAoKHVpbnQzMl90KWNvbmZpZy0+c3ViTW9kZSA8PCBTTUNfU1RPUENUUkxfVkxMU01fU0hJRlQpOworICAgIGJhc2UtPlNUT1BDVFJMID0gcmVnOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUgKi8KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykKKyAgICBpZiAoY29uZmlnLT5lbmFibGVMcG9DbG9jaykKKyAgICB7CisgICAgICAgIGJhc2UtPlNUT1BDVFJMICY9IH5TTUNfU1RPUENUUkxfTFBPUE9fTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+U1RPUENUUkwgfD0gU01DX1NUT1BDVFJMX0xQT1BPX01BU0s7CisgICAgfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8gKi8KKworICAgIC8qIFNldCB0aGUgU0xFRVBERUVQIGJpdCB0byBlbmFibGUgZGVlcCBzbGVlcCBtb2RlICovCisgICAgU0NCLT5TQ1IgfD0gU0NCX1NDUl9TTEVFUERFRVBfTXNrOworCisgICAgLyogcmVhZCBiYWNrIHRvIG1ha2Ugc3VyZSB0aGUgY29uZmlndXJhdGlvbiB2YWxpZCBiZWZvcmUgZW50ZXIgc3RvcCBtb2RlICovCisgICAgKHZvaWQpYmFzZS0+UE1DVFJMOworICAgIF9fRFNCKCk7CisgICAgX19XRkkoKTsKKyAgICBfX0lTQigpOworCisgICAgLyogY2hlY2sgd2hldGhlciB0aGUgcG93ZXIgbW9kZSBlbnRlciBMTFMgbW9kZSBzdWNjZWVkICovCisgICAgaWYgKGJhc2UtPlBNQ1RSTCAmIFNNQ19QTUNUUkxfU1RPUEFfTUFTSykKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX1NNQ19TdG9wQWJvcnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgfQorfQorI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NtYy5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfc21jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4Y2U4MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3NtYy5oCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlNMX1NNQ19IXworI2RlZmluZSBfRlNMX1NNQ19IXworCisjaW5jbHVkZSAiZnNsX2NvbW1vbi5oIgorCisvKiEgQGFkZHRvZ3JvdXAgc21jICovCisvKiEgQHsgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIFNNQyBkcml2ZXIgdmVyc2lvbiAyLjAuMy4gKi8KKyNkZWZpbmUgRlNMX1NNQ19EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDMpKQorLypAfSovCisKKy8qIQorICogQGJyaWVmIFBvd2VyIE1vZGVzIFByb3RlY3Rpb24KKyAqLwordHlwZWRlZiBlbnVtIF9zbWNfcG93ZXJfbW9kZV9wcm90ZWN0aW9uCit7CisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyAgICBrU01DX0FsbG93UG93ZXJNb2RlVmxscyA9IFNNQ19QTVBST1RfQVZMTFNfTUFTSywgLyohPCBBbGxvdyBWZXJ5LWxvdy1sZWFrYWdlIFN0b3AgTW9kZS4gKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyAgICBrU01DX0FsbG93UG93ZXJNb2RlTGxzID0gU01DX1BNUFJPVF9BTExTX01BU0ssIC8qITwgQWxsb3cgTG93LWxlYWthZ2UgU3RvcCBNb2RlLiAgICAgICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSAqLworICAgIGtTTUNfQWxsb3dQb3dlck1vZGVWbHAgPSBTTUNfUE1QUk9UX0FWTFBfTUFTSywgLyohPCBBbGxvdyBWZXJ5LUxvdy1wb3dlciBNb2RlLiAgICAgICAgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkKKyAgICBrU01DX0FsbG93UG93ZXJNb2RlSHNydW4gPSBTTUNfUE1QUk9UX0FIU1JVTl9NQVNLLCAvKiE8IEFsbG93IEhpZ2gtc3BlZWQgUnVuIG1vZGUuICAgICAgICAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAqLworICAgIGtTTUNfQWxsb3dQb3dlck1vZGVBbGwgPSAoMFUKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU01DX1BNUFJPVF9BVkxMU19NQVNLCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTUNfUE1QUk9UX0FMTFNfTUFTSworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTUNfUE1QUk9UX0FWTFBfTUFTSworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NNQ19BbGxvd1Bvd2VyTW9kZUhzcnVuCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvKiE8IEFsbG93IGFsbCBwb3dlciBtb2RlLiAgICAgICAgICAgICAgKi8KK30gc21jX3Bvd2VyX21vZGVfcHJvdGVjdGlvbl90OworCisvKiEKKyAqIEBicmllZiBQb3dlciBNb2RlcyBpbiBQTVNUQVQKKyAqLwordHlwZWRlZiBlbnVtIF9zbWNfcG93ZXJfc3RhdGUKK3sKKyAgICBrU01DX1Bvd2VyU3RhdGVSdW4gPSAweDAxVSA8PCAwVSwgIC8qITwgMDAwMF8wMDAxIC0gQ3VycmVudCBwb3dlciBtb2RlIGlzIFJVTiAgICovCisgICAga1NNQ19Qb3dlclN0YXRlU3RvcCA9IDB4MDFVIDw8IDFVLCAvKiE8IDAwMDBfMDAxMCAtIEN1cnJlbnQgcG93ZXIgbW9kZSBpcyBTVE9QICAqLworICAgIGtTTUNfUG93ZXJTdGF0ZVZscHIgPSAweDAxVSA8PCAyVSwgLyohPCAwMDAwXzAxMDAgLSBDdXJyZW50IHBvd2VyIG1vZGUgaXMgVkxQUiAgKi8KKyAgICBrU01DX1Bvd2VyU3RhdGVWbHB3ID0gMHgwMVUgPDwgM1UsIC8qITwgMDAwMF8xMDAwIC0gQ3VycmVudCBwb3dlciBtb2RlIGlzIFZMUFcgICovCisgICAga1NNQ19Qb3dlclN0YXRlVmxwcyA9IDB4MDFVIDw8IDRVLCAvKiE8IDAwMDFfMDAwMCAtIEN1cnJlbnQgcG93ZXIgbW9kZSBpcyBWTFBTICAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyAgICBrU01DX1Bvd2VyU3RhdGVMbHMgPSAweDAxVSA8PCA1VSwgLyohPCAwMDEwXzAwMDAgLSBDdXJyZW50IHBvd2VyIG1vZGUgaXMgTExTICAgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorICAgIGtTTUNfUG93ZXJTdGF0ZVZsbHMgPSAweDAxVSA8PCA2VSwgLyohPCAwMTAwXzAwMDAgLSBDdXJyZW50IHBvd2VyIG1vZGUgaXMgVkxMUyAgKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKQorICAgIGtTTUNfUG93ZXJTdGF0ZUhzcnVuID0gMHgwMVUgPDwgN1UgLyohPCAxMDAwXzAwMDAgLSBDdXJyZW50IHBvd2VyIG1vZGUgaXMgSFNSVU4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSAqLworfSBzbWNfcG93ZXJfc3RhdGVfdDsKKworLyohCisgKiBAYnJpZWYgUnVuIG1vZGUgZGVmaW5pdGlvbgorICovCit0eXBlZGVmIGVudW0gX3NtY19ydW5fbW9kZQoreworICAgIGtTTUNfUnVuTm9ybWFsID0gMFUsIC8qITwgTm9ybWFsIFJVTiBtb2RlLiAgICAgICAgICAgICAqLworICAgIGtTTUNfUnVuVmxwciA9IDJVLCAgIC8qITwgVmVyeS1sb3ctcG93ZXIgUlVOIG1vZGUuICAgICAqLworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfSElHSF9TUEVFRF9SVU5fTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKQorICAgIGtTTUNfSHNydW4gPSAzVSAvKiE8IEhpZ2gtc3BlZWQgUnVuIG1vZGUgKEhTUlVOKS4gKi8KKyNlbmRpZiAgICAgICAgICAgICAgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFICovCit9IHNtY19ydW5fbW9kZV90OworCisvKiEKKyAqIEBicmllZiBTdG9wIG1vZGUgZGVmaW5pdGlvbgorICovCit0eXBlZGVmIGVudW0gX3NtY19zdG9wX21vZGUKK3sKKyAgICBrU01DX1N0b3BOb3JtYWwgPSAwVSwgLyohPCBOb3JtYWwgU1RPUCBtb2RlLiAgICAgICAgICAgKi8KKyAgICBrU01DX1N0b3BWbHBzID0gMlUsICAgLyohPCBWZXJ5LWxvdy1wb3dlciBTVE9QIG1vZGUuICAgKi8KKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUpCisgICAga1NNQ19TdG9wTGxzID0gM1UsIC8qITwgTG93LWxlYWthZ2UgU3RvcCBtb2RlLiAgICAgICovCisjZW5kaWYgICAgICAgICAgICAgICAgIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFICovCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJZX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyAgICBrU01DX1N0b3BWbGxzID0gNFUgLyohPCBWZXJ5LWxvdy1sZWFrYWdlIFN0b3AgbW9kZS4gKi8KKyNlbmRpZgorfSBzbWNfc3RvcF9tb2RlX3Q7CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9WTExTQ1RSTF9SRUcpIHx8ICAgICBcCisgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSkgJiYgRlNMX0ZFQVRVUkVfU01DX1VTRV9TVE9QQ1RSTF9WTExTTSkgfHwgXAorICAgIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTExTX1NVQk1PREUpCisvKiEKKyAqIEBicmllZiBWTExTL0xMUyBzdG9wIHN1YiBtb2RlIGRlZmluaXRpb24KKyAqLwordHlwZWRlZiBlbnVtIF9zbWNfc3RvcF9zdWJtb2RlCit7CisgICAga1NNQ19TdG9wU3ViMCA9IDBVLCAvKiE8IFN0b3Agc3VibW9kZSAwLCBmb3IgVkxMUzAvTExTMC4gKi8KKyAgICBrU01DX1N0b3BTdWIxID0gMVUsIC8qITwgU3RvcCBzdWJtb2RlIDEsIGZvciBWTExTMS9MTFMxLiAqLworICAgIGtTTUNfU3RvcFN1YjIgPSAyVSwgLyohPCBTdG9wIHN1Ym1vZGUgMiwgZm9yIFZMTFMyL0xMUzIuICovCisgICAga1NNQ19TdG9wU3ViMyA9IDNVICAvKiE8IFN0b3Agc3VibW9kZSAzLCBmb3IgVkxMUzMvTExTMy4gKi8KK30gc21jX3N0b3Bfc3VibW9kZV90OworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIFBhcnRpYWwgU1RPUCBvcHRpb24KKyAqLwordHlwZWRlZiBlbnVtIF9zbWNfcGFydGlhbF9zdG9wX21vZGUKK3sKKyAgICBrU01DX1BhcnRpYWxTdG9wID0gMFUsICAvKiE8IFNUT1AgLSBOb3JtYWwgU3RvcCBtb2RlKi8KKyAgICBrU01DX1BhcnRpYWxTdG9wMSA9IDFVLCAvKiE8IFBhcnRpYWwgU3RvcCB3aXRoIGJvdGggc3lzdGVtIGFuZCBidXMgY2xvY2tzIGRpc2FibGVkKi8KKyAgICBrU01DX1BhcnRpYWxTdG9wMiA9IDJVLCAvKiE8IFBhcnRpYWwgU3RvcCB3aXRoIHN5c3RlbSBjbG9jayBkaXNhYmxlZCBhbmQgYnVzIGNsb2NrIGVuYWJsZWQqLworfSBzbWNfcGFydGlhbF9zdG9wX29wdGlvbl90OworCisvKiEKKyAqIEBicmllZiBTTUMgY29uZmlndXJhdGlvbiBzdGF0dXMuCisgKi8KK2VudW0gX3NtY19zdGF0dXMKK3sKKyAgICBrU3RhdHVzX1NNQ19TdG9wQWJvcnQgPSBNQUtFX1NUQVRVUyhrU3RhdHVzR3JvdXBfUE9XRVIsIDApIC8qITwgRW50ZXJpbmcgU3RvcCBtb2RlIGlzIGFib3J0Ki8KK307CisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUklEKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUklEKQorLyohCisgKiBAYnJpZWYgSVAgdmVyc2lvbiBJRCBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfc21jX3ZlcnNpb25faWQKK3sKKyAgICB1aW50MTZfdCBmZWF0dXJlOyAvKiE8IEZlYXR1cmUgU3BlY2lmaWNhdGlvbiBOdW1iZXIuICovCisgICAgdWludDhfdCBtaW5vcjsgICAgLyohPCBNaW5vciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAqLworICAgIHVpbnQ4X3QgbWFqb3I7ICAgIC8qITwgTWFqb3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgKi8KK30gc21jX3ZlcnNpb25faWRfdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUklEICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNKQorLyohCisgKiBAYnJpZWYgSVAgcGFyYW1ldGVyIGRlZmluaXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9zbWNfcGFyYW0KK3sKKyAgICBib29sIGhzcnVuRW5hYmxlOyAvKiE8IEhTUlVOIG1vZGUgZW5hYmxlLiAqLworICAgIGJvb2wgbGxzRW5hYmxlOyAgIC8qITwgTExTIG1vZGUgZW5hYmxlLiAgICovCisgICAgYm9vbCBsbHMyRW5hYmxlOyAgLyohPCBMTFMyIG1vZGUgZW5hYmxlLiAgKi8KKyAgICBib29sIHZsbHMwRW5hYmxlOyAvKiE8IFZMTFMwIG1vZGUgZW5hYmxlLiAqLworfSBzbWNfcGFyYW1fdDsKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSB8fCBcCisgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUE9QTykKKy8qIQorICogQGJyaWVmIFNNQyBMb3ctTGVha2FnZSBTdG9wIHBvd2VyIG1vZGUgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3NtY19wb3dlcl9tb2RlX2xsc19jb25maWcKK3sKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFKQorICAgIHNtY19zdG9wX3N1Ym1vZGVfdCBzdWJNb2RlOyAvKiE8IExvdy1sZWFrYWdlIFN0b3Agc3ViLW1vZGUgKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pCisgICAgYm9vbCBlbmFibGVMcG9DbG9jazsgLyohPCBFbmFibGUgTFBPIGNsb2NrIGluIExMUyBtb2RlICovCisjZW5kaWYKK30gc21jX3Bvd2VyX21vZGVfbGxzX2NvbmZpZ190OworI2VuZGlmIC8qIChGU0xfRkVBVFVSRV9TTUNfSEFTX0xMU19TVUJNT0RFIHx8IEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUllfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKQorLyohCisgKiBAYnJpZWYgU01DIFZlcnkgTG93LUxlYWthZ2UgU3RvcCBwb3dlciBtb2RlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IF9zbWNfcG93ZXJfbW9kZV92bGxzX2NvbmZpZworeworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19VU0VfVkxMU0NUUkxfUkVHKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1ZMTFNDVFJMX1JFRykgfHwgICAgIFwKKyAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfVVNFX1NUT1BDVFJMX1ZMTFNNKSAmJiBGU0xfRkVBVFVSRV9TTUNfVVNFX1NUT1BDVFJMX1ZMTFNNKSB8fCBcCisgICAgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkKKyAgICBzbWNfc3RvcF9zdWJtb2RlX3Qgc3ViTW9kZTsgLyohPCBWZXJ5IExvdy1sZWFrYWdlIFN0b3Agc3ViLW1vZGUgKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfUE9SUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfUE9SUE8pCisgICAgYm9vbCBlbmFibGVQb3JEZXRlY3RJblZsbHMwOyAvKiE8IEVuYWJsZSBQb3dlciBvbiByZXNldCBkZXRlY3QgaW4gVkxMUyBtb2RlICovCisjZW5kaWYKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1JBTTJfUE9XRVJfT1BUSU9OKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1JBTTJfUE9XRVJfT1BUSU9OKQorICAgIGJvb2wgZW5hYmxlUmFtMkluVmxsczI7IC8qITwgRW5hYmxlIFJBTTIgcG93ZXIgaW4gVkxMUzIgKi8KKyNlbmRpZgorI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBPUE8pCisgICAgYm9vbCBlbmFibGVMcG9DbG9jazsgLyohPCBFbmFibGUgTFBPIGNsb2NrIGluIFZMTFMgbW9kZSAqLworI2VuZGlmCit9IHNtY19wb3dlcl9tb2RlX3ZsbHNfY29uZmlnX3Q7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEgQG5hbWUgU3lzdGVtIG1vZGUgY29udHJvbGxlciBBUElzKi8KKy8qQHsqLworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19WRVJJRCkKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFNNQyB2ZXJzaW9uIElELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgU01DIHZlcnNpb24gSUQsIGluY2x1ZGluZyBtYWpvciB2ZXJzaW9uIG51bWJlciwKKyAqIG1pbm9yIHZlcnNpb24gbnVtYmVyLCBhbmQgZmVhdHVyZSBzcGVjaWZpY2F0aW9uIG51bWJlci4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gdmVyc2lvbklkICAgICBQb2ludGVyIHRvIHRoZSB2ZXJzaW9uIElEIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFNNQ19HZXRWZXJzaW9uSWQoU01DX1R5cGUgKmJhc2UsIHNtY192ZXJzaW9uX2lkX3QgKnZlcnNpb25JZCkKK3sKKyAgICAqKCh1aW50MzJfdCAqKXZlcnNpb25JZCkgPSBiYXNlLT5WRVJJRDsKK30KKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TTUNfSEFTX1ZFUklEICovCisKKyNpZiAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX1BBUkFNKQorLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgU01DIHBhcmFtZXRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFNNQyBwYXJhbWV0ZXIgaW5jbHVkaW5nIHRoZSBlbmFibGVkIHBvd2VyIG1kb2VzLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBwYXJhbSAgICAgICAgIFBvaW50ZXIgdG8gdGhlIFNNQyBwYXJhbSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgU01DX0dldFBhcmFtKFNNQ19UeXBlICpiYXNlLCBzbWNfcGFyYW1fdCAqcGFyYW0pOworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgYWxsIHBvd2VyIG1vZGUgcHJvdGVjdGlvbiBzZXR0aW5ncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICBjb25maWd1cmVzIHRoZSBwb3dlciBtb2RlIHByb3RlY3Rpb24gc2V0dGluZ3MgZm9yCisgKiBzdXBwb3J0ZWQgcG93ZXIgbW9kZXMgaW4gdGhlIHNwZWNpZmllZCBjaGlwIGZhbWlseS4gVGhlIGF2YWlsYWJsZSBwb3dlciBtb2RlcworICogYXJlIGRlZmluZWQgaW4gdGhlIHNtY19wb3dlcl9tb2RlX3Byb3RlY3Rpb25fdC4gVGhpcyBzaG91bGQgYmUgZG9uZSBhdCBhbiBlYXJseQorICogc3lzdGVtIGxldmVsIGluaXRpYWxpemF0aW9uIHN0YWdlLiBTZWUgdGhlIHJlZmVyZW5jZSBtYW51YWwgZm9yIGRldGFpbHMuCisgKiBUaGlzIHJlZ2lzdGVyIGNhbiBvbmx5IHdyaXRlIG9uY2UgYWZ0ZXIgdGhlIHBvd2VyIHJlc2V0LgorICoKKyAqIFRoZSBhbGxvd2VkIG1vZGVzIGFyZSBwYXNzZWQgYXMgYml0IG1hcC4gRm9yIGV4YW1wbGUsIHRvIGFsbG93IExMUyBhbmQgVkxMUywKKyAqIHVzZSBTTUNfU2V0UG93ZXJNb2RlUHJvdGVjdGlvbihrU01DX0FsbG93UG93ZXJNb2RlVmxscyB8IGtTTUNfQWxsb3dQb3dlck1vZGVWbHBzKS4KKyAqIFRvIGFsbG93IGFsbCBtb2RlcywgdXNlIFNNQ19TZXRQb3dlck1vZGVQcm90ZWN0aW9uKGtTTUNfQWxsb3dQb3dlck1vZGVBbGwpLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSBhbGxvd2VkTW9kZXMgQml0bWFwIG9mIHRoZSBhbGxvd2VkIHBvd2VyIG1vZGVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgU01DX1NldFBvd2VyTW9kZVByb3RlY3Rpb24oU01DX1R5cGUgKmJhc2UsIHVpbnQ4X3QgYWxsb3dlZE1vZGVzKQoreworICAgIGJhc2UtPlBNUFJPVCA9IGFsbG93ZWRNb2RlczsKK30KKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgY3VycmVudCBwb3dlciBtb2RlIHN0YXR1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uICByZXR1cm5zIHRoZSBjdXJyZW50IHBvd2VyIG1vZGUgc3RhdHVzLiBBZnRlciB0aGUgYXBwbGljYXRpb24KKyAqIHN3aXRjaGVzIHRoZSBwb3dlciBtb2RlLCBpdCBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBzdGF0dXMgdG8gY2hlY2sgd2hldGhlciBpdAorICogcnVucyBpbnRvIHRoZSBzcGVjaWZpZWQgbW9kZSBvciBub3QuIFRoZSBhcHBsaWNhdGlvbiAgc2hvdWxkICBjaGVjaworICogdGhpcyBtb2RlIGJlZm9yZSBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgbW9kZS4gVGhlIHN5c3RlbSAgcmVxdWlyZXMgdGhhdAorICogb25seSBjZXJ0YWluIG1vZGVzIGNhbiBzd2l0Y2ggdG8gb3RoZXIgc3BlY2lmaWMgbW9kZXMuIFNlZSB0aGUKKyAqIHJlZmVyZW5jZSBtYW51YWwgZm9yIGRldGFpbHMgYW5kIHRoZSBzbWNfcG93ZXJfc3RhdGVfdCBmb3IgaW5mb3JtYXRpb24gYWJvdXQKKyAqIHRoZSBwb3dlciBzdGF0dXMuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBDdXJyZW50IHBvd2VyIG1vZGUgc3RhdHVzLgorICovCitzdGF0aWMgaW5saW5lIHNtY19wb3dlcl9zdGF0ZV90IFNNQ19HZXRQb3dlck1vZGVTdGF0ZShTTUNfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKHNtY19wb3dlcl9zdGF0ZV90KWJhc2UtPlBNU1RBVDsKK30KKworLyohCisgKiBAYnJpZWYgUHJlcGFyZXMgdG8gZW50ZXIgc3RvcCBtb2Rlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGVudGVyaW5nIFNUT1AvVkxQUy9MTFMvVkxMUyBtb2Rlcy4KKyAqLwordm9pZCBTTUNfUHJlRW50ZXJTdG9wTW9kZXModm9pZCk7CisKKy8qIQorICogQGJyaWVmIFJlY292ZXJzIGFmdGVyIHdha2UgdXAgZnJvbSBzdG9wIG1vZGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB3YWtlIHVwIGZyb20gU1RPUC9WTFBTL0xMUy9WTExTIG1vZGVzLgorICogSXQgaXMgdXNlZCB3aXRoIEByZWYgU01DX1ByZUVudGVyU3RvcE1vZGVzLgorICovCit2b2lkIFNNQ19Qb3N0RXhpdFN0b3BNb2Rlcyh2b2lkKTsKKworLyohCisgKiBAYnJpZWYgUHJlcGFyZXMgdG8gZW50ZXIgd2FpdCBtb2Rlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGVudGVyaW5nIFdBSVQvVkxQVyBtb2Rlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFNNQ19QcmVFbnRlcldhaXRNb2Rlcyh2b2lkKQoreworICAgIF9fZGlzYWJsZV9pcnEoKTsKKyAgICBfX0lTQigpOworfQorCisvKiEKKyAqIEBicmllZiBSZWNvdmVycyBhZnRlciB3YWtlIHVwIGZyb20gc3RvcCBtb2Rlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgd2FrZSB1cCBmcm9tIFdBSVQvVkxQVyBtb2Rlcy4KKyAqIEl0IGlzIHVzZWQgd2l0aCBAcmVmIFNNQ19QcmVFbnRlcldhaXRNb2Rlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFNNQ19Qb3N0RXhpdFdhaXRNb2Rlcyh2b2lkKQoreworICAgIF9fZW5hYmxlX2lycSgpOworICAgIF9fSVNCKCk7Cit9CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBSVU4gcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVSdW4oU01DX1R5cGUgKmJhc2UpOworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0hJR0hfU1BFRURfUlVOX01PREUpCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gSFNSVU4gcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVIc3J1bihTTUNfVHlwZSAqYmFzZSk7CisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19ISUdIX1NQRUVEX1JVTl9NT0RFICovCisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBXQUlUIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlV2FpdChTTUNfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBTdG9wIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICBvcHRpb24gUGFydGlhbCBTdG9wIG1vZGUgb3B0aW9uLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlU3RvcChTTUNfVHlwZSAqYmFzZSwgc21jX3BhcnRpYWxfc3RvcF9vcHRpb25fdCBvcHRpb24pOworCisjaWYgKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MUFdVSSkKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBWTFBSIHBvd2VyIG1vZGUuCisgKgorICogQHBhcmFtIGJhc2UgU01DIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtICB3YWtldXBNb2RlIEVudGVyIE5vcm1hbCBSdW4gbW9kZSBpZiB0cnVlLCBlbHNlIHN0YXkgaW4gVkxQUiBtb2RlLgorICogQHJldHVybiBTTUMgY29uZmlndXJhdGlvbiBlcnJvciBjb2RlLgorICovCitzdGF0dXNfdCBTTUNfU2V0UG93ZXJNb2RlVmxwcihTTUNfVHlwZSAqYmFzZSwgYm9vbCB3YWtldXBNb2RlKTsKKyNlbHNlCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gVkxQUiBwb3dlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gU01DIGNvbmZpZ3VyYXRpb24gZXJyb3IgY29kZS4KKyAqLworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZVZscHIoU01DX1R5cGUgKmJhc2UpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfTFBXVUkgKi8KKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIHRvIFZMUFcgcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbHB3KFNNQ19UeXBlICpiYXNlKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgc3lzdGVtIHRvIFZMUFMgcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbHBzKFNNQ19UeXBlICpiYXNlKTsKKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfTE9XX0xFQUtBR0VfU1RPUF9NT0RFKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xPV19MRUFLQUdFX1NUT1BfTU9ERSkKKyNpZiAoKGRlZmluZWQoRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgJiYgRlNMX0ZFQVRVUkVfU01DX0hBU19MTFNfU1VCTU9ERSkgfHwgXAorICAgICAoZGVmaW5lZChGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKSAmJiBGU0xfRkVBVFVSRV9TTUNfSEFTX0xQT1BPKSkKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBMTFMgcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIGNvbmZpZyBUaGUgTExTIHBvd2VyIG1vZGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAqIEByZXR1cm4gU01DIGNvbmZpZ3VyYXRpb24gZXJyb3IgY29kZS4KKyAqLworc3RhdHVzX3QgU01DX1NldFBvd2VyTW9kZUxscyhTTUNfVHlwZSAqYmFzZSwgY29uc3Qgc21jX3Bvd2VyX21vZGVfbGxzX2NvbmZpZ190ICpjb25maWcpOworI2Vsc2UKKy8qIQorICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSB0byBMTFMgcG93ZXIgbW9kZS4KKyAqCisgKiBAcGFyYW0gYmFzZSBTTUMgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVMbHMoU01DX1R5cGUgKmJhc2UpOworI2VuZGlmCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU01DX0hBU19MT1dfTEVBS0FHRV9TVE9QX01PREUgKi8KKworI2lmIChkZWZpbmVkKEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpICYmIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUpCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBzeXN0ZW0gdG8gVkxMUyBwb3dlciBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlIFNNQyBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSAgY29uZmlnIFRoZSBWTExTIHBvd2VyIG1vZGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIFNNQyBjb25maWd1cmF0aW9uIGVycm9yIGNvZGUuCisgKi8KK3N0YXR1c190IFNNQ19TZXRQb3dlck1vZGVWbGxzKFNNQ19UeXBlICpiYXNlLCBjb25zdCBzbWNfcG93ZXJfbW9kZV92bGxzX2NvbmZpZ190ICpjb25maWcpOworI2VuZGlmIC8qIEZTTF9GRUFUVVJFX1NNQ19IQVNfVkVSWV9MT1dfTEVBS0FHRV9TVE9QX01PREUgKi8KKworLypAfSovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBfRlNMX1NNQ19IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHBtLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTM5MGEyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHBtLmMKQEAgLTAsMCArMSw3NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZnNsX3RwbS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRQTV9DT01CSU5FX1NISUZUICg4VSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvdHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBUUE0gaW5zdGFuY2UKKyAqLworc3RhdGljIHVpbnQzMl90IFRQTV9HZXRJbnN0YW5jZShUUE1fVHlwZSAqYmFzZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWYXJpYWJsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEgQGJyaWVmIFBvaW50ZXJzIHRvIFRQTSBiYXNlcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBUUE1fVHlwZSAqY29uc3Qgc190cG1CYXNlc1tdID0gVFBNX0JBU0VfUFRSUzsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKy8qISBAYnJpZWYgUG9pbnRlcnMgdG8gVFBNIGNsb2NrcyBmb3IgZWFjaCBpbnN0YW5jZS4gKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc190cG1DbG9ja3NbXSA9IFRQTV9DTE9DS1M7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVpbnQzMl90IFRQTV9HZXRJbnN0YW5jZShUUE1fVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBpbnN0YW5jZTsKKyAgICB1aW50MzJfdCB0cG1BcnJheUNvdW50ID0gKHNpemVvZihzX3RwbUJhc2VzKSAvIHNpemVvZihzX3RwbUJhc2VzWzBdKSk7CisKKyAgICAvKiBGaW5kIHRoZSBpbnN0YW5jZSBpbmRleCBmcm9tIGJhc2UgYWRkcmVzcyBtYXBwaW5ncy4gKi8KKyAgICBmb3IgKGluc3RhbmNlID0gMDsgaW5zdGFuY2UgPCB0cG1BcnJheUNvdW50OyBpbnN0YW5jZSsrKQorICAgIHsKKyAgICAgICAgaWYgKHNfdHBtQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgdHBtQXJyYXlDb3VudCk7CisKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgVFBNX0luaXQoVFBNX1R5cGUgKmJhc2UsIGNvbnN0IHRwbV9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgIC8qIEVuYWJsZSB0aGUgbW9kdWxlIGNsb2NrICovCisgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc190cG1DbG9ja3NbVFBNX0dldEluc3RhbmNlKGJhc2UpXSk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfR0xPQkFMKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0dMT0JBTAorICAgIC8qIFRQTSByZXNldCBpcyBhdmFpbGFibGUgb24gY2VydGFpbiBTb0MncyAqLworICAgIFRQTV9SZXNldChiYXNlKTsKKyNlbmRpZgorCisgICAgLyogU2V0IHRoZSBjbG9jayBwcmVzY2FsZSBmYWN0b3IgKi8KKyAgICBiYXNlLT5TQyA9IFRQTV9TQ19QUyhjb25maWctPnByZXNjYWxlKTsKKworICAgIC8qIFNldHVwIHRoZSBjb3VudGVyIG9wZXJhdGlvbiAqLworICAgIGJhc2UtPkNPTkYgPSBUUE1fQ09ORl9ET1pFRU4oY29uZmlnLT5lbmFibGVEb3plKSB8IFRQTV9DT05GX0dUQkVFTihjb25maWctPnVzZUdsb2JhbFRpbWVCYXNlKSB8CisgICAgICAgICAgICAgICAgIFRQTV9DT05GX0NST1QoY29uZmlnLT5lbmFibGVSZWxvYWRPblRyaWdnZXIpIHwgVFBNX0NPTkZfQ1NPVChjb25maWctPmVuYWJsZVN0YXJ0T25UcmlnZ2VyKSB8CisgICAgICAgICAgICAgICAgIFRQTV9DT05GX0NTT08oY29uZmlnLT5lbmFibGVTdG9wT25PdmVyZmxvdykgfAorI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19QQVVTRV9DT1VOVEVSX09OX1RSSUdHRVIpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFVU0VfQ09VTlRFUl9PTl9UUklHR0VSCisgICAgICAgICAgICAgICAgIFRQTV9DT05GX0NQT1QoY29uZmlnLT5lbmFibGVQYXVzZU9uVHJpZ2dlcikgfAorI2VuZGlmCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OCisgICAgICAgICAgICAgICAgIFRQTV9DT05GX1RSR1NSQyhjb25maWctPnRyaWdnZXJTb3VyY2UpIHwKKyNlbmRpZgorICAgICAgICAgICAgICAgICBUUE1fQ09ORl9UUkdTRUwoY29uZmlnLT50cmlnZ2VyU2VsZWN0KTsKKyAgICBpZiAoY29uZmlnLT5lbmFibGVEZWJ1Z01vZGUpCisgICAgeworICAgICAgICBiYXNlLT5DT05GIHw9IFRQTV9DT05GX0RCR01PREVfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+Q09ORiAmPSB+VFBNX0NPTkZfREJHTU9ERV9NQVNLOworICAgIH0KK30KKwordm9pZCBUUE1fRGVpbml0KFRQTV9UeXBlICpiYXNlKQoreworICAgIC8qIFN0b3AgdGhlIGNvdW50ZXIgKi8KKyAgICBiYXNlLT5TQyAmPSB+VFBNX1NDX0NNT0RfTUFTSzsKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgLyogR2F0ZSB0aGUgVFBNIGNsb2NrICovCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfdHBtQ2xvY2tzW1RQTV9HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworfQorCit2b2lkIFRQTV9HZXREZWZhdWx0Q29uZmlnKHRwbV9jb25maWdfdCAqY29uZmlnKQoreworICAgIGFzc2VydChjb25maWcpOworCisgICAgLyogVFBNIGNsb2NrIGRpdmlkZSBieSAxICovCisgICAgY29uZmlnLT5wcmVzY2FsZSA9IGtUUE1fUHJlc2NhbGVfRGl2aWRlXzE7CisgICAgLyogVXNlIGludGVybmFsIFRQTSBjb3VudGVyIGFzIHRpbWViYXNlICovCisgICAgY29uZmlnLT51c2VHbG9iYWxUaW1lQmFzZSA9IGZhbHNlOworICAgIC8qIFRQTSBjb3VudGVyIGNvbnRpbnVlcyBpbiBkb3plIG1vZGUgKi8KKyAgICBjb25maWctPmVuYWJsZURvemUgPSBmYWxzZTsKKyAgICAvKiBUUE0gY291bnRlciBwYXVzZXMgd2hlbiBpbiBkZWJ1ZyBtb2RlICovCisgICAgY29uZmlnLT5lbmFibGVEZWJ1Z01vZGUgPSBmYWxzZTsKKyAgICAvKiBUUE0gY291bnRlciB3aWxsIG5vdCBiZSByZWxvYWRlZCBvbiBpbnB1dCB0cmlnZ2VyICovCisgICAgY29uZmlnLT5lbmFibGVSZWxvYWRPblRyaWdnZXIgPSBmYWxzZTsKKyAgICAvKiBUUE0gY291bnRlciBjb250aW51ZXMgcnVubmluZyBhZnRlciBvdmVyZmxvdyAqLworICAgIGNvbmZpZy0+ZW5hYmxlU3RvcE9uT3ZlcmZsb3cgPSBmYWxzZTsKKyAgICAvKiBUUE0gY291bnRlciBzdGFydHMgaW1tZWRpYXRlbHkgb25jZSBpdCBpcyBlbmFibGVkICovCisgICAgY29uZmlnLT5lbmFibGVTdGFydE9uVHJpZ2dlciA9IGZhbHNlOworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19QQVVTRV9DT1VOVEVSX09OX1RSSUdHRVIpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFVU0VfQ09VTlRFUl9PTl9UUklHR0VSCisgICAgY29uZmlnLT5lbmFibGVQYXVzZU9uVHJpZ2dlciA9IGZhbHNlOworI2VuZGlmCisgICAgLyogQ2hvb3NlIHRyaWdnZXIgc2VsZWN0IDAgYXMgaW5wdXQgdHJpZ2dlciBmb3IgY29udHJvbGxpbmcgY291bnRlciBvcGVyYXRpb24gKi8KKyAgICBjb25maWctPnRyaWdnZXJTZWxlY3QgPSBrVFBNX1RyaWdnZXJfU2VsZWN0XzA7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OCisgICAgLyogQ2hvb3NlIGV4dGVybmFsIHRyaWdnZXIgc291cmNlIHRvIGNvbnRyb2wgY291bnRlciBvcGVyYXRpb24gKi8KKyAgICBjb25maWctPnRyaWdnZXJTb3VyY2UgPSBrVFBNX1RyaWdnZXJTb3VyY2VfRXh0ZXJuYWw7CisjZW5kaWYKK30KKworc3RhdHVzX3QgVFBNX1NldHVwUHdtKFRQTV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwbV9jaG5sX3B3bV9zaWduYWxfcGFyYW1fdCAqY2hubFBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG51bU9mQ2hubHMsCisgICAgICAgICAgICAgICAgICAgICAgdHBtX3B3bV9tb2RlX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwd21GcmVxX0h6LAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0Nsb2NrX0h6KQoreworICAgIGFzc2VydChjaG5sUGFyYW1zKTsKKyAgICBhc3NlcnQocHdtRnJlcV9Ieik7CisgICAgYXNzZXJ0KG51bU9mQ2hubHMpOworICAgIGFzc2VydChzcmNDbG9ja19Ieik7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorICAgIGlmKG1vZGUgPT0ga1RQTV9Db21iaW5lZFB3bSkKKyAgICB7CisgICAgICAgIGFzc2VydChGU0xfRkVBVFVSRV9UUE1fQ09NQklORV9IQVNfRUZGRUNUbihiYXNlKSk7CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MzJfdCBtb2Q7CisgICAgdWludDMyX3QgdHBtQ2xvY2sgPSAoc3JjQ2xvY2tfSHogLyAoMVUgPDwgKGJhc2UtPlNDICYgVFBNX1NDX1BTX01BU0spKSk7CisgICAgdWludDE2X3QgY252OworICAgIHVpbnQ4X3QgaTsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMCisgICAgLyogVGhlIFRQTSdzIFFEQ1RSTCByZWdpc3RlciByZXF1aXJlZCB0byBiZSBlZmZlY3RpdmUgKi8KKyAgICBpZiggRlNMX0ZFQVRVUkVfVFBNX1FEQ1RSTF9IQVNfRUZGRUNUbihiYXNlKSApCisgICAgeworICAgICAgICAvKiBDbGVhciBxdWFkcmF0dXJlIERlY29kZXIgbW9kZSBiZWNhdXNlIGluIHF1YWRyYXR1cmUgRGVjb2RlciBtb2RlIFBXTSBkb2Vzbid0IG9wZXJhdGUqLworICAgICAgICBiYXNlLT5RRENUUkwgJj0gflRQTV9RRENUUkxfUVVBREVOX01BU0s7CisgICAgfQorI2VuZGlmCisKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgICAgICBjYXNlIGtUUE1fRWRnZUFsaWduZWRQd206CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorICAgICAgICBjYXNlIGtUUE1fQ29tYmluZWRQd206CisjZW5kaWYKKyAgICAgICAgICAgIGJhc2UtPlNDICY9IH5UUE1fU0NfQ1BXTVNfTUFTSzsKKyAgICAgICAgICAgIG1vZCA9ICh0cG1DbG9jayAvIHB3bUZyZXFfSHopIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtUUE1fQ2VudGVyQWxpZ25lZFB3bToKKyAgICAgICAgICAgIGJhc2UtPlNDIHw9IFRQTV9TQ19DUFdNU19NQVNLOworICAgICAgICAgICAgbW9kID0gdHBtQ2xvY2sgLyAocHdtRnJlcV9IeiAqIDIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKworICAgIC8qIFJldHVybiBhbiBlcnJvciBpbiBjYXNlIHdlIG92ZXJmbG93IHRoZSByZWdpc3RlcnMsIHByb2JhYmx5IHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcKKyAgICAgKiBjbG9jayBzb3VyY2UgdG8gZ2V0IHRoZSBkZXNpcmVkIGZyZXF1ZW5jeSAqLworICAgIGlmIChtb2QgPiA2NTUzNVUpCisgICAgeworICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgIH0KKyAgICAvKiBTZXQgdGhlIFBXTSBwZXJpb2QgKi8KKyAgICBiYXNlLT5NT0QgPSBtb2Q7CisKKyAgICAvKiBTZXR1cCBlYWNoIFRQTSBjaGFubmVsICovCisgICAgZm9yIChpID0gMDsgaSA8IG51bU9mQ2hubHM7IGkrKykKKyAgICB7CisgICAgICAgIC8qIFJldHVybiBlcnJvciBpZiByZXF1ZXN0ZWQgZHV0eWN5Y2xlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IGFsbG93ZWQgKi8KKyAgICAgICAgaWYgKGNobmxQYXJhbXMtPmR1dHlDeWNsZVBlcmNlbnQgPiAxMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgICAgIH0KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgICAgIGlmIChtb2RlID09IGtUUE1fQ29tYmluZWRQd20pCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGNudkZpcnN0RWRnZTsKKworICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBhZGRlZCBmb3IgY29tYmluZWQgbW9kZSBhcyB0aGUgY2hhbm5lbCBudW1iZXIgc2hvdWxkIGJlIHRoZSBwYWlyIG51bWJlciAqLworICAgICAgICAgICAgaWYgKGNobmxQYXJhbXMtPmNobmxOdW1iZXIgPj0gKEZTTF9GRUFUVVJFX1RQTV9DSEFOTkVMX0NPVU5UbihiYXNlKSAvIDIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBrU3RhdHVzX0ZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFJldHVybiBlcnJvciBpZiByZXF1ZXN0ZWQgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggYWxsb3dlZCAqLworICAgICAgICAgICAgaWYgKGNobmxQYXJhbXMtPmZpcnN0RWRnZURlbGF5UGVyY2VudCA+IDEwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1N0YXR1c19GYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogQ29uZmlndXJlIGRlbGF5IG9mIHRoZSBmaXJzdCBlZGdlICovCisgICAgICAgICAgICBpZiAoY2hubFBhcmFtcy0+Zmlyc3RFZGdlRGVsYXlQZXJjZW50ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogTm8gZGVsYXkgZm9yIHRoZSBmaXJzdCBlZGdlICovCisgICAgICAgICAgICAgICAgY252Rmlyc3RFZGdlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbnZGaXJzdEVkZ2UgPSAobW9kICogY2hubFBhcmFtcy0+Zmlyc3RFZGdlRGVsYXlQZXJjZW50KSAvIDEwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSBkdXR5Y3ljbGUgKi8KKyAgICAgICAgICAgIGlmIChjaG5sUGFyYW1zLT5kdXR5Q3ljbGVQZXJjZW50ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2lnbmFsIHN0YXlzIGxvdyAqLworICAgICAgICAgICAgICAgIGNudiA9IDA7CisgICAgICAgICAgICAgICAgY252Rmlyc3RFZGdlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbnYgPSAobW9kICogY2hubFBhcmFtcy0+ZHV0eUN5Y2xlUGVyY2VudCkgLyAxMDA7CisgICAgICAgICAgICAgICAgLyogRm9yIDEwMCUgZHV0eSBjeWNsZSAqLworICAgICAgICAgICAgICAgIGlmIChjbnYgPj0gbW9kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY252ID0gbW9kICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFNldCB0aGUgY29tYmluZSBiaXQgZm9yIHRoZSBjaGFubmVsIHBhaXIgKi8KKyAgICAgICAgICAgIGJhc2UtPkNPTUJJTkUgfD0gKDFVIDw8IChUUE1fQ09NQklORV9DT01CSU5FMF9TSElGVCArIChUUE1fQ09NQklORV9TSElGVCAqIGNobmxQYXJhbXMtPmNobmxOdW1iZXIpKSk7CisKKyAgICAgICAgICAgIC8qIFdoZW4gc3dpdGNoaW5nIG1vZGUsIGRpc2FibGUgY2hhbm5lbCBuIGZpcnN0ICovCisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1tjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMl0uQ25TQyAmPQorICAgICAgICAgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAgICAgICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgICAgICAgICB3aGlsZSAoKGJhc2UtPkNPTlRST0xTW2NobmxQYXJhbXMtPmNobmxOdW1iZXIgKiAyXS5DblNDICYKKyAgICAgICAgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogU2V0IHRoZSByZXF1ZXN0ZWQgUFdNIG1vZGUgZm9yIGNoYW5uZWwgbiwgUFdNIG91dHB1dCByZXF1aXJlcyBtb2RlIHNlbGVjdCB0byBiZSBzZXQgdG8gMiAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDJdLkNuU0MgfD0KKyAgICAgICAgICAgICAgICAoKGNobmxQYXJhbXMtPmxldmVsIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpIHwgKDJVIDw8IFRQTV9DblNDX01TQV9TSElGVCkpOworCisgICAgICAgICAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgaXMgYWNrbm93bGVkZ2VkICovCisgICAgICAgICAgICB3aGlsZSAoIShiYXNlLT5DT05UUk9MU1tjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMl0uQ25TQyAmCisgICAgICAgICAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogU2V0IHRoZSBjaGFubmVsIHBhaXIgdmFsdWVzICovCisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1tjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMl0uQ25WID0gY252Rmlyc3RFZGdlOworCisgICAgICAgICAgICAvKiBXaGVuIHN3aXRjaGluZyBtb2RlLCBkaXNhYmxlIGNoYW5uZWwgbiArIDEgZmlyc3QgKi8KKyAgICAgICAgICAgIGJhc2UtPkNPTlRST0xTWyhjaG5sUGFyYW1zLT5jaG5sTnVtYmVyICogMikgKyAxXS5DblNDICY9CisgICAgICAgICAgICAgICAgfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgICAgICAgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIHRvIGRpc2FibGUgY2hhbm5lbCBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICAgICAgICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbKGNobmxQYXJhbXMtPmNobmxOdW1iZXIgKiAyKSArIDFdLkNuU0MgJgorICAgICAgICAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTZXQgdGhlIHJlcXVlc3RlZCBQV00gbW9kZSBmb3IgY2hhbm5lbCBuICsgMSwgUFdNIG91dHB1dCByZXF1aXJlcyBtb2RlIHNlbGVjdCB0byBiZSBzZXQgdG8gMiAqLworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbKGNobmxQYXJhbXMtPmNobmxOdW1iZXIgKiAyKSArIDFdLkNuU0MgfD0KKyAgICAgICAgICAgICAgICAoKGNobmxQYXJhbXMtPmxldmVsIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpIHwgKDJVIDw8IFRQTV9DblNDX01TQV9TSElGVCkpOworCisgICAgICAgICAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgaXMgYWNrbm93bGVkZ2VkICovCisgICAgICAgICAgICB3aGlsZSAoIShiYXNlLT5DT05UUk9MU1soY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDIpICsgMV0uQ25TQyAmCisgICAgICAgICAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogU2V0IHRoZSBjaGFubmVsIHBhaXIgdmFsdWVzICovCisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1soY2hubFBhcmFtcy0+Y2hubE51bWJlciAqIDIpICsgMV0uQ25WID0gY252Rmlyc3RFZGdlICsgY252OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2VuZGlmCisgICAgICAgICAgICBpZiAoY2hubFBhcmFtcy0+ZHV0eUN5Y2xlUGVyY2VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNpZ25hbCBzdGF5cyBsb3cgKi8KKyAgICAgICAgICAgICAgICBjbnYgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNudiA9IChtb2QgKiBjaG5sUGFyYW1zLT5kdXR5Q3ljbGVQZXJjZW50KSAvIDEwMDsKKyAgICAgICAgICAgICAgICAvKiBGb3IgMTAwJSBkdXR5IGN5Y2xlICovCisgICAgICAgICAgICAgICAgaWYgKGNudiA+PSBtb2QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjbnYgPSBtb2QgKyAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogV2hlbiBzd2l0Y2hpbmcgbW9kZSwgZGlzYWJsZSBjaGFubmVsIGZpcnN0ICovCisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1tjaG5sUGFyYW1zLT5jaG5sTnVtYmVyXS5DblNDICY9CisgICAgICAgICAgICAgICAgfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgICAgICAgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIHRvIGRpc2FibGUgY2hhbm5lbCBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICAgICAgICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlcl0uQ25TQyAmCisgICAgICAgICAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFNldCB0aGUgcmVxdWVzdGVkIFBXTSBtb2RlLCBQV00gb3V0cHV0IHJlcXVpcmVzIG1vZGUgc2VsZWN0IHRvIGJlIHNldCB0byAyICovCisgICAgICAgICAgICBiYXNlLT5DT05UUk9MU1tjaG5sUGFyYW1zLT5jaG5sTnVtYmVyXS5DblNDIHw9CisgICAgICAgICAgICAgICAgKChjaG5sUGFyYW1zLT5sZXZlbCA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSB8ICgyVSA8PCBUUE1fQ25TQ19NU0FfU0hJRlQpKTsKKworICAgICAgICAgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIGlzIGFja25vd2xlZGdlZCAqLworICAgICAgICAgICAgd2hpbGUgKCEoYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlcl0uQ25TQyAmCisgICAgICAgICAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhcmFtcy0+Y2hubE51bWJlcl0uQ25WID0gY252OworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2hubFBhcmFtcysrOworICAgIH0KKworICAgIHJldHVybiBrU3RhdHVzX1N1Y2Nlc3M7Cit9CisKK3ZvaWQgVFBNX1VwZGF0ZVB3bUR1dHljeWNsZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fY2hubF90IGNobmxOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX3B3bV9tb2RlX3QgY3VycmVudFB3bU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkdXR5Q3ljbGVQZXJjZW50KQoreworICAgIGFzc2VydChjaG5sTnVtYmVyIDwgRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKGJhc2UpKTsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgaWYoY3VycmVudFB3bU1vZGUgPT0ga1RQTV9Db21iaW5lZFB3bSkKKyAgICB7CisgICAgICAgIGFzc2VydChGU0xfRkVBVFVSRV9UUE1fQ09NQklORV9IQVNfRUZGRUNUbihiYXNlKSk7CisgICAgfQorI2VuZGlmCisKKyAgICB1aW50MTZfdCBjbnYsIG1vZDsKKworICAgIG1vZCA9IGJhc2UtPk1PRDsKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgaWYgKGN1cnJlbnRQd21Nb2RlID09IGtUUE1fQ29tYmluZWRQd20pCisgICAgeworICAgICAgICB1aW50MTZfdCBjbnZGaXJzdEVkZ2U7CisKKyAgICAgICAgLyogVGhpcyBjaGVjayBpcyBhZGRlZCBmb3IgY29tYmluZWQgbW9kZSBhcyB0aGUgY2hhbm5lbCBudW1iZXIgc2hvdWxkIGJlIHRoZSBwYWlyIG51bWJlciAqLworICAgICAgICBpZiAoY2hubE51bWJlciA+PSAoRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKGJhc2UpIC8gMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbnYgPSAobW9kICogZHV0eUN5Y2xlUGVyY2VudCkgLyAxMDA7CisgICAgICAgIGNudkZpcnN0RWRnZSA9IGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXIgKiAyXS5DblY7CisgICAgICAgIC8qIEZvciAxMDAlIGR1dHkgY3ljbGUgKi8KKyAgICAgICAgaWYgKGNudiA+PSBtb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNudiA9IG1vZCArIDE7CisgICAgICAgIH0KKyAgICAgICAgYmFzZS0+Q09OVFJPTFNbKGNobmxOdW1iZXIgKiAyKSArIDFdLkNuViA9IGNudkZpcnN0RWRnZSArIGNudjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgICBjbnYgPSAobW9kICogZHV0eUN5Y2xlUGVyY2VudCkgLyAxMDA7CisgICAgICAgIC8qIEZvciAxMDAlIGR1dHkgY3ljbGUgKi8KKyAgICAgICAgaWYgKGNudiA+PSBtb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNudiA9IG1vZCArIDE7CisgICAgICAgIH0KKyAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25WID0gY252OworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBUUE1fVXBkYXRlQ2hubEVkZ2VMZXZlbFNlbGVjdChUUE1fVHlwZSAqYmFzZSwgdHBtX2NobmxfdCBjaG5sTnVtYmVyLCB1aW50OF90IGxldmVsKQoreworICAgIGFzc2VydChjaG5sTnVtYmVyIDwgRlNMX0ZFQVRVUkVfVFBNX0NIQU5ORUxfQ09VTlRuKGJhc2UpKTsKKworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJiB+KFRQTV9DblNDX0NIRl9NQVNLKTsKKworICAgIC8qIFdoZW4gc3dpdGNoaW5nIG1vZGUsIGRpc2FibGUgY2hhbm5lbCBmaXJzdCAgKi8KKyAgICBiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICY9CisgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmCisgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9CisKKyAgICAvKiBDbGVhciB0aGUgZmllbGQgYW5kIHdyaXRlIHRoZSBuZXcgbGV2ZWwgdmFsdWUgKi8KKyAgICByZWcgJj0gfihUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworICAgIHJlZyB8PSAoKHVpbnQzMl90KWxldmVsIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpICYgKFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICBiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDID0gcmVnOworCisgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIGlzIGFja25vd2xlZGdlZCAqLworICAgIHJlZyAmPSAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisgICAgd2hpbGUgKHJlZyAhPSAoYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmCisgICAgICAgICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICB7CisgICAgfQorfQorCit2b2lkIFRQTV9TZXR1cElucHV0Q2FwdHVyZShUUE1fVHlwZSAqYmFzZSwgdHBtX2NobmxfdCBjaG5sTnVtYmVyLCB0cG1faW5wdXRfY2FwdHVyZV9lZGdlX3QgY2FwdHVyZU1vZGUpCit7CisgICAgYXNzZXJ0KGNobmxOdW1iZXIgPCBGU0xfRkVBVFVSRV9UUE1fQ0hBTk5FTF9DT1VOVG4oYmFzZSkpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwKKyAgICAvKiBUaGUgVFBNJ3MgUURDVFJMIHJlZ2lzdGVyIHJlcXVpcmVkIHRvIGJlIGVmZmVjdGl2ZSAqLworICAgIGlmKCBGU0xfRkVBVFVSRV9UUE1fUURDVFJMX0hBU19FRkZFQ1RuKGJhc2UpICkKKyAgICB7CisgICAgICAgIC8qIENsZWFyIHF1YWRyYXR1cmUgRGVjb2RlciBtb2RlIGZvciBjaGFubmVsIDAgb3IgMSovCisgICAgICAgIGlmICgoY2hubE51bWJlciA9PSAwKSB8fCAoY2hubE51bWJlciA9PSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+UURDVFJMICY9IH5UUE1fUURDVFJMX1FVQURFTl9NQVNLOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORSkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FCisgICAgICAgIC8qIFRoZSBUUE0ncyBDT01CSU5FIHJlZ2lzdGVyIHJlcXVpcmVkIHRvIGJlIGVmZmVjdGl2ZSAqLworICAgIGlmKCBGU0xfRkVBVFVSRV9UUE1fQ09NQklORV9IQVNfRUZGRUNUbihiYXNlKSApCisgICAgeworICAgICAgICAvKiBDbGVhciB0aGUgY29tYmluZSBiaXQgZm9yIGNobmxOdW1iZXIgKi8KKyAgICAgICAgYmFzZS0+Q09NQklORSAmPSB+KDFVIDw8IFRQTV9DT01CSU5FX1NISUZUICogKGNobmxOdW1iZXIgLyAyKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBXaGVuIHN3aXRjaGluZyBtb2RlLCBkaXNhYmxlIGNoYW5uZWwgZmlyc3QgICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmPQorICAgICAgICB+KFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spOworCisgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIHRvIGRpc2FibGUgY2hhbm5lbCBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoKGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJgorICAgICAgICAgICAgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICB7CisgICAgfQorCisgICAgLyogU2V0IHRoZSByZXF1ZXN0ZWQgaW5wdXQgY2FwdHVyZSBtb2RlICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyB8PSBjYXB0dXJlTW9kZTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoIShiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICYKKyAgICAgICAgICAgICAoVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSykpKQorICAgIHsKKyAgICB9Cit9CisKK3ZvaWQgVFBNX1NldHVwT3V0cHV0Q29tcGFyZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fY2hubF90IGNobmxOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX291dHB1dF9jb21wYXJlX21vZGVfdCBjb21wYXJlTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb21wYXJlVmFsdWUpCit7CisgICAgYXNzZXJ0KGNobmxOdW1iZXIgPCBGU0xfRkVBVFVSRV9UUE1fQ0hBTk5FTF9DT1VOVG4oYmFzZSkpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwKKyAgICAvKiBUaGUgVFBNJ3MgUURDVFJMIHJlZ2lzdGVyIHJlcXVpcmVkIHRvIGJlIGVmZmVjdGl2ZSAqLworICAgIGlmKCBGU0xfRkVBVFVSRV9UUE1fUURDVFJMX0hBU19FRkZFQ1RuKGJhc2UpICkKKyAgICB7CisgICAgICAgIC8qIENsZWFyIHF1YWRyYXR1cmUgRGVjb2RlciBtb2RlIGZvciBjaGFubmVsIDAgb3IgMSAqLworICAgICAgICBpZiAoKGNobmxOdW1iZXIgPT0gMCkgfHwgKGNobmxOdW1iZXIgPT0gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPlFEQ1RSTCAmPSB+VFBNX1FEQ1RSTF9RVUFERU5fTUFTSzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgLyogV2hlbiBzd2l0Y2hpbmcgbW9kZSwgZGlzYWJsZSBjaGFubmVsIGZpcnN0ICAqLworICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJj0KKyAgICAgICAgfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKChiYXNlLT5DT05UUk9MU1tjaG5sTnVtYmVyXS5DblNDICYKKyAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBjaGFubmVsIG91dHB1dCBiZWhhdmlvdXIgd2hlbiBhIG1hdGNoIG9jY3VycyB3aXRoIHRoZSBjb21wYXJlIHZhbHVlICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyB8PSBjb21wYXJlTW9kZTsKKworICAgIC8qIFNldHVwIHRoZSBjb21wYXJlIHZhbHVlICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25WID0gY29tcGFyZVZhbHVlOworCisgICAgLyogV2FpdCB0aWxsIG1vZGUgY2hhbmdlIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICghKGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgJgorICAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKK3ZvaWQgVFBNX1NldHVwRHVhbEVkZ2VDYXB0dXJlKFRQTV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2NobmxfdCBjaG5sUGFpck51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwbV9kdWFsX2VkZ2VfY2FwdHVyZV9wYXJhbV90ICplZGdlUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmaWx0ZXJWYWx1ZSkKK3sKKyAgICBhc3NlcnQoZWRnZVBhcmFtKTsKKyAgICBhc3NlcnQoY2hubFBhaXJOdW1iZXIgPCBGU0xfRkVBVFVSRV9UUE1fQ0hBTk5FTF9DT1VOVG4oYmFzZSkgLyAyKTsKKyAgICBhc3NlcnQoRlNMX0ZFQVRVUkVfVFBNX0NPTUJJTkVfSEFTX0VGRkVDVG4oYmFzZSkpOworCisgICAgdWludDMyX3QgcmVnOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwKKyAgICAvKiBUaGUgVFBNJ3MgUURDVFJMIHJlZ2lzdGVyIHJlcXVpcmVkIHRvIGJlIGVmZmVjdGl2ZSAqLworICAgIGlmKCBGU0xfRkVBVFVSRV9UUE1fUURDVFJMX0hBU19FRkZFQ1RuKGJhc2UpICkKKyAgICB7CisgICAgICAgIC8qIENsZWFyIHF1YWRyYXR1cmUgRGVjb2RlciBtb2RlIGZvciBjaGFubmVsIDAgb3IgMSovCisgICAgICAgIGlmIChjaG5sUGFpck51bWJlciA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlLT5RRENUUkwgJj0gflRQTV9RRENUUkxfUVVBREVOX01BU0s7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8qIFVubG9jazogV2hlbiBzd2l0Y2hpbmcgbW9kZSwgZGlzYWJsZSBjaGFubmVsIGZpcnN0ICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhaXJOdW1iZXIgKiAyXS5DblNDICY9CisgICAgICAgIH4oVFBNX0NuU0NfTVNBX01BU0sgfCBUUE1fQ25TQ19NU0JfTUFTSyB8IFRQTV9DblNDX0VMU0FfTUFTSyB8IFRQTV9DblNDX0VMU0JfTUFTSyk7CisKKyAgICAvKiBXYWl0IHRpbGwgbW9kZSBjaGFuZ2UgdG8gZGlzYWJsZSBjaGFubmVsIGlzIGFja25vd2xlZGdlZCAqLworICAgIHdoaWxlICgoYmFzZS0+Q09OVFJPTFNbY2hubFBhaXJOdW1iZXIgKiAyXS5DblNDICYKKyAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKworICAgIGJhc2UtPkNPTlRST0xTW2NobmxQYWlyTnVtYmVyICogMiArIDFdLkNuU0MgJj0KKyAgICAgICAgfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKChiYXNlLT5DT05UUk9MU1tjaG5sUGFpck51bWJlciAqIDIgKyAxXS5DblNDICYKKyAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKworICAgIC8qIE5vdywgdGhlIHJlZ2lzdGVycyBmb3IgaW5wdXQgbW9kZSBjYW4gYmUgb3BlcmF0ZWQuICovCisgICAgaWYgKGVkZ2VQYXJhbS0+ZW5hYmxlU3dhcCkKKyAgICB7CisgICAgICAgIC8qIFNldCB0aGUgY29tYmluZSBhbmQgc3dhcCBiaXRzIGZvciB0aGUgY2hhbm5lbCBwYWlyICovCisgICAgICAgIGJhc2UtPkNPTUJJTkUgfD0gKFRQTV9DT01CSU5FX0NPTUJJTkUwX01BU0sgfCBUUE1fQ09NQklORV9DT01TV0FQMF9NQVNLKQorICAgICAgICAgICAgICAgICAgICAgICAgIDw8IChUUE1fQ09NQklORV9TSElGVCAqIGNobmxQYWlyTnVtYmVyKTsKKworICAgICAgICAvKiBJbnB1dCBmaWx0ZXIgc2V0dXAgZm9yIGNoYW5uZWwgbisxIGlucHV0ICovCisgICAgICAgIHJlZyA9IGJhc2UtPkZJTFRFUjsKKyAgICAgICAgcmVnICY9IH4oVFBNX0ZJTFRFUl9DSDBGVkFMX01BU0sgPDwgKFRQTV9GSUxURVJfQ0gxRlZBTF9TSElGVCAqIChjaG5sUGFpck51bWJlciArIDEpKSk7CisgICAgICAgIHJlZyB8PSAoZmlsdGVyVmFsdWUgPDwgKFRQTV9GSUxURVJfQ0gxRlZBTF9TSElGVCAqIChjaG5sUGFpck51bWJlciArIDEpKSk7CisgICAgICAgIGJhc2UtPkZJTFRFUiA9IHJlZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVnID0gYmFzZS0+Q09NQklORTsKKyAgICAgICAgLyogQ2xlYXIgdGhlIHN3YXAgYml0IGZvciB0aGUgY2hhbm5lbCBwYWlyICovCisgICAgICAgIHJlZyAmPSB+KFRQTV9DT01CSU5FX0NPTVNXQVAwX01BU0sgPDwgKFRQTV9DT01CSU5FX0NPTVNXQVAwX1NISUZUICogY2hubFBhaXJOdW1iZXIpKTsKKworICAgICAgICAvKiBTZXQgdGhlIGNvbWJpbmUgYml0IGZvciB0aGUgY2hhbm5lbCBwYWlyICovCisgICAgICAgIHJlZyB8PSBUUE1fQ09NQklORV9DT01CSU5FMF9NQVNLIDw8IChUUE1fQ09NQklORV9TSElGVCAqIGNobmxQYWlyTnVtYmVyKTsKKyAgICAgICAgYmFzZS0+Q09NQklORSA9IHJlZzsKKworICAgICAgICAvKiBJbnB1dCBmaWx0ZXIgc2V0dXAgZm9yIGNoYW5uZWwgbiBpbnB1dCAqLworICAgICAgICByZWcgPSBiYXNlLT5GSUxURVI7CisgICAgICAgIHJlZyAmPSB+KFRQTV9GSUxURVJfQ0gwRlZBTF9NQVNLIDw8IChUUE1fRklMVEVSX0NIMUZWQUxfU0hJRlQgKiBjaG5sUGFpck51bWJlcikpOworICAgICAgICByZWcgfD0gKGZpbHRlclZhbHVlIDw8IChUUE1fRklMVEVSX0NIMUZWQUxfU0hJRlQgKiBjaG5sUGFpck51bWJlcikpOworICAgICAgICBiYXNlLT5GSUxURVIgPSByZWc7CisgICAgfQorCisgICAgLyogU2V0dXAgdGhlIGVkZ2UgZGV0ZWN0aW9uIGZyb20gY2hhbm5lbCBuICovCisgICAgYmFzZS0+Q09OVFJPTFNbY2hubFBhaXJOdW1iZXIgKiAyXS5DblNDIHw9IGVkZ2VQYXJhbS0+Y3VyckNoYW5FZGdlTW9kZTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoIShiYXNlLT5DT05UUk9MU1tjaG5sUGFpck51bWJlciAqIDJdLkNuU0MgJgorICAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBlZGdlIGRldGVjdGlvbiBmcm9tIGNoYW5uZWwgbisxICovCisgICAgYmFzZS0+Q09OVFJPTFNbKGNobmxQYWlyTnVtYmVyICogMikgKyAxXS5DblNDIHw9IGVkZ2VQYXJhbS0+bmV4dENoYW5FZGdlTW9kZTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSBpcyBhY2tub3dsZWRnZWQgKi8KKyAgICB3aGlsZSAoIShiYXNlLT5DT05UUk9MU1soY2hubFBhaXJOdW1iZXIgKiAyKSArIDFdLkNuU0MgJgorICAgICAgICAgICAgIChUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKSkpCisgICAgeworICAgIH0KK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwKK3ZvaWQgVFBNX1NldHVwUXVhZERlY29kZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fcGhhc2VfcGFyYW1zX3QgKnBoYXNlQVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fcGhhc2VfcGFyYW1zX3QgKnBoYXNlQlBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fcXVhZF9kZWNvZGVfbW9kZV90IHF1YWRNb2RlKQoreworICAgIGFzc2VydChwaGFzZUFQYXJhbXMpOworICAgIGFzc2VydChwaGFzZUJQYXJhbXMpOworICAgIGFzc2VydChGU0xfRkVBVFVSRV9UUE1fUURDVFJMX0hBU19FRkZFQ1RuKGJhc2UpKTsKKworICAgIGJhc2UtPkNPTlRST0xTWzBdLkNuU0MgJj0gfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKChiYXNlLT5DT05UUk9MU1swXS5DblNDICYgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICB7CisgICAgfQorICAgIHVpbnQzMl90IHJlZzsKKworICAgIC8qIFNldCBQaGFzZSBBIGZpbHRlciB2YWx1ZSAqLworICAgIHJlZyA9IGJhc2UtPkZJTFRFUjsKKyAgICByZWcgJj0gfihUUE1fRklMVEVSX0NIMEZWQUxfTUFTSyk7CisgICAgcmVnIHw9IFRQTV9GSUxURVJfQ0gwRlZBTChwaGFzZUFQYXJhbXMtPnBoYXNlRmlsdGVyVmFsKTsKKyAgICBiYXNlLT5GSUxURVIgPSByZWc7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUE9MKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1BPTAorICAgIC8qIFNldCBQaGFzZSBBIHBvbGFyaXR5ICovCisgICAgaWYgKHBoYXNlQVBhcmFtcy0+cGhhc2VQb2xhcml0eSkKKyAgICB7CisgICAgICAgIGJhc2UtPlBPTCB8PSBUUE1fUE9MX1BPTDBfTUFTSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+UE9MICY9IH5UUE1fUE9MX1BPTDBfTUFTSzsKKyAgICB9CisjZW5kaWYKKworICAgIGJhc2UtPkNPTlRST0xTWzFdLkNuU0MgJj0gfihUUE1fQ25TQ19NU0FfTUFTSyB8IFRQTV9DblNDX01TQl9NQVNLIHwgVFBNX0NuU0NfRUxTQV9NQVNLIHwgVFBNX0NuU0NfRUxTQl9NQVNLKTsKKworICAgIC8qIFdhaXQgdGlsbCBtb2RlIGNoYW5nZSB0byBkaXNhYmxlIGNoYW5uZWwgaXMgYWNrbm93bGVkZ2VkICovCisgICAgd2hpbGUgKChiYXNlLT5DT05UUk9MU1sxXS5DblNDICYgKFRQTV9DblNDX01TQV9NQVNLIHwgVFBNX0NuU0NfTVNCX01BU0sgfCBUUE1fQ25TQ19FTFNBX01BU0sgfCBUUE1fQ25TQ19FTFNCX01BU0spKSkKKyAgICB7CisgICAgfQorICAgIC8qIFNldCBQaGFzZSBCIGZpbHRlciB2YWx1ZSAqLworICAgIHJlZyA9IGJhc2UtPkZJTFRFUjsKKyAgICByZWcgJj0gfihUUE1fRklMVEVSX0NIMUZWQUxfTUFTSyk7CisgICAgcmVnIHw9IFRQTV9GSUxURVJfQ0gxRlZBTChwaGFzZUJQYXJhbXMtPnBoYXNlRmlsdGVyVmFsKTsKKyAgICBiYXNlLT5GSUxURVIgPSByZWc7CisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX1BPTCkgJiYgRlNMX0ZFQVRVUkVfVFBNX0hBU19QT0wKKyAgICAvKiBTZXQgUGhhc2UgQiBwb2xhcml0eSAqLworICAgIGlmIChwaGFzZUJQYXJhbXMtPnBoYXNlUG9sYXJpdHkpCisgICAgeworICAgICAgICBiYXNlLT5QT0wgfD0gVFBNX1BPTF9QT0wxX01BU0s7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPlBPTCAmPSB+VFBNX1BPTF9QT0wxX01BU0s7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBTZXQgUXVhZHJhdHVyZSBtb2RlICovCisgICAgcmVnID0gYmFzZS0+UURDVFJMOworICAgIHJlZyAmPSB+KFRQTV9RRENUUkxfUVVBRE1PREVfTUFTSyk7CisgICAgcmVnIHw9IFRQTV9RRENUUkxfUVVBRE1PREUocXVhZE1vZGUpOworICAgIGJhc2UtPlFEQ1RSTCA9IHJlZzsKKworICAgIC8qIEVuYWJsZSBRdWFkIGRlY29kZSAqLworICAgIGJhc2UtPlFEQ1RSTCB8PSBUUE1fUURDVFJMX1FVQURFTl9NQVNLOworfQorCisjZW5kaWYKKwordm9pZCBUUE1fRW5hYmxlSW50ZXJydXB0cyhUUE1fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzaykKK3sKKyAgICB1aW50MzJfdCBjaG5sSW50ZXJydXB0cyA9IChtYXNrICYgMHhGRik7CisgICAgdWludDhfdCBjaG5sTnVtYmVyID0gMDsKKworICAgIC8qIEVuYWJsZSB0aGUgdGltZXIgb3ZlcmZsb3cgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrVFBNX1RpbWVPdmVyZmxvd0ludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlNDIHw9IFRQTV9TQ19UT0lFX01BU0s7CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSBjaGFubmVsIGludGVycnVwdHMgKi8KKyAgICB3aGlsZSAoY2hubEludGVycnVwdHMpCisgICAgeworICAgICAgICBpZiAoY2hubEludGVycnVwdHMgJiAweDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2UtPkNPTlRST0xTW2NobmxOdW1iZXJdLkNuU0MgfD0gVFBNX0NuU0NfQ0hJRV9NQVNLOworICAgICAgICB9CisgICAgICAgIGNobmxOdW1iZXIrKzsKKyAgICAgICAgY2hubEludGVycnVwdHMgPSBjaG5sSW50ZXJydXB0cyA+PiAxVTsKKyAgICB9Cit9CisKK3ZvaWQgVFBNX0Rpc2FibGVJbnRlcnJ1cHRzKFRQTV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IGNobmxJbnRlcnJ1cHRzID0gKG1hc2sgJiAweEZGKTsKKyAgICB1aW50OF90IGNobmxOdW1iZXIgPSAwOworCisgICAgLyogRGlzYWJsZSB0aGUgdGltZXIgb3ZlcmZsb3cgaW50ZXJydXB0ICovCisgICAgaWYgKG1hc2sgJiBrVFBNX1RpbWVPdmVyZmxvd0ludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPlNDICY9IH5UUE1fU0NfVE9JRV9NQVNLOworICAgIH0KKworICAgIC8qIERpc2FibGUgdGhlIGNoYW5uZWwgaW50ZXJydXB0cyAqLworICAgIHdoaWxlIChjaG5sSW50ZXJydXB0cykKKyAgICB7CisgICAgICAgIGlmIChjaG5sSW50ZXJydXB0cyAmIDB4MSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZS0+Q09OVFJPTFNbY2hubE51bWJlcl0uQ25TQyAmPSB+VFBNX0NuU0NfQ0hJRV9NQVNLOworICAgICAgICB9CisgICAgICAgIGNobmxOdW1iZXIrKzsKKyAgICAgICAgY2hubEludGVycnVwdHMgPSBjaG5sSW50ZXJydXB0cyA+PiAxVTsKKyAgICB9Cit9CisKK3VpbnQzMl90IFRQTV9HZXRFbmFibGVkSW50ZXJydXB0cyhUUE1fVHlwZSAqYmFzZSkKK3sKKyAgICB1aW50MzJfdCBlbmFibGVkSW50ZXJydXB0cyA9IDA7CisgICAgaW50OF90IGNobmxDb3VudCA9IEZTTF9GRUFUVVJFX1RQTV9DSEFOTkVMX0NPVU5UbihiYXNlKTsKKworICAgIC8qIFRoZSBDSEFOTkVMX0NPVU5UIG1hY3JvIHJldHVybnMgLTEgaWYgaXQgY2Fubm90IG1hdGNoIHRoZSBUUE0gaW5zdGFuY2UgKi8KKyAgICBhc3NlcnQoY2hubENvdW50ICE9IC0xKTsKKworICAgIC8qIENoZWNrIGlmIHRpbWVyIG92ZXJmbG93IGludGVycnVwdCBpcyBlbmFibGVkICovCisgICAgaWYgKGJhc2UtPlNDICYgVFBNX1NDX1RPSUVfTUFTSykKKyAgICB7CisgICAgICAgIGVuYWJsZWRJbnRlcnJ1cHRzIHw9IGtUUE1fVGltZU92ZXJmbG93SW50ZXJydXB0RW5hYmxlOworICAgIH0KKworICAgIC8qIENoZWNrIGlmIHRoZSBjaGFubmVsIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KKyAgICB3aGlsZSAoY2hubENvdW50ID4gMCkKKyAgICB7CisgICAgICAgIGNobmxDb3VudC0tOworICAgICAgICBpZiAoYmFzZS0+Q09OVFJPTFNbY2hubENvdW50XS5DblNDICYgVFBNX0NuU0NfQ0hJRV9NQVNLKQorICAgICAgICB7CisgICAgICAgICAgICBlbmFibGVkSW50ZXJydXB0cyB8PSAoMVUgPDwgY2hubENvdW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbmFibGVkSW50ZXJydXB0czsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RwbS5oIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHBtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2OTRiMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RwbS5oCkBAIC0wLDAgKzEsNjI5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTYtMjAxNyBOWFAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZTTF9UUE1fSF8KKyNkZWZpbmUgX0ZTTF9UUE1fSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworLyohCisgKiBAYWRkdG9ncm91cCB0cG0KKyAqIEB7CisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEgQG5hbWUgRHJpdmVyIHZlcnNpb24gKi8KKy8qQHsqLworI2RlZmluZSBGU0xfVFBNX0RSSVZFUl9WRVJTSU9OIChNQUtFX1ZFUlNJT04oMiwgMCwgMikpIC8qITwgVmVyc2lvbiAyLjAuMiAqLworLypAfSovCisKKy8qIQorICogQGJyaWVmIExpc3Qgb2YgVFBNIGNoYW5uZWxzLgorICogQG5vdGUgQWN0dWFsIG51bWJlciBvZiBhdmFpbGFibGUgY2hhbm5lbHMgaXMgU29DIGRlcGVuZGVudAorICovCit0eXBlZGVmIGVudW0gX3RwbV9jaG5sCit7CisgICAga1RQTV9DaG5sXzAgPSAwVSwgLyohPCBUUE0gY2hhbm5lbCBudW1iZXIgMCovCisgICAga1RQTV9DaG5sXzEsICAgICAgLyohPCBUUE0gY2hhbm5lbCBudW1iZXIgMSAqLworICAgIGtUUE1fQ2hubF8yLCAgICAgIC8qITwgVFBNIGNoYW5uZWwgbnVtYmVyIDIgKi8KKyAgICBrVFBNX0NobmxfMywgICAgICAvKiE8IFRQTSBjaGFubmVsIG51bWJlciAzICovCisgICAga1RQTV9DaG5sXzQsICAgICAgLyohPCBUUE0gY2hhbm5lbCBudW1iZXIgNCAqLworICAgIGtUUE1fQ2hubF81LCAgICAgIC8qITwgVFBNIGNoYW5uZWwgbnVtYmVyIDUgKi8KKyAgICBrVFBNX0NobmxfNiwgICAgICAvKiE8IFRQTSBjaGFubmVsIG51bWJlciA2ICovCisgICAga1RQTV9DaG5sXzcgICAgICAgLyohPCBUUE0gY2hhbm5lbCBudW1iZXIgNyAqLworfSB0cG1fY2hubF90OworCisvKiEgQGJyaWVmIFRQTSBQV00gb3BlcmF0aW9uIG1vZGVzICovCit0eXBlZGVmIGVudW0gX3RwbV9wd21fbW9kZQoreworICAgIGtUUE1fRWRnZUFsaWduZWRQd20gPSAwVSwgLyohPCBFZGdlIGFsaWduZWQgUFdNICovCisgICAga1RQTV9DZW50ZXJBbGlnbmVkUHdtLCAgICAvKiE8IENlbnRlciBhbGlnbmVkIFBXTSAqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKyAgICBrVFBNX0NvbWJpbmVkUHdtIC8qITwgQ29tYmluZWQgUFdNICovCisjZW5kaWYKK30gdHBtX3B3bV9tb2RlX3Q7CisKKy8qISBAYnJpZWYgVFBNIFBXTSBvdXRwdXQgcHVsc2UgbW9kZTogaGlnaC10cnVlLCBsb3ctdHJ1ZSBvciBubyBvdXRwdXQgKi8KK3R5cGVkZWYgZW51bSBfdHBtX3B3bV9sZXZlbF9zZWxlY3QKK3sKKyAgICBrVFBNX05vUHdtU2lnbmFsID0gMFUsIC8qITwgTm8gUFdNIG91dHB1dCBvbiBwaW4gKi8KKyAgICBrVFBNX0xvd1RydWUsICAgICAgICAgIC8qITwgTG93IHRydWUgcHVsc2VzICovCisgICAga1RQTV9IaWdoVHJ1ZSAgICAgICAgICAvKiE8IEhpZ2ggdHJ1ZSBwdWxzZXMgKi8KK30gdHBtX3B3bV9sZXZlbF9zZWxlY3RfdDsKKworLyohIEBicmllZiBPcHRpb25zIHRvIGNvbmZpZ3VyZSBhIFRQTSBjaGFubmVsJ3MgUFdNIHNpZ25hbCAqLwordHlwZWRlZiBzdHJ1Y3QgX3RwbV9jaG5sX3B3bV9zaWduYWxfcGFyYW0KK3sKKyAgICB0cG1fY2hubF90IGNobmxOdW1iZXI7ICAgICAgICAvKiE8IFRQTSBjaGFubmVsIHRvIGNvbmZpZ3VyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNvbWJpbmVkIG1vZGUgKGF2YWlsYWJsZSBpbiBzb21lIFNvQydzLCB0aGlzIHJlcHJlc2VudHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsIHBhaXIgbnVtYmVyICovCisgICAgdHBtX3B3bV9sZXZlbF9zZWxlY3RfdCBsZXZlbDsgLyohPCBQV00gb3V0cHV0IGFjdGl2ZSBsZXZlbCBzZWxlY3QgKi8KKyAgICB1aW50OF90IGR1dHlDeWNsZVBlcmNlbnQ7ICAgICAvKiE8IFBXTSBwdWxzZSB3aWR0aCwgdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gMCB0byAxMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA9aW5hY3RpdmUgc2lnbmFsKDAlIGR1dHkgY3ljbGUpLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDA9YWx3YXlzIGFjdGl2ZSBzaWduYWwgKDEwMCUgZHV0eSBjeWNsZSkqLworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKyAgICB1aW50OF90IGZpcnN0RWRnZURlbGF5UGVyY2VudDsgLyohPCBVc2VkIG9ubHkgaW4gY29tYmluZWQgUFdNIG1vZGUgdG8gZ2VuZXJhdGUgYXN5bW1ldHJpY2FsIFBXTS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRlbGF5IHRvIHRoZSBmaXJzdCBlZGdlIGluIGEgUFdNIHBlcmlvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB1bnN1cmUsIGxlYXZlIGFzIDA7IFNob3VsZCBiZSBzcGVjaWZpZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlIG9mIHRoZSBQV00gcGVyaW9kICovCisjZW5kaWYKK30gdHBtX2NobmxfcHdtX3NpZ25hbF9wYXJhbV90OworCisvKiEKKyAqIEBicmllZiBUcmlnZ2VyIG9wdGlvbnMgYXZhaWxhYmxlLgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCBpbnRlcm5hbCAmIGV4dGVybmFsIHRyaWdnZXIgc291cmNlcyAoZXh0ZXJuYWwgb3B0aW9uIGF2YWlsYWJsZSBpbiBjZXJ0YWluIFNvQydzKQorICoKKyAqIEBub3RlIFRoZSBhY3R1YWwgdHJpZ2dlciBvcHRpb25zIGF2YWlsYWJsZSBpcyBTb0Mtc3BlY2lmaWMuCisgKi8KK3R5cGVkZWYgZW51bSBfdHBtX3RyaWdnZXJfc2VsZWN0Cit7CisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8wID0gMFUsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8xLAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMiwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzMsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF80LAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfNSwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzYsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF83LAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfOCwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzksCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8xMCwKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzExLAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMTIsCisgICAga1RQTV9UcmlnZ2VyX1NlbGVjdF8xMywKKyAgICBrVFBNX1RyaWdnZXJfU2VsZWN0XzE0LAorICAgIGtUUE1fVHJpZ2dlcl9TZWxlY3RfMTUKK30gdHBtX3RyaWdnZXJfc2VsZWN0X3Q7CisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfRVhURVJOQUxfVFJJR0dFUl9TRUxFQ1RJT04pICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfRVhURVJOQUxfVFJJR0dFUl9TRUxFQ1RJT04KKy8qIQorICogQGJyaWVmIFRyaWdnZXIgc291cmNlIG9wdGlvbnMgYXZhaWxhYmxlCisgKgorICogQG5vdGUgVGhpcyBzZWxlY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgb24gc29tZSBTb0Mncy4gRm9yIFNvQydzIHdpdGhvdXQgdGhpcyBzZWxlY3Rpb24sIHRoZSBvbmx5CisgKiB0cmlnZ2VyIHNvdXJjZSBhdmFpbGFibGUgaXMgaW50ZXJuYWwgdHJpZ2VyLgorICovCit0eXBlZGVmIGVudW0gX3RwbV90cmlnZ2VyX3NvdXJjZQoreworICAgIGtUUE1fVHJpZ2dlclNvdXJjZV9FeHRlcm5hbCA9IDBVLCAvKiE8IFVzZSBleHRlcm5hbCB0cmlnZ2VyIGlucHV0ICovCisgICAga1RQTV9UcmlnZ2VyU291cmNlX0ludGVybmFsICAgICAgIC8qITwgVXNlIGludGVybmFsIHRyaWdnZXIgKi8KK30gdHBtX3RyaWdnZXJfc291cmNlX3Q7CisjZW5kaWYKKworLyohIEBicmllZiBUUE0gb3V0cHV0IGNvbXBhcmUgbW9kZXMgKi8KK3R5cGVkZWYgZW51bSBfdHBtX291dHB1dF9jb21wYXJlX21vZGUKK3sKKyAgICBrVFBNX05vT3V0cHV0U2lnbmFsID0gKDFVIDw8IFRQTV9DblNDX01TQV9TSElGVCksIC8qITwgTm8gY2hhbm5lbCBvdXRwdXQgd2hlbiBjb3VudGVyIHJlYWNoZXMgQ25WICAqLworICAgIGtUUE1fVG9nZ2xlT25NYXRjaCA9ICgoMVUgPDwgVFBNX0NuU0NfTVNBX1NISUZUKSB8ICgxVSA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSksICAgLyohPCBUb2dnbGUgb3V0cHV0ICovCisgICAga1RQTV9DbGVhck9uTWF0Y2ggPSAoKDFVIDw8IFRQTV9DblNDX01TQV9TSElGVCkgfCAoMlUgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkpLCAgICAvKiE8IENsZWFyIG91dHB1dCAqLworICAgIGtUUE1fU2V0T25NYXRjaCA9ICgoMVUgPDwgVFBNX0NuU0NfTVNBX1NISUZUKSB8ICgzVSA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSksICAgICAgLyohPCBTZXQgb3V0cHV0ICovCisgICAga1RQTV9IaWdoUHVsc2VPdXRwdXQgPSAoKDNVIDw8IFRQTV9DblNDX01TQV9TSElGVCkgfCAoMVUgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCkpLCAvKiE8IFB1bHNlIG91dHB1dCBoaWdoICovCisgICAga1RQTV9Mb3dQdWxzZU91dHB1dCA9ICgoM1UgPDwgVFBNX0NuU0NfTVNBX1NISUZUKSB8ICgyVSA8PCBUUE1fQ25TQ19FTFNBX1NISUZUKSkgICAvKiE8IFB1bHNlIG91dHB1dCBsb3cgKi8KK30gdHBtX291dHB1dF9jb21wYXJlX21vZGVfdDsKKworLyohIEBicmllZiBUUE0gaW5wdXQgY2FwdHVyZSBlZGdlICovCit0eXBlZGVmIGVudW0gX3RwbV9pbnB1dF9jYXB0dXJlX2VkZ2UKK3sKKyAgICBrVFBNX1Jpc2luZ0VkZ2UgPSAoMVUgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCksICAgICAvKiE8IENhcHR1cmUgb24gcmlzaW5nIGVkZ2Ugb25seSAqLworICAgIGtUUE1fRmFsbGluZ0VkZ2UgPSAoMlUgPDwgVFBNX0NuU0NfRUxTQV9TSElGVCksICAgIC8qITwgQ2FwdHVyZSBvbiBmYWxsaW5nIGVkZ2Ugb25seSAqLworICAgIGtUUE1fUmlzZUFuZEZhbGxFZGdlID0gKDNVIDw8IFRQTV9DblNDX0VMU0FfU0hJRlQpIC8qITwgQ2FwdHVyZSBvbiByaXNpbmcgb3IgZmFsbGluZyBlZGdlICovCit9IHRwbV9pbnB1dF9jYXB0dXJlX2VkZ2VfdDsKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19DT01CSU5FKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUKKy8qIQorICogQGJyaWVmIFRQTSBkdWFsIGVkZ2UgY2FwdHVyZSBwYXJhbWV0ZXJzCisgKgorICogQG5vdGUgVGhpcyBtb2RlIGlzIGF2YWlsYWJsZSBvbmx5IG9uIHNvbWUgU29DJ3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IF90cG1fZHVhbF9lZGdlX2NhcHR1cmVfcGFyYW0KK3sKKyAgICBib29sIGVuYWJsZVN3YXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB0cnVlOiBVc2UgY2hhbm5lbCBuKzEgaW5wdXQsIGNoYW5uZWwgbiBpbnB1dCBpcyBpZ25vcmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOiBVc2UgY2hhbm5lbCBuIGlucHV0LCBjaGFubmVsIG4rMSBpbnB1dCBpcyBpZ25vcmVkICovCisgICAgdHBtX2lucHV0X2NhcHR1cmVfZWRnZV90IGN1cnJDaGFuRWRnZU1vZGU7IC8qITwgSW5wdXQgY2FwdHVyZSBlZGdlIHNlbGVjdCBmb3IgY2hhbm5lbCBuICovCisgICAgdHBtX2lucHV0X2NhcHR1cmVfZWRnZV90IG5leHRDaGFuRWRnZU1vZGU7IC8qITwgSW5wdXQgY2FwdHVyZSBlZGdlIHNlbGVjdCBmb3IgY2hhbm5lbCBuKzEgKi8KK30gdHBtX2R1YWxfZWRnZV9jYXB0dXJlX3BhcmFtX3Q7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19RRENUUkwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMCisvKiEKKyAqIEBicmllZiBUUE0gcXVhZHJhdHVyZSBkZWNvZGUgbW9kZXMKKyAqCisgKiBAbm90ZSBUaGlzIG1vZGUgaXMgYXZhaWxhYmxlIG9ubHkgb24gc29tZSBTb0Mncy4KKyAqLwordHlwZWRlZiBlbnVtIF90cG1fcXVhZF9kZWNvZGVfbW9kZQoreworICAgIGtUUE1fUXVhZFBoYXNlRW5jb2RlID0gMFUsIC8qITwgUGhhc2UgQSBhbmQgUGhhc2UgQiBlbmNvZGluZyBtb2RlICovCisgICAga1RQTV9RdWFkQ291bnRBbmREaXIgICAgICAgLyohPCBDb3VudCBhbmQgZGlyZWN0aW9uIGVuY29kaW5nIG1vZGUgKi8KK30gdHBtX3F1YWRfZGVjb2RlX21vZGVfdDsKKworLyohIEBicmllZiBUUE0gcXVhZHJhdHVyZSBwaGFzZSBwb2xhcml0aWVzICovCit0eXBlZGVmIGVudW0gX3RwbV9waGFzZV9wb2xhcml0eQoreworICAgIGtUUE1fUXVhZFBoYXNlTm9ybWFsID0gMFUsIC8qITwgUGhhc2UgaW5wdXQgc2lnbmFsIGlzIG5vdCBpbnZlcnRlZCAqLworICAgIGtUUE1fUXVhZFBoYXNlSW52ZXJ0ICAgICAgIC8qITwgUGhhc2UgaW5wdXQgc2lnbmFsIGlzIGludmVydGVkICovCit9IHRwbV9waGFzZV9wb2xhcml0eV90OworCisvKiEgQGJyaWVmIFRQTSBxdWFkcmF0dXJlIGRlY29kZSBwaGFzZSBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBfdHBtX3BoYXNlX3BhcmFtCit7CisgICAgdWludDMyX3QgcGhhc2VGaWx0ZXJWYWw7ICAgICAgICAgICAgLyohPCBGaWx0ZXIgdmFsdWUsIGZpbHRlciBpcyBkaXNhYmxlZCB3aGVuIHRoZSB2YWx1ZSBpcyB6ZXJvICovCisgICAgdHBtX3BoYXNlX3BvbGFyaXR5X3QgcGhhc2VQb2xhcml0eTsgLyohPCBQaGFzZSBwb2xhcml0eSAqLworfSB0cG1fcGhhc2VfcGFyYW1zX3Q7CisjZW5kaWYKKworLyohIEBicmllZiBUUE0gY2xvY2sgc291cmNlIHNlbGVjdGlvbiovCit0eXBlZGVmIGVudW0gX3RwbV9jbG9ja19zb3VyY2UKK3sKKyAgICBrVFBNX1N5c3RlbUNsb2NrID0gMVUsIC8qITwgU3lzdGVtIGNsb2NrICovCisgICAga1RQTV9FeHRlcm5hbENsb2NrICAgICAvKiE8IEV4dGVybmFsIGNsb2NrICovCit9IHRwbV9jbG9ja19zb3VyY2VfdDsKKworLyohIEBicmllZiBUUE0gcHJlc2NhbGUgdmFsdWUgc2VsZWN0aW9uIGZvciB0aGUgY2xvY2sgc291cmNlKi8KK3R5cGVkZWYgZW51bSBfdHBtX2Nsb2NrX3ByZXNjYWxlCit7CisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfMSA9IDBVLCAvKiE8IERpdmlkZSBieSAxICovCisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfMiwgICAgICAvKiE8IERpdmlkZSBieSAyICovCisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfNCwgICAgICAvKiE8IERpdmlkZSBieSA0ICovCisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfOCwgICAgICAvKiE8IERpdmlkZSBieSA4ICovCisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfMTYsICAgICAvKiE8IERpdmlkZSBieSAxNiAqLworICAgIGtUUE1fUHJlc2NhbGVfRGl2aWRlXzMyLCAgICAgLyohPCBEaXZpZGUgYnkgMzIgKi8KKyAgICBrVFBNX1ByZXNjYWxlX0RpdmlkZV82NCwgICAgIC8qITwgRGl2aWRlIGJ5IDY0ICovCisgICAga1RQTV9QcmVzY2FsZV9EaXZpZGVfMTI4ICAgICAvKiE8IERpdmlkZSBieSAxMjggKi8KK30gdHBtX2Nsb2NrX3ByZXNjYWxlX3Q7CisKKy8qIQorICogQGJyaWVmIFRQTSBjb25maWcgc3RydWN0dXJlCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBUUE0gcGVyaXBoZXJhbC4gVG8gaW5pdGlhbGl6ZSB0aGlzCisgKiBzdHJ1Y3R1cmUgdG8gcmVhc29uYWJsZSBkZWZhdWx0cywgY2FsbCB0aGUgVFBNX0dldERlZmF1bHRDb25maWcoKSBmdW5jdGlvbiBhbmQgcGFzcyBhCisgKiBwb2ludGVyIHRvIHlvdXIgY29uZmlnIHN0cnVjdHVyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGUgY29uZmlnIHN0cnVjdCBjYW4gYmUgbWFkZSBjb25zdCBzbyBpdCByZXNpZGVzIGluIGZsYXNoCisgKi8KK3R5cGVkZWYgc3RydWN0IF90cG1fY29uZmlnCit7CisgICAgdHBtX2Nsb2NrX3ByZXNjYWxlX3QgcHJlc2NhbGU7ICAgICAgLyohPCBTZWxlY3QgVFBNIGNsb2NrIHByZXNjYWxlIHZhbHVlICovCisgICAgYm9vbCB1c2VHbG9iYWxUaW1lQmFzZTsgICAgICAgICAgICAgLyohPCB0cnVlOiBVc2Ugb2YgYW4gZXh0ZXJuYWwgZ2xvYmFsIHRpbWUgYmFzZSBpcyBlbmFibGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U6IGRpc2FibGVkICovCisgICAgdHBtX3RyaWdnZXJfc2VsZWN0X3QgdHJpZ2dlclNlbGVjdDsgLyohPCBJbnB1dCB0cmlnZ2VyIHRvIHVzZSBmb3IgY29udHJvbGxpbmcgdGhlIGNvdW50ZXIgb3BlcmF0aW9uICovCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OCisgICAgdHBtX3RyaWdnZXJfc291cmNlX3QgdHJpZ2dlclNvdXJjZTsgLyohPCBEZWNpZGVzIGlmIHdlIHVzZSBleHRlcm5hbCBvciBpbnRlcm5hbCB0cmlnZ2VyLiAqLworI2VuZGlmCisgICAgYm9vbCBlbmFibGVEb3plOyAgICAgICAgICAgIC8qITwgdHJ1ZTogVFBNIGNvdW50ZXIgaXMgcGF1c2VkIGluIGRvemUgbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogVFBNIGNvdW50ZXIgY29udGludWVzIGluIGRvemUgbW9kZSAqLworICAgIGJvb2wgZW5hYmxlRGVidWdNb2RlOyAgICAgICAvKiE8IHRydWU6IFRQTSBjb3VudGVyIGNvbnRpbnVlcyBpbiBkZWJ1ZyBtb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOiBUUE0gY291bnRlciBpcyBwYXVzZWQgaW4gZGVidWcgbW9kZSAqLworICAgIGJvb2wgZW5hYmxlUmVsb2FkT25UcmlnZ2VyOyAvKiE8IHRydWU6IFRQTSBjb3VudGVyIGlzIHJlbG9hZGVkIG9uIHRyaWdnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U6IFRQTSBjb3VudGVyIG5vdCByZWxvYWRlZCAqLworICAgIGJvb2wgZW5hYmxlU3RvcE9uT3ZlcmZsb3c7ICAvKiE8IHRydWU6IFRQTSBjb3VudGVyIHN0b3BzIGFmdGVyIG92ZXJmbG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOiBUUE0gY291bnRlciBjb250aW51ZXMgcnVubmluZyBhZnRlciBvdmVyZmxvdyAqLworICAgIGJvb2wgZW5hYmxlU3RhcnRPblRyaWdnZXI7ICAvKiE8IHRydWU6IFRQTSBjb3VudGVyIG9ubHkgc3RhcnRzIHdoZW4gYSB0cmlnZ2VyIGlzIGRldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOiBUUE0gY291bnRlciBzdGFydHMgaW1tZWRpYXRlbHkgKi8KKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFVU0VfQ09VTlRFUl9PTl9UUklHR0VSKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1BBVVNFX0NPVU5URVJfT05fVFJJR0dFUgorICAgIGJvb2wgZW5hYmxlUGF1c2VPblRyaWdnZXI7IC8qITwgdHJ1ZTogVFBNIGNvdW50ZXIgd2lsbCBwYXVzZSB3aGlsZSB0cmlnZ2VyIHJlbWFpbnMgYXNzZXJ0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTogVFBNIGNvdW50ZXIgY29udGludWVzIHJ1bm5pbmcgKi8KKyNlbmRpZgorfSB0cG1fY29uZmlnX3Q7CisKKy8qISBAYnJpZWYgTGlzdCBvZiBUUE0gaW50ZXJydXB0cyAqLwordHlwZWRlZiBlbnVtIF90cG1faW50ZXJydXB0X2VuYWJsZQoreworICAgIGtUUE1fQ2hubDBJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgMCksICAgICAgIC8qITwgQ2hhbm5lbCAwIGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDFJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgMSksICAgICAgIC8qITwgQ2hhbm5lbCAxIGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDJJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgMiksICAgICAgIC8qITwgQ2hhbm5lbCAyIGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDNJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgMyksICAgICAgIC8qITwgQ2hhbm5lbCAzIGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDRJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgNCksICAgICAgIC8qITwgQ2hhbm5lbCA0IGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDVJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgNSksICAgICAgIC8qITwgQ2hhbm5lbCA1IGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDZJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgNiksICAgICAgIC8qITwgQ2hhbm5lbCA2IGludGVycnVwdC4qLworICAgIGtUUE1fQ2hubDdJbnRlcnJ1cHRFbmFibGUgPSAoMVUgPDwgNyksICAgICAgIC8qITwgQ2hhbm5lbCA3IGludGVycnVwdC4qLworICAgIGtUUE1fVGltZU92ZXJmbG93SW50ZXJydXB0RW5hYmxlID0gKDFVIDw8IDgpIC8qITwgVGltZSBvdmVyZmxvdyBpbnRlcnJ1cHQuKi8KK30gdHBtX2ludGVycnVwdF9lbmFibGVfdDsKKworLyohIEBicmllZiBMaXN0IG9mIFRQTSBmbGFncyAqLwordHlwZWRlZiBlbnVtIF90cG1fc3RhdHVzX2ZsYWdzCit7CisgICAga1RQTV9DaG5sMEZsYWcgPSAoMVUgPDwgMCksICAgICAgIC8qITwgQ2hhbm5lbCAwIGZsYWcgKi8KKyAgICBrVFBNX0NobmwxRmxhZyA9ICgxVSA8PCAxKSwgICAgICAgLyohPCBDaGFubmVsIDEgZmxhZyAqLworICAgIGtUUE1fQ2hubDJGbGFnID0gKDFVIDw8IDIpLCAgICAgICAvKiE8IENoYW5uZWwgMiBmbGFnICovCisgICAga1RQTV9DaG5sM0ZsYWcgPSAoMVUgPDwgMyksICAgICAgIC8qITwgQ2hhbm5lbCAzIGZsYWcgKi8KKyAgICBrVFBNX0Nobmw0RmxhZyA9ICgxVSA8PCA0KSwgICAgICAgLyohPCBDaGFubmVsIDQgZmxhZyAqLworICAgIGtUUE1fQ2hubDVGbGFnID0gKDFVIDw8IDUpLCAgICAgICAvKiE8IENoYW5uZWwgNSBmbGFnICovCisgICAga1RQTV9DaG5sNkZsYWcgPSAoMVUgPDwgNiksICAgICAgIC8qITwgQ2hhbm5lbCA2IGZsYWcgKi8KKyAgICBrVFBNX0Nobmw3RmxhZyA9ICgxVSA8PCA3KSwgICAgICAgLyohPCBDaGFubmVsIDcgZmxhZyAqLworICAgIGtUUE1fVGltZU92ZXJmbG93RmxhZyA9ICgxVSA8PCA4KSAvKiE8IFRpbWUgb3ZlcmZsb3cgZmxhZyAqLworfSB0cG1fc3RhdHVzX2ZsYWdzX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyohCisgKiBAbmFtZSBJbml0aWFsaXphdGlvbiBhbmQgZGVpbml0aWFsaXphdGlvbgorICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBVbmdhdGVzIHRoZSBUUE0gY2xvY2sgYW5kIGNvbmZpZ3VyZXMgdGhlIHBlcmlwaGVyYWwgZm9yIGJhc2ljIG9wZXJhdGlvbi4KKyAqCisgKiBAbm90ZSBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBUUE0gZHJpdmVyLgorICoKKyAqIEBwYXJhbSBiYXNlICAgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdXNlcidzIFRQTSBjb25maWcgc3RydWN0dXJlLgorICovCit2b2lkIFRQTV9Jbml0KFRQTV9UeXBlICpiYXNlLCBjb25zdCB0cG1fY29uZmlnX3QgKmNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIFN0b3BzIHRoZSBjb3VudGVyIGFuZCBnYXRlcyB0aGUgVFBNIGNsb2NrCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKi8KK3ZvaWQgVFBNX0RlaW5pdChUUE1fVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmICBGaWxsIGluIHRoZSBUUE0gY29uZmlnIHN0cnVjdCB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzCisgKgorICogVGhlIGRlZmF1bHQgdmFsdWVzIGFyZToKKyAqIEBjb2RlCisgKiAgICAgY29uZmlnLT5wcmVzY2FsZSA9IGtUUE1fUHJlc2NhbGVfRGl2aWRlXzE7CisgKiAgICAgY29uZmlnLT51c2VHbG9iYWxUaW1lQmFzZSA9IGZhbHNlOworICogICAgIGNvbmZpZy0+ZG96ZUVuYWJsZSA9IGZhbHNlOworICogICAgIGNvbmZpZy0+ZGJnTW9kZSA9IGZhbHNlOworICogICAgIGNvbmZpZy0+ZW5hYmxlUmVsb2FkT25UcmlnZ2VyID0gZmFsc2U7CisgKiAgICAgY29uZmlnLT5lbmFibGVTdG9wT25PdmVyZmxvdyA9IGZhbHNlOworICogICAgIGNvbmZpZy0+ZW5hYmxlU3RhcnRPblRyaWdnZXIgPSBmYWxzZTsKKyAqI2lmIEZTTF9GRUFUVVJFX1RQTV9IQVNfUEFVU0VfQ09VTlRFUl9PTl9UUklHR0VSCisgKiAgICAgY29uZmlnLT5lbmFibGVQYXVzZU9uVHJpZ2dlciA9IGZhbHNlOworICojZW5kaWYKKyAqICAgICBjb25maWctPnRyaWdnZXJTZWxlY3QgPSBrVFBNX1RyaWdnZXJfU2VsZWN0XzA7CisgKiNpZiBGU0xfRkVBVFVSRV9UUE1fSEFTX0VYVEVSTkFMX1RSSUdHRVJfU0VMRUNUSU9OCisgKiAgICAgY29uZmlnLT50cmlnZ2VyU291cmNlID0ga1RQTV9UcmlnZ2VyU291cmNlX0V4dGVybmFsOworICojZW5kaWYKKyAqIEBlbmRjb2RlCisgKiBAcGFyYW0gY29uZmlnIFBvaW50ZXIgdG8gdXNlcidzIFRQTSBjb25maWcgc3RydWN0dXJlLgorICovCit2b2lkIFRQTV9HZXREZWZhdWx0Q29uZmlnKHRwbV9jb25maWdfdCAqY29uZmlnKTsKKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBDaGFubmVsIG1vZGUgb3BlcmF0aW9ucworICogQHsKKyAqLworCisvKiEKKyAqIEBicmllZiBDb25maWd1cmVzIHRoZSBQV00gc2lnbmFsIHBhcmFtZXRlcnMKKyAqCisgKiBVc2VyIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBQV00gc2lnbmFscyBwZXJpb2QsIG1vZGUsIGR1dHljeWNsZSBhbmQgZWRnZS4gVXNlIHRoaXMKKyAqIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSBhbGwgdGhlIFRQTSBjaGFubmVscyB0aGF0IHdpbGwgYmUgdXNlZCB0byBvdXRwdXQgYSBQV00gc2lnbmFsCisgKgorICogQHBhcmFtIGJhc2UgICAgICAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNobmxQYXJhbXMgIEFycmF5IG9mIFBXTSBjaGFubmVsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSBjaGFubmVsKHMpCisgKiBAcGFyYW0gbnVtT2ZDaG5scyAgTnVtYmVyIG9mIGNoYW5uZWxzIHRvIGNvbmZpZ3VyZSwgdGhpcyBzaG91bGQgYmUgdGhlIHNpemUgb2YgdGhlIGFycmF5IHBhc3NlZCBpbgorICogQHBhcmFtIG1vZGUgICAgICAgIFBXTSBvcGVyYXRpb24gbW9kZSwgb3B0aW9ucyBhdmFpbGFibGUgaW4gZW51bWVyYXRpb24gOjp0cG1fcHdtX21vZGVfdAorICogQHBhcmFtIHB3bUZyZXFfSHogIFBXTSBzaWduYWwgZnJlcXVlbmN5IGluIEh6CisgKiBAcGFyYW0gc3JjQ2xvY2tfSHogVFBNIGNvdW50ZXIgY2xvY2sgaW4gSHoKKyAqCisgKiBAcmV0dXJuIGtTdGF0dXNfU3VjY2VzcyBpZiB0aGUgUFdNIHNldHVwIHdhcyBzdWNjZXNzZnVsLAorICogICAgICAgICBrU3RhdHVzX0Vycm9yIG9uIGZhaWx1cmUKKyAqLworc3RhdHVzX3QgVFBNX1NldHVwUHdtKFRQTV9UeXBlICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRwbV9jaG5sX3B3bV9zaWduYWxfcGFyYW1fdCAqY2hubFBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG51bU9mQ2hubHMsCisgICAgICAgICAgICAgICAgICAgICAgdHBtX3B3bV9tb2RlX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwd21GcmVxX0h6LAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY0Nsb2NrX0h6KTsKKworLyohCisgKiBAYnJpZWYgVXBkYXRlIHRoZSBkdXR5IGN5Y2xlIG9mIGFuIGFjdGl2ZSBQV00gc2lnbmFsCisgKgorICogQHBhcmFtIGJhc2UgICAgICAgICAgICAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNobmxOdW1iZXIgICAgICAgIFRoZSBjaGFubmVsIG51bWJlci4gSW4gY29tYmluZWQgbW9kZSwgdGhpcyByZXByZXNlbnRzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNoYW5uZWwgcGFpciBudW1iZXIKKyAqIEBwYXJhbSBjdXJyZW50UHdtTW9kZSAgICBUaGUgY3VycmVudCBQV00gbW9kZSBzZXQgZHVyaW5nIFBXTSBzZXR1cAorICogQHBhcmFtIGR1dHlDeWNsZVBlcmNlbnQgIE5ldyBQV00gcHVsc2Ugd2lkdGgsIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgdG8gMTAwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgMD1pbmFjdGl2ZSBzaWduYWwoMCUgZHV0eSBjeWNsZSkuLi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAxMDA9YWN0aXZlIHNpZ25hbCAoMTAwJSBkdXR5IGN5Y2xlKQorICovCit2b2lkIFRQTV9VcGRhdGVQd21EdXR5Y3ljbGUoVFBNX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2NobmxfdCBjaG5sTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9wd21fbW9kZV90IGN1cnJlbnRQd21Nb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZHV0eUN5Y2xlUGVyY2VudCk7CisKKy8qIQorICogQGJyaWVmIFVwZGF0ZSB0aGUgZWRnZSBsZXZlbCBzZWxlY3Rpb24gZm9yIGEgY2hhbm5lbAorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNobmxOdW1iZXIgVGhlIGNoYW5uZWwgbnVtYmVyCisgKiBAcGFyYW0gbGV2ZWwgICAgICBUaGUgbGV2ZWwgdG8gYmUgc2V0IHRvIHRoZSBFTFNuQjpFTFNuQSBmaWVsZDsgdmFsaWQgdmFsdWVzIGFyZSAwMCwgMDEsIDEwLCAxMS4KKyAqICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgYXBwcm9wcmlhdGUgU29DIHJlZmVyZW5jZSBtYW51YWwgZm9yIGRldGFpbHMgYWJvdXQgdGhpcyBmaWVsZC4KKyAqLwordm9pZCBUUE1fVXBkYXRlQ2hubEVkZ2VMZXZlbFNlbGVjdChUUE1fVHlwZSAqYmFzZSwgdHBtX2NobmxfdCBjaG5sTnVtYmVyLCB1aW50OF90IGxldmVsKTsKKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyBjYXB0dXJpbmcgYW4gaW5wdXQgc2lnbmFsIG9uIHRoZSBjaGFubmVsIHVzaW5nIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICoKKyAqIFdoZW4gdGhlIGVkZ2Ugc3BlY2lmaWVkIGluIHRoZSBjYXB0dXJlTW9kZSBhcmd1bWVudCBvY2N1cnMgb24gdGhlIGNoYW5uZWwsIHRoZSBUUE0gY291bnRlciBpcyBjYXB0dXJlZCBpbnRvCisgKiB0aGUgQ25WIHJlZ2lzdGVyLiBUaGUgdXNlciBoYXMgdG8gcmVhZCB0aGUgQ25WIHJlZ2lzdGVyIHNlcGFyYXRlbHkgdG8gZ2V0IHRoaXMgdmFsdWUuCisgKgorICogQHBhcmFtIGJhc2UgICAgICAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNobmxOdW1iZXIgIFRoZSBjaGFubmVsIG51bWJlcgorICogQHBhcmFtIGNhcHR1cmVNb2RlIFNwZWNpZmllcyB3aGljaCBlZGdlIHRvIGNhcHR1cmUKKyAqLwordm9pZCBUUE1fU2V0dXBJbnB1dENhcHR1cmUoVFBNX1R5cGUgKmJhc2UsIHRwbV9jaG5sX3QgY2hubE51bWJlciwgdHBtX2lucHV0X2NhcHR1cmVfZWRnZV90IGNhcHR1cmVNb2RlKTsKKworLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgVFBNIHRvIGdlbmVyYXRlIHRpbWVkIHB1bHNlcy4KKyAqCisgKiBXaGVuIHRoZSBUUE0gY291bnRlciBtYXRjaGVzIHRoZSB2YWx1ZSBvZiBjb21wYXJlVmFsIGFyZ3VtZW50ICh0aGlzIGlzIHdyaXR0ZW4gaW50byBDblYgcmVnKSwgdGhlIGNoYW5uZWwKKyAqIG91dHB1dCBpcyBjaGFuZ2VkIGJhc2VkIG9uIHdoYXQgaXMgc3BlY2lmaWVkIGluIHRoZSBjb21wYXJlTW9kZSBhcmd1bWVudC4KKyAqCisgKiBAcGFyYW0gYmFzZSAgICAgICAgIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICogQHBhcmFtIGNobmxOdW1iZXIgICBUaGUgY2hhbm5lbCBudW1iZXIKKyAqIEBwYXJhbSBjb21wYXJlTW9kZSAgQWN0aW9uIHRvIHRha2Ugb24gdGhlIGNoYW5uZWwgb3V0cHV0IHdoZW4gdGhlIGNvbXBhcmUgY29uZGl0aW9uIGlzIG1ldAorICogQHBhcmFtIGNvbXBhcmVWYWx1ZSBWYWx1ZSB0byBiZSBwcm9ncmFtbWVkIGluIHRoZSBDblYgcmVnaXN0ZXIuCisgKi8KK3ZvaWQgVFBNX1NldHVwT3V0cHV0Q29tcGFyZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fY2hubF90IGNobmxOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX291dHB1dF9jb21wYXJlX21vZGVfdCBjb21wYXJlTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb21wYXJlVmFsdWUpOworCisjaWYgZGVmaW5lZChGU0xfRkVBVFVSRV9UUE1fSEFTX0NPTUJJTkUpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfQ09NQklORQorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgZHVhbCBlZGdlIGNhcHR1cmUgbW9kZSBvZiB0aGUgVFBNLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIG1lYXN1cmUgYSBwdWxzZSB3aWR0aCBvZiB0aGUgc2lnbmFsIG9uIHRoZSBpbnB1dCBvZiBjaGFubmVsIG9mIGEKKyAqIGNoYW5uZWwgcGFpci4gVGhlIGZpbHRlciBmdW5jdGlvbiBpcyBkaXNhYmxlZCBpZiB0aGUgZmlsdGVyVmFsIGFyZ3VtZW50IHBhc3NlZCBpcyB6ZXJvLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjaG5sUGFpck51bWJlciBUaGUgVFBNIGNoYW5uZWwgcGFpciBudW1iZXI7IG9wdGlvbnMgYXJlIDAsIDEsIDIsIDMKKyAqIEBwYXJhbSBlZGdlUGFyYW0gICAgICBTZXRzIHVwIHRoZSBkdWFsIGVkZ2UgY2FwdHVyZSBmdW5jdGlvbgorICogQHBhcmFtIGZpbHRlclZhbHVlICAgIEZpbHRlciB2YWx1ZSwgc3BlY2lmeSAwIHRvIGRpc2FibGUgZmlsdGVyLgorICovCit2b2lkIFRQTV9TZXR1cER1YWxFZGdlQ2FwdHVyZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9jaG5sX3QgY2hubFBhaXJOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fZHVhbF9lZGdlX2NhcHR1cmVfcGFyYW1fdCAqZWRnZVBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmlsdGVyVmFsdWUpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1RQTV9IQVNfUURDVFJMKSAmJiBGU0xfRkVBVFVSRV9UUE1fSEFTX1FEQ1RSTAorLyohCisgKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgcGFyYW1ldGVycyBhbmQgYWN0aXZhdGVzIHRoZSBxdWFkcmF0dXJlIGRlY29kZSBtb2RlLgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICAgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gcGhhc2VBUGFyYW1zIFBoYXNlIEEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKiBAcGFyYW0gcGhhc2VCUGFyYW1zIFBoYXNlIEIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKiBAcGFyYW0gcXVhZE1vZGUgICAgIFNlbGVjdHMgZW5jb2RpbmcgbW9kZSB1c2VkIGluIHF1YWRyYXR1cmUgZGVjb2RlciBtb2RlCisgKi8KK3ZvaWQgVFBNX1NldHVwUXVhZERlY29kZShUUE1fVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fcGhhc2VfcGFyYW1zX3QgKnBoYXNlQVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cG1fcGhhc2VfcGFyYW1zX3QgKnBoYXNlQlBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fcXVhZF9kZWNvZGVfbW9kZV90IHF1YWRNb2RlKTsKKyNlbmRpZgorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIEludGVycnVwdCBJbnRlcmZhY2UKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgRW5hYmxlcyB0aGUgc2VsZWN0ZWQgVFBNIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgaW50ZXJydXB0cyB0byBlbmFibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnRwbV9pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLwordm9pZCBUUE1fRW5hYmxlSW50ZXJydXB0cyhUUE1fVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorICogQGJyaWVmIERpc2FibGVzIHRoZSBzZWxlY3RlZCBUUE0gaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBtYXNrIFRoZSBpbnRlcnJ1cHRzIHRvIGRpc2FibGUuIFRoaXMgaXMgYSBsb2dpY2FsIE9SIG9mIG1lbWJlcnMgb2YgdGhlCisgKiAgICAgICAgICAgICBlbnVtZXJhdGlvbiA6OnRwbV9pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLwordm9pZCBUUE1fRGlzYWJsZUludGVycnVwdHMoVFBNX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBlbmFibGVkIFRQTSBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBiYXNlIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICoKKyAqIEByZXR1cm4gVGhlIGVuYWJsZWQgaW50ZXJydXB0cy4gVGhpcyBpcyB0aGUgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICBlbnVtZXJhdGlvbiA6OnRwbV9pbnRlcnJ1cHRfZW5hYmxlX3QKKyAqLwordWludDMyX3QgVFBNX0dldEVuYWJsZWRJbnRlcnJ1cHRzKFRQTV9UeXBlICpiYXNlKTsKKworLyohIEB9Ki8KKworLyohCisgKiBAbmFtZSBTdGF0dXMgSW50ZXJmYWNlCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIEdldHMgdGhlIFRQTSBzdGF0dXMgZmxhZ3MKKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuIFRoZSBzdGF0dXMgZmxhZ3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgT1Igb2YgbWVtYmVycyBvZiB0aGUKKyAqICAgICAgICAgZW51bWVyYXRpb24gOjp0cG1fc3RhdHVzX2ZsYWdzX3QKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBUUE1fR2V0U3RhdHVzRmxhZ3MoVFBNX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIGJhc2UtPlNUQVRVUzsKK30KKworLyohCisgKiBAYnJpZWYgQ2xlYXJzIHRoZSBUUE0gc3RhdHVzIGZsYWdzCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKiBAcGFyYW0gbWFzayBUaGUgc3RhdHVzIGZsYWdzIHRvIGNsZWFyLiBUaGlzIGlzIGEgbG9naWNhbCBPUiBvZiBtZW1iZXJzIG9mIHRoZQorICogICAgICAgICAgICAgZW51bWVyYXRpb24gOjp0cG1fc3RhdHVzX2ZsYWdzX3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFRQTV9DbGVhclN0YXR1c0ZsYWdzKFRQTV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIC8qIENsZWFyIHRoZSBzdGF0dXMgZmxhZ3MgKi8KKyAgICBiYXNlLT5TVEFUVVMgPSBtYXNrOworfQorCisvKiEgQH0qLworCisvKiEKKyAqIEBuYW1lIFJlYWQgYW5kIHdyaXRlIHRoZSB0aW1lciBwZXJpb2QKKyAqIEB7CisgKi8KKworLyohCisgKiBAYnJpZWYgU2V0cyB0aGUgdGltZXIgcGVyaW9kIGluIHVuaXRzIG9mIHRpY2tzLgorICoKKyAqIFRpbWVycyBjb3VudHMgZnJvbSAwIHVudGlsIGl0IGVxdWFscyB0aGUgY291bnQgdmFsdWUgc2V0IGhlcmUuIFRoZSBjb3VudCB2YWx1ZSBpcyB3cml0dGVuIHRvCisgKiB0aGUgTU9EIHJlZ2lzdGVyLgorICoKKyAqIEBub3RlCisgKiAxLiBUaGlzIEFQSSBhbGxvd3MgdGhlIHVzZXIgdG8gdXNlIHRoZSBUUE0gbW9kdWxlIGFzIGEgdGltZXIuIERvIG5vdCBtaXggdXNhZ2UKKyAqICAgIG9mIHRoaXMgQVBJIHdpdGggVFBNJ3MgUFdNIHNldHVwIEFQSSdzLgorICogMi4gQ2FsbCB0aGUgdXRpbGl0eSBtYWNyb3MgcHJvdmlkZWQgaW4gdGhlIGZzbF9jb21tb24uaCB0byBjb252ZXJ0IHVzZWMgb3IgbXNlYyB0byB0aWNrcy4KKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSB0aWNrcyBBIHRpbWVyIHBlcmlvZCBpbiB1bml0cyBvZiB0aWNrcywgd2hpY2ggc2hvdWxkIGJlIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgVFBNX1NldFRpbWVyUGVyaW9kKFRQTV9UeXBlICpiYXNlLCB1aW50MzJfdCB0aWNrcykKK3sKKyAgICBiYXNlLT5NT0QgPSB0aWNrczsKK30KKworLyohCisgKiBAYnJpZWYgUmVhZHMgdGhlIGN1cnJlbnQgdGltZXIgY291bnRpbmcgdmFsdWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZWFsLXRpbWUgdGltZXIgY291bnRpbmcgdmFsdWUgaW4gYSByYW5nZSBmcm9tIDAgdG8gYQorICogdGltZXIgcGVyaW9kLgorICoKKyAqIEBub3RlIENhbGwgdGhlIHV0aWxpdHkgbWFjcm9zIHByb3ZpZGVkIGluIHRoZSBmc2xfY29tbW9uLmggdG8gY29udmVydCB0aWNrcyB0byB1c2VjIG9yIG1zZWMuCisgKgorICogQHBhcmFtIGJhc2UgVFBNIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzCisgKgorICogQHJldHVybiBUaGUgY3VycmVudCBjb3VudGVyIHZhbHVlIGluIHRpY2tzCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgVFBNX0dldEN1cnJlbnRUaW1lckNvdW50KFRQTV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDMyX3QpKChiYXNlLT5DTlQgJiBUUE1fQ05UX0NPVU5UX01BU0spID4+IFRQTV9DTlRfQ09VTlRfU0hJRlQpOworfQorCisvKiEKKyAqIEBuYW1lIFRpbWVyIFN0YXJ0IGFuZCBTdG9wCisgKiBAeworICovCisKKy8qIQorICogQGJyaWVmIFN0YXJ0cyB0aGUgVFBNIGNvdW50ZXIuCisgKgorICoKKyAqIEBwYXJhbSBiYXNlICAgICAgICBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjbG9ja1NvdXJjZSBUUE0gY2xvY2sgc291cmNlOyBvbmNlIGNsb2NrIHNvdXJjZSBpcyBzZXQgdGhlIGNvdW50ZXIgd2lsbCBzdGFydCBydW5uaW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUUE1fU3RhcnRUaW1lcihUUE1fVHlwZSAqYmFzZSwgdHBtX2Nsb2NrX3NvdXJjZV90IGNsb2NrU291cmNlKQoreworICAgIHVpbnQzMl90IHJlZyA9IGJhc2UtPlNDOworCisgICAgcmVnICY9IH4oVFBNX1NDX0NNT0RfTUFTSyk7CisgICAgcmVnIHw9IFRQTV9TQ19DTU9EKGNsb2NrU291cmNlKTsKKyAgICBiYXNlLT5TQyA9IHJlZzsKK30KKworLyohCisgKiBAYnJpZWYgU3RvcHMgdGhlIFRQTSBjb3VudGVyLgorICoKKyAqIEBwYXJhbSBiYXNlIFRQTSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgVFBNX1N0b3BUaW1lcihUUE1fVHlwZSAqYmFzZSkKK3sKKyAgICAvKiBTZXQgY2xvY2sgc291cmNlIHRvIG5vbmUgdG8gZGlzYWJsZSBjb3VudGVyICovCisgICAgYmFzZS0+U0MgJj0gfihUUE1fU0NfQ01PRF9NQVNLKTsKKworICAgIC8qIFdhaXQgdGlsbCB0aGlzIHJlYWRzIGFzIHplcm8gYWNrbm93bGVkZ2luZyB0aGUgY291bnRlciBpcyBkaXNhYmxlZCAqLworICAgIHdoaWxlIChiYXNlLT5TQyAmIFRQTV9TQ19DTU9EX01BU0spCisgICAgeworICAgIH0KK30KKworLyohIEB9Ki8KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFBNX0hBU19HTE9CQUwpICYmIEZTTF9GRUFUVVJFX1RQTV9IQVNfR0xPQkFMCisvKiEKKyAqIEBicmllZiBQZXJmb3JtcyBhIHNvZnR3YXJlIHJlc2V0IG9uIHRoZSBUUE0gbW9kdWxlLgorICoKKyAqIFJlc2V0IGFsbCBpbnRlcm5hbCBsb2dpYyBhbmQgcmVnaXN0ZXJzLCBleGNlcHQgdGhlIEdsb2JhbCBSZWdpc3Rlci4gUmVtYWlucyBzZXQgdW50aWwgY2xlYXJlZCBieSBzb2Z0d2FyZS4uCisgKgorICogQG5vdGUgVFBNIHNvZnR3YXJlIHJlc2V0IGlzIGF2YWlsYWJsZSBvbiBjZXJ0YWluIFNvQydzIG9ubHkKKyAqCisgKiBAcGFyYW0gYmFzZSBUUE0gcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIFRQTV9SZXNldChUUE1fVHlwZSAqYmFzZSkKK3sKKyAgICBiYXNlLT5HTE9CQUwgfD0gVFBNX0dMT0JBTF9SU1RfTUFTSzsKKyAgICBiYXNlLT5HTE9CQUwgJj0gflRQTV9HTE9CQUxfUlNUX01BU0s7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyohIEB9Ki8KKworI2VuZGlmIC8qIF9GU0xfVFBNX0hfICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cm5nLmMgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90cm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2MGJiNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RybmcuYwpAQCAtMCwwICsxLDE2NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImZzbF90cm5nLmgiCisKKyNpZiBkZWZpbmVkKEZTTF9GRUFUVVJFX1NPQ19UUk5HX0NPVU5UKSAmJiBGU0xfRkVBVFVSRV9TT0NfVFJOR19DT1VOVAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmYXVsdCB2YWx1ZXMgZm9yIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuKi8KKyNpZiAoZGVmaW5lZChLVzQwWjRfU0VSSUVTKSB8fCBkZWZpbmVkKEtXNDFaNF9TRVJJRVMpIHx8IGRlZmluZWQoS1czMVo0X1NFUklFUykgfHwgZGVmaW5lZChLVzIxWjRfU0VSSUVTKSB8fCBcCisgICAgIGRlZmluZWQoTUNJTVg3VTVfTTRfU0VSSUVTKSkKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX09TQ19ESVYga1RSTkdfUmluZ09zY0RpdjgKKyNlbGlmKGRlZmluZWQoS1Y1NkYyNF9TRVJJRVMpIHx8IGRlZmluZWQoS1Y1OEYyNF9TRVJJRVMpIHx8IGRlZmluZWQoS0wyOFo3X1NFUklFUykgfHwgZGVmaW5lZChLTDgxWjdfU0VSSUVTKSB8fCBcCisgICAgICBkZWZpbmVkKEtMODJaN19TRVJJRVMpKQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfT1NDX0RJViBrVFJOR19SaW5nT3NjRGl2NAorI2VsaWYgZGVmaW5lZChLODFGMjU2MTVfU0VSSUVTKQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfT1NDX0RJViBrVFJOR19SaW5nT3NjRGl2MgorI2Vsc2UKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX09TQ19ESVYga1RSTkdfUmluZ09zY0RpdjAKKyNlbmRpZgorCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9MT0NLIDAKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX0VOVFJPUFlfREVMQVkgMzIwMAorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfU0FNUExFX1NJWkUgMjUwMAorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfU1BBUlNFX0JJVF9MSU1JVCA2MworI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUkVUUllfQ09VTlQgMQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOX01BWF9MSU1JVCAzNAorCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9NT05PQklUX01BWElNVU0gMTM4NAorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfTU9OT0JJVF9NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfTU9OT0JJVF9NQVhJTVVNIC0gMjY4KQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMV9NQVhJTVVNIDQwNQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMV9NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMV9NQVhJTVVNIC0gMTc4KQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMl9NQVhJTVVNIDIyMAorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMl9NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMl9NQVhJTVVNIC0gMTIyKQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUM19NQVhJTVVNIDEyNQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUM19NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUM19NQVhJTVVNIC0gODgpCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ0X01BWElNVU0gNzUKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDRfTUlOSU1VTSAoVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDRfTUFYSU1VTSAtIDY0KQorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNV9NQVhJTVVNIDQ3CisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ1X01JTklNVU0gKFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ1X01BWElNVU0gLSA0NikKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDZQTFVTX01BWElNVU0gNDcKKyNkZWZpbmUgVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDZQTFVTX01JTklNVU0gKFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ2UExVU19NQVhJTVVNIC0gNDYpCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9QT0tFUl9NQVhJTVVNIDI2OTEyCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9QT0tFUl9NSU5JTVVNIChUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUE9LRVJfTUFYSU1VTSAtIDI0NjcpCisjZGVmaW5lIFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9GUkVRVUVOQ1lfTUFYSU1VTSAyNTYwMAorI2RlZmluZSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfRlJFUVVFTkNZX01JTklNVU0gMTYwMAorCisvKiEgQGJyaWVmIFRSTkcgd29yayBtb2RlICovCit0eXBlZGVmIGVudW0gX3Rybmdfd29ya19tb2RlCit7CisgICAga1RSTkdfV29ya01vZGVSdW4gPSAwVSwgICAgLyohPCBSdW4gTW9kZS4gKi8KKyAgICBrVFJOR19Xb3JrTW9kZVByb2dyYW0gPSAxVSAvKiE8IFByb2dyYW0gTW9kZS4gKi8KK30gdHJuZ193b3JrX21vZGVfdDsKKworLyohIEBicmllZiBUUk5HIHN0YXRpc3RpY2FsIGNoZWNrIHR5cGUqLwordHlwZWRlZiBlbnVtIF90cm5nX3N0YXRpc3RpY2FsX2NoZWNrCit7CisgICAga1RSTkdfU3RhdGlzdGljYWxDaGVja01vbm9iaXQgPQorICAgICAgICAxVSwgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBvbmVzL3plcm8gZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0MSwgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiAqLworICAgIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQyLCAvKiE8IFN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAyIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24uICovCisgICAga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDMsIC8qITwgU3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDMgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbi4gKi8KKyAgICBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0NCwgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNCBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLiAqLworICAgIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQ1LCAvKiE8IFN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA1IGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24uICovCisgICAga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDZQbHVzLCAgIC8qITwgU3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDYgb3IgbW9yZSBkZXRlY3RlZCBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tQb2tlciwgICAgICAgICAvKiE8IFN0YXRpc3RpY2FsIGNoZWNrIG9mICJQb2tlciBUZXN0Ii4gKi8KKyAgICBrVFJOR19TdGF0aXN0aWNhbENoZWNrRnJlcXVlbmN5Q291bnQgLyohPCBTdGF0aXN0aWNhbCBjaGVjayBvZiBlbnRyb3B5IHNhbXBsZSBmcmVxdWVuY3kgY291bnQuICovCit9IHRybmdfc3RhdGlzdGljYWxfY2hlY2tfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NNSVNDIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NNSVNDLCBmaWVsZCBSVFlfQ1RbMTk6MTZdIChSVykKKyAqCisgKiBSRVRSWSBDT1VOVC4gSWYgYSBzdGF0aXN0aWNhbCBjaGVjayBmYWlscyBkdXJpbmcgdGhlIFRSTkcgRW50cm9weSBHZW5lcmF0aW9uLAorICogdGhlIFJUWV9DVCB2YWx1ZSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHJldHJ5IHNob3VsZCBvY2N1ciBiZWZvcmUKKyAqIGdlbmVyYXRpbmcgYW4gZXJyb3IuIFRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZiBNQ1RMW1BSR01dIGJpdCBpcyAxLiBUaGlzCisgKiBmaWVsZCB3aWxsIHJlYWQgemVyb2VzIGlmIE1DVExbUFJHTV0gPSAwLiBUaGlzIGZpZWxkIGlzIGNsZWFyZWQgdG8gMWggYnkgd3JpdGluZworICogdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NNSVNDX1JUWV9DVCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ01JU0NfUlRZX0NUKGJhc2UpICgoVFJOR19TQ01JU0NfUkVHKGJhc2UpICYgVFJOR19TQ01JU0NfUlRZX0NUX01BU0spID4+IFRSTkdfU0NNSVNDX1JUWV9DVF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJUWV9DVCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ01JU0NfUlRZX0NUKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NNSVNDKGJhc2UsIFRSTkdfU0NNSVNDX1JUWV9DVF9NQVNLLCBUUk5HX1NDTUlTQ19SVFlfQ1QodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19TQ01MIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIE1vbm9iaXQgTGltaXQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKyAqIEBicmllZiBUUk5HX1NDTUwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgTW9ub2JpdCBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDEwQzA1NjhVCisgKgorICogVGhlIFJORyBTdGF0aXN0aWNhbCBDaGVjayBNb25vYml0IExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIGFsbG93YWJsZQorICogbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2Ygb25lcy96ZXJvIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uIFRvIHBhc3MKKyAqIHRoZSB0ZXN0LCB0aGUgbnVtYmVyIG9mIG9uZXMvemVyb2VzIGdlbmVyYXRlZCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgcHJvZ3JhbW1lZAorICogbWF4aW11bSB2YWx1ZSwgYW5kIHRoZSBudW1iZXIgb2Ygb25lcy96ZXJvZXMgZ2VuZXJhdGVkIG11c3QgYmUgZ3JlYXRlciB0aGFuCisgKiAobWF4aW11bSAtIHJhbmdlKS4gSWYgdGhpcyB0ZXN0IGZhaWxzLCB0aGUgUmV0cnkgQ291bnRlciBpbiBTQ01JU0Mgd2lsbCBiZQorICogZGVjcmVtZW50ZWQsIGFuZCBhIHJldHJ5IHdpbGwgb2NjdXIgaWYgdGhlIFJldHJ5IENvdW50IGhhcyBub3QgcmVhY2hlZCB6ZXJvLiBJZgorICogdGhlIFJldHJ5IENvdW50IGhhcyByZWFjaGVkIHplcm8sIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcworICogb2Zmc2V0ICgweEJBU0VfMDYyMCkgaXMgdXNlZCBhcyBTQ01MIG9ubHkgaWYgTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsCisgKiB0aGlzIG9mZnNldCBpcyB1c2VkIGFzIFNDTUMgcmVhZGJhY2sgcmVnaXN0ZXIuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1NDTUwgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NNTF9SRUcoYmFzZSkgKChiYXNlKS0+U0NNTCkKKyNkZWZpbmUgVFJOR19SRF9TQ01MKGJhc2UpIChUUk5HX1NDTUxfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NDTUwoYmFzZSwgdmFsdWUpIChUUk5HX1NDTUxfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NNTChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0NNTChiYXNlLCAoVFJOR19SRF9TQ01MKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDTUwsIGZpZWxkIE1PTk9fTUFYWzE1OjBdIChSVykKKyAqCisgKiBNb25vYml0IE1heGltdW0gTGltaXQuIERlZmluZXMgdGhlIG1heGltdW0gYWxsb3dhYmxlIGNvdW50IHRha2VuIGR1cmluZworICogZW50cm9weSBnZW5lcmF0aW9uLiBUaGUgbnVtYmVyIG9mIG9uZXMvemVyb2VzIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24KKyAqIG11c3QgYmUgbGVzcyB0aGFuIE1PTk9fTUFYLCBlbHNlIGEgcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcworICogY2xlYXJlZCB0byAwMDA1NkJoIChkZWNpbWFsIDEzODcpIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NNTF9NT05PX01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ01MX01PTk9fTUFYKGJhc2UpICgoVFJOR19TQ01MX1JFRyhiYXNlKSAmIFRSTkdfU0NNTF9NT05PX01BWF9NQVNLKSA+PiBUUk5HX1NDTUxfTU9OT19NQVhfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBNT05PX01BWCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ01MX01PTk9fTUFYKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NNTChiYXNlLCBUUk5HX1NDTUxfTU9OT19NQVhfTUFTSywgVFJOR19TQ01MX01PTk9fTUFYKHZhbHVlKSkpCisvKkB9Ki8KKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ01MLCBmaWVsZCBNT05PX1JOR1szMToxNl0gKFJXKQorICoKKyAqIE1vbm9iaXQgUmFuZ2UuIFRoZSBudW1iZXIgb2Ygb25lcy96ZXJvZXMgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbgorICogbXVzdCBiZSBncmVhdGVyIHRoYW4gTU9OT19NQVggLSBNT05PX1JORywgZWxzZSBhIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuCisgKiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDAwMTEyaCAoZGVjaW1hbCAyNzQpIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0KKyAqIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDTUxfTU9OT19STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NNTF9NT05PX1JORyhiYXNlKSAoKFRSTkdfU0NNTF9SRUcoYmFzZSkgJiBUUk5HX1NDTUxfTU9OT19STkdfTUFTSykgPj4gVFJOR19TQ01MX01PTk9fUk5HX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgTU9OT19STkcgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NNTF9NT05PX1JORyhiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDTUwoYmFzZSwgVFJOR19TQ01MX01PTk9fUk5HX01BU0ssIFRSTkdfU0NNTF9NT05PX1JORyh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDUjFMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMSBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TQ1IxTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDEgTGltaXQgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwQjIwMTk1VQorICoKKyAqIFRoZSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAxIExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIGFsbG93YWJsZQorICogbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weQorICogZ2VuZXJhdGlvbi4gVG8gcGFzcyB0aGUgdGVzdCwgdGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAxIChmb3Igc2FtcGxlcyBvZiBib3RoIDAKKyAqIGFuZCAxKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgcHJvZ3JhbW1lZCBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlIG51bWJlciBvZiBydW5zIG9mCisgKiBsZW5ndGggMSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAobWF4aW11bSAtIHJhbmdlKS4gSWYgdGhpcyB0ZXN0IGZhaWxzLCB0aGUKKyAqIFJldHJ5IENvdW50ZXIgaW4gU0NNSVNDIHdpbGwgYmUgZGVjcmVtZW50ZWQsIGFuZCBhIHJldHJ5IHdpbGwgb2NjdXIgaWYgdGhlIFJldHJ5CisgKiBDb3VudCBoYXMgbm90IHJlYWNoZWQgemVyby4gSWYgdGhlIFJldHJ5IENvdW50IGhhcyByZWFjaGVkIHplcm8sIGFuIGVycm9yIHdpbGwKKyAqIGJlIGdlbmVyYXRlZC4gTm90ZSB0aGF0IHRoaXMgYWRkcmVzcyAoMHhCQVNFXzA2MjQpIGlzIHVzZWQgYXMgU0NSMUwgb25seSBpZgorICogTUNUTFtQUkdNXSBpcyAxLiBJZiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIFNDUjFDIHJlYWRiYWNrCisgKiByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0NSMUwgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NSMUxfUkVHKGJhc2UpICgoYmFzZSktPlNDUjFMKQorI2RlZmluZSBUUk5HX1JEX1NDUjFMKGJhc2UpIChUUk5HX1NDUjFMX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQ1IxTChiYXNlLCB2YWx1ZSkgKFRSTkdfU0NSMUxfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NSMUwoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NDUjFMKGJhc2UsIChUUk5HX1JEX1NDUjFMKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSMUwsIGZpZWxkIFJVTjFfTUFYWzE0OjBdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDEgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcnVucyBvZiBsZW5ndGggMQorICogKGZvciBib3RoIDAgYW5kIDEpIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uIFRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDEgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBSVU4xX01BWCwgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDFFNWggKGRlY2ltYWwgNDg1KSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1IxTF9SVU4xX01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1IxTF9SVU4xX01BWChiYXNlKSAoKFRSTkdfU0NSMUxfUkVHKGJhc2UpICYgVFJOR19TQ1IxTF9SVU4xX01BWF9NQVNLKSA+PiBUUk5HX1NDUjFMX1JVTjFfTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVOMV9NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSMUxfUlVOMV9NQVgoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ1IxTChiYXNlLCBUUk5HX1NDUjFMX1JVTjFfTUFYX01BU0ssIFRSTkdfU0NSMUxfUlVOMV9NQVgodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSMUwsIGZpZWxkIFJVTjFfUk5HWzMwOjE2XSAoUlcpCisgKgorICogUnVuIExlbmd0aCAxIFJhbmdlLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDEgKGZvciBib3RoIDAgYW5kIDEpCisgKiBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIFJVTjFfTUFYIC0gUlVOMV9STkcsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAxMDJoIChkZWNpbWFsIDI1OCkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSMUxfUlVOMV9STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSMUxfUlVOMV9STkcoYmFzZSkgKChUUk5HX1NDUjFMX1JFRyhiYXNlKSAmIFRSTkdfU0NSMUxfUlVOMV9STkdfTUFTSykgPj4gVFJOR19TQ1IxTF9SVU4xX1JOR19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjFfUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjFMX1JVTjFfUk5HKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSMUwoYmFzZSwgVFJOR19TQ1IxTF9SVU4xX1JOR19NQVNLLCBUUk5HX1NDUjFMX1JVTjFfUk5HKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NSMkwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAyIExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NDUjJMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMiBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDA3QTAwRENVCisgKgorICogVGhlIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDIgTGltaXQgUmVnaXN0ZXIgZGVmaW5lcyB0aGUgYWxsb3dhYmxlCisgKiBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAyIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgKiBnZW5lcmF0aW9uLiBUbyBwYXNzIHRoZSB0ZXN0LCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDIgKGZvciBzYW1wbGVzIG9mIGJvdGggMAorICogYW5kIDEpIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBwcm9ncmFtbWVkIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCAyIG11c3QgYmUgZ3JlYXRlciB0aGFuIChtYXhpbXVtIC0gcmFuZ2UpLiBJZiB0aGlzIHRlc3QgZmFpbHMsIHRoZQorICogUmV0cnkgQ291bnRlciBpbiBTQ01JU0Mgd2lsbCBiZSBkZWNyZW1lbnRlZCwgYW5kIGEgcmV0cnkgd2lsbCBvY2N1ciBpZiB0aGUgUmV0cnkKKyAqIENvdW50IGhhcyBub3QgcmVhY2hlZCB6ZXJvLiBJZiB0aGUgUmV0cnkgQ291bnQgaGFzIHJlYWNoZWQgemVybywgYW4gZXJyb3Igd2lsbAorICogYmUgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcyBhZGRyZXNzICgweEJBU0VfMDYyOCkgaXMgdXNlZCBhcyBTQ1IyTCBvbmx5IGlmCisgKiBNQ1RMW1BSR01dIGlzIDEuIElmIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBhZGRyZXNzIGlzIHVzZWQgYXMgU0NSMkMgcmVhZGJhY2sKKyAqIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ1IyTCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TQ1IyTF9SRUcoYmFzZSkgKChiYXNlKS0+U0NSMkwpCisjZGVmaW5lIFRSTkdfUkRfU0NSMkwoYmFzZSkgKFRSTkdfU0NSMkxfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NDUjJMKGJhc2UsIHZhbHVlKSAoVFJOR19TQ1IyTF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TQ1IyTChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0NSMkwoYmFzZSwgKFRSTkdfUkRfU0NSMkwoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TQ1IyTCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSMkwsIGZpZWxkIFJVTjJfTUFYWzEzOjBdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDIgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcnVucyBvZiBsZW5ndGggMgorICogKGZvciBib3RoIDAgYW5kIDEpIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uIFRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDIgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBSVU4yX01BWCwgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDBEQ2ggKGRlY2ltYWwgMjIwKSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1IyTF9SVU4yX01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1IyTF9SVU4yX01BWChiYXNlKSAoKFRSTkdfU0NSMkxfUkVHKGJhc2UpICYgVFJOR19TQ1IyTF9SVU4yX01BWF9NQVNLKSA+PiBUUk5HX1NDUjJMX1JVTjJfTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVOMl9NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSMkxfUlVOMl9NQVgoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ1IyTChiYXNlLCBUUk5HX1NDUjJMX1JVTjJfTUFYX01BU0ssIFRSTkdfU0NSMkxfUlVOMl9NQVgodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSMkwsIGZpZWxkIFJVTjJfUk5HWzI5OjE2XSAoUlcpCisgKgorICogUnVuIExlbmd0aCAyIFJhbmdlLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDIgKGZvciBib3RoIDAgYW5kIDEpCisgKiBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIFJVTjJfTUFYIC0gUlVOMl9STkcsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwN0FoIChkZWNpbWFsIDEyMikgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSMkxfUlVOMl9STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSMkxfUlVOMl9STkcoYmFzZSkgKChUUk5HX1NDUjJMX1JFRyhiYXNlKSAmIFRSTkdfU0NSMkxfUlVOMl9STkdfTUFTSykgPj4gVFJOR19TQ1IyTF9SVU4yX1JOR19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjJfUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjJMX1JVTjJfUk5HKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSMkwoYmFzZSwgVFJOR19TQ1IyTF9SVU4yX1JOR19NQVNLLCBUUk5HX1NDUjJMX1JVTjJfUk5HKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NSM0wgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCAzIExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NDUjNMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggMyBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDA1ODAwN0RVCisgKgorICogVGhlIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDMgTGltaXQgUmVnaXN0ZXIgZGVmaW5lcyB0aGUgYWxsb3dhYmxlCisgKiBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAzIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgKiBnZW5lcmF0aW9uLiBUbyBwYXNzIHRoZSB0ZXN0LCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDMgKGZvciBzYW1wbGVzIG9mIGJvdGggMAorICogYW5kIDEpIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBwcm9ncmFtbWVkIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCAzIG11c3QgYmUgZ3JlYXRlciB0aGFuIChtYXhpbXVtIC0gcmFuZ2UpLiBJZiB0aGlzIHRlc3QgZmFpbHMsIHRoZQorICogUmV0cnkgQ291bnRlciBpbiBTQ01JU0Mgd2lsbCBiZSBkZWNyZW1lbnRlZCwgYW5kIGEgcmV0cnkgd2lsbCBvY2N1ciBpZiB0aGUgUmV0cnkKKyAqIENvdW50IGhhcyBub3QgcmVhY2hlZCB6ZXJvLiBJZiB0aGUgUmV0cnkgQ291bnQgaGFzIHJlYWNoZWQgemVybywgYW4gZXJyb3Igd2lsbAorICogYmUgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcyBhZGRyZXNzICgweEJBU0VfMDYyQykgaXMgdXNlZCBhcyBTQ1IzTCBvbmx5IGlmCisgKiBNQ1RMW1BSR01dIGlzIDEuIElmIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBhZGRyZXNzIGlzIHVzZWQgYXMgU0NSM0MgcmVhZGJhY2sKKyAqIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ1IzTCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TQ1IzTF9SRUcoYmFzZSkgKChiYXNlKS0+U0NSM0wpCisjZGVmaW5lIFRSTkdfUkRfU0NSM0woYmFzZSkgKFRSTkdfU0NSM0xfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NDUjNMKGJhc2UsIHZhbHVlKSAoVFJOR19TQ1IzTF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TQ1IzTChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0NSM0woYmFzZSwgKFRSTkdfUkRfU0NSM0woYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TQ1IzTCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSM0wsIGZpZWxkIFJVTjNfTUFYWzEyOjBdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDMgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcnVucyBvZiBsZW5ndGggMworICogKGZvciBib3RoIDAgYW5kIDEpIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uIFRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDMgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBSVU4zX01BWCwgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDA3RGggKGRlY2ltYWwgMTI1KSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1IzTF9SVU4zX01BWCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1IzTF9SVU4zX01BWChiYXNlKSAoKFRSTkdfU0NSM0xfUkVHKGJhc2UpICYgVFJOR19TQ1IzTF9SVU4zX01BWF9NQVNLKSA+PiBUUk5HX1NDUjNMX1JVTjNfTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVOM19NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSM0xfUlVOM19NQVgoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ1IzTChiYXNlLCBUUk5HX1NDUjNMX1JVTjNfTUFYX01BU0ssIFRSTkdfU0NSM0xfUlVOM19NQVgodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSM0wsIGZpZWxkIFJVTjNfUk5HWzI4OjE2XSAoUlcpCisgKgorICogUnVuIExlbmd0aCAzIFJhbmdlLiBUaGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDMgKGZvciBib3RoIDAgYW5kIDEpCisgKiBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIFJVTjNfTUFYIC0gUlVOM19STkcsIGVsc2UgYQorICogcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwNThoIChkZWNpbWFsIDg4KSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1IzTF9SVU4zX1JORyBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQ1IzTF9SVU4zX1JORyhiYXNlKSAoKFRSTkdfU0NSM0xfUkVHKGJhc2UpICYgVFJOR19TQ1IzTF9SVU4zX1JOR19NQVNLKSA+PiBUUk5HX1NDUjNMX1JVTjNfUk5HX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVOM19STkcgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NSM0xfUlVOM19STkcoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TQ1IzTChiYXNlLCBUUk5HX1NDUjNMX1JVTjNfUk5HX01BU0ssIFRSTkdfU0NSM0xfUlVOM19STkcodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19TQ1I0TCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDQgTGltaXQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfU0NSNEwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA0IExpbWl0IFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDQwMDA0QlUKKyAqCisgKiBUaGUgUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNCBMaW1pdCBSZWdpc3RlciBkZWZpbmVzIHRoZSBhbGxvd2FibGUKKyAqIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDQgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkKKyAqIGdlbmVyYXRpb24uIFRvIHBhc3MgdGhlIHRlc3QsIHRoZSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNCAoZm9yIHNhbXBsZXMgb2YgYm90aCAwCisgKiBhbmQgMSkgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHByb2dyYW1tZWQgbWF4aW11bSB2YWx1ZSwgYW5kIHRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDQgbXVzdCBiZSBncmVhdGVyIHRoYW4gKG1heGltdW0gLSByYW5nZSkuIElmIHRoaXMgdGVzdCBmYWlscywgdGhlCisgKiBSZXRyeSBDb3VudGVyIGluIFNDTUlTQyB3aWxsIGJlIGRlY3JlbWVudGVkLCBhbmQgYSByZXRyeSB3aWxsIG9jY3VyIGlmIHRoZSBSZXRyeQorICogQ291bnQgaGFzIG5vdCByZWFjaGVkIHplcm8uIElmIHRoZSBSZXRyeSBDb3VudCBoYXMgcmVhY2hlZCB6ZXJvLCBhbiBlcnJvciB3aWxsCisgKiBiZSBnZW5lcmF0ZWQuIE5vdGUgdGhhdCB0aGlzIGFkZHJlc3MgKDB4QkFTRV8wNjMwKSBpcyB1c2VkIGFzIFNDUjRMIG9ubHkgaWYKKyAqIE1DVExbUFJHTV0gaXMgMS4gSWYgTUNUTFtQUkdNXSBpcyAwLCB0aGlzIGFkZHJlc3MgaXMgdXNlZCBhcyBTQ1I0QyByZWFkYmFjaworICogcmVnaXN0ZXIuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1NDUjRMIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX1NDUjRMX1JFRyhiYXNlKSAoKGJhc2UpLT5TQ1I0TCkKKyNkZWZpbmUgVFJOR19SRF9TQ1I0TChiYXNlKSAoVFJOR19TQ1I0TF9SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfU0NSNEwoYmFzZSwgdmFsdWUpIChUUk5HX1NDUjRMX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX1NDUjRMKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9TQ1I0TChiYXNlLCAoVFJOR19SRF9TQ1I0TChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyoKKyAqIENvbnN0YW50cyAmIG1hY3JvcyBmb3IgaW5kaXZpZHVhbCBUUk5HX1NDUjRMIGJpdGZpZWxkcworICovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ1I0TCwgZmllbGQgUlVONF9NQVhbMTE6MF0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggNCBNYXhpbXVtIExpbWl0LiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBydW5zIG9mIGxlbmd0aCA0CisgKiAoZm9yIGJvdGggMCBhbmQgMSkgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gVGhlIG51bWJlciBvZiBydW5zIG9mCisgKiBsZW5ndGggNCBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIG11c3QgYmUgbGVzcyB0aGFuIFJVTjRfTUFYLCBlbHNlIGEKKyAqIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDRCaCAoZGVjaW1hbCA3NSkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSNExfUlVONF9NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSNExfUlVONF9NQVgoYmFzZSkgKChUUk5HX1NDUjRMX1JFRyhiYXNlKSAmIFRSTkdfU0NSNExfUlVONF9NQVhfTUFTSykgPj4gVFJOR19TQ1I0TF9SVU40X01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjRfTUFYIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjRMX1JVTjRfTUFYKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSNEwoYmFzZSwgVFJOR19TQ1I0TF9SVU40X01BWF9NQVNLLCBUUk5HX1NDUjRMX1JVTjRfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjRMLCBmaWVsZCBSVU40X1JOR1syNzoxNl0gKFJXKQorICoKKyAqIFJ1biBMZW5ndGggNCBSYW5nZS4gVGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA0IChmb3IgYm90aCAwIGFuZCAxKQorICogZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBSVU40X01BWCAtIFJVTjRfUk5HLCBlbHNlIGEKKyAqIHJldHJ5IG9yIGVycm9yIHdpbGwgb2NjdXIuIFRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byAwMDQwaCAoZGVjaW1hbCA2NCkgYnkKKyAqIHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0NSNExfUlVONF9STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSNExfUlVONF9STkcoYmFzZSkgKChUUk5HX1NDUjRMX1JFRyhiYXNlKSAmIFRSTkdfU0NSNExfUlVONF9STkdfTUFTSykgPj4gVFJOR19TQ1I0TF9SVU40X1JOR19TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjRfUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjRMX1JVTjRfUk5HKGJhc2UsIHZhbHVlKSAoVFJOR19STVdfU0NSNEwoYmFzZSwgVFJOR19TQ1I0TF9SVU40X1JOR19NQVNLLCBUUk5HX1NDUjRMX1JVTjRfUk5HKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NSNUwgLSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgUnVuIExlbmd0aCA1IExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NDUjVMIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNSBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAyRTAwMkZVCisgKgorICogVGhlIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDUgTGltaXQgUmVnaXN0ZXIgZGVmaW5lcyB0aGUgYWxsb3dhYmxlCisgKiBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA1IGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgKiBnZW5lcmF0aW9uLiBUbyBwYXNzIHRoZSB0ZXN0LCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDUgKGZvciBzYW1wbGVzIG9mIGJvdGggMAorICogYW5kIDEpIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBwcm9ncmFtbWVkIG1heGltdW0gdmFsdWUsIGFuZCB0aGUgbnVtYmVyIG9mIHJ1bnMgb2YKKyAqIGxlbmd0aCA1IG11c3QgYmUgZ3JlYXRlciB0aGFuIChtYXhpbXVtIC0gcmFuZ2UpLiBJZiB0aGlzIHRlc3QgZmFpbHMsIHRoZQorICogUmV0cnkgQ291bnRlciBpbiBTQ01JU0Mgd2lsbCBiZSBkZWNyZW1lbnRlZCwgYW5kIGEgcmV0cnkgd2lsbCBvY2N1ciBpZiB0aGUgUmV0cnkKKyAqIENvdW50IGhhcyBub3QgcmVhY2hlZCB6ZXJvLiBJZiB0aGUgUmV0cnkgQ291bnQgaGFzIHJlYWNoZWQgemVybywgYW4gZXJyb3Igd2lsbAorICogYmUgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcyBhZGRyZXNzICgweEJBU0VfMDYzNCkgaXMgdXNlZCBhcyBTQ1I1TCBvbmx5IGlmCisgKiBNQ1RMW1BSR01dIGlzIDEuIElmIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBhZGRyZXNzIGlzIHVzZWQgYXMgU0NSNUMgcmVhZGJhY2sKKyAqIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ1I1TCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TQ1I1TF9SRUcoYmFzZSkgKChiYXNlKS0+U0NSNUwpCisjZGVmaW5lIFRSTkdfUkRfU0NSNUwoYmFzZSkgKFRSTkdfU0NSNUxfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NDUjVMKGJhc2UsIHZhbHVlKSAoVFJOR19TQ1I1TF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TQ1I1TChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0NSNUwoYmFzZSwgKFRSTkdfUkRfU0NSNUwoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TQ1I1TCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0NSNUwsIGZpZWxkIFJVTjVfTUFYWzEwOjBdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDUgTWF4aW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2FibGUgcnVucyBvZiBsZW5ndGggNQorICogKGZvciBib3RoIDAgYW5kIDEpIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uIFRoZSBudW1iZXIgb2YgcnVucyBvZgorICogbGVuZ3RoIDUgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiBSVU41X01BWCwgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDAyRmggKGRlY2ltYWwgNDcpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjVMX1JVTjVfTUFYIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjVMX1JVTjVfTUFYKGJhc2UpICgoVFJOR19TQ1I1TF9SRUcoYmFzZSkgJiBUUk5HX1NDUjVMX1JVTjVfTUFYX01BU0spID4+IFRSTkdfU0NSNUxfUlVONV9NQVhfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU41X01BWCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1I1TF9SVU41X01BWChiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDUjVMKGJhc2UsIFRSTkdfU0NSNUxfUlVONV9NQVhfTUFTSywgVFJOR19TQ1I1TF9SVU41X01BWCh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ1I1TCwgZmllbGQgUlVONV9STkdbMjY6MTZdIChSVykKKyAqCisgKiBSdW4gTGVuZ3RoIDUgUmFuZ2UuIFRoZSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNSAoZm9yIGJvdGggMCBhbmQgMSkKKyAqIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gUlVONV9NQVggLSBSVU41X1JORywgZWxzZSBhCisgKiByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDAyRWggKGRlY2ltYWwgNDYpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjVMX1JVTjVfUk5HIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjVMX1JVTjVfUk5HKGJhc2UpICgoVFJOR19TQ1I1TF9SRUcoYmFzZSkgJiBUUk5HX1NDUjVMX1JVTjVfUk5HX01BU0spID4+IFRSTkdfU0NSNUxfUlVONV9STkdfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBSVU41X1JORyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1I1TF9SVU41X1JORyhiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NDUjVMKGJhc2UsIFRSTkdfU0NSNUxfUlVONV9STkdfTUFTSywgVFJOR19TQ1I1TF9SVU41X1JORyh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX1NDUjZQTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NDUjZQTCAtIFJORyBTdGF0aXN0aWNhbCBDaGVjayBSdW4gTGVuZ3RoIDYrIExpbWl0IFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDJFMDAyRlUKKyAqCisgKiBUaGUgUk5HIFN0YXRpc3RpY2FsIENoZWNrIFJ1biBMZW5ndGggNisgTGltaXQgUmVnaXN0ZXIgZGVmaW5lcyB0aGUgYWxsb3dhYmxlCisgKiBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA2IG9yIG1vcmUgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkKKyAqIGdlbmVyYXRpb24uIFRvIHBhc3MgdGhlIHRlc3QsIHRoZSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNiBvciBtb3JlIChmb3IKKyAqIHNhbXBsZXMgb2YgYm90aCAwIGFuZCAxKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgcHJvZ3JhbW1lZCBtYXhpbXVtIHZhbHVlLCBhbmQgdGhlCisgKiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNiBvciBtb3JlIG11c3QgYmUgZ3JlYXRlciB0aGFuIChtYXhpbXVtIC0gcmFuZ2UpLiBJZgorICogdGhpcyB0ZXN0IGZhaWxzLCB0aGUgUmV0cnkgQ291bnRlciBpbiBTQ01JU0Mgd2lsbCBiZSBkZWNyZW1lbnRlZCwgYW5kIGEgcmV0cnkKKyAqIHdpbGwgb2NjdXIgaWYgdGhlIFJldHJ5IENvdW50IGhhcyBub3QgcmVhY2hlZCB6ZXJvLiBJZiB0aGUgUmV0cnkgQ291bnQgaGFzCisgKiByZWFjaGVkIHplcm8sIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhpcyBvZmZzZXQgKDB4QkFTRV8wNjM4KSBpcworICogdXNlZCBhcyBTQ1I2UEwgb25seSBpZiBNQ1RMW1BSR01dIGlzIDEuIElmIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBvZmZzZXQgaXMKKyAqIHVzZWQgYXMgU0NSNlBDIHJlYWRiYWNrIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQ1I2UEwgcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfU0NSNlBMX1JFRyhiYXNlKSAoKGJhc2UpLT5TQ1I2UEwpCisjZGVmaW5lIFRSTkdfUkRfU0NSNlBMKGJhc2UpIChUUk5HX1NDUjZQTF9SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfU0NSNlBMKGJhc2UsIHZhbHVlKSAoVFJOR19TQ1I2UExfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfU0NSNlBMKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9TQ1I2UEwoYmFzZSwgKFRSTkdfUkRfU0NSNlBMKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfU0NSNlBMIGJpdGZpZWxkcworICovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TQ1I2UEwsIGZpZWxkIFJVTjZQX01BWFsxMDowXSAoUlcpCisgKgorICogUnVuIExlbmd0aCA2KyBNYXhpbXVtIExpbWl0LiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBydW5zIG9mIGxlbmd0aCA2CisgKiBvciBtb3JlIChmb3IgYm90aCAwIGFuZCAxKSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiBUaGUgbnVtYmVyIG9mCisgKiBydW5zIG9mIGxlbmd0aCA2IG9yIG1vcmUgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiBtdXN0IGJlIGxlc3MgdGhhbgorICogUlVONlBfTUFYLCBlbHNlIGEgcmV0cnkgb3IgZXJyb3Igd2lsbCBvY2N1ci4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwMkZoCisgKiAoZGVjaW1hbCA0NykgYnkgd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ1I2UExfUlVONlBfTUFYIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NDUjZQTF9SVU42UF9NQVgoYmFzZSkgXAorICAgICgoVFJOR19TQ1I2UExfUkVHKGJhc2UpICYgVFJOR19TQ1I2UExfUlVONlBfTUFYX01BU0spID4+IFRSTkdfU0NSNlBMX1JVTjZQX01BWF9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIFJVTjZQX01BWCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9TQ1I2UExfUlVONlBfTUFYKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1NDUjZQTChiYXNlLCBUUk5HX1NDUjZQTF9SVU42UF9NQVhfTUFTSywgVFJOR19TQ1I2UExfUlVONlBfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDUjZQTCwgZmllbGQgUlVONlBfUk5HWzI2OjE2XSAoUlcpCisgKgorICogUnVuIExlbmd0aCA2KyBSYW5nZS4gVGhlIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA2IG9yIG1vcmUgKGZvciBib3RoIDAgYW5kCisgKiAxKSBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIFJVTjZQX01BWCAtCisgKiBSVU42UF9STkcsIGVsc2UgYSByZXRyeSBvciBlcnJvciB3aWxsIG9jY3VyLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDAyRWgKKyAqIChkZWNpbWFsIDQ2KSBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NDUjZQTF9SVU42UF9STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NSNlBMX1JVTjZQX1JORyhiYXNlKSBcCisgICAgKChUUk5HX1NDUjZQTF9SRUcoYmFzZSkgJiBUUk5HX1NDUjZQTF9SVU42UF9STkdfTUFTSykgPj4gVFJOR19TQ1I2UExfUlVONlBfUk5HX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUlVONlBfUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NDUjZQTF9SVU42UF9STkcoYmFzZSwgdmFsdWUpIFwKKyAgICAoVFJOR19STVdfU0NSNlBMKGJhc2UsIFRSTkdfU0NSNlBMX1JVTjZQX1JOR19NQVNLLCBUUk5HX1NDUjZQTF9SVU42UF9STkcodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19QS1JNQVggLSBSTkcgUG9rZXIgTWF4aW11bSBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19QS1JNQVggLSBSTkcgUG9rZXIgTWF4aW11bSBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMDY5MjBVCisgKgorICogVGhlIFJORyBQb2tlciBNYXhpbXVtIExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgTWF4aW11bSBMaW1pdCBhbGxvd2FibGUgZHVyaW5nCisgKiB0aGUgVFJORyBTdGF0aXN0aWNhbCBDaGVjayBQb2tlciBUZXN0LiBOb3RlIHRoYXQgdGhpcyBvZmZzZXQgKDB4QkFTRV8wNjBDKSBpcworICogdXNlZCBhcyBQS1JNQVggb25seSBpZiBNQ1RMW1BSR01dIGlzIDEuIElmIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBvZmZzZXQgaXMgdXNlZAorICogYXMgdGhlIFBLUlNRIHJlYWRiYWNrIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19QS1JNQVggcmVnaXN0ZXIKKyAqLworLypAeyovCisjZGVmaW5lIFRSTkdfUEtSTUFYX1JFRyhiYXNlKSAoKGJhc2UpLT5QS1JNQVgpCisjZGVmaW5lIFRSTkdfUkRfUEtSTUFYKGJhc2UpIChUUk5HX1BLUk1BWF9SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfUEtSTUFYKGJhc2UsIHZhbHVlKSAoVFJOR19QS1JNQVhfUkVHKGJhc2UpID0gKHZhbHVlKSkKKyNkZWZpbmUgVFJOR19STVdfUEtSTUFYKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9QS1JNQVgoYmFzZSwgKFRSTkdfUkRfUEtSTUFYKGJhc2UpICYgfihtYXNrKSkgfCAodmFsdWUpKSkKKy8qQH0qLworCisvKgorICogQ29uc3RhbnRzICYgbWFjcm9zIGZvciBpbmRpdmlkdWFsIFRSTkdfUEtSTUFYIGJpdGZpZWxkcworICovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19QS1JNQVgsIGZpZWxkIFBLUl9NQVhbMjM6MF0gKFJXKQorICoKKyAqIFBva2VyIE1heGltdW0gTGltaXQuIER1cmluZyB0aGUgVFJORyBTdGF0aXN0aWNhbCBDaGVja3MsIGEgIlBva2VyIFRlc3QiIGlzCisgKiBydW4gd2hpY2ggcmVxdWlyZXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0LiBUaGUgbWF4aW11bSBhbGxvd2FibGUgcmVzdWx0IGlzCisgKiBwcm9ncmFtbWVkIGluIHRoZSBQS1JNQVhbUEtSX01BWF0gcmVnaXN0ZXIuIFRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZgorICogTUNUTFtQUkdNXSBiaXQgaXMgMS4gVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwNjkyMGggKGRlY2ltYWwgMjY5MTIpIGJ5CisgKiB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdIGJpdCB0byAxLiBOb3RlIHRoYXQgdGhlIFBLUk1BWCBhbmQgUEtSUk5HIHJlZ2lzdGVycworICogY29tYmluZWQgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBtaW5pbXVtIGFsbG93YWJsZSBQb2tlciByZXN1bHQsIHdoaWNoIGlzIFBLUl9NQVggLQorICogUEtSX1JORyArIDEuIE5vdGUgdGhhdCBpZiBNQ1RMW1BSR01dIGJpdCBpcyAwLCB0aGlzIHJlZ2lzdGVyIGFkZHJlc3MgaXMgdXNlZAorICogdG8gcmVhZCB0aGUgUG9rZXIgVGVzdCBTcXVhcmUgQ2FsY3VsYXRpb24gcmVzdWx0IGluIHJlZ2lzdGVyIFBLUlNRLCBhcyBkZWZpbmVkCisgKiBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfUEtSTUFYX1BLUl9NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfUEtSTUFYX1BLUl9NQVgoYmFzZSkgKChUUk5HX1BLUk1BWF9SRUcoYmFzZSkgJiBUUk5HX1BLUk1BWF9QS1JfTUFYX01BU0spID4+IFRSTkdfUEtSTUFYX1BLUl9NQVhfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBQS1JfTUFYIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1BLUk1BWF9QS1JfTUFYKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1BLUk1BWChiYXNlLCBUUk5HX1BLUk1BWF9QS1JfTUFYX01BU0ssIFRSTkdfUEtSTUFYX1BLUl9NQVgodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19QS1JSTkcgLSBSTkcgUG9rZXIgUmFuZ2UgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfUEtSUk5HIC0gUk5HIFBva2VyIFJhbmdlIFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDAwMDlBM1UKKyAqCisgKiBUaGUgUk5HIFBva2VyIFJhbmdlIFJlZ2lzdGVyIGRlZmluZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgVFJORyBQb2tlcgorICogTWF4aW11bSBMaW1pdCBhbmQgdGhlIG1pbmltdW0gbGltaXQuIFRoZXNlIGxpbWl0cyBhcmUgdXNlZCBkdXJpbmcgdGhlIFRSTkcKKyAqIFN0YXRpc3RpY2FsIENoZWNrIFBva2VyIFRlc3QuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1BLUlJORyByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19QS1JSTkdfUkVHKGJhc2UpICgoYmFzZSktPlBLUlJORykKKyNkZWZpbmUgVFJOR19SRF9QS1JSTkcoYmFzZSkgKFRSTkdfUEtSUk5HX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9QS1JSTkcoYmFzZSwgdmFsdWUpIChUUk5HX1BLUlJOR19SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19QS1JSTkcoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1BLUlJORyhiYXNlLCAoVFJOR19SRF9QS1JSTkcoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19QS1JSTkcgYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1BLUlJORywgZmllbGQgUEtSX1JOR1sxNTowXSAoUlcpCisgKgorICogUG9rZXIgUmFuZ2UuIER1cmluZyB0aGUgVFJORyBTdGF0aXN0aWNhbCBDaGVja3MsIGEgIlBva2VyIFRlc3QiIGlzIHJ1biB3aGljaAorICogcmVxdWlyZXMgYSBtYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0LiBUaGUgbWF4aW11bSBpcyBwcm9ncmFtbWVkIGluIHRoZQorICogUlRQS1JNQVhbUEtSX01BWF0gcmVnaXN0ZXIsIGFuZCB0aGUgbWluaW11bSBpcyBkZXJpdmVkIGJ5IHN1YnRyYWN0aW5nIHRoZSBQS1JfUk5HCisgKiB2YWx1ZSBmcm9tIHRoZSBwcm9ncmFtbWVkIG1heGltdW0gdmFsdWUuIFRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZgorICogTUNUTFtQUkdNXSBiaXQgaXMgMS4gVGhpcyBmaWVsZCB3aWxsIHJlYWQgemVyb2VzIGlmIE1DVExbUFJHTV0gPSAwLiBUaGlzIGZpZWxkIGlzCisgKiBjbGVhcmVkIHRvIDA5QTNoIChkZWNpbWFsIDI0NjcpIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuIE5vdGUgdGhhdAorICogdGhlIG1pbmltdW0gYWxsb3dhYmxlIFBva2VyIHJlc3VsdCBpcyBQS1JfTUFYIC0gUEtSX1JORyArIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfUEtSUk5HX1BLUl9STkcgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfUEtSUk5HX1BLUl9STkcoYmFzZSkgKChUUk5HX1BLUlJOR19SRUcoYmFzZSkgJiBUUk5HX1BLUlJOR19QS1JfUk5HX01BU0spID4+IFRSTkdfUEtSUk5HX1BLUl9STkdfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBQS1JfUk5HIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1BLUlJOR19QS1JfUk5HKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1BLUlJORyhiYXNlLCBUUk5HX1BLUlJOR19QS1JfUk5HX01BU0ssIFRSTkdfUEtSUk5HX1BLUl9STkcodmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19GUlFNQVggLSBSTkcgRnJlcXVlbmN5IENvdW50IE1heGltdW0gTGltaXQgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfRlJRTUFYIC0gUk5HIEZyZXF1ZW5jeSBDb3VudCBNYXhpbXVtIExpbWl0IFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDAwNjQwMFUKKyAqCisgKiBUaGUgUk5HIEZyZXF1ZW5jeSBDb3VudCBNYXhpbXVtIExpbWl0IFJlZ2lzdGVyIGRlZmluZXMgdGhlIG1heGltdW0gYWxsb3dhYmxlCisgKiBjb3VudCB0YWtlbiBieSB0aGUgRW50cm9weSBzYW1wbGUgY291bnRlciBkdXJpbmcgZWFjaCBFbnRyb3B5IHNhbXBsZS4gRHVyaW5nCisgKiBhbnkgc2FtcGxlIHBlcmlvZCwgaWYgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHByb2dyYW1tZWQgbWF4aW11bSwgYQorICogRnJlcXVlbmN5IENvdW50IEZhaWwgaXMgZmxhZ2dlZCBpbiBNQ1RMW0ZDVF9GQUlMXSBhbmQgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiBOb3RlCisgKiB0aGF0IHRoaXMgYWRkcmVzcyAoMDYxQykgaXMgdXNlZCBhcyBGUlFNQVggb25seSBpZiBNQ1RMW1BSR01dIGlzIDEuIElmCisgKiBNQ1RMW1BSR01dIGlzIDAsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIEZSUUNOVCByZWFkYmFjayByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfRlJRTUFYIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX0ZSUU1BWF9SRUcoYmFzZSkgKChiYXNlKS0+RlJRTUFYKQorI2RlZmluZSBUUk5HX1JEX0ZSUU1BWChiYXNlKSAoVFJOR19GUlFNQVhfUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX0ZSUU1BWChiYXNlLCB2YWx1ZSkgKFRSTkdfRlJRTUFYX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX0ZSUU1BWChiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfRlJRTUFYKGJhc2UsIChUUk5HX1JEX0ZSUU1BWChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyoKKyAqIENvbnN0YW50cyAmIG1hY3JvcyBmb3IgaW5kaXZpZHVhbCBUUk5HX0ZSUU1BWCBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfRlJRTUFYLCBmaWVsZCBGUlFfTUFYWzIxOjBdIChSVykKKyAqCisgKiBGcmVxdWVuY3kgQ291bnRlciBNYXhpbXVtIExpbWl0LiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBjb3VudCB0YWtlbgorICogZHVyaW5nIGVhY2ggZW50cm9weSBzYW1wbGUuIFRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZiBNQ1RMW1BSR01dIGJpdCBpcyAxLgorICogVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIDAwMDY0MGggYnkgd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqIE5vdGUgdGhhdCBpZiBNQ1RMW1BSR01dIGJpdCBpcyAwLCB0aGlzIHJlZ2lzdGVyIGFkZHJlc3MgaXMgdXNlZCB0byByZWFkIHRoZQorICogRnJlcXVlbmN5IENvdW50IHJlc3VsdCBpbiByZWdpc3RlciBGUlFDTlQsIGFzIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX0ZSUU1BWF9GUlFfTUFYIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX0ZSUU1BWF9GUlFfTUFYKGJhc2UpICgoVFJOR19GUlFNQVhfUkVHKGJhc2UpICYgVFJOR19GUlFNQVhfRlJRX01BWF9NQVNLKSA+PiBUUk5HX0ZSUU1BWF9GUlFfTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgRlJRX01BWCBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9GUlFNQVhfRlJRX01BWChiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19GUlFNQVgoYmFzZSwgVFJOR19GUlFNQVhfRlJRX01BWF9NQVNLLCBUUk5HX0ZSUU1BWF9GUlFfTUFYKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfRlJRTUlOIC0gUk5HIEZyZXF1ZW5jeSBDb3VudCBNaW5pbXVtIExpbWl0IFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX0ZSUU1JTiAtIFJORyBGcmVxdWVuY3kgQ291bnQgTWluaW11bSBMaW1pdCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMDA2NDBVCisgKgorICogVGhlIFJORyBGcmVxdWVuY3kgQ291bnQgTWluaW11bSBMaW1pdCBSZWdpc3RlciBkZWZpbmVzIHRoZSBtaW5pbXVtIGFsbG93YWJsZQorICogY291bnQgdGFrZW4gYnkgdGhlIEVudHJvcHkgc2FtcGxlIGNvdW50ZXIgZHVyaW5nIGVhY2ggRW50cm9weSBzYW1wbGUuIER1cmluZworICogYW55IHNhbXBsZSBwZXJpb2QsIGlmIHRoZSBjb3VudCBpcyBsZXNzIHRoYW4gdGhpcyBwcm9ncmFtbWVkIG1pbmltdW0sIGEKKyAqIEZyZXF1ZW5jeSBDb3VudCBGYWlsIGlzIGZsYWdnZWQgaW4gTUNUTFtGQ1RfRkFJTF0gYW5kIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfRlJRTUlOIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX0ZSUU1JTl9SRUcoYmFzZSkgKChiYXNlKS0+RlJRTUlOKQorI2RlZmluZSBUUk5HX1JEX0ZSUU1JTihiYXNlKSAoVFJOR19GUlFNSU5fUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX0ZSUU1JTihiYXNlLCB2YWx1ZSkgKFRSTkdfRlJRTUlOX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX0ZSUU1JTihiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfRlJRTUlOKGJhc2UsIChUUk5HX1JEX0ZSUU1JTihiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyoKKyAqIENvbnN0YW50cyAmIG1hY3JvcyBmb3IgaW5kaXZpZHVhbCBUUk5HX0ZSUU1JTiBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfRlJRTUlOLCBmaWVsZCBGUlFfTUlOWzIxOjBdIChSVykKKyAqCisgKiBGcmVxdWVuY3kgQ291bnQgTWluaW11bSBMaW1pdC4gRGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2FibGUgY291bnQgdGFrZW4KKyAqIGR1cmluZyBlYWNoIGVudHJvcHkgc2FtcGxlLiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMS4KKyAqIFRoaXMgZmllbGQgd2lsbCByZWFkIHplcm9lcyBpZiBNQ1RMW1BSR01dID0gMC4gVGhpcyBmaWVsZCBpcyBjbGVhcmVkIHRvIDAwMDBoNjQKKyAqIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfRlJRTUlOX0ZSUV9NSU4gZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfRlJRTUlOX0ZSUV9NSU4oYmFzZSkgKChUUk5HX0ZSUU1JTl9SRUcoYmFzZSkgJiBUUk5HX0ZSUU1JTl9GUlFfTUlOX01BU0spID4+IFRSTkdfRlJRTUlOX0ZSUV9NSU5fU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBGUlFfTUlOIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX0ZSUU1JTl9GUlFfTUlOKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX0ZSUU1JTihiYXNlLCBUUk5HX0ZSUU1JTl9GUlFfTUlOX01BU0ssIFRSTkdfRlJRTUlOX0ZSUV9NSU4odmFsdWUpKSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19NQ1RMIC0gUk5HIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19NQ1RMIC0gUk5HIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MDAwMTIwMDFVCisgKgorICogVGhpcyByZWdpc3RlciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBwcm9ncmFtbWluZywgY29uZmlndXJpbmcgYW5kIHRlc3RpbmcKKyAqIHRoZSBSTkcuIEl0IGlzIHRoZSBtYWluIHJlZ2lzdGVyIHRvIHJlYWQvd3JpdGUsIGluIG9yZGVyIHRvIGVuYWJsZSBFbnRyb3B5CisgKiBnZW5lcmF0aW9uLCB0byBzdG9wIGVudHJvcHkgZ2VuZXJhdGlvbiBhbmQgdG8gYmxvY2sgYWNjZXNzIHRvIGVudHJvcHkgcmVnaXN0ZXJzLgorICogVGhpcyBpcyBkb25lIHZpYSB0aGUgc3BlY2lhbCBUUk5HX0FDQyBhbmQgUFJHTSBiaXRzIGJlbG93LiBUaGUgUk5HCisgKiBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIgaXMgYSByZWFkL3dyaXRlIHJlZ2lzdGVyIHVzZWQgdG8gY29udHJvbCB0aGUgUk5HJ3MgVHJ1ZQorICogUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKFRSTkcpIGFjY2Vzcywgb3BlcmF0aW9uIGFuZCB0ZXN0LiBOb3RlIHRoYXQgaW4gbWFueQorICogY2FzZXMgdHdvIFJORyByZWdpc3RlcnMgc2hhcmUgdGhlIHNhbWUgYWRkcmVzcywgYW5kIGEgcGFydGljdWxhciByZWdpc3RlciBhdCB0aGUKKyAqIHNoYXJlZCBhZGRyZXNzIGlzIHNlbGVjdGVkIGJhc2VkIHVwb24gdGhlIHZhbHVlIGluIHRoZSBQUkdNIGZpZWxkIG9mIHRoZSBNQ1RMCisgKiByZWdpc3Rlci4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfTUNUTCByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19NQ1RMX1JFRyhiYXNlKSAoKGJhc2UpLT5NQ1RMKQorI2RlZmluZSBUUk5HX1JEX01DVEwoYmFzZSkgKFRSTkdfTUNUTF9SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfTUNUTChiYXNlLCB2YWx1ZSkgKFRSTkdfTUNUTF9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19NQ1RMKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9NQ1RMKGJhc2UsIChUUk5HX1JEX01DVEwoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBGT1JfU0NMS1s3XSAoUlcpCisgKgorICogRm9yY2UgU3lzdGVtIENsb2NrLiBJZiBzZXQsIHRoZSBzeXN0ZW0gY2xvY2sgaXMgdXNlZCB0byBvcGVyYXRlIHRoZSBUUk5HLAorICogaW5zdGVhZCBvZiB0aGUgcmluZyBvc2NpbGxhdG9yLiBUaGlzIGlzIGZvciB0ZXN0IHVzZSBvbmx5LCBhbmQgaW5kZXRlcm1pbmF0ZQorICogcmVzdWx0cyBtYXkgb2NjdXIuIFRoaXMgYml0IGlzIHdyaXRhYmxlIG9ubHkgaWYgUFJHTSBiaXQgaXMgMSwgb3IgUFJHTSBiaXQgaXMKKyAqIGJlaW5nIHdyaXR0ZW4gdG8gMSBzaW11bHRhbmVvdXNseSB0byB3cml0aW5nIHRoaXMgYml0LiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5CisgKiB3cml0aW5nIHRoZSBSU1RfREVGIGJpdCB0byAxLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfRk9SX1NDTEsgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfTUNUTF9GT1JfU0NMSyhiYXNlKSAoKFRSTkdfTUNUTF9SRUcoYmFzZSkgJiBUUk5HX01DVExfRk9SX1NDTEtfTUFTSykgPj4gVFJOR19NQ1RMX0ZPUl9TQ0xLX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgRk9SX1NDTEsgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfTUNUTF9GT1JfU0NMSyhiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19NQ1RMKGJhc2UsIChUUk5HX01DVExfRk9SX1NDTEtfTUFTSyB8IFRSTkdfTUNUTF9FUlJfTUFTSyksIFRSTkdfTUNUTF9GT1JfU0NMSyh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBPU0NfRElWWzM6Ml0gKFJXKQorICoKKyAqIE9zY2lsbGF0b3IgRGl2aWRlLiBEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2YgZGl2aWRpbmcgZG9uZSB0byB0aGUgcmluZworICogb3NjaWxsYXRvciBiZWZvcmUgaXQgaXMgdXNlZCBieSB0aGUgVFJORy5UaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgUFJHTSBiaXQgaXMKKyAqIDEsIG9yIFBSR00gYml0IGlzIGJlaW5nIHdyaXR0ZW4gdG8gMSBzaW11bHRhbmVvdXNseSB0byB3cml0aW5nIHRoaXMgZmllbGQuIFRoaXMKKyAqIGZpZWxkIGlzIGNsZWFyZWQgdG8gMDAgYnkgd3JpdGluZyB0aGUgUlNUX0RFRiBiaXQgdG8gMS4KKyAqCisgKiBWYWx1ZXM6CisgKiAtIDBiMDAgLSB1c2UgcmluZyBvc2NpbGxhdG9yIHdpdGggbm8gZGl2aWRlCisgKiAtIDBiMDEgLSB1c2UgcmluZyBvc2NpbGxhdG9yIGRpdmlkZWQtYnktMgorICogLSAwYjEwIC0gdXNlIHJpbmcgb3NjaWxsYXRvciBkaXZpZGVkLWJ5LTQKKyAqIC0gMGIxMSAtIHVzZSByaW5nIG9zY2lsbGF0b3IgZGl2aWRlZC1ieS04CisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfTUNUTF9PU0NfRElWIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX01DVExfT1NDX0RJVihiYXNlKSAoKFRSTkdfTUNUTF9SRUcoYmFzZSkgJiBUUk5HX01DVExfT1NDX0RJVl9NQVNLKSA+PiBUUk5HX01DVExfT1NDX0RJVl9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIE9TQ19ESVYgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfTUNUTF9PU0NfRElWKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX01DVEwoYmFzZSwgKFRSTkdfTUNUTF9PU0NfRElWX01BU0sgfCBUUk5HX01DVExfRVJSX01BU0spLCBUUk5HX01DVExfT1NDX0RJVih2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBTQU1QX01PREVbMTowXSAoUlcpCisgKgorICogU2FtcGxlIE1vZGUuIERldGVybWluZXMgdGhlIG1ldGhvZCBvZiBzYW1wbGluZyB0aGUgcmluZyBvc2NpbGxhdG9yIHdoaWxlCisgKiBnZW5lcmF0aW5nIHRoZSBFbnRyb3B5IHZhbHVlOlRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZiBQUkdNIGJpdCBpcyAxLCBvciBQUkdNCisgKiBiaXQgaXMgYmVpbmcgd3JpdHRlbiB0byAxIHNpbXVsdGFuZW91c2x5IHdpdGggd3JpdGluZyB0aGlzIGZpZWxkLiBUaGlzIGZpZWxkCisgKiBpcyBjbGVhcmVkIHRvIDAxIGJ5IHdyaXRpbmcgdGhlIFJTVF9ERUYgYml0IHRvIDEuCisgKgorICogVmFsdWVzOgorICogLSAwYjAwIC0gdXNlIFZvbiBOZXVtYW5uIGRhdGEgaW50byBib3RoIEVudHJvcHkgc2hpZnRlciBhbmQgU3RhdGlzdGljYWwKKyAqICAgICBDaGVja2VyCisgKiAtIDBiMDEgLSB1c2UgcmF3IGRhdGEgaW50byBib3RoIEVudHJvcHkgc2hpZnRlciBhbmQgU3RhdGlzdGljYWwgQ2hlY2tlcgorICogLSAwYjEwIC0gdXNlIFZvbiBOZXVtYW5uIGRhdGEgaW50byBFbnRyb3B5IHNoaWZ0ZXIuIFVzZSByYXcgZGF0YSBpbnRvCisgKiAgICAgU3RhdGlzdGljYWwgQ2hlY2tlcgorICogLSAwYjExIC0gcmVzZXJ2ZWQuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfTUNUTF9TQU1QX01PREUgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfTUNUTF9TQU1QX01PREUoYmFzZSkgKChUUk5HX01DVExfUkVHKGJhc2UpICYgVFJOR19NQ1RMX1NBTVBfTU9ERV9NQVNLKSA+PiBUUk5HX01DVExfU0FNUF9NT0RFX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgU0FNUF9NT0RFIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX01DVExfU0FNUF9NT0RFKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX01DVEwoYmFzZSwgKFRSTkdfTUNUTF9TQU1QX01PREVfTUFTSyB8IFRSTkdfTUNUTF9FUlJfTUFTSyksIFRSTkdfTUNUTF9TQU1QX01PREUodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfTUNUTCwgZmllbGQgUFJHTVsxNl0gKFJXKQorICoKKyAqIFByb2dyYW1taW5nIE1vZGUgU2VsZWN0LiBXaGVuIHRoaXMgYml0IGlzIDEsIHRoZSBUUk5HIGlzIGluIFByb2dyYW0gTW9kZSwKKyAqIG90aGVyd2lzZSBpdCBpcyBpbiBSdW4gTW9kZS4gTm8gRW50cm9weSB2YWx1ZSB3aWxsIGJlIGdlbmVyYXRlZCB3aGlsZSB0aGUgVFJORyBpcworICogaW4gUHJvZ3JhbSBNb2RlLiBOb3RlIHRoYXQgZGlmZmVyZW50IFJORyByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUgYXQgdGhlIHNhbWUKKyAqIGFkZHJlc3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgUFJHTSBpcyBzZXQgdG8gMSBvciAwLiBUaGlzIGlzIG5vdGVkIGluIHRoZSBSTkcKKyAqIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucy4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19NQ1RMX1BSR00gZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfTUNUTF9QUkdNKGJhc2UpICgoVFJOR19NQ1RMX1JFRyhiYXNlKSAmIFRSTkdfTUNUTF9QUkdNX01BU0spID4+IFRSTkdfTUNUTF9QUkdNX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgUFJHTSBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9NQ1RMX1BSR00oYmFzZSwgdmFsdWUpIFwKKyAgICAoVFJOR19STVdfTUNUTChiYXNlLCAoVFJOR19NQ1RMX1BSR01fTUFTSyB8IFRSTkdfTUNUTF9FUlJfTUFTSyksIFRSTkdfTUNUTF9QUkdNKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX01DVEwsIGZpZWxkIFJTVF9ERUZbNl0gKFdPKQorICoKKyAqIFJlc2V0IERlZmF1bHRzLiBXcml0aW5nIGEgMSB0byB0aGlzIGJpdCBjbGVhcnMgdmFyaW91cyBUUk5HIHJlZ2lzdGVycywgYW5kCisgKiBiaXRzIHdpdGhpbiByZWdpc3RlcnMsIHRvIHRoZWlyIGRlZmF1bHQgc3RhdGUuIFRoaXMgYml0IGlzIHdyaXRhYmxlIG9ubHkgaWYgUFJHTQorICogYml0IGlzIDEsIG9yIFBSR00gYml0IGlzIGJlaW5nIHdyaXR0ZW4gdG8gMSBzaW11bHRhbmVvdXNseSB0byB3cml0aW5nIHRoaXMKKyAqIGJpdC4gUmVhZGluZyB0aGlzIGJpdCBhbHdheXMgcHJvZHVjZXMgYSAwLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgU2V0IHRoZSBSU1RfREVGIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX01DVExfUlNUX0RFRihiYXNlLCB2YWx1ZSkgXAorICAgIChUUk5HX1JNV19NQ1RMKGJhc2UsIChUUk5HX01DVExfUlNUX0RFRl9NQVNLIHwgVFJOR19NQ1RMX0VSUl9NQVNLKSwgVFJOR19NQ1RMX1JTVF9ERUYodmFsdWUpKSkKKy8qQH0qLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfTUNUTCwgZmllbGQgVFJOR19BQ0NbNV0gKFJXKQorICoKKyAqIFRSTkcgQWNjZXNzIE1vZGUuIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgVFJORyB3aWxsIGdlbmVyYXRlIGFuIEVudHJvcHkKKyAqIHZhbHVlIHRoYXQgY2FuIGJlIHJlYWQgdmlhIHRoZSBFTlQwLUVOVDE1IHJlZ2lzdGVycy4gVGhlIEVudHJvcHkgdmFsdWUgbWF5IGJlCisgKiByZWFkIG9uY2UgdGhlIEVOVCBWQUwgYml0IGlzIGFzc2VydGVkLiBBbHNvIHNlZSBFTlRhIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucworICogKEZvciBhID0gMCB0byAxNSkuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfTUNUTF9UUk5HX0FDQyBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9NQ1RMX1RSTkdfQUNDKGJhc2UpICgoVFJOR19NQ1RMX1JFRyhiYXNlKSAmIFRSTkdfTUNUTF9UUk5HX0FDQ19NQVNLKSA+PiBUUk5HX01DVExfVFJOR19BQ0NfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBUUk5HX0FDQyBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9NQ1RMX1RSTkdfQUNDKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX01DVEwoYmFzZSwgKFRSTkdfTUNUTF9UUk5HX0FDQ19NQVNLIHwgVFJOR19NQ1RMX0VSUl9NQVNLKSwgVFJOR19NQ1RMX1RSTkdfQUNDKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX01DVEwsIGZpZWxkIFRTVE9QX09LWzEzXSAoUk8pCisgKgorICogVFJOR19PS19UT19TVE9QLiBTb2Z0d2FyZSBzaG91bGQgY2hlY2sgdGhhdCB0aGlzIGJpdCBpcyBhIDEgYmVmb3JlCisgKiB0cmFuc2l0aW9uaW5nIFJORyB0byBsb3cgcG93ZXIgbW9kZSAoUk5HIGNsb2NrIHN0b3BwZWQpLiBSTkcgdHVybnMgb24gdGhlIFRSTkcKKyAqIGZyZWUtcnVubmluZyByaW5nIG9zY2lsbGF0b3Igd2hlbmV2ZXIgbmV3IGVudHJvcHkgaXMgYmVpbmcgZ2VuZXJhdGVkIGFuZCB0dXJucyBvZmYgdGhlCisgKiByaW5nIG9zY2lsbGF0b3Igd2hlbiBlbnRyb3B5IGdlbmVyYXRpb24gaXMgY29tcGxldGUuIElmIHRoZSBSTkcgY2xvY2sgaXMKKyAqIHN0b3BwZWQgd2hpbGUgdGhlIFRSTkcgcmluZyBvc2NpbGxhdG9yIGlzIHJ1bm5pbmcsIHRoZSBvc2NpbGxhdG9yIHdpbGwgY29udGludWUKKyAqIHJ1bm5pbmcgZXZlbiB0aG91Z2ggdGhlIFJORyBjbG9jayBpcyBzdG9wcGVkLiBUU1RPUF9PSyBpcyBhc3NlcnRlZCB3aGVuIHRoZSBUUk5HCisgKiByaW5nIG9zY2lsbGF0b3IgaXMgbm90IHJ1bm5pbmcuIGFuZCB0aGVyZWZvcmUgaXQgaXMgb2sgdG8gc3RvcCB0aGUgUk5HIGNsb2NrLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfVFNUT1BfT0sgZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfTUNUTF9UU1RPUF9PSyhiYXNlKSAoKFRSTkdfTUNUTF9SRUcoYmFzZSkgJiBUUk5HX01DVExfVFNUT1BfT0tfTUFTSykgPj4gVFJOR19NQ1RMX1RTVE9QX09LX1NISUZUKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19NQ1RMLCBmaWVsZCBFTlRfVkFMWzEwXSAoUk8pCisgKgorICogUmVhZCBvbmx5OiBFbnRyb3B5IFZhbGlkLiBXaWxsIGFzc2VydCBvbmx5IGlmIFRSTkcgQUNDIGJpdCBpcyBzZXQsIGFuZCB0aGVuCisgKiBhZnRlciBhbiBlbnRyb3B5IHZhbHVlIGlzIGdlbmVyYXRlZC4gV2lsbCBiZSBjbGVhcmVkIHdoZW4gRU5UMTUgaXMgcmVhZC4gKEVOVDAKKyAqIHRocm91Z2ggRU5UMTQgc2hvdWxkIGJlIHJlYWQgYmVmb3JlIHJlYWRpbmcgRU5UMTUpLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfRU5UX1ZBTCBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9NQ1RMX0VOVF9WQUwoYmFzZSkgKChUUk5HX01DVExfUkVHKGJhc2UpICYgVFJOR19NQ1RMX0VOVF9WQUxfTUFTSykgPj4gVFJOR19NQ1RMX0VOVF9WQUxfU0hJRlQpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX01DVEwsIGZpZWxkIEVSUlsxMl0gKFcxQykKKyAqCisgKiBSZWFkOiBFcnJvciBzdGF0dXMuIDEgPSBlcnJvciBkZXRlY3RlZC4gMCA9IG5vIGVycm9yLldyaXRlOiBXcml0ZSAxIHRvIGNsZWFyCisgKiBlcnJvcnMuIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX01DVExfRVJSIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX01DVExfRVJSKGJhc2UpICgoVFJOR19NQ1RMX1JFRyhiYXNlKSAmIFRSTkdfTUNUTF9FUlJfTUFTSykgPj4gVFJOR19NQ1RMX0VSUl9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIEVSUiBmaWVsZCB0byBhIG5ldyB2YWx1ZS4gKi8KKyNkZWZpbmUgVFJOR19XUl9NQ1RMX0VSUihiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX01DVEwoYmFzZSwgVFJOR19NQ1RMX0VSUl9NQVNLLCBUUk5HX01DVExfRVJSKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0RDVEwgLSBSTkcgU2VlZCBDb250cm9sIFJlZ2lzdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiEKKyAqIEBicmllZiBUUk5HX1NEQ1RMIC0gUk5HIFNlZWQgQ29udHJvbCBSZWdpc3RlciAoUlcpCisgKgorICogUmVzZXQgdmFsdWU6IDB4MEM4MDA5QzRVCisgKgorICogVGhlIFJORyBTZWVkIENvbnRyb2wgUmVnaXN0ZXIgY29udGFpbnMgdHdvIGZpZWxkcy4gT25lIGZpZWxkIGRlZmluZXMgdGhlCisgKiBsZW5ndGggKGluIHN5c3RlbSBjbG9ja3MpIG9mIGVhY2ggRW50cm9weSBzYW1wbGUgKEVOVF9ETFkpLCBhbmQgdGhlIG90aGVyIGZpZWxkCisgKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCB0YWtlbiBkdXJpbmcgZWFjaCBUUk5HIEVudHJvcHkKKyAqIGdlbmVyYXRpb24gKFNBTVBfU0laRSkuCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1NEQ1RMIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX1NEQ1RMX1JFRyhiYXNlKSAoKGJhc2UpLT5TRENUTCkKKyNkZWZpbmUgVFJOR19SRF9TRENUTChiYXNlKSAoVFJOR19TRENUTF9SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfU0RDVEwoYmFzZSwgdmFsdWUpIChUUk5HX1NEQ1RMX1JFRyhiYXNlKSA9ICh2YWx1ZSkpCisjZGVmaW5lIFRSTkdfUk1XX1NEQ1RMKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9TRENUTChiYXNlLCAoVFJOR19SRF9TRENUTChiYXNlKSAmIH4obWFzaykpIHwgKHZhbHVlKSkpCisvKkB9Ki8KKworLyoKKyAqIENvbnN0YW50cyAmIG1hY3JvcyBmb3IgaW5kaXZpZHVhbCBUUk5HX1NEQ1RMIGJpdGZpZWxkcworICovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TRENUTCwgZmllbGQgU0FNUF9TSVpFWzE1OjBdIChSVykKKyAqCisgKiBTYW1wbGUgU2l6ZS4gRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIEVudHJvcHkgc2FtcGxlcyB0aGF0IHdpbGwgYmUgdGFrZW4KKyAqIGR1cmluZyBFbnRyb3B5IGdlbmVyYXRpb24uIFRoaXMgZmllbGQgaXMgd3JpdGFibGUgb25seSBpZiBNQ1RMW1BSR01dIGJpdCBpcyAxLgorICogVGhpcyBmaWVsZCB3aWxsIHJlYWQgemVyb2VzIGlmIE1DVExbUFJHTV0gPSAwLiBUaGlzIGZpZWxkIGlzIGNsZWFyZWQgdG8gMDlDNGgKKyAqIChkZWNpbWFsIDI1MDApIGJ5IHdyaXRpbmcgdGhlIE1DVExbUlNUX0RFRl0gYml0IHRvIDEuCisgKi8KKy8qQHsqLworLyohIEBicmllZiBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRSTkdfU0RDVExfU0FNUF9TSVpFIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NEQ1RMX1NBTVBfU0laRShiYXNlKSAoKFRSTkdfU0RDVExfUkVHKGJhc2UpICYgVFJOR19TRENUTF9TQU1QX1NJWkVfTUFTSykgPj4gVFJOR19TRENUTF9TQU1QX1NJWkVfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBTQU1QX1NJWkUgZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0RDVExfU0FNUF9TSVpFKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1NEQ1RMKGJhc2UsIFRSTkdfU0RDVExfU0FNUF9TSVpFX01BU0ssIFRSTkdfU0RDVExfU0FNUF9TSVpFKHZhbHVlKSkpCisvKkB9Ki8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NEQ1RMLCBmaWVsZCBFTlRfRExZWzMxOjE2XSAoUlcpCisgKgorICogRW50cm9weSBEZWxheS4gRGVmaW5lcyB0aGUgbGVuZ3RoIChpbiBzeXN0ZW0gY2xvY2tzKSBvZiBlYWNoIEVudHJvcHkgc2FtcGxlCisgKiB0YWtlbi4gVGhpcyBmaWVsZCBpcyB3cml0YWJsZSBvbmx5IGlmIE1DVExbUFJHTV0gYml0IGlzIDEuIFRoaXMgZmllbGQgd2lsbCByZWFkCisgKiB6ZXJvZXMgaWYgTUNUTFtQUkdNXSA9IDAuIFRoaXMgZmllbGQgaXMgY2xlYXJlZCB0byAwQzgwaCAoZGVjaW1hbCAzMjAwKSBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TRENUTF9FTlRfRExZIGZpZWxkLiAqLworI2RlZmluZSBUUk5HX1JEX1NEQ1RMX0VOVF9ETFkoYmFzZSkgKChUUk5HX1NEQ1RMX1JFRyhiYXNlKSAmIFRSTkdfU0RDVExfRU5UX0RMWV9NQVNLKSA+PiBUUk5HX1NEQ1RMX0VOVF9ETFlfU0hJRlQpCisKKy8qISBAYnJpZWYgU2V0IHRoZSBFTlRfRExZIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NEQ1RMX0VOVF9ETFkoYmFzZSwgdmFsdWUpIChUUk5HX1JNV19TRENUTChiYXNlLCBUUk5HX1NEQ1RMX0VOVF9ETFlfTUFTSywgVFJOR19TRENUTF9FTlRfRExZKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0JMSU0gLSBSTkcgU3BhcnNlIEJpdCBMaW1pdCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19TQkxJTSAtIFJORyBTcGFyc2UgQml0IExpbWl0IFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDAwMDAzRlUKKyAqCisgKiBUaGUgUk5HIFNwYXJzZSBCaXQgTGltaXQgUmVnaXN0ZXIgaXMgdXNlZCB3aGVuIFZvbiBOZXVtYW5uIHNhbXBsaW5nIGlzCisgKiBzZWxlY3RlZCBkdXJpbmcgRW50cm9weSBHZW5lcmF0aW9uLiBJdCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBWb24KKyAqIE5ldW1hbm4gc2FtcGxlcyB3aGljaCBtYXkgYmUgZGlzY2FyZGVkIGJlZm9yZSBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIE5vdGUKKyAqIHRoYXQgdGhpcyBhZGRyZXNzICgweEJBU0VfMDYxNCkgaXMgdXNlZCBhcyBTQkxJTSBvbmx5IGlmIE1DVExbUFJHTV0gaXMgMS4gSWYKKyAqIE1DVExbUFJHTV0gaXMgMCwgdGhpcyBhZGRyZXNzIGlzIHVzZWQgYXMgVE9UU0FNIHJlYWRiYWNrIHJlZ2lzdGVyLgorICovCisvKiEKKyAqIEBuYW1lIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBlbnRpcmUgVFJOR19TQkxJTSByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TQkxJTV9SRUcoYmFzZSkgKChiYXNlKS0+U0JMSU0pCisjZGVmaW5lIFRSTkdfUkRfU0JMSU0oYmFzZSkgKFRSTkdfU0JMSU1fUkVHKGJhc2UpKQorI2RlZmluZSBUUk5HX1dSX1NCTElNKGJhc2UsIHZhbHVlKSAoVFJOR19TQkxJTV9SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TQkxJTShiYXNlLCBtYXNrLCB2YWx1ZSkgKFRSTkdfV1JfU0JMSU0oYmFzZSwgKFRSTkdfUkRfU0JMSU0oYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TQkxJTSBiaXRmaWVsZHMKKyAqLworCisvKiEKKyAqIEBuYW1lIFJlZ2lzdGVyIFRSTkdfU0JMSU0sIGZpZWxkIFNCX0xJTVs5OjBdIChSVykKKyAqCisgKiBTcGFyc2UgQml0IExpbWl0LiBEdXJpbmcgVm9uIE5ldW1hbm4gc2FtcGxpbmcgKGlmIGVuYWJsZWQgYnkgTUNUTFtTQU1QX01PREVdLAorICogc2FtcGxlcyBhcmUgZGlzY2FyZGVkIGlmIHR3byBjb25zZWN1dGl2ZSByYXcgc2FtcGxlcyBhcmUgYm90aCAwIG9yIGJvdGggMS4gSWYKKyAqIHRoaXMgZGlzY2FyZGluZyBvY2N1cnMgZm9yIGEgbG9uZyBwZXJpb2Qgb2YgdGltZSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMKKyAqIGluc3VmZmljaWVudCBFbnRyb3B5LiBUaGUgU3BhcnNlIEJpdCBMaW1pdCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZgorICogY29uc2VjdXRpdmUgc2FtcGxlcyB0aGF0IG1heSBiZSBkaXNjYXJkZWQgYmVmb3JlIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4gVGhpcyBmaWVsZAorICogaXMgd3JpdGFibGUgb25seSBpZiBNQ1RMW1BSR01dIGJpdCBpcyAxLiBUaGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gMDNoRiBieQorICogd3JpdGluZyB0aGUgTUNUTFtSU1RfREVGXSBiaXQgdG8gMS4gTm90ZSB0aGF0IGlmIE1DVExbUFJHTV0gYml0IGlzIDAsIHRoaXMKKyAqIHJlZ2lzdGVyIGFkZHJlc3MgaXMgdXNlZCB0byByZWFkIHRoZSBUb3RhbCBTYW1wbGVzIGNvdW50IGluIHJlZ2lzdGVyIFRPVFNBTSwgYXMKKyAqIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLgorICovCisvKkB7Ki8KKy8qISBAYnJpZWYgUmVhZCBjdXJyZW50IHZhbHVlIG9mIHRoZSBUUk5HX1NCTElNX1NCX0xJTSBmaWVsZC4gKi8KKyNkZWZpbmUgVFJOR19SRF9TQkxJTV9TQl9MSU0oYmFzZSkgKChUUk5HX1NCTElNX1JFRyhiYXNlKSAmIFRSTkdfU0JMSU1fU0JfTElNX01BU0spID4+IFRSTkdfU0JMSU1fU0JfTElNX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgU0JfTElNIGZpZWxkIHRvIGEgbmV3IHZhbHVlLiAqLworI2RlZmluZSBUUk5HX1dSX1NCTElNX1NCX0xJTShiYXNlLCB2YWx1ZSkgKFRSTkdfUk1XX1NCTElNKGJhc2UsIFRSTkdfU0JMSU1fU0JfTElNX01BU0ssIFRSTkdfU0JMSU1fU0JfTElNKHZhbHVlKSkpCisvKkB9Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRSTkdfU0NNSVNDIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfU0NNSVNDIC0gUk5HIFN0YXRpc3RpY2FsIENoZWNrIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgKFJXKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwMDEwMDFGVQorICoKKyAqIFRoZSBSTkcgU3RhdGlzdGljYWwgQ2hlY2sgTWlzY2VsbGFuZW91cyBSZWdpc3RlciBjb250YWlucyB0aGUgTG9uZyBSdW4KKyAqIE1heGltdW0gTGltaXQgdmFsdWUgYW5kIHRoZSBSZXRyeSBDb3VudCB2YWx1ZS4gVGhpcyByZWdpc3RlciBpcyBhY2Nlc3NpYmxlIG9ubHkgd2hlbgorICogdGhlIE1DVExbUFJHTV0gYml0IGlzIDEsIG90aGVyd2lzZSB0aGlzIHJlZ2lzdGVyIHdpbGwgcmVhZCB6ZXJvZXMsIGFuZCBjYW5ub3QKKyAqIGJlIHdyaXR0ZW4uCisgKi8KKy8qIQorICogQG5hbWUgQ29uc3RhbnRzIGFuZCBtYWNyb3MgZm9yIGVudGlyZSBUUk5HX1NDTUlTQyByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TQ01JU0NfUkVHKGJhc2UpICgoYmFzZSktPlNDTUlTQykKKyNkZWZpbmUgVFJOR19SRF9TQ01JU0MoYmFzZSkgKFRSTkdfU0NNSVNDX1JFRyhiYXNlKSkKKyNkZWZpbmUgVFJOR19XUl9TQ01JU0MoYmFzZSwgdmFsdWUpIChUUk5HX1NDTUlTQ19SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TQ01JU0MoYmFzZSwgbWFzaywgdmFsdWUpIChUUk5HX1dSX1NDTUlTQyhiYXNlLCAoVFJOR19SRF9TQ01JU0MoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qCisgKiBDb25zdGFudHMgJiBtYWNyb3MgZm9yIGluZGl2aWR1YWwgVFJOR19TQ01JU0MgYml0ZmllbGRzCisgKi8KKworLyohCisgKiBAbmFtZSBSZWdpc3RlciBUUk5HX1NDTUlTQywgZmllbGQgTFJVTl9NQVhbNzowXSAoUlcpCisgKgorICogTE9ORyBSVU4gTUFYIExJTUlULiBUaGlzIHZhbHVlIGlzIHRoZSBsYXJnZXN0IGFsbG93YWJsZSBudW1iZXIgb2YgY29uc2VjdXRpdmUKKyAqIHNhbXBsZXMgb2YgYWxsIDEsIG9yIGFsbCAwLCB0aGF0IGlzIGFsbG93ZWQgZHVyaW5nIHRoZSBFbnRyb3B5IGdlbmVyYXRpb24uCisgKiBUaGlzIGZpZWxkIGlzIHdyaXRhYmxlIG9ubHkgaWYgTUNUTFtQUkdNXSBiaXQgaXMgMS4gVGhpcyBmaWVsZCB3aWxsIHJlYWQgemVyb2VzCisgKiBpZiBNQ1RMW1BSR01dID0gMC4gVGhpcyBmaWVsZCBpcyBjbGVhcmVkIHRvIDIyaCBieSB3cml0aW5nIHRoZSBNQ1RMW1JTVF9ERUZdCisgKiBiaXQgdG8gMS4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TQ01JU0NfTFJVTl9NQVggZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0NNSVNDX0xSVU5fTUFYKGJhc2UpIFwKKyAgICAoKFRSTkdfU0NNSVNDX1JFRyhiYXNlKSAmIFRSTkdfU0NNSVNDX0xSVU5fTUFYX01BU0spID4+IFRSTkdfU0NNSVNDX0xSVU5fTUFYX1NISUZUKQorCisvKiEgQGJyaWVmIFNldCB0aGUgTFJVTl9NQVggZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0NNSVNDX0xSVU5fTUFYKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1NDTUlTQyhiYXNlLCBUUk5HX1NDTUlTQ19MUlVOX01BWF9NQVNLLCBUUk5HX1NDTUlTQ19MUlVOX01BWCh2YWx1ZSkpKQorLypAfSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUUk5HX0VOVCAtIFJORyBUUk5HIEVudHJvcHkgUmVhZCBSZWdpc3RlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohCisgKiBAYnJpZWYgVFJOR19FTlQgLSBSTkcgVFJORyBFbnRyb3B5IFJlYWQgUmVnaXN0ZXIgKFJPKQorICoKKyAqIFJlc2V0IHZhbHVlOiAweDAwMDAwMDAwVQorICoKKyAqIFRoZSBSTkcgVFJORyBjYW4gYmUgcHJvZ3JhbW1lZCB0byBnZW5lcmF0ZSBhbiBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgcmVhZGFibGUKKyAqIHZpYSB0aGUgU2t5Qmx1ZSBidXMuIFRvIGRvIHRoaXMsIHNldCB0aGUgTUNUTFtUUk5HX0FDQ10gYml0IHRvIDEuIE9uY2UgdGhlCisgKiBlbnRyb3B5IHZhbHVlIGhhcyBiZWVuIGdlbmVyYXRlZCwgdGhlIE1DVExbRU5UX1ZBTF0gYml0IHdpbGwgYmUgc2V0IHRvIDEuIEF0IHRoaXMKKyAqIHBvaW50LCBFTlQwIHRocm91Z2ggRU5UMTUgbWF5IGJlIHJlYWQgdG8gcmV0cmlldmUgdGhlIDUxMi1iaXQgZW50cm9weSB2YWx1ZS4KKyAqIE5vdGUgdGhhdCBvbmNlIEVOVDE1IGlzIHJlYWQsIHRoZSBlbnRyb3B5IHZhbHVlIHdpbGwgYmUgY2xlYXJlZCBhbmQgYSBuZXcKKyAqIHZhbHVlIHdpbGwgYmVnaW4gZ2VuZXJhdGlvbiwgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgRU5UMTUgYmUgcmVhZCBsYXN0LiBUaGVzZQorICogcmVnaXN0ZXJzIGFyZSByZWFkYWJsZSBvbmx5IHdoZW4gTUNUTFtQUkdNXSA9IDAgKFJ1biBNb2RlKSwgTUNUTFtUUk5HX0FDQ10gPSAxCisgKiAoVFJORyBhY2Nlc3MgbW9kZSkgYW5kIE1DVExbRU5UX1ZBTF0gPSAxLCBvdGhlcndpc2UgemVyb2VzIHdpbGwgYmUgcmVhZC4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfRU5UIHJlZ2lzdGVyCisgKi8KKy8qQHsqLworI2RlZmluZSBUUk5HX0VOVF9SRUcoYmFzZSwgaW5kZXgpICgoYmFzZSktPkVOVFtpbmRleF0pCisjZGVmaW5lIFRSTkdfUkRfRU5UKGJhc2UsIGluZGV4KSAoVFJOR19FTlRfUkVHKGJhc2UsIGluZGV4KSkKKy8qQH0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVFJOR19TRUNfQ0ZHIC0gUk5HIFNlY3VyaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIQorICogQGJyaWVmIFRSTkdfU0VDX0NGRyAtIFJORyBTZWN1cml0eSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChSVykKKyAqCisgKiBSZXNldCB2YWx1ZTogMHgwMDAwMDAwMFUKKyAqCisgKiBUaGUgUk5HIFNlY3VyaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgaXMgYSByZWFkL3dyaXRlIHJlZ2lzdGVyIHVzZWQgdG8KKyAqIGNvbnRyb2wgdGhlIHRlc3QgbW9kZSwgcHJvZ3JhbW1hYmlsaXR5IGFuZCBzdGF0ZSBtb2RlcyBvZiB0aGUgUk5HLiBNYW55IGJpdHMgYXJlCisgKiBwbGFjZSBob2xkZXJzIGZvciB0aGlzIHZlcnNpb24uIE1vcmUgY29uZmlndXJhYmlsaXR5IHdpbGwgYmUgYWRkZWQgaGVyZS4gQ2xlYXJzCisgKiBvbiBhc3luY2hyb25vdXMgcmVzZXQuIEZvciBTQS1UUk5HIHJlbGVhc2VzIGJlZm9yZSAyMDE0L0p1bHkvMDEsIG9mZnNldHMgMHhBMAorICogdG8gMHhBQyB1c2VkIHRvIGJlIDB4QjAgdG8gMHhCQyByZXNwZWN0aXZlbHkuIFNvLCB1cGRhdGUgbmV3ZXIgdGVzdHMgdGhhdCB1c2UKKyAqIHRoZXNlIHJlZ2lzdGVycywgaWYgaGFyZCBjb2RlZC4KKyAqLworLyohCisgKiBAbmFtZSBDb25zdGFudHMgYW5kIG1hY3JvcyBmb3IgZW50aXJlIFRSTkdfU0VDX0NGRyByZWdpc3RlcgorICovCisvKkB7Ki8KKyNkZWZpbmUgVFJOR19TRUNfQ0ZHX1JFRyhiYXNlKSAoKGJhc2UpLT5TRUNfQ0ZHKQorI2RlZmluZSBUUk5HX1JEX1NFQ19DRkcoYmFzZSkgKFRSTkdfU0VDX0NGR19SRUcoYmFzZSkpCisjZGVmaW5lIFRSTkdfV1JfU0VDX0NGRyhiYXNlLCB2YWx1ZSkgKFRSTkdfU0VDX0NGR19SRUcoYmFzZSkgPSAodmFsdWUpKQorI2RlZmluZSBUUk5HX1JNV19TRUNfQ0ZHKGJhc2UsIG1hc2ssIHZhbHVlKSAoVFJOR19XUl9TRUNfQ0ZHKGJhc2UsIChUUk5HX1JEX1NFQ19DRkcoYmFzZSkgJiB+KG1hc2spKSB8ICh2YWx1ZSkpKQorLypAfSovCisKKy8qIQorICogQG5hbWUgUmVnaXN0ZXIgVFJOR19TRUNfQ0ZHLCBmaWVsZCBOT19QUkdNWzFdIChSVykKKyAqCisgKiBJZiBzZXQgdGhlIFRSTkcgcmVnaXN0ZXJzIGNhbm5vdCBiZSBwcm9ncmFtbWVkLiBUaGF0IGlzLCByZWdhcmRsZXNzIG9mIHRoZQorICogVFJORyBhY2Nlc3MgbW9kZSBpbiB0aGUgU0EtVFJORyBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIuCisgKgorICogVmFsdWVzOgorICogLSAwYjAgLSBQcm9ncmFtYWJpbGl0eSBvZiByZWdpc3RlcnMgY29udHJvbGxlZCBvbmx5IGJ5IHRoZSBSTkcgTWlzY2VsbGFuZW91cworICogICAgIENvbnRyb2wgUmVnaXN0ZXIncyBhY2Nlc3MgbW9kZSBiaXQuCisgKiAtIDBiMSAtIE92ZXJpZGVzIFJORyBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIgYWNjZXNzIG1vZGUgYW5kIHByZXZlbnRzCisgKiAgICAgVFJORyByZWdpc3RlciBwcm9ncmFtbWluZy4KKyAqLworLypAeyovCisvKiEgQGJyaWVmIFJlYWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgVFJOR19TRUNfQ0ZHX05PX1BSR00gZmllbGQuICovCisjZGVmaW5lIFRSTkdfUkRfU0VDX0NGR19OT19QUkdNKGJhc2UpIFwKKyAgICAoKFRSTkdfU0VDX0NGR19SRUcoYmFzZSkgJiBUUk5HX1NFQ19DRkdfTk9fUFJHTV9NQVNLKSA+PiBUUk5HX1NFQ19DRkdfTk9fUFJHTV9TSElGVCkKKworLyohIEBicmllZiBTZXQgdGhlIE5PX1BSR00gZmllbGQgdG8gYSBuZXcgdmFsdWUuICovCisjZGVmaW5lIFRSTkdfV1JfU0VDX0NGR19OT19QUkdNKGJhc2UsIHZhbHVlKSBcCisgICAgKFRSTkdfUk1XX1NFQ19DRkcoYmFzZSwgVFJOR19TRUNfQ0ZHX05PX1BSR01fTUFTSywgVFJOR19TRUNfQ0ZHX05PX1BSR00odmFsdWUpKSkKKy8qQH0qLworCisvKiEgQGJyaWVmIEFycmF5IHRvIG1hcCBUUk5HIGluc3RhbmNlIG51bWJlciB0byBiYXNlIHBvaW50ZXIuICovCitzdGF0aWMgVFJOR19UeXBlICpjb25zdCBzX3RybmdCYXNlc1tdID0gVFJOR19CQVNFX1BUUlM7CisKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisvKiEgQGJyaWVmIENsb2NrIGFycmF5IG5hbWUgKi8KK3N0YXRpYyBjb25zdCBjbG9ja19pcF9uYW1lX3Qgc190cm5nQ2xvY2tbXSA9IFRSTkdfQ0xPQ0tTOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvdG90eXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RhdHVzX3QgdHJuZ19BcHBseVVzZXJDb25maWcoVFJOR19UeXBlICpiYXNlLCBjb25zdCB0cm5nX2NvbmZpZ190ICp1c2VyQ29uZmlnKTsKK3N0YXRpYyBzdGF0dXNfdCB0cm5nX1NldFJldHJ5Q291bnQoVFJOR19UeXBlICpiYXNlLCB1aW50OF90IHJldHJ5X2NvdW50KTsKK3N0YXRpYyBzdGF0dXNfdCB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChUUk5HX1R5cGUgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja190IHN0YXRpc3RpY2FsX2NoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdCAqbGltaXQpOworc3RhdGljIHVpbnQzMl90IHRybmdfUmVhZEVudHJvcHkoVFJOR19UeXBlICpiYXNlLCB1aW50MzJfdCBpbmRleCk7CitzdGF0aWMgdWludDMyX3QgdHJuZ19HZXRJbnN0YW5jZShUUk5HX1R5cGUgKmJhc2UpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHVpbnQzMl90IHRybmdfR2V0SW5zdGFuY2UoVFJOR19UeXBlICpiYXNlKQoreworICAgIHVpbnQzMl90IGluc3RhbmNlOworCisgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW5kZXggZnJvbSBiYXNlIGFkZHJlc3MgbWFwcGluZ3MuICovCisgICAgZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgQVJSQVlfU0laRShzX3RybmdCYXNlcyk7IGluc3RhbmNlKyspCisgICAgeworICAgICAgICBpZiAoc190cm5nQmFzZXNbaW5zdGFuY2VdID09IGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGluc3RhbmNlIDwgQVJSQVlfU0laRShzX3RybmdCYXNlcykpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IFRSTkdfSW5pdFVzZXJDb25maWdEZWZhdWx0CisgKiBEZXNjcmlwdGlvbiAgIDogIEluaXRpYWxpemVzIHVzZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gZGVmYXVsdCBzZXR0aW5ncy4KKyAqCisgKkVORCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0dXNfdCBUUk5HX0dldERlZmF1bHRDb25maWcodHJuZ19jb25maWdfdCAqdXNlckNvbmZpZykKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQ7CisKKyAgICBpZiAodXNlckNvbmZpZyAhPSAwKQorICAgIHsKKyAgICAgICAgdXNlckNvbmZpZy0+bG9jayA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9MT0NLOworICAgICAgICB1c2VyQ29uZmlnLT5jbG9ja01vZGUgPSBrVFJOR19DbG9ja01vZGVSaW5nT3NjaWxsYXRvcjsKKyAgICAgICAgdXNlckNvbmZpZy0+cmluZ09zY0RpdiA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9PU0NfRElWOworICAgICAgICB1c2VyQ29uZmlnLT5zYW1wbGVNb2RlID0ga1RSTkdfU2FtcGxlTW9kZVJhdzsKKyAgICAgICAgdXNlckNvbmZpZy0+ZW50cm9weURlbGF5ID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX0VOVFJPUFlfREVMQVk7CisgICAgICAgIHVzZXJDb25maWctPnNhbXBsZVNpemUgPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfU0FNUExFX1NJWkU7CisgICAgICAgIHVzZXJDb25maWctPnNwYXJzZUJpdExpbWl0ID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1NQQVJTRV9CSVRfTElNSVQ7CisKKyAgICAgICAgLyogU3RhdGlzdGljYWwgQ2hlY2sgUGFyYW1ldGVycy4qLworICAgICAgICB1c2VyQ29uZmlnLT5yZXRyeUNvdW50ID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JFVFJZX0NPVU5UOworICAgICAgICB1c2VyQ29uZmlnLT5sb25nUnVuTWF4TGltaXQgPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOX01BWF9MSU1JVDsKKworICAgICAgICB1c2VyQ29uZmlnLT5tb25vYml0TGltaXQubWF4aW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9NT05PQklUX01BWElNVU07CisgICAgICAgIHVzZXJDb25maWctPm1vbm9iaXRMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX01PTk9CSVRfTUlOSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0MUxpbWl0Lm1heGltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMV9NQVhJTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQxTGltaXQubWluaW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQxX01JTklNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDJMaW1pdC5tYXhpbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDJfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0MkxpbWl0Lm1pbmltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUMl9NSU5JTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQzTGltaXQubWF4aW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQzX01BWElNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDNMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDNfTUlOSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0NExpbWl0Lm1heGltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNF9NQVhJTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQ0TGltaXQubWluaW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9SVU5CSVQ0X01JTklNVU07CisgICAgICAgIHVzZXJDb25maWctPnJ1bkJpdDVMaW1pdC5tYXhpbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDVfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0NUxpbWl0Lm1pbmltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNV9NSU5JTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5ydW5CaXQ2UGx1c0xpbWl0Lm1heGltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUlVOQklUNlBMVVNfTUFYSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+cnVuQml0NlBsdXNMaW1pdC5taW5pbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX1JVTkJJVDZQTFVTX01JTklNVU07CisgICAgICAgIHVzZXJDb25maWctPnBva2VyTGltaXQubWF4aW11bSA9IFRSTkdfVVNFUl9DT05GSUdfREVGQVVMVF9QT0tFUl9NQVhJTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5wb2tlckxpbWl0Lm1pbmltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfUE9LRVJfTUlOSU1VTTsKKyAgICAgICAgdXNlckNvbmZpZy0+ZnJlcXVlbmN5Q291bnRMaW1pdC5tYXhpbXVtID0gVFJOR19VU0VSX0NPTkZJR19ERUZBVUxUX0ZSRVFVRU5DWV9NQVhJTVVNOworICAgICAgICB1c2VyQ29uZmlnLT5mcmVxdWVuY3lDb3VudExpbWl0Lm1pbmltdW0gPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfRlJFUVVFTkNZX01JTklNVU07CisKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19TdWNjZXNzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiEKKyAqIEBicmllZiBTZXRzIHRoZSBUUk5HIHJldHJ5IGNvdW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmV0cnkgY291bnRlciB3aGljaCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgdGltZXMgYQorICogc3RhdGlzdGljYWwgY2hlY2sgbWF5IGZhaWxzIGR1cmluZyB0aGUgVFJORyBFbnRyb3B5IEdlbmVyYXRpb24gYmVmb3JlCisgKiBnZW5lcmF0aW5nIGFuIGVycm9yLgorKi8KK3N0YXRpYyBzdGF0dXNfdCB0cm5nX1NldFJldHJ5Q291bnQoVFJOR19UeXBlICpiYXNlLCB1aW50OF90IHJldHJ5X2NvdW50KQoreworICAgIHN0YXR1c190IHN0YXR1czsKKworICAgIGlmICgocmV0cnlfY291bnQgPj0gMXUpICYmIChyZXRyeV9jb3VudCA8PSAxNXUpKQorICAgIHsKKyAgICAgICAgLyogU2V0IHJldHJ5IGNvdW50LiovCisgICAgICAgIFRSTkdfV1JfU0NNSVNDX1JUWV9DVChiYXNlLCByZXRyeV9jb3VudCk7CisgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfU3VjY2VzczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qIQorICogQGJyaWVmIFNldHMgc3RhdGlzdGljYWwgY2hlY2sgbGltaXRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgbWluaW11bSBhbmQgbWF4aW11bSBsaW1pdHMgb2Ygc3RhdGlzdGljYWwgY2hlY2tzLgorICoKKyAqLworc3RhdGljIHN0YXR1c190IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KFRSTkdfVHlwZSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX3Qgc3RhdGlzdGljYWxfY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90ICpsaW1pdCkKK3sKKyAgICB1aW50MzJfdCByYW5nZTsKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBrU3RhdHVzX1N1Y2Nlc3M7CisKKyAgICBpZiAobGltaXQgJiYgKGxpbWl0LT5tYXhpbXVtID4gbGltaXQtPm1pbmltdW0pKQorICAgIHsKKyAgICAgICAgcmFuZ2UgPSBsaW1pdC0+bWF4aW11bSAtIGxpbWl0LT5taW5pbXVtOyAvKiBSZWdpc3RlcnMgdXNlIHJhbmdlIGluc3RlYWQgb2YgbWluaW11bSB2YWx1ZS4qLworCisgICAgICAgIHN3aXRjaCAoc3RhdGlzdGljYWxfY2hlY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Uga1RSTkdfU3RhdGlzdGljYWxDaGVja01vbm9iaXQ6IC8qIEFsbG93YWJsZSBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBvbmVzL3plcm8gZGV0ZWN0ZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgICAgICAgICAgICAgaWYgKChyYW5nZSA8PSAweGZmZmZ1KSAmJiAobGltaXQtPm1heGltdW0gPD0gMHhmZmZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDTUxfTU9OT19NQVgoYmFzZSwgbGltaXQtPm1heGltdW0pOworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDTUxfTU9OT19STkcoYmFzZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQxOiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMSBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJhbmdlIDw9IDB4N2ZmZnUpICYmIChsaW1pdC0+bWF4aW11bSA8PSAweDdmZmZ1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSMUxfUlVOMV9NQVgoYmFzZSwgbGltaXQtPm1heGltdW0pOworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjFMX1JVTjFfUk5HKGJhc2UsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0MjogLyogQWxsb3dhYmxlIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDIgZGV0ZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgICAgICAgICAgICAgaWYgKChyYW5nZSA8PSAweDNmZmZ1KSAmJiAobGltaXQtPm1heGltdW0gPD0gMHgzZmZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjJMX1JVTjJfTUFYKGJhc2UsIGxpbWl0LT5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1IyTF9SVU4yX1JORyhiYXNlLCByYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDM6IC8qIEFsbG93YWJsZSBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAzIGRldGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgICAgICAgICAgICAgIGlmICgocmFuZ2UgPD0gMHgxZmZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4MWZmZnUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1IzTF9SVU4zX01BWChiYXNlLCBsaW1pdC0+bWF4aW11bSk7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSM0xfUlVOM19STkcoYmFzZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQ0OiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNCBkZXRlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJhbmdlIDw9IDB4ZmZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4ZmZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjRMX1JVTjRfTUFYKGJhc2UsIGxpbWl0LT5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9TQ1I0TF9SVU40X1JORyhiYXNlLCByYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDU6IC8qIEFsbG93YWJsZSBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCA1IGRldGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgICAgICAgICAgICAgIGlmICgocmFuZ2UgPD0gMHg3ZmZ1KSAmJiAobGltaXQtPm1heGltdW0gPD0gMHg3ZmZ1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSNUxfUlVONV9NQVgoYmFzZSwgbGltaXQtPm1heGltdW0pOworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX1NDUjVMX1JVTjVfUk5HKGJhc2UsIHJhbmdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0NlBsdXM6IC8qIEFsbG93YWJsZSBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBsZW5ndGggNiBvciBtb3JlIGRldGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbiAqLworICAgICAgICAgICAgICAgIGlmICgocmFuZ2UgPD0gMHg3ZmZ1KSAmJiAobGltaXQtPm1heGltdW0gPD0gMHg3ZmZ1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSNlBMX1JVTjZQX01BWChiYXNlLCBsaW1pdC0+bWF4aW11bSk7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfU0NSNlBMX1JVTjZQX1JORyhiYXNlLCByYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1RSTkdfU3RhdGlzdGljYWxDaGVja1Bva2VyOiAvKiBBbGxvd2FibGUgbWF4aW11bSBhbmQgbWluaW11bSBsaW1pdCBvZiAiUG9rZXIgVGVzdCIgZGV0ZWN0ZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cm9weSBnZW5lcmF0aW9uIC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJhbmdlIDw9IDB4ZmZmZnUpICYmIChsaW1pdC0+bWF4aW11bSA8PSAweGZmZmZmZnUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9QS1JNQVhfUEtSX01BWChiYXNlLCBsaW1pdC0+bWF4aW11bSk7CisgICAgICAgICAgICAgICAgICAgIFRSTkdfV1JfUEtSUk5HX1BLUl9STkcoYmFzZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tGcmVxdWVuY3lDb3VudDogLyogQWxsb3dhYmxlIG1heGltdW0gYW5kIG1pbmltdW0gbGltaXQgb2YgZW50cm9weSBzYW1wbGUgZnJxdWVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uIC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKGxpbWl0LT5taW5pbXVtIDw9IDB4M2ZmZmZmdSkgJiYgKGxpbWl0LT5tYXhpbXVtIDw9IDB4M2ZmZmZmdSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUUk5HX1dSX0ZSUU1BWF9GUlFfTUFYKGJhc2UsIGxpbWl0LT5tYXhpbXVtKTsKKyAgICAgICAgICAgICAgICAgICAgVFJOR19XUl9GUlFNSU5fRlJRX01JTihiYXNlLCBsaW1pdC0+bWluaW11bSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtTdGF0dXNfSW52YWxpZEFyZ3VtZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3RhdHVzID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisvKkZVTkNUSU9OKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb24gTmFtZSA6IHRybmdfQXBwbHlVc2VyQ29uZmlnCisgKiBEZXNjcmlwdGlvbiAgIDogQXBwbHkgdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIFRSTkcgbW9kdWxlLgorICoKKyAqRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdGF0dXNfdCB0cm5nX0FwcGx5VXNlckNvbmZpZyhUUk5HX1R5cGUgKmJhc2UsIGNvbnN0IHRybmdfY29uZmlnX3QgKnVzZXJDb25maWcpCit7CisgICAgc3RhdHVzX3Qgc3RhdHVzOworCisgICAgaWYgKCgoc3RhdHVzID0gdHJuZ19TZXRSZXRyeUNvdW50KGJhc2UsIHVzZXJDb25maWctPnJldHJ5Q291bnQpKSA9PSBrU3RhdHVzX1N1Y2Nlc3MpICYmCisgICAgICAgICgoc3RhdHVzID0gdHJuZ19TZXRTdGF0aXN0aWNhbENoZWNrTGltaXQoYmFzZSwga1RSTkdfU3RhdGlzdGljYWxDaGVja01vbm9iaXQsICZ1c2VyQ29uZmlnLT5tb25vYml0TGltaXQpKSA9PQorICAgICAgICAga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQxLCAmdXNlckNvbmZpZy0+cnVuQml0MUxpbWl0KSkgPT0KKyAgICAgICAgIGtTdGF0dXNfU3VjY2VzcykgJiYKKyAgICAgICAgKChzdGF0dXMgPSB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChiYXNlLCBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0MiwgJnVzZXJDb25maWctPnJ1bkJpdDJMaW1pdCkpID09CisgICAgICAgICBrU3RhdHVzX1N1Y2Nlc3MpICYmCisgICAgICAgICgoc3RhdHVzID0gdHJuZ19TZXRTdGF0aXN0aWNhbENoZWNrTGltaXQoYmFzZSwga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDMsICZ1c2VyQ29uZmlnLT5ydW5CaXQzTGltaXQpKSA9PQorICAgICAgICAga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tSdW5CaXQ0LCAmdXNlckNvbmZpZy0+cnVuQml0NExpbWl0KSkgPT0KKyAgICAgICAgIGtTdGF0dXNfU3VjY2VzcykgJiYKKyAgICAgICAgKChzdGF0dXMgPSB0cm5nX1NldFN0YXRpc3RpY2FsQ2hlY2tMaW1pdChiYXNlLCBrVFJOR19TdGF0aXN0aWNhbENoZWNrUnVuQml0NSwgJnVzZXJDb25maWctPnJ1bkJpdDVMaW1pdCkpID09CisgICAgICAgICBrU3RhdHVzX1N1Y2Nlc3MpICYmCisgICAgICAgICgoc3RhdHVzID0gdHJuZ19TZXRTdGF0aXN0aWNhbENoZWNrTGltaXQoYmFzZSwga1RSTkdfU3RhdGlzdGljYWxDaGVja1J1bkJpdDZQbHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyQ29uZmlnLT5ydW5CaXQ2UGx1c0xpbWl0KSkgPT0ga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tQb2tlciwgJnVzZXJDb25maWctPnBva2VyTGltaXQpKSA9PQorICAgICAgICAga1N0YXR1c19TdWNjZXNzKSAmJgorICAgICAgICAoKHN0YXR1cyA9IHRybmdfU2V0U3RhdGlzdGljYWxDaGVja0xpbWl0KGJhc2UsIGtUUk5HX1N0YXRpc3RpY2FsQ2hlY2tGcmVxdWVuY3lDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlckNvbmZpZy0+ZnJlcXVlbmN5Q291bnRMaW1pdCkpID09IGtTdGF0dXNfU3VjY2VzcykpCisgICAgeworICAgICAgICBUUk5HX1dSX01DVExfRk9SX1NDTEsoYmFzZSwgdXNlckNvbmZpZy0+Y2xvY2tNb2RlKTsKKyAgICAgICAgVFJOR19XUl9NQ1RMX09TQ19ESVYoYmFzZSwgdXNlckNvbmZpZy0+cmluZ09zY0Rpdik7CisgICAgICAgIFRSTkdfV1JfTUNUTF9TQU1QX01PREUoYmFzZSwgdXNlckNvbmZpZy0+c2FtcGxlTW9kZSk7CisgICAgICAgIFRSTkdfV1JfU0RDVExfRU5UX0RMWShiYXNlLCB1c2VyQ29uZmlnLT5lbnRyb3B5RGVsYXkpOworICAgICAgICBUUk5HX1dSX1NEQ1RMX1NBTVBfU0laRShiYXNlLCB1c2VyQ29uZmlnLT5zYW1wbGVTaXplKTsKKyAgICAgICAgVFJOR19XUl9TQkxJTV9TQl9MSU0oYmFzZSwgdXNlckNvbmZpZy0+c3BhcnNlQml0TGltaXQpOworICAgICAgICBUUk5HX1dSX1NDTUlTQ19MUlVOX01BWChiYXNlLCB1c2VyQ29uZmlnLT5sb25nUnVuTWF4TGltaXQpOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qIQorICogQGJyaWVmIEdldHMgYSBlbnRyeSBkYXRhIGZyb20gdGhlIFRSTkcuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGFuIGVudHJvcHkgZGF0YSBmcm9tIFRSTkcuCisgKiBFbnRyb3B5IGRhdGEgaXMgc3ByZWFkIG92ZXIgVFJOR19FTlRfQ09VTlQgcmVnaXN0ZXJzLgorICogUmVhZCByZWdpc3RlciBudW1iZXIgaXMgZGVmaW5lZCBieSBpbmRleCBwYXJhbWV0ZXIuCisqLworc3RhdGljIHVpbnQzMl90IHRybmdfUmVhZEVudHJvcHkoVFJOR19UeXBlICpiYXNlLCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICB1aW50MzJfdCBkYXRhOworCisgICAgaW5kZXggPSBpbmRleCAlIFRSTkdfRU5UX0NPVU5UOyAvKiBUaGlzIHdheSB3ZSBjYW4gdXNlIGluY3JlbWVudGFsIGluZGV4IHdpdGhvdXQgbGltaXQgY29udHJvbCBmcm9tIGFwcGxpY2F0aW9uLiovCisKKyAgICBkYXRhID0gVFJOR19SRF9FTlQoYmFzZSwgaW5kZXgpOworCisgICAgaWYgKGluZGV4ID09IChUUk5HX0VOVF9DT1VOVCAtIDEpKQorICAgIHsKKyAgICAgICAgLyogRHVtbXkgcmVhZC4gRGVmZWN0IHdvcmthcm91bmQuCisgICAgICAgICAqIFRSTkcgY291bGQgbm90IGNsZWFyIEVOVF9WQUwgIGZsYWcgYXV0b21hdGljYWxseSwgYXBwbGljYXRpb24KKyAgICAgICAgICogaGFkIHRvIGRvIGEgZHVtbXkgcmVhZGluZyBvcGVyYXRpb24gZm9yIGFueW9uZSBUUk5HIHJlZ2lzdGVyCisgICAgICAgICAqIHRvIGNsZWFyIGl0IGZpcnN0bHksIHRoZW4gdG8gcmVhZCB0aGUgUlRFTlQwIHRvIFJURU5UMTUgYWdhaW4gKi8KKyAgICAgICAgaW5kZXggPSBUUk5HX1JEX0VOVChiYXNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworc3RhdHVzX3QgVFJOR19Jbml0KFRSTkdfVHlwZSAqYmFzZSwgY29uc3QgdHJuZ19jb25maWdfdCAqdXNlckNvbmZpZykKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQ7CisKKyAgICAvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzLiovCisgICAgaWYgKChiYXNlICE9IDApICYmICh1c2VyQ29uZmlnICE9IDApKQorICAgIHsKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgICAgIC8qIEVuYWJsZSB0aGUgY2xvY2sgZ2F0ZS4gKi8KKyAgICAgICAgQ0xPQ0tfRW5hYmxlQ2xvY2soc190cm5nQ2xvY2tbdHJuZ19HZXRJbnN0YW5jZShiYXNlKV0pOworI2VuZGlmIC8qIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCAqLworCisgICAgICAgIC8qIFJlc2V0IHRoZSByZWdpc3RlcnMgb2YgVFJORyBtb2R1bGUgdG8gcmVzZXQgc3RhdGUuICovCisgICAgICAgIC8qIE11c3QgYmUgaW4gcHJvZ3JhbSBtb2RlLiovCisgICAgICAgIFRSTkdfV1JfTUNUTF9QUkdNKGJhc2UsIGtUUk5HX1dvcmtNb2RlUHJvZ3JhbSk7CisgICAgICAgIC8qIFJlc2V0IERlZmF1bHRzLiovCisgICAgICAgIFRSTkdfV1JfTUNUTF9SU1RfREVGKGJhc2UsIDEpOworCisgICAgICAgIC8qIFNldCBjb25maWd1cmF0aW9uLiovCisgICAgICAgIGlmICgocmVzdWx0ID0gdHJuZ19BcHBseVVzZXJDb25maWcoYmFzZSwgdXNlckNvbmZpZykpID09IGtTdGF0dXNfU3VjY2VzcykKKyAgICAgICAgeworICAgICAgICAgICAgLyogU3RhcnQgZW50cm9weSBnZW5lcmF0aW9uLiovCisgICAgICAgICAgICAvKiBTZXQgdG8gUnVuIG1vZGUuKi8KKyAgICAgICAgICAgIFRSTkdfV1JfTUNUTF9QUkdNKGJhc2UsIGtUUk5HX1dvcmtNb2RlUnVuKTsKKyAgICAgICAgICAgIC8qIEVuYWJsZSBUUk5HIEFjY2VzcyBNb2RlLiBUbyBnZW5lcmF0ZSBhbiBFbnRyb3B5CisgICAgICAgICAgICAqIHZhbHVlIHRoYXQgY2FuIGJlIHJlYWQgdmlhIHRoZSB0cnVlMC10cnVlMTUgcmVnaXN0ZXJzLiovCisgICAgICAgICAgICBUUk5HX1dSX01DVExfVFJOR19BQ0MoYmFzZSwgMSk7CisKKyAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLT5sb2NrID09IDEpIC8qIERpc2FibGUgcHJvZ3JhbW1hYmlsaXR5IG9mIFRSTkcgcmVnaXN0ZXJzLiAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSTkdfV1JfU0VDX0NGR19OT19QUkdNKGJhc2UsIDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0ga1N0YXR1c19JbnZhbGlkQXJndW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBUUk5HX0RlaW5pdChUUk5HX1R5cGUgKmJhc2UpCit7CisgICAgLyogQ2hlY2sgaW5wdXQgcGFyYW1ldGVycy4qLworICAgIGlmIChiYXNlKQorICAgIHsKKyAgICAgICAgLyogTW92ZSB0byBwcm9ncmFtIG1vZGUuIFN0b3AgZW50cm9weSBnZW5lcmF0aW9uLiovCisgICAgICAgIFRSTkdfV1JfTUNUTF9QUkdNKGJhc2UsIGtUUk5HX1dvcmtNb2RlUHJvZ3JhbSk7CisKKyAgICAgICAgLyogQ2hlY2sgYmVmb3JlIGNsb2NrIHN0b3AuCisgICAgICAgICBUUk5HIHR1cm5zIG9uIHRoZSBUUk5HIGZyZWUtcnVubmluZyByaW5nIG9zY2lsbGF0b3Igd2hlbmV2ZXIgbmV3IGVudHJvcHkKKyAgICAgICAgIGlzIGJlaW5nIGdlbmVyYXRlZCBhbmQgdHVybnMgb2ZmIHRoZSByaW5nIG9zY2lsbGF0b3Igd2hlbiBlbnRyb3B5IGdlbmVyYXRpb24KKyAgICAgICAgIGlzIGNvbXBsZXRlLiBJZiB0aGUgVFJORyBjbG9jayBpcyBzdG9wcGVkIHdoaWxlIHRoZSBUUk5HIHJpbmcgb3NjaWxsYXRvcgorICAgICAgICAgaXMgcnVubmluZywgdGhlIG9zY2lsbGF0b3IgY29udGludWVzIHJ1bm5pbmcgdGhvdWdoIHRoZSBSTkcgY2xvY2suCisgICAgICAgICBpcyBzdG9wcGVkLiAqLworICAgICAgICB3aGlsZSAoVFJOR19SRF9NQ1RMX1RTVE9QX09LKGJhc2UpID09IDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisjaWYgIShkZWZpbmVkKEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkgJiYgRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKQorICAgICAgICAvKiBEaXNhYmxlIENsb2NrKi8KKyAgICAgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKHNfdHJuZ0Nsb2NrW3RybmdfR2V0SW5zdGFuY2UoYmFzZSldKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KKyAgICB9Cit9CisKK3N0YXR1c190IFRSTkdfR2V0UmFuZG9tRGF0YShUUk5HX1R5cGUgKmJhc2UsIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3sKKyAgICBzdGF0dXNfdCByZXN1bHQgPSBrU3RhdHVzX1N1Y2Nlc3M7CisgICAgdWludDMyX3QgcmFuZG9tXzMyOworICAgIHVpbnQ4X3QgKnJhbmRvbV9wOworICAgIHVpbnQzMl90IHJhbmRvbV9zaXplOworICAgIHVpbnQ4X3QgKmRhdGFfcCA9ICh1aW50OF90ICopZGF0YTsKKyAgICB1aW50MzJfdCBpOworICAgIGludCBpbmRleCA9IDA7CisKKyAgICAvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzLiovCisgICAgaWYgKGJhc2UgJiYgZGF0YSAmJiBkYXRhU2l6ZSkKKyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdhaXQgZm9yIFZhbGlkIG9yIEVycm9yIGZsYWcqLworICAgICAgICAgICAgd2hpbGUgKChUUk5HX1JEX01DVExfRU5UX1ZBTChiYXNlKSA9PSAwKSAmJiAoVFJOR19SRF9NQ1RMX0VSUihiYXNlKSA9PSAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2hlY2sgSFcgZXJyb3IuKi8KKyAgICAgICAgICAgIGlmIChUUk5HX1JEX01DVExfRVJSKGJhc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGtTdGF0dXNfRmFpbDsgLyogVFJORyBtb2R1bGUgZXJyb3Igb2NjdXJyZWQgKi8KKyAgICAgICAgICAgICAgICAvKiBDbGVhciBlcnJvci4qLworICAgICAgICAgICAgICAgIFRSTkdfV1JfTUNUTF9FUlIoYmFzZSwgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIE5vIHNlbnNlIHN0YXkgaGVyZS4qLworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBSZWFkIEVudHJvcHkuKi8KKyAgICAgICAgICAgIHJhbmRvbV8zMiA9IHRybmdfUmVhZEVudHJvcHkoYmFzZSwgaW5kZXgrKyk7CisKKyAgICAgICAgICAgIHJhbmRvbV9wID0gKHVpbnQ4X3QgKikmcmFuZG9tXzMyOworCisgICAgICAgICAgICBpZiAoZGF0YVNpemUgPCBzaXplb2YocmFuZG9tXzMyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYW5kb21fc2l6ZSA9IGRhdGFTaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJhbmRvbV9zaXplID0gc2l6ZW9mKHJhbmRvbV8zMik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDBVOyBpIDwgcmFuZG9tX3NpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZGF0YV9wKysgPSAqcmFuZG9tX3ArKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGF0YVNpemUgLT0gcmFuZG9tX3NpemU7CisgICAgICAgIH0gd2hpbGUgKGRhdGFTaXplID4gMCk7CisKKyAgICAgICAgLyogU3RhcnQgYSBuZXcgZW50cm9weSBnZW5lcmF0aW9uLgorICAgICAgICBJdCBpcyBkb25lIGJ5IHJlYWRpbmcgb2YgdGhlIGxhc3QgZW50cm9weSByZWdpc3Rlci4qLworICAgICAgICBpZiAoKGluZGV4ICUgVFJOR19FTlRfQ09VTlQpICE9IChUUk5HX0VOVF9DT1VOVCAtIDEpKQorICAgICAgICB7CisgICAgICAgICAgICB0cm5nX1JlYWRFbnRyb3B5KGJhc2UsIChUUk5HX0VOVF9DT1VOVCAtIDEpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXN1bHQgPSBrU3RhdHVzX0ludmFsaWRBcmd1bWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogRlNMX0ZFQVRVUkVfU09DX1RSTkdfQ09VTlQgKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RybmcuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RybmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjgzZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHJuZy5oCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCisgKiAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRlNMX1RSTkdfRFJJVkVSX0hfCisjZGVmaW5lIF9GU0xfVFJOR19EUklWRVJfSF8KKworI2luY2x1ZGUgImZzbF9jb21tb24uaCIKKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfU09DX1RSTkdfQ09VTlQpICYmIEZTTF9GRUFUVVJFX1NPQ19UUk5HX0NPVU5UCisKKy8qIQorICogQGFkZHRvZ3JvdXAgdHJuZworICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qISBAbmFtZSBEcml2ZXIgdmVyc2lvbiAqLworLypAeyovCisvKiEgQGJyaWVmIFRSTkcgZHJpdmVyIHZlcnNpb24gMi4wLjEuIAorICoKKyAqIEN1cnJlbnQgdmVyc2lvbjogMi4wLjEKKyAqCisgKiBDaGFuZ2UgbG9nOgorICogLSBWZXJzaW9uIDIuMC4xCisgKiAgIC0gYWRkIHN1cHBvcnQgZm9yIEtMOHggYW5kIEtMMjhaCisgKiAgIC0gdXBkYXRlIGRlZmF1bHQgT1NDRElWIGZvciBLODEgdG8gZGl2aWRlIGJ5IDIKKyAqLworI2RlZmluZSBGU0xfVFJOR19EUklWRVJfVkVSU0lPTiAoTUFLRV9WRVJTSU9OKDIsIDAsIDEpKQorLypAfSovCisKKy8qISBAYnJpZWYgVFJORyBzYW1wbGUgbW9kZS4gVXNlZCBieSB0cm5nX2NvbmZpZ190LiAqLwordHlwZWRlZiBlbnVtIF90cm5nX3NhbXBsZV9tb2RlCit7CisgICAga1RSTkdfU2FtcGxlTW9kZVZvbk5ldW1hbm4gPSAwVSwgLyohPCBVc2Ugdm9uIE5ldW1hbm4gZGF0YSBpbiBib3RoIEVudHJvcHkgc2hpZnRlciBhbmQgU3RhdGlzdGljYWwgQ2hlY2tlci4gKi8KKyAgICBrVFJOR19TYW1wbGVNb2RlUmF3ID0gMVUsICAgICAgICAvKiE8IFVzZSByYXcgZGF0YSBpbnRvIGJvdGggRW50cm9weSBzaGlmdGVyIGFuZCBTdGF0aXN0aWNhbCBDaGVja2VyLiAqLworICAgIGtUUk5HX1NhbXBsZU1vZGVWb25OZXVtYW5uUmF3ID0KKyAgICAgICAgMlUgLyohPCBVc2Ugdm9uIE5ldW1hbm4gZGF0YSBpbiBFbnRyb3B5IHNoaWZ0ZXIuIFVzZSByYXcgZGF0YSBpbnRvIFN0YXRpc3RpY2FsIENoZWNrZXIuICovCit9IHRybmdfc2FtcGxlX21vZGVfdDsKKworLyohIEBicmllZiBUUk5HIGNsb2NrIG1vZGUuIFVzZWQgYnkgdHJuZ19jb25maWdfdC4gKi8KK3R5cGVkZWYgZW51bSBfdHJuZ19jbG9ja19tb2RlCit7CisgICAga1RSTkdfQ2xvY2tNb2RlUmluZ09zY2lsbGF0b3IgPSAwVSwgLyohPCBSaW5nIG9zY2lsbGF0b3IgaXMgdXNlZCB0byBvcGVyYXRlIHRoZSBUUk5HIChkZWZhdWx0KS4gKi8KKyAgICBrVFJOR19DbG9ja01vZGVTeXN0ZW0gPSAxVSAgICAgICAgICAvKiE8IFN5c3RlbSBjbG9jayBpcyB1c2VkIHRvIG9wZXJhdGUgdGhlIFRSTkcuIFRoaXMgaXMgZm9yIHRlc3QgdXNlIG9ubHksIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGUgcmVzdWx0cyBtYXkgb2NjdXIuICovCit9IHRybmdfY2xvY2tfbW9kZV90OworCisvKiEgQGJyaWVmIFRSTkcgcmluZyBvc2NpbGxhdG9yIGRpdmlkZS4gVXNlZCBieSB0cm5nX2NvbmZpZ190LiAqLwordHlwZWRlZiBlbnVtIF90cm5nX3Jpbmdfb3NjX2RpdgoreworICAgIGtUUk5HX1JpbmdPc2NEaXYwID0gMFUsIC8qITwgUmluZyBvc2NpbGxhdG9yIHdpdGggbm8gZGl2aWRlICovCisgICAga1RSTkdfUmluZ09zY0RpdjIgPSAxVSwgLyohPCBSaW5nIG9zY2lsbGF0b3IgZGl2aWRlZC1ieS0yLiAqLworICAgIGtUUk5HX1JpbmdPc2NEaXY0ID0gMlUsIC8qITwgUmluZyBvc2NpbGxhdG9yIGRpdmlkZWQtYnktNC4gKi8KKyAgICBrVFJOR19SaW5nT3NjRGl2OCA9IDNVICAvKiE8IFJpbmcgb3NjaWxsYXRvciBkaXZpZGVkLWJ5LTguICovCit9IHRybmdfcmluZ19vc2NfZGl2X3Q7CisKKy8qISBAYnJpZWYgRGF0YSBzdHJ1Y3R1cmUgZm9yIGRlZmluaXRpb24gb2Ygc3RhdGlzdGljYWwgY2hlY2sgbGltaXRzLiBVc2VkIGJ5IHRybmdfY29uZmlnX3QuICovCit0eXBlZGVmIHN0cnVjdCBfdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdAoreworICAgIHVpbnQzMl90IG1heGltdW07IC8qITwgTWF4aW11bSBsaW1pdC4qLworICAgIHVpbnQzMl90IG1pbmltdW07IC8qITwgTWluaW11bSBsaW1pdC4qLworfSB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3Q7CisKKy8qIQorICogQGJyaWVmIERhdGEgc3RydWN0dXJlIGZvciB0aGUgVFJORyBpbml0aWFsaXphdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGluaXRpYWxpemVzIHRoZSBUUk5HIGJ5IGNhbGxpbmcgdGhlIHRoZSBUUk5HX0luaXQoKSBmdW5jdGlvbi4KKyAqIEl0IGNvbnRhaW5zIGFsbCBUUk5HIGNvbmZpZ3VyYXRpb25zLgorICovCit0eXBlZGVmIHN0cnVjdCBfdHJuZ191c2VyX2NvbmZpZworeworICAgIGJvb2wgbG9jazsgICAgICAgICAgICAgICAgICAgICAgLyohPCBAYnJpZWYgRGlzYWJsZSBwcm9ncmFtbWFiaWxpdHkgb2YgVFJORyByZWdpc3RlcnMuICAqLworICAgIHRybmdfY2xvY2tfbW9kZV90IGNsb2NrTW9kZTsgICAgLyohPCBAYnJpZWYgQ2xvY2sgbW9kZSB1c2VkIHRvIG9wZXJhdGUgVFJORy4qLworICAgIHRybmdfcmluZ19vc2NfZGl2X3QgcmluZ09zY0RpdjsgLyohPCBAYnJpZWYgUmluZyBvc2NpbGxhdG9yIGRpdmlkZSB1c2VkIGJ5IFRSTkcuICovCisgICAgdHJuZ19zYW1wbGVfbW9kZV90IHNhbXBsZU1vZGU7ICAvKiE8IEBicmllZiBTYW1wbGUgbW9kZSBvZiB0aGUgVFJORyByaW5nIG9zY2lsbGF0b3IuICovCisgICAgLyogU2VlZCBDb250cm9sKi8KKyAgICB1aW50MTZfdAorICAgICAgICBlbnRyb3B5RGVsYXk7IC8qITwgQGJyaWVmIEVudHJvcHkgRGVsYXkuIERlZmluZXMgdGhlIGxlbmd0aCAoaW4gc3lzdGVtIGNsb2Nrcykgb2YgZWFjaCBFbnRyb3B5IHNhbXBsZSB0YWtlbi4gKi8KKyAgICB1aW50MTZfdCBzYW1wbGVTaXplOyAvKiE8IEBicmllZiBTYW1wbGUgU2l6ZS4gRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIEVudHJvcHkgc2FtcGxlcyB0aGF0IHdpbGwgYmUgdGFrZW4gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIHVpbnQxNl90CisgICAgICAgIHNwYXJzZUJpdExpbWl0OyAvKiE8IEBicmllZiBTcGFyc2UgQml0IExpbWl0IHdoaWNoIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAqIGNvbnNlY3V0aXZlIHNhbXBsZXMgdGhhdCBtYXkgYmUgZGlzY2FyZGVkIGJlZm9yZSBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgbGltaXQgaXMgdXNlZCBvbmx5IGZvciBkdXJpbmcgdm9uIE5ldW1hbm4gc2FtcGxpbmcgKGVuYWJsZWQgYnkgVFJOR19IQUxfU2V0U2FtcGxlTW9kZSgpKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICogU2FtcGxlcyBhcmUgZGlzY2FyZGVkIGlmIHR3byBjb25zZWN1dGl2ZSByYXcgc2FtcGxlcyBhcmUgYm90aCAwIG9yIGJvdGggMS4gSWYKKyAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBkaXNjYXJkaW5nIG9jY3VycyBmb3IgYSBsb25nIHBlcmlvZCBvZiB0aW1lLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnN1ZmZpY2llbnQgRW50cm9weS4gKi8KKyAgICAvKiBTdGF0aXN0aWNhbCBDaGVjayBQYXJhbWV0ZXJzLiovCisgICAgdWludDhfdCByZXRyeUNvdW50OyAgICAgIC8qITwgQGJyaWVmIFJldHJ5IGNvdW50LiBJdCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgdGltZXMgYSBzdGF0aXN0aWNhbCBjaGVjayBtYXkgZmFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkdXJpbmcgdGhlIFRSTkcgRW50cm9weSBHZW5lcmF0aW9uIGJlZm9yZSBnZW5lcmF0aW5nIGFuIGVycm9yLiAqLworICAgIHVpbnQ4X3QgbG9uZ1J1bk1heExpbWl0OyAvKiE8IEBicmllZiBMYXJnZXN0IGFsbG93YWJsZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgc2FtcGxlcyBvZiBhbGwgMSwgb3IgYWxsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhhdCBpcyBhbGxvd2VkIGR1cmluZyB0aGUgRW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdAorICAgICAgICBtb25vYml0TGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2Ygb25lcy96ZXJvIGRldGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3QKKyAgICAgICAgcnVuQml0MUxpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdAorICAgICAgICBydW5CaXQyTGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggMgorICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90CisgICAgICAgIHJ1bkJpdDNMaW1pdDsgLyohPCBAYnJpZWYgTWF4aW11bSBhbmQgbWluaW11bSBsaW1pdHMgZm9yIHN0YXRpc3RpY2FsIGNoZWNrIG9mIG51bWJlciBvZiBydW5zIG9mIGxlbmd0aCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgZHVyaW5nIGVudHJvcHkgZ2VuZXJhdGlvbi4gKi8KKyAgICB0cm5nX3N0YXRpc3RpY2FsX2NoZWNrX2xpbWl0X3QKKyAgICAgICAgcnVuQml0NExpbWl0OyAvKiE8IEBicmllZiBNYXhpbXVtIGFuZCBtaW5pbXVtIGxpbWl0cyBmb3Igc3RhdGlzdGljYWwgY2hlY2sgb2YgbnVtYmVyIG9mIHJ1bnMgb2YgbGVuZ3RoIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBkdXJpbmcgZW50cm9weSBnZW5lcmF0aW9uLiAqLworICAgIHRybmdfc3RhdGlzdGljYWxfY2hlY2tfbGltaXRfdAorICAgICAgICBydW5CaXQ1TGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZiBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNQorICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5IGdlbmVyYXRpb24uICovCisgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90IHJ1bkJpdDZQbHVzTGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgcnVucyBvZiBsZW5ndGggNiBvciBtb3JlIGRldGVjdGVkIGR1cmluZyBlbnRyb3B5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24uICovCisgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90CisgICAgICAgIHBva2VyTGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZiAiUG9rZXIgVGVzdCIuICovCisgICAgdHJuZ19zdGF0aXN0aWNhbF9jaGVja19saW1pdF90CisgICAgICAgIGZyZXF1ZW5jeUNvdW50TGltaXQ7IC8qITwgQGJyaWVmIE1heGltdW0gYW5kIG1pbmltdW0gbGltaXRzIGZvciBzdGF0aXN0aWNhbCBjaGVjayBvZiBlbnRyb3B5IHNhbXBsZSBmcmVxdWVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQuICovCit9IHRybmdfY29uZmlnX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBUEkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIGRlZmF1bHQgdmFsdWVzLiBUaGUgZGVmYXVsdAorICogdmFsdWVzIGFyZSBhcyBmb2xsb3dzLgorICogQGNvZGUKKyAqICAgICB1c2VyX2NvbmZpZy0+bG9jayA9IDA7CisgKiAgICAgdXNlcl9jb25maWctPmNsb2NrTW9kZSA9IGtUUk5HX0Nsb2NrTW9kZVJpbmdPc2NpbGxhdG9yOworICogICAgIHVzZXJfY29uZmlnLT5yaW5nT3NjRGl2ID0ga1RSTkdfUmluZ09zY0RpdjA7ICBPciAgdG8gb3RoZXIga1RSTkdfUmluZ09zY0RpdlsyfDhdIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisgKiAgICAgdXNlcl9jb25maWctPnNhbXBsZU1vZGUgPSBrVFJOR19TYW1wbGVNb2RlUmF3OworICogICAgIHVzZXJfY29uZmlnLT5lbnRyb3B5RGVsYXkgPSAzMjAwOworICogICAgIHVzZXJfY29uZmlnLT5zYW1wbGVTaXplID0gMjUwMDsKKyAqICAgICB1c2VyX2NvbmZpZy0+c3BhcnNlQml0TGltaXQgPSBUUk5HX1VTRVJfQ09ORklHX0RFRkFVTFRfU1BBUlNFX0JJVF9MSU1JVDsKKyAqICAgICB1c2VyX2NvbmZpZy0+cmV0cnlDb3VudCA9IDYzOworICogICAgIHVzZXJfY29uZmlnLT5sb25nUnVuTWF4TGltaXQgPSAzNDsKKyAqICAgICB1c2VyX2NvbmZpZy0+bW9ub2JpdExpbWl0Lm1heGltdW0gPSAxMzg0OworICogICAgIHVzZXJfY29uZmlnLT5tb25vYml0TGltaXQubWluaW11bSA9IDExMTY7CisgKiAgICAgdXNlcl9jb25maWctPnJ1bkJpdDFMaW1pdC5tYXhpbXVtID0gNDA1OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQxTGltaXQubWluaW11bSA9IDIyNzsKKyAqICAgICB1c2VyX2NvbmZpZy0+cnVuQml0MkxpbWl0Lm1heGltdW0gPSAyMjA7CisgKiAgICAgdXNlcl9jb25maWctPnJ1bkJpdDJMaW1pdC5taW5pbXVtID0gOTg7CisgKiAgICAgdXNlcl9jb25maWctPnJ1bkJpdDNMaW1pdC5tYXhpbXVtID0gMTI1OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQzTGltaXQubWluaW11bSA9IDM3OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQ0TGltaXQubWF4aW11bSA9IDc1OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQ0TGltaXQubWluaW11bSA9IDExOworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQ1TGltaXQubWF4aW11bSA9IDQ3OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQ1TGltaXQubWluaW11bSA9IDE7CisgKiAgICAgdXNlcl9jb25maWctPnJ1bkJpdDZQbHVzTGltaXQubWF4aW11bSA9IDQ3OworICogICAgIHVzZXJfY29uZmlnLT5ydW5CaXQ2UGx1c0xpbWl0Lm1pbmltdW0gPSAxOworICogICAgIHVzZXJfY29uZmlnLT5wb2tlckxpbWl0Lm1heGltdW0gPSAyNjkxMjsKKyAqICAgICB1c2VyX2NvbmZpZy0+cG9rZXJMaW1pdC5taW5pbXVtID0gMjQ0NDU7CisgKiAgICAgdXNlcl9jb25maWctPmZyZXF1ZW5jeUNvdW50TGltaXQubWF4aW11bSA9IDI1NjAwOworICogICAgIHVzZXJfY29uZmlnLT5mcmVxdWVuY3lDb3VudExpbWl0Lm1pbmltdW0gPSAxNjAwOworICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gdXNlcl9jb25maWcgICBVc2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHJldHVybiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIHRoZSBrU3RhdHVzX1RSTkdfU3VjY2Vzcy4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGFuIGVycm9yLgorICovCitzdGF0dXNfdCBUUk5HX0dldERlZmF1bHRDb25maWcodHJuZ19jb25maWdfdCAqdXNlckNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEluaXRpYWxpemVzIHRoZSBUUk5HLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFRSTkcuCisgKiBXaGVuIGNhbGxlZCwgdGhlIFRSTkcgZW50cm9weSBnZW5lcmF0aW9uIHN0YXJ0cyBpbW1lZGlhdGVseS4KKyAqCisgKiBAcGFyYW0gYmFzZSAgVFJORyBiYXNlIGFkZHJlc3MKKyAqIEBwYXJhbSB1c2VyQ29uZmlnICAgIFBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHJldHVybiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIHRoZSBrU3RhdHVzX1RSTkdfU3VjY2Vzcy4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGFuIGVycm9yLgorICovCitzdGF0dXNfdCBUUk5HX0luaXQoVFJOR19UeXBlICpiYXNlLCBjb25zdCB0cm5nX2NvbmZpZ190ICp1c2VyQ29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgU2h1dHMgZG93biB0aGUgVFJORy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNodXRzIGRvd24gdGhlIFRSTkcuCisgKgorICogQHBhcmFtIGJhc2UgIFRSTkcgYmFzZSBhZGRyZXNzLgorICovCit2b2lkIFRSTkdfRGVpbml0KFRSTkdfVHlwZSAqYmFzZSk7CisKKy8qIQorICogQGJyaWVmIEdldHMgcmFuZG9tIGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHJhbmRvbSBkYXRhIGZyb20gdGhlIFRSTkcuCisgKgorICogQHBhcmFtIGJhc2UgIFRSTkcgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIGRhdGEgIFBvaW50ZXIgYWRkcmVzcyB1c2VkIHRvIHN0b3JlIHJhbmRvbSBkYXRhLgorICogQHBhcmFtIGRhdGFTaXplICBTaXplIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBieSB0aGUgZGF0YSBwYXJhbWV0ZXIuCisgKiBAcmV0dXJuIHJhbmRvbSBkYXRhCisgKi8KK3N0YXR1c190IFRSTkdfR2V0UmFuZG9tRGF0YShUUk5HX1R5cGUgKmJhc2UsIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhU2l6ZSk7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKy8qISBAfSovCisKKyNlbmRpZiAvKiBGU0xfRkVBVFVSRV9TT0NfVFJOR19DT1VOVCAqLworI2VuZGlmIC8qX0ZTTF9UUk5HX0hfKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RzaV92NC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvZHJpdmVycy9mc2xfdHNpX3Y0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5OWM5MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RzaV92NC5jCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IC0gMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiZnNsX3RzaV92NC5oIgorCit2b2lkIFRTSV9Jbml0KFRTSV9UeXBlICpiYXNlLCBjb25zdCB0c2lfY29uZmlnX3QgKmNvbmZpZykKK3sKKyAgICBhc3NlcnQoY29uZmlnICE9IE5VTEwpOworCisgICAgYm9vbCBpc19tb2R1bGVfZW5hYmxlZCA9IGZhbHNlOworICAgIGJvb2wgaXNfaW50X2VuYWJsZWQgPSBmYWxzZTsKKworI2lmICEoZGVmaW5lZChGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpICYmIEZTTF9TREtfRElTQUJMRV9EUklWRVJfQ0xPQ0tfQ09OVFJPTCkKKyAgICBDTE9DS19FbmFibGVDbG9jayhrQ0xPQ0tfVHNpMCk7CisjZW5kaWYgLyogRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MICovCisgICAgaWYgKGJhc2UtPkdFTkNTICYgVFNJX0dFTkNTX1RTSUVOX01BU0spCisgICAgeworICAgICAgICBpc19tb2R1bGVfZW5hYmxlZCA9IHRydWU7CisgICAgICAgIFRTSV9FbmFibGVNb2R1bGUoYmFzZSwgZmFsc2UpOworICAgIH0KKyAgICBpZiAoYmFzZS0+R0VOQ1MgJiBUU0lfR0VOQ1NfVFNJSUVOX01BU0spCisgICAgeworICAgICAgICBpc19pbnRfZW5hYmxlZCA9IHRydWU7CisgICAgICAgIFRTSV9EaXNhYmxlSW50ZXJydXB0cyhiYXNlLCBrVFNJX0dsb2JhbEludGVycnVwdEVuYWJsZSk7CisgICAgfQorICAgIAorICAgIGlmKGNvbmZpZy0+bW9kZSA9PSBrVFNJX0FuYWxvZ01vZGVTZWxfQ2FwYWNpdGl2ZSkKKyAgICB7CisgICAgICBUU0lfU2V0SGlnaFRocmVzaG9sZChiYXNlLCBjb25maWctPnRocmVzaCk7CisgICAgICBUU0lfU2V0TG93VGhyZXNob2xkKGJhc2UsIGNvbmZpZy0+dGhyZXNsKTsKKyAgICAgIFRTSV9TZXRFbGVjdHJvZGVPU0NQcmVzY2FsZXIoYmFzZSwgY29uZmlnLT5wcmVzY2FsZXIpOworICAgICAgVFNJX1NldFJlZmVyZW5jZUNoYXJnZUN1cnJlbnQoYmFzZSwgY29uZmlnLT5yZWZjaHJnKTsKKyAgICAgIFRTSV9TZXRFbGVjdHJvZGVDaGFyZ2VDdXJyZW50KGJhc2UsIGNvbmZpZy0+ZXh0Y2hyZyk7CisgICAgICBUU0lfU2V0TnVtYmVyT2ZTY2FucyhiYXNlLCBjb25maWctPm5zY24pOworICAgICAgVFNJX1NldEFuYWxvZ01vZGUoYmFzZSwgY29uZmlnLT5tb2RlKTsKKyAgICAgIFRTSV9TZXRPc2NWb2x0YWdlUmFpbHMoYmFzZSwgY29uZmlnLT5kdm9sdCk7ICAgCisgICAgfQorICAgIGVsc2UgLyogRm9yIG5vaXNlIG1vZGVzICovCisgICAgeyAgCisgICAgICBUU0lfU2V0SGlnaFRocmVzaG9sZChiYXNlLCBjb25maWctPnRocmVzaCk7CisgICAgICBUU0lfU2V0TG93VGhyZXNob2xkKGJhc2UsIGNvbmZpZy0+dGhyZXNsKTsKKyAgICAgIFRTSV9TZXRFbGVjdHJvZGVPU0NQcmVzY2FsZXIoYmFzZSwgY29uZmlnLT5wcmVzY2FsZXIpOworICAgICAgVFNJX1NldFJlZmVyZW5jZUNoYXJnZUN1cnJlbnQoYmFzZSwgY29uZmlnLT5yZWZjaHJnKTsKKyAgICAgIFRTSV9TZXROdW1iZXJPZlNjYW5zKGJhc2UsIGNvbmZpZy0+bnNjbik7CisgICAgICBUU0lfU2V0QW5hbG9nTW9kZShiYXNlLCBjb25maWctPm1vZGUpOworICAgICAgVFNJX1NldE9zY1ZvbHRhZ2VSYWlscyhiYXNlLCBjb25maWctPmR2b2x0KTsKKyAgICAgIFRTSV9TZXRFbGVjdHJvZGVTZXJpZXNSZXNpc3RvcihiYXNlLCBjb25maWctPnJlc2lzdG9yKTsKKyAgICAgIFRTSV9TZXRGaWx0ZXJCaXRzKGJhc2UsIGNvbmZpZy0+ZmlsdGVyKTsgIAorICAgIH0KKyAgICAgCisgICAgaWYgKGlzX21vZHVsZV9lbmFibGVkKQorICAgIHsKKyAgICAgICAgVFNJX0VuYWJsZU1vZHVsZShiYXNlLCB0cnVlKTsKKyAgICB9CisgICAgaWYgKGlzX2ludF9lbmFibGVkKQorICAgIHsKKyAgICAgICAgVFNJX0VuYWJsZUludGVycnVwdHMoYmFzZSwga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KK30KKwordm9pZCBUU0lfRGVpbml0KFRTSV9UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkdFTkNTID0gMFU7CisgICAgYmFzZS0+REFUQSA9IDBVOworICAgIGJhc2UtPlRTSEQgPSAwVTsKKyNpZiAhKGRlZmluZWQoRlNMX1NES19ESVNBQkxFX0RSSVZFUl9DTE9DS19DT05UUk9MKSAmJiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wpCisgICAgQ0xPQ0tfRGlzYWJsZUNsb2NrKGtDTE9DS19Uc2kwKTsKKyNlbmRpZiAvKiBGU0xfU0RLX0RJU0FCTEVfRFJJVkVSX0NMT0NLX0NPTlRST0wgKi8KK30KKwordm9pZCBUU0lfR2V0Tm9ybWFsTW9kZURlZmF1bHRDb25maWcodHNpX2NvbmZpZ190ICp1c2VyQ29uZmlnKQoreworICAgIHVzZXJDb25maWctPnRocmVzaCA9IDBVOworICAgIHVzZXJDb25maWctPnRocmVzbCA9IDBVOworICAgIHVzZXJDb25maWctPnByZXNjYWxlciA9IGtUU0lfRWxlY09zY1ByZXNjYWxlcl8yZGl2OworICAgIHVzZXJDb25maWctPmV4dGNocmcgPSBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNTAwbkE7CisgICAgdXNlckNvbmZpZy0+cmVmY2hyZyA9IGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF80dUE7CisgICAgdXNlckNvbmZpZy0+bnNjbiA9IGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl81dGltZTsKKyAgICB1c2VyQ29uZmlnLT5tb2RlID0ga1RTSV9BbmFsb2dNb2RlU2VsX0NhcGFjaXRpdmU7CisgICAgdXNlckNvbmZpZy0+ZHZvbHQgPSBrVFNJX09zY1ZvbFJhaWxzT3B0aW9uXzA7Cit9CisKK3ZvaWQgVFNJX0dldExvd1Bvd2VyTW9kZURlZmF1bHRDb25maWcodHNpX2NvbmZpZ190ICp1c2VyQ29uZmlnKQoreworICAgIHVzZXJDb25maWctPnRocmVzaCA9IDQwMFU7CisgICAgdXNlckNvbmZpZy0+dGhyZXNsID0gMFU7CisgICAgdXNlckNvbmZpZy0+cHJlc2NhbGVyID0ga1RTSV9FbGVjT3NjUHJlc2NhbGVyXzJkaXY7CisgICAgdXNlckNvbmZpZy0+ZXh0Y2hyZyA9IGtUU0lfRXh0T3NjQ2hhcmdlQ3VycmVudF81MDBuQTsKKyAgICB1c2VyQ29uZmlnLT5yZWZjaHJnID0ga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzR1QTsKKyAgICB1c2VyQ29uZmlnLT5uc2NuID0ga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzV0aW1lOworICAgIHVzZXJDb25maWctPm1vZGUgPSBrVFNJX0FuYWxvZ01vZGVTZWxfQ2FwYWNpdGl2ZTsKKyAgICB1c2VyQ29uZmlnLT5kdm9sdCA9IGtUU0lfT3NjVm9sUmFpbHNPcHRpb25fMDsKK30KKwordm9pZCBUU0lfQ2FsaWJyYXRlKFRTSV9UeXBlICpiYXNlLCB0c2lfY2FsaWJyYXRpb25fZGF0YV90ICpjYWxCdWZmKQoreworICAgIGFzc2VydChjYWxCdWZmICE9IE5VTEwpOworCisgICAgdWludDhfdCBpID0gMFU7CisgICAgYm9vbCBpc19pbnRfZW5hYmxlZCA9IGZhbHNlOworCisgICAgaWYgKGJhc2UtPkdFTkNTICYgVFNJX0dFTkNTX1RTSUlFTl9NQVNLKQorICAgIHsKKyAgICAgICAgaXNfaW50X2VuYWJsZWQgPSB0cnVlOworICAgICAgICBUU0lfRGlzYWJsZUludGVycnVwdHMoYmFzZSwga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUpOworICAgIH0KKyAgICBmb3IgKGkgPSAwVTsgaSA8IEZTTF9GRUFUVVJFX1RTSV9DSEFOTkVMX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBUU0lfU2V0TWVhc3VyZWRDaGFubmVsTnVtYmVyKGJhc2UsIGkpOworICAgICAgICBUU0lfU3RhcnRTb2Z0d2FyZVRyaWdnZXIoYmFzZSk7CisgICAgICAgIHdoaWxlICghKFRTSV9HZXRTdGF0dXNGbGFncyhiYXNlKSAmIGtUU0lfRW5kT2ZTY2FuRmxhZykpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBjYWxCdWZmLT5jYWxpYnJhdGVkRGF0YVtpXSA9IFRTSV9HZXRDb3VudGVyKGJhc2UpOworICAgICAgICBUU0lfQ2xlYXJTdGF0dXNGbGFncyhiYXNlLCBrVFNJX0VuZE9mU2NhbkZsYWcpOworICAgIH0KKyAgICBpZiAoaXNfaW50X2VuYWJsZWQpCisgICAgeworICAgICAgICBUU0lfRW5hYmxlSW50ZXJydXB0cyhiYXNlLCBrVFNJX0dsb2JhbEludGVycnVwdEVuYWJsZSk7CisgICAgfQorfQorCit2b2lkIFRTSV9FbmFibGVJbnRlcnJ1cHRzKFRTSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IHJlZ1ZhbHVlID0gYmFzZS0+R0VOQ1MgJiAofkFMTF9GTEFHU19NQVNLKTsKKworICAgIGlmIChtYXNrICYga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICByZWdWYWx1ZSB8PSBUU0lfR0VOQ1NfVFNJSUVOX01BU0s7CisgICAgfQorICAgIGlmIChtYXNrICYga1RTSV9PdXRPZlJhbmdlSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgcmVnVmFsdWUgJj0gKH5UU0lfR0VOQ1NfRVNPUl9NQVNLKTsKKyAgICB9CisgICAgaWYgKG1hc2sgJiBrVFNJX0VuZE9mU2NhbkludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHJlZ1ZhbHVlIHw9IFRTSV9HRU5DU19FU09SX01BU0s7CisgICAgfQorCisgICAgYmFzZS0+R0VOQ1MgPSByZWdWYWx1ZTsgICAgIC8qIHdyaXRlIHZhbHVlIHRvIHJlZ2lzdGVyICovCit9CisKK3ZvaWQgVFNJX0Rpc2FibGVJbnRlcnJ1cHRzKFRTSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKQoreworICAgIHVpbnQzMl90IHJlZ1ZhbHVlID0gYmFzZS0+R0VOQ1MgJiAofkFMTF9GTEFHU19NQVNLKTsKKworICAgIGlmIChtYXNrICYga1RTSV9HbG9iYWxJbnRlcnJ1cHRFbmFibGUpCisgICAgeworICAgICAgICByZWdWYWx1ZSAmPSAoflRTSV9HRU5DU19UU0lJRU5fTUFTSyk7CisgICAgfQorICAgIGlmIChtYXNrICYga1RTSV9PdXRPZlJhbmdlSW50ZXJydXB0RW5hYmxlKQorICAgIHsKKyAgICAgICAgcmVnVmFsdWUgfD0gVFNJX0dFTkNTX0VTT1JfTUFTSzsKKyAgICB9CisgICAgaWYgKG1hc2sgJiBrVFNJX0VuZE9mU2NhbkludGVycnVwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIHJlZ1ZhbHVlICY9ICh+VFNJX0dFTkNTX0VTT1JfTUFTSyk7CisgICAgfQorCisgICAgYmFzZS0+R0VOQ1MgPSByZWdWYWx1ZTsgICAgIC8qIHdyaXRlIHZhbHVlIHRvIHJlZ2lzdGVyICovCit9CisKK3ZvaWQgVFNJX0NsZWFyU3RhdHVzRmxhZ3MoVFNJX1R5cGUgKmJhc2UsIHVpbnQzMl90IG1hc2spCit7CisgICAgdWludDMyX3QgcmVnVmFsdWUgPSBiYXNlLT5HRU5DUyAmICh+QUxMX0ZMQUdTX01BU0spOworCisgICAgaWYgKG1hc2sgJiBrVFNJX0VuZE9mU2NhbkZsYWcpCisgICAgeworICAgICAgICByZWdWYWx1ZSB8PSBUU0lfR0VOQ1NfRU9TRl9NQVNLOworICAgIH0KKyAgICBpZiAobWFzayAmIGtUU0lfT3V0T2ZSYW5nZUZsYWcpCisgICAgeworICAgICAgICByZWdWYWx1ZSB8PSBUU0lfR0VOQ1NfT1VUUkdGX01BU0s7CisgICAgfQorCisgICAgYmFzZS0+R0VOQ1MgPSByZWdWYWx1ZTsgICAgIC8qIHdyaXRlIHZhbHVlIHRvIHJlZ2lzdGVyICovCit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90c2lfdjQuaCBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2RyaXZlcnMvZnNsX3RzaV92NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMjA0ODAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9kcml2ZXJzL2ZzbF90c2lfdjQuaApAQCAtMCwwICsxLDcwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GU0xfVFNJX1Y0X0hfCisjZGVmaW5lIF9GU0xfVFNJX1Y0X0hfCisKKyNpbmNsdWRlICJmc2xfY29tbW9uLmgiCisKKy8qIQorICogQGFkZHRvZ3JvdXAgdHNpX3Y0X2RyaXZlcgorICogQHsKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyohIEBuYW1lIERyaXZlciB2ZXJzaW9uICovCisvKkB7Ki8KKy8qISBAYnJpZWYgVFNJIGRyaXZlciB2ZXJzaW9uICovCisjZGVmaW5lIEZTTF9UU0lfRFJJVkVSX1ZFUlNJT04gKE1BS0VfVkVSU0lPTigyLCAxLCAyKSkKKy8qQH0qLworCisvKiEgQGJyaWVmIFRTSSBzdGF0dXMgZmxhZ3MgbWFjcm8gY29sbGVjdGlvbiAqLworI2RlZmluZSBBTExfRkxBR1NfTUFTSyAgKFRTSV9HRU5DU19FT1NGX01BU0sgfCBUU0lfR0VOQ1NfT1VUUkdGX01BU0spCisKKy8qISBAYnJpZWYgcmVzaXN0b3IgYml0IHNoaWZ0IGluIEVYVENIUkcgYml0LWZpZWxkICovCisjZGVmaW5lIFRTSV9WNF9FWFRDSFJHX1JFU0lTVE9SX0JJVF9TSElGVCBUU0lfR0VOQ1NfRVhUQ0hSR19TSElGVAorCisvKiEgQGJyaWVmIGZpbHRlciBiaXRzIHNoaWZ0IGluIEVYVENIUkcgYml0LWZpZWxkICAqLworI2RlZmluZSBUU0lfVjRfRVhUQ0hSR19GSUxURVJfQklUU19TSElGVCAoMVUgKyBUU0lfR0VOQ1NfRVhUQ0hSR19TSElGVCkKKworLyohIEBicmllZiBtYWNybyBvZiBjbGVhcmluZyB0aGUgcmVzaXN0b3IgYml0IGluIEVYVENIUkcgYml0LWZpZWxkICovCisjZGVmaW5lIFRTSV9WNF9FWFRDSFJHX1JFU0lTVE9SX0JJVF9DTEVBUiBcCisgICAgKCh1aW50MzJfdCkoKH4oQUxMX0ZMQUdTX01BU0sgfCBUU0lfR0VOQ1NfRVhUQ0hSR19NQVNLKSkgfCAoM1UgPDwgVFNJX1Y0X0VYVENIUkdfRklMVEVSX0JJVFNfU0hJRlQpKSkKKworLyohIEBicmllZiBtYWNybyBvZiBjbGVhcmluZyB0aGUgZmlsdGVyIGJpdHMgaW4gRVhUQ0hSRyBiaXQtZmllbGQgKi8KKyNkZWZpbmUgVFNJX1Y0X0VYVENIUkdfRklMVEVSX0JJVFNfQ0xFQVIgXAorICAgICgodWludDMyX3QpKCh+KEFMTF9GTEFHU19NQVNLIHwgVFNJX0dFTkNTX0VYVENIUkdfTUFTSykpIHwgKDFVIDw8IFRTSV9WNF9FWFRDSFJHX1JFU0lTVE9SX0JJVF9TSElGVCkpKQorCisvKiEKKyAqIEBicmllZiBUU0kgbnVtYmVyIG9mIHNjYW4gaW50ZXJ2YWxzIGZvciBlYWNoIGVsZWN0cm9kZS4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSB0c2kgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNjYW5zIGluIGEgVFNJIGluc3RhbmNlIGZvciBlYWNoIGVsZWN0cm9kZS4KKyAqLwordHlwZWRlZiBlbnVtIF90c2lfbl9jb25zZWN1dGl2ZV9zY2FucworeworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl8xdGltZSA9IDBVLCAgIC8qITwgT25jZSBwZXIgZWxlY3Ryb2RlICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzJ0aW1lID0gMVUsICAgLyohPCBUd2ljZSBwZXIgZWxlY3Ryb2RlICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzN0aW1lID0gMlUsICAgLyohPCAzIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfNHRpbWUgPSAzVSwgICAvKiE8IDQgdGltZXMgY29uc2VjdXRpdmUgc2NhbiAqLworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl81dGltZSA9IDRVLCAgIC8qITwgNSB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzZ0aW1lID0gNVUsICAgLyohPCA2IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfN3RpbWUgPSA2VSwgICAvKiE8IDcgdGltZXMgY29uc2VjdXRpdmUgc2NhbiAqLworICAgIGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl84dGltZSA9IDdVLCAgIC8qITwgOCB0aW1lcyBjb25zZWN1dGl2ZSBzY2FuICovCisgICAga1RTSV9Db25zZWN1dGl2ZVNjYW5zTnVtYmVyXzl0aW1lID0gOFUsICAgLyohPCA5IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTB0aW1lID0gOVUsICAvKiE8IDEwIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTF0aW1lID0gMTBVLCAvKiE8IDExIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTJ0aW1lID0gMTFVLCAvKiE8IDEyIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTN0aW1lID0gMTJVLCAvKiE8IDEzIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTR0aW1lID0gMTNVLCAvKiE8IDE0IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTV0aW1lID0gMTRVLCAvKiE8IDE1IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTZ0aW1lID0gMTVVLCAvKiE8IDE2IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTd0aW1lID0gMTZVLCAvKiE8IDE3IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTh0aW1lID0gMTdVLCAvKiE8IDE4IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMTl0aW1lID0gMThVLCAvKiE8IDE5IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjB0aW1lID0gMTlVLCAvKiE8IDIwIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjF0aW1lID0gMjBVLCAvKiE8IDIxIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjJ0aW1lID0gMjFVLCAvKiE8IDIyIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjN0aW1lID0gMjJVLCAvKiE8IDIzIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjR0aW1lID0gMjNVLCAvKiE8IDI0IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjV0aW1lID0gMjRVLCAvKiE8IDI1IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjZ0aW1lID0gMjVVLCAvKiE8IDI2IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjd0aW1lID0gMjZVLCAvKiE8IDI3IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjh0aW1lID0gMjdVLCAvKiE8IDI4IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMjl0aW1lID0gMjhVLCAvKiE8IDI5IHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMzB0aW1lID0gMjlVLCAvKiE8IDMwIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMzF0aW1lID0gMzBVLCAvKiE8IDMxIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KKyAgICBrVFNJX0NvbnNlY3V0aXZlU2NhbnNOdW1iZXJfMzJ0aW1lID0gMzFVICAvKiE8IDMyIHRpbWVzIGNvbnNlY3V0aXZlIHNjYW4gKi8KK30gdHNpX25fY29uc2VjdXRpdmVfc2NhbnNfdDsKKworLyohCisgKiBAYnJpZWYgVFNJIGVsZWN0cm9kZSBvc2NpbGxhdG9yIHByZXNjYWxlci4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgZGVmaW5lIHRoZSBUU0kgZWxlY3Ryb2RlIG9zY2lsbGF0b3IgcHJlc2NhbGVyIGluIGEgVFNJIGluc3RhbmNlLgorICovCit0eXBlZGVmIGVudW0gX3RzaV9lbGVjdHJvZGVfb3NjX3ByZXNjYWxlcgoreworICAgIGtUU0lfRWxlY09zY1ByZXNjYWxlcl8xZGl2ID0gMFUsICAvKiE8IEVsZWN0cm9kZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDEgKi8KKyAgICBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMmRpdiA9IDFVLCAgLyohPCBFbGVjdHJvZGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aWRlZCBieSAyICovCisgICAga1RTSV9FbGVjT3NjUHJlc2NhbGVyXzRkaXYgPSAyVSwgIC8qITwgRWxlY3Ryb2RlIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlkZWQgYnkgNCAqLworICAgIGtUU0lfRWxlY09zY1ByZXNjYWxlcl84ZGl2ID0gM1UsICAvKiE8IEVsZWN0cm9kZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDggKi8KKyAgICBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMTZkaXYgPSA0VSwgLyohPCBFbGVjdHJvZGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aWRlZCBieSAxNiAqLworICAgIGtUU0lfRWxlY09zY1ByZXNjYWxlcl8zMmRpdiA9IDVVLCAvKiE8IEVsZWN0cm9kZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDMyICovCisgICAga1RTSV9FbGVjT3NjUHJlc2NhbGVyXzY0ZGl2ID0gNlUsIC8qITwgRWxlY3Ryb2RlIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlkZWQgYnkgNjQgKi8KKyAgICBrVFNJX0VsZWNPc2NQcmVzY2FsZXJfMTI4ZGl2ID0gN1UgLyohPCBFbGVjdHJvZGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgZGl2aWRlZCBieSAxMjggKi8KK30gdHNpX2VsZWN0cm9kZV9vc2NfcHJlc2NhbGVyX3Q7CisKKy8qIQorICogQGJyaWVmIFRTSSBhbmFsb2cgbW9kZSBzZWxlY3QuCisgKgorICogU2V0IHVwIFRTSSBhbmFsb2cgbW9kZXMgaW4gYSBUU0kgaW5zdGFuY2UuCisgKi8KK3R5cGVkZWYgZW51bSBfdHNpX2FuYWxvZ19tb2RlCit7CisgICAga1RTSV9BbmFsb2dNb2RlU2VsX0NhcGFjaXRpdmUgPSAwVSwgICAgIC8qITwgQWN0aXZlIFRTSSBjYXBhY2l0aXZlIHNlbnNpbmcgbW9kZSAqLworICAgIGtUU0lfQW5hbG9nTW9kZVNlbF9Ob2lzZU5vRnJlcUxpbSA9IDRVLCAvKiE8IFNpbmdsZSB0aHJlc2hvbGQgbm9pc2UgZGV0ZWN0aW9uIG1vZGUgd2l0aCBubyBmcmVxLiBsaW1pdGF0aW9uLiAqLworICAgIGtUU0lfQW5hbG9nTW9kZVNlbF9Ob2lzZUZyZXFMaW0gPSA4VSwgICAvKiE8IFNpbmdsZSB0aHJlc2hvbGQgbm9pc2UgZGV0ZWN0aW9uIG1vZGUgd2l0aCBmcmVxLiBsaW1pdGF0aW9uLiAqLworICAgIGtUU0lfQW5hbG9nTW9kZVNlbF9BdXRvTm9pc2UgPSAxMlUgICAgICAvKiE8IEFjdGl2ZSBUU0kgYW5hbG9nIGluIGF1dG9tYXRpYyBub2lzZSBkZXRlY3Rpb24gbW9kZSAqLworfSB0c2lfYW5hbG9nX21vZGVfdDsKKworLyohCisgKiBAYnJpZWYgVFNJIFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBhbmQgZGlzY2hhcmdlIGN1cnJlbnQgc2VsZWN0LgorICoKKyAqIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdGhlIFRTSSBSZWZlcmVuY2Ugb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBzZWxlY3QgaW4gYSBUU0kgKFJFRkNIUkcpIGluc3RhbmNlLgorICovCit0eXBlZGVmIGVudW0gX3RzaV9yZWZlcmVuY2Vfb3NjX2NoYXJnZV9jdXJyZW50Cit7CisgICAga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzUwMG5BID0gMFUsIC8qITwgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgNTAwIMK1QSAqLworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF8xdUEgPSAxVSwgICAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDEgwrVBICovCisgICAga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzJ1QSA9IDJVLCAgIC8qITwgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgMiDCtUEgKi8KKyAgICBrVFNJX1JlZk9zY0NoYXJnZUN1cnJlbnRfNHVBID0gM1UsICAgLyohPCBSZWZlcmVuY2Ugb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyA0IMK1QSAqLworICAgIGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF84dUEgPSA0VSwgICAvKiE8IFJlZmVyZW5jZSBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDggwrVBICovCisgICAga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzE2dUEgPSA1VSwgIC8qITwgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgMTYgwrVBICovCisgICAga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzMydUEgPSA2VSwgIC8qITwgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgMzIgwrVBICovCisgICAga1RTSV9SZWZPc2NDaGFyZ2VDdXJyZW50XzY0dUEgPSA3VSAgIC8qITwgUmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgNjQgwrVBICovCit9IHRzaV9yZWZlcmVuY2Vfb3NjX2NoYXJnZV9jdXJyZW50X3Q7CisKKy8qIQorICogQGJyaWVmIFRTSSBvc2NpbGF0b3IncyB2b2x0YWdlIHJhaWxzLgorICoKKyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIG9zY2lsbGF0b3IncyB2b2x0YWdlIHJhaWxzLgorICovCit0eXBlZGVmIGVudW0gX3RzaV9vc2Nfdm9sdGFnZV9yYWlscworeworICAgIGtUU0lfT3NjVm9sUmFpbHNPcHRpb25fMCA9IDBVLCAvKiE8IERWT0xUIHZhbHVlIG9wdGlvbiAwLCB0aGUgdmFsdWUgbWF5IGRpZmZlciBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zICovCisgICAga1RTSV9Pc2NWb2xSYWlsc09wdGlvbl8xID0gMVUsIC8qITwgRFZPTFQgdmFsdWUgb3B0aW9uIDEsIHRoZSB2YWx1ZSBtYXkgZGlmZmVyIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMgKi8KKyAgICBrVFNJX09zY1ZvbFJhaWxzT3B0aW9uXzIgPSAyVSwgLyohPCBEVk9MVCB2YWx1ZSBvcHRpb24gMiwgdGhlIHZhbHVlIG1heSBkaWZmZXIgb24gZGlmZmVyZW50IHBsYXRmb3JtcyAqLworICAgIGtUU0lfT3NjVm9sUmFpbHNPcHRpb25fMyA9IDNVICAvKiE8IERWT0xUIHZhbHVlIG9wdGlvbiAzLCB0aGUgdmFsdWUgbWF5IGRpZmZlciBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zICovCit9IHRzaV9vc2Nfdm9sdGFnZV9yYWlsc190OworCisvKiEKKyAqIEBicmllZiBUU0kgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgYW5kIGRpc2NoYXJnZSBjdXJyZW50IHNlbGVjdC4KKyAqCisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBlbGVjdHJvZGUgb3NjaWxsYXRvciBjaGFyZ2UgYW5kIGRpc2NoYXJnZSBjdXJyZW50IHZhbHVlCisgKiBpbiBUU0kgKEVYVENIUkcpIGluc3RhbmNlLgorICovCit0eXBlZGVmIGVudW0gX3RzaV9leHRlcm5hbF9vc2NfY2hhcmdlX2N1cnJlbnQKK3sKKyAgICBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNTAwbkEgPSAwVSwgLyohPCBFeHRlcm5hbCBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDUwMCDCtUEgKi8KKyAgICBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfMXVBID0gMVUsICAgLyohPCBFeHRlcm5hbCBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDEgwrVBICovCisgICAga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzJ1QSA9IDJVLCAgIC8qITwgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyAyIMK1QSAqLworICAgIGtUU0lfRXh0T3NjQ2hhcmdlQ3VycmVudF80dUEgPSAzVSwgICAvKiE8IEV4dGVybmFsIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgNCDCtUEgKi8KKyAgICBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfOHVBID0gNFUsICAgLyohPCBFeHRlcm5hbCBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDggwrVBICovCisgICAga1RTSV9FeHRPc2NDaGFyZ2VDdXJyZW50XzE2dUEgPSA1VSwgIC8qITwgRXh0ZXJuYWwgb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudCBpcyAxNiDCtUEgKi8KKyAgICBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfMzJ1QSA9IDZVLCAgLyohPCBFeHRlcm5hbCBvc2NpbGxhdG9yIGNoYXJnZSBjdXJyZW50IGlzIDMyIMK1QSAqLworICAgIGtUU0lfRXh0T3NjQ2hhcmdlQ3VycmVudF82NHVBID0gN1UgICAvKiE8IEV4dGVybmFsIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQgaXMgNjQgwrVBICovCit9IHRzaV9leHRlcm5hbF9vc2NfY2hhcmdlX2N1cnJlbnRfdDsKKworLyohCisgKiBAYnJpZWYgVFNJIHNlcmllcyByZXNpc3RhbmNlIFJTIHZhbHVlIHNlbGVjdC4KKyAqCisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBlbGVjdHJvZGUgUlMgc2VyaWVzIHJlc2lzdGFuY2UgZm9yIHRoZSBub2lzZSBtb2RlCisgKiBpbiBUU0kgKEVYVENIUkcpIGluc3RhbmNlLgorICovCit0eXBlZGVmIGVudW0gX3RzaV9zZXJpZXNfcmVzaXN0YW5jZQoreworICAgIGtUU0lfU2VyaWVzUmVzaXN0YW5jZV8zMmsgPSAwVSwgLyohPCBTZXJpZXMgUmVzaXN0YW5jZSBpcyAzMiBraWxvIG9obXMgICAqLworICAgIGtUU0lfU2VyaWVzUmVzaXN0YW5jZV8xODdrID0gMVUgLyohPCBTZXJpZXMgUmVzaXN0YW5jZSBpcyAxOCA3IGtpbG8gb2htcyAgKi8KK30gdHNpX3Nlcmllc19yZXNpc3Rvcl90OworCisvKiEKKyAqIEBicmllZiBUU0kgc2VyaWVzIGZpbHRlciBiaXRzIHNlbGVjdC4KKyAqCisgKiBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBjb3VudCBvZiB0aGUgZmlsdGVyIGJpdHMKKyAqIGluIFRTSSBub2lzZSBtb2RlIEVYVENIUkdbMjoxXSBiaXRzCisgKi8KK3R5cGVkZWYgZW51bSBfdHNpX2ZpbHRlcl9iaXRzCit7CisgICAga1RTSV9GaWx0ZXJCaXRzXzMgPSAwVSwgLyohPCAzIGZpbHRlciBiaXRzLCA4IHBlYWtzIGluY3JlbWVudHMgdGhlIGNudCsxICovCisgICAga1RTSV9GaWx0ZXJCaXRzXzIgPSAxVSwgLyohPCAyIGZpbHRlciBiaXRzLCA0IHBlYWtzIGluY3JlbWVudHMgdGhlIGNudCsxICovCisgICAga1RTSV9GaWx0ZXJCaXRzXzEgPSAyVSwgLyohPCAxIGZpbHRlciBiaXRzLCAyIHBlYWtzIGluY3JlbWVudHMgdGhlIGNudCsxICovCisgICAga1RTSV9GaWx0ZXJCaXRzXzAgPSAzVSAgLyohPCBubyBmaWx0ZXIgYml0cywxIHBlYWsgIGluY3JlbWVudHMgdGhlIGNudCsxICovCit9IHRzaV9maWx0ZXJfYml0c190OworCisvKiEgQGJyaWVmIFRTSSBzdGF0dXMgZmxhZ3MuICovCit0eXBlZGVmIGVudW0gX3RzaV9zdGF0dXNfZmxhZ3MKK3sKKyAgICBrVFNJX0VuZE9mU2NhbkZsYWcgPSBUU0lfR0VOQ1NfRU9TRl9NQVNLLCAgIC8qITwgRW5kLU9mLVNjYW4gZmxhZyAqLworICAgIGtUU0lfT3V0T2ZSYW5nZUZsYWcgPSBUU0lfR0VOQ1NfT1VUUkdGX01BU0sgLyohPCBPdXQtT2YtUmFuZ2UgZmxhZyAqLworfSB0c2lfc3RhdHVzX2ZsYWdzX3Q7CisKKy8qISBAYnJpZWYgVFNJIGZlYXR1cmUgaW50ZXJydXB0IHNvdXJjZS4qLwordHlwZWRlZiBlbnVtIF90c2lfaW50ZXJydXB0X2VuYWJsZQoreworICAgIGtUU0lfR2xvYmFsSW50ZXJydXB0RW5hYmxlID0gMVUsICAgICAvKiE8IFRTSSBtb2R1bGUgZ2xvYmFsIGludGVycnVwdCAqLworICAgIGtUU0lfT3V0T2ZSYW5nZUludGVycnVwdEVuYWJsZSA9IDJVLCAvKiE8IE91dC1PZi1SYW5nZSBpbnRlcnJ1cHQgKi8KKyAgICBrVFNJX0VuZE9mU2NhbkludGVycnVwdEVuYWJsZSA9IDRVICAgLyohPCBFbmQtT2YtU2NhbiBpbnRlcnJ1cHQgKi8KK30gdHNpX2ludGVycnVwdF9lbmFibGVfdDsKKworLyohIEBicmllZiBUU0kgY2FsaWJyYXRpb24gZGF0YSBzdG9yYWdlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX3RzaV9jYWxpYnJhdGlvbl9kYXRhCit7CisgICAgdWludDE2X3QgY2FsaWJyYXRlZERhdGFbRlNMX0ZFQVRVUkVfVFNJX0NIQU5ORUxfQ09VTlRdOyAvKiE8IFRTSSBjYWxpYnJhdGlvbiBkYXRhIHN0b3JhZ2UgYnVmZmVyICovCit9IHRzaV9jYWxpYnJhdGlvbl9kYXRhX3Q7CisKKy8qIQorICogQGJyaWVmIFRTSSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgc2V0dGluZ3MgZm9yIHRoZSBtb3N0IGNvbW1vbiBUU0kgY29uZmlndXJhdGlvbnMgaW5jbHVkaW5nCisgKiB0aGUgVFNJIG1vZHVsZSBjaGFyZ2UgY3VycmVudHMsIG51bWJlciBvZiBzY2FucywgdGhyZXNob2xkcywgYW5kIHNvIG9uLgorICovCit0eXBlZGVmIHN0cnVjdCBfdHNpX2NvbmZpZworeworICAgIHVpbnQxNl90IHRocmVzaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBIaWdoIHRocmVzaG9sZC4gKi8KKyAgICB1aW50MTZfdCB0aHJlc2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTG93IHRocmVzaG9sZC4gKi8KKyAgICB0c2lfZWxlY3Ryb2RlX29zY19wcmVzY2FsZXJfdCBwcmVzY2FsZXI7ICAgIC8qITwgUHJlc2NhbGVyICovCisgICAgdHNpX2V4dGVybmFsX29zY19jaGFyZ2VfY3VycmVudF90IGV4dGNocmc7ICAvKiE8IEVsZWN0cm9kZSBjaGFyZ2UgY3VycmVudCAqLworICAgIHRzaV9yZWZlcmVuY2Vfb3NjX2NoYXJnZV9jdXJyZW50X3QgcmVmY2hyZzsgLyohPCBSZWZlcmVuY2UgY2hhcmdlIGN1cnJlbnQgKi8KKyAgICB0c2lfbl9jb25zZWN1dGl2ZV9zY2Fuc190IG5zY247ICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIHNjYW5zLiAqLworICAgIHRzaV9hbmFsb2dfbW9kZV90IG1vZGU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBUU0kgbW9kZSBvZiBvcGVyYXRpb24uICovCisgICAgdHNpX29zY192b2x0YWdlX3JhaWxzX3QgZHZvbHQ7ICAgICAgICAgICAgICAvKiE8IE9zY2lsbGF0b3IncyB2b2x0YWdlIHJhaWxzLiAqLworICAgIHRzaV9zZXJpZXNfcmVzaXN0b3JfdCByZXNpc3RvcjsgICAgICAgICAgICAgLyohPCBTZXJpZXMgcmVzaXN0YW5jZSB2YWx1ZSAgKi8KKyAgICB0c2lfZmlsdGVyX2JpdHNfdCBmaWx0ZXI7ICAgICAgICAgICAgICAgICAgIC8qITwgTm9pc2UgbW9kZSBmaWx0ZXIgYml0cyAgICovCit9IHRzaV9jb25maWdfdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiEKKyAqIEBicmllZiBJbml0aWFsaXplcyBoYXJkd2FyZS4KKyAqCisgKiBAZGV0YWlscyBJbml0aWFsaXplcyB0aGUgcGVyaXBoZXJhbCB0byB0aGUgdGFyZ2V0ZWQgc3RhdGUgc3BlY2lmaWVkIGJ5IHBhcmFtZXRlciBjb25maWd1cmF0aW9uLAorICogICAgICAgICAgc3VjaCBhcyBzZXRzIHByZXNjYWxlcnMsIG51bWJlciBvZiBzY2FucywgY2xvY2tzLCBkZWx0YSB2b2x0YWdlCisgKiAgICAgICAgICBzZXJpZXMgcmVzaXN0b3IsIGZpbHRlciBiaXRzLCByZWZlcmVuY2UsIGFuZCBlbGVjdHJvZGUgY2hhcmdlIGN1cnJlbnQgYW5kIHRocmVzaG9sZC4KKyAqIEBwYXJhbSAgYmFzZSAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gIGNvbmZpZyAgUG9pbnRlciB0byBUU0kgbW9kdWxlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogQHJldHVybiBub25lCisgKi8KK3ZvaWQgVFNJX0luaXQoVFNJX1R5cGUgKmJhc2UsIGNvbnN0IHRzaV9jb25maWdfdCAqY29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgRGUtaW5pdGlhbGl6ZXMgaGFyZHdhcmUuCisgKgorICogQGRldGFpbHMgRGUtaW5pdGlhbGl6ZXMgdGhlIHBlcmlwaGVyYWwgdG8gZGVmYXVsdCBzdGF0ZS4KKyAqCisgKiBAcGFyYW0gIGJhc2UgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEByZXR1cm4gbm9uZQorICovCit2b2lkIFRTSV9EZWluaXQoVFNJX1R5cGUgKmJhc2UpOworCisvKiEKKyAqIEBicmllZiBHZXRzIHRoZSBUU0kgbm9ybWFsIG1vZGUgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIFRoaXMgaW50ZXJmYWNlIHNldHMgdXNlckNvbmZpZyBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHZhbHVlLiBUaGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgb25seQorICogaW5jbHVkZXMgdGhlIHNldHRpbmdzIGZvciB0aGUgd2hvbGUgVFNJLgorICogVGhlIHVzZXIgY29uZmlndXJlIGlzIHNldCB0byB0aGVzZSB2YWx1ZXM6CisgKiBAY29kZQorICAgIHVzZXJDb25maWctPnByZXNjYWxlciA9IGtUU0lfRWxlY09zY1ByZXNjYWxlcl8yZGl2OworICAgIHVzZXJDb25maWctPmV4dGNocmcgPSBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNTAwbkE7CisgICAgdXNlckNvbmZpZy0+cmVmY2hyZyA9IGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF80dUE7CisgICAgdXNlckNvbmZpZy0+bnNjbiA9IGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl8xMHRpbWU7CisgICAgdXNlckNvbmZpZy0+bW9kZSA9IGtUU0lfQW5hbG9nTW9kZVNlbF9DYXBhY2l0aXZlOworICAgIHVzZXJDb25maWctPmR2b2x0ID0ga1RTSV9Pc2NWb2xSYWlsc09wdGlvbl8wOworICAgIHVzZXJDb25maWctPnRocmVzaCA9IDBVOworICAgIHVzZXJDb25maWctPnRocmVzbCA9IDBVOworICAgQGVuZGNvZGUKKyAqCisgKiBAcGFyYW0gdXNlckNvbmZpZyBQb2ludGVyIHRvIHRoZSBUU0kgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqLwordm9pZCBUU0lfR2V0Tm9ybWFsTW9kZURlZmF1bHRDb25maWcodHNpX2NvbmZpZ190ICp1c2VyQ29uZmlnKTsKKworLyohCisgKiBAYnJpZWYgR2V0cyB0aGUgVFNJIGxvdyBwb3dlciBtb2RlIGRlZmF1bHQgdXNlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAqIFRoaXMgaW50ZXJmYWNlIHNldHMgdXNlckNvbmZpZyBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHZhbHVlLiBUaGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgb25seQorICogaW5jbHVkZXMgdGhlIHNldHRpbmdzIGZvciB0aGUgd2hvbGUgVFNJLgorICogVGhlIHVzZXIgY29uZmlndXJlIGlzIHNldCB0byB0aGVzZSB2YWx1ZXM6CisgKiBAY29kZQorICAgIHVzZXJDb25maWctPnByZXNjYWxlciA9IGtUU0lfRWxlY09zY1ByZXNjYWxlcl8yZGl2OworICAgIHVzZXJDb25maWctPmV4dGNocmcgPSBrVFNJX0V4dE9zY0NoYXJnZUN1cnJlbnRfNTAwbkE7CisgICAgdXNlckNvbmZpZy0+cmVmY2hyZyA9IGtUU0lfUmVmT3NjQ2hhcmdlQ3VycmVudF80dUE7CisgICAgdXNlckNvbmZpZy0+bnNjbiA9IGtUU0lfQ29uc2VjdXRpdmVTY2Fuc051bWJlcl8xMHRpbWU7CisgICAgdXNlckNvbmZpZy0+bW9kZSA9IGtUU0lfQW5hbG9nTW9kZVNlbF9DYXBhY2l0aXZlOworICAgIHVzZXJDb25maWctPmR2b2x0ID0ga1RTSV9Pc2NWb2xSYWlsc09wdGlvbl8wOworICAgIHVzZXJDb25maWctPnRocmVzaCA9IDQwMFU7CisgICAgdXNlckNvbmZpZy0+dGhyZXNsID0gMFU7CisgICBAZW5kY29kZQorICoKKyAqIEBwYXJhbSB1c2VyQ29uZmlnIFBvaW50ZXIgdG8gdGhlIFRTSSB1c2VyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICovCit2b2lkIFRTSV9HZXRMb3dQb3dlck1vZGVEZWZhdWx0Q29uZmlnKHRzaV9jb25maWdfdCAqdXNlckNvbmZpZyk7CisKKy8qIQorICogQGJyaWVmIEhhcmR3YXJlIGNhbGlicmF0aW9uLgorICoKKyAqIEBkZXRhaWxzIENhbGlicmF0ZXMgdGhlIHBlcmlwaGVyYWwgdG8gZmV0Y2ggdGhlIGluaXRpYWwgY291bnRlciB2YWx1ZSBvZgorICogICAgICAgICAgdGhlIGVuYWJsZWQgZWxlY3Ryb2Rlcy4KKyAqICAgICAgICAgIFRoaXMgQVBJIGlzIG1vc3RseSB1c2VkIGF0IGluaXRpYWwgYXBwbGljYXRpb24gc2V0dXAuIENhbGwKKyAqICAgICAgICAgIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgdGhlIFxyZWYgVFNJX0luaXQgQVBJIGFuZCB1c2UgdGhlIGNhbGlicmF0ZWQKKyAqICAgICAgICAgIGNvdW50ZXIgdmFsdWVzIHRvIHNldCB1cCBhcHBsaWNhdGlvbnMgKHN1Y2ggYXMgdG8gZGV0ZXJtaW5lCisgKiAgICAgICAgICB1bmRlciB3aGljaCBjb3VudGVyIHZhbHVlIHdlIGNhbiBjb25maXJtIGEgdG91Y2ggZXZlbnQgb2NjdXJzKS4KKyAqCisgKiBAcGFyYW0gICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyAqIEBwYXJhbSAgIGNhbEJ1ZmYgRGF0YSBidWZmZXIgdGhhdCBzdG9yZSB0aGUgY2FsaWJyYXRlZCBjb3VudGVyIHZhbHVlLgorICogQHJldHVybiBub25lCisgKgorICovCit2b2lkIFRTSV9DYWxpYnJhdGUoVFNJX1R5cGUgKmJhc2UsIHRzaV9jYWxpYnJhdGlvbl9kYXRhX3QgKmNhbEJ1ZmYpOworCisvKiEKKyAqIEBicmllZiBFbmFibGVzIHRoZSBUU0kgaW50ZXJydXB0IHJlcXVlc3RzLgorICogQHBhcmFtIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgaW50ZXJydXB0IHNvdXJjZQorICogICAgIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgc291cmNlIGlmIGRlZmluZWQ6CisgKiAgICAgQGFyZyBrVFNJX0dsb2JhbEludGVycnVwdEVuYWJsZQorICogICAgIEBhcmcga1RTSV9FbmRPZlNjYW5JbnRlcnJ1cHRFbmFibGUKKyAqICAgICBAYXJnIGtUU0lfT3V0T2ZSYW5nZUludGVycnVwdEVuYWJsZQorICovCit2b2lkIFRTSV9FbmFibGVJbnRlcnJ1cHRzKFRTSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisgKiBAYnJpZWYgRGlzYWJsZXMgdGhlIFRTSSBpbnRlcnJ1cHQgcmVxdWVzdHMuCisgKiBAcGFyYW0gYmFzZSBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisgKiBAcGFyYW0gbWFzayBpbnRlcnJ1cHQgc291cmNlCisgKiAgICAgVGhlIHBhcmFtZXRlciBjYW4gYmUgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBzb3VyY2UgaWYgZGVmaW5lZDoKKyAqICAgICBAYXJnIGtUU0lfR2xvYmFsSW50ZXJydXB0RW5hYmxlCisgKiAgICAgQGFyZyBrVFNJX0VuZE9mU2NhbkludGVycnVwdEVuYWJsZQorICogICAgIEBhcmcga1RTSV9PdXRPZlJhbmdlSW50ZXJydXB0RW5hYmxlCisgKi8KK3ZvaWQgVFNJX0Rpc2FibGVJbnRlcnJ1cHRzKFRTSV9UeXBlICpiYXNlLCB1aW50MzJfdCBtYXNrKTsKKworLyohCisqIEBicmllZiBHZXRzIGFuIGludGVycnVwdCBmbGFnLgorKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIFRTSSBpbnRlcnJ1cHQgZmxhZ3MuCisqCisqIEBwYXJhbSAgICBiYXNlICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEByZXR1cm4gICAgICAgICBUaGUgbWFzayBvZiB0aGVzZSBzdGF0dXMgZmxhZ3MgY29tYmluYXRpb24uCisqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBUU0lfR2V0U3RhdHVzRmxhZ3MoVFNJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5HRU5DUyAmIChrVFNJX0VuZE9mU2NhbkZsYWcgfCBrVFNJX091dE9mUmFuZ2VGbGFnKSk7Cit9CisKKy8qIQorICogQGJyaWVmIENsZWFycyB0aGUgaW50ZXJydXB0IGZsYWcuCisgKgorICogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIFRTSSBpbnRlcnJ1cHQgZmxhZywKKyAqIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBmbGFncyBjYW4ndCBiZSBjbGVhcmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorICogQHBhcmFtIG1hc2sgVGhlIHN0YXR1cyBmbGFncyB0byBjbGVhci4KKyAqLwordm9pZCBUU0lfQ2xlYXJTdGF0dXNGbGFncyhUU0lfVHlwZSAqYmFzZSwgdWludDMyX3QgbWFzayk7CisKKy8qIQorKiBAYnJpZWYgR2V0cyB0aGUgVFNJIHNjYW4gdHJpZ2dlciBtb2RlLgorKgorKiBAcGFyYW0gIGJhc2UgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHJldHVybiAgICAgICBTY2FuIHRyaWdnZXIgbW9kZS4KKyovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IFRTSV9HZXRTY2FuVHJpZ2dlck1vZGUoVFNJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuIChiYXNlLT5HRU5DUyAmIFRTSV9HRU5DU19TVE1fTUFTSyk7Cit9CisKKy8qIQorKiBAYnJpZWYgR2V0cyB0aGUgc2NhbiBpbiBwcm9ncmVzcyBmbGFnLgorKgorKiBAcGFyYW0gICAgYmFzZSBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEByZXR1cm4gICBUcnVlICAtIHNjYW4gaXMgaW4gcHJvZ3Jlc3MuCisqICAgICAgICAgICBGYWxzZSAtIHNjYW4gaXMgbm90IGluIHByb2dyZXNzLgorKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBUU0lfSXNTY2FuSW5Qcm9ncmVzcyhUU0lfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPkdFTkNTICYgVFNJX0dFTkNTX1NDTklQX01BU0spOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIHByZXNjYWxlci4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBwcmVzY2FsZXIgUHJlc2NhbGVyIHZhbHVlLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldEVsZWN0cm9kZU9TQ1ByZXNjYWxlcihUU0lfVHlwZSAqYmFzZSwgdHNpX2VsZWN0cm9kZV9vc2NfcHJlc2NhbGVyX3QgcHJlc2NhbGVyKQoreworICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfihUU0lfR0VOQ1NfUFNfTUFTSyB8IEFMTF9GTEFHU19NQVNLKSkgfCAoVFNJX0dFTkNTX1BTKHByZXNjYWxlcikpOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIG51bWJlciBvZiBzY2FucyAoTlNDTikuCisqCisqIEBwYXJhbSAgICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIG51bWJlciAgTnVtYmVyIG9mIHNjYW5zLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldE51bWJlck9mU2NhbnMoVFNJX1R5cGUgKmJhc2UsIHRzaV9uX2NvbnNlY3V0aXZlX3NjYW5zX3QgbnVtYmVyKQoreworICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfihUU0lfR0VOQ1NfTlNDTl9NQVNLIHwgQUxMX0ZMQUdTX01BU0spKSB8IChUU0lfR0VOQ1NfTlNDTihudW1iZXIpKTsKK30KKworLyohCisqIEBicmllZiBFbmFibGVzL2Rpc2FibGVzIHRoZSBUU0kgbW9kdWxlLgorKgorKiBAcGFyYW0gICBiYXNlICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICBlbmFibGUgQ2hvb3NlIHdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgbW9kdWxlOworKiAgICAgICAgICAgICAgICAgLSB0cnVlICAgRW5hYmxlIFRTSSBtb2R1bGU7CisqICAgICAgICAgICAgICAgICAtIGZhbHNlICBEaXNhYmxlIFRTSSBtb2R1bGU7CisqIEByZXR1cm4gIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9FbmFibGVNb2R1bGUoVFNJX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH5BTExfRkxBR1NfTUFTSykgfCBUU0lfR0VOQ1NfVFNJRU5fTUFTSzsgICAgLyogRW5hYmxlIG1vZHVsZSAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH5BTExfRkxBR1NfTUFTSykgJiAoflRTSV9HRU5DU19UU0lFTl9NQVNLKTsgLyogRGlzYWJsZSBtb2R1bGUgKi8KKyAgICB9Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgVFNJIGxvdyBwb3dlciBTVE9QIG1vZGUgYXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyogICAgICAgIFRoaXMgZW5hYmxlcyB0aGUgVFNJIG1vZHVsZSBmdW5jdGlvbiBpbiBsb3cgcG93ZXIgbW9kZXMuCisqCisqIEBwYXJhbSAgICBiYXNlICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGVuYWJsZSAgQ2hvb3NlIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNUT1AgbW9kZS4KKyogICAgICAgICAgICAgICAgICAgLSB0cnVlICAgRW5hYmxlIG1vZHVsZSBpbiBTVE9QIG1vZGU7CisqICAgICAgICAgICAgICAgICAgIC0gZmFsc2UgIERpc2FibGUgbW9kdWxlIGluIFNUT1AgbW9kZTsKKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9FbmFibGVMb3dQb3dlcihUU0lfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfkFMTF9GTEFHU19NQVNLKSB8IFRTSV9HRU5DU19TVFBFX01BU0s7ICAgIC8qIE1vZHVsZSBlbmFibGVkIGluIGxvdyBwb3dlciBzdG9wIG1vZGVzICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfkFMTF9GTEFHU19NQVNLKSAmICh+VFNJX0dFTkNTX1NUUEVfTUFTSyk7IC8qIE1vZHVsZSBkaXNhYmxlZCBpbiBsb3cgcG93ZXIgc3RvcCBtb2RlcyAqLworICAgIH0KK30KKworLyohCisqIEBicmllZiBFbmFibGVzL2Rpc2FibGVzIHRoZSBoYXJkd2FyZSB0cmlnZ2VyIHNjYW4uCisqCisqIEBwYXJhbSAgICBiYXNlIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGVuYWJsZSBDaG9vc2UgdG8gZW5hYmxlIGhhcmR3YXJlIHRyaWdnZXIgb3Igc29mdHdhcmUgdHJpZ2dlciBzY2FuLgorKiAgICAgICAgICAgICAgICAgIC0gdHJ1ZSAgICBFbmFibGUgaGFyZHdhcmUgdHJpZ2dlciBzY2FuOworKiAgICAgICAgICAgICAgICAgIC0gZmFsc2UgICBFbmFibGUgc29mdHdhcmUgdHJpZ2dlciBzY2FuOworKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX0VuYWJsZUhhcmR3YXJlVHJpZ2dlclNjYW4oVFNJX1R5cGUgKmJhc2UsIGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH5BTExfRkxBR1NfTUFTSykgfCBUU0lfR0VOQ1NfU1RNX01BU0s7ICAgIC8qIEVuYWJsZSBoYXJkd2FyZSB0cmlnZ2VyIHNjYW4gKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+QUxMX0ZMQUdTX01BU0spICYgKH5UU0lfR0VOQ1NfU1RNX01BU0spOyAvKiBFbmFibGUgc29mdHdhcmUgdHJpZ2dlciBzY2FuICovCisgICAgfQorfQorCisvKiEKKyogQGJyaWVmIFN0YXJ0cyBhIHNvZnR3YXJlIHRyaWdnZXIgbWVhc3VyZW1lbnQgKHRyaWdnZXJzIGEgbmV3IG1lYXN1cmVtZW50KS4KKyoKKyogQHBhcmFtICAgIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1N0YXJ0U29mdHdhcmVUcmlnZ2VyKFRTSV9UeXBlICpiYXNlKQoreworICAgIGJhc2UtPkRBVEEgfD0gVFNJX0RBVEFfU1dUU19NQVNLOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIHRoZSBtZWFzdXJlZCBjaGFubmVsIG51bWJlci4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgY2hhbm5lbCBDaGFubmVsIG51bWJlciAwIC4uLiAxNS4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRNZWFzdXJlZENoYW5uZWxOdW1iZXIoVFNJX1R5cGUgKmJhc2UsIHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgICBhc3NlcnQoY2hhbm5lbCA8IEZTTF9GRUFUVVJFX1RTSV9DSEFOTkVMX0NPVU5UKTsKKworICAgIGJhc2UtPkRBVEEgPSAoKGJhc2UtPkRBVEEpICYgflRTSV9EQVRBX1RTSUNIX01BU0spIHwgKFRTSV9EQVRBX1RTSUNIKGNoYW5uZWwpKTsKK30KKworLyohCisqIEBicmllZiBHZXRzIHRoZSBjdXJyZW50IG1lYXN1cmVkIGNoYW5uZWwgbnVtYmVyLgorKgorKiBAcGFyYW0gICAgYmFzZSAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEByZXR1cm4gICB1aW50OF90ICAgIENoYW5uZWwgbnVtYmVyIDAgLi4uIDE1LgorKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBUU0lfR2V0TWVhc3VyZWRDaGFubmVsTnVtYmVyKFRTSV9UeXBlICpiYXNlKQoreworICAgIHJldHVybiAodWludDhfdCkoKGJhc2UtPkRBVEEgJiBUU0lfREFUQV9UU0lDSF9NQVNLKSA+PiBUU0lfREFUQV9UU0lDSF9TSElGVCk7Cit9CisKKy8qIQorKiBAYnJpZWYgRW5hYmxlcy9kaXNhYmxlcyB0aGUgRE1BIHRyYW5zZmVyLgorKgorKiBAcGFyYW0gICBiYXNlICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICBlbmFibGUgQ2hvb3NlIHRvIGVuYWJsZSBETUEgdHJhbnNmZXIgb3Igbm90LgorKiAgICAgICAgICAgICAgICAgLSB0cnVlICAgIEVuYWJsZSBETUEgdHJhbnNmZXI7CisqICAgICAgICAgICAgICAgICAtIGZhbHNlICAgRGlzYWJsZSBETUEgdHJhbnNmZXI7CisqIEByZXR1cm4gIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9FbmFibGVEbWFUcmFuc2ZlcihUU0lfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkRBVEEgfD0gVFNJX0RBVEFfRE1BRU5fTUFTSzsgLyogRW5hYmxlIERNQSB0cmFuc2ZlciAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5EQVRBICY9IH5UU0lfREFUQV9ETUFFTl9NQVNLOyAvKiBEaXNhYmxlIERNQSB0cmFuc2ZlciAqLworICAgIH0KK30KKworI2lmIGRlZmluZWQoRlNMX0ZFQVRVUkVfVFNJX0hBU19FTkRfT0ZfU0NBTl9ETUFfRU5BQkxFKSAmJiAoRlNMX0ZFQVRVUkVfVFNJX0hBU19FTkRfT0ZfU0NBTl9ETUFfRU5BQkxFID09IDEpCisvKiEKKyogQGJyaWVmIERlY2lkZXMgd2hldGhlciB0byBlbmFibGUgZW5kIG9mIHNjYW4gRE1BIHRyYW5zZmVyIHJlcXVlc3Qgb25seS4KKyoKKyogQHBhcmFtICAgIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgZW5hYmxlICBDaG9vc2Ugd2hldGhlciB0byBlbmFibGUgRW5kIG9mIFNjYW4gRE1BIHRyYW5zZmVyIHJlcXVlc3Qgb25seS4KKyogICAgICAgICAgICAgICAgICAgLSB0cnVlICBFbmFibGUgRW5kIG9mIFNjYW4gRE1BIHRyYW5zZmVyIHJlcXVlc3Qgb25seTsKKyogICAgICAgICAgICAgICAgICAgLSBmYWxzZSBCb3RoIEVuZC1vZi1TY2FuIGFuZCBPdXQtb2YtUmFuZ2UgY2FuIGdlbmVyYXRlIERNQSB0cmFuc2ZlciByZXF1ZXN0LgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX0VuYWJsZUVuZE9mU2NhbkRtYVRyYW5zZmVyT25seShUU0lfVHlwZSAqYmFzZSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICB7CisgICAgICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfkFMTF9GTEFHU19NQVNLKSB8IFRTSV9HRU5DU19FT1NETUVPX01BU0s7IC8qIEVuYWJsZSBFbmQgb2YgU2NhbiBETUEgdHJhbnNmZXIgcmVxdWVzdCBvbmx5OyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYXNlLT5HRU5DUyA9CisgICAgICAgICAgICAoYmFzZS0+R0VOQ1MgJiB+QUxMX0ZMQUdTX01BU0spICYgKH5UU0lfR0VOQ1NfRU9TRE1FT19NQVNLKTsgLyogQm90aCBFbmQtb2YtU2NhbiBhbmQgT3V0LW9mLVJhbmdlIGNhbiBnZW5lcmF0ZSBETUEgdHJhbnNmZXIgcmVxdWVzdC4gKi8KKyAgICB9Cit9CisjZW5kaWYgLyogRW5kIG9mIChGU0xfRkVBVFVSRV9UU0lfSEFTX0VORF9PRl9TQ0FOX0RNQV9FTkFCTEUgPT0gMSkqLworCisvKiEKKyogQGJyaWVmIEdldHMgdGhlIGNvbnZlcnNpb24gY291bnRlciB2YWx1ZS4KKyoKKyogQHBhcmFtICAgIGJhc2UgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcmV0dXJuICAgQWNjdW11bGF0ZWQgc2NhbiBjb3VudGVyIHZhbHVlIHRpY2tlZCBieSB0aGUgcmVmZXJlbmNlIGNsb2NrLgorKi8KK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgVFNJX0dldENvdW50ZXIoVFNJX1R5cGUgKmJhc2UpCit7CisgICAgcmV0dXJuICh1aW50MTZfdCkoYmFzZS0+REFUQSAmIFRTSV9EQVRBX1RTSUNOVF9NQVNLKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBUU0kgd2FrZS11cCBjaGFubmVsIGxvdyB0aHJlc2hvbGQuCisqCisqIEBwYXJhbSAgICBiYXNlICAgICAgICAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBsb3dfdGhyZXNob2xkICBMb3cgY291bnRlciB0aHJlc2hvbGQuCisqIEByZXR1cm4gICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfU2V0TG93VGhyZXNob2xkKFRTSV9UeXBlICpiYXNlLCB1aW50MTZfdCBsb3dfdGhyZXNob2xkKQoreworICAgIGFzc2VydChsb3dfdGhyZXNob2xkIDwgMHhGRkZGVSk7CisKKyAgICBiYXNlLT5UU0hEID0gKChiYXNlLT5UU0hEKSAmIH5UU0lfVFNIRF9USFJFU0xfTUFTSykgfCAoVFNJX1RTSERfVEhSRVNMKGxvd190aHJlc2hvbGQpKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBUU0kgd2FrZS11cCBjaGFubmVsIGhpZ2ggdGhyZXNob2xkLgorKgorKiBAcGFyYW0gICAgYmFzZSAgICAgICAgICAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIGhpZ2hfdGhyZXNob2xkICBIaWdoIGNvdW50ZXIgdGhyZXNob2xkLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldEhpZ2hUaHJlc2hvbGQoVFNJX1R5cGUgKmJhc2UsIHVpbnQxNl90IGhpZ2hfdGhyZXNob2xkKQoreworICAgIGFzc2VydChoaWdoX3RocmVzaG9sZCA8IDB4RkZGRlUpOworCisgICAgYmFzZS0+VFNIRCA9ICgoYmFzZS0+VFNIRCkgJiB+VFNJX1RTSERfVEhSRVNIX01BU0spIHwgKFRTSV9UU0hEX1RIUkVTSChoaWdoX3RocmVzaG9sZCkpOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIGFuYWxvZyBtb2RlIG9mIHRoZSBUU0kgbW9kdWxlLgorKgorKiBAcGFyYW0gICAgYmFzZSAgIFRTSSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcy4KKyogQHBhcmFtICAgIG1vZGUgICBNb2RlIHZhbHVlLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldEFuYWxvZ01vZGUoVFNJX1R5cGUgKmJhc2UsIHRzaV9hbmFsb2dfbW9kZV90IG1vZGUpCit7CisgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+KFRTSV9HRU5DU19NT0RFX01BU0sgfCBBTExfRkxBR1NfTUFTSykpIHwgKFRTSV9HRU5DU19NT0RFKG1vZGUpKTsKK30KKworLyohCisqIEBicmllZiBHZXRzIHRoZSBub2lzZSBtb2RlIHJlc3VsdCBvZiB0aGUgVFNJIG1vZHVsZS4KKyoKKyogQHBhcmFtICAgYmFzZSAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcmV0dXJuICAgICAgICBWYWx1ZSBvZiB0aGUgR0VOQ1NbTU9ERV0gYml0LWZpZWxkcy4KKyovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgVFNJX0dldE5vaXNlTW9kZVJlc3VsdChUU0lfVHlwZSAqYmFzZSkKK3sKKyAgICByZXR1cm4gKGJhc2UtPkdFTkNTICYgVFNJX0dFTkNTX01PREVfTUFTSykgPj4gVFNJX0dFTkNTX01PREVfU0hJRlQ7Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgcmVmZXJlbmNlIG9zY2lsbGF0b3IgY2hhcmdlIGN1cnJlbnQuCisqCisqIEBwYXJhbSAgIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICBjdXJyZW50IFRoZSByZWZlcmVuY2Ugb3NjaWxsYXRvciBjaGFyZ2UgY3VycmVudC4KKyogQHJldHVybiAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldFJlZmVyZW5jZUNoYXJnZUN1cnJlbnQoVFNJX1R5cGUgKmJhc2UsIHRzaV9yZWZlcmVuY2Vfb3NjX2NoYXJnZV9jdXJyZW50X3QgY3VycmVudCkKK3sKKyAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIH4oVFNJX0dFTkNTX1JFRkNIUkdfTUFTSyB8IEFMTF9GTEFHU19NQVNLKSkgfCAoVFNJX0dFTkNTX1JFRkNIUkcoY3VycmVudCkpOworfQorCisvKiEKKyogQGJyaWVmIFNldHMgdGhlIGV4dGVybmFsIGVsZWN0cm9kZSBjaGFyZ2UgY3VycmVudC4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgY3VycmVudCBFeHRlcm5hbCBlbGVjdHJvZGUgY2hhcmdlIGN1cnJlbnQuCisqIEByZXR1cm4gICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfU2V0RWxlY3Ryb2RlQ2hhcmdlQ3VycmVudChUU0lfVHlwZSAqYmFzZSwgdHNpX2V4dGVybmFsX29zY19jaGFyZ2VfY3VycmVudF90IGN1cnJlbnQpCit7CisgICAgYmFzZS0+R0VOQ1MgPSAoYmFzZS0+R0VOQ1MgJiB+KFRTSV9HRU5DU19FWFRDSFJHX01BU0sgfCBBTExfRkxBR1NfTUFTSykpIHwgKFRTSV9HRU5DU19FWFRDSFJHKGN1cnJlbnQpKTsKK30KKworLyohCisqIEBicmllZiBTZXRzIHRoZSBvc2NpbGxhdG9yJ3Mgdm9sdGFnZSByYWlscy4KKyoKKyogQHBhcmFtICAgIGJhc2UgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgZHZvbHQgICBUaGUgdm9sdGFnZSByYWlscy4KKyogQHJldHVybiAgIG5vbmUuCisqLworc3RhdGljIGlubGluZSB2b2lkIFRTSV9TZXRPc2NWb2x0YWdlUmFpbHMoVFNJX1R5cGUgKmJhc2UsIHRzaV9vc2Nfdm9sdGFnZV9yYWlsc190IGR2b2x0KQoreworICAgIGJhc2UtPkdFTkNTID0gKGJhc2UtPkdFTkNTICYgfihUU0lfR0VOQ1NfRFZPTFRfTUFTSyB8IEFMTF9GTEFHU19NQVNLKSkgfCAoVFNJX0dFTkNTX0RWT0xUKGR2b2x0KSk7Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgZWxlY3Ryb2RlIHNlcmllcyByZXNpc3RhbmNlIHZhbHVlIGluIEVYVENIUkdbMF0gYml0LgorKgorKiBAcGFyYW0gICAgYmFzZSAgICAgVFNJIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzLgorKiBAcGFyYW0gICAgcmVzaXN0b3IgU2VyaWVzIHJlc2lzdGFuY2UuCisqIEByZXR1cm4gICBub25lLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBUU0lfU2V0RWxlY3Ryb2RlU2VyaWVzUmVzaXN0b3IoVFNJX1R5cGUgKmJhc2UsIHRzaV9zZXJpZXNfcmVzaXN0b3JfdCByZXNpc3RvcikKK3sKKyAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIFRTSV9WNF9FWFRDSFJHX1JFU0lTVE9SX0JJVF9DTEVBUikgfCBUU0lfR0VOQ1NfRVhUQ0hSRyhyZXNpc3Rvcik7Cit9CisKKy8qIQorKiBAYnJpZWYgU2V0cyB0aGUgZWxlY3Ryb2RlIGZpbHRlciBiaXRzIHZhbHVlIGluIEVYVENIUkdbMjoxXSBiaXRzLgorKgorKiBAcGFyYW0gICAgYmFzZSAgICBUU0kgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MuCisqIEBwYXJhbSAgICBmaWx0ZXIgIFNlcmllcyByZXNpc3RhbmNlLgorKiBAcmV0dXJuICAgbm9uZS4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgVFNJX1NldEZpbHRlckJpdHMoVFNJX1R5cGUgKmJhc2UsIHRzaV9maWx0ZXJfYml0c190IGZpbHRlcikKK3sKKyAgICBiYXNlLT5HRU5DUyA9IChiYXNlLT5HRU5DUyAmIFRTSV9WNF9FWFRDSFJHX0ZJTFRFUl9CSVRTX0NMRUFSKSB8IChmaWx0ZXIgPDwgVFNJX1Y0X0VYVENIUkdfRklMVEVSX0JJVFNfU0hJRlQpOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKiEgQH0qLworCisjZW5kaWYgLyogX0ZTTF9UU0lfVjRfSF8gKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L2ZzbF9kZXZpY2VfcmVnaXN0ZXJzLmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9mc2xfZGV2aWNlX3JlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGUxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9mc2xfZGV2aWNlX3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNC0yMDE2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBvIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRlNMX0RFVklDRV9SRUdJU1RFUlNfSF9fCisjZGVmaW5lIF9fRlNMX0RFVklDRV9SRUdJU1RFUlNfSF9fCisKKy8qCisgKiBJbmNsdWRlIHRoZSBjcHUgc3BlY2lmaWMgcmVnaXN0ZXIgaGVhZGVyIGZpbGVzLgorICoKKyAqIFRoZSBDUFUgbWFjcm8gc2hvdWxkIGJlIGRlY2xhcmVkIGluIHRoZSBwcm9qZWN0IG9yIG1ha2VmaWxlLgorICovCisjaWYgKGRlZmluZWQoQ1BVX01LVzQxWjI1NlZIVDQpIHx8IGRlZmluZWQoQ1BVX01LVzQxWjUxMkNBVDQpIHx8IGRlZmluZWQoQ1BVX01LVzQxWjUxMlZIVDQpKQorCisjZGVmaW5lIEtXNDFaNF9TRVJJRVMKKworLyogQ01TSVMtc3R5bGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJNS1c0MVo0LmgiCisvKiBDUFUgc3BlY2lmaWMgZmVhdHVyZSBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgIk1LVzQxWjRfZmVhdHVyZXMuaCIKKworI2Vsc2UKKyAgICAjZXJyb3IgIk5vIHZhbGlkIENQVSBkZWZpbmVkISIKKyNlbmRpZgorCisjZW5kaWYgLyogX19GU0xfREVWSUNFX1JFR0lTVEVSU19IX18gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVPRgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L3N0YXJ0dXBfTUtXNDFaNC5TIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3RhcnR1cF9NS1c0MVo0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyYmEwZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L3N0YXJ0dXBfTUtXNDFaNC5TCkBAIC0wLDAgKzEsMzY1IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEBmaWxlOiAgICBzdGFydHVwX01LVzQxWjQucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBAcHVycG9zZTogQ01TSVMgQ29ydGV4LU0wUCBDb3JlIERldmljZSBTdGFydHVwIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgIE1LVzQxWjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEB2ZXJzaW9uOiAxLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBAZGF0ZTogICAgMjAxNS05LTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQGJ1aWxkOiAgIGIxNzAxMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBDb3B5cmlnaHQgKGMpIDE5OTcgLSAyMDE2LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQ29weXJpZ2h0IDIwMTYgLSAyMDE3IE5YUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sICAgICAgICovCisvKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QgICAgICovCisvKiAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzICAgICAgICovCisvKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciAgICAgICAgICAqLworLyogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBvIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzICAgICAgICAgICAgKi8KKy8qICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCAgICAgICAgKi8KKy8qIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEICAgICAgICAgICovCisvKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFICAgICAgICAgICAgICAgICAqLworLyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgICAgICAgKi8KKy8qIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAgICAgICovCisvKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7ICAgICAgICAgICAqLworLyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OICAgICAgICAgKi8KKy8qIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAgICAgICAgICAgICAgICovCisvKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAgICAgICAgICAqLworLyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFZlcnNpb246IEdDQyBmb3IgQVJNIEVtYmVkZGVkIFByb2Nlc3NvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAuc3ludGF4IHVuaWZpZWQKKyAgICAuYXJjaCBhcm12Ni1tCisKKyAgICAuc2VjdGlvbiAuaXNyX3ZlY3RvciwgImEiCisgICAgLmFsaWduIDIKKyAgICAuZ2xvYmwgX19pc3JfdmVjdG9yCitfX2lzcl92ZWN0b3I6CisgICAgLmxvbmcgICBfX1N0YWNrVG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb3Agb2YgU3RhY2sgKi8KKyAgICAubG9uZyAgIFJlc2V0X0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IEhhbmRsZXIgKi8KKyAgICAubG9uZyAgIE5NSV9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5NSSBIYW5kbGVyKi8KKyAgICAubG9uZyAgIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcmQgRmF1bHQgSGFuZGxlciovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICBTVkNfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTVkNhbGwgSGFuZGxlciovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCovCisgICAgLmxvbmcgICBQZW5kU1ZfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZW5kU1YgSGFuZGxlciovCisgICAgLmxvbmcgICBTeXNUaWNrX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXNUaWNrIEhhbmRsZXIqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBJbnRlcnJ1cHRzKi8KKyAgICAubG9uZyAgIERNQTBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERNQSBjaGFubmVsIDAgdHJhbnNmZXIgY29tcGxldGUqLworICAgIC5sb25nICAgRE1BMV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE1BIGNoYW5uZWwgMSB0cmFuc2ZlciBjb21wbGV0ZSovCisgICAgLmxvbmcgICBETUEyX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBETUEgY2hhbm5lbCAyIHRyYW5zZmVyIGNvbXBsZXRlKi8KKyAgICAubG9uZyAgIERNQTNfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERNQSBjaGFubmVsIDMgdHJhbnNmZXIgY29tcGxldGUqLworICAgIC5sb25nICAgUmVzZXJ2ZWQyMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIEZURkFfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgY29tcGxldGUgYW5kIHJlYWQgY29sbGlzaW9uKi8KKyAgICAubG9uZyAgIExWRF9MVldfRENEQ19JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvdy12b2x0YWdlIGRldGVjdCwgbG93LXZvbHRhZ2Ugd2FybmluZywgRENEQyovCisgICAgLmxvbmcgICBMTFdVX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb3cgbGVha2FnZSB3YWtldXAgVW5pdCovCisgICAgLmxvbmcgICBJMkMwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJMkMwIGludGVycnVwdCovCisgICAgLmxvbmcgICBJMkMxX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJMkMxIGludGVycnVwdCovCisgICAgLmxvbmcgICBTUEkwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTUEkwIHNpbmdsZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciBhbGwgc291cmNlcyovCisgICAgLmxvbmcgICBUU0kwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUU0kwIHNpbmdsZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciBhbGwgc291cmNlcyovCisgICAgLmxvbmcgICBMUFVBUlQwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMUFVBUlQwIHN0YXR1cyBhbmQgZXJyb3IqLworICAgIC5sb25nICAgVFJORzBfSVJRSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFJORzAgaW50ZXJydXB0Ki8KKyAgICAubG9uZyAgIENNVF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNVCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgQURDMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQURDMCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgQ01QMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ01QMCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgVFBNMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFBNMCBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMqLworICAgIC5sb25nICAgVFBNMV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFBNMSBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMqLworICAgIC5sb25nICAgVFBNMl9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFBNMiBzaW5nbGUgaW50ZXJydXB0IHZlY3RvciBmb3IgYWxsIHNvdXJjZXMqLworICAgIC5sb25nICAgUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUlRDIGFsYXJtKi8KKyAgICAubG9uZyAgIFJUQ19TZWNvbmRzX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJUQyBzZWNvbmRzKi8KKyAgICAubG9uZyAgIFBJVF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJVCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgTFRDMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFRDMCBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgUmFkaW9fMF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlRMRSwgWklHQkVFLCBBTlQsIEdFTkZTSyBpbnRlcnJ1cHQgMCovCisgICAgLmxvbmcgICBEQUMwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEQUMwIGludGVycnVwdCovCisgICAgLmxvbmcgICBSYWRpb18xX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCVExFLCBaSUdCRUUsIEFOVCwgR0VORlNLIGludGVycnVwdCAxKi8KKyAgICAubG9uZyAgIE1DR19JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1DRyBpbnRlcnJ1cHQqLworICAgIC5sb25nICAgTFBUTVIwX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFBUTVIwIGludGVycnVwdCovCisgICAgLmxvbmcgICBTUEkxX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTUEkxIHNpbmdsZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciBhbGwgc291cmNlcyovCisgICAgLmxvbmcgICBQT1JUQV9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQT1JUQSBQaW4gZGV0ZWN0Ki8KKyAgICAubG9uZyAgIFBPUlRCX1BPUlRDX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBPUlRCIGFuZCBQT1JUQyBQaW4gZGV0ZWN0Ki8KKworICAgIC5zaXplICAgIF9faXNyX3ZlY3RvciwgLiAtIF9faXNyX3ZlY3RvcgorCisvKiBGbGFzaCBDb25maWd1cmF0aW9uICovCisgICAgLnNlY3Rpb24gLkZsYXNoQ29uZmlnLCAiYSIKKyAgICAubG9uZyAweEZGRkZGRkZGCisgICAgLmxvbmcgMHhGRkZGRkZGRgorICAgIC5sb25nIDB4RkZGRkZGRkYKKyAgICAubG9uZyAweEZGRkZGRkZFCisKKyAgICAudGV4dAorICAgIC50aHVtYgorCisvKiBSZXNldCBIYW5kbGVyICovCisKKyAgICAudGh1bWJfZnVuYworICAgIC5hbGlnbiAyCisgICAgLmdsb2JsICAgUmVzZXRfSGFuZGxlcgorICAgIC53ZWFrICAgIFJlc2V0X0hhbmRsZXIKKyAgICAudHlwZSAgICBSZXNldF9IYW5kbGVyLCAlZnVuY3Rpb24KK1Jlc2V0X0hhbmRsZXI6CisgICAgY3BzaWQgICBpICAgICAgICAgICAgICAgLyogTWFzayBpbnRlcnJ1cHRzICovCisgICAgLmVxdSAgICBWVE9SLCAweEUwMDBFRDA4CisgICAgbGRyICAgICByMCwgPVZUT1IKKyAgICBsZHIgICAgIHIxLCA9X19pc3JfdmVjdG9yCisgICAgc3RyICAgICByMSwgW3IwXQorICAgIGxkciAgICAgcjIsIFtyMV0KKyAgICBtc3IgICAgIG1zcCwgcjIKKyNpZm5kZWYgX19OT19TWVNURU1fSU5JVAorICAgIGxkciAgIHIwLD1TeXN0ZW1Jbml0CisgICAgYmx4ICAgcjAKKyNlbmRpZgorLyogICAgIExvb3AgdG8gY29weSBkYXRhIGZyb20gcmVhZCBvbmx5IG1lbW9yeSB0byBSQU0uIFRoZSByYW5nZXMKKyAqICAgICAgb2YgY29weSBmcm9tL3RvIGFyZSBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHN5bWJvbHMgZXZhbHVhdGVkIGluCisgKiAgICAgIGxpbmtlciBzY3JpcHQuCisgKiAgICAgIF9fZXRleHQ6IEVuZCBvZiBjb2RlIHNlY3Rpb24sIGkuZS4sIGJlZ2luIG9mIGRhdGEgc2VjdGlvbnMgdG8gY29weSBmcm9tLgorICogICAgICBfX2RhdGFfc3RhcnRfXy9fX2RhdGFfZW5kX186IFJBTSBhZGRyZXNzIHJhbmdlIHRoYXQgZGF0YSBzaG91bGQgYmUKKyAqICAgICAgY29waWVkIHRvLiBCb3RoIG11c3QgYmUgYWxpZ25lZCB0byA0IGJ5dGVzIGJvdW5kYXJ5LiAgKi8KKworICAgIGxkciAgICByMSwgPV9fZXRleHQKKyAgICBsZHIgICAgcjIsID1fX2RhdGFfc3RhcnRfXworICAgIGxkciAgICByMywgPV9fZGF0YV9lbmRfXworCisgICAgc3VicyAgICByMywgcjIKKyAgICBibGUgICAgIC5MQzAKKworLkxDMToKKyAgICBzdWJzICAgIHIzLCA0CisgICAgbGRyICAgIHIwLCBbcjEscjNdCisgICAgc3RyICAgIHIwLCBbcjIscjNdCisgICAgYmd0ICAgIC5MQzEKKy5MQzA6CisKKyNpZmRlZiBfX1NUQVJUVVBfQ0xFQVJfQlNTCisvKiAgICAgVGhpcyBwYXJ0IG9mIHdvcmsgdXN1YWxseSBpcyBkb25lIGluIEMgbGlicmFyeSBzdGFydHVwIGNvZGUuIE90aGVyd2lzZSwKKyAqICAgICBkZWZpbmUgdGhpcyBtYWNybyB0byBlbmFibGUgaXQgaW4gdGhpcyBzdGFydHVwLgorICoKKyAqICAgICBMb29wIHRvIHplcm8gb3V0IEJTUyBzZWN0aW9uLCB3aGljaCB1c2VzIGZvbGxvd2luZyBzeW1ib2xzCisgKiAgICAgaW4gbGlua2VyIHNjcmlwdDoKKyAqICAgICAgX19ic3Nfc3RhcnRfXzogc3RhcnQgb2YgQlNTIHNlY3Rpb24uIE11c3QgYWxpZ24gdG8gNAorICogICAgICBfX2Jzc19lbmRfXzogZW5kIG9mIEJTUyBzZWN0aW9uLiBNdXN0IGFsaWduIHRvIDQKKyAqLworICAgIGxkciByMSwgPV9fYnNzX3N0YXJ0X18KKyAgICBsZHIgcjIsID1fX2Jzc19lbmRfXworCisgICAgc3VicyAgICByMiwgcjEKKyAgICBibGUgLkxDMworCisgICAgbW92cyAgICByMCwgMAorLkxDMjoKKyAgICBzdHIgcjAsIFtyMSwgcjJdCisgICAgc3VicyAgICByMiwgNAorICAgIGJnZSAuTEMyCisuTEMzOgorI2VuZGlmCisgICAgY3BzaWUgICBpICAgICAgICAgICAgICAgLyogVW5tYXNrIGludGVycnVwdHMgKi8KKyNpZm5kZWYgX19TVEFSVAorI2RlZmluZSBfX1NUQVJUIF9zdGFydAorI2VuZGlmCisjaWZuZGVmIF9fQVRPTExJQ19fCisgICAgbGRyICAgcjAsPV9fU1RBUlQKKyAgICBibHggICByMAorI2Vsc2UKKyAgICBsZHIgICByMCw9X19saWJjX2luaXRfYXJyYXkKKyAgICBibHggICByMAorICAgIGxkciAgIHIwLD1tYWluCisgICAgYnggICAgcjAKKyNlbmRpZgorICAgIC5wb29sCisgICAgLnNpemUgUmVzZXRfSGFuZGxlciwgLiAtIFJlc2V0X0hhbmRsZXIKKworICAgIC5hbGlnbiAgMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgRGVmYXVsdElTUgorICAgIC50eXBlIERlZmF1bHRJU1IsICVmdW5jdGlvbgorRGVmYXVsdElTUjoKKyAgICBsZHIgcjAsID1EZWZhdWx0SVNSCisgICAgYnggcjAKKyAgICAuc2l6ZSBEZWZhdWx0SVNSLCAuIC0gRGVmYXVsdElTUgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIE5NSV9IYW5kbGVyCisgICAgLnR5cGUgTk1JX0hhbmRsZXIsICVmdW5jdGlvbgorTk1JX0hhbmRsZXI6CisgICAgbGRyICAgcjAsPU5NSV9IYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBOTUlfSGFuZGxlciwgLiAtIE5NSV9IYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgSGFyZEZhdWx0X0hhbmRsZXIKKyAgICAudHlwZSBIYXJkRmF1bHRfSGFuZGxlciwgJWZ1bmN0aW9uCitIYXJkRmF1bHRfSGFuZGxlcjoKKyAgICBsZHIgICByMCw9SGFyZEZhdWx0X0hhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIEhhcmRGYXVsdF9IYW5kbGVyLCAuIC0gSGFyZEZhdWx0X0hhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBTVkNfSGFuZGxlcgorICAgIC50eXBlIFNWQ19IYW5kbGVyLCAlZnVuY3Rpb24KK1NWQ19IYW5kbGVyOgorICAgIGxkciAgIHIwLD1TVkNfSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgU1ZDX0hhbmRsZXIsIC4gLSBTVkNfSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIFBlbmRTVl9IYW5kbGVyCisgICAgLnR5cGUgUGVuZFNWX0hhbmRsZXIsICVmdW5jdGlvbgorUGVuZFNWX0hhbmRsZXI6CisgICAgbGRyICAgcjAsPVBlbmRTVl9IYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBQZW5kU1ZfSGFuZGxlciwgLiAtIFBlbmRTVl9IYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgU3lzVGlja19IYW5kbGVyCisgICAgLnR5cGUgU3lzVGlja19IYW5kbGVyLCAlZnVuY3Rpb24KK1N5c1RpY2tfSGFuZGxlcjoKKyAgICBsZHIgICByMCw9U3lzVGlja19IYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBTeXNUaWNrX0hhbmRsZXIsIC4gLSBTeXNUaWNrX0hhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBETUEwX0lSUUhhbmRsZXIKKyAgICAudHlwZSBETUEwX0lSUUhhbmRsZXIsICVmdW5jdGlvbgorRE1BMF9JUlFIYW5kbGVyOgorICAgIGxkciAgIHIwLD1ETUEwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIERNQTBfSVJRSGFuZGxlciwgLiAtIERNQTBfSVJRSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIERNQTFfSVJRSGFuZGxlcgorICAgIC50eXBlIERNQTFfSVJRSGFuZGxlciwgJWZ1bmN0aW9uCitETUExX0lSUUhhbmRsZXI6CisgICAgbGRyICAgcjAsPURNQTFfRHJpdmVySVJRSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgRE1BMV9JUlFIYW5kbGVyLCAuIC0gRE1BMV9JUlFIYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgRE1BMl9JUlFIYW5kbGVyCisgICAgLnR5cGUgRE1BMl9JUlFIYW5kbGVyLCAlZnVuY3Rpb24KK0RNQTJfSVJRSGFuZGxlcjoKKyAgICBsZHIgICByMCw9RE1BMl9Ecml2ZXJJUlFIYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBETUEyX0lSUUhhbmRsZXIsIC4gLSBETUEyX0lSUUhhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBETUEzX0lSUUhhbmRsZXIKKyAgICAudHlwZSBETUEzX0lSUUhhbmRsZXIsICVmdW5jdGlvbgorRE1BM19JUlFIYW5kbGVyOgorICAgIGxkciAgIHIwLD1ETUEzX0RyaXZlcklSUUhhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIERNQTNfSVJRSGFuZGxlciwgLiAtIERNQTNfSVJRSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIEkyQzBfSVJRSGFuZGxlcgorICAgIC50eXBlIEkyQzBfSVJRSGFuZGxlciwgJWZ1bmN0aW9uCitJMkMwX0lSUUhhbmRsZXI6CisgICAgbGRyICAgcjAsPUkyQzBfRHJpdmVySVJRSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgSTJDMF9JUlFIYW5kbGVyLCAuIC0gSTJDMF9JUlFIYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgSTJDMV9JUlFIYW5kbGVyCisgICAgLnR5cGUgSTJDMV9JUlFIYW5kbGVyLCAlZnVuY3Rpb24KK0kyQzFfSVJRSGFuZGxlcjoKKyAgICBsZHIgICByMCw9STJDMV9Ecml2ZXJJUlFIYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBJMkMxX0lSUUhhbmRsZXIsIC4gLSBJMkMxX0lSUUhhbmRsZXIKKworICAgIC5hbGlnbiAxCisgICAgLnRodW1iX2Z1bmMKKyAgICAud2VhayBTUEkwX0lSUUhhbmRsZXIKKyAgICAudHlwZSBTUEkwX0lSUUhhbmRsZXIsICVmdW5jdGlvbgorU1BJMF9JUlFIYW5kbGVyOgorICAgIGxkciAgIHIwLD1TUEkwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBieCAgICByMAorICAgIC5zaXplIFNQSTBfSVJRSGFuZGxlciwgLiAtIFNQSTBfSVJRSGFuZGxlcgorCisgICAgLmFsaWduIDEKKyAgICAudGh1bWJfZnVuYworICAgIC53ZWFrIExQVUFSVDBfSVJRSGFuZGxlcgorICAgIC50eXBlIExQVUFSVDBfSVJRSGFuZGxlciwgJWZ1bmN0aW9uCitMUFVBUlQwX0lSUUhhbmRsZXI6CisgICAgbGRyICAgcjAsPUxQVUFSVDBfRHJpdmVySVJRSGFuZGxlcgorICAgIGJ4ICAgIHIwCisgICAgLnNpemUgTFBVQVJUMF9JUlFIYW5kbGVyLCAuIC0gTFBVQVJUMF9JUlFIYW5kbGVyCisKKyAgICAuYWxpZ24gMQorICAgIC50aHVtYl9mdW5jCisgICAgLndlYWsgU1BJMV9JUlFIYW5kbGVyCisgICAgLnR5cGUgU1BJMV9JUlFIYW5kbGVyLCAlZnVuY3Rpb24KK1NQSTFfSVJRSGFuZGxlcjoKKyAgICBsZHIgICByMCw9U1BJMV9Ecml2ZXJJUlFIYW5kbGVyCisgICAgYnggICAgcjAKKyAgICAuc2l6ZSBTUEkxX0lSUUhhbmRsZXIsIC4gLSBTUEkxX0lSUUhhbmRsZXIKKworCisvKiAgICBNYWNybyB0byBkZWZpbmUgZGVmYXVsdCBoYW5kbGVycy4gRGVmYXVsdCBoYW5kbGVyCisgKiAgICB3aWxsIGJlIHdlYWsgc3ltYm9sIGFuZCBqdXN0IGRlYWQgbG9vcHMuIFRoZXkgY2FuIGJlCisgKiAgICBvdmVyd3JpdHRlbiBieSBvdGhlciBoYW5kbGVycyAqLworICAgIC5tYWNybyBkZWZfaXJxX2hhbmRsZXIgIGhhbmRsZXJfbmFtZQorICAgIC53ZWFrIFxoYW5kbGVyX25hbWUKKyAgICAuc2V0ICBcaGFuZGxlcl9uYW1lLCBEZWZhdWx0SVNSCisgICAgLmVuZG0KKworLyogRXhjZXB0aW9uIEhhbmRsZXJzICovCisgICAgZGVmX2lycV9oYW5kbGVyICAgIERNQTBfRHJpdmVySVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBETUExX0RyaXZlcklSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgRE1BMl9Ecml2ZXJJUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIERNQTNfRHJpdmVySVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBSZXNlcnZlZDIwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgRlRGQV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIExWRF9MVldfRENEQ19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIExMV1VfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBJMkMwX0RyaXZlcklSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgSTJDMV9Ecml2ZXJJUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFNQSTBfRHJpdmVySVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBUU0kwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgTFBVQVJUMF9Ecml2ZXJJUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFRSTkcwX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgQ01UX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgQURDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIENNUDBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBUUE0wX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgVFBNMV9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFRQTTJfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBSVENfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBSVENfU2Vjb25kc19JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFBJVF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIExUQzBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBSYWRpb18wX0lSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgREFDMF9JUlFIYW5kbGVyCisgICAgZGVmX2lycV9oYW5kbGVyICAgIFJhZGlvXzFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBNQ0dfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBMUFRNUjBfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBTUEkxX0RyaXZlcklSUUhhbmRsZXIKKyAgICBkZWZfaXJxX2hhbmRsZXIgICAgUE9SVEFfSVJRSGFuZGxlcgorICAgIGRlZl9pcnFfaGFuZGxlciAgICBQT1JUQl9QT1JUQ19JUlFIYW5kbGVyCisKKyAgICAuZW5kCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zeXN0ZW1fTUtXNDFaNC5jIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTlkZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbnhwL01LVzQxWjQvc3lzdGVtX01LVzQxWjQuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyoqICAgICBQcm9jZXNzb3JzOiAgICAgICAgICBNS1c0MVoyNTZWSFQ0CisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUtXNDFaNTEyQ0FUNAorKiogICAgICAgICAgICAgICAgICAgICAgICAgIE1LVzQxWjUxMlZIVDQKKyoqCisqKiAgICAgQ29tcGlsZXJzOiAgICAgICAgICAgS2VpbCBBUk0gQy9DKysgQ29tcGlsZXIKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBHTlUgQyBDb21waWxlcgorKiogICAgICAgICAgICAgICAgICAgICAgICAgIElBUiBBTlNJIEMvQysrIENvbXBpbGVyIGZvciBBUk0KKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1VYcHJlc3NvIENvbXBpbGVyCisqKgorKiogICAgIFJlZmVyZW5jZSBtYW51YWw6ICAgIE1LVzQxWjUxMlJNIFJldi4gMC4xLCAwNC8yMDE2CisqKiAgICAgVmVyc2lvbjogICAgICAgICAgICAgcmV2LiAxLjAsIDIwMTUtMDktMjMKKyoqICAgICBCdWlsZDogICAgICAgICAgICAgICBiMTcwMjEzCisqKgorKiogICAgIEFic3RyYWN0OgorKiogICAgICAgICBQcm92aWRlcyBhIHN5c3RlbSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIGFuZCBhIGdsb2JhbCB2YXJpYWJsZSB0aGF0CisqKiAgICAgICAgIGNvbnRhaW5zIHRoZSBzeXN0ZW0gZnJlcXVlbmN5LiBJdCBjb25maWd1cmVzIHRoZSBkZXZpY2UgYW5kIGluaXRpYWxpemVzCisqKiAgICAgICAgIHRoZSBvc2NpbGxhdG9yIChQTEwpIHRoYXQgaXMgcGFydCBvZiB0aGUgbWljcm9jb250cm9sbGVyIGRldmljZS4KKyoqCisqKiAgICAgQ29weXJpZ2h0IDIwMTYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyoqICAgICBDb3B5cmlnaHQgMjAxNi0yMDE3IE5YUAorKiogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisqKiAgICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKioKKyoqICAgICBvIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisqKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKgorKiogICAgIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisqKiAgICAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKKyoqICAgICAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKgorKiogICAgIG8gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworKiogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworKiogICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqKgorKiogICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyoqICAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiogICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyoqICAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorKiogICAgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiogICAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyoqICAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyoqICAgICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiogICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqKiAgICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqKgorKiogICAgIGh0dHA6ICAgICAgICAgICAgICAgICB3d3cubnhwLmNvbQorKiogICAgIG1haWw6ICAgICAgICAgICAgICAgICBzdXBwb3J0QG54cC5jb20KKyoqCisqKiAgICAgUmV2aXNpb25zOgorKiogICAgIC0gcmV2LiAxLjAgKDIwMTUtMDktMjMpCisqKiAgICAgICAgIEluaXRpYWwgdmVyc2lvbi4KKyoqCisqKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisqLworCisvKiEKKyAqIEBmaWxlIE1LVzQxWjQKKyAqIEB2ZXJzaW9uIDEuMAorICogQGRhdGUgMjAxNS0wOS0yMworICogQGJyaWVmIERldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE1LVzQxWjQgKGltcGxlbWVudGF0aW9uIGZpbGUpCisgKgorICogUHJvdmlkZXMgYSBzeXN0ZW0gY29uZmlndXJhdGlvbiBmdW5jdGlvbiBhbmQgYSBnbG9iYWwgdmFyaWFibGUgdGhhdCBjb250YWlucworICogdGhlIHN5c3RlbSBmcmVxdWVuY3kuIEl0IGNvbmZpZ3VyZXMgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIG9zY2lsbGF0b3IKKyAqIChQTEwpIHRoYXQgaXMgcGFydCBvZiB0aGUgbWljcm9jb250cm9sbGVyIGRldmljZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiZnNsX2RldmljZV9yZWdpc3RlcnMuaCIKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENvcmUgY2xvY2sKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordWludDMyX3QgU3lzdGVtQ29yZUNsb2NrID0gREVGQVVMVF9TWVNURU1fQ0xPQ0s7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFN5c3RlbUluaXQoKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIFN5c3RlbUluaXQgKHZvaWQpIHsKKworI2lmIChESVNBQkxFX1dET0cpCisgIC8qIFNJTV9DT1BDOiBDT1BUPTAsQ09QQ0xLUz0wLENPUFc9MCAqLworICBTSU0tPkNPUEMgPSAodWludDMyX3QpMHgwMHU7CisjZW5kaWYgLyogKERJU0FCTEVfV0RPRykgKi8KKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSAodm9pZCkgeworCisgIHVpbnQzMl90IE1DR09VVENsb2NrOyAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZSB0byBzdG9yZSBvdXRwdXQgY2xvY2sgZnJlcXVlbmN5IG9mIHRoZSBNQ0cgbW9kdWxlICovCisgIHVpbnQxNl90IERpdmlkZXI7CisKKyAgaWYgKChNQ0ctPkMxICYgTUNHX0MxX0NMS1NfTUFTSykgPT0gMHgwMFUpIHsKKyAgICAvKiBGTEwgaXMgc2VsZWN0ZWQgKi8KKyAgICBpZiAoKE1DRy0+QzEgJiBNQ0dfQzFfSVJFRlNfTUFTSykgPT0gMHgwMFUpIHsKKyAgICAgIC8qIEV4dGVybmFsIHJlZmVyZW5jZSBjbG9jayBpcyBzZWxlY3RlZCAqLworICAgICAgaWYoKE1DRy0+QzcgJiBNQ0dfQzdfT1NDU0VMX01BU0spID09IDB4MDBVKSB7CisgICAgICAgIE1DR09VVENsb2NrID0gQ1BVX1hUQUxfQ0xLX0haOyAvKiBTeXN0ZW0gb3NjaWxsYXRvciBkcml2ZXMgTUNHIGNsb2NrICovCisgICAgICB9IGVsc2UgeworICAgICAgICBNQ0dPVVRDbG9jayA9IENQVV9YVEFMMzJrX0NMS19IWjsgLyogUlRDIDMyIGtIeiBvc2NpbGxhdG9yIGRyaXZlcyBNQ0cgY2xvY2sgKi8KKyAgICAgIH0KKyAgICAgIGlmICgoKE1DRy0+QzIgJiBNQ0dfQzJfUkFOR0VfTUFTSykgIT0gMHgwMFUpICYmICgoTUNHLT5DNyAmIE1DR19DN19PU0NTRUxfTUFTSykgIT0gMHgwMVUpKSB7CisgICAgICAgIHN3aXRjaCAoTUNHLT5DMSAmIE1DR19DMV9GUkRJVl9NQVNLKSB7CisgICAgICAgIGNhc2UgMHgzOFU6CisgICAgICAgICAgRGl2aWRlciA9IDE1MzZVOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MzBVOgorICAgICAgICAgIERpdmlkZXIgPSAxMjgwVTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBEaXZpZGVyID0gKHVpbnQxNl90KSgzMkxVIDw8ICgoTUNHLT5DMSAmIE1DR19DMV9GUkRJVl9NQVNLKSA+PiBNQ0dfQzFfRlJESVZfU0hJRlQpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsvKiAoKE1DRy0+QzIgJiBNQ0dfQzJfUkFOR0VfTUFTSykgIT0gMHgwMFUpICovCisgICAgICAgIERpdmlkZXIgPSAodWludDE2X3QpKDFMVSA8PCAoKE1DRy0+QzEgJiBNQ0dfQzFfRlJESVZfTUFTSykgPj4gTUNHX0MxX0ZSRElWX1NISUZUKSk7CisgICAgICB9CisgICAgICBNQ0dPVVRDbG9jayA9IChNQ0dPVVRDbG9jayAvIERpdmlkZXIpOyAvKiBDYWxjdWxhdGUgdGhlIGRpdmlkZWQgRkxMIHJlZmVyZW5jZSBjbG9jayAqLworICAgIH0gZWxzZSB7IC8qICghKChNQ0ctPkMxICYgTUNHX0MxX0lSRUZTX01BU0spID09IDB4MDBVKSkgKi8KKyAgICAgIE1DR09VVENsb2NrID0gQ1BVX0lOVF9TTE9XX0NMS19IWjsgLyogVGhlIHNsb3cgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHNlbGVjdGVkICovCisgICAgfSAvKiAoISgoTUNHLT5DMSAmIE1DR19DMV9JUkVGU19NQVNLKSA9PSAweDAwVSkpICovCisgICAgLyogU2VsZWN0IGNvcnJlY3QgbXVsdGlwbGllciB0byBjYWxjdWxhdGUgdGhlIE1DRyBvdXRwdXQgY2xvY2sgICovCisgICAgc3dpdGNoIChNQ0ctPkM0ICYgKE1DR19DNF9ETVgzMl9NQVNLIHwgTUNHX0M0X0RSU1RfRFJTX01BU0spKSB7CisgICAgICBjYXNlIDB4MDBVOgorICAgICAgICBNQ0dPVVRDbG9jayAqPSA2NDBVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHgyMFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDEyODBVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHg0MFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDE5MjBVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHg2MFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDI1NjBVOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHg4MFU6CisgICAgICAgIE1DR09VVENsb2NrICo9IDczMlU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAweEEwVToKKyAgICAgICAgTUNHT1VUQ2xvY2sgKj0gMTQ2NFU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAweEMwVToKKyAgICAgICAgTUNHT1VUQ2xvY2sgKj0gMjE5N1U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAweEUwVToKKyAgICAgICAgTUNHT1VUQ2xvY2sgKj0gMjkyOVU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgaWYgKChNQ0ctPkMxICYgTUNHX0MxX0NMS1NfTUFTSykgPT0gMHg0MFUpIHsKKyAgICAvKiBJbnRlcm5hbCByZWZlcmVuY2UgY2xvY2sgaXMgc2VsZWN0ZWQgKi8KKyAgICBpZiAoKE1DRy0+QzIgJiBNQ0dfQzJfSVJDU19NQVNLKSA9PSAweDAwVSkgeworICAgICAgTUNHT1VUQ2xvY2sgPSBDUFVfSU5UX1NMT1dfQ0xLX0haOyAvKiBTbG93IGludGVybmFsIHJlZmVyZW5jZSBjbG9jayBzZWxlY3RlZCAqLworICAgIH0gZWxzZSB7IC8qICghKChNQ0ctPkMyICYgTUNHX0MyX0lSQ1NfTUFTSykgPT0gMHgwMFUpKSAqLworICAgICAgRGl2aWRlciA9ICh1aW50MTZfdCkoMHgwMUxVIDw8ICgoTUNHLT5TQyAmIE1DR19TQ19GQ1JESVZfTUFTSykgPj4gTUNHX1NDX0ZDUkRJVl9TSElGVCkpOworICAgICAgTUNHT1VUQ2xvY2sgPSAodWludDMyX3QpIChDUFVfSU5UX0ZBU1RfQ0xLX0haIC8gRGl2aWRlcik7IC8qIEZhc3QgaW50ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIHNlbGVjdGVkICovCisgICAgfSAvKiAoISgoTUNHLT5DMiAmIE1DR19DMl9JUkNTX01BU0spID09IDB4MDBVKSkgKi8KKyAgfSBlbHNlIGlmICgoTUNHLT5DMSAmIE1DR19DMV9DTEtTX01BU0spID09IDB4ODBVKSB7CisgICAgLyogRXh0ZXJuYWwgcmVmZXJlbmNlIGNsb2NrIGlzIHNlbGVjdGVkICovCisgICAgaWYoKE1DRy0+QzcgJiBNQ0dfQzdfT1NDU0VMX01BU0spID09IDB4MDBVKSB7CisgICAgICBNQ0dPVVRDbG9jayA9IENQVV9YVEFMX0NMS19IWjsgICAvKiBTeXN0ZW0gb3NjaWxsYXRvciBkcml2ZXMgTUNHIGNsb2NrICovCisgICAgfSBlbHNlIHsKKyAgICAgIE1DR09VVENsb2NrID0gQ1BVX1hUQUwzMmtfQ0xLX0haOyAvKiBSVEMgMzIga0h6IG9zY2lsbGF0b3IgZHJpdmVzIE1DRyBjbG9jayAqLworICAgIH0KKyAgfSBlbHNlIHsgLyogKCEoKE1DRy0+QzEgJiBNQ0dfQzFfQ0xLU19NQVNLKSA9PSAweDgwVSkpICovCisgICAgLyogUmVzZXJ2ZWQgdmFsdWUgKi8KKyAgICByZXR1cm47CisgIH0gLyogKCEoKE1DRy0+QzEgJiBNQ0dfQzFfQ0xLU19NQVNLKSA9PSAweDgwVSkpICovCisgIFN5c3RlbUNvcmVDbG9jayA9IChNQ0dPVVRDbG9jayAvICgweDAxVSArICgoU0lNLT5DTEtESVYxICYgU0lNX0NMS0RJVjFfT1VURElWMV9NQVNLKSA+PiBTSU1fQ0xLRElWMV9PVVRESVYxX1NISUZUKSkpOworCit9CisKKy8vX19leHRlbnNpb25fXyB0eXBlZGVmIGludCBfX2d1YXJkIF9fYXR0cmlidXRlX18oKG1vZGUoX19ESV9fKSkpOworLy9pbnQgX19jeGFfZ3VhcmRfYWNxdWlyZShfX2d1YXJkICpnKSB7IHJldHVybiAhKihjaGFyICopKGcpOyB9CisvL3ZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkICpnKSB7ICooY2hhciAqKWcgPSAxOyB9CisvL3ZvaWQgX19jeGFfZ3VhcmRfYWJvcnQoX19ndWFyZCAqZykgeyAodm9pZClnOyB9Cit2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCh2b2lkKSB7IHdoaWxlICgxKTsgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L254cC9NS1c0MVo0L3N5c3RlbV9NS1c0MVo0LmggYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zeXN0ZW1fTUtXNDFaNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWIxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9ueHAvTUtXNDFaNC9zeXN0ZW1fTUtXNDFaNC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKiogICAgIFByb2Nlc3NvcnM6ICAgICAgICAgIE1LVzQxWjI1NlZIVDQKKyoqICAgICAgICAgICAgICAgICAgICAgICAgICBNS1c0MVo1MTJDQVQ0CisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUtXNDFaNTEyVkhUNAorKioKKyoqICAgICBDb21waWxlcnM6ICAgICAgICAgICBLZWlsIEFSTSBDL0MrKyBDb21waWxlcgorKiogICAgICAgICAgICAgICAgICAgICAgICAgIEdOVSBDIENvbXBpbGVyCisqKiAgICAgICAgICAgICAgICAgICAgICAgICAgSUFSIEFOU0kgQy9DKysgQ29tcGlsZXIgZm9yIEFSTQorKiogICAgICAgICAgICAgICAgICAgICAgICAgIE1DVVhwcmVzc28gQ29tcGlsZXIKKyoqCisqKiAgICAgUmVmZXJlbmNlIG1hbnVhbDogICAgTUtXNDFaNTEyUk0gUmV2LiAwLjEsIDA0LzIwMTYKKyoqICAgICBWZXJzaW9uOiAgICAgICAgICAgICByZXYuIDEuMCwgMjAxNS0wOS0yMworKiogICAgIEJ1aWxkOiAgICAgICAgICAgICAgIGIxNzAyMTMKKyoqCisqKiAgICAgQWJzdHJhY3Q6CisqKiAgICAgICAgIFByb3ZpZGVzIGEgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gYW5kIGEgZ2xvYmFsIHZhcmlhYmxlIHRoYXQKKyoqICAgICAgICAgY29udGFpbnMgdGhlIHN5c3RlbSBmcmVxdWVuY3kuIEl0IGNvbmZpZ3VyZXMgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZXMKKyoqICAgICAgICAgdGhlIG9zY2lsbGF0b3IgKFBMTCkgdGhhdCBpcyBwYXJ0IG9mIHRoZSBtaWNyb2NvbnRyb2xsZXIgZGV2aWNlLgorKioKKyoqICAgICBDb3B5cmlnaHQgMjAxNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorKiogICAgIENvcHlyaWdodCAyMDE2LTIwMTcgTlhQCisqKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyoqICAgICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqKgorKiogICAgIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyoqICAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoqCisqKiAgICAgbyBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyoqICAgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcgorKiogICAgICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoqCisqKiAgICAgbyBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisqKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisqKiAgICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoqCisqKiAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorKiogICAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqKiAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiogICAgIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisqKiAgICAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqKiAgICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiogICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiogICAgIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqKiAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyoqICAgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoqCisqKiAgICAgaHR0cDogICAgICAgICAgICAgICAgIHd3dy5ueHAuY29tCisqKiAgICAgbWFpbDogICAgICAgICAgICAgICAgIHN1cHBvcnRAbnhwLmNvbQorKioKKyoqICAgICBSZXZpc2lvbnM6CisqKiAgICAgLSByZXYuIDEuMCAoMjAxNS0wOS0yMykKKyoqICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uLgorKioKKyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyovCisKKy8qIQorICogQGZpbGUgTUtXNDFaNAorICogQHZlcnNpb24gMS4wCisgKiBAZGF0ZSAyMDE1LTA5LTIzCisgKiBAYnJpZWYgRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgTUtXNDFaNCAoaGVhZGVyIGZpbGUpCisgKgorICogUHJvdmlkZXMgYSBzeXN0ZW0gY29uZmlndXJhdGlvbiBmdW5jdGlvbiBhbmQgYSBnbG9iYWwgdmFyaWFibGUgdGhhdCBjb250YWlucworICogdGhlIHN5c3RlbSBmcmVxdWVuY3kuIEl0IGNvbmZpZ3VyZXMgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIG9zY2lsbGF0b3IKKyAqIChQTEwpIHRoYXQgaXMgcGFydCBvZiB0aGUgbWljcm9jb250cm9sbGVyIGRldmljZS4KKyAqLworCisjaWZuZGVmIF9TWVNURU1fTUtXNDFaNF9IXworI2RlZmluZSBfU1lTVEVNX01LVzQxWjRfSF8gICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3ltYm9sIHByZXZlbnRpbmcgcmVwZWF0ZWQgaW5jbHVzaW9uICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisKKyNpZm5kZWYgRElTQUJMRV9XRE9HCisgICNkZWZpbmUgRElTQUJMRV9XRE9HICAgICAgICAgICAgICAgICAxCisjZW5kaWYKKworLyogRGVmaW5lIGNsb2NrIHNvdXJjZSB2YWx1ZXMgKi8KKworI2RlZmluZSBDUFVfWFRBTF9DTEtfSFogICAgICAgICAgICAgICAgMzIwMDAwMDB1ICAgICAgICAgICAvKiBWYWx1ZSBvZiB0aGUgZXh0ZXJuYWwgY3J5c3RhbCBvciBvc2NpbGxhdG9yIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLworI2RlZmluZSBDUFVfWFRBTDMya19DTEtfSFogICAgICAgICAgICAgMzI3Njh1ICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiB0aGUgZXh0ZXJuYWwgMzJrIGNyeXN0YWwgb3Igb3NjaWxsYXRvciBjbG9jayBmcmVxdWVuY3kgaW4gSHogKi8KKyNkZWZpbmUgQ1BVX0lOVF9TTE9XX0NMS19IWiAgICAgICAgICAgIDMyNzY4dSAgICAgICAgICAgICAgLyogVmFsdWUgb2YgdGhlIHNsb3cgaW50ZXJuYWwgb3NjaWxsYXRvciBjbG9jayBmcmVxdWVuY3kgaW4gSHogICovCisjZGVmaW5lIENQVV9JTlRfRkFTVF9DTEtfSFogICAgICAgICAgICA0MDAwMDAwdSAgICAgICAgICAgIC8qIFZhbHVlIG9mIHRoZSBmYXN0IGludGVybmFsIG9zY2lsbGF0b3IgY2xvY2sgZnJlcXVlbmN5IGluIEh6ICAqLworCisvKiBSRiBvc2NpbGxhdG9yIHNldHRpbmcgKi8KKyNkZWZpbmUgU1lTVEVNX1JTSU1fQ09OVFJPTF9WQUxVRSAgICAgIDB4QzAwMTAwVSAgICAgICAgICAgLyogRW5hYmxlIFJGIG9zY2lsbGF0b3IgaW4gUnVuL1dhaXQgbW9kZSAqLworCisvKiBMb3cgcG93ZXIgbW9kZSBlbmFibGUgKi8KKworLyogU01DX1BNUFJPVDogPz0wLD89MCxBVkxQPTEsPz0wLD89MCw/PTAsQVZMTFM9MSw/PTAgKi8KKyNkZWZpbmUgU1lTVEVNX1NNQ19QTVBST1RfVkFMVUUgICAgICAgIChTTUNfUE1QUk9UX0FWTFBfTUFTSyB8IFNNQ19QTVBST1RfQUxMU19NQVNLIHwgU01DX1BNUFJPVF9BVkxMU19NQVNLKSAvKiBNYXNrIG9mIGFsbG93ZWQgbG93IHBvd2VyIG1vZGVzIHVzZWQgdG8gaW5pdGlhbGl6ZSBwb3dlciBtb2RlcyBwcm90ZWN0aW9uIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgREVGQVVMVF9TWVNURU1fQ0xPQ0sgICAgICAgICAgIDIwOTcxNTIwVSAgICAgICAgICAgLyogRGVmYXVsdCBTeXN0ZW0gY2xvY2sgdmFsdWUgKi8KKworCisvKioKKyAqIEBicmllZiBTeXN0ZW0gY2xvY2sgZnJlcXVlbmN5IChjb3JlIGNsb2NrKQorICoKKyAqIFRoZSBzeXN0ZW0gY2xvY2sgZnJlcXVlbmN5IHN1cHBsaWVkIHRvIHRoZSBTeXNUaWNrIHRpbWVyIGFuZCB0aGUgcHJvY2Vzc29yCisgKiBjb3JlIGNsb2NrLiBUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIGJ5IHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIHNldHVwIHRoZQorICogU3lzVGljayB0aW1lciBvciBjb25maWd1cmUgb3RoZXIgcGFyYW1ldGVycy4gSXQgbWF5IGFsc28gYmUgdXNlZCBieSBkZWJ1Z2dlciB0bworICogcXVlcnkgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZGVidWcgdGltZXIgb3IgY29uZmlndXJlIHRoZSB0cmFjZSBjbG9jayBzcGVlZAorICogU3lzdGVtQ29yZUNsb2NrIGlzIGluaXRpYWxpemVkIHdpdGggYSBjb3JyZWN0IHByZWRlZmluZWQgdmFsdWUuCisgKi8KK2V4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7CisKKy8qKgorICogQGJyaWVmIFNldHVwIHRoZSBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtLgorICoKKyAqIFR5cGljYWxseSB0aGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIG9zY2lsbGF0b3IgKFBMTCkgdGhhdCBpcyBwYXJ0IG9mIHRoZQorICogbWljcm9jb250cm9sbGVyIGRldmljZS4gRm9yIHN5c3RlbXMgd2l0aCB2YXJpYWJsZSBjbG9jayBzcGVlZCBpdCBhbHNvIHVwZGF0ZXMKKyAqIHRoZSB2YXJpYWJsZSBTeXN0ZW1Db3JlQ2xvY2suIFN5c3RlbUluaXQgaXMgY2FsbGVkIGZyb20gc3RhcnR1cF9kZXZpY2UgZmlsZS4KKyAqLwordm9pZCBTeXN0ZW1Jbml0ICh2b2lkKTsKKworLyoqCisgKiBAYnJpZWYgVXBkYXRlcyB0aGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlLgorICoKKyAqIEl0IG11c3QgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBjb3JlIGNsb2NrIGlzIGNoYW5nZWQgZHVyaW5nIHByb2dyYW0KKyAqIGV4ZWN1dGlvbi4gU3lzdGVtQ29yZUNsb2NrVXBkYXRlKCkgZXZhbHVhdGVzIHRoZSBjbG9jayByZWdpc3RlciBzZXR0aW5ncyBhbmQgY2FsY3VsYXRlcworICogdGhlIGN1cnJlbnQgY29yZSBjbG9jay4KKyAqLwordm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9TWVNURU1fTUtXNDFaNF9IXyAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbnhwL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L254cC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3ZjdjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L254cC9SRUFETUUubWQKQEAgLTAsMCArMSwxNSBAQAorIyBOWFAgU2VtaWNvbmR1Y3RvcnMKKworVVJMOiBodHRwOi8vd3d3Lm54cC5jb20vCitTREsgVVJMOiBodHRwczovL21jdXhwcmVzc28ubnhwLmNvbS9lbi93ZWxjb21lCisKK1ZlcnNpb246IDIuMAorCisKK0xpY2Vuc2U6CitPcGVuIFNvdXJjZSAtIEJTRC0zLUNsYXVzZQorCitEZXNjcmlwdGlvbjoKK1RoaXMgZm9sZGVyIGNvbnRhaW5zIHRoZSBwZXJpcGhlcnJhbCBkcml2ZXJzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciB0aGUgbW9zdCBjb21tb24gdXNlIGNhc2VzIAoraW5kZW50aWZpZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGJsb2NrLgorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL0xJQ0VOU0UgYi90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L29wZW50aHJlYWQtdGVzdC1kcml2ZXIvTElDRU5TRQpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL1JFQURNRS5nb29nbGUgYi90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL1JFQURNRS5nb29nbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkYmIxMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L29wZW50aHJlYWQtdGVzdC1kcml2ZXIvUkVBRE1FLmdvb2dsZQpAQCAtMCwwICsxLDEyIEBACitVUkw6IGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2F1dG9tYWtlLmdpdC90cmVlL2xpYi90ZXN0LWRyaXZlcgorVmVyc2lvbjogMjAxNi0wMS0xMS4yMgorTGljZW5zZTogR1BMIHYyCitMaWNlbnNlIEZpbGU6IExJQ0VOU0UKKworRGVzY3JpcHRpb246CitBdXRvbWFrZSBzY3JpcHQgdGhhdCBkcml2ZXMgdGVzdHMgZXhlY3V0aW9uLgorCitMb2NhbCBNb2RpZmljYXRpb25zOgorQ2hhbmdlIHRoZSB0ZXN0LWRyaXZlciBhdXRvbWFrZSBzY3JpcHQgdG8gc3VwcG9ydAorcGFyYWxsZWwgdGVzdCBzY3JpcHRzIGV4ZWN1dGlvbiwgZWFjaCBvbmUgaW5pdGlhdGVkCit3aXRoIGEgdW5pcXVlIG51bWJlci4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L29wZW50aHJlYWQtdGVzdC1kcml2ZXIvdGVzdC1kcml2ZXIgYi90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL3Rlc3QtZHJpdmVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5ZWI2ODYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9vcGVudGhyZWFkLXRlc3QtZHJpdmVyL3Rlc3QtZHJpdmVyCkBAIC0wLDAgKzEsMTY1IEBACisjISAvYmluL3NoCisjIHRlc3QtZHJpdmVyIC0gYmFzaWMgdGVzdHN1aXRlIGRyaXZlciBzY3JpcHQuCisKK3NjcmlwdHZlcnNpb249MjAxNi0wMS0xMS4yMjsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKKyMgTWFrZSB1bmNvbmRpdGlvbmFsIGV4cGFuc2lvbiBvZiB1bmRlZmluZWQgdmFyaWFibGVzIGFuIGVycm9yLiAgVGhpcworIyBoZWxwcyBhIGxvdCBpbiBwcmV2ZW50aW5nIHR5cG8tcmVsYXRlZCBidWdzLgorc2V0IC11CisKK3VzYWdlX2Vycm9yICgpCit7CisgIGVjaG8gIiQwOiAkKiIgPiYyCisgIHByaW50X3VzYWdlID4mMgorICBleGl0IDIKK30KKworcHJpbnRfdXNhZ2UgKCkKK3sKKyAgY2F0IDw8RU5ECitVc2FnZToKKyAgdGVzdC1kcml2ZXIgLS10ZXN0LW5hbWU9TkFNRSAtLWxvZy1maWxlPVBBVEggLS10cnMtZmlsZT1QQVRICisgICAgICAgICAgICAgIFstLWV4cGVjdC1mYWlsdXJlPXt5ZXN8bm99XSBbLS1jb2xvci10ZXN0cz17eWVzfG5vfV0KKyAgICAgICAgICAgICAgWy0tZW5hYmxlLWhhcmQtZXJyb3JzPXt5ZXN8bm99XSBbLS1dCisgICAgICAgICAgICAgIFRFU1QtU0NSSVBUIFtURVNULVNDUklQVC1BUkdVTUVOVFNdCitUaGUgJy0tdGVzdC1uYW1lJywgJy0tbG9nLWZpbGUnIGFuZCAnLS10cnMtZmlsZScgb3B0aW9ucyBhcmUgbWFuZGF0b3J5LgorRU5ECit9CisKK3Rlc3RfbmFtZT0gIyBVc2VkIGZvciByZXBvcnRpbmcuCitsb2dfZmlsZT0gICMgV2hlcmUgdG8gc2F2ZSB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IHNjcmlwdC4KK3Ryc19maWxlPSAgIyBXaGVyZSB0byBzYXZlIHRoZSBtZXRhZGF0YSBvZiB0aGUgdGVzdCBydW4uCitleHBlY3RfZmFpbHVyZT1ubworY29sb3JfdGVzdHM9bm8KK2VuYWJsZV9oYXJkX2Vycm9ycz15ZXMKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgLS1oZWxwKSBwcmludF91c2FnZTsgZXhpdCAkPzs7CisgIC0tdmVyc2lvbikgZWNobyAidGVzdC1kcml2ZXIgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKyAgLS10ZXN0LW5hbWUpIHRlc3RfbmFtZT0kMjsgc2hpZnQ7OworICAtLWxvZy1maWxlKSBsb2dfZmlsZT0kMjsgc2hpZnQ7OworICAtLXRycy1maWxlKSB0cnNfZmlsZT0kMjsgc2hpZnQ7OworICAtLWNvbG9yLXRlc3RzKSBjb2xvcl90ZXN0cz0kMjsgc2hpZnQ7OworICAtLWV4cGVjdC1mYWlsdXJlKSBleHBlY3RfZmFpbHVyZT0kMjsgc2hpZnQ7OworICAtLWVuYWJsZS1oYXJkLWVycm9ycykgZW5hYmxlX2hhcmRfZXJyb3JzPSQyOyBzaGlmdDs7CisgIC0tKSBzaGlmdDsgYnJlYWs7OworICAtKikgdXNhZ2VfZXJyb3IgImludmFsaWQgb3B0aW9uOiAnJDEnIjs7CisgICAqKSBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworbWlzc2luZ19vcHRzPQordGVzdCB4IiR0ZXN0X25hbWUiID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10ZXN0LW5hbWUiCit0ZXN0IHgiJGxvZ19maWxlIiAgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLWxvZy1maWxlIgordGVzdCB4IiR0cnNfZmlsZSIgID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10cnMtZmlsZSIKK2lmIHRlc3QgeCIkbWlzc2luZ19vcHRzIiAhPSB4OyB0aGVuCisgIHVzYWdlX2Vycm9yICJ0aGUgZm9sbG93aW5nIG1hbmRhdG9yeSBvcHRpb25zIGFyZSBtaXNzaW5nOiRtaXNzaW5nX29wdHMiCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIHVzYWdlX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IgorZmkKKworaWYgdGVzdCAkY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4KKyAgIyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoICdsaWIvYW0vY2hlY2suYW06JChhbV9fdHR5X2NvbG9ycyknLgorICByZWQ9JxtbMDszMW0nICMgUmVkLgorICBncm49JxtbMDszMm0nICMgR3JlZW4uCisgIGxnbj0nG1sxOzMybScgIyBMaWdodCBncmVlbi4KKyAgYmx1PScbWzE7MzRtJyAjIEJsdWUuCisgIG1nbj0nG1swOzM1bScgIyBNYWdlbnRhLgorICBzdGQ9JxtbbScgICAgICMgTm8gY29sb3IuCitlbHNlCisgIHJlZD0gZ3JuPSBsZ249IGJsdT0gbWduPSBzdGQ9CitmaQorCitkb19leGl0PSdybSAtZiAkbG9nX2ZpbGUgJHRyc19maWxlOyAoZXhpdCAkc3QpOyBleGl0ICRzdCcKK3RyYXAgInN0PTEyOTsgJGRvX2V4aXQiIDEKK3RyYXAgInN0PTEzMDsgJGRvX2V4aXQiIDIKK3RyYXAgInN0PTE0MTsgJGRvX2V4aXQiIDEzCit0cmFwICJzdD0xNDM7ICRkb19leGl0IiAxNQorCisjIFRlc3Qgc2NyaXB0IGlzIHJ1biBoZXJlLgorIyBHZXQgYW4gdW5pcXVlIG9mZnNldAorbG9ja19wYXRoPSIvdG1wL29mZnNldCIKK09GRlNFVD0wCit3aGlsZSB0cnVlOyBkbworICAgIG1rZGlyICIke2xvY2tfcGF0aH0uJHtPRkZTRVR9LmxvY2suZCIgPiAvZGV2L251bGwgMj4mMQorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICBicmVhaworICAgIGZpCisgICAgT0ZGU0VUPSQoZXhwciAkT0ZGU0VUICsgMSkgCitkb25lCisKKyMgUnVuIGEgdGVzdAorUE9SVF9PRkZTRVQ9JE9GRlNFVCAiJEAiID4kbG9nX2ZpbGUgMj4mMQorZXN0YXR1cz0kPworCisjIFJldHVybiB0aGUgb2Zmc2V0CitybSAtcmYgIiR7bG9ja19wYXRofS4ke09GRlNFVH0ubG9jay5kIgorIyBSZW1vdmUgdGhlIGZsYXNoIGZpbGVzCitybSAtZiB0bXAvJHtPRkZTRVR9XyouZmxhc2gKKworaWYgdGVzdCAkZW5hYmxlX2hhcmRfZXJyb3JzID0gbm8gJiYgdGVzdCAkZXN0YXR1cyAtZXEgOTk7IHRoZW4KKyAgdHdlYWtlZF9lc3RhdHVzPTEKK2Vsc2UKKyAgdHdlYWtlZF9lc3RhdHVzPSRlc3RhdHVzCitmaQorCitjYXNlICR0d2Vha2VkX2VzdGF0dXM6JGV4cGVjdF9mYWlsdXJlIGluCisgIDA6eWVzKSBjb2w9JHJlZCByZXM9WFBBU1MgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKKyAgMDoqKSAgIGNvbD0kZ3JuIHJlcz1QQVNTICByZWNoZWNrPW5vICBnY29weT1ubzs7CisgIDc3OiopICBjb2w9JGJsdSByZXM9U0tJUCAgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKKyAgOTk6KikgIGNvbD0kbWduIHJlcz1FUlJPUiByZWNoZWNrPXllcyBnY29weT15ZXM7OworICAqOnllcykgY29sPSRsZ24gcmVzPVhGQUlMIHJlY2hlY2s9bm8gIGdjb3B5PXllczs7CisgICo6KikgICBjb2w9JHJlZCByZXM9RkFJTCAgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKK2VzYWMKKworIyBSZXBvcnQgdGhlIHRlc3Qgb3V0Y29tZSBhbmQgZXhpdCBzdGF0dXMgaW4gdGhlIGxvZ3MsIHNvIHRoYXQgb25lIGNhbgorIyBrbm93IHdoZXRoZXIgdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBzaW1wbHkgYnkgbG9va2luZyBhdCB0aGUgJy5sb2cnCisjIGZpbGUsIHdpdGhvdXQgdGhlIG5lZWQgb2YgYWxzbyBwZWFraW5nIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgJy50cnMnCisjIGZpbGUgKGF1dG9tYWtlIGJ1ZyMxMTgxNCkuCitlY2hvICIkcmVzICR0ZXN0X25hbWUgKGV4aXQgc3RhdHVzOiAkZXN0YXR1cykiID4+JGxvZ19maWxlCisKKyMgUmVwb3J0IG91dGNvbWUgdG8gY29uc29sZS4KK2VjaG8gIiR7Y29sfSR7cmVzfSR7c3RkfTogJHRlc3RfbmFtZSIKKworIyBSZWdpc3RlciB0aGUgdGVzdCByZXN1bHQsIGFuZCBvdGhlciByZWxldmFudCBtZXRhZGF0YS4KK2VjaG8gIjp0ZXN0LXJlc3VsdDogJHJlcyIgPiAkdHJzX2ZpbGUKK2VjaG8gIjpnbG9iYWwtdGVzdC1yZXN1bHQ6ICRyZXMiID4+ICR0cnNfZmlsZQorZWNobyAiOnJlY2hlY2s6ICRyZWNoZWNrIiA+PiAkdHJzX2ZpbGUKK2VjaG8gIjpjb3B5LWluLWdsb2JhbC1sb2c6ICRnY29weSIgPj4gJHRyc19maWxlCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQzAiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL1JFQURNRS5tZCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NTRkMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9SRUFETUUubWQKQEAgLTAsMCArMSwyMSBAQAorIyBlbWJBUkMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisjIyBJbnRyb2R1Y3Rpb24KK2VtYkFSQyBCU1AgaXMgYSBib2FyZCBzdXBwb3J0IHBhY2thZ2UgdG8gZmFjaWxpdGF0ZSB0aGUgZGV2ZWxvcG1lbnQgb2YgZW1iZWRkZWQgc3lzdGVtcyBiYXNlZCBvbiBBUkN2MiBwcm9jZXNzb3JzLgorCitJdCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIGEgYm9hcmQgc3VwcG9ydCBwYWNrYWdlIGZvciBBUkN2MiB1c2VycyBieSBkZWZpbmluZyBjb25zaXN0ZW50IGFuZCBzaW1wbGUgc29mdHdhcmUgaW50ZXJmYWNlcyB0byB0aGUgcHJvY2Vzc29yIGFuZCBwZXJpcGhlcmFscy4KKworIyMgVVJMCitodHRwczovL3d3dy5lbWJhcmMub3JnLworCisjIyBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfY2FjaGUuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyNWU2OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2NhY2hlLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfTUlTQ19DQUNIRQ0KKyAqIFxicmllZiBpbXBsZW1lbnRhdGlvbiBvZiBjYWNoZSByZWxhdGVkIGZ1bmN0aW9ucw0KKyAqLw0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19jYWNoZS5oIg0KKw0KKyNkZWZpbmUgRElWX1JPVU5EX1VQKHgsIHkpICAoKCh4KSArICh5KSAtIDEpIC8gKHkpKQ0KKw0KKw0KK3N0cnVjdCBjYWNoZV9jb25maWcNCit7DQorICAgIHVpbnQ4X3QgdmVyOyAgICAgICAgICAgIC8qIHZlcnNpb24gKi8NCisgICAgdWludDhfdCBhc3NvYzsgICAgICAgICAgLyogQ2FjaGUgQXNzb2NpYXRpdml0eSAqLw0KKyAgICB1aW50MTZfdCBsaW5lOyAgICAgICAgICAvKiBjYWNoZSBsaW5lL2Jsb2NrIHNpemUgKi8NCisgICAgdWludDMyX3QgY2FwYWNpdHk7ICAgICAgLyogY2FwYWNpdHkgKi8NCit9Ow0KKw0KKw0KK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfY29uZmlnIGljYWNoZV9jb25maWcsIGRjYWNoZV9jb25maWc7DQorDQorLyoqDQorICogXGJyaWVmIGludmFsaWRhdGUgbXVsdGkgaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZXMNCisgKg0KKyAqIFxwYXJhbVtpbl0gc3RhcnRfYWRkciBzdGFydCBhZGRyZXNzIGluIGluc3RydWN0aW9uIGNhY2hlDQorICogXHBhcmFtW2luXSBzaXplICB0aGUgYnl0ZXMgdG8gYmUgaW52YWxpZGF0ZWQNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgaWNhY2hlX2ludmFsaWRhdGVfbWxpbmVzKHVpbnQzMl90IHN0YXJ0X2FkZHIsIHVpbnQzMl90IHNpemUpDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKChzaXplID09IDApIHx8IChzaXplID4gaWNhY2hlX2NvbmZpZy5jYXBhY2l0eSkpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICB1aW50MzJfdCBlbmRfYWRkcjsNCisgICAgdWludDMyX3QgbGluZV9zaXplOw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIGxpbmVfc2l6ZSA9ICh1aW50MzJfdCkoaWNhY2hlX2NvbmZpZy5saW5lKTsNCisgICAgZW5kX2FkZHIgPSBzdGFydF9hZGRyICsgc2l6ZSAtIDE7DQorICAgIHN0YXJ0X2FkZHIgJj0gKHVpbnQzMl90KSh+KGxpbmVfc2l6ZSAtIDEpKTsNCisNCisgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfSVZJTCwgc3RhcnRfYWRkcik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorICAgICAgICBzdGFydF9hZGRyICs9IGxpbmVfc2l6ZTsNCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhcnRfYWRkciA8PSBlbmRfYWRkcik7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGxvY2sgbXVsdGkgbGluZXMgaW4gaW5zdHJ1Y3Rpb24gY2FjaGUNCisgKg0KKyAqIFxwYXJhbVtpbl0gc3RhcnRfYWRkciBzdGFydCBhZGRyZXNzIGluIGluc3RydWN0aW9uIGNhY2hlDQorICogXHBhcmFtW2luXSBzaXplICB0aGUgYnl0ZXMgdG8gYmUgbG9ja2VkDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQgKGNhY2hlIGFscmVhZHkgbG9ja2VkIG9yIG90aGVyIHJlYXNvbnMpDQorICovDQoraW50MzJfdCBpY2FjaGVfbG9ja19tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSkNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoKHNpemUgPT0gMCkgfHwgKHNpemUgPiBpY2FjaGVfY29uZmlnLmNhcGFjaXR5KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHVpbnQzMl90IGVuZF9hZGRyOw0KKyAgICB1aW50MzJfdCBsaW5lX3NpemU7DQorICAgIHVpbnQzMl90IHN0YXR1czsNCisgICAgaW50MzJfdCBlcmNkID0gMDsNCisNCisgICAgbGluZV9zaXplID0gKHVpbnQzMl90KShpY2FjaGVfY29uZmlnLmxpbmUpOw0KKyAgICBlbmRfYWRkciA9IHN0YXJ0X2FkZHIgKyBzaXplIC0gMTsNCisgICAgc3RhcnRfYWRkciAmPSAodWludDMyX3QpKH4obGluZV9zaXplIC0gMSkpOw0KKw0KKyAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JQ19MSUwsIHN0YXJ0X2FkZHIpOw0KKw0KKyAgICAgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpICYgSUNfQ1RSTF9PUF9TVUNDRUVERUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgc3RhcnRfYWRkciArPSBsaW5lX3NpemU7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IC0xOyAgLyogdGhlIG9wZXJhdGlvbiBmYWlsZWQgKi8NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhcnRfYWRkciA8PSBlbmRfYWRkcik7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KKw0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGRpcmVjdGx5IHdyaXRlIGljYWNoZSBpbnRlcm5hbCByYW0NCisgKg0KKyAqIFxwYXJhbVtpbl0gY2FjaGVfYWRkciwgaWNhY2hlIGludGVybmFsIGFkZHJlc3Mod2F5K2luZGV4K29mZnNldCkNCisgKiBccGFyYW1baW5dIHRhZyAgIGNhY2hlIHRhZyB0byB3cml0ZSAodGFnK2xvY2sgYml0K3ZhbGlkIGJpdCkNCisgKiBccGFyYW1baW5dIGRhdGEgIGNhY2hlIGRhdGEgdG8gd3JpdGUNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgaWNhY2hlX2RpcmVjdF93cml0ZSh1aW50MzJfdCBjYWNoZV9hZGRyLCB1aW50MzJfdCB0YWcsIHVpbnQzMl90IGRhdGEpDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpICYgSUNfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfUkFNX0FERFIsIGNhY2hlX2FkZHIpOw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfVEFHLCB0YWcpOw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfREFUQSwgZGF0YSk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZGlyZWN0bHkgcmVhZCBpY2FjaGUgaW50ZXJuYWwgcmFtDQorICoNCisgKiBccGFyYW1baW5dIGNhY2hlX2FkZHIsIGljYWNoZSBpbnRlcm5hbCBhZGRyZXNzKHdheStpbmRleCtvZmZzZXQpDQorICogXHBhcmFtW291dF0gdGFnICBjYWNoZSB0YWcgdG8gcmVhZCAodGFnK2luZGV4K2xvY2sgYml0K3ZhbGlkIGJpdCkNCisgKiBccGFyYW1bb3V0XSBkYXRhIGNhY2hlIGRhdGEgdG8gcmVhZA0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQoraW50MzJfdCBpY2FjaGVfZGlyZWN0X3JlYWQodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgKnRhZywgdWludDMyX3QgKmRhdGEpDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpICYgSUNfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfUkFNX0FERFIsIGNhY2hlX2FkZHIpOw0KKyAgICAqdGFnID0gX2FyY19hdXhfcmVhZChBVVhfSUNfVEFHKTsNCisgICAgKmRhdGEgPSBfYXJjX2F1eF9yZWFkKEFVWF9JQ19EQVRBKTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBpbmRpcmVjdGx5IHJlYWQgaWNhY2hlIGludGVybmFsIHJhbQ0KKyAqDQorICogXHBhcmFtW2luXSBtZW1fYWRkciwgbWVtb3J5IGFkZHJlc3MNCisgKiBccGFyYW1bb3V0XSB0YWcgIGNhY2hlIHRhZyB0byByZWFkDQorICogXHBhcmFtW291dF0gZGF0YSBjYWNoZSBkYXRhIHRvIHJlYWQNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgaWNhY2hlX2luZGlyZWN0X3JlYWQodWludDMyX3QgbWVtX2FkZHIsIHVpbnQzMl90ICp0YWcsIHVpbnQzMl90ICpkYXRhKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmICghKF9hcmNfYXV4X3JlYWQoQVVYX0lDX0NUUkwpICYgSUNfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX1JBTV9BRERSLCBtZW1fYWRkcik7DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9JQ19DVFJMKSAmIElDX0NUUkxfT1BfU1VDQ0VFREVEKQ0KKyAgICB7DQorICAgICAgICAqdGFnID0gX2FyY19hdXhfcmVhZChBVVhfSUNfVEFHKTsNCisgICAgICAgICpkYXRhID0gX2FyY19hdXhfcmVhZChBVVhfSUNfREFUQSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7ICAvKiB0aGUgc3BlY2lmaWVkIG1lbW9yeSBpcyBub3QgaW4gaWNhY2hlICovDQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBpbnZhbGlkYXRlIG11bHRpIGRhdGEgY2FjaGUgbGluZXMNCisgKg0KKyAqIFxwYXJhbVtpbl0gc3RhcnRfYWRkciBzdGFydCBhZGRyZXNzIGluIGRhdGEgY2FjaGUNCisgKiBccGFyYW1baW5dIHNpemUgIHRoZSBieXRlcyB0byBiZSBpbnZhbGlkYXRlZA0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQoraW50MzJfdCBkY2FjaGVfaW52YWxpZGF0ZV9tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICB1aW50MzJfdCBlbmRfYWRkcjsNCisgICAgdWludDMyX3QgbGluZV9zaXplOw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIGlmICgoc2l6ZSA9PSAwKSB8fCAoc2l6ZSA+IGRjYWNoZV9jb25maWcuY2FwYWNpdHkpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgbGluZV9zaXplID0gKHVpbnQzMl90KShkY2FjaGVfY29uZmlnLmxpbmUpOw0KKyAgICBlbmRfYWRkciA9IHN0YXJ0X2FkZHIgKyBzaXplIC0gMTsNCisgICAgc3RhcnRfYWRkciAmPSAodWludDMyX3QpKH4obGluZV9zaXplIC0gMSkpOw0KKw0KKyAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19JVkRMLCBzdGFydF9hZGRyKTsNCisgICAgICAgIEFzbSgibm9wX3MiKTsNCisgICAgICAgIEFzbSgibm9wX3MiKTsNCisgICAgICAgIEFzbSgibm9wX3MiKTsNCisNCisgICAgICAgIC8qIHdhaXQgZm9yIGZsdXNoIGNvbXBsZXRpb24gKi8NCisgICAgICAgIHdoaWxlIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfRkxVU0hfU1RBVFVTKTsNCisNCisgICAgICAgIHN0YXJ0X2FkZHIgKz0gbGluZV9zaXplOw0KKyAgICB9DQorICAgIHdoaWxlIChzdGFydF9hZGRyIDw9IGVuZF9hZGRyKTsNCisNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorDQorICAgIHJldHVybiAwOw0KKw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZmx1c2ggbXVsdGkgbGluZXMgaW4gZGF0YSBjYWNoZQ0KKyAqDQorICogXHBhcmFtW2luXSBzdGFydF9hZGRyIHN0YXJ0IGFkZHJlc3MNCisgKiBccGFyYW1baW5dIHNpemUgIHRoZSBieXRlcyB0byBiZSBmbHVzaGVkDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGRjYWNoZV9mbHVzaF9tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSkNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBpZiAoKHNpemUgPT0gMCkgfHwgKHNpemUgPiBkY2FjaGVfY29uZmlnLmNhcGFjaXR5KSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHVpbnQzMl90IGVuZF9hZGRyOw0KKyAgICB1aW50MzJfdCBsaW5lX3NpemU7DQorICAgIHVpbnQzMl90IHN0YXR1czsNCisNCisgICAgbGluZV9zaXplID0gKHVpbnQzMl90KShkY2FjaGVfY29uZmlnLmxpbmUpOw0KKyAgICBlbmRfYWRkciA9IHN0YXJ0X2FkZHIgKyBzaXplIC0gMTsNCisgICAgc3RhcnRfYWRkciAmPSAodWludDMyX3QpKH4obGluZV9zaXplIC0gMSkpOw0KKw0KKyAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19GTERMLCBzdGFydF9hZGRyKTsNCisgICAgICAgIEFzbSgibm9wX3MiKTsNCisgICAgICAgIEFzbSgibm9wX3MiKTsNCisgICAgICAgIEFzbSgibm9wX3MiKTsNCisNCisgICAgICAgIC8qIHdhaXQgZm9yIGZsdXNoIGNvbXBsZXRpb24gKi8NCisgICAgICAgIHdoaWxlIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfRkxVU0hfU1RBVFVTKTsNCisNCisgICAgICAgIHN0YXJ0X2FkZHIgKz0gbGluZV9zaXplOw0KKyAgICB9DQorICAgIHdoaWxlIChzdGFydF9hZGRyIDw9IGVuZF9hZGRyKTsNCisNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgbG9jayBtdWx0aSBsaW5lcyBpbiBkYXRhIGNhY2hlDQorICoNCisgKiBccGFyYW1baW5dIHN0YXJ0X2FkZHIgc3RhcnQgYWRkcmVzcyBpbiBkYXRhIGNhY2hlDQorICogXHBhcmFtW2luXSBzaXplICB0aGUgYnl0ZXMgdG8gYmUgbG9ja2VkDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGRjYWNoZV9sb2NrX21saW5lcyh1aW50MzJfdCBzdGFydF9hZGRyLCB1aW50MzJfdCBzaXplKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmICgoc2l6ZSA9PSAwKSB8fCAoc2l6ZSA+IGRjYWNoZV9jb25maWcuY2FwYWNpdHkpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgdWludDMyX3QgZW5kX2FkZHI7DQorICAgIHVpbnQzMl90IGxpbmVfc2l6ZTsNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKyAgICBpbnQzMl90IGVyY2QgPSAwOw0KKw0KKyAgICBsaW5lX3NpemUgPSAodWludDMyX3QpKGRjYWNoZV9jb25maWcubGluZSk7DQorICAgIGVuZF9hZGRyID0gc3RhcnRfYWRkciArIHNpemUgLSAxOw0KKyAgICBzdGFydF9hZGRyICY9ICh1aW50MzJfdCkofihsaW5lX3NpemUgLSAxKSk7DQorDQorICAgIHN0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisNCisgICAgZG8NCisgICAgew0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX0xETCwgc3RhcnRfYWRkcik7DQorICAgICAgICBBc20oIm5vcF9zIik7DQorDQorICAgICAgICBpZiAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX09QX1NVQ0NFRURFRCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzdGFydF9hZGRyICs9IGxpbmVfc2l6ZTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gLTE7ICAvKiB0aGUgb3BlcmF0aW9uIGZhaWxlZCAqLw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIHdoaWxlIChzdGFydF9hZGRyIDw9IGVuZF9hZGRyKTsNCisNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKHN0YXR1cyk7DQorDQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZGlyZWN0bHkgd3JpdGUgZGNhY2hlIGludGVybmFsIHJhbQ0KKyAqDQorICogXHBhcmFtW2luXSBjYWNoZV9hZGRyLCBkY2FjaGUgaW50ZXJuYWwgYWRkcmVzcyh3YXkraW5kZXgrb2Zmc2V0KQ0KKyAqIFxwYXJhbVtpbl0gdGFnICAgY2FjaGUgdGFnIHRvIHdyaXRlDQorICogXHBhcmFtW2luXSBkYXRhICBjYWNoZSBkYXRhIHRvIHdyaXRlDQorICogXHJldHVybiAwLCBzdWNjZWVkZWQsIC0xLCBmYWlsZWQNCisgKi8NCitpbnQzMl90IGRjYWNoZV9kaXJlY3Rfd3JpdGUodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgdGFnLCB1aW50MzJfdCBkYXRhKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX1JBTV9BRERSLCBjYWNoZV9hZGRyKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX1RBRywgdGFnKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX0RBVEEsIGRhdGEpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmIGRpcmVjdGx5IHJlYWQgZGNhY2hlIGludGVybmFsIHJhbQ0KKyAqDQorICogXHBhcmFtW2luXSBjYWNoZV9hZGRyLCBkY2FjaGUgaW50ZXJuYWwgYWRkcmVzcyh3YXkraW5kZXgrb2Zmc2V0KQ0KKyAqIFxwYXJhbVtvdXRdIHRhZyAgY2FjaGUgdGFnIHRvIHJlYWQNCisgKiBccGFyYW1bb3V0XSBkYXRhIGNhY2hlIGRhdGEgdG8gcmVhZA0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQoraW50MzJfdCBkY2FjaGVfZGlyZWN0X3JlYWQodWludDMyX3QgY2FjaGVfYWRkciwgdWludDMyX3QgKnRhZywgdWludDMyX3QgKmRhdGEpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0RDX0NUUkwpICYgRENfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfUkFNX0FERFIsIGNhY2hlX2FkZHIpOw0KKyAgICAqdGFnID0gX2FyY19hdXhfcmVhZChBVVhfRENfVEFHKTsNCisgICAgKmRhdGEgPSBfYXJjX2F1eF9yZWFkKEFVWF9EQ19EQVRBKTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBpbmRpcmVjdGx5IHJlYWQgZGNhY2hlIGludGVybmFsIHJhbQ0KKyAqDQorICogXHBhcmFtW2luXSBtZW1fYWRkciwgbWVtb3J5IGFkZHJlc3ModGFnK2luZGV4K29mZnNldCkNCisgKiBccGFyYW1bb3V0XSB0YWcgIGNhY2hlIHRhZyB0byByZWFkDQorICogXHBhcmFtW291dF0gZGF0YSBjYWNoZSBkYXRhIHRvIHJlYWQNCisgKiBccmV0dXJuIDAsIHN1Y2NlZWRlZCwgLTEsIGZhaWxlZA0KKyAqLw0KK2ludDMyX3QgZGNhY2hlX2luZGlyZWN0X3JlYWQodWludDMyX3QgbWVtX2FkZHIsIHVpbnQzMl90ICp0YWcsIHVpbnQzMl90ICpkYXRhKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmICghKF9hcmNfYXV4X3JlYWQoQVVYX0RDX0NUUkwpICYgRENfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX1JBTV9BRERSLCBtZW1fYWRkcik7DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfT1BfU1VDQ0VFREVEKQ0KKyAgICB7DQorICAgICAgICAqdGFnID0gX2FyY19hdXhfcmVhZChBVVhfRENfVEFHKTsNCisgICAgICAgICpkYXRhID0gX2FyY19hdXhfcmVhZChBVVhfRENfREFUQSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7ICAvKiB0aGUgc3BlY2lmaWVkIG1lbW9yeSBpcyBub3QgaW4gZGNhY2hlICovDQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgaW5pdGlhbGl6ZSBjYWNoZQ0KKyAqIDEuIGludmFsaWRhdGUgaWNhY2hlIGFuZCBkY2FjaGUNCisgKiAyLiBPbmx5IHN1cHBvcnQgQVJDdjIgY2FjaGUNCisgKi8NCit2b2lkIGFyY19jYWNoZV9pbml0KHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBidWlsZF9jZmc7DQorDQorICAgIGJ1aWxkX2NmZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0JDUl9EX0NBQ0hFKTsNCisNCisgICAgZGNhY2hlX2NvbmZpZy52ZXIgPSBidWlsZF9jZmcgJiAweGZmOw0KKw0KKyAgICBpZiAoZGNhY2hlX2NvbmZpZy52ZXIgPj0gMHgwNCkgICAvKiBBUkN2MiAqLw0KKyAgICB7DQorICAgICAgICBkY2FjaGVfZW5hYmxlKERDX0NUUkxfRElTQUJMRV9GTFVTSF9MT0NLRUQgfA0KKyAgICAgICAgICAgICAgICAgICAgICBEQ19DVFJMX0lORElSRUNUX0FDQ0VTUyB8IERDX0NUUkxfSU5WQUxJRF9GTFVTSCk7DQorICAgICAgICBkY2FjaGVfaW52YWxpZGF0ZSgpOw0KKyAgICAgICAgZGNhY2hlX2NvbmZpZy5hc3NvYyA9IDEgPDwgKChidWlsZF9jZmcgPj4gOCkgJiAweGYpOw0KKyAgICAgICAgZGNhY2hlX2NvbmZpZy5jYXBhY2l0eSA9IDUxMiA8PCAoKGJ1aWxkX2NmZyA+PiAxMikgJiAweGYpOw0KKyAgICAgICAgZGNhY2hlX2NvbmZpZy5saW5lID0gMTYgPDwgKChidWlsZF9jZmcgPj4gMTYpICYgMHhmKTsNCisgICAgfQ0KKw0KKyAgICBidWlsZF9jZmcgPSBfYXJjX2F1eF9yZWFkKEFVWF9CQ1JfSV9DQUNIRSk7DQorDQorICAgIGljYWNoZV9jb25maWcudmVyID0gYnVpbGRfY2ZnICYgMHhmZjsNCisNCisgICAgaWYgKGljYWNoZV9jb25maWcudmVyID49IDB4MDQpICAgLyogQVJDdjIgKi8NCisgICAgew0KKyAgICAgICAgaWNhY2hlX2NvbmZpZy5hc3NvYyA9IDEgPDwgKChidWlsZF9jZmcgPj4gOCkgJiAweGYpOw0KKyAgICAgICAgaWNhY2hlX2NvbmZpZy5jYXBhY2l0eSA9IDUxMiA8PCAoKGJ1aWxkX2NmZyA+PiAxMikgJiAweGYpOw0KKyAgICAgICAgaWNhY2hlX2NvbmZpZy5saW5lID0gOCA8PCAoKGJ1aWxkX2NmZyA+PiAxNikgJiAweGYpOw0KKw0KKyAgICAgICAgaWNhY2hlX2VuYWJsZShJQ19DVFJMX0lDX0VOQUJMRSk7DQorICAgICAgICBpY2FjaGVfaW52YWxpZGF0ZSgpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2V4Y19hc20uUyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX2V4Y19hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY5ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfZXhjX2FzbS5TCkBAIC0wLDAgKzEsMjAyIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBcYnJpZWYgIGFzc2VtYmx5IHBhcnQgb2YgZXhjZXB0aW9uIGFuZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIEB7DQorICovDQorDQorLyogZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiAqLw0KKy8qKg0KKyAqIFxmbiB2b2lkIGV4Y19lbnRyeV9jcHUodm9pZCkNCisgKiBcYnJpZWYgZGVmYXVsdCBlbnRyeSBvZiBDUFUgZXhjZXB0aW9ucywgc3VjaCBhcyBUTEIgbWlzcyBhbmQgc3dhcC4NCisgKg0KKyAqIFxmbiB2b2lkIGV4Y19lbnRyeV9pbnQodm9pZCkNCisgKiBcYnJpZWYgbm9ybWFsIGludGVycnVwdCBleGNlcHRpb24gZW50cnkuDQorICogIEluIGRlZmF1bHQsIGFsbCBpbnRlcnJ1cHQgZXhjZXB0aW9ucyBhcmUgaW5zdGFsbGVkIHdpdGggbm9ybWFsIGVudHJ5Lg0KKyAqICBJZiBGSVJRIGlzIHJlcXVpcmVkLCBleGNfZW50cnlfZmlycSBzaG91bGQgYmUgdGhlIGVudHJ5Lg0KKyAqDQorICogXGZuIHZvaWQgZXhjX2VudHJ5X2ZpcnEodm9pZCkNCisgKiBcYnJpZWYgZmlycSBleGNlcHRpb24gZW50cnkNCisgKi8NCisvKiogfUAgKi8NCisNCisvKiogQGNvbmQgRVhDRVBUSU9OX0FTTSAqLw0KKw0KKyNkZWZpbmUgX19BU1NFTUJMWV9fDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2luY2x1ZGUgIi4uL2luYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgIi4uL2luYy9hcmMvYXJjX2FzbV9jb21tb24uaCINCisNCisuZmlsZSAiYXJjX2V4Y19hc20uUyINCisNCisvKiBlbnRyeSBmb3IgY3B1IGV4Y2VwdGlvbiBoYW5kbGluZyAqLw0KKy50ZXh0DQorLmdsb2JhbCBleGNfZW50cnlfY3B1DQorLndlYWsgZXhjX2VudHJ5X2NwdQ0KKy5hbGlnbiA0DQorZXhjX2VudHJ5X2NwdToNCisNCitFWENFUFRJT05fUFJPTE9HVUUNCisNCittb3YgcjMsIHNwICAgICAgICAgICAgICAgICAgLyogYXMgZXhjZXB0aW9uIGhhbmRsZXIncyBwYXJhKGV4Y19mcmFtZSkgKi8NCisNCisvKiBleGNfbmVzdF9jb3VudCArMSAqLw0KK2xkICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KK2FkZCByMCwgcjAsIDENCitzdCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCisNCisvKiBmaW5kIHRoZSBleGNlcHRpb24gY2F1c2UgKi8NCitsciAgcjAsIFtBVVhfRUNSXQ0KK2xzciByMCwgcjAsIDE2DQorYm1zayAgICByMCwgcjAsIDcNCittb3YgcjEsIGV4Y19pbnRfaGFuZGxlcl90YWJsZQ0KK2xkLmFzICAgcjIsIFtyMSwgcjBdDQorDQorbW92IHIwLCByMw0KK2psICBbcjJdICAgICAgICAgICAgICAgICAgICAvKiBqdW1wIHRvIGV4Y2VwdGlvbiBoYW5kbGVyIHdoZXJlIGludGVycnVwdHMgYXJlIG5vdCBhbGxvd2VkISAqLw0KKw0KKy8qIGludGVycnVwdHMgYXJlIG5vdCBhbGxvd2VkICovDQorZXhjX3JldHVybjoNCisNCisvKiBleGNfbmVzdF9jb3VudCAtMSAqLw0KK2xkICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KK3N1YiByMCwgcjAsIDENCitzdCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCisNCitFWENFUFRJT05fRVBJTE9HVUUNCitydGllDQorDQorDQorLyoqKioqKiBlbnRyeSBmb3Igbm9ybWFsIGludGVycnVwdCBleGNlcHRpb24gaGFuZGxpbmcgKioqKioqLw0KKy5nbG9iYWwgZXhjX2VudHJ5X2ludA0KKy53ZWFrIGV4Y19lbnRyeV9pbnQNCisuYWxpZ24gNA0KK2V4Y19lbnRyeV9pbnQ6DQorY2xyaSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorI2lmIEFSQ19GRUFUVVJFX0ZJUlEgPT0gMQ0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfTlVNX0JBTktTID4gMQ0KK2xyICByMCwgW0FVWF9JUlFfQUNUXSAgICAgICAgICAgLyogIGNoZWNrIHdoZXRoZXIgaXQgaXMgUDAgaW50ZXJydXB0ICovDQorYnRzdCAgICByMCwgMA0KK2JueiBleGNfZW50cnlfZmlycQ0KKyNlbHNlDQorUFVTSCAgICByMTANCitsciAgcjEwLCBbQVVYX0lSUV9BQ1RdDQorYnRzdCAgICByMTAsIDANCitQT1AgcjEwDQorYm56IGV4Y19lbnRyeV9maXJxDQorI2VuZGlmDQorI2VuZGlmDQorSU5URVJSVVBUX1BST0xPR1VFICAgICAgICAgIC8qIHNhdmUgc2NyYXRjaCByZWdzLCB0aGlzIHdpbGwgYmUgYWZmZWN0ZWQgICovDQorDQorDQorLyogZXhjX25lc3RfY291bnQgKzEgKi8NCitsZCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCithZGQgcjAsIHIwLCAxDQorc3QgIHIwLCBbZXhjX25lc3RfY291bnRdDQorDQorDQorbHIgIHIwLCBbQVVYX0lSUV9DQVVTRV0NCittb3YgcjEsIGV4Y19pbnRfaGFuZGxlcl90YWJsZQ0KK2xkLmFzICAgcjIsIFtyMSwgcjBdICAgICAgICAgICAgICAgIC8qIHIyID0gX2tlcm5lbF9leGNfdGJsICsgaXJxbm8gKjQgKi8NCisNCisvKiBmb3IgdGhlIGNhc2Ugb2Ygc29mdHdhcmUgdHJpZ2dlcmVkIGludGVycnVwdCAqLw0KK2xyICByMywgW0FVWF9JUlFfSElOVF0NCitjbXAgcjMsIHIwDQorYm5lLmQgICBpcnFfaGludF9oYW5kbGVkDQoreG9yIHIzLCByMywgcjMNCitzciAgcjMsIFtBVVhfSVJRX0hJTlRdDQoraXJxX2hpbnRfaGFuZGxlZDoNCitzZXRpICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5hYmxlIGhpZ2hlciBwcmlvcml0eSBpbnRlcnJ1cHQgKi8NCisNCittb3YgcjAsIHNwDQoramwgIFtyMl0gICAgICAgICAgICAgICAgICAgIC8qIGp1bXAgdG8gaW50ZXJydXB0IGhhbmRsZXIgKi8NCisNCisvKiBubyBpbnRlcnJ1cHRzIGFyZSBhbGxvd2VkIGZyb20gaGVyZSAqLw0KK2ludF9yZXR1cm46DQorY2xyaSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0ICovDQorDQorLyogZXhjX25lc3RfY291bnQgLTEgKi8NCitsZCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCitzdWIgcjAsIHIwLCAxDQorc3QgIHIwLCBbZXhjX25lc3RfY291bnRdDQorDQorSU5URVJSVVBUX0VQSUxPR1VFDQorcnRpZQ0KKw0KKy8qKioqKiogZW50cnkgZm9yIGZhc3QgaXJxIGV4Y2VwdGlvbiBoYW5kbGluZyAqKioqKiovDQorLmdsb2JhbCBleGNfZW50cnlfZmlycQ0KKy53ZWFrIGV4Y19lbnRyeV9maXJxDQorLmFsaWduIDQNCitleGNfZW50cnlfZmlycToNCitjbHJpICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8NCitTQVZFX0ZJUV9FWENfUkVHUw0KKw0KKy8qIGV4Y19uZXN0X2NvdW50ICsxICovDQorbGQgIHIwLCBbZXhjX25lc3RfY291bnRdDQorYWRkIHIwLCByMCwgMQ0KK3N0ICByMCwgW2V4Y19uZXN0X2NvdW50XQ0KKw0KK2xyICByMCwgW0FVWF9JUlFfQ0FVU0VdDQorbW92IHIxLCBleGNfaW50X2hhbmRsZXJfdGFibGUNCitsZC5hcyAgIHIyLCBbcjEsIHIwXSAgICAgICAgICAgICAgICAvKiByMiA9IF9rZXJuZWxfZXhjX3RibCArIGlycW5vICo0ICovDQorDQorLyogZm9yIHRoZSBjYXNlIG9mIHNvZnR3YXJlIHRyaWdnZXJlZCBpbnRlcnJ1cHQgKi8NCitsciAgcjMsIFtBVVhfSVJRX0hJTlRdDQorY21wIHIzLCByMA0KK2JuZS5kICAgZmlycV9oaW50X2hhbmRsZWQNCit4b3IgcjMsIHIzLCByMw0KK3NyICByMywgW0FVWF9JUlFfSElOVF0NCitmaXJxX2hpbnRfaGFuZGxlZDoNCisNCitqbCAgW3IyXSAgICAgICAgICAgICAgICAgICAgLyoganVtcCB0byBpbnRlcnJ1cHQgaGFuZGxlciAqLw0KKw0KKy8qIG5vIGludGVycnVwdHMgYXJlIGFsbG93ZWQgZnJvbSBoZXJlICovDQorZmlycV9yZXR1cm46DQorDQorLyogZXhjX25lc3RfY291bnQgLTEgKi8NCitsZCAgcjAsIFtleGNfbmVzdF9jb3VudF0NCitzdWIgcjAsIHIwLCAxDQorc3QgIHIwLCBbZXhjX25lc3RfY291bnRdDQorDQorUkVTVE9SRV9GSVFfRVhDX1JFR1MNCitydGllDQorDQorLyoqIEBlbmRjb25kICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfZXhjZXB0aW9uLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY19leGNlcHRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJhNWRjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9hcmNfZXhjZXB0aW9uLmMKQEAgLTAsMCArMSw1NTIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVSBBUkNfSEFMX0VYQ0VQVElPTl9JTlRFUlJVUFQNCisgKiBcYnJpZWYgQyBJbXBsZW1lbnRhdGlvbiBvZiBleGNlcHRpb24gYW5kIGludGVycnVwdCBtYW5hZ2VtZW50DQorICovDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19jYWNoZS5oIg0KKw0KKy8vI2RlZmluZSAgICBEQkdfTEVTUw0KKy8vI2luY2x1ZGUgImVtYkFSQ19kZWJ1Zy5oIg0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIEB7DQorICogXHZhciBleGNfZW50cnlfdGFibGUNCisgKiBcYnJpZWYgZXhjZXB0aW9uIGVudHJ5IHRhYmxlDQorICoNCisgKiBpbnN0YWxsIGV4Y2VwdGlvbiBlbnRyeSB0YWJsZSB0byBBUkNfQVVYX0lOVF9WRUNUX0JBU0UgaW4gc3RhcnR1cC4NCisgKiBBY2NvcmRpbmcgdG8gQVJDdjIgSVNBLCB2ZWN0b3JzIGFyZSBmZXRjaGVkIGluIGluc3RydWN0aW9uIHNwYWNlIGFuZCB0aHVzDQorICogbWF5IGJlIHByZXNlbnQgaW4gSUNDTSwgSW5zdHJ1Y3Rpb24gQ2FjaGUsIG9yDQorICogbWFpbiBtZW1vcnkgYWNjZXNzZWQgYnkgaW5zdHJ1Y3Rpb24gZmV0Y2ggbG9naWMuDQorICogU28gaXQgaXMgcHV0IGludG8gYSBzcGVjaWZpYyBzZWN0aW9uIC52ZWN0b3IuDQorICoNCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBleGNfZW50cnlfdGFibGUgbWF5YmUgY2FjaGVkIGluIEFSQy4gU29tZSBmdW5jdGlvbnMgaXMNCisgKiBkZWZpbmVkIGluIC5zIGZpbGVzLg0KKyAqDQorICovDQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVDQorICogXGJyaWVmICBkZWZhdWx0IGNwdSBleGNlcHRpb24gaGFuZGxlcg0KKyAqIFxwYXJhbSBwX2V4Y2luZiBwb2ludGVyIHRvIHRoZSBleGNlcHRpb24gZnJhbWUNCisgKi8NCitzdGF0aWMgdm9pZCBleGNfaGFuZGxlcl9kZWZhdWx0KHZvaWQgKnBfZXhjaW5mKQ0KK3sNCisgICAgdWludDMyX3QgZXhjcHRfY2F1c2VfcmVnID0gMDsNCisgICAgdWludDMyX3QgZXhjcHRfcmV0X3JlZyA9IDA7DQorICAgIHVpbnQzMl90IGV4Y19ubyA9IDA7DQorDQorICAgIGV4Y3B0X2NhdXNlX3JlZyA9IF9hcmNfYXV4X3JlYWQoQVVYX0VDUik7DQorICAgIGV4Y3B0X3JldF9yZWcgPSBfYXJjX2F1eF9yZWFkKEFVWF9FUlJFVCk7DQorICAgIGV4Y19ubyA9IChleGNwdF9jYXVzZV9yZWcgPj4gMTYpICYgMHhmZjsNCisNCisgICAgLy9kYmdfcHJpbnRmKERCR19MRVNTX0lORk8sICJkZWZhdWx0IGNwdSBleGNlcHRpb24gaGFuZGxlclxyXG4iKTsNCisgICAgLy9kYmdfcHJpbnRmKERCR19MRVNTX0lORk8sICJleGNfbm86JWQsIGxhc3Qgc3A6MHglMDh4LCBlY3I6MHglMDh4LCBlcmV0OjB4JTA4eFxyXG4iLA0KKyAgICAvL2V4Y19ubywgKHVpbnQzMl90KXBfZXhjaW5mLCBleGNwdF9jYXVzZV9yZWcsIGV4Y3B0X3JldF9yZWcpOw0KKyNpZiBTRUNVUkVTSElFTERfVkVSU0lPTiA9PSAyDQorDQorICAgIHdoaWxlICgxKTsNCisNCisjZWxzZQ0KKyAgICBBc20oImtmbGFnIDEiKTsNCisjZW5kaWYNCit9DQorDQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fSU5URVJSVVBUDQorICogXGJyaWVmICBkZWZhdWx0IGludGVycnVwdCBoYW5kbGVyDQorICogXHBhcmFtW2luXSBwX2V4Y2luZiAgaW5mb3JtYXRpb24gZm9yIGludGVycnVwdCBoYW5kbGVyDQorICovDQorc3RhdGljIHZvaWQgaW50X2hhbmRsZXJfZGVmYXVsdCh2b2lkICpwX2V4Y2luZikNCit7DQorICAgIHVpbnQzMl90IGludF9jYXVzZV9yZWcgPSAwOw0KKw0KKyAgICBpbnRfY2F1c2VfcmVnID0gX2FyY19hdXhfcmVhZChBVVhfSVJRX0NBVVNFKTsNCisgICAgLy9kYmdfcHJpbnRmKERCR19MRVNTX0lORk8sICJkZWZhdWx0IGludGVycnVwdCBoYW5kbGVyXHJcbiIpOw0KKyAgICAvL2RiZ19wcmludGYoREJHX0xFU1NfSU5GTywgImxhc3Qgc3A6MHglMDh4LCBpY2F1c2U6MHglMDh4XHJcbiIsICh1aW50MzJfdClwX2V4Y2luZiwgaW50X2NhdXNlX3JlZyk7DQorI2lmIFNFQ1VSRVNISUVMRF9WRVJTSU9OID09IDINCisNCisgICAgd2hpbGUgKDEpOw0KKw0KKyNlbHNlDQorICAgIEFzbSgia2ZsYWcgMSIpOw0KKyNlbmRpZg0KK30NCisNCitfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEwMjQpLCBzZWN0aW9uKCIudmVjdG9yIikpKQ0KK0VYQ19FTlRSWSBleGNfZW50cnlfdGFibGVbTlVNX0VYQ19BTExdID0NCit7DQorICAgIFswXSA9IF9hcmNfcmVzZXQsDQorICAgIFsxIC4uLiBOVU1fRVhDX0NQVSAtIDFdID0gZXhjX2VudHJ5X2NwdSwNCisgICAgW05VTV9FWENfQ1BVIC4uLiBOVU1fRVhDX0FMTCAtIDFdID0gZXhjX2VudHJ5X2ludA0KK307DQorLyoqDQorICogXHZhciBleGNfaW50X2hhbmRsZXJfdGFibGUNCisgKiBcYnJpZWYgdGhlIGNwdSBleGNlcHRpb24gYW5kIGludGVycnVwdCBleGNlcHRpb24gaGFuZGxlciB0YWJsZQ0KKyAqIGNhbGxlZCBpbiBleGNfZW50cnlfZGVmYXVsdCBhbmQgZXhjX2VudHJ5X2ludA0KKyAqLw0KK0VYQ19IQU5ETEVSIGV4Y19pbnRfaGFuZGxlcl90YWJsZVtOVU1fRVhDX0FMTF0gPQ0KK3sNCisgICAgWzAgLi4uIE5VTV9FWENfQ1BVIC0gMV0gPSBleGNfaGFuZGxlcl9kZWZhdWx0LA0KKyAgICBbTlVNX0VYQ19DUFUgLi4uIE5VTV9FWENfQUxMIC0gMV0gPSBpbnRfaGFuZGxlcl9kZWZhdWx0DQorfTsNCisNCisvKioNCisgKiBcdmFyIGV4Y19uZXN0X2NvdW50DQorICogXGJyaWVmIHRoZSBjb3VudGVyIGZvciBleGMvaW50IHByb2Nlc3NpbmcsID0wIG5vIGludC9leGMNCisgKiA+MSBpbiBpbnQvZXhjIHByb2Nlc3NpbmcNCisgKiBAfQ0KKyAqLw0KK3VpbnQzMl90IGV4Y19uZXN0X2NvdW50Ow0KKw0KK3R5cGVkZWYgc3RydWN0IGF1eF9pcnFfY3RybF9maWVsZA0KK3sNCisgICAgLyogbm90ZTogbGl0dGxlIGVuZGlhbiAqLw0KKyAgICB1aW50MzJfdCBzYXZlX25yX2dwcl9wYWlyczogNTsgIC8qKiBJbmRpY2F0ZXMgbnVtYmVyIG9mIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBwYWlycyBzYXZlZCwgZnJvbSAwIHRvIDgvMTYgKi8NCisgICAgdWludDMyX3QgcmVzOiA0OyAgICAgICAgLyoqIFJlc2VydmVkICovDQorICAgIHVpbnQzMl90IHNhdmVfYmxpbms6IDE7ICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdG8gc2F2ZSBhbmQgcmVzdG9yZSBCTElOSyAqLw0KKyAgICB1aW50MzJfdCBzYXZlX2xwX3JlZ3M6IDE7ICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNhdmUgYW5kIHJlc3RvcmUgbG9vcCByZWdpc3RlcnMgKExQX0NPVU5ULCBMUF9TVEFSVCwgTFBfRU5EKSAqLw0KKyAgICB1aW50MzJfdCBzYXZlX3VfdG9fdTogMTsgICAgLyoqIEluZGljYXRlcyBpZiB1c2VyIGNvbnRleHQgaXMgc2F2ZWQgdG8gdXNlciBzdGFjayAqLw0KKyAgICB1aW50MzJfdCByZXMyOiAxOyAgICAgICAvKiogUmVzZXJ2ZWQgKi8NCit1aW50MzJfdCBzYXZlX2lkeF9yZWdzOg0KKyAgICAxOyAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNhdmUgYW5kIHJlc3RvcmUgY29kZS1kZW5zaXR5IHJlZ2lzdGVycyAoRUlfQkFTRSwgSkxJX0JBU0UsIExESV9CQVNFKSAqLw0KKyAgICB1aW50MzJfdCByZXMzOiAxODsgICAgICAvKiogUmVzZXJ2ZWQgKi8NCit9IGF1eF9pcnFfY3RybF9maWVsZF90Ow0KKw0KK3R5cGVkZWYgdW5pb24NCit7DQorICAgIGF1eF9pcnFfY3RybF9maWVsZF90IGJpdHM7DQorICAgIHVpbnQzMl90IHZhbHVlOw0KK30gYXV4X2lycV9jdHJsX3Q7DQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVIEFSQ19IQUxfRVhDRVBUSU9OX0lOVEVSUlVQVA0KKyAqIFxicmllZiAgaW50aWFsaXplIHRoZSBleGNlcHRpb24gYW5kIGludGVycnVwdCBoYW5kbGluZw0KKyAqLw0KK3ZvaWQgZXhjX2ludF9pbml0KHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBpOw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorICAgIGF1eF9pcnFfY3RybF90IGljdHJsOw0KKw0KKyAgICBpY3RybC52YWx1ZSA9IDA7DQorDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorICAgIGljdHJsLmJpdHMuc2F2ZV9ucl9ncHJfcGFpcnMgPSA2OyAgIC8qIHIwIHRvIHIxMSAocjEyIHNhdmVkIG1hbnVhbGx5KSAqLw0KKyNlbHNlDQorICAgIGljdHJsLmJpdHMuc2F2ZV9ucl9ncHJfcGFpcnMgPSAzOyAgIC8qIHIwIHRvIHIzLCByMTAsIHIxMSAgKi8NCisjZW5kaWYNCisgICAgaWN0cmwuYml0cy5zYXZlX2JsaW5rID0gMTsNCisgICAgaWN0cmwuYml0cy5zYXZlX2xwX3JlZ3MgPSAxOyAgICAgICAgLyogTFBfQ09VTlQsIExQX1NUQVJULCBMUF9FTkQgKi8NCisgICAgaWN0cmwuYml0cy5zYXZlX3VfdG9fdSA9IDA7ICAgICAvKiB1c2VyIGN0eHQgc2F2ZWQgb24ga2VybmVsIHN0YWNrICovDQorICAgIGljdHJsLmJpdHMuc2F2ZV9pZHhfcmVncyA9IDE7ICAgICAgIC8qIEpMSSwgTERJLCBFSSAqLw0KKw0KKyAgICBzdGF0dXMgPSBhcmNfbG9ja19zYXZlKCk7DQorDQorICAgIGZvciAoaSA9IE5VTV9FWENfQ1BVOyBpIDwgTlVNX0VYQ19BTEw7IGkrKykNCisgICAgew0KKyAgICAgICAgLyogaW50ZXJydXB0IGxldmVsIHRyaWdnZXJlZCwgZGlzYWJsZWQsIHByaW9yaXR5IGlzIHRoZSBsb3dlc3QgKi8NCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfRU5BQkxFLCAwKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfVFJJR0dFUiwgMCk7DQorI2lmIGRlZmluZWQoQVJDX0ZFQVRVUkVfU0VDX1BSRVNFTlQpICYmIChTRUNVUkVTSElFTERfVkVSU0lPTiA8IDIpDQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1BSSU9SSVRZLCAoMSA8PCBBVVhfSVJRX1BSSU9SSVRZX0JJVF9TKSB8IChJTlRfUFJJX01BWCAtIElOVF9QUklfTUlOKSk7DQorI2Vsc2UNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfUFJJT1JJVFksIElOVF9QUklfTUFYIC0gSU5UX1BSSV9NSU4pOw0KKyNlbmRpZg0KKyAgICB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfQ1RSTCwgaWN0cmwudmFsdWUpOw0KKw0KKyAgICBhcmNfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCisNCisgICAgLyoqIGlwbSBzaG91bGQgYmUgc2V0IGFmdGVyIGNwdSB1bmxvY2sgcmVzdG9yZSB0byBhdm9pZCByZXNldCBvZiB0aGUgc3RhdHVzMzIgdmFsdWUgKi8NCisgICAgYXJjX2ludF9pcG1fc2V0KChJTlRfUFJJX01BWCAtIElOVF9QUklfTUlOKSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIFxicmllZiAgaW5zdGFsbCBhIENQVSBleGNlcHRpb24gZW50cnkNCisgKiBccGFyYW1baW5dIGV4Y25vIGV4Y2VwdGlvbiBudW1iZXINCisgKiBccGFyYW1baW5dIGVudHJ5IHRoZSBlbnRyeSBvZiBleGNlcHRpb24gdG8gaW5zdGFsbA0KKyAqLw0KK2ludDMyX3QgZXhjX2VudHJ5X2luc3RhbGwoY29uc3QgdWludDMyX3QgZXhjbm8sIEVYQ19FTlRSWSBlbnRyeSkNCit7DQorICAgIHVpbnQzMl90IHN0YXR1czsNCisNCisgICAgRVhDX0VOVFJZICp0YWJsZSA9IChFWENfRU5UUlkgKilfYXJjX2F1eF9yZWFkKEFVWF9JTlRfVkVDVF9CQVNFKTsNCisNCisgICAgaWYgKGV4Y25vIDwgTlVNX0VYQ19BTEwgJiYgZW50cnkgIT0gTlVMTA0KKyAgICAgICAgJiYgdGFibGVbZXhjbm9dICE9IGVudHJ5KQ0KKyAgICB7DQorICAgICAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorICAgICAgICAvKiBkaXJlY3RseSB3cml0ZSB0byBtZW0sIGFzIGFyYyBnZXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGZyb20gbWVtIG5vdCBmcm9tIGNhY2hlICovDQorICAgICAgICAvKiBGSVhNRSwgaGVyZSBtYXliZSBpY2FjaGUgaXMgZGlydHksIG5lZWQgdG8gYmUgaW52YWxpZGF0ZWQgKi8NCisgICAgICAgIHRhYmxlW2V4Y25vXSA9IGVudHJ5Ow0KKw0KKyAgICAgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0JDUl9EX0NBQ0hFKSA+IDB4MikNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiBkY2FjaGUgaXMgYXZhaWxhYmxlICovDQorICAgICAgICAgICAgZGNhY2hlX2ZsdXNoX2xpbmUoKHVpbnQzMl90KSZ0YWJsZVtleGNub10pOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKF9hcmNfYXV4X3JlYWQoQVVYX0JDUl9EX0NBQ0hFKSA+IDB4MikNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiBpY2FjaGUgaXMgYXZhaWxhYmxlICovDQorICAgICAgICAgICAgaWNhY2hlX2ludmFsaWRhdGVfbGluZSgodWludDMyX3QpJnRhYmxlW2V4Y25vXSk7DQorICAgICAgICB9DQorDQorICAgICAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVDQorICogXGJyaWVmICBnZXQgdGhlIGluc3RhbGxlZCBDUFUgZXhjZXB0aW9uIGVudHJ5DQorICogXHBhcmFtW2luXSBleGNubyBleGNlcHRpb24gbnVtYmVyDQorICogXHJldHVybiB0aGUgaW5zdGFsbGVkIENQVSBleGNlcHRpb24gZW50cnkNCisgKi8NCitFWENfRU5UUlkgZXhjX2VudHJ5X2dldChjb25zdCB1aW50MzJfdCBleGNubykNCit7DQorICAgIGlmIChleGNubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXhjX2VudHJ5X3RhYmxlW2V4Y25vXTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVDQorICogXGJyaWVmICBpbnN0YWxsIGFuIGV4Y2VwdGlvbiBoYW5kbGVyDQorICogXHBhcmFtW2luXSBleGNubyBleGNlcHRpb24gbnVtYmVyDQorICogXHBhcmFtW2luXSBoYW5kbGVyIHRoZSBoYW5kbGVyIG9mIGV4Y2VwdGlvbiB0byBpbnN0YWxsDQorICovDQoraW50MzJfdCBleGNfaGFuZGxlcl9pbnN0YWxsKGNvbnN0IHVpbnQzMl90IGV4Y25vLCBFWENfSEFORExFUiBoYW5kbGVyKQ0KK3sNCisgICAgaWYgKGV4Y25vIDwgTlVNX0VYQ19BTEwgJiYgaGFuZGxlciAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBleGNfaW50X2hhbmRsZXJfdGFibGVbZXhjbm9dID0gaGFuZGxlcjsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVDQorICogXGJyaWVmICBnZXQgdGhlIGluc3RhbGxlZCBleGNlcHRpb24gaGFuZGxlcg0KKyAqIFxwYXJhbVtpbl0gZXhjbm8gZXhjZXB0aW9uIG51bWJlcg0KKyAqIFxyZXR1cm4gdGhlIGluc3RhbGxlZCBleGNlcHRpb24gaGFuZGxlciBvciBOVUxMDQorICovDQorRVhDX0hBTkRMRVIgZXhjX2hhbmRsZXJfZ2V0KGNvbnN0IHVpbnQzMl90IGV4Y25vKQ0KK3sNCisgICAgaWYgKGV4Y25vIDwgTlVNX0VYQ19BTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiBleGNfaW50X2hhbmRsZXJfdGFibGVbZXhjbm9dOw0KKyAgICB9DQorDQorICAgIHJldHVybiBOVUxMOw0KK30NCisNCisNCisjaWZuZGVmIEVNQkFSQ19PVkVSUklERV9BUkNfSU5URVJSVVBUX01BTkFHRU1FTlQNCisvKioNCisgKiBcYnJpZWYgZGlzYWJsZSB0aGUgc3BlY2lmaWMgaW50ZXJydXB0DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKi8NCitpbnQzMl90IGludF9kaXNhYmxlKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVICYmIGludG5vIDwgTlVNX0VYQ19BTEwpDQorICAgIHsNCisgICAgICAgIGFyY19pbnRfZGlzYWJsZShpbnRubyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZW5hYmxlIHRoZSBzcGVjaWZpYyBpbnQNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqLw0KK2ludDMyX3QgaW50X2VuYWJsZShjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBhcmNfaW50X2VuYWJsZShpbnRubyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgY2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWMgaW50IGlzIGVuYWJsZWQNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxyZXR1cm4gMCBkaXNhYmxlZCwgMSBlbmFibGVkLCA8IDAgZXJyb3INCisgKi8NCitpbnQzMl90IGludF9lbmFibGVkKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVICYmIGludG5vIDwgTlVNX0VYQ19BTEwpDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorICAgICAgICByZXR1cm4gX2FyY19hdXhfcmVhZChBVVhfSVJRX0VOQUJMRSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGdldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5IG1hc2sNCisgKg0KKyAqIFxyZXR1cm5zIGludGVycnVwdCBwcmlvcml0eSBtYXNrLCBuZWdhdGl2ZSBudW0NCisgKi8NCitpbnQzMl90IGludF9pcG1fZ2V0KHZvaWQpDQorew0KKyAgICByZXR1cm4gKChpbnQzMl90KWFyY19pbnRfaXBtX2dldCgpICsgSU5UX1BSSV9NSU4pOw0KK30NCisNCisNCisvKioNCisgKiBcYnJpZWYgIHNldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5IG1hc2sNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50cHJpIGludGVycnVwdCBwcmlvcml0eQ0KKyAqLw0KK2ludDMyX3QgaW50X2lwbV9zZXQoaW50MzJfdCBpbnRwcmkpDQorew0KKyAgICBpZiAoaW50cHJpID49IElOVF9QUklfTUlOICYmIGludHByaSA8PSBJTlRfUFJJX01BWCkNCisgICAgew0KKyAgICAgICAgaW50cHJpID0gaW50cHJpIC0gSU5UX1BSSV9NSU47DQorICAgICAgICBhcmNfaW50X2lwbV9zZXQoaW50cHJpKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAgLTE7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFxicmllZiAgZ2V0IGN1cnJlbnQgaW50ZXJydXB0IHByaW9yaXR5IG1hc2sNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxyZXR1cm4gIDwwIGludGVycnVwdCBwcmlvcml0eSwgMCBlcnJvcg0KKyAqLw0KK2ludDMyX3QgaW50X3ByaV9nZXQoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBpZiAoaW50bm8gPj0gTlVNX0VYQ19DUFUgJiYgaW50bm8gPCBOVU1fRVhDX0FMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIChpbnQzMl90KWFyY19pbnRfcHJpX2dldChpbnRubykgKyBJTlRfUFJJX01JTjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorDQorLyoqDQorICogXGJyaWVmIHNldCBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxwYXJhbVtpbl0gaW50cHJpIGludGVycnVwdCBwcmlvcml0eQ0KKyAqIFxyZXR1cm4gIDwwIGVycm9yLCAwIG9rDQorICovDQoraW50MzJfdCBpbnRfcHJpX3NldChjb25zdCB1aW50MzJfdCBpbnRubywgaW50MzJfdCBpbnRwcmkpDQorew0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorICAgICAgICBpbnRwcmkgPSBpbnRwcmkgLSBJTlRfUFJJX01JTjsNCisgICAgICAgIGFyY19pbnRfcHJpX3NldChpbnRubywgKHVpbnQzMl90KWludHByaSk7DQorICAgICAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogXGJyaWVmIHNldCBpbnRlcnJ1cHQgc2VjdXJlIG9yIG5vdCBzZWN1cmUNCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIGluIHNlY3VyZXNoaWVsZCB2Mg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxwYXJhbVtpbl0gc2VjdXJlLCAwIGZvciBub3JtYWwsID4wIGZvciBzZWN1cmUNCisgKiBccmV0dXJuIDwwIGVycm9yLCAwIG9rDQorICovDQoraW50MzJfdCBpbnRfc2VjdXJlX3NldChjb25zdCB1aW50MzJfdCBpbnRubywgdWludDMyX3Qgc2VjdXJlKQ0KK3sNCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVICYmIGludG5vIDwgTlVNX0VYQ19BTEwpDQorICAgIHsNCisgICAgICAgIGFyY19pbnRfc2VjdXJlX3NldChpbnRubywgc2VjdXJlKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCisNCit9DQorDQorDQorLyoqDQorICogXGJyaWVmICBwcm9iZSB0aGUgcGVuZGluZyBzdGF0dXMgb2YgaW50ZXJydXB0DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKg0KKyAqIFxyZXR1cm5zIDEgcGVuZGluZywgMCBubyBwZW5kaW5nLCAtMSBlcnJvcg0KKyAqLw0KK2ludDMyX3QgaW50X3Byb2JlKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVICYmIGludG5vIDwgTlVNX0VYQ19BTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiBhcmNfaW50X3Byb2JlKGludG5vKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFxicmllZiAgdHJpZ2dlciB0aGUgaW50ZXJydXB0IGluIHNvZnR3YXJlDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccmV0dXJuIDAgb2ssIC0xIGVycm9yDQorICovDQoraW50MzJfdCBpbnRfc3dfdHJpZ2dlcihjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBhcmNfaW50X3N3X3RyaWdnZXIoaW50bm8pOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGNvbmZpZyB0aGUgaW50ZXJydXB0IGxldmVsIHRyaWdnZXJlZCBvciBwdWxzZSB0cmlnZ2VyZWQNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqIFxwYXJhbVtpbl0gbGV2ZWwsIDAtbGV2ZWwgdHJpZ2dlciwgMS1wdWxzZSB0cmlnZ2VyZWQNCisgKiBccmV0dXJuIDAgb2ssIC0xIGVycm9yDQorICovDQoraW50MzJfdCBpbnRfbGV2ZWxfY29uZmlnKGNvbnN0IHVpbnQzMl90IGludG5vLCBjb25zdCB1aW50MzJfdCBsZXZlbCkNCit7DQorICAgIGlmIChpbnRubyA+PSBOVU1fRVhDX0NQVSAmJiBpbnRubyA8IE5VTV9FWENfQUxMKQ0KKyAgICB7DQorICAgICAgICBhcmNfaW50X2xldmVsX2NvbmZpZyhpbnRubywgbGV2ZWwpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisNCisvKioNCisgKiBcYnJpZWYgIGxvY2sgY3B1LCBkaXNhYmxlIGludGVycnVwdHMNCisgKi8NCit2b2lkIGNwdV9sb2NrKHZvaWQpDQorew0KKyAgICBhcmNfbG9jaygpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHVubG9jayBjcHUsIGVuYWJsZSBpbnRlcnJ1cHRzIHRvIGhhcHBlbg0KKyAqLw0KK3ZvaWQgY3B1X3VubG9jayh2b2lkKQ0KK3sNCisgICAgYXJjX3VubG9jaygpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGxvY2sgY3B1IGFuZCByZXR1cm4gc3RhdHVzDQorICoNCisgKiBccmV0dXJucyBjcHUgc3RhdHVzDQorICovDQordWludDMyX3QgY3B1X2xvY2tfc2F2ZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGFyY19sb2NrX3NhdmUoKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICB1bmxvY2sgY3B1IHdpdGggdGhlIHNwZWNpZmljIHN0YXR1cw0KKyAqDQorICogXHBhcmFtW2luXSBzdGF0dXMgIGNwdSBzdGF0dXMgc2F2ZWQgYnkgY3B1X2xvY2tfc2F2ZQ0KKyAqLw0KK3ZvaWQgY3B1X3VubG9ja19yZXN0b3JlKGNvbnN0IHVpbnQzMl90IHN0YXR1cykNCit7DQorICAgIGFyY191bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBcaW5ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9JTlRFUlJVUFQNCisgKiBcYnJpZWYgIGluc3RhbGwgYW4gaW50ZXJydXB0IGhhbmRsZXINCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccGFyYW1baW5dIGhhbmRsZXIgaW50ZXJydXB0IGhhbmRsZXIgdG8gaW5zdGFsbA0KKyAqLw0KK2ludDMyX3QgaW50X2hhbmRsZXJfaW5zdGFsbChjb25zdCB1aW50MzJfdCBpbnRubywgSU5UX0hBTkRMRVIgaGFuZGxlcikNCit7DQorICAgIC8qITwgXHRvZG8gcGFyYW1ldGVyIGNoZWNrID8gKi8NCisgICAgaWYgKGludG5vID49IE5VTV9FWENfQ1BVKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gZXhjX2hhbmRsZXJfaW5zdGFsbChpbnRubywgaGFuZGxlcik7DQorICAgIH0NCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBcaW5ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9JTlRFUlJVUFQNCisgKiBcYnJpZWYgIGdldCB0aGUgaW5zdGFsbGVkIGFuIGludGVycnVwdCBoYW5kbGVyDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHJldHVybiB0aGUgaW5zdGFsbGVkIGludGVycnVwdCBoYW5kbGVyIG9yIE5VTEwNCisgKi8NCitJTlRfSEFORExFUiBpbnRfaGFuZGxlcl9nZXQoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBpZiAoaW50bm8gPj0gTlVNX0VYQ19DUFUpDQorICAgIHsNCisgICAgICAgIHJldHVybiBleGNfaGFuZGxlcl9nZXQoaW50bm8pOw0KKyAgICB9DQorDQorICAgIHJldHVybiBOVUxMOw0KK30NCisjZW5kaWYgLyogRU1CQVJDX09WRVJSSURFX0FSQ19JTlRFUlJVUFRfTUFOQUdFTUVOVCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvYXJjX3RpbWVyLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY190aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ODM3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL2FyY190aW1lci5jCkBAIC0wLDAgKzEsMjM1IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTE1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX01JU0NfVElNRVINCisgKiBcYnJpZWYgIGltcGxlbWVudGF0aW9uIG9mIGludGVybmFsIHRpbWVyIHJlbGF0ZWQgZnVuY3Rpb25zDQorICogXHRvZG8gUlRDIHN1cHBvcnQgc2hvdWxkIGJlIGltcHJvdmVkIGlmIFJUQyBpcyBlbmFibGVkDQorICovDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX3RpbWVyLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisNCisvKioNCisgKiBcYnJpZWYgIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmljIHRpbWVyIHByZXNlbnQNCisgKiBccGFyYW1baW5dIG5vIHRpbWVyIG51bWJlcg0KKyAqIFxyZXR2YWwgMSBwcmVzZW50DQorICogXHJldHZhbCAwIG5vdCBwcmVzZW50DQorICovDQoraW50MzJfdCB0aW1lcl9wcmVzZW50KGNvbnN0IHVpbnQzMl90IG5vKQ0KK3sNCisgICAgdWludDMyX3QgYmNyID0gX2FyY19hdXhfcmVhZChBVVhfQkNSX1RJTUVSUyk7DQorDQorICAgIHN3aXRjaCAobm8pDQorICAgIHsNCisgICAgY2FzZSBUSU1FUl8wOg0KKyAgICAgICAgYmNyID0gKGJjciA+PiA4KSAmIDE7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl8xOg0KKyAgICAgICAgYmNyID0gKGJjciA+PiA5KSAmIDE7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl9SVEM6DQorICAgICAgICBiY3IgPSAoYmNyID4+IDEwKSAmIDE7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJjciA9IDA7DQorICAgICAgICAvKiBpbGxlZ2FsIGFyZ3VtZW50IHNvIHJldHVybiBmYWxzZSAqLw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChpbnQpYmNyOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHN0YXJ0IHRoZSBzcGVjaWZpYyB0aW1lcg0KKyAqIFxwYXJhbVtpbl0gbm8gICAgdGltZXIgbnVtYmVyDQorICogXHBhcmFtW2luXSBtb2RlICB0aW1lciBtb2RlDQorICogXHBhcmFtW2luXSB2YWwgICB0aW1lciBsaW1pdCB2YWx1ZSAobm90IGZvciBSVEMpDQorICogXHJldHVybiAwIHN1Y2Nlc3MsIC0xIGZhaWx1cmUNCisgKi8NCitpbnQzMl90IHRpbWVyX3N0YXJ0KGNvbnN0IHVpbnQzMl90IG5vLCBjb25zdCB1aW50MzJfdCBtb2RlLCBjb25zdCB1aW50MzJfdCB2YWwpDQorew0KKyAgICBpZiAodGltZXJfcHJlc2VudChubykgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHN3aXRjaCAobm8pDQorICAgIHsNCisgICAgY2FzZSBUSU1FUl8wOg0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMF9DVFJMLCAwKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjBfTElNSVQsIHZhbCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIwX0NUUkwsIG1vZGUpOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMF9DTlQsIDApOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVElNRVJfMToNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjFfQ1RSTCwgMCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIxX0xJTUlULCB2YWwpOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMV9DVFJMLCBtb2RlKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjFfQ05ULCAwKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFRJTUVSX1JUQzoNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9SVENfQ1RSTCwgbW9kZSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBzdG9wIGFuZCBjbGVhciB0aGUgc3BlY2lmaWMgdGltZXINCisgKg0KKyAqIFxwYXJhbVtpbl0gbm8gdGltZXIgbnVtYmVyDQorICogXHJldHVybiAwIHN1Y2Nlc3MsIC0xIGZhaWx1cmUNCisgKi8NCitpbnQzMl90IHRpbWVyX3N0b3AoY29uc3QgdWludDMyX3Qgbm8pDQorew0KKyAgICBpZiAodGltZXJfcHJlc2VudChubykgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHN3aXRjaCAobm8pDQorICAgIHsNCisgICAgY2FzZSBUSU1FUl8wIDoNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjBfQ1RSTCwgMCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIwX0xJTUlULCAwKTsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9USU1FUjBfQ05ULCAwKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFRJTUVSXzE6DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIxX0NUUkwsIDApOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMV9MSU1JVCwgMCk7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIxX0NOVCwgMCk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl9SVEM6DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfUlRDX0NUUkwsIFRJTUVSX1JUQ19DTEVBUik7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBnZXQgdGltZXIgY3VycmVudCB0aWNrDQorICoNCisgKiBccGFyYW1baW5dIG5vIHRpbWVyIG51bWJlcg0KKyAqIFxwYXJhbVtvdXRdIHZhbCwgdGltZXIgdmFsdWUNCisgKiBccmV0dXJuIDAgc3VjY2VzcywgLTEgZmFpbHVyZQ0KKyAqLw0KK2ludDMyX3QgdGltZXJfY3VycmVudChjb25zdCB1aW50MzJfdCBubywgdm9pZCAqdmFsKQ0KK3sNCisgICAgaWYgKHRpbWVyX3ByZXNlbnQobm8pID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKG5vKQ0KKyAgICB7DQorICAgIGNhc2UgVElNRVJfMCA6DQorICAgICAgICAqKCh1aW50MzJfdCAqKXZhbCkgPSBfYXJjX2F1eF9yZWFkKEFVWF9USU1FUjBfQ05UKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFRJTUVSXzEgOg0KKyAgICAgICAgKigodWludDMyX3QgKil2YWwpID0gX2FyY19hdXhfcmVhZChBVVhfVElNRVIxX0NOVCk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBUSU1FUl9SVEM6DQorICAgICAgICAqKCh1aW50NjRfdCAqKXZhbCkgPSBfYXJjX2F1eF9yZWFkKEFVWF9SVENfTE9XKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0IDoNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBjbGVhciB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0IG9mIHRpbWVyDQorICoNCisgKiBccGFyYW1baW5dIG5vIHRpbWVyIG51bWJlcg0KKyAqIFxyZXR1cm4gMCBzdWNjZXNzLCAtMSBmYWlsdXJlDQorICovDQoraW50MzJfdCB0aW1lcl9pbnRfY2xlYXIoY29uc3QgdWludDMyX3Qgbm8pDQorew0KKyAgICB1aW50MzJfdCB2YWw7DQorDQorICAgIGlmICh0aW1lcl9wcmVzZW50KG5vKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgc3dpdGNoIChubykNCisgICAgew0KKyAgICBjYXNlIFRJTUVSXzAgOg0KKyAgICAgICAgdmFsID0gX2FyY19hdXhfcmVhZChBVVhfVElNRVIwX0NUUkwpOw0KKyAgICAgICAgdmFsICY9IH5USU1FUl9DVFJMX0lQOw0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX1RJTUVSMF9DVFJMLCB2YWwpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVElNRVJfMSA6DQorICAgICAgICB2YWwgPSBfYXJjX2F1eF9yZWFkKEFVWF9USU1FUjFfQ1RSTCk7DQorICAgICAgICB2YWwgJj0gflRJTUVSX0NUUkxfSVA7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfVElNRVIxX0NUUkwsIHZhbCk7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdCA6DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgaW5pdCBpbnRlcm5hbCB0aW1lcg0KKyAqLw0KK3ZvaWQgdGltZXJfaW5pdCh2b2lkKQ0KK3sNCisgICAgdGltZXJfc3RvcChUSU1FUl8wKTsNCisgICAgdGltZXJfc3RvcChUSU1FUl8xKTsNCisgICAgdGltZXJfc3RvcChUSU1FUl9SVEMpOw0KK30NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL3N0YXJ0dXAvYXJjX2N4eF9zdXBwb3J0LmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL3N0YXJ0dXAvYXJjX2N4eF9zdXBwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlMjA5YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9hcmMvc3RhcnR1cC9hcmNfY3h4X3N1cHBvcnQuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4NCisgKg0KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE2LTAzLTAyDQorICogXGF1dGhvciBXYXluZSBSZW4od2VpLnJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2lmIGRlZmluZWQoX19HTlVfXykNCisvKiBlbWJBUkMncyBHTlUgQysrIHN1cHBvcnQgdGFrZXMgcmVmZXJlbmNlIGZyb20gWmVwaHlyIChjcHBfeHh4LmMpICovDQorDQorLyoqDQorICogQGZpbGUgLSBDb25zdHJ1Y3RvciBtb2R1bGUNCisgKiBAYnJpZWYNCisgKiBUaGUgY3RvcnMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBleGVjdXRlIHRoZQ0KKyAqIEMrKyBjb25zdHJ1Y3RvcnMgb2Ygc3RhdGljIGdsb2JhbCBvYmplY3RzLiBUaGVzZSBtdXN0IGJlIGV4ZWN1dGVkIGJlZm9yZQ0KKyAqIHRoZSBhcHBsaWNhdGlvbidzIG1haW4oKSByb3V0aW5lLg0KKyAqDQorICogTk9URTogTm90IGFsbCBjb21waWxlcnMgcHV0IHRob3NlIGZ1bmN0aW9uIHBvaW50ZXJzIGludG8gdGhlIGN0b3JzIHNlY3Rpb247DQorICogc29tZSBwdXQgdGhlbSBpbnRvIHRoZSBpbml0X2FycmF5IHNlY3Rpb24gaW5zdGVhZC4NCisgKi8NCisNCisvKiBXaGF0IGEgY29uc3RydWN0b3IgZnVuY3Rpb24gcG9pbnRlciBsb29rcyBsaWtlICovDQorDQordHlwZWRlZiB2b2lkICgqQ3RvckZ1bmNQdHIpKHZvaWQpOw0KKw0KKy8qIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHBvaW50ZXIgbGlzdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGxpbmtlciBzY3JpcHQuICovDQorDQorZXh0ZXJuIEN0b3JGdW5jUHRyIF9fQ1RPUl9MSVNUX19bXTsNCitleHRlcm4gQ3RvckZ1bmNQdHIgX19DVE9SX0VORF9fW107DQorDQorLyoqDQorICoNCisgKiBAYnJpZWYgSW52b2tlIGFsbCBDKysgc3R5bGUgZ2xvYmFsIG9iamVjdCBjb25zdHJ1Y3RvcnMNCisgKg0KKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIHRoZQ0KKyAqIGFwcGxpY2F0aW9uJ3MgbWFpbigpLg0KKyAqLw0KK3ZvaWQgX19kb19nbG9iYWxfY3RvcnNfYXV4KHZvaWQpDQorew0KKyAgICB1bnNpZ25lZCBpbnQgbkN0b3JzOw0KKw0KKyAgICBuQ3RvcnMgPSAodW5zaWduZWQgaW50KV9fQ1RPUl9MSVNUX19bMF07DQorDQorICAgIHdoaWxlIChuQ3RvcnMgPj0gMSkNCisgICAgew0KKyAgICAgICAgX19DVE9SX0xJU1RfX1tuQ3RvcnMtLV0oKTsNCisgICAgfQ0KK30NCisNCit0eXBlZGVmIHZvaWQgKCpEdG9yRnVuY1B0cikodm9pZCk7DQorDQorZXh0ZXJuIER0b3JGdW5jUHRyIF9fRFRPUl9MSVNUX19bXTsNCitleHRlcm4gRHRvckZ1bmNQdHIgX19EVE9SX0VORF9fW107DQorDQorLyoqDQorICoNCisgKiBAYnJpZWYgSW52b2tlIGFsbCBDKysgc3R5bGUgZ2xvYmFsIG9iamVjdCBkZXN0cnVjdG9ycw0KKyAqDQorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiB0aGUNCisgKiBhcHBsaWNhdGlvbidzIG1haW4oKS4NCisgKi8NCit2b2lkIF9fZG9fZ2xvYmFsX2R0b3JzX2F1eCh2b2lkKQ0KK3sNCisgICAgdW5zaWduZWQgaW50IG5EdG9yczsNCisgICAgdW5zaWduZWQgaW50IGk7DQorDQorICAgIG5EdG9ycyA9ICh1bnNpZ25lZCBpbnQpX19EVE9SX0xJU1RfX1swXTsNCisgICAgaSA9IDA7DQorDQorICAgIHdoaWxlIChpIDw9IG5EdG9ycykNCisgICAgew0KKyAgICAgICAgX19EVE9SX0xJU1RfX1tpKytdKCk7DQorICAgIH0NCit9DQorDQordm9pZCAqX19kc29faGFuZGxlID0gMDsNCisNCisvKioNCisgKiBAYnJpZWYgUmVnaXN0ZXIgZGVzdHJ1Y3RvciBmb3IgYSBnbG9iYWwgb2JqZWN0DQorICoNCisgKiBAcGFyYW0gZGVzdHJ1Y3RvciB0aGUgZ2xvYmFsIG9iamVjdCBkZXN0cnVjdG9yIGZ1bmN0aW9uDQorICogQHBhcmFtIG9ianB0ciBnbG9iYWwgb2JqZWN0IHBvaW50ZXINCisgKiBAcGFyYW0gZHNvIER5bmFtaWMgU2hhcmVkIE9iamVjdCBoYW5kbGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMNCisgKg0KKyAqIEZ1bmN0aW9uIGRvZXMgbm90aGluZyBhdCB0aGUgbW9tZW50LCBhc3N1bWluZyB0aGUgZ2xvYmFsIG9iamVjdHMNCisgKiBkbyBub3QgbmVlZCB0byBiZSBkZWxldGVkDQorICoNCisgKiBAcmV0dXJuIE4vQQ0KKyAqLw0KK2ludCBfX2N4YV9hdGV4aXQodm9pZCAoKmRlc3RydWN0b3IpKHZvaWQgKiksIHZvaWQgKm9ianB0ciwgdm9pZCAqZHNvKQ0KK3sNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3R5cGVkZWYgdm9pZCAoKmZ1bmNfcHRyKSh2b2lkKTsNCisNCitleHRlcm4gZnVuY19wdHIgX19pbml0X2FycmF5X3N0YXJ0WzBdOw0KK2V4dGVybiBmdW5jX3B0ciBfX2luaXRfYXJyYXlfZW5kWzBdOw0KKw0KKy8qKg0KKyAqIEBicmllZiBFeGVjdXRlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHJlZmVyZW5jZWQgaW4gLmluaXRfYXJyYXkgc2VjdGlvbg0KKyAqDQorICogQHJldHVybiBOL0ENCisgKi8NCit2b2lkIF9fZG9faW5pdF9hcnJheV9hdXgodm9pZCkNCit7DQorICAgIGZvciAoZnVuY19wdHIgKmZ1bmMgPSBfX2luaXRfYXJyYXlfc3RhcnQ7DQorICAgICAgICAgZnVuYyA8IF9faW5pdF9hcnJheV9lbmQ7DQorICAgICAgICAgZnVuYysrKQ0KKyAgICB7DQorICAgICAgICAoKmZ1bmMpKCk7DQorICAgIH0NCit9DQorDQorLyoqDQorICogQGJyaWVmIFN0dWIgZm9yIHB1cmUgdmlydHVhbCBmdW5jdGlvbnMNCisgKg0KKyAqIFRoaXMgcm91dGluZSBpcyBuZWVkZWQgZm9yIGxpbmtpbmcgQysrIGNvZGUgdGhhdCB1c2VzIHB1cmUgdmlydHVhbA0KKyAqIGZ1bmN0aW9ucy4NCisgKg0KKyAqIEByZXR1cm4gTi9BDQorICovDQordm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwodm9pZCkNCit7DQorICAgIHdoaWxlICgxKQ0KKyAgICB7DQorICAgICAgICA7DQorICAgIH0NCit9DQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19zdGFydHVwLlMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjL3N0YXJ0dXAvYXJjX3N0YXJ0dXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjFlNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyYy9zdGFydHVwL2FyY19zdGFydHVwLlMKQEAgLTAsMCArMSwyNjYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfU1RBUlRVUA0KKyAqIFxicmllZiBhc3NlbWJseSBwYXJ0IG9mIHN0YXJ0dXAgcHJvY2Vzcw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfU1RBUlRVUA0KKyAqIEB7DQorICovDQorLyoqIEBjb25kIFNUQVJUVVBfQVNNICovDQorDQorI2RlZmluZSBfX0FTU0VNQkxZX18NCisjaW5jbHVkZSAiZW1iQVJDX0JTUF9jb25maWcuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisNCisuZmlsZSAiYXJjX3N0YXJ0dXAuUyINCisNCisud2VhayAgIF9mX3NkYXRhICAgICAgICAvKiBzdGFydCBvZiBzbWFsbCBkYXRhLCBkZWZpbmVkIGluIGxpbmsgc2NyaXB0ICovDQorLndlYWsgICBpbml0X2hhcmR3YXJlX2hvb2sgIC8qIGFwcCBoYXJkd2FyZSBpbml0IGhvb2sgKi8NCisud2VhayAgIGluaXRfc29mdHdhcmVfaG9vayAgLyogYXBwIHNvZnR3YXJlIGluaXQgaG9vayAqLw0KKw0KKy5leHRlcm4gYm9hcmRfbWFpbg0KKy5leHRlcm4gZXhjX2VudHJ5X3RhYmxlDQorDQorLyogaW5pdGlhbCB2ZWN0b3IgdGFibGUgKi8NCisuc2VjdGlvbiAuaW5pdF92ZWN0b3IsICJhIg0KKy5sb25nIF9hcmNfcmVzZXQNCisuc2VjdGlvbiAuaW5pdF9ib290c3RyYXAsICJheCINCisuZ2xvYmFsIF9hcmNfcmVzZXQNCisuZ2xvYmFsIF9zdGFydA0KKy5hbGlnbiA0DQorX3N0YXJ0Og0KK19hcmNfcmVzZXQ6DQorX2FyY19yZXNldF9zdGFnZTE6DQora2ZsYWcgICBTVEFUVVMzMl9SRVNFVF9WQUxVRQ0KKw0KKy8qIFNUQUdFIDEgKi8NCisNCisvKiBuZWNlc3NhcnkgaGFyZHdhcmUgc2hvdWxkIGJlIGRvbmUgZmlyc3QgdG8gc3BlZWQgdXAgaW5pdGlhbGl6YXRpb24NCisgICAgMS4gc3lzdGVtIGNsaw0KKyAgICAyLiBtZW0gY29udHJvbGxlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgYWNjZXNzIHRvIGV4dGVybmFsDQorICAgIG1lbS4NCisgICAgMy4gb3RoZXJzDQorKi8NCitfYXJjX2NhY2hlX2luaXRfc3RhcnQ6DQorbHIgIHIwLCBbQVVYX0JDUl9EX0NBQ0hFXQ0KK2NtcCByMCwgMg0KKy8qIGludmFsaWRhdGUgZGNhY2hlICovDQoramxlIF9hcmNfaWNhY2hlX2luaXQNCittb3YgcjAsIDENCitzciAgcjAsIFtBVVhfRENfSVZEQ10NCitzciAgcjAsIFtBVVhfRENfQ1RSTF0NCitfYXJjX2ljYWNoZV9pbml0Og0KK2xyICByMCwgW0FVWF9CQ1JfSV9DQUNIRV0NCitjbXAgcjAsIDINCitqbGUgX2FyY19jYWNoZV9pbml0X2VuZA0KKy8qIGludmFsaWRhdGUgaWNhY2hlICovDQorbW92IHIwLCAxDQorc3IgIHIwLCBbQVVYX0lDX0lWSUNdDQorbm9wX3MNCitub3Bfcw0KK25vcF9zDQorc3IgIHIwLCBbQVVYX0lDX0NUUkxdDQorDQorX2FyY19jYWNoZV9pbml0X2VuZDoNCittb3YgcjAsIGluaXRfaGFyZHdhcmVfaG9vaw0KK2NtcCByMCwgMA0KK2psbmUgICAgW3IwXQ0KKw0KKy8qIFNUQUdFIDI6IGluaXQgbmVjZXNzYXJ5IHJlZ2lzdGVycyAqLw0KKw0KK19hcmNfcmVzZXRfc3RhZ2UyOg0KK21vdiByMCwgMA0KKw0KKy8qIGludGVycnVwdCByZWxhdGVkIGluaXQgKi8NCitzciAgcjAsIFtBVVhfSVJRX0FDVF0NCitzciAgcjAsIFtBVVhfSVJRX0NUUkxdDQorc3IgIHIwLCBbQVVYX0lSUV9ISU5UXQ0KKw0KKy8qIHVzZSB0aGUgbmV3IHZlY3RvciB0YWJsZSB0byByZXBsYWNlIHRoZSBvbGQgb25lICovDQorI2lmIGRlZmluZWQoQVJDX0ZFQVRVUkVfU0VDX1BSRVNFTlQpICYmIChTRUNVUkVTSElFTERfVkVSU0lPTiA8IDIpDQorc3IgIGV4Y19lbnRyeV90YWJsZSwgW0FVWF9JTlRfVkVDVF9CQVNFX1NdDQorI2Vsc2UNCitzciAgZXhjX2VudHJ5X3RhYmxlLCBbQVVYX0lOVF9WRUNUX0JBU0VdDQorI2VuZGlmDQorDQorLyogaW5pdCBzdGFjayAqLw0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPj0gMTYgJiYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID4gMSAmJiBBUkNfRkVBVFVSRV9GSVJRID09IDENCisjaWYgX1NUQUNLU0laRSA8IDUxMg0KKyNlcnJvciAibm90IGVub3VnaCBzdGFjayBzaXplIGZvciBpcnEgYW5kIGZpcnEiDQorI2VuZGlmDQorDQorLyogc3dpdGNoIHRvIHJlZ2lzdGVyIGJhbmsxICovDQorbHIgICAgICByMCwgW0FVWF9TVEFUVVMzMl0NCitiaWMgICAgIHIwLCByMCwgMHg3MDAwMA0KK29yICAgICAgcjAsIHIwLCAweDEwMDAwDQora2ZsYWcgICByMA0KKy8qIHNldCBzcCwgZ3AsIGZwIGluIGJhbmsxICovDQorbW92ICAgICBzcCwgX2Vfc3RhY2sNCittb3YgICAgIGdwLCBfZl9zZGF0YQ0KK21vdiAgICAgZnAsIDANCisvKiBjb21lIGJhY2sgdG8gYmFuazAgKi8NCitsciAgICAgIHIwLCBbQVVYX1NUQVRVUzMyXQ0KK2JpYyAgICAgcjAsIHIwLCAweDcwMDAwDQora2ZsYWcgICByMA0KK21vdiBzcCwgX2Vfc3RhY2sgLSAyNTYNCisjZWxzZQ0KK21vdiBzcCwgX2Vfc3RhY2sgICAgLyogaW5pdCBzdGFjayBwb2ludGVyICovDQorI2VuZGlmDQorbW92IGdwLCBfZl9zZGF0YSAgICAvKiBpbml0IHNtYWxsLWRhdGEgYmFzZSByZWdpc3RlciAqLw0KK21vdiBmcCwgMCAgICAgICAvKiBpbml0IGZwIHJlZ2lzdGVyICovDQorDQorX2FyY19yZXNldF9zdGFnZTM6DQorX3MzX2NvcHlfdGV4dDoNCittb3YgcjAsIF9mX3RleHQNCittb3YgcjEsIF9sb2FkX2FkZHJfdGV4dA0KK2NtcCByMCwgcjENCisNCisvKiBpZiBsb2FkIGFkZHIgPT0gcnVuIGFkZHIsIG5vIG5lZWQgdG8gY29weSAqLw0KK2plcSBfczNfY29weV9yb2RhdGENCittb3YgcjMsIF9lX3RleHQNCitfczNfY29weV90ZXh0X2xvb3A6DQorbGQuYWIgICByMiwgW3IxLCA0XQ0KK3N0LmFiICAgcjIsIFtyMCwgNF0NCitjbXAgcjAsIHIzDQoramx0IF9zM19jb3B5X3RleHRfbG9vcA0KK19zM19jb3B5X3JvZGF0YToNCittb3YgcjAsIF9mX3JvZGF0YQ0KK21vdiByMSwgX2xvYWRfYWRkcl9yb2RhdGENCitjbXAgcjAsIHIxDQorDQorLyogaWYgbG9hZCBhZGRyID09IHJ1biBhZGRyLCBubyBuZWVkIHRvIGNvcHkgKi8NCitqZXEgX3MzX2NvcHlfZGF0YQ0KK21vdiByMywgX2Vfcm9kYXRhDQorX3MzX2NvcHlfcm9kYXRhX2xvb3A6DQorbGQuYWIgICByMiwgW3IxLCA0XQ0KK3N0LmFiICAgcjIsIFtyMCwgNF0NCitjbXAgcjAsIHIzDQoramx0IF9zM19jb3B5X3JvZGF0YV9sb29wDQorX3MzX2NvcHlfZGF0YToNCittb3YgcjAsIF9mX2RhdGENCittb3YgcjEsIF9sb2FkX2FkZHJfZGF0YQ0KK2NtcCByMCwgcjENCitqZXEgX3MzX2NsZWFyX2Jzcw0KKw0KKy8qIGlmIGxvYWQgYWRkciA9PSBydW4gYWRkciwgbm8gbmVlZCB0byBjb3B5ICovDQorbW92IHIzLCBfZV9kYXRhDQorX3MzX2NvcHlfZGF0YV9sb29wOg0KK2xkLmFiICAgcjIsIFtyMSwgNF0NCitzdC5hYiAgIHIyLCBbcjAsIDRdDQorY21wIHIwLCByMw0KK2psdCBfczNfY29weV9kYXRhX2xvb3ANCitfczNfY2xlYXJfYnNzOg0KK21vdiByMCwgX2ZfYnNzDQorbW92IHIxLCBfZV9ic3MNCitjbXAgcjAsIHIxDQoramdlIF9hcmNfcmVzZXRfY2FsbF9tYWluDQorbW92IHIyLCAwDQorX3MzX2NsZWFyX2Jzc19sb29wOg0KK3N0LmFiICAgcjIsIFtyMCwgNF0NCitjbXAgcjAsIHIxDQoramx0IF9zM19jbGVhcl9ic3NfbG9vcA0KKw0KKy8qIFNUQUdFIDM6IGdvIHRvIG1haW4gKi8NCisNCitfYXJjX3Jlc2V0X2NhbGxfbWFpbjoNCisNCisvKiBcdG9kbyBhZGQgY3BwIGluaXQgaGVyZSAqLw0KK21vdiByMCwgaW5pdF9zb2Z0d2FyZV9ob29rDQorY21wIHIwLCAwDQoramxuZSAgICBbcjBdDQorLyogYm9hcmQgbGV2ZWwgbGlicmFyeSBpbml0ICovDQorI2lmZGVmICBMSUJfU0VDVVJFU0hJRUxEDQoramwgIHNlY3VyZXNoaWVsZF9zdGFydA0KKyNlbHNlDQorLyogZWFybHkgaW5pdCBvZiBpbnRlcnJ1cHQgYW5kIGV4Y2VwdGlvbiAqLw0KK2psICBleGNfaW50X2luaXQNCisjZW5kaWYNCisvKiBpbml0IGNhY2hlICovDQoramwgIGFyY19jYWNoZV9pbml0DQorI2lmIGRlZmluZWQoX19NV19fKQ0KK2psICBfaW5pdA0KKyNlbGlmIGRlZmluZWQoX19HTlVfXykNCitqbCAgX19kb19nbG9iYWxfY3RvcnNfYXV4DQoramwgIF9fZG9faW5pdF9hcnJheV9hdXgNCisjZW5kaWYNCitqbCAgYm9hcmRfbWFpbiAgLyogYm9hcmQtbGV2ZWwgbWFpbiAqLw0KKyNpZiBkZWZpbmVkKF9fTVdfXykNCitqbCAgX2ZpbmkNCisjZWxpZiBkZWZpbmVkKF9fR05VX18pDQoramwgIF9fZG9fZ2xvYmFsX2R0b3JzX2F1eA0KKyNlbmRpZg0KKy5nbG9iYWwgX2V4aXRfbG9vcA0KKy5nbG9iYWwgX2V4aXRfaGFsdA0KKy5hbGlnbiA0DQorX2V4aXRfaGFsdDoNCitfZXhpdF9sb29wOg0KK2ZsYWcgICAgMHgxDQorbm9wDQorbm9wDQorbm9wDQorYiAgIF9leGl0X2xvb3ANCisNCisjaWYgZGVmaW5lZChfX01XX18pDQorLmdsb2JhbCBfaW5pdCwgX2ZpbmkNCisuc2VjdGlvbiAiLmluaXQiLCB0ZXh0DQorX2luaXQ6DQorLmNmYV9iZiBfaW5pdA0KK3B1c2ggICAgJSBibGluaw0KKy5jZmFfcHVzaCAgIHsgJSBibGlua30NCisNCisuc2VjdGlvbiAiLmluaXQkOTk5OTk5IiwgdGV4dCwgMSwgMiwgY2hlY2tfdGV4dF9hbGlnbiA9IDANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcCAlIGJsaW5rDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2ZhX3BvcCAgICB7ICUgYmxpbmt9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICAgWyAlIGJsaW5rXQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNmYV9lZg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNlY3Rpb24gIi5maW5pIiwgdGV4dA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Zpbmk6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2ZhX2JmIF9maW5pDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoICAgICUgYmxpbmsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jZmFfcHVzaCAgIHsgJSBibGlua30NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZWN0aW9uICIuZmluaSQ5OTk5OTkiLCB0ZXh0LCAxLCAyLCBjaGVja190ZXh0X2FsaWduID0gMA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3AgJSBibGluaw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2ZhX3BvcCAgICB7ICUgYmxpbmt9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogICBbICUgYmxpbmtdDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jZmFfZWYNCisjZW5kaWYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIEBlbmRjb25kICovDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiB9QCovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyY19jb3JlX2NvbmZpZy5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2FyY19jb3JlX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTM2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYXJjX2NvcmVfY29uZmlnLmgKQEAgLTAsMCArMSwyNTUgQEAKKy8qIEVNU0syLjMgQVJDIEVNMTFEICovDQorDQorI2lmbmRlZiBfX2NvcmVfY29uZmlnX2gNCisjZGVmaW5lIF9fY29yZV9jb25maWdfaCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfY2lyX2lkZW50aXR5ICAgIDB4MDAwMDAwNDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl9pZGVudGl0eV9jaGlwaWQgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfY2lyX2lkZW50aXR5X2FyY251bSAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfaWRlbnRpdHlfYXJjdmVyIDY3DQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfaWRlbnRpdHlfZmFtaWx5IDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl9pZGVudGl0eV9jb3JldmVyICAgIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl9hdXhfZGNjbSAgICAweDgwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYmNyX3ZlciAweDAwMDAwMDAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYmNyX3Zlcl92ZXJzaW9uIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl92ZWNiYXNlX2FjX2J1aWxkICAgIDB4MDAwMDAwMTANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9yZl9idWlsZCAgICAweDAwMDBjOTAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGRfdmVyc2lvbiAgICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGRfcCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3JmX2J1aWxkX2UgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9yZl9idWlsZF9yICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGRfYiAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3JmX2J1aWxkX2QgIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkICAgMHgwMDIxNTEwNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfdmVyc2lvbiAgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX2Fzc29jIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX2NhcGFjaXR5ICA1DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9ic2l6ZSAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9mbCAgICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9pb2MgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9jcCAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF91IDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX2N5Y2xlcyAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZGNjbV9idWlsZCAgMHgwMDAxMDgwNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGRfdyAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZGNjbV9idWlsZF9jeWNsZXMgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZGNjbV9idWlsZF9pbnRlcmxlYXZlICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGRfc2l6ZTEgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGRfc2l6ZTAgICAgOA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RjY21fYnVpbGRfdmVyc2lvbiAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkIDB4MDAwMTAzMDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9zcDEgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3NwMCAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfcDEgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9wMCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3N0MSAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfc3QwIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9ydGMgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3J0c2NfdmVyICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF9ydHNjICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl90aW1lcl9idWlsZF90MCAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3RpbWVyX2J1aWxkX3QxICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfdGltZXJfYnVpbGRfdmVyc2lvbiA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYXBfYnVpbGQgICAgMHgwMDAwMDQwNQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2FwX2J1aWxkX3ZlcnNpb24gICAgNQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2FwX2J1aWxkX3R5cGUgICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZCAgIDB4MDAxMzUxMDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2Fzc29jIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX3ZlcnNpb24gICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZF9jYXBhY2l0eSAgNQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfYnNpemUgMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfZmwgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfZCAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaWNjbV9idWlsZCAgMHgwMDAwMDgwNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ljY21fYnVpbGRfaWNjbTFfc2l6ZTEgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pY2NtX2J1aWxkX2ljY20wX3NpemUxICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaWNjbV9idWlsZF9pY2NtMV9zaXplMCAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ljY21fYnVpbGRfaWNjbTBfc2l6ZTAgIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pY2NtX2J1aWxkX3ZlcnNpb24gIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl94eV9idWlsZCAgICAweDAwMDAxNTIwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfeHlfYnVpbGRfbWVtc2l6ZSAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfeHlfYnVpbGRfaW50ZXJsZWF2ZWQgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3h5X2J1aWxkX2NvbmZpZyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfeHlfYnVpbGRfdmVyc2lvbiAgICAzMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RzcF9idWlsZCAgIDB4MDAwMDM1MjENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9kc3BfYnVpbGRfd2lkZSAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RzcF9idWlsZF9pdHVfcGEgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RzcF9idWlsZF9hY2Nfc2hpZnQgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RzcF9idWlsZF9jb21wICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZHNwX2J1aWxkX2RpdnNxcnQgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZHNwX2J1aWxkX3ZlcnNpb24gICAzMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX211bHRpcGx5X2J1aWxkICAweDAwMDIyMjA2DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbXVsdGlwbHlfYnVpbGRfdmVyc2lvbjE2eDE2IDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9tdWx0aXBseV9idWlsZF9kc3AgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9tdWx0aXBseV9idWlsZF9jeWMgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9tdWx0aXBseV9idWlsZF90eXBlIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9tdWx0aXBseV9idWlsZF92ZXJzaW9uMzJ4MzIgNg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3N3YXBfYnVpbGQgIDB4MDAwMDAwMDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9zd2FwX2J1aWxkX3ZlcnNpb24gIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9ub3JtX2J1aWxkICAweDAwMDAwMDAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3Jfbm9ybV9idWlsZF92ZXJzaW9uICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfbWlubWF4X2J1aWxkICAgIDB4MDAwMDAwMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9taW5tYXhfYnVpbGRfdmVyc2lvbiAgICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYmFycmVsX2J1aWxkICAgIDB4MDAwMDAzMDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9iYXJyZWxfYnVpbGRfdmVyc2lvbiAgICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYmFycmVsX2J1aWxkX3NoaWZ0X29wdGlvbiAgIDMNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnICAweDEyNDQ3NDAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19yZXMxIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX2QgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfcmVzMiAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19mICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX2MgICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfbCAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19uICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pc2FfY29uZmlnX2EgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfYiAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19hZGRyX3NpemUgICAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfbHBjX3NpemUgNw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfcGNfc2l6ZSAgNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lzYV9jb25maWdfdmVyc2lvbiAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3N0YWNrX3JlZ2lvbl9idWlsZCAgMHgwMDAwMDAwMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZCAgIDB4MDEwMDBmMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfZGEgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9kZCAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX2RjICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfZGYgICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9kcCAgICAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX2ZkICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfZm0gICAgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9zZCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX3NjICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9mcHVfYnVpbGRfc2YgICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2ZwdV9idWlsZF9zcCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZnB1X2J1aWxkX3ZlcnNpb24gICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYnNfYnVpbGQgICAgMHgwMDAwMDAwMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2JzX2J1aWxkX3ZlcnNpb24gICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2FndV9idWlsZCAgIDB4MDE5ODhjMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hZ3VfYnVpbGRfYWNjb3JkaWFuIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hZ3VfYnVpbGRfd2Jfc2l6ZSAgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hZ3VfYnVpbGRfbnVtX21vZGlmaWVyICAyNA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2FndV9idWlsZF9udW1fb2Zmc2V0ICAgIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9hZ3VfYnVpbGRfbnVtX2FkZHIgIDEyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfYWd1X2J1aWxkX3ZlcnNpb24gICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZCAgMHgwMDBhMDEwMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfaW50X2NmZyAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfZmlmbyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZF9jaGFuX21lbSAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZF9jaGFubmVscyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZF92ZXJzaW9uICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfY29yZV9jb25maWcgMHgwMDAwMDEwMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2NvcmVfY29uZmlnX3R1cmJvX2Jvb3N0IDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9jb3JlX2NvbmZpZ192ZXJzaW9uIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pcnFfYnVpbGQgICAweDEzMTIxNjAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXJxX2J1aWxkX3JheiAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9pcnFfYnVpbGRfZiAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfaXJxX2J1aWxkX3AgMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lycV9idWlsZF9leHRzICAxOA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lycV9idWlsZF9pcnFzICAyMg0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX2lycV9idWlsZF92ZXJzaW9uICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3BjdF9idWlsZCAgIDB4MDgwODAxMDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9wY3RfYnVpbGRfdmVyc2lvbiAgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9wY3RfYnVpbGRfcyAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfcGN0X2J1aWxkX2kgMA0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3BjdF9idWlsZF9jIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Jjcl9jY19idWlsZCAgICAweDAwNmYwMDA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfY2NfYnVpbGRfdmVyc2lvbiAgICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3JfY2NfYnVpbGRfY2MgMTExDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iY3Jfc21hcnRfYnVpbGQgMHgwMDAwMjAwMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3NtYXJ0X2J1aWxkX3ZlcnNpb24gMw0KKyNkZWZpbmUgY29yZV9jb25maWdfYmNyX3NtYXJ0X2J1aWxkX3N0YWNrX3NpemUgIDgNCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl9hdXhfaWNjbSAgICAweDAwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19jaXJfZG1wX3BlcmlwaGVyYWwgIDB4ZjAwMDAwMDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2Npcl95Y2NtX2Jhc2UgICAweGUwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19mYW1pbHkgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2NvcmVfdmVyc2lvbiAgICAzDQorI2RlZmluZSBjb3JlX2NvbmZpZ19mYW1pbHlfbmFtZSAiYXJjdjJlbSINCisjZGVmaW5lIGNvcmVfY29uZmlnX3JnZl9udW1fYmFua3MgICAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19yZ2ZfYmFua2VkX3JlZ3MgMzINCisjZGVmaW5lIGNvcmVfY29uZmlnX3JnZl9udW1fd3JfcG9ydHMgICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfZW5kaWFuICAibGl0dGxlIg0KKyNkZWZpbmUgY29yZV9jb25maWdfZW5kaWFuX2xpdHRsZSAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2VuZGlhbl9iaWcgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2xwY19zaXplICAgIDMyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19wY19zaXplIDMyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19hZGRyX3NpemUgICAzMg0KKyNkZWZpbmUgY29yZV9jb25maWdfdW5hbGlnbmVkICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfY29kZV9kZW5zaXR5ICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2Rpdl9yZW0gInJhZGl4MiINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Rpdl9yZW1fcmFkaXgyICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ190dXJib19ib29zdCAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19zd2FwICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2JpdHNjYW4gMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfbXB5X29wdGlvbiAgIm1weWQiDQorI2RlZmluZSBjb3JlX2NvbmZpZ19tcHlfb3B0aW9uX251bSAgOA0KKyNkZWZpbmUgY29yZV9jb25maWdfc2hpZnRfYXNzaXN0ICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2JhcnJlbF9zaGlmdGVyICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kc3AgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZHNwMiAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kc3BfY29tcGxleCAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kc3BfZGl2c3FydCAicmFkaXgyIg0KKyNkZWZpbmUgY29yZV9jb25maWdfZHNwX2RpdnNxcnRfcmFkaXgyICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kc3BfaXR1IDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2RzcF9hY2NzaGlmdCAgICAiZnVsbCINCisjZGVmaW5lIGNvcmVfY29uZmlnX2RzcF9hY2NzaGlmdF9mdWxsICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYWd1X2xhcmdlICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfYWd1X3diX2RlcHRoICAgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2FndV9hY2NvcmQgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX3h5ICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ194eV9jb25maWcgICAiZGNjbV95Ig0KKyNkZWZpbmUgY29yZV9jb25maWdfeHlfY29uZmlnX2RjY21feSAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ194eV9zaXplIDgxOTINCisjZGVmaW5lIGNvcmVfY29uZmlnX3h5X3NpemVfS00gICI4SyINCisjZGVmaW5lIGNvcmVfY29uZmlnX3h5X2ludGVybGVhdmUgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ194eV95X2Jhc2UgICAweGUwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19iaXRzdHJlYW0gICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19mcHVzX2RpdiAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19mcHVfbWFjIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2ZwdWRhICAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfZnB1c19tcHlfc2xvdyAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2ZwdXNfZGl2X3Nsb3cgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ190aW1lcjAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX3RpbWVyMF9sZXZlbCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ190aW1lcjBfdmVjdG9yICAgMTYNCisjZGVmaW5lIGNvcmVfY29uZmlnX3RpbWVyMSAgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfdGltZXIxX2xldmVsICAgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX3RpbWVyMV92ZWN0b3IgICAxNw0KKyNkZWZpbmUgY29yZV9jb25maWdfYWN0aW9uX3BvaW50cyAgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX3N0YWNrX2NoZWNrIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX3NtYXJ0X3N0YWNrX2VudHJpZXMgOA0KKyNkZWZpbmUgY29yZV9jb25maWdfaW50ZXJydXB0c19wcmVzZW50ICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX251bWJlciAgIDIyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX3ByaW9yaXRpZXMgICA0DQorI2RlZmluZSBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX2V4dGVybmFscyAgICAxOA0KKyNkZWZpbmUgY29yZV9jb25maWdfaW50ZXJydXB0cyAgMjINCisjZGVmaW5lIGNvcmVfY29uZmlnX2ludGVycnVwdF9wcmlvcml0aWVzICAgIDQNCisjZGVmaW5lIGNvcmVfY29uZmlnX2V4dF9pbnRlcnJ1cHRzICAxOA0KKyNkZWZpbmUgY29yZV9jb25maWdfaW50ZXJydXB0c19maXJxIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2ludGVycnVwdHNfYmFzZSAweDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2RjYWNoZV9wcmVzZW50ICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kY2FjaGVfc2l6ZSAxNjM4NA0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNhY2hlX2xpbmVfc2l6ZSAgICAzMg0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNhY2hlX3dheXMgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfZGNhY2hlX2ZlYXR1cmUgIDINCisjZGVmaW5lIGNvcmVfY29uZmlnX2ljYWNoZV9wcmVzZW50ICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2FjaGVfc2l6ZSAxNjM4NA0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNhY2hlX2xpbmVfc2l6ZSAgICA2NA0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNhY2hlX3dheXMgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNhY2hlX2ZlYXR1cmUgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2RjY21fcHJlc2VudCAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kY2NtX3NpemUgICAweDEwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kY2NtX2Jhc2UgICAweDgwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kY2NtX2ludGVybGVhdmUgMQ0KKyNkZWZpbmUgY29yZV9jb25maWdfaWNjbV9wcmVzZW50ICAgIDENCisjZGVmaW5lIGNvcmVfY29uZmlnX2ljY20wX3ByZXNlbnQgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2NtX3NpemUgICAweDEwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2NtMF9zaXplICAweDEwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2NtX2Jhc2UgICAweDAwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19pY2NtMF9iYXNlICAweDAwMDAwMDAwDQorI2RlZmluZSBjb3JlX2NvbmZpZ19wY3RfY291bnRlcnMgICAgOA0KKyNkZWZpbmUgY29yZV9jb25maWdfZG1hYyAgICAxDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kbWFjX2NoYW5uZWxzICAgMg0KKyNkZWZpbmUgY29yZV9jb25maWdfZG1hY19yZWdpc3RlcnMgIDANCisjZGVmaW5lIGNvcmVfY29uZmlnX2RtYWNfZmlmb19kZXB0aCAyDQorI2RlZmluZSBjb3JlX2NvbmZpZ19kbWFjX2ludF9jb25maWcgInNpbmdsZV9pbnRlcm5hbCINCisjZGVmaW5lIGNvcmVfY29uZmlnX2Nsb2NrX3NwZWVkIDIwDQorI2VuZGlmIC8qIF9fY29yZV9jb25maWdfaCAqLw0KKw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9ib2FyZC5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3OGMyNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9ib2FyZC5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDEtMjANCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJib2FyZC9ib2FyZC5oIg0KKyNpbmNsdWRlICJjb21tb24vY29uc29sZV9pby5oIg0KKw0KK3R5cGVkZWYgc3RydWN0IG1haW5fYXJncw0KK3sNCisgICAgaW50IGFyZ2M7DQorICAgIGNoYXIgKmFyZ3ZbXTsNCit9IE1BSU5fQVJHUzsNCisNCisvKiogQ2hhbmdlIHRoaXMgdG8gcGFzcyB5b3VyIG93biBhcmd1bWVudHMgdG8gbWFpbiBmdW5jdGlvbnMgKi8NCitNQUlOX0FSR1Mgc19tYWluX2FyZ3MgPSB7MSwgeyJtYWluIn19Ow0KKw0KK3N0YXRpYyB2b2lkIGVudGVyX3RvX21haW4oTUFJTl9BUkdTICptYWluX2FyZykNCit7DQorICAgIGlmIChtYWluX2FyZyA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICAvKiBudWxsIG9yIGFsaWduZWQgbm90IHRvIDQgYnl0ZXMgKi8NCisgICAgICAgIF9hcmNfZ290b19tYWluKDAsIE5VTEwpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgX2FyY19nb3RvX21haW4obWFpbl9hcmctPmFyZ2MsIG1haW5fYXJnLT5hcmd2KTsNCisgICAgfQ0KK30NCisNCit2b2lkIGJvYXJkX21haW4odm9pZCkNCit7DQorICAgIC8qIGJvYXJkIGxldmVsIGhhcmR3YXJlIGluaXQgKi8NCisgICAgYm9hcmRfaW5pdCgpOw0KKyAgICB4cHJpbnRmX3NldHVwKCk7DQorICAgIGNwdV91bmxvY2soKTsgICAvKiB1bmxvY2sgY3B1IHRvIGxldCBpbnRlcnJ1cHQgd29yayAqLw0KKyAgICBlbnRlcl90b19tYWluKCZzX21haW5fYXJncyk7DQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9ib2FyZC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2JvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDBiNTJkMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9ib2FyZC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDctMDMNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICoNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwCUJPQVJEX0NPTU1PTg0KKyAqIFxicmllZgljb21tb24gYm9hcmQgaGVhZGVyIGZpbGUNCisgKiBcZGV0YWlscw0KKyAqIC0gVGhpcyBoZWFkZXIgZmlsZSB3aWxsIGNvbnRhaW4gYm9hcmQgcmVsYXRlZCBzZXR0aW5ncyBmb3IgZGlmZmVyZW50IGJvYXJkcy4NCisgKiAtIEVhY2ggYm9hcmQgY29uZmlndXJhdGlvbnMgYXJlIHB1dCBpbiBpdHMgb3duIGhlYWRlciBmaWxlLCBsaWtlIGVtc2svZW1zay5oDQorICogLSBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24sIHlvdSBuZWVkIHRvIGdvIHRvIHJlbGF0ZWQgaGVhZGVyIGZpbGUsIGUuZy4NCisgKiAgIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBFTVNLIGJvYXJkIHNldHRpbmdzLCB5b3UgbmVlZCB0byBnbyB0byBlbXNrL2Vtc2suaA0KKyAqIC0gSW4gZW1iQVJDIDIwMTUuMDUsIGFsbCB0aGUgc2V0dGluZ3MgYXJlIGluIHRoaXMgYm9hcmQuaCwgYnV0IG5vdyBpdCBtb3ZlZCB0byByZWxhdGVkIGJvYXJkIGhlYWRlciBmaWxlDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQk9BUkRfQ09NTU9ODQorICogQHsNCisgKi8NCisjaWZuZGVmIF9FTUJBUkNfQk9BUkRfSF8NCisjZGVmaW5lIF9FTUJBUkNfQk9BUkRfSF8NCisNCisjaW5jbHVkZSAiZW1iQVJDX0JTUF9jb25maWcuaCINCisvKioNCisgKiBcdG9kbwlhZGQgY29tbWVudHMgYW5kIGRvY3VtZW50cyB0byBkZXNjcmliZSB0aGUgbWFjcm9zDQorICogXG5vdGUgCXRoZSBmb2xsb3dpbmcgbWFjcm9zIG11c3QgdXNlIHRoZSBzYW1lIG5hbWUsIGJlY2F1c2UNCisgKgl0aGV5IGFyZSB1c2VkIGJ5IG1pZGRsZXdhcmUgYW5kIG90aGVyIGFwcGxpY2F0aW9ucw0KKyAqLw0KKy8qKiBoZXJlIGlzIGEgc2FtcGxlIG9mIEVNU0sgYm9hcmQgcmVzb3VyY2UgZGVmaW5pdGlvbnMgKi8NCisjaWZkZWYgQk9BUkRfRU1TSw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2suaCINCisjZW5kaWYgLyogQk9BUkRfRU1TSyAqLw0KKw0KKy8qKiB5b3UgY2FuIGFkZCB5b3VyIGJvYXJkIGNvbmZpZ3VyYXRpb24gYXMgQk9BUkRfRU1TSyBkZWZpbmVkIHVwICovDQorDQorI2VuZGlmIC8qIF9FTUJBUkNfQk9BUkRfSF8gKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0NPTU1PTiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX2luaXQuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWYxZjllCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfaW5pdC5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTMxDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGRlZmdyb3VwICAgIEJPQVJEX0VNU0tfQ09NTU9OX0lOSVQgIEVNU0sgQ29tbW9uIEluaXQgTW9kdWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT04NCisgKiBcYnJpZWYgICBFTVNLIEJvYXJkIENvbW1vbiBJbml0IE1vZHVsZQ0KKyAqIFxkZXRhaWxzDQorICogICAgICBFTVNLIHRpbWVyL2dwaW8vaW50ZXJydXB0IGluaXQgcHJvY2Vzcy4gRGV2aWNlLWRyaXZlciBpbnN0YWxsYXRpb24gaXMgZG9uZSB3aGlsZQ0KKyAqICBnZXR0aW5nIHRoZSBkZXZpY2Ugb2JqZWN0IGZvciB0aGUgZmlyc3QgdGltZS4NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX0lOSVQNCisgKiBcYnJpZWYgICBjb21tb24gZW1zayBpbml0IG1vZHVsZQ0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0NPTU1PTl9JTklUDQorICogQHsNCisgKi8NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY190aW1lci5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2suaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9jb21tb24vZW1za190aW1lci5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2NvbW1vbi9tdXguaCINCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfRE1QX1BFUklQSEVSQUwNCisjZGVmaW5lIFBFUklQSEVSQUxfQkFTRSAgICAgQVJDX0ZFQVRVUkVfRE1QX1BFUklQSEVSQUwNCisjZWxzZQ0KKyNkZWZpbmUgUEVSSVBIRVJBTF9CQVNFICAgICBfYXJjX2F1eF9yZWFkKEFVWF9ETVBfUEVSSVBIRVJBTCkNCisjZW5kaWYNCisNCisvKioNCisgKiBcYnJpZWYgICBlbXNrLXJlbGF0ZWQgbXV4IGlvIGluaXQNCisgKi8NCitzdGF0aWMgdm9pZCBlbXNrX211eF9pbml0KHZvaWQpDQorew0KKyAgICBNVVhfUkVHICptdXhfcmVnczsNCisNCisgICAgbXV4X3JlZ3MgPSAoTVVYX1JFRyAqKShQRVJJUEhFUkFMX0JBU0UgfCBSRUxfUkVHQkFTRV9QSU5NVVgpOw0KKyAgICBtdXhfaW5pdChtdXhfcmVncyk7DQorDQorICAgIC8qKg0KKyAgICAgKiArIFBsZWFzZSByZWZlciB0byBjb3JyZXNwb25kaW5nIEVNU0sgVXNlciBHdWlkZSBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24NCisgICAgICogICAtPiBBcHBlbmRpeDogQSAgSGFyZHdhcmUgRnVuY3Rpb25hbCBEZXNjcmlwdGlvbg0KKyAgICAgKiAgICAgIC0+IFBtb2RzIENvbmZpZ3VyYXRpb24gc3VtbWFyeQ0KKyAgICAgKiArIFNldCB1cCBwaW4tbXVsdGlwbGV4ZXIgb2YgYWxsIFBNT0QgY29ubmVjdGlvbnMNCisgICAgICogICAtIFBNMSBKMTogVXBwZXIgcm93IGFzIFVBUlQgMCwgbG93ZXIgcm93IGFzIFNQSSBTbGF2ZQ0KKyAgICAgKiAgIC0gUE0yIEoyOiBJSUMgMCBhbmQgcnVuL2hhbHQgc2lnbmFscw0KKyAgICAgKiAgIC0gUE0zIEozOiBHUElPIFBvcnQgQSBhbmQgUG9ydCBDDQorICAgICAqICAgLSBQTTQgSjQ6IElJQyAxIGFuZCBQb3J0IEQNCisgICAgICogICAtIFBNNSBKNTogVXBwZXIgcm93IGFzIFNQSSBNYXN0ZXIsIGxvd2VyIHJvdyBhcyBQb3J0IEENCisgICAgICogICAtIFBNNiBKNjogVXBwZXIgcm93IGFzIFNQSSBNYXN0ZXIsIGxvd2VyIHJvdyBhcyBQb3J0IEENCisgICAgICovDQorICAgIHNldF9wbW9kX211eChtdXhfcmVncywgUE0xX1VSX1VBUlRfMCB8IFBNMV9MUl9TUElfUyBcDQorICAgICAgICAgICAgICAgICB8IFBNMl9JMkNfSFJJICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICB8IFBNM19HUElPX0FDICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICB8IFBNNF9JMkNfR1BJT19EICAgICAgICBcDQorICAgICAgICAgICAgICAgICB8IFBNNV9VUl9TUElfTTEgfCBQTTVfTFJfR1BJT19BIFwNCisgICAgICAgICAgICAgICAgIHwgUE02X1VSX1NQSV9NMCB8IFBNNl9MUl9HUElPX0EpOw0KKw0KKyAgICAvKioNCisgICAgICogUE0xIHVwcGVyIHJvdyBhcyBVQVJUDQorICAgICAqIFVNNDpSWEQsIFVNMzpUWEQNCisgICAgICogVU0yOlJUU19OLCBVTTE6Q1RTX04NCisgICAgICovDQorICAgIHNldF91YXJ0X21hcChtdXhfcmVncywgMHg5Yyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIEJvYXJkIGluaXQgcm91dGluZSBNVVNUIGJlIGNhbGxlZCBpbiBlYWNoIGFwcGxpY2F0aW9uDQorICogXG5vdGUgICAgSXQgaXMgYmV0dGVyIHRvIGRpc2FibGUgaW50ZXJydXB0cyB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbg0KKyAqICByZW1lbWJlciB0byBlbmFibGUgaW50ZXJydXB0IHdoZW4geW91IHdhbnQgdG8gdXNlIHRoZW0NCisgKi8NCit2b2lkIGJvYXJkX2luaXQodm9pZCkNCit7DQorICAgIHRpbWVyX2luaXQoKTsNCisgICAgZW1za19tdXhfaW5pdCgpOw0KKyAgICBlbXNrX2dwaW9faW5pdCgpOw0KKyAgICBlbXNrX3RpbWVyX2luaXQoKTsNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9JTklUICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxZGYwZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9lbXNrX3RpbWVyLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMzENCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZGVmZ3JvdXAgICAgQk9BUkRfRU1TS19DT01NT05fVElNRVIgRU1TSyBDb21tb24gVGltZXIgTW9kdWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT04NCisgKiBcYnJpZWYgICBwcm92aWRlIGJhc2ljIGJvYXJkIHRpbWVyLXJlbGF0ZWQgZnVuY3Rpb25zDQorICogXGRldGFpbHMNCisgKiAgICAgIFByb3ZpZGUgYSAxIE1TIChkZWZhdWx0KSB0aW1lciBpbnRlcnJ1cHQsDQorICogIHByb3ZpZGUgYSA2NC1iaXQgY291bnRlciB2YWx1ZSAobm8gY2xlYXIpIGNvdW50IGluIHRoZSB0aW1lciBpbnRlcnJ1cHQsDQorICogIHByb3ZpZGUgTVMtcHJlY2lzaW9uIGRlbGF5LCB3aXRoIE9TIGVuYWJsZWQtc3VwcG9ydCBkZWxheQ0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fVElNRVINCisgKiBcYnJpZWYgICBwcm92aWRlIGVtc2sgYm9hcmQgdGltZXItcmVsYXRlZCBmdW5jdGlvbnMNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19DT01NT05fVElNRVINCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX3RpbWVyLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2suaCINCisNCisjZGVmaW5lIE1BWF9TWVNfQ09VTlRFUl9WQUxVRSAgICAgICAoMHhmZmZmZmZmZikNCisNCisjaWZuZGVmIEJPQVJEX1NZU19USU1FUl9IWg0KKyNkZWZpbmUgQk9BUkRfU1lTX1RJTUVSX0haICAgICAgKDEwMDApDQorI2VuZGlmDQorDQorLyoqIGVtc2sgYm9hcmQgdGltZXIgaW50ZXJydXB0IHJlc2V0IGNvdW50ICovDQorc3RhdGljIHVpbnQzMl90IGN5Y19oel9jb3VudCA9IChCT0FSRF9DUFVfQ0xPQ0sgLyBCT0FSRF9TWVNfVElNRVJfSFopOw0KKw0KKy8qKiBlbXNrIGJvYXJkIHRpbWVyIGNvdW50ZXIgaW4gdGltZXIgaW50ZXJydXB0ICovDQordm9sYXRpbGUgdWludDY0X3QgZ2xfZW1za19zeXNfaHpfY250ID0gMDsNCisvKiogZW1zayBib2FyZCAxbXMgY291bnRlciAqLw0KK3ZvbGF0aWxlIHVpbnQzMl90IGdsX2Vtc2tfbXNfY250ID0gMDsNCisNCisjZGVmaW5lIEhaX0NPVU5UX0NPTlYocHJlY2lzaW9uLCBiYXNlKSAgKChwcmVjaXNpb24pLyhiYXNlKSkNCisNCisvKioNCisgKiBcYnJpZWYgICBVcGRhdGUgdGltZXIgY291bnRlciBhbmQgb3RoZXIgTVMgcGVyaW9kIG9wZXJhdGlvbg0KKyAqICBpbiBjeWNsaW5nIGludGVycnVwdCBhbmQgbXVzdCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5LiBXaGVuIHRoZSBPUyB0aW1lcg0KKyAqICBpbnRlcnJ1cHQgaXMgaW4gY29uZmxpY3Qgd2l0aCB0aGUgYmFyZS1tZXRhbCB0aW1lciBpbnRlcnJ1cHQsDQorICogIHB1dCB0aGlzIGZ1bmN0aW9uIGludG8gdGhlIE9TIHRpbWVyIGludGVycnVwdA0KKyAqIFxwYXJhbVtpbl0gICBwcmVjaXNpb24gICBpbnRlcnJ1cHQtcGVyaW9kIHByZWNpc2lvbiBpbiBIeg0KKyAqLw0KK3ZvaWQgYm9hcmRfdGltZXJfdXBkYXRlKHVpbnQzMl90IHByZWNpc2lvbikNCit7DQorICAgIHN0YXRpYyB1aW50MzJfdCBzeXNfaHpfdXBkYXRlID0gMDsNCisgICAgc3RhdGljIHVpbnQzMl90IHN5c19tc191cGRhdGUgPSAwOw0KKyAgICB1aW50MzJfdCBoel9jb252ID0gMDsNCisNCisgICAgLyoqIGNvdW50IHN5cyBoeiAqLw0KKyAgICBoel9jb252ID0gSFpfQ09VTlRfQ09OVihwcmVjaXNpb24sIEJPQVJEX1NZU19USU1FUl9IWik7DQorICAgIHN5c19oel91cGRhdGUgKys7DQorDQorICAgIGlmIChzeXNfaHpfdXBkYXRlID49IGh6X2NvbnYpDQorICAgIHsNCisgICAgICAgIHN5c19oel91cGRhdGUgPSAwOw0KKyAgICAgICAgZ2xfZW1za19zeXNfaHpfY250ICsrOw0KKyAgICB9DQorDQorICAgIC8qKiBjb3VudCBtcyAqLw0KKyAgICBoel9jb252ID0gSFpfQ09VTlRfQ09OVihwcmVjaXNpb24sIEJPQVJEX1NZU19USU1FUl9NU19IWik7DQorICAgIHN5c19tc191cGRhdGUgKys7DQorDQorICAgIGlmIChzeXNfbXNfdXBkYXRlID49IGh6X2NvbnYpDQorICAgIHsNCisgICAgICAgIHN5c19tc191cGRhdGUgPSAwOw0KKyAgICAgICAgZ2xfZW1za19tc19jbnQgKys7DQorDQorICAgICAgICAvKiBubyBTRCBjYXJkIHN1cHBvcnQgKi8NCisgICAgICAgIC8vZW1za19zZGNhcmRfMW1zX3VwZGF0ZSgpOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGVtc2sgYmFyZS1tZXRhbCB0aW1lciBpbnRlcnJ1cHQuDQorICogIHRoZSBJbnRlcnJ1cHQgZnJlcXVlbmN5IGlzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIFxyZWYgQk9BUkRfU1lTX1RJTUVSX0haDQorICovDQorc3RhdGljIHZvaWQgZW1za190aW1lcl9pc3Iodm9pZCAqcHRyKQ0KK3sNCisgICAgdGltZXJfaW50X2NsZWFyKEJPQVJEX1NZU19USU1FUl9JRCk7DQorDQorICAgIGJvYXJkX3RpbWVyX3VwZGF0ZShCT0FSRF9TWVNfVElNRVJfSFopOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBpbml0IGJhcmUtbWV0YWwgZW1zayBib2FyZCB0aW1lciBhbmQgaW50ZXJydXB0DQorICogXGRldGFpbHMNCisgKiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIFxyZWYgYm9hcmRfaW5pdCwgYW5kDQorICogIGl0IGluaXRpYWxpemVzIHRoZSAxLU1TIHRpbWVyIGludGVycnVwdCBmb3IgYmFyZS1tZXRhbCBtb2RlDQorICovDQordm9pZCBlbXNrX3RpbWVyX2luaXQodm9pZCkNCit7DQorICAgIGlmICh0aW1lcl9wcmVzZW50KEJPQVJEX1NZU19USU1FUl9JRCkpDQorICAgIHsNCisgICAgICAgIGludF9kaXNhYmxlKEJPQVJEX1NZU19USU1FUl9JTlROTyk7IC8qIGRpc2FibGUgZmlyc3QgdGhlbiBlbmFibGUgKi8NCisgICAgICAgIGludF9oYW5kbGVyX2luc3RhbGwoQk9BUkRfU1lTX1RJTUVSX0lOVE5PLCBlbXNrX3RpbWVyX2lzcik7DQorICAgICAgICB0aW1lcl9zdGFydChCT0FSRF9TWVNfVElNRVJfSUQsIFRJTUVSX0NUUkxfSUUgfCBUSU1FUl9DVFJMX05ILCBjeWNfaHpfY291bnQpOyAvKiBzdGFydCAxbXMgdGltZXIgaW50ZXJydXB0ICovDQorDQorICAgICAgICBpbnRfZW5hYmxlKEJPQVJEX1NZU19USU1FUl9JTlROTyk7DQorICAgIH0NCit9DQorDQorLyoqDQorICogXGJyaWVmICAgZ2V0IGN1cnJlbnQgY3B1IGhhcmR3YXJlIHRpY2tzDQorICogXHJldHZhbCAgaGFyZHdhcmUgdGlja3MgY291bnQgaW4gNjRiaXQgZm9ybWF0DQorICovDQordWludDY0X3QgYm9hcmRfZ2V0X2h3dGlja3Modm9pZCkNCit7DQorICAgIHVpbnQzMl90IHN1Yl90aWNrczsNCisgICAgdWludDY0X3QgdG90YWxfdGlja3M7DQorICAgIHRpbWVyX2N1cnJlbnQoVElNRVJfMCwgJnN1Yl90aWNrcyk7DQorDQorICAgIHRvdGFsX3RpY2tzID0gKHVpbnQ2NF90KU9TUF9HRVRfQ1VSX01TKCkgKiAoQk9BUkRfQ1BVX0NMT0NLIC8gQk9BUkRfU1lTX1RJTUVSX0haKTsNCisgICAgdG90YWxfdGlja3MgKz0gKHVpbnQ2NF90KXN1Yl90aWNrczsNCisNCisgICAgcmV0dXJuIHRvdGFsX3RpY2tzOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBnZXQgY3VycmVudCBwYXNzZWQgdXMgc2luY2UgdGltZXIgaW5pdA0KKyAqIFxyZXR2YWwgIHVzIGNvdW50IGluIDY0Yml0IGZvcm1hdA0KKyAqLw0KK3VpbnQ2NF90IGJvYXJkX2dldF9jdXJfdXModm9pZCkNCit7DQorICAgIHVpbnQzMl90IHN1Yl91czsNCisgICAgdWludDY0X3QgdG90YWxfdXM7DQorICAgIHRpbWVyX2N1cnJlbnQoVElNRVJfMCwgJnN1Yl91cyk7DQorDQorICAgIHN1Yl91cyA9ICgodWludDY0X3Qpc3ViX3VzICogMTAwMDAwMCkgLyBCT0FSRF9DUFVfQ0xPQ0s7DQorICAgIHRvdGFsX3VzID0gKCh1aW50NjRfdClPU1BfR0VUX0NVUl9NUygpKSAqIDEwMDAgKyAodWludDY0X3Qpc3ViX3VzOw0KKw0KKyAgICByZXR1cm4gdG90YWxfdXM7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHByb3ZpZGUgTVMgZGVsYXkgZnVuY3Rpb24NCisgKiBcZGV0YWlscw0KKyAqICAgICAgdGhpcyBmdW5jdGlvbiBuZWVkcyBhIDEtTVMgdGltZXIgaW50ZXJydXB0IHRvIHdvcmsuDQorICogIEZvciBiYXJlLW1ldGFsLCBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGlzIGZpbGUuDQorICogIEZvciBPUywgeW91IG11c3QgY2FsbCBccmVmIGJvYXJkX3RpbWVyX3VwZGF0ZSBpbg0KKyAqICB0aGUgT1MgMS1NUyB0aW1lciBpbnRlcnJ1cHQgd2hlbiB0aGUgYmFyZS1tZXRhbCB0aW1lciBpbnRlcnJ1cHQNCisgKiAgaXMgbm90IHJlYWR5DQorICogXHBhcmFtW2luXSAgIG1zICAgICAgTVMgdG8gZGVsYXkNCisgKiBccGFyYW1baW5dICAgb3NfY29tcGF0ICAgRW5hYmxlIG9yIGRpc2FibGUNCisgKiAgV2hlbiB0aGlzIGRlbGF5IGlzIGVuYWJsZWQsIHVzZSB0aGUgT1MgZGVsYXkgZnVuY3Rpb24sIGlmIG9uZSBpcyBwcm92aWRlZC4NCisgKiAgU2VlIFxyZWYgT1NQX0RFTEFZX09TX0NPTVBBVF9FTkFCTEUgYW5kDQorICogIFxyZWYgT1NQX0RFTEFZX09TX0NPTVBBVF9ESVNBQkxFDQorICovDQordm9pZCBib2FyZF9kZWxheV9tcyh1aW50MzJfdCBtcywgdWludDhfdCBvc19jb21wYXQpDQorew0KKyAgICB1aW50NjRfdCBzdGFydF91cywgdXNfZGVsYXllZDsNCisNCisjaWZkZWYgRU5BQkxFX09TDQorDQorICAgIGlmIChvc19jb21wYXQgPT0gT1NQX0RFTEFZX09TX0NPTVBBVF9FTkFCTEUpDQorICAgIHsNCisgICAgICAgIC8qKiBcdG9kbyBhZGQgZGlmZmVyZW50IG9zIGRlbGF5IGZ1bmN0aW9ucyAqLw0KKyNpZmRlZiBPU19GUkVFUlRPUw0KKyAgICAgICAgdlRhc2tEZWxheShtcyk7DQorICAgICAgICByZXR1cm47DQorI2VuZGlmDQorICAgIH0NCisNCisjZW5kaWYNCisgICAgdXNfZGVsYXllZCA9ICgodWludDY0X3QpbXMgKiAxMDAwKTsNCisgICAgc3RhcnRfdXMgPSBib2FyZF9nZXRfY3VyX3VzKCk7DQorDQorICAgIHdoaWxlICgoYm9hcmRfZ2V0X2N1cl91cygpIC0gc3RhcnRfdXMpIDwgdXNfZGVsYXllZCk7DQorfQ0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fVElNRVIgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vZW1za190aW1lci5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM3NTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL2Vtc2tfdGltZXIuaApAQCAtMCwwICsxLDYzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTMxDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9USU1FUg0KKyAqIFxicmllZiAgIGVtc2sgdGltZXIgZnVuY3Rpb25zIGhlYWRlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEJPQVJEX0VNU0tfQ09NTU9OX1RJTUVSDQorICogQHsNCisgKi8NCisjaWZuZGVmIF9FTVNLX1RJTUVSXw0KKyNkZWZpbmUgX0VNU0tfVElNRVJfDQorDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorZXh0ZXJuIHZvbGF0aWxlIHVpbnQ2NF90IGdsX2Vtc2tfc3lzX2h6X2NudDsNCitleHRlcm4gdm9sYXRpbGUgdWludDMyX3QgZ2xfZW1za19tc19jbnQ7DQorDQorZXh0ZXJuIHZvaWQgZW1za190aW1lcl9pbml0KHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0VNU0tfVElNRVJfICovDQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9USU1FUiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTUzMjk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL211eC5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTA3DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9NVVggIEVNU0sgTXV4IERyaXZlcg0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJJVkVSDQorICogXGJyaWVmICAgRU1TSyBNdXggQ29udHJvbGxlciBEcml2ZXINCisgKiBcZGV0YWlscw0KKyAqICAgICAgTXV4IGNvbnRyb2xsZXIgaXMgdGhlIGhhcmR3YXJlIGV4dGVybmFsIFBNT0QgcG9ydCBwaW4gY29ubmVjdGlvbg0KKyAqICBjb250cm9sbGVyLCBpdCBjYW4gZGlzdHJpYnV0ZSB0aGUgZXh0ZXJuYWwgcG9ydCBwaW5zIGludG8gZGlmZmVyZW50DQorICogIGZ1bmN0aW9ucyBsaWtlIGdlbmVyYWwgaW5wdXQvb3V0cHV0LCBzcGksIGlpYywgdWFydCBhbmQgc28gb24uDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9NVVgNCisgKiBcYnJpZWYgICBlbXNrIG11eCBjb250cm9sbGVyIGRyaXZlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9NVVgNCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2NvbW1vbi9tdXhfaGFsLmgiDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svY29tbW9uL211eC5oIg0KKw0KK3N0YXRpYyBNVVhfUkVHICptdXhfY3RybF9yZWdzID0gKE1VWF9SRUcgKikwOw0KKw0KKy8qKiBpbml0aWFsaXplIGkyYyBjb250cm9sbGVyIGFuZCBzZXQgc2xhdmUgZGV2aWNlIGFkZHJlc3MgKi8NCit2b2lkIG11eF9pbml0KE1VWF9SRUcgKm11eF9yZWdzKQ0KK3sNCisgICAgLy8gSW5pdGlhbGl6ZSBNdXggY29udHJvbGxlciByZWdpc3RlcnMgYnkgZGVmYXVsdCB2YWx1ZXMNCisgICAgbXV4X3JlZ3NbUE1PRF9NVVhfQ1RSTF0gPSBQTU9EX01VWF9DVFJMX0RFRkFVTFQ7DQorICAgIG11eF9yZWdzW1NQSV9NQVBfQ1RSTF0gPSAgU1BJX01BUF9DVFJMX0RFRkFVTFQ7DQorICAgIG11eF9yZWdzW1VBUlRfTUFQX0NUUkxdID0gVUFSVF9NQVBfQ1RSTF9ERUZBVUxUOw0KKyAgICBtdXhfY3RybF9yZWdzID0gbXV4X3JlZ3M7DQorfQ0KKw0KKy8qKiBHZXQgbXV4IGN0cmwgcmVnaXN0ZXIgcG9pbnRlciwgb25seSB2YWxpZCBhZnRlciBtdXhfaW5pdCAqLw0KK01VWF9SRUcgKmdldF9tdXhfcmVncyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIG11eF9jdHJsX3JlZ3M7DQorfQ0KKw0KKy8qKiBzZXQgUE1PRCBtdXhlciBzY2hlbWUgKi8NCit2b2lkIHNldF9wbW9kX211eChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsKQ0KK3sNCisgICAgbXV4X3JlZ3NbUE1PRF9NVVhfQ1RSTF0gPSB2YWw7DQorfQ0KKw0KKy8qKiBnZXQgUE1PRCBtdXhlciBzY2hlbWUgKi8NCit1aW50MzJfdCBnZXRfcG1vZF9tdXgoTVVYX1JFRyAqbXV4X3JlZ3MpDQorew0KKyAgICByZXR1cm4gKHVpbnQzMl90KSBtdXhfcmVnc1tQTU9EX01VWF9DVFJMXTsNCit9DQorDQorLyoqIHNldCBQTU9EIG11eGVyIHNjaGVtZSAqLw0KK3ZvaWQgY2hhbmdlX3Btb2RfbXV4KE1VWF9SRUcgKm11eF9yZWdzLCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IGNoYW5nZV9iaXRzKQ0KK3sNCisgICAgbXV4X3JlZ3NbUE1PRF9NVVhfQ1RSTF0gPSAoKG11eF9yZWdzW1BNT0RfTVVYX0NUUkxdICYgfmNoYW5nZV9iaXRzKSB8IHZhbCk7DQorfQ0KKw0KKy8qKiBzZXQgU1BJIGNvbm5lY3Rpb24gc2NoZW1lICovDQordm9pZCBzZXRfc3BpX21hcChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsKQ0KK3sNCisgICAgbXV4X3JlZ3NbU1BJX01BUF9DVFJMXSA9IHZhbDsNCit9DQorDQorLyoqIGdldCBTUEkgY29ubmVjdGlvbiBzY2hlbWUgKi8NCit1aW50MzJfdCBnZXRfc3BpX21hcChNVVhfUkVHICptdXhfcmVncykNCit7DQorICAgIHJldHVybiAodWludDMyX3QpIG11eF9yZWdzW1NQSV9NQVBfQ1RSTF07DQorfQ0KKw0KKy8qKiBzZXQgVUFSVCBjb25uZWN0aW9uIHNjaGVtZSAqLw0KK3ZvaWQgc2V0X3VhcnRfbWFwKE1VWF9SRUcgKm11eF9yZWdzLCB1aW50MzJfdCB2YWwpDQorew0KKyAgICBtdXhfcmVnc1tVQVJUX01BUF9DVFJMXSA9IHZhbDsNCit9DQorDQorLyoqIGdldCBVQVJUIGNvbm5lY3Rpb24gc2NoZW1lICovDQordWludDMyX3QgZ2V0X3VhcnRfbWFwKE1VWF9SRUcgKm11eF9yZWdzKQ0KK3sNCisgICAgcmV0dXJuICh1aW50MzJfdCkgbXV4X3JlZ3NbVUFSVF9NQVBfQ1RSTF07DQorfQ0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfTVVYICovDQorDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL211eC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNzhkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9jb21tb24vbXV4LmgKQEAgLTAsMCArMSwxODYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMDcNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9NVVgNCisgKiBcYnJpZWYgICBoZWFkZXIgZmlsZSBvZiBlbXNrIG11eCBjb250cm9sbGVyIGRyaXZlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9NVVgNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgX01VWF9IXw0KKyNkZWZpbmUgX01VWF9IXw0KKw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKw0KKyNkZWZpbmUgQklUMCAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgQklUMSAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgQklUMiAgICAgICAgICAgICgyKQ0KKyNkZWZpbmUgQklUMyAgICAgICAgICAgICgzKQ0KKyNkZWZpbmUgUE0xX09GRlNFVCAgICAgICgwKQ0KKyNkZWZpbmUgUE0yX09GRlNFVCAgICAgICg0KQ0KKyNkZWZpbmUgUE0zX09GRlNFVCAgICAgICg4KQ0KKyNkZWZpbmUgUE00X09GRlNFVCAgICAgICgxMikNCisjZGVmaW5lIFBNNV9PRkZTRVQgICAgICAoMTYpDQorI2RlZmluZSBQTTZfT0ZGU0VUICAgICAgKDIwKQ0KKyNkZWZpbmUgUE03X09GRlNFVCAgICAgICgyNCkNCisNCisjZGVmaW5lIFBNMV9NQVNLICAgICAgICAoMHhmIDw8IFBNMV9PRkZTRVQpDQorI2RlZmluZSBQTTJfTUFTSyAgICAgICAgKDB4ZiA8PCBQTTJfT0ZGU0VUKQ0KKyNkZWZpbmUgUE0zX01BU0sgICAgICAgICgweGYgPDwgUE0zX09GRlNFVCkNCisjZGVmaW5lIFBNNF9NQVNLICAgICAgICAoMHhmIDw8IFBNNF9PRkZTRVQpDQorI2RlZmluZSBQTTVfTUFTSyAgICAgICAgKDB4ZiA8PCBQTTVfT0ZGU0VUKQ0KKyNkZWZpbmUgUE02X01BU0sgICAgICAgICgweGYgPDwgUE02X09GRlNFVCkNCisjZGVmaW5lIFBNN19NQVNLICAgICAgICAoMHhmIDw8IFBNN19PRkZTRVQpDQorDQorDQorI2RlZmluZSBTUElfTUFQX05PUk1BTCAgICAgICgwKQ0KKyNkZWZpbmUgU1BJX01BUF9MT09QQkFDSyAgICAoMSkNCisNCisjZGVmaW5lIFVBUlRfTUFQX1RZUEU0ICAgICAgKDB4RTQpDQorI2RlZmluZSBVQVJUX01BUF9UWVBFMyAgICAgICgweDZDKQ0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlZmF1bHQgcGluIG11eGVyIHNldHRpbmdzDQorICogQHsNCisgKi8NCisjZGVmaW5lIFBNT0RfTVVYX0NUUkxfREVGQVVMVCAgICgwKSAgICAgICAgIC8qITwgYWxsIHBpbnMgYXJlIGNvbmZpZ3VyZWQgYXMgR1BJTyBpbnB1dHMgKi8NCisjZGVmaW5lIFNQSV9NQVBfQ1RSTF9ERUZBVUxUICAgIChTUElfTUFQX05PUk1BTCkgICAgLyohPCBub3JtYWwgU1BJIG1vZGUgKi8NCisjZGVmaW5lIFVBUlRfTUFQX0NUUkxfREVGQVVMVCAgIChVQVJUX01BUF9UWVBFNCkgICAgLyohPCBUWVBFNCBQTU9EIGNvbXBhdGlibGUgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBQTU9EIDEgTXVsdGlwbGV4b3INCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE0xX1VSX0dQSU9fQyAgICAgICAoKDAgPDwgQklUMCkgPDwgUE0xX09GRlNFVCkgLyohPCBQbW9kMVs0OjFdIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IENbMTE6OF0gKi8NCisjZGVmaW5lIFBNMV9VUl9VQVJUXzAgICAgICAgKCgxIDw8IEJJVDApIDw8IFBNMV9PRkZTRVQpIC8qITwgUG1vZDFbNDoxXSBhcmUgY29ubmVjdGVkIHRvIERXIFVBUlQwIHNpZ25hbHMgKi8NCisNCisjZGVmaW5lIFBNMV9MUl9HUElPX0EgICAgICAgKCgwIDw8IEJJVDIpIDw8IFBNMV9PRkZTRVQpIC8qITwgUG1vZDFbMTA6N10gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQVsxMTo4XSAqLw0KKyNkZWZpbmUgUE0xX0xSX1NQSV9TICAgICAgICAoKDEgPDwgQklUMikgPDwgUE0xX09GRlNFVCkgLyohPCBQbW9kMVsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIFNQSSBTbGF2ZSBzaWduYWxzICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorDQorLyoqDQorICogXG5hbWUgICAgUE1PRCAyIE11bHRpcGxleG9yDQorICogQHsNCisgKi8NCisjZGVmaW5lIFBNMl9HUElPX0FDICAgICAoKDAgPDwgQklUMCkgPDwgUE0yX09GRlNFVCkgLyohPCBQbW9kMls0OjFdICBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBDWzE1OjEyXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbW9kMlsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBBWzE1OjEyXSAgKi8NCisNCisjZGVmaW5lIFBNMl9JMkNfSFJJICAgICAoKDEgPDwgQklUMCkgPDwgUE0yX09GRlNFVCkgLyohPCBjb25uZWN0IEkyQyB0byBQbW9kMls0OjFdIGFuZCBoYWx0L3J1biBpbnRlcmZhY2UgdG8gUG1vZDJbMTA6N10gKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisNCisvKioNCisgKiBcbmFtZSAgICBQTU9EIDMgTXVsdGlwbGV4b3INCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE0zX0dQSU9fQUMgICAgICgoMCA8PCBCSVQwKSA8PCBQTTNfT0ZGU0VUKSAvKiE8IFBtb2QzWzQ6MV0gIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IENbMTk6MTZdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBtb2QzWzEwOjddIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IEFbMTk6MTZdICAqLw0KKw0KKyNkZWZpbmUgUE0zX0kyQ19HUElPX0QgICAgICAoKDEgPDwgQklUMCkgPDwgUE0zX09GRlNFVCkgLyohPCBQbW9kM1s0OjNdICBhcmUgY29ubmVjdGVkIHRvIERXIEkyQyBzaWduYWxzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBtb2QzWzI6MV0gIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IERbMTowXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbW9kM1sxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBEWzM6Ml0gKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisNCisvKioNCisgKiBcbmFtZSAgICBQTU9EIDQgTXVsdGlwbGV4b3INCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE00X0dQSU9fQUMgICAgICgoMCA8PCBCSVQwKSA8PCBQTTRfT0ZGU0VUKSAvKiE8IFBtb2Q0WzQ6MV0gIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IENbMjM6MjBdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBtb2Q0WzEwOjddIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IEFbMjM6MjBdICovDQorDQorI2RlZmluZSBQTTRfSTJDX0dQSU9fRCAgICAgICgoMSA8PCBCSVQwKSA8PCBQTTRfT0ZGU0VUKSAvKiE8IFBtb2Q0WzQ6M10gIGFyZSBjb25uZWN0ZWQgdG8gRFcgSTJDIHNpZ25hbHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG1vZDRbMjoxXSAgYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgRFs1OjRdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBtb2Q0WzEwOjddIGFyZSBjb25uZWN0ZWQgdG8gRFcgR1BJTyBQb3J0IERbNzo2XSAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIFBNT0QgNSBNdWx0aXBsZXhvcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBQTTVfVVJfR1BJT19DICAgICAgICgoMCA8PCBCSVQwKSA8PCBQTTVfT0ZGU0VUKSAvKiE8IFBtb2Q1WzQ6MV0gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQ1syNzoyNF0gKi8NCisjZGVmaW5lIFBNNV9VUl9TUElfTTEgICAgICAgKCgxIDw8IEJJVDApIDw8IFBNNV9PRkZTRVQpIC8qITwgUG1vZDVbNDoxXSBhcmUgY29ubmVjdGVkIHRvIERXIFNQSSBNYXN0ZXIgc2lnbmFscyB1c2luZyBDUzFfTiAqLw0KKw0KKyNkZWZpbmUgUE01X0xSX0dQSU9fQSAgICAgICAoKDAgPDwgQklUMikgPDwgUE01X09GRlNFVCkgLyohPCBQbW9kNVsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBBWzI3OjI0XSAqLw0KKyNkZWZpbmUgUE01X0xSX1NQSV9NMiAgICAgICAoKDEgPDwgQklUMikgPDwgUE01X09GRlNFVCkgLyohPCBQbW9kNVsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIFNQSSBNYXN0ZXIgc2lnbmFscyB1c2luZyBDUzJfTiAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIFBNT0QgNiBNdWx0aXBsZXhvcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBQTTZfVVJfR1BJT19DICAgICAgICgoMCA8PCBCSVQwKSA8PCBQTTZfT0ZGU0VUKSAvKiE8IFBtb2Q2WzQ6MV0gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgQ1szMToyOF0gKi8NCisjZGVmaW5lIFBNNl9VUl9TUElfTTAgICAgICAgKCgxIDw8IEJJVDApIDw8IFBNNl9PRkZTRVQpIC8qITwgUG1vZDZbNDoxXSBhcmUgY29ubmVjdGVkIHRvIERXIFNQSSBNYXN0ZXIgc2lnbmFscyB1c2luZyBDUzBfTiAqLw0KKw0KKyNkZWZpbmUgUE02X0xSX0dQSU9fQSAgICAgICAoKDAgPDwgQklUMikgPDwgUE02X09GRlNFVCkgLyohPCBQbW9kNlsxMDo3XSBhcmUgY29ubmVjdGVkIHRvIERXIEdQSU8gUG9ydCBBWzMxOjI4XSAqLw0KKw0KKyNkZWZpbmUgUE02X0xSX0NTU19TVEFUICAgICAoKDEgPDwgQklUMikgPDwgUE02X09GRlNFVCkgLyohPCBQbW9kNls4OjddIGFyZSBjb25uZWN0ZWQgdG8gdGhlIERXIFNQSSBNYXN0ZXIgY2hpcCBzZWxlY3Qgc2lnbmFscyBDUzFfTiBhbmQgQ1MyX04sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG1vZDZbNjo1XSBhcmUgY29ubmVjdGVkIHRvIHRoZSBBUkMgRU0gaGFsdCBhbmQgc2xlZXAgc3RhdHVzIHNpZ25hbHMgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBQTU9EIDcgTXVsdGlwbGV4b3INCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgUE03X0dQSU9fRCAgICAgICgoMCA8PCBCSVQwKSA8PCBQTTdfT0ZGU0VUKSAvKiE8IFBtb2Q3WzQ6MV0gYXJlIGNvbm5lY3RlZCB0byBEVyBHUElPIFBvcnQgRFsxMTo4XSAqLw0KKyNkZWZpbmUgUE03X1NUQVQgICAgICAgICgoMSA8PCBCSVQwKSA8PCBQTTdfT0ZGU0VUKSAvKiE8IFBtb2Q3WzQ6MV0gYXJlIGNvbm5lY3RlZCB0byB0aGUgQVJDIEVNIHNsZWVwIHN0YXR1cyBzaWduYWxzICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQordHlwZWRlZiB2b2xhdGlsZSB1aW50MzJfdCBNVVhfUkVHOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2lkIG11eF9pbml0KE1VWF9SRUcgKm11eF9yZWdzKTsNCitleHRlcm4gTVVYX1JFRyAqZ2V0X211eF9yZWdzKHZvaWQpOw0KK2V4dGVybiB2b2lkIHNldF9wbW9kX211eChNVVhfUkVHICptdXhfcmVncywgdWludDMyX3QgdmFsKTsNCitleHRlcm4gdWludDMyX3QgZ2V0X3Btb2RfbXV4KE1VWF9SRUcgKm11eF9yZWdzKTsNCitleHRlcm4gdm9pZCBjaGFuZ2VfcG1vZF9tdXgoTVVYX1JFRyAqbXV4X3JlZ3MsIHVpbnQzMl90IHZhbCwgdWludDMyX3QgY2hhbmdlX2JpdHMpOw0KK2V4dGVybiB2b2lkIHNldF9zcGlfbWFwKE1VWF9SRUcgKm11eF9yZWdzLCB1aW50MzJfdCB2YWwpOw0KK2V4dGVybiB1aW50MzJfdCBnZXRfc3BpX21hcChNVVhfUkVHICptdXhfcmVncyk7DQorZXh0ZXJuIHZvaWQgc2V0X3VhcnRfbWFwKE1VWF9SRUcgKm11eF9yZWdzLCB1aW50MzJfdCB2YWwpOw0KK2V4dGVybiB1aW50MzJfdCBnZXRfdWFydF9tYXAoTVVYX1JFRyAqbXV4X3JlZ3MpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX01VWF9IXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfTVVYICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svY29tbW9uL211eF9oYWwuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXhfaGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzZmY4NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2NvbW1vbi9tdXhfaGFsLmgKQEAgLTAsMCArMSw2OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0wNw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX01VWA0KKyAqIFxicmllZiAgIGVtc2sgbXV4IGNvbnRyb2wgcmVnaXN0ZXIgaW5kZXggaGVhZGVyDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX01VWA0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfTVVYX0hBTF9IXw0KKyNkZWZpbmUgX01VWF9IQUxfSF8NCisNCisvKioNCisgKiBcbmFtZSAgICBNdXggQ29udHJvbCBSZWdpc3RlciBJbmRleA0KKyAqIEB7DQorICovDQorI2RlZmluZSBQTU9EX01VWF9DVFJMICAgMCAgIC8qITwgMzItYml0cywgb2Zmc2V0IDB4MCwNCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgbWFwcGluZyBvZiB0aGUgcGVyaXBoZXJhbCBkZXZpY2Ugc2lnbmFscyBvbiBQbW9kIGNvbm5lY3RvcnMgKi8NCisNCisjZGVmaW5lIEkyQ19NQVBfQ1RSTCAgICAxICAgLyohPCAzMi1iaXRzLCBvZmZzZXQgMHg0ICovDQorDQorI2RlZmluZSBTUElfTUFQX0NUUkwgICAgMiAgIC8qITwgMzItYml0cywgb2Zmc2V0IDB4OCwNCisgICAgICAgICAgICAgICAgICAgIFNQSV9NQVBfQ1RSTFswXSBzZWxlY3RzIHRoZSBtb2RlIG9mIG9wZXJhdGlvbiBvZiB0aGUgU1BJIFNsYXZlOg0KKyAgICAgICAgICAgICAgICAgICAgLSBOb3JtYWwgb3BlcmF0aW9uLCBTUElfTUFQX0NUUkxbMF09MDogU1BJIFNsYXZlIGlzIGNvbm5lY3RlZCB0byBQbW9kMSBhdCBjb25uZWN0b3IgSjEuDQorICAgICAgICAgICAgICAgICAgICAtIExvb3AtYmFjayBtb2RlLCBTUElfTUFQX0NUUkxbMF09MTogU1BJIFNsYXZlIGlzIGNvbm5lY3RlZCB0byB0aGUgU1BJIE1hc3RlciBpbnNpZGUgdGhlIEZQR0EgdXNpbmcgQ1M0Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisNCisjZGVmaW5lIFVBUlRfTUFQX0NUUkwgICAzICAgLyohPCAzMi1iaXRzLCBvZmZzZXQgMHg4LA0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWdpc3RlciBjb250cm9scyB0aGUgbWFwcGluZyBvZiB0aGUgVUFSVCBzaWduYWxzIG9uIHRoZSBQbW9kMSBjb25uZWN0b3IuICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorDQorI2VuZGlmICAvKiBfTVVYX0hBTF9IXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfTVVYICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZW1zay5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZW1zay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTMzNjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9lbXNrLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMTgNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KKyAqIFxicmllZiAgIGVtc2sgcmVzb3VyY2UgZGVmaW5pdGlvbnMNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9JTklUDQorICogQHsNCisgKi8NCisjaWZuZGVmIF9FTVNLX0hfDQorI2RlZmluZSBfRU1TS19IXw0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19lbS5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3VhcnQvZHdfdWFydF9vYmouaCINCisjaW5jbHVkZSAiYm9hcmQvZW1zay9ncGlvL2R3X2dwaW9fb2JqLmgiDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9jb21tb24vZW1za190aW1lci5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2tfaGFyZHdhcmUuaCINCisNCisvKiBBZGRpdGlvbmFsIGhhcmR3YXJlIGRyaXZlciBmb3IgZW1iQVJDIEJTUCAqLw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmgiDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3BtcmYvcG1yZi5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmgiDQorDQorI2RlZmluZSBFTVNLX0dQSU9fUE9SVF9BICAgICAgICBEV19HUElPX1BPUlRfQQ0KKyNkZWZpbmUgRU1TS19HUElPX1BPUlRfQiAgICAgICAgRFdfR1BJT19QT1JUX0INCisjZGVmaW5lIEVNU0tfR1BJT19QT1JUX0MgICAgICAgIERXX0dQSU9fUE9SVF9DDQorI2RlZmluZSBFTVNLX0dQSU9fUE9SVF9EICAgICAgICBEV19HUElPX1BPUlRfRA0KKw0KKy8qIGNvbW1vbiBtYWNyb3MgbXVzdCBiZSBkZWZpbmVkIGJ5IGFsbCBib2FyZHMgKi8NCisNCisjZGVmaW5lIEJPQVJEX0NPTlNPTEVfVUFSVF9JRCAgICAgICBEV19VQVJUXzFfSUQNCisjZGVmaW5lIEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEICAgICBVQVJUX0JBVURSQVRFXzExNTIwMA0KKyNkZWZpbmUgQk9BUkRfQURDX0lJQ19JRCAgICAgICAgRFdfSUlDXzBfSUQNCisjZGVmaW5lIEJPQVJEX1RFTVBfU0VOU09SX0lJQ19JRCAgICBEV19JSUNfMF9JRA0KKw0KKyNkZWZpbmUgQk9BUkRfVEVNUF9JSUNfU0xWQUREUiAgICAgIFRFTVBfSTJDX1NMQVZFX0FERFJFU1MNCisNCisjZGVmaW5lIEJPQVJEX1NEQ0FSRF9TUElfSUQgICAgIERXX1NQSV8wX0lEDQorI2RlZmluZSBCT0FSRF9XSUZJX1NQSV9JRCAgICAgICBEV19TUElfMF9JRA0KKyNkZWZpbmUgQk9BUkRfU0ZMQVNIX1NQSV9JRCAgICAgRFdfU1BJXzBfSUQNCisNCisjZGVmaW5lIEJPQVJEX1NEQ0FSRF9TUElfTElORSAgICAgICBFTVNLX1NQSV9MSU5FX1NEQ0FSRA0KKyNkZWZpbmUgQk9BUkRfV0lGSV9TUElfTElORSAgICAgRU1TS19TUElfTElORV8xDQorI2RlZmluZSBCT0FSRF9TRkxBU0hfU1BJX0xJTkUgICAgICAgRU1TS19TUElfTElORV9TRkxBU0gNCisNCisjaWZuZGVmIEJPQVJEX1NQSV9GUkVRDQorI2RlZmluZSBCT0FSRF9TUElfRlJFUSAgICAgICAgICAoMTAwMDAwMCkNCisjZW5kaWYNCisNCisjaWZuZGVmIEJPQVJEX1NQSV9DTEtNT0RFDQorI2RlZmluZSBCT0FSRF9TUElfQ0xLTU9ERSAgICAgICAoU1BJX0NMS19NT0RFXzApDQorI2VuZGlmDQorDQorI2RlZmluZSBCT0FSRF9TWVNfVElNRVJfSUQgICAgICBUSU1FUl8wDQorI2RlZmluZSBCT0FSRF9TWVNfVElNRVJfSU5UTk8gICAgICAgSU5UTk9fVElNRVIwDQorI2RlZmluZSBCT0FSRF9TWVNfVElNRVJfSFogICAgICAoMTAwMCkNCisNCisvKiogYm9hcmQgdGltZXIgY291bnQgZnJlcXVlbmN5IChIWikgKi8NCisjZGVmaW5lIEJPQVJEX1NZU19USU1FUl9NU19IWiAgICAgICAoMTAwMCkNCisvKiogYm9hcmQgdGltZXIgY291bnQgZnJlcXVlbmN5IGNvbnZlbnRpb24gYmFzZWQgb24gdGhlIGdsb2JhbCB0aW1lciBjb3VudGVyICovDQorI2RlZmluZSBCT0FSRF9TWVNfVElNRVJfTVNfQ09OViAgICAgKEJPQVJEX1NZU19USU1FUl9NU19IWi9CT0FSRF9TWVNfVElNRVJfSFopDQorDQorI2RlZmluZSBCT0FSRF9PU19USU1FUl9JRCAgICAgICBUSU1FUl8wDQorI2RlZmluZSBCT0FSRF9PU19USU1FUl9JTlROTyAgICAgICAgSU5UTk9fVElNRVIwDQorDQorI2RlZmluZSBCT0FSRF9DUFVfQ0xPQ0sgICAgICAgICBDTEtfQ1BVDQorI2RlZmluZSBCT0FSRF9ERVZfQ0xPQ0sgICAgICAgICBDTEtfQlVTX0FQQg0KKw0KKyNkZWZpbmUgQk9BUkRfTEVEX01BU0sgICAgICAgICAgKDB4MWZmKQ0KKyNkZWZpbmUgQk9BUkRfTEVEX0NOVCAgICAgICAgICAgKDkpDQorI2RlZmluZSBCT0FSRF9CVE5fTUFTSyAgICAgICAgICAoMHg3KQ0KKyNkZWZpbmUgQk9BUkRfQlROX0NOVCAgICAgICAgICAgKDMpDQorI2RlZmluZSBCT0FSRF9TV1RfTUFTSyAgICAgICAgICAoMHhmKQ0KKyNkZWZpbmUgQk9BUkRfU1dUX0NOVCAgICAgICAgICAgKDQpDQorDQorI2RlZmluZSBCT0FSRF9PTkJPQVJEX05UU0hFTExfSUQgICAgKEVNU0tfTlRTSEVMTF8wX0lEKQ0KKw0KKyNkZWZpbmUgT1NQX0RFTEFZX09TX0NPTVBBVF9FTkFCTEUgICgxKQ0KKyNkZWZpbmUgT1NQX0RFTEFZX09TX0NPTVBBVF9ESVNBQkxFICgwKQ0KKw0KKw0KKyNkZWZpbmUgT1NQX0dFVF9DVVJfU1lTSFooKSAgICAgKGdsX2Vtc2tfc3lzX2h6X2NudCkNCisjZGVmaW5lIE9TUF9HRVRfQ1VSX01TKCkgICAgICAgIChnbF9lbXNrX21zX2NudCkNCisjZGVmaW5lIE9TUF9HRVRfQ1VSX1VTKCkgICAgICAgIGJvYXJkX2dldF9jdXJfdXMoKQ0KKyNkZWZpbmUgT1NQX0dFVF9DVVJfSFdUSUNLUygpICAgICAgIGJvYXJkX2dldF9od3RpY2tzKCkNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gdm9pZCBib2FyZF9pbml0KHZvaWQpOw0KK2V4dGVybiB2b2lkIGJvYXJkX3RpbWVyX3VwZGF0ZSh1aW50MzJfdCBwcmVjaXNpb24pOw0KK2V4dGVybiB2b2lkIGJvYXJkX2RlbGF5X21zKHVpbnQzMl90IG1zLCB1aW50OF90IG9zX2NvbXBhdCk7DQorZXh0ZXJuIHVpbnQ2NF90IGJvYXJkX2dldF9od3RpY2tzKHZvaWQpOw0KK2V4dGVybiB1aW50NjRfdCBib2FyZF9nZXRfY3VyX3VzKHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8qIF9FTVNLX0hfICovDQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9JTklUICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZW1za19oYXJkd2FyZS5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZW1za19oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmFjMzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9lbXNrX2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTUtMTEtMTYNCisgKiBcYXV0aG9yIFFpYW5nIEd1KFFpYW5nLkd1QHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVA0KKyAqIFxicmllZiAgIGVtc2sgaGFyZHdhcmUgcmVzb3VyY2UgZGVmaW5pdGlvbnMNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBCT0FSRF9FTVNLX0NPTU1PTl9JTklUDQorICogQHsNCisgKi8NCisjaWZuZGVmIF9FTVNLX0hBUkRXQVJFX0hfDQorI2RlZmluZSBfRU1TS19IQVJEV0FSRV9IXw0KKw0KKy8qKiBDUFUgQ2xvY2sgRnJlcXVlbmN5IGRlZmluaXRpb24gKi8NCisjaWYgZGVmaW5lZChCT0FSRF9DUFVfRlJFUSkNCisvKiE8IEdldCBjcHUgY2xvY2sgZnJlcXVlbmN5IGRlZmluaXRpb24gZnJvbSBidWlsZCBzeXN0ZW0gKi8NCisjZGVmaW5lIENMS19DUFUgICAgICAgICAoQk9BUkRfQ1BVX0ZSRVEpDQorI2VsaWYgZGVmaW5lZChBUkNfRkVBVFVSRV9DUFVfQ0xPQ0tfRlJFUSkNCisvKiE8IEdldCBjcHUgY2xvY2sgZnJlcXVlbmN5IGRlZmluaXRpb24gZnJvbSB0Y2YgZmlsZSAqLw0KKyNkZWZpbmUgQ0xLX0NQVSAgICAgICAgIChBUkNfRkVBVFVSRV9DUFVfQ0xPQ0tfRlJFUSkNCisjZWxzZQ0KKy8qITwgRGVmYXVsdCBjcHUgY2xvY2sgZnJlcXVlbmN5ICovDQorI2RlZmluZSBDTEtfQ1BVICAgICAgICAgKDIwMDAwMDAwKQ0KKyNlbmRpZg0KKw0KKy8qKiBQZXJpcGhlcmFsIEJ1cyBSZWZlcmVuY2UgQ2xvY2sgZGVmaW5pdGlvbiAqLw0KKyNpZmRlZiBCT0FSRF9ERVZfRlJFUQ0KKy8qITwgR2V0IHBlcmlwaGVyYWwgYnVzIHJlZmVyZW5jZSBjbG9jayBkZWZpbnRpb24gZnJvbSBidWlsZCBzeXN0ZW0gKi8NCisjZGVmaW5lIENMS19CVVNfQVBCICAgICAoQk9BUkRfREVWX0ZSRVEpDQorI2Vsc2UNCisvKiE8IERlZmF1bHQgcGVyaXBoZXJhbCBidXMgcmVmZXJlbmNlIGNsb2NrIGRlZmludGlvbiAqLw0KKyNkZWZpbmUgQ0xLX0JVU19BUEIgICAgICg1MDAwMDAwMFUpDQorI2VuZGlmDQorDQorLyogRGV2aWNlIFJlZ2lzdGVyIEJhc2UgQWRkcmVzcyAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfUElOTVVYICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAvKiE8IFBJTk1VWCAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfU1BJX01TVF9DU19DVFJMICgweDAwMDAwMDE0VSkgICAgICAgLyohPCBTUEkgTWFzdGVyIFNlbGVjdCBDdHJsICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9HUElPMCAgICAgICAoMHgwMDAwMjAwMFUpICAgICAgIC8qITwgR1BJTyAwIE9uYm9hcmQgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1RJTUVSUyAgICAgICgweDAwMDAzMDAwVSkgICAgICAgLyohPCBEVyBUSU1FUiAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfSTJDMCAgICAgICAgKDB4MDAwMDQwMDBVKSAgICAgICAvKiE8IEkyQyAwICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9JMkMxICAgICAgICAoMHgwMDAwNTAwMFUpICAgICAgIC8qITwgSTJDIDEgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1NQSTAgICAgICAgICgweDAwMDA2MDAwVSkgICAgICAgLyohPCBTUEkgTWFzdGVyICAqLw0KKyNkZWZpbmUgUkVMX1JFR0JBU0VfU1BJMSAgICAgICAgKDB4MDAwMDcwMDBVKSAgICAgICAvKiE8IFNQSSBTbGF2ZSAgICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9VQVJUMCAgICAgICAoMHgwMDAwODAwMFUpICAgICAgIC8qITwgVUFSVDAgaXMgY29ubmVjdGVkIHRvIFBNT0QgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1VBUlQxICAgICAgICgweDAwMDA5MDAwVSkgICAgICAgLyohPCBVQVJUMSBpcyBVU0ItVUFSVKOsIHVzZSBVQVJUMSBhcyBkZWZhdWx0ICovDQorI2RlZmluZSBSRUxfUkVHQkFTRV9VQVJUMiAgICAgICAoMHgwMDAwQTAwMFUpICAgICAgIC8qITwgVUFSVDIgKi8NCisjZGVmaW5lIFJFTF9SRUdCQVNFX1dEVCAgICAgICAgICgweDAwMDBCMDAwVSkgICAgICAgLyohPCBXRFQgICovDQorLy8gI2RlZmluZSBSRUxfUkVHQkFTRV9JMlNfTUFTVEVSX0lOICAgICgweDAwMDBDMDAwVSkgICAgICAgLyohPCBJMlMgTWFzdGVyIEluICAqLw0KKy8vICNkZWZpbmUgUkVMX1JFR0JBU0VfSTJTX01BU1RFUl9PVVQgICAoMHgwMDAwRDAwMFUpICAgICAgIC8qITwgSTJTIE1hc3RlciBPdXQgICovDQorLy8gI2RlZmluZSBSRUxfUkVHQkFTRV9HTUFDICAgICAoMHgwMDAwRTAwMFUpICAgICAgIC8qITwgR01BQyAgKi8NCisNCisvKiBJbnRlcnJ1cHQgQ29ubmVjdGlvbiAqLw0KKyNkZWZpbmUgSU5UTk9fVElNRVIwICAgICAgICAgICAgMTYgICAgICAgICAgLyohPCBBUkMgVGltZXIwICovDQorI2RlZmluZSBJTlROT19USU1FUjEgICAgICAgICAgICAxNyAgICAgICAgICAvKiE8IEFSQyBUaW1lcjEgKi8NCisjZGVmaW5lIElOVE5PX1NFQ1VSRV9USU1FUjAgICAgIDIwICAgICAgICAgIC8qITwgQ29yZSBTZWN1cmUgVGltZXIgMCAqLw0KKyNkZWZpbmUgSU5UTk9fRE1BX1NUQVJUICAgICAgICAgMjIgICAgICAgICAgLyohPCBDb3JlIERNQSBDb250cm9sbGVyICovDQorI2RlZmluZSBJTlROT19ETUFfQ09NUExFVEUgICAgICAyMiAgICAgICAgICAvKiE8IENvcmUgRE1BIENvbnRyb2xsZXIgQ29tcGxldGUgKi8NCisjZGVmaW5lIElOVE5PX0RNQV9FUlJPUiAgICAgICAgIDIzICAgICAgICAgIC8qITwgQ29yZSBETUEgQ29udHJvbGxlciBFcnJvciAqLw0KKyNkZWZpbmUgSU5UTk9fR1BJTyAgICAgICAgICAyNCAgICAgICAgICAvKiE8IEdQSU8gY29udHJvbGxlciAqLw0KKyNkZWZpbmUgSU5UTk9fSTJDMCAgICAgICAgICAyNSAgICAgICAgICAvKiE8IEkyQ18wIGNvbnRyb2xsZXIgKi8NCisjZGVmaW5lIElOVE5PX0kyQzEgICAgICAgICAgMjYgICAgICAgICAgLyohPCBJMkNfMSBjb250cm9sbGVyICovDQorI2RlZmluZSBJTlROT19TUElfTUFTVEVSICAgICAgICAyNyAgICAgICAgICAvKiE8IFNQSSBNYXN0ZXIgY29udHJvbGxlciAqLw0KKyNkZWZpbmUgSU5UTk9fU1BJX1NMQVZFICAgICAgICAgMjggICAgICAgICAgLyohPCBTUEkgU2xhdmUgY29udHJvbGxlciAqLw0KKyNkZWZpbmUgSU5UTk9fVUFSVDAgICAgICAgICAyOSAgICAgICAgICAvKiE8IFVBUlQwICovDQorI2RlZmluZSBJTlROT19VQVJUMSAgICAgICAgIDMwICAgICAgICAgIC8qITwgVUFSVDEgKi8NCisjZGVmaW5lIElOVE5PX1VBUlQyICAgICAgICAgMzEgICAgICAgICAgLyohPCBVQVJUMiAqLw0KKyNkZWZpbmUgSU5UTk9fRFdfV0RUICAgICAgICAgICAgMzIgICAgICAgICAgLyohPCBXRFQgKi8NCisjZGVmaW5lIElOVE5PX0RXX1RNUjAgICAgICAgICAgIDMzICAgICAgICAgIC8qITwgRFcgVGltZXIgMCAqLw0KKyNkZWZpbmUgSU5UTk9fRFdfVE1SMSAgICAgICAgICAgMzQgICAgICAgICAgLyohPCBEVyBUaW1lciAxICovDQorLy8gI2RlZmluZSBJTlROT19JMlNfTWFzdGVyX0luICAgICAgMzMgICAgICAgICAgLyohPCBJMlMgTWFzdGVyIEluICovDQorLy8gI2RlZmluZSBJTlROT19JMlNfTWFzdGVyX091dCAgICAgMzQgICAgICAgICAgLyohPCBJMlMgTWFzdGVyIE91dCAqLw0KKy8vICNkZWZpbmUgSU5UTk9fR01BQyAgICAgICAgICAgMzUgICAgICAgICAgLyohPCBHTUFDICovDQorDQorLyogU1BJIE1hdGVyIFNpZ25hbHMgVXNhZ2UgKi8NCisjZGVmaW5lIEVNU0tfU1BJX0xJTkVfMCAgICAgICAgIDAgICAgICAgICAgIC8qITwgQ1MwIC0tIFBtb2QgNiBwaW4xICovDQorI2RlZmluZSBFTVNLX1NQSV9MSU5FXzEgICAgICAgICAxICAgICAgICAgICAvKiE8IENTMSAtLSBQbW9kIDUgcGluMSBvciBQbW9kIDYgcGluIDcgKi8NCisjZGVmaW5lIEVNU0tfU1BJX0xJTkVfMiAgICAgICAgIDIgICAgICAgICAgIC8qITwgQ1MyIC0tIFBtb2QgNiBwaW44ICovDQorI2RlZmluZSBFTVNLX1NQSV9MSU5FX1NEQ0FSRCAgICAgICAgMyAgICAgICAgICAgLyohPCBDUzMgLS0gT24tYm9hcmQgU0QgY2FyZCAgKi8NCisjZGVmaW5lIEVNU0tfU1BJX0xJTkVfU1BJU0xBVkUgICAgICA0ICAgICAgICAgICAvKiE8IENTNCAtLSBJbnRlcm5hbCBTUEkgc2xhdmUgKi8NCisjZGVmaW5lIEVNU0tfU1BJX0xJTkVfU0ZMQVNIICAgICAgICA1ICAgICAgICAgICAvKiE8IENTNSAtLSBPbi1ib2FyZCBTUEkgRmxhc2ggbWVtb3J5ICovDQorDQorI2VuZGlmICAvKiBfRU1TS19IQVJEV0FSRV9IXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19DT01NT05fSU5JVCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTY2Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9kd19ncGlvX29iai5jCkBAIC0wLDAgKzEsMzk0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTI0DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGRlZmdyb3VwICAgIEJPQVJEX0VNU0tfRFJWX0RXX0dQSU9fT0JKICBFTVNLIERXIEdQSU8gT2JqZWN0DQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUklWRVINCisgKiBcYnJpZWYgICBFTVNLIERlc2lnbndhcmUgR1BJTyBPYmplY3RzDQorICogXGRldGFpbHMNCisgKiAgICAgIEltcGxlbWVudCB0aGUgRU1TSyBib2FyZCBHUElPIG9iamVjdCB1c2luZyB0aGUgRGVzaWduV2FyZSBHUElPIGRldmljZSBkcml2ZXIuDQorICogIE9ubHkgbmVlZCB0byBpbXBsZW1lbnQgc29tZSBEZXNpZ25XYXJlIEdQSU8gc3RydWN0dXJlcyBhbmQgY29tYmluZSB3aXRoIEVNU0sgR1BJTw0KKyAqICBoYXJkd2FyZSByZXNvdXJjZXMsIGxpa2UgaW4gQysrIGNsYXNzIGluc3RhbnRpYXRpb24uDQorICogIEZvciBleGFtcGxlLCBpbiBDKyssIGRlZmluZSBhIGNsYXNzIGNhbGxlZCBncGlvDQorICogIGNsYXNzIGdwaW8gew0KKyAqDQorICogIH07DQorICogIHRoZW4gaW5zdGFudGlhdGUgdGhlIGdwaW8gY2xhc3M6DQorICogIGdwaW8gZW1za19ncGlvX2E7DQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9EV19HUElPX09CSg0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgR1BJTyBvYmplY3QgaW5zdGFudGlhdGlvbiBvbiBFTVNLDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX0RXX0dQSU9fT0JKDQorICogQHsNCisgKi8NCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKw0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorLyoNCisgKiBVbmNvbW1lbnQgdGhpcyB0byBlbmFibGUgZGVmYXVsdA0KKyAqIGdwaW8gYml0IGhhbmRsZXIgb3V0cHV0IG1lc3NhZ2UNCisgKiBieSB1YXJ0DQorICovDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMDQorI2RlZmluZSBQRVJJUEhFUkFMX0JBU0UgICAgIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMDQorI2Vsc2UNCisjZGVmaW5lIFBFUklQSEVSQUxfQkFTRSAgICAgX2FyY19hdXhfcmVhZChBVVhfRE1QX1BFUklQSEVSQUwpDQorI2VuZGlmDQorDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0EpDQorc3RhdGljIERFVl9HUElPICAgICBwb3J0X2E7DQorc3RhdGljIERXX0dQSU9fUE9SVCBkd19ncGlvX3BvcnRfYTsNCitzdGF0aWMgREVWX0dQSU9fSEFORExFUiBkd19ncGlvX2JpdF9oYW5kbGVyX2FbRU1TS19HUElPX0FfSU5UX01BWF9DT1VOVF07DQorc3RhdGljIERXX0dQSU9fQklUX0lTUiBkd19ncGlvX2JpdF9pc3JfYSA9DQorew0KKyAgICBFTVNLX0dQSU9fQV9JTlRfTUFYX0NPVU5ULCBkd19ncGlvX2JpdF9oYW5kbGVyX2ENCit9Ow0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRhX29wZW4odWludDMyX3QgZGlyKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fb3BlbigmcG9ydF9hLCBkaXIpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0YV9jbG9zZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fY2xvc2UoJnBvcnRfYSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRhX2NvbnRyb2wodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fY29udHJvbCgmcG9ydF9hLCBjdHJsX2NtZCwgcGFyYW0pOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0YV93cml0ZSh1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb193cml0ZSgmcG9ydF9hLCB2YWwsIG1hc2spOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0YV9yZWFkKHVpbnQzMl90ICp2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19yZWFkKCZwb3J0X2EsIHZhbCwgbWFzayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBvcnRhX2lzcih2b2lkICpwdHIpDQorew0KKyAgICBkd19ncGlvX2lzcl9oYW5kbGVyKCZwb3J0X2EsIHB0cik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBvcnRhX2luc3RhbGwodm9pZCkNCit7DQorICAgIHVpbnQzMl90IGk7DQorICAgIERFVl9HUElPX1BUUiBwb3J0X3B0ciA9ICZwb3J0X2E7DQorICAgIERFVl9HUElPX0lORk9fUFRSIGluZm9fcHRyID0gJihwb3J0X2EuZ3Bpb19pbmZvKTsNCisgICAgRFdfR1BJT19QT1JUX1BUUiBkd19wb3J0X3B0ciA9ICYoZHdfZ3Bpb19wb3J0X2EpOw0KKw0KKyAgICBpbmZvX3B0ci0+Z3Bpb19jdHJsID0gKHZvaWQgKilkd19wb3J0X3B0cjsNCisgICAgaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBpbmZvX3B0ci0+bWV0aG9kID0gMDsNCisgICAgaW5mb19wdHItPmRpcmVjdGlvbiA9IDA7DQorICAgIGluZm9fcHRyLT5leHRyYSA9IDA7DQorDQorICAgIGR3X3BvcnRfcHRyLT5ubyA9IERXX0dQSU9fUE9SVF9BOw0KKyAgICBkd19wb3J0X3B0ci0+cmVncyA9IChEV19HUElPX1JFR19QVFIpKFBFUklQSEVSQUxfQkFTRSB8IFJFTF9SRUdCQVNFX0dQSU8wKTsNCisgICAgZHdfcG9ydF9wdHItPnZhbGlkX2JpdF9tYXNrID0gRU1TS19HUElPX0FfVkFMSURfTUFTSzsNCisgICAgZHdfcG9ydF9wdHItPmludG5vID0gSU5UTk9fR1BJTzsNCisgICAgZHdfcG9ydF9wdHItPmludF9oYW5kbGVyID0gcG9ydGFfaXNyOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgZHdfZ3Bpb19iaXRfaXNyX2EuaW50X2JpdF9tYXhfY250OyBpKyspDQorICAgIHsNCisgICAgICAgIGR3X2dwaW9fYml0X2lzcl9hLmludF9iaXRfaGFuZGxlcl9wdHJbaV0gPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGR3X3BvcnRfcHRyLT5ncGlvX2JpdF9pc3IgPSAmZHdfZ3Bpb19iaXRfaXNyX2E7DQorDQorICAgIHBvcnRfcHRyLT5ncGlvX29wZW4gPSBwb3J0YV9vcGVuOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19jbG9zZSA9IHBvcnRhX2Nsb3NlOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19jb250cm9sID0gcG9ydGFfY29udHJvbDsNCisgICAgcG9ydF9wdHItPmdwaW9fd3JpdGUgPSBwb3J0YV93cml0ZTsNCisgICAgcG9ydF9wdHItPmdwaW9fcmVhZCA9IHBvcnRhX3JlYWQ7DQorfQ0KKyNlbmRpZg0KKw0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9CKQ0KK3N0YXRpYyBERVZfR1BJTyAgICAgcG9ydF9iOw0KK3N0YXRpYyBEV19HUElPX1BPUlQgZHdfZ3Bpb19wb3J0X2I7DQorDQorc3RhdGljIGludDMyX3QgcG9ydGJfb3Blbih1aW50MzJfdCBkaXIpDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19vcGVuKCZwb3J0X2IsIGRpcik7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRiX2Nsb3NlKHZvaWQpDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19jbG9zZSgmcG9ydF9iKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGJfY29udHJvbCh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19jb250cm9sKCZwb3J0X2IsIGN0cmxfY21kLCBwYXJhbSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRiX3dyaXRlKHVpbnQzMl90IHZhbCwgdWludDMyX3QgbWFzaykNCit7DQorICAgIHJldHVybiBkd19ncGlvX3dyaXRlKCZwb3J0X2IsIHZhbCwgbWFzayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRiX3JlYWQodWludDMyX3QgKnZhbCwgdWludDMyX3QgbWFzaykNCit7DQorICAgIHJldHVybiBkd19ncGlvX3JlYWQoJnBvcnRfYiwgdmFsLCBtYXNrKTsNCit9DQorDQorc3RhdGljIHZvaWQgcG9ydGJfaXNyKHZvaWQgKnB0cikNCit7DQorICAgIGR3X2dwaW9faXNyX2hhbmRsZXIoJnBvcnRfYiwgcHRyKTsNCit9DQorDQorc3RhdGljIHZvaWQgcG9ydGJfaW5zdGFsbCh2b2lkKQ0KK3sNCisgICAgREVWX0dQSU9fUFRSIHBvcnRfcHRyID0gJnBvcnRfYjsNCisgICAgREVWX0dQSU9fSU5GT19QVFIgaW5mb19wdHIgPSAmKHBvcnRfYi5ncGlvX2luZm8pOw0KKyAgICBEV19HUElPX1BPUlRfUFRSIGR3X3BvcnRfcHRyID0gJihkd19ncGlvX3BvcnRfYik7DQorDQorICAgIGluZm9fcHRyLT5ncGlvX2N0cmwgPSAodm9pZCAqKWR3X3BvcnRfcHRyOw0KKyAgICBpbmZvX3B0ci0+b3BuX2NudCA9IDA7DQorICAgIGluZm9fcHRyLT5tZXRob2QgPSAwOw0KKyAgICBpbmZvX3B0ci0+ZGlyZWN0aW9uID0gMDsNCisgICAgaW5mb19wdHItPmV4dHJhID0gMDsNCisNCisgICAgZHdfcG9ydF9wdHItPm5vID0gRFdfR1BJT19QT1JUX0I7DQorICAgIGR3X3BvcnRfcHRyLT5yZWdzID0gKERXX0dQSU9fUkVHX1BUUikoUEVSSVBIRVJBTF9CQVNFIHwgUkVMX1JFR0JBU0VfR1BJTzApOw0KKyAgICBkd19wb3J0X3B0ci0+dmFsaWRfYml0X21hc2sgPSBFTVNLX0dQSU9fQl9WQUxJRF9NQVNLOw0KKw0KKyAgICBkd19wb3J0X3B0ci0+aW50bm8gPSBJTlROT19HUElPOw0KKyAgICBkd19wb3J0X3B0ci0+aW50X2hhbmRsZXIgPSBwb3J0Yl9pc3I7DQorICAgIGR3X3BvcnRfcHRyLT5ncGlvX2JpdF9pc3IgPSBOVUxMOw0KKw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19vcGVuID0gcG9ydGJfb3BlbjsNCisgICAgcG9ydF9wdHItPmdwaW9fY2xvc2UgPSBwb3J0Yl9jbG9zZTsNCisgICAgcG9ydF9wdHItPmdwaW9fY29udHJvbCA9IHBvcnRiX2NvbnRyb2w7DQorICAgIHBvcnRfcHRyLT5ncGlvX3dyaXRlID0gcG9ydGJfd3JpdGU7DQorICAgIHBvcnRfcHRyLT5ncGlvX3JlYWQgPSBwb3J0Yl9yZWFkOw0KK30NCisjZW5kaWYNCisNCisNCisjaWYgKFVTRV9EV19HUElPX1BPUlRfQykNCitzdGF0aWMgREVWX0dQSU8gICAgIHBvcnRfYzsNCitzdGF0aWMgRFdfR1BJT19QT1JUIGR3X2dwaW9fcG9ydF9jOw0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRjX29wZW4odWludDMyX3QgZGlyKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fb3BlbigmcG9ydF9jLCBkaXIpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Y19jbG9zZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fY2xvc2UoJnBvcnRfYyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQzMl90IHBvcnRjX2NvbnRyb2wodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fY29udHJvbCgmcG9ydF9jLCBjdHJsX2NtZCwgcGFyYW0pOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Y193cml0ZSh1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb193cml0ZSgmcG9ydF9jLCB2YWwsIG1hc2spOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0Y19yZWFkKHVpbnQzMl90ICp2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICByZXR1cm4gZHdfZ3Bpb19yZWFkKCZwb3J0X2MsIHZhbCwgbWFzayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBvcnRjX2lzcih2b2lkICpwdHIpDQorew0KKyAgICBkd19ncGlvX2lzcl9oYW5kbGVyKCZwb3J0X2MsIHB0cik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBvcnRjX2luc3RhbGwodm9pZCkNCit7DQorICAgIERFVl9HUElPX1BUUiBwb3J0X3B0ciA9ICZwb3J0X2M7DQorICAgIERFVl9HUElPX0lORk9fUFRSIGluZm9fcHRyID0gJihwb3J0X2MuZ3Bpb19pbmZvKTsNCisgICAgRFdfR1BJT19QT1JUX1BUUiBkd19wb3J0X3B0ciA9ICYoZHdfZ3Bpb19wb3J0X2MpOw0KKw0KKyAgICBpbmZvX3B0ci0+Z3Bpb19jdHJsID0gKHZvaWQgKilkd19wb3J0X3B0cjsNCisgICAgaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBpbmZvX3B0ci0+bWV0aG9kID0gMDsNCisgICAgaW5mb19wdHItPmRpcmVjdGlvbiA9IDA7DQorICAgIGluZm9fcHRyLT5leHRyYSA9IDA7DQorDQorICAgIGR3X3BvcnRfcHRyLT5ubyA9IERXX0dQSU9fUE9SVF9DOw0KKyAgICBkd19wb3J0X3B0ci0+cmVncyA9IChEV19HUElPX1JFR19QVFIpKFBFUklQSEVSQUxfQkFTRSB8IFJFTF9SRUdCQVNFX0dQSU8wKTsNCisgICAgZHdfcG9ydF9wdHItPnZhbGlkX2JpdF9tYXNrID0gRU1TS19HUElPX0NfVkFMSURfTUFTSzsNCisNCisgICAgZHdfcG9ydF9wdHItPmludG5vID0gSU5UTk9fR1BJTzsNCisgICAgZHdfcG9ydF9wdHItPmludF9oYW5kbGVyID0gcG9ydGNfaXNyOw0KKyAgICBkd19wb3J0X3B0ci0+Z3Bpb19iaXRfaXNyID0gTlVMTDsNCisNCisgICAgcG9ydF9wdHItPmdwaW9fb3BlbiA9IHBvcnRjX29wZW47DQorICAgIHBvcnRfcHRyLT5ncGlvX2Nsb3NlID0gcG9ydGNfY2xvc2U7DQorICAgIHBvcnRfcHRyLT5ncGlvX2NvbnRyb2wgPSBwb3J0Y19jb250cm9sOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb193cml0ZSA9IHBvcnRjX3dyaXRlOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19yZWFkID0gcG9ydGNfcmVhZDsNCit9DQorI2VuZGlmDQorDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0QpDQorc3RhdGljIERFVl9HUElPICAgICBwb3J0X2Q7DQorc3RhdGljIERXX0dQSU9fUE9SVCBkd19ncGlvX3BvcnRfZDsNCisNCitzdGF0aWMgaW50MzJfdCBwb3J0ZF9vcGVuKHVpbnQzMl90IGRpcikNCit7DQorICAgIHJldHVybiBkd19ncGlvX29wZW4oJnBvcnRfZCwgZGlyKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGRfY2xvc2Uodm9pZCkNCit7DQorICAgIHJldHVybiBkd19ncGlvX2Nsb3NlKCZwb3J0X2QpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBwb3J0ZF9jb250cm9sKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIHJldHVybiBkd19ncGlvX2NvbnRyb2woJnBvcnRfZCwgY3RybF9jbWQsIHBhcmFtKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGRfd3JpdGUodWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fd3JpdGUoJnBvcnRfZCwgdmFsLCBtYXNrKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgcG9ydGRfcmVhZCh1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgcmV0dXJuIGR3X2dwaW9fcmVhZCgmcG9ydF9kLCB2YWwsIG1hc2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBwb3J0ZF9pc3Iodm9pZCAqcHRyKQ0KK3sNCisgICAgZHdfZ3Bpb19pc3JfaGFuZGxlcigmcG9ydF9kLCBwdHIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBwb3J0ZF9pbnN0YWxsKHZvaWQpDQorew0KKyAgICBERVZfR1BJT19QVFIgcG9ydF9wdHIgPSAmcG9ydF9kOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBpbmZvX3B0ciA9ICYocG9ydF9kLmdwaW9faW5mbyk7DQorICAgIERXX0dQSU9fUE9SVF9QVFIgZHdfcG9ydF9wdHIgPSAmKGR3X2dwaW9fcG9ydF9kKTsNCisNCisgICAgaW5mb19wdHItPmdwaW9fY3RybCA9ICh2b2lkICopZHdfcG9ydF9wdHI7DQorICAgIGluZm9fcHRyLT5vcG5fY250ID0gMDsNCisgICAgaW5mb19wdHItPm1ldGhvZCA9IDA7DQorICAgIGluZm9fcHRyLT5kaXJlY3Rpb24gPSAwOw0KKyAgICBpbmZvX3B0ci0+ZXh0cmEgPSAwOw0KKw0KKyAgICBkd19wb3J0X3B0ci0+bm8gPSBEV19HUElPX1BPUlRfRDsNCisgICAgZHdfcG9ydF9wdHItPnJlZ3MgPSAoRFdfR1BJT19SRUdfUFRSKShQRVJJUEhFUkFMX0JBU0UgfCBSRUxfUkVHQkFTRV9HUElPMCk7DQorICAgIGR3X3BvcnRfcHRyLT52YWxpZF9iaXRfbWFzayA9IEVNU0tfR1BJT19EX1ZBTElEX01BU0s7DQorDQorICAgIGR3X3BvcnRfcHRyLT5pbnRubyA9IElOVE5PX0dQSU87DQorICAgIGR3X3BvcnRfcHRyLT5pbnRfaGFuZGxlciA9IHBvcnRkX2lzcjsNCisgICAgZHdfcG9ydF9wdHItPmdwaW9fYml0X2lzciA9IE5VTEw7DQorDQorICAgIHBvcnRfcHRyLT5ncGlvX29wZW4gPSBwb3J0ZF9vcGVuOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19jbG9zZSA9IHBvcnRkX2Nsb3NlOw0KKyAgICBwb3J0X3B0ci0+Z3Bpb19jb250cm9sID0gcG9ydGRfY29udHJvbDsNCisgICAgcG9ydF9wdHItPmdwaW9fd3JpdGUgPSBwb3J0ZF93cml0ZTsNCisgICAgcG9ydF9wdHItPmdwaW9fcmVhZCA9IHBvcnRkX3JlYWQ7DQorfQ0KKyNlbmRpZg0KKw0KK0RFVl9HUElPX1BUUiBncGlvX2dldF9kZXYoaW50MzJfdCBncGlvX2lkKQ0KK3sNCisgICAgc3RhdGljIHVpbnQzMl90IGluc3RhbGxfZmxhZyA9IDA7DQorDQorICAgIC8qIGludGFsbCBkZXZpY2Ugb2JqZWN0cyAqLw0KKyAgICBpZiAoaW5zdGFsbF9mbGFnID09IDApDQorICAgIHsNCisgICAgICAgIGluc3RhbGxfZmxhZyA9IDE7DQorICAgICAgICBkd19ncGlvX2FsbF9pbnN0YWxsKCk7DQorICAgIH0NCisNCisgICAgc3dpdGNoIChncGlvX2lkKQ0KKyAgICB7DQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0EpDQorDQorICAgIGNhc2UgRFdfR1BJT19QT1JUX0E6DQorICAgICAgICByZXR1cm4gJnBvcnRfYTsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19HUElPX1BPUlRfQikNCisNCisgICAgY2FzZSBEV19HUElPX1BPUlRfQjoNCisgICAgICAgIHJldHVybiAmcG9ydF9iOw0KKyNlbmRpZg0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9DKQ0KKw0KKyAgICBjYXNlIERXX0dQSU9fUE9SVF9DOg0KKyAgICAgICAgcmV0dXJuICZwb3J0X2M7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0QpDQorDQorICAgIGNhc2UgRFdfR1BJT19QT1JUX0Q6DQorICAgICAgICByZXR1cm4gJnBvcnRfZDsNCisjZW5kaWYNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIHJldHVybiBOVUxMOw0KK30NCisNCit2b2lkIGR3X2dwaW9fYWxsX2luc3RhbGwodm9pZCkNCit7DQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0EpDQorICAgIHBvcnRhX2luc3RhbGwoKTsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19HUElPX1BPUlRfQikNCisgICAgcG9ydGJfaW5zdGFsbCgpOw0KKyNlbmRpZg0KKyNpZiAoVVNFX0RXX0dQSU9fUE9SVF9DKQ0KKyAgICBwb3J0Y19pbnN0YWxsKCk7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfR1BJT19QT1JUX0QpDQorICAgIHBvcnRkX2luc3RhbGwoKTsNCisjZW5kaWYNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9EV19HUElPX09CSiAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL2dwaW8vZHdfZ3Bpb19vYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzdjNGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9kd19ncGlvX29iai5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMjQNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX0dQSU9fT0JKDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgb2YgZGVzaWdud2FyZSBncGlvIG9iamVjdCBpbnN0YW50aWF0aW9uIG9uIGVtc2sNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfRFdfR1BJT19PQkoNCisgKiBAew0KKyAqLw0KKyNpZm5kZWYgX0RXX0dQSU9fT0JKX0hfDQorI2RlZmluZSBfRFdfR1BJT19PQkpfSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmgiDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWdud2FyZSBHUElPIFBvcnQgQmFuayBDb250cm9sIE1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBVU0VfRFdfR1BJT19QT1JUX0EgICAgICAxDQorI2RlZmluZSBVU0VfRFdfR1BJT19QT1JUX0IgICAgICAxDQorI2RlZmluZSBVU0VfRFdfR1BJT19QT1JUX0MgICAgICAxDQorI2RlZmluZSBVU0VfRFdfR1BJT19QT1JUX0QgICAgICAxDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWdud2FyZSBHUElPIFBvcnQgSW50ZXJydXB0IEF2YWlsYWJsZSBOdW1iZXIgTWFjcm9zDQorICogQHsNCisgKi8NCisjZGVmaW5lIEVNU0tfR1BJT19BX0lOVF9NQVhfQ09VTlQgICAzMg0KKyNkZWZpbmUgRU1TS19HUElPX0JfSU5UX01BWF9DT1VOVCAgIDANCisjZGVmaW5lIEVNU0tfR1BJT19DX0lOVF9NQVhfQ09VTlQgICAwDQorI2RlZmluZSBFTVNLX0dQSU9fRF9JTlRfTUFYX0NPVU5UICAgMA0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbndhcmUgR1BJTyBQb3J0IEF2YWlsYWJsZSBCaXRzIE1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBFTVNLX0dQSU9fQV9WQUxJRF9NQVNLICAgICAgRFdfR1BJT19NQVNLX0FMTA0KKyNkZWZpbmUgRU1TS19HUElPX0JfVkFMSURfTUFTSyAgICAgIERXX0dQSU9fTUFTS19BTEwNCisjZGVmaW5lIEVNU0tfR1BJT19DX1ZBTElEX01BU0sgICAgICBEV19HUElPX01BU0tfQUxMDQorI2RlZmluZSBFTVNLX0dQSU9fRF9WQUxJRF9NQVNLICAgICAgRFdfR1BJT19NQVNLX0FMTA0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2lkIGR3X2dwaW9fYWxsX2luc3RhbGwodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRFdfR1BJT19PQkpfSF8qLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfR1BJT19PQkogKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2Vtc2tfZ3Bpby5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTNlNTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uYwpAQCAtMCwwICsxLDIwMiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0zMQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9HUElPIEVNU0sgR1BJTyBEcml2ZXINCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSSVZFUg0KKyAqIFxicmllZiAgIEVNU0sgT25ib2FyZCBHUElPIFBlcmlwaGVyYWxzIERyaXZlcg0KKyAqIFxkZXRhaWxzDQorICogICAgICBJbXBsZW1lbnRhdGlvbiBvZiBFTVNLIG9uLWJvYXJkIGJ1dHRvbiwgbGVkLCBkaXAgc3dpdGNoIGRyaXZlciwNCisgKiAgdGhpcyBpcyBmb3IgYmV0dGVyIHVzZSwgeW91IGRvbid0IGhhdmUgdG8gZ2V0IGEgZ3BpbyBvYmplY3QgYmVmb3JlIG9wZXJhdGluZw0KKyAqICBsZWQsYnV0dG9uLHN3aXRjaCwgYmVjYXVzZSBzb21lIGJhc2ljIGZ1bmN0aW9ucyBmb3IgdXNhZ2UgYXJlIHByb3ZpZGVkLg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfR1BJTw0KKyAqIFxicmllZiAgIGFsbCBvbiBlbXNrIGJvYXJkIGdwaW8gZGV2aWNlIGluaXQgYW5kIG9wZXJhdGUgZnVuY3Rpb25zDQorICogXGRldGFpbHMgdGhpcyBncGlvIGRldmljZXMgYXJlIGJ1dHRvbiwgbGVkLCBkaXAgc3dpdGNoDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX0dQSU8NCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9ncGlvL2Vtc2tfZ3Bpby5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2suaCINCisNCitzdGF0aWMgREVWX0dQSU8gKmxlZF9wb3J0Ow0KK3N0YXRpYyBERVZfR1BJTyAqYnV0dG9uX3BvcnQ7DQorc3RhdGljIERFVl9HUElPICpzd2l0Y2hfcG9ydDsNCisNCisjZGVmaW5lIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4oRVhQUikgICAgIENIRUNLX0VYUF9OT0VSQ0QoRVhQUiwgZXJyb3JfZXhpdCkNCisNCisvKiogZW1zayBvbiBib2FyZCBncGlvIGluaXQgKi8NCit2b2lkIGVtc2tfZ3Bpb19pbml0KHZvaWQpDQorew0KKyAgICBlbXNrX2xlZF9pbml0KCk7DQorICAgIGVtc2tfYnV0dG9uX2luaXQoKTsNCisgICAgZW1za19zd2l0Y2hfaW5pdCgpOw0KK30NCisNCisvKiogZW1zayBvbi1ib2FyZCBsZWQgaW5pdCwgbGVkIGRlZmF1bHQgb2ZmICovDQordm9pZCBlbXNrX2xlZF9pbml0KHZvaWQpDQorew0KKyAgICBsZWRfcG9ydCA9IGdwaW9fZ2V0X2RldihFTVNLX0xFRF9QT1JUKTsNCisNCisgICAgRU1TS19HUElPX0NIRUNLX0VYUF9OT1JUTihsZWRfcG9ydCAhPSBOVUxMKTsNCisNCisgICAgaWYgKGxlZF9wb3J0LT5ncGlvX29wZW4oRU1TS19MRURfRElSKSA9PSBFX09QTkVEKQ0KKyAgICB7DQorICAgICAgICBsZWRfcG9ydC0+Z3Bpb19jb250cm9sKEdQSU9fQ01EX1NFVF9CSVRfRElSX09VVFBVVCwgKHZvaWQgKikoRU1TS19MRURfTUFTSykpOw0KKyAgICAgICAgbGVkX3BvcnQtPmdwaW9fY29udHJvbChHUElPX0NNRF9ESVNfQklUX0lOVCwgKHZvaWQgKikoRU1TS19MRURfTUFTSykpOw0KKyAgICB9DQorDQorICAgIGxlZF93cml0ZSgwLCBCT0FSRF9MRURfTUFTSyk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuOw0KK30NCisNCisvKiogZW1zayBvbi1ib2FyZCBidXR0b24gaW5pdCAqLw0KK3ZvaWQgZW1za19idXR0b25faW5pdCh2b2lkKQ0KK3sNCisgICAgYnV0dG9uX3BvcnQgPSBncGlvX2dldF9kZXYoRU1TS19CVVRUT05fUE9SVCk7DQorDQorICAgIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4oYnV0dG9uX3BvcnQgIT0gTlVMTCk7DQorDQorICAgIGlmIChidXR0b25fcG9ydC0+Z3Bpb19vcGVuKEVNU0tfQlVUVE9OX0RJUikgPT0gRV9PUE5FRCkNCisgICAgew0KKyAgICAgICAgYnV0dG9uX3BvcnQtPmdwaW9fY29udHJvbChHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVCwgKHZvaWQgKikoRU1TS19CVVRUT05fTUFTSykpOw0KKyAgICAgICAgYnV0dG9uX3BvcnQtPmdwaW9fY29udHJvbChHUElPX0NNRF9ESVNfQklUX0lOVCwgKHZvaWQgKikoRU1TS19CVVRUT05fTUFTSykpOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuOw0KK30NCisNCisvKiogZW1zayBvbi1ib2FyZCBzd2l0Y2ggaW5pdCAqLw0KK3ZvaWQgZW1za19zd2l0Y2hfaW5pdCh2b2lkKQ0KK3sNCisgICAgc3dpdGNoX3BvcnQgPSBncGlvX2dldF9kZXYoRU1TS19TV0lUQ0hfUE9SVCk7DQorDQorICAgIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4oc3dpdGNoX3BvcnQgIT0gTlVMTCk7DQorDQorICAgIGlmIChzd2l0Y2hfcG9ydC0+Z3Bpb19vcGVuKEVNU0tfU1dJVENIX0RJUikgPT0gRV9PUE5FRCkNCisgICAgew0KKyAgICAgICAgc3dpdGNoX3BvcnQtPmdwaW9fY29udHJvbChHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVCwgKHZvaWQgKikoRU1TS19TV0lUQ0hfTUFTSykpOw0KKyAgICAgICAgc3dpdGNoX3BvcnQtPmdwaW9fY29udHJvbChHUElPX0NNRF9ESVNfQklUX0lOVCwgKHZvaWQgKikoRU1TS19TV0lUQ0hfTUFTSykpOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuOw0KK30NCisNCisvKioNCisgKiB3b3JrYXJvdW5kIGZvciBnZXQgbGVkIHZhbHVlDQorICogYmVjYXVzZSBncGlvIHJlYWQgcmV0dXJuIGlzIG5vdCByaWdodA0KKyAqLw0KK3N0YXRpYyB1aW50MzJfdCBnX2xlZF92YWw7DQorLyoqIHdyaXRlIDEgdG8gbGlnaHQgb24gbGVkIGJpdCwgZWxzZSBsaWdodCBvZmYgbGVkICovDQordm9pZCBsZWRfd3JpdGUodWludDMyX3QgbGVkX3ZhbCwgdWludDMyX3QgbWFzaykNCit7DQorICAgIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4obGVkX3BvcnQgIT0gTlVMTCk7DQorDQorICAgIGxlZF92YWwgPSAofmxlZF92YWwpICYgbWFzazsNCisgICAgbGVkX3ZhbCA9IGxlZF92YWwgPDwgRU1TS19MRURfT0ZGU0VUOw0KKyAgICBtYXNrID0gKG1hc2sgPDwgRU1TS19MRURfT0ZGU0VUKSAmIEVNU0tfTEVEX01BU0s7DQorICAgIGxlZF9wb3J0LT5ncGlvX3dyaXRlKGxlZF92YWwsIG1hc2spOw0KKw0KKyAgICBnX2xlZF92YWwgPSBsZWRfdmFsOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybjsNCit9DQorDQorLyoqIHJlYWQgbGVkIHZhbHVlLCBvbiBmb3IgMSwgb2ZmIGZvciAwICovDQorLyoqIFx0b2RvIG5lZWQgdG8gZmluZCB3aHkgd2hlbiBsZWQgc2V0IHRvIG91dHB1dCB0aGVuIGNhbid0IGdldCB0aGUgcmlnaHQgdmFsdWUgb2YgbGVkICovDQordWludDMyX3QgbGVkX3JlYWQodWludDMyX3QgbWFzaykNCit7DQorICAgIHVpbnQzMl90IHZhbHVlOw0KKw0KKyAgICBFTVNLX0dQSU9fQ0hFQ0tfRVhQX05PUlROKGxlZF9wb3J0ICE9IE5VTEwpOw0KKw0KKyAgICBtYXNrID0gKG1hc2sgPDwgRU1TS19MRURfT0ZGU0VUKSAmIEVNU0tfTEVEX01BU0s7DQorICAgIGxlZF9wb3J0LT5ncGlvX3JlYWQoJnZhbHVlLCBtYXNrKTsNCisgICAgdmFsdWUgPSAofnZhbHVlKSAmIEVNU0tfTEVEX01BU0s7DQorDQorICAgIHJldHVybiAodmFsdWUgPj4gRU1TS19MRURfT0ZGU0VUKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqIFB1bGwgZG93biBzd2l0Y2ggcmV0dXJuIDEsIGVsc2UgMCAqLw0KK3VpbnQzMl90IHN3aXRjaF9yZWFkKHVpbnQzMl90IG1hc2spDQorew0KKyAgICB1aW50MzJfdCB2YWx1ZTsNCisNCisgICAgRU1TS19HUElPX0NIRUNLX0VYUF9OT1JUTihzd2l0Y2hfcG9ydCAhPSBOVUxMKTsNCisNCisgICAgbWFzayA9IChtYXNrIDw8IEVNU0tfU1dJVENIX09GRlNFVCkgJiBFTVNLX1NXSVRDSF9NQVNLOw0KKyAgICBzd2l0Y2hfcG9ydC0+Z3Bpb19yZWFkKCZ2YWx1ZSwgbWFzayk7DQorICAgIHZhbHVlID0gKH52YWx1ZSkgJiBtYXNrOw0KKw0KKyAgICByZXR1cm4gKHZhbHVlID4+IEVNU0tfU1dJVENIX09GRlNFVCk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKiBQcmVzcyBkb3duIGJpdCBzZXQgdG8gMSBlbHNlIDAgKi8NCit1aW50MzJfdCBidXR0b25fcmVhZCh1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgdWludDMyX3QgdmFsdWU7DQorDQorICAgIEVNU0tfR1BJT19DSEVDS19FWFBfTk9SVE4oYnV0dG9uX3BvcnQgIT0gTlVMTCk7DQorDQorICAgIG1hc2sgPSAobWFzayA8PCBFTVNLX0JVVFRPTl9PRkZTRVQpICYgRU1TS19CVVRUT05fTUFTSzsNCisgICAgYnV0dG9uX3BvcnQtPmdwaW9fcmVhZCgmdmFsdWUsIG1hc2spOw0KKyAgICB2YWx1ZSA9ICh+dmFsdWUpICYgbWFzazsNCisNCisgICAgcmV0dXJuICh2YWx1ZSA+PiBFTVNLX0JVVFRPTl9PRkZTRVQpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX0dQSU8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9ncGlvL2Vtc2tfZ3Bpby5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ0Mjc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svZ3Bpby9lbXNrX2dwaW8uaApAQCAtMCwwICsxLDk2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTMxDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9HUElPDQorICogXGJyaWVmICAgZW1zayBib2FyZCBncGlvIHJlbGF0ZWQgZnVuY3Rpb25zIGhlYWRlcg0KKyAqLw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9HUElPDQorICogQHsNCisgKi8NCisjaWZuZGVmIF9FTVNLX0dQSU9fSF8NCisjZGVmaW5lIF9FTVNLX0dQSU9fSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmgiDQorDQorLyoqDQorICogXG5hbWUgICAgRU1TSyBMRUQgUG9ydCBDb25maWd1cmF0aW9uDQorICogQHsNCisgKi8NCisjZGVmaW5lIEVNU0tfTEVEX09GRlNFVCAgICAgKDApDQorI2RlZmluZSBFTVNLX0xFRF9NQVNLICAgICAgICgoMHgxZmYpIDw8IEVNU0tfTEVEX09GRlNFVCkNCisjZGVmaW5lIEVNU0tfTEVEX1BPUlQgICAgICAgKERXX0dQSU9fUE9SVF9CKQ0KKyNkZWZpbmUgRU1TS19MRURfRElSICAgICAgICAoKDB4MWZmKSA8PCBFTVNLX0xFRF9PRkZTRVQpDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRU1TSyBTd2l0Y2ggUG9ydCBDb25maWd1cmF0aW9uDQorICogQHsNCisgKi8NCisjZGVmaW5lIEVNU0tfU1dJVENIX09GRlNFVCAgKDApDQorI2RlZmluZSBFTVNLX1NXSVRDSF9NQVNLICAgICgoMHhmKSA8PCBFTVNLX1NXSVRDSF9PRkZTRVQpDQorI2RlZmluZSBFTVNLX1NXSVRDSF9QT1JUICAgIChEV19HUElPX1BPUlRfQykNCisjZGVmaW5lIEVNU0tfU1dJVENIX0RJUiAgICAgKCgweDApIDw8IEVNU0tfU1dJVENIX09GRlNFVCkNCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBFTVNLIEJ1dHRvbiBQb3J0IENvbmZpZ3VyYXRpb24NCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRU1TS19CVVRUT05fT0ZGU0VUICAoMCkNCisjZGVmaW5lIEVNU0tfQlVUVE9OX01BU0sgICAgKCgweDcpIDw8IEVNU0tfQlVUVE9OX09GRlNFVCkNCisjZGVmaW5lIEVNU0tfQlVUVE9OX1BPUlQgICAgKERXX0dQSU9fUE9SVF9BKQ0KKyNkZWZpbmUgRU1TS19CVVRUT05fRElSICAgICAoKDB4MCkgPDwgRU1TS19CVVRUT05fT0ZGU0VUKQ0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2lkIGVtc2tfbGVkX2luaXQodm9pZCk7DQorZXh0ZXJuIHZvaWQgZW1za19idXR0b25faW5pdCh2b2lkKTsNCitleHRlcm4gdm9pZCBlbXNrX3N3aXRjaF9pbml0KHZvaWQpOw0KK2V4dGVybiB2b2lkIGVtc2tfZ3Bpb19pbml0KHZvaWQpOw0KK2V4dGVybiB2b2lkIGxlZF93cml0ZSh1aW50MzJfdCBsZWRfdmFsLCB1aW50MzJfdCBtYXNrKTsNCitleHRlcm4gdWludDMyX3QgbGVkX3JlYWQodWludDMyX3QgbWFzayk7DQorZXh0ZXJuIHVpbnQzMl90IHN3aXRjaF9yZWFkKHVpbnQzMl90IG1hc2spOw0KK2V4dGVybiB1aW50MzJfdCBidXR0b25fcmVhZCh1aW50MzJfdCBtYXNrKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9FTVNLX0dQSU9fSF8gKi8NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX0dQSU8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL21yZjI0ajQwLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL21yZjI0ajQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyOGUzNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvbXJmMjRqNDAuYwpAQCAtMCwwICsxLDU5MSBAQAorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIE1pY2hlbGUgQmFsaXN0cmVyaQ0KKyAqDQorICogRGVyaXZlZCBmcm9tIGNvZGUgb3JpZ2luYWxseSBDb3B5cmlnaHQgKEMpIDIwMTEsIEFsZXggSG9ybnVuZw0KKyAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKyAqDQorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCisgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMDQorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVINCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQorICoNCisgKiBNb2RpZmllZCBieSBRaWFuZyBHdShRaWFuZy5HdUBzeW5vcHN5cy5jb20pIGZvciBlbWJBUkMNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wNy0yOQ0KKyAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9SRl9NUkYyNEo0MCAgRU1TSyBSRi1NUkYyNEo0MCBEcml2ZXINCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9SRg0KKyAqIFxicmllZiAgIEVNU0sgUkYgTVJGMjRKNDAgZHJpdmVyDQorICogXGRldGFpbHMNCisgKiAgICAgIEltcGxlbWVudCB0aGUgTVJGMjRKNDAgZHJpdmVyIHVzaW5nIHRoZSBEZXNpZ25XYXJlIFNQSSBkZXZpY2UgZHJpdmVyLg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfUkZfTVJGMjRKNDANCisgKiBcYnJpZWYgICBSRiBNUkYyNEo0MCBkcml2ZXINCisgKiBcZGV0YWlscyBJbXBsZW1lbnQgTVJGMjRKNDAgZHJpdmVyLg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9SRl9NUkYyNEo0MA0KKyAqIEB7DQorICovDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5oIg0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSAiYm9hcmQvZW1zay9wbXJmL3BtcmYuaCINCisNCisvKiBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcoKSwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZygpLA0KKyAqIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoKSBhbmQgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoKQ0KKyAqIGlzIG1vZGlmaWVkIGZvciBlbWJBUkMgKi8NCisvKiogUmVhZCByZWdpc3RlciBpbiBsb25nIGFkZHJlc3MgbWVtb3J5IHNwYWNlICovDQordWludDhfdCBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkcikNCit7DQorICAgIHJldHVybiBwbXJmX3JlYWRfbG9uZ19jdHJsX3JlZyhhZGRyKTsNCit9DQorDQorLyoqIFJlYWQgcmVnaXN0ZXIgaW4gc2hvcnQgYWRkcmVzcyBtZW1vcnkgc3BhY2UgKi8NCit1aW50OF90IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyKQ0KK3sNCisgICAgcmV0dXJuIHBtcmZfcmVhZF9zaG9ydF9jdHJsX3JlZyhhZGRyKTsNCit9DQorDQorLyoqIFdyaXRlIHJlZ2lzdGVyIGluIGxvbmcgYWRkcmVzcyBtZW1vcnkgc3BhY2UgKi8NCit2b2lkIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkciwgdWludDhfdCB2YWx1ZSkNCit7DQorICAgIHBtcmZfd3JpdGVfbG9uZ19jdHJsX3JlZyhhZGRyLCB2YWx1ZSk7DQorfQ0KKw0KKy8qKiBXcml0ZSByZWdpc3RlciBpbiBzaG9ydCBhZGRyZXNzIG1lbW9yeSBzcGFjZSAqLw0KK3ZvaWQgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyLCB1aW50OF90IHZhbHVlKQ0KK3sNCisgICAgcG1yZl93cml0ZV9zaG9ydF9jdHJsX3JlZyhhZGRyLCB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBJTlRDT046IEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyDQorICogXGRldGFpbHMgRW5hYmxlIFRYIE5vcm1hbCBGSUZPIHRyYW5zbWlzc2lvbiBpbnRlcnJ1cHQgKFRYTklFID0gMCksDQorICogICAgICAgICAgUlggRklGTyByZWNlcHRpb24gaW50ZXJydXB0IChSWElFID0gMCksDQorICogICAgICAgICAgc2VjdXJpdHkga2V5IHJlcXVlc3QgaW50ZXJydXB0IChTRUNJRSA9IDApDQorICovDQordm9pZCBtcmYyNGo0MF9pZSh2b2lkKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfSU5UQ09OLCB+KE1SRjI0SjQwX1RYTklFIHwgTVJGMjRKNDBfUlhJRSB8IE1SRjI0SjQwX1NFQ0lFKSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBTT0ZUUlNUOiBTb2Z0d2FyZSBSZXNldCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFJlc2V0IHBvd2VyIG1hbmFnZW1lbnQgY2lyY3VpdHJ5IChSU1RQV1IgPSAxKQ0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfcHdyX3Jlc2V0KHZvaWQpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TT0ZUUlNULCBNUkYyNEo0MF9SU1RQV1IpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgU09GVFJTVDogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXINCisgKiBcZGV0YWlscyBSZXNldCBiYXNlYmFuZCBjaXJjdWl0cnkgKFJTVEJCID0gMSkNCisgKi8NCit2b2lkIG1yZjI0ajQwX2JiX3Jlc2V0KHZvaWQpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TT0ZUUlNULCBNUkYyNEo0MF9SU1RCQik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBTT0ZUUlNUOiBTb2Z0d2FyZSBSZXNldCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFJlc2V0IE1BQyBjaXJjdWl0cnkgKFJTVE1BQyA9IDEpDQorICovDQordm9pZCBtcmYyNGo0MF9tYWNfcmVzZXQodm9pZCkNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NPRlRSU1QsIE1SRjI0SjQwX1JTVE1BQyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBSRkNUTDogUkYgTW9kZSBDb250cm9sIFJlZ2lzdGVyDQorICogXGRldGFpbHMgUGVyZm9ybSBSRiBSZXNldCBieSBzZXR0aW5nIFJGUlNUID0gMSBhbmQgdGhlbiBSRlJTVCA9IDANCisgKi8NCit2b2lkIG1yZjI0ajQwX3JmX3Jlc2V0KHZvaWQpDQorew0KKyAgICB1aW50OF90IG9sZCA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUkZDVEwpOw0KKw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SRkNUTCwgb2xkIHwgTVJGMjRKNDBfUkZSU1QpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SRkNUTCwgb2xkICYgfk1SRjI0SjQwX1JGUlNUKTsNCisgICAgbXJmMjRqNDBfZGVsYXlfbXMoMik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIEdldCBGUFNUQVQgaW4gVFhOQ09OOiBUcmFuc21pdCBOb3JtYWwgRklGTyBDb250cm9sIFJlZ2lzdGVyDQorICogXGRldGFpbHMgR2V0IHN0YXR1cyBvZiB0aGUgZnJhbWUgcGVuZGluZyBiaXQgaW4gdGhlIHJlY2VpdmVkIEFja25vd2xlZGdlbWVudCBmcmFtZQ0KKyAqIFxyZXR2YWwgMSAgICBTZXQgZnJhbWUgcGVuZGluZyBiaXQNCisgKiBccmV0dmFsIDAgICAgQ2xlYXIgZnJhbWUgcGVuZGluZyBiaXQNCisgKi8NCit1aW50OF90IG1yZjI0ajQwX2dldF9wZW5kaW5nX2ZyYW1lKHZvaWQpDQorew0KKyAgICByZXR1cm4gKG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OKSA+PiA0KSAmIDB4MDE7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBSWEZMVVNIIGluIFJYRkxVU0g6IFJlY2VpdmUgRklGTyBGbHVzaCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFJlc2V0IFJYRklGTyBhZGRyZXNzIHBvaW50ZXIgdG8gemVybw0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfcnhmaWZvX2ZsdXNoKHZvaWQpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWEZMVVNILCAobXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWEZMVVNIKSB8IE1SRjI0SjQwX19SWEZMVVNIKSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBDSEFOTkVMIGluIFJGQ09OMDogUkYgQ29udHJvbCAwIFJlZ2lzdGVyDQorICogXGRldGFpbHMgU2V0IGNoYW5uZWwgbnVtYmVyDQorICogXHBhcmFtICBjaCAgIENoYW5uZWwgbnVtYmVyLCAwMDAwID0gQ2hhbm5lbCAxMSAoMjQwNSBNSHopIGFzIGRlZmF1bHQNCisgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9jaGFubmVsKGludDE2X3QgY2gpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMCwgTVJGMjRKNDBfQ0hBTk5FTChjaCkgfCBNUkYyNEo0MF9SRk9QVCgweDAzKSk7DQorICAgIG1yZjI0ajQwX3JmX3Jlc2V0KCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBQUk9NSSBpbiBSWE1DUjogUmVjZWl2ZSBNQUMgQ29udHJvbCBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFNldCBwcm9taXNjdW91cyBtb2RlDQorICogXHBhcmFtICBjcmNfY2hlY2sgICAgMSA9IERpc2NhcmQgcGFja2V0IHdoZW4gdGhlcmUgaXMgYSBNQUMgYWRkcmVzcyBtaXNtYXRjaCwNCisgKiAgICAgICAgICBpbGxlZ2FsIGZyYW1lIHR5cGUsIGRQQU4vc1BBTiBvciBNQUMgc2hvcnQgYWRkcmVzcyBtaXNtYXRjaCwNCisgKiAgICAgICAgICAwID0gUmVjZWl2ZSBhbGwgcGFja2V0IHR5cGVzIHdpdGggZ29vZCBDUkMNCisgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9wcm9taXNjdW91cyhib29sIGNyY19jaGVjaykNCit7DQorICAgIHVpbnQ4X3QgdyA9IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IpOw0KKw0KKyAgICBpZiAoIWNyY19jaGVjaykNCisgICAgew0KKyAgICAgICAgdyB8PSBNUkYyNEo0MF9QUk9NSTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHcgJj0gKH5NUkYyNEo0MF9QUk9NSSk7DQorICAgIH0NCisNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IsIHcpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgUEFOQ09PUkQgaW4gUlhNQ1I6IFJlY2VpdmUgTUFDIENvbnRyb2wgUmVnaXN0ZXINCisgKiBcZGV0YWlscyBTZXQgZGV2aWNlIGFzIFBBTiBjb29yZGluYXRvcg0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2Nvb3JkaW5hdG9yKHZvaWQpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUiwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUikgfCBNUkYyNEo0MF9QQU5DT09SRCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIENsZWFyIFBBTkNPT1JEIGluIFJYTUNSOiBSZWNlaXZlIE1BQyBDb250cm9sIFJlZ2lzdGVyDQorICogXGRldGFpbHMgRGV2aWNlIGlzIG5vdCBzZXQgYXMgUEFOIGNvb3JkaW5hdG9yDQorICovDQordm9pZCBtcmYyNGo0MF9jbGVhcl9jb29yZGluYXRvcih2b2lkKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IpICYgfk1SRjI0SjQwX1BBTkNPT1JEKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IFBBTiBJRCBpbiBQQU5JREwgYW5kIFBBTklESA0KKyAqIFxwYXJhbSAgKnBhbiBQb2ludGVyIG9mIFBBTiBJRCwgcGFuWzBdIGZvciBsb3cgYnl0ZSBhbmQgcGFuWzFdIGZvciBoaWdoIGJ5dGUNCisgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9wYW4odWludDhfdCAqcGFuKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUEFOSURMLCBwYW5bMF0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9QQU5JREgsIHBhblsxXSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBzaG9ydCBhZGRyZXNzIGluIFNBRFJMIGFuZCBTQURSSA0KKyAqIFxwYXJhbSAgKmFkZHIgICAgUG9pbnRlciBvZiBzaG9ydCBhZGRyZXNzLCBhZGRyWzBdIGZvciBsb3cgYnl0ZSBhbmQgYWRkclsxXSBmb3IgaGlnaCBieXRlDQorICovDQordm9pZCBtcmYyNGo0MF9zZXRfc2hvcnRfYWRkcih1aW50OF90ICphZGRyKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU0FEUkwsIGFkZHJbMF0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TQURSSCwgYWRkclsxXSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBleHRlbmRlZCBhZGRyZXNzIGZyb20gRUFEUjAgdG8gRUFEUjcNCisgKiBccGFyYW0gICphZGRyICAgIFBvaW50ZXIgb2YgZXh0ZW5kZWQgYWRkcmVzcywgZXVpWzBdIHRvIGV1aVs3XQ0KKyAqLw0KKy8qIE1vZGlmaWVkIGZvciBlbWJBUkMgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9ldWkodWludDhfdCAqZXVpKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfRUFEUjAsIGV1aVswXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0VBRFIxLCBldWlbMV0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9FQURSMiwgZXVpWzJdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfRUFEUjMsIGV1aVszXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0VBRFI0LCBldWlbNF0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9FQURSNSwgZXVpWzVdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfRUFEUjYsIGV1aVs2XSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0VBRFI3LCBldWlbN10pOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBTZXQgYXNzb2NpYXRlZCBjb29yZGluYXRvciBzaG9ydCBhZGRyZXNzIGluIEFTU09TQURSMCBhbmQgQVNTT1NBRFIxDQorICogXHBhcmFtICAqYWRkciAgICBQb2ludGVyIG9mIGFzc29jaWF0ZWQgY29vcmRpbmF0b3Igc2hvcnQgYWRkcmVzcw0KKyAqLw0KKy8qIE1vZGlmaWVkIGZvciBlbWJBUkMgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9jb29yZGluYXRvcl9zaG9ydF9hZGRyKHVpbnQ4X3QgKmFkZHIpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09TQURSMCwgYWRkclswXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfQVNTT1NBRFIxLCBhZGRyWzFdKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IGFzc29jaWF0ZWQgY29vcmRpbmF0b3IgZXh0ZW5kZWQgYWRkcmVzcyBmcm9tIEFTU09FQURSMCB0byBBU1NPRUFEUjcNCisgKiBccGFyYW0gICphZGRyICAgIFBvaW50ZXIgb2YgYXNzb2NpYXRlZCBjb29yZGluYXRvciBleHRlbmRlZCBhZGRyZXNzLCBldWlbMF0gdG8gZXVpWzddDQorICovDQorLyogTW9kaWZpZWQgZm9yIGVtYkFSQyAqLw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2Nvb3JkaW5hdG9yX2V1aSh1aW50OF90ICpldWkpDQorew0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09FQURSMCwgZXVpWzBdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPRUFEUjEsIGV1aVsxXSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfQVNTT0VBRFIyLCBldWlbMl0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09FQURSMywgZXVpWzNdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPRUFEUjQsIGV1aVs0XSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfQVNTT0VBRFI1LCBldWlbNV0pOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX0FTU09FQURSNiwgZXVpWzZdKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9BU1NPRUFEUjcsIGV1aVs3XSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBrZXkgaW4gYWRkcmVzcyBmb3IgU0VDS1RYTkZJRk8gYW5kIFNFQ0tSWEZJRk8NCisgKiBccGFyYW0gIGFkZHJlc3MgIFRYIG5vcm1hbCBGSUZPIHNlY3VyaXR5IGtleSAoMHgyODApIGFuZCBSWCBGSUZPIHNlY3VyaXR5IGtleSAoMHgyQjApDQorICogXHBhcmFtICAqa2V5ICAgICBQb2ludGVyIG9mIHNlY3VyaXR5IGtleSAoMTYgYnl0ZXMpDQorICovDQorLyogTW9kaWZpZWQgZm9yIGVtYkFSQyAqLw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2tleSh1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICprZXkpDQorew0KKyAgICBwbXJmX3NldF9rZXkoYWRkcmVzcywga2V5KTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgUGVyZm9ybSBoYXJkd2FyZSBSZXNldCBieSBhc3NlcnRpbmcgUkVTRVQgcGluDQorICogXGRldGFpbHMgVGhlIE1SRjI0SjQwIHdpbGwgYmUgcmVsZWFzZWQgZnJvbSBSZXNldCBhcHByb3hpbWF0ZWx5IDI1MCB1cyBhZnRlciB0aGUgUkVTRVQgcGluIGlzIHJlbGVhc2VkLg0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfaGFyZF9yZXNldCgpDQorew0KKyAgICBtcmYyNGo0MF9yZXNldF9waW4oMCk7DQorDQorICAgIG1yZjI0ajQwX2RlbGF5X3VzKDUwMCk7DQorICAgIG1yZjI0ajQwX3Jlc2V0X3BpbigxKTsNCisgICAgbXJmMjRqNDBfZGVsYXlfdXMoNTAwKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgSW5pdGlhbGl6ZSBNUkYyNEo0MA0KKyAqLw0KKy8qIE1vZGlmaWVkIGZvciBlbWJBUkMgKi8NCit2b2lkIG1yZjI0ajQwX2luaXRpYWxpemUoKQ0KK3sNCisNCisgICAgdWludDhfdCBzb2Z0cnN0X3N0YXR1czsNCisgICAgdWludDhfdCByZl9zdGF0ZTsNCisNCisgICAgcG1yZl9hbGxfaW5zdGFsbCgpOw0KKw0KKyAgICAvL21yZjI0ajQwX2NzX3BpbigxKTsNCisgICAgLy9tcmYyNGo0MF93YWtlX3BpbigxKTsNCisgICAgbXJmMjRqNDBfd2FrZV9waW4oMSk7DQorDQorICAgIG1yZjI0ajQwX2hhcmRfcmVzZXQoKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU09GVFJTVCwgKE1SRjI0SjQwX1JTVFBXUiB8IE1SRjI0SjQwX1JTVEJCIHwgTVJGMjRKNDBfUlNUTUFDKSk7DQorICAgIG1yZjI0ajQwX2RlbGF5X3VzKDUwMCk7DQorDQorICAgIGRvDQorICAgIHsNCisgICAgICAgIHNvZnRyc3Rfc3RhdHVzID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TT0ZUUlNUKTsNCisgICAgfQ0KKyAgICB3aGlsZSAoKHNvZnRyc3Rfc3RhdHVzICYgKE1SRjI0SjQwX1JTVFBXUiB8IE1SRjI0SjQwX1JTVEJCIHwgTVJGMjRKNDBfUlNUTUFDKSkgIT0gMCk7DQorDQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1BBQ09OMiwgTVJGMjRKNDBfRklGT0VOIHwgTVJGMjRKNDBfVFhPTlRTKDB4MTgpKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhTVEJMLCBNUkYyNEo0MF9SRlNUQkwoOSkgfCBNUkYyNEo0MF9NU0lGUyg1KSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZDT04wLCBNUkYyNEo0MF9DSEFOTkVMKDApIHwgTVJGMjRKNDBfUkZPUFQoMHgwMykpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9sb25nX2N0cmxfcmVnKE1SRjI0SjQwX1JGQ09OMSwgTVJGMjRKNDBfVkNPT1BUKDB4MDIpKTsgLy8gSW5pdGlhbGl6ZSBWQ09PUFQgPSAweDAyDQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZDT04yLCBNUkYyNEo0MF9QTExFTik7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZDT042LCAoTVJGMjRKNDBfVFhGSUwgfCBNUkYyNEo0MF9fMjBNUkVDVlIpKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9SRkNPTjcsIE1SRjI0SjQwX1NMUENMS1NFTCgweDAyKSk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZDT044LCBNUkYyNEo0MF9SRlZDTyk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfU0xQQ09OMSwgTVJGMjRKNDBfU0xQQ0xLRElWKDEpIHwgTVJGMjRKNDBfQ0xLT1VURElTKTsNCisNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhGTFVTSCwgKE1SRjI0SjQwX1dBS0VQQUQgfCBNUkYyNEo0MF9XQUtFUE9MKSk7DQorDQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSLCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYTUNSKSAmICh+TVJGMjRKNDBfTk9BQ0tSU1ApKTsNCisgICAgLy8gbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfUlhNQ1IpIHwgTVJGMjRKNDBfUEFOQ09PUkQpOw0KKyAgICAvLyBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUiwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUikgfCAoTVJGMjRKNDBfTk9BQ0tSU1ApKTsNCisgICAgLy8gbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQUNLVE1PVVQsIG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQUNLVE1PVVQpIHwgMHg3Zik7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1RYTUNSLCAwYjAwMDExMTAwKTsNCisgICAgLy8gbXJmMjRqNDBfc2V0X2Nvb3JkaW5hdG9yKCk7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX09SREVSLCAweEZGKTsNCisNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQkJSRUcxLCAweDApOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9CQlJFRzIsIE1SRjI0SjQwX0NDQU1PREUoMHgwMikgfCBNUkYyNEo0MF9DQ0FTVEgoMHgwMCkpOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9DQ0FFRFRILCAweDYwKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQkJSRUc2LCBNUkYyNEo0MF9SU1NJTU9ERTIpOw0KKw0KKyAgICAvLyBUVVJOVElNRSBEZWZhdWxlIHZhbHVlOiAweDQgYW5kIFRVUk5USU1FPTB4Mw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWFRJTUUsIDB4MzApOw0KKw0KKyAgICAvL21yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1RYUEVORCwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWFBFTkQpICYgTVJGMjRKNDBfRlBBQ0spOw0KKw0KKyAgICAvL21yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfU0xQQ09OMCwgTVJGMjRKNDBfU0xQQ0xLRU4pOw0KKw0KKyAgICAvLyBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9BQ0tUTU9VVCwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9BQ0tUTU9VVCkgfCBNUkYyNEo0MF9EUlBBQ0spOw0KKw0KKyAgICAvLyBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUiwgbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWE1DUikgfCBNUkYyNEo0MF9QUk9NSSk7DQorDQorICAgIG1yZjI0ajQwX2llKCk7DQorICAgIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUkZDT04zLCAweDApOw0KKw0KKyAgICBtcmYyNGo0MF9yZl9yZXNldCgpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICByZl9zdGF0ZSA9IG1yZjI0ajQwX3JlYWRfbG9uZ19jdHJsX3JlZyhNUkYyNEo0MF9SRlNUQVRFKTsNCisgICAgfQ0KKyAgICB3aGlsZSAoKChyZl9zdGF0ZSA+PiA1KSAmIDB4MDUpICE9IDB4MDUpOw0KKw0KKyAgICBtcmYyNGo0MF9yeGZpZm9fZmx1c2goKTsNCisNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IGxvdy1jdXJyZW50IFNsZWVwIG1vZGUNCisgKi8NCit2b2lkIG1yZjI0ajQwX3NsZWVwKCkNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1dBS0VDT04sIE1SRjI0SjQwX0lNTVdBS0UpOw0KKw0KKyAgICB1aW50OF90IHIgPSBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NMUEFDSyk7DQorICAgIG1yZjI0ajQwX3dha2VfcGluKDApOw0KKw0KKyAgICBtcmYyNGo0MF9wd3JfcmVzZXQoKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfU0xQQUNLLCByIHwgTVJGMjRKNDBfX1NMUEFDSyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCB3YWtlLXVwIGZyb20gU2xlZXAgbW9kZQ0KKyAqLw0KK3ZvaWQgbXJmMjRqNDBfd2FrZXVwKCkNCit7DQorICAgIG1yZjI0ajQwX3dha2VfcGluKDEpOw0KKyAgICBtcmYyNGo0MF9yZl9yZXNldCgpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBFbmFibGUgYW5kIHRyYW5zbWl0IGZyYW1lIGluIFRYIE5vcm1hbCBGSUZPDQorICogXHBhcmFtICAqZnJhbWUgICBQb2ludGVyIG9mIHRoZSBUWCBmcmFtZQ0KKyAqIFxwYXJhbSAgaGRyX2xlbiAgSGVhZGVyIExlZ250aCBvZiB0aGUgdHJhbnNtaXNzaW9uIHBhY2tldA0KKyAqIFxwYXJhbSAgc2VjX2hkcl9sZW4gIFNlY3VyaXR5IGhlYWRlciBMZWdudGggb2YgdGhlIHRyYW5zbWlzc2lvbiBwYWNrZXQNCisgKiBccGFyYW0gIHBheWxvYWRfbGVuICBEYXRhIHBheWxvYWQgb2YgdGhlIHRyYW5zbWlzc2lvbiBwYWNrZXQNCisgKi8NCisvKiBNb2RpZmllZCBmb3IgZW1iQVJDICovDQordm9pZCBtcmYyNGo0MF90eHBrdCh1aW50OF90ICpmcmFtZSwgaW50MTZfdCBoZHJfbGVuLCBpbnQxNl90IHNlY19oZHJfbGVuLCBpbnQxNl90IHBheWxvYWRfbGVuKQ0KK3sNCisgICAgaW50MTZfdCBmcmFtZV9sZW4gPSBoZHJfbGVuICsgc2VjX2hkcl9sZW4gKyBwYXlsb2FkX2xlbjsNCisNCisgICAgdWludDhfdCB3ID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE5DT04pOw0KKyAgICB3ICY9IH4oTVJGMjRKNDBfVFhOU0VDRU4pOw0KKw0KKyAgICBpZiAoSUVFRV84MDJfMTVfNF9IQVNfU0VDKGZyYW1lWzBdKSkNCisgICAgew0KKyAgICAgICAgdyB8PSBNUkYyNEo0MF9UWE5TRUNFTjsNCisgICAgfQ0KKw0KKyAgICBpZiAoSUVFRV84MDJfMTVfNF9XQU5UU19BQ0soZnJhbWVbMF0pKQ0KKyAgICB7DQorICAgICAgICB3IHw9IE1SRjI0SjQwX1RYTkFDS1JFUTsNCisgICAgfQ0KKw0KKyAgICBwbXJmX3R4cGt0X2ZyYW1lX3dyaXRlKGZyYW1lLCBoZHJfbGVuLCBmcmFtZV9sZW4pOw0KKw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWE5DT04sIHcgfCBNUkYyNEo0MF9UWE5UUklHKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IFJYQ0lQSEVSIGFuZCBUWE5DSVBIRVIgaW4gU0VDQ09OMDogU2VjdXJpdHkgQ29udHJvbCAwIFJlZ2lzdGVyDQorICogXHBhcmFtICByeGNpcGhlciBSWCBGSUZPIHNlY3VyaXR5IHN1aXRlIHNlbGVjdCBiaXRzDQorICogXHBhcmFtICB0eGNpcGhlciBUWCBub3JtYWwgRklGTyBzZWN1cml0eSBzdWl0ZSBzZWxlY3QgYml0cw0KKyAqIFxkZXRhaWxzIDExMSA9IEFFUy1DQkMtTUFDLTMyDQorICogICAgICAxMTAgPSBBRVMtQ0JDLU1BQy02NA0KKyAqICAgICAgMTAxID0gQUVTLUNCQy1NQUMtMTI4DQorICogICAgICAxMDAgPSBBRVMtQ01NLTMyDQorICogICAgICAwMTEgPSBBRVMtQ01NLTY0DQorICogICAgICAwMTAgPSBBRVMtQ01NLTEyOA0KKyAqICAgICAgMDAxID0gQUVTLUNUUg0KKyAqICAgICAgMDAwID0gTm9uZSAoZGVmYXVsdCkNCisgKi8NCit2b2lkIG1yZjI0ajQwX3NldF9jaXBoZXIodWludDhfdCByeGNpcGhlciwgdWludDhfdCB0eGNpcGhlcikNCit7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NFQ0NPTjAsIE1SRjI0SjQwX1JYQ0lQSEVSKHJ4Y2lwaGVyKSB8IE1SRjI0SjQwX1RYTkNJUEhFUih0eGNpcGhlcikpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBSZWFkIFNFQ0RFQ0VSUiBpbiBSWFNSOiBSWCBNQUMgU3RhdHVzIFJlZ2lzdGVyDQorICogXGRldGFpbHMgUmVhZCBzZWN1cml0eSBkZWNyeXB0aW9uIGVycm9yIGJpdA0KKyAqIFxyZXR2YWwgMCAgICBTZWN1cml0eSBkZWNyeXB0aW9uIGVycm9yIG9jY3VycmVkDQorICogXHJldHZhbCAxICAgIFNlY3VyaXR5IGRlY3J5cHRpb24gZXJyb3IgZGlkIG5vdCBvY2N1cg0KKyAqLw0KKy8vIFNob3VsZCBiZSB0ZXN0ZWQNCitib29sIG1yZjI0ajQwX3J4X3NlY19mYWlsKCkNCit7DQorICAgIGJvb2wgcnhfc2VjX2ZhaWwgPSAobXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9SWFNSKSA+PiAyKSAmIDB4MDE7DQorICAgIG1yZjI0ajQwX3dyaXRlX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1JYU1IsIDB4MDApOw0KKyAgICByZXR1cm4gcnhfc2VjX2ZhaWw7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNldCBTRUNJR05PUkUvU0VDU1RBUlQgaW4gU0VDQ09OMDogU2VjdXJpdHkgQ29udHJvbCAwIFJlZ2lzdGVyDQorICogXGRldGFpbHMgU2V0IFJYIHNlY3VyaXR5IGRlY3J5cHRpb24gaWdub3JlL3N0YXJ0IGJpdA0KKyAqIFxwYXJhbSAgYWNjZXB0ICAgMTogc3RhcnQgZGVjcnlwdGlvbiBwcm9jZXNzLCAwOiBpZ25vcmUgZGVjcnlwdGlvbiBwcm9jZXNzDQorICovDQordm9pZCBtcmYyNGo0MF9zZWNfaW50Y2IoYm9vbCBhY2NlcHQpDQorew0KKyAgICB1aW50OF90IHcgPSBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX1NFQ0NPTjApOw0KKw0KKyAgICB3IHw9IGFjY2VwdCA/IE1SRjI0SjQwX1NFQ1NUQVJUIDogTVJGMjRKNDBfU0VDSUdOT1JFOw0KKyAgICBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9TRUNDT04wLCB3KTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgUmVhZCBUWCBub3JtYWwgRklGTyByZWxlYXNlIHN0YXR1cyBiaXQgaW4gVFhTVEFUOiBUWCBNQUMgU3RhdHVzIFJlZ2lzdGVyDQorICogXHJldHZhbCBNUkYyNEo0MF9FQlVTWSAgIEZhaWxlZCwgY2hhbm5lbCBidXN5DQorICogXHJldHZhbCBNUkYyNEo0MF9FSU8gICAgIEZhaWxlZCwgY2hhbm5lbCBpZGxlDQorICogXHJldHZhbCAwICAgICAgICAgICAgU3VjY2VlZGVkDQorICovDQoraW50MTZfdCBtcmYyNGo0MF90eHBrdF9pbnRjYih2b2lkKQ0KK3sNCisgICAgdWludDhfdCBzdGF0ID0gbXJmMjRqNDBfcmVhZF9zaG9ydF9jdHJsX3JlZyhNUkYyNEo0MF9UWFNUQVQpOw0KKw0KKyAgICBpZiAoc3RhdCAmIE1SRjI0SjQwX1RYTlNUQVQpDQorICAgIHsNCisgICAgICAgIGlmIChzdGF0ICYgTVJGMjRKNDBfQ0NBRkFJTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gTVJGMjRKNDBfRUJVU1k7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIE1SRjI0SjQwX0VJTzsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFNlbmQgUlggcGFja2V0IGluIFJYIEZJRk8NCisgKiBccGFyYW0gICpidWYgICAgIFBvaW50ZXIgb2YgUlggYnVmZmVyIGluIFJYIEZJRk8NCisgKiBccGFyYW0gICpwbHFpICAgIFBvaW50ZXIgb2YgTFFJIGluIFJYIEZJRk8NCisgKiBccGFyYW0gICpwcnNzaSAgIFBvaW50ZXIgb2YgUlNTSSBpbiBSWCBGSUZPDQorICogXHJldHVybnMgRnJhbWUgbGVuZ3RoIGluIFJYIEZJRk8NCisgKi8NCisvKiBNb2RpZmllZCBmb3IgZW1iQVJDICovDQoraW50MTZfdCBtcmYyNGo0MF9yeHBrdF9pbnRjYih1aW50OF90ICpidWYsIHVpbnQ4X3QgKnBscWksIHVpbnQ4X3QgKnByc3NpKQ0KK3sNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQkJSRUcxLCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0JCUkVHMSkgfCBNUkYyNEo0MF9SWERFQ0lOVik7DQorDQorICAgIC8qIFBhY2tldCBSZWNlcHRpb24NCisgICAgICogRnJhbWUgTGVuZ3RoIC0tIEhlYWRlciAtLSBEYXRhIFBheWxvYWQgLS0gRkNTIC0tIExRSSAtLSBSU1NJDQorICAgICAqLw0KKyAgICB1aW50OF90IGZsZW4gPSBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUlhGSUZPKTsNCisNCisgICAgaWYgKGZsZW4gPiAoTVJGMjRKNDBfUlhGSUZPX1NJWkUgLSAzKSkNCisgICAgew0KKyAgICAgICAgZmxlbiA9IE1SRjI0SjQwX1JYRklGT19TSVpFIC0gMzsNCisgICAgfQ0KKw0KKyAgICBwbXJmX3J4cGt0X2ludGNiX2ZyYW1lX3JlYWQoYnVmLCBmbGVuKTsNCisNCisgICAgdWludDhfdCBscWkgPSBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUlhGSUZPICsgZmxlbiArIDEpOw0KKyAgICB1aW50OF90IHJzc2kgPSBtcmYyNGo0MF9yZWFkX2xvbmdfY3RybF9yZWcoTVJGMjRKNDBfUlhGSUZPICsgZmxlbiArIDIpOw0KKw0KKyAgICBpZiAocGxxaSAhPSBOVUxMKQ0KKyAgICB7DQorICAgICAgICAqcGxxaSA9IGxxaTsNCisgICAgfQ0KKw0KKyAgICBpZiAocHJzc2kgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgKnByc3NpID0gcnNzaTsNCisgICAgfQ0KKw0KKyAgICBtcmYyNGo0MF9yeGZpZm9fZmx1c2goKTsNCisgICAgbXJmMjRqNDBfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfQkJSRUcxLCBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0JCUkVHMSkgJiB+TVJGMjRKNDBfUlhERUNJTlYpOw0KKw0KKyAgICByZXR1cm4gKGludDE2X3QpZmxlbjsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgUmVhZCBTRUNJRiwgVFhOSUYgYW5kIFJYSUYgaW4gSU5UU1RBVDogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3Rlcg0KKyAqIFxkZXRhaWxzIFJlYWQgc2VjdXJpdHkga2V5IHJlcXVlc3QgaW50ZXJydXB0IGJpdCwgVFggbm9ybWFsIEZJRk8gcmVsZWFzZSBpbnRlcnJ1cHQgYml0DQorICogICAgICBhbmQgUlggRklGTyByZWNlcHRpb24gaW50ZXJydXB0IGJpdA0KKyAqIFxyZXR1cm5zIEludGVycnVwdCBzdGF0dXMNCisgKi8NCitpbnQxNl90IG1yZjI0ajQwX2ludF90YXNrcyh2b2lkKQ0KK3sNCisgICAgaW50MTZfdCByZXQgPSAwOw0KKw0KKyAgICB1aW50OF90IHN0YXQgPSBtcmYyNGo0MF9yZWFkX3Nob3J0X2N0cmxfcmVnKE1SRjI0SjQwX0lOVFNUQVQpOw0KKw0KKyAgICBpZiAoc3RhdCAmIE1SRjI0SjQwX1JYSUYpDQorICAgIHsNCisgICAgICAgIHJldCB8PSBNUkYyNEo0MF9JTlRfUlg7DQorICAgIH0NCisNCisgICAgaWYgKHN0YXQgJiBNUkYyNEo0MF9UWE5JRikNCisgICAgew0KKyAgICAgICAgcmV0IHw9IE1SRjI0SjQwX0lOVF9UWDsNCisgICAgfQ0KKw0KKyAgICBpZiAoc3RhdCAmIE1SRjI0SjQwX1NFQ0lGKQ0KKyAgICB7DQorICAgICAgICByZXQgfD0gTVJGMjRKNDBfSU5UX1NFQzsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBXcml0ZSBUWCBGSUZPDQorICogXHBhcmFtICBhZGRyZXNzICBGSUZPIEFkZHJlc3MgKFRYIE5vcm1hbCBGSUZPKQ0KKyAqIFxwYXJhbSAgKmRhdGEgICAgUG9pbnRlciBvZiBkYXRhIGZvciBUWCBGSUZPDQorICogXHBhcmFtICBoZHJfbGVuICBIZWFkZXIgbGVnbnRoIGZvciBUWCBGSUZPDQorICogXHBhcmFtICBsZW4gICAgICBGcmFtZSBsZW5ndGggZm9yIFRYIEZJRk8NCisgKi8NCit2b2lkIG1yZjI0ajQwX3R4Zmlmb193cml0ZSh1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICpkYXRhLCB1aW50OF90IGhkcl9sZW4sIHVpbnQ4X3QgbGVuKQ0KK3sNCisgICAgcG1yZl90eGZpZm9fd3JpdGUoYWRkcmVzcywgZGF0YSwgaGRyX2xlbiwgbGVuKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgU2V0IFRYTlRSSUcgaW4gVFhOQ09OOiBUcmFuc21pdCBub3JtYWwgRklGTyBjb250cm9sIHJlZ2lzdGVyDQorICogXGRldGFpbHMgVHJhbnNtaXQgZnJhbWUgaW4gVFggbm9ybWFsIEZJRk8gYml0DQorICovDQordm9pZCBtcmYyNGo0MF90cmFuc21pdCh2b2lkKQ0KK3sNCisgICAgdWludDhfdCByZWcgPSBwbXJmX3JlYWRfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OKSB8IE1SRjI0SjQwX1RYTlRSSUc7DQorDQorICAgIHBtcmZfd3JpdGVfc2hvcnRfY3RybF9yZWcoTVJGMjRKNDBfVFhOQ09OLCByZWcpOw0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX1JGX01SRjI0SjQwICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9tcmYyNGo0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OTAyMGEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL21yZjI0ajQwLmgKQEAgLTAsMCArMSwzOTcgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDE0LCBNaWNoZWxlIEJhbGlzdHJlcmkNCisgKg0KKyAqIERlcml2ZWQgZnJvbSBjb2RlIG9yaWdpbmFsbHkgQ29weXJpZ2h0IChDKSAyMDExLCBBbGV4IEhvcm51bmcNCisgKg0KKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcNCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSDQorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KKyAqDQorICogTW9kaWZpZWQgYnkgUWlhbmcgR3UoUWlhbmcuR3VAc3lub3BzeXMuY29tKSBmb3IgZW1iQVJDDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDctMjkNCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX1JGX01SRjI0SjQwDQorICogXGJyaWVmICAgUkYgTVJGMjRKNDAgZHJpdmVyDQorICogXGRldGFpbHMgaW1wbGVtZW50IE1SRjI0SjQwIGRyaXZlciBoZWFkZXIgZmlsZQ0KKyAqLw0KKw0KKyNpZm5kZWYgX01SRjI0SjQwX0hfDQorI2RlZmluZSBfTVJGMjRKNDBfSF8NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCisNCisjZGVmaW5lIE1SRjI0SjQwX1JYRklGT19TSVpFICAgICAgICAxNDQNCisNCisvKiBSZXR1cm4gdmFsdWVzICovDQorI2RlZmluZSBNUkYyNEo0MF9JTlRfUlggICAgICAgICAweDAxDQorI2RlZmluZSBNUkYyNEo0MF9JTlRfVFggICAgICAgICAweDAyDQorI2RlZmluZSBNUkYyNEo0MF9JTlRfU0VDICAgICAgICAweDA0DQorI2RlZmluZSBNUkYyNEo0MF9JTlRfU0xQICAgICAgICAweDA4DQorI2RlZmluZSBNUkYyNEo0MF9JTlRfRU5DICAgICAgICAweDEwDQorI2RlZmluZSBNUkYyNEo0MF9JTlRfREVDICAgICAgICAweDIwDQorDQorI2RlZmluZSBNUkYyNEo0MF9FSU8gICAgICAgICAgICAxDQorI2RlZmluZSBNUkYyNEo0MF9FQlVTWSAgICAgICAgICAyDQorDQorLyogSUVFRSA4MDIuMTUuNCBjb25zdGFudHMgbmVlZGVkIGZvciBzb21lIGZsYWdzICovDQorI2RlZmluZSBJRUVFXzgwMl8xNV80X0hBU19TRUMoeCkgICAgKCh4ID4+IDMpICYgMHgwMSkNCisjZGVmaW5lIElFRUVfODAyXzE1XzRfV0FOVFNfQUNLKHgpICAoKHggPj4gNSkgJiAweDAxKQ0KKw0KKy8qIGVuYyBkZWMgcGFyYW1ldGVycyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVFhfS0VZICAgICAgICAgMHgwMQ0KKyNkZWZpbmUgTVJGMjRKNDBfUlhfS0VZICAgICAgICAgMHgwMg0KKyNkZWZpbmUgTVJGMjRKNDBfVVBfS0VZICAgICAgICAgTVJGMjRKNDBfVFhfS0VZDQorDQorI2RlZmluZSBNUkYyNEo0MF9BRVNfQ0JDX01BQzMyICAgICAgMHgwNw0KKyNkZWZpbmUgTVJGMjRKNDBfQUVTX0NCQ19NQUM2NCAgICAgIDB4MDYNCisjZGVmaW5lIE1SRjI0SjQwX0FFU19DQkNfTUFDMTI4ICAgICAweDA1DQorI2RlZmluZSBNUkYyNEo0MF9BRVNfQ0NNMzIgICAgICAweDA0DQorI2RlZmluZSBNUkYyNEo0MF9BRVNfQ0NNNjQgICAgICAweDAzDQorI2RlZmluZSBNUkYyNEo0MF9BRVNfQ0NNMTI4ICAgICAweDAyDQorI2RlZmluZSBNUkYyNEo0MF9BRVNfQ1RSICAgICAgICAweDAxDQorI2RlZmluZSBNUkYyNEo0MF9BTEdPX05PTkUgICAgICAweDAwDQorDQorLyogU2hvcnQgQWRkcmVzcyBDb250cm9sIFJlZ2lzdGVyIE1hcCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUlhNQ1IgICAgICAgICAgMHgwMA0KKyNkZWZpbmUgTVJGMjRKNDBfUEFOSURMICAgICAgICAgMHgwMQ0KKyNkZWZpbmUgTVJGMjRKNDBfUEFOSURIICAgICAgICAgMHgwMg0KKyNkZWZpbmUgTVJGMjRKNDBfU0FEUkwgICAgICAgICAgMHgwMw0KKyNkZWZpbmUgTVJGMjRKNDBfU0FEUkggICAgICAgICAgMHgwNA0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjAgICAgICAgICAgMHgwNQ0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjEgICAgICAgICAgMHgwNg0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjIgICAgICAgICAgMHgwNw0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjMgICAgICAgICAgMHgwOA0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjQgICAgICAgICAgMHgwOQ0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjUgICAgICAgICAgMHgwQQ0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjYgICAgICAgICAgMHgwQg0KKyNkZWZpbmUgTVJGMjRKNDBfRUFEUjcgICAgICAgICAgMHgwQw0KKyNkZWZpbmUgTVJGMjRKNDBfUlhGTFVTSCAgICAgICAgMHgwRA0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfT1JERVIgICAgICAgICAgMHgxMA0KKyNkZWZpbmUgTVJGMjRKNDBfVFhNQ1IgICAgICAgICAgMHgxMQ0KKyNkZWZpbmUgTVJGMjRKNDBfQUNLVE1PVVQgICAgICAgMHgxMg0KKyNkZWZpbmUgTVJGMjRKNDBfRVNMT1RHMSAgICAgICAgMHgxMw0KKyNkZWZpbmUgTVJGMjRKNDBfU1lNVElDS0wgICAgICAgMHgxNA0KKyNkZWZpbmUgTVJGMjRKNDBfU1lNVElDS0ggICAgICAgMHgxNQ0KKyNkZWZpbmUgTVJGMjRKNDBfUEFDT04wICAgICAgICAgMHgxNg0KKyNkZWZpbmUgTVJGMjRKNDBfUEFDT04xICAgICAgICAgMHgxNw0KKyNkZWZpbmUgTVJGMjRKNDBfUEFDT04yICAgICAgICAgMHgxOA0KKyNkZWZpbmUgTVJGMjRKNDBfVFhCQ09OMCAgICAgICAgMHgxQQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhOQ09OICAgICAgICAgMHgxQg0KKyNkZWZpbmUgTVJGMjRKNDBfVFhHMUNPTiAgICAgICAgMHgxQw0KKyNkZWZpbmUgTVJGMjRKNDBfVFhHMkNPTiAgICAgICAgMHgxRA0KKyNkZWZpbmUgTVJGMjRKNDBfRVNMT1RHMjMgICAgICAgMHgxRQ0KKyNkZWZpbmUgTVJGMjRKNDBfRVNMT1RHNDUgICAgICAgMHgxRg0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfRVNMT1RHNjcgICAgICAgMHgyMA0KKyNkZWZpbmUgTVJGMjRKNDBfVFhQRU5EICAgICAgICAgMHgyMQ0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRUNPTiAgICAgICAgMHgyMg0KKyNkZWZpbmUgTVJGMjRKNDBfRlJNT0ZGU0VUICAgICAgMHgyMw0KKyNkZWZpbmUgTVJGMjRKNDBfVFhTVEFUICAgICAgICAgMHgyNA0KKyNkZWZpbmUgTVJGMjRKNDBfVFhCQ09OMSAgICAgICAgMHgyNQ0KKyNkZWZpbmUgTVJGMjRKNDBfR0FURUNMSyAgICAgICAgMHgyNg0KKyNkZWZpbmUgTVJGMjRKNDBfVFhUSU1FICAgICAgICAgMHgyNw0KKyNkZWZpbmUgTVJGMjRKNDBfSFNZTVRNUkwgICAgICAgMHgyOA0KKyNkZWZpbmUgTVJGMjRKNDBfSFNZTVRNUkggICAgICAgMHgyOQ0KKyNkZWZpbmUgTVJGMjRKNDBfU09GVFJTVCAgICAgICAgMHgyQQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDQ09OMCAgICAgICAgMHgyYw0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDQ09OMSAgICAgICAgMHgyZA0KKyNkZWZpbmUgTVJGMjRKNDBfVFhTVEJMICAgICAgICAgMHgyZQ0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfUlhTUiAgICAgICAgICAgMHgzMA0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UU1RBVCAgICAgICAgMHgzMQ0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UQ09OICAgICAgICAgMHgzMg0KKyNkZWZpbmUgTVJGMjRKNDBfR1BJTyAgICAgICAgICAgMHgzMw0KKyNkZWZpbmUgTVJGMjRKNDBfVFJJU0dQSU8gICAgICAgMHgzNA0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQQUNLICAgICAgICAgMHgzNQ0KKyNkZWZpbmUgTVJGMjRKNDBfUkZDVEwgICAgICAgICAgMHgzNg0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDQ1IyICAgICAgICAgMHgzNw0KKyNkZWZpbmUgTVJGMjRKNDBfQkJSRUcwICAgICAgICAgMHgzOA0KKyNkZWZpbmUgTVJGMjRKNDBfQkJSRUcxICAgICAgICAgMHgzOQ0KKyNkZWZpbmUgTVJGMjRKNDBfQkJSRUcyICAgICAgICAgMHgzQQ0KKyNkZWZpbmUgTVJGMjRKNDBfQkJSRUczICAgICAgICAgMHgzQg0KKyNkZWZpbmUgTVJGMjRKNDBfQkJSRUc0ICAgICAgICAgMHgzQw0KKyNkZWZpbmUgTVJGMjRKNDBfQkJSRUc2ICAgICAgICAgMHgzRQ0KKyNkZWZpbmUgTVJGMjRKNDBfQ0NBRURUSCAgICAgICAgMHgzRg0KKw0KKy8qIExvbmcgQWRkcmVzcyBDb250cm9sIFJlZ2lzdGVyIE1hcCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUkZDT04wICAgICAgICAgMHgyMDANCisjZGVmaW5lIE1SRjI0SjQwX1JGQ09OMSAgICAgICAgIDB4MjAxDQorI2RlZmluZSBNUkYyNEo0MF9SRkNPTjIgICAgICAgICAweDIwMg0KKyNkZWZpbmUgTVJGMjRKNDBfUkZDT04zICAgICAgICAgMHgyMDMNCisjZGVmaW5lIE1SRjI0SjQwX1JGQ09ONSAgICAgICAgIDB4MjA1DQorI2RlZmluZSBNUkYyNEo0MF9SRkNPTjYgICAgICAgICAweDIwNg0KKyNkZWZpbmUgTVJGMjRKNDBfUkZDT043ICAgICAgICAgMHgyMDcNCisjZGVmaW5lIE1SRjI0SjQwX1JGQ09OOCAgICAgICAgIDB4MjA4DQorI2RlZmluZSBNUkYyNEo0MF9SRlNUQVRFICAgICAgICAweDIwRg0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfUlNTSSAgICAgICAgICAgMHgyMTANCisjZGVmaW5lIE1SRjI0SjQwX1NMUENPTjAgICAgICAgIDB4MjExDQorI2RlZmluZSBNUkYyNEo0MF9TTFBDT04xICAgICAgICAweDIyMA0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRVRJTUVMICAgICAgMHgyMjINCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VUSU1FSCAgICAgIDB4MjIzDQorDQorI2RlZmluZSBNUkYyNEo0MF9BSU5DTlQwICAgICAgICAweDIyNg0KKyNkZWZpbmUgTVJGMjRKNDBfQUlOQ05UMSAgICAgICAgMHgyMjcNCisjZGVmaW5lIE1SRjI0SjQwX0FJTkNOVDIgICAgICAgIDB4MjI4DQorI2RlZmluZSBNUkYyNEo0MF9BSU5DTlQzICAgICAgICAweDIyOQ0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT0VBRFIwICAgICAgMHgyMzANCisjZGVmaW5lIE1SRjI0SjQwX0FTU09FQURSMSAgICAgIDB4MjMxDQorI2RlZmluZSBNUkYyNEo0MF9BU1NPRUFEUjIgICAgICAweDIzMg0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT0VBRFIzICAgICAgMHgyMzMNCisjZGVmaW5lIE1SRjI0SjQwX0FTU09FQURSNCAgICAgIDB4MjM0DQorI2RlZmluZSBNUkYyNEo0MF9BU1NPRUFEUjUgICAgICAweDIzNQ0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT0VBRFI2ICAgICAgMHgyMzYNCisjZGVmaW5lIE1SRjI0SjQwX0FTU09FQURSNyAgICAgIDB4MjM3DQorDQorI2RlZmluZSBNUkYyNEo0MF9BU1NPU0FEUjAgICAgICAweDIzOA0KKyNkZWZpbmUgTVJGMjRKNDBfQVNTT1NBRFIxICAgICAgMHgyMzkNCisNCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0UwICAgICAgIDB4MjQwDQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFMSAgICAgICAweDI0MQ0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTIgICAgICAgMHgyNDINCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0UzICAgICAgIDB4MjQzDQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFNCAgICAgICAweDI0NA0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTUgICAgICAgMHgyNDUNCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0U2ICAgICAgIDB4MjQ2DQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFNyAgICAgICAweDI0Nw0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTggICAgICAgMHgyNDgNCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0U5ICAgICAgIDB4MjQ5DQorI2RlZmluZSBNUkYyNEo0MF9VUE5PTkNFMTAgICAgICAweDI0QQ0KKyNkZWZpbmUgTVJGMjRKNDBfVVBOT05DRTExICAgICAgMHgyNEINCisjZGVmaW5lIE1SRjI0SjQwX1VQTk9OQ0UxMiAgICAgIDB4MjRDDQorDQorLyogTG9uZyBBZGRyZXNzIE1lbW9yeSBNYXAgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RYTkZJRk8gICAgICAgIDB4MDAwIC8qIC0gMHgwN0YsIDEyOCBieXRlcyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVFhCRklGTyAgICAgICAgMHgwODAgLyogLSAweDBGRiwgMTI4IGJ5dGVzICovDQorI2RlZmluZSBNUkYyNEo0MF9UWEcxRklGTyAgICAgICAweDEwMCAvKiAtIDB4MTdGLCAxMjggYnl0ZXMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RYRzJGSUZPICAgICAgIDB4MTgwIC8qIC0gMHgxRkYsIDEyOCBieXRlcyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDS0ZJRk8gICAgICAgMHgyODAgLyogLSAweDJCRiwgNjQgYnl0ZXMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NFQ0tUWE5GSUZPICAgICAgICAweDI4MCAvKiAtIDB4MjhGLCAxNiBieXRlcyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDS1JYRklGTyAgICAgMHgyQjAgLyogLSAweDJCRiwgMTYgYnl0ZXMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1JYRklGTyAgICAgICAgIDB4MzAwIC8qIC0gMHgzOEYsIDE0NCBieXRlcyAqLw0KKw0KKw0KKy8qIFJYTUNSICovDQorI2RlZmluZSBNUkYyNEo0MF9OT0FDS1JTUCAgICAgICAoMTw8NSkNCisjZGVmaW5lIE1SRjI0SjQwX1BBTkNPT1JEICAgICAgICgxPDwzKQ0KKyNkZWZpbmUgTVJGMjRKNDBfQ09PUkQgICAgICAgICAgKDE8PDIpDQorI2RlZmluZSBNUkYyNEo0MF9FUlJQS1QgICAgICAgICAoMTw8MSkNCisjZGVmaW5lIE1SRjI0SjQwX1BST01JICAgICAgICAgICgxKQ0KKw0KKy8qIFJYRkxVU0ggKi8NCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VQT0wgICAgICAgICgxPDw2KQ0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRVBBRCAgICAgICAgKDE8PDUpDQorI2RlZmluZSBNUkYyNEo0MF9DTURPTkxZICAgICAgICAoMTw8MykNCisjZGVmaW5lIE1SRjI0SjQwX0RBVEFPTkxZICAgICAgICgxPDwyKQ0KKyNkZWZpbmUgTVJGMjRKNDBfQkNOT05MWSAgICAgICAgKDE8PDEpDQorI2RlZmluZSBNUkYyNEo0MF9fUlhGTFVTSCAgICAgICAoMSkNCisNCisvKiBUWE1DUiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfTk9DU01BICAgICAgICAgKDE8PDcpDQorI2RlZmluZSBNUkYyNEo0MF9CQVRMSUZFWFQgICAgICAoMTw8NikNCisjZGVmaW5lIE1SRjI0SjQwX1NMT1RURUQgICAgICAgICgxPDw1KQ0KKyNkZWZpbmUgTVJGMjRKNDBfTUFDTUlOQkUoeCkgICAgICAgICgoeCAmIDB4MDMpPDwzKQ0KKyNkZWZpbmUgTVJGMjRKNDBfQ1NNQUJGKHgpICAgICAgKHggJiAweDA3KQ0KKw0KKy8qIEFDS1RNT1VUICovDQorI2RlZmluZSBNUkYyNEo0MF9EUlBBQ0sgICAgICAgICAoMTw8NykNCisNCisvKiBQQUNPTjIgKi8NCisjZGVmaW5lIE1SRjI0SjQwX0ZJRk9FTiAgICAgICAgICgxPDw3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhPTlRTKHgpICAgICAgICAgICh4ICYgMHgzRikNCisNCisvKiBUWE5DT04gKi8NCisjZGVmaW5lIE1SRjI0SjQwX0ZQU1RBVCAgICAgICAgICgxPDw0KQ0KKyNkZWZpbmUgTVJGMjRKNDBfSU5ESVJFQ1QgICAgICAgKDE8PDMpDQorI2RlZmluZSBNUkYyNEo0MF9UWE5BQ0tSRVEgICAgICAoMTw8MikNCisjZGVmaW5lIE1SRjI0SjQwX1RYTlNFQ0VOICAgICAgICgxPDwxKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhOVFJJRyAgICAgICAgKDEpDQorDQorLyogVFhQRU5EICovDQorI2RlZmluZSBNUkYyNEo0MF9GUEFDSyAgICAgICAgICAoMSkNCisNCisvKiBXQUtFQ09OICovDQorI2RlZmluZSBNUkYyNEo0MF9JTU1XQUtFICAgICAgICAoMTw8NykNCisjZGVmaW5lIE1SRjI0SjQwX1JFR1dBS0UgICAgICAgICgxPDw2KQ0KKw0KKy8qIFRYU1RBVCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfQ0NBRkFJTCAgICAgICAgKDE8PDUpDQorI2RlZmluZSBNUkYyNEo0MF9UWE5TVEFUICAgICAgICAoMSkNCisNCisvKiBTT0ZUUlNUICovDQorI2RlZmluZSBNUkYyNEo0MF9SU1RQV1IgICAgICAgICAoMTw8MikNCisjZGVmaW5lIE1SRjI0SjQwX1JTVEJCICAgICAgICAgICgxPDwxKQ0KKyNkZWZpbmUgTVJGMjRKNDBfUlNUTUFDICAgICAgICAgKDEpDQorDQorLyogU0VDQ09OMCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDSUdOT1JFICAgICAgKDE8PDcpDQorI2RlZmluZSBNUkYyNEo0MF9TRUNTVEFSVCAgICAgICAoMTw8NikNCisjZGVmaW5lIE1SRjI0SjQwX1JYQ0lQSEVSKHgpICAgICAgICAoKHggJiAweDA3KSA8PCAzKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhOQ0lQSEVSKHgpICAgICAgICgoeCAmIDB4MDcpKQ0KKw0KKy8qIFNFQ0NPTjEgKi8NCisjZGVmaW5lIE1SRjI0SjQwX0RJU0RFQyAgICAgICAgICgxPDwxKQ0KKyNkZWZpbmUgTVJGMjRKNDBfRElTRU5DICAgICAgICAgKDEpDQorDQorLyogVFhTVEJMICovDQorI2RlZmluZSBNUkYyNEo0MF9SRlNUQkwoeCkgICAgICAoKHggJiAweDBmKSA8PCA0KQ0KKyNkZWZpbmUgTVJGMjRKNDBfTVNJRlMoeCkgICAgICAgKCh4ICYgMHgwZikpDQorDQorLyogUlhTUiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVVBTRUNFUlIgICAgICAgKDE8PDYpDQorI2RlZmluZSBNUkYyNEo0MF9TRUNERUNFUlIgICAgICAoMTw8MikNCisNCisvKiBJTlRTVEFUICovDQorI2RlZmluZSBNUkYyNEo0MF9TTFBJRiAgICAgICAgICAoMTw8NykNCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VJRiAgICAgICAgICgxPDw2KQ0KKyNkZWZpbmUgTVJGMjRKNDBfSFNZTVRNUklGICAgICAgKDE8PDUpDQorI2RlZmluZSBNUkYyNEo0MF9TRUNJRiAgICAgICAgICAoMTw8NCkNCisjZGVmaW5lIE1SRjI0SjQwX1JYSUYgICAgICAgICAgICgxPDwzKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhHMklGICAgICAgICAgKDE8PDIpDQorI2RlZmluZSBNUkYyNEo0MF9UWEcxSUYgICAgICAgICAoMTw8MSkNCisjZGVmaW5lIE1SRjI0SjQwX1RYTklGICAgICAgICAgICgxKQ0KKw0KKy8qIElOVENPTiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQSUUgICAgICAgICAgKDE8PDcpDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFSUUgICAgICAgICAoMTw8NikNCisjZGVmaW5lIE1SRjI0SjQwX0hTWU1UTVJJRSAgICAgICgxPDw1KQ0KKyNkZWZpbmUgTVJGMjRKNDBfU0VDSUUgICAgICAgICAgKDE8PDQpDQorI2RlZmluZSBNUkYyNEo0MF9SWElFICAgICAgICAgICAoMTw8MykNCisjZGVmaW5lIE1SRjI0SjQwX1RYRzJJRSAgICAgICAgICgxPDwyKQ0KKyNkZWZpbmUgTVJGMjRKNDBfVFhHMUlFICAgICAgICAgKDE8PDEpDQorI2RlZmluZSBNUkYyNEo0MF9UWE5JRSAgICAgICAgICAoMSkNCisNCisvKiBTTFBBQ0sgKi8NCisjZGVmaW5lIE1SRjI0SjQwX19TTFBBQ0sgICAgICAgICgxPDw3KQ0KKyNkZWZpbmUgTVJGMjRKNDBfV0FLRUNOVF9MKHgpICAgICAgICh4ICYgMHgwM0YpDQorDQorLyogUkZDVEwgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VDTlRfSCh4KSAgICAgICAoKHggJiAweDAzKSA8PCAzKQ0KKyNkZWZpbmUgTVJGMjRKNDBfUkZSU1QgICAgICAgICAgKDE8PDIpDQorI2RlZmluZSBNUkYyNEo0MF9SRlRYTU9ERSAgICAgICAoMTw8MSkNCisjZGVmaW5lIE1SRjI0SjQwX1JGUlhNT0RFICAgICAgICgxKQ0KKw0KKy8qIFNFQ0NSMiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVVBERUMgICAgICAgICAgKDE8PDcpDQorI2RlZmluZSBNUkYyNEo0MF9VUEVOQyAgICAgICAgICAoMTw8NikNCisNCisvKiBCQlJFRzAgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RVUkJPICAgICAgICAgICgxKQ0KKw0KKy8qIEJCUkVHMSAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUlhERUNJTlYgICAgICAgKDE8PDIpDQorDQorLyogQkJSRUcyICovDQorI2RlZmluZSBNUkYyNEo0MF9DQ0FNT0RFKHgpICAgICAoKHggJiAweDAzKSA8PDYpDQorI2RlZmluZSBNUkYyNEo0MF9DQ0FTVEgoeCkgICAgICAoKHggJiAweDBGKSA8PDIpDQorDQorLyogQkJSRUczICovDQorI2RlZmluZSBNUkYyNEo0MF9QUkVWQUxJRFRIKHgpICAgICAgKCh4ICYgMHgwRikgPDw0KQ0KKw0KKy8qIEJCUkVHNCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfQ1NUSCh4KSAgICAgICAgKCh4ICYgMHgwNykgPDwgNSkNCisNCisvKiBCQlJFRzYgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1JTU0lNT0RFMSAgICAgICgxIDw8IDcpDQorI2RlZmluZSBNUkYyNEo0MF9SU1NJTU9ERTIgICAgICAoMTw8NikNCisjZGVmaW5lIE1SRjI0SjQwX1JTU0lSRFkgICAgICAgICgxKQ0KKw0KKy8qIFJGQ09OMCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfQ0hBTk5FTCh4KSAgICAgKCh4ICYgMHgwRikgPDwgNCkNCisjZGVmaW5lIE1SRjI0SjQwX1JGT1BUKHgpICAgICAgICgoeCAmIDB4MEYpKQ0KKw0KKy8qIFJGQ09OMSAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVkNPT1BUKHgpICAgICAgKCh4ICYgMHhGRikpDQorDQorLyogUkZDT04yICovDQorI2RlZmluZSBNUkYyNEo0MF9QTExFTiAgICAgICAgICAoMTw8NykNCisNCisvKiBSRkNPTjMgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1RYUFdSTCh4KSAgICAgICgoeCAmIDB4MDMpIDw8IDYpDQorI2RlZmluZSBNUkYyNEo0MF9UWFBXUlMoeCkgICAgICAoKHggJiAweDA3KSA8PCAzKQ0KKw0KKy8qIFJGQ09ONiAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfVFhGSUwgICAgICAgICAgKDEgPDwgNykNCisjZGVmaW5lIE1SRjI0SjQwX18yME1SRUNWUiAgICAgICAgICAoMSA8PCA0KQ0KKyNkZWZpbmUgTVJGMjRKNDBfQkFURU4gICAgICAgICAgICAgICgxIDw8IDMpDQorDQorLyogUkZDT04gNyAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfU0xQQ0xLU0VMKHgpICAgICAgICgoeCAmIDB4MDMpIDw8IDYpDQorI2RlZmluZSBNUkYyNEo0MF9TTFBDTEtTRUxfMTAwayAgICAgKE1SRjI0SjQwX1NMUENMS1NFTCgweDAyKSkNCisjZGVmaW5lIE1SRjI0SjQwX1NMUENMS1NFTF8zMmsgICAgICAoTVJGMjRKNDBfU0xQQ0xLU0VMKDB4MDEpKQ0KKw0KKy8qIFJGQ09OOCAqLw0KKyNkZWZpbmUgTVJGMjRKNDBfUkZWQ08gICAgICAgICAgKDEgPDwgNCkNCisNCisvKiBTTFBDT04wICovDQorI2RlZmluZSBNUkYyNEo0MF9TTFBDTEtFTiAgICAgICAoMSkNCisNCisvKiBTTFBDT04xICovDQorI2RlZmluZSBNUkYyNEo0MF9DTEtPVVRESVMgICAgICAoMSA8PCA1KSAgICAvKiBDTEtPVVRFTicgKi8NCisjZGVmaW5lIE1SRjI0SjQwX1NMUENMS0RJVih4KSAgICAgICAoKHggJiAweDFGKSkgICAgLyogZGl2aXNpb24gcmF0aW86IDJeKFNMUENMS0RJVikgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCit1aW50OF90IG1yZjI0ajQwX3JlYWRfbG9uZ19jdHJsX3JlZyh1aW50MTZfdCBhZGRyKTsNCit1aW50OF90IG1yZjI0ajQwX3JlYWRfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyKTsNCit2b2lkIG1yZjI0ajQwX3dyaXRlX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkciwgdWludDhfdCB2YWx1ZSk7DQordm9pZCBtcmYyNGo0MF93cml0ZV9zaG9ydF9jdHJsX3JlZyh1aW50OF90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpOw0KK3ZvaWQgbXJmMjRqNDBfcnhmaWZvX2ZsdXNoKHZvaWQpOw0KK3VpbnQ4X3QgbXJmMjRqNDBfZ2V0X3BlbmRpbmdfZnJhbWUodm9pZCk7DQordm9pZCBtcmYyNGo0MF9oYXJkX3Jlc2V0KHZvaWQpOw0KK3ZvaWQgbXJmMjRqNDBfaW5pdGlhbGl6ZSh2b2lkKTsNCit2b2lkIG1yZjI0ajQwX3NsZWVwKCk7DQordm9pZCBtcmYyNGo0MF93YWtldXAoKTsNCit2b2lkIG1yZjI0ajQwX3NldF9zaG9ydF9hZGRyKHVpbnQ4X3QgKmFkZHIpOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2Nvb3JkaW5hdG9yX3Nob3J0X2FkZHIodWludDhfdCAqYWRkcik7DQordm9pZCBtcmYyNGo0MF9zZXRfY29vcmRpbmF0b3JfZXVpKHVpbnQ4X3QgKmV1aSk7DQordm9pZCBtcmYyNGo0MF9zZXRfZXVpKHVpbnQ4X3QgKmV1aSk7DQordm9pZCBtcmYyNGo0MF9zZXRfcGFuKHVpbnQ4X3QgKnBhbik7DQordm9pZCBtcmYyNGo0MF9zZXRfa2V5KHVpbnQxNl90IGFkZHJlc3MsIHVpbnQ4X3QgKmtleSk7DQorI2RlZmluZSBtcmYyNGo0MF90eF9rZXkoa2V5KSBtcmYyNGo0MF9zZXRfa2V5KFNFQ0tUWE5GSUZPLCBrZXkpOw0KKyNkZWZpbmUgbXJmMjRqNDBfcnhfa2V5KGtleSkgbXJmMjRqNDBfc2V0X2tleShTRUNLUlhGSUZPLCBrZXkpOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2NoYW5uZWwoaW50MTZfdCBjaCk7DQordm9pZCBtcmYyNGo0MF9zZXRfcHJvbWlzY3VvdXMoYm9vbCBjcmNfY2hlY2spOw0KK3ZvaWQgbXJmMjRqNDBfc2V0X2Nvb3JkaW5hdG9yKHZvaWQpOw0KK3ZvaWQgbXJmMjRqNDBfY2xlYXJfY29vcmRpbmF0b3Iodm9pZCk7DQordm9pZCBtcmYyNGo0MF90eHBrdCh1aW50OF90ICpmcmFtZSwgaW50MTZfdCBoZHJfbGVuLCBpbnQxNl90IHNlY19oZHJfbGVuLCBpbnQxNl90IHBheWxvYWRfbGVuKTsNCit2b2lkIG1yZjI0ajQwX3NldF9jaXBoZXIodWludDhfdCByeGNpcGhlciwgdWludDhfdCB0eGNpcGhlcik7DQorYm9vbCBtcmYyNGo0MF9yeF9zZWNfZmFpbCgpOw0KK3VpbnQ4X3QgbXJmMjRqNDBfZ2V0X2NoYW5uZWwodm9pZCk7DQoraW50MTZfdCBtcmYyNGo0MF9pbnRfdGFza3Modm9pZCk7DQoraW50MTZfdCBtcmYyNGo0MF9yeHBrdF9pbnRjYih1aW50OF90ICpidWYsIHVpbnQ4X3QgKnBscWksIHVpbnQ4X3QgKnByc3NpKTsNCitpbnQxNl90IG1yZjI0ajQwX3R4cGt0X2ludGNiKHZvaWQpOw0KK3ZvaWQgbXJmMjRqNDBfc2VjX2ludGNiKGJvb2wgYWNjZXB0KTsNCisNCit2b2lkIG1yZjI0ajQwX3R4Zmlmb193cml0ZSh1aW50MTZfdCBhZGRyZXNzLCB1aW50OF90ICpkYXRhLCB1aW50OF90IGhkcl9sZW4sIHVpbnQ4X3QgbGVuKTsNCit2b2lkIG1yZjI0ajQwX3RyYW5zbWl0KHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX01SRjI0SjQwX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9wbXJmLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9wbXJmL3BtcmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA1MzdmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9wbXJmLmMKQEAgLTAsMCArMSwzNzMgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDctMTgNCisgKiBcYXV0aG9yIFFpYW5nIEd1KFFpYW5nLkd1QHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgQk9BUkRfRU1TS19EUlZfUE1PRFJGICAgRU1TSyBQTU9EIFJGIERyaXZlcg0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJJVkVSDQorICogXGJyaWVmICAgRU1TSyBQbW9kIFJGIERyaXZlcg0KKyAqIFxkZXRhaWxzDQorICogICAgICBSZWFsaXplIHRoZSBFTVNLIGJvYXJkIFBNT0QgUkYgZHJpdmVyDQorICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9QTU9EUkYNCisgKiBcYnJpZWYgICBQbW9kIFJGIGRyaXZlciBmb3IgZW1zayBib2FyZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9QTU9EUkYNCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiaW5jL2VtYkFSQ19lcnJvci5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisjaW5jbHVkZSAiYm9hcmQvYm9hcmQuaCINCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9ncGlvLmgiDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfc3BpLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svcG1yZi9wbXJmLmgiDQorDQorI2RlZmluZSBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisNCitzdGF0aWMgREVWX1NQSV9QVFIgcG1yZl9zcGlfcHRyOw0KK3N0YXRpYyBERVZfR1BJT19QVFIgcG1yZl9ncGlvX3B0cjsNCitzdGF0aWMgdWludDMyX3QgY3NfbGluZSA9IEVNU0tfUE1SRl8wX1NQSV9MSU5FOw0KKw0KK3ZvaWQgcG1yZl93YWtlX3Bpbih1aW50MzJfdCBmbGFnKQ0KK3sNCisgICAgaWYgKGZsYWcgPT0gMSkNCisgICAgew0KKyAgICAgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb193cml0ZShNUkYyNEo0MF9XQUtFX09OLCBNUkYyNEo0MF9XQUtFX1BJTik7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBwbXJmX2dwaW9fcHRyLT5ncGlvX3dyaXRlKE1SRjI0SjQwX1dBS0VfT0ZGLCBNUkYyNEo0MF9XQUtFX1BJTik7DQorICAgIH0NCit9DQorDQordm9pZCBwbXJmX2NzX3Bpbih1aW50MzJfdCBmbGFnKQ0KK3sNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV9zdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorI2VuZGlmDQorDQorICAgIGlmIChmbGFnID09IDEpDQorICAgIHsNCisgICAgICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorDQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIH0NCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisjZW5kaWYNCit9DQorDQordm9pZCBwbXJmX3Jlc2V0X3Bpbih1aW50MzJfdCBmbGFnKQ0KK3sNCisgICAgaWYgKGZsYWcgPT0gMSkNCisgICAgew0KKyAgICAgICAgcG1yZl9ncGlvX3B0ci0+Z3Bpb193cml0ZShNUkYyNEo0MF9SU1RfSElHSCwgTVJGMjRKNDBfUlNUX1BJTik7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBwbXJmX2dwaW9fcHRyLT5ncGlvX3dyaXRlKE1SRjI0SjQwX1JTVF9MT1csIE1SRjI0SjQwX1JTVF9QSU4pOw0KKyAgICB9DQorfQ0KKw0KK3VpbnQ4X3QgcG1yZl9yZWFkX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkcikNCit7DQorICAgIHVpbnQ4X3QgbXNnWzJdOw0KKyAgICB1aW50OF90IHJldF92YWw7DQorICAgIERFVl9TUElfVFJBTlNGRVIgcG1yZl94ZmVyOw0KKyAgICB1aW50MzJfdCBjcHVfc3RhdHVzOw0KKw0KKyAgICBtc2dbMF0gPSAodWludDhfdCkoKChhZGRyID4+IDMpICYgMHg3RikgfCAweDgwKTsNCisgICAgbXNnWzFdID0gKHVpbnQ4X3QpKChhZGRyIDw8IDUpICYgMHhFMCk7DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgbXNnLCAwLCAyKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmcG1yZl94ZmVyLCAmcmV0X3ZhbCwgMiwgMSk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmcG1yZl94ZmVyLCBOVUxMKTsNCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV9zdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorI2VuZGlmDQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsIENPTlYyVk9JRCgmcG1yZl94ZmVyKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorI2VuZGlmDQorDQorICAgIHJldHVybiByZXRfdmFsOw0KK30NCisNCit1aW50OF90IHBtcmZfcmVhZF9zaG9ydF9jdHJsX3JlZyh1aW50OF90IGFkZHIpDQorew0KKyAgICB1aW50OF90IG1zZzsNCisgICAgdWludDhfdCByZXRfdmFsOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisNCisgICAgbXNnID0gKCgoYWRkciA8PCAxKSAmIDB4N0UpIHwgMCk7DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgJm1zZywgMCwgMSk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnBtcmZfeGZlciwgJnJldF92YWwsIDEsIDEpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnBtcmZfeGZlciwgTlVMTCk7DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLCBDT05WMlZPSUQoJnBtcmZfeGZlcikpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKGNwdV9zdGF0dXMpOw0KKyNlbmRpZg0KKw0KKyAgICByZXR1cm4gcmV0X3ZhbDsNCisNCit9DQorDQordm9pZCBwbXJmX3dyaXRlX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkciwgdWludDhfdCB2YWx1ZSkNCit7DQorICAgIHVpbnQ4X3QgbXNnWzRdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisNCisgICAgbXNnWzBdID0gKHVpbnQ4X3QpKCgoYWRkciA+PiAzKSAmIDB4N0YpIHwgMHg4MCk7DQorICAgIG1zZ1sxXSA9ICh1aW50OF90KSgoKGFkZHIgPDwgNSkgJiAweEUwKSB8ICgxIDw8IDQpKTsNCisgICAgbXNnWzJdID0gdmFsdWU7DQorICAgIG1zZ1szXSA9IDB4MDsgICAvKiBoYXZlIHRvIHdyaXRlIDEgbW9yZSBieXRlLCB3aHkgPyovDQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgbXNnLCAwLCA0KTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmcG1yZl94ZmVyLCBOVUxMLCA0LCAwKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZwbXJmX3hmZXIsIE5VTEwpOw0KKw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3N0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisjZW5kaWYNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfVFJBTlNGRVJfUE9MTElORywgQ09OVjJWT0lEKCZwbXJmX3hmZXIpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9EU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisjZW5kaWYNCit9DQorDQordm9pZCBwbXJmX3dyaXRlX3Nob3J0X2N0cmxfcmVnKHVpbnQ4X3QgYWRkciwgdWludDhfdCB2YWx1ZSkNCit7DQorICAgIERFVl9TUElfVFJBTlNGRVIgcG1yZl94ZmVyOw0KKyAgICB1aW50OF90IG1zZ1szXTsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisNCisgICAgbXNnWzBdID0gKCgoYWRkciA8PCAxKSAmIDB4N0UpIHwgMSk7DQorICAgIG1zZ1sxXSA9IHZhbHVlOw0KKyAgICBtc2dbMl0gPSAweDA7ICAgLyogaGF2ZSB0byB3cml0ZSAxIG1vcmUgYnl0ZSwgd2h5ID8qLw0KKw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZwbXJmX3hmZXIsIG1zZywgMCwgMyk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnBtcmZfeGZlciwgTlVMTCwgMywgMCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmcG1yZl94ZmVyLCBOVUxMKTsNCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV9zdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorI2VuZGlmDQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsIENPTlYyVk9JRCgmcG1yZl94ZmVyKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorI2VuZGlmDQorDQorfQ0KKw0KK3ZvaWQgcG1yZl9kZWxheV91cyh1aW50MzJfdCB1cykNCit7DQorICAgIHVpbnQ2NF90IHN0YXJ0X3VzLCB1c19kZWxheWVkOw0KKw0KKyAgICB1c19kZWxheWVkID0gKHVpbnQ2NF90KXVzOw0KKyAgICBzdGFydF91cyA9IGJvYXJkX2dldF9jdXJfdXMoKTsNCisNCisgICAgd2hpbGUgKChib2FyZF9nZXRfY3VyX3VzKCkgLSBzdGFydF91cykgPCB1c19kZWxheWVkKTsNCit9DQorDQordm9pZCBwbXJmX2RlbGF5X21zKHVpbnQzMl90IG1zKQ0KK3sNCisgICAgYm9hcmRfZGVsYXlfbXMobXMsIE9TUF9ERUxBWV9PU19DT01QQVRfRElTQUJMRSk7DQorfQ0KKw0KKy8qIG5lZWQgdGVzdCAqLw0KK3ZvaWQgcG1yZl9zZXRfa2V5KHVpbnQxNl90IGFkZHIsIHVpbnQ4X3QgKmtleSkNCit7DQorICAgIHVpbnQ4X3QgbXNnWzE2ICsgMl07DQorICAgIERFVl9TUElfVFJBTlNGRVIgcG1yZl94ZmVyOw0KKyAgICB1aW50MzJfdCBjcHVfc3RhdHVzOw0KKyAgICB1aW50OF90IGk7DQorDQorICAgIG1zZ1swXSA9ICh1aW50OF90KSgoKGFkZHIgPj4gMykgJiAweDdGKSB8IDB4ODApOw0KKyAgICBtc2dbMV0gPSAodWludDhfdCkoKChhZGRyIDw8IDUpICYgMHhFMCkgfCAoMSA8PCA0KSk7DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtc2dbaSArIDJdID0ga2V5WzBdOw0KKyAgICB9DQorDQorICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJnBtcmZfeGZlciwgbXNnLCAwLCAxOCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnBtcmZfeGZlciwgTlVMTCwgMTgsIDApOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnBtcmZfeGZlciwgTlVMTCk7DQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLCBDT05WMlZPSUQoJnBtcmZfeGZlcikpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKGNwdV9zdGF0dXMpOw0KKyNlbmRpZg0KK30NCisNCisvKiBuZWVkIHRlc3QgKi8NCit2b2lkIHBtcmZfdHhwa3RfZnJhbWVfd3JpdGUodWludDhfdCAqZnJhbWUsIGludDE2X3QgaGRyX2xlbiwgaW50MTZfdCBmcmFtZV9sZW4pDQorew0KKyAgICB1aW50OF90IG1zZ1tmcmFtZV9sZW4gKyAyICsgMl07DQorICAgIERFVl9TUElfVFJBTlNGRVIgcG1yZl94ZmVyOw0KKyAgICB1aW50MzJfdCBjcHVfc3RhdHVzOw0KKyAgICB1aW50OF90IGkgPSAwOw0KKw0KKyAgICBtc2dbMF0gPSAodWludDhfdCkoKChNUkYyNEo0MF9UWE5GSUZPID4+IDMpICYgMHg3RikgfCAweDgwKTsNCisgICAgbXNnWzFdID0gKHVpbnQ4X3QpKCgoTVJGMjRKNDBfVFhORklGTyA8PCA1KSAmIDB4RTApIHwgKDEgPDwgNCkpOw0KKyAgICBtc2dbMl0gPSAodWludDhfdCloZHJfbGVuOw0KKyAgICBtc2dbM10gPSAodWludDhfdClmcmFtZV9sZW47DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZV9sZW47IGkrKykNCisgICAgew0KKyAgICAgICAgbXNnW2kgKyA0XSA9ICpmcmFtZTsNCisgICAgICAgIGZyYW1lKys7DQorICAgIH0NCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmcG1yZl94ZmVyLCBtc2csIDAsIGZyYW1lX2xlbiArIDIgKyAyKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmcG1yZl94ZmVyLCBOVUxMLCBmcmFtZV9sZW4gKyAyICsgMiwgMCk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmcG1yZl94ZmVyLCBOVUxMKTsNCisNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV9zdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorI2VuZGlmDQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsIENPTlYyVk9JRCgmcG1yZl94ZmVyKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoY3B1X3N0YXR1cyk7DQorI2VuZGlmDQorfQ0KKw0KKy8qIG5lZWQgdGVzdCAqLw0KK3ZvaWQgcG1yZl9yeHBrdF9pbnRjYl9mcmFtZV9yZWFkKHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCBsZW5ndGgpDQorew0KKyAgICB1aW50OF90IG1zZ1tsZW5ndGhdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIHBtcmZfeGZlcjsNCisgICAgdWludDMyX3QgY3B1X3N0YXR1czsNCisNCisgICAgbXNnWzBdID0gKHVpbnQ4X3QpKCgoKE1SRjI0SjQwX1JYRklGTyArIDEpID4+IDMpICYgMHg3RikgfCAweDgwKTsNCisgICAgbXNnWzFdID0gKHVpbnQ4X3QpKCgoTVJGMjRKNDBfUlhGSUZPICsgMSkgPDwgNSkgJiAweEUwKTsNCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmcG1yZl94ZmVyLCBtc2csIDAsIDIpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZwbXJmX3hmZXIsIGJ1ZiwgMiwgbGVuZ3RoKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKCZwbXJmX3hmZXIsIE5VTEwpOw0KKw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3N0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisjZW5kaWYNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfVFJBTlNGRVJfUE9MTElORywgQ09OVjJWT0lEKCZwbXJmX3hmZXIpKTsNCisgICAgcG1yZl9zcGlfcHRyLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9EU0VMX0RFViwgQ09OVjJWT0lEKGNzX2xpbmUpKTsNCisjaWZkZWYgRU1TS19QTVJGXzBfU1BJX0NQVUxPQ0tfRU5BQkxFDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisjZW5kaWYNCisNCit9DQorDQordm9pZCBwbXJmX2FsbF9pbnN0YWxsKHZvaWQpDQorew0KKyAgICBwbXJmX3NwaV9wdHIgPSBzcGlfZ2V0X2RldihFTVNLX1BNUkZfMF9TUElfSUQpOw0KKyAgICBwbXJmX2dwaW9fcHRyID0gZ3Bpb19nZXRfZGV2KEVNU0tfUE1SRl8wX0dQSU9fSUQpOw0KK30NCisNCit2b2lkIHBtcmZfdHhmaWZvX3dyaXRlKHVpbnQxNl90IGFkZHJlc3MsIHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgaGRyX2xlbiwgdWludDhfdCBsZW4pDQorew0KKyAgICB1aW50OF90IG1zZ1tsZW4gKyA0XTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBwbXJmX3hmZXI7DQorICAgIHVpbnQzMl90IGNwdV9zdGF0dXM7DQorICAgIHVpbnQ4X3QgaSA9IDA7DQorDQorICAgIG1zZ1swXSA9ICh1aW50OF90KSgoKGFkZHJlc3MgPj4gMykgJiAweDdGKSB8IDB4ODApOw0KKyAgICBtc2dbMV0gPSAodWludDhfdCkoKChhZGRyZXNzIDw8IDUpICYgMHhFMCkgfCAoMSA8PCA0KSk7DQorICAgIG1zZ1syXSA9IGhkcl9sZW47DQorICAgIG1zZ1szXSA9IGxlbjsNCisNCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBtc2dbaSArIDRdID0gKihkYXRhICsgaSk7DQorICAgIH0NCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmcG1yZl94ZmVyLCBtc2csIDAsIGxlbiArIDQpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZwbXJmX3hmZXIsIE5VTEwsIGxlbiArIDQsIDApOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnBtcmZfeGZlciwgTlVMTCk7DQorDQorDQorI2lmZGVmIEVNU0tfUE1SRl8wX1NQSV9DUFVMT0NLX0VOQUJMRQ0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyNlbmRpZg0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19saW5lKSk7DQorICAgIHBtcmZfc3BpX3B0ci0+c3BpX2NvbnRyb2woU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HLCBDT05WMlZPSUQoJnBtcmZfeGZlcikpOw0KKyAgICBwbXJmX3NwaV9wdHItPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX0RTRUxfREVWLCBDT05WMlZPSUQoY3NfbGluZSkpOw0KKyNpZmRlZiBFTVNLX1BNUkZfMF9TUElfQ1BVTE9DS19FTkFCTEUNCisgICAgY3B1X3VubG9ja19yZXN0b3JlKGNwdV9zdGF0dXMpOw0KKyNlbmRpZg0KKw0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX1BNT0RSRiAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvcG1yZi5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svcG1yZi9wbXJmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxNjIyZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3BtcmYvcG1yZi5oCkBAIC0wLDAgKzEsMTEwIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTA3LTE4DQorICogXGF1dGhvciBRaWFuZyBHdShRaWFuZy5HdUBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSVl9QTU9EUkYNCisgKiBcYnJpZWYgICBoZWFkZXIgZmlsZSBvZiBQbW9kIE1SRjI0SjQwTUEgZHJpdmVyIGZvciBFTVNLIGJvYXJkDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEJPQVJEX0VNU0tfRFJWX1BNT0RSRg0KKyAqIEB7DQorICovDQorDQorI2lmbmRlZiBfUE1SRl9IXw0KKyNkZWZpbmUgX1BNUkZfSF8NCisNCisvKiogTVJGMjRKNDAgRnVuY3Rpb25zICovDQorDQorI2RlZmluZSBtcmYyNGo0MF9yZXNldF9waW4odmFsKSAgICAgcG1yZl9yZXNldF9waW4odmFsKQ0KKyNkZWZpbmUgbXJmMjRqNDBfd2FrZV9waW4odmFsKSAgICAgIHBtcmZfd2FrZV9waW4odmFsKQ0KKyNkZWZpbmUgbXJmMjRqNDBfY3NfcGluKHZhbCkgICAgICAgIHBtcmZfY3NfcGluKHZhbCkNCisNCisjZGVmaW5lIG1yZjI0ajQwX2RlbGF5X3VzKHZhbCkgICAgICBwbXJmX2RlbGF5X3VzKHZhbCkNCisjZGVmaW5lIG1yZjI0ajQwX2RlbGF5X21zKHZhbCkgICAgICBwbXJmX2RlbGF5X21zKHZhbCkNCisNCisNCisvKiogUE1PRCBSRiBTUEkgRlJFUSAmIENMSyBNT0RFIFNFVFRJTkdTICovDQorI2RlZmluZSBFTVNLX1BNUkZfMF9TUElGUkVRICAgICBCT0FSRF9TUElfRlJFUQ0KKyNkZWZpbmUgRU1TS19QTVJGXzBfU1BJQ0xLTU9ERSAgICAgIEJPQVJEX1NQSV9DTEtNT0RFDQorDQorLyoqIFBNT0QgUkYgU1BJIElEICovDQorI2RlZmluZSBFTVNLX1BNUkZfMF9TUElfSUQgICAgICBEV19TUElfMF9JRA0KKw0KKy8qKiBVc2UgSjYgYnkgZGVmYXVsdCwgTVJGMjRKNDAgUElOICovDQorI2RlZmluZSBFTVNLX1BNUkZfMF9TUElfTElORSAgICAgICAgRU1TS19TUElfTElORV8wDQorI2RlZmluZSBFTVNLX1BNUkZfMF9HUElPX0lEICAgICBFTVNLX0dQSU9fUE9SVF9BDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFX1BJTiAgICAgICAoMSA8PCAzMCkNCisjZGVmaW5lIE1SRjI0SjQwX1JTVF9QSU4gICAgICAgICgxIDw8IDI5KQ0KKyNkZWZpbmUgTVJGMjRKNDBfSU5UX1BJTiAgICAgICAgKDEgPDwgMjgpDQorDQorI2RlZmluZSBNUkYyNEo0MF9XQUtFX09GRiAgICAgICAoMCA8PCAzMCkNCisjZGVmaW5lIE1SRjI0SjQwX1dBS0VfT04gICAgICAgICgxIDw8IDMwKQ0KKw0KKyNkZWZpbmUgTVJGMjRKNDBfUlNUX0xPVyAgICAgICAgKDAgPDwgMjkpDQorI2RlZmluZSBNUkYyNEo0MF9SU1RfSElHSCAgICAgICAoMSA8PCAyOSkNCisNCisjZGVmaW5lIE1SRjI0SjQwX0lOVF9QSU5fT0ZTICAgICAgICAoMjgpDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorZXh0ZXJuIHZvaWQgcG1yZl9yZXNldF9waW4odWludDMyX3QgZmxhZyk7DQorZXh0ZXJuIHZvaWQgcG1yZl93YWtlX3Bpbih1aW50MzJfdCBmbGFnKTsNCitleHRlcm4gdm9pZCBwbXJmX2NzX3Bpbih1aW50MzJfdCBmbGFnKTsNCisNCitleHRlcm4gdWludDhfdCBwbXJmX3JlYWRfbG9uZ19jdHJsX3JlZyh1aW50MTZfdCBhZGRyKTsNCitleHRlcm4gdWludDhfdCBwbXJmX3JlYWRfc2hvcnRfY3RybF9yZWcodWludDhfdCBhZGRyKTsNCitleHRlcm4gdm9pZCBwbXJmX3dyaXRlX2xvbmdfY3RybF9yZWcodWludDE2X3QgYWRkciwgdWludDhfdCB2YWx1ZSk7DQorZXh0ZXJuIHZvaWQgcG1yZl93cml0ZV9zaG9ydF9jdHJsX3JlZyh1aW50OF90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpOw0KK2V4dGVybiB2b2lkIHBtcmZfc3BpX3dyaXRlKHVpbnQ4X3QgZGF0YSk7DQorZXh0ZXJuIHZvaWQgcG1yZl9kZWxheV91cyh1aW50MzJfdCB1cyk7DQorZXh0ZXJuIHZvaWQgcG1yZl9kZWxheV9tcyh1aW50MzJfdCBtcyk7DQorDQorZXh0ZXJuIHZvaWQgcG1yZl9zZXRfa2V5KHVpbnQxNl90IGFkZHJlc3MsIHVpbnQ4X3QgKmtleSk7DQorZXh0ZXJuIHZvaWQgcG1yZl90eHBrdF9mcmFtZV93cml0ZSh1aW50OF90ICpmcmFtZSwgaW50MTZfdCBoZHJfbGVuLCBpbnQxNl90IGZyYW1lX2xlbik7DQorZXh0ZXJuIHZvaWQgcG1yZl9yeHBrdF9pbnRjYl9mcmFtZV9yZWFkKHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCBsZW5ndGgpOw0KKw0KK2V4dGVybiB2b2lkIHBtcmZfYWxsX2luc3RhbGwodm9pZCk7DQorDQorZXh0ZXJuIHZvaWQgcG1yZl90eGZpZm9fd3JpdGUodWludDE2X3QgYWRkcmVzcywgdWludDhfdCAqZGF0YSwgdWludDhfdCBoZHJfbGVuLCB1aW50OF90IGxlbik7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfUE1SRl9IXyAqLw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfUE1PRFJGICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpL2R3X3NwaV9vYmouYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxNjc1ZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDctMDMNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIEJPQVJEX0VNU0tfRFJWX0RXX1NQSV9PQkogICBFTVNLIERXIFNQSSBPYmplY3QNCisgKiBcaW5ncm91cCBCT0FSRF9FTVNLX0RSSVZFUg0KKyAqIFxicmllZiAgIEVNU0sgRGVzaWdud2FyZSBTUEkgT2JqZWN0cw0KKyAqIFxkZXRhaWxzDQorICogICAgICByZWFsaXplIHRoZSBFTVNLIGJvYXJkIHNwaSBvYmplY3QgdXNpbmcgZGVzaWdud2FyZSBzcGkgZGV2aWNlIGRyaXZlciwNCisgKiAgb25seSBuZWVkIHRvIHJlYWxpemUgc29tZSBkZXNpZ253YXJlIHNwaSBzdHJ1Y3R1cmVzIGNvbWJpbmUgd2l0aCBFTVNLIHNwaQ0KKyAqICBoYXJkd2FyZSByZXNvdXJjZS4ganVzdCBsaWtlIGNwcCBjbGFzcyBpbnN0YW50aWF0aW9uLg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfU1BJX09CSg0KKyAqIFxicmllZiAgIGRlc2lnbndhcmUgc3BpIG9iamVjdCBpbnN0YW50aWF0aW9uIG9uIGVtc2sNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfRFdfU1BJX09CSg0KKyAqIEB7DQorICovDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2J1aWx0aW4uaCINCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiaW5jL2VtYkFSQ19lcnJvci5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaS5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3NwaS9kd19zcGlfb2JqLmgiDQorDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svZW1zay5oIg0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9ETVBfUEVSSVBIRVJBTA0KKyNkZWZpbmUgUEVSSVBIRVJBTF9CQVNFICAgICBBUkNfRkVBVFVSRV9ETVBfUEVSSVBIRVJBTA0KKyNlbHNlDQorI2RlZmluZSBQRVJJUEhFUkFMX0JBU0UgICAgIF9hcmNfYXV4X3JlYWQoQVVYX0RNUF9QRVJJUEhFUkFMKQ0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEVNU0sgRGVzaWduV2FyZSBTUEkgMCBPYmplY3QgSW5zdGFudGlhdGlvbg0KKyAqIEB7DQorICovDQorI2lmIChVU0VfRFdfU1BJXzApDQorc3RhdGljIHZvaWQgZHdfc3BpXzBfaXNyKHZvaWQgKnB0cik7DQorI2RlZmluZSBEV19TUElfMF9SRUxCQVNFICAgIChSRUxfUkVHQkFTRV9TUEkwKSAgLyohPCBkZXNpZ253YXJlIHNwaSAwIHJlbGF0aXZlIGJhc2VhZGRyICovDQorI2RlZmluZSBEV19TUElfMF9JTlROTyAgICAgIChJTlROT19TUElfTUFTVEVSKSAgLyohPCBkZXNpZ253YXJlIHNwaSAwIGludGVycnVwdCBudW1iZXIgICovDQorDQorI2RlZmluZSBEV19TUElfMF9UWF9GSUZPX0xFTiAgICAoMzIpDQorI2RlZmluZSBEV19TUElfMF9SWF9GSUZPX0xFTiAgICAoMzIpDQorDQorI2RlZmluZSBEV19TUElfMF9TVVBQT1JURURfTU9ERSBEV19TUElfTUFTVEVSX1NVUFBPUlRFRA0KKw0KK0RFVl9TUEkgICAgICAgICBkd19zcGlfMDsgICAgICAgICAgIC8qITwgZGVzaWdud2FyZSBzcGkgb2JqZWN0ICovDQorRFdfU1BJX0NUUkwgICAgIGR3X3NwaV8wX2N0cmw7ICAgICAgICAgIC8qITwgZGVzaWdud2FyZSBzcGkgMCBjdHJsICovDQorI2lmIEhXX1ZFUlNJT04gPj0gMjINCitzdGF0aWMgdWludDMyX3Qgc3BpX21zdF9jc19jdHJsX2NyZWcgPSAwOw0KKyNlbmRpZg0KKw0KKy8qKiBkZXNpZ253YXJlIHNwaSAwIG9wZW4gKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMF9vcGVuKHVpbnQzMl90IG1vZGUsIHVpbnQzMl90IHBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV9vcGVuKCZkd19zcGlfMCwgbW9kZSwgcGFyYW0pOw0KK30NCisvKiogZGVzaWdud2FyZSBzcGkgMCBjbG9zZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV8wX2Nsb3NlKHZvaWQpDQorew0KKyAgICByZXR1cm4gZHdfc3BpX2Nsb3NlKCZkd19zcGlfMCk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAwIGNvbnRyb2wgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMF9jb250cm9sKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorI2lmIEhXX1ZFUlNJT04gPj0gMjINCisgICAgaW50MzJfdCBlcmNkOw0KKyAgICBlcmNkID0gZHdfc3BpX2NvbnRyb2woJmR3X3NwaV8wLCBjdHJsX2NtZCwgcGFyYW0pOw0KKw0KKyAgICBpZiAoY3RybF9jbWQgPT0gU1BJX0NNRF9NU1RfU0VMX0RFVikNCisgICAgew0KKyAgICAgICAgX2FyY193cml0ZV91bmNhY2hlZF8zMigodm9pZCAqKXNwaV9tc3RfY3NfY3RybF9jcmVnLCAxIDw8ICgodWludDMyX3QpcGFyYW0pKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChjdHJsX2NtZCA9PSBTUElfQ01EX01TVF9EU0VMX0RFVikNCisgICAgew0KKyAgICAgICAgX2FyY193cml0ZV91bmNhY2hlZF8zMigodm9pZCAqKXNwaV9tc3RfY3NfY3RybF9jcmVnLCAwKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZXJjZDsNCisjZWxzZQ0KKyAgICByZXR1cm4gZHdfc3BpX2NvbnRyb2woJmR3X3NwaV8wLCBjdHJsX2NtZCwgcGFyYW0pOw0KKyNlbmRpZg0KK30NCisvKiogZGVzaWdud2FyZSBzcGkgMCB3cml0ZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV8wX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIHJldHVybiBkd19zcGlfd3JpdGUoJmR3X3NwaV8wLCBkYXRhLCBsZW4pOw0KK30NCisvKiogZGVzaWdud2FyZSBzcGkgMCBjbG9zZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV8wX3JlYWQodm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV9yZWFkKCZkd19zcGlfMCwgZGF0YSwgbGVuKTsNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDAgaW50ZXJydXB0IHJvdXRpbmUgKi8NCitzdGF0aWMgdm9pZCBkd19zcGlfMF9pc3Iodm9pZCAqcHRyKQ0KK3sNCisgICAgZHdfc3BpX2lzcigmZHdfc3BpXzAsIHB0cik7DQorfQ0KKy8qKiBpbnN0YWxsIGRlc2lnbndhcmUgc3BpIDAgdG8gc3lzdGVtICovDQorc3RhdGljIHZvaWQgZHdfc3BpXzBfaW5zdGFsbCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3Qgc3BpX2Fic19iYXNlID0gMDsNCisgICAgREVWX1NQSSAqZHdfc3BpX3B0ciA9ICZkd19zcGlfMDsNCisgICAgREVWX1NQSV9JTkZPICpkd19zcGlfaW5mb19wdHIgPSAmKGR3X3NwaV8wLnNwaV9pbmZvKTsNCisgICAgRFdfU1BJX0NUUkwgKmR3X3NwaV9jdHJsX3B0ciA9ICZkd19zcGlfMF9jdHJsOw0KKyAgICBEV19TUElfUkVHICpkd19zcGlfcmVnX3B0cjsNCisNCisgICAgLyoqDQorICAgICAqIGdldCBhYnNvbHV0ZSBkZXNpZ253YXJlIGJhc2UgYWRkcmVzcw0KKyAgICAgKi8NCisgICAgc3BpX2Fic19iYXNlID0gKHVpbnQzMl90KVBFUklQSEVSQUxfQkFTRSArIERXX1NQSV8wX1JFTEJBU0U7DQorDQorI2lmIEhXX1ZFUlNJT04gPj0gMjINCisgICAgc3BpX21zdF9jc19jdHJsX2NyZWcgPSBzcGlfYWJzX2Jhc2UgKyBSRUxfUkVHQkFTRV9TUElfTVNUX0NTX0NUUkw7DQorI2VuZGlmDQorDQorICAgIGR3X3NwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKilzcGlfYWJzX2Jhc2U7DQorDQorICAgIC8qKiBzcGkgaW5mbyBpbml0ICovDQorICAgIGR3X3NwaV9pbmZvX3B0ci0+c3BpX2N0cmwgPSAodm9pZCAqKWR3X3NwaV9jdHJsX3B0cjsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5zdGF0dXMgPSBERVZfRElTQUJMRUQ7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+ZnJlcSA9IDEwMDA7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+b3BuX2NudCA9IDA7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+bW9kZSA9IERFVl9NQVNURVJfTU9ERTsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5jbGtfbW9kZSA9IFNQSV9DTEtfTU9ERV9ERUZBVUxUOw0KKyAgICBkd19zcGlfaW5mb19wdHItPnNsYXZlID0gU1BJX1NMQVZFX05PVF9TRUxFQ1RFRDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5kZnMgPSBTUElfREZTX0RFRkFVTFQ7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+ZHVtbXkgPSAweGZmOw0KKw0KKyAgICAvKiBzcGkgY3RybCBpbml0ICovDQorICAgIC8qIFZhcmlhYmxlcyB3aGljaCBzaG91bGQgYmUgc2V0IGR1cmluZyBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgZHdfc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyA9IGR3X3NwaV9yZWdfcHRyOw0KKyAgICBkd19zcGlfY3RybF9wdHItPmludG5vID0gRFdfU1BJXzBfSU5UTk87DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+c3VwcG9ydF9tb2RlcyA9IERXX1NQSV8wX1NVUFBPUlRFRF9NT0RFOw0KKyAgICBkd19zcGlfY3RybF9wdHItPnR4X2ZpZm9fbGVuID0gRFdfU1BJXzBfVFhfRklGT19MRU47DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+cnhfZmlmb19sZW4gPSBEV19TUElfMF9UWF9GSUZPX0xFTjsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT5kd19hcGJfYnVzX2ZyZXEgPSBDTEtfQlVTX0FQQjsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT5kd19zcGlfaW50X2hhbmRsZXIgPSBkd19zcGlfMF9pc3I7DQorICAgIC8qIFZhcmlhYmxlcyB3aGljaCBhbHdheXMgY2hhbmdlIGR1cmluZyBzcGkgb3BlcmF0aW9uICovDQorICAgIGR3X3NwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyA9IDA7DQorDQorICAgIC8qKiBzcGkgZGV2IGluaXQgKi8NCisgICAgZHdfc3BpX3B0ci0+c3BpX29wZW4gPSBkd19zcGlfMF9vcGVuOw0KKyAgICBkd19zcGlfcHRyLT5zcGlfY2xvc2UgPSBkd19zcGlfMF9jbG9zZTsNCisgICAgZHdfc3BpX3B0ci0+c3BpX2NvbnRyb2wgPSBkd19zcGlfMF9jb250cm9sOw0KKyAgICBkd19zcGlfcHRyLT5zcGlfd3JpdGUgPSBkd19zcGlfMF93cml0ZTsNCisgICAgZHdfc3BpX3B0ci0+c3BpX3JlYWQgPSBkd19zcGlfMF9yZWFkOw0KK30NCisjZW5kaWYgLyogVVNFX0RXX1NQSV8wICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRU1TSyBEZXNpZ25XYXJlIFNQSSAxIE9iamVjdCBJbnN0YW50aWF0aW9uDQorICogQHsNCisgKi8NCisjaWYgKFVTRV9EV19TUElfMSkNCitzdGF0aWMgdm9pZCBkd19zcGlfMV9pc3Iodm9pZCAqcHRyKTsNCisjZGVmaW5lIERXX1NQSV8xX1JFTEJBU0UgICAgKFJFTF9SRUdCQVNFX1NQSTEpICAvKiE8IGRlc2lnbndhcmUgc3BpIDEgcmVsYXRpdmUgYmFzZWFkZHIgKi8NCisjZGVmaW5lIERXX1NQSV8xX0lOVE5PICAgICAgKElOVE5PX1NQSV9TTEFWRSkgICAvKiE8IGRlc2lnbndhcmUgc3BpIDEgaW50ZXJydXB0IG51bWJlciAgKi8NCisNCisjZGVmaW5lIERXX1NQSV8xX1RYX0ZJRk9fTEVOICAgICgzMikNCisjZGVmaW5lIERXX1NQSV8xX1JYX0ZJRk9fTEVOICAgICgzMikNCisNCisjZGVmaW5lIERXX1NQSV8xX1NVUFBPUlRFRF9NT0RFIERXX1NQSV9TTEFWRV9TVVBQT1JURUQNCisNCitERVZfU1BJICAgICAgICAgZHdfc3BpXzE7ICAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgc3BpIDEgb2JqZWN0ICovDQorRFdfU1BJX0NUUkwgICAgIGR3X3NwaV8xX2N0cmw7ICAgICAgICAgIC8qITwgZGVzaWdud2FyZSBzcGkgMSBjdHJsICovDQorDQorLyoqIGRlc2lnbndhcmUgc3BpIDEgb3BlbiAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV8xX29wZW4odWludDMyX3QgbW9kZSwgdWludDMyX3QgcGFyYW0pDQorew0KKyAgICByZXR1cm4gZHdfc3BpX29wZW4oJmR3X3NwaV8xLCBtb2RlLCBwYXJhbSk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAxIGNsb3NlICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpXzFfY2xvc2Uodm9pZCkNCit7DQorICAgIHJldHVybiBkd19zcGlfY2xvc2UoJmR3X3NwaV8xKTsNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDEgY29udHJvbCAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV8xX2NvbnRyb2wodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgcmV0dXJuIGR3X3NwaV9jb250cm9sKCZkd19zcGlfMSwgY3RybF9jbWQsIHBhcmFtKTsNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDEgd3JpdGUgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfc3BpX3dyaXRlKCZkd19zcGlfMSwgZGF0YSwgbGVuKTsNCit9DQorLyoqIGRlc2lnbndhcmUgc3BpIDEgY2xvc2UgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfMV9yZWFkKHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIHJldHVybiBkd19zcGlfcmVhZCgmZHdfc3BpXzEsIGRhdGEsIGxlbik7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHNwaSAxIGludGVycnVwdCByb3V0aW5lICovDQorc3RhdGljIHZvaWQgZHdfc3BpXzFfaXNyKHZvaWQgKnB0cikNCit7DQorICAgIGR3X3NwaV9pc3IoJmR3X3NwaV8xLCBwdHIpOw0KK30NCisvKiogaW5zdGFsbCBkZXNpZ253YXJlIHNwaSAxIHRvIHN5c3RlbSAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV8xX2luc3RhbGwodm9pZCkNCit7DQorICAgIHVpbnQzMl90IHNwaV9hYnNfYmFzZSA9IDA7DQorICAgIERFVl9TUEkgKmR3X3NwaV9wdHIgPSAmZHdfc3BpXzE7DQorICAgIERFVl9TUElfSU5GTyAqZHdfc3BpX2luZm9fcHRyID0gJihkd19zcGlfMS5zcGlfaW5mbyk7DQorICAgIERXX1NQSV9DVFJMICpkd19zcGlfY3RybF9wdHIgPSAmZHdfc3BpXzFfY3RybDsNCisgICAgRFdfU1BJX1JFRyAqZHdfc3BpX3JlZ19wdHI7DQorDQorICAgIC8qKg0KKyAgICAgKiBnZXQgYWJzb2x1dGUgZGVzaWdud2FyZSBiYXNlIGFkZHJlc3MNCisgICAgICovDQorICAgIHNwaV9hYnNfYmFzZSA9ICh1aW50MzJfdClQRVJJUEhFUkFMX0JBU0UgKyBEV19TUElfMV9SRUxCQVNFOw0KKyAgICBkd19zcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopc3BpX2Fic19iYXNlOw0KKw0KKyAgICAvKiogc3BpIGluZm8gaW5pdCAqLw0KKyAgICBkd19zcGlfaW5mb19wdHItPnNwaV9jdHJsID0gKHZvaWQgKilkd19zcGlfY3RybF9wdHI7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+c3RhdHVzID0gREVWX0RJU0FCTEVEOw0KKyAgICBkd19zcGlfaW5mb19wdHItPmZyZXEgPSAxMDAwOw0KKyAgICBkd19zcGlfaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBkd19zcGlfaW5mb19wdHItPm1vZGUgPSBERVZfU0xBVkVfTU9ERTsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5jbGtfbW9kZSA9IFNQSV9DTEtfTU9ERV9ERUZBVUxUOw0KKyAgICBkd19zcGlfaW5mb19wdHItPnNsYXZlID0gU1BJX1NMQVZFX05PVF9TRUxFQ1RFRDsNCisgICAgZHdfc3BpX2luZm9fcHRyLT5kZnMgPSBTUElfREZTX0RFRkFVTFQ7DQorICAgIGR3X3NwaV9pbmZvX3B0ci0+ZHVtbXkgPSAweGZmOw0KKw0KKyAgICAvKiBzcGkgY3RybCBpbml0ICovDQorICAgIC8qIFZhcmlhYmxlcyB3aGljaCBzaG91bGQgYmUgc2V0IGR1cmluZyBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgZHdfc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyA9IGR3X3NwaV9yZWdfcHRyOw0KKyAgICBkd19zcGlfY3RybF9wdHItPmludG5vID0gRFdfU1BJXzFfSU5UTk87DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+c3VwcG9ydF9tb2RlcyA9IERXX1NQSV8xX1NVUFBPUlRFRF9NT0RFOw0KKyAgICBkd19zcGlfY3RybF9wdHItPnR4X2ZpZm9fbGVuID0gRFdfU1BJXzFfVFhfRklGT19MRU47DQorICAgIGR3X3NwaV9jdHJsX3B0ci0+cnhfZmlmb19sZW4gPSBEV19TUElfMV9UWF9GSUZPX0xFTjsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT5kd19hcGJfYnVzX2ZyZXEgPSBDTEtfQlVTX0FQQjsNCisgICAgZHdfc3BpX2N0cmxfcHRyLT5kd19zcGlfaW50X2hhbmRsZXIgPSBkd19zcGlfMV9pc3I7DQorICAgIC8qIFZhcmlhYmxlcyB3aGljaCBhbHdheXMgY2hhbmdlIGR1cmluZyBzcGkgb3BlcmF0aW9uICovDQorICAgIGR3X3NwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyA9IDA7DQorDQorICAgIC8qKiBzcGkgZGV2IGluaXQgKi8NCisgICAgZHdfc3BpX3B0ci0+c3BpX29wZW4gPSBkd19zcGlfMV9vcGVuOw0KKyAgICBkd19zcGlfcHRyLT5zcGlfY2xvc2UgPSBkd19zcGlfMV9jbG9zZTsNCisgICAgZHdfc3BpX3B0ci0+c3BpX2NvbnRyb2wgPSBkd19zcGlfMV9jb250cm9sOw0KKyAgICBkd19zcGlfcHRyLT5zcGlfd3JpdGUgPSBkd19zcGlfMV93cml0ZTsNCisgICAgZHdfc3BpX3B0ci0+c3BpX3JlYWQgPSBkd19zcGlfMV9yZWFkOw0KK30NCisjZW5kaWYgLyogVVNFX0RXX1NQSV8xICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqIGdldCBvbmUgZGVzaWdud2FyZSBkZXZpY2Ugc3RydWN0dXJlICovDQorREVWX1NQSV9QVFIgc3BpX2dldF9kZXYoaW50MzJfdCBzcGlfaWQpDQorew0KKyAgICBzdGF0aWMgdWludDMyX3QgaW5zdGFsbF9mbGFnID0gMDsNCisNCisgICAgLyogaW5zdGFsbCBkZXZpY2Ugb2JqZWN0cyAqLw0KKyAgICBpZiAoaW5zdGFsbF9mbGFnID09IDApDQorICAgIHsNCisgICAgICAgIGluc3RhbGxfZmxhZyA9IDE7DQorICAgICAgICBkd19zcGlfYWxsX2luc3RhbGwoKTsNCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKHNwaV9pZCkNCisgICAgew0KKyNpZiAoVVNFX0RXX1NQSV8wKQ0KKw0KKyAgICBjYXNlIERXX1NQSV8wX0lEOg0KKyAgICAgICAgcmV0dXJuICZkd19zcGlfMDsNCisgICAgICAgIGJyZWFrOw0KKyNlbmRpZg0KKyNpZiAoVVNFX0RXX1NQSV8xKQ0KKw0KKyAgICBjYXNlIERXX1NQSV8xX0lEOg0KKyAgICAgICAgcmV0dXJuICZkd19zcGlfMTsNCisgICAgICAgIGJyZWFrOw0KKyNlbmRpZg0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGluc3RhbGwgYWxsIHNwaSBvYmplY3RzDQorICogXG5vdGUgICAgXGIgTVVTVCBiZSBjYWxsZWQgZHVyaW5nIHN5c3RlbSBpbml0DQorICovDQordm9pZCBkd19zcGlfYWxsX2luc3RhbGwodm9pZCkNCit7DQorI2lmIChVU0VfRFdfU1BJXzApDQorICAgIGR3X3NwaV8wX2luc3RhbGwoKTsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19TUElfMSkNCisgICAgZHdfc3BpXzFfaW5zdGFsbCgpOw0KKyNlbmRpZg0KK30NCisNCisvKiogQH0gZW5kIG9mIGdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX1NQSV9PQkogKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGkvZHdfc3BpX29iai5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpL2R3X3NwaV9vYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzYzYzQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpL2R3X3NwaV9vYmouaApAQCAtMCwwICsxLDgyIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE0LTA3LTAzDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfU1BJX09CSg0KKyAqIFxicmllZiAgIGhlYWRlciBmaWxlIG9mIGRlc2lnbndhcmUgc3BpIG9iamVjdCBpbnN0YW50aWF0aW9uIG9uIGVtc2sNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfRFdfU1BJX09CSg0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRFdfU1BJX09CSl9IXw0KKyNkZWZpbmUgX0RXX1NQSV9PQkpfSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9zcGkuaCINCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFNQSSBPYmplY3QgTnVtYmVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1NQSV9OVU0gICAgICAoMikgLyohPCBEZXNpZ25XYXJlIFNQSSB2YWxpZCBudW1iZXIgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ253YXJlIFNQSSBPYmplY3QgSUQgTWFjcm9zDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1NQSV8wX0lEICAgICAwICAgLyohPCBTUEkgMCBpZCBtYWNybyAobWFzdGVyIG5vZGUpICovDQorI2RlZmluZSBEV19TUElfMV9JRCAgICAgMSAgIC8qITwgU1BJIDEgaWQgbWFjcm8gKHNsYXZlIG5vZGUpICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWdud2FyZSBTUEkgT2JqZWN0IENvbnRyb2wgTWFjcm9zDQorICogQHsNCisgKi8NCisjZGVmaW5lIFVTRV9EV19TUElfMCAgICAgICAgMSAgIC8qITwgZW5hYmxlIHVzZSBkZXNpZ253YXJlIFNQSSAwICovDQorI2RlZmluZSBVU0VfRFdfU1BJXzEgICAgICAgIDEgICAvKiE8IGVuYWJsZSB1c2UgZGVzaWdud2FyZSBTUEkgMSAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2lkIGR3X3NwaV9hbGxfaW5zdGFsbCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9EV19TUElfT0JKX0hfICovDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9EV19TUElfT0JKICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpZmxhc2gvc3BpZmxhc2guYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1ZjE3YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3NwaWZsYXNoL3NwaWZsYXNoLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDctMTcNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIEJPQVJEX0VNU0tfRFJWX1NQSUZMQVNIIEVNU0sgU1BJIEZsYXNoIERyaXZlcg0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJJVkVSDQorICogXGJyaWVmICAgRU1TSyBPbi1ib2FyZCBTUEkgRmxhc2ggRHJpdmVyDQorICogXGRldGFpbHMNCisgKiAgICAgIFJlYWxpemUgZHJpdmVyIGZvciBvbi1ib2FyZCBXMjVRMTI4QlYgc3BpIGZsYXNoIHVzaW5nIERlc2lnbndhcmUgc3BpIGRyaXZlci4NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX1NQSUZMQVNIDQorICogXGJyaWVmICAgZW1zayBvbi1ib2FyZCBXMjVRMTI4QlYgc3BpIGZsYXNoIGRyaXZlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9TUElGTEFTSA0KKyAqIEB7DQorICovDQorI2luY2x1ZGUgImJvYXJkL2Vtc2svc3BpZmxhc2gvc3BpZmxhc2guaCINCisNCisjaW5jbHVkZSAiaW5jL2VtYkFSQ19lcnJvci5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL2Vtc2suaCINCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9zcGkuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorLyoqDQorICogXG5hbWUgICAgU1BJIEZsYXNoIENvbW1hbmRzDQorICogQHsNCisgKi8NCisjZGVmaW5lIFJESUQgICAgMHg5RiAgICAvKiE8cmVhZCBjaGlwIElEICovDQorI2RlZmluZSBSRFNSICAgIDB4MDUgICAgLyohPCByZWFkIHN0YXR1cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgV1JTUiAgICAweDAxICAgIC8qITwgd3JpdGUgc3RhdHVzIHJlZ2lzdGVyICovDQorI2RlZmluZSBXUkVOICAgIDB4MDYgICAgLyohPCB3cml0ZSBlbmFibGV3YWl0RGV2aWNlUmVhZHkgKi8NCisjZGVmaW5lIFdSREkgICAgMHgwNCAgICAvKiE8IHdyaXRlIGRpc2FibGUgKi8NCisjZGVmaW5lIFJFQUQgICAgMHgwMyAgICAvKiE8IHJlYWQgZGF0YSBieXRlcyAqLw0KKyNkZWZpbmUgU0UgIDB4MjAgICAgLyohPCBzZWN0b3IgZXJhc2UgKi8NCisjZGVmaW5lIFBQICAweDAyICAgIC8qITwgcGFnZSBwcm9ncmFtICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorI2RlZmluZSBTUElfTElORV9TRkxBU0ggICAgIEJPQVJEX1NGTEFTSF9TUElfTElORQ0KKyNkZWZpbmUgU1BJX0lEX1NGTEFTSCAgICAgICBCT0FSRF9TRkxBU0hfU1BJX0lEDQorDQorI2RlZmluZSBTUElfRkxBU0hfRlJFUSAgICAgIChCT0FSRF9TUElfRlJFUSkNCisjZGVmaW5lIFNQSV9GTEFTSF9DTEtNT0RFICAgKEJPQVJEX1NQSV9DTEtNT0RFKQ0KKw0KKyNkZWZpbmUgU1BJX0ZMQVNIX05PVF9WQUxJRCAoMHhGRkZGRkZGRikNCisNCitzdGF0aWMgREVWX1NQSSAqc3BpX2ZsYXNoOw0KK3N0YXRpYyB1aW50MzJfdCBjc19mbGFzaCA9IFNQSV9MSU5FX1NGTEFTSDsNCisNCisjZGVmaW5lIFNQSUZMQVNIX0NIRUNLX0VYUChFWFBSLCBFUlJPUl9DT0RFKSAgICAgICAgQ0hFQ0tfRVhQKEVYUFIsIGVyY2QsIEVSUk9SX0NPREUsIGVycm9yX2V4aXQpDQorDQorLyoqDQorICogXGJyaWVmICAgc3BpIGZsYXNoIHNwaSBzZW5kIGNvbW1hbmQgdG8gb3BlcmF0ZSBzcGkgZmxhc2gNCisgKiBccGFyYW1baW5dICAgeGZlciAgICBzcGkgdHJhbnNmZXIgdGhhdCBuZWVkIHRvIHRyYW5zZmVyIHRvIHNwaSBkZXZpY2UNCisgKiBccmV0dmFsICAwICAgc3VjY2Vzcw0KKyAqIFxyZXR2YWwgIC0xICBmYWlsDQorICovDQorSW5saW5lIGludDMyX3Qgc3BpX3NlbmRfY21kKERFVl9TUElfVFJBTlNGRVIgKnhmZXIpDQorew0KKyAgICB1aW50MzJfdCBjcHVfc3RhdHVzOw0KKyAgICBpbnQzMl90IGVyY2QgPSAwOw0KKw0KKyAgICBjcHVfc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKw0KKyAgICAvKiBzZWxlY3QgZGV2aWNlICovDQorICAgIGVyY2QgPSBzcGlfZmxhc2gtPnNwaV9jb250cm9sKFNQSV9DTURfTVNUX1NFTF9ERVYsIENPTlYyVk9JRChjc19mbGFzaCkpOw0KKyAgICBTUElGTEFTSF9DSEVDS19FWFAoZXJjZCA9PSBFX09LLCAtMSk7DQorICAgIGVyY2QgPSBzcGlfZmxhc2gtPnNwaV9jb250cm9sKFNQSV9DTURfVFJBTlNGRVJfUE9MTElORywgQ09OVjJWT0lEKHhmZXIpKTsNCisgICAgLyogZGVzZWxlY3QgZGV2aWNlICovDQorICAgIHNwaV9mbGFzaC0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfRFNFTF9ERVYsIENPTlYyVk9JRChjc19mbGFzaCkpOw0KKyAgICBTUElGTEFTSF9DSEVDS19FWFAoZXJjZCA9PSBFX09LLCAtMSk7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShjcHVfc3RhdHVzKTsNCisNCisgICAgaWYgKGVyY2QgPT0gRV9PSykgeyBlcmNkID0gMDsgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBpbml0IHNwaSBmbGFzaCByZWxhdGVkIGludGVyZmFjZQ0KKyAqIFxyZXR2YWwgIDAgICBzdWNjZXNzDQorICogXHJldHZhbCAgLTEgIGZhaWwNCisgKi8NCitpbnQzMl90IGZsYXNoX2luaXQodm9pZCkNCit7DQorICAgIGludDMyX3QgZXJjZCA9IDA7DQorDQorICAgIHNwaV9mbGFzaCA9IHNwaV9nZXRfZGV2KFNQSV9JRF9TRkxBU0gpOw0KKyAgICBlcmNkID0gc3BpX2ZsYXNoLT5zcGlfb3BlbihERVZfTUFTVEVSX01PREUsIFNQSV9GTEFTSF9GUkVRKTsNCisgICAgc3BpX2ZsYXNoLT5zcGlfY29udHJvbChTUElfQ01EX01TVF9TRVRfRlJFUSwgQ09OVjJWT0lEKFNQSV9GTEFTSF9GUkVRKSk7DQorICAgIHNwaV9mbGFzaC0+c3BpX2NvbnRyb2woU1BJX0NNRF9TRVRfRFVNTVlfREFUQSwgQ09OVjJWT0lEKDB4RkYpKTsNCisgICAgc3BpX2ZsYXNoLT5zcGlfY29udHJvbChTUElfQ01EX1NFVF9DTEtfTU9ERSwgQ09OVjJWT0lEKFNQSV9GTEFTSF9DTEtNT0RFKSk7DQorDQorICAgIGlmIChlcmNkID09IEVfT0spIHsgZXJjZCA9IDA7IH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQoraW50MzJfdCBmbGFzaF9jaGFuZ2VfZnJlcSh1aW50MzJfdCBmcmVxKQ0KK3sNCisgICAgc3BpX2ZsYXNoID0gc3BpX2dldF9kZXYoU1BJX0lEX1NGTEFTSCk7DQorICAgIGludDMyX3QgZXJjZCA9IHNwaV9mbGFzaC0+c3BpX2NvbnRyb2woU1BJX0NNRF9NU1RfU0VUX0ZSRVEsIENPTlYyVk9JRChmcmVxKSk7DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICByZWFkIHNwaSBmbGFzaCBpZGVudGlmaWNhdGlvbiBJRA0KKyAqIFxyZXR1cm4gIHRoZSBpZCBvZiB0aGUgc3BpIGZsYXNoDQorICovDQordWludDMyX3QgZmxhc2hfcmVhZF9pZCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgaWQgPSAwOw0KKyAgICB1aW50OF90IGxvY2FsX2J1Zls0XTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBjbWRfeGZlcjsNCisNCisgICAgbG9jYWxfYnVmWzBdID0gUkRJRDsNCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmY21kX3hmZXIsIGxvY2FsX2J1ZiwgMCwgMSk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDEsIDMpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCBOVUxMKTsNCisNCisgICAgaWYgKHNwaV9zZW5kX2NtZCgmY21kX3hmZXIpID09IDApDQorICAgIHsNCisgICAgICAgIGlkID0gKGxvY2FsX2J1ZlswXSA8PCAxNikgfCAobG9jYWxfYnVmWzFdIDw8IDgpIHwgbG9jYWxfYnVmWzJdOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWQgPSBTUElfRkxBU0hfTk9UX1ZBTElEOw0KKyAgICB9DQorDQorICAgIHJldHVybiBpZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgcmVhZCB0aGUgc3RhdHVzIG9mIHNwaSBmbGFzaA0KKyAqIFxyZXR1cm4gIGN1cnJlbnQgc3RhdHVzIG9mIHNwaSBmbGFzaA0KKyAqLw0KK3VpbnQzMl90IGZsYXNoX3JlYWRfc3RhdHVzKHZvaWQpDQorew0KKw0KKyAgICB1aW50OF90IGxvY2FsX2J1ZlsyXTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBjbWRfeGZlcjsNCisNCisgICAgbG9jYWxfYnVmWzBdID0gUkRTUjsNCisNCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmY21kX3hmZXIsIGxvY2FsX2J1ZiwgMCwgMSk7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDEsIDEpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCBOVUxMKTsNCisNCisgICAgaWYgKHNwaV9zZW5kX2NtZCgmY21kX3hmZXIpID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAodWludDMyX3QpbG9jYWxfYnVmWzBdOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIFNQSV9GTEFTSF9OT1RfVkFMSUQ7DQorICAgIH0NCit9DQorDQorLyoqDQorICogXGJyaWVmICAgcmVhZCBkYXRhIGZyb20gZmxhc2gNCisgKiBccGFyYW1baW5dICAgYWRkcmVzcyAgICAgcmVhZCBzdGFydCBhZGRyZXNzIG9mIHNwaSBmbGFzaA0KKyAqIFxwYXJhbVtpbl0gICBzaXplICAgICAgICByZWFkIHNpemUgb2Ygc3BpIGZsYXNoDQorICogXHBhcmFtW291dF0gIGRhdGEgICAgICAgIGRhdGEgdG8gc3RvcmUgdGhlIHJldHVybiBkYXRhDQorICoNCisgKiBccmV0dmFsICAtMSAgICAgIGZhaWxlZCBpbiByZWFkIG9wZXJhdGlvbg0KKyAqIFxyZXR2YWwgID49MCAgICAgZGF0YSBzaXplIG9mIGRhdGEgcmVhZA0KKyAqLw0KK2ludDMyX3QgZmxhc2hfcmVhZCh1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCBzaXplLCB2b2lkICpkYXRhKQ0KK3sNCisNCisgICAgdWludDhfdCBsb2NhbF9idWZbNF07DQorICAgIERFVl9TUElfVFJBTlNGRVIgY21kX3hmZXI7DQorDQorICAgIGxvY2FsX2J1ZlswXSA9IFJFQUQ7DQorICAgIGxvY2FsX2J1ZlsxXSA9IChhZGRyZXNzID4+IDE2KSAmIDB4ZmY7DQorICAgIGxvY2FsX2J1ZlsyXSA9IChhZGRyZXNzID4+IDgpICYgMHhmZjsNCisgICAgbG9jYWxfYnVmWzNdID0gYWRkcmVzcyAgJiAweGZmOw0KKw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZjbWRfeGZlciwgbG9jYWxfYnVmLCAwLCA0KTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmY21kX3hmZXIsIGRhdGEsIDQsIHNpemUpOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCBOVUxMKTsNCisNCisgICAgaWYgKHNwaV9zZW5kX2NtZCgmY21kX3hmZXIpID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBzaXplOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIFJlYWQgc3RhdHVzIGFuZCB3YWl0IHdoaWxlIGJ1c3kgZmxhZyBpcyBzZXQNCisgKiBccmV0dmFsICAwICAgc3VjY2Vzcw0KKyAqIFxyZXR2YWwgIC0xICBmYWlsDQorICovDQoraW50MzJfdCBmbGFzaF93YWl0X3JlYWR5KHZvaWQpDQorew0KKyAgICB1aW50MzJfdCBzdGF0dXMgPSAweDAxOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBzdGF0dXMgPSBmbGFzaF9yZWFkX3N0YXR1cygpOw0KKw0KKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTUElfRkxBU0hfTk9UX1ZBTElEKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhdHVzICYgMHgwMSk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBlbmFibGUgdG8gd3JpdGUgZmxhc2gNCisgKiBccmV0dmFsICAwICAgc3VjY2Vzcw0KKyAqIFxyZXR2YWwgIC0xICBmYWlsDQorICovDQoraW50MzJfdCBmbGFzaF93cml0ZV9lbmFibGUodm9pZCkNCit7DQorICAgIHVpbnQ4X3QgbG9jYWxfYnVmWzNdOw0KKyAgICBERVZfU1BJX1RSQU5TRkVSIGNtZF94ZmVyOw0KKw0KKyAgICB1aW50MzJfdCBzdGF0dXMgPSAwOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBsb2NhbF9idWZbMF0gPSBXUkVOOw0KKw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmY21kX3hmZXIsIGxvY2FsX2J1ZiwgMCwgMSk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZjbWRfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChzcGlfc2VuZF9jbWQoJmNtZF94ZmVyKSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHN0YXR1cyA9IGZsYXNoX3JlYWRfc3RhdHVzKCk7DQorDQorICAgICAgICBpZiAoc3RhdHVzID09IFNQSV9GTEFTSF9OT1RfVkFMSUQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gY2xlYXIgcHJvdGVjdGlvbiBiaXRzDQorICAgICAgICAvLyAgV3JpdGUgUHJvdGVjdC4gYW5kIFdyaXRlIEVuYWJsZS4NCisgICAgICAgIGlmICgoc3RhdHVzICYgMHhmYykgJiYgKHN0YXR1cyAmIDB4MDIpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGxvY2FsX2J1ZlswXSA9IFdSU1I7IC8vIHdyaXRlIHN0YXR1cw0KKyAgICAgICAgICAgIGxvY2FsX2J1ZlsxXSA9IDB4MDA7IC8vIHdyaXRlIHN0YXR1cw0KKyAgICAgICAgICAgIGxvY2FsX2J1ZlsyXSA9IDB4MDA7IC8vIHdyaXRlIHN0YXR1cw0KKw0KKyAgICAgICAgICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoJmNtZF94ZmVyLCBsb2NhbF9idWYsIDAsIDMpOw0KKyAgICAgICAgICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJmNtZF94ZmVyLCBOVUxMLCAwLCAwKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCBOVUxMKTsNCisNCisgICAgICAgICAgICBpZiAoc3BpX3NlbmRfY21kKCZjbWRfeGZlcikgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgc3RhdHVzID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICB3aGlsZSAoc3RhdHVzICE9IDB4MDIpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorDQorLyoqDQorICogXGJyaWVmICAgZmxhc2ggZXJhc2UgaW4gc2VjdG9ycw0KKyAqDQorICogXHBhcmFtW2luXSAgIGFkZHJlc3MgICAgIGVyYXNlIHN0YXJ0IGFkZHJlc3Mgb2Ygc3BpIGZsYXNoDQorICogXHBhcmFtW2luXSAgIHNpemUgICAgICAgIGVyYXNlIHNpemUNCisgKg0KKyAqIFxyZXR2YWwgIC0xICAgICAgZmFpbGVkIGluIGVyYXNlIG9wZXJhdGlvbg0KKyAqIFxyZXR2YWwgID49MCAgICAgc2VjdG9yIGNvdW50IGVyYXNlZA0KKyAqLw0KK2ludDMyX3QgZmxhc2hfZXJhc2UodWludDMyX3QgYWRkcmVzcywgdWludDMyX3Qgc2l6ZSkNCit7DQorICAgIHVpbnQzMl90IGxhc3RfYWRkcmVzczsNCisgICAgdWludDMyX3QgY291bnQgPSAwOw0KKyAgICB1aW50OF90IGxvY2FsX2J1Zls0XTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBjbWRfeGZlcjsNCisNCisgICAgLy8gc3RhcnQgYWRkcmVzcyBvZiBsYXN0IHNlY3Rvcg0KKyAgICBsYXN0X2FkZHJlc3MgPSAoYWRkcmVzcyArIHNpemUpICYgKH4oRkxBU0hfU0VDVE9SX1NJWkUgLSAxKSk7DQorDQorICAgIC8vIHN0YXJ0IGFkZHJlc3Mgb2YgZmlyc3Qgc2VjdG9yDQorICAgIGFkZHJlc3MgJj0gfihGTEFTSF9TRUNUT1JfU0laRSAtIDEpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICBpZiAoZmxhc2hfd3JpdGVfZW5hYmxlKCkgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZmxhc2hfd2FpdF9yZWFkeSgpICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbG9jYWxfYnVmWzBdID0gU0U7DQorICAgICAgICBsb2NhbF9idWZbMV0gPSAoYWRkcmVzcyA+PiAxNikgJiAweGZmOw0KKyAgICAgICAgbG9jYWxfYnVmWzJdID0gKGFkZHJlc3MgPj4gOCkgJiAweGZmOw0KKyAgICAgICAgbG9jYWxfYnVmWzNdID0gIGFkZHJlc3MgJiAweGZmOw0KKw0KKyAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmY21kX3hmZXIsIGxvY2FsX2J1ZiwgMCwgNCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKCZjbWRfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmNtZF94ZmVyLCBOVUxMKTsNCisNCisgICAgICAgIGlmIChzcGlfc2VuZF9jbWQoJmNtZF94ZmVyKSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGFkZHJlc3MgKz0gRkxBU0hfU0VDVE9SX1NJWkU7DQorICAgICAgICBjb3VudCsrOw0KKyAgICB9DQorICAgIHdoaWxlIChhZGRyZXNzIDw9IGxhc3RfYWRkcmVzcyk7DQorDQorICAgIGlmIChmbGFzaF93YWl0X3JlYWR5KCkgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoaW50MzJfdCljb3VudDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgd3JpdGUgZGF0YSB0byBzcGkgZmxhc2gNCisgKg0KKyAqIFxwYXJhbVtpbl0gICBhZGRyZXNzIHN0YXJ0IGFkZHJlc3MNCisgKiBccGFyYW1baW5dICAgc2l6ZSAgICBkYXRhIHNpemUNCisgKiBccGFyYW1baW5dICAgZGF0YSAgICBwb2ludGVyIHRvIGRhdGENCisgKg0KKyAqIFxyZXR2YWwgID49MCAgICAgd3JpdHRlbiBieXRlcyBudW1iZXINCisgKiBccmV0dmFsICA8MCAgICAgIGVycm9yDQorICovDQoraW50MzJfdCBmbGFzaF93cml0ZSh1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCBzaXplLCBjb25zdCB2b2lkICpkYXRhKQ0KK3sNCisNCisgICAgdWludDhfdCBsb2NhbF9idWZbNF07DQorICAgIERFVl9TUElfVFJBTlNGRVIgY21kX3hmZXI7DQorICAgIERFVl9TUElfVFJBTlNGRVIgZGF0YV94ZmVyOw0KKw0KKyAgICB1aW50MzJfdCBmaXJzdCA9IDA7DQorICAgIHVpbnQzMl90IHNpemVfb3JpZyA9IHNpemU7DQorDQorICAgIGlmIChmbGFzaF93YWl0X3JlYWR5KCkgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGZpcnN0ID0gRkxBU0hfUEFHRV9TSVpFIC0gKGFkZHJlc3MgJiAoRkxBU0hfUEFHRV9TSVpFIC0gMSkpOw0KKw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgICAvLyBzZW5kIHdyaXRlIGVuYWJsZSBjb21tYW5kIHRvIGZsYXNoDQorICAgICAgICBpZiAoZmxhc2hfd3JpdGVfZW5hYmxlKCkgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoZmxhc2hfd2FpdF9yZWFkeSgpICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZmlyc3QgPSBmaXJzdCA8IHNpemUgPyBmaXJzdCA6IHNpemU7DQorDQorICAgICAgICBsb2NhbF9idWZbMF0gPSBQUDsNCisgICAgICAgIGxvY2FsX2J1ZlsxXSA9IChhZGRyZXNzID4+IDE2KSAmIDB4ZmY7DQorICAgICAgICBsb2NhbF9idWZbMl0gPSAoYWRkcmVzcyA+PiA4KSAmIDB4ZmY7DQorICAgICAgICBsb2NhbF9idWZbM10gPSBhZGRyZXNzICAmIDB4ZmY7DQorDQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZkYXRhX3hmZXIsIGRhdGEsIDAsIGZpcnN0KTsNCisgICAgICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJmRhdGFfeGZlciwgTlVMTCwgMCwgMCk7DQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJmRhdGFfeGZlciwgTlVMTCk7DQorDQorICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZjbWRfeGZlciwgbG9jYWxfYnVmLCAwLCA0KTsNCisgICAgICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJmNtZF94ZmVyLCBOVUxMLCAwLCAwKTsNCisgICAgICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmY21kX3hmZXIsICZkYXRhX3hmZXIpOw0KKw0KKyAgICAgICAgaWYgKHNwaV9zZW5kX2NtZCgmY21kX3hmZXIpICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgc2l6ZSAtPSBmaXJzdDsNCisgICAgICAgIGFkZHJlc3MgKz0gZmlyc3Q7DQorICAgICAgICBkYXRhICs9IGZpcnN0Ow0KKyAgICAgICAgZmlyc3QgPSBGTEFTSF9QQUdFX1NJWkU7DQorDQorICAgIH0NCisgICAgd2hpbGUgKHNpemUpOw0KKw0KKyAgICBpZiAoZmxhc2hfd2FpdF9yZWFkeSgpICE9IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKGludDMyX3QpKHNpemVfb3JpZyk7DQorfQ0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfU1BJRkxBU0ggKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay9zcGlmbGFzaC9zcGlmbGFzaC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpZmxhc2gvc3BpZmxhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGM2ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svc3BpZmxhc2gvc3BpZmxhc2guaApAQCAtMCwwICsxLDgzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE0LTA3LTE3DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfU1BJRkxBU0gNCisgKiBcYnJpZWYgICBoZWFkZXIgZmlsZSBvZiBlbXNrIG9uYmFyZCBXMjVRMTI4QlYgc3BpIGZsYXNoIGRyaXZlcg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9TUElGTEFTSA0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRU1TS19TUElGTEFTSF9IXw0KKyNkZWZpbmUgX0VNU0tfU1BJRkxBU0hfSF8NCisNCisjZGVmaW5lIEZMQVNIX1BBR0VfU0laRSAgICAgMHgxMDANCisjZGVmaW5lIEZMQVNIX1NFQ1RPUl9TSVpFICAgMHgxMDAwDQorDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDMyX3QgaGVhZDsgICAgICAvKiE8IDB4Njg2NTYxNjQgPSdoZWFkJyAqLw0KKyAgICB1aW50MzJfdCBjcHVfdHlwZTsgIC8qITwgPSAwIC0gYWxsIGltYWdlcywgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSAqLw0KKyAgICB1aW50MzJfdCBzdGFydDsgICAgIC8qITwgc3RhcnQgYWRkcmVzcyBvZiBhcHBsaWNhdGlvbiBpbWFnZSBpbiBzcGkgZmxhc2ggKi8NCisgICAgdWludDMyX3Qgc2l6ZTsgICAgICAvKiE8IHNpemUgb2YgaW1hZ2UgaW4gYnl0ZXMgKi8NCisgICAgdWludDMyX3QgcmFtYWRkcjsgICAvKiE8IGFkZHJlc3Mgb2YgcmFtIGZvciBsb2FkaW5nIGltYWdlICovDQorICAgIHVpbnQzMl90IHJhbXN0YXJ0OyAgLyohPCBzdGFydCBhZGRyZXNzIG9mIGFwcGxpY2F0aW9uIGluIFJBTSAhISEhICovDQorICAgIHVpbnQzMl90IGNoZWNrc3VtOyAgLyohPCBjaGVja3N1bSBvZiBhbGwgYnl0ZXMgaW4gaW1hZ2UgKi8NCit9IGltYWdlX3Q7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorZXh0ZXJuIHVpbnQzMl90IGZsYXNoX3JlYWRfaWQodm9pZCk7DQorZXh0ZXJuIHVpbnQzMl90IGZsYXNoX3JlYWRfc3RhdHVzKHZvaWQpOw0KK2V4dGVybiBpbnQzMl90IGZsYXNoX3JlYWQodWludDMyX3QgYWRkcmVzcywgdWludDMyX3Qgc2l6ZSwgdm9pZCAqZGF0YSk7DQorZXh0ZXJuIGludDMyX3QgZmxhc2hfd3JpdGVfZW5hYmxlKHZvaWQpOw0KK2V4dGVybiBpbnQzMl90IGZsYXNoX3dhaXRfcmVhZHkodm9pZCk7DQorZXh0ZXJuIGludDMyX3QgZmxhc2hfZXJhc2UodWludDMyX3QgYWRkcmVzcywgdWludDMyX3Qgc2l6ZSk7DQorZXh0ZXJuIGludDMyX3QgZmxhc2hfd3JpdGUodWludDMyX3QgYWRkcmVzcywgdWludDMyX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSk7DQorZXh0ZXJuIGludDMyX3QgZmxhc2hfaW5pdCh2b2lkKTsNCitleHRlcm4gaW50MzJfdCBmbGFzaF9jaGFuZ2VfZnJlcSh1aW50MzJfdCBmcmVxKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9FTVNLX1NQSUZMQVNIX0hfICovDQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBCT0FSRF9FTVNLX0RSVl9TUElGTEFTSCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3VhcnQvZHdfdWFydF9vYmouYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3VhcnQvZHdfdWFydF9vYmouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBhYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2JvYXJkL2Vtc2svdWFydC9kd191YXJ0X29iai5jCkBAIC0wLDAgKzEsMjc0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTAzDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBCT0FSRF9FTVNLX0RSVl9EV19VQVJUX09CSiAgRU1TSyBEVyBVQVJUIE9iamVjdA0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJJVkVSDQorICogXGJyaWVmICAgRU1TSyBEZXNpZ253YXJlIFVBUlQgT2JqZWN0cw0KKyAqIFxkZXRhaWxzDQorICogICAgICBSZWFsaXplIHRoZSBFTVNLIGJvYXJkIHVhcnQgb2JqZWN0IHVzaW5nIERlc2lnbndhcmUgdWFydCBkZXZpY2UgZHJpdmVyLA0KKyAqICBvbmx5IG5lZWQgdG8gcmVhbGl6ZSBzb21lIERlc2lnbndhcmUgdWFydCBzdHJ1Y3R1cmVzIGNvbWJpbmUgd2l0aCBFTVNLIHVhcnQNCisgKiAgaGFyZHdhcmUgcmVzb3VyY2UuIGp1c3QgbGlrZSBjcHAgY2xhc3MgaW5zdGFudGlhdGlvbi4NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEJPQVJEX0VNU0tfRFJWX0RXX1VBUlRfT0JKDQorICogXGJyaWVmICAgZGVzaWdud2FyZSB1YXJ0IG9iamVjdCBpbnN0YW50aWF0aW9uIG9uIGVtc2sNCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCAgQk9BUkRfRU1TS19EUlZfRFdfVUFSVF9PQkoNCisgKiBAew0KKyAqLw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oIg0KKyNpbmNsdWRlICJib2FyZC9lbXNrL3VhcnQvZHdfdWFydF9vYmouaCINCisNCisjaW5jbHVkZSAiYm9hcmQvZW1zay9lbXNrLmgiDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMDQorI2RlZmluZSBQRVJJUEhFUkFMX0JBU0UgICAgIEFSQ19GRUFUVVJFX0RNUF9QRVJJUEhFUkFMDQorI2Vsc2UNCisjZGVmaW5lIFBFUklQSEVSQUxfQkFTRSAgICAgX2FyY19hdXhfcmVhZChBVVhfRE1QX1BFUklQSEVSQUwpDQorI2VuZGlmDQorDQorI2RlZmluZSBEV19VQVJUX0ZJRk9fTEVOICAgIDMyDQorDQorLyoqDQorICogXG5hbWUgICAgRU1TSyBEZXNpZ25XYXJlIFVBUlQgMCBPYmplY3QgSW5zdGFudGlhdGlvbg0KKyAqIEB7DQorICovDQorI2lmIChVU0VfRFdfVUFSVF8wKQ0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfMF9pc3Iodm9pZCAqcHRyKTsNCisjZGVmaW5lIERXX1VBUlRfMF9SRUxCQVNFICAgKFJFTF9SRUdCQVNFX1VBUlQwKSAvKiE8IGRlc2lnbndhcmUgdWFydCAwIHJlbGF0aXZlIGJhc2VhZGRyICovDQorI2RlZmluZSBEV19VQVJUXzBfSU5UTk8gICAgIChJTlROT19VQVJUMCkgICAgICAgLyohPCBkZXNpZ253YXJlIHVhcnQgMCBpbnRlcnJ1cHQgbnVtYmVyICAqLw0KKw0KK0RFVl9VQVJUICAgICAgICBkd191YXJ0XzA7ICAgICAgICAgIC8qITwgZGVzaWdud2FyZSB1YXJ0IG9iamVjdCAqLw0KK0RXX1VBUlRfQ1RSTCAgICBkd191YXJ0XzBfY3RybCA9ICAgICAgICAgICAgLyohPCBkZXNpZ253YXJlIHVhcnQgMCBjdHJsICovDQorew0KKyAgICAwLCBDTEtfQlVTX0FQQiwgRFdfVUFSVF8wX0lOVE5PLCAoSU5UX0hBTkRMRVIpZHdfdWFydF8wX2lzciwNCisgICAgRFdfVUFSVF9GSUZPX0xFTiwgRFdfVUFSVF9GSUZPX0xFTiwgMA0KK307DQorDQorLyoqIGRlc2lnbndhcmUgdWFydCAwIG9wZW4gKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzBfb3Blbih1aW50MzJfdCBiYXVkKQ0KK3sNCisgICAgcmV0dXJuIGR3X3VhcnRfb3BlbigmZHdfdWFydF8wLCBiYXVkKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAwIGNsb3NlICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF8wX2Nsb3NlKHZvaWQpDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9jbG9zZSgmZHdfdWFydF8wKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAwIGNvbnRyb2wgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzBfY29udHJvbCh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9jb250cm9sKCZkd191YXJ0XzAsIGN0cmxfY21kLCBwYXJhbSk7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMCB3cml0ZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfMF93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfdWFydF93cml0ZSgmZHdfdWFydF8wLCBkYXRhLCBsZW4pOw0KK30NCisvKiogZGVzaWdud2FyZSB1YXJ0IDAgY2xvc2UgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzBfcmVhZCh2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9yZWFkKCZkd191YXJ0XzAsIGRhdGEsIGxlbik7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMCBpbnRlcnJ1cHQgcm91bnRpbmUgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0XzBfaXNyKHZvaWQgKnB0cikNCit7DQorICAgIGR3X3VhcnRfaXNyKCZkd191YXJ0XzAsIHB0cik7DQorfQ0KKy8qKiBpbnN0YWxsIGRlc2lnbndhcmUgdWFydCAwIHRvIHN5c3RlbSAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfMF9pbnN0YWxsKHZvaWQpDQorew0KKyAgICB1aW50MzJfdCB1YXJ0X2Fic19iYXNlID0gMDsNCisgICAgREVWX1VBUlQgKmR3X3VhcnRfcHRyID0gJmR3X3VhcnRfMDsNCisgICAgREVWX1VBUlRfSU5GTyAqZHdfdWFydF9pbmZvX3B0ciA9ICYoZHdfdWFydF8wLnVhcnRfaW5mbyk7DQorICAgIERXX1VBUlRfQ1RSTCAqZHdfdWFydF9jdHJsX3B0ciA9ICZkd191YXJ0XzBfY3RybDsNCisNCisgICAgLyoqDQorICAgICAqIGdldCBhYnNvbHV0ZSBkZXNpZ253YXJlIGJhc2UgYWRkcmVzcw0KKyAgICAgKi8NCisgICAgdWFydF9hYnNfYmFzZSA9ICh1aW50MzJfdClQRVJJUEhFUkFMX0JBU0UgKyBEV19VQVJUXzBfUkVMQkFTRTsNCisgICAgZHdfdWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlID0gdWFydF9hYnNfYmFzZTsNCisNCisgICAgLyoqIHVhcnQgaW5mbyBpbml0ICovDQorICAgIGR3X3VhcnRfaW5mb19wdHItPnVhcnRfY3RybCA9ICh2b2lkICopZHdfdWFydF9jdHJsX3B0cjsNCisgICAgZHdfdWFydF9pbmZvX3B0ci0+b3BuX2NudCA9IDA7DQorICAgIGR3X3VhcnRfaW5mb19wdHItPnN0YXR1cyA9IDA7DQorICAgIGR3X3VhcnRfaW5mb19wdHItPmJhdWRyYXRlID0gVUFSVF9CQVVEUkFURV8xMTUyMDA7ICAvKiBkZWZhdWx0IDExNTIwMGJwcyAqLw0KKw0KKyAgICAvKiogdWFydCBkZXYgaW5pdCAqLw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF9vcGVuID0gZHdfdWFydF8wX29wZW47DQorICAgIGR3X3VhcnRfcHRyLT51YXJ0X2Nsb3NlID0gZHdfdWFydF8wX2Nsb3NlOw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF9jb250cm9sID0gZHdfdWFydF8wX2NvbnRyb2w7DQorICAgIGR3X3VhcnRfcHRyLT51YXJ0X3dyaXRlID0gZHdfdWFydF8wX3dyaXRlOw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF9yZWFkID0gZHdfdWFydF8wX3JlYWQ7DQorDQorfQ0KKyNlbmRpZiAvKiBVU0VfRFdfVUFSVF8wICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRU1TSyBEZXNpZ25XYXJlIFVBUlQgMSBPYmplY3QgSW5zdGFudGlhdGlvbg0KKyAqIEB7DQorICovDQorI2lmIChVU0VfRFdfVUFSVF8xKQ0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfMV9pc3Iodm9pZCAqcHRyKTsNCisjZGVmaW5lIERXX1VBUlRfMV9SRUxCQVNFICAgKFJFTF9SRUdCQVNFX1VBUlQxKSAvKiE8IGRlc2lnbndhcmUgdWFydCAxIHJlbGF0aXZlIGJhc2VhZGRyICovDQorI2RlZmluZSBEV19VQVJUXzFfSU5UTk8gICAgIChJTlROT19VQVJUMSkgICAgICAgLyohPCBkZXNpZ253YXJlIHVhcnQgMSBpbnRlcnJ1cHQgbnVtYmVyICAqLw0KKw0KK0RFVl9VQVJUICAgICAgICBkd191YXJ0XzE7ICAgICAgICAgIC8qITwgZGVzaWdud2FyZSB1YXJ0IDEgb2JqZWN0ICovDQorRFdfVUFSVF9DVFJMICAgIGR3X3VhcnRfMV9jdHJsID0gICAgICAgICAgICAvKiE8IGRlc2lnbndhcmUgdWFydCAxIGN0cmwgKi8NCit7DQorICAgIDAsIENMS19CVVNfQVBCLCBEV19VQVJUXzFfSU5UTk8sIChJTlRfSEFORExFUilkd191YXJ0XzFfaXNyLA0KKyAgICBEV19VQVJUX0ZJRk9fTEVOLCBEV19VQVJUX0ZJRk9fTEVOLCAwDQorfTsNCisNCisvKiogZGVzaWdud2FyZSB1YXJ0IDEgb3BlbiAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfMV9vcGVuKHVpbnQzMl90IGJhdWQpDQorew0KKyAgICByZXR1cm4gZHdfdWFydF9vcGVuKCZkd191YXJ0XzEsIGJhdWQpOw0KK30NCisvKiogZGVzaWdud2FyZSB1YXJ0IDEgY2xvc2UgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0XzFfY2xvc2Uodm9pZCkNCit7DQorICAgIHJldHVybiBkd191YXJ0X2Nsb3NlKCZkd191YXJ0XzEpOw0KK30NCisvKiogZGVzaWdud2FyZSB1YXJ0IDEgY29udHJvbCAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfMV9jb250cm9sKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIHJldHVybiBkd191YXJ0X2NvbnRyb2woJmR3X3VhcnRfMSwgY3RybF9jbWQsIHBhcmFtKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAxIHdyaXRlICovDQorc3RhdGljIGludDMyX3QgZHdfdWFydF8xX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIHJldHVybiBkd191YXJ0X3dyaXRlKCZkd191YXJ0XzEsIGRhdGEsIGxlbik7DQorfQ0KKy8qKiBkZXNpZ253YXJlIHVhcnQgMSBjbG9zZSAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfMV9yZWFkKHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIHJldHVybiBkd191YXJ0X3JlYWQoJmR3X3VhcnRfMSwgZGF0YSwgbGVuKTsNCit9DQorLyoqIGRlc2lnbndhcmUgdWFydCAxIGludGVycnVwdCByb3V0aW5lICovDQorc3RhdGljIHZvaWQgZHdfdWFydF8xX2lzcih2b2lkICpwdHIpDQorew0KKyAgICBkd191YXJ0X2lzcigmZHdfdWFydF8xLCBwdHIpOw0KK30NCisvKiogaW5zdGFsbCBkZXNpZ253YXJlIHVhcnQgMSB0byBzeXN0ZW0gKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0XzFfaW5zdGFsbCh2b2lkKQ0KK3sNCisgICAgdWludDMyX3QgdWFydF9hYnNfYmFzZSA9IDA7DQorICAgIERFVl9VQVJUICpkd191YXJ0X3B0ciA9ICZkd191YXJ0XzE7DQorICAgIERFVl9VQVJUX0lORk8gKmR3X3VhcnRfaW5mb19wdHIgPSAmKGR3X3VhcnRfMS51YXJ0X2luZm8pOw0KKyAgICBEV19VQVJUX0NUUkwgKmR3X3VhcnRfY3RybF9wdHIgPSAmZHdfdWFydF8xX2N0cmw7DQorDQorICAgIC8qKg0KKyAgICAgKiBnZXQgYWJzb2x1dGUgZGVzaWdud2FyZSBiYXNlIGFkZHJlc3MNCisgICAgICovDQorICAgIHVhcnRfYWJzX2Jhc2UgPSAodWludDMyX3QpUEVSSVBIRVJBTF9CQVNFICsgRFdfVUFSVF8xX1JFTEJBU0U7DQorICAgIGR3X3VhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSA9IHVhcnRfYWJzX2Jhc2U7DQorDQorICAgIC8qKiB1YXJ0IGluZm8gaW5pdCAqLw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwgPSAodm9pZCAqKWR3X3VhcnRfY3RybF9wdHI7DQorICAgIGR3X3VhcnRfaW5mb19wdHItPm9wbl9jbnQgPSAwOw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT5zdGF0dXMgPSAwOw0KKyAgICBkd191YXJ0X2luZm9fcHRyLT5iYXVkcmF0ZSA9IFVBUlRfQkFVRFJBVEVfMTE1MjAwOyAgLyogZGVmYXVsdCAxMTUyMDBicHMgKi8NCisNCisgICAgLyoqIHVhcnQgZGV2IGluaXQgKi8NCisgICAgZHdfdWFydF9wdHItPnVhcnRfb3BlbiA9IGR3X3VhcnRfMV9vcGVuOw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF9jbG9zZSA9IGR3X3VhcnRfMV9jbG9zZTsNCisgICAgZHdfdWFydF9wdHItPnVhcnRfY29udHJvbCA9IGR3X3VhcnRfMV9jb250cm9sOw0KKyAgICBkd191YXJ0X3B0ci0+dWFydF93cml0ZSA9IGR3X3VhcnRfMV93cml0ZTsNCisgICAgZHdfdWFydF9wdHItPnVhcnRfcmVhZCA9IGR3X3VhcnRfMV9yZWFkOw0KK30NCisjZW5kaWYgLyogVVNFX0RXX1VBUlRfMSAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKiBnZXQgb25lIGRlc2lnbndhcmUgZGV2aWNlIHN0cnVjdHVyZSAqLw0KK0RFVl9VQVJUX1BUUiB1YXJ0X2dldF9kZXYoaW50MzJfdCB1YXJ0X2lkKQ0KK3sNCisgICAgc3RhdGljIHVpbnQzMl90IGluc3RhbGxfZmxhZyA9IDA7DQorDQorICAgIC8qIGludGFsbCBkZXZpY2Ugb2JqZWN0cyAqLw0KKyAgICBpZiAoaW5zdGFsbF9mbGFnID09IDApDQorICAgIHsNCisgICAgICAgIGluc3RhbGxfZmxhZyA9IDE7DQorICAgICAgICBkd191YXJ0X2FsbF9pbnN0YWxsKCk7DQorICAgIH0NCisNCisgICAgc3dpdGNoICh1YXJ0X2lkKQ0KKyAgICB7DQorI2lmIChVU0VfRFdfVUFSVF8wKQ0KKw0KKyAgICBjYXNlIERXX1VBUlRfMF9JRDoNCisgICAgICAgIHJldHVybiAmZHdfdWFydF8wOw0KKyAgICAgICAgYnJlYWs7DQorI2VuZGlmDQorI2lmIChVU0VfRFdfVUFSVF8xKQ0KKw0KKyAgICBjYXNlIERXX1VBUlRfMV9JRDoNCisgICAgICAgIHJldHVybiAmZHdfdWFydF8xOw0KKyAgICAgICAgYnJlYWs7DQorI2VuZGlmDQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgaW5zdGFsbCBhbGwgdWFydCBvYmplY3RzDQorICogXG5vdGUgICAgXGIgTVVTVCBiZSBjYWxsZWQgZHVyaW5nIHN5c3RlbSBpbml0DQorICovDQordm9pZCBkd191YXJ0X2FsbF9pbnN0YWxsKHZvaWQpDQorew0KKyNpZiAoVVNFX0RXX1VBUlRfMCkNCisgICAgZHdfdWFydF8wX2luc3RhbGwoKTsNCisjZW5kaWYNCisjaWYgKFVTRV9EV19VQVJUXzEpDQorICAgIGR3X3VhcnRfMV9pbnN0YWxsKCk7DQorI2VuZGlmDQorfQ0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfVUFSVF9PQkogKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvYm9hcmQvZW1zay91YXJ0L2R3X3VhcnRfb2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1M2Y5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9ib2FyZC9lbXNrL3VhcnQvZHdfdWFydF9vYmouaApAQCAtMCwwICsxLDg5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTAzDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQk9BUkRfRU1TS19EUlZfRFdfVUFSVF9PQkoNCisgKiBcYnJpZWYgICBoZWFkZXIgZmlsZSBvZiBkZXNpZ253YXJlIHVhcnQgb2JqZWN0IGluc3RhbnRpYXRpb24gb24gZW1zaw0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBCT0FSRF9FTVNLX0RSVl9EV19VQVJUX09CSg0KKyAqIEB7DQorICovDQorI2lmbmRlZiBfRFdfVUFSVF9PQkpfSF8NCisjZGVmaW5lIF9EV19VQVJUX09CSl9IXw0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3VhcnQuaCINCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgT2JqZWN0IE51bWJlcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19VQVJUX05VTSAoMikgLyohPCBEZXNpZ25XYXJlIFVBUlQgdmFsaWQgbnVtYmVyICovDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWdud2FyZSBVQVJUIE9iamVjdCBJRCBNYWNyb3MNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRFdfVUFSVF8wX0lEICAgIDAgICAvKiE8IHVhcnQgMCBpZCBtYWNybyAqLw0KKyNkZWZpbmUgRFdfVUFSVF8xX0lEICAgIDEgICAvKiE8IHVhcnQgMSBpZCBtYWNybyAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbndhcmUgVUFSVCBPYmplY3QgQ29udHJvbCBNYWNyb3MNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgVVNFX0RXX1VBUlRfMCAgIDEgICAgICAgLyohPCBlbmFibGUgdXNlIGRlc2lnbndhcmUgdWFydCAwICovDQorI2RlZmluZSBVU0VfRFdfVUFSVF8xICAgMSAgICAgICAvKiE8IGVuYWJsZSB1c2UgZGVzaWdud2FyZSB1YXJ0IDEgKi8NCisvKiogQH0gZW5kIG9mIG5hbWUgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ253YXJlIFVBUlQgUmluZ2J1ZmZlciBTaXplIENvbnRyb2wgTWFjcm9zDQorICogQHsNCisgKi8NCisjZGVmaW5lIE1BWF9TTkRCVUZfU0laRSAyNTYgLyohPCBtYXggc2l6ZSBvZiB1YXJ0IHNlbmQgYnVmZmVyICovDQorI2RlZmluZSBNQVhfUkNWQlVGX1NJWkUgMTAgIC8qITwgbWF4IHNpemUgb2YgdWFydCByZWN2IGJ1ZmZlciAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiB2b2lkIGR3X3VhcnRfYWxsX2luc3RhbGwodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRFdfVUFSVF9PQkpfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL2NvbnNvbGVfaW8uYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24vY29uc29sZV9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTNlZDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL2NvbnNvbGVfaW8uYwpAQCAtMCwwICsxLDE3MiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0yMw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgY29tbW9uIGlvIGltcGxlbWVudGF0aW9uDQorICovDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfdWFydC5oIg0KKyNpbmNsdWRlICJjb21tb24vY29uc29sZV9pby5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImNvbW1vbi94cHJpbnRmL3hwcmludGYuaCINCisNCisvKiE8IHRvIGluZGljYXRlIHhwcmludGYgc2V0dXAgc3RhdGUoMCBmb3Igbm90IHNldHVwKSAqLw0KK3N0YXRpYyBpbnQgeHByaW50Zl9zZXR1cF9mbGFnID0gMDsNCitzdGF0aWMgREVWX1VBUlQgKmNvbnNvbGVfdWFydDsgICAgICAvKiE8IGNvbnNvbGUgdWFydCBkZXZpY2UgcG9pbnRlciAqLw0KKw0KKy8qKiBwdXQgb25lIGNoYXIgKi8NCitpbnQgY29uc29sZV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgY2hyKQ0KK3sNCisgICAgaWYgKGNvbnNvbGVfdWFydCA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgY29uc29sZV91YXJ0LT51YXJ0X3dyaXRlKChjb25zdCB2b2lkICopKCZjaHIpLCAxKTsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKiBwdXQgc3RyaW5nICovDQoraW50IGNvbnNvbGVfcHV0c3RyKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikNCit7DQorICAgIGlmIChjb25zb2xlX3VhcnQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoaW50KWNvbnNvbGVfdWFydC0+dWFydF93cml0ZSgoY29uc3Qgdm9pZCAqKShzdHIpLCBsZW4pOw0KK30NCisNCisvKiogZ2V0IG9uZSBjaGFyKi8NCitpbnQgY29uc29sZV9nZXRjaGFyKHZvaWQpDQorew0KKyAgICB1bnNpZ25lZCBjaGFyIGRhdGE7DQorDQorICAgIGlmIChjb25zb2xlX3VhcnQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHdoaWxlICghY29uc29sZV91YXJ0LT51YXJ0X3JlYWQoKHZvaWQgKikoJmRhdGEpLCAxKSk7DQorDQorICAgIHJldHVybiAoaW50KWRhdGE7DQorfQ0KKw0KKy8qKiBnZXQgc3RyaW5nICovDQoraW50IGNvbnNvbGVfZ2V0c3RyKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikNCit7DQorICAgIGlmIChjb25zb2xlX3VhcnQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAoaW50KWNvbnNvbGVfdWFydC0+dWFydF9yZWFkKCh2b2lkICopKHN0ciksIGxlbik7DQorfQ0KKw0KKyNpZm5kZWYgRU5BQkxFX0JBTk5FUg0KKyNkZWZpbmUgRU5BQkxFX0JBTk5FUiAgICAgICAxDQorI2VuZGlmDQorDQorI2lmbmRlZiBFTUJBUkNfQkFOTkVSX1RZUEUNCisjZGVmaW5lIEVNQkFSQ19CQU5ORVJfVFlQRSAgMQ0KKyNlbmRpZg0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICplbWJhcmNfYmFubmVyID0NCisjaWYgRU1CQVJDX0JBTk5FUl9UWVBFID09IDENCisgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCVxyXG5cDQorIF9fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gX19fXwkJCVxyXG5cDQorfCAgXyBcXCBfX19fXyAgICAgIF9fX19fIF8gX18gX19fICBfX3wgfCBfXyApIF8gICBfCQlcclxuXA0KK3wgfF8pIC8gXyBcXCBcXCAvXFwgLyAvIF8gXFwgJ19fLyBfIFxcLyBfYCB8ICBfIFxcfCB8IHwgfAlcclxuXA0KK3wgIF9fLyAoXykgXFwgViAgViAvICBfXy8gfCB8ICBfXy8gKF98IHwgfF8pIHwgfF98IHwJCVxyXG5cDQorfF98ICAgXFxfX18vIFxcXy9cXF8vIFxcX19ffF98ICBcXF9fX3xcXF9fLF98X19fXy8gXFxfXywgfAlcclxuXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX18vCQlcclxuXA0KKyAgICAgICAgICAgICAgICAgICAgIF8gICAgICAgXyAgICBfX19fICAgX19fXwkJCVxyXG5cDQorICAgICAgIF9fXyBfIF9fIF9fXyB8IHxfXyAgIC8gXFwgIHwgIF8gXFwgLyBfX198CQlcclxuXA0KKyAgICAgIC8gXyBcXCAnXyBgIF8gXFx8ICdfIFxcIC8gXyBcXCB8IHxfKSB8IHwJCQlcclxuXA0KKyAgICAgfCAgX18vIHwgfCB8IHwgfCB8XykgLyBfX18gXFx8ICBfIDx8IHxfX18JCQlcclxuXA0KKyAgICAgIFxcX19ffF98IHxffCB8X3xfLl9fL18vICAgXFxfXFxffCBcXF9cXFxcX19fX3wJCVxyXG5cDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCVxyXG5cDQorIjsNCisjZWxzZQ0KKyAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXA0KKyAgICAgIF8vXy9fLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLyBfL18vXy8JCVxyXG5cDQorICAgICBfLyAgICBfLyAgIF8vXy8gICBfLyAgICAgIF8vICAgICAgXy8gICBfL18vICAgXy8gIF8vXy8gICBfL18vICAgICBfL18vXy8gXy8gICAgXy8gXy8gICAgXy8JXHJcblwNCisgICAgXy9fL18vICAgXy8gICAgXy8gXy8gICAgICBfLyAgICAgIF8vIF8vXy9fL18vIF8vXy8gICAgIF8vXy9fL18vIF8vICAgIF8vIF8vXy9fLyAgIF8vICAgIF8vCVxyXG5cDQorICAgXy8gICAgICAgXy8gICAgXy8gICBfLyAgXy8gIF8vICBfLyAgIF8vICAgICAgIF8vICAgICAgIF8vICAgICAgIF8vICAgIF8vIF8vICAgIF8vIF8vICAgIF8vCVxyXG5cDQorICBfLyAgICAgICAgIF8vXy8gICAgICAgXy8gICAgICBfLyAgICAgICBfL18vXy8gXy8gICAgICAgICBfL18vXy8gICBfL18vXy8gXy9fL18vICAgICBfL18vXy8JXHJcblwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8vCVxyXG5cDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy9fLwlcclxuXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy8gICAgICAgICAgICBfL18vICAgICAgXy9fL18vICAgICBfL18vXy8JCVxyXG5cDQorICAgICAgICAgICAgICBfL18vICAgICBfL18vXy8gIF8vXy8gICAgIF8vXy9fLyAgICAgIF8vICAgIF8vICAgXy8gICAgXy8gICBfLwkJCVxyXG5cDQorICAgICAgICAgICBfL18vXy9fLyAgIF8vICAgIF8vICAgIF8vICAgXy8gICAgXy8gICAgXy9fL18vXy8gICBfL18vXy8gICAgIF8vCQkJXHJcblwNCisgICAgICAgICAgXy8gICAgICAgICBfLyAgICBfLyAgICBfLyAgIF8vICAgIF8vICAgIF8vICAgIF8vICAgXy8gICAgXy8gICBfLwkJCVxyXG5cDQorICAgICAgICAgICBfL18vXy8gICBfLyAgICBfLyAgICBfLyAgIF8vXy9fLyAgICAgIF8vICAgIF8vICAgXy8gICAgXy8gICAgIF8vXy9fLwkJCVxyXG5cDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblwNCisiOw0KKyNlbmRpZg0KKw0KK3N0YXRpYyB2b2lkIGVtYmFyY19wcmludF9iYW5uZXIodm9pZCkNCit7DQorICAgIHhwcmludGYoIiVzXHJcbiIsIGVtYmFyY19iYW5uZXIpOw0KK30NCisNCisvKiogeHByaW50ZiBuZWVkIGZ1bmN0aW9ucyBhcGkgc2V0dXAgKi8NCit2b2lkIHhwcmludGZfc2V0dXAodm9pZCkNCit7DQorICAgIGlmICh4cHJpbnRmX3NldHVwX2ZsYWcpDQorICAgIHsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBjb25zb2xlX3VhcnQgPSB1YXJ0X2dldF9kZXYoQ09OU09MRV9VQVJUX0lEKTsNCisgICAgY29uc29sZV91YXJ0LT51YXJ0X29wZW4oQk9BUkRfQ09OU09MRV9VQVJUX0JBVUQpOw0KKw0KKyAgICB4ZGV2X2luKGNvbnNvbGVfZ2V0Y2hhcik7DQorICAgIHhkZXZfb3V0KGNvbnNvbGVfcHV0Y2hhcik7DQorDQorI2lmIEVOQUJMRV9CQU5ORVIgPT0gMQ0KKyAgICBlbWJhcmNfcHJpbnRfYmFubmVyKCk7DQorI2VuZGlmDQorDQorICAgIHhwcmludGYoImVtYkFSQyBCdWlsZCBUaW1lOiAlcywgJXNcclxuIiwgX19EQVRFX18sIF9fVElNRV9fKTsNCisjaWYgZGVmaW5lZChfX0dOVV9fKQ0KKyAgICB4cHJpbnRmKCJDb21waWxlciBWZXJzaW9uOiBBUkMgR05VLCAlc1xyXG4iLCBfX1ZFUlNJT05fXyk7DQorI2Vsc2UNCisgICAgeHByaW50ZigiQ29tcGlsZXIgVmVyc2lvbjogTWV0YXdhcmUsICVzXHJcbiIsIF9fVkVSU0lPTl9fKTsNCisjZW5kaWYNCisNCisgICAgeHByaW50Zl9zZXR1cF9mbGFnID0gMTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi9jb25zb2xlX2lvLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL2NvbnNvbGVfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjAzNzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi9jb25zb2xlX2lvLmgKQEAgLTAsMCArMSw1OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0yMw0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgY29tbW9uIGlvIGltcGxlbWVudGF0aW9uDQorICovDQorI2lmbmRlZiBfQ09OU09MRV9JT19IXw0KKyNkZWZpbmUgX0NPTlNPTEVfSU9fSF8NCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiYm9hcmQvYm9hcmQuaCINCisNCisjZGVmaW5lIENPTlNPTEVfVUFSVF9JRCAgICAgQk9BUkRfQ09OU09MRV9VQVJUX0lEICAgLyohPCBjb25zb2xlIHVhcnQgaWQgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitleHRlcm4gaW50IGNvbnNvbGVfcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGNocik7DQorZXh0ZXJuIGludCBjb25zb2xlX3B1dHN0cihjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pOw0KK2V4dGVybiBpbnQgY29uc29sZV9nZXRjaGFyKHZvaWQpOw0KK2V4dGVybiBpbnQgY29uc29sZV9nZXRzdHIoY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuKTsNCitleHRlcm4gdm9pZCB4cHJpbnRmX3NldHVwKHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0NPTlNPTEVfSU9fSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvY29tbW9uL3hwcmludGYveHByaW50Zi5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi94cHJpbnRmL3hwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTljYmFjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi94cHJpbnRmL3hwcmludGYuYwpAQCAtMCwwICsxLDUxMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vDQorLyAgVW5pdmVyc2FsIHN0cmluZyBoYW5kbGVyIGZvciB1c2VyIGNvbnNvbGUgaW50ZXJmYWNlDQorLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vDQorLw0KKy8gIENvcHlyaWdodCAoQykgMjAxMSwgQ2hhTiwgYWxsIHJpZ2h0IHJlc2VydmVkLg0KKy8NCisvICogVGhpcyBzb2Z0d2FyZSBpcyBhIGZyZWUgc29mdHdhcmUgYW5kIHRoZXJlIGlzIE5PIFdBUlJBTlRZLg0KKy8gKiBObyByZXN0cmljdGlvbiBvbiB1c2UuIFlvdSBjYW4gdXNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBpdCBmb3INCisvICAgcGVyc29uYWwsIG5vbi1wcm9maXQgb3IgY29tbWVyY2lhbCBwcm9kdWN0cyBVTkRFUiBZT1VSIFJFU1BPTlNJQklMSVRZLg0KKy8gKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuDQorLw0KKy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiY29tbW9uL3hwcmludGYveHByaW50Zi5oIg0KKw0KKw0KKyNpZiBfVVNFX1hGVU5DX09VVA0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCit2b2lkICgqeGZ1bmNfb3V0KSh1bnNpZ25lZCBjaGFyKTsgICAvKiBQb2ludGVyIHRvIHRoZSBvdXRwdXQgc3RyZWFtICovDQorc3RhdGljIGNoYXIgKm91dHB0cjsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFB1dCBhIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHhwdXRjKGNoYXIgYykNCit7DQorICAgIGlmIChfQ1JfQ1JMRiAmJiBjID09ICdcbicpIHsgeHB1dGMoJ1xyJyk7IH0gICAgIC8qIENSIC0+IENSTEYgKi8NCisNCisgICAgaWYgKG91dHB0cikNCisgICAgew0KKyAgICAgICAgKm91dHB0cisrID0gKHVuc2lnbmVkIGNoYXIpYzsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBpZiAoeGZ1bmNfb3V0KSB7IHhmdW5jX291dCgodW5zaWduZWQgY2hhciljKTsgfQ0KK30NCisNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFB1dCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit2b2lkIHhwdXRzKCAgICAgIC8qIFB1dCBhIHN0cmluZyB0byB0aGUgZGVmYXVsdCBkZXZpY2UgKi8NCisgICAgY29uc3QgY2hhciAqc3RyICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIHN0cmluZyAqLw0KKykNCit7DQorICAgIHdoaWxlICgqc3RyKQ0KKyAgICB7DQorICAgICAgICB4cHV0Yygqc3RyKyspOw0KKyAgICB9DQorfQ0KKw0KKw0KK3ZvaWQgeGZwdXRzKCAgICAgIC8qIFB1dCBhIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIGRldmljZSAqLw0KKyAgICB2b2lkKCpmdW5jKSh1bnNpZ25lZCBjaGFyKSwgLyogUG9pbnRlciB0byB0aGUgb3V0cHV0IGZ1bmN0aW9uICovDQorICAgIGNvbnN0IGNoYXIgKnN0ciAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBzdHJpbmcgKi8NCispDQorew0KKyAgICB2b2lkICgqcGYpKHVuc2lnbmVkIGNoYXIpOw0KKw0KKw0KKyAgICBwZiA9IHhmdW5jX291dDsgICAgIC8qIFNhdmUgY3VycmVudCBvdXRwdXQgZGV2aWNlICovDQorICAgIHhmdW5jX291dCA9IGZ1bmM7ICAgLyogU3dpdGNoIG91dHB1dCB0byBzcGVjaWZpZWQgZGV2aWNlICovDQorDQorICAgIHdoaWxlICgqc3RyKSAgICAgICAgLyogUHV0IHRoZSBzdHJpbmcgKi8NCisgICAgew0KKyAgICAgICAgeHB1dGMoKnN0cisrKTsNCisgICAgfQ0KKw0KKyAgICB4ZnVuY19vdXQgPSBwZjsgICAgIC8qIFJlc3RvcmUgb3V0cHV0IGRldmljZSAqLw0KK30NCisNCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEZvcm1hdHRlZCBzdHJpbmcgb3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgeHByaW50ZigiJWQiLCAxMjM0KTsgICAgICAgICAgICAiMTIzNCINCisgICAgeHByaW50ZigiJTZkLCUzZCUlIiwgLTIwMCwgNSk7ICAiICAtMjAwLCAgNSUiDQorICAgIHhwcmludGYoIiUtNnUiLCAxMDApOyAgICAgICAgICAgIjEwMCAgICINCisgICAgeHByaW50ZigiJWxkIiwgMTIzNDU2NzhMKTsgICAgICAiMTIzNDU2NzgiDQorICAgIHhwcmludGYoIiUwNHgiLCAweEEzKTsgICAgICAgICAgIjAwYTMiDQorICAgIHhwcmludGYoIiUwOExYIiwgMHgxMjNBQkMpOyAgICAgIjAwMTIzQUJDIg0KKyAgICB4cHJpbnRmKCIlMDE2YiIsIDB4NTUwRik7ICAgICAgICIwMTAxMDEwMTAwMDAxMTExIg0KKyAgICB4cHJpbnRmKCIlcyIsICJTdHJpbmciKTsgICAgICAgICJTdHJpbmciDQorICAgIHhwcmludGYoIiUtNHMiLCAiYWJjIik7ICAgICAgICAgImFiYyAiDQorICAgIHhwcmludGYoIiU0cyIsICJhYmMiKTsgICAgICAgICAgIiBhYmMiDQorICAgIHhwcmludGYoIiVjIiwgJ2EnKTsgICAgICAgICAgICAgImEiDQorICAgIHhwcmludGYoIiVmIiwgMTAuMCk7ICAgICAgICAgICAgPHhwcmludGYgbGFja3MgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydD4NCisqLw0KKw0KK3ZvaWQgeHZwcmludGYoDQorICAgIGNvbnN0IGNoYXIgKmZtdCwgICAgLyogUG9pbnRlciB0byB0aGUgZm9ybWF0IHN0cmluZyAqLw0KKyAgICB2YV9saXN0IGFycCAgICAgICAgIC8qIFBvaW50ZXIgdG8gYXJndW1lbnRzICovDQorKQ0KK3sNCisgICAgdW5zaWduZWQgaW50IHIsIGksIGosIHcsIGY7DQorICAgIHVuc2lnbmVkIGxvbmcgdjsNCisgICAgY2hhciBzWzE2XSwgYywgZCwgKnA7DQorDQorDQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIGMgPSAqZm10Kys7ICAgICAgICAgICAgICAgICAvKiBHZXQgYSBjaGFyICovDQorDQorICAgICAgICBpZiAoIWMpIHsgYnJlYWs7IH0gICAgICAgICAgICAgIC8qIEVuZCBvZiBmb3JtYXQ/ICovDQorDQorICAgICAgICBpZiAoYyAhPSAnJScpICAgICAgICAgICAgICAgLyogUGFzcyB0aHJvdWdoIGl0IGlmIG5vdCBhICUgc2VxdWVuc2UgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICB4cHV0YyhjKTsNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGYgPSAwOw0KKyAgICAgICAgYyA9ICpmbXQrKzsgICAgICAgICAgICAgICAgIC8qIEdldCBmaXJzdCBjaGFyIG9mIHRoZSBzZXF1ZW5zZSAqLw0KKw0KKyAgICAgICAgaWYgKGMgPT0gJzAnKSAgICAgICAgICAgICAgIC8qIEZsYWc6ICcwJyBwYWRkZWQgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBmID0gMTsNCisgICAgICAgICAgICBjID0gKmZtdCsrOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChjID09ICctJykgICAgICAgICAgIC8qIEZsYWc6IGxlZnQganVzdGlmaWVkICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBmID0gMjsNCisgICAgICAgICAgICAgICAgYyA9ICpmbXQrKzsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKHcgPSAwOyBjID49ICcwJyAmJiBjIDw9ICc5JzsgYyA9ICpmbXQrKykgICAvKiBNaW5pbXVtIHdpZHRoICovDQorICAgICAgICB7DQorICAgICAgICAgICAgdyA9IHcgKiAxMCArIGMgLSAnMCc7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoYyA9PSAnbCcgfHwgYyA9PSAnTCcpICAgLyogUHJlZml4OiBTaXplIGlzIGxvbmcgaW50ICovDQorICAgICAgICB7DQorICAgICAgICAgICAgZiB8PSA0Ow0KKyAgICAgICAgICAgIGMgPSAqZm10Kys7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoIWMpIHsgYnJlYWs7IH0gICAgICAgICAgICAgIC8qIEVuZCBvZiBmb3JtYXQ/ICovDQorDQorICAgICAgICBkID0gYzsNCisNCisgICAgICAgIGlmIChkID49ICdhJykgeyBkIC09IDB4MjA7IH0NCisNCisgICAgICAgIHN3aXRjaCAoZCkgICAgICAgICAgICAgICAgICAvKiBUeXBlIGlzLi4uICovDQorICAgICAgICB7DQorICAgICAgICBjYXNlICdTJyA6ICAgICAgICAgICAgICAgICAgLyogU3RyaW5nICovDQorICAgICAgICAgICAgcCA9IHZhX2FyZyhhcnAsIGNoYXIgKik7DQorDQorICAgICAgICAgICAgZm9yIChqID0gMDsgcFtqXTsgaisrKSA7DQorDQorICAgICAgICAgICAgd2hpbGUgKCEoZiAmIDIpICYmIGorKyA8IHcpIHsgeHB1dGMoJyAnKTsgfQ0KKw0KKyAgICAgICAgICAgIHhwdXRzKHApOw0KKw0KKyAgICAgICAgICAgIHdoaWxlIChqKysgPCB3KSB7IHhwdXRjKCcgJyk7IH0NCisNCisgICAgICAgICAgICBjb250aW51ZTsNCisNCisgICAgICAgIGNhc2UgJ0MnIDogICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgKi8NCisgICAgICAgICAgICB4cHV0YygoY2hhcil2YV9hcmcoYXJwLCBpbnQpKTsNCisgICAgICAgICAgICBjb250aW51ZTsNCisNCisgICAgICAgIGNhc2UgJ0InIDogICAgICAgICAgICAgICAgICAvKiBCaW5hcnkgKi8NCisgICAgICAgICAgICByID0gMjsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgJ08nIDogICAgICAgICAgICAgICAgICAvKiBPY3RhbCAqLw0KKyAgICAgICAgICAgIHIgPSA4Ow0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSAnRCcgOiAgICAgICAgICAgICAgICAgIC8qIFNpZ25lZCBkZWNpbWFsICovDQorICAgICAgICBjYXNlICdVJyA6ICAgICAgICAgICAgICAgICAgLyogVW5zaWduZWQgZGVjaW1hbCAqLw0KKyAgICAgICAgICAgIHIgPSAxMDsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgJ1gnIDogICAgICAgICAgICAgICAgICAvKiBIZXhkZWNpbWFsICovDQorICAgICAgICAgICAgciA9IDE2Ow0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIFVua25vd24gdHlwZSAocGFzc3Rocm91Z2gpICovDQorICAgICAgICAgICAgeHB1dGMoYyk7DQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBHZXQgYW4gYXJndW1lbnQgYW5kIHB1dCBpdCBpbiBudW1lcmFsICovDQorICAgICAgICB2ID0gKGYgJiA0KSA/IHZhX2FyZyhhcnAsIGxvbmcpIDogKChkID09ICdEJykgPyAobG9uZyl2YV9hcmcoYXJwLCBpbnQpIDogKGxvbmcpdmFfYXJnKGFycCwgdW5zaWduZWQgaW50KSk7DQorDQorICAgICAgICBpZiAoZCA9PSAnRCcgJiYgKHYgJiAweDgwMDAwMDAwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB2ID0gMCAtIHY7DQorICAgICAgICAgICAgZiB8PSA4Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaSA9IDA7DQorDQorICAgICAgICBkbw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGQgPSAoY2hhcikodiAlIHIpOw0KKyAgICAgICAgICAgIHYgLz0gcjsNCisNCisgICAgICAgICAgICBpZiAoZCA+IDkpIHsgZCArPSAoYyA9PSAneCcpID8gMHgyNyA6IDB4MDc7IH0NCisNCisgICAgICAgICAgICBzW2krK10gPSBkICsgJzAnOw0KKyAgICAgICAgfQ0KKyAgICAgICAgd2hpbGUgKHYgJiYgaSA8IHNpemVvZihzKSk7DQorDQorICAgICAgICBpZiAoKGYgJiA4KSAmJiAoaSA8IHNpemVvZihzKSkpIHsgc1tpKytdID0gJy0nOyB9DQorDQorICAgICAgICBqID0gaTsNCisgICAgICAgIGQgPSAoZiAmIDEpID8gJzAnIDogJyAnOw0KKw0KKyAgICAgICAgd2hpbGUgKCEoZiAmIDIpICYmIGorKyA8IHcpIHsgeHB1dGMoZCk7IH0NCisNCisgICAgICAgIGRvIHsgeHB1dGMoc1stLWldKTsgfQ0KKyAgICAgICAgd2hpbGUgKGkpOw0KKw0KKyAgICAgICAgd2hpbGUgKGorKyA8IHcpIHsgeHB1dGMoJyAnKTsgfQ0KKyAgICB9DQorfQ0KKw0KKw0KK3ZvaWQgeHByaW50ZiggICAgLyogUHV0IGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgZGVmYXVsdCBkZXZpY2UgKi8NCisgICAgY29uc3QgY2hhciAqZm10LCAgICAvKiBQb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nICovDQorICAgIC4uLiAgICAgICAgICAgICAgICAgLyogT3B0aW9uYWwgYXJndW1lbnRzICovDQorKQ0KK3sNCisgICAgdmFfbGlzdCBhcnA7DQorDQorDQorICAgIHZhX3N0YXJ0KGFycCwgZm10KTsNCisgICAgeHZwcmludGYoZm10LCBhcnApOw0KKyAgICB2YV9lbmQoYXJwKTsNCit9DQorDQorDQordm9pZCB4c3ByaW50ZiggICAgLyogUHV0IGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgbWVtb3J5ICovDQorICAgIGNoYXIgKmJ1ZmYsICAgICAgICAgLyogUG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciAqLw0KKyAgICBjb25zdCBjaGFyICpmbXQsICAgIC8qIFBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgKi8NCisgICAgLi4uICAgICAgICAgICAgICAgICAvKiBPcHRpb25hbCBhcmd1bWVudHMgKi8NCispDQorew0KKyAgICB2YV9saXN0IGFycDsNCisNCisNCisgICAgb3V0cHRyID0gYnVmZjsgICAgICAvKiBTd2l0Y2ggZGVzdGluYXRpb24gZm9yIG1lbW9yeSAqLw0KKw0KKyAgICB2YV9zdGFydChhcnAsIGZtdCk7DQorICAgIHh2cHJpbnRmKGZtdCwgYXJwKTsNCisgICAgdmFfZW5kKGFycCk7DQorDQorICAgICpvdXRwdHIgPSAwOyAgICAgICAgLyogVGVybWluYXRlIG91dHB1dCBzdHJpbmcgd2l0aCBhIFwwICovDQorICAgIG91dHB0ciA9IDA7ICAgICAgICAgLyogU3dpdGNoIGRlc3RpbmF0aW9uIGZvciBkZXZpY2UgKi8NCit9DQorDQorDQordm9pZCB4ZnByaW50ZiggICAgICAvKiBQdXQgYSBmb3JtYXR0ZWQgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlICovDQorICAgIHZvaWQoKmZ1bmMpKHVuc2lnbmVkIGNoYXIpLCAvKiBQb2ludGVyIHRvIHRoZSBvdXRwdXQgZnVuY3Rpb24gKi8NCisgICAgY29uc3QgY2hhciAqZm10LCAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgKi8NCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlvbmFsIGFyZ3VtZW50cyAqLw0KKykNCit7DQorICAgIHZhX2xpc3QgYXJwOw0KKyAgICB2b2lkICgqcGYpKHVuc2lnbmVkIGNoYXIpOw0KKw0KKw0KKyAgICBwZiA9IHhmdW5jX291dDsgICAgIC8qIFNhdmUgY3VycmVudCBvdXRwdXQgZGV2aWNlICovDQorICAgIHhmdW5jX291dCA9IGZ1bmM7ICAgLyogU3dpdGNoIG91dHB1dCB0byBzcGVjaWZpZWQgZGV2aWNlICovDQorDQorICAgIHZhX3N0YXJ0KGFycCwgZm10KTsNCisgICAgeHZwcmludGYoZm10LCBhcnApOw0KKyAgICB2YV9lbmQoYXJwKTsNCisNCisgICAgeGZ1bmNfb3V0ID0gcGY7ICAgICAvKiBSZXN0b3JlIG91dHB1dCBkZXZpY2UgKi8NCit9DQorDQorDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBEdW1wIGEgbGluZSBvZiBiaW5hcnkgZHVtcCAgICAgICAgICAgICAgICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQordm9pZCBwdXRfZHVtcCgNCisgICAgY29uc3Qgdm9pZCAqYnVmZiwgICAgICAgLyogUG9pbnRlciB0byB0aGUgYXJyYXkgdG8gYmUgZHVtcGVkICovDQorICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgICAgIC8qIEhlYWRpbmcgYWRkcmVzcyB2YWx1ZSAqLw0KKyAgICBpbnQgbGVuLCAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgaXRlbXMgdG8gYmUgZHVtcGVkICovDQorICAgIGludCB3aWR0aCAgICAgICAgICAgICAgIC8qIFNpemUgb2YgdGhlIGl0ZW1zIChERl9DSEFSLCBERl9TSE9SVCwgREZfTE9ORykgKi8NCispDQorew0KKyAgICBpbnQgaTsNCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnA7DQorICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzcDsNCisgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqbHA7DQorDQorDQorICAgIHhwcmludGYoIiUwOGxYICIsIGFkZHIpOyAgICAgICAgLyogYWRkcmVzcyAqLw0KKw0KKyAgICBzd2l0Y2ggKHdpZHRoKQ0KKyAgICB7DQorICAgIGNhc2UgRFdfQ0hBUjoNCisgICAgICAgIGJwID0gYnVmZjsNCisNCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgICAgICAgLyogSGV4ZGVjaW1hbCBkdW1wICovDQorICAgICAgICB7DQorICAgICAgICAgICAgeHByaW50ZigiICUwMlgiLCBicFtpXSk7DQorICAgICAgICB9DQorDQorICAgICAgICB4cHV0YygnICcpOw0KKw0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAgICAgICAvKiBBU0NJSSBkdW1wICovDQorICAgICAgICB7DQorICAgICAgICAgICAgeHB1dGMoKGJwW2ldID49ICcgJyAmJiBicFtpXSA8PSAnficpID8gYnBbaV0gOiAnLicpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfU0hPUlQ6DQorICAgICAgICBzcCA9IGJ1ZmY7DQorDQorICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhleGRlY2ltYWwgZHVtcCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHhwcmludGYoIiAlMDRYIiwgKnNwKyspOw0KKyAgICAgICAgfQ0KKyAgICAgICAgd2hpbGUgKC0tbGVuKTsNCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX0xPTkc6DQorICAgICAgICBscCA9IGJ1ZmY7DQorDQorICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhleGRlY2ltYWwgZHVtcCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHhwcmludGYoIiAlMDhMWCIsICpscCsrKTsNCisgICAgICAgIH0NCisgICAgICAgIHdoaWxlICgtLWxlbik7DQorDQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICB4cHV0YygnXG4nKTsNCit9DQorDQorI2VuZGlmIC8qIF9VU0VfWEZVTkNfT1VUICovDQorDQorDQorDQorI2lmIF9VU0VfWEZVTkNfSU4NCit1bnNpZ25lZCBjaGFyICgqeGZ1bmNfaW4pKHZvaWQpOyAgICAvKiBQb2ludGVyIHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEdldCBhIGxpbmUgZnJvbSB0aGUgaW5wdXQgICAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCitpbnQgeGdldHMoICAgLyogMDpFbmQgb2Ygc3RyZWFtLCAxOkEgbGluZSBhcnJpdmVkICovDQorICAgIGNoYXIgKmJ1ZmYsIC8qIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciAqLw0KKyAgICBpbnQgbGVuICAgICAvKiBCdWZmZXIgbGVuZ3RoICovDQorKQ0KK3sNCisgICAgaW50IGMsIGk7DQorDQorDQorICAgIGlmICgheGZ1bmNfaW4pIHsgcmV0dXJuIDA7IH0gICAgICAgIC8qIE5vIGlucHV0IGZ1bmN0aW9uIHNwZWNpZmllZCAqLw0KKw0KKyAgICBpID0gMDsNCisNCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgYyA9IHhmdW5jX2luKCk7ICAgICAgICAgICAgIC8qIEdldCBhIGNoYXIgZnJvbSB0aGUgaW5jb21pbmcgc3RyZWFtICovDQorDQorICAgICAgICBpZiAoIWMpIHsgcmV0dXJuIDA7IH0gICAgICAgICAgIC8qIEVuZCBvZiBzdHJlYW0/ICovDQorDQorICAgICAgICBpZiAoYyA9PSAnXHInKSB7IGJyZWFrOyB9ICAgICAgIC8qIEVuZCBvZiBsaW5lPyAqLw0KKw0KKyAgICAgICAgaWYgKGMgPT0gJ1xiJyAmJiBpKSAgICAgICAgIC8qIEJhY2sgc3BhY2U/ICovDQorICAgICAgICB7DQorICAgICAgICAgICAgaS0tOw0KKw0KKyAgICAgICAgICAgIGlmIChfTElORV9FQ0hPKSB7IHhwdXRjKGMpOyB9DQorDQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoYyA+PSAnICcgJiYgaSA8IGxlbiAtIDEpICAgIC8qIFZpc2libGUgY2hhcnMgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBidWZmW2krK10gPSBjOw0KKw0KKyAgICAgICAgICAgIGlmIChfTElORV9FQ0hPKSB7IHhwdXRjKGMpOyB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgYnVmZltpXSA9IDA7ICAgIC8qIFRlcm1pbmF0ZSB3aXRoIGEgXDAgKi8NCisNCisgICAgaWYgKF9MSU5FX0VDSE8pIHsgeHB1dGMoJ1xuJyk7IH0NCisNCisgICAgcmV0dXJuIDE7DQorfQ0KKw0KKw0KK2ludCB4ZmdldHMoICAvKiAwOkVuZCBvZiBzdHJlYW0sIDE6QSBsaW5lIGFycml2ZWQgKi8NCisgICAgdW5zaWduZWQgY2hhciAoKmZ1bmMpKHZvaWQpLCAgICAvKiBQb2ludGVyIHRvIHRoZSBpbnB1dCBzdHJlYW0gZnVuY3Rpb24gKi8NCisgICAgY2hhciAqYnVmZiwgLyogUG9pbnRlciB0byB0aGUgYnVmZmVyICovDQorICAgIGludCBsZW4gICAgIC8qIEJ1ZmZlciBsZW5ndGggKi8NCispDQorew0KKyAgICB1bnNpZ25lZCBjaGFyICgqcGYpKHZvaWQpOw0KKyAgICBpbnQgbjsNCisNCisNCisgICAgcGYgPSB4ZnVuY19pbjsgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IGlucHV0IGRldmljZSAqLw0KKyAgICB4ZnVuY19pbiA9IGZ1bmM7ICAgICAgICAvKiBTd2l0Y2ggaW5wdXQgdG8gc3BlY2lmaWVkIGRldmljZSAqLw0KKyAgICBuID0geGdldHMoYnVmZiwgbGVuKTsgICAvKiBHZXQgYSBsaW5lICovDQorICAgIHhmdW5jX2luID0gcGY7ICAgICAgICAgIC8qIFJlc3RvcmUgaW5wdXQgZGV2aWNlICovDQorDQorICAgIHJldHVybiBuOw0KK30NCisNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEdldCBhIHZhbHVlIG9mIHRoZSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgIjEyMyAtNSAgIDB4M2ZmIDBiMTExMSAwMzc3ICB3ICINCisgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAxc3QgY2FsbCByZXR1cm5zIDEyMyBhbmQgbmV4dCBwdHINCisgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAybmQgY2FsbCByZXR1cm5zIC01IGFuZCBuZXh0IHB0cg0KKyAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIDNyZCBjYWxsIHJldHVybnMgMTAyMyBhbmQgbmV4dCBwdHINCisgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICA0dGggY2FsbCByZXR1cm5zIDE1IGFuZCBuZXh0IHB0cg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgIDV0aCBjYWxsIHJldHVybnMgMjU1IGFuZCBuZXh0IHB0cg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIDZ0aCBjYWxsIGZhaWxzIGFuZCByZXR1cm5zIDANCisqLw0KKw0KK2ludCB4YXRvaSggICAgLyogMDpGYWlsZWQsIDE6U3VjY2Vzc2Z1bCAqLw0KKyAgICBjaGFyICoqc3RyLCAgICAgLyogUG9pbnRlciB0byBwb2ludGVyIHRvIHRoZSBzdHJpbmcgKi8NCisgICAgbG9uZyAqcmVzICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIHZhbGlhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSAqLw0KKykNCit7DQorICAgIHVuc2lnbmVkIGxvbmcgdmFsOw0KKyAgICB1bnNpZ25lZCBjaGFyIGMsIHIsIHMgPSAwOw0KKw0KKw0KKyAgICAqcmVzID0gMDsNCisNCisgICAgd2hpbGUgKChjID0gKipzdHIpID09ICcgJykgeyAoKnN0cikrKzsgfSAgICAvKiBTa2lwIGxlYWRpbmcgc3BhY2VzICovDQorDQorICAgIGlmIChjID09ICctJykgICAgICAgLyogbmVnYXRpdmU/ICovDQorICAgIHsNCisgICAgICAgIHMgPSAxOw0KKyAgICAgICAgYyA9ICooKysoKnN0cikpOw0KKyAgICB9DQorDQorICAgIGlmIChjID09ICcwJykNCisgICAgew0KKyAgICAgICAgYyA9ICooKysoKnN0cikpOw0KKw0KKyAgICAgICAgc3dpdGNoIChjKQ0KKyAgICAgICAgew0KKyAgICAgICAgY2FzZSAneCc6ICAgICAgIC8qIGhleGRlY2ltYWwgKi8NCisgICAgICAgICAgICByID0gMTY7DQorICAgICAgICAgICAgYyA9ICooKysoKnN0cikpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSAnYic6ICAgICAgIC8qIGJpbmFyeSAqLw0KKyAgICAgICAgICAgIHIgPSAyOw0KKyAgICAgICAgICAgIGMgPSAqKCsrKCpzdHIpKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgaWYgKGMgPD0gJyAnKSB7IHJldHVybiAxOyB9IC8qIHNpbmdsZSB6ZXJvICovDQorDQorICAgICAgICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykgeyByZXR1cm4gMDsgfSAgIC8qIGludmFsaWQgY2hhciAqLw0KKw0KKyAgICAgICAgICAgIHIgPSA4OyAgICAgIC8qIG9jdGFsICovDQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKSB7IHJldHVybiAwOyB9ICAgLyogRU9MIG9yIGludmFsaWQgY2hhciAqLw0KKw0KKyAgICAgICAgciA9IDEwOyAgICAgICAgIC8qIGRlY2ltYWwgKi8NCisgICAgfQ0KKw0KKyAgICB2YWwgPSAwOw0KKw0KKyAgICB3aGlsZSAoYyA+ICcgJykNCisgICAgew0KKyAgICAgICAgaWYgKGMgPj0gJ2EnKSB7IGMgLT0gMHgyMDsgfQ0KKw0KKyAgICAgICAgYyAtPSAnMCc7DQorDQorICAgICAgICBpZiAoYyA+PSAxNykNCisgICAgICAgIHsNCisgICAgICAgICAgICBjIC09IDc7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoYyA+PSByKSB7IHJldHVybiAwOyB9ICAgICAgIC8qIGludmFsaWQgY2hhciBmb3IgY3VycmVudCByYWRpeCAqLw0KKw0KKyAgICAgICAgdmFsID0gdmFsICogciArIGM7DQorICAgICAgICBjID0gKigrKygqc3RyKSk7DQorICAgIH0NCisNCisgICAgaWYgKHMpIHsgdmFsID0gMCAtIHZhbDsgfSAgICAgICAgICAgLyogYXBwbHkgc2lnbiBpZiBuZWVkZWQgKi8NCisNCisgICAgKnJlcyA9IHZhbDsNCisgICAgcmV0dXJuIDE7DQorfQ0KKw0KKyNlbmRpZiAvKiBfVVNFX1hGVU5DX0lOICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2NvbW1vbi94cHJpbnRmL3hwcmludGYuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiYzE3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9jb21tb24veHByaW50Zi94cHJpbnRmLmgKQEAgLTAsMCArMSw0OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFVuaXZlcnNhbCBzdHJpbmcgaGFuZGxlciBmb3IgdXNlciBjb25zb2xlIGludGVyZmFjZSAgKEMpQ2hhTiwgMjAxMSAgICAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfU1RSRlVOQw0KKyNkZWZpbmUgX1NUUkZVTkMNCisNCisjaW5jbHVkZSA8c3RkYXJnLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmluZSBfVVNFX1hGVU5DX09VVCAgMSAgIC8qIDE6IFVzZSBvdXRwdXQgZnVuY3Rpb25zICovDQorI2RlZmluZSBfQ1JfQ1JMRiAgICAgICAgMSAgIC8qIDE6IENvbnZlcnQgXG4gPT0+IFxyXG4gaW4gdGhlIG91dHB1dCBjaGFyICovDQorDQorI2RlZmluZSBfVVNFX1hGVU5DX0lOICAgMSAgIC8qIDE6IFVzZSBpbnB1dCBmdW5jdGlvbiAqLw0KKyNkZWZpbmUgX0xJTkVfRUNITyAgICAgIDEgICAvKiAxOiBFY2hvIGJhY2sgaW5wdXQgY2hhcnMgaW4geGdldHMgZnVuY3Rpb24gKi8NCisNCisjaWYgX1VTRV9YRlVOQ19PVVQNCisjZGVmaW5lIHhkZXZfb3V0KGZ1bmMpIHhmdW5jX291dCA9ICh2b2lkKCopKHVuc2lnbmVkIGNoYXIpKShmdW5jKQ0KK2V4dGVybiB2b2lkICgqeGZ1bmNfb3V0KSh1bnNpZ25lZCBjaGFyKTsNCitleHRlcm4gdm9pZCB4cHV0YyhjaGFyIGMpOw0KK2V4dGVybiB2b2lkIHhwdXRzKGNvbnN0IGNoYXIgKnN0cik7DQorZXh0ZXJuIHZvaWQgeGZwdXRzKHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBjaGFyKSwgY29uc3QgY2hhciAqc3RyKTsNCitleHRlcm4gdm9pZCB4dnByaW50Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJwKTsNCitleHRlcm4gdm9pZCB4cHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCitleHRlcm4gdm9pZCB4c3ByaW50ZihjaGFyICpidWZmLCBjb25zdCBjaGFyICpmbXQsIC4uLik7DQorZXh0ZXJuIHZvaWQgeGZwcmludGYodm9pZCAoKmZ1bmMpKHVuc2lnbmVkIGNoYXIpLCBjb25zdCBjaGFyICAqZm10LCAuLi4pOw0KK2V4dGVybiB2b2lkIHB1dF9kdW1wKGNvbnN0IHZvaWQgKmJ1ZmYsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxlbiwgaW50IHdpZHRoKTsNCisjZGVmaW5lIERXX0NIQVIgICAgIHNpemVvZihjaGFyKQ0KKyNkZWZpbmUgRFdfU0hPUlQgICAgc2l6ZW9mKHNob3J0KQ0KKyNkZWZpbmUgRFdfTE9ORyAgICAgc2l6ZW9mKGxvbmcpDQorI2VuZGlmDQorDQorI2lmIF9VU0VfWEZVTkNfSU4NCisjZGVmaW5lIHhkZXZfaW4oZnVuYykgeGZ1bmNfaW4gPSAodW5zaWduZWQgY2hhcigqKSh2b2lkKSkoZnVuYykNCitleHRlcm4gdW5zaWduZWQgY2hhciAoKnhmdW5jX2luKSh2b2lkKTsNCitleHRlcm4gaW50IHhnZXRzKGNoYXIgKmJ1ZmYsIGludCBsZW4pOw0KK2V4dGVybiBpbnQgeGZnZXRzKHVuc2lnbmVkIGNoYXIgKCpmdW5jKSh2b2lkKSwgY2hhciAqYnVmZiwgaW50IGxlbik7DQorZXh0ZXJuIGludCB4YXRvaShjaGFyICoqc3RyLCBsb25nICpyZXMpOw0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3NGM4NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9ncGlvL2R3X2dwaW8uYwpAQCAtMCwwICsxLDUzNCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0yMg0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfR1BJTyAgRGVzaWdud2FyZSBHUElPIERyaXZlcg0KKyAqIFxpbmdyb3VwIERFVklDRV9EVw0KKyAqIFxicmllZiAgIERlc2lnbndhcmUgR1BJTyBEcml2ZXIgSW1wbGVtZW50YXRpb24NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgIGRlc2lnbndhcmUgZ3BpbyBkcml2ZXINCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfR1BJTw0KKyAqIFxicmllZiAgIERlc2lnbndhcmUgR1BJTyBkcml2ZXINCisgKi8NCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiaW5jL2VtYkFSQ19lcnJvci5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvZ3Bpby9kd19ncGlvLmgiDQorDQorLyoqIGNoZWNrIGV4cHJlc3Npb25zIHVzZWQgaW4gRGVzaWduV2FyZSBHUElPIGRyaXZlciBpbXBsZW1lbnRhdGlvbiAqLw0KKyNkZWZpbmUgRFdfR1BJT19DSEVDS19FWFAoRVhQUiwgRVJST1JfQ09ERSkgICAgIENIRUNLX0VYUChFWFBSLCBlcmNkLCBFUlJPUl9DT0RFLCBlcnJvcl9leGl0KQ0KKw0KKyNpZm5kZWYgRElTQUJMRV9ERVZJQ0VfT0JKRUNUX1ZBTElEX0NIRUNLDQorLyoqIHZhbGlkIGNoZWNrIG9mIHVhcnQgaW5mbyBvYmplY3QgKi8NCisjZGVmaW5lIFZBTElEX0NIS19HUElPX0lORk9fT0JKRUNUKGdwaW9pbmZvX29ial9wdHIpICAgICAgICB7ICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIERXX0dQSU9fQ0hFQ0tfRVhQKChncGlvaW5mb19vYmpfcHRyKSE9TlVMTCwgRV9PQkopOyAgICAgICAgIFwNCisgICAgICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgoKGdwaW9pbmZvX29ial9wdHIpLT5ncGlvX2N0cmwpIT1OVUxMLCBFX09CSik7ICAgIFwNCisgICAgICAgIH0NCisjZW5kaWYNCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX0dQSU9fU1RBVElDICAgRGVzaWduV2FyZSBHUElPIERyaXZlciBTdGF0aWMgRnVuY3Rpb25zDQorICogXGluZ3JvdXAgREVWSUNFX0RXX0dQSU8NCisgKiBcYnJpZWYgICBTdGF0aWMgb3IgaW5saW5lIGZ1bmN0aW9ucywgdmFyaWFibGVzIGZvciBEZXNpZ25XYXJlIEdQSU8gaGFuZGxlIGdwaW8gb3BlcmF0aW9ucywNCisgKiAgb25seSB1c2VkIGluIHRoaXMgZmlsZQ0KKyAqIEB7DQorICovDQorSW5saW5lIHVpbnQzMl90IGR3X2dwaW9fcmVhZF9leHQoRFdfR1BJT19QT1JUX1BUUiBwb3J0KQ0KK3sNCisgICAgcmV0dXJuICBwb3J0LT5yZWdzLT5FWFRfUE9SVFNbcG9ydC0+bm9dOw0KK30NCisNCitJbmxpbmUgdWludDMyX3QgZHdfZ3Bpb19yZWFkX2RpcihEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICByZXR1cm4gcG9ydC0+cmVncy0+U1dQT1JUU1twb3J0LT5ub10uRERSOw0KK30NCisNCitJbmxpbmUgdWludDMyX3QgZHdfZ3Bpb19yZWFkX2RyKERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiBwb3J0LT5yZWdzLT5TV1BPUlRTW3BvcnQtPm5vXS5EUjsNCit9DQorDQorSW5saW5lIHVpbnQzMl90IGR3X2dwaW9fcmVhZF9tdGhkKERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiBwb3J0LT5yZWdzLT5JTlRFTjsNCit9DQorDQorSW5saW5lIHZvaWQgZHdfZ3Bpb19pbnRfZW5hYmxlKERXX0dQSU9fUE9SVF9QVFIgcG9ydCwgdWludDMyX3QgYml0X21hc2spDQorew0KKyAgICBwb3J0LT5yZWdzLT5JTlRFTiB8PSBiaXRfbWFzazsNCit9DQorDQorSW5saW5lIHZvaWQgZHdfZ3Bpb19pbnRfZGlzYWJsZShEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrKQ0KK3sNCisgICAgcG9ydC0+cmVncy0+SU5URU4gJj0gKH5iaXRfbWFzayk7DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X2dwaW9faW50X21hc2soRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaykNCit7DQorICAgIHBvcnQtPnJlZ3MtPklOVE1BU0sgfD0gYml0X21hc2s7DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X2dwaW9faW50X3VubWFzayhEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrKQ0KK3sNCisgICAgcG9ydC0+cmVncy0+SU5UTUFTSyAmPSAofmJpdF9tYXNrKTsNCit9DQorDQorSW5saW5lIHVpbnQzMl90IGR3X2dwaW9faW50X3JlYWRfbGV2ZWwoRFdfR1BJT19QT1JUX1BUUiBwb3J0KQ0KK3sNCisgICAgcmV0dXJuIHBvcnQtPnJlZ3MtPklOVFRZUEVfTEVWRUw7DQorfQ0KKw0KK0lubGluZSB1aW50MzJfdCBkd19ncGlvX2ludF9yZWFkX3BvbGFyaXR5KERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiBwb3J0LT5yZWdzLT5JTlRfUE9MQVJJVFk7DQorfQ0KKw0KK0lubGluZSB1aW50MzJfdCBkd19ncGlvX2ludF9yZWFkX2RlYm91bmNlKERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiBwb3J0LT5yZWdzLT5ERUJPVU5DRTsNCit9DQorDQorSW5saW5lIHVpbnQzMl90IGR3X2dwaW9faW50X3JlYWRfc3RhdHVzKERXX0dQSU9fUE9SVF9QVFIgcG9ydCkNCit7DQorICAgIHJldHVybiBwb3J0LT5yZWdzLT5JTlRTVEFUVVM7DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X2dwaW9faW50X2NsZWFyKERXX0dQSU9fUE9SVF9QVFIgcG9ydCwgdWludDMyX3QgYml0X21hc2spDQorew0KKyAgICBwb3J0LT5yZWdzLT5QT1JUQV9FT0kgPSBiaXRfbWFzazsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfZ3Bpb19pbnRfd3JpdGVfbGV2ZWwoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCB1aW50MzJfdCBiaXRfbWFzaywgdWludDMyX3QgYml0X2xldmVsKQ0KK3sNCisgICAgdWludDMyX3QgcmVnX3ZhbDsNCisNCisgICAgcmVnX3ZhbCA9IHBvcnQtPnJlZ3MtPklOVFRZUEVfTEVWRUw7DQorICAgIHJlZ192YWwgJj0gKH5iaXRfbWFzayk7DQorICAgIGJpdF9sZXZlbCAmPSBiaXRfbWFzazsNCisgICAgcmVnX3ZhbCB8PSBiaXRfbGV2ZWw7DQorDQorICAgIHBvcnQtPnJlZ3MtPklOVFRZUEVfTEVWRUwgPSByZWdfdmFsOw0KK30NCisNCitzdGF0aWMgdm9pZCBkd19ncGlvX2ludF93cml0ZV9wb2xhcml0eShEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrLCB1aW50MzJfdCBiaXRfcG9sYXJpdHkpDQorew0KKyAgICB1aW50MzJfdCByZWdfdmFsOw0KKw0KKyAgICByZWdfdmFsID0gcG9ydC0+cmVncy0+SU5UX1BPTEFSSVRZOw0KKw0KKyAgICByZWdfdmFsICY9ICh+Yml0X21hc2spOw0KKyAgICBiaXRfcG9sYXJpdHkgJj0gYml0X21hc2s7DQorICAgIHJlZ192YWwgfD0gYml0X3BvbGFyaXR5Ow0KKw0KKyAgICBwb3J0LT5yZWdzLT5JTlRfUE9MQVJJVFkgPSByZWdfdmFsOw0KK30NCisNCitzdGF0aWMgdm9pZCBkd19ncGlvX2ludF93cml0ZV9kZWJvdW5jZShEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrLCB1aW50MzJfdCBiaXRfZGVib3VuY2UpDQorew0KKyAgICB1aW50MzJfdCByZWdfdmFsOw0KKw0KKyAgICByZWdfdmFsID0gcG9ydC0+cmVncy0+REVCT1VOQ0U7DQorDQorICAgIHJlZ192YWwgJj0gKH5iaXRfbWFzayk7DQorICAgIGJpdF9kZWJvdW5jZSAmPSBiaXRfbWFzazsNCisgICAgcmVnX3ZhbCB8PSBiaXRfZGVib3VuY2U7DQorDQorICAgIHBvcnQtPnJlZ3MtPkRFQk9VTkNFID0gcmVnX3ZhbDsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfZ3Bpb19zZXRfaW50X2NmZyhEV19HUElPX1BPUlRfUFRSIHBvcnQsIERFVl9HUElPX0lOVF9DRkcgKmludF9jZmcpDQorew0KKyAgICBkd19ncGlvX2ludF93cml0ZV9sZXZlbChwb3J0LCBpbnRfY2ZnLT5pbnRfYml0X21hc2ssIGludF9jZmctPmludF9iaXRfdHlwZSk7DQorICAgIGR3X2dwaW9faW50X3dyaXRlX3BvbGFyaXR5KHBvcnQsIGludF9jZmctPmludF9iaXRfbWFzaywgaW50X2NmZy0+aW50X2JpdF9wb2xhcml0eSk7DQorICAgIGR3X2dwaW9faW50X3dyaXRlX2RlYm91bmNlKHBvcnQsIGludF9jZmctPmludF9iaXRfbWFzaywgaW50X2NmZy0+aW50X2JpdF9kZWJvdW5jZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGR3X2dwaW9fZ2V0X2ludF9jZmcoRFdfR1BJT19QT1JUX1BUUiBwb3J0LCBERVZfR1BJT19JTlRfQ0ZHICppbnRfY2ZnKQ0KK3sNCisgICAgaW50X2NmZy0+aW50X2JpdF90eXBlID0gZHdfZ3Bpb19pbnRfcmVhZF9sZXZlbChwb3J0KSAmIGludF9jZmctPmludF9iaXRfbWFzazsNCisgICAgaW50X2NmZy0+aW50X2JpdF9wb2xhcml0eSA9IGR3X2dwaW9faW50X3JlYWRfcG9sYXJpdHkocG9ydCkgJiBpbnRfY2ZnLT5pbnRfYml0X21hc2s7DQorICAgIGludF9jZmctPmludF9iaXRfZGVib3VuY2UgPSBkd19ncGlvX2ludF9yZWFkX2RlYm91bmNlKHBvcnQpICYgaW50X2NmZy0+aW50X2JpdF9tYXNrOw0KK30NCisNCitzdGF0aWMgdm9pZCBkd19ncGlvX3dyaXRlX2RyKERXX0dQSU9fUE9SVF9QVFIgcG9ydCwgdWludDMyX3QgYml0X21hc2ssIHVpbnQzMl90IHZhbCkNCit7DQorICAgIHVpbnQzMl90IHRlbXBfcmVnOw0KKw0KKyAgICB0ZW1wX3JlZyA9IHBvcnQtPnJlZ3MtPlNXUE9SVFNbcG9ydC0+bm9dLkRSOw0KKyAgICB0ZW1wX3JlZyAmPSB+Yml0X21hc2s7DQorICAgIHZhbCAmPSBiaXRfbWFzazsNCisgICAgdGVtcF9yZWcgfD0gdmFsOw0KKw0KKyAgICBwb3J0LT5yZWdzLT5TV1BPUlRTW3BvcnQtPm5vXS5EUiA9IHRlbXBfcmVnOw0KK30NCisNCitzdGF0aWMgdm9pZCBkd19ncGlvX3dyaXRlX2RpcihEV19HUElPX1BPUlRfUFRSIHBvcnQsIHVpbnQzMl90IGJpdF9tYXNrLCB1aW50MzJfdCB2YWwpDQorew0KKyAgICB1aW50MzJfdCB0ZW1wX3JlZzsNCisNCisgICAgdGVtcF9yZWcgPSBwb3J0LT5yZWdzLT5TV1BPUlRTW3BvcnQtPm5vXS5ERFI7DQorICAgIHRlbXBfcmVnICY9IH5iaXRfbWFzazsNCisgICAgdmFsICY9IGJpdF9tYXNrOw0KKyAgICB0ZW1wX3JlZyB8PSB2YWw7DQorDQorICAgIHBvcnQtPnJlZ3MtPlNXUE9SVFNbcG9ydC0+bm9dLkREUiA9IHRlbXBfcmVnOw0KK30NCisNCitzdGF0aWMgdWludDMyX3QgZHdfZ3Bpb19yZWFkX3ZhbChEV19HUElPX1BPUlRfUFRSIHBvcnQpDQorew0KKyAgICB1aW50MzJfdCB2YWw7DQorDQorICAgIHZhbCA9IGR3X2dwaW9fcmVhZF9leHQocG9ydCkgJiAofmR3X2dwaW9fcmVhZF9kaXIocG9ydCkpOw0KKyAgICB2YWwgfD0gZHdfZ3Bpb19yZWFkX2RyKHBvcnQpICYgZHdfZ3Bpb19yZWFkX2Rpcihwb3J0KTsNCisNCisgICAgcmV0dXJuIHZhbDsNCit9DQorDQorLyoqIEB9IGVuZCBvZiBncm91cCBERVZJQ0VfRFdfR1BJT19TVEFUSUMgKi8NCisNCisvKiBpbnRlcmZhY2UgZm9yIERFVl9HUElPICovDQorLyoqIE9wZW4gZGVzaWdud2FyZSBncGlvIGRldmljZSB3aXRoIHNwZWNpZmllZCBpbyBkaXJlY3Rpb24gY29uZmlndXJhdGlvbiAqLw0KK2ludDMyX3QgZHdfZ3Bpb19vcGVuKERFVl9HUElPICpncGlvX29iaiwgdWludDMyX3QgZGlyKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX0dQSU9fSU5GT19QVFIgcG9ydF9pbmZvX3B0ciA9ICYoZ3Bpb19vYmotPmdwaW9faW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19HUElPX0lORk9fT0JKRUNUKHBvcnRfaW5mb19wdHIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfR1BJT19QT1JUX1BUUiBwb3J0ID0gKERXX0dQSU9fUE9SVF9QVFIpKHBvcnRfaW5mb19wdHItPmdwaW9fY3RybCk7DQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnQtPm5vIDw9IERXX0dQSU9fUE9SVF9ELCBFX09CSik7DQorDQorICAgIHBvcnRfaW5mb19wdHItPm9wbl9jbnQgKys7DQorDQorICAgIGlmIChwb3J0X2luZm9fcHRyLT5vcG5fY250ID4gMSkgICAvKiBvcGVuZWQgYmVmb3JlICovDQorICAgIHsNCisgICAgICAgIGlmIChkaXIgPT0gcG9ydF9pbmZvX3B0ci0+ZGlyZWN0aW9uKSAgIC8qIGRpcmVjdGlvbiBpcyB0aGUgc2FtZSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX09LOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSAgICAgLyogb3BlbiB3aXRoIGRpZmZlcmVudCBkaXJlY3Rpb24gKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gRV9PUE5FRDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBkd19ncGlvX3dyaXRlX2Rpcihwb3J0LCBwb3J0LT52YWxpZF9iaXRfbWFzaywgZGlyKTsNCisNCisgICAgaWYgKHBvcnQtPm5vID09IERXX0dQSU9fUE9SVF9BKQ0KKyAgICB7DQorICAgICAgICBkd19ncGlvX2ludF9jbGVhcihwb3J0LCBEV19HUElPX01BU0tfQUxMKTsNCisgICAgICAgIGR3X2dwaW9faW50X2Rpc2FibGUocG9ydCwgRFdfR1BJT19NQVNLX0FMTCk7DQorICAgICAgICBkd19ncGlvX2ludF91bm1hc2socG9ydCwgRFdfR1BJT19NQVNLX0FMTCk7DQorICAgICAgICAvKiBpbnN0YWxsIGdwaW8gaW50ZXJydXB0IGhhbmRsZXIgKi8NCisgICAgICAgIGludF9oYW5kbGVyX2luc3RhbGwocG9ydC0+aW50bm8sIHBvcnQtPmludF9oYW5kbGVyKTsNCisgICAgICAgIGludF9kaXNhYmxlKHBvcnQtPmludG5vKTsNCisgICAgICAgIC8qKiBTZXQgaW50IHR5cGUsIGludCBwb2xhcml0eSBhbmQgZGVib3VuY2UgY29uZmlndXJhdGlvbiB0byBkZWZhdWx0IHNldHRpbmdzIG9mIGRldmljZSBncGlvICovDQorICAgICAgICBkd19ncGlvX3NldF9pbnRfY2ZnKHBvcnQsIChERVZfR1BJT19JTlRfQ0ZHICopKCZncGlvX2ludF9jZmdfZGVmYXVsdCkpOw0KKyAgICAgICAgcG9ydF9pbmZvX3B0ci0+bWV0aG9kID0gZHdfZ3Bpb19yZWFkX210aGQocG9ydCk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBwb3J0X2luZm9fcHRyLT5tZXRob2QgPSBERVZfR1BJT19CSVRTX01USERfREVGQVVMVDsNCisgICAgfQ0KKw0KKyAgICBkd19ncGlvX3dyaXRlX2RyKHBvcnQsIHBvcnQtPnZhbGlkX2JpdF9tYXNrLCAwKTsNCisNCisgICAgcG9ydF9pbmZvX3B0ci0+ZGlyZWN0aW9uID0gZGlyOw0KKyAgICBwb3J0X2luZm9fcHRyLT5leHRyYSA9IE5VTEw7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKiBDbG9zZSBkZXNpZ253YXJlIGdwaW8gZGV2aWNlICovDQoraW50MzJfdCBkd19ncGlvX2Nsb3NlKERFVl9HUElPICpncGlvX29iaikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9HUElPX0lORk9fUFRSIHBvcnRfaW5mb19wdHIgPSAmKGdwaW9fb2JqLT5ncGlvX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfR1BJT19JTkZPX09CSkVDVChwb3J0X2luZm9fcHRyKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX0dQSU9fUE9SVF9QVFIgcG9ydCA9IChEV19HUElPX1BPUlRfUFRSKShwb3J0X2luZm9fcHRyLT5ncGlvX2N0cmwpOw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0LT5ubyA8PSBEV19HUElPX1BPUlRfRCwgRV9PQkopOw0KKw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0X2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9PSyk7DQorDQorICAgIHBvcnRfaW5mb19wdHItPm9wbl9jbnQgLS07DQorDQorICAgIGlmIChwb3J0X2luZm9fcHRyLT5vcG5fY250ID09IDApDQorICAgIHsNCisgICAgICAgIGR3X2dwaW9fd3JpdGVfZHIocG9ydCwgcG9ydC0+dmFsaWRfYml0X21hc2ssIDApOw0KKyAgICAgICAgZHdfZ3Bpb193cml0ZV9kaXIocG9ydCwgcG9ydC0+dmFsaWRfYml0X21hc2ssIDApOw0KKw0KKyAgICAgICAgaWYgKHBvcnQtPm5vID09IERXX0dQSU9fUE9SVF9BKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGR3X2dwaW9faW50X2NsZWFyKHBvcnQsIERXX0dQSU9fTUFTS19BTEwpOw0KKyAgICAgICAgICAgIGR3X2dwaW9faW50X2Rpc2FibGUocG9ydCwgRFdfR1BJT19NQVNLX0FMTCk7DQorICAgICAgICAgICAgaW50X2Rpc2FibGUocG9ydC0+aW50bm8pOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcG9ydF9pbmZvX3B0ci0+ZGlyZWN0aW9uID0gMDsNCisgICAgICAgIHBvcnRfaW5mb19wdHItPm1ldGhvZCA9IDA7DQorICAgICAgICBwb3J0X2luZm9fcHRyLT5leHRyYSA9IE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBlcmNkID0gRV9PUE5FRDsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogUmVhZCBkZXNpZ253YXJlIGdwaW8gZGV2aWNlIHZhbHVlICovDQoraW50MzJfdCBkd19ncGlvX3JlYWQoREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBtYXNrKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX0dQSU9fSU5GT19QVFIgcG9ydF9pbmZvX3B0ciA9ICYoZ3Bpb19vYmotPmdwaW9faW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19HUElPX0lORk9fT0JKRUNUKHBvcnRfaW5mb19wdHIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfR1BJT19QT1JUX1BUUiBwb3J0ID0gKERXX0dQSU9fUE9SVF9QVFIpKHBvcnRfaW5mb19wdHItPmdwaW9fY3RybCk7DQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnQtPm5vIDw9IERXX0dQSU9fUE9SVF9ELCBFX09CSik7DQorICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnRfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX0NMU0VEKTsNCisNCisgICAgRFdfR1BJT19DSEVDS19FWFAodmFsICE9IE5VTEwsIEVfUEFSKTsNCisNCisgICAgLy8qdmFsID0gZHdfZ3Bpb19yZWFkX2V4dChwb3J0KSAmIG1hc2s7DQorICAgICp2YWwgPSBkd19ncGlvX3JlYWRfdmFsKHBvcnQpICYgbWFzazsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqIFdyaXRlIGRlc2lnbndhcmUgZ3BpbyBkZXZpY2UgdmFsdWUgKi8NCitpbnQzMl90IGR3X2dwaW9fd3JpdGUoREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBwb3J0X2luZm9fcHRyID0gJihncGlvX29iai0+Z3Bpb19pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX0dQSU9fSU5GT19PQkpFQ1QocG9ydF9pbmZvX3B0cik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBEV19HUElPX1BPUlRfUFRSIHBvcnQgPSAoRFdfR1BJT19QT1JUX1BUUikocG9ydF9pbmZvX3B0ci0+Z3Bpb19jdHJsKTsNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydC0+bm8gPD0gRFdfR1BJT19QT1JUX0QsIEVfT0JKKTsNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydF9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfQ0xTRUQpOw0KKw0KKyAgICBkd19ncGlvX3dyaXRlX2RyKHBvcnQsIG1hc2ssIHZhbCk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKiBDb250cm9sIGRlc2lnbndhcmUgZ3BpbyBkZXZpY2UgKi8NCitpbnQzMl90IGR3X2dwaW9fY29udHJvbChERVZfR1BJTyAqZ3Bpb19vYmosIHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9HUElPX0lORk9fUFRSIHBvcnRfaW5mb19wdHIgPSAmKGdwaW9fb2JqLT5ncGlvX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfR1BJT19JTkZPX09CSkVDVChwb3J0X2luZm9fcHRyKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX0dQSU9fUE9SVF9QVFIgcG9ydCA9IChEV19HUElPX1BPUlRfUFRSKShwb3J0X2luZm9fcHRyLT5ncGlvX2N0cmwpOw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0LT5ubyA8PSBEV19HUElPX1BPUlRfRCwgRV9PQkopOw0KKyAgICBEV19HUElPX0NIRUNLX0VYUChwb3J0X2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9DTFNFRCk7DQorDQorICAgIHVpbnQzMl90IHZhbDMyOyAvKiogdG8gcmVjZWl2ZSB1bnNpZ25lZCBpbnQgdmFsdWUgKi8NCisNCisgICAgaWYgKGN0cmxfY21kID09IEdQSU9fQ01EX1NFVF9CSVRfRElSX0lOUFVUKQ0KKyAgICB7DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgIGR3X2dwaW9fd3JpdGVfZGlyKHBvcnQsIHZhbDMyLCBEV19HUElPX0lOUFVUX0FMTCk7DQorICAgICAgICBwb3J0X2luZm9fcHRyLT5kaXJlY3Rpb24gPSBkd19ncGlvX3JlYWRfZGlyKHBvcnQpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGN0cmxfY21kID09IEdQSU9fQ01EX1NFVF9CSVRfRElSX09VVFBVVCkNCisgICAgew0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorICAgICAgICBkd19ncGlvX3dyaXRlX2Rpcihwb3J0LCB2YWwzMiwgRFdfR1BJT19PVVRQVVRfQUxMKTsNCisgICAgICAgIHBvcnRfaW5mb19wdHItPmRpcmVjdGlvbiA9IGR3X2dwaW9fcmVhZF9kaXIocG9ydCk7DQorICAgIH0NCisgICAgZWxzZSBpZiAoY3RybF9jbWQgPT0gR1BJT19DTURfR0VUX0JJVF9ESVIpDQorICAgIHsNCisgICAgICAgIERXX0dQSU9fQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICBwb3J0X2luZm9fcHRyLT5kaXJlY3Rpb24gPSBkd19ncGlvX3JlYWRfZGlyKHBvcnQpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IHBvcnRfaW5mb19wdHItPmRpcmVjdGlvbjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIERXX0dQSU9fQ0hFQ0tfRVhQKHBvcnQtPm5vID09IERXX0dQSU9fUE9SVF9BLCBFX05PU1BUKTsNCisgICAgICAgIC8qIG91dHB1dCBwaW4gY2Fubm90IGJlIHVzZWQgYXMgaW50ZXJydXB0ICovDQorICAgICAgICBERVZfR1BJT19JTlRfQ0ZHICpncGlvX2ludF9jZmc7DQorICAgICAgICBERVZfR1BJT19CSVRfSVNSICpwb3J0X2JpdF9pc3I7DQorDQorICAgICAgICBzd2l0Y2ggKGN0cmxfY21kKQ0KKyAgICAgICAgew0KKyAgICAgICAgY2FzZSBHUElPX0NNRF9TRVRfQklUX0lOVF9DRkc6DQorICAgICAgICAgICAgRFdfR1BJT19DSEVDS19FWFAoKHBhcmFtICE9IE5VTEwpICYmIENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgICAgICBncGlvX2ludF9jZmcgPSAoREVWX0dQSU9fSU5UX0NGRyAqKXBhcmFtOw0KKyAgICAgICAgICAgIGR3X2dwaW9fc2V0X2ludF9jZmcocG9ydCwgZ3Bpb19pbnRfY2ZnKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgR1BJT19DTURfR0VUX0JJVF9JTlRfQ0ZHOg0KKyAgICAgICAgICAgIERXX0dQSU9fQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICAgICAgZ3Bpb19pbnRfY2ZnID0gKERFVl9HUElPX0lOVF9DRkcgKilwYXJhbTsNCisgICAgICAgICAgICAvKiogcmVhZCBjb25maWd1cmF0aW9uLCBlYWNoIGJpdCBzdGFuZHMgZm9yIGRpZmZlcmVudCBjb25maWd1cmF0aW9uICovDQorICAgICAgICAgICAgZHdfZ3Bpb19nZXRfaW50X2NmZyhwb3J0LCBncGlvX2ludF9jZmcpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHUElPX0NNRF9TRVRfQklUX0lTUjoNCisgICAgICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgICAgIHBvcnRfYml0X2lzciA9IChERVZfR1BJT19CSVRfSVNSICopcGFyYW07DQorDQorICAgICAgICAgICAgaWYgKHBvcnRfYml0X2lzci0+aW50X2JpdF9vZnMgPCBwb3J0LT5ncGlvX2JpdF9pc3ItPmludF9iaXRfbWF4X2NudCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHBvcnQtPmdwaW9fYml0X2lzci0+aW50X2JpdF9oYW5kbGVyX3B0cltwb3J0X2JpdF9pc3ItPmludF9iaXRfb2ZzXSA9IHBvcnRfYml0X2lzci0+aW50X2JpdF9oYW5kbGVyOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBlcmNkID0gRV9QQVI7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHUElPX0NNRF9HRVRfQklUX0lTUjoNCisgICAgICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgICAgIHBvcnRfYml0X2lzciA9IChERVZfR1BJT19CSVRfSVNSICopcGFyYW07DQorDQorICAgICAgICAgICAgaWYgKHBvcnRfYml0X2lzci0+aW50X2JpdF9vZnMgPCBwb3J0LT5ncGlvX2JpdF9pc3ItPmludF9iaXRfbWF4X2NudCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHBvcnRfYml0X2lzci0+aW50X2JpdF9oYW5kbGVyID0gcG9ydC0+Z3Bpb19iaXRfaXNyLT5pbnRfYml0X2hhbmRsZXJfcHRyW3BvcnRfYml0X2lzci0+aW50X2JpdF9vZnNdOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBlcmNkID0gRV9QQVI7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgY2FzZSBHUElPX0NNRF9FTkFfQklUX0lOVDoNCisgICAgICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgICAgICBkd19ncGlvX2ludF9lbmFibGUocG9ydCwgdmFsMzIpOw0KKyAgICAgICAgICAgIHBvcnRfaW5mb19wdHItPm1ldGhvZCA9IGR3X2dwaW9fcmVhZF9tdGhkKHBvcnQpOw0KKw0KKyAgICAgICAgICAgIGlmIChwb3J0X2luZm9fcHRyLT5tZXRob2QpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpbnRfZW5hYmxlKHBvcnQtPmludG5vKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdQSU9fQ01EX0RJU19CSVRfSU5UOg0KKyAgICAgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKyAgICAgICAgICAgIGR3X2dwaW9faW50X2Rpc2FibGUocG9ydCwgdmFsMzIpOw0KKyAgICAgICAgICAgIHBvcnRfaW5mb19wdHItPm1ldGhvZCA9IGR3X2dwaW9fcmVhZF9tdGhkKHBvcnQpOw0KKw0KKyAgICAgICAgICAgIGlmIChwb3J0X2luZm9fcHRyLT5tZXRob2QgPT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGludF9kaXNhYmxlKHBvcnQtPmludG5vKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIEdQSU9fQ01EX0dFVF9CSVRfTVRIRDoNCisgICAgICAgICAgICBEV19HUElPX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgICAgIHBvcnRfaW5mb19wdHItPm1ldGhvZCA9IGR3X2dwaW9fcmVhZF9tdGhkKHBvcnQpOw0KKyAgICAgICAgICAgICooKGludDMyX3QgKilwYXJhbSkgPSBwb3J0X2luZm9fcHRyLT5tZXRob2Q7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgIGVyY2QgPSBFX05PU1BUOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKiBkZXNpZ253YXJlIGdwaW8gaW50ZXJydXB0IHByb2Nlc3MgKi8NCitpbnQzMl90IGR3X2dwaW9faXNyX2hhbmRsZXIoREVWX0dQSU8gKmdwaW9fb2JqLCB2b2lkICpwdHIpDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfR1BJT19JTkZPX1BUUiBwb3J0X2luZm9fcHRyID0gJihncGlvX29iai0+Z3Bpb19pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX0dQSU9fSU5GT19PQkpFQ1QocG9ydF9pbmZvX3B0cik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBEV19HUElPX1BPUlRfUFRSIHBvcnQgPSAoRFdfR1BJT19QT1JUX1BUUikocG9ydF9pbmZvX3B0ci0+Z3Bpb19jdHJsKTsNCisgICAgRFdfR1BJT19DSEVDS19FWFAocG9ydC0+bm8gPT0gRFdfR1BJT19QT1JUX0EsIEVfTk9TUFQpOw0KKw0KKyAgICB1aW50MzJfdCBpLCBncGlvX2JpdF9pc3Jfc3RhdGU7DQorICAgIHVpbnQzMl90IG1heF9pbnRfYml0X2NvdW50ID0gMDsNCisNCisgICAgLyoqIHJlYWQgaW50ZXJydXB0IHN0YXR1cyAqLw0KKyAgICBncGlvX2JpdF9pc3Jfc3RhdGUgPSBkd19ncGlvX2ludF9yZWFkX3N0YXR1cyhwb3J0KTsNCisNCisgICAgaWYgKHBvcnQtPmdwaW9fYml0X2lzcikNCisgICAgew0KKyAgICAgICAgbWF4X2ludF9iaXRfY291bnQgPSAocG9ydC0+Z3Bpb19iaXRfaXNyLT5pbnRfYml0X21heF9jbnQpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZHdfZ3Bpb19pbnRfY2xlYXIocG9ydCwgZ3Bpb19iaXRfaXNyX3N0YXRlKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbWF4X2ludF9iaXRfY291bnQ7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKGdwaW9fYml0X2lzcl9zdGF0ZSAmICgxIDw8IGkpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8qIHRoaXMgYml0IGludGVycnVwdCBlbmFibGVkICovDQorICAgICAgICAgICAgaWYgKHBvcnQtPmdwaW9fYml0X2lzci0+aW50X2JpdF9oYW5kbGVyX3B0cltpXSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHBvcnQtPmdwaW9fYml0X2lzci0+aW50X2JpdF9oYW5kbGVyX3B0cltpXShncGlvX29iaik7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGR3X2dwaW9faW50X2NsZWFyKHBvcnQsICgxIDw8IGkpKTsgLyoqIGNsZWFyIHRoaXMgYml0IGludGVycnVwdCAqLw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9ncGlvL2R3X2dwaW8uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9ncGlvL2R3X2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGJjYjhlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL2dwaW8vZHdfZ3Bpby5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA3LTIyDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcYnJpZWYgICBkZXNpZ253YXJlIGdwaW8gZHJpdmVyDQorICogXGluZ3JvdXAgREVWSUNFX0RXX0dQSU8NCisgKiBcYnJpZWYgICBEZXNpZ253YXJlIEdQSU8gZHJpdmVyIGhlYWRlciBmaWxlDQorICovDQorDQorI2lmbmRlZiBfRFdfR1BJT19IXw0KKyNkZWZpbmUgX0RXX0dQSU9fSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9ncGlvLmgiDQorDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKw0KKyNkZWZpbmUgRFdfR1BJT19QT1JUX0EgICgweDAwKQ0KKyNkZWZpbmUgRFdfR1BJT19QT1JUX0IgICgweDAxKQ0KKyNkZWZpbmUgRFdfR1BJT19QT1JUX0MgICgweDAyKQ0KKyNkZWZpbmUgRFdfR1BJT19QT1JUX0QgICgweDAzKQ0KKw0KKyNkZWZpbmUgRFdfR1BJT19JTlRfQUNUX0xPVyAgICAgICAgIEdQSU9fSU5UX0FDVElWRV9MT1cNCisjZGVmaW5lIERXX0dQSU9fSU5UX0FDVF9ISUdIICAgICAgICAgICAgR1BJT19JTlRfQUNUSVZFX0hJR0gNCisNCisjZGVmaW5lIERXX0dQSU9fSU5UX0xFVkVMX1RSSUcgICAgICAgICAgR1BJT19JTlRfTEVWRUxfVFJJRw0KKyNkZWZpbmUgRFdfR1BJT19JTlRfRURHRV9UUklHICAgICAgICAgICBHUElPX0lOVF9FREdFX1RSSUcNCisNCisjZGVmaW5lIERXX0dQSU9fSU5UX05PX0RFQk9VTkNFICAgICAgICAgR1BJT19JTlRfTk9fREVCT1VOQ0UNCisjZGVmaW5lIERXX0dQSU9fSU5UX0RFQk9VTkNFICAgICAgICAgICAgR1BJT19JTlRfREVCT1VOQ0UNCisNCisjZGVmaW5lIERXX0dQSU9fQUxMX1pFUk8gICAgICAgICAgICAoMHgwKQ0KKyNkZWZpbmUgRFdfR1BJT19BTExfT05FICAgICAgICAgICAgICgweGZmZmZmZmZmKQ0KKyNkZWZpbmUgRFdfR1BJT19NQVNLX0FMTCAgICAgICAgICAgICgweGZmZmZmZmZmKQ0KKyNkZWZpbmUgRFdfR1BJT19JTlBVVF9BTEwgICAgICAgICAgICgweDApDQorI2RlZmluZSBEV19HUElPX09VVFBVVF9BTEwgICAgICAgICAgKDB4ZmZmZmZmZmYpDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBHUElPIFJlZ2lzdGVyIFN0cnVjdHVyZQ0KKyAqIFxicmllZiAgIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIERlc2lnbldhcmUgR1BJTyByZWdpc3RlciBzdHJ1Y3R1cmUuDQorICogQHsNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBwb3J0X2N0cmwNCit7DQorICAgIHVpbnQzMl90IERSOw0KKyAgICB1aW50MzJfdCBERFI7DQorICAgIHVpbnQzMl90IENUUkw7DQorfSBQT1JUX0NUUkw7DQorDQorLyogRFcgR1BJTyBQT1JUUyBSZWdpc3RlcnMgKi8NCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBkd19ncGlvX3JlZw0KK3sNCisgICAgUE9SVF9DVFJMIFNXUE9SVFNbNF07DQorICAgIHVpbnQzMl90IElOVEVOOyAgICAgLyohPCAoMHgzMCkgKi8NCisgICAgdWludDMyX3QgSU5UTUFTSzsgICAvKiE8ICgweDM0KSAqLw0KKyAgICB1aW50MzJfdCBJTlRUWVBFX0xFVkVMOyAvKiE8ICgweDM4KSAqLw0KKyAgICB1aW50MzJfdCBJTlRfUE9MQVJJVFk7ICAvKiE8ICgweDNjKSAqLw0KKyAgICB1aW50MzJfdCBJTlRTVEFUVVM7IC8qITwgKDB4NDApICovDQorICAgIHVpbnQzMl90IFJBV19JTlRTVEFUVVM7IC8qITwgKDB4NDQpICovDQorICAgIHVpbnQzMl90IERFQk9VTkNFOyAgLyohPCAoMHg0OCkgKi8NCisgICAgdWludDMyX3QgUE9SVEFfRU9JOyAvKiE8ICgweDRjKSAqLw0KKyAgICB1aW50MzJfdCBFWFRfUE9SVFNbNF07ICAvKiE8ICgweDUwKSAtQQ0KKyAgICAgICAgICAgICAgICAgICAgICgweDU0KSAtQg0KKyAgICAgICAgICAgICAgICAgICAgICgweDU4KSAtQw0KKyAgICAgICAgICAgICAgICAgICAgICgweDVjKSAtRCAqLw0KKyAgICB1aW50MzJfdCBMU19TWU5DOyAgIC8qITwgKDB4NjApICovDQorICAgIHVpbnQzMl90IElEX0NPREU7ICAgLyohPCAoMHg2NCkgKi8NCisgICAgdWludDMyX3QgUkVTRVJWRURfMzsgICAgLyohPCAoMHg2OCkgKi8NCisgICAgdWludDMyX3QgVkVSX0lEX0NPREU7ICAgLyohPCAoMHg2YykgKi8NCisgICAgdWludDMyX3QgQ09ORklHX1JFRzI7ICAgLyohPCAoMHg3MCkgKi8NCisgICAgdWludDMyX3QgQ09ORklHX1JFRzE7ICAgLyohPCAoMHg3NCkgKi8NCit9IERXX0dQSU9fUkVHLCAqRFdfR1BJT19SRUdfUFRSOw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgZWFjaCBwb3J0IGJpdCAqLw0KK3R5cGVkZWYgc3RydWN0IGR3X2dwaW9fYml0X2lzcg0KK3sNCisgICAgdWludDMyX3QgaW50X2JpdF9tYXhfY250OyAgICAgICAvKiE8IG1heCBiaXQgY291bnQgZm9yIGVhY2ggcG9ydCAqLw0KKyAgICBERVZfR1BJT19IQU5ETEVSICppbnRfYml0X2hhbmRsZXJfcHRyOyAgLyohPCBpbnRlcnJ1cHQgaGFuZGxlciBwb2ludGVyICovDQorfSBEV19HUElPX0JJVF9JU1IsICogRFdfR1BJT19CSVRfSVNSX1BUUjsNCisNCisvKioNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIEdQSU8gY29udHJvbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAqIFxkZXRhaWxzIGltcGxlbWVudCBvZiBkZXZfZ3Bpb19pbmZvOjpncGlvX2N0cmwNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkd19ncGlvX3BvcnQNCit7DQorICAgIHVpbnQzMl90IG5vOyAgICAgICAgICAgICAgICAvKiE8IGdwaW8gcG9ydCBudW1iZXIgKi8NCisgICAgRFdfR1BJT19SRUdfUFRSIHJlZ3M7ICAgICAgICAgICAvKiE8IGdwaW8gcG9ydCByZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBpbnRubzsgICAgICAgICAgICAgLyohPCBncGlvIGludGVycnVwdCB2ZWN0b3IgbnVtYmVyICovDQorICAgIHVpbnQzMl90IHZhbGlkX2JpdF9tYXNrOyAgICAgICAgLyohPCB2YWxpZCBiaXQgbWFzayBvZiBncGlvIHBvcnQgKi8NCisgICAgSU5UX0hBTkRMRVIgaW50X2hhbmRsZXI7ICAgICAgICAvKiE8IGdwaW8gaW50ZXJydXB0IGhhbmRsZXIgKi8NCisgICAgRFdfR1BJT19CSVRfSVNSX1BUUiBncGlvX2JpdF9pc3I7ICAgLyohPCBncGlvIGJpdCBoYW5kbGVyIHN0cnVjdCAqLw0KK30gRFdfR1BJT19QT1JULCAqRFdfR1BJT19QT1JUX1BUUjsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIEdQSU8gRnVuY3Rpb24gRGVjbGFyYXRpb24NCisgKiBcYnJpZWYgICBjb250YWlucyBkZWNsYXJhdGlvbnMgb2YgZGVzaWdud2FyZSBncGlvIGZ1bmN0aW9ucy4NCisgKiBcZGV0YWlscyBUaGlzIGFyZSBvbmx5IHVzZWQgaW4gZ3BpbyBvYmplY3QgaW1wbGVtZW50YXRpb24gc291cmNlIGZpbGUNCisgKiBAew0KKyAqLw0KK2V4dGVybiBpbnQzMl90IGR3X2dwaW9fb3BlbihERVZfR1BJTyAqZ3Bpb19vYmosIHVpbnQzMl90IGRpcik7DQorZXh0ZXJuIGludDMyX3QgZHdfZ3Bpb19jbG9zZShERVZfR1BJTyAqZ3Bpb19vYmopOw0KK2V4dGVybiBpbnQzMl90IGR3X2dwaW9fcmVhZChERVZfR1BJTyAqZ3Bpb19vYmosIHVpbnQzMl90ICp2YWwsIHVpbnQzMl90IG1hc2spOw0KK2V4dGVybiBpbnQzMl90IGR3X2dwaW9fd3JpdGUoREVWX0dQSU8gKmdwaW9fb2JqLCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spOw0KK2V4dGVybiBpbnQzMl90IGR3X2dwaW9fY29udHJvbChERVZfR1BJTyAqZ3Bpb19vYmosIHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSk7DQorZXh0ZXJuIGludDMyX3QgZHdfZ3Bpb19pc3JfaGFuZGxlcihERVZfR1BJTyAqZ3Bpb19vYmosIHZvaWQgKnB0cik7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKw0KKyNlbmRpZiAvKiBfRFdfR1BJT19IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YjdiZWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaS5jCkBAIC0wLDAgKzEsMTU3OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNC0wNi0yNQ0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX1NQSSAgIERlc2lnbndhcmUgU1BJIERyaXZlcg0KKyAqIFxpbmdyb3VwIERFVklDRV9EVw0KKyAqIFxicmllZiAgIERlc2lnbndhcmUgU1BJIERyaXZlciBJbXBsZW1lbnRhdGlvbg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgZHJpdmVyIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGRldmljZSBoYWwgbGF5ZXIgZGVmaW5pdGlvbiAoXHJlZiBkZXZfc3BpLmgpDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqLw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisNCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiaW5jL2VtYkFSQ19lcnJvci5oIg0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWwuaCINCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaS5oIg0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfU1BJX0RFRklORVMgICBEZXNpZ25XYXJlIFNQSSBEcml2ZXIgTWFjcm9zDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGRyaXZlciBtYWNyb3MgdXNlZCBpbiBzcGkgZHJpdmVyDQorICogQHsNCisgKi8NCisvKiogY2hlY2sgZXhwcmVzc2lvbnMgdXNlZCBpbiBEZXNpZ25XYXJlIFNQSSBkcml2ZXIgaW1wbGVtZW50YXRpb24gKi8NCisjZGVmaW5lIERXX1NQSV9DSEVDS19FWFAoRVhQUiwgRVJST1JfQ09ERSkgICAgICBDSEVDS19FWFAoRVhQUiwgZXJjZCwgRVJST1JfQ09ERSwgZXJyb3JfZXhpdCkNCisNCisvKiogY29udmVydCBEZXNpZ25XYXJlIGZyZXF1ZW5jZSB0byBkaXZpc29yICovDQorI2RlZmluZSBEV19TUElfRlJFUTJEVihwZXJpZnJlcSwgc3BpZnJlcSkgICAgICAgKChwZXJpZnJlcSkgLyAoc3BpZnJlcSkpDQorDQorI2lmbmRlZiBESVNBQkxFX0RFVklDRV9PQkpFQ1RfVkFMSURfQ0hFQ0sNCisvKiogdmFsaWQgY2hlY2sgb2Ygc3BpIGluZm8gb2JqZWN0ICovDQorI2RlZmluZSBWQUxJRF9DSEtfU1BJX0lORk9fT0JKRUNUKHNwaWluZm9fb2JqX3B0cikgICAgICB7ICAgICAgICAgICBcDQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpaW5mb19vYmpfcHRyKSE9TlVMTCwgRV9PQkopOyAgICAgICBcDQorICAgICAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoKHNwaWluZm9fb2JqX3B0ciktPnNwaV9jdHJsKSE9TlVMTCwgRV9PQkopOyAgIFwNCisgICAgICAgIH0NCisjZW5kaWYNCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0RXX1NQSV9ERUZfQ0JSICAgRGVzaWduV2FyZSBTUEkgSW50ZXJydXB0IENhbGxiYWNrIFJvdXRpbmUgU2VsZWN0IE1hcmNvcw0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19TUElfREVGSU5FUw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGludGVycnVwdCBjYWxsYmFjayByb3V0aW5lcyBzZWxlY3QgbWFjcm9zIGRlZmluaXRpb25zDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1NQSV9SRFlfU05EICAgICAgICAgICAgICAgICAgKDFVKSAgICAvKiE8IHJlYWR5IHRvIHNlbmQgY2FsbGJhY2sgKi8NCisjZGVmaW5lIERXX1NQSV9SRFlfUkNWICAgICAgICAgICAgICAgICAgKDJVKSAgICAvKiE8IHJlYWR5IHRvIHJlY2VpdmUgY2FsbGJhY2sgKi8NCisjZGVmaW5lIERXX1NQSV9SRFlfWEZFUiAgICAgICAgICAgICAgICAgKDNVKSAgICAvKiE8IHJlYWR5IHRvIHRyYW5zZmVyIGNhbGxiYWNrICovDQorLyoqIEB9ICovDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9EV19TUElfU1RBVElDICAgIERlc2lnbldhcmUgU1BJIERyaXZlciBTdGF0aWMgRnVuY3Rpb25zDQorICogXGluZ3JvdXAgREVWSUNFX0RXX1NQSQ0KKyAqIFxicmllZiAgIFN0YXRpYyBvciBpbmxpbmUgZnVuY3Rpb25zLCB2YXJpYWJsZXMgZm9yIERlc2lnbldhcmUgU1BJIGhhbmRsZSBzcGkgb3BlcmF0aW9ucywNCisgKiAgb25seSB1c2VkIGluIHRoaXMgZmlsZS4NCisgKiBAew0KKyAqLw0KKw0KKy8qKiBEaXNhYmxlIGRlc2lnbndhcmUgc3BpIGRldmljZSAqLw0KK0lubGluZSB2b2lkIGR3X3NwaV9kaXNhYmxlKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgLyoqIGRpc2FibGUgc3BpIG9wZXJhdGlvbnMsIHRoZW4gcHJvZ3JhbSBzcGkgY29udHJvbCByZWdzIGlzIHBvc3NpYmxlICovDQorICAgIHNwaV9yZWdfcHRyLT5TU0lFTlIgPSBEV19TUElfU1NJX0RJU0FCTEU7DQorfQ0KKy8qKiBFbmFibGUgZGVzaWdud2FyZSBzcGkgZGV2aWNlICovDQorSW5saW5lIHZvaWQgZHdfc3BpX2VuYWJsZShEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIHNwaV9yZWdfcHRyLT5TU0lFTlIgPSBEV19TUElfU1NJX0VOQUJMRTsNCit9DQorDQorLyoqIENsZWFyIGFsbCBkZXNpZ253YXJlIHNwaSBpbnRlcnJ1cHQgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfY2xlYXJfaW50ZXJydXB0X2FsbChEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgICh2b2lkKXNwaV9yZWdfcHRyLT5JQ1I7DQorfQ0KKw0KKy8qKiB0ZXN0IHdoZXRoZXIgc3BpIGlzIGJ1c3ksIGJ1c3kgcmV0dXJuIDEsIGVsc2UgMCAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9idXN5KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgcmV0dXJuICgoc3BpX3JlZ19wdHItPlNSICYgRFdfU1BJX1NSX0JVU1kpICE9IDApOw0KK30NCisvKiogdGVzdCB3aGV0aGVyIHNwaSBpcyByZWFkeSB0byBzZW5kLCAxIHJlYWR5LCAwIG5vdCByZWFkeSAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9wdXRyZWFkeShEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIHJldHVybiAoKHNwaV9yZWdfcHRyLT5TUiAmIERXX1NQSV9TUl9URk5GKSAhPSAwKTsNCit9DQorLyoqIHRlc3Qgd2hldGhlciBzcGkgaXMgcmVhZCB0byByZWNlaXZlLCAxIHJlYWR5LCAwIG5vdCByZWFkeSAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9nZXRyZWFkeShEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIHJldHVybiAoKHNwaV9yZWdfcHRyLT5TUiAmIERXX1NQSV9TUl9SRk5FKSAhPSAwKTsNCit9DQorLyoqIHdyaXRlIGRhdGEgdG8gc3BpIHNlbmQgZmlmbyAqLw0KK0lubGluZSB2b2lkIGR3X3NwaV9wdXRkYXRhKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCBpbnQzMl90IGRhdGEpDQorew0KKyAgICBzcGlfcmVnX3B0ci0+REFUQVJFRyA9ICh1aW50MzJfdClkYXRhOw0KK30NCisvKiogcmVhZCBkYXRhIGZyb20gc3BpIHJlY2VpdmUgZmlmbywgcmV0dXJuIGRhdGEgcmVjZWl2ZWQgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfZ2V0ZGF0YShEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIHJldHVybiAoaW50MzJfdClzcGlfcmVnX3B0ci0+REFUQVJFRzsNCit9DQorLyoqDQorICogXGJyaWVmICAgc2VuZCBkYXRhIGJ5IHNwaSB3aGVuIGF2YWlsYWJsZSwNCisgKiAgbW9zdGx5IHVzZWQgaW4gaW50ZXJydXB0IG1ldGhvZCwgbm9uLWJsb2NrZWQgZnVuY3Rpb24NCisgKiBccGFyYW1baW5dICAgc3BpX3JlZ19wdHIgc3BpIHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIGRhdGEgICAgICAgIGRhdGEgdG8gYmUgc2VudA0KKyAqIFxyZXR2YWwgIEVfT0sgICAgICAgIHNlbmQgc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgRV9PQkogICAgICAgbm90IHJlYWR5IHRvIHNlbmQgZGF0YQ0KKyAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9zbmRfZGF0KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCBpbnQzMl90IGRhdGEpDQorew0KKyAgICBpZiAoZHdfc3BpX3B1dHJlYWR5KHNwaV9yZWdfcHRyKSkNCisgICAgew0KKyAgICAgICAgZHdfc3BpX3B1dGRhdGEoc3BpX3JlZ19wdHIsIGRhdGEpOw0KKyAgICAgICAgcmV0dXJuIEVfT0s7DQorICAgIH0NCisNCisgICAgcmV0dXJuIEVfT0JKOw0KK30NCisvKioNCisgKiBcYnJpZWYgICByZWNlaXZlIG9uZSBjaGFyIGZyb20gc3BpLA0KKyAqICBtb3N0bHkgdXNlZCBpbiBpbnRlcnJ1cHQgcm91dGluZSwgbm9uLWJsb2NrZWQgZnVuY3Rpb24NCisgKiBccGFyYW1baW5dICAgc3BpX3JlZ19wdHIgc3BpIHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHJldHVybiAgZGF0YSByZWNlaXZlZCBieSB0aGUgc3BpDQorICovDQorSW5saW5lIGludDMyX3QgZHdfc3BpX3Jjdl9kYXQoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gZHdfc3BpX2dldGRhdGEoc3BpX3JlZ19wdHIpOw0KK30NCisvKioNCisgKiBcYnJpZWYgICBzZW5kIGNoYXIgYnkgc3BpIGluIHBvbGwgbWV0aG9kLCBibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHNwaV9yZWdfcHRyIHNwaSByZWdpc3RlciBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBkYXRhICAgICAgICBkYXRhIHRvIGJlIHNlbnQNCisgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfcHNuZF9kYXQoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIsIGludDMyX3QgZGF0YSkNCit7DQorICAgIC8qKiB3YWl0IHVudGlsIHNwaSBpcyByZWFkeSB0byBzZW5kICovDQorICAgIHdoaWxlICghZHdfc3BpX3B1dHJlYWR5KHNwaV9yZWdfcHRyKSk7IC8qIGJsb2NrZWQgKi8NCisNCisgICAgLyoqIHNlbmQgY2hhciAqLw0KKyAgICBkd19zcGlfcHV0ZGF0YShzcGlfcmVnX3B0ciwgZGF0YSk7DQorfQ0KKy8qKg0KKyAqIFxicmllZiAgIHJlY2VpdmUgb25lIGNoYXIgZnJvbSBzcGkgaW4gcG9sbCBtZXRob2QsIGJsb2NrZWQgZnVuY3Rpb24NCisgKiBccGFyYW1baW5dICAgc3BpX3JlZ19wdHIgc3BpIHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHJldHVybiAgZGF0YSByZWNlaXZlZCBieSB0aGUgc3BpDQorICovDQorSW5saW5lIGludDMyX3QgZHdfc3BpX3ByY3ZfZGF0KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgLyoqIHdhaXQgdW50aWwgc3BpIGlzIHJlYWR5IHRvIHJlY2VpdmUgKi8NCisgICAgd2hpbGUgKCFkd19zcGlfZ2V0cmVhZHkoc3BpX3JlZ19wdHIpKTsgLyogYmxvY2tlZCAqLw0KKw0KKyAgICAvKiogcmVjZWl2ZSBkYXRhICovDQorICAgIHJldHVybiBkd19zcGlfZ2V0ZGF0YShzcGlfcmVnX3B0cik7DQorfQ0KKw0KKy8qKiBSZXNldCBkZXNpZ253YXJlIEZJRk8gYnkgZGlzYWJsZSBzcGkgZGV2aWNlLCB0aGVuIGVuYWJsZSBkZXZpY2UgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfcmVzZXRfZmlmbyhEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIGR3X3NwaV9kaXNhYmxlKHNwaV9yZWdfcHRyKTsNCisgICAgZHdfc3BpX2VuYWJsZShzcGlfcmVnX3B0cik7DQorfQ0KKw0KKy8qKiBFbmFibGUgZGVzaWdud2FyZSBzcGkgYml0IGludGVycnVwdCB3aXRoIG1hc2sgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfdW5tYXNrX2ludGVycnVwdChEV19TUElfUkVHICpzcGlfcmVnX3B0ciwgdWludDMyX3QgbWFzaykNCit7DQorICAgIHNwaV9yZWdfcHRyLT5JTVIgfD0gbWFzazsNCit9DQorDQorLyoqIERpc2FibGUgZGVzaWdud2FyZSBzcGkgYml0IGludGVycnVwdCB3aXRoIG1hc2sgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfbWFza19pbnRlcnJ1cHQoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIsIHVpbnQzMl90IG1hc2spDQorew0KKyAgICBzcGlfcmVnX3B0ci0+SU1SICY9IH5tYXNrOw0KK30NCisNCisvKiogU2V0IGRlc2lnbndhcmUgc3BpIGRldmljZSBmcmVxdWVuY3kgKi8NCitJbmxpbmUgdm9pZCBkd19zcGlfc2V0X2ZyZXEoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciwgdWludDMyX3QgZnJlcSkNCit7DQorICAgIHVpbnQzMl90IHNja19kaXZpc29yOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3M7DQorDQorICAgIGR3X3NwaV9kaXNhYmxlKHNwaV9yZWdfcHRyKTsNCisNCisgICAgc2NrX2Rpdmlzb3IgPSBEV19TUElfRlJFUTJEVihzcGlfY3RybF9wdHItPmR3X2FwYl9idXNfZnJlcSwgZnJlcSk7DQorICAgIHNwaV9yZWdfcHRyLT5CQVVEUiA9IHNja19kaXZpc29yOw0KKyAgICBkd19zcGlfZW5hYmxlKHNwaV9yZWdfcHRyKTsNCit9DQorDQorLyoqIFNldCBkZXNpZ253YXJlIHNwaSBkZXZpY2UgZGF0YSBmcmFtZSBzaXplICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpX3NldF9kZnMoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIsIHVpbnQzMl90IGRmcykNCit7DQorICAgIHVpbnQzMl90IGN0cmwwX3JlZzsNCisNCisgICAgaWYgKChkZnMgPD0gMykgfHwgKGRmcyA+IDE2KSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgZHdfc3BpX2Rpc2FibGUoc3BpX3JlZ19wdHIpOw0KKyAgICBjdHJsMF9yZWcgPSBzcGlfcmVnX3B0ci0+Q1RSTFIwOw0KKyAgICBjdHJsMF9yZWcgJj0gfihEV19TUElfQ1RSTFIwX0RGU19NQVNLKTsNCisgICAgc3BpX3JlZ19wdHItPkNUUkxSMCA9IGN0cmwwX3JlZyB8IChkZnMgLSAxKTsNCisgICAgZHdfc3BpX2VuYWJsZShzcGlfcmVnX3B0cik7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiogQ2hvb3NlIHByb3BlciBkZXNpZ253YXJlIHNwaSBjbG9jayBtb2RlIHNldHRpbmcgdmFsdWUgKi8NCitJbmxpbmUgdWludDMyX3QgZHdfc3BpX3NlbGVjdF9jbG9ja21vZGUodWludDMyX3QgY2xrX21vZGUpDQorew0KKyAgICByZXR1cm4gKGNsa19tb2RlIDw8IERXX1NQSV9DVFJMUjBfU0NfT0ZTKTsNCit9DQorDQorLyoqIFNldCBkZXNpZ253YXJlIHNwaSBjbG9jayBtb2RlICovDQorSW5saW5lIGludDMyX3QgZHdfc3BpX3NldF9jbG9ja21vZGUoRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIsIHVpbnQzMl90IGNsa19tb2RlKQ0KK3sNCisgICAgaWYgKGNsa19tb2RlID4gU1BJX0NQT0xfMV9DUEhBXzEpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBkd19zcGlfZGlzYWJsZShzcGlfcmVnX3B0cik7DQorICAgIHNwaV9yZWdfcHRyLT5DVFJMUjAgJj0gfihEV19TUElfQ1RSTFIwX1NDX01BU0spOw0KKyAgICBzcGlfcmVnX3B0ci0+Q1RSTFIwIHw9IGR3X3NwaV9zZWxlY3RfY2xvY2ttb2RlKGNsa19tb2RlKTsNCisgICAgZHdfc3BpX2VuYWJsZShzcGlfcmVnX3B0cik7DQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiogU2VsZWN0IGEgc3BpIHNsYXZlIHdpdGggc2x2X2xpbmUgKi8NCitJbmxpbmUgaW50MzJfdCBkd19zcGlfc2VsZWN0X3NsYXZlKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyLCB1aW50MzJfdCBzbHZfbGluZSkNCit7DQorICAgIC8qIGNoZWNrIGlmIHNwaSBidXN5ICovDQorICAgIGlmIChkd19zcGlfYnVzeShzcGlfcmVnX3B0cikpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIHNwaV9yZWdfcHRyLT5TRVIgPSAxIDw8IHNsdl9saW5lOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqIERlc2VsZWN0IGEgc3BpIGRldmljZSAqLw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV9kZXNlbGVjdF9zbGF2ZShEV19TUElfUkVHICpzcGlfcmVnX3B0ciwgdWludDMyX3Qgc2x2X2xpbmUpDQorew0KKyAgICAvKiBjaGVjayBpZiBzcGkgYnVzeSAqLw0KKyAgICBpZiAoZHdfc3BpX2J1c3koc3BpX3JlZ19wdHIpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICBzcGlfcmVnX3B0ci0+U0VSID0gMDsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK0lubGluZSB2b2lkIGR3X3NwaV9mbHVzaF90eChEV19TUElfUkVHICpzcGlfcmVnX3B0cikNCit7DQorICAgIGR3X3NwaV9yZXNldF9maWZvKHNwaV9yZWdfcHRyKTsNCit9DQorDQorSW5saW5lIHZvaWQgZHdfc3BpX2ZsdXNoX3J4KERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgZHdfc3BpX3Jlc2V0X2ZpZm8oc3BpX3JlZ19wdHIpOw0KK30NCisNCisvKiogR2V0IFRYIEZJRk8gTGVuZ3RoLg0KKyAqICAgIGNhbGN1bGF0ZSBzcGkgZmlmbyBsZW5ndGggdXNpbmcgZmlmbyB0aHJlc2hvbGQgbWV0aG9kDQorICogIElmIHlvdSBhdHRlbXB0IHRvIHNldCBiaXRzIFs3OjBdIG9mIHRoaXMgcmVnaXN0ZXIgdG8NCisgKiAgYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGRlcHRoIG9mIHRoZSBGSUZPLA0KKyAqICB0aGlzIGZpZWxkIGlzIG5vdCB3cml0dGVuIGFuZCByZXRhaW5zIGl0cyBjdXJyZW50IHZhbHVlLg0KKyAqLw0KK3N0YXRpYyB1aW50MzJfdCBkd19zcGlfZ2V0X3R4Zmlmb19sZW4oRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIpDQorew0KKyAgICB1aW50MzJfdCBmaWZvX3Rocl9sZXZfdG1wLCBsZWZ0LCByaWdodCwgaTsNCisNCisgICAgZmlmb190aHJfbGV2X3RtcCA9IHNwaV9yZWdfcHRyLT5UWEZUTFI7DQorDQorICAgIGlmIChmaWZvX3Rocl9sZXZfdG1wICE9IDApDQorICAgIHsNCisgICAgICAgIGxlZnQgPSBmaWZvX3Rocl9sZXZfdG1wOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgbGVmdCA9IERXX1NQSV9NSU5fRklGT19MRU5HVEg7DQorICAgIH0NCisNCisgICAgcmlnaHQgPSBEV19TUElfTUFYX0ZJRk9fTEVOR1RIICsgMTsNCisNCisgICAgZm9yIChpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKQ0KKyAgICB7DQorICAgICAgICBzcGlfcmVnX3B0ci0+VFhGVExSID0gaTsNCisNCisgICAgICAgIGlmIChzcGlfcmVnX3B0ci0+VFhGVExSICE9IGkpDQorICAgICAgICB7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgc3BpX3JlZ19wdHItPlRYRlRMUiA9IGZpZm9fdGhyX2xldl90bXA7IC8qIHJlc3RvcmUgb2xkIGZpZm8gdGhyZXNob2xkICovDQorDQorICAgIHJldHVybiAoaSk7DQorfQ0KKw0KKy8qKiBHZXQgUlggRklGTyBMZW5ndGggKi8NCitzdGF0aWMgdWludDMyX3QgZHdfc3BpX2dldF9yeGZpZm9fbGVuKERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyKQ0KK3sNCisgICAgdWludDMyX3QgZmlmb190aHJfbGV2X3RtcCwgbGVmdCwgcmlnaHQsIGk7DQorDQorICAgIGZpZm9fdGhyX2xldl90bXAgPSBzcGlfcmVnX3B0ci0+UlhGVExSOw0KKw0KKyAgICBpZiAoZmlmb190aHJfbGV2X3RtcCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBsZWZ0ID0gZmlmb190aHJfbGV2X3RtcDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGxlZnQgPSBEV19TUElfTUlOX0ZJRk9fTEVOR1RIOw0KKyAgICB9DQorDQorICAgIHJpZ2h0ID0gRFdfU1BJX01BWF9GSUZPX0xFTkdUSCArIDE7DQorDQorICAgIGZvciAoaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7IGkrKykNCisgICAgew0KKyAgICAgICAgc3BpX3JlZ19wdHItPlJYRlRMUiA9IGk7DQorDQorICAgICAgICBpZiAoc3BpX3JlZ19wdHItPlJYRlRMUiAhPSBpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHNwaV9yZWdfcHRyLT5SWEZUTFIgPSBmaWZvX3Rocl9sZXZfdG1wOyAvKiByZXN0b3JlIG9sZCBmaWZvIHRocmVzaG9sZCAqLw0KKw0KKyAgICByZXR1cm4gKGkpOw0KK30NCisNCisvKiogSW5pdCBEZXNpZ253YXJlIFNQSSBIYXJkd2FyZSAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV9od19pbml0KERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIsIHVpbnQzMl90IGNsa19tb2RlLCB1aW50MzJfdCBkZnMpDQorew0KKyAgICB1aW50MzJfdCBjdHJsMF9yZWcgPSAwOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3M7DQorDQorICAgIGR3X3NwaV9kaXNhYmxlKHNwaV9yZWdfcHRyKTsNCisNCisgICAgLyogQ2xlYXIgaW50ZXJydXB0cyAqLw0KKyAgICBjdHJsMF9yZWcgPSBzcGlfcmVnX3B0ci0+SUNSOw0KKyAgICAvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovDQorICAgIHNwaV9yZWdfcHRyLT5JTVIgPSAwOw0KKw0KKyAgICBjdHJsMF9yZWcgPSBEV19TUElfQ1RSTFIwX0ZSRl9NT1RPUk9MQSB8IERXX1NQSV9UTU9EX1RSQU5TTUlUX1JFQ0VJVkUgXA0KKyAgICAgICAgICAgICAgICB8IGR3X3NwaV9zZWxlY3RfY2xvY2ttb2RlKGNsa19tb2RlKSB8IChkZnMgLSAxKSB8IERXX1NQSV9DVFJMUjBfU0xWX09FX0VOQUJMRTsNCisgICAgc3BpX3JlZ19wdHItPkNUUkxSMCA9IGN0cmwwX3JlZzsNCisgICAgc3BpX3JlZ19wdHItPkNUUkxSMSA9IDA7DQorDQorICAgIC8qIGRlc2VsZWN0IHNsYXZlcyAqLw0KKyAgICBzcGlfcmVnX3B0ci0+U0VSID0gMDsNCisNCisgICAgLyogU2V0IHRocmVzaG9sZCB2YWx1ZXMgZm9yIGJvdGggdHggYW5kIHJ4ICovDQorICAgIHNwaV9yZWdfcHRyLT5UWEZUTFIgPSAwOw0KKyAgICBzcGlfcmVnX3B0ci0+UlhGVExSID0gMDsNCisNCisgICAgZHdfc3BpX2VuYWJsZShzcGlfcmVnX3B0cik7DQorfQ0KKw0KKy8qKiBlbmFibGUgZGVzaWdud2FyZSBzcGkgKi8NCitzdGF0aWMgdm9pZCBkd19zcGlfZW5hYmxlX2RldmljZShERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKikoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyk7DQorDQorICAgIGlmICgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCkgPT0gMCkNCisgICAgew0KKyAgICAgICAgZHdfc3BpX2VuYWJsZShzcGlfcmVnX3B0cik7DQorICAgICAgICBzcGlfaW5mb19wdHItPnN0YXR1cyB8PSBERVZfRU5BQkxFRDsNCisgICAgfQ0KK30NCisNCisvKiogZGlzYWJsZSBkZXNpZ253YXJlIHNwaSAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV9kaXNhYmxlX2RldmljZShERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKikoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyk7DQorDQorICAgIGR3X3NwaV9kaXNhYmxlKHNwaV9yZWdfcHRyKTsNCisgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgJj0gfkRFVl9FTkFCTEVEOw0KK30NCisNCisNCisvKioNCisgKiBcYnJpZWYgICBkaXNhYmxlIGRlc2lnbndhcmUgc3BpIHNlbmQgb3IgcmVjZWl2ZSBpbnRlcnJ1cHQNCisgKiBccGFyYW1baW5dICAgREVWX1NQSV9JTkZPICAgICpzcGlfaW5mb19wdHINCisgKiBccGFyYW1baW5dICAgY2JydG4gICAgICAgY29udHJvbCBjb2RlIG9mIGNhbGxiYWNrIHJvdXRpbmUgb2Ygc2VuZCBvciByZWNlaXZlDQorICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpX2Rpc19jYnIoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIsIHVpbnQzMl90IGNicnRuKQ0KK3sNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTCAqKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisNCisgICAgaWYgKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSAhPSAwKSAgIC8qIG9ubHkgaW4gdHJhbnNmZXIgbmVlZCBkbyBjaGVjayAqLw0KKyAgICB7DQorICAgICAgICBzd2l0Y2ggKGNicnRuKQ0KKyAgICAgICAgew0KKyAgICAgICAgY2FzZSBEV19TUElfUkRZX1NORDoNCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERXX1NQSV9JTl9YRkVSKSA9PSBEV19TUElfSU5fVFgsIEVfQ1RYKTsNCisgICAgICAgICAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+KERXX1NQSV9JTl9UWCk7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBjYXNlIERXX1NQSV9SRFlfUkNWOg0KKyAgICAgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9SWCwgRV9DVFgpOw0KKyAgICAgICAgICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzICY9IH4oRFdfU1BJX0lOX1JYKTsNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGNhc2UgRFdfU1BJX1JEWV9YRkVSOg0KKyAgICAgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9YRkVSLCBFX0NUWCk7DQorICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgJj0gfihEV19TUElfSU5fWEZFUik7DQorICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGR3X3NwaV9tYXNrX2ludGVycnVwdChzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzLCBEV19TUElfSU1SX1hGRVIpOw0KKw0KKyAgICBpZiAoc3BpX2N0cmxfcHRyLT5pbnRfc3RhdHVzICYgRFdfU1BJX0dJTlRfRU5BQkxFKQ0KKyAgICB7DQorICAgICAgICBpbnRfZGlzYWJsZShzcGlfY3RybF9wdHItPmludG5vKTsNCisgICAgICAgIHNwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyAmPSB+RFdfU1BJX0dJTlRfRU5BQkxFOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGVuYWJsZSBEZXNpZ25XYXJlIFNQSSBzZW5kIG9yIHJlY2VpdmUgaW50ZXJydXB0DQorICogXHBhcmFtW2luXSAgIERFVl9TUElfSU5GTyAgICAqc3BpX2luZm9fcHRyDQorICogXHBhcmFtW2luXSAgIGNicnRuICAgICAgIGNvbnRyb2wgY29kZSBvZiBjYWxsYmFjayByb3V0aW5lIG9mIHNlbmQgb3IgcmVjZWl2ZQ0KKyAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9lbmFfY2JyKERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyLCB1aW50MzJfdCBjYnJ0bikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorDQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisNCisgICAgc3dpdGNoIChjYnJ0bikNCisgICAgew0KKyAgICBjYXNlIERXX1NQSV9SRFlfU05EOg0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gRFdfU1BJX0lOX1RYOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfU1BJX1JEWV9SQ1Y6DQorICAgICAgICBzcGlfaW5mb19wdHItPnN0YXR1cyB8PSBEV19TUElfSU5fUlg7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBEV19TUElfUkRZX1hGRVI6DQorICAgICAgICBzcGlfaW5mb19wdHItPnN0YXR1cyB8PSBEV19TUElfSU5fWEZFUjsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgZHdfc3BpX3VubWFza19pbnRlcnJ1cHQoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncywgRFdfU1BJX0lNUl9YRkVSKTsNCisNCisgICAgaWYgKChzcGlfY3RybF9wdHItPmludF9zdGF0dXMgJiBEV19TUElfR0lOVF9FTkFCTEUpID09IDApDQorICAgIHsNCisgICAgICAgIHNwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyB8PSBEV19TUElfR0lOVF9FTkFCTEU7DQorICAgICAgICBpbnRfZW5hYmxlKHNwaV9jdHJsX3B0ci0+aW50bm8pOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGVuYWJsZSBkZXNpZ253YXJlIHNwaSBpbnRlcnJ1cHQNCisgKiBccGFyYW0gICBzcGlfaW5mb19wdHIgICAgc3BpIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBwb2ludGVyDQorICovDQorc3RhdGljIHZvaWQgZHdfc3BpX2VuYWJsZV9pbnRlcnJ1cHQoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIpDQorew0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMICopKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKw0KKyAgICBpbnRfaGFuZGxlcl9pbnN0YWxsKHNwaV9jdHJsX3B0ci0+aW50bm8sIHNwaV9jdHJsX3B0ci0+ZHdfc3BpX2ludF9oYW5kbGVyKTsNCisgICAgc3BpX2N0cmxfcHRyLT5pbnRfc3RhdHVzIHw9IERXX1NQSV9HSU5UX0VOQUJMRTsNCisgICAgaW50X2VuYWJsZShzcGlfY3RybF9wdHItPmludG5vKTsgICAgLyoqIGVuYWJsZSBzcGkgaW50ZXJydXB0ICovDQorfQ0KKy8qKg0KKyAqIFxicmllZiAgIGRpc2FibGUgZGVzaWdud2FyZSBzcGkgaW50ZXJydXB0DQorICogXHBhcmFtICAgc3BpX2luZm9fcHRyICAgIHNwaSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkwgKikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorDQorICAgIC8qKiBkaXNhYmxlIHNwaSBzZW5kJnJlY2VpdmUgaW50ZXJydXB0IGFmdGVyIGRpc2FibGUgc3BpIGludGVycnVwdCAqLw0KKyAgICBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfU05EKTsNCisgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1JDVik7DQorICAgIGR3X3NwaV9kaXNfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9YRkVSKTsNCisgICAgLyogZGlzYWJsZSBzcGkgaW50ZXJydXB0ICovDQorICAgIGR3X3NwaV9tYXNrX2ludGVycnVwdChzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzLCBEV19TUElfSU1SX1hGRVIpOw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+RFdfU1BJX0lOX1hGRVI7DQorICAgIGludF9kaXNhYmxlKHNwaV9jdHJsX3B0ci0+aW50bm8pOw0KKyAgICBzcGlfY3RybF9wdHItPmludF9zdGF0dXMgJj0gfihEV19TUElfR0lOVF9FTkFCTEUpOw0KK30NCisNCitzdGF0aWMgdm9pZCBkd19zcGlfcmVzZXRfZGV2aWNlKERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyKQ0KK3sNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTCAqKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisNCisgICAgZHdfc3BpX2Rpc2FibGVfZGV2aWNlKHNwaV9pbmZvX3B0cik7DQorICAgIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChzcGlfaW5mb19wdHIpOw0KKyAgICBkd19zcGlfY2xlYXJfaW50ZXJydXB0X2FsbChzcGlfcmVnX3B0cik7DQorICAgIGR3X3NwaV9lbmFibGVfZGV2aWNlKHNwaV9pbmZvX3B0cik7DQorfQ0KKw0KKy8qKiBhYm9ydCBjdXJyZW50IGludGVycnVwdCB0cmFuc21pdCB0cmFuc2ZlciAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9hYm9ydF90eChERVZfU1BJICpzcGlfb2JqKQ0KK3sNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisNCisgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgIT0gMCwgRV9PSyk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9UWCwgRV9DVFgpOw0KKw0KKyAgICBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfU05EKTsNCisgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gREVWX0lOX1RYX0FCUlQ7DQorDQorICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMudHhfY2IgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zcGlfY2JzLnR4X2NiKHNwaV9vYmopOw0KKyAgICB9DQorDQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzICY9IH4oREVWX0lOX1RYX0FCUlQpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogYWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgcmVjZWl2ZSB0cmFuc2ZlciAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9hYm9ydF9yeChERVZfU1BJICpzcGlfb2JqKQ0KK3sNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisNCisgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgIT0gMCwgRV9PSyk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9SWCwgRV9DVFgpOw0KKw0KKyAgICBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfUkNWKTsNCisgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gREVWX0lOX1JYX0FCUlQ7DQorDQorICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMucnhfY2IgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zcGlfY2JzLnJ4X2NiKHNwaV9vYmopOw0KKyAgICB9DQorDQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzICY9IH4oREVWX0lOX1JYX0FCUlQpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKiogYWJvcnQgY3VycmVudCBpbnRlcnJ1cHQgdHJhbnNmZXIgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfYWJvcnRfeGZlcihERVZfU1BJICpzcGlfb2JqKQ0KK3sNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisNCisgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgIT0gMCwgRV9PSyk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgRFdfU1BJX0lOX1hGRVIpID09IERXX1NQSV9JTl9YRkVSLCBFX0NUWCk7DQorDQorICAgIGR3X3NwaV9kaXNfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9YRkVSKTsNCisgICAgc3BpX2luZm9fcHRyLT5zdGF0dXMgfD0gREVWX0lOX1hGRVJfQUJSVDsNCisNCisgICAgaWYgKHNwaV9pbmZvX3B0ci0+c3BpX2Nicy54ZmVyX2NiICE9IE5VTEwpDQorICAgIHsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy54ZmVyX2NiKHNwaV9vYmopOw0KKyAgICB9DQorDQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzICY9IH4oREVWX0lOX1hGRVJfQUJSVCk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKiBHZXQgYXZhaWxhYmxlIHRyYW5zbWl0IGZpZm8gY291bnQgKi8NCitzdGF0aWMgaW50MzJfdCBkd19zcGlfZ2V0X3R4YXZhaWwoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0cikNCit7DQorICAgIGludDMyX3QgdHhfYXZhaWwgPSAwOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKw0KKyNpZiBEV19TUElfQ0FMQ19GSUZPX0xFTl9FTkFCTEUNCisNCisgICAgaWYgKHNwaV9jdHJsX3B0ci0+dHhfZmlmb19sZW4gPD0gMSkNCisgICAgew0KKyAgICAgICAgaWYgKGR3X3NwaV9wdXRyZWFkeShzcGlfcmVnX3B0cikgPT0gMSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB0eF9hdmFpbCA9IDE7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgdHhfYXZhaWwgPSAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisjZW5kaWYNCisgICAgew0KKyAgICAgICAgdHhfYXZhaWwgPSBzcGlfY3RybF9wdHItPnR4X2ZpZm9fbGVuIC0gc3BpX3JlZ19wdHItPlRYRkxSOw0KKyAgICB9DQorDQorICAgIHJldHVybiB0eF9hdmFpbDsNCit9DQorDQorLyoqIEdldCBhdmFpbGFibGUgcmVjZWl2ZSBmaWZvIGNvdW50ICovDQorc3RhdGljIGludDMyX3QgZHdfc3BpX2dldF9yeGF2YWlsKERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIpDQorew0KKyAgICBpbnQzMl90IHJ4X2F2YWlsID0gMDsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisNCisjaWYgRFdfU1BJX0NBTENfRklGT19MRU5fRU5BQkxFDQorDQorICAgIGlmIChzcGlfY3RybF9wdHItPnJ4X2ZpZm9fbGVuIDw9IDEpDQorICAgIHsNCisgICAgICAgIGlmIChkd19zcGlfZ2V0cmVhZHkoc3BpX3JlZ19wdHIpID09IDEpDQorICAgICAgICB7DQorICAgICAgICAgICAgcnhfYXZhaWwgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJ4X2F2YWlsID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorI2VuZGlmDQorICAgIHsNCisgICAgICAgIHJ4X2F2YWlsID0gc3BpX3JlZ19wdHItPlJYRkxSOw0KKyAgICB9DQorDQorICAgIHJldHVybiByeF9hdmFpbDsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IGR3X3NwaV90eF9tYXgoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0cikNCit7DQorICAgIHVpbnQzMl90IHR4X2xlZnQsIHR4X3Jvb207DQorICAgIERXX1NQSV9UUkFOU0ZFUiAqeGZlciA9ICYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKTsNCisNCisgICAgdHhfbGVmdCA9ICh4ZmVyLT54ZmVyX2xlbiAtIHhmZXItPnR4X2lkeCkgLyB4ZmVyLT5uYnl0ZXM7DQorICAgIHR4X3Jvb20gPSBkd19zcGlfZ2V0X3R4YXZhaWwoc3BpX2N0cmxfcHRyKTsNCisNCisgICAgcmV0dXJuICh0eF9sZWZ0IDwgdHhfcm9vbSkgPyB0eF9sZWZ0IDogdHhfcm9vbTsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IGR3X3NwaV9yeF9tYXgoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0cikNCit7DQorICAgIHVpbnQzMl90IHJ4X2xlZnQsIHJ4X3Jvb207DQorICAgIERXX1NQSV9UUkFOU0ZFUiAqeGZlciA9ICYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKTsNCisNCisgICAgcnhfbGVmdCA9ICh4ZmVyLT54ZmVyX2xlbiAtIHhmZXItPnJ4X2lkeCkgLyB4ZmVyLT5uYnl0ZXM7DQorICAgIHJ4X3Jvb20gPSBkd19zcGlfZ2V0X3J4YXZhaWwoc3BpX2N0cmxfcHRyKTsNCisNCisgICAgcmV0dXJuIChyeF9sZWZ0IDwgcnhfcm9vbSkgPyByeF9sZWZ0IDogcnhfcm9vbTsNCit9DQorDQorSW5saW5lIGludDMyX3QgZHdfc3BpX3J4X2VuZChEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyKQ0KK3sNCisgICAgRFdfU1BJX1RSQU5TRkVSICp4ZmVyID0gJihzcGlfY3RybF9wdHItPmR3X3hmZXIpOw0KKw0KKyAgICByZXR1cm4gKHhmZXItPnJ4X2lkeCA+PSB4ZmVyLT54ZmVyX2xlbik7DQorfQ0KKw0KK0lubGluZSBpbnQzMl90IGR3X3NwaV90eF9lbmQoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0cikNCit7DQorICAgIERXX1NQSV9UUkFOU0ZFUiAqeGZlciA9ICYoc3BpX2N0cmxfcHRyLT5kd194ZmVyKTsNCisNCisgICAgcmV0dXJuICh4ZmVyLT50eF9pZHggPj0geGZlci0+eGZlcl9sZW4pOw0KK30NCisNCisvKiogMSBmb3IgZW5kLCAwIGZvciBub3QgZW5kICovDQorSW5saW5lIGludDMyX3QgZHdfc3BpX3hmZXJfZW5kKERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIpDQorew0KKyAgICByZXR1cm4gKGR3X3NwaV90eF9lbmQoc3BpX2N0cmxfcHRyKSAmJiBkd19zcGlfcnhfZW5kKHNwaV9jdHJsX3B0cikpOw0KK30NCisNCitzdGF0aWMgaW50MzJfdCBkd19zcGlfd3JpdGVyKERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyKQ0KK3sNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTF9QVFIpKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKyAgICBEV19TUElfVFJBTlNGRVIgKmR3X3hmZXIgPSAmKHNwaV9jdHJsX3B0ci0+ZHdfeGZlcik7DQorICAgIERXX1NQSV9SRUcgKnNwaV9yZWdfcHRyID0gKERXX1NQSV9SRUcgKikoc3BpX2N0cmxfcHRyLT5kd19zcGlfcmVncyk7DQorICAgIHVpbnQzMl90IHR4X21heCA9IGR3X3NwaV90eF9tYXgoc3BpX2N0cmxfcHRyKTsNCisgICAgaW50MzJfdCB0eF93Ow0KKyAgICB1aW50MzJfdCB0eF9jbnQgPSB0eF9tYXg7DQorDQorICAgIGlmIChkd194ZmVyLT50eF94ZmVyID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHdoaWxlICh0eF9tYXgpDQorICAgIHsNCisgICAgICAgIGlmIChkd194ZmVyLT50eF94ZmVyLT50eF9pZHggPj0gZHdfeGZlci0+dHhfeGZlci0+dG90X2xlbikNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd194ZmVyLT50eF94ZmVyID0gZHdfeGZlci0+dHhfeGZlci0+bmV4dDsNCisNCisgICAgICAgICAgICBpZiAoZHdfeGZlci0+dHhfeGZlciA9PSBOVUxMKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKChkd194ZmVyLT50eF94ZmVyLT50eF9pZHggPj0gZHdfeGZlci0+dHhfeGZlci0+dHhfb2ZzKSBcDQorICAgICAgICAgICAgJiYgKGR3X3hmZXItPnR4X3hmZXItPnR4X2lkeCA8IGR3X3hmZXItPnR4X3hmZXItPnR4X3RvdGxlbikpDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGR3X3hmZXItPm5ieXRlcyA9PSAxKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdHhfdyA9IChpbnQzMl90KSgqKGludDhfdCAqKShkd194ZmVyLT50eF94ZmVyLT50eF9idWYpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdHhfdyA9IChpbnQzMl90KSgqKGludDE2X3QgKikoZHdfeGZlci0+dHhfeGZlci0+dHhfYnVmKSk7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGR3X3hmZXItPnR4X3hmZXItPnR4X2J1ZiArPSBkd194ZmVyLT5uYnl0ZXM7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgdHhfdyA9IHNwaV9pbmZvX3B0ci0+ZHVtbXk7DQorICAgICAgICB9DQorDQorICAgICAgICBkd19zcGlfcHV0ZGF0YShzcGlfcmVnX3B0ciwgdHhfdyk7DQorICAgICAgICBkd194ZmVyLT50eF94ZmVyLT50eF9pZHggKz0gZHdfeGZlci0+bmJ5dGVzOw0KKyAgICAgICAgZHdfeGZlci0+dHhfaWR4ICs9IGR3X3hmZXItPm5ieXRlczsNCisgICAgICAgIHR4X21heCAtLTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKCh0eF9jbnQgLSB0eF9tYXgpICogZHdfeGZlci0+bmJ5dGVzKTsNCit9DQorDQorc3RhdGljIGludDMyX3QgZHdfc3BpX3JlYWRlcihERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0cikNCit7DQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkxfUFRSKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgRFdfU1BJX1RSQU5TRkVSICpkd194ZmVyID0gJihzcGlfY3RybF9wdHItPmR3X3hmZXIpOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKyAgICB1aW50MzJfdCByeF9tYXggPSBkd19zcGlfcnhfbWF4KHNwaV9jdHJsX3B0cik7DQorICAgIGludDMyX3QgcnhfdzsNCisgICAgdWludDMyX3QgcnhfY250ID0gcnhfbWF4Ow0KKw0KKyAgICBpZiAoZHdfeGZlci0+cnhfeGZlciA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAocnhfbWF4KQ0KKyAgICB7DQorICAgICAgICBpZiAoZHdfeGZlci0+cnhfeGZlci0+cnhfaWR4ID49IGR3X3hmZXItPnJ4X3hmZXItPnRvdF9sZW4pDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfeGZlci0+cnhfeGZlciA9IGR3X3hmZXItPnJ4X3hmZXItPm5leHQ7DQorDQorICAgICAgICAgICAgaWYgKGR3X3hmZXItPnJ4X3hmZXIgPT0gTlVMTCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIHJ4X3cgPSBkd19zcGlfZ2V0ZGF0YShzcGlfcmVnX3B0cik7DQorDQorICAgICAgICBpZiAoKGR3X3hmZXItPnJ4X3hmZXItPnJ4X2lkeCA+PSBkd194ZmVyLT5yeF94ZmVyLT5yeF9vZnMpIFwNCisgICAgICAgICAgICAmJiAoZHdfeGZlci0+cnhfeGZlci0+cnhfaWR4IDwgZHdfeGZlci0+cnhfeGZlci0+cnhfdG90bGVuKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoZHdfeGZlci0+bmJ5dGVzID09IDEpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAqKGludDhfdCAqKShkd194ZmVyLT5yeF94ZmVyLT5yeF9idWYpID0gcnhfdzsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKihpbnQxNl90ICopKGR3X3hmZXItPnJ4X3hmZXItPnJ4X2J1ZikgPSByeF93Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBkd194ZmVyLT5yeF94ZmVyLT5yeF9idWYgKz0gZHdfeGZlci0+bmJ5dGVzOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZHdfeGZlci0+cnhfeGZlci0+cnhfaWR4ICs9IGR3X3hmZXItPm5ieXRlczsNCisgICAgICAgIGR3X3hmZXItPnJ4X2lkeCArPSBkd194ZmVyLT5uYnl0ZXM7DQorICAgICAgICByeF9tYXggLS07DQorICAgIH0NCisNCisgICAgcmV0dXJuICgocnhfY250IC0gcnhfbWF4KSAqIGR3X3hmZXItPm5ieXRlcyk7DQorfQ0KKw0KK0lubGluZSB1aW50MzJfdCBkd19zcGlfbmJ5dGVzKHVpbnQzMl90IGRmcykNCit7DQorICAgIHVpbnQzMl90IG5ieXRlcyA9IDE7DQorDQorICAgIGlmIChkZnMgPiA4KSB7IG5ieXRlcyA9IDI7IH0NCisNCisgICAgcmV0dXJuIG5ieXRlczsNCit9DQorDQorc3RhdGljIHZvaWQgZHdfc3BpX2luaXRfdHJhbnNmZXIoRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciwgREVWX1NQSV9UUkFOU0ZFUiAqeGZlciwgdWludDMyX3QgZGZzKQ0KK3sNCisgICAgRFdfU1BJX1RSQU5TRkVSICpkd194ZmVyID0gJihzcGlfY3RybF9wdHItPmR3X3hmZXIpOw0KKyAgICB1aW50MzJfdCB0b3RfbGVuID0gMDsNCisNCisgICAgZHdfeGZlci0+dHhfeGZlciA9IHhmZXI7DQorICAgIGR3X3hmZXItPnJ4X3hmZXIgPSB4ZmVyOw0KKyAgICBkd194ZmVyLT50eF9pZHggPSAwOw0KKyAgICBkd194ZmVyLT5yeF9pZHggPSAwOw0KKyAgICBkd194ZmVyLT5uYnl0ZXMgPSBkd19zcGlfbmJ5dGVzKGRmcyk7DQorDQorICAgIC8qKiBDYWxjdWxhdGUgYWxsIHRyYW5zZmVyIGxlbmd0aCAqLw0KKyAgICB3aGlsZSAoeGZlcikNCisgICAgew0KKyAgICAgICAgREVWX1NQSV9YRkVSX0lOSVQoeGZlcik7DQorICAgICAgICB0b3RfbGVuICs9IHhmZXItPnRvdF9sZW47DQorICAgICAgICB4ZmVyID0geGZlci0+bmV4dDsNCisgICAgfQ0KKw0KKyAgICBkd194ZmVyLT54ZmVyX2xlbiA9IHRvdF9sZW47DQorfQ0KKw0KKy8qIENoZWNrIGJ1ZmZlciBhbGlnbiBzdGF0dXMsIDAgZm9yIGFsaWduZWQsIC0xIGZvciBub3QtYWxpZ25lZCAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3NwaV9jaGtfeGZlcl9hbGlnbmVkKERFVl9TUElfVFJBTlNGRVIgKnhmZXIsIHVpbnQzMl90IGRmcykNCit7DQorICAgIHVpbnQzMl90IGFsaWduX2J5dGVzID0gMTsNCisNCisgICAgaWYgKHhmZXIgPT0gTlVMTCkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKGRmcyA+IDgpDQorICAgIHsNCisgICAgICAgIGFsaWduX2J5dGVzID0gMjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHdoaWxlICh4ZmVyKQ0KKyAgICB7DQorICAgICAgICAvKiBjaGVjayB0eCBidWZmZXIgYWxpZ24gc3RhdHVzICovDQorICAgICAgICBpZiAoeGZlci0+dHhfbGVuICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHhmZXItPnR4X2xlbiAlIGFsaWduX2J5dGVzKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICAgICAgICAgIGlmICh4ZmVyLT50eF9vZnMgJSBhbGlnbl9ieXRlcykgeyByZXR1cm4gLTE7IH0NCisNCisgICAgICAgICAgICBpZiAoIUNIRUNLX0FMSUdOX0JZVEVTKHhmZXItPnR4X2J1ZiwgYWxpZ25fYnl0ZXMpKSB7IHJldHVybiAtMTsgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLyogY2hlY2sgdHggYnVmZmVyIGFsaWduIHN0YXR1cyAqLw0KKyAgICAgICAgaWYgKHhmZXItPnJ4X2xlbiAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICh4ZmVyLT5yeF9sZW4gJSBhbGlnbl9ieXRlcykgeyByZXR1cm4gLTE7IH0NCisNCisgICAgICAgICAgICBpZiAoeGZlci0+cnhfb2ZzICUgYWxpZ25fYnl0ZXMpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgICAgICAgICAgaWYgKCFDSEVDS19BTElHTl9CWVRFUyh4ZmVyLT5yeF9idWYsIGFsaWduX2J5dGVzKSkgeyByZXR1cm4gLTE7IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIHhmZXIgPSB4ZmVyLT5uZXh0Ow0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdWludDMyX3QgZHdfc3BpX3BvbGxfdHJhbnNmZXIoREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIpDQorew0KKyAgICB1aW50MzJfdCBsZW4gPSAwOw0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMX1BUUikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorDQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9JTl9YRkVSOw0KKw0KKyAgICB3aGlsZSAoIWR3X3NwaV94ZmVyX2VuZChzcGlfY3RybF9wdHIpKQ0KKyAgICB7DQorICAgICAgICBsZW4gKz0gZHdfc3BpX3dyaXRlcihzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgbGVuICs9IGR3X3NwaV9yZWFkZXIoc3BpX2luZm9fcHRyKTsNCisgICAgfQ0KKw0KKyAgICBzcGlfaW5mb19wdHItPnN0YXR1cyAmPSB+REVWX0lOX1hGRVI7DQorDQorICAgIHJldHVybiBsZW4gPj4gMTsNCit9DQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGJyaWVmICAgb3BlbiBhIGRlc2lnbndhcmUgc3BpIGRldmljZQ0KKyAqIFxwYXJhbVtpbl0gICBzcGlfb2JqIHNwaSBvYmplY3QgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBtb2RlICAgIHNwaSB3b3JraW5nIG1vZGUgKG1hc3RlciBvciBzbGF2ZSkNCisgKiBccGFyYW1baW5dICAgcGFyYW0gICBwYXJhbWV0ZXIsIGZvciBtYXN0ZXIsIHBhcmFtIGlzIHRoZSBmcmVxLCBmb3Igc2xhdmUsIHBhcmFtIGlzIGRmcw0KKyAqIFxyZXR2YWwgIEVfT0sgICAgT3BlbiBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzDQorICogXHJldHZhbCAgRV9PUE5FRCBJZiBkZXZpY2Ugd2FzIG9wZW5lZCBiZWZvcmUgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycywNCisgKiAgICAgICAgICB0aGVuIGp1c3QgaW5jcmVhc2UgdGhlIFxyZWYgZGV2X3NwaV9pbmZvOjpvcG5fY250ICJvcG5fY250IiBhbmQgcmV0dXJuIFxyZWYgRV9PUE5FRA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX1NZUyAgIERldmljZSBpcyBvcGVuZWQgZm9yIGRpZmZlcmVudCBtb2RlIGJlZm9yZSwgaWYgeW91IHdhbnQgdG8gb3BlbiBpdCB3aXRoIGRpZmZlcmVudCBtb2RlLCB5b3UgbmVlZCB0byBmdWxseSBjbG9zZSBpdCBmaXJzdC4NCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX05PU1BUIE9wZW4gc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQNCisgKi8NCitpbnQzMl90IGR3X3NwaV9vcGVuKERFVl9TUEkgKnNwaV9vYmosIHVpbnQzMl90IG1vZGUsIHVpbnQzMl90IHBhcmFtKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgdWludDMyX3QgcGFyYW0yY2hlY2s7DQorICAgIHVpbnQzMl90IGNsa19tb2RlLCBkZnNfdmFsOw0KKyAgICB1aW50MzJfdCBzdXBwb3J0X21vZGVzOw0KKyAgICBERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0ciA9ICYoc3BpX29iai0+c3BpX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfU1BJX0lORk9fT0JKRUNUKHNwaV9pbmZvX3B0cik7DQorICAgIERXX1NQSV9DSEVDS19FWFAoKG1vZGUgPT0gREVWX01BU1RFUl9NT0RFKSB8fCAobW9kZSA9PSBERVZfU0xBVkVfTU9ERSksIEVfUEFSKTsNCisNCisgICAgaWYgKG1vZGUgPT0gREVWX1NMQVZFX01PREUpICAgLyogY2xvY2sgbW9kZSBzaG91bGQgYmUgaW4gdGhlIGVudW0gc3RydWN0dXJlICovDQorICAgIHsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHBhcmFtID49IFNQSV9DUE9MXzBfQ1BIQV8wKSAmJiAocGFyYW0gPD0gU1BJX0NQT0xfMV9DUEhBXzEpLCBFX1BBUik7DQorICAgIH0NCisgICAgZWxzZSAgICAgLyogZnJlcXVlbmNlIHNob3VsZCA+IDAgKi8NCisgICAgew0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChwYXJhbSA+IDAsIEVfUEFSKTsNCisgICAgfQ0KKw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTF9QVFIpKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKw0KKyAgICAvKiBDaGVjayBzdXBwb3J0ZWQgbW9kZXMsIG1hc3RlciBvciBzbGF2ZSAqLw0KKyAgICBzdXBwb3J0X21vZGVzID0gc3BpX2N0cmxfcHRyLT5zdXBwb3J0X21vZGVzOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKCgoKHN1cHBvcnRfbW9kZXMpJkRXX1NQSV9NQVNURVJfU1VQUE9SVEVEKSAmJiAobW9kZSA9PSBERVZfTUFTVEVSX01PREUpKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgKCgoc3VwcG9ydF9tb2RlcykmRFdfU1BJX1NMQVZFX1NVUFBPUlRFRCkgJiYgKG1vZGUgPT0gREVWX1NMQVZFX01PREUpKSwgRV9OT1NQVCk7DQorDQorICAgIC8qKiBDaGVjayBvcGVuZWQgYmVmb3JlIHVzZSBjYXNlICovDQorICAgIGlmIChzcGlfaW5mb19wdHItPm9wbl9jbnQgPiAwKQ0KKyAgICB7DQorICAgICAgICBpZiAobW9kZSAhPSBzcGlfaW5mb19wdHItPm1vZGUpDQorICAgICAgICB7DQorICAgICAgICAgICAgLyogY3VycmVudCB3b3JraW5nIG1vZGUgaXMgZGlmZmVyZW50IGZyb20gcGFzc2luZyBtb2RlICovDQorICAgICAgICAgICAgcmV0dXJuIEVfU1lTOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG1vZGUgPT0gREVWX01BU1RFUl9NT0RFKSAgIC8qIHBhcmFtIGlzIGZyZXEgd2hlbiBhcyBtYXN0ZXIgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBwYXJhbTJjaGVjayA9IHNwaV9pbmZvX3B0ci0+ZnJlcTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgICAgIC8qIHBhcmFtIGlzIGNsa19tb2RlIHdoZW4gYXMgc2xhdmUgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBwYXJhbTJjaGVjayA9IHNwaV9pbmZvX3B0ci0+Y2xrX21vZGU7DQorICAgICAgICB9DQorDQorICAgICAgICBzcGlfaW5mb19wdHItPm9wbl9jbnQgKys7DQorDQorICAgICAgICBpZiAocGFyYW0gIT0gcGFyYW0yY2hlY2spICAgLyogb3BlbiB3aXRoIGRpZmZlcmVudCBzcGVlZCBtb2RlICovDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEVfT1BORUQ7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEVfT0s7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgLyogYXV0byBpbmNyZWFzZSBvcGVuIGNvdW50ICovDQorICAgIHNwaV9pbmZvX3B0ci0+b3BuX2NudCArKzsNCisNCisgICAgLyogRG8gRklGTyBMZW5ndGggZ2V0IGJlZm9yZSBpbml0ICovDQorI2lmIERXX1NQSV9DQUxDX0ZJRk9fTEVOX0VOQUJMRQ0KKyAgICBzcGlfY3RybF9wdHItPnR4X2ZpZm9fbGVuID0gZHdfc3BpX2dldF90eGZpZm9fbGVuKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKyAgICBzcGlfY3RybF9wdHItPnJ4X2ZpZm9fbGVuID0gZHdfc3BpX2dldF9yeGZpZm9fbGVuKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKyNlbmRpZg0KKyAgICAvKiBoYXJkd2FyZSBpbml0ICovDQorICAgIHNwaV9pbmZvX3B0ci0+bW9kZSA9IG1vZGU7DQorICAgIGNsa19tb2RlID0gU1BJX0NMS19NT0RFX0RFRkFVTFQ7DQorICAgIGRmc192YWwgPSBTUElfREZTX0RFRkFVTFQ7DQorDQorICAgIGlmIChtb2RlID09IERFVl9TTEFWRV9NT0RFKQ0KKyAgICB7DQorICAgICAgICBjbGtfbW9kZSA9IHBhcmFtOw0KKyAgICB9DQorDQorICAgIHNwaV9pbmZvX3B0ci0+ZGZzID0gZGZzX3ZhbDsNCisgICAgc3BpX2luZm9fcHRyLT5jbGtfbW9kZSA9IGNsa19tb2RlOw0KKyAgICBkd19zcGlfaHdfaW5pdChzcGlfY3RybF9wdHIsIGNsa19tb2RlLCBkZnNfdmFsKTsNCisNCisgICAgaWYgKG1vZGUgPT0gREVWX01BU1RFUl9NT0RFKSAgIC8qIERlc2VsZWN0IGFsbCBzbGF2ZXMsIGFuZCBzZXQgZnJlcXVlbmNlICovDQorICAgIHsNCisgICAgICAgIGR3X3NwaV9kZXNlbGVjdF9zbGF2ZShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzLCAwKTsNCisgICAgICAgIGR3X3NwaV9zZXRfZnJlcShzcGlfY3RybF9wdHIsIHBhcmFtKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+ZnJlcSA9IHBhcmFtOw0KKyAgICB9DQorDQorICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzID0gREVWX0VOQUJMRUQ7DQorICAgIHNwaV9pbmZvX3B0ci0+ZXh0cmEgPSBOVUxMOw0KKyAgICBzcGlfaW5mb19wdHItPnNsYXZlID0gU1BJX1NMQVZFX05PVF9TRUxFQ1RFRDsNCisgICAgc3BpX2luZm9fcHRyLT5kdW1teSA9IDB4ZmY7DQorDQorICAgIHNwaV9jdHJsX3B0ci0+aW50X3N0YXR1cyA9IDA7DQorICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgTlVMTCwgZGZzX3ZhbCk7DQorDQorICAgIC8qKiBpbnN0YWxsIHNwaSBpbnRlcnJ1cHQgaW50byBzeXN0ZW0gKi8NCisgICAgZHdfc3BpX2Rpc2FibGVfaW50ZXJydXB0KHNwaV9pbmZvX3B0cik7DQorICAgIGludF9oYW5kbGVyX2luc3RhbGwoc3BpX2N0cmxfcHRyLT5pbnRubywgc3BpX2N0cmxfcHRyLT5kd19zcGlfaW50X2hhbmRsZXIpOw0KKyAgICBtZW1zZXQoJihzcGlfaW5mb19wdHItPnhmZXIpLCAwLCBzaXplb2YoREVWX1NQSV9UUkFOU0ZFUikpOw0KKyAgICBtZW1zZXQoJihzcGlfaW5mb19wdHItPnNwaV9jYnMpLCAwLCBzaXplb2YoREVWX1NQSV9DQlMpKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgY2xvc2UgYSBEZXNpZ25XYXJlIFNQSSBkZXZpY2UNCisgKiBccGFyYW1baW5dICAgc3BpX29iaiBzcGkgb2JqZWN0IHBvaW50ZXINCisgKiBccmV0dmFsICBFX09LICAgIENsb3NlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSBpc3N1ZXMoaW5jbHVkaW5nIHNjZW5hcmlvIHRoYXQgZGV2aWNlIGlzIGFscmVhZHkgY2xvc2VkKQ0KKyAqIFxyZXR2YWwgIEVfT1BORUQgRGV2aWNlIGlzIHN0aWxsIG9wZW5lZCwgdGhlIGRldmljZSBccmVmIGRldl9zcGlfaW5mbzo6b3BuX2NudCAib3BuX2NudCIgZGVjcmVhc2VkIGJ5IDENCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICovDQoraW50MzJfdCBkd19zcGlfY2xvc2UoREVWX1NQSSAqc3BpX29iaikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19TUElfSU5GT19PQkpFQ1Qoc3BpX2luZm9fcHRyKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX09LKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIHNwaV9pbmZvX3B0ci0+b3BuX2NudCAtLTsNCisNCisgICAgaWYgKHNwaV9pbmZvX3B0ci0+b3BuX2NudCA9PSAwKQ0KKyAgICB7DQorICAgICAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMICopKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKw0KKyAgICAgICAgZHdfc3BpX2Rpc2FibGVfaW50ZXJydXB0KHNwaV9pbmZvX3B0cik7DQorICAgICAgICBkd19zcGlfYWJvcnRfdHgoc3BpX29iaik7DQorICAgICAgICBkd19zcGlfYWJvcnRfcngoc3BpX29iaik7DQorICAgICAgICBtZW1zZXQoJihzcGlfaW5mb19wdHItPnhmZXIpLCAwLCBzaXplb2YoREVWX1NQSV9UUkFOU0ZFUikpOw0KKyAgICAgICAgbWVtc2V0KCYoc3BpX2luZm9fcHRyLT5zcGlfY2JzKSwgMCwgc2l6ZW9mKERFVl9TUElfQ0JTKSk7DQorICAgICAgICBtZW1zZXQoJihzcGlfY3RybF9wdHItPmR3X3hmZXIpLCAwLCBzaXplb2YoRFdfU1BJX1RSQU5TRkVSKSk7DQorICAgICAgICBkd19zcGlfZGlzYWJsZV9kZXZpY2Uoc3BpX2luZm9fcHRyKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3RhdHVzID0gREVWX0RJU0FCTEVEOw0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5leHRyYSA9IE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBlcmNkID0gRV9PUE5FRDsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBjb250cm9sIHNwaSBieSBjdHJsIGNvbW1hbmQNCisgKiBccGFyYW1baW5dICAgICAgIHNwaV9vYmogICAgIHNwaSBvYmplY3QgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICAgICAgY3RybF9jbWQgICAgY29udHJvbCBjb21tYW5kIGNvZGUgdG8gZG8gc3BlY2lmaWMgc3BpIHdvcmsNCisgKiBccGFyYW1baW4sb3V0XSAgIHBhcmFtICAgICAgIHBhcmFtZXRlcnMgdXNlZCB0byBjb250cm9sIHNwaSBvciByZXR1cm4gc29tZXRoaW5nDQorICogXHJldHZhbCAgRV9PSyAgICBDb250cm9sIGRldmljZSBzdWNjZXNzZnVsbHkNCisgKiBccmV0dmFsICBFX0NMU0VEIERldmljZSBpcyBub3Qgb3BlbmVkDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkIGZvciBjdXJyZW50IGNvbnRyb2wgY29tbWFuZA0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqIFxyZXR2YWwgIEVfQ1RYICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gZGlmZmVyZW50IHJlYXNvbnMgbGlrZSBpbiB0cmFuc2ZlciBzdGF0ZQ0KKyAqIFxyZXR2YWwgIEVfTk9TUFQgQ29udHJvbCBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgb3Igbm90IHZhbGlkDQorICovDQoraW50MzJfdCBkd19zcGlfY29udHJvbChERVZfU1BJICpzcGlfb2JqLCB1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfU1BJX0lORk8gKnNwaV9pbmZvX3B0ciA9ICYoc3BpX29iai0+c3BpX2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfU1BJX0lORk9fT0JKRUNUKHNwaV9pbmZvX3B0cik7DQorICAgIERXX1NQSV9DSEVDS19FWFAoc3BpX2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9DTFNFRCk7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICB1aW50MzJfdCB2YWwzMjsgLyoqIHRvIHJlY2VpdmUgdW5zaWduZWQgaW50IHZhbHVlICovDQorICAgIERFVl9CVUZGRVIgKmRldmJ1ZjsNCisNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTCAqKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgRFdfU1BJX1JFRyAqc3BpX3JlZ19wdHIgPSAoRFdfU1BJX1JFRyAqKShzcGlfY3RybF9wdHItPmR3X3NwaV9yZWdzKTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiAqc3BpX3hmZXIgPSAmKHNwaV9pbmZvX3B0ci0+eGZlcik7DQorDQorICAgIC8qIGNoZWNrIHdoZXRoZXIgY3VycmVudCBkZXZpY2UgaXMgZGlzYWJsZWQgKi8NCisgICAgaWYgKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9FTkFCTEVEKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICAvKiogV2hlbiBkZXZpY2UgaXMgZGlzYWJsZWQsDQorICAgICAgICAgKiBvbmx5IFNQSV9DTURfRU5BX0RFViwgU1BJX0NNRF9ESVNfREVWLCBTUElfQ01EX0dFVF9TVEFUVVMsIFNQSV9DTURfUkVTRVQNCisgICAgICAgICAqIGFyZSBhdmFpbGFibGUsIG90aGVyIGNvbW1hbmRzIHdpbGwgcmV0dXJuIEVfU1lTDQorICAgICAgICAgKi8NCisgICAgICAgIGlmICgoY3RybF9jbWQgIT0gU1BJX0NNRF9FTkFfREVWKSAmJiBcDQorICAgICAgICAgICAgKGN0cmxfY21kICE9IFNQSV9DTURfRElTX0RFVikgJiYgXA0KKyAgICAgICAgICAgIChjdHJsX2NtZCAhPSBTUElfQ01EX0dFVF9TVEFUVVMpICYmIFwNCisgICAgICAgICAgICAoY3RybF9jbWQgIT0gU1BJX0NNRF9SRVNFVCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEVfU1lTOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHN3aXRjaCAoY3RybF9jbWQpDQorICAgIHsNCisgICAgLyogQ29tbW1vbiBjb21tYW5kcyBmb3IgYm90aCBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUgKi8NCisgICAgY2FzZSBTUElfQ01EX0dFVF9TVEFUVVM6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICAqKChpbnQzMl90ICopcGFyYW0pID0gc3BpX2luZm9fcHRyLT5zdGF0dXM7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9DTEtfTU9ERToNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgodmFsMzIgPj0gU1BJX0NQT0xfMF9DUEhBXzApICYmICh2YWwzMiA8PSBTUElfQ1BPTF8xX0NQSEFfMSksIEVfUEFSKTsNCisNCisgICAgICAgIGlmIChkd19zcGlfc2V0X2Nsb2NrbW9kZShzcGlfcmVnX3B0ciwgdmFsMzIpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5jbGtfbW9kZSA9IHZhbDMyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBFX1NZUzsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfRU5BX0RFVjoNCisgICAgICAgIGR3X3NwaV9lbmFibGVfZGV2aWNlKHNwaV9pbmZvX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0RJU19ERVY6DQorICAgICAgICBkd19zcGlfZGlzYWJsZV9kZXZpY2Uoc3BpX2luZm9fcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfUkVTRVQ6DQorICAgICAgICBkd19zcGlfcmVzZXRfZGV2aWNlKHNwaV9pbmZvX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0ZMVVNIX1RYOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICAgICAgZHdfc3BpX2ZsdXNoX3R4KHNwaV9yZWdfcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfRkxVU0hfUlg6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorICAgICAgICBkd19zcGlfZmx1c2hfcngoc3BpX3JlZ19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfREZTOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKHZhbDMyID4gMCwgRV9QQVIpOw0KKw0KKyAgICAgICAgaWYgKGR3X3NwaV9zZXRfZGZzKHNwaV9yZWdfcHRyLCB2YWwzMikgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzcGlfaW5mb19wdHItPmRmcyA9IHZhbDMyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBFX1NZUzsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX0RVTU1ZX0RBVEE6DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+ZHVtbXkgPSB2YWwzMjsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfR0VUX1JYQVZBSUw6IC8qIE5vdGljZSBpbiBieXRlcyB1bml0ICovDQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICAqKChpbnQzMl90ICopcGFyYW0pID0gZHdfc3BpX2dldF9yeGF2YWlsKHNwaV9jdHJsX3B0cikgKiBkd19zcGlfbmJ5dGVzKHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfR0VUX1RYQVZBSUw6IC8qIE5vdGljZSBpbiBieXRlcyB1bml0ICovDQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICAqKChpbnQzMl90ICopcGFyYW0pID0gZHdfc3BpX2dldF90eGF2YWlsKHNwaV9jdHJsX3B0cikgKiBkd19zcGlfbmJ5dGVzKHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX1RYQ0I6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy50eF9jYiA9IHBhcmFtOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfUlhDQjoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zcGlfY2JzLnJ4X2NiID0gcGFyYW07DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9YRkVSQ0I6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy54ZmVyX2NiID0gcGFyYW07DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9FUlJDQjoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgc3BpX2luZm9fcHRyLT5zcGlfY2JzLmVycl9jYiA9IHBhcmFtOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9BQk9SVF9UWDoNCisgICAgICAgIGVyY2QgPSBkd19zcGlfYWJvcnRfdHgoc3BpX29iaik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX0FCT1JUX1JYOg0KKyAgICAgICAgZXJjZCA9IGR3X3NwaV9hYm9ydF9yeChzcGlfb2JqKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfQUJPUlRfWEZFUjoNCisgICAgICAgIGVyY2QgPSBkd19zcGlfYWJvcnRfeGZlcihzcGlfb2JqKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfU0VUX1RYSU5UOg0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorDQorICAgICAgICBpZiAodmFsMzIgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1NORCk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IGR3X3NwaV9lbmFfY2JyKHNwaV9pbmZvX3B0ciwgRFdfU1BJX1JEWV9TTkQpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfUlhJTlQ6DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisNCisgICAgICAgIGlmICh2YWwzMiA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfUkNWKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gZHdfc3BpX2VuYV9jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1JDVik7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTUElfQ01EX1NFVF9UWElOVF9CVUY6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisNCisgICAgICAgIGlmIChwYXJhbSAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGRldmJ1ZiA9IChERVZfQlVGRkVSICopcGFyYW07DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRihzcGlfeGZlciwgZGV2YnVmLT5idWYsIDAsIGRldmJ1Zi0+bGVuKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKHNwaV94ZmVyLCBOVUxMLCBkZXZidWYtPmxlbiwgMCk7DQorICAgICAgICAgICAgREVWX1NQSV9YRkVSX1NFVF9ORVhUKHNwaV94ZmVyLCBOVUxMKTsNCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKGR3X3NwaV9jaGtfeGZlcl9hbGlnbmVkKHNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcykgPT0gMCwgRV9QQVIpOw0KKyAgICAgICAgICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgc3BpX3hmZXIsIHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKHNwaV94ZmVyLCBOVUxMLCAwLCAwKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKHNwaV94ZmVyLCBOVUxMLCAwLCAwKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoc3BpX3hmZXIsIE5VTEwpOw0KKyAgICAgICAgICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgTlVMTCwgc3BpX2luZm9fcHRyLT5kZnMpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9TRVRfUlhJTlRfQlVGOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorDQorICAgICAgICBpZiAocGFyYW0gIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXZidWYgPSAoREVWX0JVRkZFUiAqKXBhcmFtOw0KKyAgICAgICAgICAgIERFVl9TUElfWEZFUl9TRVRfVFhCVUYoc3BpX3hmZXIsIE5VTEwsIGRldmJ1Zi0+bGVuLCAwKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKHNwaV94ZmVyLCBkZXZidWYtPmJ1ZiwgMCwgZGV2YnVmLT5sZW4pOw0KKyAgICAgICAgICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVChzcGlfeGZlciwgTlVMTCk7DQorICAgICAgICAgICAgLyogQ2hlY2sgdHJhbnNmZXIgYWxpZ24gKi8NCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKGR3X3NwaV9jaGtfeGZlcl9hbGlnbmVkKHNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcykgPT0gMCwgRV9QQVIpOw0KKyAgICAgICAgICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgc3BpX3hmZXIsIHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKHNwaV94ZmVyLCBOVUxMLCAwLCAwKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKHNwaV94ZmVyLCBOVUxMLCAwLCAwKTsNCisgICAgICAgICAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoc3BpX3hmZXIsIE5VTEwpOw0KKyAgICAgICAgICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgTlVMTCwgc3BpX2luZm9fcHRyLT5kZnMpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9UUkFOU0ZFUl9QT0xMSU5HOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorDQorICAgICAgICBpZiAocGFyYW0gIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiBDaGVjayB0cmFuc2ZlciBhbGlnbiAqLw0KKyAgICAgICAgICAgIERXX1NQSV9DSEVDS19FWFAoZHdfc3BpX2Noa194ZmVyX2FsaWduZWQoKERFVl9TUElfVFJBTlNGRVIgKilwYXJhbSwgc3BpX2luZm9fcHRyLT5kZnMpID09IDAsIEVfUEFSKTsNCisgICAgICAgICAgICAqc3BpX3hmZXIgPSAqKChERVZfU1BJX1RSQU5TRkVSICopcGFyYW0pOw0KKyAgICAgICAgICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgc3BpX3hmZXIsIHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisgICAgICAgICAgICAvKiBUcmFuc2ZlciBkYXRhIGJ5IHBvbGwgKi8NCisgICAgICAgICAgICBkd19zcGlfcG9sbF90cmFuc2ZlcihzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBFX1BBUjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNQSV9DTURfVFJBTlNGRVJfSU5UOg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorDQorICAgICAgICBpZiAocGFyYW0gIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorICAgICAgICAgICAgLyogQ2hlY2sgdHJhbnNmZXIgYWxpZ24gKi8NCisgICAgICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKGR3X3NwaV9jaGtfeGZlcl9hbGlnbmVkKChERVZfU1BJX1RSQU5TRkVSICopcGFyYW0sIHNwaV9pbmZvX3B0ci0+ZGZzKSA9PSAwLCBFX1BBUik7DQorICAgICAgICAgICAgKnNwaV94ZmVyID0gKigoREVWX1NQSV9UUkFOU0ZFUiAqKXBhcmFtKTsNCisgICAgICAgICAgICBkd19zcGlfaW5pdF90cmFuc2ZlcihzcGlfY3RybF9wdHIsIHNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcyk7DQorICAgICAgICAgICAgLyogVHJhbnNmZXIgZGF0YSBieSBpbnRlcnJ1cHQgKi8NCisgICAgICAgICAgICBlcmNkID0gZHdfc3BpX2VuYV9jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1hGRVIpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfWEZFUik7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgLyogTWFzdGVyIG1vZGUgb25seSBjb21tYW5kcyAqLw0KKyAgICBjYXNlIFNQSV9DTURfTVNUX1NFVF9GUkVROg0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPm1vZGUgPT0gREVWX01BU1RFUl9NT0RFLCBFX05PU1BUKTsNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgICAgIHZhbDMyID0gKHVpbnQzMl90KXBhcmFtOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCh2YWwzMiA+IDAsIEVfUEFSKTsNCisgICAgICAgIGR3X3NwaV9zZXRfZnJlcShzcGlfY3RybF9wdHIsIHZhbDMyKTsNCisgICAgICAgIHNwaV9pbmZvX3B0ci0+ZnJlcSA9IHZhbDMyOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9NU1RfU0VMX0RFVjoNCisgICAgICAgIERXX1NQSV9DSEVDS19FWFAoc3BpX2luZm9fcHRyLT5tb2RlID09IERFVl9NQVNURVJfTU9ERSwgRV9OT1NQVCk7DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9JTl9YRkVSKSA9PSAwLCBFX0NUWCk7DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisNCisgICAgICAgIGlmIChkd19zcGlfc2VsZWN0X3NsYXZlKHNwaV9yZWdfcHRyLCB2YWwzMikgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzcGlfaW5mb19wdHItPnNsYXZlID0gdmFsMzI7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZXJjZCA9IEVfU1lTOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1BJX0NNRF9NU1RfRFNFTF9ERVY6DQorICAgICAgICBEV19TUElfQ0hFQ0tfRVhQKHNwaV9pbmZvX3B0ci0+bW9kZSA9PSBERVZfTUFTVEVSX01PREUsIEVfTk9TUFQpOw0KKyAgICAgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorDQorICAgICAgICBpZiAoZHdfc3BpX2Rlc2VsZWN0X3NsYXZlKHNwaV9yZWdfcHRyLCB2YWwzMikgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzcGlfaW5mb19wdHItPnNsYXZlID0gU1BJX1NMQVZFX05PVF9TRUxFQ1RFRDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBlcmNkID0gRV9TWVM7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgLyogU2xhdmUgbW9kZSBvbmx5IGNvbW1hbmRzICovDQorDQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBlcmNkID0gRV9OT1NQVDsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNlbmQgZGF0YSB0aHJvdWdoIERlc2lnbldhcmUgU1BJDQorICogXHBhcmFtW2luXSAgIHNwaV9vYmogc3BpIG9iamVjdCBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIGRhdGEgICAgcG9pbnRlciB0byBkYXRhIG5lZWQgdG8gc2VuZCBieSBzcGkNCisgKiBccGFyYW1baW5dICAgbGVuIGxlbmd0aCBvZiBkYXRhIHRvIGJlIHNlbnQNCisgKiBccmV0dmFsICA+MCAgQnl0ZSBjb3VudCB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgcG9sbCBtZXRob2QNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX0NUWCAgIERldmljZSBpcyBzdGlsbCBpbiB0cmFuc2ZlciBzdGF0ZQ0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ2FuJ3Qgd3JpdGUgZGF0YSB0byBoYXJkd2FyZSBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqLw0KK2ludDMyX3QgZHdfc3BpX3dyaXRlKERFVl9TUEkgKnNwaV9vYmosIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyID0gJihzcGlfb2JqLT5zcGlfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19TUElfSU5GT19PQkpFQ1Qoc3BpX2luZm9fcHRyKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX0NMU0VEKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChzcGlfaW5mb19wdHItPnN0YXR1cyAmIERFVl9FTkFCTEVELCBFX1NZUyk7DQorICAgIERXX1NQSV9DSEVDS19FWFAoKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0lOX1hGRVIpID09IDAsIEVfQ1RYKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChkYXRhICE9IE5VTEwsIEVfUEFSKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUChsZW4gPiAwLCBFX1BBUik7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICBEV19TUElfQ1RSTCAqc3BpX2N0cmxfcHRyID0gKERXX1NQSV9DVFJMX1BUUikoc3BpX2luZm9fcHRyLT5zcGlfY3RybCk7DQorICAgIERFVl9TUElfVFJBTlNGRVIgc3BpX3hmZXI7DQorDQorICAgIC8qIE1hc3RlciBhbmQgU2xhdmUgdHJhbnNtaXQgKi8NCisgICAgREVWX1NQSV9YRkVSX1NFVF9UWEJVRigmc3BpX3hmZXIsIGRhdGEsIDAsIGxlbik7DQorICAgIERFVl9TUElfWEZFUl9TRVRfUlhCVUYoJnNwaV94ZmVyLCBOVUxMLCBsZW4sIDApOw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX05FWFQoJnNwaV94ZmVyLCBOVUxMKTsNCisNCisgICAgLyogQ2hlY2sgdHJhbnNmZXIgYWxpZ24gKi8NCisgICAgRFdfU1BJX0NIRUNLX0VYUChkd19zcGlfY2hrX3hmZXJfYWxpZ25lZCgmc3BpX3hmZXIsIHNwaV9pbmZvX3B0ci0+ZGZzKSA9PSAwLCBFX1BBUik7DQorDQorICAgIGR3X3NwaV9pbml0X3RyYW5zZmVyKHNwaV9jdHJsX3B0ciwgJnNwaV94ZmVyLCBzcGlfaW5mb19wdHItPmRmcyk7DQorDQorICAgIGVyY2QgPSBkd19zcGlfcG9sbF90cmFuc2ZlcihzcGlfaW5mb19wdHIpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICByZWFkIGRhdGEgdGhyb3VnaCBEZXNpZ25XYXJlIFNQSQ0KKyAqIFxwYXJhbVtpbl0gICBzcGlfaW5mb19wdHIgICAgc3BpIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW291dF0gIGRhdGEgICAgICAgIGRhdGEgdGhhdCBuZWVkIHRvIHJlYWQgKGRhdGEgbXVzdCBiZSBjaGFyIHR5cGUpDQorICogXHBhcmFtW2luXSAgIGxlbiAgICAgZGF0YSBjb3VudCBuZWVkIHRvIHJlYWQNCisgKiBccmV0dmFsICA+PTAgICAgIGRhdGEgaGF2ZSBiZWVuIHJlYWQNCisgKiBccmV0dmFsICBFX1BBUiAgICAgICBhcmd1bWVudHMgcGFzc2VkIHdhcyB3cm9uZw0KKyAqIFxyZXR2YWwgIEVfT0JKICAgICAgIHNwaSBoYXMgc29tZXRoaW5nIGVycm9yLCBub3RoaW5nIGNhbiBiZSBkb25lDQorICogXHJldHZhbCAgRV9DTFNFRCAgICAgc3BpIHdhcyBjbG9zZWQsIG5vdCBhdmFpbGFibGUgZm9yIGNvbnRyb2wNCisgKiBccmV0dmFsICA8MCAgICAgIG90aGVyIGVycm9yIGNvZGUgbm90IGRlZmluZWQgaGVyZQ0KKyAqLw0KK2ludDMyX3QgZHdfc3BpX3JlYWQoREVWX1NQSSAqc3BpX29iaiwgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1NQSV9JTkZPX09CSkVDVChzcGlfaW5mb19wdHIpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKHNwaV9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfQ0xTRUQpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKHNwaV9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0VOQUJMRUQsIEVfU1lTKTsNCisgICAgRFdfU1BJX0NIRUNLX0VYUCgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBERVZfSU5fWEZFUikgPT0gMCwgRV9DVFgpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKGRhdGEgIT0gTlVMTCwgRV9QQVIpOw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKGxlbiA+IDAsIEVfUEFSKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIERXX1NQSV9DVFJMICpzcGlfY3RybF9wdHIgPSAoRFdfU1BJX0NUUkxfUFRSKShzcGlfaW5mb19wdHItPnNwaV9jdHJsKTsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiBzcGlfeGZlcjsNCisNCisgICAgLyogTWFzdGVyIGFuZCBTbGF2ZSB0cmFuc21pdCAqLw0KKyAgICBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKCZzcGlfeGZlciwgTlVMTCwgbGVuLCAwKTsNCisgICAgREVWX1NQSV9YRkVSX1NFVF9SWEJVRigmc3BpX3hmZXIsIGRhdGEsIDAsIGxlbik7DQorICAgIERFVl9TUElfWEZFUl9TRVRfTkVYVCgmc3BpX3hmZXIsIE5VTEwpOw0KKw0KKyAgICAvKiBDaGVjayB0cmFuc2ZlciBhbGlnbiAqLw0KKyAgICBEV19TUElfQ0hFQ0tfRVhQKGR3X3NwaV9jaGtfeGZlcl9hbGlnbmVkKCZzcGlfeGZlciwgc3BpX2luZm9fcHRyLT5kZnMpID09IDAsIEVfUEFSKTsNCisNCisgICAgZHdfc3BpX2luaXRfdHJhbnNmZXIoc3BpX2N0cmxfcHRyLCAmc3BpX3hmZXIsIHNwaV9pbmZvX3B0ci0+ZGZzKTsNCisNCisgICAgZXJjZCA9IGR3X3NwaV9wb2xsX3RyYW5zZmVyKHNwaV9pbmZvX3B0cik7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGludGVycnVwdCBwcm9jZXNzaW5nIHJvdXRpbmUNCisgKiBccGFyYW1baW5dICAgc3BpX2luZm9fcHRyICAgIERFVl9TUElfSU5GTyAqc3BpX2luZm9fcHRyDQorICogXHBhcmFtW2luXSAgIHB0ciAgICAgZXh0cmEgaW5mb3JtYXRpb24NCisgKi8NCit2b2lkIGR3X3NwaV9pc3IoREVWX1NQSSAqc3BpX29iaiwgdm9pZCAqcHRyKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1NQSV9JTkZPICpzcGlfaW5mb19wdHIgPSAmKHNwaV9vYmotPnNwaV9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1NQSV9JTkZPX09CSkVDVChzcGlfaW5mb19wdHIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgRFdfU1BJX0NUUkwgKnNwaV9jdHJsX3B0ciA9IChEV19TUElfQ1RSTF9QVFIpKHNwaV9pbmZvX3B0ci0+c3BpX2N0cmwpOw0KKyAgICBEV19TUElfUkVHICpzcGlfcmVnX3B0ciA9IChEV19TUElfUkVHICopKHNwaV9jdHJsX3B0ci0+ZHdfc3BpX3JlZ3MpOw0KKw0KKyAgICB1aW50MzJfdCBpc3Jfc3RhdHVzOw0KKw0KKyAgICBpc3Jfc3RhdHVzID0gc3BpX3JlZ19wdHItPklTUjsNCisNCisgICAgaWYgKCFpc3Jfc3RhdHVzKSB7IHJldHVybjsgfQ0KKw0KKyAgICBpZiAoc3BpX2N0cmxfcHRyLT5kd194ZmVyLnhmZXJfbGVuID09IDApDQorICAgIHsNCisgICAgICAgIGR3X3NwaV9kaXNhYmxlX2ludGVycnVwdChzcGlfaW5mb19wdHIpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaWYgKGlzcl9zdGF0dXMgJiAoRFdfU1BJX0lNUl9UWE9JTSB8IERXX1NQSV9JTVJfUlhPSU0gfCBEV19TUElfSU1SX1JYVUlNKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd19zcGlfY2xlYXJfaW50ZXJydXB0X2FsbChzcGlfcmVnX3B0cik7DQorICAgICAgICAgICAgZHdfc3BpX2Rpc2FibGVfaW50ZXJydXB0KHNwaV9pbmZvX3B0cik7DQorDQorICAgICAgICAgICAgaWYgKHNwaV9pbmZvX3B0ci0+c3BpX2Nicy5lcnJfY2IpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzcGlfaW5mb19wdHItPnNwaV9jYnMuZXJyX2NiKHNwaV9vYmopOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBtZW1zZXQoJihzcGlfY3RybF9wdHItPmR3X3hmZXIpLCAwLCBzaXplb2YoRFdfU1BJX1RSQU5TRkVSKSk7DQorICAgICAgICB9DQorDQorICAgICAgICBkd19zcGlfcmVhZGVyKHNwaV9pbmZvX3B0cik7DQorDQorICAgICAgICBpZiAoaXNyX3N0YXR1cyAmIERXX1NQSV9JTVJfVFhFSU0pDQorICAgICAgICB7DQorICAgICAgICAgICAgZHdfc3BpX3dyaXRlcihzcGlfaW5mb19wdHIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGR3X3NwaV94ZmVyX2VuZChzcGlfY3RybF9wdHIpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgPT0gRFdfU1BJX0lOX1RYKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1NORCk7DQorDQorICAgICAgICAgICAgICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMudHhfY2IpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy50eF9jYihzcGlfb2JqKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIGlmICgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgPT0gRFdfU1BJX0lOX1JYKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZHdfc3BpX2Rpc19jYnIoc3BpX2luZm9fcHRyLCBEV19TUElfUkRZX1JDVik7DQorDQorICAgICAgICAgICAgICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMucnhfY2IpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNwaV9pbmZvX3B0ci0+c3BpX2Nicy5yeF9jYihzcGlfb2JqKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIGlmICgoc3BpX2luZm9fcHRyLT5zdGF0dXMgJiBEV19TUElfSU5fWEZFUikgPT0gRFdfU1BJX0lOX1hGRVIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBkd19zcGlfZGlzX2NicihzcGlfaW5mb19wdHIsIERXX1NQSV9SRFlfWEZFUik7DQorDQorICAgICAgICAgICAgICAgIGlmIChzcGlfaW5mb19wdHItPnNwaV9jYnMueGZlcl9jYikNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc3BpX2luZm9fcHRyLT5zcGlfY2JzLnhmZXJfY2Ioc3BpX29iaik7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZHdfc3BpX2Rpc2FibGVfaW50ZXJydXB0KHNwaV9pbmZvX3B0cik7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1lbXNldCgmKHNwaV9jdHJsX3B0ci0+ZHdfeGZlciksIDAsIHNpemVvZihEV19TUElfVFJBTlNGRVIpKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybjsNCit9DQorLyoqIEB9ICovIC8qIERFVklDRV9EV19TUElfSU1QTEVNRU5UICovDQorDQorLyoqIEB9ICovIC8qIERFVklDRV9EV19TUEkgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaS5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTAxMTgwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGkuaApAQCAtMCwwICsxLDE5MiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNC0wNi0yNQ0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGRyaXZlciBoZWFkZXIgZmlsZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19TUEkNCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfRFdfU1BJX0hfDQorI2RlZmluZSBfREVWSUNFX0RXX1NQSV9IXw0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3NwaS5oIg0KKw0KKy8qKg0KKyAqIGlmIHRoaXMgaGVhZGVyIGZpbGUgaXMgaW5jbHVkZWQsDQorICogd2lsbCBpbmRpY2F0ZSB0aGF0IHRoaXMgZGVzaWdud2FyZSBzcGkgZGV2aWNlDQorICogaXMgdXNlZA0KKyAqLw0KKyNkZWZpbmUgREVWSUNFX1VTRV9ERVNJR05XQVJFX1NQSQ0KKw0KKyNkZWZpbmUgRFdfU1BJX0lOX0ZSRUUgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAvKiE8IEN1cnJlbnRseSBub3QgaW4gc3BpIHRyYW5zZmVyICovDQorI2RlZmluZSBEV19TUElfSU5fWEZFUiAgICAgICAgICAoREVWX0lOX1RYfERFVl9JTl9SWHxERVZfSU5fWEZFUikgICAvKiE8IEN1cnJlbnRseSBpbiBzcGkgdHJhbnNmZXIgKi8NCisjZGVmaW5lIERXX1NQSV9JTl9UWCAgICAgICAgICAgIChERVZfSU5fVFh8REVWX0lOX1hGRVIpICAgICAgICAgLyohPCBDdXJyZW50bHkgaW4gc3BpIHR4ICovDQorI2RlZmluZSBEV19TUElfSU5fUlggICAgICAgICAgICAoREVWX0lOX1JYfERFVl9JTl9YRkVSKSAgICAgICAgIC8qITwgQ3VycmVudGx5IGluIHNwaSByeCAqLw0KKw0KKyNkZWZpbmUgRFdfU1BJX0dJTlRfRElTQUJMRUQgICAgICAgICgwKSAgICAgLyohPCBkZXNpZ253YXJlIGludGVycnVwdCBkaXNhYmxlZCBmb3IgY29udHJvbCBpaWMgaXJxL2ZpcSAqLw0KKyNkZWZpbmUgRFdfU1BJX0dJTlRfRU5BQkxFICAgICAgKDE8PDApICAgICAgLyohPCBkZXNpZ253YXJlIGludGVycnVwdCBlbmFibGVkIGZvciBjb250cm9sIGlpYyBpcnEvZmlxICovDQorDQorI2RlZmluZSBEV19TUElfTUFTVEVSX1NVUFBPUlRFRCAgICAgKDB4MSkgICAvKiE8IFN1cHBvcnQgRGVzaWdud2FyZSBTUEkgTWFzdGVyIE1vZGUgKi8NCisjZGVmaW5lIERXX1NQSV9TTEFWRV9TVVBQT1JURUQgICAgICAoMHgyKSAgIC8qITwgU3VwcG9ydCBEZXNpZ253YXJlIFNQSSBTbGF2ZSBNb2RlICovDQorLyohPCBTdXBwb3J0IERlc2lnbndhcmUgU1BJIEJvdGggTWFzdGVyIGFuZCBTbGF2ZSBNb2RlICovDQorI2RlZmluZSBEV19TUElfQk9USF9TVVBQT1JURUQgICAgICAgKERXX1NQSV9NQVNURVJfU1VQUE9SVEVEfERXX1NQSV9TTEFWRV9TVVBQT1JURUQpDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9EV19TUElfUkVHU1RSVUNUICAgICBEZXNpZ25XYXJlIFNQSSBSZWdpc3RlciBTdHJ1Y3R1cmUNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfU1BJDQorICogXGJyaWVmICAgY29udGFpbnMgZGVmaW5pdGlvbnMgb2YgRGVzaWduV2FyZSBTUEkgcmVnaXN0ZXIgc3RydWN0dXJlLg0KKyAqIFxkZXRhaWxzIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIERlc2lnbldhcmUgU1BJIHJlZ2lzdGVyIGluZm9ybWF0aW9uDQorICogQHsNCisgKi8NCisvKioNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSByZWdpc3RlciBzdHJ1Y3R1cmUNCisgKiBcZGV0YWlscyBEZXRhaWxlZCBzdHJ1Y3QgZGVzY3JpcHRpb24gb2YgRGVzaWduV2FyZSBTUEkNCisgKiAgYmxvY2sgcmVnaXN0ZXIgaW5mb3JtYXRpb24sIGltcGxlbWVudGF0aW9uIG9mIGRldl9zcGlfaW5mbzo6c3BpX3JlZ3MNCisgKi8NCit0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBkd19zcGlfcmVnDQorew0KKyAgICAvKiE8IENvbnRyb2wgUmVnaXN0ZXIgKi8NCisgICAgLyohPCBTUEkgQ29udHJvbCBSZWdpc3RlciAwICAoMHgwKSAqLw0KKyAgICB1aW50MzJfdCBDVFJMUjA7DQorICAgIC8qITwgU1BJIENvbnRyb2wgUmVnaXN0ZXIgMSAgKDB4NCkgKi8NCisgICAgdWludDMyX3QgQ1RSTFIxOw0KKyAgICAvKiE8IEVuYWJsZSBSZWdpc3RlciAqLw0KKyAgICAvKiE8IFNQSSBFbmFibGUgUmVnaXN0ZXIgICgweDgpICovDQorICAgIHVpbnQzMl90IFNTSUVOUjsNCisgICAgLyohPCBTUEkgTWljcm93aXJlIENvbnRyb2wgUmVnaXN0ZXIgICgweEMpICovDQorICAgIHVpbnQzMl90IE1XQ1I7DQorICAgIC8qITwgU1BJIFNsYXZlIEVuYWJsZSBSZWdpc3RlciAgKDB4MTApICovDQorICAgIHVpbnQzMl90IFNFUjsNCisgICAgLyohPCBTUEkgQmF1ZCBSYXRlIFNlbGVjdCBSZWdpc3RlciAgKDB4MTQpICovDQorICAgIHVpbnQzMl90IEJBVURSOw0KKyAgICAvKiE8IFRYIGFuZCBSWCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8NCisgICAgLyohPCBTUEkgVHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgTGV2ZWwgUmVnaXN0ZXIgICgweDE4KSAqLw0KKyAgICB1aW50MzJfdCBUWEZUTFI7DQorICAgIC8qITwgU1BJIFJlY2VpdmUgIEZJRk8gVGhyZXNob2xkIExldmVsIFJlZ2lzdGVyICAoMHgxQykgKi8NCisgICAgdWludDMyX3QgUlhGVExSOw0KKyAgICAvKiE8IFNQSSBUcmFuc21pdCBGSUZPIExldmVsIFJlZ2lzdGVyICAoMHgyMCkgKi8NCisgICAgdWludDMyX3QgVFhGTFI7DQorICAgIC8qITwgU1BJIFJlY2VpdmUgIEZJRk8gTGV2ZWwgUmVnaXN0ZXIgICgweDI0KSAqLw0KKyAgICB1aW50MzJfdCBSWEZMUjsNCisgICAgLyohPCBTUEkgU3RhdHVzICAgUmVnaXN0ZXIgICgweDI4KSAqLw0KKyAgICB1aW50MzJfdCBTUjsNCisgICAgLyohPCBJbnRlcnJ1cHQgRW5hYmxlL0Rpc2FibGUvQ29udHJvbCBSZWdpc3RlcnMgKi8NCisgICAgLyohPCBTUEkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgICgweDJDKSAqLw0KKyAgICB1aW50MzJfdCBJTVI7DQorICAgIC8qITwgU1BJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICgweDMwKSAqLw0KKyAgICB1aW50MzJfdCBJU1I7DQorICAgIC8qITwgU1BJIFJhdyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICgweDM0KSAqLw0KKyAgICB1aW50MzJfdCBSSVNSOw0KKyAgICAvKiE8IFNQSSBUcmFuc21pdCBGSUZPIE92ZXJmbG93IEludGVycnVwdCBDbGVhciBSZWdpc3RlciAgKDB4MzgpICovDQorICAgIHVpbnQzMl90IFRYT0lDUjsNCisgICAgLyohPCBTUEkgUmVjZWl2ZSAgRklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgICgweDNDKSAqLw0KKyAgICB1aW50MzJfdCBSWE9JQ1I7DQorICAgIC8qITwgU1BJIFJlY2VpdmUgRklGTyBVbmRlcmZsb3cgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICAoMHg0MCkgKi8NCisgICAgdWludDMyX3QgUlhVSUNSOw0KKyAgICAvKiE8IFNQSSBNdWx0aS1NYXN0ZXIgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICAoMHg0NCkgKi8NCisgICAgdWludDMyX3QgTVNUSUNSOw0KKyAgICAvKiE8IFNQSSBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgICgweDQ4KSAqLw0KKyAgICB1aW50MzJfdCBJQ1I7DQorICAgIC8qITwgRE1BIENvbnRyb2wgUmVnaXN0ZXIgICgweDRDKSAqLw0KKyAgICB1aW50MzJfdCBETUFDUjsNCisgICAgLyohPCBETUEgVHJhbnNtaXQgRGF0YSBMZXZlbCAgKDB4NTApICovDQorICAgIHVpbnQzMl90IERNQVRETFI7DQorICAgIC8qITwgRE1BIFJlY2VpdmUgRGF0YSBMZXZlbCAgKDB4NTQpICovDQorICAgIHVpbnQzMl90IERNQVJETFI7DQorICAgIC8qITwgU1BJIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICAoMHg1OCkgKi8NCisgICAgdWludDMyX3QgSURSOw0KKyAgICAvKiE8IFNQSSBDb3JlS2l0IElEIFJlZ2lzdGVyIChWYWx1ZSBhZnRlciBSZXNldCA6IDB4MzMzMjMyMkEpICAoMHg1QykgKi8NCisgICAgdWludDMyX3QgU1NJX1ZFUl9JRDsNCisgICAgLyohPCBEYXRhIFJlZ2lzdGVyICovDQorICAgIC8qITwgU1BJIERBVEEgUmVnaXN0ZXIgZm9yIGJvdGggUmVhZCBhbmQgV3JpdGUgICgweDYwKSAqLw0KKyAgICB1aW50MzJfdCBEQVRBUkVHOw0KK30gRFdfU1BJX1JFRywgKkRXX1NQSV9SRUdfUFRSOw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBEZXNpZ253YXJlIFNQSSBNZXNzYWdlIFRyYW5zZmVyICovDQordHlwZWRlZiBzdHJ1Y3QgZHdfc3BpX3RyYW5zZmVyDQorew0KKyAgICB1aW50MzJfdCB4ZmVyX2xlbjsNCisgICAgdWludDMyX3QgdHhfaWR4Ow0KKyAgICB1aW50MzJfdCByeF9pZHg7DQorICAgIHVpbnQzMl90IG5ieXRlczsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiAqdHhfeGZlcjsNCisgICAgREVWX1NQSV9UUkFOU0ZFUiAqcnhfeGZlcjsNCit9IERXX1NQSV9UUkFOU0ZFUiwgKkRXX1NQSV9UUkFOU0ZFUl9QVFI7DQorDQorLyoqDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgY29udHJvbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAqIFxkZXRhaWxzIGltcGxlbWVudCBvZiBkZXZfc3BpX2luZm86OmRldl9zcGlfaW5mbw0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGR3X3NwaV9jdHJsDQorew0KKyAgICBEV19TUElfUkVHICpkd19zcGlfcmVnczsgICAgLyohPCBzcGkgcmVnaXN0ZXIgKi8NCisgICAgLyogVmFyaWFibGVzIHdoaWNoIHNob3VsZCBiZSBzZXQgZHVyaW5nIG9iamVjdCBpbXBsZW1lbnRhdGlvbiAqLw0KKyAgICB1aW50MzJfdCBzdXBwb3J0X21vZGVzOyAgICAgLyohPCBzdXBwb3J0ZWQgc3BpIG1vZGVzICovDQorICAgIHVpbnQzMl90IGludG5vOyAgICAgICAgIC8qITwgaW50ZXJydXB0IG5vICovDQorICAgIHVpbnQzMl90IGR3X2FwYl9idXNfZnJlcTsgICAvKiE8IHNwaSBpcCBhcGIgYnVzIGZyZXF1ZW5jeSAqLw0KKyAgICB1aW50MzJfdCB0eF9maWZvX2xlbjsgICAgICAgLyohPCB0cmFuc21pdCBmaWZvIGxlbmd0aCAqLw0KKyAgICB1aW50MzJfdCByeF9maWZvX2xlbjsgICAgICAgLyohPCByZWNlaXZlIGZpZm8gbGVuZ3RoICovDQorICAgIElOVF9IQU5ETEVSIGR3X3NwaV9pbnRfaGFuZGxlcjsgLyohPCBzcGkgaW50ZXJydXB0IGhhbmRsZXIgKi8NCisgICAgLyogVmFyaWFibGVzIHdoaWNoIGFsd2F5cyBjaGFuZ2UgZHVyaW5nIGlpYyBvcGVyYXRpb24gKi8NCisgICAgdWludDMyX3QgaW50X3N0YXR1czsgICAgICAgIC8qITwgaWljIGludGVycnVwdCBzdGF0dXMgKi8NCisgICAgRFdfU1BJX1RSQU5TRkVSIGR3X3hmZXI7ICAgIC8qITwgZGVzaWdud2FyZSBzcGkgdHJhbnNmZXIgKi8NCit9IERXX1NQSV9DVFJMLCAqRFdfU1BJX0NUUkxfUFRSOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfU1BJX0ZVTkNETFIgICAgICAgRGVzaWduV2FyZSBTUEkgRnVuY3Rpb24gRGVjbGFyYXRpb24NCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfU1BJDQorICogXGJyaWVmICAgY29udGFpbnMgZGVjbGFyYXRpb25zIG9mIGRlc2lnbndhcmUgc3BpIGZ1bmN0aW9ucy4NCisgKiBcZGV0YWlscyBUaGlzIGFyZSBvbmx5IHVzZWQgaW4gXHJlZiBkd19zcGlfb2JqLmMNCisgKiBAew0KKyAqLw0KK2V4dGVybiBpbnQzMl90IGR3X3NwaV9vcGVuKERFVl9TUEkgKnNwaV9vYmosIHVpbnQzMl90IG1vZGUsIHVpbnQzMl90IHBhcmFtKTsNCitleHRlcm4gaW50MzJfdCBkd19zcGlfY2xvc2UoREVWX1NQSSAqc3BpX29iaik7DQorZXh0ZXJuIGludDMyX3QgZHdfc3BpX2NvbnRyb2woREVWX1NQSSAqc3BpX29iaiwgdWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKTsNCitleHRlcm4gaW50MzJfdCBkd19zcGlfd3JpdGUoREVWX1NQSSAqc3BpX29iaiwgY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKTsNCitleHRlcm4gaW50MzJfdCBkd19zcGlfcmVhZChERVZfU1BJICpzcGlfb2JqLCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pOw0KK2V4dGVybiB2b2lkIGR3X3NwaV9pc3IoREVWX1NQSSAqc3BpX29iaiwgdm9pZCAqcHRyKTsNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorLyoqIEB9ICovDQorDQorI2VuZGlmIC8qIF9ERVZJQ0VfRFdfU1BJX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGlfaGFsLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI5ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGlfaGFsLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTQtMDYtMjUNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfU1BJDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgZHJpdmVyIGhhcmR3YXJlIGRlc2NyaXB0aW9uIHJlbGF0ZWQgaGVhZGVyIGZpbGUNCisgKiBcZGV0YWlscyBkZXRhaWxlZCBoYXJkd2FyZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIERlc2lnbldhcmUgU1BJIGRyaXZlcg0KKyAqLw0KKw0KKyNpZm5kZWYgX0RFVklDRV9EV19TUElfSEFMX0hfDQorI2RlZmluZSBfREVWSUNFX0RXX1NQSV9IQUxfSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvc3BpL2R3X3NwaV9oYWxfY2ZnLmgiDQorDQorLyogRFcgQVBCIFNQSSBiaXQgZGVmaW5pdGlvbnMgKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFNQSSBIQUwgQ1RSTDAgTWFjcm9zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgaGFsIGN0cmwwIG1hY3JvcywNCisgKiAgaW5jbHVkZSBkZnMsIHNjcGgsIHNjcHBsLCB0bW9kLCBldGMNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9ERlNfTUFTSyAgICAgICAgICAoMHhmKQ0KKw0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9TQ19PRlMgICAgICAgICAgICAoNikNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfU0NfTUFTSyAgICAgICAgICAgKDB4QzApDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX1NDUEhfSElHSCAgICAgICAgICgweDQwKQ0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9TQ1BIX0xPVyAgICAgICAgICAoMCkNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfU0NQT0xfSElHSCAgICAgICAgKDB4ODApDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX1NDUE9MX0xPVyAgICAgICAgICgwKQ0KKw0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9UTU9EX01BU0sgICAgICAgICAoMHgzMDApDQorI2RlZmluZSBEV19TUElfVE1PRF9UUkFOU01JVF9SRUNFSVZFICAgICAgICAoMCkNCisjZGVmaW5lIERXX1NQSV9UTU9EX1RSQU5TTUlUX09OTFkgICAgICAgKDB4MTAwKQ0KKyNkZWZpbmUgRFdfU1BJX1RNT0RfUkVDRUlWRV9PTkxZICAgICAgICAoMHgyMDApDQorI2RlZmluZSBEV19TUElfVE1PRF9FRVBST01fUkVBRF9PTkxZICAgICAgICAoMHgzMDApDQorDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX0ZSRl9NT1RPUk9MQSAgICAgICgweDApDQorI2RlZmluZSBEV19TUElfQ1RSTFIwX0ZSRl9USSAgICAgICAgICAgICgweDEwKQ0KKyNkZWZpbmUgRFdfU1BJX0NUUkxSMF9GUkZfTUlDUk9XSVJFICAgICAoMHgyMCkNCisNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfU0xWX09FX0RJU0FCTEUgICAgICAgICgxPDwxMCkNCisjZGVmaW5lIERXX1NQSV9DVFJMUjBfU0xWX09FX0VOQUJMRSAgICAgKDApDQorDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBTUEkgSEFMIElTUiBGbGFncw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgU1BJIGhhbCBJbnRlcnJ1cHQgU3RhdHVzIEZsYWdzDQorICogQHsNCisgKi8NCisjZGVmaW5lIERXX1NQSV9UWF9PVkVSRkxPV19FUlJPUiAgICAgICAgKDB4MikNCisjZGVmaW5lIERXX1NQSV9SWF9VTkRFUkZMT1dfRVJST1IgICAgICAgKDB4NCkNCisjZGVmaW5lIERXX1NQSV9SWF9PVkVSRkxPV19FUlJPUiAgICAgICAgKDB4OCkNCisNCisjZGVmaW5lIERXX1NQSV9JU1JfUlhfRklGT19JTlRfTUFTSyAgICAgKDB4MTApDQorI2RlZmluZSBEV19TUElfSVNSX1RYX0ZJRk9fSU5UX01BU0sgICAgICgweDEpDQorI2RlZmluZSBEV19TUElfSVNSX1RYX09WRVJGTE9XX0lOVF9NQVNLICAgICAoMHgyKQ0KKyNkZWZpbmUgRFdfU1BJX0lTUl9SWF9VTkRFUkZMT1dfSU5UX01BU0sgICAgKDB4NCkNCisjZGVmaW5lIERXX1NQSV9JU1JfUlhfT1ZFUkZMT1dfSU5UX01BU0sgICAgICgweDgpDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBTUEkgSEFMIFNSIEZsYWdzDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgaGFsIFN0YXR1cyBGbGFncw0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19TUElfU1JfRENPTCAgICAgICAgICAgICAgKDB4NDApDQorI2RlZmluZSBEV19TUElfU1JfVFhFICAgICAgICAgICAgICAgKDB4MjApDQorI2RlZmluZSBEV19TUElfU1JfUkZGICAgICAgICAgICAgICAgKDB4MTApDQorI2RlZmluZSBEV19TUElfU1JfUkZORSAgICAgICAgICAgICAgKDB4OCkNCisjZGVmaW5lIERXX1NQSV9TUl9URkUgICAgICAgICAgICAgICAoMHg0KQ0KKyNkZWZpbmUgRFdfU1BJX1NSX1RGTkYgICAgICAgICAgICAgICgweDIpDQorI2RlZmluZSBEV19TUElfU1JfQlVTWSAgICAgICAgICAgICAgKDB4MSkNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFNQSSBIQUwgU1NJIEVuYWJsZSBNYWNyb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFNQSSBoYWwgc3NpIGVuYWJsZSBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIE1hY3JvcyAqLw0KKyNkZWZpbmUgRFdfU1BJX1NTSV9FTkFCTEUgICAgICAgICAgICgxKSAvKiE8IFNTSSBFbmFibGUgKi8NCisjZGVmaW5lIERXX1NQSV9TU0lfRElTQUJMRSAgICAgICAgICAoMCkgLyohPCBTU0kgRGlzYWJsZSAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgU1BJIEhBTCBJTVIgTWFjcm9zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgaGFsIGludGVycnVwdCBtYXNrIG1hY3Jvcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBEV19TUElfSU1SX01TVElNICAgICAgICAgICAgKDB4MjApICAvKiE8IE11bHRpLU1hc3RlciBDb250ZW50aW9uIEludGVycnVwdCBNYXNrICovDQorI2RlZmluZSBEV19TUElfSU1SX1JYRklNICAgICAgICAgICAgKDB4MTApICAvKiE8IFJlY2VpdmUgRklGTyBGdWxsIEludGVycnVwdCBNYXNrICovDQorI2RlZmluZSBEV19TUElfSU1SX1JYT0lNICAgICAgICAgICAgKDB4MDgpICAvKiE8IFJlY2VpdmUgRklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgTWFzayAqLw0KKyNkZWZpbmUgRFdfU1BJX0lNUl9SWFVJTSAgICAgICAgICAgICgweDA0KSAgLyohPCBSZWNlaXZlIEZJRk8gVW5kZXJmbG93IEludGVycnVwdCBNYXNrICovDQorI2RlZmluZSBEV19TUElfSU1SX1RYT0lNICAgICAgICAgICAgKDB4MDIpICAvKiE8IFRyYW5zbWl0IEZJRk8gT3ZlcmZsb3cgSW50ZXJydXB0IE1hc2sgKi8NCisjZGVmaW5lIERXX1NQSV9JTVJfVFhFSU0gICAgICAgICAgICAoMHgwMSkgIC8qITwgVHJhbnNtaXQgRklGTyBFbXB0eSBJbnRlcnJ1cHQgTWFzayAqLw0KKw0KKyNkZWZpbmUgRFdfU1BJX0lNUl9YRkVSICAgICAgICAgICAgIChEV19TUElfSU1SX1RYRUlNfERXX1NQSV9JTVJfUlhGSU18RFdfU1BJX0lNUl9UWE9JTXxEV19TUElfSU1SX1JYT0lNfERXX1NQSV9JTVJfUlhVSU0pDQorLyoqIEB9ICovDQorDQorI2RlZmluZSBEV19TUElfU1NJX0lETEUgICAgICAgICAgICAgKDEpDQorI2RlZmluZSBEV19TUElfU1BJX1RSQU5TTUlUICAgICAgICAgKDEpDQorI2RlZmluZSBEV19TUElfU1BJX1JFQ0VJVkUgICAgICAgICAgKDIpDQorI2RlZmluZSBEV19TUElfU1NJX01BU1RFUiAgICAgICAgICAgKDEpDQorI2RlZmluZSBEV19TUElfU1NJX1NMQVZFICAgICAgICAgICAgKDApDQorDQorDQorI2VuZGlmIC8qIF9ERVZJQ0VfRFdfU1BJX0hBTF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbF9jZmcuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS9zcGkvZHdfc3BpX2hhbF9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJjMTBiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3NwaS9kd19zcGlfaGFsX2NmZy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTUtMDktMDkNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfU1BJDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBTUEkgZHJpdmVyIGhhcmR3YXJlIGRlc2NyaXB0aW9uDQorICogIHJlbGF0ZWQgaGVhZGVyIGZpbGUgY29uZmlndXJhdGlvbiBmaWxlDQorICogXGRldGFpbHMgY29uZmlndXJhdGlvbiBmaWxlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHNvbWUgZnVuY3Rpb24gb2Ygc3BpDQorICovDQorDQorI2lmbmRlZiBfREVWSUNFX0RXX1NQSV9IQUxfQ0ZHX0hfDQorI2RlZmluZSBfREVWSUNFX0RXX1NQSV9IQUxfQ0ZHX0hfDQorDQorI2lmbmRlZiBEV19TUElfQ0FMQ19GSUZPX0xFTl9FTkFCTEUNCisjZGVmaW5lIERXX1NQSV9DQUxDX0ZJRk9fTEVOX0VOQUJMRSAgICAgKDEpIC8qITwgRGVmYXVsdGx5IGVuYWJsZSBjYWxjdWxhdGUgZmlmbyBsZW5ndGggKi8NCisjZW5kaWYNCisNCisjaWZuZGVmIERXX1NQSV9NQVhfRklGT19MRU5HVEgNCisjZGVmaW5lIERXX1NQSV9NQVhfRklGT19MRU5HVEggICAgICAgICAgKDI1NikgICAvKiE8IE1heCBGSUZPIGRlcHRoIGZvciBkZXNpZ253YXJlIFNQSSBkZXZpY2UgKi8NCisjZW5kaWYNCisNCisjaWZuZGVmIERXX1NQSV9NSU5fRklGT19MRU5HVEgNCisjZGVmaW5lIERXX1NQSV9NSU5fRklGT19MRU5HVEggICAgICAgICAgKDIpIC8qITwgTWluIEZJRk8gZGVwdGggZm9yIGRlc2lnbndhcmUgU1BJIGRldmljZSAqLw0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfREVWSUNFX0RXX1NQSV9IQUxfQ0ZHX0hfICovDQorDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODNmZjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0LmMKQEAgLTAsMCArMSwxMTE5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTIwDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfVUFSVCAgRGVzaWdud2FyZSBVQVJUIERyaXZlcg0KKyAqIFxpbmdyb3VwIERFVklDRV9EVw0KKyAqIFxicmllZiAgIERlc2lnbndhcmUgVUFSVCBEcml2ZXIgSW1wbGVtZW50YXRpb24NCisgKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9EV19VQVJUDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBkZXZpY2UgaGFsIGxheWVyIGRlZmluaXRpb24gKFxyZWYgZGV2X3VhcnQuaCkNCisgKi8NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfZXJyb3IuaCINCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorDQorI2luY2x1ZGUgImRldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydF9oYWwuaCINCisjaW5jbHVkZSAiZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0LmgiDQorDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIERyaXZlciBNYWNyb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgZHJpdmVyIG1hY3JvcyB1c2VkIGluIHVhcnQgZHJpdmVyDQorICogQHsNCisgKi8NCisvKiogY2hlY2sgZXhwcmVzc2lvbnMgdXNlZCBpbiBEZXNpZ25XYXJlIFVBUlQgZHJpdmVyIGltcGxlbWVudGF0aW9uICovDQorI2RlZmluZSBEV19VQVJUX0NIRUNLX0VYUChFWFBSLCBFUlJPUl9DT0RFKSAgICAgQ0hFQ0tfRVhQKEVYUFIsIGVyY2QsIEVSUk9SX0NPREUsIGVycm9yX2V4aXQpDQorDQorI2lmbmRlZiBESVNBQkxFX0RFVklDRV9PQkpFQ1RfVkFMSURfQ0hFQ0sNCisvKiogdmFsaWQgY2hlY2sgb2YgdWFydCBpbmZvIG9iamVjdCAqLw0KKyNkZWZpbmUgVkFMSURfQ0hLX1VBUlRfSU5GT19PQkpFQ1QodWFydGluZm9fb2JqX3B0cikgICAgICAgIHsgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoKHVhcnRpbmZvX29ial9wdHIpIT1OVUxMLCBFX09CSik7ICAgICAgICAgXA0KKyAgICAgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKCgodWFydGluZm9fb2JqX3B0ciktPnVhcnRfY3RybCkhPU5VTEwsIEVfT0JKKTsgICAgXA0KKyAgICAgICAgfQ0KKyNlbmRpZg0KKw0KKy8qKiBjb252ZXJ0IERlc2lnbldhcmUgYmF1ZHJhdGUgdG8gZGl2aXNvciAqLw0KKyNkZWZpbmUgRFdfVUFSVF9CQVVEMkRJVihwZXJpZnJlcSwgYmF1ZCkgICAgICAgICgocGVyaWZyZXEpIC8gKChiYXVkKSoxNikpDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEludGVycnVwdCBDYWxsYmFjayBSb3V0aW5lIFNlbGVjdCBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaW50ZXJydXB0IGNhbGxiYWNrIHJvdXRpbmVzIHNlbGVjdCBtYWNyb3MgZGVmaW5pdGlvbnMNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9SRFlfU05EICAgICAgICAgICAgICAgICAoMVUpICAgIC8qITwgcmVhZHkgdG8gc2VuZCBjYWxsYmFjayAqLw0KKyNkZWZpbmUgRFdfVUFSVF9SRFlfUkNWICAgICAgICAgICAgICAgICAoMlUpICAgIC8qITwgcmVhZHkgdG8gcmVjZWl2ZSBjYWxsYmFjayAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfRFdfVUFSVF9TVEFUSUMgICBEZXNpZ25XYXJlIFVBUlQgRHJpdmVyIFN0YXRpYyBGdW5jdGlvbnMNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfVUFSVA0KKyAqIFxicmllZiAgIFN0YXRpYyBvciBpbmxpbmUgZnVuY3Rpb25zLCB2YXJpYWJsZXMgZm9yIERlc2lnbldhcmUgVUFSVCBoYW5kbGUgdWFydCBvcGVyYXRpb25zLA0KKyAqICBvbmx5IHVzZWQgaW4gdGhpcyBmaWxlDQorICogQHsNCisgKi8NCitjb25zdCB1aW50OF90IGR3X3VhcnRfZGF0YWJpdHNbXSA9IHsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV19VQVJUX0xDUl9XT1JEX0xFTjUsIERXX1VBUlRfTENSX1dPUkRfTEVONiwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV19VQVJUX0xDUl9XT1JEX0xFTjcsIERXX1VBUlRfTENSX1dPUkRfTEVOOA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCitjb25zdCB1aW50OF90IGR3X3VhcnRfcGFyaXR5W10gPQ0KK3sNCisgICAgRFdfVUFSVF9MQ1JfUEFSSVRZX05PTkUsIERXX1VBUlRfTENSX1BBUklUWV9PREQsDQorICAgIERXX1VBUlRfTENSX1BBUklUWV9FVkVOLCBEV19VQVJUX0xDUl9QQVJJVFlfTUFTSywNCisgICAgRFdfVUFSVF9MQ1JfUEFSSVRZX1NQQUNFDQorfTsNCitjb25zdCB1aW50OF90IGR3X3VhcnRfc3RvcGJpdHNbXSA9DQorew0KKyAgICBEV19VQVJUX0xDUl8xX1NUT1BfQklULCBEV19VQVJUX0xDUl8xRDVfU1RPUF9CSVQsDQorICAgIERXX1VBUlRfTENSXzJfU1RPUF9CSVQNCit9Ow0KKw0KKy8qKiB0ZXN0IHdoZXRoZXIgdWFydCBpcyByZWFkeSB0byBzZW5kLCAxIHJlYWR5LCAwIG5vdCByZWFkeSAqLw0KK0lubGluZSBpbnQzMl90IGR3X3VhcnRfcHV0cmVhZHkoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHJldHVybiAoKHVhcnRfcmVnX3B0ci0+VVNSICYgRFdfVUFSVF9VU1JfVEZORikgIT0gMCk7DQorfQ0KKy8qKiB0ZXN0IHdoZXRoZXIgdWFydCBpcyByZWFkeSB0byByZWNlaXZlLCAxIHJlYWR5LCAwIG5vdCByZWFkeSAqLw0KK0lubGluZSBpbnQzMl90IGR3X3VhcnRfZ2V0cmVhZHkoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHJldHVybiAoKHVhcnRfcmVnX3B0ci0+VVNSICYgRFdfVUFSVF9VU1JfUkZORSkgIT0gMCk7DQorfQ0KKy8qKiB3cml0ZSBjaGFyIHRvIHVhcnQgc2VuZCBmaWZvICovDQorSW5saW5lIHZvaWQgZHdfdWFydF9wdXRjaGFyKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIGNoYXIgY2hyKQ0KK3sNCisgICAgdWFydF9yZWdfcHRyLT5EQVRBID0gY2hyOw0KK30NCisvKiogcmVhZCBkYXRhIGZyb20gdWFydCByZWNlaXZlIGZpZm8sIHJldHVybiBkYXRhIHJlY2VpdmVkICovDQorSW5saW5lIGludDMyX3QgZHdfdWFydF9nZXRjaGFyKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICByZXR1cm4gKGludDMyX3QpdWFydF9yZWdfcHRyLT5EQVRBOw0KK30NCisvKioNCisgKiBcYnJpZWYgICBzZW5kIGNoYXIgYnkgdWFydCB3aGVuIGF2YWlsYWJsZSwNCisgKiAgbW9zdGx5IHVzZWQgaW4gaW50ZXJydXB0IG1ldGhvZCwgbm9uLWJsb2NrZWQgZnVuY3Rpb24NCisgKiBccGFyYW1baW5dICAgdWFydF9yZWdfcHRyICAgIHVhcnQgcmVnaXN0ZXIgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgY2hyICAgICBjaGFyIHRvIGJlIHNlbnQNCisgKiBccmV0dmFsICAwICAgICAgIHNlbmQgc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgLTEgICAgICBub3QgcmVhZHkgdG8gc2VuZCBkYXRhDQorICovDQorSW5saW5lIGludDMyX3QgZHdfdWFydF9zbmRfY2hyKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIGNoYXIgY2hyKQ0KK3sNCisgICAgaWYgKGR3X3VhcnRfcHV0cmVhZHkodWFydF9yZWdfcHRyKSkNCisgICAgew0KKyAgICAgICAgZHdfdWFydF9wdXRjaGFyKHVhcnRfcmVnX3B0ciwgY2hyKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiAtMTsNCit9DQorLyoqDQorICogXGJyaWVmICAgcmVjZWl2ZSBvbmUgY2hhciBmcm9tIHVhcnQsDQorICogIG1vc3RseSB1c2VkIGluIGludGVycnVwdCByb3V0aW5lLCBub24tYmxvY2tlZCBmdW5jdGlvbg0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X3JlZ19wdHIgICAgdWFydCByZWdpc3RlciBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxyZXR1cm4gIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHVhcnQNCisgKi8NCitJbmxpbmUgaW50MzJfdCBkd191YXJ0X3Jjdl9jaHIoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHJldHVybiBkd191YXJ0X2dldGNoYXIodWFydF9yZWdfcHRyKTsNCit9DQorLyoqDQorICogXGJyaWVmICAgc2VuZCBjaGFyIGJ5IHVhcnQgaW4gcG9sbCBtZXRob2QsIGJsb2NrZWQgZnVuY3Rpb24NCisgKiBccGFyYW1baW5dICAgdWFydF9yZWdfcHRyICAgIHVhcnQgcmVnaXN0ZXIgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgY2hyICAgICBjaGFyIHRvIGJlIHNlbnQNCisgKi8NCitJbmxpbmUgdm9pZCBkd191YXJ0X3BzbmRfY2hyKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIGNoYXIgY2hyKQ0KK3sNCisgICAgLyoqIHdhaXQgdW50aWwgdWFydCBpcyByZWFkeSB0byBzZW5kICovDQorICAgIHdoaWxlICghZHdfdWFydF9wdXRyZWFkeSh1YXJ0X3JlZ19wdHIpKTsgLyogYmxvY2tlZCAqLw0KKw0KKyAgICAvKiogc2VuZCBjaGFyICovDQorICAgIGR3X3VhcnRfcHV0Y2hhcih1YXJ0X3JlZ19wdHIsIGNocik7DQorfQ0KKy8qKg0KKyAqIFxicmllZiAgIHJlY2VpdmUgb25lIGNoYXIgZnJvbSB1YXJ0IGluIHBvbGwgbWV0aG9kLCBibG9ja2VkIGZ1bmN0aW9uDQorICogXHBhcmFtW2luXSAgIHVhcnRfcmVnX3B0ciAgICB1YXJ0IHJlZ2lzdGVyIHN0cnVjdHVyZSBwb2ludGVyDQorICogXHJldHVybiAgZGF0YSByZWNlaXZlZCBieSB0aGUgdWFydA0KKyAqLw0KK0lubGluZSBpbnQzMl90IGR3X3VhcnRfcHJjdl9jaHIoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIC8qKiB3YWl0IHVudGlsIHVhcnQgaXMgcmVhZHkgdG8gcmVjZWl2ZSAqLw0KKyAgICB3aGlsZSAoIWR3X3VhcnRfZ2V0cmVhZHkodWFydF9yZWdfcHRyKSk7IC8qIGJsb2NrZWQgKi8NCisNCisgICAgLyoqIHJlY2VpdmUgZGF0YSAqLw0KKyAgICByZXR1cm4gZHdfdWFydF9nZXRjaGFyKHVhcnRfcmVnX3B0cik7DQorfQ0KKw0KKy8qKiBHZXQgVFggRklGTyBMZW5ndGggKi8NCitJbmxpbmUgdWludDMyX3QgZHdfdWFydF9nZXRfdHhmaWZvX2xlbihEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyKQ0KK3sNCisgICAgdWludDMyX3QgdHhmaWZvbGVuOw0KKyAgICB1aW50MzJfdCB1YXJ0X2NwcjsNCisNCisgICAgdWFydF9jcHIgPSB1YXJ0X3JlZ19wdHItPkNQUjsNCisNCisgICAgaWYgKHVhcnRfY3ByICYgRFdfVUFSVF9DUFJfRklGT19TVEFUKQ0KKyAgICB7DQorICAgICAgICB0eGZpZm9sZW4gPSAoKHVhcnRfY3ByICYgRFdfVUFSVF9DUFJfRklGT19NT0RFKSA+PiBEV19VQVJUX0NQUl9GSUZPX01PREVfT0ZTKSA8PCA0Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgdHhmaWZvbGVuID0gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHhmaWZvbGVuOw0KK30NCisNCisvKiogR2V0IFJYIEZJRk8gTGVuZ3RoICovDQorSW5saW5lIHVpbnQzMl90IGR3X3VhcnRfZ2V0X3J4Zmlmb19sZW4oRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHVpbnQzMl90IHJ4Zmlmb2xlbjsNCisgICAgdWludDMyX3QgdWFydF9jcHI7DQorDQorICAgIHVhcnRfY3ByID0gdWFydF9yZWdfcHRyLT5DUFI7DQorDQorICAgIGlmICh1YXJ0X2NwciAmIERXX1VBUlRfQ1BSX0ZJRk9fU1RBVCkNCisgICAgew0KKyAgICAgICAgcnhmaWZvbGVuID0gKCh1YXJ0X2NwciAmIERXX1VBUlRfQ1BSX0ZJRk9fTU9ERSkgPj4gRFdfVUFSVF9DUFJfRklGT19NT0RFX09GUykgPDwgNDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJ4Zmlmb2xlbiA9IDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHJ4Zmlmb2xlbjsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgc2V0IGRlc2lnbndhcmUgdWFydCBEUFMgdmFsdWUNCisgKiBccGFyYW0gICB1YXJ0X3JlZ19wdHIgICAgdWFydCByZWdpc3RlciBzdHJ1Y3R1cmUNCisgKiBccGFyYW0gICBkcHMgICAgIGRhdGEgYml0cy9wYXJpdHkgYml0L3N0b3AgYml0cyBwYXJhbWV0ZXINCisgKiBccmV0dmFsICAwICAgU2V0IG9rDQorICogXHJldHZhbCAgITAgIFNldCBmYWlsZWQNCisgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0X3NldF9kcHMoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciwgVUFSVF9EUFNfRk9STUFUICpkcHMpDQorew0KKyAgICB1aW50MzJfdCBkcHNfdmFsdWUgPSAwOw0KKw0KKyAgICBpZiAoZHBzID09IE5VTEwpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIC8qIGRhdGEgYml0cyBjaGVjayAqLw0KKyAgICBpZiAoKGRwcy0+ZGF0YWJpdHMgPCA1KSB8fCAoZHBzLT5kYXRhYml0cyA+IDgpKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICAvKiBzdG9wIGJpdHMgY2hlY2sgKi8NCisgICAgaWYgKGRwcy0+c3RvcGJpdHMgPiBVQVJUX1NUUEJJVFNfVFdPKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICAvKiBwYXJpdHkgYml0IHR5cGUgY2hlY2sgKi8NCisgICAgaWYgKGRwcy0+cGFyaXR5ID4gVUFSVF9QQVJJVFlfU1BBQ0UpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGRwc192YWx1ZSB8PSAodWludDMyX3QpZHdfdWFydF9kYXRhYml0c1tkcHMtPmRhdGFiaXRzIC0gNV07DQorICAgIGRwc192YWx1ZSB8PSAodWludDMyX3QpZHdfdWFydF9zdG9wYml0c1tkcHMtPnN0b3BiaXRzXTsNCisgICAgZHBzX3ZhbHVlIHw9ICh1aW50MzJfdClkd191YXJ0X3Bhcml0eVtkcHMtPnBhcml0eV07DQorDQorICAgIC8qIGNsZWFyIGRwcyBiaXRzICovDQorICAgIHVhcnRfcmVnX3B0ci0+TENSICY9ICh+RFdfVUFSVF9MQ1JfRFBTX01BU0spOw0KKyAgICAvKiBzZXQgZHBzIGJpdHMgKi8NCisgICAgdWFydF9yZWdfcHRyLT5MQ1IgfD0gZHBzX3ZhbHVlOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgc2V0IGRlc2lnbndhcmUgdWFydCBiYXVkcmF0ZQ0KKyAqIFxwYXJhbSAgIHVhcnRfcmVnX3B0ciAgICB1YXJ0IHJlZ2lzdGVyIHN0cnVjdHVyZQ0KKyAqIFxwYXJhbSAgIGJhdWRfZGl2aXNvciAgICB1YXJ0IGJhdWRyYXRlIGRpdmlzb3INCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X3NldF9iYXVkKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIHVpbnQzMl90IGJhdWRfZGl2aXNvcikNCit7DQorICAgIC8qIGVuYWJsZSB1YXJ0IGJhdWRyYXRlIHVwZGF0ZSAqLw0KKyAgICB1YXJ0X3JlZ19wdHItPkxDUiB8PSBEV19VQVJUX0xDUl9ETEFCOw0KKyAgICAvKioNCisgICAgICogc2V0dGluZyB1YXJ0IGJhdWRyYXRlIHJlZ2lzdGVycw0KKyAgICAgKi8NCisgICAgdWFydF9yZWdfcHRyLT5EQVRBID0gYmF1ZF9kaXZpc29yICYgMHhmZjsgICAvKiE8IERMTCAqLw0KKyAgICB1YXJ0X3JlZ19wdHItPklFUiA9IChiYXVkX2Rpdmlzb3IgPj4gOCkgJiAweGZmOyAvKiE8IERMSCAqLw0KKyAgICAvKiogZGlzYWJsZSBETEFCICovDQorICAgIHVhcnRfcmVnX3B0ci0+TENSICY9IH4oRFdfVUFSVF9MQ1JfRExBQik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIERvIHVhcnQgc29mdHdhcmUgcmVzZXQNCisgKiBccGFyYW0gICB1YXJ0X3JlZ19wdHIgICAgdWFydCByZWdpc3RlciBzdHJ1Y3R1cmUNCisgKi8NCitJbmxpbmUgdm9pZCBkd191YXJ0X3NvZnR3YXJlX3Jlc2V0KERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIpDQorew0KKyAgICB1YXJ0X3JlZ19wdHItPlNSUiA9IERXX1VBUlRfU1JSX1VSIHwgRFdfVUFSVF9TUlJfUkZSIHwgRFdfVUFSVF9TUlJfWEZSOw0KKw0KKyAgICB3aGlsZSAodWFydF9yZWdfcHRyLT5VU1IgJiBEV19VQVJUX1VTUl9CVVNZKTsgLyogd2FpdCB1bnRpbCBzb2Z0d2FyZSByZXNldCBjb21wbGV0ZWQgKi8NCit9DQorDQorLyoqDQorICogXGJyaWVmICAgc2V0IGRlc2lnbndhcmUgdWFydCBiYXVkcmF0ZQ0KKyAqIFxwYXJhbSAgIHVhcnRfcmVnX3B0ciAgICB1YXJ0IHJlZ2lzdGVyIHN0cnVjdHVyZQ0KKyAqIFxwYXJhbSAgIGh3ZmMgICAgICAgIHVhcnQgaGFyZHdhcmUgZmxvdyBjb250cm9sIHR5cGUNCisgKiBcbm90ZSAgICBOZWVkIHRvIHNldCBjb3JyZXNwb25kaW5nIHBpbiBmdW5jdGlvbnMNCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X3NldF9od2ZjKERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIsIFVBUlRfSFdfRkxPV19DT05UUk9MIGh3ZmMpDQorew0KKyAgICBpZiAoaHdmYyA9PSBVQVJUX0ZDX05PTkUpDQorICAgIHsNCisgICAgICAgIHVhcnRfcmVnX3B0ci0+TUNSICY9IH4oRFdfVUFSVF9NQ1JfQUZDRSB8IERXX1VBUlRfTUNSX1JUUyk7DQorICAgIH0NCisNCisgICAgaWYgKChod2ZjID09IFVBUlRfRkNfUlRTKSB8fCAoaHdmYyA9PSBVQVJUX0ZDX0JPVEgpKQ0KKyAgICB7DQorICAgICAgICB1YXJ0X3JlZ19wdHItPk1DUiB8PSAoRFdfVUFSVF9NQ1JfQUZDRSB8IERXX1VBUlRfTUNSX1JUUyk7DQorICAgIH0NCisNCisgICAgaWYgKChod2ZjID09IFVBUlRfRkNfQ1RTKSB8fCAoaHdmYyA9PSBVQVJUX0ZDX0JPVEgpKQ0KKyAgICB7DQorICAgICAgICB1YXJ0X3JlZ19wdHItPk1DUiB8PSAoRFdfVUFSVF9NQ1JfQUZDRSk7DQorICAgIH0NCit9DQorDQorSW5saW5lIHZvaWQgZHdfdWFydF9zZXRfYnJlYWsoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0cikNCit7DQorICAgIHVhcnRfcmVnX3B0ci0+TENSIHw9IERXX1VBUlRfTENSX0JSRUFLOw0KK30NCisNCitJbmxpbmUgdm9pZCBkd191YXJ0X2Nscl9icmVhayhEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyKQ0KK3sNCisgICAgdWFydF9yZWdfcHRyLT5MQ1IgJj0gfkRXX1VBUlRfTENSX0JSRUFLOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBpbml0IGRlc2lnbndhcmUgdWFydCB3aXRoIHNlbGVjdGVkIGJhdWQNCisgKiBccGFyYW1baW5dICAgdWFydF9yZWdfcHRyICAgIHVhcnQgcmVnaXN0ZXIgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgYmF1ZF9kaXZpc29yICAgIGJhdWRyYXRlIGRpdmlzb3INCisgKi8NCitzdGF0aWMgdm9pZCBkd191YXJ0X2luaXQoRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciwgdWludDMyX3QgYmF1ZF9kaXZpc29yLCBVQVJUX0RQU19GT1JNQVQgKmRwcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9IV19GTE9XX0NPTlRST0wgaHdmYykNCit7DQorICAgIGR3X3VhcnRfc29mdHdhcmVfcmVzZXQodWFydF9yZWdfcHRyKTsNCisNCisgICAgZHdfdWFydF9zZXRfaHdmYyh1YXJ0X3JlZ19wdHIsIGh3ZmMpOw0KKyAgICBkd191YXJ0X3NldF9kcHModWFydF9yZWdfcHRyLCBkcHMpOw0KKyAgICBkd191YXJ0X3NldF9iYXVkKHVhcnRfcmVnX3B0ciwgYmF1ZF9kaXZpc29yKTsNCisNCisgICAgdWFydF9yZWdfcHRyLT5JSVIgPSAweDE7ICAgIC8qKiBlbmFibGUgdWFydCBmaWZvIChGQ1IgSUlSIGlzIHRoZSBzYW1lKSAqLw0KKyAgICB1YXJ0X3JlZ19wdHItPklFUiA9IDB4MDsgICAgLyoqIGRpc2FibGUgYWxsIHVhcnQgaW50ZXJydXB0ICovDQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNldCBkZXNpZ253YXJlIHVhcnQgYmF1ZHJhdGUNCisgKiBccGFyYW0gICB1YXJ0X2luZm9fcHRyICAgdWFydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZmx1c2hfb3V0cHV0KERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIpDQorew0KKyAgICB1aW50MzJfdCBpOw0KKyAgICBjaGFyICpwX2NoYXJidWY7DQorDQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgaWYgKHVhcnRfaW5mb19wdHItPnR4X2J1Zi5idWYgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcF9jaGFyYnVmID0gKGNoYXIgKikodWFydF9pbmZvX3B0ci0+dHhfYnVmLmJ1Zik7DQorDQorICAgICAgICBmb3IgKGkgPSB1YXJ0X2luZm9fcHRyLT50eF9idWYub2ZzOyBpIDwgdWFydF9pbmZvX3B0ci0+dHhfYnVmLmxlbjsgaSArKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd191YXJ0X3BzbmRfY2hyKHVhcnRfcmVnX3B0ciwgcF9jaGFyYnVmW2ldKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIGNsZWFyIHRyYW5zbWl0IGJ1ZmZlciAqLw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+dHhfYnVmLmJ1ZiA9IE5VTEw7DQorICAgICAgICB1YXJ0X2luZm9fcHRyLT50eF9idWYubGVuID0gMDsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1Zi5vZnMgPSAwOw0KKyAgICB9DQorDQorICAgIC8qIHdhaXQgdW50aWwgdHJhbnNtaXQgZmlmbyBpcyBlbXB0eSAqLw0KKyAgICB3aGlsZSAoKHVhcnRfcmVnX3B0ci0+VVNSICYgRFdfVUFSVF9VU1JfVEZFKSA9PSAwKTsNCisNCisgICAgd2hpbGUgKHVhcnRfcmVnX3B0ci0+VVNSICYgRFdfVUFSVF9VU1JfQlVTWSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGRpc2FibGUgZGVzaWdud2FyZSB1YXJ0IHNlbmQgb3IgcmVjZWl2ZSBpbnRlcnJ1cHQNCisgKiBccGFyYW1baW5dICAgREVWX1VBUlRfSU5GTyAgICp1YXJ0X2luZm9fcHRyDQorICogXHBhcmFtW2luXSAgIGNicnRuICAgICAgIGNvbnRyb2wgY29kZSBvZiBjYWxsYmFjayByb3V0aW5lIG9mIHNlbmQgb3IgcmVjZWl2ZQ0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZGlzX2NicihERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyLCB1aW50MzJfdCBjYnJ0bikNCit7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgc3dpdGNoIChjYnJ0bikNCisgICAgew0KKyAgICBjYXNlIERXX1VBUlRfUkRZX1NORDoNCisgICAgICAgIHVhcnRfcmVnX3B0ci0+SUVSICY9IH5EV19VQVJUX0lFUl9YTUlUX0VNUFRZOw0KKyAgICAgICAgdWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmPSB+RFdfVUFSVF9UWElOVF9FTkFCTEU7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBEV19VQVJUX1JEWV9SQ1Y6DQorICAgICAgICB1YXJ0X3JlZ19wdHItPklFUiAmPSB+RFdfVUFSVF9JRVJfREFUQV9BVkFJTDsNCisgICAgICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgJj0gfkRXX1VBUlRfUlhJTlRfRU5BQkxFOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICBpZiAodWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIERXX1VBUlRfR0lOVF9FTkFCTEUpDQorICAgIHsNCisgICAgICAgIGlmICgodWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIChEV19VQVJUX1JYSU5UX0VOQUJMRSB8IERXX1VBUlRfVFhJTlRfRU5BQkxFKSkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnRfZGlzYWJsZSh1YXJ0X2N0cmxfcHRyLT5pbnRubyk7DQorICAgICAgICAgICAgdWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmPSB+RFdfVUFSVF9HSU5UX0VOQUJMRTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBlbmFibGUgRGVzaWduV2FyZSBVQVJUIHNlbmQgb3IgcmVjZWl2ZSBpbnRlcnJ1cHQNCisgKiBccGFyYW1baW5dICAgREVWX1VBUlRfSU5GTyAgICp1YXJ0X2luZm9fcHRyDQorICogXHBhcmFtW2luXSAgIGNicnRuICAgICAgIGNvbnRyb2wgY29kZSBvZiBjYWxsYmFjayByb3V0aW5lIG9mIHNlbmQgb3IgcmVjZWl2ZQ0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZW5hX2NicihERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyLCB1aW50MzJfdCBjYnJ0bikNCit7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgc3dpdGNoIChjYnJ0bikNCisgICAgew0KKyAgICBjYXNlIERXX1VBUlRfUkRZX1NORDoNCisgICAgICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgfD0gRFdfVUFSVF9UWElOVF9FTkFCTEU7DQorICAgICAgICB1YXJ0X3JlZ19wdHItPklFUiB8PSBEV19VQVJUX0lFUl9YTUlUX0VNUFRZOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfVUFSVF9SRFlfUkNWOg0KKyAgICAgICAgdWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyB8PSBEV19VQVJUX1JYSU5UX0VOQUJMRTsNCisgICAgICAgIHVhcnRfcmVnX3B0ci0+SUVSIHw9IERXX1VBUlRfSUVSX0RBVEFfQVZBSUw7DQorICAgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIGlmICgodWFydF9jdHJsX3B0ci0+aW50X3N0YXR1cyAmIERXX1VBUlRfR0lOVF9FTkFCTEUpID09IDApDQorICAgIHsNCisgICAgICAgIGlmICh1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzICYgKERXX1VBUlRfUlhJTlRfRU5BQkxFIHwgRFdfVUFSVF9UWElOVF9FTkFCTEUpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgfD0gRFdfVUFSVF9HSU5UX0VOQUJMRTsNCisgICAgICAgICAgICBpbnRfZW5hYmxlKHVhcnRfY3RybF9wdHItPmludG5vKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBlbmFibGUgZGVzaWdud2FyZSB1YXJ0IGludGVycnVwdA0KKyAqIFxwYXJhbSAgIHVhcnRfaW5mb19wdHIgICB1YXJ0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSBwb2ludGVyDQorICovDQorc3RhdGljIHZvaWQgZHdfdWFydF9lbmFibGVfaW50ZXJydXB0KERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIpDQorew0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisNCisgICAgaW50X2hhbmRsZXJfaW5zdGFsbCh1YXJ0X2N0cmxfcHRyLT5pbnRubywgdWFydF9jdHJsX3B0ci0+ZHdfdWFydF9pbnRfaGFuZGxlcik7DQorICAgIHVhcnRfY3RybF9wdHItPmludF9zdGF0dXMgfD0gRFdfVUFSVF9HSU5UX0VOQUJMRTsNCisgICAgaW50X2VuYWJsZSh1YXJ0X2N0cmxfcHRyLT5pbnRubyk7ICAgLyoqIGVuYWJsZSB1YXJ0IGludGVycnVwdCAqLw0KK30NCisvKioNCisgKiBcYnJpZWYgICBkaXNhYmxlIGRlc2lnbndhcmUgdWFydCBpbnRlcnJ1cHQNCisgKiBccGFyYW0gICB1YXJ0X2luZm9fcHRyICAgdWFydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZGlzYWJsZV9pbnRlcnJ1cHQoREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0cikNCit7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKw0KKyAgICAvKiogZGlzYWJsZSB1YXJ0IHNlbmQmcmVjZWl2ZSBpbnRlcnJ1cHQgYWZ0ZXIgZGlzYWJsZSB1YXJ0IGludGVycnVwdCAqLw0KKyAgICBkd191YXJ0X2Rpc19jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfU05EKTsNCisgICAgZHdfdWFydF9kaXNfY2JyKHVhcnRfaW5mb19wdHIsIERXX1VBUlRfUkRZX1JDVik7DQorICAgIC8qIGRpc2FibGUgdWFydCBpbnRlcnJ1cHQgKi8NCisgICAgaW50X2Rpc2FibGUodWFydF9jdHJsX3B0ci0+aW50bm8pOw0KKyAgICB1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzICY9IH4oRFdfVUFSVF9HSU5UX0VOQUJMRSB8IERXX1VBUlRfVFhJTlRfRU5BQkxFIHwgRFdfVUFSVF9SWElOVF9FTkFCTEUpOw0KK30NCisNCisvKiogZW5hYmxlIGRlc2lnbndhcmUgdWFydCAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZW5hYmxlX2RldmljZShERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyKQ0KK3sNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorICAgIERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIgPSAoRFdfVUFSVF9SRUdfUFRSKSh1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UpOw0KKw0KKyAgICBpZiAoKHVhcnRfaW5mb19wdHItPnN0YXR1cyAmIERFVl9FTkFCTEVEKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkd191YXJ0X3NldF9iYXVkKHVhcnRfcmVnX3B0ciwgdWFydF9pbmZvX3B0ci0+YmF1ZHJhdGUpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9FTkFCTEVEOw0KKyAgICB9DQorfQ0KKw0KKy8qKiBkaXNhYmxlIGRlc2lnbndhcmUgdWFydCAqLw0KK3N0YXRpYyB2b2lkIGR3X3VhcnRfZGlzYWJsZV9kZXZpY2UoREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0cikNCit7DQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgaWYgKCh1YXJ0X2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCkgPT0gREVWX0VOQUJMRUQpDQorICAgIHsNCisgICAgICAgIGR3X3VhcnRfc2V0X2JhdWQodWFydF9yZWdfcHRyLCAwKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyAmPSB+REVWX0VOQUJMRUQ7DQorICAgIH0NCit9DQorDQorLyoqIGFib3J0IGN1cnJlbnQgaW50ZXJydXB0IHRyYW5zbWl0IHRyYW5zZmVyICovDQorc3RhdGljIHZvaWQgZHdfdWFydF9hYm9ydF90eChERVZfVUFSVCAqdWFydF9vYmopDQorew0KKyAgICBERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyID0gJih1YXJ0X29iai0+dWFydF9pbmZvKTsNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorDQorICAgIGlmICh1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzICYgRFdfVUFSVF9UWElOVF9FTkFCTEUpDQorICAgIHsNCisgICAgICAgIGR3X3VhcnRfZGlzX2Nicih1YXJ0X2luZm9fcHRyLCBEV19VQVJUX1JEWV9TTkQpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9JTl9UWF9BQlJUOw0KKw0KKyAgICAgICAgaWYgKHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMudHhfY2IodWFydF9vYmopOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+c3RhdHVzICY9IH4oREVWX0lOX1RYX0FCUlQpOw0KKyAgICB9DQorfQ0KKw0KKy8qKiBhYm9ydCBjdXJyZW50IGludGVycnVwdCByZWNlaXZlIHRyYW5zZmVyICovDQorc3RhdGljIHZvaWQgZHdfdWFydF9hYm9ydF9yeChERVZfVUFSVCAqdWFydF9vYmopDQorew0KKyAgICBERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyID0gJih1YXJ0X29iai0+dWFydF9pbmZvKTsNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorDQorICAgIGlmICh1YXJ0X2N0cmxfcHRyLT5pbnRfc3RhdHVzICYgRFdfVUFSVF9SWElOVF9FTkFCTEUpDQorICAgIHsNCisgICAgICAgIGR3X3VhcnRfZGlzX2Nicih1YXJ0X2luZm9fcHRyLCBEV19VQVJUX1JEWV9SQ1YpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+c3RhdHVzIHw9IERFVl9JTl9SWF9BQlJUOw0KKw0KKyAgICAgICAgaWYgKHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnJ4X2NiICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMucnhfY2IodWFydF9vYmopOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+c3RhdHVzICY9IH4oREVWX0lOX1JYX0FCUlQpOw0KKyAgICB9DQorfQ0KKw0KKy8qKiBHZXQgYXZhaWxhYmxlIHRyYW5zbWl0IGZpZm8gY291bnQgKi8NCitzdGF0aWMgaW50MzJfdCBkd191YXJ0X2dldF90eGF2YWlsKERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0cikNCit7DQorICAgIGludDMyX3QgdHhfYXZhaWwgPSAwOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHICopKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIGlmICh1YXJ0X2N0cmxfcHRyLT50eF9maWZvX2xlbiA8PSAxKQ0KKyAgICB7DQorICAgICAgICBpZiAoZHdfdWFydF9wdXRyZWFkeSh1YXJ0X3JlZ19wdHIpID09IDEpDQorICAgICAgICB7DQorICAgICAgICAgICAgdHhfYXZhaWwgPSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHR4X2F2YWlsID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHR4X2F2YWlsID0gdWFydF9jdHJsX3B0ci0+dHhfZmlmb19sZW4gLSB1YXJ0X3JlZ19wdHItPlRGTDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdHhfYXZhaWw7DQorfQ0KKw0KKy8qKiBHZXQgYXZhaWxhYmxlIHJlY2VpdmUgZmlmbyBjb3VudCAqLw0KK3N0YXRpYyBpbnQzMl90IGR3X3VhcnRfZ2V0X3J4YXZhaWwoRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyKQ0KK3sNCisgICAgaW50MzJfdCByeF9hdmFpbCA9IDA7DQorICAgIERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIgPSAoRFdfVUFSVF9SRUcgKikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgaWYgKHVhcnRfY3RybF9wdHItPnJ4X2ZpZm9fbGVuIDw9IDEpDQorICAgIHsNCisgICAgICAgIGlmIChkd191YXJ0X2dldHJlYWR5KHVhcnRfcmVnX3B0cikgPT0gMSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByeF9hdmFpbCA9IDE7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgcnhfYXZhaWwgPSAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcnhfYXZhaWwgPSB1YXJ0X3JlZ19wdHItPlJGTDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcnhfYXZhaWw7DQorfQ0KKw0KKw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgREVWSUNFX0RXX1VBUlRfU1RBVElDICovDQorDQorLyoqDQorICogXGJyaWVmICAgb3BlbiBhIGRlc2lnbndhcmUgdWFydCBkZXZpY2UNCisgKiBccGFyYW1baW5dICAgdWFydF9vYmogICAgdWFydCBvYmplY3Qgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1baW5dICAgYmF1ZCAgICAgICAgYmF1ZHJhdGUgdG8gaW5pdGlhbGl6ZWQNCisgKiBccmV0dmFsICBFX09LICAgIE9wZW4gc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGlzc3Vlcw0KKyAqIFxyZXR2YWwgIEVfT1BORUQgSWYgZGV2aWNlIHdhcyBvcGVuZWQgYmVmb3JlIHdpdGggZGlmZmVyZW50IGJhdWRyYXRlLCB0aGVuIHJldHVybiBFX09QTkVEDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfTk9TUFQgT3BlbiBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZA0KKyAqLw0KK2ludDMyX3QgZHdfdWFydF9vcGVuKERFVl9VQVJUICp1YXJ0X29iaiwgdWludDMyX3QgYmF1ZCkNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIgPSAmKHVhcnRfb2JqLT51YXJ0X2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfVUFSVF9JTkZPX09CSkVDVCh1YXJ0X2luZm9fcHRyKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAoYmF1ZCA+IDAsIEVfUEFSKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIHVhcnRfaW5mb19wdHItPm9wbl9jbnQgKys7DQorDQorICAgIGlmICh1YXJ0X2luZm9fcHRyLT5vcG5fY250ID4gMSkgICAvKiBvcGVuZWQgYmVmb3JlICovDQorICAgIHsNCisgICAgICAgIGlmIChiYXVkID09IHVhcnRfaW5mb19wdHItPmJhdWRyYXRlKSAgIC8qIGJhdWRyYXRlIGlzIHRoZSBzYW1lICovDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEVfT0s7DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAgICAvKiBvcGVuIHdpdGggZGlmZmVyZW50IGJhdWRyYXRlICovDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIEVfT1BORUQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaW50MzJfdCBiYXVkX2Rpdmlzb3IgPSAwOw0KKw0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIC8qIEdldCBGSUZPIExlbmd0aCAqLw0KKyAgICB1YXJ0X2N0cmxfcHRyLT50eF9maWZvX2xlbiA9IGR3X3VhcnRfZ2V0X3R4Zmlmb19sZW4odWFydF9yZWdfcHRyKTsNCisgICAgdWFydF9jdHJsX3B0ci0+cnhfZmlmb19sZW4gPSBkd191YXJ0X2dldF9yeGZpZm9fbGVuKHVhcnRfcmVnX3B0cik7DQorDQorICAgIC8qKiBpbml0IHVhcnQgKi8NCisgICAgdWFydF9pbmZvX3B0ci0+YmF1ZHJhdGUgPSBiYXVkOw0KKyAgICBiYXVkX2Rpdmlzb3IgPSBEV19VQVJUX0JBVUQyRElWKHVhcnRfY3RybF9wdHItPmR3X2FwYl9idXNfZnJlcSwgYmF1ZCk7DQorICAgIHVhcnRfaW5mb19wdHItPmRwc19mb3JtYXQgPSBkcHNfZm9ybWF0X2RlZmF1bHQ7DQorICAgIHVhcnRfaW5mb19wdHItPmh3ZmMgPSBod2ZjX2RlZmF1bHQ7DQorICAgIGR3X3VhcnRfaW5pdCh1YXJ0X3JlZ19wdHIsIGJhdWRfZGl2aXNvciwgJih1YXJ0X2luZm9fcHRyLT5kcHNfZm9ybWF0KSwgdWFydF9pbmZvX3B0ci0+aHdmYyk7DQorDQorICAgIHVhcnRfaW5mb19wdHItPnN0YXR1cyA9IERFVl9FTkFCTEVEOw0KKyAgICB1YXJ0X2luZm9fcHRyLT5leHRyYSA9IE5VTEw7DQorDQorICAgIC8qKg0KKyAgICAgKiB1YXJ0IGludGVycnVwdCByZWxhdGVkIGluaXQNCisgICAgICovDQorICAgIGR3X3VhcnRfZGlzYWJsZV9pbnRlcnJ1cHQodWFydF9pbmZvX3B0cik7DQorICAgIC8qKiBpbnN0YWxsIHVhcnQgaW50ZXJydXB0IGludG8gc3lzdGVtICovDQorICAgIGludF9oYW5kbGVyX2luc3RhbGwodWFydF9jdHJsX3B0ci0+aW50bm8sIHVhcnRfY3RybF9wdHItPmR3X3VhcnRfaW50X2hhbmRsZXIpOw0KKw0KKyAgICBtZW1zZXQoJih1YXJ0X2luZm9fcHRyLT50eF9idWYpLCAwLCBzaXplb2YoREVWX0JVRkZFUikpOw0KKyAgICBtZW1zZXQoJih1YXJ0X2luZm9fcHRyLT5yeF9idWYpLCAwLCBzaXplb2YoREVWX0JVRkZFUikpOw0KKyAgICBtZW1zZXQoJih1YXJ0X2luZm9fcHRyLT51YXJ0X2NicyksIDAsIHNpemVvZihERVZfVUFSVF9DQlMpKTsNCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgY2xvc2UgYSBEZXNpZ25XYXJlIFVBUlQgZGV2aWNlDQorICogXHBhcmFtW2luXSAgIHVhcnRfb2JqICAgIHVhcnQgb2JqZWN0IHN0cnVjdHVyZSBwb2ludGVyDQorICogXHJldHZhbCAgRV9PSyAgICBPcGVuIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSBpc3N1ZXMNCisgKiBccmV0dmFsICBFX09QTkVEIERldmljZSBpcyBzdGlsbCBvcGVuZWQsIHRoZSBkZXZpY2Ugb3BuX2NudCBkZWNyZWFzZWQgYnkgMQ0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQNCisgKi8NCitpbnQzMl90IGR3X3VhcnRfY2xvc2UoREVWX1VBUlQgKnVhcnRfb2JqKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciA9ICYodWFydF9vYmotPnVhcnRfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19VQVJUX0lORk9fT0JKRUNUKHVhcnRfaW5mb19wdHIpOw0KKyAgICBEV19VQVJUX0NIRUNLX0VYUCh1YXJ0X2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9PSyk7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICB1YXJ0X2luZm9fcHRyLT5vcG5fY250IC0tOw0KKw0KKyAgICBpZiAodWFydF9pbmZvX3B0ci0+b3BuX2NudCA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkd191YXJ0X2Rpc2FibGVfaW50ZXJydXB0KHVhcnRfaW5mb19wdHIpOw0KKyAgICAgICAgZHdfdWFydF9hYm9ydF90eCh1YXJ0X29iaik7DQorICAgICAgICBkd191YXJ0X2Fib3J0X3J4KHVhcnRfb2JqKTsNCisgICAgICAgIGR3X3VhcnRfZmx1c2hfb3V0cHV0KHVhcnRfaW5mb19wdHIpOw0KKyAgICAgICAgbWVtc2V0KCYodWFydF9pbmZvX3B0ci0+dHhfYnVmKSwgMCwgc2l6ZW9mKERFVl9CVUZGRVIpKTsNCisgICAgICAgIG1lbXNldCgmKHVhcnRfaW5mb19wdHItPnJ4X2J1ZiksIDAsIHNpemVvZihERVZfQlVGRkVSKSk7DQorICAgICAgICBtZW1zZXQoJih1YXJ0X2luZm9fcHRyLT51YXJ0X2NicyksIDAsIHNpemVvZihERVZfVUFSVF9DQlMpKTsNCisgICAgICAgIGR3X3VhcnRfZGlzYWJsZV9kZXZpY2UodWFydF9pbmZvX3B0cik7DQorICAgICAgICB1YXJ0X2luZm9fcHRyLT5zdGF0dXMgPSAwOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+ZXh0cmEgPSBOVUxMOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgZXJjZCA9IEVfT1BORUQ7DQorICAgIH0NCisNCitlcnJvcl9leGl0Og0KKyAgICByZXR1cm4gZXJjZDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICAgY29udHJvbCB1YXJ0IGJ5IGN0cmwgY29tbWFuZA0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X29iaiAgICB1YXJ0IG9iamVjdCBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBjdHJsX2NtZCAgICBjb250cm9sIGNvbW1hbmQgY29kZSB0byBkbyBzcGVjaWZpYyB1YXJ0IHdvcmsNCisgKiBccGFyYW1baW4sb3V0XSAgIHBhcmFtICAgcGFyYW1ldGVycyB1c2VkIHRvIGNvbnRyb2wgdWFydCBvciByZXR1cm4gc29tZXRoaW5nDQorICogXHJldHZhbCAgRV9PSyAgICBDb250cm9sIGRldmljZSBzdWNjZXNzZnVsbHkNCisgKiBccmV0dmFsICBFX0NMU0VEIERldmljZSBpcyBub3Qgb3BlbmVkDQorICogXHJldHZhbCAgRV9ESVMgICBEZXZpY2UgaXMgZGlzYWJsZWQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogXHJldHZhbCAgRV9TWVMgICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMNCisgKiBccmV0dmFsICBFX0NUWCAgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGRpZmZlcmVudCByZWFzb25zIGxpa2UgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiBccmV0dmFsICBFX05PU1BUIENvbnRyb2wgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIG9yIG5vdCB2YWxpZA0KKyAqLw0KK2ludDMyX3QgZHdfdWFydF9jb250cm9sKERFVl9VQVJUICp1YXJ0X29iaiwgdWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciA9ICYodWFydF9vYmotPnVhcnRfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19VQVJUX0lORk9fT0JKRUNUKHVhcnRfaW5mb19wdHIpOw0KKyAgICBEV19VQVJUX0NIRUNLX0VYUCh1YXJ0X2luZm9fcHRyLT5vcG5fY250ID4gMCwgRV9DTFNFRCk7DQorICAgIC8qIEVORCBPRiBFUlJPUiBDSEVDSyAqLw0KKw0KKyAgICB1aW50MzJfdCB2YWwzMjsgLyoqIHRvIHJlY2VpdmUgdW5zaWduZWQgaW50IHZhbHVlICovDQorICAgIGludDMyX3QgYmF1ZF9kaXZpc29yID0gMDsNCisgICAgREVWX0JVRkZFUiAqZGV2YnVmOw0KKyAgICBVQVJUX0RQU19GT1JNQVQgKmRwc19wdHI7DQorICAgIFVBUlRfSFdfRkxPV19DT05UUk9MIGh3ZmNfbG9jYWw7DQorDQorICAgIERXX1VBUlRfQ1RSTCAqdWFydF9jdHJsX3B0ciA9IChEV19VQVJUX0NUUkxfUFRSKSh1YXJ0X2luZm9fcHRyLT51YXJ0X2N0cmwpOw0KKyAgICBEV19VQVJUX1JFRyAqdWFydF9yZWdfcHRyID0gKERXX1VBUlRfUkVHX1BUUikodWFydF9jdHJsX3B0ci0+ZHdfdWFydF9yZWdiYXNlKTsNCisNCisgICAgLyogY2hlY2sgd2hldGhlciBjdXJyZW50IGRldmljZSBpcyBkaXNhYmxlZCAqLw0KKyAgICBpZiAoKHVhcnRfaW5mb19wdHItPnN0YXR1cyAmIERFVl9FTkFCTEVEKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICAvKiogV2hlbiBkZXZpY2UgaXMgZGlzYWJsZWQsDQorICAgICAgICAgKiBvbmx5IFVBUlRfQ01EX0VOQV9ERVYsIFVBUlRfQ01EX0RJU19ERVYsIFVBUlRfQ01EX0dFVF9TVEFUVVMNCisgICAgICAgICAqIGFyZSBhdmFpbGFibGUsIG90aGVyIGNvbW1hbmRzIHdpbGwgcmV0dXJuIEVfU1lTDQorICAgICAgICAgKi8NCisgICAgICAgIGlmICgoY3RybF9jbWQgIT0gVUFSVF9DTURfRU5BX0RFVikgJiYgXA0KKyAgICAgICAgICAgIChjdHJsX2NtZCAhPSBVQVJUX0NNRF9ESVNfREVWKSAmJiBcDQorICAgICAgICAgICAgKGN0cmxfY21kICE9IFVBUlRfQ01EX0dFVF9TVEFUVVMpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFX1NZUzsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKGN0cmxfY21kKQ0KKyAgICB7DQorICAgIGNhc2UgVUFSVF9DTURfU0VUX0JBVUQ6DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKHZhbDMyID4gMCwgRV9QQVIpOw0KKw0KKyAgICAgICAgaWYgKHZhbDMyICE9IHVhcnRfaW5mb19wdHItPmJhdWRyYXRlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJhdWRfZGl2aXNvciA9IERXX1VBUlRfQkFVRDJESVYodWFydF9jdHJsX3B0ci0+ZHdfYXBiX2J1c19mcmVxLCB2YWwzMik7DQorICAgICAgICAgICAgZHdfdWFydF9zZXRfYmF1ZCh1YXJ0X3JlZ19wdHIsIGJhdWRfZGl2aXNvcik7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+YmF1ZHJhdGUgPSB2YWwzMjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0dFVF9TVEFUVVM6DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IHVhcnRfaW5mb19wdHItPnN0YXR1czsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0VOQV9ERVY6DQorICAgICAgICBkd191YXJ0X2VuYWJsZV9kZXZpY2UodWFydF9pbmZvX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9ESVNfREVWOg0KKyAgICAgICAgZHdfdWFydF9kaXNhYmxlX2RldmljZSh1YXJ0X2luZm9fcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0ZMVVNIX09VVFBVVDoNCisgICAgICAgIGR3X3VhcnRfZmx1c2hfb3V0cHV0KHVhcnRfaW5mb19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfR0VUX1JYQVZBSUw6DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUCgocGFyYW0gIT0gTlVMTCkgJiYgQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgKigoaW50MzJfdCAqKXBhcmFtKSA9IGR3X3VhcnRfZ2V0X3J4YXZhaWwodWFydF9jdHJsX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9HRVRfVFhBVkFJTDoNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKChwYXJhbSAhPSBOVUxMKSAmJiBDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorICAgICAgICAqKChpbnQzMl90ICopcGFyYW0pID0gZHdfdWFydF9nZXRfdHhhdmFpbCh1YXJ0X2N0cmxfcHRyKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0JSRUFLX1NFVDoNCisgICAgICAgIGR3X3VhcnRfc2V0X2JyZWFrKHVhcnRfcmVnX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9CUkVBS19DTFI6DQorICAgICAgICBkd191YXJ0X2Nscl9icmVhayh1YXJ0X3JlZ19wdHIpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfU0VUX0RQU19GT1JNQVQ6DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUChwYXJhbSAhPSBOVUxMLCBFX1BBUik7DQorICAgICAgICBkcHNfcHRyID0gKFVBUlRfRFBTX0ZPUk1BVCAqKXBhcmFtOw0KKw0KKyAgICAgICAgaWYgKGR3X3VhcnRfc2V0X2Rwcyh1YXJ0X3JlZ19wdHIsIGRwc19wdHIpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+ZHBzX2Zvcm1hdCA9ICpkcHNfcHRyOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGVyY2QgPSBFX1BBUjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9IV0ZDOg0KKyAgICAgICAgaHdmY19sb2NhbCA9IChVQVJUX0hXX0ZMT1dfQ09OVFJPTClwYXJhbTsNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKCgoaHdmY19sb2NhbCA+PSBVQVJUX0ZDX05PTkUpICYmIChod2ZjX2xvY2FsIDw9IFVBUlRfRkNfQk9USCkpLCBFX1BBUik7DQorICAgICAgICBkd191YXJ0X3NldF9od2ZjKHVhcnRfcmVnX3B0ciwgaHdmY19sb2NhbCk7DQorICAgICAgICB1YXJ0X2luZm9fcHRyLT5od2ZjID0gaHdmY19sb2NhbDsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9UWENCOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMudHhfY2IgPSBwYXJhbTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9SWENCOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKyAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMucnhfY2IgPSBwYXJhbTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9FUlJDQjoNCisgICAgICAgIERXX1VBUlRfQ0hFQ0tfRVhQKENIRUNLX0FMSUdOXzRCWVRFUyhwYXJhbSksIEVfUEFSKTsNCisgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLmVycl9jYiA9IHBhcmFtOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfQUJPUlRfVFg6DQorICAgICAgICBkd191YXJ0X2Fib3J0X3R4KHVhcnRfb2JqKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX0FCT1JUX1JYOg0KKyAgICAgICAgZHdfdWFydF9hYm9ydF9yeCh1YXJ0X29iaik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfVFhJTlQ6DQorICAgICAgICB2YWwzMiA9ICh1aW50MzJfdClwYXJhbTsNCisNCisgICAgICAgIGlmICh2YWwzMiA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGR3X3VhcnRfZGlzX2Nicih1YXJ0X2luZm9fcHRyLCBEV19VQVJUX1JEWV9TTkQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGR3X3VhcnRfZW5hX2Nicih1YXJ0X2luZm9fcHRyLCBEV19VQVJUX1JEWV9TTkQpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgVUFSVF9DTURfU0VUX1JYSU5UOg0KKyAgICAgICAgdmFsMzIgPSAodWludDMyX3QpcGFyYW07DQorDQorICAgICAgICBpZiAodmFsMzIgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd191YXJ0X2Rpc19jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfUkNWKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBkd191YXJ0X2VuYV9jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfUkNWKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFVBUlRfQ01EX1NFVF9UWElOVF9CVUY6DQorICAgICAgICBEV19VQVJUX0NIRUNLX0VYUChDSEVDS19BTElHTl80QllURVMocGFyYW0pLCBFX1BBUik7DQorDQorICAgICAgICBpZiAocGFyYW0gIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBkZXZidWYgPSAoREVWX0JVRkZFUiAqKXBhcmFtOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnR4X2J1ZiA9ICpkZXZidWY7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dHhfYnVmLm9mcyA9IDA7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dHhfYnVmLmJ1ZiA9IE5VTEw7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dHhfYnVmLmxlbiA9IDA7DQorICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dHhfYnVmLm9mcyA9IDA7DQorICAgICAgICB9DQorDQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBVQVJUX0NNRF9TRVRfUlhJTlRfQlVGOg0KKyAgICAgICAgRFdfVUFSVF9DSEVDS19FWFAoQ0hFQ0tfQUxJR05fNEJZVEVTKHBhcmFtKSwgRV9QQVIpOw0KKw0KKyAgICAgICAgaWYgKHBhcmFtICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgZGV2YnVmID0gKERFVl9CVUZGRVIgKilwYXJhbTsNCisgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT5yeF9idWYgPSAqZGV2YnVmOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnJ4X2J1Zi5vZnMgPSAwOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnJ4X2J1Zi5idWYgPSBOVUxMOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnJ4X2J1Zi5sZW4gPSAwOw0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnJ4X2J1Zi5vZnMgPSAwOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICBlcmNkID0gRV9OT1NQVDsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNlbmQgZGF0YSB0aHJvdWdoIERlc2lnbldhcmUgVUFSVA0KKyAqIFxwYXJhbVtpbl0gICB1YXJ0X29iaiAgICB1YXJ0IG9iamVjdCBzdHJ1Y3R1cmUgcG9pbnRlcg0KKyAqIFxwYXJhbVtpbl0gICBkYXRhICAgICAgICBkYXRhIHRoYXQgbmVlZCB0byBzZW5kIChkYXRhIG11c3QgYmUgY2hhciB0eXBlKQ0KKyAqIFxwYXJhbVtpbl0gICBsZW4gICAgIGRhdGEgbGVuZ3RoIG5lZWQgdG8gc2VuZA0KKyAqIFxyZXR2YWwgID4wICBCeXRlIGNvdW50IHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IGZvciBwb2xsIG1ldGhvZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgY3VycmVudCBjb250cm9sIGNvbW1hbmQNCisgKiBccmV0dmFsICBFX1NZUyAgIENhbid0IHdyaXRlIGRhdGEgdG8gaGFyZHdhcmUgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcw0KKyAqLw0KK2ludDMyX3QgZHdfdWFydF93cml0ZShERVZfVUFSVCAqdWFydF9vYmosIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCit7DQorICAgIGludDMyX3QgZXJjZCA9IEVfT0s7DQorICAgIERFVl9VQVJUX0lORk8gKnVhcnRfaW5mb19wdHIgPSAmKHVhcnRfb2JqLT51YXJ0X2luZm8pOw0KKw0KKyAgICAvKiBTVEFSVCBFUlJPUiBDSEVDSyAqLw0KKyAgICBWQUxJRF9DSEtfVUFSVF9JTkZPX09CSkVDVCh1YXJ0X2luZm9fcHRyKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAodWFydF9pbmZvX3B0ci0+b3BuX2NudCA+IDAsIEVfQ0xTRUQpOw0KKyAgICBEV19VQVJUX0NIRUNLX0VYUCh1YXJ0X2luZm9fcHRyLT5zdGF0dXMgJiBERVZfRU5BQkxFRCwgRV9TWVMpOw0KKyAgICBEV19VQVJUX0NIRUNLX0VYUChkYXRhICE9IE5VTEwsIEVfUEFSKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAobGVuID4gMCwgRV9QQVIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgaW50MzJfdCBpID0gMDsNCisgICAgY29uc3QgY2hhciAqcF9jaGFyYnVmID0gKGNvbnN0IGNoYXIgKilkYXRhOw0KKw0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIHdoaWxlIChpIDwgbGVuKQ0KKyAgICB7DQorICAgICAgICBkd191YXJ0X3BzbmRfY2hyKHVhcnRfcmVnX3B0ciwgcF9jaGFyYnVmW2krK10pOw0KKyAgICB9DQorDQorICAgIGVyY2QgPSBpOw0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybiBlcmNkOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICByZWFkIGRhdGEgdGhyb3VnaCBEZXNpZ25XYXJlIFVBUlQNCisgKiBccGFyYW1baW5dICAgdWFydF9vYmogICAgdWFydCBvYmplY3Qgc3RydWN0dXJlIHBvaW50ZXINCisgKiBccGFyYW1bb3V0XSAgZGF0YSAgICAgICAgZGF0YSB0aGF0IG5lZWQgdG8gcmVhZCAoZGF0YSBtdXN0IGJlIGNoYXIgdHlwZSkNCisgKiBccGFyYW1baW5dICAgbGVuICAgICBkYXRhIGNvdW50IG5lZWQgdG8gcmVhZA0KKyAqIFxyZXR2YWwgID4wICBCeXRlIGNvdW50IHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IGZvciBwb2xsIG1ldGhvZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgY3VycmVudCBjb250cm9sIGNvbW1hbmQNCisgKiBccmV0dmFsICBFX1NZUyAgIENhbid0IHJlY2VpdmUgZGF0YSBmcm9tIGhhcmR3YXJlIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMsIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICovDQoraW50MzJfdCBkd191YXJ0X3JlYWQoREVWX1VBUlQgKnVhcnRfb2JqLCB2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICBpbnQzMl90IGVyY2QgPSBFX09LOw0KKyAgICBERVZfVUFSVF9JTkZPICp1YXJ0X2luZm9fcHRyID0gJih1YXJ0X29iai0+dWFydF9pbmZvKTsNCisNCisgICAgLyogU1RBUlQgRVJST1IgQ0hFQ0sgKi8NCisgICAgVkFMSURfQ0hLX1VBUlRfSU5GT19PQkpFQ1QodWFydF9pbmZvX3B0cik7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKHVhcnRfaW5mb19wdHItPm9wbl9jbnQgPiAwLCBFX0NMU0VEKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAodWFydF9pbmZvX3B0ci0+c3RhdHVzICYgREVWX0VOQUJMRUQsIEVfU1lTKTsNCisgICAgRFdfVUFSVF9DSEVDS19FWFAoZGF0YSAhPSBOVUxMLCBFX1BBUik7DQorICAgIERXX1VBUlRfQ0hFQ0tfRVhQKGxlbiA+IDAsIEVfUEFSKTsNCisgICAgLyogRU5EIE9GIEVSUk9SIENIRUNLICovDQorDQorICAgIGludDMyX3QgaSA9IDA7DQorICAgIGNoYXIgKnBfY2hhcmJ1ZiA9IChjaGFyICopZGF0YTsNCisNCisgICAgRFdfVUFSVF9DVFJMICp1YXJ0X2N0cmxfcHRyID0gKERXX1VBUlRfQ1RSTF9QVFIpKHVhcnRfaW5mb19wdHItPnVhcnRfY3RybCk7DQorICAgIERXX1VBUlRfUkVHICp1YXJ0X3JlZ19wdHIgPSAoRFdfVUFSVF9SRUdfUFRSKSh1YXJ0X2N0cmxfcHRyLT5kd191YXJ0X3JlZ2Jhc2UpOw0KKw0KKyAgICB3aGlsZSAoaSA8IGxlbikNCisgICAgew0KKyAgICAgICAgcF9jaGFyYnVmW2krK10gPSBkd191YXJ0X3ByY3ZfY2hyKHVhcnRfcmVnX3B0cik7DQorICAgIH0NCisNCisgICAgZXJjZCA9IGk7DQorDQorZXJyb3JfZXhpdDoNCisgICAgcmV0dXJuIGVyY2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyByb3V0aW5lDQorICogXHBhcmFtW2luXSAgIHVhcnRfb2JqICAgIHVhcnQgb2JqZWN0IHN0cnVjdHVyZSBwb2ludGVyDQorICogXHBhcmFtW2luXSAgIHB0ciAgICAgZXh0cmEgaW5mb3JtYXRpb24NCisgKi8NCit2b2lkIGR3X3VhcnRfaXNyKERFVl9VQVJUICp1YXJ0X29iaiwgdm9pZCAqcHRyKQ0KK3sNCisgICAgaW50MzJfdCBlcmNkID0gRV9PSzsNCisgICAgREVWX1VBUlRfSU5GTyAqdWFydF9pbmZvX3B0ciA9ICYodWFydF9vYmotPnVhcnRfaW5mbyk7DQorDQorICAgIC8qIFNUQVJUIEVSUk9SIENIRUNLICovDQorICAgIFZBTElEX0NIS19VQVJUX0lORk9fT0JKRUNUKHVhcnRfaW5mb19wdHIpOw0KKyAgICAvKiBFTkQgT0YgRVJST1IgQ0hFQ0sgKi8NCisNCisgICAgdWludDMyX3QgdWFydF9pbnRfc3RhdHVzOyAvKiogdWFydCBpbnRlcnJ1cHQgc3RhdHVzICovDQorICAgIHZvbGF0aWxlIHVpbnQzMl90IHRlbXA7IC8qKiByZWFkIGVycm9yIHN0YXR1cyB0byBjbGVhciBpbnRlcnJ1cHQgKi8NCisgICAgREVWX0JVRkZFUiAqYnVmX3B0cjsNCisgICAgY2hhciAqcF9jaGFyYnVmOw0KKw0KKyAgICBEV19VQVJUX0NUUkwgKnVhcnRfY3RybF9wdHIgPSAoRFdfVUFSVF9DVFJMX1BUUikodWFydF9pbmZvX3B0ci0+dWFydF9jdHJsKTsNCisgICAgRFdfVUFSVF9SRUcgKnVhcnRfcmVnX3B0ciA9IChEV19VQVJUX1JFR19QVFIpKHVhcnRfY3RybF9wdHItPmR3X3VhcnRfcmVnYmFzZSk7DQorDQorICAgIC8qKiBnZXQgdWFydCBpbnRlcnJ1cHQgc3RhdHVzICovDQorICAgIHVhcnRfaW50X3N0YXR1cyA9ICh1YXJ0X3JlZ19wdHItPklJUikgJiBEV19VQVJUX0lJUl9JTlRfSURfTUFTSzsNCisNCisgICAgc3dpdGNoICh1YXJ0X2ludF9zdGF0dXMpDQorICAgIHsNCisgICAgY2FzZSBEV19VQVJUX0lJUl9NRE1fU1RBVFVTOg0KKyAgICAgICAgdGVtcCA9ICh2b2xhdGlsZSB1aW50MzJfdCkodWFydF9yZWdfcHRyLT5NU1IpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRFdfVUFSVF9JSVJfTElORV9TVEFUVVM6DQorICAgICAgICBpZiAodWFydF9pbmZvX3B0ci0+dWFydF9jYnMuZXJyX2NiKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLmVycl9jYih1YXJ0X2luZm9fcHRyKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHRlbXAgPSAodm9sYXRpbGUgdWludDMyX3QpKHVhcnRfcmVnX3B0ci0+TFNSKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX1VBUlRfSUlSX1hNSVRfRU1QVFk6DQorICAgICAgICBidWZfcHRyID0gJih1YXJ0X2luZm9fcHRyLT50eF9idWYpOw0KKyAgICAgICAgcF9jaGFyYnVmID0gKGNoYXIgKilidWZfcHRyLT5idWY7DQorDQorICAgICAgICBpZiAocF9jaGFyYnVmICE9IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgd2hpbGUgKGR3X3VhcnRfcHV0cmVhZHkodWFydF9yZWdfcHRyKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGR3X3VhcnRfcHV0Y2hhcih1YXJ0X3JlZ19wdHIsIHBfY2hhcmJ1ZltidWZfcHRyLT5vZnNdKTsNCisgICAgICAgICAgICAgICAgYnVmX3B0ci0+b2ZzICsrOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoYnVmX3B0ci0+b2ZzID49IGJ1Zl9wdHItPmxlbikNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgZHdfdWFydF9kaXNfY2JyKHVhcnRfaW5mb19wdHIsIERXX1VBUlRfUkRZX1NORCk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAodWFydF9pbmZvX3B0ci0+dWFydF9jYnMudHhfY2IpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMudHhfY2IodWFydF9vYmopOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgdGhlIHNlbmQgYnVmZmVyIHBvaW50ZXIgKi8NCisgICAgICAgICAgICAgICAgICAgIG1lbXNldChidWZfcHRyLCAwLCBzaXplb2YoREVWX0JVRkZFUikpOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHVhcnRfaW5mb19wdHItPnVhcnRfY2JzLnR4X2NiKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdWFydF9pbmZvX3B0ci0+dWFydF9jYnMudHhfY2IodWFydF9vYmopOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIERXX1VBUlRfSUlSX1JYX1RJTUVPVVQ6DQorICAgICAgICB0ZW1wID0gZHdfdWFydF9nZXRjaGFyKHVhcnRfcmVnX3B0cik7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBEV19VQVJUX0lJUl9EQVRBX0FWQUlMOg0KKyAgICAgICAgYnVmX3B0ciA9ICYodWFydF9pbmZvX3B0ci0+cnhfYnVmKTsNCisgICAgICAgIHBfY2hhcmJ1ZiA9IChjaGFyICopYnVmX3B0ci0+YnVmOw0KKw0KKyAgICAgICAgaWYgKHBfY2hhcmJ1ZiAhPSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHdoaWxlIChkd191YXJ0X2dldHJlYWR5KHVhcnRfcmVnX3B0cikpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBwX2NoYXJidWZbYnVmX3B0ci0+b2ZzXSA9IChjaGFyKWR3X3VhcnRfZ2V0Y2hhcih1YXJ0X3JlZ19wdHIpOw0KKyAgICAgICAgICAgICAgICBidWZfcHRyLT5vZnMgKys7DQorDQorICAgICAgICAgICAgICAgIGlmIChidWZfcHRyLT5vZnMgPj0gYnVmX3B0ci0+bGVuKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBkd191YXJ0X2Rpc19jYnIodWFydF9pbmZvX3B0ciwgRFdfVUFSVF9SRFlfUkNWKTsNCisNCisgICAgICAgICAgICAgICAgICAgIGlmICh1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy5yeF9jYikNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy5yeF9jYih1YXJ0X29iaik7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAvKiBjbGVhciB0aGUgc2VuZCBidWZmZXIgcG9pbnRlciAqLw0KKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGJ1Zl9wdHIsIDAsIHNpemVvZihERVZfQlVGRkVSKSk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAodWFydF9pbmZvX3B0ci0+dWFydF9jYnMucnhfY2IpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB1YXJ0X2luZm9fcHRyLT51YXJ0X2Nicy5yeF9jYih1YXJ0X29iaik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICB0ZW1wID0gKHZvbGF0aWxlIHVpbnQzMl90KSh1YXJ0X3JlZ19wdHItPlVTUik7DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKw0KK2Vycm9yX2V4aXQ6DQorICAgIHJldHVybjsNCit9DQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXNpZ253YXJlL3VhcnQvZHdfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTQ3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0LmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMjANCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBERVZJQ0VfRFdfVUFSVA0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBkcml2ZXIgaGVhZGVyIGZpbGUNCisgKiBcZGV0YWlscyAgICAgZGV0YWlsZWQgZGVmaW5pdGlvbnMgb2YgZGVzaWdud2FyZSB1YXJ0IGRyaXZlcg0KKyAqLw0KKw0KKyNpZm5kZWYgX0RXX1VBUlRfSF8NCisjZGVmaW5lIF9EV19VQVJUX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfdWFydC5oIg0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19leGNlcHRpb24uaCINCisNCisvKioNCisgKiBpZiB0aGlzIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkLA0KKyAqIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGlzIGRlc2lnbndhcmUgdWFydCBkZXZpY2UNCisgKiBpcyB1c2VkDQorICovDQorI2RlZmluZSBERVZJQ0VfVVNFX0RFU0lHTldBUkVfVUFSVA0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBSZWdpc3RlciBTdHJ1Y3R1cmUNCisgKiBcYnJpZWYgICBjb250YWlucyBkZWZpbml0aW9ucyBvZiBEZXNpZ25XYXJlIFVBUlQgcmVnaXN0ZXIgc3RydWN0dXJlLg0KKyAqIEB7DQorICovDQorLyoqDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIHJlZ2lzdGVyIHN0cnVjdHVyZQ0KKyAqIFxkZXRhaWxzIERldGFpbGVkIHN0cnVjdCBkZXNjcmlwdGlvbiBvZiBEZXNpZ25XYXJlIFVBUlQNCisgKiAgYmxvY2sgcmVnaXN0ZXIgaW5mb3JtYXRpb24sIGltcGxlbWVudGF0aW9uIG9mIGRldl91YXJ0X2luZm86OnVhcnRfcmVncw0KKyAqLw0KK3R5cGVkZWYgdm9sYXRpbGUgc3RydWN0IGR3X3VhcnRfcmVnDQorew0KKyAgICB1aW50MzJfdCBEQVRBOyAgICAgIC8qITwgZGF0YSBpbi9vdXQgYW5kIERMTCAqLw0KKyAgICB1aW50MzJfdCBJRVI7ICAgICAgIC8qITwgSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBhbmQgRExIICovDQorICAgIHVpbnQzMl90IElJUjsgICAgICAgLyohPCBJbnRlcnJ1cHQgSWQgcmVnaXN0ZXIgYW5kIEZDUiAqLw0KKyAgICB1aW50MzJfdCBMQ1I7ICAgICAgIC8qITwgTGluZSBjb250cm9sIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IE1DUjsgICAgICAgLyohPCBNb2RlbSBjb250cm9sIHJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IExTUjsgICAgICAgLyohPCBMaW5lIFN0YXR1cyBSZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBNU1I7ICAgICAgIC8qITwgTW9kZW0gc3RhdHVzIFJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFNDUkFUQ0hQQUQ7ICAgIC8qITwgVWFydCBzY3JhdGNoIHBhZCByZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBMUERMTDsgICAgIC8qITwgTG93IFBvd2VyIERpdmlzb3IgTGF0Y2ggKExvdykgUmVnICovDQorICAgIHVpbnQzMl90IExQRExIOyAgICAgLyohPCBMb3cgUG93ZXIgRGl2aXNvciBMYXRjaCAoSGlnaCkgUmVnICovDQorICAgIHVpbnQzMl90IFJFUzFbMl07ICAgLyohPCBSZXNlcnZlZCAqLw0KKyAgICB1aW50MzJfdCBTSFJbMTZdOyAgIC8qITwgU2hhZG93IGRhdGEgcmVnaXN0ZXIoU1JCUiBhbmQgU1RIUikgKi8NCisgICAgdWludDMyX3QgRkFSOyAgICAgICAvKiE8IEZJRk8gQWNjZXNzIHJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IFRGUjsgICAgICAgLyohPCBUcmFuc21pdCBGSUZPIFJlYWQgKi8NCisgICAgdWludDMyX3QgUkZXOyAgICAgICAvKiE8IFJlY2VpdmUgRklGTyB3cml0ZSAqLw0KKyAgICB1aW50MzJfdCBVU1I7ICAgICAgIC8qITwgVUFSVCBzdGF0dXMgcmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgVEZMOyAgICAgICAvKiE8IFRyYW5zbWl0IEZJRk8gbGV2ZWwgKi8NCisgICAgdWludDMyX3QgUkZMOyAgICAgICAvKiE8IFJlY2VpdmUgRklGTyBsZXZlbCAqLw0KKyAgICB1aW50MzJfdCBTUlI7ICAgICAgIC8qITwgU29mdHdhcmUgcmVzZXQgcmVnaXN0ZXIgKi8NCisgICAgdWludDMyX3QgU1JUUzsgICAgICAvKiE8IFNoYWRvdyByZXF1ZXN0IHRvIHNlbmQgKi8NCisgICAgdWludDMyX3QgU0JDUjsgICAgICAvKiE8IFNoYWRvdyBicmVhayBjb250cm9sICovDQorICAgIHVpbnQzMl90IFNETUFNOyAgICAgLyohPCBTaGFkb3cgRE1BIG1vZGUgKi8NCisgICAgdWludDMyX3QgU0ZFOyAgICAgICAvKiE8IFNoYWRvdyBGSUZPIGVuYWJsZSAqLw0KKyAgICB1aW50MzJfdCBTUlQ7ICAgICAgIC8qITwgU2hhZG93IFJDVlIgVHJpZ2dlciAqLw0KKyAgICB1aW50MzJfdCBTVEVUOyAgICAgIC8qITwgU2hhZG93IFRYIGVtcHR5IHJlZ2lzdGVyICovDQorICAgIHVpbnQzMl90IEhUWDsgICAgICAgLyohPCBIYWx0IFRYICovDQorICAgIHVpbnQzMl90IERNQVNBOyAgICAgLyohPCBETUEgU29mdHdhcmUgQUNLICovDQorICAgIHVpbnQzMl90IFJFUzJbMThdOyAgLyohPCBSZXNlcnZlZCAqLw0KKyAgICB1aW50MzJfdCBDUFI7ICAgICAgIC8qITwgQ2FtcG9uZW50IHBhcmFtZXRlciByZWdpc3RlciAqLw0KKyAgICB1aW50MzJfdCBVQ1Y7ICAgICAgIC8qITwgVUFSVCBDb21wb25lbnQgVmVyc2lvbiAqLw0KKyAgICB1aW50MzJfdCBDVFI7ICAgICAgIC8qITwgQ29tcG9uZW50IHR5cHcgcmVnaXN0ZXIgKi8NCit9IERXX1VBUlRfUkVHLCAqRFdfVUFSVF9SRUdfUFRSOw0KKy8qKiBAfSAqLw0KKw0KKyNkZWZpbmUgRFdfVUFSVF9HSU5UX0RJU0FCTEVEICAgKDApICAgICAvKiE8IGRlc2lnbndhcmUgaW50ZXJydXB0IGRpc2FibGVkIGZvciBjb250cm9sIHVhcnQgaXJxL2ZpcSAqLw0KKyNkZWZpbmUgRFdfVUFSVF9HSU5UX0VOQUJMRSAoMTw8MCkgICAgICAvKiE8IGRlc2lnbndhcmUgaW50ZXJydXB0IGVuYWJsZWQgZm9yIGNvbnRyb2wgdWFydCBpcnEvZmlxICovDQorI2RlZmluZSBEV19VQVJUX1RYSU5UX0VOQUJMRSAgICAoMTw8MSkgICAgICAvKiE8IGRlc2lnbndhcmUgaW50ZXJydXB0IGVuYWJsZWQgZm9yIGNvbnRyb2wgdHJhbnNtaXQgcHJvY2VzcyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9SWElOVF9FTkFCTEUgICAgKDE8PDIpICAgICAgLyohPCBkZXNpZ253YXJlIGludGVycnVwdCBlbmFibGVkIGZvciBjb250cm9sIHRyYW5zbWl0IHByb2Nlc3MgKi8NCisNCisvKioNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgY29udHJvbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAqIFxkZXRhaWxzIGltcGxlbWVudCBvZiBkZXZfdWFydF9pbmZvOjp1YXJ0X2N0cmwNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkd191YXJ0X2N0cmwNCit7DQorICAgIHVpbnQzMl90IGR3X3VhcnRfcmVnYmFzZTsgICAgICAgLyohPCB1YXJ0IGlwIHJlZ2lzdGVyIGJhc2UgKi8NCisgICAgdWludDMyX3QgZHdfYXBiX2J1c19mcmVxOyAgICAgICAvKiE8IHVhcnQgaXAgYXBiIGJ1cyBmcmVxdWVuY3kgKi8NCisgICAgdWludDMyX3QgaW50bm87ICAgICAgICAgICAgIC8qITwgdWFydCBpbnRlcnJ1cHQgdmVjdG9yIG51bWJlciAqLw0KKyAgICBJTlRfSEFORExFUiBkd191YXJ0X2ludF9oYW5kbGVyOyAgICAvKiE8IHVhcnQgaW50ZXJydXB0IGhhbmRsZXIgKi8NCisgICAgdWludDMyX3QgdHhfZmlmb19sZW47ICAgICAgICAgICAvKiE8IHRyYW5zbWl0IGZpZm8gbGVuZ3RoLCBzZXQgYnkgdXNlciBpbiBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgdWludDMyX3QgcnhfZmlmb19sZW47ICAgICAgICAgICAvKiE8IHJlY2VpdmUgZmlmbyBsZW5ndGgsIHNldCBieSB1c2VyIGluIG9iamVjdCBpbXBsZW1lbnRhdGlvbiAqLw0KKyAgICB1aW50MzJfdCBpbnRfc3RhdHVzOyAgICAgICAgICAgIC8qITwgaW50ZXJydXB0IHN0YXR1cyBmb3IgZGVzaWdud2FyZSB1YXJ0ICovDQorfSBEV19VQVJUX0NUUkwsICpEV19VQVJUX0NUUkxfUFRSOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBGdW5jdGlvbiBEZWNsYXJhdGlvbg0KKyAqIFxicmllZiAgIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiBkZXNpZ253YXJlIHVhcnQgZnVuY3Rpb25zLg0KKyAqIFxkZXRhaWxzIFRoaXMgYXJlIG9ubHkgdXNlZCBpbiB1YXJ0IG9iamVjdCBpbXBsZW1lbnRhdGlvbiBzb3VyY2UgZmlsZQ0KKyAqIEB7DQorICovDQorZXh0ZXJuIGludDMyX3QgZHdfdWFydF9vcGVuKERFVl9VQVJUICp1YXJ0X29iaiwgdWludDMyX3QgYmF1ZCk7DQorZXh0ZXJuIGludDMyX3QgZHdfdWFydF9jbG9zZShERVZfVUFSVCAqdWFydF9vYmopOw0KK2V4dGVybiBpbnQzMl90IGR3X3VhcnRfY29udHJvbChERVZfVUFSVCAqdWFydF9vYmosIHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSk7DQorZXh0ZXJuIGludDMyX3QgZHdfdWFydF93cml0ZShERVZfVUFSVCAqdWFydF9vYmosIGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbik7DQorZXh0ZXJuIGludDMyX3QgZHdfdWFydF9yZWFkKERFVl9VQVJUICp1YXJ0X29iaiwgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKTsNCitleHRlcm4gdm9pZCBkd191YXJ0X2lzcihERVZfVUFSVCAqdWFydF9vYmosIHZvaWQgKnB0cik7DQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRFdfVUFSVF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGVzaWdud2FyZS91YXJ0L2R3X3VhcnRfaGFsLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0X2hhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDVjNzcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2Rlc2lnbndhcmUvdWFydC9kd191YXJ0X2hhbC5oCkBAIC0wLDAgKzEsMjUzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTIwDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgREVWSUNFX0RXX0lJQw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBkcml2ZXIgaGFyZHdhcmUgZGVzY3JpcHRpb24gcmVsYXRlZCBoZWFkZXIgZmlsZQ0KKyAqIFxkZXRhaWxzIGRldGFpbGVkIGhhcmR3YXJlIHJlbGF0ZWQgZGVmaW5pdGlvbnMgb2YgRGVzaWduV2FyZSBVQVJUIGRyaXZlcg0KKyAqLw0KKw0KKyNpZm5kZWYgX0RFVklDRV9EV19VQVJUX0hBTF9IXw0KKyNkZWZpbmUgX0RFVklDRV9EV19VQVJUX0hBTF9IXw0KKw0KKy8qIERXIEFQQiBVQVJUIGJpdCBkZWZpbml0aW9ucyAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgSUVSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgSUVSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBJRVIgKi8NCisjZGVmaW5lIERXX1VBUlRfSUVSX0RBVEFfQVZBSUwgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX0lFUl9YTUlUX0VNUFRZICAgICAgICAgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9JRVJfTElORV9TVEFUVVMgICAgICAgICAoMHgwNCkNCisjZGVmaW5lIERXX1VBUlRfSUVSX01ETV9TVEFUVVMgICAgICAgICAgKDB4MDgpDQorI2RlZmluZSBEV19VQVJUX0lFUl9QVElNRSAgICAgICAgICAgKDB4ODApDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBJSVIgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBJSVIgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIElJUiAqLw0KKy8qIElJUiBSRUFEICovDQorI2RlZmluZSBEV19VQVJUX0lJUl9JUCAgICAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX0lJUl9NQVNLICAgICAgICAgICAgKDB4MEUpDQorI2RlZmluZSBEV19VQVJUX0lJUl9SRUFEX0ZJRk9fRU5BQkxFICAgICAgICAoMHhDMCkNCisNCisvKiBQb3NzaWJsZSBpbnRlcnJ1cHQgSUlSX01BU0sgdmFsdWVzICovDQorI2RlZmluZSBEV19VQVJUX0lJUl9NRE1fU1RBVFVTICAgICAgICAgICgweDAwKQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfWE1JVF9FTVBUWSAgICAgICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfSUlSX0RBVEFfQVZBSUwgICAgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX0lJUl9MSU5FX1NUQVRVUyAgICAgICAgICgweDA2KQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfUlhfVElNRU9VVCAgICAgICAgICAoMHgwQykNCisjZGVmaW5lIERXX1VBUlRfSUlSX0lOVF9JRF9NQVNLICAgICAgICAgKDB4MGYpDQorDQorLyogSUlSIFdSSVRFICovDQorI2RlZmluZSBEV19VQVJUX0lJUl9GSUZPX0VOQUJMRSAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfUkNWUl9GSUZPX1JFU0VUICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfSUlSX1hNSVRfRklGT19SRVNFVCAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX0lJUl9ETUFfTU9ERV9TRUxFQ1QgICAgICgweDA4KQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfUkNWX1RSSUdHRVJfTUFTSyAgICAgICAgKDB4QzApDQorDQorLyogVmFsdWVzIGZvciBJSVIgcmVjZWl2ZSB0cmlnZ2VyICovDQorI2RlZmluZSBEV19VQVJUX0lJUl9UUklHR0VSX0xFVkVMXzFfQ0hBUiAgICAoMHgwMCkNCisjZGVmaW5lIERXX1VBUlRfSUlSX1RSSUdHRVJfTEVWRUxfMV80X0ZVTEwgICgweDQwKQ0KKyNkZWZpbmUgRFdfVUFSVF9JSVJfVFJJR0dFUl9MRVZFTF8xXzJfRlVMTCAgKDB4ODApDQorI2RlZmluZSBEV19VQVJUX0lJUl9UUklHR0VSX0xFVkVMXzJfTEVTU19GVUxMICAgKDB4QzApDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBMQ1IgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBMQ1IgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIExDUiAqLw0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfV09SRF9MRU5fTUFTSyAgICAgICAoMHgwMykNCisjZGVmaW5lIERXX1VBUlRfTENSX1NUT1BfQklUX01BU0sgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX0xDUl9QQVJJVFlfTUFTSyAgICAgICAgICgweDM4KQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfRFBTX01BU0sgICAgICAgICAgICAoMHgzRikNCisjZGVmaW5lIERXX1VBUlRfTENSX1NUSUNLX1BBUklUWSAgICAgICAgKDB4MjApDQorI2RlZmluZSBEV19VQVJUX0xDUl9CUkVBSyAgICAgICAgICAgKDB4NDApDQorI2RlZmluZSBEV19VQVJUX0xDUl9ETEFCICAgICAgICAgICAgKDB4ODApDQorDQorLyogV29yZCBsZW5ndGggdmFsdWVzICovDQorI2RlZmluZSBEV19VQVJUX0xDUl9XT1JEX0xFTjUgICAgICAgICAgICgweDAwKQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfV09SRF9MRU42ICAgICAgICAgICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfTENSX1dPUkRfTEVONyAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX0xDUl9XT1JEX0xFTjggICAgICAgICAgICgweDAzKQ0KKw0KKy8qIHN0b3AgYml0IHZhbHVlcyAqLw0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfMV9TVE9QX0JJVCAgICAgICAgICAoMHgwMCkNCisjZGVmaW5lIERXX1VBUlRfTENSXzFENV9TVE9QX0JJVCAgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX0xDUl8yX1NUT1BfQklUICAgICAgICAgICgweDA0KQ0KKw0KKy8qIFBhcml0eSBiaXQgdmFsdWVzICovDQorI2RlZmluZSBEV19VQVJUX0xDUl9QQVJJVFlfTk9ORSAgICAgICAgICgweDAwKQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfUEFSSVRZX09ERCAgICAgICAgICAoMHgwOCkNCisjZGVmaW5lIERXX1VBUlRfTENSX1BBUklUWV9FVkVOICAgICAgICAgKDB4MTgpDQorI2RlZmluZSBEV19VQVJUX0xDUl9QQVJJVFlfTUFSSyAgICAgICAgICgweDI4KQ0KKyNkZWZpbmUgRFdfVUFSVF9MQ1JfUEFSSVRZX1NQQUNFICAgICAgICAoMHgzOCkNCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIE1DUiBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIE1DUiByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogTUNSICovDQorI2RlZmluZSBEV19VQVJUX01DUl9EVFIgICAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX01DUl9SVFMgICAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX01DUl9MT09QQkFDSyAgICAgICAgICAgICgweDEwKQ0KKyNkZWZpbmUgRFdfVUFSVF9NQ1JfQUZDRSAgICAgICAgICAgICgweDIwKQ0KKyNkZWZpbmUgRFdfVUFSVF9NQ1JfU0lSRSAgICAgICAgICAgICgweDQwKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgTFNSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgTFNSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBMU1IgKi8NCisjZGVmaW5lIERXX1VBUlRfTFNSX0RSICAgICAgICAgICAgICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfTFNSX09WRVJSVU4gICAgICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfTFNSX1BBUklUWUVSUiAgICAgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX0xTUl9GUkFNRUVSUiAgICAgICAgICAgICgweDA4KQ0KKyNkZWZpbmUgRFdfVUFSVF9MU1JfQlJFQUtSQ1ZEICAgICAgICAgICAoMHgxMCkNCisjZGVmaW5lIERXX1VBUlRfTFNSX1RYRF9FTVBUWSAgICAgICAgICAgKDB4MjApDQorI2RlZmluZSBEV19VQVJUX0xTUl9UWF9TVEFUVVMgICAgICAgICAgICgweDQwKQ0KKyNkZWZpbmUgRFdfVUFSVF9MU1JfUlhfRklGT0VSUiAgICAgICAgICAoMHg4MCkNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIE1TUiBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIE1TUiByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogTVNSICovDQorI2RlZmluZSBEV19VQVJUX01TUl9EQ1RTICAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX01TUl9ERFNSICAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX01TUl9URVJJICAgICAgICAgICAgKDB4MDQpDQorI2RlZmluZSBEV19VQVJUX01TUl9ERENEICAgICAgICAgICAgKDB4MDgpDQorI2RlZmluZSBEV19VQVJUX01TUl9DVFMgICAgICAgICAgICAgKDB4MTApDQorI2RlZmluZSBEV19VQVJUX01TUl9EU1IgICAgICAgICAgICAgKDB4MjApDQorI2RlZmluZSBEV19VQVJUX01TUl9SSUMgICAgICAgICAgICAgKDB4NDApDQorI2RlZmluZSBEV19VQVJUX01TUl9EQ0QgICAgICAgICAgICAgKDB4ODApDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBGQ1IgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBGQ1IgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIEZDUiAqLw0KKyNkZWZpbmUgRFdfVUFSVF9GQ1JfRkVOICAgICAgICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9GQ1JfUkZSICAgICAgICAgICAgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9GQ1JfVEZSICAgICAgICAgICAgICgweDA0KQ0KKyNkZWZpbmUgRFdfVUFSVF9GQ1JfRE1TICAgICAgICAgICAgICgweDA4KQ0KKyNkZWZpbmUgRFdfVUFSVF9GQ1JfUlRMICAgICAgICAgICAgICgweEMwKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgVVNSIE1hcmNvcw0KKyAqIFxicmllZiAgIERlc2lnbldhcmUgVUFSVCBoYWwgVVNSIHJlbGF0ZWQgbWFjcm9zDQorICogQHsNCisgKi8NCisvKiBVU1IgKi8NCisjZGVmaW5lIERXX1VBUlRfVVNSX0JVU1kgICAgICAgICAgICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfVVNSX1RGTkYgICAgICAgICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfVVNSX1RGRSAgICAgICAgICAgICAoMHgwNCkNCisjZGVmaW5lIERXX1VBUlRfVVNSX1JGTkUgICAgICAgICAgICAoMHgwOCkNCisjZGVmaW5lIERXX1VBUlRfVVNSX1JGRiAgICAgICAgICAgICAoMHgxMCkNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIFNGRSBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIFNGRSByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogU0ZFICovDQorI2RlZmluZSBEV19VQVJUX1NGRV9TSEFET1dfRklGT19FTkFCTEUgICAgICAoMHgwMSkNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSAgICBEZXNpZ25XYXJlIFVBUlQgSEFMIFNSUiBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIFNSUiByZWxhdGVkIG1hY3Jvcw0KKyAqIEB7DQorICovDQorLyogU1JSICovDQorI2RlZmluZSBEV19VQVJUX1NSUl9VUiAgICAgICAgICAgICAgKDB4MDEpDQorI2RlZmluZSBEV19VQVJUX1NSUl9SRlIgICAgICAgICAgICAgKDB4MDIpDQorI2RlZmluZSBEV19VQVJUX1NSUl9YRlIgICAgICAgICAgICAgKDB4MDQpDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBTUlQgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBTUlQgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIFNSVCAqLw0KKyNkZWZpbmUgRFdfVUFSVF9TUlRfVFJJR0dFUl9MRVZFTF8xX0NIQVIgICAgKDB4MDApDQorI2RlZmluZSBEV19VQVJUX1NSVF9UUklHR0VSX0xFVkVMXzFfNF9GVUxMICAoMHgwMSkNCisjZGVmaW5lIERXX1VBUlRfU1JUX1RSSUdHRVJfTEVWRUxfMV8yX0ZVTEwgICgweDAyKQ0KKyNkZWZpbmUgRFdfVUFSVF9TUlRfVFJJR0dFUl9MRVZFTF8yX0xFU1NfRlVMTCAgICgweDAzKQ0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIERlc2lnbldhcmUgVUFSVCBIQUwgU1RFVCBNYXJjb3MNCisgKiBcYnJpZWYgICBEZXNpZ25XYXJlIFVBUlQgaGFsIFNURVQgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIFNURVQqLw0KKyNkZWZpbmUgRFdfVUFSVF9TVEVUX0ZJRk9fRU1QVFkgICAgICAgICAoMHgwMCkNCisjZGVmaW5lIERXX1VBUlRfU1RFVF8yX0NIQVJTX0lOX0ZJRk8gICAgICAgICgweDAxKQ0KKyNkZWZpbmUgRFdfVUFSVF9TVEVUXzFfNF9GVUxMICAgICAgICAgICAoMHgwMikNCisjZGVmaW5lIERXX1VBUlRfU1RFVF8xXzJfRlVMTCAgICAgICAgICAgKDB4MDMpDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgICAgRGVzaWduV2FyZSBVQVJUIEhBTCBDUFIgTWFyY29zDQorICogXGJyaWVmICAgRGVzaWduV2FyZSBVQVJUIGhhbCBDUFIgcmVsYXRlZCBtYWNyb3MNCisgKiBAew0KKyAqLw0KKy8qIENQUiovDQorI2RlZmluZSBEV19VQVJUX0NQUl9GSUZPX1NUQVQgICAgICAgICAgICgxPDwxMCkNCisjZGVmaW5lIERXX1VBUlRfQ1BSX0ZJRk9fTU9ERV9PRlMgICAgICAgKDE2KQ0KKyNkZWZpbmUgRFdfVUFSVF9DUFJfRklGT19NT0RFX01BU0sgICAgICAoMHhGRikNCisjZGVmaW5lIERXX1VBUlRfQ1BSX0ZJRk9fTU9ERSAgICAgICAgICAgKDB4RkYwMDAwKQ0KKy8qKiBAfSAqLw0KKw0KKyNlbmRpZiAvKiBfREVWSUNFX0RXX1VBUlRfSEFMX0hfICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfY29tbW9uLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWE1NGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfY29tbW9uLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMTYNCisgKiBcYXV0aG9yIEh1YXFpIEZhbmcoSHVhcWkuRmFuZ0BzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfQ09NTU9OICAgQ29tbW9uIERldmljZSBMYXllciBEZWZpbml0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfREVGDQorICogXGJyaWVmICAgY29tbW9uIGRlZmluaXRpb25zIGZvciBkZXZpY2UgbGF5ZXIgKFxyZWYgZGV2X2NvbW1vbi5oKQ0KKyAqDQorICogQHsNCisgKg0KKyAqIFxmaWxlDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgdG8gZGVmaW5lIGNvbW1vbiBkZWZpbml0aW9ucyBmb3IgZGV2aWNlIGxheWVyDQorICogXGRldGFpbHMgSGVyZSBpbiB0aGlzIGZpbGUgcHJvdmlkZSBkZWZpbml0aW9ucyB0aGF0IG5lZWQgYnkgb3RoZXINCisgKiAgZGV2aWNlcyBpbiBkZXZpY2UgbGF5ZXINCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfSEFMX0NPTU1PTl9IXw0KKyNkZWZpbmUgX0RFVklDRV9IQUxfQ09NTU9OX0hfDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0NPTU1PTl9ERVZTVEFURSAgQ29tbW9uIERldmljZSBTdGF0ZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfQ09NTU9ODQorICogXGJyaWVmICAgZGVmaW5pdGlvbnMgZm9yIGRldmljZSBzdGF0ZQ0KKyAqIFxkZXRhaWxzIGhlcmUgZGVmaW5lcyBtYWNyb3MgZm9yIGRldmljZSBvcGVuL2Nsb3NlLA0KKyAqICBkZXZpY2Ugd29ya2luZyBnb29kL2Vycm9yLCB1c2VkIGluDQorICogIFxyZWYgREVWSUNFX0hBTF9VQVJULCBccmVmIERFVklDRV9IQUxfU1BJLA0KKyAqICBccmVmIERFVklDRV9IQUxfSUlDLCBccmVmIERFVklDRV9IQUxfR1BJTw0KKyAqIEB7DQorICovDQorLyoNCisgKiBtYWNyb3MgZm9yIGRldmljZSBvcGVuIGFuZCBjbG9zZSBzdGF0ZQ0KKyAqLw0KKyNkZWZpbmUgREVWX0NMT1NFRCAgICAgICAgICAgICAgKDApIC8qITwgSW5kaWNhdGUgdGhhdCBkZXZpY2Ugd2FzIGNsb3NlZCAqLw0KKyNkZWZpbmUgREVWX09QRU5FRCAgICAgICAgICAgICAgKDEpIC8qITwgSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIHdhcyBvcGVuZWQgKi8NCisNCisvKg0KKyAqIG1hY3JvcyBmb3IgZGV2aWNlIGdvb2QgYW5kIGVycm9yIHN0YXRlDQorICovDQorI2RlZmluZSBERVZfR09PRCAgICAgICAgICAgICAgICAoMCkgLyohPCBJbmRpY2F0ZSBkZXZpY2UgaXMgZ29vZCAqLw0KKyNkZWZpbmUgREVWX0VSUk9SICAgICAgICAgICAgICAgKDEpIC8qITwgSW5kaWNhdGUgZGV2aWNlIGVycm9yICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfQ09NTU9OX0RFVk1USEQgICBDb21tb24gRGV2aWNlIFdvcmtpbmcgTWV0aG9kDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9DT01NT04NCisgKiBcYnJpZWYgICBkZWZpbml0aW9ucyBmb3IgZGV2aWNlIHdvcmtpbmcgbWV0aG9kKGludGVycnVwdCBvciBwb2xsKQ0KKyAqIFxkZXRhaWxzIGhlcmUgZGVmaW5lcyBtYWNyb3MgZm9yIHdvcmtpbmcgbWV0aG9kLA0KKyAqICBpbnRlcnJ1cHQgb3IgcG9sbCBtZXRob2QsdXNlZCBpbg0KKyAqICBccmVmIERFVklDRV9IQUxfVUFSVCwgXHJlZiBERVZJQ0VfSEFMX1NQSSwNCisgKiAgXHJlZiBERVZJQ0VfSEFMX0lJQywgXHJlZiBERVZJQ0VfSEFMX0dQSU8NCisgKiBAew0KKyAqLw0KKy8qDQorICogbWFjcm9zIGZvciBkZXZpY2Ugd29ya2luZyBtZXRob2QNCisgKi8NCisjZGVmaW5lIERFVl9QT0xMX01FVEhPRCAgICAgICAgICAgICAoMCkgLyohPCBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgcnVubmluZyBpbiBwb2xsIG1ldGhvZCAqLw0KKyNkZWZpbmUgREVWX0lOVEVSUlVQVF9NRVRIT0QgICAgICAgICAgICAoMSkgLyohPCBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgcnVubmluZyBpbiBpbnRlcnJ1cHQgbWV0aG9kICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfQ09NTU9OX0RFVk1PREUgICBDb21tb24gRGV2aWNlIFdvcmtpbmcgTW9kZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfQ09NTU9ODQorICogXGJyaWVmICAgZGVmaW5pdGlvbnMgZm9yIGRldmljZSB3b3JraW5nIG1vZGUobWFzdGVyIG9yIHNsYXZlKQ0KKyAqIFxkZXRhaWxzIGhlcmUgZGVmaW5lcyBtYWNyb3MgZm9yIHdvcmtpbmcgbW9kZSwNCisgKiAgTWFzdGVyIG9yIFNsYXZlIG1vZGUsdXNlZCBpbg0KKyAqICBccmVmIERFVl9IQUxfSUlDLCBccmVmIERFVl9IQUxfU1BJLg0KKyAqIEB7DQorICovDQorLyoNCisgKiBtYWNyb3MgZm9yIGRldmljZSB3b3JraW5nIG1vZGUNCisgKi8NCisjZGVmaW5lIERFVl9NQVNURVJfTU9ERSAgICAgICAgICAgICAoMCkgLyohPCBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2Ugd29ya2luZyBhcyBtYXN0ZXIgKi8NCisjZGVmaW5lIERFVl9TTEFWRV9NT0RFICAgICAgICAgICAgICAoMSkgLyohPCBJbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2Ugd29ya2luZyBhcyBzbGF2ZSAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0NPTU1PTl9ERVZTVEFUVVMgQ29tbW9uIERldmljZSBTdGF0dXMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0NPTU1PTg0KKyAqIFxicmllZiAgIGRlZmluaXRpb25zIGZvciBkZXZpY2Ugc3RhdHVzLCAxIGJpdCBmb3IgMSBmdW5jdGlvbg0KKyAqIEB7DQorICovDQorI2RlZmluZSBERVZfRElTQUJMRUQgICAgICAgICAgICAgICAgKDApIC8qITwgQml0IDAgZm9yIGRldmljZSBlbmFibGVkIHN0YXRlLCBkaXNhYmxlZCAqLw0KKyNkZWZpbmUgREVWX0VOQUJMRUQgICAgICAgICAgICAgKDE8PDApICAvKiE8IEJpdCAwIGZvciBkZXZpY2UgZW5hYmxlZCBzdGF0ZSwgZW5hYmxlZCAqLw0KKyNkZWZpbmUgREVWX0lOX1RYICAgICAgICAgICAgICAgKDE8PDEpICAvKiE8IEJpdCAxIGZvciBkZXZpY2UgaW4gdHJhbnNtaXQgc3RhdGUgKi8NCisjZGVmaW5lIERFVl9JTl9SWCAgICAgICAgICAgICAgICgxPDwyKSAgLyohPCBCaXQgMiBmb3IgZGV2aWNlIGluIHJlY2VpdmUgc3RhdGUgKi8NCisjZGVmaW5lIERFVl9JTl9YRkVSICAgICAgICAgICAgICgxPDwzKSAgLyohPCBCaXQgMyBmb3IgZGV2aWNlIGluIHRyYW5zZmVyIHN0YXRlICovDQorI2RlZmluZSBERVZfSU5fVFhfQUJSVCAgICAgICAgICAgICAgKDE8PDQpICAvKiE8IEJpdCA0IGZvciBkZXZpY2UgaW4gdHJhbnNtaXQgYWJvcnQgc3RhdGUgKi8NCisjZGVmaW5lIERFVl9JTl9SWF9BQlJUICAgICAgICAgICAgICAoMTw8NSkgIC8qITwgQml0IDUgZm9yIGRldmljZSBpbiByZWNlaXZlIGFib3J0IHN0YXRlICovDQorI2RlZmluZSBERVZfSU5fWEZFUl9BQlJUICAgICAgICAgICAgKDE8PDYpICAvKiE8IEJpdCA2IGZvciBkZXZpY2UgaW4gdHJhbnNmZXIgYWJvcnQgc3RhdGUgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9DT01NT05fREVGQ01EICAgIENvbW1vbiBEZXZpY2UgRGVmaW5pbmcgQ29tbWFuZA0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfQ09NTU9ODQorICogXGJyaWVmICAgZGVmaW5pdGlvbnMgZm9yIGRlZmluaW5nIGNvbW1hbmQgY29kZQ0KKyAqIFxkZXRhaWxzIGhlcmUgZGVmaW5lcyBtYWNyb3MgdG8gZGVmaW5lIGNvbW1hbmQgY29kZSwNCisgKiAgaW4gc3lzdGVtIGNvZGUsIHVzZSBccmVmIERFVl9TRVRfU1lTQ01EIHRvIGRlZmluZSBjb21tYW5kIGNvZGUuDQorICogIGluIHVzZXIgY29kZSwgdXNlIFxyZWYgREVWX1NFVF9VU1JDTUQgdG8gZGVmaW5lIGNvbW1hbmQgY29kZS4NCisgKiAgU28gdGhhdCB0aGVyZSB3aWxsIGJlIG5vIGNvbmZsaWN0cyBpbiBzeXN0ZW0gYW5kIHVzZXIgZGVmaW5lZCBjb21tYW5kIGNvZGUuDQorICogIHRoaXMgdXNlZCB1c2VkIGluDQorICogIFxyZWYgREVWSUNFX0hBTF9VQVJULCBccmVmIERFVklDRV9IQUxfU1BJLA0KKyAqICBccmVmIERFVklDRV9IQUxfSUlDLCBccmVmIERFVklDRV9IQUxfR1BJTywNCisgKiAgICAgIGFuZCBpbiB1c2VyIGNvZGUNCisgKiBAew0KKyAqLw0KKy8qDQorICogbWFjcm9zIGZvciBjb250cm9sIGNvbW1hbmQgYmFzZQ0KKyAqLw0KKyNkZWZpbmUgREVWX1NZU19DTURCU0UgICAgICAgICAgICAgICgweDAwMDAwMDAwKSAgICAgICAgLyohPCBkZWZhdWx0IHN5c3RlbSBkZXZpY2UgY29udHJvbCBjb21tYW5kIGJhc2UoZGVmaW5lZCBieSBlbWJBUkMpICovDQorI2RlZmluZSBERVZfVVNSX0NNREJTRSAgICAgICAgICAgICAgKDB4ODAwMDAwMDApICAgICAgICAvKiE8IGRlZmF1bHQgdXNlciBkZXZpY2UgY29udHJvbCBjb21tYW5kIGJhc2UoZGVmaW5lZCBieSB1c2VyKSBpbiB1c2VyIGltcGxlbWVudGluZyAqLw0KKyNkZWZpbmUgREVWX1NFVF9TWVNDTUQoY21kKSAgICAgICAgIChERVZfU1lTX0NNREJTRXwoY21kKSkgIC8qITwgc2V0IGRldmljZSBzeXN0ZW0gY29udHJvbCBjb21tYW5kICovDQorI2RlZmluZSBERVZfU0VUX1VTUkNNRChjbWQpICAgICAgICAgKERFVl9VU1JfQ01EQlNFfChjbWQpKSAgLyohPCBzZXQgZGV2aWNlIHVzZXIgY29udHJvbCBjb21tYW5kICovDQorDQorI2RlZmluZSBDT05WMlZPSUQocGFyYW0pICAgICAgICAgICAgKCh2b2lkICopKHBhcmFtKSkgICAvKiE8IGNvbnZlcnQgcGFyYW0gaW50byB2b2lkICogdHlwZSAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIENvbW1vbiBEZXZpY2UgQnVmZmVyIFN0cnVjdHVyZQ0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9idWZmZXINCit7DQorICAgIHZvaWQgKmJ1ZjsgIC8qITwgYnVmZmVyIHBvaW50ZXIgKi8NCisgICAgdWludDMyX3QgbGVuOyAgIC8qITwgYnVmZmVyIGxlbmd0aCBpbiBieXRlcyAqLw0KKyAgICB1aW50MzJfdCBvZnM7ICAgLyohPCBjdXJyZW50IG9mZnNldCBpbiBidWZmZXIgKi8NCit9IERFVl9CVUZGRVI7DQorDQorLyoqIEluaXQgZGV2aWNlIGJ1ZmZlciAqLw0KKyNkZWZpbmUgREVWX0JVRkZFUl9JTklUKGRldmJ1ZiwgYnVmZmVyLCBzaXplKSAgIHsgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKGRldmJ1ZiktPmJ1ZiA9ICh2b2lkICopKGJ1ZmZlcik7ICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKGRldmJ1ZiktPmxlbiA9ICh1aW50MzJfdCkoc2l6ZSk7ICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKGRldmJ1ZiktPm9mcyA9ICh1aW50MzJfdCkoMCk7ICAgICAgXA0KKyAgICAgICAgICAgICAgICB9DQorDQorLyoqDQorICogICBEZXZpY2UgY2FsbGJhY2sgZnVuY3Rpb24gdHlwZWRlZi4NCisgKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBpbiBkZXZpY2UgY2FsbGJhY2sgc2V0dGluZ3MsDQorICogYW5kIFxwdHIgc2hvdWxkIGJlIHRoZSBkZXZpY2Ugb2JqZWN0IHBvaW50ZXIsDQorICogc3VjaCBhcyBERVZfSUlDICogKi8NCit0eXBlZGVmIHZvaWQgKCpERVZfQ0FMTEJBQ0spKHZvaWQgKnB0cik7DQorDQorLyoqIEB9ICovDQorI2VuZGlmIC8qIF9ERVZJQ0VfSEFMX0NPTU1PTl9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2dwaW8uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjRkMTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2RldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfZ3Bpby5oCkBAIC0wLDAgKzEsNDMxIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTE3DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0dQSU8gICAgIEdQSU8gRGV2aWNlIEhBTCBJbnRlcmZhY2UNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0RFRg0KKyAqIFxicmllZiAgIGRlZmluaXRpb25zIGZvciBncGlvIGRldmljZSBoYXJkd2FyZSBsYXllciAoXHJlZiBkZXZfZ3Bpby5oKQ0KKyAqIFxkZXRhaWxzIHByb3ZpZGUgaW50ZXJmYWNlcyBmb3IgZ3BpbyBkcml2ZXIgdG8gaW1wbGVtZW50DQorICogIEhlcmUgaXMgYSBkaWFncmFtIGZvciB0aGUgZ3BpbyBpbnRlcmZhY2UuDQorICoNCisgKiAgXGh0bWxvbmx5DQorICogIDxkaXYgY2xhc3M9ImltYWdlYm94Ij4NCisgKiAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweCI+DQorICogICAgICAgICAgPGltZyBzcmM9InBpYy9kZXZfZ3Bpb19oYWwuanBnIiBhbHQ9IkdQSU8gRGV2aWNlIEhBTCBJbnRlcmZhY2UgRGlhZ3JhbSIvPg0KKyAqICAgICAgICAgIDxwPkdQSU8gRGV2aWNlIEhBTCBJbnRlcmZhY2UgRGlhZ3JhbTwvcD4NCisgKiAgICAgIDwvZGl2Pg0KKyAqICA8L2Rpdj4NCisgKiAgXGVuZGh0bWxvbmx5DQorICoNCisgKiBAew0KKyAqDQorICogXGZpbGUNCisgKiBcYnJpZWYgICBncGlvIGRldmljZSBoYXJkd2FyZSBsYXllciBkZWZpbml0aW9ucw0KKyAqIFxkZXRhaWxzIFByb3ZpZGUgY29tbW9uIGRlZmluaXRpb25zIGZvciBncGlvIGRldmljZSwNCisgKiAgdGhlbiB0aGUgc29mdHdhcmUgZGV2ZWxvcGVyIGNhbiBkZXZlbG9wIGdwaW8gZHJpdmVyDQorICogIGZvbGxvd2luZyB0aGVzZSBkZWZpbml0aW9ucywgYW5kIHRoZSBhcHBsaWNhdGlvbnMNCisgKiAgY2FuIGRpcmVjdGx5IGNhbGwgdGhpcyBkZWZpbml0aW9uIHRvIHJlYWxpemUgZnVuY3Rpb25zDQorICoNCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfSEFMX0dQSU9fSF8NCisjZGVmaW5lIF9ERVZJQ0VfSEFMX0dQSU9fSF8NCisNCisjaW5jbHVkZSAiZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9jb21tb24uaCINCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9HUElPX0RFRkRJUiAgR1BJTyBQb3J0IERpcmVjdGlvbiBEZWZpbml0aW9uDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9HUElPDQorICogXGJyaWVmICAgRGVmaW5lIG1hY3JvcyB0byBpbmRpY2F0ZSBncGlvIGRpcmVjdGlvbnMNCisgKiBAew0KKyAqLw0KKy8qDQorICogZGVmaW5lcyBmb3IgZ3BpbyBkaXJlY3Rpb25zDQorICovDQorI2RlZmluZSBHUElPX0RJUl9JTlBVVCAgICAgICAgICAgICAgKDApICAgICAvKiE8IGdwaW8gd29ya3MgYXMgaW5wdXQgKi8NCisjZGVmaW5lIEdQSU9fRElSX09VVFBVVCAgICAgICAgICAgICAoMSkgICAgIC8qITwgZ3BpbyB3b3JrcyBhcyBvdXRwdXQgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9HUElPX0NUUkxDTUQgICAgIEdQSU8gRGV2aWNlIENvbnRyb2wgQ29tbWFuZHMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0dQSU8NCisgKiBcYnJpZWYgICBEZWZpbml0aW9ucyBmb3IgZ3BpbyBjb250cm9sIGNvbW1hbmQsIHVzZWQgaW4gXHJlZiBkZXZfZ3Bpbzo6Z3Bpb19jb250cm9sICJHUElPIElPIENvbnRyb2wiDQorICogXGRldGFpbHMgVGhlc2UgY29tbWFuZHMgZGVmaW5lZCBoZXJlIGNhbiBiZSB1c2VkIGluIHVzZXIgY29kZSBkaXJlY3RseS4NCisgKiAtIFBhcmFtZXRlcnMgVXNhZ2UNCisgKiAgIC0gRm9yIHBhc3NpbmcgcGFyYW1ldGVycyBsaWtlIGludGVnZXIsIGp1c3QgdXNlIHVpbnQzMl90L2ludDMyX3QgdG8gZGlyZWN0bHkgcGFzcyB2YWx1ZXMNCisgKiAgIC0gRm9yIHBhc3NpbmcgcGFyYW1ldGVycyBmb3IgYSBzdHJ1Y3R1cmUsIHBsZWFzZSB1c2UgcG9pbnRlciB0byBwYXNzIHZhbHVlcw0KKyAqICAgLSBGb3IgZ2V0dGluZyBzb21lIGRhdGEsIHBsZWFzZSB1c2UgcG9pbnRlciB0byBzdG9yZSB0aGUgcmV0dXJuIGRhdGENCisgKiAtIENvbW1vbiBSZXR1cm4gVmFsdWVzDQorICogICAtIFxyZWYgRV9PSywgICBDb250cm9sIGRldmljZSBzdWNjZXNzZnVsbHkNCisgKiAgIC0gXHJlZiBFX0NMU0VELCAgICBEZXZpY2UgaXMgbm90IG9wZW5lZA0KKyAqICAgLSBccmVmIEVfT0JKLCAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqICAgLSBccmVmIEVfUEFSLCAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgY3VycmVudCBjb250cm9sIGNvbW1hbmQNCisgKiAgIC0gXHJlZiBFX1NZUywgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGhhcmR3YXJlIGlzc3VlcyBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqICAgLSBccmVmIEVfTk9TUFQsICAgIENvbnRyb2wgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIG9yIG5vdCB2YWxpZA0KKyAqIEB7DQorICovDQorLyoqDQorICogU2V0IHRoZSBccmVmIGRldl9ncGlvX2luZm86OmRpcmVjdGlvbiAiZGlyZWN0aW9uIiBvZiBtYXNrZWQgYml0cyBvZiBncGlvIHBvcnQgaW50byBccmVmIEdQSU9fRElSX0lOUFVUICJpbnB1dCINCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiAxIGluIGVhY2ggYml0IHdpbGwgYmUgbWFza2VkLg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIEdQSU9fQ01EX1NFVF9CSVRfRElSX0lOUFVUICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDApDQorLyoqDQorICogU2V0IHRoZSBccmVmIGRldl9ncGlvX2luZm86OmRpcmVjdGlvbiAiZGlyZWN0aW9uIiBvZiBtYXNrZWQgYml0cyBvZiBncGlvIHBvcnQgaW50byBccmVmIEdQSU9fRElSX09VVFBVVCAib3V0cHV0Ig0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IDEgaW4gZWFjaCBiaXQgd2lsbCBiZSBtYXNrZWQuDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfU0VUX0JJVF9ESVJfT1VUUFVUICAgICAgICAgREVWX1NFVF9TWVNDTUQoMSkNCisvKioNCisgKiBHZXQgXHJlZiBkZXZfZ3Bpb19pbmZvOjpkaXJlY3Rpb24gImdwaW8gcG9ydCBkaXJlY3Rpb24iLg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IDEgYml0IGZvciAxIGJpdCBvZiBncGlvIHBvcnQsIDAgZm9yIGlucHV0LCAxIGZvciBvdXRwdXQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBHUElPX0NNRF9HRVRfQklUX0RJUiAgICAgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgyKQ0KKy8qKg0KKyAqIFNldCBncGlvIGludGVycnVwdCBjb25maWd1cmF0aW9uIGZvciBlYWNoIGJpdC4NCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9HUElPX0lOVF9DRkcgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBzdG9yZSBncGlvIGludGVycnVwdCBjb25maWd1cmF0aW9uIGZvciBlYWNoIGJpdC4NCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBHUElPX0NNRF9TRVRfQklUX0lOVF9DRkcgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgzKQ0KKy8qKg0KKyAqIEdldCBncGlvIGludGVycnVwdCBjb25maWd1cmF0aW9uIGZvciBlYWNoIGJpdC4NCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9HUElPX0lOVF9DRkcgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBGaXJzdCBzZXQgaW50X2JpdF9tYXNrIGluIERFVl9HUElPX0lOVF9DRkcgc3RydWN0dXJlIHRvDQorICogdGhlIG1hc2sgb2Ygd2hpY2ggYml0IG9mIEdQSU8geW91IHdhbnQgdG8gZ2V0LiBBbmQgdGhlIGludGVycnVwdCBjb25maWd1cmF0aW9uDQorICogd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0cnVjdHVyZSBERVZfR1BJT19JTlRfQ0ZHLCBlYWNoIGJpdCBzdGFuZCBmb3IgZWFjaCBiaXQgb2YgcG9ydC4NCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBHUElPX0NNRF9HRVRfQklUX0lOVF9DRkcgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCg0KQ0KKy8qKg0KKyAqIFNldCBncGlvIHNlcnZpY2Ugcm91dGluZSBmb3IgZWFjaCBiaXQuDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfR1BJT19CSVRfSVNSICoNCisgKiAtIFBhcmFtIHVzYWdlIDogc3RvcmUgZ3BpbyBoYW5kbGVyIGluZm9ybWF0aW9uIGZvciBlYWNoIGJpdCwgaW50IGhhbmRsZXIncyBwYXJhbSB3aWxsIGJlIERFVl9HUElPICouDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfU0VUX0JJVF9JU1IgICAgICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNSkNCisvKioNCisgKiBHZXQgZ3BpbyBzZXJ2aWNlIHJvdXRpbmUgZm9yIGVhY2ggYml0Lg0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0dQSU9fQklUX0lTUiAqDQorICogLSBQYXJhbSB1c2FnZSA6IEJ5IHBhc3NpbmcgaW50X2JpdF9vZnMgaW4gREVWX0dQSU9fQklUX0lTUiwNCisgKiBpdCB3aWxsIHJldHVybiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhpcyBiaXQgYW5kIHN0b3JlIGl0IGluIGludF9iaXRfaGFuZGxlci4NCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBHUElPX0NNRF9HRVRfQklUX0lTUiAgICAgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCg2KQ0KKy8qKg0KKyAqIEVuYWJsZSBncGlvIGludGVycnVwdCBvZiB0aGUgbWFza2VkIGJpdHMuDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogMSBpbiBlYWNoIGJpdCB3aWxsIGJlIG1hc2tlZC4NCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBHUElPX0NNRF9FTkFfQklUX0lOVCAgICAgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCg3KQ0KKy8qKg0KKyAqIERpc2FibGUgZ3BpbyBpbnRlcnJ1cHQgb2YgdGhlIG1hc2tlZCBiaXRzLg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IDEgaW4gZWFjaCBiaXQgd2lsbCBiZSBtYXNrZWQuDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfRElTX0JJVF9JTlQgICAgICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoOCkNCisvKioNCisgKiBHZXQgXHJlZiBkZXZfZ3Bpb19pbmZvOjptZXRob2QgImdwaW8gaW50ZXJydXB0IGVuYWJsZSBzdGF0dXMiLg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90ICoNCisgKiAtIFBhcmFtIHVzYWdlIDogMSBiaXQgZm9yIDEgYml0IG9mIGdwaW8gcG9ydCwgMCBmb3IgcG9sbCwgMSBmb3IgaW50ZXJydXB0DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgR1BJT19DTURfR0VUX0JJVF9NVEhEICAgICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoOSkNCisvKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX0dQSU9fSU5UX0NGR19TRVQgR1BJTyBEZXZpY2UgSW50IENvbmZpZ3VyYXRpb24gU2V0dGluZ3MNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX0dQSU8NCisgKiBcYnJpZWYgICBkZWZpbml0aW9uIG9mIGdwaW8gaW50ZXJydXB0IHR5cGUNCisgKiBAew0KKyAqLw0KKw0KKy8qIEdQSU8gTWFzayBEZWZpbnRpb25zICovDQorLyoqIE1hc2sgbm9uZSBiaXRzIG9mIHRoZSBtYXggMzJiaXRzICovDQorI2RlZmluZSBHUElPX0JJVFNfTUFTS19OT05FICAgICAgICAgKDApDQorLyoqIE1hc2sgYWxsIGJpdHMgb2YgdGhlIG1heCAzMmJpdHMgKi8NCisjZGVmaW5lIEdQSU9fQklUU19NQVNLX0FMTCAgICAgICAgICAoMFhGRkZGRkZGRikNCisNCisvKiBHUElPIEludGVycnVwdCBUeXBlIFJlbGF0ZWQgRGVmaW5pdGlvbnMgKi8NCisNCisvKiogTGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdCB0eXBlIGZvciAxIGJpdCAqLw0KKyNkZWZpbmUgR1BJT19JTlRfTEVWRUxfVFJJRyAgICAgICAgICgwKQ0KKy8qKiBFZGdlIHNlbnNpdGl2ZSBpbnRlcnJ1cHQgdHlwZSBmb3IgMSBiaXQgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0VER0VfVFJJRyAgICAgICAgICAoMSkNCisvKiogTGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdCB0eXBlIGZvciBhbGwgMzIgYml0cyAqLw0KKyNkZWZpbmUgR1BJT19JTlRfTEVWRUxfVFJJR19BTEwgICAgICAgICAoMCkNCisvKiogRWRnZSBzZW5zaXRpdmUgaW50ZXJydXB0IHR5cGUgZm9yIGFsbCAzMiBiaXRzICovDQorI2RlZmluZSBHUElPX0lOVF9FREdFX1RSSUdfQUxMICAgICAgICAgICgwWEZGRkZGRkZGKQ0KKw0KKy8qIEZvciBiaXQgc2V0dGluZ3MgKi8NCisvKiogU2V0IGJpdCBpbnRlcnJ1cHQgdHlwZSBvZiBncGlvIGludG8gbGV2ZWwgc2Vuc2l0aXZlICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRfTEVWRUxfVFJJRyhiaXRfb2ZzKSAgICAoR1BJT19JTlRfTEVWRUxfVFJJRzw8KGJpdF9vZnMpKQ0KKy8qKiBTZXQgYml0IGludGVycnVwdCB0eXBlIG9mIGdwaW8gaW50byBlZGdlIHNlbnNpdGl2ZSAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUX0VER0VfVFJJRyhiaXRfb2ZzKSAgICAgKEdQSU9fSU5UX0VER0VfVFJJRzw8KGJpdF9vZnMpKQ0KKy8qIEZvciBiaXRzIHNldHRpbmdzICovDQorLyoqIFNldCBpbnRlcnJ1cHQgdHlwZSBvZiBtYXNrZWQgYml0cyBvZiBncGlvIGludG8gbGV2ZWwgc2Vuc2l0aXZlICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRTX0xFVkVMX1RSSUcoYml0X21hc2spICAoR1BJT19JTlRfTEVWRUxfVFJJR19BTEwmKGJpdF9tYXNrKSkNCisvKiogU2V0IGJpdCBpbnRlcnJ1cHQgdHlwZSBvZiBncGlvIGludG8gZWRnZSBzZW5zaXRpdmUgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVFNfRURHRV9UUklHKGJpdF9tYXNrKSAgIChHUElPX0lOVF9FREdFX1RSSUdfQUxMJihiaXRfbWFzaykpDQorDQorLyogR1BJTyBJbnRlcnJ1cHQgUG9sYXJpdHkgUmVsYXRlZCBEZWZpbml0aW9ucyAqLw0KKw0KKy8qKiBHUElPIEludGVycnVwdCBwb2xhcml0eSB0eXBlIGVudW0gKi8NCit0eXBlZGVmIGVudW0gZ3Bpb19pbnRfcG9sYXJpdHkNCit7DQorICAgIC8qIFBvbGFyaXR5IGZvciAxIGJpdCAqLw0KKyAgICBHUElPX0lOVF9BQ1RJVkVfTE9XICAgPSAwLCAvKiE8IEFjdGl2ZSBsb3cgZm9yIGxldmVsLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgZm9yIDEgYml0ICovDQorICAgIEdQSU9fSU5UX0ZBTExJTkdfRURHRSA9IDAsIC8qITwgRmFsbGluZy1lZGdlIGZvciBlZGdlLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgZm9yIDEgYml0ICovDQorICAgIEdQSU9fSU5UX0FDVElWRV9ISUdIID0gIDEsIC8qITwgQWN0aXZlIGhpZ2ggZm9yIGxldmVsLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgZm9yIDEgYml0ICovDQorICAgIEdQSU9fSU5JX1JJU0lOR19FREdFID0gMSwgLyohPCBSaXNpbmctZWRnZSBmb3IgZWRnZS1zZW5zaXRpdmUgaW50ZXJydXB0IGZvciAxIGJpdCAqLw0KKyAgICAvKiBQb2xhcnRpeSBmb3IgYWxsIDMyIGJpdHMgKi8NCisgICAgR1BJT19JTlRfQUNUSVZFX0xPV19BTEwgICA9IDAsIC8qITwgQWN0aXZlIGxvdyBmb3IgbGV2ZWwtc2Vuc2l0aXZlIGludGVycnVwdCBmb3IgYWxsIGJpdHMgKi8NCisgICAgR1BJT19JTlRfRkFMTElOR19FREdFX0FMTCA9IDAsIC8qITwgRmFsbGluZy1lZGdlIGZvciBlZGdlLXNlbnNpdGl2ZSBpbnRlcnJ1cHQgZm9yIGFsbCBiaXRzICovDQorICAgIEdQSU9fSU5UX0FDVElWRV9ISUdIX0FMTCA9ICAwWEZGRkZGRkZGLCAvKiE8IEFjdGl2ZSBoaWdoIGZvciBsZXZlbC1zZW5zaXRpdmUgaW50ZXJydXB0IGZvciBhbGwgYml0cyAqLw0KKyAgICBHUElPX0lOSV9SSVNJTkdfRURHRV9BTEwgPSAwWEZGRkZGRkZGIC8qITwgUmlzaW5nLWVkZ2UgZm9yIGVkZ2Utc2Vuc2l0aXZlIGludGVycnVwdCBmb3IgYWxsIGJpdHMgKi8NCit9IEdQSU9fSU5UX1BPTEFSSVRZOw0KKw0KKy8qIEZvciBiaXQgc2V0dGluZ3MgKi8NCisvKiogU2V0IGJpdCBwb2xhcml0eSBvZiBncGlvIGludG8gYWN0aXZlIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUX1BPTF9BQ1RfTE9XKGJpdF9vZnMpICAgKEdQSU9fSU5UX0FDVElWRV9MT1c8PChiaXRfb2ZzKSkNCisvKiogU2V0IGJpdCBwb2xhcml0eSBvZiBncGlvIGludG8gYWN0aXZlIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVF9QT0xfQUNUX0hJR0goYml0X29mcykgIChHUElPX0lOVF9BQ1RJVkVfSElHSDw8KGJpdF9vZnMpKQ0KKy8qKiBTZXQgYml0IHBvbGFyaXR5IG9mIGdwaW8gaW50byBmYWxsaW5nIGVkZ2UgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVF9QT0xfRkFMTF9FREdFKGJpdF9vZnMpIChHUElPX0lOVF9GQUxMSU5HX0VER0U8PChiaXRfb2ZzKSkNCisvKiogU2V0IGJpdCBwb2xhcml0eSBvZiBncGlvIGludG8gcmlzaW5nIGVkZ2UgKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVF9QT0xfUklTRV9FREdFKGJpdF9vZnMpIChHUElPX0lOSV9SSVNJTkdfRURHRTw8KGJpdF9vZnMpKQ0KKw0KKy8qIEZvciBiaXRzIHNldHRpbmdzICovDQorLyoqIFNldCBwb2xhcml0eSBvZiBtYXNrZWQgYml0cyBvZiBncGlvIGludG8gYWN0aXZlIGxvdyAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUU19QT0xfQUNUX0xPVyhiaXRfbWFzaykgKEdQSU9fSU5UX0FDVElWRV9MT1dfQUxMJihiaXRfbWFzaykpDQorLyoqIFNldCBwb2xhcml0eSBvZiBtYXNrZWQgYml0cyBvZiBncGlvIGludG8gYWN0aXZlIGhpZ2ggKi8NCisjZGVmaW5lIEdQSU9fSU5UX0JJVFNfUE9MX0FDVF9ISUdIKGJpdF9tYXNrKSAgICAoR1BJT19JTlRfQUNUSVZFX0hJR0hfQUxMJihiaXRfbWFzaykpDQorLyoqIFNldCBwb2xhcml0eSBvZiBtYXNrZWQgYml0cyBvZiBncGlvIGludG8gZmFsbGluZyBlZGdlICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRTX1BPTF9GQUxMX0VER0UoYml0X21hc2spICAgKEdQSU9fSU5UX0ZBTExJTkdfRURHRV9BTEwmKGJpdF9tYXNrKSkNCisvKiogU2V0IHBvbGFyaXR5IG9mIG1hc2tlZCBiaXRzIG9mIGdwaW8gaW50byByaXNpbmcgZWRnZSAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUU19QT0xfUklTRV9FREdFKGJpdF9tYXNrKSAgIChHUElPX0lOSV9SSVNJTkdfRURHRV9BTEwmKGJpdF9tYXNrKSkNCisNCisvKiBHUElPIEludGVycnVwdCBEZWJvdW5jZSBSZWxhdGVkIERlZmluaXRpb25zICovDQorDQorLyogRm9yIGJpdCBzZXR0aW5ncyAqLw0KKy8qKiBEaXNhYmxlIGRlYm91bmNlIGNpcmN1aXRyeSBmb3IgMSBiaXQgKi8NCisjZGVmaW5lIEdQSU9fSU5UX05PX0RFQk9VTkNFICAgICAgICAgICAgKDApDQorLyoqIEVuYWJsZSBkZWJvdW5jZSBjaXJjdWl0cnkgZm9yIDEgYml0ICovDQorI2RlZmluZSBHUElPX0lOVF9ERUJPVU5DRSAgICAgICAgICAgKDEpDQorDQorLyogRm9yIGJpdHMgc2V0dGluZ3MgKi8NCisvKiogRGlzYWJsZSBkZWJvdW5jZSBjaXJjdWl0cnkgZm9yIGFsbCBiaXRzICovDQorI2RlZmluZSBHUElPX0lOVF9OT19ERUJPVU5DRV9BTEwgICAgICAgICgwKQ0KKy8qKiBFbmFibGUgZGVib3VuY2UgY2lyY3VpdHJ5IGZvciBhbGwgYml0cyAqLw0KKyNkZWZpbmUgR1BJT19JTlRfREVCT1VOQ0VfQUxMICAgICAgICAgICAoMFhGRkZGRkZGRikNCisNCisvKiBGb3IgYml0IHNldHRpbmdzICovDQorLyoqIFNldCBiaXQgaW50ZXJydXB0IGRlYm91bmNlIG9mIGdwaW8gaW50byBlbmFibGVkICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRfRU5BX0RFQk9VTkNFKGJpdF9vZnMpICAoR1BJT19JTlRfREVCT1VOQ0U8PChiaXRfb2ZzKSkNCisvKiogU2V0IGJpdCBpbnRlcnJ1cHQgZGVib3VuY2Ugb2YgZ3BpbyBpbnRvIGRpc2FibGVkICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRfRElTX0RFQk9VTkNFKGJpdF9vZnMpICAoR1BJT19JTlRfTk9fREVCT1VOQ0U8PChiaXRfb2ZzKSkNCisvKiBGb3IgYml0cyBzZXR0aW5ncyAqLw0KKy8qKiBTZXQgYml0IGludGVycnVwdCBkZWJvdW5jZSBvZiBncGlvIGludG8gZW5hYmxlZCAqLw0KKyNkZWZpbmUgR1BJT19JTlRfQklUU19FTkFfREVCT1VOQ0UoYml0X21hc2spICAgIChHUElPX0lOVF9ERUJPVU5DRV9BTEwmKGJpdF9tYXNrKSkNCisvKiogU2V0IGJpdCBpbnRlcnJ1cHQgZGVib3VuY2Ugb2YgZ3BpbyBpbnRvIGRpc2FibGVkICovDQorI2RlZmluZSBHUElPX0lOVF9CSVRTX0RJU19ERUJPVU5DRShiaXRfbWFzaykgICAgKEdQSU9fSU5UX05PX0RFQk9VTkNFX0FMTCYoYml0X21hc2spKQ0KKw0KKy8qKiBHUElPIGludGVycnVwdCBjb25maWd1cmF0aW9uICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X2dwaW9faW50X2NmZw0KK3sNCisgICAgdWludDMyX3QgaW50X2JpdF9tYXNrOyAgICAgIC8qITwgaW50ZXJydXB0IGJpdCBtYXNrIGZvciBncGlvICovDQorICAgIHVpbnQzMl90IGludF9iaXRfdHlwZTsgICAgICAvKiE8IFxyZWYgR1BJT19JTlRfTEVWRUxfVFJJRyAibGV2ZWwgc2Vuc2l0aXZlIiBvciBccmVmIEdQSU9fSU5UX0VER0VfVFJJRyAiZWRnZSBzZW5zaXRpdmUiIGZvciBlYWNoIGdwaW8gYml0ICovDQorICAgIHVpbnQzMl90IGludF9iaXRfcG9sYXJpdHk7ICAvKiE8IGFjdGl2ZSBoaWdoIG9yIGxvdywgcmVmZXIgdG8gXHJlZiBHUElPX0lOVF9QT0xBUklUWSBmb3IgZWFjaCBncGlvIGJpdCAqLw0KKyAgICB1aW50MzJfdCBpbnRfYml0X2RlYm91bmNlOyAgLyohPCBccmVmIEdQSU9fSU5UX0RFQk9VTkNFICJlbmFibGUiIG9yIFxyZWYgR1BJT19JTlRfTk9fREVCT1VOQ0UgImRpc2FibGUiIGRlYm91bmNlIGxvZ2ljIGZvciBlYWNoIGdwaW8gYml0ICovDQorfSBERVZfR1BJT19JTlRfQ0ZHLCAqIERFVl9HUElPX0lOVF9DRkdfUFRSOw0KKw0KKy8qKiBEZWZhdWx0IGludGVycnVwdCBjb25maWd1cmF0aW9uIGZvciBhbGwgZ3BpbyBiaXRzICovDQorc3RhdGljIGNvbnN0IERFVl9HUElPX0lOVF9DRkcgZ3Bpb19pbnRfY2ZnX2RlZmF1bHQgPSBcDQorew0KKyAgICBHUElPX0JJVFNfTUFTS19BTEwsIEdQSU9fSU5UX0xFVkVMX1RSSUdfQUxMLCBcDQorICAgIEdQSU9fSU5UX0FDVElWRV9MT1dfQUxMLCBHUElPX0lOVF9OT19ERUJPVU5DRV9BTEwNCit9Ow0KKw0KKy8qKiBHUElPIGludGVycnVwdCBoYW5kbGVyIG9yIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUoSVNSKSAqLw0KK3R5cGVkZWYgdm9pZCAoKkRFVl9HUElPX0hBTkRMRVIpKHZvaWQgKnB0cik7DQorDQorLyoqIGludGVycnVwdCBoYW5kbGVyIGZvciBlYWNoIHBvcnQgYml0ICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X2dwaW9fYml0X2lzcg0KK3sNCisgICAgdWludDMyX3QgaW50X2JpdF9vZnM7ICAgICAgICAgICAvKiE8IGludCBiaXQgb2Zmc2V0ICovDQorICAgIERFVl9HUElPX0hBTkRMRVIgaW50X2JpdF9oYW5kbGVyOyAgIC8qITwgaW50ZXJydXB0IGhhbmRsZXIgKi8NCit9IERFVl9HUElPX0JJVF9JU1IsICogREVWX0dQSU9fQklUX0lTUl9QVFI7DQorLyogQH0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9HUElPX0RFVlNUUlVDVCAgIEdQSU8gRGV2aWNlIEludGVyZmFjZSBEZWZpbml0aW9uDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9HUElPDQorICogXGJyaWVmICAgY29udGFpbnMgZGVmaW5pdGlvbnMgb2YgZ3BpbyBkZXZpY2Ugc3RydWN0dXJlLg0KKyAqIFxkZXRhaWxzIFRoaXMgc3RydWN0dXJlIHdpbGwgYmUgdXNlZCBpbiB1c2VyIGltcGxlbWVudGVkIGNvZGUsIHdoaWNoIHdhcyBjYWxsZWQNCisgKiAgICAgXHJlZiBERVZJQ0VfSU1QTCAiRGV2aWNlIERyaXZlciBJbXBsZW1lbnQgTGF5ZXIiIGZvciBncGlvIHRvIHVzZSBpbiBpbXBsZW1lbnRhdGlvbiBjb2RlLg0KKyAqICAgICBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgc2hvdWxkIHVzZSB0aGUgR1BJTyBBUEkgcHJvdmlkZWQgaGVyZSB0byBhY2Nlc3MgdG8gR1BJTyBkZXZpY2VzLg0KKyAqICAgICBCU1AgZGV2ZWxvcGVyIHNob3VsZCBmb2xsb3cgdGhlIEFQSSBkZWZpbml0aW9uIHRvIGltcGxlbWVudCBHUElPIGRldmljZSBkcml2ZXJzLg0KKyAqIEB7DQorICovDQorLyoqDQorICogXGJyaWVmICAgZ3BpbyBpbmZvcm1hdGlvbiBzdHJ1Y3QgZGVmaW5pdGlvbg0KKyAqIFxkZXRhaWxzIGluZm9ybWF0aW9ucyBhYm91dCBncGlvIG9wZW4gY291bnQsIHdvcmtpbmcgc3RhdHVzDQorICogIGdwaW8gcmVnaXN0ZXJzIGFuZCBjb250cm9sIGJsb2NrLCBncGlvIGlvIGRpcmVjdGlvbiBhbmQgaW50ZXJydXB0L3BvbGwgZm9yIGVhY2ggYml0IG9mIGdwaW8NCisgKiBcbm90ZSAgICBPbmx5IGF2YWlsYWJsZSBmb3IgZ3BpbyB3aXRoIG1heCAzMmJpdHMNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfZ3Bpb19pbmZvDQorew0KKyAgICB2b2lkICpncGlvX2N0cmw7ICAgIC8qITwgZ3BpbyBjb250cm9sIHJlbGF0ZWQgcG9pbnRlciwgaW1wbGVtZW50ZWQgYnkgYnNwIGRldmVsb3BlciwgYW5kIHRoaXMgc2hvdWxkIGJlIHNldCBkdXJpbmcgZ3BpbyBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgdWludDMyX3Qgb3BuX2NudDsgICAvKiE8IGdwaW8gb3BlbiBjb3VudCwgb3BlbiBpdCB3aWxsIGluY3JlYXNlIDEsIGNsb3NlIGl0IHdpbGwgZGVjcmVhc2UgMSwgMCBmb3IgY2xvc2UsID4wIGZvciBvcGVuICovDQorICAgIHVpbnQzMl90IGRpcmVjdGlvbjsgLyohPCBlYWNoIGJpdCBkaXJlY3Rpb24gb2YgdGhpcyBHUElPLCBkZWZhdWx0IGFsbCBccmVmIEdQSU9fRElSX0lOUFVUICJpbnB1dCIgZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgdWludDMyX3QgbWV0aG9kOyAgICAvKiE8IGludC9wb2xsIG1ldGhvZCBmb3IgZWFjaCBiaXQgb2YgR1BJTywgMCBmb3IgcG9sbCwgMSBmb3IgaW50ZXJydXB0LCBkZWZhdWx0IGFsbCBccmVmIERFVl9QT0xMX01FVEhPRCAicG9sbCIgZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgdm9pZCAqZXh0cmE7ICAgICAgIC8qITwgYSBleHRyYSBwb2ludGVyIHRvIGdldCBob29rIHRvIGFwcGxpY2F0aW9ucyB3aGljaCBzaG91bGQgbm90IHVzZWQgYnkgYnNwIGRldmVsb3BlciwNCisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2hvdWxkIGJlIE5VTEwgZm9yIGZpcnN0IG9wZW4gYW5kIHlvdSBjYW4gXHJlZiBERVZfR1BJT19JTkZPX1NFVF9FWFRSQV9PQkpFQ1QgInNldCINCisgICAgICAgICAgICAgICAgICAgIG9yIFxyZWYgREVWX0dQSU9fSU5GT19HRVRfRVhUUkFfT0JKRUNUICJnZXQiIHRoZSBleHRyYSBpbmZvcm1hdGlvbiBwb2ludGVyICovDQorfSBERVZfR1BJT19JTkZPLCAqIERFVl9HUElPX0lORk9fUFRSOw0KKy8qKiBTZXQgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciBvZiBncGlvIGluZm8gKi8NCisjZGVmaW5lIERFVl9HUElPX0lORk9fU0VUX0VYVFJBX09CSkVDVChncGlvX2luZm9fcHRyLCBleHRyYV9pbmZvKSAgIChncGlvX2luZm9fcHRyKS0+ZXh0cmEgPSAodm9pZCAqKShleHRyYV9pbmZvKQ0KKy8qKiBHZXQgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciBvZiBncGlvIGluZm8gKi8NCisjZGVmaW5lIERFVl9HUElPX0lORk9fR0VUX0VYVFJBX09CSkVDVChncGlvX2luZm9fcHRyKSAgICAgICAgICAgKChncGlvX2luZm9fcHRyKS0+ZXh0cmEpDQorDQorLyoqIE1ldGhvZCBvZiBhbGwgZ3BpbyBiaXRzIHNldCB0byBwb2xsICovDQorI2RlZmluZSBERVZfR1BJT19CSVRTX01USERfUE9MTCAgICAgICAgICgwKQ0KKy8qKiBNZXRob2Qgb2YgYWxsIGdwaW8gYml0cyBzZXQgdG8gaW50ZXJydXB0ICovDQorI2RlZmluZSBERVZfR1BJT19CSVRTX01USERfSU5URVJSVVBUICAgICAgICAoMHhGRkZGRkZGRikNCisvKiogRGVmYXVsdCBtZXRob2Qgb2YgYWxsIGdwaW8gYml0cyBzaG91bGQgYmUgcG9sbCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyNkZWZpbmUgREVWX0dQSU9fQklUU19NVEhEX0RFRkFVTFQgICAgICAoREVWX0dQSU9fQklUU19NVEhEX1BPTEwpDQorDQorLyoqDQorICogXGJyaWVmICAgZ3BpbyBkZXZpY2UgaW50ZXJmYWNlIGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBkZWZpbmUgZ3BpbyBkZXZpY2UgaW50ZXJmYWNlLCBsaWtlIGdwaW8gaW5mb3JtYXRpb24gc3RydWN0dXJlLA0KKyAqICBmdWN0aW9ucyB0byBvcGVuL2Nsb3NlL2NvbnRyb2wgZ3Bpbywgd3JpdGUgb3IgcmVhZCBkYXRhIHZpYSBncGlvDQorICogXG5vdGUgICAgYWxsIHRoaXMgZGV0YWlscyBhcmUgaW1wbGVtZW50ZWQgYnkgdXNlciBpbiB1c2VyIHBvcnRpbmcgY29kZQ0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9ncGlvDQorew0KKyAgICBERVZfR1BJT19JTkZPIGdwaW9faW5mbzsgICAgICAgIC8qITwgZ3BpbyBkZXZpY2UgaW5mb3JtYXRpb24gKi8NCisgICAgaW50MzJfdCAoKmdwaW9fb3BlbikodWludDMyX3QgZGlyKTsgICAgIC8qITwgb3BlbiBncGlvIGRldmljZSB3aXRoIHByZS1kZWZpbmVkIGdwaW8gZGlyZWN0aW9uICovDQorICAgIGludDMyX3QgKCpncGlvX2Nsb3NlKSh2b2lkKTsgICAgICAgIC8qITwgY2xvc2UgZ3BpbyBkZXZpY2UgKi8NCisgICAgaW50MzJfdCAoKmdwaW9fY29udHJvbCkodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKTsgICAgLyohPCBjb250cm9sIGdwaW8gZGV2aWNlICovDQorICAgIGludDMyX3QgKCpncGlvX3dyaXRlKSh1aW50MzJfdCB2YWwsIHVpbnQzMl90IG1hc2spOyAgICAgLyohPCB3cml0ZSBncGlvIGRldmljZSB3aXRoIHZhbCwgb25seSB3cml0ZSB0aGUgbWFza2VkIGJpdHMgKi8NCisgICAgaW50MzJfdCAoKmdwaW9fcmVhZCkodWludDMyX3QgKnZhbCwgdWludDMyX3QgbWFzayk7ICAgICAvKiE8IHJlYWQgZ3BpbyBkZXZpY2UgdmFsLCBvbmx5IHJlYWQgdGhlIG1hc2tlZCBiaXRzICovDQorfSBERVZfR1BJTywgKiBERVZfR1BJT19QVFI7DQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfZ3Bpbzo6Z3Bpb19vcGVuKSAodWludDMyX3QgZGlyKQ0KKyAqIFxkZXRhaWxzIE9wZW4gYSBncGlvIGRldmljZSB3aXRoIHByZS1kZWZpbmVkIGlvIGRpcmVjdGlvbi4NCisgKiBccGFyYW1baW5dICAgZGlyIGdwaW8gZGlyZWN0aW9uIGZvciBlYWNoIGJpdA0KKyAqIFxyZXR2YWwgIEVfT0sgICAgT3BlbiBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzDQorICogXHJldHZhbCAgRV9PUE5FRCBJZiBkZXZpY2Ugd2FzIG9wZW5lZCBiZWZvcmUgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycywNCisgKiAgICAgICAgICB0aGVuIGp1c3QgaW5jcmVhc2UgdGhlIFxyZWYgZGV2X2dwaW9faW5mbzo6b3BuX2NudCAib3BuX2NudCIgYW5kIHJldHVybiBccmVmIEVfT1BORUQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9OT1NQVCBPcGVuIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfZ3Bpbzo6Z3Bpb19jbG9zZSkgKHZvaWQpDQorICogXGRldGFpbHMgQ2xvc2UgYW4gZ3BpbyBkZXZpY2UsIGp1c3QgZGVjcmVhc2UgdGhlIFxyZWYgZGV2X2dwaW9faW5mbzo6b3BuX2NudCAib3BuX2NudCIsDQorICogICAgICBpZiBccmVmIGRldl9ncGlvX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGVxdWFscyAwLCB0aGVuIGNsb3NlIHRoZSBkZXZpY2UNCisgKiBccmV0dmFsICBFX09LICAgIENsb3NlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSBpc3N1ZXMoaW5jbHVkaW5nIHNjZW5hcmlvIHRoYXQgZGV2aWNlIGlzIGFscmVhZHkgY2xvc2VkKQ0KKyAqIFxyZXR2YWwgIEVfT1BORUQgRGV2aWNlIGlzIHN0aWxsIG9wZW5lZCwgdGhlIGRldmljZSBccmVmIGRldl9ncGlvX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGRlY3JlYXNlZCBieSAxDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X2dwaW86OmdwaW9fY29udHJvbCkgKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCisgKiBcZGV0YWlscyBDb250cm9sIGFuIGdwaW8gZGV2aWNlIGJ5IFxyZWYgY3RybF9jbWQsIHdpdGggcGFzc2VkIFxyZWYgcGFyYW0uDQorICogIHlvdSBjYW4gY29udHJvbCBncGlvIGRldmljZSB1c2luZyBwcmVkZWZpbmVkIGdwaW8gY29udHJvbCBjb21tYW5kcyBkZWZpbmVkIHVzaW5nIFxyZWYgREVWX1NFVF9TWVNDTUQNCisgKiAgKHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYnNwIGRldmVsb3BlciksIHN1Y2ggYXMgXHJlZiBHUElPX0NNRF9TRVRfQklUX0RJUl9JTlBVVA0KKyAqICAiY2hhbmdlIG1hc2tlZCBncGlvIGRpcmVjdGlvbiB0byBpbnB1dCIsIGFuZCBccmVmIERFVklDRV9IQUxfR1BJT19DVFJMQ01EICJtb3JlIi4NCisgKiAgQW5kIHlvdSBjYW4gYWxzbyBjb250cm9sIGdwaW8gZGV2aWNlIHVzaW5nIHlvdXIgb3duIHNwZWNpZmllZCBjb21tYW5kcyBkZWZpbmVkIHVzaW5nIFxyZWYgREVWX1NFVF9VU1JDTUQsDQorICogIGJ1dCB0aGVzZSBzcGVjaWZpZWQgY29tbWFuZHMgc2hvdWxkIGJlIGRlZmluZWQgaW4geW91ciBvd24gZ3BpbyBkZXZpY2UgZHJpdmVyIGltcGxlbWVudGF0aW9uLg0KKyAqIFxwYXJhbVtpbl0gICAgICAgY3RybF9jbWQgICAgXHJlZiBERVZJQ0VfSEFMX0dQSU9fQ1RSTENNRCAiY29udHJvbCBjb21tYW5kIiwgdG8gY2hhbmdlIG9yIGdldCBzb21lIHRoaW5nIHJlbGF0ZWQgdG8gZ3Bpbw0KKyAqIFxwYXJhbVtpbixvdXRdICAgcGFyYW0gICAgICAgcGFyYW1ldGVycyB0aGF0IG1heWJlIGFyZ3VtZW50IG9mIHRoZSBjb21tYW5kLCBvciByZXR1cm4gdmFsdWVzIG9mIHRoZSBjb21tYW5kDQorICogXHJldHZhbCAgRV9PSyAgICBDb250cm9sIGRldmljZSBzdWNjZXNzZnVsbHkNCisgKiBccmV0dmFsICBFX0NMU0VEIERldmljZSBpcyBub3Qgb3BlbmVkDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkIGZvciBjdXJyZW50IGNvbnRyb2wgY29tbWFuZA0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ29udHJvbCBkZXZpY2UgZmFpbGVkLCBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzDQorICogXHJldHZhbCAgRV9DVFggICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBkaWZmZXJlbnQgcmVhc29ucyBsaWtlIGluIHRyYW5zZmVyIHN0YXRlDQorICogXHJldHZhbCAgRV9OT1NQVCBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQsIHN1Y2ggYXMgaW50ZXJydXB0IGlzIG5vdCBzdXBwb3J0ZWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl9ncGlvOjpncGlvX3dyaXRlKSAodWludDMyX3QgdmFsLCB1aW50MzJfdCBtYXNrKQ0KKyAqIFxkZXRhaWxzIFdyaXRlIGdwaW8gd2l0aCBccmVmIHZhbCwgYW5kIG9ubHkgY2hhbmdlIHRoZSBtYXNrZWQgYml0cyBvZiBncGlvLg0KKyAqIFxwYXJhbVtpbl0gICB2YWwgdGhlIGRhdGEgdGhhdCBuZWVkIHRvIHdyaXRlIHRvIGdwaW8NCisgKiBccGFyYW1baW5dICAgbWFzayAgICBncGlvIGJpdCBtYXNrDQorICogXHJldHZhbCAgRV9PSyAgICBXcml0ZSBncGlvIHdpdGggc3BlY2lmaWVkIHZhbHVlIHN1Y2Nlc3NmdWxseQ0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X2dwaW86OmdwaW9fcmVhZCkgKHVpbnQzMl90ICp2YWwsIHVpbnQzMl90IG1hc2spDQorICogXGRldGFpbHMgUmVhZCB0aGUgbWFza2VkIGdwaW8gdmFsdWUNCisgKiBccGFyYW1bb3V0XSAgdmFsIHBvaW50ZXIgdG8gZGF0YSBuZWVkIHRvIHJlYWQgZnJvbSBncGlvDQorICogXHBhcmFtW2luXSAgIG1hc2sgICAgZ3BpbyBiaXQgbWFzaw0KKyAqIFxyZXR2YWwgIEVfT0sgICAgUmVhZCBncGlvIGRhdGEgc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICovDQorDQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogXGJyaWVmICAgZ2V0IGFuIFxyZWYgZGV2X2dwaW8gImdwaW8gZGV2aWNlIiBieSBncGlvIGRldmljZSBpZC4NCisgKiAgRm9yIGhvdyB0byB1c2UgZ3BpbyBkZXZpY2UgaGFsIHJlZmVyIHRvIFxyZWYgZGV2X2dwaW8gIkZ1bmN0aW9ucyBpbiBncGlvIGRldmljZSBzdHJ1Y3R1cmUiDQorICogXHBhcmFtW2luXSAgIGdwaW9faWQgaWQgb2YgZ3BpbywgZGVmaW5lZCBieSB1c2VyDQorICogXHJldHZhbCAgIU5VTEwgICBwb2ludGVyIHRvIGFuIFxyZWYgZGV2X2dwaW8gImdwaW8gZGV2aWNlIHN0cnVjdHVyZSINCisgKiBccmV0dmFsICBOVUxMICAgIGZhaWxlZCB0byBmaW5kIHRoZSBncGlvIGRldmljZSBieSBccmVmIGdwaW9faWQNCisgKiBcbm90ZSAgICBuZWVkIHRvIGltcGxlbWVudGVkIGJ5IHVzZXIgaW4gdXNlciBjb2RlDQorICovDQorZXh0ZXJuIERFVl9HUElPX1BUUiBncGlvX2dldF9kZXYoaW50MzJfdCBncGlvX2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorLyoqIEB9ICovDQorI2VuZGlmIC8qIF9ERVZJQ0VfSEFMX0dQSU9fSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9zcGkuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmRlZDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl9zcGkuaApAQCAtMCwwICsxLDU4MiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNC0wNi0xNg0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9TUEkgIFNQSSBEZXZpY2UgSEFMIEludGVyZmFjZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfREVGDQorICogXGJyaWVmICAgZGVmaW5pdGlvbnMgZm9yIHNwaSBkZXZpY2UgaGFyZHdhcmUgbGF5ZXIgKFxyZWYgZGV2X3NwaS5oKQ0KKyAqIFxkZXRhaWxzIHByb3ZpZGUgaW50ZXJmYWNlcyBmb3Igc3BpIGRyaXZlciB0byBpbXBsZW1lbnQNCisgKiAgSGVyZSBpcyBhIGRpYWdyYW0gZm9yIHRoZSBzcGkgaW50ZXJmYWNlLg0KKyAqDQorICogIFxodG1sb25seQ0KKyAqICA8ZGl2IGNsYXNzPSJpbWFnZWJveCI+DQorICogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHgiPg0KKyAqICAgICAgICAgIDxpbWcgc3JjPSJwaWMvZGV2X3NwaV9oYWwuanBnIiBhbHQ9IlNQSSBEZXZpY2UgSEFMIEludGVyZmFjZSBEaWFncmFtIi8+DQorICogICAgICAgICAgPHA+U1BJIERldmljZSBIQUwgSW50ZXJmYWNlIERpYWdyYW08L3A+DQorICogICAgICA8L2Rpdj4NCisgKiAgPC9kaXY+DQorICogIFxlbmRodG1sb25seQ0KKyAqDQorICogQHsNCisgKg0KKyAqIFxmaWxlDQorICogXGJyaWVmICAgc3BpIGRldmljZSBoYXJkd2FyZSBsYXllciBkZWZpbml0aW9ucw0KKyAqIFxkZXRhaWxzIHByb3ZpZGUgY29tbW9uIGRlZmluaXRpb25zIGZvciBzcGkgZGV2aWNlLA0KKyAqICB0aGVuIHNvZnR3YXJlIGRldmVsb3BlciBjYW4gZGV2ZWxvcCBzcGkgZHJpdmVyDQorICogIGZvbGxvd2luZyB0aGlzIGRlZmluaXRpb25zLCBhbmQgdGhlIGFwcGxpY2F0aW9ucw0KKyAqICBjYW4gZGlyZWN0bHkgY2FsbCB0aGlzIGRlZmluaXRpb24gdG8gcmVhbGl6ZSBmdW5jdGlvbnMNCisgKi8NCisNCisjaWZuZGVmIF9ERVZJQ0VfSEFMX1NQSV9IXw0KKyNkZWZpbmUgX0RFVklDRV9IQUxfU1BJX0hfDQorDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfY29tbW9uLmgiDQorDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfU1BJX0NUUkxDTUQgICAgICBTUEkgRGV2aWNlIENvbnRyb2wgQ29tbWFuZHMNCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX1NQSQ0KKyAqIFxicmllZiAgIERlZmluaXRpb25zIGZvciBzcGkgY29udHJvbCBjb21tYW5kLCB1c2VkIGluIFxyZWYgZGV2X3NwaTo6c3BpX2NvbnRyb2wgIlNQSSBJTyBDb250cm9sIg0KKyAqIFxkZXRhaWxzIFRoZXNlIGNvbW1hbmRzIGRlZmluZWQgaGVyZSBjYW4gYmUgdXNlZCBpbiB1c2VyIGNvZGUgZGlyZWN0bHkuDQorICogLSBQYXJhbWV0ZXJzIFVzYWdlDQorICogICAtIEZvciBwYXNzaW5nIHBhcmFtZXRlcnMgbGlrZSBpbnRlZ2VyLCBqdXN0IHVzZSB1aW50MzJfdC9pbnQzMl90IHRvIGRpcmVjdGx5IHBhc3MgdmFsdWVzDQorICogICAtIEZvciBwYXNzaW5nIHBhcmFtZXRlcnMgZm9yIGEgc3RydWN0dXJlLCBwbGVhc2UgdXNlIHBvaW50ZXIgdG8gcGFzcyB2YWx1ZXMNCisgKiAgIC0gRm9yIGdldHRpbmcgc29tZSBkYXRhLCBwbGVhc2UgdXNlIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiBkYXRhDQorICogLSBDb21tb24gUmV0dXJuIFZhbHVlcw0KKyAqICAgLSBccmVmIEVfT0ssICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogICAtIFxyZWYgRV9DTFNFRCwgICAgRGV2aWNlIGlzIG5vdCBvcGVuZWQNCisgKiAgIC0gXHJlZiBFX09CSiwgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiAgIC0gXHJlZiBFX1BBUiwgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogICAtIFxyZWYgRV9TWVMsICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKiAgIC0gXHJlZiBFX0NUWCwgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGRpZmZlcmVudCByZWFzb25zIGxpa2UgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiAgIC0gXHJlZiBFX05PU1BULCAgICBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQNCisgKiAtIFVzYWdlIENvbW1lbnQNCisgKiAgIC0gRm9yIFNQSSBwb2xsIG9yIGludGVycnVwdCByZWFkL3dyaXRlL3RyYW5zZmVyIG9wZXJhdGlvbnMsIG9ubHkgMSBvcGVyYXRpb24gY2FuIGJlIHRyaWdnZXJlZC4NCisgKiAgICAgSWYgdGhlcmUgaXMgYSBvcGVyYXRpb24gaXMgcnVubmluZywgYW55IG90aGVyIG9wZXJhdGlvbiB3aWxsIHJldHVybiBccmVmIEVfQ1RYDQorICogICAtIElmIFNQSSBpcyBpbiB0cmFuc2ZlciwgdGhlbiB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgbWF5IHJldHVybiBccmVmIEVfQ1RYLiBMaWtlDQorICogICAgIFxyZWYgU1BJX0NNRF9TRVRfQ0xLX01PREUsIFxyZWYgU1BJX0NNRF9TRVRfVFhJTlRfQlVGLCBccmVmIFNQSV9DTURfU0VUX1JYSU5UX0JVRiwNCisgKiAgICAgXHJlZiBTUElfQ01EX1NFVF9UWElOVCwgXHJlZiBTUElfQ01EX1NFVF9SWElOVCwgXHJlZiBTUElfQ01EX0FCT1JUX1RYLCBccmVmIFNQSV9DTURfQUJPUlRfUlgsDQorICogICAgIFxyZWYgU1BJX0NNRF9GTFVTSF9UWCwgXHJlZiBTUElfQ01EX0ZMVVNIX1JYLCBccmVmIFNQSV9DTURfU0VUX0RGUywgXHJlZiBTUElfQ01EX1RSQU5TRkVSX1BPTExJTkcsDQorICogICAgIFxyZWYgU1BJX0NNRF9UUkFOU0ZFUl9JTlQsIFxyZWYgU1BJX0NNRF9BQk9SVF9YRkVSLCBccmVmIFNQSV9DTURfTVNUX1NFTF9ERVYsIFxyZWYgU1BJX0NNRF9NU1RfRFNFTF9ERVYsDQorICogICAgIFxyZWYgU1BJX0NNRF9NU1RfU0VUX0ZSRVEgYW5kIFxyZWYgZGV2X3NwaTo6c3BpX3dyaXRlICJTUEkgUG9sbCBXcml0ZSIgb3IgXHJlZiBkZXZfc3BpOjpzcGlfcmVhZCAiU1BJIFBvbGwgUmVhZCIuDQorICogQHsNCisgKi8NCisNCisvKiogRGVmaW5lIFNQSSBjb250cm9sIGNvbW1hbmRzIGZvciBjb21tb24gdXNhZ2UgKi8NCisjZGVmaW5lIERFVl9TRVRfU1BJX1NZU0NNRChjbWQpICAgICBERVZfU0VUX1NZU0NNRCgoY21kKSkNCisvKiogRGVmaW5lIFNQSSBjb250cm9sIGNvbW1hbmRzIGZvciBtYXN0ZXIgdXNhZ2UgKi8NCisjZGVmaW5lIERFVl9TRVRfU1BJX01TVF9TWVNDTUQoY21kKSBERVZfU0VUX1NZU0NNRCgweDAwMDAxMDAwfChjbWQpKQ0KKy8qKiBEZWZpbmUgU1BJIGNvbnRyb2wgY29tbWFuZHMgZm9yIHNsYXZlIHVzYWdlICovDQorI2RlZmluZSBERVZfU0VUX1NQSV9TTFZfU1lTQ01EKGNtZCkgREVWX1NFVF9TWVNDTUQoMHgwMDAwMjAwMHwoY21kKSkNCisNCisNCisvKiArKysrIENvbW1vbiBjb21tYW5kcyBmb3IgU1BJIERldmljZSArKysrICovDQorLyoqDQorICogR2V0IFxyZWYgZGV2X3NwaV9pbmZvOjpzdGF0dXMgImN1cnJlbnQgZGV2aWNlIHN0YXR1cyINCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIHJlc3VsdCBvZiBjdXJyZW50IHN0YXR1cw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfR0VUX1NUQVRVUyAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMCkNCisvKioNCisgKiBzZXQgdGhlIFxyZWYgZGV2X3NwaV9pbmZvOjpjbGtfbW9kZSAiY2xvY2sgbW9kZSIgb2Ygc3BpIHRyYW5zZmVyDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogc3BpIGNsb2NrIG1vZGUgdG8gY2hvb3NlIGNsb2NrIHBoYXNlIGFuZCBjbG9jayBwb2xhcml0eQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX0NMS19NT0RFICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDEpDQorLyoqDQorICogc2V0IHNwaSBccmVmIGRldl9zcGlfaW5mbzo6ZGZzICJkYXRhIGZyYW1lIHNpemUiDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogc2hvdWxkID4gMA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDogSWYgZGZzIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gcmV0dXJuIFxyZWYgRV9TWVMNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX0RGUyAgICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMikNCisvKioNCisgKiBzZXQgdGhlIFxyZWYgZGV2X3NwaV9pbmZvOjpkdW1teSAiZHVtbXkgZGF0YSIgZHVyaW5nIHNwaSB0cmFuc2Zlcg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IGR1bW15IGRhdGEgdG8gdHJhbnNmZXINCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9EVU1NWV9EQVRBICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgzKQ0KKy8qKg0KKyAqIFNldCBccmVmIGRldl9zcGlfY2JzOjp0eF9jYiAic3BpIHRyYW5zbWl0IHN1Y2Nlc3MgY2FsbGJhY2siIGZ1bmN0aW9uDQorICogd2hlbiBhbGwgcmVxdWlyZWQgYnl0ZXMgYXJlIHRyYW5zbWl0dGVkIGZvciBpbnRlcnJ1cHQgbWV0aG9kDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfQ0FMTEJBQ0sgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHRyYW5zbWl0IHN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHNwaQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX1RYQ0IgICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoNCkNCisvKioNCisgKiBTZXQgXHJlZiBkZXZfc3BpX2Niczo6cnhfY2IgInNwaSByZWNlaXZlIHN1Y2Nlc3MgY2FsbGJhY2siIGZ1bmN0aW9uDQorICogd2hlbiBhbGwgcmVxdWlyZWQgYnl0ZXMgYXJlIHJlY2VpdmVkIGZvciBpbnRlcnJ1cHQgbWV0aG9kDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfQ0FMTEJBQ0sgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHJlY2VpdmUgc3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc3BpDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9TRVRfUlhDQiAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCg1KQ0KKy8qKg0KKyAqIFNldCBccmVmIGRldl9zcGlfY2JzOjp4ZmVyX2NiICJzcGkgdHJhbnNmZXIgc3VjY2VzcyBjYWxsYmFjayIgZnVuY3Rpb24NCisgKiB3aGVuIGFsbCByZXF1aXJlZCB0cmFuc2ZlciBhcmUgZG9uZSBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB0cmFuc2ZlciBzdWNjZXNzIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBzcGkNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9YRkVSQ0IgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDYpDQorLyoqDQorICogU2V0IFxyZWYgZGV2X3NwaV9jYnM6OmVycl9jYiAic3BpIHRyYW5zZmVyIGVycm9yIGNhbGxiYWNrIiBmdW5jdGlvbg0KKyAqIHdoZW4gc29tZXRoaW5nIGVycm9yIGhhcHBlbmVkIGZvciBpbnRlcnJ1cHQgbWV0aG9kDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfQ0FMTEJBQ0sgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHRyYW5zZmVyIGVycm9yIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBzcGkNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1NFVF9FUlJDQiAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDcpDQorLyoqDQorICogU2V0IGJ1ZmZlciBpbiBpbnRlcnJ1cHQgdHJhbnNtaXQsIGFuZCBpdCB3aWxsIHNldCBccmVmIGRldl9zcGlfaW5mbzo6eGZlciAic3BpIHRyYW5mZXIiLg0KKyAqIC0gU1BJIG1hc3RlciBhbmQgc2xhdmUgbW9kZSB1c2UgY2FzZSAgXG4NCisgKiAgICBGb3IgYm90aCBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUsIGlmIHlvdSBzZXQgdHggYnVmZmVyIHRvIE5VTEwsIHdoZW4gdHggaW50ZXJydXB0IGlzIGVuYWJsZWQgYW5kIGVudGVyZWQgaW50byB0eCBpbnRlcnJ1cHQsDQorICogaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRpc2FibGUgdGhlIHR4IGludGVycnVwdCwgc28gd2hlbiB5b3Ugd2FudCB0byB0cmFuc2ZlciBzb21ldGhpbmcsIHlvdSBuZWVkIHRvIHNldCB0aGUNCisgKiB0eCBidWZmZXIgdG8gTm9uLU5VTEwgYW5kIGVuYWJsZSB0eCBpbnRlcnJ1cHQsIHdoZW4gdGhlIHR4IGJ1ZmZlciBpcyBzZW50LCBpdCB3aWxsIGRpc2FibGUgdGhlIHR4IGludGVycnVwdA0KKyAqIGFuZCBjYWxsIHR4IGNhbGxiYWNrIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZS4NCisgKiAtIFBhcmFtIHR5cGUgOiBERVZfQlVGRkVSICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBidWZmZXIgc3RydWN0dXJlIHBvaW50ZXIsIGlmIHBhcmFtIGlzIE5VTEwsIHRoZW4gaXQgd2lsbCBzZXQgeGZlciB0byBlbXB0eQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX1RYSU5UX0JVRiAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDgpDQorLyoqDQorICogU2V0IGJ1ZmZlciBpbiBpbnRlcnJ1cHQgcmVjZWl2ZSwgYW5kIGl0IHdpbGwgc2V0IFxyZWYgZGV2X3NwaV9pbmZvOjp4ZmVyICJzcGkgdHJhbmZlciIuDQorICogLSBTUEkgbWFzdGVyIG1vZGUgdXNlIGNhc2UgIFxuDQorICogICBTaW1pbGFyIHRvIFxyZWYgU1BJX0NNRF9TRVRfVFhJTlRfQlVGDQorICogLSBTUEkgc2xhdmUgbW9kZSB1c2UgY2FzZSAgIFxuDQorICogICBTaW1pbGlhciB0byBccmVmIFNQSV9DTURfU0VUX1RYSU5UX0JVRg0KKyAqIC0gUGFyYW0gdHlwZSA6IERFVl9CVUZGRVIgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IGJ1ZmZlciBzdHJ1Y3R1cmUgcG9pbnRlciwgaWYgcGFyYW0gaXMgTlVMTCwgdGhlbiBpdCB3aWxsIHNldCB4ZmVyIHRvIGVtcHR5DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9TRVRfUlhJTlRfQlVGICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoOSkNCisvKioNCisgKiBFbmFibGUgb3IgZGlzYWJsZSB0cmFuc21pdCBpbnRlcnJ1cHQsDQorICogZm9yIG1hc3RlciBtb2RlLCBvbmx5IG9uZSBvZiB0eCBhbmQgcnggaW50ZXJydXB0IGNhbiBiZSBlbmFibGVkLA0KKyAqIGlmIHR4IGludGVycnVwdCBpcyBlbmFibGVkLCB0aGVuIHJ4IGludGVycnVwdCBjYW4ndCBiZSBlbmFibGVkLg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IGVuYWJsZShub25lLXplcm8pIG9yIGRpc2FibGUoemVybykgZmxhZw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX1RYSU5UICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMTApDQorLyoqDQorICogRW5hYmxlIG9yIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHQsDQorICogZm9yIG1hc3RlciBtb2RlLCBvbmx5IG9uZSBvZiB0eCBhbmQgcnggaW50ZXJydXB0IGNhbiBiZSBlbmFibGVkLA0KKyAqIGlmIHJ4IGludGVycnVwdCBpcyBlbmFibGVkLCB0aGVuIHR4IGludGVycnVwdCBjYW4ndCBiZSBlbmFibGVkLg0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IGVuYWJsZShub25lLXplcm8pIG9yIGRpc2FibGUoemVybykgZmxhZw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfU0VUX1JYSU5UICAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMTEpDQorLyoqDQorICogc3RhcnQgdGhlIHRyYW5zZmVyIGJ5IHBvbGxpbmcNCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9TUElfVFJBTlNGRVIgKg0KKyAqIC0gUGFyYW0gdXNhZ2UgOg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfVFJBTlNGRVJfUE9MTElORyAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDEyKQ0KKy8qKg0KKyAqIHN0YXJ0IHRoZSB0cmFuc2ZlciBieSBpbnRlcnJ1cHQNCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIERFVl9TUElfVFJBTlNGRVIgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IElmIE5VTEwsIGl0IHdpbGwgZGlzYWJsZSB0cmFuc2ZlciBpbnRlcnJ1cHQsIGlmIG5vdCBOVUxMLCBpdCB3aWxsIGVuYWJsZSB0cmFuc2ZlciBpbnRlcnJ1cHQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1RSQU5TRkVSX0lOVCAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxMykNCisvKioNCisgKiBBYm9ydCBjdXJyZW50IGludGVycnVwdCB0cmFuc21pdCBvcGVyYXRpb24gaWYgdHggaW50ZXJydXB0IGVuYWJsZWQsDQorICogaXQgd2lsbCBkaXNhYmxlIHRyYW5zbWl0IGludGVycnVwdCwgYW5kIHNldCBccmVmIERFVl9JTl9UWF9BQlJUDQorICogaW4gXHJlZiBkZXZfc3BpX2luZm86OnN0YXR1cyAic3RhdHVzIiB2YXJpYWJsZSwNCisgKiBhbmQgY2FsbCB0aGUgdHJhbnNtaXQgY2FsbGJhY2sgZnVuY3Rpb24sIHdoZW4gdHggY2FsbGJhY2sgaXMgZmluaXNoZWQsDQorICogaXQgd2lsbCBjbGVhciBccmVmIERFVl9JTl9UWF9BQlJUIGFuZCByZXR1cm4NCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9BQk9SVF9UWCAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxNCkNCisvKioNCisgKiBBYm9ydCBjdXJyZW50IGludGVycnVwdCByZWNlaXZlIG9wZXJhdGlvbiBpZiByeCBpbnRlcnJ1cHQgZW5hYmxlZCwNCisgKiBpdCB3aWxsIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHQsIGFuZCBzZXQgXHJlZiBERVZfSU5fVFhfQUJSVA0KKyAqIGluIFxyZWYgZGV2X3NwaV9pbmZvOjpzdGF0dXMgInN0YXR1cyIgdmFyaWFibGUsDQorICogYW5kIGNhbGwgdGhlIHJlY2VpdmUgY2FsbGJhY2sgZnVuY3Rpb24sIHdoZW4gcnggY2FsbGJhY2sgaXMgZmluaXNoZWQsDQorICogaXQgd2lsbCBjbGVhciBccmVmIERFVl9JTl9UWF9BQlJUIGFuZCByZXR1cm4NCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9BQk9SVF9SWCAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgxNSkNCisvKioNCisgKiBBYm9ydCBjdXJyZW50IGludGVycnVwdCB0cmFuc2ZlciBvcGVyYXRpb24gaWYgdHJhbnNmZXIgaXMgaXNzdWVkLA0KKyAqIGl0IHdpbGwgZGlzYWJsZSB0cmFuc2ZlciBpbnRlcnJ1cHQsIGFuZCBzZXQgXHJlZiBERVZfSU5fWEZFUl9BQlJUDQorICogaW4gXHJlZiBkZXZfc3BpX2luZm86OnN0YXR1cyAic3RhdHVzIiB2YXJpYWJsZSwNCisgKiBhbmQgY2FsbCB0aGUgdHJhbnNmZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHdoZW4geGZlciBjYWxsYmFjayBpcyBmaW5pc2hlZCwNCisgKiBpdCB3aWxsIGNsZWFyIFxyZWYgREVWX0lOX1hGRVJfQUJSVCBhbmQgcmV0dXJuDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOg0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfQUJPUlRfWEZFUiAgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMTYpDQorLyoqDQorICogRG8gYSBzb2Z0d2FyZSByZXNldCBmb3IgU1BJIGRldmljZSwgaXQgd2lsbCBzdG9wIGN1cnJlbnQgdHJhbnNmZXIsDQorICogYW5kIGNsZWFyIGVycm9yIHN0YXRlIGFuZCBicmluZyBkZXZpY2UgdG8gbm9ybWFsIHN0YXRlLCBzZXQgbmV4dCBjb25kaXRpb24gdG8gU1RPUA0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDoNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX1JFU0VUICAgICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDE3KQ0KKy8qKg0KKyAqIEZsdXNoIHNwaSB0eCBmaWZvLCB0aGlzIHdpbGwgY2xlYXIgdGhlIGRhdGEgaW4gdHggZmlmbw0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDoNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX0ZMVVNIX1RYICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDE4KQ0KKy8qKg0KKyAqIEZsdXNoIHNwaSByeCBmaWZvLCB0aGlzIHdpbGwgY2xlYXIgdGhlIGRhdGEgaW4gcnggZmlmbw0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDoNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX0ZMVVNIX1JYICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDE5KQ0KKy8qKg0KKyAqIEVuYWJsZSBzcGkgZGV2aWNlDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBwYXJhbSBpcyBub3QgcmVxdWlyZWQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBTUElfQ01EX0VOQV9ERVYgICAgICAgICAgICAgREVWX1NFVF9TUElfU1lTQ01EKDIwKQ0KKy8qKg0KKyAqIERpc2FibGUgc3BpIGRldmljZSwgd2hlbiBkZXZpY2UgaXMgZGlzYWJsZWQsDQorICogb25seSBccmVmIFNQSV9DTURfRU5BX0RFViwgXHJlZiBTUElfQ01EX0RJU19ERVYsDQorICogXHJlZiBTUElfQ01EX0dFVF9TVEFUVVMgYW5kIFxyZWYgU1BJX0NNRF9SRVNFVA0KKyAqIGNvbW1hbmRzIGNhbiBiZSBleGVjdXRlZCwgb3RoZXIgY29tbWFuZHMgd2lsbCByZXR1cm4gXHJlZiBFX1NZUw0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogcGFyYW0gaXMgbm90IHJlcXVpcmVkDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9ESVNfREVWICAgICAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgyMSkNCisvKioNCisgKiBHZXQgaG93IG1hbnkgYnl0ZXMgc3BhY2UgaW4gc3BpIGFyZSBhdmFpbGFibGUgdG8gdHJhbnNtaXQsDQorICogdGhpcyBjYW4gYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb25zLA0KKyAqIGNvb3BlcmF0ZSB3aXRoIFxyZWYgZGV2X3NwaTo6c3BpX3dyaXRlICJzcGlfd3JpdGUiIEFQSSB0byByZWFsaXplIG5vbi1ibG9ja2VkIHdyaXRlDQorICogLSBQYXJhbSB0eXBlIDogaW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIHRoZSB3cml0ZSBhdmFpbGFibGUgYnl0ZXMsID4gMCBmb3IgYXZhaWxhYmxlIGJ5dGVzLCAwIGZvciBub3QgYXZhaWxhYmxlDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9HRVRfVFhBVkFJTCAgICAgICAgIERFVl9TRVRfU1BJX1NZU0NNRCgyMikNCisvKioNCisgKiBHZXQgaG93IG1hbnkgYnl0ZXMgaW4gc3BpIGFyZSBhdmFpbGFibGUgdG8gcmVjZWl2ZSwNCisgKiB0aGlzIGNhbiBiZSB1c2VkIGluIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbnMsDQorICogY29vcGVyYXRlIHdpdGggXHJlZiBkZXZfc3BpOjpzcGlfcmVhZCAic3BpX3JlYWQiIEFQSSB0byByZWFsaXplIG5vbi1ibG9ja2VkIHJlYWQNCisgKiAtIFBhcmFtIHR5cGUgOiBpbnQzMl90ICoNCisgKiAtIFBhcmFtIHVzYWdlIDogc3RvcmUgdGhlIHJlYWQgYXZhaWxhYmxlIGJ5dGVzLCA+IDAgZm9yIGF2YWlsYWJsZSBieXRlcywgMCBmb3Igbm90IGF2YWlsYWJsZQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFNQSV9DTURfR0VUX1JYQVZBSUwgICAgICAgICBERVZfU0VUX1NQSV9TWVNDTUQoMjMpDQorDQorDQorLyogKysrKyBNYXN0ZXIgb25seSBjb21tYW5kcyBmb3IgU1BJIERldmljZSArKysrICovDQorLyoqDQorICogIHNlbGVjdCBzcGkgc2xhdmUgZGV2aWNlDQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogdGhlIG51bWJlciBvZiBzcGkgc2xhdmUgZGV2aWNlIHRvIHNlbGVjdA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDogcmV0dXJuIFxyZWYgRV9TWVMgd2hlbiBzZWxlY3Rpb24gY2FuJ3QgYmUgZG9uZSwgcmV0dXJuIFxyZWYgRV9DVFggZHVyaW5nIHRyYW5zZmVyDQorICovDQorI2RlZmluZSBTUElfQ01EX01TVF9TRUxfREVWICAgICAgICAgREVWX1NFVF9TUElfTVNUX1NZU0NNRCgwKQ0KKy8qKg0KKyAqICBkZS1zZWxlY3Qgc3BpIHNsYXZlIGRldmljZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IHVpbnQzMl90DQorICogLSBQYXJhbSB1c2FnZSA6IHRoZSBudW1iZXIgb2Ygc3BpIHNsYXZlIGRldmljZSB0byBkZS1zZWxlY3QNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6IHJldHVybiBccmVmIEVfU1lTIHdoZW4gc2VsZWN0aW9uIGNhbid0IGJlIGRvbmUsIHJldHVybiBccmVmIEVfQ1RYIGR1cmluZyB0cmFuc2Zlcg0KKyAqLw0KKyNkZWZpbmUgU1BJX0NNRF9NU1RfRFNFTF9ERVYgICAgICAgICAgICBERVZfU0VUX1NQSV9NU1RfU1lTQ01EKDEpDQorLyoqDQorKiBTZXQgXHJlZiBkZXZfc3BpX2luZm86OmZyZXEgInNwaSBmcmVxdWVuY3kiLg0KKyogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisqIC0gUGFyYW0gdXNhZ2UgOiBzcGkgZnJlcQ0KKyogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOiBubyByZXR1cm4NCisqLw0KKyNkZWZpbmUgU1BJX0NNRF9NU1RfU0VUX0ZSRVEgICAgICAgICAgICBERVZfU0VUX1NQSV9NU1RfU1lTQ01EKDIpDQorDQorDQorLyogKysrKyBTbGF2ZSBvbmx5IGNvbW1hbmRzIGZvciBTUEkgRGV2aWNlICsrKysgKi8NCisNCisvKiBcdG9kbyBhZGQgc3BpIHNsYXZlIHJlbGF0ZWQgQ01EcyAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1NQSV9DQUxMQkFDSyBTUEkgSW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfU1BJDQorICogXGJyaWVmICAgY2FsbGJhY2sgZnVuY3Rpb24gc3RydWN0dXJlIGZvciBTUEkgZGV2aWNlDQorICogQHsNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfc3BpX2Nicw0KK3sNCisgICAgREVWX0NBTExCQUNLIHR4X2NiOyAvKiE8IHNwaSBkYXRhIHRyYW5zbWl0IHN1Y2Nlc3MgcmVxdWlyZWQgYnl0ZXMgY2FsbGJhY2sgKi8NCisgICAgREVWX0NBTExCQUNLIHJ4X2NiOyAvKiE8IHNwaSBkYXRhIHJlY2VpdmUgc3VjY2VzcyByZXF1aXJlZCBieXRlcyBjYWxsYmFjayAqLw0KKyAgICBERVZfQ0FMTEJBQ0sgZXJyX2NiOyAgICAvKiE8IHNwaSBlcnJvciBjYWxsYmFjayAqLw0KKyAgICBERVZfQ0FMTEJBQ0sgeGZlcl9jYjsgICAvKiE8IHRyYW5zZmVyIGNhbGxiYWNrICovDQorfSBERVZfU1BJX0NCUywgKkRFVl9TUElfQ0JTX1BUUjsNCisvKiogQH0gKi8NCisNCisvKiogU1BJIENsb2NrIE1vZGUgKi8NCit0eXBlZGVmIGVudW0gc3BpX2Nsa19tb2RlDQorew0KKyAgICBTUElfQ1BPTF8wX0NQSEFfMCA9IDAsICAvKiE8IEluYWN0aXZlIHN0YXRlIG9mIHNlcmlhbCBjbG9jayBpcyBsb3csIHNlcmlhbCBjbG9jayB0b2dnbGVzIGluIG1pZGRsZSBvZiBmaXJzdCBkYXRhIGJpdCAqLw0KKyAgICBTUElfQ1BPTF8wX0NQSEFfMSA9IDEsICAvKiE8IEluYWN0aXZlIHN0YXRlIG9mIHNlcmlhbCBjbG9jayBpcyBsb3csIHNlcmlhbCBjbG9jayB0b2dnbGVzIGF0IHN0YXJ0IG9mIGZpcnN0IGRhdGEgYml0ICAqLw0KKyAgICBTUElfQ1BPTF8xX0NQSEFfMCA9IDIsICAvKiE8IEluYWN0aXZlIHN0YXRlIG9mIHNlcmlhbCBjbG9jayBpcyBoaWdoLCBzZXJpYWwgY2xvY2sgdG9nZ2xlcyBpbiBtaWRkbGUgb2YgZmlyc3QgZGF0YSBiaXQgKi8NCisgICAgU1BJX0NQT0xfMV9DUEhBXzEgPSAzLCAgLyohPCBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgaGlnaCwgc2VyaWFsIGNsb2NrIHRvZ2dsZXMgYXQgc3RhcnQgb2YgZmlyc3QgZGF0YSBiaXQgKi8NCisNCisgICAgU1BJX0NMS19NT0RFXzAgICAgPSBTUElfQ1BPTF8wX0NQSEFfMCwgIC8qITwgRXF1YWwgdG8gXHJlZiBTUElfQ1BPTF8wX0NQSEFfMCAqLw0KKyAgICBTUElfQ0xLX01PREVfMSAgICA9IFNQSV9DUE9MXzBfQ1BIQV8xLCAgLyohPCBFcXVhbCB0byBccmVmIFNQSV9DUE9MXzBfQ1BIQV8xICovDQorICAgIFNQSV9DTEtfTU9ERV8yICAgID0gU1BJX0NQT0xfMV9DUEhBXzAsICAvKiE8IEVxdWFsIHRvIFxyZWYgU1BJX0NQT0xfMV9DUEhBXzAgKi8NCisgICAgU1BJX0NMS19NT0RFXzMgICAgPSBTUElfQ1BPTF8xX0NQSEFfMSAgIC8qITwgRXF1YWwgdG8gXHJlZiBTUElfQ1BPTF8xX0NQSEFfMSAqLw0KK30gU1BJX0NMS19NT0RFOw0KKw0KKyNkZWZpbmUgU1BJX0NMS19NT0RFX0RFRkFVTFQgICAgU1BJX0NQT0xfMF9DUEhBXzAgICAvKiE8IERlZmF1bHQgU1BJIGRldmljZSBjbG9jayBtb2RlICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfU1BJX0RFVlNUUlVDVCAgICBTUEkgRGV2aWNlIFN0cnVjdHVyZQ0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfU1BJDQorICogXGJyaWVmICAgY29udGFpbnMgZGVmaW5pdGlvbnMgb2Ygc3BpIGRldmljZSBzdHJ1Y3R1cmUuDQorICogXGRldGFpbHMgdGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSB1c2VkIGluIHVzZXIgaW1wbGVtZW50ZWQgY29kZSwgd2hpY2ggd2FzIGNhbGxlZA0KKyAqICBEZXZpY2UgRHJpdmVyIEltcGxlbWVudCBMYXllciBmb3Igc3BpIHRvIHJlYWxpemUgaW4gdXNlciBjb2RlLg0KKyAqIEB7DQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X3NwaV90cmFuc2ZlciBERVZfU1BJX1RSQU5TRkVSLCAqREVWX1NQSV9UUkFOU0ZFUl9QVFI7DQorLyoqDQorICogXGJyaWVmICAgc3BpIHJlYWQgYW5kIHdyaXRlIGRhdGEgc3RydWN0dXJlIHVzZWQgYnkgXHJlZiBTUElfQ01EX1RSQU5TRkVSDQorICogIHNwaSB3cml0ZSB0aGVuIHJlYWQgZGF0YQ0KKyAqDQorICovDQorc3RydWN0IGRldl9zcGlfdHJhbnNmZXINCit7DQorICAgIERFVl9TUElfVFJBTlNGRVIgKm5leHQ7DQorICAgIC8qIENhbGMgYnkgc29mdHdhcmUgKi8NCisgICAgLyoqIHRvdF9sZW4gPSAodHhfdG90bGVuPnJ4X3RvdGxlbik/dHhfdG90bGVuOnJ4X3RvdGxlbiAqLw0KKyAgICB1aW50MzJfdCB0b3RfbGVuOw0KKyAgICAvKiBTZXQgYnkgdXNlciAqLw0KKyAgICB1aW50OF90ICp0eF9idWY7DQorICAgIHVpbnQzMl90IHR4X29mczsNCisgICAgdWludDMyX3QgdHhfbGVuOw0KKyAgICB1aW50OF90ICpyeF9idWY7DQorICAgIHVpbnQzMl90IHJ4X29mczsNCisgICAgdWludDMyX3QgcnhfbGVuOw0KKyAgICAvKiBTaG91bGQgYXV0byBzZXQgdG8gcHJvcGVyIHZhbHVlIGR1cmluZyBzZXQgYnVmZmVyIHZhbHVlICovDQorICAgIHVpbnQzMl90IHR4X2lkeDsNCisgICAgdWludDMyX3QgdHhfdG90bGVuOyAvKiogdHhfdG90bGVuID0gdHhfbGVuICsgdHhfb2ZzICovDQorICAgIHVpbnQzMl90IHJ4X2lkeDsNCisgICAgdWludDMyX3QgcnhfdG90bGVuOyAvKiogcnhfdG90bGVuID0gcnhfbGVuICsgcnhfb2ZzICovDQorfTsNCisNCisvKiogU2V0IHR4IGJ1ZmZlciBvZiBkZXZpY2Ugc3BpIHRyYW5zZmVyICovDQorI2RlZmluZSBERVZfU1BJX1hGRVJfU0VUX1RYQlVGKHhmZXIsIGJ1Ziwgb2ZzLCBsZW4pICAgICB7ICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+dHhfYnVmID0gKHVpbnQ4X3QgKikoYnVmKTsgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+dHhfbGVuID0gKHVpbnQzMl90KShsZW4pOyAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+dHhfb2ZzID0gKHVpbnQzMl90KShvZnMpOyAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+dHhfaWR4ID0gMDsgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnR4X3RvdGxlbiA9ICggKHVpbnQzMl90KShsZW4pICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICh1aW50MzJfdCkob2ZzKSApIDsgICBcDQorICAgICAgICAgICAgICAgIH0NCisNCisvKiogU2V0IHJ4IGJ1ZmZlciBvZiBkZXZpY2Ugc3BpIHRyYW5zZmVyICovDQorI2RlZmluZSBERVZfU1BJX1hGRVJfU0VUX1JYQlVGKHhmZXIsIGJ1Ziwgb2ZzLCBsZW4pICAgICB7ICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+cnhfYnVmID0gKHVpbnQ4X3QgKikoYnVmKTsgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+cnhfbGVuID0gKHVpbnQzMl90KShsZW4pOyAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+cnhfb2ZzID0gKHVpbnQzMl90KShvZnMpOyAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+cnhfaWR4ID0gMDsgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X3RvdGxlbiA9ICggKHVpbnQzMl90KShsZW4pICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICh1aW50MzJfdCkob2ZzKSApIDsgICBcDQorICAgICAgICAgICAgICAgIH0NCisNCisvKiogQ2FsY3VsYXRlIHRvdGFsIGxlbmd0aCBvZiBjdXJyZW50IHRyYW5zZmVyIHdpdGhvdXQgbmV4dCB0cmFuc2ZlciAqLw0KKyNkZWZpbmUgREVWX1NQSV9YRkVSX0NBTENfVE9UTEVOKHhmZXIpICAgICAgKHhmZXIpLT50b3RfbGVuID0gICBcDQorICAgICAgICAgICAgICAgICgoeGZlciktPnR4X3RvdGxlbiA+ICh4ZmVyKS0+cnhfdG90bGVuKSA/ICh4ZmVyKS0+dHhfdG90bGVuIDogKHhmZXIpLT5yeF90b3RsZW4gOw0KKw0KKy8qKiBTZXQgbmV4dCBTUEkgdHJhbnNmZXIgKi8NCisjZGVmaW5lIERFVl9TUElfWEZFUl9TRVRfTkVYVCh4ZmVyLCBuZXh0X3hmZXIpICAoeGZlciktPm5leHQgPSAobmV4dF94ZmVyKTsNCisNCisvKiogSW5pdCBzcGkgdHJhbnNmZXIgKi8NCisjZGVmaW5lIERFVl9TUElfWEZFUl9JTklUKHhmZXIpICAgICAgICAgICAgICAgICB7ICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICh4ZmVyKS0+dHhfaWR4ID0gMDsgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X2lkeCA9IDA7ICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgKHhmZXIpLT50eF90b3RsZW4gPSAoKHhmZXIpLT50eF9sZW4gICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoeGZlciktPnR4X29mcykgOyBcDQorICAgICAgICAgICAgICAgICAgICAoeGZlciktPnJ4X3RvdGxlbiA9ICgoeGZlciktPnJ4X2xlbiAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICh4ZmVyKS0+cnhfb2ZzKSA7IFwNCisgICAgICAgICAgICAgICAgICAgIERFVl9TUElfWEZFUl9DQUxDX1RPVExFTih4ZmVyKTsgICAgIFwNCisgICAgICAgICAgICAgICAgfQ0KKy8qKg0KKyAqIFxicmllZiAgIHNwaSBpbmZvcm1hdGlvbiBzdHJ1Y3QgZGVmaW5pdGlvbg0KKyAqIFxkZXRhaWxzIGluZm9ybWF0aW9ucyBhYm91dCBzcGkgb3BlbiBzdGF0ZSwgd29ya2luZyBzdGF0ZSwNCisgKiAgZnJlcXVlbmN5LCBzcGkgcmVnaXN0ZXJzLCB3b3JraW5nIG1ldGhvZCwgaW50ZXJydXB0IG51bWJlcg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IGRldl9zcGlfaW5mbw0KK3sNCisgICAgdm9pZCAqc3BpX2N0cmw7ICAgICAvKiE8IHNwaSBjb250cm9sIHJlbGF0ZWQgKi8NCisgICAgdWludDMyX3Qgc3RhdHVzOyAgICAvKiE8IGN1cnJlbnQgd29ya2luZyBzdGF0dXMsIHJlZmVyIHRvIFxyZWYgREVWSUNFX0hBTF9DT01NT05fREVWU1RBVFVTLCB0aGlzIHNob3VsZCBiZSBccmVmIERFVl9FTkFCTEVEIGZvciBmaXJzdCBvcGVuICovDQorICAgIHVpbnQzMl90IGZyZXE7ICAgICAgLyohPCBzcGkgd29ya2luZyBiYXVkcmF0ZSAqLw0KKyAgICB1aW50OF90IG1vZGU7ICAgICAgIC8qITwgc3BpIHdvcmtpbmcgbW9kZSAobWFzdGVyL3NsYXZlKSAqLw0KKyAgICB1aW50OF90IGNsa19tb2RlOyAgIC8qITwgc3BpIGNsb2NrIHBoYXNlIGFuZCBwb2xhcml0eSwgdGhpcyBzaG91bGQgYmUgXHJlZiBTUElfQ0xLX01PREVfREVGQVVMVCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICB1aW50OF90IG9wbl9jbnQ7ICAgIC8qITwgc3BpIG9wZW4gY291bnQsIG9wZW4gaXQgd2lsbCBpbmNyZWFzZSAxLCBjbG9zZSBpdCB3aWxsIGRlY3JlYXNlIDEsIDAgZm9yIGNsb3NlLCA+MCBmb3Igb3BlbiAqLw0KKyAgICB1aW50OF90IHNsYXZlOyAgICAgIC8qITwgY3VycmVudCBzZWxlY3RlZCBzbGF2ZSBkZXZpY2Ugbm8sIHN0YXJ0IGZyb20gMCwgdGhpcyBzaG91bGQgYmUgXHJlZiBTUElfU0xBVkVfTk9UX1NFTEVDVEVEIGZvciBmaXJzdCBvcGVuICovDQorICAgIHVpbnQ4X3QgZGZzOyAgICAgICAgLyohPCBkYXRhIGZyYW1lIHNpemUsIHRoaXMgc2hvdWxkIGJlIFxyZWYgU1BJX0RGU19ERUZBVUxUIGZvciBmaXJzdCBvcGVuICovDQorDQorICAgIERFVl9TUElfVFJBTlNGRVIgeGZlcjsgIC8qITwgc3BpIHRyYW5zZmVyLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYWxsIHplcm8gZm9yIGZpcnN0IG9wZW4gKi8NCisgICAgREVWX1NQSV9DQlMgc3BpX2NiczsgICAgLyohPCBzcGkgY2FsbGJhY2tzLCBmb3IgYm90aCBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUsIHRoaXMgc2hvdWxkIGJlIGFsbCBOVUxMIGZvciBmaXJzdCBvcGVuICovDQorICAgIHZvaWQgKmV4dHJhOyAgICAgICAgLyohPCBhIGV4dHJhIHBvaW50ZXIgdG8gZ2V0IGhvb2sgdG8gYXBwbGljYXRpb25zIHdoaWNoIHNob3VsZCBub3QgdXNlZCBieSBic3AgZGV2ZWxvcGVyLA0KKyAgICAgICAgICAgICAgICAgICAgdGhpcyBzaG91bGQgYmUgTlVMTCBmb3IgZmlyc3Qgb3BlbiBhbmQgeW91IGNhbiBccmVmIERFVl9TUElfSU5GT19TRVRfRVhUUkFfT0JKRUNUICJzZXQiDQorICAgICAgICAgICAgICAgICAgICBvciBccmVmIERFVl9TUElfSU5GT19HRVRfRVhUUkFfT0JKRUNUICJnZXQiIHRoZSBleHRyYSBpbmZvcm1hdGlvbiBwb2ludGVyICovDQorICAgIHVpbnQzMl90IGR1bW15OyAgICAgLyohPCBkdW1teSB3cml0ZSBkYXRhIHdoZW4gc2VuZCBhbmQgcmVjZWl2ZSwgdGhpcyBzaG91bGQgYmUgXHJlZiBTUElfRFVNTVlfREVGQVVMVCBmb3IgZmlyc3Qgb3BlbiAqLw0KK30gREVWX1NQSV9JTkZPLCAqIERFVl9TUElfSU5GT19QVFI7DQorDQorLyoqIFNldCBleHRyYSBpbmZvcm1hdGlvbiBwb2ludGVyIG9mIHNwaSBpbmZvICovDQorI2RlZmluZSBERVZfU1BJX0lORk9fU0VUX0VYVFJBX09CSkVDVChzcGlfaW5mb19wdHIsIGV4dHJhX2luZm8pICAgICAoc3BpX2luZm9fcHRyKS0+ZXh0cmEgPSAodm9pZCAqKShleHRyYV9pbmZvKQ0KKy8qKiBHZXQgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciBvZiBzcGkgaW5mbyAqLw0KKyNkZWZpbmUgREVWX1NQSV9JTkZPX0dFVF9FWFRSQV9PQkpFQ1Qoc3BpX2luZm9fcHRyKSAgICAgICAgICgoc3BpX2luZm9fcHRyKS0+ZXh0cmEpDQorDQorI2RlZmluZSBTUElfREZTX0RFRkFVTFQgICAgICAgICAgICAgOCAgICAgICAvKiE8IERlZmF1bHQgc3BpIGRhdGEgZnJhbWUgc2l6ZSAqLw0KKyNkZWZpbmUgU1BJX1NMQVZFX05PVF9TRUxFQ1RFRCAgICAgICAgICAoMHhGRikgICAgICAvKiE8IFNsYXZlIGlzIG5vdCBzZWxlY3RlZCAqLw0KKyNkZWZpbmUgU1BJX0RVTU1ZX0RFRkFVTFQgICAgICAgICAgICgweEZGKSAgICAgIC8qITwgZGVmYXVsdCBkdW1teSB2YWx1ZSBmb3IgZmlyc3Qgb3BlbiAqLw0KKw0KKy8qKg0KKyAqIFxicmllZiAgIHNwaSBkZXZpY2UgaW50ZXJmYWNlIGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBkZWZpbmUgc3BpIGRldmljZSBpbnRlcmZhY2UsIGxpa2Ugc3BpIGluZm9ybWF0aW9uIHN0cnVjdHVyZSwNCisgKiAgZnVjdGlvbnMgdG8gZ2V0IHNwaSBpbmZvLCBvcGVuL2Nsb3NlL2NvbnRyb2wgc3BpLCBzZW5kL3JlY2VpdmUgZGF0YSBieSBzcGkNCisgKiBcbm90ZSAgICBhbGwgdGhpcyBkZXRhaWxzIGFyZSBpbXBsZW1lbnRlZCBieSB1c2VyIGluIHVzZXIgcG9ydGluZyBjb2RlDQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X3NwaQ0KK3sNCisgICAgREVWX1NQSV9JTkZPIHNwaV9pbmZvOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IHNwaSBkZXZpY2UgaW5mb3JtYXRpb24gKi8NCisgICAgaW50MzJfdCAoKnNwaV9vcGVuKSh1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBwYXJhbSk7ICAgICAgICAvKiE8IG9wZW4gc3BpIGRldmljZSBpbiBtYXN0ZXIvc2xhdmUgbW9kZSwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gaW4gbWFzdGVyIG1vZGUsIHBhcmFtIHN0YW5kcyBmb3IgZnJlcXVlbmN5LCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBpbiBzbGF2ZSBtb2RlLCBwYXJhbSBzdGFuZHMgZm9yIGNsb2NrIG1vZGUgKi8NCisgICAgaW50MzJfdCAoKnNwaV9jbG9zZSkodm9pZCk7ICAgICAgICAgICAgICAgICAgICAgLyohPCBjbG9zZSBzcGkgZGV2aWNlICovDQorICAgIGludDMyX3QgKCpzcGlfY29udHJvbCkodWludDMyX3QgY3RybF9jbWQsIHZvaWQgKnBhcmFtKTsgICAgIC8qITwgY29udHJvbCBzcGkgZGV2aWNlICovDQorICAgIGludDMyX3QgKCpzcGlfd3JpdGUpKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbik7ICAgICAgIC8qITwgc2VuZCBkYXRhIHRvIHNwaSBkZXZpY2UgKGJsb2NraW5nIG1ldGhvZCkgKi8NCisgICAgaW50MzJfdCAoKnNwaV9yZWFkKSh2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pOyAgICAgICAgICAvKiE8IHJlYWQgZGF0YSBmcm9tIHNwaSBkZXZpY2UgKGJsb2NraW5nIG1ldGhvZCkgKi8NCit9IERFVl9TUEksICogREVWX1NQSV9QVFI7DQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfc3BpOjpzcGlfb3BlbikgKHVpbnQzMl90IG1vZGUsIHVpbnQzMl90IHBhcmFtKQ0KKyAqIFxkZXRhaWxzIG9wZW4gYW4gc3BpIGRldmljZSB3aXRoIHNlbGVjdGVkIG1vZGUgKG1hc3RlciBvciBzbGF2ZSkgd2l0aCBkZWZpbmVkIFxyZWYgcGFyYW0NCisgKiBccGFyYW1baW5dICAgbW9kZSAgICB3b3JraW5nIG1vZGUgKFxyZWYgREVWX01BU1RFUl9NT0RFICJtYXN0ZXIiIG9yIFxyZWYgREVWX1NMQVZFX01PREUgInNsYXZlIikNCisgKiBccGFyYW1baW5dICAgcGFyYW0gICBXaGVuIG1vZGUgaXMgXHJlZiBERVZfTUFTVEVSX01PREUsIHBhcmFtIHN0YW5kcyBmb3IgXHJlZiBkZXZfc3BpX2luZm86OmZyZXEgImZyZXF1ZW5jeSIsDQorICogICAgICAgICAgd2hlbiBtb2RlIGlzIFxyZWYgREVWX1NMQVZFX01PREUsIHBhcmFtIHN0YW5kcyBmb3IgXHJlZiBkZXZfc3BpX2luZm86OmNsa19tb2RlICJzbGF2ZSBjbG9jayBtb2RlIg0KKyAqIFxyZXR2YWwgIEVfT0sgICAgT3BlbiBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzDQorICogXHJldHZhbCAgRV9PUE5FRCBJZiBkZXZpY2Ugd2FzIG9wZW5lZCBiZWZvcmUgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycywNCisgKiAgICAgICAgICB0aGVuIGp1c3QgaW5jcmVhc2UgdGhlIFxyZWYgZGV2X3NwaV9pbmZvOjpvcG5fY250ICJvcG5fY250IiBhbmQgcmV0dXJuIFxyZWYgRV9PUE5FRA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX1NZUyAgIERldmljZSBpcyBvcGVuZWQgZm9yIGRpZmZlcmVudCBtb2RlIGJlZm9yZSwgaWYgeW91IHdhbnQgdG8gb3BlbiBpdCB3aXRoIGRpZmZlcmVudCBtb2RlLCB5b3UgbmVlZCB0byBmdWxseSBjbG9zZSBpdCBmaXJzdC4NCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX05PU1BUIE9wZW4gc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl9zcGk6OnNwaV9jbG9zZSkgKHZvaWQpDQorICogXGRldGFpbHMgY2xvc2UgYW4gc3BpIGRldmljZSwganVzdCBkZWNyZWFzZSB0aGUgXHJlZiBkZXZfc3BpX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiLA0KKyAqICAgICAgaWYgXHJlZiBkZXZfc3BpX2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGVxdWFscyAwLCB0aGVuIGNsb3NlIHRoZSBkZXZpY2UNCisgKiBccmV0dmFsICBFX09LICAgIENsb3NlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSBpc3N1ZXMoaW5jbHVkaW5nIHNjZW5hcmlvIHRoYXQgZGV2aWNlIGlzIGFscmVhZHkgY2xvc2VkKQ0KKyAqIFxyZXR2YWwgIEVfT1BORUQgRGV2aWNlIGlzIHN0aWxsIG9wZW5lZCwgdGhlIGRldmljZSBccmVmIGRldl9zcGlfaW5mbzo6b3BuX2NudCAib3BuX2NudCIgZGVjcmVhc2VkIGJ5IDENCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfc3BpOjpzcGlfY29udHJvbCkgKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCisgKiBcZGV0YWlscyBjb250cm9sIGFuIHNwaSBkZXZpY2UgYnkgXHJlZiBjdHJsX2NtZCwgd2l0aCBwYXNzZWQgXHJlZiBwYXJhbS4NCisgKiAgeW91IGNhbiBjb250cm9sIHNwaSBkZXZpY2UgdXNpbmcgcHJlZGVmaW5lZCBzcGkgY29udHJvbCBjb21tYW5kcyBkZWZpbmVkIHVzaW5nIFxyZWYgREVWX1NFVF9TWVNDTUQNCisgKiAgKHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYnNwIGRldmVsb3BlciksIHN1Y2ggYXMgXHJlZiBTUElfQ01EX01TVF9TRVRfRlJFUSAic2V0IHNwaSBtYXN0ZXIgZnJlcXVlbmN5IiwNCisgKiAgXHJlZiBTUElfQ01EX0ZMVVNIX1RYICJmbHVzaCB0eCIgYW5kIFxyZWYgREVWSUNFX0hBTF9TUElfQ1RSTENNRCAibW9yZSIuDQorICogIEFuZCB5b3UgY2FuIGFsc28gY29udHJvbCBzcGkgZGV2aWNlIHVzaW5nIHlvdXIgb3duIHNwZWNpZmllZCBjb21tYW5kcyBkZWZpbmVkIHVzaW5nIFxyZWYgREVWX1NFVF9VU1JDTUQsDQorICogIGJ1dCB0aGVzZSBzcGVjaWZpZWQgY29tbWFuZHMgc2hvdWxkIGJlIGRlZmluZWQgaW4geW91ciBvd24gc3BpIGRldmljZSBkcml2ZXIgaW1wbGVtZW50YXRpb24uDQorICogXHBhcmFtW2luXSAgICAgICBjdHJsX2NtZCAgICBccmVmIERFVklDRV9IQUxfU1BJX0NUUkxDTUQgImNvbnRyb2wgY29tbWFuZCIsIHRvIGNoYW5nZSBvciBnZXQgc29tZSB0aGluZyByZWxhdGVkIHRvIHNwaQ0KKyAqIFxwYXJhbVtpbixvdXRdICAgcGFyYW0gICAgICAgcGFyYW1ldGVycyB0aGF0IG1heWJlIGFyZ3VtZW50IG9mIHRoZSBjb21tYW5kLA0KKyAqICAgICAgICAgICAgICAgICAgb3IgcmV0dXJuIHZhbHVlcyBvZiB0aGUgY29tbWFuZCwgbXVzdCBub3QgYmUgTlVMTA0KKyAqIFxyZXR2YWwgIEVfT0sgICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogXHJldHZhbCAgRV9DTFNFRCBEZXZpY2UgaXMgbm90IG9wZW5lZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBmb3IgY3VycmVudCBjb250cm9sIGNvbW1hbmQNCisgKiBccmV0dmFsICBFX1NZUyAgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcywgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKiBccmV0dmFsICBFX0NUWCAgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGRpZmZlcmVudCByZWFzb25zIGxpa2UgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiBccmV0dmFsICBFX05PU1BUIENvbnRyb2wgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIG9yIG5vdCB2YWxpZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3NwaTo6c3BpX3dyaXRlKSAoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KKyAqIFxkZXRhaWxzIHNlbmQgXHJlZiBkYXRhIHRocm91Z2ggc3BpIHdpdGggZGVmaW5lZCBccmVmIGxlbiB0byBzbGF2ZSBkZXZpY2UgLg0KKyAqIFxwYXJhbVtpbl0gICBkYXRhICAgIHBvaW50ZXIgdG8gZGF0YSBuZWVkIHRvIHNlbmQgYnkgc3BpDQorICogXHBhcmFtW2luXSAgIGxlbiBsZW5ndGggb2YgZGF0YSB0byBiZSBzZW50DQorICogXHJldHZhbCAgPjAgIEJ5dGUgY291bnQgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQgZm9yIHBvbGwgbWV0aG9kDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9DVFggICBEZXZpY2UgaXMgc3RpbGwgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiBccmV0dmFsICBFX1NZUyAgIENhbid0IHdyaXRlIGRhdGEgdG8gaGFyZHdhcmUgZHVlIHRvIGhhcmR3YXJlIGlzc3Vlcywgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl9zcGk6OnNwaV9yZWFkKSAodm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KKyAqIFxkZXRhaWxzIHJlY2VpdmUgXHJlZiBkYXRhIG9mIGRlZmluZWQgXHJlZiBsZW4gdGhyb3VnaCBzcGkgZnJvbSBzbGF2ZSBkZXZpY2UgLg0KKyAqIFxwYXJhbVtvdXRdICBkYXRhICAgIHBvaW50ZXIgdG8gZGF0YSBuZWVkIHRvIHJlY2VpdmVkIGJ5IHNwaQ0KKyAqIFxwYXJhbVtpbl0gICBsZW4gbGVuZ3RoIG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQNCisgKiBccmV0dmFsICA+MCAgQnl0ZSBjb3VudCB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZm9yIHBvbGwgbWV0aG9kDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9DVFggICBEZXZpY2UgaXMgc3RpbGwgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQNCisgKiBccmV0dmFsICBFX1NZUyAgIENhbid0IHJlY2VpdmUgZGF0YSBmcm9tIGhhcmR3YXJlIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMsIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICovDQorLyoqIEB9ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyoqDQorICogXGJyaWVmICAgZ2V0IGFuIFxyZWYgZGV2X3NwaSAic3BpIGRldmljZSIgYnkgc3BpIGRldmljZSBpZC4NCisgKiAgRm9yIGhvdyB0byB1c2Ugc3BpIGRldmljZSBoYWwgcmVmZXIgdG8gXHJlZiBkZXZfc3BpICJGdW5jdGlvbnMgaW4gc3BpIGRldmljZSBzdHJ1Y3R1cmUiDQorICogXHBhcmFtW2luXSAgIHNwaV9pZCAgaWQgb2Ygc3BpLCBkZWZpbmVkIGJ5IHVzZXINCisgKiBccmV0dmFsICAhTlVMTCAgIHBvaW50ZXIgdG8gYW4gXHJlZiBkZXZfc3BpICJzcGkgZGV2aWNlIHN0cnVjdHVyZSINCisgKiBccmV0dmFsICBOVUxMICAgIGZhaWxlZCB0byBmaW5kIHRoZSBzcGkgZGV2aWNlIGJ5IFxyZWYgc3BpX2lkDQorICogXG5vdGUgICAgbmVlZCB0byBpbXBsZW1lbnRlZCBieSB1c2VyIGluIHVzZXIgY29kZQ0KKyAqLw0KK2V4dGVybiBERVZfU1BJX1BUUiBzcGlfZ2V0X2RldihpbnQzMl90IHNwaV9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKyNlbmRpZiAvKiBfREVWSUNFX0hBTF9TUElfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl91YXJ0LmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZGV2aWNlL2RldmljZV9oYWwvaW5jL2Rldl91YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwNDYxOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9kZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X3VhcnQuaApAQCAtMCwwICsxLDQ4NSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNi0xNg0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZGVmZ3JvdXAgICAgREVWSUNFX0hBTF9VQVJUICAgICBVQVJUIERldmljZSBIQUwgSW50ZXJmYWNlDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9ERUYNCisgKiBcYnJpZWYgICBEZWZpbml0aW9ucyBmb3IgdWFydCBkZXZpY2UgaGFyZHdhcmUgbGF5ZXIgKFxyZWYgZGV2X3VhcnQuaCkNCisgKiBcZGV0YWlscyBQcm92aWRlIHVuaWZpZWQgQVBJcyBmb3IgdWFydCBkcml2ZXIgdG8gaW1wbGVtZW50Lg0KKyAqICBIZXJlIGlzIGEgZGlhZ3JhbSBmb3IgdGhlIHVhcnQgaW50ZXJmYWNlLg0KKyAqDQorICogIFxodG1sb25seQ0KKyAqICA8ZGl2IGNsYXNzPSJpbWFnZWJveCI+DQorICogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHgiPg0KKyAqICAgICAgICAgIDxpbWcgc3JjPSJwaWMvZGV2X3VhcnRfaGFsLmpwZyIgYWx0PSJVQVJUIERldmljZSBIQUwgSW50ZXJmYWNlIERpYWdyYW0iLz4NCisgKiAgICAgICAgICA8cD5VQVJUIERldmljZSBIQUwgSW50ZXJmYWNlIERpYWdyYW08L3A+DQorICogICAgICA8L2Rpdj4NCisgKiAgPC9kaXY+DQorICogIFxlbmRodG1sb25seQ0KKyAqDQorICogIyMjIFJlZmVyZW5jZSBMaW5rcw0KKyAqICAgICAqIFtTZXJpYWwgUG9ydF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2VyaWFsX3BvcnQpDQorICoNCisgKiBAezYNCisgKg0KKyAqIFxmaWxlDQorICogXGJyaWVmICAgdWFydCBkZXZpY2UgaGFyZHdhcmUgbGF5ZXIgZGVmaW5pdGlvbnMNCisgKiBcZGV0YWlscyBQcm92aWRlIGNvbW1vbiBkZWZpbml0aW9ucyBmb3IgdWFydCBkZXZpY2UsDQorICogIHRoZW4gc29mdHdhcmUgZGV2ZWxvcGVyIGNhbiBkZXZlbG9wIHVhcnQgZHJpdmVyDQorICogIGZvbGxvd2luZyB0aGlzIGRlZmluaXRpb25zLCBhbmQgdGhlIGFwcGxpY2F0aW9ucw0KKyAqICBjYW4gZGlyZWN0bHkgY2FsbCB0aGlzIGRlZmluaXRpb24gdG8gcmVhbGl6ZSBmdW5jdGlvbnMNCisgKg0KKyAqLw0KKw0KKyNpZm5kZWYgX0RFVklDRV9IQUxfVUFSVF9IXw0KKyNkZWZpbmUgX0RFVklDRV9IQUxfVUFSVF9IXw0KKw0KKyNpbmNsdWRlICJkZXZpY2UvZGV2aWNlX2hhbC9pbmMvZGV2X2NvbW1vbi5oIg0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1VBUlRfQkFVRCAgICBVQVJUIERldmljZSBCYXVkcmF0ZSBEZWZpbml0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfVUFSVA0KKyAqIFxicmllZiAgIE1hY3JvcyBmb3IgdWFydCBiYXVkcmF0ZS4NCisgKiBcZGV0YWlscyBEZWZpbml0aW9ucyBmb3IgYmF1ZHJhdGUgZnJvbSA0ODAwIHRvIDExNTIwMGJwcy4NCisgKiBAew0KKyAqLw0KKy8qDQorICogZGVmaW5lcyBmb3IgdWFydCBiYXVkcmF0ZXMNCisgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMTEwICAgICAgICAgICAoMTEwKSAgICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMTEwYnBzICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzMwMCAgICAgICAgICAgKDMwMCkgICAgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDMwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV82MDAgICAgICAgICAgICg2MDApICAgICAgIC8qITwgdWFydCBiYXVkcmF0ZSA2MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfMTIwMCAgICAgICAgICAoMTIwMCkgICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMTIwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8yNDAwICAgICAgICAgICgyNDAwKSAgICAgIC8qITwgdWFydCBiYXVkcmF0ZSAyNDAwYnBzICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzQ4MDAgICAgICAgICAgKDQ4MDApICAgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDQ4MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfOTYwMCAgICAgICAgICAoOTYwMCkgICAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgOTYwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8xNDQwMCAgICAgICAgICgxNDQwMCkgICAgIC8qITwgdWFydCBiYXVkcmF0ZSAxNDQwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8xOTIwMCAgICAgICAgICgxOTIwMCkgICAgIC8qITwgdWFydCBiYXVkcmF0ZSAxOTIwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8zODQwMCAgICAgICAgICgzODQwMCkgICAgIC8qITwgdWFydCBiYXVkcmF0ZSAzODQwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV81NzYwMCAgICAgICAgICg1NzYwMCkgICAgIC8qITwgdWFydCBiYXVkcmF0ZSA1NzYwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV8xMTUyMDAgICAgICAgICAgICAoMTE1MjAwKSAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgMTE1MjAwYnBzICovDQorI2RlZmluZSBVQVJUX0JBVURSQVRFXzIzMDQwMCAgICAgICAgICAgICgyMzA0MDApICAgIC8qITwgdWFydCBiYXVkcmF0ZSAyMzA0MDBicHMgKi8NCisjZGVmaW5lIFVBUlRfQkFVRFJBVEVfNDYwODAwICAgICAgICAgICAgKDQ2MDgwMCkgICAgLyohPCB1YXJ0IGJhdWRyYXRlIDQ2MDgwMGJwcyAqLw0KKyNkZWZpbmUgVUFSVF9CQVVEUkFURV85MjE2MDAgICAgICAgICAgICAoOTIxNjAwKSAgICAvKiE8IHVhcnQgYmF1ZHJhdGUgOTIxNjAwYnBzICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfVUFSVF9GT1JNQVQgIFVBUlQgRGV2aWNlIEZvcm1hdCBEZWZpbml0aW9ucw0KKyAqIFxpbmdyb3VwIERFVklDRV9IQUxfVUFSVA0KKyAqIFxicmllZiAgIE1hY3JvcyBmb3IgdWFydCBmb3JtYXQuDQorICogXGRldGFpbHMgRGVmaW5pdGlvbnMgZm9yIHVhcnQgZm9ybWF0IGxpa2UgZGF0YWJpdHMsIHBhcml0eSwgc3RvcGJpdHMuDQorICogQHsNCisgKi8NCisvKioNCisgKiBVQVJUIERldmljZSBQYXJpdHkgVHlwZXMgRW51bQ0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgVUFSVF9QQVJJVFlfTk9ORSAgPSAwLCAgLyohPCBubyBwYXJpdHkgYml0ICovDQorICAgIFVBUlRfUEFSSVRZX09ERCAgID0gMSwgIC8qITwgb2RkIHBhcml0eSBiaXQgKi8NCisgICAgVUFSVF9QQVJJVFlfRVZFTiAgPSAyLCAgLyohPCBldmVuIHBhcml0eSBiaXQgKi8NCisgICAgVUFSVF9QQVJJVFlfTUFSSyAgPSAzLCAgLyohPCBtYXJrIHBhcml0eSBiaXQsIGFsd2F5cyBsb2dpY2FsIDEgKi8NCisgICAgVUFSVF9QQVJJVFlfU1BBQ0UgPSA0ICAgLyohPCBzcGFjZSBwYXJpdHkgYml0LCBhbHdheXMgbG9naWNhbCAwICovDQorfSBVQVJUX1BBUklUWTsNCisNCisvKioNCisgKiBVQVJUIERldmljZSBTdG9wIEJpdHMgRW51bQ0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgVUFSVF9TVFBCSVRTX09ORSAgICAgPSAwLCAgIC8qITwgMSBzdG9wIGJpdCAqLw0KKyAgICBVQVJUX1NUUEJJVFNfT05FSEFMRiA9IDEsICAgLyohPCAxLjUgc3RvcCBiaXRzICovDQorICAgIFVBUlRfU1RQQklUU19UV08gICAgID0gMiAgICAvKiE8IDIgc3RvcCBiaXRzICovDQorfSBVQVJUX1NUT1BCSVRTOw0KKw0KKy8qKg0KKyAqIFVBUlQgRFBTIEZvcm1hdDogZGF0YWJpdHMvcGFyaXR5L3N0b3BiaXRzDQorICovDQordHlwZWRlZiBzdHJ1Y3QgdWFydF9kcHNfZm9ybWF0DQorew0KKyAgICB1aW50MzJfdCBkYXRhYml0czsgIC8qITwgZGF0YSBiaXRzICovDQorICAgIFVBUlRfUEFSSVRZIHBhcml0eTsgLyohPCBwYXJpdHkgYml0IHR5cGUgKi8NCisgICAgVUFSVF9TVE9QQklUUyBzdG9wYml0czsgLyohPCBzdG9wIGJpdHMgKi8NCit9IFVBUlRfRFBTX0ZPUk1BVDsNCisNCisjZGVmaW5lIFVBUlRfREFUQUJJVFNfREVGQVVMVCAgIDggICAvKiE8IGRlZmF1bHQgZGF0YSBiaXRzICovDQorDQorLyoqIERlZmF1bHQgVUFSVCBEUFMgZm9ybWF0ICovDQorc3RhdGljIGNvbnN0IFVBUlRfRFBTX0ZPUk1BVCBkcHNfZm9ybWF0X2RlZmF1bHQgPSB7VUFSVF9EQVRBQklUU19ERUZBVUxULCBVQVJUX1BBUklUWV9OT05FLCBVQVJUX1NUUEJJVFNfT05FfTsNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBVQVJUIERldmljZSBIYXJkd2FyZSBGbG93IENvbnRyb2wgVHlwZXMgRW51bQ0KKyAqLw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgVUFSVF9GQ19OT05FID0gMCwgICAvKiE8IE5vbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8NCisgICAgVUFSVF9GQ19SVFMgID0gMSwgICAvKiE8IFJlcXVlc3QgVG8gU2VuZCAqLw0KKyAgICBVQVJUX0ZDX0NUUyAgPSAyLCAgIC8qITwgQ2xlYXIgVG8gU2VuZCAqLw0KKyAgICBVQVJUX0ZDX0JPVEggPSAzICAgIC8qITwgQm90aCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgbWV0aG9kcyAqLw0KK30gVUFSVF9IV19GTE9XX0NPTlRST0w7DQorLyoqIERlZmF1bHQgaGFyZHdhcmUgZmxvdyBjb250cm9sIG1ldGhvZCAqLw0KK3N0YXRpYyBjb25zdCBVQVJUX0hXX0ZMT1dfQ09OVFJPTCBod2ZjX2RlZmF1bHQgPSBVQVJUX0ZDX05PTkU7DQorDQorLyoqDQorICogXGRlZmdyb3VwICAgIERFVklDRV9IQUxfVUFSVF9DVFJMQ01EICAgICBVQVJUIERldmljZSBDb250cm9sIENvbW1hbmRzDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9VQVJUDQorICogXGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIHVhcnQgY29udHJvbCBjb21tYW5kLCB1c2VkIGluIFxyZWYgZGV2X3VhcnQ6OnVhcnRfY29udHJvbCAiVUFSVCBJTyBDb250cm9sIg0KKyAqIFxkZXRhaWxzIFRoZXNlIGNvbW1hbmRzIGRlZmluZWQgaGVyZSBjYW4gYmUgdXNlZCBpbiB1c2VyIGNvZGUgZGlyZWN0bHkuDQorICogLSBQYXJhbWV0ZXJzIFVzYWdlDQorICogICAtIEZvciBwYXNzaW5nIHBhcmFtZXRlcnMgbGlrZSBpbnRlZ2VyLCBqdXN0IHVzZSB1aW50MzJfdC9pbnQzMl90IHRvIGRpcmVjdGx5IHBhc3MgdmFsdWVzDQorICogICAtIEZvciBwYXNzaW5nIHBhcmFtZXRlcnMgZm9yIGEgc3RydWN0dXJlLCBwbGVhc2UgdXNlIHBvaW50ZXIgdG8gcGFzcyB2YWx1ZXMNCisgKiAgIC0gRm9yIGdldHRpbmcgc29tZSBkYXRhLCBwbGVhc2UgdXNlIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiBkYXRhDQorICogLSBDb21tb24gUmV0dXJuIFZhbHVlcw0KKyAqICAgLSBccmVmIEVfT0ssICAgQ29udHJvbCBkZXZpY2Ugc3VjY2Vzc2Z1bGx5DQorICogICAtIFxyZWYgRV9DTFNFRCwgICAgRGV2aWNlIGlzIG5vdCBvcGVuZWQNCisgKiAgIC0gXHJlZiBFX09CSiwgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiAgIC0gXHJlZiBFX1BBUiwgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogICAtIFxyZWYgRV9TWVMsICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMgc3VjaCBhcyBkZXZpY2UgaXMgZGlzYWJsZWQNCisgKiAgIC0gXHJlZiBFX0NUWCwgIENvbnRyb2wgZGV2aWNlIGZhaWxlZCwgZHVlIHRvIGRpZmZlcmVudCByZWFzb25zIGxpa2UgaW4gdHJhbnNmZXIgc3RhdGUNCisgKiAgIC0gXHJlZiBFX05PU1BULCAgICBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQNCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFNldCBccmVmIGRldl91YXJ0X2luZm86OmJhdWRyYXRlICJ1YXJ0IGJhdWRyYXRlIi4NCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB1YXJ0IGJhdWRyYXRlLCBtdXN0IGFib3ZlIHplcm8uIEhlcmUgaXMgYSBsaXN0IG9mIFxyZWYgREVWSUNFX0hBTF9VQVJUX0JBVUQgInBvc3NpYmxlIGJhdWRyYXRlcyINCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfQkFVRCAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMCkNCisvKioNCisgKiBHZXQgXHJlZiBkZXZfdWFydF9pbmZvOjpzdGF0dXMgImN1cnJlbnQgZGV2aWNlIHN0YXR1cyINCisgKiAtIFBhcmFtIHR5cGUgOiB1aW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIHJlc3VsdCBvZiBjdXJyZW50IHN0YXR1cw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0dFVF9TVEFUVVMgICAgICAgICBERVZfU0VUX1NZU0NNRCgxKQ0KKy8qKg0KKyAqIEVuYWJsZSB1YXJ0IGRldmljZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogcGFyYW0gaXMgbm90IHJlcXVpcmVkDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfRU5BX0RFViAgICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDIpDQorLyoqDQorICogRGlzYWJsZSB1YXJ0IGRldmljZSwgd2hlbiBkZXZpY2UgaXMgZGlzYWJsZWQsDQorICogb25seSBccmVmIFVBUlRfQ01EX0VOQV9ERVYsIFxyZWYgVUFSVF9DTURfRElTX0RFViBhbmQNCisgKiBccmVmIFVBUlRfQ01EX0dFVF9TVEFUVVMgY29tbWFuZHMgY2FuIGJlIGV4ZWN1dGVkLA0KKyAqIG90aGVyIGNvbW1hbmRzIHdpbGwgcmV0dXJuIFxyZWYgRV9TWVMNCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHBhcmFtIGlzIG5vdCByZXF1aXJlZA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0RJU19ERVYgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgzKQ0KKy8qKg0KKyAqIEZsdXNoIHVhcnQgZGV2aWNlIG91dHB1dA0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogcGFyYW0gaXMgbm90IHJlcXVpcmVkDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfRkxVU0hfT1VUUFVUICAgICAgICAgICBERVZfU0VUX1NZU0NNRCg0KQ0KKy8qKg0KKyAqIEdldCBob3cgbWFueSBieXRlcyBzcGFjZSBpbiB1YXJ0IGFyZSBhdmFpbGFibGUgdG8gdHJhbnNtaXQsDQorICogdGhpcyBjYW4gYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb25zLA0KKyAqIGNvb3BlcmF0ZSB3aXRoIFxyZWYgZGV2X3VhcnQ6OnVhcnRfd3JpdGUgInVhcnRfd3JpdGUiIEFQSSB0byByZWFsaXplIG5vbi1ibG9ja2VkIHdyaXRlDQorICogLSBQYXJhbSB0eXBlIDogaW50MzJfdCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHN0b3JlIHRoZSB3cml0ZSBhdmFpbGFibGUgYnl0ZXMsID4gMCBmb3IgYXZhaWxhYmxlIGJ5dGVzLCAwIGZvciBub3QgYXZhaWxhYmxlDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfR0VUX1RYQVZBSUwgICAgICAgICAgICBERVZfU0VUX1NZU0NNRCg1KQ0KKy8qKg0KKyAqIEdldCBob3cgbWFueSBieXRlcyBpbiB1YXJ0IGFyZSBhdmFpbGFibGUgdG8gcmVjZWl2ZSwNCisgKiB0aGlzIGNhbiBiZSB1c2VkIGluIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbnMsDQorICogY29vcGVyYXRlIHdpdGggXHJlZiBkZXZfdWFydDo6dWFydF9yZWFkICJ1YXJ0X3JlYWQiIEFQSSB0byByZWFsaXplIG5vbi1ibG9ja2VkIHJlYWQNCisgKiAtIFBhcmFtIHR5cGUgOiBpbnQzMl90ICoNCisgKiAtIFBhcmFtIHVzYWdlIDogc3RvcmUgdGhlIHJlYWQgYXZhaWxhYmxlIGJ5dGVzLCA+IDAgZm9yIGF2YWlsYWJsZSBieXRlcywgMCBmb3Igbm90IGF2YWlsYWJsZQ0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX0dFVF9SWEFWQUlMICAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoNikNCisvKioNCisgKiBDYXVzZSBhIGJyZWFrIGNvbmRpdGlvbiB0byBiZSB0cmFuc21pdHRlZCB0byB0aGUgcmVjZWl2aW5nIGRldmljZQ0KKyAqIC0gUGFyYW0gdHlwZSA6IE5VTEwNCisgKiAtIFBhcmFtIHVzYWdlIDogcGFyYW0gaXMgbm90IHJlcXVpcmVkDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfQlJFQUtfU0VUICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDcpDQorLyoqDQorICogQ2xlYXIgYnJlYWsgY29uZGl0aW9uIGFuZCByZXR1cm4gdG8gbm9ybWFsDQorICogLSBQYXJhbSB0eXBlIDogTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiBwYXJhbSBpcyBub3QgcmVxdWlyZWQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9CUkVBS19DTFIgICAgICAgICAgREVWX1NFVF9TWVNDTUQoOCkNCisvKioNCisgKiBDaGFuZ2UgdWFydCBccmVmIGRldl91YXJ0X2luZm86OmRwc19mb3JtYXQgIkQvUC9TKERhdGEvUGFyaXR5L1N0b3ApIGZvcm1hdCINCisgKiAtIFBhcmFtIHR5cGUgOiBccmVmIFVBUlRfRFBTX0ZPUk1BVCAqDQorICogLSBQYXJhbSB1c2FnZSA6IHVhcnQgZHBzIGZvcm1hdCBpbmNsdWRpbmcgZGF0YWJpdHMsIHBhcml0eSBhbmQgc3RvcGJpdHMNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfRFBTX0ZPUk1BVCAgICAgICAgIERFVl9TRVRfU1lTQ01EKDkpDQorLyoqDQorICogU2V0IHVhcnQgZGV2aWNlIFxyZWYgZGV2X3VhcnRfaW5mbzo6aHdmYyAiaGFyZHdhcmUgZmxvdyBjb250cm9sIg0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgVUFSVF9IV19GTE9XX0NPTlRST0wNCisgKiAtIFBhcmFtIHVzYWdlIDogdWFydCBkcHMgZm9ybWF0IGluY2x1ZGluZyBkYXRhYml0cywgcGFyaXR5IGFuZCBzdG9wYml0cw0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9IV0ZDICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxMCkNCisvKioNCisgKiBTZXQgXHJlZiBkZXZfdWFydF9jYnM6OnR4X2NiICJ1YXJ0IHRyYW5zbWl0IHN1Y2Nlc3MgY2FsbGJhY2siIGZ1bmN0aW9uDQorICogd2hlbiBhbGwgcmVxdWlyZWQgYnl0ZXMgYXJlIHRyYW5zbWl0dGVkIGZvciBpbnRlcnJ1cHQgbWV0aG9kDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfQ0FMTEJBQ0sgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHRyYW5zbWl0IHN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHVhcnQNCisgKiAtIFJldHVybiB2YWx1ZSBleHBsYW5hdGlvbiA6DQorICovDQorI2RlZmluZSBVQVJUX0NNRF9TRVRfVFhDQiAgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMTEpDQorLyoqDQorICogU2V0IFxyZWYgZGV2X3VhcnRfY2JzOjpyeF9jYiAidWFydCByZWNlaXZlIHN1Y2Nlc3MgY2FsbGJhY2siIGZ1bmN0aW9uDQorICogd2hlbiBhbGwgcmVxdWlyZWQgYnl0ZXMgYXJlIHJlY2VpdmVkIGZvciBpbnRlcnJ1cHQgbWV0aG9kDQorICogLSBQYXJhbSB0eXBlIDogXHJlZiBERVZfQ0FMTEJBQ0sgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IHJlY2VpdmUgc3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdWFydA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9SWENCICAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxMikNCisvKioNCisgKiBTZXQgXHJlZiBkZXZfdWFydF9jYnM6OmVycl9jYiAidWFydCB0cmFuc2ZlciBlcnJvciBjYWxsYmFjayIgZnVuY3Rpb24NCisgKiB3aGVuIHNvbWV0aGluZyBlcnJvciBoYXBwZW5lZCBmb3IgaW50ZXJydXB0IG1ldGhvZA0KKyAqIC0gUGFyYW0gdHlwZSA6IFxyZWYgREVWX0NBTExCQUNLICogb3IgTlVMTA0KKyAqIC0gUGFyYW0gdXNhZ2UgOiB0cmFuc2ZlciBlcnJvciBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdWFydA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9FUlJDQiAgICAgICAgICBERVZfU0VUX1NZU0NNRCgxMykNCisvKioNCisgKiBTZXQgdHJhbnNtaXQgYnVmZmVyIHZpYSBpbnRlcnJ1cHQsIGFuZCBpdCB3aWxsIHNldCBccmVmIGRldl91YXJ0X2luZm86OnR4X2J1ZiAidHhfYnVmIg0KKyAqIC0gUGFyYW0gdHlwZSA6IERFVl9CVUZGRVIgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IGJ1ZmZlciBzdHJ1Y3R1cmUgcG9pbnRlciwgaWYgcGFyYW0gaXMgTlVMTCwgdGhlbiBpdCB3aWxsIHNldCB0eF9idWYgdG8gTlVMTA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9UWElOVF9CVUYgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMTQpDQorLyoqDQorICogU2V0IHJlY2VpdmUgYnVmZmVyIHZpYSBpbnRlcnJ1cHQsIGFuZCBpdCB3aWxsIHNldCBccmVmIGRldl91YXJ0X2luZm86OnJ4X2J1ZiAicnhfYnVmIg0KKyAqIC0gUGFyYW0gdHlwZSA6IERFVl9CVUZGRVIgKiBvciBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6IGJ1ZmZlciBzdHJ1Y3R1cmUgcG9pbnRlciwgaWYgcGFyYW0gaXMgTlVMTCwgdGhlbiBpdCB3aWxsIHNldCByeF9idWYgdG8gTlVMTA0KKyAqIC0gUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uIDoNCisgKi8NCisjZGVmaW5lIFVBUlRfQ01EX1NFVF9SWElOVF9CVUYgICAgICAgICAgREVWX1NFVF9TWVNDTUQoMTUpDQorLyoqDQorICogRW5hYmxlIG9yIGRpc2FibGUgdHJhbnNtaXQgaW50ZXJydXB0DQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogZW5hYmxlKG5vbmUtemVybykgb3IgZGlzYWJsZSh6ZXJvKSBmbGFnDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfU0VUX1RYSU5UICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDE2KQ0KKy8qKg0KKyAqIEVuYWJsZSBvciBkaXNhYmxlIHJlY2VpdmUgaW50ZXJydXB0DQorICogLSBQYXJhbSB0eXBlIDogdWludDMyX3QNCisgKiAtIFBhcmFtIHVzYWdlIDogZW5hYmxlKG5vbmUtemVybykgb3IgZGlzYWJsZSh6ZXJvKSBmbGFnDQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfU0VUX1JYSU5UICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDE3KQ0KKy8qKg0KKyAqIEFib3J0IGN1cnJlbnQgaW50ZXJydXB0IHRyYW5zbWl0IG9wZXJhdGlvbiBpZiB0eCBpbnRlcnJ1cHQgZW5hYmxlZCwNCisgKiBpdCB3aWxsIGRpc2FibGUgdHJhbnNtaXQgaW50ZXJydXB0LCBhbmQgc2V0IFxyZWYgREVWX0lOX1RYX0FCUlQNCisgKiBpbiBccmVmIGRldl91YXJ0X2luZm86OnN0YXR1cyAic3RhdHVzIiB2YXJpYWJsZSwNCisgKiBhbmQgY2FsbCB0aGUgdHJhbnNtaXQgY2FsbGJhY2sgZnVuY3Rpb24sIHdoZW4gdHggY2FsbGJhY2sgaXMgZmluaXNoZWQsDQorICogaXQgd2lsbCBjbGVhciBccmVmIERFVl9JTl9UWF9BQlJUIGFuZCByZXR1cm4NCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfQUJPUlRfVFggICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDE4KQ0KKy8qKg0KKyAqIEFib3J0IGN1cnJlbnQgaW50ZXJydXB0IHJlY2VpdmUgb3BlcmF0aW9uIGlmIHJ4IGludGVycnVwdCBlbmFibGVkLA0KKyAqIGl0IHdpbGwgZGlzYWJsZSByZWNlaXZlIGludGVycnVwdCwgYW5kIHNldCBccmVmIERFVl9JTl9UWF9BQlJUDQorICogaW4gXHJlZiBkZXZfdWFydF9pbmZvOjpzdGF0dXMgInN0YXR1cyIgdmFyaWFibGUsDQorICogYW5kIGNhbGwgdGhlIHJlY2VpdmUgY2FsbGJhY2sgZnVuY3Rpb24sIHdoZW4gcnggY2FsbGJhY2sgaXMgZmluaXNoZWQsDQorICogaXQgd2lsbCBjbGVhciBccmVmIERFVl9JTl9UWF9BQlJUIGFuZCByZXR1cm4NCisgKiAtIFBhcmFtIHR5cGUgOiBOVUxMDQorICogLSBQYXJhbSB1c2FnZSA6DQorICogLSBSZXR1cm4gdmFsdWUgZXhwbGFuYXRpb24gOg0KKyAqLw0KKyNkZWZpbmUgVUFSVF9DTURfQUJPUlRfUlggICAgICAgICAgIERFVl9TRVRfU1lTQ01EKDE5KQ0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1VBUlRfQ0FMTEJBQ0sgICAgVUFSVCBJbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb25zDQorICogXGluZ3JvdXAgREVWSUNFX0hBTF9VQVJUDQorICogXGJyaWVmICAgY2FsbGJhY2sgZnVuY3Rpb24gc3RydWN0dXJlIGZvciBVQVJUIGRldmljZQ0KKyAqIEB7DQorICovDQordHlwZWRlZiBzdHJ1Y3QgZGV2X3VhcnRfY2JzDQorew0KKyAgICBERVZfQ0FMTEJBQ0sgdHhfY2I7IC8qITwgdWFydCBkYXRhIHRyYW5zbWl0IHN1Y2Nlc3MgcmVxdWlyZWQgYnl0ZXMgY2FsbGJhY2sgKi8NCisgICAgREVWX0NBTExCQUNLIHJ4X2NiOyAvKiE8IHVhcnQgZGF0YSByZWNlaXZlIHN1Y2Nlc3MgcmVxdWlyZWQgYnl0ZXMgY2FsbGJhY2sgKi8NCisgICAgREVWX0NBTExCQUNLIGVycl9jYjsgICAgLyohPCB1YXJ0IGVycm9yIGNhbGxiYWNrICovDQorfSBERVZfVUFSVF9DQlMsICpERVZfVUFSVF9DQlNfUFRSOw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxkZWZncm91cCAgICBERVZJQ0VfSEFMX1VBUlRfREVWU1RSVUNUICAgVUFSVCBEZXZpY2UgSW50ZXJmYWNlIERlZmluaXRpb24NCisgKiBcaW5ncm91cCBERVZJQ0VfSEFMX1VBUlQNCisgKiBcYnJpZWYgICBDb250YWlucyBkZWZpbml0aW9ucyBvZiB1YXJ0IGRldmljZSBpbnRlcmZhY2Ugc3RydWN0dXJlLg0KKyAqIFxkZXRhaWxzIFRoaXMgc3RydWN0dXJlIHdpbGwgYmUgdXNlZCBpbiB1c2VyIGltcGxlbWVudGVkIGNvZGUsIHdoaWNoIHdhcyBjYWxsZWQNCisgKiAgICAgXHJlZiBERVZJQ0VfSU1QTCAiRGV2aWNlIERyaXZlciBJbXBsZW1lbnQgTGF5ZXIiIGZvciB1YXJ0IHRvIHVzZSBpbiBpbXBsZW1lbnRhdGlvbiBjb2RlLg0KKyAqICAgICBBcHBsaWNhdGlvbiBkZXZlbG9wZXIgc2hvdWxkIHVzZSB0aGUgVUFSVCBBUEkgcHJvdmlkZWQgaGVyZSB0byBhY2Nlc3MgdG8gVUFSVCBkZXZpY2VzLg0KKyAqICAgICBCU1AgZGV2ZWxvcGVyIHNob3VsZCBmb2xsb3cgdGhlIEFQSSBkZWZpbml0aW9uIHRvIGltcGxlbWVudCBVQVJUIGRldmljZSBkcml2ZXJzLg0KKyAqIEB7DQorICovDQorLyoqDQorICogXGJyaWVmICAgVUFSVCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZGVmaW5pdGlvbg0KKyAqIFxkZXRhaWxzIGluZm9ybWF0aW9ucyBhYm91dCB1YXJ0IG9wZW4gY291bnQsIHdvcmtpbmcgc3RhdHVzLA0KKyAqICAgICBiYXVkcmF0ZSwgdWFydCByZWdpc3RlcnMgYW5kIGN0cmwgc3RydWN0dXJlLCB1YXJ0IGRwcyBmb3JtYXQNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfdWFydF9pbmZvDQorew0KKyAgICB2b2lkICp1YXJ0X2N0cmw7ICAgIC8qITwgdWFydCBjb250cm9sIHJlbGF0ZWQgcG9pbnRlciwgaW1wbGVtZW50ZWQgYnkgYnNwIGRldmVsb3BlciwgYW5kIHRoaXMgc2hvdWxkIGJlIHNldCBkdXJpbmcgdWFydCBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8NCisgICAgdWludDMyX3Qgb3BuX2NudDsgICAvKiE8IHVhcnQgb3BlbiBjb3VudCwgb3BlbiBpdCB3aWxsIGluY3JlYXNlIDEsIGNsb3NlIGl0IHdpbGwgZGVjcmVhc2UgMSwgMCBmb3IgY2xvc2UsID4wIGZvciBvcGVuICovDQorICAgIHVpbnQzMl90IHN0YXR1czsgICAgLyohPCBjdXJyZW50IHdvcmtpbmcgc3RhdHVzLCByZWZlciB0byBccmVmIERFVklDRV9IQUxfQ09NTU9OX0RFVlNUQVRVUywgdGhpcyBzaG91bGQgYmUgXHJlZiBERVZfRU5BQkxFRCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICB1aW50MzJfdCBiYXVkcmF0ZTsgIC8qITwgdWFydCBiYXVkIHJhdGUsIHRoaXMgc2hvdWxkIGJlIHRoZSB2YWx1ZSBvZiBiYXVkIHBhc3NpbmcgYnkgdWFydF9vcGVuIGlmIGZpcnN0IHN1Y2Nlc3NmdWxseSBvcGVuZWQgKi8NCisgICAgVUFSVF9EUFNfRk9STUFUDQorICAgIGRwc19mb3JtYXQ7IC8qITwgRC9QL1MgZm9ybWF0IHNldHRpbmdzIGZvciB1YXJ0IGRldmljZSwgaGVyZSBpcyBccmVmIGRwc19mb3JtYXRfZGVmYXVsdCAiZGVmYXVsdCBzZXR0aW5ncyBmb3IgZmlyc3Qgb3BlbiIgKi8NCisgICAgVUFSVF9IV19GTE9XX0NPTlRST0wNCisgICAgaHdmYzsgIC8qITwgVUFSVCBoYXJkd2FyZSBmbG93IGNvbnRyb2wsIGhlcmUgaXMgXHJlZiBod2ZjX2RlZmF1bHQgImRlZmF1bHQgaGFyZHdhcmUgZmxvdyBjb250cm9sIHNldHRpbmdzIGZvciBmaXJzdCBvcGVuIiAqLw0KKyAgICBERVZfQlVGRkVSIHR4X2J1ZjsgIC8qITwgdHJhbnNtaXQgYnVmZmVyIHZpYSBpbnRlcnJ1cHQsIHRoaXMgc2hvdWxkIGJlIGFsbCB6ZXJvIGZvciBmaXJzdCBvcGVuICovDQorICAgIERFVl9CVUZGRVIgcnhfYnVmOyAgLyohPCByZWNlaXZlIGJ1ZmZlciB2aWEgaW50ZXJydXB0LCB0aGlzIHNob3VsZCBiZSBhbGwgemVybyBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICBERVZfVUFSVF9DQlMNCisgICAgdWFydF9jYnM7ICAvKiE8IHVhcnQgY2FsbGJhY2tzLCBjYWxsYmFjayBhcmd1bWVudHMgc2hvdWxkIGJlIFxyZWYgREVWX1VBUlQgKiBvciBOVUxMLCB0aGlzIHNob3VsZCBiZSBhbGwgTlVMTCBmb3IgZmlyc3Qgb3BlbiAqLw0KKyAgICB2b2lkICpleHRyYTsgICAgICAgIC8qITwgYSBleHRyYSBwb2ludGVyIHRvIGdldCBob29rIHRvIGFwcGxpY2F0aW9ucyB3aGljaCBzaG91bGQgbm90IHVzZWQgYnkgYnNwIGRldmVsb3BlciwNCisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2hvdWxkIGJlIE5VTEwgZm9yIGZpcnN0IG9wZW4gYW5kIHlvdSBjYW4gXHJlZiBERVZfVUFSVF9JTkZPX1NFVF9FWFRSQV9PQkpFQ1QgInNldCINCisgICAgICAgICAgICAgICAgICAgIG9yIFxyZWYgREVWX1VBUlRfSU5GT19HRVRfRVhUUkFfT0JKRUNUICJnZXQiIHRoZSBleHRyYSBpbmZvcm1hdGlvbiBwb2ludGVyICovDQorfSBERVZfVUFSVF9JTkZPLCAqIERFVl9VQVJUX0lORk9fUFRSOw0KKw0KKy8qKiBTZXQgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciBvZiB1YXJ0IGluZm8gKi8NCisjZGVmaW5lIERFVl9VQVJUX0lORk9fU0VUX0VYVFJBX09CSkVDVCh1YXJ0X2luZm9fcHRyLCBleHRyYV9pbmZvKSAgICh1YXJ0X2luZm9fcHRyKS0+ZXh0cmEgPSAodm9pZCAqKShleHRyYV9pbmZvKQ0KKy8qKiBHZXQgZXh0cmEgaW5mb3JtYXRpb24gcG9pbnRlciBvZiB1YXJ0IGluZm8gKi8NCisjZGVmaW5lIERFVl9VQVJUX0lORk9fR0VUX0VYVFJBX09CSkVDVCh1YXJ0X2luZm9fcHRyKSAgICAgICAgICAgKCh1YXJ0X2luZm9fcHRyKS0+ZXh0cmEpDQorDQorLyoqDQorICogXGJyaWVmICAgVUFSVCBkZXZpY2UgaW50ZXJmYWNlIGRlZmluaXRpb24NCisgKiBcZGV0YWlscyBEZWZpbmUgdWFydCBkZXZpY2UgaW50ZXJmYWNlLCBsaWtlIHVhcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlLA0KKyAqICBwcm92aWRlIGZ1bmN0aW9ucyB0byBvcGVuL2Nsb3NlL2NvbnRyb2wgdWFydCwgc2VuZC9yZWNlaXZlIGRhdGEgYnkgdWFydA0KKyAqIFxub3RlICAgIEFsbCB0aGlzIGRldGFpbHMgYXJlIGltcGxlbWVudGVkIGJ5IHVzZXIgaW4gdXNlciBwb3J0aW5nIGNvZGUNCisgKi8NCit0eXBlZGVmIHN0cnVjdCBkZXZfdWFydA0KK3sNCisgICAgREVWX1VBUlRfSU5GTyB1YXJ0X2luZm87ICAgICAgICAgICAgICAgIC8qITwgVUFSVCBkZXZpY2UgaW5mb3JtYXRpb24gKi8NCisgICAgaW50MzJfdCAoKnVhcnRfb3BlbikodWludDMyX3QgYmF1ZCk7ICAgICAgICAgICAgLyohPCBPcGVuIHVhcnQgZGV2aWNlICovDQorICAgIGludDMyX3QgKCp1YXJ0X2Nsb3NlKSh2b2lkKTsgICAgICAgICAgICAgICAgLyohPCBDbG9zZSB1YXJ0IGRldmljZSAqLw0KKyAgICBpbnQzMl90ICgqdWFydF9jb250cm9sKSh1aW50MzJfdCBjdHJsX2NtZCwgdm9pZCAqcGFyYW0pOyAgICAvKiE8IENvbnRyb2wgdWFydCBkZXZpY2UgKi8NCisgICAgaW50MzJfdCAoKnVhcnRfd3JpdGUpKGNvbnN0IHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbik7ICAvKiE8IFNlbmQgZGF0YSBieSB1YXJ0IGRldmljZShibG9ja2VkKSAqLw0KKyAgICBpbnQzMl90ICgqdWFydF9yZWFkKSh2b2lkICpkYXRhLCB1aW50MzJfdCBsZW4pOyAgICAgLyohPCBSZWFkIGRhdGEgZnJvbSB1YXJ0IGRldmljZShibG9ja2VkKSAqLw0KK30gREVWX1VBUlQsICogREVWX1VBUlRfUFRSOw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3VhcnQ6OnVhcnRfb3BlbikgKHVpbnQzMl90IGJhdWQpDQorICogXGRldGFpbHMgb3BlbiBhbiB1YXJ0IGRldmljZSB3aXRoIGRlZmluZWQgYmF1ZHJhdGUNCisgKiBccGFyYW1baW5dICAgYmF1ZCAgICBccmVmIERFVklDRV9IQUxfVUFSVF9CQVVEICJpbml0aWFsIGJhdWRyYXRlIG9mIHVhcnQiLCBtdXN0ID4gMA0KKyAqIFxyZXR2YWwgIEVfT0sgICAgT3BlbiBzdWNjZXNzZnVsbHkgd2l0aG91dCBhbnkgaXNzdWVzDQorICogXHJldHZhbCAgRV9PUE5FRCBJZiBkZXZpY2Ugd2FzIG9wZW5lZCBiZWZvcmUgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycywNCisgKiAgICAgICAgICB0aGVuIGp1c3QgaW5jcmVhc2UgdGhlIFxyZWYgZGV2X3VhcnRfaW5mbzo6b3BuX2NudCAib3BuX2NudCIgYW5kIHJldHVybiBccmVmIEVfT1BORUQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9OT1NQVCBPcGVuIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkDQorICovDQorDQorLyoqDQorICogXGZuICAgICAgaW50MzJfdCAoKiBkZXZfdWFydDo6dWFydF9jbG9zZSkgKHZvaWQpDQorICogXGRldGFpbHMgY2xvc2UgYW4gdWFydCBkZXZpY2UsIGp1c3QgZGVjcmVhc2UgdGhlIFxyZWYgZGV2X3VhcnRfaW5mbzo6b3BuX2NudCAib3BuX2NudCIsDQorICogICAgICBpZiBccmVmIGRldl91YXJ0X2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGVxdWFscyAwLCB0aGVuIGNsb3NlIHRoZSBkZXZpY2UNCisgKiBccmV0dmFsICBFX09LICAgIENsb3NlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSBpc3N1ZXMoaW5jbHVkaW5nIHNjZW5hcmlvIHRoYXQgZGV2aWNlIGlzIGFscmVhZHkgY2xvc2VkKQ0KKyAqIFxyZXR2YWwgIEVfT1BORUQgRGV2aWNlIGlzIHN0aWxsIG9wZW5lZCwgdGhlIGRldmljZSBccmVmIGRldl91YXJ0X2luZm86Om9wbl9jbnQgIm9wbl9jbnQiIGRlY3JlYXNlZCBieSAxDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3VhcnQ6OnVhcnRfY29udHJvbCkgKHVpbnQzMl90IGN0cmxfY21kLCB2b2lkICpwYXJhbSkNCisgKiBcZGV0YWlscyBjb250cm9sIGFuIHVhcnQgZGV2aWNlIGJ5IFxyZWYgY3RybF9jbWQsIHdpdGggcGFzc2VkIFxyZWYgcGFyYW0uDQorICogIHlvdSBjYW4gY29udHJvbCB1YXJ0IGRldmljZSB1c2luZyBwcmVkZWZpbmVkIHVhcnQgY29udHJvbCBjb21tYW5kcyBkZWZpbmVkIHVzaW5nIFxyZWYgREVWX1NFVF9TWVNDTUQNCisgKiAgKHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYnNwIGRldmVsb3BlciksIHN1Y2ggYXMgXHJlZiBVQVJUX0NNRF9TRVRfQkFVRCAiY2hhbmdlIGJhdWRyYXRlIiwNCisgKiAgXHJlZiBVQVJUX0NNRF9GTFVTSF9PVVRQVVQgImZsdXNoIG91dHB1dCIgYW5kIFxyZWYgREVWSUNFX0hBTF9VQVJUX0NUUkxDTUQgIm1vcmUiLg0KKyAqICBBbmQgeW91IGNhbiBhbHNvIGNvbnRyb2wgdWFydCBkZXZpY2UgdXNpbmcgeW91ciBvd24gc3BlY2lmaWVkIGNvbW1hbmRzIGRlZmluZWQgdXNpbmcgXHJlZiBERVZfU0VUX1VTUkNNRCwNCisgKiAgYnV0IHRoZXNlIHNwZWNpZmllZCBjb21tYW5kcyBzaG91bGQgYmUgZGVmaW5lZCBpbiB5b3VyIG93biB1YXJ0IGRldmljZSBkcml2ZXIgaW1wbGVtZW50YXRpb24uDQorICogXHBhcmFtW2luXSAgICAgICBjdHJsX2NtZCAgICBccmVmIERFVklDRV9IQUxfVUFSVF9DVFJMQ01EICJjb250cm9sIGNvbW1hbmQiLCB0byBjaGFuZ2Ugb3IgZ2V0IHNvbWUgdGhpbmcgcmVsYXRlZCB0byB1YXJ0DQorICogXHBhcmFtW2luLG91dF0gICBwYXJhbSAgICAgICBwYXJhbWV0ZXJzIHRoYXQgbWF5YmUgYXJndW1lbnQgb2YgdGhlIGNvbW1hbmQsIG9yIHJldHVybiB2YWx1ZXMgb2YgdGhlIGNvbW1hbmQNCisgKiBccmV0dmFsICBFX09LICAgIENvbnRyb2wgZGV2aWNlIHN1Y2Nlc3NmdWxseQ0KKyAqIFxyZXR2YWwgIEVfQ0xTRUQgRGV2aWNlIGlzIG5vdCBvcGVuZWQNCisgKiBccmV0dmFsICBFX09CSiAgIERldmljZSBvYmplY3QgaXMgbm90IHZhbGlkIG9yIG5vdCBleGlzdHMNCisgKiBccmV0dmFsICBFX1BBUiAgIFBhcmFtZXRlciBpcyBub3QgdmFsaWQgZm9yIGN1cnJlbnQgY29udHJvbCBjb21tYW5kDQorICogXHJldHZhbCAgRV9TWVMgICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBoYXJkd2FyZSBpc3N1ZXMsIHN1Y2ggYXMgZGV2aWNlIGlzIGRpc2FibGVkDQorICogXHJldHZhbCAgRV9DVFggICBDb250cm9sIGRldmljZSBmYWlsZWQsIGR1ZSB0byBkaWZmZXJlbnQgcmVhc29ucyBsaWtlIGluIHRyYW5zZmVyIHN0YXRlDQorICogXHJldHZhbCAgRV9OT1NQVCBDb250cm9sIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBvciBub3QgdmFsaWQNCisgKi8NCisNCisvKioNCisgKiBcZm4gICAgICBpbnQzMl90ICgqIGRldl91YXJ0Ojp1YXJ0X3dyaXRlKSAoY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgbGVuKQ0KKyAqIFxkZXRhaWxzIHNlbmQgXHJlZiBkYXRhIHRocm91Z2ggdWFydCB3aXRoIGRlZmluZWQgXHJlZiBsZW4oYmxvY2tlZCkuDQorICogXHBhcmFtW2luXSAgIGRhdGEgICAgcG9pbnRlciB0byBkYXRhIG5lZWQgdG8gc2VuZCBieSB1YXJ0LCBtdXN0IG5vdCBiZSBOVUxMDQorICogXHBhcmFtW2luXSAgIGxlbiBsZW5ndGggb2YgZGF0YSB0byBiZSBzZW50LCBtdXN0ID4gMA0KKyAqIFxyZXR2YWwgID4wICBCeXRlIGNvdW50IHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBzZW50IGZvciBwb2xsIG1ldGhvZA0KKyAqIFxyZXR2YWwgIEVfT0JKICAgRGV2aWNlIG9iamVjdCBpcyBub3QgdmFsaWQgb3Igbm90IGV4aXN0cw0KKyAqIFxyZXR2YWwgIEVfUEFSICAgUGFyYW1ldGVyIGlzIG5vdCB2YWxpZA0KKyAqIFxyZXR2YWwgIEVfU1lTICAgQ2FuJ3Qgd3JpdGUgZGF0YSB0byBoYXJkd2FyZSBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqLw0KKw0KKy8qKg0KKyAqIFxmbiAgICAgIGludDMyX3QgKCogZGV2X3VhcnQ6OnVhcnRfcmVhZCkgKHZvaWQgKmRhdGEsIHVpbnQzMl90IGxlbikNCisgKiBcZGV0YWlscyByZWNlaXZlIFxyZWYgZGF0YSBvZiBkZWZpbmVkIFxyZWYgbGVuIHRocm91Z2ggdWFydChibG9ja2VkKS4NCisgKiBccGFyYW1bb3V0XSAgZGF0YSAgICBwb2ludGVyIHRvIGRhdGEgbmVlZCB0byByZWNlaXZlZCBieSB1YXJ0LCBtdXN0IG5vdCBiZSBOVUxMDQorICogXHBhcmFtW2luXSAgIGxlbiBsZW5ndGggb2YgZGF0YSB0byBiZSByZWNlaXZlZCwgbXVzdCA+IDANCisgKiBccmV0dmFsICA+MCAgQnl0ZSBjb3VudCB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZm9yIHBvbGwgbWV0aG9kDQorICogXHJldHZhbCAgRV9PQkogICBEZXZpY2Ugb2JqZWN0IGlzIG5vdCB2YWxpZCBvciBub3QgZXhpc3RzDQorICogXHJldHZhbCAgRV9QQVIgICBQYXJhbWV0ZXIgaXMgbm90IHZhbGlkDQorICogXHJldHZhbCAgRV9TWVMgICBDYW4ndCByZWNlaXZlIGRhdGEgZnJvbSBoYXJkd2FyZSBkdWUgdG8gaGFyZHdhcmUgaXNzdWVzLCBzdWNoIGFzIGRldmljZSBpcyBkaXNhYmxlZA0KKyAqLw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxicmllZiAgIGdldCBhbiBccmVmIGRldl91YXJ0ICJ1YXJ0IGRldmljZSIgYnkgdWFydCBkZXZpY2UgaWQuDQorICogIEZvciBob3cgdG8gdXNlIHVhcnQgZGV2aWNlIGhhbCByZWZlciB0byBccmVmIERFVklDRV9IQUxfVUFSVF9ERVZTVFJVQ1QgIkZ1bmN0aW9ucyBpbiB1YXJ0IGRldmljZSBzdHJ1Y3R1cmUiDQorICogXHBhcmFtW2luXSAgIHVhcnRfaWQgaWQgb2YgdWFydCwgZGVmaW5lZCBieSB1c2VyDQorICogXHJldHZhbCAgIU5VTEwgICBwb2ludGVyIHRvIGFuIFxyZWYgZGV2X3VhcnQgInVhcnQgZGV2aWNlIHN0cnVjdHVyZSINCisgKiBccmV0dmFsICBOVUxMICAgIGZhaWxlZCB0byBmaW5kIHRoZSB1YXJ0IGRldmljZSBieSBccmVmIHVhcnRfaWQNCisgKiBcbm90ZSAgICBuZWVkIHRvIGltcGxlbWVudGVkIGJ5IHVzZXIgaW4gdXNlciBjb2RlDQorICovDQorZXh0ZXJuIERFVl9VQVJUX1BUUiB1YXJ0X2dldF9kZXYoaW50MzJfdCB1YXJ0X2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorLyoqIEB9ICovDQorI2VuZGlmIC8qIF9ERVZJQ0VfSEFMX1VBUlRfSF8gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZW1iQVJDX0JTUF9jb25maWcuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9lbWJBUkNfQlNQX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3MmNmMGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvZW1iQVJDX0JTUF9jb25maWcuaApAQCAtMCwwICsxLDgzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTEyLTI1DQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBDT01NT05fQ09ORklHDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgdG8gZGVmaW5lIGNvbW1vbiBkZWZpbml0aW9ucyBlcnJvciBtYW5hZ2VtZW50DQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIENPTU1PTl9DT05GSUcNCisgKiBAew0KKyAqLw0KKw0KKyNpZm5kZWYgX0NPTU1PTl9DT05GSUdfSF8NCisjZGVmaW5lIF9DT01NT05fQ09ORklHX0hfDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmluZSBCT0FSRF9FTVNLDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBCU1AgRGVmaW5pdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKg0KKyAqICBUb29sY2hhaW4gRGVmaW5pdGlvbiBmb3IgTWV0YVdhcmUgb3IgR05VDQorICovDQorLy8gI2RlZmluZSBfX01XX18NCisjZGVmaW5lIF9fR05VX18NCisjZGVmaW5lIF9IQVZFX0xJQkdMT1NTXw0KKw0KKy8qKg0KKyAqICBVc2UgdGFza19tYWluIGluIGVtYkFSQyBTdGFydHVwIHByb2Nlc3MuIFNlZSBib2FyZC9ib2FyZC5jIGZvciBkZXRhaWxzLg0KKyAqLw0KKyNkZWZpbmUgRU1CQVJDX1VTRV9CT0FSRF9NQUlODQorDQorLyoqDQorICogIE11c3QgYmUgc2V0Lg0KKyAqICBJZiBjaGFuZ2VkLCBtb2RpZnkgLmxjZiBmaWxlIGZvcg0KKyAqICAuc3RhY2sgQUxJR04oNCkgU0laRSg1MjQyODgpOiB7fQ0KKyAqICAuaGVhcD8gQUxJR04oNCkgU0laRSg1MjQyODgpOiB7fQ0KKyAqLw0KKyNkZWZpbmUgX1NUQUNLU0laRSAgICAgICAgICA1MjQyODgNCisjZGVmaW5lIF9IRUFQU1ogICAgICAgICAgICAgNTI0Mjg4DQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfQ09NTU9OX0NPTkZJR19IXyAqLw0KKy8qKiBAfSBlbmQgb2YgZ3JvdXAgQ09NTU9OX0NPTkZJRyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyYy5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjN2FlOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyYy5oCkBAIC0wLDAgKzEsNDM2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTIwDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX0NPUkVfQ09NTQ0KKyAqIFxicmllZiAgaGVhZGVyIGZpbGUgaW5jbHVkaW5nIGNvbW1vbiBjb3JlIGRlZmluaXRpb25zDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQVJDX0hBTF9DT1JFX0NPTU0NCisgKiBAew0KKyAqLw0KKw0KKw0KKyNpZm5kZWYgX0FSQ19IQUxfQ09SRV9IXw0KKyNkZWZpbmUgX0FSQ19IQUxfQ09SRV9IXw0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19mZWF0dXJlX2NvbmZpZy5oIg0KKw0KKy8qKg0KKyAqIFxuYW1lIGV4Y2VwdGlvbiBudW1iZXIgZGVmaW5pdGlvbnMNCisgKiBAew0KKyAqLw0KKw0KKy8qIEFSQyBleGNlcHRpb24gbnVtYmVyICovDQorI2RlZmluZSBFWENfTk9fUkVTRVQgICAgICAgICAgICAoMCkgLyohPCByZXNldCB2ZWN0b3IsIHRoZSBlbnRyeSBvZiBwb3dlciB1cCBhbmQgcmVzZXQgKi8NCisjZGVmaW5lIEVYQ19OT19NRU1fRVJSICAgICAgICAgICgxKSAvKiE8IGV4dGVybmFsIG1lbW9yeSBidXMgZXJyb3IgKi8NCisjZGVmaW5lIEVYQ19OT19JTlNfRVJSICAgICAgICAgICgyKSAvKiE8IGlsbGVnYWwgaW5zdHJ1Y3Rpb24gb3IgaWxsZWdhbCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSAqLw0KKyNkZWZpbmUgRVhDX05PX01BQ19DSEsgICAgICAgICAgKDMpIC8qITwgbWFjaGluZSBjaGVjayBlcnJvciAqLw0KKyNkZWZpbmUgRVhDX05PX1RMQl9NSVNTX0kgICAgICAgKDQpIC8qITwgaW5zdHJ1Y3Rpb24gVExCIG1pc3NpbmcgZXhjZXB0aW9uLCB1c2VsZXNzIHdpdGhvdXQgTU1VICovDQorI2RlZmluZSBFWENfTk9fVExCX01JU1NfRCAgICAgICAoNSkgLyohPCBkYXRhIFRMQiBtaXNzaW5nIGV4Y2VwdGlvbiwgdXNlbGVzcyB3aXRob3V0IE1NVSAqLw0KKyNkZWZpbmUgRVhDX05PX1BST19WSU8gICAgICAgICAgKDYpIC8qITwgcHJvdGVjdGlvbiB2aW9sYXRpb24gKi8NCisjZGVmaW5lIEVYQ19OT19QUklfVklPICAgICAgICAgICg3KSAvKiE8IHByaXZpbGVnZSB2aW9sYXRpb24gKi8NCisjZGVmaW5lIEVYQ19OT19TV0kgICAgICAgICAgKDgpIC8qITwgc29mdHdhcmUgaW50ZXJydXB0ICovDQorI2RlZmluZSBFWENfTk9fVFJBUCAgICAgICAgICg5KSAvKiE8IHRyYXAgKi8NCisjZGVmaW5lIEVYQ19OT19FWFQgICAgICAgICAgKDEwKSAgICAvKiE8IGV4dGVuc2lvbiBleGNlcHRpb24gKi8NCisjZGVmaW5lIEVYQ19OT19ESVZfWkVSMCAgICAgICAgICgxMSkgICAgLyohPCBkaXZpZGUgYnkgemVybyAqLw0KKyNkZWZpbmUgRVhDX05PX0RDX0VSUiAgICAgICAgICAgKDEyKSAgICAvKiE8IGRhdGEgY2FjaGUgY29uc2lzdGVuY3kgZXJyb3IgKi8NCisjZGVmaW5lIEVYQ19OT19NQUxfQUxJR04gICAgICAgICgxMykgICAgLyohPCBtaXNhbGlnbmVkIGRhdGEgYWNjZXNzICovDQorI2RlZmluZSBFWENfTk9fUkVTRVJWRTAgICAgICAgICAoMTQpICAgIC8qITwgcmVzZXJ2ZWQgKi8NCisjZGVmaW5lIEVYQ19OT19SRVNFUlZFMSAgICAgICAgICgxNSkgICAgLyohPCByZXNlcnZlZCAqLw0KKw0KKy8qIGV4dGVuc2lvbiBpbnRlcnJ1cHRzICovDQorI2RlZmluZSBFWENfTk9fMTYgICAgICAgICAgICgxNikgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDE2ICovDQorI2RlZmluZSBFWENfTk9fMTcgICAgICAgICAgICgxNykgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDE3ICovDQorI2RlZmluZSBFWENfTk9fMTggICAgICAgICAgICgxOCkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDE4ICovDQorI2RlZmluZSBFWENfTk9fMTkgICAgICAgICAgICgxOSkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDE5ICovDQorI2RlZmluZSBFWENfTk9fMjAgICAgICAgICAgICgyMCkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDIwICovDQorI2RlZmluZSBFWENfTk9fMjEgICAgICAgICAgICgyMSkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDIxICovDQorI2RlZmluZSBFWENfTk9fMjIgICAgICAgICAgICgyMikgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDIyICovDQorI2RlZmluZSBFWENfTk9fMjMgICAgICAgICAgICgyMykgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDIzICovDQorI2RlZmluZSBFWENfTk9fMjQgICAgICAgICAgICgyNCkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDI0ICovDQorI2RlZmluZSBFWENfTk9fMjUgICAgICAgICAgICgyNSkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDI1ICovDQorI2RlZmluZSBFWENfTk9fMjYgICAgICAgICAgICgyNikgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDI2ICovDQorI2RlZmluZSBFWENfTk9fMjcgICAgICAgICAgICgyNykgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDI3ICovDQorI2RlZmluZSBFWENfTk9fMjggICAgICAgICAgICgyOCkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDI4ICovDQorI2RlZmluZSBFWENfTk9fMjkgICAgICAgICAgICgyOSkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDI5ICovDQorI2RlZmluZSBFWENfTk9fMzAgICAgICAgICAgICgzMCkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDMwICovDQorI2RlZmluZSBFWENfTk9fMzEgICAgICAgICAgICgzMSkgICAgLyohPCBpbnRlcnJ1cHQgdmVjdG9yIDMxICovDQorLyogLi4uIEFSQyBzdXBwb3J0cyAyNTUgaW50ZXJydXB0IHZlY3RvcnMgYXQgbW9zdCAqLw0KKyNkZWZpbmUgRVhDX05PXzI1NSAgICAgICAgICAoMjU1KSAgIC8qITwgaW50ZXJydXB0IHZlY3RvciAyNTUgKi8NCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBleGNlcHRpb24gdmVjdG9yIG9mZnNldA0KKyAqIEB7DQorICovDQorI2RlZmluZSBFWENfTk9fVE9fT0ZGU0VUKG5vKSAgICAobm8gPDwgMikNCisNCisvKiBBUkMgZXhjZXB0aW9uIHZlY3RvciBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfUkVTRVQgICAgICAgICgweDAwKSAgLyohPCBFWENfTk9fUkVTRVQgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX01FTV9FUlIgICAgICAoMHgwNCkgIC8qITwgRVhDX05PX01FTV9FUlIgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX0lOU19FUlIgICAgICAoMHgwOCkgIC8qITwgRVhDX05PX0lOU19FUlIgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX01BQ19DSEsgICAgICAoMHgwYykgIC8qITwgRVhDX05PX01BQ19DSEsgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX1RMQl9NSVNTX0kgICAgICAgKDB4MTApICAvKiE8IEVYQ19OT19UTEJfTUlTU19JIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9UTEJfTUlTU19EICAgICAgICgweDE0KSAgLyohPCBFWENfTk9fVExCX01JU1NfRCBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfUFJPX1ZJTyAgICAgICgweDE4KSAgLyohPCBFWENfTk9fUFJPX1ZJTyBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfUFJJX1ZJTyAgICAgICgweDFjKSAgLyohPCBFWENfTk9fUFJJX1ZJTyBvZmZzZXQgKi8NCisjZGVmaW5lIEVYQ19WRUNUT1JfU1dJICAgICAgICAgICgweDIwKSAgLyohPCBFWENfTk9fU1dJIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9UUkFQICAgICAgICAgKDB4MjQpICAvKiE8IEVYQ19OT19UUkFQIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9FWFQgICAgICAgICAgKDB4MjgpICAvKiE8IEVYQ19OT19FWFQgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX0RJVl9aRVIwICAgICAoMHgyYykgIC8qITwgRVhDX05PX0RJVl9aRVIwIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9EQ19FUlIgICAgICAgKDB4MzApICAvKiE8IEVYQ19OT19EQ19FUlIgb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX01BTF9BTElHTiAgICAgICAgKDB4MzQpICAvKiE8IEVYQ19OT19NQUxfQUxJR04gb2Zmc2V0ICovDQorI2RlZmluZSBFWENfVkVDVE9SX1JFU0VSVkUwICAgICAoMHgzOCkgIC8qITwgRVhDX05PX1JFU0VSVkUwIG9mZnNldCAqLw0KKyNkZWZpbmUgRVhDX1ZFQ1RPUl9SRVNFUlZFMSAgICAgKDB4M2MpICAvKiE8IEVYQ19OT19SRVNFUlZFMSBvZmZzZXQgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBidWlsZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9CQ1JfVkVSICAgICAgICAgKDB4NjApICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmVyc2lvbiAqLw0KKyNkZWZpbmUgQVVYX0JDUl9CVEEgICAgICAgICAoMHg2MykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgQlRBIExJTksgKi8NCisjZGVmaW5lIEFVWF9CQ1JfVkVDQkFTRSAgICAgICAgICgweDY4KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnRlcnJ1cHQgdmVjdG9yIGJhc2UgKi8NCisjZGVmaW5lIEFVWF9CQ1JfTVBVICAgICAgICAgKDB4NmQpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIG1lbW9yeSBwcm90ZWN0aW9uIHVuaXQgKi8NCisjZGVmaW5lIEFVWF9CQ1JfUkYgICAgICAgICAgKDB4NmUpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGNvcmUgcmVnaXN0ZXJzICovDQorI2RlZmluZSBBVVhfQkNSX0RfQ0FDSEUgICAgICAgICAoMHg3MikgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgZGF0YSBjYWNoZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9EQ0NNICAgICAgICAgICAgKDB4NzQpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIERDQ00gKi8NCisjZGVmaW5lIEFVWF9CQ1JfVElNRVJTICAgICAgICAgICgweDc1KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBwcm9jZXNzb3IgdGltZXJzICovDQorI2RlZmluZSBBVVhfQkNSX0FQICAgICAgICAgICgweDc2KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBhY3Rpb25wb2ludHMgKi8NCisjZGVmaW5lIEFVWF9CQ1JfSV9DQUNIRSAgICAgICAgICgweDc3KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnN0cnVjdGlvbiBjYWNoZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9JQ0NNICAgICAgICAgICAgKDB4NzgpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIElDQ00gKi8NCisjZGVmaW5lIEFVWF9CQ1JfRFNQICAgICAgICAgKDB4N2EpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIERTUCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9NVUwgICAgICAgICAoMHg3YikgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgbXVsdGlwbHkgKi8NCisjZGVmaW5lIEFVWF9CQ1JfU1dBUCAgICAgICAgICAgICgweDdjKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBzd2FwICovDQorI2RlZmluZSBBVVhfQkNSX05PUk0gICAgICAgICAgICAoMHg3ZCkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3Igbm9ybWFsaXplICovDQorI2RlZmluZSBBVVhfQkNSX01JWE1BWCAgICAgICAgICAoMHg3ZSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgTUlOL01BWCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9CQVJSRUwgICAgICAgICAgKDB4N2YpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGJhcnJlbCBzaGlmdCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9JU0EgICAgICAgICAoMHhjMSkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgSVNBIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIEFVWF9CQ1JfU1RBQ0sgICAgICAgICAgICgweGM1KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBzdGFjayByZWdpb24gKi8NCisjZGVmaW5lIEFVWF9CQ1JfRVJQICAgICAgICAgKDB4YzcpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGVycm9yIHByb3RlY3Rpb24gKi8NCisjZGVmaW5lIEFVWF9CQ1JfRlBVICAgICAgICAgKDB4YzgpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGZsb2F0aW5nLXBvaW50IHVuaXQgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ1BPUlQgICAgICAgICAgICgweGM5KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBjb2RlIHByb3RlY3Rpb24gKi8NCisjZGVmaW5lIEFVWF9CQ1JfQlMgICAgICAgICAgKDB4Y2IpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGJpdHN0cmVhbSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9BR1UgICAgICAgICAoMHhjYykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYWRkcmVzcyBnZW5lcmF0ZSB1bml0ICovDQorI2RlZmluZSBBVVhfQkNSX0RNQUMgICAgICAgICAgICAoMHhjZCkgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgRE1BICovDQorI2RlZmluZSBBVVhfQkNSX0NPTk5FQ1RfU1lTVEVNICAgICAgKDB4ZDApICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGFyYyBjb25uZWN0ICovDQorI2RlZmluZSBBVVhfQkNSX0NPTk5FQ1RfU0VNQSAgICAgICAgKDB4ZDEpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGludGVyLWNvcmUgc2VtYXBob3JlICovDQorI2RlZmluZSBBVVhfQkNSX0NPTk5FQ1RfTUVTU0FHRSAgICAgKDB4ZDIpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGludGVyLWNvZGUgbWVzc2FnZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DT05ORUNUX1BNVSAgICAgKDB4ZDMpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHBvd2VyIG1hbmFnZW1lbnQgdW5pdCAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DT05ORUNUX0dGUkMgICAgICAgICgweGQ2KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBnbG9iYWwgZnJlZSBydW5uaW5nIGNvdW50ZXIgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ0FMX1NUT1JFICAgICAgICgweGQ5KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBjYWxpYnJhdGlvbiBwYXJhbWV0ZXIgc3RvcmFnZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DT05ORUNUX0lDSSAgICAgKDB4ZTApICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGludGVyLWNvcmUgaW50ZXJydXB0IHVuaXQgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ09OTkVDVF9JQ0QgICAgICgweGUxKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBpbnRlci1jb3JlIGRlYnVnIHVuaXQgKi8NCisjZGVmaW5lIEFVWF9CQ1JfQ09OTkVDVF9QRE0gICAgICgweGUzKSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBwb3dlciBkb21haW4gbWFuYWdlbWVudCB1bml0Ki8NCisjZGVmaW5lIEFVWF9CQ1JfUlRUICAgICAgICAgKDB4ZjIpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHJlYWwtdGltZSB0cmFjZSAqLw0KKyNkZWZpbmUgQVVYX0JDUl9JUlEgICAgICAgICAoMHhmMykgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJydXB0ICovDQorI2RlZmluZSBBVVhfQkNSX1BDVCAgICAgICAgICgweGY1KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBwZXJmb3JtYW5jZSBjb3VudGVycyAqLw0KKyNkZWZpbmUgQVVYX0JDUl9DQyAgICAgICAgICAoMHhmNikgIC8qITwgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgcGVyZm9ybWFuY2UgY291bnRlcnMgKi8NCisjZGVmaW5lIEFVWF9CQ1JfUERNX0RWRlMgICAgICAgICgweGY3KSAgLyohPCBidWlsZCBjb25maWd1cmF0aW9uIGZvciBQRE0gYW5kIERWRlMgKi8NCisNCisjZGVmaW5lIEFVWF9CQ1JfU0VDX0JVSUxEICAgICAgICgweGRiKQ0KKw0KKy8qIGZyb20gMHhGNSBhbmQgMHhGNiAqLw0KKw0KKyNkZWZpbmUgQVVYX0JDUl9JRlFVRVVFICAgICAgICAgKDB4ZmUpICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGluc3RydWN0aW9uIGZldGNoIHF1ZXVlICovDQorI2RlZmluZSBBVVhfQkNSX1NNQVJUICAgICAgICAgICAoMHhmZikgICAvKiE8IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIFNtYVJUIGRlYnVnIGZlYXR1cmUgKi8NCisvKiogQH0gKi8NCisNCisNCisjZGVmaW5lIEFVWF9TRUNfU1RBVCAgICAgICAgICAgICgweDkpDQorI2RlZmluZSBBVVhfU0VDX1NUQVRfQklUX1NTQyAgICAgICAgKDApDQorI2RlZmluZSBBVVhfU0VDX1NUQVRfQklUX05TUlQgICAgICAgKDEpDQorI2RlZmluZSBBVVhfU0VDX1NUQVRfQklUX05TUlUgICAgICAgKDIpDQorI2RlZmluZSBBVVhfU0VDX1NUQVRfQklUX0lSTSAgICAgICAgKDMpDQorI2RlZmluZSBBVVhfU0VDX1NUQVRfQklUX1NVRSAgICAgICAgKDQpDQorI2RlZmluZSBBVVhfU0VDX1NUQVRfQklUX05JQyAgICAgICAgKDUpDQorDQorLyoqDQorICogXG5hbWUgc3RhdHVzIHJlZ2lzdGVyIFNUQVRVUzMyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9TVEFUVVMzMiAgICAgICAgICAgICgweGEpDQorI2RlZmluZSBBVVhfU1RBVFVTMzJfUDAgICAgICAgICAoMHhiKQ0KKw0KKy8qIFNUQVRVUzMyIGJpdC1maWVsZCBkZWZpbml0aW9uICovDQorI2RlZmluZSBBVVhfU1RBVFVTX0JJVF9BRSAgICAgICAoNSkgLyohPCBwcm9jZXNzb3IgaXMgaW4gYW4gZXhjZXB0aW9uICovDQorI2RlZmluZSBBVVhfU1RBVFVTX0JJVF9ERSAgICAgICAoNikgLyohPCBkZWxheWVkIGJyYW5jaCBpcyBwZW5kaW5nICovDQorI2RlZmluZSBBVVhfU1RBVFVTX0JJVF9VICAgICAgICAoNykgLyohPCB1c2VyIG1vZGUgKi8NCisjZGVmaW5lIEFVWF9TVEFUVVNfQklUX0wgICAgICAgICgxMikgICAgLyohPCB6ZXJvLW92ZXJoZWFkIGxvb3AgZW5hYmxlICovDQorI2RlZmluZSBBVVhfU1RBVFVTX0JJVF9JRSAgICAgICAoMzEpICAgIC8qITwgaW50ZXJydXB0IGVuYWJsZSAqLw0KKw0KKy8qIG1hc2tzIGNvcnJlc3BvbmQgdG8gU1RBVFVTMzIgYml0LWZpZWxkICovDQorI2RlZmluZSBBVVhfU1RBVFVTX01BU0tfQUUgICAgICAoMTw8QVVYX1NUQVRVU19CSVRfQUUpICAvKiE8IG1hc2sgb2YgQVVYX1NUQVRVU19CSVRfQUUgKi8NCisjZGVmaW5lIEFVWF9TVEFUVVNfTUFTS19ERSAgICAgICgxPDxBVVhfU1RBVFVTX0JJVF9ERSkgIC8qITwgbWFzayBvZiBBVVhfU1RBVFVTX0JJVF9ERSAqLw0KKyNkZWZpbmUgQVVYX1NUQVRVU19NQVNLX1UgICAgICAgKDE8PEFVWF9TVEFUVVNfQklUX1UpICAgLyohPCBtYXNrIG9mIEFVWF9TVEFUVVNfQklUX1UgKi8NCisjZGVmaW5lIEFVWF9TVEFUVVNfTUFTS19MICAgICAgICgxPDxBVVhfU1RBVFVTX0JJVF9MKSAgIC8qITwgbWFzayBvZiBBVVhfU1RBVFVTX0JJVF9MICovDQorI2RlZmluZSBBVVhfU1RBVFVTX01BU0tfSUUgICAgICAoMTw8QVVYX1NUQVRVU19CSVRfSUUpICAvKiE8IG1hc2sgb2YgQVVYX1NUQVRVU19CSVRfSUUgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSB6ZXJvIG92ZXJoZWFkIGxvb3AgYXV4aWxpYXJ5IHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9MUF9TVEFSVCAgICAgICAgICAgICgweDIpICAgLyohPCBsb29wIHN0YXJ0IGFkZHJlc3MgKDMyLWJpdCkgKi8NCisjZGVmaW5lIEFVWF9MUF9FTkQgICAgICAgICAgKDB4MykgICAvKiE8IGxvb3AgZW5kIGFkZHJlc3MgKDMyLWJpdCkgKi8NCisvKiogQH0gKi8NCisNCisjZGVmaW5lIEFVWF9VU0VSX1NQICAgICAgICAgKDB4ZCkgICAvKiE8IHVzZXItbW9kZSBzdGFjayBwb2ludGVyICovDQorLyogYWRkZWQgaW4gc2lsdmVyc3RvbmUgKi8NCisjZGVmaW5lIEFVWF9LRVJORUxfU1AgICAgICAgICAgICgweDM4KSAgLyohPCBrZXJuZWwtbW9kZSBzdGFjayBwb2ludGVyICovDQorI2RlZmluZSBBVVhfU0VDX1VfU1AgICAgICAgICAgICAoMHgzOSkgIC8qITwgc2VjdXJlIHVzZXItbW9kZSBzdGFjayBwb2ludGVyICovDQorI2RlZmluZSBBVVhfU0VDX0tfU1AgICAgICAgICAgICAoMHgzYSkgIC8qITwgc2VjdXJlIGtlcm5lbC1tb2RlIHN0YWNrIHBvaW50ZXIgKi8NCisNCisvKiBhZGRpdGlvbmFsIHN0YWNrIGNoZWNraW5naCByZWdpc3RlcnMgZm9yIHNlY3VyZSBtb2RlICovDQorI2RlZmluZSBBVVhfU19VU1RBQ0tfQkFTRSAgICAgICAoMHgyNjMpDQorI2RlZmluZSBBVVhfU19VU1RBQ0tfVE9QICAgICAgICAoMHgyNjIpDQorDQorI2RlZmluZSBBVVhfU19LU1RBQ0tfQkFTRSAgICAgICAoMHgyNjcpDQorI2RlZmluZSBBVVhfU19LU1RBQ0tfVE9QICAgICAgICAoMHgyNjYpDQorDQorLyoqDQorICogXG5hbWUgYXV4aWxpYXJ5IHJlZ2lzdGVyIGZvciBoYXJkd2FyZSBjb3VudGVyIDAgYW5kIDENCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX1RJTUVSMF9MSU1JVCAgICAgICAgKDB4MjMpICAvKiE8IHRpbWVyIDAgbGltaXQgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9USU1FUjBfQ1RSTCAgICAgICAgICgweDIyKSAgLyohPCB0aW1lciAwIGNvbnRyb2wgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9USU1FUjBfQ05UICAgICAgICAgICgweDIxKSAgLyohPCB0aW1lciAwIGNvdW50IHZhbHVlICovDQorI2RlZmluZSBBVVhfVElNRVIxX0xJTUlUICAgICAgICAoMHgxMDIpIC8qITwgdGltZXIgMSBsaW1pdCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1RJTUVSMV9DVFJMICAgICAgICAgKDB4MTAxKSAvKiE8IHRpbWVyIDEgY29udHJvbCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1RJTUVSMV9DTlQgICAgICAgICAgKDB4MTAwKSAvKiE8IHRpbWVyIDEgY291bnQgdmFsdWUgKi8NCisvKiogQH0gKi8NCisNCisjZGVmaW5lIEFVWF9TRUNVUkVfVElNRVIwX0NOVCAgICAgICAoMHgxMDYpIC8qITwgc2VjdXJlIHRpbWVyIDAgY291bnQgdmFsdWUgKi8NCisjZGVmaW5lIEFVWF9TRUNVUkVfVElNRVIwX0NUUkwgICAgICAoMHgxMDcpIC8qITwgc2VjdXJlIHRpbWVyIDAgY29udHJvbCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1NFQ1VSRV9USU1FUjBfTElNSVQgICAgICgweDEwOCkgLyohPCBzZWN1cmUgdGltZXIgMCBsaW1pdCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1NFQ1VSRV9USU1FUjFfQ05UICAgICAgICgweDEwOSkgLyohPCBzZWN1cmUgdGltZXIgMSBjb3VudCB2YWx1ZSAqLw0KKyNkZWZpbmUgQVVYX1NFQ1VSRV9USU1FUjFfQ1RSTCAgICAgICgweDEwYSkgLyohPCBzZWN1cmUgdGltZXIgMSBjb250cm9sIHZhbHVlICovDQorI2RlZmluZSBBVVhfU0VDVVJFX1RJTUVSMV9MSU1JVCAgICAgKDB4MTBiKSAvKiE8IHNlY3VyZSB0aW1lciAxIGxpbWl0IHZhbHVlICovDQorDQorDQorLyoqDQorICogXG5hbWUgYXV4aWxpYXJ5IHJlZ2lzdGVyIGZvciByZWFsLXRpbWUgY291bnRlcg0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfUlRDX0NUUkwgICAgICAgICAgICAoMHgxMDMpIC8qITwgcmVhbC10aW1lIGNvdW50ZXIgY29udHJvbCByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX1JUQ19MT1cgICAgICAgICAoMHgxMDQpIC8qITwgcmVhbC10aW1lIGNvdW50ZXIgY291bnQgbG93IHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfUlRDX0hJR0ggICAgICAgICAgICAoMHgxMDUpIC8qITwgcmVhbC10aW1lIGNvdW50ZXIgY291bnQgaGlnaCByZWdpc3RlciAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGluZGV4ZWQgdGFibGUgYXV4aWxpYXJ5IHJlZ2lzdGVyDQorICogQHsNCisgKi8NCisjZGVmaW5lIEFVWF9KTElfQkFTRSAgICAgICAgICAgICgweDI5MCkgLyohPCBqdW1wIGFuZCBsaW5rIGluZGV4ZWQgYmFzZSBhZGRyZXNzICovDQorI2RlZmluZSBBVVhfTERJX0JBU0UgICAgICAgICAgICAoMHgyOTEpIC8qITwgbG9hZCBpbmRleGVkIGJhc2UgYWRkcmVzcyAqLw0KKyNkZWZpbmUgQVVYX0VJX0JBU0UgICAgICAgICAoMHgyOTIpIC8qITwgZXhlY3V0ZSBpbmRleGVkIGJhc2UgYWRkcmVzcyAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGJhc2VsaW5lIGF1eGlsaWFyeSByZWdpc3RlciBzZXQNCisgKiBAew0KKyAqLw0KKy8qIHRvIGJlIGFkZGVkICovDQorI2RlZmluZSBBVVhfRVJSRVQgICAgICAgICAgICgweDQwMCkgLyohPCBleGNlcHRpb24gcmV0dXJuIGFkZHJlc3MgKi8NCisjZGVmaW5lIEFVWF9FUkJUQSAgICAgICAgICAgKDB4NDAxKSAvKiE8IEJUQSBzYXZlZCBvbiBleGNlcHRpb24gZW50cnkgKi8NCisjZGVmaW5lIEFVWF9FUlNUQVRVUyAgICAgICAgICAgICgweDQwMikgLyohPCBTVEFUVVMzMiBzYXZlZCBvbiBleGNlcHRpb24gKi8NCisjZGVmaW5lIEFVWF9FQ1IgICAgICAgICAgICAgKDB4NDAzKSAvKiE8IGV4Y2VwdGlvbiBjYXVzZSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0VGQSAgICAgICAgICAgICAoMHg0MDQpIC8qITwgZXhjZXB0aW9uIGZhdWx0IGFkZHJlc3MgKi8NCisjZGVmaW5lIEFVWF9CVEEgICAgICAgICAgICAgKDB4NDEyKSAvKiE8IGJyYW5jaCB0YXJnZXQgYWRkcmVzcyAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qIE5ldyByZWdpc3RlciB0byBjb250cm9sIHdoaWNoIGV4Y2VwdGlvbnMgY2FuIGJlIGhhbmRsZWQgaW4gTlMgbW9kZSAqLw0KKyNkZWZpbmUgQVVYX0VSU0VDX1NUQVQgICAgICAgICAgKDB4NDA2KQ0KKyNkZWZpbmUgQVVYX0VSU0VDX1NUQVRfQklUX0VSTSAgICAgIDMxDQorI2RlZmluZSBBVVhfU0VDX0VYQ0VQVCAgICAgICAgICAoMHg0MDcpDQorDQorLyoqDQorICogXG5hbWUgTVBVIHJlZ2lzdGVyIHNldA0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfTVBVX0VOICAgICAgICAgICAgICAoMHg0MDkpIC8qITwgTVBVIGVuYWJsZSByZWdpc3RlciAgKi8NCisjZGVmaW5lIEFVWF9NUFVfRUNSICAgICAgICAgKDB4NDIwKSAvKiE8IE1QVSBleGNlcHRpb24gY2F1c2UgKi8NCisjZGVmaW5lIEFVWF9NUFVfUkRCMCAgICAgICAgICAgICgweDQyMikgLyohPCBNUFUgcmVnaW9uIGRlc2NyaXB0b3IgYmFzZSAwICovDQorI2RlZmluZSBBVVhfTVBVX1JEUDAgICAgICAgICAgICAoMHg0MjMpIC8qITwgTVBVIHJlZ2lvbiBkZXNjcmlwdG9yIHBlcm1pc3Npb24gMCAqLw0KKw0KKy8qIE1QVSByZWdpc3RlciBzZXQgaW4gc2lsdmVyc3RvbmUgKi8NCisjZGVmaW5lIEFVWF9NUFVfSU5ERVggICAgICAgICAgICgweDQ0OCkNCisjZGVmaW5lIEFVWF9NUFVfSU5ERVhfQklUX0QgICAgICgzMSkNCisjZGVmaW5lIEFVWF9NUFVfUlNUQVJUICAgICAgICAgICgweDQ0OSkNCisjZGVmaW5lIEFVWF9NUFVfUkVORCAgICAgICAgICAgICgweDQ0YSkNCisjZGVmaW5lIEFVWF9NUFVfUlBFUiAgICAgICAgICAgICgweDQ0YikNCisjZGVmaW5lIEFVWF9NUFVfUlBFUl9CSVRfUyAgICAgICgxNSkNCisjZGVmaW5lIEFVWF9NUFVfUFJPQkUgICAgICAgICAgICgweDQ0YykNCisjZGVmaW5lIEFVWF9NUFVfRUNSICAgICAgICAgKDB4NDIwKQ0KKw0KKyNkZWZpbmUgQVVYX05TQ19UQUJMRV9CQVNFICAgICAgKDB4MjY5KQ0KKyNkZWZpbmUgQVVYX05TQ19UQUJMRV9UT1AgICAgICAgKDB4MjY4KQ0KKw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGV4Y2VwdGlvbiBjYXVzZSByZWdpc3RlciAoRUNSKSBiaXQtZmllbGQgZGVmaW5pdGlvbg0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfRUNSX1ZFQ19NQVNLICAgICAgICAoMHhmZjAwMDApICAvKiE8IFsyMzoxNl0gPSBleGNlcHRpb24gdmVjdG9yICovDQorI2RlZmluZSBBVVhfRUNSX0NPREVfTUFTSyAgICAgICAoMHgwMGZmMDApICAvKiE8IFsxNTogOF0gPSBleGNlcHRpb24gY2F1c2UgY29kZSAqLw0KKyNkZWZpbmUgQVVYX0VDUl9QQVJBTV9NQVNLICAgICAgKDB4MDAwMGZmKSAgLyohPCBbIDc6IDBdID0gZXhjZXB0aW9uIHBhcmFtZXRlcnMgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBleGNlcHRpb24gdmVjdG9yIG51bWJlciBhbmQgY2F1c2UgY29kZQ0KKyAqIEB7DQorICovDQorI2RlZmluZSBBVVhfRUNSX1ZfSU5TTl9FUlIgICAgICAoMHgwMikgIC8qITwgdmVjdG9yIG51bWJlciBvZiBpbGxlZ2FsIGluc3RydWN0aW9uICovDQorI2RlZmluZSBBVVhfRUNSX1ZfTUFDSF9DSEsgICAgICAoMHgwMykgIC8qITwgdmVjdG9yIG51bWJlciBvZiBtYWNoaW5lIGNoZWNrICovDQorI2RlZmluZSBBVVhfRUNSX1ZfSVRMQl9NSVNTICAgICAoMHgwNCkgIC8qITwgdmVjdG9yIG51bWJlciBvZiBpbnN0cnVjdGlvbiBUTEIgbWlzc2luZyBleGNlcHRpb24gKi8NCisjZGVmaW5lIEFVWF9FQ1JfVl9EVExCX01JU1MgICAgICgweDA1KSAgLyohPCB2ZWN0b3IgbnVtYmVyIG9mIGRhdGEgVExCIG1pc3NpbmcgZXhjZXB0aW9uICovDQorI2RlZmluZSBBVVhfRUNSX1ZfUFJPVFYgICAgICAgICAoMHgwNikgIC8qITwgdmVjdG9yIG51bWJlciBvZiBwcm90ZWN0aW9uIHZpb2xhdGlvbiAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WX1RSQVAgICAgICAgICAgKDB4MDkpICAvKiE8IHZlY3RvciBudW1iZXIgb2YgdHJhcCAqLw0KKyNkZWZpbmUgQVVYX0VDUl9WX01JU0FMSUdfREFUQSAgICAgICgweDBkKSAgLyohPCB2ZWN0b3IgbnVtYmVyIG9mIG1pc2FsaWduZWQgZGF0YSBhY2Nlc3MgKi8NCisNCisjZGVmaW5lIEFVWF9FQ1JfQ19QUk9UVl9JTlNUX0ZFVENIICAoMHgwMCkgIC8qITwgY2F1c2UgY29kZSBvZiBpbnN0cnVjdGlvbiBmZXRjaCAocHJvdGVjdGlvbiB2aW9sYXRpb24pICovDQorI2RlZmluZSBBVVhfRUNSX0NfUFJPVFZfTE9BRCAgICAgICAgKDB4MDEpICAvKiE8IGNhdXNlIGNvZGUgcmVsYXRlZCBtZW1vcnkgcmVhZCAocHJvdGVjdGlvbiB2aW9sYXRpb24pICovDQorI2RlZmluZSBBVVhfRUNSX0NfUFJPVFZfU1RPUkUgICAgICAgKDB4MDIpICAvKiE8IGNhdXNlIGNvZGUgcmVsYXRlZCBtZW1vcnkgd3JpdGUgKHByb3RlY3Rpb24gdmlvbGF0aW9uKSAqLw0KKyNkZWZpbmUgQVVYX0VDUl9DX1BST1RWX1hDSEcgICAgICAgICgweDAzKSAgLyohPCBjYXVzZSBjb2RlIHJlbGF0ZWQgcmVhZC1tb2RpZnktd3JpdGUgKHByb3RlY3Rpb24gdmlvbGF0aW9uKSAqLw0KKw0KKyNkZWZpbmUgQVVYX0VDUl9DX01DSEtfRFVQX1RMQiAgICAgICgweDAxKSAgLyohPCBcdG9kbyBkZWZpbml0aW9uIGlzIHRvIGJlIGFkZGVkLiAqLw0KKw0KKyNkZWZpbmUgQVVYX0VDUl9DX0JJVF9EVExCX0xEX01JU1MgICg4KSAvKiE8IFx0b2RvIGRlZmluaXRpb24gaXMgdG8gYmUgYWRkZWQuICovDQorI2RlZmluZSBBVVhfRUNSX0NfQklUX0RUTEJfU1RfTUlTUyAgKDkpIC8qITwgXHRvZG8gZGVmaW5pdGlvbiBpcyB0byBiZSBhZGRlZC4gKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBpbnRlcnJ1cHQgcmVsYXRlZCBhdXhpbGlhcnkgcmVnaXN0ZXINCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX0lSUV9DVFJMICAgICAgICAgICAgKDB4ZSkgICAvKiE8IGludGVycnVwdCBjb250ZXh0IHNhdmluZyBjb250cm9sIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSU5UX1ZFQ1RfQkFTRSAgICAgICAoMHgyNSkgIC8qITwgaW50ZXJydXB0IHZlY3RvciBiYXNlIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSU5UX1ZFQ1RfQkFTRV9TICAgICAoMHgyNikgIC8qITwgc2VjdXJlIGludGVycnVwdCB2ZWN0b3IgYmFzZWQgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfQUNUICAgICAgICAgKDB4NDMpICAvKiE8IGFjdGl2ZSBpbnRlcnJ1cHRzIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSVJRX0NBVVNFICAgICAgICAgICAoMHg0MGEpIC8qITwgaW50ZXJydXB0IGNhdXNlIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSVJRX1NFTEVDVCAgICAgICAgICAoMHg0MGIpIC8qITwgaW50ZXJydXB0IHNlbGVjdCByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9QUklPUklUWSAgICAgICAgKDB4MjA2KSAvKiE8IGludGVycnVwdCBwcmlvcml0eSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9QUklPUklUWV9CSVRfUyAgICAgICgweDgpICAgLyohPCBTIGJpdCBvZmZzZXQgaW4gaW50ZXJydXB0IHByaW9yaXR5IHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSVJRX0VOQUJMRSAgICAgICAgICAoMHg0MGMpIC8qITwgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9UUklHR0VSICAgICAgICAgKDB4NDBkKSAvKiE8IGludGVycnVwdCB0cmlnZ2VyOiBsZXZlbCBvciBwdWxzZSAqLw0KKyNkZWZpbmUgQVVYX0lSUV9QRU5ESU5HICAgICAgICAgKDB4NDE2KSAvKiE8IGludGVycnVwdCBwZW5kaW5nIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfSVJRX1BMVVNFX0NMUiAgICAgICAoMHg0MTUpIC8qITwgaW50ZXJydXB0IHB1bHNlIGNhbmNlbCByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9TVEFUVVMgICAgICAgICAgKDB4NDBmKSAvKiE8IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9JUlFfUFJJX1BFTkRJTkcgICAgICgweDIwMCkgLyohPCBpbnRlcnJ1cHQgcHJpb3JpdHkgcGVuZGluZyByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lSUV9ISU5UICAgICAgICAgICAgKDB4MjAxKSAvKiE8IHNvZnR3YXJlIGludGVycnVwdCB0cmlnZ2VyICovDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgY2FjaGUgcmVsYXRlZCBhdXhpbGlhcnkgcmVnaXN0ZXINCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX0lDX0lWSUMgICAgICAgICAoMHgxMCkgIC8qITwgaW52YWxpZGF0ZSBpbnN0cnVjdGlvbiBjYWNoZSAqLw0KKyNkZWZpbmUgQVVYX0lDX0NUUkwgICAgICAgICAoMHgxMSkgIC8qITwgaW5zdHJ1Y3Rpb24gY2FjaGUgY29udHJvbCByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0lDX0xJTCAgICAgICAgICAoMHgxMykgIC8qITwgbG9jayBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lICovDQorI2RlZmluZSBBVVhfSUNfSVZJTCAgICAgICAgICgweDE5KSAgLyohPCBpbnZhbGlkYXRlIGluc3RydWN0aW9uIGNhY2hlIGxpbmUgKi8NCisjZGVmaW5lIEFVWF9JQ19SQU1fQUREUiAgICAgICAgICgweDFhKSAgLyohPCBpbnN0cnVjdGlvbiBjYWNoZSBleHRlcm5hbCBhY2Nlc3MgYWRkcmVzcyAqLw0KKyNkZWZpbmUgQVVYX0lDX1RBRyAgICAgICAgICAoMHgxYikgIC8qITwgaW5zdHJ1Y3Rpb24gY2FjaGUgdGFnIGFjY2VzcyAqLw0KKyNkZWZpbmUgQVVYX0lDX0RBVEEgICAgICAgICAoMHgxZCkgIC8qITwgaW5zdHJ1Y3Rpb24gY2FjaGUgZGF0YSBhY2Nlc3MgKi8NCisjZGVmaW5lIEFVWF9EQ19JVkRDICAgICAgICAgKDB4NDcpICAvKiE8IGludmFsaWRhdGUgZGF0YSBjYWNoZSAqLw0KKyNkZWZpbmUgQVVYX0RDX0NUUkwgICAgICAgICAoMHg0OCkgIC8qITwgZGF0YSBjYWNoZSBjb250cm9sIHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRENfTERMICAgICAgICAgICgweDQ5KSAgLyohPCBsb2NrIGRhdGEgY2FjaGUgbGluZSAqLw0KKyNkZWZpbmUgQVVYX0RDX0lWREwgICAgICAgICAoMHg0YSkgIC8qITwgaW52YWxpZGF0ZSBkYXRhIGNhY2hlIGxpbmUgKi8NCisjZGVmaW5lIEFVWF9EQ19GTFNIICAgICAgICAgKDB4NGIpICAvKiE8IGZsdXNoIGRhdGEgY2FjaGUgKi8NCisjZGVmaW5lIEFVWF9EQ19GTERMICAgICAgICAgKDB4NGMpICAvKiE8IGZsdXNoIGRhdGEgbGluZSAqLw0KKyNkZWZpbmUgQVVYX0RDX1JBTV9BRERSICAgICAgICAgKDB4NTgpICAvKiE8IGRhdGEgY2FjaGUgZXh0ZXJuYWwgYWNjZXNzIGFkZHJlc3MgKi8NCisjZGVmaW5lIEFVWF9EQ19UQUcgICAgICAgICAgKDB4NTkpICAvKiE8IGRhdGEgY2FjaGUgdGFnIGFjY2VzcyAqLw0KKyNkZWZpbmUgQVVYX0RDX0RBVEEgICAgICAgICAoMHg1YikgIC8qITwgZGF0YSBjYWNoZSBkYXRhIGFjY2VzcyAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGRtYWMgcmVsYXRlZCBhdXhpbGlhcnkgcmVnaXN0ZXINCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX0RNQUNUUkwgICAgICAgICAoMHg2ODApIC8qITwgRE1BIGNvbnRyb2wgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDRU5CICAgICAgICAgKDB4NjgxKSAvKiE8IERNQSBjaGFubmVsIGVuYWJsZSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0RNQUNEU0IgICAgICAgICAoMHg2ODIpIC8qITwgRE1BIGNoYW5uZWwgZGlzYWJsZSByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX0RNQUNIUFJJICAgICAgICAgICAgKDB4NjgzKSAvKiE8IERNQSBjaGFubmVsIGhpZ2ggcHJpb3JpdHkgbGV2ZWwgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDTlBSSSAgICAgICAgICAgICgweDY4NCkgLyohPCBETUEgY2hhbm5lbCBub3JtYWwgcHJpb3JpdHkgbGV2ZWwgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDUkVRICAgICAgICAgKDB4Njg1KSAvKiE8IERNQSBjaGFubmVsIHRyYW5zZmVyIHJlcXVlc3QgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDU1RBVDAgICAgICAgICAgICgweDY4NikgLyohPCBETUEgY2hhbm5lbCBzdGF0dXMgcmVnaXN0ZXIgMCAqLw0KKyNkZWZpbmUgQVVYX0RNQUNTVEFUMSAgICAgICAgICAgKDB4Njg3KSAvKiE8IERNQSBjaGFubmVsIHN0YXR1cyByZWdpc3RlciAxICovDQorI2RlZmluZSBBVVhfRE1BQ0lSUSAgICAgICAgICgweDY4OCkgLyohPCBETUEgY2hhbm5lbCBpbnRlcnJ1cHQgcmVxdWVzdCBzdGF0dXMvY2xlYXIgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIEFVWF9ETUFDQkFTRSAgICAgICAgICAgICgweDY4OSkgLyohPCBETUEgY2hhbm5lbCBzdHJ1Y3R1cmUgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovDQorI2RlZmluZSBBVVhfRE1BQ1JTVCAgICAgICAgICgweDY4QSkgLyohPCBETUEgY2hhbm5lbCByZXNldCByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8NCisNCisjZGVmaW5lIEFVWF9ETUFDVFJMMCAgICAgICAgICAgICgweDY5MCkgLyohPCBETUEgY2hhbm5lbCAwIGNvbnRyb2wgcmVnaXN0ZXIgd2hlbiBtYXBwZWQgaW4gYXV4ICovDQorI2RlZmluZSBBVVhfRE1BU0FSMCAgICAgICAgICgweDY5MSkgLyohPCBETUEgY2hhbm5lbCAwIHNvdXJjZSBhZGRyZXNzIHJlZ2lzdGVyIHdoZW4gbWFwcGVkIGluIGF1eCAqLw0KKyNkZWZpbmUgQVVYX0RNQURBUjAgICAgICAgICAoMHg2OTIpIC8qITwgRE1BIGNoYW5uZWwgMCBkZXN0aW5hdGlvbiByZWdpc3RlciB3aGVuIG1hcHBlZCBpbiBhdXggKi8NCisjZGVmaW5lIEFVWF9ETUFDVFJMeCAgICAgICAgICAgIChBVVhfRE1BQ1RSTDApICAvKiE8IERNQSBjaGFubmVsIDAgY29udHJvbCByZWdpc3RlciB3aGVuIG1hcHBlZCBpbiBhdXggKi8NCisjZGVmaW5lIEFVWF9ETUFTQVJ4ICAgICAgICAgKEFVWF9ETUFTQVIwKSAgIC8qITwgRE1BIGNoYW5uZWwgMCBzb3VyY2UgYWRkcmVzcyByZWdpc3RlciB3aGVuIG1hcHBlZCBpbiBhdXggKi8NCisjZGVmaW5lIEFVWF9ETUFEQVJ4ICAgICAgICAgKEFVWF9ETUFEQVIwKSAgIC8qITwgRE1BIGNoYW5uZWwgMCBkZXN0aW5hdGlvbiByZWdpc3RlciB3aGVuIG1hcHBlZCBpbiBhdXggKi8NCisvKiogQH0gKi8NCisNCisNCisNCisvKioNCisgKiBcbmFtZSBvdGhlciBhdXhpbGlhcnkgcmVnaXN0ZXINCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgQVVYX0lERU5USVRZICAgICAgICAgICAgKDB4NCkgICAvKiE8IGlkZW50aXR5IHJlZ2lzdGVyICovDQorI2RlZmluZSBBVVhfRE1QX1BFUklQSEVSQUwgICAgICAoMHgyMGEpIC8qITwgcGVyaXBoZXJhbCBtZW1vcnkgcmVnaW9uICovDQorI2RlZmluZSBBVVhfWEZMQUdTICAgICAgICAgICgweDQ0ZikgLyohPCB1c2VyIGV4dGVuc2lvbiBmbGFncyByZWdpc3RlciAqLw0KKyNkZWZpbmUgQVVYX01DSVBfQ01EICAgICAgICAgICAgKDB4NjAwKSAvKiE8IFx0b2RvIGRlZmluaXRpb24gaXMgdG8gYmUgYWRkZWQuICovDQorI2RlZmluZSBBVVhfTUNJUF9XREFUQSAgICAgICAgICAoMHg2MDEpIC8qITwgXHRvZG8gZGVmaW5pdGlvbiBpcyB0byBiZSBhZGRlZC4gKi8NCisjZGVmaW5lIEFVWF9NQ0lQX1JFQURCQUNLICAgICAgICgweDYwMikgLyohPCBcdG9kbyBkZWZpbml0aW9uIGlzIHRvIGJlIGFkZGVkLiAqLw0KKyNkZWZpbmUgQVVYX1NNQVJUX0NPTlRST0wgICAgICAgKDB4NzAwKSAvKiE8IFx0b2RvIGRlZmluaXRpb24gaXMgdG8gYmUgYWRkZWQuICovDQorI2RlZmluZSBBVVhfU01BUlRfREFUQSAgICAgICAgICAoMHg3MDEpIC8qITwgXHRvZG8gZGVmaW5pdGlvbiBpcyB0byBiZSBhZGRlZC4gKi8NCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaWZuZGVmIF9fQVNTRU1CTFlfXw0KKy8qIGFkZCB0eXBlIGRlZmluaXRpb24gYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGhlcmUgKi8NCisjZW5kaWYgIC8qIGFzc2VtYmx5ICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKw0KKyNlbmRpZiAgLyogX0FSQ19IQUxfQ09SRV9IXyAqLw0KKw0KKy8qKiAgQH0gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfYXNtX2NvbW1vbi5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2FzbV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDY1MjY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2FzbV9jb21tb24uaApAQCAtMCwwICsxLDU0MSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0xNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9NSVNDDQorICogXGJyaWVmIGNvbW1vbiBtYWNybyBkZWZpbml0aW9ucyBmb3IgYXNzZW1ibHkgZmlsZQ0KKyAqLw0KKy8qKiBAY29uZCBBUkNfSEFMX0FTTV9DT01NT04gKi8NCisNCisjaWZuZGVmIF9BUkNfSEFMX0FTTV9DT01NT05fSF8NCisjZGVmaW5lIF9BUkNfSEFMX0FTTV9DT01NT05fSF8NCisNCisjaW5jbHVkZSAiZW1iQVJDX0JTUF9jb25maWcuaCINCisjaW5jbHVkZSAiYXJjX2ZlYXR1cmVfY29uZmlnLmgiDQorDQorLyogTm90ZSBvbiB0aGUgTEQvU1QgYWRkciBtb2RlcyB3aXRoIGFkZHIgcmVnIHdiYWNrDQorICoNCisgKiBMRC5hIHNhbWUgYXMgTEQuYXcNCisgKg0KKyAqIExELmEgICAgcmVnMSwgW3JlZzIsIHhdICA9PiBQcmUgSW5jcg0KKyAqICAgICAgRWZmIEFkZHIgZm9yIGxvYWQgPSBbcmVnMiArIHhdDQorICoNCisgKiBMRC5hYiAgIHJlZzEsIFtyZWcyLCB4XSAgPT4gUG9zdCBJbmNyDQorICogICAgICBFZmYgQWRkciBmb3IgbG9hZCA9IFtyZWcyXQ0KKyAqLw0KKyNpZiBkZWZpbmVkKF9fR05VX18pDQorLm1hY3JvIFBVU0ggcmVnDQorc3QuYSAgICBccmVnLCBbc3AsIC00XQ0KKy5lbmRtDQorDQorLm1hY3JvIFBVU0hBWCBhdXgNCitsciAgcjEwLCBbXGF1eF0NCitQVVNIICAgIHIxMA0KKy5lbmRtDQorDQorLm1hY3JvIFBPUCByZWcNCitsZC5hYiAgIFxyZWcsIFtzcCwgNF0NCisuZW5kbQ0KKw0KKy5tYWNybyBQT1BBWCBhdXgNCitQT1AgcjEwDQorc3IgIHIxMCwgW1xhdXhdDQorLmVuZG0NCisjZWxzZQ0KKy5tYWNybyBQVVNILCByZWcNCitzdC5hICAgIHJlZywgW3NwLCAtNF0NCisuZW5kbQ0KKw0KKy5tYWNybyBQVVNIQVgsIGF1eA0KK2xyICByMTAsIFthdXhdDQorUFVTSCAgICByMTANCisuZW5kbQ0KKw0KKy5tYWNybyBQT1AsIHJlZw0KK2xkLmFiICAgcmVnLCBbc3AsIDRdDQorLmVuZG0NCisNCisubWFjcm8gUE9QQVgsIGF1eA0KK1BPUCByMTANCitzciAgcjEwLCBbYXV4XQ0KKy5lbmRtDQorI2VuZGlmDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIEhlbHBlcnMgdG8gc2F2ZS9yZXN0b3JlIGNhbGxlZS1zYXZlZCByZWdzOg0KKyAqIHVzZWQgYnkgc2V2ZXJhbCBtYWNyb3MgYmVsb3cNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy5tYWNybyBTQVZFX0NBTExFRV9SRUdTDQorUFVTSCAgICByMTMNCitQVVNIICAgIHIxNA0KK1BVU0ggICAgcjE1DQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorUFVTSCAgICByMTYNCitQVVNIICAgIHIxNw0KK1BVU0ggICAgcjE4DQorUFVTSCAgICByMTkNCitQVVNIICAgIHIyMA0KK1BVU0ggICAgcjIxDQorUFVTSCAgICByMjINCitQVVNIICAgIHIyMw0KK1BVU0ggICAgcjI0DQorUFVTSCAgICByMjUNCisjZW5kaWYNCisuZW5kbQ0KKw0KKy5tYWNybyBSRVNUT1JFX0NBTExFRV9SRUdTDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorUE9QIHIyNQ0KK1BPUCByMjQNCitQT1AgcjIzDQorUE9QIHIyMg0KK1BPUCByMjENCitQT1AgcjIwDQorUE9QIHIxOQ0KK1BPUCByMTgNCitQT1AgcjE3DQorUE9QIHIxNg0KKyNlbmRpZg0KK1BPUCByMTUNCitQT1AgcjE0DQorUE9QIHIxMw0KKy5lbmRtDQorDQorLm1hY3JvIENMRUFSX0NBTExFRV9SRUdTDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorbW92IHIyNSwgMA0KK21vdiByMjQsIDANCittb3YgcjIzLCAwDQorbW92IHIyMiwgMA0KK21vdiByMjEsIDANCittb3YgcjIwLCAwDQorbW92IHIxOSwgMA0KK21vdiByMTgsIDANCittb3YgcjE3LCAwDQorbW92IHIxNiwgMA0KKyNlbmRpZg0KK21vdiByMTUsIDANCittb3YgcjE0LCAwDQorbW92IHIxMywgMA0KKy5lbmRtDQorDQorLm1hY3JvIENMRUFSX1NDUkFUQ0hfUkVHUw0KK21vdiByMSwgMA0KK21vdiAgICAgcjIsIDANCittb3YgcjMsIDANCittb3YgcjQsIDANCittb3YgcjUsIDANCittb3YgcjYsIDANCittb3YgcjcsIDANCittb3YgcjgsIDANCittb3YgICAgIHI5LCAwDQorbW92IHIxMCwgMA0KK21vdiByMTEsIDANCittb3YgcjEyLCAwDQorDQorbW92ICAgICBmcCwgMA0KK21vdiAgICAgcjI5LCAwDQorbW92ICAgICByMzAsIDANCisuZW5kbQ0KKw0KKw0KKy5tYWNybyBTQVZFX0xQX1JFR1MNCitQVVNIICAgIHI2MA0KK1BVU0hBWCAgQVVYX0xQX1NUQVJUDQorUFVTSEFYICBBVVhfTFBfRU5EDQorLmVuZG0NCisNCisubWFjcm8gUkVTVE9SRV9MUF9SRUdTDQorUE9QQVggICBBVVhfTFBfRU5EDQorUE9QQVggICBBVVhfTFBfU1RBUlQNCitQT1AgcjEwDQorLyogbXVzdCBub3QgdXNlIHRoZSBMUF9DT1VOVCByZWdpc3RlcihyNjApIGFzIHRoZSBkZXN0aW5hdGlvbiBvZiBtdWx0aS1jeWNsZSBpbnN0cnVjdGlvbiAqLw0KK21vdiByNjAsIHIxMA0KKw0KKy5lbmRtDQorDQorLm1hY3JvIFNBVkVfUjBfVE9fUjEyDQorUFVTSCAgICByMA0KK1BVU0ggICAgcjENCitQVVNIICAgIHIyDQorUFVTSCAgICByMw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BVU0ggICAgcjQNCitQVVNIICAgIHI1DQorUFVTSCAgICByNg0KK1BVU0ggICAgcjcNCitQVVNIICAgIHI4DQorUFVTSCAgICByOQ0KKyNlbmRpZg0KK1BVU0ggICAgcjEwDQorUFVTSCAgICByMTENCitQVVNIICAgIHIxMg0KKy5lbmRtDQorDQorLm1hY3JvIFJFU1RPUkVfUjBfVE9fUjEyDQorUE9QIHIxMg0KK1BPUCByMTENCitQT1AgcjEwDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorUE9QIHI5DQorUE9QIHI4DQorUE9QIHI3DQorUE9QIHI2DQorUE9QIHI1DQorUE9QIHI0DQorI2VuZGlmDQorUE9QIHIzDQorUE9QIHIyDQorUE9QIHIxDQorUE9QIHIwDQorLmVuZG0NCisNCisubWFjcm8gU0FWRV9DT0RFX0RFTlNJVFkNCitQVVNIQVggIEFVWF9KTElfQkFTRQ0KK1BVU0hBWCAgQVVYX0xESV9CQVNFDQorUFVTSEFYICBBVVhfRUlfQkFTRQ0KKy5lbmRtDQorDQorLm1hY3JvIFJFU1RPUkVfQ09ERV9ERU5TSVRZDQorUE9QQVggICBBVVhfRUlfQkFTRQ0KK1BPUEFYICAgQVVYX0xESV9CQVNFDQorUE9QQVggICBBVVhfSkxJX0JBU0UNCisuZW5kbQ0KKw0KKy8qIHRvZG86IGNoZWNrIHRoZSBjb250ZW50cyBvZiBOT05fU0NSQVRDSF9SRUdTIGluIGRlYnVnICovDQorLm1hY3JvIFNBVkVfTk9OU0NSQVRDSF9SRUdTDQorLyogcjAtcjEyIGFyZSBzYXZlZCBieSBjYWxsZXIgZnVuY3Rpb24gKi8NCitQVVNIICAgIGdwDQorUFVTSCAgICBmcA0KK1BVU0ggICAgYmxpbmsNCitTQVZFX0NBTExFRV9SRUdTDQorLmVuZG0NCisNCisubWFjcm8gUkVTVE9SRV9OT05TQ1JBVENIX1JFR1MNCitSRVNUT1JFX0NBTExFRV9SRUdTDQorUE9QIGJsaW5rDQorUE9QIGZwDQorUE9QIGdwDQorLmVuZG0NCisNCisNCisubWFjcm8gU0FWRV9GSVFfRVhDX1JFR1MNCisjaWZuZGVmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUw0KK1NBVkVfUjBfVE9fUjEyDQorDQorUFVTSCAgICBncA0KK1BVU0ggICAgZnANCitQVVNIICAgIHIzMCAgICAgLyogZ2VuZXJhbCBwdXJwb3NlICovDQorUFVTSCAgICBibGluaw0KKw0KKyNlbHNlDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAhPSA0ICYmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAhPSA4ICYmIFwNCisgICAgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICE9IDE2ICAmJiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgIT0gMzINCisjZXJyb3IgICJ1bnN1cHBvcnRlZCBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MiDQorI2VuZGlmDQorDQorI2lmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA9PSA0IHx8IEFSQ19GRUFUVVJFX0JBTktFRF9SRUdTID09IDggfHwgXA0KKyAgICBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPT0gMTYNCitQVVNIICAgIHI0DQorUFVTSCAgICByNQ0KK1BVU0ggICAgcjYNCitQVVNIICAgIHI3DQorUFVTSCAgICByOA0KK1BVU0ggICAgcjkNCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQgfHwgQVJDX0ZFQVRVUkVfQkFOS0VEX1JFR1MgPT0gOA0KK1BVU0ggICAgcjEwDQorUFVTSCAgICByMTENCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQNCitQVVNIICAgIHIxMg0KKyNlbmRpZg0KKw0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPT0gNCB8fCBBUkNfRkVBVFVSRV9CQU5LRURfUkVHUyA9PSA4DQorUFVTSCAgICBncA0KK1BVU0ggICAgZnANCitQVVNIICAgIHIzMCAgICAgLyogZ2VuZXJhbCBwdXJwb3NlICovDQorUFVTSCAgICBibGluaw0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiAjaWZuZGVmIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyAqLw0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCitTQVZFX0NPREVfREVOU0lUWQ0KKyNlbmRpZg0KK1NBVkVfTFBfUkVHUw0KKy5lbmRtDQorDQorLm1hY3JvIFJFU1RPUkVfRklRX0VYQ19SRUdTDQorUkVTVE9SRV9MUF9SRUdTDQorI2lmZGVmICBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCitSRVNUT1JFX0NPREVfREVOU0lUWQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTDQorUE9QIGJsaW5rDQorUE9QIHIzMA0KK1BPUCBmcA0KK1BPUCBncA0KKw0KK1JFU1RPUkVfUjBfVE9fUjEyDQorI2Vsc2UNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICE9IDQgJiYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICE9IDggJiYgXA0KKyAgICBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgIT0gMTYgJiYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTICE9IDMyDQorI2Vycm9yICAidW5zdXBwb3J0ZWQgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTIg0KKyNlbmRpZg0KKw0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPT0gNCB8fCBBUkNfRkVBVFVSRV9CQU5LRURfUkVHUyA9PSA4DQorUE9QIGJsaW5rDQorUE9QIHIzMA0KK1BPUCBmcA0KK1BPUCBncA0KKyNlbmRpZg0KKw0KKyNpZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgPT0gNA0KK1BPUCByMTINCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQgfHwgQVJDX0ZFQVRVUkVfQkFOS0VEX1JFR1MgPT0gOA0KK1BPUCAgICAgcjExDQorUE9QICAgICByMTANCisjZW5kaWYNCisNCisjaWYgQVJDX0ZFQVRVUkVfUkdGX0JBTktFRF9SRUdTID09IDQgfHwgQVJDX0ZFQVRVUkVfQkFOS0VEX1JFR1MgPT0gOCB8fCBcDQorICAgIEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUyA9PSAxNg0KK1BPUCAgICAgcjkNCitQT1AgICAgIHI4DQorUE9QICAgICByNw0KK1BPUCAgICAgcjYNCitQT1AgICAgIHI1DQorUE9QICAgICByNA0KKyNlbmRpZg0KKw0KKyNlbmRpZiAgLyogI2lmbmRlZiBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgKi8NCisuZW5kbQ0KKw0KKy8qIG5vcm1hbCBpbnRlcnJ1cHQgcHJvbG9ndWUsIHBjLCBzdGF0dXMgYW5kIHIwLXIxMSBhcmUgc2F2ZWQgYnkgaGFyZHdhcmUgKi8NCisubWFjcm8gSU5URVJSVVBUX1BST0xPR1VFDQorUFVTSCAgICByMTINCitQVVNIICAgIGdwDQorUFVTSCAgICBmcA0KK1BVU0ggICAgaWxpbmsNCitQVVNIICAgIHIzMA0KKw0KK3N1YiBzcCwgc3AsIDQgLyogc2tpcCBidGEgKi8NCisuZW5kbQ0KKw0KKw0KKy8qIG5vcm1hbCBpbnRlcnJ1cHQgZXBpbG9ndWUsIHBjLCBzdGF0dXMgYW5kIHIwLXIxMSBhcmUgcmVzdG9yZWQgYnkgaGFyZHdhcmUgKi8NCisubWFjcm8gSU5URVJSVVBUX0VQSUxPR1VFDQorYWRkIHNwLCBzcCwgNCAvKiBza2lwIGJ0YSAqLw0KKw0KK1BPUCByMzANCitQT1AgaWxpbmsNCitQT1AgZnANCitQT1AgZ3ANCitQT1AgcjEyDQorLmVuZG0NCisNCisjaWYgU0VDVVJFU0hJRUxEX1ZFUlNJT04gPT0gMg0KKy8qIGV4Y2VwdGlvbiBwcm9sb2d1ZSwgY3JlYXRlIHRoZSBzYW1lIGZyYW1lIG9mIGludGVycnVwdCBtYW51YWxseSAqLw0KKy5tYWNybyBFWENFUFRJT05fUFJPTE9HVUUNCitzdC5hcyAgIHIxMCwgW3NwLCAtNl0gICAvKiBzYXZlIHIxMCBmaXJzdCwgZnJlZSB1cCBhIHJlZ2lzdGVyKi8NCisNCitQVVNIQVggIEFVWF9FUlNUQVRVUw0KK3N1YiAgICAgc3AsIHNwLCA0IC8qIHNsb3QgZm9yIFNFQ19TVEFUICovDQorUFVTSEFYICBBVVhfRVJSRVQNCisNCitQVVNIICAgIGJsaW5rDQorDQorUFVTSCAgICByMTENCitzdWIgc3AsIHNwLCA0IC8qIHIxMCBpcyAgcHVzaGVkIGJlZm9yZSAqLw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BVU0ggICAgcjkNCitQVVNIICAgIHI4DQorUFVTSCAgICByNw0KK1BVU0ggICAgcjYNCitQVVNIICAgIHI1DQorUFVTSCAgICByNA0KKyNlbmRpZg0KK1BVU0ggICAgcjMNCitQVVNIICAgIHIyDQorUFVTSCAgICByMQ0KK1BVU0ggICAgcjANCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorU0FWRV9DT0RFX0RFTlNJVFkNCisjZW5kaWYNCitTQVZFX0xQX1JFR1MNCisNCitQVVNIICAgIHIxMg0KK1BVU0ggICAgZ3ANCitQVVNIICAgIGZwDQorUFVTSCAgICBpbGluaw0KK1BVU0ggICAgcjMwDQorDQorUFVTSEFYICBBVVhfRVJCVEENCisuZW5kbQ0KKw0KKy8qIGV4Y2VwdGlvbiBlcGlsb2d1ZSwgcmVzdG9yZSB0aGUgc2FtZSBmcmFtZSBvZiBpbnRlcnJ1cHQgbWFudWFsbHkgKi8NCisubWFjcm8gRVhDRVBUSU9OX0VQSUxPR1VFDQorUE9QQVggICBBVVhfRVJCVEENCisNCitQT1AgcjMwDQorUE9QIGlsaW5rDQorUE9QIGZwDQorUE9QIGdwDQorUE9QIHIxMg0KKw0KK1JFU1RPUkVfTFBfUkVHUw0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCitSRVNUT1JFX0NPREVfREVOU0lUWQ0KKyNlbmRpZg0KK1BPUCByMA0KK1BPUCByMQ0KK1BPUCByMg0KK1BPUCByMw0KKyNpZm5kZWYgQVJDX0ZFQVRVUkVfUkYxNg0KK1BPUCByNA0KK1BPUCByNQ0KK1BPUCByNg0KK1BPUCByNw0KK1BPUCByOA0KK1BPUCByOQ0KKyNlbmRpZg0KK2FkZCBzcCwgc3AsIDQgLyogcjEwIHdpbGwgYmUgcG9wcGVkIGZpbmFsbHkgKi8NCitQT1AgcjExDQorDQorUE9QIGJsaW5rDQorDQorDQorUE9QQVggICBBVVhfRVJSRVQNCithZGQgICAgIHNwLCBzcCwgNCAgLyogc2xvdCBmb3IgU0VDX1NUQVQgKi8NCitQT1BBWCAgIEFVWF9FUlNUQVRVUw0KKw0KK2xkLmFzICAgcjEwLCBbc3AsIC02XSAgIC8qIHJlc3RvcmUgcjEwICovDQorLmVuZG0NCisjZWxzZSAvKiBub3JtYWwgdmVyc2lvbiAqLw0KKy8qIGV4Y2VwdGlvbiBwcm9sb2d1ZSwgY3JlYXRlIHRoZSBzYW1lIGZyYW1lIG9mIGludGVycnVwdCBtYW51YWxseSAqLw0KKy5tYWNybyBFWENFUFRJT05fUFJPTE9HVUUNCisjaWZkZWYgIEFSQ19GRUFUVVJFX0NPREVfREVOU0lUWQ0KK3N0LmFzICAgcjEwLCBbc3AsIC0xMV0gIC8qIHNhdmUgcjEwIGZpcnN0LCBmcmVlIHVwIGEgcmVnaXN0ZXIqLw0KKyNlbHNlDQorc3QuYXMgICByMTAsIFtzcCwgLThdDQorI2VuZGlmDQorUFVTSEFYICBBVVhfRVJTVEFUVVMNCitQVVNIQVggIEFVWF9FUlJFVA0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCitTQVZFX0NPREVfREVOU0lUWQ0KKyNlbmRpZg0KK1NBVkVfTFBfUkVHUw0KKw0KK1BVU0ggICAgYmxpbmsNCisNCitQVVNIICAgIHIxMQ0KK3N1YiBzcCwgc3AsIDQgLyogcjEwIGlzICBwdXNoZWQgYmVmb3JlICovDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorUFVTSCAgICByOQ0KK1BVU0ggICAgcjgNCitQVVNIICAgIHI3DQorUFVTSCAgICByNg0KK1BVU0ggICAgcjUNCitQVVNIICAgIHI0DQorI2VuZGlmDQorUFVTSCAgICByMw0KK1BVU0ggICAgcjINCitQVVNIICAgIHIxDQorUFVTSCAgICByMA0KKw0KK1BVU0ggICAgcjEyDQorUFVTSCAgICBncA0KK1BVU0ggICAgZnANCitQVVNIICAgIGlsaW5rDQorUFVTSCAgICByMzANCisNCitQVVNIQVggIEFVWF9FUkJUQQ0KKy5lbmRtDQorDQorLyogZXhjZXB0aW9uIGVwaWxvZ3VlLCByZXN0b3JlIHRoZSBzYW1lIGZyYW1lIG9mIGludGVycnVwdCBtYW51YWxseSAqLw0KKy5tYWNybyBFWENFUFRJT05fRVBJTE9HVUUNCitQT1BBWCAgIEFVWF9FUkJUQQ0KKw0KK1BPUCByMzANCitQT1AgaWxpbmsNCitQT1AgZnANCitQT1AgZ3ANCitQT1AgcjEyDQorDQorUE9QIHIwDQorUE9QIHIxDQorUE9QIHIyDQorUE9QIHIzDQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorUE9QIHI0DQorUE9QIHI1DQorUE9QIHI2DQorUE9QIHI3DQorUE9QIHI4DQorUE9QIHI5DQorI2VuZGlmDQorYWRkIHNwLCBzcCwgNCAvKiByMTAgd2lsbCBiZSBwb3BwZWQgZmluYWxseSAqLw0KK1BPUCByMTENCisNCitQT1AgYmxpbmsNCisNCitSRVNUT1JFX0xQX1JFR1MNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorUkVTVE9SRV9DT0RFX0RFTlNJVFkNCisjZW5kaWYNCisNCitQT1BBWCAgIEFVWF9FUlJFVA0KK1BPUEFYICAgQVVYX0VSU1RBVFVTDQorDQorI2lmZGVmICBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCitsZC5hcyAgIHIxMCwgW3NwLCAtMTFdICAvKiByZXN0b3JlIHIxMCAqLw0KKyNlbHNlDQorbGQuYXMgICByMTAsIFtzcCwgLThdDQorI2VuZGlmDQorLmVuZG0NCisNCisjZW5kaWYgLyogU0VDVVJFU0hJRUxEX1ZFUlNJT04gPT0gMiAqLw0KKw0KKyNlbmRpZiAgLyogX0FSQ19IQUxfQVNNX0NPTU1PTl9IICovDQorLyoqIEBlbmRjb25kICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2J1aWx0aW4uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMjU3YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19idWlsdGluLmgKQEAgLTAsMCArMSwzMDggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDYtMTINCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfQlVJTFRJTg0KKyAqIFxicmllZiBoZWFkZXIgZmlsZSBvZiBidWlsdGluIGFuZCBoZWxwZXIgZnVuY3Rpb25zDQorICoNCisgKiBUaGUgTWV0YXdhcmUgdG9vbGNoYWluIGFuZCB0aGUgR05VIHRvb2xjaGFpbiBhcmUgc3VwcG9ydGVkLiBUaGUgZGV0YWlscyBwbGVhc2UgZ28gdG8gc2VlIHRoZSBmaWxlLg0KKyAqLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwICBBUkNfSEFMX0JVSUxUSU4NCisgKiBAew0KKyAqLw0KKw0KKyNpZm5kZWYgX0FSQ19IQUxfQlVJTFRJTl9IXw0KKyNkZWZpbmUgX0FSQ19IQUxfQlVJTFRJTl9IXw0KKw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkIChfX01XX18pICAgIC8qIE1ldGF3YXJlIHRvb2xjaGFpbiAqLw0KKw0KKyNkZWZpbmUgX2FyY19ub3AgICAgICAgICAgICBfbm9wICAgIC8qITwgbm8gb3BlcmF0aW9uLCBnZW5lcmF0ZSBhIG5vcCBpbnN0cnVjdGlvbiBwcm9kdWNlcyBhIHNpbmdsZSBOT1AgaW5zdHJ1Y3Rpb24gaW4gdGhlIGNvbXBpbGVkIGNvZGUgKi8NCisNCisjZGVmaW5lIF9hcmNfYnJrICAgICAgICAgICAgX2JyayAgICAvKiE8IGdlbmVyYXRlIGEgYnJrIGluc3RydWN0aW9uICovDQorDQorI2RlZmluZSBfYXJjX2NscmkgICAgICAgICAgIF9jbHJpICAgLyohPCBnZW5lcmF0ZSBhIGNscmkgaW5zdHJ1Y3Rpb24gKi8NCisNCisjZGVmaW5lIF9hcmNfc2V0aShjKSAgICAgICAgICAgIF9zZXRpKGMpIC8qITwgZ2VuZXJhdGUgYSBzZXRpIGluc3RydWN0aW9uICovDQorDQorI2RlZmluZSBfYXJjX2NvcmVfd3JpdGUocmVnbm8sIHZhbCkgX2NvcmVfd3JpdGUodmFsLCByZWdubykgLyohPCB3cml0ZSBjb3JlIHJlZ2lzdGVyICovDQorDQorI2RlZmluZSBfYXJjX2NvcmVfcmVhZChyZWdubykgICAgICAgX2NvcmVfcmVhZChyZWdubykgICAvKiE8IHJlYWQgY29yZSByZWdpc3RlciAqLw0KKw0KKyNkZWZpbmUgX2FyY19scl9yZWcoYXV4KSAgICAgICAgX2xyKGF1eCkgICAgLyohPCByZWFkIGF1eGlsaWFyeSByZWdpc3RlciAqLw0KKw0KKyNkZWZpbmUgX2FyY19zcl9yZWcoYXV4LCB2YWwpICAgICAgIF9zcih2YWwsIGF1eCkgICAvKiE8IHdyaXRlIGF1eGlsaWFyeSByZWdpc3RlciAqLw0KKw0KKyNkZWZpbmUgX2FyY19zbGVlcChhKSAgICAgICAgICAgX3NsZWVwKGEpICAgLyohPCBnZW5lcmF0ZSBhIHNsZWVwIGluc3RydWN0aW9uICovDQorDQorI2RlZmluZSBfYXJjX2ZsYWcoYSkgICAgICAgICAgICBfZmxhZyhhKSAgICAvKiE8IGdlbmVyYXRlIGEgZmxhZyBpbnN0cnVjdGlvbiAqLw0KKw0KKyNkZWZpbmUgX2FyY19rZmxhZyhhKQ0KKw0KKyNkZWZpbmUgX2FyY19zeW5jICAgICAgICAgICBfc3luYyAgICAgICAvKiE8IGdlbmVyYXRlIGEgc3luYyBpbnN0cnVjdGlvbiAqLw0KKw0KKy8qDQorICogITwgX2FyY191c3VhbGx5IChleHByKSBldmFsdWF0ZXMgZXhwcmVzc2lvbiBleHByIGFuZA0KKyAqIGluZm9ybXMgdGhlIGNvbXBpbGVyIHRoYXQgdGhlIHZhbHVlIGlzIHVzdWFsbHkgdHJ1ZS4NCisgKi8NCisjZGVmaW5lIF9hcmNfdXN1YWxseShhKSAgICAgICAgIF9Vc3VhbGx5KChhKSkNCisNCisvKg0KKyAqICE8IF9hcmNfcmFyZWx5IChleHByKSBldmFsdWF0ZXMgZXhwcmVzc2lvbiBleHByIGFuZA0KKyAqIGluZm9ybXMgdGhlIGNvbXBpbGVyIHRoYXQgdGhlIHZhbHVlIGlzIHJhcmVseSB0cnVlLg0KKyAqLw0KKyNkZWZpbmUgX2FyY19yYXJlbHkoYSkgICAgICAgICAgX1JhcmVseSgoYSkpDQorDQorI2lmIDANCisvKioNCisgKiBcYnJpZWYgICBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBvZiB0aGUgMTYtYml0IG9wZXJhbmQsDQorICogICAgICAgICAgcmV2ZXJzaW5nIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSB2YWx1ZS4NCisgKiAgICAgICAgICBOb3QgZm9yIEFSQyBIUyBmYW1pbHkNCisgKi8NCisjZGVmaW5lIF9hcmNfc3dhcDE2KGEpICAgICAgICAgIF9zd2FwMTYoYSkNCisvKioNCisgKiBcYnJpZWYgICBSZXZlcnNlcyB0aGUgYnl0ZSBvcmRlciBvZiB0aGUgMzItYml0IG9wZXJhbmQsDQorICogICAgICAgICAgcmV2ZXJzaW5nIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSB2YWx1ZS4NCisgKiAgICAgICAgICBOb3QgZm9yIEFSQyBIUyBmYW1pbHkNCisgKi8NCisjZGVmaW5lIF9hcmNfc3dhcDMyKGEpICAgICAgICAgIF9zd2FwMzIoYSkNCisjZWxzZQ0KK0lubGluZSB1aW50MzJfdCBfYXJjX3N3YXAzMih1aW50MzJfdCB2YWwpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCB2Ow0KKyAgICBfX2FzbV9fIHZvbGF0aWxlKCJzd2FwZSAlMCwgJTEiIDoiPXIiKHYpOiAiciIodmFsKSk7DQorICAgIHJldHVybiB2Ow0KK30NCisNCitJbmxpbmUgdWludDE2X3QgX2FyY19zd2FwMTYodWludDMyX3QgdmFsKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcDsNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdjsNCisgICAgX19hc21fXyB2b2xhdGlsZSgic3dhcGUgJTAsICUxIiA6Ij1yIih0ZW1wKTogInIiKHZhbCkpOw0KKyAgICBfX2FzbV9fIHZvbGF0aWxlKCJsc3IxNiAlMCwgJTEiIDoiPXIiKHYpOiAiciIodGVtcCkpOw0KKyAgICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KXY7DQorfQ0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxicmllZiAgIEVhY2ggY2FsbCB0byBfc3dpKCkgZ2VuZXJhdGVzIG9uZQ0KKyAqICAgICAgICAgIHNvZnR3YXJlIGludGVycnVwdCBpbnN0cnVjdGlvbiAoU1dJKSBmb3IgcHJvY2Vzc29ycw0KKyAqICAgICAgICAgIHRvIHN1cHBvcnQgdGhlIFNXSSBpbnN0cnVjdGlvbi4NCisgKi8NCisjZGVmaW5lIF9hcmNfc3dpICAgICAgICAgICAgICAgIF9zd2kNCisNCisvKiBcdG9kbyBhZGQgbW9yZSBidWlsdGluIGZ1bmN0aW9ucyBvZiBtZXRhd2FyZSB0b29sICovDQorDQorI2VsaWYgZGVmaW5lZCAoX19HTlVfXykgLyogR05VIHRvb2xjaGFpbiAqLw0KKw0KKyNkZWZpbmUgX2FyY19ub3AgICAgICAgICAgICAgICAgX19idWlsdGluX2FyY19ub3ANCisjZGVmaW5lIF9hcmNfYnJrICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfYnJrDQorI2RlZmluZSBfYXJjX3NldGkoYykgICAgICAgICAgICAgICAgX19idWlsdGluX2FyY19zZXRpKGMpDQorI2RlZmluZSBfYXJjX2NvcmVfd3JpdGUocmVnbm8sIHZhbCkgICAgIF9fYnVpbHRpbl9hcmNfY29yZV93cml0ZShyZWdubyx2YWwpDQorI2RlZmluZSBfYXJjX2NvcmVfcmVhZChyZWdubykgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfY29yZV9yZWFkKHJlZ25vKQ0KKyNkZWZpbmUgX2FyY19mbGFnKGEpICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfZmxhZyhhKQ0KKyNkZWZpbmUgX2FyY19rZmxhZyhhKSAgICAgICAgICAgICAgIF9fYnVpbHRpbl9hcmNfa2ZsYWcoYSkNCisjZGVmaW5lIF9hcmNfbHJfcmVnKGF1eCkgICAgICAgICAgICBfX2J1aWx0aW5fYXJjX2xyKGF1eCkNCisvKiBkb24ndCB1bmNvbW1lbnQgdGhpcyBub3cgKi8NCisvLyNkZWZpbmUgX2FyY19zcl9yZWcoYXV4LCB2YWwpICAgICAgICAgX19idWlsdGluX2FyY19zcihhdXgsIHZhbCkNCisjZGVmaW5lIF9hcmNfc2xlZXAoYSkgICAgICAgICAgICAgICBfX2J1aWx0aW5fYXJjX3NsZWVwKGEpDQorLy8jZGVmaW5lIF9hcmNfc3luYyAgICAgICAgICAgICBfX2J1aWx0aW5fYXJjX3N5bmMNCisNCisvKioNCisgKiBcYnJpZWYgX2FyY191c3VhbGx5IChleHByKSBldmFsdWF0ZXMgZXhwcmVzc2lvbiBleHByIGFuZA0KKyAqICAgICAgICBpbmZvcm1zIHRoZSBjb21waWxlciB0aGF0IHRoZSB2YWx1ZSBpcyB1c3VhbGx5IHRydWUuDQorICovDQorI2RlZmluZSBfYXJjX3VzdWFsbHkoYSkgICAgICAgICAgICAgX19idWlsdGluX2V4cGVjdCgoaW50KShhKSwgMSkNCisNCisvKioNCisgKiBcYnJpZWYgX2FyY19yYXJlbHkgKGV4cHIpIGV2YWx1YXRlcyBleHByZXNzaW9uIGV4cHIgYW5kDQorICogIGluZm9ybXMgdGhlIGNvbXBpbGVyIHRoYXQgdGhlIHZhbHVlIGlzIHJhcmVseSB0cnVlLg0KKyAqLw0KKyNkZWZpbmUgX2FyY19yYXJlbHkoYSkgICAgICAgICAgICAgIF9fYnVpbHRpbl9leHBlY3QoKGludCkoYSksIDApDQorDQorLyoqDQorICogXGJyaWVmICAgRWFjaCBjYWxsIHRvIF9zd2koKSBnZW5lcmF0ZXMgb25lDQorICogICAgICAgICAgc29mdHdhcmUgaW50ZXJydXB0IGluc3RydWN0aW9uIChTV0kpIGZvciBwcm9jZXNzb3JzDQorICogICAgICAgICAgdG8gc3VwcG9ydCB0aGUgU1dJIGluc3RydWN0aW9uLg0KKyAqLw0KKyNkZWZpbmUgX2FyY19zd2kgICAgICAgICAgICAgICAgX19idWlsdGluX2FyY19zd2kNCisNCitJbmxpbmUgdWludDMyX3QgX2FyY19jbHJpKHZvaWQpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCB2Ow0KKyAgICBfX2FzbV9fIHZvbGF0aWxlKCJjbHJpICUwIiA6Ij1yIih2KSk7DQorICAgIHJldHVybiB2Ow0KKw0KK30NCisvKiBcdG9kbyBhZGQgbW9yZSBidWlsdGluIGZ1bmN0aW9ucyBvZiBnbnUgdG9vbCAqLw0KKw0KK0lubGluZSB1aW50MzJfdCBfYXJjX3N3YXAzMih1aW50MzJfdCB2YWwpDQorew0KKyAgICByZWdpc3RlciB1aW50MzJfdCB2Ow0KKyAgICBfX2FzbV9fIHZvbGF0aWxlKCJzd2FwZSAlMCwgJTEiIDoiPXIiKHYpOiAiciIodmFsKSk7DQorICAgIHJldHVybiB2Ow0KK30NCisNCitJbmxpbmUgdWludDE2X3QgX2FyY19zd2FwMTYodWludDMyX3QgdmFsKQ0KK3sNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcDsNCisgICAgcmVnaXN0ZXIgdWludDMyX3QgdjsNCisgICAgX19hc21fXyB2b2xhdGlsZSgic3dhcGUgJTAsICUxIiA6Ij1yIih0ZW1wKTogInIiKHZhbCkpOw0KKyAgICBfX2FzbV9fIHZvbGF0aWxlKCJsc3IxNiAlMCwgJTEiIDoiPXIiKHYpOiAiciIodGVtcCkpOw0KKyAgICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KXY7DQorfQ0KKw0KK0lubGluZSB2b2lkIF9hcmNfc3luYyh2b2lkKQ0KK3sNCisgICAgX19hc21fXyB2b2xhdGlsZSgic3luYyIpOw0KK30NCisNCisvKioNCisgKiBcbm90ZSBGb2xsb3dpbmcgaXMgYSB3b3JrYXJvdW5kIGZvciBhcmMgZ2NjDQorICogICAgICAgYnVpbHQtaW4gZnVuY3Rpb24gX19idWlsdGluX2FyY19zci4NCisgKiAgICAgICBCdXQgaXQgaXMgd3JvbmcgaW4gR0NDIGFyYy00LjgtUjMtcmMzIGFuZCBzaG91bGRuJ3QgYmUgdXNlZC4NCisgKi8NCisNCisvKg0KKyAqIFRoZSBhdXhpbGlhcnkgcmVnaXN0ZXIgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYXMgYSBsb25nIGltbWVkaWF0ZSBvcGVyYW5kIGJ5IGNhbGxlci4NCisgKiBlLmcuDQorICogICAgd3JpdGVfYXV4X3JlZygweDY5LCBzb21lX3ZhbCk7DQorICogVGhpcyBnZW5lcmF0ZXMgdGhlIHRpZ2h0ZXN0IGNvZGUuDQorICovDQorI2RlZmluZSB3cml0ZV9hdXhfcmVnKHJlZ19pbW0sIHZhbCkgXA0KKyh7ICAgICAgICAgICAgICAgICAgXA0KKyAgICBBc20oICAgICAgICBcDQorICAgICIJc3IgICAlMCwgWyUxXQlcbiIgXA0KKyAgICA6ICAgICAgICAgICAgICAgXA0KKyAgICA6ICJpciIodmFsKSwgInIiKHJlZ19pbW0pKTsgXA0KK30pDQorDQorI2RlZmluZSBfYXJjX3NyX3JlZyhhdXgsIHZhbCkgICAgICAgICAgIHdyaXRlX2F1eF9yZWcoYXV4LCB2YWwpDQorDQorI2VuZGlmDQorDQorLyogXHRvZG8gYWRkIG1vcmUgaGVscGVyIGZ1bmN0aW9ucyBoZXJlLCBzdWNoIGFzIG1lbW9yeSBvcGVyYXRpb24gKi8NCisNCisjZGVmaW5lIF9hcmNfYXV4X3JlYWQoYXV4KSAgICAgICAgICBfYXJjX2xyX3JlZyhhdXgpDQorI2RlZmluZSBfYXJjX2F1eF93cml0ZShhdXgsIHZhbCkgICAgICAgIF9hcmNfc3JfcmVnKGF1eCwgdmFsKQ0KKw0KKy8qKg0KKyAqIFxuYW1lIGNhY2hlIHJlbGF0ZWQgaGVscGVyIGZ1bmN0aW9uDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBcYnJpZWYgIHJlYWQgbWVtb3J5IGFuZCBieXBhc3MgdGhlIGNhY2hlDQorICogXHBhcmFtW2luXSBwdHIgbWVtb3J5IGFkZHJlc3MNCisgKiBccmV0dXJuIHZhbHVlIGluIHRoZSBtZW1vcnkNCisgKi8NCitJbmxpbmUgdWludDMyX3QgX2FyY19yZWFkX3VuY2FjaGVkXzMyKHZvaWQgKnB0cikNCit7DQorICAgIHVpbnQzMl90IF9fcmV0Ow0KKyAgICBBc20oImxkLmRpICUwLCBbJTFdIjogIj1yIihfX3JldCk6ICJyIihwdHIpKTsNCisgICAgcmV0dXJuIF9fcmV0Ow0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHdyaXRlIG1lbW9yeSBhbmQgYnlwYXNzIHRoZSBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gcHRyIG1lbW9yeSBhZGRyZXNzDQorICogXHBhcmFtW2luXSBkYXRhICB2YXVsZSB0byBiZSB3cml0dGVuDQorICovDQorSW5saW5lIHZvaWQgX2FyY193cml0ZV91bmNhY2hlZF8zMih2b2lkICpwdHIsIHVpbnQzMl90IGRhdGEpDQorew0KKyAgICBBc20oInN0LmRpICUwLCBbJTFdIjo6ICJyIihkYXRhKSwgInIiKHB0cikpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHJlYWQgbWVtb3J5IHdpdGggY2FjaGUNCisgKiBccGFyYW1baW5dIHB0ciBtZW1vcnkgYWRkcmVzcw0KKyAqIFxyZXR1cm5zIHZhbHVlIGluIHRoZSBtZW1vcnkNCisgKi8NCitJbmxpbmUgdWludDMyX3QgX2FyY19yZWFkX2NhY2hlZF8zMih2b2lkICpwdHIpDQorew0KKyAgICB1aW50MzJfdCBfX3JldDsNCisgICAgQXNtKCJsZCAlMCwgWyUxXSI6ICI9ciIoX19yZXQpOiAiciIocHRyKSk7DQorICAgIHJldHVybiBfX3JldDsNCit9DQorDQorLyoqDQorICogXGJyaWVmICByZWFkIG1lbW9yeSB3aXRoIGNhY2hlDQorICogXHBhcmFtW2luXSBwdHIgbWVtb3J5IGFkZHJlc3MNCisgKiBccGFyYW1baW5dIGRhdGEgdmF1bGUgdG8gYmUgd3JpdHRlbg0KKyAqIFxyZXR1cm4gZGVzY3JpcHRpb24NCisgKi8NCitJbmxpbmUgdm9pZCBfYXJjX3dyaXRlX2NhY2hlZF8zMih2b2lkICpwdHIsIHVpbnQzMl90IGRhdGEpDQorew0KKyAgICBBc20oInN0ICUwLCBbJTFdIjo6ICJyIihkYXRhKSwgInIiKHB0cikpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZ28gdG8gbWFpbiBmdW5jdGlvbiB3aXRoIHByb3BlciBhcmd1bWVudHMNCisgKiBccGFyYW0gIGFyZ2MgYXJndW1lbnQgY291bnQNCisgKiBccGFyYW0gIGFyZ3YgYXJndW1lbnQgY29udGVudCBhcnJheQ0KKyAqIFxyZXR2YWwgcmV0dXJuIHZhbHVlIG9mIG1haW4gZnVuY3Rpb24NCisgKi8NCitJbmxpbmUgaW50MzJfdCBfYXJjX2dvdG9fbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQorew0KKyAgICBpbnQgX19yZXQ7DQorICAgIF9fYXNtX18gdm9sYXRpbGUoDQorICAgICAgICAibW92ICUlcjAsICUxXG4iDQorICAgICAgICAibW92ICUlcjEsICUyXG4iDQorICAgICAgICAicHVzaF9zICUlYmxpbmtcbiINCisgICAgICAgICJqbCBtYWluXG4iDQorICAgICAgICAicG9wX3MgJSVibGlua1xuIg0KKyAgICAgICAgIm1vdiAlMCwgJSVyMCINCisgICAgICAgIDoiPXIiKF9fcmV0KTogInIiKGFyZ2MpLCAiciIoYXJndikpOw0KKyAgICByZXR1cm4gKGludClfX3JldDsNCit9DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKExJQl9TRUNVUkVTSElFTEQpICYmIGRlZmluZWQoTElCX1NFQ1VSRVNISUVMRF9PVkVSUklERVMpICYmIChTRUNVUkVTSElFTERfVkVSU0lPTiA9PSAxKQ0KKyNkZWZpbmUgT1ZFUlJJREVfQVJDX0hBTF9CVUlMVElOX0gNCisjaW5jbHVkZSAic2VjdXJlc2hpZWxkX292ZXJyaWRlcy5oIg0KKyNlbmRpZg0KKw0KKy8qKiBAfSAqLw0KKyNlbmRpZiAvKiBfQVJDX0hBTF9CVUlMVElOX0hfICovDQorLyoqIEB9ICovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2NhY2hlLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTNmOWVlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2NhY2hlLmgKQEAgLTAsMCArMSwzNTQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfTUlTQ19DQUNIRQ0KKyAqIFxicmllZiBoZWFkZXIgZmlsZSBvZiBjYWNoZSBtb2R1bGUNCisgKi8NCisNCisjaWZuZGVmIF9BUkNfSEFMX0NBQ0hFX0hfDQorI2RlZmluZSBfQVJDX0hBTF9DQUNIRV9IXw0KKw0KKyNpbmNsdWRlICJpbmMvZW1iQVJDX3Rvb2xjaGFpbi5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorI2luY2x1ZGUgImluYy9hcmMvYXJjX2V4Y2VwdGlvbi5oIg0KKw0KKy8qKg0KKyAqIFxuYW1lIGluc3RydWN0aW9uIGNhY2hlIGNvbnRyb2wgcmVnaXN0ZXIgcmVsYXRlZCBkZWZpbml0aW9uDQorICogXHRvZG8gdGhpcyBkZWZpbml0aW9ucyB3aWxsIGJlIHJldmlld2VkLg0KKyAqIEB7DQorICovDQorI2RlZmluZSBJQ19DVFJMX0lDX0VOQUJMRSAgICAgICAgICAgMHgwIC8qITwgZW5hYmxlIGluc3RydWN0aW9uIGNhY2hlICovDQorI2RlZmluZSBJQ19DVFJMX0lDX0RJU0FCTEUgICAgICAgICAgMHgxIC8qITwgZGlzYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSAqLw0KKyNkZWZpbmUgSUNfQ1RSTF9ESVJFQ1RfQUNDRVNTICAgICAgICAgICAweDAgLyohPCBkaXJlY3QgYWNjZXNzIG1vZGUgKi8NCisjZGVmaW5lIElDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTICAgICAgICAgMHgyMCAgICAvKiE8IGluZGlyZWN0IGFjY2VzcyBtb2RlICovDQorI2RlZmluZSBJQ19DVFJMX09QX1NVQ0NFRURFRCAgICAgICAgICAgIDB4OCAvKiE8IGluc3RydWN0aW9uIGNhY2hlIG9wZXJhdGlvbiBzdWNjZWVkZWQgKi8NCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBkYXRhIGNhY2hlIGNvbnRyb2wgcmVnaXN0ZXIgcmVsYXRlZCBkZWZpbml0aW9uDQorICogXHRvZG8gdGhpcyBkZWZpbml0aW9uIHdpbGwgYmUgcmV2aWV3ZWQuDQorICogQHsNCisgKi8NCisjZGVmaW5lIElDX0NUUkxfSQ0KKyNkZWZpbmUgRENfQ1RSTF9EQ19FTkFCTEUgICAgICAgICAgIDB4MCAvKiE8IGVuYWJsZSBkYXRhIGNhY2hlICovDQorI2RlZmluZSBEQ19DVFJMX0RDX0RJU0FCTEUgICAgICAgICAgMHgxIC8qITwgZGlzYWJsZSBkYXRhIGNhY2hlICovDQorI2RlZmluZSBEQ19DVFJMX0lOVkFMSURfT05MWSAgICAgICAgICAgIDB4MCAvKiE8IGludmFsaWQgZGF0YSBjYWNoZSBvbmx5ICovDQorI2RlZmluZSBEQ19DVFJMX0lOVkFMSURfRkxVU0ggICAgICAgICAgIDB4NDAgICAgLyohPCBpbnZhbGlkIGFuZCBmbHVzaCBkYXRhIGNhY2hlICovDQorI2RlZmluZSBEQ19DVFJMX0VOQUJMRV9GTFVTSF9MT0NLRUQgICAgIDB4ODAgICAgLyohPCB0aGUgbG9ja2VkIGRhdGEgY2FjaGUgY2FuIGJlIGZsdXNoZWQgKi8NCisjZGVmaW5lIERDX0NUUkxfRElTQUJMRV9GTFVTSF9MT0NLRUQgICAgICAgIDB4MCAvKiE8IHRoZSBsb2NrZWQgZGF0YSBjYWNoZSBjYW5ub3QgYmUgZmx1c2hlZCAqLw0KKyNkZWZpbmUgRENfQ1RSTF9GTFVTSF9TVEFUVVMgICAgICAgICAgICAweDEwMCAgIC8qITwgZmx1c2ggc3RhdHVzICovDQorI2RlZmluZSBEQ19DVFJMX0RJUkVDVF9BQ0NFU1MgICAgICAgICAgIDB4MCAvKiE8IGRpcmVjdCBhY2Nlc3MgbW9kZSAgKi8NCisjZGVmaW5lIERDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTICAgICAgICAgMHgyMCAgICAvKiE8IGluZGlyZWN0IGFjY2VzcyBtb2RlICovDQorI2RlZmluZSBEQ19DVFJMX09QX1NVQ0NFRURFRCAgICAgICAgICAgIDB4NCAvKiE8IGRhdGEgY2FjaGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCAqLw0KKy8qKiBAfSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lIGluc3RydWN0aW9uIGNhY2hlIHJlbGF0ZWQgaW5saW5lIGZ1bmN0aW9uDQorICogQHsNCisgKi8NCisNCisvKioNCisgKiBcYnJpZWYgIGNoZWNrIHdoZXRoZXIgaW5zdHJ1Y3Rpb24gY2FjaGUgaXMgYXZhaWxhYmxlLA0KKyAqIDAgZm9yIG5vdCBhdmFpbGFibGUsID4wIGZvciBhdmFpbGFibGUNCisgKi8NCitJbmxpbmUgdWludDhfdCBpY2FjaGVfYXZhaWxhYmxlKHZvaWQpDQorew0KKyAgICByZXR1cm4gKF9hcmNfYXV4X3JlYWQoQVVYX0JDUl9JX0NBQ0hFKSAmIDB4Rik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZW5hYmxlIGluc3RydWN0aW9uIGNhY2hlDQorICogXHBhcmFtW2luXSBpY2FjaGVfZW5fbWFzayBvcGVyYXRpb24gbWFzaw0KKyAqLw0KK0lubGluZSB2b2lkIGljYWNoZV9lbmFibGUodWludDMyX3QgaWNhY2hlX2VuX21hc2spDQorew0KKyAgICBpZiAoIWljYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0NUUkwsIGljYWNoZV9lbl9tYXNrKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBkaXNhYmxlIGluc3RydWN0aW9uIGNhY2hlDQorICovDQorSW5saW5lIHZvaWQgaWNhY2hlX2Rpc2FibGUodm9pZCkNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfQ1RSTCwgSUNfQ1RSTF9JQ19ESVNBQkxFKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgaW5zdHJ1Y3Rpb24gY2FjaGUNCisgKi8NCitJbmxpbmUgdm9pZCBpY2FjaGVfaW52YWxpZGF0ZSh2b2lkKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIC8qIGludmFsaWRhdGUgdGhlIGVudGlyZSBpY2FjaGUgKi8NCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lDX0lWSUMsIDApOw0KKyAgICBBc20oIm5vcF9zIik7DQorICAgIEFzbSgibm9wX3MiKTsNCisgICAgQXNtKCJub3BfcyIpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGludmFsaWRhdGUgc3BlY2lmaWMgY2FjaGUgbGluZQ0KKyAqIFxwYXJhbVtpbl0gYWRkcmVzcyBtZW1vcnkgYWRkcmVzcw0KKyAqLw0KK0lubGluZSB2b2lkIGljYWNoZV9pbnZhbGlkYXRlX2xpbmUodWludDMyX3QgYWRkcmVzcykNCit7DQorICAgIGlmICghaWNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfSVZJTCwgYWRkcmVzcyk7DQorICAgIC8qIHRoZSAzIG5vcHMgYXJlIHJlcXVpcmVkIGJ5IEFSQ3YyIElTQSAqLw0KKyAgICBBc20oIm5vcF9zIik7DQorICAgIEFzbSgibm9wX3MiKTsNCisgICAgQXNtKCJub3BfcyIpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGxvY2sgc3BlY2lmaWMgY2FjaGUgbGluZQ0KKyAqIFxwYXJhbVtpbl0gYWRkcmVzcyBtZW1vcnkgYWRkcmVzcw0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQorSW5saW5lIGludDMyX3QgaWNhY2hlX2xvY2tfbGluZSh1aW50MzJfdCBhZGRyZXNzKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JQ19MSUwsIGFkZHJlc3MpOw0KKw0KKyAgICBpZiAoX2FyY19hdXhfcmVhZChBVVhfSUNfQ1RSTCkgJiBJQ19DVFJMX09QX1NVQ0NFRURFRCkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCit9DQorDQorLyoqDQorICogXGJyaWVmICBzZXQgaWNhY2hlIGFjY2VzcyBtb2RlDQorICogXHBhcmFtW2luXSBtb2RlLCBhY2Nlc3MgbW9kZSwgMTogaW5kaXJlY3QgYWNjZXNzIDA6ZGlyZWN0IGFjY2Vzcw0KKyAqLw0KK0lubGluZSB2b2lkIGljYWNoZV9hY2Nlc3NfbW9kZSh1aW50MzJfdCBtb2RlKQ0KK3sNCisgICAgaWYgKCFpY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIGlmIChtb2RlKQ0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfQ1RSTCwgX2FyY19hdXhfcmVhZChBVVhfSUNfQ1RSTCkgfCBJQ19DVFJMX0lORElSRUNUX0FDQ0VTUyk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSUNfQ1RSTCwgX2FyY19hdXhfcmVhZChBVVhfSUNfQ1RSTCkgJiAofklDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKSk7DQorICAgIH0NCit9DQorDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgZGF0YSBjYWNoZSByZWxhdGVkIGlubGluZSBmdW5jdGlvbnMNCisgKiBAew0KKyAqLw0KKw0KKy8qKg0KKyAqIFxicmllZiAgY2hlY2sgd2hldGhlciBkYXRhIGNhY2hlIGlzIGF2YWlsYWJsZSwNCisgKiAwIGZvciBub3QgYXZhaWxhYmxlLCA+MCBmb3IgYXZhaWxhYmxlDQorICovDQorSW5saW5lIHVpbnQ4X3QgZGNhY2hlX2F2YWlsYWJsZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIChfYXJjX2F1eF9yZWFkKEFVWF9CQ1JfRF9DQUNIRSkgJiAweEYpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgICBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgZGF0YSBjYWNoZQ0KKyAqLw0KK0lubGluZSB2b2lkIGRjYWNoZV9pbnZhbGlkYXRlKHZvaWQpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgdWludDMyX3Qgc3RhdHVzOw0KKw0KKyAgICBzdGF0dXMgPSBjcHVfbG9ja19zYXZlKCk7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19JVkRDLCAxKTsNCisNCisgICAgLyogd2FpdCBmb3IgZmx1c2ggY29tcGxldGlvbiAqLw0KKyAgICB3aGlsZSAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX0ZMVVNIX1NUQVRVUyk7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWMgY2FjaGUgbGluZQ0KKyAqIFxwYXJhbVtpbl0gYWRkcmVzcyBtZW1vcnkgYWRkcmVzcw0KKyAqLw0KK0lubGluZSB2b2lkIGRjYWNoZV9pbnZhbGlkYXRlX2xpbmUodWludDMyX3QgYWRkcmVzcykNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfSVZETCwgYWRkcmVzcyk7DQorICAgIEFzbSgibm9wX3MiKTsNCisgICAgQXNtKCJub3BfcyIpOw0KKyAgICBBc20oIm5vcF9zIik7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBlbmFibGUgZGF0YSBjYWNoZQ0KKyAqIFxwYXJhbVtpbl0gZGNhY2hlX2VuX21hc2sgb3BlcmF0aW9uIG1hc2sNCisgKi8NCitJbmxpbmUgdm9pZCBkY2FjaGVfZW5hYmxlKHVpbnQzMl90IGRjYWNoZV9lbl9tYXNrKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19DVFJMLCBkY2FjaGVfZW5fbWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBkaXNhYmxlIGRhdGEgY2FjaGUNCisgKi8NCitJbmxpbmUgdm9pZCBkY2FjaGVfZGlzYWJsZSh2b2lkKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19DVFJMLCBEQ19DVFJMX0RDX0RJU0FCTEUpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgZmx1c2ggZGF0YSBjYWNoZQ0KKyAqLw0KK0lubGluZSB2b2lkIGRjYWNoZV9mbHVzaCh2b2lkKQ0KK3sNCisgICAgaWYgKCFkY2FjaGVfYXZhaWxhYmxlKCkpIHsgcmV0dXJuOyB9DQorDQorICAgIHVpbnQzMl90IHN0YXR1czsNCisNCisgICAgc3RhdHVzID0gY3B1X2xvY2tfc2F2ZSgpOw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfRENfRkxTSCwgMSk7DQorDQorICAgIC8qIHdhaXQgZm9yIGZsdXNoIGNvbXBsZXRpb24gKi8NCisgICAgd2hpbGUgKF9hcmNfYXV4X3JlYWQoQVVYX0RDX0NUUkwpICYgRENfQ1RSTF9GTFVTSF9TVEFUVVMpOw0KKw0KKyAgICBjcHVfdW5sb2NrX3Jlc3RvcmUoc3RhdHVzKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBmbHVzaCB0aGUgc3BlY2lmaWMgZGF0YSBjYWNoZSBsaW5lDQorICogXHBhcmFtW2luXSBhZGRyZXNzIG1lbW9yeSBhZGRyZXNzDQorICovDQorSW5saW5lIHZvaWQgZGNhY2hlX2ZsdXNoX2xpbmUodWludDMyX3QgYWRkcmVzcykNCit7DQorICAgIGlmICghZGNhY2hlX2F2YWlsYWJsZSgpKSB7IHJldHVybjsgfQ0KKw0KKyAgICB1aW50MzJfdCBzdGF0dXM7DQorDQorICAgIHN0YXR1cyA9IGNwdV9sb2NrX3NhdmUoKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX0ZMREwsIGFkZHJlc3MpOw0KKw0KKyAgICB3aGlsZSAoX2FyY19hdXhfcmVhZChBVVhfRENfQ1RSTCkgJiBEQ19DVFJMX0ZMVVNIX1NUQVRVUyk7DQorDQorICAgIGNwdV91bmxvY2tfcmVzdG9yZShzdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGxvY2sgdGhlIHNwZWNpZmljIGRhdGEgY2FjaGUgbGluZQ0KKyAqIFxwYXJhbVtpbl0gYWRkcmVzcyBtZW1vcnkgYWRkcmVzcw0KKyAqIFxyZXR1cm4gMCwgc3VjY2VlZGVkLCAtMSwgZmFpbGVkDQorICovDQorSW5saW5lIGludCBkY2FjaGVfbG9ja19saW5lKHVpbnQzMl90IGFkZHJlc3MpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0RDX0xETCwgYWRkcmVzcyk7DQorDQorICAgIGlmIChfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmIERDX0NUUkxfT1BfU1VDQ0VFREVEKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHNldCBkY2FjaGUgYWNjZXNzIG1vZGUNCisgKiBccGFyYW1baW5dIG1vZGUsIGFjY2VzcyBtb2RlLCAxOiBpbmRpcmVjdCBhY2Nlc3MgMDpkaXJlY3QgYWNjZXNzDQorICovDQorSW5saW5lIHZvaWQgZGNhY2hlX2FjY2Vzc19tb2RlKHVpbnQzMl90IG1vZGUpDQorew0KKyAgICBpZiAoIWRjYWNoZV9hdmFpbGFibGUoKSkgeyByZXR1cm47IH0NCisNCisgICAgaWYgKG1vZGUpDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19DVFJMLCBfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSB8IERDX0NUUkxfSU5ESVJFQ1RfQUNDRVNTKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9EQ19DVFJMLCBfYXJjX2F1eF9yZWFkKEFVWF9EQ19DVFJMKSAmICh+RENfQ1RSTF9JTkRJUkVDVF9BQ0NFU1MpKTsNCisgICAgfQ0KK30NCisNCisvKiogQH0gKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBcbmFtZSBkZWNsYXJhdGlvbnMgb2YgY2FjaGUgcmVsYXRlZCBmdW5jdGlvbnMNCisgKiBAew0KKyAqLw0KK2V4dGVybiBpbnQzMl90IGljYWNoZV9pbnZhbGlkYXRlX21saW5lcyh1aW50MzJfdCBzdGFydF9hZGRyLCB1aW50MzJfdCBzaXplKTsNCitleHRlcm4gaW50MzJfdCBpY2FjaGVfbG9ja19tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSk7DQorZXh0ZXJuIGludDMyX3QgaWNhY2hlX2RpcmVjdF93cml0ZSh1aW50MzJfdCBjYWNoZV9hZGRyLCB1aW50MzJfdCB0YWcsIHVpbnQzMl90IGRhdGEpOw0KK2V4dGVybiBpbnQzMl90IGljYWNoZV9kaXJlY3RfcmVhZCh1aW50MzJfdCBjYWNoZV9hZGRyLCB1aW50MzJfdCAqdGFnLCB1aW50MzJfdCAqZGF0YSk7DQorZXh0ZXJuIGludDMyX3QgaWNhY2hlX2luZGlyZWN0X3JlYWQodWludDMyX3QgbWVtX2FkZHIsIHVpbnQzMl90ICp0YWcsIHVpbnQzMl90ICpkYXRhKTsNCitleHRlcm4gaW50MzJfdCBkY2FjaGVfaW52YWxpZGF0ZV9tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSk7DQorZXh0ZXJuIGludDMyX3QgZGNhY2hlX2ZsdXNoX21saW5lcyh1aW50MzJfdCBzdGFydF9hZGRyLCB1aW50MzJfdCBzaXplKTsNCitleHRlcm4gaW50MzJfdCBkY2FjaGVfbG9ja19tbGluZXModWludDMyX3Qgc3RhcnRfYWRkciwgdWludDMyX3Qgc2l6ZSk7DQorZXh0ZXJuIGludDMyX3QgZGNhY2hlX2RpcmVjdF93cml0ZSh1aW50MzJfdCBjYWNoZV9hZGRyLCB1aW50MzJfdCB0YWcsIHVpbnQzMl90IGRhdGEpOw0KK2V4dGVybiBpbnQzMl90IGRjYWNoZV9kaXJlY3RfcmVhZCh1aW50MzJfdCBjYWNoZV9hZGRyLCB1aW50MzJfdCAqdGFnLCB1aW50MzJfdCAqZGF0YSk7DQorZXh0ZXJuIGludDMyX3QgZGNhY2hlX2luZGlyZWN0X3JlYWQodWludDMyX3QgbWVtX2FkZHIsIHVpbnQzMl90ICp0YWcsIHVpbnQzMl90ICpkYXRhKTsNCitleHRlcm4gdm9pZCBhcmNfY2FjaGVfaW5pdCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorLyoqIEB9ICovDQorI2VuZGlmICAvKiBfQVJDX0hBTF9DQUNIRV9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19lbS5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0Y2MzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19lbS5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE0LTA2LTEyDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoqDQorICogXGZpbGUNCisgKiBcaW5ncm91cCBBUkNfSEFMX0NPUkVfRU0NCisgKiBcYnJpZWYgaGVhZGVyIGZpbGUgb2YgRU0gc2VyaWVzDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQVJDX0hBTF9DT1JFX0VNDQorICogQHsNCisgKi8NCisNCisjaWZuZGVmIF9BUkNfSEFMX0VNX0hfDQorI2RlZmluZSBfQVJDX0hBTF9FTV9IXw0KKw0KKyNpbmNsdWRlICJpbmMvYXJjL2FyYy5oIg0KKw0KKyNkZWZpbmUgQVVYX0FDQzBfTE8gICAgICgweDU4MCkNCisjZGVmaW5lIEFVWF9BQ0MwX0dMTyAgICAgICAgKDB4NTgxKQ0KKyNkZWZpbmUgQVVYX0FDQzBfSEkgICAgICgweDU4MikNCisjZGVmaW5lIEFVWF9BQ0MwX0dISSAgICAgICAgKDB4NTgzKQ0KKyNkZWZpbmUgQVVYX0RTUF9CRkxZMCAgICAgICAoMHg1OTgpDQorI2RlZmluZSBBVVhfRFNQX0ZGVF9DVFJMICAgICgweDU5ZSkNCisjZGVmaW5lIEFVWF9EU1BfQ1RSTCAgICAgICAgKDB4NTlmKQ0KKw0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAwICAgICAoMHg1YzApDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDEgICAgICgweDVjMSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMiAgICAgKDB4NWMyKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAzICAgICAoMHg1YzMpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDQgICAgICgweDVjNCkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQNSAgICAgKDB4NWM1KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVA2ICAgICAoMHg1YzYpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDcgICAgICgweDVjNykNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQOCAgICAgKDB4NWM4KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVA5ICAgICAoMHg1YzkpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDEwICAgICgweDVjYSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMTEgICAgKDB4NWNiKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAxMiAgICAoMHg1Y2MpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9BUDEzICAgICgweDVjZCkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX0FQMTQgICAgKDB4NWNlKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfQVAxNSAgICAoMHg1Y2YpDQorDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzAgICAgICgweDVkMCkNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TMSAgICAgKDB4NWQxKQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MyICAgICAoMHg1ZDIpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzMgICAgICgweDVkMykNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TNCAgICAgKDB4NWQ0KQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1M1ICAgICAoMHg1ZDUpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzYgICAgICgweDVkNikNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TNyAgICAgKDB4NWQ3KQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1M4ICAgICAoMHg1ZDgpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzkgICAgICgweDVkOSkNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TMTAgICAgKDB4NWRhKQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MxMSAgICAoMHg1ZGIpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzEyICAgICgweDVkYykNCisjZGVmaW5lIEFVWF9BR1VfQVhVX09TMTMgICAgKDB4NWRkKQ0KKyNkZWZpbmUgQVVYX0FHVV9BWFVfT1MxNCAgICAoMHg1ZGUpDQorI2RlZmluZSBBVVhfQUdVX0FYVV9PUzE1ICAgICgweDVkZikNCisNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDAgICAgKDB4NWUwKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMSAgICAoMHg1ZTEpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QyICAgICgweDVlMikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDMgICAgKDB4NWUzKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9ENCAgICAoMHg1ZTQpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0Q1ICAgICgweDVlNSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDYgICAgKDB4NWU2KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9ENyAgICAoMHg1ZTcpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0Q4ICAgICgweDVlOCkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDkgICAgKDB4NWU5KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTAgICAoMHg1ZWEpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QxMSAgICgweDVlYikNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDEyICAgKDB4NWVjKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTMgICAoMHg1ZWQpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QxNCAgICgweDVlZSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDE1ICAgKDB4NWVmKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTYgICAoMHg1ZjApDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QxNyAgICgweDVmMSkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDE4ICAgKDB4NWYyKQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMTkgICAoMHg1ZjMpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QyMCAgICgweDVmNCkNCisjZGVmaW5lIEFVWF9BR1VfQVVYX01PRDIxICAgKDB4NWY1KQ0KKyNkZWZpbmUgQVVYX0FHVV9BVVhfTU9EMjIgICAoMHg1ZjYpDQorI2RlZmluZSBBVVhfQUdVX0FVWF9NT0QyMyAgICgweDVmNykNCisNCisjZGVmaW5lIEFVWF9YQ0NNX0JBU0UgICAgICAgKDB4NWY4KQ0KKyNkZWZpbmUgQVVYX1lDQ01fQkFTRSAgICAgICAoMHg1ZjkpDQorDQorDQorLyoqIFx0b2RvIGFkZCBlbSBzZXJpZXMgc3BlY2lmaWMgZGVmaW5pdGlvbnMgaGVyZSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0FSQ19IQUxfRU1fSF8gKi8NCisNCisvKiogQH0gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljODdhOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19leGNlcHRpb24uaApAQCAtMCwwICsxLDQ3MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0wNy0xNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fQ1BVIEFSQ19IQUxfRVhDRVBUSU9OX0lOVEVSUlVQVA0KKyAqIFxicmllZiBoZWFkZXIgZmlsZSBvZiBleGNlcHRpb24gYW5kIGludGVycnVwdCBtYW5hZ2VtZW50IG1vZHVsZQ0KKyAqLw0KKw0KKyNpZm5kZWYgX0FSQ19IQUxfRVhDRVBUSU9OX0hfDQorI2RlZmluZSBfQVJDX0hBTF9FWENFUFRJT05fSF8NCisNCisjaW5jbHVkZSAiaW5jL2VtYkFSQ190b29sY2hhaW4uaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmMuaCINCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfYnVpbHRpbi5oIg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIEB7DQorICogXHRvZG8gbmVlZCBhIGNvbmYuaCBmcm9tIGFwcGxpY2F0aW9uIG9yIGJvYXJkIHRvIGRlZmluZSB0aGUNCisgKiBmZWF0dXJlcyBvZiBwcm9jZXNzb3IsIHN1Y2ggYXMgbnVtYmVyIG9mIGV4Y2VwdGlvbiwgY29kZQ0KKyAqIGRlbnNpdHkgYW5kIEZJUS4NCisgKi8NCisjaWZuZGVmIE5VTV9FWENfQ1BVDQorI2RlZmluZSBOVU1fRVhDX0NQVSAxNiAgLyohPCBudW1iZXIgb2YgQ1BVIGV4Y2VwdGlvbnMgKi8NCisjZW5kaWYNCisNCisjaWZuZGVmIE5VTV9FWENfSU5UDQorI2RlZmluZSBOVU1fRVhDX0lOVCA5ICAgLyohPCBudW1iZXIgb2YgaW50ZXJydXB0IGV4Y2VwdGlvbnMsIGRlZmluZWQgYnkgdXNlcnMqLw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgTlVNX0VYQ19BTEwgKE5VTV9FWENfQ1BVICsgTlVNX0VYQ19JTlQpIC8qITwgdG90YWwgbnVtYmVyIG9mIGV4Y2VwdGlvbnMgKi8NCisNCisNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfU0VDX1BSRVNFTlQNCit0eXBlZGVmIHN0cnVjdCBpbnRfZXhjX2ZyYW1lDQorew0KKyAgICB1aW50MzJfdCBlcmJ0YTsNCisNCisgICAgdWludDMyX3QgcjMwOyAgIC8qIHIzMCBpcyB1c2VsZXNzLCBza2lwcGVkPyAqLw0KKyAgICB1aW50MzJfdCBpbGluazsgLyogcjI5IGlzIHVzZWxlc3MsIHNraXBwZWQ/Ki8NCisgICAgLyogcjI4IGlzIHNwLCBzYXZlZCBvdGhlciBwbGFjZSAqLw0KKyAgICB1aW50MzJfdCBmcDsgICAgLyogcjI3ICovDQorICAgIHVpbnQzMl90IGdwOyAgICAvKiByMjYgKi8NCisNCisgICAgdWludDMyX3QgcjEyOw0KKw0KKyAgICB1aW50MzJfdCBscF9lbmQsIGxwX3N0YXJ0LCBscF9jb3VudDsNCisNCisjaWZkZWYgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorICAgIHVpbnQzMl90IGVpLCBsZGksIGpsaTsNCisjZW5kaWYNCisNCisgICAgdWludDMyX3QgcjAsIHIxLCByMiwgcjM7DQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorICAgIHVpbnQzMl90IHI0LCByNSwgcjYsIHI3LCByOCwgcjk7DQorI2VuZGlmDQorICAgIHVpbnQzMl90IHIxMCwgcjExOw0KKw0KKyAgICB1aW50MzJfdCBibGluazsgLyogcjMxICovDQorICAgIHVpbnQzMl90IHJldDsNCisgICAgdWludDMyX3Qgc2VjX3N0YXQ7DQorICAgIHVpbnQzMl90IHN0YXR1czMyOw0KK30gRU1CQVJDX1BBQ0tFRCBJTlRfRVhDX0ZSQU1FOw0KKyNlbHNlDQordHlwZWRlZiBzdHJ1Y3QgaW50X2V4Y19mcmFtZQ0KK3sNCisgICAgdWludDMyX3QgZXJidGE7DQorDQorICAgIHVpbnQzMl90IHIzMDsgICAvKiByMzAgaXMgdXNlbGVzcywgc2tpcHBlZD8gKi8NCisgICAgdWludDMyX3QgaWxpbms7IC8qIHIyOSBpcyB1c2VsZXNzLCBza2lwcGVkPyovDQorICAgIC8qIHIyOCBpcyBzcCwgc2F2ZWQgb3RoZXIgcGxhY2UgKi8NCisgICAgdWludDMyX3QgZnA7ICAgIC8qIHIyNyAqLw0KKyAgICB1aW50MzJfdCBncDsgICAgLyogcjI2ICovDQorDQorICAgIHVpbnQzMl90IHIxMjsNCisNCisgICAgdWludDMyX3QgcjAsIHIxLCByMiwgcjM7DQorI2lmbmRlZiBBUkNfRkVBVFVSRV9SRjE2DQorICAgIHVpbnQzMl90IHI0LCByNSwgcjYsIHI3LCByOCwgcjk7DQorI2VuZGlmDQorICAgIHVpbnQzMl90IHIxMCwgcjExOw0KKw0KKyAgICB1aW50MzJfdCBibGluazsgLyogcjMxICovDQorDQorICAgIHVpbnQzMl90IGxwX2VuZCwgbHBfc3RhcnQsIGxwX2NvdW50Ow0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkNCisgICAgdWludDMyX3QgZWksIGxkaSwgamxpOw0KKyNlbmRpZg0KKw0KKyAgICB1aW50MzJfdCByZXQ7DQorICAgIHVpbnQzMl90IHN0YXR1czMyOw0KK30gRU1CQVJDX1BBQ0tFRCBJTlRfRVhDX0ZSQU1FOw0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgc3RydWN0IGNhbGxlZV9mcmFtZQ0KK3sNCisjaWZuZGVmIEFSQ19GRUFUVVJFX1JGMTYNCisgICAgdWludDMyX3QgcjI1Ow0KKyAgICB1aW50MzJfdCByMjQ7DQorICAgIHVpbnQzMl90IHIyMzsNCisgICAgdWludDMyX3QgcjIyOw0KKyAgICB1aW50MzJfdCByMjE7DQorICAgIHVpbnQzMl90IHIyMDsNCisgICAgdWludDMyX3QgcjE5Ow0KKyAgICB1aW50MzJfdCByMTg7DQorICAgIHVpbnQzMl90IHIxNzsNCisgICAgdWludDMyX3QgcjE2Ow0KKyNlbmRpZg0KKyAgICB1aW50MzJfdCByMTU7DQorICAgIHVpbnQzMl90IHIxNDsNCisgICAgdWludDMyX3QgcjEzOw0KK30gRU1CQVJDX1BBQ0tFRCBDQUxMRUVfRlJBTUU7DQorDQordHlwZWRlZiBzdHJ1Y3QgcHJvY2Vzc29yX2ZyYW1lDQorew0KKyAgICBDQUxMRUVfRlJBTUUgY2FsbGVlX3JlZ3M7DQorICAgIElOVF9FWENfRlJBTUUgZXhjX2ZyYW1lOw0KK30gRU1CQVJDX1BBQ0tFRCBQUk9DRVNTT1JfRlJBTUU7DQorDQorI2RlZmluZSBBUkNfUFJPQ0VTU09SX0ZSQU1FX1NJWkUgICAgKHNpemVvZihQUk9DRVNTT1JfRlJBTUUpIC8gc2l6ZW9mKHVpbnQzMl90KSkNCisjZGVmaW5lIEFSQ19FWENfRlJBTUVfU0laRSAgICAgIChzaXplb2YoSU5UX0VYQ19GUkFNRSkgLyBzaXplb2YodWludDMyX3QpKQ0KKyNkZWZpbmUgQVJDX0NBTExFRV9GUkFNRV9TSVpFICAgICAgIChzaXplb2YoQ0FMTEVFX0ZSQU1FKSAvIHNpemVvZih1aW50MzJfdCkpDQorDQorDQorZXh0ZXJuIHVpbnQzMl90IGV4Y19uZXN0X2NvdW50Ow0KKw0KKy8qKg0KKyAqIFxicmllZiB3cml0ZSB0aGUgZXhjZXB0aW9uIHZlY3RvciBiYXNlDQorICoNCisgKiBccGFyYW1baW5dIHZlY19iYXNlIHRoZSB0YXJnZXQgdmVjdG9yIGJhc2UNCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfdmVjdG9yX2Jhc2Vfd3JpdGUoY29uc3Qgdm9pZCAqdmVjX2Jhc2UpDQorew0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSU5UX1ZFQ1RfQkFTRSwgKHVpbnQzMl90KXZlY19iYXNlKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmIHJlYWQgY3VycmVudCBleGNlcHRpb24gdmVjdG9yIGJhc2UNCisgKg0KKyAqIFxyZXR1cm5zIGV4Y2VwdGlvbiB2ZWN0b3IgYmFzZSAodWludDMyX3QpDQorICovDQorSW5saW5lIHVpbnQzMl90IGFyY192ZWN0b3JfYmFzZV9yZWFkKHZvaWQpDQorew0KKyAgICByZXR1cm4gX2FyY19hdXhfcmVhZChBVVhfSU5UX1ZFQ1RfQkFTRSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgc2Vuc2Ugd2hldGhlciBpbiBleGMvaW50ZXJydXB0IHByb2Nlc3NpbmcNCisgKg0KKyAqIFxyZXR2YWwgMCAgICBub3QgaW4gZXhjL2ludGVycnVwdCBwcm9jZXNzaW5nDQorICogXHJldHZhbCAxICAgIGluIGV4Yy9pbnRlcnJ1cHQgcHJvY2Vzc2luZw0KKyAqLw0KK0lubGluZSB1aW50MzJfdCBleGNfc2Vuc2Uodm9pZCkNCit7DQorICAgIHJldHVybiAoZXhjX25lc3RfY291bnQgPiAwVSk7DQorfQ0KKw0KKy8qKiBAfSovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fSU5URVJSVVBUDQorICogQHsNCisgKi8NCisjaWZuZGVmIElOVF9QUklfTUlODQorI2RlZmluZSBJTlRfUFJJX01JTiAoLTIpICAgICAgICAvKiE8IHRoZSBtaW5pbXVtIGludGVycnVwdCBwcmlvcml0eSAqLw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgSU5UX1BSSV9NQVggKC0xKSAgICAgICAgLyohPCB0aGUgbWF4aW11bSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8NCisvKioNCisgKiBcYnJpZWYgZGlzYWJsZSB0aGUgc3BlY2lmaWMgaW50ZXJydXB0DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfaW50X2Rpc2FibGUoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1NFTEVDVCwgaW50bm8pOw0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX0VOQUJMRSwgMCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZW5hYmxlIHRoZSBzcGVjaWZpYyBpbnQNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqLw0KK0lubGluZSB2b2lkIGFyY19pbnRfZW5hYmxlKGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9TRUxFQ1QsIGludG5vKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9FTkFCTEUsIDEpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmljIGludCBpcyBlbmFibGVkDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccmV0dXJuIDAgZGlzYWJsZWQsIDEgZW5hYmxlZA0KKyAqLw0KK0lubGluZSB1aW50MzJfdCBhcmNfaW50X2VuYWJsZWQoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1NFTEVDVCwgaW50bm8pOw0KKyAgICByZXR1cm4gX2FyY19hdXhfcmVhZChBVVhfSVJRX0VOQUJMRSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgZ2V0IHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgbWFzaw0KKyAqDQorICogXHJldHVybnMgaW50ZXJydXB0IHByaW9yaXR5IG1hc2ssIG5lZ2F0aXZlIG51bQ0KKyAqLw0KK0lubGluZSB1aW50MzJfdCBhcmNfaW50X2lwbV9nZXQodm9pZCkNCit7DQorICAgIHJldHVybiAoKF9hcmNfYXV4X3JlYWQoQVVYX1NUQVRVUzMyKSA+PiAxKSAmIDB4MGYpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHNldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5IG1hc2sNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50cHJpIGludGVycnVwdCBwcmlvcml0eQ0KKyAqLw0KK0lubGluZSB2b2lkIGFyY19pbnRfaXBtX3NldCh1aW50MzJfdCBpbnRwcmkpDQorew0KKyAgICB2b2xhdGlsZSB1aW50MzJfdCBzdGF0dXM7DQorICAgIHN0YXR1cyA9IF9hcmNfYXV4X3JlYWQoQVVYX1NUQVRVUzMyKSAmIH4weDFlOw0KKw0KKyAgICBzdGF0dXMgPSBzdGF0dXMgfCAoKGludHByaSA8PCAxKSAmIDB4MWUpOw0KKyAgICAvKiBzciBjYW5ub3Qgd3JpdGUgQVVYX1NUQVRVUzMyICovDQorICAgIEFzbSgia2ZsYWcgJTAiOjoiaXIiKHN0YXR1cykpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIGdldCBjdXJyZW50IGludGVycnVwdCBwcmlvcml0eSBtYXNrDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKi8NCitJbmxpbmUgdWludDMyX3QgYXJjX2ludF9wcmlfZ2V0KGNvbnN0IHVpbnQzMl90IGludG5vKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9TRUxFQ1QsIGludG5vKTsNCisgICAgcmV0dXJuIF9hcmNfYXV4X3JlYWQoQVVYX0lSUV9QUklPUklUWSk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiBzZXQgaW50ZXJydXB0IHByaW9yaXR5DQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccGFyYW1baW5dIGludHByaSBpbnRlcnJ1cHQgcHJpb3JpdHkNCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfaW50X3ByaV9zZXQoY29uc3QgdWludDMyX3QgaW50bm8sIHVpbnQzMl90IGludHByaSkNCit7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfUFJJT1JJVFksIGludHByaSB8IChfYXJjX2F1eF9yZWFkKEFVWF9JUlFfUFJJT1JJVFkpICYgMHhmZmZmZmZmMCkpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgc2V0IGludGVycnVwdCBzZWN1cmUgb3Igbm90IHNlY3VyZQ0KKyAqDQorICogXHBhcmFtW2luXSBpbnRubyBpbnRlcnJ1cHQgbnVtYmVyDQorICogXHBhcmFtW2luXSBzZWN1cmUsIDAgZm9yIG5vcm1hbCwgPjAgZm9yIHNlY3VyZQ0KKyAqLw0KK0lubGluZSB2b2lkIGFyY19pbnRfc2VjdXJlX3NldChjb25zdCB1aW50MzJfdCBpbnRubywgdWludDMyX3Qgc2VjdXJlKQ0KK3sNCisNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9TRUxFQ1QsIGludG5vKTsNCisNCisgICAgaWYgKHNlY3VyZSkNCisgICAgew0KKyAgICAgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9QUklPUklUWSwgX2FyY19hdXhfcmVhZChBVVhfSVJRX1BSSU9SSVRZKSB8DQorICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBBVVhfSVJRX1BSSU9SSVRZX0JJVF9TKSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX1BSSU9SSVRZLCBfYXJjX2F1eF9yZWFkKEFVWF9JUlFfUFJJT1JJVFkpICYgMHhmKTsNCisgICAgfQ0KKw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHByb2JlIHRoZSBwZW5kaW5nIHN0YXR1cyBvZiBpbnRlcnJ1cHQNCisgKg0KKyAqIFxwYXJhbVtpbl0gaW50bm8gaW50ZXJydXB0IG51bWJlcg0KKyAqDQorICogXHJldHVybnMgMSBwZW5kaW5nLCAwIG5vIHBlbmRpbmcNCisgKi8NCitJbmxpbmUgdWludDMyX3QgYXJjX2ludF9wcm9iZShjb25zdCB1aW50MzJfdCBpbnRubykNCit7DQorICAgIF9hcmNfYXV4X3dyaXRlKEFVWF9JUlFfU0VMRUNULCBpbnRubyk7DQorICAgIHJldHVybiBfYXJjX2F1eF9yZWFkKEFVWF9JUlFfUEVORElORyk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgdHJpZ2dlciB0aGUgaW50ZXJydXB0IGluIHNvZnR3YXJlDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfaW50X3N3X3RyaWdnZXIoY29uc3QgdWludDMyX3QgaW50bm8pDQorew0KKyAgICBfYXJjX2F1eF93cml0ZShBVVhfSVJRX0hJTlQsIGludG5vKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBjb25maWcgdGhlIGludGVycnVwdCBsZXZlbCB0cmlnZ2VyZWQgb3IgcHVsc2UgdHJpZ2dlcmVkDQorICoNCisgKiBccGFyYW1baW5dIGludG5vIGludGVycnVwdCBudW1iZXINCisgKiBccGFyYW1baW5dIGxldmVsLCAwLWxldmVsIHRyaWdnZXIsIDEtcGx1c2UgdHJpZ2dlcmVkDQorICovDQorSW5saW5lIHZvaWQgYXJjX2ludF9sZXZlbF9jb25maWcoY29uc3QgdWludDMyX3QgaW50bm8sIGNvbnN0IHVpbnQzMl90IGxldmVsKQ0KK3sNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9TRUxFQ1QsIGludG5vKTsNCisgICAgX2FyY19hdXhfd3JpdGUoQVVYX0lSUV9UUklHR0VSLCBsZXZlbCk7DQorfQ0KKw0KKy8qKg0KKyAqIFxicmllZiAgbG9jayBjcHUsIGRpc2FibGUgaW50ZXJydXB0cw0KKyAqLw0KK0lubGluZSB2b2lkIGFyY19sb2NrKHZvaWQpDQorew0KKyAgICBBc20oImNscmkiKTsNCisgICAgQXNtKCIiOjo6ICJtZW1vcnkiKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICB1bmxvY2sgY3B1LCBlbmFibGUgaW50ZXJydXB0cyB0byBoYXBwZW4NCisgKi8NCitJbmxpbmUgdm9pZCBhcmNfdW5sb2NrKHZvaWQpDQorew0KKyAgICBBc20oIiI6OjogIm1lbW9yeSIpOw0KKyAgICBBc20oInNldGkiKTsNCit9DQorDQorLyoqDQorICogXGJyaWVmICBsb2NrIGNwdSBhbmQgc3RhdXMNCisgKg0KKyAqIFxyZXR1cm5zIGNwdSBzdGF0dXMNCisgKi8NCitJbmxpbmUgdWludDMyX3QgYXJjX2xvY2tfc2F2ZSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIF9hcmNfY2xyaSgpOw0KK30NCisNCisvKioNCisgKiBcYnJpZWYgIHVubG9jayBjcHUgd2l0aCB0aGUgc3BlY2lmaWMgc3RhdHVzDQorICoNCisgKiBccGFyYW1baW5dIHN0YXR1cyAgY3B1IHN0YXR1cyBzYXZlZCBieSBjcHVfbG9ja19zYXZlDQorICovDQorSW5saW5lIHZvaWQgYXJjX3VubG9ja19yZXN0b3JlKGNvbnN0IHVpbnQzMl90IHN0YXR1cykNCit7DQorICAgIF9hcmNfc2V0aShzdGF0dXMpOw0KK30NCisvKiogQH0qLw0KKw0KKy8qKg0KKyAqIFxhZGR0b2dyb3VwIEFSQ19IQUxfRVhDRVBUSU9OX0NQVQ0KKyAqIEB7DQorICovDQorLyoqDQorICogXHR5cGVkZWYgRVhDX0VOVFJZDQorICogXGJyaWVmICB0aGUgZGF0YSB0eXBlIGZvciBleGNlcHRpb24gZW50cnkNCisgKi8NCit0eXBlZGVmIHZvaWQgKCpFWENfRU5UUlkpKHZvaWQpOw0KKy8qKg0KKyAqIFx0eXBlZGVmIEVYQ19IQU5ETEVSDQorICogXGJyaWVmICB0aGUgZGF0YSB0eXBlIGZvciBleGNlcHRpb24gaGFuZGxlcg0KKyAqLw0KK3R5cGVkZWYgdm9pZCAoKkVYQ19IQU5ETEVSKSh2b2lkICpleGNfZnJhbWUpOw0KKy8qKiBAfSovDQorDQorDQorLyoqDQorICogXGluZ3JvdXAgQVJDX0hBTF9FWENFUFRJT05fSU5URVJSVVBUDQorICogXHR5cGVkZWYgSU5UX0hBTkRMRVINCisgKiBcYnJpZWYgIHRoZSBkYXRhIHR5cGUgZm9yIGludGVycnVwdCBoYW5kbGVyDQorICovDQordHlwZWRlZiB2b2lkICgqSU5UX0hBTkRMRVIpKHZvaWQgKnB0cik7DQorDQorZXh0ZXJuIEVYQ19FTlRSWSBleGNfZW50cnlfdGFibGVbTlVNX0VYQ19BTExdOw0KK2V4dGVybiBFWENfSEFORExFUiBleGNfaW50X2hhbmRsZXJfdGFibGVbTlVNX0VYQ19BTExdOw0KKw0KKy8qKiBcaW5ncm91cCBBUkNfSEFMX0VYQ0VQVElPTl9DUFUNCisgKiBAew0KKyAqLw0KKy8qKg0KKyAqIFxmbiBfYXJjX3Jlc2V0DQorICogXGJyaWVmIHRoZSByZXNldCBlbnRyeQ0KKyAqLw0KK2V4dGVybiB2b2lkIF9hcmNfcmVzZXQodm9pZCk7DQorLyoqDQorICogXGZuIGV4Y19lbnRyeV9jcHUNCisgKiBcYnJpZWYgdGhlIGRlZmF1bHQgQ1BVIGV4Y2VwdGlvbiBlbnRyeQ0KKyAqLw0KK2V4dGVybiB2b2lkIGV4Y19lbnRyeV9jcHUodm9pZCk7DQorDQorLyoqDQorICogXGZuIGV4Y19lbnRyeV9maXJxDQorICogXGJyaWVmIHRoZSBmYXN0IGludGVycnVwdCBleGNlcHRpb24gZW50cnkNCisgKi8NCitleHRlcm4gdm9pZCBleGNfZW50cnlfZmlycSh2b2lkKTsNCisvKioNCisgKiBcZm4gZXhjX2VudHJ5X2ludA0KKyAqIFxicmllZiB0aGUgaW50ZXJydXB0IGV4Y2VwdGlvbiBlbnRyeQ0KKyAqLw0KK2V4dGVybiB2b2lkIGV4Y19lbnRyeV9pbnQodm9pZCk7DQorLyoqIEB9Ki8NCisNCisvKiBleGNldHBpb24gcmVsYXRlZCBhcGlzICovDQorZXh0ZXJuIHZvaWQgZXhjX2ludF9pbml0KHZvaWQpOw0KK2V4dGVybiBpbnQzMl90IGV4Y19lbnRyeV9pbnN0YWxsKGNvbnN0IHVpbnQzMl90IGV4Y25vLCBFWENfRU5UUlkgZW50cnkpOw0KK2V4dGVybiBFWENfRU5UUlkgZXhjX2VudHJ5X2dldChjb25zdCB1aW50MzJfdCBleGNubyk7DQorZXh0ZXJuIGludDMyX3QgZXhjX2hhbmRsZXJfaW5zdGFsbChjb25zdCB1aW50MzJfdCBleGNubywgRVhDX0hBTkRMRVIgaGFuZGxlcik7DQorZXh0ZXJuIEVYQ19IQU5ETEVSIGV4Y19oYW5kbGVyX2dldChjb25zdCB1aW50MzJfdCBleGNubyk7DQorDQorLyogaW50ZXJydXB0IHJlbGF0ZWQgYXBpcyAqLw0KK2V4dGVybiBpbnQzMl90IGludF9kaXNhYmxlKGNvbnN0IHVpbnQzMl90IGludG5vKTsNCitleHRlcm4gaW50MzJfdCBpbnRfZW5hYmxlKGNvbnN0IHVpbnQzMl90IGludG5vKTsNCitleHRlcm4gaW50MzJfdCBpbnRfZW5hYmxlZChjb25zdCB1aW50MzJfdCBpbnRubyk7DQorZXh0ZXJuIGludDMyX3QgaW50X2lwbV9nZXQodm9pZCk7DQorZXh0ZXJuIGludDMyX3QgaW50X2lwbV9zZXQoaW50MzJfdCBpbnRwcmkpOw0KK2V4dGVybiBpbnQzMl90IGludF9wcmlfZ2V0KGNvbnN0IHVpbnQzMl90IGludG5vKTsNCitleHRlcm4gaW50MzJfdCBpbnRfcHJpX3NldChjb25zdCB1aW50MzJfdCBpbnRubywgaW50MzJfdCBpbnRwcmkpOw0KK2V4dGVybiBpbnQzMl90IGludF9wcm9iZShjb25zdCB1aW50MzJfdCBpbnRubyk7DQorZXh0ZXJuIGludDMyX3QgaW50X3N3X3RyaWdnZXIoY29uc3QgdWludDMyX3QgaW50bm8pOw0KK2V4dGVybiBpbnQzMl90IGludF9sZXZlbF9jb25maWcoY29uc3QgdWludDMyX3QgaW50bm8sIGNvbnN0IHVpbnQzMl90IGxldmVsKTsNCitleHRlcm4gdm9pZCBjcHVfbG9jayh2b2lkKTsNCitleHRlcm4gdm9pZCBjcHVfdW5sb2NrKHZvaWQpOw0KK2V4dGVybiB1aW50MzJfdCBjcHVfbG9ja19zYXZlKHZvaWQpOw0KK2V4dGVybiB2b2lkIGNwdV91bmxvY2tfcmVzdG9yZShjb25zdCB1aW50MzJfdCBzdGF0dXMpOw0KK2V4dGVybiBpbnQzMl90IGludF9oYW5kbGVyX2luc3RhbGwoY29uc3QgdWludDMyX3QgaW50bm8sIElOVF9IQU5ETEVSIGhhbmRsZXIpOw0KK2V4dGVybiBJTlRfSEFORExFUiBpbnRfaGFuZGxlcl9nZXQoY29uc3QgdWludDMyX3QgaW50bm8pOw0KK2V4dGVybiBpbnQzMl90IGludF9zZWN1cmVfc2V0KGNvbnN0IHVpbnQzMl90IGludG5vLCB1aW50MzJfdCBzZWN1cmUpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChMSUJfU0VDVVJFU0hJRUxEKSAmJiBkZWZpbmVkKExJQl9TRUNVUkVTSElFTERfT1ZFUlJJREVTKSAmJiAoU0VDVVJFU0hJRUxEX1ZFUlNJT04gPT0gMSkNCisjZGVmaW5lIE9WRVJSSURFX0FSQ19IQUxfRVhDRVBUSU9OX0gNCisjaW5jbHVkZSAic2VjdXJlc2hpZWxkX292ZXJyaWRlcy5oIg0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfQVJDX0hBTF9FWENFUFRJT05fSF8qLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19mZWF0dXJlX2NvbmZpZy5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX2ZlYXR1cmVfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2MmU0MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY19mZWF0dXJlX2NvbmZpZy5oCkBAIC0wLDAgKzEsMzk3IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTYuMDUNCisgKiBcZGF0ZSAyMDE2LTA5LTA4DQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgQVJDX0hBTF9NSVNDDQorICogXGJyaWVmIGhlYWRlciBmaWxlIGZvciBhcmMgZmVhdHVyZSBjb25maWd1cmF0aW9uDQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgQVJDX0hBTF9NSVNDDQorICogQHsNCisgKi8NCisNCisjaWZuZGVmIF9BUkNfRkVBVFVSRV9DT05GSUdfSF8NCisjZGVmaW5lIF9BUkNfRkVBVFVSRV9DT05GSUdfSF8NCisNCisvLyBFbmFibGUgY29yZV9jb25maWcuaCBpbiBFTVNLIE9TUA0KKy8vI2lmZGVmIEVNQkFSQ19UQ0ZfR0VORVJBVEVEDQorI2luY2x1ZGUgImFyY19jb3JlX2NvbmZpZy5oIg0KKy8vI2VuZGlmDQorDQorLyoqIEFSQyBiYXNlbGluZSBpbnN0cnVjdGlvbiBzZXQgdmVyc2lvbiBudW1iZXIgKi8NCisjaWYgIWRlZmluZWQoX0FSQ1ZFUikNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19jaXJfaWRlbnRpdHlfYXJjdmVyKQ0KKyNkZWZpbmUgX0FSQ1ZFUiAgICAgICAgICAgICBjb3JlX2NvbmZpZ19jaXJfaWRlbnRpdHlfYXJjdmVyDQorI2Vsc2UNCisjZGVmaW5lIF9BUkNWRVIgICAgICAgICAgICAgMHg0Mg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBBUkMgQ1BVIENsb2NrIEZyZXF1ZW5jeSBpbiBIeiB1bml0ICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0NQVV9DTE9DS19GUkVRKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2Nsb2NrX3NwZWVkKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfQ1BVX0NMT0NLX0ZSRVEgIChjb3JlX2NvbmZpZ19jbG9ja19zcGVlZCoxMDAwMDAwKQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBBUkMgUEMgc2l6ZSAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9QQ19TSVpFKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3BjX3NpemUpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9QQ19TSVpFICAgICBjb3JlX2NvbmZpZ19wY19zaXplDQorI2Vsc2UNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1BDX1NJWkUgICAgIDMyDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIEFSQyBMUEMgc2l6ZSAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9MUENfU0laRSkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19scGNfc2l6ZSkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0xQQ19TSVpFICAgICAgICBjb3JlX2NvbmZpZ19scGNfc2l6ZQ0KKyNlbHNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9MUENfU0laRSAgICAgICAgMzINCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogQVJDIEFkZHIgc2l6ZSAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9BRERSX1NJWkUpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfYWRkcl9zaXplKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfQUREUl9TSVpFICAgICAgIGNvcmVfY29uZmlnX2FkZHJfc2l6ZQ0KKyNlbHNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9BRERSX1NJWkUgICAgICAgMzINCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogQVJDIEVuZGlhbi9CeXRlIE9yZGVyICovDQorI2RlZmluZSBBUkNfRkVBVFVSRV9MSVRUTEVfRU5ESUFOICAgMTIzNA0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfQklHX0VORElBTiAgICAgIDQzMjENCisNCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfQllURV9PUkRFUikNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19iKQ0KKyNpZiBjb3JlX2NvbmZpZ19iY3JfaXNhX2NvbmZpZ19iID09IDANCisjZGVmaW5lIEFSQ19GRUFUVVJFX0JZVEVfT1JERVIgICAgICBBUkNfRkVBVFVSRV9MSVRUTEVfRU5ESUFODQorI2Vsc2UNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0JZVEVfT1JERVIgICAgICBBUkNfRkVBVFVSRV9CSUdfRU5ESUFODQorI2VuZGlmDQorI2Vsc2UNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0JZVEVfT1JERVIgICAgICBBUkNfRkVBVFVSRV9MSVRUTEVfRU5ESUFODQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFJlZHVjZWQgcmVnaXN0ZXIgb3B0aW9uLCBpZiBlbmFibGVkLCBBUkNfRkVBVFVSRV9SRjE2IHdpbGwgYmUgZGVmaW5lZCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9SRjE2KQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2Jjcl9yZl9idWlsZF9lKSAmJiBjb3JlX2NvbmZpZ19iY3JfcmZfYnVpbGRfZSA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9SRjE2DQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFVuYWxpZ25lZCBhY2Nlc3Mgb3B0aW9uLCBpZiBlbmFibGVkLCBBUkNfRkVBVFVSRV9VTkFMSUdORUQgd2lsbCBiZSBkZWZpbmVkICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1VOQUxJR05FRCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ191bmFsaWduZWQpICYmIGNvcmVfY29uZmlnX3VuYWxpZ25lZCA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9VTkFMSUdORUQNCisjZW5kaWYNCisjZW5kaWYNCisNCisNCisvKiogQ29kZSBkZW5zaXR5IG9wdGlvbiwgaWYgZW5hYmxlZCwgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZIHdpbGwgYmUgZGVmaW5lZCAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9DT0RFX0RFTlNJVFkpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfY29kZV9kZW5zaXR5KSAmJiBjb3JlX2NvbmZpZ19jb2RlX2RlbnNpdHkgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfQ09ERV9ERU5TSVRZDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFRoZSBudW1iZXIgb2YgcmVnaXN0ZXIgZmlsZSBiYW5rcyAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9SR0ZfTlVNX0JBTktTKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3JnZl9udW1fYmFua3MpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9SR0ZfTlVNX0JBTktTICAgY29yZV9jb25maWdfcmdmX251bV9iYW5rcw0KKyNlbHNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9SR0ZfTlVNX0JBTktTICAgMQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBUaGUgbnVtYmVyIG9mIHJlZ2lzdGVycyByZXBsaWNhdGVkIHBlciByZWdpc3RlciBiYW5rICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1JHRl9CQU5LRURfUkVHUykNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19yZ2ZfYmFua2VkX3JlZ3MpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9SR0ZfQkFOS0VEX1JFR1MgY29yZV9jb25maWdfcmdmX2JhbmtlZF9yZWdzDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIEludGVycnVwdCB1bml0IHByZXNlbmNlICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0lOVEVSUlVQVFNfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX3ByZXNlbnQpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JTlRFUlJVUFRTX1BSRVNFTlQgIGNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJlc2VudA0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBGSVJRX09QVElPTiBjb25maWd1cmF0aW9uIG9wdGlvbiwgMSBmb3IgZW5hYmxlZCwgMCBmb3IgZGlzYWJsZWQgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfRklSUSkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19iY3JfaXJxX2J1aWxkX2YpDQorI2RlZmluZSBBUkNfRkVBVFVSRV9GSVJRICAgICAgICBjb3JlX2NvbmZpZ19iY3JfaXJxX2J1aWxkX2YNCisjZWxzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRklSUSAgICAgICAgMA0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBUaGUgbnVtYmVyIG9mIGludGVycnVwdHMgKi8NCisjaWYgIWRlZmluZWQoTlVNX0VYQ19JTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfaW50ZXJydXB0c19udW1iZXIpDQorI2RlZmluZSBOVU1fRVhDX0lOVCAgICAgICAgIGNvcmVfY29uZmlnX2ludGVycnVwdHNfbnVtYmVyDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFRoZSBudW1iZXIgb2YgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLw0KKyNpZiAhZGVmaW5lZChOVU1fRVhDX0VYVF9JTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfaW50ZXJydXB0c19leHRlcm5hbHMpDQorI2RlZmluZSBOVU1fRVhDX0VYVF9JTlQgICAgICAgICBjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX2V4dGVybmFscw0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBUaGUgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAqLw0KKyNpZiAhZGVmaW5lZChJTlRfUFJJX01JTikNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19pbnRlcnJ1cHRzX3ByaW9yaXRpZXMpDQorI2RlZmluZSBJTlRfUFJJX01JTiAgICAgICAgICgtY29yZV9jb25maWdfaW50ZXJydXB0c19wcmlvcml0aWVzKQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8vIEFSQyBUSU1FUl9CVUlMRA0KKy8qKiBUaW1lcjAgcHJlc2VudCBvciBub3QgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfVElNRVIwX1BSRVNFTlQpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfdGltZXIwKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfVElNRVIwX1BSRVNFTlQgIGNvcmVfY29uZmlnX3RpbWVyMA0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfVElNRVIwX0xFVkVMICAgIChjb3JlX2NvbmZpZ190aW1lcjBfbGV2ZWwtY29yZV9jb25maWdfaW50ZXJydXB0c19wcmlvcml0aWVzKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfVElNRVIwX1ZFQ1RPUiAgIGNvcmVfY29uZmlnX3RpbWVyMF92ZWN0b3INCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogVGltZXIxIHByZXNlbnQgb3Igbm90ICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1RJTUVSMV9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3RpbWVyMSkNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1RJTUVSMV9QUkVTRU5UICBjb3JlX2NvbmZpZ190aW1lcjENCisjZGVmaW5lIEFSQ19GRUFUVVJFX1RJTUVSMV9MRVZFTCAgICAoY29yZV9jb25maWdfdGltZXIxX2xldmVsLWNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJpb3JpdGllcykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1RJTUVSMV9WRUNUT1IgICBjb3JlX2NvbmZpZ190aW1lcjFfdmVjdG9yDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFNlY3VyZSBUaW1lcjAgcHJlc2VudCBvciBub3QgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfU0VDX1RJTUVSMF9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3NlY190aW1lcjApDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfVElNRVIwX1BSRVNFTlQgIGNvcmVfY29uZmlnX3NlY190aW1lcjANCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19USU1FUjBfTEVWRUwgICAgKGNvcmVfY29uZmlnX3NlY190aW1lcjBfbGV2ZWwtY29yZV9jb25maWdfaW50ZXJydXB0c19wcmlvcml0aWVzKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX1RJTUVSMF9WRUNUT1IgICAyMA0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBTZWN1cmUgVGltZXIxIHByZXNlbnQgb3Igbm90ICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1NFQ19USU1FUjFfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19zZWNfdGltZXIxKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX1RJTUVSMV9QUkVTRU5UICBjb3JlX2NvbmZpZ19zZWNfdGltZXIxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfVElNRVIxX0xFVkVMICAgIChjb3JlX2NvbmZpZ19zZWNfdGltZXIxX2xldmVsLWNvcmVfY29uZmlnX2ludGVycnVwdHNfcHJpb3JpdGllcykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19USU1FUjFfVkVDVE9SICAgMjENCisjZW5kaWYNCisjZW5kaWYNCisNCisNCisvKiogNjRiaXQgUlRDIHByZXNlbnQgb3Igbm90ICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX1JUQ19QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3J0YykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1JUQ19QUkVTRU5UICAgICBjb3JlX2NvbmZpZ19ydGMNCisjZW5kaWYNCisjZW5kaWYNCisNCisvLyBNZW1vcnkgcmVsYXRlZCBkZWZpbml0aW9ucw0KKy8qKiBJQ0NNIFByZXNlbmNlLCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfSUNDTV9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2ljY21fcHJlc2VudCkgJiYgY29yZV9jb25maWdfaWNjbV9wcmVzZW50ID09IDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQ01fUFJFU0VOVCAgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNX0JBU0UgICAgICAgY29yZV9jb25maWdfaWNjbV9iYXNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNX1NJWkUgICAgICAgY29yZV9jb25maWdfaWNjbV9zaXplDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIElDQ00wIFByZXNlbmNlLCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfSUNDTTBfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19pY2NtMF9wcmVzZW50KSAmJiBjb3JlX2NvbmZpZ19pY2NtMF9wcmVzZW50ID09IDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQ00wX1BSRVNFTlQgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNMF9CQVNFICAgICAgY29yZV9jb25maWdfaWNjbTBfYmFzZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNDTTBfU0laRSAgICAgIGNvcmVfY29uZmlnX2ljY20wX3NpemUNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogSUNDTTEgUHJlc2VuY2UsIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9JQ0NNMV9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2ljY20xX3ByZXNlbnQpICYmIGNvcmVfY29uZmlnX2ljY20xX3ByZXNlbnQgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNDTTFfUFJFU0VOVCAgIDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQ00xX0JBU0UgICAgICBjb3JlX2NvbmZpZ19pY2NtMV9iYXNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0NNMV9TSVpFICAgICAgY29yZV9jb25maWdfaWNjbTFfc2l6ZQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBEQ0NNIFByZXNlbmNlLCBiYXNlIGFkZHJlc3MgYW5kIHNpemUgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfRENDTV9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2RjY21fcHJlc2VudCkgJiYgY29yZV9jb25maWdfZGNjbV9wcmVzZW50ID09IDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQ01fUFJFU0VOVCAgICAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0NNX0JBU0UgICAgICAgY29yZV9jb25maWdfZGNjbV9iYXNlDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0NNX1NJWkUgICAgICAgY29yZV9jb25maWdfZGNjbV9zaXplDQorI2lmZGVmIGNvcmVfY29uZmlnX2RjY21faW50ZXJsZWF2ZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENDTV9JTlRFUkxFQVZFIGNvcmVfY29uZmlnX2RjY21faW50ZXJsZWF2ZQ0KKyNlbmRpZg0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBQZXJpcGhlcmFsIG1lbW9yeSByZWdpb24oRE1QKSBiYXNlIGFkZHJlc3MsIGlmIGRtcCBjb25maWd1cmVkLCB0aGlzIG1hY3JvIHdpbGwgYmUgZGVmaW5lZCBhcyBiYXNlIGFkZHJlc3MgKi8NCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfRE1QX1BFUklQSEVSQUwpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfY2lyX2RtcF9wZXJpcGhlcmFsKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1QX1BFUklQSEVSQUwgIGNvcmVfY29uZmlnX2Npcl9kbXBfcGVyaXBoZXJhbA0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBNUFUgb3B0aW9ucyAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9NUFVfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19tcHVfcHJlc2VudCkgJiYgY29yZV9jb25maWdfbXB1X3ByZXNlbnQgPT0gMQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfTVBVX1BSRVNFTlQgICAgIDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX01QVV9WRVJTSU9OICAgICBjb3JlX2NvbmZpZ19iY3JfbXB1X2J1aWxkX3ZlcnNpb24NCisjZGVmaW5lIEFSQ19GRUFUVVJFX01QVV9SRUdJT05TICAgICBjb3JlX2NvbmZpZ19tcHVfcmVnaW9ucw0KKyNpZmRlZiBjb3JlX2NvbmZpZ19iY3JfbXB1X2J1aWxkX2kNCisjZGVmaW5lIEFSQ19GRUFUVVJFX01QVV9CVUlMRF9JICAgICBjb3JlX2NvbmZpZ19iY3JfbXB1X2J1aWxkX2kNCisjZW5kaWYNCisjaWZkZWYgY29yZV9jb25maWdfYmNyX21wdV9idWlsZF9zDQorI2RlZmluZSBBUkNfRkVBVFVSRV9NUFVfQlVJTERfUyAgICAgY29yZV9jb25maWdfYmNyX21wdV9idWlsZF9zDQorI2VuZGlmDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyoqIFNlY3VyZSBCQ1IgU0VDX0JVSUxEIEJDUiAqLw0KKyNpZiAhZGVmaW5lZChBUkNfRkVBVFVSRV9TRUNfUFJFU0VOVCkNCisjaWYgZGVmaW5lZChjb3JlX2NvbmZpZ19iY3Jfc2VjX2J1aWxkKQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX1BSRVNFTlQgICAgIDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19WRVJTSU9OICAgICBjb3JlX2NvbmZpZ19iY3Jfc2VjX2J1aWxkX3ZlcnNpb24NCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19CVUlMRF9EU00gICBjb3JlX2NvbmZpZ19iY3Jfc2VjX2J1aWxkX2RzbQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX0JVSUxEX05TTSAgIGNvcmVfY29uZmlnX2Jjcl9zZWNfYnVpbGRfbnNtDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfQlVJTERfSTFTTSAgY29yZV9jb25maWdfYmNyX3NlY19idWlsZF9pMXNtDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfQlVJTERfSTBTTSAgY29yZV9jb25maWdfYmNyX3NlY19idWlsZF9pMHNtDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfQlVJTERfUyAgICAgY29yZV9jb25maWdfYmNyX3NlY19idWlsZF9zDQorI2RlZmluZSBBUkNfRkVBVFVSRV9TRUNfQlVJTERfRUkgICAgY29yZV9jb25maWdfYmNyX3NlY19idWlsZF9laQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfU0VDX0JVSUxEX0VEICAgIGNvcmVfY29uZmlnX2Jjcl9zZWNfYnVpbGRfZWQNCisjZW5kaWYNCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoQVJDX0ZFQVRVUkVfU0VDX01PREVTKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX3NlY19tb2RlcykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX1NFQ19NT0RFUyAgICAgICBjb3JlX2NvbmZpZ19zZWNfbW9kZXMNCisjZW5kaWYNCisjZW5kaWYNCisNCisvKiogRGF0YSBDYWNoZSBvcHRpb25zICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0RDQUNIRV9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2RjYWNoZV9wcmVzZW50KSAmJiBjb3JlX2NvbmZpZ19kY2FjaGVfcHJlc2VudCA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfUFJFU0VOVCAgICAgIDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9CVUlMRCAgICAgICAgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGQNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9CVUlMRF9WRVJTSU9OICAgIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX3ZlcnNpb24NCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9CVUlMRF9BU1NPQyAgICAgIGNvcmVfY29uZmlnX2Jjcl9kX2NhY2hlX2J1aWxkX2Fzc29jDQorI2RlZmluZSBBUkNfRkVBVFVSRV9EQ0FDSEVfQlVJTERfQ0FQQUNJVFkgICBjb3JlX2NvbmZpZ19iY3JfZF9jYWNoZV9idWlsZF9jYXBhY2l0eQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX0JVSUxEX0JTSVpFICAgICAgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfYnNpemUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9CVUlMRF9GTCAgICAgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfZmwNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RDQUNIRV9CVUlMRF9VICAgICAgY29yZV9jb25maWdfYmNyX2RfY2FjaGVfYnVpbGRfdQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX1NJWkUgICAgICAgICBjb3JlX2NvbmZpZ19kY2FjaGVfc2l6ZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX0xJTkVfU0laRSAgICAgICAgY29yZV9jb25maWdfZGNhY2hlX2xpbmVfc2l6ZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX1dBWVMgICAgICAgICBjb3JlX2NvbmZpZ19kY2FjaGVfd2F5cw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRENBQ0hFX0ZFQVRVUkUgICAgICBjb3JlX2NvbmZpZ19kY2FjaGVfZmVhdHVyZQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBJbnN0cnVjdGlvbiBDYWNoZSBvcHRpb25zICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0lDQUNIRV9QUkVTRU5UKQ0KKyNpZiBkZWZpbmVkKGNvcmVfY29uZmlnX2ljYWNoZV9wcmVzZW50KSAmJiBjb3JlX2NvbmZpZ19pY2FjaGVfcHJlc2VudCA9PSAxDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfUFJFU0VOVCAgICAgIDENCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9CVUlMRCAgICAgICAgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGQNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9CVUlMRF9WRVJTSU9OICAgIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX3ZlcnNpb24NCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9CVUlMRF9BU1NPQyAgICAgIGNvcmVfY29uZmlnX2Jjcl9pX2NhY2hlX2J1aWxkX2Fzc29jDQorI2RlZmluZSBBUkNfRkVBVFVSRV9JQ0FDSEVfQlVJTERfQ0FQQUNJVFkgICBjb3JlX2NvbmZpZ19iY3JfaV9jYWNoZV9idWlsZF9jYXBhY2l0eQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX0JVSUxEX0JTSVpFICAgICAgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfYnNpemUNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9CVUlMRF9GTCAgICAgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfZmwNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0lDQUNIRV9CVUlMRF9EICAgICAgY29yZV9jb25maWdfYmNyX2lfY2FjaGVfYnVpbGRfZA0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX1NJWkUgICAgICAgICBjb3JlX2NvbmZpZ19pY2FjaGVfc2l6ZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX0xJTkVfU0laRSAgICAgICAgY29yZV9jb25maWdfaWNhY2hlX2xpbmVfc2l6ZQ0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX1dBWVMgICAgICAgICBjb3JlX2NvbmZpZ19pY2FjaGVfd2F5cw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfSUNBQ0hFX0ZFQVRVUkUgICAgICBjb3JlX2NvbmZpZ19pY2FjaGVfZmVhdHVyZQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKiBBUkMgdURNQSBvcHRpb25zICovDQorI2lmICFkZWZpbmVkKEFSQ19GRUFUVVJFX0RNQUMpDQorI2lmIGRlZmluZWQoY29yZV9jb25maWdfZG1hYykNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RNQUMgICAgICAgIGNvcmVfY29uZmlnX2RtYWMNCisjZGVmaW5lIENPUkVfRE1BQ19DSEFOTkVMUyAgICAgIGNvcmVfY29uZmlnX2RtYWNfY2hhbm5lbHMNCisjZGVmaW5lIENPUkVfRE1BQ19SRUdJU1RFUlMgICAgIGNvcmVfY29uZmlnX2RtYWNfcmVnaXN0ZXJzDQorI2lmIGNvcmVfY29uZmlnX2Jjcl9kbWFjX2J1aWxkX2ludF9jZmcgPT0gMiAmJiBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZF9pbnRfY2ZnID09IDQNCisjZGVmaW5lIERNQV9NVUxUSV9JUlEgICAgICAgICAgIDENCisjZWxzZQ0KKyNkZWZpbmUgRE1BX01VTFRJX0lSUSAgICAgICAgICAgMA0KKyNlbmRpZg0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19QUkVTRU5UICAgIGNvcmVfY29uZmlnX2RtYWMNCisjZGVmaW5lIEFSQ19GRUFUVVJFX0RNQUNfVkVSU0lPTiAgICBjb3JlX2NvbmZpZ19iY3JfZG1hY19idWlsZF92ZXJzaW9uDQorI2RlZmluZSBBUkNfRkVBVFVSRV9ETUFDX0NIQU5ORUxTICAgY29yZV9jb25maWdfZG1hY19jaGFubmVscw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19SRUdJU1RFUlMgIGNvcmVfY29uZmlnX2RtYWNfcmVnaXN0ZXJzDQorI2RlZmluZSBBUkNfRkVBVFVSRV9ETUFDX0lOVF9DRkcgICAgY29yZV9jb25maWdfYmNyX2RtYWNfYnVpbGRfaW50X2NmZw0KKyNkZWZpbmUgQVJDX0ZFQVRVUkVfRE1BQ19GSUZPX0RFUFRIIGNvcmVfY29uZmlnX2RtYWNfZmlmb19kZXB0aA0KKw0KKyNpZmRlZiBBUkNfRkVBVFVSRV9TRUNfVElNRVIwX1BSRVNFTlQNCisjZGVmaW5lIERNQV9JUlFfTlVNX1NUQVJUICAgICAgIDIyDQorI2RlZmluZSBBUkNfRkVBVFVSRV9ETUFDX1ZFQ1RPUl9TVEFSVCAgIDIyDQorI2Vsc2UNCisjZGVmaW5lIERNQV9JUlFfTlVNX1NUQVJUICAgICAgIDIwDQorI2RlZmluZSBBUkNfRkVBVFVSRV9ETUFDX1ZFQ1RPUl9TVEFSVCAgIDIwDQorI2VuZGlmDQorDQorI2VuZGlmDQorI2VuZGlmDQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmZGVmIEFSQ19GRUFUVVJFX1VOQUxJR05FRA0KKyNkZWZpbmUgU1RBVFVTMzJfUkVTRVRfVkFMVUUgICAgICAgICgxPDwxOSkNCisjZWxzZQ0KKyNkZWZpbmUgU1RBVFVTMzJfUkVTRVRfVkFMVUUgICAgICAgICgwKQ0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX0FSQ19GRUFUVVJFX0NPTkZJR19IXyAqLw0KKw0KKy8qKiBAfSAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY190aW1lci5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9hcmMvYXJjX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhMDAxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvYXJjL2FyY190aW1lci5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNiwgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNi4wNQ0KKyAqIFxkYXRlIDIwMTQtMDctMTUNCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEFSQ19IQUxfTUlTQ19USU1FUg0KKyAqIFxicmllZiBoZWFkZXIgZmlsZSBvZiBBUkMgaW50ZXJuYWwgdGltZXINCisgKi8NCisNCisvKioNCisgKiBcYWRkdG9ncm91cCBBUkNfSEFMX01JU0NfVElNRVINCisgKiBAew0KKyAqLw0KKw0KKyNpZm5kZWYgX0FSQ19IQUxfVElNRVJfSF8NCisjZGVmaW5lIF9BUkNfSEFMX1RJTUVSX0hfDQorI2luY2x1ZGUgImluYy9hcmMvYXJjLmgiDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorDQorLyoqDQorICogXG5hbWUgYXJjIGludGVybmFsIHRpbWVycyBuYW1lcw0KKyAqIEB7DQorICovDQorI2RlZmluZSBUSU1FUl8wICAgICAwICAgLyohPCBtYWNybyBuYW1lIGZvciBhcmMgaW50ZXJuYWwgdGltZXIgMCAqLw0KKyNkZWZpbmUgVElNRVJfMSAgICAgMSAgIC8qITwgbWFjcm8gbmFtZSBmb3IgYXJjIGludGVybmFsIHRpbWVyIDEgKi8NCisjZGVmaW5lIFRJTUVSX1JUQyAgIDIgICAvKiE8IG1hY3JvIG5hbWUgZm9yIGFyYyBpbnRlcm5hbCBSVEMgKi8NCisNCisvKiogQH0gKi8NCisNCisvKioNCisgKiBcbmFtZSBiaXQgZGVmaW5pdGlvbiBvZiBSVEMgQ1RSTCByZWcNCisgKiBAew0KKyAqLw0KKw0KKyNkZWZpbmUgVElNRVJfUlRDX0VOQUJMRSAgICAweDAxICAgICAgIC8qITwgZW5hYmxlIFJUQyAqLw0KKyNkZWZpbmUgVElNRVJfUlRDX0NMRUFSICAgICAweDAyICAgICAgIC8qIGNsZWFycyB0aGUgQVVYX1JUQ19MT1cgYW5kIEFVWF9SVENfSElHSCAqLw0KKyNkZWZpbmUgVElNRVJfUlRDX1NUQVRVU19BMCAweDQwMDAwMDAwIC8qITwgdHJhY2sgYml0IG9mIGF0b21pY2l0eSBvZiByZWFkcyBvZiBSVEMgKi8NCisjZGVmaW5lIFRJTUVSX1JUQ19TVEFUVVNfQTEgMHg4MDAwMDAwMCAvKiE8IHRyYWNrIGJpdCBvZiBhdG9taWNpdHkgb2YgcmVhZHMgb2YgUlRDICovDQorDQorLyoqIEB9ICovDQorDQorLyoqDQorICogXG5hbWUgYml0IGRlZmluaXRpb24gb2YgdGltZXIgQ1RSTCByZWcNCisgKiBAew0KKyAqLw0KKyNkZWZpbmUgVElNRVJfQ1RSTF9JRSAgICAgICAoMSA8PCAwKSAgICAvKiE8IEludGVycnVwdCB3aGVuIGNvdW50IHJlYWNoZXMgbGltaXQgKi8NCisjZGVmaW5lIFRJTUVSX0NUUkxfTkggICAgICAgKDEgPDwgMSkgICAgLyohPCBDb3VudCBvbmx5IHdoZW4gQ1BVIE5PVCBoYWx0ZWQgKi8NCisjZGVmaW5lIFRJTUVSX0NUUkxfVyAgICAgICAgKDEgPDwgMikgICAgLyohPCB3YXRjaGRvZyBlbmFibGUgKi8NCisjZGVmaW5lIFRJTUVSX0NUUkxfSVAgICAgICAgKDEgPDwgMykgICAgLyohPCBpbnRlcnJ1cHQgcGVuZGluZyAqLw0KKw0KKy8qKiBAfSAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiBpbnQzMl90IHRpbWVyX3ByZXNlbnQoY29uc3QgdWludDMyX3Qgbm8pOw0KK2V4dGVybiBpbnQzMl90IHRpbWVyX3N0YXJ0KGNvbnN0IHVpbnQzMl90IG5vLCBjb25zdCB1aW50MzJfdCBtb2RlLCBjb25zdCB1aW50MzJfdCB2YWwpOw0KK2V4dGVybiBpbnQzMl90IHRpbWVyX3N0b3AoY29uc3QgdWludDMyX3Qgbm8pOw0KK2V4dGVybiBpbnQzMl90IHRpbWVyX2N1cnJlbnQoY29uc3QgdWludDMyX3Qgbm8sIHZvaWQgKnZhbCk7DQorZXh0ZXJuIGludDMyX3QgdGltZXJfaW50X2NsZWFyKGNvbnN0IHVpbnQzMl90IG5vKTsNCitleHRlcm4gdm9pZCB0aW1lcl9pbml0KHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgIC8qIF9BUkNfSEFMX1RJTUVSX0hfICovDQorLyoqIH1AKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2VtYkFSQ19lcnJvci5oIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjVlMThmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2luYy9lbWJBUkNfZXJyb3IuaApAQCAtMCwwICsxLDE1NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0xMi0yNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgRU1CQVJDX0VSUk9SDQorICogXGJyaWVmICAgaGVhZGVyIGZpbGUgdG8gZGVmaW5lIGNvbW1vbiBkZWZpbml0aW9ucyBlcnJvciBtYW5hZ2VtZW50DQorICovDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgIEVNQkFSQ19FUlJPUg0KKyAqIEB7DQorICovDQorDQorI2lmbmRlZiBfRU1CQVJDX0VSUk9SX0hfDQorI2RlZmluZSBfRU1CQVJDX0VSUk9SX0hfDQorDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNsdWRlICJpbmMvYXJjL2FyY19idWlsdGluLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorLyoqDQorICogXG5hbWUgICAgTWFpbiBFcnJvciBDb2RlIERlZmluaXRpb25zDQorICogQHsNCisgKi8NCisjZGVmaW5lIEVfT0sgICAgICAgICgwKSAgICAgLyohPCBvayAqLw0KKyNkZWZpbmUgRV9TWVMgICAgICAgKC01KSAgICAgICAgLyohPCBzeXN0ZW0gZXJyb3IgKi8NCisjZGVmaW5lIEVfTk9TUFQgICAgICgtOSkgICAgICAgIC8qITwgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgKi8NCisjZGVmaW5lIEVfUlNGTiAgICAgICgtMTApICAgICAgIC8qITwgcmVzZXJ2ZWQgZnVuY3Rpb24gY29kZSAqLw0KKyNkZWZpbmUgRV9SU0FUUiAgICAgKC0xMSkgICAgICAgLyohPCByZXNlcnZlZCBhdHRyaWJ1dGUgKi8NCisjZGVmaW5lIEVfUEFSICAgICAgICgtMTcpICAgICAgIC8qITwgcGFyYW1ldGVyIGVycm9yICovDQorI2RlZmluZSBFX0lEICAgICAgICAoLTE4KSAgICAgICAvKiE8IGludmFsaWQgSUQgbnVtYmVyICovDQorI2RlZmluZSBFX0NUWCAgICAgICAoLTI1KSAgICAgICAvKiE8IGNvbnRleHQgZXJyb3IgKi8NCisjZGVmaW5lIEVfTUFDViAgICAgICgtMjYpICAgICAgIC8qITwgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb24gKi8NCisjZGVmaW5lIEVfT0FDViAgICAgICgtMjcpICAgICAgIC8qITwgb2JqZWN0IGFjY2VzcyB2aW9sYXRpb24gKi8NCisjZGVmaW5lIEVfSUxVU0UgICAgICgtMjgpICAgICAgIC8qITwgaWxsZWdhbCBzZXJ2aWNlIGNhbGwgdXNlICovDQorI2RlZmluZSBFX05PTUVNICAgICAoLTMzKSAgICAgICAvKiE8IGluc3VmZmljaWVudCBtZW1vcnkgKi8NCisjZGVmaW5lIEVfTk9JRCAgICAgICgtMzQpICAgICAgIC8qITwgbm8gSUQgbnVtYmVyIGF2YWlsYWJsZSAqLw0KKyNkZWZpbmUgRV9OT1JFUyAgICAgKC0zNSkgICAgICAgLyohPCBubyByZXNvdXJjZSBhdmFpbGFibGUgKi8NCisjZGVmaW5lIEVfT0JKICAgICAgICgtNDEpICAgICAgIC8qITwgb2JqZWN0IHN0YXRlIGVycm9yICovDQorI2RlZmluZSBFX05PRVhTICAgICAoLTQyKSAgICAgICAvKiE8IG5vbi1leGlzdGVudCBvYmplY3QgKi8NCisjZGVmaW5lIEVfUU9WUiAgICAgICgtNDMpICAgICAgIC8qITwgcXVldWUgb3ZlcmZsb3cgKi8NCisjZGVmaW5lIEVfUkxXQUkgICAgICgtNDkpICAgICAgIC8qITwgZm9yY2VkIHJlbGVhc2UgZnJvbSB3YWl0aW5nICovDQorI2RlZmluZSBFX1RNT1VUICAgICAoLTUwKSAgICAgICAvKiE8IHBvbGxpbmcgZmFpbHVyZSBvciB0aW1lb3V0ICovDQorI2RlZmluZSBFX0RMVCAgICAgICAoLTUxKSAgICAgICAvKiE8IHdhaXRpbmcgb2JqZWN0IGRlbGV0ZWQgKi8NCisjZGVmaW5lIEVfQ0xTICAgICAgICgtNTIpICAgICAgIC8qITwgd2FpdGluZyBvYmplY3Qgc3RhdGUgY2hhbmdlZCAqLw0KKyNkZWZpbmUgRV9XQkxLICAgICAgKC01NykgICAgICAgLyohPCBub24tYmxvY2tpbmcgYWNjZXB0ZWQgKi8NCisjZGVmaW5lIEVfQk9WUiAgICAgICgtNTgpICAgICAgIC8qITwgYnVmZmVyIG92ZXJmbG93ICovDQorI2RlZmluZSBFX09QTkVEICAgICAoLTYpICAgICAgICAvKiE8IGRldmljZSBpcyBvcGVuZWQgKi8NCisjZGVmaW5lIEVfQ0xTRUQgICAgICgtNykgICAgICAgIC8qITwgZGV2aWNlIGlzIGNsb3NlZCAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIEdlbmVyYXRlIEFuZCBEZWNvbXBvc2UgRXJyb3IgQ29kZQ0KKyAqIEB7DQorICovDQorI2lmbmRlZiBFUkNEDQorLyoqIGdlbmVyYXRlIGVycm9yIGNvZGUgdXNpbmcgbWFpbiBlcnJvciBjb2RlIGFuZCBzdWIgZXJyb3IgY29kZSAqLw0KKyNkZWZpbmUgRVJDRChtZXJjZCwgc2VyY2QpIFwNCisgICAgICAgICgodWludDMyX3QpKCgoKHVpbnQzMl90KSBzZXJjZCkgPDwgOCkgfCAoKCh1aW50MzJfdCkgbWVyY2QpICYgMHhmZlUpKSkNCisjZW5kaWYgLyogRVJDRCAqLw0KKw0KKyNpZm5kZWYgTUVSQ0QNCisjaWZkZWYgSU5UOF9NQVgNCisvKiogZ2V0IG1haW4gZXJyb3IgY29kZSBmcm9tIGVycm9yIGNvZGUgKi8NCisjZGVmaW5lIE1FUkNEKGVyY2QpICAgICAoKHVpbnQzMl90KSgoaW50OF90KShlcmNkKSkpDQorI2Vsc2UgLyogSU5UOF9NQVggKi8NCisvKiogZ2V0IG1haW4gZXJyb3IgY29kZSBmcm9tIGVycm9yIGNvZGUgKi8NCisjZGVmaW5lIE1FUkNEKGVyY2QpICAgICAoKHVpbnQzMl90KSgoKHVpbnQzMl90KSBlcmNkKSB8IH4weGZmVSkpDQorI2VuZGlmIC8qIElOVDhfTUFYICovDQorI2VuZGlmIC8qIE1FUkNEICovDQorDQorI2lmbmRlZiBTRVJDRA0KKy8qKiBnZXQgc3ViIGVycm9yIGNvZGUgZnJvbSBlcnJvciBjb2RlICovDQorI2RlZmluZSBTRVJDRChlcmNkKSAgICAgKCh1aW50MzJfdCkoKGVyY2QpID4+IDgpKQ0KKyNlbmRpZiAvKiBTRVJDRCAqLw0KKy8qKiBAfSBlbmQgb2YgbmFtZSAqLw0KKw0KKy8qKg0KKyAqIFxuYW1lICAgIENoZWNrIEVycm9yDQorICogQHsNCisgKi8NCisvKioNCisgKiBcYnJpZWYgICBjaGVjayBhbiBleHByZXNzaW9uIHRvIHNlZSBpZiBpdCBpcyByaWdodCwgYW5kIHdoZW4gZXJyb3INCisgKiAgc2V0IHRoZSBlcmNkLCBhbmQgZ290byBleGl0X2xhYmVsDQorICogXHBhcmFtICAgRVhQUiAgICB0aGUgZXhwcmVzc2lvbiB0aGF0IG5lZWQgdG8gYmUgY2hlY2tlZCAoPT0wIGZhaWxlZCkNCisgKiBccGFyYW0gICBFUkNEICAgIE1VU1QgcGFzcyBhIHZhcmlhYmxlIHRvIGhlcmUgdG8gZ2V0IHRoZSBlcnJvciBjb2RlDQorICogXHBhcmFtICAgRVJST1JfQ09ERSBlcnJvciBjb2RlIHRoYXQgcGFzcyB0byBFUkNEDQorICogXHBhcmFtICAgRVhJVF9MQUJFTCBhIGxhYmVsIHRvIGdvIHdoZW4gZXJyb3IgaGFwcGVucw0KKyAqLw0KKyNkZWZpbmUgQ0hFQ0tfRVhQKEVYUFIsIEVSQ0QsIEVSUk9SX0NPREUsIEVYSVRfTEFCRUwpICAgeyAgIFwNCisgICAgICAgIGlmIChfYXJjX3JhcmVseSghKEVYUFIpKSkgeyAgICAgICAgICAgICBcDQorICAgICAgICAgICAgRVJDRCA9IChFUlJPUl9DT0RFKTsgICAgICAgICAgICBcDQorICAgICAgICAgICAgZ290byBFWElUX0xBQkVMOyAgICAgICAgICAgIFwNCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgfQ0KKy8qKg0KKyAqIFxicmllZiAgIGNoZWNrIGFuIGV4cHJlc3Npb24gdG8gc2VlIGlmIGl0IGlzIHJpZ2h0LCBhbmQgd2hlbiBlcnJvcg0KKyAqICAgICAgICAgIGRpcmVjdGx5IGdvdG8gZXhpdF9sYWJlbA0KKyAqIFxwYXJhbSAgIEVYUFIgICAgICAgdGhlIGV4cHJlc3Npb24gdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQgKD09MCBmYWlsZWQpDQorICogXHBhcmFtICAgRVhJVF9MQUJFTCBhIGxhYmVsIHRvIGdvIHdoZW4gZXJyb3IgaGFwcGVucw0KKyAqIFxyZXR2YWwNCisgKi8NCisjZGVmaW5lIENIRUNLX0VYUF9OT0VSQ0QoRVhQUiwgRVhJVF9MQUJFTCkgeyAgICAgICAgICAgIFwNCisgICAgICAgIGlmIChfYXJjX3JhcmVseSghKEVYUFIpKSkgeyAgICAgICAgICAgICBcDQorICAgICAgICAgICAgZ290byBFWElUX0xBQkVMOyAgICAgICAgICAgIFwNCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgfQ0KKy8qKiBjaGVjayBjbnQgYnl0ZXMgYWxpZ24sIDEgZm9yIGFsaWduZWQsIDAgZm9yIG5vdC1hbGlnbmVkICovDQorI2RlZmluZSBDSEVDS19BTElHTl9CWVRFUyhwb2ludGVyLCBjbnQpICAgICAoKCgodWludDMyX3QpKHBvaW50ZXIpKSAmIChjbnQtMSkpID09IDApDQorLyoqIGNoZWNrIDIgYnl0ZXMgYWxpZ24sIDEgZm9yIGFsaWduZWQsIDAgZm9yIG5vdC1hbGlnbmVkICovDQorI2RlZmluZSBDSEVDS19BTElHTl8yQllURVMocG9pbnRlcikgICAgICgoKCh1aW50MzJfdCkocG9pbnRlcikpICYgMHgxKSA9PSAwKQ0KKy8qKiBjaGVjayA0IGJ5dGVzIGFsaWduLCAxIGZvciBhbGlnbmVkLCAwIGZvciBub3QtYWxpZ25lZCAqLw0KKyNkZWZpbmUgQ0hFQ0tfQUxJR05fNEJZVEVTKHBvaW50ZXIpICAgICAoKCgodWludDMyX3QpKHBvaW50ZXIpKSAmIDB4MykgPT0gMCkNCisvKiogY2hlY2sgOCBieXRlcyBhbGlnbiwgMSBmb3IgYWxpZ25lZCwgMCBmb3Igbm90LWFsaWduZWQgKi8NCisjZGVmaW5lIENIRUNLX0FMSUdOXzhCWVRFUyhwb2ludGVyKSAgICAgKCgoKHVpbnQzMl90KShwb2ludGVyKSkgJiAweDcpID09IDApDQorLyoqIEB9IGVuZCBvZiBuYW1lICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRU1CQVJDX0VSUk9SX0hfICovDQorLyoqIEB9IGVuZCBvZiBncm91cCBFTUJBUkNfRVJST1IgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2VtYkFSQ190b29sY2hhaW4uaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9pbmMvZW1iQVJDX3Rvb2xjaGFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NTM2M2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvaW5jL2VtYkFSQ190b29sY2hhaW4uaApAQCAtMCwwICsxLDEyMSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE2LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE2LjA1DQorICogXGRhdGUgMjAxNC0xMi0yNQ0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgVE9PTENIQUlODQorICogXGJyaWVmIHRvb2xjaGFpbiBkZXBlbmRlbnQgZGVmaW5pdGlvbnMNCisgKi8NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+IC8qIEM5OSBzdGFuZGFyZCBsaWIgKi8NCisjaW5jbHVkZSA8bGltaXRzLmg+IC8qIEM5OSBzdGFuZGFyZCBsaWIgKi8NCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8qIEM5OSBzdGFuZGFyZCBsaWIgKi8NCisjaW5jbHVkZSA8c3RkYm9vbC5oPiAgICAvKiBDOTkgc3RhbmRhcmQgbGliICovDQorDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorDQorLyoqDQorICogXGFkZHRvZ3JvdXAgVE9PTENIQUlODQorICogQHsNCisgKi8NCisNCisjaWZuZGVmIF9FTUJBUkNfVE9PTENIQUlOX0hfDQorI2RlZmluZSBfRU1CQVJDX1RPT0xDSEFJTl9IXw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qDQorICogIG1hY3JvIGRlZmluaXRpb25zIG9mIGNvbXBpbGVyIGV4dGVuZCBmdW5jdGlvbg0KKyAqLw0KKyNpZm5kZWYgX19jcGx1c3BsdXMgICAgICAgICAgICAgLyogQysrIHN1cHBvcnRzIGlubGluZSAqLw0KKyNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTCAgICAgICAgICAvKiBDOTkgc3VwcG9ydHMgaW5saW5lICovDQorI2lmbmRlZiBpbmxpbmUNCisjZGVmaW5lIGlubGluZSAgX19pbmxpbmVfXyAgICAgICAgICAvKiBpbmxpbmUgZnVuY3Rpb24gKi8NCisjZW5kaWYNCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMUwgKi8NCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCisNCisjaWZuZGVmIElubGluZQ0KKyNkZWZpbmUgSW5saW5lICBzdGF0aWMgX19pbmxpbmVfXyAgICAgICAvKiBpbmxpbmUgZnVuY3Rpb24gKi8NCisjZW5kaWYNCisNCisjaWZuZGVmIF9fY3BsdXNwbHVzICAgICAgICAgICAgIC8qIEMrKyBzdXBwb3J0cyBhc20gKi8NCisjaWZuZGVmIGFzbQ0KKyNkZWZpbmUgYXNtIF9fYXNtX18gICAgICAgICAgICAgLyogaW5saW5lIGFzbSAqLw0KKyNlbmRpZg0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KKw0KKyNpZm5kZWYgQXNtDQorI2RlZmluZSBBc20gX19hc21fXyB2b2xhdGlsZSAgICAgICAgLyogaW5saW5lIGFzbSAobm8gb3B0aW1pemF0aW9uKSAqLw0KKyNlbmRpZg0KKw0KKy8qIGNvbXBpbGVyIGF0dHJpYnV0ZXMgKi8NCisjZGVmaW5lIEVNQkFSQ19GT1JDRUlOTElORSAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQorI2RlZmluZSBFTUJBUkNfTk9JTkxJTkUgICAgIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkNCisjZGVmaW5lIEVNQkFSQ19QQUNLRUQgICAgICAgX19hdHRyaWJ1dGVfXygocGFja2VkKSkNCisjZGVmaW5lIEVNQkFSQ19XRUFLICAgICBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkNCisjZGVmaW5lIEVNQkFSQ19BTElBUyhmKSAgICAgX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMgKCNmKSkpDQorI2RlZmluZSBFTUJBUkNfTElOS1RPKGYpICAgIF9fYXR0cmlidXRlX18oKGFsaWFzICgjZikpKQ0KKyNkZWZpbmUgRU1CQVJDX05PUkVUVVJOICAgICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpDQorI2RlZmluZSBFTUJBUkNfTkFLRUQgICAgICAgIF9fYXR0cmlidXRlX18oKG5ha2VkKSkgIC8qIGZ1bmN0aW9uIHdpdGhvdXQgcmV0dXJuICovDQorI2RlZmluZSBFTUJBUkNfQUxJR05FRCh4KSAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoeCkpKQ0KKw0KKw0KKy8qIGFycmF5IGNvdW50IG1hY3JvICovDQorI2RlZmluZSBFTUJBUkNfQVJSQVlfQ09VTlQoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpDQorDQorLyogY29udmVydCBtYWNybyBhcmd1bWVudCB0byBzdHJpbmcgKi8NCisvKiBub3RlOiB0aGlzIG5lZWRzIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbiwgYWNjb21wbGlzaGVkIHdpdGggdGhlIGhlbHBlciBtYWNybw0KKyAqICAgICAgIF9fRU1CQVJDX1RPX1NUUklORyAqLw0KKyNkZWZpbmUgX19FTUJBUkNfVE9fU1RSSU5HKHgpICN4DQorI2RlZmluZSBFTUJBUkNfVE9fU1RSSU5HKHgpICAgX19FTUJBUkNfVE9fU1RSSU5HKHgpDQorDQorI2lmIGRlZmluZWQoX19HTlVfXykNCisvKiBHTlUgdG9vbCBzcGVjaWZpYyBkZWZpbml0aW9ucyAqLw0KKw0KKyNlbGlmIGRlZmluZWQoX19NV19fKQ0KKy8qIE1ldGF3YXJlIHRvb2wgc3BlY2lmaWMgZGVmaW5pdGlvbnMgKi8NCisvKiBNZXRhd2FyZSB0b29sY2hhaW4gcmVsYXRlZCBkZWZpbml0aW9ucyAqLw0KKw0KKyNlbHNlDQorI2Vycm9yICJ1bnN1cHBvcnRlZCB0b29sY2hhaW4iDQorI2VuZGlmDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfRU1CQVJDX1RPT0xDSEFJTl9IXyAqLw0KKy8qKiB9QCAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZGlyZW50LmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzMjJmMTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2RpcmVudC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqIENvcHlyaWdodCAoYykgMjAxNywgU3lub3BzeXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLA0KKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMNCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3INCisgKiBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFN5bm9wc3lzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5DQorICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KKyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogXHZlcnNpb24gMjAxNy4wMw0KKyAqIFxkYXRlIDIwMTYtMDEtMjANCisgKiBcYXV0aG9yIFdheW5lIFJlbihXZWkuUmVuQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjaWZuZGVmIF9ESVJFTlRfSF8NCisjZGVmaW5lIF9ESVJFTlRfSF8NCisNCisjaW5jbHVkZSAiZmF0ZnNfZGlyZW50LmgiDQorLy8jdW5kZWYgU19JU1JFRw0KKw0KKyN1bmRlZiBESVINCisjZGVmaW5lIERJUiBGQVRGU19ESVINCisNCisvLyAjZGVmaW5lIHN0YXQgZmF0ZnNfc3RhdA0KKy8vICNkZWZpbmUgU19JU1JFRyBGQVRGU19TX0lTUkVHDQorDQorI2VuZGlmIC8qX0RJUkVOVF9IXyovDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfbWlzYy5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzIxNTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19taXNjLmMKQEAgLTAsMCArMSw0OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMy0wMg0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjaW5jbHVkZSAiZW1iQVJDX0JTUF9jb25maWcuaCINCisNCisjaW5jbHVkZSAiaW5jL2FyYy9hcmNfZXhjZXB0aW9uLmgiDQorI2luY2x1ZGUgImVtYkFSQ19zeXNjYWxscy5oIg0KKw0KKy8qKg0KKyAqIFxicmllZiBJbnN0YWxsIHRoZSBzeXNjYWxsIHN3aSBoYW5kbGVyIGludG8gZXhjZXB0aW9uIHRhYmxlLg0KKyAqICBUaGlzIG5lZWQgdG8gYmUgZG9uZSBhZnRlciBleGNlcHRpb24gdGFibGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuDQorICogIFdoZW4gUlRPUyBpcyBpbXBsZW1lbnRlZCwgeW91IG5lZWQgdG8gbWFudWFsbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyDQorICogIHlvdXIgUlRPUyBleGNlcHRpb24gdGFibGUgaXMgc2V0dXAuDQorICovDQordm9pZCBnbnVfcHJpbnRmX3NldHVwKHZvaWQpDQorew0KKyNpZiBkZWZpbmVkKF9fR05VX18pICYmICFkZWZpbmVkKF9IQVZFX0xJQkdMT1NTXykgJiYgIWRlZmluZWQoX0hPU1RMSU5LXykNCisgICAgZXhjX2hhbmRsZXJfaW5zdGFsbChFWENfTk9fU1dJLCAoRVhDX0hBTkRMRVIpc3lzY2FsbF9zd2kpOw0KKyNlbmRpZg0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zYnJrLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zYnJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4NjY0MQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3NicmsuYwpAQCAtMCwwICsxLDEyMiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMy0wMg0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjaW5jbHVkZSAiZW1iQVJDX0JTUF9jb25maWcuaCINCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxjdHlwZS5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRlICJlbWJBUkNfc3lzY2FsbHMuaCINCisNCisjaWZuZGVmIF9IT1NUTElOS18gLyogTm90IHVzaW5nIGhvc3RsaW5rIGxpYnJhcnkgKi8NCisNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIE1lbW9yeSBNYW5hZ2VtZW50IC8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvKiogQWxsb2NhdGluZyBNZW1vcnkgKi8NCisjZGVmaW5lIEVNQkFSQ19XSVRIX01XU0JSSw0KKy8qIFdoZXRoZXIgaGVhcCBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8NCisjaWYgZGVmaW5lZChfX01XX18pICYmIGRlZmluZWQoRU1CQVJDX1dJVEhfTVdTQlJLKQ0KKw0KK3N0YXRpYyBpbnQgX19oZWFwX2luaXQgPSAwOw0KK3N0YXRpYyBjaGFyICpfX2hlYXBfZW5kLCAqX19oZWFwX2N1cjsNCitleHRlcm4gY2hhciBfZl9oZWFwW107DQorZXh0ZXJuIGNoYXIgX2VfaGVhcFtdOw0KKw0KKy8qKiBBbGxvY2F0aW5nIE1lbW9yeSAqLw0KK3ZvaWQgKlNZU0NBTExfUFJFRklYKF9zYnJrKSh1bnNpZ25lZCBpbnQgc2l6ZSkNCit7DQorICAgIGNoYXIgKm5ld19jdXI7DQorDQorICAgIGlmIChfX2hlYXBfaW5pdCA9PSAwKQ0KKyAgICB7DQorICAgICAgICBfX2hlYXBfY3VyID0gX2ZfaGVhcDsNCisgICAgICAgIF9faGVhcF9lbmQgPSBfZV9oZWFwOw0KKyAgICAgICAgX19oZWFwX2luaXQgPSAxOw0KKyAgICB9DQorDQorICAgIG5ld19jdXIgPSBfX2hlYXBfY3VyICsgc2l6ZTsNCisNCisgICAgaWYgKF9faGVhcF9jdXIgPD0gbmV3X2N1ciAmJiBuZXdfY3VyIDw9IF9faGVhcF9lbmQpDQorICAgIHsNCisgICAgICAgIHZvaWQgKnAgPSAodm9pZCAqKV9faGVhcF9jdXI7DQorICAgICAgICBfX2hlYXBfY3VyID0gbmV3X2N1cjsNCisgICAgICAgIHJldHVybiAodm9pZCAqKXA7IC8qKiByZXR1cm4gb2xkIF9faGVhcF9jdXIgKi8NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorLyoqIEZyZWVpbmcgTWVtb3J5ICovDQordm9pZCAqU1lTQ0FMTF9QUkVGSVgoX2Jyaykodm9pZCAqcCkNCit7DQorICAgIF9faGVhcF9jdXIgPSBwOw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorI3ByYWdtYSB3ZWFrIHNicmsgPSBfc2Jyaw0KKyNwcmFnbWEgd2VhayBicmsgPSBfYnJrDQorDQorI2VsaWYgZGVmaW5lZChfX0dOVV9fKQ0KKw0KK2V4dGVybiBjaGFyIF9fc3RhcnRfaGVhcDsNCitleHRlcm4gY2hhciBfX2VuZF9oZWFwOw0KKw0KK2NhZGRyX3QgKlNZU0NBTExfUFJFRklYKF9zYnJrKShzaXplX3QgbmJ5dGVzKQ0KK3sNCisgICAgc3RhdGljIGNoYXIgKmhlYXBfcHRyID0gTlVMTDsNCisgICAgY2hhciAqcHJldl9oZWFwX3B0cjsNCisNCisgICAgaWYgKGhlYXBfcHRyID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIGhlYXBfcHRyID0gJl9fc3RhcnRfaGVhcDsNCisgICAgfQ0KKw0KKyAgICAvKiBBbGlnbiB0aGUgJ2hlYXBfcHRyJyBzbyB0aGF0IG1lbW9yeSB3aWxsIGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgd29yZA0KKyAgICBib3VuZGFyaWVzLiAqLw0KKyAgICBoZWFwX3B0ciA9IChjaGFyICopKCgoKHVuc2lnbmVkIGxvbmcpIGhlYXBfcHRyKSArIDcpICYgfjcpOw0KKyAgICBwcmV2X2hlYXBfcHRyID0gaGVhcF9wdHI7DQorDQorICAgIGlmICgoaGVhcF9wdHIgKyBuYnl0ZXMpIDwgJl9fZW5kX2hlYXApDQorICAgIHsNCisgICAgICAgIGhlYXBfcHRyICs9IG5ieXRlczsNCisgICAgICAgIHJldHVybiAoY2FkZHJfdCAqKSBwcmV2X2hlYXBfcHRyOw0KKyAgICB9DQorDQorICAgIGVycm5vID0gRU5PTUVNOw0KKyAgICByZXR1cm4gKGNhZGRyX3QgKikgLSAxOw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogIWRlZmluZWQoX0hPU1RMSU5LXykgKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ19zeXNjYWxscy5jIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfc3lzY2FsbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2M1NWUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfc3lzY2FsbHMuYwpAQCAtMCwwICsxLDg5NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMS0xOA0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjaW5jbHVkZSAiZW1iQVJDX3N5c2NhbGxzLmgiDQorI2luY2x1ZGUgImRldmljZS9kZXZpY2VfaGFsL2luYy9kZXZfdWFydC5oIg0KKw0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxmY250bC5oPg0KKyNpbmNsdWRlIDx0aW1lLmg+DQorI2luY2x1ZGUgPGN0eXBlLmg+DQorI2luY2x1ZGUgPHN5cy90aW1lLmg+DQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQorI2lmZGVmIF9fR05VX18NCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorI2luY2x1ZGUgPHN5cy9lcnJuby5oPg0KKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4NCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCisjZW5kaWYNCisNCisvKioNCisgKiBcdG9kbyBDb25zaWRlciBob3N0bGluayBhbmQgbnNpbSBzdXBwb3J0DQorICovDQorDQorI2lmbmRlZiBfSE9TVExJTktfIC8qIE5vdCB1c2luZyBob3N0bGluayBsaWJyYXJ5ICovDQorDQorI2lmbmRlZiBfRU5WSVJPTl9MRU4NCisjZGVmaW5lIF9FTlZJUk9OX0xFTiAgICAzMg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgQk9BUkRfQ09OU09MRV9VQVJUX0lEDQorI2RlZmluZSBCT0FSRF9DT05TT0xFX1VBUlRfSUQgICAgICAgMQ0KKyNlbmRpZg0KKyNpZm5kZWYgQk9BUkRfQ09OU09MRV9VQVJUX0JBVUQNCisjZGVmaW5lIEJPQVJEX0NPTlNPTEVfVUFSVF9CQVVEICAgICBVQVJUX0JBVURSQVRFXzExNTIwMA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgRU1CQVJDX0NGR19TVERJT19DUkxGDQorI2RlZmluZSBFTUJBUkNfQ0ZHX1NURElPX0NSTEYgICAgICAgMQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgRU1CQVJDX0NGR19VU0VfUlRDVElNRQ0KKyNkZWZpbmUgRU1CQVJDX0NGR19VU0VfUlRDVElNRSAgICAgIDANCisjZW5kaWYNCisNCisjZGVmaW5lIFNURElPX0ZJRF9PRlMgICAgICAgICAgIDMNCisNCitpbnQgc3RkaW9fdWFydF9pbml0ZWQgPSAwOw0KK0RFVl9VQVJUICpzdGRpb191YXJ0X29iajsNCitzdGF0aWMgdm9pZCBpbml0X3N0ZGlvX3NlcmlhbCh2b2lkKQ0KK3sNCisgICAgaWYgKHN0ZGlvX3VhcnRfaW5pdGVkKSB7IHJldHVybjsgfQ0KKw0KKyAgICBzdGRpb191YXJ0X2luaXRlZCA9IDE7DQorICAgIHN0ZGlvX3VhcnRfb2JqID0gdWFydF9nZXRfZGV2KEJPQVJEX0NPTlNPTEVfVUFSVF9JRCk7DQorDQorICAgIGlmIChzdGRpb191YXJ0X29iaikNCisgICAgew0KKyAgICAgICAgc3RkaW9fdWFydF9vYmotPnVhcnRfb3BlbihCT0FSRF9DT05TT0xFX1VBUlRfQkFVRCk7DQorICAgICAgICBzdGRpb191YXJ0X29iai0+dWFydF9jb250cm9sKFVBUlRfQ01EX1NFVF9CQVVELCBDT05WMlZPSUQoQk9BUkRfQ09OU09MRV9VQVJUX0JBVUQpKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHN0ZGlvX3VhcnRfaW5pdGVkID0gLTE7DQorICAgIH0NCit9DQorDQorc3RhdGljIGludCBzdGRpb19yZWFkKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCkNCit7DQorICAgIGlmICghc3RkaW9fdWFydF9vYmopIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIHVuc2lnbmVkIGludCBhdmFpbF9sZW47DQorICAgIHN0ZGlvX3VhcnRfb2JqLT51YXJ0X2NvbnRyb2woVUFSVF9DTURfR0VUX1JYQVZBSUwsICh2b2lkICopKCZhdmFpbF9sZW4pKTsNCisgICAgbGVuZ3RoID0gKGxlbmd0aCA8IGF2YWlsX2xlbikgPyBsZW5ndGggOiBhdmFpbF9sZW47DQorDQorICAgIGlmIChsZW5ndGggPT0gMCkNCisgICAgew0KKyAgICAgICAgbGVuZ3RoID0gMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKGludClzdGRpb191YXJ0X29iai0+dWFydF9yZWFkKCh2b2lkICopYnVmZmVyLCAodWludDMyX3QpbGVuZ3RoKTsNCit9DQorDQorc3RhdGljIHZvaWQgc3RkaW9fd3JpdGVfY2hhcihjaGFyIGRhdGEpDQorew0KKyAgICBzdGRpb191YXJ0X29iai0+dWFydF93cml0ZSgoY29uc3Qgdm9pZCAqKSgmZGF0YSksIDEpOw0KK30NCisNCisNCitzdGF0aWMgaW50IHN0ZGlvX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCkNCit7DQorICAgIGlmICghc3RkaW9fdWFydF9vYmopIHsgcmV0dXJuIC0xOyB9DQorDQorI2lmIEVNQkFSQ19DRkdfU1RESU9fQ1JMRg0KKyAgICB1bnNpZ25lZCBpbnQgaSA9IDA7DQorDQorICAgIHdoaWxlIChpIDwgbGVuZ3RoKQ0KKyAgICB7DQorICAgICAgICBpZiAoX2FyY19yYXJlbHkoYnVmZmVyW2ldID09ICdcbicpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHN0ZGlvX3dyaXRlX2NoYXIoJ1xyJyk7DQorICAgICAgICB9DQorDQorICAgICAgICBzdGRpb193cml0ZV9jaGFyKGJ1ZmZlcltpXSk7DQorICAgICAgICBpKys7DQorICAgIH0NCisNCisgICAgcmV0dXJuIChpbnQpaTsNCisjZWxzZQ0KKyAgICByZXR1cm4gKGludClzdGRpb191YXJ0X29iai0+dWFydF93cml0ZSgoY29uc3Qgdm9pZCAqKWJ1ZmZlciwgKHVpbnQzMl90KWxlbmd0aCk7DQorI2VuZGlmDQorfQ0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIEZpbGUgUHJvY2Vzc2luZyAvLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKyNpZmRlZiBNSURfRkFURlMNCisjaW5jbHVkZSAiZmYuaCINCisjaWZuZGVmIEVNQkFSQ19DRkdfTUFYX0ZJTEVIQU5ETEVTDQorI2RlZmluZSBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUyAgMzINCisjZW5kaWYNCitzdGF0aWMgRklMICpmaWxlX2hhbmRsZXNbRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVNdID0geyBOVUxMIH07DQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQoTUlEX0ZBVEZTKSAmJiAhX0ZTX1JFQURPTkxZDQorLyoqIFBvc2l4IG1vZGUgdG8gRmF0RlMgbW9kZSAqLw0KK0lubGluZSBCWVRFIGNvbnZfb3Blbm1vZGUoaW50IGZsYWdzKQ0KK3sNCisgICAgQllURSBvcGVubW9kZSA9IDA7DQorDQorICAgIGlmIChmbGFncyA9PSBPX1JET05MWSkNCisgICAgew0KKyAgICAgICAgb3Blbm1vZGUgPSBGQV9SRUFEOw0KKyAgICB9DQorDQorICAgIGlmIChmbGFncyAmIE9fV1JPTkxZKQ0KKyAgICB7DQorICAgICAgICBvcGVubW9kZSB8PSBGQV9XUklURTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZmxhZ3MgJiBPX1JEV1IpDQorICAgIHsNCisgICAgICAgIG9wZW5tb2RlIHw9IEZBX1JFQUQgfCBGQV9XUklURTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZmxhZ3MgJiBPX0NSRUFUKQ0KKyAgICB7DQorICAgICAgICBpZiAoZmxhZ3MgJiBPX1RSVU5DKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9wZW5tb2RlIHw9IEZBX0NSRUFURV9BTFdBWVM7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgb3Blbm1vZGUgfD0gRkFfT1BFTl9BTFdBWVM7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG9wZW5tb2RlOw0KK30NCisjZW5kaWYNCisNCisvKiogT3BlbmluZyBGaWxlcyAqLw0KKyNpZmRlZiBfX01XX18NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX29wZW4pKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgLyogaW50IG1vZGUgKi8gLi4uKQ0KKyNlbHNlDQoraW50IFNZU0NBTExfUFJFRklYKF9vcGVuKShjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIGludCBtb2RlKQ0KKyNlbmRpZg0KK3sNCisjaWZkZWYgTUlEX0ZBVEZTDQorICAgIGludCBmaWQ7IC8qKiBmaWxlIGhhbmRsZSBpZCAqLw0KKyAgICBGSUwgKnRtcF9maWxlcDsgLyoqIHRlbXAgZmlsZSBoYW5kbGUgcG9pbnRlciAqLw0KKyAgICBCWVRFIG9wZW5tb2RlOw0KKw0KKyAgICAvKiBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgZmlsZSBwb2ludGVyIGluIHRoaXMgaGFuZGxlcyAqLw0KKyAgICBmb3IgKGZpZCA9IDA7IGZpZCA8IEVNQkFSQ19DRkdfTUFYX0ZJTEVIQU5ETEVTOyBmaWQgKyspDQorICAgIHsNCisgICAgICAgIGlmIChmaWxlX2hhbmRsZXNbZmlkXSA9PSBOVUxMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChmaWQgPj0gRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsgLyogTm8gbW9yZSBhdmFpbGFibGUgZmlsZSBoYW5kbGVyICovDQorICAgIH0NCisNCisgICAgLyogTWFsbG9jIG1lbW9yeSBmb3IgRklMIG9iamVjdCAqLw0KKyAgICB0bXBfZmlsZXAgPSAoRklMICopbWFsbG9jKHNpemVvZihGSUwpKTsNCisNCisgICAgaWYgKCF0bXBfZmlsZXApICAgLyogTm8gbW9yZSBtZW1vcnkgKi8NCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGZpbGVfaGFuZGxlc1tmaWRdID0gdG1wX2ZpbGVwOw0KKyNpZiBfRlNfUkVBRE9OTFkNCisNCisgICAgaWYgKGZsYWdzID09IE9fUkRPTkxZKQ0KKyAgICB7DQorICAgICAgICBvcGVubW9kZSA9IEZBX1JFQUQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisjZWxzZQ0KKyAgICBvcGVubW9kZSA9IGNvbnZfb3Blbm1vZGUoZmxhZ3MpOw0KKyNlbmRpZg0KKyAgICBGUkVTVUxUIHJlcyA9IGZfb3Blbih0bXBfZmlsZXAsIHBhdGgsIG9wZW5tb2RlKTsNCisNCisgICAgaWYgKHJlcykgICAvKiBvcGVuIGVycm9yICovDQorICAgIHsNCisgICAgICAgIGZyZWUodG1wX2ZpbGVwKTsNCisgICAgICAgIGZpbGVfaGFuZGxlc1tmaWRdID0gTlVMTDsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICAvKiogQXBwZW5kIGlmIE9fQVBQRU5EIGZsYWdzIGlzIHNldCAqLw0KKyAgICBpZiAoZmxhZ3MgJiBPX0FQUEVORCkNCisgICAgew0KKyAgICAgICAgZl9sc2Vlayh0bXBfZmlsZXAsIGZfc2l6ZSh0bXBfZmlsZXApKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gZmlkICsgU1RESU9fRklEX09GUzsgLyogMC0yIGFyZSBzdGRpbi9zdGRvdXQvc3RkZXJyLCBzbyBwbHVzIDMgKi8NCisNCisjZWxzZSAvKiBObyBGaWxlIFN5c3RlbSAqLw0KKyAgICByZXR1cm4gLTE7DQorI2VuZGlmDQorfQ0KKw0KKy8qKiBDbG9zaW5nIEZpbGVzICovDQoraW50IFNZU0NBTExfUFJFRklYKF9jbG9zZSkoaW50IGhhbmRsZSkNCit7DQorICAgIGlmIChoYW5kbGUgPCBTVERJT19GSURfT0ZTKSAgIC8qIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyICovDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorI2lmZGVmIE1JRF9GQVRGUw0KKw0KKyAgICBpZiAoKGhhbmRsZSAtIFNURElPX0ZJRF9PRlMpID49IEVNQkFSQ19DRkdfTUFYX0ZJTEVIQU5ETEVTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gLTE7IC8qIE5vIG1vcmUgYXZhaWxhYmxlIGZpbGUgaGFuZGxlciAqLw0KKyAgICB9DQorDQorICAgIEZJTCAqdG1wX2ZpbGVwOyAvKiogdGVtcCBmaWxlIGhhbmRsZSBwb2ludGVyICovDQorICAgIHRtcF9maWxlcCA9IGZpbGVfaGFuZGxlc1toYW5kbGUgLSBTVERJT19GSURfT0ZTXTsNCisNCisgICAgaWYgKHRtcF9maWxlcCkNCisgICAgew0KKyAgICAgICAgZmlsZV9oYW5kbGVzW2hhbmRsZSAtIFNURElPX0ZJRF9PRlNdID0gTlVMTDsNCisgICAgICAgIEZSRVNVTFQgcmVzID0gZl9jbG9zZSh0bXBfZmlsZXApOw0KKyAgICAgICAgZnJlZSh0bXBfZmlsZXApOw0KKw0KKyAgICAgICAgaWYgKHJlcykNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKiBSZWFkaW5nIEZpbGVzICovDQoraW50IFNZU0NBTExfUFJFRklYKF9yZWFkKShpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpDQorew0KKyAgICBpZiAoaGFuZGxlIDwgU1RESU9fRklEX09GUykNCisgICAgew0KKyAgICAgICAgaW5pdF9zdGRpb19zZXJpYWwoKTsNCisgICAgICAgIHJldHVybiBzdGRpb19yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsNCisgICAgfQ0KKw0KKyNpZmRlZiBNSURfRkFURlMNCisNCisgICAgaWYgKChoYW5kbGUgLSBTVERJT19GSURfT0ZTKSA+PSBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOyAvKiBObyBtb3JlIGF2YWlsYWJsZSBmaWxlIGhhbmRsZXIgKi8NCisgICAgfQ0KKw0KKyAgICBGSUwgKnRtcF9maWxlcDsgLyoqIHRlbXAgZmlsZSBoYW5kbGUgcG9pbnRlciAqLw0KKyAgICB0bXBfZmlsZXAgPSBmaWxlX2hhbmRsZXNbaGFuZGxlIC0gU1RESU9fRklEX09GU107DQorDQorICAgIGlmICh0bXBfZmlsZXApDQorICAgIHsNCisgICAgICAgIFVJTlQgYnI7DQorICAgICAgICBGUkVTVUxUIHJlcyA9IGZfcmVhZCh0bXBfZmlsZXAsICh2b2lkICopYnVmZmVyLCAoVUlOVClsZW5ndGgsICZicik7DQorDQorICAgICAgICBpZiAocmVzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHJldHVybiAoaW50KWJyOw0KKyAgICB9DQorDQorI2VuZGlmDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqIFdyaXRpbmcgRmlsZXMgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX3dyaXRlKShpbnQgaGFuZGxlLCBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW5ndGgpDQorew0KKyAgICBpZiAoaGFuZGxlIDwgU1RESU9fRklEX09GUykNCisgICAgew0KKyAgICAgICAgaW5pdF9zdGRpb19zZXJpYWwoKTsNCisgICAgICAgIHJldHVybiBzdGRpb193cml0ZShidWZmZXIsIGxlbmd0aCk7DQorICAgIH0NCisNCisjaWZkZWYgTUlEX0ZBVEZTDQorDQorICAgIGlmICgoaGFuZGxlIC0gU1RESU9fRklEX09GUykgPj0gRU1CQVJDX0NGR19NQVhfRklMRUhBTkRMRVMpDQorICAgIHsNCisgICAgICAgIHJldHVybiAtMTsgLyogTm8gbW9yZSBhdmFpbGFibGUgZmlsZSBoYW5kbGVyICovDQorICAgIH0NCisNCisgICAgRklMICp0bXBfZmlsZXA7IC8qKiB0ZW1wIGZpbGUgaGFuZGxlIHBvaW50ZXIgKi8NCisgICAgdG1wX2ZpbGVwID0gZmlsZV9oYW5kbGVzW2hhbmRsZSAtIFNURElPX0ZJRF9PRlNdOw0KKw0KKyAgICBpZiAodG1wX2ZpbGVwKQ0KKyAgICB7DQorICAgICAgICBVSU5UIGJ3Ow0KKyAgICAgICAgRlJFU1VMVCByZXMgPSBmX3dyaXRlKHRtcF9maWxlcCwgKHZvaWQgKilidWZmZXIsIChVSU5UKWxlbmd0aCwgJmJ3KTsNCisNCisgICAgICAgIGlmIChyZXMpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIChpbnQpYnc7DQorICAgIH0NCisNCisjZW5kaWYNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKiogU2Vla2luZyB0byBhIExvY2F0aW9uIGluIGEgRmlsZSAqLw0KK2xvbmcgU1lTQ0FMTF9QUkVGSVgoX2xzZWVrKShpbnQgaGFuZGxlLCBsb25nIG9mZnNldCwgaW50IG1ldGhvZCkNCit7DQorICAgIGlmIChoYW5kbGUgPCBTVERJT19GSURfT0ZTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyNpZmRlZiBNSURfRkFURlMNCisNCisgICAgaWYgKChoYW5kbGUgLSBTVERJT19GSURfT0ZTKSA+PSBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOyAvKiBObyBtb3JlIGF2YWlsYWJsZSBmaWxlIGhhbmRsZXIgKi8NCisgICAgfQ0KKw0KKyAgICBGSUwgKnRtcF9maWxlcDsgLyoqIHRlbXAgZmlsZSBoYW5kbGUgcG9pbnRlciAqLw0KKyAgICB0bXBfZmlsZXAgPSBmaWxlX2hhbmRsZXNbaGFuZGxlIC0gU1RESU9fRklEX09GU107DQorDQorICAgIGlmICh0bXBfZmlsZXApDQorICAgIHsNCisgICAgICAgIEZSRVNVTFQgcmVzOw0KKyAgICAgICAgbG9uZyBvZnMgPSBvZmZzZXQ7DQorDQorICAgICAgICBpZiAobWV0aG9kID09IFNFRUtfQ1VSKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9mcyA9IChsb25nKWZfdGVsbCh0bXBfZmlsZXApICsgb2Zmc2V0Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAobWV0aG9kID09IFNFRUtfRU5EKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG9mcyA9IChsb25nKWZfc2l6ZSh0bXBfZmlsZXApICsgb2Zmc2V0Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG9mcyA+PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlcyA9IGZfbHNlZWsodG1wX2ZpbGVwLCAoRFdPUkQpb2ZzKTsNCisNCisgICAgICAgICAgICBpZiAocmVzKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICAgICAgICAgIHJldHVybiBmX3RlbGwodG1wX2ZpbGVwKTsNCisgICAgICAgIH0NCisNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKiBUZXN0aW5nIEZpbGUgQWNjZXNzICovDQoraW50IFNZU0NBTExfUFJFRklYKF9hY2Nlc3MpKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlKQ0KK3sNCisjaWZkZWYgTUlEX0ZBVEZTDQorICAgIEZSRVNVTFQgcmVzID0gZl9zdGF0KChjb25zdCBUQ0hBUiAqKW5hbWUsIE5VTEwpOw0KKw0KKyAgICBpZiAocmVzKSB7IHJldHVybiAtMTsgfQ0KKw0KKyAgICByZXR1cm4gMDsNCisjZW5kaWYNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKiogVGVzdGluZyBmb3IgYW4gSW50ZXJhY3RpdmUgRGlzcGxheSBEZXZpY2UgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX2lzYXR0eSkoaW50IGhhbmRsZSkNCit7DQorICAgIGlmIChoYW5kbGUgPCBTVERJT19GSURfT0ZTKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMTsNCisgICAgfQ0KKw0KKyNpZmRlZiBNSURfRkFURlMNCisNCisgICAgaWYgKChoYW5kbGUgLSBTVERJT19GSURfT0ZTKSA+PSBFTUJBUkNfQ0ZHX01BWF9GSUxFSEFORExFUykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOyAvKiBObyBtb3JlIGF2YWlsYWJsZSBmaWxlIGhhbmRsZXIgKi8NCisgICAgfQ0KKw0KKyAgICBGSUwgKnRtcF9maWxlcDsgLyoqIHRlbXAgZmlsZSBoYW5kbGUgcG9pbnRlciAqLw0KKyAgICB0bXBfZmlsZXAgPSBmaWxlX2hhbmRsZXNbaGFuZGxlIC0gU1RESU9fRklEX09GU107DQorDQorICAgIGlmICh0bXBfZmlsZXApDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorI2VuZGlmDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqIFVubGluayBGaWxlcyAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfdW5saW5rKShjb25zdCBjaGFyICpwYXRoKQ0KK3sNCisjaWZkZWYgTUlEX0ZBVEZTDQorDQorICAgIGlmIChmX3VubGluaygoY29uc3QgVENIQVIgKilwYXRoKSA9PSBGUl9PSykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisjZW5kaWYNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKiogUmVuYW1pbmcgRmlsZXMgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgocmVuYW1lKShjb25zdCBjaGFyICpvbGQsIGNvbnN0IGNoYXIgKm5ldykNCit7DQorI2lmZGVmIE1JRF9GQVRGUw0KKw0KKyAgICBpZiAoZl9yZW5hbWUoKGNvbnN0IFRDSEFSICopb2xkLCAoY29uc3QgVENIQVIgKiluZXcpID09IEZSX09LKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8qKiBSZW1vdmUgRGlyZWN0b3J5ICovDQoraW50IFNZU0NBTExfUFJFRklYKF9ybWRpcikoY29uc3QgY2hhciAqcGF0aG5hbWUpDQorew0KKyAgICByZXR1cm4gU1lTQ0FMTF9QUkVGSVgoX3VubGluaykocGF0aG5hbWUpOw0KK30NCisNCisvKiogU3RhdHVzIG9mIGEgZmlsZSAoYnkgbmFtZSkuICovDQoraW50IFNZU0NBTExfUFJFRklYKF9zdGF0KShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQ0KK3sNCisgICAgaWYgKCFidWYpIHsgcmV0dXJuIC0xOyB9DQorDQorI2lmZGVmIE1JRF9GQVRGUw0KKyAgICBGSUxJTkZPIGZubzsNCisNCisjaWYgX1VTRV9MRk4NCisgICAgZm5vLmxmbmFtZSA9IE5VTEw7DQorICAgIGZuby5sZnNpemUgPSAwOw0KKyNlbmRpZg0KKw0KKyAgICBpZiAoZl9zdGF0KChjb25zdCBUQ0hBUiAqKXBhdGgsICZmbm8pID09IEZSX09LKQ0KKyAgICB7DQorICAgICAgICBpZiAoZm5vLmZhdHRyaWIgJiBBTV9ESVIpDQorICAgICAgICB7DQorICAgICAgICAgICAgYnVmLT5zdF9tb2RlID0gU19JRkRJUjsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBidWYtPnN0X21vZGUgPSBTX0lGUkVHOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYnVmLT5zdF9zaXplID0gZm5vLmZzaXplOw0KKyAgICAgICAgYnVmLT5zdF9tdGltZSA9IGZuby5mdGltZTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorI2VuZGlmDQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqIFN0YXR1cyBvZiBhIGZpbGUgKGJ5IG5hbWUpLiAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfbHN0YXQpKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYpDQorew0KKyAgICByZXR1cm4gU1lTQ0FMTF9QUkVGSVgoX3N0YXQpKHBhdGgsIGJ1Zik7DQorfQ0KKw0KKy8qKiBTdGF0dXMgb2YgYW4gb3BlbiBmaWxlICovDQorLyoqIFx0b2RvIGZzdGF0IG5lZWQgbW9yZSB3b3JrIHRvIHByb3ZpZGUgY29ycmVjdCBmaWxlIHN0YXQgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX2ZzdGF0KShpbnQgaGFuZGxlLCBzdHJ1Y3Qgc3RhdCAqYnVmKQ0KK3sNCisgICAgaWYgKCFidWYpIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIGlmIChoYW5kbGUgPCBTVERJT19GSURfT0ZTKQ0KKyAgICB7DQorICAgICAgICBidWYtPnN0X21vZGUgPSBTX0lGQ0hSOw0KKyAgICAgICAgYnVmLT5zdF9ibGtzaXplID0gMTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIC8qKiBDYW4ndCBwcm92aWRlIHVuaXggZmlsZSBzdGF0IHVzaW5nIGZhdGZzIEFQSSAqLw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIERpcmVjdG9yeSBJZGVudGlmaWNhdGlvbiAvLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8qKiBEZXRlcm1pbmluZyB0aGUgQ3VycmVudCBEaXJlY3RvcnkgKi8NCitjaGFyICpTWVNDQUxMX1BSRUZJWChfZ2V0Y3dkKShjaGFyICpidWYsIGludCBsZW4pDQorew0KKyNpZmRlZiBNSURfRkFURlMNCisNCisgICAgaWYgKGZfZ2V0Y3dkKChUQ0hBUiAqKWJ1ZiwgKFVJTlQpbGVuKSA9PSBGUl9PSykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIGJ1ZjsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDQorI2lmZGVmIF9fR05VX18NCitjaGFyICpTWVNDQUxMX1BSRUZJWChnZXRjd2QpKGNoYXIgKmJ1ZiwgaW50IGxlbikNCit7DQorICAgIHJldHVybiBTWVNDQUxMX1BSRUZJWChfZ2V0Y3dkKShidWYsIGxlbik7DQorfQ0KKyNlbmRpZg0KKw0KKyNpZiBfX01XX18NCisjcHJhZ21hIHdlYWsgb3BlbiA9IF9vcGVuDQorI3ByYWdtYSB3ZWFrIGNsb3NlID0gX2Nsb3NlDQorI3ByYWdtYSB3ZWFrIHJlYWQgPSBfcmVhZA0KKyNwcmFnbWEgd2VhayB3cml0ZSA9IF93cml0ZQ0KKyNwcmFnbWEgd2VhayBsc2VlayA9IF9sc2Vlaw0KKyNwcmFnbWEgd2VhayB1bmxpbmsgPSBfdW5saW5rDQorI3ByYWdtYSB3ZWFrIGdldGN3ZCA9IF9nZXRjd2QNCisjcHJhZ21hIHdlYWsgaXNhdHR5ID0gX2lzYXR0eQ0KKyNwcmFnbWEgd2VhayBnZXRwaWQgPSBfZ2V0cGlkDQorI3ByYWdtYSB3ZWFrIGFjY2VzcyA9IF9hY2Nlc3MNCisjcHJhZ21hIHdlYWsgcmVtb3ZlID0gX3VubGluaw0KKw0KKyNwcmFnbWEgd2VhayBmc3RhdCA9IF9mc3RhdA0KKyNwcmFnbWEgd2VhayBzdGF0ID0gX3N0YXQNCisjcHJhZ21hIHdlYWsgbHN0YXQgPSBfbHN0YXQNCisNCisjZW5kaWYNCisNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8gUHJvY2VzcyBNYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAvLw0KKy8vIFx0b2RvIEludGVncmF0ZSB3aXRoIEZyZWVSVE9TIHRhc2sgLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLyoqIERldGVybWluaW5nIGEgUHJvY2VzcyBJRCAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfZ2V0cGlkKSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK2V4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgX2V4aXRfbG9vcCgpOw0KKw0KKy8qKiBUZXJtaW5hdGluZyBhIFByb2Nlc3MgKi8NCit2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgU1lTQ0FMTF9QUkVGSVgoX2V4aXQpKGludCBzdGF0dXMpDQorew0KKyAgICBfZXhpdF9sb29wKHN0YXR1cyk7DQorfQ0KKw0KKy8qKiBLaWxsIGEgcHJvY2VzcyAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfa2lsbCkoaW50IHBpZCwgaW50IHNpZykNCit7DQorICAgIFNZU0NBTExfUFJFRklYKF9leGl0KShzaWcpOw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8gRW52aXJvbm1lbnQgSWRlbnRpZmljYXRpb24gLy8NCisvLyBObyBlbnZpcm9ubWVudCBwcm92aWRlZCAgICAvLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorc3RhdGljIGNoYXIgKnNldHRpbmdzW19FTlZJUk9OX0xFTl0gPQ0KK3sNCisgICAgLyoNCisgICAgICogQWRkIHlvdXIgZGVmYXVsdCBlbnZpcm9ubWVudCBoZXJlOg0KKyAgICAgKi8NCisgICAgIlBMQVRGT1JNPUVNQkFSQyIsDQorICAgICJQT1NJWExZX0NPUlJFQ1QiLA0KKyAgICAwDQorfTsNCisNCitjaGFyICoqX2Vudmlyb24gPSBzZXR0aW5nczsNCisNCisvKiogR2V0dGluZyBFbnZpcm9ubWVudCBWYXJpYWJsZXMgKi8NCitjaGFyICpTWVNDQUxMX1BSRUZJWChfZ2V0ZW52KShjb25zdCBjaGFyICp2YXIpDQorew0KKyAgICBpbnQgbGVuOw0KKyAgICBjaGFyICoqZXA7DQorDQorICAgIGlmICghKGVwID0gX2Vudmlyb24pKSB7IHJldHVybiBOVUxMOyB9DQorDQorICAgIGxlbiA9IHN0cmxlbih2YXIpOw0KKw0KKyAgICB3aGlsZSAoKmVwKQ0KKyAgICB7DQorICAgICAgICBpZiAobWVtY21wKHZhciwgKmVwLCBsZW4pID09IDAgJiYgKCplcClbbGVuXSA9PSAnPScpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICplcCArIGxlbiArIDE7DQorICAgICAgICB9DQorDQorICAgICAgICBlcCsrOw0KKyAgICB9DQorDQorICAgIHJldHVybiBOVUxMOw0KK30NCisNCisvKiogUHV0dGluZyBFbnZpcm9ubWVudCBWYXJpYWJsZSAqLw0KK2ludCBTWVNDQUxMX1BSRUZJWChfcHV0ZW52KShjaGFyICpzdHJpbmcpDQorew0KKyAgICBpbnQgaSwgbGVuOw0KKw0KKyAgICBmb3IgKGxlbiA9IDA7IHN0cmluZ1tsZW5dICYmIHN0cmluZ1tsZW5dICE9ICc9JzsgbGVuKyspOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgX0VOVklST05fTEVOOyBpKyspDQorICAgIHsNCisgICAgICAgIGlmIChfZW52aXJvbltpXSAhPSAwICYmIHN0cm5jbXAoc3RyaW5nLCBfZW52aXJvbltpXSwgbGVuKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIF9lbnZpcm9uW2ldID0gc3RyaW5nOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCBfRU5WSVJPTl9MRU47IGkrKykNCisgICAgew0KKyAgICAgICAgaWYgKF9lbnZpcm9uW2ldID09IE5VTEwpDQorICAgICAgICB7DQorICAgICAgICAgICAgX2Vudmlyb25baV0gPSBzdHJpbmc7DQorDQorICAgICAgICAgICAgaWYgKChpICsgMSkgPCBfRU5WSVJPTl9MRU4pDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBfZW52aXJvbltpICsgMV0gPSBOVUxMOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KKyNpZiBfX01XX18NCitjaGFyICpfbXdnZXRlbnYyKGNvbnN0IGNoYXIgKnZhcikNCit7DQorICAgIHJldHVybiBTWVNDQUxMX1BSRUZJWChfZ2V0ZW52KSh2YXIpOw0KK30NCisjcHJhZ21hIHdlYWsgZ2V0ZW52ID0gX2dldGVudg0KKyNwcmFnbWEgd2VhayBwdXRlbnYgPSBfcHV0ZW52DQorI2VuZGlmDQorDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIFRpbWUgQ2FsY3VsYXRpb24gLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorLyoqIERldGVybWluaW5nIHRoZSBDbG9jayBWYWx1ZSAqLw0KK2Nsb2NrX3QgU1lTQ0FMTF9QUkVGSVgoY2xvY2spKHZvaWQpDQorew0KKyAgICB1aW50NjRfdCB0b3RhbF90aWNrczsNCisNCisgICAgdG90YWxfdGlja3MgPSAodWludDY0X3QpT1NQX0dFVF9DVVJfSFdUSUNLUygpOw0KKw0KKyAgICByZXR1cm4gKGNsb2NrX3QpKCh1aW50NjRfdCkodG90YWxfdGlja3MgKiBDTE9DS1NfUEVSX1NFQykgLyBCT0FSRF9DUFVfQ0xPQ0spOw0KK30NCisNCisjaWYgIUVNQkFSQ19DRkdfVVNFX1JUQ1RJTUUNCitzdGF0aWMgaW50IGJ1aWxkdGltZV9yZWFkeSA9IDA7DQorc3RhdGljIHN0cnVjdCB0bSBidWlsZF90bTsNCitzdGF0aWMgdGltZV90IGJ1aWxkX3RpbWU7DQorI2VuZGlmDQorLyoqIERldGVybWluaW5nIHRoZSBUaW1lIFZhbHVlICovDQordGltZV90IFNZU0NBTExfUFJFRklYKF90aW1lKSh0aW1lX3QgKnRpbWVyKQ0KK3sNCisgICAgaWYgKCFidWlsZHRpbWVfcmVhZHkpDQorICAgIHsNCisgICAgICAgIGJ1aWxkX3RpbWUgPSBnZXRfYnVpbGRfdGltZWRhdGUoJmJ1aWxkX3RtKTsNCisgICAgICAgIGJ1aWxkdGltZV9yZWFkeSA9IDE7DQorICAgIH0NCisNCisgICAgdGltZV90IGN1cl90aW1lOw0KKyAgICBjdXJfdGltZSA9IGJ1aWxkX3RpbWUgKyAoT1NQX0dFVF9DVVJfTVMoKSAvIDEwMDApOw0KKw0KKyAgICBpZiAodGltZXIpDQorICAgIHsNCisgICAgICAgICp0aW1lciA9IGN1cl90aW1lOw0KKyAgICB9DQorDQorICAgIHJldHVybiBjdXJfdGltZTsNCit9DQorDQorI2lmZGVmIF9fR05VX18NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX3RpbWVzKShzdHJ1Y3QgdG1zICpidWYpDQorew0KKyAgICBpZiAoIWJ1ZikgeyByZXR1cm4gLTE7IH0NCisNCisgICAgYnVmLT50bXNfdXRpbWUgPSBPU1BfR0VUX0NVUl9NUygpIC8gMTAwMDsNCisgICAgYnVmLT50bXNfc3RpbWUgPSAwOw0KKyAgICBidWYtPnRtc19jdXRpbWUgPSAwOw0KKyAgICBidWYtPnRtc19jc3RpbWUgPSAwOw0KKyAgICByZXR1cm4gMDsNCit9DQorI2VuZGlmDQorDQoraW50IFNZU0NBTExfUFJFRklYKF9nZXR0aW1lb2ZkYXkpKHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqdHopDQorew0KKyAgICBpZiAodHYgPT0gTlVMTCkgeyByZXR1cm4gLTE7IH0NCisNCisgICAgaWYgKCFidWlsZHRpbWVfcmVhZHkpDQorICAgIHsNCisgICAgICAgIGJ1aWxkX3RpbWUgPSBnZXRfYnVpbGRfdGltZWRhdGUoJmJ1aWxkX3RtKTsNCisgICAgICAgIGJ1aWxkdGltZV9yZWFkeSA9IDE7DQorICAgIH0NCisNCisgICAgdHYtPnR2X3NlYyA9IGJ1aWxkX3RpbWUgKyAoT1NQX0dFVF9DVVJfVVMoKSAvIDEwMDAwMDApOw0KKyAgICB0di0+dHZfdXNlYyA9IE9TUF9HRVRfQ1VSX1VTKCkgJSAxMDAwMDAwOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2lmIF9fTVdfXw0KKyNwcmFnbWEgd2VhayB0aW1lID0gX3RpbWUNCisjcHJhZ21hIHdlYWsgZ2V0dGltZW9mZGF5ID0gX2dldHRpbWVvZmRheQ0KKyNlbmRpZg0KKw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLyBBcmd1bWVudCBQcm9jZXNzaW5nIC8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8qKiBDb3VudGluZyBBcmd1bWVudHMgKi8NCitpbnQgU1lTQ0FMTF9QUkVGSVgoX19hcmdjKSh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIDA7DQorfQ0KKy8qKiBGaW5kaW5nIHRoZSBWYWx1ZSBvZiBhbiBBcmd1bWVudCAqLw0KK2NoYXIgKlNZU0NBTExfUFJFRklYKF9fYXJndikoaW50IG51bSkNCit7DQorICAgIHJldHVybiBOVUxMOw0KK30NCisNCisjZW5kaWYgLyogIWRlZmluZWQoX0hPU1RMSU5LXykgKi8NCisNCisjaWYgZGVmaW5lZChfX0dOVV9fKSAmJiAhZGVmaW5lZChfSEFWRV9MSUJHTE9TU18pICYmICFkZWZpbmVkKF9IT1NUTElOS18pDQorLyogU3VwcG9ydCBuZXdsaWJjIGZvciBuZXdsaWJjKDw9IEFSQyBHTlUgMjAxNS4wNikgKi8NCit0eXBlZGVmIHN0cnVjdCBleGNfZnJhbWUNCit7DQorICAgIHVpbnQzMl90IGVyYnRhOw0KKyAgICB1aW50MzJfdCBlcmV0Ow0KKyAgICB1aW50MzJfdCBlcnN0YXR1czsNCisgICAgdWludDMyX3QgbHBjb3VudDsNCisgICAgdWludDMyX3QgbHBlbmQ7DQorICAgIHVpbnQzMl90IGxwc3RhcnQ7DQorICAgIHVpbnQzMl90IGJsaW5rOw0KKyAgICB1aW50MzJfdCByMzA7DQorICAgIHVpbnQzMl90IGlsaW5rOw0KKyAgICB1aW50MzJfdCBmcDsNCisgICAgdWludDMyX3QgZ3A7DQorICAgIHVpbnQzMl90IHIxMjsNCisgICAgdWludDMyX3QgcjExOw0KKyAgICB1aW50MzJfdCByMTA7DQorICAgIHVpbnQzMl90IHI5Ow0KKyAgICB1aW50MzJfdCByODsNCisgICAgdWludDMyX3Qgcjc7DQorICAgIHVpbnQzMl90IHI2Ow0KKyAgICB1aW50MzJfdCByNTsNCisgICAgdWludDMyX3QgcjQ7DQorICAgIHVpbnQzMl90IHIzOw0KKyAgICB1aW50MzJfdCByMjsNCisgICAgdWludDMyX3QgcjE7DQorICAgIHVpbnQzMl90IHIwOw0KK30gRVhDX0ZSQU1FOw0KKy8qKg0KKyAqIFxicmllZiBzeXNjYWxsIGZ1bmN0aW9ucw0KKyAqICAgICAgICBwYXJ0bHkgaW1wbGVtZW50ZWQgZm9yIGdudSBpbiBzd2kgZXhjZXB0aW9uIGhhbmRsZXINCisgKiBccGFyYW0gcHRyIGV4Y2VwdGlvbiBoYW5kbGUgc3RhY2sgcG9pbnRlcg0KKyAqLw0KK3ZvaWQgc3lzY2FsbF9zd2kodm9pZCAqcHRyKQ0KK3sNCisgICAgRVhDX0ZSQU1FICpzd2lfZnJhbWUgPSAoRVhDX0ZSQU1FICopcHRyOw0KKw0KKyAgICBzd2l0Y2ggKHN3aV9mcmFtZS0+cjgpDQorICAgIHsNCisgICAgY2FzZSBTWVNfcmVhZDoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfcmVhZCkoKGludCkoc3dpX2ZyYW1lLT5yMCksIChjaGFyICopKHN3aV9mcmFtZS0+cjEpLCAoaW50KShzd2lfZnJhbWUtPnIyKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfd3JpdGU6DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gU1lTQ0FMTF9QUkVGSVgoX3dyaXRlKSgoaW50KShzd2lfZnJhbWUtPnIwKSwgKGNoYXIgKikoc3dpX2ZyYW1lLT5yMSksIChpbnQpKHN3aV9mcmFtZS0+cjIpKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19leGl0Og0KKyAgICAgICAgU1lTQ0FMTF9QUkVGSVgoX2V4aXQpKDEpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX29wZW46DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gU1lTQ0FMTF9QUkVGSVgoX29wZW4pKChjb25zdCBjaGFyICopKHN3aV9mcmFtZS0+cjApLCAoaW50KShzd2lfZnJhbWUtPnIxKSwgKGludCkoc3dpX2ZyYW1lLT5yMikpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX2Nsb3NlOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF9jbG9zZSkoKGludCkoc3dpX2ZyYW1lLT5yMCkpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX2xzZWVrOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF9sc2VlaykoKGludCkoc3dpX2ZyYW1lLT5yMCksIChsb25nKShzd2lfZnJhbWUtPnIxKSwgKGludCkoc3dpX2ZyYW1lLT5yMikpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX2ZzdGF0Og0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF9mc3RhdCkoKGludCkoc3dpX2ZyYW1lLT5yMCksIChzdHJ1Y3Qgc3RhdCAqKShzd2lfZnJhbWUtPnIxKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfdW5saW5rOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF91bmxpbmspKChjb25zdCBjaGFyICopKHN3aV9mcmFtZS0+cjApKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU190aW1lOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF90aW1lKSgodGltZV90ICopKHN3aV9mcmFtZS0+cjApKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19nZXR0aW1lb2ZkYXk6DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gU1lTQ0FMTF9QUkVGSVgoX2dldHRpbWVvZmRheSkoKHN0cnVjdCB0aW1ldmFsICopKHN3aV9mcmFtZS0+cjApLCAodm9pZCAqKShzd2lfZnJhbWUtPnIxKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfYWNjZXNzOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF9hY2Nlc3MpKChjb25zdCBjaGFyICopKHN3aV9mcmFtZS0+cjApLCAoaW50KShzd2lfZnJhbWUtPnIxKSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTWVNfa2lsbDoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSBTWVNDQUxMX1BSRUZJWChfa2lsbCkoKGludCkoc3dpX2ZyYW1lLT5yMCksIChpbnQpKHN3aV9mcmFtZS0+cjEpKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIFNZU19yZW5hbWU6DQorICAgICAgICBzd2lfZnJhbWUtPnIwID0gU1lTQ0FMTF9QUkVGSVgocmVuYW1lKSgoY29uc3QgY2hhciAqKShzd2lfZnJhbWUtPnIwKSwgKGNvbnN0IGNoYXIgKikoc3dpX2ZyYW1lLT5yMSkpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX3RpbWVzOg0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IFNZU0NBTExfUFJFRklYKF90aW1lcykoKHN0cnVjdCB0bXMgKikoc3dpX2ZyYW1lLT5yMCkpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgU1lTX2dldGN3ZDoNCisgICAgICAgIHN3aV9mcmFtZS0+cjAgPSAodWludDMyX3QpU1lTQ0FMTF9QUkVGSVgoX2dldGN3ZCkoKGNoYXIgKikoc3dpX2ZyYW1lLT5yMCksIChpbnQpKHN3aV9mcmFtZS0+cjEpKTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgc3dpX2ZyYW1lLT5yMCA9IC0xOw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgc3dpX2ZyYW1lLT5lcmV0ID0gc3dpX2ZyYW1lLT5lcmV0ICsgNDsNCit9DQorI2VuZGlmIC8qIF9fR05VX18gJiYgIV9IQVZFX0xJQkdMT1NTXyAmJiBfSE9TVExJTktfICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9lbWJBUkNfc3lzY2FsbHMuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhYmZhMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3N5c2NhbGxzLmgKQEAgLTAsMCArMSw3MCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMS0xOA0KKyAqIFxhdXRob3IgSHVhcWkgRmFuZyhIdWFxaS5GYW5nQHN5bm9wc3lzLmNvbSkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKioNCisgKiBcZmlsZQ0KKyAqIFxpbmdyb3VwIEVNQkFSQ19TWVNDQUxMDQorICogXGJyaWVmIFN5c2NhbGwgc3VwcG9ydCBoZWFkZXIgZmlsZQ0KKyAqLw0KKyNpZm5kZWYgX0VNQkFSQ19TWVNDQUxMU18NCisjZGVmaW5lIF9FTUJBUkNfU1lTQ0FMTFNfDQorDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2luY2x1ZGUgImJvYXJkL2JvYXJkLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmIGRlZmluZWQoX19HTlVfXykgJiYgIWRlZmluZWQoX0hBVkVfTElCR0xPU1NfKQ0KKy8qIF9IQVZFX0xJQkdMT1NTXyBpcyBkZWZpbmVkIGluIG9wdGlvbnMvdG9vbGNoYWluL3Rvb2xjaGFpbl9nbnUubWsgKi8NCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4NCisjZGVmaW5lIFNZU0NBTExfUFJFRklYKHgpICAgICAgIHN5c2NhbGwjI3gNCisNCisjZW5kaWYgLyogX19HTlVfXyAmJiAhX0hBVkVfTElCR0xPU1NfICovDQorDQorI2lmbmRlZiBTWVNDQUxMX1BSRUZJWA0KKyNkZWZpbmUgU1lTQ0FMTF9QUkVGSVgoeCkgICAgICAgeA0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9fR05VX18pICYmICFkZWZpbmVkKF9IQVZFX0xJQkdMT1NTXykgJiYgIWRlZmluZWQoX0hPU1RMSU5LXykNCitleHRlcm4gdm9pZCBzeXNjYWxsX3N3aSh2b2lkICpwdHIpOw0KKyNlbmRpZg0KKw0KKyNpbmNsdWRlICJlbWJBUkNfdGFyZ2V0LmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAgLyogX0VNQkFSQ19TWVNDQUxMU18gKi8NCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuYyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3RhcmdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGYwYjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuYwpAQCAtMCwwICsxLDg0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTAzLTAyDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RkYXJnLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8Y3R5cGUuaD4NCisjaW5jbHVkZSAiZW1iQVJDX3N5c2NhbGxzLmgiDQorDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8gT1RIRVIgUkVRVUlSRUQgRlVOQ1RJT05TIC8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorc3RhdGljIGNvbnN0IGNoYXIgc3pFbmdsaXNoTW9udGhbMTJdWzRdID0geyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCisNCit0aW1lX3QgZ2V0X2J1aWxkX3RpbWVkYXRlKHN0cnVjdCB0bSAqYnVpbGRfdG0pDQorew0KKyAgICBpZiAoIWJ1aWxkX3RtKSB7IHJldHVybiAwOyB9DQorDQorICAgIGNoYXIgc3pNb250aFs1XTsNCisgICAgaW50IHRtX3llYXIsIHRtX21vbiA9IDAsIHRtX2RheTsNCisgICAgaW50IHRtX2hvdXIsIHRtX21pbiwgdG1fc2VjOw0KKyAgICB0aW1lX3QgYnVpbGRfdGltZTsNCisNCisgICAgLyoqIEdldCBCdWlsZCBEYXRlICovDQorICAgIHNzY2FuZihfX0RBVEVfXywgIiVzICVkICVkIiwgc3pNb250aCwgJnRtX2RheSwgJnRtX3llYXIpIDsNCisNCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQ0KKyAgICB7DQorICAgICAgICBpZiAoc3RybmNtcChzek1vbnRoLCBzekVuZ2xpc2hNb250aFtpXSwgMykgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB0bV9tb24gPSBpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8qKiBHZXQgQnVpbGQgVGltZSAqLw0KKyAgICBzc2NhbmYoX19USU1FX18sICIlZDolZDolZCIsICZ0bV9ob3VyLCAmdG1fbWluLCAmdG1fc2VjKTsNCisgICAgYnVpbGRfdG0tPnRtX3NlYyA9IHRtX3NlYzsNCisgICAgYnVpbGRfdG0tPnRtX21pbiA9IHRtX21pbjsNCisgICAgYnVpbGRfdG0tPnRtX2hvdXIgPSB0bV9ob3VyOw0KKyAgICBidWlsZF90bS0+dG1fbWRheSA9IHRtX2RheTsNCisgICAgYnVpbGRfdG0tPnRtX21vbiA9IHRtX21vbjsNCisgICAgYnVpbGRfdG0tPnRtX3llYXIgPSB0bV95ZWFyIC0gMTkwMDsNCisgICAgYnVpbGRfdG0tPnRtX2lzZHN0ID0gMDsNCisNCisgICAgYnVpbGRfdGltZSA9IG1rdGltZShidWlsZF90bSk7DQorICAgIHJldHVybiBidWlsZF90aW1lOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZW1iQVJDX3RhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTFiMTQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2VtYkFSQ190YXJnZXQuaApAQCAtMCwwICsxLDY0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTAzLTAyDQorICogXGF1dGhvciBIdWFxaSBGYW5nKEh1YXFpLkZhbmdAc3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qKg0KKyAqIFxmaWxlDQorICogXGluZ3JvdXAgRU1CQVJDX1NZU0NBTEwNCisgKiBcYnJpZWYgQ29tbW9uIGZ1bmN0aW9ucyBwcm92aWRlZCBmb3IgZW1iQVJDIHRhcmdldCBwbGF0Zm9ybQ0KKyAqLw0KKyNpZm5kZWYgX0VNQkFSQ19UQVJHRVRfSF8NCisjZGVmaW5lIF9FTUJBUkNfVEFSR0VUX0hfDQorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2luY2x1ZGUgPHRpbWUuaD4NCisjaW5jbHVkZSA8bGltaXRzLmg+DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2lmbmRlZiBQQVRIX01BWA0KKyNkZWZpbmUgUEFUSF9NQVggICAgNDA5Ng0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9fTVdfXykNCisjaW5jbHVkZSAieWFfZ2V0b3B0LmgiDQorI2VuZGlmDQorDQorZXh0ZXJuIHRpbWVfdCBnZXRfYnVpbGRfdGltZWRhdGUoc3RydWN0IHRtICpidWlsZF90bSk7DQorZXh0ZXJuIHZvaWQgZ251X3ByaW50Zl9zZXR1cCh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmICAvKiBfRU1CQVJDX1RBUkdFVF9IXyAqLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZmF0ZnNfZGlyZW50LmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2ZhdGZzX2RpcmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDVkNjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL2ZhdGZzX2RpcmVudC5jCkBAIC0wLDAgKzEsMTMwIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIFN5bm9wc3lzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwNCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzDQorICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yDQorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTeW5vcHN5cywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQ0KKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorICogQU5ZIEZBVEZTX0RJUkVDVCwgSU5GQVRGU19ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFx2ZXJzaW9uIDIwMTcuMDMNCisgKiBcZGF0ZSAyMDE2LTAxLTIwDQorICogXGF1dGhvciBXYXluZSBSZW4oV2VpLlJlbkBzeW5vcHN5cy5jb20pDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmZGVmIE1JRF9GQVRGUw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgImZhdGZzX2RpcmVudC5oIg0KKw0KK0ZBVEZTX0RJUiAqb3BlbmRpcihjb25zdCBjaGFyICpwYXRoKQ0KK3sNCisgICAgRlJFU1VMVCByZXM7DQorICAgIEZBVEZTX0RJUiAqZHA7DQorDQorICAgIC8qIE1hbGxvYyBtZW1vcnkgZm9yIGRpciBvYmplY3QgKi8NCisgICAgZHAgPSAoRkFURlNfRElSICopbWFsbG9jKHNpemVvZihGQVRGU19ESVIpKTsNCisNCisgICAgaWYgKCFkcCkgICAvKiBObyBtb3JlIG1lbW9yeSAqLw0KKyAgICB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0KKyAgICByZXMgPSBmX29wZW5kaXIoJmRwLT5kaXIsIHBhdGgpOw0KKw0KKyAgICBpZiAocmVzICE9IEZSX09LKQ0KKyAgICB7DQorICAgICAgICBmcmVlKGRwKTsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICAgIHJldHVybiBkcDsNCit9DQorDQorZXh0ZXJuIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIoRkFURlNfRElSICpkcCkNCit7DQorICAgIGlmICghZHApIHsgcmV0dXJuIE5VTEw7IH0NCisNCisgICAgRlJFU1VMVCByZXM7DQorICAgIEZJTElORk8gaW5mbzsNCisNCisjaWYgX1VTRV9MRk4NCisgICAgaW5mby5sZm5hbWUgPSBkcC0+ZF9kaXJlbnQuZF9uYW1lOw0KKyAgICBpbmZvLmxmc2l6ZSA9IHNpemVvZihkcC0+ZF9kaXJlbnQuZF9uYW1lKTsNCisjZW5kaWYNCisgICAgcmVzID0gZl9yZWFkZGlyKCZkcC0+ZGlyLCAmaW5mbyk7DQorDQorICAgIGlmIChyZXMgIT0gRlJfT0sgfHwgaW5mby5mbmFtZVswXSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gIE5VTEw7DQorICAgIH0NCisNCisjaWYgX1VTRV9MRk4NCisNCisgICAgaWYgKCooaW5mby5sZm5hbWUpID09IDApDQorICAgIHsNCisgICAgICAgIGRwLT5kX2RpcmVudC5kX25hbWxlbiA9IDEzOyAvKiA4LjMgZm9ybWF0ICovDQorICAgICAgICBtZW1jcHkoZHAtPmRfZGlyZW50LmRfbmFtZSwgaW5mby5mbmFtZSwgMTMpOw0KKyAgICB9DQorDQorI2Vsc2UNCisgICAgZHAtPmRfZGlyZW50LmRfbmFtbGVuID0gMTM7IC8qIDguMyBmb3JtYXQgKi8NCisgICAgbWVtY3B5KGRwLT5kX2RpcmVudC5kX25hbWUsIGluZm8uZm5hbWUsIDEzKTsNCisjZW5kaWYNCisNCisgICAgcmV0dXJuICYoZHAtPmRfZGlyZW50KTsNCit9DQorDQorZXh0ZXJuIGludCBjbG9zZWRpcihGQVRGU19ESVIgKmRwKQ0KK3sNCisgICAgRlJFU1VMVCByZXM7DQorDQorICAgIGlmICghZHApIHsgcmV0dXJuIC0xOyB9DQorDQorICAgIHJlcyA9IGZfY2xvc2VkaXIoJmRwLT5kaXIpOw0KKyAgICBmcmVlKGRwKTsNCisNCisgICAgaWYgKHJlcyAhPSBGUl9PSykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisNCitleHRlcm4gaW50IGZhdGZzX3N0YXQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGZhdGZzX3N0YXQgKmJ1ZikNCit7DQorICAgIEZSRVNVTFQgcmVzOw0KKw0KKyAgICByZXMgPSBmX3N0YXQocGF0aCwgJihidWYtPmZhdGZzX2ZpbGluZm8pKTsNCisNCisgICAgaWYgKHJlcyAhPSBGUl9PSykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGJ1Zi0+c3RfbW9kZSA9IGJ1Zi0+ZmF0ZnNfZmlsaW5mby5mYXR0cmliOw0KKyAgICByZXR1cm4gMDsNCit9DQorI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc3lub3BzeXMvZW1iYXJjX2Vtc2tfYnNwL2xpYnJhcnkvY2xpYi9mYXRmc19kaXJlbnQuaCBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZmF0ZnNfZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhYzlmMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvZmF0ZnNfZGlyZW50LmgKQEAgLTAsMCArMSw4NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICogQ29weXJpZ2h0IChjKSAyMDE3LCBTeW5vcHN5cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQorICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcw0KKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcg0KKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3lub3BzeXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkNCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICoNCisgKiBcdmVyc2lvbiAyMDE3LjAzDQorICogXGRhdGUgMjAxNi0wMS0yMA0KKyAqIFxhdXRob3IgV2F5bmUgUmVuKFdlaS5SZW5Ac3lub3BzeXMuY29tKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZm5kZWYgX0ZBVEZTX0RJUkVOVF9IXw0KKyNkZWZpbmUgX0ZBVEZTX0RJUkVOVF9IXw0KKw0KKyNpbmNsdWRlICJib2FyZC9ib2FyZC5oIg0KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KKw0KKyNpZm5kZWYgTUlEX0ZBVEZTDQorI2Vycm9yICJGYXRGcyBzaG91bGQgYmUgZW5hYmxlZCINCisjZW5kaWYNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjaWYgX1VTRV9MRk4NCisjZGVmaW5lIE1BWE5BTUxFTiAgIF9NQVhfTEZODQorI2Vsc2UNCisjZGVmaW5lIE1BWE5BTUxFTiAgIDY0DQorI2VuZGlmDQorDQorc3RydWN0IGZhdGZzX3N0YXQNCit7DQorICAgIEZJTElORk8gZmF0ZnNfZmlsaW5mbzsNCisgICAgdW5zaWduZWQgY2hhciBzdF9tb2RlOw0KK307DQorDQorc3RydWN0IGRpcmVudA0KK3sNCisgICAgdW5zaWduZWQgc2hvcnQgZF9uYW1sZW47ICAgICAgICAvKiBsZW5ndGggb2Ygc3RyaW5nIGluIGRfbmFtZSAqLw0KKyAgICBjaGFyIGRfbmFtZVtNQVhOQU1MRU4gKyAxXTsgICAgIC8qIG5hbWUgKHVwIHRvIE1BWE5BTUxFTiArIDEpICovDQorfTsNCisNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgRElSIGRpcjsgLyogRmF0RlMgRElSIHN0cnVjdCAqLw0KKyAgICBzdHJ1Y3QgZGlyZW50IGRfZGlyZW50Ow0KK30gRkFURlNfRElSOw0KKw0KK2V4dGVybiBGQVRGU19ESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqcGF0aCk7DQorZXh0ZXJuIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIoRkFURlNfRElSICpkcCk7DQorZXh0ZXJuIGludCBjbG9zZWRpcihGQVRGU19ESVIgKmRwKTsNCitleHRlcm4gaW50IGZhdGZzX3N0YXQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGZhdGZzX3N0YXQgKmJ1Zik7DQorDQorI2RlZmluZSBGQVRGU19TX0lTUkVHKG0pIChtID09IDApDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKl9GQVRGU19ESVJFTlRfSF8qLw0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIvbWFsbG9jLmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL21hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTRlZWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL21hbGxvYy5jCkBAIC0wLDAgKzEsNzI4MiBAQAorI2luY2x1ZGUgImVtYkFSQ19CU1BfY29uZmlnLmgiDQorI2lmbmRlZiBfX0dOVV9fDQorLyoNCisgIFRoaXMgaXMgYSB2ZXJzaW9uIChha2EgZGxtYWxsb2MpIG9mIG1hbGxvYy9mcmVlL3JlYWxsb2Mgd3JpdHRlbiBieQ0KKyAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQNCisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8gU2VuZCBxdWVzdGlvbnMsDQorICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUNCisNCisqIFZlcnNpb24gMi44LjYgV2VkIEF1ZyAyOSAwNjo1Nzo1OCAyMDEyICBEb3VnIExlYQ0KKyAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdA0KKyAgICAgICAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMNCisgICAgICAgICBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyENCisNCisqIFF1aWNrc3RhcnQNCisNCisgIFRoaXMgbGlicmFyeSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOg0KKyAgZnRwIGl0LCBjb21waWxlIGl0ICgtTzMpLCBhbmQgbGluayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsIG9mDQorICB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgZGVmYXVsdCB0byByZWFzb25hYmxlIHZhbHVlcyBmb3IgdXNlIG9uDQorICBtb3N0IHBsYXRmb3Jtcy4gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzDQorICBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMgdHVuaW5nIG9wdGlvbnMuDQorDQorICBGb3IgY29udmVuaWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoNCisgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjguNi5oDQorICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxlIHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90DQorICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmggZmlsZSBjb250YWlucyBvbmx5IHRoZQ0KKyAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBvbiBBTlNJIEMvQysrDQorICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1lIG9wdGlvbnMgYWJvdXQNCisgIG5hbWluZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUgeW91cg0KKyAgb3duIG1hbGxvYy5oIHRoYXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludA0KKyAgaW5kaWNhdGVkIGJlbG93LiBOb3RlIHRoYXQgeW91IG1heSBhbHJlYWR5IGJ5IGRlZmF1bHQgYmUgdXNpbmcgYSBDDQorICBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxsb2MgdGhhdCBpcyBiYXNlZCBvbiBzb21lIHZlcnNpb24gb2YgdGhpcw0KKyAgbWFsbG9jIChmb3IgZXhhbXBsZSBpbiBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25lDQorICBpbiB0aGlzIGZpbGUgdG8gY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFkcyBhc3NvY2lhdGVkDQorICB3aXRoIGxpYnJhcnkgdmVyc2lvbnMuDQorDQorKiBWaXRhbCBzdGF0aXN0aWNzOg0KKw0KKyAgU3VwcG9ydGVkIHBvaW50ZXIvc2l6ZV90IHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMNCisgICAgICAgc2l6ZV90IE1VU1QgYmUgYW4gdW5zaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcw0KKyAgICAgICBwb2ludGVycy4gKElmIHlvdSBhcmUgdXNpbmcgYW4gYW5jaWVudCBzeXN0ZW0gdGhhdCBkZWNsYXJlcw0KKyAgICAgICBzaXplX3QgYXMgYSBzaWduZWQgdHlwZSwgb3IgbmVlZCBpdCB0byBiZSBhIGRpZmZlcmVudCB3aWR0aA0KKyAgICAgICB0aGFuIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSBhIHByZXZpb3VzIHJlbGVhc2Ugb2YgdGhpcyBtYWxsb2MNCisgICAgICAgKGUuZy4gMi43LjIpIHN1cHBvcnRpbmcgdGhlc2UuKQ0KKw0KKyAgQWxpZ25tZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIChtaW5pbXVtKQ0KKyAgICAgICBUaGlzIHN1ZmZpY2VzIGZvciBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLg0KKyAgICAgICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcw0KKyAgICAgICBpZiBuZWNlc3NhcnkgKHVwIHRvIDEyOGJ5dGVzKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgbW9yZSBzcGFjZS4NCisNCisgIE1pbmltdW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yICA4IGJ5dGVzIChpZiA0Ynl0ZSBzaXplcykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IG9yIDE2IGJ5dGVzIChpZiA4Ynl0ZSBzaXplcykNCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUNCisgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIGFkZGl0aW9uYWwgY3Jvc3MtY2hlY2sgd29yZA0KKyAgICAgICBpZiBGT09URVJTIGlzIGRlZmluZWQuDQorDQorICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpDQorICAgICAgICAgICAgICAgICAgICAgICAgICA4LWJ5dGUgcHRyczogIDMyIGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpDQorDQorICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBtYWxsb2MoMCkpIHJldHVybnMgYQ0KKyAgICAgICBwb2ludGVyIHRvIHNvbWV0aGluZyBvZiB0aGUgbWluaW11bSBhbGxvY2F0YWJsZSBzaXplLg0KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMNCisgICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwNCisgICAgICAgdG8gdGhlIG1pbmltdW0gc2l6ZSwgZXhjZXB0IGZvciByZXF1ZXN0cyA+PSBtbWFwX3RocmVzaG9sZCB0aGF0DQorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0DQorICAgICAgIDMyIGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsDQorICAgICAgIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IG9yIDgxOTIgYnl0ZXMuDQorDQorICBTZWN1cml0eTogc3RhdGljLXNhZmU7IG9wdGlvbmFsbHkgbW9yZSBvciBsZXNzDQorICAgICAgIFRoZSAic2VjdXJpdHkiIG9mIG1hbGxvYyByZWZlcnMgdG8gdGhlIGFiaWxpdHkgb2YgbWFsaWNpb3VzDQorICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nDQorICAgICAgIHNwYWNlIHRoYXQgaXMgbm90IGN1cnJlbnRseSBtYWxsb2MnZWQgb3Igb3ZlcndyaXRpbmcgcGFzdCB0aGUNCisgICAgICAgZW5kcyBvZiBjaHVua3MpIGluIGNvZGUgdGhhdCBjYWxscyBtYWxsb2MuICBUaGlzIG1hbGxvYw0KKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YNCisgICAgICAgaGVhcCwgaS5lLiwgc3RhdGljIHZhcmlhYmxlcywgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdXNhZ2UNCisgICAgICAgZXJyb3JzLiAgVGhlIHJvdXRpbmVzIGFkZGl0aW9uYWxseSBkZXRlY3QgbW9zdCBpbXByb3BlciBmcmVlcw0KKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcNCisgICAgICAgZm9yIG1hbGxvYyBpdHNlbGYgaXMgbm90IGNvcnJ1cHRlZCBieSBzb21lIG90aGVyIG1lYW5zLiAgVGhpcw0KKyAgICAgICBpcyBvbmx5IG9uZSBhc3BlY3Qgb2Ygc2VjdXJpdHkgLS0gdGhlc2UgY2hlY2tzIGRvIG5vdCwgYW5kDQorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuDQorDQorICAgICAgIElmIEZPT1RFUlMgaXMgZGVmaW5lZCBub256ZXJvLCB0aGVuIGVhY2ggYWxsb2NhdGVkIGNodW5rDQorICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZA0KKyAgICAgICBmcm9tIGl0cyBzcGFjZS4gIFRoZXNlIGNoZWNrIHdvcmRzIGFyZSB0aGUgc2FtZSB3aXRoaW4gZWFjaA0KKyAgICAgICBleGVjdXRpb24gb2YgYSBwcm9ncmFtIHVzaW5nIG1hbGxvYywgYnV0IGRpZmZlciBhY3Jvc3MNCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQ0KKyAgICAgICBmcmVlZC4gVGhpcyBpbXByb3ZlcyBzZWN1cml0eSBieSByZWplY3RpbmcgZnJlZXMvcmVhbGxvY3MgdGhhdA0KKyAgICAgICBjb3VsZCBjb3JydXB0IGhlYXAgbWVtb3J5LCBpbiBhZGRpdGlvbiB0byB0aGUgY2hlY2tzIHByZXZlbnRpbmcNCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlDQorICAgICAgIHNlY3VyaXR5IGF0IHRoZSBleHBlbnNlIG9mIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkLiAgKE5vdGUgdGhhdA0KKyAgICAgICBGT09URVJTIG1heSBhbHNvIGJlIHdvcnRoIHVzaW5nIHdpdGggTVNQQUNFUy4pDQorDQorICAgICAgIEJ5IGRlZmF1bHQgZGV0ZWN0ZWQgZXJyb3JzIGNhdXNlIHRoZSBwcm9ncmFtIHRvIGFib3J0IChjYWxsaW5nDQorICAgICAgICJhYm9ydCgpIikuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBpbnN0ZWFkIHByb2NlZWQgcGFzdA0KKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQ0KKyAgICAgICBoYXMgbm8gZWZmZWN0LCBhbmQgYSBtYWxsb2MgdGhhdCBlbmNvdW50ZXJzIGEgYmFkIGFkZHJlc3MNCisgICAgICAgY2F1c2VkIGJ5IHVzZXIgb3ZlcndyaXRlcyB3aWxsIGlnbm9yZSB0aGUgYmFkIGFkZHJlc3MgYnkNCisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkNCisgICAgICAgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIHRoYXQgc2hvdWxkIGNvbnRpbnVlIGlmIGF0IGFsbA0KKyAgICAgICBwb3NzaWJsZSBpbiB0aGUgZmFjZSBvZiBwcm9ncmFtbWluZyBlcnJvcnMsIGFsdGhvdWdoIHRoZXkgbWF5DQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLg0KKw0KKyAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucywgeW91IGNhbiBkZWZpbmUNCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZw0KKyAgICAgICBlbHNlLiBBbmQgaWYgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIHVzaW5nIG1hbGxvYyBoYXMNCisgICAgICAgbm8gZXJyb3JzIG9yIHZ1bG5lcmFiaWxpdGllcywgeW91IGNhbiBkZWZpbmUgSU5TRUNVUkUgdG8gMSwNCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50Lg0KKw0KKyAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGxpbWl0IHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRhYmxlDQorICAgICAgIHNwYWNlLCB1c2luZyBtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdC4gVGhpcyBpcyBub3QNCisgICAgICAgZGVzaWduZWQgYXMgYSBzZWN1cml0eSBmZWF0dXJlIGluIGl0c2VsZiAoY2FsbHMgdG8gc2V0IGxpbWl0cw0KKyAgICAgICBhcmUgbm90IHNjcmVlbmVkIG9yIHByaXZpbGVnZWQpLCBidXQgbWF5IGJlIHVzZWZ1bCBhcyBvbmUNCisgICAgICAgYXNwZWN0IG9mIGEgc2VjdXJlIGltcGxlbWVudGF0aW9uLg0KKw0KKyAgVGhyZWFkLXNhZmV0eTogTk9UIHRocmVhZC1zYWZlIHVubGVzcyBVU0VfTE9DS1MgZGVmaW5lZCBub24temVybw0KKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwNCisgICAgICAgZXRjIGlzIHN1cnJvdW5kZWQgd2l0aCBhIGxvY2suIEJ5IGRlZmF1bHQsIHRoaXMgdXNlcyBhIHBsYWluDQorICAgICAgIHB0aHJlYWQgbXV0ZXgsIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb24sIG9yIGEgc3Bpbi1sb2NrIGlmIGlmDQorICAgICAgIGF2YWlsYWJsZSBmb3IgdGhlIHBsYXRmb3JtIGFuZCBub3QgZGlzYWJsZWQgYnkgc2V0dGluZw0KKyAgICAgICBVU0VfU1BJTl9MT0NLUz0wLiAgSG93ZXZlciwgaWYgVVNFX1JFQ1VSU0lWRV9MT0NLUyBpcyBkZWZpbmVkLA0KKyAgICAgICByZWN1cnNpdmUgdmVyc2lvbnMgYXJlIHVzZWQgaW5zdGVhZCAod2hpY2ggYXJlIG5vdCByZXF1aXJlZCBmb3INCisgICAgICAgYmFzZSBmdW5jdGlvbmFsaXR5IGJ1dCBtYXkgYmUgbmVlZGVkIGluIGxheWVyZWQgZXh0ZW5zaW9ucykuDQorICAgICAgIFVzaW5nIGEgZ2xvYmFsIGxvY2sgaXMgbm90IGVzcGVjaWFsbHkgZmFzdCwgYW5kIGNhbiBiZSBhIG1ham9yDQorICAgICAgIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUgbWluaW1hbCBwcm90ZWN0aW9uDQorICAgICAgIGluIGNvbmN1cnJlbnQgZW52aXJvbm1lbnRzLCBhbmQgdG8gcHJvdmlkZSBhIGJhc2lzIGZvcg0KKyAgICAgICBleHRlbnNpb25zLiAgSWYgeW91IGFyZSB1c2luZyBtYWxsb2MgaW4gYSBjb25jdXJyZW50IHByb2dyYW0sDQorICAgICAgIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgbmVkbWFsbG9jDQorICAgICAgIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pIG9yDQorICAgICAgIHB0bWFsbG9jIChTZWUgaHR0cDovL3d3dy5tYWxsb2MuZGUpLCB3aGljaCBhcmUgZGVyaXZlZCBmcm9tDQorICAgICAgIHZlcnNpb25zIG9mIHRoaXMgbWFsbG9jLg0KKw0KKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUA0KKyAgICAgICBUaGlzIG1hbGxvYyBjYW4gdXNlIHVuaXggc2JyayBvciBhbnkgZW11bGF0aW9uIChpbnZva2VkIHVzaW5nDQorICAgICAgIHRoZSBDQUxMX01PUkVDT1JFIG1hY3JvKSBhbmQvb3IgbW1hcC9tdW5tYXAgb3IgYW55IGVtdWxhdGlvbg0KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0NCisgICAgICAgbWVtb3J5LiAgT24gbW9zdCB1bml4IHN5c3RlbXMsIGl0IHRlbmRzIHRvIHdvcmsgYmVzdCBpZiBib3RoDQorICAgICAgIE1PUkVDT1JFIGFuZCBNTUFQIGFyZSBlbmFibGVkLiAgT24gV2luMzIsIGl0IHVzZXMgZW11bGF0aW9ucw0KKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucw0KKyAgICAgICBsaWtlIG1lbXNldC4NCisNCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbg0KKyAgICAgICAoU2VlIGh0dHA6Ly93d3cudW5peC5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJIEMsIGFuZCBwcm9iYWJseQ0KKyAgICAgICBvdGhlcnMgYXMgd2VsbC4NCisNCisqIE92ZXJ2aWV3IG9mIGFsZ29yaXRobXMNCisNCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yDQorICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0aGUgZmFzdGVzdA0KKyAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBwb3J0YWJsZSBhbmQNCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QNCisgIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuDQorDQorICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0DQorICBjaG9vc2VzIHRoZSBiZXN0LWZpdHRpbmcgZXhpc3RpbmcgY2h1bmsgZm9yIGEgcmVxdWVzdCwgd2l0aCB0aWVzDQorICBicm9rZW4gaW4gYXBwcm94aW1hdGVseSBsZWFzdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhpcyBzdHJhdGVneQ0KKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MNCisgIHRoYW4gMjU2Ynl0ZXMsIGl0IGRldmlhdGVzIGZyb20gYmVzdC1maXQgd2hlbiB0aGVyZSBpcyBub3QgYW4NCisgIGV4YWN0bHkgZml0dGluZyBhdmFpbGFibGUgY2h1bmsgYnkgcHJlZmVycmluZyB0byB1c2Ugc3BhY2UgYWRqYWNlbnQNCisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcNCisgIHRpZXMgaW4gYXBwcm94aW1hdGVseSBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGVzZSBlbmhhbmNlDQorICBsb2NhbGl0eSBvZiBzZXJpZXMgb2Ygc21hbGwgYWxsb2NhdGlvbnMuKSAgQW5kIGZvciB2ZXJ5IGxhcmdlIHJlcXVlc3RzDQorICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcNCisgIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4gIChUaGlzIGhlbHBzIGF2b2lkIGNhcnJ5aW5nIGFyb3VuZCBhbmQNCisgIHBvc3NpYmx5IGZyYWdtZW50aW5nIG1lbW9yeSB1c2VkIG9ubHkgZm9yIGxhcmdlIGNodW5rcy4pDQorDQorICBBbGwgb3BlcmF0aW9ucyAoZXhjZXB0IG1hbGxvY19zdGF0cyBhbmQgbWFsbGluZm8pIGhhdmUgZXhlY3V0aW9uDQorICB0aW1lcyB0aGF0IGFyZSBib3VuZGVkIGJ5IGEgY29uc3RhbnQgZmFjdG9yIG9mIHRoZSBudW1iZXIgb2YgYml0cyBpbg0KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywNCisgIG9yIGFjdGlvbnMgc3Vycm91bmRpbmcgTU9SRUNPUkUgYW5kIE1NQVAgdGhhdCBoYXZlIHRpbWVzDQorICBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBub24tY29udGlndW91cyByZWdpb25zIHJldHVybmVkIGJ5DQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLiBJbiByZWFsLXRpbWUNCisgIGFwcGxpY2F0aW9ucywgeW91IGNhbiBvcHRpb25hbGx5IHN1cHByZXNzIHNlZ21lbnQgdHJhdmVyc2FscyB1c2luZw0KKyAgTk9fU0VHTUVOVF9UUkFWRVJTQUwsIHdoaWNoIGFzc3VyZXMgYm91bmRlZCBleGVjdXRpb24gZXZlbiB3aGVuDQorICBzeXN0ZW0gYWxsb2NhdG9ycyByZXR1cm4gbm9uLWNvbnRpZ3VvdXMgc3BhY2VzLCBhdCB0aGUgdHlwaWNhbA0KKyAgZXhwZW5zZSBvZiBjYXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkgYW5kIGluY3JlYXNlZCBmcmFnbWVudGF0aW9uLg0KKw0KKyAgVGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB2ZXJ5IG1vZHVsYXIgYW5kIHNlcmlvdXNseSBvdmVydXNlcw0KKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYg0KKyAgaW5saW5pbmcgbW9kdWxhciBjb2RlIGFzIGNhbiBub3cgYmUgZG9uZSBieSBicnV0ZS1mb3JjZSBleHBhbnNpb24sDQorICBidXQgbm93LCBlbm91Z2ggb2YgdGhlbSBzZWVtIG5vdCB0by4NCisNCisgIFNvbWUgY29tcGlsZXJzIGlzc3VlIGEgbG90IG9mIHdhcm5pbmdzIGFib3V0IGNvZGUgdGhhdCBpcw0KKyAgZGVhZC91bnJlYWNoYWJsZSBvbmx5IG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgYWxzbyBhYm91dCBpbnRlbnRpb25hbA0KKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlDQorICBpZ25vcmVkLg0KKw0KKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUNCisgICAgIGh0dHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9kbC9odG1sL21hbGxvYy5odG1sDQorDQorKiBNU1BBQ0VTDQorICBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIHRoZW4gaW4gYWRkaXRpb24gdG8gbWFsbG9jLCBmcmVlLCBldGMuLA0KKyAgdGhpcyBmaWxlIGFsc28gZGVmaW5lcyBtc3BhY2VfbWFsbG9jLCBtc3BhY2VfZnJlZSwgZXRjLiBUaGVzZQ0KKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQNCisgIG9idGFpbmVkIHVzaW5nIGNyZWF0ZV9tc3BhY2UsIHRvIGNvbnRyb2wgYWxsIGludGVybmFsIGJvb2trZWVwaW5nLg0KKyAgSWYgT05MWV9NU1BBQ0VTIGlzIGRlZmluZWQsIG9ubHkgdGhlc2UgdmVyc2lvbnMgYXJlIGNvbXBpbGVkLg0KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsDQorICBhbmQgeW91ciBzeXN0ZW0gbWFsbG9jIGZvciBvdGhlcnMsIHlvdSBjYW4gY29tcGlsZSB3aXRoDQorICBPTkxZX01TUEFDRVMgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UuLi4NCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUNCisgICAgI2RlZmluZSBteW1hbGxvYyhieXRlcykgIG1zcGFjZV9tYWxsb2MobXltc3BhY2UsIGJ5dGVzKQ0KKw0KKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkDQorICB1c2UgIlVTRV9ETF9QUkVGSVgiIHRvIHJlbGFiZWwgdGhlIGdsb2JhbCBtYWxsb2MuKQ0KKw0KKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcNCisgIG1zcGFjZXMgYXMgdGhyZWFkLWxvY2Fscy4gRm9yIGV4YW1wbGU6DQorICAgIHN0YXRpYyBfX3RocmVhZCBtc3BhY2UgdGxtcyA9IDA7DQorICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsNCisgICAgICBpZiAodGxtcyA9PSAwKSB0bG1zID0gY3JlYXRlX21zcGFjZSgwLCAwKTsNCisgICAgICByZXR1cm4gbXNwYWNlX21hbGxvYyh0bG1zLCBieXRlcyk7DQorICAgIH0NCisgICAgdm9pZCAgdGxmcmVlKHZvaWQqIG1lbSkgeyBtc3BhY2VfZnJlZSh0bG1zLCBtZW0pOyB9DQorDQorICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50Lg0KKyAgWW91IGNhbm5vdCBhbGxvY2F0ZSBmcm9tIG9uZSBhbmQgZnJlZSB0byBhbm90aGVyIChhbHRob3VnaA0KKyAgY29uZm9ybWFuY2UgaXMgb25seSB3ZWFrbHkgY2hlY2tlZCwgc28gdXNhZ2UgZXJyb3JzIGFyZSBub3QgYWx3YXlzDQorICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZw0KKyAgaW5kaWNhdGluZyBpdHMgb3JpZ2luYXRpbmcgbXNwYWNlLCBhbmQgZnJlZXMgYXJlIGRpcmVjdGVkIHRvIHRoZWlyDQorICBvcmlnaW5hdGluZyBzcGFjZXMuIE5vcm1hbGx5LCB0aGlzIHJlcXVpcmVzIHVzZSBvZiBsb2Nrcy4NCisNCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorQmUgY2FyZWZ1bCBpbiBzZXR0aW5nICNkZWZpbmUgdmFsdWVzIGZvciBudW1lcmljYWwgY29uc3RhbnRzIG9mIHR5cGUNCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkDQordG8gc2l6ZV90IHByZWNpc2lvbiB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBjYXN0ZWQuIFlvdSBjYW4gYWxzbw0KK3VzZSB0aGUgc3ltYm9saWMgdmFsdWVzIE1BWF9TSVpFX1QsIFNJWkVfVF9PTkUsIGV0YyBiZWxvdy4NCisNCitXSU4zMiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBpZiBfV0lOMzIgZGVmaW5lZA0KKyAgRGVmaW5pbmcgV0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4NCisgIE90aGVyd2lzZSBkZWZhdWx0cyBhcmUgZm9yIHVuaXguIEJld2FyZSB0aGF0IHRoZXJlIHNlZW0gdG8gYmUgc29tZQ0KKyAgY2FzZXMgd2hlcmUgdGhpcyBtYWxsb2MgbWlnaHQgbm90IGJlIGEgcHVyZSBkcm9wLWluIHJlcGxhY2VtZW50IGZvcg0KKyAgV2luMzIgbWFsbG9jOiBSYW5kb20tbG9va2luZyBmYWlsdXJlcyBmcm9tIFdpbjMyIEdESSBBUEkncyAoZWc7DQorICBTZXRESUJpdHMoKSkgbWF5IGJlIGR1ZSB0byBidWdzIGluIHNvbWUgdmlkZW8gZHJpdmVyIGltcGxlbWVudGF0aW9ucw0KKyAgd2hlbiBwaXhlbCBidWZmZXJzIGFyZSBtYWxsb2MoKWVkLCBhbmQgdGhlIHJlZ2lvbiBzcGFucyBtb3JlIHRoYW4NCisgIG9uZSBWaXJ0dWFsQWxsb2MoKWVkIHJlZ2lvbi4gQmVjYXVzZSBkbG1hbGxvYyB1c2VzIGEgc21hbGwgKDY0S2IpDQorICBkZWZhdWx0IGdyYW51bGFyaXR5LCBwaXhlbCBidWZmZXJzIG1heSBzdHJhZGRsZSB2aXJ0dWFsIGFsbG9jYXRpb24NCisgIHJlZ2lvbnMgbW9yZSBvZnRlbiB0aGFuIHdoZW4gdXNpbmcgdGhlIE1pY3Jvc29mdCBhbGxvY2F0b3IuICBZb3UgY2FuDQorICBhdm9pZCB0aGlzIGJ5IHVzaW5nIFZpcnR1YWxBbGxvYygpIGFuZCBWaXJ0dWFsRnJlZSgpIGZvciBhbGwgcGl4ZWwNCisgIGJ1ZmZlcnMgcmF0aGVyIHRoYW4gdXNpbmcgbWFsbG9jKCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwNCisgIHJlY29tcGlsZSB0aGlzIG1hbGxvYyB3aXRoIGEgbGFyZ2VyIERFRkFVTFRfR1JBTlVMQVJJVFkuIE5vdGU6DQorICBpbiBjYXNlcyB3aGVyZSBNU0MgYW5kIGdjYyAoY3lnd2luKSBhcmUga25vd24gdG8gZGlmZmVyIG9uIFdJTjMyLA0KKyAgY29uZGl0aW9ucyB1c2UgX01TQ19WRVIgdG8gZGlzdGluZ3Vpc2ggdGhlbS4NCisNCitETE1BTExPQ19FWFBPUlQgICAgICAgZGVmYXVsdDogZXh0ZXJuDQorICBEZWZpbmVzIGhvdyBwdWJsaWMgQVBJcyBhcmUgZGVjbGFyZWQuIElmIHlvdSB3YW50IHRvIGV4cG9ydCB2aWEgYQ0KKyAgV2luZG93cyBETEwsIHlvdSBtaWdodCBkZWZpbmUgdGhpcyBhcw0KKyAgICAjZGVmaW5lIERMTUFMTE9DX0VYUE9SVCBleHRlcm4gIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQ0KKyAgSWYgeW91IHdhbnQgYSBQT1NJWCBFTEYgc2hhcmVkIG9iamVjdCwgeW91IG1pZ2h0IHVzZQ0KKyAgICAjZGVmaW5lIERMTUFMTE9DX0VYUE9SVCBleHRlcm4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkNCisNCitNQUxMT0NfQUxJR05NRU5UICAgICAgICAgZGVmYXVsdDogKHNpemVfdCkoMiAqIHNpemVvZih2b2lkICopKQ0KKyAgQ29udHJvbHMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLiAgSXQgbXVzdCBiZSBhDQorICBwb3dlciBvZiB0d28gYW5kIGF0IGxlYXN0IDgsIGV2ZW4gb24gbWFjaGluZXMgZm9yIHdoaWNoIHNtYWxsZXINCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcw0KKyAgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIG9wdGltaXplZCBmb3INCisgIHRoZSBjYXNlIG9mIDgtYnl0ZSBhbGlnbm1lbnQuDQorDQorTVNQQUNFUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQ0KKyAgSWYgdHJ1ZSwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudCBhbGxvY2F0aW9uIHNwYWNlcy4NCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuDQorDQorT05MWV9NU1BBQ0VTICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQ0KKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuDQorDQorVVNFX0xPQ0tTICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQ0KKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aA0KKyAgcHRocmVhZCBvciBXSU4zMiBtdXRleCBsb2NrL3VubG9jay4gKElmIHNldCB0cnVlLCB0aGlzIGNhbiBiZQ0KKyAgb3ZlcnJpZGRlbiBvbiBhIHBlci1tc3BhY2UgYmFzaXMgZm9yIG1zcGFjZSB2ZXJzaW9ucy4pIElmIHNldCB0byBhDQorICBub24temVybyB2YWx1ZSBvdGhlciB0aGFuIDEsIGxvY2tzIGFyZSB1c2VkLCBidXQgdGhlaXINCisgIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgb3V0LCBzbyBsb2NrIGZ1bmN0aW9ucyBtdXN0IGJlIHN1cHBsaWVkIG1hbnVhbGx5LA0KKyAgYXMgZGVzY3JpYmVkIGJlbG93Lg0KKw0KK1VTRV9TUElOX0xPQ0tTICAgICAgICAgICBkZWZhdWx0OiAxIGlmZiBVU0VfTE9DS1MgYW5kIHNwaW4gbG9ja3MgYXZhaWxhYmxlDQorICBJZiB0cnVlLCB1c2VzIGN1c3RvbSBzcGluIGxvY2tzIGZvciBsb2NraW5nLiBUaGlzIGlzIGN1cnJlbnRseQ0KKyAgc3VwcG9ydGVkIG9ubHkgZ2NjID49IDQuMSwgb2xkZXIgZ2NjcyBvbiB4ODYgcGxhdGZvcm1zLCBhbmQgcmVjZW50DQorICBNUyBjb21waWxlcnMuICBPdGhlcndpc2UsIHBvc2l4IGxvY2tzIG9yIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZQ0KKyAgdXNlZC4NCisNCitVU0VfUkVDVVJTSVZFX0xPQ0tTICAgICAgZGVmYXVsdDogbm90IGRlZmluZWQNCisgIElmIGRlZmluZWQgbm9uemVybywgdXNlcyByZWN1cnNpdmUgKGFrYSByZWVudHJhbnQpIGxvY2tzLCBvdGhlcndpc2UNCisgIHVzZXMgcGxhaW4gbXV0ZXhlcy4gVGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIG1hbGxvYyBwcm9wZXIsIGJ1dCBtYXkNCisgIGJlIG5lZWRlZCBmb3IgbGF5ZXJlZCBhbGxvY2F0b3JzIHN1Y2ggYXMgbmVkbWFsbG9jLg0KKw0KK0xPQ0tfQVRfRk9SSyAgICAgICAgICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkDQorICBJZiBkZWZpbmVkIG5vbnplcm8sIHBlcmZvcm1zIHB0aHJlYWRfYXRmb3JrIHVwb24gaW5pdGlhbGl6YXRpb24NCisgIHRvIGluaXRpYWxpemUgY2hpbGQgbG9jayB3aGlsZSBob2xkaW5nIHBhcmVudCBsb2NrLiBUaGUgaW1wbGVtZW50YXRpb24NCisgIGFzc3VtZXMgdGhhdCBwdGhyZWFkIGxvY2tzIChub3QgY3VzdG9tIGxvY2tzKSBhcmUgYmVpbmcgdXNlZC4gSW4gb3RoZXINCisgIGNhc2VzLCB5b3UgbWF5IG5lZWQgdG8gY3VzdG9taXplIHRoZSBpbXBsZW1lbnRhdGlvbi4NCisNCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMA0KKyAgSWYgdHJ1ZSwgcHJvdmlkZSBleHRyYSBjaGVja2luZyBhbmQgZGlzcGF0Y2hpbmcgYnkgcGxhY2luZw0KKyAgaW5mb3JtYXRpb24gaW4gdGhlIGZvb3RlcnMgb2YgYWxsb2NhdGVkIGNodW5rcy4gVGhpcyBhZGRzDQorICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4NCisNCitJTlNFQ1VSRSAgICAgICAgICAgICAgICAgZGVmYXVsdDogMA0KKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLg0KKw0KK1VTRV9ETF9QUkVGSVggICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZA0KKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLg0KKyAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQNCisgIG9mIGEgcHJvZ3JhbSwgdXNpbmcgeW91ciByZWd1bGFyIHN5c3RlbSBtYWxsb2MgZWxzZXdoZXJlLg0KKw0KK01BTExPQ19JTlNQRUNUX0FMTCAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZA0KKyAgSWYgZGVmaW5lZCwgY29tcGlsZXMgbWFsbG9jX2luc3BlY3RfYWxsIGFuZCBtc3BhY2VfaW5zcGVjdF9hbGwsIHRoYXQNCisgIHBlcmZvcm0gdHJhdmVyc2FsIG9mIGFsbCBoZWFwIHNwYWNlLiAgVW5sZXNzIGFjY2VzcyB0byB0aGVzZQ0KKyAgZnVuY3Rpb25zIGlzIG90aGVyd2lzZSByZXN0cmljdGVkLCB5b3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8NCisgIGluY2x1ZGUgdGhlbSBpbiBzZWN1cmUgaW1wbGVtZW50YXRpb25zLg0KKw0KK0FCT1JUICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIGFib3J0KCkNCisgIERlZmluZXMgaG93IHRvIGFib3J0IG9uIGZhaWxlZCBjaGVja3MuICBPbiBtb3N0IHN5c3RlbXMsIGEgZmFpbGVkDQorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQ0KKyAgbWVzc2FnZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcmludCByb3V0aW5lcyBpbiB0dXJuIGNhbGwgbWFsbG9jLA0KKyAgd2hpY2ggd2lsbCBmYWlsIGFnYWluLiAgR2VuZXJhbGx5LCB0aGUgYmVzdCBwb2xpY3kgaXMgdG8gc2ltcGx5IGNhbGwNCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQ0KKyAgZXJyb3JzIGR1ZSB0byBvdmVyd3JpdGluZyB3aWxsIHNob3cgdXAgYXMgYWRkcmVzcyBmYXVsdHMgKG51bGwsIG9kZA0KKyAgYWRkcmVzc2VzIGV0YykgcmF0aGVyIHRoYW4gbWFsbG9jLXRyaWdnZXJlZCBjaGVja3MsIHNvIHdpbGwgYWxzbw0KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvDQorICBjYW4gYmV0dGVyIG9wdGltaXplIGNvZGUgY29uZGl0aW9uYWxseSBjYWxsaW5nIGl0Lg0KKw0KK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpDQorICBDb250cm9scyB3aGV0aGVyIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMgY2F1c2UgdGhlbSB0byBieXBhc3NlZA0KKyAgcmF0aGVyIHRoYW4gYWJvcnRpbmcuIElmIHNldCwgZGV0ZWN0ZWQgYmFkIGFyZ3VtZW50cyB0byBmcmVlIGFuZA0KKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0DQorICB1cG9uIGEgZGV0ZWN0ZWQgb3ZlcndyaXRlIG9mIGZyZWVkIGhlYXAgc3BhY2UsIHRodXMgbG9zaW5nIHRoZQ0KKyAgYWJpbGl0eSB0byBldmVyIHJldHVybiBpdCBmcm9tIG1hbGxvYyBhZ2FpbiwgYnV0IGVuYWJsaW5nIHRoZQ0KKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUNCisgIHN0YXRpYyB2YXJpYWJsZSBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudCBpcyBjb21waWxlZCBpbg0KKyAgYW5kIGNhbiBiZSBleGFtaW5lZCB0byBzZWUgaWYgZXJyb3JzIGhhdmUgb2NjdXJyZWQuIFRoaXMgb3B0aW9uDQorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuDQorDQorREVCVUcgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkDQorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5DQorICB0aGlzIGNvZGUgb3IgZGlhZ25vc2UgcHJvYmxlbXMgd2hlbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMuDQorICBIb3dldmVyLCBpdCBtYXkgYWxzbyBiZSBhYmxlIHRvIGJldHRlciBpc29sYXRlIHVzZXIgZXJyb3JzIHRoYW4ganVzdA0KKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwNCisgIG91dCBpbiBtb3JlIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUNCisgIGFsZ29yaXRobXMuICBUaGUgY2hlY2tpbmcgaXMgZmFpcmx5IGV4dGVuc2l2ZSwgYW5kIHdpbGwgc2xvdyBkb3duDQorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRw0KKyAgc2V0IHdpbGwgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0ZWQgYW5kIGZyZWUgY2h1bmsNCisgIGluIHRoZSBjb3Vyc2Ugb2YgY29tcHV0aW5nIHRoZSBzdW1tYXJpZXMuDQorDQorQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDEgKHRydWUpDQorICBEZWJ1Z2dpbmcgYXNzZXJ0aW9uIGZhaWx1cmVzIGNhbiBiZSBuZWFybHkgaW1wb3NzaWJsZSBpZiB5b3VyDQorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwNCisgIGxlYWQgdG8gYSBjYXNjYWRlIG9mIGZ1cnRoZXIgZmFpbHVyZXMsIGJsb3dpbmcgdGhlIHJ1bnRpbWUgc3RhY2suDQorICBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSBjYXVzZSBhc3NlcnRpb25zIGZhaWx1cmVzIHRvIGNhbGwgYWJvcnQoKSwNCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuDQorDQorTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICAgICBkZWZhdWx0OiBzZXRzIGVycm5vIHRvIEVOT01FTSwgb3Igbm8tb3Agb24gd2luMzINCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvDQorICByZXR1cm4gbWVtb3J5IGJlY2F1c2UgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUuDQorDQorSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTDQorICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHNicmsgb3IgYW4gZW11bGF0aW9uIG9mIGl0Lg0KKw0KK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2Jyaw0KKyAgVGhlIG5hbWUgb2YgdGhlIHNicmstc3R5bGUgc3lzdGVtIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9yZQ0KKyAgbWVtb3J5LiAgU2VlIGJlbG93IGZvciBndWlkYW5jZSBvbiB3cml0aW5nIGN1c3RvbSBNT1JFQ09SRQ0KKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzDQorICBzeXN0ZW1zLiAgSXQgY2Fubm90IGJlIHNpemVfdCwgYmVjYXVzZSBpdCBzdXBwb3J0cyBuZWdhdGl2ZQ0KKyAgYXJndW1lbnRzLCBzbyBpdCBpcyBub3JtYWxseSB0aGUgc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMNCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcg0KKyAgdGhvdWdoLiBJbnRlcm5hbGx5LCB3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhcmd1bWVudHMgbGVzcyB0aGFuIGhhbGYNCisgIHRoZSBtYXggdmFsdWUgb2YgYSBzaXplX3QsIHdoaWNoIHNob3VsZCB3b3JrIGFjcm9zcyBhbGwgcmVhc29uYWJsZQ0KKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuDQorDQorTU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICBkZWZhdWx0OiAxICh0cnVlKSBpZiBIQVZFX01PUkVDT1JFDQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUNCisgIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5cyByZXR1cm4gY29udGlndW91cyBpbmNyZWFzaW5nDQorICBhZGRyZXNzZXMuICBUaGlzIGlzIHRydWUgb2YgdW5peCBzYnJrLiBJdCBkb2VzIG5vdCBodXJ0IHRvbyBtdWNoIHRvDQorICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuDQorICBTZXR0aW5nIGl0IGZhbHNlIHdoZW4gZGVmaW5pdGVseSBub24tY29udGlndW91cyBzYXZlcyB0aW1lDQorICBhbmQgcG9zc2libHkgd2FzdGVkIHNwYWNlIGl0IHdvdWxkIHRha2UgdG8gZGlzY292ZXIgdGhpcyB0aG91Z2guDQorDQorTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZA0KKyAgVHJ1ZSBpZiBNT1JFQ09SRSBjYW5ub3QgcmVsZWFzZSBzcGFjZSBiYWNrIHRvIHRoZSBzeXN0ZW0gd2hlbiBnaXZlbg0KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlDQorICB1c2luZyBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUNCisgIGFyZ3VtZW50cy4NCisNCitOT19TRUdNRU5UX1RSQVZFUlNBTCAgICAgICBkZWZhdWx0OiAwDQorICBJZiBub24temVybywgc3VwcHJlc3NlcyB0cmF2ZXJzYWxzIG9mIG1lbW9yeSBzZWdtZW50cw0KKyAgcmV0dXJuZWQgYnkgZWl0aGVyIE1PUkVDT1JFIG9yIENBTExfTU1BUC4gVGhpcyBkaXNhYmxlcw0KKyAgbWVyZ2luZyBvZiBzZWdtZW50cyB0aGF0IGFyZSBjb250aWd1b3VzLCBhbmQgc2VsZWN0aXZlbHkNCisgIHJlbGVhc2luZyB0aGVtIHRvIHRoZSBPUyBpZiB1bnVzZWQsIGJ1dCBib3VuZHMgZXhlY3V0aW9uIHRpbWVzLg0KKw0KK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkNCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgbW1hcCBvciBhbiBlbXVsYXRpb24gb2YgaXQuICBJZiBzbywgYW5kDQorICBIQVZFX01PUkVDT1JFIGlzIG5vdCB0cnVlLCBNTUFQIGlzIHVzZWQgZm9yIGFsbCBzeXN0ZW0NCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMNCisgIHByaW1hcmlseSB1c2VkIHRvIGRpcmVjdGx5IGFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLiBJdCBpcyBhbHNvDQorICB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdoZXJlIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUNCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlDQorICBhYmxlIHRvIHVubWFwIG1lbW9yeSB0aGF0IG1heSBoYXZlIGJlIGFsbG9jYXRlZCB1c2luZyBtdWx0aXBsZSBjYWxscw0KKyAgdG8gTU1BUCwgc28gbG9uZyBhcyB0aGV5IGFyZSBhZGphY2VudC4NCisNCitIQVZFX01SRU1BUCAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gbGludXgsIGVsc2UgMA0KKyAgSWYgdHJ1ZSByZWFsbG9jKCkgdXNlcyBtcmVtYXAoKSB0byByZS1hbGxvY2F0ZSBsYXJnZSBibG9ja3MgYW5kDQorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLg0KKw0KK01NQVBfQ0xFQVJTICAgICAgICAgICAgICAgZGVmYXVsdDogMSBleGNlcHQgb24gV0lOQ0UuDQorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUNCisgIGZvciBzdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rldi96ZXJvIGFuZCBvbiBXSU4zMiBleGNlcHQgZm9yIFdJTkNFLg0KKw0KK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQ0KKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgdGhlIGJ1aWx0aW4gZmZzKCkgZnVuY3Rpb24gdG8gY29tcHV0ZSBpbmRpY2VzLg0KKyAgU29tZSBjb21waWxlcnMgbWF5IHJlY29nbml6ZSBhbmQgaW50cmluc2lmeSBmZnMgdG8gYmUgZmFzdGVyIHRoYW4gdGhlDQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZA0KKyAgdG8gYW4gYXNtIGluc3RydWN0aW9uLCBzbyBpcyBhbHJlYWR5IGFzIGZhc3QgYXMgaXQgY2FuIGJlLCBhbmQgc28NCisgIHRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0LiBTaW1pbGFybHkgZm9yIFdpbjMyIHVuZGVyIHJlY2VudCBNUyBjb21waWxlcnMuDQorICAoT24gbW9zdCB4ODZzLCB0aGUgYXNtIHZlcnNpb24gaXMgb25seSBzbGlnaHRseSBmYXN0ZXIgdGhhbiB0aGUgQyB2ZXJzaW9uLikNCisNCittYWxsb2NfZ2V0cGFnZXNpemUgICAgICAgICBkZWZhdWx0OiBkZXJpdmUgZnJvbSBzeXN0ZW0gaW5jbHVkZXMsIG9yIDQwOTYuDQorICBUaGUgc3lzdGVtIHBhZ2Ugc2l6ZS4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhpcyBtYWxsb2MgbWFuYWdlcw0KKyAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdlLXNpemUgdW5pdHMuICBUaGlzIG1heSBiZSAoYW5kDQorICB1c3VhbGx5IGlzKSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuIFRoaXMgaXMgaWdub3JlZA0KKyAgaWYgV0lOMzIsIHdoZXJlIHBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIGdldFN5c3RlbUluZm8gZHVyaW5nDQorICBpbml0aWFsaXphdGlvbi4NCisNCitVU0VfREVWX1JBTkRPTSAgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkNCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIC9kZXYvcmFuZG9tIHRvIGluaXRpYWxpemUgc2VjdXJlIG1hZ2ljIHNlZWQgZm9yDQorICBzdGFtcGluZyBmb290ZXJzLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4NCisNCitOT19NQUxMSU5GTyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwDQorICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsaW5mbyIuIFRoaXMgY2FuIGJlIGEgc2ltcGxlIHdheQ0KKyAgb2YgZGVhbGluZyB3aXRoIG1pc21hdGNoZXMgYmV0d2VlbiBzeXN0ZW0gZGVjbGFyYXRpb25zIGFuZA0KKyAgdGhvc2UgaW4gdGhpcyBmaWxlLg0KKw0KK01BTExJTkZPX0ZJRUxEX1RZUEUgICAgICAgIGRlZmF1bHQ6IHNpemVfdA0KKyAgVGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWFsbGluZm8gc3RydWN0LiBUaGlzIHdhcyBvcmlnaW5hbGx5DQorICBkZWZpbmVkIGFzICJpbnQiIGluIFNWSUQgZXRjLCBidXQgaXMgbW9yZSB1c2VmdWxseSBkZWZpbmVkIGFzDQorICBzaXplX3QuIFRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgaWYgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgbm90IHNldA0KKw0KK05PX01BTExPQ19TVEFUUyAgICAgICAgICAgIGRlZmF1bHQ6IDANCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxvY19zdGF0cyIuIFRoaXMgYXZvaWRzIGNhbGxzIHRvDQorICBmcHJpbnRmIGFuZCBicmluZ2luZyBpbiBzdGRpbyBkZXBlbmRlbmNpZXMgeW91IG1pZ2h0IG5vdCB3YW50Lg0KKw0KK1JFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZA0KKyAgVGhpcyBzaG91bGQgYmUgc2V0IGlmIGEgY2FsbCB0byByZWFsbG9jIHdpdGggemVybyBieXRlcyBzaG91bGQNCisgIGJlIHRoZSBzYW1lIGFzIGEgY2FsbCB0byBmcmVlLiBTb21lIHBlb3BsZSB0aGluayBpdCBzaG91bGQuIE90aGVyd2lzZSwNCisgIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzDQorICByZWFsbG9jKHAsIDApLg0KKw0KK0xBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSA0KK0xBQ0tTX1NUUklOR1NfSCwgTEFDS1NfU1RSSU5HX0gsIExBQ0tTX1NZU19UWVBFU19ILCAgTEFDS1NfRVJSTk9fSA0KK0xBQ0tTX1NURExJQl9IIExBQ0tTX1NDSEVEX0ggTEFDS1NfVElNRV9IICBkZWZhdWx0OiBOT1QgZGVmaW5lZCB1bmxlc3Mgb24gV0lOMzINCisgIERlZmluZSB0aGVzZSBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZXNlIGhlYWRlciBmaWxlcy4NCisgIFlvdSBtaWdodCBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwcm92aWRlLg0KKw0KK0RFRkFVTFRfR1JBTlVMQVJJVFkgICAgICAgIGRlZmF1bHQ6IHBhZ2Ugc2l6ZSBpZiBNT1JFQ09SRV9DT05USUdVT1VTLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgNjRLLg0KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB4KQ0KKyAgVGhlIHVuaXQgZm9yIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLiAgT24NCisgIG1vc3Qgc3lzdGVtcyB3aXRoIGNvbnRpZ3VvdXMgTU9SRUNPUkUsIHRoZXJlIGlzIG5vIHJlYXNvbiB0bw0KKyAgbWFrZSB0aGlzIG1vcmUgdGhhbiBhIHBhZ2UuIEhvd2V2ZXIsIHN5c3RlbXMgd2l0aCBNTUFQIHRlbmQgdG8NCisgIGVpdGhlciByZXF1aXJlIG9yIGVuY291cmFnZSBsYXJnZXIgZ3JhbnVsYXJpdGllcy4gIFlvdSBjYW4gaW5jcmVhc2UNCisgIHRoaXMgdmFsdWUgdG8gcHJldmVudCBzeXN0ZW0gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHNvDQorICBvZnRlbiwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBzbG93LiAgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3Qgb25lDQorICBwYWdlIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgU2V0dGluZyB0byAwIGNhdXNlcyBpbml0aWFsaXphdGlvbg0KKyAgdG8gZWl0aGVyIHBhZ2Ugc2l6ZSBvciB3aW4zMiByZWdpb24gc2l6ZS4gIChOb3RlOiBJbiBwcmV2aW91cw0KKyAgdmVyc2lvbnMgb2YgbWFsbG9jLCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbiB3YXMgY2FsbGVkDQorICAiVE9QX1BBRCIpDQorDQorREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICBkZWZhdWx0OiAyTUINCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9UUklNX1RIUkVTSE9MRCwgeCkNCisgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVzZWQgdG9wLW1vc3QgbWVtb3J5IHRvIGtlZXAgYmVmb3JlDQorICByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkNCisgIHVzZWZ1bCBpbiBsb25nLWxpdmVkIHByb2dyYW1zIHVzaW5nIGNvbnRpZ3VvdXMgTU9SRUNPUkUuICBCZWNhdXNlDQorICB0cmltbWluZyB2aWEgc2JyayBjYW4gYmUgc2xvdyBvbiBzb21lIHN5c3RlbXMsIGFuZCBjYW4gc29tZXRpbWVzIGJlDQorICB3YXN0ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkIGFsbG9jYXRlDQorICBtb3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoIGVub3VnaCBzbyB0aGF0IHlvdXINCisgIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdvdWxkIGltcHJvdmUgYnkgcmVsZWFzaW5nIHRoaXMgbXVjaA0KKyAgbWVtb3J5LiAgQXMgYSByb3VnaCBndWlkZSwgeW91IG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZQ0KKyAgYXZlcmFnZSBzaXplIG9mIGEgcHJvY2VzcyAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4NCisgIFJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5IHdvdWxkIGFsbG93IHN1Y2ggYSBwcm9jZXNzIHRvIHJ1biBpbg0KKyAgbWVtb3J5LiAgR2VuZXJhbGx5LCBpdCBpcyB3b3J0aCB0dW5pbmcgdHJpbSB0aHJlc2hvbGRzIHdoZW4gYQ0KKyAgcHJvZ3JhbSB1bmRlcmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZSBhbGxvY2F0ZWQNCisgIGFuZCByZWxlYXNlZCBpbiB3YXlzIHRoYXQgY2FuIHJldXNlIGVhY2ggb3RoZXIncyBzdG9yYWdlLCBwZXJoYXBzDQorICBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaCBjaHVua3MgYXQgYWxsLiBUaGUgdHJpbQ0KKyAgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXplIHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbw0KKyAgZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byBNQVhfU0laRV9ULiBOb3RlIHRoYXQgdGhlIHRyaWNrDQorICBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9jaW5nIGEgaHVnZSBzcGFjZSBhbmQgdGhlbiBmcmVlaW5nIGl0IGF0DQorICBwcm9ncmFtIHN0YXJ0dXAsIGluIGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0gbWVtb3J5LCBkb2Vzbid0DQorICBoYXZlIHRoZSBpbnRlbmRlZCBlZmZlY3QgdW5kZXIgYXV0b21hdGljIHRyaW1taW5nLCBzaW5jZSB0aGF0IG1lbW9yeQ0KKyAgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLg0KKw0KK0RFRkFVTFRfTU1BUF9USFJFU0hPTEQgICAgICAgZGVmYXVsdDogMjU2Sw0KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX01NQVBfVEhSRVNIT0xELCB4KQ0KKyAgVGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVzaW5nIE1NQVAgdG8gZGlyZWN0bHkgc2VydmljZSBhDQorICByZXF1ZXN0LiBSZXF1ZXN0cyBvZiBhdCBsZWFzdCB0aGlzIHNpemUgdGhhdCBjYW5ub3QgYmUgYWxsb2NhdGVkDQorICB1c2luZyBhbHJlYWR5LWV4aXN0aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuICAoSWYgZW5vdWdoDQorICBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMgaXQgaXMgdXNlZCBpbnN0ZWFkLikgIFVzaW5nIG1tYXANCisgIHNlZ3JlZ2F0ZXMgcmVsYXRpdmVseSBsYXJnZSBjaHVua3Mgb2YgbWVtb3J5IHNvIHRoYXQgdGhleSBjYW4gYmUNCisgIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIEEgcmVxdWVzdA0KKyAgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVyIHJldXNlZCBieSBhbnkgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3QNCisgIG5vdCBkaXJlY3RseTsgdGhlIHN5c3RlbSBtYXkganVzdCBzbyBoYXBwZW4gdG8gcmVtYXAgc3VjY2Vzc2l2ZQ0KKyAgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcw0KKyAgdGhlIGJlbmVmaXRzIHRoYXQ6IE1tYXBwZWQgc3BhY2UgY2FuIGFsd2F5cyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQNCisgIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2hpY2ggaGVscHMga2VlcCB0aGUgc3lzdGVtIGxldmVsIG1lbW9yeSBkZW1hbmRzDQorICBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuICBBbHNvLCBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgYmVjb21lDQorICBgbG9ja2VkJyBiZXR3ZWVuIG90aGVyIGNodW5rcywgYXMgY2FuIGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZA0KKyAgY2h1bmtzLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxvY190cmltIHdvdWxkIG5vdA0KKyAgcmVsZWFzZSB0aGVtLiAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgc3BhY2UNCisgIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGxhdGVyDQorICByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuICBUaGUgYWR2YW50YWdlcyBvZiBtbWFwDQorICBuZWFybHkgYWx3YXlzIG91dHdlaWdoIGRpc2FkdmFudGFnZXMgZm9yICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlDQorICB2YWx1ZSBvZiAibGFyZ2UiIG1heSB2YXJ5IGFjcm9zcyBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgYW4NCisgIGVtcGlyaWNhbGx5IGRlcml2ZWQgdmFsdWUgdGhhdCB3b3JrcyB3ZWxsIGluIG1vc3Qgc3lzdGVtcy4gWW91IGNhbg0KKyAgZGlzYWJsZSBtbWFwIGJ5IHNldHRpbmcgdG8gTUFYX1NJWkVfVC4NCisNCitNQVhfUkVMRUFTRV9DSEVDS19SQVRFICAgZGVmYXVsdDogNDA5NSB1bmxlc3Mgbm90IEhBVkVfTU1BUA0KKyAgVGhlIG51bWJlciBvZiBjb25zb2xpZGF0ZWQgZnJlZXMgYmV0d2VlbiBjaGVja3MgdG8gcmVsZWFzZQ0KKyAgdW51c2VkIHNlZ21lbnRzIHdoZW4gZnJlZWluZy4gV2hlbiB1c2luZyBub24tY29udGlndW91cyBzZWdtZW50cywNCisgIGVzcGVjaWFsbHkgd2l0aCBtdWx0aXBsZSBtc3BhY2VzLCBjaGVja2luZyBvbmx5IGZvciB0b3Btb3N0IHNwYWNlDQorICBkb2Vzbid0IGFsd2F5cyBzdWZmaWNlIHRvIHRyaWdnZXIgdHJpbW1pbmcuIFRvIGNvbXBlbnNhdGUgZm9yIHRoaXMsDQorICBmcmVlKCkgd2lsbCwgd2l0aCBhIHBlcmlvZCBvZiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIChvciB0aGUNCisgIGN1cnJlbnQgbnVtYmVyIG9mIHNlZ21lbnRzLCBpZiBncmVhdGVyKSB0cnkgdG8gcmVsZWFzZSB1bnVzZWQNCisgIHNlZ21lbnRzIHRvIHRoZSBPUyB3aGVuIGZyZWVpbmcgY2h1bmtzIHRoYXQgcmVzdWx0IGluDQorICBjb25zb2xpZGF0aW9uLiBUaGUgYmVzdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjb21wcm9taXNlDQorICBiZXR3ZWVuIHNsb3dpbmcgZG93biBmcmVlcyB3aXRoIHJlbGF0aXZlbHkgY29zdGx5IGNoZWNrcyB0aGF0DQorICByYXJlbHkgdHJpZ2dlciB2ZXJzdXMgaG9sZGluZyBvbiB0byB1bnVzZWQgbWVtb3J5LiBUbyBlZmZlY3RpdmVseQ0KKyAgZGlzYWJsZSwgc2V0IHRvIE1BWF9TSVpFX1QuIFRoaXMgbWF5IGxlYWQgdG8gYSB2ZXJ5IHNsaWdodCBzcGVlZA0KKyAgaW1wcm92ZW1lbnQgYXQgdGhlIGV4cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5Lg0KKyovDQorI2luY2x1ZGUgImluYy9lbWJBUkNfdG9vbGNoYWluLmgiDQorZXh0ZXJuIHZvaWQgKl9zYnJrKHVuc2lnbmVkIGludCBzaXplKTsNCisNCisjaWZuZGVmIF9XSU4zMg0KKyNpZmRlZiBTTUFMTF9NRU1PUlkNCisjZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoMTI4KQ0KKyNlbHNlDQorI2RlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKDQwOTYpDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyogVmVyc2lvbiBpZGVudGlmaWVyIHRvIGFsbG93IHBlb3BsZSB0byBzdXBwb3J0IG11bHRpcGxlIHZlcnNpb25zICovDQorI2lmbmRlZiBETE1BTExPQ19WRVJTSU9ODQorI2RlZmluZSBETE1BTExPQ19WRVJTSU9OIDIwODA2DQorI2VuZGlmIC8qIERMTUFMTE9DX1ZFUlNJT04gKi8NCisNCisjaWZuZGVmIERMTUFMTE9DX0VYUE9SVA0KKyNkZWZpbmUgRExNQUxMT0NfRVhQT1JUIGV4dGVybg0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgV0lOMzINCisjaWZkZWYgX1dJTjMyDQorI2RlZmluZSBXSU4zMiAxDQorI2VuZGlmICAvKiBfV0lOMzIgKi8NCisjaWZkZWYgX1dJTjMyX1dDRQ0KKyNkZWZpbmUgTEFDS1NfRkNOVExfSA0KKyNkZWZpbmUgV0lOMzIgMQ0KKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovDQorI2VuZGlmICAvKiBXSU4zMiAqLw0KKyNpZmRlZiBXSU4zMg0KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTg0KKyNpbmNsdWRlIDx3aW5kb3dzLmg+DQorI2luY2x1ZGUgPHRjaGFyLmg+DQorI2RlZmluZSBIQVZFX01NQVAgMQ0KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwDQorI2RlZmluZSBMQUNLU19VTklTVERfSA0KKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gNCisjZGVmaW5lIExBQ0tTX1NZU19NTUFOX0gNCisjZGVmaW5lIExBQ0tTX1NUUklOR19IDQorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gNCisjZGVmaW5lIExBQ0tTX1NZU19UWVBFU19IDQorI2RlZmluZSBMQUNLU19FUlJOT19IDQorI2RlZmluZSBMQUNLU19TQ0hFRF9IDQorI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04NCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTg0KKyNlbmRpZiAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8NCisjaWZuZGVmIE1NQVBfQ0xFQVJTDQorI2lmZGVmIF9XSU4zMl9XQ0UgLyogV0lOQ0UgcmVwb3J0ZWRseSBkb2VzIG5vdCBjbGVhciAqLw0KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMA0KKyNlbHNlDQorI2RlZmluZSBNTUFQX0NMRUFSUyAxDQorI2VuZGlmIC8qIF9XSU4zMl9XQ0UgKi8NCisjZW5kaWYgLypNTUFQX0NMRUFSUyAqLw0KKyNlbmRpZiAgLyogV0lOMzIgKi8NCisNCisjaWYgZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoX0RBUldJTikNCisvKiBNYWMgT1NYIGRvY3MgYWR2aXNlIG5vdCB0byB1c2Ugc2JyazsgaXQgc2VlbXMgYmV0dGVyIHRvIHVzZSBtbWFwICovDQorI2lmbmRlZiBIQVZFX01PUkVDT1JFDQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDANCisjZGVmaW5lIEhBVkVfTU1BUCAxDQorLyogT1NYIGFsbG9jYXRvcnMgcHJvdmlkZSAxNiBieXRlIGFsaWdubWVudCAqLw0KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVA0KKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCkxNlUpDQorI2VuZGlmDQorI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovDQorI2VuZGlmICAvKiBEQVJXSU4gKi8NCisNCisjaWZuZGVmIExBQ0tTX1NZU19UWVBFU19IDQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogRm9yIHNpemVfdCAqLw0KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8NCisNCisvKiBUaGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgdmFsdWUgaGFzIGFsbCBiaXRzIHNldCAqLw0KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApDQorDQorI2lmbmRlZiBVU0VfTE9DS1MgLyogZW5zdXJlIHRydWUgaWYgc3BpbiBvciByZWN1cnNpdmUgbG9ja3Mgc2V0ICovDQorI2RlZmluZSBVU0VfTE9DS1MgICgoZGVmaW5lZChVU0VfU1BJTl9MT0NLUykgJiYgVVNFX1NQSU5fTE9DS1MgIT0gMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgKGRlZmluZWQoVVNFX1JFQ1VSU0lWRV9MT0NLUykgJiYgVVNFX1JFQ1VSU0lWRV9MT0NLUyAhPSAwKSkNCisjZW5kaWYgLyogVVNFX0xPQ0tTICovDQorDQorI2lmIFVTRV9MT0NLUyAvKiBTcGluIGxvY2tzIGZvciBnY2MgPj0gNC4xLCBvbGRlciBnY2Mgb24geDg2LCBNU0MgPj0gMTMxMCAqLw0KKyNpZiAoKGRlZmluZWQoX19HTlVDX18pICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAoKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSkgfHwgICAgICBcDQorICAgICAgIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpKSB8fCAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzEwKSkNCisjaWZuZGVmIFVTRV9TUElOX0xPQ0tTDQorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAxDQorI2VuZGlmIC8qIFVTRV9TUElOX0xPQ0tTICovDQorI2VsaWYgVVNFX1NQSU5fTE9DS1MNCisjZXJyb3IgIlVTRV9TUElOX0xPQ0tTIGRlZmluZWQgd2l0aG91dCBpbXBsZW1lbnRhdGlvbiINCisjZW5kaWYgLyogLi4uIGxvY2tzIGF2YWlsYWJsZS4uLiAqLw0KKyNlbGlmICFkZWZpbmVkKFVTRV9TUElOX0xPQ0tTKQ0KKyNkZWZpbmUgVVNFX1NQSU5fTE9DS1MgMA0KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8NCisNCisjaWZuZGVmIE9OTFlfTVNQQUNFUw0KKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDANCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLw0KKyNpZm5kZWYgTVNQQUNFUw0KKyNpZiBPTkxZX01TUEFDRVMNCisjZGVmaW5lIE1TUEFDRVMgMQ0KKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovDQorI2RlZmluZSBNU1BBQ0VTIDANCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLw0KKyNlbmRpZiAgLyogTVNQQUNFUyAqLw0KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVA0KKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCkoMiAqIHNpemVvZih2b2lkICopKSkNCisjZW5kaWYgIC8qIE1BTExPQ19BTElHTk1FTlQgKi8NCisjaWZuZGVmIEZPT1RFUlMNCisjZGVmaW5lIEZPT1RFUlMgMA0KKyNlbmRpZiAgLyogRk9PVEVSUyAqLw0KKyNpZm5kZWYgQUJPUlQNCisjZGVmaW5lIEFCT1JUICBhYm9ydCgpDQorI2VuZGlmICAvKiBBQk9SVCAqLw0KKyNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUNCisjZGVmaW5lIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIDENCisjZW5kaWYgIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovDQorI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SDQorI2RlZmluZSBQUk9DRUVEX09OX0VSUk9SIDANCisjZW5kaWYgIC8qIFBST0NFRURfT05fRVJST1IgKi8NCisNCisjaWZuZGVmIElOU0VDVVJFDQorI2RlZmluZSBJTlNFQ1VSRSAwDQorI2VuZGlmICAvKiBJTlNFQ1VSRSAqLw0KKyNpZm5kZWYgTUFMTE9DX0lOU1BFQ1RfQUxMDQorI2RlZmluZSBNQUxMT0NfSU5TUEVDVF9BTEwgMA0KKyNlbmRpZiAgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovDQorI2lmbmRlZiBIQVZFX01NQVANCisjZGVmaW5lIEhBVkVfTU1BUCAxDQorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8NCisjaWZuZGVmIE1NQVBfQ0xFQVJTDQorI2RlZmluZSBNTUFQX0NMRUFSUyAxDQorI2VuZGlmICAvKiBNTUFQX0NMRUFSUyAqLw0KKyNpZm5kZWYgSEFWRV9NUkVNQVANCisjaWZkZWYgbGludXgNCisjZGVmaW5lIEhBVkVfTVJFTUFQIDENCisjZGVmaW5lIF9HTlVfU09VUkNFIC8qIFR1cm5zIG9uIG1yZW1hcCgpIGRlZmluaXRpb24gKi8NCisjZWxzZSAgIC8qIGxpbnV4ICovDQorI2RlZmluZSBIQVZFX01SRU1BUCAwDQorI2VuZGlmICAvKiBsaW51eCAqLw0KKyNlbmRpZiAgLyogSEFWRV9NUkVNQVAgKi8NCisjaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTg0KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICBlcnJubyA9IEVOT01FTTsNCisjZW5kaWYgIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLw0KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQ0KKyNpZiBPTkxZX01TUEFDRVMNCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMA0KKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovDQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDENCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLw0KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLw0KKyNpZiAhSEFWRV9NT1JFQ09SRQ0KKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwDQorI2Vsc2UgICAvKiAhSEFWRV9NT1JFQ09SRSAqLw0KKyNkZWZpbmUgTU9SRUNPUkVfREVGQVVMVCBfc2Jyaw0KKyNpZm5kZWYgTU9SRUNPUkVfQ09OVElHVU9VUw0KKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxDQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovDQorI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovDQorI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZDQorI2lmIChNT1JFQ09SRV9DT05USUdVT1VTIHx8IGRlZmluZWQoV0lOMzIpKQ0KKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMCkgIC8qIDAgbWVhbnMgdG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8NCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8NCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkNCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8NCisjZW5kaWYgIC8qIERFRkFVTFRfR1JBTlVMQVJJVFkgKi8NCisjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQNCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNDQorI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgoc2l6ZV90KTJVICogKHNpemVfdCkxMDI0VSAqIChzaXplX3QpMTAyNFUpDQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLw0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UDQorI2VuZGlmICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLw0KKyNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLw0KKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRA0KKyNpZiBIQVZFX01NQVANCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpMjU2VSAqIChzaXplX3QpMTAyNFUpDQorI2Vsc2UgICAvKiBIQVZFX01NQVAgKi8NCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgTUFYX1NJWkVfVA0KKyNlbmRpZiAgLyogSEFWRV9NTUFQICovDQorI2VuZGlmICAvKiBERUZBVUxUX01NQVBfVEhSRVNIT0xEICovDQorI2lmbmRlZiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFDQorI2lmIEhBVkVfTU1BUA0KKyNkZWZpbmUgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSA0MDk1DQorI2Vsc2UNCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgTUFYX1NJWkVfVA0KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8NCisjZW5kaWYgLyogTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAqLw0KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTDQorI2RlZmluZSBVU0VfQlVJTFRJTl9GRlMgMA0KKyNlbmRpZiAgLyogVVNFX0JVSUxUSU5fRkZTICovDQorI2lmbmRlZiBVU0VfREVWX1JBTkRPTQ0KKyNkZWZpbmUgVVNFX0RFVl9SQU5ET00gMA0KKyNlbmRpZiAgLyogVVNFX0RFVl9SQU5ET00gKi8NCisjaWZuZGVmIE5PX01BTExJTkZPDQorI2RlZmluZSBOT19NQUxMSU5GTyAwDQorI2VuZGlmICAvKiBOT19NQUxMSU5GTyAqLw0KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQ0KKyNkZWZpbmUgTUFMTElORk9fRklFTERfVFlQRSBzaXplX3QNCisjZW5kaWYgIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8NCisjaWZuZGVmIE5PX01BTExPQ19TVEFUUw0KKyNkZWZpbmUgTk9fTUFMTE9DX1NUQVRTIDANCisjZW5kaWYgIC8qIE5PX01BTExPQ19TVEFUUyAqLw0KKyNpZm5kZWYgTk9fU0VHTUVOVF9UUkFWRVJTQUwNCisjZGVmaW5lIE5PX1NFR01FTlRfVFJBVkVSU0FMIDANCisjZW5kaWYgLyogTk9fU0VHTUVOVF9UUkFWRVJTQUwgKi8NCisNCisvKg0KKyAgbWFsbG9wdCB0dW5pbmcgb3B0aW9ucy4gIFNWSUQvWFBHIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbWV0ZXINCisgIG51bWJlcnMgZm9yIG1hbGxvcHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlDQorICBhcmUgdXNlZCBpbiB0aGlzIG1hbGxvYywgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzDQorICBtYWxsb2MgZG9lcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4NCisqLw0KKw0KKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQ0KKyNkZWZpbmUgTV9HUkFOVUxBUklUWSAgICAgICAgKC0yKQ0KKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWxsaW5mbyBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmICFOT19NQUxMSU5GTw0KKy8qDQorICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbw0KKyAgcm91dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFuZA0KKyAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhDQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1hbGxpbmZvLiAgVGhlIG1haW4NCisgIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRoYXQgaXMgcmV0dXJuZWQgKGJ5LWNvcHkpDQorICBieSBtYWxsaW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMgdGhhdA0KKyAgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2ZXJzaW9uIG9mIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUNCisgIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGggb3RoZXIgbnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mDQorICBpbnRlcmVzdC4NCisNCisgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhDQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0DQorICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsgZWxzZSBhIGNvbXBsaWFudCB2ZXJzaW9uIGlzDQorICBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRoZSBzYW1lIGZvciBtYWxsaW5mbygpIHRvDQorICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0DQorICBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMgaW50cy4gQnV0IHNvbWUgb3RoZXJzDQorICBkZWZpbmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0gZGVmaW5lcyB0aGUgZmllbGRzIHVzaW5nIGENCisgIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBNVVNUICNpbmNsdWRlIHlvdXINCisgIHN5c3RlbSB2ZXJzaW9uIGFuZCAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guDQorKi8NCisNCisvKiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8NCisNCisjaWZkZWYgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSA0KKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiDQorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLw0KKyNpZm5kZWYgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEDQorLyogSFAtVVggKGFuZCBvdGhlcnM/KSByZWRlZmluZXMgbWFsbGluZm8gdW5sZXNzIF9TVFJVQ1RfTUFMTElORk8gaXMgZGVmaW5lZCAqLw0KKyNkZWZpbmUgX1NUUlVDVF9NQUxMSU5GTw0KKyNkZWZpbmUgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEIDENCitzdHJ1Y3QgbWFsbGluZm8NCit7DQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLw0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIG9yZGJsa3M7ICAvKiBudW1iZXIgb2YgZnJlZSBjaHVua3MgKi8NCisgICAgTUFMTElORk9fRklFTERfVFlQRSBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8NCisgICAgTUFMTElORk9fRklFTERfVFlQRSBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8NCisgICAgTUFMTElORk9fRklFTERfVFlQRSBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLw0KKyAgICBNQUxMSU5GT19GSUVMRF9UWVBFIGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovDQorICAgIE1BTExJTkZPX0ZJRUxEX1RZUEUga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8NCit9Ow0KKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8NCisjZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLw0KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLw0KKw0KKy8qDQorICBUcnkgdG8gcGVyc3VhZGUgY29tcGlsZXJzIHRvIGlubGluZS4gVGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIGZvcg0KKyAgaW5saW5pbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCBzbyB0aGVzZSBhcmVuJ3QgdXNlZCBmb3IgdGhlbS4NCisqLw0KKw0KKyNpZm5kZWYgRk9SQ0VJTkxJTkUNCisjaWYgZGVmaW5lZChfX0dOVUNfXykNCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9faW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkNCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNkZWZpbmUgRk9SQ0VJTkxJTkUgX19mb3JjZWlubGluZQ0KKyNlbmRpZg0KKyNlbmRpZg0KKyNpZm5kZWYgTk9JTkxJTkUNCisjaWYgZGVmaW5lZChfX0dOVUNfXykNCisjZGVmaW5lIE5PSU5MSU5FIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpDQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikNCisjZGVmaW5lIE5PSU5MSU5FIF9fZGVjbHNwZWMobm9pbmxpbmUpDQorI2Vsc2UNCisjZGVmaW5lIE5PSU5MSU5FDQorI2VuZGlmDQorI2VuZGlmDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2lmbmRlZiBGT1JDRUlOTElORQ0KKyNkZWZpbmUgRk9SQ0VJTkxJTkUgaW5saW5lDQorI2VuZGlmDQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQorI2lmbmRlZiBGT1JDRUlOTElORQ0KKyNkZWZpbmUgRk9SQ0VJTkxJTkUNCisjZW5kaWYNCisNCisjaWYgIU9OTFlfTVNQQUNFUw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmbmRlZiBVU0VfRExfUFJFRklYDQorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYw0KKyNkZWZpbmUgZGxmcmVlICAgICAgICAgICAgICAgICBmcmVlDQorI2RlZmluZSBkbG1hbGxvYyAgICAgICAgICAgICAgIG1hbGxvYw0KKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbg0KKyNkZWZpbmUgZGxwb3NpeF9tZW1hbGlnbiAgICAgICBwb3NpeF9tZW1hbGlnbg0KKyNkZWZpbmUgZGxyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jDQorI2RlZmluZSBkbHJlYWxsb2NfaW5fcGxhY2UgICAgIHJlYWxsb2NfaW5fcGxhY2UNCisjZGVmaW5lIGRsdmFsbG9jICAgICAgICAgICAgICAgdmFsbG9jDQorI2RlZmluZSBkbHB2YWxsb2MgICAgICAgICAgICAgIHB2YWxsb2MNCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8NCisjZGVmaW5lIGRsbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdA0KKyNkZWZpbmUgZGxtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQ0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMNCisjZGVmaW5lIGRsbWFsbG9jX3VzYWJsZV9zaXplICAgbWFsbG9jX3VzYWJsZV9zaXplDQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQNCisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQNCisjZGVmaW5lIGRsbWFsbG9jX2Zvb3RwcmludF9saW1pdCBtYWxsb2NfZm9vdHByaW50X2xpbWl0DQorI2RlZmluZSBkbG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0IG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0DQorI2RlZmluZSBkbG1hbGxvY19pbnNwZWN0X2FsbCAgIG1hbGxvY19pbnNwZWN0X2FsbA0KKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MNCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MNCisjZGVmaW5lIGRsYnVsa19mcmVlICAgICAgICAgICAgYnVsa19mcmVlDQorI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8NCisNCisvKg0KKyAgbWFsbG9jKHNpemVfdCBuKQ0KKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgYXQgbGVhc3QgbiBieXRlcywgb3INCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0NCisgIG9uIEFOU0kgQyBzeXN0ZW1zLg0KKw0KKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQ0KKyAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAzMiBieXRlcyBvbiA2NGJpdA0KKyAgc3lzdGVtcy4pICBOb3RlIHRoYXQgc2l6ZV90IGlzIGFuIHVuc2lnbmVkIHR5cGUsIHNvIGNhbGxzIHdpdGgNCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMNCisgIHJlcXVlc3RzIGZvciBodWdlIGFtb3VudHMgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlDQorICBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBuIGRpZmZlcnMgYWNyb3NzIHN5c3RlbXMsIGJ1dCBpcyBpbiBhbGwNCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90Lg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKmRsbWFsbG9jKHNpemVfdCk7DQorDQorLyoNCisgIGZyZWUodm9pZCogcCkNCisgIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkNCisgIGFsbG9jYXRlZCB1c2luZyBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLg0KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5DQorICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY2F1c2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICBkbGZyZWUodm9pZCAqKTsNCisNCisvKg0KKyAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKTsNCisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucw0KKyAgc2V0IHRvIHplcm8uDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpOw0KKw0KKy8qDQorICByZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQ0KKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBzaXplIG4gdGhhdCBjb250YWlucyB0aGUgc2FtZSBkYXRhDQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbA0KKyAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLg0KKw0KKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQ0KKyAgcHJlZmVycyBleHRlbmRpbmcgcCBpbiBtb3N0IGNhc2VzIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdA0KKyAgZW1wbG95cyB0aGUgZXF1aXZhbGVudCBvZiBhIG1hbGxvYy1jb3B5LWZyZWUgc2VxdWVuY2UuDQorDQorICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuDQorDQorICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbg0KKyAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLg0KKw0KKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZA0KKyAgc3BhY2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICByZWFsbG9jIHdpdGggYSBzaXplDQorICBhcmd1bWVudCBvZiB6ZXJvIChyZSlhbGxvY2F0ZXMgYSBtaW5pbXVtLXNpemVkIGNodW5rLg0KKw0KKyAgVGhlIG9sZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1bmsNCisgIHRvIGJlIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gcmVhbGxvYyBpcyBub3Qgc3VwcG9ydGVkLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKmRscmVhbGxvYyh2b2lkICosIHNpemVfdCk7DQorDQorLyoNCisgIHJlYWxsb2NfaW5fcGxhY2Uodm9pZCogcCwgc2l6ZV90IG4pDQorICBSZXNpemVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHAgdG8gc2l6ZSBuLCBvbmx5IGlmIHRoaXMgY2FuIGJlDQorICBkb25lIHdpdGhvdXQgbW92aW5nIHAgKGkuZS4sIG9ubHkgaWYgdGhlcmUgaXMgYWRqYWNlbnQgc3BhY2UNCisgIGF2YWlsYWJsZSBpZiBuIGlzIGdyZWF0ZXIgdGhhbiBwJ3MgY3VycmVudCBhbGxvY2F0ZWQgc2l6ZSwgb3IgbiBpcw0KKyAgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHAncyBzaXplKS4gVGhpcyBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIHBsYWluDQorICByZWFsbG9jIGlmIGFuIGFsdGVybmF0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgbmVlZGVkIHVwb24gZmFpbHVyZQ0KKyAgdG8gZXhwYW5kIHNwYWNlOyBmb3IgZXhhbXBsZSwgcmVhbGxvY2F0aW9uIG9mIGEgYnVmZmVyIHRoYXQgbXVzdCBiZQ0KKyAgbWVtb3J5LWFsaWduZWQgb3IgY2xlYXJlZC4gWW91IGNhbiB1c2UgcmVhbGxvY19pbl9wbGFjZSB0byB0cmlnZ2VyDQorICB0aGVzZSBhbHRlcm5hdGl2ZXMgb25seSB3aGVuIG5lZWRlZC4NCisNCisgIFJldHVybnMgcCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgbnVsbC4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICpkbHJlYWxsb2NfaW5fcGxhY2Uodm9pZCAqLCBzaXplX3QpOw0KKw0KKy8qDQorICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7DQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkDQorICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50Lg0KKw0KKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcw0KKyAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVhdGVyIHBvd2VyIGlzIHVzZWQuDQorICA4LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9uJ3QNCisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLg0KKw0KKyAgT3ZlcnJlbGlhbmNlIG9uIG1lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJhZ21lbnQgc3BhY2UuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqZGxtZW1hbGlnbihzaXplX3QsIHNpemVfdCk7DQorDQorLyoNCisgIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogcHAsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsNCisgIEFsbG9jYXRlcyBhIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudA0KKyAgYXJndW1lbnQuIERpZmZlcnMgZnJvbSBtZW1hbGlnbiBvbmx5IGluIHRoYXQgaXQgKDEpIGFzc2lnbnMgdGhlDQorICBhbGxvY2F0ZWQgbWVtb3J5IHRvICpwcCByYXRoZXIgdGhhbiByZXR1cm5pbmcgaXQsICgyKSBmYWlscyBhbmQNCisgIHJldHVybnMgRUlOVkFMIGlmIHRoZSBhbGlnbm1lbnQgaXMgbm90IGEgcG93ZXIgb2YgdHdvICgzKSBmYWlscyBhbmQNCisgIHJldHVybnMgRU5PTUVNIGlmIG1lbW9yeSBjYW5ub3QgYmUgYWxsb2NhdGVkLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIGludCBkbHBvc2l4X21lbWFsaWduKHZvaWQgKiosIHNpemVfdCwgc2l6ZV90KTsNCisNCisvKg0KKyAgdmFsbG9jKHNpemVfdCBuKTsNCisgIEVxdWl2YWxlbnQgdG8gbWVtYWxpZ24ocGFnZXNpemUsIG4pLCB3aGVyZSBwYWdlc2l6ZSBpcyB0aGUgcGFnZQ0KKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKmRsdmFsbG9jKHNpemVfdCk7DQorDQorLyoNCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpDQorICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQ0KKyAgKHBhcmFtZXRlci1udW1iZXIsIHBhcmFtZXRlci12YWx1ZSkgcGFpci4gIG1hbGxvcHQgdGhlbiBzZXRzIHRoZQ0KKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28NCisgIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQ0KKyAgMC4gIFRvIHdvcmthcm91bmQgdGhlIGZhY3QgdGhhdCBtYWxsb3B0IGlzIHNwZWNpZmllZCB0byB1c2UgaW50LA0KKyAgbm90IHNpemVfdCBwYXJhbWV0ZXJzLCB0aGUgdmFsdWUgLTEgaXMgc3BlY2lhbGx5IHRyZWF0ZWQgYXMgdGhlDQorICBtYXhpbXVtIHVuc2lnbmVkIHNpemVfdCB2YWx1ZS4NCisNCisgIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtIG51bWJlcnMgZm9yIG1hbGxvcHQsDQorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLA0KKyAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyDQorICBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4gIEJyaWVmbHksIHN1cHBvcnRlZA0KKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiDQorICBjb25maWd1cmF0aW9ucykuDQorDQorICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzDQorICBNX1RSSU1fVEhSRVNIT0xEICAgICAtMSAgIDIqMTAyNCoxMDI0ICAgYW55ICAgKC0xIGRpc2FibGVzKQ0KKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQ0KKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkNCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBpbnQgZGxtYWxsb3B0KGludCwgaW50KTsNCisNCisvKg0KKyAgbWFsbG9jX2Zvb3RwcmludCgpOw0KKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gIFRoZSB0b3RhbA0KKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMNCisgIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQNCisgIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZCBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLg0KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sDQorICBzbyByZXN1bHRzIG1pZ2h0IG5vdCBiZSB1cCB0byBkYXRlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCk7DQorDQorLyoNCisgIG1hbGxvY19tYXhfZm9vdHByaW50KCk7DQorICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uIFRoaXMNCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlDQorICBoYXMgYmVlbiByZWNsYWltZWQgYnkgdGhlIHN5c3RlbS4gVGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZA0KKyAgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sDQorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZA0KKyAgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4gIEV2ZW4gaWYgbG9ja3MgYXJlDQorICBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwgc28gcmVzdWx0cyBtaWdodA0KKyAgbm90IGJlIHVwIHRvIGRhdGUuDQorKi8NCitETE1BTExPQ19FWFBPUlQgc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7DQorDQorLyoNCisgIG1hbGxvY19mb290cHJpbnRfbGltaXQoKTsNCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8gb2J0YWluIGZyb20NCisgIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgbGFzdCB2YWx1ZSByZXR1cm5lZCBieQ0KKyAgbWFsbG9jX3NldF9mb290cHJpbnRfbGltaXQsIG9yIHRoZSBtYXhpbXVtIHNpemVfdCB2YWx1ZSBpZg0KKyAgbmV2ZXIgc2V0LiBUaGUgcmV0dXJuZWQgdmFsdWUgcmVmbGVjdHMgYSBwZXJtaXNzaW9uLiBUaGVyZSBpcyBubw0KKyAgZ3VhcmFudGVlIHRoYXQgdGhpcyBudW1iZXIgb2YgYnl0ZXMgY2FuIGFjdHVhbGx5IGJlIG9idGFpbmVkIGZyb20NCisgIHRoZSBzeXN0ZW0uDQorKi8NCitETE1BTExPQ19FWFBPUlQgc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludF9saW1pdCgpOw0KKw0KKy8qDQorICBtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdCgpOw0KKyAgU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gb2J0YWluIGZyb20gdGhlIHN5c3RlbSwgY2F1c2luZw0KKyAgZmFpbHVyZSByZXR1cm5zIGZyb20gbWFsbG9jIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB1cG9uIGF0dGVtcHRzIHRvDQorICBleGNlZWQgdGhpcyB2YWx1ZS4gVGhlIGFyZ3VtZW50IHZhbHVlIG1heSBiZSBzdWJqZWN0IHRvIHBhZ2UNCisgIHJvdW5kaW5nIHRvIGFuIGVuZm9yY2VhYmxlIGxpbWl0OyB0aGlzIGFjdHVhbCB2YWx1ZSBpcyByZXR1cm5lZC4NCisgIFVzaW5nIGFuIGFyZ3VtZW50IG9mIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemVfdCBlZmZlY3RpdmVseQ0KKyAgZGlzYWJsZXMgY2hlY2tzLiBJZiB0aGUgYXJndW1lbnQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQ0KKyAgY3VycmVudCBtYWxsb2NfZm9vdHByaW50LCB0aGVuIGFsbCBmdXR1cmUgYWxsb2NhdGlvbnMgdGhhdCByZXF1aXJlDQorICBhZGRpdGlvbmFsIHN5c3RlbSBtZW1vcnkgd2lsbCBmYWlsLiBIb3dldmVyLCBpbnZvY2F0aW9uIGNhbm5vdA0KKyAgcmV0cm9hY3RpdmVseSBkZWFsbG9jYXRlIGV4aXN0aW5nIHVzZWQgbWVtb3J5Lg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkbG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0KHNpemVfdCBieXRlcyk7DQorDQorI2lmIE1BTExPQ19JTlNQRUNUX0FMTA0KKy8qDQorICBtYWxsb2NfaW5zcGVjdF9hbGwodm9pZCgqaGFuZGxlcikodm9pZCAqc3RhcnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5kLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkX2J5dGVzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNhbGxiYWNrX2FyZyksDQorICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFyZyk7DQorICBUcmF2ZXJzZXMgdGhlIGhlYXAgYW5kIGNhbGxzIHRoZSBnaXZlbiBoYW5kbGVyIGZvciBlYWNoIG1hbmFnZWQNCisgIHJlZ2lvbiwgc2tpcHBpbmcgYWxsIGJ5dGVzIHRoYXQgYXJlIChvciBtYXkgYmUpIHVzZWQgZm9yIGJvb2trZWVwaW5nDQorICBwdXJwb3Nlcy4gIFRyYXZlcnNhbCBkb2VzIG5vdCBpbmNsdWRlIGluY2x1ZGUgY2h1bmtzIHRoYXQgaGF2ZSBiZWVuDQorICBkaXJlY3RseSBtZW1vcnkgbWFwcGVkLiBFYWNoIHJlcG9ydGVkIHJlZ2lvbiBiZWdpbnMgYXQgdGhlIHN0YXJ0DQorICBhZGRyZXNzLCBhbmQgY29udGludWVzIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBlbmQgYWRkcmVzcy4gIFRoZQ0KKyAgZmlyc3QgdXNlZF9ieXRlcyBvZiB0aGUgcmVnaW9uIGNvbnRhaW4gYWxsb2NhdGVkIGRhdGEuIElmDQorICB1c2VkX2J5dGVzIGlzIHplcm8sIHRoZSByZWdpb24gaXMgdW5hbGxvY2F0ZWQuIFRoZSBoYW5kbGVyIGlzDQorICBpbnZva2VkIHdpdGggdGhlIGdpdmVuIGNhbGxiYWNrIGFyZ3VtZW50LiBJZiBsb2NrcyBhcmUgZGVmaW5lZCwgdGhleQ0KKyAgYXJlIGhlbGQgZHVyaW5nIHRoZSBlbnRpcmUgdHJhdmVyc2FsLiBJdCBpcyBhIGJhZCBpZGVhIHRvIGludm9rZQ0KKyAgb3RoZXIgbWFsbG9jIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiB0aGUgaGFuZGxlci4NCisNCisgIEZvciBleGFtcGxlLCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIGluLXVzZSBjaHVua3Mgd2l0aCBzaXplIGdyZWF0ZXINCisgIHRoYW4gMTAwMCwgeW91IGNvdWxkIHdyaXRlOg0KKyAgc3RhdGljIGludCBjb3VudCA9IDA7DQorICB2b2lkIGNvdW50X2NodW5rcyh2b2lkKiBzdGFydCwgdm9pZCogZW5kLCBzaXplX3QgdXNlZCwgdm9pZCogYXJnKSB7DQorICAgIGlmICh1c2VkID49IDEwMDApICsrY291bnQ7DQorICB9DQorICB0aGVuOg0KKyAgICBtYWxsb2NfaW5zcGVjdF9hbGwoY291bnRfY2h1bmtzLCBOVUxMKTsNCisNCisgIG1hbGxvY19pbnNwZWN0X2FsbCBpcyBjb21waWxlZCBvbmx5IGlmIE1BTExPQ19JTlNQRUNUX0FMTCBpcyBkZWZpbmVkLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgZGxtYWxsb2NfaW5zcGVjdF9hbGwodm9pZCgqaGFuZGxlcikodm9pZCAqLCB2b2lkICosIHNpemVfdCwgdm9pZCAqKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpOw0KKw0KKyNlbmRpZiAvKiBNQUxMT0NfSU5TUEVDVF9BTEwgKi8NCisNCisjaWYgIU5PX01BTExJTkZPDQorLyoNCisgIG1hbGxpbmZvKCkNCisgIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNvbnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6DQorDQorICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtDQorICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBjaHVua3MNCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uDQorICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucw0KKyAgaGJsa2hkOiAgICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucw0KKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyDQorICAgICAgICAgICAgICAgIHRoYW4gY3VycmVudCB0b3RhbCBpZiB0cmltbWluZyBoYXMgb2NjdXJyZWQuDQorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvDQorICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkNCisgIGZvcmRibGtzOiAgdG90YWwgZnJlZSBzcGFjZQ0KKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkDQorICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQNCisgICAgICAgICAgICAgICBpdCBpZ25vcmVzIHBhZ2UgcmVzdHJpY3Rpb25zIGV0Yy4pDQorDQorICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQ0KKyAgYmUga2VwdCBhcyBsb25ncywgdGhlIHJlcG9ydGVkIHZhbHVlcyBtYXkgd3JhcCBhcm91bmQgemVybyBhbmQNCisgIHRodXMgYmUgaW5hY2N1cmF0ZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsNCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8NCisNCisvKg0KKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7DQorDQorICBpbmRlcGVuZGVudF9jYWxsb2MgaXMgc2ltaWxhciB0byBjYWxsb2MsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhDQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzDQorICBpbmRlcGVuZGVudCBlbGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoDQorICBvZiB3aGljaCBzdGFydHMgb3V0IGNsZWFyZWQsIGFuZCBjYW4gYmUgaW5kZXBlbmRlbnRseSBmcmVlZCwNCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQ0KKyAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcg0KKyAgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkgaW4gc29tZQ0KKyAgYXBwbGljYXRpb25zLg0KKw0KKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCwgd2hpY2ggaXMNCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkNCisgIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMNCisgIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheSBtdXN0IGJlIG9mIGF0IGxlYXN0DQorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQ0KKyAgY2h1bmtzLg0KKw0KKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3INCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIg0KKyAgaXMgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMNCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuDQorDQorICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgY2FuIGJlDQorICBkb25lIGFsbCBhdCBvbmNlIHVzaW5nIGJ1bGtfZnJlZS4NCisNCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkNCisgIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0aW5nIGxhcmdlIGRhdGENCisgIHN0cnVjdHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBub2RlcywNCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2Rlcw0KKyAgbWF5IGxhdGVyIG5lZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOg0KKw0KKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07DQorDQorICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlzdCgpIHsNCisgICAgc3RydWN0IE5vZGUqKiBwb29sOw0KKyAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOw0KKyAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsNCisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7DQorICAgIGlmIChwb29sID09IDApIGRpZSgpOw0KKyAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4NCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsNCisgICAgZm9yIChpID0gMDsgaSA8IG4tMTsgKytpKQ0KKyAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2krMV07DQorICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikNCisgICAgcmV0dXJuIGZpcnN0Ow0KKyAgfQ0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKipkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdm9pZCAqKik7DQorDQorLyoNCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOw0KKw0KKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgYWxsb2NhdGVzLCBhbGwgYXQgb25jZSwgYSBzZXQgb2Ygbl9lbGVtZW50cw0KKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zDQorICBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUNCisgIGluZGVwZW5kZW50bHkgZnJlZWQsIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8NCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgNCisgIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkNCisgIGluIHNvbWUgYXBwbGljYXRpb25zLg0KKw0KKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElmIGl0IGlzIG51bGwNCisgIHRoZSByZXR1cm5lZCBhcnJheSBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbw0KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkNCisgIG11c3QgYmUgb2YgYXQgbGVhc3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQ0KKyAgcG9pbnRlcnMgdG8gdGhlIGNodW5rcy4NCisNCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21hbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3INCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCBjaHVua3MgaXMNCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzDQorICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLg0KKw0KKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGNhbiBiZQ0KKyAgZG9uZSBhbGwgYXQgb25jZSB1c2luZyBidWxrX2ZyZWUuDQorDQorICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaA0KKyAgZWxlbWVudCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90DQorICBhdXRvbWF0aWNhbGx5IGNsZWFyIGVsZW1lbnRzLg0KKw0KKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcw0KKyAgd2hlcmUgc2V2ZXJhbCBzdHJ1Y3RzIG9yIG9iamVjdHMgbXVzdCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHRoZQ0KKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6DQorDQorICBzdHJ1Y3QgSGVhZCB7IC4uLiB9DQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9DQorDQorICB2b2lkIHNlbmRfbWVzc2FnZShjaGFyKiBtc2cpIHsNCisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOw0KKyAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3QgSGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9Ow0KKyAgICB2b2lkKiBjaHVua3NbM107DQorICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQ0KKyAgICAgIGRpZSgpOw0KKyAgICBzdHJ1Y3QgSGVhZCogaGVhZCA9IChzdHJ1Y3QgSGVhZCopKGNodW5rc1swXSk7DQorICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOw0KKyAgICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7DQorICAgIC8vIC4uLg0KKyAgfQ0KKw0KKyAgSW4gZ2VuZXJhbCB0aG91Z2gsIGluZGVwZW5kZW50X2NvbWFsbG9jIGlzIHdvcnRoIHVzaW5nIG9ubHkgZm9yDQorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndA0KKyAgZGV0ZWN0IGVub3VnaCBkaWZmZXJlbmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuDQorDQorICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwNCisgIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNodW5rcyB0aGF0DQorICBtaWdodCBiZSBhdmFpbGFibGUgZm9yIHNvbWUgb2YgdGhlIGVsZW1lbnRzLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKipkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCwgc2l6ZV90ICosIHZvaWQgKiopOw0KKw0KKy8qDQorICBidWxrX2ZyZWUodm9pZCogYXJyYXlbXSwgc2l6ZV90IG5fZWxlbWVudHMpDQorICBGcmVlcyBhbmQgY2xlYXJzIChzZXRzIHRvIG51bGwpIGVhY2ggbm9uLW51bGwgcG9pbnRlciBpbiB0aGUgZ2l2ZW4NCisgIGFycmF5LiAgVGhpcyBpcyBsaWtlbHkgdG8gYmUgZmFzdGVyIHRoYW4gZnJlZWluZyB0aGVtIG9uZS1ieS1vbmUuDQorICBJZiBmb290ZXJzIGFyZSB1c2VkLCBwb2ludGVycyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gZGlmZmVyZW50DQorICBtc3BhY2VzIGFyZSBub3QgZnJlZWQgb3IgY2xlYXJlZCwgYW5kIHRoZSBjb3VudCBvZiBhbGwgc3VjaCBwb2ludGVycw0KKyAgaXMgcmV0dXJuZWQuICBGb3IgbGFyZ2UgYXJyYXlzIG9mIHBvaW50ZXJzIHdpdGggcG9vciBsb2NhbGl0eSwgaXQNCisgIG1heSBiZSB3b3J0aHdoaWxlIHRvIHNvcnQgdGhpcyBhcnJheSBiZWZvcmUgY2FsbGluZyBidWxrX2ZyZWUuDQorKi8NCitETE1BTExPQ19FWFBPUlQgc2l6ZV90ICBkbGJ1bGtfZnJlZSh2b2lkICoqLCBzaXplX3Qgbl9lbGVtZW50cyk7DQorDQorLyoNCisgIHB2YWxsb2Moc2l6ZV90IG4pOw0KKyAgRXF1aXZhbGVudCB0byB2YWxsb2MobWluaW11bS1wYWdlLXRoYXQtaG9sZHMobikpLCB0aGF0IGlzLA0KKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLg0KKyAqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICAqZGxwdmFsbG9jKHNpemVfdCk7DQorDQorLyoNCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOw0KKw0KKyAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZpYSBuZWdhdGl2ZSBhcmd1bWVudHMNCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYw0KKyAgcG9vbCBvciBpbiB1bnVzZWQgTU1BUCBzZWdtZW50cy4gWW91IGNhbiBjYWxsIHRoaXMgYWZ0ZXIgZnJlZWluZw0KKyAgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeSB0byBwb3RlbnRpYWxseSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkNCisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlDQorICBtZW1vcnkuIFVuZGVyIHNvbWUgYWxsb2NhdGlvbiBwYXR0ZXJucywgc29tZSBsYXJnZSBmcmVlIGJsb2NrcyBvZg0KKyAgbWVtb3J5IHdpbGwgYmUgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5IGNhbm5vdCBiZQ0KKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLg0KKw0KKyAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlDQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQ0KKyAgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSB0byBtYWludGFpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMNCisgIHdpbGwgYmUgbGVmdC4gTm9uLXplcm8gYXJndW1lbnRzIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gNCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nDQorICB0byByZS1vYnRhaW4gbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4NCisNCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuDQorKi8NCitETE1BTExPQ19FWFBPUlQgaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7DQorDQorLyoNCisgIG1hbGxvY19zdGF0cygpOw0KKyAgUHJpbnRzIG9uIHN0ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aA0KKyAgdmlhIHNicmsgYW5kIG1tYXApLCB0aGUgbWF4aW11bSBhbW91bnQgKHdoaWNoIG1heSBiZSBtb3JlIHRoYW4NCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50DQorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJlYWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQNCisgIGZyZWVkLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgbm90IHRoZQ0KKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZA0KKyAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzDQorICBhbGlnbm1lbnQgd2FzdGFnZSBhcyBiZWluZyBpbiB1c2UsIHRoaXMgZmlndXJlIG1heSBiZSBncmVhdGVyIHRoYW4NCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuDQorDQorICBUaGUgcmVwb3J0ZWQgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5IGNhbiBiZSBpbmFjY3VyYXRlIGlmDQorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucw0KKyAgKG5vcm1hbGx5IHNicmspIG91dHNpZGUgb2YgbWFsbG9jLg0KKw0KKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuDQorICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOw0KKw0KKy8qDQorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7DQorDQorICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgeW91IGNhbiBhY3R1YWxseSB1c2UgaW4NCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaA0KKyAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuDQorICBZb3UgY2FuIHVzZSB0aGlzIG1hbnkgYnl0ZXMgd2l0aG91dCB3b3JyeWluZyBhYm91dA0KKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0DQorICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbg0KKyAgZGVidWdnaW5nIGFuZCBhc3NlcnRpb25zLCBmb3IgZXhhbXBsZToNCisNCisgIHAgPSBtYWxsb2Mobik7DQorICBhc3NlcnQobWFsbG9jX3VzYWJsZV9zaXplKHApID49IDI1Nik7DQorKi8NCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCAqKTsNCisNCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovDQorDQorI2lmIE1TUEFDRVMNCisNCisvKg0KKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudA0KKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLg0KKyovDQordHlwZWRlZiB2b2lkICptc3BhY2U7DQorDQorLyoNCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQ0KKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdA0KKyAgcmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHN5c3RlbSBtZW1vcnkgYXZhaWxhYmxlIHRvIGNyZWF0ZSB0aGUNCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlDQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3Jvdw0KKyAgZHluYW1pY2FsbHkgYXMgbmVlZGVkIHRvIHNlcnZpY2UgbXNwYWNlX21hbGxvYyByZXF1ZXN0cy4gIFlvdSBjYW4NCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5DQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5DQorICBzZXR0aW5nIHdpdGggbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB2YWx1ZSkuDQorKi8NCitETE1BTExPQ19FWFBPUlQgbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsNCisNCisvKg0KKyAgZGVzdHJveV9tc3BhY2UgZGVzdHJveXMgdGhlIGdpdmVuIHNwYWNlLCBhbmQgYXR0ZW1wdHMgdG8gcmV0dXJuIGFsbA0KKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mDQorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5DQorICB1c2VkIGJ5IHRoZSBzcGFjZSBiZWNvbWUgdW5kZWZpbmVkLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKTsNCisNCisvKg0KKyAgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgdXNlcyB0aGUgbWVtb3J5IHN1cHBsaWVkIGFzIHRoZSBpbml0aWFsIGJhc2UNCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcw0KKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMNCisgIGxhcmdlLiAoT3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuKSBXaGVuIHRoaXMgaW5pdGlhbCBzcGFjZSBpcw0KKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4NCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQNCisgIHNwYWNlIChpZiBwb3NzaWJsZSkgYnV0IG5vdCB0aGUgaW5pdGlhbCBiYXNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIG1zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkICpiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOw0KKw0KKy8qDQorICBtc3BhY2VfdHJhY2tfbGFyZ2VfY2h1bmtzIGNvbnRyb2xzIHdoZXRoZXIgcmVxdWVzdHMgZm9yIGxhcmdlIGNodW5rcw0KKyAgYXJlIGFsbG9jYXRlZCBpbiB0aGVpciBvd24gdW50cmFja2VkIG1tYXBwZWQgcmVnaW9ucywgc2VwYXJhdGUgZnJvbQ0KKyAgb3RoZXJzIGluIHRoaXMgbXNwYWNlLiBCeSBkZWZhdWx0IGxhcmdlIGNodW5rcyBhcmUgbm90IHRyYWNrZWQsDQorICB3aGljaCByZWR1Y2VzIGZyYWdtZW50YXRpb24uIEhvd2V2ZXIsIHN1Y2ggY2h1bmtzIGFyZSBub3QNCisgIG5lY2Vzc2FyaWx5IHJlbGVhc2VkIHRvIHRoZSBzeXN0ZW0gdXBvbiBkZXN0cm95X21zcGFjZS4gIEVuYWJsaW5nDQorICB0cmFja2luZyBieSBzZXR0aW5nIHRvIHRydWUgbWF5IGluY3JlYXNlIGZyYWdtZW50YXRpb24sIGJ1dCBhdm9pZHMNCisgIGxlYWthZ2Ugd2hlbiByZWx5aW5nIG9uIGRlc3Ryb3lfbXNwYWNlIHRvIHJlbGVhc2UgYWxsIG1lbW9yeQ0KKyAgYWxsb2NhdGVkIHVzaW5nIHRoaXMgc3BhY2UuICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJldmlvdXMNCisgIHNldHRpbmcuDQorKi8NCitETE1BTExPQ19FWFBPUlQgaW50IG1zcGFjZV90cmFja19sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSk7DQorDQorDQorLyoNCisgIG1zcGFjZV9tYWxsb2MgYmVoYXZlcyBhcyBtYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4NCisgIHRoZSBnaXZlbiBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICptc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7DQorDQorLyoNCisgIG1zcGFjZV9mcmVlIGJlaGF2ZXMgYXMgZnJlZSwgYnV0IG9wZXJhdGVzIHdpdGhpbg0KKyAgdGhlIGdpdmVuIHNwYWNlLg0KKw0KKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfZnJlZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLg0KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQ0KKyAgYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHNwYWNlcy4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQgKm1lbSk7DQorDQorLyoNCisgIG1zcGFjZV9yZWFsbG9jIGJlaGF2ZXMgYXMgcmVhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbg0KKyAgdGhlIGdpdmVuIHNwYWNlLg0KKw0KKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfcmVhbGxvYyBpcyBub3QgYWN0dWFsbHkNCisgIG5lZWRlZC4gIHJlYWxsb2MgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9yZWFsbG9jIGJlY2F1c2UNCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcNCisgIHNwYWNlcy4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICptc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkICptZW0sIHNpemVfdCBuZXdzaXplKTsNCisNCisvKg0KKyAgbXNwYWNlX2NhbGxvYyBiZWhhdmVzIGFzIGNhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbg0KKyAgdGhlIGdpdmVuIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKm1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOw0KKw0KKy8qDQorICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbg0KKyAgdGhlIGdpdmVuIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgKm1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOw0KKw0KKy8qDQorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQNCisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuDQorKi8NCitETE1BTExPQ19FWFBPUlQgdm9pZCAqKm1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQgKmNodW5rc1tdKTsNCisNCisvKg0KKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dA0KKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCB2b2lkICoqbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkICpjaHVua3NbXSk7DQorDQorLyoNCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUNCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4NCisqLw0KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKTsNCisNCisvKg0KKyAgbXNwYWNlX21heF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQ0KKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKTsNCisNCisNCisjaWYgIU5PX01BTExJTkZPDQorLyoNCisgIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mDQorICB0aGUgZ2l2ZW4gc3BhY2UuDQorKi8NCitETE1BTExPQ19FWFBPUlQgc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKTsNCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8NCisNCisvKg0KKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbWFsbG9jX3VzYWJsZV9zaXplOw0KKyovDQorRExNQUxMT0NfRVhQT1JUIHNpemVfdCBtc3BhY2VfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCAqbWVtKTsNCisNCisvKg0KKyAgbXNwYWNlX21hbGxvY19zdGF0cyBiZWhhdmVzIGFzIG1hbGxvY19zdGF0cywgYnV0IHJlcG9ydHMNCisgIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIHZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKTsNCisNCisvKg0KKyAgbXNwYWNlX3RyaW0gYmVoYXZlcyBhcyBtYWxsb2NfdHJpbSwgYnV0DQorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLg0KKyovDQorRExNQUxMT0NfRVhQT1JUIGludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsNCisNCisvKg0KKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuDQorKi8NCitETE1BTExPQ19FWFBPUlQgaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsNCisNCisjZW5kaWYgLyogTVNQQUNFUyAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30gIC8qIGVuZCBvZiBleHRlcm4gIkMiICovDQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQorDQorLyoNCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgVG8gbWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5dGhpbmcNCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQNCisgIG9uIHRoZSBuZXh0IGxpbmUsIGFzIHdlbGwgYXMgaW4gcHJvZ3JhbXMgdGhhdCB1c2UgdGhpcyBtYWxsb2MuDQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisqLw0KKw0KKy8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlcm5hbCAjaW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZmRlZiBfTVNDX1ZFUg0KKyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQxNDYgKSAvKiBubyAidW5zaWduZWQiIHdhcm5pbmdzICovDQorI2VuZGlmIC8qIF9NU0NfVkVSICovDQorI2lmICFOT19NQUxMT0NfU1RBVFMNCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgLyogZm9yIHByaW50aW5nIGluIG1hbGxvY19zdGF0cyAqLw0KKyNlbmRpZiAvKiBOT19NQUxMT0NfU1RBVFMgKi8NCisjaWZuZGVmIExBQ0tTX0VSUk5PX0gNCisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLw0KKyNlbmRpZiAvKiBMQUNLU19FUlJOT19IICovDQorI2lmZGVmIERFQlVHDQorI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFDQorI3VuZGVmIGFzc2VydA0KKyNkZWZpbmUgYXNzZXJ0KHgpIGlmKCEoeCkpIEFCT1JUDQorI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8NCisjaW5jbHVkZSA8YXNzZXJ0Lmg+DQorI2VuZGlmIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovDQorI2Vsc2UgIC8qIERFQlVHICovDQorI2lmbmRlZiBhc3NlcnQNCisjZGVmaW5lIGFzc2VydCh4KQ0KKyNlbmRpZg0KKyNkZWZpbmUgREVCVUcgMA0KKyNlbmRpZiAvKiBERUJVRyAqLw0KKyNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoTEFDS1NfVElNRV9IKQ0KKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAvKiBmb3IgbWFnaWMgaW5pdGlhbGl6YXRpb24gKi8NCisjZW5kaWYgLyogV0lOMzIgKi8NCisjaWZuZGVmIExBQ0tTX1NURExJQl9IDQorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovDQorI2VuZGlmIC8qIExBQ0tTX1NURExJQl9IICovDQorI2lmbmRlZiBMQUNLU19TVFJJTkdfSA0KKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLw0KKyNlbmRpZiAgLyogTEFDS1NfU1RSSU5HX0ggKi8NCisjaWYgVVNFX0JVSUxUSU5fRkZTDQorI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gNCisjaW5jbHVkZSA8c3RyaW5ncy5oPiAgICAgLyogZm9yIGZmcyAqLw0KKyNlbmRpZiAvKiBMQUNLU19TVFJJTkdTX0ggKi8NCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovDQorI2lmIEhBVkVfTU1BUA0KKyNpZm5kZWYgTEFDS1NfU1lTX01NQU5fSA0KKy8qIE9uIHNvbWUgdmVyc2lvbnMgb2YgbGludXgsIG1yZW1hcCBkZWNsIGluIG1tYW4uaCBuZWVkcyBfX1VTRV9HTlUgc2V0ICovDQorI2lmIChkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChfX1VTRV9HTlUpKQ0KKyNkZWZpbmUgX19VU0VfR05VIDENCisjaW5jbHVkZSA8c3lzL21tYW4uaD4gICAgLyogZm9yIG1tYXAgKi8NCisjdW5kZWYgX19VU0VfR05VDQorI2Vsc2UNCisjaW5jbHVkZSA8c3lzL21tYW4uaD4gICAgLyogZm9yIG1tYXAgKi8NCisjZW5kaWYgLyogbGludXggKi8NCisjZW5kaWYgLyogTEFDS1NfU1lTX01NQU5fSCAqLw0KKyNpZm5kZWYgTEFDS1NfRkNOVExfSA0KKyNpbmNsdWRlIDxmY250bC5oPg0KKyNlbmRpZiAvKiBMQUNLU19GQ05UTF9IICovDQorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLw0KKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gNCisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBmb3Igc2Jyaywgc3lzY29uZiAqLw0KKyNlbHNlIC8qIExBQ0tTX1VOSVNURF9IICovDQorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykNCitleHRlcm4gdm9pZCAgICAgKnNicmsocHRyZGlmZl90KTsNCisjZW5kaWYgLyogRnJlZUJTRCBldGMgKi8NCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8NCisNCisvKiBEZWNsYXJhdGlvbnMgZm9yIGxvY2tpbmcgKi8NCisjaWYgVVNFX0xPQ0tTDQorI2lmbmRlZiBXSU4zMg0KKyNpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAgLyogc29sYXJpcyAqLw0KKyNpbmNsdWRlIDx0aHJlYWQuaD4NCisjZWxpZiAhZGVmaW5lZChMQUNLU19TQ0hFRF9IKQ0KKyNpbmNsdWRlIDxzY2hlZC5oPg0KKyNlbmRpZiAvKiBzb2xhcmlzIG9yIExBQ0tTX1NDSEVEX0ggKi8NCisjaWYgKGRlZmluZWQoVVNFX1JFQ1VSU0lWRV9MT0NLUykgJiYgVVNFX1JFQ1VSU0lWRV9MT0NLUyAhPSAwKSB8fCAhVVNFX1NQSU5fTE9DS1MNCisjaW5jbHVkZSA8cHRocmVhZC5oPg0KKyNlbmRpZiAvKiBVU0VfUkVDVVJTSVZFX0xPQ0tTIC4uLiAqLw0KKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpDQorI2lmbmRlZiBfTV9BTUQ2NA0KKy8qIFRoZXNlIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gQU1ENjQgYnVpbGRzICovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQorTE9ORyBfX2NkZWNsIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShMT05HIHZvbGF0aWxlICpEZXN0LCBMT05HIEV4Y2hhbmdlLCBMT05HIENvbXApOw0KK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZShMT05HIHZvbGF0aWxlICpUYXJnZXQsIExPTkcgVmFsdWUpOw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCisjZW5kaWYgLyogX01fQU1ENjQgKi8NCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKQ0KKyNwcmFnbWEgaW50cmluc2ljIChfSW50ZXJsb2NrZWRFeGNoYW5nZSkNCisjZGVmaW5lIGludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZQ0KKyNkZWZpbmUgaW50ZXJsb2NrZWRleGNoYW5nZSBfSW50ZXJsb2NrZWRFeGNoYW5nZQ0KKyNlbGlmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoX19HTlVDX18pDQorI2RlZmluZSBpbnRlcmxvY2tlZGNvbXBhcmVleGNoYW5nZShhLCBiLCBjKSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoYSwgYywgYikNCisjZGVmaW5lIGludGVybG9ja2VkZXhjaGFuZ2UgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0DQorI2VuZGlmIC8qIFdpbjMyICovDQorI2Vsc2UgLyogVVNFX0xPQ0tTICovDQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLw0KKw0KKyNpZm5kZWYgTE9DS19BVF9GT1JLDQorI2RlZmluZSBMT0NLX0FUX0ZPUksgMA0KKyNlbmRpZg0KKw0KKy8qIERlY2xhcmF0aW9ucyBmb3IgYml0IHNjYW5uaW5nIG9uIHdpbjMyICovDQorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwDQorI2lmbmRlZiBCaXRTY2FuRm9yd2FyZCAvKiBUcnkgdG8gYXZvaWQgcHVsbGluZyBpbiBXaW5OVC5oICovDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7DQordW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KKw0KKyNkZWZpbmUgQml0U2NhbkZvcndhcmQgX0JpdFNjYW5Gb3J3YXJkDQorI2RlZmluZSBCaXRTY2FuUmV2ZXJzZSBfQml0U2NhblJldmVyc2UNCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQpDQorI3ByYWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5SZXZlcnNlKQ0KKyNlbmRpZiAvKiBCaXRTY2FuRm9yd2FyZCAqLw0KKyNlbmRpZiAvKiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMCAqLw0KKw0KKyNpZm5kZWYgV0lOMzINCisjaWZuZGVmIG1hbGxvY19nZXRwYWdlc2l6ZQ0KKyMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNvbWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLw0KKyMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUNCisjICAgICAgZGVmaW5lIF9TQ19QQUdFX1NJWkUgX1NDX1BBR0VTSVpFDQorIyAgICBlbmRpZg0KKyMgIGVuZGlmDQorIyAgaWZkZWYgX1NDX1BBR0VfU0laRQ0KKyMgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpDQorIyAgZWxzZQ0KKyMgICAgaWYgZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpFKQ0KK2V4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsNCisjICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpDQorIyAgICBlbHNlDQorIyAgICAgIGlmZGVmIFdJTjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8NCisjICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkNCisjICAgICAgZWxzZQ0KKyMgICAgICAgIGlmbmRlZiBMQUNLU19TWVNfUEFSQU1fSA0KKyMgICAgICAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQorIyAgICAgICAgZW5kaWYNCisjICAgICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFDQorIyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUNCisjICAgICAgICBlbHNlDQorIyAgICAgICAgICBpZmRlZiBOQlBHDQorIyAgICAgICAgICAgIGlmbmRlZiBDTFNJWkUNCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcNCisjICAgICAgICAgICAgZWxzZQ0KKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5CUEcgKiBDTFNJWkUpDQorIyAgICAgICAgICAgIGVuZGlmDQorIyAgICAgICAgICBlbHNlDQorIyAgICAgICAgICAgIGlmZGVmIE5CUEMNCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMNCisjICAgICAgICAgICAgZWxzZQ0KKyMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpFDQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFDQorIyAgICAgICAgICAgICAgZWxzZSAvKiBqdXN0IGd1ZXNzICovDQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICgoc2l6ZV90KTQwOTZVKQ0KKyMgICAgICAgICAgICAgIGVuZGlmDQorIyAgICAgICAgICAgIGVuZGlmDQorIyAgICAgICAgICBlbmRpZg0KKyMgICAgICAgIGVuZGlmDQorIyAgICAgIGVuZGlmDQorIyAgICBlbmRpZg0KKyMgIGVuZGlmDQorI2VuZGlmDQorI2VuZGlmDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogVGhlIGJ5dGUgYW5kIGJpdCBzaXplIG9mIGEgc2l6ZV90ICovDQorI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkNCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpDQorDQorLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8NCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYXRmb3JtcyAqLw0KKyNkZWZpbmUgU0laRV9UX1pFUk8gICAgICAgICAoKHNpemVfdCkwKQ0KKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQ0KKyNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQ0KKyNkZWZpbmUgU0laRV9UX0ZPVVIgICAgICAgICAoKHNpemVfdCk0KQ0KKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpDQorI2RlZmluZSBGT1VSX1NJWkVfVF9TSVpFUyAgIChTSVpFX1RfU0laRTw8MikNCisjZGVmaW5lIFNJWF9TSVpFX1RfU0laRVMgICAgKEZPVVJfU0laRV9UX1NJWkVTK1RXT19TSVpFX1RfU0laRVMpDQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpDQorDQorLyogVGhlIGJpdCBtYXNrIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gTUFMTE9DX0FMSUdOTUVOVCAqLw0KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpDQorDQorLyogVHJ1ZSBpZiBhZGRyZXNzIGEgaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50ICovDQorI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkNCisNCisvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG9mZnNldCBhbiBhZGRyZXNzIHRvIGFsaWduIGl0ICovDQorI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcDQorICgoKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk/IDAgOlwNCisgICgoTUFMTE9DX0FMSUdOTUVOVCAtICgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spKSAmIENIVU5LX0FMSUdOX01BU0spKQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1NQVAgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgICBJZiBIQVZFX01PUkVDT1JFIG9yIEhBVkVfTU1BUCBhcmUgZmFsc2UsIHdlIGp1c3QgZGVmaW5lIGNhbGxzIGFuZA0KKyAgIGNoZWNrcyB0byBmYWlsIHNvIGNvbXBpbGVyIG9wdGltaXplciBjYW4gZGVsZXRlIGNvZGUgcmF0aGVyIHRoYW4NCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4NCisqLw0KKw0KKw0KKy8qIE1PUkVDT1JFIGFuZCBNTUFQIG11c3QgcmV0dXJuIE1GQUlMIG9uIGZhaWx1cmUgKi8NCisjZGVmaW5lIE1GQUlMICAgICAgICAgICAgICAgICgodm9pZCopKE1BWF9TSVpFX1QpKQ0KKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLw0KKw0KKyNpZiBIQVZFX01NQVANCisNCisjaWZuZGVmIFdJTjMyDQorI2RlZmluZSBNVU5NQVBfREVGQVVMVChhLCBzKSAgbXVubWFwKChhKSwgKHMpKQ0KKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQ0KKyNpZiAhZGVmaW5lZChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkKE1BUF9BTk9OKQ0KKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAgICAgICAgTUFQX0FOT04NCisjZW5kaWYgLyogTUFQX0FOT04gKi8NCisjaWZkZWYgTUFQX0FOT05ZTU9VUw0KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMpDQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApDQorI2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLw0KKy8qDQorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZw0KKyAgIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4NCisqLw0KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQ0KK3N0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsgLyogQ2FjaGVkIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi96ZXJvLiAqLw0KKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICgoZGV2X3plcm9fZmQgPCAwKSA/IFwNCisgICAgICAgICAgIChkZXZfemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwNCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXA0KKyAgICAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkNCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLw0KKw0KKyNkZWZpbmUgRElSRUNUX01NQVBfREVGQVVMVChzKSBNTUFQX0RFRkFVTFQocykNCisNCisjZWxzZSAvKiBXSU4zMiAqLw0KKw0KKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLw0KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkICp3aW4zMm1tYXAoc2l6ZV90IHNpemUpDQorew0KKyAgICB2b2lkICpwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkUgfCBNRU1fQ09NTUlULCBQQUdFX1JFQURXUklURSk7DQorICAgIHJldHVybiAocHRyICE9IDApID8gcHRyIDogTUZBSUw7DQorfQ0KKw0KKy8qIEZvciBkaXJlY3QgTU1BUCwgdXNlIE1FTV9UT1BfRE9XTiB0byBtaW5pbWl6ZSBpbnRlcmZlcmVuY2UgKi8NCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCAqd2luMzJkaXJlY3RfbW1hcChzaXplX3Qgc2l6ZSkNCit7DQorICAgIHZvaWQgKnB0ciA9IFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRSB8IE1FTV9DT01NSVQgfCBNRU1fVE9QX0RPV04sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1JFQURXUklURSk7DQorICAgIHJldHVybiAocHRyICE9IDApID8gcHRyIDogTUZBSUw7DQorfQ0KKw0KKy8qIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgcmVsZWFzaW5nIGNvYWxlc2VkIHNlZ21lbnRzICovDQorc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMm11bm1hcCh2b2lkICpwdHIsIHNpemVfdCBzaXplKQ0KK3sNCisgICAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1pbmZvOw0KKyAgICBjaGFyICpjcHRyID0gKGNoYXIgKilwdHI7DQorDQorICAgIHdoaWxlIChzaXplKQ0KKyAgICB7DQorICAgICAgICBpZiAoVmlydHVhbFF1ZXJ5KGNwdHIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobWluZm8uQmFzZUFkZHJlc3MgIT0gY3B0ciB8fCBtaW5mby5BbGxvY2F0aW9uQmFzZSAhPSBjcHRyIHx8DQorICAgICAgICAgICAgbWluZm8uU3RhdGUgIT0gTUVNX0NPTU1JVCB8fCBtaW5mby5SZWdpb25TaXplID4gc2l6ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoVmlydHVhbEZyZWUoY3B0ciwgMCwgTUVNX1JFTEVBU0UpID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY3B0ciArPSBtaW5mby5SZWdpb25TaXplOw0KKyAgICAgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAgICAgICAgICAgICB3aW4zMm1tYXAocykNCisjZGVmaW5lIE1VTk1BUF9ERUZBVUxUKGEsIHMpICAgICAgICB3aW4zMm11bm1hcCgoYSksIChzKSkNCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgICAgICB3aW4zMmRpcmVjdF9tbWFwKHMpDQorI2VuZGlmIC8qIFdJTjMyICovDQorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLw0KKw0KKyNpZiBIQVZFX01SRU1BUA0KKyNpZm5kZWYgV0lOMzINCisjZGVmaW5lIE1SRU1BUF9ERUZBVUxUKGFkZHIsIG9zeiwgbnN6LCBtdikgbXJlbWFwKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQ0KKyNlbmRpZiAvKiBXSU4zMiAqLw0KKyNlbmRpZiAvKiBIQVZFX01SRU1BUCAqLw0KKw0KKy8qKg0KKyAqIERlZmluZSBDQUxMX01PUkVDT1JFDQorICovDQorI2lmIEhBVkVfTU9SRUNPUkUNCisjaWZkZWYgTU9SRUNPUkUNCisjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkUoUykNCisjZWxzZSAgLyogTU9SRUNPUkUgKi8NCisjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkVfREVGQVVMVChTKQ0KKyNlbmRpZiAvKiBNT1JFQ09SRSAqLw0KKyNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovDQorI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICAgICBNRkFJTA0KKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovDQorDQorLyoqDQorICogRGVmaW5lIENBTExfTU1BUC9DQUxMX01VTk1BUC9DQUxMX0RJUkVDVF9NTUFQDQorICovDQorI2lmIEhBVkVfTU1BUA0KKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9PTkUpDQorDQorI2lmZGVmIE1NQVANCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUChzKQ0KKyNlbHNlIC8qIE1NQVAgKi8NCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUF9ERUZBVUxUKHMpDQorI2VuZGlmIC8qIE1NQVAgKi8NCisjaWZkZWYgTVVOTUFQDQorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgIE1VTk1BUCgoYSksIChzKSkNCisjZWxzZSAvKiBNVU5NQVAgKi8NCisjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgTVVOTUFQX0RFRkFVTFQoKGEpLCAocykpDQorI2VuZGlmIC8qIE1VTk1BUCAqLw0KKyNpZmRlZiBESVJFQ1RfTU1BUA0KKyNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUChzKQ0KKyNlbHNlIC8qIERJUkVDVF9NTUFQICovDQorI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpIERJUkVDVF9NTUFQX0RFRkFVTFQocykNCisjZW5kaWYgLyogRElSRUNUX01NQVAgKi8NCisjZWxzZSAgLyogSEFWRV9NTUFQICovDQorI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX1pFUk8pDQorDQorI2RlZmluZSBNTUFQKHMpICAgICAgICAgICAgICAgICBNRkFJTA0KKyNkZWZpbmUgTVVOTUFQKGEsIHMpICAgICAgICAgICAgKC0xKQ0KKyNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgICAgTUZBSUwNCisjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgICAgIERJUkVDVF9NTUFQKHMpDQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICAgICBNTUFQKHMpDQorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAgICBNVU5NQVAoKGEpLCAocykpDQorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLw0KKw0KKy8qKg0KKyAqIERlZmluZSBDQUxMX01SRU1BUA0KKyAqLw0KKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVANCisjaWZkZWYgTVJFTUFQDQorI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkNCisjZWxzZSAvKiBNUkVNQVAgKi8NCisjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTVJFTUFQX0RFRkFVTFQoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpDQorI2VuZGlmIC8qIE1SRU1BUCAqLw0KKyNlbHNlICAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8NCisjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgICAgIE1GQUlMDQorI2VuZGlmIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLw0KKw0KKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpbmd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLw0KKyNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkNCisNCisvKiBzZWdtZW50IGJpdCBzZXQgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgKi8NCisjZGVmaW5lIEVYVEVSTl9CSVQgICAgICAgICAgICAoOFUpDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvY2sgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgV2hlbiBsb2NrcyBhcmUgZGVmaW5lZCwgdGhlcmUgaXMgb25lIGdsb2JhbCBsb2NrLCBwbHVzDQorICBvbmUgcGVyLW1zcGFjZSBsb2NrLg0KKw0KKyAgVGhlIGdsb2JhbCBsb2NrX2Vuc3VyZXMgdGhhdCBtcGFyYW1zLm1hZ2ljIGFuZCBvdGhlciB1bmlxdWUNCisgIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIEl0IGFsc28gcHJvdGVjdHMNCisgIHNlcXVlbmNlcyBvZiBjYWxscyB0byBNT1JFQ09SRS4gIEluIG1hbnkgY2FzZXMgc3lzX2FsbG9jIHJlcXVpcmVzDQorICB0d28gY2FsbHMsIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyDQorICB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3QgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFDQorICBieSBvdGhlciB0aHJlYWRzIG5vdCB1c2luZyB0aGlzIGxvY2ssIHNvIHRoZXJlIGlzIHN0aWxsIGNvZGUgdG8NCisgIGNvcGUgdGhlIGJlc3Qgd2UgY2FuIG9uIGludGVyZmVyZW5jZS4NCisNCisgIFBlci1tc3BhY2UgbG9ja3Mgc3Vycm91bmQgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBldGMuDQorICBCeSBkZWZhdWx0LCBsb2NrcyBhcmUgc2ltcGxlIG5vbi1yZWVudHJhbnQgbXV0ZXhlcy4NCisNCisgIEJlY2F1c2UgbG9jay1wcm90ZWN0ZWQgcmVnaW9ucyBnZW5lcmFsbHkgaGF2ZSBib3VuZGVkIHRpbWVzLCBpdCBpcw0KKyAgT0sgdG8gdXNlIHRoZSBzdXBwbGllZCBzaW1wbGUgc3BpbmxvY2tzLiBTcGlubG9ja3MgYXJlIGxpa2VseSB0bw0KKyAgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgbGlnaHRseSBjb250ZW5kZWQgYXBwbGljYXRpb25zLCBidXQgd29yc2VuDQorICBwZXJmb3JtYW5jZSB1bmRlciBoZWF2eSBjb250ZW50aW9uLg0KKw0KKyAgSWYgVVNFX0xPQ0tTIGlzID4gMSwgdGhlIGRlZmluaXRpb25zIG9mIGxvY2sgcm91dGluZXMgaGVyZSBhcmUNCisgIGJ5cGFzc2VkLCBpbiB3aGljaCBjYXNlIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lIHRoZSB0eXBlIE1MT0NLX1QsDQorICBhbmQgYXQgbGVhc3QgSU5JVElBTF9MT0NLLCBERVNUUk9ZX0xPQ0ssIEFDUVVJUkVfTE9DSywgUkVMRUFTRV9MT0NLDQorICBhbmQgVFJZX0xPQ0suICBZb3UgbXVzdCBhbHNvIGRlY2xhcmUgYQ0KKyAgICBzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyBpbml0aWFsaXphdGlvbiB2YWx1ZXMgfTsuDQorDQorKi8NCisNCisjaWYgIVVTRV9MT0NLUw0KKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDBVKQ0KKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgICAgICAgKDApDQorI2RlZmluZSBERVNUUk9ZX0xPQ0sobCkgICAgICAgICAgICAoMCkNCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkNCisjZGVmaW5lIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCkNCisNCisjZWxzZQ0KKyNpZiBVU0VfTE9DS1MgPiAxDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVzZXItZGVmaW5lZCBsb2NrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKiBEZWZpbmUgeW91ciBvd24gbG9jayBpbXBsZW1lbnRhdGlvbiBoZXJlICovDQorLyogI2RlZmluZSBJTklUSUFMX0xPQ0sobGspICAuLi4gKi8NCisvKiAjZGVmaW5lIERFU1RST1lfTE9DSyhsaykgIC4uLiAqLw0KKy8qICNkZWZpbmUgQUNRVUlSRV9MT0NLKGxrKSAgLi4uICovDQorLyogI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAuLi4gKi8NCisvKiAjZGVmaW5lIFRSWV9MT0NLKGxrKSAuLi4gKi8NCisvKiBzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gLi4uICovDQorDQorI2VsaWYgVVNFX1NQSU5fTE9DS1MNCisNCisvKiBGaXJzdCwgZGVmaW5lIENBU19MT0NLIGFuZCBDTEVBUl9MT0NLIG9uIGludHMgKi8NCisvKiBOb3RlIENBU19MT0NLIGRlZmluZWQgdG8gcmV0dXJuIDAgb24gc3VjY2VzcyAqLw0KKw0KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpDQorI2RlZmluZSBDQVNfTE9DSyhzbCkgICAgIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChzbCwgMSkNCisjZGVmaW5lIENMRUFSX0xPQ0soc2wpICAgX19zeW5jX2xvY2tfcmVsZWFzZShzbCkNCisNCisjZWxpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpKQ0KKy8qIEN1c3RvbSBzcGluIGxvY2tzIGZvciBvbGRlciBnY2Mgb24geDg2ICovDQorc3RhdGljIEZPUkNFSU5MSU5FIGludCB4ODZfY2FzX2xvY2soaW50ICpzbCkNCit7DQorICAgIGludCByZXQ7DQorICAgIGludCB2YWwgPSAxOw0KKyAgICBpbnQgY21wID0gMDsNCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICUxLCAlMiINCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiKHJldCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIodmFsKSwgIm0iKCooc2wpKSwgIjAiKGNtcCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7DQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIHg4Nl9jbGVhcl9sb2NrKGludCAqc2wpDQorew0KKyAgICBhc3NlcnQoKnNsICE9IDApOw0KKyAgICBpbnQgcHJldiA9IDA7DQorICAgIGludCByZXQ7DQorICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyB4Y2hnbCAlMCwgJTEiDQorICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIihyZXQpDQorICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iKCooc2wpKSwgIjAiKHByZXYpDQorICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOw0KK30NCisNCisjZGVmaW5lIENBU19MT0NLKHNsKSAgICAgeDg2X2Nhc19sb2NrKHNsKQ0KKyNkZWZpbmUgQ0xFQVJfTE9DSyhzbCkgICB4ODZfY2xlYXJfbG9jayhzbCkNCisNCisjZWxzZSAvKiBXaW4zMiBNU0MgKi8NCisjZGVmaW5lIENBU19MT0NLKHNsKSAgICAgaW50ZXJsb2NrZWRleGNoYW5nZShzbCwgKExPTkcpMSkNCisjZGVmaW5lIENMRUFSX0xPQ0soc2wpICAgaW50ZXJsb2NrZWRleGNoYW5nZSAoc2wsIChMT05HKTApDQorDQorI2VuZGlmIC8qIC4uLiBnY2Mgc3BpbnMgbG9ja3MgLi4uICovDQorDQorLyogSG93IHRvIHlpZWxkIGZvciBhIHNwaW4gbG9jayAqLw0KKyNkZWZpbmUgU1BJTlNfUEVSX1lJRUxEICAgICAgIDYzDQorI2lmIGRlZmluZWQoX01TQ19WRVIpDQorI2RlZmluZSBTTEVFUF9FWF9EVVJBVElPTiAgICAgNTAgLyogZGVsYXkgZm9yIHlpZWxkL3NsZWVwICovDQorI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQgIFNsZWVwRXgoU0xFRVBfRVhfRFVSQVRJT04sIEZBTFNFKQ0KKyNlbGlmIGRlZmluZWQgKF9fU1ZSNCkgJiYgZGVmaW5lZCAoX19zdW4pIC8qIHNvbGFyaXMgKi8NCisjZGVmaW5lIFNQSU5fTE9DS19ZSUVMRCAgIHRocl95aWVsZCgpOw0KKyNlbGlmICFkZWZpbmVkKExBQ0tTX1NDSEVEX0gpDQorI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQgICBzY2hlZF95aWVsZCgpOw0KKyNlbHNlDQorI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQNCisjZW5kaWYgLyogLi4uIHlpZWxkIC4uLiAqLw0KKw0KKyNpZiAhZGVmaW5lZChVU0VfUkVDVVJTSVZFX0xPQ0tTKSB8fCBVU0VfUkVDVVJTSVZFX0xPQ0tTID09IDANCisvKiBQbGFpbiBzcGluIGxvY2tzIHVzZSBzaW5nbGUgd29yZCAoZW1iZWRkZWQgaW4gbWFsbG9jX3N0YXRlcykgKi8NCitzdGF0aWMgaW50IHNwaW5fYWNxdWlyZV9sb2NrKGludCAqc2wpDQorew0KKyAgICBpbnQgc3BpbnMgPSAwOw0KKw0KKyAgICB3aGlsZSAoKih2b2xhdGlsZSBpbnQgKilzbCAhPSAwIHx8IENBU19MT0NLKHNsKSkNCisgICAgew0KKyAgICAgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFNQSU5fTE9DS19ZSUVMRDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgaW50DQorI2RlZmluZSBUUllfTE9DSyhzbCkgICAgICAgICAgIUNBU19MT0NLKHNsKQ0KKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIENMRUFSX0xPQ0soc2wpDQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgKENBU19MT0NLKHNsKT8gc3Bpbl9hY3F1aXJlX2xvY2soc2wpIDogMCkNCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAoKnNsID0gMCkNCisjZGVmaW5lIERFU1RST1lfTE9DSyhzbCkgICAgICAoMCkNCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gMDsNCisNCisjZWxzZSAvKiBVU0VfUkVDVVJTSVZFX0xPQ0tTICovDQorLyogdHlwZXMgZm9yIGxvY2sgb3duZXJzICovDQorI2lmZGVmIFdJTjMyDQorI2RlZmluZSBUSFJFQURfSURfVCAgICAgICAgICAgRFdPUkQNCisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBHZXRDdXJyZW50VGhyZWFkSWQoKQ0KKyNkZWZpbmUgRVFfT1dORVIoWCxZKSAgICAgICAgICgoWCkgPT0gKFkpKQ0KKyNlbHNlDQorLyoNCisgIE5vdGU6IHRoZSBmb2xsb3dpbmcgYXNzdW1lIHRoYXQgcHRocmVhZF90IGlzIGEgdHlwZSB0aGF0IGNhbiBiZQ0KKyAgaW5pdGlhbGl6ZWQgdG8gKGNhc3RlZCkgemVyby4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHlvdSB3aWxsIG5lZWQgdG8NCisgIHNvbWVob3cgcmVkZWZpbmUgdGhlc2Ugb3Igbm90IHVzZSBzcGluIGxvY2tzLg0KKyovDQorI2RlZmluZSBUSFJFQURfSURfVCAgICAgICAgICAgcHRocmVhZF90DQorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgcHRocmVhZF9zZWxmKCkNCisjZGVmaW5lIEVRX09XTkVSKFgsWSkgICAgICAgICBwdGhyZWFkX2VxdWFsKFgsIFkpDQorI2VuZGlmDQorDQorc3RydWN0IG1hbGxvY19yZWN1cnNpdmVfbG9jaw0KK3sNCisgICAgaW50IHNsOw0KKyAgICB1bnNpZ25lZCBpbnQgYzsNCisgICAgVEhSRUFEX0lEX1QgdGhyZWFkaWQ7DQorfTsNCisNCisjZGVmaW5lIE1MT0NLX1QgIHN0cnVjdCBtYWxsb2NfcmVjdXJzaXZlX2xvY2sNCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAoVEhSRUFEX0lEX1QpMH07DQorDQorc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgcmVjdXJzaXZlX3JlbGVhc2VfbG9jayhNTE9DS19UICpsaykNCit7DQorICAgIGFzc2VydChsay0+c2wgIT0gMCk7DQorDQorICAgIGlmICgtLWxrLT5jID09IDApDQorICAgIHsNCisgICAgICAgIENMRUFSX0xPQ0soJmxrLT5zbCk7DQorICAgIH0NCit9DQorDQorc3RhdGljIEZPUkNFSU5MSU5FIGludCByZWN1cnNpdmVfYWNxdWlyZV9sb2NrKE1MT0NLX1QgKmxrKQ0KK3sNCisgICAgVEhSRUFEX0lEX1QgbXl0aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOw0KKyAgICBpbnQgc3BpbnMgPSAwOw0KKw0KKyAgICBmb3IgKDs7KQ0KKyAgICB7DQorICAgICAgICBpZiAoKigodm9sYXRpbGUgaW50ICopKCZsay0+c2wpKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICghQ0FTX0xPQ0soJmxrLT5zbCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBsay0+dGhyZWFkaWQgPSBteXRocmVhZGlkOw0KKyAgICAgICAgICAgICAgICBsay0+YyA9IDE7DQorICAgICAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKEVRX09XTkVSKGxrLT50aHJlYWRpZCwgbXl0aHJlYWRpZCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgKytsay0+YzsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICgoKytzcGlucyAmIFNQSU5TX1BFUl9ZSUVMRCkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBTUElOX0xPQ0tfWUlFTEQ7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorc3RhdGljIEZPUkNFSU5MSU5FIGludCByZWN1cnNpdmVfdHJ5X2xvY2soTUxPQ0tfVCAqbGspDQorew0KKyAgICBUSFJFQURfSURfVCBteXRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7DQorDQorICAgIGlmICgqKCh2b2xhdGlsZSBpbnQgKikoJmxrLT5zbCkpID09IDApDQorICAgIHsNCisgICAgICAgIGlmICghQ0FTX0xPQ0soJmxrLT5zbCkpDQorICAgICAgICB7DQorICAgICAgICAgICAgbGstPnRocmVhZGlkID0gbXl0aHJlYWRpZDsNCisgICAgICAgICAgICBsay0+YyA9IDE7DQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZSBpZiAoRVFfT1dORVIobGstPnRocmVhZGlkLCBteXRocmVhZGlkKSkNCisgICAgew0KKyAgICAgICAgKytsay0+YzsNCisgICAgICAgIHJldHVybiAxOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhsaykgICAgICByZWN1cnNpdmVfcmVsZWFzZV9sb2NrKGxrKQ0KKyNkZWZpbmUgVFJZX0xPQ0sobGspICAgICAgICAgIHJlY3Vyc2l2ZV90cnlfbG9jayhsaykNCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsaykgICAgICByZWN1cnNpdmVfYWNxdWlyZV9sb2NrKGxrKQ0KKyNkZWZpbmUgSU5JVElBTF9MT0NLKGxrKSAgICAgICgobGspLT50aHJlYWRpZCA9IChUSFJFQURfSURfVCkwLCAobGspLT5zbCA9IDAsIChsayktPmMgPSAwKQ0KKyNkZWZpbmUgREVTVFJPWV9MT0NLKGxrKSAgICAgICgwKQ0KKyNlbmRpZiAvKiBVU0VfUkVDVVJTSVZFX0xPQ0tTICovDQorDQorI2VsaWYgZGVmaW5lZChXSU4zMikgLyogV2luMzIgY3JpdGljYWwgc2VjdGlvbnMgKi8NCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBDUklUSUNBTF9TRUNUSU9ODQorI2RlZmluZSBBQ1FVSVJFX0xPQ0sobGspICAgICAgKEVudGVyQ3JpdGljYWxTZWN0aW9uKGxrKSwgMCkNCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhsaykgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbihsaykNCisjZGVmaW5lIFRSWV9MT0NLKGxrKSAgICAgICAgICBUcnlFbnRlckNyaXRpY2FsU2VjdGlvbihsaykNCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsaykgICAgICAoIUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb25BbmRTcGluQ291bnQoKGxrKSwgMHg4MDAwMDAwMHw0MDAwKSkNCisjZGVmaW5lIERFU1RST1lfTE9DSyhsaykgICAgICAoRGVsZXRlQ3JpdGljYWxTZWN0aW9uKGxrKSwgMCkNCisjZGVmaW5lIE5FRURfR0xPQkFMX0xPQ0tfSU5JVA0KKw0KK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXg7DQorc3RhdGljIHZvbGF0aWxlIExPTkcgbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7DQorDQorLyogVXNlIHNwaW4gbG9vcCB0byBpbml0aWFsaXplIGdsb2JhbCBsb2NrICovDQorc3RhdGljIHZvaWQgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCkNCit7DQorICAgIGZvciAoOzspDQorICAgIHsNCisgICAgICAgIGxvbmcgc3RhdCA9IG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzOw0KKw0KKyAgICAgICAgaWYgKHN0YXQgPiAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIHRyYW5zaXRpb24gdG8gPCAwIHdoaWxlIGluaXRpYWxpemluZywgdGhlbiB0byA+IDApICovDQorICAgICAgICBpZiAoc3RhdCA9PSAwICYmDQorICAgICAgICAgICAgaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLCAoTE9ORykgLSAxLCAoTE9ORykwKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJm1hbGxvY19nbG9iYWxfbXV0ZXgpOw0KKyAgICAgICAgICAgIGludGVybG9ja2VkZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLCAoTE9ORykxKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgICAgICBTbGVlcEV4KDAsIEZBTFNFKTsNCisgICAgfQ0KK30NCisNCisjZWxzZSAvKiBwdGhyZWFkcy1iYXNlZCBsb2NrcyAqLw0KKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdA0KKyNkZWZpbmUgQUNRVUlSRV9MT0NLKGxrKSAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhsaykNCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhsaykgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhsaykNCisjZGVmaW5lIFRSWV9MT0NLKGxrKSAgICAgICAgICAoIXB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhsaykpDQorI2RlZmluZSBJTklUSUFMX0xPQ0sobGspICAgICAgcHRocmVhZF9pbml0X2xvY2sobGspDQorI2RlZmluZSBERVNUUk9ZX0xPQ0sobGspICAgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KGxrKQ0KKw0KKyNpZiBkZWZpbmVkKFVTRV9SRUNVUlNJVkVfTE9DS1MpICYmIFVTRV9SRUNVUlNJVkVfTE9DS1MgIT0gMCAmJiBkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSkNCisvKiBDb3BlIHdpdGggb2xkLXN0eWxlIGxpbnV4IHJlY3Vyc2l2ZSBsb2NrIGluaXRpYWxpemF0aW9uIGJ5IGFkZGluZyAqLw0KKy8qIHNraXBwZWQgaW50ZXJuYWwgZGVjbGFyYXRpb24gZnJvbSBwdGhyZWFkLmggKi8NCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAgX19QKChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fa2luZCkpOw0KKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlANCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoeCx5KSBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKHgseSkNCisjZW5kaWYgLyogVVNFX1JFQ1VSU0lWRV9MT0NLUyAuLi4gKi8NCisNCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsNCisNCitzdGF0aWMgaW50IHB0aHJlYWRfaW5pdF9sb2NrKE1MT0NLX1QgKmxrKQ0KK3sNCisgICAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyOw0KKw0KKyAgICBpZiAocHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cikpIHsgcmV0dXJuIDE7IH0NCisNCisjaWYgZGVmaW5lZChVU0VfUkVDVVJTSVZFX0xPQ0tTKSAmJiBVU0VfUkVDVVJTSVZFX0xPQ0tTICE9IDANCisNCisgICAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKSkgeyByZXR1cm4gMTsgfQ0KKw0KKyNlbmRpZg0KKw0KKyAgICBpZiAocHRocmVhZF9tdXRleF9pbml0KGxrLCAmYXR0cikpIHsgcmV0dXJuIDE7IH0NCisNCisgICAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpKSB7IHJldHVybiAxOyB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisjZW5kaWYgLyogLi4uIGxvY2sgdHlwZXMgLi4uICovDQorDQorLyogQ29tbW9uIGNvZGUgZm9yIGFsbCBsb2NrIHR5cGVzICovDQorI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMlUpDQorDQorI2lmbmRlZiBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSw0KKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgQUNRVUlSRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsNCisjZW5kaWYNCisNCisjaWZuZGVmIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLDQorI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpICBSRUxFQVNFX0xPQ0soJm1hbGxvY19nbG9iYWxfbXV0ZXgpOw0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ2h1bmsgcmVwcmVzZW50YXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICAoVGhlIGZvbGxvd2luZyBpbmNsdWRlcyBsaWdodGx5IGVkaXRlZCBleHBsYW5hdGlvbnMgYnkgQ29saW4gUGx1bWIuKQ0KKw0KKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kDQorICBuZWNlc3NhcnkpLiAgSXQgZGVjbGFyZXMgYSAidmlldyIgaW50byBtZW1vcnkgYWxsb3dpbmcgYWNjZXNzIHRvDQorICBuZWNlc3NhcnkgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2UuDQorDQorICBDaHVua3Mgb2YgbWVtb3J5IGFyZSBtYWludGFpbmVkIHVzaW5nIGEgYGJvdW5kYXJ5IHRhZycgbWV0aG9kIGFzDQorICBvcmlnaW5hbGx5IGRlc2NyaWJlZCBieSBLbnV0aC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwgV2lsc29uDQorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaA0KKyAgdGVjaG5pcXVlcy4pICBTaXplcyBvZiBmcmVlIGNodW5rcyBhcmUgc3RvcmVkIGJvdGggaW4gdGhlIGZyb250IG9mDQorICBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcyBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQNCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cw0KKyAgcmVwcmVzZW50aW5nIHdoZXRoZXIgY2h1bmtzIGFyZSBmcmVlIG9yIGluIHVzZS4NCisNCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bw0KKyAgc2hvdyB0aGF0IHRoZSBzdGF0ZSBvZiBhIGNodW5rIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGV4dGVuZGluZyBmcm9tDQorICB0aGUgaGlnaCAzMSBiaXRzIG9mIHRoZSBoZWFkIGZpZWxkIG9mIGl0cyBoZWFkZXIgdGhyb3VnaCB0aGUNCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuDQorDQorICBBIGNodW5rIHRoYXQncyBpbiB1c2UgbG9va3MgbGlrZToNCisNCisgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICB8IFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIFAgPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8DQorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDF8ICstKw0KKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKw0KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsNCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOg0KKyAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzaXplX3QpIGF2YWlsYWJsZSBwYXlsb2FkIGJ5dGVzICAgICAgICAgIC0rDQorICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKw0KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwxfA0KKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobWF5IG9yIG1heSBub3QgYmUgaW4gdXNlKSAgICAgICAgICAgICAgIHwgKy0rDQorIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorDQorICAgIEFuZCBpZiBpdCdzIGZyZWUsIGl0IGxvb2tzIGxpa2UgdGhpczoNCisNCisgICBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rDQorICAgICAgICAgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfA0KKyAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8DQorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKw0KKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgfCBOZXh0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgIHwgUHJldiBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOg0KKyAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzdHJ1Y3QgY2h1bmspIHVudXNlZCBieXRlcyAgICAgICAgICAgICAgIC0rDQorICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfA0KKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkKXwgKy0rDQorIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6DQorICAgICAgICstIFVzZXIgcGF5bG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rDQorICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0rDQorICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzDQorICBhZGphY2VudCB0byBhIGZyZWUgY2h1bmsgbXVzdCBiZSBpbiB1c2UuDQorDQorICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlDQorICBwYXlsb2FkIHBvaW50ZXIpIHdlIGNhbiwgaW4gTygxKSB0aW1lLCBmaW5kIG91dCB3aGV0aGVyIHRoZSBhZGphY2VudA0KKyAgY2h1bmtzIGFyZSBmcmVlLCBhbmQgaWYgc28sIHVubGluayB0aGVtIGZyb20gdGhlIGxpc3RzIHRoYXQgdGhleQ0KKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuDQorDQorICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZGFyaWVzLCBzbyB0aGUgbWVtIHBvcnRpb24NCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZA0KKyAgdGh1cyBhdCBsZWFzdCBkb3VibGUtd29yZCBhbGlnbmVkLg0KKw0KKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUNCisgIGNodW5rIHNpemUgKHdoaWNoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIHR3byB3b3JkcyksIGlzIGFuIGluLXVzZQ0KKyAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlDQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaw0KKyAgc2l6ZSwgYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGZyb250IG9mIHRoZSBwcmV2aW91cyBjaHVuay4NCisgIFRoZSB2ZXJ5IGZpcnN0IGNodW5rIGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwgcHJldmVudGluZw0KKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yDQorICBhbnkgZ2l2ZW4gY2h1bmssIHRoZW4geW91IENBTk5PVCBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlDQorICBwcmV2aW91cyBjaHVuaywgYW5kIG1pZ2h0IGV2ZW4gZ2V0IGEgbWVtb3J5IGFkZHJlc3NpbmcgZmF1bHQgd2hlbg0KKyAgdHJ5aW5nIHRvIGRvIHNvLg0KKw0KKyAgVGhlIEMgKENJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgc2Vjb25kLWxvd2VzdCBiaXQgb2YNCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcw0KKyAgaW51c2UgKHVubGVzcyB0aGUgY2h1bmsgaXMgbW1hcHBlZCkuIFRoaXMgcmVkdW5kYW5jeSBlbmFibGVzIHVzYWdlDQorICBjaGVja3Mgd2l0aGluIGZyZWUgYW5kIHJlYWxsb2MsIGFuZCByZWR1Y2VzIGluZGlyZWN0aW9uIHdoZW4gZnJlZWluZw0KKyAgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLg0KKw0KKyAgRWFjaCBmcmVzaGx5IGFsbG9jYXRlZCBjaHVuayBtdXN0IGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBzZXQuDQorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkDQorICBhbmQgc3RpbGwgaW4tdXNlIGNodW5rLCBvciB0aGUgYmFzZSBvZiBpdHMgbWVtb3J5IGFyZW5hLiBUaGlzIGlzDQorICBlbnN1cmVkIGJ5IG1ha2luZyBhbGwgYWxsb2NhdGlvbnMgZnJvbSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkNCisgIGZvdW5kIGNodW5rLiAgRnVydGhlciwgbm8gZnJlZSBjaHVuayBwaHlzaWNhbGx5IGJvcmRlcnMgYW5vdGhlciBvbmUsDQorICBzbyBlYWNoIGZyZWUgY2h1bmsgaXMga25vd24gdG8gYmUgcHJlY2VkZWQgYW5kIGZvbGxvd2VkIGJ5IGVpdGhlcg0KKyAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4NCisNCisgIE5vdGUgdGhhdCB0aGUgYGZvb3QnIG9mIHRoZSBjdXJyZW50IGNodW5rIGlzIGFjdHVhbGx5IHJlcHJlc2VudGVkDQorICBhcyB0aGUgcHJldl9mb290IG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bw0KKyAgZGVhbCB3aXRoIGFsaWdubWVudHMgZXRjIGJ1dCBjYW4gYmUgdmVyeSBjb25mdXNpbmcgd2hlbiB0cnlpbmcNCisgIHRvIGV4dGVuZCBvciBhZGFwdCB0aGlzIGNvZGUuDQorDQorICBUaGUgZXhjZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUNCisNCisgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGlzIHRoZSB0b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sDQorICAgICAgICB0aGUgb25lIGJvcmRlcmluZyB0aGUgZW5kIG9mIGF2YWlsYWJsZSBtZW1vcnkpLiBJdCBpcyB0cmVhdGVkDQorICAgICAgICBzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmDQorICAgICAgICBubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZQ0KKyAgICAgICAgc3lzdGVtIGlmIGl0IGlzIHZlcnkgbGFyZ2UgKHNlZSBNX1RSSU1fVEhSRVNIT0xEKS4gIEluIGVmZmVjdCwNCisgICAgICAgIHRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbA0KKyAgICAgICAgZml0dGluZykgdGhhbiBhbnkgb3RoZXIgYXZhaWxhYmxlIGNodW5rLiAgVGhlIHRvcCBjaHVuaw0KKyAgICAgICAgZG9lc24ndCB1cGRhdGUgaXRzIHRyYWlsaW5nIHNpemUgZmllbGQgc2luY2UgdGhlcmUgaXMgbm8gbmV4dA0KKyAgICAgICAgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLA0KKyAgICAgICAgc3BhY2UgaXMgc3RpbGwgYWxsb2NhdGVkIGZvciBpdCAoVE9QX0ZPT1RfU0laRSkgdG8gZW5hYmxlDQorICAgICAgICBzZXBhcmF0aW9uIG9yIG1lcmdpbmcgd2hlbiBzcGFjZSBpcyBleHRlbmRlZC4NCisNCisgICAgIDMuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBiaXRzDQorICAgICAgICBjbGVhcmVkIGluIHRoZWlyIGhlYWQgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZSBhbGxvY2F0ZWQNCisgICAgICAgIG9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjYXJyeSBpdHMgb3duIHByZXZfZm9vdCBmaWVsZCwgd2hpY2ggaXMNCisgICAgICAgIGFsc28gdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGhpcyBjaHVuayBoYXMgd2l0aGluIGl0cyBtbWFwcGVkDQorICAgICAgICByZWdpb24sIHdoaWNoIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuIEVhY2ggbW1hcHBlZA0KKyAgICAgICAgY2h1bmsgaXMgdHJhaWxlZCBieSB0aGUgZmlyc3QgdHdvIGZpZWxkcyBvZiBhIGZha2UgbmV4dC1jaHVuaw0KKyAgICAgICAgZm9yIHNha2Ugb2YgdXNhZ2UgY2hlY2tzLg0KKw0KKyovDQorDQorc3RydWN0IG1hbGxvY19jaHVuaw0KK3sNCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9mb290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLw0KKyAgICBzaXplX3QgICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLw0KKyAgICBzdHJ1Y3QgbWFsbG9jX2NodW5rICpmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBvbmx5IGlmIGZyZWUuICovDQorICAgIHN0cnVjdCBtYWxsb2NfY2h1bmsgKmJrOw0KK307DQorDQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7DQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICptY2h1bmtwdHI7DQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICpzYmlucHRyOyAgLyogVGhlIHR5cGUgb2YgYmlucyBvZiBjaHVua3MgKi8NCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8NCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8NCit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGFnX3Q7ICAgICAgICAgICAvKiBUaGUgdHlwZSBvZiB2YXJpb3VzIGJpdCBmbGFnIHNldHMgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAgICAgICAoc2l6ZW9mKG1jaHVuaykpDQorDQorI2lmIEZPT1RFUlMNCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFRXT19TSVpFX1RfU0laRVMpDQorI2Vsc2UgLyogRk9PVEVSUyAqLw0KKyNkZWZpbmUgQ0hVTktfT1ZFUkhFQUQgICAgICAoU0laRV9UX1NJWkUpDQorI2VuZGlmIC8qIEZPT1RFUlMgKi8NCisNCisvKiBNTWFwcGVkIGNodW5rcyBuZWVkIGEgc2Vjb25kIHdvcmQgb2Ygb3ZlcmhlYWQgLi4uICovDQorI2RlZmluZSBNTUFQX0NIVU5LX09WRVJIRUFEIChUV09fU0laRV9UX1NJWkVTKQ0KKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLw0KKyNkZWZpbmUgTU1BUF9GT09UX1BBRCAgICAgICAoRk9VUl9TSVpFX1RfU0laRVMpDQorDQorLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8NCisjZGVmaW5lIE1JTl9DSFVOS19TSVpFXA0KKyAgKChNQ0hVTktfU0laRSArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spDQorDQorLyogY29udmVyc2lvbiBmcm9tIG1hbGxvYyBoZWFkZXJzIHRvIHVzZXIgcG9pbnRlcnMsIGFuZCBiYWNrICovDQorI2RlZmluZSBjaHVuazJtZW0ocCkgICAgICAgICgodm9pZCopKChjaGFyKikocCkgICAgICAgKyBUV09fU0laRV9UX1NJWkVTKSkNCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQ0KKy8qIGNodW5rIGFzc29jaWF0ZWQgd2l0aCBhbGlnbmVkIGFkZHJlc3MgQSAqLw0KKyNkZWZpbmUgYWxpZ25fYXNfY2h1bmsoQSkgICAobWNodW5rcHRyKSgoQSkgKyBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKEEpKSkNCisNCisvKiBCb3VuZHMgb24gcmVxdWVzdCAobm90IGNodW5rKSBzaXplcy4gKi8NCisjZGVmaW5lIE1BWF9SRVFVRVNUICAgICAgICAgKCgtTUlOX0NIVU5LX1NJWkUpIDw8IDIpDQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkNCisNCisvKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgKi8NCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXA0KKyAgICgoKHJlcSkgKyBDSFVOS19PVkVSSEVBRCArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spDQorDQorLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovDQorI2RlZmluZSByZXF1ZXN0MnNpemUocmVxKSBcDQorICAoKChyZXEpIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gaGVhZCBhbmQgZm9vdCBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgVGhlIGhlYWQgZmllbGQgb2YgYSBjaHVuayBpcyBvcidlZCB3aXRoIFBJTlVTRV9CSVQgd2hlbiBwcmV2aW91cw0KKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4NCisgIHVzZSwgdW5sZXNzIG1tYXBwZWQsIGluIHdoaWNoIGNhc2UgYm90aCBiaXRzIGFyZSBjbGVhcmVkLg0KKw0KKyAgRkxBRzRfQklUIGlzIG5vdCB1c2VkIGJ5IHRoaXMgbWFsbG9jLCBidXQgbWlnaHQgYmUgdXNlZnVsIGluIGV4dGVuc2lvbnMuDQorKi8NCisNCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpDQorI2RlZmluZSBDSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfVFdPKQ0KKyNkZWZpbmUgRkxBRzRfQklUICAgICAgICAgICAoU0laRV9UX0ZPVVIpDQorI2RlZmluZSBJTlVTRV9CSVRTICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVQpDQorI2RlZmluZSBGTEFHX0JJVFMgICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVR8RkxBRzRfQklUKQ0KKw0KKy8qIEhlYWQgdmFsdWUgZm9yIGZlbmNlcG9zdHMgKi8NCisjZGVmaW5lIEZFTkNFUE9TVF9IRUFEICAgICAgKElOVVNFX0JJVFN8U0laRV9UX1NJWkUpDQorDQorLyogZXh0cmFjdGlvbiBvZiBmaWVsZHMgZnJvbSBoZWFkIHdvcmRzICovDQorI2RlZmluZSBjaW51c2UocCkgICAgICAgICAgICgocCktPmhlYWQgJiBDSU5VU0VfQklUKQ0KKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkNCisjZGVmaW5lIGZsYWc0aW51c2UocCkgICAgICAgKChwKS0+aGVhZCAmIEZMQUc0X0JJVCkNCisjZGVmaW5lIGlzX2ludXNlKHApICAgICAgICAgKCgocCktPmhlYWQgJiBJTlVTRV9CSVRTKSAhPSBQSU5VU0VfQklUKQ0KKyNkZWZpbmUgaXNfbW1hcHBlZChwKSAgICAgICAoKChwKS0+aGVhZCAmIElOVVNFX0JJVFMpID09IDApDQorDQorI2RlZmluZSBjaHVua3NpemUocCkgICAgICAgICgocCktPmhlYWQgJiB+KEZMQUdfQklUUykpDQorDQorI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpDQorI2RlZmluZSBzZXRfZmxhZzQocCkgICAgICAgICgocCktPmhlYWQgfD0gRkxBRzRfQklUKQ0KKyNkZWZpbmUgY2xlYXJfZmxhZzQocCkgICAgICAoKHApLT5oZWFkICY9IH5GTEFHNF9CSVQpDQorDQorLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLw0KKyNkZWZpbmUgY2h1bmtfcGx1c19vZmZzZXQocCwgcykgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKQ0KKyNkZWZpbmUgY2h1bmtfbWludXNfb2Zmc2V0KHAsIHMpICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgLSAocykpKQ0KKw0KKy8qIFB0ciB0byBuZXh0IG9yIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8NCisjZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgKyAoKHApLT5oZWFkICYgfkZMQUdfQklUUykpKQ0KKyNkZWZpbmUgcHJldl9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSAtICgocCktPnByZXZfZm9vdCkgKSkNCisNCisvKiBleHRyYWN0IG5leHQgY2h1bmsncyBwaW51c2UgYml0ICovDQorI2RlZmluZSBuZXh0X3BpbnVzZShwKSAgKChuZXh0X2NodW5rKHApLT5oZWFkKSAmIFBJTlVTRV9CSVQpDQorDQorLyogR2V0L3NldCBzaXplIGF0IGZvb3RlciAqLw0KKyNkZWZpbmUgZ2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QpDQorI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkNCisNCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgYW5kIGZvb3QgKi8NCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwNCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUKSwgc2V0X2Zvb3QocCwgcykpDQorDQorLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLw0KKyNkZWZpbmUgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcywgbilcDQorICAoY2xlYXJfcGludXNlKG4pLCBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcykpDQorDQorLyogR2V0IHRoZSBpbnRlcm5hbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggY2h1bmsgcCAqLw0KKyNkZWZpbmUgb3ZlcmhlYWRfZm9yKHApXA0KKyAoaXNfbW1hcHBlZChwKT8gTU1BUF9DSFVOS19PVkVSSEVBRCA6IENIVU5LX09WRVJIRUFEKQ0KKw0KKy8qIFJldHVybiB0cnVlIGlmIG1hbGxvY2VkIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhcmVkICovDQorI2lmIE1NQVBfQ0xFQVJTDQorI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoIWlzX21tYXBwZWQocCkpDQorI2Vsc2UgLyogTU1BUF9DTEVBUlMgKi8NCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICgxKQ0KKyNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3ZlcmxhaWQgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIFdoZW4gY2h1bmtzIGFyZSBub3QgaW4gdXNlLCB0aGV5IGFyZSB0cmVhdGVkIGFzIG5vZGVzIG9mIGVpdGhlcg0KKyAgbGlzdHMgb3IgdHJlZXMuDQorDQorICAiU21hbGwiICBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vaw0KKyAgbGlrZSB0aGlzOg0KKw0KKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8DQorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBieXRlcyBsb25nKSAgICAgICAgICAgICAgICAuDQorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4NCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKw0KKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2ENCisgIHRyaWVzKSBrZXllZCBvbiBjaHVua3NpemVzLiAgQmVjYXVzZSBtYWxsb2NfdHJlZV9jaHVua3MgYXJlIG9ubHkgZm9yDQorICBmcmVlIGNodW5rcyBncmVhdGVyIHRoYW4gMjU2IGJ5dGVzLCB0aGVpciBzaXplIGRvZXNuJ3QgaW1wb3NlIGFueQ0KKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOg0KKw0KKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8DQorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICAgfA0KKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBsZWZ0IGNoaWxkIChjaGlsZFswXSkgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKGNoaWxkWzFdKSAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKw0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgYmluIGluZGV4IG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLg0KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsNCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rDQorDQorICBFYWNoIHRyZWUgaG9sZGluZyB0cmVlbm9kZXMgaXMgYSB0cmVlIG9mIHVuaXF1ZSBjaHVuayBzaXplcy4gIENodW5rcw0KKyAgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgYXJyYW5nZWQgaW4gYSBjaXJjdWxhcmx5LWxpbmtlZCBsaXN0LCB3aXRoIG9ubHkNCisgIHRoZSBvbGRlc3QgY2h1bmsgKHRoZSBuZXh0IHRvIGJlIHVzZWQsIGluIG91ciBGSUZPIG9yZGVyaW5nKQ0KKyAgYWN0dWFsbHkgaW4gdGhlIHRyZWUuICAoVHJlZSBtZW1iZXJzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGEgbm9uLW51bGwNCisgIHBhcmVudCBwb2ludGVyLikgIElmIGEgY2h1bmsgd2l0aCB0aGUgc2FtZSBzaXplIGFuIGFuIGV4aXN0aW5nIG5vZGUNCisgIGlzIGluc2VydGVkLCBpdCBpcyBsaW5rZWQgb2ZmIHRoZSBleGlzdGluZyBub2RlIHVzaW5nIHBvaW50ZXJzIHRoYXQNCisgIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIGZkL2JrIHBvaW50ZXJzIG9mIHNtYWxsIGNodW5rcy4NCisNCisgIEVhY2ggdHJlZSBjb250YWlucyBhIHBvd2VyIG9mIDIgc2l6ZWQgcmFuZ2Ugb2YgY2h1bmsgc2l6ZXMgKHRoZQ0KKyAgc21hbGxlc3QgaXMgMHgxMDAgPD0geCA8IDB4MTgwKSwgd2hpY2ggaXMgaXMgZGl2aWRlZCBpbiBoYWxmIGF0IGVhY2gNCisgIHRyZWUgbGV2ZWwsIHdpdGggdGhlIGNodW5rcyBpbiB0aGUgc21hbGxlciBoYWxmIG9mIHRoZSByYW5nZSAoMHgxMDANCisgIDw9IHggPCAweDE0MCBmb3IgdGhlIHRvcCBub3NlKSBpbiB0aGUgbGVmdCBzdWJ0cmVlIGFuZCB0aGUgbGFyZ2VyDQorICBoYWxmICgweDE0MCA8PSB4IDwgMHgxODApIGluIHRoZSByaWdodCBzdWJ0cmVlLiAgVGhpcyBpcywgb2YgY291cnNlLA0KKyAgZG9uZSBieSBpbnNwZWN0aW5nIGluZGl2aWR1YWwgYml0cy4NCisNCisgIFVzaW5nIHRoZXNlIHJ1bGVzLCBlYWNoIG5vZGUncyBsZWZ0IHN1YnRyZWUgY29udGFpbnMgYWxsIHNtYWxsZXINCisgIHNpemVzIHRoYW4gaXRzIHJpZ2h0IHN1YnRyZWUuICBIb3dldmVyLCB0aGUgbm9kZSBhdCB0aGUgcm9vdCBvZiBlYWNoDQorICBzdWJ0cmVlIGhhcyBubyBwYXJ0aWN1bGFyIG9yZGVyaW5nIHJlbGF0aW9uc2hpcCB0byBlaXRoZXIuICAoVGhlDQorICBkaXZpZGluZyBsaW5lIGJldHdlZW4gdGhlIHN1YnRyZWUgc2l6ZXMgaXMgYmFzZWQgb24gdHJpZSByZWxhdGlvbi4pDQorICBJZiB3ZSByZW1vdmUgdGhlIGxhc3QgY2h1bmsgb2YgYSBnaXZlbiBzaXplIGZyb20gdGhlIGludGVyaW9yIG9mIHRoZQ0KKyAgdHJlZSwgd2UgbmVlZCB0byByZXBsYWNlIGl0IHdpdGggYSBsZWFmIG5vZGUuICBUaGUgdHJlZSBvcmRlcmluZw0KKyAgcnVsZXMgcGVybWl0IGEgbm9kZSB0byBiZSByZXBsYWNlZCBieSBhbnkgbGVhZiBiZWxvdyBpdC4NCisNCisgIFRoZSBzbWFsbGVzdCBjaHVuayBpbiBhIHRyZWUgKGEgY29tbW9uIG9wZXJhdGlvbiBpbiBhIGJlc3QtZml0DQorICBhbGxvY2F0b3IpIGNhbiBiZSBmb3VuZCBieSB3YWxraW5nIGEgcGF0aCB0byB0aGUgbGVmdG1vc3QgbGVhZiBpbg0KKyAgdGhlIHRyZWUuICBVbmxpa2UgYSB1c3VhbCBiaW5hcnkgdHJlZSwgd2hlcmUgd2UgZm9sbG93IGxlZnQgY2hpbGQNCisgIHBvaW50ZXJzIHVudGlsIHdlIHJlYWNoIGEgbnVsbCwgaGVyZSB3ZSBmb2xsb3cgdGhlIHJpZ2h0IGNoaWxkDQorICBwb2ludGVyIGFueSB0aW1lIHRoZSBsZWZ0IG9uZSBpcyBudWxsLCB1bnRpbCB3ZSByZWFjaCBhIGxlYWYgd2l0aA0KKyAgYm90aCBjaGlsZCBwb2ludGVycyBudWxsLiBUaGUgc21hbGxlc3QgY2h1bmsgaW4gdGhlIHRyZWUgd2lsbCBiZQ0KKyAgc29tZXdoZXJlIGFsb25nIHRoYXQgcGF0aC4NCisNCisgIFRoZSB3b3JzdCBjYXNlIG51bWJlciBvZiBzdGVwcyB0byBhZGQsIGZpbmQsIG9yIHJlbW92ZSBhIG5vZGUgaXMNCisgIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGRpZmZlcmVudGlhdGluZyBjaHVua3Mgd2l0aGluDQorICBiaW5zLiBVbmRlciBjdXJyZW50IGJpbiBjYWxjdWxhdGlvbnMsIHRoaXMgcmFuZ2VzIGZyb20gNiB1cCB0byAyMQ0KKyAgKGZvciAzMiBiaXQgc2l6ZXMpIG9yIHVwIHRvIDUzIChmb3IgNjQgYml0IHNpemVzKS4gVGhlIHR5cGljYWwgY2FzZQ0KKyAgaXMgb2YgY291cnNlIG11Y2ggYmV0dGVyLg0KKyovDQorDQorc3RydWN0IG1hbGxvY190cmVlX2NodW5rDQorew0KKyAgICAvKiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggbWFsbG9jX2NodW5rICovDQorICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgcHJldl9mb290Ow0KKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGhlYWQ7DQorICAgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAqZmQ7DQorICAgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAqYms7DQorDQorICAgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAqY2hpbGRbMl07DQorICAgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAqcGFyZW50Ow0KKyAgICBiaW5kZXhfdCAgICAgICAgICAgICAgICAgIGluZGV4Ow0KK307DQorDQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgIHRjaHVuazsNCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAqdGNodW5rcHRyOw0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICp0YmlucHRyOyAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIHRyZWVzICovDQorDQorLyogQSBsaXR0bGUgaGVscGVyIG1hY3JvIGZvciB0cmVlcyAqLw0KKyNkZWZpbmUgbGVmdG1vc3RfY2hpbGQodCkgKCh0KS0+Y2hpbGRbMF0gIT0gMD8gKHQpLT5jaGlsZFswXSA6ICh0KS0+Y2hpbGRbMV0pDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VnbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgRWFjaCBtYWxsb2Mgc3BhY2UgbWF5IGluY2x1ZGUgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsIGhlbGQgaW4gYQ0KKyAgbGlzdCBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUNCisgIHRvcC1tb3N0IHNwYWNlLiBTZWdtZW50cyBhbHNvIGluY2x1ZGUgZmxhZ3MgaG9sZGluZyBwcm9wZXJ0aWVzIG9mDQorICB0aGUgc3BhY2UuIExhcmdlIGNodW5rcyB0aGF0IGFyZSBkaXJlY3RseSBhbGxvY2F0ZWQgYnkgbW1hcCBhcmUgbm90DQorICBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIFRoZXkgYXJlIGluc3RlYWQgaW5kZXBlbmRlbnRseSBjcmVhdGVkIGFuZA0KKyAgZGVzdHJveWVkIHdpdGhvdXQgb3RoZXJ3aXNlIGtlZXBpbmcgdHJhY2sgb2YgdGhlbS4NCisNCisgIFNlZ21lbnQgbWFuYWdlbWVudCBtYWlubHkgY29tZXMgaW50byBwbGF5IGZvciBzcGFjZXMgYWxsb2NhdGVkIGJ5DQorICBNTUFQLiAgQW55IGNhbGwgdG8gTU1BUCBtaWdodCBvciBtaWdodCBub3QgcmV0dXJuIG1lbW9yeSB0aGF0IGlzDQorICBhZGphY2VudCB0byBhbiBleGlzdGluZyBzZWdtZW50LiAgTU9SRUNPUkUgbm9ybWFsbHkgY29udGlndW91c2x5DQorICBleHRlbmRzIHRoZSBjdXJyZW50IHNwYWNlLCBzbyB0aGlzIHNwYWNlIGlzIGFsbW9zdCBhbHdheXMgYWRqYWNlbnQsDQorICB3aGljaCBpcyBzaW1wbGVyIGFuZCBmYXN0ZXIgdG8gZGVhbCB3aXRoLiAoVGhpcyBpcyB3aHkgTU9SRUNPUkUgaXMNCisgIHVzZWQgcHJlZmVyZW50aWFsbHkgdG8gTU1BUCB3aGVuIGJvdGggYXJlIGF2YWlsYWJsZSAtLSBzZWUNCisgIHN5c19hbGxvYy4pICBXaGVuIGFsbG9jYXRpbmcgdXNpbmcgTU1BUCwgd2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUNCisgIGhpbnRpbmcgbWVjaGFuaXNtcyAoaW5jb25zaXN0ZW50bHkpIHN1cHBvcnRlZCBpbiB2YXJpb3VzDQorICBpbXBsZW1lbnRhdGlvbnMgb2YgdW5peCBtbWFwLCBvciBkaXN0aW5ndWlzaCByZXNlcnZpbmcgZnJvbQ0KKyAgY29tbWl0dGluZyBtZW1vcnkuIEluc3RlYWQsIHdlIGp1c3QgYXNrIGZvciBzcGFjZSwgYW5kIGV4cGxvaXQNCisgIGNvbnRpZ3VpdHkgd2hlbiB3ZSBnZXQgaXQuICBJdCBpcyBwcm9iYWJseSBwb3NzaWJsZSB0byBkbw0KKyAgYmV0dGVyIHRoYW4gdGhpcyBvbiBzb21lIHN5c3RlbXMsIGJ1dCBubyBnZW5lcmFsIHNjaGVtZSBzZWVtcw0KKyAgdG8gYmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIuDQorDQorICBNYW5hZ2VtZW50IGVudGFpbHMgYSBzaW1wbGVyIHZhcmlhbnQgb2YgdGhlIGNvbnNvbGlkYXRpb24gc2NoZW1lDQorICB1c2VkIGZvciBjaHVua3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24gLS0gbmV3IGFkamFjZW50IG1lbW9yeSBpcw0KKyAgbm9ybWFsbHkgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuIEhvd2V2ZXIsDQorICB0aGVyZSBhcmUgbGltaXRhdGlvbnMgY29tcGFyZWQgdG8gY2h1bmsgY29uc29saWRhdGlvbiB0aGF0IG1vc3RseQ0KKyAgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNlZ21lbnQgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5IGluZnJlcXVlbnQNCisgIChvY2N1cnJpbmcgb25seSB3aGVuIGdldHRpbmcgbWVtb3J5IGZyb20gc3lzdGVtKSBhbmQgdGhhdCB3ZQ0KKyAgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgaHVnZSBudW1iZXJzIG9mIHNlZ21lbnRzOg0KKw0KKyAgKiBTZWdtZW50cyBhcmUgbm90IGluZGV4ZWQsIHNvIHRyYXZlcnNhbCByZXF1aXJlcyBsaW5lYXIgc2NhbnMuICAoSXQNCisgICAgd291bGQgYmUgcG9zc2libGUgdG8gaW5kZXggdGhlc2UsIGJ1dCBpcyBub3Qgd29ydGggdGhlIGV4dHJhDQorICAgIG92ZXJoZWFkIGFuZCBjb21wbGV4aXR5IGZvciBtb3N0IHByb2dyYW1zIG9uIG1vc3QgcGxhdGZvcm1zLikNCisgICogTmV3IHNlZ21lbnRzIGFyZSBvbmx5IGFwcGVuZGVkIHRvIG9sZCBvbmVzIHdoZW4gaG9sZGluZyB0b3AtbW9zdA0KKyAgICBtZW1vcnk7IGlmIHRoZXkgY2Fubm90IGJlIHByZXBlbmRlZCB0byBvdGhlcnMsIHRoZXkgYXJlIGhlbGQgaW4NCisgICAgZGlmZmVyZW50IHNlZ21lbnRzLg0KKw0KKyAgRXhjZXB0IGZvciB0aGUgdG9wLW1vc3Qgc2VnbWVudCBvZiBhbiBtc3RhdGUsIGVhY2ggc2VnbWVudCByZWNvcmQNCisgIGlzIGtlcHQgYXQgdGhlIHRhaWwgb2YgaXRzIHNlZ21lbnQuIFNlZ21lbnRzIGFyZSBhZGRlZCBieSBwdXNoaW5nDQorICBzZWdtZW50IHJlY29yZHMgb250byB0aGUgbGlzdCBoZWFkZWQgYnkgJm1zdGF0ZS5zZWcgZm9yIHRoZQ0KKyAgY29udGFpbmluZyBtc3RhdGUuDQorDQorICBTZWdtZW50IGZsYWdzIGNvbnRyb2wgYWxsb2NhdGlvbi9tZXJnZS9kZWFsbG9jYXRpb24gcG9saWNpZXM6DQorICAqIElmIEVYVEVSTl9CSVQgc2V0LCB0aGVuIHdlIGRpZCBub3QgYWxsb2NhdGUgdGhpcyBzZWdtZW50LA0KKyAgICBhbmQgc28gc2hvdWxkIG5vdCB0cnkgdG8gZGVhbGxvY2F0ZSBvciBtZXJnZSB3aXRoIG90aGVycy4NCisgICAgKFRoaXMgY3VycmVudGx5IGhvbGRzIG9ubHkgZm9yIHRoZSBpbml0aWFsIHNlZ21lbnQgcGFzc2VkDQorICAgIGludG8gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UuKQ0KKyAgKiBJZiBVU0VfTU1BUF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgNCisgICAgb3RoZXIgc3Vycm91bmRpbmcgbW1hcHBlZCBzZWdtZW50cyBhbmQgdHJpbW1lZC9kZS1hbGxvY2F0ZWQNCisgICAgdXNpbmcgbXVubWFwLg0KKyAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nDQorICAgIE1PUkVDT1JFIHNvIGNhbiBiZSBtZXJnZWQgd2l0aCBzdXJyb3VuZGluZyBNT1JFQ09SRSdkIHNlZ21lbnRzDQorICAgIGFuZCBkZWFsbG9jYXRlZC90cmltbWVkIHVzaW5nIE1PUkVDT1JFIHdpdGggbmVnYXRpdmUgYXJndW1lbnRzLg0KKyovDQorDQorc3RydWN0IG1hbGxvY19zZWdtZW50DQorew0KKyAgICBjaGFyICAgICAgICAqYmFzZTsgICAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzICovDQorICAgIHNpemVfdCAgICAgICBzaXplOyAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2l6ZSAqLw0KKyAgICBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgKm5leHQ7ICAgLyogcHRyIHRvIG5leHQgc2VnbWVudCAqLw0KKyAgICBmbGFnX3QgICAgICAgc2ZsYWdzOyAgICAgICAgICAgLyogbW1hcCBhbmQgZXh0ZXJuIGZsYWcgKi8NCit9Ow0KKw0KKyNkZWZpbmUgaXNfbW1hcHBlZF9zZWdtZW50KFMpICAoKFMpLT5zZmxhZ3MgJiBVU0VfTU1BUF9CSVQpDQorI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgICgoUyktPnNmbGFncyAmIEVYVEVSTl9CSVQpDQorDQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgIG1zZWdtZW50Ow0KK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICptc2VnbWVudHB0cjsNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19zdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICAgQSBtYWxsb2Nfc3RhdGUgaG9sZHMgYWxsIG9mIHRoZSBib29ra2VlcGluZyBmb3IgYSBzcGFjZS4NCisgICBUaGUgbWFpbiBmaWVsZHMgYXJlOg0KKw0KKyAgVG9wDQorICAgIFRoZSB0b3Btb3N0IGNodW5rIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIEl0cyBzaXplIGlzDQorICAgIGNhY2hlZCBpbiB0b3BzaXplLiAgVGhlIGFjdHVhbCBzaXplIG9mIHRvcG1vc3Qgc3BhY2UgaXMNCisgICAgdG9wc2l6ZStUT1BfRk9PVF9TSVpFLCB3aGljaCBpbmNsdWRlcyBzcGFjZSByZXNlcnZlZCBmb3IgYWRkaW5nDQorICAgIGZlbmNlcG9zdHMgYW5kIHNlZ21lbnQgcmVjb3JkcyBpZiBuZWNlc3Nhcnkgd2hlbiBnZXR0aW5nIG1vcmUNCisgICAgc3BhY2UgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgYXQgd2hpY2ggdG8gYXV0b3RyaW0gdG9wIGlzDQorICAgIGNhY2hlZCBmcm9tIG1wYXJhbXMgaW4gdHJpbV9jaGVjaywgZXhjZXB0IHRoYXQgaXQgaXMgZGlzYWJsZWQgaWYNCisgICAgYW4gYXV0b3RyaW0gZmFpbHMuDQorDQorICBEZXNpZ25hdGVkIHZpY3RpbSAoZHYpDQorICAgIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBjaHVuayBmb3Igc2VydmljaW5nIHNtYWxsIHJlcXVlc3RzIHRoYXQNCisgICAgZG9uJ3QgaGF2ZSBleGFjdCBmaXRzLiAgSXQgaXMgbm9ybWFsbHkgdGhlIGNodW5rIHNwbGl0IG9mZiBtb3N0DQorICAgIHJlY2VudGx5IHRvIHNlcnZpY2UgYW5vdGhlciBzbWFsbCByZXF1ZXN0LiAgSXRzIHNpemUgaXMgY2FjaGVkIGluDQorICAgIGR2c2l6ZS4gVGhlIGxpbmsgZmllbGRzIG9mIHRoaXMgY2h1bmsgYXJlIG5vdCBtYWludGFpbmVkIHNpbmNlIGl0DQorICAgIGlzIG5vdCBrZXB0IGluIGEgYmluLg0KKw0KKyAgU21hbGxCaW5zDQorICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gIFRoZXNlIGJpbnMgaG9sZCBjaHVua3MNCisgICAgd2l0aCBzaXplcyBsZXNzIHRoYW4gTUlOX0xBUkdFX1NJWkUgYnl0ZXMuIEVhY2ggYmluIGNvbnRhaW5zDQorICAgIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkIDggYnl0ZXMgYXBhcnQuICBUbyBzaW1wbGlmeQ0KKyAgICB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFjaCBiaW4gaGVhZGVyIGFjdHMgYXMgYSBtYWxsb2NfY2h1bmsNCisgICAgcG9pbnRpbmcgdG8gdGhlIHJlYWwgZmlyc3Qgbm9kZSwgaWYgaXQgZXhpc3RzIChlbHNlIHBvaW50aW5nIHRvDQorICAgIGl0c2VsZikuICBUaGlzIGF2b2lkcyBzcGVjaWFsLWNhc2luZyBmb3IgaGVhZGVycy4gIEJ1dCB0byBhdm9pZA0KKyAgICB3YXN0ZSwgd2UgYWxsb2NhdGUgb25seSB0aGUgZmQvYmsgcG9pbnRlcnMgb2YgYmlucywgYW5kIHRoZW4gdXNlDQorICAgIHJlcG9zaXRpb25pbmcgdHJpY2tzIHRvIHRyZWF0IHRoZXNlIGFzIHRoZSBmaWVsZHMgb2YgYSBjaHVuay4NCisNCisgIFRyZWVCaW5zDQorICAgIFRyZWViaW5zIGFyZSBwb2ludGVycyB0byB0aGUgcm9vdHMgb2YgdHJlZXMgaG9sZGluZyBhIHJhbmdlIG9mDQorICAgIHNpemVzLiBUaGVyZSBhcmUgMiBlcXVhbGx5IHNwYWNlZCB0cmVlYmlucyBmb3IgZWFjaCBwb3dlciBvZiB0d28NCisgICAgZnJvbSBUUkVFX1NISUZUIHRvIFRSRUVfU0hJRlQrMTYuIFRoZSBsYXN0IGJpbiBob2xkcyBhbnl0aGluZw0KKyAgICBsYXJnZXIuDQorDQorICBCaW4gbWFwcw0KKyAgICBUaGVyZSBpcyBvbmUgYml0IG1hcCBmb3Igc21hbGwgYmlucyAoInNtYWxsbWFwIikgYW5kIG9uZSBmb3INCisgICAgdHJlZWJpbnMgKCJ0cmVlbWFwKS4gIEVhY2ggYmluIHNldHMgaXRzIGJpdCB3aGVuIG5vbi1lbXB0eSwgYW5kDQorICAgIGNsZWFycyB0aGUgYml0IHdoZW4gZW1wdHkuICBCaXQgb3BlcmF0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGF2b2lkDQorICAgIGJpbi1ieS1iaW4gc2VhcmNoaW5nIC0tIG5lYXJseSBhbGwgInNlYXJjaCIgaXMgZG9uZSB3aXRob3V0IGV2ZXINCisgICAgbG9va2luZyBhdCBiaW5zIHRoYXQgd29uJ3QgYmUgc2VsZWN0ZWQuICBUaGUgYml0IG1hcHMNCisgICAgY29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbS4NCisgICAgRm9yIGEgZ29vZCBkZXNjcmlwdGlvbiBvZiBzb21lIG9mIHRoZSBiaXQtYmFzZWQgdGVjaG5pcXVlcyB1c2VkDQorICAgIGhlcmUsIHNlZSBIZW5yeSBTLiBXYXJyZW4gSnIncyBib29rICJIYWNrZXIncyBEZWxpZ2h0IiAoYW5kDQorICAgIHN1cHBsZW1lbnQgYXQgaHR0cDovL2hhY2tlcnNkZWxpZ2h0Lm9yZy8pLiBNYW55IG9mIHRoZXNlIGFyZQ0KKyAgICBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIGJyYW5jaGluZXNzIG9mIHBhdGhzIHRocm91Z2ggbWFsbG9jIGV0YywgYXMNCisgICAgd2VsbCBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIHJlYWQgb3Igd3JpdHRlbi4NCisNCisgIFNlZ21lbnRzDQorICAgIEEgbGlzdCBvZiBzZWdtZW50cyBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkDQorICAgIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzcGFjZS4NCisNCisgIEFkZHJlc3MgY2hlY2sgc3VwcG9ydA0KKyAgICBUaGUgbGVhc3RfYWRkciBmaWVsZCBpcyB0aGUgbGVhc3QgYWRkcmVzcyBldmVyIG9idGFpbmVkIGZyb20NCisgICAgTU9SRUNPUkUgb3IgTU1BUC4gQXR0ZW1wdGVkIGZyZWVzIGFuZCByZWFsbG9jcyBvZiBhbnkgYWRkcmVzcyBsZXNzDQorICAgIHRoYW4gdGhpcyBhcmUgdHJhcHBlZCAodW5sZXNzIElOU0VDVVJFIGlzIGRlZmluZWQpLg0KKw0KKyAgTWFnaWMgdGFnDQorICAgIEEgY3Jvc3MtY2hlY2sgZmllbGQgdGhhdCBzaG91bGQgYWx3YXlzIGhvbGQgc2FtZSB2YWx1ZSBhcyBtcGFyYW1zLm1hZ2ljLg0KKw0KKyAgTWF4IGFsbG93ZWQgZm9vdHByaW50DQorICAgIFRoZSBtYXhpbXVtIGFsbG93ZWQgYnl0ZXMgdG8gYWxsb2NhdGUgZnJvbSBzeXN0ZW0gKHplcm8gbWVhbnMgbm8gbGltaXQpDQorDQorICBGbGFncw0KKyAgICBCaXRzIHJlY29yZGluZyB3aGV0aGVyIHRvIHVzZSBNTUFQLCBsb2Nrcywgb3IgY29udGlndW91cyBNT1JFQ09SRQ0KKw0KKyAgU3RhdGlzdGljcw0KKyAgICBFYWNoIHNwYWNlIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeQ0KKyAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4NCisNCisgIFRyaW0gc3VwcG9ydA0KKyAgICBGaWVsZHMgaG9sZGluZyB0aGUgYW1vdW50IG9mIHVudXNlZCB0b3Btb3N0IG1lbW9yeSB0aGF0IHNob3VsZCB0cmlnZ2VyDQorICAgIHRyaW1taW5nLCBhbmQgYSBjb3VudGVyIHRvIGZvcmNlIHBlcmlvZGljIHNjYW5uaW5nIHRvIHJlbGVhc2UgdW51c2VkDQorICAgIG5vbi10b3Btb3N0IHNlZ21lbnRzLg0KKw0KKyAgTG9ja2luZw0KKyAgICBJZiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgdGhlICJtdXRleCIgbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQNCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLg0KKw0KKyAgRXh0ZW5zaW9uIHN1cHBvcnQNCisgICAgQSB2b2lkKiBwb2ludGVyIGFuZCBhIHNpemVfdCBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGhlbHAgaW1wbGVtZW50DQorICAgIGV4dGVuc2lvbnMgdG8gdGhpcyBtYWxsb2MuDQorKi8NCisNCisvKiBCaW4gdHlwZXMsIHdpZHRocyBhbmQgc2l6ZXMgKi8NCisjZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpDQorI2RlZmluZSBOVFJFRUJJTlMgICAgICAgICAoMzJVKQ0KKyNkZWZpbmUgU01BTExCSU5fU0hJRlQgICAgKDNVKQ0KKyNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpDQorI2RlZmluZSBUUkVFQklOX1NISUZUICAgICAoOFUpDQorI2RlZmluZSBNSU5fTEFSR0VfU0laRSAgICAoU0laRV9UX09ORSA8PCBUUkVFQklOX1NISUZUKQ0KKyNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkNCisjZGVmaW5lIE1BWF9TTUFMTF9SRVFVRVNUIChNQVhfU01BTExfU0laRSAtIENIVU5LX0FMSUdOX01BU0sgLSBDSFVOS19PVkVSSEVBRCkNCisNCitzdHJ1Y3QgbWFsbG9jX3N0YXRlDQorew0KKyAgICBiaW5tYXBfdCAgIHNtYWxsbWFwOw0KKyAgICBiaW5tYXBfdCAgIHRyZWVtYXA7DQorICAgIHNpemVfdCAgICAgZHZzaXplOw0KKyAgICBzaXplX3QgICAgIHRvcHNpemU7DQorICAgIGNoYXIgICAgICAqbGVhc3RfYWRkcjsNCisgICAgbWNodW5rcHRyICBkdjsNCisgICAgbWNodW5rcHRyICB0b3A7DQorICAgIHNpemVfdCAgICAgdHJpbV9jaGVjazsNCisgICAgc2l6ZV90ICAgICByZWxlYXNlX2NoZWNrczsNCisgICAgc2l6ZV90ICAgICBtYWdpYzsNCisgICAgbWNodW5rcHRyICBzbWFsbGJpbnNbKE5TTUFMTEJJTlMgKyAxKSAqIDJdOw0KKyAgICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107DQorICAgIHNpemVfdCAgICAgZm9vdHByaW50Ow0KKyAgICBzaXplX3QgICAgIG1heF9mb290cHJpbnQ7DQorICAgIHNpemVfdCAgICAgZm9vdHByaW50X2xpbWl0OyAvKiB6ZXJvIG1lYW5zIG5vIGxpbWl0ICovDQorICAgIGZsYWdfdCAgICAgbWZsYWdzOw0KKyNpZiBVU0VfTE9DS1MNCisgICAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8NCisjZW5kaWYgLyogVVNFX0xPQ0tTICovDQorICAgIG1zZWdtZW50ICAgc2VnOw0KKyAgICB2b2lkICAgICAgKmV4dHA7ICAgICAgLyogVW51c2VkIGJ1dCBhdmFpbGFibGUgZm9yIGV4dGVuc2lvbnMgKi8NCisgICAgc2l6ZV90ICAgICBleHRzOw0KK307DQorDQordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlICAgICptc3RhdGU7DQorDQorLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlDQorICBkeW5hbWljYWxseSBzZXQgdXNpbmcgbWFsbG9wdC4gVGhlcmUgaXMgYSBzaW5nbGUgaW5zdGFuY2UsIG1wYXJhbXMsDQorICBpbml0aWFsaXplZCBpbiBpbml0X21wYXJhbXMuIE5vdGUgdGhhdCB0aGUgbm9uLXplcm9uZXNzIG9mICJtYWdpYyINCisgIGFsc28gc2VydmVzIGFzIGFuIGluaXRpYWxpemF0aW9uIGZsYWcuDQorKi8NCisNCitzdHJ1Y3QgbWFsbG9jX3BhcmFtcw0KK3sNCisgICAgc2l6ZV90IG1hZ2ljOw0KKyAgICBzaXplX3QgcGFnZV9zaXplOw0KKyAgICBzaXplX3QgZ3JhbnVsYXJpdHk7DQorICAgIHNpemVfdCBtbWFwX3RocmVzaG9sZDsNCisgICAgc2l6ZV90IHRyaW1fdGhyZXNob2xkOw0KKyAgICBmbGFnX3QgZGVmYXVsdF9tZmxhZ3M7DQorfTsNCisNCitzdGF0aWMgc3RydWN0IG1hbGxvY19wYXJhbXMgbXBhcmFtczsNCisNCisvKiBFbnN1cmUgbXBhcmFtcyBpbml0aWFsaXplZCAqLw0KKyNkZWZpbmUgZW5zdXJlX2luaXRpYWxpemF0aW9uKCkgKHZvaWQpKG1wYXJhbXMubWFnaWMgIT0gMCB8fCBpbml0X21wYXJhbXMoKSkNCisNCisjaWYgIU9OTFlfTVNQQUNFUw0KKw0KKy8qIFRoZSBnbG9iYWwgbWFsbG9jX3N0YXRlIHVzZWQgZm9yIGFsbCBub24tIm1zcGFjZSIgY2FsbHMgKi8NCitzdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fOw0KKyNkZWZpbmUgZ20gICAgICAgICAgICAgICAgICgmX2dtXykNCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQ0KKw0KKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovDQorDQorI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3lzdGVtIGFsbG9jIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBPcGVyYXRpb25zIG9uIG1mbGFncyAqLw0KKw0KKyNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQ0KKyNkZWZpbmUgZW5hYmxlX2xvY2soTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX0xPQ0tfQklUKQ0KKyNpZiBVU0VfTE9DS1MNCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkNCisjZWxzZQ0KKyNkZWZpbmUgZGlzYWJsZV9sb2NrKE0pDQorI2VuZGlmDQorDQorI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpDQorI2RlZmluZSBlbmFibGVfbW1hcChNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTU1BUF9CSVQpDQorI2lmIEhBVkVfTU1BUA0KKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQ0KKyNlbHNlDQorI2RlZmluZSBkaXNhYmxlX21tYXAoTSkNCisjZW5kaWYNCisNCisjZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkNCisjZGVmaW5lIGRpc2FibGVfY29udGlndW91cyhNKSAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9OT05DT05USUdVT1VTX0JJVCkNCisNCisjZGVmaW5lIHNldF9sb2NrKE0sTClcDQorICgoTSktPm1mbGFncyA9IChMKT9cDQorICAoKE0pLT5tZmxhZ3MgfCBVU0VfTE9DS19CSVQpIDpcDQorICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkNCisNCisvKiBwYWdlLWFsaWduIGEgc2l6ZSAqLw0KKyNkZWZpbmUgcGFnZV9hbGlnbihTKVwNCisgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgJiB+KG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpDQorDQorLyogZ3JhbnVsYXJpdHktYWxpZ24gYSBzaXplICovDQorI2RlZmluZSBncmFudWxhcml0eV9hbGlnbihTKVwNCisgICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSlcDQorICAgJiB+KG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkNCisNCisNCisvKiBGb3IgbW1hcCwgdXNlIGdyYW51bGFyaXR5IGFsaWdubWVudCBvbiB3aW5kb3dzLCBlbHNlIHBhZ2UtYWxpZ24gKi8NCisjaWZkZWYgV0lOMzINCisjZGVmaW5lIG1tYXBfYWxpZ24oUykgZ3JhbnVsYXJpdHlfYWxpZ24oUykNCisjZWxzZQ0KKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBwYWdlX2FsaWduKFMpDQorI2VuZGlmDQorDQorLyogRm9yIHN5c19hbGxvYywgZW5vdWdoIHBhZGRpbmcgdG8gZW5zdXJlIGNhbiBtYWxsb2MgcmVxdWVzdCBvbiBzdWNjZXNzICovDQorI2RlZmluZSBTWVNfQUxMT0NfUEFERElORyAoVE9QX0ZPT1RfU0laRSArIE1BTExPQ19BTElHTk1FTlQpDQorDQorI2RlZmluZSBpc19wYWdlX2FsaWduZWQoUylcDQorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSA9PSAwKQ0KKyNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwNCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0gMCkNCisNCisvKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovDQorI2RlZmluZSBzZWdtZW50X2hvbGRzKFMsIEEpXA0KKyAgKChjaGFyKikoQSkgPj0gUy0+YmFzZSAmJiAoY2hhciopKEEpIDwgUy0+YmFzZSArIFMtPnNpemUpDQorDQorLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBhZGRyZXNzICovDQorc3RhdGljIG1zZWdtZW50cHRyIHNlZ21lbnRfaG9sZGluZyhtc3RhdGUgbSwgY2hhciAqYWRkcikNCit7DQorICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsNCisNCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIHNwOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KKy8qIFJldHVybiB0cnVlIGlmIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGxpbmsgKi8NCitzdGF0aWMgaW50IGhhc19zZWdtZW50X2xpbmsobXN0YXRlIG0sIG1zZWdtZW50cHRyIHNzKQ0KK3sNCisgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOw0KKw0KKyAgICBmb3IgKDs7KQ0KKyAgICB7DQorICAgICAgICBpZiAoKGNoYXIgKilzcCA+PSBzcy0+YmFzZSAmJiAoY2hhciAqKXNwIDwgc3MtPmJhc2UgKyBzcy0+c2l6ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNDQorI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoKHMpID4gKE0pLT50cmltX2NoZWNrKQ0KKyNlbHNlICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLw0KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApDQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovDQorDQorLyoNCisgIFRPUF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5nIHNwYWNlDQorICB0aGF0IG1heSBiZSBuZWVkZWQgdG8gcGxhY2Ugc2VnbWVudCByZWNvcmRzIGFuZCBmZW5jZXBvc3RzIHdoZW4gbmV3DQorICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4NCisqLw0KKyNkZWZpbmUgVE9QX0ZPT1RfU0laRVwNCisgIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpDQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uDQorICBmYWlsdXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBsb2NraW5nLCB5b3UgY2FuIHJlZGVmaW5lIHRoZXNlIHRvIGRvDQorICBhbnl0aGluZyB5b3UgbGlrZS4NCisqLw0KKw0KKyNpZiBVU0VfTE9DS1MNCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKCh1c2VfbG9jayhNKSk/IEFDUVVJUkVfTE9DSygmKE0pLT5tdXRleCkgOiAwKQ0KKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQ0KKyNlbHNlIC8qIFVTRV9MT0NLUyAqLw0KKw0KKyNpZm5kZWYgUFJFQUNUSU9ODQorI2RlZmluZSBQUkVBQ1RJT04oTSkgKDApDQorI2VuZGlmICAvKiBQUkVBQ1RJT04gKi8NCisNCisjaWZuZGVmIFBPU1RBQ1RJT04NCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkNCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8NCisNCisjZW5kaWYgLyogVVNFX0xPQ0tTICovDQorDQorLyoNCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCB1cG9uIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMuDQorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQNCisgIHJlYWxsb2NzLiBUaGUgYXJndW1lbnQgcCBpcyBhbiBhZGRyZXNzIHRoYXQgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlDQorICBmYXVsdC4gSXQgaXMgaWdub3JlZCBieSB0aGUgdHdvIHByZWRlZmluZWQgYWN0aW9ucywgYnV0IG1pZ2h0IGJlDQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuDQorKi8NCisNCisjaWYgUFJPQ0VFRF9PTl9FUlJPUg0KKw0KKy8qIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjb3JydXB0aW9uIGVycm9ycyBjYXVzaW5nIHJlc2V0cyAqLw0KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsNCisNCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovDQorc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOw0KKw0KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgIHJlc2V0X29uX2Vycm9yKG0pDQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkNCisNCisjZWxzZSAvKiBQUk9DRUVEX09OX0VSUk9SICovDQorDQorI2lmbmRlZiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTg0KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgQUJPUlQNCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8NCisNCisjaWZuZGVmIFVTQUdFX0VSUk9SX0FDVElPTg0KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQNCisjZW5kaWYgLyogVVNBR0VfRVJST1JfQUNUSU9OICovDQorDQorI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8NCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKyNpZiAhIERFQlVHDQorDQorI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkNCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkNCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQ0KKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkNCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApDQorDQorI2Vsc2UgLyogREVCVUcgKi8NCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkNCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhNLFApDQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKSAgICAgICAgZG9fY2hlY2tfdG9wX2NodW5rKE0sUCkNCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikNCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKE0sUCkNCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKSAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoTSkNCisNCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7DQorc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7DQorc3RhdGljIHZvaWQgICBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQgKm1lbSwgc2l6ZV90IHMpOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpOw0KK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7DQorc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7DQorc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pOw0KK3N0YXRpYyBpbnQgICAgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KTsNCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7DQorI2VuZGlmIC8qIERFQlVHICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjZGVmaW5lIGlzX3NtYWxsKHMpICAgICAgICAgKCgocykgPj4gU01BTExCSU5fU0hJRlQpIDwgTlNNQUxMQklOUykNCisjZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKGJpbmRleF90KSgocykgID4+IFNNQUxMQklOX1NISUZUKQ0KKyNkZWZpbmUgc21hbGxfaW5kZXgyc2l6ZShpKSAoKGkpICA8PCBTTUFMTEJJTl9TSElGVCkNCisjZGVmaW5lIE1JTl9TTUFMTF9JTkRFWCAgICAgKHNtYWxsX2luZGV4KE1JTl9DSFVOS19TSVpFKSkNCisNCisvKiBhZGRyZXNzaW5nIGJ5IGluZGV4LiBTZWUgYWJvdmUgYWJvdXQgc21hbGxiaW4gcmVwb3NpdGlvbmluZyAqLw0KKyNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKChjaGFyKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkNCisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpDQorDQorLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJLiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAgKi8NCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpDQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcDQore1wNCisgIHVuc2lnbmVkIGludCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wNCisgIGlmIChYID09IDApXA0KKyAgICBJID0gMDtcDQorICBlbHNlIGlmIChYID4gMHhGRkZGKVwNCisgICAgSSA9IE5UUkVFQklOUy0xO1wNCisgIGVsc2Uge1wNCisgICAgdW5zaWduZWQgaW50IEsgPSAodW5zaWduZWQpIHNpemVvZihYKSpfX0NIQVJfQklUX18gLSAxIC0gKHVuc2lnbmVkKSBfX2J1aWx0aW5fY2x6KFgpOyBcDQorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XA0KKyAgfVwNCit9DQorDQorI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikNCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwNCit7XA0KKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XA0KKyAgaWYgKFggPT0gMClcDQorICAgIEkgPSAwO1wNCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXA0KKyAgICBJID0gTlRSRUVCSU5TLTE7XA0KKyAgZWxzZSB7XA0KKyAgICB1bnNpZ25lZCBpbnQgSyA9IF9iaXRfc2Nhbl9yZXZlcnNlIChYKTsgXA0KKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wNCisgIH1cDQorfQ0KKw0KKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwDQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcDQore1wNCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wNCisgIGlmIChYID09IDApXA0KKyAgICBJID0gMDtcDQorICBlbHNlIGlmIChYID4gMHhGRkZGKVwNCisgICAgSSA9IE5UUkVFQklOUy0xO1wNCisgIGVsc2Uge1wNCisgICAgdW5zaWduZWQgaW50IEs7XA0KKyAgICBfQml0U2NhblJldmVyc2UoKERXT1JEICopICZLLCAoRFdPUkQpIFgpO1wNCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcDQorICB9XA0KK30NCisNCisjZWxzZSAvKiBHTlVDICovDQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcDQore1wNCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wNCisgIGlmIChYID09IDApXA0KKyAgICBJID0gMDtcDQorICBlbHNlIGlmIChYID4gMHhGRkZGKVwNCisgICAgSSA9IE5UUkVFQklOUy0xO1wNCisgIGVsc2Uge1wNCisgICAgdW5zaWduZWQgaW50IFkgPSAodW5zaWduZWQgaW50KVg7XA0KKyAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wNCisgICAgdW5zaWduZWQgaW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDtcDQorICAgIE4gKz0gSztcDQorICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wNCisgICAgSyA9IDE0IC0gTiArICgoWSA8PD0gSykgPj4gMTUpO1wNCisgICAgSSA9IChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpO1wNCisgIH1cDQorfQ0KKyNlbmRpZiAvKiBHTlVDICovDQorDQorLyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0IGkgKi8NCisjZGVmaW5lIGJpdF9mb3JfdHJlZV9pbmRleChpKSBcDQorICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQ0KKw0KKy8qIFNoaWZ0IHBsYWNpbmcgbWF4aW11bSByZXNvbHZlZCBiaXQgaW4gYSB0cmVlYmluIGF0IGkgYXMgc2lnbiBiaXQgKi8NCisjZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcDQorICAgKChpID09IE5UUkVFQklOUy0xKT8gMCA6IFwNCisgICAgKChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSAtICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpKSkNCisNCisvKiBUaGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgY2h1bmsgaGVsZCBpbiBiaW4gd2l0aCBpbmRleCBpICovDQorI2RlZmluZSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGkpIFwNCisgICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXA0KKyAgICgoKHNpemVfdCkoKGkpICYgU0laRV9UX09ORSkpIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDEpKSkNCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBiaW4gbWFwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovDQorI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAgICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpDQorDQorLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8NCisjZGVmaW5lIG1hcmtfc21hbGxtYXAoTSxpKSAgICAgICgoTSktPnNtYWxsbWFwIHw9ICBpZHgyYml0KGkpKQ0KKyNkZWZpbmUgY2xlYXJfc21hbGxtYXAoTSxpKSAgICAgKChNKS0+c21hbGxtYXAgJj0gfmlkeDJiaXQoaSkpDQorI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkNCisNCisjZGVmaW5lIG1hcmtfdHJlZW1hcChNLGkpICAgICAgICgoTSktPnRyZWVtYXAgIHw9ICBpZHgyYml0KGkpKQ0KKyNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpDQorI2RlZmluZSB0cmVlbWFwX2lzX21hcmtlZChNLGkpICAoKE0pLT50cmVlbWFwICAmICAgaWR4MmJpdChpKSkNCisNCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovDQorI2RlZmluZSBsZWFzdF9iaXQoeCkgICAgICAgICAoKHgpICYgLSh4KSkNCisNCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLw0KKyNkZWZpbmUgbGVmdF9iaXRzKHgpICAgICAgICAgKCh4PDwxKSB8IC0oeDw8MSkpDQorDQorLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8NCisjZGVmaW5lIHNhbWVfb3JfbGVmdF9iaXRzKHgpICgoeCkgfCAtKHgpKQ0KKw0KKy8qIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYml0LiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAqLw0KKw0KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkNCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwNCit7XA0KKyAgdW5zaWduZWQgaW50IEo7XA0KKyAgSiA9IF9fYnVpbHRpbl9jdHooWCk7IFwNCisgIEkgPSAoYmluZGV4X3QpSjtcDQorfQ0KKw0KKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpDQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcDQore1wNCisgIHVuc2lnbmVkIGludCBKO1wNCisgIEogPSBfYml0X3NjYW5fZm9yd2FyZCAoWCk7IFwNCisgIEkgPSAoYmluZGV4X3QpSjtcDQorfQ0KKw0KKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwDQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcDQore1wNCisgIHVuc2lnbmVkIGludCBKO1wNCisgIF9CaXRTY2FuRm9yd2FyZCgoRFdPUkQgKikgJkosIFgpO1wNCisgIEkgPSAoYmluZGV4X3QpSjtcDQorfQ0KKw0KKyNlbGlmIFVTRV9CVUlMVElOX0ZGUw0KKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpIEkgPSBmZnMoWCktMQ0KKw0KKyNlbHNlDQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcDQore1wNCisgIHVuc2lnbmVkIGludCBZID0gWCAtIDE7XA0KKyAgdW5zaWduZWQgaW50IEsgPSBZID4+ICgxNi00KSAmIDE2O1wNCisgIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7XA0KKyAgTiArPSBLID0gWSA+PiAoOC0zKSAmICA4OyAgWSA+Pj0gSztcDQorICBOICs9IEsgPSBZID4+ICg0LTIpICYgIDQ7ICBZID4+PSBLO1wNCisgIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7XA0KKyAgTiArPSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSztcDQorICBJID0gKGJpbmRleF90KShOICsgWSk7XA0KK30NCisjZW5kaWYgLyogR05VQyAqLw0KKw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJ1bnRpbWUgQ2hlY2sgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyoNCisgIEZvciBzZWN1cml0eSwgdGhlIG1haW4gaW52YXJpYW50IGlzIHRoYXQgbWFsbG9jL2ZyZWUvZXRjIG5ldmVyDQorICB3cml0ZXMgdG8gYSBzdGF0aWMgYWRkcmVzcyBvdGhlciB0aGFuIG1hbGxvY19zdGF0ZSwgdW5sZXNzIHN0YXRpYw0KKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWENCisgIG1hbGxvYyAoYmVjYXVzZSBvZiB0aGVzZSBjaGVja3MpLiBJbiBlc3NlbmNlIHRoaXMgbWVhbnMgdGhhdCB3ZQ0KKyAgYmVsaWV2ZSBhbGwgcG9pbnRlcnMsIHNpemVzLCBtYXBzIGV0YyBoZWxkIGluIG1hbGxvY19zdGF0ZSwgYnV0DQorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGENCisgIHN0cnVjdHVyZXMuICBUaGVzZSBjaGVja3MgYXJlIGludGVyc3BlcnNlZCB3aXRoIG1haW4gY29kZSBpbiBhIHdheQ0KKyAgdGhhdCB0ZW5kcyB0byBtaW5pbWl6ZSB0aGVpciBydW4tdGltZSBjb3N0Lg0KKw0KKyAgV2hlbiBGT09URVJTIGlzIGRlZmluZWQsIGluIGFkZGl0aW9uIHRvIHJhbmdlIGNoZWNraW5nLCB3ZSBhbHNvDQorICB2ZXJpZnkgZm9vdGVyIGZpZWxkcyBvZiBpbnVzZSBjaHVua3MsIHdoaWNoIGNhbiBiZSB1c2VkIGd1YXJhbnRlZQ0KKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQ0KKyAgc3RyZWFtbGluZWQgdmVyc2lvbiBvZiB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGJ5IFdpbGxpYW0gUm9iZXJ0c29uDQorICBldCBhbCBpbiAiUnVuLXRpbWUgRGV0ZWN0aW9uIG9mIEhlYXAtYmFzZWQgT3ZlcmZsb3dzIiBMSVNBJzAzDQorICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXINCisgIG9mIGFuIGludXNlIGNodW5rIGhvbGRzIHRoZSB4b3Igb2YgaXRzIG1zdGF0ZSBhbmQgYSByYW5kb20gc2VlZCwNCisgIHRoYXQgaXMgY2hlY2tlZCB1cG9uIGNhbGxzIHRvIGZyZWUoKSBhbmQgcmVhbGxvYygpLiAgVGhpcyBpcw0KKyAgKHByb2JhYmFsaXN0aWNhbGx5KSB1bmd1ZXNzYWJsZSBmcm9tIG91dHNpZGUgdGhlIHByb2dyYW0sIGJ1dCBjYW4gYmUNCisgIGNvbXB1dGVkIGJ5IGFueSBjb2RlIHN1Y2Nlc3NmdWxseSBtYWxsb2MnaW5nIGFueSBjaHVuaywgc28gZG9lcyBub3QNCisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuDQorICBzZWN1cml0eSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuICBVbmxpa2UgUm9iZXJ0c29uIGV0IGFsLCB3ZQ0KKyAgYWx3YXlzIGR5bmFtaWNhbGx5IGNoZWNrIGFkZHJlc3NlcyBvZiBhbGwgb2Zmc2V0IGNodW5rcyAocHJldmlvdXMsDQorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuDQorKi8NCisNCisjaWYgIUlOU0VDVVJFDQorLyogQ2hlY2sgaWYgYWRkcmVzcyBhIGlzIGF0IGxlYXN0IGFzIGhpZ2ggYXMgYW55IGZyb20gTU9SRUNPUkUgb3IgTU1BUCAqLw0KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoKGNoYXIqKShhKSA+PSAoTSktPmxlYXN0X2FkZHIpDQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovDQorI2RlZmluZSBva19uZXh0KHAsIG4pICAgICgoY2hhciopKHApIDwgKGNoYXIqKShuKSkNCisvKiBDaGVjayBpZiBwIGhhcyBpbnVzZSBzdGF0dXMgKi8NCisjZGVmaW5lIG9rX2ludXNlKHApICAgICBpc19pbnVzZShwKQ0KKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovDQorI2RlZmluZSBva19waW51c2UocCkgICAgIHBpbnVzZShwKQ0KKw0KKyNlbHNlIC8qICFJTlNFQ1VSRSAqLw0KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoMSkNCisjZGVmaW5lIG9rX25leHQoYiwgbikgICAgKDEpDQorI2RlZmluZSBva19pbnVzZShwKSAgICAgICgxKQ0KKyNkZWZpbmUgb2tfcGludXNlKHApICAgICAoMSkNCisjZW5kaWYgLyogIUlOU0VDVVJFICovDQorDQorI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkNCisvKiBDaGVjayBpZiAoYWxsZWdlZCkgbXN0YXRlIG0gaGFzIGV4cGVjdGVkIG1hZ2ljIGZpZWxkICovDQorI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpDQorI2Vsc2UgIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8NCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKDEpDQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8NCisNCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8NCisjaWYgIUlOU0VDVVJFDQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMNCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkNCisjZWxzZSAvKiBHTlVDICovDQorI2RlZmluZSBSVENIRUNLKGUpICAoZSkNCisjZW5kaWYgLyogR05VQyAqLw0KKyNlbHNlIC8qICFJTlNFQ1VSRSAqLw0KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKDEpDQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLw0KKw0KKy8qIG1hY3JvcyB0byBzZXQgdXAgaW51c2UgY2h1bmtzIHdpdGggb3Igd2l0aG91dCBmb290ZXJzICovDQorDQorI2lmICFGT09URVJTDQorDQorI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpDQorDQorLyogTWFjcm9zIGZvciBzZXR0aW5nIGhlYWQvZm9vdCBvZiBub24tbW1hcHBlZCBjaHVua3MgKi8NCisNCisvKiBTZXQgY2ludXNlIGJpdCBhbmQgcGludXNlIGJpdCBvZiBuZXh0IGNodW5rICovDQorI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXA0KKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcDQorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkNCisNCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8NCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwNCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwNCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQ0KKw0KKy8qIFNldCBzaXplLCBjaW51c2UgYW5kIHBpbnVzZSBiaXQgb2YgdGhpcyBjaHVuayAqLw0KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwNCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpKQ0KKw0KKyNlbHNlIC8qIEZPT1RFUlMgKi8NCisNCisvKiBTZXQgZm9vdCBvZiBpbnVzZSBjaHVuayB0byBiZSB4b3Igb2YgbXN0YXRlIGFuZCBzZWVkICovDQorI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXA0KKyAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9ICgoc2l6ZV90KShNKSBeIG1wYXJhbXMubWFnaWMpKQ0KKw0KKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcDQorICAoKG1zdGF0ZSkoKChtY2h1bmtwdHIpKChjaGFyKikocCkgK1wNCisgICAgKGNodW5rc2l6ZShwKSkpKS0+cHJldl9mb290IF4gbXBhcmFtcy5tYWdpYykpDQorDQorI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXA0KKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcDQorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcDQorICBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQ0KKw0KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXA0KKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXA0KKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSxcDQorIG1hcmtfaW51c2VfZm9vdChNLHAscykpDQorDQorI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXA0KKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXA0KKyAgbWFya19pbnVzZV9mb290KE0sIHAsIHMpKQ0KKw0KKyNlbmRpZiAvKiAhRk9PVEVSUyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2V0dGluZyBtcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmIExPQ0tfQVRfRk9SSw0KK3N0YXRpYyB2b2lkIHByZV9mb3JrKHZvaWQpICAgICAgICAgeyBBQ1FVSVJFX0xPQ0soJihnbSktPm11dGV4KTsgfQ0KK3N0YXRpYyB2b2lkIHBvc3RfZm9ya19wYXJlbnQodm9pZCkgeyBSRUxFQVNFX0xPQ0soJihnbSktPm11dGV4KTsgfQ0KK3N0YXRpYyB2b2lkIHBvc3RfZm9ya19jaGlsZCh2b2lkKSAgeyBJTklUSUFMX0xPQ0soJihnbSktPm11dGV4KTsgfQ0KKyNlbmRpZiAvKiBMT0NLX0FUX0ZPUksgKi8NCisNCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8NCitzdGF0aWMgaW50IGluaXRfbXBhcmFtcyh2b2lkKQ0KK3sNCisjaWZkZWYgTkVFRF9HTE9CQUxfTE9DS19JTklUDQorDQorICAgIGlmIChtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cyA8PSAwKQ0KKyAgICB7DQorICAgICAgICBpbml0X21hbGxvY19nbG9iYWxfbXV0ZXgoKTsNCisgICAgfQ0KKw0KKyNlbmRpZg0KKw0KKyAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOw0KKw0KKyAgICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgbWFnaWM7DQorICAgICAgICBzaXplX3QgcHNpemU7DQorICAgICAgICBzaXplX3QgZ3NpemU7DQorDQorI2lmbmRlZiBXSU4zMg0KKyAgICAgICAgcHNpemUgPSBtYWxsb2NfZ2V0cGFnZXNpemU7DQorICAgICAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKSA/IERFRkFVTFRfR1JBTlVMQVJJVFkgOiBwc2l6ZSk7DQorI2Vsc2UgLyogV0lOMzIgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsNCisgICAgICAgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7DQorICAgICAgICAgICAgcHNpemUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOw0KKyAgICAgICAgICAgIGdzaXplID0gKChERUZBVUxUX0dSQU5VTEFSSVRZICE9IDApID8NCisgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkpOw0KKyAgICAgICAgfQ0KKyNlbmRpZiAvKiBXSU4zMiAqLw0KKw0KKyAgICAgICAgLyogU2FuaXR5LWNoZWNrIGNvbmZpZ3VyYXRpb246DQorICAgICAgICAgICBzaXplX3QgbXVzdCBiZSB1bnNpZ25lZCBhbmQgYXMgd2lkZSBhcyBwb2ludGVyIHR5cGUuDQorICAgICAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4NCisgICAgICAgICAgIGFsaWdubWVudCBtdXN0IGJlIGF0IGxlYXN0IDguDQorICAgICAgICAgICBBbGlnbm1lbnQsIG1pbiBjaHVuayBzaXplLCBhbmQgcGFnZSBzaXplIG11c3QgYWxsIGJlIHBvd2VycyBvZiAyLg0KKyAgICAgICAgKi8NCisgICAgICAgIGlmICgoc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKGNoYXIgKikpIHx8DQorICAgICAgICAgICAgKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8DQorICAgICAgICAgICAgKHNpemVvZihpbnQpIDwgNCkgIHx8DQorICAgICAgICAgICAgKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fA0KKyAgICAgICAgICAgICgoTUFMTE9DX0FMSUdOTUVOVCAmIChNQUxMT0NfQUxJR05NRU5UIC0gU0laRV9UX09ORSkpICE9IDApIHx8DQorICAgICAgICAgICAgKChNQ0hVTktfU0laRSAgICAgICYgKE1DSFVOS19TSVpFIC0gU0laRV9UX09ORSkpICAgICAgIT0gMCkgfHwNCisgICAgICAgICAgICAoKGdzaXplICAgICAgICAgICAgJiAoZ3NpemUgLSBTSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSB8fA0KKyAgICAgICAgICAgICgocHNpemUgICAgICAgICAgICAmIChwc2l6ZSAtIFNJWkVfVF9PTkUpKSAgICAgICAgICAgICE9IDApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIEFCT1JUOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IGdzaXplOw0KKyAgICAgICAgbXBhcmFtcy5wYWdlX3NpemUgPSBwc2l6ZTsNCisgICAgICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOw0KKyAgICAgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7DQorI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMNCisgICAgICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVQgfCBVU0VfTU1BUF9CSVQ7DQorI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8NCisgICAgICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVQgfCBVU0VfTU1BUF9CSVQgfCBVU0VfTk9OQ09OVElHVU9VU19CSVQ7DQorI2VuZGlmIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8NCisNCisjaWYgIU9OTFlfTVNQQUNFUw0KKyAgICAgICAgLyogU2V0IHVwIGxvY2sgZm9yIG1haW4gbWFsbG9jIGFyZWEgKi8NCisgICAgICAgIGdtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOw0KKyAgICAgICAgKHZvaWQpSU5JVElBTF9MT0NLKCZnbS0+bXV0ZXgpOw0KKyNlbmRpZg0KKyNpZiBMT0NLX0FUX0ZPUksNCisgICAgICAgIHB0aHJlYWRfYXRmb3JrKCZwcmVfZm9yaywgJnBvc3RfZm9ya19wYXJlbnQsICZwb3N0X2ZvcmtfY2hpbGQpOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgew0KKyNpZiBVU0VfREVWX1JBTkRPTQ0KKyAgICAgICAgICAgIGludCBmZDsNCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2Yoc2l6ZV90KV07DQorDQorICAgICAgICAgICAgLyogVHJ5IHRvIHVzZSAvZGV2L3VyYW5kb20sIGVsc2UgZmFsbCBiYWNrIG9uIHVzaW5nIHRpbWUgKi8NCisgICAgICAgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmDQorICAgICAgICAgICAgICAgIHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWFnaWMgPSAqKChzaXplX3QgKikgYnVmKTsNCisgICAgICAgICAgICAgICAgY2xvc2UoZmQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorI2VuZGlmIC8qIFVTRV9ERVZfUkFORE9NICovDQorI2lmZGVmIFdJTjMyDQorICAgICAgICAgICAgICAgIG1hZ2ljID0gKHNpemVfdCkoR2V0VGlja0NvdW50KCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsNCisNCisjZWxpZiBkZWZpbmVkKExBQ0tTX1RJTUVfSCkNCisgICAgICAgICAgICAgICAgbWFnaWMgPSAoc2l6ZV90KSZtYWdpYyBeIChzaXplX3QpMHg1NTU1NTU1NVU7DQorI2Vsc2UNCisgICAgICAgICAgICAgICAgbWFnaWMgPSAoc2l6ZV90KSh0aW1lKDApIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7DQorI2VuZGlmDQorICAgICAgICAgICAgbWFnaWMgfD0gKHNpemVfdCk4VTsgICAgLyogZW5zdXJlIG5vbnplcm8gKi8NCisgICAgICAgICAgICBtYWdpYyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8NCisgICAgICAgICAgICAvKiBVbnRpbCBtZW1vcnkgbW9kZXMgY29tbW9ubHkgYXZhaWxhYmxlLCB1c2Ugdm9sYXRpbGUtd3JpdGUgKi8NCisgICAgICAgICAgICAoKih2b2xhdGlsZSBzaXplX3QgKikoJihtcGFyYW1zLm1hZ2ljKSkpID0gbWFnaWM7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsNCisgICAgcmV0dXJuIDE7DQorfQ0KKw0KKy8qIHN1cHBvcnQgZm9yIG1hbGxvcHQgKi8NCitzdGF0aWMgaW50IGNoYW5nZV9tcGFyYW0oaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKQ0KK3sNCisgICAgc2l6ZV90IHZhbDsNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorICAgIHZhbCA9ICh2YWx1ZSA9PSAtMSkgPyBNQVhfU0laRV9UIDogKHNpemVfdCl2YWx1ZTsNCisNCisgICAgc3dpdGNoIChwYXJhbV9udW1iZXIpDQorICAgIHsNCisgICAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOg0KKyAgICAgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IHZhbDsNCisgICAgICAgIHJldHVybiAxOw0KKw0KKyAgICBjYXNlIE1fR1JBTlVMQVJJVFk6DQorICAgICAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFsICYgKHZhbCAtIDEpKSA9PSAwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gdmFsOw0KKyAgICAgICAgICAgIHJldHVybiAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKw0KKyAgICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6DQorICAgICAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOw0KKyAgICAgICAgcmV0dXJuIDE7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KK30NCisNCisjaWYgREVCVUcNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgYW55IGNodW5rLCB3aGV0aGVyIGZyZWUsIGludXNlLCBtbWFwcGVkIGV0YyAgKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKQ0KK3sNCisgICAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7DQorICAgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsNCit9DQorDQorLyogQ2hlY2sgcHJvcGVydGllcyBvZiB0b3AgY2h1bmsgKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKQ0KK3sNCisgICAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIgKilwKTsNCisgICAgc2l6ZV90ICBzeiA9IHAtPmhlYWQgJiB+SU5VU0VfQklUUzsgLyogdGhpcmQtbG93ZXN0IGJpdCBjYW4gYmUgc2V0ISAqLw0KKyAgICBhc3NlcnQoc3AgIT0gMCk7DQorICAgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOw0KKyAgICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7DQorICAgIGFzc2VydChzeiA9PSBtLT50b3BzaXplKTsNCisgICAgYXNzZXJ0KHN6ID4gMCk7DQorICAgIGFzc2VydChzeiA9PSAoKHNwLT5iYXNlICsgc3AtPnNpemUpIC0gKGNoYXIgKilwKSAtIFRPUF9GT09UX1NJWkUpOw0KKyAgICBhc3NlcnQocGludXNlKHApKTsNCisgICAgYXNzZXJ0KCFwaW51c2UoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opKSk7DQorfQ0KKw0KKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgKGludXNlKSBtbWFwcGVkIGNodW5rcyAqLw0KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKQ0KK3sNCisgICAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsNCisgICAgc2l6ZV90IGxlbiA9IChzeiArIChwLT5wcmV2X2Zvb3QpICsgTU1BUF9GT09UX1BBRCk7DQorICAgIGFzc2VydChpc19tbWFwcGVkKHApKTsNCisgICAgYXNzZXJ0KHVzZV9tbWFwKG0pKTsNCisgICAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7DQorICAgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsNCisgICAgYXNzZXJ0KCFpc19zbWFsbChzeikpOw0KKyAgICBhc3NlcnQoKGxlbiAmIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSA9PSAwKTsNCisgICAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KS0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCk7DQorICAgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeiArIFNJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsNCit9DQorDQorLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApDQorew0KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7DQorICAgIGFzc2VydChpc19pbnVzZShwKSk7DQorICAgIGFzc2VydChuZXh0X3BpbnVzZShwKSk7DQorICAgIC8qIElmIG5vdCBwaW51c2UgYW5kIG5vdCBtbWFwcGVkLCBwcmV2aW91cyBjaHVuayBoYXMgT0sgb2Zmc2V0ICovDQorICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHBpbnVzZShwKSB8fCBuZXh0X2NodW5rKHByZXZfY2h1bmsocCkpID09IHApOw0KKw0KKyAgICBpZiAoaXNfbW1hcHBlZChwKSkNCisgICAgew0KKyAgICAgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsNCisgICAgfQ0KK30NCisNCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApDQorew0KKyAgICBzaXplX3Qgc3ogPSBjaHVua3NpemUocCk7DQorICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc3opOw0KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7DQorICAgIGFzc2VydCghaXNfaW51c2UocCkpOw0KKyAgICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsNCisgICAgYXNzZXJ0KCFpc19tbWFwcGVkKHApKTsNCisNCisgICAgaWYgKHAgIT0gbS0+ZHYgJiYgcCAhPSBtLT50b3ApDQorICAgIHsNCisgICAgICAgIGlmIChzeiA+PSBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7DQorICAgICAgICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7DQorICAgICAgICAgICAgYXNzZXJ0KG5leHQtPnByZXZfZm9vdCA9PSBzeik7DQorICAgICAgICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7DQorICAgICAgICAgICAgYXNzZXJ0KG5leHQgPT0gbS0+dG9wIHx8IGlzX2ludXNlKG5leHQpKTsNCisgICAgICAgICAgICBhc3NlcnQocC0+ZmQtPmJrID09IHApOw0KKyAgICAgICAgICAgIGFzc2VydChwLT5iay0+ZmQgPT0gcCk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGFzc2VydChzeiA9PSBTSVpFX1RfU0laRSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQorLyogQ2hlY2sgcHJvcGVydGllcyBvZiBtYWxsb2NlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQgKm1lbSwgc2l6ZV90IHMpDQorew0KKyAgICBpZiAobWVtICE9IDApDQorICAgIHsNCisgICAgICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7DQorICAgICAgICBzaXplX3Qgc3ogPSBwLT5oZWFkICYgfklOVVNFX0JJVFM7DQorICAgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBwKTsNCisgICAgICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsNCisgICAgICAgIGFzc2VydChzeiA+PSBNSU5fQ0hVTktfU0laRSk7DQorICAgICAgICBhc3NlcnQoc3ogPj0gcyk7DQorICAgICAgICAvKiB1bmxlc3MgbW1hcHBlZCwgc2l6ZSBpcyBsZXNzIHRoYW4gTUlOX0NIVU5LX1NJWkUgbW9yZSB0aGFuIHJlcXVlc3QgKi8NCisgICAgICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHN6IDwgKHMgKyBNSU5fQ0hVTktfU0laRSkpOw0KKyAgICB9DQorfQ0KKw0KKy8qIENoZWNrIGEgdHJlZSBhbmQgaXRzIHN1YnRyZWVzLiAgKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCkNCit7DQorICAgIHRjaHVua3B0ciBoZWFkID0gMDsNCisgICAgdGNodW5rcHRyIHUgPSB0Ow0KKyAgICBiaW5kZXhfdCB0aW5kZXggPSB0LT5pbmRleDsNCisgICAgc2l6ZV90IHRzaXplID0gY2h1bmtzaXplKHQpOw0KKyAgICBiaW5kZXhfdCBpZHg7DQorICAgIGNvbXB1dGVfdHJlZV9pbmRleCh0c2l6ZSwgaWR4KTsNCisgICAgYXNzZXJ0KHRpbmRleCA9PSBpZHgpOw0KKyAgICBhc3NlcnQodHNpemUgPj0gTUlOX0xBUkdFX1NJWkUpOw0KKyAgICBhc3NlcnQodHNpemUgPj0gbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpZHgpKTsNCisgICAgYXNzZXJ0KChpZHggPT0gTlRSRUVCSU5TIC0gMSkgfHwgKHRzaXplIDwgbWluc2l6ZV9mb3JfdHJlZV9pbmRleCgoaWR4ICsgMSkpKSk7DQorDQorICAgIGRvICAgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVkIG5vZGVzICovDQorICAgIHsNCisgICAgICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCAoKG1jaHVua3B0cil1KSk7DQorICAgICAgICBhc3NlcnQodS0+aW5kZXggPT0gdGluZGV4KTsNCisgICAgICAgIGFzc2VydChjaHVua3NpemUodSkgPT0gdHNpemUpOw0KKyAgICAgICAgYXNzZXJ0KCFpc19pbnVzZSh1KSk7DQorICAgICAgICBhc3NlcnQoIW5leHRfcGludXNlKHUpKTsNCisgICAgICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7DQorICAgICAgICBhc3NlcnQodS0+YmstPmZkID09IHUpOw0KKw0KKyAgICAgICAgaWYgKHUtPnBhcmVudCA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsNCisgICAgICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gPT0gMCk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgYXNzZXJ0KGhlYWQgPT0gMCk7IC8qIG9ubHkgb25lIG5vZGUgb24gY2hhaW4gaGFzIHBhcmVudCAqLw0KKyAgICAgICAgICAgIGhlYWQgPSB1Ow0KKyAgICAgICAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7DQorICAgICAgICAgICAgYXNzZXJ0KHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fA0KKyAgICAgICAgICAgICAgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwNCisgICAgICAgICAgICAgICAgICAgKigodGJpbnB0ciAqKSh1LT5wYXJlbnQpKSA9PSB1KTsNCisNCisgICAgICAgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXS0+cGFyZW50ID09IHUpOw0KKyAgICAgICAgICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0gIT0gdSk7DQorICAgICAgICAgICAgICAgIGRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMF0pOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGFzc2VydCh1LT5jaGlsZFsxXS0+cGFyZW50ID09IHUpOw0KKyAgICAgICAgICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gIT0gdSk7DQorICAgICAgICAgICAgICAgIGRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMV0pOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCAmJiB1LT5jaGlsZFsxXSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICB1ID0gdS0+ZmQ7DQorICAgIH0NCisgICAgd2hpbGUgKHUgIT0gdCk7DQorDQorICAgIGFzc2VydChoZWFkICE9IDApOw0KK30NCisNCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSB0cmVlYmluLiAgKi8NCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKQ0KK3sNCisgICAgdGJpbnB0ciAqdGIgPSB0cmVlYmluX2F0KG0sIGkpOw0KKyAgICB0Y2h1bmtwdHIgdCA9ICp0YjsNCisgICAgaW50IGVtcHR5ID0gKG0tPnRyZWVtYXAgJiAoMVUgPDwgaSkpID09IDA7DQorDQorICAgIGlmICh0ID09IDApDQorICAgIHsNCisgICAgICAgIGFzc2VydChlbXB0eSk7DQorICAgIH0NCisNCisgICAgaWYgKCFlbXB0eSkNCisgICAgew0KKyAgICAgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsNCisgICAgfQ0KK30NCisNCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSBzbWFsbGJpbi4gICovDQorc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpDQorew0KKyAgICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBpKTsNCisgICAgbWNodW5rcHRyIHAgPSBiLT5iazsNCisgICAgdW5zaWduZWQgaW50IGVtcHR5ID0gKG0tPnNtYWxsbWFwICYgKDFVIDw8IGkpKSA9PSAwOw0KKw0KKyAgICBpZiAocCA9PSBiKQ0KKyAgICB7DQorICAgICAgICBhc3NlcnQoZW1wdHkpOw0KKyAgICB9DQorDQorICAgIGlmICghZW1wdHkpDQorICAgIHsNCisgICAgICAgIGZvciAoOyBwICE9IGI7IHAgPSBwLT5iaykNCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcTsNCisgICAgICAgICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBiZSBmcmVlICovDQorICAgICAgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsNCisgICAgICAgICAgICAvKiBjaHVuayBiZWxvbmdzIGluIGJpbiAqLw0KKyAgICAgICAgICAgIGFzc2VydChzbWFsbF9pbmRleChzaXplKSA9PSBpKTsNCisgICAgICAgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7DQorICAgICAgICAgICAgLyogY2h1bmsgaXMgZm9sbG93ZWQgYnkgYW4gaW51c2UgY2h1bmsgKi8NCisgICAgICAgICAgICBxID0gbmV4dF9jaHVuayhwKTsNCisNCisgICAgICAgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisvKiBGaW5kIHggaW4gYSBiaW4uIFVzZWQgaW4gb3RoZXIgY2hlY2sgZnVuY3Rpb25zLiAqLw0KK3N0YXRpYyBpbnQgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KQ0KK3sNCisgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUoeCk7DQorDQorICAgIGlmIChpc19zbWFsbChzaXplKSkNCisgICAgew0KKyAgICAgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOw0KKyAgICAgICAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgc2lkeCk7DQorDQorICAgICAgICBpZiAoc21hbGxtYXBfaXNfbWFya2VkKG0sIHNpZHgpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gYjsNCisNCisgICAgICAgICAgICBkbw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHAgPT0geCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgYmluZGV4X3QgdGlkeDsNCisgICAgICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsNCisNCisgICAgICAgIGlmICh0cmVlbWFwX2lzX21hcmtlZChtLCB0aWR4KSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB0Y2h1bmtwdHIgdCA9ICp0cmVlYmluX2F0KG0sIHRpZHgpOw0KKyAgICAgICAgICAgIHNpemVfdCBzaXplYml0cyA9IHNpemUgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KHRpZHgpOw0KKw0KKyAgICAgICAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRSAtIFNJWkVfVF9PTkUpKSAmIDFdOw0KKyAgICAgICAgICAgICAgICBzaXplYml0cyA8PD0gMTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHQgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHRjaHVua3B0ciB1ID0gdDsNCisNCisgICAgICAgICAgICAgICAgZG8NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHUgPT0gKHRjaHVua3B0cil4KQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHdoaWxlICgodSA9IHUtPmZkKSAhPSB0KTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIFRyYXZlcnNlIGVhY2ggY2h1bmsgYW5kIGNoZWNrIGl0OyByZXR1cm4gdG90YWwgKi8NCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkNCit7DQorICAgIHNpemVfdCBzdW0gPSAwOw0KKw0KKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpDQorICAgIHsNCisgICAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOw0KKyAgICAgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOw0KKw0KKyAgICAgICAgd2hpbGUgKHMgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBsYXN0cSA9IDA7DQorICAgICAgICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7DQorDQorICAgICAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYNCisgICAgICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHN1bSArPSBjaHVua3NpemUocSk7DQorDQorICAgICAgICAgICAgICAgIGlmIChpc19pbnVzZShxKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCFiaW5fZmluZChtLCBxKSk7DQorICAgICAgICAgICAgICAgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGFzc2VydChxID09IG0tPmR2IHx8IGJpbl9maW5kKG0sIHEpKTsNCisgICAgICAgICAgICAgICAgICAgIGFzc2VydChsYXN0cSA9PSAwIHx8IGlzX2ludXNlKGxhc3RxKSk7IC8qIE5vdCAyIGNvbnNlY3V0aXZlIGZyZWUgKi8NCisgICAgICAgICAgICAgICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbGFzdHEgPSBxOw0KKyAgICAgICAgICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgcyA9IHMtPm5leHQ7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIHN1bTsNCit9DQorDQorDQorLyogQ2hlY2sgYWxsIHByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLiAqLw0KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSkNCit7DQorICAgIGJpbmRleF90IGk7DQorICAgIHNpemVfdCB0b3RhbDsNCisNCisgICAgLyogY2hlY2sgYmlucyAqLw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKQ0KKyAgICB7DQorICAgICAgICBkb19jaGVja19zbWFsbGJpbihtLCBpKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpDQorICAgIHsNCisgICAgICAgIGRvX2NoZWNrX3RyZWViaW4obSwgaSk7DQorICAgIH0NCisNCisgICAgaWYgKG0tPmR2c2l6ZSAhPSAwKSAgIC8qIGNoZWNrIGR2IGNodW5rICovDQorICAgIHsNCisgICAgICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7DQorICAgICAgICBhc3NlcnQobS0+ZHZzaXplID09IGNodW5rc2l6ZShtLT5kdikpOw0KKyAgICAgICAgYXNzZXJ0KG0tPmR2c2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7DQorICAgICAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOw0KKyAgICB9DQorDQorICAgIGlmIChtLT50b3AgIT0gMCkgICAgIC8qIGNoZWNrIHRvcCBjaHVuayAqLw0KKyAgICB7DQorICAgICAgICBkb19jaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsNCisgICAgICAgIC8qYXNzZXJ0KG0tPnRvcHNpemUgPT0gY2h1bmtzaXplKG0tPnRvcCkpOyByZWR1bmRhbnQgKi8NCisgICAgICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7DQorICAgICAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+dG9wKSA9PSAwKTsNCisgICAgfQ0KKw0KKyAgICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsNCisgICAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7DQorICAgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7DQorfQ0KKyNlbmRpZiAvKiBERUJVRyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorI2lmICFOT19NQUxMSU5GTw0KK3N0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gaW50ZXJuYWxfbWFsbGluZm8obXN0YXRlIG0pDQorew0KKyAgICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorDQorICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICB7DQorICAgICAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7DQorDQorICAgICAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovDQorICAgICAgICAgICAgc2l6ZV90IG1mcmVlID0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7DQorICAgICAgICAgICAgc2l6ZV90IHN1bSA9IG1mcmVlOw0KKyAgICAgICAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOw0KKw0KKyAgICAgICAgICAgIHdoaWxlIChzICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOw0KKw0KKyAgICAgICAgICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOw0KKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IHN6Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19pbnVzZShxKSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBtZnJlZSArPSBzejsNCisgICAgICAgICAgICAgICAgICAgICAgICArK25mcmVlOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgcyA9IHMtPm5leHQ7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG5tLmFyZW5hICAgID0gc3VtOw0KKyAgICAgICAgICAgIG5tLm9yZGJsa3MgID0gbmZyZWU7DQorICAgICAgICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07DQorICAgICAgICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50Ow0KKyAgICAgICAgICAgIG5tLnVvcmRibGtzID0gbS0+Zm9vdHByaW50IC0gbWZyZWU7DQorICAgICAgICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsNCisgICAgICAgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7DQorICAgICAgICB9DQorDQorICAgICAgICBQT1NUQUNUSU9OKG0pOw0KKyAgICB9DQorDQorICAgIHJldHVybiBubTsNCit9DQorI2VuZGlmIC8qICFOT19NQUxMSU5GTyAqLw0KKw0KKyNpZiAhTk9fTUFMTE9DX1NUQVRTDQorc3RhdGljIHZvaWQgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zdGF0ZSBtKQ0KK3sNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorDQorICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgbWF4ZnAgPSAwOw0KKyAgICAgICAgc2l6ZV90IGZwID0gMDsNCisgICAgICAgIHNpemVfdCB1c2VkID0gMDsNCisgICAgICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsNCisNCisgICAgICAgIGlmIChpc19pbml0aWFsaXplZChtKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsNCisgICAgICAgICAgICBtYXhmcCA9IG0tPm1heF9mb290cHJpbnQ7DQorICAgICAgICAgICAgZnAgPSBtLT5mb290cHJpbnQ7DQorICAgICAgICAgICAgdXNlZCA9IGZwIC0gKG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFKTsNCisNCisgICAgICAgICAgICB3aGlsZSAocyAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsNCisNCisgICAgICAgICAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYNCisgICAgICAgICAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNfaW51c2UocSkpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCAtPSBjaHVua3NpemUocSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBzID0gcy0+bmV4dDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBQT1NUQUNUSU9OKG0pOyAvKiBkcm9wIGxvY2sgKi8NCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykobWF4ZnApKTsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykoZnApKTsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW4gdXNlIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykodXNlZCkpOw0KKyAgICB9DQorfQ0KKyNlbmRpZiAvKiBOT19NQUxMT0NfU1RBVFMgKi8NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHNtYWxsYmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICBWYXJpb3VzIGZvcm1zIG9mIGxpbmtpbmcgYW5kIHVubGlua2luZyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MuICBFdmVuDQorICB0aGUgb25lcyBmb3IgdHJlZXMsIHdoaWNoIGFyZSB2ZXJ5IGxvbmcgYnV0IGhhdmUgdmVyeSBzaG9ydCB0eXBpY2FsDQorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mDQorICBjb21waWxlcnMuDQorKi8NCisNCisvKiBMaW5rIGEgZnJlZSBjaHVuayBpbnRvIGEgc21hbGxiaW4gICovDQorI2RlZmluZSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUykge1wNCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XA0KKyAgbWNodW5rcHRyIEIgPSBzbWFsbGJpbl9hdChNLCBJKTtcDQorICBtY2h1bmtwdHIgRiA9IEI7XA0KKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wNCisgIGlmICghc21hbGxtYXBfaXNfbWFya2VkKE0sIEkpKVwNCisgICAgbWFya19zbWFsbG1hcChNLCBJKTtcDQorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcDQorICAgIEYgPSBCLT5mZDtcDQorICBlbHNlIHtcDQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgIH1cDQorICBCLT5mZCA9IFA7XA0KKyAgRi0+YmsgPSBQO1wNCisgIFAtPmZkID0gRjtcDQorICBQLT5iayA9IEI7XA0KK30NCisNCisvKiBVbmxpbmsgYSBjaHVuayBmcm9tIGEgc21hbGxiaW4gICovDQorI2RlZmluZSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUykge1wNCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XA0KKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcDQorICBiaW5kZXhfdCBJID0gc21hbGxfaW5kZXgoUyk7XA0KKyAgYXNzZXJ0KFAgIT0gQik7XA0KKyAgYXNzZXJ0KFAgIT0gRik7XA0KKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcDQorICBpZiAoUlRDSEVDSyhGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgKG9rX2FkZHJlc3MoTSwgRikgJiYgRi0+YmsgPT0gUCkpKSB7IFwNCisgICAgaWYgKEIgPT0gRikge1wNCisgICAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcDQorICAgIH1cDQorICAgIGVsc2UgaWYgKFJUQ0hFQ0soQiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgIChva19hZGRyZXNzKE0sIEIpICYmIEItPmZkID09IFApKSkge1wNCisgICAgICBGLT5iayA9IEI7XA0KKyAgICAgIEItPmZkID0gRjtcDQorICAgIH1cDQorICAgIGVsc2Uge1wNCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICAgIH1cDQorICB9XA0KKyAgZWxzZSB7XA0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICB9XA0KK30NCisNCisvKiBVbmxpbmsgdGhlIGZpcnN0IGNodW5rIGZyb20gYSBzbWFsbGJpbiAqLw0KKyNkZWZpbmUgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKE0sIEIsIFAsIEkpIHtcDQorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wNCisgIGFzc2VydChQICE9IEIpO1wNCisgIGFzc2VydChQICE9IEYpO1wNCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XA0KKyAgaWYgKEIgPT0gRikge1wNCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XA0KKyAgfVwNCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSAmJiBGLT5iayA9PSBQKSkge1wNCisgICAgRi0+YmsgPSBCO1wNCisgICAgQi0+ZmQgPSBGO1wNCisgIH1cDQorICBlbHNlIHtcDQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgIH1cDQorfQ0KKw0KKy8qIFJlcGxhY2UgZHYgbm9kZSwgYmlubmluZyB0aGUgb2xkIG9uZSAqLw0KKy8qIFVzZWQgb25seSB3aGVuIGR2c2l6ZSBrbm93biB0byBiZSBzbWFsbCAqLw0KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XA0KKyAgc2l6ZV90IERWUyA9IE0tPmR2c2l6ZTtcDQorICBhc3NlcnQoaXNfc21hbGwoRFZTKSk7XA0KKyAgaWYgKERWUyAhPSAwKSB7XA0KKyAgICBtY2h1bmtwdHIgRFYgPSBNLT5kdjtcDQorICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTtcDQorICB9XA0KKyAgTS0+ZHZzaXplID0gUztcDQorICBNLT5kdiA9IFA7XA0KK30NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qIEluc2VydCBjaHVuayBpbnRvIHRyZWUgKi8NCisjZGVmaW5lIGluc2VydF9sYXJnZV9jaHVuayhNLCBYLCBTKSB7XA0KKyAgdGJpbnB0ciogSDtcDQorICBiaW5kZXhfdCBJO1wNCisgIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKTtcDQorICBIID0gdHJlZWJpbl9hdChNLCBJKTtcDQorICBYLT5pbmRleCA9IEk7XA0KKyAgWC0+Y2hpbGRbMF0gPSBYLT5jaGlsZFsxXSA9IDA7XA0KKyAgaWYgKCF0cmVlbWFwX2lzX21hcmtlZChNLCBJKSkge1wNCisgICAgbWFya190cmVlbWFwKE0sIEkpO1wNCisgICAgKkggPSBYO1wNCisgICAgWC0+cGFyZW50ID0gKHRjaHVua3B0cilIO1wNCisgICAgWC0+ZmQgPSBYLT5iayA9IFg7XA0KKyAgfVwNCisgIGVsc2Uge1wNCisgICAgdGNodW5rcHRyIFQgPSAqSDtcDQorICAgIHNpemVfdCBLID0gUyA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoSSk7XA0KKyAgICBmb3IgKDs7KSB7XA0KKyAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykge1wNCisgICAgICAgIHRjaHVua3B0ciogQyA9ICYoVC0+Y2hpbGRbKEsgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdKTtcDQorICAgICAgICBLIDw8PSAxO1wNCisgICAgICAgIGlmICgqQyAhPSAwKVwNCisgICAgICAgICAgVCA9ICpDO1wNCisgICAgICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDKSkpIHtcDQorICAgICAgICAgICpDID0gWDtcDQorICAgICAgICAgIFgtPnBhcmVudCA9IFQ7XA0KKyAgICAgICAgICBYLT5mZCA9IFgtPmJrID0gWDtcDQorICAgICAgICAgIGJyZWFrO1wNCisgICAgICAgIH1cDQorICAgICAgICBlbHNlIHtcDQorICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgICAgICAgYnJlYWs7XA0KKyAgICAgICAgfVwNCisgICAgICB9XA0KKyAgICAgIGVsc2Uge1wNCisgICAgICAgIHRjaHVua3B0ciBGID0gVC0+ZmQ7XA0KKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBUKSAmJiBva19hZGRyZXNzKE0sIEYpKSkge1wNCisgICAgICAgICAgVC0+ZmQgPSBGLT5iayA9IFg7XA0KKyAgICAgICAgICBYLT5mZCA9IEY7XA0KKyAgICAgICAgICBYLT5iayA9IFQ7XA0KKyAgICAgICAgICBYLT5wYXJlbnQgPSAwO1wNCisgICAgICAgICAgYnJlYWs7XA0KKyAgICAgICAgfVwNCisgICAgICAgIGVsc2Uge1wNCisgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XA0KKyAgICAgICAgICBicmVhaztcDQorICAgICAgICB9XA0KKyAgICAgIH1cDQorICAgIH1cDQorICB9XA0KK30NCisNCisvKg0KKyAgVW5saW5rIHN0ZXBzOg0KKw0KKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MNCisgICAgIGFuZCBjaG9vc2UgaXRzIGJrIG5vZGUgYXMgaXRzIHJlcGxhY2VtZW50Lg0KKyAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdA0KKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3INCisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kZW50cw0KKyAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kZW50DQorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQNCisgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMNCisgICAgIHBhdGhzIHNob3J0ZXIgdGhhbiBtaW5pbWFsbHkgZ3VhcmFudGVlZC4gIFRoaXMgZG9lc24ndCBsb29wIG11Y2gNCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4NCisgIDMuIElmIHggaXMgdGhlIGJhc2Ugb2YgYSBjaGFpbiAoaS5lLiwgaGFzIHBhcmVudCBsaW5rcykgcmVsaW5rDQorICAgICB4J3MgcGFyZW50IGFuZCBjaGlsZHJlbiB0byB4J3MgcmVwbGFjZW1lbnQgKG9yIG51bGwgaWYgbm9uZSkuDQorKi8NCisNCisjZGVmaW5lIHVubGlua19sYXJnZV9jaHVuayhNLCBYKSB7XA0KKyAgdGNodW5rcHRyIFhQID0gWC0+cGFyZW50O1wNCisgIHRjaHVua3B0ciBSO1wNCisgIGlmIChYLT5iayAhPSBYKSB7XA0KKyAgICB0Y2h1bmtwdHIgRiA9IFgtPmZkO1wNCisgICAgUiA9IFgtPmJrO1wNCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSAmJiBGLT5iayA9PSBYICYmIFItPmZkID09IFgpKSB7XA0KKyAgICAgIEYtPmJrID0gUjtcDQorICAgICAgUi0+ZmQgPSBGO1wNCisgICAgfVwNCisgICAgZWxzZSB7XA0KKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgfVwNCisgIH1cDQorICBlbHNlIHtcDQorICAgIHRjaHVua3B0ciogUlA7XA0KKyAgICBpZiAoKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMV0pKSkgIT0gMCkgfHxcDQorICAgICAgICAoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wNCisgICAgICB0Y2h1bmtwdHIqIENQO1wNCisgICAgICB3aGlsZSAoKCooQ1AgPSAmKFItPmNoaWxkWzFdKSkgIT0gMCkgfHxcDQorICAgICAgICAgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XA0KKyAgICAgICAgUiA9ICooUlAgPSBDUCk7XA0KKyAgICAgIH1cDQorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwNCisgICAgICAgICpSUCA9IDA7XA0KKyAgICAgIGVsc2Uge1wNCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgICB9XA0KKyAgICB9XA0KKyAgfVwNCisgIGlmIChYUCAhPSAwKSB7XA0KKyAgICB0YmlucHRyKiBIID0gdHJlZWJpbl9hdChNLCBYLT5pbmRleCk7XA0KKyAgICBpZiAoWCA9PSAqSCkge1wNCisgICAgICBpZiAoKCpIID0gUikgPT0gMCkgXA0KKyAgICAgICAgY2xlYXJfdHJlZW1hcChNLCBYLT5pbmRleCk7XA0KKyAgICB9XA0KKyAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgWFApKSkge1wNCisgICAgICBpZiAoWFAtPmNoaWxkWzBdID09IFgpIFwNCisgICAgICAgIFhQLT5jaGlsZFswXSA9IFI7XA0KKyAgICAgIGVsc2UgXA0KKyAgICAgICAgWFAtPmNoaWxkWzFdID0gUjtcDQorICAgIH1cDQorICAgIGVsc2VcDQorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XA0KKyAgICBpZiAoUiAhPSAwKSB7XA0KKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUikpKSB7XA0KKyAgICAgICAgdGNodW5rcHRyIEMwLCBDMTtcDQorICAgICAgICBSLT5wYXJlbnQgPSBYUDtcDQorICAgICAgICBpZiAoKEMwID0gWC0+Y2hpbGRbMF0pICE9IDApIHtcDQorICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzApKSkge1wNCisgICAgICAgICAgICBSLT5jaGlsZFswXSA9IEMwO1wNCisgICAgICAgICAgICBDMC0+cGFyZW50ID0gUjtcDQorICAgICAgICAgIH1cDQorICAgICAgICAgIGVsc2VcDQorICAgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XA0KKyAgICAgICAgfVwNCisgICAgICAgIGlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wNCisgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMSkpKSB7XA0KKyAgICAgICAgICAgIFItPmNoaWxkWzFdID0gQzE7XA0KKyAgICAgICAgICAgIEMxLT5wYXJlbnQgPSBSO1wNCisgICAgICAgICAgfVwNCisgICAgICAgICAgZWxzZVwNCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcDQorICAgICAgICB9XA0KKyAgICAgIH1cDQorICAgICAgZWxzZVwNCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wNCisgICAgfVwNCisgIH1cDQorfQ0KKw0KKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLw0KKw0KKyNkZWZpbmUgaW5zZXJ0X2NodW5rKE0sIFAsIFMpXA0KKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcDQorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IGluc2VydF9sYXJnZV9jaHVuayhNLCBUUCwgUyk7IH0NCisNCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwNCisgIGlmIChpc19zbWFsbChTKSkgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpXA0KKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgVFApOyB9DQorDQorDQorLyogUmVsYXlzIHRvIGludGVybmFsIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZyb20gcmVhbGxvYywgbWVtYWxpZ24gZXRjICovDQorDQorI2lmIE9OTFlfTVNQQUNFUw0KKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIG1zcGFjZV9tYWxsb2MobSwgYikNCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7DQorI2Vsc2UgLyogT05MWV9NU1BBQ0VTICovDQorI2lmIE1TUEFDRVMNCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwNCisgICgobSA9PSBnbSk/IGRsbWFsbG9jKGIpIDogbXNwYWNlX21hbGxvYyhtLCBiKSkNCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKVwNCisgICBpZiAobSA9PSBnbSkgZGxmcmVlKG1lbSk7IGVsc2UgbXNwYWNlX2ZyZWUobSxtZW0pOw0KKyNlbHNlIC8qIE1TUEFDRVMgKi8NCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBkbG1hbGxvYyhiKQ0KKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIGRsZnJlZShtZW0pDQorI2VuZGlmIC8qIE1TUEFDRVMgKi8NCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERpcmVjdC1tbWFwcGluZyBjaHVua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKg0KKyAgRGlyZWN0bHkgbW1hcHBlZCBjaHVua3MgYXJlIHNldCB1cCB3aXRoIGFuIG9mZnNldCB0byB0aGUgc3RhcnQgb2YNCisgIHRoZSBtbWFwcGVkIHJlZ2lvbiBzdG9yZWQgaW4gdGhlIHByZXZfZm9vdCBmaWVsZCBvZiB0aGUgY2h1bmsuIFRoaXMNCisgIGFsbG93cyByZWNvbnN0cnVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdG8gTVVOTUFQIHdoZW4gZnJlZWQsDQorICBhbmQgYWxzbyBhbGxvd3MgYWRqdXN0bWVudCBvZiB0aGUgcmV0dXJuZWQgY2h1bmsgdG8gbWVldCBhbGlnbm1lbnQNCisgIHJlcXVpcmVtZW50cyAoZXNwZWNpYWxseSBpbiBtZW1hbGlnbikuDQorKi8NCisNCisvKiBNYWxsb2MgdXNpbmcgbW1hcCAqLw0KK3N0YXRpYyB2b2lkICptbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpDQorew0KKyAgICBzaXplX3QgbW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsNCisNCisgICAgaWYgKG0tPmZvb3RwcmludF9saW1pdCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgZnAgPSBtLT5mb290cHJpbnQgKyBtbXNpemU7DQorDQorICAgICAgICBpZiAoZnAgPD0gbS0+Zm9vdHByaW50IHx8IGZwID4gbS0+Zm9vdHByaW50X2xpbWl0KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChtbXNpemUgPiBuYikgICAgICAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8NCisgICAgew0KKyAgICAgICAgY2hhciAqbW0gPSAoY2hhciAqKShDQUxMX0RJUkVDVF9NTUFQKG1tc2l6ZSkpOw0KKw0KKyAgICAgICAgaWYgKG1tICE9IENNRkFJTCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkpOw0KKyAgICAgICAgICAgIHNpemVfdCBwc2l6ZSA9IG1tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7DQorICAgICAgICAgICAgbWNodW5rcHRyIHAgPSAobWNodW5rcHRyKShtbSArIG9mZnNldCk7DQorICAgICAgICAgICAgcC0+cHJldl9mb290ID0gb2Zmc2V0Ow0KKyAgICAgICAgICAgIHAtPmhlYWQgPSBwc2l6ZTsNCisgICAgICAgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOw0KKyAgICAgICAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOw0KKyAgICAgICAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplICsgU0laRV9UX1NJWkUpLT5oZWFkID0gMDsNCisNCisgICAgICAgICAgICBpZiAobS0+bGVhc3RfYWRkciA9PSAwIHx8IG1tIDwgbS0+bGVhc3RfYWRkcikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG0tPmxlYXN0X2FkZHIgPSBtbTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsNCisgICAgICAgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIHApOw0KKyAgICAgICAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIFJlYWxsb2MgdXNpbmcgbW1hcCAqLw0KK3N0YXRpYyBtY2h1bmtwdHIgbW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIsIGludCBmbGFncykNCit7DQorICAgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOw0KKyAgICAodm9pZClmbGFnczsgLyogcGxhY2F0ZSBwZW9wbGUgY29tcGlsaW5nIC1XdW51c2VkICovDQorDQorICAgIGlmIChpc19zbWFsbChuYikpIC8qIENhbid0IHNocmluayBtbWFwIHJlZ2lvbnMgYmVsb3cgc21hbGwgc2l6ZSAqLw0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICAvKiBLZWVwIG9sZCBjaHVuayBpZiBiaWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLw0KKyAgICBpZiAob2xkc2l6ZSA+PSBuYiArIFNJWkVfVF9TSVpFICYmDQorICAgICAgICAob2xkc2l6ZSAtIG5iKSA8PSAobXBhcmFtcy5ncmFudWxhcml0eSA8PCAxKSkNCisgICAgew0KKyAgICAgICAgcmV0dXJuIG9sZHA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290Ow0KKyAgICAgICAgc2l6ZV90IG9sZG1tc2l6ZSA9IG9sZHNpemUgKyBvZmZzZXQgKyBNTUFQX0ZPT1RfUEFEOw0KKyAgICAgICAgc2l6ZV90IG5ld21tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7DQorICAgICAgICBjaGFyICpjcCA9IChjaGFyICopQ0FMTF9NUkVNQVAoKGNoYXIgKilvbGRwIC0gb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCBmbGFncyk7DQorDQorICAgICAgICBpZiAoY3AgIT0gQ01GQUlMKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cikoY3AgKyBvZmZzZXQpOw0KKyAgICAgICAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7DQorICAgICAgICAgICAgbmV3cC0+aGVhZCA9IHBzaXplOw0KKyAgICAgICAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBuZXdwLCBwc2l6ZSk7DQorICAgICAgICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7DQorICAgICAgICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUgKyBTSVpFX1RfU0laRSktPmhlYWQgPSAwOw0KKw0KKyAgICAgICAgICAgIGlmIChjcCA8IG0tPmxlYXN0X2FkZHIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gY3A7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG5ld21tc2l6ZSAtIG9sZG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBuZXdwKTsNCisgICAgICAgICAgICByZXR1cm4gbmV3cDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbXNwYWNlIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8NCitzdGF0aWMgdm9pZCBpbml0X3RvcChtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkNCit7DQorICAgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8NCisgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOw0KKyAgICBwID0gKG1jaHVua3B0cikoKGNoYXIgKilwICsgb2Zmc2V0KTsNCisgICAgcHNpemUgLT0gb2Zmc2V0Ow0KKw0KKyAgICBtLT50b3AgPSBwOw0KKyAgICBtLT50b3BzaXplID0gcHNpemU7DQorICAgIHAtPmhlYWQgPSBwc2l6ZSB8IFBJTlVTRV9CSVQ7DQorICAgIC8qIHNldCBzaXplIG9mIGZha2UgdHJhaWxpbmcgY2h1bmsgaG9sZGluZyBvdmVyaGVhZCBzcGFjZSBvbmx5IG9uY2UgKi8NCisgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gVE9QX0ZPT1RfU0laRTsNCisgICAgbS0+dHJpbV9jaGVjayA9IG1wYXJhbXMudHJpbV90aHJlc2hvbGQ7IC8qIHJlc2V0IG9uIGVhY2ggdXBkYXRlICovDQorfQ0KKw0KKy8qIEluaXRpYWxpemUgYmlucyBmb3IgYSBuZXcgbXN0YXRlIHRoYXQgaXMgb3RoZXJ3aXNlIHplcm9lZCBvdXQgKi8NCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pDQorew0KKyAgICAvKiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIHNtYWxsYmlucyAqLw0KKyAgICBiaW5kZXhfdCBpOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKQ0KKyAgICB7DQorICAgICAgICBzYmlucHRyIGJpbiA9IHNtYWxsYmluX2F0KG0sIGkpOw0KKyAgICAgICAgYmluLT5mZCA9IGJpbi0+YmsgPSBiaW47DQorICAgIH0NCit9DQorDQorI2lmIFBST0NFRURfT05fRVJST1INCisNCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovDQorc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pDQorew0KKyAgICBpbnQgaTsNCisgICAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsNCisgICAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLw0KKyAgICBtLT5zbWFsbG1hcCA9IG0tPnRyZWVtYXAgPSAwOw0KKyAgICBtLT5kdnNpemUgPSBtLT50b3BzaXplID0gMDsNCisgICAgbS0+c2VnLmJhc2UgPSAwOw0KKyAgICBtLT5zZWcuc2l6ZSA9IDA7DQorICAgIG0tPnNlZy5uZXh0ID0gMDsNCisgICAgbS0+dG9wID0gbS0+ZHYgPSAwOw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpDQorICAgIHsNCisgICAgICAgICp0cmVlYmluX2F0KG0sIGkpID0gMDsNCisgICAgfQ0KKw0KKyAgICBpbml0X2JpbnMobSk7DQorfQ0KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovDQorDQorLyogQWxsb2NhdGUgY2h1bmsgYW5kIHByZXBlbmQgcmVtYWluZGVyIHdpdGggY2h1bmsgaW4gc3VjY2Vzc29yIGJhc2UuICovDQorc3RhdGljIHZvaWQgKnByZXBlbmRfYWxsb2MobXN0YXRlIG0sIGNoYXIgKm5ld2Jhc2UsIGNoYXIgKm9sZGJhc2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5iKQ0KK3sNCisgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhuZXdiYXNlKTsNCisgICAgbWNodW5rcHRyIG9sZGZpcnN0ID0gYWxpZ25fYXNfY2h1bmsob2xkYmFzZSk7DQorICAgIHNpemVfdCBwc2l6ZSA9IChjaGFyICopb2xkZmlyc3QgLSAoY2hhciAqKXA7DQorICAgIG1jaHVua3B0ciBxID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICBzaXplX3QgcXNpemUgPSBwc2l6ZSAtIG5iOw0KKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsNCisNCisgICAgYXNzZXJ0KChjaGFyICopb2xkZmlyc3QgPiAoY2hhciAqKXEpOw0KKyAgICBhc3NlcnQocGludXNlKG9sZGZpcnN0KSk7DQorICAgIGFzc2VydChxc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7DQorDQorICAgIC8qIGNvbnNvbGlkYXRlIHJlbWFpbmRlciB3aXRoIGZpcnN0IGNodW5rIG9mIG9sZCBiYXNlICovDQorICAgIGlmIChvbGRmaXJzdCA9PSBtLT50b3ApDQorICAgIHsNCisgICAgICAgIHNpemVfdCB0c2l6ZSA9IG0tPnRvcHNpemUgKz0gcXNpemU7DQorICAgICAgICBtLT50b3AgPSBxOw0KKyAgICAgICAgcS0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsNCisgICAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBxKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChvbGRmaXJzdCA9PSBtLT5kdikNCisgICAgew0KKyAgICAgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHFzaXplOw0KKyAgICAgICAgbS0+ZHYgPSBxOw0KKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHEsIGRzaXplKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGlmICghaXNfaW51c2Uob2xkZmlyc3QpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShvbGRmaXJzdCk7DQorICAgICAgICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7DQorICAgICAgICAgICAgb2xkZmlyc3QgPSBjaHVua19wbHVzX29mZnNldChvbGRmaXJzdCwgbnNpemUpOw0KKyAgICAgICAgICAgIHFzaXplICs9IG5zaXplOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsNCisgICAgICAgIGluc2VydF9jaHVuayhtLCBxLCBxc2l6ZSk7DQorICAgICAgICBjaGVja19mcmVlX2NodW5rKG0sIHEpOw0KKyAgICB9DQorDQorICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOw0KKyAgICByZXR1cm4gY2h1bmsybWVtKHApOw0KK30NCisNCisvKiBBZGQgYSBzZWdtZW50IHRvIGhvbGQgYSBuZXcgbm9uY29udGlndW91cyByZWdpb24gKi8NCitzdGF0aWMgdm9pZCBhZGRfc2VnbWVudChtc3RhdGUgbSwgY2hhciAqdGJhc2UsIHNpemVfdCB0c2l6ZSwgZmxhZ190IG1tYXBwZWQpDQorew0KKyAgICAvKiBEZXRlcm1pbmUgbG9jYXRpb25zIGFuZCBzaXplcyBvZiBzZWdtZW50LCBmZW5jZXBvc3RzLCBvbGQgdG9wICovDQorICAgIGNoYXIgKm9sZF90b3AgPSAoY2hhciAqKW0tPnRvcDsNCisgICAgbXNlZ21lbnRwdHIgb2xkc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgb2xkX3RvcCk7DQorICAgIGNoYXIgKm9sZF9lbmQgPSBvbGRzcC0+YmFzZSArIG9sZHNwLT5zaXplOw0KKyAgICBzaXplX3Qgc3NpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSk7DQorICAgIGNoYXIgKnJhd3NwID0gb2xkX2VuZCAtIChzc2l6ZSArIEZPVVJfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7DQorICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHJhd3NwKSk7DQorICAgIGNoYXIgKmFzcCA9IHJhd3NwICsgb2Zmc2V0Ow0KKyAgICBjaGFyICpjc3AgPSAoYXNwIDwgKG9sZF90b3AgKyBNSU5fQ0hVTktfU0laRSkpID8gb2xkX3RvcCA6IGFzcDsNCisgICAgbWNodW5rcHRyIHNwID0gKG1jaHVua3B0ciljc3A7DQorICAgIG1zZWdtZW50cHRyIHNzID0gKG1zZWdtZW50cHRyKShjaHVuazJtZW0oc3ApKTsNCisgICAgbWNodW5rcHRyIHRuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQoc3AsIHNzaXplKTsNCisgICAgbWNodW5rcHRyIHAgPSB0bmV4dDsNCisgICAgaW50IG5mZW5jZXMgPSAwOw0KKw0KKyAgICAvKiByZXNldCB0b3AgdG8gbmV3IHNwYWNlICovDQorICAgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7DQorDQorICAgIC8qIFNldCB1cCBzZWdtZW50IHJlY29yZCAqLw0KKyAgICBhc3NlcnQoaXNfYWxpZ25lZChzcykpOw0KKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHNwLCBzc2l6ZSk7DQorICAgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLw0KKyAgICBtLT5zZWcuYmFzZSA9IHRiYXNlOw0KKyAgICBtLT5zZWcuc2l6ZSA9IHRzaXplOw0KKyAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcHBlZDsNCisgICAgbS0+c2VnLm5leHQgPSBzczsNCisNCisgICAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8NCisgICAgZm9yICg7OykNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIG5leHRwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgU0laRV9UX1NJWkUpOw0KKyAgICAgICAgcC0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOw0KKyAgICAgICAgKytuZmVuY2VzOw0KKw0KKyAgICAgICAgaWYgKChjaGFyICopKCYobmV4dHAtPmhlYWQpKSA8IG9sZF9lbmQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcCA9IG5leHRwOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGFzc2VydChuZmVuY2VzID49IDIpOw0KKw0KKyAgICAvKiBJbnNlcnQgdGhlIHJlc3Qgb2Ygb2xkIHRvcCBpbnRvIGEgYmluIGFzIGFuIG9yZGluYXJ5IGZyZWUgY2h1bmsgKi8NCisgICAgaWYgKGNzcCAhPSBvbGRfdG9wKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsNCisgICAgICAgIHNpemVfdCBwc2l6ZSA9IGNzcCAtIG9sZF90b3A7DQorICAgICAgICBtY2h1bmtwdHIgdG4gPSBjaHVua19wbHVzX29mZnNldChxLCBwc2l6ZSk7DQorICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6ZSwgdG4pOw0KKyAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHBzaXplKTsNCisgICAgfQ0KKw0KKyAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsNCit9DQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBHZXQgbWVtb3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8NCitzdGF0aWMgdm9pZCAqc3lzX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpDQorew0KKyAgICBjaGFyICp0YmFzZSA9IENNRkFJTDsNCisgICAgc2l6ZV90IHRzaXplID0gMDsNCisgICAgZmxhZ190IG1tYXBfZmxhZyA9IDA7DQorICAgIHNpemVfdCBhc2l6ZTsgLyogYWxsb2NhdGlvbiBzaXplICovDQorDQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKw0KKyAgICAvKiBEaXJlY3RseSBtYXAgbGFyZ2UgY2h1bmtzLCBidXQgb25seSBpZiBhbHJlYWR5IGluaXRpYWxpemVkICovDQorICAgIGlmICh1c2VfbW1hcChtKSAmJiBuYiA+PSBtcGFyYW1zLm1tYXBfdGhyZXNob2xkICYmIG0tPnRvcHNpemUgIT0gMCkNCisgICAgew0KKyAgICAgICAgdm9pZCAqbWVtID0gbW1hcF9hbGxvYyhtLCBuYik7DQorDQorICAgICAgICBpZiAobWVtICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIG1lbTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOw0KKw0KKyAgICBpZiAoYXNpemUgPD0gbmIpDQorICAgIHsNCisgICAgICAgIHJldHVybiAwOyAgICAvKiB3cmFwYXJvdW5kICovDQorICAgIH0NCisNCisgICAgaWYgKG0tPmZvb3RwcmludF9saW1pdCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBzaXplX3QgZnAgPSBtLT5mb290cHJpbnQgKyBhc2l6ZTsNCisNCisgICAgICAgIGlmIChmcCA8PSBtLT5mb290cHJpbnQgfHwgZnAgPiBtLT5mb290cHJpbnRfbGltaXQpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgLyoNCisgICAgICBUcnkgZ2V0dGluZyBtZW1vcnkgaW4gYW55IG9mIHRocmVlIHdheXMgKGluIG1vc3QtcHJlZmVycmVkIHRvDQorICAgICAgbGVhc3QtcHJlZmVycmVkIG9yZGVyKToNCisgICAgICAxLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW4gbm9ybWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuDQorICAgICAgICAgKGRpc2FibGVkIGlmIG5vdCBNT1JFQ09SRV9DT05USUdVT1VTIG9yIG5vdCBIQVZFX01PUkVDT1JFIG9yDQorICAgICAgICAgb3IgbWFpbiBzcGFjZSBpcyBtbWFwcGVkIG9yIGEgcHJldmlvdXMgY29udGlndW91cyBjYWxsIGZhaWxlZCkNCisgICAgICAyLiBBIGNhbGwgdG8gTU1BUCBuZXcgc3BhY2UgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01NQVApLg0KKyAgICAgICAgIE5vdGUgdGhhdCB1bmRlciB0aGUgZGVmYXVsdCBzZXR0aW5ncywgaWYgTU9SRUNPUkUgaXMgdW5hYmxlIHRvDQorICAgICAgICAgZnVsZmlsbCBhIHJlcXVlc3QsIGFuZCBIQVZFX01NQVAgaXMgdHJ1ZSwgdGhlbiBtbWFwIGlzDQorICAgICAgICAgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMgc3lzdGVtIGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXANCisgICAgICAgICBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0tIGluIHRoaXMgY2FzZQ0KKyAgICAgICAgIHNicmsgY2Fubm90IGNvbnRpZ3VvdXNseSBleHBhbmQgdGhlIGhlYXAsIGJ1dCBtbWFwIG1heSBiZSBhYmxlIHRvDQorICAgICAgICAgZmluZCBzcGFjZS4NCisgICAgICAzLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW5ub3QgdXN1YWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4NCisgICAgICAgICAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU9SRUNPUkUpDQorDQorICAgICBJbiBhbGwgY2FzZXMsIHdlIG5lZWQgdG8gcmVxdWVzdCBlbm91Z2ggYnl0ZXMgZnJvbSBzeXN0ZW0gdG8gZW5zdXJlDQorICAgICB3ZSBjYW4gbWFsbG9jIG5iIGJ5dGVzIHVwb24gc3VjY2Vzcywgc28gcGFkIHdpdGggZW5vdWdoIHNwYWNlIGZvcg0KKyAgICAgdG9wX2Zvb3QsIHBsdXMgYWxpZ25tZW50LXBhZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbG9zZSBieXRlcyBpZg0KKyAgICAgbm90IG9uIGJvdW5kYXJ5LCBhbmQgcm91bmQgdGhpcyB1cCB0byBhIGdyYW51bGFyaXR5IHVuaXQuDQorICAgICovDQorDQorICAgIGlmIChNT1JFQ09SRV9DT05USUdVT1VTICYmICF1c2Vfbm9uY29udGlndW91cyhtKSkNCisgICAgew0KKyAgICAgICAgY2hhciAqYnIgPSBDTUZBSUw7DQorICAgICAgICBzaXplX3Qgc3NpemUgPSBhc2l6ZTsgLyogc2JyayBjYWxsIHNpemUgKi8NCisgICAgICAgIG1zZWdtZW50cHRyIHNzID0gKG0tPnRvcCA9PSAwKSA/IDAgOiBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIgKiltLT50b3ApOw0KKyAgICAgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsNCisNCisgICAgICAgIGlmIChzcyA9PSAwKSAgICAvKiBGaXJzdCB0aW1lIHRocm91Z2ggb3IgcmVjb3ZlcnkgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBjaGFyICpiYXNlID0gKGNoYXIgKilDQUxMX01PUkVDT1JFKDApOw0KKw0KKyAgICAgICAgICAgIGlmIChiYXNlICE9IENNRkFJTCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBmcDsNCisNCisgICAgICAgICAgICAgICAgLyogQWRqdXN0IHRvIGVuZCBvbiBhIHBhZ2UgYm91bmRhcnkgKi8NCisgICAgICAgICAgICAgICAgaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNzaXplICs9IChwYWdlX2FsaWduKChzaXplX3QpYmFzZSkgLSAoc2l6ZV90KWJhc2UpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGZwID0gbS0+Zm9vdHByaW50ICsgc3NpemU7IC8qIHJlY2hlY2sgbGltaXRzICovDQorDQorICAgICAgICAgICAgICAgIGlmIChzc2l6ZSA+IG5iICYmIHNzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmDQorICAgICAgICAgICAgICAgICAgICAobS0+Zm9vdHByaW50X2xpbWl0ID09IDAgfHwNCisgICAgICAgICAgICAgICAgICAgICAoZnAgPiBtLT5mb290cHJpbnQgJiYgZnAgPD0gbS0+Zm9vdHByaW50X2xpbWl0KSkgJiYNCisgICAgICAgICAgICAgICAgICAgIChiciA9IChjaGFyICopKENBTExfTU9SRUNPUkUoc3NpemUpKSkgPT0gYmFzZSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdGJhc2UgPSBiYXNlOw0KKyAgICAgICAgICAgICAgICAgICAgdHNpemUgPSBzc2l6ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKiBTdWJ0cmFjdCBvdXQgZXhpc3RpbmcgYXZhaWxhYmxlIHRvcCBzcGFjZSBmcm9tIE1PUkVDT1JFIHJlcXVlc3QuICovDQorICAgICAgICAgICAgc3NpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBTWVNfQUxMT0NfUEFERElORyk7DQorDQorICAgICAgICAgICAgLyogVXNlIG1lbSBoZXJlIG9ubHkgaWYgaXQgZGlkIGNvbnRpbnVvdXNseSBleHRlbmQgb2xkIHNwYWNlICovDQorICAgICAgICAgICAgaWYgKHNzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmDQorICAgICAgICAgICAgICAgIChiciA9IChjaGFyICopKENBTExfTU9SRUNPUkUoc3NpemUpKSkgPT0gc3MtPmJhc2UgKyBzcy0+c2l6ZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHRiYXNlID0gYnI7DQorICAgICAgICAgICAgICAgIHRzaXplID0gc3NpemU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKHRiYXNlID09IENNRkFJTCkgICAgICAvKiBDb3BlIHdpdGggcGFydGlhbCBmYWlsdXJlICovDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKGJyICE9IENNRkFJTCkgICAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHNzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmDQorICAgICAgICAgICAgICAgICAgICBzc2l6ZSA8IG5iICsgU1lTX0FMTE9DX1BBRERJTkcpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcgLSBzc2l6ZSk7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZW5kID0gKGNoYXIgKilDQUxMX01PUkVDT1JFKGVzaXplKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kICE9IENNRkFJTCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplICs9IGVzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNlICovDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgQ0FMTF9NT1JFQ09SRSgtc3NpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiciA9IENNRkFJTDsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKGJyICE9IENNRkFJTCkgICAgICAvKiBVc2UgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHRiYXNlID0gYnI7DQorICAgICAgICAgICAgICAgIHRzaXplID0gc3NpemU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGRpc2FibGVfY29udGlndW91cyhtKTsgICAgLyogRG9uJ3QgdHJ5IGNvbnRpZ3VvdXMgcGF0aCBpbiB0aGUgZnV0dXJlICovDQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoSEFWRV9NTUFQICYmIHRiYXNlID09IENNRkFJTCkgICAgLyogVHJ5IE1NQVAgKi8NCisgICAgew0KKyAgICAgICAgY2hhciAqbXAgPSAoY2hhciAqKShDQUxMX01NQVAoYXNpemUpKTsNCisNCisgICAgICAgIGlmIChtcCAhPSBDTUZBSUwpDQorICAgICAgICB7DQorICAgICAgICAgICAgdGJhc2UgPSBtcDsNCisgICAgICAgICAgICB0c2l6ZSA9IGFzaXplOw0KKyAgICAgICAgICAgIG1tYXBfZmxhZyA9IFVTRV9NTUFQX0JJVDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoSEFWRV9NT1JFQ09SRSAmJiB0YmFzZSA9PSBDTUZBSUwpICAgLyogVHJ5IG5vbmNvbnRpZ3VvdXMgTU9SRUNPUkUgKi8NCisgICAgew0KKyAgICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNoYXIgKmJyID0gQ01GQUlMOw0KKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IENNRkFJTDsNCisgICAgICAgICAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOw0KKyAgICAgICAgICAgIGJyID0gKGNoYXIgKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpOw0KKyAgICAgICAgICAgIGVuZCA9IChjaGFyICopKENBTExfTU9SRUNPUkUoMCkpOw0KKyAgICAgICAgICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7DQorDQorICAgICAgICAgICAgaWYgKGJyICE9IENNRkFJTCAmJiBlbmQgIT0gQ01GQUlMICYmIGJyIDwgZW5kKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7DQorDQorICAgICAgICAgICAgICAgIGlmIChzc2l6ZSA+IG5iICsgVE9QX0ZPT1RfU0laRSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdGJhc2UgPSBicjsNCisgICAgICAgICAgICAgICAgICAgIHRzaXplID0gc3NpemU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkNCisgICAgew0KKw0KKyAgICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgICAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG0tPmxlYXN0X2FkZHIgPT0gMCB8fCB0YmFzZSA8IG0tPmxlYXN0X2FkZHIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG0tPnNlZy5iYXNlID0gdGJhc2U7DQorICAgICAgICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsNCisgICAgICAgICAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcF9mbGFnOw0KKyAgICAgICAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsNCisgICAgICAgICAgICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7DQorICAgICAgICAgICAgaW5pdF9iaW5zKG0pOw0KKyNpZiAhT05MWV9NU1BBQ0VTDQorDQorICAgICAgICAgICAgaWYgKGlzX2dsb2JhbChtKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisjZW5kaWYNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIC8qIE9mZnNldCB0b3AgYnkgZW1iZWRkZWQgbWFsbG9jX3N0YXRlICovDQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsNCisgICAgICAgICAgICAgICAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyICopbW4pIC0gVE9QX0ZPT1RfU0laRSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8qIFRyeSB0byBtZXJnZSB3aXRoIGFuIGV4aXN0aW5nIHNlZ21lbnQgKi8NCisgICAgICAgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7DQorDQorICAgICAgICAgICAgLyogT25seSBjb25zaWRlciBtb3N0IHJlY2VudCBzZWdtZW50IGlmIHRyYXZlcnNhbCBzdXBwcmVzc2VkICovDQorICAgICAgICAgICAgd2hpbGUgKHNwICE9IDAgJiYgdGJhc2UgIT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYgKHNwICE9IDAgJiYNCisgICAgICAgICAgICAgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJg0KKyAgICAgICAgICAgICAgICAoc3AtPnNmbGFncyAmIFVTRV9NTUFQX0JJVCkgPT0gbW1hcF9mbGFnICYmDQorICAgICAgICAgICAgICAgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpICAgLyogYXBwZW5kICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsNCisgICAgICAgICAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplICsgdHNpemUpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAodGJhc2UgPCBtLT5sZWFzdF9hZGRyKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgc3AgPSAmbS0+c2VnOw0KKw0KKyAgICAgICAgICAgICAgICB3aGlsZSAoc3AgIT0gMCAmJiBzcC0+YmFzZSAhPSB0YmFzZSArIHRzaXplKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgaWYgKHNwICE9IDAgJiYNCisgICAgICAgICAgICAgICAgICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYNCisgICAgICAgICAgICAgICAgICAgIChzcC0+c2ZsYWdzICYgVVNFX01NQVBfQklUKSA9PSBtbWFwX2ZsYWcpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKm9sZGJhc2UgPSBzcC0+YmFzZTsNCisgICAgICAgICAgICAgICAgICAgIHNwLT5iYXNlID0gdGJhc2U7DQorICAgICAgICAgICAgICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVwZW5kX2FsbG9jKG0sIHRiYXNlLCBvbGRiYXNlLCBuYik7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBhZGRfc2VnbWVudChtLCB0YmFzZSwgdHNpemUsIG1tYXBfZmxhZyk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobmIgPCBtLT50b3BzaXplKSAgIC8qIEFsbG9jYXRlIGZyb20gbmV3IG9yIGV4dGVuZGVkIHRvcCBzcGFjZSAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCByc2l6ZSA9IG0tPnRvcHNpemUgLT0gbmI7DQorICAgICAgICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7DQorICAgICAgICAgICAgbWNodW5rcHRyIHIgPSBtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsNCisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsNCisgICAgICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsNCisgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsNCisgICAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKHApOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8NCitzdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKQ0KK3sNCisgICAgc2l6ZV90IHJlbGVhc2VkID0gMDsNCisgICAgaW50IG5zZWdzID0gMDsNCisgICAgbXNlZ21lbnRwdHIgcHJlZCA9ICZtLT5zZWc7DQorICAgIG1zZWdtZW50cHRyIHNwID0gcHJlZC0+bmV4dDsNCisNCisgICAgd2hpbGUgKHNwICE9IDApDQorICAgIHsNCisgICAgICAgIGNoYXIgKmJhc2UgPSBzcC0+YmFzZTsNCisgICAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7DQorICAgICAgICBtc2VnbWVudHB0ciBuZXh0ID0gc3AtPm5leHQ7DQorICAgICAgICArK25zZWdzOw0KKw0KKyAgICAgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKGJhc2UpOw0KKyAgICAgICAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsNCisNCisgICAgICAgICAgICAvKiBDYW4gdW5tYXAgaWYgZmlyc3QgY2h1bmsgaG9sZHMgZW50aXJlIHNlZ21lbnQgYW5kIG5vdCBwaW5uZWQgKi8NCisgICAgICAgICAgICBpZiAoIWlzX2ludXNlKHApICYmIChjaGFyICopcCArIHBzaXplID49IGJhc2UgKyBzaXplIC0gVE9QX0ZPT1RfU0laRSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsNCisgICAgICAgICAgICAgICAgYXNzZXJ0KHNlZ21lbnRfaG9sZHMoc3AsIChjaGFyICopc3ApKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gbS0+ZHYpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2ID0gMDsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2c2l6ZSA9IDA7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdHApOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZWxlYXNlZCArPSBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgbS0+Zm9vdHByaW50IC09IHNpemU7DQorICAgICAgICAgICAgICAgICAgICAvKiB1bmxpbmsgb2Jzb2xldGVkIHJlY29yZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgc3AgPSBwcmVkOw0KKyAgICAgICAgICAgICAgICAgICAgc3AtPm5leHQgPSBuZXh0Ow0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UgICAvKiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X2xhcmdlX2NodW5rKG0sIHRwLCBwc2l6ZSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpIC8qIHNjYW4gb25seSBmaXJzdCBzZWdtZW50ICovDQorICAgICAgICB7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorDQorICAgICAgICBwcmVkID0gc3A7DQorICAgICAgICBzcCA9IG5leHQ7DQorICAgIH0NCisNCisgICAgLyogUmVzZXQgY2hlY2sgY291bnRlciAqLw0KKyAgICBtLT5yZWxlYXNlX2NoZWNrcyA9ICgoKHNpemVfdCkgbnNlZ3MgPiAoc2l6ZV90KSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKSA/DQorICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpIG5zZWdzIDogKHNpemVfdCkgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSk7DQorICAgIHJldHVybiByZWxlYXNlZDsNCit9DQorDQorc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkNCit7DQorICAgIHNpemVfdCByZWxlYXNlZCA9IDA7DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKw0KKyAgICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpDQorICAgIHsNCisgICAgICAgIHBhZCArPSBUT1BfRk9PVF9TSVpFOyAvKiBlbnN1cmUgZW5vdWdoIHJvb20gZm9yIHNlZ21lbnQgb3ZlcmhlYWQgKi8NCisNCisgICAgICAgIGlmIChtLT50b3BzaXplID4gcGFkKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8qIFNocmluayB0b3Agc3BhY2UgaW4gZ3JhbnVsYXJpdHktc2l6ZSB1bml0cywga2VlcGluZyBhdCBsZWFzdCBvbmUgKi8NCisgICAgICAgICAgICBzaXplX3QgdW5pdCA9IG1wYXJhbXMuZ3JhbnVsYXJpdHk7DQorICAgICAgICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRV9UX09ORSkgKiB1bml0Ow0KKyAgICAgICAgICAgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyICopbS0+dG9wKTsNCisNCisgICAgICAgICAgICBpZiAoIWlzX2V4dGVybl9zZWdtZW50KHNwKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoSEFWRV9NTUFQICYmDQorICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnNpemUgPj0gZXh0cmEgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAhaGFzX3NlZ21lbnRfbGluayhtLCBzcCkpICAgLyogY2FuJ3Qgc2hyaW5rIGlmIHBpbm5lZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gc3AtPnNpemUgLSBleHRyYTsNCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCluZXdzaXplOyAvKiBwbGFjYXRlIHBlb3BsZSBjb21waWxpbmcgLVd1bnVzZWQtdmFyaWFibGUgKi8NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIG5ld3NpemUsIDApICE9IE1GQUlMKSB8fA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0FMTF9NVU5NQVAoc3AtPmJhc2UgKyBuZXdzaXplLCBleHRyYSkgPT0gMCkpDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlZCA9IGV4dHJhOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChIQVZFX01PUkVDT1JFKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEgPj0gSEFMRl9NQVhfU0laRV9UKSAvKiBBdm9pZCB3cmFwcGluZyBuZWdhdGl2ZSAqLw0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gKEhBTEZfTUFYX1NJWkVfVCkgKyBTSVpFX1RfT05FIC0gdW5pdDsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7DQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGVuZCBvZiBtZW1vcnkgaXMgd2hlcmUgd2UgbGFzdCBzZXQgaXQuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb2xkX2JyID0gKGNoYXIgKikoQ0FMTF9NT1JFQ09SRSgwKSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZF9iciA9PSBzcC0+YmFzZSArIHNwLT5zaXplKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVsX2JyID0gKGNoYXIgKikoQ0FMTF9NT1JFQ09SRSgtZXh0cmEpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV3X2JyID0gKGNoYXIgKikoQ0FMTF9NT1JFQ09SRSgwKSk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYmIG5ld19iciA8IG9sZF9icikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZWQgPSBvbGRfYnIgLSBuZXdfYnI7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChyZWxlYXNlZCAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc3AtPnNpemUgLT0gcmVsZWFzZWQ7DQorICAgICAgICAgICAgICAgIG0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsNCisgICAgICAgICAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOw0KKyAgICAgICAgICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8NCisgICAgICAgIGlmIChIQVZFX01NQVApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVsZWFzZWQgKz0gcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobSk7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBPbiBmYWlsdXJlLCBkaXNhYmxlIGF1dG90cmltIHRvIGF2b2lkIHJlcGVhdGVkIGZhaWxlZCBmdXR1cmUgY2FsbHMgKi8NCisgICAgICAgIGlmIChyZWxlYXNlZCA9PSAwICYmIG0tPnRvcHNpemUgPiBtLT50cmltX2NoZWNrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG0tPnRyaW1fY2hlY2sgPSBNQVhfU0laRV9UOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAocmVsZWFzZWQgIT0gMCkgPyAxIDogMDsNCit9DQorDQorLyogQ29uc29saWRhdGUgYW5kIGJpbiBhIGNodW5rLiBEaWZmZXJzIGZyb20gZXhwb3J0ZWQgdmVyc2lvbnMNCisgICBvZiBmcmVlIG1haW5seSBpbiB0aGF0IHRoZSBjaHVuayBuZWVkIG5vdCBiZSBtYXJrZWQgYXMgaW51c2UuDQorKi8NCitzdGF0aWMgdm9pZCBkaXNwb3NlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKQ0KK3sNCisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7DQorDQorICAgIGlmICghcGludXNlKHApKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcHJldjsNCisgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsNCisNCisgICAgICAgIGlmIChpc19tbWFwcGVkKHApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsNCisNCisgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIgKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbS0+Zm9vdHByaW50IC09IHBzaXplOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgICAgICBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsNCisgICAgICAgIHBzaXplICs9IHByZXZzaXplOw0KKyAgICAgICAgcCA9IHByZXY7DQorDQorICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHByZXYpKSkgICAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChwICE9IG0tPmR2KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKG0sIHAsIHByZXZzaXplKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbS0+ZHZzaXplID0gcHNpemU7DQorICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBuZXh0KSkpDQorICAgIHsNCisgICAgICAgIGlmICghY2ludXNlKG5leHQpKSAgICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovDQorICAgICAgICB7DQorICAgICAgICAgICAgaWYgKG5leHQgPT0gbS0+dG9wKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gbS0+dG9wc2l6ZSArPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgbS0+dG9wID0gcDsNCisgICAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsNCisNCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gbS0+ZHYpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2ID0gMDsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2c2l6ZSA9IDA7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IG0tPmR2KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHBzaXplOw0KKyAgICAgICAgICAgICAgICBtLT5kdiA9IHA7DQorICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOw0KKyAgICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsNCisgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKG0sIG5leHQsIG5zaXplKTsNCisgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gbS0+ZHYpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2c2l6ZSA9IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGluc2VydF9jaHVuayhtLCBwLCBwc2l6ZSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsNCisgICAgfQ0KK30NCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLw0KK3N0YXRpYyB2b2lkICp0bWFsbG9jX2xhcmdlKG1zdGF0ZSBtLCBzaXplX3QgbmIpDQorew0KKyAgICB0Y2h1bmtwdHIgdiA9IDA7DQorICAgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8NCisgICAgdGNodW5rcHRyIHQ7DQorICAgIGJpbmRleF90IGlkeDsNCisgICAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOw0KKw0KKyAgICBpZiAoKHQgPSAqdHJlZWJpbl9hdChtLCBpZHgpKSAhPSAwKQ0KKyAgICB7DQorICAgICAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLw0KKyAgICAgICAgc2l6ZV90IHNpemViaXRzID0gbmIgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGlkeCk7DQorICAgICAgICB0Y2h1bmtwdHIgcnN0ID0gMDsgIC8qIFRoZSBkZWVwZXN0IHVudGFrZW4gcmlnaHQgc3VidHJlZSAqLw0KKw0KKyAgICAgICAgZm9yICg7OykNCisgICAgICAgIHsNCisgICAgICAgICAgICB0Y2h1bmtwdHIgcnQ7DQorICAgICAgICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsNCisNCisgICAgICAgICAgICBpZiAodHJlbSA8IHJzaXplKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdiA9IHQ7DQorDQorICAgICAgICAgICAgICAgIGlmICgocnNpemUgPSB0cmVtKSA9PSAwKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBydCA9IHQtPmNoaWxkWzFdOw0KKyAgICAgICAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFIC0gU0laRV9UX09ORSkpICYgMV07DQorDQorICAgICAgICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJzdCA9IHJ0Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAodCA9PSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4gbmIgKi8NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIHNpemViaXRzIDw8PSAxOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICh0ID09IDAgJiYgdiA9PSAwKSAgIC8qIHNldCB0IHRvIHJvb3Qgb2YgbmV4dCBub24tZW1wdHkgdHJlZWJpbiAqLw0KKyAgICB7DQorICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IGxlZnRfYml0cyhpZHgyYml0KGlkeCkpICYgbS0+dHJlZW1hcDsNCisNCisgICAgICAgIGlmIChsZWZ0Yml0cyAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJpbmRleF90IGk7DQorICAgICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOw0KKyAgICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7DQorICAgICAgICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHdoaWxlICh0ICE9IDApICAgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8NCisgICAgew0KKyAgICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsNCisNCisgICAgICAgIGlmICh0cmVtIDwgcnNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgcnNpemUgPSB0cmVtOw0KKyAgICAgICAgICAgIHYgPSB0Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdCA9IGxlZnRtb3N0X2NoaWxkKHQpOw0KKyAgICB9DQorDQorICAgIC8qICBJZiBkdiBpcyBhIGJldHRlciBmaXQsIHJldHVybiAwIHNvIG1hbGxvYyB3aWxsIHVzZSBpdCAqLw0KKyAgICBpZiAodiAhPSAwICYmIHJzaXplIDwgKHNpemVfdCkobS0+ZHZzaXplIC0gbmIpKQ0KKyAgICB7DQorICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgICAvKiBzcGxpdCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOw0KKyAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7DQorDQorICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7DQorDQorICAgICAgICAgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7DQorICAgICAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiBhbGxvY2F0ZSBhIHNtYWxsIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLw0KK3N0YXRpYyB2b2lkICp0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpDQorew0KKyAgICB0Y2h1bmtwdHIgdCwgdjsNCisgICAgc2l6ZV90IHJzaXplOw0KKyAgICBiaW5kZXhfdCBpOw0KKyAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChtLT50cmVlbWFwKTsNCisgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsNCisgICAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsNCisgICAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsNCisNCisgICAgd2hpbGUgKCh0ID0gbGVmdG1vc3RfY2hpbGQodCkpICE9IDApDQorICAgIHsNCisgICAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7DQorDQorICAgICAgICBpZiAodHJlbSA8IHJzaXplKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJzaXplID0gdHJlbTsNCisgICAgICAgICAgICB2ID0gdDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkNCisgICAgew0KKyAgICAgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7DQorICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOw0KKw0KKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOw0KKw0KKyAgICAgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7DQorICAgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgIHJlcGxhY2VfZHYobSwgciwgcnNpemUpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2lmICFPTkxZX01TUEFDRVMNCisNCit2b2lkICpkbG1hbGxvYyhzaXplX3QgYnl0ZXMpDQorew0KKyAgICAvKg0KKyAgICAgICBCYXNpYyBhbGdvcml0aG06DQorICAgICAgIElmIGEgc21hbGwgcmVxdWVzdCAoPCAyNTYgYnl0ZXMgbWludXMgcGVyLWNodW5rIG92ZXJoZWFkKToNCisgICAgICAgICAxLiBJZiBvbmUgZXhpc3RzLCB1c2UgYSByZW1haW5kZXJsZXNzIGNodW5rIGluIGFzc29jaWF0ZWQgc21hbGxiaW4uDQorICAgICAgICAgICAgKFJlbWFpbmRlcmxlc3MgbWVhbnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8NCisgICAgICAgICAgICByZXByZXNlbnQgYXMgYSBjaHVuay4pDQorICAgICAgICAgMi4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSBkdiBjaHVuaywgd2hpY2ggaXMgbm9ybWFsbHkgdGhlDQorICAgICAgICAgICAgY2h1bmsgYWRqYWNlbnQgdG8gdGhlIG9uZSB1c2VkIGZvciB0aGUgbW9zdCByZWNlbnQgc21hbGwgcmVxdWVzdC4NCisgICAgICAgICAzLiBJZiBvbmUgZXhpc3RzLCBzcGxpdCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGNodW5rIGluIGEgYmluLA0KKyAgICAgICAgICAgIHNhdmluZyByZW1haW5kZXIgaW4gZHYuDQorICAgICAgICAgNC4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuDQorICAgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQNCisgICAgICAgT3RoZXJ3aXNlLCBmb3IgYSBsYXJnZSByZXF1ZXN0Og0KKyAgICAgICAgIDEuIEZpbmQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBiaW5uZWQgY2h1bmsgdGhhdCBmaXRzLCBhbmQgdXNlIGl0DQorICAgICAgICAgICAgaWYgaXQgaXMgYmV0dGVyIGZpdHRpbmcgdGhhbiBkdiBjaHVuaywgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4NCisgICAgICAgICAyLiBJZiBiZXR0ZXIgZml0dGluZyB0aGFuIGFueSBiaW5uZWQgY2h1bmssIHVzZSB0aGUgZHYgY2h1bmsuDQorICAgICAgICAgMy4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuDQorICAgICAgICAgNC4gSWYgcmVxdWVzdCBzaXplID49IG1tYXAgdGhyZXNob2xkLCB0cnkgdG8gZGlyZWN0bHkgbW1hcCB0aGlzIGNodW5rLg0KKyAgICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0DQorDQorICAgICAgIFRoZSB1Z2x5IGdvdG8ncyBoZXJlIGVuc3VyZSB0aGF0IHBvc3RhY3Rpb24gb2NjdXJzIGFsb25nIGFsbCBwYXRocy4NCisgICAgKi8NCisNCisjaWYgVVNFX0xPQ0tTDQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOyAvKiBpbml0aWFsaXplIGluIHN5c19hbGxvYyBpZiBub3QgdXNpbmcgbG9ja3MgKi8NCisjZW5kaWYNCisNCisgICAgaWYgKCFQUkVBQ1RJT04oZ20pKQ0KKyAgICB7DQorICAgICAgICB2b2lkICptZW07DQorICAgICAgICBzaXplX3QgbmI7DQorDQorICAgICAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpDQorICAgICAgICB7DQorICAgICAgICAgICAgYmluZGV4X3QgaWR4Ow0KKyAgICAgICAgICAgIGJpbm1hcF90IHNtYWxsYml0czsNCisgICAgICAgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKSA/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOw0KKyAgICAgICAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsNCisgICAgICAgICAgICBzbWFsbGJpdHMgPSBnbS0+c21hbGxtYXAgPj4gaWR4Ow0KKw0KKyAgICAgICAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgICAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIGIsIHA7DQorICAgICAgICAgICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8NCisgICAgICAgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpZHgpOw0KKyAgICAgICAgICAgICAgICBwID0gYi0+ZmQ7DQorICAgICAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsNCisgICAgICAgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpZHgpOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsNCisgICAgICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZWxzZSBpZiAobmIgPiBnbS0+ZHZzaXplKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKHNtYWxsYml0cyAhPSAwKSAgIC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOw0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgYmluZGV4X3QgaTsNCisgICAgICAgICAgICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7DQorICAgICAgICAgICAgICAgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7DQorICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpKTsNCisgICAgICAgICAgICAgICAgICAgIHAgPSBiLT5mZDsNCisgICAgICAgICAgICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7DQorICAgICAgICAgICAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7DQorDQorICAgICAgICAgICAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlX2R2KGdtLCByLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7DQorICAgICAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChnbSwgbmIpKSAhPSAwKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBuYiA9IE1BWF9TSVpFX1Q7ICAgIC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsNCisNCisgICAgICAgICAgICBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShnbSwgbmIpKSAhPSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOw0KKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKG5iIDw9IGdtLT5kdnNpemUpDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IHJzaXplID0gZ20tPmR2c2l6ZSAtIG5iOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gZ20tPmR2Ow0KKw0KKyAgICAgICAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgICAvKiBzcGxpdCBkdiAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIHIgPSBnbS0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgIGdtLT5kdnNpemUgPSByc2l6ZTsNCisgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlICAgLyogZXhoYXVzdCBkdiAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IGR2cyA9IGdtLT5kdnNpemU7DQorICAgICAgICAgICAgICAgIGdtLT5kdnNpemUgPSAwOw0KKyAgICAgICAgICAgICAgICBnbS0+ZHYgPSAwOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgZHZzKTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsNCisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICB9DQorDQorICAgICAgICBlbHNlIGlmIChuYiA8IGdtLT50b3BzaXplKSAgIC8qIFNwbGl0IHRvcCAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gZ20tPnRvcDsNCisgICAgICAgICAgICBtY2h1bmtwdHIgciA9IGdtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsNCisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7DQorICAgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7DQorICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOw0KKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgIH0NCisNCisgICAgICAgIG1lbSA9IHN5c19hbGxvYyhnbSwgbmIpOw0KKw0KK3Bvc3RhY3Rpb246DQorICAgICAgICBQT1NUQUNUSU9OKGdtKTsNCisgICAgICAgIHJldHVybiBtZW07DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZnJlZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCit2b2lkIGRsZnJlZSh2b2lkICptZW0pDQorew0KKyAgICAvKg0KKyAgICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWVkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nDQorICAgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQNCisgICAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4NCisgICAgKi8NCisNCisgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsNCisjaWYgRk9PVEVSUw0KKyAgICAgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7DQorDQorICAgICAgICBpZiAoIW9rX21hZ2ljKGZtKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisjZWxzZSAvKiBGT09URVJTICovDQorI2RlZmluZSBmbSBnbQ0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorICAgICAgICBpZiAoIVBSRUFDVElPTihmbSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOw0KKw0KKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2ludXNlKHApKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7DQorDQorICAgICAgICAgICAgICAgIGlmICghcGludXNlKHApKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyICopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHByZXY7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSAgIC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCAhPSBmbS0+ZHYpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaW51c2UobmV4dCkpICAgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8NCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSBmbS0+dG9wKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT50b3AgPSBwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5kdiA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gMDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3RyaW0oZm0sIDApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHYgPSBwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc21hbGwocHNpemUpKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRfbGFyZ2VfY2h1bmsoZm0sIHRwLCBwc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm0tPnJlbGVhc2VfY2hlY2tzID09IDApDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhmbSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKw0KK2Vycm9yYWN0aW9uOg0KKyAgICAgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7DQorcG9zdGFjdGlvbjoNCisgICAgICAgICAgICBQT1NUQUNUSU9OKGZtKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyNpZiAhRk9PVEVSUw0KKyN1bmRlZiBmbQ0KKyNlbmRpZiAvKiBGT09URVJTICovDQorfQ0KKw0KK3ZvaWQgKmRsY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKQ0KK3sNCisgICAgdm9pZCAqbWVtOw0KKyAgICBzaXplX3QgcmVxID0gMDsNCisNCisgICAgaWYgKG5fZWxlbWVudHMgIT0gMCkNCisgICAgew0KKyAgICAgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsNCisNCisgICAgICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJg0KKyAgICAgICAgICAgIChyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVxID0gTUFYX1NJWkVfVDsgICAgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovDQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgbWVtID0gZGxtYWxsb2MocmVxKTsNCisNCisgICAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkNCisgICAgew0KKyAgICAgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbWVtOw0KK30NCisNCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLw0KKw0KKy8qIC0tLS0tLS0tLS0tLSBJbnRlcm5hbCBzdXBwb3J0IGZvciByZWFsbG9jLCBtZW1hbGlnbiwgZXRjIC0tLS0tLS0tLS0tLS0tICovDQorDQorLyogVHJ5IHRvIHJlYWxsb2M7IG9ubHkgaW4tcGxhY2UgdW5sZXNzIGNhbl9tb3ZlIHRydWUgKi8NCitzdGF0aWMgbWNodW5rcHRyIHRyeV9yZWFsbG9jX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IG5iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbl9tb3ZlKQ0KK3sNCisgICAgbWNodW5rcHRyIG5ld3AgPSAwOw0KKyAgICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShwKTsNCisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBvbGRzaXplKTsNCisNCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBwKSAmJiBva19pbnVzZShwKSAmJg0KKyAgICAgICAgICAgICAgICBva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpDQorICAgIHsNCisgICAgICAgIGlmIChpc19tbWFwcGVkKHApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBwLCBuYiwgY2FuX21vdmUpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAob2xkc2l6ZSA+PSBuYikgICAgICAgICAgICAgICAvKiBhbHJlYWR5IGJpZyBlbm91Z2ggKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7DQorDQorICAgICAgICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSAgICAgICAgLyogc3BsaXQgb2ZmIHJlbWFpbmRlciAqLw0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7DQorICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCByLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgIGRpc3Bvc2VfY2h1bmsobSwgciwgcnNpemUpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBuZXdwID0gcDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wKSAgICAvKiBleHRlbmQgaW50byB0b3AgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAob2xkc2l6ZSArIG0tPnRvcHNpemUgPiBuYikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7DQorICAgICAgICAgICAgICAgIHNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOw0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOw0KKyAgICAgICAgICAgICAgICBuZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHwgUElOVVNFX0JJVDsNCisgICAgICAgICAgICAgICAgbS0+dG9wID0gbmV3dG9wOw0KKyAgICAgICAgICAgICAgICBtLT50b3BzaXplID0gbmV3dG9wc2l6ZTsNCisgICAgICAgICAgICAgICAgbmV3cCA9IHA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBtLT5kdikgICAvKiBleHRlbmQgaW50byBkdiAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCBkdnMgPSBtLT5kdnNpemU7DQorDQorICAgICAgICAgICAgaWYgKG9sZHNpemUgKyBkdnMgPj0gbmIpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBvbGRzaXplICsgZHZzIC0gbmI7DQorDQorICAgICAgICAgICAgICAgIGlmIChkc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbiA9IGNodW5rX3BsdXNfb2Zmc2V0KHIsIGRzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgZHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgY2xlYXJfcGludXNlKG4pOw0KKyAgICAgICAgICAgICAgICAgICAgbS0+ZHZzaXplID0gZHNpemU7DQorICAgICAgICAgICAgICAgICAgICBtLT5kdiA9IHI7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZSAgIC8qIGV4aGF1c3QgZHYgKi8NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBvbGRzaXplICsgZHZzOw0KKyAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5ld3NpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgbS0+ZHZzaXplID0gMDsNCisgICAgICAgICAgICAgICAgICAgIG0tPmR2ID0gMDsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBuZXdwID0gcDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmICghY2ludXNlKG5leHQpKSAgIC8qIGV4dGVuZCBpbnRvIG5leHQgZnJlZSBjaHVuayAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCBuZXh0c2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsNCisNCisgICAgICAgICAgICBpZiAob2xkc2l6ZSArIG5leHRzaXplID49IG5iKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgc2l6ZV90IHJzaXplID0gb2xkc2l6ZSArIG5leHRzaXplIC0gbmI7DQorICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhtLCBuZXh0LCBuZXh0c2l6ZSk7DQorDQorICAgICAgICAgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IG9sZHNpemUgKyBuZXh0c2l6ZTsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuZXdzaXplKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCByLCByc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICBkaXNwb3NlX2NodW5rKG0sIHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBuZXdwID0gcDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgY2h1bmsybWVtKHApKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbmV3cDsNCit9DQorDQorc3RhdGljIHZvaWQgKmludGVybmFsX21lbWFsaWduKG1zdGF0ZSBtLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICB2b2lkICptZW0gPSAwOw0KKw0KKyAgICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKSAvKiBtdXN0IGJlIGF0IGxlYXN0IGEgbWluaW11bSBjaHVuayBzaXplICovDQorICAgIHsNCisgICAgICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOw0KKyAgICB9DQorDQorICAgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIFNJWkVfVF9PTkUpKSAhPSAwKSAvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovDQorICAgIHsNCisgICAgICAgIHNpemVfdCBhID0gTUFMTE9DX0FMSUdOTUVOVCA8PCAxOw0KKw0KKyAgICAgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIHsgYSA8PD0gMTsgfQ0KKw0KKyAgICAgICAgYWxpZ25tZW50ID0gYTsNCisgICAgfQ0KKw0KKyAgICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QgLSBhbGlnbm1lbnQpDQorICAgIHsNCisgICAgICAgIGlmIChtICE9IDApICAgIC8qIFRlc3QgaXNuJ3QgbmVlZGVkIGJ1dCBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLw0KKyAgICAgICAgew0KKyAgICAgICAgICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7DQorICAgICAgICBzaXplX3QgcmVxID0gbmIgKyBhbGlnbm1lbnQgKyBNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEOw0KKyAgICAgICAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7DQorDQorICAgICAgICBpZiAobWVtICE9IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsNCisNCisgICAgICAgICAgICBpZiAoUFJFQUNUSU9OKG0pKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKSAgIC8qIG1pc2FsaWduZWQgKi8NCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIC8qDQorICAgICAgICAgICAgICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlDQorICAgICAgICAgICAgICAgICAgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQgbGVhc3QgTUlOX0NIVU5LX1NJWkUsIGlmDQorICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4NCisgICAgICAgICAgICAgICAgICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4NCisgICAgICAgICAgICAgICAgICBXZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdCB0aGlzIGlzIGFsd2F5cw0KKyAgICAgICAgICAgICAgICAgIHBvc3NpYmxlLg0KKyAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICBjaGFyICpiciA9IChjaGFyICopbWVtMmNodW5rKChzaXplX3QpKCgoc2l6ZV90KSgoY2hhciAqKW1lbSArIGFsaWdubWVudCAtDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpKSAmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWFsaWdubWVudCkpOw0KKyAgICAgICAgICAgICAgICBjaGFyICpwb3MgPSAoKHNpemVfdCkoYnIgLSAoY2hhciAqKShwKSkgPj0gTUlOX0NIVU5LX1NJWkUpID8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnIgOiBiciArIGFsaWdubWVudDsNCisgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsNCisgICAgICAgICAgICAgICAgc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIgKikocCk7DQorICAgICAgICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7DQorDQorICAgICAgICAgICAgICAgIGlmIChpc19tbWFwcGVkKHApKSAgIC8qIEZvciBtbWFwcGVkIGNodW5rcywganVzdCBhZGp1c3Qgb2Zmc2V0ICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgbmV3cC0+aGVhZCA9IG5ld3NpemU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgZWxzZSAgIC8qIE90aGVyd2lzZSwgZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuZXdzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBsZWFkc2l6ZSk7DQorICAgICAgICAgICAgICAgICAgICBkaXNwb3NlX2NodW5rKG0sIHAsIGxlYWRzaXplKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBwID0gbmV3cDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgLyogR2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhlIGVuZCAqLw0KKyAgICAgICAgICAgIGlmICghaXNfbW1hcHBlZChwKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+IG5iICsgTUlOX0NIVU5LX1NJWkUpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsNCisgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgZGlzcG9zZV9jaHVuayhtLCByZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7DQorICAgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA+PSBuYik7DQorICAgICAgICAgICAgYXNzZXJ0KCgoc2l6ZV90KW1lbSAmIChhbGlnbm1lbnQgLSAxKSkgPT0gMCk7DQorICAgICAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7DQorICAgICAgICAgICAgUE9TVEFDVElPTihtKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbWVtOw0KK30NCisNCisvKg0KKyAgQ29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nDQorICAgIGFsbCBvZiB0aGUgY29tYmluYXRpb25zIHRoYXQgY2FuIHJlc3VsdC4NCisgIFRoZSBvcHRzIGFyZyBoYXM6DQorICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNpbmcgc2l6ZXNbMF0pDQorICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkDQorKi8NCitzdGF0aWMgdm9pZCAqKmlhbGxvYyhtc3RhdGUgbSwNCisgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbl9lbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnNpemVzLA0KKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRzLA0KKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNodW5rc1tdKQ0KK3sNCisNCisgICAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLw0KKyAgICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8NCisgICAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLw0KKyAgICB2b2lkICAgICAqbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLw0KKyAgICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8NCisgICAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovDQorICAgIHZvaWQgICAgKiptYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLw0KKyAgICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8NCisgICAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8NCisgICAgc2l6ZV90ICAgIHNpemU7DQorICAgIHNpemVfdCAgICBpOw0KKw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisNCisgICAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLw0KKyAgICBpZiAoY2h1bmtzICE9IDApDQorICAgIHsNCisgICAgICAgIGlmIChuX2VsZW1lbnRzID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGNodW5rczsgICAgLyogbm90aGluZyB0byBkbyAqLw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbWFycmF5ID0gY2h1bmtzOw0KKyAgICAgICAgYXJyYXlfc2l6ZSA9IDA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLw0KKyAgICAgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gKHZvaWQgKiopaW50ZXJuYWxfbWFsbG9jKG0sIDApOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbWFycmF5ID0gMDsNCisgICAgICAgIGFycmF5X3NpemUgPSByZXF1ZXN0MnNpemUobl9lbGVtZW50cyAqIChzaXplb2Yodm9pZCAqKSkpOw0KKyAgICB9DQorDQorICAgIC8qIGNvbXB1dGUgdG90YWwgZWxlbWVudCBzaXplICovDQorICAgIGlmIChvcHRzICYgMHgxKSAgIC8qIGFsbC1zYW1lLXNpemUgKi8NCisgICAgew0KKyAgICAgICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7DQorICAgICAgICBjb250ZW50c19zaXplID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsNCisgICAgfQ0KKyAgICBlbHNlICAgLyogYWRkIHVwIGFsbCB0aGUgc2l6ZXMgKi8NCisgICAgew0KKyAgICAgICAgZWxlbWVudF9zaXplID0gMDsNCisgICAgICAgIGNvbnRlbnRzX3NpemUgPSAwOw0KKw0KKyAgICAgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpDQorICAgICAgICB7DQorICAgICAgICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHNpemUgPSBjb250ZW50c19zaXplICsgYXJyYXlfc2l6ZTsNCisNCisgICAgLyoNCisgICAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4gIEZpcnN0IGRpc2FibGUgZGlyZWN0LW1tYXBwaW5nIHNvDQorICAgICAgIG1hbGxvYyB3b24ndCB1c2UgaXQsIHNpbmNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyDQorICAgICAgIGZyZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbCB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdpb24uDQorICAgICovDQorICAgIHdhc19lbmFibGVkID0gdXNlX21tYXAobSk7DQorICAgIGRpc2FibGVfbW1hcChtKTsNCisgICAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHNpemUgLSBDSFVOS19PVkVSSEVBRCk7DQorDQorICAgIGlmICh3YXNfZW5hYmxlZCkNCisgICAgew0KKyAgICAgICAgZW5hYmxlX21tYXAobSk7DQorICAgIH0NCisNCisgICAgaWYgKG1lbSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAoUFJFQUNUSU9OKG0pKSB7IHJldHVybiAwOyB9DQorDQorICAgIHAgPSBtZW0yY2h1bmsobWVtKTsNCisgICAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7DQorDQorICAgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7DQorDQorICAgIGlmIChvcHRzICYgMHgyKSAgICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIgdGhlIGVsZW1lbnRzICovDQorICAgIHsNCisgICAgICAgIG1lbXNldCgoc2l6ZV90ICopbWVtLCAwLCByZW1haW5kZXJfc2l6ZSAtIFNJWkVfVF9TSVpFIC0gYXJyYXlfc2l6ZSk7DQorICAgIH0NCisNCisgICAgLyogSWYgbm90IHByb3ZpZGVkLCBhbGxvY2F0ZSB0aGUgcG9pbnRlciBhcnJheSBhcyBmaW5hbCBwYXJ0IG9mIGNodW5rICovDQorICAgIGlmIChtYXJyYXkgPT0gMCkNCisgICAgew0KKyAgICAgICAgc2l6ZV90ICBhcnJheV9jaHVua19zaXplOw0KKyAgICAgICAgYXJyYXlfY2h1bmsgPSBjaHVua19wbHVzX29mZnNldChwLCBjb250ZW50c19zaXplKTsNCisgICAgICAgIGFycmF5X2NodW5rX3NpemUgPSByZW1haW5kZXJfc2l6ZSAtIGNvbnRlbnRzX3NpemU7DQorICAgICAgICBtYXJyYXkgPSAodm9pZCAqKikoY2h1bmsybWVtKGFycmF5X2NodW5rKSk7DQorICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIGFycmF5X2NodW5rLCBhcnJheV9jaHVua19zaXplKTsNCisgICAgICAgIHJlbWFpbmRlcl9zaXplID0gY29udGVudHNfc2l6ZTsNCisgICAgfQ0KKw0KKyAgICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8NCisgICAgZm9yIChpID0gMDsgOyArK2kpDQorICAgIHsNCisgICAgICAgIG1hcnJheVtpXSA9IGNodW5rMm1lbShwKTsNCisNCisgICAgICAgIGlmIChpICE9IG5fZWxlbWVudHMgLSAxKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemUgPSBlbGVtZW50X3NpemU7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHNpemUgPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOw0KKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgc2l6ZSk7DQorICAgICAgICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSAgIC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMgYW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8NCisgICAgICAgIHsNCisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHJlbWFpbmRlcl9zaXplKTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyNpZiBERUJVRw0KKw0KKyAgICBpZiAobWFycmF5ICE9IGNodW5rcykNCisgICAgew0KKyAgICAgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8NCisgICAgICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gZWxlbWVudF9zaXplKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gcmVxdWVzdDJzaXplKHNpemVzW2ldKSk7DQorICAgICAgICB9DQorDQorICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5KSk7DQorICAgIH0NCisNCisgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpDQorICAgIHsNCisgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsNCisgICAgfQ0KKw0KKyNlbmRpZiAvKiBERUJVRyAqLw0KKw0KKyAgICBQT1NUQUNUSU9OKG0pOw0KKyAgICByZXR1cm4gbWFycmF5Ow0KK30NCisNCisvKiBUcnkgdG8gZnJlZSBhbGwgcG9pbnRlcnMgaW4gdGhlIGdpdmVuIGFycmF5Lg0KKyAgIE5vdGU6IHRoaXMgY291bGQgYmUgbWFkZSBmYXN0ZXIsIGJ5IGRlbGF5aW5nIGNvbnNvbGlkYXRpb24sDQorICAgYXQgdGhlIHByaWNlIG9mIGRpc2FibGluZyBzb21lIHVzZXIgaW50ZWdyaXR5IGNoZWNrcywgV2UNCisgICBzdGlsbCBvcHRpbWl6ZSBzb21lIGNvbnNvbGlkYXRpb25zIGJ5IGNvbWJpbmluZyBhZGphY2VudA0KKyAgIGNodW5rcyBiZWZvcmUgZnJlZWluZywgd2hpY2ggd2lsbCBvY2N1ciBvZnRlbiBpZiBhbGxvY2F0ZWQNCisgICB3aXRoIGlhbGxvYyBvciB0aGUgYXJyYXkgaXMgc29ydGVkLg0KKyovDQorc3RhdGljIHNpemVfdCBpbnRlcm5hbF9idWxrX2ZyZWUobXN0YXRlIG0sIHZvaWQgKmFycmF5W10sIHNpemVfdCBuZWxlbSkNCit7DQorICAgIHNpemVfdCB1bmZyZWVkID0gMDsNCisNCisgICAgaWYgKCFQUkVBQ1RJT04obSkpDQorICAgIHsNCisgICAgICAgIHZvaWQgKiphOw0KKyAgICAgICAgdm9pZCAqKmZlbmNlID0gJihhcnJheVtuZWxlbV0pOw0KKw0KKyAgICAgICAgZm9yIChhID0gYXJyYXk7IGEgIT0gZmVuY2U7ICsrYSkNCisgICAgICAgIHsNCisgICAgICAgICAgICB2b2lkICptZW0gPSAqYTsNCisNCisgICAgICAgICAgICBpZiAobWVtICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOw0KKyAgICAgICAgICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7DQorI2lmIEZPT1RFUlMNCisNCisgICAgICAgICAgICAgICAgaWYgKGdldF9tc3RhdGVfZm9yKHApICE9IG0pDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICsrdW5mcmVlZDsNCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgICAgICAgICB9DQorDQorI2VuZGlmDQorICAgICAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOw0KKyAgICAgICAgICAgICAgICAqYSA9IDA7DQorDQorICAgICAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgcCkgJiYgb2tfaW51c2UocCkpKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB2b2lkICoqYiA9IGEgKyAxOyAgLyogdHJ5IHRvIG1lcmdlIHdpdGggbmV4dCBjaHVuayAqLw0KKyAgICAgICAgICAgICAgICAgICAgbWNodW5rcHRyIG5leHQgPSBuZXh0X2NodW5rKHApOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGIgIT0gZmVuY2UgJiYgKmIgPT0gY2h1bmsybWVtKG5leHQpKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gY2h1bmtzaXplKG5leHQpICsgcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5ld3NpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICpiID0gY2h1bmsybWVtKHApOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VfY2h1bmsobSwgcCwgcHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChzaG91bGRfdHJpbShtLCBtLT50b3BzaXplKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzeXNfdHJpbShtLCAwKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIFBPU1RBQ1RJT04obSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHVuZnJlZWQ7DQorfQ0KKw0KKy8qIFRyYXZlcnNhbCAqLw0KKyNpZiBNQUxMT0NfSU5TUEVDVF9BTEwNCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9pbnNwZWN0X2FsbChtc3RhdGUgbSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplbmQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRfYnl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYXJnKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpDQorew0KKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpDQorICAgIHsNCisgICAgICAgIG1jaHVua3B0ciB0b3AgPSBtLT50b3A7DQorICAgICAgICBtc2VnbWVudHB0ciBzOw0KKw0KKyAgICAgICAgZm9yIChzID0gJm0tPnNlZzsgcyAhPSAwOyBzID0gcy0+bmV4dCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOw0KKw0KKyAgICAgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IG5leHRfY2h1bmsocSk7DQorICAgICAgICAgICAgICAgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsNCisgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWQ7DQorICAgICAgICAgICAgICAgIHZvaWQgKnN0YXJ0Ow0KKw0KKyAgICAgICAgICAgICAgICBpZiAoaXNfaW51c2UocSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBzeiAtIENIVU5LX09WRVJIRUFEOyAvKiBtdXN0IG5vdCBiZSBtbWFwcGVkICovDQorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGNodW5rMm1lbShxKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHVzZWQgPSAwOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NtYWxsKHN6KSkgICAgICAgLyogb2Zmc2V0IGJ5IHBvc3NpYmxlIGJvb2trZWVwaW5nICovDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAodm9pZCAqKSgoY2hhciAqKXEgKyBzaXplb2Yoc3RydWN0IG1hbGxvY19jaHVuaykpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKHZvaWQgKikoKGNoYXIgKilxICsgc2l6ZW9mKHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuaykpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmIChzdGFydCA8ICh2b2lkICopbmV4dCkgLyogc2tpcCBpZiBhbGwgc3BhY2UgaXMgYm9va2tlZXBpbmcgKi8NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihzdGFydCwgbmV4dCwgdXNlZCwgYXJnKTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAocSA9PSB0b3ApDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHEgPSBuZXh0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KK30NCisjZW5kaWYgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tIEV4cG9ydGVkIHJlYWxsb2MsIG1lbWFsaWduLCBldGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjaWYgIU9OTFlfTVNQQUNFUw0KKw0KK3ZvaWQgKmRscmVhbGxvYyh2b2lkICpvbGRtZW0sIHNpemVfdCBieXRlcykNCit7DQorICAgIHZvaWQgKm1lbSA9IDA7DQorDQorICAgIGlmIChvbGRtZW0gPT0gMCkNCisgICAgew0KKyAgICAgICAgbWVtID0gZGxtYWxsb2MoYnl0ZXMpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQ0KKyAgICB7DQorICAgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047DQorICAgIH0NCisNCisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTDQorICAgIGVsc2UgaWYgKGJ5dGVzID09IDApDQorICAgIHsNCisgICAgICAgIGRsZnJlZShvbGRtZW0pOw0KKyAgICB9DQorDQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLw0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7DQorICAgICAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOw0KKyNpZiAhIEZPT1RFUlMNCisgICAgICAgIG1zdGF0ZSBtID0gZ207DQorI2Vsc2UgLyogRk9PVEVSUyAqLw0KKyAgICAgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihvbGRwKTsNCisNCisgICAgICAgIGlmICghb2tfbWFnaWMobSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorDQorI2VuZGlmIC8qIEZPT1RFUlMgKi8NCisNCisgICAgICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1jaHVua3B0ciBuZXdwID0gdHJ5X3JlYWxsb2NfY2h1bmsobSwgb2xkcCwgbmIsIDEpOw0KKyAgICAgICAgICAgIFBPU1RBQ1RJT04obSk7DQorDQorICAgICAgICAgICAgaWYgKG5ld3AgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOw0KKyAgICAgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0obmV3cCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7DQorDQorICAgICAgICAgICAgICAgIGlmIChtZW0gIT0gMCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9jID0gY2h1bmtzaXplKG9sZHApIC0gb3ZlcmhlYWRfZm9yKG9sZHApOw0KKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1lbSwgb2xkbWVtLCAob2MgPCBieXRlcykgPyBvYyA6IGJ5dGVzKTsNCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbWVtOw0KK30NCisNCit2b2lkICpkbHJlYWxsb2NfaW5fcGxhY2Uodm9pZCAqb2xkbWVtLCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICB2b2lkICptZW0gPSAwOw0KKw0KKyAgICBpZiAob2xkbWVtICE9IDApDQorICAgIHsNCisgICAgICAgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsNCisgICAgICAgICAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOw0KKyNpZiAhIEZPT1RFUlMNCisgICAgICAgICAgICBtc3RhdGUgbSA9IGdtOw0KKyNlbHNlIC8qIEZPT1RFUlMgKi8NCisgICAgICAgICAgICBtc3RhdGUgbSA9IGdldF9tc3RhdGVfZm9yKG9sZHApOw0KKw0KKyAgICAgICAgICAgIGlmICghb2tfbWFnaWMobSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICAgICAgfQ0KKw0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorICAgICAgICAgICAgaWYgKCFQUkVBQ1RJT04obSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IHRyeV9yZWFsbG9jX2NodW5rKG0sIG9sZHAsIG5iLCAwKTsNCisgICAgICAgICAgICAgICAgUE9TVEFDVElPTihtKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKG5ld3AgPT0gb2xkcCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbmV3cCk7DQorICAgICAgICAgICAgICAgICAgICBtZW0gPSBvbGRtZW07DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1lbTsNCit9DQorDQordm9pZCAqZGxtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBkbG1hbGxvYyhieXRlcyk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKGdtLCBhbGlnbm1lbnQsIGJ5dGVzKTsNCit9DQorDQoraW50IGRscG9zaXhfbWVtYWxpZ24odm9pZCAqKnBwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICB2b2lkICptZW0gPSAwOw0KKw0KKyAgICBpZiAoYWxpZ25tZW50ID09IE1BTExPQ19BTElHTk1FTlQpDQorICAgIHsNCisgICAgICAgIG1lbSA9IGRsbWFsbG9jKGJ5dGVzKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNpemVfdCBkID0gYWxpZ25tZW50IC8gc2l6ZW9mKHZvaWQgKik7DQorICAgICAgICBzaXplX3QgciA9IGFsaWdubWVudCAlIHNpemVvZih2b2lkICopOw0KKw0KKyAgICAgICAgaWYgKHIgIT0gMCB8fCBkID09IDAgfHwgKGQgJiAoZCAtIFNJWkVfVF9PTkUpKSAhPSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBFSU5WQUw7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChieXRlcyA8PSBNQVhfUkVRVUVTVCAtIGFsaWdubWVudCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgYWxpZ25tZW50ID0gTUlOX0NIVU5LX1NJWkU7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIG1lbSA9IGludGVybmFsX21lbWFsaWduKGdtLCBhbGlnbm1lbnQsIGJ5dGVzKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobWVtID09IDApDQorICAgIHsNCisgICAgICAgIHJldHVybiBFTk9NRU07DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICAqcHAgPSBtZW07DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KK30NCisNCit2b2lkICpkbHZhbGxvYyhzaXplX3QgYnl0ZXMpDQorew0KKyAgICBzaXplX3QgcGFnZXN6Ow0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisgICAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7DQorICAgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOw0KK30NCisNCit2b2lkICpkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgc2l6ZV90IHBhZ2VzejsNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorICAgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOw0KKyAgICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7DQorfQ0KKw0KK3ZvaWQgKipkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2h1bmtzW10pDQorew0KKyAgICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8NCisgICAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOw0KK30NCisNCit2b2lkICoqZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2h1bmtzW10pDQorew0KKyAgICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsNCit9DQorDQorc2l6ZV90IGRsYnVsa19mcmVlKHZvaWQgKmFycmF5W10sIHNpemVfdCBuZWxlbSkNCit7DQorICAgIHJldHVybiBpbnRlcm5hbF9idWxrX2ZyZWUoZ20sIGFycmF5LCBuZWxlbSk7DQorfQ0KKw0KKyNpZiBNQUxMT0NfSU5TUEVDVF9BTEwNCit2b2lkIGRsbWFsbG9jX2luc3BlY3RfYWxsKHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5kLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRfYnl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19hcmcpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQ0KK3sNCisgICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7DQorDQorICAgIGlmICghUFJFQUNUSU9OKGdtKSkNCisgICAgew0KKyAgICAgICAgaW50ZXJuYWxfaW5zcGVjdF9hbGwoZ20sIGhhbmRsZXIsIGFyZyk7DQorICAgICAgICBQT1NUQUNUSU9OKGdtKTsNCisgICAgfQ0KK30NCisjZW5kaWYgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovDQorDQoraW50IGRsbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkNCit7DQorICAgIGludCByZXN1bHQgPSAwOw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisNCisgICAgaWYgKCFQUkVBQ1RJT04oZ20pKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBzeXNfdHJpbShnbSwgcGFkKTsNCisgICAgICAgIFBPU1RBQ1RJT04oZ20pOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCkNCit7DQorICAgIHJldHVybiBnbS0+Zm9vdHByaW50Ow0KK30NCisNCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGdtLT5tYXhfZm9vdHByaW50Ow0KK30NCisNCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50X2xpbWl0KHZvaWQpDQorew0KKyAgICBzaXplX3QgbWFmID0gZ20tPmZvb3RwcmludF9saW1pdDsNCisgICAgcmV0dXJuIG1hZiA9PSAwID8gTUFYX1NJWkVfVCA6IG1hZjsNCit9DQorDQorc2l6ZV90IGRsbWFsbG9jX3NldF9mb290cHJpbnRfbGltaXQoc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgc2l6ZV90IHJlc3VsdDsgIC8qIGludmVydCBzZW5zZSBvZiAwICovDQorDQorICAgIGlmIChieXRlcyA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBncmFudWxhcml0eV9hbGlnbigxKTsgICAgLyogVXNlIG1pbmltYWwgc2l6ZSAqLw0KKyAgICB9DQorDQorICAgIGlmIChieXRlcyA9PSBNQVhfU0laRV9UKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSAwOyAgICAvKiBkaXNhYmxlICovDQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBncmFudWxhcml0eV9hbGlnbihieXRlcyk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGdtLT5mb290cHJpbnRfbGltaXQgPSByZXN1bHQ7DQorfQ0KKw0KKyNpZiAhTk9fTUFMTElORk8NCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKQ0KK3sNCisgICAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKGdtKTsNCit9DQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovDQorDQorI2lmICFOT19NQUxMT0NfU1RBVFMNCit2b2lkIGRsbWFsbG9jX3N0YXRzKCkNCit7DQorICAgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7DQorfQ0KKyNlbmRpZiAvKiBOT19NQUxMT0NfU1RBVFMgKi8NCisNCitpbnQgZGxtYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkNCit7DQorICAgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOw0KK30NCisNCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCAqbWVtKQ0KK3sNCisgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOw0KKw0KKyAgICAgICAgaWYgKGlzX2ludXNlKHApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXNlciBtc3BhY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisNCisjaWYgTVNQQUNFUw0KKw0KK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyICp0YmFzZSwgc2l6ZV90IHRzaXplKQ0KK3sNCisgICAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsNCisgICAgbWNodW5rcHRyIG1uOw0KKyAgICBtY2h1bmtwdHIgbXNwID0gYWxpZ25fYXNfY2h1bmsodGJhc2UpOw0KKyAgICBtc3RhdGUgbSA9IChtc3RhdGUpKGNodW5rMm1lbShtc3ApKTsNCisgICAgbWVtc2V0KG0sIDAsIG1zaXplKTsNCisgICAgKHZvaWQpSU5JVElBTF9MT0NLKCZtLT5tdXRleCk7DQorICAgIG1zcC0+aGVhZCA9IChtc2l6ZSB8IElOVVNFX0JJVFMpOw0KKyAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsNCisgICAgbS0+c2VnLnNpemUgPSBtLT5mb290cHJpbnQgPSBtLT5tYXhfZm9vdHByaW50ID0gdHNpemU7DQorICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsNCisgICAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOw0KKyAgICBtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOw0KKyAgICBtLT5leHRwID0gMDsNCisgICAgbS0+ZXh0cyA9IDA7DQorICAgIGRpc2FibGVfY29udGlndW91cyhtKTsNCisgICAgaW5pdF9iaW5zKG0pOw0KKyAgICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsNCisgICAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyICopbW4pIC0gVE9QX0ZPT1RfU0laRSk7DQorICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOw0KKyAgICByZXR1cm4gbTsNCit9DQorDQorbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKQ0KK3sNCisgICAgbXN0YXRlIG0gPSAwOw0KKyAgICBzaXplX3QgbXNpemU7DQorICAgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOw0KKyAgICBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7DQorDQorICAgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0gKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkNCisgICAgew0KKyAgICAgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKSA/IG1wYXJhbXMuZ3JhbnVsYXJpdHkgOg0KKyAgICAgICAgICAgICAgICAgICAgIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOw0KKyAgICAgICAgc2l6ZV90IHRzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocnMpOw0KKyAgICAgICAgY2hhciAqdGJhc2UgPSAoY2hhciAqKShDQUxMX01NQVAodHNpemUpKTsNCisNCisgICAgICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpDQorICAgICAgICB7DQorICAgICAgICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsNCisgICAgICAgICAgICBtLT5zZWcuc2ZsYWdzID0gVVNFX01NQVBfQklUOw0KKyAgICAgICAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIChtc3BhY2UpbTsNCit9DQorDQorbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQgKmJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkNCit7DQorICAgIG1zdGF0ZSBtID0gMDsNCisgICAgc2l6ZV90IG1zaXplOw0KKyAgICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsNCisgICAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOw0KKw0KKyAgICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYNCisgICAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLSAobXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKQ0KKyAgICB7DQorICAgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciAqKWJhc2UsIGNhcGFjaXR5KTsNCisgICAgICAgIG0tPnNlZy5zZmxhZ3MgPSBFWFRFUk5fQklUOw0KKyAgICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gKG1zcGFjZSltOw0KK30NCisNCitpbnQgbXNwYWNlX3RyYWNrX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKQ0KK3sNCisgICAgaW50IHJldCA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAoIVBSRUFDVElPTihtcykpDQorICAgIHsNCisgICAgICAgIGlmICghdXNlX21tYXAobXMpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldCA9IDE7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoIWVuYWJsZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBlbmFibGVfbW1hcChtcyk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgZGlzYWJsZV9tbWFwKG1zKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIFBPU1RBQ1RJT04obXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKQ0KK3sNCisgICAgc2l6ZV90IGZyZWVkID0gMDsNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmIChva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7DQorICAgICAgICAodm9pZClERVNUUk9ZX0xPQ0soJm1zLT5tdXRleCk7IC8qIGRlc3Ryb3kgYmVmb3JlIHVubWFwcGVkICovDQorDQorICAgICAgICB3aGlsZSAoc3AgIT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBjaGFyICpiYXNlID0gc3AtPmJhc2U7DQorICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsNCisgICAgICAgICAgICBmbGFnX3QgZmxhZyA9IHNwLT5zZmxhZ3M7DQorICAgICAgICAgICAgKHZvaWQpYmFzZTsgLyogcGxhY2F0ZSBwZW9wbGUgY29tcGlsaW5nIC1XdW51c2VkLXZhcmlhYmxlICovDQorICAgICAgICAgICAgc3AgPSBzcC0+bmV4dDsNCisNCisgICAgICAgICAgICBpZiAoKGZsYWcgJiBVU0VfTU1BUF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmDQorICAgICAgICAgICAgICAgIENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBmcmVlZCArPSBzaXplOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBmcmVlZDsNCit9DQorDQorLyoNCisgIG1zcGFjZSB2ZXJzaW9ucyBvZiByb3V0aW5lcyBhcmUgbmVhci1jbG9uZXMgb2YgdGhlIGdsb2JhbA0KKyAgdmVyc2lvbnMuIFRoaXMgaXMgbm90IHNvIG5pY2UgYnV0IGJldHRlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZXMuDQorKi8NCisNCit2b2lkICptc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykNCit7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAoIVBSRUFDVElPTihtcykpDQorICAgIHsNCisgICAgICAgIHZvaWQgKm1lbTsNCisgICAgICAgIHNpemVfdCBuYjsNCisNCisgICAgICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBiaW5kZXhfdCBpZHg7DQorICAgICAgICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOw0KKyAgICAgICAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpID8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7DQorICAgICAgICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOw0KKyAgICAgICAgICAgIHNtYWxsYml0cyA9IG1zLT5zbWFsbG1hcCA+PiBpZHg7DQorDQorICAgICAgICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSAgIC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgYiwgcDsNCisgICAgICAgICAgICAgICAgaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLw0KKyAgICAgICAgICAgICAgICBiID0gc21hbGxiaW5fYXQobXMsIGlkeCk7DQorICAgICAgICAgICAgICAgIHAgPSBiLT5mZDsNCisgICAgICAgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOw0KKyAgICAgICAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGlkeCk7DQorICAgICAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOw0KKyAgICAgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7DQorICAgICAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsNCisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBlbHNlIGlmIChuYiA+IG1zLT5kdnNpemUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApICAgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8NCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgbWNodW5rcHRyIGIsIHAsIHI7DQorICAgICAgICAgICAgICAgICAgICBzaXplX3QgcnNpemU7DQorICAgICAgICAgICAgICAgICAgICBiaW5kZXhfdCBpOw0KKyAgICAgICAgICAgICAgICAgICAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsNCisgICAgICAgICAgICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsNCisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7DQorICAgICAgICAgICAgICAgICAgICBiID0gc21hbGxiaW5fYXQobXMsIGkpOw0KKyAgICAgICAgICAgICAgICAgICAgcCA9IGItPmZkOw0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsNCisgICAgICAgICAgICAgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaSk7DQorICAgICAgICAgICAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsNCisNCisgICAgICAgICAgICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovDQorICAgICAgICAgICAgICAgICAgICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7DQorICAgICAgICAgICAgICAgICAgICAgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VfZHYobXMsIHIsIHJzaXplKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsNCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsNCisgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKG1zLCBuYikpICE9IDApDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsNCisgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG5iID0gTUFYX1NJWkVfVDsgICAgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOw0KKw0KKyAgICAgICAgICAgIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKG1zLCBuYikpICE9IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7DQorICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBzaXplX3QgcnNpemUgPSBtcy0+ZHZzaXplIC0gbmI7DQorICAgICAgICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7DQorDQorICAgICAgICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSAgIC8qIHNwbGl0IGR2ICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgciA9IG1zLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsNCisgICAgICAgICAgICAgICAgbXMtPmR2c2l6ZSA9IHJzaXplOw0KKyAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOw0KKyAgICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UgICAvKiBleGhhdXN0IGR2ICovDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3QgZHZzID0gbXMtPmR2c2l6ZTsNCisgICAgICAgICAgICAgICAgbXMtPmR2c2l6ZSA9IDA7DQorICAgICAgICAgICAgICAgIG1zLT5kdiA9IDA7DQorICAgICAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBkdnMpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7DQorICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOw0KKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGVsc2UgaWYgKG5iIDwgbXMtPnRvcHNpemUpICAgLyogU3BsaXQgdG9wICovDQorICAgICAgICB7DQorICAgICAgICAgICAgc2l6ZV90IHJzaXplID0gbXMtPnRvcHNpemUgLT0gbmI7DQorICAgICAgICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOw0KKyAgICAgICAgICAgIG1jaHVua3B0ciByID0gbXMtPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsNCisgICAgICAgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOw0KKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsNCisgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7DQorICAgICAgICAgICAgY2hlY2tfdG9wX2NodW5rKG1zLCBtcy0+dG9wKTsNCisgICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7DQorICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7DQorDQorcG9zdGFjdGlvbjoNCisgICAgICAgIFBPU1RBQ1RJT04obXMpOw0KKyAgICAgICAgcmV0dXJuIG1lbTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkICptZW0pDQorew0KKyAgICBpZiAobWVtICE9IDApDQorICAgIHsNCisgICAgICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOw0KKyNpZiBGT09URVJTDQorICAgICAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsNCisgICAgICAgICh2b2lkKW1zcDsgLyogcGxhY2F0ZSBwZW9wbGUgY29tcGlsaW5nIC1XdW51c2VkICovDQorI2Vsc2UgLyogRk9PVEVSUyAqLw0KKyAgICAgICAgbXN0YXRlIGZtID0gKG1zdGF0ZSltc3A7DQorI2VuZGlmIC8qIEZPT1RFUlMgKi8NCisNCisgICAgICAgIGlmICghb2tfbWFnaWMoZm0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCFQUkVBQ1RJT04oZm0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsNCisNCisgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19pbnVzZShwKSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7DQorICAgICAgICAgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAoIXBpbnVzZShwKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21tYXBwZWQocCkpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciAqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBwcmV2Ow0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgICAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yYWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICghY2ludXNlKG5leHQpKSAgICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkNCisgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+dG9wID0gcDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm0tPmR2ID0gcDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzaXplICs9IG5zaXplOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NtYWxsKHBzaXplKSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRfc21hbGxfY2h1bmsoZm0sIHAsIHBzaXplKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisNCitlcnJvcmFjdGlvbjoNCisgICAgICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOw0KK3Bvc3RhY3Rpb246DQorICAgICAgICAgICAgUE9TVEFDVElPTihmbSk7DQorICAgICAgICB9DQorICAgIH0NCit9DQorDQordm9pZCAqbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkNCit7DQorICAgIHZvaWQgKm1lbTsNCisgICAgc2l6ZV90IHJlcSA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAobl9lbGVtZW50cyAhPSAwKQ0KKyAgICB7DQorICAgICAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOw0KKw0KKyAgICAgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmDQorICAgICAgICAgICAgKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXEgPSBNQVhfU0laRV9UOyAgICAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobXMsIHJlcSk7DQorDQorICAgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpDQorICAgIHsNCisgICAgICAgIG1lbXNldChtZW0sIDAsIHJlcSk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1lbTsNCit9DQorDQordm9pZCAqbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCAqb2xkbWVtLCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICB2b2lkICptZW0gPSAwOw0KKw0KKyAgICBpZiAob2xkbWVtID09IDApDQorICAgIHsNCisgICAgICAgIG1lbSA9IG1zcGFjZV9tYWxsb2MobXNwLCBieXRlcyk7DQorICAgIH0NCisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpDQorICAgIHsNCisgICAgICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsNCisgICAgfQ0KKw0KKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMNCisgICAgZWxzZSBpZiAoYnl0ZXMgPT0gMCkNCisgICAgew0KKyAgICAgICAgbXNwYWNlX2ZyZWUobXNwLCBvbGRtZW0pOw0KKyAgICB9DQorDQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLw0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7DQorICAgICAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOw0KKyNpZiAhIEZPT1RFUlMNCisgICAgICAgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7DQorI2Vsc2UgLyogRk9PVEVSUyAqLw0KKyAgICAgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihvbGRwKTsNCisNCisgICAgICAgIGlmICghb2tfbWFnaWMobSkpDQorICAgICAgICB7DQorICAgICAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorDQorI2VuZGlmIC8qIEZPT1RFUlMgKi8NCisNCisgICAgICAgIGlmICghUFJFQUNUSU9OKG0pKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIG1jaHVua3B0ciBuZXdwID0gdHJ5X3JlYWxsb2NfY2h1bmsobSwgb2xkcCwgbmIsIDEpOw0KKyAgICAgICAgICAgIFBPU1RBQ1RJT04obSk7DQorDQorICAgICAgICAgICAgaWYgKG5ld3AgIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOw0KKyAgICAgICAgICAgICAgICBtZW0gPSBjaHVuazJtZW0obmV3cCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIG1lbSA9IG1zcGFjZV9tYWxsb2MobSwgYnl0ZXMpOw0KKw0KKyAgICAgICAgICAgICAgICBpZiAobWVtICE9IDApDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYyA9IGNodW5rc2l6ZShvbGRwKSAtIG92ZXJoZWFkX2ZvcihvbGRwKTsNCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpID8gb2MgOiBieXRlcyk7DQorICAgICAgICAgICAgICAgICAgICBtc3BhY2VfZnJlZShtLCBvbGRtZW0pOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiBtZW07DQorfQ0KKw0KK3ZvaWQgKm1zcGFjZV9yZWFsbG9jX2luX3BsYWNlKG1zcGFjZSBtc3AsIHZvaWQgKm9sZG1lbSwgc2l6ZV90IGJ5dGVzKQ0KK3sNCisgICAgdm9pZCAqbWVtID0gMDsNCisNCisgICAgaWYgKG9sZG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpDQorICAgICAgICB7DQorICAgICAgICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7DQorICAgICAgICAgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsNCisjaWYgISBGT09URVJTDQorICAgICAgICAgICAgbXN0YXRlIG0gPSAobXN0YXRlKW1zcDsNCisjZWxzZSAvKiBGT09URVJTICovDQorICAgICAgICAgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihvbGRwKTsNCisgICAgICAgICAgICAodm9pZCltc3A7IC8qIHBsYWNhdGUgcGVvcGxlIGNvbXBpbGluZyAtV3VudXNlZCAqLw0KKw0KKyAgICAgICAgICAgIGlmICghb2tfbWFnaWMobSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICAgICAgfQ0KKw0KKyNlbmRpZiAvKiBGT09URVJTICovDQorDQorICAgICAgICAgICAgaWYgKCFQUkVBQ1RJT04obSkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IHRyeV9yZWFsbG9jX2NodW5rKG0sIG9sZHAsIG5iLCAwKTsNCisgICAgICAgICAgICAgICAgUE9TVEFDVElPTihtKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKG5ld3AgPT0gb2xkcCkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbmV3cCk7DQorICAgICAgICAgICAgICAgICAgICBtZW0gPSBvbGRtZW07DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1lbTsNCit9DQorDQordm9pZCAqbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykNCit7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpDQorICAgIHsNCisgICAgICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihtcywgYWxpZ25tZW50LCBieXRlcyk7DQorfQ0KKw0KK3ZvaWQgKiptc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQgKmNodW5rc1tdKQ0KK3sNCisgICAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovDQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7DQorfQ0KKw0KK3ZvaWQgKiptc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCAqY2h1bmtzW10pDQorew0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7DQorfQ0KKw0KK3NpemVfdCBtc3BhY2VfYnVsa19mcmVlKG1zcGFjZSBtc3AsIHZvaWQgKmFycmF5W10sIHNpemVfdCBuZWxlbSkNCit7DQorICAgIHJldHVybiBpbnRlcm5hbF9idWxrX2ZyZWUoKG1zdGF0ZSltc3AsIGFycmF5LCBuZWxlbSk7DQorfQ0KKw0KKyNpZiBNQUxMT0NfSU5TUEVDVF9BTEwNCit2b2lkIG1zcGFjZV9pbnNwZWN0X2FsbChtc3BhY2UgbXNwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmVuZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZF9ieXRlcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19hcmcpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykNCit7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAob2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICBpZiAoIVBSRUFDVElPTihtcykpDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50ZXJuYWxfaW5zcGVjdF9hbGwobXMsIGhhbmRsZXIsIGFyZyk7DQorICAgICAgICAgICAgUE9TVEFDVElPTihtcyk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsIG1zKTsNCisgICAgfQ0KK30NCisjZW5kaWYgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovDQorDQoraW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpDQorew0KKyAgICBpbnQgcmVzdWx0ID0gMDsNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmIChva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIGlmICghUFJFQUNUSU9OKG1zKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXN1bHQgPSBzeXNfdHJpbShtcywgcGFkKTsNCisgICAgICAgICAgICBQT1NUQUNUSU9OKG1zKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KKyNpZiAhTk9fTUFMTE9DX1NUQVRTDQordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApDQorew0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKG9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorfQ0KKyNlbmRpZiAvKiBOT19NQUxMT0NfU1RBVFMgKi8NCisNCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKQ0KK3sNCisgICAgc2l6ZV90IHJlc3VsdCA9IDA7DQorICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOw0KKw0KKyAgICBpZiAob2tfbWFnaWMobXMpKQ0KKyAgICB7DQorICAgICAgICByZXN1bHQgPSBtcy0+Zm9vdHByaW50Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQorc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApDQorew0KKyAgICBzaXplX3QgcmVzdWx0ID0gMDsNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmIChva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIHJlc3VsdCA9IG1zLT5tYXhfZm9vdHByaW50Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLCBtcyk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQorc2l6ZV90IG1zcGFjZV9mb290cHJpbnRfbGltaXQobXNwYWNlIG1zcCkNCit7DQorICAgIHNpemVfdCByZXN1bHQgPSAwOw0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKG9rX21hZ2ljKG1zKSkNCisgICAgew0KKyAgICAgICAgc2l6ZV90IG1hZiA9IG1zLT5mb290cHJpbnRfbGltaXQ7DQorICAgICAgICByZXN1bHQgPSAobWFmID09IDApID8gTUFYX1NJWkVfVCA6IG1hZjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KK3NpemVfdCBtc3BhY2Vfc2V0X2Zvb3RwcmludF9saW1pdChtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpDQorew0KKyAgICBzaXplX3QgcmVzdWx0ID0gMDsNCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7DQorDQorICAgIGlmIChva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIGlmIChieXRlcyA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJlc3VsdCA9IGdyYW51bGFyaXR5X2FsaWduKDEpOyAgICAvKiBVc2UgbWluaW1hbCBzaXplICovDQorICAgICAgICB9DQorDQorICAgICAgICBpZiAoYnl0ZXMgPT0gTUFYX1NJWkVfVCkNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXN1bHQgPSAwOyAgICAvKiBkaXNhYmxlICovDQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgcmVzdWx0ID0gZ3JhbnVsYXJpdHlfYWxpZ24oYnl0ZXMpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgbXMtPmZvb3RwcmludF9saW1pdCA9IHJlc3VsdDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiByZXN1bHQ7DQorfQ0KKw0KKyNpZiAhTk9fTUFMTElORk8NCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApDQorew0KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsNCisNCisgICAgaWYgKCFva19tYWdpYyhtcykpDQorICAgIHsNCisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcywgbXMpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhtcyk7DQorfQ0KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLw0KKw0KK3NpemVfdCBtc3BhY2VfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCAqbWVtKQ0KK3sNCisgICAgaWYgKG1lbSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOw0KKw0KKyAgICAgICAgaWYgKGlzX2ludXNlKHApKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpDQorew0KKyAgICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsNCit9DQorDQorI2VuZGlmIC8qIE1TUEFDRVMgKi8NCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKw0KKy8qDQorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOg0KKw0KKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgTU9SRUNPUkUgc2hvdWxkIGFsbG9jYXRlIGluIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4NCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLA0KKyAgICAgIGJ1dCB0aGlzIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gYSBtYWxsb2MgZmFpbHVyZS4pDQorICAqIE1PUkVDT1JFIG11c3Qgbm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIGdpdmVuIGFyZ3VtZW50IHplcm8sIGJ1dA0KKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cw0KKyAgICAgIG5vbnplcm8gY2FsbC4NCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUNCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0DQorICAgICAgc3BhY2UgaGFzIGJlZW4gY29udGlndW91c2x5IGV4dGVuZGVkLg0KKyAgKiBFdmVuIHRob3VnaCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSBuZWVkIG5vdCByZXR1cm4gY29udGlndW91cw0KKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlDQorICAgICAgcmVnaW9ucyBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGV5IGRvIGhhcHBlbiB0byBiZSBjb250aWd1b3VzLg0KKyAgKiBNT1JFQ09SRSBuZWVkIG5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzIC0tIGl0IG1heSBpbnN0ZWFkDQorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuDQorICAgICAgTmVnYXRpdmUgYXJndW1lbnRzIGFyZSBhbHdheXMgbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBNT1JFQ09SRQ0KKyAgICAgIG11c3Qgbm90IG1pc2ludGVycHJldCBuZWdhdGl2ZSBhcmdzIGFzIGxhcmdlIHBvc2l0aXZlIHVuc2lnbmVkDQorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nDQorICAgICAgTU9SRUNPUkVfQ0FOTk9UX1RSSU0sDQorDQorICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcg0KKyAga2luZGx5IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkgYnV0IG5vdA0KKyAgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzIG5vbi1wYWdlZCBtZW1vcnkgKGxvY2tlZCBpbiwNCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcNCisgIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2luY2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUgYXBwcm9wcmlhdGUNCisgIGRlZmluZXMgYWJvdmU6DQorDQorICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlDQorDQorICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3INCisgIGNsZWFudXAgdXBvbiBwcm9ncmFtIGV4aXQuDQorDQorICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwDQorICAjZGVmaW5lIE1JTklNVU1fTU9SRUNPUkVfU0laRSAgKDY0ICogMTAyNFUpDQorICBzdGF0aWMgaW50IG5leHRfb3NfcG9vbDsNCisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsNCisNCisgIHZvaWQgKm9zTW9yZUNvcmUoaW50IHNpemUpDQorICB7DQorICAgIHZvaWQgKnB0ciA9IDA7DQorICAgIHN0YXRpYyB2b2lkICpzYnJrX3RvcCA9IDA7DQorDQorICAgIGlmIChzaXplID4gMCkNCisgICAgew0KKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQ0KKyAgICAgICAgIHNpemUgPSBNSU5JTVVNX01PUkVDT1JFX1NJWkU7DQorICAgICAgaWYgKEN1cnJlbnRFeGVjdXRpb25MZXZlbCgpID09IGtUYXNrTGV2ZWwpDQorICAgICAgICAgcHRyID0gUG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7DQorICAgICAgaWYgKHB0ciA9PSAwKQ0KKyAgICAgIHsNCisgICAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsNCisgICAgICB9DQorICAgICAgLy8gc2F2ZSBwdHJzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGR1cmluZyBjbGVhbnVwDQorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7DQorICAgICAgbmV4dF9vc19wb29sKys7DQorICAgICAgcHRyID0gKHZvaWQgKikgKCgoKHNpemVfdCkgcHRyKSArIFJNX1BBR0VfTUFTSykgJiB+Uk1fUEFHRV9NQVNLKTsNCisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7DQorICAgICAgcmV0dXJuIHB0cjsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkNCisgICAgew0KKyAgICAgIC8vIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNocmluayBiZWhhdmlvcg0KKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICByZXR1cm4gc2Jya190b3A7DQorICAgIH0NCisgIH0NCisNCisgIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgcG9vbHMNCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcg0KKw0KKyAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkNCisgIHsNCisgICAgdm9pZCAqKnB0cjsNCisNCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQ0KKyAgICAgIGlmICgqcHRyKQ0KKyAgICAgIHsNCisgICAgICAgICBQb29sRGVhbGxvY2F0ZSgqcHRyKTsNCisgICAgICAgICAqcHRyID0gMDsNCisgICAgICB9DQorICB9DQorDQorKi8NCisNCisNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0hpc3Rvcnk6DQorICAgIHYyLjguNiBXZWQgQXVnIDI5IDA2OjU3OjU4IDIwMTIgIERvdWcgTGVhDQorICAgICAgKiBmaXggYmFkIGNvbXBhcmlzb24gaW4gZGxwb3NpeF9tZW1hbGlnbg0KKyAgICAgICogZG9uJ3QgcmV1c2UgYWRqdXN0ZWQgYXNpemUgaW4gc3lzX2FsbG9jDQorICAgICAgKiBhZGQgTE9DS19BVF9GT1JLIC0tIHRoYW5rcyB0byBLaXJpbGwgQXJ0YW1vbm92IGZvciB0aGUgc3VnZ2VzdGlvbg0KKyAgICAgICogcmVkdWNlIGNvbXBpbGVyIHdhcm5pbmdzIC0tIHRoYW5rcyB0byBhbGwgd2hvIHJlcG9ydGVkL3N1Z2dlc3RlZCB0aGVzZQ0KKw0KKyAgICB2Mi44LjUgU3VuIE1heSAyMiAxMDoyNjowMiAyMDExICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEFsd2F5cyBwZXJmb3JtIHVubGluayBjaGVja3MgdW5sZXNzIElOU0VDVVJFDQorICAgICAgKiBBZGQgcG9zaXhfbWVtYWxpZ24uDQorICAgICAgKiBJbXByb3ZlIHJlYWxsb2MgdG8gZXhwYW5kIGluIG1vcmUgY2FzZXM7IGV4cG9zZSByZWFsbG9jX2luX3BsYWNlLg0KKyAgICAgICAgVGhhbmtzIHRvIFBldGVyIEJ1aHIgZm9yIHRoZSBzdWdnZXN0aW9uLg0KKyAgICAgICogQWRkIGZvb3RwcmludF9saW1pdCwgaW5zcGVjdF9hbGwsIGJ1bGtfZnJlZS4gVGhhbmtzDQorICAgICAgICB0byBCYXJyeSBIYXllcyBhbmQgb3RoZXJzIGZvciB0aGUgc3VnZ2VzdGlvbnMuDQorICAgICAgKiBJbnRlcm5hbCByZWZhY3RvcmluZ3MgdG8gYXZvaWQgY2FsbHMgd2hpbGUgaG9sZGluZyBsb2Nrcw0KKyAgICAgICogVXNlIG5vbi1yZWVudHJhbnQgbG9ja3MgYnkgZGVmYXVsdC4gVGhhbmtzIHRvIFJvbGFuZCBNY0dyYXRoDQorICAgICAgICBmb3IgdGhlIHN1Z2dlc3Rpb24uDQorICAgICAgKiBTbWFsbCBmaXhlcyB0byBtc3BhY2VfZGVzdHJveSwgcmVzZXRfb25fZXJyb3IuDQorICAgICAgKiBWYXJpb3VzIGNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9ucy9jaGFuZ2VzLiBUaGFua3MNCisgICAgICAgICB0byBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRoZXNlLg0KKw0KKyAgICBWMi44LjRhIFRodSBBcHIgMjggMTQ6Mzk6NDMgMjAxMSAoZGwgYXQgZ2VlLmNzLm9zd2Vnby5lZHUpDQorICAgICAgKiBVcGRhdGUgQ3JlYXRpdmUgQ29tbW9ucyBVUkwNCisNCisgICAgVjIuOC40IFdlZCBNYXkgMjcgMDk6NTY6MjMgMjAwOSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBVc2UgemVyb3MgaW5zdGVhZCBvZiBwcmV2IGZvb3QgZm9yIGlzX21tYXBwZWQNCisgICAgICAqIEFkZCBtc3BhY2VfdHJhY2tfbGFyZ2VfY2h1bmtzOyB0aGFua3MgdG8gSmVhbiBCcm91d2Vycw0KKyAgICAgICogRml4IHNldF9pbnVzZSBpbiBpbnRlcm5hbF9yZWFsbG9jOyB0aGFua3MgdG8gSmVhbiBCcm91d2Vycw0KKyAgICAgICogRml4IGluc3VmZmljaWVudCBzeXNfYWxsb2MgcGFkZGluZyB3aGVuIHVzaW5nIDE2Ynl0ZSBhbGlnbm1lbnQNCisgICAgICAqIEZpeCBiYWQgZXJyb3IgY2hlY2sgaW4gbXNwYWNlX2Zvb3RwcmludA0KKyAgICAgICogQWRhcHRhdGlvbnMgZm9yIHB0bWFsbG9jOyB0aGFua3MgdG8gV29sZnJhbSBHbG9nZXIuDQorICAgICAgKiBSZWVudHJhbnQgc3BpbiBsb2NrczsgdGhhbmtzIHRvIEVhcmwgQ2hldyBhbmQgb3RoZXJzDQorICAgICAgKiBXaW4zMiBpbXByb3ZlbWVudHM7IHRoYW5rcyB0byBOaWFsbCBEb3VnbGFzIGFuZCBFYXJsIENoZXcNCisgICAgICAqIEFkZCBOT19TRUdNRU5UX1RSQVZFUlNBTCBhbmQgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSBvcHRpb25zDQorICAgICAgKiBFeHRlbnNpb24gaG9vayBpbiBtYWxsb2Nfc3RhdGUNCisgICAgICAqIFZhcmlvdXMgc21hbGwgYWRqdXN0bWVudHMgdG8gcmVkdWNlIHdhcm5pbmdzIG9uIHNvbWUgY29tcGlsZXJzDQorICAgICAgKiBWYXJpb3VzIGNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9ucy9jaGFuZ2VzIGZvciBtb3JlIHBsYXRmb3Jtcy4gVGhhbmtzDQorICAgICAgICAgdG8gYWxsIHdobyBjb250cmlidXRlZCB0aGVzZS4NCisNCisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBBZGQgbWF4X2Zvb3RwcmludCBmdW5jdGlvbnMNCisgICAgICAqIEVuc3VyZSBhbGwgYXBwcm9wcmlhdGUgbGl0ZXJhbHMgYXJlIHNpemVfdA0KKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncw0KKyAgICAgICogQXZvaWQgY29uY2F0ZW5hdGluZyBzZWdtZW50cyB3aXRoIHRoZSBvbmUgcHJvdmlkZWQNCisgICAgICAgIGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlDQorICAgICAgKiBSZW5hbWUgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgY29tcGlsZXIgc2hhZG93aW5nIHdhcm5pbmdzDQorICAgICAgKiBVc2UgZXhwbGljaXQgbG9jayBpbml0aWFsaXphdGlvbi4NCisgICAgICAqIEJldHRlciBoYW5kbGluZyBvZiBzYnJrIGludGVyZmVyZW5jZS4NCisgICAgICAqIFNpbXBsaWZ5IGFuZCBmaXggc2VnbWVudCBpbnNlcnRpb24sIHRyaW1taW5nIGFuZCBtc3BhY2VfZGVzdHJveQ0KKyAgICAgICogUmVpbnN0YXRlIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyBvcHRpb24gZnJvbSAyLjcueA0KKyAgICAgICogVGhhbmtzIGVzcGVjaWFsbHkgdG8gRGVubmlzIEZsYW5hZ2FuIGZvciBoZWxwIG9uIHRoZXNlLg0KKw0KKyAgICBWMi44LjIgU3VuIEp1biAxMiAxNjowMToxMCAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEZpeCBtZW1hbGlnbiBicmFjZSBlcnJvci4NCisNCisgICAgVjIuOC4xIFdlZCBKdW4gIDggMTY6MTE6NDYgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBGaXggaW1wcm9wZXIgI2VuZGlmIG5lc3RpbmcgaW4gQysrDQorICAgICAgKiBBZGQgZXhwbGljaXQgY2FzdHMgbmVlZGVkIGZvciBDKysNCisNCisgICAgVjIuOC4wIE1vbiBNYXkgMzAgMTQ6MDk6MDIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBVc2UgdHJlZXMgZm9yIGxhcmdlIGJpbnMNCisgICAgICAqIFN1cHBvcnQgbXNwYWNlcw0KKyAgICAgICogVXNlIHNlZ21lbnRzIHRvIHVuaWZ5IHNicmstYmFzZWQgYW5kIG1tYXAtYmFzZWQgc3lzdGVtIGFsbG9jYXRpb24sDQorICAgICAgICByZW1vdmluZyBuZWVkIGZvciBlbXVsYXRpb24gb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBzYnJrLg0KKyAgICAgICogRGVmYXVsdCBzYWZldHkgY2hlY2tzDQorICAgICAgKiBPcHRpb25hbCBmb290ZXIgY2hlY2tzLiBUaGFua3MgdG8gV2lsbGlhbSBSb2JlcnRzb24gZm9yIHRoZSBpZGVhLg0KKyAgICAgICogSW50ZXJuYWwgY29kZSByZWZhY3RvcmluZw0KKyAgICAgICogSW5jb3Jwb3JhdGUgc3VnZ2VzdGlvbnMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGNoYW5nZXMuDQorICAgICAgICBUaGFua3MgdG8gRGVubmlzIEZsYW5hZ2FuLCBDb2xpbiBQbHVtYiwgTmlhbGwgRG91Z2xhcywNCisgICAgICAgIEFhcm9uIEJhY2htYW5uLCAgRW1lcnkgQmVyZ2VyLCBhbmQgb3RoZXJzLg0KKyAgICAgICogU3BlZWQgdXAgbm9uLWZhc3RiaW4gcHJvY2Vzc2luZyBlbm91Z2ggdG8gcmVtb3ZlIGZhc3RiaW5zLg0KKyAgICAgICogUmVtb3ZlIHVzZWxlc3MgY2ZyZWUoKSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBzLg0KKyAgICAgICogUmVtb3ZlIGludGVybmFsIG1lbWNweSwgbWVtc2V0LiBDb21waWxlcnMgaGFuZGxlIGJ1aWx0aW5zIGJldHRlci4NCisgICAgICAqIFJlbW92ZSBzb21lIG9wdGlvbnMgdGhhdCBubyBvbmUgZXZlciB1c2VkIGFuZCByZW5hbWUgb3RoZXJzLg0KKw0KKyAgICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEZpeCBtYWxsb2Nfc3RhdGUgYml0bWFwIGFycmF5IG1pc2RlY2xhcmF0aW9uDQorDQorICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogQWxsb3cgdHVuaW5nIG9mIEZJUlNUX1NPUlRFRF9CSU5fU0laRQ0KKyAgICAgICogVXNlIFBUUl9VSU5UIGFzIHR5cGUgZm9yIGFsbCBwdHItPmludCBjYXN0cy4gVGhhbmtzIHRvIEpvaG4gQmVsbW9udGUuDQorICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuDQorICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyDQorICAgICAgKiBCeXBhc3MgbW9zdCBvZiBtYWxsb2MgaWYgbm8gZnJlZXMuIFRoYW5rcyBUbyBFbWVyeSBCZXJnZXIuDQorICAgICAgKiBGaXggZnJlZWluZyBvZiBvbGQgdG9wIG5vbi1jb250aWd1b3VzIGNodW5rIGltIHN5c21hbGxvYy4NCisgICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1NksuDQorICAgICAgKiBGaXggbW1hcC1yZWxhdGVkICNkZWZpbmVzLiBUaGFua3MgdG8gTHVib3MgTHVuYWsuDQorICAgICAgKiBGaXggY29weSBtYWNyb3M7IGFkZGVkIExBQ0tTX0ZDTlRMX0guIFRoYW5rcyB0byBOZWFsIFdhbGZpZWxkLg0KKyAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9uDQorICAgICAgKiBEZWZhdWx0IHRyaW0gYW5kIG1tYXAgdGhyZXNob2xkcyBub3cgMjU2Sy4NCisNCisgICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBJbnRyb2R1Y2UgaW5kZXBlbmRlbnRfY29tYWxsb2MgYW5kIGluZGVwZW5kZW50X2NhbGxvYy4NCisgICAgICAgIFRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4NCisgICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUNCisgICAgICAqIEFsbG93ID4gMkdCIHJlcXVlc3RzIG9uIDMyYml0IHN5c3RlbXMuDQorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uDQorICAgICAgICBUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBhdCBwYXJhZGF0ZWMuZGU+LA0KKyAgICAgICAgYW5kIEFub255bW91cy4NCisgICAgICAqIEFsbG93IG92ZXJyaWRlIG9mIE1BTExPQ19BTElHTk1FTlQgKFRoYW5rcyB0byBSdXVkIFdhaWogZm9yDQorICAgICAgICBoZWxwaW5nIHRlc3QgdGhpcy4pDQorICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25tZW50IGFyZw0KKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMNCisgICAgICAgIGxlYWRzIHRvICBtb3JlIGZyYWdtZW50YXRpb24gaW4gc29tZSBwcm9ncmFtcyBhbmQgZG9lc24ndA0KKyAgICAgICAgc2VlbSB0byBoZWxwIGluIGFueSBvdGhlcnMuDQorICAgICAgKiBDb2xsZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzeXNtYWxsb2MNCisgICAgICAqIFVzZSBtbWFwIGFzIGJhY2t1cCB0byBzYnJrDQorICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlDQorICAgICAgKiBJbnRyb2R1Y2UgZmFzdGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpDQorICAgICAgKiBNYW55IG1pbm9yIHR1bmluZ3MgYW5kIGNvc21ldGljIGltcHJvdmVtZW50cw0KKyAgICAgICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sNCisgICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJR1VPVVMNCisgICAgICAgIFRoYW5rcyB0byBUb255IEUuIEJlbm5ldHQgPHRiZW5uZXR0QG52aWRpYS5jb20+IGFuZCBvdGhlcnMuDQorICAgICAgKiBJbmNsdWRlIGVycm5vLmggdG8gc3VwcG9ydCBkZWZhdWx0IGZhaWx1cmUgYWN0aW9uLg0KKw0KKyAgICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIHJldHVybiBudWxsIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMNCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4NCisgICAgICAgICAqIEFkZCAnTEFDS1NfU1lTX1BBUkFNX0gnIGZvciB0aG9zZSBzeXN0ZW1zIHdpdGhvdXQgJ3N5cy9wYXJhbS5oJw0KKyAgICAgICAgICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpDQorICAgICAgICAgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zDQorICAgICAgICAgKiBDbGVhbnVwIGNvZGUgdG8gYXZvaWQgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIgY29tcGxhaW50cw0KKyAgICAgICAgICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nDQorICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcw0KKyAgICAgICAgICogU2V0ICdtYWxsb2NfZ2V0cGFnZXNpemUnIGZvciBXSU4zMiBwbGF0Zm9ybXMgKG5lZWRzIG1vcmUgd29yaykNCisgICAgICAgICAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8NCisgICAgICAgICAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlDQorICAgICAgICAgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8NCisgICAgICAgICAgIGF2b2lkIGluZmluaXRlIGxvb3ANCisgICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknDQorDQorICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5nDQorDQorICAgIFYyLjYuMyBTdW4gTWF5IDE5IDA4OjE3OjU4IDE5OTYgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5KLiBMaXUNCisgICAgICAqIEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcg0KKyAgICAgICogQWRkZWQgYW5vbnltb3VzbHkgZG9uYXRlZCBXSU4zMiBzYnJrIGVtdWxhdGlvbg0KKyAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3Nlbg0KKyAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXINCisgICAgICAgIGZvcmVpZ24gc2Jya3MNCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1DQorDQorICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQ0KKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4NCisgICAgICAqIEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhlbHAgZnJvbQ0KKyAgICAgICAgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4NCisgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLg0KKyAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1DQorICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZA0KKyAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4NCisgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3ANCisgICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuDQorICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8NCisgICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4NCisgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3Nlbg0KKyAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLg0KKyAgICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxvcHQgcGFyYW1ldGVyLg0KKyAgICAgICogTW9yZSBwcmVjYXV0aW9ucyBmb3IgY2FzZXMgd2hlcmUgb3RoZXIgcm91dGluZXMgY2FsbCBzYnJrLA0KKyAgICAgICAgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4NCisgICAgICAqIEFkZGVkIG1hY3JvcyBldGMuLCBhbGxvd2luZyB1c2UgaW4gbGludXggbGliYyBmcm9tDQorICAgICAgICBILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpDQorICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdA0KKw0KKyAgICBWMi42LjEgU2F0IERlYyAgMiAxNDoxMDo1NyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4NCisgICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBzaW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQ0KKyAgICAgICAgdGhlIHdvcmsgcmVxdWlyZWQgdG8gdW5kbyBiYWQgcHJlYWxsb2NhdGlvbnMgZXhjZWVkcw0KKyAgICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLg0KKyAgICAgICogTm8gbG9uZ2VyIHVzZSByZXR1cm4gbGlzdCBvciB1bmNvbnNvbGlkYXRlZCBiaW5zIHNpbmNlDQorICAgICAgICBubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndA0KKyAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4NCisgICAgICAqIFVzZSBiZXN0IGZpdCBmb3IgdmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0LWNhc2VzLg0KKyAgICAgICogQWRkZWQgc29tZSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcNCisNCisgICAgVjIuNi4wIFNhdCBOb3YgIDQgMDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpDQorICAgICAgKiBSZW1vdmVkIGZvb3RlcnMgd2hlbiBjaHVua3MgYXJlIGluIHVzZS4gVGhhbmtzIHRvDQorICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLg0KKw0KKyAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkNCisgICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBXb2xmcmFtIEdsb2dlcg0KKyAgICAgICAgKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuDQorDQorICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykNCisNCisgICAgVjIuNS4yIFR1ZSBBcHIgIDUgMTY6MjA6NDAgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQ0KKyAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMNCisgICAgICAqIG1hbGxvYzogc3dhcCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7DQorICAgICAgKiByZWFsbG9jOiBvbmx5IGNvbmRpdGlvbmFsbHkgZXhwYW5kIGJhY2t3YXJkcw0KKyAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMNCisgICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2NhdGlvbg0KKyAgICAgICogT2NjYXNpb25hbGx5IGJpbiByZXR1cm4gbGlzdCBjaHVua3MgaW4gZmlyc3Qgc2Nhbg0KKyAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUNCisNCisgICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQ0KKyAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nDQorICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9uZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXINCisgICAgICAgICAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikNCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkNCisgICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2MgaWYgbWFsbG9jIHJldHVybnMgMA0KKyAgICAgICogQWRkIHN0dWZmIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIG5vbi1BTlNJIGNvbXBpbGVycw0KKyAgICAgICAgICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tDQorDQorICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkNCisgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuaw0KKyAgICAgICogcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGdldHBhZ2VzaXplLmgNCisgICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVybmFsIGRvY3VtZW50YXRpb24NCisgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzDQorICAgICAgKiB0ZXN0ZWQgb24gc3BhcmMsIGhwLTcwMCwgZGVjLW1pcHMsIHJzNjAwMA0KKyAgICAgICAgICB3aXRoIGdjYyAmIG5hdGl2ZSBjYyAoaHAsIGRlYyBvbmx5KSBhbGxvd2luZw0KKyAgICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQ0KKw0KKyAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpDQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbA0KKyAgICAgICAgIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikNCisNCisqLw0KKyNlbmRpZiAvKiAhX19HTlVfXyAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIveWFfZ2V0b3B0LmMgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL3lhX2dldG9wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDA1MmUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL3lhX2dldG9wdC5jCkBAIC0wLDAgKzEsNDMwIEBACisvKiAtKi0gaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQ0KKyAqDQorICogeWFfZ2V0b3B0ICAtIFlldCBhbm90aGVyIGdldG9wdA0KKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJvL3lhX2dldG9wdA0KKyAqDQorICogQ29weXJpZ2h0IDIwMTUgS3VibyBUYWtlaGlybyA8a3Vib0BqaXViYW8ub3JnPg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlDQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorICoNCisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZg0KKyAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKg0KKyAqICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0DQorICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMNCisgKiAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTICcnQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRA0KKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQNCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IE9SDQorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYNCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlDQorICogYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQNCisgKiBvciBpbXBsaWVkLCBvZiB0aGUgYXV0aG9ycy4NCisgKg0KKyAqLw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlICJ5YV9nZXRvcHQuaCINCisNCitjaGFyICp5YV9vcHRhcmcgPSBOVUxMOw0KK2ludCB5YV9vcHRpbmQgPSAxOw0KK2ludCB5YV9vcHRlcnIgPSAxOw0KK2ludCB5YV9vcHRvcHQgPSAnPyc7DQorc3RhdGljIGNoYXIgKnlhX29wdG5leHQgPSBOVUxMOw0KK3N0YXRpYyBpbnQgcG9zaXhseV9jb3JyZWN0ID0gLTE7DQorc3RhdGljIGludCBoYW5kbGVfbm9ub3B0X2FyZ3YgPSAwOw0KKw0KK3N0YXRpYyB2b2lkIHlhX2dldG9wdF9lcnJvcihjb25zdCBjaGFyICpvcHRzdHJpbmcsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsNCitzdGF0aWMgdm9pZCBjaGVja19nbnVfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKm9wdHN0cmluZyk7DQorc3RhdGljIGludCB5YV9nZXRvcHRfaW50ZXJuYWwoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nb3B0cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxvbmdpbmRleCwgaW50IGxvbmdfb25seSk7DQorc3RhdGljIGludCB5YV9nZXRvcHRfc2hvcnRvcHRzKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZywgaW50IGxvbmdfb25seSk7DQorc3RhdGljIGludCB5YV9nZXRvcHRfbG9uZ29wdHMoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqYXJnLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZGV4LCBpbnQgKmxvbmdfb25seV9mbGFnKTsNCisNCitzdGF0aWMgdm9pZCB5YV9nZXRvcHRfZXJyb3IoY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikNCit7DQorI2lmIDANCisNCisgICAgaWYgKHlhX29wdGVyciAmJiBvcHRzdHJpbmdbMF0gIT0gJzonKQ0KKyAgICB7DQorICAgICAgICB2YV9saXN0IGFwOw0KKyAgICAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7DQorICAgICAgICB2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXApOw0KKyAgICAgICAgdmFfZW5kKGFwKTsNCisgICAgfQ0KKw0KKyNlbmRpZg0KK30NCisNCitzdGF0aWMgdm9pZCBjaGVja19nbnVfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKm9wdHN0cmluZykNCit7DQorI2lmIDENCisNCisgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnKycgfHwgZ2V0ZW52KCJQT1NJWExZX0NPUlJFQ1QiKSAhPSBOVUxMKQ0KKyAgICB7DQorI2Vsc2UNCisNCisgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnKycpDQorICAgIHsNCisjZW5kaWYNCisgICAgICAgIHBvc2l4bHlfY29ycmVjdCA9IDA7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBwb3NpeGx5X2NvcnJlY3QgPSAxOw0KKyAgICB9DQorDQorICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJy0nKQ0KKyAgICB7DQorICAgICAgICBoYW5kbGVfbm9ub3B0X2FyZ3YgPSAxOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgaGFuZGxlX25vbm9wdF9hcmd2ID0gMDsNCisgICAgfQ0KK30NCisNCitpbnQgeWFfZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykNCit7DQorICAgIHJldHVybiB5YV9nZXRvcHRfaW50ZXJuYWwoYXJnYywgYXJndiwgb3B0c3RyaW5nLCBOVUxMLCBOVUxMLCAwKTsNCit9DQorDQoraW50IHlhX2dldG9wdF9sb25nKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZywgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZGV4KQ0KK3sNCisgICAgcmV0dXJuIHlhX2dldG9wdF9pbnRlcm5hbChhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBsb25naW5kZXgsIDApOw0KK30NCisNCitpbnQgeWFfZ2V0b3B0X2xvbmdfb25seShpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbG9uZ2luZGV4KQ0KK3sNCisgICAgcmV0dXJuIHlhX2dldG9wdF9pbnRlcm5hbChhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBsb25naW5kZXgsIDEpOw0KK30NCisNCitzdGF0aWMgaW50IHlhX2dldG9wdF9pbnRlcm5hbChpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbG9uZ2luZGV4LCBpbnQgbG9uZ19vbmx5KQ0KK3sNCisgICAgc3RhdGljIGludCBzdGFydCwgZW5kOw0KKw0KKyAgICBpZiAoeWFfb3B0b3B0ID09ICc/JykNCisgICAgew0KKyAgICAgICAgeWFfb3B0b3B0ID0gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAocG9zaXhseV9jb3JyZWN0ID09IC0xKQ0KKyAgICB7DQorICAgICAgICBjaGVja19nbnVfZXh0ZW5zaW9uKG9wdHN0cmluZyk7DQorICAgIH0NCisNCisgICAgaWYgKHlhX29wdGluZCA9PSAwKQ0KKyAgICB7DQorICAgICAgICBjaGVja19nbnVfZXh0ZW5zaW9uKG9wdHN0cmluZyk7DQorICAgICAgICB5YV9vcHRpbmQgPSAxOw0KKyAgICAgICAgeWFfb3B0bmV4dCA9IE5VTEw7DQorICAgIH0NCisNCisgICAgc3dpdGNoIChvcHRzdHJpbmdbMF0pDQorICAgIHsNCisgICAgY2FzZSAnKyc6DQorICAgIGNhc2UgJy0nOg0KKyAgICAgICAgb3B0c3RyaW5nKys7DQorICAgIH0NCisNCisgICAgaWYgKHlhX29wdG5leHQgPT0gTlVMTCAmJiBzdGFydCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBpbnQgbGFzdF9wb3MgPSB5YV9vcHRpbmQgLSAxOw0KKw0KKyAgICAgICAgeWFfb3B0aW5kIC09IGVuZCAtIHN0YXJ0Ow0KKw0KKyAgICAgICAgaWYgKHlhX29wdGluZCA8PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX29wdGluZCA9IDE7DQorICAgICAgICB9DQorDQorICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQtLSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgaTsNCisgICAgICAgICAgICBjaGFyICphcmcgPSBhcmd2W2VuZF07DQorDQorICAgICAgICAgICAgZm9yIChpID0gZW5kOyBpIDwgbGFzdF9wb3M7IGkrKykNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICgoY2hhciAqKilhcmd2KVtpXSA9IGFyZ3ZbaSArIDFdOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAoKGNoYXIgY29uc3QgKiopYXJndilbaV0gPSBhcmc7DQorICAgICAgICAgICAgbGFzdF9wb3MtLTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHN0YXJ0ID0gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAoeWFfb3B0aW5kID49IGFyZ2MpDQorICAgIHsNCisgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgaWYgKHlhX29wdG5leHQgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgY29uc3QgY2hhciAqYXJnID0gYXJndlt5YV9vcHRpbmRdOw0KKw0KKyAgICAgICAgaWYgKCphcmcgIT0gJy0nKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmIChoYW5kbGVfbm9ub3B0X2FyZ3YpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB5YV9vcHRhcmcgPSBhcmd2W29wdGluZCsrXTsNCisgICAgICAgICAgICAgICAgc3RhcnQgPSAwOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgZWxzZSBpZiAocG9zaXhseV9jb3JyZWN0KQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgeWFfb3B0YXJnID0gTlVMTDsNCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpbnQgaTsNCisNCisgICAgICAgICAgICAgICAgc3RhcnQgPSB5YV9vcHRpbmQ7DQorDQorICAgICAgICAgICAgICAgIGZvciAoaSA9IHlhX29wdGluZCArIDE7IGkgPCBhcmdjOyBpKyspDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChhcmd2W2ldWzBdID09ICctJykNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGlmIChpID09IGFyZ2MpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgeWFfb3B0aW5kID0gaTsNCisgICAgICAgICAgICAgICAgYXJnID0gYXJndlt5YV9vcHRpbmRdOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChzdHJjbXAoYXJnLCAiLS0iKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChsb25nb3B0cyAhPSBOVUxMICYmIGFyZ1sxXSA9PSAnLScpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIHlhX2dldG9wdF9sb25nb3B0cyhhcmdjLCBhcmd2LCBhcmd2W3lhX29wdGluZF0gKyAyLCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBsb25naW5kZXgsIE5VTEwpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmICh5YV9vcHRuZXh0ID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHlhX29wdG5leHQgPSBhcmd2W3lhX29wdGluZF0gKyAxOw0KKyAgICB9DQorDQorICAgIGlmIChsb25nX29ubHkgJiYgbG9uZ29wdHMgIT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgaW50IGxvbmdfb25seV9mbGFnID0gMDsNCisgICAgICAgIGludCBydiA9IHlhX2dldG9wdF9sb25nb3B0cyhhcmdjLCBhcmd2LCB5YV9vcHRuZXh0LCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBsb25naW5kZXgsICZsb25nX29ubHlfZmxhZyk7DQorDQorICAgICAgICBpZiAoIWxvbmdfb25seV9mbGFnKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX29wdG5leHQgPSBOVUxMOw0KKyAgICAgICAgICAgIHJldHVybiBydjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4geWFfZ2V0b3B0X3Nob3J0b3B0cyhhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdfb25seSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgeWFfZ2V0b3B0X3Nob3J0b3B0cyhpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsIGludCBsb25nX29ubHkpDQorew0KKyAgICBpbnQgb3B0ID0gKnlhX29wdG5leHQ7DQorICAgIGNvbnN0IGNoYXIgKm9zID0gc3RyY2hyKG9wdHN0cmluZywgb3B0KTsNCisNCisgICAgaWYgKG9zID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorDQorICAgICAgICBpZiAobG9uZ19vbmx5KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX2dldG9wdF9lcnJvcihvcHRzdHJpbmcsICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiAnLSVzJ1xuIiwgYXJndlswXSwgeWFfb3B0bmV4dCk7DQorICAgICAgICAgICAgeWFfb3B0aW5kKys7DQorICAgICAgICAgICAgeWFfb3B0bmV4dCA9IE5VTEw7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgeWFfb3B0b3B0ID0gb3B0Ow0KKyAgICAgICAgICAgIHlhX2dldG9wdF9lcnJvcihvcHRzdHJpbmcsICIlczogaW52YWxpZCBvcHRpb24gLS0gJyVjJ1xuIiwgYXJndlswXSwgb3B0KTsNCisNCisgICAgICAgICAgICBpZiAoKigrK3lhX29wdG5leHQpID09IDApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisgICAgICAgICAgICAgICAgeWFfb3B0bmV4dCA9IE5VTEw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuICc/JzsNCisgICAgfQ0KKw0KKyAgICBpZiAob3NbMV0gPT0gJzonKQ0KKyAgICB7DQorICAgICAgICBpZiAoeWFfb3B0bmV4dFsxXSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKw0KKyAgICAgICAgICAgIGlmIChvc1syXSA9PSAnOicpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAvKiBvcHRpb25hbCBhcmd1bWVudCAqLw0KKyAgICAgICAgICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBpZiAoeWFfb3B0aW5kID09IGFyZ2MpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICB5YV9vcHRvcHQgPSBvcHQ7DQorICAgICAgICAgICAgICAgICAgICB5YV9nZXRvcHRfZXJyb3Iob3B0c3RyaW5nLCAiJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAnJWMnXG4iLCBhcmd2WzBdLCBvcHQpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc6JzsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz8nOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHlhX29wdGFyZyA9IGFyZ3ZbeWFfb3B0aW5kXTsNCisgICAgICAgICAgICAgICAgeWFfb3B0aW5kKys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHlhX29wdGFyZyA9IHlhX29wdG5leHQgKyAxOw0KKyAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgeWFfb3B0bmV4dCA9IE5VTEw7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICB5YV9vcHRhcmcgPSBOVUxMOw0KKw0KKyAgICAgICAgaWYgKHlhX29wdG5leHRbMV0gPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRuZXh0ID0gTlVMTDsNCisgICAgICAgICAgICB5YV9vcHRpbmQrKzsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICB5YV9vcHRuZXh0Kys7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIG9wdDsNCit9DQorDQorc3RhdGljIGludCB5YV9nZXRvcHRfbG9uZ29wdHMoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqYXJnLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZGV4LCBpbnQgKmxvbmdfb25seV9mbGFnKQ0KK3sNCisgICAgY2hhciAqdmFsID0gTlVMTDsNCisgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0Ow0KKyAgICBzaXplX3QgbmFtZWxlbjsNCisgICAgaW50IGlkeDsNCisNCisgICAgZm9yIChpZHggPSAwOyBsb25nb3B0c1tpZHhdLm5hbWUgIT0gTlVMTDsgaWR4KyspDQorICAgIHsNCisgICAgICAgIG9wdCA9ICZsb25nb3B0c1tpZHhdOw0KKyAgICAgICAgbmFtZWxlbiA9IHN0cmxlbihvcHQtPm5hbWUpOw0KKw0KKyAgICAgICAgaWYgKHN0cm5jbXAoYXJnLCBvcHQtPm5hbWUsIG5hbWVsZW4pID09IDApDQorICAgICAgICB7DQorICAgICAgICAgICAgc3dpdGNoIChhcmdbbmFtZWxlbl0pDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgIGNhc2UgJ1wwJzoNCisgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQtPmhhc19hcmcpDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgY2FzZSB5YV9yZXF1aXJlZF9hcmd1bWVudDoNCisgICAgICAgICAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHlhX29wdGluZCA9PSBhcmdjKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHlhX29wdGFyZyA9IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICAgICAgeWFfb3B0b3B0ID0gb3B0LT52YWw7DQorICAgICAgICAgICAgICAgICAgICAgICAgeWFfZ2V0b3B0X2Vycm9yKG9wdHN0cmluZywgIiVzOiBvcHRpb24gJy0tJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLCBhcmd2WzBdLCBvcHQtPm5hbWUpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJzonKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc6JzsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc/JzsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmd2W3lhX29wdGluZF07DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOw0KKw0KKyAgICAgICAgICAgIGNhc2UgJz0nOg0KKyAgICAgICAgICAgICAgICBpZiAob3B0LT5oYXNfYXJnID09IHlhX25vX2FyZ3VtZW50KQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoeXBoZW5zID0gKGFyZ3ZbeWFfb3B0aW5kXVsxXSA9PSAnLScpID8gIi0tIiA6ICItIjsNCisNCisgICAgICAgICAgICAgICAgICAgIHlhX29wdGluZCsrOw0KKyAgICAgICAgICAgICAgICAgICAgeWFfb3B0YXJnID0gTlVMTDsNCisgICAgICAgICAgICAgICAgICAgIHlhX29wdG9wdCA9IG9wdC0+dmFsOw0KKyAgICAgICAgICAgICAgICAgICAgeWFfZ2V0b3B0X2Vycm9yKG9wdHN0cmluZywgIiVzOiBvcHRpb24gJyVzJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIsIGFyZ3ZbMF0sIGh5cGhlbnMsIG9wdC0+bmFtZSk7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz8nOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIHZhbCA9IGFyZyArIG5hbWVsZW4gKyAxOw0KKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBpZiAobG9uZ19vbmx5X2ZsYWcpDQorICAgIHsNCisgICAgICAgICpsb25nX29ubHlfZmxhZyA9IDE7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICB5YV9nZXRvcHRfZXJyb3Iob3B0c3RyaW5nLCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gJyVzJ1xuIiwgYXJndlswXSwgYXJndlt5YV9vcHRpbmRdKTsNCisgICAgICAgIHlhX29wdGluZCsrOw0KKyAgICB9DQorDQorICAgIHJldHVybiAnPyc7DQorZm91bmQ6DQorICAgIHlhX29wdGFyZyA9IHZhbDsNCisgICAgeWFfb3B0aW5kKys7DQorDQorICAgIGlmIChvcHQtPmZsYWcpDQorICAgIHsNCisgICAgICAgICpvcHQtPmZsYWcgPSBvcHQtPnZhbDsNCisgICAgfQ0KKw0KKyAgICBpZiAobG9uZ2luZGV4KQ0KKyAgICB7DQorICAgICAgICAqbG9uZ2luZGV4ID0gaWR4Ow0KKyAgICB9DQorDQorICAgIHJldHVybiBvcHQtPmZsYWcgPyAwIDogb3B0LT52YWw7DQorfQ0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3N5bm9wc3lzL2VtYmFyY19lbXNrX2JzcC9saWJyYXJ5L2NsaWIveWFfZ2V0b3B0LmggYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL3lhX2dldG9wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzEyMTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9zeW5vcHN5cy9lbWJhcmNfZW1za19ic3AvbGlicmFyeS9jbGliL3lhX2dldG9wdC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qIC0qLSBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotDQorICoNCisgKiB5YV9nZXRvcHQgIC0gWWV0IGFub3RoZXIgZ2V0b3B0DQorICogaHR0cHM6Ly9naXRodWIuY29tL2t1Ym8veWFfZ2V0b3B0DQorICoNCisgKiBDb3B5cmlnaHQgMjAxNSBLdWJvIFRha2VoaXJvIDxrdWJvQGppdWJhby5vcmc+DQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUNCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisgKg0KKyAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mDQorICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqDQorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QNCisgKiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscw0KKyAqICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgJydBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORA0KKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gT1INCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqDQorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGUNCisgKiBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZA0KKyAqIG9yIGltcGxpZWQsIG9mIHRoZSBhdXRob3JzLg0KKyAqDQorICovDQorI2lmbmRlZiBZQV9HRVRPUFRfSA0KKyNkZWZpbmUgWUFfR0VUT1BUX0ggMQ0KKw0KKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQ0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgeWFfbm9fYXJndW1lbnQgICAgICAgIDANCisjZGVmaW5lIHlhX3JlcXVpcmVkX2FyZ3VtZW50ICAxDQorI2RlZmluZSB5YV9vcHRpb25hbF9hcmd1bWVudCAgMg0KKw0KK3N0cnVjdCBvcHRpb24NCit7DQorICAgIGNvbnN0IGNoYXIgKm5hbWU7DQorICAgIGludCBoYXNfYXJnOw0KKyAgICBpbnQgKmZsYWc7DQorICAgIGludCB2YWw7DQorfTsNCisNCitpbnQgeWFfZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZyk7DQoraW50IHlhX2dldG9wdF9sb25nKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZywNCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZGV4KTsNCitpbnQgeWFfZ2V0b3B0X2xvbmdfb25seShpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjb25zdCBjaGFyICpvcHRzdHJpbmcsDQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZGV4KTsNCisNCitleHRlcm4gY2hhciAqeWFfb3B0YXJnOw0KK2V4dGVybiBpbnQgeWFfb3B0aW5kLCB5YV9vcHRlcnIsIHlhX29wdG9wdDsNCisNCisjaWZuZGVmIFlBX0dFVE9QVF9OT19DT01QQVRfTUFDUk8NCisjZGVmaW5lIGdldG9wdCB5YV9nZXRvcHQNCisjZGVmaW5lIGdldG9wdF9sb25nIHlhX2dldG9wdF9sb25nDQorI2RlZmluZSBnZXRvcHRfbG9uZ19vbmx5IHlhX2dldG9wdF9sb25nX29ubHkNCisjZGVmaW5lIG9wdGFyZyB5YV9vcHRhcmcNCisjZGVmaW5lIG9wdGluZCB5YV9vcHRpbmQNCisjZGVmaW5lIG9wdGVyciB5YV9vcHRlcnINCisjZGVmaW5lIG9wdG9wdCB5YV9vcHRvcHQNCisjZGVmaW5lIG5vX2FyZ3VtZW50IHlhX25vX2FyZ3VtZW50DQorI2RlZmluZSByZXF1aXJlZF9hcmd1bWVudCB5YV9yZXF1aXJlZF9hcmd1bWVudA0KKyNkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQgeWFfb3B0aW9uYWxfYXJndW1lbnQNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvUkVBRE1FLm1kIGIvdGhpcmRfcGFydHkvdGkvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjcyODAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9SRUFETUUubWQKQEAgLTAsMCArMSwzNSBAQAorI0NDMjZYWHdhcmUKKworIyMgVVJMCisKK2h0dHA6Ly93d3cudGkuY29tL3Rvb2wvY2MyNnh4d2FyZQorCisqbm90ZSo6IFRoaXMgd2lsbCByZWRpcmVjdCB0byBodHRwOi8vd3d3LnRpLmNvbS90b29sL3RpLXJ0b3MgYmVjYXVzZSBDQzI2WFh3YXJlCisgICAgICAgIGlzIG5vIGxvbmdlciBkaXN0cmlidXRlZCBhcyBpdHMgb3duIHBhY2thZ2UuCisKKyMjIFZlcnNpb24KKworMi4yNC4weAorCisjIyBMaWNlbnNlCisKK0JTRC0zLUNsYXVzZQorCisjIyBMaWNlbnNlIEZpbGUKKworW0V4cG9ydCBNYW5pZmVzdF0oY2MyNnh4d2FyZS9jYzI2eHh3YXJlXzJfMjRfMHhfbWFuaWZlc3QuaHRtbCkKKworIyMgRG9jdW1lbnRhdGlvbgorCitUaGlzIHZlcnNpb24gb2YgQ0MyNlhYd2FyZSB3YXMgY29waWVkIGZyb20KK1tUSS1SVE9TdjIuMjAuMDAuMDZdKGh0dHA6Ly9zb2Z0d2FyZS1kbC50aS5jb20vZHNwcy9kc3BzX3B1YmxpY19zdy9zZG9fc2IvdGFyZ2V0Y29udGVudC90aXJ0b3MvMl8yMF8wMF8wNi9leHBvcnRzL3RpcnRvc19mdWxsXzJfMjBfMDBfMDYvZG9jcy9Eb2N1bWVudGF0aW9uX092ZXJ2aWV3X2NjMTN4eF9jYzI2eHguaHRtbCkuCitSRiBjb21tYW5kIGZpbGVzIHdlcmUgYWRkZWQgdG8gc3VwcG9ydCBJRUVFIG1vZGUuIFRoZSBkb2N1bWVudGF0aW9uIHdhcyByZW1vdmVkCitmcm9tIGBjYzI2eHh3YXJlL2RvY2AgYW5kIGNhbiBiZSBmb3VuZAorW2hlcmVdKGh0dHA6Ly9zb2Z0d2FyZS1kbC50aS5jb20vZHNwcy9kc3BzX3B1YmxpY19zdy9zZG9fc2IvdGFyZ2V0Y29udGVudC90aXJ0b3MvMl8yMF8wMF8wNi9leHBvcnRzL3RpcnRvc19mdWxsXzJfMjBfMDBfMDYvcHJvZHVjdHMvY2MyNnh4d2FyZV8yXzI0XzAyXzE3MjAyL2RvYy9kb2Nfb3ZlcnZpZXcuaHRtbCkuCisKKyMjIERlc2NyaXB0aW9uCisKK0NDMjZYWHdhcmUgaXMgdGhlIGJvYXJkIHN1cHBvcnQgbGlicmFyeSBmb3IgVGV4YXMgSW5zdHJ1bWVudHMnIENDMjZYMCBsaW5lIG9mCitjb25uZWN0ZWQgTUNVcyBmb3IgZGV2ZWxvcGVycyB0byBlYXNpbHkgbGV2ZXJhZ2UgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBvZgordGhvc2UgcGxhdGZvcm1zLiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgcmVjb21tZW5kcyBUSS1SVE9TIGFuZCBpdHMKK2Fzc29jaWF0ZWQgZHJpdmVycyBmb3IgZnV0dXJlIGRldmVsb3BtZW50LgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9jYzI2eHh3YXJlXzJfMjRfMHhfbWFuaWZlc3QuaHRtbCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvY2MyNnh4d2FyZV8yXzI0XzB4X21hbmlmZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllMjVjMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvY2MyNnh4d2FyZV8yXzI0XzB4X21hbmlmZXN0Lmh0bWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRmMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpLmMKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFkaS5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMi0xNSAxMDo0MDo1NiArMDEwMCAoVHVlLCAxNSBEZWMgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTMwNworKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFESSBpbnRlcmZhY2UKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF9zbXBoLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2FkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2FmZUhhcGlWb2lkKCkgYW5kIFNhZmVIYXBpQXV4QWRpU2VsZWN0KCkKKy8vIENvbW1vbiB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgdGhlIEhhcGkgZnVuY3Rpb25zIG5lZWRpbmcgdGhlICJidXMgYXJiaXRyYXRpb24KKy8vIGlzc3VlIiB3b3JrYXJvdW5kLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgU2FmZUhhcGlWb2lkKCBGUFRSX1ZPSURfVk9JRF9UIGZQdHIgKQoreworICAgIGJvb2wgYklycUVuYWJsZWQgPSAoICEgQ1BVY3BzaWQoKSApOworICAgIHdoaWxlICggISBIV1JFRyggQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDAgKSk7CisgICAgZlB0cigpOworICAgIEhXUkVHKCBBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCApID0gMTsKKyAgICBpZiAoIGJJcnFFbmFibGVkICkgeworICAgICAgICBDUFVjcHNpZSgpOworICAgIH0KK30KKwordm9pZCBTYWZlSGFwaUF1eEFkaVNlbGVjdCggRlBUUl9WT0lEX1VJTlQ4X1QgZlB0ciwgdWludDhfdCB1dDhTaWduYWwgKQoreworICAgIGJvb2wgYklycUVuYWJsZWQgPSAoICEgQ1BVY3BzaWQoKSApOworICAgIHdoaWxlICggISBIV1JFRyggQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDAgKSk7CisgICAgZlB0ciggdXQ4U2lnbmFsICk7CisgICAgSFdSRUcoIEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwICkgPSAxOworICAgIGlmICggYklycUVuYWJsZWQgKSB7CisgICAgICAgIENQVWNwc2llKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2ZiYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpLmgKQEAgLTAsMCArMSw5NDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhZGkuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMTYgMTc6MDU6MTEgKzAxMDAgKE1vbiwgMTYgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUwODcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQURJIG1hc3RlciBpbnRlcmZhY2UuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGFuYWxvZ19ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYWRpX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQURJX0hfXworI2RlZmluZSBfX0FESV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od191YXJ0Lmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZGkuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE51bWJlciBvZiByZWdpc3RlcnMgaW4gdGhlIEFESSBzbGF2ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NMQVZFX1JFR1MgICAgICAxNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIEFESUNvbmZpZ1NldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTk9fV0FJVCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQURJX1dBSVRfRk9SX0FDSyAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV9TUEVFRF8yICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBBRElfU1BFRURfNCAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJX1NQRUVEXzggICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV9TUEVFRF8xNiAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBRElfQ09ORklHX01BU0sgICAgIDB4MDAwMDAwMDcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhhdCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIEFESSBzbGF2ZSBhbmQgbWFzdGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfUFJPVEVDVCAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJX0FDSyAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV9TWU5DICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vISBcYnJpZWYgQ2hlY2tzIGFuIEFESSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYW4gQURJIHBvcnQgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFESSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZCBhbmQgXGMgZmFsc2UKKy8vISBvdGhlcndpc2UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorQURJQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBBREkyX0JBU0UgfHwgdWkzMkJhc2UgPT0gQURJM19CQVNFIHx8CisgICAgICAgICAgIHVpMzJCYXNlID09IEFVWF9BREk0X0JBU0UpOworfQorI2VuZGlmCisKKworCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV3JpdGUgYW4gOCBiaXQgdmFsdWUgdG8gYSByZWdpc3RlciBpbiBhbiBBREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgYSB2YWx1ZSB0byBhIHNpbmdsZSByZWdpc3RlciBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vISBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2LCBvciAzMiBiaXQKKy8vISBhbGlnbmVkLiBZb3UgY2FuIG9ubHkgZG8gMTYgYml0IGFjY2VzcyBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseQorLy8hIDMyIGJpdCBhY2Nlc3NlcyBhcmUgYWx3YXlzIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcsIGV0Yy4gQWRkcmVzc2VzCisvLyEgZm9yIHRoZSByZWdpc3RlcnMgYW5kIHZhbHVlcyBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZQorLy8hIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3Mgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4gTm8KKy8vISBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBrZXB0IChpLmUuIHRoaXMgaXMgTk9UCisvLyEgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHJlZ2lzdGVyKS4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSByZWdpc3RlciB0byB3cml0ZS4KKy8vISBccGFyYW0gdWk4VmFsIGlzIHRoZSA4IGJpdCB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREkxNlJlZ1dyaXRlKCksIEFESTMyUmVnV3JpdGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREk4UmVnV3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQ4X3QgdWk4VmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIHZhbHVlIHRvIHRoZSByZWdpc3Rlci4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnLCB1aThWYWwsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHQih1aTMyQmFzZSArIHVpMzJSZWcpID0gdWk4VmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV3JpdGUgYSAxNiBiaXQgdmFsdWUgdG8gMiByZWdpc3RlcnMgaW4gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBhIHZhbHVlIHRvIDIgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cKKy8vISBkb21haW4uIFRoZSBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBpcyBlaXRoZXIgOCwgMTYKKy8vISBvciAzMiBiaXQgYWxpZ25lZC4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3Mgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywKKy8vISBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03LAorLy8hIGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgYmVpbmcgd3JpdHRlbgorLy8hIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzIHNjaGVtZS4KKy8vIQorLy8hIFxub3RlIFRoZSBieXRlIGFkZHJlc3NpbmcgYml0IHdpbGwgYmUgaWdub3JlZCwgdG8gZW5zdXJlIDE2IGJpdCBhY2Nlc3MKKy8vISB0byB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4gTm8KKy8vISBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBrZXB0IChpLmUuIHRoaXMgaXMgTk9UCisvLyEgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHJlZ2lzdGVyKS4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSByZWdpc3RlciB0byB3cml0ZS4KKy8vISBccGFyYW0gdWkxNlZhbCBpcyB0aGUgMTYgYml0IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESThSZWdXcml0ZSgpLCBBREkzMlJlZ1dyaXRlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJMTZSZWdXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgdWludDE2X3QgdWkxNlZhbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSB2YWx1ZSB0byB0aGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgKHVpMzJSZWcgJiAweEZFKSwgdWkxNlZhbCwgMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUdIKHVpMzJCYXNlICsgKHVpMzJSZWcgJiAweEZFKSkgPSB1aTE2VmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV3JpdGUgYSAzMiBiaXQgdmFsdWUgdG8gNCByZWdpc3RlcnMgaW4gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBhIHZhbHVlIHRvIDQgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cKKy8vISBkb21haW4uIFRoZSBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBpcyBlaXRoZXIgOCwgMTYKKy8vISBvciAzMiBiaXQgYWxpZ25lZC4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3Mgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywKKy8vISBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03LAorLy8hIGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgYmVpbmcgd3JpdHRlbgorLy8hIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzIHNjaGVtZS4KKy8vIQorLy8hIFxub3RlIFRoZSBieXRlIGFuZCBoYWxmIHdvcmQgYWRkcmVzc2luZyBiaXRzIHdpbGwgYmUgaWdub3JlZCwgdG8gZW5zdXJlCisvLyEgMzIgYml0IGFjY2VzcyB0byB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4gTm8KKy8vISBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBrZXB0IChpLmUuIHRoaXMgaXMgTk9UCisvLyEgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHJlZ2lzdGVyKS4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSByZWdpc3RlciB0byB3cml0ZS4KKy8vISBccGFyYW0gdWkzMlZhbCBpcyB0aGUgMzIgYml0IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESThSZWdXcml0ZSgpLCBBREkxNlJlZ1dyaXRlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJMzJSZWdXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDMyX3QgdWkzMlZhbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSB2YWx1ZSB0byB0aGUgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgKHVpMzJSZWcgJiAweEZDKSwgdWkzMlZhbCwgNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyAodWkzMlJlZyAmIDB4RkMpKSA9IHVpMzJWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWFkIHRoZSB2YWx1ZSBvZiBhbiA4IGJpdCByZWdpc3RlciBpbiB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgYW4gOCBiaXQgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZyBkb21haW4gYW5kIHJldHVybgorLy8hIHRoZSB2YWx1ZSBhcyB0aGUgbG93ZXIgOCBiaXRzIG9mIGFuIFxjIHVpbnQzMl90LiBUaGUgYWNjZXNzIHRvIHRoZQorLy8hIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbiBpcyBlaXRoZXIgOCwgMTYgb3IgMzIgYml0IGFsaWduZWQuIFlvdSBjYW4KKy8vISBvbmx5IGRvIDE2IGJpdCBhY2Nlc3Mgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzCisvLyEgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03LCBldGMuIEFkZHJlc3NlcyBmb3IgdGhlCisvLyEgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXJzIHdpbGwgYmUgdHJ1bmNhdGVkCisvLyEgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzIHNjaGVtZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSA4IGJpdCByZWdpc3RlciB0byByZWFkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSA4IGJpdCB2YWx1ZSBvZiB0aGUgYW5hbG9nIHJlZ2lzdGVyIGluIHRoZSBsZWFzdAorLy8hIHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIFxjIHVpbnQzMl90LgorLy8hCisvLyEgXHNhIEFESTE2UmVnUmVhZCgpLCBBREkzMlJlZ1JlYWQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQURJOFJlZ1JlYWQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSByZWdpc3RlciBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICByZXR1cm4gQXV4QWRpRGRpU2FmZVJlYWQodWkzMkJhc2UgKyB1aTMyUmVnLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4oSFdSRUdCKHVpMzJCYXNlICsgdWkzMlJlZykpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCB0aGUgdmFsdWUgaW4gYSAxNiBiaXQgcmVnaXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCAyIHggOCBiaXQgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGFuZCByZXR1cm4KKy8vISB0aGUgdmFsdWUgYXMgdGhlIGxvd2VyIDE2IGJpdHMgb2YgYW4gXGMgdWludDMyX3QuIFRoZSBhY2Nlc3MgdG8gdGhlCisvLyEgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQgYWxpZ25lZC4gWW91IGNhbgorLy8hIG9ubHkgZG8gMTYgYml0IGFjY2VzcyBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMKKy8vISBhcmUgYWx3YXlzIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcsIGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUKKy8vISByZWdpc3RlcnMgYW5kIHZhbHVlcyBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQKKy8vISBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3Mgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhlIGJ5dGUgYWRkcmVzc2luZyBiaXQgd2lsbCBiZSBpZ25vcmVkLCB0byBlbnN1cmUgMTYgYml0IGFjY2VzcworLy8hIHRvIHRoZSBBREkgc2xhdmUuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgMTYgYml0IHJlZ2lzdGVyIHRvIHJlYWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIDE2IGJpdCB2YWx1ZSBvZiB0aGUgMiBhbmFsb2cgcmVnaXN0ZXIgaW4gdGhlIDIgbGVhc3QKKy8vISBzaWduaWZpY2FudCBieXRlcyBvZiB0aGUgXGMgdWludDMyX3QuCisvLyEKKy8vISBcc2EgQURJOFJlZ1JlYWQoKSwgQURJMzJSZWdSZWFkKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FESTE2UmVnUmVhZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIHJlZ2lzdGVycyBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICByZXR1cm4gQXV4QWRpRGRpU2FmZVJlYWQodWkzMkJhc2UgKyAodWkzMlJlZyAmIDB4RkUpLCAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4oSFdSRUdIKHVpMzJCYXNlICsgKHVpMzJSZWcgJiAweEZFKSkpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCB0aGUgdmFsdWUgaW4gYSAzMiBiaXQgcmVnaXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCA0IHggOCBiaXQgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGFuZCByZXR1cm4KKy8vISB0aGUgdmFsdWUgYXMgYW4gXGMgdWludDMyX3QuIFRoZSBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nCisvLyEgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQgYWxpZ25lZC4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3Mgb24KKy8vISByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24KKy8vISByZWdpc3RlciAwLTMgLyA0LTcsIGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgYmVpbmcKKy8vISB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzIHNjaGVtZS4KKy8vIQorLy8hIFxub3RlIFRoZSBieXRlIGFuZCBoYWxmIHdvcmQgYWRkcmVzc2luZyBiaXRzIHdpbGwgYmUgaWdub3JlZCwgdG8gZW5zdXJlCisvLyEgMzIgYml0IGFjY2VzcyB0byB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIDMyIGJpdCByZWdpc3RlciB0byByZWFkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSAzMiBiaXQgdmFsdWUgb2YgdGhlIDQgYW5hbG9nIHJlZ2lzdGVycy4KKy8vIQorLy8hIFxzYSBBREk4UmVnUmVhZCgpLCBBREkxNlJlZ1JlYWQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQURJMzJSZWdSZWFkKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gdGhlIHZhbHVlLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIHJldHVybiBBdXhBZGlEZGlTYWZlUmVhZCh1aTMyQmFzZSArICh1aTMyUmVnICYgMHhGQyksIDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybihIV1JFRyh1aTMyQmFzZSArICh1aTMyUmVnICYgMHhGQykpKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBzcGVjaWZpYyBiaXRzIGluIGEgc2luZ2xlIDggYml0IEFESSByZWdpc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYml0cyBpbiBhIHNpbmdsZSByZWdpc3RlciBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vISBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2IG9yIDMyIGJpdAorLy8hIGFsaWduZWQsIGJ1dCBhcnJhbmdlZCBpbiBjaHVua3Mgb2YgMzIgYml0cy4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3MKKy8vISBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cworLy8hIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcgZXRjLiBBZGRyZXNzZXMgZm9yIHRoZSByZWdpc3RlcnMgYW5kIHZhbHVlcworLy8hIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVycyB3aWxsIGJlIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3MKKy8vISBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLgorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgYml0cyBpbiBhIHNwZWNpZmljIDggYml0IHJlZ2lzdGVyIGluIHRoZQorLy8hIEFESSBzbGF2ZS4gT25seSBiaXRzIGluIHRoZSBzZWxlY3RlZCByZWdpc3RlciBhcmUgYWZmZWN0ZWQgYnkgdGhlCisvLyEgb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIEFESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXIgdG8gYXNzZXJ0IHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aThWYWwgaXMgdGhlIDggYml0IG9uZS1ob3QgZW5jb2RlZCB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoCisvLyEgYml0cyB0byBzZXQgaW4gdGhlIHJlZ2lzdGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQURJMTZCaXRzU2V0KCksIEFESTMyQml0c1NldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESThCaXRzU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50OF90IHVpOFZhbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnT2Zmc2V0OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIEFESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBBRElfT19TRVQ7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgdWkzMlJlZywgdWk4VmFsLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0IodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgdWkzMlJlZykgPSB1aThWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgc3BlY2lmaWMgYml0cyBpbiAyIHggOCBiaXQgQURJIHNsYXZlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYml0cyBpbiAyIHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vISBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2IG9yIDMyIGJpdAorLy8hIGFsaWduZWQsIGJ1dCBhcnJhbmdlZCBpbiBjaHVua3Mgb2YgMzIgYml0cy4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3MKKy8vISBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cworLy8hIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcgZXRjLiBBZGRyZXNzZXMgZm9yIHRoZSByZWdpc3RlcnMgYW5kIHZhbHVlcworLy8hIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVycyB3aWxsIGJlIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3MKKy8vISBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLgorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgYml0cyBpbiAyIGNvbnNlY3V0aXZlIDggYml0IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBBREkgc2xhdmUuIE9ubHkgYml0cyBpbiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXJzIGFyZSBhZmZlY3RlZCBieSB0aGUKKy8vISBvcGVyYXRpb24uCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgYmFzZSByZWdpc3RlciB0byBhc3NlcnQgdGhlIGJpdHMgaW4uCisvLyEgXHBhcmFtIHVpMTZWYWwgaXMgdGhlIDE2IGJpdCBvbmUtaG90IGVuY29kZWQgdmFsdWUgc3BlY2lmeWluZyB3aGljaAorLy8hIGJpdHMgdG8gc2V0IGluIHRoZSByZWdpc3RlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk4Qml0c1NldCgpLCBBREkzMkJpdHNTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREkxNkJpdHNTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQxNl90IHVpMTZWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fU0VUOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArICh1aTMyUmVnICYgMHhGRSksIHVpMTZWYWwsIDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHSCh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkUpKSA9IHVpMTZWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgc3BlY2lmaWMgYml0cyBpbiA0IHggOCBiaXQgQURJIHNsYXZlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYml0cyBpbiA0IHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vISBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2IG9yIDMyIGJpdAorLy8hIGFsaWduZWQsIGJ1dCBhcnJhbmdlZCBpbiBjaHVua3Mgb2YgMzIgYml0cy4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3MKKy8vISBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cworLy8hIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcgZXRjLiBBZGRyZXNzZXMgZm9yIHRoZSByZWdpc3RlcnMgYW5kIHZhbHVlcworLy8hIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVycyB3aWxsIGJlIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3MKKy8vISBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLgorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgYml0cyBpbiA0IGNvbnNlY3V0aXZlIDggYml0IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBBREkgc2xhdmUuIE9ubHkgYml0cyBpbiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXJzIGFyZSBhZmZlY3RlZCBieSB0aGUKKy8vISBvcGVyYXRpb24uCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgYmFzZSByZWdpc3RlciB0byBhc3NlcnQgdGhlIGJpdHMgaW4uCisvLyEgXHBhcmFtIHVpMzJWYWwgaXMgdGhlIDMyIGJpdCBvbmUtaG90IGVuY29kZWQgdmFsdWUgc3BlY2lmeWluZyB3aGljaAorLy8hIGJpdHMgdG8gc2V0IGluIHRoZSByZWdpc3RlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk4Qml0c1NldCgpLCBBREkxNkJpdHNTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREkzMkJpdHNTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fU0VUOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArICh1aTMyUmVnICYgMHhGQyksIHVpMzJWYWwsIDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArICh1aTMyUmVnICYgMHhGQykpID0gdWkzMlZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFyIHNwZWNpZmljIGJpdHMgaW4gYW4gOCBiaXQgQURJIHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIGJpdHMgaW4gYSByZWdpc3RlciBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vISBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2IG9yIDMyIGJpdAorLy8hIGFsaWduZWQsIGJ1dCBhcnJhbmdlZCBpbiBjaHVua3Mgb2YgMzIgYml0cy4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3MKKy8vISBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cworLy8hIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcgZXRjLiBBZGRyZXNzZXMgZm9yIHRoZSByZWdpc3RlcnMgYW5kIHZhbHVlcworLy8hIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVycyB3aWxsIGJlIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3MKKy8vISBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLgorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBiaXRzIGluIGEgc3BlY2lmaWMgOCBiaXQgcmVnaXN0ZXIgaW4KKy8vISB0aGUgQURJIHNsYXZlLiBPbmx5IGJpdHMgaW4gdGhlIHNlbGVjdGVkIHJlZ2lzdGVyIGFyZSBhZmZlY3RlZCBieSB0aGUKKy8vISBvcGVyYXRpb24uCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgYmFzZSByZWdpc3RlcnMgdG8gY2xlYXIgdGhlIGJpdHMgaW4uCisvLyEgXHBhcmFtIHVpOFZhbCBpcyB0aGUgOCBiaXQgb25lLWhvdCBlbmNvZGVkIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2gKKy8vISBiaXRzIHRvIGNsZWFyIGluIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESTE2Qml0c0NsZWFyKCksIEFESTMyQml0c0NsZWFyKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQURJOEJpdHNDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDhfdCB1aThWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBBREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gQURJX09fQ0xSOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArIHVpMzJSZWcsIHVpOFZhbCwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUdCKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArIHVpMzJSZWcpID0gdWk4VmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXIgc3BlY2lmaWMgYml0cyBpbiB0d28gOCBiaXQgQURJIHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIGJpdHMgaW4gMiByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4uCisvLyEgVGhlIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzIGluIHRoZSBhbmFsb2cgZG9tYWluIGlzIGVpdGhlciA4LCAxNiBvciAzMiBiaXQKKy8vISBhbGlnbmVkLCBidXQgYXJyYW5nZWQgaW4gY2h1bmtzIG9mIDMyIGJpdHMuIFlvdSBjYW4gb25seSBkbyAxNiBiaXQgYWNjZXNzCisvLyEgb24gcmVnaXN0ZXJzIDAtMSAvIDItMywgZXRjLiBTaW1pbGFybHkgMzIgYml0IGFjY2Vzc2VzIGFyZSBhbHdheXMKKy8vISBwZXJmb3JtZWQgb24gcmVnaXN0ZXIgMC0zIC8gNC03IGV0Yy4gQWRkcmVzc2VzIGZvciB0aGUgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMKKy8vISBiZWluZyB3cml0dGVuIHRvIHRoZSByZWdpc3RlcnMgd2lsbCBiZSB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgYWNjZXNzCisvLyEgc2NoZW1lLgorLy8hCisvLyEgXG5vdGUgVGhpcyBvcGVyYXRpb24gaXMgd3JpdGUgb25seSBmb3IgdGhlIHNwZWNpZmllZCByZWdpc3Rlci4KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYml0cyBpbiAyIGNvbnNlY3V0aXZlIDggYml0IHJlZ2lzdGVycyBpbgorLy8hIHRoZSBBREkgc2xhdmUuIE9ubHkgYml0cyBpbiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXJzIGFyZSBhZmZlY3RlZCBieSB0aGUKKy8vISBvcGVyYXRpb24uCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgQURJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgYmFzZSByZWdpc3RlcnMgdG8gY2xlYXIgdGhlIGJpdHMgaW4uCisvLyEgXHBhcmFtIHVpMTZWYWwgaXMgdGhlIDE2IGJpdCBvbmUtaG90IGVuY29kZWQgdmFsdWUgc3BlY2lmeWluZyB3aGljaAorLy8hIGJpdHMgdG8gY2xlYXIgaW4gdGhlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESThCaXRzQ2xlYXIoKSwgQURJMzJCaXRzQ2xlYXIoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREkxNkJpdHNDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDE2X3QgdWkxNlZhbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnT2Zmc2V0OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIEFESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBBRElfT19DTFI7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgKHVpMzJSZWcgJiAweEZFKSwgdWkxNlZhbCwgMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUdIKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCArICh1aTMyUmVnICYgMHhGRSkpID0gdWkxNlZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFyIHNwZWNpZmljIGJpdHMgaW4gZm91ciA4IGJpdCBBREkgcmVnaXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgYml0cyBpbiA0IHJlZ2lzdGVycyBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vISBUaGUgYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gaXMgZWl0aGVyIDgsIDE2IG9yIDMyIGJpdAorLy8hIGFsaWduZWQsIGJ1dCBhcnJhbmdlZCBpbiBjaHVua3Mgb2YgMzIgYml0cy4gWW91IGNhbiBvbmx5IGRvIDE2IGJpdCBhY2Nlc3MKKy8vISBvbiByZWdpc3RlcnMgMC0xIC8gMi0zLCBldGMuIFNpbWlsYXJseSAzMiBiaXQgYWNjZXNzZXMgYXJlIGFsd2F5cworLy8hIHBlcmZvcm1lZCBvbiByZWdpc3RlciAwLTMgLyA0LTcgZXRjLiBBZGRyZXNzZXMgZm9yIHRoZSByZWdpc3RlcnMgYW5kIHZhbHVlcworLy8hIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVycyB3aWxsIGJlIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBhY2Nlc3MKKy8vISBzY2hlbWUuCisvLyEKKy8vISBcbm90ZSBUaGlzIG9wZXJhdGlvbiBpcyB3cml0ZSBvbmx5IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyLgorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhciBiaXRzIGluIDQgY29uc2VjdXRpdmUgOCBiaXQgcmVnaXN0ZXJzIGluCisvLyEgdGhlIEFESSBzbGF2ZS4gT25seSBiaXRzIGluIHRoZSBzZWxlY3RlZCByZWdpc3RlcnMgYXJlIGFmZmVjdGVkIGJ5IHRoZQorLy8hIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBBREkgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSBiYXNlIHJlZ2lzdGVycyB0byBjbGVhciB0aGUgYml0cyBpbi4KKy8vISBccGFyYW0gdWkzMlZhbCBpcyB0aGUgMzIgYml0IG9uZS1ob3QgZW5jb2RlZCB2YWx1ZSBzcGVjaWZ5aW5nIHdoaWNoCisvLyEgYml0cyB0byBjbGVhciBpbiB0aGUgcmVnaXN0ZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQURJOEJpdHNDbGVhcigpLCBBREkxNkJpdHNDbGVhcigpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESTMyQml0c0NsZWFyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MzJfdCB1aTMyVmFsKQoreworICAgIHVpbnQzMl90IHVpMzJSZWdPZmZzZXQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQURJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJSZWcgPCBBRElfU0xBVkVfUkVHUyk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgQURJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IEFESV9PX0NMUjsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkMpLCB1aTMyVmFsLCA0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyAodWkzMlJlZyAmIDB4RkMpKSA9IHVpMzJWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgYSB2YWx1ZSBvbiBhbnkgNCBiaXRzIGluc2lkZSBhbiA4IGJpdCByZWdpc3RlciBpbiB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhbGxvd3MgaGFsZmJ5dGUgKDQgYml0KSBhY2Nlc3MgdG8gdGhlIEFESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEgVGhlIHBhcmFtZXRlciBcYyBiV3JpdGVIaWdoIGRldGVybWluZXMgd2hldGhlciB0byB3cml0ZSB0byB0aGUgbG93ZXIKKy8vISBvciBoaWdoZXIgcGFydCBvZiB0aGUgOCBiaXQgcmVnaXN0ZXIuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB3cml0ZSBhbnkgdmFsdWUgaW4gdGhlIHJhbmdlIDAtMyBiaXRzIGFsaWduZWQgb24gYQorLy8hIGhhbGYgYnl0ZSBib3VuZGFyeS4gRnguIGZvciB3cml0aW5nIHRoZSB2YWx1ZSAwYjEwMSB0byBiaXRzIDEgdG8gMyB0aGUKKy8vISBcYyB1aThWYWwgPSAweEEgYW5kIHRoZSBcYyB1aThNYXNrID0gMHhFLiBCaXQgMCB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieQorLy8hIHRoZSBvcGVyYXRpb24sIGFzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyBub3Qgc2V0IGluIHRoZSBcYyB1aThNYXNrLgorLy8hCisvLyEgXG5vdGUgQVVYX0FESTRfQkFTRSA6IEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFESSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHRoZSBMZWFzdCBTaWduaWZpY2FudCBSZWdpc3RlciBpbiB0aGUgQURJIHNsYXZlIHRoYXQKKy8vISB3aWxsIGJlIGFmZmVjdGVkIGJ5IHRoZSB3cml0ZSBvcGVyYXRpb24uCisvLyEgXHBhcmFtIGJXcml0ZUhpZ2ggZGVmaW5lcyB3aGljaCBwYXJ0IG9mIHRoZSByZWdpc3RlciB0byB3cml0ZSBpbi4KKy8vISAtIFxjIHRydWU6IFdyaXRlIHVwcGVyIGhhbGYgYnl0ZSBvZiByZWdpc3Rlci4KKy8vISAtIFxjIGZhbHNlOiBXcml0ZSBsb3dlciBoYWxmIGJ5dGUgb2YgcmVnaXN0ZXIuCisvLyEgXHBhcmFtIHVpOE1hc2sgaXMgdGhlIG1hc2sgZGVmaW5pbmcgd2hpY2ggb2YgdGhlIDQgYml0cyB0aGF0IHNob3VsZCBiZQorLy8hIG92ZXJ3cml0dGVuLiBUaGUgbWFzayBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyIGhhbGYgb2YgdGhlIDggYml0cyBvZgorLy8hIHRoZSBwYXJhbWV0ZXIuCisvLyEgXHBhcmFtIHVpOFZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUuIFRoZSB2YWx1ZSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyCisvLyEgaGFsZiBvZiB0aGUgOCBiaXRzIG9mIHRoZSBwYXJhbWV0ZXIuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBREk4U2V0VmFsQml0KCksIEFESTE2U2V0VmFsQml0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESTRTZXRWYWxCaXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIGJvb2wgYldyaXRlSGlnaCwKKyAgICAgICAgICAgICAgdWludDhfdCB1aThNYXNrLCB1aW50OF90IHVpOFZhbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnT2Zmc2V0OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworICAgIEFTU0VSVCghKHVpOFZhbCAmIDB4RjApKTsKKyAgICBBU1NFUlQoISh1aThNYXNrICYgMHhGMCkpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIEFESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBBRElfT19NQVNLNEIgKyAodWkzMlJlZyA8PCAxKSArIChiV3JpdGVIaWdoID8gMSA6IDApOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBpZiAodWkzMkJhc2U9PUFVWF9BREk0X0JBU0UpIHsKKyAgICAgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZ09mZnNldCwgKHVpOE1hc2sgPDwgNCkgfCB1aThWYWwsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHQih1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQpID0gKHVpOE1hc2sgPDwgNCkgfCB1aThWYWw7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgYSB2YWx1ZSBvbiBhbnkgYml0cyBpbnNpZGUgYW4gOCBiaXQgcmVnaXN0ZXIgaW4gdGhlIEFESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGJ5dGUgKDggYml0KSBhY2Nlc3MgdG8gdGhlIEFESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB3cml0ZSBhbnkgdmFsdWUgaW4gdGhlIHJhbmdlIDAtNyBiaXRzIGFsaWduZWQgb24gYQorLy8hIGJ5dGUgYm91bmRhcnkuIEZ4LiBmb3Igd3JpdGluZyB0aGUgdmFsdWUgMGIxMDEgdG8gYml0cyAxIGFuZCAzIHRoZQorLy8hIFxjIHVpMTZWYWwgPSAweDBBIGFuZCB0aGUgXGMgdWkxNk1hc2sgPSAweDBFLiBCaXRzIDAgYW5kIDUtNyB3aWxsIG5vdCBiZSBhZmZlY3RlZAorLy8hIGJ5IHRoZSBvcGVyYXRpb24sIGFzIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgYXJlIG5vdCBzZXQgaW4gdGhlCisvLyEgXGMgdWkxNk1hc2suCisvLyEKKy8vISBcbm90ZSBBVVhfQURJNF9CQVNFIDogQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQURJIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIExlYXN0IFNpZ25pZmljYW50IFJlZ2lzdGVyIGluIHRoZSBBREkgc2xhdmUgdGhhdAorLy8hIHdpbGwgYmUgYWZmZWN0ZWQgYnkgdGhlIHdyaXRlIG9wZXJhdGlvbi4KKy8vISBccGFyYW0gdWkxNk1hc2sgaXMgdGhlIG1hc2sgZGVmaW5pbmcgd2hpY2ggb2YgdGhlIDggYml0IHRoYXQgc2hvdWxkIGJlCisvLyEgb3ZlcndyaXR0ZW4uIFRoZSBtYXNrIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgMTYgYml0cy4KKy8vISBccGFyYW0gdWkxNlZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUuIFRoZSB2YWx1ZSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyCisvLyEgaGFsZiBvZiB0aGUgMTYgYml0cy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESTRTZXRWYWxCaXQoKSwgQURJMTZTZXRWYWxCaXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBREk4U2V0VmFsQml0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MTZfdCB1aTE2TWFzaywKKyAgICAgICAgICAgICAgdWludDE2X3QgdWkxNlZhbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnT2Zmc2V0OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgQURJX1NMQVZFX1JFR1MpOworICAgIEFTU0VSVCghKHVpMTZWYWwgJiAweEZGMDApKTsKKyAgICBBU1NFUlQoISh1aTE2TWFzayAmIDB4RkYwMCkpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIEFESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBBRElfT19NQVNLOEIgKyAodWkzMlJlZyA8PCAxKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBiaXRzLgorICAgIC8vCisgICAgaWYgKHVpMzJCYXNlPT1BVVhfQURJNF9CQVNFKSB7CisgICAgICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQsICh1aTE2TWFzayA8PCA4KSB8IHVpMTZWYWwsIDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEhXUkVHSCh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQpID0gKHVpMTZNYXNrIDw8IDgpIHwgdWkxNlZhbDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBhIHZhbHVlIG9uIGFueSBiaXRzIGluc2lkZSBhbiAyIHggOCBiaXQgcmVnaXN0ZXIgYWxpZ25lZCBvbiBhCisvLyEgaGFsZi13b3JkIChieXRlKSBib3VuZGFyeSBpbiB0aGUgQURJIHNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhbGxvd3MgMiBieXRlICgxNiBiaXQpIGFjY2VzcyB0byB0aGUgQURJIHNsYXZlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHdyaXRlIGFueSB2YWx1ZSBpbiB0aGUgcmFuZ2UgMC0xNSBiaXRzIGFsaWduZWQgb24gYQorLy8hIGhhbGYtd29yZCAoYnl0ZSkgYm91bmRhcnkuIEZ4LiBmb3Igd3JpdGluZyB0aGUgdmFsdWUgMGIxMDEgdG8gYml0cyAxIGFuZCAzIHRoZQorLy8hIFxjIHVpMzJWYWwgPSAweDAwMEEgYW5kIHRoZSBcYyB1aTMyTWFzayA9IDB4MDAwRS4gQml0cyAwIGFuZCA1LTE1IHdpbGwgbm90CisvLyEgYmUgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbiwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBhcmUgbm90IHNldAorLy8hIGluIHRoZSBcYyB1aTMyTWFzay4KKy8vIQorLy8hIFxub3RlIEFVWF9BREk0X0JBU0UgOiBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBREkgcG9ydC4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgTGVhc3QgU2lnbmlmaWNhbnQgUmVnaXN0ZXIgaW4gdGhlIEFESSBzbGF2ZSB0aGF0CisvLyEgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGUgd3JpdGUgb3BlcmF0aW9uLgorLy8hIFxwYXJhbSB1aTMyTWFzayBpcyB0aGUgbWFzayBkZWZpbmluZyB3aGljaCBvZiB0aGUgMTYgYml0IHRoYXQgc2hvdWxkIGJlCisvLyEgb3ZlcndyaXR0ZW4uIFRoZSBtYXNrIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vISBccGFyYW0gdWkzMlZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUuIFRoZSB2YWx1ZSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyCisvLyEgaGFsZiBvZiB0aGUgMzIgYml0cy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFESTRTZXRWYWxCaXQoKSwgQURJOFNldFZhbEJpdCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FESTE2U2V0VmFsQml0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MzJfdCB1aTMyTWFzaywKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBRElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IEFESV9TTEFWRV9SRUdTKTsKKyAgICBBU1NFUlQoISh1aTMyVmFsICYgMHhGRkZGMDAwMCkpOworICAgIEFTU0VSVCghKHVpMzJNYXNrICYgMHhGRkZGMDAwMCkpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdXNlZCBmb3Igc2V0dGluZyBiaXRzCisgICAgLy8gaW4gdGhlIEFESSBzbGF2ZS4KKyAgICAvLworICAgIHVpMzJSZWdPZmZzZXQgPSBBRElfT19NQVNLMTZCICsgKCh1aTMyUmVnIDw8IDEpICYgMHhGQyk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIGlmICh1aTMyQmFzZT09QVVYX0FESTRfQkFTRSkgeworICAgICAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0LCAodWkzMk1hc2sgPDwgMTYpIHwgdWkzMlZhbCwgNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0KSA9ICh1aTMyTWFzayA8PCAxNikgfCB1aTMyVmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19BRElfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaV9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2FkaV9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRjNTdhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYWRpX2RvYy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhZGlfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGFkaV9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19hZGkgSW50cm9kdWN0aW9uCisvLyEgXG4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19hZGlfYXBpIEFQSQorLy8hCisvLyEgVGhlIEFQSSBmdW5jdGlvbnMgY2FuIGJlIGdyb3VwZWQgbGlrZSB0aGlzOgorLy8hCisvLyEgV3JpdGU6CisvLyEgLSBEaXJlY3QgKGFsbCBiaXRzKToKKy8vISAgIC0gXHJlZiBBREk4UmVnV3JpdGUoKQorLy8hICAgLSBccmVmIEFESTE2UmVnV3JpdGUoKQorLy8hICAgLSBccmVmIEFESTMyUmVnV3JpdGUoKQorLy8hIC0gU2V0IGluZGl2aWR1YWwgYml0czoKKy8vISAgIC0gXHJlZiBBREk4Qml0c1NldCgpCisvLyEgICAtIFxyZWYgQURJMTZCaXRzU2V0KCkKKy8vISAgIC0gXHJlZiBBREkzMkJpdHNTZXQoKQorLy8hIC0gQ2xlYXIgaW5kaXZpZHVhbCBiaXRzOgorLy8hICAgLSBccmVmIEFESThCaXRzQ2xlYXIoKQorLy8hICAgLSBccmVmIEFESTE2Qml0c0NsZWFyKCkKKy8vISAgIC0gXHJlZiBBREkzMkJpdHNDbGVhcigpCisvLyEgLSBNYXNrZWQ6CisvLyEgICAtIFxyZWYgQURJNFNldFZhbEJpdCgpCisvLyEgICAtIFxyZWYgQURJOFNldFZhbEJpdCgpCisvLyEgICAtIFxyZWYgQURJMTZTZXRWYWxCaXQoKQorLy8hCisvLyEgUmVhZDoKKy8vISAtIFxyZWYgQURJOFJlZ1JlYWQoKQorLy8hIC0gXHJlZiBBREkxNlJlZ1JlYWQoKQorLy8hIC0gXHJlZiBBREkzMlJlZ1JlYWQoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9iYXRtb24uYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9iYXRtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZmMDUyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2JhdG1vbi5jCkBAIC0wLDAgKzEsODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fYmF0bW9uLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTEyLTA3IDE2OjIyOjU2ICswMTAwIChNb24sIDA3IERlYyAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MjY5CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQU9OIEJhdHRlcnkgYW5kIFRlbXBlcmF0dXJlIE1vbml0b3IKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYW9uX2JhdG1vbi5oPgorI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDCisgICAgI2RlZmluZSBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MgICAgIE5PUk9NX0FPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQworI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MoKQorLy8gUmV0dXJucyBzaWduIGV4dGVuZGVkIHRlbXBlcmF0dXJlIGluIERlZyBDICgtMjU2IC4uICsyNTUpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCB2b2lkICkKK3sKKyAgIGludDMyX3QgIHNpZ25lZFRlbXAgICAgICAgIDsgLy8gU2lnbmVkIGV4dGVuZGVkIHRlbXBlcmF0dXJlIHdpdGggOCBmcmFjdGlvbmFsIGJpdHMKKyAgIGludDMyX3QgIHRlbXBDb3JyZWN0aW9uICAgIDsgLy8gVm9sdGFnZSBkZXBlbmRlbnQgdGVtcCBjb3JyZWN0aW9uIHdpdGggOCBmcmFjdGlvbmFsIGJpdHMKKyAgIGludDhfdCAgIHZvbHRhZ2VTbG9wZSAgICAgIDsgLy8gU2lnbmVkIGJ5dGUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBURU1QIHNsb3BlIHdpdGggYmF0dGVyeSB2b2x0YWdlLCBpbiBkZWdyZWVzIEMvViwgd2l0aCA0IGZyYWN0aW9uYWwgYml0cy4KKworICAgLy8KKyAgIC8vIFNoaWZ0IGxlZnQgdGhlbiByaWdodCB0byBzaWduIGV4dGVuZCB0aGUgQkFUTU9OX1RFTVAgZmllbGQKKyAgIC8vCisgICBzaWduZWRUZW1wID0gKCgoKGludDMyX3QpSFdSRUcoIEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19URU1QICkpCisgICAgIDw8ICggMzIgLSBBT05fQkFUTU9OX1RFTVBfSU5UX1cgLSBBT05fQkFUTU9OX1RFTVBfSU5UX1MgKSkKKyAgICAgPj4gKCAzMiAtIEFPTl9CQVRNT05fVEVNUF9JTlRfVyAtIEFPTl9CQVRNT05fVEVNUF9JTlRfUyApKTsKKworICAgLy8KKyAgIC8vIFR5cGVjYXN0aW5nIHZvbHRhZ2VTbG9wZSB0byBpbnQ4X3QgcHJpb3IgdG8gYXNzaWdubWVudCBpbiBvcmRlciB0byBtYWtlIHN1cmUgc2lnbiBleHRlbnNpb24gd29ya3MgcHJvcGVybHkKKyAgIC8vIFVzaW5nIGJ5dGUgcmVhZCAoSFdSRUdCKSBpbiBvcmRlciB0byBtYWtlIG1vcmUgZWZmaWNpZW50IGNvZGUgc2luY2Ugdm9sdGFnZVNsb3BlIGlzIGFzc2lnbmVkIHRvIGJpdHNbNzowXSBvZiBGQ0ZHMV9PX01JU0NfVFJJTQorICAgLy8KKyAgIHZvbHRhZ2VTbG9wZSAgICAgID0gKChpbnQ4X3QpSFdSRUdCKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19NSVNDX1RSSU0gKSk7CisgICB0ZW1wQ29ycmVjdGlvbiAgICA9ICgoIHZvbHRhZ2VTbG9wZSAqICgoKGludDMyX3QpSFdSRUcoIEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19CQVQgKSkgLSAweDMwMCApKSA+PiA0ICk7CisKKyAgIHJldHVybiAoKCggc2lnbmVkVGVtcCAtIHRlbXBDb3JyZWN0aW9uICkgKyAweDgwICkgPj4gOCApOworfQorCisKKy8vIFNlZSBhb25fYmF0bW9uLmggZm9yIGltcGxlbWVudGF0aW9uIG9mIHJlbWFpbmluZyBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9iYXRtb24uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9iYXRtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGIxNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2JhdG1vbi5oCkBAIC0wLDAgKzEsMzI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX2JhdG1vbi5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNyAxMjo0NzoxOSArMDIwMCAoRnJpLCAyNyBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjUzNQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBT04gQmF0dGVyeSBhbmQgVGVtcGVyYXR1cmUKKyogICAgICAgICAgICAgICAgICBNb25pdG9yCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGFvbl9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYW9uYmF0bW9uX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQU9OX0JBVE1PTl9IX18KKyNkZWZpbmUgX19BT05fQkFUTU9OX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19hb25fYmF0bW9uLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQyAgICAgTk9ST01fQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDCisjZW5kaWYKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHRoZSB0ZW1wZXJhdHVyZSBhbmQgYmF0dGVyeSBtb25pdG9yaW5nLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSB0aGUgbWVhc3VyZW1lbnRzIG9mIHRoZSB0ZW1wZXJhdHVyZSBhbmQgdGhlCisvLyEgYmF0dGVyeSB2b2x0YWdlLgorLy8hCisvLyEgVG8gc3BlZWQgdXAgdGhlIG1lYXN1cmVtZW50IG9mIHRoZSBsZXZlbHMgdGhlIG1lYXN1cmVtZW50IGNhbiBiZSBlbmFibGVkCisvLyEgYmVmb3JlIGNvbmZpZ3VyaW5nIHRoZSBiYXR0ZXJ5IGFuZCB0ZW1wZXJhdHVyZSBzZXR0aW5ncy4gV2hlbiBhbGwgb2YgdGhlCisvLyEgQU9OX0JBVE1PTiByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgdm9sdGFnZSBhbmQKKy8vISB0ZW1wZXJhdHVyZSB2YWx1ZXMgY2FuIGJlIGVuYWJsZWQgKHRoZSBtZWFzdXJlbWVudCB3aWxsIG5vdyB0YWtlCisvLyEgZWZmZWN0L3Byb3BhZ2F0ZSB0byBvdGhlciBibG9ja3MpLgorLy8hCisvLyEgSXQgaXMgcG9zc2libGUgdG8gZW5hYmxlIGJvdGggYXQgdGhlIHNhbWUgdGltZSwgYWZ0ZXIgdGhlIEFPTl9CQVRNT04KKy8vISByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGJ1dCB0aGVuIHRoZSBmaXJzdCB2YWx1ZXMgd2lsbCBiZSByZWFkeSBhdCBhCisvLyEgbGF0ZXIgcG9pbnQgY29tcGFyZWQgdG8gdGhlIHNjZW5hcmlvIGFib3ZlLgorLy8hCisvLyEgXG5vdGUgVGVtcGVyYXR1cmUgYW5kIGJhdHRlcnkgdm9sdGFnZSBtZWFzdXJlbWVudHMgYXJlIG5vdCBkb25lIGluCisvLyEgcGFyYWxsZWwuIFRoZSBtZWFzdXJlbWVudCBjeWNsZSBpcyBjb250cm9sbGVkIGJ5IGEgaGFyZHdhcmUgRmluaXRlIFN0YXRlCisvLyEgTWFjaGluZS4gRmlyc3QgdGhlIHRlbXBlcmF0dXJlIGFuZCB0aGVuIHRoZSBiYXR0ZXJ5IHZvbHRhZ2UgZWFjaCB0YWtpbmcKKy8vISBvbmUgY3ljbGUgdG8gY29tcGxldGUuIEhvd2V2ZXIsIGlmIHRoZSBjb21wYXJhdG9yIG1lYXN1cmluZyB0aGUgYmF0dGVyeQorLy8hIHZvbHRhZ2UgZGV0ZWN0cyBhIGNoYW5nZSBvbiB0aGUgcmVmZXJlbmNlIHZhbHVlLCBhIG5ldyBtZWFzdXJlbWVudCBvZiB0aGUKKy8vISBiYXR0ZXJ5IHZvbHRhZ2Ugb25seSBpcyBwZXJmb3JtZWQgaW1tZWRpYXRlbHkgYWZ0ZXIuIFRoaXMgaGFzIG5vIGltcGFjdCBvbgorLy8hIHRoZSBjeWNsZSBjb3VudC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05CYXRNb25FbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgbWVhc3VyZW1lbnRzLgorICAgIC8vCisgICAgSFdSRUcoQU9OX0JBVE1PTl9CQVNFICsgQU9OX0JBVE1PTl9PX0NUTCkgPQorICAgICAgICBBT05fQkFUTU9OX0NUTF9DQUxDX0VOIHwKKyAgICAgICAgQU9OX0JBVE1PTl9DVExfTUVBU19FTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSB0aGUgdGVtcGVyYXR1cmUgYW5kIGJhdHRlcnkgbW9uaXRvcmluZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBkaXNhYmxlIHRoZSBtZWFzdXJlbWVudHMgb2YgdGhlIHRlbXBlcmF0dXJlIGFuZCB0aGUKKy8vISBiYXR0ZXJ5IHZvbHRhZ2UuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OQmF0TW9uRGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgbWVhc3VyZW1lbnRzLgorICAgIC8vCisgICAgSFdSRUcoQU9OX0JBVE1PTl9CQVNFICsgQU9OX0JBVE1PTl9PX0NUTCkgPSAwOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBhcyBhIHNpZ25lZCB2YWx1ZSBpbiBEZWcgQ2Vsc2l1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBjYWxpYnJhdGVkIGFuZCByb3VuZGVkIHZhbHVlIGluIGRlZ3JlZSBDZWxzaXVzLgorLy8hIFRoZSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudHMgYXJlIHVwZGF0ZWQgZXZlcnkgY3ljbGUuCisvLyEKKy8vISBcbm90ZSBUaGUgdGVtcGVyYXR1cmUgZHJpZnRzIHNsaWdodGx5IGRlcGVuZGluZyBvbiB0aGUgYmF0dGVyeSB2b2x0YWdlLgorLy8hIFRoaXMgZnVuY3Rpb24gY29tcGVuc2F0ZXMgZm9yIHRoaXMgZHJpZnQgYW5kIHJldHVybnMgYSBjYWxpYnJhdGVkIHRlbXBlcmF0dXJlLgorLy8hCisvLyEgXG5vdGUgVXNlIHRoZSBmdW5jdGlvbiBBT05CYXRNb25OZXdUZW1wTWVhc3VyZVJlYWR5KCkgdG8gdGVzdCBmb3IgYSBuZXcgbWVhc3VyZW1lbnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc2lnbmVkIGludGVnZXIgcGFydCBvZiB0ZW1wZXJhdHVyZSBpbiBEZWcgQyAoLTI1NiAuLiArMjU1KQorLy8hCisvLyEgXHNhIEFPTkJhdE1vbk5ld1RlbXBNZWFzdXJlUmVhZHkoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQyggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGJhdHRlcnkgbW9uaXRvciBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgYmF0dGVyeSBtb25pdG9yIG1lYXN1cmVtZW50LgorLy8hIFRoZSBiYXR0ZXJ5IHZvbHRhZ2UgbWVhc3VyZW1lbnRzIGFyZSB1cGRhdGVkIGV2ZXJ5IGN5Y2xlLgorLy8hCisvLyEgXG5vdGUgVGhlIHJldHVybmVkIHZhbHVlIGlzIE5PVCBzaWduLWV4dGVuZGVkIQorLy8hCisvLyEgXG5vdGUgVXNlIHRoZSBmdW5jdGlvbiBccmVmIEFPTkJhdE1vbk5ld0JhdHRlcnlNZWFzdXJlUmVhZHkoKSB0byB0ZXN0IGZvcgorLy8hIGEgY2hhbmdlIGluIG1lYXN1cmVtZW50LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGJhdHRlcnkgbW9uaXRvciB2YWx1ZSBvZiB0aGUgYmF0dGVyeSB2b2x0YWdlCisvLyEgbWVhc3VyZW1lbnQgaW4gYSA8aW50LmZyYWM+IGZvcm1hdCBzaXplIDwzLjg+IGluIHVuaXRzIG9mIHZvbHQuCisvLyEKKy8vISBcc2EgQU9OQmF0TW9uTmV3QmF0dGVyeU1lYXN1cmVSZWFkeSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05CYXRNb25CYXR0ZXJ5Vm9sdGFnZUdldCh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJDdXJyZW50QmF0dGVyeTsKKworICAgIHVpMzJDdXJyZW50QmF0dGVyeSA9IEhXUkVHKEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19CQVQpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgYmF0dGVyeSB2b2x0YWdlIG1lYXN1cmVtZW50LgorICAgIC8vCisgICAgcmV0dXJuICh1aTMyQ3VycmVudEJhdHRlcnkgPj4gQU9OX0JBVE1PTl9CQVRfRlJBQ19TKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgYmF0dGVyeSBtb25pdG9yIG1lYXN1cmVtZW50IGhhcyBjaGFuZ2VkLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBuZXcgYmF0dGVyeSBtb25pdG9yIHZhbHVlIGlzIGF2YWlsYWJsZS4gSWYgdGhlCisvLyEgbWVhc3VyZW1lbnQgdmFsdWUgaGFzIFxiIGNoYW5nZWQgc2luY2UgbGFzdCBjbGVhciB0aGUgZnVuY3Rpb24gcmV0dXJucyBcYyB0cnVlLgorLy8hCisvLyEgSWYgdGhlIG1lYXN1cmVtZW50IGhhcyBjaGFuZ2VkIHRoZSBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlCisvLyEgc3RhdHVzIGJpdC4KKy8vIQorLy8hIFxub3RlIEl0IGlzIGFsd2F5cyBwb3NzaWJsZSB0byByZWFkIG91dCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKy8vISBiYXR0ZXJ5IGxldmVsIHVzaW5nIEFPTkJhdE1vbkJhdHRlcnlWb2x0YWdlR2V0KCkgYnV0IHRoaXMgZnVuY3Rpb24gY2FuIGJlCisvLyEgdXNlZCB0byBjaGVjayBpZiB0aGUgbWVhc3VyZW1lbnQgaGFzIGNoYW5nZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgbWVhc3VyZW1lbnQgdmFsdWUgaGFzIGNoYW5nZWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8hCisvLyEgXHNhIEFPTkJhdE1vbk5ld1RlbXBNZWFzdXJlUmVhZHkoKSwgQU9OQmF0TW9uQmF0dGVyeVZvbHRhZ2VHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBT05CYXRNb25OZXdCYXR0ZXJ5TWVhc3VyZVJlYWR5KHZvaWQpCit7CisgICAgYm9vbCBiU3RhdHVzOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgc3RhdHVzIGJpdC4KKyAgICAvLworICAgIGJTdGF0dXMgPSBIV1JFRyhBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fQkFUVVBEKSAmCisgICAgICAgICAgICAgIEFPTl9CQVRNT05fQkFUVVBEX1NUQVQgPyB0cnVlIDogZmFsc2U7CisKKyAgICAvLworICAgIC8vIENsZWFyIHN0YXR1cyBiaXQgaWYgc2V0LgorICAgIC8vCisgICAgaWYoYlN0YXR1cykKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19CQVRVUEQpID0gMTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKGJTdGF0dXMpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayBpZiB0ZW1wZXJhdHVyZSBtb25pdG9yIG1lYXN1cmVtZW50IGhhcyBjaGFuZ2VkLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBuZXcgdGVtcGVyYXR1cmUgdmFsdWUgaXMgYXZhaWxhYmxlLiBJZiB0aGUKKy8vISBtZWFzdXJlbWVudCB2YWx1ZSBoYXMgXGIgY2hhbmdlZCBzaW5jZSBsYXN0IGNsZWFyIHRoZSBmdW5jdGlvbiByZXR1cm5zIFxjIHRydWUuCisvLyEKKy8vISBJZiB0aGUgbWVhc3VyZW1lbnQgaGFzIGNoYW5nZWQgdGhlIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBjbGVhciB0aGUKKy8vISBzdGF0dXMgYml0LgorLy8hCisvLyEgXG5vdGUgSXQgaXMgYWx3YXlzIHBvc3NpYmxlIHRvIHJlYWQgb3V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorLy8hIHRlbXBlcmF0dXJlIHVzaW5nIFxyZWYgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCkKKy8vISBidXQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgbWVhc3VyZW1lbnQgaGFzIGNoYW5nZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgbWVhc3VyZW1lbnQgdmFsdWUgaGFzIGNoYW5nZWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8hCisvLyEgXHNhIEFPTkJhdE1vbk5ld0JhdHRlcnlNZWFzdXJlUmVhZHkoKSwgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQU9OQmF0TW9uTmV3VGVtcE1lYXN1cmVSZWFkeSh2b2lkKQoreworICAgIGJvb2wgYlN0YXR1czsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIHN0YXR1cyBiaXQuCisgICAgLy8KKyAgICBiU3RhdHVzID0gSFdSRUcoQU9OX0JBVE1PTl9CQVNFICsgQU9OX0JBVE1PTl9PX1RFTVBVUEQpICYKKyAgICAgICAgICAgICAgQU9OX0JBVE1PTl9URU1QVVBEX1NUQVQgPyB0cnVlIDogZmFsc2U7CisKKyAgICAvLworICAgIC8vIENsZWFyIHN0YXR1cyBiaXQgaWYgc2V0LgorICAgIC8vCisgICAgaWYoYlN0YXR1cykKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19URU1QVVBEKSA9IDE7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuIChiU3RhdHVzKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDCisgICAgICAgICN1bmRlZiAgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDCisgICAgICAgICNkZWZpbmUgQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDICAgICBST01fQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19BT05fQkFUTU9OX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnQuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZWUwMWUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnQuYwpAQCAtMCwwICsxLDMxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9ldmVudC5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0wNCAxNjo0OTozOCArMDEwMCAoRnJpLCAwNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTg3NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFPTiBFdmVudCBmYWJyaWMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9ldmVudC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQU9ORXZlbnRNY3VXYWtlVXBTZXQKKyAgICAjZGVmaW5lIEFPTkV2ZW50TWN1V2FrZVVwU2V0ICAgICAgICAgICAgTk9ST01fQU9ORXZlbnRNY3VXYWtlVXBTZXQKKyAgICAjdW5kZWYgIEFPTkV2ZW50TWN1V2FrZVVwR2V0CisgICAgI2RlZmluZSBBT05FdmVudE1jdVdha2VVcEdldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1V2FrZVVwR2V0CisgICAgI3VuZGVmICBBT05FdmVudEF1eFdha2VVcFNldAorICAgICNkZWZpbmUgQU9ORXZlbnRBdXhXYWtlVXBTZXQgICAgICAgICAgICBOT1JPTV9BT05FdmVudEF1eFdha2VVcFNldAorICAgICN1bmRlZiAgQU9ORXZlbnRBdXhXYWtlVXBHZXQKKyAgICAjZGVmaW5lIEFPTkV2ZW50QXV4V2FrZVVwR2V0ICAgICAgICAgICAgTk9ST01fQU9ORXZlbnRBdXhXYWtlVXBHZXQKKyAgICAjdW5kZWYgIEFPTkV2ZW50TWN1U2V0CisgICAgI2RlZmluZSBBT05FdmVudE1jdVNldCAgICAgICAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1U2V0CisgICAgI3VuZGVmICBBT05FdmVudE1jdUdldAorICAgICNkZWZpbmUgQU9ORXZlbnRNY3VHZXQgICAgICAgICAgICAgICAgICBOT1JPTV9BT05FdmVudE1jdUdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBNQ1Ugd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FPTkV2ZW50TWN1V2FrZVVwU2V0KHVpbnQzMl90IHVpMzJNQ1VXVUV2ZW50LCB1aW50MzJfdCB1aTMyRXZlbnRTcmMpCit7CisgICAgdWludDMyX3QgdWkzMkN0cmw7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UwKSB8fAorICAgICAgICAgICAodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTEpIHx8CisgICAgICAgICAgICh1aTMyTUNVV1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX1dVMikgfHwKKyAgICAgICAgICAgKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UzKSk7CisgICAgQVNTRVJUKHVpMzJFdmVudFNyYyA8PSBBT05fRVZFTlRfTk9ORSk7CisKKyAgICB1aTMyQ3RybCA9IEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fTUNVV1VTRUwpOworCisgICAgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTApCisgICAgeworICAgICAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfTSk7CisgICAgICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1M7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTEpCisgICAgeworICAgICAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfTSk7CisgICAgICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1M7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTIpCisgICAgeworICAgICAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfTSk7CisgICAgICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1M7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTMpCisgICAgeworICAgICAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfTSk7CisgICAgICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1M7CisgICAgfQorCisgICAgSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19NQ1VXVVNFTCkgPSB1aTMyQ3RybDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgZXZlbnQgc291cmNlIGZvciB0aGUgc3BlY2lmaWVkIE1DVSB3YWtldXAgcHJvZ3JhbW1hYmxlIGV2ZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0FPTkV2ZW50TWN1V2FrZVVwR2V0KHVpbnQzMl90IHVpMzJNQ1VXVUV2ZW50KQoreworICAgIHVpbnQzMl90IHVpMzJFdmVudFNyYzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTApIHx8CisgICAgICAgICAgICh1aTMyTUNVV1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX1dVMSkgfHwKKyAgICAgICAgICAgKHVpMzJNQ1VXVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfV1UyKSB8fAorICAgICAgICAgICAodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTMpKTsKKworICAgIHVpMzJFdmVudFNyYyA9IEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fTUNVV1VTRUwpOworCisgICAgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTApCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUyk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTEpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUyk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTIpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUyk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVVdVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9XVTMpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUyk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTaG91bGQgbmV2ZXIgZ2V0IHRvIHRoaXMgc3RhdGVtZW50LCBidXQgc3VwcHJlc3Mgd2FybmluZy4KKyAgICAvLworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBBVVggd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FPTkV2ZW50QXV4V2FrZVVwU2V0KHVpbnQzMl90IHVpMzJBVVhXVUV2ZW50LCB1aW50MzJfdCB1aTMyRXZlbnRTcmMpCit7CisgICAgdWludDMyX3QgdWkzMkN0cmw7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UwKSB8fAorICAgICAgICAgICAodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTEpIHx8CisgICAgICAgICAgICh1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMikpOworICAgIEFTU0VSVCh1aTMyRXZlbnRTcmMgPD0gQU9OX0VWRU5UX05PTkUpOworCisgICAgdWkzMkN0cmwgPSBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX0FVWFdVU0VMKTsKKworICAgIGlmKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UwKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9TOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UxKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9TOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UyKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9TOworICAgIH0KKworICAgIEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fQVVYV1VTRUwpID0gdWkzMkN0cmw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBBVVggd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitBT05FdmVudEF1eFdha2VVcEdldCh1aW50MzJfdCB1aTMyQVVYV1VFdmVudCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXZlbnRTcmM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJBVVhXVUV2ZW50ID09IEFPTl9FVkVOVF9BVVhfV1UwKSB8fAorICAgICAgICAgICAodWkzMkFVWFdVRXZlbnQgPT0gQU9OX0VWRU5UX0FVWF9XVTEpIHx8CisgICAgICAgICAgICh1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMikpOworCisgICAgdWkzMkV2ZW50U3JjID0gSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19BVVhXVVNFTCk7CisKKyAgICBpZih1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMCkKKyAgICB7CisgICAgICAgIHJldHVybigodWkzMkV2ZW50U3JjICYgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9NKSA+PgorICAgICAgICAgICAgICAgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9TKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMSkKKyAgICB7CisgICAgICAgIHJldHVybigodWkzMkV2ZW50U3JjICYgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9NKSA+PgorICAgICAgICAgICAgICAgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9TKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQVVYV1VFdmVudCA9PSBBT05fRVZFTlRfQVVYX1dVMikKKyAgICB7CisgICAgICAgIHJldHVybigodWkzMkV2ZW50U3JjICYgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9NKSA+PgorICAgICAgICAgICAgICAgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9TKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNob3VsZCBuZXZlciBnZXQgdG8gdGhpcyBzdGF0ZW1lbnQsIGJ1dCBzdXBwcmVzcyB3YXJuaW5nLgorICAgIC8vCisgICAgQVNTRVJUKDApOworICAgIHJldHVybigwKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZWxlY3QgZXZlbnQgc291cmNlIGZvciB0aGUgc3BlY2lmaWVkIHByb2dyYW1tYWJsZSBldmVudCBmb3J3YXJkZWQgdG8gdGhlCisvLyEgTUNVIGV2ZW50IGZhYnJpYworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FPTkV2ZW50TWN1U2V0KHVpbnQzMl90IHVpMzJNQ1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDApIHx8CisgICAgICAgICAgICh1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDEpIHx8CisgICAgICAgICAgICh1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDIpKTsKKyAgICBBU1NFUlQodWkzMkV2ZW50U3JjIDw9IEFPTl9FVkVOVF9OT05FKTsKKworICAgIHVpMzJDdHJsID0gSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19FVlRPTUNVU0VMKTsKKworICAgIGlmKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMCkKKyAgICB7CisgICAgICAgIHVpMzJDdHJsICY9IH4oQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX00pOworICAgICAgICB1aTMyQ3RybCB8PSAodWkzMkV2ZW50U3JjICYgMHgzZikgPDwgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1M7CisgICAgfQorICAgIGVsc2UgaWYodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQxKQorICAgIHsKKyAgICAgICAgdWkzMkN0cmwgJj0gfihBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfTSk7CisgICAgICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUzsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDIpCisgICAgeworICAgICAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9NKTsKKyAgICAgICAgdWkzMkN0cmwgfD0gKHVpMzJFdmVudFNyYyAmIDB4M2YpIDw8IEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9TOworICAgIH0KKworICAgIEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fRVZUT01DVVNFTCkgPSB1aTMyQ3RybDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgc291cmNlIGZvciB0aGUgc3BlY2lmaWVkIHByb2dyYW1tYWJsZSBldmVudCBmb3J3YXJkZWQgdG8gdGhlIE1DVSBldmVudAorLy8hIGZhYnJpYy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQU9ORXZlbnRNY3VHZXQodWludDMyX3QgdWkzMk1DVUV2ZW50KQoreworICAgIHVpbnQzMl90IHVpMzJFdmVudFNyYzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQwKSB8fAorICAgICAgICAgICAodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQxKSB8fAorICAgICAgICAgICAodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQyKSk7CisKKyAgICB1aTMyRXZlbnRTcmMgPSBIV1JFRyhBT05fRVZFTlRfQkFTRSArIEFPTl9FVkVOVF9PX0VWVE9NQ1VTRUwpOworCisgICAgaWYodWkzMk1DVUV2ZW50ID09IEFPTl9FVkVOVF9NQ1VfRVZFTlQwKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCh1aTMyRXZlbnRTcmMgJiBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfTSkgPj4KKyAgICAgICAgICAgICAgIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9TKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyTUNVRXZlbnQgPT0gQU9OX0VWRU5UX01DVV9FVkVOVDEpCisgICAgeworICAgICAgICByZXR1cm4oKHVpMzJFdmVudFNyYyAmIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9NKSA+PgorICAgICAgICAgICAgICAgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1MpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJNQ1VFdmVudCA9PSBBT05fRVZFTlRfTUNVX0VWRU5UMikKKyAgICB7CisgICAgICAgIHJldHVybigodWkzMkV2ZW50U3JjICYgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX00pID4+CisgICAgICAgICAgICAgICBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUyk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTaG91bGQgbmV2ZXIgZ2V0IHRvIHRoaXMgc3RhdGVtZW50LCBidXQgc3VwcHJlc3Mgd2FybmluZy4KKyAgICAvLworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzY2Q0NDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fZXZlbnQuaApAQCAtMCwwICsxLDYzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFvbl9ldmVudC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xMSAxOTowODo1OCArMDEwMCAoRnJpLCAxMSBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkxNworKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBT04gRXZlbnQgZmFicmljLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhb25fZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGFvbmV2ZW50X2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQU9OX0VWRU5UX0hfXworI2RlZmluZSBfX0FPTl9FVkVOVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZGV2aWNlLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9ldmVudC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBBT05FdmVudE1jdVdha2VVcFNldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1V2FrZVVwU2V0CisgICAgI2RlZmluZSBBT05FdmVudE1jdVdha2VVcEdldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1V2FrZVVwR2V0CisgICAgI2RlZmluZSBBT05FdmVudEF1eFdha2VVcFNldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50QXV4V2FrZVVwU2V0CisgICAgI2RlZmluZSBBT05FdmVudEF1eFdha2VVcEdldCAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50QXV4V2FrZVVwR2V0CisgICAgI2RlZmluZSBBT05FdmVudE1jdVNldCAgICAgICAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1U2V0CisgICAgI2RlZmluZSBBT05FdmVudE1jdUdldCAgICAgICAgICAgICAgICAgIE5PUk9NX0FPTkV2ZW50TWN1R2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEV2ZW50IHNvdXJjZXMgZm9yIHRoZSBldmVudCBBT04gZmFicmljLgorLy8gTm90ZTogRXZlbnRzIGFyZSBsZXZlbC10cmlnZ2VyZWQgYWN0aXZlIGhpZ2gKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICAgICAvLyBFZGdlIGRldGVjdCBvbiBESU8wLiBTZWUgaHdfZGV2aWNlLmggZm9yIERJTy10by1QQUQgbWFwcGluZy4KKy8vIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLgorLy8gQU9OX0VWRU5UX0RJTzMxICAgICAgICAgICAgICAgICAgICAgLy8gRWRnZSBkZXRlY3Qgb24gRElPMzEuIFNlZSBod19kZXZpY2UuaCBmb3IgRElPLXRvLVBBRCBtYXBwaW5nLgorI2RlZmluZSBBT05fRVZFTlRfSU8gICAgICAgICAgICAgICAgMzIgLy8gRWRnZSBkZXRlY3Qgb24gYW55IERJTworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlbnQgSUQgMzMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW50IElEIDM0IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisjZGVmaW5lIEFPTl9FVkVOVF9SVENfQ0gwICAgICAgICAgICAzNSAvLyBSVEMgY2hhbm5lbCAwCisjZGVmaW5lIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICAzNiAvLyBSVEMgY2hhbm5lbCAxCisjZGVmaW5lIEFPTl9FVkVOVF9SVENfQ0gyICAgICAgICAgICAzNyAvLyBSVEMgY2hhbm5lbCAyCisjZGVmaW5lIEFPTl9FVkVOVF9SVENfQ0gwX0RMWSAgICAgICAzOCAvLyBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorI2RlZmluZSBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgMzkgLy8gUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ19DSDJfRExZICAgICAgIDQwIC8vIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisjZGVmaW5lIEFPTl9FVkVOVF9SVENfQ09NQl9ETFkgICAgICA0MSAvLyBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorI2RlZmluZSBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgNDIgLy8gUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorI2RlZmluZSBBT05fRVZFTlRfSlRBRyAgICAgICAgICAgICAgNDMgLy8gSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9TV0VWMCAgICAgICAgIDQ0IC8vIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDQ1IC8vIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9TV0VWMiAgICAgICAgIDQ2IC8vIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9DT01QQSAgICAgICAgIDQ3IC8vIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA0OCAvLyBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorI2RlZmluZSBBT05fRVZFTlRfQVVYX0FEQ19ET05FICAgICAgNDkgLy8gQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfVERDX0RPTkUgICAgICA1MCAvLyBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorI2RlZmluZSBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgNTEgLy8gVGltZXIgMCBldmVudAorI2RlZmluZSBBT05fRVZFTlRfQVVYX1RJTUVSMV9FViAgICAgNTIgLy8gVGltZXIgMSBldmVudAorI2RlZmluZSBBT05fRVZFTlRfQkFUTU9OX1RFTVAgICAgICAgNTMgLy8gQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorI2RlZmluZSBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgNTQgLy8gQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkMgICA1NSAvLyBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQ19OIDU2IC8vIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW50IElEIDU3LTYyIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisjZGVmaW5lIEFPTl9FVkVOVF9OT05FICAgICAgICAgICAgICA2MyAvLyBObyBldmVudCwgYWx3YXlzIGxvdworCisvLworLy8gS2VlcGluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHVudGlsIG1ham9yIHJldmlzaW9uIG51bWJlciBpcyBpbmNyZW1lbnRlZAorLy8KKyNkZWZpbmUgQU9OX0VWRU5UX1JUQzAgICAgICggQU9OX0VWRU5UX1JUQ19DSDAgKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBBT05FdmVudE1DVVdha2VVcFNldCgpIGFuZCByZXR1cm5lZAorLy8gYnkgQU9ORXZlbnRNQ1VXYWtlVXBHZXQoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VfV1UwIDAgICAgIC8vIFByb2dyYW1tYWJsZSBNQ1Ugd2FrZXVwIGV2ZW50IDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVV9XVTEgMSAgICAgLy8gUHJvZ3JhbW1hYmxlIE1DVSB3YWtldXAgZXZlbnQgMQorI2RlZmluZSBBT05fRVZFTlRfTUNVX1dVMiAyICAgICAvLyBQcm9ncmFtbWFibGUgTUNVIHdha2V1cCBldmVudCAyCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VfV1UzIDMgICAgIC8vIFByb2dyYW1tYWJsZSBNQ1Ugd2FrZXVwIGV2ZW50IDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQU9ORXZlbnRBdXhXYWtlVXBTZXQoKSBhbmQgQU9ORXZlbnRBdXhXYWtlVXBHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWF9XVTAgMCAgICAgLy8gUHJvZ3JhbW1hYmxlIEFVWCB3YWtldXAgZXZlbnQgMAorI2RlZmluZSBBT05fRVZFTlRfQVVYX1dVMSAxICAgICAvLyBQcm9ncmFtbWFibGUgQVVYIHdha2V1cCBldmVudCAxCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhfV1UyIDIgICAgIC8vIFByb2dyYW1tYWJsZSBBVVggd2FrZXVwIGV2ZW50IDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQU9ORXZlbnRNY3VTZXQoKSBhbmQgQU9ORXZlbnRNY3VHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX0VWRU5UX01DVV9FVkVOVDAgMCAgLy8gUHJvZ3JhbW1hYmxlIGV2ZW50IHNvdXJjZSBmZWQgdG8gTUNVIGV2ZW50IGZhYnJpYyAoZmlyc3Qgb2YgMykKKyNkZWZpbmUgQU9OX0VWRU5UX01DVV9FVkVOVDEgMSAgLy8gUHJvZ3JhbW1hYmxlIGV2ZW50IHNvdXJjZSBmZWQgdG8gTUNVIGV2ZW50IGZhYnJpYyAoc2Vjb25kIG9mIDMpCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VfRVZFTlQyIDIgIC8vIFByb2dyYW1tYWJsZSBldmVudCBzb3VyY2UgZmVkIHRvIE1DVSBldmVudCBmYWJyaWMgKHRoaXJkIG9mIDMpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZWxlY3QgZXZlbnQgc291cmNlIGZvciB0aGUgc3BlY2lmaWVkIE1DVSB3YWtldXAgcHJvZ3JhbW1hYmxlIGV2ZW50LgorLy8hCisvLyEgVGhlIEFPTiBldmVudCBmYWJyaWMgaGFzIGEgdG90YWwgb2YgZm91ciBwcm9ncmFtbWFibGUgZXZlbnRzIHRoYXQgY2FuCisvLyEgd2FrZS11cCB0aGUgTUNVLiBUaGUgZXZlbnRzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHdha2V1cCBjb250cm9sbGVyIChXVUMpLgorLy8hCisvLyEgXG5vdGUgVGhlIGZvdXIgcHJvZ3JhbW1hYmxlIGV2ZW50IHNvdXJjZXMgYXJlIGVmZmVjdGl2ZWx5IE9SJ2VkIHRvZ2V0aGVyCisvLyEgIHRvIGZvcm0gYSBzaW5nbGUgd2FrZS11cCBldmVudCBmb3J3YXJkZWQgdG8gdGhlIFdVQy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTUNVV1VFdmVudCBpcyBvbmUgb2YgZm91ciBwcm9ncmFtbWFibGUgTUNVIHdha2V1cCBldmVudCBzb3VyY2VzLgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMworLy8hIFxwYXJhbSB1aTMyRXZlbnRTcmMgaXMgYW4gZXZlbnQgc291cmNlIGZvciB0aGUgZXZlbnQgQU9OIGZhYnJpYy4KKy8vISAtIEFPTl9FVkVOVF9ESU8wICAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMC4gU2VlIGh3X2RldmljZS5oCisvLyEgLSAuLi4KKy8vISAtIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMzEuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gXHJlZiBBT05fRVZFTlRfSU8gICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBhbnkgRElPCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwICAgICAgICAgICA6IFJUQyBjaGFubmVsIDAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDEgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMiAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ09NQl9ETFkgICAgICA6IFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfVVBEICAgICAgICAgICA6IFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0pUQUcgICAgICAgICAgICAgIDogSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMCAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYxICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjIgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQSAgICAgICAgIDogQ29tcGFyYXRvciBBIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQiAgICAgICAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9BRENfRE9ORSAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVERDX0RPTkUgICAgICA6IFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIwX0VWICAgICA6IFRpbWVyIDAgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjFfRVYgICAgIDogVGltZXIgMSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1RFTVAgICAgICAgOiBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVk9MVCAgICAgICA6IEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQ19OIDogQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTk9ORSAgICAgICAgICAgICAgOiBObyBldmVudCwgYWx3YXlzIGxvdworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9ORXZlbnRNY3VXYWtlVXBHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFPTkV2ZW50TWN1V2FrZVVwU2V0KHVpbnQzMl90IHVpMzJNQ1VXVUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkV2ZW50U3JjKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBNQ1Ugd2FrZXVwIHByb2dyYW1tYWJsZSBldmVudC4KKy8vIQorLy8hIFRoZSBBT04gZXZlbnQgZmFicmljIGhhcyBhIHRvdGFsIG9mIGZvdXIgcHJvZ3JhbW1hYmxlIGV2ZW50cyB0aGF0IGNhbgorLy8hIHdha2UtdXAgdGhlIE1DVS4gVGhlIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSB3YWtldXAgY29udHJvbGxlciAoV1VDKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTUNVV1VFdmVudCBpcyBvbmUgb2YgZm91ciBwcm9ncmFtbWFibGUgTUNVIHdha2V1cCBldmVudCBzb3VyY2VzLgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTUNVX1dVMworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhlIGV2ZW50IEFPTiBmYWJyaWMsIGkuZS4gb25lIG9mIHRoZQorLy8hIGZvbGxvd2luZzoKKy8vISAtIEFPTl9FVkVOVF9ESU8wICAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMC4gU2VlIGh3X2RldmljZS5oCisvLyEgLSAuLi4KKy8vISAtIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMzEuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gXHJlZiBBT05fRVZFTlRfSU8gICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBhbnkgRElPCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwICAgICAgICAgICA6IFJUQyBjaGFubmVsIDAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDEgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMiAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ09NQl9ETFkgICAgICA6IFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfVVBEICAgICAgICAgICA6IFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0pUQUcgICAgICAgICAgICAgIDogSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMCAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYxICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjIgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQSAgICAgICAgIDogQ29tcGFyYXRvciBBIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQiAgICAgICAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9BRENfRE9ORSAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVERDX0RPTkUgICAgICA6IFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIwX0VWICAgICA6IFRpbWVyIDAgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjFfRVYgICAgIDogVGltZXIgMSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1RFTVAgICAgICAgOiBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVk9MVCAgICAgICA6IEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQ19OIDogQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTk9ORSAgICAgICAgICAgICAgOiBObyBldmVudCwgYWx3YXlzIGxvdworLy8hCisvLyEgXHNhIEFPTkV2ZW50TWN1V2FrZVVwU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQU9ORXZlbnRNY3VXYWtlVXBHZXQodWludDMyX3QgdWkzMk1DVVdVRXZlbnQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZWxlY3QgZXZlbnQgc291cmNlIGZvciB0aGUgc3BlY2lmaWVkIEFVWCB3YWtldXAgcHJvZ3JhbW1hYmxlIGV2ZW50LgorLy8hCisvLyEgVGhlIEFPTiBldmVudCBmYWJyaWMgaGFzIGEgdG90YWwgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIGV2ZW50cyB0aGF0IGNhbgorLy8hIHdha2UtdXAgdGhlIEFVWCBkb21haW4uIFRoZSBldmVudHMgYXJlIGZvcndhcmRlZCB0byB0aGUgd2FrZXVwCisvLyEgY29udHJvbGxlciAoV1VDKS4KKy8vIQorLy8hIFxub3RlIFRoZSB0aHJlZSBwcm9ncmFtbWFibGUgZXZlbnQgc291cmNlcyBhcmUgZWZmZWN0aXZlbHkgT1InZWQgdG9nZXRoZXIKKy8vISAgdG8gZm9ybSBhIHNpbmdsZSB3YWtlLXVwIGV2ZW50IGZvcndhcmRlZCB0byB0aGUgV1VDLgorLy8hCisvLyEgXHBhcmFtIHVpMzJBVVhXVUV2ZW50IGlzIG9uZSBvZiB0aHJlZSBwcm9ncmFtbWFibGUgQVVYIHdha2V1cCBldmVudCBzb3VyY2VzLgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1dVMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1dVMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1dVMgorLy8hIFxwYXJhbSB1aTMyRXZlbnRTcmMgaXMgYW4gZXZlbnQgc291cmNlcyBmb3IgdGhlIGV2ZW50IEFPTiBmYWJyaWMuCisvLyEgLSBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzAuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gLi4uCisvLyEgLSBBT05fRVZFTlRfRElPMzEgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gYW55IERJTworLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICA6IFJUQyBjaGFubmVsIDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDIgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMl9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgOiBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgOiBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZSB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9KVEFHICAgICAgICAgICAgICA6IEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYyICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA6IENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQURDX0RPTkUgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgOiBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgOiBUaW1lciAwIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIxX0VWICAgICA6IFRpbWVyIDEgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDogQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgOiBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQyAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA6IENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX05PTkUgICAgICAgICAgICAgIDogTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTkV2ZW50QXV4V2FrZVVwR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBT05FdmVudEF1eFdha2VVcFNldCh1aW50MzJfdCB1aTMyQVVYV1VFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJFdmVudFNyYyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBldmVudCBzb3VyY2UgZm9yIHRoZSBzcGVjaWZpZWQgQVVYIHdha2V1cCBwcm9ncmFtbWFibGUgZXZlbnQuCisvLyEKKy8vISBUaGUgQU9OIGV2ZW50IGZhYnJpYyBoYXMgYSB0b3RhbCBvZiB0aHJlZSBwcm9ncmFtbWFibGUgZXZlbnRzIHRoYXQgY2FuCisvLyEgd2FrZS11cCB0aGUgQVVYIGRvbWFpbi4gVGhlIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSB3YWtldXAKKy8vISBjb250cm9sbGVyIChXVUMpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJBVVhXVUV2ZW50IGlzIG9uZSBvZiB0aHJlZSBwcm9ncmFtbWFibGUgQVVYIHdha2V1cCBldmVudCBzb3VyY2VzLgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1dVMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1dVMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1dVMgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhlIGV2ZW50IEFPTiBmYWJyaWMsIGkuZS4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzAuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gLi4uCisvLyEgLSBBT05fRVZFTlRfRElPMzEgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gYW55IERJTworLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICA6IFJUQyBjaGFubmVsIDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDIgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMl9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgOiBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgOiBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZSB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9KVEFHICAgICAgICAgICAgICA6IEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYyICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA6IENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQURDX0RPTkUgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgOiBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgOiBUaW1lciAwIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIxX0VWICAgICA6IFRpbWVyIDEgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDogQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgOiBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQyAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA6IENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX05PTkUgICAgICAgICAgICAgIDogTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIQorLy8hIFxzYSBBT05FdmVudEF1eFdha2VVcFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEFPTkV2ZW50QXV4V2FrZVVwR2V0KHVpbnQzMl90IHVpMzJBVVhXVUV2ZW50KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2VsZWN0IGV2ZW50IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBwcm9ncmFtbWFibGUgZXZlbnQgZm9yd2FyZGVkIHRvIHRoZQorLy8hIE1DVSBldmVudCBmYWJyaWMuCisvLyEKKy8vISBUaGUgQU9OIGV2ZW50IGZhYnJpYyBoYXMgYSB0b3RhbCBvZiB0aHJlZSBwcm9ncmFtbWFibGUgZXZlbnRzIHRoYXQgY2FuCisvLyEgYmUgZm9yd2FyZGVkIHRvIHRoZSBNQ1UgZXZlbnQgZmFicmljLgorLy8hCisvLyEgXG5vdGUgVGhlIHRocmVlIHByb2dyYW1tYWJsZSBldmVudCBzb3VyY2VzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIE1DVSBFdmVudAorLy8hIEZhYnJpYyBhczoKKy8vISAtIEFPTl9QUk9HMAorLy8hIC0gQU9OX1BST0cxCisvLyEgLSBBT05fUFJPRzIKKy8vIQorLy8hIFxwYXJhbSB1aTMyTUNVRXZlbnQgaXMgb25lIG9mIHRocmVlIHByb2dyYW1tYWJsZSBldmVudHMgZm9yd2FyZGVkIHRvIHRoZQorLy8hIE1DVSBldmVudCBmYWJyaWMuCisvLyEgLSBccmVmIEFPTl9FVkVOVF9NQ1VfRVZFTlQwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9NQ1VfRVZFTlQxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9NQ1VfRVZFTlQyCisvLyEgXHBhcmFtIHVpMzJFdmVudFNyYyBpcyBldmVudCBzb3VyY2VzIGZvciB0aGUgZXZlbnQgQU9OIGZhYnJpYy4KKy8vISAtIEFPTl9FVkVOVF9ESU8wICAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMC4gU2VlIGh3X2RldmljZS5oCisvLyEgLSAuLi4KKy8vISAtIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gRElPMzEuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gXHJlZiBBT05fRVZFTlRfSU8gICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBhbnkgRElPCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwICAgICAgICAgICA6IFJUQyBjaGFubmVsIDAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDEgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMiAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gwX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyX0RMWSAgICAgICA6IFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ09NQl9ETFkgICAgICA6IFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfVVBEICAgICAgICAgICA6IFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0pUQUcgICAgICAgICAgICAgIDogSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMCAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYxICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjIgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQSAgICAgICAgIDogQ29tcGFyYXRvciBBIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQiAgICAgICAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZCAoc3luY2hyb25pemVkIGluIEFVWCkKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9BRENfRE9ORSAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVERDX0RPTkUgICAgICA6IFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIwX0VWICAgICA6IFRpbWVyIDAgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjFfRVYgICAgIDogVGltZXIgMSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1RFTVAgICAgICAgOiBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVk9MVCAgICAgICA6IEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQ19OIDogQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfTk9ORSAgICAgICAgICAgICAgOiBObyBldmVudCwgYWx3YXlzIGxvdworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9ORXZlbnRNY3VHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFPTkV2ZW50TWN1U2V0KHVpbnQzMl90IHVpMzJNQ1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZCBwcm9ncmFtbWFibGUgZXZlbnQgZm9yd2FyZGVkIHRvIHRoZSBNQ1UgZXZlbnQKKy8vISBmYWJyaWMuCisvLyEKKy8vISBUaGUgQU9OIGV2ZW50IGZhYnJpYyBoYXMgYSB0b3RhbCBvZiB0aHJlZSBwcm9ncmFtbWFibGUgZXZlbnRzIHRoYXQgY2FuCisvLyEgYmUgZm9yd2FyZGVkIHRvIHRoZSBNQ1UgZXZlbnQgZmFicmljLgorLy8hCisvLyEgXHBhcmFtIHVpMzJNQ1VFdmVudCBpcyBvbmUgb2YgdGhyZWUgcHJvZ3JhbW1hYmxlIGV2ZW50cyBmb3J3YXJkZWQgdG8gdGhlCisvLyEgTUNVIGV2ZW50IGZhYnJpYy4KKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9FVkVOVDAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9FVkVOVDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX01DVV9FVkVOVDIKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhbiBldmVudCBzb3VyY2UgZm9yIHRoZSBldmVudCBBT04gZmFicmljLCBpLmUuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gQU9OX0VWRU5UX0RJTzAgICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8wLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIC4uLgorLy8hIC0gQU9OX0VWRU5UX0RJTzMxICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8zMS4gU2VlIGh3X2RldmljZS5oCisvLyEgLSBccmVmIEFPTl9FVkVOVF9JTyAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIGFueSBESU8KKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDAgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMSAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyICAgICAgICAgICA6IFJUQyBjaGFubmVsIDIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDBfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDFfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDJfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DT01CX0RMWSAgICAgIDogUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19VUEQgICAgICAgICAgIDogUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfSlRBRyAgICAgICAgICAgICAgOiBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYwICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjEgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMiAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBBICAgICAgICAgOiBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCICAgICAgICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0FEQ19ET05FICAgICAgOiBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9URENfRE9ORSAgICAgIDogVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjBfRVYgICAgIDogVGltZXIgMCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMV9FViAgICAgOiBUaW1lciAxIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVEVNUCAgICAgICA6IEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9WT0xUICAgICAgIDogQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkMgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DX04gOiBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9OT05FICAgICAgICAgICAgICA6IE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyEKKy8vISBcc2EgQU9ORXZlbnRNY3VTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBBT05FdmVudE1jdUdldCh1aW50MzJfdCB1aTMyTUNVRXZlbnQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZWxlY3QgZXZlbnQgc291cmNlIGZvcndhcmRlZCB0byBBT04gUmVhbCBUaW1lIENsb2NrIChSVEMpLgorLy8hCisvLyEgQSBwcm9ncmFtbWFibGUgZXZlbnQgY2FuIGJlIGZvcndhcmRlZCB0byB0aGUgQU9OIHJlYWwgdGltZSBjbG9jaworLy8hIGZvciB0cmlnZ2VyaW5nIGEgY2FwdHVyZSBldmVudCBvbiBSVEMgY2hhbm5lbCAxLgorLy8hCisvLyEgXHBhcmFtIHVpMzJFdmVudFNyYyBpcyB0aGUgZXZlbnQgc291cmNlcyBmb3IgdGhlIGV2ZW50IEFPTiBmYWJyaWMuCisvLyEgLSBBT05fRVZFTlRfRElPMCAgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzAuIFNlZSBod19kZXZpY2UuaAorLy8hIC0gLi4uCisvLyEgLSBBT05fRVZFTlRfRElPMzEgICAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIERJTzMxLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0lPICAgICAgICAgICAgICAgIDogRWRnZSBkZXRlY3Qgb24gYW55IERJTworLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMCAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gxICAgICAgICAgICA6IFJUQyBjaGFubmVsIDEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDIgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMF9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMV9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMl9ETFkgICAgICAgOiBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NPTUJfRExZICAgICAgOiBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX1VQRCAgICAgICAgICAgOiBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZSB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9KVEFHICAgICAgICAgICAgICA6IEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjAgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMSAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYyICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEEgICAgICAgICA6IENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEIgICAgICAgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQgKHN5bmNocm9uaXplZCBpbiBBVVgpCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQURDX0RPTkUgICAgICA6IEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1REQ19ET05FICAgICAgOiBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMF9FViAgICAgOiBUaW1lciAwIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfVElNRVIxX0VWICAgICA6IFRpbWVyIDEgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9URU1QICAgICAgIDogQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQkFUTU9OX1ZPTFQgICAgICAgOiBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9DT01QQl9BU1lOQyAgIDogQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkNfTiA6IENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX05PTkUgICAgICAgICAgICAgIDogTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTkV2ZW50UnRjR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9ORXZlbnRSdGNTZXQodWludDMyX3QgdWkzMkV2ZW50U3JjKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJFdmVudFNyYyA8PSBBT05fRVZFTlRfTk9ORSk7CisKKyAgICB1aTMyQ3RybCA9IEhXUkVHKEFPTl9FVkVOVF9CQVNFICsgQU9OX0VWRU5UX09fUlRDU0VMKTsKKyAgICB1aTMyQ3RybCAmPSB+KEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX00pOworICAgIHVpMzJDdHJsIHw9ICh1aTMyRXZlbnRTcmMgJiAweDNmKSA8PCBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9TOworCisgICAgSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19SVENTRUwpID0gdWkzMkN0cmw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBldmVudCBzb3VyY2UgZm9yd2FyZGVkIHRvIEFPTiBSZWFsIFRpbWUgQ2xvY2sgKFJUQykuCisvLyEKKy8vISBBIHByb2dyYW1tYWJsZSBldmVudCBjYW4gYmUgZm9yd2FyZGVkIHRvIHRoZSBBT04gcmVhbCB0aW1lIGNsb2NrCisvLyEgZm9yIHRyaWdnZXJpbmcgYSBjYXB0dXJlIGV2ZW50IG9uIFJUQyBjaGFubmVsIDEuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYW4gZXZlbnQgc291cmNlIHRvIHRoZSBldmVudCBBT04gZmFicmljLCBpLmUuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gQU9OX0VWRU5UX0RJTzAgICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8wLiBTZWUgaHdfZGV2aWNlLmgKKy8vISAtIC4uLgorLy8hIC0gQU9OX0VWRU5UX0RJTzMxICAgICAgICAgICAgICAgICAgOiBFZGdlIGRldGVjdCBvbiBESU8zMS4gU2VlIGh3X2RldmljZS5oCisvLyEgLSBccmVmIEFPTl9FVkVOVF9JTyAgICAgICAgICAgICAgICA6IEVkZ2UgZGV0ZWN0IG9uIGFueSBESU8KKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDAgICAgICAgICAgIDogUlRDIGNoYW5uZWwgMAorLy8hIC0gXHJlZiBBT05fRVZFTlRfUlRDX0NIMSAgICAgICAgICAgOiBSVEMgY2hhbm5lbCAxCisvLyEgLSBccmVmIEFPTl9FVkVOVF9SVENfQ0gyICAgICAgICAgICA6IFJUQyBjaGFubmVsIDIKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDBfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDFfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DSDJfRExZICAgICAgIDogUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19DT01CX0RMWSAgICAgIDogUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX1JUQ19VUEQgICAgICAgICAgIDogUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfSlRBRyAgICAgICAgICAgICAgOiBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1NXRVYwICAgICAgICAgOiBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwCisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfU1dFVjEgICAgICAgICA6IEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9TV0VWMiAgICAgICAgIDogQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBBICAgICAgICAgOiBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCICAgICAgICAgOiBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkIChzeW5jaHJvbml6ZWQgaW4gQVVYKQorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0FEQ19ET05FICAgICAgOiBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9URENfRE9ORSAgICAgIDogVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0FVWF9USU1FUjBfRVYgICAgIDogVGltZXIgMCBldmVudAorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX1RJTUVSMV9FViAgICAgOiBUaW1lciAxIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9CQVRNT05fVEVNUCAgICAgICA6IEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vISAtIFxyZWYgQU9OX0VWRU5UX0JBVE1PTl9WT0xUICAgICAgIDogQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyEgLSBccmVmIEFPTl9FVkVOVF9BVVhfQ09NUEJfQVNZTkMgICA6IENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQgorLy8hIC0gXHJlZiBBT05fRVZFTlRfQVVYX0NPTVBCX0FTWU5DX04gOiBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbCBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCCisvLyEgLSBccmVmIEFPTl9FVkVOVF9OT05FICAgICAgICAgICAgICA6IE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyEKKy8vISBcc2EgQU9ORXZlbnRSdGNTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9ORXZlbnRSdGNHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXZlbnRTcmM7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYWN0aXZlIGV2ZW50LgorICAgIC8vCisgICAgdWkzMkV2ZW50U3JjID0gSFdSRUcoQU9OX0VWRU5UX0JBU0UgKyBBT05fRVZFTlRfT19SVENTRUwpOworCisgICAgcmV0dXJuICgodWkzMkV2ZW50U3JjICYgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfTSkgPj4KKyAgICAgICAgICAgIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9BT05FdmVudE1jdVdha2VVcFNldAorICAgICAgICAjdW5kZWYgIEFPTkV2ZW50TWN1V2FrZVVwU2V0CisgICAgICAgICNkZWZpbmUgQU9ORXZlbnRNY3VXYWtlVXBTZXQgICAgICAgICAgICBST01fQU9ORXZlbnRNY3VXYWtlVXBTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FPTkV2ZW50TWN1V2FrZVVwR2V0CisgICAgICAgICN1bmRlZiAgQU9ORXZlbnRNY3VXYWtlVXBHZXQKKyAgICAgICAgI2RlZmluZSBBT05FdmVudE1jdVdha2VVcEdldCAgICAgICAgICAgIFJPTV9BT05FdmVudE1jdVdha2VVcEdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQU9ORXZlbnRBdXhXYWtlVXBTZXQKKyAgICAgICAgI3VuZGVmICBBT05FdmVudEF1eFdha2VVcFNldAorICAgICAgICAjZGVmaW5lIEFPTkV2ZW50QXV4V2FrZVVwU2V0ICAgICAgICAgICAgUk9NX0FPTkV2ZW50QXV4V2FrZVVwU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BT05FdmVudEF1eFdha2VVcEdldAorICAgICAgICAjdW5kZWYgIEFPTkV2ZW50QXV4V2FrZVVwR2V0CisgICAgICAgICNkZWZpbmUgQU9ORXZlbnRBdXhXYWtlVXBHZXQgICAgICAgICAgICBST01fQU9ORXZlbnRBdXhXYWtlVXBHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FPTkV2ZW50TWN1U2V0CisgICAgICAgICN1bmRlZiAgQU9ORXZlbnRNY3VTZXQKKyAgICAgICAgI2RlZmluZSBBT05FdmVudE1jdVNldCAgICAgICAgICAgICAgICAgIFJPTV9BT05FdmVudE1jdVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQU9ORXZlbnRNY3VHZXQKKyAgICAgICAgI3VuZGVmICBBT05FdmVudE1jdUdldAorICAgICAgICAjZGVmaW5lIEFPTkV2ZW50TWN1R2V0ICAgICAgICAgICAgICAgICAgUk9NX0FPTkV2ZW50TWN1R2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19BT05fRVZFTlRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ldmVudF9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ldmVudF9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTdmN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2V2ZW50X2RvYy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fZXZlbnRfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGFvbmV2ZW50X2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2FvbmV2ZW50IEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIGV2ZW50IGZhYnJpYyBjb25zaXN0cyBvZiB0d28gZXZlbnQgbW9kdWxlcy4gT25lIGluIHRoZSBNQ1UgcG93ZXIgZG9tYWluIChNQ1UgZXZlbnQgZmFicmljKSBhbmQKKy8vISB0aGUgb3RoZXIgaW4gdGhlIEFPTiBwb3dlciBkb21haW4gKEFPTiBldmVudCBmYWJyaWMpLiBUaGUgTUNVIGV2ZW50IGZhYnJpYyBpcyBvbmUgb2YgdGhlIHN1YnNjcmliZXJzCisvLyEgdG8gdGhlIEFPTiBldmVudCBmYWJyaWMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE1DVSBldmVudCBmYWJyaWMsIHNlZSBbTUNVIGV2ZW50IEFQSV0oQHJlZiBldmVudF9hcGkpLgorLy8hCisvLyEgVGhlIEFPTiBldmVudCBmYWJyaWMgaXMgYSBjb25maWd1cmFibGUgY29tYmluYXRvcmlhbCByb3V0ZXIgYmV0d2VlbiBBT04gZXZlbnQgc291cmNlcyBhbmQgZXZlbnQKKy8vISBzdWJzY3JpYmVycyBpbiBib3RoIEFPTiBhbmQgTUNVIGRvbWFpbnMuIFRoZSBBT04gZXZlbnQgZmFicmljIGhhcyB0aHJlZSBtYWluIGV2ZW50IHN1YnNjcmliZXJzOiBBT04gV1VDLAorLy8hIEFPTiBSVEMsIGFuZCBNQ1UgZXZlbnQgZmFicmljLiBUaGUgQVBJIHRvIGNvbnRyb2wgdGhlIEFPTiBldmVudCBmYWJyaWMgY29uZmlndXJhdGlvbiBjYW4gYmUgZ3JvdXBlZCBiYXNlZAorLy8hIG9uIHRoZSBldmVudCBzdWJzY3JpYmVyIHRvIGNvbmZpZ3VyZToKKy8vIQorLy8hIC0gQU9OIFdVQyByZWNlaXZlcyB0d28gcHJvZ3JhbW1hYmxlIGV2ZW50IGxpbmVzIGZyb20gQU9OIGV2ZW50IGZhYnJpYy4gT25lIGZvciBNQ1Ugd2FrZS11cCBldmVudHMgYW5kIG9uZSBmb3IgQVVYIHdha2UtdXAgZXZlbnRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBT04gV1VDIEFQSV0oQHJlZiBhb253dWNfYXBpKS4KKy8vISAgIC0gTUNVIHdha2UtdXAgZXZlbnQKKy8vISAgICAgLSBAcmVmIEFPTkV2ZW50TWN1V2FrZVVwU2V0KCkKKy8vISAgICAgLSBAcmVmIEFPTkV2ZW50TWN1V2FrZVVwR2V0KCkKKy8vISAgIC0gQVVYIHdha2UtdXAgZXZlbnQKKy8vISAgICAgLSBAcmVmIEFPTkV2ZW50QXV4V2FrZVVwU2V0KCkKKy8vISAgICAgLSBAcmVmIEFPTkV2ZW50QXV4V2FrZVVwR2V0KCkKKy8vISAtIEFPTiBSVEMgcmVjZWl2ZXMgYSBzaW5nbGUgcHJvZ3JhbW1hYmxlIGV2ZW50IGxpbmUgZnJvbSB0aGUgQU9OIGV2ZW50IGZhYnJpYy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQU9OIFJUQyBBUEldKEByZWYgYW9ucnRjX2FwaSkuCisvLyEgICAtIEByZWYgQU9ORXZlbnRSdGNTZXQoKQorLy8hICAgLSBAcmVmIEFPTkV2ZW50UnRjR2V0KCkKKy8vISAtIE1DVSBldmVudCBmYWJyaWMgcmVjZWl2ZXMgYSBudW1iZXIgb2YgcHJvZ3JhbW1hYmxlIGV2ZW50IGxpbmVzIGZyb20gdGhlIEFPTiBldmVudCBmYWJyaWMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01DVSBldmVudCBBUEldKEByZWYgZXZlbnRfYXBpKS4KKy8vISAgIC0gQHJlZiBBT05FdmVudE1jdVNldCgpCisvLyEgICAtIEByZWYgQU9ORXZlbnRNY3VHZXQoKQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25faW9jLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25faW9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhNjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9pb2MuYwpAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX2lvYy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wOS0wOCAxMDoyMToyMiArMDIwMCAoVHVlLCAwOCBTZXAgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDUyNgorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFPTiBJTyBDb250cm9sbGVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9pb2MuaD4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9pb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTY4NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2lvYy5oCkBAIC0wLDAgKzEsMzA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX2lvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wOS0wOCAxNjozODo1NSArMDIwMCAoVHVlLCAwOCBTZXAgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDUzMQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBT04gSU8gQ29udHJvbGxlcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBhb25fZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGFvbmlvY19hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FPTl9JT0NfSF9fCisjZGVmaW5lIF9fQU9OX0lPQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX2lvYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGRyaXZlIHN0cmVuZ3RoCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05JT0NfRFJWX1NUUl8xICAweDAwMDAwMDAwIC8vIExvd2VzdCBkcml2ZSBzdHJlbmd0aAorI2RlZmluZSBBT05JT0NfRFJWX1NUUl8yICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTklPQ19EUlZfU1RSXzMgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQU9OSU9DX0RSVl9TVFJfNCAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05JT0NfRFJWX1NUUl81ICAweDAwMDAwMDA2CisjZGVmaW5lIEFPTklPQ19EUlZfU1RSXzYgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OSU9DX0RSVl9TVFJfNyAgMHgwMDAwMDAwNQorI2RlZmluZSBBT05JT0NfRFJWX1NUUl84ICAweDAwMDAwMDA0IC8vIEhpZ2hlc3QgZHJpdmUgc3RyZW5ndGgKKworI2RlZmluZSBBT05JT0NfRFJWX0xWTF9NSU4gIChBT05fSU9DX09fSU9TVFJNSU4pCisjZGVmaW5lIEFPTklPQ19EUlZfTFZMX01FRCAgKEFPTl9JT0NfT19JT1NUUk1FRCkKKyNkZWZpbmUgQU9OSU9DX0RSVl9MVkxfTUFYICAoQU9OX0lPQ19PX0lPU1RSTUFYKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIGRyaXZlIHN0cmVuZ3RoIHZhbHVlcyBmb3IgdGhlIG1hbnVhbCBkcml2ZSBzdHJlbmd0aCBvcHRpb25zLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZWZpbmVzIHRoZSBnZW5lcmFsIGRyaXZlIHN0cmVuZ3RoIHNldHRpbmdzIGZvciB0aGUgbm9uLUFVVE8KKy8vISBkcml2ZSBzdHJlbmd0aCBvcHRpb25zIGluIHRoZSBNQ1UgSU9DLiBDb25zZXF1ZW50bHksIGlmIGFsbCBJT3MgYXJlIHVzaW5nIHRoZQorLy8hIGF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCBvcHRpb24gdGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0LgorLy8hCisvLyEgQ2hhbmdpbmcgdGhlIGRyaXZlIHN0cmVuZ3RoIHZhbHVlcyBhZmZlY3RzIGFsbCBjdXJyZW50IG1vZGVzIChMb3ctQ3VycmVudCwKKy8vISBIaWdoLUN1cnJlbnQsIGFuZCBFeHRlbmRlZC1DdXJyZW50KS4gQ3VycmVudCBtb2RlIGZvciBpbmRpdmlkdWFsIElPcyBpcyBzZXQgaW4KKy8vISBNQ1UgSU9DIGJ5IFxyZWYgSU9DSU9EcnZTdHJlbmd0aFNldCgpLgorLy8hCisvLyEgXG5vdGUgVmFsdWVzIGFyZSBHcmF5IGVuY29kZWQuIFNpbXBseSBpbmNyZW1lbnRpbmcgdmFsdWVzIHRvIGluY3JlYXNlIGRyaXZlCisvLyEgc3RyZW5ndGggd2lsbCBub3Qgd29yay4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRHJpdmVMZXZlbAorLy8hIC0gXHJlZiBBT05JT0NfRFJWX0xWTF9NSU4gOiBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoIG9wdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzZWxlY3RlZAorLy8hICAgICAgICB0byBnaXZlIG1pbmltdW0gMi80LzggbUEgQDMuM1YgZm9yIExvdy1DdXJyZW50IG1vZGUsIEhpZ2gtQ3VycmVudCBtb2RlLAorLy8hICAgICAgICBhbmQgRXh0ZW5kZWQtQ3VycmVudCBtb2RlIHJlc3BlY3RpdmVseS4KKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9MVkxfTUVEIDogTWVkaXVtIGRyaXZlIHN0cmVuZ3RoIG9wdGlvbi4gRGVmYXVsdCB2YWx1ZSBpcyBzZWxlY3RlZAorLy8hICAgICAgICB0byBnaXZlIG1pbmltdW0gMi80LzggbUEgQDIuNVYgZm9yIExvdy1DdXJyZW50IG1vZGUsIEhpZ2gtQ3VycmVudCBtb2RlLAorLy8hICAgICAgICBhbmQgRXh0ZW5kZWQtQ3VycmVudCBtb2RlIHJlc3BlY3RpdmVseS4KKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9MVkxfTUFYIDogTWF4aW11bSBkcml2ZSBzdHJlbmd0aCBvcHRpb24uIERlZmF1bHQgdmFsdWUgaXMgc2VsZWN0ZWQKKy8vISAgICAgICAgdG8gZ2l2ZSBtaW5pbXVtIDIvNC84IG1BIEAxLjhWIGZvciBMb3ctQ3VycmVudCBtb2RlLCBIaWdoLUN1cnJlbnQgbW9kZSwKKy8vISAgICAgICAgYW5kIEV4dGVuZGVkLUN1cnJlbnQgbW9kZSByZXNwZWN0aXZlbHkuCisvLyEgXHBhcmFtIHVpMzJEcml2ZVN0cmVuZ3RoIHNldHMgdGhlIHZhbHVlIHVzZWQgYnkgSU9zIGNvbmZpZ3VyZWQgYXMgbm9uLUFVVE8gZHJpdmUgc3RyZW5ndGggaW4gTUNVIElPQy4KKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfMSA6IExvd2VzdCBkcml2ZSBzdHJlbmd0aAorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl8yCisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzMKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfNAorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl81CisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzYKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfNworLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl84IDogSGlnaGVzdCBkcml2ZSBzdHJlbmd0aAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBT05JT0NEcml2ZVN0cmVuZ3RoR2V0KCksIFxyZWYgSU9DSU9EcnZTdHJlbmd0aFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTklPQ0RyaXZlU3RyZW5ndGhTZXQodWludDMyX3QgdWkzMkRyaXZlTGV2ZWwsIHVpbnQzMl90IHVpMzJEcml2ZVN0cmVuZ3RoKQoreworICAgIEFTU0VSVCgodWkzMkRyaXZlTGV2ZWwgPT0gQU9OSU9DX0RSVl9MVkxfTUlOKSB8fAorICAgICAgICAgICAodWkzMkRyaXZlTGV2ZWwgPT0gQU9OSU9DX0RSVl9MVkxfTUVEKSB8fAorICAgICAgICAgICAodWkzMkRyaXZlTGV2ZWwgPT0gQU9OSU9DX0RSVl9MVkxfTUFYKSk7CisgICAgQVNTRVJUKCh1aTMyRHJpdmVTdHJlbmd0aCA9PSBBT05JT0NfRFJWX1NUUl8xKSB8fAorICAgICAgICAgICAodWkzMkRyaXZlU3RyZW5ndGggPT0gQU9OSU9DX0RSVl9TVFJfMikgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZVN0cmVuZ3RoID09IEFPTklPQ19EUlZfU1RSXzMpIHx8CisgICAgICAgICAgICh1aTMyRHJpdmVTdHJlbmd0aCA9PSBBT05JT0NfRFJWX1NUUl80KSB8fAorICAgICAgICAgICAodWkzMkRyaXZlU3RyZW5ndGggPT0gQU9OSU9DX0RSVl9TVFJfNSkgfHwKKyAgICAgICAgICAgKHVpMzJEcml2ZVN0cmVuZ3RoID09IEFPTklPQ19EUlZfU1RSXzYpIHx8CisgICAgICAgICAgICh1aTMyRHJpdmVTdHJlbmd0aCA9PSBBT05JT0NfRFJWX1NUUl83KSB8fAorICAgICAgICAgICAodWkzMkRyaXZlU3RyZW5ndGggPT0gQU9OSU9DX0RSVl9TVFJfOCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoLgorICAgIC8vCisgICAgSFdSRUcoQU9OX0lPQ19CQVNFICsgdWkzMkRyaXZlTGV2ZWwpID0gdWkzMkRyaXZlU3RyZW5ndGg7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBhIHNwZWNpZmljIGRyaXZlIGxldmVsIHNldHRpbmcgZm9yIGFsbCBJT3MuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byByZWFkIHRoZSBkcml2ZSBzdHJlbmd0aCBzZXR0aW5nIGZvciBhIHNwZWNpZmljCisvLyEgSU8gZHJpdmUgbGV2ZWwuCisvLyEKKy8vISBcbm90ZSBWYWx1ZXMgYXJlIEdyYXkgZW5jb2RlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRHJpdmVMZXZlbCBpcyB0aGUgc3BlY2lmaWMgZHJpdmUgbGV2ZWwgdG8gZ2V0IHRoZSBzZXR0aW5nIGZvci4KKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9MVkxfTUlOIDogTWluaW11bSBkcml2ZSBzdHJlbmd0aCBvcHRpb24uCisvLyEgLSBccmVmIEFPTklPQ19EUlZfTFZMX01FRCA6IE1lZGl1bSBkcml2ZSBzdHJlbmd0aCBvcHRpb24uCisvLyEgLSBccmVmIEFPTklPQ19EUlZfTFZMX01BWCA6IE1heGltdW0gZHJpdmUgc3RyZW5ndGggb3B0aW9uLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSByZXF1ZXN0ZWQgZHJpdmUgc3RyZW5ndGggbGV2ZWwgc2V0dGluZyBmb3IgYWxsIElPcy4KKy8vISBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl8xIDogTG93ZXN0IGRyaXZlIHN0cmVuZ3RoCisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzIKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfMworLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl80CisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzUKKy8vISAtIFxyZWYgQU9OSU9DX0RSVl9TVFJfNgorLy8hIC0gXHJlZiBBT05JT0NfRFJWX1NUUl83CisvLyEgLSBccmVmIEFPTklPQ19EUlZfU1RSXzggOiBIaWdoZXN0IGRyaXZlIHN0cmVuZ3RoCisvLyEKKy8vISBcc2EgQU9OSU9DRHJpdmVTdHJlbmd0aFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05JT0NEcml2ZVN0cmVuZ3RoR2V0KHVpbnQzMl90IHVpMzJEcml2ZUxldmVsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkRyaXZlTGV2ZWwgPT0gQU9OSU9DX0RSVl9MVkxfTUlOKSB8fAorICAgICAgICAgICAodWkzMkRyaXZlTGV2ZWwgPT0gQU9OSU9DX0RSVl9MVkxfTUVEKSB8fAorICAgICAgICAgICAodWkzMkRyaXZlTGV2ZWwgPT0gQU9OSU9DX0RSVl9MVkxfTUFYKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgZHJpdmUgc3RyZW5ndGggdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4oIEhXUkVHKEFPTl9JT0NfQkFTRSArIHVpMzJEcml2ZUxldmVsKSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBGcmVlemUgdGhlIElPcy4KKy8vIQorLy8hIFRvIHJldGFpbiB0aGUgdmFsdWVzIG9mIHRoZSBvdXRwdXQgSU9zIGR1cmluZyBhIHBvd2VyZG93bi9zaHV0ZG93biBvZiB0aGUKKy8vISBkZXZpY2UgYWxsIElPIGxhdGNoZXMgaW4gdGhlIEFPTiBkb21haW4gc2hvdWxkIGJlIGZyb3plbiBpbiB0aGVpciBjdXJyZW50CisvLyEgc3RhdGUuIFRoaXMgZW5zdXJlcyB0aGF0IHNvZnR3YXJlIGNhbiByZWdhaW4gY29udHJvbCBvZiB0aGUgSU9zIGFmdGVyIGEKKy8vISByZWJvb3Qgd2l0aG91dCB0aGUgSU9zIGZpcnN0IGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCB2YWx1ZXMgKGkuZS4gaW5wdXQKKy8vISBhbmQgbm8gcHVsbCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05JT0NGcmVlemVEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OSU9DRnJlZXplRW5hYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEFPTiBJTyBsYXRjaGVzIGFzIHN0YXRpYy4KKyAgICAvLworICAgIEhXUkVHKEFPTl9JT0NfQkFTRSArIEFPTl9JT0NfT19JT0NMQVRDSCkgPSAweDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVuLWZyZWV6ZSB0aGUgSU9zLgorLy8hCisvLyEgV2hlbiByZWJvb3RpbmcgdGhlIGNoaXAgYWZ0ZXIgaXQgaGFzIGVudGVyZWQgcG93ZXJkb3duL3NodXRkb3duIG1vZGUsIHRoZQorLy8hIHNvZnR3YXJlIGNhbiByZWdhaW4gY29udHJvbCBvZiB0aGUgSU9zIGJ5IHNldHRpbmcgdGhlIElPIGxhdGNoZXMgYXMKKy8vISB0cmFuc3BhcmVudC4gVGhlIElPcyBzaG91bGQgbm90IGJlIHVuZnJvemVuIGJlZm9yZSBzb2Z0d2FyZSBoYXMgcmVzdG9yZWQKKy8vISB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgSU8uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05JT0NGcmVlemVFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05JT0NGcmVlemVEaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEFPTiBJT0MgbGF0Y2hlcyBhcyB0cmFuc3BhcmVudC4KKyAgICAvLworICAgIEhXUkVHKEFPTl9JT0NfQkFTRSArIEFPTl9JT0NfT19JT0NMQVRDSCkgPSBBT05fSU9DX0lPQ0xBVENIX0VOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIHRoZSAzMmtIeiBjbG9jayBvdXRwdXQuCisvLyEKKy8vISBXaGVuIG91dHB1dHRpbmcgYSAzMiBrSHogY2xvY2sgb24gYW4gSU8sIHRoZSBvdXRwdXQgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0eQorLy8hIGluIHRoZSBJT0MgaXMgYnlwYXNzZWQuIFRoZXJlZm9yZSwgdGhlIHByb2dyYW1tZXIgbmVlZHMgdG8gY2FsbCB0aGlzCisvLyEgZnVuY3Rpb24gdG8gZGlzYWJsZSB0aGUgY2xvY2sgb3V0cHV0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OSU9DMzJrSHpPdXRwdXRFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05JT0MzMmtIek91dHB1dERpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIExGIGNsb2NrIG91dHB1dC4KKyAgICAvLworICAgIEhXUkVHKEFPTl9JT0NfQkFTRSArIEFPTl9JT0NfT19DTEszMktDVEwpID0gQU9OX0lPQ19DTEszMktDVExfT0VfTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHRoZSAzMmtIeiBjbG9jayBvdXRwdXQuCisvLyEKKy8vISBXaGVuIG91dHB1dHRpbmcgYSAzMiBrSHogY2xvY2sgb24gYW4gSU8sIHRoZSBvdXRwdXQgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0eQorLy8hIGluIHRoZSBJT0MgaXMgYnlwYXNzZWQuIFRoZXJlZm9yZSwgdGhlIHByb2dyYW1tZXIgbmVlZHMgdG8gY2FsbCB0aGlzCisvLyEgZnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBjbG9jayBvdXRwdXQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05JT0MzMmtIek91dHB1dERpc2FibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05JT0MzMmtIek91dHB1dEVuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBMRiBjbG9jayBvdXRwdXQuCisgICAgLy8KKyAgICBIV1JFRyhBT05fSU9DX0JBU0UgKyBBT05fSU9DX09fQ0xLMzJLQ1RMKSA9IDB4MDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19BT05fSU9DX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25faW9jX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2lvY19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI4OGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX2lvY19kb2MuaApAQCAtMCwwICsxLDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX2lvY19kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTE6MDE6MzAgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NjkKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgYW9uaW9jX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2FvbmlvYyBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBJbnB1dC9PdXRwdXQgQ29udHJvbGxlciAoSU9DKSBjb250cm9scyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGlucyAoY2FsbGVkIERJTykuCisvLyEgVGhlIElPQyBjb25zaXN0cyBvZiB0d28gQVBJczoKKy8vISAtIE1DVSBJT0MgQVBJIHNlbGVjdHMgd2hpY2ggcGVyaXBoZXJhbCBtb2R1bGUgaXMgY29ubmVjdGVkIHRvIHRoZSBpbmRpdmlkdWFsIERJTyBhbmQgdGh1cyBhbGxvd2VkIHRvIGNvbnRyb2wgaXQuCisvLyEgICBJdCBhbHNvIGNvbnRyb2xzIGluZGl2aWR1YWwgZHJpdmUgc3RyZW5ndGgsIHNsZXcgcmF0ZSwgcHVsbC11cC9wdWxsLWRvd24sIGVkZ2UgZGV0ZWN0aW9uLCBldGMuCisvLyEgLSBBT04gSU9DIEFQSSBjb250cm9scyB0aGUgZ2VuZXJhbCBkcml2ZSBzdHJlbmd0aCBkZWZpbml0aW9ucywgSU8gbGF0Y2hlcywgYW5kIGlmIHRoZSBMRiBjbG9jayBpcworLy8hICAgcm91dGVkIHRvIGEgRElPIGZvciBleHRlcm5hbCB1c2UuCisvLyEKKy8vISBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTUNVIElPQyBzZWUgdGhlIFtJT0MgQVBJXShccmVmIGlvY19hcGkpLgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX2FvbmlvY19hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBGcmVlemUgSU9zIHdoaWxlIE1DVSBkb21haW4gaXMgcG93ZXJlZCBkb3duOgorLy8hIC0gXHJlZiBBT05JT0NGcmVlemVFbmFibGUoKQorLy8hIC0gXHJlZiBBT05JT0NGcmVlemVEaXNhYmxlKCkKKy8vIQorLy8hIE91dHB1dCBMRiBjbG9jayB0byBhIERJTzoKKy8vISAtIFxyZWYgQU9OSU9DMzJrSHpPdXRwdXRFbmFibGUoKQorLy8hIC0gXHJlZiBBT05JT0MzMmtIek91dHB1dERpc2FibGUoKQorLy8hCisvLyEgQ29uZmlndXJlIHRoZSB2YWx1ZSBvZiBkcml2ZSBzdHJlbmd0aCBmb3IgdGhlIHRocmVlIG1hbnVhbCBNQ1UgSU9DIHNldHRpbmdzIChNSU4sIE1FRCwgTUFYKToKKy8vISAtIFxyZWYgQU9OSU9DRHJpdmVTdHJlbmd0aFNldCgpCisvLyEgLSBccmVmIEFPTklPQ0RyaXZlU3RyZW5ndGhHZXQoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGMuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl9ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjhiMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Yy5jCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX3J0Yy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMi0yOSAxMzo0MzozNyArMDEwMCAoTW9uLCAyOSBGZWIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTc5MQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFPTiBSVEMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9ydGMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0CisgICAgI2RlZmluZSBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0ICAgIE5PUk9NX0FPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQKKyAgICAjdW5kZWYgIEFPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0CisgICAgI2RlZmluZSBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldCAgICAgIE5PUk9NX0FPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0CisjZW5kaWYKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBSVEMgY291bnRlciBpbiBhIGZvcm1hdCBjb21wYXRpYmxlIHRvIHRoZSBjb21wYXJlIHJlZ2lzdGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCggdm9pZCApCit7CisgICAgdWludDMyX3QgICB1aTMyQ3VycmVudFNlYyAgICA7CisgICAgdWludDMyX3QgICB1aTMyQ3VycmVudFN1YlNlYyA7CisgICAgdWludDMyX3QgICB1aTMyU2Vjb25kU2VjUmVhZCA7CisKKyAgICAvLworICAgIC8vIFJlYWRpbmcgU0VDIGJvdGggYmVmb3JlIGFuZCBhZnRlciBTVUJTRUMgaW4gb3JkZXIgdG8gZGV0ZWN0IGlmIFNFQyBpbmNyZW1lbnRlZCB3aGlsZSByZWFkaW5nIFNVQlNFQworICAgIC8vIElmIFNFQyBpbmNyZW1lbnRlZCwgd2UgY2FuJ3QgYmUgc3VyZSB3aGljaCBTRUMgdGhlIFNVQlNFQyBiZWxvbmdzIHRvLCBzbyByZXBlYXRpbmcgdGhlIHNlcXVlbmNlIHRoZW4uCisgICAgLy8KKyAgICBkbyB7CisgICAgICAgIHVpMzJDdXJyZW50U2VjICAgID0gSFdSRUcoIEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TRUMgICAgKTsKKyAgICAgICAgdWkzMkN1cnJlbnRTdWJTZWMgPSBIV1JFRyggQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NVQlNFQyApOworICAgICAgICB1aTMyU2Vjb25kU2VjUmVhZCA9IEhXUkVHKCBBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU0VDICAgICk7CisgICAgfSB3aGlsZSAoIHVpMzJDdXJyZW50U2VjICE9IHVpMzJTZWNvbmRTZWNSZWFkICk7CisKKyAgICByZXR1cm4gKCggdWkzMkN1cnJlbnRTZWMgPDwgMTYgKSB8ICggdWkzMkN1cnJlbnRTdWJTZWMgPj4gMTYgKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHZXQgdGhlIGN1cnJlbnQgNjQtYml0IHZhbHVlIG9mIHRoZSBSVEMgY291bnRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50NjRfdAorQU9OUlRDQ3VycmVudDY0Qml0VmFsdWVHZXQoIHZvaWQgKQoreworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDY0X3QgIHJldHVyblZhbHVlICAgICAgIDsKKyAgICAgICAgdWludDMyX3QgIHNlY0FuZFN1YlNlY1sgMiBdIDsKKyAgICB9IGN1cnJlbnRSdGMgICAgICAgICAgICAgICAgICAgIDsKKyAgICB1aW50MzJfdCAgICAgIHVpMzJTZWNvbmRTZWNSZWFkIDsKKworICAgIC8vCisgICAgLy8gUmVhZGluZyBTRUMgYm90aCBiZWZvcmUgYW5kIGFmdGVyIFNVQlNFQyBpbiBvcmRlciB0byBkZXRlY3QgaWYgU0VDIGluY3JlbWVudGVkIHdoaWxlIHJlYWRpbmcgU1VCU0VDCisgICAgLy8gSWYgU0VDIGluY3JlbWVudGVkLCB3ZSBjYW4ndCBiZSBzdXJlIHdoaWNoIFNFQyB0aGUgU1VCU0VDIGJlbG9uZ3MgdG8sIHNvIHJlcGVhdGluZyB0aGUgc2VxdWVuY2UgdGhlbi4KKyAgICAvLworICAgIGRvIHsKKyAgICAgICAgY3VycmVudFJ0Yy5zZWNBbmRTdWJTZWNbIDEgXSA9IEhXUkVHKCBBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU0VDICAgICk7CisgICAgICAgIGN1cnJlbnRSdGMuc2VjQW5kU3ViU2VjWyAwIF0gPSBIV1JFRyggQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NVQlNFQyApOworICAgICAgICB1aTMyU2Vjb25kU2VjUmVhZCAgICAgICAgICAgID0gSFdSRUcoIEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TRUMgICAgKTsKKyAgICB9IHdoaWxlICggY3VycmVudFJ0Yy5zZWNBbmRTdWJTZWNbIDEgXSAhPSB1aTMyU2Vjb25kU2VjUmVhZCApOworCisgICAgcmV0dXJuICggY3VycmVudFJ0Yy5yZXR1cm5WYWx1ZSApOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Yy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NmVjZTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fcnRjLmgKQEAgLTAsMCArMSw5NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fcnRjLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTAxIDExOjMzOjI5ICswMTAwIChUdWUsIDAxIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1ODA2CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEFPTiBSVEMKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYW9uX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBhb25ydGNfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19BT05fUlRDX0hfXworI2RlZmluZSBfX0FPTl9SVENfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9ydGMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCAgICBOT1JPTV9BT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0CisgICAgI2RlZmluZSBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldCAgICAgIE5PUk9NX0FPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gbW9zdCBvZiB0aGUgQU9OX1JUQyBBUElzIGFzIHRoZSB1aTMyQ2hhbm5lbAorLy8gcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX1JUQ19DSF9OT05FICAgICAgICAgICAgMHgwIC8vIFJUQyBObyBjaGFubmVsCisjZGVmaW5lIEFPTl9SVENfQ0gwICAgICAgICAgICAgICAgIDB4MSAvLyBSVEMgQ2hhbm5lbCAwCisjZGVmaW5lIEFPTl9SVENfQ0gxICAgICAgICAgICAgICAgIDB4MiAvLyBSVEMgQ2hhbm5lbCAxCisjZGVmaW5lIEFPTl9SVENfQ0gyICAgICAgICAgICAgICAgIDB4NCAvLyBSVEMgQ2hhbm5lbCAyCisjZGVmaW5lIEFPTl9SVENfQUNUSVZFICAgICAgICAgICAgIDB4OCAvLyBSVEMgQWN0aXZlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFPTlJUQ0NvbmZpZ0RlbGF5IGFzIHRoZSB1aTMyRGVsYXkgcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfTk9ERUxBWSAwIC8vIE5PIERFTEFZCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzEgICAgICAgMSAvLyBEZWxheSBvZiAgIDEgY2xrIGN5Y2xlCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzIgICAgICAgMiAvLyBEZWxheSBvZiAgIDIgY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV80ICAgICAgIDMgLy8gRGVsYXkgb2YgICA0IGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfOCAgICAgICA0IC8vIERlbGF5IG9mICAgOCBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzE2ICAgICAgNSAvLyBEZWxheSBvZiAgMTYgY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV8zMiAgICAgIDYgLy8gRGVsYXkgb2YgIDMyIGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfNDggICAgICA3IC8vIERlbGF5IG9mICA0OCBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzY0ICAgICAgOCAvLyBEZWxheSBvZiAgNjQgY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV84MCAgICAgIDkgLy8gRGVsYXkgb2YgIDgwIGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfOTYgICAgIDEwIC8vIERlbGF5IG9mICA5NiBjbGsgY3ljbGVzCisjZGVmaW5lIEFPTl9SVENfQ09ORklHX0RFTEFZXzExMiAgICAxMSAvLyBEZWxheSBvZiAxMTIgY2xrIGN5Y2xlcworI2RlZmluZSBBT05fUlRDX0NPTkZJR19ERUxBWV8xMjggICAgMTIgLy8gRGVsYXkgb2YgMTI4IGNsayBjeWNsZXMKKyNkZWZpbmUgQU9OX1JUQ19DT05GSUdfREVMQVlfMTQ0ICAgIDEzIC8vIERlbGF5IG9mIDE0NCBjbGsgY3ljbGVzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFPTlJUQ1NldE1vZGVDSDEgYXMgdGhlIHVpMzJNb2RlCisvLyBwYXJhbWV0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05fUlRDX01PREVfQ0gxX0NBUFRVUkUgICAgIDEgLy8gQ2FwdHVyZSBtb2RlCisjZGVmaW5lIEFPTl9SVENfTU9ERV9DSDFfQ09NUEFSRSAgICAgMCAvLyBDb21wYXJlIE1vZGUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQU9OUlRDU2V0TW9kZUNIMiBhcyB0aGUgdWkzMk1vZGUKKy8vIHBhcmFtZXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTl9SVENfTU9ERV9DSDJfQ09OVElOVU9VUyAgICAxIC8vIENvbnRpbnVvdXMgbW9kZQorI2RlZmluZSBBT05fUlRDX01PREVfQ0gyX05PUk1BTENPTVBBUkUgMCAvLyBOb3JtYWwgY29tcGFyZSBtb2RlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNdXRsaXBsaWNhdGlvbiBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgZnJvbSBzZWNvbmRzIHRvIGNvcnJlc3BvbmRpbmcgdGltZSBpbgorLy8gdGhlICJDb21wYXJlVmFsdWUiIGZvcm1hdC4KKy8vIFRoZSBmYWN0b3IgY29ycmVzcG9uZCB0byB0aGUgY29tcGFyZSB2YWx1ZSBmb3JtYXQgZGVzY3JpYmVkIGluIHRoZSByZWdpc3RlcnMKKy8vICAgXHJlZiBBT05fUlRDX09fQ0gwQ01QLCBccmVmIEFPTl9SVENfT19DSDFDTVAgYW5kIFxyZWYgQU9OX1JUQ19PX0NIMkNNUC4KKy8vIEV4YW1wbGUxOgorLy8gICA0IG1pbGxpc2Vjb25kcyBpbiBDb21wYXJlVmFsdWUgZm9ybWF0IGNhbiBiZSB3cml0dGVuIGxpa2UgdGhpczoKKy8vICAgKCh1aW50MzJfdCkoIDAuMDA0ICogRkFDVE9SX1NFQ19UT19DT01QX1ZBTF9GT1JNQVQgKSkKKy8vIEV4YW1wbGUyOgorLy8gICA0IHNlY29uZHMgaW4gQ29tcGFyZVZhbHVlIGZvcm1hdCBjYW4gYmUgd3JpdHRlbiBsaWtlIHRoaXM6CisvLyAgICggNCAqIEZBQ1RPUl9TRUNfVE9fQ09NUF9WQUxfRk9STUFUICkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZBQ1RPUl9TRUNfVE9fQ09NUF9WQUxfRk9STUFUICAgMHgwMDAxMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHRoZSBSVEMuCisvLyEKKy8vISBFbmFibGUgdGhlIEFPTiBSZWFsIFRpbWUgQ2xvY2suCisvLyEKKy8vISBcbm90ZSBFdmVudCBnZW5lcmF0aW9uIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBjaGFubmVscyBtdXN0IGFsc28gYmUgZW5hYmxlZAorLy8hICB1c2luZyB0aGUgZnVuY3Rpb24gQU9OUlRDQ2hhbm5lbEVuYWJsZSgpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OUlRDQ2hhbm5lbEVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0VuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRW5hYmxlIFJUQy4KKyAgICAvLworICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ1RMLCBBT05fUlRDX0NUTF9FTl9CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgdGhlIFJUQy4KKy8vIQorLy8hIERpc2FibGUgdGhlIEFPTiBSZWFsIFRpbWUgQ2xvY2suCisvLyEKKy8vISBcbm90ZSBFdmVudCBnZW5lcmF0aW9uIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBjaGFubmVscyBjYW4gYWxzbyBiZSBkaXNhYmxlZAorLy8hIHVzaW5nIHRoZSBmdW5jdGlvbiBBT05SVENDaGFubmVsRGlzYWJsZSgpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OUlRDQ2hhbm5lbERpc2FibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENEaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIFJUQworICAgIC8vCisgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwsIEFPTl9SVENfQ1RMX0VOX0JJVE4pID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVzZXQgdGhlIFJUQy4KKy8vIQorLy8hIFJlc2V0IHRoZSBBT04gUmVhbCBUaW1lIENsb2NrLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ1Jlc2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXNldCBSVEMuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NUTCwgQU9OX1JUQ19DVExfUkVTRVRfQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayBpZiB0aGUgUlRDIGlzIGFjdGl2ZSAoZW5hYmxlZCkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgUlRDLgorLy8hIC0gZmFsc2UgOiBSVEMgaXMgZGlzYWJsZWQKKy8vISAtIHRydWUgIDogUlRDIGlzIGVuYWJsZWQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQU9OUlRDQWN0aXZlKHZvaWQpCit7CisgICAgLy8gUmVhZCBpZiBSVEMgaXMgZW5hYmxlZAorICAgIHJldHVybihIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NUTCwgQU9OX1JUQ19DVExfRU5fQklUTikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayBpZiBhbiBSVEMgY2hhbm5lbCBpcyBhY3RpdmUgKGVuYWJsZWQpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIHNwZWNpZmllcyB0aGUgUlRDIGNoYW5uZWwgdG8gY2hlY2sgc3RhdHVzIG9mLgorLy8hIFBhcmFtZXRlciBtdXN0IGJlIG9uZSAoYW5kIG9ubHkgb25lKSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBBT05fUlRDX0NIMAorLy8hIC0gXHJlZiBBT05fUlRDX0NIMQorLy8hIC0gXHJlZiBBT05fUlRDX0NIMgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIHJlcXVlc3RlZCBjaGFubmVsOgorLy8hIC0gZmFsc2UgOiBDaGFubmVsIGlzIGRpc2FibGVkCisvLyEgLSB0cnVlICA6IENoYW5uZWwgaXMgZW5hYmxlZAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBT05SVENDaGFubmVsQWN0aXZlKHVpbnQzMl90IHVpMzJDaGFubmVsKQoreworICAgIHVpbnQzMl90IHVpbnQzMlN0YXR1cyA9IDA7CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gwKQorICAgIHsKKyAgICAgICAgdWludDMyU3RhdHVzID0gSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDBfRU5fQklUTik7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMSkKKyAgICB7CisgICAgICAgIHVpbnQzMlN0YXR1cyA9IEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gxX0VOX0JJVE4pOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDIpCisgICAgeworICAgICAgICB1aW50MzJTdGF0dXMgPSBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMl9FTl9CSVROKTsKKyAgICB9CisKKyAgICByZXR1cm4odWludDMyU3RhdHVzKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIEV2ZW50IERlbGF5IGZvciB0aGUgUlRDLgorLy8hCisvLyEgRWFjaCBldmVudCBmcm9tIHRoZSB0aHJlZSBpbmRpdmlkdWFsIGNoYW5uZWxzIGNhbiBnZW5lcmF0ZSBhIGRlbGF5ZWQKKy8vISBldmVudC4gVGhlIGRlbGF5IHRpbWUgZm9yIHRoZXNlIGV2ZW50cyBpcyBzZXQgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKy8vISBUaGUgZGVsYXkgaXMgbWVhc3VyZWQgaW4gY2xvY2sgY3ljbGVzLgorLy8hCisvLyEgXG5vdGUgVGhlcmUgaXMgb25seSBvbmUgZGVsYXkgc2V0dGluZyBzaGFyZWQgZm9yIGFsbCB0aHJlZSBjaGFubmVscy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRGVsYXkgc3BlY2lmaWVzIHRoZSBkZWxheSB0aW1lIGZvciBkZWxheWVkIGV2ZW50cy4KKy8vISBQYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQU9OX1JUQ19DT05GSUdfREVMQVlfTk9ERUxBWQorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV8xCisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzIKKy8vISAtIFxyZWYgQU9OX1JUQ19DT05GSUdfREVMQVlfNAorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV84CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzE2CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzMyCisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzQ4CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzY0CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzgwCisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzk2CisvLyEgLSBccmVmIEFPTl9SVENfQ09ORklHX0RFTEFZXzExMgorLy8hIC0gXHJlZiBBT05fUlRDX0NPTkZJR19ERUxBWV8xMjgKKy8vISAtIFxyZWYgQU9OX1JUQ19DT05GSUdfREVMQVlfMTQ0CisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0RlbGF5Q29uZmlnKHVpbnQzMl90IHVpMzJEZWxheSkKK3sKKyAgICB1aW50MzJfdCB1aTMyQ2ZnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJEZWxheSA8PSBBT05fUlRDX0NPTkZJR19ERUxBWV8xNDQpOworCisKKyAgICB1aTMyQ2ZnID0gIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwpOworICAgIHVpMzJDZmcgJj0gfihBT05fUlRDX0NUTF9FVl9ERUxBWV9NKTsKKyAgICB1aTMyQ2ZnIHw9ICh1aTMyRGVsYXkgPDwgQU9OX1JUQ19DVExfRVZfREVMQVlfUyk7CisKKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ1RMKSA9IHVpMzJDZmc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgc291cmNlIG9mIHRoZSBjb21iaW5lZCBldmVudC4KKy8vIQorLy8hIEEgY29tYmluZWQgZGVsYXllZCBldmVudCBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYSBjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUKKy8vISBkZWxheWVkIGV2ZW50cy4gRGVsYXllZCBldmVudHMgZm9ybSB0aGUgc3BlY2lmaWVkIGNoYW5uZWxzIGFyZSBPUidlZAorLy8hIHRvZ2V0aGVyIHRvIGdlbmVyYXRlIHRoZSBjb21iaW5lZCBldmVudC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbHMgc3BlY2lmaWVzIHRoZSBjaGFubmVscyB0aGF0IGFyZSB0byBiZSB1c2VkIGZvcgorLy8hIGdlbmVyYXRpbmcgdGhlIGNvbWJpbmVkIGV2ZW50LgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDAKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDEKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDIKKy8vISAtIFxyZWYgQU9OX1JUQ19DSF9OT05FCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDQ29tYmluZWRFdmVudENvbmZpZyh1aW50MzJfdCB1aTMyQ2hhbm5lbHMpCit7CisgICAgdWludDMyX3QgdWkzMkNmZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggKHVpMzJDaGFubmVscyAmIChBT05fUlRDX0NIMCB8IEFPTl9SVENfQ0gxIHwgQU9OX1JUQ19DSDIpKSB8fAorICAgICAgICAgICAgKHVpMzJDaGFubmVscyA9PSBBT05fUlRDX0NIX05PTkUpICk7CisKKyAgICB1aTMyQ2ZnID0gIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwpOworICAgIHVpMzJDZmcgJj0gfihBT05fUlRDX0NUTF9DT01CX0VWX01BU0tfTSk7CisgICAgdWkzMkNmZyB8PSAodWkzMkNoYW5uZWxzIDw8IEFPTl9SVENfQ1RMX0NPTUJfRVZfTUFTS19TKTsKKworICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DVEwpID0gdWkzMkNmZzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXIgZXZlbnQgZnJvbSBhIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgSW4gY2FzZSBvZiBhbiBhY3RpdmUgZXZlbnQgZnJvbSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwsIHRoZSBldmVudAorLy8hIHdpbGwgYmUgY2xlYXJlZCAoZGUtYXNzZXJ0ZWQpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIGNsZWFycyB0aGUgZXZlbnQgZnJvbSBvbmUgb3IgbW9yZSBSVEMgY2hhbm5lbHM6CisvLyEgLSBccmVmIEFPTl9SVENfQ0gwCisvLyEgLSBccmVmIEFPTl9SVENfQ0gxCisvLyEgLSBccmVmIEFPTl9SVENfQ0gyCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDRXZlbnRDbGVhcih1aW50MzJfdCB1aTMyQ2hhbm5lbCkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDApIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMSkgfHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gyKSk7CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gwKQorICAgIHsKKyAgICAgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0VWRkxBR1MpID0gQU9OX1JUQ19FVkZMQUdTX0NIMDsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gxKQorICAgIHsKKyAgICAgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0VWRkxBR1MpID0gQU9OX1JUQ19FVkZMQUdTX0NIMTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gyKQorICAgIHsKKyAgICAgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0VWRkxBR1MpID0gQU9OX1JUQ19FVkZMQUdTX0NIMjsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBldmVudCBzdGF0dXMgZm9yIGEgc3BlY2lmaWVkIGNoYW5uZWwuCisvLyEKKy8vISBJbiBjYXNlIG9mIGFuIGFjdGl2ZSBldmVudCBmcm9tIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCwKKy8vISB0aGlzIGNhbGwgd2lsbCByZXR1cm4gXGMgdHJ1ZSBvdGhlcndpc2UgXGMgZmFsc2UuCisvLyEKKy8vISBccGFyYW0gdWkzMkNoYW5uZWwgc3BlY2lmaWVzIHRoZSBjaGFubmVsIGZyb20gd2hpY2ggdG8gcXVlcnkgdGhlIGV2ZW50IHN0YXRlLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgKGFuZCBvbmx5IG9uZSkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDAKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDEKKy8vISAtIFxyZWYgQU9OX1JUQ19DSDIKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIGFuIGV2ZW50IGhhcyBvY2N1cnJlZCBmb3IgdGhlIGdpdmVuIGNoYW5uZWwsCisvLyEgb3RoZXJ3aXNlIFxjIGZhbHNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBT05SVENFdmVudEdldCh1aW50MzJfdCB1aTMyQ2hhbm5lbCkKK3sKKyAgICB1aW50MzJfdCB1aW50MzJFdmVudCA9IDA7CisKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDApIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMSkgfHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gyKSk7CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gwKQorICAgIHsKKyAgICAgICAgdWludDMyRXZlbnQgPSBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0VWRkxBR1MsIEFPTl9SVENfRVZGTEFHU19DSDBfQklUTik7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMSkKKyAgICB7CisgICAgICAgIHVpbnQzMkV2ZW50ID0gSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19FVkZMQUdTLCBBT05fUlRDX0VWRkxBR1NfQ0gxX0JJVE4pOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDIpCisgICAgeworICAgICAgICB1aW50MzJFdmVudCA9IEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fRVZGTEFHUywgQU9OX1JUQ19FVkZMQUdTX0NIMl9CSVROKTsKKyAgICB9CisKKyAgICByZXR1cm4odWludDMyRXZlbnQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgaW50ZWdlciBwYXJ0IChzZWNvbmRzKSBvZiBSVEMgZnJlZS1ydW5uaW5nIHRpbWVyLgorLy8hCisvLyEgR2V0IHRoZSB2YWx1ZSBpbiBzZWNvbmRzIG9mIFJUQyBmcmVlLXJ1bm5pbmcgdGltZXIsIGkuZS4gdGhlIGludGVnZXIgcGFydC4KKy8vISBUaGUgZnJhY3Rpb25hbCBwYXJ0IGlzIHJldHVybmVkIGZyb20gYSBjYWxsIHRvIEFPTlJUQ0ZyYWN0aW9uR2V0KCkuCisvLyEKKy8vISBcbm90ZSBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgXHJlZiBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCkgaW5zdGVhZAorLy8hIG9mIHRoaXMgZnVuY3Rpb24gaWYgdGhlIDwxNi4xNj4gZm9ybWF0IGlzIHN1ZmZpY2llbnQuCisvLyEKKy8vISBcbm90ZSBUbyByZWFkIGEgY29uc2lzdGVudCBwYWlyIG9mIGludGVnZXIgYW5kIGZyYWN0aW9uYWwgcGFydHMsCisvLyEgXHJlZiBBT05SVENTZWNHZXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCB0byB0cmlnZ2VyIGxhdGNoaW5nIG9mIHRoZQorLy8hIGZyYWN0aW9uYWwgcGFydCwgd2hpY2ggaXMgdGhlbiByZWFkIGJ5IFxyZWYgQU9OUlRDRnJhY3Rpb25HZXQoKS4gSW50ZXJydXB0cworLy8hIG11c3QgYmUgZGlzYWJsZWQgdG8gZW5zdXJlIHRoYXQgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGF0b21pY2FsbHkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGludGVnZXIgcGFydCBvZiBSVEMgZnJlZSBydW5uaW5nIHRpbWVyLgorLy8hCisvLyEgXHNhIFxyZWYgQU9OUlRDRnJhY3Rpb25HZXQoKSBccmVmIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OUlRDU2VjR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIHJlYWQgZ2V0cyB0aGUgc2Vjb25kcywgYnV0IGFsc28gbGF0Y2hlcyB0aGUgZnJhY3Rpb25hbAorICAgIC8vIHBhcnQuCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NFQykpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgZnJhY3Rpb25hbCBwYXJ0IChzdWItc2Vjb25kcykgb2YgUlRDIGZyZWUtcnVubmluZyB0aW1lci4KKy8vIQorLy8hIEdldCB0aGUgdmFsdWUgb2YgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiBSVEMgZnJlZS1ydW5uaW5nIHRpbWVyLCBpLmUuIHRoZQorLy8hIHN1Yi1zZWNvbmQgcGFydC4KKy8vIQorLy8hIFxub3RlIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBccmVmIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKSBpbnN0ZWFkCisvLyEgb2YgdGhpcyBmdW5jdGlvbiBpZiB0aGUgPDE2LjE2PiBmb3JtYXQgaXMgc3VmZmljaWVudC4KKy8vIQorLy8hIFxub3RlIFRvIHJlYWQgYSBjb25zaXN0ZW50IHBhaXIgb2YgaW50ZWdlciBhbmQgZnJhY3Rpb25hbCBwYXJ0cywKKy8vISBccmVmIEFPTlJUQ1NlY0dldCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0IHRvIHRyaWdnZXIgbGF0Y2hpbmcgb2YgdGhlCisvLyEgZnJhY3Rpb25hbCBwYXJ0LCB3aGljaCBpcyB0aGVuIHJlYWQgYnkgXHJlZiBBT05SVENGcmFjdGlvbkdldCgpLiBJbnRlcnJ1cHRzCisvLyEgbXVzdCBiZSBkaXNhYmxlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYXRvbWljYWxseS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIFJUQyBmcmVlIHJ1bm5pbmcgdGltZXIuCisvLyEKKy8vISBcc2EgXHJlZiBBT05SVENTZWNHZXQoKSBccmVmIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OUlRDRnJhY3Rpb25HZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIE5vdGUxOiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgQU9OIFJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKSBpbnN0ZWFkCisgICAgLy8gICAgICAgIG9mIHRoaXMgZnVuY3Rpb24gaWYgdGhlIDwxNi4xNj4gZm9ybWF0IGlzIHN1ZmZpY2llbnQuCisgICAgLy8gTm90ZTI6IEFPTlJUQ1NlY0dldCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCBhCisgICAgLy8gICAgICAgIGNvbnNpc3RlbnQgcmVhZGluZy4KKyAgICAvLyBOb3RlMzogSW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGJldHdlZW4gdGhlIGNhbGwgdG8gQU9OUlRDU2VjR2V0KCkgYW5kIHRoaXMKKyAgICAvLyAgICAgICAgY2FsbCBzaW5jZSB0aGVyZSBhcmUgaW50ZXJydXB0IGZ1bmN0aW9ucyB0aGF0IHJlYWRzIEFPTl9SVENfT19TRUMKKyAgICAvLworICAgIHJldHVybihIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU1VCU0VDKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgc3ViIHNlY29uZCBpbmNyZW1lbnQgb2YgdGhlIFJUQy4KKy8vIQorLy8hIEdldCB0aGUgdmFsdWUgb2YgdGhlIHN1Yi1zZWNvbmQgaW5jcmVtZW50IHdoaWNoIGlzIGFkZGVkIHRvIHRoZSBSVEMKKy8vISBhYnNvbHV0ZSB0aW1lIG9uIGV2ZXJ5IGNsb2NrIHRpY2suCisvLyEKKy8vISBcbm90ZSBGb3IgYSBwcmVjaXNlIGFuZCB0ZW1wZXJhdHVyZSBpbmRlcGVuZGVudCBMRiBjbG9jayAoZS5nLiBhbiBMRiBYVEFMKQorLy8hIHRoaXMgdmFsdWUgd291bGQgc3RheSB0aGUgc2FtZSBhY3Jvc3MgdGVtcGVyYXR1cmUuIEZvciB0ZW1wZXJhdHVlCisvLyEgZGVwZW5kZW50IGNsb2NrIHNvdXJjZXMgbGlrZSBhbiBSQyBvc2NpbGxhdG9yLCB0aGlzIHZhbHVlIHdpbGwgY2hhbmdlCisvLyEgb3ZlciB0aW1lIGlmIHRoZSBhcHBsaWNhdGlvbiBpbmNsdWRlcyBmdW5jdGlvbmFsaXR5IGZvciBkb2luZyB0ZW1wZXJhdHVyZQorLy8hIGNvbXBlbnNhdGlvbiBvZiB0aGUgUlRDIGNsb2NrIHNvdXJjZS4gVGhlIGRlZmF1bHQgdmFsdWUgY29ycmVzcG9uZHMgdG8gYQorLy8hIExGIGNsb2NrIGZyZXF1ZW5jeSBvZiBleGFjdGx5IDMyLjc2OCBrSHouCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN1Yi1zZWNvbmQgaW5jcmVtZW50IG9mIHRoZSBSVEMgYWRkZWQgdG8gdGhlIG92ZXJhbGwKKy8vISB2YWx1ZSBvbiBldmVyeSBSVEMgY2xvY2sgdGljay4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ1N1YlNlY0luY3JHZXQodm9pZCkKK3sKKyAgICByZXR1cm4oSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NVQlNFQ0lOQykpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDEuCisvLyEKKy8vISBTZXQgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAxLiBJdCBjYW4gYmUgY2FwdHVyZSBvciBjb21wYXJlIG1vZGUuCisvLyEgSW4gY2FwdHVyZSBtb2RlLCBhbiBleHRlcm5hbCBldmVudCBjYXVzZXMgdGhlIHZhbHVlIG9mIHRoZSBmcmVlIHJ1bm5pbmcKKy8vISBjb3VudGVyIHRvIGJlIHN0b3JlZCwgdG8gcmVtZW1iZXIgdGhlIHRpbWUgb2YgdGhlIGV2ZW50LgorLy8hCisvLyEgXG5vdGUgVGhlIGRlZmF1bHQgbW9kZSBpcyBjb21wYXJlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJNb2RlIHNwZWNpZmllcyB0aGUgbW9kZSBmb3IgY2hhbm5lbCAxLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgQU9OX1JUQ19NT0RFX0NIMV9DQVBUVVJFCisvLyEgLSBccmVmIEFPTl9SVENfTU9ERV9DSDFfQ09NUEFSRQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISAgXHNhIEFPTlJUQ01vZGVDaDFHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05SVENNb2RlQ2gxU2V0KHVpbnQzMl90IHVpMzJNb2RlKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBBT05fUlRDX01PREVfQ0gxX0NBUFRVUkUpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBBT05fUlRDX01PREVfQ0gxX0NPTVBBUkUpKTsKKworICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gxX0NBUFRfRU5fQklUTikgPSB1aTMyTW9kZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAxLgorLy8hCisvLyEgR2V0IHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIGNoYW5uZWwgMS4gSXQgY2FuIGJlIGNhcHR1cmUgb3IgY29tcGFyZSBtb2RlLgorLy8hIEluIGNhcHR1cmUgbW9kZSwgYW4gZXh0ZXJuYWwgZXZlbnQgY2F1c2VzIHRoZSB2YWx1ZSBvZiB0aGUgZnJlZSBydW5uaW5nCisvLyEgY291bnRlciB0byBiZSBzdG9yZWQsIHRvIHJlbWVtYmVyIHRoZSB0aW1lIG9mIHRoZSBldmVudC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDEsIG9uZSBvZjoKKy8vISAtIFxyZWYgQU9OX1JUQ19NT0RFX0NIMV9DQVBUVVJFCisvLyEgLSBccmVmIEFPTl9SVENfTU9ERV9DSDFfQ09NUEFSRQorLy8hCisvLyEgXHNhIEFPTlJUQ01vZGVDaDFTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OUlRDTW9kZUNoMUdldCh2b2lkKQoreworICAgIHJldHVybihIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMV9DQVBUX0VOX0JJVE4pKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IG9wZXJhdGlvbmFsIG1vZGUgb2YgY2hhbm5lbCAyLgorLy8hCisvLyEgU2V0IHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIGNoYW5uZWwgMi4gSXQgY2FuIGJlIGluIGNvbnRpbnVvdXMgY29tcGFyZQorLy8hIG1vZGUgb3Igbm9ybWFsIGNvbXBhcmUgbW9kZS4KKy8vISBJbiBjb250aW51b3VzIG1vZGUsIGEgdmFsdWUgaXMgYXV0b21hdGljYWxseSBpbmNyZW1lbnRlZCB0byB0aGUgY2hhbm5lbCAyCisvLyEgY29tcGFyZSByZWdpc3RlciwgdXBvbiBhIGNoYW5uZWwgMiBjb21wYXJlIGV2ZW50LiBUaGlzIGFsbG93cyBjaGFubmVsIDIgdG8KKy8vISBnZW5lcmF0ZSBhIHNlcmllcyBvZiBjb21wbGV0ZWx5IGVxdWlkaXN0YW50IGV2ZW50cy4KKy8vISBUaGUgaW5jcmVtZW50IHZhbHVlIGlzIHNldCBieSB0aGUgQU9OUlRDSW5jVmFsdWVDaDJTZXQoKSBjYWxsLgorLy8hCisvLyEgXG5vdGUgVGhlIGRlZmF1bHQgbW9kZSBpcyBub3JtYWwgY29tcGFyZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTW9kZSBzcGVjaWZpZXMgdGhlIG1vZGUgZm9yIGNoYW5uZWwgMi4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEFPTl9SVENfTU9ERV9DSDJfQ09OVElOVU9VUworLy8hIC0gXHJlZiBBT05fUlRDX01PREVfQ0gyX05PUk1BTENPTVBBUkUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFPTlJUQ0luY1ZhbHVlQ2gyU2V0KCksIEFPTlJUQ0luY1ZhbHVlQ2gyR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDTW9kZUNoMlNldCh1aW50MzJfdCB1aTMyTW9kZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMk1vZGUgPT0gQU9OX1JUQ19NT0RFX0NIMl9DT05USU5VT1VTKSB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gQU9OX1JUQ19NT0RFX0NIMl9OT1JNQUxDT01QQVJFKSk7CisKKyAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMl9DT05UX0VOX0JJVE4pID0gdWkzMk1vZGU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBvcGVyYXRpb25hbCBtb2RlIG9mIGNoYW5uZWwgMi4KKy8vIQorLy8hIEdldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDIuIEl0IGNhbiBiZSBpbiBjb250aW51b3VzIGNvbXBhcmUKKy8vISBtb2RlIG9yIG5vcm1hbCBjb21wYXJlIG1vZGUuCisvLyEgSW4gY29udGludW91cyBtb2RlLCBhIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50ZWQgdG8gdGhlIGNoYW5uZWwgMgorLy8hIGNvbXBhcmUgcmVnaXN0ZXIsIHVwb24gYSBjaGFubmVsIDIgY29tcGFyZSBldmVudC4gVGhpcyBhbGxvd3MgY2hhbm5lbCAyIHRvCisvLyEgZ2VuZXJhdGUgYSBzZXJpZXMgb2YgY29tcGxldGVseSBlcXVpZGlzdGFudCBldmVudHMuCisvLyEgVGhlIGluY3JlbWVudCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEFPTlJUQ0luY1ZhbHVlQ2gyU2V0KCkgY2FsbC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiBjaGFubmVsIDIsIGkuZS4gb25lIG9mOgorLy8hIC0gXHJlZiBBT05fUlRDX01PREVfQ0gyX0NPTlRJTlVPVVMKKy8vISAtIFxyZWYgQU9OX1JUQ19NT0RFX0NIMl9OT1JNQUxDT01QQVJFCisvLyEKKy8vISBcc2EgQU9OUlRDSW5jVmFsdWVDaDJTZXQoKSwgQU9OUlRDSW5jVmFsdWVDaDJHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OUlRDTW9kZUNoMkdldCh2b2lkKQoreworICAgIHJldHVybihIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMl9DT05UX0VOX0JJVE4pKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIGV2ZW50IG9wZXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgRW5hYmxlIHRoZSBldmVudCBnZW5lcmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCisvLyEKKy8vISBcbm90ZSBUaGUgUlRDIGZyZWUgcnVubmluZyBjbG9jayAgbXVzdCBhbHNvIGJlIGVuYWJsZWQgZ2xvYmFsbHkgdXNpbmcgdGhlCisvLyEgQU9OUlRDRW5hYmxlKCkgY2FsbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbCBzcGVjaWZpZXMgb25lIG9yIG1vcmUgY2hhbm5lbHMgdG8gZW5hYmxlOgorLy8hIC0gXHJlZiBBT05fUlRDX0NIMAorLy8hIC0gXHJlZiBBT05fUlRDX0NIMQorLy8hIC0gXHJlZiBBT05fUlRDX0NIMgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OUlRDRW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDQ2hhbm5lbEVuYWJsZSh1aW50MzJfdCB1aTMyQ2hhbm5lbCkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDApIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMSkgfHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gyKSk7CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gwKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDBfRU5fQklUTikgPSAxOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDEpCisgICAgeworICAgICAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMV9FTl9CSVROKSA9IDE7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMikKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gyX0VOX0JJVE4pID0gMTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgZXZlbnQgb3BlcmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCisvLyEKKy8vISBEaXNhYmxlIHRoZSBldmVudCBnZW5lcmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCisvLyEKKy8vISBcbm90ZSBUaGUgUlRDIGZyZWUgcnVubmluZyBjbG9jayAgY2FuIGFsc28gYmUgZGlzYWJsZWQgZ2xvYmFsbHkgdXNpbmcgdGhlCisvLyEgQU9OUlRDRGlzYWJsZSgpIGNhbGwuCisvLyEKKy8vISBccGFyYW0gdWkzMkNoYW5uZWwgc3BlY2lmaWVzIG9uZSBvciBtb3JlIGNoYW5uZWxzIHRvIGRpc2FibGU6CisvLyEgLSBccmVmIEFPTl9SVENfQ0gwCisvLyEgLSBccmVmIEFPTl9SVENfQ0gxCisvLyEgLSBccmVmIEFPTl9SVENfQ0gyCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05SVENEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OUlRDQ2hhbm5lbERpc2FibGUodWludDMyX3QgdWkzMkNoYW5uZWwpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gwKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDEpIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMikpOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0hDVEwsIEFPTl9SVENfQ0hDVExfQ0gwX0VOX0JJVE4pID0gMDsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gxKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSENUTCwgQU9OX1JUQ19DSENUTF9DSDFfRU5fQklUTikgPSAwOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDIpCisgICAgeworICAgICAgICBIV1JFR0JJVFcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIQ1RMLCBBT05fUlRDX0NIQ1RMX0NIMl9FTl9CSVROKSA9IDA7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIGNvbXBhcmUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjaGFubmVsLgorLy8hCisvLyEgU2V0IGNvbXBhcmUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KKy8vIQorLy8hIFRoZSBmb3JtYXQgb2YgdGhlIGNvbXBhcmUgdmFsdWUgaXMgYSAxNiBiaXQgaW50ZWdlciBhbmQgMTYgYml0IGZyYWN0aW9uYWwKKy8vISBmb3JtYXQgPDE2IHNlYy4xNiBzdWJzZWM+LiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIKKy8vISBjYW4gYmUgcmV0cmlldmVkIGluIGEgZm9ybWF0IGNvbXBhdGlibGUgdG8gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgdXNpbmcKKy8vISBccmVmIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKQorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIHNwZWNpZmllcyBvbmUgb3IgbW9yZSBjaGFubmVscyB0byBzZXQgY29tcGFyZSB2YWx1ZSBmb3I6CisvLyEgLSBccmVmIEFPTl9SVENfQ0gwCisvLyEgLSBccmVmIEFPTl9SVENfQ0gxCisvLyEgLSBccmVmIEFPTl9SVENfQ0gyCisvLyEgXHBhcmFtIHVpMzJDb21wVmFsdWUgaXMgdGhlIGNvbXBhcmUgdmFsdWUgdG8gc2V0IGZvciB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCisvLyEgLSBGb3JtYXQ6IDwxNiBzZWMuMTYgc3Vic2VjPgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0NvbXBhcmVWYWx1ZVNldCh1aW50MzJfdCB1aTMyQ2hhbm5lbCwgdWludDMyX3QgdWkzMkNvbXBWYWx1ZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDApIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMSkgfHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gyKSk7CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gwKQorICAgIHsKKyAgICAgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIMENNUCkgPSB1aTMyQ29tcFZhbHVlOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDEpCisgICAgeworICAgICAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gxQ01QKSA9IHVpMzJDb21wVmFsdWU7CisgICAgfQorCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMikKKyAgICB7CisgICAgICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSDJDTVApID0gdWkzMkNvbXBWYWx1ZTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY29tcGFyZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNoYW5uZWwuCisvLyEKKy8vISBHZXQgY29tcGFyZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIHNwZWNpZmllcyBhIGNoYW5uZWwuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIG9uZSAoYW5kIG9ubHkgb25lKSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBBT05fUlRDX0NIMAorLy8hIC0gXHJlZiBBT05fUlRDX0NIMQorLy8hIC0gXHJlZiBBT05fUlRDX0NIMgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdG9yZWQgY29tcGFyZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNoYW5uZWwuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05SVENDb21wYXJlVmFsdWVHZXQodWludDMyX3QgdWkzMkNoYW5uZWwpCit7CisgICAgdWludDMyX3QgdWkzMlZhbHVlID0gMDsKKworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMKKyAgICBBU1NFUlQoKHVpMzJDaGFubmVsID09IEFPTl9SVENfQ0gwKSB8fAorICAgICAgICAgICAodWkzMkNoYW5uZWwgPT0gQU9OX1JUQ19DSDEpIHx8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbCA9PSBBT05fUlRDX0NIMikpOworCisgICAgaWYodWkzMkNoYW5uZWwgJiBBT05fUlRDX0NIMCkKKyAgICB7CisgICAgICAgIHVpMzJWYWx1ZSA9IEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSDBDTVApOworICAgIH0KKworICAgIGlmKHVpMzJDaGFubmVsICYgQU9OX1JUQ19DSDEpCisgICAgeworICAgICAgICB1aTMyVmFsdWUgPSBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gxQ01QKTsKKyAgICB9CisKKyAgICBpZih1aTMyQ2hhbm5lbCAmIEFPTl9SVENfQ0gyKQorICAgIHsKKyAgICAgICAgdWkzMlZhbHVlID0gSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX0NIMkNNUCk7CisgICAgfQorCisgICAgcmV0dXJuKHVpMzJWYWx1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIgaW4gYSBmb3JtYXQgdGhhdCBtYXRjaGVzCisvLyEgUlRDIGNvbXBhcmUgdmFsdWVzLgorLy8hCisvLyEgVGhlIGNvbXBhcmUgdmFsdWUgcmVnaXN0ZXJzIGNvbnRhaW5zIDE2IGludGVnZXIgYW5kIDE2IGZyYWN0aW9uYWwgYml0cy4KKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBSVEMgY291bnRlciBpbiBhbgorLy8hIGlkZW50aWNhbCBmb3JtYXQuCisvLyEKKy8vISBcbm90ZSBSZWFkaW5nIFNFQyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgU1VCU0VDIGluIG9yZGVyIHRvIGRldGVjdCBpZiBTRUMKKy8vISBpbmNyZW1lbnRlZCB3aGlsZSByZWFkaW5nIFNVQlNFQy4gSWYgU0VDIGluY3JlbWVudGVkLCB3ZSBjYW4ndCBiZSBzdXJlCisvLyEgd2hpY2ggU0VDIHRoZSBTVUJTRUMgYmVsb25ncyB0bywgc28gcmVwZWF0aW5nIHRoZSBzZXF1ZW5jZSB0aGVuLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBSVEMgY291bnRlciBpbiBhIDwxNi4xNj4gZm9ybWF0CisvLyEgKFNFQ1sxNTowXS5TVUJTRUNbMzE6MTZdKS4KKy8vIQorLy8hIFxzYSBccmVmIEFPTlJUQ0NvbXBhcmVWYWx1ZVNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCA2NC1iaXQgdmFsdWUgb2YgdGhlIFJUQyBjb3VudGVyLgorLy8hCisvLyEgXG5vdGUgUmVhZGluZyBTRUMgYm90aCBiZWZvcmUgYW5kIGFmdGVyIFNVQlNFQyBpbiBvcmRlciB0byBkZXRlY3QgaWYgU0VDCisvLyEgaW5jcmVtZW50ZWQgd2hpbGUgcmVhZGluZyBTVUJTRUMuIElmIFNFQyBpbmNyZW1lbnRlZCwgd2UgY2FuJ3QgYmUgc3VyZQorLy8hIHdoaWNoIFNFQyB0aGUgU1VCU0VDIGJlbG9uZ3MgdG8sIHNvIHJlcGVhdGluZyB0aGUgc2VxdWVuY2UgdGhlbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUlRDIGNvdW50ZXIgaW4gYSA2NC1iaXRzIGZvcm1hdAorLy8hIChTRUNbMzE6MF0uU1VCU0VDWzMxOjBdKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDY0X3QgQU9OUlRDQ3VycmVudDY0Qml0VmFsdWVHZXQodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgY2hhbm5lbCAyIGluY3JlbWVudCB2YWx1ZSB3aGVuIG9wZXJhdGluZyBpbiBjb250aW51b3VzIG1vZGUuCisvLyEKKy8vISBTZXQgdGhlIGNoYW5uZWwgMiBpbmNyZW1lbnQgdmFsdWUgd2hlbiBvcGVyYXRpbmcgaW4gY29udGludW91cyBtb2RlLgorLy8hIFRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYXV0b21hdGljYWxseSBpbmNyZW1lbnRlZCB0byB0aGUgY2hhbm5lbCAyIGNvbXBhcmUKKy8vISByZWdpc3RlciwgdXBvbiBhIGNoYW5uZWwgMiBjb21wYXJlIGV2ZW50LiBUaGlzIGFsbG93cyBjaGFubmVsIDIgdG8gZ2VuZXJhdGUKKy8vISBhIHNlcmllcyBvZiBjb21wbGV0ZWx5IGVxdWlkaXN0YW50IGV2ZW50cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW5jVmFsdWUgaXMgdGhlIGluY3JlbWVudCB2YWx1ZSB3aGVuIG9wZXJhdGluZyBpbiBjb250aW51b3VzIG1vZGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBT05SVENJbmNWYWx1ZUNoMkdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTlJUQ0luY1ZhbHVlQ2gyU2V0KHVpbnQzMl90IHVpMzJJbmNWYWx1ZSkKK3sKKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fQ0gyQ01QSU5DKSA9IHVpMzJJbmNWYWx1ZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjaGFubmVsMiBpbmNyZW1lbnQgdmFsdWUgd2hlbiBvcGVyYXRpbmcgaW4gY29udGludW91cyBtb2RlLgorLy8hCisvLyEgR2V0IHRoZSBjaGFubmVsIDIgaW5jcmVtZW50IHZhbHVlLCB3aGVuIGNoYW5uZWwgMiBpcyBvcGVyYXRpbmcgaW4KKy8vISBjb250aW51b3VzIG1vZGUuCisvLyEgVGhpcyB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGluY3JlbWVudGVkIHRvIHRoZSBjaGFubmVsIDIgY29tcGFyZQorLy8hIHJlZ2lzdGVyLCB1cG9uIGEgY2hhbm5lbCAyIGNvbXBhcmUgZXZlbnQuIFRoaXMgYWxsb3dzIGNoYW5uZWwgMiB0bworLy8hIGdlbmVyYXRlIGEgc2VyaWVzIG9mIGNvbXBsZXRlbHkgZXF1aWRpc3RhbnQgZXZlbnRzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjaGFubmVsIDIgaW5jcmVtZW50IHZhbHVlIHdoZW4gb3BlcmF0aW5nIGluIGNvbnRpbnVvdXMKKy8vISBtb2RlLgorLy8hCisvLyEgXHNhIEFPTlJUQ0luY1ZhbHVlQ2gyU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTlJUQ0luY1ZhbHVlQ2gyR2V0KHZvaWQpCit7CisgICAgcmV0dXJuKEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSDJDTVBJTkMpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjaGFubmVsIDEgY2FwdHVyZSB2YWx1ZS4KKy8vIQorLy8hIEdldCB0aGUgY2hhbm5lbCAxIGNhcHR1cmUgdmFsdWUuCisvLyEgVGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZQorLy8hIGludGVnZXIgcGFydCBvZiB0aGUgUlRDIHRpbWVyLiBUaGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgcmV0dXJuZWQgcGFydAorLy8hIGlzIHRoZSB1cHBlciAxNiBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGNoYW5uZWwgMSBjYXB0dXJlIHZhbHVlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQU9OUlRDQ2FwdHVyZVZhbHVlQ2gxR2V0KHZvaWQpCit7CisgICAgcmV0dXJuKEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19DSDFDQVBUKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0FPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQKKyAgICAgICAgI3VuZGVmICBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0CisgICAgICAgICNkZWZpbmUgQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCAgICBST01fQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQU9OUlRDQ3VycmVudDY0Qml0VmFsdWVHZXQKKyAgICAgICAgI3VuZGVmICBBT05SVENDdXJyZW50NjRCaXRWYWx1ZUdldAorICAgICAgICAjZGVmaW5lIEFPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0ICAgICAgUk9NX0FPTlJUQ0N1cnJlbnQ2NEJpdFZhbHVlR2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19BT05fUlRDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fcnRjX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Y19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNiYzZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3J0Y19kb2MuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX3J0Y19kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgYW9ucnRjX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2FvbnJ0YyBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFxub3RlIElmIHVzaW5nIFRJLVJUT1MgdGhlbiBvbmx5IFRJLVJUT1MgaXMgYWxsb3dlZCB0byBjb25maWd1cmUgdGhlIFJUQyB0aW1lciEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3d1Yy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3d1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZmUyOWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hb25fd3VjLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fd3VjLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTA0IDE2OjQ5OjM4ICswMTAwIChGcmksIDA0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1ODc0CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQU9OIFdha2UtVXAgQ29udHJvbGxlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYW9uX3d1Yy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQU9OV1VDQXV4UmVzZXQKKyAgICAjZGVmaW5lIEFPTldVQ0F1eFJlc2V0ICAgICAgICAgICAgICAgICAgTk9ST01fQU9OV1VDQXV4UmVzZXQKKyAgICAjdW5kZWYgIEFPTldVQ1JlY2hhcmdlQ3RybENvbmZpZ1NldAorICAgICNkZWZpbmUgQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0ICAgICBOT1JPTV9BT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQKKyAgICAjdW5kZWYgIEFPTldVQ09zY0NvbmZpZworICAgICNkZWZpbmUgQU9OV1VDT3NjQ29uZmlnICAgICAgICAgICAgICAgICBOT1JPTV9BT05XVUNPc2NDb25maWcKKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUmVzZXQgdGhlIEFVWCBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBT05XVUNBdXhSZXNldCh2b2lkKQoreworICAgIC8vIFJlc2V0IHRoZSBBVVggZG9tYWluLgorLy8gIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDVEwpIHw9IEFPTl9XVUNfQVVYQ1RMX1JFU0VUX1JFUTsgIC8vIFJPTSB2ZXJzaW9uCisgICAgSFdSRUdCSVRXKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDVEwsIEFPTl9XVUNfQVVYQ1RMX1JFU0VUX1JFUV9CSVROKSA9IDE7CisKKyAgICAvLyBXYWl0IGZvciBBT04gaW50ZXJmYWNlIHRvIGJlIGluIHN5bmMuCisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NZTkMpOworCisgICAgLy8gRGUtYXNzZXJ0IHJlc2V0IG9uIHRoZSBBVVggZG9tYWluLgorLy8gIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDVEwpICY9IH5BT05fV1VDX0FVWENUTF9SRVNFVF9SRVE7ICAvLyBST00gdmVyc2lvbgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ1RMLCBBT05fV1VDX0FVWENUTF9SRVNFVF9SRVFfQklUTikgPSAwOworCisgICAgLy8gV2FpdCBmb3IgQU9OIGludGVyZmFjZSB0byBiZSBpbiBzeW5jLgorICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TWU5DKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmUgdGhlIHJlY2hhcmdlIGNvbnRyb2xsZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQoYm9vbCBiQWRhcHRFbmFibGUsIHVpbnQzMl90IHVpMzJBZGFwdFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlBlcmlvZCwgdWludDMyX3QgdWkzMk1heFBlcmlvZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyU2hpZnQ7CisgICAgdWludDMyX3QgdWkzMkMxOworICAgIHVpbnQzMl90IHVpMzJDMjsKKyAgICB1aW50MzJfdCB1aTMyUmVnOworICAgIHVpbnQzMl90IHVpMzJFeHBvbmVudDsKKyAgICB1aW50MzJfdCB1aTMyTWF4RXhwb25lbnQ7CisgICAgdWludDMyX3QgdWkzMk1hbnRpc3NhOworICAgIHVpbnQzMl90IHVpMzJNYXhNYW50aXNzYTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkFkYXB0UmF0ZSA+PSBSQ19SQVRFX01JTikgfHwKKyAgICAgICAgICAgKHVpMzJBZGFwdFJhdGUgPD0gUkNfUkFURV9NQVgpKTsKKworICAgIHVpMzJDMSA9IDA7CisgICAgdWkzMkMyID0gMDsKKyAgICB1aTMyU2hpZnQgPSA5OworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcHJldmlvdXMgdmFsdWVzLgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRUNGRyk7CisgICAgdWkzMlJlZyAmPSB+KEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX00gfCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfRV9NIHwKKyAgICAgICAgICAgICAgICAgQU9OX1dVQ19SRUNIQVJHRUNGR19BREFQVElWRV9FTl9NIHwgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfTV9NIHwKKyAgICAgICAgICAgICAgICAgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfRV9NIHwgQU9OX1dVQ19SRUNIQVJHRUNGR19DMV9NIHwKKyAgICAgICAgICAgICAgICAgQU9OX1dVQ19SRUNIQVJHRUNGR19DMl9NKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIHJlY2hhcmdlIGNvbnRyb2xsZXIgYWRhcHRhdGlvbiBhbGdvcml0aG0gc2hvdWxkIGJlIGFjdGl2ZS4KKyAgICAvLworICAgIGlmKGJBZGFwdEVuYWJsZSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIENhbGN1bGF0ZSBhZGFwdGF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgIC8vCisgICAgICAgIHdoaWxlKHVpMzJBZGFwdFJhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHVpMzJBZGFwdFJhdGUgJiAoMSA8PCB1aTMyU2hpZnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCF1aTMyQzEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1aTMyQzEgPSB1aTMyU2hpZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoIXVpMzJDMikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCgyICogdWkzMkFkYXB0UmF0ZSkgPiAoKHVpbnQzMl90KSgzIDw8IHVpMzJTaGlmdCkpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1aTMyQzIgPSB1aTMyU2hpZnQgKyAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdWkzMkMyID0gdWkzMlNoaWZ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1aTMyQWRhcHRSYXRlICY9IH4oMSA8PCB1aTMyU2hpZnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWkzMlNoaWZ0LS07CisgICAgICAgIH0KKyAgICAgICAgaWYoIXVpMzJDMikKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMkMyID0gdWkzMkMxID0gdWkzMkMxIC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHVpMzJDMSA9IDEwIC0gdWkzMkMxOworICAgICAgICB1aTMyQzIgPSAxMCAtIHVpMzJDMjsKKworICAgICAgICAvLworICAgICAgICAvLyBVcGRhdGUgdGhlIHJlY2hhcmdlIHJhdGUgcGFyYW1ldGVycy4KKyAgICAgICAgLy8KKyAgICAgICAgdWkzMlJlZyAmPSB+KEFPTl9XVUNfUkVDSEFSR0VDRkdfQzFfTSB8IEFPTl9XVUNfUkVDSEFSR0VDRkdfQzJfTSk7CisgICAgICAgIHVpMzJSZWcgfD0gKHVpMzJDMSA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MxX1MpIHwKKyAgICAgICAgICAgICAgICAgICAodWkzMkMyIDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfQzJfUykgfAorICAgICAgICAgICAgICAgICAgIEFPTl9XVUNfUkVDSEFSR0VDRkdfQURBUFRJVkVfRU5fTTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJlc29sdmUgdGhlIHBlcmlvZCBpbnRvIGFuIGV4cG9uZW50IGFuZCBtYW50aXNzYS4KKyAgICAvLworICAgIHVpMzJQZXJpb2QgPSAodWkzMlBlcmlvZCA+PiA0KTsKKyAgICB1aTMyRXhwb25lbnQgPSAwOworICAgIHdoaWxlKHVpMzJQZXJpb2QgPiAoQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfTV9NID4+IEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fUykpCisgICAgeworICAgICAgICB1aTMyUGVyaW9kID4+PSAxOworICAgICAgICB1aTMyRXhwb25lbnQrKzsKKyAgICB9CisgICAgdWkzMk1hbnRpc3NhID0gdWkzMlBlcmlvZDsKKworICAgIC8vCisgICAgLy8gUmVzb2x2ZSB0aGUgbWF4IHBlcmlvZCBpbnRvIGFuIGV4cG9uZW50IGFuZCBtYW50aXNzYS4KKyAgICAvLworICAgIHVpMzJNYXhQZXJpb2QgPSAodWkzMk1heFBlcmlvZCA+PiA0KTsKKyAgICB1aTMyTWF4RXhwb25lbnQgPSAwOworICAgIHdoaWxlKHVpMzJNYXhQZXJpb2QgPiAoQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX01fTSA+PiBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9TKSkKKyAgICB7CisgICAgICAgIHVpMzJNYXhQZXJpb2QgPj49IDE7CisgICAgICAgIHVpMzJNYXhFeHBvbmVudCsrOworICAgIH0KKyAgICB1aTMyTWF4TWFudGlzc2EgPSB1aTMyTWF4UGVyaW9kOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIGNvbnRyb2xsZXIuCisgICAgLy8KKyAgICB1aTMyUmVnIHw9ICgodWkzMk1heE1hbnRpc3NhIDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX1MpIHwKKyAgICAgICAgICAgICAgICAodWkzMk1heEV4cG9uZW50IDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9FX1MpIHwKKyAgICAgICAgICAgICAgICAodWkzMk1hbnRpc3NhIDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fUykgfAorICAgICAgICAgICAgICAgICh1aTMyRXhwb25lbnQgPDwgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfRV9TKSk7CisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHKSA9IHVpMzJSZWc7CisKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmUgdGhlIGludGVydmFsIGZvciBvc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FPTldVQ09zY0NvbmZpZyh1aW50MzJfdCB1aTMyUGVyaW9kKQoreworICAgIHVpbnQzMl90IHVpMzJNYW50aXNzYTsKKyAgICB1aW50MzJfdCB1aTMyRXhwb25lbnQ7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gUmVzb2x2ZSB0aGUgcGVyaW9kIGludG8gYSBleHBvbmVudCBhbmQgbWFudGlzc2EuCisgICAgLy8KKyAgICB1aTMyUGVyaW9kID0gKHVpMzJQZXJpb2QgPj4gNCk7CisgICAgdWkzMkV4cG9uZW50ID0gMDsKKyAgICB3aGlsZSh1aTMyUGVyaW9kID4gKEFPTl9XVUNfT1NDQ0ZHX1BFUl9NX00gPj4gQU9OX1dVQ19PU0NDRkdfUEVSX01fUykpCisgICAgeworICAgICAgICB1aTMyUGVyaW9kID4+PSAxOworICAgICAgICB1aTMyRXhwb25lbnQrKzsKKyAgICB9CisgICAgdWkzMk1hbnRpc3NhID0gdWkzMlBlcmlvZDsKKworICAgIC8vCisgICAgLy8gVXBkYXRlIHRoZSBwZXJpb2QgZm9yIHRoZSBvc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19PU0NDRkcpID0KKyAgICAgICAgKHVpMzJNYW50aXNzYSA8PCBBT05fV1VDX09TQ0NGR19QRVJfTV9TKSB8CisgICAgICAgICh1aTMyRXhwb25lbnQgPDwgQU9OX1dVQ19PU0NDRkdfUEVSX0VfUyk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgbWF4aW11bSByZWNoYXJnZSBwZXJpb2QgZXF1YWwgdG8gdGhlIG9zY2lsbGF0b3IgYW1wbGl0dWRlCisgICAgLy8gY2FsaWJyYXRpb24gcGVyaW9kLgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRUNGRyk7CisgICAgdWkzMlJlZyAmPSB+KEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX00gfCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfRV9NKTsKKyAgICB1aTMyUmVnIHw9ICgodWkzMk1hbnRpc3NhIDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX1MpIHwKKyAgICAgICAgICAgICAgICAodWkzMkV4cG9uZW50IDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9FX1MpKTsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fUkVDSEFSR0VDRkcpID0gdWkzMlJlZzsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl93dWMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Fvbl93dWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFkODljCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYW9uX3d1Yy5oCkBAIC0wLDAgKzEsODY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYW9uX3d1Yy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0wNCAxNjo0OTozOCArMDEwMCAoRnJpLCAwNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTg3NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBT04gV2FrZS1VcCBDb250cm9sbGVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGFvbl9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYW9ud3VjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQU9OX1dVQ19IX18KKyNkZWZpbmUgX19BT05fV1VDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3J0Yy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQU9OV1VDQXV4UmVzZXQgICAgICAgICAgICAgICAgICBOT1JPTV9BT05XVUNBdXhSZXNldAorICAgICNkZWZpbmUgQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0ICAgICBOT1JPTV9BT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQKKyAgICAjZGVmaW5lIEFPTldVQ09zY0NvbmZpZyAgICAgICAgICAgICAgICAgTk9ST01fQU9OV1VDT3NjQ29uZmlnCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhlIHBvc3NpYmxlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIE1DVSBhbmQgQVVYIGRvbWFpbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTldVQ19DTE9DS19TUkNfSEYgICAgIDB4MDAwMDAwMDMgIC8vIFN5c3RlbSBjbG9jayBoaWdoIGZyZXF1ZW5jeSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQ4IE1Iei4KKyNkZWZpbmUgQU9OV1VDX0NMT0NLX1NSQ19MRiAgICAgMHgwMDAwMDAwMSAgLy8gU3lzdGVtIGNsb2NrIGxvdyBmcmVxdWVuY3kgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzMiBrSHouCisjZGVmaW5lIEFPTldVQ19OT19DTE9DSyAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFN5c3RlbSBjbG9jayBsb3cgZnJlcXVlbmN5IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzIga0h6LgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB0aGUgcG9zc2libGUgY2xvY2sgZGl2aXNpb24gZmFjdG9ycyBmb3IgdGhlIEFVWCBkb21haW4uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfQ0xPQ0tfRElWXzIgICAgICAgICAoIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjIgICApCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfNCAgICAgICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWNCAgICkKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl84ICAgICAgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVY4ICAgKQorI2RlZmluZSBBVVhfQ0xPQ0tfRElWXzE2ICAgICAgICAoIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjE2ICApCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfMzIgICAgICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWMzIgICkKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl82NCAgICAgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVY2NCAgKQorI2RlZmluZSBBVVhfQ0xPQ0tfRElWXzEyOCAgICAgICAoIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjEyOCApCisjZGVmaW5lIEFVWF9DTE9DS19ESVZfMjU2ICAgICAgICggQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWMjU2ICkKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl9VTlVTRUQgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9NICsgKCAxIDw8IEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX1MgKSkKKyNkZWZpbmUgQVVYX0NMT0NLX0RJVl9NICAgICAgICAgKCBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9NICkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIHBvd2VyLW9mZiBhbmQgd2FrZSB1cCBwcm9jZWR1cmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBNQ1VfVklSVF9QV09GRl9ESVNBQkxFICAweDAwMDAwMDAwCisjZGVmaW5lIE1DVV9WSVJUX1BXT0ZGX0VOQUJMRSAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgTUNVX0lNTV9XQUtFX1VQICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBNQ1VfRklYRURfV0FLRV9VUCAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFVWF9WSVJUX1BXT0ZGX0RJU0FCTEUgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQVVYX1ZJUlRfUFdPRkZfRU5BQkxFICAgMHgwMDAyMDAwMAorI2RlZmluZSBBVVhfSU1NX1dBS0VfVVAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEFVWF9GSVhFRF9XQUtFX1VQICAgICAgIDB4MDAwMTAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhhdCBjYW4gYmUgYmUgdXNlZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgZW50aXJlIFNSQU0gYW5kIHRoZQorLy8gcmV0ZW50aW9uIG9uIHRoZSBTUkFNIGluIGJvdGggdGhlIE1DVSBhbmQgdGhlIEFVWCBkb21haW4uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBNQ1VfUkFNMF9SRVRFTlRJT04gICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1DVV9SQU0xX1JFVEVOVElPTiAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUNVX1JBTTJfUkVURU5USU9OICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNQ1VfUkFNM19SRVRFTlRJT04gICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1DVV9SQU1fQkxPQ0tfUkVURU5USU9OIDB4MDAwMDAwMEYKKyNkZWZpbmUgTUNVX0FVWF9SRVRfRU5BQkxFICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgZGlmZmVyZW50IHdha2UgdXAgbW9kZXMgZm9yIEFVWCBkb21haW4gd2hpY2ggY2FuIGJlIHNldCB1c2luZworLy8gQU9OV1VDQXV4V2FrZVVwRXZlbnQoKSAuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05XVUNfQVVYX1dBS0VVUCAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTldVQ19BVVhfQUxMT1dfU0xFRVAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IHBvd2VyIG1vZGVzIGF2YWlsYWJsZSB0aHJvdWdoCisvLyBBT05XVUNQb3dlclN0YXR1c0dldCgpIC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTldVQ19PU0NfR0JJQVNfUkVRICAgIDB4MDA0MDAwMDAgIC8vIE9TQyBpcyByZXF1ZXN0aW5nIEdCaWFzCisjZGVmaW5lIEFPTldVQ19BVVhfR0JJQVNfUkVRICAgIDB4MDAyMDAwMDAgIC8vIEFVWCBpcyByZXF1ZXN0aW5nIEdCaWFzCisjZGVmaW5lIEFPTldVQ19NQ1VfR0JJQVNfUkVRICAgIDB4MDAxMDAwMDAgIC8vIE1DVSBpcyByZXF1ZXN0aW5nIEdCaWFzCisjZGVmaW5lIEFPTldVQ19PU0NfQkdBUF9SRVEgICAgIDB4MDAwNDAwMDAgIC8vIE9TQyBpcyByZXF1ZXN0aW5nIEJHYXAKKyNkZWZpbmUgQU9OV1VDX0FVWF9CR0FQX1JFUSAgICAgMHgwMDAyMDAwMCAgLy8gQVVYIGlzIHJlcXVlc3RpbmcgQkdhcAorI2RlZmluZSBBT05XVUNfTUNVX0JHQVBfUkVRICAgICAweDAwMDEwMDAwICAvLyBNQ1UgaXMgcmVxdWVzdGluZyBCR2FwCisjZGVmaW5lIEFPTldVQ19HQklBU19PTiAgICAgICAgIDB4MDAwMDIwMDAgIC8vIEdsb2JhbCBCaWFzIGlzIG9uCisjZGVmaW5lIEFPTldVQ19CR0FQX09OICAgICAgICAgIDB4MDAwMDEwMDAgIC8vIEJhbmQgR2FwIGlzIG9uCisjZGVmaW5lIEFPTldVQ19BVVhfUE9XRVJfRE9XTiAgIDB4MDAwMDAyMDAgIC8vIEFVWCBpcyBpbiBwb3dlcmRvd24gbW9kZQorI2RlZmluZSBBT05XVUNfTUNVX1BPV0VSX0RPV04gICAweDAwMDAwMTAwICAvLyBNQ1UgaXMgaW4gcG93ZXJkb3duIG1vZGUKKyNkZWZpbmUgQU9OV1VDX0pUQUdfUE9XRVJfT04gICAgMHgwMDAwMDA0MCAgLy8gSlRBRyBpcyBwb3dlcmVkIG9uCisjZGVmaW5lIEFPTldVQ19BVVhfUE9XRVJfT04gICAgIDB4MDAwMDAwMjAgIC8vIEFVWCBpcyBwb3dlcmVkIG9uCisjZGVmaW5lIEFPTldVQ19NQ1VfUE9XRVJfT04gICAgIDB4MDAwMDAwMTAgIC8vIE1DVSBpcyBwb3dlcmVkIG9uCisjZGVmaW5lIEFPTldVQ19TUExZX1BPV0VSX0RPV04gIDB4MDAwMDAwMDEgIC8vIFBvd2VyIHN1cHBseSBpcyBpbiBwb3dlciBkb3duCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJBTSByZXBhaXIgc3RhdHVzIGJpdHMuIFZhbHVlcyBhcmUgcmV0dXJuZWQgYnkgQU9YV1VDUmFtUmVwYWlyU3RhdHVzR2V0KCkgLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTUNVX1JBTVJFUEFJUl9ET05FICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfUkFNUkVQQUlSX0RPTkUgICAgICAweDAwMDAwMDAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBSQ19SQVRFX01BWCAgICAgICAgICAgICAgICAgICA3NjggICAvLyBNYXhpbXVtIHJlY2hhcmdlIHJhdGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWNoYXJnZSBjb250cm9sbGVyLgorI2RlZmluZSBSQ19SQVRFX01JTiAgICAgICAgICAgICAgICAgICAgIDIgICAvLyBNaW5pbXVtIHJlY2hhcmdlIHJhdGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWNoYXJnZSBjb250cm9sbGVyLgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFPTldVQ19NQ1VfUkVTRVRfU1JDICAgIDB4MDAwMDAwMDIgIC8vIE1DVSByZXNldCBzb3VyY2UgY2FuIGJlIFNXIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpUQUcKKyNkZWZpbmUgQU9OV1VDX01DVV9XQVJNX1JFU0VUICAgMHgwMDAwMDAwMSAgLy8gTUNVIHJlc2V0IHR5cGUgYW5kIGNhbiBiZSB3YXJtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIG5vdCB3YXJtLgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBwb3dlciBkb3duIGNsb2NrIGZvciB0aGUgTUNVIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnRyb2wgd2hpY2ggb25lIG9mIHRoZSBjbG9jayBzb3VyY2VzIHRoYXQKKy8vISBpcyBmZWQgaW50byB0aGUgTUNVIGRvbWFpbiB3aGVuIHRoZSBzeXN0ZW0gaXMgaW4gc3RhbmRieSBtb2RlLiBXaGVuIHRoZQorLy8hIHBvd2VyIGlzIGJhY2sgaW4gQWN0aXZlIG1vZGUgdGhlIGNsb2NrIHNvdXJjZSB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvCisvLyEgXHJlZiBBT05XVUNfQ0xPQ0tfU1JDX0hGLgorLy8hCisvLyEgRWFjaCBjbG9jayBpcyBmZWQgJ2FzIGlzJyBpbnRvIHRoZSBNQ1UgZG9tYWluLCBzaW5jZSB0aGUgTUNVIGRvbWFpbgorLy8hIGNvbnRhaW5zIGludGVybmFsIGNsb2NrIGRpdmlkZXJzIGNvbnRyb2xsYWJsZSB0aHJvdWdoIHRoZSBQUkNNLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDbGtTcmMgaXMgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIE1DVSBkb21haW4gd2hlbiBpbiBwb3dlcgorLy8hIGRvd24uIFZhbHVlcyBhdmFpbGFibGUgYXMgY2xvY2sgc291cmNlOgorLy8hIC0gXHJlZiBBT05XVUNfTk9fQ0xPQ0sKKy8vISAtIFxyZWYgQU9OV1VDX0NMT0NLX1NSQ19MRgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ01jdVBvd2VyRG93bkNvbmZpZyh1aW50MzJfdCB1aTMyQ2xrU3JjKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJDbGtTcmMgPT0gQU9OV1VDX05PX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsa1NyYyA9PSBBT05XVUNfQ0xPQ0tfU1JDX0xGKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgY2xvY2sgc291cmNlIGZvciB0aGUgTUNVIGRvbWFpbiB3aGVuIGluIHBvd2VyIGRvd24uCisgICAgLy8KKyAgICB1aTMyUmVnID0gSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX01DVUNMSyk7CisgICAgdWkzMlJlZyAmPSB+QU9OX1dVQ19NQ1VDTEtfUFdSX0RXTl9TUkNfTTsKKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fTUNVQ0xLKSA9IHVpMzJSZWcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpMzJDbGtTcmMgPDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fV1VDX01DVUNMS19QV1JfRFdOX1NSQ19TKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBwb3dlciBkb3duIG1vZGUgZm9yIHRoZSBNQ1UgZG9tYWluLgorLy8hCisvLyEgVGhlIHBhcmFtZXRlciBcYyB1aTMyTW9kZSBkZXRlcm1pbmVzIHRoZSBwb3dlciBkb3duIG1vZGUgb2YgdGhlIE1DVSBWb2x0YWdlCisvLyEgRG9tYWluLiBXaGVuIHRoZSBBT04gV1VDIHJlY2VpdmVzIGEgcmVxdWVzdCB0byBwb3dlciBvZmYgdGhlIE1DVSBkb21haW4gaXQKKy8vISBjYW4gY2hvb3NlIHRvIHBvd2VyIG9mZiBjb21wbGV0ZWx5IG9yIHVzZSBhIHZpcnR1YWwgcG93ZXItb2ZmLiBJbiBhIHZpcnR1YWwKKy8vISBwb3dlci1vZmYsIHJlc2V0IGlzIGFzc2VydGVkIGFuZCB0aGUgY2xvY2sgaXMgc3RvcHBlZCBidXQgdGhlIHBvd2VyIHRvIHRoZQorLy8hIGRvbWFpbiBpcyBrZXB0IG9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJNb2RlIGRlZmluZXMgdGhlIHBvd2VyIGRvd24gbW9kZSBvZiB0aGUgTUNVIGRvbWFpbi4KKy8vISBBbGxvd2VkIHZhbHVlcyBmb3Igc2V0dGluZyB0aGUgdmlydHVhbCBwb3dlci1vZmYgYXJlOgorLy8hIC0gXHJlZiBNQ1VfVklSVF9QV09GRl9ESVNBQkxFCisvLyEgLSBccmVmIE1DVV9WSVJUX1BXT0ZGX0VOQUJMRQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ01jdVBvd2VyT2ZmQ29uZmlnKHVpbnQzMl90IHVpMzJNb2RlKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBNQ1VfVklSVF9QV09GRl9FTkFCTEUpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBNQ1VfVklSVF9QV09GRl9ESVNBQkxFKSk7CisKKyAgICAvLyBTZXQgdGhlIHBvd2VyZG93biBtb2RlLgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fTUNVQ0ZHLCBBT05fV1VDX01DVUNGR19WSVJUX09GRl9CSVROKSA9ICh1aTMyTW9kZSAhPSAwKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSB3YWtlLXVwIHByb2NlZHVyZSBmb3IgdGhlIE1DVSBkb21haW4uCisvLyEKKy8vISBUaGUgTUNVIGRvbWFpbiBjYW4gd2FrZSB1cCB1c2luZyB0d28gZGlmZmVyZW50IHByb2NlZHVyZXMuIEVpdGhlciBpdCB3YWtlcworLy8hIHVwIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgdHJpZ2dlcmluZyBldmVudCBvciB3YWtlLXVwIGlzIGZvcmNlZCB0bworLy8hIGhhcHBlbiBhIGZpeGVkIG51bWJlciBvZiAzMiBLSHogY2xvY2tzIGZvbGxvd2luZyB0aGUgdHJpZ2dlcmluZworLy8hIGV2ZW50LiBUaGUgbGFzdCBjYW4gYmUgdXNlZCB0byBjb21wZW5zYXRlIGZvciBhbnkgdmFyaWFibGUgZGVsYXlzIGNhdXNlZAorLy8hIGJ5IG90aGVyIGFjdGl2aXRpZXMgZ29pbmcgb24gYXQgdGhlIHRpbWUgb2Ygd2FrZXVwIChzdWNoIGFzIGEgcmVjaGFyZ2UKKy8vISBldmVudCwgZXRjLikuCisvLyEKKy8vISBccGFyYW0gdWkzMldha2VVcCBkZXRlcm1pbmVzIHRoZSB0aW1pbmcgb2YgdGhlIE1DVSB3YWtlIHVwICBwcm9jZWR1cmUuCisvLyEgLSBccmVmIE1DVV9JTU1fV0FLRV9VUAorLy8hIC0gXHJlZiBNQ1VfRklYRURfV0FLRV9VUAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ01jdVdha2VVcENvbmZpZyh1aW50MzJfdCB1aTMyV2FrZVVwKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCh1aTMyV2FrZVVwID09IE1DVV9JTU1fV0FLRV9VUCkgfHwKKyAgICAgICAgICAgKHVpMzJXYWtlVXAgPT0gTUNVX0ZJWEVEX1dBS0VfVVApKTsKKworICAgIC8vIENvbmZpZ3VyZSB0aGUgd2FrZSB1cCBwcm9jZWR1cmUuCisgICAgSFdSRUdCSVRXKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19NQ1VDRkcsIEFPTl9XVUNfTUNVQ0ZHX0ZJWEVEX1dVX0VOX0JJVE4pID0gKHVpMzJXYWtlVXAgIT0gMCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgcmV0ZW50aW9uIG9uIHRoZSBibG9jayBSQU0gaW4gdGhlIE1DVSBkb21haW4uCisvLyEKKy8vISBNQ1UgU1JBTSBpcyBwYXJ0aXRpb25lZCBpbnRvIDQgYmFua3Mgb2YgMWsgeCAzMiBlYWNoLiBUaGUgU1JBTSBzdXBwb3J0cworLy8hIHJldGVudGlvbiBvbiBhbGwgNCBibG9ja3MuIFRoZSByZXRlbnRpb24gb24gdGhlIFNSQU0gY2FuIGJlIHR1cm5lZCBvbiBhbmQKKy8vISBvZmYuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgcmV0ZW50aW9uIG9uIHRoZSBpbmRpdmlkdWFsIGJsb2Nrcy4KKy8vIQorLy8hIElmIGEgYmxvY2sgaXMgbm90IHJlcHJlc2VudGVkIGluIHRoZSBwYXJhbWV0ZXIgXGMgdWkzMlJldGVudGlvbiB0aGVuIHRoZQorLy8hIHRoZSByZXRlbnRpb24gd2lsbCBiZSBkaXNhYmxlZCBmb3IgdGhhdCBibG9jay4KKy8vIQorLy8hIFxub3RlIFJldGVudGlvbiBvbiB0aGUgU1JBTSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiBJZiByZXRlbnRpb24gaXMKKy8vISB0dXJuZWQgb2ZmIG9uIGFsbCBSQU0gYmxvY2tzIHRoZW4gdGhlIFNSQU0gaXMgcG93ZXJlZCBvZmYgd2hlbiBpdCB3b3VsZAorLy8hIG90aGVyd2lzZSBiZSBwdXQgaW4gcmV0ZW50aW9uIG1vZGUuCisvLyEKKy8vISBccGFyYW0gdWkzMlJldGVudGlvbiBkZWZpbmVzIHdoaWNoIFJBTSBibG9ja3MgdG8gZW5hYmxlL2Rpc2FibGUgcmV0ZW50aW9uIG9uLgorLy8hIFRvIGVuYWJsZSByZXRlbnRpb24gb24gaW5kaXZpZHVhbCBwYXJ0cyBvZiB0aGUgUkFNIHVzZSBhIGJpdHdpc2UgT1InZWQKKy8vISBjb21iaW5hdGlvbiBvZjoKKy8vISAtIFxyZWYgTUNVX1JBTTBfUkVURU5USU9OCisvLyEgLSBccmVmIE1DVV9SQU0xX1JFVEVOVElPTgorLy8hIC0gXHJlZiBNQ1VfUkFNMl9SRVRFTlRJT04KKy8vISAtIFxyZWYgTUNVX1JBTTNfUkVURU5USU9OCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDTWN1U1JhbUNvbmZpZyh1aW50MzJfdCB1aTMyUmV0ZW50aW9uKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMlJldGVudGlvbiAmIE1DVV9SQU1fQkxPQ0tfUkVURU5USU9OKTsKKyAgICBBU1NFUlQoISh1aTMyUmV0ZW50aW9uICYgfk1DVV9SQU1fQkxPQ0tfUkVURU5USU9OKSk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgcmV0ZW50aW9uLgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19NQ1VDRkcpICYgfk1DVV9SQU1fQkxPQ0tfUkVURU5USU9OOworICAgIHVpMzJSZWcgfD0gdWkzMlJldGVudGlvbjsKKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fTUNVQ0ZHKSA9IHVpMzJSZWc7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJuIHRoZSBjbG9jayBjb25maWd1cmF0aW9uIGZvciB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFRoZSBBVVggZG9tYWluIGRvZXMgbm90IGhhdmUgYSBsb2NhbCBjbG9jayBkaXZpZGVyLCBzbyB0aGUgQU9OIFdVQyBjb250YWlucworLy8hIGEgZGVkaWNhdGVkIGNsb2NrIGRpdmlkZXIgZm9yIEFVWCBkb21haW4uIFVzZSB0aGlzIGZ1bmN0aW9uIHRvCisvLyEgZ2V0IHRoZSBzZXR0aW5nIG9mIHRoZSBjbG9jayBkaXZpZGVyLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm4gdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb24uIEVudW1lcmF0ZWQgcmV0dXJuIHZhbHVlcyBhcmU6CisvLyEgLSBccmVmIEFVWF9DTE9DS19ESVZfMgorLy8hIC0gXHJlZiBBVVhfQ0xPQ0tfRElWXzQKKy8vISAtIFxyZWYgQVVYX0NMT0NLX0RJVl84CisvLyEgLSBccmVmIEFVWF9DTE9DS19ESVZfMTYKKy8vISAtIFxyZWYgQVVYX0NMT0NLX0RJVl8zMgorLy8hIC0gXHJlZiBBVVhfQ0xPQ0tfRElWXzY0CisvLyEgLSBccmVmIEFVWF9DTE9DS19ESVZfMTI4CisvLyEgLSBccmVmIEFVWF9DTE9DS19ESVZfMjU2CisvLyEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTldVQ0F1eENsb2NrQ29uZmlnR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGNsb2NrIGRpdmlkZXIgdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4gKChIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ0xLKSAmCisgICAgICAgICAgICAgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfTSkgPj4KKyAgICAgICAgICAgICBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9TKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBwb3dlciBkb3duIG1vZGUgZm9yIHRoZSBBVVggZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY29udHJvbCB3aGljaCBvbmUgb2YgdGhlIGNsb2NrIHNvdXJjZXMgdGhhdAorLy8hIGlzIGZlZCBpbnRvIHRoZSBNQ1UgZG9tYWluIHdoZW4gaXQgaXMgaW4gUG93ZXIgRG93biBtb2RlLiBXaGVuIHRoZSBQb3dlcgorLy8hIGlzIGJhY2sgaW4gYWN0aXZlIG1vZGUgdGhlIGNsb2NrIHNvdXJjZSB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvCisvLyEgXHJlZiBBT05XVUNfQ0xPQ0tfU1JDX0hGLgorLy8hCisvLyEgRWFjaCBjbG9jayBpcyBmZWQgJ2FzIGlzJyBpbnRvIHRoZSBBVVggZG9tYWluLCBzaW5jZSB0aGUgQVVYIGRvbWFpbgorLy8hIGNvbnRhaW5zIGludGVybmFsIGNsb2NrIGRpdmlkZXJzIGNvbnRyb2xsYWJsZSB0aHJvdWdoIHRoZSBQUkNNLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDbGtTcmMgaXMgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIEFVWCBkb21haW4gd2hlbiBpbiBwb3dlciBkb3duLgorLy8hIC0gXHJlZiBBT05XVUNfTk9fQ0xPQ0sKKy8vISAtIFxyZWYgQU9OV1VDX0NMT0NLX1NSQ19MRgorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNBdXhQb3dlckRvd25Db25maWcodWludDMyX3QgdWkzMkNsa1NyYykKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2xrU3JjID09IEFPTldVQ19OT19DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbGtTcmMgPT0gQU9OV1VDX0NMT0NLX1NSQ19MRikpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIEFVWCBkb21haW4gd2hlbiBpbiBwb3dlciBkb3duLgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19BVVhDTEspOworICAgIHVpMzJSZWcgJj0gfkFPTl9XVUNfQVVYQ0xLX1BXUl9EV05fU1JDX007CisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENMSykgPSB1aTMyUmVnIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aTMyQ2xrU3JjIDw8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1dVQ19BVVhDTEtfUFdSX0RXTl9TUkNfUyk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSByZXRlbnRpb24gb24gdGhlIEFVWCBTUkFNLgorLy8hCisvLyEgVGhlIEFVWCBTUkFNIGNvbnRhaW5zIG9ubHkgb25lIGJsb2NrIHdoaWNoIHN1cHBvcnRzIHJldGVudGlvbi4gVGhlIHJldGVudGlvbgorLy8hIG9uIHRoZSBTUkFNIGNhbiBiZSB0dXJuZWQgb24gYW5kIG9mZi4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlL2Rpc2FibGUKKy8vISB0aGUgcmV0ZW50aW9uIG9uIHRoZSBlbnRpcmUgUkFNLgorLy8hCisvLyEgXHBhcmFtIHVpMzJSZXRlbnRpb24gZWl0aGVyIGVuYWJsZXMgb3IgZGlzYWJsZXMgQVVYIFNSQU0gcmV0ZW50aW9uLgorLy8hIC0gMCA6IERpc2FibGUgcmV0ZW50aW9uLgorLy8hIC0gMSA6IEVuYWJsZSByZXRlbnRpb24uCisvLyEKKy8vISBcbm90ZSBSZXRlbnRpb24gb24gdGhlIFNSQU0gaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgcmV0ZW50aW9uIGlzCisvLyEgdHVybmVkIG9mZiB0aGVuIHRoZSBTUkFNIGlzIHBvd2VyZWQgb2ZmIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNlIGJlIHB1dCBpbgorLy8hIHJldGVudGlvbiBtb2RlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ0F1eFNSYW1Db25maWcodWludDMyX3QgdWkzMlJldGVudGlvbikKK3sKKyAgICAvLyBFbmFibGUvZGlzYWJsZSB0aGUgcmV0ZW50aW9uLgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ0ZHLCBBT05fV1VDX0FVWENGR19SQU1fUkVUX0VOX0JJVE4pID0gdWkzMlJldGVudGlvbjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udHJvbCB0aGUgd2FrZSB1cCBwcm9jZWR1cmUgb2YgdGhlIEFVWCBkb21haW4uCisvLyEKKy8vISBUaGUgQVVYIGRvbWFpbiBjYW4gYmUgd29rZW4gaW4gdHdvIGRpZmZlcmVudCBtb2Rlcy4gSW4gYm90aCBtb2RlcyBwb3dlcgorLy8hIGlzIHR1cm5lZCBvbi4gSW4gb25lIG1vZGUgYSBzb2Z0d2FyZSBldmVudCBpcyBnZW5lcmF0ZWQgZm9yIHRoZQorLy8hIFNlbnNvciBDb250cm9sbGVyIGFuZCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0IHByb2Nlc3NpbmcuIFRoZSBzZWNvbmQgbW9kZSB3aWxsCisvLyEganVzdCBmb3JjZSBwb3dlciBvbiB0aGUgU2Vuc29yIENvbnRyb2xsZXIuIElmIFN5c3RlbSBDUFUgcmVxdWlyZXMgZXhjbHVzaXZlIGFjY2VzcworLy8hIHRvIHRoZSBBVVggZG9tYWluIHJlc291cmNlcywgaXQgaXMgYWR2aXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgaW1hZ2UgaW4KKy8vISB0aGUgU2Vuc29yIENvbnRyb2xsZXIgbWVtb3J5IGlzIGRlY2xhcmVkIGludmFsaWQuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5CisvLyEgY2FsbGluZyBBT05XVUNBdXhJbWFnZUludmFsaWQoKS4KKy8vIQorLy8hIFxub3RlIEFueSB3cml0ZXMgdG8gdGhlIEFPTiBpbnRlcmZhY2UgbXVzdCBwYXNzIGEgMzIga0h6IGNsb2NrIGJvdW5kYXJ5LAorLy8hIGFuZCBpcyB0aGVyZWZvcmUgcmVsYXRpdmVseSBzbG93LiBUbyBlbnN1cmUgdGhhdCBhIGdpdmVuIHdyaXRlIGlzCisvLyEgY29tcGxldGUgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBjYW4gYmUgcmVhZCBiYWNrIGFmdGVyIHdyaXRlLgorLy8KKy8vISBcbm90ZSBXaGVuIGFjY2Vzc2luZyB0aGUgQVVYIGRvbWFpbiBmcm9tIHRoZSBTeXN0ZW0gQ1BVLCBpdCBpcyBhZHZpc2VkIGFsd2F5cyB0bworLy8hIGhhdmUgc2V0IHRoZSBBVVggaW4gYXQgbGVhc3QgXHJlZiBBT05XVUNfQVVYX1dBS0VVUC4gVGhpcyBvdmVyd3JpdGVzIGFueQorLy8hIGluc3RydWN0aW9uIGZyb20gdGhlIFNlbnNvciBDb250cm9sbGVyIGFuZCBlbnN1cmVzIHRoYXQgdGhlIEFVWCBkb21haW4KKy8vISBpcyBvbiBzbyBpdCB3b24ndCBsZWF2ZSB0aGUgU3lzdGVtIENQVSBoYW5naW5nLgorLy8hCisvLyEgXHBhcmFtIHVpMzJNb2RlIGlzIHRoZSB3YWtlIHVwIG1vZGUgZm9yIHRoZSBBVVggZG9tYWluLgorLy8hIC0gXHJlZiBBT05XVUNfQVVYX1dBS0VVUAorLy8hIC0gXHJlZiBBT05XVUNfQVVYX0FMTE9XX1NMRUVQCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDQXV4V2FrZXVwRXZlbnQodWludDMyX3QgdWkzMk1vZGUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJNb2RlID09IEFPTldVQ19BVVhfV0FLRVVQKSB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gQU9OV1VDX0FVWF9BTExPV19TTEVFUCkpOworCisgICAgLy8gV2FrZSB1cCB0aGUgQVVYIGRvbWFpbi4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENUTCwgQU9OX1dVQ19BVVhDVExfQVVYX0ZPUkNFX09OX0JJVE4pID0gdWkzMk1vZGU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlc2V0IHRoZSBBVVggZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVzZXQgdGhlIGVudGlyZSBBVVggZG9tYWluLiBUaGUgd3JpdGUgdG8gdGhlIEFPTl9XVUMKKy8vISBtb2R1bGUgbXVzdCBwYXNzIGFuIDMyIGtIeiBjbG9jayBib3VuZGFyeS4gQnkgcmVhZGluZyB0aGUKKy8vISBBT05fUlRDX09fU1lOQyByZWdpc3RlciBhZnRlciBlYWNoIHdyaXRlLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIEFPTgorLy8hIGludGVyZmFjZSB3aWxsIGJlIGluIHN5bmMgYW5kIHRoYXQgYm90aCB0aGUgYXNzZXJ0IGFuZCB0aGUgZGUtYXNzZXJ0IG9mIHRoZQorLy8hIHJlc2V0IHNpZ25hbCB0byBBVVggd2lsbCBwcm9wYWdhdGUuCisvLyEKKy8vISBcbm90ZSBUaGlzIHJlcXVpcmVzIHR3byB3cml0ZXMgYW5kIHR3byByZWFkcyBvbiBhIDMyIGtIeiBjbG9jayBib3VuZGFyeS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFPTldVQ0F1eFJlc2V0KHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUZWxscyB0aGUgU2Vuc29yIENvbnRyb2xsZXIgdGhhdCB0aGUgaW1hZ2UgaW4gbWVtb3J5IGlzIHZhbGlkLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc2Vuc29yIGNvbnRyb2xsZXIgdGhhdCB0aGUgaW1hZ2UgaW4gbWVtb3J5IGlzCisvLyEgdmFsaWQsIGFuZCBpdCBpcyBhbGxvd2VkIHRvIHN0YXJ0IGV4ZWN1dGluZyB0aGUgcHJvZ3JhbS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNBdXhJbWFnZVZhbGlkKHZvaWQpCit7CisgICAgLy8gVGVsbCB0aGUgU2Vuc29yIENvbnRyb2xsZXIgdGhhdCB0aGUgaW1hZ2UgaW4gbWVtb3J5IGlzIHZhbGlkLgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ1RMLCBBT05fV1VDX0FVWENUTF9TQ0VfUlVOX0VOX0JJVE4pID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVGVsbHMgdGhlIFNlbnNvciBDb250cm9sbGVyIHRoYXQgdGhlIGltYWdlIGluIG1lbW9yeSBpcyBpbnZhbGlkLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gdGVsbCB0aGUgc2Vuc29yIGNvbnRyb2xsZXIgdGhhdCB0aGUgaW1hZ2UgaW4gbWVtb3J5IGlzCisvLyEgaW52YWxpZC4gU2Vuc29yIENvbnRyb2xsZXIgbWlnaHQgd2FrZSB1cCwgYnV0IGl0IHdpbGwgc3RheSBpZGxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ0F1eEltYWdlSW52YWxpZCh2b2lkKQoreworICAgIC8vIFRlbGwgdGhlIFNlbnNvciBDb250cm9sbGVyIHRoYXQgdGhlIGltYWdlIGluIG1lbW9yeSBpcyBpbnZhbGlkLgorICAgIEhXUkVHQklUVyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fQVVYQ1RMLCBBT05fV1VDX0FVWENUTF9TQ0VfUlVOX0VOX0JJVE4pID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBwb3dlciBzdGF0dXMgb2YgdGhlIGRldmljZS4KKy8vIQorLy8hIFRoZSBBbHdheXMgT24gKEFPTikgZG9tYWluIGlzIHRoZSBvbmx5IHBhcnQgb2YgdGhlIGRldmljZSB3aGljaCBpcyB0cnVseQorLy8hICJBTFdBWVMgT04iLiBUaGUgcG93ZXIgc3RhdHVzIGZvciB0aGUgb3RoZXIgZGV2aWNlIGNhbiBhbHdheXMgYmUgcmVhZCBmcm9tCisvLyEgdGhpcyBzdGF0dXMgcmVnaXN0ZXIuCisvLyEKKy8vISBQb3NzaWJsZSBwb3dlciBtb2RlcyBmb3IgdGhlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgZGV2aWNlIGFyZToKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBwb3dlciBzdGF0dXMgb2YgdGhlIGRldmljZSBhcyBhIGJpdHdpc2UgT1InZWQKKy8vISBjb21iaW5hdGlvbiBvZiB0aGVzZSB2YWx1ZXM6CisvLyEgLSBccmVmIEFPTldVQ19BVVhfUE9XRVJfRE9XTgorLy8hIC0gXHJlZiBBT05XVUNfQVVYX1BPV0VSX09OCisvLyEgLSBccmVmIEFPTldVQ19KVEFHX1BPV0VSX09OCisvLyEgLSBccmVmIEFPTldVQ19NQ1VfUE9XRVJfT04KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTldVQ1Bvd2VyU3RhdHVzR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHBvd2VyIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1BXUlNUQVQpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIHNodXQtZG93biBvZiB0aGUgZGV2aWNlLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIHNodXQtZG93biBvZiB0aGUgZGV2aWNlLiBUaGlzIHdpbGwgZm9yY2UgYWxsIEkvTyB2YWx1ZXMgdG8KKy8vISBiZSBsYXRjaGVkIC0gcG9zc2libHkgZW5hYmxpbmcgSS9PIHdha2V1cCAtIHRoZW4gYWxsIGludGVybmFsIHBvd2VyCisvLyEgc3VwcGxpZXMgYXJlIHR1cm5lZCBvZmYsIGVmZmVjdGl2ZWx5IHB1dHRpbmcgdGhlIGRldmljZSBpbnRvIHNodXQtZG93biBtb2RlLgorLy8hCisvLyEgXG5vdGUgTm8gYWN0aW9uIHdpbGwgdGFrZSBwbGFjZSBiZWZvcmUgdGhlIFN5c3RlbSBDUFUgaXMgcHV0IHRvIGRlZXAgc2xlZXAuCisvLyEKKy8vISBcbm90ZSBUaGUgc2h1dC1kb3duIGNvbW1hbmQgaXMgaWdub3JlZCBpZiB0aGUgSlRBRyBpbnRlcmZhY2UgaGFzIGJlZW4KKy8vISBhY3RpdmF0ZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQU9OV1VDU2h1dERvd25FbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIEpUQUcgZG9tYWluIGlzIHR1cm5lZCBvZmY7CisgICAgLy8gb3RoZXJ3aXNlIE1DVSBkb21haW4gY2FuJ3QgYmUgdHVybmVkIG9mZi4KKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fSlRBR0NGRykgPSAwOworCisgICAgLy8gRW5hYmxlIHNodXRkb3duIG9mIHRoZSBkZXZpY2UuCisgICAgSFdSRUdCSVRXKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19DVEwwLCBBT05fV1VDX0NUTDBfUFdSX0RXTl9ESVNfQklUTikgPSAwOworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19TSFVURE9XTikgPSBBT05fV1VDX1NIVVRET1dOX0VOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgcG93ZXIgZG93biBtb2RlIG9uIEFVWCBhbmQgTUNVIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBwb3dlcmRvd24gb24gdGhlIEFVWCBhbmQgTUNVIGRvbWFpbi4KKy8vIQorLy8hIFxub3RlIFRoZSBwb3dlcmRvd24gY29tbWFuZCBpcyBpZ25vcmVkIGlmIHRoZSBKVEFHIGludGVyZmFjZSBoYXMgYmVlbgorLy8hIGFjdGl2YXRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNEb21haW5Qb3dlckRvd25FbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIEpUQUcgZG9tYWluIGlzIHR1cm5lZCBvZmY7CisgICAgLy8gb3RoZXJ3aXNlIE1DVSBkb21haW4gY2FuJ3QgYmUgdHVybmVkIG9mZi4KKyAgICBIV1JFRyhBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fSlRBR0NGRykgPSAwOworCisgICAgLy8gRW5hYmxlIHBvd2VyIGRvd24gbW9kZS4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0NUTDAsIEFPTl9XVUNfQ1RMMF9QV1JfRFdOX0RJU19CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRpc2FibGUgcG93ZXIgZG93biBtb2RlIG9mIHRoZSBNQ1UgYW5kIEFVWCBkb21haW4uCisvLyEKKy8vISBEaXNhYmxpbmcgcG93ZXJkb3duIG9uIHRoZSBNQ1UgYW5kL29yIEFVWCB3aWxsIHB1dCB0aGUgZG9tYWlucyBpbiBhCisvLyEgdmlydHVhbCBwb3dlciBkb3duIHdoZW4gcmVxdWVzdGluZyB0byBiZSBwb3dlcmVkIGRvd24uIExvZ2ljIGlzIHRoZSBzYW1lCisvLyEgYnV0IHBvd2VyIGlzIGtlcHQgb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ0RvbWFpblBvd2VyRG93bkRpc2FibGUodm9pZCkKK3sKKyAgICAvLyBEaXNhYmxlIHBvd2VyIGRvd24gbW9kZS4KKyAgICBIV1JFR0JJVFcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0NUTDAsIEFPTl9XVUNfQ1RMMF9QV1JfRFdOX0RJU19CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNsZWFyIHNwZWNpZmljIHN0YXR1cyBiaXRzLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIGJpdHMgdGhhdCBhcmUgc2V0IGluIHRoZSBBT04gV1VDIHN0YXR1cworLy8hIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgd3JpdGUgMSB0byBjbGVhci4KKy8vIQorLy8hIEFPTiBXYWtlIFVwIENvbnRyb2xsZXIgVEFQIGNhbiByZXF1ZXN0IGEgdG90YWwvZnVsbCBGbGFzaCBlcmFzZS4gSWYgc28sCisvLyEgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdHVzIGJpdHMgd2lsbCBiZSBzZXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBhbmQgY2FuCisvLyEgYmUgcmVhZCB1c2luZyBccmVmIEFPTldVQ01jdVJlc2V0U3RhdHVzR2V0KCkgb3IgY2xlYXJlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLiBUaGUgcmVzZXQKKy8vISBzb3VyY2UgYW5kIHR5cGUgZ2l2ZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGFuZCBob3cgdGhlIGxhdGVzdCByZXNldAorLy8hIHdhcyBwZXJmb3JtZWQuIEFjY2VzcyB0byB0aGVzZSBiaXRzIGFyZSBpZGVudGljYWwgdG8gdGhlIGZsYXNoIGVyYXNlCisvLyEgYml0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU3RhdHVzIGRlZmluZXMgaW4gYSBvbmUtaG90IGVuY29kaW5nIHdoaWNoIGJpdHMgdG8gY2xlYXIgaW4gdGhlCisvLyEgc3RhdHVzIHJlZ2lzdGVyLiBVc2UgT1InZWQgY29tYmluYXRpb25zIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEFPTldVQ19NQ1VfUkVTRVRfU1JDCisvLyEgLSBccmVmIEFPTldVQ19NQ1VfV0FSTV9SRVNFVAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FPTldVQ01jdVJlc2V0Q2xlYXIodWludDMyX3QgdWkzMlN0YXR1cykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJTdGF0dXMgJiBBT05XVUNfTUNVX1JFU0VUX1NSQykgfHwKKyAgICAgICAgICAgKHVpMzJTdGF0dXMgJiBBT05XVUNfTUNVX1dBUk1fUkVTRVQpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHN0YXR1cyBiaXRzLgorICAgIC8vCisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0NUTDEpID0gdWkzMlN0YXR1czsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJuIHRoZSByZXNldCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBBT05fV1VDX09fQ1RMMSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIGZyb20gdGhlIEFPTiBXVUMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBT05XVUNNY3VSZXNldFN0YXR1c0dldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0NUTDEpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSByZWNoYXJnZSBjb250cm9sbGVyLgorLy8hCisvLyEgVGhlIHBhcmFtZXRlciBcYyBiQWRhcHRFbmFibGUgaXMgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYWRhcHRpdmUKKy8vISBhbGdvcml0aG0gZm9yIHRoZSByZWNoYXJnZSBjb250cm9sbGVyLgorLy8hIFRoZSBhZGFwdGl2ZSBhbGdvcml0aG0gZm9yIHRoZSByZWNoYXJnZSBjb250cm9sbGVyIGlzIGRlZmluZWQgYXMKKy8vIQorLyohCitcdmVyYmF0aW0KKworICBOZXdfUGVyaW9kID0gUGVyaW9kICogKDEgKyAoQWRhcHRSYXRlIC8gMTAyNCkgKQorCisgICAgICBBZGFwdFJhdGUKKyAgICAgLS0tLS0tLS0tLS0gPSAoIDJeKC1DMSkgKyAyXigtQzIpICApCisgICAgICAgIDEwMjQKKworXGVuZHZlcmJhdGltCisqLworLy8hCisvLyEgV2hlcmUgQzEgaXMgYmV0d2VlbiAxIGFuZCAxMCBhbmQgQzIgaXMgYmV0d2VlbiAyIGFuZCAxMC4gVGhlIFxjIHVpMzJBZGFwdFJhdGUKKy8vISBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMiBhbmQgNzY4IChccmVmIFJDX1JBVEVfTUlOIGFuZCBccmVmIFJDX1JBVEVfTUFYKQorLy8hIHJlc3VsdGluZyBpbiBhbiBhZGFwdGl2ZSByYXRlIGJldHdlZW4gMC4yJSBhbmQgNzUlLgorLy8hCisvLyEgVGhlIFxjIHVpMzJQZXJpb2QgaXMgdGhlIG51bWJlciBvZiAzMiBLSHogY2xvY2tzIGJldHdlZW4gdHdvIHJlY2hhcmdlcy4gVGhlCisvLyEgbGVuZ3RoIG9mIHRoZSBpbnRlcnZhbCBpcyBkZWZpbmVkIGJ5IHRoZSBmb3JtdWxhOgorLy8hCisvKiEKK1x2ZXJiYXRpbQorCisgIFBlcmlvZCA9ICh7dWxNYW50aXNzYSw1J2IxMTExfSA8PCB1aTMyRXhwb25lbnQpCisKK1xlbmR2ZXJiYXRpbQorKi8KKy8vIQorLy8hIFxub3RlIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNoYXJnZSBjeWNsZXMgaXMgcmVxdWlyZWQgd2hlbiBlbmFibGluZyB0aGUKKy8vISBhZGFwdGl2ZSByZWNoYXJnZSBhbGdvcml0aG0uCisvLyEKKy8vISBcbm90ZSBUaGUgbWF4aW11bSBwZXJpb2QgYmV0d2VlbiB0d28gcmVjaGFyZ2VzIHNob3VsZCBuZXZlciBleGNlZWQgdGhlCisvLyEgcGVyaW9kIGJldHdlZW4gdHdvIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9ucyB3aGljaCBpcyBjb25maWd1cmVkCisvLyEgdXNpbmcgQU9OV1VDT3NjQ29uZmlnKCkuCisvLyEKKy8vISBccGFyYW0gYkFkYXB0RW5hYmxlIGVuYWJsZXMgdGhlIGFkYXB0YXRpb24gYWxnb3JpdGhtIGZvciB0aGUgY29udHJvbGxlci4KKy8vISBccGFyYW0gdWkzMkFkYXB0UmF0ZSBkZXRlcm1pbmVzIHRoZSBhZGp1c3RtZW50IHZhbHVlIGZvciB0aGUgYWRvcHRpb24KKy8vISBhbGdvcml0aG0uCisvLyEgXHBhcmFtIHVpMzJQZXJpb2QgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcyBiZXR3ZWVuIGVhY2gKKy8vISBhY3RpdmF0aW9uIG9mIHRoZSByZWNoYXJnZSBjb250cm9sbGVyLgorLy8hIFxwYXJhbSB1aTMyTWF4UGVyaW9kIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcyBiZXR3ZWVuCisvLyEgZWFjaCBhY3RpdmF0aW9uIG9mIHRoZSByZWNoYXJnZSBjb250cm9sbGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQU9OV1VDUmVjaGFyZ2VDdHJsQ29uZmlnU2V0KGJvb2wgYkFkYXB0RW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJBZGFwdFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlBlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTWF4UGVyaW9kKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlY2hhcmdlIGNvbnRyb2xsZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBBT05fV1VDX09fUkVDSEFSR0VDRkcuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgcmVjaGFyZ2UgY29udHJvbGxlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FPTldVQ1JlY2hhcmdlQ3RybENvbmZpZ0dldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgaW50ZXJ2YWwgZm9yIG9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9uLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBudW1iZXIgb2YgMzIga0h6IGNsb2NrcyBiZXR3ZWVuIG9zY2lsbGF0b3IKKy8vISBhbXBsaXR1ZGUgY2FsaWJyYXRpb25zLgorLy8hCisvLyEgVGhlIHZhbHVlIG9mIHRoZSBpbnRlcnZhbCBpcyBkZWZpbmVkIGJ5IHRoZSBmb3JtdWxhOgorLy8hCisvKiEKK1x2ZXJiYXRpbQorCisgIFBlcmlvZCA9ICh7dWxNYW50aXNzYSw1J2IxMTExfSA8PCB1aTMyRXhwb25lbnQpCisKK1xlbmR2ZXJiYXRpbQorKi8KKy8vIQorLy8hIFxub3RlIFdoZW4gdGhpcyBjb3VudGVyIGV4cGlyZXMgYW4gb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb24gaXMKKy8vISB0cmlnZ2VyZWQgaW1tZWRpYXRlbHkgaW4gQWN0aXZlIG1vZGUuIFdoZW4gdGhpcyBjb3VudGVyIGV4cGlyZXMgaW4KKy8vISBQb3dlcmRvd24gbW9kZSBhbiBpbnRlcm5hbCBmbGFnIGlzIHNldCB0aGF0IGNhdXNlcyBHQklBUyB0byB0dXJuIG9uCisvLyEgdG9nZXRoZXIgd2l0aCBCR0FQIHdoZW4gdGhlIG5leHQgcmVjaGFyZ2Ugb2NjdXJzLCBhdCB0aGUgc2FtZSB0aW1lCisvLyEgdHJpZ2dlcmluZyB0aGUgb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb24gYXMgd2VsbCBhcyBhIHJlY2hhcmdlIG9mCisvLyEgdGhlIHVMRE8gcmVmZXJlbmNlIHZvbHRhZ2UuCisvLyEKKy8vISBcbm90ZSBUaGUgb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb24gaXMgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUKKy8vISBhcyB0aGUgcmVjaGFyZ2UgZm9yIHRoZSB1TERPIHJlZmVyZW5jZSB2b2x0YWdlLiBTbyB0aGUgbWF4aW11bSBwZXJpb2QKKy8vISBiZXR3ZWVuIGVhY2ggcmVjaGFyZ2Ugb3BlcmF0aW9uIHNob3VsZCBub3QgZXhjZWVkIHRoZSBudW1iZXIgb2YgY2xvY2sKKy8vISBjeWNsZXMgZm9yIHRoZSBhbXBsaXR1ZGUgY2FsaWJyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlvZCBpcyB0aGUgbnVtYmVyIG9mIDMyIGtIeiBjbG9jayBjeWNsZXMgaW4gZWFjaCBpbnRlcnZhbC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFPTldVQ09zY0NvbmZpZyh1aW50MzJfdCB1aTMyUGVyaW9kKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVxdWVzdCBwb3dlciBvZmYgb2YgdGhlIEpUQUcgZG9tYWluLgorLy8hCisvLyEgVGhlIEpUQUcgZG9tYWluIGlzIGF1dG9tYXRpY2FsbHkgcG93ZXJlZCB1cCBvbiBpZiBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZC4KKy8vISBJZiBhIGRlYnVnZ2VyIGlzIG5vdCBjb25uZWN0ZWQgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwb3dlciBvZmYgdGhlCisvLyEgSlRBRyBkb21haW4uCisvLyEKKy8vISBcbm90ZSBBY2hpZXZpbmcgdGhlIGxvd2VzdCBwb3dlciBtb2RlcyAoc2h1dGRvd24vcG93ZXJkb3duKSByZXF1aXJlcyB0aGUKKy8vISBKVEFHIGRvbWFpbiB0byBiZSB0dXJuZWQgb2ZmLiBJbiBnZW5lcmFsIHRoZSBKVEFHIGRvbWFpbiBzaG91bGQgbmV2ZXIgYmUKKy8vISBwb3dlcmVkIGluIHByb2R1Y3Rpb24gY29kZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBT05XVUNKdGFnUG93ZXJPZmYodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlcXVlc3QgdGhlIHBvd2VyIG9mZiBvZiB0aGUgSnRhZyBkb21haW4KKyAgICAvLworICAgIEhXUkVHKEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19KVEFHQ0ZHKSA9IDA7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fQU9OV1VDQXV4UmVzZXQKKyAgICAgICAgI3VuZGVmICBBT05XVUNBdXhSZXNldAorICAgICAgICAjZGVmaW5lIEFPTldVQ0F1eFJlc2V0ICAgICAgICAgICAgICAgICAgUk9NX0FPTldVQ0F1eFJlc2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQKKyAgICAgICAgI3VuZGVmICBBT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQKKyAgICAgICAgI2RlZmluZSBBT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQgICAgIFJPTV9BT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FPTldVQ09zY0NvbmZpZworICAgICAgICAjdW5kZWYgIEFPTldVQ09zY0NvbmZpZworICAgICAgICAjZGVmaW5lIEFPTldVQ09zY0NvbmZpZyAgICAgICAgICAgICAgICAgUk9NX0FPTldVQ09zY0NvbmZpZworICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19BT05fV1VDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfYWRjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfYWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5NDEyOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9hZGMuYwpAQCAtMCwwICsxLDMzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF9hZGMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMDQgMTY6NDk6MzggKzAxMDAgKEZyaSwgMDQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU4NzQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBVVggVGltZSB0byBEaWdpdGFsIENvbnZlcnRlciBpbnRlcmZhY2UuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2F1eF9hZGMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmNmZzEuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvYWRpLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2V2ZW50Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBBVVhBRENEaXNhYmxlCisgICAgI2RlZmluZSBBVVhBRENEaXNhYmxlICAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ0Rpc2FibGUKKyAgICAjdW5kZWYgIEFVWEFEQ0VuYWJsZUFzeW5jCisgICAgI2RlZmluZSBBVVhBRENFbmFibGVBc3luYyAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ0VuYWJsZUFzeW5jCisgICAgI3VuZGVmICBBVVhBRENFbmFibGVTeW5jCisgICAgI2RlZmluZSBBVVhBRENFbmFibGVTeW5jICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ0VuYWJsZVN5bmMKKyAgICAjdW5kZWYgIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcKKyAgICAjZGVmaW5lIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcgICAgICAgTk9ST01fQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZworICAgICN1bmRlZiAgQVVYQURDRmx1c2hGaWZvCisgICAgI2RlZmluZSBBVVhBRENGbHVzaEZpZm8gICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ0ZsdXNoRmlmbworICAgICN1bmRlZiAgQVVYQURDUmVhZEZpZm8KKyAgICAjZGVmaW5lIEFVWEFEQ1JlYWRGaWZvICAgICAgICAgICAgICAgICAgTk9ST01fQVVYQURDUmVhZEZpZm8KKyAgICAjdW5kZWYgIEFVWEFEQ1BvcEZpZm8KKyAgICAjZGVmaW5lIEFVWEFEQ1BvcEZpZm8gICAgICAgICAgICAgICAgICAgTk9ST01fQVVYQURDUG9wRmlmbworICAgICN1bmRlZiAgQVVYQURDR2V0QWRqdXN0bWVudEdhaW4KKyAgICAjZGVmaW5lIEFVWEFEQ0dldEFkanVzdG1lbnRHYWluICAgICAgICAgTk9ST01fQVVYQURDR2V0QWRqdXN0bWVudEdhaW4KKyAgICAjdW5kZWYgIEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQKKyAgICAjZGVmaW5lIEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQgICAgICAgTk9ST01fQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldAorICAgICN1bmRlZiAgQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMKKyAgICAjZGVmaW5lIEFVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzICAgICAgICAgTk9ST01fQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMKKyAgICAjdW5kZWYgIEFVWEFEQ01pY3Jvdm9sdHNUb1ZhbHVlCisgICAgI2RlZmluZSBBVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZSAgICAgICAgIE5PUk9NX0FVWEFEQ01pY3Jvdm9sdHNUb1ZhbHVlCisgICAgI3VuZGVmICBBVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyAgICAjZGVmaW5lIEFVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCBOT1JPTV9BVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyAgICAjdW5kZWYgIEFVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgI2RlZmluZSBBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCBOT1JPTV9BVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBBREMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhBRENEaXNhYmxlKHZvaWQpCit7CisgICAgLy8gRGlzYWJsZSB0aGUgQURDIHJlZmVyZW5jZQorICAgIEFESThCaXRzQ2xlYXIoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDUkVGMCwgQURJXzRfQVVYX0FEQ1JFRjBfRU5fTSB8IEFESV80X0FVWF9BRENSRUYwX1JFRl9PTl9JRExFX00gfCBBRElfNF9BVVhfQURDUkVGMF9TUkNfTSk7CisKKyAgICAvLyBBc3NlcnQgcmVzZXQgYW5kIGRpc2FibGUgdGhlIEFEQworICAgIEFESThCaXRzQ2xlYXIoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDMCwgQURJXzRfQVVYX0FEQzBfRU5fTSB8IEFESV80X0FVWF9BREMwX1JFU0VUX05fTSB8IEFESV80X0FVWF9BREMwX1NNUExfTU9ERV9NIHwgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfTSk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBzY2FsaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWZvcmUgbmV4dCB1c2Ugb2YgdGhlIEFEQworICAgIEFESThCaXRzQ2xlYXIoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDMSwgQURJXzRfQVVYX0FEQzFfU0NBTEVfRElTX00pOworCisgICAgLy8gRGlzYWJsZSB0aGUgQURDIGNsb2NrIChubyBuZWVkIHRvIHdhaXQgc2luY2UgSU9CX1dVQ19BRENDTEtDVExfQUNLIGdvZXMgbG93IGltbWVkaWF0ZWx5KQorICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19BRENDTEtDVEwpID0gMDsKKworICAgIC8vIERpc2FibGUgdGhlIEFEQyBkYXRhIGludGVyZmFjZQorICAgIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDQ1RMKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBFbmFibGVzIHRoZSBBREMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhBRENFbmFibGVBc3luYyh1aW50MzJfdCByZWZTb3VyY2UsIHVpbnQzMl90IHRyaWdnZXIpCit7CisgICAgLy8gRW5hYmxlIHRoZSBBREMgcmVmZXJlbmNlLCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyAgICAvLyAtIFNSQzogU2V0IHdoZW4gdXNpbmcgcmVsYXRpdmUgcmVmZXJlbmNlCisgICAgLy8gLSBSRUZfT05fSURMRTogQWx3YXlzIGNsZWFyZWQgc2luY2UgdGhlcmUgaXMgbm8gaWRsZSBzdGF0ZSBpbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uCisgICAgQURJOEJpdHNTZXQoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDUkVGMCwgcmVmU291cmNlIHwgQURJXzRfQVVYX0FEQ1JFRjBfRU5fTSk7CisKKyAgICAvLyBFbmFibGUgdGhlIEFEQyBjbG9jaworICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19BRENDTEtDVEwpID0gQVVYX1dVQ19BRENDTEtDVExfUkVRX007CisgICAgd2hpbGUgKCEoSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FEQ0NMS0NUTCkgJiBBVVhfV1VDX0FEQ0NMS0NUTF9BQ0tfTSkpOworCisgICAgLy8gRW5hYmxlIHRoZSBBREMgZGF0YSBpbnRlcmZhY2UKKyAgICBpZiAodHJpZ2dlciA9PSBBVVhBRENfVFJJR0dFUl9NQU5VQUwpIHsKKyAgICAgICAgLy8gTWFudWFsIHRyaWdnZXI6IE5vIG5lZWQgdG8gY29uZmlndXJlIGV2ZW50IHJvdXRpbmcgZnJvbSBHUFQKKyAgICAgICAgSFdSRUcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENDVEwpID0gQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfTk9fRVZFTlQwIHwgQVVYX0FOQUlGX0FEQ0NUTF9DTURfRU47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gR1BUIHRyaWdnZXI6IENvbmZpZ3VyZSBldmVudCByb3V0aW5nIHZpYSBNQ1VfRVYgdG8gdGhlIEFVWCBkb21haW4KKyAgICAgICAgSFdSRUcoRVZFTlRfQkFTRSArIEVWRU5UX09fQVVYU0VMMCkgPSB0cmlnZ2VyOworICAgICAgICBIV1JFRyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ0NUTCkgPSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19NQ1VfRVYgfCBBVVhfQU5BSUZfQURDQ1RMX0NNRF9FTjsKKyAgICB9CisKKyAgICAvLyBDb25maWd1cmUgdGhlIEFEQworICAgIEFESThCaXRzU2V0KEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQzAsIEFESV80X0FVWF9BREMwX1NNUExfTU9ERV9NKTsKKworICAgIC8vIFJlbGVhc2UgcmVzZXQgYW5kIGVuYWJsZSB0aGUgQURDCisgICAgQURJOEJpdHNTZXQoQVVYX0FESTRfQkFTRSwgQURJXzRfQVVYX09fQURDMCwgQURJXzRfQVVYX0FEQzBfRU5fTSB8IEFESV80X0FVWF9BREMwX1JFU0VUX05fTSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBFbmFibGVzIHRoZSBBREMgZm9yIHN5bmNocm9ub3VzIG9wZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWEFEQ0VuYWJsZVN5bmModWludDMyX3QgcmVmU291cmNlLCB1aW50MzJfdCBzYW1wbGVUaW1lLCB1aW50MzJfdCB0cmlnZ2VyKQoreworICAgIC8vIEVuYWJsZSB0aGUgQURDIHJlZmVyZW5jZSwgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisgICAgLy8gLSBTUkM6IFNldCB3aGVuIHVzaW5nIHJlbGF0aXZlIHJlZmVyZW5jZQorICAgIC8vIC0gUkVGX09OX0lETEU6IFNldCB3aGVuIHVzaW5nIGZpeGVkIHJlZmVyZW5jZSBhbmQgc2FtcGxlIHRpbWUgPCAyMS4zIHVzCisgICAgdWludDhfdCBhZGNyZWYwID0gcmVmU291cmNlIHwgQURJXzRfQVVYX0FEQ1JFRjBfRU5fTTsKKyAgICBpZiAoIXJlZlNvdXJjZSAmJiAoc2FtcGxlVGltZSA8IEFVWEFEQ19TQU1QTEVfVElNRV8yMVAzX1VTKSkgeworICAgICAgICBhZGNyZWYwIHw9IEFESV80X0FVWF9BRENSRUYwX1JFRl9PTl9JRExFX007CisgICAgfQorICAgIEFESThCaXRzU2V0KEFVWF9BREk0X0JBU0UsIEFESV80X0FVWF9PX0FEQ1JFRjAsIGFkY3JlZjApOworCisgICAgLy8gRW5hYmxlIHRoZSBBREMgY2xvY2sKKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKSA9IEFVWF9XVUNfQURDQ0xLQ1RMX1JFUV9NOworICAgIHdoaWxlICghKEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19BRENDTEtDVEwpICYgQVVYX1dVQ19BRENDTEtDVExfQUNLX00pKTsKKworICAgIC8vIEVuYWJsZSB0aGUgQURDIGRhdGEgaW50ZXJmYWNlCisgICAgaWYgKHRyaWdnZXIgPT0gQVVYQURDX1RSSUdHRVJfTUFOVUFMKSB7CisgICAgICAgIC8vIE1hbnVhbCB0cmlnZ2VyOiBObyBuZWVkIHRvIGNvbmZpZ3VyZSBldmVudCByb3V0aW5nIGZyb20gR1BUCisgICAgICAgIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDQ1RMKSA9IEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX05PX0VWRU5UMCB8IEFVWF9BTkFJRl9BRENDVExfQ01EX0VOOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEdQVCB0cmlnZ2VyOiBDb25maWd1cmUgZXZlbnQgcm91dGluZyB2aWEgTUNVX0VWIHRvIHRoZSBBVVggZG9tYWluCisgICAgICAgIEhXUkVHKEVWRU5UX0JBU0UgKyBFVkVOVF9PX0FVWFNFTDApID0gdHJpZ2dlcjsKKyAgICAgICAgSFdSRUcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENDVEwpID0gQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfTUNVX0VWIHwgQVVYX0FOQUlGX0FEQ0NUTF9DTURfRU47CisgICAgfQorCisgICAgLy8gQ29uZmlndXJlIHRoZSBBREMKKyAgICBBREk4Qml0c1NldChBVVhfQURJNF9CQVNFLCBBRElfNF9BVVhfT19BREMwLCBzYW1wbGVUaW1lIDw8IEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQX1MpOworCisgICAgLy8gUmVsZWFzZSByZXNldCBhbmQgZW5hYmxlIHRoZSBBREMKKyAgICBBREk4Qml0c1NldChBVVhfQURJNF9CQVNFLCBBRElfNF9BVVhfT19BREMwLCBBRElfNF9BVVhfQURDMF9FTl9NIHwgQURJXzRfQVVYX0FEQzBfUkVTRVRfTl9NKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERpc2FibGVzIHNjYWxpbmcgb2YgdGhlIEFEQyBpbnB1dAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcodm9pZCkKK3sKKyAgICBBREk4Qml0c1NldChBVVhfQURJNF9CQVNFLCBBRElfNF9BVVhfT19BREMxLCBBRElfNF9BVVhfQURDMV9TQ0FMRV9ESVNfTSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBGbHVzaGVzIHRoZSBBREMgRklGTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWEFEQ0ZsdXNoRmlmbyh2b2lkKQoreworICAgIEhXUkVHQklUVyhBVVhfQU5BSUZfQkFTRSArIEFVWF9BTkFJRl9PX0FEQ0NUTCwgMSkgPSAxOyAvLyBDTUQ6IEVOKDEpIC0+IEZMVVNIKDMpCisgICAgSFdSRUdCSVRXKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDQ1RMLCAxKSA9IDA7IC8vIENNRDogRkxVU0goMykgLT4gRU4oMSkKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFdhaXRzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoZSBBREMgRklGTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitBVVhBRENSZWFkRmlmbyh2b2lkKSB7CisKKyAgICAvLyBXYWl0IHVudGlsIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzYW1wbGUgaW4gdGhlIEZJRk8KKyAgICB3aGlsZSAoSFdSRUcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENGSUZPU1RBVCkgJiBBVVhfQU5BSUZfQURDRklGT1NUQVRfRU1QVFlfTSk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IHNhbXBsZSBmcm9tIHRoZSBGSUZPCisgICAgcmV0dXJuIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDRklGTyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZXR1cm5zIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIEFEQyBGSUZPLCB3aXRob3V0IHdhaXRpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQVVYQURDUG9wRmlmbyh2b2lkKSB7CisKKyAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IHNhbXBsZSBmcm9tIHRoZSBGSUZPLiBJZiB0aGUgRklGTyBpcyBlbXB0eSwgdGhpcworICAgIC8vIGdlbmVyYXRlcyBBREMgRklGTyB1bmRlcmZsb3cKKyAgICByZXR1cm4gSFdSRUcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENGSUZPKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJldHVybnMgdGhlIGdhaW4gdmFsdWUgdXNlZCB3aGVuIGFkanVzdGluZyBmb3IgQURDIGdhaW4vb2Zmc2V0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorQVVYQURDR2V0QWRqdXN0bWVudEdhaW4odWludDMyX3QgcmVmU291cmNlKQoreworICAgIGludDMyX3QgZ2FpbjsKKyAgICBpZiAocmVmU291cmNlID09IEFVWEFEQ19SRUZfRklYRUQpIHsKKyAgICAgICAgLy8gQVVYQURDX1JFRl9GSVhFRCA9PT4gQUJTX0dBSU4KKyAgICAgICAgZ2FpbiA9IChIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19TT0NfQURDX0FCU19HQUlOKSAmIEZDRkcxX1NPQ19BRENfQUJTX0dBSU5fU09DX0FEQ19BQlNfR0FJTl9URU1QMV9NKSA+PiBGQ0ZHMV9TT0NfQURDX0FCU19HQUlOX1NPQ19BRENfQUJTX0dBSU5fVEVNUDFfUzsKKyAgICB9IGVsc2UgeworICAgICAgLy8gQVVYQURDX1JFRl9WRERTX1JFTCA9PT4gUkVMX0dBSU4KKyAgICAgICAgZ2FpbiA9IChIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19TT0NfQURDX1JFTF9HQUlOKSAmIEZDRkcxX1NPQ19BRENfUkVMX0dBSU5fU09DX0FEQ19SRUxfR0FJTl9URU1QMV9NKSA+PiBGQ0ZHMV9TT0NfQURDX1JFTF9HQUlOX1NPQ19BRENfUkVMX0dBSU5fVEVNUDFfUzsKKyAgICB9CisgICAgcmV0dXJuIGdhaW47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWUgdXNlZCB3aGVuIGFkanVzdGluZyBmb3IgQURDIGdhaW4vb2Zmc2V0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldCh1aW50MzJfdCByZWZTb3VyY2UpCit7CisgICAgaW50OF90IG9mZnNldDsKKyAgICBpZiAoIHJlZlNvdXJjZSA9PSBBVVhBRENfUkVGX0ZJWEVEICkgeworICAgICAgICAvLyBBVVhBRENfUkVGX0ZJWEVEID09PiBBQlNfT0ZGU0VUCisgICAgICAgIG9mZnNldCA9IEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX1NPQ19BRENfT0ZGU0VUX0lOVCkgPj4gRkNGRzFfU09DX0FEQ19PRkZTRVRfSU5UX1NPQ19BRENfQUJTX09GRlNFVF9URU1QMV9TOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFVWEFEQ19SRUZfVkREU19SRUwgPT0+IFJFTF9PRkZTRVQKKyAgICAgICAgb2Zmc2V0ID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fU09DX0FEQ19PRkZTRVRfSU5UKSA+PiBGQ0ZHMV9TT0NfQURDX09GRlNFVF9JTlRfU09DX0FEQ19SRUxfT0ZGU0VUX1RFTVAxX1M7CisgICAgfQorICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb252ZXJ0cyBhbiAiaWRlYWwiIEFEQyB2YWx1ZSB0byBtaWNyb3ZvbHRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMoaW50MzJfdCBmaXhlZFJlZlZvbHRhZ2UsIGludDMyX3QgYWRjVmFsdWUpCit7CisgICAgLy8gQ2hvcCBvZmYgNCBiaXRzIGR1cmluZyBjYWxjdWxhdGlvbnMgdG8gYXZvaWQgMzItYml0IG92ZXJmbG93CisgICAgZml4ZWRSZWZWb2x0YWdlID4+PSA0OworICAgIHJldHVybiAoKChhZGNWYWx1ZSAqIGZpeGVkUmVmVm9sdGFnZSkgKyAyMDQ3KSAvIDQwOTUpIDw8IDQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb252ZXJ0cyBhIG51bWJlciBvZiBtaWNyb3ZvbHRzIHRvIGNvcnJlc3BvbmRpbmcgImlkZWFsIiBBREMgdmFsdWUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitpbnQzMl90CitBVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZShpbnQzMl90IGZpeGVkUmVmVm9sdGFnZSwgaW50MzJfdCBtaWNyb3ZvbHRzKQoreworICAgIC8vIENob3Agb2ZmIDQgYml0cyBkdXJpbmcgY2FsY3VsYXRpb25zIHRvIGF2b2lkIDMyLWJpdCBvdmVyZmxvdworICAgIGZpeGVkUmVmVm9sdGFnZSA+Pj0gNDsKKyAgICBtaWNyb3ZvbHRzID4+PSA0OworICAgIHJldHVybiAoKG1pY3Jvdm9sdHMgKiA0MDk1KSArIChmaXhlZFJlZlZvbHRhZ2UgLyAyKSkgLyBmaXhlZFJlZlZvbHRhZ2U7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBQZXJmb3JtcyBBREMgdmFsdWUgZ2FpbiBhbmQgb2Zmc2V0IGFkanVzdG1lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitpbnQzMl90CitBVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQoaW50MzJfdCBhZGNWYWx1ZSwgaW50MzJfdCBnYWluLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICAvLyBBcHBseSBnYWluIGFuZCBvZmZzZXQgYWRqdXN0bWVudAorICAgIGFkY1ZhbHVlID0gKCgoYWRjVmFsdWUgKyBvZmZzZXQpICogZ2FpbikgKyAxNjM4NCkgLyAzMjc2ODsKKworICAgIC8vIFNhdHVyYXRlCisgICAgaWYgKGFkY1ZhbHVlIDwgMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKGFkY1ZhbHVlID4gNDA5NSkgeworICAgICAgICByZXR1cm4gNDA5NTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYWRjVmFsdWU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUGVyZm9ybXMgdGhlIGludmVyc2Ugb2YgdGhlIEFEQyB2YWx1ZSBnYWluIGFuZCBvZmZzZXQgYWRqdXN0bWVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK0FVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0KGludDMyX3QgYWRjVmFsdWUsIGludDMyX3QgZ2FpbiwgaW50MzJfdCBvZmZzZXQpCit7CisgICAgLy8gQXBwbHkgaW52ZXJzZSBnYWluIGFuZCBvZmZzZXQgYWRqdXN0bWVudAorICAgIGFkY1ZhbHVlID0gKCgoYWRjVmFsdWUgKiAzMjc2OCkgKyAoZ2FpbiAvIDIpKSAvIGdhaW4pIC0gb2Zmc2V0OworCisgICAgLy8gU2F0dXJhdGUKKyAgICBpZiAoYWRjVmFsdWUgPCAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoYWRjVmFsdWUgPiA0MDk1KSB7CisgICAgICAgIHJldHVybiA0MDk1OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBhZGNWYWx1ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfYWRjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3NTJhZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9hZGMuaApAQCAtMCwwICsxLDU5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF9hZGMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQxNTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQVVYIEFuYWxvZy10by1EaWdpdGFsCisqICAgICAgICAgICAgICAgICAgQ29udmVydGVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGF1eF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYXV4YWRjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQVVYX0FEQ19IX18KKyNkZWZpbmUgX19BVVhfQURDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19ldmVudC5oPgorI2luY2x1ZGUgPGluYy9od19hZGkuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpXzRfYXV4Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF9hbmFpZi5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQVVYQURDRGlzYWJsZSAgICAgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENEaXNhYmxlCisgICAgI2RlZmluZSBBVVhBRENFbmFibGVBc3luYyAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ0VuYWJsZUFzeW5jCisgICAgI2RlZmluZSBBVVhBRENFbmFibGVTeW5jICAgICAgICAgICAgICAgIE5PUk9NX0FVWEFEQ0VuYWJsZVN5bmMKKyAgICAjZGVmaW5lIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcgICAgICAgTk9ST01fQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZworICAgICNkZWZpbmUgQVVYQURDRmx1c2hGaWZvICAgICAgICAgICAgICAgICBOT1JPTV9BVVhBRENGbHVzaEZpZm8KKyAgICAjZGVmaW5lIEFVWEFEQ1JlYWRGaWZvICAgICAgICAgICAgICAgICAgTk9ST01fQVVYQURDUmVhZEZpZm8KKyAgICAjZGVmaW5lIEFVWEFEQ1BvcEZpZm8gICAgICAgICAgICAgICAgICAgTk9ST01fQVVYQURDUG9wRmlmbworICAgICNkZWZpbmUgQVVYQURDR2V0QWRqdXN0bWVudEdhaW4gICAgICAgICBOT1JPTV9BVVhBRENHZXRBZGp1c3RtZW50R2FpbgorICAgICNkZWZpbmUgQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldCAgICAgICBOT1JPTV9BVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0CisgICAgI2RlZmluZSBBVVhBRENWYWx1ZVRvTWljcm92b2x0cyAgICAgICAgIE5PUk9NX0FVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzCisgICAgI2RlZmluZSBBVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZSAgICAgICAgIE5PUk9NX0FVWEFEQ01pY3Jvdm9sdHNUb1ZhbHVlCisgICAgI2RlZmluZSBBVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQgTk9ST01fQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgI2RlZmluZSBBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCBOT1JPTV9BVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBBREMgcmVmZXJlbmNlIHNvdXJjZXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhBRENfUkVGX0ZJWEVEICAgICAgICAgICAgICAgICAgICAoMCA8PCBBRElfNF9BVVhfQURDUkVGMF9TUkNfUykKKyNkZWZpbmUgQVVYQURDX1JFRl9WRERTX1JFTCAgICAgICAgICAgICAgICAgKDEgPDwgQURJXzRfQVVYX0FEQ1JFRjBfU1JDX1MpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgQURDIEZJRk8gc3RhdHVzIGJpdHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhBRENfRklGT19FTVBUWV9NICAgICAgICAgICAgICAgICAoQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0VNUFRZX00pCisjZGVmaW5lIEFVWEFEQ19GSUZPX0FMTU9TVF9GVUxMX00gICAgICAgICAgIChBVVhfQU5BSUZfQURDRklGT1NUQVRfQUxNT1NUX0ZVTExfTSkKKyNkZWZpbmUgQVVYQURDX0ZJRk9fRlVMTF9NICAgICAgICAgICAgICAgICAgKEFVWF9BTkFJRl9BRENGSUZPU1RBVF9GVUxMX00pCisjZGVmaW5lIEFVWEFEQ19GSUZPX1VOREVSRkxPV19NICAgICAgICAgICAgIChBVVhfQU5BSUZfQURDRklGT1NUQVRfVU5ERVJGTE9XX00pCisjZGVmaW5lIEFVWEFEQ19GSUZPX09WRVJGTE9XX00gICAgICAgICAgICAgIChBVVhfQU5BSUZfQURDRklGT1NUQVRfT1ZFUkZMT1dfTSkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHN1cHBvcnRlZCBBREMgdHJpZ2dlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhBRENfVFJJR0dFUl9NQU5VQUwgICAgICAgICAgICAgICAoRVZFTlRfQVVYU0VMMF9FVl9OT05FKQorI2RlZmluZSBBVVhBRENfVFJJR0dFUl9HUFQwQSAgICAgICAgICAgICAgICAoRVZFTlRfQVVYU0VMMF9FVl9HUFQwQSkKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfR1BUMEIgICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfR1BUMEIpCisjZGVmaW5lIEFVWEFEQ19UUklHR0VSX0dQVDFBICAgICAgICAgICAgICAgIChFVkVOVF9BVVhTRUwwX0VWX0dQVDFBKQorI2RlZmluZSBBVVhBRENfVFJJR0dFUl9HUFQxQiAgICAgICAgICAgICAgICAoRVZFTlRfQVVYU0VMMF9FVl9HUFQxQikKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfR1BUMkEgICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfR1BUMkEpCisjZGVmaW5lIEFVWEFEQ19UUklHR0VSX0dQVDJCICAgICAgICAgICAgICAgIChFVkVOVF9BVVhTRUwwX0VWX0dQVDJCKQorI2RlZmluZSBBVVhBRENfVFJJR0dFUl9HUFQzQSAgICAgICAgICAgICAgICAoRVZFTlRfQVVYU0VMMF9FVl9HUFQzQSkKKyNkZWZpbmUgQVVYQURDX1RSSUdHRVJfR1BUM0IgICAgICAgICAgICAgICAgKEVWRU5UX0FVWFNFTDBfRVZfR1BUM0IpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBBREMgc2FtcGxpbmcgdHlwZSBmb3Igc3luY2hyb25vdXMgb3BlcmF0aW9uLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzJQN19VUyAgICAgICAgICAgMworI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfNVAzX1VTICAgICAgICAgICA0CisjZGVmaW5lIEFVWEFEQ19TQU1QTEVfVElNRV8xMFA2X1VTICAgICAgICAgIDUKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzIxUDNfVVMgICAgICAgICAgNgorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfNDJQNl9VUyAgICAgICAgICA3CisjZGVmaW5lIEFVWEFEQ19TQU1QTEVfVElNRV84NVAzX1VTICAgICAgICAgIDgKKyNkZWZpbmUgQVVYQURDX1NBTVBMRV9USU1FXzE3MF9VUyAgICAgICAgICAgOQorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfMzQxX1VTICAgICAgICAgICAxMAorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfNjgyX1VTICAgICAgICAgICAxMQorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfMVAzN19NUyAgICAgICAgICAxMgorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfMlA3M19NUyAgICAgICAgICAxMworI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfNVA0Nl9NUyAgICAgICAgICAxNAorI2RlZmluZSBBVVhBRENfU0FNUExFX1RJTUVfMTBQOV9NUyAgICAgICAgICAxNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRXF1aXZhbGVudCB2b2x0YWdlcyBmb3IgZml4ZWQgQURDIHJlZmVyZW5jZSwgaW4gbWljcm92b2x0cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWEFEQ19GSVhFRF9SRUZfVk9MVEFHRV9OT1JNQUwgICAgIDQzMDAwMDAKKyNkZWZpbmUgQVVYQURDX0ZJWEVEX1JFRl9WT0xUQUdFX1VOU0NBTEVEICAgMTQ3ODUwMAorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBBREMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkOgorLy8hIC0gQmVmb3JlIHJlLWVuYWJsaW5nIHRoZSBBREMgdXNpbmcgXHJlZiBBVVhBRENFbmFibGVBc3luYygpIG9yCisvLyEgICBccmVmIEFVWEFEQ0VuYWJsZVN5bmMoKQorLy8hIC0gQmVmb3JlIGVudGVyaW5nIHN5c3RlbSBzdGFuZGJ5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYQURDRGlzYWJsZSh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgQURDIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9uLgorLy8hCisvLyEgSW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgdGhlIEFEQyBzYW1wbGVzIGNvbnRpbnVvdXNseSBiZXR3ZWVuCisvLyEgY29udmVyc2lvbnMuCisvLyEKKy8vISBUaGUgQURDIHRyaWdnZXIgc3RhcnRzIHRoZSBjb252ZXJzaW9uLiBOb3RlIHRoYXQgdGhlIGZpcnN0IGNvbnZlcnNpb24gbWF5CisvLyEgYmUgaW52YWxpZCBpZiB0aGUgc2FtcGxpbmcgcGVyaW9kIGlzIHRvbyBzaG9ydC4KKy8vIQorLy8hIEFEQyBpbnB1dCBzY2FsaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhZnRlciBkZXZpY2UgcmVzZXQsIGFuZCBpcyBhbHNvIHJlLQorLy8hIGVuYWJsZWQgYnkgXHJlZiBBVVhBRENEaXNhYmxlKCkuIFRvIGRpc2FibGUgaW5wdXQgc2NhbGluZywgY2FsbAorLy8hIFxyZWYgQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZygpIGJlZm9yZSBjYWxsaW5nIFxyZWYgQVVYQURDRW5hYmxlQXN5bmMoKS4KKy8vIQorLy8hIFxwYXJhbSByZWZTb3VyY2UKKy8vISAgICAgQURDIHJlZmVyZW5jZSBzb3VyY2U6CisvLyEgICAgIC0gXHJlZiBBVVhBRENfUkVGX0ZJWEVEIChub21pbmFsbHkgNC4zIFYpCisvLyEgICAgIC0gXHJlZiBBVVhBRENfUkVGX1ZERFNfUkVMIChub21pbmFsbHkgVkREUykKKy8vISBccGFyYW0gdHJpZ2dlcgorLy8hICAgICBBREMgY29udmVyc2lvbiB0cmlnZ2VyOgorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfTUFOVUFMCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQwQQorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMEIKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDFBCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQxQgorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMkEKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDJCCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQzQQorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUM0IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhBRENFbmFibGVBc3luYyh1aW50MzJfdCByZWZTb3VyY2UsIHVpbnQzMl90IHRyaWdnZXIpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBBREMgZm9yIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4KKy8vIQorLy8hIEluIHN5bmNocm9ub3VzIG9wZXJhdGlvbiwgdGhlIEFEQyBpcyBpZGxlIGJldHdlZW4gYSBjb252ZXJzaW9uIGFuZAorLy8hIHN1YnNlcXVlbnQgc2FtcGxpbmdzLgorLy8hCisvLyEgVGhlIEFEQyB0cmlnZ2VyIHN0YXJ0cyBzYW1wbGluZyB3aXRoIHNwZWNpZmllZCBkdXJhdGlvbiwgZm9sbG93ZWQgYnkgdGhlCisvLyEgY29udmVyc2lvbi4gTm90ZSB0aGF0IHRoZSBmaXJzdCBjb252ZXJzaW9uIG1heSBiZSBpbnZhbGlkIGlmIHRoZSBpbml0aWFsCisvLyEgc2FtcGxpbmcgcGVyaW9kIGlzIHRvbyBzaG9ydC4KKy8vIQorLy8hIEFEQyBpbnB1dCBzY2FsaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhZnRlciBkZXZpY2UgcmVzZXQsIGFuZCBpcyBhbHNvIHJlLQorLy8hIGVuYWJsZWQgYnkgXHJlZiBBVVhBRENEaXNhYmxlKCkuIFRvIGRpc2FibGUgaW5wdXQgc2NhbGluZywgY2FsbAorLy8hIFxyZWYgQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZygpIGJlZm9yZSBjYWxsaW5nIFxyZWYgQVVYQURDRW5hYmxlU3luYygpLgorLy8hCisvLyEgXHBhcmFtIHJlZlNvdXJjZQorLy8hICAgICBBREMgcmVmZXJlbmNlIHNvdXJjZToKKy8vISAgICAgLSBccmVmIEFVWEFEQ19SRUZfRklYRUQgKG5vbWluYWxseSA0LjMgVikKKy8vISAgICAgLSBccmVmIEFVWEFEQ19SRUZfVkREU19SRUwgKG5vbWluYWxseSBWRERTKQorLy8hIFxwYXJhbSBzYW1wbGVUaW1lCisvLyEgICAgIEFEQyBzYW1wbGluZyB0aW1lOgorLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzJQN19VUworLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzVQM19VUworLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzEwUDZfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8yMVAzX1VTCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfNDJQNl9VUworLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzg1UDNfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8xNzBfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8zNDFfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV82ODJfVVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8xUDM3X01TCisvLyEgICAgIC0gXHJlZiBBVVhBRENfU0FNUExFX1RJTUVfMlA3M19NUworLy8hICAgICAtIFxyZWYgQVVYQURDX1NBTVBMRV9USU1FXzVQNDZfTVMKKy8vISAgICAgLSBccmVmIEFVWEFEQ19TQU1QTEVfVElNRV8xMFA5X01TCisvLyEgXHBhcmFtIHRyaWdnZXIKKy8vISAgICAgQURDIGNvbnZlcnNpb24gdHJpZ2dlcjoKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX01BTlVBTAorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMEEKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDBCCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQxQQorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUMUIKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDJBCisvLyEgICAgIC0gXHJlZiBBVVhBRENfVFJJR0dFUl9HUFQyQgorLy8hICAgICAtIFxyZWYgQVVYQURDX1RSSUdHRVJfR1BUM0EKKy8vISAgICAgLSBccmVmIEFVWEFEQ19UUklHR0VSX0dQVDNCCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYQURDRW5hYmxlU3luYyh1aW50MzJfdCByZWZTb3VyY2UsIHVpbnQzMl90IHNhbXBsZVRpbWUsIHVpbnQzMl90IHRyaWdnZXIpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBzY2FsaW5nIG9mIHRoZSBBREMgaW5wdXQuCisvLyEKKy8vISBCeSBkZWZhdWx0LCB0aGUgQURDIG9wZXJhdGVzIGludGVybmFsbHkgb24gYSB2ZXJzaW9uIG9mIHRoZSBpbnB1dCBzaWduYWwKKy8vISB0aGF0IGhhcyBiZWVuIHNjYWxlZCBkb3duIGJ5IGEgZmFjdG9yIDx0dD4xNDA4IC8gNDA5NTwvdHQ+LiBUaGlzIGZ1bmN0aW9uCisvLyEgZGlzYWJsZXMgdGhhdCBzY2FsaW5nLCBhbGxvd2luZyBmb3IgYSB0cmFkZS1vZmYgYmV0d2VlbiBkeW5hbWljIHJhbmdlIGFuZAorLy8hIGFuZCByZXNvbHV0aW9uLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBBREMgaXMgZGlzYWJsZWQsIGJlZm9yZQorLy8hICAgICAgIGNhbGxpbmcgXHJlZiBBVVhBRENFbmFibGVTeW5jKCkgb3IgXHJlZiBBVVhBRENFbmFibGVBc3luYygpLgorLy8hIFxub3RlIERpZmZlcmVudCBpbnB1dCBtYXhpbXVtIHJhdGluZ3MgYXBwbHkgd2hlbiBpbnB1dCBzY2FsaW5nIGlzIGRpc2FibGVkLgorLy8hICAgICAgIFZpb2xhdGluZyB0aGVzZSBtYXkgZGFtYWdlIHRoZSBkZXZpY2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZyh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRmx1c2hlcyB0aGUgQURDIEZJRk8uCisvLyEKKy8vISBUaGlzIGVtcHRpZXMgdGhlIEZJRk8gYW5kIGNsZWFycyB0aGUgdW5kZXJmbG93L292ZXJmbG93IGZsYWdzLgorLy8hCisvLyEgTm90ZTogVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBBREMgaXMgZW5hYmxlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhBRENGbHVzaEZpZm8odm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdlbmVyYXRlcyBhIHNpbmdsZSBtYW51YWwgQURDIHRyaWdnZXIuCisvLyEKKy8vISBGb3Igc3luY2hyb25vdXMgbW9kZSwgdGhlIHRyaWdnZXIgc3RhcnRzIHNhbXBsaW5nIGZvbGxvd2VkIGJ5IGNvbnZlcnNpb24uCisvLyEgRm9yIGFzeW5jaHJvbm91cyBtb2RlLCB0aGUgdHJpZ2dlciBzdGFydHMgY29udmVyc2lvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQVVYQURDR2VuTWFudWFsVHJpZ2dlcih2b2lkKQoreworICAgIEhXUkVHKEFVWF9BTkFJRl9CQVNFICsgQVVYX0FOQUlGX09fQURDVFJJRykgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIGZsYWdzIGluZGljYXRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgQURDIEZJRk8uCisvLyEKKy8vISBUaGUgZmxhZ3MgaW5kaWNhdGUgRklGTyBlbXB0eSwgZnVsbCBhbmQgYWxtb3N0IGZ1bGwsIGFuZCB3aGV0aGVyCisvLyEgb3ZlcmZsb3cvdW5kZXJmbG93IGhhcyBvY2N1cnJlZC4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISAgICAgQSBjb21iaW5hdGlvbiAoYml0d2lzZSBPUikgb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSUZPX0VNUFRZX00KKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSUZPX0FMTU9TVF9GVUxMX00KKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSUZPX0ZVTExfTQorLy8hICAgICAtIFxyZWYgQVVYQURDX0ZJRk9fVU5ERVJGTE9XX00KKy8vISAgICAgLSBccmVmIEFVWEFEQ19GSUZPX09WRVJGTE9XX00KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FVWEFEQ0dldEZpZm9TdGF0dXModm9pZCkKK3sKKyAgICByZXR1cm4gSFdSRUcoQVVYX0FOQUlGX0JBU0UgKyBBVVhfQU5BSUZfT19BRENGSUZPU1RBVCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdhaXRzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoZSBBREMgRklGTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2FpdHMgdW50aWwgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHNhbXBsZSBpbiB0aGUgQURDIEZJRk8uIEl0CisvLyEgdGhlbiBwb3BzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBzYW1wbGUgZnJvbSB0aGUgRklGTy4KKy8vIQorLy8hIFxub3RlIFRoaXMgcHJvY2VkdXJlIHdpbGwgZGVhZGxvY2sgaWYgY2FsbGVkIHdpdGhvdXQgc2V0dGluZyB1cCBBREMgdHJpZ2dlcgorLy8hICAgICAgIGdlbmVyYXRpb24gaW4gYWR2YW5jZS4gVGhlIHRyaWdnZXIgY2FuIGVpdGhlciBiZSBtYW51YWwgb3IgcGVyaW9kaWNhbAorLy8hICAgICAgICh1c2luZyBhIEdQVCkuCisvLyEKKy8vISBccmV0dXJuIFRoZSBmaXJzdCAoMTItYml0KSBzYW1wbGUgZnJvbSB0aGUgQURDIEZJRk8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQVVYQURDUmVhZEZpZm8odm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIGZpcnN0IHNhbXBsZSBpbiB0aGUgQURDIEZJRk8sIHdpdGhvdXQgd2FpdGluZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd2FpdCwgYW5kIG11c3Qgb25seSBiZSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhdCBsZWFzdAorLy8hIG9uZSBzYW1wbGUgaW4gdGhlIEFEQyBGSUZPLiBPdGhlcndpc2UgdGhlIGNhbGwgd2lsbCBnZW5lcmF0ZSBGSUZPIHVuZGVyZmxvdworLy8hIChccmVmIEFVWEFEQ19GSUZPX1VOREVSRkxPV19NKS4KKy8vIQorLy8hIFxyZXR1cm4gVGhlIGZpcnN0ICgxMi1iaXQpIHNhbXBsZSBmcm9tIHRoZSBBREMgRklGTywgb3IgYW4gdW5kZWZpbmVkIHZhbHVlCisvLyEgICAgICAgICBpZiB0aGUgRklGTyBpcyBlbXB0eQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBBVVhBRENQb3BGaWZvKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZWxlY3RzIGludGVybmFsIG9yIGV4dGVybmFsIGlucHV0IGZvciB0aGUgQURDLgorLy8hCisvLyEgTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbHNvIHNlbGVjdHMgdGhlIHNhbWUgaW5wdXQgZm9yIEFVWF9DT01QQi4KKy8vIQorLy8hIFxwYXJhbSBpbnB1dAorLy8hICAgICBJbnRlcm5hbC9leHRlcm5hbCBpbnB1dCBzZWxlY3Rpb246CisvLyEgICAgIC0gXHJlZiBBRENfQ09NUEJfSU5fRENPVVBMCisvLyEgICAgIC0gXHJlZiBBRENfQ09NUEJfSU5fVlNTCisvLyEgICAgIC0gXHJlZiBBRENfQ09NUEJfSU5fVkREUworLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPNworLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPNgorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPNQorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPNAorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPMworLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPMgorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPMQorLy8hICAgICAtIFxyZWYgQURDX0NPTVBCX0lOX0FVWElPMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhBRENTZWxlY3RJbnB1dCh1aW50MzJfdCBpbnB1dCkKK3sKKyAgICBIYXBpU2VsZWN0QURDQ29tcEJJbnB1dChpbnB1dCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIGdhaW4gdmFsdWUgdXNlZCB3aGVuIGFkanVzdGluZyBmb3IgQURDIGdhaW4vb2Zmc2V0LgorLy8hCisvLyEgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGdhaW4gdmFsdWUgdG8gYmUgdXNlZCB3aXRoCisvLyEgXHJlZiBBVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQoKSBvcgorLy8hIFxyZWYgQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQoKS4gVGhlIGdhaW4gdmFsdWUgaXMgZm91bmQgZHVyaW5nCisvLyEgY2hpcCBtYW51ZmFjdHVyaW5nIGFuZCBpcyBzdG9yZWQgaW4gdGhlIGZhY3RvcnkgY29uZmlndXJhdGlvbiwgRkNGRzEuCisvLyEKKy8vISBccGFyYW0gcmVmU291cmNlCisvLyEgICAgIEFEQyByZWZlcmVuY2Ugc291cmNlOgorLy8hICAgICAtIFxyZWYgQVVYQURDX1JFRl9GSVhFRCAobm9taW5hbGx5IDQuMyBWKQorLy8hICAgICAtIFxyZWYgQVVYQURDX1JFRl9WRERTX1JFTCAobm9taW5hbGx5IFZERFMpCisvLyEKKy8vISBccmV0dXJuCisvLyEgICAgIFRoZSBnYWluIHZhbHVlIHRvIGJlIHVzZWQgaW4gYWRqdXN0bWVudHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBBVVhBRENHZXRBZGp1c3RtZW50R2Fpbih1aW50MzJfdCByZWZTb3VyY2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWUgdXNlZCB3aGVuIGFkanVzdGluZyBmb3IgQURDIGdhaW4vb2Zmc2V0LgorLy8hCisvLyEgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCB2YWx1ZSB0byBiZSB1c2VkIHdpdGgKKy8vISBccmVmIEFVWEFEQ0FkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCgpIG9yCisvLyEgXHJlZiBBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCgpLiBUaGUgb2Zmc2V0IHZhbHVlIGlzIGZvdW5kCisvLyEgZHVyaW5nIGNoaXAgbWFudWZhY3R1cmluZyBhbmQgaXMgc3RvcmVkIGluIHRoZSBmYWN0b3J5IGNvbmZpZ3VyYXRpb24sCisvLyEgRkNGRzEuCisvLyEKKy8vISBccGFyYW0gcmVmU291cmNlCisvLyEgICAgIEFEQyByZWZlcmVuY2Ugc291cmNlOgorLy8hICAgICAtIFxyZWYgQVVYQURDX1JFRl9GSVhFRCAobm9taW5hbGx5IDQuMyBWKQorLy8hICAgICAtIFxyZWYgQVVYQURDX1JFRl9WRERTX1JFTCAobm9taW5hbGx5IFZERFMpCisvLyEKKy8vISBccmV0dXJuCisvLyEgICAgIFRoZSBvZmZzZXQgdmFsdWUgdG8gYmUgdXNlZCBpbiBhZGp1c3RtZW50cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQodWludDMyX3QgcmVmU291cmNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udmVydHMgYW4gImFkanVzdGVkIiBBREMgdmFsdWUgdG8gbWljcm92b2x0cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCB3aGVuIG1lYXN1cmluZyB3aXRoIGZpeGVkIEFEQyByZWZlcmVuY2UKKy8vISAoXHJlZiBBVVhBRENfUkVGX0ZJWEVEKS4gVGhlIHNwZWNpZmllZCByZWZlcmVuY2Ugdm9sdGFnZSBhY2NvdW50cyBmb3IKKy8vISB3aGV0aGVyIHRoZSBzYW1wbGVkIEFEQyBpbnB1dCBpcyBzY2FsZWQgZG93biBiZWZvcmUgY29udmVyc2lvbiBvciBub3QuCisvLyEKKy8vISBccGFyYW0gZml4ZWRSZWZWb2x0YWdlCisvLyEgICAgIEZpeGVkIHJlZmVyZW5jZSB2b2x0YWdlLCBpbiBtaWNyb3ZvbHRzCisvLyEgICAgIC0gXHJlZiBBVVhBRENfRklYRURfUkVGX1ZPTFRBR0VfTk9STUFMIHdoZW4gdXNpbmcgc2NhbGVkIGlucHV0IChub3JtYWwpCisvLyEgICAgIC0gXHJlZiBBVVhBRENfRklYRURfUkVGX1ZPTFRBR0VfVU5TQ0FMRUQgd2hlbiB1c2luZyB1bnNjYWxlZCBpbnB1dAorLy8hIFxwYXJhbSBhZGNWYWx1ZQorLy8hICAgICBUaGUgQURDIHZhbHVlCisvLyEKKy8vISBccmV0dXJuCisvLyEgICAgIFRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBtaWNyb3ZvbHRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMoaW50MzJfdCBmaXhlZFJlZlZvbHRhZ2UsIGludDMyX3QgYWRjVmFsdWUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb252ZXJ0cyBhIG51bWJlciBvZiBtaWNyb3ZvbHRzIHRvIGNvcnJlc3BvbmRpbmcgImFkanVzdGVkIiBBREMgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBtZWFzdXJpbmcgd2l0aCBmaXhlZCBBREMgcmVmZXJlbmNlCisvLyEgKFxyZWYgQVVYQURDX1JFRl9GSVhFRCkuIFRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIHZvbHRhZ2UgYWNjb3VudHMgZm9yCisvLyEgd2hldGhlciB0aGUgc2FtcGxlZCBBREMgaW5wdXQgaXMgc2NhbGVkIGRvd24gYmVmb3JlIGNvbnZlcnNpb24gb3Igbm90LgorLy8hCisvLyEgXHBhcmFtIGZpeGVkUmVmVm9sdGFnZQorLy8hICAgICBGaXhlZCByZWZlcmVuY2Ugdm9sdGFnZSwgaW4gbWljcm92b2x0cworLy8hICAgICAtIFxyZWYgQVVYQURDX0ZJWEVEX1JFRl9WT0xUQUdFX05PUk1BTCB3aGVuIHVzaW5nIHNjYWxlZCBpbnB1dCAobm9ybWFsKQorLy8hICAgICAtIFxyZWYgQVVYQURDX0ZJWEVEX1JFRl9WT0xUQUdFX1VOU0NBTEVEIHdoZW4gdXNpbmcgdW5zY2FsZWQgaW5wdXQKKy8vISBccGFyYW0gbWljcm92b2x0cworLy8hICAgICBUaGUgbnVtYmVyIG9mIG1pY3Jvdm9sdHMKKy8vIQorLy8hIFxyZXR1cm4KKy8vISAgICAgVGhlIGNvcnJlc3BvbmRpbmcgZXhwZWN0ZWQgQURDIHZhbHVlIChhZGp1c3RlZCBmb3IgQURDIGdhaW4vb2Zmc2V0KQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IEFVWEFEQ01pY3Jvdm9sdHNUb1ZhbHVlKGludDMyX3QgZml4ZWRSZWZWb2x0YWdlLCBpbnQzMl90IG1pY3Jvdm9sdHMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQZXJmb3JtcyBBREMgdmFsdWUgZ2FpbiBhbmQgb2Zmc2V0IGFkanVzdG1lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgbWVhc3VyZWQgQURDIHZhbHVlIGNvbXBlbnNhdGVzIGZvciB0aGUgaW50ZXJuYWwgZ2FpbgorLy8hIGFuZCBvZmZzZXQgaW4gdGhlIEFEQy4KKy8vIQorLy8hIFxwYXJhbSBhZGNWYWx1ZQorLy8hICAgICAxMi1iaXQgQURDIHVuYWRqdXN0ZWQgdmFsdWUKKy8vISBccGFyYW0gZ2FpbgorLy8hICAgICBHYWluIGFkanVzdG1lbnQgdmFsdWUgcHJvdmlkZWQgYnkgXHJlZiBBVVhBRENHZXRBZGp1c3RtZW50R2FpbigpCisvLyEgXHBhcmFtIG9mZnNldAorLy8hICAgICBPZmZzZXQgYWRqdXN0bWVudCB2YWx1ZSBwcm92aWRlZCBieSBccmVmIEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQoKQorLy8hCisvLyEgXHJldHVybgorLy8hICAgICAxMi1iaXQgQURDIGFkanVzdGVkIHZhbHVlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0KGludDMyX3QgYWRjVmFsdWUsIGludDMyX3QgZ2FpbiwgaW50MzJfdCBvZmZzZXQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQZXJmb3JtcyB0aGUgaW52ZXJzZSBvZiB0aGUgQURDIHZhbHVlIGdhaW4gYW5kIG9mZnNldCBhZGp1c3RtZW50LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgZXhwZWN0ZWQgbWVhc3VyZWQgQURDIHZhbHVlLCB3aXRob3V0IGdhaW4gYW5kCisvLyEgb2Zmc2V0IGNvbXBlbnNhdGlvbiwgZm9yIGEgZ2l2ZW4gImlkZWFsIiBBREMgdmFsdWUuIFRoZSBmdW5jdGlvbiBjYW4gZm9yCisvLyEgZXhhbXBsZSBiZSB1c2VkIHRvIGZpbmQgQURDIHZhbHVlIHRocmVzaG9sZHMgdG8gYmUgdXNlZCBpbiBTZW5zb3IKKy8vISBDb250cm9sbGVyIHRhc2sgY29uZmlndXJhdGlvbnMuCisvLyEKKy8vISBccGFyYW0gYWRjVmFsdWUKKy8vISAgICAgMTItYml0IEFEQyBhZGp1c3RlZCB2YWx1ZQorLy8hIFxwYXJhbSBnYWluCisvLyEgICAgIEdhaW4gYWRqdXN0bWVudCB2YWx1ZSBwcm92aWRlZCBieSBccmVmIEFVWEFEQ0dldEFkanVzdG1lbnRHYWluKCkKKy8vISBccGFyYW0gb2Zmc2V0CisvLyEgICAgIE9mZnNldCBhZGp1c3RtZW50IHZhbHVlIHByb3ZpZGVkIGJ5IFxyZWYgQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldCgpCisvLyEKKy8vISBccmV0dXJuCisvLyEgICAgIDEyLWJpdCBBREMgdW5hZGp1c3RlZCB2YWx1ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IEFVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0KGludDMyX3QgYWRjVmFsdWUsIGludDMyX3QgZ2FpbiwgaW50MzJfdCBvZmZzZXQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9BVVhBRENEaXNhYmxlCisgICAgICAgICN1bmRlZiAgQVVYQURDRGlzYWJsZQorICAgICAgICAjZGVmaW5lIEFVWEFEQ0Rpc2FibGUgICAgICAgICAgICAgICAgICAgUk9NX0FVWEFEQ0Rpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ0VuYWJsZUFzeW5jCisgICAgICAgICN1bmRlZiAgQVVYQURDRW5hYmxlQXN5bmMKKyAgICAgICAgI2RlZmluZSBBVVhBRENFbmFibGVBc3luYyAgICAgICAgICAgICAgIFJPTV9BVVhBRENFbmFibGVBc3luYworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDRW5hYmxlU3luYworICAgICAgICAjdW5kZWYgIEFVWEFEQ0VuYWJsZVN5bmMKKyAgICAgICAgI2RlZmluZSBBVVhBRENFbmFibGVTeW5jICAgICAgICAgICAgICAgIFJPTV9BVVhBRENFbmFibGVTeW5jCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENEaXNhYmxlSW5wdXRTY2FsaW5nCisgICAgICAgICN1bmRlZiAgQVVYQURDRGlzYWJsZUlucHV0U2NhbGluZworICAgICAgICAjZGVmaW5lIEFVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcgICAgICAgUk9NX0FVWEFEQ0Rpc2FibGVJbnB1dFNjYWxpbmcKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ0ZsdXNoRmlmbworICAgICAgICAjdW5kZWYgIEFVWEFEQ0ZsdXNoRmlmbworICAgICAgICAjZGVmaW5lIEFVWEFEQ0ZsdXNoRmlmbyAgICAgICAgICAgICAgICAgUk9NX0FVWEFEQ0ZsdXNoRmlmbworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDUmVhZEZpZm8KKyAgICAgICAgI3VuZGVmICBBVVhBRENSZWFkRmlmbworICAgICAgICAjZGVmaW5lIEFVWEFEQ1JlYWRGaWZvICAgICAgICAgICAgICAgICAgUk9NX0FVWEFEQ1JlYWRGaWZvCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENQb3BGaWZvCisgICAgICAgICN1bmRlZiAgQVVYQURDUG9wRmlmbworICAgICAgICAjZGVmaW5lIEFVWEFEQ1BvcEZpZm8gICAgICAgICAgICAgICAgICAgUk9NX0FVWEFEQ1BvcEZpZm8KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ0dldEFkanVzdG1lbnRHYWluCisgICAgICAgICN1bmRlZiAgQVVYQURDR2V0QWRqdXN0bWVudEdhaW4KKyAgICAgICAgI2RlZmluZSBBVVhBRENHZXRBZGp1c3RtZW50R2FpbiAgICAgICAgIFJPTV9BVVhBRENHZXRBZGp1c3RtZW50R2FpbgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDR2V0QWRqdXN0bWVudE9mZnNldAorICAgICAgICAjdW5kZWYgIEFVWEFEQ0dldEFkanVzdG1lbnRPZmZzZXQKKyAgICAgICAgI2RlZmluZSBBVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0ICAgICAgIFJPTV9BVVhBRENHZXRBZGp1c3RtZW50T2Zmc2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhBRENWYWx1ZVRvTWljcm92b2x0cworICAgICAgICAjdW5kZWYgIEFVWEFEQ1ZhbHVlVG9NaWNyb3ZvbHRzCisgICAgICAgICNkZWZpbmUgQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMgICAgICAgICBST01fQVVYQURDVmFsdWVUb01pY3Jvdm9sdHMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ01pY3Jvdm9sdHNUb1ZhbHVlCisgICAgICAgICN1bmRlZiAgQVVYQURDTWljcm92b2x0c1RvVmFsdWUKKyAgICAgICAgI2RlZmluZSBBVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZSAgICAgICAgIFJPTV9BVVhBRENNaWNyb3ZvbHRzVG9WYWx1ZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgICAgICN1bmRlZiAgQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgICAgICNkZWZpbmUgQVVYQURDQWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0IFJPTV9BVVhBRENBZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWEFEQ1VuYWRqdXN0VmFsdWVGb3JHYWluQW5kT2Zmc2V0CisgICAgICAgICN1bmRlZiAgQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyAgICAgICAgI2RlZmluZSBBVVhBRENVbmFkanVzdFZhbHVlRm9yR2FpbkFuZE9mZnNldCBST01fQVVYQURDVW5hZGp1c3RWYWx1ZUZvckdhaW5BbmRPZmZzZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQVVYX0FEQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3NtcGguYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9zbXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhZjE2YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF9zbXBoLmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF9zbXBoLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAxLTEzIDE2OjU5OjU1ICswMTAwIChUdWUsIDEzIEphbiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyMzY1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQVVYIFNlbWFwaG9yZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYXV4X3NtcGguaD4KKworLy8gU2VlIGF1eF9zbXBoLmggZm9yIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfc21waC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3NtcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJjMjFhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3NtcGguaApAQCAtMCwwICsxLDI3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF9zbXBoLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA3LTE2IDEyOjEyOjA0ICswMjAwIChUaHUsIDE2IEp1bCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0MTUxCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEFVWCBTZW1hcGhvcmUKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYXV4X2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBhdXhzbXBoX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQVVYX1NNUEhfSF9fCisjZGVmaW5lIF9fQVVYX1NNUEhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYXV4X3NtcGguaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHZW5lcmFsIGNvbnN0YW50cyBhbmQgZGVmaW5lcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1NNUEhfRlJFRSAgICAgMHgwMDAwMDAwMSAvLyBNQ1UgU2VtYXBob3JlIGhhcyBub3QgYmVlbiBjbGFpbWVkCisjZGVmaW5lIEFVWF9TTVBIX0NMQUlNRUQgIDB4MDAwMDAwMDAgLy8gTUNVIFNlbWFwaG9yZSBoYXMgYmVlbiBjbGFpbWVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFVWFNNUEhBY3F1aXJlIGFuZCBBVVhTTVBIUmVsZWFzZQorLy8gYXMgdGhlIHVpMzJTZW1hcGhvcmUgcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1NNUEhfMCAgICAgICAgICAgICAgICAwIC8vIEFVWCBTZW1hcGhvcmUgIDAKKyNkZWZpbmUgQVVYX1NNUEhfMSAgICAgICAgICAgICAgICAxIC8vIEFVWCBTZW1hcGhvcmUgIDEKKyNkZWZpbmUgQVVYX1NNUEhfMiAgICAgICAgICAgICAgICAyIC8vIEFVWCBTZW1hcGhvcmUgIDIKKyNkZWZpbmUgQVVYX1NNUEhfMyAgICAgICAgICAgICAgICAzIC8vIEFVWCBTZW1hcGhvcmUgIDMKKyNkZWZpbmUgQVVYX1NNUEhfNCAgICAgICAgICAgICAgICA0IC8vIEFVWCBTZW1hcGhvcmUgIDQKKyNkZWZpbmUgQVVYX1NNUEhfNSAgICAgICAgICAgICAgICA1IC8vIEFVWCBTZW1hcGhvcmUgIDUKKyNkZWZpbmUgQVVYX1NNUEhfNiAgICAgICAgICAgICAgICA2IC8vIEFVWCBTZW1hcGhvcmUgIDYKKyNkZWZpbmUgQVVYX1NNUEhfNyAgICAgICAgICAgICAgICA3IC8vIEFVWCBTZW1hcGhvcmUgIDcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEFjcXVpcmUgYW4gQVVYIHNlbWFwaG9yZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWNxdWlyZXMgdGhlIGdpdmVuIEFVWCBzZW1hcGhvcmUsIGJsb2NraW5nIHRoZSBjYWxsIHVudGlsCisvLyEgdGhlIHNlbWFwaG9yZSBpcyBhdmFpbGFibGUuCisvLyEKKy8vISBcbm90ZSBUaGUgc2VtYXBob3JlIGNhbiBhbHNvIGJlIGFjcXVpcmVkIGJ5IHRoZSBkZWRpY2F0ZWQgU2Vuc29yIENvbnRyb2xsZXIuCisvLyEgVGhlIFN5c3RlbSBDUFUgbWFzdGVyIGNhbiB0aHVzIGJlIGNvbXBldGluZyBmb3IgdGhlIHNoYXJlZCByZXNvdXJjZSwgaS5lLgorLy8hIHRoZSBzcGVjaWZpZWQgc2VtYXBob3JlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZW1hcGhvcmUgaXMgdGhlIHNlbWFwaG9yZSBudW1iZXIuCisvLyEgLSBccmVmIEFVWF9TTVBIXzAKKy8vISAtIFxyZWYgQVVYX1NNUEhfMQorLy8hIC0gXHJlZiBBVVhfU01QSF8yCisvLyEgLSBccmVmIEFVWF9TTVBIXzMKKy8vISAtIFxyZWYgQVVYX1NNUEhfNAorLy8hIC0gXHJlZiBBVVhfU01QSF81CisvLyEgLSBccmVmIEFVWF9TTVBIXzYKKy8vISAtIFxyZWYgQVVYX1NNUEhfNworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgQVVYU01QSFRyeUFjcXVpcmUoKSwgQVVYU01QSFJlbGVhc2UoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitBVVhTTVBIQWNxdWlyZSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8wKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8xKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8yKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF8zKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF80KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF81KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF82KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBBVVhfU01QSF83KSk7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHNlbWFwaG9yZSB0byBiZSByZWxlYXNlZCBzdWNoIHRoYXQgaXQgY2FuIGJlIGNsYWltZWQKKyAgICAvLyBTZW1hcGhvcmUgcmVnaXN0ZXIgcmVhZHMgMSB3aGVuIGxvY2sgd2FzIGFjcXVpcmVkIG90aGVyd2lzZSAwCisgICAgLy8gKGkuZS4gQVVYX1NNUEhfQ0xBSU1FRCkuCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyhBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCArIDQgKiB1aTMyU2VtYXBob3JlKSA9PQorICAgICAgICAgICAgQVVYX1NNUEhfQ0xBSU1FRCkKKyAgICB7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUcnkgdG8gYWNxdWlyZSBhbiBBVVggc2VtYXBob3JlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB0cmllcyB0byBhY3F1aXJlIHRoZSBnaXZlbiBBVVggc2VtYXBob3JlLCBpZiB0aGUgc2VtYXBob3JlCisvLyEgY291bGQgbm90IGJlIGNsYWltZWQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisvLyEKKy8vISBcbm90ZSBUaGUgc2VtYXBob3JlIGNhbiBhbHNvIGJlIGFjcXVpcmVkIGJ5IHRoZSBkZWRpY2F0ZWQgU2Vuc29yIENvbnRyb2xsZXIuCisvLyEgVGhlIFN5c3RlbSBDUFUgbWFzdGVyIGNhbiB0aHVzIGJlIGNvbXBldGluZyBmb3IgdGhlIHNoYXJlZCByZXNvdXJjZSwgaS5lLgorLy8hIHRoZSBzcGVjaWZpZWQgc2VtYXBob3JlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZW1hcGhvcmUgaXMgdGhlIHNlbWFwaG9yZSBudW1iZXIuCisvLyEgLSBccmVmIEFVWF9TTVBIXzAKKy8vISAtIFxyZWYgQVVYX1NNUEhfMQorLy8hIC0gXHJlZiBBVVhfU01QSF8yCisvLyEgLSBccmVmIEFVWF9TTVBIXzMKKy8vISAtIFxyZWYgQVVYX1NNUEhfNAorLy8hIC0gXHJlZiBBVVhfU01QSF81CisvLyEgLSBccmVmIEFVWF9TTVBIXzYKKy8vISAtIFxyZWYgQVVYX1NNUEhfNworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRydWUgaWYgc2VtYXBob3JlIHdhcyBhY3F1aXJlZCwgZmFsc2Ugb3RoZXJ3aXNlCisvLyEKKy8vISBcc2EgQVVYU01QSEFjcXVpcmUoKSwgQVVYU01QSFJlbGVhc2UoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBVVhTTVBIVHJ5QWNxdWlyZSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKQoreworICAgIHVpbnQzMl90IHVpMzJTZW1hUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzcpKTsKKworICAgIC8vCisgICAgLy8gQVVYIFNlbWFwaG9yZSByZWdpc3RlciByZWFkcyAxIGlmIGxvY2sgd2FzIGFjcXVpcmVkCisgICAgLy8gKGkuZS4gU01QSF9GUkVFIHdoZW4gcmVhZCkgYnV0IHN1YnNlcXVlbnQgcmVhZHMgd2lsbCByZWFkIDAuCisgICAgLy8KKyAgICB1aTMyU2VtYVJlZyA9IEhXUkVHKEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwICsgNCAqIHVpMzJTZW1hcGhvcmUpOworCisgICAgcmV0dXJuICh1aTMyU2VtYVJlZyA9PSBBVVhfU01QSF9GUkVFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVsZWFzZSBhbiBBVVggc2VtYXBob3JlIGJ5IFN5c3RlbSBDUFUgbWFzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgZ2l2ZW4gQVVYIHNlbWFwaG9yZS4KKy8vIQorLy8hIFxub3RlIEl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBwcm92aWRlIHRoZSBjb252ZW50aW9uIGZvciBjbGVhcmluZworLy8hIHNlbWFwaG9yZS4KKy8vIQorLy8hIFxub3RlIFRoZSBzZW1hcGhvcmUgY2FuIGFsc28gYmUgYWNxdWlyZWQgYnkgdGhlIGRlZGljYXRlZCBTZW5zb3IgQ29udHJvbGxlci4KKy8vISBUaGUgU3lzdGVtIENQVSBtYXN0ZXIgY2FuIHRodXMgYmUgY29tcGV0aW5nIGZvciB0aGUgc2hhcmVkIHJlc291cmNlLCBpLmUuCisvLyEgdGhlIHNwZWNpZmllZCBzZW1hcGhvcmUuCisvLyEKKy8vISBccGFyYW0gdWkzMlNlbWFwaG9yZSBpcyB0aGUgc2VtYXBob3JlIG51bWJlci4KKy8vISAtIFxyZWYgQVVYX1NNUEhfMAorLy8hIC0gXHJlZiBBVVhfU01QSF8xCisvLyEgLSBccmVmIEFVWF9TTVBIXzIKKy8vISAtIFxyZWYgQVVYX1NNUEhfMworLy8hIC0gXHJlZiBBVVhfU01QSF80CisvLyEgLSBccmVmIEFVWF9TTVBIXzUKKy8vISAtIFxyZWYgQVVYX1NNUEhfNgorLy8hIC0gXHJlZiBBVVhfU01QSF83CisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBVVhTTVBIQWNxdWlyZSgpLCBBVVhTTVBIVHJ5QWNxdWlyZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFNNUEhSZWxlYXNlKHVpbnQzMl90IHVpMzJTZW1hcGhvcmUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IEFVWF9TTVBIXzcpKTsKKworICAgIC8vCisgICAgLy8gTm8gY2hlY2sgYmVmb3JlIHJlbGVhc2UuIEl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBwcm92aWRlIHRoZQorICAgIC8vIGNvbnZlbnRpb25zIGZvciB3aG8gYW5kIHdoZW4gYSBzZW1hcGhvcmUgY2FuIGJlIHJlbGVhc2VkLgorICAgIC8vCisgICAgSFdSRUcoQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDAgKyA0ICogdWkzMlNlbWFwaG9yZSkgPQorICAgICAgICBBVVhfU01QSF9GUkVFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQVVYX1NNUEhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90ZGMuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJkNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3RkYy5jCkBAIC0wLDAgKzEsMTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYXV4X3RkYy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wMS0xMyAxNjo1OTo1NSArMDEwMCAoVHVlLCAxMyBKYW4gMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0MjM2NQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEFVWCBUaW1lIHRvIERpZ2l0YWwgQ29udmVydGVyIGludGVyZmFjZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYXV4X3RkYy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQVVYVERDQ29uZmlnU2V0CisgICAgI2RlZmluZSBBVVhURENDb25maWdTZXQgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFREQ0NvbmZpZ1NldAorICAgICN1bmRlZiAgQVVYVERDTWVhc3VyZW1lbnREb25lCisgICAgI2RlZmluZSBBVVhURENNZWFzdXJlbWVudERvbmUgICAgICAgICAgIE5PUk9NX0FVWFREQ01lYXN1cmVtZW50RG9uZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSBvcGVyYXRpb24gb2YgdGhlIEFVWCBUREMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhURENDb25maWdTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJTdGFydENvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyU3RvcENvbmRpdGlvbikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0aGUgQVVYIFREQyBpcyBpbiB0aGUgaWRsZSBzdGF0ZSBiZWZvcmUgY2hhbmdpbmcgdGhlCisgICAgLy8gY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIHdoaWxlKCEoKEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1NUQVQpICYgQVVYX1REQ19TVEFUX1NUQVRFX00pID09CisgICAgICAgICAgICBBVVhfVERDX1NUQVRfU1RBVEVfSURMRSkpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2xlYXIgcHJldmlvdXMgcmVzdWx0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX0NUTCkgPSAweDA7CisKKyAgICAvLworICAgIC8vIENoYW5nZSB0aGUgY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1RSSUdTUkMpID0gdWkzMlN0YXJ0Q29uZGl0aW9uIHwgdWkzMlN0b3BDb25kaXRpb247Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgZG9uZSBtZWFzdXJpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQVVYVERDTWVhc3VyZW1lbnREb25lKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisgICAgdWludDMyX3QgdWkzMlN0YXR1czsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgZG9uZSBtZWFzdXJpbmcuCisgICAgLy8KKyAgICB1aTMyUmVnID0gSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU1RBVCk7CisgICAgaWYodWkzMlJlZyAmIEFVWF9URENfU1RBVF9ET05FKQorICAgIHsKKyAgICAgICAgdWkzMlN0YXR1cyA9IEFVWF9URENfRE9ORTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyUmVnICYgQVVYX1REQ19TVEFUX1NBVCkKKyAgICB7CisgICAgICAgIHVpMzJTdGF0dXMgPSBBVVhfVERDX1RJTUVPVVQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpMzJTdGF0dXMgPSBBVVhfVERDX0JVU1k7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAodWkzMlN0YXR1cyk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGRjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhNDdhNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90ZGMuaApAQCAtMCwwICsxLDgzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF90ZGMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMDMgMDk6NTQ6NDcgKzAxMDAgKFR1ZSwgMDMgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ5MzMKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgQVVYIFRpbWUtdG8tRGlnaXRhbCBDb252ZXJ0ZXIKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYXV4X2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBhdXh0ZGNfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19BVVhfVERDX0hfXworI2RlZmluZSBfX0FVWF9URENfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYXV4X3RkYy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBBVVhURENDb25maWdTZXQgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFREQ0NvbmZpZ1NldAorICAgICNkZWZpbmUgQVVYVERDTWVhc3VyZW1lbnREb25lICAgICAgICAgICBOT1JPTV9BVVhURENNZWFzdXJlbWVudERvbmUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIHN0YXR1cyBvZiBhIEFVWCBUREMgbWVhc3VyZW1lbnQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfVERDX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9URENfVElNRU9VVCAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1REQ19ET05FICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGNvbnRyb2wgb2YgYSBBVVggVERDLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQVVYX1REQ19SVU5TWU5DICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVERDX1JVTiAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9URENfQUJPUlQgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHBvc3NpYmxlIHN0YXRlcyBvZiB0aGUgVERDIGludGVybmFsIHN0YXRlIG1hY2hpbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhURENfV0FJVF9TVEFSVCAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfV0FJVF9TVEFSVCkKKyNkZWZpbmUgQVVYVERDX1dBSVRfU1RBUlRfQ05URU4gICAoQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfU1RBUlRfU1RPUF9DTlRfRU4pCisjZGVmaW5lIEFVWFREQ19JRExFICAgICAgICAgICAgICAgKEFVWF9URENfU1RBVF9TVEFURV9JRExFKQorI2RlZmluZSBBVVhURENfQ0xSQ05UICAgICAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfQ0xSX0NOVCkKKyNkZWZpbmUgQVVYVERDX1dBSVRfU1RPUCAgICAgICAgICAoQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfU1RPUCkKKyNkZWZpbmUgQVVYVERDX1dBSVRfU1RPUF9DTlRET1dOICAoQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfU1RPUF9DTlREV04pCisjZGVmaW5lIEFVWFREQ19HRVRSRVNVTFRTICAgICAgICAgKEFVWF9URENfU1RBVF9TVEFURV9HRVRfUkVTVUxUKQorI2RlZmluZSBBVVhURENfUE9SICAgICAgICAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfUE9SKQorI2RlZmluZSBBVVhURENfV0FJVF9DTFJDTlRfRE9ORSAgIChBVVhfVERDX1NUQVRfU1RBVEVfV0FJVF9DTFJfQ05UX0RPTkUpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9GQUxMICAgICAgICAgKEFVWF9URENfU1RBVF9TVEFURV9TVEFSVF9GQUxMKQorI2RlZmluZSBBVVhURENfRk9SQ0VfU1RPUCAgICAgICAgIChBVVhfVERDX1NUQVRfU1RBVEVfRk9SQ0VfU1RPUCkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIGNvbnRyb2xsaW5nIHRoZSBBVVggVERDLiBWYWx1ZXMgY2FuIGJlIHBhc3NlZCB0byBBVVhURENDb25maWdTZXQoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWFREQ19TVE9QUE9MX1JJUyAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfUE9MX0hJR0gpIC8vIFJpc2luZyBlZGdlIHBvbGFyaXR5IGZvciBzdG9wIGV2ZW50CisjZGVmaW5lIEFVWFREQ19TVE9QUE9MX0ZBTEwgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfUE9MX0xPVykgIC8vIEZhbGxpbmcgZWRnZSBwb2xhcml0eSBmb3Igc3RvcCBldmVudAorCisjZGVmaW5lIEFVWFREQ19TVE9QX0FPTl9SVENfQ0gyICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FPTl9SVENfQ0gyKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhfQ09NUEEgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhfQ09NUEEpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWF9DT01QQiAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWF9DT01QQikKKyNkZWZpbmUgQVVYVERDX1NUT1BfSVNSQ19SRVNFVCAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfSVNSQ19SRVNFVCkKKyNkZWZpbmUgQVVYVERDX1NUT1BfVElNRVIwX0VWICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfVElNRVIwX0VWKQorI2RlZmluZSBBVVhURENfU1RPUF9USU1FUjFfRVYgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19USU1FUjFfRVYpCisjZGVmaW5lIEFVWFREQ19TVE9QX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1NNUEhfQVVUT1RBS0VfRE9ORSkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQURDX0RPTkUgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQURDX0RPTkUpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FEQ19GSUZPX0FMTU9TVF9GVUxMKQorI2RlZmluZSBBVVhURENfU1RPUF9PQlNNVVgwICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19PQlNNVVgwKQorI2RlZmluZSBBVVhURENfU1RPUF9PQlNNVVgxICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19PQlNNVVgxKQorI2RlZmluZSBBVVhURENfU1RPUF9BT05fU1cgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BT05fU1cpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FPTl9QUk9HX1dVICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FPTl9QUk9HX1dVKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzAgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzApCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMSAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMSkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU8yICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8yKQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzMgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzMpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPNCAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPNCkKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU81ICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU81KQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzYgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzYpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPNyAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPNykKKyNkZWZpbmUgQVVYVERDX1NUT1BfQVVYSU84ICAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU84KQorI2RlZmluZSBBVVhURENfU1RPUF9BVVhJTzkgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzkpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMTAgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTApCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMTEgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTEpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMTIgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTIpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMTMgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTMpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMTQgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTQpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FVWElPMTUgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTUpCisjZGVmaW5lIEFVWFREQ19TVE9QX0FDTEtfUkVGICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FDTEtfUkVGKQorI2RlZmluZSBBVVhURENfU1RPUF9NQ1VfRVYgICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19NQ1VfRVYpCisjZGVmaW5lIEFVWFREQ19TVE9QX1REQ19QUkUgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1REQ19QUkUpCisKKyNkZWZpbmUgQVVYVERDX1NUQVJUUE9MX1JJUyAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfUE9MX0hJR0gpIC8vIFJpc2luZyBlZGdlIHBvbGFyaXR5IGZvciBzdGFydCBldmVudAorI2RlZmluZSBBVVhURENfU1RBUlRQT0xfRkFMTCAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9QT0xfTE9XKSAgLy8gRmFsbGluZyBlZGdlIHBvbGFyaXR5IGZvciBzdGFydCBldmVudAorCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BT05fUlRDX0NIMiAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BT05fUlRDX0NIMikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWF9DT01QQSAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWF9DT01QQSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWF9DT01QQiAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWF9DT01QQikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0lTUkNfUkVTRVQgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0lTUkNfUkVTRVQpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9USU1FUjBfRVYgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19USU1FUjBfRVYpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9USU1FUjFfRVYgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19USU1FUjFfRVYpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9TTVBIX0FVVE9UQUtFX0RPTkUgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19TTVBIX0FVVE9UQUtFX0RPTkUpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BRENfRE9ORSAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BRENfRE9ORSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FEQ19GSUZPX0FMTU9TVF9GVUxMIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FEQ19GSUZPX0FMTU9TVF9GVUxMKQorI2RlZmluZSBBVVhURENfU1RBUlRfT0JTTVVYMCAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfT0JTTVVYMCkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX09CU01VWDEgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX09CU01VWDEpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BT05fU1cgICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BT05fU1cpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BT05fUFJPR19XVSAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BT05fUFJPR19XVSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMCAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMCkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMSAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMiAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMyAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMykKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPNCAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPNCkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPNSAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPNSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPNiAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPNikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPNyAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPNykKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPOCAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPOCkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPOSAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPOSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMTAgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTApCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzExICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzExKQorI2RlZmluZSBBVVhURENfU1RBUlRfQVVYSU8xMiAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xMikKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FVWElPMTMgICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTMpCisjZGVmaW5lIEFVWFREQ19TVEFSVF9BVVhJTzE0ICAgICAgICAgICAgICAoQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzE0KQorI2RlZmluZSBBVVhURENfU1RBUlRfQVVYSU8xNSAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xNSkKKyNkZWZpbmUgQVVYVERDX1NUQVJUX0FDTEtfUkVGICAgICAgICAgICAgIChBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FDTEtfUkVGKQorI2RlZmluZSBBVVhURENfU1RBUlRfTUNVX0VWICAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfTUNVX0VWKQorI2RlZmluZSBBVVhURENfU1RBUlRfVERDX1BSRSAgICAgICAgICAgICAgKEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfVERDX1BSRSkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBwb3NzaWJsZSBzYXR1cmF0aW9uIHZhbHVlcyBzZXQgdXNpbmcgQVVYVERDTGltaXRTZXQoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWFREQ19TQVRfNDA5NiAgICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTIpCisjZGVmaW5lIEFVWFREQ19TQVRfODE5MiAgICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTMpCisjZGVmaW5lIEFVWFREQ19TQVRfMTYzODQgICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTQpCisjZGVmaW5lIEFVWFREQ19TQVRfMzI3NjggICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTUpCisjZGVmaW5lIEFVWFREQ19TQVRfNjU1MzYgICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTYpCisjZGVmaW5lIEFVWFREQ19TQVRfMTMxMDcyICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTcpCisjZGVmaW5lIEFVWFREQ19TQVRfMjYyMTQ0ICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTgpCisjZGVmaW5lIEFVWFREQ19TQVRfNTI0Mjg4ICAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMTkpCisjZGVmaW5lIEFVWFREQ19TQVRfMTA0ODU3NiAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMjApCisjZGVmaW5lIEFVWFREQ19TQVRfMjA5NzE1MiAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMjEpCisjZGVmaW5lIEFVWFREQ19TQVRfNDE5NDMwNCAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMjIpCisjZGVmaW5lIEFVWFREQ19TQVRfODM4ODYwOCAgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMjMpCisjZGVmaW5lIEFVWFREQ19TQVRfMTY3NzcyMTYgICAgIChBVVhfVERDX1NBVENGR19MSU1JVF9SMjQpCisjZGVmaW5lIEFVWFREQ19OVU1fU0FUX1ZBTFMgICAgIDE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZkZWYgRFJJVkVSTElCX0RFQlVHCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxpbnRlcm5hbAorLy8hIFxicmllZiBDaGVja3MgYW4gQVVYIFREQyBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBBVVggVERDIHBvcnQgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitBVVhURENCYXNlVmFsaWQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgcmV0dXJuKHVpMzJCYXNlID09IEFVWF9URENfQkFTRSk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgb2YgdGhlIEFVWCBUREMgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIEFVWCBUREMgaW50ZXJuYWwgc3RhdGUKKy8vISBtYWNoaW5lLgorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KKy8vISBQb3NzaWJsZSBzdGF0ZXMgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lIGFyZToKKy8vISAtIFxyZWYgQVVYVERDX1dBSVRfU1RBUlQKKy8vISAtIFxyZWYgQVVYVERDX1dBSVRfU1RBUlRfQ05URU4KKy8vISAtIFxyZWYgQVVYVERDX0lETEUKKy8vISAtIFxyZWYgQVVYVERDX0NMUkNOVAorLy8hIC0gXHJlZiBBVVhURENfV0FJVF9TVE9QCisvLyEgLSBccmVmIEFVWFREQ19XQUlUX1NUT1BfQ05URE9XTgorLy8hIC0gXHJlZiBBVVhURENfR0VUUkVTVUxUUworLy8hIC0gXHJlZiBBVVhURENfUE9SCisvLyEgLSBccmVmIEFVWFREQ19XQUlUX0NMUkNOVF9ET05FCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9GQUxMCisvLyEgLSBccmVmIEFVWFREQ19GT1JDRV9TVE9QLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQVVYVERDU3RhdHVzR2V0KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzdGF0dXMgdmFsdWUgZm9yIHRoZSBjb3JyZWN0IEFESSBTbGF2ZS4KKyAgICAvLworICAgIHJldHVybigoSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU1RBVCkgJiBBVVhfVERDX1NUQVRfU1RBVEVfTSkgPj4KKyAgICAgICAgICAgQVVYX1REQ19TVEFUX1NUQVRFX1MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIG9wZXJhdGlvbiBvZiB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgc3RhcnQgYW5kIHN0b3AgZXZlbnQgZm9yIHRoZSBBVVggVERDLgorLy8hCisvLyEgVGhlIFxjIHVpMzJTdGFydENvbmRpdGlvbiBtdXN0IGJlIGEgYml0d2lzZSBPUiBvZiB0aGUgc3RhcnQgZXZlbnQgYW5kIHRoZQorLy8hIHBvbGFyaXR5IG9mIHRoZSBzdGFydCBldmVudC4gVGhlIHN0YXJ0IGV2ZW50cyBhcmU6CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BT05fUlRDX0NIMgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYX0NPTVBBCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhfQ09NUEIKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0lTUkNfUkVTRVQKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX1RJTUVSMF9FVgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfVElNRVIxX0VWCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9TTVBIX0FVVE9UQUtFX0RPTkUKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FEQ19ET05FCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BRENfRklGT19BTE1PU1RfRlVMTAorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfT0JTTVVYMAorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfT0JTTVVYMQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQU9OX1NXCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BT05fUFJPR19XVQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8wCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzEKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPMgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU8zCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzQKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPNQorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU82CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzcKKy8vISAtIFxyZWYgQVVYVERDX1NUQVJUX0FVWElPOAorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfQVVYSU85CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzEwCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzExCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzEyCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzEzCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzE0CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BVVhJTzE1CisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9BQ0xLX1JFRgorLy8hIC0gXHJlZiBBVVhURENfU1RBUlRfTUNVX0VWCisvLyEgLSBccmVmIEFVWFREQ19TVEFSVF9URENfUFJFCisvLyEKKy8vISBUaGUgcG9sYXJpdHkgb2YgdGhlIHN0YXJ0IGV2ZW50IGlzIGVpdGhlciByaXNpbmcgXHJlZiBBVVhURENfU1RBUlRQT0xfUklTCisvLyEgb3IgZmFsbGluZyBccmVmIEFVWFREQ19TVEFSVFBPTF9GQUxMLgorLy8hCisvLyEgVGhlIFxjIHVpMzJTdG9wQ29uZGl0aW9uIG11c3QgYmUgYSBiaXR3aXNlIE9SIG9mIHRoZSBzdG9wIGV2ZW50IGFuZCB0aGUKKy8vISBwb2xhcml0eSBvZiB0aGUgc3RvcCBldmVudC4gVGhlIHN0b3AgZXZlbnRzIGFyZToKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQU9OX1JUQ19DSDIKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYX0NPTVBBCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWF9DT01QQgorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9JU1JDX1JFU0VUCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX1RJTUVSMF9FVgorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9USU1FUjFfRVYKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfU01QSF9BVVRPVEFLRV9ET05FCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FEQ19ET05FCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX09CU01VWDAKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfT0JTTVVYMQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BT05fU1cKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQU9OX1BST0dfV1UKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8wCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzIKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8zCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPNAorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzUKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU82CisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPNworLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzgKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU85CisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMTAKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8xMQorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzEyCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FVWElPMTMKKy8vISAtIFxyZWYgQVVYVERDX1NUT1BfQVVYSU8xNAorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9BVVhJTzE1CisvLyEgLSBccmVmIEFVWFREQ19TVE9QX0FDTEtfUkVGCisvLyEgLSBccmVmIEFVWFREQ19TVE9QX01DVV9FVgorLy8hIC0gXHJlZiBBVVhURENfU1RPUF9URENfUFJFCisvLyEKKy8vISBUaGUgcG9sYXJpdHkgb2YgdGhlIHN0b3AgZXZlbnQgaXMgZWl0aGVyIHJpc2luZyBccmVmIEFVWFREQ19TVE9QUE9MX1JJUworLy8hIG9yIGZhbGxpbmcgXHJlZiBBVVhURENfU1RPUFBPTF9GQUxMLgorLy8hCisvLyEgXG5vdGUgVGhlIEFVWCBUREMgc2hvdWxkIG9ubHkgYmUgY29uZmlndXJlZCB3aGVuIHRoZSBBVVggVERDIGlzIGluIHRoZSBJZGxlCisvLyEgc3RhdGUuIFRvIGVuc3VyZSB0aGF0IHNvZnR3YXJlIGRvZXMgbm90IGxvY2sgdXAsIGl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgZW5zdXJlIHRoYXQgdGhlIEFVWCBUREMgaXMgYWN0dWFsbHkgaW4gaWRsZSB3aGVuIGNhbGxpbmcgXHJlZiBBVVhURENDb25maWdTZXQoKS4KKy8vISBUaGlzIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgXHJlZiBBVVhURENJZGxlKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hIFxwYXJhbSB1aTMyU3RhcnRDb25kaXRpb24gaXMgQVVYIFREQyBhIGJpdHdpc2UgT1Igb2YgYSBzdGFydCBldmVudCBhbmQgcG9sYXJpdHkuCisvLyEgXHBhcmFtIHVpMzJTdG9wQ29uZGl0aW9uIGlzIEFVWCBUREMgYSBiaXR3aXNlIE9SIG9mIGEgc3RvcCBldmVudCBhbmQgcG9sYXJpdHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEFVWFREQ0NvbmZpZ1NldCgpLCBccmVmIEFVWFREQ0lkbGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWFREQ0NvbmZpZ1NldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlN0YXJ0Q29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJTdG9wQ29uZGl0aW9uKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgaW4gaWRsZSBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBBVVggVERDIGludGVybmFsIHN0YXRlCisvLyEgbWFjaGluZSBpcyBpbiBpZGxlIG1vZGUuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHNldHRpbmcgdGhlIHBvbGFyaXR5CisvLyEgb2YgdGhlIHN0YXJ0IGFuZCBzdG9wIGV2ZW50LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiBzdGF0ZSBtYWNoaW5lIGlzIGluIGlkbGUgYW5kIHJldHVybnMgXGMgZmFsc2UKKy8vISBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBpbiBhbnkgb3RoZXIgc3RhdGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0FVWFREQ0lkbGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiB0aGUgQVVYIFREQyBpcyBpbiB0aGUgSWRsZSBzdGF0ZS4KKyAgICAvLworICAgIHJldHVybiAoKChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19TVEFUKSAmIEFVWF9URENfU1RBVF9TVEFURV9NKSA9PQorICAgICAgICAgICAgIEFVWF9URENfU1RBVF9TVEFURV9JRExFKSA/IHRydWUgOiBmYWxzZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSB0aGUgQVVYIFREQyBmb3IgYSBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYXJtaW5nIHRoZSBBVVggVERDIHRvIGJlZ2luIGEgbWVhc3VyZW1lbnQgYXMKKy8vISBzb29uIGFzIHRoZSBzdGFydCBjb25kaXRpb24gaXMgbWV0LiBUaGVyZSBhcmUgdHdvIHJ1biBtb2RlczoKKy8vISAtIFxyZWYgQVVYX1REQ19SVU5TWU5DIHdpbGwgd2FpdCBmb3IgYSBmYWxsaW5nIGV2ZW50IG9mIHRoZSBzdGFydCBwdWxzZSBiZWZvcmUKKy8vISAgIHN0YXJ0aW5nIG1lYXN1cmVtZW50IG9uIG5leHQgcmlzaW5nIGVkZ2Ugb2Ygc3RhcnQuIFRoaXMgZ3VhcmFudGVlcyBhbiBlZGdlCisvLyEgICB0cmlnZ2VyZWQgc3RhcnQgYW5kIGlzIHJlY29tbWVuZGVkIGZvciBmcmVxdWVuY3kgbWVhc3VyZW1lbnRzLiBJZiB0aGUKKy8vISAgIGZpcnN0IGZhbGxpbmcgZWRnZSBpcyBjbG9zZSB0byB0aGUgc3RhcnQgY29tbWFuZCBpdCBtYXkgYmUgbWlzc2VkLCBidXQKKy8vISAgIHRoZSBUREMgc2hhbGwgY2F0Y2ggbGF0ZXIgZmFsbGluZyBlZGdlcyBhbmQgaW4gYW55IGNhc2UgZ3VhcmFudGVlIGEKKy8vISAgIG1lYXN1cmVtZW50IHN0YXJ0IHN5bmNocm9ub3VzIHRvIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgc3RhcnQgZXZlbnQuCisvLyEgLSBUaGUgXHJlZiBBVVhfVERDX1JVTiBpcyBhc3luY2hyb25vdXMgc3RhcnQgYW5kIGFzeW5jaHJvbm91cyBzdG9wIG1vZGUuIFVzaW5nCisvLyEgICB0aGlzIGEgVERDIG1lYXN1cmVtZW50IG1heSBzdGFydCBpbW1lZGlhdGVseSBpZiBzdGFydCBpcyBoaWdoIGFuZCBoZW5jZSBpdAorLy8hICAgbWF5IG5vdCBnaXZlIHByZWNpc2UgZWRnZSB0byBlZGdlIG1lYXN1cmVtZW50cy4gVGhpcyBtb2RlIGlzIG9ubHkKKy8vISAgIHJlY29tbWVuZGVkIHdoZW4gc3RhcnQgcHVsc2UgaXMgZ3VhcmFudGVlZCB0byBhcnJpdmUgYXQgbGVhc3QgNyBjbG9jaworLy8hICAgcGVyaW9kcyBhZnRlciBjb21tYW5kLgorLy8hCisvLyEgXG5vdGUgVGhlIEFVWCBUREMgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYW5kIGluIElkbGUgbW9kZSBiZWZvcmUgY2FsbGluZyB0aGlzCisvLyEgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vISBccGFyYW0gdWkzMlJ1bk1vZGUgaXMgdGhlIHJ1biBtb2RlIGZvciB0aGUgQVVYIFREQy4KKy8vISAtIFxyZWYgQVVYX1REQ19SVU5TWU5DIDogU3luY2hyb25vdXMgcnVuIG1vZGUuCisvLyEgLSBccmVmIEFVWF9URENfUlVOIDogQXN5bmNocm9ub3VzIHJ1biBtb2RlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFREQ0VuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ1bk1vZGUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlJ1bk1vZGUgPT0gQVVYX1REQ19SVU4pIHx8CisgICAgICAgICAgICh1aTMyUnVuTW9kZSA9PSBBVVhfVERDX1JVTlNZTkMpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBBVVggVERDLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fQ1RMKSA9IHVpMzJSdW5Nb2RlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBGb3JjZSB0aGUgQVVYIFREQyBiYWNrIHRvIElkbGUgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3JjZSB0aGUgQVVYIFREQyBpbiBJZGxlIG1vZGUuIFRoZSBpbnRlcm5hbCBzdGF0ZQorLy8hIG1hY2hpbmUgd2lsbCBub3QgZ28gZGlyZWN0bHkgdG8gSWRsZSBtb2RlLCBzbyBpdCBpcyBsZWZ0IHRvIHRoZSBwcm9ncmFtbWVyIHRvCisvLyEgZW5zdXJlIHRoYXQgdGhlIHN0YXRlIG1hY2hpbmUgaXMgaW4gSWRsZSBtb2RlIGJlZm9yZSBkb2luZyBhbnkgbmV3CisvLyEgY29uZmlndXJhdGlvbi4gVGhpcyBjYW4gYmUgY2hlY2tlZCB1c2luZyBccmVmIEFVWFREQ0lkbGUoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhURENJZGxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQVVYVERDSWRsZUZvcmNlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cworICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBBYm9ydCBvcGVyYXRpb24gb2YgQVVYIFREQyBhbmQgZm9yY2UgaW50byBJZGxlIG1vZGUuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19DVEwpID0gQVVYX1REQ19DVExfQ01EX0FCT1JUOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayBpZiB0aGUgQVVYIFREQyBpcyBkb25lIG1lYXN1cmluZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgQVVYIFREQyBoYXMgZmluaXNoZWQgYQorLy8hIG1lYXN1cmVtZW50LiBUaGUgQVVYIFREQyBtYXkgaGF2ZSBjb21wbGV0ZWQgYSBtZWFzdXJlbWVudCBmb3IgdHdvIHJlYXNvbnMuCisvLyEgRWl0aGVyIGl0IGZpbmlzaCBzdWNjZXNzZnVsbHkgXHJlZiBBVVhfVERDX0RPTkUgb3IgaXQgZmFpbGVkIGR1ZSB0byBhIHRpbWVvdXQKKy8vISBccmVmIEFVWF9URENfVElNRU9VVC4gSWYgdGhlIEFVWCBUREMgaXMgc3RpbGwgbWVhc3VyaW5nIGl0IHRoaXMgZnVuY3Rpb24KKy8vISB3aWxsIHJldHVybiBccmVmIEFVWF9URENfQlVTWS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBhIG1lYXN1cmVtZW50OgorLy8hIC0gXHJlZiBBVVhfVERDX0RPTkUgOiBBbiBBVVggVERDIG1lYXN1cmVtZW50IGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKy8vISAtIFxyZWYgQVVYX1REQ19USU1FT1VUIDogQW4gQVVYIFREQyBtZWFzdXJlbWVudCBmYWlsZWQgZHVlIHRvIHRpbWVvdXQuCisvLyEgLSBccmVmIEFVWF9URENfQlVTWSA6IEFuIEFVWCBUREMgbWVhc3VyZW1lbnQgaXMgYmVpbmcgcGVyZm9ybWVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBBVVhURENNZWFzdXJlbWVudERvbmUodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBsYXRlc3QgbWVhc3VyZW1lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHJldHJpZXZpbmcgdGhlIHZhbHVlIG9mIHRoZSBsYXRlc3QgbWVhc3VyZW1lbnQKKy8vISBwZXJmb3JtZWQgYnkgdGhlIEFVWCBUREMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgQVVYIFREQy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBsYXRlc3QgbWVhc3VyZW1lbnQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitBVVhURENNZWFzdXJlbWVudEdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgbWVhc3VyZW1lbnQuCisgICAgLy8KKyAgICByZXR1cm4gKEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1JFU1VMVCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIHNhdHVyYXRpb24gbGltaXQgb2YgdGhlIG1lYXN1cmVtZW50LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBhIHNhdHVyYXRpb24gbGltaXQgZm9yIHRoZSBldmVudCBhY2N1bXVsYXRpb24KKy8vISByZWdpc3Rlci4gVGhlIHNhdHVyYXRpb24gbGltaXQgaXMgZGVmaW5lZCBhcyBhIGJpdCB3aWR0aCBvZiB0aGUKKy8vISBhY2N1bXVsYXRpb24gcmVnaXN0ZXIgYW5kIHRoZXJlZm9yZSBpbmNyZWFzZXMgaW4gcG93ZXIgb2YgMi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEgXHBhcmFtIHVpMzJMaW1pdCBpcyB0aGUgc2F0dXJhdGlvbiBsaW1pdC4KKy8vISAtIFxyZWYgQVVYVERDX1NBVF80MDk2CisvLyEgLSBccmVmIEFVWFREQ19TQVRfODE5MgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzE2Mzg0CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMzI3NjgKKy8vISAtIFxyZWYgQVVYVERDX1NBVF82NTUzNgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzEzMTA3MgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzI2MjE0NAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzUyNDI4OAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzEwNDg1NzYKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8yMDk3MTUyCisvLyEgLSBccmVmIEFVWFREQ19TQVRfNDE5NDMwNAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzgzODg2MDgKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xNjc3NzIxNiAoZGVmYXVsdCkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXG5vdGUgVGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgYWNjdW11bGF0aW9uIHJlZ2lzdGVyIG1pZ2h0IGluY3JlYXNlIHNsaWdodGx5IGJleW9uZAorLy8hIHRoZSBzYXR1cmF0aW9uIHZhbHVlIGJlZm9yZSB0aGUgc2F0dXJhdGlvbiB0YWtlcyBlZmZlY3QuCisvLyEKKy8vISBcc2EgXHJlZiBBVVhURENMaW1pdEdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFREQ0xpbWl0U2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyTGltaXQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyTGltaXQgPCBBVVhURENfTlVNX1NBVF9WQUxTKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBzYXR1cmF0aW9uIGxpbWl0LgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fU0FUQ0ZHKSA9IHVpMzJMaW1pdDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzYXR1cmF0aW9uIGxpbWl0IG9mIHRoZSBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBzYXR1cmF0aW9uIGZvciB0aGUKKy8vISBhY2N1bXVsYXRvciByZWdpc3Rlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHNhdHVyYXRpb24gbGltaXQuCisvLyEgLSBccmVmIEFVWFREQ19TQVRfNDA5NgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzgxOTIKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xNjM4NAorLy8hIC0gXHJlZiBBVVhURENfU0FUXzMyNzY4CisvLyEgLSBccmVmIEFVWFREQ19TQVRfNjU1MzYKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xMzEwNzIKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8yNjIxNDQKKy8vISAtIFxyZWYgQVVYVERDX1NBVF81MjQyODgKKy8vISAtIFxyZWYgQVVYVERDX1NBVF8xMDQ4NTc2CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMjA5NzE1MgorLy8hIC0gXHJlZiBBVVhURENfU0FUXzQxOTQzMDQKKy8vISAtIFxyZWYgQVVYVERDX1NBVF84Mzg4NjA4CisvLyEgLSBccmVmIEFVWFREQ19TQVRfMTY3NzcyMTYKKy8vIQorLy8hIFxzYSBccmVmIEFVWFREQ0xpbWl0U2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FVWFREQ0xpbWl0R2V0KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzYXR1cmF0aW9uIGxpbWl0LgorICAgIC8vCisgICAgcmV0dXJuIChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19TQVRDRkcpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgY291bnRlciBpZiBwb3NzaWJsZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW5hYmxlIHRoZSBBVVggVERDIHN0b3AvY29tcGFyZSBldmVudCBjb3VudGVyLgorLy8hIFRoZSBjb3VudGVyIGNhbiBiZSB1c2VkIHRvIG1lYXN1cmUgbXVsdGlwbGUgcGVyaW9kcyBvZiBhIGNsb2NrIHNpZ25hbC4KKy8vISBGb3IgZWFjaCBzdG9wL2NvbXBhcmUgZXZlbnQgdGhlIGNvdW50ZXIgd2lsbCBiZSBkZWNyZW1lbnRlZCBieSBvbmUgYW5kCisvLyEgdGhlIG1lYXN1cmVtZW50IHdpbGwgY29udGludWUgcnVubmluZyB1bnRpbCB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIKKy8vISByZWFjaGVzIDAuIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudGVyIGNhbiBiZSByZWFkIHVzaW5nCisvLyEgXHJlZiBBVVhURENDb3VudGVyR2V0KCkuIFRoZSByZXNldCB2YWx1ZSBvZiB0aGUgY291bnRlciBjYW4gYmUgc2V0IHVzaW5nCisvLyEgXHJlZiBBVVhURENDb3VudGVyU2V0KCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGNvdW50ZXIgd2FzIHN1Y2Nlc3NmdWxseSBlbmFibGVkLiBJZiB0aGUKKy8vISBBVVggVERDIGlzIG5vdCBpbiBJZGxlIG1vZGUsIHRoZSBjb3VudGVyIGNhbiBub3QgYmUgZW5hYmxlZCwgYW5kIHRoZQorLy8hIHJldHVybiB2YWx1ZSB3aWxsIGJlIFxjIGZhbHNlLgorLy8hCisvLyEgXHNhIFxyZWYgQVVYVERDQ291bnRlckdldCgpLCBccmVmIEFVWFREQ0NvdW50ZXJTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitBVVhURENDb3VudGVyRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChBVVhURENCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgdGhlIEFVWCBUREMgaXMgaW4gaWRsZSBtb2RlLiBJZiBub3QgaW4gSWRsZSBtb2RlLCB0aGUgY291bnRlcgorICAgIC8vIHdpbGwgbm90IGJlIGVuYWJsZWQuCisgICAgLy8KKyAgICBpZighKChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19TVEFUKSAmIEFVWF9URENfU1RBVF9TVEFURV9NKSA9PQorICAgICAgICAgICAgQVVYX1REQ19TVEFUX1NUQVRFX0lETEUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBjb3VudGVyLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fVFJJR0NOVENGRykgPSBBVVhfVERDX1RSSUdDTlRDRkdfRU47CisKKyAgICAvLworICAgIC8vIENvdW50ZXIgc3VjY2Vzc2Z1bGx5IGVuYWJsZWQuCisgICAgLy8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIGNvdW50ZXIgaWYgcG9zc2libGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhlIEFVWCBUREMgc3RvcC9jb21wYXJlIGV2ZW50IGNvdW50ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgYmFzZSBhZGRyZXNzIG9mIHRoZSBBVVggVERDLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGNvdW50ZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZC4gSWYgdGhlCisvLyEgQVVYIFREQyBpcyBub3QgaW4gSWRsZSBtb2RlLCB0aGUgY291bnRlciBjYW4gbm90IGJlIGRpc2FibGVkLCBhbmQgdGhlCisvLyEgcmV0dXJuIHZhbHVlIHdpbGwgYmUgXGMgZmFsc2UuCisvLyEKKy8vISBcc2EgXHJlZiBBVVhURENDb3VudGVyRW5hYmxlKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgY291bnRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQVVYVERDQ291bnRlckRpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiB0aGUgQVVYIFREQyBpcyBpbiBJZGxlIG1vZGUuIElmIG5vdCBpbiBJZGxlIG1vZGUsIHRoZSBjb3VudGVyCisgICAgLy8gd2lsbCBub3QgYmUgZGlzYWJsZWQuCisgICAgLy8KKyAgICBpZighKChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19TVEFUKSAmIEFVWF9URENfU1RBVF9TVEFURV9NKSA9PQorICAgICAgICAgICAgQVVYX1REQ19TVEFUX1NUQVRFX0lETEUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgY291bnRlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgQVVYX1REQ19PX1RSSUdDTlRDRkcpID0gMDsKKworICAgIC8vCisgICAgLy8gQ291bnRlciBzdWNjZXNzZnVsbHkgZGlzYWJsZWQuCisgICAgLy8KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSByZXNldCBudW1iZXIgb2YgY291bnRlciBjb21wYXJlL3N0b3AgZXZlbnQgdG8gaWdub3JlIGJlZm9yZSB0YWtpbmcKKy8vISBhIG1lYXN1cmVtZW50LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUgcmVzZXQgdmFsdWUgb2YgdGhlIGNvdW50ZXIgd2l0aCB0aGUgc3BlY2lmaWVkCisvLyEgbnVtYmVyIG9mIGV2ZW50cyB0byBpZ25vcmUuIEEgcmVzZXQgaW4gdGhpcyBjb250ZXh0IG1lYW5zIHRoZSBjb3VudGVyCisvLyEgaGFzIGJlZW4gZGlzYWJsZWQgYW5kIHRoZW4gZW5hYmxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEgXHBhcmFtIHVpMzJFdmVudHMgaXMgdGhlIG51bWJlciBvZiBjb21wYXJlL3N0b3AgZXZlbnRzIHRvIGxvYWQgaW50byB0aGUKKy8vISBjb3VudGVyLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGNvdW50ZXIgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLiBJZiB0aGUKKy8vISBBVVggVERDIGlzIG5vdCBpbiBJZGxlIG1vZGUsIHRoZSBjb3VudGVyIGNhbiBub3QgYmUgdXBkYXRlZCwgYW5kIHRoZQorLy8hIHJldHVybiB2YWx1ZSB3aWxsIGJlIFxjIGZhbHNlLgorLy8hCisvLyEgXHNhIFxyZWYgQVVYVERDQ291bnRlckVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0FVWFREQ0NvdW50ZXJTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJFdmVudHMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEFVWFREQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiB0aGUgQVVYIFREQyBpcyBpbiBpZGxlIG1vZGUuIElmIG5vdCBpbiBpZGxlIG1vZGUsIHRoZSBjb3VudGVyCisgICAgLy8gd2lsbCBub3QgYmUgZGlzYWJsZWQuCisgICAgLy8KKyAgICBpZighKChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19TVEFUKSAmIEFVWF9URENfU1RBVF9TVEFURV9NKSA9PQorICAgICAgICAgICAgQVVYX1REQ19TVEFUX1NUQVRFX0lETEUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vCisgICAgLy8gVXBkYXRlIHRoZSByZXNldCBjb3VudGVyIHZhbHVlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBBVVhfVERDX09fVFJJR0NOVExPQUQpID0gdWkzMkV2ZW50czsKKworICAgIC8vCisgICAgLy8gQ291bnRlciBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KKyAgICAvLworICAgIHJldHVybiB0cnVlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNvdW50ZXIgY29tcGFyZS9zdG9wIGV2ZW50IHRvIGlnbm9yZSBiZWZvcmUKKy8vISB0YWtpbmcgYSBtZWFzdXJlbWVudC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBjb21wYXJlL3N0b3AgZXZlbnRzIGJlZm9yZQorLy8hIGEgbWVhc3VyZW1lbnQgaXMgcmVnaXN0ZXJlZC4gVGhpcyB2YWx1ZSBpcyBkZWNyZW1lbnRlZCBieSBvbmUgZm9yIGVhY2gKKy8vISByZWdpc3RlcmVkIGNvbXBhcmUvc3RvcCBldmVudCBhbmQgd2lsbCBhbHdheXMgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZQorLy8hIHJlc2V0IHZhbHVlIG9mIHRoZSBjb3VudGVyIHNldCB1c2luZyBccmVmIEFVWFREQ0NvdW50ZXJTZXQoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFVWCBUREMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgY29tcGFyZS9zdG9wIGV2ZW50cyBpZ25vcmVkIGJlZm9yZSBhCisvLyEgbWVhc3VyZW1lbnQgaXMgcGVyZm9ybWVkLgorLy8hCisvLyEgXHNhIFxyZWYgQVVYVERDQ291bnRlckVuYWJsZSgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQVVYVERDQ291bnRlckdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoQVVYVERDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBjb3VudGVyIHZhbHVlLgorICAgIC8vCisgICAgcmV0dXJuIChIV1JFRyh1aTMyQmFzZSArIEFVWF9URENfT19UUklHQ05UKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0FVWFREQ0NvbmZpZ1NldAorICAgICAgICAjdW5kZWYgIEFVWFREQ0NvbmZpZ1NldAorICAgICAgICAjZGVmaW5lIEFVWFREQ0NvbmZpZ1NldCAgICAgICAgICAgICAgICAgUk9NX0FVWFREQ0NvbmZpZ1NldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYVERDTWVhc3VyZW1lbnREb25lCisgICAgICAgICN1bmRlZiAgQVVYVERDTWVhc3VyZW1lbnREb25lCisgICAgICAgICNkZWZpbmUgQVVYVERDTWVhc3VyZW1lbnREb25lICAgICAgICAgICBST01fQVVYVERDTWVhc3VyZW1lbnREb25lCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0FVWF9URENfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90aW1lci5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjNTVkMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90aW1lci5jCkBAIC0wLDAgKzEsMzM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgYXV4X3RpbWVyLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAyLTI0IDE0OjA4OjU1ICswMTAwIChXZWQsIDI0IEZlYiAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1NzY3CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQVVYIFRpbWVyIE1vZHVsZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9hdXhfdGltZXIuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEFVWFRpbWVyQ29uZmlndXJlCisgICAgI2RlZmluZSBBVVhUaW1lckNvbmZpZ3VyZSAgICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyQ29uZmlndXJlCisgICAgI3VuZGVmICBBVVhUaW1lclN0YXJ0CisgICAgI2RlZmluZSBBVVhUaW1lclN0YXJ0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyU3RhcnQKKyAgICAjdW5kZWYgIEFVWFRpbWVyU3RvcAorICAgICNkZWZpbmUgQVVYVGltZXJTdG9wICAgICAgICAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lclN0b3AKKyAgICAjdW5kZWYgIEFVWFRpbWVyUHJlc2NhbGVTZXQKKyAgICAjZGVmaW5lIEFVWFRpbWVyUHJlc2NhbGVTZXQgICAgICAgICAgICAgTk9ST01fQVVYVGltZXJQcmVzY2FsZVNldAorICAgICN1bmRlZiAgQVVYVGltZXJQcmVzY2FsZUdldAorICAgICNkZWZpbmUgQVVYVGltZXJQcmVzY2FsZUdldCAgICAgICAgICAgICBOT1JPTV9BVVhUaW1lclByZXNjYWxlR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmUgQVVYIHRpbWVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYVGltZXJDb25maWd1cmUodWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyQ29uZmlnKQoreworICAgIHVpbnQzMl90IHVpMzJWYWw7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMCkgfHwgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMSkgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfQk9USCkpOworICAgIEFTU0VSVCgoKHVpMzJDb25maWcgJiAweDAwMDAwMDBGKSA9PSBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMDBGKSA9PSBBVVhfVElNRVJfQ0ZHX1BFUklPRElDKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMDBGKSA9PSBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UX0VER0VfQ09VTlQpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwMEYpID09IEFVWF9USU1FUl9DRkdfUEVSSU9ESUNfRURHRV9DT1VOVCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGMCkgPT0gQVVYX1RJTUVSX0NGR19SSVNJTkdfRURHRSkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGMCkgPT0gQVVYX1RJTUVSX0NGR19GQUxMSU5HX0VER0UpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfUlRDX0VWRU5UKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0NNUF9BKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0NNUF9CKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1REQ0RPTkUpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfVElNRVIwX0VWRU5UKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1RJTUVSMV9FVkVOVCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19TTVBIX1JFTEVBU0UpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQURDX0RPTkUpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzIpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMykgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU80KSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzUpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNikgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU83KSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwRjAwKSA9PSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzgpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPOSkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMSkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMikgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMykgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xNCkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xNSkgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BQ0xLX1JFRikgfHwKKyAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPT0gQVVYX1RJTUVSX0NGR19USUNLX1NSQ19NQ1VfRVZFTlQpIHx8CisgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDBGMDApID09IEFVWF9USU1FUl9DRkdfVElDS19TUkNfQURDX0lSUSkpOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgVGltZXIgMC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8wKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RvcCB0aW1lciAwLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ1RMKSA9IDA7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IG1vZGUuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJWYWwgPSBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ0ZHKTsKKyAgICAgICAgdWkzMlZhbCAmPSB+KEFVWF9USU1FUl9UMENGR19NT0RFX00gfCBBVVhfVElNRVJfVDBDRkdfUkVMT0FEX00pOworICAgICAgICB1aTMyVmFsIHw9ICh1aTMyQ29uZmlnICYgKEFVWF9USU1FUl9UMENGR19NT0RFX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9USU1FUl9UMENGR19SRUxPQURfTSkpOworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ0ZHKSA9IHVpMzJWYWw7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgZWRnZSBjb3VudGVyLCBzZXQgcmlzaW5nL2ZhbGxpbmcgZWRnZSBhbmQgdGljayBzb3VyY2UuCisgICAgICAgIC8vCisgICAgICAgIGlmKHVpMzJDb25maWcgJiBBVVhfVElNRVJfVDBDRkdfTU9ERV9NKQorICAgICAgICB7CisgICAgICAgICAgICB1aTMyVmFsID0gSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENGRyk7CisgICAgICAgICAgICB1aTMyVmFsICY9IH4oQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTF9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfTSk7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTZXQgZWRnZSBwb2xhcml0eS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZih1aTMyQ29uZmlnICYgQVVYX1RJTUVSX0NGR19GQUxMSU5HX0VER0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWkzMlZhbCB8PSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0IHRpY2sgc291cmNlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJWYWwgfD0gKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPj4gOCkgPDwKKyAgICAgICAgICAgICAgICAgICAgICAgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1M7CisKKyAgICAgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBDRkcpID0gdWkzMlZhbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIFRpbWVyIDEuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBBVVhfVElNRVJfMSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFN0b3AgdGltZXIgMS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMUNUTCkgPSAwOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBtb2RlLgorICAgICAgICAvLworICAgICAgICB1aTMyVmFsID0gSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMUNGRyk7CisgICAgICAgIHVpMzJWYWwgJj0gfihBVVhfVElNRVJfVDFDRkdfTU9ERV9NIHwgQVVYX1RJTUVSX1QxQ0ZHX1JFTE9BRF9NKTsKKyAgICAgICAgdWkzMlZhbCB8PSAoKHVpMzJDb25maWcpICYgKEFVWF9USU1FUl9UMUNGR19NT0RFX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1RJTUVSX1QxQ0ZHX1JFTE9BRF9NKSk7CisgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFDRkcpID0gdWkzMlZhbDsKKworICAgICAgICAvLworICAgICAgICAvLyBJZiBlZGdlIGNvdW50ZXIsIHNldCByaXNpbmcvZmFsbGluZyBlZGdlIGFuZCB0aWNrIHNvdXJjZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYodWkzMkNvbmZpZyAmIEFVWF9USU1FUl9UMUNGR19NT0RFKQorICAgICAgICB7CisgICAgICAgICAgICB1aTMyVmFsID0gSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMUNGRyk7CisgICAgICAgICAgICB1aTMyVmFsICY9IH4oQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1BPTF9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfTSk7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTZXQgZWRnZSBwb2xhcml0eS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZih1aTMyQ29uZmlnICYgQVVYX1RJTUVSX0NGR19GQUxMSU5HX0VER0UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWkzMlZhbCB8PSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUE9MOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2V0IHRpY2sgc291cmNlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJWYWwgfD0gKCh1aTMyQ29uZmlnICYgMHgwMDAwMEYwMCkgPj4gOCkgPDwKKyAgICAgICAgICAgICAgICAgICAgICAgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1M7CisgICAgICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QxQ0ZHKSA9IHVpMzJWYWw7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU3RhcnQgQVVYIHRpbWVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYVGltZXJTdGFydCh1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzApIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzEpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSX0JPVEgpKTsKKworICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8wKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RhcnQgdGltZXIgMC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENUTCkgPSBBVVhfVElNRVJfVDBDVExfRU47CisgICAgfQorICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8xKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3RhcnQgdGltZXIgMS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMUNUTCkgPSBBVVhfVElNRVJfVDFDVExfRU47CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFN0b3AgQVVYIHRpbWVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYVGltZXJTdG9wKHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMCkgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMSkgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfQk9USCkpOworCisgICAgaWYodWkzMlRpbWVyICYgQVVYX1RJTUVSXzApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTdG9wIHRpbWVyIDAuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBDVEwpID0gMDsKKyAgICB9CisgICAgaWYodWkzMlRpbWVyICYgQVVYX1RJTUVSXzEpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTdG9wIHRpbWVyIDEuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDFDVEwpID0gMDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0IEFVWCB0aW1lciBwcmVzY2FsZSB2YWx1ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FVWFRpbWVyUHJlc2NhbGVTZXQodWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyUHJlc2NhbGVEaXYpCit7CisgICAgdWludDMyX3QgdWkzMlZhbDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IEFVWF9USU1FUl8wKSB8fCAodWkzMlRpbWVyID09IEFVWF9USU1FUl8xKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IEFVWF9USU1FUl9CT1RIKSk7CisgICAgQVNTRVJUKHVpMzJQcmVzY2FsZURpdiA8PSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzMyNzY4KTsKKworICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8wKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IHRpbWVyIDAgcHJlc2NhbGUgdmFsdWUuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJWYWwgPSBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ0ZHKTsKKyAgICAgICAgdWkzMlZhbCAmPSB+QVVYX1RJTUVSX1QwQ0ZHX1BSRV9NOworICAgICAgICB1aTMyVmFsIHw9ICB1aTMyUHJlc2NhbGVEaXYgPDwgQVVYX1RJTUVSX1QwQ0ZHX1BSRV9TOworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QwQ0ZHKSA9IHVpMzJWYWw7CisgICAgfQorICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8xKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IHRpbWVyIDEgcHJlc2NhbGUgdmFsdWUuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJWYWwgPSBIV1JFRyhBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QxQ0ZHKTsKKyAgICAgICAgdWkzMlZhbCAmPSB+QVVYX1RJTUVSX1QxQ0ZHX1BSRV9NOworICAgICAgICB1aTMyVmFsIHw9ICB1aTMyUHJlc2NhbGVEaXYgPDwgQVVYX1RJTUVSX1QxQ0ZHX1BSRV9TOworICAgICAgICBIV1JFRyhBVVhfVElNRVJfQkFTRSAgKyBBVVhfVElNRVJfT19UMUNGRykgPSB1aTMyVmFsOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgQVVYIHRpbWVyIHByZXNjYWxlIHZhbHVlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0FVWFRpbWVyUHJlc2NhbGVHZXQodWludDMyX3QgdWkzMlRpbWVyKQoreworICAgIHVpbnQzMl90IHVpMzJWYWw7CisgICAgdWludDMyX3QgdWkzMlByZXNjYWxlRGl2OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzApIHx8ICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzEpKTsKKworICAgIHVpMzJWYWwgPSAoSFdSRUcoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMENGRykpOworICAgIGlmKHVpMzJUaW1lciAmIEFVWF9USU1FUl8wKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2V0IHRpbWVyIDAgcHJlc2NhbGUgdmFsdWUuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJQcmVzY2FsZURpdiA9CisgICAgICAgICAgICAodWkzMlZhbCAmIEFVWF9USU1FUl9UMENGR19QUkVfTSkgPj4gQVVYX1RJTUVSX1QwQ0ZHX1BSRV9TOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBHZXQgdGltZXIgMSBwcmVzY2FsZSB2YWx1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgdWkzMlByZXNjYWxlRGl2ID0KKyAgICAgICAgICAgICh1aTMyVmFsICYgQVVYX1RJTUVSX1QxQ0ZHX1BSRV9NKSA+PiBBVVhfVElNRVJfVDFDRkdfUFJFX1M7CisgICAgfQorCisgICAgcmV0dXJuKHVpMzJQcmVzY2FsZURpdik7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGltZXIuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGM4MGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfdGltZXIuaApAQCAtMCwwICsxLDQ4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF90aW1lci5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMi0yNCAxNDowODo1NSArMDEwMCAoV2VkLCAyNCBGZWIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTc2NworKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBBVVggVGltZXIKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYXV4X2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBhdXh0aW1lcl9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0FVWF9USU1FUl9IX18KKyNkZWZpbmUgX19BVVhfVElNRVJfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYXV4X3RpbWVyLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBBVVhUaW1lckNvbmZpZ3VyZSAgICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyQ29uZmlndXJlCisgICAgI2RlZmluZSBBVVhUaW1lclN0YXJ0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyU3RhcnQKKyAgICAjZGVmaW5lIEFVWFRpbWVyU3RvcCAgICAgICAgICAgICAgICAgICAgTk9ST01fQVVYVGltZXJTdG9wCisgICAgI2RlZmluZSBBVVhUaW1lclByZXNjYWxlU2V0ICAgICAgICAgICAgIE5PUk9NX0FVWFRpbWVyUHJlc2NhbGVTZXQKKyAgICAjZGVmaW5lIEFVWFRpbWVyUHJlc2NhbGVHZXQgICAgICAgICAgICAgTk9ST01fQVVYVGltZXJQcmVzY2FsZUdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFVWFRpbWVyQ29uZmlndXJlKCkuCisvLworLy8gUmVxdWlyZXMgdGltZXIwIGFuZCB0aW1lcjEgdG8gdXNlIHNhbWUgZW51bWVyYXRpb25zIGFuZCB2YWx1ZXMhCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UICAgICAgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9NQU4pICAgICAgICAvLyBPbmUtc2hvdCB0aW1lciBtb2RlCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfUEVSSU9ESUMgICAgICAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfUkVMT0FEX0NPTlQpICAgICAgIC8vIFBlcmlvZCB0aW1lciBtb2RlCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfT05FX1NIT1RfRURHRV9DT1VOVCAgICgoQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9NQU4pIHwgKEFVWF9USU1FUl9UMENGR19NT0RFX1RJQ0spKSAgLy8gT25lLXNob3QgdGltZXIgd2l0aCBlZGdlIGNvdW50CisjZGVmaW5lIEFVWF9USU1FUl9DRkdfUEVSSU9ESUNfRURHRV9DT1VOVCAgICgoQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9DT05UKSB8IChBVVhfVElNRVJfVDBDRkdfTU9ERV9USUNLKSkgLy8gUGVyaW9kaWMgdGltZXIgd2l0aCBlZGdlIGNvdW50CisjZGVmaW5lIEFVWF9USU1FUl9DRkdfUklTSU5HX0VER0UgICAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MX1JJU0UpIC8vIENvdW50IHJpc2luZyBlZGdlcyAodXNlZCB3aXRoIGVkZ2UgY291bnQgbW9kZSkKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19GQUxMSU5HX0VER0UgICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19QT0xfRkFMTCkgLy8gQ291bnQgZmFsbGluZyBlZGdlcyAodXNlZCB3aXRoIGVkZ2UgY291bnQgbW9kZSkKKworI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1JUQ19FVkVOVCAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1JUQ19DSDJfRVYpIC8vIEFPTiB3YWtlLXVwIGV2ZW50CisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQ01QX0EgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYX0NPTVBBKSAgLy8gQ29tcGFyYXRvciBBCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQ01QX0IgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYX0NPTVBCKSAgLy8gQ29tcGFyYXRvciBCCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfVERDRE9ORSAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfVERDX0RPTkUpICAgLy8gVERDIERvbmUKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19USU1FUjBfRVZFTlQgKEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19USU1FUjBfRVYpICAvLyBUaW1lciAwIGV2ZW50CisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfVElNRVIxX0VWRU5UIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfVElNRVIxX0VWKSAgLy8gVGltZXIgMSBldmVudAorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1NNUEhfUkVMRUFTRSAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1NNUEhfQVVUT1RBS0VfRE9ORSkgLy8gU2VtYXBob3JlIHJlbGVhc2UKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BRENfRE9ORSAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BRENfRE9ORSkgICAvLyBBREMgZG9uZQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1JUQ180S0haICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1JUQ180S0haKQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX09CU01VWDAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX09CU01VWDApCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfT0JTTVVYMSAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfT0JTTVVYMSkKKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BT05fU1cgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BT05fU1cpCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQU9OX1BST0dfV1UgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQU9OX1BST0dfV1UpCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMCAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8wKSAgICAgLy8gQUlPX0RBVFsgMF0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzEpICAgICAvLyBBSU9fREFUWyAxXQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzIgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMikgICAgIC8vIEFJT19EQVRbIDJdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMyAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8zKSAgICAgLy8gQUlPX0RBVFsgM10KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU80ICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzQpICAgICAvLyBBSU9fREFUWyA0XQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzUgICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPNSkgICAgIC8vIEFJT19EQVRbIDVdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNiAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU82KSAgICAgLy8gQUlPX0RBVFsgNl0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU83ICAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzcpICAgICAvLyBBSU9fREFUWyA3XQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzggICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPOCkgICAgIC8vIEFJT19EQVRbIDhdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPOSAgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU85KSAgICAgLy8gQUlPX0RBVFsgOV0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMCAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzEwKSAgICAvLyBBSU9fREFUWzEwXQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzExICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTEpICAgIC8vIEFJT19EQVRbMTFdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTIgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xMikgICAgLy8gQUlPX0RBVFsxMl0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMyAgICAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzEzKSAgICAvLyBBSU9fREFUWzEzXQorI2RlZmluZSBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzE0ICAgICAgICAoQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTQpICAgIC8vIEFJT19EQVRbMTRdCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTUgICAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xNSkgICAgLy8gQUlPX0RBVFsxNV0KKyNkZWZpbmUgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BQ0xLX1JFRiAgICAgKEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BQ0xLX1JFRikgICAvLyBBQ0xLX1JFRl9pCisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfTUNVX0VWRU5UICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfTUNVX0VWRU5UKSAgLy8gTUNVIGV2ZW50CisjZGVmaW5lIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQURDX0lSUSAgICAgIChBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQURDX0lSUSkgICAgLy8gRE1BIGRvbmUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gbW9zdCBvZiB0aGUgdGltZXIgQVBJcyBhcyB0aGUgdWkzMlRpbWVyCisvLyBwYXJhbWV0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfVElNRVJfMCAgICAgICAgICAgICAweDAwMDBGRkZGICAvLyBBVVggVGltZXIgMAorI2RlZmluZSBBVVhfVElNRVJfMSAgICAgICAgICAgICAweDAwRkYwMDAwICAvLyBBVVggVGltZXIgMQorI2RlZmluZSBBVVhfVElNRVJfQk9USCAgICAgICAgICAweDAwRkZGRkZGICAvLyBBVVggVGltZXIgQm90aCAwIGFuZCAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIEFVWFRpbWVyUHJlc2NhbGVTZXQgYW5kIHJldHVybmVkIGZyb20KKy8vIEFVWFRpbWVyUHJlc2NhbGVHZXQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEgICAgICAweDAwMDAwMDAwICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxCisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMiAgICAgIDB4MDAwMDAwMDEgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDIKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl80ICAgICAgMHgwMDAwMDAwMiAgLy8gUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gNAorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzggICAgICAweDAwMDAwMDAzICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA4CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTYgICAgIDB4MDAwMDAwMDQgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDE2CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMzIgICAgIDB4MDAwMDAwMDUgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDMyCisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNjQgICAgIDB4MDAwMDAwMDYgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDY0CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTI4ICAgIDB4MDAwMDAwMDcgIC8vIFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDEyOAorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzI1NiAgICAweDAwMDAwMDA4ICAvLyBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAyNTYKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl81MTIgICAgMHgwMDAwMDAwOSAgLy8gUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gNTEyCisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTAyOCAgIDB4MDAwMDAwMEEgIC8vIFByZXNjYWxlIGRpdi4gcmF0aW8gMTAyOAorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzIwNDggICAweDAwMDAwMDBCICAvLyBQcmVzY2FsZSBkaXYuIHJhdGlvIDIwNDgKKyNkZWZpbmUgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl80MDk2ICAgMHgwMDAwMDAwQyAgLy8gUHJlc2NhbGUgZGl2LiByYXRpbyA0MDk2CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfODE5MiAgIDB4MDAwMDAwMEQgIC8vIFByZXNjYWxlIGRpdi4gcmF0aW8gODE5MgorI2RlZmluZSBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzE2Mzg0ICAweDAwMDAwMDBFICAvLyBQcmVzY2FsZSBkaXYuIHJhdGlvIDE2Mzg0CisjZGVmaW5lIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMzI3NjggIDB4MDAwMDAwMEYgIC8vIFByZXNjYWxlIGRpdi4gcmF0aW8gMzI3NjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSBBVVggdGltZXIuCisvLyEKKy8vISBUaGlzIGNhbGwgY29uZmlndXJlcyB0aGUgQVVYIHRpbWVyIHNlbGVjdGVkIGJ5IHRoZSBcYyB1aTMyVGltZXIuCisvLyEgVGhlIHRpbWVyIG1vZHVsZSBpcyBkaXNhYmxlZCBiZWZvcmUgYmVpbmcgY29uZmlndXJlZCBhbmQgaXMgbGVmdCBpbiB0aGUKKy8vISBkaXNhYmxlZCBzdGF0ZS4KKy8vIQorLy8hIFRoZSBjb25maWd1cmF0aW9uIGlzIHNwZWNpZmllZCBpbiBcYyB1aTMyQ29uZmlnIGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisvLyEgdmFsdWVzOgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UICAgICAgICAgICAgOiBPbmUtc2hvdCB0aW1lci4KKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19QRVJJT0RJQyAgICAgICAgICAgIDogUGVyaW9kaWMgdGltZXIuCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfT05FX1NIT1RfRURHRV9DT1VOVCA6IE9uZS1zaG90IGVkZ2UgY291bnRlci4KKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19QRVJJT0RJQ19FREdFX0NPVU5UIDogUGVyaW9kaWMgZWRnZSBjb3VudGVyLgorLy8hCisvLyEgV2hlbiBjb25maWd1cmVkIGFzIHRpbWVyLCB0aGUgY291bnRlciBpcyBpbmNyZW1lbnRlZCBiYXNlZCBvbiB0aGUgQVVYIGNsb2NrCisvLyEgYWZ0ZXIgdGhlIHByZXNjYWxlci4gVGhlIHByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIGlzIHNldAorLy8hIHVzaW5nIFxyZWYgQVVYVGltZXJQcmVzY2FsZVNldCgpLgorLy8hCisvLyEgV2hlbiBjb25maWd1cmVkIGFzIGFuIGVkZ2UgY291bnRlciB0aGUgY291bnRlciBpcyBpbmNyZW1lbnRlZCBvbmx5IG9uIGVkZ2VzCisvLyEgb2YgdGhlIHNlbGVjdGVkIGV2ZW50LgorLy8hIFRoZSBwb2xhcml0eSBvZiB0aGUgZXZlbnQgaXMgc2VsZWN0ZWQgYnk6CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfUklTSU5HX0VER0UgIDogcmlzaW5nIGVkZ2UgdHJpZ2dlcgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX0ZBTExJTkdfRURHRSA6IGZhbGxpbmcgZWRnZSB0cmlnZ2VyCisvLyEKKy8vISBUaGUgZXZlbnQgc291cmNlIGlzIHNlbGVjdGVkIGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGRlZmluZXM6CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfUlRDX0VWRU5UCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQ01QX0EKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19DTVBfQgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1REQ0RPTkUKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19USU1FUjBfRVZFTlQKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19USU1FUjFfRVZFTlQKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19TTVBIX1JFTEVBU0UKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BRENfRE9ORQorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1JUQ180S0haCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfT0JTTVVYMAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX09CU01VWDEKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BT05fU1cKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BT05fUFJPR19XVQorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzMKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU80CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPNQorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU83CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPOAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzkKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzExCisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BSU8xMworLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FJTzE0CisvLyEgLSBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfQUlPMTUKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19BQ0xLX1JFRgorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX01DVV9FVkVOVAorLy8hIC0gXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX0FEQ19JUlEKKy8vIQorLy8hIFRoZSBtb2RlLCBldmVudCBwb2xhcml0eSBhbmQgZXZlbnQgc291cmNlIGFyZSBjb25maWd1cmVkIGJ5IHNldHRpbmcgdGhlCisvLyEgXGMgdWkzMkNvbmZpZyBwYXJhbWV0ZXIgYXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIHZhcmlvdXMgc2V0dGluZ3MuCisvLyEgSS5lLiAoXHJlZiBBVVhfVElNRVJfQ0ZHX09ORV9TSE9UX0VER0VfQ09VTlQgfCBccmVmIEFVWF9USU1FUl9DRkdfUklTSU5HX0VER0UgfAorLy8hICAgICAgIFxyZWYgQVVYX1RJTUVSX0NGR19USUNLX1NSQ19SVENfRVZFTlQpLgorLy8hCisvLyEgXG5vdGUgV2hlbiB1c2VkIGFzIGFuIGVkZ2UgY291bnRlciB0aGUgcHJlc2NhbGVyIHNob3VsZCBiZSBzZXQgdG8KKy8vISBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMS4KKy8vIQorLy8hIFxub3RlIEEgdGltZXIgY2FuIG5vdCB0cmlnZ2VyIGl0c2VsZiB0aHVzIHRpbWVyIDAgY2FuIFxiIG5vdCB1c2UKKy8vISBccmVmIEFVWF9USU1FUl9DRkdfVElDS19TUkNfVElNRVIwX0VWRU5UIGFuZCB0aW1lciAxIGNhbiBcYiBub3QgdXNlCisvLyEgXHJlZiBBVVhfVElNRVJfQ0ZHX1RJQ0tfU1JDX1RJTUVSMV9FVkVOVC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyVGltZXIgaXMgdGhlIHRpbWVyIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vISBccGFyYW0gdWkzMkNvbmZpZyBpcyB0aGUgdGltZXIgY29uZmlndXJhdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQVVYVGltZXJQcmVzY2FsZVNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYVGltZXJDb25maWd1cmUodWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyQ29uZmlnKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3RhcnQgQVVYIHRpbWVyKHMpLgorLy8hCisvLyEgVGhpcyBjYWxsIHN0YXJ0cyB0aGUgc2VsZWN0ZWQgQVVYIHRpbWVyKHMpLgorLy8hCisvLyEgXG5vdGUgVGhlIGNvdW50ZXIgd2lsbCBzdGFydCBjb3VudGluZyB1cCBmcm9tIHplcm8uCisvLyEKKy8vISBccGFyYW0gdWkzMlRpbWVyIGlzIHRoZSB0aW1lciB0byBzdGFydC4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vISAtIFxyZWYgQVVYX1RJTUVSX0JPVEgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQVVYVGltZXJTdG9wKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhUaW1lclN0YXJ0KHVpbnQzMl90IHVpMzJUaW1lcik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN0b3AgQVVYIHRpbWVyKHMpLgorLy8hCisvLyEgVGhpcyBjYWxsIHN0b3BzIHRoZSBzZWxlY3RlZCBBVVggdGltZXIocykuCisvLyEKKy8vISBccGFyYW0gdWkzMlRpbWVyIGlzIHRoZSB0aW1lciB0byBzdG9wLgorLy8hIC0gXHJlZiBBVVhfVElNRVJfMAorLy8hIC0gXHJlZiBBVVhfVElNRVJfMQorLy8hIC0gXHJlZiBBVVhfVElNRVJfQk9USAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhUaW1lclN0YXJ0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhUaW1lclN0b3AodWludDMyX3QgdWkzMlRpbWVyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IEFVWCB0aW1lciB0YXJnZXQgdmFsdWUuCisvLyEKKy8vISBUaGUgdGltZXIgY291bnRzIGZyb20gemVybyB0byB0aGUgdGFyZ2V0IHZhbHVlLiBXaGVuIHRhcmdldCB2YWx1ZSBpcworLy8hIHJlYWNoZWQgYW4gZXZlbnQgaXMgZ2VuZXJhdGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUaW1lciBpcyB0aGUgdGltZXIgdG8gc2V0IHRoZSB0YXJnZXQgdmFsdWUgZm9yLgorLy8hIC0gXHJlZiBBVVhfVElNRVJfMAorLy8hIC0gXHJlZiBBVVhfVElNRVJfMQorLy8hIFxwYXJhbSB1aTMyVGFyZ2V0IGlzIHRoZSB0aW1lciB0YXJnZXQgdmFsdWUuCisvLyEgLSBGb3IgXHJlZiBBVVhfVElNRVJfMCB0aGUgdGFyZ2V0IHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC4uNjU1MzUgKDE2IGJpdCkuCisvLyEgLSBGb3IgXHJlZiBBVVhfVElNRVJfMSB0aGUgdGFyZ2V0IHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC4uMjU1ICg4IGJpdCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEFVWFRpbWVyVGFyZ2V0VmFsR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQVVYVGltZXJUYXJnZXRWYWxTZXQodWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyVGFyZ2V0KQoreworICAgIHVpbnQzMl90IHVpMzJBZGRyOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzApIHx8ICh1aTMyVGltZXIgPT0gQVVYX1RJTUVSXzEpKTsKKyAgICBBU1NFUlQoKCh1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkgJiYgKHVpMzJUYXJnZXQgPD0gNjU1MzUpKSB8fAorICAgICAgICAgICAoKHVpMzJUaW1lciAmIEFVWF9USU1FUl8xKSAmJiAodWkzMlRhcmdldCA8PSAyNTUpKSk7CisKKyAgICB1aTMyQWRkciA9ICh1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkgPworICAgICAgICAgICAgICAgKEFVWF9USU1FUl9CQVNFICsgQVVYX1RJTUVSX09fVDBUQVJHRVQpIDoKKyAgICAgICAgICAgICAgIChBVVhfVElNRVJfQkFTRSArIEFVWF9USU1FUl9PX1QxVEFSR0VUKTsKKworICAgIEhXUkVHKHVpMzJBZGRyKSA9IHVpMzJUYXJnZXQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBBVVggdGltZXIgdGFyZ2V0IHZhbHVlLgorLy8hCisvLyEgVGhlIHRpbWVyIGNvdW50cyBmcm9tIHplcm8gdG8gdGhlIHRhcmdldCB2YWx1ZS4gV2hlbiB0YXJnZXQgdmFsdWUgaXMKKy8vISByZWFjaGVkIGFuIGV2ZW50IGlzIGdlbmVyYXRlZC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9ncmFtbWVkIHRhcmdldAorLy8hIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHRpbWVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUaW1lciBpcyB0aGUgdGltZXIgdG8gZ2V0IHRoZSB0YXJnZXQgdmFsdWUgZnJvbS4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0YXJnZXQgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgdGltZXIKKy8vIQorLy8hIFxzYSBccmVmIEFVWFRpbWVyVGFyZ2V0VmFsU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0FVWFRpbWVyVGFyZ2V0VmFsR2V0KHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMCkgfHwgKHVpMzJUaW1lciA9PSBBVVhfVElNRVJfMSkpOworCisgICAgcmV0dXJuKEhXUkVHKCh1aTMyVGltZXIgJiBBVVhfVElNRVJfMCkgPworICAgICAgICAgICAgICAgICAoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMFRBUkdFVCkgOgorICAgICAgICAgICAgICAgICAoQVVYX1RJTUVSX0JBU0UgKyBBVVhfVElNRVJfT19UMVRBUkdFVCkpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IEFVWCB0aW1lciBwcmVzY2FsZSB2YWx1ZS4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJlZCBhcyB0aW1lciwgdGhlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYmFzZWQgb24gdGhlIEFVWCBjbG9jaworLy8hIGFmdGVyIHRoZSBwcmVzY2FsZXIuCisvLyEKKy8vISBcbm90ZSBTZXR0aW5nIHByZXNjYWxlIHZhbHVlIGlzIFxiIG5vdCBhZHZpc2VkIHdoZW4gdGhlIHRpbWVyIGlzIHJ1bm5pbmcuCisvLyEKKy8vISBcbm90ZSBXaGVuIHRpbWVyIGlzIHVzZWQgYXMgYW4gZWRnZSBjb3VudGVyIHRoZSBwcmVzY2FsZXIgc2hvdWxkIGJlCisvLyEgICAgICAgc2V0IHRvIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUaW1lciBpcyB0aGUgdGltZXIgdG8gc2V0IHRoZSBwcmVzY2FsZSBvbi4KKy8vISAtIFxyZWYgQVVYX1RJTUVSXzAKKy8vISAtIFxyZWYgQVVYX1RJTUVSXzEKKy8vISBccGFyYW0gdWkzMlByZXNjYWxlRGl2IGlzIHRoZSBwcmVzY2FsZXIgZGl2aXNpb24gcmF0aW8uCisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMSAgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxCisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMiAgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAyCisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNCAgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA0CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTYgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxNgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzMyICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMzIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl82NCAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDY0CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMTI4ICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAxMjgKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8yNTYgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDI1NgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEwMjggIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMTAyOAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzIwNDggIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMjA0OAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzQwOTYgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gNDA5NgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzgxOTIgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gODE5MgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzE2Mzg0IDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMTYzODQKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8zMjc2OCA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDMyNzY4CisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEFVWFRpbWVyUHJlc2NhbGVHZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWFRpbWVyUHJlc2NhbGVTZXQodWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyUHJlc2NhbGVEaXYpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgQVVYIHRpbWVyIHByZXNjYWxlIHZhbHVlLgorLy8hCisvLyEgV2hlbiBjb25maWd1cmVkIGFzIHRpbWVyLCB0aGUgY291bnRlciBpcyBpbmNyZW1lbnRlZCBiYXNlZCBvbiB0aGUgQVVYIGNsb2NrCisvLyEgYWZ0ZXIgdGhlIHByZXNjYWxlci4gVGhpcyBjYWxsIHJldHVybnMgdGhlIHNldHRpbmcgb2YgdGhlIHByZXNjYWxlIGRpdmlkZQorLy8hIHJhdGlvIGZvciB0aGUgc3BlY2lmaWVkIHRpbWVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJUaW1lciBpcyB0aGUgdGltZXIgdG8gZ2V0IHRoZSBwcmVzY2FsZSB2YWx1ZSBmcm9tLgorLy8hIC0gXHJlZiBBVVhfVElNRVJfMAorLy8hIC0gXHJlZiBBVVhfVElNRVJfMQorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBwcmVzY2FsZXIgZGl2aXNpb24gcmF0aW8gYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEgICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMQorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzIgICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMgorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzQgICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gNAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzE2ICAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMTYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8zMiAgICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDMyCisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfNjQgICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyA2NAorLy8hIC0gXHJlZiBBVVhfVElNRVJfUFJFU0NBTEVfRElWXzEyOCAgIDogUHJlc2NhbGUgZGl2aXNpb24gcmF0aW8gMTI4CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMjU2ICAgOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAyNTYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xMDI4ICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDEwMjgKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8yMDQ4ICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDIwNDgKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl80MDk2ICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDQwOTYKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl84MTkyICA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDgxOTIKKy8vISAtIFxyZWYgQVVYX1RJTUVSX1BSRVNDQUxFX0RJVl8xNjM4NCA6IFByZXNjYWxlIGRpdmlzaW9uIHJhdGlvIDE2Mzg0CisvLyEgLSBccmVmIEFVWF9USU1FUl9QUkVTQ0FMRV9ESVZfMzI3NjggOiBQcmVzY2FsZSBkaXZpc2lvbiByYXRpbyAzMjc2OAorLy8hCisvLyEgXHNhIFxyZWYgQVVYVGltZXJQcmVzY2FsZVNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEFVWFRpbWVyUHJlc2NhbGVHZXQodWludDMyX3QgdWkzMlRpbWVyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fQVVYVGltZXJDb25maWd1cmUKKyAgICAgICAgI3VuZGVmICBBVVhUaW1lckNvbmZpZ3VyZQorICAgICAgICAjZGVmaW5lIEFVWFRpbWVyQ29uZmlndXJlICAgICAgICAgICAgICAgUk9NX0FVWFRpbWVyQ29uZmlndXJlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhUaW1lclN0YXJ0CisgICAgICAgICN1bmRlZiAgQVVYVGltZXJTdGFydAorICAgICAgICAjZGVmaW5lIEFVWFRpbWVyU3RhcnQgICAgICAgICAgICAgICAgICAgUk9NX0FVWFRpbWVyU3RhcnQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWFRpbWVyU3RvcAorICAgICAgICAjdW5kZWYgIEFVWFRpbWVyU3RvcAorICAgICAgICAjZGVmaW5lIEFVWFRpbWVyU3RvcCAgICAgICAgICAgICAgICAgICAgUk9NX0FVWFRpbWVyU3RvcAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYVGltZXJQcmVzY2FsZVNldAorICAgICAgICAjdW5kZWYgIEFVWFRpbWVyUHJlc2NhbGVTZXQKKyAgICAgICAgI2RlZmluZSBBVVhUaW1lclByZXNjYWxlU2V0ICAgICAgICAgICAgIFJPTV9BVVhUaW1lclByZXNjYWxlU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhUaW1lclByZXNjYWxlR2V0CisgICAgICAgICN1bmRlZiAgQVVYVGltZXJQcmVzY2FsZUdldAorICAgICAgICAjZGVmaW5lIEFVWFRpbWVyUHJlc2NhbGVHZXQgICAgICAgICAgICAgUk9NX0FVWFRpbWVyUHJlc2NhbGVHZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQVVYX1RJTUVSX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfd3VjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfd3VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyOTVkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2F1eF93dWMuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGF1eF93dWMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDItMjQgMTQ6MDg6NTUgKzAxMDAgKFdlZCwgMjQgRmViIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU3NjcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBBVVggV2FrZXVwIENvbnRyb2xsZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2F1eF93dWMuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIEFVWFdVQ0Nsb2NrRW5hYmxlCisgICAgI2RlZmluZSBBVVhXVUNDbG9ja0VuYWJsZSAgICAgICAgICAgICAgIE5PUk9NX0FVWFdVQ0Nsb2NrRW5hYmxlCisgICAgI3VuZGVmICBBVVhXVUNDbG9ja0Rpc2FibGUKKyAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrRGlzYWJsZSAgICAgICAgICAgICAgTk9ST01fQVVYV1VDQ2xvY2tEaXNhYmxlCisgICAgI3VuZGVmICBBVVhXVUNDbG9ja1N0YXR1cworICAgICNkZWZpbmUgQVVYV1VDQ2xvY2tTdGF0dXMgICAgICAgICAgICAgICBOT1JPTV9BVVhXVUNDbG9ja1N0YXR1cworICAgICN1bmRlZiAgQVVYV1VDUG93ZXJDdHJsCisgICAgI2RlZmluZSBBVVhXVUNQb3dlckN0cmwgICAgICAgICAgICAgICAgIE5PUk9NX0FVWFdVQ1Bvd2VyQ3RybAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGUgY2xvY2tzIGZvciBwZXJpcGhlcmFscyBpbiB0aGUgQVVYIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYV1VDQ2xvY2tFbmFibGUodWludDMyX3QgdWkzMkNsb2NrcykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FESV9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX09TQ0NUUkxfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19URENJRl9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FOQUlGX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVElNRVJfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BSU9ESU8wX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQUlPRElPMV9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1NNUEhfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19URENfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRENfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19SRUZfQ0xPQ0spKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHNvbWUgb2YgdGhlIGNsb2NrcyBpbiB0aGUgY2xvY2sgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fTU9EQ0xLRU4wKSB8PSAodWkzMkNsb2NrcyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS19NQVNLKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIHJlc3QuCisgICAgLy8KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRENfQ0xPQ0spCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKSA9CisgICAgICAgICAgICBBVVhfV1VDX0FEQ0NMS0NUTF9SRVE7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1REQ19DTE9DSykKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19URENDTEtDVEwpID0KKyAgICAgICAgICAgIEFVWF9XVUNfVERDQ0xLQ1RMX1JFUTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfUkVGX0NMT0NLKQorICAgIHsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1JFRkNMS0NUTCkgPQorICAgICAgICAgICAgQVVYX1dVQ19SRUZDTEtDVExfUkVROworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGUgY2xvY2tzIGZvciBwZXJpcGhlcmFscyBpbiB0aGUgQVVYIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorQVVYV1VDQ2xvY2tEaXNhYmxlKHVpbnQzMl90IHVpMzJDbG9ja3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRElfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19PU0NDVFJMX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDSUZfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BTkFJRl9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1RJTUVSX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQUlPRElPMF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzFfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19TTVBIX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURDX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfUkVGX0NMT0NLKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgc29tZSBvZiB0aGUgY2xvY2tzIGluIHRoZSBjbG9jayByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19NT0RDTEtFTjApICY9IH4odWkzMkNsb2NrcyAmCisgICAgICAgICAgICBBVVhfV1VDX01PRENMS19NQVNLKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIHJlc3QuCisgICAgLy8KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRENfQ0xPQ0spCisgICAgeworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKSAmPQorICAgICAgICAgICAgfkFVWF9XVUNfQURDQ0xLQ1RMX1JFUTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDX0NMT0NLKQorICAgIHsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1REQ0NMS0NUTCkgJj0KKyAgICAgICAgICAgIH5BVVhfV1VDX1REQ0NMS0NUTF9SRVE7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1JFRl9DTE9DSykKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19SRUZDTEtDVEwpICY9CisgICAgICAgICAgICB+QVVYX1dVQ19SRUZDTEtDVExfUkVROworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCB0aGUgc3RhdHVzIG9mIGEgY2xvY2sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitBVVhXVUNDbG9ja1N0YXR1cyh1aW50MzJfdCB1aTMyQ2xvY2tzKQoreworICAgIGJvb2wgYkNsb2NrU3RhdHVzOworICAgIHVpbnQzMl90IHVpMzJDbG9ja1JlZ2lzdGVyOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BRElfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19PU0NDVFJMX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDSUZfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19BTkFJRl9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1RJTUVSX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQUlPRElPMF9DTE9DSykgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzFfQ0xPQ0spIHx8CisgICAgICAgICAgICh1aTMyQ2xvY2tzICYgQVVYX1dVQ19TTVBIX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfVERDX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURDX0NMT0NLKSB8fAorICAgICAgICAgICAodWkzMkNsb2NrcyAmIEFVWF9XVUNfUkVGX0NMT0NLKSk7CisKKyAgICBiQ2xvY2tTdGF0dXMgPSB0cnVlOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXJzLgorICAgIC8vCisgICAgdWkzMkNsb2NrUmVnaXN0ZXIgPSBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fTU9EQ0xLRU4wKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgYWxsIHJlcXVlc3RlZCBjbG9ja3MKKyAgICAvLworICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FESV9DTE9DSykKKyAgICB7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9BREk0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19PU0NDVFJMX0NMT0NLKQorICAgIHsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0RESTBfT1NDID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19URENJRl9DTE9DSykKKyAgICB7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfTU9EQ0xLRU4wX1REQyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfQU5BSUZfQ0xPQ0spCisgICAgeworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9BTkFJRiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfVElNRVJfQ0xPQ0spCisgICAgeworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9USU1FUiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfQUlPRElPMF9DTE9DSykKKyAgICB7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzAgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX0FJT0RJTzFfQ0xPQ0spCisgICAgeworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8xID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19TTVBIX0NMT0NLKQorICAgIHsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19NT0RDTEtFTjBfU01QSCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisgICAgaWYodWkzMkNsb2NrcyAmIEFVWF9XVUNfQURDX0NMT0NLKQorICAgIHsKKyAgICAgICAgdWkzMkNsb2NrUmVnaXN0ZXIgPSBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQURDQ0xLQ1RMKTsKKyAgICAgICAgYkNsb2NrU3RhdHVzID0gYkNsb2NrU3RhdHVzICYmICh1aTMyQ2xvY2tSZWdpc3RlciAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19BRENDTEtDVExfQUNLID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogZmFsc2UpOworICAgIH0KKyAgICBpZih1aTMyQ2xvY2tzICYgQVVYX1dVQ19URENfQ0xPQ0spCisgICAgeworICAgICAgICB1aTMyQ2xvY2tSZWdpc3RlciA9IEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19URENDTEtDVEwpOworICAgICAgICBiQ2xvY2tTdGF0dXMgPSBiQ2xvY2tTdGF0dXMgJiYgKHVpMzJDbG9ja1JlZ2lzdGVyICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX1REQ0NMS0NUTF9BQ0sgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGlmKHVpMzJDbG9ja3MgJiBBVVhfV1VDX1JFRl9DTE9DSykKKyAgICB7CisgICAgICAgIHVpMzJDbG9ja1JlZ2lzdGVyID0gSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1JFRkNMS0NUTCk7CisgICAgICAgIGJDbG9ja1N0YXR1cyA9IGJDbG9ja1N0YXR1cyAmJiAodWkzMkNsb2NrUmVnaXN0ZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfUkVGQ0xLQ1RMX0FDSyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY2xvY2sgc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuIGJDbG9ja1N0YXR1cyA/IEFVWF9XVUNfQ0xPQ0tfUkVBRFkgOiBBVVhfV1VDX0NMT0NLX09GRjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbnRyb2wgdGhlIHBvd2VyIHRvIHRoZSBBVVggZG9tYWluCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBVVhXVUNQb3dlckN0cmwodWludDMyX3QgdWkzMlBvd2VyTW9kZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJQb3dlck1vZGUgPT0gQVVYX1dVQ19QT1dFUl9PRkYpIHx8CisgICAgICAgICAgICh1aTMyUG93ZXJNb2RlID09IEFVWF9XVUNfUE9XRVJfRE9XTikgfHwKKyAgICAgICAgICAgKHVpMzJQb3dlck1vZGUgPT0gQVVYX1dVQ19QT1dFUl9BQ1RJVkUpKTsKKworICAgIC8vCisgICAgLy8gUG93ZXIgb24vb2ZmLgorICAgIC8vCisgICAgaWYodWkzMlBvd2VyTW9kZSA9PSBBVVhfV1VDX1BPV0VSX09GRikKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19QV1JPRkZSRVEpID0gQVVYX1dVQ19QV1JPRkZSRVFfUkVROworICAgICAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fTUNVQlVTQ1RMKSA9IEFVWF9XVUNfTUNVQlVTQ1RMX0RJU0NPTk5FQ1RfUkVROworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19QV1JPRkZSRVEpID0gMHgwOworICAgIH0KKworICAgIC8vCisgICAgLy8gUG93ZXIgZG93bi9hY3RpdmUuCisgICAgLy8KKyAgICBpZih1aTMyUG93ZXJNb2RlID09IEFVWF9XVUNfUE9XRVJfRE9XTikKKyAgICB7CisgICAgICAgIEhXUkVHKEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19QV1JEV05SRVEpID0KKyAgICAgICAgICAgIEFVWF9XVUNfUFdSRFdOUkVRX1JFUTsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX01DVUJVU0NUTCkgPSBBVVhfV1VDX01DVUJVU0NUTF9ESVNDT05ORUNUX1JFUTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1BXUkRXTlJFUSkgPSAweDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3d1Yy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYXV4X3d1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjdiZDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9hdXhfd3VjLmgKQEAgLTAsMCArMSwzNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBhb25fd3VjLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAyLTI0IDE0OjA4OjU1ICswMTAwIChXZWQsIDI0IEZlYiAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1NzY3CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEFVWCBXYWtldXAgQ29udHJvbGxlcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIGF1eF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgYXV4d3VjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19BVVhfV1VDX0hfXworI2RlZmluZSBfX0FVWF9XVUNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2F1eF93dWMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQVVYV1VDQ2xvY2tFbmFibGUgICAgICAgICAgICAgICBOT1JPTV9BVVhXVUNDbG9ja0VuYWJsZQorICAgICNkZWZpbmUgQVVYV1VDQ2xvY2tEaXNhYmxlICAgICAgICAgICAgICBOT1JPTV9BVVhXVUNDbG9ja0Rpc2FibGUKKyAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrU3RhdHVzICAgICAgICAgICAgICAgTk9ST01fQVVYV1VDQ2xvY2tTdGF0dXMKKyAgICAjZGVmaW5lIEFVWFdVQ1Bvd2VyQ3RybCAgICAgICAgICAgICAgICAgTk9ST01fQVVYV1VDUG93ZXJDdHJsCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBBVVggcG93ZXIgY29udHJvbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFVWF9XVUNfUE9XRVJfT0ZGICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19QT1dFUl9ET1dOICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1BPV0VSX0FDVElWRSAgICAweDAwMDAwMDA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgQVVYIHBlcmlwaGVyYWxzIGNsb2NrIGNvbnRyb2wuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBVVhfV1VDX1NNUEhfQ0xPQ0sgICAgICAoQVVYX1dVQ19NT0RDTEtFTjBfU01QSF9FTikKKyNkZWZpbmUgQVVYX1dVQ19BSU9ESU8wX0NMT0NLICAgKEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzBfRU4pCisjZGVmaW5lIEFVWF9XVUNfQUlPRElPMV9DTE9DSyAgIChBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8xX0VOKQorI2RlZmluZSBBVVhfV1VDX1RJTUVSX0NMT0NLICAgICAoQVVYX1dVQ19NT0RDTEtFTjBfVElNRVJfRU4pCisjZGVmaW5lIEFVWF9XVUNfQU5BSUZfQ0xPQ0sgICAgIChBVVhfV1VDX01PRENMS0VOMF9BTkFJRl9FTikKKyNkZWZpbmUgQVVYX1dVQ19URENJRl9DTE9DSyAgICAgKEFVWF9XVUNfTU9EQ0xLRU4wX1REQ19FTikKKyNkZWZpbmUgQVVYX1dVQ19PU0NDVFJMX0NMT0NLICAgKEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQ19FTikKKyNkZWZpbmUgQVVYX1dVQ19BRElfQ0xPQ0sgICAgICAgKEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9BREk0X0VOKQorI2RlZmluZSBBVVhfV1VDX01PRENMS19NQVNLICAgICAweDAwMDAwMEZGCisKKyNkZWZpbmUgQVVYX1dVQ19URENfQ0xPQ0sgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfV1VDX0FEQ19DTE9DSyAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9XVUNfUkVGX0NMT0NLICAgICAgIDB4MDAwMDA0MDAKKworI2RlZmluZSBBVVhfV1VDX0NMT0NLX09GRiAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEFVWF9XVUNfQ0xPQ0tfVU5TVEFCTEUgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19DTE9DS19SRUFEWSAgICAgMHgwMDAwMDAxMQorCisjZGVmaW5lIEFVWF9XVUNfQ0xPQ0tfSElGUkVRICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQVVYX1dVQ19DTE9DS19MT0ZSRVEgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgY2xvY2tzIGZvciBwZXJpcGhlcmFscyBpbiB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBzcGVjaWZpYyBjbG9ja3MgaW4gdGhlIEFVWCBkb21haW4uCisvLyEKKy8vISBccGFyYW0gdWkzMkNsb2NrcyBpcyBhIGJpdG1hcCBvZiBjbG9ja3MgdG8gZW5hYmxlLgorLy8hIFVzZSBhIGJpdHdpc2UgT1IgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIEFVWF9XVUNfQURJX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1REQ0lGX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfQU5BSUZfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19USU1FUl9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BSU9ESU8xX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfU01QSF9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1REQ19DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FEQ19DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1JFRl9DTE9DSworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhXVUNDbG9ja0Rpc2FibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQVVYV1VDQ2xvY2tFbmFibGUodWludDMyX3QgdWkzMkNsb2Nrcyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSBjbG9ja3MgZm9yIHBlcmlwaGVyYWxzIGluIHRoZSBBVVggZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIHNwZWNpZmljIGNsb2NrcyBpbiB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xvY2tzIGEgYml0bWFwIG9mIGNsb2NrcyB0byBkaXNhYmxlLgorLy8hIFVzZSBhIGJpdHdpc2UgT1IgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIEFVWF9XVUNfQURJX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1REQ0lGX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfQU5BSUZfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19USU1FUl9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BSU9ESU8xX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfU01QSF9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1REQ19DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FEQ19DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1JFRl9DTE9DSworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBBVVhXVUNDbG9ja0VuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBBVVhXVUNDbG9ja0Rpc2FibGUodWludDMyX3QgdWkzMkNsb2Nrcyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgb2YgYSBjbG9jay4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHBvbGwgdGhlIHN0YXR1cyBvZiBhIHNwZWNpZmljIGNsb2NrIGluIHRoZSBBVVgKKy8vISBkb21haW4uCisvLyEKKy8vISBccGFyYW0gdWkzMkNsb2NrcyBpcyB0aGUgY2xvY2sgZm9yIHdoaWNoIHRvIHJldHVybiBzdGF0dXMuCisvLyEgLSBccmVmIEFVWF9XVUNfQURJX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfT1NDQ1RSTF9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1REQ0lGX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfQU5BSUZfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19USU1FUl9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0sKKy8vISAtIFxyZWYgQVVYX1dVQ19BSU9ESU8xX0NMT0NLCisvLyEgLSBccmVmIEFVWF9XVUNfU01QSF9DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1REQ19DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX0FEQ19DTE9DSworLy8hIC0gXHJlZiBBVVhfV1VDX1JFRl9DTE9DSworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGNsb2NrIGFzIG9uZSBvZiB0d28gc3RhdGVzOgorLy8hIC0gXHJlZiBBVVhfV1VDX0NMT0NLX09GRgorLy8hIC0gXHJlZiBBVVhfV1VDX0NMT0NLX1JFQURZCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQVVYV1VDQ2xvY2tTdGF0dXModWludDMyX3QgdWkzMkNsb2Nrcyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVxdWVzdCBhIGhpZ2ggb3IgbG93IGZyZXF1ZW5jeSBjbG9jayBzb3VyY2UuCisvLyEKKy8vISBVc2luZyB0aGlzIGZ1bmN0aW9uIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBTeXN0ZW0KKy8vISBDb250cm9sIHRvIHVzZSBhIGhpZ2ggb3IgbG93IGZyZXF1ZW5jeSBjbG9jayBhcyBjbG9jayBzb3VyY2UgZm9yIHRoZSBBVVgKKy8vISBkb21haW4uCisvLyEKKy8vISBcbm90ZSBBIGxvdyBmcmVxdWVuY3kgY2xvY2sgaXMgYWx3YXlzIDMyIGtIeiwgd2hpbGUgYSBoaWdoIGZyZXF1ZW5jeSBjbG9jaworLy8hIGlzIHJlYWxseSBhIGxhcmdlIHNwYW4gb2YgZnJlcXVlbmNpZXMgZGV0ZXJtaW5lZCBieSB0aGUgY2xvY2sgc291cmNlIChIaWdoCisvLyEgRnJlcXVlbmN5IG9yIE1lZGl1bSBGcmVxdWVuY3kpIGFuZCB0aGUgc2V0dGluZyBmb3IgdGhlIGNsb2NrIGRpdmlkZXIgZm9yCisvLyEgdGhlIEFVWCBkb21haW4gaW4gdGhlIFN5c3RlbSBDb250cm9sLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDbG9ja0ZyZXEgZGV0ZXJtaW5lcyB0aGUgY2xvY2sgc291cmNlIGZyZXF1ZW5jeS4KKy8vISAtIFxyZWYgQVVYX1dVQ19DTE9DS19MT0ZSRVEgOiBSZXF1ZXN0IGxvdyBmcmVxdWVuY3kgY2xvY2sgc291cmNlIGZvciBBVVggZG9tYWluLgorLy8hIC0gXHJlZiBBVVhfV1VDX0NMT0NLX0hJRlJFUSA6IFJlcXVlc3QgaGlnaCBmcmVxdWVuY3kgY2xvY2sgc291cmNlIGZvciBBVVggZG9tYWluLgorLy8hCisvLyEgXHJldHVybgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFdVQ0Nsb2NrRnJlcVJlcSh1aW50MzJfdCB1aTMyQ2xvY2tGcmVxKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkNsb2NrRnJlcSA9PSBBVVhfV1VDX0NMT0NLX0hJRlJFUSkgfHwKKyAgICAgICAgICAgKHVpMzJDbG9ja0ZyZXEgPT0gQVVYX1dVQ19DTE9DS19MT0ZSRVEpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSByZXF1ZXN0CisgICAgLy8KKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQ0xLTEZSRVEpID0gdWkzMkNsb2NrRnJlcTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb250cm9sIHRoZSBwb3dlciB0byB0aGUgQVVYIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgcG93ZXIgbW9kZSBvZiB0aGUgZW50aXJlIEFVWCBkb21haW4uCisvLyEKKy8vISBccGFyYW0gdWkzMlBvd2VyTW9kZSBjb250cm9sIHRoZSBkZXNpcmVkIHBvd2VyIG1vZGUgZm9yIHRoZSBBVVggZG9tYWluLgorLy8hIFRoZSBkb21haW4gaGFzIHRocmVlIGRpZmZlcmVudCBwb3dlciBtb2RlczoKKy8vISAtIFxyZWYgQVVYX1dVQ19QT1dFUl9PRkYKKy8vISAtIFxyZWYgQVVYX1dVQ19QT1dFUl9ET1dOCisvLyEgLSBccmVmIEFVWF9XVUNfUE9XRVJfQUNUSVZFCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFVWFdVQ1Bvd2VyQ3RybCh1aW50MzJfdCB1aTMyUG93ZXJNb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRnJlZXplIHRoZSBBVVggSU9zLgorLy8hCisvLyEgVG8gcmV0YWluIHRoZSB2YWx1ZXMgb2YgdGhlIG91dHB1dCBJT3MgZHVyaW5nIGEgcG93ZXJkb3duIG9mIHRoZSBBVVggZG9tYWluCisvLyEgYWxsIElPIGxhdGNoZXMgaW4gdGhlIEFVWCBkb21haW4gc2hvdWxkIGJlIGZyb3plbiBpbiB0aGVpciBjdXJyZW50IHN0YXRlLgorLy8hIFRoaXMgZW5zdXJlcyB0aGF0IHNvZnR3YXJlIGNhbiByZWdhaW4gY29udHJvbCBvZiB0aGUgSU9zIGFmdGVyIGEgcG93ZXJkb3duCisvLyEgd2l0aG91dCB0aGUgSU9zIGZpcnN0IGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCB2YWx1ZXMgKGkuZS4gaW5wdXQgYW5kCisvLyEgcHVsbC11cCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBBVVhXVUNGcmVlemVEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQVVYV1VDRnJlZXplRW5hYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEFVWCBXVUMgbGF0Y2hlcyBhcyBzdGF0aWMuCisgICAgLy8KKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fQVVYSU9MQVRDSCkgPSAweDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVuZnJlZXplIHRoZSBBVVggSU9zLgorLy8hCisvLyEgV2hlbiByZXN0YXJ0aW5nIHRoZSBBVVggZG9tYWluIGFmdGVyIGl0IGhhcyBlbnRlcmVkIHBvd2VyZG93biBtb2RlLCB0aGUKKy8vISBzb2Z0d2FyZSBjYW4gcmVnYWluIGNvbnRyb2wgb2YgdGhlIElPcyBieSBzZXR0aW5nIHRoZSBJTyBsYXRjaGVzIGFzCisvLyEgdHJhbnNwYXJlbnQuCisvLyEKKy8vISBcbm90ZSBUaGUgSU9zIHNob3VsZCBub3QgYmUgdW5mcm96ZW4gYmVmb3JlIHNvZnR3YXJlIGhhcyByZXN0b3JlZAorLy8hIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBJTy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIEFVWFdVQ0ZyZWV6ZUVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0FVWFdVQ0ZyZWV6ZURpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFNldCB0aGUgQVVYIFdVQyBsYXRjaGVzIGFzIHRyYW5zcGFyZW50LgorICAgIC8vCisgICAgSFdSRUcoQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX0FVWElPTEFUQ0gpID0gQVVYX1dVQ19BVVhJT0xBVENIX0VOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9BVVhXVUNDbG9ja0VuYWJsZQorICAgICAgICAjdW5kZWYgIEFVWFdVQ0Nsb2NrRW5hYmxlCisgICAgICAgICNkZWZpbmUgQVVYV1VDQ2xvY2tFbmFibGUgICAgICAgICAgICAgICBST01fQVVYV1VDQ2xvY2tFbmFibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0FVWFdVQ0Nsb2NrRGlzYWJsZQorICAgICAgICAjdW5kZWYgIEFVWFdVQ0Nsb2NrRGlzYWJsZQorICAgICAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrRGlzYWJsZSAgICAgICAgICAgICAgUk9NX0FVWFdVQ0Nsb2NrRGlzYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQVVYV1VDQ2xvY2tTdGF0dXMKKyAgICAgICAgI3VuZGVmICBBVVhXVUNDbG9ja1N0YXR1cworICAgICAgICAjZGVmaW5lIEFVWFdVQ0Nsb2NrU3RhdHVzICAgICAgICAgICAgICAgUk9NX0FVWFdVQ0Nsb2NrU3RhdHVzCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9BVVhXVUNQb3dlckN0cmwKKyAgICAgICAgI3VuZGVmICBBVVhXVUNQb3dlckN0cmwKKyAgICAgICAgI2RlZmluZSBBVVhXVUNQb3dlckN0cmwgICAgICAgICAgICAgICAgIFJPTV9BVVhXVUNQb3dlckN0cmwKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfX0FVWF9XVUNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vY2NzL2RyaXZlcmxpYi5saWIgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vY2NzL2RyaXZlcmxpYi5saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4MGU0NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9jY3MvZHJpdmVybGliLmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vY2NzL21ha2VkZWZzIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2Njcy9tYWtlZGVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYxMzMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2Njcy9tYWtlZGVmcwpAQCAtMCwwICsxLDMgQEAKK0NPTVBJTEVSX1RPT0wgPSAiL2N5Z2RyaXZlL2MvdGkvQ0NTNi4yLjAuMDAwMTlfd2luMzItYmV0YTIvY2NzdjYvdG9vbHMvY29tcGlsZXIvdGktY2d0LWFybV8xNS4xMi4xLkxUUy9iaW4vYXJtY2wiCitDT01QSUxFUl9JTkNMID0gIkM6L3RpL0NDUzYuMi4wLjAwMDE5X3dpbjMyLWJldGEyL2Njc3Y2L3Rvb2xzL2NvbXBpbGVyL3RpLWNndC1hcm1fMTUuMTIuMS5MVFMvaW5jbHVkZSIKK0FSQ0hJVkVSX1RPT0wgPSAiL2N5Z2RyaXZlL2MvdGkvQ0NTNi4yLjAuMDAwMTlfd2luMzItYmV0YTIvY2NzdjYvdG9vbHMvY29tcGlsZXIvdGktY2d0LWFybV8xNS4xMi4xLkxUUy9iaW4vYXJtYXIiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vZ2NjL2RyaXZlcmxpYi5hIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9kcml2ZXJsaWIuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc2MjVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9kcml2ZXJsaWIuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vZ2NjL2RyaXZlcmxpYi5saWIgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vZ2NjL2RyaXZlcmxpYi5saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3NjI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9nY2MvZHJpdmVybGliLmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vZ2NjL21ha2VkZWZzIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9tYWtlZGVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWVlMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2djYy9tYWtlZGVmcwpAQCAtMCwwICsxLDIgQEAKK0NPTVBJTEVSX1RPT0wgPSAiL2N5Z2RyaXZlL2MvdGkvQ0NTNi4yLjAuMDAwMTlfd2luMzItYmV0YTIvY2NzdjYvdG9vbHMvY29tcGlsZXIvZ2NjLWFybS1ub25lLWVhYmktNF85LTIwMTVxMy9iaW4vYXJtLW5vbmUtZWFiaS1nY2MiCitBUkNISVZFUl9UT09MID0gIi9jeWdkcml2ZS9jL3RpL0NDUzYuMi4wLjAwMDE5X3dpbjMyLWJldGEyL2Njc3Y2L3Rvb2xzL2NvbXBpbGVyL2djYy1hcm0tbm9uZS1lYWJpLTRfOS0yMDE1cTMvYmluL2FybS1ub25lLWVhYmktYXIiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vaWFyL2RyaXZlcmxpYi5saWIgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vaWFyL2RyaXZlcmxpYi5saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzZTk3MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9pYXIvZHJpdmVybGliLmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4vaWFyL21ha2VkZWZzIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2lhci9tYWtlZGVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWRmNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2lhci9tYWtlZGVmcwpAQCAtMCwwICsxLDMgQEAKK0NPTVBJTEVSX1RPT0wgPSAiL2N5Z2RyaXZlL2MvUHJvZ3JhbSBGaWxlcyAoeDg2KS9JQVIgU3lzdGVtcy9JQVIgRVdBUk12Ny42MC4xL2FybS9iaW4vaWNjYXJtLmV4ZSIKK0FSQ0hJVkVSX1RPT0wgPSAiL2N5Z2RyaXZlL2MvUHJvZ3JhbSBGaWxlcyAoeDg2KS9JQVIgU3lzdGVtcy9JQVIgRVdBUk12Ny42MC4xL2FybS9iaW4vaWFyY2hpdmUuZXhlIgorT0JKX01BTklQX1RPT0wgPSAiL2N5Z2RyaXZlL2MvUHJvZ3JhbSBGaWxlcyAoeDg2KS9JQVIgU3lzdGVtcy9JQVIgRVdBUk12Ny42MC4xL2FybS9iaW4vaW9iam1hbmlwLmV4ZSIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9rZWlsL2RyaXZlcmxpYi5saWIgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4va2VpbC9kcml2ZXJsaWIubGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDlmMWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9iaW4va2VpbC9kcml2ZXJsaWIubGliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9rZWlsL21ha2VkZWZzIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvYmluL2tlaWwvbWFrZWRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRhYzhhMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2Jpbi9rZWlsL21ha2VkZWZzCkBAIC0wLDAgKzEsMiBAQAorQ09NUElMRVJfVE9PTCA9ICIvY3lnZHJpdmUvYy9LZWlsX3Y1L0FSTS9BUk1DQy9iaW4vYXJtY2MiCitBUkNISVZFUl9UT09MID0gIi9jeWdkcml2ZS9jL0tlaWxfdjUvQVJNL0FSTUNDL2Jpbi9hcm1hciIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jY2ZncmVhZC5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDI2NWYxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWQuYwpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgY2NmZ3JlYWQuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDgtMDQgMTE6NDQ6MjAgKzAyMDAgKFR1ZSwgMDQgQXVnIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQzMjkKKyoKKyogIERlc2NyaXB0aW9uOiAgICBBUEkgZm9yIHJlYWRpbmcgQ0NGRy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvY2NmZ3JlYWQuaD4KKworLy8gU2VlIGNjZmdyZWFkLmggZm9yIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jY2ZncmVhZC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FlYjIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWQuaApAQCAtMCwwICsxLDE4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNjZmdyZWFkLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAxLTA3IDIwOjA4OjIyICswMTAwIChUaHUsIDA3IEphbiAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1NDAwCisqCisqICBEZXNjcmlwdGlvbjogICAgQVBJIGZvciByZWFkaW5nIENDRkcuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBjY2ZncmVhZF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0NDRkdSRUFEX0hfXworI2RlZmluZSBfX0NDRkdSRUFEX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19jY2ZnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBHZW5lcmFsIGNvbnN0YW50cyBhbmQgZGVmaW5lcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCBESVNfR1BSQU0gZnJvbSBDQ0ZHLgorLy8hCisvLyEgXHJldHVybiBWYWx1ZSBvZiBDQ0ZHIGZpZWxkIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDQ0ZHUmVhZF9ESVNfR1BSQU0oIHZvaWQgKQoreworICAgIHJldHVybiAoKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX1NJWkVfQU5EX0RJU19GTEFHUyApICYKKyAgICAgICAgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNX00gKSA+PgorICAgICAgICBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU1fUyApIDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCBFWFRfTEZfQ0xLX0RJTyBmcm9tIENDRkcuCisvLyEKKy8vISBccmV0dXJuIFZhbHVlIG9mIENDRkcgZmllbGQgQ0NGR19FWFRfTEZfQ0xLX0RJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDQ0ZHUmVhZF9FWFRfTEZfQ0xLX0RJTyggdm9pZCApCit7CisgICAgcmV0dXJuICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fRVhUX0xGX0NMSyApICYKKyAgICAgICAgQ0NGR19FWFRfTEZfQ0xLX0RJT19NICkgPj4KKyAgICAgICAgQ0NGR19FWFRfTEZfQ0xLX0RJT19TICkgOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzIHJldHVybmVkIGZyb20gQ0NGR1JlYWRfU0NMS19MRl9PUFRJT04oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ0NGR1JFQURfU0NMS19MRl9PUFRJT05fWE9TQ19IRl9ETEYgKCBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9YT1NDX0hGX0RMRiA+PiBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICkKKyNkZWZpbmUgQ0NGR1JFQURfU0NMS19MRl9PUFRJT05fRVhURVJOQUxfTEYgKCBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9FWFRFUk5BTF9MRiA+PiBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICkKKyNkZWZpbmUgQ0NGR1JFQURfU0NMS19MRl9PUFRJT05fWE9TQ19MRiAgICAgKCBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9YT1NDX0xGICAgICA+PiBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICkKKyNkZWZpbmUgQ0NGR1JFQURfU0NMS19MRl9PUFRJT05fUkNPU0NfTEYgICAgKCBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9SQ09TQ19MRiAgICA+PiBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCBTQ0xLX0xGX09QVElPTiBmcm9tIENDRkcuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBDQ0ZHIGZpZWxkIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OIGZpZWxkLgorLy8hIFJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX1hPU0NfSEZfRExGCisvLyEgLSBccmVmIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX0VYVEVSTkFMX0xGCisvLyEgLSBccmVmIENDRkdSRUFEX1NDTEtfTEZfT1BUSU9OX1hPU0NfTEYKKy8vISAtIFxyZWYgQ0NGR1JFQURfU0NMS19MRl9PUFRJT05fUkNPU0NfTEYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0NDRkdSZWFkX1NDTEtfTEZfT1BUSU9OKCB2b2lkICkKK3sKKyAgICByZXR1cm4gKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19NT0RFX0NPTkYgKSAmCisgICAgICAgIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX00gKSA+PgorICAgICAgICBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICkgOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzIHJldHVybmVkIGZyb20gQ0NGR1JlYWRfWE9TQ19GUkVRKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIENDRkdSRUFEX1hPU0NfRlJFUV8yNE0gICAoIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV8yNE0gICA+PiBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfUyApCisjZGVmaW5lIENDRkdSRUFEX1hPU0NfRlJFUV80OE0gICAoIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV80OE0gICA+PiBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfUyApCisjZGVmaW5lIENDRkdSRUFEX1hPU0NfRlJFUV9IUE9TQyAoIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9IUE9TQyA+PiBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfUyApCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgWE9TQ19GUkVRIHNldHRpbmcgQ0NGRy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUSBmaWVsZC4KKy8vISBSZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBDQ0ZHUkVBRF9YT1NDX0ZSRVFfMjRNCisvLyEgLSBccmVmIENDRkdSRUFEX1hPU0NfRlJFUV80OE0KKy8vISAtIFxyZWYgQ0NGR1JFQURfWE9TQ19GUkVRX0hQT1NDCisvLyEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0NDRkdSZWFkX1hPU0NfRlJFUSggdm9pZCApCit7CisgICAgcmV0dXJuICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GICkgJgorICAgICAgICBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfTSApID4+CisgICAgICAgIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9TICkgOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQVVYX1NNUEhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2NmZ3JlYWRfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwYzVjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NjZmdyZWFkX2RvYy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjY2ZncmVhZF9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgY2NmZ3JlYWRfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfY2NmZ3JlYWQgSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgdmFsdWVzIG9mIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24gKENDRkcpIHNldHRpbmdzIGluIGZsYXNoIGFyZSBkZXRlcm1pbmVkIGJ5IGNjZmcuYyBhbmQgdHlwaWNhbGx5CisvLyEgYSB1c2VyIGFwcGxpY2F0aW9uIGRvZXMgbm90IG5lZWQgdG8gcmVhZCB0aGVzZSBDQ0ZHIHZhbHVlcyBhcyB0aGV5IGFyZSB1c2VkIG1haW5seSBkdXJpbmcgUk9NIGJvb3QKKy8vISBhbmQgZGV2aWNlIHRyaW1taW5nLiBIb3dldmVyLCBhIHN1YnNldCBvZiB0aGUgQ0NGRyBzZXR0aW5ncyBuZWVkIHRvIGJlIHJlYWQgYnkgYXBwbGljYXRpb24KKy8vISBjb2RlIHRodXMgRHJpdmVyTGliIHByb3ZpZGVzIHRoaXMgQVBJIHRvIGFsbG93IGVhc3kgcmVhZCBhY2Nlc3MgdG8gdGhlc2Ugc3BlY2lmaWMgc2V0dGluZ3MuCisvLyEKKy8vISBUaGUgcmVtYWluaW5nIHNldHRpbmdzIG5vdCBhY2Nlc3NpYmxlIHRocm91Z2ggdGhpcyBBUEkgY2FuIG9mIGNvdXJzZSBiZSByZWFkIGRpcmVjdGx5IGF0IHRoZSBDQ0ZHCisvLyEgYWRkcmVzc2VzIGluIHRoZSBmbGFzaCAoc3RhcnRpbmcgYXQgQ0NGR19CQVNFKSB1c2luZyB0aGUgSFdSRUcgbWFjcm8gYW5kIHRoZSBwcm92aWRlZCBkZWZpbmVzLgorLy8hIENDRkcgc2V0dGluZ3MgYXJlIGRvY3VtZW50ZWQgYXMgcGFydCBvZiB0aGUgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGluIHRoZSBDUFUgbWVtb3J5IG1hcC4KKy8vIQorLy8hIFxub3RlIENDRkcgc2V0dGluZ3MgYXJlIGxvY2F0ZWQgaW4gZmxhc2ggYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIHJlYWQtb25seSBmcm9tIGFuIGFwcGxpY2F0aW9uCisvLyEgcG9pbnQtb2Ytdmlldy4KKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2hpcGluZm8uYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NoaXBpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlODkxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NoaXBpbmZvLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBjaGlwaW5mby5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0yNCAxNTo0MjozMyArMDIwMCAoVHVlLCAyNCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjQ2NAorKgorKiAgRGVzY3JpcHRpb246ICAgIENvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIHJldHVybmluZyBjaGlwIGluZm9ybWF0aW9uLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9jaGlwaW5mby5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWIE5PUk9NX0NoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWCisgICAgI3VuZGVmICBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZQorICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUgICAgICAgICBOT1JPTV9DaGlwSW5mb19HZXRQYWNrYWdlVHlwZQorICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0Q2hpcFR5cGUKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldENoaXBUeXBlICAgICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0Q2hpcFR5cGUKKyAgICAjdW5kZWYgIENoaXBJbmZvX0dldENoaXBGYW1pbHkKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldENoaXBGYW1pbHkgICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0Q2hpcEZhbWlseQorICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0SHdSZXZpc2lvbgorICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0SHdSZXZpc2lvbiAgICAgICAgICBOT1JPTV9DaGlwSW5mb19HZXRId1JldmlzaW9uCisgICAgI3VuZGVmICBUaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQKKyAgICAjZGVmaW5lIFRoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZCBOT1JPTV9UaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1Byb3RvY29sQml0VmVjdG9yX3QKK0NoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWKCB2b2lkICkKK3sKKyAgIHJldHVybiAoKFByb3RvY29sQml0VmVjdG9yX3QpKCBIV1JFRyggUFJDTV9CQVNFICsgMHgxRDQgKSAmIDB4MEUgKSk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitQYWNrYWdlVHlwZV90CitDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSggdm9pZCApCit7CisgICBQYWNrYWdlVHlwZV90IHBhY2tUeXBlID0gKFBhY2thZ2VUeXBlX3QpKCgKKyAgICAgIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19VU0VSX0lEICAgICApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfVVNFUl9JRF9QS0dfTSApID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX1VTRVJfSURfUEtHX1MgKSA7CisKKyAgIGlmICgoIHBhY2tUeXBlIDwgUEFDS0FHRV80eDQgICkgfHwKKyAgICAgICAoIHBhY2tUeXBlID4gUEFDS0FHRV9XQ1NQICkgICAgKQorICAgeworICAgICAgcGFja1R5cGUgPSBQQUNLQUdFX1Vua25vd247CisgICB9CisKKyAgIHJldHVybiAoIHBhY2tUeXBlICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDaGlwRmFtaWx5X3QKK0NoaXBJbmZvX0dldENoaXBGYW1pbHkoIHZvaWQgKQoreworICAgQ2hpcEZhbWlseV90ICAgY2hpcEZhbSAgPSBGQU1JTFlfVW5rbm93biAgOworICAgdWludDMyX3QgICAgICAgd2FmZXJJZCAgICAgICAgICAgICAgICAgICAgOworCisgICB3YWZlcklkID0gKCggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0lDRVBJQ0tfREVWSUNFX0lEICkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfV0FGRVJfSURfTSApID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9XQUZFUl9JRF9TICkgOworCisgICBpZiAoIHdhZmVySWQgPT0gMHhCOTlBICkgeworICAgICAgaWYgKCBDaGlwSW5mb19HZXREZXZpY2VJZEh3UmV2Q29kZSgpID09IDB4QiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXBGYW0gPSBGQU1JTFlfQ0MyNnh4X1IyICAgIDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwRmFtID0gRkFNSUxZX0NDMjZ4eCAgICAgICA7CisgICAgICB9CisgICB9IGVsc2UgaWYgKCB3YWZlcklkID09IDB4QjlCRSApICBjaGlwRmFtID0gRkFNSUxZX0NDMTN4eCAgICAgICA7CisgICBlbHNlIGlmICggICB3YWZlcklkID09IDB4QkI0MSApICBjaGlwRmFtID0gRkFNSUxZX0NDMjZ4eF9BZ2EgICA7CisgICBlbHNlIGlmICggICB3YWZlcklkID09IDB4QkIyMCApICBjaGlwRmFtID0gRkFNSUxZX0NDMjZ4eF9MaXogICA7CisKKyAgIHJldHVybiAoIGNoaXBGYW0gKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hpcEluZm9fR2V0Q2hpcFR5cGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0NoaXBUeXBlX3QKK0NoaXBJbmZvX0dldENoaXBUeXBlKCB2b2lkICkKK3sKKyAgIENoaXBUeXBlX3QgY2hpcFR5cGUgICAgICA9IENISVBfVFlQRV9Vbmtub3duIDsKKyAgIHVpbnQzMl90ICAgZmNmZzFVc2VySWQgICA9IENoaXBJbmZvX0dldFVzZXJJZCgpOworICAgdWludDMyX3QgICBmY2ZnMVByb3RvY29sID0gKCggZmNmZzFVc2VySWQgJiBGQ0ZHMV9VU0VSX0lEX1BST1RPQ09MX00gKSA+PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9VU0VSX0lEX1BST1RPQ09MX1MgKSA7CisKKyAgIHN3aXRjaCggQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSgpICkgeworCisgICBjYXNlIEZBTUlMWV9DQzI2eHggOgorICAgICAgc3dpdGNoICggZmNmZzFQcm90b2NvbCApIHsKKyAgICAgIGNhc2UgMHgyIDoKKyAgICAgICAgIGNoaXBUeXBlID0gQ0hJUF9UWVBFX0NDMjYyMCA7CisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHg0IDoKKyAgICAgICAgIGNoaXBUeXBlID0gQ0hJUF9UWVBFX0NDMjYzMCA7CisgICAgICBjYXNlIDB4MSA6CisgICAgICBjYXNlIDB4OSA6CisgICAgICAgICBjaGlwVHlwZSA9IENISVBfVFlQRV9DQzI2NDAgOworICAgICAgICAgaWYgKCBmY2ZnMVVzZXJJZCAmICggMSA8PCAyMyApKSB7CisgICAgICAgICAgICBjaGlwVHlwZSA9IENISVBfVFlQRV9DVVNUT01fMTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAweEYgOgorICAgICAgICAgY2hpcFR5cGUgPSBDSElQX1RZUEVfQ0MyNjUwIDsKKyAgICAgICAgIGlmICggZmNmZzFVc2VySWQgJiAoIDEgPDwgMjQgKSkgeworICAgICAgICAgICAgY2hpcFR5cGUgPSBDSElQX1RZUEVfQ1VTVE9NXzA7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICBkZWZhdWx0IDoKKyAgICAgIGNoaXBUeXBlID0gQ0hJUF9UWVBFX1Vua25vd24gOworICAgICAgYnJlYWs7CisgICB9CisKKyAgIHJldHVybiAoIGNoaXBUeXBlICk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoaXBJbmZvX0dldEh3UmV2aXNpb24oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0h3UmV2aXNpb25fdAorQ2hpcEluZm9fR2V0SHdSZXZpc2lvbiggdm9pZCApCit7CisgICBId1JldmlzaW9uX3QgICBod1JldiAgICAgICA9IEhXUkVWX1Vua25vd24gICAgICAgICAgICAgICAgICAgICA7CisgICB1aW50MzJfdCAgICAgICBmY2ZnMVJldiAgICA9IENoaXBJbmZvX0dldERldmljZUlkSHdSZXZDb2RlKCkgICA7CisgICB1aW50MzJfdCAgICAgICBtaW5vckh3UmV2ICA9IENoaXBJbmZvX0dldE1pbm9ySHdSZXYoKSAgICAgICAgICA7CisKKyAgIHN3aXRjaCggQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSgpICkgeworICAgY2FzZSBGQU1JTFlfQ0MyNnh4IDoKKyAgICAgIHN3aXRjaCAoIGZjZmcxUmV2ICkgeworICAgICAgY2FzZSAxIDogLy8gQ0MyNnh4IFBHMS4wCisgICAgICAgICBod1JldiA9IEhXUkVWXzFfMDsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzIDogLy8gQ0MyNnh4IFBHMi4wCisgICAgICAgICBod1JldiA9IEhXUkVWXzJfMDsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA3IDogLy8gQ0MyNnh4IFBHMi4xCisgICAgICAgICBod1JldiA9IEhXUkVWXzJfMTsKKyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA4IDogLy8gQ0MyNnh4IFBHMi4yIChvciBsYXRlcikKKyAgICAgICAgIGh3UmV2ID0gKEh3UmV2aXNpb25fdCkoKCh1aW50MzJfdClIV1JFVl8yXzIgKSArIG1pbm9ySHdSZXYgKTsKKyAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICBjYXNlIEZBTUlMWV9DQzEzeHggOgorICAgICAgc3dpdGNoICggZmNmZzFSZXYgKSB7CisgICAgICBjYXNlIDAgOiAvLyBDQzEzeHggUEcxLjAKKyAgICAgICAgIGh3UmV2ID0gSFdSRVZfMV8wOworICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDIgOiAvLyBDQzEzeHggUEcyLjAgKG9yIGxhdGVyKQorICAgICAgICAgaHdSZXYgPSAoSHdSZXZpc2lvbl90KSgoKHVpbnQzMl90KUhXUkVWXzJfMCApICsgbWlub3JId1JldiApOworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgIGNhc2UgRkFNSUxZX0NDMjZ4eF9MaXogOgorICAgY2FzZSBGQU1JTFlfQ0MyNnh4X0FnYSA6CisgICAgICBzd2l0Y2ggKCBmY2ZnMVJldiApIHsKKyAgICAgIGNhc2UgMCA6IC8vIENDMjZ4eF9MaXogb3IgQ0MyNnh4X0FnYSBQRzEuMCAob3IgbGF0ZXIpCisgICAgICAgICBod1JldiA9IChId1JldmlzaW9uX3QpKCgodWludDMyX3QpSFdSRVZfMV8wICkgKyBtaW5vckh3UmV2ICk7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgY2FzZSBGQU1JTFlfQ0MyNnh4X1IyICA6CisgICAgICBod1JldiA9IChId1JldmlzaW9uX3QpKCgodWludDMyX3QpSFdSRVZfMV8wICkgKyBtaW5vckh3UmV2ICk7CisgICAgICBicmVhazsKKyAgIGRlZmF1bHQgOgorICAgICAgLy8gR0NDIGdpdmVzIHdhcm5pbmcgaWYgbm90IGhhbmRsaW5nIGFsbCBvcHRpb25zIGV4cGxpY2l0bHkgaW4gYSAic3dpdGNoIiBvbiBhIHZhcmlhYmxlIG9mIHR5cGUgImVudW0iCisgICAgICBicmVhazsKKyAgIH0KKworICAgcmV0dXJuICggaHdSZXYgKTsKK30KKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFRoaXNDb2RlSXNCdWlsdEZvckNDMjZ4eEh3UmV2MjJBbmRMYXRlcl9IYWx0SWZWaW9sYXRlZCgpCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQoIHZvaWQgKQoreworICAgaWYgKCggISBDaGlwSW5mb19DaGlwRmFtaWx5SXNDQzI2eHgoKSAgICApIHx8CisgICAgICAgKCAhIENoaXBJbmZvX0h3UmV2aXNpb25Jc19HVEVRXzJfMigpICkgICAgKQorICAgeworICAgICAgd2hpbGUoMSkKKyAgICAgIHsKKyAgICAgICAgIC8vCisgICAgICAgICAvLyBUaGlzIGRyaXZlcmxpYiB2ZXJzaW9uIGlzIGZvciBDQzI2eHggUEcyLjIgYW5kIGxhdGVyCisgICAgICAgICAvLyBEbyBub3RoaW5nIC0gc3RheSBoZXJlIGZvcmV2ZXIKKyAgICAgICAgIC8vCisgICAgICB9CisgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jaGlwaW5mby5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2hpcGluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MyNWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY2hpcGluZm8uaApAQCAtMCwwICsxLDYzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNoaXBpbmZvLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI0IDE1OjQyOjMzICswMjAwIChUdWUsIDI0IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDY0CisqCisqICBEZXNjcmlwdGlvbjogICAgQ29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgcmV0dXJuaW5nIGNoaXAgaW5mb3JtYXRpb24uCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBDaGlwSW5mbworLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQ0hJUF9JTkZPX0hfXworI2RlZmluZSBfX0NISVBfSU5GT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmNmZzEuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYgTk9ST01fQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldENoaXBUeXBlICAgICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0Q2hpcFR5cGUKKyAgICAjZGVmaW5lIENoaXBJbmZvX0dldENoaXBGYW1pbHkgICAgICAgICAgTk9ST01fQ2hpcEluZm9fR2V0Q2hpcEZhbWlseQorICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0SHdSZXZpc2lvbiAgICAgICAgICBOT1JPTV9DaGlwSW5mb19HZXRId1JldmlzaW9uCisgICAgI2RlZmluZSBUaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQgTk9ST01fVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW51bWVyYXRpb24gaWRlbnRpZnlpbmcgdGhlIHByb3RvY29scyBzdXBwb3J0ZWQuCisvLyEKKy8vISBcbm90ZQorLy8hIFRoaXMgaXMgYSBiaXQgdmVjdG9yIGVudW1lcmF0aW9uIHRoYXQgaW5kaWNhdGVzIHN1cHBvcnRlZCBwcm90b2NvbHMuCisvLyEgRS5nOiAweDA2IG1lYW5zIHRoYXQgdGhlIGNoaXAgc3VwcG9ydHMgYm90aCBCTEUgYW5kIElFRUUgODAyLjE1LjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIGVudW0geworICAgUFJPVE9DT0xfVW5rbm93biAgICAgICAgICA9IDAgICAsIC8vITwgTm9uZSBvZiB0aGUga25vd24gcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuCisgICBQUk9UT0NPTEJJVF9CTEUgICAgICAgICAgID0gMHgwMiwgLy8hPCBCaXRbMV0gc2V0LCBpbmRpY2F0ZXMgdGhhdCBCbHVldG9vdGggTG93IEVuZXJneSBpcyBzdXBwb3J0ZWQuCisgICBQUk9UT0NPTEJJVF9JRUVFXzgwMl8xNV80ID0gMHgwNCwgLy8hPCBCaXRbMl0gc2V0LCBpbmRpY2F0ZXMgdGhhdCBJRUVFIDgwMi4xNS40IGlzIHN1cHBvcnRlZC4KKyAgIFBST1RPQ09MQklUX1Byb3ByaWV0YXJ5ICAgPSAweDA4ICAvLyE8IEJpdFszXSBzZXQsIGluZGljYXRlcyB0aGF0IHByb3ByaWV0YXJ5IHByb3RvY29scyBhcmUgc3VwcG9ydGVkLgorfSBQcm90b2NvbEJpdFZlY3Rvcl90OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIGJpdCB2ZWN0b3Igc2hvd2luZyBzdXBwb3J0ZWQgcHJvdG9jb2xzLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXHJlZiBQcm90b2NvbEJpdFZlY3Rvcl90IHdoaWNoIGlzIGEgYml0IHZlY3RvciBpbmRpY2F0aW5nIHN1cHBvcnRlZCBwcm90b2NvbHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIFByb3RvY29sQml0VmVjdG9yX3QgQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYoIHZvaWQgKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaXAgc3VwcG9ydHMgdGhlIEJMRSBwcm90b2NvbC4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgc3VwcG9ydGluZyB0aGUgQkxFIHByb3RvY29sLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX1N1cHBvcnRzQkxFKCB2b2lkICkKK3sKKyAgIHJldHVybiAoKCBDaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CVigpICYgUFJPVE9DT0xCSVRfQkxFICkgIT0gMCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoaXAgc3VwcG9ydHMgdGhlIElFRUUgODAyLjE1LjQgcHJvdG9jb2wuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHN1cHBvcnRpbmcgdGhlIElFRUUgODAyLjE1LjQgcHJvdG9jb2wsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fU3VwcG9ydHNJRUVFXzgwMl8xNV80KCB2b2lkICkKK3sKKyAgIHJldHVybiAoKCBDaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CVigpICYgUFJPVE9DT0xCSVRfSUVFRV84MDJfMTVfNCApICE9IDAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlwIHN1cHBvcnRzIHByb3ByaWF0YXJ5IHByb3RvY29scy4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgc3VwcG9ydGluZyBwcm9wcmlhdGFyeSBwcm90b2NvbHMsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fU3VwcG9ydHNQUk9QUklFVEFSWSggdm9pZCApCit7CisgICByZXR1cm4gKCggQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYoKSAmIFBST1RPQ09MQklUX1Byb3ByaWV0YXJ5ICkgIT0gMCApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFBhY2thZ2UgdHlwZSBlbnVtZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgZW51bSB7CisgICBQQUNLQUdFX1Vua25vd24gICA9IC0xLCAvLyE8IC0xIG1lYW5zIHRoYXQgY3VycmVudCBjaGlwIHR5cGUgaXMgdW5rbm93bi4KKyAgIFBBQ0tBR0VfNHg0ICAgICAgID0gIDAsIC8vITwgIDAgbWVhbnMgdGhhdCB0aGlzIGlzIGEgNHg0bW0gY2hpcC4KKyAgIFBBQ0tBR0VfNXg1ICAgICAgID0gIDEsIC8vITwgIDEgbWVhbnMgdGhhdCB0aGlzIGlzIGEgNXg1bW0gY2hpcC4KKyAgIFBBQ0tBR0VfN3g3ICAgICAgID0gIDIsIC8vITwgIDIgbWVhbnMgdGhhdCB0aGlzIGlzIGEgN3g3bW0gY2hpcC4KKyAgIFBBQ0tBR0VfV0FGRVIgICAgID0gIDMsIC8vITwgIDMgbWVhbnMgdGhhdCB0aGlzIGlzIGEgd2FmZXIgc2FsZSBjaGlwIChuYWtlZCBkaWUpLgorICAgUEFDS0FHRV9XQ1NQICAgICAgPSAgNCAgLy8hPCAgNCBtZWFucyB0aGF0IHRoaXMgaXMgYSBXQ1NQIGNoaXAgKGZsaXAgY2hpcCkuCit9IFBhY2thZ2VUeXBlX3Q7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgcGFja2FnZSB0eXBlLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXHJlZiBQYWNrYWdlVHlwZV90CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIFBhY2thZ2VUeXBlX3QgQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSA0eDRtbSBjaGlwLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGlzIGEgNHg0bW0gY2hpcCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19QYWNrYWdlVHlwZUlzNHg0KCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlKCkgPT0gUEFDS0FHRV80eDQgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSA1eDVtbSBjaGlwLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGlzIGEgNXg1bW0gY2hpcCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19QYWNrYWdlVHlwZUlzNXg1KCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlKCkgPT0gUEFDS0FHRV81eDUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSA3eDdtbSBjaGlwLgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGlzIGEgN3g3bW0gY2hpcCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19QYWNrYWdlVHlwZUlzN3g3KCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlKCkgPT0gUEFDS0FHRV83eDcgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSB3YWZlciBzYWxlIGNoaXAgKG5ha2VkIGRpZSkuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHRoaXMgaXMgYSB3YWZlciBzYWxlIGNoaXAsIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fUGFja2FnZVR5cGVJc1dBRkVSKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldFBhY2thZ2VUeXBlKCkgPT0gUEFDS0FHRV9XQUZFUiApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIFdDU1AgY2hpcCAoZmxpcCBjaGlwKS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBpcyBhIFdDU1AgY2hpcCwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19QYWNrYWdlVHlwZUlzV0NTUCggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSgpID09IFBBQ0tBR0VfV0NTUCApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIGludGVybmFsIGNoaXAgSFcgcmV2aXNpb24gY29kZS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIHRoZSBpbnRlcm5hbCBjaGlwIEhXIHJldmlzaW9uIGNvZGUgKGluIHJhbmdlIDAtMTUpCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0NoaXBJbmZvX0dldERldmljZUlkSHdSZXZDb2RlKCB2b2lkICkKK3sKKyAgIC8vIFJldHVybnMgSHdSZXZDb2RlID0gRkNGRzFfT19JQ0VQSUNLX0RFVklDRV9JRFszMToyOF0KKyAgIHJldHVybiAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19JQ0VQSUNLX0RFVklDRV9JRCApID4+IDI4ICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgbWlub3IgaGFyZHdhcmUgcmV2aXNpb24gbnVtYmVyCisvLyEKKy8vISBUaGUgbWlub3IgcmV2aXNpb24gbnVtYmVyIGlzIHNldCB0byAwIGZvciB0aGUgZmlyc3QgbWFya2V0IHJlbGVhc2VkIGNoaXAKKy8vISBhbmQgdGhlcmVhZnRlciBpbmNyZW1lbnRlZCBieSAxIGZvciBlYWNoIG1pbm9yIGhhcmR3YXJlIGNoYW5nZS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIHRoZSBtaW5vciBoYXJkd2FyZSByZXZpc2lvbiBudW1iZXIgKGluIHJhbmdlIDAtMTI3KQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorQ2hpcEluZm9fR2V0TWlub3JId1Jldiggdm9pZCApCit7CisgICB1aW50MzJfdCBtaW5vclJldiA9ICgoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19NSVNDX0NPTkZfMSApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfTUlTQ19DT05GXzFfREVWSUNFX01JTk9SX1JFVl9NICkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfTUlTQ19DT05GXzFfREVWSUNFX01JTk9SX1JFVl9TICkgOworCisgICBpZiAoIG1pbm9yUmV2ID49IDB4ODAgKSB7CisgICAgICBtaW5vclJldiA9IDA7CisgICB9CisKKyAgIHJldHVybiggbWlub3JSZXYgKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSAzMiBiaXRzIFVTRVJfSUQgZmllbGQKKy8vIQorLy8hIEhvdyB0byBkZWNvZGUgdGhlIFVTRVJfSUQgZmlsZWQgaXMgZGVzY3JpYmVkIGluIHRoZSBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbCAoVFJNKQorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgdGhlIHRoZSAzMiBiaXRzIFVTRVJfSUQgZmllbGQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0NoaXBJbmZvX0dldFVzZXJJZCggdm9pZCApCit7CisgICByZXR1cm4gKCBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fVVNFUl9JRCApKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGlwIHR5cGUgZW51bWVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIGVudW0geworICAgQ0hJUF9UWVBFX1Vua25vd24gICAgICAgPSAtMSwgLy8hPCAtMSBtZWFucyB0aGF0IHRoZSBjaGlwIHR5cGUgaXMgdW5rbm93bi4KKyAgIENISVBfVFlQRV9DQzEzMTAgICAgICAgID0gIDAsIC8vITwgIDAgbWVhbnMgdGhhdCB0aGlzIGlzIGEgQ0MxMzEwIGNoaXAuCisgICBDSElQX1RZUEVfQ0MxMzUwICAgICAgICA9ICAxLCAvLyE8ICAxIG1lYW5zIHRoYXQgdGhpcyBpcyBhIENDMTM1MCBjaGlwLgorICAgQ0hJUF9UWVBFX0NDMjYyMCAgICAgICAgPSAgMiwgLy8hPCAgMiBtZWFucyB0aGF0IHRoaXMgaXMgYSBDQzI2MjAgY2hpcC4KKyAgIENISVBfVFlQRV9DQzI2MzAgICAgICAgID0gIDMsIC8vITwgIDMgbWVhbnMgdGhhdCB0aGlzIGlzIGEgQ0MyNjMwIGNoaXAuCisgICBDSElQX1RZUEVfQ0MyNjQwICAgICAgICA9ICA0LCAvLyE8ICA0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIENDMjY0MCBjaGlwLgorICAgQ0hJUF9UWVBFX0NDMjY1MCAgICAgICAgPSAgNSwgLy8hPCAgNSBtZWFucyB0aGF0IHRoaXMgaXMgYSBDQzI2NTAgY2hpcC4KKyAgIENISVBfVFlQRV9DVVNUT01fMCAgICAgID0gIDYsIC8vITwgIDYgbWVhbnMgdGhhdCB0aGlzIGlzIGEgQ1VTVE9NXzAgY2hpcC4KKyAgIENISVBfVFlQRV9DVVNUT01fMSAgICAgID0gIDcgIC8vITwgIDcgbWVhbnMgdGhhdCB0aGlzIGlzIGEgQ1VTVE9NXzEgY2hpcC4KK30gQ2hpcFR5cGVfdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBjaGlwIHR5cGUuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBccmVmIENoaXBUeXBlX3QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gQ2hpcFR5cGVfdCBDaGlwSW5mb19HZXRDaGlwVHlwZSggdm9pZCApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoaXAgZmFtaWx5IGVudW1lcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiBlbnVtIHsKKyAgIEZBTUlMWV9Vbmtub3duICAgICAgID0gLTEsIC8vITwgLTEgbWVhbnMgdGhhdCB0aGUgY2hpcCdzIGZhbWlseSBtZW1iZXIgaXMgdW5rbm93bi4KKyAgIEZBTUlMWV9DQzI2eHggICAgICAgID0gIDAsIC8vITwgIDAgbWVhbnMgdGhhdCB0aGUgY2hpcCBpcyBhIENDMjZ4MCBmYW1pbHkgbWVtYmVyLgorICAgRkFNSUxZX0NDMTN4eCAgICAgICAgPSAgMSwgLy8hPCAgMSBtZWFucyB0aGF0IHRoZSBjaGlwIGlzIGEgQ0MxM3gwIGZhbWlseSBtZW1iZXIuCisgICBGQU1JTFlfQ0MyNnh4X0xpeiAgICA9ICAyLCAvLyE8ICAyIG1lYW5zIHRoYXQgdGhlIGNoaXAgaXMgYSBDQzI2eDEgZmFtaWx5IG1lbWJlci4KKyAgIEZBTUlMWV9DQzI2eHhfQWdhICAgID0gIDMsIC8vITwgIDMgbWVhbnMgdGhhdCB0aGUgY2hpcCBpcyBhIENDeHh4Mi94eHg0IGZhbWlseSBtZW1iZXIuCisgICBGQU1JTFlfQ0MyNnh4X1IyICAgICA9ICA0ICAvLyE8ICA0IG1lYW5zIHRoYXQgdGhlIGNoaXAgaXMgYSBDQzI2eDBfUjIgZmFtaWx5IChuZXcgUk9NIGNvbnRlbnRzKS4KK30gQ2hpcEZhbWlseV90OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIGNoaXAgZmFtaWx5IG1lbWJlci4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxyZWYgQ2hpcEZhbWlseV90CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIENoaXBGYW1pbHlfdCBDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHggZmFtaWx5LgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHggZmFtaWx5LCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0NoaXBGYW1pbHlJc0NDMjZ4eCggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCkgPT0gRkFNSUxZX0NDMjZ4eCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MxM3h4IGZhbWlseS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MxM3h4IGZhbWlseSwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19DaGlwRmFtaWx5SXNDQzEzeHgoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0Q2hpcEZhbWlseSgpID09IEZBTUlMWV9DQzEzeHggKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgY2hpcCBpcyBtZW1iZXIgb2YgdGhlIENDMjZ4eF9SMiBmYW1pbHkuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIHRoaXMgY2hpcCBpcyBtZW1iZXIgb2YgdGhlIENDMjZ4eF9SMiBmYW1pbHksIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fQ2hpcEZhbWlseUlzQ0MyNnh4X1IyKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldENoaXBGYW1pbHkoKSA9PSBGQU1JTFlfQ0MyNnh4X1IyICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHhfTGl6IGZhbWlseS4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgdGhpcyBjaGlwIGlzIG1lbWJlciBvZiB0aGUgQ0MyNnh4X0xpeiBmYW1pbHksIFxjIGZhbHNlIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorQ2hpcEluZm9fQ2hpcEZhbWlseUlzQ0MyNnh4X0xpeiggdm9pZCApCit7CisgICByZXR1cm4gKCBDaGlwSW5mb19HZXRDaGlwRmFtaWx5KCkgPT0gRkFNSUxZX0NDMjZ4eF9MaXogKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoaXMgY2hpcCBpcyBtZW1iZXIgb2YgdGhlIENDMjZ4eF9BZ2EgZmFtaWx5LgorLy8hCisvLyEgXHJldHVybgorLy8hIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGlzIGNoaXAgaXMgbWVtYmVyIG9mIHRoZSBDQzI2eHhfQWdhIGZhbWlseSwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19DaGlwRmFtaWx5SXNDQzI2eHhfQWdhKCB2b2lkICkKK3sKKyAgIHJldHVybiAoIENoaXBJbmZvX0dldENoaXBGYW1pbHkoKSA9PSBGQU1JTFlfQ0MyNnh4X0FnYSApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEhXIHJldmlzaW9uIGVudW1lcmF0aW9uLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgZW51bSB7CisgICBIV1JFVl9Vbmtub3duICAgICA9IC0xLCAvLyE8IC0xIG1lYW5zIHRoYXQgdGhlIGNoaXAncyBIVyByZXZpc2lvbiBpcyB1bmtub3duLgorICAgSFdSRVZfMV8wICAgICAgICAgPSAxMCwgLy8hPCAxMCBtZWFucyB0aGF0IHRoZSBjaGlwJ3MgSFcgcmV2aXNpb24gaXMgMS4wCisgICBIV1JFVl8yXzAgICAgICAgICA9IDIwLCAvLyE8IDIwIG1lYW5zIHRoYXQgdGhlIGNoaXAncyBIVyByZXZpc2lvbiBpcyAyLjAKKyAgIEhXUkVWXzJfMSAgICAgICAgID0gMjEsIC8vITwgMjEgbWVhbnMgdGhhdCB0aGUgY2hpcCdzIEhXIHJldmlzaW9uIGlzIDIuMQorICAgSFdSRVZfMl8yICAgICAgICAgPSAyMiwgLy8hPCAyMiBtZWFucyB0aGF0IHRoZSBjaGlwJ3MgSFcgcmV2aXNpb24gaXMgMi4yCisgICBIV1JFVl8yXzMgICAgICAgICA9IDIzICAvLyE8IDIzIG1lYW5zIHRoYXQgdGhlIGNoaXAncyBIVyByZXZpc2lvbiBpcyAyLjMKK30gSHdSZXZpc2lvbl90OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIGNoaXAgSFcgcmV2aXNpb24uCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBccmVmIEh3UmV2aXNpb25fdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBId1JldmlzaW9uX3QgQ2hpcEluZm9fR2V0SHdSZXZpc2lvbiggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAxLjAuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMS4wLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0h3UmV2aXNpb25Jc18xXzAoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID09IEhXUkVWXzFfMCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjAuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4wLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0h3UmV2aXNpb25Jc18yXzAoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID09IEhXUkVWXzJfMCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjAgb3IgZ3JlYXRlci4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjAgb3IgZ3JlYXRlciwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfR1RFUV8yXzAoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID49IEhXUkVWXzJfMCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjEuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4xLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0h3UmV2aXNpb25Jc18yXzEoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID09IEhXUkVWXzJfMSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjEgb3IgZ3JlYXRlci4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjEgb3IgZ3JlYXRlciwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfR1RFUV8yXzEoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID49IEhXUkVWXzJfMSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjIuCisvLyEKKy8vISBccmV0dXJuCisvLyEgUmV0dXJucyBcYyB0cnVlIGlmIEhXIHJldmlzaW9uIGZvciB0aGlzIGNoaXAgaXMgMi4yLCBcYyBmYWxzZSBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0NoaXBJbmZvX0h3UmV2aXNpb25Jc18yXzIoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID09IEhXUkVWXzJfMiApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjIgb3IgZ3JlYXRlci4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjIgb3IgZ3JlYXRlciwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfR1RFUV8yXzIoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID49IEhXUkVWXzJfMiApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjMgb3IgZ3JlYXRlci4KKy8vIQorLy8hIFxyZXR1cm4KKy8vISBSZXR1cm5zIFxjIHRydWUgaWYgSFcgcmV2aXNpb24gZm9yIHRoaXMgY2hpcCBpcyAyLjMgb3IgZ3JlYXRlciwgXGMgZmFsc2Ugb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitDaGlwSW5mb19Id1JldmlzaW9uSXNfR1RFUV8yXzMoIHZvaWQgKQoreworICAgcmV0dXJuICggQ2hpcEluZm9fR2V0SHdSZXZpc2lvbigpID49IEhXUkVWXzJfMyApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFZlcmlmaWVzIHRoYXQgY3VycmVudCBjaGlwIGlzIGJ1aWx0IGZvciBDQzI2eHggSHdSZXYgMi4yIG9yIGxhdGVyIGFuZCBuZXZlciByZXR1cm5zIGlmIHZpb2xhdGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0NoaXBJbmZvX0dldFN1cHBvcnRlZFByb3RvY29sX0JWCisgICAgICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYKKyAgICAgICAgI2RlZmluZSBDaGlwSW5mb19HZXRTdXBwb3J0ZWRQcm90b2NvbF9CViBST01fQ2hpcEluZm9fR2V0U3VwcG9ydGVkUHJvdG9jb2xfQlYKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NoaXBJbmZvX0dldFBhY2thZ2VUeXBlCisgICAgICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0UGFja2FnZVR5cGUKKyAgICAgICAgI2RlZmluZSBDaGlwSW5mb19HZXRQYWNrYWdlVHlwZSAgICAgICAgIFJPTV9DaGlwSW5mb19HZXRQYWNrYWdlVHlwZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ2hpcEluZm9fR2V0Q2hpcFR5cGUKKyAgICAgICAgI3VuZGVmICBDaGlwSW5mb19HZXRDaGlwVHlwZQorICAgICAgICAjZGVmaW5lIENoaXBJbmZvX0dldENoaXBUeXBlICAgICAgICAgICAgUk9NX0NoaXBJbmZvX0dldENoaXBUeXBlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DaGlwSW5mb19HZXRDaGlwRmFtaWx5CisgICAgICAgICN1bmRlZiAgQ2hpcEluZm9fR2V0Q2hpcEZhbWlseQorICAgICAgICAjZGVmaW5lIENoaXBJbmZvX0dldENoaXBGYW1pbHkgICAgICAgICAgUk9NX0NoaXBJbmZvX0dldENoaXBGYW1pbHkKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NoaXBJbmZvX0dldEh3UmV2aXNpb24KKyAgICAgICAgI3VuZGVmICBDaGlwSW5mb19HZXRId1JldmlzaW9uCisgICAgICAgICNkZWZpbmUgQ2hpcEluZm9fR2V0SHdSZXZpc2lvbiAgICAgICAgICBST01fQ2hpcEluZm9fR2V0SHdSZXZpc2lvbgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkCisgICAgICAgICN1bmRlZiAgVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkCisgICAgICAgICNkZWZpbmUgVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkIFJPTV9UaGlzQ29kZUlzQnVpbHRGb3JDQzI2eHhId1JldjIyQW5kTGF0ZXJfSGFsdElmVmlvbGF0ZWQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQ0hJUF9JTkZPX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHUuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGUwMDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHUuYwpAQCAtMCwwICsxLDQyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNwdS5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0zMCAxMDoxMDo0NSArMDIwMCAoTW9uLCAzMCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjU0OAorKgorKiAgRGVzY3JpcHRpb246ICAgIEluc3RydWN0aW9uIHdyYXBwZXJzIGZvciBzcGVjaWFsIENQVSBpbnN0cnVjdGlvbnMgbmVlZGVkIGJ5CisqICAgICAgICAgICAgICAgICAgdGhlIGRyaXZlcnMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgQ1BVY3BzaWQKKyAgICAjZGVmaW5lIENQVWNwc2lkICAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVY3BzaWQKKyAgICAjdW5kZWYgIENQVXByaW1hc2sKKyAgICAjZGVmaW5lIENQVXByaW1hc2sgICAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVcHJpbWFzaworICAgICN1bmRlZiAgQ1BVY3BzaWUKKyAgICAjZGVmaW5lIENQVWNwc2llICAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVY3BzaWUKKyAgICAjdW5kZWYgIENQVWJhc2VwcmlHZXQKKyAgICAjZGVmaW5lIENQVWJhc2VwcmlHZXQgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVYmFzZXByaUdldAorICAgICN1bmRlZiAgQ1BVZGVsYXkKKyAgICAjZGVmaW5lIENQVWRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVZGVsYXkKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGUgYWxsIGV4dGVybmFsIGludGVycnVwdHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQordWludDMyX3QKK0NQVWNwc2lkKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0sgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXJzICAgICByMCwgUFJJTUFTS1xuIgorICAgICAgICAgICIgICAgY3BzaWQgICBpXG4iKTsKKworICAgIC8vCisgICAgLy8gIldhcm5pbmdbUGU5NDBdOiBtaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQgYXQgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIgorICAgIC8vIGlzIHN1cHByZXNzZWQgaGVyZSB0byBhdm9pZCBwdXR0aW5nIGEgImJ4IGxyIiBpbiB0aGUgaW5saW5lIGFzc2VtYmx5CisgICAgLy8gYWJvdmUgYW5kIGEgc3VwZXJmbHVvdXMgcmV0dXJuIHN0YXRlbWVudCBoZXJlLgorICAgIC8vCisjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGU5NDAKK30KKyNwcmFnbWEgZGlhZ19kZWZhdWx0PVBlOTQwCisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIHVpbnQzMl90CitDUFVjcHNpZCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLIGFuZCBkaXNhYmxlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBtcnMgICAgIHIwLCBQUklNQVNLOworICAgIGNwc2lkICAgaTsKKyAgICBieCAgICAgIGxyCit9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCit1aW50MzJfdAorQ1BVY3BzaWQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iCisgICAgICAgICAgIiAgICBjcHNpZCAgIGlcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIpOworCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGtlZXBzIHRoZSBjb21waWxlciBoYXBweSwgYmVjYXVzZSBpdCB3YW50cyB0byBzZWUgYQorICAgIC8vIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24uICBJdCB3aWxsIGdlbmVyYXRlIGNvZGUgdG8gcmV0dXJuCisgICAgLy8gYSB6ZXJvLiAgSG93ZXZlciwgdGhlIHJlYWwgcmV0dXJuIGlzIHRoZSAiYnggbHIiIGFib3ZlLCBzbyB0aGUKKyAgICAvLyByZXR1cm4oMCkgaXMgbmV2ZXIgZXhlY3V0ZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdpdGggdGhlIHZhbHVlCisgICAgLy8geW91IGV4cGVjdCBpbiBSMC4KKyAgICAvLworICAgIHJldHVybigwKTsKK30KKyNlbHNlCit1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitDUFVjcHNpZCh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJSZXQ7CisKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGNwc2lkICAgaVxuIgorICAgICAgICAgICIgICAgYnggICAgICBsclxuIgorICAgICAgOiAiPXIiKHVpMzJSZXQpKTsKKworICAgIC8vCisgICAgLy8gVGhlIHJldHVybiBpcyBoYW5kbGVkIGluIHRoZSBpbmxpbmUgYXNzZW1ibHksIGJ1dCB0aGUgY29tcGlsZXIgd2lsbAorICAgIC8vIHN0aWxsIGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vdCBhbiBleHBsaWNpdCByZXR1cm4gaGVyZSAoZGVzcGl0ZSB0aGUgZmFjdAorICAgIC8vIHRoYXQgdGhpcyBkb2VzIG5vdCByZXN1bHQgaW4gYW55IGNvZGUgYmVpbmcgcHJvZHVjZWQgYmVjYXVzZSBvZiB0aGUKKyAgICAvLyBuYWtlZCBhdHRyaWJ1dGUpLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJSZXQpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0ZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCit1aW50MzJfdAorQ1BVcHJpbWFzayh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLLgorICAgIC8vCisgICAgX19hc20oIiAgICBtcnMgICAgIHIwLCBQUklNQVNLXG4iKTsKKworICAgIC8vCisgICAgLy8gIldhcm5pbmdbUGU5NDBdOiBtaXNzaW5nIHJldHVybiBzdGF0ZW1lbnQgYXQgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIgorICAgIC8vIGlzIHN1cHByZXNzZWQgaGVyZSB0byBhdm9pZCBwdXR0aW5nIGEgImJ4IGxyIiBpbiB0aGUgaW5saW5lIGFzc2VtYmx5CisgICAgLy8gYWJvdmUgYW5kIGEgc3VwZXJmbHVvdXMgcmV0dXJuIHN0YXRlbWVudCBoZXJlLgorICAgIC8vCisjcHJhZ21hIGRpYWdfc3VwcHJlc3M9UGU5NDAKK30KKyNwcmFnbWEgZGlhZ19kZWZhdWx0PVBlOTQwCisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIHVpbnQzMl90CitDUFVwcmltYXNrKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0suCisgICAgLy8KKyAgICBtcnMgICAgIHIwLCBQUklNQVNLOworICAgIGJ4ICAgICAgbHIKK30KKyNlbGlmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoRE9YWUdFTikKK3VpbnQzMl90CitDUFVwcmltYXNrKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIFBSSU1BU0suCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIpOworCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGtlZXBzIHRoZSBjb21waWxlciBoYXBweSwgYmVjYXVzZSBpdCB3YW50cyB0byBzZWUgYQorICAgIC8vIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgZnVuY3Rpb24uICBJdCB3aWxsIGdlbmVyYXRlIGNvZGUgdG8gcmV0dXJuCisgICAgLy8gYSB6ZXJvLiAgSG93ZXZlciwgdGhlIHJlYWwgcmV0dXJuIGlzIHRoZSAiYnggbHIiIGFib3ZlLCBzbyB0aGUKKyAgICAvLyByZXR1cm4oMCkgaXMgbmV2ZXIgZXhlY3V0ZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdpdGggdGhlIHZhbHVlCisgICAgLy8geW91IGV4cGVjdCBpbiBSMC4KKyAgICAvLworICAgIHJldHVybigwKTsKK30KKyNlbHNlCit1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChuYWtlZCkpCitDUFVwcmltYXNrKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlJldDsKKworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIKKyAgICAgIDogIj1yIih1aTMyUmV0KSk7CisKKyAgICAvLworICAgIC8vIFRoZSByZXR1cm4gaXMgaGFuZGxlZCBpbiB0aGUgaW5saW5lIGFzc2VtYmx5LCBidXQgdGhlIGNvbXBpbGVyIHdpbGwKKyAgICAvLyBzdGlsbCBjb21wbGFpbiBpZiB0aGVyZSBpcyBub3QgYW4gZXhwbGljaXQgcmV0dXJuIGhlcmUgKGRlc3BpdGUgdGhlIGZhY3QKKyAgICAvLyB0aGF0IHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGFueSBjb2RlIGJlaW5nIHByb2R1Y2VkIGJlY2F1c2Ugb2YgdGhlCisgICAgLy8gbmFrZWQgYXR0cmlidXRlKS4KKyAgICAvLworICAgIHJldHVybih1aTMyUmV0KTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZSBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCit1aW50MzJfdAorQ1BVY3BzaWUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZW5hYmxlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGNwc2llICAgaVxuIik7CisKKyAgICAvLworICAgIC8vICJXYXJuaW5nW1BlOTQwXTogbWlzc2luZyByZXR1cm4gc3RhdGVtZW50IGF0IGVuZCBvZiBub24tdm9pZCBmdW5jdGlvbiIKKyAgICAvLyBpcyBzdXBwcmVzc2VkIGhlcmUgdG8gYXZvaWQgcHV0dGluZyBhICJieCBsciIgaW4gdGhlIGlubGluZSBhc3NlbWJseQorICAgIC8vIGFib3ZlIGFuZCBhIHN1cGVyZmx1b3VzIHJldHVybiBzdGF0ZW1lbnQgaGVyZS4KKyAgICAvLworI3ByYWdtYSBkaWFnX3N1cHByZXNzPVBlOTQwCit9CisjcHJhZ21hIGRpYWdfZGVmYXVsdD1QZTk0MAorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCitfX2FzbSB1aW50MzJfdAorQ1BVY3BzaWUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZW5hYmxlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBtcnMgICAgIHIwLCBQUklNQVNLOworICAgIGNwc2llICAgaTsKKyAgICBieCAgICAgIGxyCit9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCit1aW50MzJfdAorQ1BVY3BzaWUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgUFJJTUFTSyBhbmQgZW5hYmxlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIFBSSU1BU0tcbiIKKyAgICAgICAgICAiICAgIGNwc2llICAgaVxuIgorICAgICAgICAgICIgICAgYnggICAgICBsclxuIik7CisKKyAgICAvLworICAgIC8vIFRoZSBmb2xsb3dpbmcga2VlcHMgdGhlIGNvbXBpbGVyIGhhcHB5LCBiZWNhdXNlIGl0IHdhbnRzIHRvIHNlZSBhCisgICAgLy8gcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbi4gIEl0IHdpbGwgZ2VuZXJhdGUgY29kZSB0byByZXR1cm4KKyAgICAvLyBhIHplcm8uICBIb3dldmVyLCB0aGUgcmVhbCByZXR1cm4gaXMgdGhlICJieCBsciIgYWJvdmUsIHNvIHRoZQorICAgIC8vIHJldHVybigwKSBpcyBuZXZlciBleGVjdXRlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aCB0aGUgdmFsdWUKKyAgICAvLyB5b3UgZXhwZWN0IGluIFIwLgorICAgIC8vCisgICAgcmV0dXJuKDApOworfQorI2Vsc2UKK3VpbnQzMl90IF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK0NQVWNwc2llKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlJldDsKKworICAgIC8vCisgICAgLy8gUmVhZCBQUklNQVNLIGFuZCBlbmFibGUgaW50ZXJydXB0cy4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXJzICAgICByMCwgUFJJTUFTS1xuIgorICAgICAgICAgICIgICAgY3BzaWUgICBpXG4iCisgICAgICAgICAgIiAgICBieCAgICAgIGxyXG4iCisgICAgICA6ICI9ciIodWkzMlJldCkpOworCisgICAgLy8KKyAgICAvLyBUaGUgcmV0dXJuIGlzIGhhbmRsZWQgaW4gdGhlIGlubGluZSBhc3NlbWJseSwgYnV0IHRoZSBjb21waWxlciB3aWxsCisgICAgLy8gc3RpbGwgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm90IGFuIGV4cGxpY2l0IHJldHVybiBoZXJlIChkZXNwaXRlIHRoZSBmYWN0CisgICAgLy8gdGhhdCB0aGlzIGRvZXMgbm90IHJlc3VsdCBpbiBhbnkgY29kZSBiZWluZyBwcm9kdWNlZCBiZWNhdXNlIG9mIHRoZQorICAgIC8vIG5ha2VkIGF0dHJpYnV0ZSkuCisgICAgLy8KKyAgICByZXR1cm4odWkzMlJldCk7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgdGhlIGludGVycnVwdCBwcmlvcml0eSBkaXNhYmxlIGxldmVsCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK3VpbnQzMl90CitDUFViYXNlcHJpR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZWFkIEJBU0VQUkkuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIEJBU0VQUklcbiIpOworCisgICAgLy8KKyAgICAvLyAiV2FybmluZ1tQZTk0MF06IG1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudCBhdCBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24iCisgICAgLy8gaXMgc3VwcHJlc3NlZCBoZXJlIHRvIGF2b2lkIHB1dHRpbmcgYSAiYnggbHIiIGluIHRoZSBpbmxpbmUgYXNzZW1ibHkKKyAgICAvLyBhYm92ZSBhbmQgYSBzdXBlcmZsdW91cyByZXR1cm4gc3RhdGVtZW50IGhlcmUuCisgICAgLy8KKyNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QZTk0MAorfQorI3ByYWdtYSBkaWFnX2RlZmF1bHQ9UGU5NDAKKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorX19hc20gdWludDMyX3QKK0NQVWJhc2VwcmlHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgQkFTRVBSSS4KKyAgICAvLworICAgIG1ycyAgICAgcjAsIEJBU0VQUkk7CisgICAgYnggICAgICBscgorfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQordWludDMyX3QKK0NQVWJhc2VwcmlHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJlYWQgQkFTRVBSSS4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXJzICAgICByMCwgQkFTRVBSSVxuIgorICAgICAgICAgICIgICAgYnggICAgICBsclxuIik7CisKKyAgICAvLworICAgIC8vIFRoZSBmb2xsb3dpbmcga2VlcHMgdGhlIGNvbXBpbGVyIGhhcHB5LCBiZWNhdXNlIGl0IHdhbnRzIHRvIHNlZSBhCisgICAgLy8gcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbi4gIEl0IHdpbGwgZ2VuZXJhdGUgY29kZSB0byByZXR1cm4KKyAgICAvLyBhIHplcm8uICBIb3dldmVyLCB0aGUgcmVhbCByZXR1cm4gaXMgdGhlICJieCBsciIgYWJvdmUsIHNvIHRoZQorICAgIC8vIHJldHVybigwKSBpcyBuZXZlciBleGVjdXRlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aCB0aGUgdmFsdWUKKyAgICAvLyB5b3UgZXhwZWN0IGluIFIwLgorICAgIC8vCisgICAgcmV0dXJuKDApOworfQorI2Vsc2UKK3VpbnQzMl90IF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK0NQVWJhc2VwcmlHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmV0OworCisgICAgLy8KKyAgICAvLyBSZWFkIEJBU0VQUkkuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIG1ycyAgICAgcjAsIEJBU0VQUklcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHJcbiIKKyAgICAgIDogIj1yIih1aTMyUmV0KSk7CisKKyAgICAvLworICAgIC8vIFRoZSByZXR1cm4gaXMgaGFuZGxlZCBpbiB0aGUgaW5saW5lIGFzc2VtYmx5LCBidXQgdGhlIGNvbXBpbGVyIHdpbGwKKyAgICAvLyBzdGlsbCBjb21wbGFpbiBpZiB0aGVyZSBpcyBub3QgYW4gZXhwbGljaXQgcmV0dXJuIGhlcmUgKGRlc3BpdGUgdGhlIGZhY3QKKyAgICAvLyB0aGF0IHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGFueSBjb2RlIGJlaW5nIHByb2R1Y2VkIGJlY2F1c2Ugb2YgdGhlCisgICAgLy8gbmFrZWQgYXR0cmlidXRlKS4KKyAgICAvLworICAgIHJldHVybih1aTMyUmV0KTsKK30KKyNlbmRpZgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBQcm92aWRlIGEgc21hbGwgZGVsYXkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQordm9pZAorQ1BVZGVsYXkodWludDMyX3QgdWkzMkNvdW50KQoreworICAgIC8vCisgICAgLy8gRGVsYXkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMgKDMgY3ljbGVzIHByLiBsb29wKQorICAgIC8vCisgICAgX19hc20oIkNQVWRlbGF5OlxuIgorICAgICAgICAgICIgICAgc3VicyAgICByMCwgIzFcbiIKKyAgICAgICAgICAiICAgIGJuZS5uICAgQ1BVZGVsYXlcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHIiKTsKKyNwcmFnbWEgZGlhZ19zdXBwcmVzcz1QZTk0MAorfQorI3ByYWdtYSBkaWFnX2RlZmF1bHQ9UGU5NDAKKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorX19hc20gdm9pZAorQ1BVZGVsYXkodWludDMyX3QgdWkzMkNvdW50KQoreworICAgIC8vCisgICAgLy8gRGVsYXkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMgKDMgY3ljbGVzIHByLiBsb29wKQorICAgIC8vCitDUFVkZWwKKyAgICBzdWJzICAgIHIwLCAjMTsKKyAgICBibmUgICAgIENQVWRlbDsKKyAgICBieCAgICAgIGxyOworfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQorLy8KKy8vIEZvciBDQ1MgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gaW4gcHVyZSBhc3NlbWJseS4gVGhpcyBwcmV2ZW50cyB0aGUgVEkKKy8vIGNvbXBpbGVyIGZyb20gZG9pbmcgZnVubnkgdGhpbmdzIHdpdGggdGhlIG9wdGltaXplci4KKy8vCisgICAgLy8KKyAgICAvLyBEZWxheSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0aW1lcyAoMyBjeWNsZXMgcHIuIGxvb3ApCisgICAgLy8KK19fYXNtKCIgICAgLnNlY3QgXCIudGV4dDpOT1JPTV9DUFVkZWxheVwiXG4iCisgICAgICAiICAgIC5jbGlua1xuIgorICAgICAgIiAgICAudGh1bWJmdW5jIE5PUk9NX0NQVWRlbGF5XG4iCisgICAgICAiICAgIC50aHVtYlxuIgorICAgICAgIiAgICAuZ2xvYmFsIE5PUk9NX0NQVWRlbGF5XG4iCisgICAgICAiTk9ST01fQ1BVZGVsYXk6XG4iCisgICAgICAiICAgIHN1YnMgcjAsICMxXG4iCisgICAgICAiICAgIGJuZS5uIE5PUk9NX0NQVWRlbGF5XG4iCisgICAgICAiICAgIGJ4IGxyXG4iKTsKKyNlbHNlCit2b2lkIF9fYXR0cmlidXRlX18oKG5ha2VkKSkKK0NQVWRlbGF5KHVpbnQzMl90IHVpMzJDb3VudCkKK3sKKyAgICAvLworICAgIC8vIERlbGF5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzICgzIGN5Y2xlcyBwci4gbG9vcCkKKyAgICAvLworICAgIF9fYXNtKCIgICAgc3VicyAgICAlMCwgIzFcbiIKKyAgICAgICAgICAiICAgIGJuZSAgICAgTk9ST01fQ1BVZGVsYXlcbiIKKyAgICAgICAgICAiICAgIGJ4ICAgICAgbHIiCisgICAgICAgICAgOiAiK3IiICh1aTMyQ291bnQpCisgICAgICAgICAgOgorICAgICAgICAgIDoKKyAgICAgICAgICApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHUuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NThmNTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHUuaApAQCAtMCwwICsxLDQ1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNwdS5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMS0wNiAxNTo1NTo0OCArMDEwMCAoV2VkLCAwNiBKYW4gMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTM4NQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBDUFUgaW5zdHJ1Y3Rpb24gd3JhcHBlcgorKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NwdV9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgY3B1X2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQ1BVX0hfXworI2RlZmluZSBfX0NQVV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY3B1X3Njcy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBDUFVjcHNpZCAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVWNwc2lkCisgICAgI2RlZmluZSBDUFVwcmltYXNrICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NQVXByaW1hc2sKKyAgICAjZGVmaW5lIENQVWNwc2llICAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVY3BzaWUKKyAgICAjZGVmaW5lIENQVWJhc2VwcmlHZXQgICAgICAgICAgICAgICAgICAgTk9ST01fQ1BVYmFzZXByaUdldAorICAgICNkZWZpbmUgQ1BVZGVsYXkgICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9DUFVkZWxheQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHRzLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWJsZSBhbGwgc3lzdGVtIGludGVycnVwdHMuIFRoaXMgZnVuY3Rpb24gaXMKKy8vISBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBDUFNJRCBpbnN0cnVjdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdGUgb2YgXGIgUFJJTUFTSyBvbiBlbnRyeQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUFVjcHNpZCh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0ZS4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHRzLiBUaGlzCisvLyEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgc3RhdGUgb2YKKy8vISBQUklNQVNLLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgXGIgUFJJTUFTSyAoaW5kaWNhdGluZyB3aGV0aGVyIGludGVycnVwdHMKKy8vISBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENQVXByaW1hc2sodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0cy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSBhbGwgc3lzdGVtIGludGVycnVwdHMuIFRoaXMgZnVuY3Rpb24gaXMKKy8vISBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBDUFNJRSBpbnN0cnVjdGlvbi4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdGUgb2YgXGIgUFJJTUFTSyBvbiBlbnRyeS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1BVY3BzaWUodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdhaXQgZm9yIGludGVycnVwdC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGxldCB0aGUgU3lzdGVtIENQVSB3YWl0IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuIFRoaXMKKy8vISBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBXRkkgaW5zdHJ1Y3Rpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXdmaSh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgaW50ZXJydXB0LgorICAgIC8vCisgICAgX19hc20oIiAgICB3ZmlcbiIpOworfQorI2VsaWYgZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pCitfX2FzbSBfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVd2ZpKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICB3Zmk7CisgICAgYnggICAgICBscgorfQorI2VsaWYgZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChET1hZR0VOKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXdmaSh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgaW50ZXJydXB0LgorICAgIC8vCisgICAgX19hc20oIiAgICB3ZmlcbiIpOworfQorI2Vsc2UKK19fU1RBVElDX0lOTElORSB2b2lkIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorQ1BVd2ZpKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIHdmaVxuIik7Cit9CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV2FpdCBmb3IgZXZlbnQuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBsZXQgdGhlIFN5c3RlbSBDUFUgd2FpdCBmb3IgdGhlIG5leHQgZXZlbnQuIFRoaXMKKy8vISBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBXRkUgaW5zdHJ1Y3Rpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXdmZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgZXZlbnQuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIHdmZVxuIik7Cit9CisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIF9fU1RBVElDX0lOTElORSB2b2lkCitDUFV3ZmUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGV2ZW50LgorICAgIC8vCisgICAgd2ZlOworICAgIGJ4ICAgICAgbHIKK30KKyNlbGlmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoRE9YWUdFTikKK19fU1RBVElDX0lOTElORSB2b2lkCitDUFV3ZmUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHRoZSBuZXh0IGV2ZW50LgorICAgIC8vCisgICAgX19hc20oIiAgICB3ZmVcbiIpOworfQorI2Vsc2UKK19fU1RBVElDX0lOTElORSB2b2lkIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorQ1BVd2ZlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBldmVudC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgd2ZlXG4iKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZW5kIGV2ZW50LgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gbGV0IHRoZSBTeXN0ZW0gQ1BVIHNlbmQgYW4gZXZlbnQuIFRoaXMgZnVuY3Rpb24gaXMKKy8vISBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBTRVYgaW5zdHJ1Y3Rpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXNldih2b2lkKQoreworICAgIC8vCisgICAgLy8gU2VuZCBldmVudC4KKyAgICAvLworICAgIF9fYXNtKCIgICAgc2V2XG4iKTsKK30KKyNlbGlmIGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKQorX19hc20gX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NQVXNldih2b2lkKQoreworICAgIC8vCisgICAgLy8gU2VuZCBldmVudC4KKyAgICAvLworICAgIHNldjsKKyAgICBieCAgICAgIGxyCit9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVc2V2KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZW5kIGV2ZW50LgorICAgIC8vCisgICAgX19hc20oIiAgICBzZXZcbiIpOworfQorI2Vsc2UKK19fU1RBVElDX0lOTElORSB2b2lkIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorQ1BVc2V2KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBTZW5kIGV2ZW50LgorICAgIC8vCisgICAgX19hc20oIiAgICBzZXZcbiIpOworfQorI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVXBkYXRlIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgZGlzYWJsZSBsZXZlbC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgcHJpb3JpdHkgdGhhdCB3aWxsIGRpc2FibGUKKy8vISBpbnRlcnJ1cHRzIHdpdGggYSBsb3dlciBwcmlvcml0eSBsZXZlbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTmV3QmFzZXByaSBpcyB0aGUgbmV3IGJhc2lzIHByaW9yaXR5IGxldmVsIHRvIHNldC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVYmFzZXByaVNldCh1aW50MzJfdCB1aTMyTmV3QmFzZXByaSkKK3sKKyAgICAvLworICAgIC8vIFNldCB0aGUgQkFTRVBSSSByZWdpc3Rlci4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXNyICAgICBCQVNFUFJJLCByMFxuIik7Cit9CisjZWxpZiBkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikKK19fYXNtIF9fU1RBVElDX0lOTElORSB2b2lkCitDUFViYXNlcHJpU2V0KHVpbnQzMl90IHVpMzJOZXdCYXNlcHJpKQoreworICAgIC8vCisgICAgLy8gU2V0IHRoZSBCQVNFUFJJIHJlZ2lzdGVyLgorICAgIC8vCisgICAgbXNyICAgICBCQVNFUFJJLCByMDsKKyAgICBieCAgICAgIGxyCit9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKSB8fCBkZWZpbmVkKERPWFlHRU4pCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVYmFzZXByaVNldCh1aW50MzJfdCB1aTMyTmV3QmFzZXByaSkKK3sKKyAgICAvLworICAgIC8vIFNldCB0aGUgQkFTRVBSSSByZWdpc3Rlci4KKyAgICAvLworICAgIF9fYXNtKCIgICAgbXNyICAgICBCQVNFUFJJLCByMFxuIik7Cit9CisjZWxzZQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XYXR0cmlidXRlcyIKK19fU1RBVElDX0lOTElORSB2b2lkIF9fYXR0cmlidXRlX18gKChuYWtlZCkpCitDUFViYXNlcHJpU2V0KHVpbnQzMl90IHVpMzJOZXdCYXNlcHJpKQoreworICAgLy8KKyAgIC8vIFNldCB0aGUgQkFTRVBSSSByZWdpc3Rlci4KKyAgIC8vCisgICBfX2FzbSgiICAgIG1zciAgICAgQkFTRVBSSSwgJTBcbiIKKyAgICAgICAgICIgICAgYnggICAgICBsclxuIgorICAgICAgICAgOgorICAgICAgICAgOiAiciIgKHVpMzJOZXdCYXNlcHJpKQorICAgICAgICAgOgorICAgICAgICAgKTsKK30KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgZGlzYWJsZSBsZXZlbC4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgdGhlIGxldmVsIG9mIHByaW9yaXR5IHRoYXQgd2lsbCBkaXNhYmxlCisvLyEgaW50ZXJydXB0cyB3aXRoIGEgbG93ZXIgcHJpb3JpdHkgbGV2ZWwuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBcYiBCQVNFUFJJIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUFViYXNlcHJpR2V0KHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQcm92aWRlIGEgc21hbGwgZGVsYXkuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIG1lYW5zIGZvciBnZW5lcmF0aW5nIGEgY29uc3RhbnQgbGVuZ3RoIGRlbGF5LiBJdAorLy8hIGlzIHdyaXR0ZW4gaW4gYXNzZW1ibHkgdG8ga2VlcCB0aGUgZGVsYXkgY29uc2lzdGVudCBhY3Jvc3MgdG9vbCBjaGFpbnMsCisvLyEgYXZvaWRpbmcgdGhlIG5lZWQgdG8gdHVuZSB0aGUgZGVsYXkgYmFzZWQgb24gdGhlIHRvb2wgY2hhaW4gaW4gdXNlLgorLy8hCisvLyEgVGhlIGxvb3AgdGFrZXMgMyBjeWNsZXMvbG9vcC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ291bnQgaXMgdGhlIG51bWJlciBvZiBkZWxheSBsb29wIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIENQVWRlbGF5KHVpbnQzMl90IHVpMzJDb3VudCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgQ1BVIHdyaXRlIGJ1ZmZlcmluZyAocmVjb21tZW5kZWQgZm9yIGRlYnVnIHB1cnBvc2Ugb25seSkuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGhlbHBzIGRlYnVnZ2luZyAiYnVzIGZhdWx0IGNyYXNoZXMiLgorLy8hIERpc2FibGVzIHdyaXRlIGJ1ZmZlciB1c2UgZHVyaW5nIGRlZmF1bHQgbWVtb3J5IG1hcCBhY2Nlc3Nlcy4KKy8vIQorLy8hIFRoaXMgY2F1c2VzIGFsbCBidXMgZmF1bHRzIHRvIGJlIHByZWNpc2UgYnVzIGZhdWx0cyBidXQgZGVjcmVhc2VzIHRoZQorLy8hIHBlcmZvcm1hbmNlIG9mIHRoZSBwcm9jZXNzb3IgYmVjYXVzZSB0aGUgc3RvcmVzIHRvIG1lbW9yeSBoYXZlIHRvIGNvbXBsZXRlCisvLyEgYmVmb3JlIHRoZSBuZXh0IGluc3RydWN0aW9uIGNhbiBiZSBleGVjdXRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQ1BVX1dyaXRlQnVmZmVyRW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVX1dyaXRlQnVmZmVyRGlzYWJsZSggdm9pZCApCit7CisgICAgSFdSRUdCSVRXKCBDUFVfU0NTX0JBU0UgKyBDUFVfU0NTX09fQUNUTFIsIENQVV9TQ1NfQUNUTFJfRElTREVGV0JVRl9CSVROICkgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgQ1BVIHdyaXRlIGJ1ZmZlcmluZyAoZGVmYXVsdCBzZXR0aW5nKS4KKy8vIQorLy8hIFJlLWVuYWJsZXMgd3JpdGUgYnVmZmVyIGR1cmluZyBkZWZhdWx0IG1lbW9yeSBtYXAgYWNjZXNzZXMgaWYKKy8vISBccmVmIENQVV9Xcml0ZUJ1ZmZlckRpc2FibGUoKSBoYXMgYmVlbiB1c2VkIGZvciBidXMgZmF1bHQgZGVidWdnaW5nLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBDUFVfV3JpdGVCdWZmZXJEaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1BVX1dyaXRlQnVmZmVyRW5hYmxlKCB2b2lkICkKK3sKKyAgICBIV1JFR0JJVFcoIENQVV9TQ1NfQkFTRSArIENQVV9TQ1NfT19BQ1RMUiwgQ1BVX1NDU19BQ1RMUl9ESVNERUZXQlVGX0JJVE4gKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0NQVWNwc2lkCisgICAgICAgICN1bmRlZiAgQ1BVY3BzaWQKKyAgICAgICAgI2RlZmluZSBDUFVjcHNpZCAgICAgICAgICAgICAgICAgICAgICAgIFJPTV9DUFVjcHNpZAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1BVcHJpbWFzaworICAgICAgICAjdW5kZWYgIENQVXByaW1hc2sKKyAgICAgICAgI2RlZmluZSBDUFVwcmltYXNrICAgICAgICAgICAgICAgICAgICAgIFJPTV9DUFVwcmltYXNrCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUFVjcHNpZQorICAgICAgICAjdW5kZWYgIENQVWNwc2llCisgICAgICAgICNkZWZpbmUgQ1BVY3BzaWUgICAgICAgICAgICAgICAgICAgICAgICBST01fQ1BVY3BzaWUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NQVWJhc2VwcmlHZXQKKyAgICAgICAgI3VuZGVmICBDUFViYXNlcHJpR2V0CisgICAgICAgICNkZWZpbmUgQ1BVYmFzZXByaUdldCAgICAgICAgICAgICAgICAgICBST01fQ1BVYmFzZXByaUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1BVZGVsYXkKKyAgICAgICAgI3VuZGVmICBDUFVkZWxheQorICAgICAgICAjZGVmaW5lIENQVWRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgUk9NX0NQVWRlbGF5CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0NQVV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1X2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3B1X2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxODIxMTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcHVfZG9jLmgKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNwdV9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgY3B1X2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2NwdSBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBDUFUgQVBJIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBwZXJmb3JtaW5nIHZlcnkgbG93LWxldmVsIGNvbnRyb2wgb2YgdGhlIHN5c3RlbSBDUFUuCisvLyEgQWxsIGZ1bmN0aW9ucyBpbiB0aGlzIEFQSSBhcmUgd3JpdHRlbiBpbiBhc3NlbWJsZXIgaW4gb3JkZXIgdG8gZWl0aGVyIGFjY2VzcyBzcGVjaWFsIHJlZ2lzdGVycworLy8hIG9yIGF2b2lkIGFueSBjb21waWxlciBvcHRpbWl6YXRpb25zLiBFYWNoIGZ1bmN0aW9uIGV4aXN0cyBpbiBzZXZlcmFsIGNvbXBpbGVyIHNwZWNpZmljIHZlcnNpb25zOgorLy8hIE9uZSB2ZXJzaW9uIGZvciBlYWNoIHN1cHBvcnRlZCBjb21waWxlci4KKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3J5cHRvLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQ3MGI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvY3J5cHRvLmMKQEAgLTAsMCArMSwxMjQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgY3J5cHRvLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI3IDA5OjM3OjU0ICswMjAwIChGcmksIDI3IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NTE5CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgQ3J5cHRvIG1vZHVsZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9jcnlwdG8uaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIENSWVBUT0Flc0xvYWRLZXkKKyAgICAjZGVmaW5lIENSWVBUT0Flc0xvYWRLZXkgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPQWVzTG9hZEtleQorICAgICN1bmRlZiAgQ1JZUFRPQWVzQ2JjCisgICAgI2RlZmluZSBDUllQVE9BZXNDYmMgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0NiYworICAgICN1bmRlZiAgQ1JZUFRPQWVzQ2JjU3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9BZXNDYmNTdGF0dXMgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0NiY1N0YXR1cworICAgICN1bmRlZiAgQ1JZUFRPQWVzRWNiCisgICAgI2RlZmluZSBDUllQVE9BZXNFY2IgICAgICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0VjYgorICAgICN1bmRlZiAgQ1JZUFRPQWVzRWNiU3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9BZXNFY2JTdGF0dXMgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0VjYlN0YXR1cworICAgICN1bmRlZiAgQ1JZUFRPQ2NtQXV0aEVuY3J5cHQKKyAgICAjZGVmaW5lIENSWVBUT0NjbUF1dGhFbmNyeXB0ICAgICAgICAgICAgTk9ST01fQ1JZUFRPQ2NtQXV0aEVuY3J5cHQKKyAgICAjdW5kZWYgIENSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cyAgICAgIE5PUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzCisgICAgI3VuZGVmICBDUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldAorICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQgICBOT1JPTV9DUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldAorICAgICN1bmRlZiAgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQKKyAgICAjZGVmaW5lIENSWVBUT0NjbUludkF1dGhEZWNyeXB0ICAgICAgICAgTk9ST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQKKyAgICAjdW5kZWYgIENSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cyAgIE5PUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzCisgICAgI3VuZGVmICBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldAorICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQgTk9ST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQKKyAgICAjdW5kZWYgIENSWVBUT0RtYUVuYWJsZQorICAgICNkZWZpbmUgQ1JZUFRPRG1hRW5hYmxlICAgICAgICAgICAgICAgICBOT1JPTV9DUllQVE9EbWFFbmFibGUKKyAgICAjdW5kZWYgIENSWVBUT0RtYURpc2FibGUKKyAgICAjZGVmaW5lIENSWVBUT0RtYURpc2FibGUgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPRG1hRGlzYWJsZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDdXJyZW50IEFFUyBvcGVyYXRpb24gaW5pdGlhbGl6ZWQgdG8gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvbGF0aWxlIHVpbnQzMl90IGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfTk9ORTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdyaXRlIHRoZSBrZXkgaW50byB0aGUgS2V5IFJhbS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQWVzTG9hZEtleSh1aW50MzJfdCAqcHVpMzJBZXNLZXksCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJLZXlMb2NhdGlvbikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJLZXlMb2NhdGlvbiA9PSBDUllQVE9fS0VZX0FSRUFfMCkgfAorICAgICAgICAgICAodWkzMktleUxvY2F0aW9uID09IENSWVBUT19LRVlfQVJFQV8xKSB8CisgICAgICAgICAgICh1aTMyS2V5TG9jYXRpb24gPT0gQ1JZUFRPX0tFWV9BUkVBXzIpIHwKKyAgICAgICAgICAgKHVpMzJLZXlMb2NhdGlvbiA9PSBDUllQVE9fS0VZX0FSRUFfMykgfAorICAgICAgICAgICAodWkzMktleUxvY2F0aW9uID09IENSWVBUT19LRVlfQVJFQV80KSB8CisgICAgICAgICAgICh1aTMyS2V5TG9jYXRpb24gPT0gQ1JZUFRPX0tFWV9BUkVBXzUpIHwKKyAgICAgICAgICAgKHVpMzJLZXlMb2NhdGlvbiA9PSBDUllQVE9fS0VZX0FSRUFfNikgfAorICAgICAgICAgICAodWkzMktleUxvY2F0aW9uID09IENSWVBUT19LRVlfQVJFQV83KSk7CisKKyAgICAvLworICAgIC8vIFNldCBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZSBvZiB0aGUgQ3J5cHRvIG1vZHVsZS4KKyAgICAvLworICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfS0VZTDBBRDsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IHRvIHN0b3AgdGhlIGludGVycnVwdCBmb3JtIHByb3BhZ2F0aW5nCisgICAgLy8gZnJvbSB0aGUgbW9kdWxlIHRvIHRoZSBTeXN0ZW0gQ1BVLgorICAgIC8vCisgICAgSW50RGlzYWJsZShJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgaW50ZXJuYWwgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRVFlQRSkgPSBDUllQVE9fSVJRVFlQRV9MRVZFTDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSA9IENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlLgorICAgIC8vCisgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUxHU0VMLCBDUllQVE9fQUxHU0VMX0tFWV9TVE9SRV9CSVROKSA9IDE7CisKKyAgICAvLworICAgIC8vIENsZWFyIGFueSBvdXRzdGFuZGluZyBldmVudHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIGtleSBzdG9yZSBtb2R1bGUgZm9yIDEyOCBiaXQgb3BlcmF0aW9uLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlTSVpFKSAmPSB+Q1JZUFRPX0tFWVNJWkVfU0laRV9NOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZU0laRSkgfD0gS0VZX1NUT1JFX1NJWkVfMTI4OworCisgICAgLy8KKyAgICAvLyBFbmFibGUga2V5cyB0byB3cml0ZSAoZS5nLiBLZXkgMCkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0tFWVdSSVRFQVJFQSkgPSAoMHgwMDAwMDAwMSA8PCB1aTMyS2V5TG9jYXRpb24pOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgQ3J5cHRvIERNQSBjaGFubmVsIDAuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBDVEwsIENSWVBUT19ETUFDSDBDVExfRU5fQklUTikgPSAxOworCisgICAgLy8KKyAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIGtleSBpbiBleHQuIG1lbW9yeS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwRVhUQUREUikgPSAodWludDMyX3QpcHVpMzJBZXNLZXk7CisKKyAgICAvLworICAgIC8vIFRvdGFsIGtleSBsZW5ndGggaW4gYnl0ZXMgKGUuZy4gMTYgZm9yIDEgeCAxMjgtYml0IGtleSkuCisgICAgLy8gV3JpdGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkgZW5hYmxlcyB0aGUgRE1BIG9wZXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwTEVOKSA9IEtFWV9CTEVOR1RIOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciB0aGUgRE1BIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoIShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgMHgwMDAwMDAwMSkpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBmb3IgZXJyb3JzIGluIERNQSBhbmQga2V5IHN0b3JlLgorICAgIC8vCisgICAgaWYoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkgJgorICAgICAgICAgICAgKENSWVBUT19JUlFTVEFUX0RNQV9CVVNfRVJSIHwKKyAgICAgICAgICAgICBDUllQVE9fSVJRU1RBVF9LRVlfU1RfV1JfRVJSKSkgPT0gMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEFja25vd2xlZGdlL2NsZWFyIHRoZSBpbnRlcnJ1cHQgYW5kIGRpc2FibGUgdGhlIG1hc3RlciBjb250cm9sLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUxHU0VMKSA9IDB4MDAwMDAwMDA7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2hlY2sgc3RhdHVzLCBpZiBlcnJvciByZXR1cm4gZXJyb3IgY29kZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlXUklUVEVOQVJFQSkgIT0gKDF1IDw8IHVpMzJLZXlMb2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfTk9ORTsKKyAgICAgICAgICAgIHJldHVybiAoQUVTX0tFWVNUT1JFX1JFQURfRVJST1IpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3VjY2Vzcy4KKyAgICAvLworICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfTk9ORTsKKyAgICByZXR1cm4gKEFFU19TVUNDRVNTKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTdGFydCBhbiBBRVMtQ0JDIG9wZXJhdGlvbiAoZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQWVzQ2JjKHVpbnQzMl90ICpwdWkzMk1zZ0luLCB1aW50MzJfdCAqcHVpMzJNc2dPdXQsIHVpbnQzMl90IHVpMzJNc2dMZW5ndGgsCisgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyTm9uY2UsIHVpbnQzMl90IHVpMzJLZXlMb2NhdGlvbiwKKyAgICAgICAgICAgICBib29sIGJFbmNyeXB0LCBib29sIGJJbnRFbmFibGUpCit7CisgICAgdWludDMyX3QgdWkzMkN0cmxWYWw7CisKKyAgICAvLworICAgIC8vIFNldCBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZSBvZiB0aGUgQ3J5cHRvIG1vZHVsZS4KKyAgICAvLworICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfQ0JDOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgaW50ZXJuYWwgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRVFlQRSkgPSBDUllQVE9fSVJRVFlQRV9MRVZFTDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSA9IENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUw7CisKKyAgICAvLworICAgIC8vIENsZWFyIGFueSBvdXRzdGFuZGluZyBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGludGVycnVwdCBsaW5lcyBmcm9tIG1vZHVsZSB0byBiZSBjbGVhcmVkCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgKENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FIHwgQ1JZUFRPX0lSUVNUQVRfUkVTVUxUX0FWQUlMKSk7CisKKyAgICAvLworICAgIC8vIElmIHVzaW5nIGludGVycnVwdHMgY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgZW5hYmxlIGludGVycnVwdHMKKyAgICAvLyBmb3IgdGhlIENyeXB0byBtb2R1bGUuCisgICAgLy8KKyAgICBpZihiSW50RW5hYmxlKQorICAgIHsKKyAgICAgICAgSW50UGVuZENsZWFyKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7CisgICAgICAgIEludEVuYWJsZShJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIE1hc3RlciBDb250cm9sIG1vZHVsZS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUxHU0VMKSA9IENSWVBUT19BTEdTRUxfQUVTOworCisgICAgLy8KKyAgICAvLworICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlSRUFEQVJFQSkgPSB1aTMyS2V5TG9jYXRpb247CisKKyAgICAvLworICAgIC8vV2FpdCB1bnRpbCBrZXkgaXMgbG9hZGVkIHRvIHRoZSBBRVMgbW9kdWxlLgorICAgIC8vCisgICAgZG8KKyAgICB7CisgICAgICAgIENQVWRlbGF5KDEpOworICAgIH0KKyAgICB3aGlsZSgoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlSRUFEQVJFQSkgJiBDUllQVE9fS0VZUkVBREFSRUFfQlVTWSkpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBmb3IgS2V5IHN0b3JlIFJlYWQgZXJyb3IuCisgICAgLy8KKyAgICBpZigoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSYgQ1JZUFRPX0tFWV9TVF9SRF9FUlIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChBRVNfS0VZU1RPUkVfUkVBRF9FUlJPUik7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBXcml0ZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMCkgPSBwdWkzMk5vbmNlWzBdOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYxKSA9IHB1aTMyTm9uY2VbMV07CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjIpID0gcHVpMzJOb25jZVsyXTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMykgPSBwdWkzMk5vbmNlWzNdOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgQUVTIGVuZ2luZSBmb3IgQUVTLUNCQyB3aXRoIDEyOC1iaXQga2V5IHNpemUuCisgICAgLy8KKyAgICB1aTMyQ3RybFZhbCAgPSAoQ1JZUFRPX0FFU0NUTF9TQVZFX0NPTlRFWFQgfCBDUllQVE9fQUVTQ1RMX0NCQyk7CisgICAgaWYoYkVuY3J5cHQpCisgICAgeworICAgICAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTMTI4X0VOQ1JZUFQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpMzJDdHJsVmFsIHw9IENSWVBUT19BRVMxMjhfREVDUllQVDsKKyAgICB9CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNDVEwpID0gdWkzMkN0cmxWYWw7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGNyeXB0byBibG9jayAocGxhaW4gdGV4dCkuCisgICAgLy8gTG93IGFuZCBoaWdoIHBhcnQgKGhpZ2ggcGFydCBpcyBhc3N1bWVkIHRvIGJlIGFsd2F5cyAwKS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTREFUQUxFTjApID0gdWkzMk1zZ0xlbmd0aDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0RBVEFMRU4xKSA9IDA7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNBVVRITEVOKSAgPSAwOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgQ3J5cHRvIERNQSBjaGFubmVsIDAuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBDVEwsIENSWVBUT19ETUFDSDBDVExfRU5fQklUTikgPSAxOworCisgICAgLy8KKyAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGRhdGEgaW4gZXh0LiBtZW1vcnkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMEVYVEFERFIpID0gKHVpbnQzMl90KXB1aTMyTXNnSW47CisKKyAgICAvLworICAgIC8vIElucHV0IGRhdGEgbGVuZ3RoIGluIGJ5dGVzLCBlcXVhbCB0byB0aGUgbWVzc2FnZS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwTEVOKSA9IHVpMzJNc2dMZW5ndGg7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBDcnlwdG8gRE1BIGNoYW5uZWwgMS4KKyAgICAvLworICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUNUTCwgQ1JZUFRPX0RNQUNIMUNUTF9FTl9CSVROKSA9IDE7CisKKyAgICAvLworICAgIC8vIFNldCB1cCB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgZGF0YS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxRVhUQUREUikgPSAodWludDMyX3QpcHVpMzJNc2dPdXQ7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFMRU4pID0gdWkzMk1zZ0xlbmd0aDsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN1Y2Nlc3MKKyAgICAvLworICAgIHJldHVybiBBRVNfU1VDQ0VTUzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDaGVjayB0aGUgcmVzdWx0IG9mIGFuIEFFUyBDQkMgb3BlcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0Flc0NiY1N0YXR1cyh2b2lkKQoreworICAgIHJldHVybihDUllQVE9BZXNFY2JTdGF0dXMoKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU3RhcnQgYW4gQUVTLUVDQiBvcGVyYXRpb24gKGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbikuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0Flc0VjYih1aW50MzJfdCAqcHVpMzJNc2dJbiwgdWludDMyX3QgKnB1aTMyTXNnT3V0LAorICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJLZXlMb2NhdGlvbiwgYm9vbCBiRW5jcnlwdCwKKyAgICAgICAgICAgICBib29sIGJJbnRFbmFibGUpCit7CisgICAgLy8KKyAgICAvLyBTZXQgY3VycmVudCBvcGVyYXRpbmcgc3RhdGUgb2YgdGhlIENyeXB0byBtb2R1bGUuCisgICAgLy8KKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX0VDQjsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGludGVybmFsIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVRZUEUpID0gQ1JZUFRPX0lSUVRZUEVfTEVWRUw7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTikgPSBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMOworCisgICAgLy8KKyAgICAvLyBDbGVhciBhbnkgb3V0c3RhbmRpbmcgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IChDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBpbnRlcnJ1cHQgbGluZXMgZnJvbSBtb2R1bGUgdG8gYmUgY2xlYXJlZAorICAgIC8vCisgICAgd2hpbGUoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIChDUllQVE9fSVJRU1RBVF9ETUFfSU5fRE9ORSB8IENSWVBUT19JUlFTVEFUX1JFU1VMVF9BVkFJTCkpOworCisgICAgLy8KKyAgICAvLyBJZiB1c2luZyBpbnRlcnJ1cHRzIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzCisgICAgLy8gZm9yIHRoZSBDcnlwdG8gbW9kdWxlLgorICAgIC8vCisgICAgaWYoYkludEVuYWJsZSkKKyAgICB7CisgICAgICAgIEludFBlbmRDbGVhcihJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgICAgICBJbnRFbmFibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBNYXN0ZXIgQ29udHJvbCBtb2R1bGUuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSBDUllQVE9fQUxHU0VMX0FFUzsKKworICAgIC8vCisgICAgLy8KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpID0gdWkzMktleUxvY2F0aW9uOworCisgICAgLy8KKyAgICAvL1dhaXQgdW50aWwga2V5IGlzIGxvYWRlZCB0byB0aGUgQUVTIG1vZHVsZS4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpICYgQ1JZUFRPX0tFWVJFQURBUkVBX0JVU1kpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIEtleSBzdG9yZSBSZWFkIGVycm9yLgorICAgIC8vCisgICAgaWYoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkmIENSWVBUT19LRVlfU1RfUkRfRVJSKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVTX0tFWVNUT1JFX1JFQURfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIEFFUyBlbmdpbmUgKHByb2dyYW0gQUVTLUVDQi0xMjggZW5jcnlwdGlvbiBhbmQgbm8KKyAgICAvLyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgLSBJVikuCisgICAgLy8KKyAgICBpZihiRW5jcnlwdCkKKyAgICB7CisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSA9IENSWVBUT19BRVMxMjhfRU5DUllQVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNDVEwpID0gQ1JZUFRPX0FFUzEyOF9ERUNSWVBUOworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTREFUQUxFTjApID0gQUVTX0VDQl9MRU5HVEg7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNEQVRBTEVOMSkgPSAwOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgQ3J5cHRvIERNQSBjaGFubmVsIDAuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBDVEwsIENSWVBUT19ETUFDSDBDVExfRU5fQklUTikgPSAxOworCisgICAgLy8KKyAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGRhdGEgaW4gZXh0LiBtZW1vcnkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMEVYVEFERFIpID0gKHVpbnQzMl90KXB1aTMyTXNnSW47CisKKyAgICAvLworICAgIC8vIElucHV0IGRhdGEgbGVuZ3RoIGluIGJ5dGVzLCBlcXVhbCB0byB0aGUgbWVzc2FnZS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwTEVOKSA9IEFFU19FQ0JfTEVOR1RIOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgQ3J5cHRvIERNQSBjaGFubmVsIDEuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFDVEwsIENSWVBUT19ETUFDSDFDVExfRU5fQklUTikgPSAxOworCisgICAgLy8KKyAgICAvLyBTZXQgdXAgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGRhdGEuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUVYVEFERFIpID0gKHVpbnQzMl90KXB1aTMyTXNnT3V0OworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxTEVOKSA9IEFFU19FQ0JfTEVOR1RIOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3VjY2VzcworICAgIC8vCisgICAgcmV0dXJuIEFFU19TVUNDRVNTOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENoZWNrIHRoZSByZXN1bHQgb2YgYW4gQUVTIEVDQiBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQWVzRWNiU3RhdHVzKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlN0YXR1czsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IERNQSBzdGF0dXMuCisgICAgLy8KKyAgICB1aTMyU3RhdHVzID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFTVEFUKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgRE1BIGlzIHN0aWxsIGJ1c3kuCisgICAgLy8KKyAgICBpZih1aTMyU3RhdHVzICYgQ1JZUFRPX0RNQV9CU1kpCisgICAgeworICAgICAgICByZXR1cm4gKEFFU19ETUFfQlNZKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIERNQSBvcGVyYXRpb24gLSByZXR1cm4gZXJyb3IgaWYgbm90IHN1Y2Nlc3MuCisgICAgLy8KKyAgICBpZih1aTMyU3RhdHVzICYgQ1JZUFRPX0RNQV9CVVNfRVJST1IpCisgICAgeworICAgICAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgICAgIHJldHVybiAoQUVTX0RNQV9CVVNfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3BlcmF0aW9uIHN1Y2Nlc3NmdWwgLSBkaXNhYmxlIGludGVycnVwdCBhbmQgcmV0dXJuIHN1Y2Nlc3MuCisgICAgLy8KKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgSW50RGlzYWJsZShJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgIHJldHVybiAoQUVTX1NVQ0NFU1MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFN0YXJ0IENDTSBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQ2NtQXV0aEVuY3J5cHQoYm9vbCBiRW5jcnlwdCwgdWludDMyX3QgdWkzMkF1dGhMZW5ndGggLAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyTm9uY2UsIHVpbnQzMl90ICpwdWkzMlBsYWluVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQbGFpblRleHRMZW5ndGgsIHVpbnQzMl90ICpwdWkzMkhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJIZWFkZXJMZW5ndGgsIHVpbnQzMl90IHVpMzJLZXlMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJGaWVsZExlbmd0aCwgYm9vbCBiSW50RW5hYmxlKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsVmFsOworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgKnB1aTMyQ2lwaGVyVGV4dDsKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90IHdbNF07CisgICAgICAgIHVpbnQ4X3QgIGJbMTZdOworICAgIH0gdWk4SW5pdFZlYzsKKworICAgIC8vCisgICAgLy8gSW5wdXQgYWRkcmVzcyBmb3IgdGhlIGVuY3J5cHRpb24gZW5naW5lIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQuCisgICAgLy8KKyAgICBwdWkzMkNpcGhlclRleHQgPSBwdWkzMlBsYWluVGV4dDsKKworICAgIC8vCisgICAgLy8gU2V0IGN1cnJlbnQgb3BlcmF0aW5nIHN0YXRlIG9mIHRoZSBDcnlwdG8gbW9kdWxlLgorICAgIC8vCisgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19DQ007CisKKyAgICAvLworICAgIC8vIERpc2FibGUgZ2xvYmFsIGludGVycnVwdCwgZW5hYmxlIGxvY2FsIGludGVycnVwdCBhbmQgY2xlYXIgYW55IHBlbmRpbmcKKyAgICAvLyBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSW50RGlzYWJsZShJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IChDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgaW50ZXJuYWwgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRVFlQRSkgPSBDUllQVE9fSVJRVFlQRV9MRVZFTDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSA9IENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlIGZvciBBRVMgb3BlcmF0aW9uLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BTEdTRUwpID0gQ1JZUFRPX0FMR1NFTF9BRVM7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBrZXlzIHRvIHJlYWQgKGUuZy4gS2V5IDApLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlSRUFEQVJFQSkgPSB1aTMyS2V5TG9jYXRpb247CisKKyAgICAvLworICAgIC8vIFdhaXQgdW50aWwga2V5IGlzIGxvYWRlZCB0byB0aGUgQUVTIG1vZHVsZS4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fS0VZUkVBREFSRUEpICYgQ1JZUFRPX0tFWVJFQURBUkVBX0JVU1kpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIEtleSBzdG9yZSBSZWFkIGVycm9yLgorICAgIC8vCisgICAgaWYoKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkmIENSWVBUT19LRVlfU1RfUkRfRVJSKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVTX0tFWVNUT1JFX1JFQURfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gUHJlcGFyZSB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJViksCisgICAgLy8gTGVuZ3RoIG9mIE5vbmNlIGwobikgPSAxNSAtIHVpMzJGaWVsZExlbmd0aC4KKyAgICAvLworICAgIHVpOEluaXRWZWMuYlswXSA9IHVpMzJGaWVsZExlbmd0aCAtIDE7CisgICAgZm9yKGkgPSAwOyBpIDwgMTI7IGkrKykKKyAgICB7CisgICAgICAgIHVpOEluaXRWZWMuYltpICsgMV0gPSAoKHVpbnQ4X3QqKXB1aTMyTm9uY2UpW2ldOworICAgIH0KKyAgICBpZih1aTMyRmllbGRMZW5ndGggPT0gMikKKyAgICB7CisgICAgICAgIHVpOEluaXRWZWMuYlsxM10gPSAoKHVpbnQ4X3QqKXB1aTMyTm9uY2UpWzEyXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWk4SW5pdFZlYy5iWzEzXSA9IDA7CisgICAgfQorICAgIHVpOEluaXRWZWMuYlsxNF0gPSAwOworICAgIHVpOEluaXRWZWMuYlsxNV0gPSAwOworCisgICAgLy8KKyAgICAvLyBXcml0ZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMCkgPSB1aThJbml0VmVjLndbMF07CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjEpID0gdWk4SW5pdFZlYy53WzFdOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYyKSA9IHVpOEluaXRWZWMud1syXTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMykgPSB1aThJbml0VmVjLndbM107CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBBRVMgZW5naW5lLgorICAgIC8vCisgICAgdWkzMkN0cmxWYWwgPSAoKHVpMzJGaWVsZExlbmd0aCAtIDEpIDw8IENSWVBUT19BRVNDVExfQ0NNX0xfUyk7CisgICAgaWYgKCB1aTMyQXV0aExlbmd0aCA+PSAyICkgeworICAgICAgICB1aTMyQ3RybFZhbCB8PSAoKCggdWkzMkF1dGhMZW5ndGggLSAyICkgPj4gMSApIDw8IENSWVBUT19BRVNDVExfQ0NNX01fUyApOworICAgIH0KKyAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTQ1RMX0NDTTsKKyAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTQ1RMX0NUUjsKKyAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTQ1RMX1NBVkVfQ09OVEVYVDsKKyAgICB1aTMyQ3RybFZhbCB8PSAoS0VZX1NUT1JFX1NJWkVfMTI4IDw8IENSWVBUT19BRVNDVExfS0VZX1NJWkVfUyk7CisgICAgdWkzMkN0cmxWYWwgfD0gKDEgPDwgQ1JZUFRPX0FFU0NUTF9ESVJfUyk7CisgICAgdWkzMkN0cmxWYWwgfD0gKENSWVBUT19BRVNfQ1RSXzEyOCA8PCBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF9TKTsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIDEyOCBiaXQgQUVTLUNDTS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSA9IHVpMzJDdHJsVmFsOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBjcnlwdG8gYmxvY2sgKHBsYWluIHRleHQpLgorICAgIC8vIExvdyBhbmQgaGlnaCBwYXJ0IChoaWdoIHBhcnQgaXMgYXNzdW1lZCB0byBiZSBhbHdheXMgMCkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0RBVEFMRU4wKSA9IHVpMzJQbGFpblRleHRMZW5ndGg7CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNEQVRBTEVOMSkgID0gIDA7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciBmaWVsZC4KKyAgICAvLyBBbHNvIGNhbGxlZCBBQUQgLSBBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uIERhdGEuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0FVVEhMRU4pID0gdWkzMkhlYWRlckxlbmd0aDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgYW55IGhlYWRlciBpbmZvcm1hdGlvbiAoQUFEKS4KKyAgICAvLyBJZiBzbyBjb25maWd1cmUgdGhlIERNQSBjb250cm9sbGVyIHRvIGZldGNoIHRoZSBoZWFkZXIuCisgICAgLy8KKyAgICBpZih1aTMySGVhZGVyTGVuZ3RoICE9IDApCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgRE1BIGNoYW5uZWwgMC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKworICAgICAgICAvLworICAgICAgICAvLyBSZWdpc3RlciB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBoZWFkZXIgKEFBRCkuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwRVhUQUREUikgPSAodWludDMyX3QpcHVpMzJIZWFkZXI7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSGVhZGVyIGxlbmd0aCBpbiBieXRlcyAobWF5IGJlIG5vbi1ibG9jayBzaXplIGFsaWduZWQpLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMExFTikgPSB1aTMySGVhZGVyTGVuZ3RoOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdGhlIGhlYWRlciBkYXRhIHRyYW5zZmVyLCBETUFfSU5fRE9ORS4KKyAgICAgICAgLy8KKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgQ1BVZGVsYXkoMSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoIShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkUpKTsKKworICAgICAgICAvLworICAgICAgICAvLyBDaGVjayBmb3IgRE1BIGVycm9ycy4KKyAgICAgICAgLy8KKyAgICAgICAgaWYoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIENSWVBUT19ETUFfQlVTX0VSUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEFFU19ETUFfQlVTX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGludGVycnVwdCBsaW5lcyBmcm9tIG1vZHVsZSB0byBiZSBjbGVhcmVkCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgKENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FIHwgQ1JZUFRPX0lSUVNUQVRfUkVTVUxUX0FWQUlMKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgQ1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FIGludGVycnVwdCBhcyB3ZSBvbmx5CisgICAgLy8gd2FudCBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBvbmNlIFJFU1VMVF9BVkFJTCBvY2N1cnMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSAmPSB+Q1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FOworCisKKyAgICAvLworICAgIC8vIElzIHVzaW5nIGludGVycnVwdHMgZW5hYmxlIGdsb2JhbGx5LgorICAgIC8vCisgICAgaWYoYkludEVuYWJsZSkKKyAgICB7CisgICAgICAgIEludFBlbmRDbGVhcihJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgICAgICBJbnRFbmFibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUVOKSA9IENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUw7CisKKyAgICAvLworICAgIC8vIFBlcmZvcm0gZW5jcnlwdGlvbiBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZihiRW5jcnlwdCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSBETUEgY2hhbm5lbCAwCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMENUTCwgQ1JZUFRPX0RNQUNIMENUTF9FTl9CSVROKSA9IDE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYmFzZSBhZGRyZXNzIG9mIHRoZSBwYXlsb2FkIGRhdGEgaW4gZXh0LiBtZW1vcnkuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwRVhUQUREUikgPQorICAgICAgICAgICAgKHVpbnQzMl90KXB1aTMyUGxhaW5UZXh0OworCisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSBETUEgY2hhbm5lbCAxCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUNUTCwgQ1JZUFRPX0RNQUNIMUNUTF9FTl9CSVROKSA9IDE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgZGF0YSBidWZmZXIuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxRVhUQUREUikgPQorICAgICAgICAgICAgKHVpbnQzMl90KXB1aTMyQ2lwaGVyVGV4dDsKKworICAgICAgICAvLworICAgICAgICAvLyBQYXlsb2FkIGRhdGEgbGVuZ3RoIGluIGJ5dGVzLCBlcXVhbCB0byB0aGUgcGxhaW50ZXh0IGxlbmd0aC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBMRU4pID0gdWkzMlBsYWluVGV4dExlbmd0aDsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3V0cHV0IGRhdGEgbGVuZ3RoIGluIGJ5dGVzLCBlcXVhbCB0byB0aGUgcGxhaW50ZXh0IGxlbmd0aC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFMRU4pID0gdWkzMlBsYWluVGV4dExlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gQUVTX1NVQ0NFU1M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2hlY2sgdGhlIHJlc3VsdCBvZiBhbiBBRVMgQ0NNIG9wZXJhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXModm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyU3RhdHVzOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgRE1BIHN0YXR1cy4KKyAgICAvLworICAgIHVpMzJTdGF0dXMgPSBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQVNUQVQpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiBETUEgaXMgc3RpbGwgYnVzeS4KKyAgICAvLworICAgIGlmKHVpMzJTdGF0dXMgJiBDUllQVE9fRE1BX0JTWSkKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVTX0RNQV9CU1kpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgRE1BIG9wZXJhdGlvbiAtIHJldHVybiBlcnJvciBpZiBub3Qgc3VjY2Vzcy4KKyAgICAvLworICAgIGlmKHVpMzJTdGF0dXMgJiBDUllQVE9fRE1BX0JVU19FUlJPUikKKyAgICB7CisgICAgICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfTk9ORTsKKyAgICAgICAgcmV0dXJuIChBRVNfRE1BX0JVU19FUlJPUik7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBPcGVyYXRpb24gc3VjY2Vzc2Z1bCAtIGRpc2FibGUgaW50ZXJydXB0IGFuZCByZXR1cm4gc3VjY2Vzcy4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICByZXR1cm4gKEFFU19TVUNDRVNTKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgdGhlIHJlc3VsdCBvZiBhbiBBRVMtQ0NNIG9wZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitDUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldCh1aW50MzJfdCB1aTMyVGFnTGVuZ3RoLCB1aW50MzJfdCAqcHVpMzJDY21UYWcpCit7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdWkzMlRhZ1s0XTsKKyAgICB1aW50MzJfdCB1aTMySWR4OworCisgICAgLy8KKyAgICAvLyBSZXN1bHQgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgYnkgRE1BCisgICAgLy8gRGlzYWJsZSBtYXN0ZXIgY29udHJvbC4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUxHU0VMKSA9IDB4MDAwMDAwMDA7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGFnIC0gd2FpdCBmb3IgdGhlIGNvbnRleHQgcmVhZHkgYml0LgorICAgIC8vCisgICAgZG8KKyAgICB7CisgICAgICAgIENQVWRlbGF5KDEpOworICAgIH0KKyAgICB3aGlsZSghKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSAmCisgICAgICAgICAgICBDUllQVE9fQUVTQ1RMX1NBVkVEX0NPTlRFWFRfUkRZKSk7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIFRhZyByZWdpc3RlcnMuCisgICAgLy8KKyAgICB1aTMyVGFnWzBdID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNUQUdPVVQwKTsKKyAgICB1aTMyVGFnWzFdID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNUQUdPVVQxKTsKKyAgICB1aTMyVGFnWzJdID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNUQUdPVVQyKTsKKyAgICB1aTMyVGFnWzNdID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNUQUdPVVQzKTsKKworICAgIGZvcih1aTMySWR4ID0gMDsgdWkzMklkeCA8IHVpMzJUYWdMZW5ndGggOyB1aTMySWR4KyspCisgICAgeworICAgICAgICAqKCh1aW50OF90KilwdWkzMkNjbVRhZyArIHVpMzJJZHgpID0gKigodWludDhfdCopdWkzMlRhZyArIHVpMzJJZHgpOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3BlcmF0aW9uIHN1Y2Nlc3NmdWwgLSAgY2xlYXIgaW50ZXJydXB0IHN0YXR1cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IChDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUwpOworICAgIGdfdWkzMkN1cnJlbnRBZXNPcCA9IENSWVBUT19BRVNfTk9ORTsKKyAgICByZXR1cm4gQUVTX1NVQ0NFU1M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU3RhcnQgYSBDQ00gRGVjcnlwdGlvbiBhbmQgSW52ZXJzZSBBdXRoZW50aWNhdGlvbiBvcGVyYXRpb24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0NjbUludkF1dGhEZWNyeXB0KGJvb2wgYkRlY3J5cHQsIHVpbnQzMl90IHVpMzJBdXRoTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyTm9uY2UsIHVpbnQzMl90ICpwdWkzMkNpcGhlclRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2lwaGVyVGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkhlYWRlciwgdWludDMyX3QgdWkzMkhlYWRlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJLZXlMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJGaWVsZExlbmd0aCwgYm9vbCBiSW50RW5hYmxlKQoreworICAgIHVpbnQzMl90IHVpMzJDdHJsVmFsOworICAgIHVpbnQzMl90IGk7CisgICAgdWludDMyX3QgKnB1aTMyUGxhaW5UZXh0OworICAgIHVpbnQzMl90IHVpMzJDcnlwdG9CbG9ja0xlbmd0aDsKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90IHdbNF07CisgICAgICAgIHVpbnQ4X3QgIGJbMTZdOworICAgIH0gdWk4SW5pdFZlYzsKKworICAgIC8vCisgICAgLy8gSW5wdXQgYWRkcmVzcyBmb3IgdGhlIGVuY3J5cHRpb24gZW5naW5lIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQuCisgICAgLy8KKyAgICBwdWkzMlBsYWluVGV4dCA9IHB1aTMyQ2lwaGVyVGV4dDsKKworICAgIC8vCisgICAgLy8gU2V0IGN1cnJlbnQgb3BlcmF0aW5nIHN0YXRlIG9mIHRoZSBDcnlwdG8gbW9kdWxlLgorICAgIC8vCisgICAgZ191aTMyQ3VycmVudEFlc09wID0gQ1JZUFRPX0FFU19DQ007CisKKyAgICAvLworICAgIC8vIERpc2FibGUgZ2xvYmFsIGludGVycnVwdCwgZW5hYmxlIGxvY2FsIGludGVycnVwdCBhbmQgY2xlYXIgYW55IHBlbmRpbmcuCisgICAgLy8gaW50ZXJydXB0cy4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMKTsKKyAgICAvLworICAgIC8vIEVuYWJsZSBpbnRlcm5hbCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFUWVBFKSA9IENSWVBUT19JUlFUWVBFX0xFVkVMOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pID0gQ1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUw7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBtYXN0ZXIgY29udHJvbCBtb2R1bGUgZm9yIEFFUyBvcGVyYXRpb24uCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSBDUllQVE9fQUxHU0VMX0FFUzsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGtleXMgdG8gcmVhZCAoZS5nLiBLZXkgMCkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0tFWVJFQURBUkVBKSA9IHVpMzJLZXlMb2NhdGlvbjsKKworICAgIC8vCisgICAgLy8gV2FpdCB1bnRpbCBrZXkgaXMgbG9hZGVkIHRvIHRoZSBBRVMgbW9kdWxlLgorICAgIC8vCisgICAgZG8KKyAgICB7CisgICAgICAgIENQVWRlbGF5KDEpOworICAgIH0KKyAgICB3aGlsZSgoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19LRVlSRUFEQVJFQSkgJiBDUllQVE9fS0VZUkVBREFSRUFfQlVTWSkpOworCisgICAgLy8KKyAgICAvLyBDaGVjayBmb3IgS2V5IHN0b3JlIFJlYWQgZXJyb3IuCisgICAgLy8KKyAgICBpZigoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSYgQ1JZUFRPX0tFWV9TVF9SRF9FUlIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChBRVNfS0VZU1RPUkVfUkVBRF9FUlJPUik7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBQcmVwYXJlIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgKElWKSwKKyAgICAvLyBMZW5ndGggb2YgTm9uY2UgbChuKSA9IDE1IC0gdWkzMkZpZWxkTGVuZ3RoLgorICAgIC8vCisgICAgdWk4SW5pdFZlYy5iWzBdID0gdWkzMkZpZWxkTGVuZ3RoIC0gMTsKKyAgICBmb3IoaSA9IDA7IGkgPCAxMjsgaSsrKQorICAgIHsKKyAgICAgICAgdWk4SW5pdFZlYy5iW2kgKyAxXSA9ICgodWludDhfdCopcHVpMzJOb25jZSlbaV07CisgICAgfQorICAgIGlmKHVpMzJGaWVsZExlbmd0aCA9PSAyKQorICAgIHsKKyAgICAgICAgdWk4SW5pdFZlYy5iWzEzXSA9ICgodWludDhfdCopcHVpMzJOb25jZSlbMTJdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aThJbml0VmVjLmJbMTNdID0gMDsKKyAgICB9CisgICAgdWk4SW5pdFZlYy5iWzE0XSA9IDA7CisgICAgdWk4SW5pdFZlYy5iWzE1XSA9IDA7CisKKyAgICAvLworICAgIC8vIFdyaXRlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYwKSA9IHVpOEluaXRWZWMud1swXTsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0lWMSkgPSB1aThJbml0VmVjLndbMV07CisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BRVNJVjIpID0gdWk4SW5pdFZlYy53WzJdOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTSVYzKSA9IHVpOEluaXRWZWMud1szXTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIEFFUyBlbmdpbmUKKyAgICAvLworICAgIHVpMzJDcnlwdG9CbG9ja0xlbmd0aCA9IHVpMzJDaXBoZXJUZXh0TGVuZ3RoIC0gdWkzMkF1dGhMZW5ndGg7CisgICAgdWkzMkN0cmxWYWwgPSAoKHVpMzJGaWVsZExlbmd0aCAtIDEpIDw8IENSWVBUT19BRVNDVExfQ0NNX0xfUyk7CisgICAgaWYgKCB1aTMyQXV0aExlbmd0aCA+PSAyICkgeworICAgICAgICB1aTMyQ3RybFZhbCB8PSAoKCggdWkzMkF1dGhMZW5ndGggLSAyICkgPj4gMSApIDw8IENSWVBUT19BRVNDVExfQ0NNX01fUyApOworICAgIH0KKyAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTQ1RMX0NDTTsKKyAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTQ1RMX0NUUjsKKyAgICB1aTMyQ3RybFZhbCB8PSBDUllQVE9fQUVTQ1RMX1NBVkVfQ09OVEVYVDsKKyAgICB1aTMyQ3RybFZhbCB8PSAoS0VZX1NUT1JFX1NJWkVfMTI4IDw8IENSWVBUT19BRVNDVExfS0VZX1NJWkVfUyk7CisgICAgdWkzMkN0cmxWYWwgfD0gKDAgPDwgQ1JZUFRPX0FFU0NUTF9ESVJfUyk7CisgICAgdWkzMkN0cmxWYWwgfD0gKENSWVBUT19BRVNfQ1RSXzEyOCA8PCBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF9TKTsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIDEyOCBiaXQgQUVTLUNDTS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSA9IHVpMzJDdHJsVmFsOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBjcnlwdG8gYmxvY2sgKHBsYWluIHRleHQpLgorICAgIC8vIExvdyBhbmQgaGlnaCBwYXJ0IChoaWdoIHBhcnQgaXMgYXNzdW1lZCB0byBiZSBhbHdheXMgMCkuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0RBVEFMRU4wKSA9IHVpMzJDcnlwdG9CbG9ja0xlbmd0aDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0RBVEFMRU4xKSAgPSAgMDsKKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIGZpZWxkLgorICAgIC8vIEFsc28gY2FsbGVkIEFBRCAtIEFkZGl0aW9uYWwgQXV0aGVudGljYXRpb24gRGF0YS4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQVVUSExFTikgPSB1aTMySGVhZGVyTGVuZ3RoOworCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiBhbnkgaGVhZGVyIGluZm9ybWF0aW9uIChBQUQpLgorICAgIC8vIElmIHNvIGNvbmZpZ3VyZSB0aGUgRE1BIGNvbnRyb2xsZXIgdG8gZmV0Y2ggdGhlIGhlYWRlci4KKyAgICAvLworICAgIGlmKHVpMzJIZWFkZXJMZW5ndGggIT0gMCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSBETUEgY2hhbm5lbCAwLgorICAgICAgICAvLworICAgICAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBDVEwsIENSWVBUT19ETUFDSDBDVExfRU5fQklUTikgPSAxOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGhlYWRlciAoQUFEKS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBFWFRBRERSKSA9ICh1aW50MzJfdClwdWkzMkhlYWRlcjsKKworICAgICAgICAvLworICAgICAgICAvLyBIZWFkZXIgbGVuZ3RoIGluIGJ5dGVzIChtYXkgYmUgbm9uLWJsb2NrIHNpemUgYWxpZ25lZCkuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwTEVOKSA9IHVpMzJIZWFkZXJMZW5ndGg7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2FpdCBmb3IgY29tcGxldGlvbiBvZiB0aGUgaGVhZGVyIGRhdGEgdHJhbnNmZXIsIERNQV9JTl9ET05FLgorICAgICAgICAvLworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBDUFVkZWxheSgxKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSghKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkgJiBDUllQVE9fSVJRU1RBVF9ETUFfSU5fRE9ORSkpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIENoZWNrIGZvciBETUEgZXJyb3JzLgorICAgICAgICAvLworICAgICAgICBpZihIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUVNUQVQpICYgQ1JZUFRPX0RNQV9CVVNfRVJSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gQUVTX0RNQV9CVVNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIENsZWFyIGludGVycnVwdCBzdGF0dXMuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0lSUUNMUikgPSAoQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMKTsKKworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgaW50ZXJydXB0IGxpbmVzIGZyb20gbW9kdWxlIHRvIGJlIGNsZWFyZWQKKyAgICAvLworICAgIHdoaWxlKEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkgJiAoQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkUgfCBDUllQVE9fSVJRU1RBVF9SRVNVTFRfQVZBSUwpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSBDUllQVE9fSVJRRU5fRE1BX0lOX0RPTkUgaW50ZXJydXB0IGFzIHdlIG9ubHkKKyAgICAvLyB3YW50IGludGVycnVwdCB0byB0cmlnZ2VyIG9uY2UgUkVTVUxUX0FWQUlMIG9jY3Vycy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pICY9IH5DUllQVE9fSVJRRU5fRE1BX0lOX0RPTkU7CisKKyAgICAvLworICAgIC8vIElzIHVzaW5nIGludGVycnVwdHMgLSBjbGVhciBhbmQgZW5hYmxlIGdsb2JhbGx5LgorICAgIC8vCisgICAgaWYoYkludEVuYWJsZSkKKyAgICB7CisgICAgICAgIEludFBlbmRDbGVhcihJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEpOworICAgICAgICBJbnRFbmFibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBpbnRlcm5hbCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFUWVBFKSA9IENSWVBUT19JUlFUWVBFX0xFVkVMOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pID0gQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTDsKKworICAgIC8vCisgICAgLy8gUGVyZm9ybSBkZWNyeXB0aW9uIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJEZWNyeXB0KQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBETUEgY29udHJvbGxlciAtIGVuYWJsZSBib3RoIERNQSBjaGFubmVscy4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKworICAgICAgICAvLworICAgICAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIHBheWxvYWQgZGF0YSBpbiBleHQuIG1lbW9yeS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBFWFRBRERSKSA9CisgICAgICAgICAgICAodWludDMyX3QpcHVpMzJDaXBoZXJUZXh0OworCisgICAgICAgIC8vCisgICAgICAgIC8vIFBheWxvYWQgZGF0YSBsZW5ndGggaW4gYnl0ZXMsIGVxdWFsIHRvIHRoZSBjaXBoZXIgdGV4dCBsZW5ndGguCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwTEVOKSA9IHVpMzJDcnlwdG9CbG9ja0xlbmd0aDsKKworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgRE1BIGNoYW5uZWwgMS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxQ1RMLCBDUllQVE9fRE1BQ0gxQ1RMX0VOX0JJVE4pID0gMTsKKworICAgICAgICAvLworICAgICAgICAvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDFFWFRBRERSKSA9CisgICAgICAgICAgICAodWludDMyX3QpcHVpMzJQbGFpblRleHQ7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3V0cHV0IGRhdGEgbGVuZ3RoIGluIGJ5dGVzLCBlcXVhbCB0byB0aGUgY2lwaGVyIHRleHQgbGVuZ3RoLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUxFTikgPSB1aTMyQ3J5cHRvQmxvY2tMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIEFFU19TVUNDRVNTOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENoZWNrcyBDQ00gZGVjcnlwdCBhbmQgSW52ZXJzZSBBdXRoZW50aWNhdGlvbiByZXN1bHQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0NSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlN0YXR1czsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IERNQSBzdGF0dXMuCisgICAgLy8KKyAgICB1aTMyU3RhdHVzID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFTVEFUKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgRE1BIGlzIHN0aWxsIGJ1c3kuCisgICAgLy8KKyAgICBpZih1aTMyU3RhdHVzICYgQ1JZUFRPX0RNQV9CU1kpCisgICAgeworICAgICAgICByZXR1cm4gKEFFU19ETUFfQlNZKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIERNQSBvcGVyYXRpb24gLSByZXR1cm4gZXJyb3IgaWYgbm90IHN1Y2Nlc3MuCisgICAgLy8KKyAgICBpZih1aTMyU3RhdHVzICYgQ1JZUFRPX0RNQV9CVVNfRVJST1IpCisgICAgeworICAgICAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgICAgIHJldHVybiAoQUVTX0RNQV9CVVNfRVJST1IpOworICAgIH0KKworICAgIC8vCisgICAgLy8gT3BlcmF0aW9uIHN1Y2Nlc3NmdWwgLSBkaXNhYmxlIGludGVycnVwdCBhbmQgcmV0dXJuIHN1Y2Nlc3MKKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKyAgICByZXR1cm4gKEFFU19TVUNDRVNTKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgQ0NNIG9wZXJhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQodWludDMyX3QgdWkzMkF1dGhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJDaXBoZXJUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNpcGhlclRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJDY21UYWcpCit7CisgICAgdWludDMyX3Qgdm9sYXRpbGUgdWkzMlRhZ1s0XTsKKyAgICB1aW50MzJfdCB1aTMyVGFnSW5kZXg7CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCB1aTMySWR4OworCisgICAgdWkzMlRhZ0luZGV4ID0gdWkzMkNpcGhlclRleHRMZW5ndGggLSB1aTMyQXV0aExlbmd0aDsKKworICAgIC8vCisgICAgLy8gUmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGJ5IERNQQorICAgIC8vIERpc2FibGUgbWFzdGVyIGNvbnRyb2wuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSAweDAwMDAwMDAwOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRhZyAtIHdhaXQgZm9yIHRoZSBjb250ZXh0IHJlYWR5IGJpdC4KKyAgICAvLworICAgIGRvCisgICAgeworICAgICAgICBDUFVkZWxheSgxKTsKKyAgICB9CisgICAgd2hpbGUoIShIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgJgorICAgICAgICAgICAgQ1JZUFRPX0FFU0NUTF9TQVZFRF9DT05URVhUX1JEWSkpOworCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSBUYWcgcmVnaXN0ZXJzLgorICAgIC8vCisgICAgdWkzMlRhZ1swXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMCk7CisgICAgdWkzMlRhZ1sxXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMSk7CisgICAgdWkzMlRhZ1syXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMik7CisgICAgdWkzMlRhZ1szXSA9IEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTVEFHT1VUMyk7CisKKyAgICBmb3IodWkzMklkeCA9IDA7IHVpMzJJZHggPCB1aTMyQXV0aExlbmd0aCA7IHVpMzJJZHgrKykKKyAgICB7CisgICAgICAgICooKHVpbnQ4X3QqKXB1aTMyQ2NtVGFnICsgdWkzMklkeCkgPSAqKCh1aW50OF90Kil1aTMyVGFnICsgdWkzMklkeCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBPcGVyYXRpb24gc3VjY2Vzc2Z1bCAtICBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFDTFIpID0gKENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTCk7CisKKyAgICAvLworICAgIC8vIFZlcmlmeSB0aGUgVGFnLgorICAgIC8vCisgICAgZm9yKGkgPSAwOyBpIDwgdWkzMkF1dGhMZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGlmKCooKHVpbnQ4X3QgKilwdWkzMkNjbVRhZyArIGkpICE9CisgICAgICAgICAgICAoKigodWludDhfdCAqKXB1aTMyQ2lwaGVyVGV4dCArIHVpMzJUYWdJbmRleCArIGkpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENDTV9BVVRIRU5USUNBVElPTl9GQUlMRUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX3VpMzJDdXJyZW50QWVzT3AgPSBDUllQVE9fQUVTX05PTkU7CisgICAgcmV0dXJuIEFFU19TVUNDRVNTOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZSBDcnlwdG8gRE1BIG9wZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0NSWVBUT0RtYUVuYWJsZSh1aW50MzJfdCB1aTMyQ2hhbm5lbHMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4wKSB8CisgICAgICAgICAgICh1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4xKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc2VsZWN0ZWQgY2hhbm5lbHMsCisgICAgLy8KKyAgICBpZih1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4wKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gwQ1RMLCBDUllQVE9fRE1BQ0gwQ1RMX0VOX0JJVE4pID0gMTsKKyAgICB9CisgICAgaWYodWkzMkNoYW5uZWxzICYgQ1JZUFRPX0RNQV9DSEFOMSkKKyAgICB7CisgICAgICAgIEhXUkVHQklUVyhDUllQVE9fQkFTRSArIENSWVBUT19PX0RNQUNIMUNUTCwgQ1JZUFRPX0RNQUNIMUNUTF9FTl9CSVROKSA9IDE7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGUgQ3J5cHRvIERNQSBvcGVyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitDUllQVE9EbWFEaXNhYmxlKHVpbnQzMl90IHVpMzJDaGFubmVscykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJDaGFubmVscyAmIENSWVBUT19ETUFfQ0hBTjApIHwKKyAgICAgICAgICAgKHVpMzJDaGFubmVscyAmIENSWVBUT19ETUFfQ0hBTjEpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzZWxlY3RlZCBjaGFubmVscy4KKyAgICAvLworICAgIGlmKHVpMzJDaGFubmVscyAmIENSWVBUT19ETUFfQ0hBTjApCisgICAgeworICAgICAgICBIV1JFR0JJVFcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFDSDBDVEwsIENSWVBUT19ETUFDSDBDVExfRU5fQklUTikgPSAwOworICAgIH0KKyAgICBpZih1aTMyQ2hhbm5lbHMgJiBDUllQVE9fRE1BX0NIQU4xKQorICAgIHsKKyAgICAgICAgSFdSRUdCSVRXKENSWVBUT19CQVNFICsgQ1JZUFRPX09fRE1BQ0gxQ1RMLCBDUllQVE9fRE1BQ0gxQ1RMX0VOX0JJVE4pID0gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcnlwdG8uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9jcnlwdG8uaApAQCAtMCwwICsxLDg4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNyeXB0by5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNC0yNCAwMDo0NzowMiArMDIwMCAoU3VuLCAyNCBBcHIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjEyOQorKgorKiAgRGVzY3JpcHRpb246ICAgIEFFUyBoZWFkZXIgZmlsZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgY3J5cHRvX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fQ1JZUFRPX0hfXworI2RlZmluZSBfX0NSWVBUT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19jcnlwdG8uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBDUllQVE9BZXNMb2FkS2V5ICAgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0xvYWRLZXkKKyAgICAjZGVmaW5lIENSWVBUT0Flc0NiYyAgICAgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPQWVzQ2JjCisgICAgI2RlZmluZSBDUllQVE9BZXNDYmNTdGF0dXMgICAgICAgICAgICAgIE5PUk9NX0NSWVBUT0Flc0NiY1N0YXR1cworICAgICNkZWZpbmUgQ1JZUFRPQWVzRWNiICAgICAgICAgICAgICAgICAgICBOT1JPTV9DUllQVE9BZXNFY2IKKyAgICAjZGVmaW5lIENSWVBUT0Flc0VjYlN0YXR1cyAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPQWVzRWNiU3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdCAgICAgICAgICAgIE5PUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0CisgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cyAgICAgIE5PUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldCAgIE5PUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0UmVzdWx0R2V0CisgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdCAgICAgICAgIE5PUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0CisgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cyAgIE5PUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzCisgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldCBOT1JPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldAorICAgICNkZWZpbmUgQ1JZUFRPRG1hRW5hYmxlICAgICAgICAgICAgICAgICBOT1JPTV9DUllQVE9EbWFFbmFibGUKKyAgICAjZGVmaW5lIENSWVBUT0RtYURpc2FibGUgICAgICAgICAgICAgICAgTk9ST01fQ1JZUFRPRG1hRGlzYWJsZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBMZW5ndGggb2YgQUVTIEVsZWN0cm9uaWMgQ29kZSBCb29rIChFQ0IpIGJsb2NrIGluIGJ5dGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRVNfRUNCX0xFTkdUSCAgMTYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQ3J5cHRvSW50RW5hYmxlLCBDcnlwdG9JbnREaXNhYmxlLCBhbmQgQ3J5cHRvSW50Q2xlYXIKKy8vIGFzIHRoZSB1aTMySW50RmxhZ3MgcGFyYW1ldGVyLCBhbmQgcmV0dXJuZWQgZnJvbSBDcnlwdG9JbnRTdGF0dXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBDUllQVE9fRE1BX0lOX0RPTkUgICAgICAweDAwMDAwMDAyICAvLyBETUEgZG9uZSBpbnRlcnJ1cHQgbWFzaworI2RlZmluZSBDUllQVE9fUkVTVUxUX1JEWSAgICAgICAweDAwMDAwMDAxICAvLyBSZXN1bHQgcmVhZHkgaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgQ1JZUFRPX0RNQV9CVVNfRVJSICAgICAgMHg4MDAwMDAwMCAgLy8gRE1BIEJ1cyBlcnJvcgorI2RlZmluZSBDUllQVE9fS0VZX1NUX1dSX0VSUiAgICAweDQwMDAwMDAwICAvLyBLZXkgU3RvcmUgV3JpdGUgZmFpbGVkCisjZGVmaW5lIENSWVBUT19LRVlfU1RfUkRfRVJSICAgIDB4MjAwMDAwMDAgIC8vIEtleSBTdG9yZSBSZWFkIGZhaWxlZAorCisjZGVmaW5lIENSWVBUT19JUlFUWVBFX0xFVkVMICAgIDB4MDAwMDAwMDEgIC8vIENyeXB0byBMZXZlbCBpbnRlcnJ1cHQgZW5hYmxlZAorI2RlZmluZSBDUllQVE9fSVJRVFlQRV9QVUxTRSAgICAweDAwMDAwMDAwICAvLyBDcnlwdG8gcHVsc2UgaW50ZXJydXB0IGVuYWJsZWQKKworI2RlZmluZSBDUllQVE9fRE1BX0NIQU4wICAgICAgICAweDAwMDAwMDAxICAvLyBDcnlwdG8gRE1BIENoYW5uZWwgMAorI2RlZmluZSBDUllQVE9fRE1BX0NIQU4xICAgICAgICAweDAwMDAwMDAyICAvLyBDcnlwdG8gRE1BIENoYW5uZWwgMQorCisjZGVmaW5lIENSWVBUT19BRVMxMjhfRU5DUllQVCAgIDB4MDAwMDAwMEMgIC8vCisjZGVmaW5lIENSWVBUT19BRVMxMjhfREVDUllQVCAgIDB4MDAwMDAwMDggIC8vCisKKyNkZWZpbmUgQ1JZUFRPX0RNQV9SRUFEWSAgICAgICAgMHgwMDAwMDAwMCAgLy8gRE1BIHJlYWR5CisjZGVmaW5lIENSWVBUT19ETUFfQlNZICAgICAgICAgIDB4MDAwMDAwMDMgIC8vIERNQSBidXN5CisjZGVmaW5lIENSWVBUT19ETUFfQlVTX0VSUk9SICAgIDB4MDAwMjAwMDAgIC8vIERNQSBlbmNvdW50ZXJlZCBidXMgZXJyb3IKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vICBHZW5lcmFsIGNvbnN0YW50cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8gQUVTIG1vZHVsZSByZXR1cm4gY29kZXMKKyNkZWZpbmUgQUVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRVNfS0VZU1RPUkVfUkVBRF9FUlJPUiAgICAgICAgICAxCisjZGVmaW5lIEFFU19LRVlTVE9SRV9XUklURV9FUlJPUiAgICAgICAgIDIKKyNkZWZpbmUgQUVTX0RNQV9CVVNfRVJST1IgICAgICAgICAgICAgICAgMworI2RlZmluZSBDQ01fQVVUSEVOVElDQVRJT05fRkFJTEVEICAgICAgICA0CisjZGVmaW5lIEFFU19FQ0JfVEVTVF9FUlJPUiAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQUVTX05VTExfRVJST1IgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBRVNfQ0NNX1RFU1RfRVJST1IgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFFU19ETUFfQlNZICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gS2V5IHN0b3JlIG1vZHVsZSBkZWZpbmVzCisjZGVmaW5lIFNUQVRFX0JMRU5HVEggICAgICAgICAgICAgICAgICAgMTYgIC8vIE51bWJlciBvZiBieXRlcyBpbiBTdGF0ZQorI2RlZmluZSBLRVlfQkxFTkdUSCAgICAgICAgICAgICAgICAgICAgIDE2ICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gS2V5CisjZGVmaW5lIEtFWV9FWFBfTEVOR1RIICAgICAgICAgICAgICAgICAxNzYgIC8vIE5iICogKE5yKzEpICogNAorCisjZGVmaW5lIEtFWV9TVE9SRV9TSVpFXzEyOCAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgS0VZX1NUT1JFX1NJWkVfMTkyICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBLRVlfU1RPUkVfU0laRV8yNTYgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEtFWV9TVE9SRV9TSVpFX0JJVFMgICAgIDB4MDAwMDAwMDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEZvciAxMjggYml0IGtleSBhbGwgOCBLZXkgQXJlYSBsb2NhdGlvbnMgZnJvbSAwIHRvIDggYXJlIHZhbGlkCisvLyBIb3dldmVyIGZvciAxOTIgYml0IGFuZCAyNTYgYml0IGtleXMsIG9ubHkgZXZlbiBLZXkgQXJlYXMgMCwgMiwgNCwgNgorLy8gYXJlIHZhbGlkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ1JZUFRPX0tFWV9BUkVBXzAgICAgICAgMAorI2RlZmluZSBDUllQVE9fS0VZX0FSRUFfMSAgICAgICAxCisjZGVmaW5lIENSWVBUT19LRVlfQVJFQV8yICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0tFWV9BUkVBXzMgICAgICAgMworI2RlZmluZSBDUllQVE9fS0VZX0FSRUFfNCAgICAgICA0CisjZGVmaW5lIENSWVBUT19LRVlfQVJFQV81ICAgICAgIDUKKyNkZWZpbmUgQ1JZUFRPX0tFWV9BUkVBXzYgICAgICAgNgorI2RlZmluZSBDUllQVE9fS0VZX0FSRUFfNyAgICAgICA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgY3VycmVudCBBRVMgb3BlcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBDUllQVE9fQUVTX05PTkUgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19BRVNfS0VZTDBBRCAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0FFU19FQ0IgICAgICAgICAgMgorI2RlZmluZSBDUllQVE9fQUVTX0NDTSAgICAgICAgICAzCisjZGVmaW5lIENSWVBUT19BRVNfUk5HICAgICAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0FFU19DQkMgICAgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIEFFUy1DVFIgbW9kZSBjb3VudGVyIHdpZHRoCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBDUllQVE9fQUVTX0NUUl8zMiAgICAgICAweDAKKyNkZWZpbmUgQ1JZUFRPX0FFU19DVFJfNjQgICAgICAgMHgxCisjZGVmaW5lIENSWVBUT19BRVNfQ1RSXzk2ICAgICAgIDB4MgorI2RlZmluZSBDUllQVE9fQUVTX0NUUl8xMjggICAgICAweDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIHRoZSBrZXkgaW50byB0aGUgS2V5IFJhbS4KKy8vIQorLy8hIFRoZSBcYyB1aTMyS2V5TG9jYXRpb24gcGFyYW1ldGVyIGlzIGFuIGVudW1lcmF0ZWQgdHlwZSB3aGljaCBzcGVjaWZpZXMKKy8vISB0aGUgS2V5IFJhbSBsb2NhdGlvbiBpbiB3aGljaCB0aGUga2V5IGlzIHN0b3JlZC4KKy8vIQorLy8hIFRoZSBwb2ludGVyIFxjIHB1aThBZXNLZXkgaGFzIHRoZSBhZGRyZXNzIHdoZXJlIHRoZSBLZXkgaXMgc3RvcmVkLgorLy8hCisvLyEgXHBhcmFtIHB1aTMyQWVzS2V5IGlzIGEgcG9pbnRlciB0byBhbiBBRVMgS2V5LgorLy8hIFxwYXJhbSB1aTMyS2V5TG9jYXRpb24gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXkgaW4gS2V5IFJBTS4KKy8vISBUaGlzIHBhcmFtZXRlciBjYW4gaGF2ZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8wCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8xCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8yCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV8zCisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV80CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV81CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV82CisvLyEgLSBccmVmIENSWVBUT19LRVlfQVJFQV83CisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSBmdW5jdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MKKy8vISAtIFxyZWYgQUVTX0tFWVNUT1JFX1JFQURfRVJST1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1JZUFRPQWVzTG9hZEtleSh1aW50MzJfdCAqcHVpMzJBZXNLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24pOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTdGFydCBhbiBBRVMtQ0JDIG9wZXJhdGlvbiAoZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uKS4KKy8vIQorLy8hIFRoZSBmdW5jdGlvbiBzdGFydHMgYW4gQUVTIENCQyBtb2RlIGVuY3lwdCBvciBkZWNyeXB0IG9wZXJhdGlvbi4KKy8vISBFbmQgb3BlcmF0aW9uIGNhbiBiZSBkZXRlY2VkIGJ5IGVuYWJsaW5nIGludGVycnVwdCBvciBieSBwb2xsaW5nCisvLyEgQ1JZUFRPQWVzQ2JjU3RhdHVzKCkuIFJlc3VsdCBvZiBvcGVyYXRpb24gaXMgcmV0dXJuZWQgYnkgQ1JZUFRPQWVzQ2JjU3RhdHVzKCkuCisvLyEKKy8vISBccGFyYW0gcHVpMzJNc2dJbiBpcyBhIHBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEuCisvLyEgXHBhcmFtIHB1aTMyTXNnT3V0IGlzIGEgcG9pbnRlciB0byB0aGUgb3V0cHV0IGRhdGEuCisvLyEgXHBhcmFtIHVpMzJNc2dMZW5ndGggaXMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgaW5wdXQgZGF0YS4KKy8vISBccGFyYW0gcHVpMzJOb25jZSBpcyBhIHBvaW50ZXIgdG8gMTYtYnl0ZSBOb25jZS4KKy8vISBccGFyYW0gdWkzMktleUxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUga2V5IGluIEtleSBSQU0uCisvLyEgVGhpcyBwYXJhbWV0ZXIgY2FuIGhhdmUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMAorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMQorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMgorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfMworLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNAorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNQorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNgorLy8hIC0gXHJlZiBDUllQVE9fS0VZX0FSRUFfNworLy8hIFxwYXJhbSBiRW5jcnlwdCBpcyBzZXQgXGMgdHJ1ZSB0byBlbmNyeXB0IG9yIHNldCBcYyBmYWxzZSB0byBkZWNyeXB0LgorLy8hIFxwYXJhbSBiSW50RW5hYmxlIGlzIHNldCBcYyB0cnVlIHRvIGVuYWJsZSBDcnlwdG8gaW50ZXJydXB0cyBvciBcYyBmYWxzZSB0bworLy8hIGRpc2FibGUgQ3J5cHRvIGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIEFFUy1DQkMgb3BlcmF0aW9uOgorLy8hIC0gXHJlZiBBRVNfU1VDQ0VTUworLy8hIC0gXHJlZiBBRVNfS0VZU1RPUkVfUkVBRF9FUlJPUgorLy8hCisvLyEgXHNhIFxyZWYgQ1JZUFRPQWVzQ2JjU3RhdHVzKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1JZUFRPQWVzQ2JjKHVpbnQzMl90ICpwdWkzMk1zZ0luLCB1aW50MzJfdCAqcHVpMzJNc2dPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNc2dMZW5ndGgsIHVpbnQzMl90ICpwdWkzMk5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sIGJvb2wgYkVuY3J5cHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkludEVuYWJsZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrIHRoZSByZXN1bHQgb2YgYW4gQUVTIENCQyBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgXHJlZiBDUllQVE9BZXNDYmMoKSBmdW5jdGlvbiB0bworLy8hIGNoZWNrIGlmIHRoZSBBRVMgQ0JDIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBBRVMgQ0JDIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MgICAgICAgOiBTdWNjZXNzZnVsLgorLy8hIC0gXHJlZiBBRVNfRE1BX0JVU19FUlJPUiA6IEZhaWxlZC4KKy8vISAtIFxyZWYgQUVTX0RNQV9CU1kgICAgICAgOiBPcGVyYXRpb24gaXMgb25nb2luZy4KKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0Flc0NiYygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0Flc0NiY1N0YXR1cyh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3RhcnQgYW4gQUVTLUVDQiBvcGVyYXRpb24gKGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbikuCisvLyEKKy8vISBUaGUgXGMgdWkzMktleUxvY2F0aW9uIHBhcmFtZXRlciBpcyBhbiBlbnVtZXJhdGVkIHR5cGUgd2hpY2ggc3BlY2lmaWVzCisvLyEgdGhlIEtleSBSYW0gbG9jYXRpb24gaW4gd2hpY2ggdGhlIGtleSBpcyBzdG9yZWQuCisvLyEKKy8vISBccGFyYW0gcHVpMzJNc2dJbiBpcyBhIHBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEuCisvLyEgXHBhcmFtIHB1aTMyTXNnT3V0IGlzIGEgcG9pbnRlciB0byB0aGUgb3V0cHV0IGRhdGEuCisvLyEgXHBhcmFtIHVpMzJLZXlMb2NhdGlvbiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGtleSBpbiBLZXkgUkFNLgorLy8hIFRoaXMgcGFyYW1ldGVyIGNhbiBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzAKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzEKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzIKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzMKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzQKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzUKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzYKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzcKKy8vISBccGFyYW0gYkVuY3J5cHQgaXMgc2V0IFxjIHRydWUgdG8gZW5jcnlwdCBvciBzZXQgXGMgZmFsc2UgdG8gZGVjcnlwdC4KKy8vISBccGFyYW0gYkludEVuYWJsZSBpcyBzZXQgXGMgdHJ1ZSB0byBlbmFibGUgQ3J5cHRvIGludGVycnVwdHMgb3IgXGMgZmFsc2UgdG8KKy8vISBkaXNhYmxlIENyeXB0byBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSBBRVMtRUNCIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MKKy8vISAtIFxyZWYgQUVTX0tFWVNUT1JFX1JFQURfRVJST1IKKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0Flc0VjYlN0YXR1cygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0Flc0VjYih1aW50MzJfdCAqcHVpMzJNc2dJbiwgdWludDMyX3QgKnB1aTMyTXNnT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sIGJvb2wgYkVuY3J5cHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkludEVuYWJsZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrIHRoZSByZXN1bHQgb2YgYW4gQUVTIEVDQiBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgXHJlZiBDUllQVE9BZXNFY2IoKSBmdW5jdGlvbiB0bworLy8hIGNoZWNrIGlmIHRoZSBBRVMgRUNCIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBBRVMgRUNCIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MgICAgICAgOiBTdWNjZXNzZnVsLgorLy8hIC0gXHJlZiBBRVNfRE1BX0JVU19FUlJPUiA6IEZhaWxlZC4KKy8vISAtIFxyZWYgQUVTX0RNQV9CU1kgICAgICAgOiBPcGVyYXRpb24gaXMgb25nb2luZy4KKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0Flc0VjYigpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0Flc0VjYlN0YXR1cyh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRmluaXNoIHRoZSBlbmNyeXB0aW9uIG9wZXJhdGlvbiBieSByZXNldHRpbmcgdGhlIG9wZXJhdGlvbiBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFxyZWYgQ1JZUFRPQWVzRWNiU3RhdHVzKCkgaGFzIHJlcG9ydGVkCisvLyEgdGhhdCB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgQ1JZUFRPQWVzRWNiU3RhdHVzKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQ1JZUFRPQWVzRWNiRmluaXNoKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXN1bHQgaGFzIGFscmVhZHkgYmVlbiBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgYnkgRE1BLgorICAgIC8vIERpc2FibGUgbWFzdGVyIGNvbnRyb2wvRE1BIGNsb2NrIGFuZCBjbGVhciB0aGUgb3BlcmF0aW5nIG1vZGUuCisgICAgLy8KKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FMR1NFTCkgPSAweDAwMDAwMDAwOworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fQUVTQ1RMKSA9IDB4MDAwMDAwMDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEZpbmlzaCB0aGUgZW5jcnlwdGlvbiBvcGVyYXRpb24gYnkgcmVzZXR0aW5nIHRoZSBvcGVyYXRpb24gbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBccmVmIENSWVBUT0Flc0NiY1N0YXR1cygpIGhhcyByZXBvcnRlZAorLy8hIHRoYXQgdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0Flc0NiY1N0YXR1cygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0Flc0NiY0ZpbmlzaCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGJ5IERNQS4KKyAgICAvLyBEaXNhYmxlIG1hc3RlciBjb250cm9sL0RNQSBjbG9jayBhbmQgY2xlYXIgdGhlIG9wZXJhdGluZyBtb2RlLgorICAgIC8vCisgICAgSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19BTEdTRUwpID0gMHgwMDAwMDAwMDsKKyAgICBIV1JFRyhDUllQVE9fQkFTRSArIENSWVBUT19PX0FFU0NUTCkgPSAweDAwMDAwMDAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTdGFydCBDQ00gb3BlcmF0aW9uLgorLy8hCisvLyEgVGhlIFxjIHVpMzJLZXlMb2NhdGlvbiBpcyBhbiBlbnVtZXJhdGVkIHR5cGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBLZXkgUmFtCisvLyEgbG9jYXRpb24gaW4gd2hpY2ggdGhlIGtleSBpcyBzdG9yZWQuCisvLyEKKy8vISBccGFyYW0gYkVuY3J5cHQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJ1biBlbmNyeXB0aW9uIG9yIG5vdC4KKy8vISBccGFyYW0gdWkzMkF1dGhMZW5ndGggaXMgdGhlIHRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGZpZWxkIC0KKy8vISAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0IG9yIDE2IG9jdGV0cy4KKy8vISBccGFyYW0gcHVpMzJOb25jZSBpcyBhIHBvaW50ZXIgdG8gMTMtYnl0ZSBvciAxMi1ieXRlIE5vbmNlIChOdW1iZXIgdXNlZCBvbmNlKS4KKy8vISBccGFyYW0gcHVpMzJQbGFpblRleHQgaXMgYSBwb2ludGVyIHRvIHRoZSBvY3RldCBzdHJpbmcgaW5wdXQgbWVzc2FnZS4KKy8vISBccGFyYW0gdWkzMlBsYWluVGV4dExlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlLgorLy8hIFxwYXJhbSBwdWkzMkhlYWRlciBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgKEFkZGl0aW9uYWwgQXV0aGVudGljYXRpb24KKy8vISBEYXRhIG9yIEFBRCkuCisvLyEgXHBhcmFtIHVpMzJIZWFkZXJMZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIGluIG9jdGV0cy4KKy8vISBccGFyYW0gdWkzMktleUxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBpbiBLZXkgUkFNIHdoZXJlIHRoZSBrZXkgaXMgc3RvcmVkLgorLy8hIFRoaXMgcGFyYW1ldGVyIGNhbiBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzAKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzEKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzIKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzMKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzQKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzUKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzYKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzcKKy8vISBccGFyYW0gdWkzMkZpZWxkTGVuZ3RoIGlzIHRoZSBzaXplIG9mIHRoZSBsZW5ndGggZmllbGQgKDIgb3IgMykuCisvLyEgXHBhcmFtIGJJbnRFbmFibGUgZW5hYmxlcyBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIENDTSBvcGVyYXRpb24KKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MKKy8vISAtIFxyZWYgQUVTX0tFWVNUT1JFX1JFQURfRVJST1IKKy8vISAtIFxyZWYgQUVTX0RNQV9CVVNfRVJST1IKKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1JZUFRPQ2NtQXV0aEVuY3J5cHQoYm9vbCBiRW5jcnlwdCwgdWludDMyX3QgdWkzMkF1dGhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyTm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyUGxhaW5UZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQbGFpblRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMySGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJIZWFkZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMktleUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJGaWVsZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJJbnRFbmFibGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVjayB0aGUgcmVzdWx0IG9mIGFuIEFFUyBDQ00gb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFxyZWYgQ1JZUFRPQ2NtQXV0aEVuY3J5cHQoKSBmdW5jdGlvbiB0byBjaGVjaworLy8hIGlmIHRoZSBBRVMgQ0NNIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBBRVMgQ0NNIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MgICAgICAgOiBTdWNjZXNzZnVsLgorLy8hIC0gXHJlZiBBRVNfRE1BX0JVU19FUlJPUiA6IEZhaWxlZC4KKy8vISAtIFxyZWYgQUVTX0RNQV9CU1kgICAgICAgOiBPcGVyYXRpb24gaXMgb25nb2luZy4KKy8vIQorLy8hIFxzYSBccmVmIENSWVBUT0NjbUF1dGhFbmNyeXB0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXModm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgcmVzdWx0IG9mIGFuIEFFUyBDQ00gb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIFxyZWYgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyVGFnTGVuZ3RoIGlzIGxlbmd0aCBvZiB0aGUgVGFnLgorLy8hIFxwYXJhbSBwdWkzMkNjbVRhZyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFRhZy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBccmVmIEFFU19TVUNDRVNTIGlmIHN1Y2Nlc3NmdWwuCisvLyEKKy8vISBcc2EgXHJlZiBDUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0NjbUF1dGhFbmNyeXB0UmVzdWx0R2V0KHVpbnQzMl90IHVpMzJUYWdMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyQ2NtVGFnKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3RhcnQgYSBDQ00gRGVjcnlwdGlvbiBhbmQgSW52ZXJzZSBBdXRoZW50aWNhdGlvbiBvcGVyYXRpb24uCisvLyEKKy8vISBUaGUgXGMgdWkzMktleUxvY2F0aW9uIGlzIGFuIGVudW1lcmF0ZWQgdHlwZSB3aGljaCBzcGVjaWZpZXMgdGhlIEtleSBSYW0KKy8vISBsb2NhdGlvbiBpbiB3aGljaCB0aGUga2V5IGlzIHN0b3JlZC4KKy8vIQorLy8hIFxwYXJhbSBiRGVjcnlwdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gcnVuIGRlY3J5cHRpb24gb3Igbm90LgorLy8hIFxwYXJhbSB1aTMyQXV0aExlbmd0aCBpcyB0aGUgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gZmllbGQgLQorLy8hIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQgb3IgMTYgb2N0ZXRzLgorLy8hIFxwYXJhbSBwdWkzMk5vbmNlIGlzIGEgcG9pbnRlciB0byAxMy1ieXRlIG9yIDEyLWJ5dGUgTm9uY2UgKE51bWJlciB1c2VkIG9uY2UpLgorLy8hIFxwYXJhbSBwdWkzMkNpcGhlclRleHQgaXMgYSBwb2ludGVyIHRvIHRoZSBvY3RldCBzdHJpbmcgZW5jcnlwdGVkIG1lc3NhZ2UuCisvLyEgXHBhcmFtIHVpMzJDaXBoZXJUZXh0TGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGVuY3J5cHRlZCBtZXNzYWdlLgorLy8hIFxwYXJhbSBwdWkzMkhlYWRlciBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgKEFkZGl0aW9uYWwgQXV0aGVudGljYXRpb24KKy8vISBEYXRhIG9yIEFBRCkuCisvLyEgXHBhcmFtIHVpMzJIZWFkZXJMZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIGluIG9jdGV0cy4KKy8vISBccGFyYW0gdWkzMktleUxvY2F0aW9uIGlzIHRoZSBsb2NhdGlvbiBpbiBLZXkgUkFNIHdoZXJlIHRoZSBrZXkgaXMgc3RvcmVkLgorLy8hIFRoaXMgcGFyYW1ldGVyIGNhbiBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzAKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzEKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzIKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzMKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzQKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzUKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzYKKy8vISAtIFxyZWYgQ1JZUFRPX0tFWV9BUkVBXzcKKy8vISBccGFyYW0gdWkzMkZpZWxkTGVuZ3RoIGlzIHRoZSBzaXplIG9mIHRoZSBsZW5ndGggZmllbGQgKDIgb3IgMykuCisvLyEgXHBhcmFtIGJJbnRFbmFibGUgZW5hYmxlcyBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MKKy8vISAtIFxyZWYgQUVTX0tFWVNUT1JFX1JFQURfRVJST1IKKy8vISAtIFxyZWYgQUVTX0RNQV9CVVNfRVJST1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQoYm9vbCBiRGVjcnlwdCwgdWludDMyX3QgdWkzMkF1dGhMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyTm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1aTMyQ2lwaGVyVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2lwaGVyVGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkhlYWRlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyS2V5TG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkZpZWxkTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkludEVuYWJsZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrcyBDQ00gZGVjcnlwdCBhbmQgSW52ZXJzZSBBdXRoZW50aWNhdGlvbiByZXN1bHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIG9wZXJhdGlvbjoKKy8vISAtIFxyZWYgQUVTX1NVQ0NFU1MgICAgICAgOiBPcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisvLyEgLSBccmVmIEFFU19ETUFfQlNZICAgICAgIDogT3BlcmF0aW9uIGlzIGJ1c3kuCisvLyEgLSBccmVmIEFFU19ETUFfQlVTX0VSUk9SIDogQW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IENSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgQ0NNIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQXV0aExlbmd0aCBpcyB0aGUgdGhlIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gZmllbGQgLQorLy8hIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQgb3IgMTYgb2N0ZXRzLgorLy8hIFxwYXJhbSBwdWkzMkNpcGhlclRleHQgaXMgYSBwb2ludGVyIHRvIHRoZSBvY3RldCBzdHJpbmcgZW5jcnlwdGVkIG1lc3NhZ2UuCisvLyEgXHBhcmFtIHVpMzJDaXBoZXJUZXh0TGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGVuY3J5cHRlZCBtZXNzYWdlLgorLy8hIFxwYXJhbSBwdWkzMkNjbVRhZyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFRhZy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBBRVNfU1VDQ0VTUyBpZiBzdWNjZXNzZnVsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldCh1aW50MzJfdCB1aTMyQXV0aExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJDaXBoZXJUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaXBoZXJUZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkNjbVRhZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIENyeXB0byBETUEgY29udHJvbGxlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwb2xsIHRoZSBDcnlwdG8gRE1BIGNvbnRyb2xsZXIgdG8gY2hlY2sgaWYgaXQgaXMKKy8vISByZWFkeSBmb3IgYSBuZXcgb3BlcmF0aW9uIG9yIGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4KKy8vIQorLy8hIFRoZSBccmVmIENSWVBUT19ETUFfQlVTX0VSUk9SIGNhbiBhbHNvIGJlIGNhdWdodCB1c2luZyB0aGUgY3J5cHRvIGV2ZW50CisvLyEgaGFuZGxlci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIERNQSBjb250cm9sbGVyOgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX1JFQURZICAgICA6IERNQSByZWFkeSBmb3IgYSBuZXcgb3BlcmF0aW9uCisvLyEgLSBccmVmIENSWVBUT19ETUFfQlNZICAgICAgIDogRE1BIGlzIGJ1c3kKKy8vISAtIFxyZWYgQ1JZUFRPX0RNQV9CVVNfRVJST1IgOiBETUEgQnVzIGVycm9yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitDUllQVE9EbWFTdGF0dXModm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHN0YXR1cyByZWdpc3Rlci4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19ETUFTVEFUKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBDcnlwdG8gRE1BIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgQ3J5cHRvIERNQSBjaGFubmVscyBhcmUgZW5hYmxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbHMgaXMgYSBiaXR3aXNlIE9SIG9mIHRoZSBjaGFubmVscyB0byBlbmFibGUuCisvLyEgLSBccmVmIENSWVBUT19ETUFfQ0hBTjAKKy8vISAtIFxyZWYgQ1JZUFRPX0RNQV9DSEFOMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQ1JZUFRPRG1hRW5hYmxlKHVpbnQzMl90IHVpMzJDaGFubmVscyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgQ3J5cHRvIERNQSBvcGVyYXRpb24uCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIENyeXB0byBETUEgY2hhbm5lbHMgYXJlIGRpc2FibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDaGFubmVscyBpcyBhIGJpdHdpc2UgT1Igb2YgdGhlIGNoYW5uZWxzIHRvIGRpc2FibGUuCisvLyEgLSBccmVmIENSWVBUT19ETUFfQ0hBTjAKKy8vISAtIFxyZWYgQ1JZUFRPX0RNQV9DSEFOMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQ1JZUFRPRG1hRGlzYWJsZSh1aW50MzJfdCB1aTMyQ2hhbm5lbHMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGluZGl2aWR1YWwgQ3J5cHRvIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbmRpY2F0ZWQgQ3J5cHRvIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZQorLy8hIHNvdXJjZXMgdGhhdCBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0LgorLy8hIERpc2FibGVkIHNvdXJjZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisvLyEgLSBccmVmIENSWVBUT19ETUFfSU5fRE9ORQorLy8hIC0gXHJlZiBDUllQVE9fUkVTVUxUX1JEWQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0ludEVuYWJsZSh1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50RmxhZ3MgJiBDUllQVE9fRE1BX0lOX0RPTkUpIHwKKyAgICAgICAgICAgKHVpMzJJbnRGbGFncyAmIENSWVBUT19SRVNVTFRfUkRZKSk7CisKKyAgICAvLworICAgIC8vIFVzaW5nIGxldmVsIGludGVycnVwdC4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRVFlQRSkgPSBDUllQVE9fSVJRVFlQRV9MRVZFTDsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pIHw9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCBDUllQVE8gaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbmRpY2F0ZWQgQ3J5cHRvIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZQorLy8hIHNvdXJjZXMgdGhhdCBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0LgorLy8hIERpc2FibGVkIHNvdXJjZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisvLyEgLSBccmVmIENSWVBUT19ETUFfSU5fRE9ORQorLy8hIC0gXHJlZiBDUllQVE9fUkVTVUxUX1JEWQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0ludERpc2FibGUodWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkludEZsYWdzICYgQ1JZUFRPX0RNQV9JTl9ET05FKSB8CisgICAgICAgICAgICh1aTMySW50RmxhZ3MgJiBDUllQVE9fUkVTVUxUX1JEWSkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRRU4pICY9IH51aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBDcnlwdG8uIEVpdGhlcgorLy8hIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgc3RhdHVzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgYWxsb3dlZCB0bworLy8hIHJlZmxlY3QgdG8gdGhlIHByb2Nlc3NvciBjYW4gYmUgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gYk1hc2tlZCB3aGV0aGVyIHRvIHVzZSByYXcgb3IgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyEgLSBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVpcmVkLgorLy8hIC0gXGMgdHJ1ZSAgOiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1aXJlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8hIC0gXHJlZiBDUllQVE9fRE1BX0lOX0RPTkUKKy8vISAtIFxyZWYgQ1JZUFRPX1JFU1VMVF9SRFkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0NSWVBUT0ludFN0YXR1cyhib29sIGJNYXNrZWQpCit7CisgICAgdWludDMyX3QgdWkzMk1hc2s7CisKKyAgICAvLworICAgIC8vIFJldHVybiBlaXRoZXIgdGhlIGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIGFzCisgICAgLy8gcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYoYk1hc2tlZCkKKyAgICB7CisgICAgICAgIHVpMzJNYXNrID0gSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFFTik7CisgICAgICAgIHJldHVybih1aTMyTWFzayAmIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRU1RBVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcoQ1JZUFRPX0JBU0UgKyBDUllQVE9fT19JUlFTVEFUKSAmIDB4MDAwMDAwMDMpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIENyeXB0byBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgQ3J5cHRvIGludGVycnVwdCBzb3VyY2VzIGFyZSBjbGVhcmVkLCBzbyB0aGF0IHRoZXkgbm8gbG9uZ2VyCisvLyEgYXNzZXJ0LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBrZWVwIHRoZQorLy8hIGludGVycnVwdCBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGNsZWFyZWQuCisvLyEgLSBccmVmIENSWVBUT19ETUFfSU5fRE9ORQorLy8hIC0gXHJlZiBDUllQVE9fUkVTVUxUX1JEWQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0ludENsZWFyKHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJJbnRGbGFncyAmIENSWVBUT19ETUFfSU5fRE9ORSkgfAorICAgICAgICAgICAodWkzMkludEZsYWdzICYgQ1JZUFRPX1JFU1VMVF9SRFkpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBpbnRlcnJ1cHQgc291cmNlcywKKyAgICAvLworICAgIEhXUkVHKENSWVBUT19CQVNFICsgQ1JZUFRPX09fSVJRQ0xSKSA9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIENyeXB0byBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCByZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBUaGlzCisvLyEgZnVuY3Rpb24gZW5hYmxlcyB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXI7IHNwZWNpZmljCisvLyEgVUFSVCBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBDUllQVE9JbnRFbmFibGUoKS4gSXQgaXMgdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgVUFSVCBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0ludFJlZ2lzdGVyKHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSwgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgVUFSVCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnRFbmFibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgQ3J5cHRvIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHVucmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiBJdAorLy8hIGNsZWFycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIENyeXB0byBpbnRlcnJ1cHQgb2NjdXJzLiBUaGlzCisvLyEgZnVuY3Rpb24gYWxzbyBtYXNrcyBvZmYgdGhlIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgc28gdGhhdAorLy8hIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBubyBsb25nZXIgaXMgY2FsbGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0NSWVBUT0ludFVucmVnaXN0ZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKElOVF9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0NSWVBUT0Flc0xvYWRLZXkKKyAgICAgICAgI3VuZGVmICBDUllQVE9BZXNMb2FkS2V5CisgICAgICAgICNkZWZpbmUgQ1JZUFRPQWVzTG9hZEtleSAgICAgICAgICAgICAgICBST01fQ1JZUFRPQWVzTG9hZEtleQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQWVzQ2JjCisgICAgICAgICN1bmRlZiAgQ1JZUFRPQWVzQ2JjCisgICAgICAgICNkZWZpbmUgQ1JZUFRPQWVzQ2JjICAgICAgICAgICAgICAgICAgICBST01fQ1JZUFRPQWVzQ2JjCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9BZXNDYmNTdGF0dXMKKyAgICAgICAgI3VuZGVmICBDUllQVE9BZXNDYmNTdGF0dXMKKyAgICAgICAgI2RlZmluZSBDUllQVE9BZXNDYmNTdGF0dXMgICAgICAgICAgICAgIFJPTV9DUllQVE9BZXNDYmNTdGF0dXMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0Flc0VjYgorICAgICAgICAjdW5kZWYgIENSWVBUT0Flc0VjYgorICAgICAgICAjZGVmaW5lIENSWVBUT0Flc0VjYiAgICAgICAgICAgICAgICAgICAgUk9NX0NSWVBUT0Flc0VjYgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQWVzRWNiU3RhdHVzCisgICAgICAgICN1bmRlZiAgQ1JZUFRPQWVzRWNiU3RhdHVzCisgICAgICAgICNkZWZpbmUgQ1JZUFRPQWVzRWNiU3RhdHVzICAgICAgICAgICAgICBST01fQ1JZUFRPQWVzRWNiU3RhdHVzCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9DY21BdXRoRW5jcnlwdAorICAgICAgICAjdW5kZWYgIENSWVBUT0NjbUF1dGhFbmNyeXB0CisgICAgICAgICNkZWZpbmUgQ1JZUFRPQ2NtQXV0aEVuY3J5cHQgICAgICAgICAgICBST01fQ1JZUFRPQ2NtQXV0aEVuY3J5cHQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0U3RhdHVzCisgICAgICAgICN1bmRlZiAgQ1JZUFRPQ2NtQXV0aEVuY3J5cHRTdGF0dXMKKyAgICAgICAgI2RlZmluZSBDUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cyAgICAgIFJPTV9DUllQVE9DY21BdXRoRW5jcnlwdFN0YXR1cworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQ2NtQXV0aEVuY3J5cHRSZXN1bHRHZXQKKyAgICAgICAgI3VuZGVmICBDUllQVE9DY21BdXRoRW5jcnlwdFJlc3VsdEdldAorICAgICAgICAjZGVmaW5lIENSWVBUT0NjbUF1dGhFbmNyeXB0UmVzdWx0R2V0ICAgUk9NX0NSWVBUT0NjbUF1dGhFbmNyeXB0UmVzdWx0R2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdAorICAgICAgICAjdW5kZWYgIENSWVBUT0NjbUludkF1dGhEZWNyeXB0CisgICAgICAgICNkZWZpbmUgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQgICAgICAgICBST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0NSWVBUT0NjbUludkF1dGhEZWNyeXB0U3RhdHVzCisgICAgICAgICN1bmRlZiAgQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRTdGF0dXMKKyAgICAgICAgI2RlZmluZSBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cyAgIFJPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdFN0YXR1cworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPQ2NtSW52QXV0aERlY3J5cHRSZXN1bHRHZXQKKyAgICAgICAgI3VuZGVmICBDUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldAorICAgICAgICAjZGVmaW5lIENSWVBUT0NjbUludkF1dGhEZWNyeXB0UmVzdWx0R2V0IFJPTV9DUllQVE9DY21JbnZBdXRoRGVjcnlwdFJlc3VsdEdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fQ1JZUFRPRG1hRW5hYmxlCisgICAgICAgICN1bmRlZiAgQ1JZUFRPRG1hRW5hYmxlCisgICAgICAgICNkZWZpbmUgQ1JZUFRPRG1hRW5hYmxlICAgICAgICAgICAgICAgICBST01fQ1JZUFRPRG1hRW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9DUllQVE9EbWFEaXNhYmxlCisgICAgICAgICN1bmRlZiAgQ1JZUFRPRG1hRGlzYWJsZQorICAgICAgICAjZGVmaW5lIENSWVBUT0RtYURpc2FibGUgICAgICAgICAgICAgICAgUk9NX0NSWVBUT0RtYURpc2FibGUKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvLyBfX0NSWVBUT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWE3ZTgxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkZGkuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMDkgMTI6MDU6MDIgKzAyMDAgKE1vbiwgMDkgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYzMTUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBEREkgbWFzdGVyIGludGVyZmFjZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9kZGkuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIERESTMyUmVnV3JpdGUKKyAgICAjZGVmaW5lIERESTMyUmVnV3JpdGUgICAgICAgICAgICAgICAgICAgTk9ST01fRERJMzJSZWdXcml0ZQorICAgICN1bmRlZiAgRERJMTZCaXRXcml0ZQorICAgICNkZWZpbmUgRERJMTZCaXRXcml0ZSAgICAgICAgICAgICAgICAgICBOT1JPTV9EREkxNkJpdFdyaXRlCisgICAgI3VuZGVmICBEREkxNkJpdGZpZWxkV3JpdGUKKyAgICAjZGVmaW5lIERESTE2Qml0ZmllbGRXcml0ZSAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRmaWVsZFdyaXRlCisgICAgI3VuZGVmICBEREkxNkJpdFJlYWQKKyAgICAjZGVmaW5lIERESTE2Qml0UmVhZCAgICAgICAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRSZWFkCisgICAgI3VuZGVmICBEREkxNkJpdGZpZWxkUmVhZAorICAgICNkZWZpbmUgRERJMTZCaXRmaWVsZFJlYWQgICAgICAgICAgICAgICBOT1JPTV9EREkxNkJpdGZpZWxkUmVhZAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgV3JpdGUgYSAzMiBiaXQgdmFsdWUgdG8gYSByZWdpc3RlciBpbiB0aGUgRERJIHNsYXZlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0RESTMyUmVnV3JpdGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKERESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgRERJX1NMQVZFX1JFR1MpOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgdmFsdWUgdG8gdGhlIHJlZ2lzdGVyLgorICAgIC8vCisgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJCYXNlICsgdWkzMlJlZywgdWkzMlZhbCwgNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgV3JpdGUgYSBzaW5nbGUgYml0IHVzaW5nIGEgMTYtYml0IG1hc2thYmxlIHdyaXRlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorRERJMTZCaXRXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1hc2ssIHVpbnQzMl90IHVpMzJXckRhdGEpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ0FkZHI7CisgICAgdWludDMyX3QgdWkzMkRhdGE7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCEoKHVpMzJNYXNrICYgMHhGRkZGMDAwMCkgXiAodWkzMk1hc2sgJiAweDAwMDBGRkZGKSkpOworICAgIEFTU0VSVCghKHVpMzJXckRhdGEgJiAweEZGRkYwMDAwKSk7CisKKyAgICAvLworICAgIC8vIERESSAxNi1iaXQgdGFyZ2V0IGlzIG9uIDMyLWJpdCBib3VuZGFyeSBzbyBkb3VibGUgb2Zmc2V0CisgICAgLy8KKyAgICB1aTMyUmVnQWRkciA9IHVpMzJCYXNlICsgKHVpMzJSZWcgPDwgMSkgKyBERElfT19NQVNLMTZCOworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgZm9yIHRhcmdldCBiaXQgaW4gaGlnaCBoYWxmIG9mIHRoZSB3b3JkLgorICAgIC8vCisgICAgaWYodWkzMk1hc2sgJiAweEZGRkYwMDAwKQorICAgIHsKKyAgICAgICAgdWkzMlJlZ0FkZHIgKz0gNDsKKyAgICAgICAgdWkzMk1hc2sgPj49IDE2OworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgbWFzayBpZiBkYXRhIGlzIG5vdCB6ZXJvICh0byBzZXQgbWFzayBiaXQpLCBlbHNlIHdyaXRlICcwJy4KKyAgICAvLworICAgIHVpMzJEYXRhID0gdWkzMldyRGF0YSA/IHVpMzJNYXNrIDogMHgwOworCisgICAgLy8KKyAgICAvLyBVcGRhdGUgdGhlIHJlZ2lzdGVyLgorICAgIC8vCisgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJSZWdBZGRyLCAodWkzMk1hc2sgPDwgMTYpIHwgdWkzMkRhdGEsIDQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdyaXRlIGEgYml0ZmllbGQgdmlhIHRoZSBEREkgdXNpbmcgMTYtYml0IG1hc2thYmxlIHdyaXRlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorRERJMTZCaXRmaWVsZFdyaXRlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXNrLCB1aW50MzJfdCB1aTMyU2hpZnQsCisgICAgICAgICAgICAgICAgICAgdWludDE2X3QgdWkzMkRhdGEpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ0FkZHI7CisgICAgdWludDMyX3QgdWkzMldyRGF0YTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gMTYtYml0IHRhcmdldCBpcyBvbiAzMi1iaXQgYm91bmRhcnkgc28gZG91YmxlIG9mZnNldC4KKyAgICAvLworICAgIHVpMzJSZWdBZGRyID0gdWkzMkJhc2UgKyAodWkzMlJlZyA8PCAxKSArIERESV9PX01BU0sxNkI7CisKKyAgICAvLworICAgIC8vIEFkanVzdCBmb3IgdGFyZ2V0IGJpdCBpbiBoaWdoIGhhbGYgb2YgdGhlIHdvcmQuCisgICAgLy8KKyAgICBpZih1aTMyU2hpZnQgPj0gMTYpCisgICAgeworICAgICAgICB1aTMyU2hpZnQgPSB1aTMyU2hpZnQgLSAxNjsKKyAgICAgICAgdWkzMlJlZ0FkZHIgKz0gNDsKKyAgICAgICAgdWkzMk1hc2sgPSB1aTMyTWFzayA+PiAxNjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNoaWZ0IGRhdGEgaW4gdG8gcG9zaXRpb24uCisgICAgLy8KKyAgICB1aTMyV3JEYXRhID0gdWkzMkRhdGEgPDwgdWkzMlNoaWZ0OworCisgICAgLy8KKyAgICAvLyBXcml0ZSBkYXRhLgorICAgIC8vCisgICAgQXV4QWRpRGRpU2FmZVdyaXRlKHVpMzJSZWdBZGRyLCAodWkzMk1hc2sgPDwgMTYpIHwgdWkzMldyRGF0YSwgNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUmVhZCBhIGJpdCB2aWEgdGhlIERESSB1c2luZyAxNi1iaXQgUkVBRC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MTZfdAorRERJMTZCaXRSZWFkKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MzJfdCB1aTMyTWFzaykKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnQWRkcjsKKyAgICB1aW50MTZfdCB1aTE2RGF0YTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3Rlci4KKyAgICAvLworICAgIHVpMzJSZWdBZGRyID0gdWkzMkJhc2UgKyB1aTMyUmVnICsgRERJX09fRElSOworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgZm9yIHRhcmdldCBiaXQgaW4gaGlnaCBoYWxmIG9mIHRoZSB3b3JkLgorICAgIC8vCisgICAgaWYodWkzMk1hc2sgJiAweEZGRkYwMDAwKQorICAgIHsKKyAgICAgICAgdWkzMlJlZ0FkZHIgKz0gMjsKKyAgICAgICAgdWkzMk1hc2sgPSB1aTMyTWFzayA+PiAxNjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJlYWQgYSBoYWxmd29yZCBvbiB0aGUgRERJIGludGVyZmFjZS4KKyAgICAvLworICAgIHVpMTZEYXRhID0gQXV4QWRpRGRpU2FmZVJlYWQodWkzMlJlZ0FkZHIsIDIpOworCisgICAgLy8KKyAgICAvLyBNYXNrIGRhdGEuCisgICAgLy8KKyAgICB1aTE2RGF0YSA9IHVpMTZEYXRhICYgdWkzMk1hc2s7CisKKyAgICAvLworICAgIC8vIFJldHVybiBtYXNrZWQgZGF0YS4KKyAgICAvLworICAgIHJldHVybih1aTE2RGF0YSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUmVhZCBhIGJpdGZpZWxkIHZpYSB0aGUgRERJIHVzaW5nIDE2LWJpdCByZWFkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQxNl90CitEREkxNkJpdGZpZWxkUmVhZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJNYXNrLCB1aW50MzJfdCB1aTMyU2hpZnQpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ0FkZHI7CisgICAgdWludDE2X3QgdWkxNkRhdGE7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoRERJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJSZWdBZGRyID0gdWkzMkJhc2UgKyB1aTMyUmVnICsgRERJX09fRElSOworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgZm9yIHRhcmdldCBiaXQgaW4gaGlnaCBoYWxmIG9mIHRoZSB3b3JkLgorICAgIC8vCisgICAgaWYodWkzMlNoaWZ0ID49IDE2KQorICAgIHsKKyAgICAgICAgdWkzMlNoaWZ0ID0gdWkzMlNoaWZ0IC0gMTY7CisgICAgICAgIHVpMzJSZWdBZGRyICs9IDI7CisgICAgICAgIHVpMzJNYXNrID0gdWkzMk1hc2sgPj4gMTY7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSByZWdpc3Rlci4KKyAgICAvLworICAgIHVpMTZEYXRhID0gQXV4QWRpRGRpU2FmZVJlYWQodWkzMlJlZ0FkZHIsIDIpOworCisgICAgLy8KKyAgICAvLyBNYXNrIGRhdGEgYW5kIHNoaWZ0IGludG8gcGxhY2UuCisgICAgLy8KKyAgICB1aTE2RGF0YSAmPSB1aTMyTWFzazsKKyAgICB1aTE2RGF0YSA+Pj0gdWkzMlNoaWZ0OworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZGF0YS4KKyAgICAvLworICAgIHJldHVybih1aTE2RGF0YSk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZGkuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Yzc3YTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZGkuaApAQCAtMCwwICsxLDU5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGRkaS5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0wOSAxMjowNTowMiArMDIwMCAoTW9uLCAwOSBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjMxNQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBEREkgbWFzdGVyIGludGVyZmFjZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgYW5hbG9nX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBkZGlfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19ERElfSF9fCisjZGVmaW5lIF9fRERJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19kZGkuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYXV4X3NtcGguaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIERESTMyUmVnV3JpdGUgICAgICAgICAgICAgICAgICAgTk9ST01fRERJMzJSZWdXcml0ZQorICAgICNkZWZpbmUgRERJMTZCaXRXcml0ZSAgICAgICAgICAgICAgICAgICBOT1JPTV9EREkxNkJpdFdyaXRlCisgICAgI2RlZmluZSBEREkxNkJpdGZpZWxkV3JpdGUgICAgICAgICAgICAgIE5PUk9NX0RESTE2Qml0ZmllbGRXcml0ZQorICAgICNkZWZpbmUgRERJMTZCaXRSZWFkICAgICAgICAgICAgICAgICAgICBOT1JPTV9EREkxNkJpdFJlYWQKKyAgICAjZGVmaW5lIERESTE2Qml0ZmllbGRSZWFkICAgICAgICAgICAgICAgTk9ST01fRERJMTZCaXRmaWVsZFJlYWQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTnVtYmVyIG9mIHJlZ2lzdGVyIGluIHRoZSBEREkgc2xhdmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERESV9TTEFWRV9SRUdTICAgICAgICAgIDY0CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdGhhdCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIEFESSBzbGF2ZSBhbmQgbWFzdGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBERElfUFJPVEVDVCAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRERJX0FDSyAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV9TWU5DICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGVscGVyIGZ1bmN0aW9ucworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2FmZWx5IHdyaXRlIHRvIEFVWCBBREkvRERJIGludGVyZmFjZXMgdXNpbmcgYSBzZW1hcGhvcmUuCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSBuQWRkciBpcyB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKy8vISBccGFyYW0gbkRhdGEgaXMgdGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLgorLy8hIFxwYXJhbSBuU2l6ZSBpcyB0aGUgcmVnaXN0ZXIgYWNjZXNzIHNpemUgaW4gYnl0ZXMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorQXV4QWRpRGRpU2FmZVdyaXRlKHVpbnQzMl90IG5BZGRyLCB1aW50MzJfdCBuRGF0YSwgdWludDMyX3QgblNpemUpCit7CisgICAgLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZW1lbWJlciB3aGV0aGVyIHRvIHJlLWVuYWJsZQorICAgIGJvb2wgYklycUVuYWJsZWQgPSAhQ1BVY3BzaWQoKTsKKyAgICAvLyBBY3F1aXJlIHNlbWFwaG9yZSBmb3IgYWNjZXNzaW5nIEFESS9EREkgaW4gQVVYLCBwZXJmb3JtIGFjY2VzcywgcmVsZWFzZSBzZW1hcGhvcmUKKyAgICB3aGlsZSAoIUhXUkVHKEFVWF9TTVBIX0JBU0UgKyBBVVhfU01QSF9PX1NNUEgwKSk7CisgICAgc3dpdGNoIChuU2l6ZSkgeworICAgIGNhc2UgMTogICAgICAgICAgICAgSFdSRUdCKG5BZGRyKSA9ICh1aW50OF90KW5EYXRhOyBicmVhazsKKyAgICBjYXNlIDI6ICAgICAgICAgICAgIEhXUkVHSChuQWRkcikgPSAodWludDE2X3QpbkRhdGE7IGJyZWFrOworICAgIGNhc2UgNDogZGVmYXVsdDogICAgSFdSRUcobkFkZHIpICA9IG5EYXRhOyBicmVhazsKKyAgICB9CisgICAgSFdSRUcoQVVYX1NNUEhfQkFTRSArIEFVWF9TTVBIX09fU01QSDApID0gMTsKKyAgICAvLyBSZXN0b3JlIGludGVycnVwdCBlbmFibGUKKyAgICBpZiAoYklycUVuYWJsZWQpIHsKKyAgICAgICAgQ1BVY3BzaWUoKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNhZmVseSByZWFkIGZyb20gQVVYIEFESS9EREkgaW50ZXJmYWNlcyB1c2luZyBhIHNlbWFwaG9yZS4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIG5BZGRyIGlzIHRoZSByZWdpc3RlciBhZGRyZXNzLgorLy8hIFxwYXJhbSBuU2l6ZSBpcyB0aGUgcmVnaXN0ZXIgYWNjZXNzIHNpemUgaW4gYnl0ZXMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGRhdGEgcmVhZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0F1eEFkaURkaVNhZmVSZWFkKHVpbnQzMl90IG5BZGRyLCB1aW50MzJfdCBuU2l6ZSkKK3sKKyAgICB1aW50MzJfdCBuUmV0OworICAgIC8vIERpc2FibGUgaW50ZXJydXB0cyBhbmQgcmVtZW1iZXIgd2hldGhlciB0byByZS1lbmFibGUKKyAgICBib29sIGJJcnFFbmFibGVkID0gIUNQVWNwc2lkKCk7CisgICAgLy8gQWNxdWlyZSBzZW1hcGhvcmUgZm9yIGFjY2Vzc2luZyBBREkvRERJIGluIEFVWCwgcGVyZm9ybSBhY2Nlc3MsIHJlbGVhc2Ugc2VtYXBob3JlCisgICAgd2hpbGUgKCFIV1JFRyhBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCkpOworICAgIHN3aXRjaCAoblNpemUpIHsKKyAgICBjYXNlIDE6ICAgICAgICAgICAgIG5SZXQgPSBIV1JFR0IobkFkZHIpOyBicmVhazsKKyAgICBjYXNlIDI6ICAgICAgICAgICAgIG5SZXQgPSBIV1JFR0gobkFkZHIpOyBicmVhazsKKyAgICBjYXNlIDQ6IGRlZmF1bHQ6ICAgIG5SZXQgPSBIV1JFRyhuQWRkcik7IGJyZWFrOworICAgIH0KKyAgICBIV1JFRyhBVVhfU01QSF9CQVNFICsgQVVYX1NNUEhfT19TTVBIMCkgPSAxOworICAgIC8vIFJlc3RvcmUgaW50ZXJydXB0IGVuYWJsZQorICAgIGlmIChiSXJxRW5hYmxlZCkgeworICAgICAgICBDUFVjcHNpZSgpOworICAgIH0KKyAgICByZXR1cm4gblJldDsKK30KKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vIQorLy8hIFxicmllZiBDaGVjayBhIERESSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBEREkgcG9ydCBiYXNlIGFkZHJlc3MgaXMgdmFsaWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRERJIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vIQorLy8hIFxlbmRpbnRlcm5hbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitERElCYXNlVmFsaWQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgcmV0dXJuKHVpMzJCYXNlID09IEFVWF9EREkwX09TQ19CQVNFKTsKK30KKyNlbmRpZgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlYWQgdGhlIHZhbHVlIGluIGEgMzIgYml0IHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgYSByZWdpc3RlciBpbiB0aGUgYW5hbG9nIGRvbWFpbiBhbmQgcmV0dXJuCisvLyEgdGhlIHZhbHVlIGFzIGFuIFxjIHVpbnQzMl90LgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgRERJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgMzIgYml0IHJlZ2lzdGVyIHRvIHJlYWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIDMyIGJpdCB2YWx1ZSBvZiB0aGUgYW5hbG9nIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorRERJMzJSZWdSZWFkKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IERESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgcmVnaXN0ZXIgYW5kIHJldHVybiB0aGUgdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4gQXV4QWRpRGRpU2FmZVJlYWQodWkzMkJhc2UgKyB1aTMyUmVnLCA0KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHNwZWNpZmljIGJpdHMgaW4gYSBEREkgc2xhdmUgcmVnaXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGJpdHMgaW4gYSByZWdpc3RlciBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vIQorLy8hIFxub3RlIFRoaXMgb3BlcmF0aW9uIGlzIHdyaXRlIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIuCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBiaXRzIGluIHNwZWNpZmljIHJlZ2lzdGVyIGluIHRoZQorLy8hIERESSBzbGF2ZS4gT25seSBiaXRzIGluIHRoZSBzZWxlY3RlZCByZWdpc3RlciBhcmUgYWZmZWN0ZWQgYnkgdGhlCisvLyEgb3BlcmF0aW9uLgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgRERJIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgYmFzZSByZWdpc3RlciB0byBhc3NlcnQgdGhlIGJpdHMgaW4uCisvLyEgXHBhcmFtIHVpMzJWYWwgaXMgdGhlIDMyIGJpdCBvbmUtaG90IGVuY29kZWQgdmFsdWUgc3BlY2lmeWluZyB3aGljaAorLy8hIGJpdHMgdG8gc2V0IGluIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitEREkzMkJpdHNTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IERESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBEREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gRERJX09fU0VUOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0ICsgdWkzMlJlZywgdWkzMlZhbCwgNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFyIHNwZWNpZmljIGJpdHMgaW4gYSAzMiBiaXQgRERJIHJlZ2lzdGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIGJpdHMgaW4gYSByZWdpc3RlciBpbiB0aGUgYW5hbG9nIGRvbWFpbi4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIERESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIGJhc2UgcmVnaXN0ZXJzIHRvIGNsZWFyIHRoZSBiaXRzIGluLgorLy8hIFxwYXJhbSB1aTMyVmFsIGlzIHRoZSAzMiBiaXQgb25lLWhvdCBlbmNvZGVkIHZhbHVlIHNwZWNpZnlpbmcgd2hpY2gKKy8vISBiaXRzIHRvIGNsZWFyIGluIHRoZSByZWdpc3Rlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitEREkzMkJpdHNDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IERESV9TTEFWRV9SRUdTKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBEREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gRERJX09fQ0xSOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQgKyB1aTMyUmVnLCB1aTMyVmFsLCA0KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IGEgdmFsdWUgb24gYW55IDggYml0cyBpbnNpZGUgYSAzMiBiaXQgcmVnaXN0ZXIgaW4gdGhlIERESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGJ5dGUgKDggYml0IGFjY2VzcykgdG8gdGhlIERESSBzbGF2ZSByZWdpc3RlcnMuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB3cml0ZSBhbnkgdmFsdWUgaW4gdGhlIHJhbmdlIDAtNyBiaXRzIGFsaWduZWQgb24gYQorLy8hIGJ5dGUgYm91bmRhcnkuIEZ4LiBmb3Igd3JpdGluZyB0aGUgdmFsdWUgMGIxMDEgdG8gYml0cyAxLTMgc2V0CisvLyEgPHR0PnVpMTZWYWwgPSAweDBBPC90dD4gYW5kIDx0dD51aTE2TWFzayA9IDB4MEU8L3R0Pi4gQml0cyAwIGFuZCA1LTcgd2lsbAorLy8hIG5vdCBiZSBhZmZlY3RlZCBieSB0aGUgb3BlcmF0aW9uLCBhcyBsb25nIGFzIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgYXJlCisvLyEgbm90IHNldCBpbiB0aGUgXGMgdWkxNk1hc2suCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEREkgcG9ydC4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyB0aGUgTGVhc3QgU2lnbmlmaWNhbnQgUmVnaXN0ZXIgaW4gdGhlIERESSBzbGF2ZSB0aGF0CisvLyEgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGUgd3JpdGUgb3BlcmF0aW9uLgorLy8hIFxwYXJhbSB1aTMyQnl0ZSBpcyB0aGUgYnl0ZSBudW1iZXIgdG8gYWNjZXNzIHdpdGhpbiB0aGUgMzIgYml0IHJlZ2lzdGVyLgorLy8hIFxwYXJhbSB1aTE2TWFzayBpcyB0aGUgbWFzayBkZWZpbmluZyB3aGljaCBvZiB0aGUgOCBiaXRzIHRoYXQgc2hvdWxkIGJlCisvLyEgb3ZlcndyaXR0ZW4uIFRoZSBtYXNrIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgMTYgYml0cy4KKy8vISBccGFyYW0gdWkxNlZhbCBpcyB0aGUgdmFsdWUgdG8gd3JpdGUuIFRoZSB2YWx1ZSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyCisvLyEgaGFsZiBvZiB0aGUgMTYgYml0cy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitEREk4U2V0VmFsQml0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCB1aW50MzJfdCB1aTMyQnl0ZSwKKyAgICAgICAgICAgICAgdWludDE2X3QgdWkxNk1hc2ssIHVpbnQxNl90IHVpMTZWYWwpCit7CisgICAgdWludDMyX3QgdWkzMlJlZ09mZnNldDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChERElCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMlJlZyA8IERESV9TTEFWRV9SRUdTKTsKKyAgICBBU1NFUlQoISh1aTE2VmFsICYgMHhGRjAwKSk7CisgICAgQVNTRVJUKCEodWkxNk1hc2sgJiAweEZGMDApKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHVzZWQgZm9yIHNldHRpbmcgYml0cworICAgIC8vIGluIHRoZSBEREkgc2xhdmUuCisgICAgLy8KKyAgICB1aTMyUmVnT2Zmc2V0ID0gRERJX09fTUFTSzhCICsgKHVpMzJSZWcgPDwgMSkgKyAodWkzMkJ5dGUgPDwgMSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgYml0cy4KKyAgICAvLworICAgIEF1eEFkaURkaVNhZmVXcml0ZSh1aTMyQmFzZSArIHVpMzJSZWdPZmZzZXQsICh1aTE2TWFzayA8PCA4KSB8IHVpMTZWYWwsIDIpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgYSB2YWx1ZSBvbiBhbnkgMTYgYml0cyBpbnNpZGUgYSAzMiBiaXQgcmVnaXN0ZXIgYWxpZ25lZCBvbiBhCisvLyEgaGFsZi13b3JkIGJvdW5kYXJ5IGluIHRoZSBEREkgc2xhdmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyAxNiBiaXQgbWFza2VkIGFjY2VzcyB0byB0aGUgRERJIHNsYXZlIHJlZ2lzdGVycy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHdyaXRlIGFueSB2YWx1ZSBpbiB0aGUgcmFuZ2UgMC0xNSBiaXRzIGFsaWduZWQgb24gYQorLy8hIGhhbGYtd29yZCBib3VuZGFyeS4gRnguIGZvciB3cml0aW5nIHRoZSB2YWx1ZSAwYjEwMSB0byBiaXRzIDEtMyBzZXQKKy8vISA8dHQ+dWkzMlZhbCA9IDB4MDAwQTwvdHQ+IGFuZCA8dHQ+dWkzMk1hc2sgPSAweDAwMEU8L3R0Pi4gQml0cyAwIGFuZCA1LTE1IHdpbGwgbm90IGJlCisvLyEgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbiwgYXMgbG9uZyBhcyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBub3Qgc2V0CisvLyEgaW4gdGhlIFxjIHVpMzJNYXNrLgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRERJIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgcmVnaXN0ZXIgdG8gYWNjZXNzLgorLy8hIFxwYXJhbSBiV3JpdGVIaWdoIGRlZmluZXMgd2hpY2ggcGFydCBvZiB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUgaW4uCisvLyEgXHBhcmFtIHVpMzJNYXNrIGlzIHRoZSBtYXNrIGRlZmluaW5nIHdoaWNoIG9mIHRoZSAxNiBiaXQgdGhhdCBzaG91bGQgYmUKKy8vISBvdmVyd3JpdHRlbi4gVGhlIG1hc2sgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlciBoYWxmIG9mIHRoZSAzMiBiaXRzLgorLy8hIFxwYXJhbSB1aTMyVmFsIGlzIHRoZSB2YWx1ZSB0byB3cml0ZS4gVGhlIHZhbHVlIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIKKy8vISBoYWxmIG9mIHRoZSAzMiBiaXRzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0RESTE2U2V0VmFsQml0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUmVnLCBib29sIGJXcml0ZUhpZ2gsCisgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTWFzaywgdWludDMyX3QgdWkzMlZhbCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnT2Zmc2V0OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKERESUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyUmVnIDwgRERJX1NMQVZFX1JFR1MpOworICAgIEFTU0VSVCghKHVpMzJWYWwgJiAweEZGRkYwMDAwKSk7CisgICAgQVNTRVJUKCEodWkzMk1hc2sgJiAweEZGRkYwMDAwKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY29ycmVjdCBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB1c2VkIGZvciBzZXR0aW5nIGJpdHMKKyAgICAvLyBpbiB0aGUgRERJIHNsYXZlLgorICAgIC8vCisgICAgdWkzMlJlZ09mZnNldCA9IERESV9PX01BU0sxNkIgKyAodWkzMlJlZyA8PCAxKSArIChiV3JpdGVIaWdoID8gNCA6IDApOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGJpdHMuCisgICAgLy8KKyAgICBBdXhBZGlEZGlTYWZlV3JpdGUodWkzMkJhc2UgKyB1aTMyUmVnT2Zmc2V0LCAodWkzMk1hc2sgPDwgMTYpIHwgdWkzMlZhbCwgNCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIGEgMzIgYml0IHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gdGhlIERESSBzbGF2ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBhIHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gdGhlIGFuYWxvZworLy8hIGRvbWFpbi4KKy8vIQorLy8hIFxub3RlIFRoaXMgb3BlcmF0aW9uIGlzIHdyaXRlIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIuIE5vCisvLyEgY29uc2VydmF0aW9uIG9mIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBrZXB0IChpLmUuIHRoaXMKKy8vISBpcyBOT1QgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHJlZ2lzdGVyKS4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIERESSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIHdyaXRlLgorLy8hIFxwYXJhbSB1aTMyVmFsIGlzIHRoZSAzMiBiaXQgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgRERJMzJSZWdXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywgdWludDMyX3QgdWkzMlZhbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIGEgc2luZ2xlIGJpdCB1c2luZyBhIDE2LWJpdCBtYXNrYWJsZSB3cml0ZS4KKy8vIQorLy8hIEEgJzEnIGlzIHdyaXR0ZW4gdG8gdGhlIGJpdCBpZiBcYyB1aTMyV3JEYXRhIGlzIG5vbi16ZXJvLCBlbHNlIGEgJzAnIGlzIHdyaXR0ZW4uCisvLyEKKy8vISBcbm90ZSBCb3RoIHRoZSBBVVggbW9kdWxlIGFuZCB0aGUgY2xvY2sgZm9yIHRoZSBBVVggU01QSCBtb2R1bGUgbXVzdCBiZQorLy8hIGVuYWJsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEREkgcG9ydC4KKy8vISBccGFyYW0gdWkzMlJlZyBpcyByZWdpc3RlciB0byBhY2Nlc3MuCisvLyEgXHBhcmFtIHVpMzJNYXNrIGlzIHRoZSBtYXNrIGRlZmluaW5nIHdoaWNoIG9mIHRoZSAxNiBiaXQgdGhhdCBzaG91bGQgYmUKKy8vISBvdmVyd3JpdHRlbi4gVGhlIG1hc2sgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlciBoYWxmIG9mIHRoZSAzMiBiaXRzLgorLy8hIFxwYXJhbSB1aTMyV3JEYXRhIGlzIHRoZSB2YWx1ZSB0byB3cml0ZS4gVGhlIHZhbHVlIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgbG93ZXIKKy8vISBoYWxmIG9mIHRoZSAzMiBiaXRzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgRERJMTZCaXRXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1hc2ssIHVpbnQzMl90IHVpMzJXckRhdGEpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlIGEgYml0IGZpZWxkIHZpYSB0aGUgRERJIHVzaW5nIDE2LWJpdCBtYXNrYWJsZSB3cml0ZS4KKy8vIQorLy8hIFJlcXVpcmVzIHRoYXQgYml0ZmllbGRzIG5vdCBzcGFjZSB0aGUgbG93L2hpZ2ggd29yZCBib3VuZGFyeS4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIERESSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyUmVnIGlzIHJlZ2lzdGVyIHRvIGFjY2Vzcy4KKy8vISBccGFyYW0gdWkzMk1hc2sgaXMgdGhlIG1hc2sgZGVmaW5pbmcgd2hpY2ggb2YgdGhlIDE2IGJpdHMgdGhhdCBzaG91bGQgYmUKKy8vISBvdmVyd3JpdHRlbi4gVGhlIG1hc2sgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBsb3dlciBoYWxmIG9mIHRoZSAzMiBiaXRzLgorLy8hIFxwYXJhbSB1aTMyU2hpZnQKKy8vISBccGFyYW0gdWkzMkRhdGEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIERESTE2Qml0ZmllbGRXcml0ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTWFzaywgdWludDMyX3QgdWkzMlNoaWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHVpMzJEYXRhKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZCBhIGJpdCB2aWEgdGhlIERESSB1c2luZyAxNi1iaXQgcmVhZC4KKy8vIQorLy8hIFxub3RlIEJvdGggdGhlIEFVWCBtb2R1bGUgYW5kIHRoZSBjbG9jayBmb3IgdGhlIEFVWCBTTVBIIG1vZHVsZSBtdXN0IGJlCisvLyEgZW5hYmxlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIERESSBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgdGhlIHJlZ2lzdGVyIHRvIHJlYWQuCisvLyEgXHBhcmFtIHVpMzJNYXNrIGRlZmluZXMgdGhlIGJpdCB3aGljaCBzaG91bGQgYmUgcmVhZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhIHplcm8gaWYgYml0IHNlbGVjdGVkIGJ5IG1hc2sgaXMgJzAnLiBFbHNlIHJldHVybnMgdGhlIG1hc2suCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQxNl90IERESTE2Qml0UmVhZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1hc2spOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWFkIGEgYml0ZmllbGQgdmlhIHRoZSBEREkgdXNpbmcgMTYtYml0IHJlYWQuCisvLyEKKy8vISBSZXF1aXJlcyB0aGF0IGJpdCBmaWVsZHMgZG8gbm90IHNwYWNlIHRoZSBsb3cvaGlnaCB3b3JkIGJvdW5kYXJ5LgorLy8hCisvLyEgXG5vdGUgQm90aCB0aGUgQVVYIG1vZHVsZSBhbmQgdGhlIGNsb2NrIGZvciB0aGUgQVVYIFNNUEggbW9kdWxlIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgRERJIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJSZWcgaXMgcmVnaXN0ZXIgdG8gYWNjZXNzLgorLy8hIFxwYXJhbSB1aTMyTWFzayBpcyB0aGUgbWFzayBkZWZpbmluZyB3aGljaCBvZiB0aGUgMTYgYml0cyB0aGF0IHNob3VsZCBiZQorLy8hIG92ZXJ3cml0dGVuLiBUaGUgbWFzayBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGxvd2VyIGhhbGYgb2YgdGhlIDMyIGJpdHMuCisvLyEgXHBhcmFtIHVpMzJTaGlmdCBkZWZpbmVzIHRoZSByZXF1aXJlZCBzaGlmdCBvZiB0aGUgZGF0YSB0byBhbGlnbiB3aXRoIGJpdCAwLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGRhdGEgYWxpZ25lZCB0byBiaXQgMC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDE2X3QgRERJMTZCaXRmaWVsZFJlYWQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1hc2ssIHVpbnQzMl90IHVpMzJTaGlmdCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0RESTMyUmVnV3JpdGUKKyAgICAgICAgI3VuZGVmICBEREkzMlJlZ1dyaXRlCisgICAgICAgICNkZWZpbmUgRERJMzJSZWdXcml0ZSAgICAgICAgICAgICAgICAgICBST01fRERJMzJSZWdXcml0ZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRERJMTZCaXRXcml0ZQorICAgICAgICAjdW5kZWYgIERESTE2Qml0V3JpdGUKKyAgICAgICAgI2RlZmluZSBEREkxNkJpdFdyaXRlICAgICAgICAgICAgICAgICAgIFJPTV9EREkxNkJpdFdyaXRlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9EREkxNkJpdGZpZWxkV3JpdGUKKyAgICAgICAgI3VuZGVmICBEREkxNkJpdGZpZWxkV3JpdGUKKyAgICAgICAgI2RlZmluZSBEREkxNkJpdGZpZWxkV3JpdGUgICAgICAgICAgICAgIFJPTV9EREkxNkJpdGZpZWxkV3JpdGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0RESTE2Qml0UmVhZAorICAgICAgICAjdW5kZWYgIERESTE2Qml0UmVhZAorICAgICAgICAjZGVmaW5lIERESTE2Qml0UmVhZCAgICAgICAgICAgICAgICAgICAgUk9NX0RESTE2Qml0UmVhZAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRERJMTZCaXRmaWVsZFJlYWQKKyAgICAgICAgI3VuZGVmICBEREkxNkJpdGZpZWxkUmVhZAorICAgICAgICAjZGVmaW5lIERESTE2Qml0ZmllbGRSZWFkICAgICAgICAgICAgICAgUk9NX0RESTE2Qml0ZmllbGRSZWFkCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0RESV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZGRpX2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMWU1MzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZGlfZG9jLmgKQEAgLTAsMCArMSw3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGRkaV9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgZGRpX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2RkaSBJbnRyb2R1Y3Rpb24KKy8vISBcbgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX2RkaV9hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBXcml0ZToKKy8vISAtIERpcmVjdCAoYWxsIGJpdHMpOgorLy8hICAgLSBccmVmIERESTMyUmVnV3JpdGUoKQorLy8hIC0gU2V0IGluZGl2aWR1YWwgYml0czoKKy8vISAgIC0gXHJlZiBEREkzMkJpdHNTZXQoKQorLy8hIC0gQ2xlYXIgaW5kaXZpZHVhbCBiaXRzOgorLy8hICAgLSBccmVmIERESTMyQml0c0NsZWFyKCkKKy8vISAtIE1hc2tlZDoKKy8vISAgIC0gXHJlZiBEREk4U2V0VmFsQml0KCkKKy8vISAgIC0gXHJlZiBEREkxNlNldFZhbEJpdCgpCisvLyEgLSBTcGVjaWFsIGZ1bmN0aW9ucyB1c2luZyBtYXNrZWQgd3JpdGU6CisvLyEgICAtIFxyZWYgRERJMTZCaXRXcml0ZSgpCisvLyEgICAtIFxyZWYgRERJMTZCaXRmaWVsZFdyaXRlKCkKKy8vIQorLy8hIFJlYWQ6CisvLyEgLSBEaXJlY3QgKGFsbCBiaXRzKToKKy8vISAgIC0gXHJlZiBEREkzMlJlZ1JlYWQoKQorLy8hIC0gU3BlY2lhbCBmdW5jdGlvbnMgdXNpbmcgbWFza2VkIHJlYWQ6CisvLyEgICAtIFxyZWYgRERJMTZCaXRSZWFkKCkKKy8vISAgIC0gXHJlZiBEREkxNkJpdGZpZWxkUmVhZCgpCisvLyEKKy8vISBBVVggYWNjZXNzIHVzaW5nIHNlbWFwaG9yZXMgKHVzZWQgYnkgYm90aCBBREkgYW5kIERESSBBUElzIHdoZW4gbmVjZXNzYXJ5KToKKy8vISAtIFxyZWYgQXV4QWRpRGRpU2FmZVJlYWQoKQorLy8hIC0gXHJlZiBBdXhBZGlEZGlTYWZlV3JpdGUoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RlYnVnLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Mjg1YjQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZWJ1Zy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkZWJ1Zy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wNy0xNiAxMjoxMjowNCArMDIwMCAoVGh1LCAxNiBKdWwgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDE1MQorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIERlYnVnIGZ1bmN0aW9uYWxpdHkgKE5CLiBUaGlzIGlzIGEgc3R1YiB3aGljaAorKiAgICAgICAgICAgICAgICAgIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBpbiBhIHJlbGVhc2UpLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIQorLy8hIEZ1bmN0aW9uIHN0dWIgZm9yIGFsbG93aW5nIGNvbXBpbGUgd2l0aCBEUklWRVJMSUJfREVCVUcgZmxhZyBhc3NlcnRlZC4KKy8vIQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK19fZXJyb3JfXyhjaGFyICpwY0ZpbGVuYW1lLCB1aW50MzJfdCB1aTMyTGluZSkKK3sKKyAgICAvLyBFcnJvciBjYXRjaGluZy4KKyAgICAvLyBVc2VyIGNhbiBpbXBsZW1lbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nIGZvciBmYWlsaW5nIEFTU0VSVHMuCisgICAgLy8gU2V0dGluZyBicmVha3BvaW50IGhlcmUgYWxsb3dzIHRyYWNpbmcgb2YgdGhlIGZhaWxpbmcgQVNTRVJULgorICAgICh2b2lkKXBjRmlsZW5hbWU7CisgICAgKHZvaWQpdWkzMkxpbmU7CisgICAgd2hpbGUoIHRydWUgKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RlYnVnLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0M2I0OWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9kZWJ1Zy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkZWJ1Zy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wNy0xNiAxMjoxMjowNCArMDIwMCAoVGh1LCAxNiBKdWwgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDE1MQorKgorKiAgRGVzY3JpcHRpb246ICAgIE1hY3JvcyBmb3IgYXNzaXN0aW5nIGRlYnVnIG9mIHRoZSBkcml2ZXIgbGlicmFyeS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGRlYnVnX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fREVCVUdfSF9fCisjZGVmaW5lIF9fREVCVUdfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBQcm90b3R5cGUgZm9yIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGFuIGludmFsaWQgYXJndW1lbnQgaXMgcGFzc2VkCisvLyB0byBhbiBBUEkuICBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIGRvaW5nIGEgRFJJVkVSTElCX0RFQlVHIGJ1aWxkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIF9fZXJyb3JfXyhjaGFyICpwY0ZpbGVuYW1lLCB1aW50MzJfdCB1aTMyTGluZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgQVNTRVJUIG1hY3JvLCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgYXNzZXJ0aW9uIGNoZWNraW5nLiBUeXBpY2FsbHksIHRoaXMKKy8vIHdpbGwgYmUgZm9yIHByb2NlZHVyZSBhcmd1bWVudHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIERSSVZFUkxJQl9ERUJVRworI2RlZmluZSBBU1NFUlQoZXhwcikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoZXhwcikpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycm9yX18oX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgfQorCisjZWxzZQorI2RlZmluZSBBU1NFUlQoZXhwcikKKyNlbmRpZgorCisjZW5kaWYgLy8gX19ERUJVR19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZHJpdmVybGliX3JlbGVhc2UuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3YjhiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmMKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGRyaXZlcmxpYl9yZWxlYXNlLmMKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZTogMjAxNS0wMy0xMSAxMToyNTo0NiArMDEwMCAoV2VkLCAxMSBNYXIgMjAxNSkgJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbjogNDI5MzIgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIFByb3ZpZGVzIG1hY3JvcyBmb3IgZW5zdXJpbmcgdGhhdCBhIHNwZWNmaWMgcmVsZWFzZSBvZgorKiAgICAgICAgICAgICAgICAgIERyaXZlckxpYiBpcyB1c2VkLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZHJpdmVybGliX3JlbGVhc2UuaD4KKworCisKKworLy8vIERlY2xhcmUgdGhlIGN1cnJlbnQgRHJpdmVyTGliIHJlbGVhc2UKK0RSSVZFUkxJQl9ERUNMQVJFX1JFTEVBU0UoMCwgNDY1OTMpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZHJpdmVybGliX3JlbGVhc2UuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliNTkzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2RyaXZlcmxpYl9yZWxlYXNlLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBkcml2ZXJsaWJfcmVsZWFzZS5oCisqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDQ0MTUxICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBQcm92aWRlcyBtYWNyb3MgZm9yIGVuc3VyaW5nIHRoYXQgYSBzcGVjZmljIHJlbGVhc2Ugb2YKKyogICAgICAgICAgICAgICAgICBEcml2ZXJMaWIgaXMgdXNlZC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGRyaXZlcmxpYl9yZWxlYXNlX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fRFJJVkVSTElCX1JFTEVBU0VfSF9fCisjZGVmaW5lIF9fRFJJVkVSTElCX1JFTEVBU0VfSF9fCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisKKworCisvLy8gRHJpdmVyTGliIHJlbGVhc2UgZ3JvdXAgbnVtYmVyCisjZGVmaW5lIERSSVZFUkxJQl9SRUxFQVNFX0dST1VQICAgMAorLy8vIERyaXZlckxpYiByZWxlYXNlIGJ1aWxkIG51bWJlcgorI2RlZmluZSBEUklWRVJMSUJfUkVMRUFTRV9CVUlMRCAgIDQ2NTkzCisKKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBtYWNybyBpcyBjYWxsZWQgaW50ZXJuYWxseSBmcm9tIHdpdGhpbiBEcml2ZXJMaWIgdG8gZGVjbGFyZSB0aGUKKy8vISBEcml2ZXJMaWIgcmVsZWFzZSBsb2NraW5nIG9iamVjdDoKKy8vISBccGFyYW0gZ3JvdXAgaXMgdGhlIERyaXZlckxpYiByZWxlYXNlIGdyb3VwIG51bWJlci4KKy8vISBccGFyYW0gYnVpbGQgaXMgdGhlIERyaXZlckxpYiByZWxlYXNlIGJ1aWxkIG51bWJlci4KKy8vIQorLy8hIFRoaXMgbWFjcm8gc2hhbGwgbm90IGJlIGNhbGxlZCBpbiB0aGUgYXBwbGljYXRpb24gdW5sZXNzIHRoZSBpbnRlbnRpb24gaXMKKy8vISB0byBieXBhc3MgdGhlIHJlbGVhc2UgbG9ja2luZyAoYXQgb3duIHJpc2spLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRFJJVkVSTElCX0RFQ0xBUkVfUkVMRUFTRShncm91cCwgYnVpbGQpIFwKKyAgICBjb25zdCB2b2xhdGlsZSB1aW50OF90IGRyaXZlcmxpYl9yZWxlYXNlXyMjZ3JvdXAjI18jI2J1aWxkCisKKy8vLyBFeHRlcm5hbCBkZWNsYXJhdGlvbiBvZiB0aGUgRHJpdmVyTGliIHJlbGVhc2UgbG9ja2luZyBvYmplY3QKK2V4dGVybiBEUklWRVJMSUJfREVDTEFSRV9SRUxFQVNFKDAsIDQ2NTkzKTsKKworCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIG1hY3JvIHNoYWxsIGJlIGNhbGxlZCBvbmNlIGZyb20gd2l0aGluIGEgZnVuY3Rpb24gb2YgYSBwcmVjb21waWxlZAorLy8hIHNvZnR3YXJlIGRlbGl2ZXJhYmxlIHRvIGxvY2sgdGhlIGRlbGl2ZXJhYmxlIHRvIGEgc3BlY2lmaWMgRHJpdmVyTGliCisvLyEgcmVsZWFzZS4gSXQgaXMgZXNzZW50aWFsIHRoYXQgdGhlIGNhbGwgaXMgbWFkZSBmcm9tIGNvZGUgdGhhdCBpcyBub3QKKy8vISBvcHRpbWl6ZWQgYXdheS4KKy8vIQorLy8hIFRoaXMgbWFjcm8gbG9ja3MgdG8gYSBzcGVjaWZpYyBEcml2ZXJMaWIgcmVsZWFzZToKKy8vISBccGFyYW0gZ3JvdXAgaXMgdGhlIERyaXZlckxpYiByZWxlYXNlIGdyb3VwIG51bWJlci4KKy8vISBccGFyYW0gYnVpbGQgaXMgdGhlIERyaXZlckxpYiByZWxlYXNlIGJ1aWxkIG51bWJlci4KKy8vIQorLy8hIElmIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBwcmVjb21waWxlZCBkZWxpdmVyYWJsZSB3aXRoIGEgZGlmZmVyZW50IHJlbGVhc2UKKy8vISBvZiBEcml2ZXJMaWIsIGEgbGlua2VyIGVycm9yIHdpbGwgYmUgcHJvZHVjZWQsIHN0YXRpbmcgdGhhdAorLy8hICJkcml2ZXJsaWJfcmVsZWFzZV94eF95eXl5eSBpcyB1bmRlZmluZWQiIG9yIHNpbWlsYXIuCisvLyEKKy8vISBUbyBvdmVycmlkZSB0aGUgY2hlY2ssIGZvciBleGFtcGxlIHdoZW4gdXBncmFkaW5nIERyaXZlckxpYiBidXQgbm90IHRoZQorLy8hIHByZWNvbXBpbGVkIGRlbGl2ZXJhYmxlcywgb3Igd2hlbiBtaXhpbmcgcHJlY29tcGlsZWQgZGVsaXZlcmFibGVzLAorLy8hIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgbWF5IChhdCBvd24gcmlzaykgZGVjbGFyZSB0aGUgbWlzc2luZyBEcml2ZXJMaWIKKy8vISByZWxlYXNlIHVzaW5nIHRoZSBccmVmIERSSVZFUkxJQl9ERUNMQVJFX1JFTEVBU0UoKSBtYWNyby4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERSSVZFUkxJQl9BU1NFUlRfUkVMRUFTRShncm91cCwgYnVpbGQpIFwKKyAgICAoZHJpdmVybGliX3JlbGVhc2VfIyNncm91cCMjXyMjYnVpbGQpCisKKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBtYWNybyBzaGFsbCBiZSBjYWxsZWQgb25jZSBmcm9tIHdpdGhpbiBhIGZ1bmN0aW9uIG9mIGEgcHJlY29tcGlsZWQKKy8vISBzb2Z0d2FyZSBkZWxpdmVyYWJsZSB0byBsb2NrIHRoZSBkZWxpdmVyYWJsZSB0byBhIHNwZWNpZmljIERyaXZlckxpYgorLy8hIHJlbGVhc2UuIEl0IGlzIGVzc2VudGlhbCB0aGF0IHRoZSBjYWxsIGlzIG1hZGUgZnJvbSBjb2RlIHRoYXQgaXMgbm90CisvLyEgb3B0aW1pemVkIGF3YXkuCisvLyEKKy8vISBUaGlzIG1hY3JvIGxvY2tzIHRvIHRoZSBjdXJyZW50IERyaXZlckxpYiByZWxlYXNlIHVzZWQgYXQgY29tcGlsZS10aW1lLgorLy8hCisvLyEgSWYgYXR0ZW1wdGluZyB0byB1c2UgdGhlIHByZWNvbXBpbGVkIGRlbGl2ZXJhYmxlIHdpdGggYSBkaWZmZXJlbnQgcmVsZWFzZQorLy8hIG9mIERyaXZlckxpYiwgYSBsaW5rZXIgZXJyb3Igd2lsbCBiZSBwcm9kdWNlZCwgc3RhdGluZyB0aGF0CisvLyEgImRyaXZlcmxpYl9yZWxlYXNlX3h4X3l5eXl5IGlzIHVuZGVmaW5lZCIgb3Igc2ltaWxhci4KKy8vIQorLy8hIFRvIG92ZXJyaWRlIHRoZSBjaGVjaywgZm9yIGV4YW1wbGUgd2hlbiB1cGdyYWRpbmcgRHJpdmVyTGliIGJ1dCBub3QgdGhlCisvLyEgcHJlY29tcGlsZWQgZGVsaXZlcmFibGVzLCBvciB3aGVuIG1peGluZyBwcmVjb21waWxlZCBkZWxpdmVyYWJsZXMsCisvLyEgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBtYXkgKGF0IG93biByaXNrKSBkZWNsYXJlIHRoZSBtaXNzaW5nIERyaXZlckxpYgorLy8hIHJlbGVhc2UgdXNpbmcgdGhlIFxyZWYgRFJJVkVSTElCX0RFQ0xBUkVfUkVMRUFTRSgpIG1hY3JvLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRFJJVkVSTElCX0FTU0VSVF9DVVJSX1JFTEVBU0UoKSBcCisgICAgRFJJVkVSTElCX0FTU0VSVF9SRUxFQVNFKDAsIDQ2NTkzKQorCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19EUklWRVJMSUJfUkVMRUFTRV9IX18KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ldmVudC5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDkxYTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnQuYwpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZXZlbnQuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBFdmVudCBGYWJyaWMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2V2ZW50Lmg+CisKKy8vIFNlZSBldmVudC5oIGZvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2Njc0NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2V2ZW50LmgKQEAgLTAsMCArMSwyNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBldmVudC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wNy0xNiAxMjoxMjowNCArMDIwMCAoVGh1LCAxNiBKdWwgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDE1MQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBFdmVudCBIYW5kbGVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBldmVudF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0VWRU5UX0hfXworI2RlZmluZSBfX0VWRU5UX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19ldmVudC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25uZWN0cyBhbiBldmVudCB0byBhbiBldmVudCBzdWJzY3JpYmVyIHZpYSBFdmVudCBGYWJyaWMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbm5lY3RzIGV2ZW50IHNvdXJjZXMgdG8gZXZlbnQgc3Vic2NyaWJlcnMuCisvLyEKKy8vISBJdCBpcyBub3QgcG9zc2libGUgdG8gcmVhZCBldmVudCBzdGF0dXMgaW4gdGhpcyBtb2R1bGUgKGV4Y2VwdCBzb2Z0d2FyZSBldmVudHMpLgorLy8hIEV2ZW50IHN0YXR1cyBtdXN0IGJlIHJlYWQgaW4gdGhlIG1vZHVsZSB0aGF0IGNvbnRhaW5zIHRoZSBldmVudCBzb3VyY2UuIEhvdyBhCisvLyEgc3BlY2lmaWMgZXZlbnQgc3Vic2NyaWJlciByZWFjdHMgdG8gYW4gZXZlbnQgaXMgY29uZmlndXJlZCBhbmQgZG9jdW1lbnRlZCBpbgorLy8hIHRoZSByZXNwZWN0aXZlIG1vZHVsZXMuCisvLyEKKy8vISBGb3IgYSBmdWxsIGxpc3Qgb2YgY29uZmlndXJhYmxlIGFuZCBjb25zdGFudCBtYXBwZWQgZXZlbnQgc291cmNlcyB0byBldmVudAorLy8hIHN1YnNjcmliZXJzIHNlZSB0aGUgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGZvcgorLy8hIDxhIGhyZWY9Ii4uL3JlZ2lzdGVyX2Rlc2NyaXB0aW9ucy9DUFVfTU1BUC9FVkVOVC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+RXZlbnQgRmFicmljPC9hPi4KKy8vIQorLy8hIERlZmluZXMgZm9yIGV2ZW50IHN1YnNjcmliZXIgYXJndW1lbnQgKFxjIHVpMzJFdmVudFN1YnNjcmliZXIpIGhhdmUgdGhlIGZvcm1hdDoKKy8vISAtIFx0aV9jb2Rle0VWRU5UX09fW3N1YnNjcmliZXJfbmFtZV19CisvLyEKKy8vISBEZWZpbmVzIGZvciBldmVudCBzb3VyY2UgYXJndW1lbnQgKFxjIHVpMzJFdmVudFNvdXJjZSkgbXVzdCBoYXZlIHRoZQorLy8hIGZvbGxvd2luZyBmb3JtYXQgd2hlcmUgdmFsaWQgXGMgZXZlbnRfZW51bSB2YWx1ZXMgYXJlIGZvdW5kIGluIHRoZQorLy8hIHJlZ2lzdGVyIGRlc2NyaXB0aW9uIDoKKy8vISAtIFx0aV9jb2Rle0VWRU5UX1tzdWJzY3JpYmVyX25hbWVdX0VWX1tldmVudF9lbnVtXX0KKy8vIQorLy8hIEV4YW1wbGVzIG9mIHZhbGlkIGRlZmluZXMgZm9yIFxjIHVpMzJFdmVudFNvdXJjZToKKy8vISAtIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9URENfRE9ORQorLy8hIC0gRVZFTlRfUkZDU0VMOV9FVl9BVVhfQ09NUEEKKy8vISAtIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BT05fUlRDX1VQRAorLy8hCisvLyEgXG5vdGUgRWFjaCBldmVudCBzdWJzY3JpYmVyIGNhbiBvbmx5IHJlY2VpdmUgYSBzdWItc2V0IG9mIHRoZSBldmVudCBzb3VyY2VzIQorLy8hCisvLyEgXG5vdGUgU3dpdGNoaW5nIHRoZSBldmVudCBzb3VyY2UgaXMgbm90IGdsaXRjaCBmcmVlLCBzbyBpdCBpcyBpbXBlcmF0aXZlCisvLyEgdGhhdCB0aGUgc3Vic2NyaWJlciBpcyBkaXNhYmxlZCBmb3IgaW50ZXJydXB0cyB3aGVuIHN3aXRjaGluZyB0aGUgZXZlbnQKKy8vISBzb3VyY2UuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgbm90IGRpc2FibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJFdmVudFN1YnNjcmliZXIgaXMgdGhlIFxiIGNvbmZpZ3VyYWJsZSBldmVudCBzdWJzY3JpYmVyIHRvIHJlY2VpdmUgdGhlIGV2ZW50LgorLy8hIENsaWNrIHRoZSBldmVudCBzdWJzY3JpYmVyIHRvIHNlZSB0aGUgbGlzdCBvZiB2YWxpZCBldmVudCBzb3VyY2VzIGluIHRoZQorLy8hIHJlZ2lzdGVyIGRlc2NyaXB0aW9uLgorLy8hIC0gRVZFTlRfT19DUFVJUlFTRUwzMCAgOiBTeXN0ZW0gQ1BVIGludGVycnVwdCAzMAorLy8hIC0gRVZFTlRfT19SRkNTRUw5ICAgICAgOiBSRiBDb3JlIGV2ZW50IDkKKy8vISAtIEVWRU5UX09fR1BUMEFDQVBUU0VMIDogR1BUIDBBIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUMEJDQVBUU0VMIDogR1BUIDBCIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUMUFDQVBUU0VMIDogR1BUIDFBIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUMUJDQVBUU0VMIDogR1BUIDFCIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUMkFDQVBUU0VMIDogR1BUIDJBIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUMkJDQVBUU0VMIDogR1BUIDJCIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUM0FDQVBUU0VMIDogR1BUIDNBIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fR1BUM0JDQVBUU0VMIDogR1BUIDNCIGNhcHR1cmUgZXZlbnQKKy8vISAtIEVWRU5UX09fVURNQUNIOVNTRUwgIDogdURNQSBjaGFubmVsIDkgc2luZ2xlIHJlcXVlc3QKKy8vISAtIEVWRU5UX09fVURNQUNIOUJTRUwgIDogdURNQSBjaGFubmVsIDkgYnVyc3QgcmVxdWVzdAorLy8hIC0gRVZFTlRfT19VRE1BQ0gxMFNTRUwgOiB1RE1BIGNoYW5uZWwgMTAgc2luZ2xlIHJlcXVlc3QKKy8vISAtIEVWRU5UX09fVURNQUNIMTBCU0VMIDogdURNQSBjaGFubmVsIDEwIGJ1cnN0IHJlcXVlc3QKKy8vISAtIEVWRU5UX09fVURNQUNIMTFTU0VMIDogdURNQSBjaGFubmVsIDExIHNpbmdsZSByZXF1ZXN0CisvLyEgLSBFVkVOVF9PX1VETUFDSDExQlNFTCA6IHVETUEgY2hhbm5lbCAxMSBidXJzdCByZXF1ZXN0CisvLyEgLSBFVkVOVF9PX1VETUFDSDEyU1NFTCA6IHVETUEgY2hhbm5lbCAxMiBzaW5nbGUgcmVxdWVzdAorLy8hIC0gRVZFTlRfT19VRE1BQ0gxMkJTRUwgOiB1RE1BIGNoYW5uZWwgMTIgYnVyc3QgcmVxdWVzdAorLy8hIC0gRVZFTlRfT19VRE1BQ0gxNEJTRUwgOiB1RE1BIGNoYW5uZWwgMTQgc2luZ2xlIHJlcXVlc3QKKy8vISAtIEVWRU5UX09fQVVYU0VMMCAgICAgIDogQVVYCisvLyEgLSBFVkVOVF9PX0kyU1NUTVBTRUwwICA6IEkyUworLy8hIC0gRVZFTlRfT19GUlpTRUwwICAgICAgOiBGcmVlemUgbW9kdWxlcyAoc29tZSBtb2R1bGVzIGNhbiBmcmVlemUgb24gQ1BVIEhhbHQpCisvLyEgXHBhcmFtIHVpMzJFdmVudFNvdXJjZSBpcyB0aGUgc3BlY2lmaWMgZXZlbnQgdGhhdCBtdXN0IGJlIGFjdGVkIHVwb24uCisvLyEgLSBGb3JtYXQ6IFx0aV9jb2Rle0VWRU5UX1tzdWJzY3JpYmVyX25hbWVdX0VWX1tldmVudF9lbnVtXX0gKHNlZSBleHBsYW5hdGlvbiBhYm92ZSkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitFdmVudFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJFdmVudFN1YnNjcmliZXIsIHVpbnQzMl90IHVpMzJFdmVudFNvdXJjZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVCgoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19DUFVJUlFTRUwzMCAgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19SRkNTRUw5ICAgICAgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQwQUNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQwQkNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQxQUNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQxQkNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQyQUNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQyQkNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQzQUNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19HUFQzQkNBUFRTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0g5U1NFTCAgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0g5QlNFTCAgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxMFNTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxMEJTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxMVNTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxMUJTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxMlNTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxMkJTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19VRE1BQ0gxNEJTRUwgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19BVVhTRUwwICAgICAgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19JMlNTVE1QU0VMMCAgKSB8fAorICAgICAgICAgICAoIHVpMzJFdmVudFN1YnNjcmliZXIgPT0gRVZFTlRfT19GUlpTRUwwICAgICAgKSApOworCisgICAgLy8gTWFwIHRoZSBldmVudCBzb3VyY2UgdG8gdGhlIGV2ZW50IHN1YnNjcmliZXIKKyAgICBIV1JFRyhFVkVOVF9CQVNFICsgdWkzMkV2ZW50U3Vic2NyaWJlcikgPSB1aTMyRXZlbnRTb3VyY2U7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgc29mdHdhcmUgZXZlbnQuCisvLyEKKy8vISBTZXR0aW5nIGEgc29mdHdhcmUgZXZlbnQgdHJpZ2dlcnMgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSB3YXMgMCBiZWZvcmUuCisvLyEKKy8vISBcbm90ZSBUaGUgc29mdHdhcmUgZXZlbnQgbXVzdCBiZSBjbGVhcmVkIG1hbnVhbGx5IGFmdGVyIHRoZSBldmVudCBoYXMKKy8vISB0cmlnZ2VyZWQgdGhlIGV2ZW50IHN1YnNjcmliZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMlN3RXZlbnQgaXMgdGhlIHNvZnR3YXJlIGV2ZW50IG51bWJlci4KKy8vISAtIDAgOiBTVyBFdmVudCAwCisvLyEgLSAxIDogU1cgRXZlbnQgMQorLy8hIC0gMiA6IFNXIEV2ZW50IDIKKy8vISAtIDMgOiBTVyBFdmVudCAzCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEV2ZW50U3dFdmVudENsZWFyKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRXZlbnRTd0V2ZW50U2V0KHVpbnQzMl90IHVpMzJTd0V2ZW50KQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCB1aTMyU3dFdmVudCA8PSAzICk7CisKKyAgICAvLyBFYWNoIHNvZnR3YXJlIGV2ZW50IGlzIGJ5dGUgYWNjZXNzaWJsZQorICAgIEhXUkVHQihFVkVOVF9CQVNFICsgRVZFTlRfT19TV0VWICsgdWkzMlN3RXZlbnQpID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIHNvZnR3YXJlIGV2ZW50LgorLy8hCisvLyEgXHBhcmFtIHVpMzJTd0V2ZW50IGlzIHRoZSBzb2Z0d2FyZSBldmVudCBudW1iZXIuCisvLyEgLSAwIDogU1cgRXZlbnQgMAorLy8hIC0gMSA6IFNXIEV2ZW50IDEKKy8vISAtIDIgOiBTVyBFdmVudCAyCisvLyEgLSAzIDogU1cgRXZlbnQgMworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0V2ZW50U3dFdmVudENsZWFyKHVpbnQzMl90IHVpMzJTd0V2ZW50KQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKCB1aTMyU3dFdmVudCA8PSAzICk7CisKKyAgICAvLyBFYWNoIHNvZnR3YXJlIGV2ZW50IGlzIGJ5dGUgYWNjZXNzaWJsZQorICAgIEhXUkVHQihFVkVOVF9CQVNFICsgRVZFTlRfT19TV0VWICsgdWkzMlN3RXZlbnQpID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyBzb2Z0d2FyZSBldmVudCBzdGF0dXMuCisvLyEKKy8vISBccGFyYW0gdWkzMlN3RXZlbnQgaXMgdGhlIHNvZnR3YXJlIGV2ZW50IG51bWJlci4KKy8vISAtIDAgOiBTVyBFdmVudCAwCisvLyEgLSAxIDogU1cgRXZlbnQgMQorLy8hIC0gMiA6IFNXIEV2ZW50IDIKKy8vISAtIDMgOiBTVyBFdmVudCAzCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgY3VycmVudCB2YWx1ZSBvZiByZXF1ZXN0ZWQgc29mdHdhcmUgZXZlbnQuCisvLyEgLSAwIDogU29mdHdhcmUgZXZlbnQgaXMgZGUtYXNzZXJ0ZWQuCisvLyEgLSAxIDogU29mdHdhcmUgZXZlbnQgaXMgYXNzZXJ0ZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitFdmVudFN3RXZlbnRHZXQodWludDMyX3QgdWkzMlN3RXZlbnQpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoIHVpMzJTd0V2ZW50IDw9IDMgKTsKKworICAgIC8vIEVhY2ggc29mdHdhcmUgZXZlbnQgaXMgYnl0ZSBhY2Nlc3NpYmxlCisgICAgcmV0dXJuKCBIV1JFR0IoRVZFTlRfQkFTRSArIEVWRU5UX09fU1dFViArIHVpMzJTd0V2ZW50KSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19FVkVOVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnRfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ldmVudF9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE3OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZXZlbnRfZG9jLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGV2ZW50X2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBldmVudF9hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19ldmVudCBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBldmVudCBmYWJyaWMgY29uc2lzdHMgb2YgdHdvIGV2ZW50IG1vZHVsZXMuIE9uZSBpbiB0aGUgTUNVIHBvd2VyIGRvbWFpbiAoTUNVIGV2ZW50IGZhYnJpYykgYW5kCisvLyEgdGhlIG90aGVyIGluIHRoZSBBT04gcG93ZXIgZG9tYWluIChBT04gZXZlbnQgZmFicmljKS4gVGhlIE1DVSBldmVudCBmYWJyaWMgaXMgb25lIG9mIHRoZSBzdWJzY3JpYmVycworLy8hIHRvIHRoZSBBT04gZXZlbnQgZmFicmljLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBT04gZXZlbnQgZmFicmljLCBzZWUgW0FPTiBldmVudCBBUEldKEByZWYgYW9uZXZlbnRfYXBpKS4KKy8vIQorLy8hIFRoZSBNQ1UgZXZlbnQgZmFicmljIGlzIGEgY29tYmluYXRpb25hbCByb3V0ZXIgYmV0d2VlbiBldmVudCBzb3VyY2VzIGFuZCBldmVudCBzdWJzY3JpYmVycy4gTW9zdAorLy8hIGV2ZW50IHN1YnNjcmliZXJzIGhhdmUgc3RhdGljYWxseSByb3V0ZWQgZXZlbnQgc291cmNlcyBidXQgc2V2ZXJhbCBldmVudCBzdWJzY3JpYmVycyBoYXZlCisvLyEgY29uZmlndXJhYmxlIGV2ZW50IHNvdXJjZXMgd2hpY2ggaXMgY29uZmlndXJlZCBpbiB0aGUgTUNVIGV2ZW50IGZhYnJpYyB0aHJvdWdoIHRoaXMgQVBJLiBBbHRob3VnaAorLy8hIGNvbmZpZ3VyYWJsZSBvbmx5IGEgc3Vic2V0IG9mIGV2ZW50IHNvdXJjZXMgYXJlIGF2YWlsYWJsZSB0byBlYWNoIG9mIHRoZSBjb25maWd1cmFibGUgZXZlbnQgc3Vic2NyaWJlcnMuCisvLyEgVGhpcyBpcyBleHBsYWluZWQgaW4gbW9yZSBkZXRhaWxzIGluIHRoZSBmdW5jdGlvbiBAcmVmIEV2ZW50UmVnaXN0ZXIoKSB3aGljaCBkb2VzIGFsbCB0aGUgZXZlbnQgcm91dGluZworLy8hIGNvbmZpZ3VyYXRpb24uCisvLyEKKy8vISBNQ1UgZXZlbnQgZmFicmljIGFsc28gY29udGFpbnMgZm91ciBzb2Z0d2FyZSBldmVudHMgd2hpY2ggYWxsb3cgc29mdHdhcmUgdG8gdHJpZ2dlciBjZXJ0YWluIGV2ZW50CisvLyEgc3Vic2NyaWJlcnMuIEVhY2ggb2YgdGhlIGZvdXIgc29mdHdhcmUgZXZlbnRzIGlzIGFuIGluZGVwZW5kZW50IGV2ZW50IHNvdXJjZSB3aGljaCBtdXN0IGJlIHNldCBhbmQKKy8vISBjbGVhcmVkIGluIHRoZSBNQ1UgZXZlbnQgZmFicmljIHRocm91Z2ggdGhlIGZ1bmN0aW9uczoKKy8vISAtIEByZWYgRXZlbnRTd0V2ZW50U2V0KCkKKy8vISAtIEByZWYgRXZlbnRTd0V2ZW50Q2xlYXIoKQorLy8hIC0gQHJlZiBFdmVudFN3RXZlbnRHZXQoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ZsYXNoLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjQ5MDYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9mbGFzaC5jCkBAIC0wLDAgKzEsNzgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZmxhc2guYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMjQgMDg6MTY6MzQgKzAyMDAgKFR1ZSwgMjQgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY0NDcKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIG9uIGNoaXAgRmxhc2guCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NjZmcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZmxhc2guaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NoaXBpbmZvLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBGbGFzaFBvd2VyTW9kZVNldAorICAgICNkZWZpbmUgRmxhc2hQb3dlck1vZGVTZXQgICAgICAgICAgICAgICBOT1JPTV9GbGFzaFBvd2VyTW9kZVNldAorICAgICN1bmRlZiAgRmxhc2hQb3dlck1vZGVHZXQKKyAgICAjZGVmaW5lIEZsYXNoUG93ZXJNb2RlR2V0ICAgICAgICAgICAgICAgTk9ST01fRmxhc2hQb3dlck1vZGVHZXQKKyAgICAjdW5kZWYgIEZsYXNoUHJvdGVjdGlvblNldAorICAgICNkZWZpbmUgRmxhc2hQcm90ZWN0aW9uU2V0ICAgICAgICAgICAgICBOT1JPTV9GbGFzaFByb3RlY3Rpb25TZXQKKyAgICAjdW5kZWYgIEZsYXNoUHJvdGVjdGlvbkdldAorICAgICNkZWZpbmUgRmxhc2hQcm90ZWN0aW9uR2V0ICAgICAgICAgICAgICBOT1JPTV9GbGFzaFByb3RlY3Rpb25HZXQKKyAgICAjdW5kZWYgIEZsYXNoUHJvdGVjdGlvblNhdmUKKyAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvblNhdmUgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm90ZWN0aW9uU2F2ZQorICAgICN1bmRlZiAgRmxhc2hTZWN0b3JFcmFzZQorICAgICNkZWZpbmUgRmxhc2hTZWN0b3JFcmFzZSAgICAgICAgICAgICAgICBOT1JPTV9GbGFzaFNlY3RvckVyYXNlCisgICAgI3VuZGVmICBGbGFzaFByb2dyYW0KKyAgICAjZGVmaW5lIEZsYXNoUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm9ncmFtCisgICAgI3VuZGVmICBGbGFzaEVmdXNlUmVhZFJvdworICAgICNkZWZpbmUgRmxhc2hFZnVzZVJlYWRSb3cgICAgICAgICAgICAgICBOT1JPTV9GbGFzaEVmdXNlUmVhZFJvdworICAgICN1bmRlZiAgRmxhc2hEaXNhYmxlU2VjdG9yc0ZvcldyaXRlCisgICAgI2RlZmluZSBGbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUgICAgIE5PUk9NX0ZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZQorI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIGFjY2Vzc2VzIHRvIHRoZSBzZWN1cml0eSBjb250cm9sIGluIHRoZSBjdXN0b21lciBjb25maWd1cmF0aW9uCisvLyBhcmVhIGluIGZsYXNoIHRvcCBzZWN0b3IuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBDQ0ZHX09GRlNFVF9TRUNVUklUWSAgIENDRkdfT19CTF9DT05GSUcKKyNkZWZpbmUgQ0NGR19PRkZTRVRfU0VDVF9QUk9UICBDQ0ZHX09fQ0NGR19QUk9UXzMxXzAKKyNkZWZpbmUgQ0NGR19TSVpFX1NFQ1VSSVRZICAgICAweDAwMDAwMDE0CisjZGVmaW5lIENDRkdfU0laRV9TRUNUX1BST1QgICAgMHgwMDAwMDAwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHNlY3VyaXR5IGNvbnRyb2wgaW4gY3VzdG9tZXIgY29uZmlndXJhdGlvbiBhcmVhIGluIGZsYXNoCisvLyB0b3Agc2VjdG9yLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2NvbnN0IHVpbnQ4X3QgZ19wdWk4Q2NmZ0RlZmF1bHRTZWNbXSA9IHsweEZGLCAweEZGLCAweEZGLCAweEM1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDNSwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEM1LCAweEM1LCAweEM1LCAweEZGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzUsIDB4QzUsIDB4QzUsIDB4RkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisKK3R5cGVkZWYgdWludDMyX3QgKCogRmxhc2hQcmdQb2ludGVyX3QpICh1aW50OF90ICosIHVpbnQzMl90LCB1aW50MzJfdCk7CisKK3R5cGVkZWYgdWludDMyX3QgKCogRmxhc2hTZWN0b3JFcmFzZVBvaW50ZXJfdCkgKHVpbnQzMl90KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZCBTZXRSZWFkTW9kZSh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZXQgcG93ZXIgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ZsYXNoUG93ZXJNb2RlU2V0KHVpbnQzMl90IHVpMzJQb3dlck1vZGUsIHVpbnQzMl90IHVpMzJCYW5rR3JhY2VQZXJpb2RlLAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlB1bXBHcmFjZVBlcmlvZGUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJQb3dlck1vZGUgPT0gRkxBU0hfUFdSX0FDVElWRV9NT0RFIHx8CisgICAgICAgICAgIHVpMzJQb3dlck1vZGUgPT0gRkxBU0hfUFdSX09GRl9NT0RFICAgIHx8CisgICAgICAgICAgIHVpMzJQb3dlck1vZGUgPT0gRkxBU0hfUFdSX0RFRVBfU1REQllfTU9ERSk7CisgICAgQVNTRVJUKHVpMzJCYW5rR3JhY2VQZXJpb2RlIDw9IDB4RkYpOworICAgIEFTU0VSVCh1aTMyUHVtcEdyYWNlUGVyaW9kZSA8PSAweEZGRkYpOworCisgICAgc3dpdGNoKHVpMzJQb3dlck1vZGUpCisgICAgeworICAgIGNhc2UgRkxBU0hfUFdSX0FDVElWRV9NT0RFOgorICAgICAgICAvLworICAgICAgICAvLyBTZXQgYmFuayBwb3dlciBtb2RlIHRvIEFDVElWRS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJGQUxMQkFDSykgPQorICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCRkFMTEJBQ0spICYKKyAgICAgICAgICAgICB+RkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMF9NKSB8IEZCRkFMTEJBQ0tfQUNUSVZFOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBjaGFyZ2UgcHVtcCBwb3dlciBtb2RlIHRvIEFDVElWRSBtb2RlLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GUEFDMSkgPQorICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMxKSAmIH5GTEFTSF9GUEFDMV9QVU1QUFdSX00pIHwgKDEgPDwgRkxBU0hfRlBBQzFfUFVNUFBXUl9TKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZMQVNIX1BXUl9PRkZfTU9ERToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGJhbmsgZ3JhY2UgcGVyaW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJBQykgPQorICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCQUMpICYgKH5GTEFTSF9GQkFDX0JBR1BfTSkpIHwKKyAgICAgICAgICAgICgodWkzMkJhbmtHcmFjZVBlcmlvZGUgPDwgRkxBU0hfRkJBQ19CQUdQX1MpICYgRkxBU0hfRkJBQ19CQUdQX00pOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBwdW1wIGdyYWNlIHBlcmlvZGUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMyKSA9CisgICAgICAgICAgICAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzIpICYgKH5GTEFTSF9GUEFDMl9QQUdQX00pKSB8CisgICAgICAgICAgICAoKHVpMzJQdW1wR3JhY2VQZXJpb2RlIDw8IEZMQVNIX0ZQQUMyX1BBR1BfUykgJiBGTEFTSF9GUEFDMl9QQUdQX00pOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFNldCBiYW5rIHBvd2VyIG1vZGUgdG8gU0xFRVAuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCRkFMTEJBQ0spICY9IH5GTEFTSF9GQkZBTExCQUNLX0JBTktQV1IwX007CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGNoYXJnZSBwdW1wIHBvd2VyIG1vZGUgdG8gU0xFRVAgbW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzEpICY9IH5GTEFTSF9GUEFDMV9QVU1QUFdSX007CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGTEFTSF9QV1JfREVFUF9TVERCWV9NT0RFOgorICAgICAgICAvLworICAgICAgICAvLyBTZXQgYmFuayBncmFjZSBwZXJpb2RlLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQkFDKSA9CisgICAgICAgICAgICAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJBQykgJiAofkZMQVNIX0ZCQUNfQkFHUF9NKSkgfAorICAgICAgICAgICAgKCh1aTMyQmFua0dyYWNlUGVyaW9kZSA8PCBGTEFTSF9GQkFDX0JBR1BfUykgJiBGTEFTSF9GQkFDX0JBR1BfTSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IHB1bXAgZ3JhY2UgcGVyaW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzIpID0KKyAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GUEFDMikgJiAofkZMQVNIX0ZQQUMyX1BBR1BfTSkpIHwKKyAgICAgICAgICAgICgodWkzMlB1bXBHcmFjZVBlcmlvZGUgPDwgRkxBU0hfRlBBQzJfUEFHUF9TKSAmIEZMQVNIX0ZQQUMyX1BBR1BfTSk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2V0IGJhbmsgcG93ZXIgbW9kZSB0byBERUVQIFNUQU5EQlkgbW9kZS4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJGQUxMQkFDSykgPQorICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCRkFMTEJBQ0spICYKKyAgICAgICAgICAgICB+RkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMF9NKSB8IEZCRkFMTEJBQ0tfREVFUF9TVERCWTsKKworICAgICAgICAvLworICAgICAgICAvLyBTZXQgY2hhcmdlIHB1bXAgcG93ZXIgbW9kZSB0byBTVEFOREJZIG1vZGUuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZQQUMxKSB8PSBGTEFTSF9GUEFDMV9QVU1QUFdSX007CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgY3VycmVudCBjb25maWd1cmVkIHBvd2VyIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorRmxhc2hQb3dlck1vZGVHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyUG93ZXJNb2RlOworICAgIHVpbnQzMl90IHVpMzJCYW5rUHdyTW9kZTsKKworICAgIHVpMzJCYW5rUHdyTW9kZSA9IEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZCRkFMTEJBQ0spICYKKyAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IwX007CisKKyAgICBpZih1aTMyQmFua1B3ck1vZGUgPT0gRkJGQUxMQkFDS19TTEVFUCkKKyAgICB7CisgICAgICAgIHVpMzJQb3dlck1vZGUgPSBGTEFTSF9QV1JfT0ZGX01PREU7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkJhbmtQd3JNb2RlID09IEZCRkFMTEJBQ0tfREVFUF9TVERCWSkKKyAgICB7CisgICAgICAgIHVpMzJQb3dlck1vZGUgPSBGTEFTSF9QV1JfREVFUF9TVERCWV9NT0RFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTMyUG93ZXJNb2RlID0gRkxBU0hfUFdSX0FDVElWRV9NT0RFOworICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHBvd2VyIG1vZGUuCisgICAgLy8KKyAgICByZXR1cm4odWkzMlBvd2VyTW9kZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0IHNlY3RvciBwcm90ZWN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorRmxhc2hQcm90ZWN0aW9uU2V0KHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzLCB1aW50MzJfdCB1aTMyUHJvdGVjdE1vZGUpCit7CisgICAgdWludDMyX3QgdWkzMlNlY3Rvck51bWJlcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyU2VjdG9yQWRkcmVzcyA8PSAoRkxBU0hNRU1fQkFTRSArIEZsYXNoU2l6ZUdldCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYXNoU2VjdG9yU2l6ZUdldCgpKSk7CisgICAgQVNTRVJUKCh1aTMyU2VjdG9yQWRkcmVzcyAmIChGbGFzaFNlY3RvclNpemVHZXQoKSAtIDEpKSA9PSAwMCk7CisKKyAgICBpZih1aTMyUHJvdGVjdE1vZGUgPT0gRkxBU0hfV1JJVEVfUFJPVEVDVCkKKyAgICB7CisgICAgICAgIHVpMzJTZWN0b3JOdW1iZXIgPSAodWkzMlNlY3RvckFkZHJlc3MgLSBGTEFTSE1FTV9CQVNFKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFzaFNlY3RvclNpemVHZXQoKTsKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9FTkFCTEU7CisKKyAgICAgICAgaWYodWkzMlNlY3Rvck51bWJlciA8PSAzMSkKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX0JTTEUwKSB8PSAoMSA8PCB1aTMyU2VjdG9yTnVtYmVyKTsKKyAgICAgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9CU0xQMCkgfD0gKDEgPDwgdWkzMlNlY3Rvck51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZih1aTMyU2VjdG9yTnVtYmVyIDw9IDYzKQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fQlNMRTEpIHw9CisgICAgICAgICAgICAgICAgKDEgPDwgKHVpMzJTZWN0b3JOdW1iZXIgJiAweDFGKSk7CisgICAgICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fQlNMUDEpIHw9CisgICAgICAgICAgICAgICAgKDEgPDwgKHVpMzJTZWN0b3JOdW1iZXIgJiAweDFGKSk7CisgICAgICAgIH0KKworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fV1JfRU5BKSA9IEZTTV9SRUdfV1JUX0RJU0FCTEU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCBzZWN0b3IgcHJvdGVjdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitGbGFzaFByb3RlY3Rpb25HZXQodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpCit7CisgICAgdWludDMyX3QgdWkzMlNlY3RvclByb3RlY3Q7CisgICAgdWludDMyX3QgdWkzMlNlY3Rvck51bWJlcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyU2VjdG9yQWRkcmVzcyA8PSAoRkxBU0hNRU1fQkFTRSArIEZsYXNoU2l6ZUdldCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYXNoU2VjdG9yU2l6ZUdldCgpKSk7CisgICAgQVNTRVJUKCh1aTMyU2VjdG9yQWRkcmVzcyAmIChGbGFzaFNlY3RvclNpemVHZXQoKSAtIDEpKSA9PSAwMCk7CisKKyAgICB1aTMyU2VjdG9yUHJvdGVjdCA9IEZMQVNIX05PX1BST1RFQ1Q7CisgICAgdWkzMlNlY3Rvck51bWJlciA9ICh1aTMyU2VjdG9yQWRkcmVzcyAtIEZMQVNITUVNX0JBU0UpIC8gRmxhc2hTZWN0b3JTaXplR2V0KCk7CisKKyAgICBpZih1aTMyU2VjdG9yTnVtYmVyIDw9IDMxKQorICAgIHsKKyAgICAgICAgaWYoKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9CU0xFMCkgJiAoMSA8PCB1aTMyU2VjdG9yTnVtYmVyKSkgJiYKKyAgICAgICAgICAgICAgICAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX0JTTFAwKSAmICgxIDw8IHVpMzJTZWN0b3JOdW1iZXIpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMlNlY3RvclByb3RlY3QgPSBGTEFTSF9XUklURV9QUk9URUNUOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYodWkzMlNlY3Rvck51bWJlciA8PSA2MykKKyAgICB7CisgICAgICAgIGlmKChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fQlNMRTEpICYKKyAgICAgICAgICAgICAgICAoMSA8PCAodWkzMlNlY3Rvck51bWJlciAmIDB4MUYpKSkgJiYKKyAgICAgICAgICAgICAgICAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX0JTTFAxKSAmCisgICAgICAgICAgICAgICAgICgxIDw8ICh1aTMyU2VjdG9yTnVtYmVyICYgMHgxRikpKSkKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMlNlY3RvclByb3RlY3QgPSBGTEFTSF9XUklURV9QUk9URUNUOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKHVpMzJTZWN0b3JQcm90ZWN0KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTYXZlIHNlY3RvciBwcm90ZWN0aW9uIHRvIG1ha2UgaXQgcGVybWFuZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0ZsYXNoUHJvdGVjdGlvblNhdmUodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpCit7CisgICAgdWludDMyX3QgdWkzMkVycm9yUmV0dXJuOworICAgIHVpbnQzMl90IHVpMzJTZWN0b3JOdW1iZXI7CisgICAgdWludDMyX3QgdWkzMkNjZmdTZWN0b3JBZGRyOworICAgIHVpbnQzMl90IHVpMzJQcm9nQnVmOworCisgICAgdWkzMkVycm9yUmV0dXJuID0gRkFQSV9TVEFUVVNfU1VDQ0VTUzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyU2VjdG9yQWRkcmVzcyA8PSAoRkxBU0hNRU1fQkFTRSArIEZsYXNoU2l6ZUdldCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYXNoU2VjdG9yU2l6ZUdldCgpKSk7CisgICAgQVNTRVJUKCh1aTMyU2VjdG9yQWRkcmVzcyAmIChGbGFzaFNlY3RvclNpemVHZXQoKSAtIDEpKSA9PSAwMCk7CisKKyAgICBpZihGbGFzaFByb3RlY3Rpb25HZXQodWkzMlNlY3RvckFkZHJlc3MpID09IEZMQVNIX1dSSVRFX1BST1RFQ1QpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBGaW5kIHNlY3RvciBudW1iZXIgZm9yIHNwZWNpZmllZCBzZWN0b3IuCisgICAgICAgIC8vCisgICAgICAgIHVpMzJTZWN0b3JOdW1iZXIgPSAodWkzMlNlY3RvckFkZHJlc3MgLSBGTEFTSE1FTV9CQVNFKSAvIEZsYXNoU2VjdG9yU2l6ZUdldCgpOworICAgICAgICB1aTMyQ2NmZ1NlY3RvckFkZHIgPSBGTEFTSE1FTV9CQVNFICsgRmxhc2hTaXplR2V0KCkgLSBGbGFzaFNlY3RvclNpemVHZXQoKTsKKworICAgICAgICAvLworICAgICAgICAvLyBBZGp1c3QgQ0NGRyBhZGRyZXNzIHRvIHRoZSAzMi1iaXQgQ0NGRyB3b3JkIGhvbGRpbmcgdGhlCisgICAgICAgIC8vIHByb3RlY3QtYml0IGZvciB0aGUgc3BlY2lmaWVkIHNlY3Rvci4KKyAgICAgICAgLy8KKyAgICAgICAgdWkzMkNjZmdTZWN0b3JBZGRyICs9ICgoKHVpMzJTZWN0b3JOdW1iZXIgPj4gNSkgKiA0KSArIENDRkdfT0ZGU0VUX1NFQ1RfUFJPVCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRmluZCB2YWx1ZSB0byBwcm9ncmFtIGJ5IHNldHRpbmcgdGhlIHByb3RlY3QtYml0IHdoaWNoCisgICAgICAgIC8vIGNvcnJlc3BvbmRzIHRvIHNwZWNpZmllZCBzZWN0b3IgbnVtYmVyLCB0byAwLgorICAgICAgICAvLyBMZWF2ZSBvdGhlciBwcm90ZWN0LWJpdHMgdW5jaGFuZ2VkLgorICAgICAgICAvLworICAgICAgICB1aTMyUHJvZ0J1ZiA9ICh+KDEgPDwgKHVpMzJTZWN0b3JOdW1iZXIgJiAweDFGKSkpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKih1aW50MzJfdCAqKXVpMzJDY2ZnU2VjdG9yQWRkcjsKKworICAgICAgICB1aTMyRXJyb3JSZXR1cm4gPSBGbGFzaFByb2dyYW0oKHVpbnQ4X3QqKSZ1aTMyUHJvZ0J1ZiwgdWkzMkNjZmdTZWN0b3JBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NGR19TSVpFX1NFQ1RfUFJPVCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJFcnJvclJldHVybik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRXJhc2UgYSBmbGFzaCBzZWN0b3IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorRmxhc2hTZWN0b3JFcmFzZSh1aW50MzJfdCB1aTMyU2VjdG9yQWRkcmVzcykKK3sKKyAgICB1aW50MzJfdCB1aTMyRXJyb3JSZXR1cm47CisgICAgRmxhc2hTZWN0b3JFcmFzZVBvaW50ZXJfdCBGdW5jUG9pbnRlcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyU2VjdG9yQWRkcmVzcyA8PSAoRkxBU0hNRU1fQkFTRSArIEZsYXNoU2l6ZUdldCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYXNoU2VjdG9yU2l6ZUdldCgpKSk7CisgICAgQVNTRVJUKCh1aTMyU2VjdG9yQWRkcmVzcyAmIChGbGFzaFNlY3RvclNpemVHZXQoKSAtIDEpKSA9PSAwMCk7CisKKyAgICAvLworICAgIC8vIENhbGwgUk9NIGZ1bmN0aW9uCisgICAgLy8KKyAgICBGdW5jUG9pbnRlciA9ICh1aW50MzJfdCAoKikodWludDMyX3QpKSAoUk9NX0FQSV9GTEFTSF9UQUJMRVs1XSk7CisgICAgdWkzMkVycm9yUmV0dXJuID0gRnVuY1BvaW50ZXIodWkzMlNlY3RvckFkZHJlc3MpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgc3RhbmRieSBpbiBmbGFzaCBiYW5rIHNpbmNlIFJPTSBmdW5jdGlvbiBtaWd0aCBoYXZlIGRpc2FibGVkIGl0CisgICAgLy8KKyAgICBIV1JFR0JJVFcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHLCBGTEFTSF9DRkdfRElTX1NUQU5EQllfQklUTiApID0gMDsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN0YXR1cyBvZiBvcGVyYXRpb24uCisgICAgLy8KKyAgICByZXR1cm4odWkzMkVycm9yUmV0dXJuKTsKKworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUHJvZ3JhbXMgdW5wcm90ZWN0ZWQgbWFpbiBiYW5rIGZsYXNoIHNlY3RvcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorRmxhc2hQcm9ncmFtKHVpbnQ4X3QgKnB1aThEYXRhQnVmZmVyLCB1aW50MzJfdCB1aTMyQWRkcmVzcywgdWludDMyX3QgdWkzMkNvdW50KQoreworICAgIHVpbnQzMl90IHVpMzJFcnJvclJldHVybjsKKyAgICBGbGFzaFByZ1BvaW50ZXJfdCBGdW5jUG9pbnRlcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkFkZHJlc3MgKyB1aTMyQ291bnQpIDw9IChGTEFTSE1FTV9CQVNFICsgRmxhc2hTaXplR2V0KCkpKTsKKworICAgIC8vCisgICAgLy8gQ2FsbCBST00gZnVuY3Rpb24KKyAgICAvLworICAgIEZ1bmNQb2ludGVyID0gKHVpbnQzMl90ICgqKSh1aW50OF90ICosIHVpbnQzMl90LCB1aW50MzJfdCkpIChST01fQVBJX0ZMQVNIX1RBQkxFWzZdKTsKKyAgICB1aTMyRXJyb3JSZXR1cm4gPSBGdW5jUG9pbnRlciggcHVpOERhdGFCdWZmZXIsIHVpMzJBZGRyZXNzLCB1aTMyQ291bnQpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgc3RhbmRieSBpbiBmbGFzaCBiYW5rIHNpbmNlIFJPTSBmdW5jdGlvbiBtaWd0aCBoYXZlIGRpc2FibGVkIGl0CisgICAgLy8KKyAgICBIV1JFR0JJVFcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHLCBGTEFTSF9DRkdfRElTX1NUQU5EQllfQklUTiApID0gMDsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHN0YXR1cyBvZiBvcGVyYXRpb24uCisgICAgLy8KKyAgICByZXR1cm4odWkzMkVycm9yUmV0dXJuKTsKKworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlYWRzIGVmdXNlIGRhdGEgZnJvbSBzcGVjaWZpZWQgcm93CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorYm9vbAorRmxhc2hFZnVzZVJlYWRSb3codWludDMyX3QgKnB1aTMyRWZ1c2VEYXRhLCB1aW50MzJfdCB1aTMyUm93QWRkcmVzcykKK3sKKyAgICBib29sIGJTdGF0dXM7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2xvY2sgZm9yIHRoZSBlZnVzZSBpcyBlbmFibGVkCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcpICY9IH5GTEFTSF9DRkdfRElTX0VGVVNFQ0xLOworCisgICAgLy8KKyAgICAvLyBTZXQgdGltaW5nIGZvciBFRlVTRSByZWFkIG9wZXJhdGlvbnMuCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19FRlVTRVJFQUQpIHw9ICgoNSA8PCBGTEFTSF9FRlVTRVJFQURfUkVBRENMT0NLX1MpICYKKyAgICAgICAgICAgIEZMQVNIX0VGVVNFUkVBRF9SRUFEQ0xPQ0tfTSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHN0YXR1cyByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0VGVVNFRVJST1IpID0gMDsKKworICAgIC8vCisgICAgLy8gU2VsZWN0IHRoZSBGdXNlUk9NIGJsb2NrIDAuCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19FRlVTRUFERFIpID0gMHgwMDAwMDAwMDsKKworICAgIC8vCisgICAgLy8gU3RhcnQgdGhlIHJlYWQgb3BlcmF0aW9uLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRUZVU0UpID0KKyAgICAgICAgKERVTVBXT1JEX0lOU1RSIDw8IEZMQVNIX0VGVVNFX0lOU1RSVUNUSU9OX1MpIHwKKyAgICAgICAgKHVpMzJSb3dBZGRyZXNzICYgRkxBU0hfRUZVU0VfRFVNUFdPUkRfTSk7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIG9wZXJhdGlvbiB0byBmaW5pc2guCisgICAgLy8KKyAgICB3aGlsZSghKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0VGVVNFRVJST1IpICYgRkxBU0hfRUZVU0VFUlJPUl9ET05FKSkKKyAgICB7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiBlcnJvciByZXBvcnRlZC4KKyAgICAvLworICAgIGlmKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0VGVVNFRVJST1IpICYgRkxBU0hfRUZVU0VFUlJPUl9DT0RFX00pCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTZXQgZXJyb3Igc3RhdHVzLgorICAgICAgICAvLworICAgICAgICBiU3RhdHVzID0gMTsKKworICAgICAgICAvLworICAgICAgICAvLyBDbGVhciBkYXRhLgorICAgICAgICAvLworICAgICAgICAqcHVpMzJFZnVzZURhdGEgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTZXQgb2sgc3RhdHVzLgorICAgICAgICAvLworICAgICAgICBiU3RhdHVzID0gMDsKKworICAgICAgICAvLworICAgICAgICAvLyBObyBlcnJvci4gR2V0IGRhdGEgZnJvbSBkYXRhIHJlZ2lzdGVyLgorICAgICAgICAvLworICAgICAgICAqcHVpMzJFZnVzZURhdGEgPSBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19EQVRBTE9XRVIpOworICAgIH0KKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgZWZ1c2UgY2xvY2sgdG8gY29uc2VydmUgcG93ZXIKKyAgICAvLworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgfD0gRkxBU0hfQ0ZHX0RJU19FRlVTRUNMSzsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBkYXRhLgorICAgIC8vCisgICAgcmV0dXJuKGJTdGF0dXMpOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgYWxsIHNlY3RvcnMgZm9yIGVyYXNlIGFuZCBwcm9ncmFtbWluZyBvbiB0aGUgYWN0aXZlIGJhbmsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitGbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBmbGFzaCBiYWNrIHRvIHJlYWQgbW9kZQorICAgIC8vCisgICAgU2V0UmVhZE1vZGUoKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSBMZXZlbCAxIFByb3RlY3Rpb24uCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQlBST1QpID0gRkxBU0hfRkJQUk9UX1BST1RMMURJUzsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSBhbGwgc2VjdG9ycyBmb3IgZXJhc2UgYW5kIHByb2dyYW1taW5nLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRkJTRSkgPSAweDAwMDA7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBMZXZlbCAxIFByb3RlY3Rpb24uCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQlBST1QpID0gMDsKKworICAgIC8vCisgICAgLy8gUHJvdGVjdCBzZWN0b3JzIGZyb20gc2VjdG9yIGVyYXNlLgorICAgIC8vCisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9FTkFCTEU7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1NFQ1RPUjEpID0gMHhGRkZGRkZGRjsKKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fU0VDVE9SMikgPSAweEZGRkZGRkZGOworICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTTV9XUl9FTkEpID0gRlNNX1JFR19XUlRfRElTQUJMRTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vISBVc2VkIHRvIHNldCBmbGFzaCBpbiByZWFkIG1vZGUuCisvLyEKKy8vISBGbGFzaCBpcyBjb25maWd1cmVkIHdpdGggdmFsdWVzIGxvYWRlZCBmcm9tIE9UUCBkZXBlbmRlbnQgb24gdGhlIGN1cnJlbnQKKy8vISByZWd1bGF0b3IgbW9kZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorU2V0UmVhZE1vZGUodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyVHJpbVZhbHVlOworICAgIHVpbnQzMl90IHVpMzJWYWx1ZTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBTVEFOREJZX01PREVfU0VMLCBTVEFOREJZX1BXX1NFTCwgRElTX1NUQU5EQlksIERJU19JRExFLAorICAgIC8vIFZJTl9BVF9YIGFuZCBWSU5fQllfUEFTUyBmb3IgcmVhZCBtb2RlCisgICAgLy8KKyAgICBpZihIV1JFRyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMKSAmCisgICAgICAgQU9OX1NZU0NUTF9QV1JDVExfRVhUX1JFR19NT0RFKQorICAgIHsKKyAgICAgICAgLy8gU2VsZWN0IHRyaW0gdmFsdWVzIGZvciBleHRlcm5hbCByZWd1bGF0b3IgbW9kZToKKyAgICAgICAgLy8gQ29uZmlndXJlIFNUQU5EQllfTU9ERV9TRUwgKE9UUCBvZmZzZXQgMHgzMDggYml0IDcpCisgICAgICAgIC8vIENPbmZpZ3VyZSBTVEFOREJZX1BXX1NFTCAgIChPVFAgb2Zmc2V0IDB4MzA4IGJpdCA2OjUpCisgICAgICAgIC8vIE11c3QgYmUgZG9uZSB3aGlsZSB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkIENPTkZJRy5ESVNfU1RBTkRCWSA9IDEKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSB8PSBGTEFTSF9DRkdfRElTX1NUQU5EQlk7CisKKyAgICAgICAgdWkzMlRyaW1WYWx1ZSA9CisgICAgICAgICAgIEhXUkVHKEZMQVNIX0NGR19CQVNFICsgRkNGRzFfT0ZGU0VUICsgRkNGRzFfT19GTEFTSF9PVFBfREFUQTQpOworCisgICAgICAgIHVpMzJWYWx1ZSA9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1JEX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1JEX1MpIDw8CisgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19TVEFOREJZX01PREVfU0VMX1M7CisKKyAgICAgICAgdWkzMlZhbHVlIHw9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9FWFRfUkRfTSkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0VYVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX1NUQU5EQllfUFdfU0VMX1M7CisKKyAgICAgICAgLy8gQ29uZmlndXJlIERJU19TVEFOREJZIChPVFAgb2Zmc2V0IDB4MzA4IGJpdCA0KS4KKyAgICAgICAgLy8gQ29uZmlndXJlIERJU19JRExFICAgIChPVFAgb2Zmc2V0IDB4MzA4IGJpdCAzKS4KKyAgICAgICAgdWkzMlZhbHVlIHw9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgIChGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1JEX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0VYVF9SRF9NKSkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfUkRfUykgPDwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19ESVNfSURMRV9TOworCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgPSAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihGTEFTSF9DRkdfU1RBTkRCWV9NT0RFX1NFTF9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19TVEFOREJZX1BXX1NFTF9NICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX00gICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfRElTX0lETEVfTSkpIHwgdWkzMlZhbHVlOworCisgICAgICAgIC8vIENoZWNrIGlmIHNhbXBsZSBhbmQgaG9sZCBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLgorICAgICAgICBpZihIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcpICYgRkxBU0hfQ0ZHX0RJU19JRExFKQorICAgICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2FpdCBmb3IgZGlzYWJsZWQgc2FtcGxlIGFuZCBob2xkIGZ1bmN0aW9uYWxpdHkgdG8gYmUgc3RhYmxlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHdoaWxlKCEoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fU1RBVCkgJiBGTEFTSF9TVEFUX1NBTUhPTERfRElTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbmZpZ3VyZSBWSU5fQVRfWCAoT1RQIG9mZnNldCAweDMwOCBiaXRzIDI6MCkKKyAgICAgICAgdWkzMlZhbHVlID0gKCh1aTMyVHJpbVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfRVhUX1JEX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0VYVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX1M7CisKKyAgICAgICAgLy8gQ29uZmlndXJlIFZJTl9CWV9QQVNTIHdoaWNoIGlzIGRlcGVuZGVudCBvbiB0aGUgVklOX0FUX1ggdmFsdWUuCisgICAgICAgIC8vIElmIFZJTl9BVF9YID0gNyB0aGVuIFZJTl9CWV9QQVNTIHNob3VsZCBiZSAwIG90aGVyd2lzZQorICAgICAgICAvLyBWSU5fQllfUEFTUyBzaG91bGQgYmUgMQorICAgICAgICBpZigoKHVpMzJWYWx1ZSAmIEZMQVNIX0ZTRVFQTVBfVklOX0FUX1hfTSkgPj4KKyAgICAgICAgICAgIEZMQVNIX0ZTRVFQTVBfVklOX0FUX1hfUykgIT0gMHg3KQorICAgICAgICB7CisgICAgICAgICAgICB1aTMyVmFsdWUgfD0gRkxBU0hfRlNFUVBNUF9WSU5fQllfUEFTUzsKKyAgICAgICAgfQorCisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZMT0NLKSA9IDB4QUFBQTsKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNFUVBNUCkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTRVFQTVApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KEZMQVNIX0ZTRVFQTVBfVklOX0JZX1BBU1NfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX00pKSAgfCB1aTMyVmFsdWU7CisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZMT0NLKSA9IDB4NTVBQTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gU2VsZWN0IHRyaW0gdmFsdWVzIGZvciBpbnRlcm5hbCByZWd1bGF0b3IgbW9kZToKKyAgICAgICAgLy8gQ29uZmlndXJlIFNUQU5EQllfTU9ERV9TRUwgKE9UUCBvZmZzZXQgMHgzMDggYml0IDE1KQorICAgICAgICAvLyBDT25maWd1cmUgU1RBTkRCWV9QV19TRUwgICAoT1RQIG9mZnNldCAweDMwOCBiaXQgMTQ6MTMpCisgICAgICAgIC8vIE11c3QgYmUgZG9uZSB3aGlsZSB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkIENPTkZJRy5ESVNfU1RBTkRCWSA9IDEKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSB8PSBGTEFTSF9DRkdfRElTX1NUQU5EQlk7CisKKyAgICAgICAgdWkzMlRyaW1WYWx1ZSA9CisgICAgICAgICAgIEhXUkVHKEZMQVNIX0NGR19CQVNFICsgRkNGRzFfT0ZGU0VUICsgRkNGRzFfT19GTEFTSF9PVFBfREFUQTQpOworCisgICAgICAgIHVpMzJWYWx1ZSA9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1JEX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1JEX1MpIDw8CisgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19TVEFOREJZX01PREVfU0VMX1M7CisKKyAgICAgICAgdWkzMlZhbHVlIHw9ICgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9JTlRfUkRfTSkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0lOVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX1NUQU5EQllfUFdfU0VMX1M7CisKKyAgICAgICAgLy8gQ29uZmlndXJlIERJU19TVEFOREJZIChPVFAgb2Zmc2V0IDB4MzA4IGJpdCAxMikuCisgICAgICAgIC8vIENvbmZpZ3VyZSBESVNfSURMRSAgICAoT1RQIG9mZnNldCAweDMwOCBiaXQgMTEpLgorICAgICAgICB1aTMyVmFsdWUgfD0gKCh1aTMyVHJpbVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgKEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9JTlRfUkRfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfSU5UX1JEX00pKSA+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX0RJU19JRExFX1M7CisKKyAgICAgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHKSA9IChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KEZMQVNIX0NGR19TVEFOREJZX01PREVfU0VMX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQ0ZHX1NUQU5EQllfUFdfU0VMX00gICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9DRkdfRElTX1NUQU5EQllfTSAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0NGR19ESVNfSURMRV9NKSkgfCB1aTMyVmFsdWU7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgc2FtcGxlIGFuZCBob2xkIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuCisgICAgICAgIGlmKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRykgJiBGTEFTSF9DRkdfRElTX0lETEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXYWl0IGZvciBkaXNhYmxlZCBzYW1wbGUgYW5kIGhvbGQgZnVuY3Rpb25hbGl0eSB0byBiZSBzdGFibGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgd2hpbGUoIShIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19TVEFUKSAmIEZMQVNIX1NUQVRfU0FNSE9MRF9ESVMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ29uZmlndXJlIFZJTl9BVF9YIChPVFAgb2Zmc2V0IDB4MzA4IGJpdHMgMTA6OCkKKyAgICAgICAgdWkzMlZhbHVlID0gKCgodWkzMlRyaW1WYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9JTlRfUkRfTSkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0lOVF9SRF9TKSA8PAorICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX1MpOworCisgICAgICAgIC8vIENvbmZpZ3VyZSBWSU5fQllfUEFTUyB3aGljaCBpcyBkZXBlbmRlbnQgb24gdGhlIFZJTl9BVF9YIHZhbHVlLgorICAgICAgICAvLyBJZiBWSU5fQVRfWCA9IDcgdGhlbiBWSU5fQllfUEFTUyBzaG91bGQgYmUgMCBvdGhlcndpc2UKKyAgICAgICAgLy8gVklOX0JZX1BBU1Mgc2hvdWxkIGJlIDEKKyAgICAgICAgaWYoKCh1aTMyVmFsdWUgJiBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX00pID4+CisgICAgICAgICAgICBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX1MpICE9IDB4NykKKyAgICAgICAgeworICAgICAgICAgICAgdWkzMlZhbHVlIHw9IEZMQVNIX0ZTRVFQTVBfVklOX0JZX1BBU1M7CisgICAgICAgIH0KKworICAgICAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GTE9DSykgPSAweEFBQUE7CisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZTRVFQTVApID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU0VRUE1QKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihGTEFTSF9GU0VRUE1QX1ZJTl9CWV9QQVNTX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9NKSkgfCB1aTMyVmFsdWU7CisgICAgICAgIEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZMT0NLKSA9IDB4NTVBQTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIQVBJIEZsYXNoIHByb2dyYW0gZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorTWVtQnVzV3JrQXJvdW5kSGFwaVByb2dyYW1GbGFzaCh1aW50OF90ICpwdWk4RGF0YUJ1ZmZlciwgdWludDMyX3QgdWkzMkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDb3VudCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXJyb3JSZXR1cm47CisgICAgRmxhc2hQcmdQb2ludGVyX3QgRnVuY1BvaW50ZXI7CisgICAgdWludDMyX3QgdWkzMlJvbUFkZHIgPSBIV1JFRyhST01fSEFQSV9UQUJMRV9BRERSICsgKDUgKiA0KSk7CisKKyAgICAvLworICAgIC8vIENhbGwgUk9NIGZ1bmN0aW9uCisgICAgLy8KKyAgICBGdW5jUG9pbnRlciA9ICh1aW50MzJfdCAoKikodWludDhfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpKSAodWkzMlJvbUFkZHIpOworICAgIHVpMzJFcnJvclJldHVybiA9IEZ1bmNQb2ludGVyKCBwdWk4RGF0YUJ1ZmZlciwgdWkzMkFkZHJlc3MsIHVpMzJDb3VudCk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBzdGFuZGJ5IGluIGZsYXNoIGJhbmsgc2luY2UgUk9NIGZ1bmN0aW9uIG1pZ3RoIGhhdmUgZGlzYWJsZWQgaXQKKyAgICAvLworICAgIEhXUkVHQklUVyhGTEFTSF9CQVNFICsgRkxBU0hfT19DRkcsIEZMQVNIX0NGR19ESVNfU1RBTkRCWV9CSVROICkgPSAwOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gc3RhdHVzIG9mIG9wZXJhdGlvbi4KKyAgICAvLworICAgIHJldHVybih1aTMyRXJyb3JSZXR1cm4pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSEFQSSBGbGFzaCBzZWN0b3IgZXJhc2UgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorTWVtQnVzV3JrQXJvdW5kSGFwaUVyYXNlU2VjdG9yKHVpbnQzMl90IHVpMzJBZGRyZXNzKQoreworICAgIHVpbnQzMl90IHVpMzJFcnJvclJldHVybjsKKworICAgIEZsYXNoU2VjdG9yRXJhc2VQb2ludGVyX3QgRnVuY1BvaW50ZXI7CisgICAgdWludDMyX3QgdWkzMlJvbUFkZHIgPSBIV1JFRyhST01fSEFQSV9UQUJMRV9BRERSICsgKDMgKiA0KSk7CisKKyAgICAvLworICAgIC8vIENhbGwgUk9NIGZ1bmN0aW9uCisgICAgLy8KKyAgICBGdW5jUG9pbnRlciA9ICh1aW50MzJfdCAoKikodWludDMyX3QpKSAodWkzMlJvbUFkZHIpOworICAgIHVpMzJFcnJvclJldHVybiA9IEZ1bmNQb2ludGVyKHVpMzJBZGRyZXNzKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHN0YW5kYnkgaW4gZmxhc2ggYmFuayBzaW5jZSBST00gZnVuY3Rpb24gbWlndGggaGF2ZSBkaXNhYmxlZCBpdAorICAgIC8vCisgICAgSFdSRUdCSVRXKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRywgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX0JJVE4gKSA9IDA7CisKKyAgICAvLworICAgIC8vIFJldHVybiBzdGF0dXMgb2Ygb3BlcmF0aW9uLgorICAgIC8vCisgICAgcmV0dXJuKHVpMzJFcnJvclJldHVybik7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9mbGFzaC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZmxhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2IzMzEzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZmxhc2guaApAQCAtMCwwICsxLDgyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGZsYXNoLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI0IDA4OjA4OjUwICswMjAwIChUdWUsIDI0IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDQ2CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEZsYXNoIGRyaXZlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGZsYXNoX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fRkxBU0hfSF9fCisjZGVmaW5lIF9fRkxBU0hfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZmxhc2guaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3N5c2N0bC5oPgorI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgRmxhc2hQb3dlck1vZGVTZXQgICAgICAgICAgICAgICBOT1JPTV9GbGFzaFBvd2VyTW9kZVNldAorICAgICNkZWZpbmUgRmxhc2hQb3dlck1vZGVHZXQgICAgICAgICAgICAgICBOT1JPTV9GbGFzaFBvd2VyTW9kZUdldAorICAgICNkZWZpbmUgRmxhc2hQcm90ZWN0aW9uU2V0ICAgICAgICAgICAgICBOT1JPTV9GbGFzaFByb3RlY3Rpb25TZXQKKyAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvbkdldCAgICAgICAgICAgICAgTk9ST01fRmxhc2hQcm90ZWN0aW9uR2V0CisgICAgI2RlZmluZSBGbGFzaFByb3RlY3Rpb25TYXZlICAgICAgICAgICAgIE5PUk9NX0ZsYXNoUHJvdGVjdGlvblNhdmUKKyAgICAjZGVmaW5lIEZsYXNoU2VjdG9yRXJhc2UgICAgICAgICAgICAgICAgTk9ST01fRmxhc2hTZWN0b3JFcmFzZQorICAgICNkZWZpbmUgRmxhc2hQcm9ncmFtICAgICAgICAgICAgICAgICAgICBOT1JPTV9GbGFzaFByb2dyYW0KKyAgICAjZGVmaW5lIEZsYXNoRWZ1c2VSZWFkUm93ICAgICAgICAgICAgICAgTk9ST01fRmxhc2hFZnVzZVJlYWRSb3cKKyAgICAjZGVmaW5lIEZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZSAgICAgTk9ST01fRmxhc2hEaXNhYmxlU2VjdG9yc0ZvcldyaXRlCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSByZXR1cm5lZCBmcm9tIHRoZSBBUEkgZnVuY3Rpb25zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGQVBJX1NUQVRVU19TVUNDRVNTICAgICAweDAwMDAwMDAwICAvLyBGdW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisjZGVmaW5lIEZBUElfU1RBVFVTX0ZTTV9CVVNZICAgIDB4MDAwMDAwMDEgIC8vIEZTTSBpcyBCdXN5CisjZGVmaW5lIEZBUElfU1RBVFVTX0ZTTV9SRUFEWSAgIDB4MDAwMDAwMDIgIC8vIEZTTSBpcyBSZWFkeQorI2RlZmluZSBGQVBJX1NUQVRVU19JTkNPUlJFQ1RfREFUQUJVRkZFUl9MRU5HVEggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzICAvLyBJbmNvcnJlY3QgcGFyYW1ldGVyIHZhbHVlCisjZGVmaW5lIEZBUElfU1RBVFVTX0ZTTV9FUlJPUiAgIDB4MDAwMDAwMDQgIC8vIE9wZXJhdGlvbiBmYWlsZWQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyBwYXNzZWQgdG8gRmxhc2hJbnRFbmFibGUoKSwgRmxhc2hJbnREaXNhYmxlKCkgYW5kIEZsYXNoSW50Q2xlYXIoKSBhbmQKKy8vIHJldHVybmVkIGZyb20gRmxhc2hJbnRTdGF0dXMoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZMQVNIX0lOVF9GU01fRE9ORSAgICAgIDB4MDA0MDAwMDAgIC8vIEZTTSBEb25lIEludGVycnVwdCBNYXNrCisjZGVmaW5lIEZMQVNIX0lOVF9SViAgICAgICAgICAgIDB4MDAwMTAwMDAgIC8vIFJlYWQgVmVyaWZ5IGVycm9yIEludGVycnVwdCBNYXNrCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgcGFzc2VkIHRvIEZsYXNoU2V0UG93ZXJNb2RlKCkgYW5kIHJldHVybmVkIGZyb20gRmxhc2hHZXRQb3dlck1vZGUoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZMQVNIX1BXUl9BQ1RJVkVfTU9ERSAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfUFdSX09GRl9NT0RFICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9QV1JfREVFUF9TVERCWV9NT0RFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHBhc3NlZCB0byBGbGFzaFNldFByb3RlY3Rpb24oKSBhbmQgcmV0dXJuZWQgZnJvbSBGbGFzaEdldFByb3RlY3Rpb24oKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZMQVNIX05PX1BST1RFQ1QgICAgICAgIDB4MDAwMDAwMDAgLy8gU2VjdG9yIG5vdCBwcm90ZWN0ZWQKKyNkZWZpbmUgRkxBU0hfV1JJVEVfUFJPVEVDVCAgICAgMHgwMDAwMDAwMSAvLyBTZWN0b3IgZXJhc2UgYW5kIHByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm90ZWN0ZWQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSB1c2VkIGJ5IHRoZSBmbGFzaCBwcm9ncmFtbWluZyBhbmQgZXJhc2UgZnVuY3Rpb25zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRERSX09GRlNFVCAgICAgICAgICAgICgweDFGODAwMDAwIC0gRkxBU0hNRU1fQkFTRSkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSB1c2VkIGZvciBhY2Nlc3MgdG8gZmFjdG9yeSBjb25maWd1cmF0aW9uIGFyZWEuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGQ0ZHMV9PRkZTRVQgICAgICAgICAgIDB4MTAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lIGZvciB0aGUgY2xvY2sgZnJlcXVlbmNleSBpbnB1dCB0byB0aGUgZmxhc2ggbW9kdWxlIGluIG51bWJlciBvZiBNSHoKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZMQVNIX01PRFVMRV9DTEtfRlJFUSAgNDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGVmaW5lZCB2YWx1ZXMgZm9yIEZsYXNoIFN0YXRlIE1hY2hpbmUgY29tbWFuZHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIGVudW0KK3sKKyAgICBGQVBJX1BST0dSQU1fREFUQSAgICA9IDB4MDAwMiwgLy8hPCBQcm9ncmFtIGRhdGEuCisgICAgRkFQSV9FUkFTRV9TRUNUT1IgICAgPSAweDAwMDYsIC8vITwgRXJhc2Ugc2VjdG9yLgorICAgIEZBUElfRVJBU0VfQkFOSyAgICAgID0gMHgwMDA4LCAvLyE8IEVyYXNlIGJhbmsuCisgICAgRkFQSV9WQUxJREFURV9TRUNUT1IgPSAweDAwMEUsIC8vITwgVmFsaWRhdGUgc2VjdG9yLgorICAgIEZBUElfQ0xFQVJfU1RBVFVTICAgID0gMHgwMDEwLCAvLyE8IENsZWFyIHN0YXR1cy4KKyAgICBGQVBJX1BST0dSQU1fUkVTVU1FICA9IDB4MDAxNCwgLy8hPCBQcm9ncmFtIHJlc3VtZS4KKyAgICBGQVBJX0VSQVNFX1JFU1VNRSAgICA9IDB4MDAxNiwgLy8hPCBFcmFzZSByZXN1bWUuCisgICAgRkFQSV9DTEVBUl9NT1JFICAgICAgPSAweDAwMTgsIC8vITwgQ2xlYXIgbW9yZS4KKyAgICBGQVBJX1BST0dSQU1fU0VDVE9SICA9IDB4MDAyMCwgLy8hPCBQcm9ncmFtIHNlY3Rvci4KKyAgICBGQVBJX0VSQVNFX09UUCAgICAgICA9IDB4MDAzMCAgLy8hPCBFcmFzZSBPVFAuCit9IHRGbGFzaFN0YXRlQ29tbWFuZHNUeXBlOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdmFsdWVzIHdyaXR0ZW4gdG8gdGhlIEZMQVNIX09fRlNNX1dSX0VOQSByZWdpc3RlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRlNNX1JFR19XUlRfRU5BQkxFICAgICA1CisjZGVmaW5lIEZTTV9SRUdfV1JUX0RJU0FCTEUgICAgMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGJhbmsgcG93ZXIgbW9kZSBmaWVsZCB0aGUgRkxBU0hfT19GQkZBTExCQUNLIHJlZ2lzdGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGQkZBTExCQUNLX1NMRUVQICAgICAgIDAKKyNkZWZpbmUgRkJGQUxMQkFDS19ERUVQX1NUREJZICAxCisjZGVmaW5lIEZCRkFMTEJBQ0tfQUNUSVZFICAgICAgMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGJhbmsgZ3JhY2UgcGVyaW9kZSBhbmQgcHVtcCBncmFjZSBwZXJpb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBGTEFTSF9CQUdQICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgRkxBU0hfUEFHUCAgICAgICAgICAgICAweDE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHVzZWQgYnkgdGhlIEZsYXNoUHJvZ3JhbVBhdHRlcm4oKSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUEFUVEVSTl9CSVRTICAgICAgICAgICAweDIwICAvLyBObyBvZiBiaXRzIGluIGRhdGEgcGF0dGVybiB0byBwcm9ncmFtCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgRlcgZmxhZyBiaXRzIGluIHRoZSBGTEFTSF9PX0ZXRkxBRyByZWdpc3RlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRldfV1JUX1RSSU1NRUQgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHVzZWQgYnkgdGhlIGZsYXNoIHByb2dyYW1taW5nIGZ1bmN0aW9ucworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgdm9sYXRpbGUgdWludDhfdCB0RndwV3JpdGVCeXRlOworI2RlZmluZSBGV1BXUklURV9CWVRFX0FERFJFU1MgKCh0RndwV3JpdGVCeXRlICopKChGTEFTSF9CQVNFICsgRkxBU0hfT19GV1BXUklURTApKSkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSBmb3IgZWZ1c2UgaW5zdHJ1Y3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERVTVBXT1JEX0lOU1RSICAgICAgICAgMHgwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lIGZvciBGU00gY29tbWFuZCBleGVjdXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEZMQVNIX0NNRF9FWEVDICAgICAgICAgMHgxNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgc2l6ZSBvZiBhIGZsYXNoIHNlY3RvciBpbiBudW1iZXIgb2YgYnl0ZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzaXplIG9mIGEgZmxhc2ggc2VjdG9yIGluIG51bWJlciBvZiBieXRlcy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzaXplIG9mIGEgZmxhc2ggc2VjdG9yIGluIG51bWJlciBvZiBieXRlcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0ZsYXNoU2VjdG9yU2l6ZUdldCh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJTZWN0b3JTaXplSW5LYnl0ZTsKKworICAgIHVpMzJTZWN0b3JTaXplSW5LYnl0ZSA9IChIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GQ0ZHX0IwX1NTSVpFMCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9GQ0ZHX0IwX1NTSVpFMF9CMF9TRUNUX1NJWkVfTSkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9GQ0ZHX0IwX1NTSVpFMF9CMF9TRUNUX1NJWkVfUzsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGZsYXNoIHNlY3RvciBzaXplIGluIG51bWJlciBvZiBieXRlcy4KKyAgICAvLworICAgIHJldHVybih1aTMyU2VjdG9yU2l6ZUluS2J5dGUgKiAxMDI0KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzaXplIG9mIHRoZSBmbGFzaC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmxhc2ggbWFpbiBiYW5rIGluIG51bWJlciBvZiBieXRlcy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgZmxhc2ggc2l6ZSBpbiBudW1iZXIgb2YgYnl0ZXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitGbGFzaFNpemVHZXQodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyTm9PZlNlY3RvcnM7CisKKyAgICAvLworICAgIC8vIEdldCBudW1iZXIgb2YgZmxhc2ggc2VjdG9ycworICAgIC8vCisgICAgdWkzMk5vT2ZTZWN0b3JzID0gKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZMQVNIX1NJWkUpICYKKyAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRkxBU0hfU0laRV9TRUNUT1JTX00pID4+CisgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRkxBU0hfU0laRV9TRUNUT1JTX1M7CisKKyAgICAvLworICAgIC8vIFJldHVybiBmbGFzaCBzaXplIGluIG51bWJlciBvZiBieXRlcworICAgIC8vCisgICAgcmV0dXJuKHVpMzJOb09mU2VjdG9ycyAqIEZsYXNoU2VjdG9yU2l6ZUdldCgpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHBvd2VyIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBzcGVjaWZpZWQgcG93ZXIgbW9kZS4KKy8vIQorLy8hIEFueSBhY2Nlc3MgdG8gdGhlIGJhbmsgY2F1c2VzIGEgcmVsb2FkIG9mIHRoZSBzcGVjaWZpZWQgYmFuayBncmFjZSBwZXJpb2RlCisvLyEgaW5wdXQgdmFsdWUgaW50byB0aGUgYmFuayBkb3duIGNvdW50ZXIuIEFmdGVyIHRoZSBsYXN0IGFjY2VzcyB0byB0aGUKKy8vISBmbGFzaCBiYW5rLCB0aGUgZG93biBjb3VudGVyIGRlbGF5cyBmcm9tIDAgdG8gMjU1IHByZXNjYWxlZCBIQ0xLIGNsb2NrCisvLyEgY3ljbGVzIGJlZm9yZSBwdXR0aW5nIHRoZSBiYW5rIGludG8gb25lIG9mIHRoZSBmYWxsYmFjayBwb3dlciBtb2RlcyBhcworLy8hIGRldGVybWluZWQgYnkgXGMgdWkzMlBvd2VyTW9kZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIHdoZW4gdGhlCisvLyEgZmFsbGJhY2sgbW9kZSBpcyBub3QgXHJlZiBGTEFTSF9QV1JfQUNUSVZFX01PREUuCisvLyEKKy8vISBOb3RlOiBUaGUgcHJlc2NhbGVkIGNsb2NrIHVzZWQgZm9yIHRoZSBkb3duIGNvdW50ZXIgaXMgYSBjbG9jayBkaXZpZGVkIGJ5CisvLyEgMTYgZnJvbSBpbnB1dCBIQ0xLLiBUaGUgXGMgdWkzMkJhbmtHcmFjZVBlcmlvZGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYKKy8vISBcYyB1aTMyUG93ZXJNb2RlIGlzIGVxdWFsIHRvIFxyZWYgRkxBU0hfUFdSX0FDVElWRV9NT0RFLgorLy8hIEFueSBhY2Nlc3MgdG8gZmxhc2ggbWVtb3J5IGNhdXNlcyB0aGUgcHVtcCBncmFjZSBwZXJpb2RlIGRvd24gY291bnRlciB0bworLy8hIHJlbG9hZCB3aXRoIHZhbHVlIG9mIFxjIHVpMzJQdW1wR3JhY2VQZXJpb2RlLiBBZnRlciB0aGUgYmFuayBoYXMgZ29uZSB0byBzbGVlcCwKKy8vISB0aGUgZG93biBjb3VudGVyIGRlbGF5cyB0aGlzIG51bWJlciBvZiBwcmVzY2FsZWQgSENMSyBjbG9jayBjeWNsZXMgYmVmb3JlCisvLyEgZW50ZXJpbmcgb25lIG9mIHRoZSBjaGFyZ2UgcHVtcCBmYWxsYmFjayBwb3dlciBtb2RlcyBhcyBkZXRlcm1pbmVkIGJ5CisvLyEgXGMgdWkzMlBvd2VyTW9kZS4gVGhlIHByZXNjYWxlZCBjbG9jayB1c2VkIGZvciB0aGUgcHVtcCBncmFjZSBwZXJpb2RlIGRvd24KKy8vISBjb3VudGVyIGlzIGEgY2xvY2sgZGl2aWRlZCBieSAxNiBmcm9tIGlucHV0IEhDTEsuIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQKKy8vISBpZiBcYyB1aTMyUG93ZXJNb2RlIGlzIGVxdWFsIHRvIFxyZWYgRkxBU0hfUFdSX0FDVElWRV9NT0RFLgorLy8hCisvLyEgQ2hhbmdpbmcgdGhlIHBvd2VyIG1vZGUgb2YgdGhlIGZsYXNoIG1vZHVsZSBtdXN0IGJlIGEgcGFydCB3aXRoaW4gYQorLy8hIGRldmljZSBwb3dlciBtb2RlIHRyYW5zaXRpb24gcmVxdWlyaW5nIGNvbmZpZ3VyYXRpb24gb2YgbXVsdGlwbGUgbW9kdWxlcy4KKy8vISBSZWZlciB0byBkb2N1bWVudHMgZGVzY3JpYmluZyB0aGUgZGV2aWNlIHBvd2VyIG1vZGVzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQb3dlck1vZGUgaXMgdGhlIHdhbnRlZCBwb3dlciBtb2RlLgorLy8hIFRoZSBkZWZpbmVkIGZsYXNoIHBvd2VyIG1vZGVzIGFyZToKKy8vISAtIFxyZWYgRkxBU0hfUFdSX0FDVElWRV9NT0RFCisvLyEgLSBccmVmIEZMQVNIX1BXUl9PRkZfTU9ERQorLy8hIC0gXHJlZiBGTEFTSF9QV1JfREVFUF9TVERCWV9NT0RFCisvLyEgXHBhcmFtIHVpMzJCYW5rR3JhY2VQZXJpb2RlIGlzIHRoZSBzdGFydGluZyBjb3VudCB2YWx1ZSBmb3IgdGhlIGJhbmsgZ3JhY2UKKy8vISBwZXJpb2RlIGRvd24gY291bnRlci4KKy8vISBccGFyYW0gdWkzMlB1bXBHcmFjZVBlcmlvZGUgaXMgdGhlIHN0YXJ0aW5nIGNvdW50IHZhbHVlIGZvciB0aGUgcHVtcCBncmFjZQorLy8hIHBlcmlvZGUgZG93biBjb3VudGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgRmxhc2hQb3dlck1vZGVTZXQodWludDMyX3QgdWkzMlBvd2VyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCYW5rR3JhY2VQZXJpb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlB1bXBHcmFjZVBlcmlvZGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgY3VycmVudCBjb25maWd1cmVkIHBvd2VyIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgcG93ZXIgbW9kZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmVkIHBvd2VyIG1vZGUuCisvLyEgVGhlIGRlZmluZWQgcG93ZXIgbW9kZXMgYXJlOgorLy8hIC0gXHJlZiBGTEFTSF9QV1JfQUNUSVZFX01PREUKKy8vISAtIFxyZWYgRkxBU0hfUFdSX09GRl9NT0RFCisvLyEgLSBccmVmIEZMQVNIX1BXUl9ERUVQX1NUREJZX01PREUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgRmxhc2hQb3dlck1vZGVHZXQodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBzZWN0b3IgcHJvdGVjdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHNwZWNpZmllZCBwcm90ZWN0aW9uIG9uIHNwZWNpZmllZCBmbGFzaCBiYW5rCisvLyEgc2VjdG9yLiBBIHNlY3RvciBjYW4gZWl0aGVyIGhhdmUgbm8gcHJvdGVjdGlvbiBvciBoYXZlIHdyaXRlIHByb3RlY3Rpb24KKy8vISB3aGljaCBndWFyZHMgZm9yIGJvdGggcHJvZ3JhbSBhbmQgZXJhc2Ugb2YgdGhhdCBzZWN0b3IuCisvLyEgU2VjdG9yIHByb3RlY3Rpb24gY2FuIG9ubHkgYmUgY2hhbmdlZCBmcm9tIFxyZWYgRkxBU0hfTk9fUFJPVEVDVCB0bworLy8hIFxyZWYgRkxBU0hfV1JJVEVfUFJPVEVDVCEgQWZ0ZXIgd3JpdGUgcHJvdGVjdGluZyBhIHNlY3RvciB0aGlzIHNlY3RvciBjYW4KKy8vISBvbmx5IGJlIHNldCBiYWNrIHRvIHVucHJvdGVjdGVkIGJ5IGEgZGV2aWNlIHJlc2V0LgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZWN0b3JBZGRyZXNzIGlzIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBzZWN0b3IgdG8gcHJvdGVjdC4KKy8vISBccGFyYW0gdWkzMlByb3RlY3RNb2RlIGlzIHRoZSBlbnVtZXJhdGVkIHNlY3RvciBwcm90ZWN0aW9uIG1vZGUuCisvLyEgLSBccmVmIEZMQVNIX05PX1BST1RFQ1QKKy8vISAtIFxyZWYgRkxBU0hfV1JJVEVfUFJPVEVDVAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgRmxhc2hQcm90ZWN0aW9uU2V0KHVpbnQzMl90IHVpMzJTZWN0b3JBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQcm90ZWN0TW9kZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCBzZWN0b3IgcHJvdGVjdGlvbi4KKy8vIQorLy8hIFRoaXMgcmV0dXJuIHRoZSBwcm90ZWN0aW9uIG1vZGUgZm9yIHRoZSBzcGVjaWZpZWQgZmxhc2ggYmFuayBzZWN0b3IuCisvLyEKKy8vISBccGFyYW0gdWkzMlNlY3RvckFkZHJlc3MgaXMgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgc2VjdG9yLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzZWN0b3IgcHJvdGVjdGlvbjoKKy8vISAtIFxyZWYgRkxBU0hfTk9fUFJPVEVDVAorLy8hIC0gXHJlZiBGTEFTSF9XUklURV9QUk9URUNUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEZsYXNoUHJvdGVjdGlvbkdldCh1aW50MzJfdCB1aTMyU2VjdG9yQWRkcmVzcyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNhdmUgc2VjdG9yIHByb3RlY3Rpb24gdG8gbWFrZSBpdCBwZXJtYW5lbnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgc2F2ZSB0aGUgY3VycmVudCBwcm90ZWN0aW9uIG1vZGUgZm9yIHRoZSBzcGVjaWZpZWQKKy8vISBmbGFzaCBiYW5rIHNlY3Rvci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGV4ZWN1dGVkIGZyb20gUk9NIG9yIFNSQU0uCisvLyEKKy8vISBcbm90ZSBBIHdyaXRlIHByb3RlY3RlZCBzZWN0b3Igd2lsbCBiZWNvbWUgcGVybWFuZW50IHdyaXRlCisvLyEgcHJvdGVjdGVkISEgQSBkZXZpY2UgcmVzZXQgd2lsbCBub3QgY2hhbmdlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIQorLy8hCisvLyEgXHBhcmFtIHVpMzJTZWN0b3JBZGRyZXNzIGlzIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBzZWN0b3IgdG8gYmUgcHJvdGVjdGVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIHNlY3RvciBwcm90ZWN0aW9uOgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19TVUNDRVNTIDogU3VjY2Vzcy4KKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfRlNNX0VSUk9SIDogQW4gZXJhc2UgZXJyb3IgaXMgZW5jb3VudGVyZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEZsYXNoUHJvdGVjdGlvblNhdmUodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVja3MgaWYgdGhlIEZsYXNoIHN0YXRlIG1hY2hpbmUgaGFzIGRldGVjdGVkIGFuIGVycm9yLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIEZsYXNoIFN0YXRlIE1hY2hpbmUgaW5kaWNhdGluZyBpZgorLy8hIGFuIGVycm9yIGlzIGRldGVjdGVkIG9yIG5vdC4gUHJpbWFyeSB1c2UgaXMgdG8gY2hlY2sgaWYgYW4gRXJhc2Ugb3IKKy8vISBQcm9ncmFtIG9wZXJhdGlvbiBoYXMgZmFpbGVkLgorLy8hCisvLyEgXG5vdGUgUGxlYXNlIG5vdGUgdGhhdCBjb2RlIGNhbiBub3QgZXhlY3V0ZSBpbiBmbGFzaCB3aGlsZSBhbnkgcGFydCBvZiB0aGUgZmxhc2gKKy8vISBpcyBiZWluZyBwcm9ncmFtbWVkIG9yIGVyYXNlZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIFJPTSBvcgorLy8hIFNSQU0gd2hpbGUgYW55IHBhcnQgb2YgdGhlIGZsYXNoIGlzIGJlaW5nIHByb2dyYW1tZWQgb3IgZXJhc2VkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiBGbGFzaCBzdGF0ZSBtYWNoaW5lOgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19GU01fRVJST1IKKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfU1VDQ0VTUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorRmxhc2hDaGVja0ZzbUZvckVycm9yKHZvaWQpCit7CisgICAgaWYoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRk1TVEFUKSAmIEZMQVNIX0ZNU1RBVF9DU1RBVCkKKyAgICB7CisgICAgICAgIHJldHVybihGQVBJX1NUQVRVU19GU01fRVJST1IpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oRkFQSV9TVEFUVVNfU1VDQ0VTUyk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVja3MgaWYgdGhlIEZsYXNoIHN0YXRlIG1hY2hpbmUgaXMgcmVhZHkuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgRmxhc2ggU3RhdGUgTWFjaGluZSBpbmRpY2F0aW5nIGlmCisvLyEgaXQgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IGNvbW1hbmQgb3Igbm90LiBQcmltYXJ5IHVzZSBpcyB0byBjaGVjayBpZiBhbgorLy8hIEVyYXNlIG9yIFByb2dyYW0gb3BlcmF0aW9uIGhhcyBmaW5pc2hlZC4KKy8vIQorLy8hIFxub3RlIFBsZWFzZSBub3RlIHRoYXQgY29kZSBjYW4gbm90IGV4ZWN1dGUgaW4gZmxhc2ggd2hpbGUgYW55IHBhcnQgb2YgdGhlIGZsYXNoCisvLyEgaXMgYmVpbmcgcHJvZ3JhbW1lZCBvciBlcmFzZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBST00gb3IKKy8vISBTUkFNaCB3aGlsZSBhbnkgcGFydCBvZiB0aGUgZmxhc2ggaXMgYmVpbmcgcHJvZ3JhbW1lZCBvciBlcmFzZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgcmVhZGluZXNzIHN0YXR1cyBvZiBGbGFzaCBzdGF0ZSBtYWNoaW5lOgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19GU01fUkVBRFkKKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfRlNNX0JVU1kKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0ZsYXNoQ2hlY2tGc21Gb3JSZWFkeSh2b2lkKQoreworICAgIGlmKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX1NUQVQpICYgRkxBU0hfU1RBVF9CVVNZKQorICAgIHsKKyAgICAgICAgcmV0dXJuKEZBUElfU1RBVFVTX0ZTTV9CVVNZKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEZBUElfU1RBVFVTX0ZTTV9SRUFEWSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBmbGFzaCBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCByZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMKKy8vISBmdW5jdGlvbiBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMKKy8vISBGTEFTSCBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBGbGFzaEludEVuYWJsZSgpLiBJdCBpcyB0aGUgaW50ZXJydXB0CisvLyEgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlLgorLy8hCisvLyEgXHBhcmFtIHBmbkhhbmRsZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmxhc2gKKy8vISBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0ZsYXNoSW50UmVnaXN0ZXIodm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIoSU5UX0ZMQVNILCBwZm5IYW5kbGVyKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBmbGFzaCBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnRFbmFibGUoSU5UX0ZMQVNIKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgZmxhc2ggaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgdW5yZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIEl0CisvLyEgY2xlYXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgRkxBU0ggaW50ZXJydXB0IG9jY3Vycy4gVGhpcworLy8hIGZ1bmN0aW9uIGFsc28gbWFza3Mgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHNvIHRoYXQKKy8vISB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitGbGFzaEludFVucmVnaXN0ZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdHMuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9GTEFTSCk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3RlcihJTlRfRkxBU0gpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGZsYXNoIGNvbnRyb2xsZXIgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGZsYXNoIGNvbnRyb2xsZXIgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBGTEFTSF9JTlRfRlNNX0RPTkUgOiBGU00gRG9uZSBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIEZMQVNIX0lOVF9SViAgICAgICA6IFJlYWQgdmVyaWZ5IGVycm9yIGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitGbGFzaEludEVuYWJsZSh1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1dSX0VOQSkgPSBGU01fUkVHX1dSVF9FTkFCTEU7CisgICAgSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlNNX1NUX01BQ0hJTkUpIHw9IHVpMzJJbnRGbGFnczsKKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fV1JfRU5BKSA9IEZTTV9SRUdfV1JUX0RJU0FCTEU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGluZGl2aWR1YWwgZmxhc2ggY29udHJvbGxlciBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGZsYXNoIGNvbnRyb2xsZXIgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgRkxBU0hfSU5UX0ZTTV9ET05FIDogRlNNIERvbmUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBGTEFTSF9JTlRfUlYgICAgICAgOiBSZWFkIHZlcmlmeSBlcnJvciBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorRmxhc2hJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fV1JfRU5BKSA9IEZTTV9SRUdfV1JUX0VOQUJMRTsKKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fU1RfTUFDSElORSkgJj0gfnVpMzJJbnRGbGFnczsKKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GU01fV1JfRU5BKSA9IEZTTV9SRUdfV1JUX0RJU0FCTEU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cyBmb3IgdGhlIEZsYXNoLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgYXMgdmFsdWVzIGRlc2NyaWJlZCBpbgorLy8hIFxyZWYgRmxhc2hJbnRFbmFibGUoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0ZsYXNoSW50U3RhdHVzKHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMkludEZsYWdzOworCisgICAgdWkzMkludEZsYWdzID0gMDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgRlNNX0RPTkUgaW50ZXJydXB0IHN0YXR1cyBpcyBzZXQuCisgICAgLy8KKyAgICBpZihIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GRURBQ1NUQVQpICYgRkxBU0hfRkVEQUNTVEFUX0ZTTV9ET05FKQorICAgIHsKKyAgICAgICAgdWkzMkludEZsYWdzID0gRkxBU0hfSU5UX0ZTTV9ET05FOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgUlZGX0lOVCBpbnRlcnJ1cHQgc3RhdHVzIGlzIHNldC4KKyAgICAvLworICAgIGlmKEhXUkVHKEZMQVNIX0JBU0UgKyBGTEFTSF9PX0ZFREFDU1RBVCkgJiBGTEFTSF9GRURBQ1NUQVRfUlZGX0lOVCkKKyAgICB7CisgICAgICAgIHVpMzJJbnRGbGFncyB8PSBGTEFTSF9JTlRfUlY7CisgICAgfQorCisgICAgcmV0dXJuKHVpMzJJbnRGbGFncyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyBmbGFzaCBjb250cm9sbGVyIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBUaGUgZmxhc2ggY29udHJvbGxlciBpbnRlcnJ1cHQgc291cmNlIGlzIGNsZWFyZWQsIHNvIHRoYXQgaXQgbm8gbG9uZ2VyCisvLyEgYXNzZXJ0cy4gVGhpcyBtdXN0IGJlIGRvbmUgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgaXQgZnJvbSBiZWluZworLy8hIGNhbGxlZCBhZ2FpbiBpbW1lZGlhdGVseSB1cG9uIGV4aXQuCisvLyEKKy8vISBcbm90ZSBEdWUgdG8gd3JpdGUgYnVmZmVycyBhbmQgc3luY2hyb25pemVycyBpbiB0aGUgc3lzdGVtIGl0IG1heSB0YWtlIHNldmVyYWwKKy8vISBjbG9jayBjeWNsZXMgZnJvbSBhIHJlZ2lzdGVyIHdyaXRlIGNsZWFyaW5nIGFuIGV2ZW50IGluIGEgbW9kdWxlIGFuZCB1bnRpbCB0aGUKKy8vISBldmVudCBpcyBhY3R1YWxseSBjbGVhcmVkIGluIHRoZSBOVklDIG9mIHRoZSBzeXN0ZW0gQ1BVLiBJdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGNsZWFyIHRoZSBldmVudCBzb3VyY2UgZWFybHkgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKElTUikgdG8gYWxsb3cKKy8vISB0aGUgZXZlbnQgY2xlYXIgdG8gcHJvcGFnYXRlIHRvIHRoZSBOVklDIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSLgorLy8hIEF0IHRoZSBzYW1lIHRpbWUsIGFuIGVhcmx5IGV2ZW50IGNsZWFyIGFsbG93cyBuZXcgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUKKy8vISBwZW5kZWQgaW5zdGVhZCBvZiBpZ25vcmVkIGlmIHRoZSBldmVudCBpcyBjbGVhcmVkIGxhdGVyIGluIHRoZSBJU1IuCisvLyEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCB0aW1lIGhhcyBwYXNzZWQKKy8vISBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUiB0byBhdm9pZCBmYWxzZSByZS10cmlnZ2VyaW5nIG9mIHRoZSBjbGVhcmVkIGV2ZW50LgorLy8hIEEgc2ltcGxlLCBhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgb3B0aW1hbCwgd2F5IG9mIGNsZWFyaW5nIGFuIGV2ZW50IGJlZm9yZQorLy8hIHJldHVybmluZyBmcm9tIHRoZSBJU1IgaXM6CisvLyEgLSMgV3JpdGUgdG8gY2xlYXIgZXZlbnQgKGludGVycnVwdCBzb3VyY2UpLiAoYnVmZmVyZWQgd3JpdGUpCisvLyEgLSMgRHVtbXkgcmVhZCBmcm9tIHRoZSBldmVudCBzb3VyY2UgbW9kdWxlLiAobWFraW5nIHN1cmUgdGhlIHdyaXRlIGhhcyBwcm9wYWdhdGVkKQorLy8hIC0jIFdhaXQgdHdvIHN5c3RlbSBDUFUgY2xvY2sgY3ljbGVzICh1c2VyIGNvZGUgb3IgdHdvIE5PUHMpLiAoYWxsb3dpbmcgY2xlYXJlZCBldmVudCB0byBwcm9wYWdhdGUgdGhyb3VnaCBhbnkgc3luY2hyb25pemVycykKKy8vIQorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBjbGVhcmVkLgorLy8hIENhbiBiZSBhbnkgb2Y6CisvLyEgLSBccmVmIEZMQVNIX0lOVF9GU01fRE9ORQorLy8hIC0gXHJlZiBGTEFTSF9JTlRfUlYKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitGbGFzaEludENsZWFyKHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICB1aW50MzJfdCB1aTMyVGVtcFZhbDsKKworICAgIHVpMzJUZW1wVmFsID0gMDsKKworICAgIGlmKHVpMzJJbnRGbGFncyAmIEZMQVNIX0lOVF9GU01fRE9ORSkKKyAgICB7CisgICAgICAgIHVpMzJUZW1wVmFsID0gRkxBU0hfRkVEQUNTVEFUX0ZTTV9ET05FOworICAgIH0KKworICAgIGlmKHVpMzJJbnRGbGFncyAmIEZMQVNIX0lOVF9SVikKKyAgICB7CisgICAgICAgIHVpMzJUZW1wVmFsIHw9IEZMQVNIX0ZFREFDU1RBVF9SVkZfSU5UOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIGZsYXNoIGludGVycnVwdCBzb3VyY2UuCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GRURBQ1NUQVQpID0gdWkzMlRlbXBWYWw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVyYXNlIGEgZmxhc2ggc2VjdG9yLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBzcGVjaWZpZWQgZmxhc2ggc2VjdG9yLiBUaGUgZnVuY3Rpb24gd2lsbAorLy8hIG5vdCByZXR1cm4gdW50aWwgdGhlIGZsYXNoIHNlY3RvciBoYXMgYmVlbiBlcmFzZWQgb3IgYW4gZXJyb3IgY29uZGl0aW9uCisvLyEgb2NjdXJyZWQuIElmIGZsYXNoIHRvcCBzZWN0b3IgaXMgZXJhc2VkIHRoZSBmdW5jdGlvbiB3aWxsIHByb2dyYW0gdGhlCisvLyEgdGhlIGRldmljZSBzZWN1cml0eSBkYXRhIGJ5dGVzIHdpdGggZGVmYXVsdCB2YWx1ZXMuIFRoZSBkZXZpY2Ugc2VjdXJpdHkKKy8vISBkYXRhIGxvY2F0ZWQgaW4gdGhlIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24gYXJlYSBvZiB0aGUgZmxhc2ggdG9wIHNlY3RvciwKKy8vISBtdXN0IGhhdmUgdmFsaWQgdmFsdWVzIGF0IGFsbCB0aW1lcy4gVGhlc2UgdmFsdWVzIGFmZmVjdCB0aGUgY29uZmlndXJhdGlvbgorLy8hIG9mIHRoZSBkZXZpY2UgZHVyaW5nIGJvb3QuCisvLyEKKy8vISBcbm90ZSBQbGVhc2Ugbm90ZSB0aGF0IGNvZGUgY2FuIG5vdCBleGVjdXRlIGluIGZsYXNoIHdoaWxlIGFueSBwYXJ0IG9mIHRoZSBmbGFzaAorLy8hIGlzIGJlaW5nIHByb2dyYW1tZWQgb3IgZXJhc2VkLiBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBleGVjdXRlZCBmcm9tIFJPTQorLy8hIG9yIFNSQU0uCisvLyEKKy8vISBccGFyYW0gdWkzMlNlY3RvckFkZHJlc3MgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgaW4gZmxhc2ggb2YgdGhlIHNlY3RvciB0byBiZQorLy8hIGVyYXNlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBzZWN0b3IgZXJhc2U6CisvLyEgLSBccmVmIEZBUElfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICA6IFN1Y2Nlc3MuCisvLyEgLSBccmVmIEZBUElfU1RBVFVTX0lOQ09SUkVDVF9EQVRBQlVGRkVSX0xFTkdUSCA6IEludmFsaWQgYXJndW1lbnQuCisvLyEgLSBccmVmIEZBUElfU1RBVFVTX0ZTTV9FUlJPUiAgICAgICAgICAgICAgICAgICA6IEEgcHJvZ3JhbW1pbmcgZXJyb3IgaXMgZW5jb3VudGVyZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEZsYXNoU2VjdG9yRXJhc2UodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFByb2dyYW1zIHVucHJvdGVjdGVkIG1haW4gYmFuayBmbGFzaCBzZWN0b3JzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHByb2dyYW0gYSBzZXF1ZW5jZSBvZiBieXRlcyBpbnRvIHRoZSBvbi1jaGlwIGZsYXNoLgorLy8hIFByb2dyYW1taW5nIGVhY2ggbG9jYXRpb24gY29uc2lzdHMgb2YgdGhlIHJlc3VsdCBvZiBhbiBBTkQgb3BlcmF0aW9uCisvLyEgb2YgdGhlIG5ldyBkYXRhIGFuZCB0aGUgZXhpc3RpbmcgZGF0YTsgaW4gb3RoZXIgd29yZHMgYml0cyB0aGF0IGNvbnRhaW4KKy8vISAxIGNhbiByZW1haW4gMSBvciBiZSBjaGFuZ2VkIHRvIDAsIGJ1dCBiaXRzIHRoYXQgYXJlIDAgY2Fubm90IGJlIGNoYW5nZWQKKy8vISB0byAxLiAgVGhlcmVmb3JlLCBhIGJ5dGUgY2FuIGJlIHByb2dyYW1tZWQgbXVsdGlwbGUgdGltZXMgYXMgbG9uZyBhcyB0aGVzZQorLy8hIHJ1bGVzIGFyZSBmb2xsb3dlZDsgaWYgYSBwcm9ncmFtIG9wZXJhdGlvbiBhdHRlbXB0cyB0byBjaGFuZ2UgYSAwIGJpdCB0bworLy8hIGEgMSBiaXQsIHRoYXQgYml0IHdpbGwgbm90IGhhdmUgaXRzIHZhbHVlIGNoYW5nZWQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiB1bnRpbCB0aGUgZGF0YSBoYXMgYmVlbiBwcm9ncmFtbWVkIG9yIGFuCisvLyEgcHJvZ3JhbW1pbmcgZXJyb3IgaGFzIG9jY3VycmVkLgorLy8hCisvLyEgXG5vdGUgUGxlYXNlIG5vdGUgdGhhdCBjb2RlIGNhbiBub3QgZXhlY3V0ZSBpbiBmbGFzaCB3aGlsZSBhbnkgcGFydCBvZiB0aGUgZmxhc2gKKy8vISBpcyBiZWluZyBwcm9ncmFtbWVkIG9yIGVyYXNlZC4gVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgZXhlY3V0ZWQgZnJvbSBST00KKy8vISBvciBTUkFNLgorLy8hCisvLyEgVGhlIFxjIHB1aThEYXRhQnVmZmVyIHBvaW50ZXIgY2FuIG5vdCBwb2ludCB0byBmbGFzaC4KKy8vIQorLy8hIFxwYXJhbSBwdWk4RGF0YUJ1ZmZlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgcHJvZ3JhbW1lZC4KKy8vISBccGFyYW0gdWkzMkFkZHJlc3MgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgaW4gZmxhc2ggdG8gYmUgcHJvZ3JhbW1lZC4KKy8vISBccGFyYW0gdWkzMkNvdW50IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcHJvZ3JhbW1lZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIGZsYXNoIHByb2dyYW1taW5nOgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgOiBTdWNjZXNzLgorLy8hIC0gXHJlZiBGQVBJX1NUQVRVU19JTkNPUlJFQ1RfREFUQUJVRkZFUl9MRU5HVEggOiBUb28gbWFueSBieXRlcyB3ZXJlIHJlcXVlc3RlZC4KKy8vISAtIFxyZWYgRkFQSV9TVEFUVVNfRlNNX0VSUk9SICAgICAgICAgICAgICAgICAgIDogQSBwcm9ncmFtbWluZyBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgRmxhc2hQcm9ncmFtKHVpbnQ4X3QgKnB1aThEYXRhQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQWRkcmVzcywgdWludDMyX3QgdWkzMkNvdW50KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZHMgZWZ1c2UgZGF0YSBmcm9tIHNwZWNpZmllZCByb3cuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBvbmUgZWZ1c2Ugcm93LgorLy8hIEl0IGlzIGFzc3VtZWQgdGhhdCBhbnkgcHJldmlvdXMgZWZ1c2Ugb3BlcmF0aW9uIGhhcyBmaW5pc2hlZC4KKy8vIQorLy8hIFxwYXJhbSBwdWkzMkVmdXNlRGF0YSBpcyBwb2ludGVyIHRvIHZhcmlhYmxlIHRvIGJlIHVwZGF0ZWQgd2l0aCBlZnVzZSBkYXRhLgorLy8hIFxwYXJhbSB1aTMyUm93QWRkcmVzcyBpcyB0aGUgZWZ1c2Ugcm93IG51bWJlciB0byBiZSByZWFkLiBGaXJzdCByb3cgaXMgcm93CisvLyEgbnVtYmVyIDAuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgZWZ1c2UgcmVhZCBvcGVyYXRpb24uCisvLyEgLSBcYyBmYWxzZSA6IE9LIHN0YXR1cy4KKy8vISAtIFxjIHRydWUgIDogRXJyb3Igc3RhdHVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGJvb2wgRmxhc2hFZnVzZVJlYWRSb3codWludDMyX3QgKnB1aTMyRWZ1c2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlJvd0FkZHJlc3MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBhbGwgc2VjdG9ycyBmb3IgZXJhc2UgYW5kIHByb2dyYW1taW5nIG9uIHRoZSBhY3RpdmUgYmFuay4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgYWxsIHNlY3RvcnMgZm9yIGVyYXNlIGFuZCBwcm9ncmFtbWluZyBvbiB0aGUgYWN0aXZlCisvLyEgYmFuayBhbmQgZW5hYmxlcyB0aGUgSWRsZSBSZWFkaW5nIFBvd2VyIHJlZHVjdGlvbiBtb2RlIGlmIG5vIGxvdyBwb3dlcgorLy8hIG1vZGUgaXMgY29uZmlndXJlZC4gRnVydGhlcm1vcmUsIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgcHJvdGVjdGlvbiBmcm9tCisvLyEgZXJhc2UgaXMgZW5hYmxlZC4KKy8vIQorLy8hIFxub3RlIFBsZWFzZSBub3RlIHRoYXQgY29kZSBjYW4gbm90IGV4ZWN1dGUgaW4gZmxhc2ggd2hpbGUgYW55IHBhcnQgb2YgdGhlIGZsYXNoCisvLyEgaXMgYmVpbmcgcHJvZ3JhbW1lZCBvciBlcmFzZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBGbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUodm9pZCk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fRmxhc2hQb3dlck1vZGVTZXQKKyAgICAgICAgI3VuZGVmICBGbGFzaFBvd2VyTW9kZVNldAorICAgICAgICAjZGVmaW5lIEZsYXNoUG93ZXJNb2RlU2V0ICAgICAgICAgICAgICAgUk9NX0ZsYXNoUG93ZXJNb2RlU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9GbGFzaFBvd2VyTW9kZUdldAorICAgICAgICAjdW5kZWYgIEZsYXNoUG93ZXJNb2RlR2V0CisgICAgICAgICNkZWZpbmUgRmxhc2hQb3dlck1vZGVHZXQgICAgICAgICAgICAgICBST01fRmxhc2hQb3dlck1vZGVHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ZsYXNoUHJvdGVjdGlvblNldAorICAgICAgICAjdW5kZWYgIEZsYXNoUHJvdGVjdGlvblNldAorICAgICAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvblNldCAgICAgICAgICAgICAgUk9NX0ZsYXNoUHJvdGVjdGlvblNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRmxhc2hQcm90ZWN0aW9uR2V0CisgICAgICAgICN1bmRlZiAgRmxhc2hQcm90ZWN0aW9uR2V0CisgICAgICAgICNkZWZpbmUgRmxhc2hQcm90ZWN0aW9uR2V0ICAgICAgICAgICAgICBST01fRmxhc2hQcm90ZWN0aW9uR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9GbGFzaFByb3RlY3Rpb25TYXZlCisgICAgICAgICN1bmRlZiAgRmxhc2hQcm90ZWN0aW9uU2F2ZQorICAgICAgICAjZGVmaW5lIEZsYXNoUHJvdGVjdGlvblNhdmUgICAgICAgICAgICAgUk9NX0ZsYXNoUHJvdGVjdGlvblNhdmUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ZsYXNoU2VjdG9yRXJhc2UKKyAgICAgICAgI3VuZGVmICBGbGFzaFNlY3RvckVyYXNlCisgICAgICAgICNkZWZpbmUgRmxhc2hTZWN0b3JFcmFzZSAgICAgICAgICAgICAgICBST01fRmxhc2hTZWN0b3JFcmFzZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fRmxhc2hQcm9ncmFtCisgICAgICAgICN1bmRlZiAgRmxhc2hQcm9ncmFtCisgICAgICAgICNkZWZpbmUgRmxhc2hQcm9ncmFtICAgICAgICAgICAgICAgICAgICBST01fRmxhc2hQcm9ncmFtCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9GbGFzaEVmdXNlUmVhZFJvdworICAgICAgICAjdW5kZWYgIEZsYXNoRWZ1c2VSZWFkUm93CisgICAgICAgICNkZWZpbmUgRmxhc2hFZnVzZVJlYWRSb3cgICAgICAgICAgICAgICBST01fRmxhc2hFZnVzZVJlYWRSb3cKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZQorICAgICAgICAjdW5kZWYgIEZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZQorICAgICAgICAjZGVmaW5lIEZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZSAgICAgUk9NX0ZsYXNoRGlzYWJsZVNlY3RvcnNGb3JXcml0ZQorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19GTEFTSF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpby5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjY3MGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncGlvLmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGdwaW8uYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBHUElPCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2dwaW8uaD4KKworLy8gc2VlIGdwaW8uaCBmb3IgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW8uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY3YzNiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpby5oCkBAIC0wLDAgKzEsNzA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZ3Bpby5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMi0wNyAxNjoyMjo1NiArMDEwMCAoTW9uLCAwNyBEZWMgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTI2OQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBHUElPLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBncGlvX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fR1BJT19IX18KKyNkZWZpbmUgX19HUElPX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2dwaW8uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoZWNrIGZvciBsZWdhbCByYW5nZSBvZiB2YXJpYWJsZSBkaW9OdW1iZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgRFJJVkVSTElCX0RFQlVHCisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NoaXBpbmZvLmg+CisKK3N0YXRpYyBib29sCitkaW9OdW1iZXJMZWdhbCggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICB1aW50MzJfdCBpb0NvdW50ID0KKyAgICAgICAgKCggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0lPQ09ORiApICYKKyAgICAgICAgICAgIEZDRkcxX0lPQ09ORl9HUElPX0NOVF9NICkgPj4KKyAgICAgICAgICAgIEZDRkcxX0lPQ09ORl9HUElPX0NOVF9TICkgOworCisgICAgLy8KKyAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIENDMTN4eCA3eDcsIHdoZXJlIElPX0NOVCA9IDMwIGFuZCBsZWdhbCByYW5nZSBpcyAxLi4zMAorICAgIC8vIGZvciBhbGwgb3RoZXIgY2hpcHMgbGVnYWwgcmFuZ2UgaXMgMC4uKGRpb051bWJlci0xKQorICAgIC8vCisgICAgaWYgKCggaW9Db3VudCA9PSAzMCApICYmIENoaXBJbmZvX0NoaXBGYW1pbHlJc0NDMTN4eCgpICkgeworICAgICAgICByZXR1cm4gKCggZGlvTnVtYmVyID4gMCApICYmICggZGlvTnVtYmVyIDw9IGlvQ291bnQgKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICggZGlvTnVtYmVyIDwgaW9Db3VudCApOworICAgIH0KK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyB2YWx1ZXMgZGVmaW5lIHRoZSBiaXQgZmllbGQgZm9yIHRoZSBHUElPIERJT3MuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBHUElPX0RJT18wX01BU0sgICAgICAgICAweDAwMDAwMDAxICAvLyBHUElPIERJTyAwIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMV9NQVNLICAgICAgICAgMHgwMDAwMDAwMiAgLy8gR1BJTyBESU8gMSBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzJfTUFTSyAgICAgICAgIDB4MDAwMDAwMDQgIC8vIEdQSU8gRElPIDIgbWFzaworI2RlZmluZSBHUElPX0RJT18zX01BU0sgICAgICAgICAweDAwMDAwMDA4ICAvLyBHUElPIERJTyAzIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fNF9NQVNLICAgICAgICAgMHgwMDAwMDAxMCAgLy8gR1BJTyBESU8gNCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzVfTUFTSyAgICAgICAgIDB4MDAwMDAwMjAgIC8vIEdQSU8gRElPIDUgbWFzaworI2RlZmluZSBHUElPX0RJT182X01BU0sgICAgICAgICAweDAwMDAwMDQwICAvLyBHUElPIERJTyA2IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fN19NQVNLICAgICAgICAgMHgwMDAwMDA4MCAgLy8gR1BJTyBESU8gNyBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzhfTUFTSyAgICAgICAgIDB4MDAwMDAxMDAgIC8vIEdQSU8gRElPIDggbWFzaworI2RlZmluZSBHUElPX0RJT185X01BU0sgICAgICAgICAweDAwMDAwMjAwICAvLyBHUElPIERJTyA5IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTBfTUFTSyAgICAgICAgMHgwMDAwMDQwMCAgLy8gR1BJTyBESU8gMTAgbWFzaworI2RlZmluZSBHUElPX0RJT18xMV9NQVNLICAgICAgICAweDAwMDAwODAwICAvLyBHUElPIERJTyAxMSBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzEyX01BU0sgICAgICAgIDB4MDAwMDEwMDAgIC8vIEdQSU8gRElPIDEyIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTNfTUFTSyAgICAgICAgMHgwMDAwMjAwMCAgLy8gR1BJTyBESU8gMTMgbWFzaworI2RlZmluZSBHUElPX0RJT18xNF9NQVNLICAgICAgICAweDAwMDA0MDAwICAvLyBHUElPIERJTyAxNCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzE1X01BU0sgICAgICAgIDB4MDAwMDgwMDAgIC8vIEdQSU8gRElPIDE1IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTZfTUFTSyAgICAgICAgMHgwMDAxMDAwMCAgLy8gR1BJTyBESU8gMTYgbWFzaworI2RlZmluZSBHUElPX0RJT18xN19NQVNLICAgICAgICAweDAwMDIwMDAwICAvLyBHUElPIERJTyAxNyBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzE4X01BU0sgICAgICAgIDB4MDAwNDAwMDAgIC8vIEdQSU8gRElPIDE4IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMTlfTUFTSyAgICAgICAgMHgwMDA4MDAwMCAgLy8gR1BJTyBESU8gMTkgbWFzaworI2RlZmluZSBHUElPX0RJT18yMF9NQVNLICAgICAgICAweDAwMTAwMDAwICAvLyBHUElPIERJTyAyMCBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzIxX01BU0sgICAgICAgIDB4MDAyMDAwMDAgIC8vIEdQSU8gRElPIDIxIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjJfTUFTSyAgICAgICAgMHgwMDQwMDAwMCAgLy8gR1BJTyBESU8gMjIgbWFzaworI2RlZmluZSBHUElPX0RJT18yM19NQVNLICAgICAgICAweDAwODAwMDAwICAvLyBHUElPIERJTyAyMyBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzI0X01BU0sgICAgICAgIDB4MDEwMDAwMDAgIC8vIEdQSU8gRElPIDI0IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjVfTUFTSyAgICAgICAgMHgwMjAwMDAwMCAgLy8gR1BJTyBESU8gMjUgbWFzaworI2RlZmluZSBHUElPX0RJT18yNl9NQVNLICAgICAgICAweDA0MDAwMDAwICAvLyBHUElPIERJTyAyNiBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzI3X01BU0sgICAgICAgIDB4MDgwMDAwMDAgIC8vIEdQSU8gRElPIDI3IG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMjhfTUFTSyAgICAgICAgMHgxMDAwMDAwMCAgLy8gR1BJTyBESU8gMjggbWFzaworI2RlZmluZSBHUElPX0RJT18yOV9NQVNLICAgICAgICAweDIwMDAwMDAwICAvLyBHUElPIERJTyAyOSBtYXNrCisjZGVmaW5lIEdQSU9fRElPXzMwX01BU0sgICAgICAgIDB4NDAwMDAwMDAgIC8vIEdQSU8gRElPIDMwIG1hc2sKKyNkZWZpbmUgR1BJT19ESU9fMzFfTUFTSyAgICAgICAgMHg4MDAwMDAwMCAgLy8gR1BJTyBESU8gMzEgbWFzaworI2RlZmluZSBHUElPX0RJT19BTExfTUFTSyAgICAgICAweEZGRkZGRkZGICAvLyBHUElPIGFsbCBESU9zIG1hc2sKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSBjb25zdGFudHMgdGhhdCBzaGFsbCBiZSBwYXNzZWQgYXMgdGhlIG91dHB1dEVuYWJsZVZhbHVlIHBhcmFtZXRlciB0bworLy8gR1BJT19zZXRPdXRwdXRFbmFibGVEaW8oKSBhbmQgd2lsbCBiZSByZXR1cm5lZCBmcm9tIHRoZSBmdW5jdGlvbgorLy8gR1BJT19nZXRPdXRwdXRFbmFibGVEaW8oKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEdQSU9fT1VUUFVUX0RJU0FCTEUgICAgIDB4MDAwMDAwMDAgIC8vIERJTyBvdXRwdXQgaXMgZGlzYWJsZWQKKyNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFICAgICAgMHgwMDAwMDAwMSAgLy8gRElPIG91dHB1dCBpcyBlbmFibGVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWFkcyBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gcmVhZCAoMC0zMSkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgMCBvciAxIHJlZmxlY3RpbmcgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgRElPLgorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19yZWFkTXVsdGlEaW8oKSwgXHJlZiBHUElPX3dyaXRlRGlvKCksIFxyZWYgR1BJT193cml0ZU11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0dQSU9fcmVhZERpbyggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgaW5wdXQgdmFsdWUgZnJvbSB0aGUgc3BlY2lmaWVkIERJTy4KKyAgICAvLworICAgIHJldHVybiAoKCBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RJTjMxXzAgKSA+PiBkaW9OdW1iZXIgKSAmIDEgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVhZHMgdGhlIGlucHV0IHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIERJT3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRoZSBpbnB1dCB2YWx1ZSBmb3IgbXVsdGlwbGUgRElPcy4KKy8vISBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgbm90IHNoaWZ0ZWQgYW5kIGhlbmNlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlvTWFzayBiaXRzLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIHRvIHJlYWQuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBHUElPX0RJT18wX01BU0sKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBHUElPX0RJT18zMV9NQVNLCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYSBiaXQgdmVjdG9yIHJlZmxlY3RpbmcgdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIERJT3MuCisvLyEgLSAwIDogQ29ycmVzcG9uZGluZyBESU8gaXMgbG93LgorLy8hIC0gMSA6IENvcnJlc3BvbmRpbmcgRElPIGlzIGhpZ2guCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX3JlYWREaW8oKSwgXHJlZiBHUElPX3dyaXRlRGlvKCksIFxyZWYgR1BJT193cml0ZU11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0dQSU9fcmVhZE11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGlucHV0IHZhbHVlIGZyb20gdGhlIHNwZWNpZmllZCBESU9zLgorICAgIC8vCisgICAgcmV0dXJuICggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ESU4zMV8wICkgJiBkaW9NYXNrICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFdyaXRlcyBhIHZhbHVlIHRvIGEgc3BlY2lmaWMgRElPLgorLy8hCisvLyEgXHBhcmFtIGRpb051bWJlciBzcGVjaWZpZXMgdGhlIERJTyB0byB1cGRhdGUgKDAtMzEpLgorLy8hIFxwYXJhbSB2YWx1ZSBzcGVjaWZpZXMgdGhlIHZhbHVlIHRvIHdyaXRlCisvLyEgLSAwIDogTG9naWMgemVybyAobG93KQorLy8hIC0gMSA6IExvZ2ljIG9uZSAoaGlnaCkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT193cml0ZU11bHRpRGlvKCksIFxyZWYgR1BJT19yZWFkRGlvKCksIFxyZWYgR1BJT19yZWFkTXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3dyaXRlRGlvKCB1aW50MzJfdCBkaW9OdW1iZXIsIHVpbnQzMl90IHZhbHVlICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisgICAgQVNTRVJUKCggdmFsdWUgPT0gMCApIHx8ICggdmFsdWUgPT0gMSApKTsKKworICAgIC8vCisgICAgLy8gV3JpdGUgMCBvciAxIHRvIHRoZSBieXRlIGluZGV4ZWQgRE9VVCBtYXAKKyAgICAvLworICAgIEhXUkVHQiggR1BJT19CQVNFICsgZGlvTnVtYmVyICkgPSB2YWx1ZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV3JpdGVzIG1hc2tlZCBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgRElPcy4KKy8vIQorLy8hIEVuYWJsZXMgZm9yIHdyaXRpbmcgbXVsdGlwbGUgYml0cyBzaW11bHRhbmVvdXNseS4KKy8vISBUaGUgdmFsdWUgdG8gd3JpdGUgbXVzdCBiZSBzaGlmdGVkIHNvIGl0IG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlvTWFzayBiaXRzLgorLy8hCisvLyEgXG5vdGUgTm90ZSB0aGF0IHRoaXMgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24gYW5kIGhlbmNlIG5vdCBhdG9taWMuCisvLyEKKy8vISBccGFyYW0gZGlvTWFzayBpcyB0aGUgYml0LW1hc2sgcmVwcmVzZW50YXRpb24gb2YgdGhlIERJT3MgdG8gd3JpdGUuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBHUElPX0RJT18wX01BU0sKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBHUElPX0RJT18zMV9NQVNLCisvLyEgXHBhcmFtIGJpdFZlY3RvcmVkVmFsdWUgaG9sZHMgdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgRElPLWJpdHMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fd3JpdGVEaW8oKSwgXHJlZiBHUElPX3JlYWREaW8oKSwgXHJlZiBHUElPX3JlYWRNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fd3JpdGVNdWx0aURpbyggdWludDMyX3QgZGlvTWFzaywgdWludDMyX3QgYml0VmVjdG9yZWRWYWx1ZSApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9VVDMxXzAgKSA9CisgICAgICAgICggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET1VUMzFfMCApICYgfmRpb01hc2sgKSB8CisgICAgICAgICggYml0VmVjdG9yZWRWYWx1ZSAmIGRpb01hc2sgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyBhIHNwZWNpZmljIERJTyB0byAxIChoaWdoKS4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gc2V0ICgwLTMxKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19zZXRNdWx0aURpbygpLCBccmVmIEdQSU9fY2xlYXJEaW8oKSwgXHJlZiBHUElPX2NsZWFyTXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3NldERpbyggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc3BlY2lmaWVkIERJTy4KKyAgICAvLworICAgIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9VVFNFVDMxXzAgKSA9ICggMSA8PCBkaW9OdW1iZXIgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgc3BlY2lmaWVkIERJT3MgdG8gMSAoaGlnaCkuCisvLyEKKy8vISBccGFyYW0gZGlvTWFzayBpcyB0aGUgYml0LW1hc2sgcmVwcmVzZW50YXRpb24gb2YgdGhlIERJT3MgdG8gc2V0LgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX3NldERpbygpLCBccmVmIEdQSU9fY2xlYXJEaW8oKSwgXHJlZiBHUElPX2NsZWFyTXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3NldE11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIERJT3MuCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVRTRVQzMV8wICkgPSBkaW9NYXNrOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgYSBzcGVjaWZpYyBESU8gdG8gMCAobG93KS4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gY2xlYXIgKDAtMzEpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX2NsZWFyTXVsdGlEaW8oKSwgXHJlZiBHUElPX3NldERpbygpLCBccmVmIEdQSU9fc2V0TXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX2NsZWFyRGlvKCB1aW50MzJfdCBkaW9OdW1iZXIgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTnVtYmVyTGVnYWwoIGRpb051bWJlciApKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVRDTFIzMV8wICkgPSAoIDEgPDwgZGlvTnVtYmVyICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aGUgc3BlY2lmaWVkIERJT3MgdG8gMCAobG93KS4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyB0byBjbGVhci4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEdQSU9fRElPXzBfTUFTSworLy8hIC0gLi4uCisvLyEgLSBccmVmIEdQSU9fRElPXzMxX01BU0sKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19jbGVhckRpbygpLCBccmVmIEdQSU9fc2V0RGlvKCksIFxyZWYgR1BJT19zZXRNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fY2xlYXJNdWx0aURpbyggdWludDMyX3QgZGlvTWFzayApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9NYXNrICYgR1BJT19ESU9fQUxMX01BU0sgKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIERJT3MuCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVRDTFIzMV8wICkgPSBkaW9NYXNrOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUb2dnbGVzIGEgc3BlY2lmaWMgRElPLgorLy8hCisvLyEgXHBhcmFtIGRpb051bWJlciBzcGVjaWZpZXMgdGhlIERJTyB0byB0b2dnbGUgKDAtMzEpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX3RvZ2dsZU11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT190b2dnbGVEaW8oIHVpbnQzMl90IGRpb051bWJlciApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBkaW9OdW1iZXJMZWdhbCggZGlvTnVtYmVyICkpOworCisgICAgLy8KKyAgICAvLyBUb2dnbGUgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVRUR0wzMV8wICkgPSAoIDEgPDwgZGlvTnVtYmVyICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRvZ2dsZXMgdGhlIHNwZWNpZmllZCBESU9zLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIHRvIHRvZ2dsZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEdQSU9fRElPXzBfTUFTSworLy8hIC0gLi4uCisvLyEgLSBccmVmIEdQSU9fRElPXzMxX01BU0sKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT190b2dnbGVEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitHUElPX3RvZ2dsZU11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgLy8KKyAgICAvLyBUb2dnbGUgdGhlIERJT3MuCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0RPVVRUR0wzMV8wICkgPSBkaW9NYXNrOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBvdXRwdXQgZW5hYmxlIHN0YXR1cyBvZiBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb3V0cHV0IGVuYWJsZSBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgRElPLgorLy8hIFRoZSBESU8gY2FuIGJlIGNvbmZpZ3VyZWQgYXMgZWl0aGVyIGlucHV0IG9yIG91dHB1dCB1bmRlciBzb2Z0d2FyZSBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIGRpb051bWJlciBzcGVjaWZpZXMgdGhlIERJTyB0byBnZXQgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyBmcm9tICgwLTMxKS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBvbmUgb2YgdGhlIGVudW1lcmF0ZWQgZGF0YSB0eXBlcyAoMCBvciAxKToKKy8vISAtIFxyZWYgR1BJT19PVVRQVVRfRElTQUJMRSA6IERJTyBvdXRwdXQgaXMgZGlzYWJsZWQuCisvLyEgLSBccmVmIEdQSU9fT1VUUFVUX0VOQUJMRSAgOiBESU8gb3V0cHV0IGlzIGVuYWJsZWQuCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX2dldE91dHB1dEVuYWJsZU11bHRpRGlvKCksIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVEaW8oKSwgXHJlZiBHUElPX3NldE91dHB1dEVuYWJsZU11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0dQSU9fZ2V0T3V0cHV0RW5hYmxlRGlvKCB1aW50MzJfdCBkaW9OdW1iZXIgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTnVtYmVyTGVnYWwoIGRpb051bWJlciApKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBvdXRwdXQgZW5hYmxlIHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICByZXR1cm4gKCggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET0UzMV8wICkgPj4gZGlvTnVtYmVyICkgJiAxICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyBvZiB0aGUgc3BlY2lmaWVkIERJT3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyBmb3IgbXVsdGlwbGUgRElPcy4KKy8vISBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgbm90IHNoaWZ0ZWQgYW5kIGhlbmNlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlvTWFzayBiaXRzLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIHRvIHJldHVybiB0aGUgb3V0cHV0IGVuYWJsZSBzZXR0aW5ncyBmcm9tLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBvdXRwdXQgZW5hYmxlIHNldHRpbmcgZm9yIG11bHRpcGxlIERJT3MgYXMgYSBiaXQgdmVjdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpb01hc2sgYml0cy4KKy8vISAtIDAgOiBDb3JyZXNwb25kaW5nIERJTyBpcyBjb25maWd1cmVkIHdpdGggb3V0cHV0IGRpc2FibGVkLgorLy8hIC0gMSA6IENvcnJlc3BvbmRpbmcgRElPIGlzIGNvbmZpZ3VyZWQgd2l0aCBvdXRwdXQgZW5hYmxlZC4KKy8vIQorLy8hIFxzYSBccmVmIEdQSU9fZ2V0T3V0cHV0RW5hYmxlRGlvKCksIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVEaW8oKSwgXHJlZiBHUElPX3NldE91dHB1dEVuYWJsZU11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0dQSU9fZ2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oIHVpbnQzMl90IGRpb01hc2sgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTWFzayAmIEdQSU9fRElPX0FMTF9NQVNLICk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGVuYWJsZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBESU9zLgorICAgIC8vCisgICAgcmV0dXJuICggSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET0UzMV8wICkgJiBkaW9NYXNrICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgb3V0cHV0IGVuYWJsZSBvZiBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgR1BJTyBvdXRwdXQgZW5hYmxlIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBESU8uCisvLyEgVGhlIERJTyBjYW4gYmUgY29uZmlndXJlZCBhcyBlaXRoZXIgaW5wdXQgb3Igb3V0cHV0IHVuZGVyIHNvZnR3YXJlIGNvbnRyb2wuCisvLyEKKy8vISBccGFyYW0gZGlvTnVtYmVyIHNwZWNpZmllcyB0aGUgRElPIHRvIGNvbmZpZ3VyZSAoMC0zMSkuCisvLyEgXHBhcmFtIG91dHB1dEVuYWJsZVZhbHVlIHNwZWNpZmllcyB0aGUgb3V0cHV0IGVuYWJsZSBzZXR0aW5nIG9mIHRoZSBzcGVjaWZpZWQgRElPOgorLy8hIC0gXHJlZiBHUElPX09VVFBVVF9ESVNBQkxFIDogRElPIG91dHB1dCBpcyBkaXNhYmxlZC4KKy8vISAtIFxyZWYgR1BJT19PVVRQVVRfRU5BQkxFICA6IERJTyBvdXRwdXQgaXMgZW5hYmxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19zZXRPdXRwdXRFbmFibGVNdWx0aURpbygpLCBccmVmIEdQSU9fZ2V0T3V0cHV0RW5hYmxlRGlvKCksIFxyZWYgR1BJT19nZXRPdXRwdXRFbmFibGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fc2V0T3V0cHV0RW5hYmxlRGlvKCB1aW50MzJfdCBkaW9OdW1iZXIsIHVpbnQzMl90IG91dHB1dEVuYWJsZVZhbHVlICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisgICAgQVNTRVJUKCggb3V0cHV0RW5hYmxlVmFsdWUgPT0gR1BJT19PVVRQVVRfRElTQUJMRSApIHx8CisgICAgICAgICAgICggb3V0cHV0RW5hYmxlVmFsdWUgPT0gR1BJT19PVVRQVVRfRU5BQkxFICApICAgICk7CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBiaXQgZm9yIHRoZSBzcGVjaWZpZWQgRElPLgorICAgIC8vCisgICAgSFdSRUdCSVRXKCBHUElPX0JBU0UgKyBHUElPX09fRE9FMzFfMCwgZGlvTnVtYmVyICkgPSBvdXRwdXRFbmFibGVWYWx1ZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlcyB0aGUgb3V0cHV0IGVuYWJsZSBzZXR0aW5nIGZvciBhbGwgc3BlY2lmaWVkIERJT3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBlbmFibGUgc2V0dGluZyBmb3IgdGhlIHNwZWNpZmllZCBESU9zLgorLy8hIFRoZSBvdXRwdXQgZW5hYmxlIHNldHRpbmcgbXVzdCBiZSBzaGlmdGVkIHNvIGl0IG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlvTWFzayBiaXRzLgorLy8hIFRoZSBESU9zIGNhbiBiZSBjb25maWd1cmVkIGFzIGVpdGhlciBhbiBpbnB1dCBvciBvdXRwdXQgdW5kZXIgc29mdHdhcmUgY29udHJvbC4KKy8vIQorLy8hIFxub3RlIE5vdGUgdGhhdCB0aGlzIGlzIGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uIGFuZCBoZW5jZSBub3QgYXRvbWljLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIG9uIHdoaWNoIHRvIGNvbmZpZ3VyZSB0aGUKKy8vISBvdXRwdXQgZW5hYmxlIHNldHRpbmcuIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hIFxwYXJhbSBiaXRWZWN0b3JlZE91dHB1dEVuYWJsZSBob2xkcyB0aGUgb3V0cHV0IGVuYWJsZSBzZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIERJTy1iaXRzOgorLy8hIC0gMCA6IENvcnJlc3BvbmRpbmcgRElPIGlzIGNvbmZpZ3VyZWQgd2l0aCBvdXRwdXQgZGlzYWJsZWQuCisvLyEgLSAxIDogQ29ycmVzcG9uZGluZyBESU8gaXMgY29uZmlndXJlZCB3aXRoIG91dHB1dCBlbmFibGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX3NldE91dHB1dEVuYWJsZURpbygpLCBccmVmIEdQSU9fZ2V0T3V0cHV0RW5hYmxlRGlvKCksIFxyZWYgR1BJT19nZXRPdXRwdXRFbmFibGVNdWx0aURpbygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0dQSU9fc2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oIHVpbnQzMl90IGRpb01hc2ssIHVpbnQzMl90IGJpdFZlY3RvcmVkT3V0cHV0RW5hYmxlICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgSFdSRUcoIEdQSU9fQkFTRSArIEdQSU9fT19ET0UzMV8wICkgPQorICAgICAgICAoIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRE9FMzFfMCApICYgfmRpb01hc2sgKSB8CisgICAgICAgICggYml0VmVjdG9yZWRPdXRwdXRFbmFibGUgJiBkaW9NYXNrICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGV2ZW50IHN0YXR1cyBvZiBhIHNwZWNpZmljIERJTy4KKy8vIQorLy8hIFxwYXJhbSBkaW9OdW1iZXIgc3BlY2lmaWVzIHRoZSBESU8gdG8gZ2V0IHRoZSBldmVudCBzdGF0dXMgZnJvbSAoMC0zMSkuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgZXZlbnQgc3RhdHVzIG9uIHRoZSBzcGVjaWZpZWQgRElPLgorLy8hIC0gMCA6IE5vbi10cmlnZ2VyZWQgZXZlbnQuCisvLyEgLSAxIDogVHJpZ2dlcmVkIGV2ZW50LgorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19nZXRFdmVudE11bHRpRGlvKCksIFxyZWYgR1BJT19jbGVhckV2ZW50RGlvKCksIFxyZWYgR1BJT19jbGVhckV2ZW50TXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorR1BJT19nZXRFdmVudERpbyggdWludDMyX3QgZGlvTnVtYmVyICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb051bWJlckxlZ2FsKCBkaW9OdW1iZXIgKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgZXZlbnQgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIERJTy4KKyAgICAvLworICAgIHJldHVybiAoKCBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0VWRkxBR1MzMV8wICkgPj4gZGlvTnVtYmVyICkgJiAxICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGV2ZW50IHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIERJT3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGV2ZW50IHN0YXR1cyBmb3IgbXVsdGlwbGUgRElPcy4KKy8vISBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgbm90IHNoaWZ0ZWQgYW5kIGhlbmNlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGlvTWFzayBiaXRzLgorLy8hCisvLyEgXHBhcmFtIGRpb01hc2sgaXMgdGhlIGJpdC1tYXNrIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBESU9zIHRvIGdldCB0aGUKKy8vISBldmVudCBzdGF0dXMgZnJvbSAoMC0zMSkuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBHUElPX0RJT18wX01BU0sKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBHUElPX0RJT18zMV9NQVNLCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYSBiaXQgdmVjdG9yIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgc3RhdHVzIGNvcnJlc3BvbmRpZyB0byB0aGUgc3BlY2lmaWVkIERJT3MuCisvLyEgLSAwIDogQ29ycmVzcG9uZGluZyBESU8gaGFzIG5vIHRyaWdnZXJlZCBldmVudC4KKy8vISAtIDEgOiBDb3JyZXNwb25kaW5nIERJTyBoYXMgYSB0cmlnZ2VyZWQgZXZlbnQuCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX2dldEV2ZW50RGlvKCksIFxyZWYgR1BJT19jbGVhckV2ZW50RGlvKCksIFxyZWYgR1BJT19jbGVhckV2ZW50TXVsdGlEaW8oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorR1BJT19nZXRFdmVudE11bHRpRGlvKCB1aW50MzJfdCBkaW9NYXNrICkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoIGRpb01hc2sgJiBHUElPX0RJT19BTExfTUFTSyApOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGV2ZW50IHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICByZXR1cm4gKCBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0VWRkxBR1MzMV8wICkgJiBkaW9NYXNrICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aGUgSU8gZXZlbnQgc3RhdHVzIG9mIGEgc3BlY2lmaWMgRElPLgorLy8hCisvLyEgXHBhcmFtIGRpb051bWJlciBzcGVjaWZpZXMgdGhlIERJTyBvbiB3aGljaCB0byBjbGVhciB0aGUgZXZlbnQgc3RhdHVzICgwLTMxKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgR1BJT19jbGVhckV2ZW50TXVsdGlEaW8oKSwgXHJlZiBHUElPX2dldEV2ZW50RGlvKCksIFxyZWYgR1BJT19nZXRFdmVudE11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT19jbGVhckV2ZW50RGlvKCB1aW50MzJfdCBkaW9OdW1iZXIgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTnVtYmVyTGVnYWwoIGRpb051bWJlciApKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIGV2ZW50IHN0YXR1cyBmb3IgdGhlIHNwZWNpZmllZCBESU8uCisgICAgLy8KKyAgICBIV1JFRyggR1BJT19CQVNFICsgR1BJT19PX0VWRkxBR1MzMV8wICkgPSAoIDEgPDwgZGlvTnVtYmVyICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aGUgSU8gZXZlbnQgc3RhdHVzIG9uIHRoZSBzcGVjaWZpZWQgRElPcy4KKy8vIQorLy8hIFxwYXJhbSBkaW9NYXNrIGlzIHRoZSBiaXQtbWFzayByZXByZXNlbnRhdGlvbiBvZiB0aGUgRElPcyBvbiB3aGljaCB0bworLy8hIGNsZWFyIHRoZSBldmVudHMgc3RhdHVzLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJpdHdpc2UgT1InZWQgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgR1BJT19ESU9fMF9NQVNLCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgR1BJT19ESU9fMzFfTUFTSworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBHUElPX2NsZWFyRXZlbnREaW8oKSwgXHJlZiBHUElPX2dldEV2ZW50RGlvKCksIFxyZWYgR1BJT19nZXRFdmVudE11bHRpRGlvKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorR1BJT19jbGVhckV2ZW50TXVsdGlEaW8oIHVpbnQzMl90IGRpb01hc2sgKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCggZGlvTWFzayAmIEdQSU9fRElPX0FMTF9NQVNLICk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBldmVudCBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgRElPcy4KKyAgICAvLworICAgIEhXUkVHKCBHUElPX0JBU0UgKyBHUElPX09fRVZGTEFHUzMxXzAgKSA9IGRpb01hc2s7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19HUElPX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncGlvX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpb19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzJjOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3Bpb19kb2MuaApAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgZ3Bpb19kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgZ3Bpb19hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19ncGlvIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIEdQSU8gbW9kdWxlIGFsbG93cyBzb2Z0d2FyZSB0byBjb250cm9sIHRoZSBwaW5zIG9mIHRoZSBkZXZpY2UgZGlyZWN0bHkgaWYgdGhlIElPQyBtb2R1bGUgaGFzCisvLyEgYmVlbiBjb25maWd1cmVkIHRvIHJvdXRlIHRoZSBHUElPIHNpZ25hbCB0byBhIHBoeXNpY2FsIHBpbiAoY2FsbGVkIERJTykuIEFsdGVybmF0aXZlbHksIHBpbnMgY2FuCisvLyEgYmUgaGFyZHdhcmUgY29udHJvbGxlZCBieSBvdGhlciBwZXJpcGhlcmFsIG1vZHVsZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBJT0MgbW9kdWxlLAorLy8hIGhvdyB0byBjb25maWd1cmUgcGh5c2ljYWwgcGlucywgYW5kIGhvdyB0byBzZWxlY3QgYmV0d2VlbiBzb2Z0d2FyZSBjb250cm9sbGVkIGFuZCBoYXJkd2FyZSBjb250cm9sbGVkLAorLy8hIHNlZSB0aGUgW0lPQyBBUEldKFxyZWYgaW9jX2FwaSkuCisvLyEKKy8vISBUaGUgU3lzdGVtIENQVSBjYW4gYWNjZXNzIHRoZSBHUElPIG1vZHVsZSB0byByZWFkIHRoZSB2YWx1ZSBvZiBhbnkgRElPIG9mIHRoZSBkZXZpY2UgYW5kIGlmIHRoZSBJT0MKKy8vISBtb2R1bGUgaGFzIGJlZW4gY29uZmlndXJlZCBzdWNoIHRoYXQgb25lIG9yIG1vcmUgRElPcyBhcmUgR1BJTyBjb250cm9sbGVkIChzb2Z0d2FyZSBjb250cm9sbGVkKSB0aGUKKy8vISBTeXN0ZW0gQ1BVIGNhbiB3cml0ZSB0aGVzZSBESU9zIHRocm91Z2ggdGhlIEdQSU8gbW9kdWxlLgorLy8hCisvLyEgVGhlIElPQyBtb2R1bGUgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0byBnZW5lcmF0ZSBldmVudHMgb24gZWRnZSBkZXRlY3Rpb24gYW5kIHRoZXNlIGV2ZW50cyBjYW4gYmUKKy8vISByZWFkIGFuZCBjbGVhcmVkIGluIHRoZSBHUElPIG1vZHVsZSBieSB0aGUgU3lzdGVtIENQVS4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19ncGlvX2FwaSBBUEkKKy8vIQorLy8hIFRoZSBBUEkgZnVuY3Rpb25zIGNhbiBiZSBncm91cGVkIGxpa2UgdGhpczoKKy8vIQorLy8hIFNldCBhbmQgZ2V0IGRpcmVjdGlvbiBvZiBESU8gKG91dHB1dCBlbmFibGUpOgorLy8hIC0gXHJlZiBHUElPX3NldE91dHB1dEVuYWJsZURpbygpCisvLyEgLSBccmVmIEdQSU9fc2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oKQorLy8hIC0gXHJlZiBHUElPX2dldE91dHB1dEVuYWJsZURpbygpCisvLyEgLSBccmVmIEdQSU9fZ2V0T3V0cHV0RW5hYmxlTXVsdGlEaW8oKQorLy8hCisvLyEgV3JpdGUgRElPIChyZXF1aXJlcyBJT0MgdG8gYmUgY29uZmlndXJlZCBmb3IgR1BJTyB1c2FnZSk6CisvLyEgLSBccmVmIEdQSU9fd3JpdGVEaW8oKQorLy8hIC0gXHJlZiBHUElPX3dyaXRlTXVsdGlEaW8oKQorLy8hCisvLyEgU2V0LCBjbGVhciwgb3IgdG9nZ2xlIERJTyAocmVxdWlyZXMgSU9DIHRvIGJlIGNvbmZpZ3VyZWQgZm9yIEdQSU8gdXNhZ2UpOgorLy8hIC0gXHJlZiBHUElPX3NldERpbygpCisvLyEgLSBccmVmIEdQSU9fc2V0TXVsdGlEaW8oKQorLy8hIC0gXHJlZiBHUElPX2NsZWFyRGlvKCkKKy8vISAtIFxyZWYgR1BJT19jbGVhck11bHRpRGlvKCkKKy8vISAtIFxyZWYgR1BJT190b2dnbGVEaW8oKQorLy8hIC0gXHJlZiBHUElPX3RvZ2dsZU11bHRpRGlvKCkKKy8vIQorLy8hIFJlYWQgRElPIChldmVuIGlmIElPQyBpcyBOT1QgY29uZmlndXJlZCBmb3IgR1BJTyB1c2FnZTsgaG93ZXZlciwgdGhlIERJTyBtdXN0IGJlIGNvbmZpZ3VyZWQgZm9yIGlucHV0IGVuYWJsZSBpbiBJT0MpOgorLy8hIC0gXHJlZiBHUElPX3JlYWREaW8oKQorLy8hIC0gXHJlZiBHUElPX3JlYWRNdWx0aURpbygpCisvLyEKKy8vISBSZWFkIG9yIGNsZWFyIGV2ZW50cyAoZXZlbiBpZiBJT0MgaXMgTk9UIGNvbmZpZ3VyZWQgZm9yIEdQSU8gdXNhZ2U7IGhvd2V2ZXIsIHRoZSBESU8gbXVzdCBiZSBjb25maWd1cmVkIGZvciBpbnB1dCBlbmFibGUgaW4gSU9DKToKKy8vISAtIFxyZWYgR1BJT19nZXRFdmVudERpbygpCisvLyEgLSBccmVmIEdQSU9fZ2V0RXZlbnRNdWx0aURpbygpCisvLyEgLSBccmVmIEdQSU9fY2xlYXJFdmVudERpbygpCisvLyEgLSBccmVmIEdQSU9fY2xlYXJFdmVudE11bHRpRGlvKCkKKy8vIQorLy8hIFRoZSBbSU9DIEFQSV0oXHJlZiBpb2NfYXBpKSBwcm92aWRlcyB0d28gZnVuY3Rpb25zIGZvciBlYXN5IGNvbmZpZ3VyYXRpb24gb2YgRElPcyBhcyBHUElPIGVuYWJsZWQgdXNpbmcKKy8vISB0eXBpY2FsIHNldHRpbmdzLiBUaGV5IGFsc28gc2VydmUgYXMgZXhhbXBsZXMgb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUgSU9DIGFuZCBHUElPIG1vZHVsZXMgZm9yIEdQSU8gdXNhZ2U6CisvLyEgLSBccmVmIElPQ1BpblR5cGVHcGlvSW5wdXQoKQorLy8hIC0gXHJlZiBJT0NQaW5UeXBlR3Bpb091dHB1dCgpCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYW5hbG9nX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYW5hbG9nX2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDU1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncm91cF9hbmFsb2dfZG9jLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBncm91cF9hbmFsb2dfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGFuYWxvZ19ncm91cAorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2FuYWxvZyBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIEFjY2VzcyB0byByZWdpc3RlcnMgaW4gdGhlIGFuYWxvZyBkb21haW4gb2YgdGhlIGRldmljZSBnb2VzIHRocm91Z2ggbWFzdGVyIG1vZHVsZXMgY29udHJvbGxpbmcgc2xhdmUKKy8vISBtb2R1bGVzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCByZWdpc3RlcnMuIFRoZSBtYXN0ZXIgbW9kdWxlIGlzIGxvY2F0ZWQgaW4gdGhlIGRpZ2l0YWwgZG9tYWluIG9mIHRoZQorLy8hIGRldmljZS4gVGhlIGludGVyZmFjZXMgYmV0d2VlbiBtYXN0ZXIgYW5kIHNsYXZlIG1vZHVsZXMgYXJlIGNhbGxlZCBBREkgKEFuYWxvZy10by1EaWdpdGFsIEludGVyZmFjZSkKKy8vISBhbmQgRERJIChEaWdpdGFsLXRvLURpZ2l0YWwgSW50ZXJmYWNlKSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbW9kdWxlIHRvIGFjY2VzcyBhbmQgdGh1cyB0aGUgc2xhdmUKKy8vISBtb2R1bGVzIGFyZSByZWZlcnJlZCB0byBhcyBBREkgc2xhdmUgYW5kIERESSBzbGF2ZS4KKy8vIQorLy8hIFRoZSBBREkgYW5kIERESSBBUElzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZXNlIHJlZ2lzdGVyczoKKy8vISAtIDxhIGhyZWY9Ii4uL3JlZ2lzdGVyX2Rlc2NyaXB0aW9ucy9BTkFUT1BfTU1BUC9BRElfMl9SRUZTWVMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPkFESV8yX1JFRlNZUzwvYT4gOiBSZWZlcmVuY2UgU3lzdGVtIGZvciBnZW5lcmF0aW5nIHJlZmVyZW5jZSB2b2x0YWdlcyBhbmQgcmVmZXJlbmNlIGN1cnJlbnRzLgorLy8hICAgLSBSZWZlcmVuY2Ugc3lzdGVtIGNvbnRyb2wKKy8vISAgIC0gU09DIExETyBjb250cm9sCisvLyEgLSA8YSBocmVmPSIuLi9yZWdpc3Rlcl9kZXNjcmlwdGlvbnMvQU5BVE9QX01NQVAvQURJXzNfUkVGU1lTLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5BRElfM19SRUZTWVM8L2E+IDogUmVmZXJlbmNlIFN5c3RlbSBmb3IgZ2VuZXJhdGluZyByZWZlcmVuY2Ugdm9sdGFnZXMgYW5kIHJlZmVyZW5jZSBjdXJyZW50cy4KKy8vISAgIC0gUmVmZXJlbmNlIHN5c3RlbSBjb250cm9sCisvLyEgICAtIERDL0RDIGNvbnRyb2wKKy8vISAtIDxhIGhyZWY9Ii4uL3JlZ2lzdGVyX2Rlc2NyaXB0aW9ucy9BTkFUT1BfTU1BUC9BRElfNF9BVVguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPkFESV80X0FVWDwvYT4gOiBDb250cm9sbGluZyBhbmFsb2cgcGVyaXBoZXJhbHMgb2YgQVVYLgorLy8hICAgLSBNdWx0aXBsZXhlcnMKKy8vISAgIC0gQ3VycmVudCBzb3VyY2UKKy8vISAgIC0gQ29tcGFyYXRvcnMKKy8vISAgIC0gQURDcworLy8hIC0gPGEgaHJlZj0iLi4vcmVnaXN0ZXJfZGVzY3JpcHRpb25zL0FOQVRPUF9NTUFQL0RESV8wX09TQy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+RERJXzBfT1NDPC9hPiA6IENvbnRyb2xsaW5nIHRoZSBvc2NpbGxhdG9ycyAodmlhIEFVWCBkb21haW4pCisvLyEKKy8vISBUaGUgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIG9mIENQVSBtZW1vcnkgbWFwIGRvY3VtZW50IHRoZSBBREkvRERJIG1hc3RlcnMuIFRoZSByZWdpc3RlciBkZXNjcmlwdGlvbnMgb2YKKy8vISBhbmFsb2cgbWVtb3J5IG1hcCBkb2N1bWVudCB0aGUgQURJL0RESSBzbGF2ZXMuIFRoZSBBREkvRERJIEFQSXMgYWxsb3cgdGhlIHByb2dyYW1tZXIgdG8gZm9jdXMgb24gdGhlCisvLyEgc2xhdmUgcmVnaXN0ZXJzIG9mIGludGVyZXN0IHdpdGhvdXQgYmVpbmcgY29uY2VybmVkIHdpdGggdGhlIEFESS9EREkgbWFzdGVyIHBhcnQgb2YgdGhlIGludGVyZmFjZS4KKy8vIQorLy8hIEFsdGhvdWdoIHRoZSBBREkvRERJIEFQSXMgbWFrZSB0aGUgbWFzdGVyICJ0cmFuc3BhcmVudCIgaXQgY2FuIGJlIHVzZWZ1bCB0byBrbm93IGEgZmV3IGRldGFpbHMgYWJvdXQKKy8vISB0aGUgQURJL0RESSBwcm90b2NvbCBhbmQgaG93IHRoZSBtYXN0ZXIgaGFuZGxlcyB0cmFuc2FjdGlvbnMgYXMgaXQgY2FuIGFmZmVjdCBob3cgdGhlIHN5c3RlbSBDUFUgcGVyZm9ybXMuCisvLyEgLSBBREkgcHJvdG9jb2wgdXNlcyA4LWJpdCB3cml0ZSBidXMgY29tcGFyZWQgdG8gMzItYml0IHdyaXRlIGJ1cyBpbiBEREkuIEFESSBwcm90b2NvbCB1c2VzIDQtYml0IHJlYWQKKy8vISAgIGJ1cyBjb21wYXJlZCB0byAxNi1iaXQgcmVhZCBidXMgaW4gRERJLiBIZW5jZSBhIDMyLWJpdCByZWFkIGZyb20gYW4gQURJIHJlZ2lzdGVyIGlzIHRyYW5zbGF0ZWQgaW50byA4CisvLyEgICB0cmFuc2FjdGlvbnMgaW4gdGhlIEFESSBwcm90b2NvbC4KKy8vISAtIE9uZSB0cmFuc2FjdGlvbiBvbiB0aGUgQURJL0RESSBwcm90b2NvbCB0YWtlcyBzZXZlcmFsIGNsb2NrIGN5Y2xlcyBmb3IgdGhlIG1hc3RlciB0byBjb21wbGV0ZS4KKy8vISAtIEFjY2VzcyB0byBBVVggQURJL0RESSByZXF1aXJlcyB1c2Ugb2YgYSBzZW1hcGhvcmUuIFRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IERyaXZlckxpYiB3aGljaCB1c2VzCisvLyEgICBccmVmIEF1eEFkaURkaVNhZmVXcml0ZSgpIGFuZCBccmVmIEF1eEFkaURkaVNhZmVSZWFkKCkgd2hlbmV2ZXIgQVVYIGlzIGFjY2Vzc2VkLgorLy8hIC0gQURJIHNsYXZlIHJlZ2lzdGVycyBhcmUgOC1iaXQgd2lkZS4KKy8vISAtIERESSBzbGF2ZSByZWdpc3RlcnMgYXJlIDMyLWJpdCB3aWRlLgorLy8hIC0gQURJL0RESSBtYXN0ZXIgc3VwcG9ydHMgbXVsdGlwbGUgZGF0YSB3aWR0aCBhY2Nlc3NlcyBzZWVuIGZyb20gdGhlIHN5c3RlbSBDUFUKKy8vISAgIChob3dldmVyLCBub3QgYWxsIGJpdCB3aWR0aCBhY2Nlc3NlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBBUElzKToKKy8vISAgIC0gUmVhZDogOCwgMTYsIDMyLWJpdAorLy8hICAgLSBXcml0ZQorLy8hICAgICAtIERpcmVjdCAod3JpdGUsIHNldCwgY2xlYXIpOiA4LCAxNiwgMzItYml0CisvLyEgICAgIC0gTWFza2VkOiA0LCA4LCAxNi1iaXQKKy8vIQorLy8hIE1ha2luZyBwb3N0ZWQvYnVmZmVyZWQgd3JpdGVzIGZyb20gdGhlIHN5c3RlbSBDUFUgKGRlZmF1bHQpIHRvIHRoZSBBREkvRERJIGFsbG93cyB0aGUgc3lzdGVtIENQVSB0byBjb250aW51ZQorLy8hIHdoaWxlIHRoZSBBREkvRERJIG1hc3RlciBoYW5kbGVzIHRoZSB0cmFuc2FjdGlvbnMgb24gdGhlIEFESS9EREkgcHJvdG9jb2wuIElmIHVzaW5nIG5vbi1wb3N0ZWQvbm9uLWJ1ZmZlcmVkCisvLyEgd3JpdGVzIHRoZSBzeXN0ZW0gQ1BVIHdpbGwgd2FpdCBmb3IgQURJL0RESSBtYXN0ZXIgdG8gY29tcGxldGUgdGhlIHRyYW5zYWN0aW9ucyB0byB0aGUgc2xhdmUgYmVmb3JlIGNvbnRpbnVpbmcKKy8vISBleGVjdXRpb24uCisvLyEKKy8vISBSZWFkaW5nIGZyb20gQURJL0RESSByZXF1aXJlcyB0aGF0IGFsbCB0cmFuc2FjdGlvbnMgb24gdGhlIEFESS9EREkgcHJvdG9jb2wgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzeXN0ZW0gQ1BVCisvLyEgcmVjZWl2ZXMgdGhlIHJlc3BvbnNlIHRodXMgdGhlIHByb2dyYW1tZXIgbXVzdCB1bmRlcnN0YW5kIHRoYXQgdGhlIHJlc3BvbnNlIHRpbWUgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzCisvLyEgcmVhZC4gSG93ZXZlciwgZHVlIHRvIHRoZSAnc2V0JywgJ2NsZWFyJyBhbmQgJ21hc2tlZCB3cml0ZScgZmVhdHVyZXMgb2YgdGhlIEFESS9EREkgbW9zdCB3cml0ZXMgY2FuIGJlIGRvbmUKKy8vISB3aXRob3V0IHRoZSB0eXBpY2FsIHJlYWQtbW9kaWZ5LXdyaXRlIHNlcXVlbmNlIHRodXMgcmVkdWNpbmcgdGhlIG5lZWQgZm9yIHJlYWRzIHRvIGEgbWluaW11bS4KKy8vIQorLy8hIENvbnNlcXVlbnRseSwgaWYgbWFraW5nIHBvc3RlZC9idWZmZXJlZCB3cml0ZXMgdGhlbiB0aGUgd3JpdHRlbiB2YWx1ZSB3aWxsIG5vdCB0YWtlIGVmZmVjdCBpbiB0aGUKKy8vISBhbmFsb2cgZG9tYWluIHVudGlsIHNvbWUgcG9pbnQgbGF0ZXIgaW4gdGltZS4gQW4gYWx0ZXJuYXRpdmUgdG8gbm9uLXBvc3RlZC9ub24tYnVmZmVyZWQgd3JpdGVzIC0gaW4gb3JkZXIgdG8gbWFrZQorLy8hIHN1cmUgYSB3cml0dGVuIHZhbHVlIGhhcyB0YWtlbiBlZmZlY3QgLSBpcyB0byByZWFkIGZyb20gdGhlIHNhbWUgQURJL0RESSBhcyB0aGUgd3JpdGUgYXMgdGhpcyB3aWxsIGtlZXAgdGhlIHN5c3RlbSBDUFUKKy8vISB3YWl0aW5nIHVudGlsIGJvdGggdGhlIHdyaXRlIGFuZCB0aGUgcmVhZCBoYXZlIGNvbXBsZXRlZC4KKy8vIQorLy8hIFxub3RlCisvLyEgRG8gTk9UIHVzZSBtYXNrZWQgd3JpdGUgd2hlbiB3cml0aW5nIGJpdCBmaWVsZHMgc3Bhbm5pbmcgdGhlICJtYXNrZWQgd3JpdGUgYm91bmRhcnkiIGkuZS4gdGhlIHdpZGVzdCBwb3NzaWJsZQorLy8hIG1hc2tlZCB3cml0ZSB0aGF0IHRoZSBwcm90b2NvbCBzdXBwb3J0cyAoQURJID0gNCBiaXRzLCBEREkgPSAxNiBiaXRzKS4gVGhpcyB3aWxsIHB1dCB0aGUgZGV2aWNlIGludG8gYQorLy8hIHRlbXBvcmFyeSBzdGF0ZSAtIHdoaWNoIGlzIHBvdGVudGlhbGx5IGhhcm1mdWwgdG8gdGhlIGRldmljZSAtIGFzIHRoZSBiaXQgZmllbGQgd2lsbCBiZSB3cml0dGVuIG92ZXIgdHdvIHRyYW5zYWN0aW9ucy4KKy8vISBUaHVzIHRvIHVzZSBtYXNrZWQgd3JpdGVzOgorLy8hIC0gRm9yIEFESSB0aGUgYml0IGZpZWxkKHMpIG11c3QgYmUgd2l0aGluIGJpdCAwIHRvIDMgKFJFR1szOjBdKSBvciBiaXQgNCB0byA3IChSRUdbNzo0XSkuCisvLyEgLSBGb3IgRERJIHRoZSBiaXQgZmllbGQocykgbXVzdCBiZSB3aXRoaW4gYml0IDAgdG8gMTUgKFJFR1sxNTowXSkgb3IgYml0IDE2IHRvIDMxIChSRUdbMzE6MTZdKS4KKy8vIQorLy8hIFxub3RlCisvLyEgSWYgbWFza2VkIHdyaXRlIGlzIG5vdCBhbGxvd2VkLCBhIHJlZ3VsYXIgcmVhZC1tb2RpZnktd3JpdGUgaXMgbmVjZXNzYXJ5LgorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2Fvbl9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2dyb3VwX2Fvbl9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTIxZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYW9uX2RvYy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBncm91cF9hb25fZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGFvbl9ncm91cAorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX2FvbiBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSBBbHdheXMtT04gKEFPTikgdm9sdGFnZSBkb21haW4gY29udGFpbnMgdGhlIEFVWCBwb3dlciBkb21haW4sIEFPTiBwb3dlciBkb21haW4sIGFuZCBKVEFHIHBvd2VyIGRvbWFpbi4KKy8vISBUaGUgQU9OIEFQSSBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBBT04gcG93ZXIgZG9tYWluLiBGb3IgZnVuY3Rpb25zIGFjY2Vzc2luZyB0aGUgQVVYIHBvd2VyIGRvbWFpbgorLy8hIHNlZSB0aGUgW0FVWCBBUEldKEByZWYgYXV4X2dyb3VwKS4KKy8vIQorLy8hIFRoZSBBT04gcG93ZXIgZG9tYWluIGNvbnRhaW5zIGNpcmN1aXRyeSB0aGF0IGlzIGFsd2F5cyBlbmFibGVkLCBleGNlcHQgZm9yIHRoZSBzaHV0ZG93biBtb2RlCisvLyEgKGRpZ2l0YWwgc3VwcGx5IGlzIG9mZiksIGFuZCB0aGUgQU9OIHBvd2VyIGRvbWFpbiBpcyBjbG9ja2VkIGF0IDMyLWtIei4KKy8vIQorLy8hIFRoZSBBT04gQVBJIGFjY2Vzc2VzIHRoZSBBT04gcmVnaXN0ZXJzIHRocm91Z2ggYSBjb21tb24gbW9kdWxlIGNhbGxlZCBBT04gSW50ZXJmYWNlIChBT04gSUYpIHdoaWNoIGhhbmRsZXMgdGhlCisvLyEgYWN0dWFsIHRyYW5zYWN0aW9ucyB0b3dhcmRzIHRoZSBtdWNoIHNsb3dlciBBT04gcmVnaXN0ZXJzLiBCZWNhdXNlIGFjY2Vzc2luZyBBT04gY2FuIGNhdXNlIGEgc2lnbmlmaWNhbnQKKy8vISBkZWxheSBpbiB0ZXJtcyBvZiBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyBpdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYmFzaWNzIGFib3V0IGhvdyB0aGUgQU9OIElGCisvLyEgb3BlcmF0ZXMuIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgYSBmZXcgb2YgdGhlIG1vc3QgcmVsZXZhbnQgcHJvcGVydGllcyBvZiB0aGUgQU9OIElGIHNlZW4gZnJvbSB0aGUgc3lzdGVtIENQVToKKy8vISAtIFx0aV9ib2xke1NoYWRvdyByZWdpc3RlcnN9OiBUaGUgc3lzdGVtIENQVSBhY3R1YWxseSBhY2Nlc3NlcyBhIHNldCBvZiAic2hhZG93IHJlZ2lzdGVycyIgd2hpY2ggYXJlIGJlaW5nIHN5bmNocm9uaXplZCB0byB0aGUgQU9OIHJlZ2lzdGVycworLy8hICAgYnkgdGhlIEFPTiBJRiBldmVyeSBBT04gY2xvY2sgY3ljbGUuCisvLyEgICAtIFdyaXRpbmcgYW4gQU9OIHJlZ2lzdGVyIHZpYSBBT04gSUYgY2FuIHRha2UgdXAgdG8gb25lIEFPTiBjbG9jayBjeWNsZSBiZWZvcmUgdGFraW5nIGVmZmVjdCBpbiB0aGUgQU9OIGRvbWFpbi4gSG93ZXZlciwgdGhlIHN5c3RlbSBDUFUgY2FuCisvLyEgICAgIGNvbnRpbnVlIGV4ZWN1dGluZyB3aXRob3V0IHdhaXRpbmcgZm9yIHRoaXMuCisvLyEgICAtIFRoZSBBT04gSUYgc3VwcG9ydHMgbXVsdGlwbGUgd3JpdGVzIHdpdGhpbiB0aGUgc2FtZSBBT04gY2xvY2sgY3ljbGUgdGh1cyBzZXZlcmFsIHJlZ2lzdGVycy9iaXQgZmllbGRzIGNhbiBiZSBzeW5jaHJvbml6ZWQgc2ltdWx0YW5lb3VzbHkuCisvLyEgICAtIFJlYWRpbmcgZnJvbSBBT04gSUYgcmV0dXJucyB0aGUgdmFsdWUgZnJvbSBsYXN0IHRpbWUgdGhlIHNoYWRvdyByZWdpc3RlcnMgd2VyZSBzeW5jaHJvbml6ZWQgKGlmIG5vIHdyaXRlcyB0byBBT04gSUYgaGF2ZSBvY2N1cnJlZCBzaW5jZSkKKy8vISAgICAgdGh1cyB0aGUgdmFsdWUgY2FuIGJlIHVwIHRvIG9uZSBBT04gY2xvY2sgY3ljbGUgb2xkLgorLy8hICAgLSBSZWFkaW5nIGZyb20gQU9OIElGIGFmdGVyIGEgd3JpdGUgKGJ1dCBiZWZvcmUgc3luY2hyb25pemF0aW9uIGhhcyBoYXBwZW5lZCkgd2lsbCByZXR1cm4gdGhlIHZhbHVlIGZyb20gdGhlIHNoYWRvdyByZWdpc3RlcgorLy8hICAgICBhbmQgbm90IHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlIEFPTiByZWdpc3Rlci4gVGh1cyBkb2luZyBtdWx0aXBsZSByZWFkLW1vZGlmeS13cml0ZXMgd2l0aGluIG9uZSBBT04gY2xvY2sgY3ljbGUgaXMgc3VwcG9ydGVkLgorLy8hIC0gXHRpX2JvbGR7UmVhZCBkZWxheX06IER1ZSB0byBhbiBhc3luY2hyb25vdXMgaW50ZXJmYWNlIHRvIHRoZSBBT04gSUYsIHJlYWRpbmcgQU9OIHJlZ2lzdGVycyB3aWxsIGdlbmVyYXRlIGEgZmV3IHdhaXQgY3ljbGVzIHRodXMgc3RhbGxpbmcKKy8vISAgIHRoZSBzeXN0ZW0gQ1BVIHVudGlsIHRoZSByZWFkIGNvbXBsZXRlcy4gVGhlcmUgaXMgbm8gZGVsYXkgb24gd3JpdGVzIHRvIEFPTiBJRiBpZiB1c2luZyBwb3N0ZWQvYnVmZmVyZWQgd3JpdGVzLgorLy8hIC0gXHRpX2JvbGR7U3luY2hyb25pemluZ306IElmIGl0IGlzIHJlcXVpcmVkIHRoYXQgYSB3cml0ZSB0byBBT04gdGFrZXMgZWZmZWN0IGJlZm9yZSBjb250aW51aW5nIGNvZGUgZXhlY3V0aW9uIGl0IGlzIHBvc3NpYmxlIHRvIGRvIGEgY29uZGl0aW9uYWwgIndhaXQgZm9yCisvLyEgICBzeW5jaHJvbml6YXRpb24iIGJ5IGNhbGxpbmcgXHJlZiBTeXNDdHJsQW9uU3luYygpLiBUaGlzIHdpbGwgd2FpdCBmb3IgYW55IHBlbmRpbmcgd3JpdGVzIHRvIHN5bmNocm9uaXplLgorLy8hIC0gXHRpX2JvbGR7VXBkYXRpbmd9OiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRvIGFuIHVuY29uZGl0aW9uYWwgIndhaXQgZm9yIHN5bmNocm9uaXphdGlvbiIsIGluIGNhc2UgYSBuZXcgcmVhZAorLy8hICAgdmFsdWUgaXMgcmVxdWlyZWQsIGJ5IGNhbGxpbmcgXHJlZiBTeXNDdHJsQW9uVXBkYXRlKCkuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgYWZ0ZXIgd2FrZS11cCB0byBtYWtlIHN1cmUgdGhlIEFPTiBJRiBoYXMgYmVlbgorLy8hICAgc3luY2hyb25pemVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIHJlYWRpbmcgdGhlIHZhbHVlcy4KKy8vIQorLy8hIEJlbG93IGFyZSBhIGZldyBndWlkZWxpbmVzIHRvIHdyaXRlIGVmZmljaWVudCBjb2RlIGZvciBBT04gYWNjZXNzIGJhc2VkIG9uIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBpbnRlcmZhY2UgdG8gdGhlIEFPTiByZWdpc3RlcnMuCisvLyEgLSBBdm9pZCBzeW5jaHJvbml6aW5nIHVubGVzcyByZXF1aXJlZCBieSB0aGUgYXBwbGljYXRpb24uIElmIHN5bmNocm9uaXphdGlvbiBpcyBuZWVkZWQgdGhlbiB0cnkgdG8gZ3JvdXAvYXJyYW5nZSBBT04gd3JpdGVzIHRvCisvLyEgICBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIHN5bmNocm9uaXphdGlvbnMuCisvLyEgLSBJZiBtb2RpZnlpbmcgc2V2ZXJhbCBiaXQgZmllbGRzIHdpdGhpbiBhIHNpbmdsZSBBT04gcmVnaXN0ZXIgaXQgaXMgc2xpZ2h0bHkgZmFzdGVyIHRvIGRvIGEgc2luZ2xlIHJlYWQsIG1vZGlmeSB0aGUgYml0IGZpZWxkcywKKy8vISAgIGFuZCB0aGVuIHdyaXRlIGl0IGJhY2sgcmF0aGVyIHRoYW4gZG9pbmcgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZC1tb2RpZnktd3JpdGVzIChkdWUgdG8gdGhlIHJlYWQgZGVsYXkpLgorLy8hIC0gVXNpbmcgcG9zdGVkL2J1ZmZlcmVkIHdyaXRlcyB0byBBT04gKGRlZmF1bHQpIGxldHMgdGhlIHN5c3RlbSBDUFUgY29udGludWUgZXhlY3V0aW9uIGltbWVkaWF0ZWx5LiBVc2luZyBub24tcG9zdGVkL25vbi1idWZmZXJlZAorLy8hICAgd3JpdGVzIHdpbGwgZ2VuZXJhdGUgYSBkZWxheSBzaW1pbGFyIHRvIGEgcmVhZCBhY2Nlc3MuCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYXV4X2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvZ3JvdXBfYXV4X2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmRhOWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9ncm91cF9hdXhfZG9jLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGdyb3VwX2F1eF9kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgYXV4X2dyb3VwCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfYXV4IEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIEFVWCBpcyBhIGNvbGxlY3RpdmUgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBhbmFsb2cgcGVyaXBoZXJhbHMgKEFEQywgY29tcGFyYXRvcnMsIGFuZCBjdXJyZW50IHNvdXJjZSkgYW5kCisvLyEgdGhlIGRpZ2l0YWwgbW9kdWxlcyBpbiB0aGUgQVVYIHBvd2VyIGRvbWFpbiAoQVVYX1BEKSBzdWNoIGFzIHRoZSBzZW5zb3IgY29udHJvbGxlciwgdGltZXJzLCB0aW1lLXRvLWRpZ2l0YWwKKy8vISBjb252ZXJ0ZXIsIGV0Yy4gQVVYX1BEIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBBT04gdm9sdGFnZSBkb21haW4gb2YgdGhlIGRldmljZS4KKy8vIQorLy8hIFRoZSBzZW5zb3IgY29udHJvbGxlciBoYXMgdGhlIGFiaWxpdHkgdG8KKy8vISBkbyBpdHMgb3duIHBvd2VyIGFuZCBjbG9jayBtYW5hZ2VtZW50IG9mIEFVWF9QRCwgaW5kZXBlbmRlbnRseSBvZiB0aGUgTUNVIGRvbWFpbi4gVGhlIHNlbnNvcgorLy8hIGNvbnRyb2xsZXIgY2FuIGFsc28gY29udGludWUgZG9pbmcgdGFza3Mgd2hpbGUgdGhlIE1DVSBzdWJzeXN0ZW0gaXMgcG93ZXJlZCBkb3duLCBidXQgd2l0aCBsaW1pdGVkCisvLyEgcmVzb3VyY2VzIGNvbXBhcmVkIHRvIHRoZSBsYXJnZXIgTUNVIGRvbWFpbi4KKy8vIQorLy8hIFRoZSBBVVggcG93ZXIgZG9tYWluIGlzIGNvbm5lY3RlZCB0byB0aGUgTUNVIHN5c3RlbSB0aHJvdWdoIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UsIGVuc3VyaW5nCisvLyEgdGhhdCBhbGwgbW9kdWxlcyBjb25uZWN0ZWQgdG8gdGhlIEFVWCBidXMgYXJlIGFjY2Vzc2libGUgZnJvbSB0aGUgc3lzdGVtIENQVS4KKy8vISBBY2Nlc3NpbmcgdGhlIGFuYWxvZyBwZXJpcGhlcmFscyBmcm9tIHRoZSBzeXN0ZW0gQ1BVIG11c3QgYmUgZG9uZSBieSB1c2luZyBUSS1wcm92aWRlZAorLy8hIGRyaXZlcnMgdG8gZW5zdXJlIHByb3BlciBjb250cm9sIG9mIHBvd2VyIG1hbmFnZW1lbnQuCisvLyEKKy8vISBcbm90ZSBUbyBlYXNlIGRldmVsb3BtZW50IG9mIHByb2dyYW0gY29kZSBydW5uaW5nIG9uIHRoZSBzZW5zb3IgY29udHJvbGxlciwgVEkgcHJvdmlkZXMgYSB0b29sCisvLyEgY2hhaW4gZm9yIHdyaXRpbmcgc29mdHdhcmUgZm9yIHRoZSBjb250cm9sbGVyLCBTZW5zb3IgQ29udHJvbGxlciBTdHVkaW8gKFNDUyksIHdoaWNoIGlzIGEgZnVsbHkKKy8vISBpbnRlZ3JhdGVkIHRvb2wgY29uc2lzdGluZyBvZiBhbiBJREUsIGNvbXBpbGVyLCBhc3NlbWJsZXIsIGFuZCBsaW5rZXIuCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTIxODk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpMmMuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMTEtMTYgMTk6NDE6NDcgKzAxMDAgKE1vbiwgMTYgTm92IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDUwOTQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBJMkMgbW9kdWxlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2kyYy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgSTJDTWFzdGVySW5pdEV4cENsaworICAgICNkZWZpbmUgSTJDTWFzdGVySW5pdEV4cENsayAgICAgICAgICAgICBOT1JPTV9JMkNNYXN0ZXJJbml0RXhwQ2xrCisgICAgI3VuZGVmICBJMkNNYXN0ZXJFcnIKKyAgICAjZGVmaW5lIEkyQ01hc3RlckVyciAgICAgICAgICAgICAgICAgICAgTk9ST01fSTJDTWFzdGVyRXJyCisgICAgI3VuZGVmICBJMkNJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgSTJDSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICBOT1JPTV9JMkNJbnRSZWdpc3RlcgorICAgICN1bmRlZiAgSTJDSW50VW5yZWdpc3RlcgorICAgICNkZWZpbmUgSTJDSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICBOT1JPTV9JMkNJbnRVbnJlZ2lzdGVyCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBJbml0aWFsaXplcyB0aGUgSTJDIE1hc3RlciBibG9jaworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyQ01hc3RlckluaXRFeHBDbGsodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJMkNDbGssCisgICAgICAgICAgICAgICAgICAgIGJvb2wgYkZhc3QpCit7CisgICAgdWludDMyX3QgdWkzMlNDTEZyZXE7CisgICAgdWludDMyX3QgdWkzMlRQUjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gTXVzdCBlbmFibGUgdGhlIGRldmljZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAgICAvLworICAgIEkyQ01hc3RlckVuYWJsZShJMkMwX0JBU0UpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGRlc2lyZWQgU0NMIHNwZWVkLgorICAgIC8vCisgICAgaWYoYkZhc3QgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIHVpMzJTQ0xGcmVxID0gNDAwMDAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1aTMyU0NMRnJlcSA9IDEwMDAwMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIENvbXB1dGUgdGhlIGNsb2NrIGRpdmlkZXIgdGhhdCBhY2hpZXZlcyB0aGUgZmFzdGVzdCBzcGVlZCBsZXNzIHRoYW4gb3IKKyAgICAvLyBlcXVhbCB0byB0aGUgZGVzaXJlZCBzcGVlZC4gVGhlIG51bWVyYXRvciBpcyBiaWFzZWQgdG8gZmF2b3IgYSBsYXJnZXIKKyAgICAvLyBjbG9jayBkaXZpZGVyIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBjbG9jayBpcyBhbHdheXMgbGVzcyB0aGFuIG9yIGVxdWFsCisgICAgLy8gdG8gdGhlIGRlc2lyZWQgY2xvY2ssIG5ldmVyIGdyZWF0ZXIuCisgICAgLy8KKyAgICB1aTMyVFBSID0gKCh1aTMySTJDQ2xrICsgKDIgKiAxMCAqIHVpMzJTQ0xGcmVxKSAtIDEpIC8gKDIgKiAxMCAqIHVpMzJTQ0xGcmVxKSkgLSAxOworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01UUFIpID0gdWkzMlRQUjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXRzIHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIEkyQyBNYXN0ZXIgbW9kdWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0kyQ01hc3RlckVycih1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyRXJyOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIHJhdyBlcnJvciBzdGF0ZS4KKyAgICAvLworICAgIHVpMzJFcnIgPSBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NU1RBVCk7CisKKyAgICAvLworICAgIC8vIElmIHRoZSBJMkMgbWFzdGVyIGlzIGJ1c3ksIHRoZW4gYWxsIHRoZSBvdGhlciBzdGF0dXMgYml0cyBhcmUgaW52YWxpZCwKKyAgICAvLyBhbmQgdGhlcmUgaXMgbm8gZXJyb3IgdG8gcmVwb3J0LgorICAgIC8vCisgICAgaWYodWkzMkVyciAmIEkyQ19NU1RBVF9CVVNZKQorICAgIHsKKyAgICAgICAgcmV0dXJuKEkyQ19NQVNURVJfRVJSX05PTkUpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIGVycm9ycy4KKyAgICAvLworICAgIGlmKHVpMzJFcnIgJiAoSTJDX01TVEFUX0VSUiB8IEkyQ19NU1RBVF9BUkJMU1QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuKHVpMzJFcnIgJiAoSTJDX01TVEFUX0FSQkxTVCB8IEkyQ19NU1RBVF9EQVRBQ0tfTiB8IEkyQ19NU1RBVF9BRFJBQ0tfTikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oSTJDX01BU1RFUl9FUlJfTk9ORSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIEkyQyBtb2R1bGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJMkNJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIHVpbnQzMl90IHVpMzJJbnQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgaW50ZXJydXB0IG51bWJlci4KKyAgICAvLworICAgIHVpMzJJbnQgPSBJTlRfSTJDX0lSUTsKKworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgYW4gZXJyb3Igb2NjdXJzLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIodWkzMkludCwgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgSTJDIGludGVycnVwdC4KKyAgICAvLworICAgIEludEVuYWJsZSh1aTMySW50KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBVbnJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIEkyQyBtb2R1bGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJMkNJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHVpbnQzMl90IHVpMzJJbnQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgaW50ZXJydXB0IG51bWJlci4KKyAgICAvLworICAgIHVpMzJJbnQgPSBJTlRfSTJDX0lSUTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RGlzYWJsZSh1aTMySW50KTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKHVpMzJJbnQpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjhiZDUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjLmgKQEAgLTAsMCArMSwxMDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaTJjLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA5LTIxIDE1OjE5OjM2ICswMjAwIChNb24sIDIxIFNlcCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0NjI5CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEkyQy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgaTJjX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fSTJDX0hfXworI2RlZmluZSBfX0kyQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pMmMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfc3lzY3RsLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgSTJDTWFzdGVySW5pdEV4cENsayAgICAgICAgICAgICBOT1JPTV9JMkNNYXN0ZXJJbml0RXhwQ2xrCisgICAgI2RlZmluZSBJMkNNYXN0ZXJFcnIgICAgICAgICAgICAgICAgICAgIE5PUk9NX0kyQ01hc3RlckVycgorICAgICNkZWZpbmUgSTJDSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICBOT1JPTV9JMkNJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgSTJDSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICBOT1JPTV9JMkNJbnRVbnJlZ2lzdGVyCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEkyQyBNYXN0ZXIgY29tbWFuZHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX1NJTkdMRV9TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSTJDX01BU1RFUl9DTURfU0lOR0xFX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfQ09OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9GSU5JU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0VSUk9SX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGIKKyNkZWZpbmUgSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9DT05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX0ZJTklTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfRVJST1JfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEkyQyBNYXN0ZXIgZXJyb3Igc3RhdHVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMkNfTUFTVEVSX0VSUl9OT05FICAgICAwCisjZGVmaW5lIEkyQ19NQVNURVJfRVJSX0FERFJfQUNLIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX01BU1RFUl9FUlJfREFUQV9BQ0sgMHgwMDAwMDAwOAorI2RlZmluZSBJMkNfTUFTVEVSX0VSUl9BUkJfTE9TVCAweDAwMDAwMDEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJMkMgU2xhdmUgYWN0aW9uIHJlcXVlc3RzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMkNfU0xBVkVfQUNUX05PTkUgICAgICAwCisjZGVmaW5lIEkyQ19TTEFWRV9BQ1RfUlJFUSAgICAgIDB4MDAwMDAwMDEgIC8vIE1hc3RlciBoYXMgc2VudCBkYXRhCisjZGVmaW5lIEkyQ19TTEFWRV9BQ1RfVFJFUSAgICAgIDB4MDAwMDAwMDIgIC8vIE1hc3RlciBoYXMgcmVxdWVzdGVkIGRhdGEKKyNkZWZpbmUgSTJDX1NMQVZFX0FDVF9SUkVRX0ZCUiAgMHgwMDAwMDAwNSAgLy8gTWFzdGVyIGhhcyBzZW50IGZpcnN0IGJ5dGUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEkyQyBTbGF2ZSBpbnRlcnJ1cHRzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMkNfU0xBVkVfSU5UX1NUT1AgICAgICAweDAwMDAwMDA0ICAvLyBTdG9wIENvbmRpdGlvbiBJbnRlcnJ1cHQuCisjZGVmaW5lIEkyQ19TTEFWRV9JTlRfU1RBUlQgICAgIDB4MDAwMDAwMDIgIC8vIFN0YXJ0IENvbmRpdGlvbiBJbnRlcnJ1cHQuCisjZGVmaW5lIEkyQ19TTEFWRV9JTlRfREFUQSAgICAgIDB4MDAwMDAwMDEgIC8vIERhdGEgSW50ZXJydXB0LgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vIQorLy8hIFxicmllZiBDaGVja3MgYW4gSTJDIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhIEkyQyBwb3J0IGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGJvb2wKK0kyQ0Jhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4odWkzMkJhc2UgPT0gSTJDMF9CQVNFKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBJbml0aWFsaXplcyB0aGUgSTJDIE1hc3RlciBibG9jay4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgb3BlcmF0aW9uIG9mIHRoZSBJMkMgTWFzdGVyIGJsb2NrLiBVcG9uCisvLyEgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbiBvZiB0aGUgSTJDIGJsb2NrLCB0aGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBzZXQgdGhlCisvLyEgYnVzIHNwZWVkIGZvciB0aGUgbWFzdGVyLCBhbmQgd2lsbCBoYXZlIGVuYWJsZWQgdGhlIEkyQyBNYXN0ZXIgYmxvY2suCisvLyEKKy8vISBJZiB0aGUgcGFyYW1ldGVyIFxjIGJGYXN0IGlzIFxjIHRydWUsIHRoZW4gdGhlIG1hc3RlciBibG9jayB3aWxsIGJlIHNldCB1cAorLy8hIHRvIHRyYW5zZmVyIGRhdGEgYXQgNDAwIGticHM7IG90aGVyd2lzZSwgaXQgd2lsbCBiZSBzZXQgdXAgdG8gdHJhbnNmZXIgZGF0YQorLy8hIGF0IDEwMCBrYnBzLgorLy8hCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkkyQ0NsayBpcyB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgc3VwcGxpZWQgdG8gdGhlIEkyQyBtb2R1bGUuCisvLyEgXHBhcmFtIGJGYXN0IHNldCB1cCBmb3IgZmFzdCBkYXRhIHRyYW5zZmVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEkyQ01hc3RlckluaXRFeHBDbGsodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJMkNDbGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkZhc3QpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIEkyQyBNYXN0ZXIgbW9kdWxlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHN0YXRlIG9mIHRoZSBNYXN0ZXIgbW9kdWxlIHNlbmQgYW5kCisvLyEgcmVjZWl2ZSBvcGVyYXRpb25zLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJDbWQgaXMgdGhlIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSBJMkMgTWFzdGVyIG1vZHVsZQorLy8hIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfU0lOR0xFX1NFTkQKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfU0lOR0xFX1JFQ0VJVkUKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9TVEFSVAorLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0NNRF9CVVJTVF9TRU5EX0NPTlQKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9GSU5JU0gKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9FUlJPUl9TVE9QCisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfU1RBUlQKKy8vISAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9DT05UCisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfRklOSVNICisvLyEgLSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfRVJST1JfU1RPUAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ01hc3RlckNvbnRyb2wodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDbWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCgodWkzMkNtZCA9PSBJMkNfTUFTVEVSX0NNRF9TSU5HTEVfU0VORCkgfHwKKyAgICAvLyAgICAgKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfU0lOR0xFX1JFQ0VJVkUpIHx8IC0+IEVxdWFsIHRvIFNJTkdMRV9TRU5ECisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfU1RBUlQpIHx8CisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfQ09OVCkgfHwKKyAgICAgICAgICAgKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9GSU5JU0gpIHx8CisgICAgICAgICAgICh1aTMyQ21kID09IEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRVJST1JfU1RPUCkgfHwKKyAgICAgICAgICAgKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9TVEFSVCkgfHwKKyAgICAgICAgICAgKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9DT05UKSB8fAorICAgICAgICAgICAodWkzMkNtZCA9PSBJMkNfTUFTVEVSX0NNRF9CVVJTVF9SRUNFSVZFX0ZJTklTSCkgfHwKKyAgICAgICAgICAgKHVpMzJDbWQgPT0gSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9FUlJPUl9TVE9QKSk7CisKKyAgICAvLworICAgIC8vIFNlbmQgdGhlIGNvbW1hbmQuCisgICAgLy8KKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NQ1RSTCkgPSB1aTMyQ21kOworCisgICAgLy8KKyAgICAvLyBEZWxheSBtaW5pbXVtIGZvdXIgY3ljbGVzIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBJMkNfT19NU1RBVAorICAgIC8vIHJlZ2lzdGVyIGhhcyBiZWVuIGNvcnJlY3RseSB1cGRhdGVkIGJlZm9yZSBmdW5jdGlvbiBleGl0CisgICAgLy8KKyAgICBDUFVkZWxheSgyKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgYWRkcmVzcyB0aGF0IHRoZSBJMkMgTWFzdGVyIHdpbGwgcGxhY2Ugb24gdGhlIGJ1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGFkZHJlc3MgdGhhdCB0aGUgSTJDIE1hc3RlciB3aWxsIHBsYWNlIG9uIHRoZQorLy8hIGJ1cyB3aGVuIGluaXRpYXRpbmcgYSB0cmFuc2FjdGlvbi4gV2hlbiB0aGUgXGUgYlJlY2VpdmUgcGFyYW1ldGVyIGlzIHNldAorLy8hIHRvIFxiIHRydWUsIHRoZSBhZGRyZXNzIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgSTJDIE1hc3RlciBpcyBpbml0aWF0aW5nIGEKKy8vISByZWFkIGZyb20gdGhlIHNsYXZlOyBvdGhlcndpc2UgdGhlIGFkZHJlc3Mgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBJMkMKKy8vISBNYXN0ZXIgaXMgaW5pdGlhdGluZyBhIHdyaXRlIHRvIHRoZSBzbGF2ZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hIFxwYXJhbSB1aThTbGF2ZUFkZHIgaXMgYSA3LWJpdCBzbGF2ZSBhZGRyZXNzCisvLyEgXHBhcmFtIGJSZWNlaXZlIGZsYWcgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgc2xhdmUuCisvLyEgLSBcYyB0cnVlICA6IEkyQyBNYXN0ZXIgaXMgaW5pdGlhdGluZyBhIHJlYWQgZnJvbSB0aGUgc2xhdmUuCisvLyEgLSBcYyBmYWxzZSA6IEkyQyBNYXN0ZXIgaXMgaW5pdGlhdGluZyBhIHdyaXRlIHRvIHRoZSBzbGF2ZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNNYXN0ZXJTbGF2ZUFkZHJTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQ4X3QgdWk4U2xhdmVBZGRyLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlJlY2VpdmUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCghKHVpOFNsYXZlQWRkciAmIDB4ODApKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBzbGF2ZSB3aXRoIHdoaWNoIHRoZSBtYXN0ZXIgd2lsbCBjb21tdW5pY2F0ZS4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01TQSkgPSAodWk4U2xhdmVBZGRyIDw8IDEpIHwgYlJlY2VpdmU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIEkyQyBNYXN0ZXIgYmxvY2suCisvLyEKKy8vISBUaGlzIHdpbGwgZW5hYmxlIG9wZXJhdGlvbiBvZiB0aGUgSTJDIE1hc3RlciBibG9jay4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ01hc3RlckVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vIEVuYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBtYXN0ZXIuCisgICAgSFdSRUdCSVRXKEkyQzBfQkFTRSArIEkyQ19PX01DUiwgSTJDX01DUl9NRkVfQklUTikgPSAxOworCisgICAgLy8gRW5hYmxlIHRoZSBtYXN0ZXIgYmxvY2suCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTUNUUkwpID0gSTJDX01DVFJMX1JVTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIEkyQyBtYXN0ZXIgYmxvY2suCisvLyEKKy8vISBUaGlzIHdpbGwgZGlzYWJsZSBvcGVyYXRpb24gb2YgdGhlIEkyQyBtYXN0ZXIgYmxvY2suCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNNYXN0ZXJEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8gRGlzYWJsZSB0aGUgbWFzdGVyIGJsb2NrLgorICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01DVFJMKSA9IDA7CisKKyAgICAvLyBEaXNhYmxlIHRoZSBjbG9jayBmb3IgdGhlIG1hc3Rlci4KKyAgICBIV1JFR0JJVFcoSTJDMF9CQVNFICsgSTJDX09fTUNSLCBJMkNfTUNSX01GRV9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgSTJDIE1hc3RlciBpcyBidXN5LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBvciBub3QgdGhlIEkyQyBNYXN0ZXIgaXMKKy8vISBidXN5IHRyYW5zbWl0dGluZyBvciByZWNlaXZpbmcgZGF0YS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiBJMkMgTWFzdGVyOgorLy8hIC0gXGMgdHJ1ZSAgOiBJMkMgTWFzdGVyIGlzIGJ1c3kuCisvLyEgLSBcYyBmYWxzZSA6IEkyQyBNYXN0ZXIgaXMgbm90IGJ1c3kuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK0kyQ01hc3RlckJ1c3kodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGJ1c3kgc3RhdHVzLgorICAgIC8vCisgICAgaWYoSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTVNUQVQpICYgSTJDX01TVEFUX0JVU1kpCisgICAgeworICAgICAgICByZXR1cm4odHJ1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybihmYWxzZSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIEkyQyBidXMgaXMgYnVzeS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBJMkMgYnVzIGlzIGJ1c3kuCisvLyEgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBhIG11bHRpLW1hc3RlciBlbnZpcm9ubWVudCB0byBkZXRlcm1pbmUgaWYKKy8vISBhbm90aGVyIG1hc3RlciBpcyBjdXJyZW50bHkgdXNpbmcgdGhlIGJ1cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgSTJDIGJ1czoKKy8vISAtIFxjIHRydWUgIDogSTJDIGJ1cyBpcyBidXN5LgorLy8hIC0gXGMgZmFsc2UgOiBJMkMgYnVzIGlzIG5vdCBidXN5LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitJMkNNYXN0ZXJCdXNCdXN5KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBidXMgYnVzeSBzdGF0dXMuCisgICAgLy8KKyAgICBpZihIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19NU1RBVCkgJiBJMkNfTVNUQVRfQlVTQlNZKQorICAgIHsKKyAgICAgICAgcmV0dXJuKHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oZmFsc2UpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVjZWl2ZXMgYSBieXRlIHRoYXQgaGFzIGJlZW4gc2VudCB0byB0aGUgSTJDIE1hc3Rlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmVhZHMgYSBieXRlIG9mIGRhdGEgZnJvbSB0aGUgSTJDIE1hc3RlciBEYXRhIFJlZ2lzdGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGJ5dGUgcmVjZWl2ZWQgZnJvbSBieSB0aGUgSTJDIE1hc3RlciwgY2FzdCBhcyBhbgorLy8hIHVpbnQzMl90LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorSTJDTWFzdGVyRGF0YUdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJlYWQgYSBieXRlLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01EUikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUcmFuc21pdHMgYSBieXRlIGZyb20gdGhlIEkyQyBNYXN0ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgcGxhY2UgdGhlIHN1cHBsaWVkIGRhdGEgaW50byBJMkMgTWFzdGVyIERhdGEgUmVnaXN0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vISBccGFyYW0gdWk4RGF0YSBpcyB0aGUgZGF0YSB0byBiZSB0cmFuc21pdHRlZCBieSB0aGUgSTJDIE1hc3RlcgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ01hc3RlckRhdGFQdXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQ4X3QgdWk4RGF0YSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBieXRlLgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTURSKSA9IHVpOERhdGE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgSTJDIE1hc3RlciBtb2R1bGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gb2J0YWluIHRoZSBlcnJvciBzdGF0dXMgb2YgdGhlIE1hc3RlciBtb2R1bGUgc2VuZAorLy8hIGFuZCByZWNlaXZlIG9wZXJhdGlvbnMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBNYXN0ZXIgbW9kdWxlOgorLy8hIC0gXHJlZiBJMkNfTUFTVEVSX0VSUl9OT05FCisvLyEgLSBccmVmIEkyQ19NQVNURVJfRVJSX0FERFJfQUNLCisvLyEgLSBccmVmIEkyQ19NQVNURVJfRVJSX0RBVEFfQUNLCisvLyEgLSBccmVmIEkyQ19NQVNURVJfRVJSX0FSQl9MT1NUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEkyQ01hc3RlckVycih1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIEkyQyBNYXN0ZXIgaW50ZXJydXB0LgorLy8hCisvLyEgRW5hYmxlcyB0aGUgSTJDIE1hc3RlciBpbnRlcnJ1cHQgc291cmNlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDTWFzdGVySW50RW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBtYXN0ZXIgaW50ZXJydXB0LgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTUlNUikgPSBJMkNfTUlNUl9JTTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIEkyQyBNYXN0ZXIgaW50ZXJydXB0LgorLy8hCisvLyEgRGlzYWJsZXMgdGhlIEkyQyBNYXN0ZXIgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ01hc3RlckludERpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBtYXN0ZXIgaW50ZXJydXB0LgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTUlNUikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgSTJDIE1hc3RlciBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBJMkMgTWFzdGVyIGludGVycnVwdCBzb3VyY2UgaXMgY2xlYXJlZCwgc28gdGhhdCBpdCBubyBsb25nZXIgYXNzZXJ0cy4KKy8vISBUaGlzIG11c3QgYmUgZG9uZSBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCBpdCBmcm9tIGJlaW5nIGNhbGxlZAorLy8hIGFnYWluIGltbWVkaWF0ZWx5IHVwb24gZXhpdC4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDTWFzdGVySW50Q2xlYXIodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgSTJDIG1hc3RlciBpbnRlcnJ1cHQgc291cmNlLgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTUlDUikgPSBJMkNfTUlDUl9JQzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBJMkMgTWFzdGVyIGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBJMkMgTWFzdGVyIG1vZHVsZS4gRWl0aGVyIHRoZQorLy8hIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSBzdGF0dXMgb2YgaW50ZXJydXB0cyB0aGF0IGFyZSBhbGxvd2VkIHRvCisvLyEgcmVmbGVjdCB0byB0aGUgcHJvY2Vzc29yIGNhbiBiZSByZXR1cm5lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgTWFzdGVyIG1vZHVsZS4KKy8vISBccGFyYW0gYk1hc2tlZCBzZWxlY3RzIGVpdGhlciByYXcgb3IgbWFza2VkIGludGVycnVwdCBzdGF0dXMuCisvLyEgLSBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVlc3RlZC4KKy8vISAtIFxjIHRydWUgIDogTWFza2VkIGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWVzdGVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisvLyEgLSBcYyB0cnVlICA6IEFjdGl2ZS4KKy8vISAtIFxjIGZhbHNlIDogTm90IGFjdGl2ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorSTJDTWFzdGVySW50U3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJNYXNrZWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJNYXNrZWQpCisgICAgeworICAgICAgICByZXR1cm4oKEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX01NSVMpKSA/IHRydWUgOiBmYWxzZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybigoSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fTVJJUykpID8gdHJ1ZSA6IGZhbHNlKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIEkyQyBTbGF2ZSBibG9jay4KKy8vIQorLy8hIFRoaXMgd2lsbCBlbmFibGUgb3BlcmF0aW9uIG9mIHRoZSBJMkMgU2xhdmUgYmxvY2suCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNTbGF2ZUVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vIEVuYWJsZSB0aGUgY2xvY2sgdG8gdGhlIHNsYXZlIGJsb2NrLgorICAgIEhXUkVHQklUVyhJMkMwX0JBU0UgKyBJMkNfT19NQ1IsIEkyQ19NQ1JfU0ZFX0JJVE4pID0gMTsKKworICAgIC8vIEVuYWJsZSB0aGUgc2xhdmUuCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0NUTCkgPSBJMkNfU0NUTF9EQTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgSW5pdGlhbGl6ZXMgdGhlIEkyQyBTbGF2ZSBibG9jay4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgb3BlcmF0aW9uIG9mIHRoZSBJMkMgU2xhdmUgYmxvY2suIFVwb24KKy8vISBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIG9mIHRoZSBJMkMgYmxvY2tzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBzZXQKKy8vISB0aGUgc2xhdmUgYWRkcmVzcyBhbmQgaGF2ZSBlbmFibGVkIHRoZSBJMkMgU2xhdmUgYmxvY2suCisvLyEKKy8vISBUaGUgcGFyYW1ldGVyIFxjIHVpOFNsYXZlQWRkciBpcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlCisvLyEgc2xhdmUgYWRkcmVzcyBzZW50IGJ5IGFuIEkyQyBtYXN0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vISBccGFyYW0gdWk4U2xhdmVBZGRyIGlzIHRoZSA3LWJpdCBzbGF2ZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ1NsYXZlSW5pdCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThTbGF2ZUFkZHIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyQ0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCghKHVpOFNsYXZlQWRkciAmIDB4ODApKTsKKworICAgIC8vCisgICAgLy8gTXVzdCBlbmFibGUgdGhlIGRldmljZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAgICAvLworICAgIEkyQ1NsYXZlRW5hYmxlKEkyQzBfQkFTRSk7CisKKyAgICAvLworICAgIC8vIFNldCB1cCB0aGUgc2xhdmUgYWRkcmVzcy4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NPQVIpID0gdWk4U2xhdmVBZGRyOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBJMkMgc2xhdmUgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBzcGVjaWZpZWQgc2xhdmUgYWRkcmVzcy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgU2xhdmUgbW9kdWxlLgorLy8hIFxwYXJhbSB1aThTbGF2ZUFkZHIgaXMgdGhlIDctYml0IHNsYXZlIGFkZHJlc3MKKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDU2xhdmVBZGRyZXNzU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOFNsYXZlQWRkcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgQVNTRVJUKCEodWk4U2xhdmVBZGRyICYgMHg4MCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdXAgdGhlIHByaW1hcnkgc2xhdmUgYWRkcmVzcy4KKyAgICAvLworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NPQVIpID0gdWk4U2xhdmVBZGRyOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgSTJDIHNsYXZlIGJsb2NrLgorLy8hCisvLyEgVGhpcyB3aWxsIGRpc2FibGUgb3BlcmF0aW9uIG9mIHRoZSBJMkMgc2xhdmUgYmxvY2suCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNTbGF2ZURpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLyBEaXNhYmxlIHRoZSBzbGF2ZS4KKyAgICBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TQ1RMKSA9IDB4MDsKKworICAgIC8vIERpc2FibGUgdGhlIGNsb2NrIHRvIHRoZSBzbGF2ZSBibG9jay4KKyAgICBIV1JFR0JJVFcoSTJDMF9CQVNFICsgSTJDX09fTUNSLCBJMkNfTUNSX1NGRV9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIEkyQyBTbGF2ZSBtb2R1bGUgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgYWN0aW9uIHJlcXVlc3RlZCBmcm9tIGEgbWFzdGVyLCBpZiBhbnkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBJMkMgU2xhdmUgbW9kdWxlOgorLy8hIC0gXHJlZiBJMkNfU0xBVkVfQUNUX05PTkUgOiBObyBhY3Rpb24gaGFzIGJlZW4gcmVxdWVzdGVkIG9mIHRoZSBJMkMgU2xhdmUgbW9kdWxlLgorLy8hIC0gXHJlZiBJMkNfU0xBVkVfQUNUX1JSRVEgOiBBbiBJMkMgbWFzdGVyIGhhcyBzZW50IGRhdGEgdG8gdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEgLSBccmVmIEkyQ19TTEFWRV9BQ1RfVFJFUSA6IEFuIEkyQyBtYXN0ZXIgaGFzIHJlcXVlc3RlZCB0aGF0IHRoZSBJMkMgU2xhdmUgbW9kdWxlIHNlbmQgZGF0YS4KKy8vISAtIFxyZWYgSTJDX1NMQVZFX0FDVF9SUkVRX0ZCUiA6IEFuIEkyQyBtYXN0ZXIgaGFzIHNlbnQgZGF0YSB0byB0aGUgSTJDIHNsYXZlCisvLyEgYW5kIHRoZSBmaXJzdCBieXRlIGZvbGxvd2luZyB0aGUgc2xhdmUncyBvd24gYWRkcmVzcyBoYXMgYmVlbiByZWNlaXZlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0kyQ1NsYXZlU3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBzbGF2ZSBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU1NUQVQpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVjZWl2ZXMgYSBieXRlIHRoYXQgaGFzIGJlZW4gc2VudCB0byB0aGUgSTJDIFNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZWFkcyBhIGJ5dGUgb2YgZGF0YSBmcm9tIHRoZSBJMkMgU2xhdmUgRGF0YSBSZWdpc3Rlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgU2xhdmUgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBieXRlIHJlY2VpdmVkIGZyb20gYnkgdGhlIEkyQyBTbGF2ZSwgY2FzdCBhcyBhbgorLy8hIHVpbnQzMl90LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorSTJDU2xhdmVEYXRhR2V0KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmVhZCBhIGJ5dGUuCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0RSKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRyYW5zbWl0cyBhIGJ5dGUgZnJvbSB0aGUgSTJDIFNsYXZlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIHBsYWNlIHRoZSBzdXBwbGllZCBkYXRhIGludG8gSTJDIFNsYXZlIERhdGEgUmVnaXN0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vISBccGFyYW0gdWk4RGF0YSBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGZyb20gdGhlIEkyQyBTbGF2ZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMkNTbGF2ZURhdGFQdXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQ4X3QgdWk4RGF0YSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFdyaXRlIHRoZSBieXRlLgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0RSKSA9IHVpOERhdGE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgaW5kaXZpZHVhbCBJMkMgU2xhdmUgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBFbmFibGVzIHRoZSBpbmRpY2F0ZWQgSTJDIFNsYXZlIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZSBzb3VyY2VzIHRoYXQKKy8vISBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0OyBkaXNhYmxlZCBzb3VyY2VzCisvLyEgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBzbGF2ZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfU1RPUAorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX1NUQVJUCisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfREFUQQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyQ1NsYXZlSW50RW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgdWludDMyX3QgdWkzMlZhbDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQodWkzMkludEZsYWdzICYgKEkyQ19TTEFWRV9JTlRfU1RPUCB8IEkyQ19TTEFWRV9JTlRfU1RBUlQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1NMQVZFX0lOVF9EQVRBKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc2xhdmUgaW50ZXJydXB0LgorICAgIC8vCisgICAgdWkzMlZhbCA9IEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NJTVIpOworICAgIHVpMzJWYWwgfD0gdWkzMkludEZsYWdzOworICAgIEhXUkVHKEkyQzBfQkFTRSArIEkyQ19PX1NJTVIpID0gdWkzMlZhbDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCBJMkMgU2xhdmUgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBEaXNhYmxlcyB0aGUgaW5kaWNhdGVkIEkyQyBTbGF2ZSBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUgc291cmNlcyB0aGF0CisvLyEgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsgZGlzYWJsZWQgc291cmNlcworLy8hIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIFNsYXZlIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9TVE9QCisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfU1RBUlQKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9EQVRBCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDU2xhdmVJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgdWludDMyX3QgdWkzMlZhbDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQodWkzMkludEZsYWdzICYgKEkyQ19TTEFWRV9JTlRfU1RPUCB8IEkyQ19TTEFWRV9JTlRfU1RBUlQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1NMQVZFX0lOVF9EQVRBKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIHNsYXZlIGludGVycnVwdC4KKyAgICAvLworICAgIHVpMzJWYWwgPSBIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TSU1SKTsKKyAgICB1aTMyVmFsICY9IH51aTMySW50RmxhZ3M7CisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0lNUikgPSB1aTMyVmFsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgSTJDIFNsYXZlIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBJMkMgU2xhdmUgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNsZWFyZWQsIHNvIHRoYXQgdGhleSBubworLy8hIGxvbmdlciBhc3NlcnQuIFRoaXMgbXVzdCBiZSBkb25lIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBrZWVwIGl0IGZyb20KKy8vISBiZWluZyBjYWxsZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJDIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGNsZWFyZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9TVE9QCisvLyEgLSBccmVmIEkyQ19TTEFWRV9JTlRfU1RBUlQKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9EQVRBCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJDU2xhdmVJbnRDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMkNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIEkyQyBzbGF2ZSBpbnRlcnJ1cHQgc291cmNlLgorICAgIC8vCisgICAgSFdSRUcoSTJDMF9CQVNFICsgSTJDX09fU0lDUikgPSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgSTJDIFNsYXZlIGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBJMkMgU2xhdmUgbW9kdWxlLiBFaXRoZXIgdGhlIHJhdworLy8hIGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHN0YXR1cyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIGFsbG93ZWQgdG8gcmVmbGVjdCB0bworLy8hIHRoZSBwcm9jZXNzb3IgY2FuIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBTbGF2ZSBtb2R1bGUuCisvLyEgXHBhcmFtIGJNYXNrZWQgc2VsZWN0cyBlaXRoZXIgcmF3IG9yIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hIC0gXGMgZmFsc2UgOiBSYXcgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1ZXN0ZWQuCisvLyEgLSBcYyB0cnVlICA6IE1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVlc3RlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFzIGFuIE9SJ2VkIGNvbWJpbmF0aW9uIG9mOgorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX1NUT1AKKy8vISAtIFxyZWYgSTJDX1NMQVZFX0lOVF9TVEFSVAorLy8hIC0gXHJlZiBJMkNfU0xBVkVfSU5UX0RBVEEKKworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorSTJDU2xhdmVJbnRTdGF0dXModWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYk1hc2tlZCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJDQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJldHVybiBlaXRoZXIgdGhlIGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIGFzCisgICAgLy8gcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYoYk1hc2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybihIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TTUlTKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybihIV1JFRyhJMkMwX0JBU0UgKyBJMkNfT19TUklTKSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgVGhpcyBzZXRzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGFuIEkyQyBpbnRlcnJ1cHQgb2NjdXJzLiBUaGlzIHdpbGwKKy8vISBlbmFibGUgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOyBzcGVjaWZpYyBJMkMKKy8vISBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBJMkNNYXN0ZXJJbnRFbmFibGUoKSBhbmQKKy8vISBccmVmIEkyQ1NsYXZlSW50RW5hYmxlKCkuIElmIG5lY2Vzc2FyeSwgaXQgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyJ3MKKy8vISByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZSB2aWEgXHJlZiBJMkNNYXN0ZXJJbnRDbGVhcigpIGFuZAorLy8hIFxyZWYgSTJDU2xhdmVJbnRDbGVhcigpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBNYXN0ZXIgbW9kdWxlLgorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgSTJDIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMkNJbnRSZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBJMkMgbW9kdWxlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGFuIEkyQyBpbnRlcnJ1cHQKKy8vISBvY2N1cnMuIFRoaXMgd2lsbCBhbHNvIG1hc2sgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyCisvLyEgc28gdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMkMgTWFzdGVyIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxicmllZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJDSW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0kyQ01hc3RlckluaXRFeHBDbGsKKyAgICAgICAgI3VuZGVmICBJMkNNYXN0ZXJJbml0RXhwQ2xrCisgICAgICAgICNkZWZpbmUgSTJDTWFzdGVySW5pdEV4cENsayAgICAgICAgICAgICBST01fSTJDTWFzdGVySW5pdEV4cENsaworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJDTWFzdGVyRXJyCisgICAgICAgICN1bmRlZiAgSTJDTWFzdGVyRXJyCisgICAgICAgICNkZWZpbmUgSTJDTWFzdGVyRXJyICAgICAgICAgICAgICAgICAgICBST01fSTJDTWFzdGVyRXJyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JMkNJbnRSZWdpc3RlcgorICAgICAgICAjdW5kZWYgIEkyQ0ludFJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgSTJDSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICBST01fSTJDSW50UmVnaXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyQ0ludFVucmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBJMkNJbnRVbnJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgSTJDSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICBST01fSTJDSW50VW5yZWdpc3RlcgorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19JMkNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyY19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kyY19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDdmNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJjX2RvYy5oCkBAIC0wLDAgKzEsMTYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaTJjX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBpMmNfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfaTJjIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIEludGVyLUludGVncmF0ZWQgQ2lyY3VpdCAoXGkyYykgQVBJIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgdXNpbmcKKy8vISB0aGUgXHRpX2RldmljZSBcaTJjIG1hc3RlciBhbmQgc2xhdmUgbW9kdWxlLiBGdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHRvIHBlcmZvcm0KKy8vISB0aGUgZm9sbG93aW5nIGFjdGlvbnM6CisvLyEgLSBJbml0aWFsaXplIHRoZSBcaTJjIG1vZHVsZS4KKy8vISAtIFNlbmQgYW5kIHJlY2VpdmUgZGF0YS4KKy8vISAtIE9idGFpbiBzdGF0dXMuCisvLyEgLSBNYW5hZ2UgaW50ZXJydXB0cyBmb3IgdGhlIFxpMmMgbW9kdWxlLgorLy8hCisvLyEgVGhlIFxpMmMgbWFzdGVyIGFuZCBzbGF2ZSBtb2R1bGUgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBjb21tdW5pY2F0ZSB0byBvdGhlciBJQworLy8hIGRldmljZXMgb3ZlciBhbiBcaTJjIGJ1cy4gVGhlIFxpMmMgYnVzIGlzIHNwZWNpZmllZCB0byBzdXBwb3J0IGRldmljZXMgdGhhdCBjYW4KKy8vISBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlICh3cml0ZSBhbmQgcmVhZCkgZGF0YS4gQWxzbywgZGV2aWNlcyBvbiB0aGUgXGkyYyBidXMKKy8vISBjYW4gYmUgZGVzaWduYXRlZCBhcyBlaXRoZXIgYSBtYXN0ZXIgb3IgYSBzbGF2ZS4gVGhlIFx0aV9kZXZpY2UgXGkyYyBtb2R1bGUKKy8vISBzdXBwb3J0cyBib3RoIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhIGFzIGVpdGhlciBhIG1hc3RlciBvciBhIHNsYXZlLCBhbmQgYWxzbworLy8hIHN1cHBvcnQgdGhlIHNpbXVsdGFuZW91cyBvcGVyYXRpb24gYXMgYm90aCBhIG1hc3RlciBhbmQgYSBzbGF2ZS4gRmluYWxseSwgdGhlCisvLyEgXHRpX2RldmljZSBcaTJjIG1vZHVsZSBjYW4gb3BlcmF0ZSBhdCB0d28gc3BlZWRzOiBzdGFuZGFyZCAoMTAwIGtiL3MpIGFuZCBmYXN0CisvLyEgKDQwMCBrYi9zKS4KKy8vIQorLy8hIFRoZSBtYXN0ZXIgYW5kIHNsYXZlIFxpMmMgbW9kdWxlIGNhbiBnZW5lcmF0ZSBpbnRlcnJ1cHRzLiBUaGUgXGkyYyBtYXN0ZXIKKy8vISBtb2R1bGUgZ2VuZXJhdGVzIGludGVycnVwdHMgd2hlbiBhIHRyYW5zbWl0IG9yIHJlY2VpdmUgb3BlcmF0aW9uCisvLyEgY29tcGxldGVzIChvciBhYm9ydHMgZHVlIHRvIGFuIGVycm9yKS4KKy8vISBUaGUgXGkyYyBzbGF2ZSBtb2R1bGUgY2FuIGdlbmVyYXRlIGludGVycnVwdHMgd2hlbiBkYXRhIGlzCisvLyEgc2VudCBvciByZXF1ZXN0ZWQgYnkgYSBtYXN0ZXIgYW5kIHdoZW4gYSBTVEFSVCBvciBTVE9QIGNvbmRpdGlvbiBpcyBwcmVzZW50LgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX2kyY19tYXN0ZXIgTWFzdGVyIE9wZXJhdGlvbnMKKy8vIQorLy8hIFdoZW4gdXNpbmcgdGhpcyBBUEkgdG8gZHJpdmUgdGhlIFxpMmMgbWFzdGVyIG1vZHVsZSwgdGhlIHVzZXIgbXVzdCBmaXJzdAorLy8hIGluaXRpYWxpemUgdGhlIFxpMmMgbWFzdGVyIG1vZHVsZSB3aXRoIGEgY2FsbCB0byBccmVmIEkyQ01hc3RlckluaXRFeHBDbGsoKS4gVGhpcworLy8hIGZ1bmN0aW9uIHNldHMgdGhlIGJ1cyBzcGVlZCBhbmQgZW5hYmxlcyB0aGUgbWFzdGVyIG1vZHVsZS4KKy8vIQorLy8hIFRoZSB1c2VyIG1heSB0cmFuc21pdCBvciByZWNlaXZlIGRhdGEgYWZ0ZXIgdGhlIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gb2YKKy8vISB0aGUgXGkyYyBtYXN0ZXIgbW9kdWxlLiBEYXRhIGlzIHRyYW5zZmVycmVkIGJ5IGZpcnN0IHNldHRpbmcgdGhlIHNsYXZlIGFkZHJlc3MKKy8vISB1c2luZyBccmVmIEkyQ01hc3RlclNsYXZlQWRkclNldCgpLiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB0byBkZWZpbmUgd2hldGhlcgorLy8hIHRoZSB0cmFuc2ZlciBpcyBhIHNlbmQgKGEgd3JpdGUgdG8gdGhlIHNsYXZlIGZyb20gdGhlIG1hc3Rlcikgb3IgYSByZWNlaXZlIChhCisvLyEgcmVhZCBmcm9tIHRoZSBzbGF2ZSBieSB0aGUgbWFzdGVyKS4gVGhlbiwgaWYgY29ubmVjdGVkIHRvIGFuIFxpMmMgYnVzIHRoYXQgaGFzCisvLyEgbXVsdGlwbGUgbWFzdGVycywgdGhlIFx0aV9kZXZpY2UgXGkyYyBtYXN0ZXIgbXVzdCBmaXJzdCBjYWxsIFxyZWYgSTJDTWFzdGVyQnVzQnVzeSgpCisvLyEgYmVmb3JlIHRyeWluZyB0byBpbml0aWF0ZSB0aGUgZGVzaXJlZCB0cmFuc2FjdGlvbi4gQWZ0ZXIgZGV0ZXJtaW5pbmcgdGhhdAorLy8hIHRoZSBidXMgaXMgbm90IGJ1c3ksIGlmIHRyeWluZyB0byBzZW5kIGRhdGEsIHRoZSB1c2VyIG11c3QgY2FsbCB0aGUKKy8vISBccmVmIEkyQ01hc3RlckRhdGFQdXQoKSBmdW5jdGlvbi4gVGhlIHRyYW5zYWN0aW9uIGNhbiB0aGVuIGJlIGluaXRpYXRlZCBvbiB0aGUgYnVzCisvLyEgYnkgY2FsbGluZyB0aGUgXHJlZiBJMkNNYXN0ZXJDb250cm9sKCkgZnVuY3Rpb24gd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKy8vISAgLSBccmVmIEkyQ19NQVNURVJfQ01EX1NJTkdMRV9TRU5ECisvLyEgIC0gXHJlZiBJMkNfTUFTVEVSX0NNRF9TSU5HTEVfUkVDRUlWRQorLy8hICAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfU0VORF9TVEFSVAorLy8hICAtIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9TVEFSVAorLy8hCisvLyEgQW55IG9mIHRoZXNlIGNvbW1hbmRzIHJlc3VsdCBpbiB0aGUgbWFzdGVyIGFyYml0cmF0aW5nIGZvciB0aGUgYnVzLAorLy8hIGRyaXZpbmcgdGhlIHN0YXJ0IHNlcXVlbmNlIG9udG8gdGhlIGJ1cywgYW5kIHNlbmRpbmcgdGhlIHNsYXZlIGFkZHJlc3MgYW5kCisvLyEgZGlyZWN0aW9uIGJpdCBhY3Jvc3MgdGhlIGJ1cy4gVGhlIHJlbWFpbmRlciBvZiB0aGUgdHJhbnNhY3Rpb24gY2FuIHRoZW4gYmUKKy8vISBkcml2ZW4gdXNpbmcgZWl0aGVyIGEgcG9sbGluZyBvciBpbnRlcnJ1cHQtZHJpdmVuIG1ldGhvZC4KKy8vIQorLy8hIEZvciB0aGUgc2luZ2xlIHNlbmQgYW5kIHJlY2VpdmUgY2FzZXMsIHRoZSBwb2xsaW5nIG1ldGhvZCBpbnZvbHZlcyBsb29waW5nCisvLyEgb24gdGhlIHJldHVybiBmcm9tIFxyZWYgSTJDTWFzdGVyQnVzeSgpLiBPbmNlIHRoZSBmdW5jdGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGUgXGkyYworLy8hIG1hc3RlciBpcyBubyBsb25nZXIgYnVzeSwgdGhlIGJ1cyB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZSBhbmQgY2FuIGJlCisvLyEgY2hlY2tlZCBmb3IgZXJyb3JzIHVzaW5nIFxyZWYgSTJDTWFzdGVyRXJyKCkuIElmIHRoZXJlIGFyZSBubyBlcnJvcnMsIHRoZW4gdGhlIGRhdGEKKy8vISBoYXMgYmVlbiBzZW50IG9yIGlzIHJlYWR5IHRvIGJlIHJlYWQgdXNpbmcgXHJlZiBJMkNNYXN0ZXJEYXRhR2V0KCkuIEZvciB0aGUgYnVyc3QKKy8vISBzZW5kIGFuZCByZWNlaXZlIGNhc2VzLCB0aGUgcG9sbGluZyBtZXRob2QgYWxzbyBpbnZvbHZlcyBjYWxsaW5nIHRoZQorLy8hIFxyZWYgSTJDTWFzdGVyQ29udHJvbCgpIGZ1bmN0aW9uIGZvciBlYWNoIGJ5dGUgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQKKy8vISAodXNpbmcgZWl0aGVyIHRoZSBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfQ09OVCBvciBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1JFQ0VJVkVfQ09OVAorLy8hIGNvbW1hbmRzKSwgYW5kIGZvciB0aGUgbGFzdCBieXRlIHNlbnQgb3IgcmVjZWl2ZWQgKHVzaW5nIGVpdGhlciB0aGUKKy8vISBccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRklOSVNIIG9yIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9GSU5JU0gKKy8vISBjb21tYW5kcykuCisvLyEKKy8vISBJZiBhbnkgZXJyb3IgaXMgZGV0ZWN0ZWQgZHVyaW5nIHRoZSBidXJzdCB0cmFuc2ZlciwKKy8vISB0aGUgYXBwcm9wcmlhdGUgc3RvcCBjb21tYW5kIChccmVmIEkyQ19NQVNURVJfQ01EX0JVUlNUX1NFTkRfRVJST1JfU1RPUCBvcgorLy8hIFxyZWYgSTJDX01BU1RFUl9DTURfQlVSU1RfUkVDRUlWRV9FUlJPUl9TVE9QKSBzaG91bGQgYmUgdXNlZCB0byBjYWxsIHRoZQorLy8hIFxyZWYgSTJDTWFzdGVyQ29udHJvbCgpIGZ1bmN0aW9uLgorLy8hCisvLyEgRm9yIHRoZSBpbnRlcnJ1cHQtZHJpdmVuIHRyYW5zYWN0aW9uLCB0aGUgdXNlciBtdXN0IHJlZ2lzdGVyIGFuIGludGVycnVwdAorLy8hIGhhbmRsZXIgZm9yIHRoZSBcaTJjIGRldmljZXMgYW5kIGVuYWJsZSB0aGUgXGkyYyBtYXN0ZXIgaW50ZXJydXB0OyB0aGUgaW50ZXJydXB0CisvLyEgb2NjdXJzIHdoZW4gdGhlIG1hc3RlciBpcyBubyBsb25nZXIgYnVzeS4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19pMmNfc2xhdmUgU2xhdmUgT3BlcmF0aW9ucworLy8hCisvLyEgV2hlbiB1c2luZyB0aGlzIEFQSSB0byBkcml2ZSB0aGUgXGkyYyBzbGF2ZSBtb2R1bGUsIHRoZSB1c2VyIG11c3QgZmlyc3QKKy8vISBpbml0aWFsaXplIHRoZSBcaTJjIHNsYXZlIG1vZHVsZSB3aXRoIGEgY2FsbCB0byBccmVmIEkyQ1NsYXZlSW5pdCgpLiBUaGlzIGZ1bmN0aW9uCisvLyEgZW5hYmxlcyB0aGUgXGkyYyBzbGF2ZSBtb2R1bGUgYW5kIGluaXRpYWxpemVzIHRoZSBhZGRyZXNzIG9mIHRoZSBzbGF2ZS4gQWZ0ZXIgdGhlCisvLyEgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzLCB0aGUgdXNlciBtYXkgcG9sbCB0aGUgc2xhdmUgc3RhdHVzIHVzaW5nCisvLyEgXHJlZiBJMkNTbGF2ZVN0YXR1cygpIHRvIGRldGVybWluZSBpZiBhIG1hc3RlciByZXF1ZXN0ZWQgYSBzZW5kIG9yIHJlY2VpdmUKKy8vISBvcGVyYXRpb24uIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBvcGVyYXRpb24gcmVxdWVzdGVkLCB0aGUgdXNlciBjYW4gY2FsbAorLy8hIFxyZWYgSTJDU2xhdmVEYXRhUHV0KCkgb3IgXHJlZiBJMkNTbGF2ZURhdGFHZXQoKSB0byBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24uCisvLyEgQWx0ZXJuYXRpdmVseSwgdGhlIFxpMmMgc2xhdmUgY2FuIGhhbmRsZSB0cmFuc2FjdGlvbnMgdXNpbmcgYW4gaW50ZXJydXB0IGhhbmRsZXIKKy8vISByZWdpc3RlcmVkIHdpdGggXHJlZiBJMkNJbnRSZWdpc3RlcigpLCBhbmQgYnkgZW5hYmxpbmcgdGhlIFxpMmMgc2xhdmUgaW50ZXJydXB0LgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX2kyY19hcGkgQVBJCisvLyEKKy8vISBUaGUgXGkyYyBBUEkgaXMgYnJva2VuIGludG8gdGhyZWUgZ3JvdXBzIG9mIGZ1bmN0aW9uczoKKy8vISB0aG9zZSB0aGF0IGhhbmRsZSBzdGF0dXMgYW5kIGluaXRpYWxpemF0aW9uLCB0aG9zZSB0aGF0CisvLyEgZGVhbCB3aXRoIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhLCBhbmQgdGhvc2UgdGhhdCBkZWFsIHdpdGgKKy8vISBpbnRlcnJ1cHRzLgorLy8hCisvLyEgU3RhdHVzIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgZm9yIHRoZSBcaTJjIG1vZHVsZSBhcmU6CisvLyEgLSBccmVmIEkyQ01hc3RlckluaXRFeHBDbGsoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJFbmFibGUoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJEaXNhYmxlKCkKKy8vISAtIFxyZWYgSTJDTWFzdGVyQnVzQnVzeSgpCisvLyEgLSBccmVmIEkyQ01hc3RlckJ1c3koKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJFcnIoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZUluaXQoKQorLy8hIC0gXHJlZiBJMkNTbGF2ZUVuYWJsZSgpCisvLyEgLSBccmVmIEkyQ1NsYXZlRGlzYWJsZSgpCisvLyEgLSBccmVmIEkyQ1NsYXZlU3RhdHVzKCkKKy8vIQorLy8hIFNlbmRpbmcgYW5kIHJlY2VpdmluZyBkYXRhIGZyb20gdGhlIFxpMmMgbW9kdWxlIGlzIGhhbmRsZWQgYnkgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisvLyEgLSBccmVmIEkyQ01hc3RlclNsYXZlQWRkclNldCgpCisvLyEgLSBccmVmIEkyQ1NsYXZlQWRkcmVzc1NldCgpCisvLyEgLSBccmVmIEkyQ01hc3RlckNvbnRyb2woKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJEYXRhR2V0KCkKKy8vISAtIFxyZWYgSTJDTWFzdGVyRGF0YVB1dCgpCisvLyEgLSBccmVmIEkyQ1NsYXZlRGF0YUdldCgpCisvLyEgLSBccmVmIEkyQ1NsYXZlRGF0YVB1dCgpCisvLyEKKy8vISBUaGUgXGkyYyBtYXN0ZXIgYW5kIHNsYXZlIGludGVycnVwdHMgYXJlIGhhbmRsZWQgYnkgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisvLyEgLSBccmVmIEkyQ0ludFJlZ2lzdGVyKCkKKy8vISAtIFxyZWYgSTJDSW50VW5yZWdpc3RlcigpCisvLyEgLSBccmVmIEkyQ01hc3RlckludEVuYWJsZSgpCisvLyEgLSBccmVmIEkyQ01hc3RlckludERpc2FibGUoKQorLy8hIC0gXHJlZiBJMkNNYXN0ZXJJbnRDbGVhcigpCisvLyEgLSBccmVmIEkyQ01hc3RlckludFN0YXR1cygpCisvLyEgLSBccmVmIEkyQ1NsYXZlSW50RW5hYmxlKCkKKy8vISAtIFxyZWYgSTJDU2xhdmVJbnREaXNhYmxlKCkKKy8vISAtIFxyZWYgSTJDU2xhdmVJbnRDbGVhcigpCisvLyEgLSBccmVmIEkyQ1NsYXZlSW50U3RhdHVzKCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMnMuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pMnMuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGkycy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wNS0xMSAxMzo1NjowMSArMDIwMCAoTW9uLCAxMSBNYXkgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0MzQ3NgorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEkyUy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvaTJzLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBJMlNFbmFibGUKKyAgICAjZGVmaW5lIEkyU0VuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgTk9ST01fSTJTRW5hYmxlCisgICAgI3VuZGVmICBJMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZQorICAgICNkZWZpbmUgSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUgICAgICAgICBOT1JPTV9JMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZQorICAgICN1bmRlZiAgSTJTQ2hhbm5lbENvbmZpZ3VyZQorICAgICNkZWZpbmUgSTJTQ2hhbm5lbENvbmZpZ3VyZSAgICAgICAgICAgICBOT1JPTV9JMlNDaGFubmVsQ29uZmlndXJlCisgICAgI3VuZGVmICBJMlNCdWZmZXJDb25maWcKKyAgICAjZGVmaW5lIEkyU0J1ZmZlckNvbmZpZyAgICAgICAgICAgICAgICAgTk9ST01fSTJTQnVmZmVyQ29uZmlnCisgICAgI3VuZGVmICBJMlNQb2ludGVyVXBkYXRlCisgICAgI2RlZmluZSBJMlNQb2ludGVyVXBkYXRlICAgICAgICAgICAgICAgIE5PUk9NX0kyU1BvaW50ZXJVcGRhdGUKKyAgICAjdW5kZWYgIEkyU1BvaW50ZXJTZXQKKyAgICAjZGVmaW5lIEkyU1BvaW50ZXJTZXQgICAgICAgICAgICAgICAgICAgTk9ST01fSTJTUG9pbnRlclNldAorICAgICN1bmRlZiAgSTJTU2FtcGxlU3RhbXBDb25maWd1cmUKKyAgICAjZGVmaW5lIEkyU1NhbXBsZVN0YW1wQ29uZmlndXJlICAgICAgICAgTk9ST01fSTJTU2FtcGxlU3RhbXBDb25maWd1cmUKKyAgICAjdW5kZWYgIEkyU1NhbXBsZVN0YW1wR2V0CisgICAgI2RlZmluZSBJMlNTYW1wbGVTdGFtcEdldCAgICAgICAgICAgICAgIE5PUk9NX0kyU1NhbXBsZVN0YW1wR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdsb2JhbCBwb2ludGVyIHRvIHRoZSBjdXJyZW50IEkyUyBkYXRhIHN0cnVjdHVyZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0kyU0NvbnRyb2xUYWJsZSAqZ19wQ29udHJvbFRhYmxlOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZXMgdGhlIEkyUyBtb2R1bGUgZm9yIG9wZXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyU0VuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udHJvbCB0YWJsZSBwb2ludGVyIGlzIHNldHVwIHRvIGEgbWVtb3J5IGxvY2F0aW9uLgorICAgIC8vCisgICAgaWYoIShnX3BDb250cm9sVGFibGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGFkZHJlc3MgdG8gdGhlIGZpcnN0IGlucHV0L291dHB1dCBidWZmZXIuCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZJTlBUUk5FWFQpID0gZ19wQ29udHJvbFRhYmxlLT51aTMySW5CYXNlOworICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMkluT2Zmc2V0ID0gMDsKKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZPVVRQVFJORVhUKSA9IGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dEJhc2U7CisgICAgZ19wQ29udHJvbFRhYmxlLT51aTMyT3V0T2Zmc2V0ID0gMDsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBJMlMgbW9kdWxlLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGRE1BQ0ZHKSA9ICh1aW50MzJfdClnX3BDb250cm9sVGFibGUtPnVpMTZETUFCdWZTaXplIC0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmVzIHRoZSBJMlMgbW9kdWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJGbXRDZmcsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQml0Q2xrRGVsYXkpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCh1aTMyQml0Q2xrRGVsYXkgPD0gMjU1KTsKKworICAgIC8vCisgICAgLy8gU2F2ZSB0aGUgbGVuZ3RoIG9mIHRoZSBhdWRpbyB3b3JkcyBzdG9yZWQgaW4gbWVtb3J5LgorICAgIC8vCisgICAgZ19wQ29udHJvbFRhYmxlLT51aTE2TWVtTGVuID0gKHVpMzJGbXRDZmcgJiBJMlNfTUVNX0xFTkdUSF8yNCkgPyAyNCA6IDE2OworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRkZNVENGRykgPSB1aTMyRm10Q2ZnIHwgKHVpMzJCaXRDbGtEZWxheSA8PCBJMlNfQUlGRk1UQ0ZHX0RBVEFfREVMQVlfUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZXR1cCB0aGUgYXVkaW8gY2hhbm5lbCBjb25maWd1cmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJMlNDaGFubmVsQ29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbjBDZmcsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaGFuMUNmZywgdWludDMyX3QgdWkzMkNoYW4yQ2ZnKQoreworICAgIHVpbnQzMl90IHVpMzJJbkNoYW47CisgICAgdWludDMyX3QgdWkzMk91dENoYW47CisgICAgdWludDMyX3QgdWkzMkNoYW5NYXNrOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCh1aTMyQ2hhbjBDZmcgJiAoSTJTX0NIQU5fQ0ZHX01BU0sgfCBJMlNfTElORV9NQVNLKSkKKyAgICBBU1NFUlQodWkzMkNoYW4xQ2ZnICYgKEkyU19DSEFOX0NGR19NQVNLIHwgSTJTX0xJTkVfTUFTSykpCisgICAgQVNTRVJUKHVpMzJDaGFuMkNmZyAmIChJMlNfQ0hBTl9DRkdfTUFTSyB8IEkyU19MSU5FX01BU0spKQorCisgICAgdWkzMkluQ2hhbiA9IDA7CisgICAgdWkzMk91dENoYW4gPSAwOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgaW5wdXQvb3V0cHV0IGNoYW5uZWxzLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGRElSQ0ZHKSA9ICgodWkzMkNoYW4wQ2ZnIDw8IEkyU19BSUZESVJDRkdfQUQwX1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgSTJTX0FJRkRJUkNGR19BRDBfTSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWkzMkNoYW4xQ2ZnIDw8IEkyU19BSUZESVJDRkdfQUQxX1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgSTJTX0FJRkRJUkNGR19BRDFfTSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWkzMkNoYW4yQ2ZnIDw8IEkyU19BSUZESVJDRkdfQUQyX1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgSTJTX0FJRkRJUkNGR19BRDJfTSk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgdmFsaWQgY2hhbm5lbCBtYXNrLgorICAgIC8vCisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGV01BU0swKSA9ICh1aTMyQ2hhbjBDZmcgPj4gOCkgJiBJMlNfQUlGV01BU0swX01BU0tfTTsKKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZXTUFTSzEpID0gKHVpMzJDaGFuMUNmZyA+PiA4KSAmIEkyU19BSUZXTUFTSzFfTUFTS19NOworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRldNQVNLMikgPSAodWkzMkNoYW4yQ2ZnID4+IDgpICYgSTJTX0FJRldNQVNLMl9NQVNLX007CisKKyAgICAvLworICAgIC8vIFJlc29sdmUgYW5kIHNhdmUgdGhlIG51bWJlciBvZiBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWxzLgorICAgIC8vCisgICAgdWkzMkNoYW5NYXNrID0gKHVpMzJDaGFuMENmZyAmIEkyU19DSEFOX0NGR19NQVNLKSA+PiA4OworICAgIGlmKHVpMzJDaGFuMENmZyAmIEkyU19MSU5FX0lOUFVUKQorICAgIHsKKyAgICAgICAgd2hpbGUodWkzMkNoYW5NYXNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1aTMyQ2hhbk1hc2sgJiAweDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWkzMkluQ2hhbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNoaWZ0IGRvd24gY2hhbm5lbCBtYXNrCisgICAgICAgICAgICAvLworICAgICAgICAgICAgdWkzMkNoYW5NYXNrID4+PSAxOworICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZih1aTMyQ2hhbjBDZmcgJiBJMlNfTElORV9PVVRQVVQpCisgICAgeworICAgICAgICB3aGlsZSh1aTMyQ2hhbk1hc2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHVpMzJDaGFuTWFzayAmIDB4MSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aTMyT3V0Q2hhbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNoaWZ0IGRvd24gY2hhbm5lbCBtYXNrCisgICAgICAgICAgICAvLworICAgICAgICAgICAgdWkzMkNoYW5NYXNrID4+PSAxOworICAgICAgICB9CisgICAgfQorCisgICAgdWkzMkNoYW5NYXNrID0gKHVpMzJDaGFuMUNmZyAmIEkyU19DSEFOX0NGR19NQVNLKSA+PiA4OworICAgIGlmKHVpMzJDaGFuMUNmZyAmIEkyU19MSU5FX0lOUFVUKQorICAgIHsKKyAgICAgICAgd2hpbGUodWkzMkNoYW5NYXNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1aTMyQ2hhbk1hc2sgJiAweDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWkzMkluQ2hhbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFNoaWZ0IGRvd24gY2hhbm5lbCBtYXNrCisgICAgICAgICAgICAvLworICAgICAgICAgICAgdWkzMkNoYW5NYXNrID4+PSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYodWkzMkNoYW4xQ2ZnICYgSTJTX0xJTkVfT1VUUFVUKQorICAgIHsKKyAgICAgICAgd2hpbGUodWkzMkNoYW5NYXNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih1aTMyQ2hhbk1hc2sgJiAweDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdWkzMk91dENoYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaGlmdCBkb3duIGNoYW5uZWwgbWFzaworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJDaGFuTWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVpMzJDaGFuTWFzayA9ICh1aTMyQ2hhbjJDZmcgJiBJMlNfQ0hBTl9DRkdfTUFTSykgPj4gODsKKyAgICBpZih1aTMyQ2hhbjJDZmcgJiBJMlNfTElORV9JTlBVVCkKKyAgICB7CisgICAgICAgIHdoaWxlKHVpMzJDaGFuTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodWkzMkNoYW5NYXNrICYgMHgxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJJbkNoYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaGlmdCBkb3duIGNoYW5uZWwgbWFzaworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHVpMzJDaGFuTWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDaGFuMkNmZyAmIEkyU19MSU5FX09VVFBVVCkKKyAgICB7CisgICAgICAgIHdoaWxlKHVpMzJDaGFuTWFzaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodWkzMkNoYW5NYXNrICYgMHgxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVpMzJPdXRDaGFuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2hpZnQgZG93biBjaGFubmVsIG1hc2sKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB1aTMyQ2hhbk1hc2sgPj49IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX3BDb250cm9sVGFibGUtPnVpOEluQ2hhbiA9ICh1aW50OF90KXVpMzJJbkNoYW47CisgICAgZ19wQ29udHJvbFRhYmxlLT51aThPdXRDaGFuID0gKHVpbnQ4X3QpdWkzMk91dENoYW47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZXQgdGhlIGlucHV0IGJ1ZmZlciBwb2ludGVycworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJTQnVmZmVyQ29uZmlnKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW5CdWZCYXNlLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJPdXRCdWZCYXNlLCB1aW50MTZfdCB1aTE2RE1BQnVmU2l6ZSwKKyAgICAgICAgICAgICAgICB1aW50MTZfdCB1aTE2Q2hhbkJ1ZlNpemUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVCh1aTE2RE1BQnVmU2l6ZSA+IDApOworCisgICAgLy8KKyAgICAvLyBTZXR1cCB0aGUgaW5wdXQgZGF0YSBwb2ludGVyIGFuZCBidWZmZXIgc2l6ZXMuCisgICAgLy8KKyAgICBnX3BDb250cm9sVGFibGUtPnVpMTZETUFCdWZTaXplID0gdWkxNkRNQUJ1ZlNpemU7CisgICAgZ19wQ29udHJvbFRhYmxlLT51aTE2Q2hCdWZTaXplID0gdWkxNkNoYW5CdWZTaXplOworICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMkluQmFzZSA9IHVpMzJJbkJ1ZkJhc2U7CisgICAgZ19wQ29udHJvbFRhYmxlLT51aTMyT3V0QmFzZSA9IHVpMzJPdXRCdWZCYXNlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0IHRoZSBidWZmZXIgcG9pbnRlcnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0kyU1BvaW50ZXJTZXQodWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYklucHV0LCB2b2lkICogcE5leHRQb2ludGVyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gVXBkYXRlIHRoZSBuZXh0IGlucHV0L291dHB1dCBwb2ludGVyIHdpdGggdGhlIGNvcnJlY3QgYWRkcmVzcy4KKyAgICAvLworICAgIGlmKGJJbnB1dCA9PSB0cnVlKQorICAgIHsKKyAgICAgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGSU5QVFJORVhUKSA9ICh1aW50MzJfdClwTmV4dFBvaW50ZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRk9VVFBUUk5FWFQpID0gKHVpbnQzMl90KXBOZXh0UG9pbnRlcjsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBVcGRhdGUgdGhlIGJ1ZmZlciBwb2ludGVycworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJTUG9pbnRlclVwZGF0ZSh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiSW5wdXQpCit7CisgICAgdWludDMyX3QgdWkzMk5leHRQdHI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSB0aGUgbmV4dCBpbnB1dC9vdXRwdXQgcG9pbnRlciB3aXRoIHRoZSBjb3JyZWN0IGFkZHJlc3MuCisgICAgLy8KKyAgICBpZihiSW5wdXQgPT0gdHJ1ZSkKKyAgICB7CisgICAgICAgIHVpMzJOZXh0UHRyID0gKGdfcENvbnRyb2xUYWJsZS0+dWk4SW5DaGFuICoKKyAgICAgICAgICAgICAgICAgICAgICAgKGdfcENvbnRyb2xUYWJsZS0+dWkxNk1lbUxlbiA+PiAzKSkgKgorICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkxNkRNQUJ1ZlNpemU7CisgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMkluT2Zmc2V0ID0gKChnX3BDb250cm9sVGFibGUtPnVpMzJJbk9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpMzJOZXh0UHRyKSAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkxNkNoQnVmU2l6ZSk7CisgICAgICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRklOUFRSTkVYVCkgPSBnX3BDb250cm9sVGFibGUtPnVpMzJJbk9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMkluQmFzZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWkzMk5leHRQdHIgPSAoZ19wQ29udHJvbFRhYmxlLT51aThPdXRDaGFuICoKKyAgICAgICAgICAgICAgICAgICAgICAgKGdfcENvbnRyb2xUYWJsZS0+dWkxNk1lbUxlbiA+PiAzKSkgKgorICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkxNkRNQUJ1ZlNpemU7CisgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dE9mZnNldCA9ICgoZ19wQ29udHJvbFRhYmxlLT51aTMyT3V0T2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMk5leHRQdHIpICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wQ29udHJvbFRhYmxlLT51aTE2Q2hCdWZTaXplKTsKKyAgICAgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fQUlGT1VUUFRSTkVYVCkgPQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfcENvbnRyb2xUYWJsZS0+dWkzMk91dE9mZnNldCArCisgICAgICAgICAgICAgICAgICAgICAgICAgZ19wQ29udHJvbFRhYmxlLT51aTMyT3V0QmFzZTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSBzYW1wbGUgc3RhbXAgZ2VuZXJhdG9yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSTJTU2FtcGxlU3RhbXBDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYklucHV0LCBib29sIGJPdXRwdXQpCit7CisgICAgdWludDMyX3QgdWkzMlRyaWdnZXI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICB1aTMyVHJpZ2dlciA9IEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX1NUTVBXQ05UKTsKKyAgICB1aTMyVHJpZ2dlciA9ICh1aTMyVHJpZ2dlciArIDIpICUgZ19wQ29udHJvbFRhYmxlLT51aTE2Q2hCdWZTaXplOworCisgICAgLy8KKyAgICAvLyBTZXR1cCB0aGUgc2FtcGxlIHN0YW1wIHRyaWdnZXIgZm9yIGlucHV0IHN0cmVhbXMuCisgICAgLy8KKyAgICBpZihiSW5wdXQpCisgICAgeworICAgICAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19TVE1QSU5UUklHKSA9IHVpMzJUcmlnZ2VyOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIHNhbXBsZSBzdGFtcCB0cmlnZ2VyIGZvciBvdXRwdXQgc3RyZWFtcy4KKyAgICAvLworICAgIGlmKGJPdXRwdXQpCisgICAgeworICAgICAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19TVE1QT1VUVFJJRykgPSB1aTMyVHJpZ2dlcjsKKyAgICB9CisKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBzYW1wbGUgc3RhbXAgY291bnRlcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitJMlNTYW1wbGVTdGFtcEdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWwpCit7CisgICAgdWludDMyX3QgdWkzMkZyYW1lQ2xrQ250OworICAgIHVpbnQzMl90IHVpMzJTeXNDbGtDbnQ7CisgICAgdWludDMyX3QgdWkzMlBlcmlvZFN5c0Nsa0NudDsKKyAgICB1aW50MzJfdCB1aTMyU2FtcGxlU3RhbXA7CisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgKHZvaWQpdWkzMkNoYW5uZWw7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIEZyYW1lIGNsb2NrIGNvdW50cyBzaW5jZSBsYXN0IHN0YW1wLgorICAgIC8vCisgICAgdWkzMkZyYW1lQ2xrQ250ID0gSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUFdDTlRDQVBUMCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIHN5c3RlbSBjbG9jayB0aWNrcyBzaW5jZSBsYXN0IGZyYW1lIGNsb2NrIGVkZ2UuCisgICAgLy8KKyAgICB1aTMyU3lzQ2xrQ250ID0gSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUFhDTlRDQVBUMCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgbnVtYmVyIHN5c3RlbSBjbG9jayB0aWNrcyBpbiB0aGUgbGFzdCBmcmFtZSBjbG9jayBwZXJpb2QuCisgICAgLy8KKyAgICB1aTMyUGVyaW9kU3lzQ2xrQ250ID0gSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUFhQRVIpOworCisgICAgLy8KKyAgICAvLyBDYWxjdWxhdGUgdGhlIHNhbXBsZSBzdGFtcC4KKyAgICAvLworICAgIHVpMzJTYW1wbGVTdGFtcCA9ICh1aTMyU3lzQ2xrQ250IDw8IDE2KSAvIHVpMzJQZXJpb2RTeXNDbGtDbnQ7CisgICAgdWkzMlNhbXBsZVN0YW1wID0gKHVpMzJTYW1wbGVTdGFtcCA+IEkyU19TVE1QX1NBVFVSQVRJT04pID8KKyAgICAgICAgICAgICAgICAgICAgICBJMlNfU1RNUF9TQVRVUkFUSU9OIDogdWkzMlNhbXBsZVN0YW1wOworICAgIHVpMzJTYW1wbGVTdGFtcCB8PSAodWkzMkZyYW1lQ2xrQ250IDw8IDE2KTsKKworICAgIHJldHVybiAodWkzMlNhbXBsZVN0YW1wKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kycy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaTJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1MTIwMgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2kycy5oCkBAIC0wLDAgKzEsODkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaTJzLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE2IDE5OjQxOjQ3ICswMTAwIChNb24sIDE2IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MDk0CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIEkyUy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBpMnNfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0kyU19IX18KKyNkZWZpbmUgX19JMlNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaTJzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBJMlNFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0kyU0VuYWJsZQorICAgICNkZWZpbmUgSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUgICAgICAgICBOT1JPTV9JMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZQorICAgICNkZWZpbmUgSTJTQ2hhbm5lbENvbmZpZ3VyZSAgICAgICAgICAgICBOT1JPTV9JMlNDaGFubmVsQ29uZmlndXJlCisgICAgI2RlZmluZSBJMlNCdWZmZXJDb25maWcgICAgICAgICAgICAgICAgIE5PUk9NX0kyU0J1ZmZlckNvbmZpZworICAgICNkZWZpbmUgSTJTUG9pbnRlclVwZGF0ZSAgICAgICAgICAgICAgICBOT1JPTV9JMlNQb2ludGVyVXBkYXRlCisgICAgI2RlZmluZSBJMlNQb2ludGVyU2V0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0kyU1BvaW50ZXJTZXQKKyAgICAjZGVmaW5lIEkyU1NhbXBsZVN0YW1wQ29uZmlndXJlICAgICAgICAgTk9ST01fSTJTU2FtcGxlU3RhbXBDb25maWd1cmUKKyAgICAjZGVmaW5lIEkyU1NhbXBsZVN0YW1wR2V0ICAgICAgICAgICAgICAgTk9ST01fSTJTU2FtcGxlU3RhbXBHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYW4gYXVkaW8gY29udHJvbCB0YWJsZS4gTm90ZTogTWVtb3J5IGZvciB0aGlzCisvLyEgc3RydWN0dXJlIFxiIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgdXNlciBhcHBsaWNhdGlvbi4gU2VlIGRldGFpbGVkIGRlc2NyaXB0aW9uIQorLy8hCisvLyEgVGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IHRoZSBJMlMgYW5kIG5vcm1hbGx5IGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yCisvLyEgc29mdHdhcmUgdG8gZGlyZWN0bHkgcmVhZCBvciB3cml0ZSBmaWVsZHMgaW4gdGhlIHRhYmxlLgorLy8hCisvLyEgXG5vdGUgVGhlIGNvbnRyb2wgdGFibGUgbXVzdCBiZSBkZWZpbmVkIGJ5IHRoZSB1c2VyIGFzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZAorLy8hIHRoZSBnbG9iYWwgcG9pbnRlciBtdXN0IHRoZW4gYmUgYXNzaWduZWQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgdGFibGUKKy8vISBpbnNpZGUgYSB1c2VyIGZ1bmN0aW9uIChidXQgYmVmb3JlIGNhbGxpbmcgYW55IEkyUy1mdW5jdGlvbikuCisvLyEKKy8qIQorXHZlcmJhdGltCisgSTJTQ29udHJvbFRhYmxlIGdfY29udHJvbFRhYmxlOyAgICAvLyBEZWZpbmUgZ2xvYmFsCisgZ19wQ29udHJvbFRhYmxlID0gJmdfY29udHJvbFRhYmxlOyAvLyBBc3NpZ24gcG9pbnRlciAoaW5zaWRlIGEgZnVuY3Rpb24pCitcZW5kdmVyYmF0aW0KKyovCisvLyEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQxNl90IHVpMTZETUFCdWZTaXplOyAgICAgICAgLy8hPCBTaXplIG9mIERNQSBidWZmZXIgaW4gbnVtYmVyIG9mIHNhbXBsZXMuCisgICAgdWludDE2X3QgdWkxNkNoQnVmU2l6ZTsgICAgICAgICAvLyE8IFNpemUgb2YgQ2hhbm5lbCBidWZmZXIuCisgICAgdWludDhfdCB1aThJbkNoYW47ICAgICAgICAgICAgICAvLyE8IElucHV0IENoYW5uZWwuCisgICAgdWludDhfdCB1aThPdXRDaGFuOyAgICAgICAgICAgICAvLyE8IE91dHB1dCBDaGFubmVsLgorICAgIHVpbnQxNl90IHVpMTZNZW1MZW47ICAgICAgICAgICAgLy8hPCBMZW5ndGggb2YgdGhlIGF1ZGlvIHdvcmRzIHN0b3JlZCBpbiBtZW1vcnkuCisgICAgdWludDMyX3QgdWkzMkluQmFzZTsgICAgICAgICAgICAvLyE8IEJhc2UgYWRkcmVzcyBvZiB0aGUgaW5wdXQgYnVmZmVyLgorICAgIHVpbnQzMl90IHVpMzJJbk9mZnNldDsgICAgICAgICAgLy8hPCBWYWx1ZSBvZiB0aGUgY3VycmVudCBpbnB1dCBwb2ludGVyIG9mZnNldC4KKyAgICB1aW50MzJfdCB1aTMyT3V0QmFzZTsgICAgICAgICAgIC8vITwgQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgIHVpbnQzMl90IHVpMzJPdXRPZmZzZXQ7ICAgICAgICAgLy8hPCBWYWx1ZSBvZiB0aGUgY3VycmVudCBvdXRwdXQgcG9pbnRlciBvZmZzZXQuCit9IEkyU0NvbnRyb2xUYWJsZTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlY2xhcmUgZ2xvYmFsIHBvaW50ZXIgdG8gdGhlIEkyUyBkYXRhIHN0cnVjdHVyZS4KKy8vCisvLyBUaGUgY29udHJvbCB0YWJsZSBtdXN0IGJlIGRlZmluZWQgYnkgdGhlIHVzZXIgYXMgYSBnbG9iYWwgdmFyaWFibGUgYW5kIHRoZQorLy8gZ2xvYmFsIHBvaW50ZXIgbXVzdCB0aGVuIGJlIGFzc2lnbmVkIHRoZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHRhYmxlOgorLy8KKy8vIEkyU0NvbnRyb2xUYWJsZSBnX2NvbnRyb2xUYWJsZTsKKy8vIGdfcENvbnRyb2xUYWJsZSA9ICZnX2NvbnRyb2xUYWJsZTsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gSTJTQ29udHJvbFRhYmxlICpnX3BDb250cm9sVGFibGU7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgSTJTIERNQSBidWZmZXIgc2l6ZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyU19ETUFfQlVGX1NJWkVfNjQgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSTJTX0RNQV9CVUZfU0laRV8xMjggICAgMHgwMDAwMDA4MAorI2RlZmluZSBJMlNfRE1BX0JVRl9TSVpFXzI1NiAgICAweDAwMDAwMTAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgSTJTIGF1ZGlvIGNsb2NrIGNvbmZpZ3VyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyU19FWFRfV0NMSyAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lOVF9XQ0xLICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfSU5WRVJUX1dDTEsgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19OT1JNQUxfV0NMSyAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBhdWRpbyBkYXRhIGxpbmUgaW5wdXQvb3V0cHV0IGNvbmZpZ3VyYXRpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyU19MSU5FX1VOVVNFRCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSTJTX0xJTkVfSU5QVVQgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfTElORV9PVVRQVVQgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19MSU5FX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIGFjdGl2YXRpbmcgYW4gYXVkaW8gY2hhbm5lbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyU19DSEFOMF9BQ1QgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSTJTX0NIQU4xX0FDVCAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJMlNfQ0hBTjJfQUNUICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEkyU19DSEFOM19BQ1QgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSTJTX0NIQU40X0FDVCAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJMlNfQ0hBTjVfQUNUICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEkyU19DSEFONl9BQ1QgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSTJTX0NIQU43X0FDVCAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJMlNfTU9OT19NT0RFICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEkyU19TVEVSRU9fTU9ERSAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSTJTX0NIQU5fQ0ZHX01BU0sgICAgICAgMHgwMDAwRkYwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGF1ZGlvIGZvcm1hdCBjb25maWd1cmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJMlNfTUVNX0xFTkdUSF8xNiAgICAgICAweDAwMDAwMDAwICAvLyAxNiBiaXQgc2l6ZSBvZiB3b3JkIGluIG1lbW9yeQorI2RlZmluZSBJMlNfTUVNX0xFTkdUSF8yNCAgICAgICAweDAwMDAwMDgwICAvLyAyNCBiaXQgc2l6ZSBvZiB3b3JkIGluIG1lbW9yeQorI2RlZmluZSBJMlNfUE9TX0VER0UgICAgICAgICAgICAweDAwMDAwMDQwICAvLyBTYW1wbGUgb24gcG9zaXRpdmUgZWRnZQorI2RlZmluZSBJMlNfTkVHX0VER0UgICAgICAgICAgICAweDAwMDAwMDAwICAvLyBTYW1wbGUgb24gbmVnYXRpdmUgZWRnZQorI2RlZmluZSBJMlNfRFVBTF9QSEFTRV9GTVQgICAgICAweDAwMDAwMDIwICAvLyBEdWFsIFBoYXNlZCBhdWRpbyBmb3JtYXQKKyNkZWZpbmUgSTJTX1NJTkdMRV9QSEFTRV9GTVQgICAgMHgwMDAwMDAwMCAgLy8gU2luZ2xlIFBoYXNlZCBhdWRpbyBmb3JtYXQKKyNkZWZpbmUgSTJTX1dPUkRfTEVOR1RIXzggICAgICAgMHgwMDAwMDAwOCAgLy8gV29yZCBsZW5ndGggaXMgOCBiaXRzCisjZGVmaW5lIEkyU19XT1JEX0xFTkdUSF8xNiAgICAgIDB4MDAwMDAwMTAgIC8vIFdvcmQgbGVuZ3RoIGlzIDE2IGJpdHMKKyNkZWZpbmUgSTJTX1dPUkRfTEVOR1RIXzI0ICAgICAgMHgwMDAwMDAxOCAgLy8gV29yZCBsZW5ndGggaXMgMjQgYml0cworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIHNhbXBsZSBzdGFtcCBjb3VudGVycworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJTX1NUTVAwICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gU2FtcGxlIHN0YW1wIGNvdW50ZXIgY2hhbm5lbCAwCisjZGVmaW5lIEkyU19TVE1QMSAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFNhbXBsZSBzdGFtcCBjb3VudGVyIGNoYW5uZWwgMQorI2RlZmluZSBJMlNfU1RNUF9TQVRVUkFUSU9OICAgICAweDAwMDBGRkZGICAvLyBUaGUgc2F0dXJhdGlvbiB2YWx1ZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIHNhbXBsZSBzdGFtcAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJTX0lOVF9ETUFfSU4gICAgICAgICAgMHgwMDAwMDAyMCAgLy8gRE1BIG91dHB1dCBidWZmZXIgZnVsbCBpbnRlcnJ1cHQKKyNkZWZpbmUgSTJTX0lOVF9ETUFfT1VUICAgICAgICAgMHgwMDAwMDAxMCAgLy8gRE1BIGlucHV0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQKKyNkZWZpbmUgSTJTX0lOVF9USU1FT1VUICAgICAgICAgMHgwMDAwMDAwOCAgLy8gV29yZCBDbG9jayBUaW1lb3V0CisjZGVmaW5lIEkyU19JTlRfQlVTX0VSUiAgICAgICAgIDB4MDAwMDAwMDQgIC8vIERNQSBCdXMgZXJyb3IKKyNkZWZpbmUgSTJTX0lOVF9XQ0xLX0VSUiAgICAgICAgMHgwMDAwMDAwMiAgLy8gV29yZCBDbG9jayBlcnJvcgorI2RlZmluZSBJMlNfSU5UX1BUUl9FUlIgICAgICAgICAweDAwMDAwMDAxICAvLyBEYXRhIHBvaW50ZXIgZXJyb3IgKERNQSBkYXRhIHdhcyBub3QgdXBkYXRlZCBpbiB0aW1lKS4KKyNkZWZpbmUgSTJTX0lOVF9BTEwgICAgICAgICAgICAgMHgwMDAwMDAzRiAgLy8gQWxsIGludGVycnVwdHMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZmRlZiBEUklWRVJMSUJfREVCVUcKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGludGVybmFsCisvLyEKKy8vISBcYnJpZWYgQ2hlY2tzIGFuIEkyUyBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYW4gSTJTIHBvcnQgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZCBhbmQgXGMgZmFsc2UKKy8vISBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGJvb2wKK0kyU0Jhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4odWkzMkJhc2UgPT0gSTJTMF9CQVNFKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBJMlMgbW9kdWxlIGZvciBvcGVyYXRpb24uCisvLyEKKy8vISBcbm90ZSBUaGUgbW9kdWxlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgYWZ0ZXIgY29uZmlndXJhdGlvbi4gV2hlbiB0aGUKKy8vISBtb2R1bGUgaXMgZGlzYWJsZWQsIG5vIGRhdGEgb3IgY2xvY2tzIHdpbGwgYmUgZ2VuZXJhdGVkIG9uIHRoZSBJMlMgc2lnbmFscy4KKy8vIQorLy8hIFxub3RlIEltbWVkaWF0ZWx5IGFmdGVyIGVuYWJsaW5nIHRoZSBtb2R1bGUgdGhlIHByb2dyYW1tZXIgc2hvdWxkIHVwZGF0ZQorLy8hIHRoZSBETUEgZGF0YSBwb2ludGVyIHJlZ2lzdGVycyB1c2luZyBccmVmIEkyU1BvaW50ZXJVcGRhdGUoKSB0byBlbnN1cmUgYSBuZXcKKy8vISBwb2ludGVyIGlzIHdyaXR0ZW4gYmVmb3JlIHRoZSBETUEgdHJhbnNmZXIgY29tcGxldGVzLiBGYWlsdXJlIHRvIHVwZGF0ZQorLy8hIHRoZSBwb2ludGVyIGluIHRpbWUgd2lsbCByZXN1bHQgaW4gYW4gXHJlZiBJMlNfSU5UX1BUUl9FUlIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIEkyUyBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJTRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIEkyUyBtb2R1bGUgZm9yIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBpbW1lZGlhdGVseSBkaXNhYmxlIHRoZSBJMlMgbW9kdWxlLiBUbyBlbnN1cmUgdGhhdAorLy8hIGFsbCBidWZmZXIgb3BlcmF0aW9ucyBhcmUgY29tcGxldGVkIGJlZm9yZSBzaHV0dGluZyBkb3duLCB0aGUgY29ycmVjdAorLy8hIHByb2NlZHVyZSBpczoKKy8vISAxLiBEbyBub3QgdXBkYXRlIHRoZSBkYXRhIHBvaW50ZXJzIHVzaW5nIFxyZWYgSTJTUG9pbnRlclVwZGF0ZSgpLgorLy8hIDIuIEF3YWl0IG5leHQgaW50ZXJydXB0IHJlc3VsdGluZyBpbiBccmVmIEkyU19JTlRfUFRSX0VSUi4KKy8vISAzLiBEaXNhYmxlIHRoZSBJMlMgdXNpbmcgXHJlZiBJMlNEaXNhYmxlKCkgYW5kIGNsZWFyIHRoZSBwb2ludGVyIGVycm9yIHVzaW5nCisvLyEgICAgXHJlZiBJMlNJbnRDbGVhcigpLgorLy8hIDQuIERpc2FibGUgYml0IGNsb2NrIHNvdXJjZSAoZG9uZSBleHRlcm5hbGx5KS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgSTJTIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJTRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIEkyUyBtb2R1bGUuCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19BSUZETUFDRkcpID0gMHgwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmVzIHRoZSBJMlMgbW9kdWxlLgorLy8hCisvLyEgVGhlIHdvcmQgbGVuZ3RoIGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIHdvcmQgdHJhbnNtaXR0ZWQgb24gdGhlIGRhdGEKKy8vISBsaW5lcy4gRm9yIHNpbmdsZSBwaGFzZWQgZm9ybWF0cyBcYyBJMlNfV09SRF9MRU5HVEhfeCBpcyB0aGUgZXhhY3QgbnVtYmVyCisvLyEgb2YgYml0cyBwZXIgd29yZC4gSW4gZHVhbCBwaGFzZWQgZm9ybWF0IHRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJpdHMKKy8vISBwZXIgd29yZC4gVGhlIHNpemUgaXMgc2V0IHVzaW5nIFxyZWYgSTJTX1dPUkRfTEVOR1RIXzgsCisvLyEgXHJlZiBJMlNfV09SRF9MRU5HVEhfMTYgb3IgXHJlZiBJMlNfV09SRF9MRU5HVEhfMjQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIEkyUyBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyRm10Q2ZnIGlzIHRoZSBiaXR3aXNlIE9SIG9mIHNldmVyYWwgb3B0aW9uczoKKy8vISAtIFNhbXBsZSBzaXplOgorLy8hICAgLSBccmVmIEkyU19NRU1fTEVOR1RIXzE2CisvLyEgICAtIFxyZWYgSTJTX01FTV9MRU5HVEhfMjQKKy8vISAtIENsb2NrIGVkZ2Ugc2FtcGxpbmc6CisvLyEgICAtIFxyZWYgSTJTX1BPU19FREdFCisvLyEgICAtIFxyZWYgSTJTX05FR19FREdFCisvLyEgLSBQaGFzZToKKy8vISAgIC0gXHJlZiBJMlNfRFVBTF9QSEFTRV9GTVQKKy8vISAgIC0gXHJlZiBJMlNfU0lOR0xFX1BIQVNFX0ZNVAorLy8hIC0gV29yZCBsZW5ndGg6CisvLyEgICAtIFxyZWYgSTJTX1dPUkRfTEVOR1RIXzgKKy8vISAgIC0gXHJlZiBJMlNfV09SRF9MRU5HVEhfMTYKKy8vISAgIC0gXHJlZiBJMlNfV09SRF9MRU5HVEhfMjQKKy8vISBccGFyYW0gdWkzMkJpdENsa0RlbGF5IGRlZmluZXMgdGhlIGJpdCBjbG9jayBkZWxheSBieSBzZXR0aW5nIHRoZSBudW1iZXIgb2YgYml0IGNsb2NrIHBlcmlvZHMgYmV0d2VlbiB0aGUKKy8vISBwb3NpdGl2ZSB3b3JkIGNsb2NrIGVkZ2UgYW5kIHRoZSBNU0Igb2YgdGhlIGZpcnN0IHdvcmQgaW4gYSBwaGFzZS4gVGhlIGJpdAorLy8hIGNsb2NrIGRlbGF5IGlzIGRldGVybWluZWQgYnkgdGhlIHJhdGlvIGJldHdlZW4gdGhlIGJpdCBjbG9jayBhbmQgdGhlIGZyYW1lCisvLyEgY2xvY2sgYW5kIHRoZSBjaG9zZW4gYXVkaW8gZm9ybWF0LiBUaGUgYml0IGNsb2NrIGRlbGF5IFxiIG11c3QgYmUgY29uZmlndXJlZAorLy8hIGRlcGVuZGluZyBvbiB0aGUgY2hvc2VuIGF1ZGlvIGZvcm1hdDoKKy8vISAtIDAgICAgIDogTGVmdCBKdXN0aWZpZWQgRm9ybWF0IChMSkYpLgorLy8hIC0gMSAgICAgOiBJMlMgYW5kIERTUCBmb3JtYXQuCisvLyEgLSAyLTI1NSA6IFJpZ2h0IEp1c3RpZmllZCBmb3JtYXQgKFJKRikuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEkyU0NoYW5uZWxDb25maWd1cmUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEkyU0F1ZGlvRm9ybWF0Q29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRm10Q2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJpdENsa0RlbGF5KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXR1cCB0aGUgYXVkaW8gY2hhbm5lbCBjb25maWd1cmF0aW9uLgorLy8hCisvLyEgVGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyBhIGJpdHdpc2UgT1Igb2YgdGhlIGlucHV0L291dHB1dCBtb2RlIG9mIGVhY2gKKy8vISBkYXRhIGxpbmUgYW5kIHRoZSBhY3RpdmUgYXVkaW8gY2hhbm5lbHMgd2l0aGluIGEgc3BlY2lmaWMgYXVkaW8gZnJhbWUuCisvLyEKKy8vISBTZXR0aW5nIHVwIHRoZSBpbnB1dC9vdXRwdXQgbW9kZSB1c2Ugb25lIG9mOgorLy8hIC0gXHJlZiBJMlNfTElORV9VTlVTRUQKKy8vISAtIFxyZWYgSTJTX0xJTkVfSU5QVVQKKy8vISAtIFxyZWYgSTJTX0xJTkVfT1VUUFVUCisvLyEKKy8vISBGb3IgZHVhbCBwaGFzZWQgYXVkaW8gKExKRixSSkYsSTJTKSBvbmx5IG1vbm8gYW5kIHN0ZXJlbyBtb2RlcyBhcmUgYWxsb3dlZC4KKy8vISBGb3Igc2luZ2xlIHBoYXNlZCBhdWRpbyBmb3JtYXQgKERTUCkgdXAgdG8gOCBhY3RpdmUgY2hhbm5lbHMgYXJlIGFsbG93ZWQKKy8vISBvbiBhIHNpbmdsZSBkYXRhIGxpbmUuIEZvciBzZXR0aW5nIHVwIHRoZSBhY3RpdmUgY2hhbm5lbHMgaW4gYSBmcmFtZSB1c2U6CisvLyEgLSBTaW5nbGUgcGhhc2VkLCB1c2UgYSBiaXR3aXNlIE9SJ2VkIGNvbWJpbmF0aW9uIG9mOgorLy8hICAgLSBccmVmIEkyU19DSEFOMF9BQ1QKKy8vISAgIC0gXHJlZiBJMlNfQ0hBTjFfQUNUCisvLyEgICAtIFxyZWYgSTJTX0NIQU4yX0FDVAorLy8hICAgLSBccmVmIEkyU19DSEFOM19BQ1QKKy8vISAgIC0gXHJlZiBJMlNfQ0hBTjRfQUNUCisvLyEgICAtIFxyZWYgSTJTX0NIQU41X0FDVAorLy8hICAgLSBccmVmIEkyU19DSEFONl9BQ1QKKy8vISAgIC0gXHJlZiBJMlNfQ0hBTjdfQUNUCisvLyEgLSBEdWFsIHBoYXNlZCwgdXNlIG9uZSBvZjoKKy8vISAgIC0gXHJlZiBJMlNfTU9OT19NT0RFIChzYW1lIGFzIFxyZWYgSTJTX0NIQU4wX0FDVCkKKy8vISAgIC0gXHJlZiBJMlNfU1RFUkVPX01PREUgKHNhbWUgYXMgXHJlZiBJMlNfQ0hBTjBfQUNUIHwgXHJlZiBJMlNfQ0hBTjFfQUNUKQorLy8hCisvLyEgXG5vdGUgVGhlIGF1ZGlvIGZvcm1hdCBhbmQgdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNldCB1c2luZworLy8hIFxyZWYgSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUoKQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkNoYW4wQ2ZnIGRlZmluZXMgdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiBmb3IgZGF0YSBsaW5lIDAuCisvLyEgXHBhcmFtIHVpMzJDaGFuMUNmZyBkZWZpbmVzIHRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gZm9yIGRhdGEgbGluZSAxLgorLy8hIFxwYXJhbSB1aTMyQ2hhbjJDZmcgZGVmaW5lcyB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIGZvciBkYXRhIGxpbmUgMi4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSTJTQ2hhbm5lbENvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW4wQ2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbjFDZmcsIHVpbnQzMl90IHVpMzJDaGFuMkNmZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBJMlMgZnJhbWUgY2xvY2suCisvLyEKKy8vISBDb25maWd1cmUgSTJTIGNsb2NrIHRvIGJlIGVpdGhlciBpbnRlcm5hbCBvciBleHRlcm5hbCBhbmQgZWl0aGVyIG5vcm1hbAorLy8hIG9yIGludmVydGVkLgorLy8hCisvLyEgXG5vdGUgVGhlIGJpdCBjbG9jayBjb25maWd1cmF0aW9uIGlzIGRvbmUgZXh0ZXJuYWxseSwgYnV0IHRoZSBpbnRlcm5hbC8KKy8vISBleHRlcm5hbCBzZXR0aW5nIG11c3QgbWF0Y2ggd2hhdCBpcyBjaG9zZW4gaW50ZXJuYWxseSBpbiB0aGUgSTJTIG1vZHVsZQorLy8hIGZvciB0aGUgZnJhbWUgY2xvY2suCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkNsa0NvbmZpZyBpcyB0aGUgY2xvY2sgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIEJpdHdpc2UgT1InZWQKKy8vISBjb21iaW5hdGlvbiBvZiBjbG9jayBzb3VyY2UgYW5kIGNsb2NrIHBvbGFyaXR5OgorLy8hIC0gQ2xvY2sgc291cmNlOgorLy8hICAgLSBccmVmIEkyU19FWFRfV0NMSyA6IEV4dGVybmFsIGNsb2NrLgorLy8hICAgLSBccmVmIEkyU19JTlRfV0NMSyA6IEludGVybmFsIGNsb2NrLgorLy8hIC0gQ2xvY2sgcG9sYXJpdHk6CisvLyEgICAtIFxyZWYgSTJTX05PUk1BTF9XQ0xLIDogTm9ybWFsIGNsb2NrLgorLy8hICAgLSBccmVmIEkyU19JTlZFUlRfV0NMSyA6IEludmVydGVkIGNsb2NrLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJTQ2xvY2tDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDbGtDb25maWcpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBTZXR1cCByZWdpc3RlciBXQ0xLIFNvdXJjZS4KKyAgICAvLworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0FJRldDTEtTUkMpID0gdWkzMkNsa0NvbmZpZyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJMlNfQUlGV0NMS1NSQ19XQ0xLX0lOVl9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyU19BSUZXQ0xLU1JDX1dDTEtfU1JDX00pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgaW5wdXQgYnVmZmVyIHBvaW50ZXJzLgorLy8hCisvLyEgVGhlIG5leHQgcG9pbnRlciBzaG91bGQgYWx3YXlzIGJlIHdyaXR0ZW4gd2hpbGUgdGhlIERNQSBpcyB1c2luZyB0aGUKKy8vISBwcmV2aW91cyB3cml0dGVuIHBvaW50ZXIuIElmIG5vdCB3cml0dGVuIGluIHRpbWUgYW4gXHJlZiBJMlNfSU5UX1BUUl9FUlIgd2lsbAorLy8hIG9jY3VyIGFuZCBhbGwgb3V0cHV0cyB3aWxsIGJlIGRpc2FibGVkLgorLy8hCisvLyEgXG5vdGUgQXQgc3RhcnR1cCB0aGUgbmV4dCBkYXRhIHBvaW50ZXIgc2hvdWxkIGJlCisvLyEgd3JpdHRlbiBqdXN0IGJlZm9yZSBhbmQganVzdCBhZnRlciBjYWxsaW5nIHRoZSBccmVmIEkyU0VuYWJsZSgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJJbkJ1ZkJhc2UgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGJ1ZmZlci4KKy8vISBccGFyYW0gdWkzMk91dEJ1ZkJhc2UgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCAgYnVmZmVyLgorLy8hIFxwYXJhbSB1aTE2RE1BQnVmU2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgRE1BIGJ1ZmZlcnMuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAhCisvLyEgXHBhcmFtIHVpMTZDaGFuQnVmU2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgY2hhbm5lbCBidWZmZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMlNCdWZmZXJDb25maWcodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbkJ1ZkJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk91dEJ1ZkJhc2UsIHVpbnQxNl90IHVpMTZETUFCdWZTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHVpMTZDaGFuQnVmU2l6ZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVXBkYXRlIHRoZSBidWZmZXIgcG9pbnRlcnMuCisvLyEKKy8vISBUaGUgbmV4dCBwb2ludGVyIHNob3VsZCBhbHdheXMgYmUgd3JpdHRlbiB3aGlsZSB0aGUgRE1BIGlzIHVzaW5nIHRoZQorLy8hIHByZXZpb3VzIHdyaXR0ZW4gcG9pbnRlci4gSWYgbm90IHdyaXR0ZW4gaW4gdGltZSBhbiBccmVmIEkyU19JTlRfUFRSX0VSUiB3aWxsIG9jY3VyCisvLyEgYW5kIGFsbCBvdXRwdXRzIHdpbGwgYmUgZGlzYWJsZWQuIE5vdGhpbmcgaXMgcHJldmVudGluZyB0aGUgcG9pbnRlcnMgZnJvbQorLy8hIGJlaW5nIGlkZW50aWNhbCwgYnV0IHRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGJvdGggcG9pbnRlcnMgKGlucHV0IG9yCisvLyEgb3V0cHV0IHBvaW50ZXJzKSBhcmUgcG9pbnRpbmcgdG8gYSB2YWxpZCBhZGRyZXNzLgorLy8hCisvLyEgXG5vdGUgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgcG9pbnRlciB1cGRhdGUgaXMgZG9uZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dAorLy8hIHRvIGVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgYnVmZmVyIGlzIGZ1bGwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIG1vZHVsZS4KKy8vISBccGFyYW0gYklucHV0IGRldGVybWluZXMgd2hldGhlciB0byB1cGRhdGUgaW5wdXQgb3Igb3V0cHV0IHBvaW50ZXIuCisvLyEgLSBcYyB0cnVlICA6IFVwZGF0ZSBpbnB1dCBwb2ludGVyLgorLy8hIC0gXGMgZmFsc2UgOiBVcGRhdGUgb3V0cHV0IHBvaW50ZXIKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSTJTUG9pbnRlclNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMlNQb2ludGVyVXBkYXRlKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJJbnB1dCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IGEgYnVmZmVyIHBvaW50ZXIgKGlucHV0IG9yIG91dHB1dCkgZGlyZWN0bHkuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyBieXBhc3Npbmcgb2YgdGhlIHBvaW50ZXJzIGluIHRoZSBnbG9iYWwgY29udHJvbCB0YWJsZS4KKy8vIQorLy8hIFRoZSBuZXh0IHBvaW50ZXIgc2hvdWxkIGFsd2F5cyBiZSB3cml0dGVuIHdoaWxlIHRoZSBETUEgaXMgdXNpbmcgdGhlCisvLyEgcHJldmlvdXMgd3JpdHRlbiBwb2ludGVyLiBJZiBub3Qgd3JpdHRlbiBpbiB0aW1lIGFuIFxyZWYgSTJTX0lOVF9QVFJfRVJSIHdpbGwgb2NjdXIKKy8vISBhbmQgYWxsIG91dHB1dHMgd2lsbCBiZSBkaXNhYmxlZC4gTm90aGluZyBpcyBwcmV2ZW50aW5nIHRoZSBwb2ludGVycyBmcm9tCisvLyEgYmVpbmcgaWRlbnRpY2FsLCBidXQgdGhpcyBmdW5jdGlvbiByZWxpZXMgb24gYm90aCBwb2ludGVycyAoaW5wdXQgb3IKKy8vISBvdXRwdXQgcG9pbnRlcnMpIGFyZSBwb2ludGluZyB0byBhIHZhbGlkIGFkZHJlc3MuCisvLyEKKy8vISBcbm90ZSBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBwb2ludGVyIHVwZGF0ZSBpcyBkb25lIGluIGFuIGludGVycnVwdCBjb250ZXh0CisvLyEgdG8gZW5zdXJlIHRoYXQgdGhlIHVwZGF0ZSBpcyBwZXJmb3JtZWQgYmVmb3JlIHRoZSBidWZmZXIgaXMgZnVsbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgbW9kdWxlLgorLy8hIFxwYXJhbSBiSW5wdXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVwZGF0ZSBpbnB1dCBvciBvdXRwdXQgcG9pbnRlci4KKy8vISAtIFxjIHRydWUgIDogVXBkYXRlIGlucHV0IHBvaW50ZXIuCisvLyEgLSBcYyBmYWxzZSA6IFVwZGF0ZSBvdXRwdXQgcG9pbnRlcgorLy8hIFxwYXJhbSBwTmV4dFBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIgdG8gdXNlciBkZWZpbmVkIGJ1ZmZlci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSTJTUG9pbnRlclVwZGF0ZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJMlNQb2ludGVyU2V0KHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJJbnB1dCwgdm9pZCAqIHBOZXh0UG9pbnRlcik7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYW4gSTJTIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcworLy8hIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOyBzcGVjaWZpYworLy8hIEkyUyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBJMlNJbnRFbmFibGUoKS4gSXQgaXMgdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJMlMgcG9ydC4KKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIEkyUyBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU0ludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRSZWdpc3RlcihJTlRfSTJTX0lSUSwgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgSTJTIGludGVycnVwdC4KKyAgICAvLworICAgIEludEVuYWJsZShJTlRfSTJTX0lSUSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIEkyUyBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCB1bnJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gSXQKKy8vISBjbGVhcnMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYW4gSTJTIGludGVycnVwdCBvY2N1cnMuICBUaGlzCisvLyEgZnVuY3Rpb24gYWxzbyBtYXNrcyBvZmYgdGhlIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgc28gdGhhdAorLy8hIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBubyBsb25nZXIgaXMgY2FsbGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU0ludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKEkyU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnREaXNhYmxlKElOVF9JMlNfSVJRKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKElOVF9JMlNfSVJRKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBpbmRpdmlkdWFsIEkyUyBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW5kaWNhdGVkIEkyUyBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgSTJTX0lOVF9ETUFfSU4KKy8vISAtIFxyZWYgSTJTX0lOVF9ETUFfT1VUCisvLyEgLSBccmVmIEkyU19JTlRfVElNRU9VVAorLy8hIC0gXHJlZiBJMlNfSU5UX0JVU19FUlIKKy8vISAtIFxyZWYgSTJTX0lOVF9XQ0xLX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX1BUUl9FUlIKKy8vISAtIFxyZWYgSTJTX0lOVF9BTEwgKGNvdmVycyBhbGwgdGhlIGFib3ZlKQorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMlNJbnRFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19JUlFNQVNLKSB8PSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIGluZGl2aWR1YWwgSTJTIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaW5kaWNhdGVkIEkyUyBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGRpc2FibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEkyU19JTlRfRE1BX0lOCisvLyEgLSBccmVmIEkyU19JTlRfRE1BX09VVAorLy8hIC0gXHJlZiBJMlNfSU5UX1RJTUVPVVQKKy8vISAtIFxyZWYgSTJTX0lOVF9CVVNfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfV0NMS19FUlIKKy8vISAtIFxyZWYgSTJTX0lOVF9QVFJfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfQUxMIChjb3ZlcnMgYWxsIHRoZSBhYm92ZSkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJTSW50RGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19JUlFNQVNLKSAmPSB+dWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgSTJTLiBFaXRoZXIKKy8vISB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHN0YXR1cyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIGFsbG93ZWQgdG8KKy8vISByZWZsZWN0IHRvIHRoZSBwcm9jZXNzb3IgY2FuIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBwb3J0CisvLyEgXHBhcmFtIGJNYXNrZWQgc2VsZWN0cyBiZXR3ZWVuIHJhdyBhbmQgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyEgLSBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQgc3RhdHVzIGlzIHJlcXVpcmVkLgorLy8hIC0gXGMgdHJ1ZSAgOiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1aXJlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFzIGEgdmVjdG9yIG9mOgorLy8hIC0gXHJlZiBJMlNfSU5UX0RNQV9JTgorLy8hIC0gXHJlZiBJMlNfSU5UX0RNQV9PVVQKKy8vISAtIFxyZWYgSTJTX0lOVF9USU1FT1VUCisvLyEgLSBccmVmIEkyU19JTlRfQlVTX0VSUgorLy8hIC0gXHJlZiBJMlNfSU5UX1dDTEtfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfUFRSX0VSUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorSTJTSW50U3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJNYXNrZWQpCit7CisgICAgdWludDMyX3QgdWkzMk1hc2s7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoSTJTQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIFJldHVybiBlaXRoZXIgdGhlIGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIGFzCisgICAgLy8gcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYoYk1hc2tlZCkKKyAgICB7CisgICAgICAgIHVpMzJNYXNrID0gSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fSVJRRkxBR1MpOworICAgICAgICByZXR1cm4odWkzMk1hc2sgJiBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19JUlFNQVNLKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybihIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19JUlFGTEFHUykpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIEkyUyBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgSTJTIGludGVycnVwdCBzb3VyY2VzIGFyZSBjbGVhcmVkLCBzbyB0aGF0IHRoZXkgbm8gbG9uZ2VyCisvLyEgYXNzZXJ0LiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBrZWVwIHRoZQorLy8hIGludGVycnVwdCBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgSTJTIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBjbGVhcmVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIEkyU19JTlRfRE1BX0lOCisvLyEgLSBccmVmIEkyU19JTlRfRE1BX09VVAorLy8hIC0gXHJlZiBJMlNfSU5UX1RJTUVPVVQKKy8vISAtIFxyZWYgSTJTX0lOVF9CVVNfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfV0NMS19FUlIKKy8vISAtIFxyZWYgSTJTX0lOVF9QVFJfRVJSCisvLyEgLSBccmVmIEkyU19JTlRfQUxMIChjb3ZlcnMgYWxsIHRoZSBhYm92ZSkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJMlNJbnRDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChJMlNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBpbnRlcnJ1cHQgc291cmNlcy4KKyAgICAvLworICAgIEhXUkVHKEkyUzBfQkFTRSArIEkyU19PX0lSUUNMUikgPSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSB0aGUgU2FtcGxlIFN0YW1wIGdlbmVyYXRvci4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgc2FtcGxlIHN0YW1wIGdlbmVyYXRvcnMuCisvLyEKKy8vISBcbm90ZSBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1wbGUgc3RhbXAKKy8vISBnZW5lcmF0b3IgaXMgcHJvcGVybHkgY29uZmlndXJlZCBiZWZvcmUgaXQgaXMgZW5hYmxlZC4gSXQgaXMgdGhlIHNldHRpbmcKKy8vISBvZiB0aGUgSW5wdXQgYW5kIE91dHB1dCB0cmlnZ2VycyBjb25maWd1cmVkIHVzaW5nIFxyZWYgSTJTU2FtcGxlU3RhbXBDb25maWd1cmUoKQorLy8hIHRoYXQgdHJpZ2dlcnMgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBhdWRpbyBzdHJlYW1zLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0kyU1NhbXBsZVN0YW1wRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gU2V0IHRoZSBlbmFibGUgYml0LgorICAgIC8vCisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgSFdSRUcoSTJTMF9CQVNFICsgSTJTX09fU1RNUENUTCkgPSBJMlNfU1RNUENUTF9TVE1QX0VOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIHRoZSBTYW1wbGUgU3RhbXAgZ2VuZXJhdG9yLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWJsZSB0aGUgc2FtcGxlIHN0YW1wIGdlbmVyYXRvcnMuIFdoZW4gdGhlIHNhbXBsZQorLy8hIHN0YW1wIGdlbmVyYXRvciBpcyBkaXNhYmxlZCwgdGhlIGNsb2NrIGNvdW50ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSTJTU2FtcGxlU3RhbXBEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIGVuYWJsZSBiaXQuCisgICAgLy8KKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBIV1JFRyhJMlMwX0JBU0UgKyBJMlNfT19TVE1QQ1RMKSA9IDA7CisKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBzYW1wbGUgc3RhbXAgZ2VuZXJhdG9yLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBzYW1wbGUgc3RhbXAgZ2VuZXJhdG9yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBtb2R1bGUuCisvLyEgXHBhcmFtIGJJbnB1dCBlbmFibGVzIHRyaWdnZXJpbmcgb2YgdGhlIHNhbXBsZSBzdGFtcCBnZW5lcmF0b3Igb24gaW5wdXQuCisvLyEgXHBhcmFtIGJPdXRwdXQgZW5hYmxlcyB0cmlnZ2VyaW5nIG9mIHRoZSBzYW1wbGUgc3RhbXAgZ2VuZXJhdG9yIG9uIG91dHB1dC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEkyU1NhbXBsZVN0YW1wQ29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJJbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYk91dHB1dCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIHNhbXBsZSBzdGFtcCBjb3VudGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyUyBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsIGlzIHRoZSBzYW1wbGUgc3RhbXAgY291bnRlciB0byBzYW1wbGUKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgc2FtcGxlIHN0YW1wIGNoYW5uZWwuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IEkyU1NhbXBsZVN0YW1wR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX0kyU0VuYWJsZQorICAgICAgICAjdW5kZWYgIEkyU0VuYWJsZQorICAgICAgICAjZGVmaW5lIEkyU0VuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgUk9NX0kyU0VuYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJTQXVkaW9Gb3JtYXRDb25maWd1cmUKKyAgICAgICAgI3VuZGVmICBJMlNBdWRpb0Zvcm1hdENvbmZpZ3VyZQorICAgICAgICAjZGVmaW5lIEkyU0F1ZGlvRm9ybWF0Q29uZmlndXJlICAgICAgICAgUk9NX0kyU0F1ZGlvRm9ybWF0Q29uZmlndXJlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JMlNDaGFubmVsQ29uZmlndXJlCisgICAgICAgICN1bmRlZiAgSTJTQ2hhbm5lbENvbmZpZ3VyZQorICAgICAgICAjZGVmaW5lIEkyU0NoYW5uZWxDb25maWd1cmUgICAgICAgICAgICAgUk9NX0kyU0NoYW5uZWxDb25maWd1cmUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyU0J1ZmZlckNvbmZpZworICAgICAgICAjdW5kZWYgIEkyU0J1ZmZlckNvbmZpZworICAgICAgICAjZGVmaW5lIEkyU0J1ZmZlckNvbmZpZyAgICAgICAgICAgICAgICAgUk9NX0kyU0J1ZmZlckNvbmZpZworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJTUG9pbnRlclVwZGF0ZQorICAgICAgICAjdW5kZWYgIEkyU1BvaW50ZXJVcGRhdGUKKyAgICAgICAgI2RlZmluZSBJMlNQb2ludGVyVXBkYXRlICAgICAgICAgICAgICAgIFJPTV9JMlNQb2ludGVyVXBkYXRlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JMlNQb2ludGVyU2V0CisgICAgICAgICN1bmRlZiAgSTJTUG9pbnRlclNldAorICAgICAgICAjZGVmaW5lIEkyU1BvaW50ZXJTZXQgICAgICAgICAgICAgICAgICAgUk9NX0kyU1BvaW50ZXJTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0kyU1NhbXBsZVN0YW1wQ29uZmlndXJlCisgICAgICAgICN1bmRlZiAgSTJTU2FtcGxlU3RhbXBDb25maWd1cmUKKyAgICAgICAgI2RlZmluZSBJMlNTYW1wbGVTdGFtcENvbmZpZ3VyZSAgICAgICAgIFJPTV9JMlNTYW1wbGVTdGFtcENvbmZpZ3VyZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSTJTU2FtcGxlU3RhbXBHZXQKKyAgICAgICAgI3VuZGVmICBJMlNTYW1wbGVTdGFtcEdldAorICAgICAgICAjZGVmaW5lIEkyU1NhbXBsZVN0YW1wR2V0ICAgICAgICAgICAgICAgUk9NX0kyU1NhbXBsZVN0YW1wR2V0CisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19JMlNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHQuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ludGVycnVwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDRjNDkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHQuYwpAQCAtMCwwICsxLDU3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGludGVycnVwdC5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0zMCAxMjo0ODoxNyArMDIwMCAoTW9uLCAzMCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjU1MgorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIE5WSUMgSW50ZXJydXB0IENvbnRyb2xsZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgSW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIEludFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgTk9ST01fSW50UmVnaXN0ZXIKKyAgICAjdW5kZWYgIEludFVucmVnaXN0ZXIKKyAgICAjZGVmaW5lIEludFVucmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgTk9ST01fSW50VW5yZWdpc3RlcgorICAgICN1bmRlZiAgSW50UHJpb3JpdHlHcm91cGluZ1NldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlHcm91cGluZ1NldCAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eUdyb3VwaW5nU2V0CisgICAgI3VuZGVmICBJbnRQcmlvcml0eUdyb3VwaW5nR2V0CisgICAgI2RlZmluZSBJbnRQcmlvcml0eUdyb3VwaW5nR2V0ICAgICAgICAgIE5PUk9NX0ludFByaW9yaXR5R3JvdXBpbmdHZXQKKyAgICAjdW5kZWYgIEludFByaW9yaXR5U2V0CisgICAgI2RlZmluZSBJbnRQcmlvcml0eVNldCAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFByaW9yaXR5U2V0CisgICAgI3VuZGVmICBJbnRQcmlvcml0eUdldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlHZXQgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eUdldAorICAgICN1bmRlZiAgSW50RW5hYmxlCisgICAgI2RlZmluZSBJbnRFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludEVuYWJsZQorICAgICN1bmRlZiAgSW50RGlzYWJsZQorICAgICNkZWZpbmUgSW50RGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnREaXNhYmxlCisgICAgI3VuZGVmICBJbnRQZW5kU2V0CisgICAgI2RlZmluZSBJbnRQZW5kU2V0ICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFBlbmRTZXQKKyAgICAjdW5kZWYgIEludFBlbmRHZXQKKyAgICAjZGVmaW5lIEludFBlbmRHZXQgICAgICAgICAgICAgICAgICAgICAgTk9ST01fSW50UGVuZEdldAorICAgICN1bmRlZiAgSW50UGVuZENsZWFyCisgICAgI2RlZmluZSBJbnRQZW5kQ2xlYXIgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFBlbmRDbGVhcgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyBhIG1hcHBpbmcgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBlbmNvZGluZ3MgYW5kIHRoZSBudW1iZXIgb2YKKy8vISBwcmVlbXB0aW9uIHByaW9yaXR5IGJpdHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGNvbnN0IHVpbnQzMl90IGdfcHVpMzJQcmlvcml0eVtdID0KK3sKKyAgICBOVklDX0FQSU5UX1BSSUdST1VQXzBfOCwgTlZJQ19BUElOVF9QUklHUk9VUF8xXzcsIE5WSUNfQVBJTlRfUFJJR1JPVVBfMl82LAorICAgIE5WSUNfQVBJTlRfUFJJR1JPVVBfM181LCBOVklDX0FQSU5UX1BSSUdST1VQXzRfNCwgTlZJQ19BUElOVF9QUklHUk9VUF81XzMsCisgICAgTlZJQ19BUElOVF9QUklHUk9VUF82XzIsIE5WSUNfQVBJTlRfUFJJR1JPVVBfN18xCit9OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgYSBtYXBwaW5nIGJldHdlZW4gaW50ZXJydXB0IG51bWJlciBhbmQgdGhlIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMKKy8vISB0aGUgcHJpb3JpdHkgZW5jb2RpbmcgZm9yIHRoYXQgaW50ZXJydXB0LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnX3B1aTMyUmVnc1tdID0KK3sKKyAgICAwLCBOVklDX1NZU19QUkkxLCBOVklDX1NZU19QUkkyLCBOVklDX1NZU19QUkkzLCBOVklDX1BSSTAsIE5WSUNfUFJJMSwKKyAgICBOVklDX1BSSTIsIE5WSUNfUFJJMywgTlZJQ19QUkk0LCBOVklDX1BSSTUsIE5WSUNfUFJJNiwgTlZJQ19QUkk3LAorICAgIE5WSUNfUFJJOCwgTlZJQ19QUkk5LCBOVklDX1BSSTEwLCBOVklDX1BSSTExLCBOVklDX1BSSTEyLCBOVklDX1BSSTEzCit9OworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlci4KKy8vIQorLy8hIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGFsbCBpbnRlcnJ1cHRzLiBJdCBzaW1wbHkgbG9vcHMKKy8vISBmb3JldmVyIHNvIHRoYXQgdGhlIHN5c3RlbSBzdGF0ZSBpcyBwcmVzZXJ2ZWQgZm9yIG9ic2VydmF0aW9uIGJ5IGEKKy8vISBkZWJ1Z2dlci4gU2luY2UgaW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlCisvLyEgY29ycmVzcG9uZGluZyBoYW5kbGVyLCB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorSW50RGVmYXVsdEhhbmRsZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEdvIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBwcm9jZXNzb3IgdmVjdG9yIHRhYmxlLgorLy8KKy8vIFRoaXMgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBoYW5kbGVycyBmb3IgdGhlIHZhcmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgaW4KKy8vIHRoZSBzeXN0ZW0uIFRoZSBsYXlvdXQgb2YgdGhpcyBsaXN0IGlzIGRlZmluZWQgYnkgdGhlIGhhcmR3YXJlOyBhc3NlcnRpb24KKy8vIG9mIGFuIGludGVycnVwdCBjYXVzZXMgdGhlIHByb2Nlc3NvciB0byBzdGFydCBleGVjdXRpbmcgZGlyZWN0bHkgYXQgdGhlCisvLyBhZGRyZXNzIGdpdmVuIGluIHRoZSBjb3JyZXNwb25kaW5nIGxvY2F0aW9uIGluIHRoaXMgbGlzdC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorI3ByYWdtYSBkYXRhX2FsaWdubWVudD0yNTYKK3N0YXRpYyBfX25vX2luaXQgdm9pZCAoKmdfcGZuUkFNVmVjdG9yc1tOVU1fSU5URVJSVVBUU10pKHZvaWQpIEAgIi52dGFibGVfcmFtIjsKKyNlbGlmIGRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoRE9YWUdFTikKKyNwcmFnbWEgREFUQV9BTElHTihnX3BmblJBTVZlY3RvcnMsIDI1NikKKyNwcmFnbWEgREFUQV9TRUNUSU9OKGdfcGZuUkFNVmVjdG9ycywgIi52dGFibGVfcmFtIikKK3ZvaWQgKCpnX3BmblJBTVZlY3RvcnNbTlVNX0lOVEVSUlVQVFNdKSh2b2lkKTsKKyNlbGlmIGRlZmluZWQgKF9fQ0NfQVJNKQorc3RhdGljIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInZ0YWJsZV9yYW0iKSkpCit2b2lkICgqZ19wZm5SQU1WZWN0b3JzW05VTV9JTlRFUlJVUFRTXSkodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7CisjZWxzZQorc3RhdGljIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInZ0YWJsZV9yYW0iKSkpCit2b2lkICgqZ19wZm5SQU1WZWN0b3JzW05VTV9JTlRFUlJVUFRTXSkodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICB1aW50MzJfdCB1aTMySWR4LCB1aTMyVmFsdWU7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIFJBTSB2ZWN0b3IgdGFibGUgaXMgY29ycmVjdGx5IGFsaWduZWQuCisgICAgLy8KKyAgICBBU1NFUlQoKCh1aW50MzJfdClnX3BmblJBTVZlY3RvcnMgJiAweDAwMDAwMGZmKSA9PSAwKTsKKworICAgIC8vCisgICAgLy8gU2VlIGlmIHRoZSBSQU0gdmVjdG9yIHRhYmxlIGhhcyBiZWVuIGluaXRpYWxpemVkLgorICAgIC8vCisgICAgaWYoSFdSRUcoTlZJQ19WVEFCTEUpICE9ICh1aW50MzJfdClnX3BmblJBTVZlY3RvcnMpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBDb3B5IHRoZSB2ZWN0b3IgdGFibGUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIEZMQVNIIHRvIHRoZSBSQU0gdmVjdG9yCisgICAgICAgIC8vIHRhYmxlLgorICAgICAgICAvLworICAgICAgICB1aTMyVmFsdWUgPSBIV1JFRyhOVklDX1ZUQUJMRSk7CisgICAgICAgIGZvcih1aTMySWR4ID0gMDsgdWkzMklkeCA8IE5VTV9JTlRFUlJVUFRTOyB1aTMySWR4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGdfcGZuUkFNVmVjdG9yc1t1aTMySWR4XSA9ICh2b2lkICgqKSh2b2lkKSlIV1JFRygodWkzMklkeCAqIDQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpMzJWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBQb2ludCBOVklDIGF0IHRoZSBSQU0gdmVjdG9yIHRhYmxlLgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1ZUQUJMRSkgPSAodWludDMyX3QpZ19wZm5SQU1WZWN0b3JzOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2F2ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBnX3BmblJBTVZlY3RvcnNbdWkzMkludGVycnVwdF0gPSBwZm5IYW5kbGVyOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFVucmVnaXN0ZXJzIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkludGVycnVwdCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKTsKKworICAgIC8vCisgICAgLy8gUmVzZXQgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgZ19wZm5SQU1WZWN0b3JzW3VpMzJJbnRlcnJ1cHRdID0gSW50RGVmYXVsdEhhbmRsZXI7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ludFByaW9yaXR5R3JvdXBpbmdTZXQodWludDMyX3QgdWkzMkJpdHMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJCaXRzIDwgTlVNX1BSSU9SSVRZKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBwcmlvcml0eSBncm91cGluZy4KKyAgICAvLworICAgIEhXUkVHKE5WSUNfQVBJTlQpID0gTlZJQ19BUElOVF9WRUNUS0VZIHwgZ19wdWkzMlByaW9yaXR5W3VpMzJCaXRzXTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXRzIHRoZSBwcmlvcml0eSBncm91cGluZyBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorSW50UHJpb3JpdHlHcm91cGluZ0dldCh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJMb29wLCB1aTMyVmFsdWU7CisKKyAgICAvLworICAgIC8vIFJlYWQgdGhlIHByaW9yaXR5IGdyb3VwaW5nLgorICAgIC8vCisgICAgdWkzMlZhbHVlID0gSFdSRUcoTlZJQ19BUElOVCkgJiBOVklDX0FQSU5UX1BSSUdST1VQX007CisKKyAgICAvLworICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgdmFsdWVzLgorICAgIC8vCisgICAgZm9yKHVpMzJMb29wID0gMDsgdWkzMkxvb3AgPCBOVU1fUFJJT1JJVFk7IHVpMzJMb29wKyspCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBTdG9wIGxvb3BpbmcgaWYgdGhpcyB2YWx1ZSBtYXRjaGVzLgorICAgICAgICAvLworICAgICAgICBpZih1aTMyVmFsdWUgPT0gZ19wdWkzMlByaW9yaXR5W3VpMzJMb29wXSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHByaW9yaXR5IGJpdHMuCisgICAgLy8KKyAgICByZXR1cm4odWkzMkxvb3ApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0ludFByaW9yaXR5U2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQsIHVpbnQ4X3QgdWk4UHJpb3JpdHkpCit7CisgICAgdWludDMyX3QgdWkzMlRlbXA7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJJbnRlcnJ1cHQgPj0gNCkgJiYgKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUykpOworICAgIEFTU0VSVCh1aThQcmlvcml0eSA8PSBJTlRfUFJJX0xFVkVMNyk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgaW50ZXJydXB0IHByaW9yaXR5LgorICAgIC8vCisgICAgdWkzMlRlbXAgPSBIV1JFRyhnX3B1aTMyUmVnc1t1aTMySW50ZXJydXB0ID4+IDJdKTsKKyAgICB1aTMyVGVtcCAmPSB+KDB4RkYgPDwgKDggKiAodWkzMkludGVycnVwdCAmIDMpKSk7CisgICAgdWkzMlRlbXAgfD0gdWk4UHJpb3JpdHkgPDwgKDggKiAodWkzMkludGVycnVwdCAmIDMpKTsKKyAgICBIV1JFRyhnX3B1aTMyUmVnc1t1aTMySW50ZXJydXB0ID4+IDJdKSA9IHVpMzJUZW1wOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK0ludFByaW9yaXR5R2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50ZXJydXB0ID49IDQpICYmICh1aTMySW50ZXJydXB0IDwgTlVNX0lOVEVSUlVQVFMpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkuCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKGdfcHVpMzJSZWdzW3VpMzJJbnRlcnJ1cHQgPj4gMl0pID4+ICg4ICogKHVpMzJJbnRlcnJ1cHQgJiAzKSkpICYKKyAgICAgICAgICAgMHhGRik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRW5hYmxlcyBhbiBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRFbmFibGUodWludDMyX3QgdWkzMkludGVycnVwdCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKTsKKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbnRlcnJ1cHQgdG8gZW5hYmxlLgorICAgIC8vCisgICAgaWYodWkzMkludGVycnVwdCA9PSBJTlRfTUVNTUFOQUdFX0ZBVUxUKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIHRoZSBNZW1NYW5hZ2UgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1NZU19ITkRfQ1RSTCkgfD0gTlZJQ19TWVNfSE5EX0NUUkxfTUVNOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX0JVU19GQVVMVCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgYnVzIGZhdWx0IGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TWVNfSE5EX0NUUkwpIHw9IE5WSUNfU1lTX0hORF9DVFJMX0JVUzsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID09IElOVF9VU0FHRV9GQVVMVCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgdXNhZ2UgZmF1bHQgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1NZU19ITkRfQ1RSTCkgfD0gTlZJQ19TWVNfSE5EX0NUUkxfVVNBR0U7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA9PSBJTlRfU1lTVElDSykKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEVuYWJsZSB0aGUgU3lzdGVtIFRpY2sgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1NUX0NUUkwpIHw9IE5WSUNfU1RfQ1RSTF9JTlRFTjsKKyAgICB9CisgICAgZWxzZSBpZigodWkzMkludGVycnVwdCA+PSAxNikgJiYgKHVpMzJJbnRlcnJ1cHQgPD0gNDcpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIHRoZSBnZW5lcmFsIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19FTjApID0gMSA8PCAodWkzMkludGVycnVwdCAtIDE2KTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID49IDQ4KQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIHRoZSBnZW5lcmFsIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19FTjEpID0gMSA8PCAodWkzMkludGVycnVwdCAtIDQ4KTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgYW4gaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSW50RGlzYWJsZSh1aW50MzJfdCB1aTMySW50ZXJydXB0KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySW50ZXJydXB0IDwgTlVNX0lOVEVSUlVQVFMpOworCisgICAgLy8KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGludGVycnVwdCB0byBkaXNhYmxlLgorICAgIC8vCisgICAgaWYodWkzMkludGVycnVwdCA9PSBJTlRfTUVNTUFOQUdFX0ZBVUxUKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGlzYWJsZSB0aGUgTWVtTWFuYWdlIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TWVNfSE5EX0NUUkwpICY9IH4oTlZJQ19TWVNfSE5EX0NUUkxfTUVNKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID09IElOVF9CVVNfRkFVTFQpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBEaXNhYmxlIHRoZSBidXMgZmF1bHQgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1NZU19ITkRfQ1RSTCkgJj0gfihOVklDX1NZU19ITkRfQ1RSTF9CVVMpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX1VTQUdFX0ZBVUxUKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGlzYWJsZSB0aGUgdXNhZ2UgZmF1bHQgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1NZU19ITkRfQ1RSTCkgJj0gfihOVklDX1NZU19ITkRfQ1RSTF9VU0FHRSk7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA9PSBJTlRfU1lTVElDSykKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERpc2FibGUgdGhlIFN5c3RlbSBUaWNrIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSAmPSB+KE5WSUNfU1RfQ1RSTF9JTlRFTik7CisgICAgfQorICAgIGVsc2UgaWYoKHVpMzJJbnRlcnJ1cHQgPj0gMTYpICYmICh1aTMySW50ZXJydXB0IDw9IDQ3KSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIERpc2FibGUgdGhlIGdlbmVyYWwgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX0RJUzApID0gMSA8PCAodWkzMkludGVycnVwdCAtIDE2KTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID49IDQ4KQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGlzYWJsZSB0aGUgZ2VuZXJhbCBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfRElTMSkgPSAxIDw8ICh1aTMySW50ZXJydXB0IC0gNDgpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBQZW5kcyBhbiBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRQZW5kU2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJbnRlcnJ1cHQgPCBOVU1fSU5URVJSVVBUUyk7CisKKyAgICAvLworICAgIC8vIERldGVybWluZSB0aGUgaW50ZXJydXB0IHRvIHBlbmQuCisgICAgLy8KKyAgICBpZih1aTMySW50ZXJydXB0ID09IElOVF9OTUlfRkFVTFQpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBQZW5kIHRoZSBOTUkgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX0lOVF9DVFJMKSB8PSBOVklDX0lOVF9DVFJMX05NSV9TRVQ7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA9PSBJTlRfUEVORFNWKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUGVuZCB0aGUgUGVuZFNWIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19JTlRfQ1RSTCkgfD0gTlZJQ19JTlRfQ1RSTF9QRU5EX1NWOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPT0gSU5UX1NZU1RJQ0spCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBQZW5kIHRoZSBTeXNUaWNrIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19JTlRfQ1RSTCkgfD0gTlZJQ19JTlRfQ1RSTF9QRU5EU1RTRVQ7CisgICAgfQorICAgIGVsc2UgaWYoKHVpMzJJbnRlcnJ1cHQgPj0gMTYpICYmICh1aTMySW50ZXJydXB0IDw9IDQ3KSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFBlbmQgdGhlIGdlbmVyYWwgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1BFTkQwKSA9IDEgPDwgKHVpMzJJbnRlcnJ1cHQgLSAxNik7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkludGVycnVwdCA+PSA0OCkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFBlbmQgdGhlIGdlbmVyYWwgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1BFTkQxKSA9IDEgPDwgKHVpMzJJbnRlcnJ1cHQgLSA0OCk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFF1ZXJ5IHdoZXRoZXIgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitib29sCitJbnRQZW5kR2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpCit7CisgICAgdWludDMyX3QgdWkzMkludFBlbmRpbmc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKTsKKworICAgIC8vCisgICAgLy8gQXNzdW1lIG5vIGludGVycnVwdHMgYXJlIHBlbmRpbmcuCisgICAgLy8KKyAgICB1aTMySW50UGVuZGluZyA9IDA7CisKKyAgICAvLworICAgIC8vIFRoZSBsb3dlciAxNiBJUlEgdmVjdG9ycyBhcmUgdW5zdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbgorICAgIC8vCisgICAgaWYgKHVpMzJJbnRlcnJ1cHQgPCAxNikKKyAgICB7CisKKyAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFN1YnRyYWN0IGxvd2VyIDE2IGlycSB2ZWN0b3JzCisgICAgLy8KKyAgICB1aTMySW50ZXJydXB0IC09IDE2OworCisgICAgLy8KKyAgICAvLyBDaGVjayBpZiB0aGUgaW50ZXJydXB0IGlzIHBlbmRpbmcKKyAgICAvLworICAgIHVpMzJJbnRQZW5kaW5nID0gSFdSRUcoTlZJQ19QRU5EMCArICh1aTMySW50ZXJydXB0IC8gMzIpKTsKKyAgICB1aTMySW50UGVuZGluZyAmPSAoMSA8PCAodWkzMkludGVycnVwdCAmIDMxKSk7CisKKyAgICByZXR1cm4gdWkzMkludFBlbmRpbmcgPyB0cnVlIDogZmFsc2U7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVW5wZW5kcyBhbiBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJbnRQZW5kQ2xlYXIodWludDMyX3QgdWkzMkludGVycnVwdCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkludGVycnVwdCA8IE5VTV9JTlRFUlJVUFRTKTsKKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbnRlcnJ1cHQgdG8gdW5wZW5kLgorICAgIC8vCisgICAgaWYodWkzMkludGVycnVwdCA9PSBJTlRfUEVORFNWKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVW5wZW5kIHRoZSBQZW5kU1YgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX0lOVF9DVFJMKSB8PSBOVklDX0lOVF9DVFJMX1VOUEVORF9TVjsKKyAgICB9CisgICAgZWxzZSBpZih1aTMySW50ZXJydXB0ID09IElOVF9TWVNUSUNLKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVW5wZW5kIHRoZSBTeXNUaWNrIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoTlZJQ19JTlRfQ1RSTCkgfD0gTlZJQ19JTlRfQ1RSTF9QRU5EU1RDTFI7CisgICAgfQorICAgIGVsc2UgaWYoKHVpMzJJbnRlcnJ1cHQgPj0gMTYpICYmICh1aTMySW50ZXJydXB0IDw9IDQ3KSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFVucGVuZCB0aGUgZ2VuZXJhbCBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKE5WSUNfVU5QRU5EMCkgPSAxIDw8ICh1aTMySW50ZXJydXB0IC0gMTYpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJJbnRlcnJ1cHQgPj0gNDgpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBVbnBlbmQgdGhlIGdlbmVyYWwgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBIV1JFRyhOVklDX1VOUEVORDEpID0gMSA8PCAodWkzMkludGVycnVwdCAtIDQ4KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ludGVycnVwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwODcyNGUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pbnRlcnJ1cHQuaApAQCAtMCwwICsxLDUxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGludGVycnVwdC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wNy0yNCAxNTowMDo1NSArMDIwMCAoRnJpLCAyNCBKdWwgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDIwMworKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBOVklDIEludGVycnVwdCBDb250cm9sbGVyCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jcHVfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIGludGVycnVwdF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0lOVEVSUlVQVF9IX18KKyNkZWZpbmUgX19JTlRFUlJVUFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19udmljLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBJbnRSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFJlZ2lzdGVyCisgICAgI2RlZmluZSBJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFVucmVnaXN0ZXIKKyAgICAjZGVmaW5lIEludFByaW9yaXR5R3JvdXBpbmdTZXQgICAgICAgICAgTk9ST01fSW50UHJpb3JpdHlHcm91cGluZ1NldAorICAgICNkZWZpbmUgSW50UHJpb3JpdHlHcm91cGluZ0dldCAgICAgICAgICBOT1JPTV9JbnRQcmlvcml0eUdyb3VwaW5nR2V0CisgICAgI2RlZmluZSBJbnRQcmlvcml0eVNldCAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFByaW9yaXR5U2V0CisgICAgI2RlZmluZSBJbnRQcmlvcml0eUdldCAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFByaW9yaXR5R2V0CisgICAgI2RlZmluZSBJbnRFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludEVuYWJsZQorICAgICNkZWZpbmUgSW50RGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnREaXNhYmxlCisgICAgI2RlZmluZSBJbnRQZW5kU2V0ICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX0ludFBlbmRTZXQKKyAgICAjZGVmaW5lIEludFBlbmRHZXQgICAgICAgICAgICAgICAgICAgICAgTk9ST01fSW50UGVuZEdldAorICAgICNkZWZpbmUgSW50UGVuZENsZWFyICAgICAgICAgICAgICAgICAgICBOT1JPTV9JbnRQZW5kQ2xlYXIKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFjcm8gdG8gZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHByaW9yaXR5IG1hc2sgYmFzZWQgb24gdGhlIG51bWJlciBvZiBiaXRzCisvLyBvZiBwcmlvcml0eSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBGb3IgQ0MyNnh4IHRoZSBudW1iZXIgb2YgcHJpb3JpdHkKKy8vIGJpdCBpcyAzIGFzIGRlZmluZWQgaW4gPHR0Pmh3X3R5cGVzLmg8L3R0Pi4gVGhlIHByaW9yaXR5IG1hc2sgaXMKKy8vIGRlZmluZWQgYXMKKy8vCisvLyBJTlRfUFJJT1JJVFlfTUFTSyA9ICgoMHhGRiA8PCAoOCAtIE5VTV9QUklPUklUWV9CSVRTKSkgJiAweEZGKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU5UX1BSSU9SSVRZX01BU0sgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBJTlRfUFJJX0xFVkVMMCAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElOVF9QUklfTEVWRUwxICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU5UX1BSSV9MRVZFTDIgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJTlRfUFJJX0xFVkVMMyAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIElOVF9QUklfTEVWRUw0ICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSU5UX1BSSV9MRVZFTDUgICAgICAgICAgMHgwMDAwMDBBMAorI2RlZmluZSBJTlRfUFJJX0xFVkVMNiAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIElOVF9QUklfTEVWRUw3ICAgICAgICAgIDB4MDAwMDAwRTAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQuCisvLyEKKy8vISBBbGxvd3MgdGhlIHByb2Nlc3NvciB0byByZXNwb25kIHRvIGludGVycnVwdHMuIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZQorLy8hIHNldCBvZiBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOyBpdCBqdXN0IGdhdGVzIHRoZQorLy8hIHNpbmdsZSBpbnRlcnJ1cHQgZnJvbSB0aGUgY29udHJvbGxlciB0byB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zOgorLy8hIC0gXGMgdHJ1ZSAgOiBJbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgYW5kIGFyZSBub3cgZW5hYmxlZC4KKy8vISAtIFxjIGZhbHNlIDogSW50ZXJydXB0cyB3ZXJlIGFscmVhZHkgZW5hYmxlZCB3aGVuIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitJbnRNYXN0ZXJFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSBwcm9jZXNzb3IgaW50ZXJydXB0cy4KKyAgICAvLworICAgIHJldHVybihDUFVjcHNpZSgpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQuCisvLyEKKy8vISBQcmV2ZW50cyB0aGUgcHJvY2Vzc29yIGZyb20gcmVjZWl2aW5nIGludGVycnVwdHMuIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZQorLy8hIHNldCBvZiBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOyBpdCBqdXN0IGdhdGVzIHRoZQorLy8hIHNpbmdsZSBpbnRlcnJ1cHQgZnJvbSB0aGUgY29udHJvbGxlciB0byB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zOgorLy8hIC0gXGMgdHJ1ZSAgOiBJbnRlcnJ1cHRzIHdlcmUgYWxyZWFkeSBkaXNhYmxlZCB3aGVuIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLgorLy8hIC0gXGMgZmFsc2UgOiBJbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZCBhbmQgYXJlIG5vdyBkaXNhYmxlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorSW50TWFzdGVyRGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSBwcm9jZXNzb3IgaW50ZXJydXB0cy4KKyAgICAvLworICAgIHJldHVybihDUFVjcHNpZCgpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIGdpdmVuIGludGVycnVwdCBpcyBhc3NlcnRlZCB0byB0aGUgcHJvY2Vzc29yLiBXaGVuIHRoZSBpbnRlcnJ1cHQgb2NjdXJzLAorLy8hIGlmIGl0IGlzIGVuYWJsZWQgKHZpYSBccmVmIEludEVuYWJsZSgpKSwgdGhlIGhhbmRsZXIgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4KKy8vISBpbnRlcnJ1cHQgY29udGV4dC4gU2luY2UgdGhlIGhhbmRsZXIgZnVuY3Rpb24gY2FuIHByZWVtcHQgb3RoZXIgY29kZSwgY2FyZQorLy8hIG11c3QgYmUgdGFrZW4gdG8gcHJvdGVjdCBtZW1vcnkgb3IgcGVyaXBoZXJhbHMgdGhhdCBhcmUgYWNjZXNzZWQgYnkgdGhlCisvLyEgaGFuZGxlciBhbmQgb3RoZXIgbm9uLWhhbmRsZXIgY29kZS4KKy8vIQorLy8hIFxub3RlIFRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB2aWEgYSBwZXJpcGhlcmFsCisvLyEgZHJpdmVyIGludGVycnVwdCByZWdpc3RlciBmdW5jdGlvbikgbW92ZXMgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUgZnJvbQorLy8hIGZsYXNoIHRvIFNSQU0uIFRoZXJlZm9yZSwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gbGlua2luZyB0aGUgYXBwbGljYXRpb24KKy8vISB0byBlbnN1cmUgdGhhdCB0aGUgU1JBTSB2ZWN0b3IgdGFibGUgaXMgbG9jYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIFNSQU07CisvLyEgb3RoZXJ3aXNlIE5WSUMgd2lsbCBub3QgbG9vayBpbiB0aGUgY29ycmVjdCBwb3J0aW9uIG9mIG1lbW9yeSBmb3IgdGhlCisvLyEgdmVjdG9yIHRhYmxlIChpdCByZXF1aXJlcyB0aGUgdmVjdG9yIHRhYmxlIGJlIG9uIGEgMSBrQiBtZW1vcnkgYWxpZ25tZW50KS4KKy8vISBOb3JtYWxseSwgdGhlIFNSQU0gdmVjdG9yIHRhYmxlIGlzIHNvIHBsYWNlZCB2aWEgdGhlIHVzZSBvZiBsaW5rZXIgc2NyaXB0cy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IGluIHF1ZXN0aW9uLgorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgbm8gaGFuZGxlciBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgZ2l2ZW4gaW50ZXJydXB0IGlzIGFzc2VydGVkIHRvIHRoZSBwcm9jZXNzb3IuIFRoZSBpbnRlcnJ1cHQgc291cmNlIHdpbGwgYmUKKy8vISBhdXRvbWF0aWNhbGx5IGRpc2FibGVkICh2aWEgXHJlZiBJbnREaXNhYmxlKCkpIGlmIG5lY2Vzc2FyeS4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IGluIHF1ZXN0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkludGVycnVwdCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSBzcGxpdCBiZXR3ZWVuIHByZWVtcHRhYmxlIHByaW9yaXR5IGxldmVscyBhbmQKKy8vISBzdWJwcmlvcml0eSBsZXZlbHMgaW4gdGhlIGludGVycnVwdCBwcmlvcml0eSBzcGVjaWZpY2F0aW9uLiBUaGUgcmFuZ2Ugb2YKKy8vISB0aGUgZ3JvdXBpbmcgdmFsdWVzIGFyZSBkZXBlbmRlbnQgdXBvbiB0aGUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb247IG9uCisvLyEgdGhlIENDMjZ4eCBmYW1pbHksIHRocmVlIGJpdHMgYXJlIGF2YWlsYWJsZSBmb3IgaGFyZHdhcmUgaW50ZXJydXB0CisvLyEgcHJpb3JpdGl6YXRpb24gYW5kIHRoZXJlZm9yZSBwcmlvcml0eSBncm91cGluZyB2YWx1ZXMgb2YgdGhyZWUgdGhyb3VnaAorLy8hIHNldmVuIGhhdmUgdGhlIHNhbWUgZWZmZWN0LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCaXRzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdHMgb2YgcHJlZW1wdGFibGUgcHJpb3JpdHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJbnRQcmlvcml0eUdyb3VwaW5nU2V0KHVpbnQzMl90IHVpMzJCaXRzKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzcGxpdCBiZXR3ZWVuIHByZWVtcHRhYmxlIHByaW9yaXR5IGxldmVscyBhbmQKKy8vISBzdWJwcmlvcml0eSBsZXZlbHMgaW4gdGhlIGludGVycnVwdCBwcmlvcml0eSBzcGVjaWZpY2F0aW9uLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBvZiBwcmVlbXB0YWJsZSBwcmlvcml0eS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgSW50UHJpb3JpdHlHcm91cGluZ0dldCh2b2lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcHJpb3JpdHkgb2YgYW4gaW50ZXJydXB0LiBXaGVuIG11bHRpcGxlCisvLyEgaW50ZXJydXB0cyBhcmUgYXNzZXJ0ZWQgc2ltdWx0YW5lb3VzbHksIHRoZSBvbmVzIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkKKy8vISBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbG93ZXIgcHJpb3JpdHkgaW50ZXJydXB0cy4gU21hbGxlciBudW1iZXJzCisvLyEgY29ycmVzcG9uZCB0byBoaWdoZXIgaW50ZXJydXB0IHByaW9yaXRpZXM7IHByaW9yaXR5IDAgaXMgdGhlIGhpZ2hlc3QKKy8vISBpbnRlcnJ1cHQgcHJpb3JpdHkuCisvLyEKKy8vISBUaGUgaGFyZHdhcmUgcHJpb3JpdHkgbWVjaGFuaXNtIHdpbGwgb25seSBsb29rIGF0IHRoZSB1cHBlciBOIGJpdHMgb2YgdGhlCisvLyEgcHJpb3JpdHkgbGV2ZWwgKHdoZXJlIE4gaXMgMyBmb3IgY2MyNnh4KSwgc28gYW55IHByaW9yaXRpemF0aW9uIG11c3QgYmUKKy8vISBwZXJmb3JtZWQgaW4gdGhvc2UgYml0cy4gVGhlIHJlbWFpbmluZyBiaXRzIGNhbiBiZSB1c2VkIHRvIHN1Yi1wcmlvcml0aXplCisvLyEgdGhlIGludGVycnVwdCBzb3VyY2VzLCBhbmQgbWF5IGJlIHVzZWQgYnkgdGhlIGhhcmR3YXJlIHByaW9yaXR5IG1lY2hhbmlzbQorLy8hIG9uIGEgZnV0dXJlIHBhcnQuIFRoaXMgYXJyYW5nZW1lbnQgYWxsb3dzIHByaW9yaXRpZXMgdG8gbWlncmF0ZSB0bworLy8hIGRpZmZlcmVudCBOVklDIGltcGxlbWVudGF0aW9ucyB3aXRob3V0IGNoYW5naW5nIHRoZSBncm9zcyBwcmlvcml0aXphdGlvbgorLy8hIG9mIHRoZSBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRlcnJ1cHQgc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgaW4gcXVlc3Rpb24uCisvLyEgXHBhcmFtIHVpOFByaW9yaXR5IHNwZWNpZmllcyB0aGUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdC4KKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDAgOiBIaWdoZXN0IHByaW9yaXR5LgorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMMQorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMMgorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMMworLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNAorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNQorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNgorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNyA6IExvd2VzdCBwcmlvcml0eS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEludFByaW9yaXR5U2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQsIHVpbnQ4X3QgdWk4UHJpb3JpdHkpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHByaW9yaXR5IG9mIGFuIGludGVycnVwdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IGluIHF1ZXN0aW9uLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHk6CisvLyEgLSAoLTEpICAgICAgICAgICAgICAgIDogSW52YWxpZCBpbnRlcnJ1cHQgc3BlY2lmaWVkIGFzIHBhcmFtZXRlciEKKy8vISAtIFxyZWYgSU5UX1BSSV9MRVZFTDAgOiBIaWdoZXN0IHByaW9yaXR5LgorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMMQorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMMgorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMMworLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNAorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNQorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNgorLy8hIC0gXHJlZiBJTlRfUFJJX0xFVkVMNyA6IExvd2VzdCBwcmlvcml0eS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBJbnRQcmlvcml0eUdldCh1aW50MzJfdCB1aTMySW50ZXJydXB0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBpcyBlbmFibGVkIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gT3RoZXIKKy8vISBlbmFibGVzIGZvciB0aGUgaW50ZXJydXB0IChzdWNoIGFzIGF0IHRoZSBwZXJpcGhlcmFsIGxldmVsKSBhcmUgdW5hZmZlY3RlZAorLy8hIGJ5IHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCB0byBiZSBlbmFibGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSW50RW5hYmxlKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBpcyBkaXNhYmxlZCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIE90aGVyCisvLyEgZW5hYmxlcyBmb3IgdGhlIGludGVycnVwdCAoc3VjaCBhcyBhdCB0aGUgcGVyaXBoZXJhbCBsZXZlbCkgYXJlIHVuYWZmZWN0ZWQKKy8vISBieSB0aGlzIGZ1bmN0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRlcnJ1cHQgc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQZW5kcyBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBpcyBwZW5kZWQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyLiBUaGlzIHdpbGwKKy8vISBjYXVzZSB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8gZXhlY3V0ZSB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyIGF0IHRoZSBuZXh0IGF2YWlsYWJsZSB0aW1lLCBiYXNlZCBvbiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdGUKKy8vISBwcmlvcml0aWVzLiBGb3IgZXhhbXBsZSwgaWYgY2FsbGVkIGJ5IGEgaGlnaGVyIHByaW9yaXR5IGludGVycnVwdCBoYW5kbGVyLAorLy8hIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVudGlsIGFmdGVyIHRoZSBjdXJyZW50CisvLyEgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGNvbXBsZXRlZCBleGVjdXRpb24uIFRoZSBpbnRlcnJ1cHQgbXVzdCBoYXZlIGJlZW4KKy8vISBlbmFibGVkIGZvciBpdCB0byBiZSBjYWxsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkludGVycnVwdCBzcGVjaWZpZXMgdGhlIGludGVycnVwdCB0byBiZSBwZW5kZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJbnRQZW5kU2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBRdWVyeSB3aGV0aGVyIGFuIGludGVycnVwdCBpcyBwZW5kaW5nLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgcGVuZGluZyBpbiB0aGUKKy8vISBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhlIGludGVycnVwdCBtdXN0IGhhdmUgYmVlbiBlbmFibGVkIGZvciBpdCB0byBiZQorLy8hIGNhbGxlZCwgc28gYW4gaW50ZXJydXB0IGNhbiB2ZXJ5IHdlbGwgYmUgcGVuZGluZyB3YWl0aW5nIHRvIGJlIGVuYWJsZWQgb3IKKy8vISB3YWl0aW5nIGZvciBhbiBpbnRlcnJ1cHQgb2YgaGlnaGVyIHByaW9yaXR5IHRvIGJlIGRvbmUgZXhlY3V0aW5nLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBsb3dlciAxNiBJUlEgdmVjdG9ycyB3aGljaCBhcmUKKy8vISBoYXJkd2FyZSBkZWZpbmVkIGZvciB0aGUgU3lzdGVtIENQVS4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHRvIGJlIHF1ZXJpZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnM6CisvLyEgLSBcYyB0cnVlICA6IFNwZWNpZmllZCBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vISAtIFxjIGZhbHNlIDogU3BlY2lmaWVkIGludGVycnVwdCBpcyBub3QgcGVuZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gYm9vbCBJbnRQZW5kR2V0KHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbnBlbmRzIGFuIGludGVycnVwdC4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IGlzIHVucGVuZGVkIGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhpcyB3aWxsCisvLyEgY2F1c2UgYW55IHByZXZpb3VzbHkgZ2VuZXJhdGVkIGludGVycnVwdHMgdGhhdCBoYXZlIG5vdCBiZWVuIGhhbmRsZWQgeWV0CisvLyEgKGR1ZSB0byBoaWdoZXIgcHJpb3JpdHkgaW50ZXJydXB0cyBvciB0aGUgaW50ZXJydXB0IG5vIGhhdmluZyBiZWVuIGVuYWJsZWQKKy8vISB5ZXQpIHRvIGJlIGRpc2NhcmRlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMySW50ZXJydXB0IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHRvIGJlIHVucGVuZGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSW50UGVuZENsZWFyKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBwcmlvcml0eSBtYXNraW5nIGxldmVsLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgbWFza2luZyBsZXZlbCBzbyB0aGF0IGFsbAorLy8hIGludGVycnVwdHMgYXQgdGhlIHNwZWNpZmllZCBvciBsZXNzZXIgcHJpb3JpdHkgbGV2ZWwgYXJlIG1hc2tlZC4gVGhpcworLy8hIGNhbiBiZSB1c2VkIHRvIGdsb2JhbGx5IGRpc2FibGUgYSBzZXQgb2YgaW50ZXJydXB0cyB3aXRoIHByaW9yaXR5IGJlbG93CisvLyEgYSBwcmVkZXRlcm1pbmVkIHRocmVzaG9sZC4gQSB2YWx1ZSBvZiAwIGRpc2FibGVzIHByaW9yaXR5CisvLyEgbWFza2luZy4KKy8vIQorLy8hIFNtYWxsZXIgbnVtYmVycyBjb3JyZXNwb25kIHRvIGhpZ2hlciBpbnRlcnJ1cHQgcHJpb3JpdGllcy4gU28gZm9yIGV4YW1wbGUKKy8vISBhIHByaW9yaXR5IGxldmVsIG1hc2sgb2YgNCB3aWxsIGFsbG93IGludGVycnVwdHMgb2YgcHJpb3JpdHkgbGV2ZWwgMC0zLAorLy8hIGFuZCBpbnRlcnJ1cHRzIHdpdGggYSBudW1lcmljYWwgcHJpb3JpdHkgb2YgNCBhbmQgZ3JlYXRlciB3aWxsIGJlIGJsb2NrZWQuCisvLyEKKy8vISBUaGUgaGFyZHdhcmUgcHJpb3JpdHkgbWVjaGFuaXNtIHdpbGwgb25seSBsb29rIGF0IHRoZSB1cHBlciBOIGJpdHMgb2YgdGhlCisvLyEgcHJpb3JpdHkgbGV2ZWwgKHdoZXJlIE4gaXMgMyBmb3IgdGhlIENDMjZ4eCBmYW1pbHkpLCBzbyBhbnkKKy8vISBwcmlvcml0aXphdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCBpbiB0aG9zZSBiaXRzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQcmlvcml0eU1hc2sgaXMgdGhlIHByaW9yaXR5IGxldmVsIHRoYXQgd2lsbCBiZSBtYXNrZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK0ludFByaW9yaXR5TWFza1NldCh1aW50MzJfdCB1aTMyUHJpb3JpdHlNYXNrKQoreworICAgIENQVWJhc2VwcmlTZXQodWkzMlByaW9yaXR5TWFzayk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHByaW9yaXR5IG1hc2tpbmcgbGV2ZWwuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aGUgaW50ZXJydXB0IHByaW9yaXR5IG1hc2tpbmcKKy8vISBsZXZlbC4gVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSBwcmlvcml0eSBsZXZlbCBzdWNoIHRoYXQgYWxsIGludGVycnVwdHMKKy8vISBvZiB0aGF0IGFuZCBsZXNzZXIgcHJpb3JpdHkgYXJlIG1hc2tlZC4gQSB2YWx1ZSBvZiAwIG1lYW5zIHRoYXQgcHJpb3JpdHkKKy8vISBtYXNraW5nIGlzIGRpc2FibGVkLgorLy8hCisvLyEgU21hbGxlciBudW1iZXJzIGNvcnJlc3BvbmQgdG8gaGlnaGVyIGludGVycnVwdCBwcmlvcml0aWVzLiBTbyBmb3IgZXhhbXBsZQorLy8hIGEgcHJpb3JpdHkgbGV2ZWwgbWFzayBvZiA0IHdpbGwgYWxsb3cgaW50ZXJydXB0cyBvZiBwcmlvcml0eSBsZXZlbCAwLTMsCisvLyEgYW5kIGludGVycnVwdHMgd2l0aCBhIG51bWVyaWNhbCBwcmlvcml0eSBvZiA0IGFuZCBncmVhdGVyIHdpbGwgYmUgYmxvY2tlZC4KKy8vIQorLy8hIFRoZSBoYXJkd2FyZSBwcmlvcml0eSBtZWNoYW5pc20gd2lsbCBvbmx5IGxvb2sgYXQgdGhlIHVwcGVyIE4gYml0cyBvZiB0aGUKKy8vISBwcmlvcml0eSBsZXZlbCAod2hlcmUgTiBpcyAzIGZvciB0aGUgQ0MyNnh4IGZhbWlseSksIHNvIGFueQorLy8hIHByaW9yaXRpemF0aW9uIG11c3QgYmUgcGVyZm9ybWVkIGluIHRob3NlIGJpdHMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWwgbWFzay4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK0ludFByaW9yaXR5TWFza0dldCh2b2lkKQoreworICAgIHJldHVybihDUFViYXNlcHJpR2V0KCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9JbnRSZWdpc3RlcgorICAgICAgICAjdW5kZWYgIEludFJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICBST01fSW50UmVnaXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludFVucmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBJbnRVbnJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICAgICBST01fSW50VW5yZWdpc3RlcgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSW50UHJpb3JpdHlHcm91cGluZ1NldAorICAgICAgICAjdW5kZWYgIEludFByaW9yaXR5R3JvdXBpbmdTZXQKKyAgICAgICAgI2RlZmluZSBJbnRQcmlvcml0eUdyb3VwaW5nU2V0ICAgICAgICAgIFJPTV9JbnRQcmlvcml0eUdyb3VwaW5nU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnRQcmlvcml0eUdyb3VwaW5nR2V0CisgICAgICAgICN1bmRlZiAgSW50UHJpb3JpdHlHcm91cGluZ0dldAorICAgICAgICAjZGVmaW5lIEludFByaW9yaXR5R3JvdXBpbmdHZXQgICAgICAgICAgUk9NX0ludFByaW9yaXR5R3JvdXBpbmdHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludFByaW9yaXR5U2V0CisgICAgICAgICN1bmRlZiAgSW50UHJpb3JpdHlTZXQKKyAgICAgICAgI2RlZmluZSBJbnRQcmlvcml0eVNldCAgICAgICAgICAgICAgICAgIFJPTV9JbnRQcmlvcml0eVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSW50UHJpb3JpdHlHZXQKKyAgICAgICAgI3VuZGVmICBJbnRQcmlvcml0eUdldAorICAgICAgICAjZGVmaW5lIEludFByaW9yaXR5R2V0ICAgICAgICAgICAgICAgICAgUk9NX0ludFByaW9yaXR5R2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnRFbmFibGUKKyAgICAgICAgI3VuZGVmICBJbnRFbmFibGUKKyAgICAgICAgI2RlZmluZSBJbnRFbmFibGUgICAgICAgICAgICAgICAgICAgICAgIFJPTV9JbnRFbmFibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludERpc2FibGUKKyAgICAgICAgI3VuZGVmICBJbnREaXNhYmxlCisgICAgICAgICNkZWZpbmUgSW50RGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICBST01fSW50RGlzYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSW50UGVuZFNldAorICAgICAgICAjdW5kZWYgIEludFBlbmRTZXQKKyAgICAgICAgI2RlZmluZSBJbnRQZW5kU2V0ICAgICAgICAgICAgICAgICAgICAgIFJPTV9JbnRQZW5kU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JbnRQZW5kR2V0CisgICAgICAgICN1bmRlZiAgSW50UGVuZEdldAorICAgICAgICAjZGVmaW5lIEludFBlbmRHZXQgICAgICAgICAgICAgICAgICAgICAgUk9NX0ludFBlbmRHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0ludFBlbmRDbGVhcgorICAgICAgICAjdW5kZWYgIEludFBlbmRDbGVhcgorICAgICAgICAjZGVmaW5lIEludFBlbmRDbGVhciAgICAgICAgICAgICAgICAgICAgUk9NX0ludFBlbmRDbGVhcgorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19JTlRFUlJVUFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ludGVycnVwdF9kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2ludGVycnVwdF9kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTY5YzRiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW50ZXJydXB0X2RvYy5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaW50ZXJydXB0X2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBpbnRlcnJ1cHRfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfaW50ZXJydXB0IEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIGludGVycnVwdCBjb250cm9sbGVyIEFQSSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB0aGUKKy8vISBuZXN0ZWQgdmVjdG9yZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgKE5WSUMpLiBGdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHRvIGVuYWJsZQorLy8hIGFuZCBkaXNhYmxlIGludGVycnVwdHMsIHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycywgYW5kIHNldCB0aGUgcHJpb3JpdHkgb2YKKy8vISBpbnRlcnJ1cHRzLgorLy8hCisvLyEgVGhlIGV2ZW50IHNvdXJjZXMgdGhhdCB0cmlnZ2VyIHRoZSBpbnRlcnJ1cHQgbGluZXMgaW4gdGhlIE5WSUMgYXJlIGNvbnRyb2xsZWQgYnkKKy8vISB0aGUgTUNVIGV2ZW50IGZhYnJpYy4gQWxsIGV2ZW50IHNvdXJjZXMgYXJlIHN0YXRpY2FsbHkgY29ubmVjdGVkIHRvIHRoZSBOVklDIGludGVycnVwdCBsaW5lcworLy8hIGV4Y2VwdCBvbmUgd2hpY2ggaXMgcHJvZ3JhbW1hYmxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTUNVIGV2ZW50IGZhYnJpYywgc2VlIHRoZQorLy8hIFtNQ1UgZXZlbnQgZmFicmljIEFQSV0oXHJlZiBldmVudF9hcGkpLgorLy8hCisvLyEgVGhlIE5WSUMgcHJvdmlkZXMgZ2xvYmFsIGludGVycnVwdCBtYXNraW5nLCBwcmlvcml0aXphdGlvbiwgYW5kIGhhbmRsZXIKKy8vISBkaXNwYXRjaGluZy4gRGV2aWNlcyB3aXRoaW4gdGhlIFx0aV9kZXZpY2UgZmFtaWx5IHN1cHBvcnQgMzQKKy8vISBpbnRlcnJ1cHQgbGluZXMgYW5kIDggcHJpb3JpdHkgbGV2ZWxzIGZyb20gMCB0byA3IHdpdGggMCBiZWluZyB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKy8vISBJbmRpdmlkdWFsIGludGVycnVwdCBzb3VyY2VzIGNhbgorLy8hIGJlIG1hc2tlZCwgYW5kIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0IGNhbiBiZSBnbG9iYWxseSBtYXNrZWQgYXMgd2VsbCAod2l0aG91dAorLy8hIGFmZmVjdGluZyB0aGUgaW5kaXZpZHVhbCBzb3VyY2UgbWFza3MpLgorLy8hCisvLyEgVGhlIE5WSUMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIFN5c3RlbSBDUFUuIFdoZW4gdGhlCisvLyEgcHJvY2Vzc29yIHJlc3BvbmRzIHRvIGFuIGludGVycnVwdCwgdGhlIE5WSUMgc3VwcGxpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlCisvLyEgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbnRlcnJ1cHQgZGlyZWN0bHkgdG8gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIEVhY2ggaW50ZXJydXB0IHNvdXJjZSBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kIGRpc2FibGVkIHRocm91Z2g6CisvLyEgLSBccmVmIEludEVuYWJsZSgpCisvLyEgLSBccmVmIEludERpc2FibGUoKQorLy8hCisvLyEgVGhlIGdsb2JhbCBwcm9jZXNzb3IgaW50ZXJydXB0IGNhbiBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorLy8hIC0gXHJlZiBJbnRNYXN0ZXJFbmFibGUoKQorLy8hIC0gXHJlZiBJbnRNYXN0ZXJEaXNhYmxlKCkKKy8vIQorLy8hIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBpbmRpdmlkdWFsCisvLyEgaW50ZXJydXB0IGVuYWJsZSBzdGF0ZXMuIE1hc2tpbmcgb2YgdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQgY2FuIGJlIHVzZWQgYXMKKy8vISBhIHNpbXBsZSBjcml0aWNhbCBzZWN0aW9uIChvbmx5IGFuIE5NSSBjYW4gaW50ZXJydXB0IHRoZSBwcm9jZXNzb3Igd2hpbGUgdGhlCisvLyEgcHJvY2Vzc29yIGludGVycnVwdCBpcyBkaXNhYmxlZCksIGFsdGhvdWdoIG1hc2tpbmcgdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQgY2FuCisvLyEgaGF2ZSBhZHZlcnNlIGVmZmVjdHMgb24gdGhlIGludGVycnVwdCByZXNwb25zZSB0aW1lLgorLy8hCisvLyEgSXQgaXMgcG9zc2libGUgdG8gYWNjZXNzIHRoZSBOVklDIHRvIHNlZSBpZiBhbnkgaW50ZXJydXB0cyBhcmUgcGVuZGluZyBhbmQgbWFudWFsbHkKKy8vISBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gc2VydmljZWQgb3Igc2V0IGEgc3BlY2lmaWMgaW50ZXJydXB0IGFzCisvLyEgcGVuZGluZyB0byBiZSBoYW5kbGVkIGJhc2VkIG9uIGl0cyBwcmlvcml0eS4gUGVuZGluZyBpbnRlcnJ1cHRzIGFyZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkKKy8vISB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgYWNjZXB0ZWQgYW5kIGJlY29tZXMgYWN0aXZlIChiZWluZyBleGVjdXRlZCkuIFRoZSBmdW5jdGlvbnMgdG8gcmVhZCwKKy8vISBjbGVhciwgYW5kIHNldCBwZW5kaW5nIGludGVycnVwdHMgYXJlOgorLy8hIC0gXHJlZiBJbnRQZW5kR2V0KCkKKy8vISAtIFxyZWYgSW50UGVuZENsZWFyKCkKKy8vISAtIFxyZWYgSW50UGVuZFNldCgpCisvLyEKKy8vISBUaGUgaW50ZXJydXB0IHByaW9yaXRpemF0aW9uIGluIHRoZSBOVklDIGFsbG93cyBoYW5kbGluZyBvZiBoaWdoZXIgcHJpb3JpdHkgaW50ZXJydXB0cworLy8hIGJlZm9yZSBsb3dlciBwcmlvcml0eSBpbnRlcnJ1cHRzLCBhcyB3ZWxsIGFzIGFsbG93aW5nIHByZWVtcHRpb24gb2YKKy8vISBsb3dlciBwcmlvcml0eSBpbnRlcnJ1cHQgaGFuZGxlcnMgYnkgaGlnaGVyIHByaW9yaXR5IGludGVycnVwdHMuCisvLyEgVGhlIHByaW9yaXR5IG9mIGVhY2ggaW50ZXJydXB0IHNvdXJjZSBjYW4gYmUgc2V0IGFuZCBleGFtaW5lZCB1c2luZzoKKy8vISAtIFxyZWYgSW50UHJpb3JpdHlTZXQoKQorLy8hIC0gXHJlZiBJbnRQcmlvcml0eUdldCgpCisvLyEKKy8vISBJbnRlcnJ1cHRzIGNhbiBiZSBtYXNrZWQgYmFzZWQgb24gdGhlaXIgcHJpb3JpdHkgc3VjaCB0aGF0IGludGVycnVwdHMgd2l0aCB0aGUgc2FtZSBvciBsb3dlcgorLy8hIHByaW9yaXR5IHRoYW4gdGhlIG1hc2sgYXJlIGVmZmVjdGl2ZWx5IGRpc2FibGVkLiBUaGlzIGNhbiBiZSBjb25maWd1cmVkIHdpdGg6CisvLyEgLSBccmVmIEludFByaW9yaXR5TWFza1NldCgpCisvLyEgLSBccmVmIEludFByaW9yaXR5TWFza0dldCgpCisvLyEKKy8vISBTdWJwcmlvcml0aXphdGlvbiBpcyBhbHNvIHBvc3NpYmxlOyBpbnN0ZWFkIG9mIGhhdmluZyAzIGJpdHMgb2YgcHJlZW1wdGFibGUKKy8vISBwcmlvcml0aXphdGlvbiAoOCBsZXZlbHMpLCB0aGUgTlZJQyBjYW4gYmUgY29uZmlndXJlZCBmb3IgMyAtIE0gYml0cyBvZgorLy8hIHByZWVtcHRhYmxlIHByaW9yaXRpemF0aW9uIGFuZCBNIGJpdHMgb2Ygc3VicHJpb3JpdHkuIEluIHRoaXMgc2NoZW1lLCB0d28KKy8vISBpbnRlcnJ1cHRzIHdpdGggdGhlIHNhbWUgcHJlZW1wdGFibGUgcHJpb3JpdGl6YXRpb24gYnV0IGRpZmZlcmVudCBzdWJwcmlvcml0aWVzCisvLyEgZG8gbm90IGNhdXNlIGEgcHJlZW1wdGlvbjsgaW5zdGVhZCB0YWlsIGNoYWluaW5nIGlzIHVzZWQgdG8gcHJvY2VzcworLy8hIHRoZSB0d28gaW50ZXJydXB0cyBiYWNrLXRvLWJhY2suCisvLyEgSWYgdHdvIGludGVycnVwdHMgd2l0aCB0aGUgc2FtZSBwcmlvcml0eSAoYW5kIHN1YnByaW9yaXR5IGlmIHNvIGNvbmZpZ3VyZWQpIGFyZQorLy8hIGFzc2VydGVkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBvbmUgd2l0aCB0aGUgbG93ZXIgaW50ZXJydXB0IG51bWJlciBpcworLy8hIHByb2Nlc3NlZCBmaXJzdC4gU3VicHJpb3JpdGl6YXRpb24gaXMgaGFuZGxlZCBieToKKy8vISAtIFxyZWYgSW50UHJpb3JpdHlHcm91cGluZ1NldCgpCisvLyEgLSBccmVmIEludFByaW9yaXR5R3JvdXBpbmdHZXQoKQorLy8hCisvLyEgSW50ZXJydXB0IGhhbmRsZXJzIGNhbiBiZSBjb25maWd1cmVkIGluIG9uZSBvZiB0d28gd2F5czsgc3RhdGljYWxseSBhdCBjb21waWxlCisvLyEgdGltZSBvciBkeW5hbWljYWxseSBhdCBydW4gdGltZS4gU3RhdGljIGNvbmZpZ3VyYXRpb24gb2YgaW50ZXJydXB0IGhhbmRsZXJzIGlzCisvLyEgYWNjb21wbGlzaGVkIGJ5IGVkaXRpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIHRhYmxlIGluIHRoZSBzdGFydHVwIGNvZGUgb2YgdGhlIGFwcGxpY2F0aW9uLgorLy8hIFdoZW4gc3RhdGljYWxseSBjb25maWd1cmVkLCB0aGUgaW50ZXJydXB0cyBtdXN0IGJlIGV4cGxpY2l0bHkKKy8vISBlbmFibGVkIGluIHRoZSBOVklDIHRocm91Z2ggXHJlZiBJbnRFbmFibGUoKSBiZWZvcmUgdGhlIHByb2Nlc3NvciBjYW4gcmVzcG9uZCB0byB0aGUKKy8vISBpbnRlcnJ1cHQgKGluIGFkZGl0aW9uIHRvIGFueSBpbnRlcnJ1cHQgZW5hYmxpbmcgcmVxdWlyZWQgd2l0aGluIHRoZSBwZXJpcGhlcmFsKS4KKy8vISBTdGF0aWNhbGx5IGNvbmZpZ3VyaW5nIHRoZSBpbnRlcnJ1cHQgdGFibGUgcHJvdmlkZXMgdGhlIGZhc3Rlc3QKKy8vISBpbnRlcnJ1cHQgcmVzcG9uc2UgdGltZSBiZWNhdXNlIHRoZSBzdGFja2luZyBvcGVyYXRpb24gKGEgd3JpdGUgdG8gU1JBTSkgY2FuIGJlCisvLyEgcGVyZm9ybWVkIGluIHBhcmFsbGVsIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyIHRhYmxlIGZldGNoIChhIHJlYWQgZnJvbQorLy8hIEZsYXNoKSwgYXMgd2VsbCBhcyB0aGUgcHJlZmV0Y2ggb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIChhc3N1bWluZyBpdCBpcworLy8hIGFsc28gaW4gRmxhc2gpLgorLy8hCisvLyEgQWx0ZXJuYXRpdmVseSwgaW50ZXJydXB0cyBjYW4gYmUgY29uZmlndXJlZCBhdCBydW50aW1lIHVzaW5nIChvciB0aGUgY29ycmVzcG9uZGluZyBpbiBlYWNoIGluZGl2aWR1YWwgbW9kdWxlIEFQSSk6CisvLyEgLSBccmVmIEludFJlZ2lzdGVyKCkKKy8vISAtIFxyZWYgSW50VW5yZWdpc3RlcigpCisvLyEKKy8vISBSZWdpc3RlcmluZyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBpcyBhIHNpbXBsZSBtYXR0ZXIgb2YgaW5zZXJ0aW5nIHRoZSBoYW5kbGVyIGFkZHJlc3MgaW50byB0aGUKKy8vISB0YWJsZS4gQnkgZGVmYXVsdCwgdGhlIHRhYmxlIGlzIGZpbGxlZCB3aXRoIHBvaW50ZXJzIHRvIGFuIGludGVybmFsIGhhbmRsZXIKKy8vISB0aGF0IGxvb3BzIGZvcmV2ZXI7IGl0IGlzIGFuIGVycm9yIGZvciBhbiBpbnRlcnJ1cHQgdG8gb2NjdXIgd2hlbiB0aGVyZSBpcyBubworLy8hIGludGVycnVwdCBoYW5kbGVyIHJlZ2lzdGVyZWQgdG8gcHJvY2VzcyBpdC4gVGhlcmVmb3JlLCBpbnRlcnJ1cHQgc291cmNlcworLy8hIHNob3VsZCBub3QgYmUgZW5hYmxlZCBiZWZvcmUgYSBoYW5kbGVyIGhhcyBiZWVuIHJlZ2lzdGVyZWQsIGFuZCBpbnRlcnJ1cHQKKy8vISBzb3VyY2VzIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgYSBoYW5kbGVyIGlzIHVucmVnaXN0ZXJlZC4KKy8vISBXaGVuIHVzaW5nIFxyZWYgSW50UmVnaXN0ZXIoKSwgdGhlIGludGVycnVwdAorLy8hIG11c3QgYWxzbyBiZSBlbmFibGVkIGFzIGJlZm9yZTsgd2hlbiB1c2luZyB0aGUgZnVuY3Rpb24gaW4gZWFjaCBpbmRpdmlkdWFsCisvLyEgZnVuY3Rpb24gQVBJLCBccmVmIEludEVuYWJsZSgpIGlzIGNhbGxlZCBieSB0aGUgZHJpdmVyIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCBieQorLy8hIHRoZSBhcHBsaWNhdGlvbi4KKy8vISBSdW4tdGltZSBjb25maWd1cmF0aW9uIG9mIGludGVycnVwdHMgYWRkcyBhIHNtYWxsIGxhdGVuY3kgdG8gdGhlIGludGVycnVwdAorLy8hIHJlc3BvbnNlIHRpbWUgYmVjYXVzZSB0aGUgc3RhY2tpbmcgb3BlcmF0aW9uIChhIHdyaXRlIHRvIFNSQU0pIGFuZCB0aGUKKy8vISBpbnRlcnJ1cHQgaGFuZGxlciB0YWJsZSBmZXRjaCAoYSByZWFkIGZyb20gU1JBTSkgbXVzdCBiZSBwZXJmb3JtZWQKKy8vISBzZXF1ZW50aWFsbHkuCisvLyEKKy8vISBSdW4tdGltZSBjb25maWd1cmF0aW9uIG9mIGludGVycnVwdCBoYW5kbGVycyByZXF1aXJlcyB0aGF0IHRoZSBpbnRlcnJ1cHQKKy8vISBoYW5kbGVyIHRhYmxlIGlzIHBsYWNlZCBvbiBhIDEta0IgYm91bmRhcnkgaW4gU1JBTSAodHlwaWNhbGx5LCB0aGlzIGlzCisvLyEgYXQgdGhlIGJlZ2lubmluZyBvZiBTUkFNKS4gRmFpbHVyZSB0byBkbyBzbyByZXN1bHRzIGluIGFuIGluY29ycmVjdCB2ZWN0b3IKKy8vISBhZGRyZXNzIGJlaW5nIGZldGNoZWQgaW4gcmVzcG9uc2UgdG8gYW4gaW50ZXJydXB0LiBUaGUgdmVjdG9yIHRhYmxlIGlzIGluIGEKKy8vISBzZWN0aW9uIGNhbGxlZCBcdGlfY29kZXt2dGFibGV9IGFuZCBzaG91bGQgYmUgcGxhY2VkIGFwcHJvcHJpYXRlbHkgd2l0aCBhIGxpbmtlcgorLy8hIHNjcmlwdC4KKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2MuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Zjg5NjgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9pb2MuYwpAQCAtMCwwICsxLDc1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGlvYy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xOSAxMjoxODoxNSArMDEwMCAoVGh1LCAxOSBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTE0NworKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIElPQy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW9jLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBJT0NQb3J0Q29uZmlndXJlU2V0CisgICAgI2RlZmluZSBJT0NQb3J0Q29uZmlndXJlU2V0ICAgICAgICAgICAgIE5PUk9NX0lPQ1BvcnRDb25maWd1cmVTZXQKKyAgICAjdW5kZWYgIElPQ1BvcnRDb25maWd1cmVHZXQKKyAgICAjZGVmaW5lIElPQ1BvcnRDb25maWd1cmVHZXQgICAgICAgICAgICAgTk9ST01fSU9DUG9ydENvbmZpZ3VyZUdldAorICAgICN1bmRlZiAgSU9DSU9TaHV0ZG93blNldAorICAgICNkZWZpbmUgSU9DSU9TaHV0ZG93blNldCAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1NodXRkb3duU2V0CisgICAgI3VuZGVmICBJT0NJT01vZGVTZXQKKyAgICAjZGVmaW5lIElPQ0lPTW9kZVNldCAgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9Nb2RlU2V0CisgICAgI3VuZGVmICBJT0NJT0ludFNldAorICAgICNkZWZpbmUgSU9DSU9JbnRTZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT0ludFNldAorICAgICN1bmRlZiAgSU9DSU9Qb3J0UHVsbFNldAorICAgICNkZWZpbmUgSU9DSU9Qb3J0UHVsbFNldCAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1BvcnRQdWxsU2V0CisgICAgI3VuZGVmICBJT0NJT0h5c3RTZXQKKyAgICAjZGVmaW5lIElPQ0lPSHlzdFNldCAgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9IeXN0U2V0CisgICAgI3VuZGVmICBJT0NJT0lucHV0U2V0CisgICAgI2RlZmluZSBJT0NJT0lucHV0U2V0ICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPSW5wdXRTZXQKKyAgICAjdW5kZWYgIElPQ0lPU2xld0N0cmxTZXQKKyAgICAjZGVmaW5lIElPQ0lPU2xld0N0cmxTZXQgICAgICAgICAgICAgICAgTk9ST01fSU9DSU9TbGV3Q3RybFNldAorICAgICN1bmRlZiAgSU9DSU9EcnZTdHJlbmd0aFNldAorICAgICNkZWZpbmUgSU9DSU9EcnZTdHJlbmd0aFNldCAgICAgICAgICAgICBOT1JPTV9JT0NJT0RydlN0cmVuZ3RoU2V0CisgICAgI3VuZGVmICBJT0NJT1BvcnRJZFNldAorICAgICNkZWZpbmUgSU9DSU9Qb3J0SWRTZXQgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1BvcnRJZFNldAorICAgICN1bmRlZiAgSU9DSW50RW5hYmxlCisgICAgI2RlZmluZSBJT0NJbnRFbmFibGUgICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0ludEVuYWJsZQorICAgICN1bmRlZiAgSU9DSW50RGlzYWJsZQorICAgICNkZWZpbmUgSU9DSW50RGlzYWJsZSAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJbnREaXNhYmxlCisgICAgI3VuZGVmICBJT0NQaW5UeXBlR3Bpb0lucHV0CisgICAgI2RlZmluZSBJT0NQaW5UeXBlR3Bpb0lucHV0ICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVHcGlvSW5wdXQKKyAgICAjdW5kZWYgIElPQ1BpblR5cGVHcGlvT3V0cHV0CisgICAgI2RlZmluZSBJT0NQaW5UeXBlR3Bpb091dHB1dCAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVHcGlvT3V0cHV0CisgICAgI3VuZGVmICBJT0NQaW5UeXBlVWFydAorICAgICNkZWZpbmUgSU9DUGluVHlwZVVhcnQgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlVWFydAorICAgICN1bmRlZiAgSU9DUGluVHlwZVNzaU1hc3RlcgorICAgICNkZWZpbmUgSU9DUGluVHlwZVNzaU1hc3RlciAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlU3NpTWFzdGVyCisgICAgI3VuZGVmICBJT0NQaW5UeXBlU3NpU2xhdmUKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVTc2lTbGF2ZSAgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZVNzaVNsYXZlCisgICAgI3VuZGVmICBJT0NQaW5UeXBlSTJjCisgICAgI2RlZmluZSBJT0NQaW5UeXBlSTJjICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVJMmMKKyAgICAjdW5kZWYgIElPQ1BpblR5cGVBdXgKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVBdXggICAgICAgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZUF1eAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYW4gSU8gcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ1BvcnRDb25maWd1cmVTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQb3J0SWQsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJJT0NvbmZpZykKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCh1aTMyUG9ydElkIDw9IElPQ19QT1JUX1JGQ19HUEkxKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMlJlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgcG9ydC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJSZWcpID0gdWkzMklPQ29uZmlnIHwgdWkzMlBvcnRJZDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdldCB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBJTyBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK0lPQ1BvcnRDb25maWd1cmVHZXQodWludDMyX3QgdWkzMklPSWQpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMlJlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgSU8gY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIHJldHVybiBIV1JFRyh1aTMyUmVnKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldCB3YWtlLXVwIG9uIGFuIElPIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJT1NodXRkb3duU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9TaHV0ZG93bikKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisgICAgQVNTRVJUKCh1aTMySU9TaHV0ZG93biA9PSBJT0NfTk9fV0FLRV9VUCkgfHwKKyAgICAgICAgICAgKHVpMzJJT1NodXRkb3duID09IElPQ19XQUtFX09OX0xPVykgfHwKKyAgICAgICAgICAgKHVpMzJJT1NodXRkb3duID09IElPQ19XQUtFX09OX0hJR0gpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMlJlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMlJlZyk7CisgICAgdWkzMkNvbmZpZyAmPSB+SU9DX0lPQ0ZHMF9XVV9DRkdfTTsKKyAgICBIV1JFRyh1aTMyUmVnKSA9IHVpMzJDb25maWcgfCB1aTMySU9TaHV0ZG93bjsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0IHRoZSBJTyBNb2RlIG9mIGFuIElPIFBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJT01vZGVTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJT01vZGUpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMklPTW9kZSA9PSBJT0NfSU9NT0RFX05PUk1BTCkgfHwKKyAgICAgICAgICAgKHVpMzJJT01vZGUgPT0gSU9DX0lPTU9ERV9JTlYpIHx8CisgICAgICAgICAgICh1aTMySU9Nb2RlID09IElPQ19JT01PREVfT1BFTl9EUkFJTl9OT1JNQUwpIHx8CisgICAgICAgICAgICh1aTMySU9Nb2RlID09IElPQ19JT01PREVfT1BFTl9EUkFJTl9JTlYpIHx8CisgICAgICAgICAgICh1aTMySU9Nb2RlID09IElPQ19JT01PREVfT1BFTl9TUkNfTk9STUFMKSB8fAorICAgICAgICAgICAodWkzMklPTW9kZSA9PSBJT0NfSU9NT0RFX09QRU5fU1JDX0lOVikpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MuCisgICAgLy8KKyAgICB1aTMyUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMyUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9IH5JT0NfSU9DRkcwX0lPTU9ERV9NOworICAgIEhXUkVHKHVpMzJSZWcpID0gdWkzMkNvbmZpZyB8IHVpMzJJT01vZGU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXR1cCBpbnRlcnJ1cHQgZGV0ZWN0aW9uIG9uIGFuIElPIFBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJT0ludFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMkludCwgdWludDMyX3QgdWkzMkVkZ2VEZXQpCit7CisgICAgdWludDMyX3QgdWkzMklPUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisgICAgQVNTRVJUKCh1aTMySW50ID09IElPQ19JTlRfRU5BQkxFKSB8fAorICAgICAgICAgICAodWkzMkludCA9PSBJT0NfSU5UX0RJU0FCTEUpKTsKKyAgICBBU1NFUlQoKHVpMzJFZGdlRGV0ID09IElPQ19OT19FREdFKSB8fAorICAgICAgICAgICAodWkzMkVkZ2VEZXQgPT0gSU9DX0ZBTExJTkdfRURHRSkgfHwKKyAgICAgICAgICAgKHVpMzJFZGdlRGV0ID09IElPQ19SSVNJTkdfRURHRSkgfHwKKyAgICAgICAgICAgKHVpMzJFZGdlRGV0ID09IElPQ19CT1RIX0VER0VTKSk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcy4KKyAgICAvLworICAgIHVpMzJJT1JlZyA9IElPQ19CQVNFICsgKCB1aTMySU9JZCA8PCAyICk7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgSU8uCisgICAgLy8KKyAgICB1aTMyQ29uZmlnID0gSFdSRUcodWkzMklPUmVnKTsKKyAgICB1aTMyQ29uZmlnICY9ICB+KElPQ19JT0NGRzBfRURHRV9JUlFfRU4gfCBJT0NfSU9DRkcwX0VER0VfREVUX00pOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnIHwgKCh1aTMySW50ID8gSU9DX0lPQ0ZHMF9FREdFX0lSUV9FTiA6IDApIHwgdWkzMkVkZ2VEZXQpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0IHRoZSBwdWxsIG9uIGFuIElPIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJT1BvcnRQdWxsU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUHVsbCkKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50LgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMlB1bGwgPT0gSU9DX05PX0lPUFVMTCkgfHwKKyAgICAgICAgICAgKHVpMzJQdWxsID09IElPQ19JT1BVTExfVVApIHx8CisgICAgICAgICAgICh1aTMyUHVsbCA9PSBJT0NfSU9QVUxMX0RPV04pKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfUFVMTF9DVExfTTsKKyAgICBIV1JFRyh1aTMySU9SZWcpID0gdWkzMkNvbmZpZyB8IHVpMzJQdWxsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29uZmlndXJlIGh5c3RlcmVzaXMgb24gYW5kIElPIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJT0h5c3RTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJIeXN0ZXJlc2lzKQoreworICAgIHVpbnQzMl90IHVpMzJJT1JlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMkh5c3RlcmVzaXMgPT0gSU9DX0hZU1RfRU5BQkxFKSB8fAorICAgICAgICAgICAodWkzMkh5c3RlcmVzaXMgPT0gSU9DX0hZU1RfRElTQUJMRSkpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MuCisgICAgLy8KKyAgICB1aTMySU9SZWcgPSBJT0NfQkFTRSArICggdWkzMklPSWQgPDwgMiApOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIElPLgorICAgIC8vCisgICAgdWkzMkNvbmZpZyA9IEhXUkVHKHVpMzJJT1JlZyk7CisgICAgdWkzMkNvbmZpZyAmPSB+SU9DX0lPQ0ZHMF9IWVNUX0VOOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnIHwgdWkzMkh5c3RlcmVzaXM7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBFbmFibGUvZGlzYWJsZSBJTyBwb3J0IGFzIGlucHV0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9JbnB1dFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMklucHV0KQoreworICAgIHVpbnQzMl90IHVpMzJJT1JlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMklucHV0ID09IElPQ19JTlBVVF9FTkFCTEUpIHx8CisgICAgICAgICAgICh1aTMySW5wdXQgPT0gSU9DX0lOUFVUX0RJU0FCTEUpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfSUU7CisgICAgSFdSRUcodWkzMklPUmVnKSA9IHVpMzJDb25maWcgfCB1aTMySW5wdXQ7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBFbmFibGUvZGlzYWJsZSB0aGUgc2xldyBjb250cm9sIG9uIGFuIElPIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NJT1NsZXdDdHJsU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyU2xld0VuYWJsZSkKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKyAgICBBU1NFUlQoKHVpMzJTbGV3RW5hYmxlID09IElPQ19TTEVXX0VOQUJMRSkgfHwKKyAgICAgICAgICAgKHVpMzJTbGV3RW5hYmxlID09IElPQ19TTEVXX0RJU0FCTEUpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfU0xFV19SRUQ7CisgICAgSFdSRUcodWkzMklPUmVnKSA9IHVpMzJDb25maWcgfCB1aTMyU2xld0VuYWJsZTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSB0aGUgZHJpdmUgc3RyZW5ndGggYW5kIG1heGltdW0gY3VycmVudCBvZiBhbiBJTyBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9EcnZTdHJlbmd0aFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMklPQ3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkRydlN0cmVuZ3RoKQoreworICAgIHVpbnQzMl90IHVpMzJJT1JlZzsKKyAgICB1aW50MzJfdCB1aTMyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworICAgIEFTU0VSVCgodWkzMklPQ3VycmVudCA9PSBJT0NfQ1VSUkVOVF8yTUEpIHx8CisgICAgICAgICAgICh1aTMySU9DdXJyZW50ID09IElPQ19DVVJSRU5UXzRNQSkgfHwKKyAgICAgICAgICAgKHVpMzJJT0N1cnJlbnQgPT0gSU9DX0NVUlJFTlRfOE1BKSk7CisgICAgQVNTRVJUKCh1aTMyRHJ2U3RyZW5ndGggPT0gSU9DX1NUUkVOR1RIX01JTikgfHwKKyAgICAgICAgICAgKHVpMzJEcnZTdHJlbmd0aCA9PSBJT0NfU1RSRU5HVEhfTUFYKSB8fAorICAgICAgICAgICAodWkzMkRydlN0cmVuZ3RoID09IElPQ19TVFJFTkdUSF9NRUQpIHx8CisgICAgICAgICAgICh1aTMyRHJ2U3RyZW5ndGggPT0gSU9DX1NUUkVOR1RIX0FVVE8pKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBJTy4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfihJT0NfSU9DRkcwX0lPQ1VSUl9NIHwgSU9DX0lPQ0ZHMF9JT1NUUl9NKTsKKyAgICBIV1JFRyh1aTMySU9SZWcpID0gdWkzMkNvbmZpZyB8ICh1aTMySU9DdXJyZW50IHwgdWkzMkRydlN0cmVuZ3RoKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldHVwIHRoZSBQb3J0IElEIGZvciB0aGlzIElPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSU9Qb3J0SWRTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQb3J0SWQpCit7CisgICAgdWludDMyX3QgdWkzMklPUmVnOworICAgIHVpbnQzMl90IHVpMzJDb25maWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMklPSWQgPD0gSU9JRF8zMSk7CisgICAgQVNTRVJUKHVpMzJQb3J0SWQgPD0gSU9DX1BPUlRfUkZDX0dQSTEpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MuCisgICAgLy8KKyAgICB1aTMySU9SZWcgPSBJT0NfQkFTRSArICggdWkzMklPSWQgPDwgMiApOworCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIElPLgorICAgIC8vCisgICAgdWkzMkNvbmZpZyA9IEhXUkVHKHVpMzJJT1JlZyk7CisgICAgdWkzMkNvbmZpZyAmPSB+SU9DX0lPQ0ZHMF9QT1JUX0lEX007CisgICAgSFdSRUcodWkzMklPUmVnKSA9IHVpMzJDb25maWcgfCB1aTMyUG9ydElkOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRW5hYmxlcyBpbmRpdmlkdWFsIElPIGVkZ2UgZGV0ZWN0IGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ0ludEVuYWJsZSh1aW50MzJfdCB1aTMySU9JZCkKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0LgorICAgIC8vCisgICAgdWkzMkNvbmZpZyA9IEhXUkVHKHVpMzJJT1JlZyk7CisgICAgdWkzMkNvbmZpZyB8PSBJT0NfSU9DRkcwX0VER0VfSVJRX0VOOworICAgIEhXUkVHKHVpMzJJT1JlZykgPSB1aTMyQ29uZmlnOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGlzYWJsZXMgaW5kaXZpZHVhbCBJTyBlZGdlIGludGVycnVwdCBzb3VyY2VzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DSW50RGlzYWJsZSh1aW50MzJfdCB1aTMySU9JZCkKK3sKKyAgICB1aW50MzJfdCB1aTMySU9SZWc7CisgICAgdWludDMyX3QgdWkzMkNvbmZpZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSByZWdpc3RlciBhZGRyZXNzLgorICAgIC8vCisgICAgdWkzMklPUmVnID0gSU9DX0JBU0UgKyAoIHVpMzJJT0lkIDw8IDIgKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdC4KKyAgICAvLworICAgIHVpMzJDb25maWcgPSBIV1JFRyh1aTMySU9SZWcpOworICAgIHVpMzJDb25maWcgJj0gfklPQ19JT0NGRzBfRURHRV9JUlFfRU47CisgICAgSFdSRUcodWkzMklPUmVnKSA9IHVpMzJDb25maWc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXR1cCBhbiBJTyBmb3Igc3RhbmRhcmQgR1BJTyBpbnB1dAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ1BpblR5cGVHcGlvSW5wdXQodWludDMyX3QgdWkzMklPSWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworCisgICAgLy8KKyAgICAvLyBTZXR1cCB0aGUgSU8gZm9yIHN0YW5kYXJkIGlucHV0LgorICAgIC8vCisgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMySU9JZCwgSU9DX1BPUlRfR1BJTywgSU9DX1NURF9JTlBVVCk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBpbnB1dCBtb2RlIGluIHRoZSBHUElPIG1vZHVsZS4KKyAgICAvLworICAgIEdQSU9fc2V0T3V0cHV0RW5hYmxlRGlvKHVpMzJJT0lkLCBHUElPX09VVFBVVF9ESVNBQkxFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldHVwIGFuIElPIGZvciBzdGFuZGFyZCBHUElPIG91dHB1dAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ1BpblR5cGVHcGlvT3V0cHV0KHVpbnQzMl90IHVpMzJJT0lkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPIGZvciBzdGFuZGFyZCBpbnB1dC4KKyAgICAvLworICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMklPSWQsIElPQ19QT1JUX0dQSU8sIElPQ19TVERfT1VUUFVUKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIG91dHB1dCBtb2RlIGluIHRoZSBHUElPIG1vZHVsZS4KKyAgICAvLworICAgIEdQSU9fc2V0T3V0cHV0RW5hYmxlRGlvKHVpMzJJT0lkLCBHUElPX09VVFBVVF9FTkFCTEUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29uZmlndXJlIGEgc2V0IG9mIElPcyBmb3Igc3RhbmRhcmQgVUFSVCBwZXJpcGhlcmFsIGNvbnRyb2wKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQaW5UeXBlVWFydCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LCB1aW50MzJfdCB1aTMyVHgsCisgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ3RzLCB1aW50MzJfdCB1aTMyUnRzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMyQmFzZSA9PSBVQVJUMF9CQVNFKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKyAgICBBU1NFUlQoKHVpMzJSeCA8PSBJT0lEXzMxKSB8fCAodWkzMlJ4ID09IElPSURfVU5VU0VEKSk7CisgICAgQVNTRVJUKCh1aTMyVHggPD0gSU9JRF8zMSkgfHwgKHVpMzJUeCA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMkN0cyA8PSBJT0lEXzMxKSB8fCAodWkzMkN0cyA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMlJ0cyA8PSBJT0lEXzMxKSB8fCAodWkzMlJ0cyA9PSBJT0lEX1VOVVNFRCkpOworCisgICAgLy8KKyAgICAvLyBTZXR1cCB0aGUgSU9zIGluIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICBpZih1aTMyUnggIT0gSU9JRF9VTlVTRUQpCisgICAgeworICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJSeCwgSU9DX1BPUlRfTUNVX1VBUlQwX1JYLCBJT0NfU1REX0lOUFVUKTsKKyAgICB9CisgICAgaWYodWkzMlR4ICE9IElPSURfVU5VU0VEKQorICAgIHsKKyAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyVHgsIElPQ19QT1JUX01DVV9VQVJUMF9UWCwgSU9DX1NURF9PVVRQVVQpOworICAgIH0KKyAgICBpZih1aTMyQ3RzICE9IElPSURfVU5VU0VEKQorICAgIHsKKyAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyQ3RzLCBJT0NfUE9SVF9NQ1VfVUFSVDBfQ1RTLCBJT0NfU1REX0lOUFVUKTsKKyAgICB9CisgICAgaWYodWkzMlJ0cyAhPSBJT0lEX1VOVVNFRCkKKyAgICB7CisgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMlJ0cywgSU9DX1BPUlRfTUNVX1VBUlQwX1JUUywgSU9DX1NURF9PVVRQVVQpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSBhIHNldCBvZiBJT3MgZm9yIHN0YW5kYXJkIFNTSSBwZXJpcGhlcmFsIG1hc3RlciBjb250cm9sCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorSU9DUGluVHlwZVNzaU1hc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LAorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVHgsIHVpbnQzMl90IHVpMzJGc3MsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDbGspCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyQmFzZSA9PSBTU0kwX0JBU0UpIHx8ICh1aTMyQmFzZSA9PSBTU0kxX0JBU0UpKTsKKyAgICBBU1NFUlQoKHVpMzJSeCA8PSBJT0lEXzMxKSB8fCAodWkzMlJ4ID09IElPSURfVU5VU0VEKSk7CisgICAgQVNTRVJUKCh1aTMyVHggPD0gSU9JRF8zMSkgfHwgKHVpMzJUeCA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMkZzcyA8PSBJT0lEXzMxKSB8fCAodWkzMkZzcyA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMkNsayA8PSBJT0lEXzMxKSB8fCAodWkzMkNsayA9PSBJT0lEX1VOVVNFRCkpOworCisgICAgLy8KKyAgICAvLyBTZXR1cCB0aGUgSU9zIGluIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICBpZih1aTMyQmFzZSA9PSBTU0kwX0JBU0UpCisgICAgeworICAgICAgICBpZih1aTMyUnggIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMlJ4LCBJT0NfUE9SVF9NQ1VfU1NJMF9SWCwgSU9DX1NURF9JTlBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMlR4ICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJUeCwgSU9DX1BPUlRfTUNVX1NTSTBfVFgsIElPQ19TVERfT1VUUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyRnNzICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJGc3MsIElPQ19QT1JUX01DVV9TU0kwX0ZTUywgSU9DX1NURF9PVVRQVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJDbGsgIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkNsaywgSU9DX1BPUlRfTUNVX1NTSTBfQ0xLLCBJT0NfU1REX09VVFBVVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYodWkzMlJ4ICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJSeCwgSU9DX1BPUlRfTUNVX1NTSTFfUlgsIElPQ19TVERfSU5QVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJUeCAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyVHgsIElPQ19QT1JUX01DVV9TU0kxX1RYLCBJT0NfU1REX09VVFBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMkZzcyAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyRnNzLCBJT0NfUE9SVF9NQ1VfU1NJMV9GU1MsIElPQ19TVERfT1VUUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyQ2xrICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJDbGssIElPQ19QT1JUX01DVV9TU0kxX0NMSywgSU9DX1NURF9PVVRQVVQpOworICAgICAgICB9CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29uZmlndXJlIGEgc2V0IG9mIElPcyBmb3Igc3RhbmRhcmQgU1NJIHBlcmlwaGVyYWwgc2xhdmUgY29udHJvbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ1BpblR5cGVTc2lTbGF2ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJUeCwgdWludDMyX3QgdWkzMkZzcywKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2xrKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkJhc2UgPT0gU1NJMF9CQVNFKSB8fCAodWkzMkJhc2UgPT0gU1NJMV9CQVNFKSk7CisgICAgQVNTRVJUKCh1aTMyUnggPD0gSU9JRF8zMSkgfHwgKHVpMzJSeCA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMlR4IDw9IElPSURfMzEpIHx8ICh1aTMyVHggPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJGc3MgPD0gSU9JRF8zMSkgfHwgKHVpMzJGc3MgPT0gSU9JRF9VTlVTRUQpKTsKKyAgICBBU1NFUlQoKHVpMzJDbGsgPD0gSU9JRF8zMSkgfHwgKHVpMzJDbGsgPT0gSU9JRF9VTlVTRUQpKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPcyBpbiB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgaWYodWkzMkJhc2UgPT0gU1NJMF9CQVNFKQorICAgIHsKKyAgICAgICAgaWYodWkzMlJ4ICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJSeCwgSU9DX1BPUlRfTUNVX1NTSTBfUlgsICBJT0NfU1REX0lOUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyVHggIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMlR4LCBJT0NfUE9SVF9NQ1VfU1NJMF9UWCwgSU9DX1NURF9PVVRQVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJGc3MgIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkZzcywgSU9DX1BPUlRfTUNVX1NTSTBfRlNTLCBJT0NfU1REX0lOUFVUKTsKKyAgICAgICAgfQorICAgICAgICBpZih1aTMyQ2xrICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJDbGssIElPQ19QT1JUX01DVV9TU0kwX0NMSywgSU9DX1NURF9JTlBVVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYodWkzMlJ4ICE9IElPSURfVU5VU0VEKQorICAgICAgICB7CisgICAgICAgICAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJSeCwgSU9DX1BPUlRfTUNVX1NTSTFfUlgsIElPQ19TVERfSU5QVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJUeCAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyVHgsIElPQ19QT1JUX01DVV9TU0kxX1RYLCBJT0NfU1REX09VVFBVVCk7CisgICAgICAgIH0KKyAgICAgICAgaWYodWkzMkZzcyAhPSBJT0lEX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMyRnNzLCBJT0NfUE9SVF9NQ1VfU1NJMV9GU1MsIElPQ19TVERfSU5QVVQpOworICAgICAgICB9CisgICAgICAgIGlmKHVpMzJDbGsgIT0gSU9JRF9VTlVTRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkNsaywgSU9DX1BPUlRfTUNVX1NTSTFfQ0xLLCBJT0NfU1REX0lOUFVUKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZSBhIHNldCBvZiBJT3MgZm9yIHN0YW5kYXJkIEkyQyBwZXJpcGhlcmFsIGNvbnRyb2wKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitJT0NQaW5UeXBlSTJjKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRGF0YSwgdWludDMyX3QgdWkzMkNsaykKK3sKKyAgICB1aW50MzJfdCB1aTMySU9Db25maWc7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJEYXRhIDw9IElPSURfMzEpIHx8ICh1aTMyRGF0YSA9PSBJT0lEX1VOVVNFRCkpOworICAgIEFTU0VSVCgodWkzMkNsayA8PSBJT0lEXzMxKSB8fCAodWkzMkNsayA9PSBJT0lEX1VOVVNFRCkpOworCisgICAgLy8KKyAgICAvLyBEZWZpbmUgdGhlIElPIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKyAgICAvLworICAgIHVpMzJJT0NvbmZpZyA9IElPQ19DVVJSRU5UXzJNQSB8IElPQ19TVFJFTkdUSF9BVVRPIHwgSU9DX0lPUFVMTF9VUCB8CisgICAgICAgICAgICAgICAgICAgSU9DX1NMRVdfRElTQUJMRSB8IElPQ19IWVNUX0RJU0FCTEUgfCBJT0NfTk9fRURHRSB8CisgICAgICAgICAgICAgICAgICAgSU9DX0lOVF9ESVNBQkxFIHwgSU9DX0lPTU9ERV9PUEVOX0RSQUlOX05PUk1BTCB8CisgICAgICAgICAgICAgICAgICAgSU9DX05PX1dBS0VfVVAgfCBJT0NfSU5QVVRfRU5BQkxFOworCisgICAgLy8KKyAgICAvLyBTZXR1cCB0aGUgSU9zIGluIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICBJT0NQb3J0Q29uZmlndXJlU2V0KHVpMzJEYXRhLCBJT0NfUE9SVF9NQ1VfSTJDX01TU0RBLCB1aTMySU9Db25maWcpOworICAgIElPQ1BvcnRDb25maWd1cmVTZXQodWkzMkNsaywgSU9DX1BPUlRfTUNVX0kyQ19NU1NDTCwgdWkzMklPQ29uZmlnKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ29uZmlndXJlIGFuIElPIGZvciBBVVggY29udHJvbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0lPQ1BpblR5cGVBdXgodWludDMyX3QgdWkzMklPSWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySU9JZCA8PSBJT0lEXzMxKSB8fCAodWkzMklPSWQgPT0gSU9JRF9VTlVTRUQpKTsKKworICAgIC8vCisgICAgLy8gU2V0dXAgdGhlIElPLgorICAgIC8vCisgICAgSU9DUG9ydENvbmZpZ3VyZVNldCh1aTMySU9JZCwgSU9DX1BPUlRfQVVYX0lPLCBJT0NfU1REX0lOUFVUKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNWE2OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvYy5oCkBAIC0wLDAgKzEsMTE2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGlvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNyAxNDoxNDozNCArMDEwMCAoVHVlLCAxNyBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTExNQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBJTyBDb250cm9sbGVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBpb2NfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19JT0NfSF9fCisjZGVmaW5lIF9fSU9DX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pb2MuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZ3Bpby5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBJT0NQb3J0Q29uZmlndXJlU2V0ICAgICAgICAgICAgIE5PUk9NX0lPQ1BvcnRDb25maWd1cmVTZXQKKyAgICAjZGVmaW5lIElPQ1BvcnRDb25maWd1cmVHZXQgICAgICAgICAgICAgTk9ST01fSU9DUG9ydENvbmZpZ3VyZUdldAorICAgICNkZWZpbmUgSU9DSU9TaHV0ZG93blNldCAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1NodXRkb3duU2V0CisgICAgI2RlZmluZSBJT0NJT01vZGVTZXQgICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPTW9kZVNldAorICAgICNkZWZpbmUgSU9DSU9JbnRTZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT0ludFNldAorICAgICNkZWZpbmUgSU9DSU9Qb3J0UHVsbFNldCAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1BvcnRQdWxsU2V0CisgICAgI2RlZmluZSBJT0NJT0h5c3RTZXQgICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPSHlzdFNldAorICAgICNkZWZpbmUgSU9DSU9JbnB1dFNldCAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT0lucHV0U2V0CisgICAgI2RlZmluZSBJT0NJT1NsZXdDdHJsU2V0ICAgICAgICAgICAgICAgIE5PUk9NX0lPQ0lPU2xld0N0cmxTZXQKKyAgICAjZGVmaW5lIElPQ0lPRHJ2U3RyZW5ndGhTZXQgICAgICAgICAgICAgTk9ST01fSU9DSU9EcnZTdHJlbmd0aFNldAorICAgICNkZWZpbmUgSU9DSU9Qb3J0SWRTZXQgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJT1BvcnRJZFNldAorICAgICNkZWZpbmUgSU9DSW50RW5hYmxlICAgICAgICAgICAgICAgICAgICBOT1JPTV9JT0NJbnRFbmFibGUKKyAgICAjZGVmaW5lIElPQ0ludERpc2FibGUgICAgICAgICAgICAgICAgICAgTk9ST01fSU9DSW50RGlzYWJsZQorICAgICNkZWZpbmUgSU9DUGluVHlwZUdwaW9JbnB1dCAgICAgICAgICAgICBOT1JPTV9JT0NQaW5UeXBlR3Bpb0lucHV0CisgICAgI2RlZmluZSBJT0NQaW5UeXBlR3Bpb091dHB1dCAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVHcGlvT3V0cHV0CisgICAgI2RlZmluZSBJT0NQaW5UeXBlVWFydCAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVVYXJ0CisgICAgI2RlZmluZSBJT0NQaW5UeXBlU3NpTWFzdGVyICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVTc2lNYXN0ZXIKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVTc2lTbGF2ZSAgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZVNzaVNsYXZlCisgICAgI2RlZmluZSBJT0NQaW5UeXBlSTJjICAgICAgICAgICAgICAgICAgIE5PUk9NX0lPQ1BpblR5cGVJMmMKKyAgICAjZGVmaW5lIElPQ1BpblR5cGVBdXggICAgICAgICAgICAgICAgICAgTk9ST01fSU9DUGluVHlwZUF1eAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBOdW1iZXIgb2YgSU9zIChtYXguIHRvdGFsIG9mIDMyKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlVNX0lPX01BWCAzMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIElPIElkIGZvciB0aGUgSU9DIG1vZHVsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9JRF8wICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gSU8gSWQgMAorI2RlZmluZSBJT0lEXzEgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBJTyBJZCAxCisjZGVmaW5lIElPSURfMiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIElPIElkIDIKKyNkZWZpbmUgSU9JRF8zICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAgLy8gSU8gSWQgMworI2RlZmluZSBJT0lEXzQgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBJTyBJZCA0CisjZGVmaW5lIElPSURfNSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUgIC8vIElPIElkIDUKKyNkZWZpbmUgSU9JRF82ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNiAgLy8gSU8gSWQgNgorI2RlZmluZSBJT0lEXzcgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3ICAvLyBJTyBJZCA3CisjZGVmaW5lIElPSURfOCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggIC8vIElPIElkIDgKKyNkZWZpbmUgSU9JRF85ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOSAgLy8gSU8gSWQgOQorI2RlZmluZSBJT0lEXzEwICAgICAgICAgICAgICAgICAweDAwMDAwMDBBICAvLyBJTyBJZCAxMAorI2RlZmluZSBJT0lEXzExICAgICAgICAgICAgICAgICAweDAwMDAwMDBCICAvLyBJTyBJZCAxMQorI2RlZmluZSBJT0lEXzEyICAgICAgICAgICAgICAgICAweDAwMDAwMDBDICAvLyBJTyBJZCAxMgorI2RlZmluZSBJT0lEXzEzICAgICAgICAgICAgICAgICAweDAwMDAwMDBEICAvLyBJTyBJZCAxMworI2RlZmluZSBJT0lEXzE0ICAgICAgICAgICAgICAgICAweDAwMDAwMDBFICAvLyBJTyBJZCAxNAorI2RlZmluZSBJT0lEXzE1ICAgICAgICAgICAgICAgICAweDAwMDAwMDBGICAvLyBJTyBJZCAxNQorI2RlZmluZSBJT0lEXzE2ICAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBJTyBJZCAxNgorI2RlZmluZSBJT0lEXzE3ICAgICAgICAgICAgICAgICAweDAwMDAwMDExICAvLyBJTyBJZCAxNworI2RlZmluZSBJT0lEXzE4ICAgICAgICAgICAgICAgICAweDAwMDAwMDEyICAvLyBJTyBJZCAxOAorI2RlZmluZSBJT0lEXzE5ICAgICAgICAgICAgICAgICAweDAwMDAwMDEzICAvLyBJTyBJZCAxOQorI2RlZmluZSBJT0lEXzIwICAgICAgICAgICAgICAgICAweDAwMDAwMDE0ICAvLyBJTyBJZCAyMAorI2RlZmluZSBJT0lEXzIxICAgICAgICAgICAgICAgICAweDAwMDAwMDE1ICAvLyBJTyBJZCAyMQorI2RlZmluZSBJT0lEXzIyICAgICAgICAgICAgICAgICAweDAwMDAwMDE2ICAvLyBJTyBJZCAyMgorI2RlZmluZSBJT0lEXzIzICAgICAgICAgICAgICAgICAweDAwMDAwMDE3ICAvLyBJTyBJZCAyMworI2RlZmluZSBJT0lEXzI0ICAgICAgICAgICAgICAgICAweDAwMDAwMDE4ICAvLyBJTyBJZCAyNAorI2RlZmluZSBJT0lEXzI1ICAgICAgICAgICAgICAgICAweDAwMDAwMDE5ICAvLyBJTyBJZCAyNQorI2RlZmluZSBJT0lEXzI2ICAgICAgICAgICAgICAgICAweDAwMDAwMDFBICAvLyBJTyBJZCAyNgorI2RlZmluZSBJT0lEXzI3ICAgICAgICAgICAgICAgICAweDAwMDAwMDFCICAvLyBJTyBJZCAyNworI2RlZmluZSBJT0lEXzI4ICAgICAgICAgICAgICAgICAweDAwMDAwMDFDICAvLyBJTyBJZCAyOAorI2RlZmluZSBJT0lEXzI5ICAgICAgICAgICAgICAgICAweDAwMDAwMDFEICAvLyBJTyBJZCAyOQorI2RlZmluZSBJT0lEXzMwICAgICAgICAgICAgICAgICAweDAwMDAwMDFFICAvLyBJTyBJZCAzMAorI2RlZmluZSBJT0lEXzMxICAgICAgICAgICAgICAgICAweDAwMDAwMDFGICAvLyBJTyBJZCAzMQorI2RlZmluZSBJT0lEX1VOVVNFRCAgICAgICAgICAgICAweEZGRkZGRkZGICAvLyBVbnVzZWQgSU8gSWQKKworI2RlZmluZSBJT0NfSU9JRF9NQVNLICAgICAgICAgICAweDAwMDAwMEZGICAvLyBJT0MgSU8gSWQgYml0IG1hc2sKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE51bWJlciBvZiBJTyBwb3J0cworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlVNX0lPX1BPUlRTIDU2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJT0MgUGVyaXBoZXJhbCBQb3J0IE1hcHBpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19QT1JUX0dQSU8gICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gRGVmYXVsdCBnZW5lcmFsIHB1cnBvc2UgSU8gdXNhZ2UKKyNkZWZpbmUgSU9DX1BPUlRfQU9OX0NMSzMySyAgICAgICAweDAwMDAwMDA3ICAvLyBBT04gRXh0ZXJuYWwgMzJrSHogY2xvY2sKKyNkZWZpbmUgSU9DX1BPUlRfQVVYX0lPICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBBVVggSU8gUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9TU0kwX1JYICAgICAgMHgwMDAwMDAwOSAgLy8gTUNVIFNTSTAgUmVjZWl2ZSBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NTSTBfVFggICAgICAweDAwMDAwMDBBICAvLyBNQ1UgU1NJMCBUcmFuc21pdCBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NTSTBfRlNTICAgICAweDAwMDAwMDBCICAvLyBNQ1UgU1NJMCBGU1MgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9TU0kwX0NMSyAgICAgMHgwMDAwMDAwQyAgLy8gTUNVIFNTSTAgQ2xvY2sgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9JMkNfTVNTREEgICAgMHgwMDAwMDAwRCAgLy8gTUNVIEkyQyBEYXRhIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfSTJDX01TU0NMICAgIDB4MDAwMDAwMEUgIC8vIE1DVSBJMkMgQ2xvY2sgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9VQVJUMF9SWCAgICAgMHgwMDAwMDAwRiAgLy8gTUNVIFVBUlQwIFJlY2VpdmUgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9VQVJUMF9UWCAgICAgMHgwMDAwMDAxMCAgLy8gTUNVIFVBUlQwIFRyYW5zbWl0IFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfVUFSVDBfQ1RTICAgIDB4MDAwMDAwMTEgIC8vIE1DVSBVQVJUMCBDbGVhciBUbyBTZW5kIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfVUFSVDBfUlRTICAgIDB4MDAwMDAwMTIgIC8vIE1DVSBVQVJUMCBSZXF1ZXN0IFRvIFNlbmQgUGluCisjZGVmaW5lIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMCAgMHgwMDAwMDAxNyAgLy8gTUNVIFBPUlQgRVZFTlQgMAorI2RlZmluZSBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDEgIDB4MDAwMDAwMTggIC8vIE1DVSBQT1JUIEVWRU5UIDEKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQyICAweDAwMDAwMDE5ICAvLyBNQ1UgUE9SVCBFVkVOVCAyCisjZGVmaW5lIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMyAgMHgwMDAwMDAxQSAgLy8gTUNVIFBPUlQgRVZFTlQgMworI2RlZmluZSBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDQgIDB4MDAwMDAwMUIgIC8vIE1DVSBQT1JUIEVWRU5UIDQKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ1ICAweDAwMDAwMDFDICAvLyBNQ1UgUE9SVCBFVkVOVCA1CisjZGVmaW5lIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNiAgMHgwMDAwMDAxRCAgLy8gTUNVIFBPUlQgRVZFTlQgNgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDcgIDB4MDAwMDAwMUUgIC8vIE1DVSBQT1JUIEVWRU5UIDcKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NXViAgICAgICAgICAweDAwMDAwMDIwICAvLyBTZXJpYWwgV2lyZSBWaWV3ZXIKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NTSTFfUlggICAgICAweDAwMDAwMDIxICAvLyBNQ1UgU1NJMSBSZWNlaXZlIFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfU1NJMV9UWCAgICAgIDB4MDAwMDAwMjIgIC8vIE1DVSBTU0kxIFRyYW5zbWl0IFBpbgorI2RlZmluZSBJT0NfUE9SVF9NQ1VfU1NJMV9GU1MgICAgIDB4MDAwMDAwMjMgIC8vIE1DVSBTU0kxIEZTUyBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX1NTSTFfQ0xLICAgICAweDAwMDAwMDI0ICAvLyBNQ1UgU1NJMSBDbG9jayBQaW4KKyNkZWZpbmUgSU9DX1BPUlRfTUNVX0kyU19BRDAgICAgICAweDAwMDAwMDI1ICAvLyBNQ1UgSTJTIERhdGEgUGluIDAKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX0kyU19BRDEgICAgICAweDAwMDAwMDI2ICAvLyBNQ1UgSTJTIERhdGEgUGluIDEKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX0kyU19XQ0xLICAgICAweDAwMDAwMDI3ICAvLyBNQ1UgSTJTIEZyYW1lL1dvcmQgQ2xvY2sKKyNkZWZpbmUgSU9DX1BPUlRfTUNVX0kyU19CQ0xLICAgICAweDAwMDAwMDI4ICAvLyBNQ1UgSTJTIEJpdCBDbG9jaworI2RlZmluZSBJT0NfUE9SVF9NQ1VfSTJTX01DTEsgICAgIDB4MDAwMDAwMjkgIC8vIE1DVSBJMlMgTWFzdGVyIGNsb2NrIDIKKyNkZWZpbmUgSU9DX1BPUlRfUkZDX1RSQyAgICAgICAgICAweDAwMDAwMDJFICAvLyBSRiBDb3JlIFRyYWNlcgorI2RlZmluZSBJT0NfUE9SVF9SRkNfR1BPMCAgICAgICAgIDB4MDAwMDAwMkYgIC8vIFJDIENvcmUgRGF0YSBPdXQgUGluIDAKKyNkZWZpbmUgSU9DX1BPUlRfUkZDX0dQTzEgICAgICAgICAweDAwMDAwMDMwICAvLyBSQyBDb3JlIERhdGEgT3V0IFBpbiAxCisjZGVmaW5lIElPQ19QT1JUX1JGQ19HUE8yICAgICAgICAgMHgwMDAwMDAzMSAgLy8gUkMgQ29yZSBEYXRhIE91dCBQaW4gMgorI2RlZmluZSBJT0NfUE9SVF9SRkNfR1BPMyAgICAgICAgIDB4MDAwMDAwMzIgIC8vIFJDIENvcmUgRGF0YSBPdXQgUGluIDMKKyNkZWZpbmUgSU9DX1BPUlRfUkZDX0dQSTAgICAgICAgICAweDAwMDAwMDMzICAvLyBSQyBDb3JlIERhdGEgSW4gUGluIDAKKyNkZWZpbmUgSU9DX1BPUlRfUkZDX0dQSTEgICAgICAgICAweDAwMDAwMDM0ICAvLyBSQyBDb3JlIERhdGEgSW4gUGluIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBhbiBJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9DX1NMRVdfRU5BQkxFICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfU0xFV19ESVNBQkxFICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElPQ19JTlBVVF9FTkFCTEUgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lOUFVUX0RJU0FCTEUgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJT0NfSFlTVF9FTkFCTEUgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19IWVNUX0RJU0FCTEUgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgc2h1dGRvd24gbW9kZSBvZiBhbiBJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9DX05PX1dBS0VfVVAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBJT0NfV0FLRV9PTl9MT1cgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElPQ19XQUtFX09OX0hJR0ggICAgICAgIDB4MTgwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgSU8gTW9kZSBvZiBhbiBJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9DX0lPTU9ERV9OT1JNQUwgICAgICAgMHgwMDAwMDAwMCAgLy8gTm9ybWFsIElucHV0L091dHB1dAorI2RlZmluZSBJT0NfSU9NT0RFX0lOViAgICAgICAgICAweDAxMDAwMDAwICAvLyBJbnZlcnRlZCBJbnB1dC9PdXRwdXQKKyNkZWZpbmUgSU9DX0lPTU9ERV9PUEVOX0RSQUlOX05PUk1BTCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8vIE9wZW4gRHJhaW4sIE5vcm1hbCBJbnB1dC9PdXRwdXQKKyNkZWZpbmUgSU9DX0lPTU9ERV9PUEVOX0RSQUlOX0lOViBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAgIC8vIE9wZW4gRHJhaW4sIEludmVydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0L091dHB1dAorI2RlZmluZSBJT0NfSU9NT0RFX09QRU5fU1JDX05PUk1BTCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAgIC8vIE9wZW4gU291cmNlLCBOb3JtYWwgSW5wdXQvT3V0cHV0CisjZGVmaW5lIElPQ19JT01PREVfT1BFTl9TUkNfSU5WIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMCAgLy8gT3BlbiBTb3VyY2UsIEludmVydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0L091dHB1dAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBlZGdlIGRldGVjdGlvbiBvbiBhbiBJTworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9DX05PX0VER0UgICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0ZBTExJTkdfRURHRSAgICAgICAgMHgwMDAxMDAwMCAgLy8gRWRnZSBkZXRlY3Rpb24gb24gZmFsbGluZyBlZGdlCisjZGVmaW5lIElPQ19SSVNJTkdfRURHRSAgICAgICAgIDB4MDAwMjAwMDAgIC8vIEVkZ2UgZGV0ZWN0aW9uIG9uIHJpc2luZyBlZGdlCisjZGVmaW5lIElPQ19CT1RIX0VER0VTICAgICAgICAgIDB4MDAwMzAwMDAgIC8vIEVkZ2UgZGV0ZWN0aW9uIG9uIGJvdGggZWRnZXMKKyNkZWZpbmUgSU9DX0lOVF9FTkFCTEUgICAgICAgICAgMHgwMDA0MDAwMCAgLy8gRW5hYmxlIGludGVycnVwdCBvbiBlZGdlIGRldGVjdAorI2RlZmluZSBJT0NfSU5UX0RJU0FCTEUgICAgICAgICAweDAwMDAwMDAwICAvLyBEaXNhYmxlIGludGVycnVwdCBvbiBlZGdlIGRldGVjdAorI2RlZmluZSBJT0NfSU5UX00gICAgICAgICAgICAgICAweDAwMDcwMDAwICAvLyBJbnQgY29uZmlnIG1hc2sKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGJlIHVzZWQgdG8gc2V0IHB1bGwgb24gYW4gSU8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIElPQ19OT19JT1BVTEwgICAgICAgICAgIDB4MDAwMDYwMDAgIC8vIE5vIElPIHB1bGwKKyNkZWZpbmUgSU9DX0lPUFVMTF9VUCAgICAgICAgICAgMHgwMDAwNDAwMCAgLy8gUHVsbCB1cAorI2RlZmluZSBJT0NfSU9QVUxMX0RPV04gICAgICAgICAweDAwMDAyMDAwICAvLyBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPUFVMTF9NICAgICAgICAgICAgMHgwMDAwNjAwMCAgLy8gUHVsbCBjb25maWcgbWFzaworI2RlZmluZSBJT0NfSU9QVUxMX00gICAgICAgICAgICAweDAwMDA2MDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIGFuIElPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJT0NfQ1VSUkVOVF8yTUEgICAgICAgICAweDAwMDAwMDAwICAvLyAybUEgZHJpdmUgc3RyZW5ndGgKKyNkZWZpbmUgSU9DX0NVUlJFTlRfNE1BICAgICAgICAgMHgwMDAwMDQwMCAgLy8gNG1BIGRyaXZlIHN0cmVuZ3RoCisjZGVmaW5lIElPQ19DVVJSRU5UXzhNQSAgICAgICAgIDB4MDAwMDA4MDAgIC8vIDQgb3IgOG1BIGRyaXZlIHN0cmVuZ3RoCisKKyNkZWZpbmUgSU9DX1NUUkVOR1RIX0FVVE8gICAgICAgMHgwMDAwMDAwMCAgLy8gQXV0b21hdGljIERyaXZlIFN0cmVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgyLzQvOCBtQSBAIFZWRFMpCisjZGVmaW5lIElPQ19TVFJFTkdUSF9NQVggICAgICAgIDB4MDAwMDAzMDAgIC8vIE1heGltdW0gRHJpdmUgU3RyZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDIvNC84IG1BIEAgMS44VikKKyNkZWZpbmUgSU9DX1NUUkVOR1RIX01FRCAgICAgICAgMHgwMDAwMDIwMCAgLy8gTWVkaXVtIERyaXZlIFN0cmVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgyLzQvOCBtQSBAIDIuNVYpCisjZGVmaW5lIElPQ19TVFJFTkdUSF9NSU4gICAgICAgIDB4MDAwMDAxMDAgIC8vIE1pbmltdW0gRHJpdmUgU3RyZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDIvNC84IG1BIEAgMy4zVikKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciBzdGFuZGFyZCBJTyBzZXR1cAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU9DX1NURF9JTlBVVCAgICAgICAgICAgKElPQ19DVVJSRU5UXzJNQSB8IElPQ19TVFJFTkdUSF9BVVRPIHwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfTk9fSU9QVUxMIHwgSU9DX1NMRVdfRElTQUJMRSB8ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX0hZU1RfRElTQUJMRSB8IElPQ19OT19FREdFIHwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ19JTlRfRElTQUJMRSB8IElPQ19JT01PREVfTk9STUFMIHwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfTk9fV0FLRV9VUCB8IElPQ19JTlBVVF9FTkFCTEUgKQorI2RlZmluZSBJT0NfU1REX09VVFBVVCAgICAgICAgICAoSU9DX0NVUlJFTlRfMk1BIHwgSU9DX1NUUkVOR1RIX0FVVE8gfCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ19OT19JT1BVTEwgfCBJT0NfU0xFV19ESVNBQkxFIHwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfSFlTVF9ESVNBQkxFIHwgSU9DX05PX0VER0UgfCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX0lOVF9ESVNBQkxFIHwgSU9DX0lPTU9ERV9OT1JNQUwgfCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ19OT19XQUtFX1VQIHwgSU9DX0lOUFVUX0RJU0FCTEUgKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIGFuIElPIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIElPLgorLy8hCisvLyEgVGhlIFxjIHVpMzJJT0lkIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hpY2ggSU8gdG8gY29uZmlndXJlLgorLy8hCisvLyEgVGhlIFxjIHVpMzJQb3J0SWQgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGljaCBmdW5jdGlvbmFsIHBlcmlwaGVyYWwgdG8gaG9vaworLy8hIHVwIHRvIHRoaXMgSU8uCisvLyEKKy8vISBUaGUgXGMgdWkzMklPQ29uZmlnIHBhcmFtZXRlciBjb25zaXN0cyBvZiBhIGJpdHdpc2UgT1InZWQgdmFsdWUgb2YgYWxsCisvLyEgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG1vZGVzCisvLyEKKy8vISBcbm90ZSBBbGwgSU8gUG9ydHMgYXJlIHRpZWQgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGluIGEgc3ViIG1vZHVsZQorLy8hIGV4Y2VwdCBmb3IgdGhlIFxyZWYgSU9DX1BPUlRfQVVYX0lPLiBFYWNoIG9mIHRoZSBJT3MgaW4gdGhlIEFVWCBkb21haW4gYXJlCisvLyEgaGFyZGNvZGVkIHRvIGEgc3BlY2lmaWMgSU8uIFdoZW4gZW5hYmxpbmcgb25lIG9yIG1vcmUgcGlucyBmb3IgdGhlIEFVWAorLy8hIGRvbWFpbiwgdGhleSBzaG91bGQgYWxsIGJlIGNvbmZpZ3VyZWQgdG8gdXNpbmcgXHJlZiBJT0NfUE9SVF9BVVhfSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlIGFuZCBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJQb3J0SWQgc2VsZWN0cyB0aGUgZnVuY3Rpb25hbCBJTyBwb3J0IHRvIGNvbm5lY3QuCisvLyEgVGhlIGF2YWlsYWJsZSBJTyBwb3J0cyBhcmU6CisvLyEgLSBccmVmIElPQ19QT1JUX0dQSU8KKy8vISAtIFxyZWYgSU9DX1BPUlRfQU9OX0NMSzMySworLy8hIC0gXHJlZiBJT0NfUE9SVF9BVVhfSU8KKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTBfUlgKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTBfVFgKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTBfRlNTCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX0NMSworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJDX01TU0RBCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMkNfTVNTQ0wKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1VBUlQwX1JYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9VQVJUMF9UWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfVUFSVDBfQ1RTCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9VQVJUMF9SVFMKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQwCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMQorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDIKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQzCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDUKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ2CisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1dWCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kxX1JYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kxX1RYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kxX0ZTUworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9DTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19BRDAKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19BRDEKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19XQ0xLCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfQkNMSworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJTX01DTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX1RSQworLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMAorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMQorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMgorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMworLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BJMAorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BJMQorLy8hIFxwYXJhbSB1aTMySU9Db25maWcgaXMgdGhlIElPIGNvbmZpZ3VyYXRpb24gY29uc2lzdGluZyBvZgorLy8hIHRoZSBiaXR3aXNlIE9SIG9mIGFsbCBjb25maWd1cmF0aW9uIG1vZGVzOgorLy8hIC0gSW5wdXQvb3V0cHV0IG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9OT1JNQUwKKy8vISAgIC0gXHJlZiBJT0NfSU9NT0RFX0lOVgorLy8hICAgLSBccmVmIElPQ19JT01PREVfT1BFTl9EUkFJTl9OT1JNQUwKKy8vISAgIC0gXHJlZiBJT0NfSU9NT0RFX09QRU5fRFJBSU5fSU5WCisvLyEgICAtIFxyZWYgSU9DX0lPTU9ERV9PUEVOX1NSQ19OT1JNQUwKKy8vISAgIC0gXHJlZiBJT0NfSU9NT0RFX09QRU5fU1JDX0lOVgorLy8hIC0gV2FrZSB1cCBtb2RlOgorLy8hICAgLSBccmVmIElPQ19OT19XQUtFX1VQCisvLyEgICAtIFxyZWYgSU9DX1dBS0VfT05fTE9XCisvLyEgICAtIFxyZWYgSU9DX1dBS0VfT05fSElHSAorLy8hIC0gRWRnZSBkZXRlY3Rpb24gbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfTk9fRURHRQorLy8hICAgLSBccmVmIElPQ19GQUxMSU5HX0VER0UKKy8vISAgIC0gXHJlZiBJT0NfUklTSU5HX0VER0UKKy8vISAgIC0gXHJlZiBJT0NfQk9USF9FREdFUworLy8hIC0gSW50ZXJydXB0IG1vZGUgb24gZWRnZSBkZXRlY3Rpb246CisvLyEgICAtIFxyZWYgSU9DX0lOVF9FTkFCTEUKKy8vISAgIC0gXHJlZiBJT0NfSU5UX0RJU0FCTEUKKy8vISAtIFB1bGwgbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfTk9fSU9QVUxMCisvLyEgICAtIFxyZWYgSU9DX0lPUFVMTF9VUAorLy8hICAgLSBccmVmIElPQ19JT1BVTExfRE9XTgorLy8hIC0gSW5wdXQgbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfSU5QVVRfRU5BQkxFCisvLyEgICAtIFxyZWYgSU9DX0lOUFVUX0RJU0FCTEUKKy8vISAtIEh5c3RlcmVzaXMgbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfSFlTVF9FTkFCTEUKKy8vISAgIC0gXHJlZiBJT0NfSFlTVF9ESVNBQkxFCisvLyEgLSBTbGV3IGNvbnRyb2wgbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfU0xFV19FTkFCTEUKKy8vISAgIC0gXHJlZiBJT0NfU0xFV19ESVNBQkxFCisvLyEgLSBNYXhpbXVtIGN1cnJlbnQgbW9kZToKKy8vISAgIC0gXHJlZiBJT0NfQ1VSUkVOVF8yTUEKKy8vISAgIC0gXHJlZiBJT0NfQ1VSUkVOVF80TUEKKy8vISAgIC0gXHJlZiBJT0NfQ1VSUkVOVF84TUEKKy8vISAtIERyaXZlIHN0cmVuZ3RoIG1vZGU6CisvLyEgICAtIFxyZWYgSU9DX1NUUkVOR1RIX0FVVE8KKy8vISAgIC0gXHJlZiBJT0NfU1RSRU5HVEhfTUFYCisvLyEgICAtIFxyZWYgSU9DX1NUUkVOR1RIX01FRAorLy8hICAgLSBccmVmIElPQ19TVFJFTkdUSF9NSU4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ1BvcnRDb25maWd1cmVTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQb3J0SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJJT0NvbmZpZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBJTyBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBnZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGFuIElPLgorLy8hCisvLyEgRWFjaCBJTyBwb3J0IGhhcyBhIGRlZGljYXRlZCByZWdpc3RlciBmb3Igc2V0dGluZyB1cCB0aGUgSU8uIFRoaXMgZnVuY3Rpb24KKy8vISByZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnaXZlbiBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBzZWxlY3RzIHRoZSBJTyB0byByZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIElPIFBvcnQgY29uZmlndXJhdGlvbi4KKy8vISBTZWUgXHJlZiBJT0NQb3J0Q29uZmlndXJlU2V0KCkgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgSU9DUG9ydENvbmZpZ3VyZUdldCh1aW50MzJfdCB1aTMySU9JZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB3YWtlLXVwIG9uIGFuIElPIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSB3YWtlLXVwIG1vZGUgb2YgYW4gSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJJT1NodXRkb3duIGVuYWJsZXMgd2FrZS11cCBvbiBMT1cvSElHSCBieSB0aGlzIElPIHBvcnQuCisvLyEgLSBccmVmIElPQ19OT19XQUtFX1VQCisvLyEgLSBccmVmIElPQ19XQUtFX09OX0xPVworLy8hIC0gXHJlZiBJT0NfV0FLRV9PTl9ISUdICisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NJT1NodXRkb3duU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9TaHV0ZG93bik7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSBJTyBNb2RlIG9mIGFuIElPIFBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBpbnB1dC9vdXRwdXQgbW9kZSBvZiBhbiBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBkZWZpbmVzIHRoZSBJTyB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISBccGFyYW0gdWkzMklPTW9kZSBzZXRzIHRoZSBwb3J0IElPIE1vZGUuCisvLyEgLSBccmVmIElPQ19JT01PREVfTk9STUFMCisvLyEgLSBccmVmIElPQ19JT01PREVfSU5WCisvLyEgLSBccmVmIElPQ19JT01PREVfT1BFTl9EUkFJTl9OT1JNQUwKKy8vISAtIFxyZWYgSU9DX0lPTU9ERV9PUEVOX0RSQUlOX0lOVgorLy8hIC0gXHJlZiBJT0NfSU9NT0RFX09QRU5fU1JDX05PUk1BTAorLy8hIC0gXHJlZiBJT0NfSU9NT0RFX09QRU5fU1JDX0lOVgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9Nb2RlU2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySU9Nb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0dXAgaW50ZXJydXB0IGRldGVjdGlvbiBvbiBhbiBJTyBQb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldHVwIHRoZSBpbnRlcnJ1cHQgZGV0ZWN0aW9uIG9uIGFuIElPLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGRlZmluZXMgdGhlIElPIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIFxwYXJhbSB1aTMySW50IGVuYWJsZXMvZGlzYWJsZXMgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhpcyBJTyBwb3J0LgorLy8hIC0gXHJlZiBJT0NfSU5UX0VOQUJMRQorLy8hIC0gXHJlZiBJT0NfSU5UX0RJU0FCTEUKKy8vISBccGFyYW0gdWkzMkVkZ2VEZXQgZW5hYmxlcy9kaXNhYmxlcyBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTyBwb3J0LgorLy8hIC0gXHJlZiBJT0NfTk9fRURHRQorLy8hIC0gXHJlZiBJT0NfRkFMTElOR19FREdFCisvLyEgLSBccmVmIElPQ19SSVNJTkdfRURHRQorLy8hIC0gXHJlZiBJT0NfQk9USF9FREdFUworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9JbnRTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJbnQsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyRWRnZURldCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgcHVsbCBvbiBhbiBJTyBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgcHVsbCBvbiBhbiBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBkZWZpbmVzIHRoZSBJTyB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISBccGFyYW0gdWkzMlB1bGwgZW5hYmxlcy9kaXNhYmxlcyBwdWxsIG9uIHRoaXMgSU8gcG9ydC4KKy8vISAtIFxyZWYgSU9DX05PX0lPUFVMTAorLy8hIC0gXHJlZiBJT0NfSU9QVUxMX1VQCisvLyEgLSBccmVmIElPQ19JT1BVTExfRE9XTgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9Qb3J0UHVsbFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMlB1bGwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgaHlzdGVyZXNpcyBvbiBhbmQgSU8gcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBoeXN0ZXJlc2lzIG9uIGFuIElPLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGRlZmluZXMgdGhlIElPIHRvIGNvbmZpZ3VyZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIFxwYXJhbSB1aTMySHlzdGVyZXNpcyBlbmFibGUvZGlzYWJsZSBpbnB1dCBoeXN0ZXJlc2lzIG9uIElPLgorLy8hIC0gXHJlZiBJT0NfSFlTVF9FTkFCTEUKKy8vISAtIFxyZWYgSU9DX0hZU1RfRElTQUJMRQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9IeXN0U2V0KHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySHlzdGVyZXNpcyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZS9kaXNhYmxlIElPIHBvcnQgYXMgaW5wdXQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgaW5wdXQgb24gYW4gSU8uCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJJbnB1dCBlbmFibGUvZGlzYWJsZSBpbnB1dCBvbiBJTy4KKy8vISAtIFxyZWYgSU9DX0lOUFVUX0VOQUJMRQorLy8hIC0gXHJlZiBJT0NfSU5QVVRfRElTQUJMRQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9JbnB1dFNldCh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMklucHV0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlL2Rpc2FibGUgdGhlIHNsZXcgY29udHJvbCBvbiBhbiBJTyBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHNsZXcgY29udHJvbCBvbiBhbiBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBkZWZpbmVzIHRoZSBJTyB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISBccGFyYW0gdWkzMlNsZXdFbmFibGUgZW5hYmxlcy9kaXNhYmxlcyB0aGUgc2xldyBjb250cm9sIG9uIGFuIG91dHB1dC4KKy8vISAtIFxyZWYgSU9DX1NMRVdfRU5BQkxFCisvLyEgLSBccmVmIElPQ19TTEVXX0RJU0FCTEUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPU2xld0N0cmxTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJTbGV3RW5hYmxlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBkcml2ZSBzdHJlbmd0aCBzb3VyY2UgYW5kIGN1cnJlbnQgbW9kZSBvZiBhbiBJTyBwb3J0LgorLy8hCisvLyEgVGhlIGRyaXZlIHN0cmVuZ3RoIG9mIGFuIElPIGlzIGNvbmZpZ3VyZWQgYnkgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBzZXR0aW5ncworLy8hIGluIHNldmVyYWwgbW9kdWxlcy4gVGhlIGRyaXZlIHN0cmVuZ3RoIHNvdXJjZSBcdGlfY29kZXt1aTMyRHJ2U3RyZW5ndGh9IGlzIHVzZWQgZm9yIGNvbnRyb2xsaW5nCisvLyEgZHJpdmUgc3RyZW5ndGggYXQgZGlmZmVyZW50IHN1cHBseSBsZXZlbHMuIFdoZW4gc2V0IHRvIEFVVE8gdGhlIGJhdHRlcnkgbW9uaXRvcgorLy8hIChCQVRNT04pIGFkanVzdHMgdGhlIGRyaXZlIHN0cmVuZ3RoIHRvIGNvbXBlbnNhdGUgZm9yIGNoYW5nZXMgaW4gc3VwcGx5IHZvbHRhZ2UKKy8vISBpbiBvcmRlciB0byBrZWVwIElPIGN1cnJlbnQgY29uc3RhbnQuIEFsdGVybmF0aXZlbHksIGRyaXZlIHN0cmVuZ3RoIHNvdXJjZSBjYW4KKy8vISBiZSBjb250cm9sbGVkIG1hbnVhbGx5IGJ5IHNlbGVjdGluZyBvbmUgb2YgdGhyZWUgb3B0aW9ucyBlYWNoIG9mIHdoaWNoIGlzIGNvbmZpZ3VyYWJsZQorLy8hIGluIHRoZSBBT04gSU9DIGJ5IFxyZWYgQU9OSU9DRHJpdmVTdHJlbmd0aFNldCgpLgorLy8hCisvLyEgRWFjaCBkcml2ZSBzdHJlbmd0aCBzb3VyY2UgaGFzIHRocmVlIGN1cnJlbnQgbW9kZXM6IExvdy1DdXJyZW50IChMQyksIEhpZ2gtQ3VycmVudCAoSEMpLCBhbmQKKy8vISBFeHRlbmRlZC1DdXJyZW50IChFQyksIGFuZCB0eXBpY2FsbHkgZHJpdmUgc3RyZW5ndGggZG91YmxlcyB3aGVuIHNlbGVjdGluZyBhIGhpZ2hlciBtb2RlLgorLy8hIEkuZS4gRUMgPSAyIHggSEMgPSA0IHggTEMuCisvLyEKKy8vISBcbm90ZSBOb3QgYWxsIElPcyBzdXBwb3J0IEV4dGVuZGVkLUN1cnJlbnQgbW9kZS4gU2VlIGRhdGFzaGVldCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorLy8hIG9uIHRoZSBzcGVjaWZpYyBkZXZpY2UuCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgZGVmaW5lcyB0aGUgSU8gdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgXHBhcmFtIHVpMzJJT0N1cnJlbnQgc2VsZWN0cyB0aGUgSU8gY3VycmVudCBtb2RlLgorLy8hIC0gXHJlZiBJT0NfQ1VSUkVOVF8yTUEgOiBMb3ctQ3VycmVudCBtb2RlLiBNaW4gMiBtQSB3aGVuIFx0aV9jb2Rle3VpMzJEcnZTdHJlbmd0aH0gaXMgc2V0IHRvIEFVVE8uCisvLyEgLSBccmVmIElPQ19DVVJSRU5UXzRNQSA6IEhpZ2gtQ3VycmVudCBtb2RlLiBNaW4gNCBtQSB3aGVuIFx0aV9jb2Rle3VpMzJEcnZTdHJlbmd0aH0gaXMgc2V0IHRvIEFVVE8uCisvLyEgLSBccmVmIElPQ19DVVJSRU5UXzhNQSA6IEV4dGVuZGVkLUN1cnJlbnQgbW9kZS4gTWluIDggbUEgZm9yIGRvdWJsZSBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKSB3aGVuIFx0aV9jb2Rle3VpMzJEcnZTdHJlbmd0aH0gaXMgc2V0IHRvIEFVVE8uCisvLyEgXHBhcmFtIHVpMzJEcnZTdHJlbmd0aCBzZXRzIHRoZSBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhlIElPIHBvcnQuCisvLyEgLSBccmVmIElPQ19TVFJFTkdUSF9BVVRPIDogQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04gYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlIChkZWZhdWx0KS4KKy8vISAtIFxyZWYgSU9DX1NUUkVOR1RIX01BWCA6IE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIHVzZWQgZm9yIGxvdyBzdXBwbHkgbGV2ZWxzLiBDb250cm9sbGVkIGJ5IEFPTiBJT0MgKHNlZSBccmVmIEFPTklPQ0RyaXZlU3RyZW5ndGhTZXQoKSkuCisvLyEgLSBccmVmIElPQ19TVFJFTkdUSF9NRUQgOiBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIHVzZWQgZm9yIG1lZGl1bSBzdXBwbHkgbGV2ZWxzLiBDb250cm9sbGVkIGJ5IEFPTiBJT0MgKHNlZSBccmVmIEFPTklPQ0RyaXZlU3RyZW5ndGhTZXQoKSkuCisvLyEgLSBccmVmIElPQ19TVFJFTkdUSF9NSU4gOiBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCB1c2VkIGZvciBoaWdoIHN1cHBseSBsZXZlbHMuIENvbnRyb2xsZWQgYnkgQU9OIElPQyAoc2VlIFxyZWYgQU9OSU9DRHJpdmVTdHJlbmd0aFNldCgpKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ0lPRHJ2U3RyZW5ndGhTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJT0N1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJEcnZTdHJlbmd0aCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHVwIHRoZSBQb3J0IElEIGZvciB0aGlzIElPLgorLy8hCisvLyEgVGhlIFxjIHVpMzJQb3J0SWQgc3BlY2lmaWVzIHdoaWNoIGZ1bmN0aW9uYWwgcGVyaXBoZXJhbCB0byBob29rIHVwIHRvIHRoaXMKKy8vISBJTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBkZWZpbmVzIHRoZSBJTyB0byBjb25maWd1cmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISBccGFyYW0gdWkzMlBvcnRJZCBzZWxlY3RzIHRoZSBwb3J0IHRvIG1hcCB0byB0aGUgSU8uCisvLyEgLSBccmVmIElPQ19QT1JUX0dQSU8KKy8vISAtIFxyZWYgSU9DX1BPUlRfQU9OX0NMSzMySworLy8hIC0gXHJlZiBJT0NfUE9SVF9BVVhfSU8KKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTBfUlgKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTBfVFgKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1NTSTBfRlNTCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kwX0NMSworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJDX01TU0RBCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMkNfTVNTQ0wKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1VBUlQwX1JYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9VQVJUMF9UWAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfVUFSVDBfQ1RTCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9VQVJUMF9SVFMKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQwCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UMQorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDIKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQzCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNAorLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfUE9SVF9FVkVOVDUKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX1BPUlRfRVZFTlQ2CisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9QT1JUX0VWRU5UNworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1dWCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kxX1JYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kxX1RYCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9TU0kxX0ZTUworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfU1NJMV9DTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19BRDAKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19BRDEKKy8vISAtIFxyZWYgSU9DX1BPUlRfTUNVX0kyU19XQ0xLCisvLyEgLSBccmVmIElPQ19QT1JUX01DVV9JMlNfQkNMSworLy8hIC0gXHJlZiBJT0NfUE9SVF9NQ1VfSTJTX01DTEsKKy8vISAtIFxyZWYgSU9DX1BPUlRfUkZDX1RSQworLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMAorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMQorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMgorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BPMworLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BJMAorLy8hIC0gXHJlZiBJT0NfUE9SVF9SRkNfR1BJMQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DSU9Qb3J0SWRTZXQodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQb3J0SWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYW4gSU8gZWRnZSBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCByZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMKKy8vISBmdW5jdGlvbiBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMKKy8vISBJTyBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBJT0NJbnRFbmFibGUoKS4gSXQgaXMgdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgSU9DIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSU9DSW50UmVnaXN0ZXIodm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIoSU5UX0FPTl9HUElPX0VER0UsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIElPIGVkZ2UgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RW5hYmxlKElOVF9BT05fR1BJT19FREdFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgSU8gZWRnZSBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCB1bnJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gIEl0CisvLyEgY2xlYXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGFuIElPIGVkZ2UgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitJT0NJbnRVbnJlZ2lzdGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSW50RGlzYWJsZShJTlRfQU9OX0dQSU9fRURHRSk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50VW5yZWdpc3RlcihJTlRfQU9OX0dQSU9fRURHRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgaW5kaXZpZHVhbCBJTyBlZGdlIGRldGVjdCBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGluZGljYXRlZCBJTyBlZGdlIGludGVycnVwdCBzb3VyY2VzLiBPbmx5IHRoZQorLy8hIHNvdXJjZXMgdGhhdCBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0OworLy8hIGRpc2FibGVkIHNvdXJjZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBpcyB0aGUgSU8gdG8gZW5hYmxlIGVkZ2UgZGV0ZWN0IGludGVycnVwdCBmb3IuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NJbnRFbmFibGUodWludDMyX3QgdWkzMklPSWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBpbmRpdmlkdWFsIElPIGVkZ2UgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbmRpY2F0ZWQgSU8gZWRnZSBpbnRlcnJ1cHQgc291cmNlLiBPbmx5IHRoZQorLy8hIHNvdXJjZXMgdGhhdCBhcmUgZW5hYmxlZCBjYW4gYmUgcmVmbGVjdGVkIHRvIHRoZSBwcm9jZXNzb3IgaW50ZXJydXB0OworLy8hIGRpc2FibGVkIHNvdXJjZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBpcyB0aGUgSU8gZWRnZSBpbnRlcnJ1cHQgc291cmNlIHRvIGJlIGRpc2FibGVkLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJJT0lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIHRoZSBJTyBlZGdlIGludGVycnVwdCBzb3VyY2UuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIElPIGVkZ2UgaW50ZXJydXB0IHNvdXJjZSBpcyBjbGVhcmVkLCBzbyB0aGF0IGl0IG5vIGxvbmdlcgorLy8hIGFzc2VydHMuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgdGhlCisvLyEgaW50ZXJydXB0IGZyb20gYmVpbmcgcmVjb2duaXplZCBhZ2FpbiBpbW1lZGlhdGVseSB1cG9uIGV4aXQuCisvLyEKKy8vISBcbm90ZSBEdWUgdG8gd3JpdGUgYnVmZmVycyBhbmQgc3luY2hyb25pemVycyBpbiB0aGUgc3lzdGVtIGl0IG1heSB0YWtlIHNldmVyYWwKKy8vISBjbG9jayBjeWNsZXMgZnJvbSBhIHJlZ2lzdGVyIHdyaXRlIGNsZWFyaW5nIGFuIGV2ZW50IGluIGEgbW9kdWxlIGFuZCB1bnRpbCB0aGUKKy8vISBldmVudCBpcyBhY3R1YWxseSBjbGVhcmVkIGluIHRoZSBOVklDIG9mIHRoZSBzeXN0ZW0gQ1BVLiBJdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGNsZWFyIHRoZSBldmVudCBzb3VyY2UgZWFybHkgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKElTUikgdG8gYWxsb3cKKy8vISB0aGUgZXZlbnQgY2xlYXIgdG8gcHJvcGFnYXRlIHRvIHRoZSBOVklDIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSLgorLy8hIEF0IHRoZSBzYW1lIHRpbWUsIGFuIGVhcmx5IGV2ZW50IGNsZWFyIGFsbG93cyBuZXcgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUKKy8vISBwZW5kZWQgaW5zdGVhZCBvZiBpZ25vcmVkIGlmIHRoZSBldmVudCBpcyBjbGVhcmVkIGxhdGVyIGluIHRoZSBJU1IuCisvLyEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCB0aW1lIGhhcyBwYXNzZWQKKy8vISBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUiB0byBhdm9pZCBmYWxzZSByZS10cmlnZ2VyaW5nIG9mIHRoZSBjbGVhcmVkIGV2ZW50LgorLy8hIEEgc2ltcGxlLCBhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgb3B0aW1hbCwgd2F5IG9mIGNsZWFyaW5nIGFuIGV2ZW50IGJlZm9yZQorLy8hIHJldHVybmluZyBmcm9tIHRoZSBJU1IgaXM6CisvLyEgLSMgV3JpdGUgdG8gY2xlYXIgZXZlbnQgKGludGVycnVwdCBzb3VyY2UpLiAoYnVmZmVyZWQgd3JpdGUpCisvLyEgLSMgRHVtbXkgcmVhZCBmcm9tIHRoZSBldmVudCBzb3VyY2UgbW9kdWxlLiAobWFraW5nIHN1cmUgdGhlIHdyaXRlIGhhcyBwcm9wYWdhdGVkKQorLy8hIC0jIFdhaXQgdHdvIHN5c3RlbSBDUFUgY2xvY2sgY3ljbGVzICh1c2VyIGNvZGUgb3IgdHdvIE5PUHMpLiAoYWxsb3dpbmcgY2xlYXJlZCBldmVudCB0byBwcm9wYWdhdGUgdGhyb3VnaCBhbnkgc3luY2hyb25pemVycykKKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBpcyB0aGUgSU8gY2F1c2luZyB0aGUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorSU9DSW50Q2xlYXIodWludDMyX3QgdWkzMklPSWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVpMzJJT0lkIDw9IElPSURfMzEpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcmVxdWVzdGVkIGludGVycnVwdCBzb3VyY2UgYnkgY2xlYXJpbmcgdGhlIGV2ZW50LgorICAgIC8vCisgICAgR1BJT19jbGVhckV2ZW50RGlvKHVpMzJJT0lkKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBJTyBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGlzIHRoZSBJTyB0byBnZXQgdGhlIHN0YXR1cyBmb3IuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorSU9DSW50U3RhdHVzKHVpbnQzMl90IHVpMzJJT0lkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1aTMySU9JZCA8PSBJT0lEXzMxKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBldmVudCBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4gKEdQSU9fZ2V0RXZlbnREaW8odWkzMklPSWQpKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXR1cCBhbiBJTyBmb3Igc3RhbmRhcmQgR1BJTyBpbnB1dC4KKy8vIQorLy8hIFNldHVwIGFuIElPIGZvciBzdGFuZGFyZCBHUElPIGlucHV0IHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOgorLy8hIC0gUG9ydCBJRDoKKy8vISAgIC0gXHJlZiBJT0NfUE9SVF9HUElPCisvLyEgLSBDb25maWd1cmF0aW9uOgorLy8hICAgLSBccmVmIElPQ19DVVJSRU5UXzJNQQorLy8hICAgLSBccmVmIElPQ19TVFJFTkdUSF9BVVRPCisvLyEgICAtIFxyZWYgSU9DX05PX0lPUFVMTAorLy8hICAgLSBccmVmIElPQ19TTEVXX0RJU0FCTEUKKy8vISAgIC0gXHJlZiBJT0NfSFlTVF9ESVNBQkxFCisvLyEgICAtIFxyZWYgSU9DX05PX0VER0UKKy8vISAgIC0gXHJlZiBJT0NfSU5UX0RJU0FCTEUKKy8vISAgIC0gXHJlZiBJT0NfSU9NT0RFX05PUk1BTAorLy8hICAgLSBccmVmIElPQ19OT19XQUtFX1VQCisvLyEgICAtIFxyZWYgSU9DX0lOUFVUX0VOQUJMRQorLy8hCisvLyEgXHBhcmFtIHVpMzJJT0lkIGlzIHRoZSBJTyB0byBzZXR1cCBmb3IgR1BJTyBpbnB1dAorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NQaW5UeXBlR3Bpb0lucHV0KHVpbnQzMl90IHVpMzJJT0lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0dXAgYW4gSU8gZm9yIHN0YW5kYXJkIEdQSU8gb3V0cHV0LgorLy8hCisvLyEgU2V0dXAgYW4gSU8gZm9yIHN0YW5kYXJkIEdQSU8gb3V0cHV0IHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOgorLy8hIC0gUG9ydCBJRDoKKy8vISAgIC0gXHJlZiBJT0NfUE9SVF9HUElPCisvLyEgLSBDb25maWd1cmF0aW9uOgorLy8hICAgLSBccmVmIElPQ19DVVJSRU5UXzJNQQorLy8hICAgLSBccmVmIElPQ19TVFJFTkdUSF9BVVRPCisvLyEgICAtIFxyZWYgSU9DX05PX0lPUFVMTAorLy8hICAgLSBccmVmIElPQ19TTEVXX0RJU0FCTEUKKy8vISAgIC0gXHJlZiBJT0NfSFlTVF9ESVNBQkxFCisvLyEgICAtIFxyZWYgSU9DX05PX0VER0UKKy8vISAgIC0gXHJlZiBJT0NfSU5UX0RJU0FCTEUKKy8vISAgIC0gXHJlZiBJT0NfSU9NT0RFX05PUk1BTAorLy8hICAgLSBccmVmIElPQ19OT19XQUtFX1VQCisvLyEgICAtIFxyZWYgSU9DX0lOUFVUX0RJU0FCTEUKKy8vIQorLy8hIFxwYXJhbSB1aTMySU9JZCBpcyB0aGUgSU8gdG8gc2V0dXAgZm9yIEdQSU8gb3V0cHV0CisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ1BpblR5cGVHcGlvT3V0cHV0KHVpbnQzMl90IHVpMzJJT0lkKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIGEgc2V0IG9mIElPcyBmb3Igc3RhbmRhcmQgVUFSVCBwZXJpcGhlcmFsIGNvbnRyb2wuCisvLyEKKy8vISBUaGUgVUFSVCBwaW5zIG11c3QgYmUgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIFVBUlQgcGVyaXBoZXJhbCB0bworLy8hIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHR5cGljYWwgY29uZmlndXJhdGlvbiBmb3IKKy8vISB0aG9zZSBwaW4ocykuIE90aGVyIGNvbmZpZ3VyYXRpb25zIG1heSB3b3JrIGFzIHdlbGwgZGVwZW5kaW5nIHVwb24gdGhlCisvLyEgYm9hcmQgc2V0dXAgKGZvciBleGFtcGxlLCB1c2luZyB0aGUgb24tY2hpcCBwdWxsLXVwcykuCisvLyEKKy8vISBcbm90ZSBJZiBhIFVBUlQgcGluIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkLCB0aGVuIHRoZSBwYXJhbWV0ZXIgaW4gdGhlCisvLyEgZnVuY3Rpb24gc2hvdWxkIGJlIFxyZWYgSU9JRF9VTlVTRUQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJSeCBpcyB0aGUgSU8gSWQgb2YgdGhlIElPIHRvIHVzZSBhcyBVQVJUIFJlY2VpdmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMlR4IGlzIHRoZSBJTyBJZCBvZiB0aGUgSU8gdG8gdXNlIGFzIFVBUlQgVHJhbnNtaXQuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMkN0cyBpcyB0aGUgSU8gSWQgb2YgdGhlIElPIHRvIHVzZSBmb3IgVUFSVCBDbGVhciB0byBzZW5kLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJSdHMgaXMgdGhlIElPIElkIG9mIHRoZSBJTyB0byB1c2UgZm9yIFVBUlQgUmVxdWVzdCB0byBzZW5kLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBJT0NQaW5UeXBlVWFydCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlR4LCB1aW50MzJfdCB1aTMyQ3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlJ0cyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSBhIHNldCBvZiBJT3MgZm9yIHN0YW5kYXJkIFNTSSBwZXJpcGhlcmFsIG1hc3RlciBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFNTSSBtb2R1bGUgdG8gY29ubmVjdCB0byB0aGUgSU9zCisvLyEgXHBhcmFtIHVpMzJSeCBpcyB0aGUgSU8gdG8gY29ubmVjdCB0byB0aGUgU1NJIE1JU08gbGluZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hIFxwYXJhbSB1aTMyVHggaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBNT1NJIGxpbmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMkZzcyBpcyB0aGUgSU8gdG8gY29ubmVjdCB0byB0aGUgU1NJIEZTUyBsaW5lLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJDbGsgaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBDbG9jayBvdXRwdXQgbGluZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DUGluVHlwZVNzaU1hc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlJ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVHgsIHVpbnQzMl90IHVpMzJGc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDbGspOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgYSBzZXQgb2YgSU9zIGZvciBzdGFuZGFyZCBTU0kgcGVyaXBoZXJhbCBzbGF2ZSBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFNTSSBtb2R1bGUgdG8gY29ubmVjdCB0byB0aGUgSU9zCisvLyEgXHBhcmFtIHVpMzJSeCBpcyB0aGUgSU8gdG8gY29ubmVjdCB0byB0aGUgU1NJIE1PU0kgbGluZS4KKy8vISAtIFxyZWYgSU9JRF8wCisvLyEgLSAuLi4KKy8vISAtIFxyZWYgSU9JRF8zMQorLy8hIC0gXHJlZiBJT0lEX1VOVVNFRAorLy8hIFxwYXJhbSB1aTMyVHggaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBNSVNPIGxpbmUuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMkZzcyBpcyB0aGUgSU8gdG8gY29ubmVjdCB0byB0aGUgU1NJIEZTUyBsaW5lLgorLy8hIC0gXHJlZiBJT0lEXzAKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBJT0lEXzMxCisvLyEgLSBccmVmIElPSURfVU5VU0VECisvLyEgXHBhcmFtIHVpMzJDbGsgaXMgdGhlIElPIHRvIGNvbm5lY3QgdG8gdGhlIFNTSSBDbG9jayBpbnB1dCBsaW5lLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgSU9DUGluVHlwZVNzaVNsYXZlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlR4LCB1aW50MzJfdCB1aTMyRnNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDbGspOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgYSBzZXQgb2YgSU9zIGZvciBzdGFuZGFyZCBJMkMgcGVyaXBoZXJhbCBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkyQyBtb2R1bGUgdG8gY29ubmVjdCB0byB0aGUgSU9zCisvLyEgXHBhcmFtIHVpMzJEYXRhIGlzIHRoZSBJMkMgZGF0YSBsaW5lCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vISBccGFyYW0gdWkzMkNsayBpcyB0aGUgSTJDIGlucHV0IGNsb2NrCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ1BpblR5cGVJMmModWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2xrKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgYW4gSU8gZm9yIEFVWCBjb250cm9sLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIEFVWCB0byBjb250cm9sIGEgc3BlY2lmaWMgSU8uIFBsZWFzZSBub3RlLCB0aGF0CisvLyEgd2hlbiB1c2luZyBBVVggdG8gY29udHJvbCB0aGUgSU8sIHRoZSBpbnB1dC9vdXRwdXQgY29udHJvbCBpbiB0aGUgSU9DIGlzCisvLyEgYnlwYXNzZWQgYW5kIGNvbXBsZXRlbHkgY29udHJvbGxlZCBieSBBVVgsIHNvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpbnB1dAorLy8hIGluIHRoZSBJT0MgaGFzIG5vIGVmZmVjdC4KKy8vIQorLy8hIFxub3RlIFRoZSBJT3MgYXZhaWxhYmxlIGZvciBBVVggY29udHJvbCBjYW4gdmFyeSBmcm9tIGRldmljZSB0byBkZXZpY2UuCisvLyEKKy8vISBccGFyYW0gdWkzMklPSWQgaXMgdGhlIElPIHRvIHNldHVwIGZvciBBVVggdXNhZ2UuCisvLyEgLSBccmVmIElPSURfMAorLy8hIC0gLi4uCisvLyEgLSBccmVmIElPSURfMzEKKy8vISAtIFxyZWYgSU9JRF9VTlVTRUQKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIElPQ1BpblR5cGVBdXgodWludDMyX3QgdWkzMklPSWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9JT0NQb3J0Q29uZmlndXJlU2V0CisgICAgICAgICN1bmRlZiAgSU9DUG9ydENvbmZpZ3VyZVNldAorICAgICAgICAjZGVmaW5lIElPQ1BvcnRDb25maWd1cmVTZXQgICAgICAgICAgICAgUk9NX0lPQ1BvcnRDb25maWd1cmVTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ1BvcnRDb25maWd1cmVHZXQKKyAgICAgICAgI3VuZGVmICBJT0NQb3J0Q29uZmlndXJlR2V0CisgICAgICAgICNkZWZpbmUgSU9DUG9ydENvbmZpZ3VyZUdldCAgICAgICAgICAgICBST01fSU9DUG9ydENvbmZpZ3VyZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSU9TaHV0ZG93blNldAorICAgICAgICAjdW5kZWYgIElPQ0lPU2h1dGRvd25TZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT1NodXRkb3duU2V0ICAgICAgICAgICAgICAgIFJPTV9JT0NJT1NodXRkb3duU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJT01vZGVTZXQKKyAgICAgICAgI3VuZGVmICBJT0NJT01vZGVTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT01vZGVTZXQgICAgICAgICAgICAgICAgICAgIFJPTV9JT0NJT01vZGVTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0lPSW50U2V0CisgICAgICAgICN1bmRlZiAgSU9DSU9JbnRTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT0ludFNldCAgICAgICAgICAgICAgICAgICAgIFJPTV9JT0NJT0ludFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSU9Qb3J0UHVsbFNldAorICAgICAgICAjdW5kZWYgIElPQ0lPUG9ydFB1bGxTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT1BvcnRQdWxsU2V0ICAgICAgICAgICAgICAgIFJPTV9JT0NJT1BvcnRQdWxsU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJT0h5c3RTZXQKKyAgICAgICAgI3VuZGVmICBJT0NJT0h5c3RTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT0h5c3RTZXQgICAgICAgICAgICAgICAgICAgIFJPTV9JT0NJT0h5c3RTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0lPSW5wdXRTZXQKKyAgICAgICAgI3VuZGVmICBJT0NJT0lucHV0U2V0CisgICAgICAgICNkZWZpbmUgSU9DSU9JbnB1dFNldCAgICAgICAgICAgICAgICAgICBST01fSU9DSU9JbnB1dFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSU9TbGV3Q3RybFNldAorICAgICAgICAjdW5kZWYgIElPQ0lPU2xld0N0cmxTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT1NsZXdDdHJsU2V0ICAgICAgICAgICAgICAgIFJPTV9JT0NJT1NsZXdDdHJsU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJT0RydlN0cmVuZ3RoU2V0CisgICAgICAgICN1bmRlZiAgSU9DSU9EcnZTdHJlbmd0aFNldAorICAgICAgICAjZGVmaW5lIElPQ0lPRHJ2U3RyZW5ndGhTZXQgICAgICAgICAgICAgUk9NX0lPQ0lPRHJ2U3RyZW5ndGhTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ0lPUG9ydElkU2V0CisgICAgICAgICN1bmRlZiAgSU9DSU9Qb3J0SWRTZXQKKyAgICAgICAgI2RlZmluZSBJT0NJT1BvcnRJZFNldCAgICAgICAgICAgICAgICAgIFJPTV9JT0NJT1BvcnRJZFNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DSW50RW5hYmxlCisgICAgICAgICN1bmRlZiAgSU9DSW50RW5hYmxlCisgICAgICAgICNkZWZpbmUgSU9DSW50RW5hYmxlICAgICAgICAgICAgICAgICAgICBST01fSU9DSW50RW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NJbnREaXNhYmxlCisgICAgICAgICN1bmRlZiAgSU9DSW50RGlzYWJsZQorICAgICAgICAjZGVmaW5lIElPQ0ludERpc2FibGUgICAgICAgICAgICAgICAgICAgUk9NX0lPQ0ludERpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ1BpblR5cGVHcGlvSW5wdXQKKyAgICAgICAgI3VuZGVmICBJT0NQaW5UeXBlR3Bpb0lucHV0CisgICAgICAgICNkZWZpbmUgSU9DUGluVHlwZUdwaW9JbnB1dCAgICAgICAgICAgICBST01fSU9DUGluVHlwZUdwaW9JbnB1dAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DUGluVHlwZUdwaW9PdXRwdXQKKyAgICAgICAgI3VuZGVmICBJT0NQaW5UeXBlR3Bpb091dHB1dAorICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVHcGlvT3V0cHV0ICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVHcGlvT3V0cHV0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NQaW5UeXBlVWFydAorICAgICAgICAjdW5kZWYgIElPQ1BpblR5cGVVYXJ0CisgICAgICAgICNkZWZpbmUgSU9DUGluVHlwZVVhcnQgICAgICAgICAgICAgICAgICBST01fSU9DUGluVHlwZVVhcnQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ1BpblR5cGVTc2lNYXN0ZXIKKyAgICAgICAgI3VuZGVmICBJT0NQaW5UeXBlU3NpTWFzdGVyCisgICAgICAgICNkZWZpbmUgSU9DUGluVHlwZVNzaU1hc3RlciAgICAgICAgICAgICBST01fSU9DUGluVHlwZVNzaU1hc3RlcgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fSU9DUGluVHlwZVNzaVNsYXZlCisgICAgICAgICN1bmRlZiAgSU9DUGluVHlwZVNzaVNsYXZlCisgICAgICAgICNkZWZpbmUgSU9DUGluVHlwZVNzaVNsYXZlICAgICAgICAgICAgICBST01fSU9DUGluVHlwZVNzaVNsYXZlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9JT0NQaW5UeXBlSTJjCisgICAgICAgICN1bmRlZiAgSU9DUGluVHlwZUkyYworICAgICAgICAjZGVmaW5lIElPQ1BpblR5cGVJMmMgICAgICAgICAgICAgICAgICAgUk9NX0lPQ1BpblR5cGVJMmMKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX0lPQ1BpblR5cGVBdXgKKyAgICAgICAgI3VuZGVmICBJT0NQaW5UeXBlQXV4CisgICAgICAgICNkZWZpbmUgSU9DUGluVHlwZUF1eCAgICAgICAgICAgICAgICAgICBST01fSU9DUGluVHlwZUF1eAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19JT0NfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvY19kb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL2lvY19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU4YzQxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvaW9jX2RvYy5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBpb2NfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIGlvY19hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19pb2MgSW50cm9kdWN0aW9uCisvLyEKKy8vISBUaGUgSW5wdXQvT3V0cHV0IENvbnRyb2xsZXIgKElPQykgY29udHJvbHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHBpbnMgKGNhbGxlZCBESU8pLgorLy8hIFRoZSBJT0MgY29uc2lzdHMgb2YgdHdvIEFQSXM6CisvLyEgLSBNQ1UgSU9DIEFQSSBzZWxlY3RzIHdoaWNoIHBlcmlwaGVyYWwgbW9kdWxlIGlzIGNvbm5lY3RlZCB0byB0aGUgaW5kaXZpZHVhbCBESU8gYW5kIHRodXMgYWxsb3dlZCB0byBjb250cm9sIGl0LgorLy8hICAgSXQgYWxzbyBjb250cm9scyBpbmRpdmlkdWFsIGRyaXZlIHN0cmVuZ3RoLCBzbGV3IHJhdGUsIHB1bGwtdXAvcHVsbC1kb3duLCBlZGdlIGRldGVjdGlvbiwgZXRjLgorLy8hIC0gQU9OIElPQyBBUEkgY29udHJvbHMgdGhlIGdlbmVyYWwgZHJpdmUgc3RyZW5ndGggZGVmaW5pdGlvbnMsIElPIGxhdGNoZXMsIGFuZCBpZiB0aGUgTEYgY2xvY2sgaXMKKy8vISAgIHJvdXRlZCB0byBhIERJTyBmb3IgZXh0ZXJuYWwgdXNlLgorLy8hCisvLyEgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFPTiBJT0Mgc2VlIHRoZSBbQU9OIElPQyBBUEldKFxyZWYgYW9uaW9jX2FwaSkuCisvLyEKKy8vISBcbm90ZSBUaGUgb3V0cHV0IGRyaXZlciBvZiBhIERJTyBpcyBub3QgY29uZmlndXJlZCBieSB0aGUgSU9DIEFQSSAoZXhjZXB0IGZvciBkcml2ZSBzdHJlbmd0aCk7IGluc3RlYWQsIGl0IGlzIGNvbnRyb2xsZWQgYnkgdGhlCisvLyEgcGVyaXBoZXJhbCBtb2R1bGUgd2hpY2ggaXMgc2VsZWN0ZWQgdG8gY29udHJvbCB0aGUgRElPLgorLy8hCisvLyEgQSBESU8gaXMgY29uc2lkZXJlZCAic29mdHdhcmUgY29udHJvbGxlZCIgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgR1BJTyBjb250cm9sIHdoaWNoIGFsbG93cyB0aGUKKy8vISBTeXN0ZW0gQ1BVIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIERJTyB2aWEgdGhlIFtHUElPIEFQSV0oXHJlZiBncGlvX2FwaSkuIEFsdGVybmF0aXZlbHksIGEgRElPCisvLyEgY2FuIGJlICJoYXJkd2FyZSBjb250cm9sbGVkIiBpZiBpdCBpcyBjb250cm9sbGVkIGJ5IG90aGVyIG1vZHVsZXMgdGhhbiBHUElPLgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX2lvY19hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBDb25maWd1cmUgYWxsIHNldHRpbmdzIGF0IHRoZSBzYW1lIHRpbWU6CisvLyEgLSBccmVmIElPQ1BvcnRDb25maWd1cmVTZXQoKQorLy8hIC0gXHJlZiBJT0NQb3J0Q29uZmlndXJlR2V0KCkKKy8vIQorLy8hIENvbmZpZ3VyZSBpbmRpdmlkdWFsIHNldHRpbmdzOgorLy8hIC0gXHJlZiBJT0NJT0RydlN0cmVuZ3RoU2V0KCkKKy8vISAtIFxyZWYgSU9DSU9IeXN0U2V0KCkKKy8vISAtIFxyZWYgSU9DSU9JbnB1dFNldCgpCisvLyEgLSBccmVmIElPQ0lPSW50U2V0KCkKKy8vISAtIFxyZWYgSU9DSU9Nb2RlU2V0KCkKKy8vISAtIFxyZWYgSU9DSU9Qb3J0SWRTZXQoKQorLy8hIC0gXHJlZiBJT0NJT1BvcnRQdWxsU2V0KCkKKy8vISAtIFxyZWYgSU9DSU9TaHV0ZG93blNldCgpCisvLyEgLSBccmVmIElPQ0lPU2xld0N0cmxTZXQoKQorLy8hCisvLyEgSGFuZGxlIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50czoKKy8vISAtIFxyZWYgSU9DSW50RW5hYmxlKCkKKy8vISAtIFxyZWYgSU9DSW50RGlzYWJsZSgpCisvLyEgLSBccmVmIElPQ0ludENsZWFyKCkKKy8vISAtIFxyZWYgSU9DSW50U3RhdHVzKCkKKy8vISAtIFxyZWYgSU9DSW50UmVnaXN0ZXIoKQorLy8hIC0gXHJlZiBJT0NJbnRVbnJlZ2lzdGVyKCkKKy8vIQorLy8hIENvbmZpZ3VyZSBJT0NzIGZvciB0eXBpY2FsIHVzZSBjYXNlcyAoY2FuIGFsc28gYmUgdXNlZCBhcyBleGFtcGxlIGNvZGUpOgorLy8hIC0gXHJlZiBJT0NQaW5UeXBlQXV4KCkKKy8vISAtIFxyZWYgSU9DUGluVHlwZUdwaW9JbnB1dCgpCisvLyEgLSBccmVmIElPQ1BpblR5cGVHcGlvT3V0cHV0KCkKKy8vISAtIFxyZWYgSU9DUGluVHlwZUkyYygpCisvLyEgLSBccmVmIElPQ1BpblR5cGVTc2lNYXN0ZXIoKQorLy8hIC0gXHJlZiBJT0NQaW5UeXBlU3NpU2xhdmUoKQorLy8hIC0gXHJlZiBJT0NQaW5UeXBlVWFydCgpCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvb3NjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9vc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY1YzcxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvb3NjLmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBvc2MuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMjcgMTA6MDY6MTAgKzAyMDAgKEZyaSwgMjcgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY1MjEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHNldHRpbmcgdXAgdGhlIHN5c3RlbSBPc2NpbGxhdG9ycworKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19jY2ZnLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9iYXRtb24uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvYW9uX3J0Yy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9vc2MuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIE9TQ0Nsb2NrU291cmNlU2V0CisgICAgI2RlZmluZSBPU0NDbG9ja1NvdXJjZVNldCAgICAgICAgICAgICAgIE5PUk9NX09TQ0Nsb2NrU291cmNlU2V0CisgICAgI3VuZGVmICBPU0NDbG9ja1NvdXJjZUdldAorICAgICNkZWZpbmUgT1NDQ2xvY2tTb3VyY2VHZXQgICAgICAgICAgICAgICBOT1JPTV9PU0NDbG9ja1NvdXJjZUdldAorICAgICN1bmRlZiAgT1NDSEZfR2V0U3RhcnR1cFRpbWUKKyAgICAjZGVmaW5lIE9TQ0hGX0dldFN0YXJ0dXBUaW1lICAgICAgICAgICAgTk9ST01fT1NDSEZfR2V0U3RhcnR1cFRpbWUKKyAgICAjdW5kZWYgIE9TQ0hGX1R1cm5Pblhvc2MKKyAgICAjZGVmaW5lIE9TQ0hGX1R1cm5Pblhvc2MgICAgICAgICAgICAgICAgTk9ST01fT1NDSEZfVHVybk9uWG9zYworICAgICN1bmRlZiAgT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjCisgICAgI2RlZmluZSBPU0NIRl9BdHRlbXB0VG9Td2l0Y2hUb1hvc2MgICAgIE5PUk9NX09TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYworICAgICN1bmRlZiAgT1NDSEZfU3dpdGNoVG9SY09zY1R1cm5PZmZYb3NjCisgICAgI2RlZmluZSBPU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MgIE5PUk9NX09TQ0hGX1N3aXRjaFRvUmNPc2NUdXJuT2ZmWG9zYworICAgICN1bmRlZiAgT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlCisgICAgI2RlZmluZSBPU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUgIE5PUk9NX09TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZQorICAgICN1bmRlZiAgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlCisgICAgI2RlZmluZSBPU0NIRl9EZWJ1Z0dldEV4cGVjdGVkQXZlcmFnZUNyeXN0YWxBbXBsaXR1ZGUgTk9ST01fT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlCisgICAgI3VuZGVmICBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldEdldAorICAgICNkZWZpbmUgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQgTk9ST01fT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQKKyAgICAjdW5kZWYgIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0CisgICAgI2RlZmluZSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydCBOT1JPTV9PU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBPU0NIRiBzd2l0Y2ggdGltZSBjYWxjdWxhdG9yIGRlZmluZXMgYW5kIGdsb2JhbHMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNkZWZpbmUgUlRDX0NWX1RPX01TKHgpICgoICAgIDEwMDAgKiAoIHggKSkgPj4gMTYgKQorI2RlZmluZSBSVENfQ1ZfVE9fVVMoeCkgKCggMTAwMDAwMCAqICggeCApKSA+PiAxNiApCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQzMl90ICAgIHByZXZpb3VzU3RhcnR1cFRpbWVJblVzIDsKKyAgIHVpbnQzMl90ICAgIHRpbWVYb3NjT2ZmX0NWICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgIHRpbWVYb3NjT25fQ1YgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgIHRpbWVYb3NjU3RhYmxlX0NWICAgICAgIDsKKyAgIGludDMyX3QgICAgIHRlbXBYb3NjT2ZmICAgICAgICAgICAgIDsKK30gT3NjSGZHbG9iYWxzX3Q7CisKK3N0YXRpYyBPc2NIZkdsb2JhbHNfdCBvc2NIZkdsb2JhbHM7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vICBDb25maWd1cmUgdGhlIG9zY2lsbGF0b3IgaW5wdXQgdG8gdGhlIGEgc291cmNlIGNsb2NrLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK09TQ0Nsb2NrU291cmNlU2V0KHVpbnQzMl90IHVpMzJTcmNDbGssIHVpbnQzMl90IHVpMzJPc2MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyU3JjQ2xrICYgT1NDX1NSQ19DTEtfTEYpIHx8CisgICAgICAgICAgICh1aTMyU3JjQ2xrICYgT1NDX1NSQ19DTEtfTUYpIHx8CisgICAgICAgICAgICh1aTMyU3JjQ2xrICYgT1NDX1NSQ19DTEtfSEYpKTsKKyAgICBBU1NFUlQoKHVpMzJPc2MgPT0gT1NDX1JDT1NDX0hGKSB8fAorICAgICAgICAgICAodWkzMk9zYyA9PSBPU0NfUkNPU0NfTEYpIHx8CisgICAgICAgICAgICh1aTMyT3NjID09IE9TQ19YT1NDX0hGKSB8fAorICAgICAgICAgICAodWkzMk9zYyA9PSBPU0NfWE9TQ19MRikpOworCisgICAgLy8KKyAgICAvLyBSZXF1ZXN0IHRoZSBoaWdoIGZyZXF1ZW5jeSBzb3VyY2UgY2xvY2sgKHVzaW5nIDI0IE1IeiBYVEFMKQorICAgIC8vCisgICAgaWYodWkzMlNyY0NsayAmIE9TQ19TUkNfQ0xLX0hGKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIHRoZSBIRiBYVEFMIGFzIEhGIGNsb2NrIHNvdXJjZQorICAgICAgICAvLworICAgICAgICBEREkxNkJpdGZpZWxkV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0NUTDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQ1RMMF9TQ0xLX0hGX1NSQ19TRUxfTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19DVEwwX1NDTEtfSEZfU1JDX1NFTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMk9zYyk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIG1lZGl1bSBmcmVxdWVuY3kgc291cmNlIGNsb2NrCisgICAgLy8KKyAgICBpZih1aTMyU3JjQ2xrICYgT1NDX1NSQ19DTEtfTUYpCisgICAgeworICAgICAgICBEREkxNkJpdGZpZWxkV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0NUTDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQ1RMMF9TQ0xLX01GX1NSQ19TRUxfTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19DVEwwX1NDTEtfTUZfU1JDX1NFTF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkzMk9zYyk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDb25maWd1cmUgdGhlIGxvdyBmcmVxdWVuY3kgc291cmNlIGNsb2NrLgorICAgIC8vCisgICAgaWYodWkzMlNyY0NsayAmIE9TQ19TUkNfQ0xLX0xGKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ2hhbmdlIHRoZSBjbG9jayBzb3VyY2UuCisgICAgICAgIC8vCisgICAgICAgIERESTE2Qml0ZmllbGRXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQ1RMMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19DVEwwX1NDTEtfTEZfU1JDX1NFTF9NLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0NUTDBfU0NMS19MRl9TUkNfU0VMX1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyT3NjKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyAgR2V0IHRoZSBzb3VyY2UgY2xvY2sgc2V0dGluZ3MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorT1NDQ2xvY2tTb3VyY2VHZXQodWludDMyX3QgdWkzMlNyY0NsaykKK3sKKyAgICB1aW50MzJfdCB1aTMyQ2xvY2tTb3VyY2U7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJTcmNDbGsgJiBPU0NfU1JDX0NMS19MRikgfHwKKyAgICAgICAgICAgKHVpMzJTcmNDbGsgJiBPU0NfU1JDX0NMS19IRikpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHNvdXJjZSBmb3IgdGhlIHNlbGVjdGVkIGNsb2NrLgorICAgIC8vCisgICAgaWYodWkzMlNyY0NsayA9PSBPU0NfU1JDX0NMS19MRikKKyAgICB7CisgICAgICAgIHVpMzJDbG9ja1NvdXJjZSA9IERESTE2Qml0ZmllbGRSZWFkKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19TVEFUMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfU1JDX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19TKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdWkzMkNsb2NrU291cmNlID0gRERJMTZCaXRmaWVsZFJlYWQoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX1NUQVQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9TUkNfTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfU1JDX1MpOworICAgIH0KKyAgICByZXR1cm4gKHVpMzJDbG9ja1NvdXJjZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZXR1cm5zIG1heGltdW0gc3RhcnR1cCB0aW1lIChpbiBtaWNyb3NlY29uZHMpIG9mIFhPU0NfSEYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorT1NDSEZfR2V0U3RhcnR1cFRpbWUoIHVpbnQzMl90IHRpbWVVbnRpbFdha2V1cEluTXMgKQoreworICAgdWludDMyX3QgZGVsdGFUaW1lU2luY2VYb3NjT25Jbk1zICAgOworICAgaW50MzJfdCAgZGVsdGFUZW1wU2luY2VYb3NjT24gICAgICAgOworICAgdWludDMyX3QgbmV3U3RhcnR1cFRpbWVJblVzICAgICAgICAgOworCisgICBkZWx0YVRpbWVTaW5jZVhvc2NPbkluTXMgPSBSVENfQ1ZfVE9fTVMoIEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKSAtIG9zY0hmR2xvYmFscy50aW1lWG9zY09uX0NWICk7CisgICBkZWx0YVRlbXBTaW5jZVhvc2NPbiAgICAgPSBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MoKSAtIG9zY0hmR2xvYmFscy50ZW1wWG9zY09mZjsKKworICAgaWYgKCBkZWx0YVRlbXBTaW5jZVhvc2NPbiA8IDAgKSB7CisgICAgICBkZWx0YVRlbXBTaW5jZVhvc2NPbiA9IC1kZWx0YVRlbXBTaW5jZVhvc2NPbjsKKyAgIH0KKworICAgaWYgKCAgKCggdGltZVVudGlsV2FrZXVwSW5NcyArIGRlbHRhVGltZVNpbmNlWG9zY09uSW5NcyApICAgICA+IDMwMDAgKSB8fAorICAgICAgICAgKCBkZWx0YVRlbXBTaW5jZVhvc2NPbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICAgIDUgKSB8fAorICAgICAgICAgKCBvc2NIZkdsb2JhbHMudGltZVhvc2NTdGFibGVfQ1YgPCBvc2NIZkdsb2JhbHMudGltZVhvc2NPbl9DViAgKSB8fAorICAgICAgICAgKCBvc2NIZkdsb2JhbHMucHJldmlvdXNTdGFydHVwVGltZUluVXMgICAgICAgICAgICAgICAgICA9PSAgIDAgKSAgICApCisgICB7CisgICAgICBuZXdTdGFydHVwVGltZUluVXMgPSAyMDAwOworICAgICAgaWYgKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgKSAmIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUl9NICkgPT0gMCApIHsKKyAgICAgICAgIG5ld1N0YXJ0dXBUaW1lSW5VcyA9ICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GXzEgKSAmCisgICAgICAgICAgICBDQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUX00gKSA+PgorICAgICAgICAgICAgQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVF9TICkgKiAxMjU7CisgICAgICAgICAgICAvLyBOb3RlOiBDQ0ZHIHN0YXJ0dXAgdGltZSBpcyAiaW4gdW5pdHMgb2YgMTAwdXMiIGFkZGluZyAyNSUgbWFyZ2luIHJlc3VsdHMgaW4gKjEyNQorICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIG5ld1N0YXJ0dXBUaW1lSW5VcyA9IFJUQ19DVl9UT19VUyggb3NjSGZHbG9iYWxzLnRpbWVYb3NjU3RhYmxlX0NWIC0gb3NjSGZHbG9iYWxzLnRpbWVYb3NjT25fQ1YgKTsKKyAgICAgIG5ld1N0YXJ0dXBUaW1lSW5VcyArPSAoIG5ld1N0YXJ0dXBUaW1lSW5VcyA+PiAyICk7IC8vIEFkZCAyNSBwZXJjZW50IG1hcmdpbgorICAgICAgaWYgKCBuZXdTdGFydHVwVGltZUluVXMgPCBvc2NIZkdsb2JhbHMucHJldmlvdXNTdGFydHVwVGltZUluVXMgKSB7CisgICAgICAgICBuZXdTdGFydHVwVGltZUluVXMgPSBvc2NIZkdsb2JhbHMucHJldmlvdXNTdGFydHVwVGltZUluVXM7CisgICAgICB9CisgICB9CisKKyAgIGlmICggbmV3U3RhcnR1cFRpbWVJblVzIDwgMjAwICkgeworICAgICAgbmV3U3RhcnR1cFRpbWVJblVzID0gMjAwOworICAgfQorICAgaWYgKCBuZXdTdGFydHVwVGltZUluVXMgPiA0MDAwICkgeworICAgICAgbmV3U3RhcnR1cFRpbWVJblVzID0gNDAwMDsKKyAgIH0KKyAgIHJldHVybiAoIG5ld1N0YXJ0dXBUaW1lSW5VcyApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUdXJucyBvbiBYT1NDX0hGIChidXQgd2l0aG91dCBzd2l0Y2hpbmcgdG8gWE9TQ19IRikKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitPU0NIRl9UdXJuT25Yb3NjKCB2b2lkICkKK3sKKyAgIE9TQ0Nsb2NrU291cmNlU2V0KCBPU0NfU1JDX0NMS19IRiB8IE9TQ19TUkNfQ0xLX01GLCBPU0NfWE9TQ19IRiApOworICAgb3NjSGZHbG9iYWxzLnRpbWVYb3NjT25fQ1YgID0gQU9OUlRDQ3VycmVudENvbXBhcmVWYWx1ZUdldCgpOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTd2l0Y2ggdG8gWE9TQ19IRiBpZiBYT1NDX0hGIGlzIHJlYWR5LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2Jvb2wKK09TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYyggdm9pZCApCit7CisgICB1aW50MzJfdCBzdGFydHVwVGltZUluVXM7CisgICB1aW50MzJfdCBwcmV2TGltbWl0MjVJblVzOworCisgICBpZiAoIE9TQ0Nsb2NrU291cmNlR2V0KCBPU0NfU1JDX0NMS19IRiApID09IE9TQ19YT1NDX0hGICkgeworICAgICAgLy8gQWxyZWFkeSBvbiBYT1NDIC0gbm90aGluZyB0byBkbworICAgICAgcmV0dXJuICggMSApOworICAgfQorICAgaWYgKCBPU0NIZlNvdXJjZVJlYWR5KCkpIHsKKyAgICAgIE9TQ0hmU291cmNlU3dpdGNoKCk7CisKKyAgICAgIC8vCisgICAgICAvLyBTdG9yZSBzdGFydHVwIHRpbWUsIGJ1dCBsaW1pdCB0byAyNSBwZXJjZW50IHJlZHVjdGlvbiBlYWNoIHRpbWUuCisgICAgICAvLworICAgICAgb3NjSGZHbG9iYWxzLnRpbWVYb3NjU3RhYmxlX0NWICA9IEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKTsKKyAgICAgIHN0YXJ0dXBUaW1lSW5VcyAgID0gUlRDX0NWX1RPX1VTKCBvc2NIZkdsb2JhbHMudGltZVhvc2NTdGFibGVfQ1YgLSBvc2NIZkdsb2JhbHMudGltZVhvc2NPbl9DViApOworICAgICAgcHJldkxpbW1pdDI1SW5VcyAgPSBvc2NIZkdsb2JhbHMucHJldmlvdXNTdGFydHVwVGltZUluVXM7CisgICAgICBwcmV2TGltbWl0MjVJblVzIC09ICggcHJldkxpbW1pdDI1SW5VcyA+PiAyICk7IC8vIDI1IHBlcmNlbnQgbWFyZ2luCisgICAgICBvc2NIZkdsb2JhbHMucHJldmlvdXNTdGFydHVwVGltZUluVXMgPSBzdGFydHVwVGltZUluVXM7CisgICAgICBpZiAoIHByZXZMaW1taXQyNUluVXMgPiBzdGFydHVwVGltZUluVXMgKSB7CisgICAgICAgICBvc2NIZkdsb2JhbHMucHJldmlvdXNTdGFydHVwVGltZUluVXMgPSBwcmV2TGltbWl0MjVJblVzOworICAgICAgfQorICAgICAgcmV0dXJuICggMSApOworICAgfQorICAgcmV0dXJuICggMCApOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTd2l0Y2ggdG8gUkNPU0NfSEYgYW5kIHR1cm4gb2ZmIFhPU0NfSEYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitPU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MoIHZvaWQgKQoreworICAgLy8KKyAgIC8vIFNldCBTQ0xLX0hGIGFuZCBTQ0xLX01GIHRvIFJDT1NDX0hGIHdpdGhvdXQgY2hlY2tpbmcKKyAgIC8vIERvaW5nIHRoaXMgYW55d2F5IHRvIGtlZXAgSEYgYW5kIE1GIGluIHN5bmMKKyAgIC8vCisgICBPU0NDbG9ja1NvdXJjZVNldCggT1NDX1NSQ19DTEtfSEYgfCBPU0NfU1JDX0NMS19NRiwgT1NDX1JDT1NDX0hGICk7CisKKyAgIC8vCisgICAvLyBEbyB0aGUgc3dpdGNoaW5nIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcgb24gUkNPU0NfSEYKKyAgIC8vCisgICBpZiAoIE9TQ0Nsb2NrU291cmNlR2V0KCBPU0NfU1JDX0NMS19IRiApICE9IE9TQ19SQ09TQ19IRiApIHsKKyAgICAgIE9TQ0hmU291cmNlU3dpdGNoKCk7CisgICB9CisKKyAgIG9zY0hmR2xvYmFscy50aW1lWG9zY09mZl9DViAgPSBBT05SVENDdXJyZW50Q29tcGFyZVZhbHVlR2V0KCk7CisgICBvc2NIZkdsb2JhbHMudGVtcFhvc2NPZmYgICAgID0gQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDYWxjdWxhdGUgdGhlIHRlbXBlcmF0dXJlIGRlcGVuZGVudCByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IG9mIEhQT1NDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQoIGludDMyX3QgdGVtcERlZ0MgKQoreworICAgLy8gRXN0aW1hdGUgSFBPU0MgZnJlcXVlbmN5LCB1c2luZyB0ZW1wZXJhdHVyZSBhbmQgY3VydmUgZml0dGluZyBwYXJhbWV0ZXJzCisgICB1aW50MzJfdCBmaXRQYXJhbXMgPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19GUkVRX09GRlNFVCk7CisgICAvLyBFeHRyYWN0IHRoZSBQMCxQMSxQMiBwYXJhbXMsIGFuZCBzaWduIGV4dGVuZCB0aGVtIHZpYSBzaGlmdGluZyB1cC9kb3duCisgICBpbnQzMl90IHBhcmFtUDAgPSAoKCgoaW50MzJfdCkgZml0UGFyYW1zKSA8PCAoMzIgLSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AwX1cgLSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AwX1MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKDMyIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMF9XKSk7CisgICBpbnQzMl90IHBhcmFtUDEgPSAoKCgoaW50MzJfdCkgZml0UGFyYW1zKSA8PCAoMzIgLSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AxX1cgLSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AxX1MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKDMyIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMV9XKSk7CisgICBpbnQzMl90IHBhcmFtUDIgPSAoKCgoaW50MzJfdCkgZml0UGFyYW1zKSA8PCAoMzIgLSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AyX1cgLSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AyX1MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gKDMyIC0gRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMl9XKSk7CisgICBpbnQzMl90IHBhcmFtUDMgPSAoKCgoaW50MzJfdCkgSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fTUlTQ19DT05GXzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDMyIC0gRkNGRzFfTUlTQ19DT05GXzJfSFBPU0NfQ09NUF9QM19XIC0gRkNGRzFfTUlTQ19DT05GXzJfSFBPU0NfQ09NUF9QM19TKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICgzMiAtIEZDRkcxX01JU0NfQ09ORl8yX0hQT1NDX0NPTVBfUDNfVykpOworCisgICAvLyBOb3cgd2UgY2FuIGZpbmQgdGhlIEhQT1NDIGZyZXEgb2Zmc2V0LCBnaXZlbiBhcyBhIHNpZ25lZCB2YXJpYWJsZSBkLCBleHByZXNzZWQgYnk6CisgICAvLworICAgLy8gICAgRl9IUE9TQyA9IEZfbm9tICogKDEgKyBkLygyXjIyKSkgICAgLCB3aGVyZTogRl9IUE9TQyA9IEhQT1NDIGZyZXF1ZW5jeQorICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRl9ub20gPSBub21pbmFsIGNsb2NrIHNvdXJjZSBmcmVxdWVuY3kgKGUuZy4gNDguMDAwIE1IeikKKyAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBkZXNjcmliZXMgcmVsYXRpdmUgZnJlcSBvZmZzZXQKKworICAgLy8gV2UgY2FuIGVzdGltYXRlIHRoZSBkIHZhcmlhYmxlLCB1c2luZyB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gcGFyYW1ldGVyczoKKyAgIC8vCisgICAvLyAgICBkID0gUDAgKyBQMSoodCAtIFQwKSArIFAyKih0IC0gVDApXjIgKyBQMyoodCAtIFQwKV4zLCB3aGVyZTogUDAsUDEsUDIsUDMgYXJlIGN1cnZlIGZpdHRpbmcgcGFyYW1ldGVycyBmcm9tIEZDRkcxCisgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gY3VycmVudCB0ZW1wZXJhdHVyZSAoZnJvbSB0ZW1wIHNlbnNvcikgaW4gZGVnIEMKKyAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQwID0gMjcgZGVnIEMgKGZpeGVkIHRlbXBlcmF0dXJlIGNvbnN0YW50KQorICAgaW50MzJfdCB0ZW1wRGVsdGEgPSAodGVtcERlZ0MgLSAyNyk7CisgICBpbnQzMl90IHRlbXBEZWx0YVgyID0gdGVtcERlbHRhICogdGVtcERlbHRhOworICAgaW50MzJfdCBkID0gcGFyYW1QMCArICgodGVtcERlbHRhKnBhcmFtUDEpPj4zKSArICgodGVtcERlbHRhWDIqcGFyYW1QMik+PjEwKSArICgodGVtcERlbHRhWDIqdGVtcERlbHRhKnBhcmFtUDMpPj4xOCk7CisKKyAgIHJldHVybiAoIGQgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbnZlcnRzIHRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IG9mIEhQT1NDIHRvIHRoZSBSRiBDb3JlIHBhcmFtZXRlciBmb3JtYXQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MTZfdAorT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQoIGludDMyX3QgSFBPU0NfUmVsRnJlcU9mZnNldCApCit7CisgICAvLyBUaGUgaW5wdXQgYXJndW1lbnQsIGhlcmVieSByZWZlcnJlZCB0byBzaW1wbHkgYXMgImQiLCBkZXNjcmliZXMgdGhlIGZyZXF1ZW5jeSBvZmZzZXQKKyAgIC8vIG9mIHRoZSBIUE9TQyByZWxhdGl2ZSB0byB0aGUgbm9taW5hbCBmcmVxdWVuY3kgaW4gdGhpcyB3YXk6CisgICAvLworICAgLy8gICAgRl9IUE9TQyA9IEZfbm9tICogKDEgKyBkLygyXjIyKSkKKyAgIC8vCisgICAvLyBCdXQgZm9yIHVzZSBieSB0aGUgcmFkaW8sIHRvIGNvbXBlbnNhdGUgdGhlIGZyZXF1ZW5jeSBlcnJvciwgd2UgbmVlZCB0byBmaW5kIHRoZQorICAgLy8gZnJlcXVlbmN5IG9mZnNldCAicmZjRnJlcU9mZnNldCIgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgIC8vCisgICAvLyAgICBGX25vbSA9IEZfSFBPU0MgKiAoMSArIHJmQ29yZUZyZXFPZmZzZXQvKDJeMjIpKQorICAgLy8KKyAgIC8vIFRvIGRlcml2ZSAicmZDb3JlRnJlcU9mZnNldCIgZnJvbSAiZCIgd2UgY29tYmluZSB0aGUgdHdvIGFib3ZlIGVxdWF0aW9ucyBhbmQgZ2V0OgorICAgLy8KKyAgIC8vICAgICgxICsgcmZDb3JlRnJlcU9mZnNldC8oMl4yMikpID0gKDEgKyBkLygyXjIyKSleLTEKKyAgIC8vCisgICAvLyBXaGljaCBjYW4gYmUgcmV3cml0dGVuIGludG86CisgICAvLworICAgLy8gICAgcmZDb3JlRnJlcU9mZnNldCA9IC1kKigyXjIyKSAvICgoMl4yMikgKyBkKQorICAgLy8KKyAgIC8vICAgICAgICAgICAgICAgPSAtZCAqIFsgMSAvICgxICsgZC8oMl4yMikpIF0KKyAgIC8vCisgICAvLyBUbyBhdm9pZCBkb2luZyBhIDY0LWJpdCBkaXZpc2lvbiBkdWUgdG8gdGhlICgxICsgZC8oMl4yMikpXi0xIGV4cHJlc3Npb24sCisgICAvLyB3ZSBjYW4gdXNlIFRheWxvciBzZXJpZXMgKE1hY2xhdXJpbiBzZXJpZXMpIHRvIGFwcHJveGltYXRlIGl0OgorICAgLy8KKyAgIC8vICAgICAgIDEgLyAoMSAtIHgpIH49IDEgKyB4ICsgeF4yICsgeF4zICsgeF40ICsgLi4uIGV0YyAgICAgIChNYWNsYXVyaW4gc2VyaWVzKQorICAgLy8KKyAgIC8vIEluIG91ciBjYXNlLCB3ZSBoYXZlIHggPSAtIGQvKDJeMjIpLCBhbmQgd2Ugb25seSBpbmNsdWRlIHVwIHRvIHRoZSBmaXJzdAorICAgLy8gb3JkZXIgdGVybSBvZiB0aGUgc2VyaWVzLCBhcyB0aGUgc2Vjb25kIG9yZGVyIHRlcm0gKChkXjIpLygyXjQ0KSkgaXMgdmVyeSBzbWFsbDoKKyAgIC8vCisgICAvLyAgICAgICBmcmVxRXJyb3Igfj0gLWQgKyBkXjIvKDJeMjIpICAgKCsgc21hbGwgYXBwcm94aW1hdGlvbiBlcnJvcikKKyAgIC8vCisgICAvLyBUaGUgYXBwcm94aW1hdGlvbiBlcnJvciBpcyBuZWdsaWdpYmxlIGZvciBvdXIgdXNlLgorCisgICBpbnQzMl90IHJmQ29yZUZyZXFPZmZzZXQgPSAtSFBPU0NfUmVsRnJlcU9mZnNldCArICgoIEhQT1NDX1JlbEZyZXFPZmZzZXQgKiBIUE9TQ19SZWxGcmVxT2Zmc2V0ICkgPj4gMjIgKTsKKworICAgcmV0dXJuICggcmZDb3JlRnJlcU9mZnNldCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2V0IGNyeXN0YWwgYW1wbGl0dWRlIChhc3N1bWluZyBjcnlzdGFsIGlzIHJ1bm5pbmcpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitPU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUoIHZvaWQgKQoreworICAgdWludDMyX3Qgb3NjQ2ZnUmVnQ29weSAgOworICAgdWludDMyX3Qgc3RhcnRUaW1lICAgICAgOworICAgdWludDMyX3QgZGVsdGFUaW1lICAgICAgOworICAgdWludDMyX3QgYW1wVmFsdWUgICAgICAgOworCisgICAvLworICAgLy8gVGhlIHNwZWNpZmllZCBtZXRob2QgaXMgYXMgZm9sbG93czoKKyAgIC8vIDEuIFNldCBtaW5pbXVtIGludGVydmFsIGJldHdlZW4gb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb25zLgorICAgLy8gICAgKERvbmUgYnkgc2V0dGluZyBQRVJfTT0wIGFuZCBQRVJfRT0xKQorICAgLy8gMi4gV2FpdCBhcHByb3hpbWF0ZWx5IDQgbWlsbGlzZWNvbmRzIGluIG9yZGVyIHRvIG1lYXN1cmUgb3ZlciBhCisgICAvLyAgICBtb2RlcmF0ZWx5IGxhcmdlIG51bWJlciBvZiBjYWxpYnJhdGlvbnMuCisgICAvLyAzLiBSZWFkIG91dCB0aGUgY3J5c3RhbCBhbXBsaXR1ZGUgdmFsdWUgZnJvbSB0aGUgcGVlayBkZXRlY3Rvci4KKyAgIC8vIDQuIFJlc3RvcmUgb3JpZ2luYWwgb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb25zIGludGVydmFsLgorICAgLy8gNS4gUmV0dXJuIGNyeXN0YWwgYW1wbGl0dWRlIHZhbHVlIGNvbnZlcnRlZCB0byBtaWxsaXZvbHQuCisgICAvLworICAgb3NjQ2ZnUmVnQ29weSA9IEhXUkVHKCBBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fT1NDQ0ZHICk7CisgICBIV1JFRyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX09TQ0NGRyApID0gKCAxIDw8IEFPTl9XVUNfT1NDQ0ZHX1BFUl9FX1MgKTsKKyAgIHN0YXJ0VGltZSA9IEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKTsKKyAgIGRvIHsKKyAgICAgIGRlbHRhVGltZSA9IEFPTlJUQ0N1cnJlbnRDb21wYXJlVmFsdWVHZXQoKSAtIHN0YXJ0VGltZTsKKyAgIH0gd2hpbGUgKCBkZWx0YVRpbWUgPCAoKHVpbnQzMl90KSggMC4wMDQgKiBGQUNUT1JfU0VDX1RPX0NPTVBfVkFMX0ZPUk1BVCApKSk7CisgICBhbXBWYWx1ZSA9ICggSFdSRUcoIEFVWF9EREkwX09TQ19CQVNFICsgRERJXzBfT1NDX09fU1RBVDEgKSAmCisgICAgICBERElfMF9PU0NfU1RBVDFfSFBNX1VQREFURV9BTVBfTSApID4+CisgICAgICBERElfMF9PU0NfU1RBVDFfSFBNX1VQREFURV9BTVBfUyA7CisgICBIV1JFRyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX09TQ0NGRyApID0gb3NjQ2ZnUmVnQ29weTsKKworICAgcmV0dXJuICggYW1wVmFsdWUgKiAxNSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2V0IHRoZSBleHBlY3RlZCBhdmVyYWdlIGNyeXN0YWwgYW1wbGl0dWRlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitPU0NIRl9EZWJ1Z0dldEV4cGVjdGVkQXZlcmFnZUNyeXN0YWxBbXBsaXR1ZGUoIHZvaWQgKQoreworICAgdWludDMyX3QgYW1wQ29tcFRoMSAgICA7CisgICB1aW50MzJfdCBoaWdoVGhyZXNob2xkIDsKKyAgIHVpbnQzMl90IGxvd1RocmVzaG9sZCAgOworCisgICBhbXBDb21wVGgxID0gSFdSRUcoIEFVWF9EREkwX09TQ19CQVNFICsgRERJXzBfT1NDX09fQU1QQ09NUFRIMSApOworICAgaGlnaFRocmVzaG9sZCA9ICggYW1wQ29tcFRoMSAmIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0hUSF9NICkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19IVEhfUyA7CisgICBsb3dUaHJlc2hvbGQgID0gKCBhbXBDb21wVGgxICYgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfTFRIX00gKSA+PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0xUSF9TIDsKKworICAgcmV0dXJuICgoKCBoaWdoVGhyZXNob2xkICsgbG93VGhyZXNob2xkICkgKiAxNSApID4+IDEgKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL29zYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvb3NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2OWM3NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL29zYy5oCkBAIC0wLDAgKzEsNTk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgb3NjLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI1IDEyOjI4OjU3ICswMjAwIChXZWQsIDI1IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDg0CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIHN5c3RlbSBvc2NpbGxhdG9yIGNvbnRyb2wuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBvc2NfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19PU0NfSF9fCisjZGVmaW5lIF9fT1NDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2RkaS5oPgorI2luY2x1ZGUgPGluYy9od19kZGlfMF9vc2MuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBPU0NDbG9ja1NvdXJjZVNldCAgICAgICAgICAgICAgIE5PUk9NX09TQ0Nsb2NrU291cmNlU2V0CisgICAgI2RlZmluZSBPU0NDbG9ja1NvdXJjZUdldCAgICAgICAgICAgICAgIE5PUk9NX09TQ0Nsb2NrU291cmNlR2V0CisgICAgI2RlZmluZSBPU0NIRl9HZXRTdGFydHVwVGltZSAgICAgICAgICAgIE5PUk9NX09TQ0hGX0dldFN0YXJ0dXBUaW1lCisgICAgI2RlZmluZSBPU0NIRl9UdXJuT25Yb3NjICAgICAgICAgICAgICAgIE5PUk9NX09TQ0hGX1R1cm5Pblhvc2MKKyAgICAjZGVmaW5lIE9TQ0hGX0F0dGVtcHRUb1N3aXRjaFRvWG9zYyAgICAgTk9ST01fT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjCisgICAgI2RlZmluZSBPU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MgIE5PUk9NX09TQ0hGX1N3aXRjaFRvUmNPc2NUdXJuT2ZmWG9zYworICAgICNkZWZpbmUgT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlICBOT1JPTV9PU0NIRl9EZWJ1Z0dldENyeXN0YWxBbXBsaXR1ZGUKKyAgICAjZGVmaW5lIE9TQ0hGX0RlYnVnR2V0RXhwZWN0ZWRBdmVyYWdlQ3J5c3RhbEFtcGxpdHVkZSBOT1JPTV9PU0NIRl9EZWJ1Z0dldEV4cGVjdGVkQXZlcmFnZUNyeXN0YWxBbXBsaXR1ZGUKKyAgICAjZGVmaW5lIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0IE5PUk9NX09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0CisgICAgI2RlZmluZSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydCBOT1JPTV9PU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgSGlnaCBGcmVxdWVuY3kgWFRBTCBQb3dlciBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBMT1dfUE9XRVJfWE9TQyAgICAgICAgICAxCisjZGVmaW5lIEhJR0hfUE9XRVJfWE9TQyAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBIaWdoIEZyZXF1ZW5jeSBYVEFMIFBvd2VyIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE9TQ19TUkNfQ0xLX0hGICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgT1NDX1NSQ19DTEtfTUYgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBPU0NfU1JDX0NMS19MRiAgICAgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgT1NDX1JDT1NDX0hGICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBPU0NfWE9TQ19IRiAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9TQ19SQ09TQ19MRiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgT1NDX1hPU0NfTEYgICAgICAgICAgICAgMHgwMDAwMDAwMworCisjZGVmaW5lIFNDTEtfSEZfUkNPU0NfSEYgICAgICAgIDAKKyNkZWZpbmUgU0NMS19IRl9YT1NDX0hGICAgICAgICAgMQorCisjZGVmaW5lIFNDTEtfTUZfUkNPU0NfSEYgICAgICAgIDAKKyNkZWZpbmUgU0NMS19NRl9YT1NDX0hGICAgICAgICAgMQorCisjZGVmaW5lIFNDTEtfTEZfRlJPTV9SQ09TQ19IRiAgIDAKKyNkZWZpbmUgU0NMS19MRl9GUk9NX1hPU0NfSEYgICAgMQorI2RlZmluZSBTQ0xLX0xGX0ZST01fUkNPU0NfTEYgICAyCisjZGVmaW5lIFNDTEtfTEZfRlJPTV9YT1NDX0xGICAgIDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBQb3dlciBNb2RlIGZvciBIaWdoIEZyZXF1ZW5jeSBYVEFMIE9zY2lsbGF0b3IuCisvLyEKKy8vISBccGFyYW0gdWkzMk1vZGUgaXMgdGhlIHBvd2VyIG1vZGUgZm9yIHRoZSBIRiBYVEFMLgorLy8hIC0gXHJlZiBMT1dfUE9XRVJfWE9TQworLy8hIC0gXHJlZiBISUdIX1BPV0VSX1hPU0MKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitPU0NYSGZQb3dlck1vZGVTZXQodWludDMyX3QgdWkzMk1vZGUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBMT1dfUE9XRVJfWE9TQykgfHwKKyAgICAgICAgICAgKHVpMzJNb2RlID09IEhJR0hfUE9XRVJfWE9TQykpOworCisgICAgLy8KKyAgICAvLyBDaGFuZ2UgdGhlIHBvd2VyIG1vZGUuCisgICAgLy8KKyAgICBEREkxNkJpdFdyaXRlKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19DVEwwLCBERElfMF9PU0NfQ1RMMF9YT1NDX0hGX1BPV0VSX01PREUsCisgICAgICAgICAgICAgICAgICB1aTMyTW9kZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgT1NDIGNsb2NrIGxvc3MgZXZlbnQgZGV0ZWN0aW9uLgorLy8hCisvLyEgRW5hYmxlcyB0aGUgY2xvY2sgbG9zcyBldmVudCBmbGFnIHRvIGJlIHJhaXNlZCBpZiBhIGNsb2NrIGxvc3MgaXMgZGV0ZWN0ZWQuCisvLyEKKy8vISBcbm90ZSBPU0MgY2xvY2sgbG9zcyBldmVudCBtdXN0IGJlIGRpc2FibGVkIGJlZm9yZSBTQ0xLX0xGIGNsb2NrIHNvdXJjZSBpcworLy8hIGNoYW5nZWQgKGJ5IGNhbGxpbmcgXHJlZiBPU0NDbG9ja1NvdXJjZVNldCgpKSBhbmQgcmVtYWluIGRpc2FibGVkIHVudGlsIHRoZQorLy8hIGNoYW5nZSBpcyBjb25maXJtZWQgKGJ5IGNhbGxpbmcgXHJlZiBPU0NDbG9ja1NvdXJjZUdldCgpKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgT1NDQ2xvY2tMb3NzRXZlbnREaXNhYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorT1NDQ2xvY2tMb3NzRXZlbnRFbmFibGUoIHZvaWQgKQoreworICAgIERESTE2Qml0ZmllbGRXcml0ZSggQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0NUTDAsCisgICAgICAgIERESV8wX09TQ19DVEwwX0NMS19MT1NTX0VOX00sCisgICAgICAgIERESV8wX09TQ19DVEwwX0NMS19MT1NTX0VOX1MsIDEgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgT1NDIGNsb2NrIGxvc3MgZXZlbnQgZGV0ZWN0aW9uLgorLy8hCisvLyEgRGlzYWJsaW5nIHRoZSBPU0MgY2xvY2sgbG9zcyBldmVudCBkb2VzIGFsc28gY2xlYXIgdGhlIGNsb2NrIGxvc3MgZXZlbnQgZmxhZy4KKy8vIQorLy8hIFxub3RlIE9TQyBjbG9jayBsb3NzIGV2ZW50IG11c3QgYmUgZGlzYWJsZWQgYmVmb3JlIFNDTEtfTEYgY2xvY2sgc291cmNlIGlzCisvLyEgY2hhbmdlZCAoYnkgY2FsbGluZyBccmVmIE9TQ0Nsb2NrU291cmNlU2V0KCkpIGFuZCByZW1haW4gZGlzYWJsZWQgdW50aWwgdGhlCisvLyEgY2hhbmdlIGlzIGNvbmZpcm1lZCAoYnkgY2FsbGluZyBccmVmIE9TQ0Nsb2NrU291cmNlR2V0KCkpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBPU0NDbG9ja0xvc3NFdmVudEVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK09TQ0Nsb2NrTG9zc0V2ZW50RGlzYWJsZSggdm9pZCApCit7CisgICAgRERJMTZCaXRmaWVsZFdyaXRlKCBBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQ1RMMCwKKyAgICAgICAgRERJXzBfT1NDX0NUTDBfQ0xLX0xPU1NfRU5fTSwKKyAgICAgICAgRERJXzBfT1NDX0NUTDBfQ0xLX0xPU1NfRU5fUywgMCApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIG9zY2lsbGF0b3IgaW5wdXQgdG8gdGhlIGEgc291cmNlIGNsb2NrLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSBvc2NpbGxhdG9yIHNvdXJjZSBmb3Igb25lIG9yIG1vcmUgb2YgdGhlCisvLyEgc3lzdGVtIHNvdXJjZSBjbG9ja3MuCisvLyEKKy8vISBXaGVuIHNlbGVjdGluZyB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2sgc291cmNlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRvCisvLyEgdGhlIGFjdHVhbCBzd2l0Y2guIEVuYWJsaW5nIHRoZSBoaWdoIGZyZXF1ZW5jeSBYVEFMIGNhbiB0YWtlIHNldmVyYWwgaHVuZHJlZAorLy8hIG1pY3JvIHNlY29uZHMsIHNvIHRoZSBhY3R1YWwgc3dpdGNoIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiwKKy8vISBsZWF2aW5nIFN5c3RlbSBDUFUgZnJlZSB0byBwZXJmb3JtIG90aGVyIHRhc2tzIGFzIHRoZSBYVEFMIHN0YXJ0cyB1cC4KKy8vIQorLy8hIFxub3RlIFRoZSBIaWdoIEZyZXF1ZW5jeSAoXHJlZiBPU0NfU1JDX0NMS19IRikgYW5kIE1lZGl1bSBGcmVxdWVuY3kKKy8vISAoXHJlZiBPU0NfU1JDX0NMS19NRikgY2FuIG9ubHkgYmUgZGVyaXZlZCBmcm9tIHRoZSBoaWdoIGZyZXF1ZW5jeQorLy8hIG9zY2lsbGF0b3IuIFRoZSBMb3cgRnJlcXVlbmN5IHNvdXJjZSBjbG9jayAoXHJlZiBPU0NfU1JDX0NMS19MRikgY2FuIGJlCisvLyEgZGVyaXZlZCBmcm9tIGFsbCA0IG9zY2lsbGF0b3JzLgorLy8hCisvLyEgXG5vdGUgSWYgZW5hYmxpbmcgXHJlZiBPU0NfWE9TQ19MRiBpdCBpcyBub3Qgc2FmZSB0byBnbyB0byBwb3dlcmRvd24vc2h1dGRvd24KKy8vISB1bnRpbCB0aGUgTEYgY2xvY2sgaXMgcnVubmluZyB3aGljaCBjYW4gYmUgY2hlY2tlZCB1c2luZyBccmVmIE9TQ0Nsb2NrU291cmNlR2V0KCkuCisvLyEKKy8vISBcbm90ZSBDbG9jayBsb3NzIHJlc2V0IGdlbmVyYXRpb24gbXVzdCBiZSBkaXNhYmxlZCBiZWZvcmUgU0NMS19MRiAoXHJlZiBPU0NfU1JDX0NMS19MRikKKy8vISBjbG9jayBzb3VyY2UgaXMgY2hhbmdlZCBhbmQgcmVtYWluIGRpc2FibGVkIHVudGlsIHRoZSBjaGFuZ2UgaXMgY29uZmlybWVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTcmNDbGsgaXMgdGhlIHNvdXJjZSBjbG9ja3MgdG8gY29uZmlndXJlLgorLy8hIC0gXHJlZiBPU0NfU1JDX0NMS19IRgorLy8hIC0gXHJlZiBPU0NfU1JDX0NMS19NRgorLy8hIC0gXHJlZiBPU0NfU1JDX0NMS19MRgorLy8hIFxwYXJhbSB1aTMyT3NjIGlzIHRoZSBvc2NpbGxhdG9yIHRoYXQgZHJpdmVzIHRoZSBzb3VyY2UgY2xvY2suCisvLyEgLSBccmVmIE9TQ19SQ09TQ19IRgorLy8hIC0gXHJlZiBPU0NfWE9TQ19IRgorLy8hIC0gXHJlZiBPU0NfUkNPU0NfTEYgKG9ubHkgd2hlbiB1aTMyU3JjQ2xrIGlzIFxyZWYgT1NDX1NSQ19DTEtfTEYpCisvLyEgLSBccmVmIE9TQ19YT1NDX0xGIChvbmx5IHdoZW4gdWkzMlNyY0NsayBpcyBccmVmIE9TQ19TUkNfQ0xLX0xGKQorLy8hCisvLyEgXHNhIE9TQ0Nsb2NrU291cmNlR2V0KCkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIE9TQ0Nsb2NrU291cmNlU2V0KHVpbnQzMl90IHVpMzJTcmNDbGssIHVpbnQzMl90IHVpMzJPc2MpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHNvdXJjZSBjbG9jayBzZXR0aW5ncy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgb3NjaWxsYXRvciBzb3VyY2UgZm9yIG9uZSBvZiB0aGUgc3lzdGVtIHNvdXJjZQorLy8hIGNsb2Nrcy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyU3JjQ2xrIGlzIHRoZSBzb3VyY2UgY2xvY2sgdG8gY2hlY2suCisvLyEgLSBccmVmIE9TQ19TUkNfQ0xLX0hGCisvLyEgLSBccmVmIE9TQ19TUkNfQ0xLX01GCisvLyEgLSBccmVmIE9TQ19TUkNfQ0xLX0xGCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHR5cGUgb2Ygb3NjaWxsYXRvciB0aGF0IGRyaXZlcyB0aGUgY2xvY2sgc291cmNlLgorLy8hIC0gXHJlZiBPU0NfUkNPU0NfSEYKKy8vISAtIFxyZWYgT1NDX1hPU0NfSEYKKy8vISAtIFxyZWYgT1NDX1JDT1NDX0xGCisvLyEgLSBccmVmIE9TQ19YT1NDX0xGCisvLyEKKy8vISBcc2EgXHJlZiBPU0NDbG9ja1NvdXJjZVNldCgpLCBccmVmIE9TQ0hmU291cmNlU3dpdGNoKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgT1NDQ2xvY2tTb3VyY2VHZXQodWludDMyX3QgdWkzMlNyY0Nsayk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrIGlmIHRoZSBIRiBjbG9jayBzb3VyY2UgaXMgcmVhZHkgdG8gYmUgc3dpdGNoZWQuCisvLyEKKy8vISBJZiBhIHJlcXVlc3QgdG8gc3dpdGNoIHRoZSBIRiBjbG9jayBzb3VyY2UgaGFzIGJlZW4gbWFkZSwgdGhpcyBmdW5jdGlvbgorLy8hIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBjbG9jayBzb3VyY2UgaXMgcmVhZHkgdG8gYmUgc3dpdGNoZWQuCisvLyEKKy8vISBPbmNlIHRoZSBIRiBjbG9jayBzb3VyY2UgaXMgcmVhZHkgdGhlIHN3aXRjaCBjYW4gYmUgcGVyZm9ybWVkIGJ5IGNhbGxpbmcKKy8vISB0aGUgXHJlZiBPU0NIZlNvdXJjZVN3aXRjaCgpCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIEhGIGNsb2NrIHNvdXJjZToKKy8vISAtIFxjIHRydWUgIDogSEYgY2xvY2sgc291cmNlIGlzIHJlYWR5LgorLy8hIC0gXGMgZmFsc2UgOiBIRiBjbG9jayBzb3VyY2UgaXMgXGIgbm90IHJlYWR5LgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitPU0NIZlNvdXJjZVJlYWR5KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHJlYWRpbmVzcyBvZiB0aGUgSEYgY2xvY2sgc291cmNlCisgICAgLy8KKyAgICByZXR1cm4gKERESTE2Qml0ZmllbGRSZWFkKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19TVEFUMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19TVEFUMF9QRU5ESU5HU0NMS0hGU1dJVENISU5HX00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfU1RBVDBfUEVORElOR1NDTEtIRlNXSVRDSElOR19TKSkgPworICAgICAgICB0cnVlIDogZmFsc2U7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFN3aXRjaCB0aGUgaGlnaCBmcmVxdWVuY3kgY2xvY2suCisvLyEKKy8vISBXaGVuIHN3aXRjaGluZyB0aGUgSEYgY2xvY2sgc291cmNlIHRoZSBjbG9jayBwZXJpb2QgbWlnaHQgYmUgcHJvbG9uZ2VkCisvLyEgbGVhdmluZyB0aGUgY2xvY2sgJ3N0dWNrLWF0JyBoaWdoIG9yIGxvdyBmb3IgYSBmZXcgY3ljbGVzLiBUbyBlbnN1cmUgdGhhdAorLy8hIHRoaXMgZG9lcyBub3QgY29pbmNpZGUgd2l0aCBhIHJlYWQgYWNjZXNzIHRvIHRoZSBGbGFzaCBwb3RlbnRpYWxseQorLy8hIGZyZWV6aW5nIHRoZSBkZXZpY2UsIHRoZSBIRiBjbG9jayBzb3VyY2Ugc3dpdGNoIG11c3QgYmUgZXhlY3V0ZWQgZnJvbSBST00uCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiB1bnRpbCB0aGUgY2xvY2sgc291cmNlIGhhcyBiZWVuCisvLyEgc3dpdGNoZWQuIEl0IGlzIGxlZnQgdG8gdGhlIHByb2dyYW1tZXIgdG8gZW5zdXJlLCB0aGF0IHRoZXJlIGlzIGEgcGVuZGluZworLy8hIHJlcXVlc3QgZm9yIGEgSEYgY2xvY2sgc291cmNlIHN3aXRjaCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIE9TQ0Nsb2NrU291cmNlU2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorT1NDSGZTb3VyY2VTd2l0Y2godm9pZCkKK3sKKyAgICAvLworICAgIC8vIFN3aXRjaCB0aGUgSEYgY2xvY2sgc291cmNlCisgICAgLy8KKyAgICBIYXBpSEZTb3VyY2VTYWZlU3dpdGNoKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERlcHJlY2F0ZWQ6IEVtcHR5IGZ1bmN0aW9uIC0gb3JpZ2luYWwgZnVuY3Rpb25hbGl0eSBpcyByZW1vdmVkLgorLy8hCisvLyEgXGRlcHJlY2F0ZWQgRnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgc3RhcnR1cCBjb2RlLiBUaGUgZHVtbXkgZnVuY3Rpb24KKy8vISB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBDQzI2eHhXYXJlL0NDMTN4eFdhcmUuCisvLyEKKy8vISBUaGUgb3JpZ2luYWwgZnVuY3Rpb25hbGl0eSB3YXMgZGVzY3JpYmVkIGFzIGZvbGxvd3M6CisvLyEgRW5hYmxlIFN5c3RlbSBDUFUgYWNjZXNzIHRvIHRoZSBPU0NfRElHIG1vZHVsZS4KKy8vISBGb3JjZSBwb3dlciBvbiBBVVggYW5kIGVuYWJsZSBjbG9ja3MgdG8gYWxsb3cgU3lzdGVtIENQVSBhY2Nlc3Mgb24KKy8vISB0aGUgT1NDX0RJRyBpbnRlcmZhY2UuCisvLyEKKy8vISBcbm90ZSBBY2Nlc3MgdG8gdGhlIE9TQ19ESUcgaW50ZXJmYWNlIGlzIGEgc2hhcmVkIHJlc291cmNlIGJldHdlZW4gdGhlCisvLyEgU2Vuc29yIENvbnRyb2xsZXIgYW5kIHRoZSBDUFUsIHNvIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGludGVyZmFjZSBtdXN0CisvLyEgYmUgZG9uZSB3aXRoIGNvbnNpZGVyYXRpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorT1NDSW50ZXJmYWNlRW5hYmxlKHZvaWQpCit7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERlcHJlY2F0ZWQ6IEVtcHR5IGZ1bmN0aW9uIC0gb3JpZ2luYWwgZnVuY3Rpb25hbGl0eSBpcyByZW1vdmVkLgorLy8hCisvLyEgXGRlcHJlY2F0ZWQgRnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgc3RhcnR1cCBjb2RlLiBUaGUgZHVtbXkgZnVuY3Rpb24KKy8vISB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBDQzI2eHhXYXJlL0NDMTN4eFdhcmUuCisvLyEKKy8vISBUaGUgb3JpZ2luYWwgZnVuY3Rpb25hbGl0eSB3YXMgZGVzY3JpYmVkIGFzIGZvbGxvd3M6CisvLyEgRGlzYWJsZSBTeXN0ZW0gQ1BVIGFjY2VzcyB0byB0aGUgT1NDX0RJRyBtb2R1bGUuCisvLyEgUmVsZWFzZSB0aGUgImZvcmNlIHBvd2VyIG9uIiBvZiBBVVggYW5kIGRpc2FibGUgY2xvY2sgdG8gQVVYLgorLy8hCisvLyEgXG5vdGUgQWNjZXNzIHRvIHRoZSBPU0NfRElHIGludGVyZmFjZSBpcyBhIHNoYXJlZCByZXNvdXJjZSBiZXR3ZWVuIHRoZQorLy8hIFNlbnNvciBDb250cm9sbGVyIGFuZCB0aGUgQ1BVLCBzbyBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBpbnRlcmZhY2UgbXVzdAorLy8hIGJlIGRvbmUgd2l0aCBjb25zaWRlcmF0aW9uLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK09TQ0ludGVyZmFjZURpc2FibGUodm9pZCkKK3sKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBtYXhpbXVtIHN0YXJ0dXAgdGltZSAoaW4gbWljcm9zZWNvbmRzKSBvZiBYT1NDX0hGLgorLy8hCisvLyEgVGhlIHN0YXJ0dXAgdGltZSBkZXBlbmRzIG9uIHNldmVyYWwgZmFjdG9ycy4gVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZQorLy8hIG1heGltdW0gc3RhcnR1cCB0aW1lIGJhc2VkIG9uIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHRpbWVVbnRpbFdha2V1cEluTXMgaW5kaWNhdGVzIGhvdyBsb25nIHRpbWUgKG1pbGxpc2Vjb25kcykgdG8gdGhlCisvLyEgc3RhcnR1cCB3aWxsIG9jY3VyLgorLy8hCisvLyEgXHJldHVybiBUaW1lIG1hcmdpbiB0byB1c2UgaW4gbWljcm9zZWNvbmRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBPU0NIRl9HZXRTdGFydHVwVGltZSggdWludDMyX3QgdGltZVVudGlsV2FrZXVwSW5NcyApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFR1cm5zIG9uIFhPU0NfSEYgKGJ1dCB3aXRob3V0IHN3aXRjaGluZyB0byBYT1NDX0hGKS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGluZGljYXRlcyB0aGUgbmVlZCBmb3IgWE9TQ19IRiB0byB0aGUgaGFyZHdhcmUgd2hpY2gKKy8vISBpbml0aWF0ZXMgdGhlIFhPU0NfSEYgc3RhcnR1cC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIE9TQ0hGX1R1cm5Pblhvc2MoIHZvaWQgKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTd2l0Y2ggdG8gWE9TQ19IRiBpZiBYT1NDX0hGIGlzIHJlYWR5LgorLy8hCisvLyEgVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBmdW5jdGlvbiBjaGVja2luZyBpZiB0aGUgWE9TQ19IRiBpcyByZWFkeSBhbmQKKy8vISBwZXJmb3JtcyB0aGUgc3dpdGNoaW5nIGlmIHJlYWR5LiBUaGUgZnVuY3Rpb24gaXMgc29tZXdoYXQgYmxvY2tpbmcgaW4gdGhlCisvLyEgY2FzZSB3aGVyZSBzd2l0Y2hpbmcgaXMgcGVyZm9ybWVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgWE9TQ19IRiBzd2l0Y2hpbmc6CisvLyEgLSBcYyB0cnVlICA6IFN3aXRjaGluZyB0byBYT1NDX0hGIGhhcyBvY2N1cnJlZC4KKy8vISAtIFxjIGZhbHNlIDogU3dpdGNoaW5nIGhhcyBub3Qgb2NjdXJyZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGJvb2wgT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjKCB2b2lkICk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3dpdGNoIHRvIFJDT1NDX0hGIGFuZCB0dXJuIG9mZiBYT1NDX0hGLgorLy8hCisvLyEgVGhpcyBvcGVyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseSA1MCBtaWNyb3NlY29uZHMgKGNhbiBiZSBzaG9ydGVyIGlmCisvLyEgUkNPU0NfSEYgYWxyZWFkeSB3YXMgcnVubmluZykuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBPU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IGNyeXN0YWwgYW1wbGl0dWRlIChhc3N1bWluZyBjcnlzdGFsIGlzIHJ1bm5pbmcpLgorLy8hCisvLyEgXG5vdGUgVGhpcyBpcyBhIGRlYnVnIGZ1bmN0aW9uIG9ubHkuCisvLyEgSXQgaXMgaGVuY2Ugbm90IHJlY29tbWVuZGVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBub3JtYWwgb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB1c2VzIGFuIG9uLWNoaXAgQURDIGFuZCBwZWFrIGRldGVjdG9yIGZvciByZWFkaW5nIHRoZSBjcnlzdGFsCisvLyEgYW1wbGl0dWRlLiBUaGUgbWVhc3VyZW1lbnQgdGltZSBpcyBzZXQgdG8gNCBtaWxsaXNlY29uZHMgYW5kIHRoaXMgZnVuY3Rpb24KKy8vISBkb2VzIG5vdCByZXR1cm4gYmVmb3JlIHRoZSBtZWFzdXJlbWVudCBpcyBkb25lLgorLy8hCisvLyEgRXhwZWN0ZWQgdmFsdWUgaXMgXHJlZiBPU0NIRl9EZWJ1Z0dldEV4cGVjdGVkQXZlcmFnZUNyeXN0YWxBbXBsaXR1ZGUgKy8tIDUwIG1pbGxpdm9sdC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBjcnlzdGFsIGFtcGxpdHVkZSBpbiBtaWxsaXZvbHQuCisvLyEKKy8vISBcc2EgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgZXhwZWN0ZWQgYXZlcmFnZSBjcnlzdGFsIGFtcGxpdHVkZS4KKy8vIQorLy8hIFxub3RlIFRoaXMgaXMgYSBkZWJ1ZyBmdW5jdGlvbiBvbmx5LgorLy8hIEl0IGlzIGhlbmNlIG5vdCByZWNvbW1lbmRlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gbm9ybWFsIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmVhZCB0aGUgY29uZmlndXJlZCBoaWdoIGFuZCBsb3cgdGhyZXNob2xkcyBhbmQgcmV0dXJucworLy8hIHRoZSBtZWFuIHZhbHVlIGNvbnZlcnRlZCB0byBtaWxsaXZvbHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgZXhwZWN0ZWQgYXZlcmFnZSBjcnlzdGFsIGFtcGxpdHVkZSBpbiBtaWxsaXZvbHQuCisvLyEKKy8vISBcc2EgT1NDSEZfRGVidWdHZXRDcnlzdGFsQW1wbGl0dWRlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENhbGN1bGF0ZSB0aGUgdGVtcGVyYXR1cmUgZGVwZW5kZW50IHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgb2YgSFBPU0MKKy8vIQorLy8hIFRoZSBIUE9TQyAoSGlnaCBQcmVjaXNpb24gT3NjaWxsYXRvcikgZnJlcXVlbmN5IHdpbGwgdmFyeSBzbGlnaHRseSB3aXRoIGNoaXAgdGVtcGVyYXR1cmUuCisvLyEgVGhlIGZyZXF1ZW5jeSBvZmZzZXQgZnJvbSB0aGUgbm9taW5hbCB2YWx1ZSBjYW4gYmUgcHJlZGljdGVkIGJhc2VkIG9uCisvLyEgc2Vjb25kIG9yZGVyIGxpbmVhciBpbnRlcnBvbGF0aW9uIHVzaW5nIGNvZWZmaWNpZW50cyBtZWFzdXJlZCBpbiBjaGlwCisvLyEgcHJvZHVjdGlvbiBhbmQgc3RvcmVkIGFzIGZhY3RvcnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0LCBkZWZpbmVkIGFzOgorLy8hIDxwcmU+CisvLyEgICAgIEZfSFBPU0MgPSBGX25vbSAqICgxICsgZC8oMl4yMikpCisvLyEgPC9wcmU+CisvLyEgd2hlcmUKKy8vISAtICAgRl9IUE9TQyBpcyB0aGUgY3VycmVudCBIUE9TQyBmcmVxdWVuY3kuCisvLyEgLSAgIEZfbm9tIGlzIHRoZSBub21pbmFsIG9zY2lsbGF0b3IgZnJlcXVlbmN5LCBhc3N1bWVkIHRvIGJlIDQ4LjAwMCBNSHouCisvLyEgLSAgIGQgaXMgdGhlIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgKHRoZSB2YWx1ZSByZXR1cm5lZCkuCisvLyEKKy8vISBCeSBrbm93aW5nIHRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IGl0IGlzIHRoZW4gcG9zc2libGUgdG8gY29tcGVuc2F0ZQorLy8hIGFueSB0aW1pbmcgcmVsYXRlZCB2YWx1ZXMgYWNjb3JkaW5nbHkuCisvLyEKKy8vISBccGFyYW0gdGVtcERlZ0MgaXMgdGhlIGNoaXAgdGVtcGVyYXR1cmUgaW4gZGVncmVlcyBDZWxzaXVzLiBVc2UgdGhlCisvLyEgZnVuY3Rpb24gXHJlZiBBT05CYXRNb25UZW1wZXJhdHVyZUdldERlZ0MoKSB0byBnZXQgY3VycmVudCBjaGlwIHRlbXBlcmF0dXJlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSByZWxhdGl2ZSBmcmVxdWVuY3kgb2Zmc2V0IHBhcmFtZXRlciBkLgorLy8hCisvLyEgXHNhIE9TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0KCksIEFPTkJhdE1vblRlbXBlcmF0dXJlR2V0RGVnQygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQoIGludDMyX3QgdGVtcERlZ0MgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udmVydHMgdGhlIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgb2YgSFBPU0MgdG8gdGhlIFJGIENvcmUgcGFyYW1ldGVyIGZvcm1hdC4KKy8vIQorLy8hIFRoZSBIUE9TQyAoSGlnaCBQcmVjaXNpb24gT3NjaWxsYXRvcikgY2xvY2sgaXMgdXNlZCBieSB0aGUgUkYgQ29yZS4KKy8vISBUbyBjb21wZW5zYXRlIGZvciBhIGZyZXF1ZW5jeSBvZmZzZXQgaW4gdGhlIGZyZXF1ZW5jeSBvZiB0aGUgY2xvY2sgc291cmNlLAorLy8hIGEgZnJlcXVlbmN5IG9mZnNldCBwYXJhbWV0ZXIgY2FuIGJlIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHJhZGlvIGNvbmZpZ3VyYXRpb24KKy8vISBvdmVycmlkZSBzZXR0aW5nIGxpc3QgdG8gZW5hYmxlIGNvbXBlbnNhdGlvbiBvZiB0aGUgUkYgc3ludGhlc2l6ZXIgZnJlcXVlbmN5LAorLy8hIHN5bWJvbCB0aW1pbmcsIGFuZCByYWRpbyB0aW1lciB0byBzdGlsbCBhY2hpZXZlIGNvcnJlY3QgZnJlcXVlbmNpZXMuCisvLyEKKy8vISBUaGUgUkYgQ29yZSB0YWtlcyBhIHJlbGF0aXZlIGZyZXF1ZW5jeSBvZmZzZXQgcGFyYW1ldGVyIGRlZmluZWQgZGlmZmVyZW50bHkKKy8vISBjb21wYXJlZCB0byB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBwYXJhbWV0ZXIgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbgorLy8hIFxyZWYgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQoKSBhbmQgdGh1cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQ6CisvLyEgPHByZT4KKy8vISAgICAgRl9ub20gPSBGX0hQT1NDICogKDEgKyBSZkNvcmVSZWxGcmVxT2Zmc2V0LygyXjIyKSkKKy8vISA8L3ByZT4KKy8vISB3aGVyZQorLy8hIC0gICBGX25vbSBpcyB0aGUgbm9taW5hbCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSwgYXNzdW1lZCB0byBiZSA0OC4wMDAgTUh6LgorLy8hIC0gICBGX0hQT1NDIGlzIHRoZSBjdXJyZW50IEhQT1NDIGZyZXF1ZW5jeS4KKy8vISAtICAgUmZDb3JlUmVsRnJlcU9mZnNldCBpcyB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBpbiB0aGUgIlJGIENvcmUiIGZvcm1hdCAodGhlIHZhbHVlIHJldHVybmVkKS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgcmVsYXRpdmUgZnJlcXVlbmN5IG9mZnNldCBpbiBSRiBDb3JlIGZvcm1hdC4KKy8vIQorLy8hIFxzYSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldEdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDE2X3QgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQoIGludDMyX3QgSFBPU0NfUmVsRnJlcU9mZnNldCApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX09TQ0Nsb2NrU291cmNlU2V0CisgICAgICAgICN1bmRlZiAgT1NDQ2xvY2tTb3VyY2VTZXQKKyAgICAgICAgI2RlZmluZSBPU0NDbG9ja1NvdXJjZVNldCAgICAgICAgICAgICAgIFJPTV9PU0NDbG9ja1NvdXJjZVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fT1NDQ2xvY2tTb3VyY2VHZXQKKyAgICAgICAgI3VuZGVmICBPU0NDbG9ja1NvdXJjZUdldAorICAgICAgICAjZGVmaW5lIE9TQ0Nsb2NrU291cmNlR2V0ICAgICAgICAgICAgICAgUk9NX09TQ0Nsb2NrU291cmNlR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9PU0NIRl9HZXRTdGFydHVwVGltZQorICAgICAgICAjdW5kZWYgIE9TQ0hGX0dldFN0YXJ0dXBUaW1lCisgICAgICAgICNkZWZpbmUgT1NDSEZfR2V0U3RhcnR1cFRpbWUgICAgICAgICAgICBST01fT1NDSEZfR2V0U3RhcnR1cFRpbWUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ0hGX1R1cm5Pblhvc2MKKyAgICAgICAgI3VuZGVmICBPU0NIRl9UdXJuT25Yb3NjCisgICAgICAgICNkZWZpbmUgT1NDSEZfVHVybk9uWG9zYyAgICAgICAgICAgICAgICBST01fT1NDSEZfVHVybk9uWG9zYworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjCisgICAgICAgICN1bmRlZiAgT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjCisgICAgICAgICNkZWZpbmUgT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjICAgICBST01fT1NDSEZfQXR0ZW1wdFRvU3dpdGNoVG9Yb3NjCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9PU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MKKyAgICAgICAgI3VuZGVmICBPU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MKKyAgICAgICAgI2RlZmluZSBPU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MgIFJPTV9PU0NIRl9Td2l0Y2hUb1JjT3NjVHVybk9mZlhvc2MKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZQorICAgICAgICAjdW5kZWYgIE9TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZQorICAgICAgICAjZGVmaW5lIE9TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZSAgUk9NX09TQ0hGX0RlYnVnR2V0Q3J5c3RhbEFtcGxpdHVkZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlCisgICAgICAgICN1bmRlZiAgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlCisgICAgICAgICNkZWZpbmUgT1NDSEZfRGVidWdHZXRFeHBlY3RlZEF2ZXJhZ2VDcnlzdGFsQW1wbGl0dWRlIFJPTV9PU0NIRl9EZWJ1Z0dldEV4cGVjdGVkQXZlcmFnZUNyeXN0YWxBbXBsaXR1ZGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0R2V0CisgICAgICAgICN1bmRlZiAgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQKKyAgICAgICAgI2RlZmluZSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldEdldCBST01fT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRHZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX09TQ19IUE9TQ1JlbGF0aXZlRnJlcXVlbmN5T2Zmc2V0VG9SRkNvcmVGb3JtYXRDb252ZXJ0CisgICAgICAgICN1bmRlZiAgT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQKKyAgICAgICAgI2RlZmluZSBPU0NfSFBPU0NSZWxhdGl2ZUZyZXF1ZW5jeU9mZnNldFRvUkZDb3JlRm9ybWF0Q29udmVydCBST01fT1NDX0hQT1NDUmVsYXRpdmVGcmVxdWVuY3lPZmZzZXRUb1JGQ29yZUZvcm1hdENvbnZlcnQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLy8gX19PU0NfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ByY20uYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ByY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZiMjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHJjbS5jCkBAIC0wLDAgKzEsNjcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcHJjbS5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0wNCAxNjo0OTozOCArMDEwMCAoRnJpLCAwNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTg3NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIFBSQ00uCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3ByY20uaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldAorICAgICNkZWZpbmUgUFJDTUluZkNsb2NrQ29uZmlndXJlU2V0ICAgICAgICBOT1JPTV9QUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQKKyAgICAjdW5kZWYgIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldAorICAgICNkZWZpbmUgUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0ICAgICAgICBOT1JPTV9QUkNNSW5mQ2xvY2tDb25maWd1cmVHZXQKKyAgICAjdW5kZWYgIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0CisgICAgI2RlZmluZSBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldCAgICAgICAgIE5PUk9NX1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0CisgICAgI3VuZGVmICBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlCisgICAgI2RlZmluZSBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlIE5PUk9NX1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUKKyAgICAjdW5kZWYgIFBSQ01Qb3dlckRvbWFpbk9uCisgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5PbiAgICAgICAgICAgICAgIE5PUk9NX1BSQ01Qb3dlckRvbWFpbk9uCisgICAgI3VuZGVmICBQUkNNUG93ZXJEb21haW5PZmYKKyAgICAjZGVmaW5lIFBSQ01Qb3dlckRvbWFpbk9mZiAgICAgICAgICAgICAgTk9ST01fUFJDTVBvd2VyRG9tYWluT2ZmCisgICAgI3VuZGVmICBQUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUgICAgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZQorICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlCisgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbFJ1bkRpc2FibGUgICAgICAgIE5PUk9NX1BSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZQorICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSAgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlCisgICAgI3VuZGVmICBQUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZQorICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlICAgTk9ST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUKKyAgICAjdW5kZWYgIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlICBOT1JPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUKKyAgICAjdW5kZWYgIFBSQ01Qb3dlckRvbWFpblN0YXR1cworICAgICNkZWZpbmUgUFJDTVBvd2VyRG9tYWluU3RhdHVzICAgICAgICAgICBOT1JPTV9QUkNNUG93ZXJEb21haW5TdGF0dXMKKyAgICAjdW5kZWYgIFBSQ01EZWVwU2xlZXAKKyAgICAjZGVmaW5lIFBSQ01EZWVwU2xlZXAgICAgICAgICAgICAgICAgICAgTk9ST01fUFJDTURlZXBTbGVlcAorI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFycmF5cyB0aGF0IG1hcHMgdGhlICJwZXJpcGhlcmFsIHNldCIgbnVtYmVyICh3aGljaCBpcyBzdG9yZWQgaW4gdGhlCisvLyB0aGlyZCBuaWJibGUgb2YgdGhlIFBSQ01fUEVSSVBIXyogZGVmaW5lcykgdG8gdGhlIFBSQ00gcmVnaXN0ZXIgdGhhdAorLy8gY29udGFpbnMgdGhlIHJlbGV2YW50IGJpdCBmb3IgdGhhdCBwZXJpcGhlcmFsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8gUnVuIG1vZGUgcmVnaXN0ZXJzCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ19wdWkzMlJDR0NSZWdzW10gPQoreworICAgIFBSQ01fT19HUFRDTEtHUiwKKyAgICBQUkNNX09fU1NJQ0xLR1IsCisgICAgUFJDTV9PX1VBUlRDTEtHUiwKKyAgICBQUkNNX09fSTJDQ0xLR1IsCisgICAgUFJDTV9PX1NFQ0RNQUNMS0dSLAorICAgIFBSQ01fT19HUElPQ0xLR1IsCisgICAgUFJDTV9PX0kyU0NMS0dSCit9OworCisvLyBTbGVlcCBtb2RlIHJlZ2lzdGVycworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdfcHVpMzJTQ0dDUmVnc1tdID0KK3sKKyAgICBQUkNNX09fR1BUQ0xLR1MsCisgICAgUFJDTV9PX1NTSUNMS0dTLAorICAgIFBSQ01fT19VQVJUQ0xLR1MsCisgICAgUFJDTV9PX0kyQ0NMS0dTLAorICAgIFBSQ01fT19TRUNETUFDTEtHUywKKyAgICBQUkNNX09fR1BJT0NMS0dTLAorICAgIFBSQ01fT19JMlNDTEtHUworfTsKKworLy8gRGVlcCBzbGVlcCBtb2RlIHJlZ2lzdGVycworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdfcHVpMzJEQ0dDUmVnc1tdID0KK3sKKyAgICBQUkNNX09fR1BUQ0xLR0RTLAorICAgIFBSQ01fT19TU0lDTEtHRFMsCisgICAgUFJDTV9PX1VBUlRDTEtHRFMsCisgICAgUFJDTV9PX0kyQ0NMS0dEUywKKyAgICBQUkNNX09fU0VDRE1BQ0xLR0RTLAorICAgIFBSQ01fT19HUElPQ0xLR0RTLAorICAgIFBSQ01fT19JMlNDTEtHRFMKK307CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIG1hY3JvIGV4dHJhY3RzIHRoZSBhcnJheSBpbmRleCBvdXQgb2YgdGhlIHBlcmlwaGVyYWwgbnVtYmVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQUkNNX1BFUklQSF9JTkRFWChhKSAgKCgoYSkgPj4gOCkgJiAweGYpCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIG1hY3JvIGV4dHJhY3RzIHRoZSBwZXJpcGhlcmFsIGluc3RhbmNlIG51bWJlciBhbmQgZ2VuZXJhdGVzIGJpdCBtYXNrCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQUkNNX1BFUklQSF9NQVNLQklUKGEpICgweDAwMDAwMDAxIDw8ICgoYSkgJiAweGYpKQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSBpbmZyYXN0cnVjdHVyZSBjbG9jay4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQodWludDMyX3QgdWkzMkNsa0RpdiwgdWludDMyX3QgdWkzMlBvd2VyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyRGl2aXNvcjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl8xKSB8fAorICAgICAgICAgICAodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl8yKSB8fAorICAgICAgICAgICAodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl84KSB8fAorICAgICAgICAgICAodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl8zMikpOworICAgIEFTU0VSVCgodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1JVTl9NT0RFKSB8fAorICAgICAgICAgICAodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1NMRUVQX01PREUpIHx8CisgICAgICAgICAgICh1aTMyUG93ZXJNb2RlID09IFBSQ01fREVFUF9TTEVFUF9NT0RFKSk7CisKKyAgICB1aTMyRGl2aXNvciA9IDA7CisKKyAgICAvLworICAgIC8vIEZpbmQgdGhlIGNvcnJlY3QgZGl2aXNpb24gZmFjdG9yLgorICAgIC8vCisgICAgaWYodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl8xKQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSAweDA7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl8yKQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSAweDE7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl84KQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSAweDI7CisgICAgfQorICAgIGVsc2UgaWYodWkzMkNsa0RpdiA9PSBQUkNNX0NMT0NLX0RJVl8zMikKKyAgICB7CisgICAgICAgIHVpMzJEaXZpc29yID0gMHgzOworICAgIH0KKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBvd2VyIG1vZGUgc2V0IHRoZSBkaXZpc2lvbiBmYWN0b3IgYWNjb3JkaW5nbHkuCisgICAgLy8KKyAgICBpZih1aTMyUG93ZXJNb2RlID09IFBSQ01fUlVOX01PREUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSU5GUkNMS0RJVlIpID0gdWkzMkRpdmlzb3I7CisgICAgfQorICAgIGVsc2UgaWYodWkzMlBvd2VyTW9kZSA9PSBQUkNNX1NMRUVQX01PREUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSU5GUkNMS0RJVlMpID0gdWkzMkRpdmlzb3I7CisgICAgfQorICAgIGVsc2UgaWYodWkzMlBvd2VyTW9kZSA9PSBQUkNNX0RFRVBfU0xFRVBfTU9ERSkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JTkZSQ0xLRElWRFMpID0gdWkzMkRpdmlzb3I7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgY29uZmlndXJhdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitQUkNNSW5mQ2xvY2tDb25maWd1cmVHZXQodWludDMyX3QgdWkzMlBvd2VyTW9kZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyQ2xrRGl2OworICAgIHVpbnQzMl90IHVpMzJEaXZpc29yOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyUG93ZXJNb2RlID09IFBSQ01fUlVOX01PREUpIHx8CisgICAgICAgICAgICh1aTMyUG93ZXJNb2RlID09IFBSQ01fU0xFRVBfTU9ERSkgfHwKKyAgICAgICAgICAgKHVpMzJQb3dlck1vZGUgPT0gUFJDTV9ERUVQX1NMRUVQX01PREUpKTsKKworICAgIHVpMzJDbGtEaXYgPSAwOworICAgIHVpMzJEaXZpc29yID0gMDsKKworICAgIC8vCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBvd2VyIG1vZGUuCisgICAgLy8KKyAgICBpZih1aTMyUG93ZXJNb2RlID09IFBSQ01fUlVOX01PREUpCisgICAgeworICAgICAgICB1aTMyQ2xrRGl2ID0gSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0lORlJDTEtESVZSKTsKKyAgICB9CisgICAgZWxzZSBpZih1aTMyUG93ZXJNb2RlID09IFBSQ01fU0xFRVBfTU9ERSkKKyAgICB7CisgICAgICAgIHVpMzJDbGtEaXYgPSBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSU5GUkNMS0RJVlMpOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJQb3dlck1vZGUgPT0gUFJDTV9ERUVQX1NMRUVQX01PREUpCisgICAgeworICAgICAgICB1aTMyQ2xrRGl2ID0gSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0lORlJDTEtESVZEUyk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBGaW5kIHRoZSBjb3JyZWN0IGRpdmlzaW9uIGZhY3Rvci4KKyAgICAvLworICAgIGlmKHVpMzJDbGtEaXYgPT0gMHgwKQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSBQUkNNX0NMT0NLX0RJVl8xOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDbGtEaXYgPT0gMHgxKQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSBQUkNNX0NMT0NLX0RJVl8yOworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDbGtEaXYgPT0gMHgyKQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSBQUkNNX0NMT0NLX0RJVl84OworICAgIH0KKyAgICBlbHNlIGlmKHVpMzJDbGtEaXYgPT0gMHgzKQorICAgIHsKKyAgICAgICAgdWkzMkRpdmlzb3IgPSBQUkNNX0NMT0NLX0RJVl8zMjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9yLgorICAgIC8vCisgICAgcmV0dXJuIHVpMzJEaXZpc29yOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQodWludDMyX3QgdWkzMkNsa0NvbmZpZywgdWludDMyX3QgdWkzMlNhbXBsZVJhdGUpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKyAgICB1aW50MzJfdCB1aTMyTXN0RGl2OworICAgIHVpbnQzMl90IHVpMzJCaXREaXY7CisgICAgdWludDMyX3QgdWkzMldvcmREaXY7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoISh1aTMyQ2xrQ29uZmlnICYgKFBSQ01fSTJTQ0xLQ1RMX1dDTEtfUEhBU0VfTSB8IFBSQ01fSTJTQ0xLQ1RMX1NNUExfT05fUE9TRURHRV9NKSkpOworICAgIEFTU0VSVCgodWkzMlNhbXBsZVJhdGUgPT0gSTJTX1NBTVBMRV9SQVRFXzE2SykgfHwKKyAgICAgICAgICAgKHVpMzJTYW1wbGVSYXRlID09IEkyU19TQU1QTEVfUkFURV8yNEspIHx8CisgICAgICAgICAgICh1aTMyU2FtcGxlUmF0ZSA9PSBJMlNfU0FNUExFX1JBVEVfMzJLKSB8fAorICAgICAgICAgICAodWkzMlNhbXBsZVJhdGUgPT0gSTJTX1NBTVBMRV9SQVRFXzQ4SykpOworCisgICAgdWkzMk1zdERpdiA9IDA7CisgICAgdWkzMkJpdERpdiA9IDA7CisgICAgdWkzMldvcmREaXYgPSAwOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24gaXMgZGlzYWJsZWQgYmVmb3JlIHJlY29uZmlndXJpbmcuCisgICAgLy8KKyAgICBQUkNNQXVkaW9DbG9ja0Rpc2FibGUoKTsKKworICAgIC8vCisgICAgLy8gRGVmaW5lIHRoZSBjbG9jayBkaXZpc2lvbiBmYWN0b3JzIGZvciB0aGUgYXVkaW8gaW50ZXJmYWNlLgorICAgIC8vCisgICAgc3dpdGNoKHVpMzJTYW1wbGVSYXRlKQorICAgIHsKKyAgICBjYXNlIEkyU19TQU1QTEVfUkFURV8xNksgOgorICAgICAgICB1aTMyTXN0RGl2ID0gNjsKKyAgICAgICAgdWkzMkJpdERpdiA9IDYwOworICAgICAgICB1aTMyV29yZERpdiA9IDI1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkyU19TQU1QTEVfUkFURV8yNEsgOgorICAgICAgICB1aTMyTXN0RGl2ID0gNDsKKyAgICAgICAgdWkzMkJpdERpdiA9IDQwOworICAgICAgICB1aTMyV29yZERpdiA9IDI1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkyU19TQU1QTEVfUkFURV8zMksgOgorICAgICAgICB1aTMyTXN0RGl2ID0gMzsKKyAgICAgICAgdWkzMkJpdERpdiA9IDMwOworICAgICAgICB1aTMyV29yZERpdiA9IDI1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkyU19TQU1QTEVfUkFURV80OEsgOgorICAgICAgICB1aTMyTXN0RGl2ID0gMjsKKyAgICAgICAgdWkzMkJpdERpdiA9IDIwOworICAgICAgICB1aTMyV29yZERpdiA9IDI1OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE1ha2Ugc3VyZSB0byBjb21wZW5zYXRlIHRoZSBGcmFtZSBjbG9jayBkaXZpc2lvbiBmYWN0b3IgaWYgdXNpbmcgc2luZ2xlCisgICAgLy8gcGhhc2UgZm9ybWF0LgorICAgIC8vCisgICAgaWYoKHVpMzJDbGtDb25maWcgJiBQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00pID09IFBSQ01fV0NMS19TSU5HTEVfUEhBU0UpCisgICAgeworICAgICAgICB1aTMyV29yZERpdiAtPSAxOworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3RvcnMuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTTUNMS0RJVikgPSB1aTMyTXN0RGl2OworICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNCQ0xLRElWKSA9IHVpMzJCaXREaXY7CisgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU1dDTEtESVYpID0gdWkzMldvcmREaXY7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgV29yZCBjbG9jayBmb3JtYXQgYW5kIHBvbGFyaXR5LgorICAgIC8vCisgICAgdWkzMlJlZyA9IEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNDTEtDVEwpICYgfihQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX00gfAorICAgICAgICAgICAgICBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0VfTSk7CisgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU0NMS0NUTCkgPSB1aTMyUmVnIHwgdWkzMkNsa0NvbmZpZzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24gd2l0aCBtYW51YWwgc2V0dGluZyBvZiBjbG9jayBkaXZpZGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUodWludDMyX3QgdWkzMkNsa0NvbmZpZywgdWludDMyX3QgdWkzMk1zdERpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJCaXREaXYsIHVpbnQzMl90IHVpMzJXb3JkRGl2KQoreworICAgIHVpbnQzMl90IHVpMzJSZWc7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoISh1aTMyQ2xrQ29uZmlnICYgKFBSQ01fSTJTQ0xLQ1RMX1dDTEtfUEhBU0VfTSB8IFBSQ01fSTJTQ0xLQ1RMX1NNUExfT05fUE9TRURHRV9NKSkpOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24gaXMgZGlzYWJsZWQgYmVmb3JlIHJlY29uZmlndXJpbmcuCisgICAgLy8KKyAgICBQUkNNQXVkaW9DbG9ja0Rpc2FibGUoKTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRvIGNvbXBlbnNhdGUgdGhlIEZyYW1lIGNsb2NrIGRpdmlzaW9uIGZhY3RvciBpZiB1c2luZyBzaW5nbGUKKyAgICAvLyBwaGFzZSBmb3JtYXQuCisgICAgLy8KKyAgICBpZigodWkzMkNsa0NvbmZpZyAmIFBSQ01fSTJTQ0xLQ1RMX1dDTEtfUEhBU0VfTSkgPT0gUFJDTV9XQ0xLX1NJTkdMRV9QSEFTRSkKKyAgICB7CisgICAgICAgIHVpMzJXb3JkRGl2IC09IDE7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9ycy4KKyAgICAvLworICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19JMlNNQ0xLRElWKSA9IHVpMzJNc3REaXY7CisgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU0JDTEtESVYpID0gdWkzMkJpdERpdjsKKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTV0NMS0RJVikgPSB1aTMyV29yZERpdjsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBXb3JkIGNsb2NrIGZvcm1hdCBhbmQgcG9sYXJpdHkuCisgICAgLy8KKyAgICB1aTMyUmVnID0gSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX0kyU0NMS0NUTCkgJiB+KFBSQ01fSTJTQ0xLQ1RMX1dDTEtfUEhBU0VfTSB8CisgICAgICAgICAgICAgIFBSQ01fSTJTQ0xLQ1RMX1NNUExfT05fUE9TRURHRV9NKTsKKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTQ0xLQ1RMKSA9IHVpMzJSZWcgfCB1aTMyQ2xrQ29uZmlnOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFR1cm4gcG93ZXIgb24gaW4gcG93ZXIgZG9tYWlucyBpbiB0aGUgTUNVIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01Qb3dlckRvbWFpbk9uKHVpbnQzMl90IHVpMzJEb21haW5zKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9SRkNPUkUpIHx8CisgICAgICAgICAgICh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1NFUklBTCkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUEVSSVBIKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9DUFUpIHx8CisgICAgICAgICAgICh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1ZJTVMpKTsKKworICAgIC8vCisgICAgLy8gQXNzZXJ0IHRoZSByZXF1ZXN0IHRvIHBvd2VyIG9uIHRoZSByaWdodCBkb21haW5zLgorICAgIC8vCisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9SRkNPUkUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKworICAgICAgICAgICAgICBQUkNNX09fUERDVEwwUkZDKSB8PSBQUkNNX1BEQ1RMMFJGQ19PTjsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1BEQ1RMMVJGQykgfD0gUFJDTV9QRENUTDFSRkNfT047CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fU0VSSUFMKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsKKyAgICAgICAgICAgICAgUFJDTV9PX1BEQ1RMMFNFUklBTCkgfD0gUFJDTV9QRENUTDBTRVJJQUxfT047CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUEVSSVBIKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsKKyAgICAgICAgICAgICAgUFJDTV9PX1BEQ1RMMFBFUklQSCkgfD0gUFJDTV9QRENUTDBQRVJJUEhfT047CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDFWSU1TKSB8PQorICAgICAgICAgICAgUFJDTV9QRENUTDFWSU1TX09OOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX0NQVSkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDFDUFUpIHw9IFBSQ01fUERDVEwxQ1BVX09OOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUdXJuIG9mZiBhIHNwZWNpZmljIHBvd2VyIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01Qb3dlckRvbWFpbk9mZih1aW50MzJfdCB1aTMyRG9tYWlucykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUkZDT1JFKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9TRVJJQUwpIHx8CisgICAgICAgICAgICh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1BFUklQSCkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fQ1BVKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9WSU1TKSk7CisKKyAgICAvLworICAgIC8vIEFzc2VydCB0aGUgcmVxdWVzdCB0byBwb3dlciBvZmYgdGhlIHJpZ2h0IGRvbWFpbnMuCisgICAgLy8KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArCisgICAgICAgICAgICAgIFBSQ01fT19QRENUTDBSRkMpICY9IH5QUkNNX1BEQ1RMMFJGQ19PTjsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1BEQ1RMMVJGQykgJj0gflBSQ01fUERDVEwxUkZDX09OOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1NFUklBTCkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArCisgICAgICAgICAgICAgIFBSQ01fT19QRENUTDBTRVJJQUwpICY9IH5QUkNNX1BEQ1RMMFNFUklBTF9PTjsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9QRVJJUEgpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKworICAgICAgICAgICAgICBQUkNNX09fUERDVEwwUEVSSVBIKSAmPSB+UFJDTV9QRENUTDBQRVJJUEhfT047CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDFWSU1TKSAmPQorICAgICAgICAgICAgflBSQ01fUERDVEwxVklNU19PTjsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9DUFUpCisgICAgeworICAgICAgICBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUERDVEwxQ1BVKSAmPSB+UFJDTV9QRENUTDFDUFVfT047CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZXMgYSBwZXJpcGhlcmFsIGluIFJ1biBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFBSQ01QZXJpcGhlcmFsVmFsaWQodWkzMlBlcmlwaGVyYWwpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIG1vZHVsZSBpbiBSdW4gTW9kZS4KKyAgICAvLworICAgIEhXUkVHKFBSQ01fQkFTRSArIGdfcHVpMzJSQ0dDUmVnc1tQUkNNX1BFUklQSF9JTkRFWCh1aTMyUGVyaXBoZXJhbCldKSB8PQorICAgICAgICBQUkNNX1BFUklQSF9NQVNLQklUKHVpMzJQZXJpcGhlcmFsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlcyBhIHBlcmlwaGVyYWwgaW4gUnVuIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNUGVyaXBoZXJhbFJ1bkRpc2FibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFBSQ01QZXJpcGhlcmFsVmFsaWQodWkzMlBlcmlwaGVyYWwpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSBtb2R1bGUgaW4gUnVuIE1vZGUuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBnX3B1aTMyUkNHQ1JlZ3NbUFJDTV9QRVJJUEhfSU5ERVgodWkzMlBlcmlwaGVyYWwpXSkgJj0KKyAgICAgICAgflBSQ01fUEVSSVBIX01BU0tCSVQodWkzMlBlcmlwaGVyYWwpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZXMgYSBwZXJpcGhlcmFsIGluIHNsZWVwIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitQUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChQUkNNUGVyaXBoZXJhbFZhbGlkKHVpMzJQZXJpcGhlcmFsKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGlzIHBlcmlwaGVyYWwgaW4gc2xlZXAgbW9kZS4KKyAgICAvLworICAgIEhXUkVHKFBSQ01fQkFTRSArIGdfcHVpMzJTQ0dDUmVnc1tQUkNNX1BFUklQSF9JTkRFWCh1aTMyUGVyaXBoZXJhbCldKSB8PQorICAgICAgICBQUkNNX1BFUklQSF9NQVNLQklUKHVpMzJQZXJpcGhlcmFsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlcyBhIHBlcmlwaGVyYWwgaW4gc2xlZXAgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChQUkNNUGVyaXBoZXJhbFZhbGlkKHVpMzJQZXJpcGhlcmFsKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhpcyBwZXJpcGhlcmFsIGluIHNsZWVwIG1vZGUKKyAgICAvLworICAgIEhXUkVHKFBSQ01fQkFTRSArIGdfcHVpMzJTQ0dDUmVnc1tQUkNNX1BFUklQSF9JTkRFWCh1aTMyUGVyaXBoZXJhbCldKSAmPQorICAgICAgICB+UFJDTV9QRVJJUEhfTUFTS0JJVCh1aTMyUGVyaXBoZXJhbCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRW5hYmxlcyBhIHBlcmlwaGVyYWwgaW4gZGVlcC1zbGVlcCBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFBSQ01QZXJpcGhlcmFsVmFsaWQodWkzMlBlcmlwaGVyYWwpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoaXMgcGVyaXBoZXJhbCBpbiBkZWVwLXNsZWVwIG1vZGUuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBnX3B1aTMyRENHQ1JlZ3NbUFJDTV9QRVJJUEhfSU5ERVgodWkzMlBlcmlwaGVyYWwpXSkgfD0KKyAgICAgICAgUFJDTV9QRVJJUEhfTUFTS0JJVCh1aTMyUGVyaXBoZXJhbCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgYSBwZXJpcGhlcmFsIGluIGRlZXAtc2xlZXAgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoUFJDTVBlcmlwaGVyYWxWYWxpZCh1aTMyUGVyaXBoZXJhbCkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoaXMgcGVyaXBoZXJhbCBpbiBEZWVwIFNsZWVwIG1vZGUuCisgICAgLy8KKyAgICBIV1JFRyhQUkNNX0JBU0UgKyBnX3B1aTMyRENHQ1JlZ3NbUFJDTV9QRVJJUEhfSU5ERVgodWkzMlBlcmlwaGVyYWwpXSkgJj0KKyAgICAgICAgflBSQ01fUEVSSVBIX01BU0tCSVQodWkzMlBlcmlwaGVyYWwpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCB0aGUgc3RhdHVzIGZvciBhIHNwZWNpZmljIHBvd2VyIGRvbWFpbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitQUkNNUG93ZXJEb21haW5TdGF0dXModWludDMyX3QgdWkzMkRvbWFpbnMpCit7CisgICAgYm9vbCBiU3RhdHVzOworICAgIHVpbnQzMl90IHVpMzJTdGF0dXNSZWdpc3RlcjA7CisgICAgdWludDMyX3QgdWkzMlN0YXR1c1JlZ2lzdGVyMTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMkRvbWFpbnMgJiAoUFJDTV9ET01BSU5fUkZDT1JFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQ01fRE9NQUlOX1NFUklBTCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkNNX0RPTUFJTl9QRVJJUEgpKSk7CisKKyAgICBiU3RhdHVzID0gdHJ1ZTsKKyAgICB1aTMyU3RhdHVzUmVnaXN0ZXIwID0gSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1BEU1RBVDApOworICAgIHVpMzJTdGF0dXNSZWdpc3RlcjEgPSBIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUERTVEFUMSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY29ycmVjdCBwb3dlciBzdGF0dXMuCisgICAgLy8KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkKKyAgICB7CisgICAgICAgYlN0YXR1cyA9IGJTdGF0dXMgJiYKKyAgICAgICAgICAgICAgICAgKCh1aTMyU3RhdHVzUmVnaXN0ZXIwICYgUFJDTV9QRFNUQVQwX1JGQ19PTikgfHwKKyAgICAgICAgICAgICAgICAgICh1aTMyU3RhdHVzUmVnaXN0ZXIxICYgUFJDTV9QRFNUQVQxX1JGQ19PTikpOworICAgIH0KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1NFUklBTCkKKyAgICB7CisgICAgICAgIGJTdGF0dXMgPSBiU3RhdHVzICYmICh1aTMyU3RhdHVzUmVnaXN0ZXIwICYgUFJDTV9QRFNUQVQwX1NFUklBTF9PTik7CisgICAgfQorICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUEVSSVBIKQorICAgIHsKKyAgICAgICAgYlN0YXR1cyA9IGJTdGF0dXMgJiYgKHVpMzJTdGF0dXNSZWdpc3RlcjAgJiBQUkNNX1BEU1RBVDBfUEVSSVBIX09OKTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgc3RhdHVzLgorICAgIC8vCisgICAgcmV0dXJuIChiU3RhdHVzID8gUFJDTV9ET01BSU5fUE9XRVJfT04gOiBQUkNNX0RPTUFJTl9QT1dFUl9PRkYpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFB1dCB0aGUgcHJvY2Vzc29yIGludG8gZGVlcC1zbGVlcCBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUFJDTURlZXBTbGVlcCh2b2lkKQoreworICAgIC8vCisgICAgLy8gRW5hYmxlIGRlZXAtc2xlZXAuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NZU19DVFJMKSB8PSBOVklDX1NZU19DVFJMX1NMRUVQREVFUDsKKworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgYW4gaW50ZXJydXB0LgorICAgIC8vCisgICAgQ1BVd2ZpKCk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgZGVlcC1zbGVlcCBzbyB0aGF0IGEgZnV0dXJlIHNsZWVwIHdpbGwgd29yayBjb3JyZWN0bHkuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NZU19DVFJMKSAmPSB+KE5WSUNfU1lTX0NUUkxfU0xFRVBERUVQKTsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ByY20uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ByY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk5NDM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHJjbS5oCkBAIC0wLDAgKzEsMTIxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHByY20uaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMjMgMTQ6NTY6NDcgKzAyMDAgKE1vbiwgMjMgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY0MzkKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgUFJDTQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgcHJjbV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1BSQ01fSF9fCisjZGVmaW5lIF9fUFJDTV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19wcmNtLmg+CisjaW5jbHVkZSA8aW5jL2h3X252aWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3J0Yy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldCAgICAgICAgTk9ST01fUFJDTUluZkNsb2NrQ29uZmlndXJlU2V0CisgICAgI2RlZmluZSBQUkNNSW5mQ2xvY2tDb25maWd1cmVHZXQgICAgICAgIE5PUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZUdldAorICAgICNkZWZpbmUgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQgICAgICAgICBOT1JPTV9QUkNNQXVkaW9DbG9ja0NvbmZpZ1NldAorICAgICNkZWZpbmUgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZSBOT1JPTV9QUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlCisgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5PbiAgICAgICAgICAgICAgIE5PUk9NX1BSQ01Qb3dlckRvbWFpbk9uCisgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5PZmYgICAgICAgICAgICAgIE5PUk9NX1BSQ01Qb3dlckRvbWFpbk9mZgorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUgICAgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlICAgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFJ1bkRpc2FibGUKKyAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUgICAgICAgTk9ST01fUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUgICAgICBOT1JPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUgICBOT1JPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZQorICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlICBOT1JPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUKKyAgICAjZGVmaW5lIFBSQ01Qb3dlckRvbWFpblN0YXR1cyAgICAgICAgICAgTk9ST01fUFJDTVBvd2VyRG9tYWluU3RhdHVzCisgICAgI2RlZmluZSBQUkNNRGVlcFNsZWVwICAgICAgICAgICAgICAgICAgIE5PUk9NX1BSQ01EZWVwU2xlZXAKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGRpZmZlcmVudCBTeXN0ZW0gQ1BVIHBvd2VyIG1vZGVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFJDTV9SVU5fTU9ERSAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1NMRUVQX01PREUgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fREVFUF9TTEVFUF9NT0RFICAgIDB4MDAwMDAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgdXNlZCBmb3Igc2V0dGluZyB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9ycworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfMSAgICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMQorI2RlZmluZSBQUkNNX0NMT0NLX0RJVl8yICAgICAgICBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYyCisjZGVmaW5lIFBSQ01fQ0xPQ0tfRElWXzQgICAgICAgIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjQKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfOCAgICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWOAorI2RlZmluZSBQUkNNX0NMT0NLX0RJVl8xNiAgICAgICBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYxNgorI2RlZmluZSBQUkNNX0NMT0NLX0RJVl8zMiAgICAgICBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYzMgorI2RlZmluZSBQUkNNX0NMT0NLX0RJVl82NCAgICAgICBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVY2NAorI2RlZmluZSBQUkNNX0NMT0NLX0RJVl8xMjggICAgICBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYxMjgKKyNkZWZpbmUgUFJDTV9DTE9DS19ESVZfMjU2ICAgICAgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMjU2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIHVzZWQgZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgZG9tYWlucyBhbmQgbWVtb3JpZXMgaW4gdGhlIE1DVQorLy8gZG9tYWluCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQUkNNX0RPTUFJTl9SRkNPUkUgICAgICAweDAwMDAwMDAxICAvLyBSRiBDb3JlIGRvbWFpbiBJRCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvY2svcG93ZXIgY29udHJvbC4KKyNkZWZpbmUgUFJDTV9ET01BSU5fU0VSSUFMICAgICAgMHgwMDAwMDAwMiAgLy8gU2VyaWFsIGRvbWFpbiBJRCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvY2svcG93ZXIgY29udHJvbC4KKyNkZWZpbmUgUFJDTV9ET01BSU5fUEVSSVBIICAgICAgMHgwMDAwMDAwNCAgLy8gUGVyaXBoZXJhbCBkb21haW4gSUQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrL3Bvd2VyIGNvbnRyb2wuCisjZGVmaW5lIFBSQ01fRE9NQUlOX1NZU0JVUyAgICAgIDB4MDAwMDAwMDggIC8vIEJ1cyBkb21haW4gSUQgZm9yIGNsb2NrL3Bvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2wuCisjZGVmaW5lIFBSQ01fRE9NQUlOX1ZJTVMgICAgICAgIDB4MDAwMDAwMTAgIC8vIFZJTVMgZG9tYWluIElEIGZvciBjbG9jay9wb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sLgorI2RlZmluZSBQUkNNX0RPTUFJTl9DUFUgICAgICAgICAweDAwMDAwMDIwICAvLyBDUFUgZG9tYWluIElEIGZvciBjbG9jay9wb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sLgorI2RlZmluZSBQUkNNX0RPTUFJTl9USU1FUiAgICAgICAweDAwMDAwMDQwICAvLyBHUFQgZG9tYWluIElEIGZvciBjbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sLgorI2RlZmluZSBQUkNNX0RPTUFJTl9DTEtDVFJMICAgICAweDAwMDAwMDgwICAvLyBDbG9jayBDb250cm9sIGRvbWFpbiBJRCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvY2svcG93ZXIgY29udHJvbC4KKyNkZWZpbmUgUFJDTV9ET01BSU5fTUNVICAgICAgICAgMHgwMDAwMDEwMCAgLy8gUmVzZXQgY29udHJvbCBmb3IgZW50aXJlIE1DVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb21haW4uCisjZGVmaW5lIFBSQ01fRE9NQUlOX1BPV0VSX09GRiAgIDB4MDAwMDAwMDIgIC8vIFRoZSBkb21haW4gaXMgcG93ZXJlZCBvZmYKKyNkZWZpbmUgUFJDTV9ET01BSU5fUE9XRVJfT04gICAgMHgwMDAwMDAwMSAgLy8gVGhlIGRvbWFpbiBpcyBwb3dlcmVkIG9uCisjZGVmaW5lIFBSQ01fRE9NQUlOX1BPV0VSX0RPV05fUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFRoZSBkb21haW4gaXMgcmVhZHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG93ZXJlZCBkb3duLgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3Igc2V0dGluZyB1cCB0aGUgYXVkaW8gaW50ZXJmYWNlIGluIHRoZSBJMlMgbW9kdWxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUFJDTV9XQ0xLX05FR19FREdFICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUkNNX1dDTEtfUE9TX0VER0UgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFBSQ01fV0NMS19TSU5HTEVfUEhBU0UgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUFJDTV9XQ0xLX0RVQUxfUEhBU0UgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1dDTEtfVVNFUl9ERUYgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgSTJTX1NBTVBMRV9SQVRFXzE2SyAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfU0FNUExFX1JBVEVfMjRLICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19TQU1QTEVfUkFURV8zMksgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX1NBTVBMRV9SQVRFXzQ4SyAgICAgMHgwMDAwMDAwOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyB1c2VkIGZvciBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHBlcmlwaGVyYWwgbW9kdWxlcyBpbiB0aGUgTUNVCisvLyBkb21haW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFBSQ01fUEVSSVBIX1RJTUVSMCAgICAgIDB4MDAwMDAwMDAgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIEdQVCBtb2R1bGUgMAorI2RlZmluZSBQUkNNX1BFUklQSF9USU1FUjEgICAgICAweDAwMDAwMDAxICAvLyBQZXJpcGhlcmFsIElEIGZvciBHUFQgbW9kdWxlIDEKKyNkZWZpbmUgUFJDTV9QRVJJUEhfVElNRVIyICAgICAgMHgwMDAwMDAwMiAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgR1BUIG1vZHVsZSAyCisjZGVmaW5lIFBSQ01fUEVSSVBIX1RJTUVSMyAgICAgIDB4MDAwMDAwMDMgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIEdQVCBtb2R1bGUgMworI2RlZmluZSBQUkNNX1BFUklQSF9TU0kwICAgICAgICAweDAwMDAwMTAwICAvLyBQZXJpcGhlcmFsIElEIGZvciBTU0kgbW9kdWxlIDAKKyNkZWZpbmUgUFJDTV9QRVJJUEhfU1NJMSAgICAgICAgMHgwMDAwMDEwMSAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgU1NJIG1vZHVsZSAxCisjZGVmaW5lIFBSQ01fUEVSSVBIX1VBUlQwICAgICAgIDB4MDAwMDAyMDAgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIFVBUlQgbW9kdWxlIDAKKyNkZWZpbmUgUFJDTV9QRVJJUEhfVUFSVDEgICAgICAgMHgwMDAwMDIwMSAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgVUFSVCBtb2R1bGUgMQorI2RlZmluZSBQUkNNX1BFUklQSF9JMkMwICAgICAgICAweDAwMDAwMzAwICAvLyBQZXJpcGhlcmFsIElEIGZvciBJMkMgbW9kdWxlIDAKKyNkZWZpbmUgUFJDTV9QRVJJUEhfSTJDMSAgICAgICAgMHgwMDAwMDMwMSAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgSTJDIG1vZHVsZSAxCisjZGVmaW5lIFBSQ01fUEVSSVBIX0NSWVBUTyAgICAgIDB4MDAwMDA0MDAgIC8vIFBlcmlwaGVyYWwgSUQgZm9yIENSWVBUTyBtb2R1bGUKKyNkZWZpbmUgUFJDTV9QRVJJUEhfVFJORyAgICAgICAgMHgwMDAwMDQwMSAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgVFJORyBtb2R1bGUKKyNkZWZpbmUgUFJDTV9QRVJJUEhfVURNQSAgICAgICAgMHgwMDAwMDQwOCAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgVURNQSBtb2R1bGUKKyNkZWZpbmUgUFJDTV9QRVJJUEhfR1BJTyAgICAgICAgMHgwMDAwMDUwMCAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgR1BJTyBtb2R1bGUKKyNkZWZpbmUgUFJDTV9QRVJJUEhfSTJTICAgICAgICAgMHgwMDAwMDYwMCAgLy8gUGVyaXBoZXJhbCBJRCBmb3IgSTJTIG1vZHVsZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2tzIGEgcGVyaXBoZXJhbCBpZGVudGlmaWVyLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgcGVyaXBoZXJhbCBpZGVudGlmaWVyIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpcGhlcmFsIGlzIHRoZSBwZXJpcGhlcmFsIGlkZW50aWZpZXIuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHBlcmlwaGVyYWwgaWRlbnRpZmllcjoKKy8vISAtIFxiIHRydWUgIDogUGVyaXBoZXJhbCBpZGVudGlmaWVyIGlzIHZhbGlkLgorLy8hIC0gXGIgZmFsc2UgOiBQZXJpcGhlcmFsIGlkZW50aWZpZXIgaXMgaW52YWxpZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorUFJDTVBlcmlwaGVyYWxWYWxpZCh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkKK3sKKyAgICByZXR1cm4oKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1RJTUVSMCkgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfVElNRVIxKSAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9USU1FUjIpICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1RJTUVSMykgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfU1NJMCkgICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9TU0kxKSAgICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX1VBUlQwKSAgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfVUFSVDEpICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9JMkMwKSAgICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX0kyQzEpICAgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfVURNQSkgICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9UUk5HKSAgICAgfHwKKyAgICAgICAgICAgKHVpMzJQZXJpcGhlcmFsID09IFBSQ01fUEVSSVBIX0NSWVBUTykgICB8fAorICAgICAgICAgICAodWkzMlBlcmlwaGVyYWwgPT0gUFJDTV9QRVJJUEhfR1BJTykgICAgIHx8CisgICAgICAgICAgICh1aTMyUGVyaXBoZXJhbCA9PSBQUkNNX1BFUklQSF9JMlMpKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIGluZnJhc3RydWN0dXJlIGNsb2NrLgorLy8hCisvLyEgRWFjaCBTeXN0ZW0gQ1BVIHBvd2VyIG1vZGUgaGFzIGl0cyBvd24gaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgZGl2aXNpb24gZmFjdG9yLiBUaGlzCisvLyEgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIHNldHRpbmcgdXAgdGhlIGRpdmlzaW9uIGZhY3RvciBmb3IgdGhlCisvLyEgaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgaW4gdGhlIGF2YWlsYWJsZSBwb3dlciBtb2RlcyBmb3IgdGhlIFN5c3RlbSBDUFUuIFRoZQorLy8hIGluZnJhc3RydWN0dXJlIGNsb2NrIGlzIHVzZWQgZm9yIGFsbCBpbnRlcm5hbCBsb2dpYyBpbiB0aGUgUFJDTSwgYW5kIGlzCisvLyEgYWx3YXlzIHJ1bm5pbmcgYXMgbG9uZyBhcyBwb3dlciBpcyBvbiBpbiB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluLgorLy8hIFRoaXMgY2FuIGJlIGVuYWJsZWQgYW5kIGRpc2FibGVkIGZyb20gdGhlIEFPTiBXYWtlIFVwIENvbnRyb2xsZXIuCisvLyEKKy8vISBcbm90ZSBJZiBzb3VyY2UgY2xvY2sgaXMgNDggTUh6LCBtaW5pbXVtIGNsb2NrIGRpdmlkZXIgaXMgXHJlZiBQUkNNX0NMT0NLX0RJVl8yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJDbGtEaXYgZGV0ZXJtaW5lcyB0aGUgZGl2aXNpb24gcmF0aW8gZm9yIHRoZSBpbmZyYXN0cnVjdHVyZQorLy8hIGNsb2NrIHdoZW4gdGhlIGRldmljZSBpcyBpbiB0aGUgc3BlY2lmaWVkIG1vZGUuCisvLyEgQWxsb3dlZCBkaXZpc2lvbiBmYWN0b3JzIGZvciBhbGwgdGhyZWUgU3lzdGVtIENQVSBwb3dlciBtb2RlcyBhcmU6CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzEKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl84CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzMyCisvLyEgXHBhcmFtIHVpMzJQb3dlck1vZGUgZGV0ZXJtaW5lcyB0aGUgU3lzdGVtIENQVSBvcGVyYXRpb24gbW9kZSBmb3Igd2hpY2ggdG8KKy8vISBtb2RpZnkgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3Rvci4KKy8vISBUaGUgdGhyZWUgYWxsb3dlZCBwb3dlciBtb2RlcyBhcmU6CisvLyEgLSBccmVmIFBSQ01fUlVOX01PREUKKy8vISAtIFxyZWYgUFJDTV9TTEVFUF9NT0RFCisvLyEgLSBccmVmIFBSQ01fREVFUF9TTEVFUF9NT0RFCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQodWludDMyX3QgdWkzMkNsa0RpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyUG93ZXJNb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbmZyYXN0cnVjdHVyZSBjbG9jayBjb25maWd1cmF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQb3dlck1vZGUgZGV0ZXJtaW5lcyB3aGljaCBTeXN0ZW0gQ1BVIHBvd2VyIG1vZGUgdG8gcmV0dXJuIHRoZQorLy8hIGluZnJhc3RydWN0dXJlIGNsb2NrIGRpdmlzaW9uIHJhdGlvIGZvci4KKy8vISBUaGUgdGhyZWUgYWxsb3dlZCBwb3dlciBtb2RlcyBhcmU6CisvLyEgLSBccmVmIFBSQ01fUlVOX01PREUKKy8vISAtIFxyZWYgUFJDTV9TTEVFUF9NT0RFCisvLyEgLSBccmVmIFBSQ01fREVFUF9TTEVFUF9NT0RFCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGluZnJhc3RydWN0dXJlIGNsb2NrIGRpdmlzaW9uIGZhY3RvciBmb3IgdGhlIHNwZWNpZmllZAorLy8hIHBvd2VyIG1vZGUuCisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzEKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl84CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzMyCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNSW5mQ2xvY2tDb25maWd1cmVTZXQoKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0KHVpbnQzMl90IHVpMzJQb3dlck1vZGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXF1ZXN0IGEgcG93ZXIgb2ZmIG9mIHRoZSBNQ1Ugdm9sdGFnZSBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXF1ZXN0IGEgcG93ZXIgb2ZmIG9mIHRoZSBlbnRpcmUgTUNVIHZvbHRhZ2UgZG9tYWluLgorLy8hIFRoaXMgcmVxdWVzdCB3aWxsIGhhdmUgbm8gYWZmZWN0IHVudGlsIGRlZXBzbGVlcCBtb2RlIGlzIHJlcXVlc3RlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTURlZXBTbGVlcCgpLCBccmVmIFBSQ01NY3VQb3dlck9mZkNhbmNlbCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01NY3VQb3dlck9mZih2b2lkKQoreworICAgIC8vCisgICAgLy8gQXNzZXJ0IHRoZSBwb3dlciBvZmYgcmVxdWVzdCBzaWduYWwuCisgICAgLy8KKyAgICBIV1JFR0JJVFcoUFJDTV9CQVNFICsgUFJDTV9PX1ZEQ1RMLCBQUkNNX1ZEQ1RMX01DVV9WRF9CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENhbmNlbCBhIHJlcXVlc3QgZm9yIGEgcG93ZXIgb2ZmIG9mIHRoZSBNQ1Ugdm9sdGFnZSBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYW5jZWwgYSByZXF1ZXN0IGZvciBwb3dlciBvZmYgb2YgdGhlIGVudGlyZSBNQ1UKKy8vISB2b2x0YWdlIGRvbWFpbi4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBpZiBhIHRyYW5zaXRpb24gdG8gcG93ZXIgZG93biBpcworLy8hIHJlZ3JldHRlZCBhbmQgYW4gYXBwbGljYXRpb24gbXVzdCBiYWNrdHJhY2suCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFBSQ01EZWVwU2xlZXAoKSwgXHJlZiBQUkNNTWN1UG93ZXJPZmYoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNTWN1UG93ZXJPZmZDYW5jZWwodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEFzc2VydCB0aGUgcG93ZXIgb2ZmIHJlcXVlc3Qgc2lnbmFsLgorICAgIC8vCisgICAgSFdSRUdCSVRXKFBSQ01fQkFTRSArIFBSQ01fT19WRENUTCwgUFJDTV9WRENUTF9NQ1VfVkRfQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBc3NlcnQgb3IgZGUtYXNzZXJ0IGEgcmVxdWVzdCBmb3IgdGhlIHVMRE8uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXF1ZXN0IHRvIHN3aXRjaCB0byB0aGUgbWljcm8gTG93IFZvbHRhZ2UgRHJvcG91dAorLy8hIHJlZ3VsYXRvciAodUxETykuIFRoZSB1TERPIGhhcyBhIG11Y2ggbG93ZXIgY2FwYWNpdHkgZm9yIHN1cHBseWluZyBwb3dlcgorLy8hIHRvIHRoZSBzeXN0ZW0uIEl0IGlzIHRoZXJlZm9yZSBpbXBlcmF0aXZlIGFuZCBzb2xlbHkgdGhlIHByb2dyYW1tZXJzCisvLyEgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgYSBzdWZmaWNpZW50IGFtb3VudCBvZiBwZXJpcGhlcmFsIG1vZHVsZXMKKy8vISBoYXZlIGJlZW4gdHVybmVkIG9mIGJlZm9yZSByZXF1ZXN0aW5nIGEgc3dpdGNoIHRvIHRoZSB1TERPLgorLy8hCisvLyEgXG5vdGUgQXNzZXJ0aW5nIHRoaXMgYml0IGhhcyBubyBlZmZlY3QgdW50aWw6CisvLyEgMS4gRkxBU0ggaGFzIGFjY2VwdGVkIHRvIGJlIHBvd2VyZWQgZG93bgorLy8hIDIuIERlZXBzbGVlcCBtdXN0IGJlIGFzc2VydGVkCisvLyEKKy8vISBccGFyYW0gdWkzMkVuYWJsZQorLy8hIC0gMCA6IERpc2FibGUgdUxETyByZXF1ZXN0CisvLyEgLSAxIDogRW5hYmxlIHVMRE8gcmVxdWVzdAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNRGVlcFNsZWVwKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTU1jdVVsZG9Db25maWd1cmUodWludDMyX3QgdWkzMkVuYWJsZSkKK3sKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdUxETyByZXF1ZXN0IHNpZ25hbC4KKyAgICBIV1JFR0JJVFcoUFJDTV9CQVNFICsgUFJDTV9PX1ZEQ1RMLCBQUkNNX1ZEQ1RMX1VMRE9fQklUTikgPSB1aTMyRW5hYmxlOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXR1cCB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9yIGZvciB0aGUgR1AtVGltZXIgZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSBjbG9jayBkaXZpc2lvbiBmYWN0b3Igb24gdGhlIEdQLVRpbWVyLgorLy8hCisvLyEgVGhlIGRpdmlzaW9uIHJhdGUgd2lsbCBiZSBjb25zdGFudCBhbmQgdW5nYXRlZCBmb3IgUnVuIC8gU2xlZXAgLyBEZWVwU2xlZXAgbW9kZSB3aGVuCisvLyEgaXQgaXMgc2xvd2VyIHRoYW4gUFJDTV9HUFRDTEtESVZfUkFUSU8gc2V0dGluZy4KKy8vISBXaGVuIHNldCBmYXN0ZXIgdGhhbiBQUkNNX0dQVENMS0RJVl9SQVRJTyBzZXR0aW5nIFBSQ01fR1BUQ0xLRElWX1JBVElPIHdpbGwgYmUgdXNlZC4KKy8vISBOb3RlIHRoYXQgdGhlIHJlZ2lzdGVyIHdpbGwgY29udGFpbiB0aGUgd3JpdHRlbiBjb250ZW50IGV2ZW4gdGhvdWdoIHRoZSBzZXR0aW5nIGlzCisvLyEgZmFzdGVyIHRoYW4gUFJDTV9HUFRDTEtESVZfUkFUSU8gc2V0dGluZy4KKy8vIQorLy8hIFxub3RlIEZvciBjaGFuZ2UgdG8gdGFrZSBlZmZlY3QsIFxyZWYgUFJDTUxvYWRTZXQoKSBuZWVkcyB0byBiZSBjYWxsZWQKKy8vIQorLy8hIFxwYXJhbSBjbGtEaXYgaXMgdGhlIGRpdmlzaW9uIGZhY3RvciB0byBzZXQuCisvLyEgVGhlIGFyZ3VtZW50IG11c3QgYmUgb25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzEKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl80CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzgKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMTYKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMzIKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfNjQKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMTI4CisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzI1NgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNR1BUaW1lckNsb2NrRGl2aXNpb25HZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNR1BUaW1lckNsb2NrRGl2aXNpb25TZXQoIHVpbnQzMl90IGNsa0RpdiApCit7CisgICAgQVNTRVJUKCBjbGtEaXYgPD0gUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMjU2ICk7CisKKyAgICBIV1JFRyggUFJDTV9CQVNFICsgUFJDTV9PX0dQVENMS0RJViApID0gY2xrRGl2OworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIGNsb2NrIGRpdmlzaW9uIGZhY3RvciBmb3IgdGhlIEdQLVRpbWVyIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvY2sgZGl2aXNpb24gZmFjdG9yIHNldCBmb3IgdGhlIEdQLVRpbWVyLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMQorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8yCisvLyEgLSBccmVmIFBSQ01fQ0xPQ0tfRElWXzQKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfOAorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8xNgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8zMgorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl82NAorLy8hIC0gXHJlZiBQUkNNX0NMT0NLX0RJVl8xMjgKKy8vISAtIFxyZWYgUFJDTV9DTE9DS19ESVZfMjU2CisvLyEKKy8vISBcc2EgXHJlZiBQUkNNR1BUaW1lckNsb2NrRGl2aXNpb25TZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorUFJDTUdQVGltZXJDbG9ja0RpdmlzaW9uR2V0KCB2b2lkICkKK3sKKyAgICByZXR1cm4gKCBIV1JFRyggUFJDTV9CQVNFICsgUFJDTV9PX0dQVENMS0RJViApKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTUF1ZGlvQ2xvY2tFbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbmFibGUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24uCisgICAgSFdSRUdCSVRXKFBSQ01fQkFTRSArIFBSQ01fT19JMlNDTEtDVEwsIFBSQ01fSTJTQ0xLQ1RMX0VOX0JJVE4pID0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSB0aGUgYXVkaW8gY2xvY2sgZ2VuZXJhdGlvbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRpc2FibGUgdGhlIGF1ZGlvIGNsb2NrIGdlbmVyYXRpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTUF1ZGlvQ2xvY2tEaXNhYmxlKHZvaWQpCit7CisgICAgLy8gRGlzYWJsZSB0aGUgYXVkaW8gY2xvY2sgZ2VuZXJhdGlvbgorICAgIEhXUkVHQklUVyhQUkNNX0JBU0UgKyBQUkNNX09fSTJTQ0xLQ1RMLCBQUkNNX0kyU0NMS0NUTF9FTl9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZSB0aGUgYXVkaW8gY2xvY2sgZ2VuZXJhdGlvbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgc2FtcGxlIHJhdGUgd2hlbiB1c2luZyBpbnRlcm5hbCBhdWRpbyBjbG9jaworLy8hIGdlbmVyYXRpb24gZm9yIHRoZSBJMlMgbW9kdWxlLgorLy8hCisvLyEgXG5vdGUgV2hpbGUgb3RoZXIgY2xvY2tzIGFyZSBwb3NzaWJsZSwgdGhlIHN0YWJpbGl0eSBvZiB0aGUgZm91ciBzYW1wbGUKKy8vISByYXRlcyBkZWZpbmVkIGhlcmUgYXJlIG9ubHkgZ3VhcmFudGVlZCBpZiB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIEkyUyBtb2R1bGUKKy8vISBpcyA0OE1Iei4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xrQ29uZmlnIGlzIHRoZSBhdWRpbyBjbG9jayBjb25maWd1cmF0aW9uLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgYSBiaXR3aXNlIE9SJ2VkIHZhbHVlIGNvbnNpc3Rpbmcgb2Y6CisvLyEgLSBQaGFzZQorLy8hICAgLSBccmVmIFBSQ01fV0NMS19TSU5HTEVfUEhBU0UKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfRFVBTF9QSEFTRQorLy8hIC0gQ2xvY2sgcG9sYXJpdHkKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfTkVHX0VER0UKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfUE9TX0VER0UKKy8vISBccGFyYW0gdWkzMlNhbXBsZVJhdGUgaXMgdGhlIGRlc2lyZWQgYXVkaW8gY2xvY2sgc2FtcGxlIHJhdGUuCisvLyEgVGhlIHN1cHBvcnRlZCBzYW1wbGUgcmF0ZSBjb25maWd1cmF0aW9ucyBhcmU6CisvLyEgLSBccmVmIEkyU19TQU1QTEVfUkFURV8xNksKKy8vISAtIFxyZWYgSTJTX1NBTVBMRV9SQVRFXzI0SworLy8hIC0gXHJlZiBJMlNfU0FNUExFX1JBVEVfMzJLCisvLyEgLSBccmVmIEkyU19TQU1QTEVfUkFURV80OEsKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQodWludDMyX3QgdWkzMkNsa0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJTYW1wbGVSYXRlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlIHRoZSBhdWRpbyBjbG9jayBnZW5lcmF0aW9uIHdpdGggbWFudWFsIHNldHRpbmcgb2YgY2xvY2sgZGl2aWRlci4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgYXVkaW8gY2xvY2sgZGl2aWRlciB2YWx1ZXMgbWFudWFsbHkuCisvLyEKKy8vISBcbm90ZSBTZWUgaGFyZHdhcmUgZG9jdW1lbnRhdGlvbiBiZWZvcmUgc2V0dGluZyBhdWRpbyBjbG9jayBkaXZpZGVycyBtYW51YWxseS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQ2xrQ29uZmlnIGlzIHRoZSBhdWRpbyBjbG9jayBjb25maWd1cmF0aW9uLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgYSBiaXR3aXNlIE9SJ2VkIHZhbHVlIGNvbnNpc3Rpbmcgb2Y6CisvLyEgLSBQaGFzZQorLy8hICAgLSBccmVmIFBSQ01fV0NMS19TSU5HTEVfUEhBU0UKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfRFVBTF9QSEFTRQorLy8hIC0gQ2xvY2sgcG9sYXJpdHkKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfTkVHX0VER0UKKy8vISAgIC0gXHJlZiBQUkNNX1dDTEtfUE9TX0VER0UKKy8vISBccGFyYW0gdWkzMk1zdERpdiBpcyB0aGUgZGVzaXJlZCBtYXN0ZXIgY2xvY2sgZGl2aWRlci4KKy8vISBccGFyYW0gdWkzMldvcmREaXYgaXMgdGhlIGRlc2lyZWQgd29yZCBjbG9jayBkaXZpZGVyLgorLy8hIFxwYXJhbSB1aTMyQml0RGl2IGlzIHRoZSBkZXNpcmVkIGJpdCBjbG9jayBkaXZpZGVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZSh1aW50MzJfdCB1aTMyQ2xrQ29uZmlnLCB1aW50MzJfdCB1aTMyTXN0RGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJpdERpdiwgdWludDMyX3QgdWkzMldvcmREaXYpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVc2UgdGhpcyBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSB0aGUgbG9hZCBzZXR0aW5ncy4KKy8vIQorLy8hIE1vc3Qgb2YgdGhlIGNsb2NrIHNldHRpbmdzIGluIHRoZSBQUkNNIG1vZHVsZSBzaG91bGQgYmUgdXBkYXRlZAorLy8hIHN5bmNocm9ub3VzbHkuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBsb2FkIHJlZ2lzdGVycworLy8hIHRoYXQsIHdoZW4gd3JpdHRlbiB0bywgd2lsbCBsZXQgdGhlIHByZXZpb3VzIHdyaXR0ZW4gdXBkYXRlIHZhbHVlcyBmb3IgYWxsCisvLyEgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyBwcm9wYWdhdGUgdGhyb3VnaCB0byBoYXJkd2FyZS4KKy8vIQorLy8hIFRoZSBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIGEgc3luY2hyb25pemF0aW9uIG9mIHRoZSBjbG9jayBzZXR0aW5ncyBhcmU6CisvLyEgLSBccmVmIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0KCkKKy8vISAtIFxyZWYgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZSgpCisvLyEgLSBccmVmIFBSQ01BdWRpb0Nsb2NrRGlzYWJsZSgpCisvLyEgLSBccmVmIFBSQ01Eb21haW5FbmFibGUoKQorLy8hIC0gXHJlZiBQUkNNRG9tYWluRGlzYWJsZSgpCisvLyEgLSBccmVmIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKCkKKy8vISAtIFxyZWYgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUoKQorLy8hIC0gXHJlZiBQUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlKCkKKy8vISAtIFxyZWYgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSgpCisvLyEgLSBccmVmIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKCkKKy8vISAtIFxyZWYgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUoKQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNTG9hZEdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01Mb2FkU2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHVwZGF0ZSBvZiBhbGwgbG9hZCByZWxhdGVkIHJlZ2lzdGVycy4KKyAgICAvLworICAgIEhXUkVHKFBSQ01fTk9OQlVGX0JBU0UgKyBQUkNNX09fQ0xLTE9BRENUTCkgPSBQUkNNX0NMS0xPQURDVExfTE9BRDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2hlY2sgaWYgYW55IG9mIHRoZSBsb2FkIHNlbnNpdGl2ZSByZWdpc3RlciBoYXMgYmVlbiB1cGRhdGVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgbG9hZCBzZW5zaXRpdmUgcmVnaXN0ZXI6CisvLyEgLSBcYyB0cnVlICA6IE5vIHJlZ2lzdGVycyBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgbG9hZC4KKy8vISAtIFxjIGZhbHNlIDogQW55IHJlZ2lzdGVyIGhhcyBjaGFuZ2VkLgorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitQUkNNTG9hZEdldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBsb2FkIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAoKEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19DTEtMT0FEQ1RMKSAmIFBSQ01fQ0xLTE9BRENUTF9MT0FEX0RPTkUpID8KKyAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBjbG9jayBkb21haW5zIGluIHRoZSBNQ1Ugdm9sdGFnZSBkb21haW4uCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXG5vdGUgQ2xvY2tzIHdpbGwgb25seSBiZSBydW5uaW5nIGlmIHRoZSBkb21haW4gaXMgcG93ZXJlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRG9tYWlucyBpcyBhIGJpdCBtYXNrIGNvbnRhaW5pbmcgdGhlIGNsb2NrIGRvbWFpbnMgdG8gZW5hYmxlLgorLy8hIFRoZSBpbmRlcGVuZGVudCBjbG9jayBkb21haW5zIGluc2lkZSB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluIHdoaWNoIGNhbiBiZQorLy8hIGNvbmZpZ3VyZWQgYXJlOgorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9SRkNPUkUKKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fVklNUworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01Eb21haW5FbmFibGUodWludDMyX3QgdWkzMkRvbWFpbnMpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkgfHwKKyAgICAgICAgICAgKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fVklNUykpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIGNsb2NrIGRvbWFpbihzKS4KKyAgICAvLworICAgIGlmKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUkZDT1JFKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1JGQ0NMS0cpID0gUFJDTV9SRkNDTEtHX0NMS19FTjsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9WSU1TKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1ZJTVNDTEtHKSA9IFBSQ01fVklNU0NMS0dfQ0xLX0VOX007CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIGNsb2NrIGRvbWFpbnMgaW4gdGhlIE1DVSB2b2x0YWdlIGRvbWFpbi4KKy8vIQorLy8hIFxub3RlIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzZXR1cCB0aGUgc2hhZG93IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBNQ1UgZG9tYWluIGZvciB0aGUgUFJDTSBtb2R1bGUuIEZvciB0aGUgY2hhbmdlcyB0byBwcm9wYWdhdGUgdG8gdGhlIHN5c3RlbQorLy8hIGNvbnRyb2xsZXIgaW4gdGhlIEFPTiBkb21haW4gYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQorLy8hIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBccmVmIFBSQ01Mb2FkU2V0KCkuCisvLyEKKy8vISBcbm90ZSBDbG9ja3Mgd2lsbCBvbmx5IGJlIHJ1bm5pbmcgaWYgdGhlIGRvbWFpbiBpcyBwb3dlcmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJEb21haW5zIGlzIGEgYml0IG1hc2sgY29udGFpbmluZyB0aGUgY2xvY2sgZG9tYWlucyB0byBkaXNhYmxlLgorLy8hIFRoZSBpbmRlcGVuZGVudCBjbG9jayBkb21haW5zIGluc2lkZSB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluIGFyZToKKy8vISAtIFxyZWYgUFJDTV9ET01BSU5fUkZDT1JFCisvLyEgLSBccmVmIFBSQ01fRE9NQUlOX1ZJTVMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFBSQ01Eb21haW5FbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQUkNNRG9tYWluRGlzYWJsZSh1aW50MzJfdCB1aTMyRG9tYWlucykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJEb21haW5zICYgUFJDTV9ET01BSU5fUkZDT1JFKSB8fAorICAgICAgICAgICAodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9WSU1TKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIHBvd2VyIGRvbWFpbnMuCisgICAgLy8KKyAgICBpZih1aTMyRG9tYWlucyAmIFBSQ01fRE9NQUlOX1JGQ09SRSkKKyAgICB7CisgICAgICAgIEhXUkVHKFBSQ01fQkFTRSArIFBSQ01fT19SRkNDTEtHKSA9IDB4MDsKKyAgICB9CisgICAgaWYodWkzMkRvbWFpbnMgJiBQUkNNX0RPTUFJTl9WSU1TKQorICAgIHsKKyAgICAgICAgSFdSRUcoUFJDTV9CQVNFICsgUFJDTV9PX1ZJTVNDTEtHKSA9IDB4MDsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFR1cm4gcG93ZXIgb24gaW4gcG93ZXIgZG9tYWlucyBpbiB0aGUgTUNVIGRvbWFpbi4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHR1cm4gb24gcG93ZXIgZG9tYWlucyBpbnNpZGUgdGhlIE1DVSB2b2x0YWdlCisvLyEgZG9tYWluLgorLy8hCisvLyEgUG93ZXIgb24gYW5kIHBvd2VyIG9mZiByZXF1ZXN0IGhhcyBkaWZmZXJlbnQgaW1wbGljYXRpb25zIGZvciB0aGUKKy8vISBkaWZmZXJlbnQgcG93ZXIgZG9tYWlucy4KKy8vISAtIFJGIENvcmUgcG93ZXIgZG9tYWluOgorLy8hICAgLSBQb3dlciBPbiA6IERvbWFpbiBpcyBvbiBvciBpbiB0aGUgcHJvY2VzcyBvZiB0dXJuaW5nIG9uLgorLy8hICAgLSBQb3dlciBPZmY6IERvbWFpbiBpcyBwb3dlcmVkIGRvd24gd2hlbiBTeXN0ZW0gQ1BVIGlzIGluIGRlZXAgc2xlZXAuIFRoZSB0aGlyZAorLy8hICAgICAgICAgICAgICAgIG9wdGlvbiBmb3IgdGhlIFJGIENvcmUgaXMgdG8gcG93ZXIgZG93biB3aGVuIHRoZSBpdCBpcyBpZGxlLgorLy8hICAgICAgICAgICAgICAgIFRoaXMgY2FuIGJlIHNldCB1c2luZyBcYiBQUkNNUmZQb3dlckRvd25XaGVuSWRsZSgpCisvLyEgLSBTRVJJQUwgcG93ZXIgZG9tYWluOgorLy8hICAgLSBQb3dlciBvbiA6IERvbWFpbiBpcyBwb3dlcmVkIG9uLgorLy8hICAgLSBQb3dlciBvZmYgOiBEb21haW4gaXMgcG93ZXJlZCBvZmYuCisvLyEgLSBQRVJJUEhFUklBTCBwb3dlciBkb21haW46CisvLyEgICAtIFBvd2VyIG9uIDogRG9tYWluIGlzIHBvd2VyZWQgb24uCisvLyEgICAtIFBvd2VyIG9mZiA6IERvbWFpbiBpcyBwb3dlcmVkIG9mZi4KKy8vISAtIFZJTVMgcG93ZXIgZG9tYWluOgorLy8hICAgLSBQb3dlciBPbjogRG9tYWluIGlzIHBvd2VyZWQgaWYgQnVzIGRvbWFpbiBpcyBwb3dlcmVkLgorLy8hICAgLSBQb3dlciBPZmY6IERvbWFpbiBpcyBvbmx5IHBvd2VyZWQgd2hlbiBDUFUgZG9tYWluIGlzIG9uLgorLy8hIC0gQlVTIHBvd2VyIGRvbWFpbjoKKy8vISAgIC0gUG93ZXIgT246IERvbWFpbiBpcyBvbi4KKy8vISAgIC0gUG93ZXIgT2ZmOiBEb21haW4gaXMgb24gaWYgcmVxdWVzdGVkIGJ5IFJGIENvcmUgb3IgaWYgQ1BVIGRvbWFpbiBpcyBvbi4KKy8vISAtIENQVSBwb3dlciBkb21haW46CisvLyEgICAtIFBvd2VyIE9uOiBEb21haW4gaXMgb24uCisvLyEgICAtIFBvd2VyIE9mZjogRG9tYWluIGlzIHBvd2VyaW5nIGRvd24gaWYgU3lzdGVtIENQVSBpcyBpZGxlLiBUaGlzIHdpbGwgYWxzbworLy8hICAgICAgICAgICAgICAgIGluaXRpYXRlIGEgcG93ZXIgZG93biBvZiB0aGUgU1JBTSBhbmQgQlVTIHBvd2VyIGRvbWFpbnMsIHVubGVzcworLy8hICAgICAgICAgICAgICAgIFJGIENvcmUgaXMgcmVxdWVzdGluZyB0aGVtIHRvIGJlIG9uLgorLy8hCisvLyEgXG5vdGUgQWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gdGhlIHN0YXR1cyBvZiB0aGUgcG93ZXIgZG9tYWluIHNob3VsZAorLy8hIGJlIGNoZWNrZWQgdXNpbmcgZWl0aGVyIFxyZWYgUFJDTVBvd2VyRG9tYWluU3RhdHVzKCkuCisvLyEgQW55IHdyaXRlIG9wZXJhdGlvbiB0byBhIHBvd2VyIGRvbWFpbiB3aGljaCBpcyBzdGlsbCBub3Qgb3BlcmF0aW9uYWwgY2FuCisvLyEgcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkRvbWFpbnMgZGV0ZXJtaW5lcyB3aGljaCBwb3dlciBkb21haW5zIHRvIHR1cm4gb24uCisvLyEgVGhlIGRvbWFpbnMgdGhhdCBjYW4gYmUgdHVybmVkIG9uL29mZiBhcmU6CisvLyEgLSBcYiBQUkNNX0RPTUFJTl9SRkNPUkUgOiBSRiBDb3JlCisvLyEgLSBcYiBQUkNNX0RPTUFJTl9TRVJJQUwgOiBTU0kwLCBVQVJUMCwgSTJDMAorLy8hIC0gXGIgUFJDTV9ET01BSU5fUEVSSVBIIDogR1BUMCwgR1BUMSwgR1BUMiwgR1BUMywgR1BJTywgU1NJMSwgSTJTLAorLy8hICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BLCBVQVJUMSwgSTJDMQorLy8hIC0gXGIgUFJDTV9ET01BSU5fVklNUyAgIDogU1JBTSwgRkxBU0gsIFJPTQorLy8hIC0gXGIgUFJDTV9ET01BSU5fU1lTQlVTCisvLyEgLSBcYiBQUkNNX0RPTUFJTl9DUFUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01Qb3dlckRvbWFpbk9uKHVpbnQzMl90IHVpMzJEb21haW5zKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHVybiBvZmYgYSBzcGVjaWZpYyBwb3dlciBkb21haW4uCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBwb3dlciBkb3duIGRvbWFpbnMgaW5zaWRlIHRoZSBNQ1Ugdm9sdGFnZQorLy8hIGRvbWFpbi4KKy8vIQorLy8hIFxub3RlIEZvciBzcGVjaWZpY3MgcmVnYXJkaW5nIG9uL29mZiBjb25maWd1cmF0aW9uIHBsZWFzZSBzZWUKKy8vISBccmVmIFBSQ01Qb3dlckRvbWFpbk9uKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkRvbWFpbnMgZGV0ZXJtaW5lcyB3aGljaCBkb21haW4gdG8gcmVxdWVzdCBhIHBvd2VyIGRvd24gZm9yLgorLy8hIFRoZSBkb21haW5zIHRoYXQgY2FuIGJlIHR1cm5lZCBvbi9vZmYgYXJlOgorLy8hIC0gXGIgUFJDTV9ET01BSU5fUkZDT1JFIDogUkYgQ29yZQorLy8hIC0gXGIgUFJDTV9ET01BSU5fU0VSSUFMIDogU1NJMCwgVUFSVDAsIEkyQzAKKy8vISAtIFxiIFBSQ01fRE9NQUlOX1BFUklQSCA6IEdQVDAsIEdQVDEsIEdQVDIsIEdQVDMsIEdQSU8sIFNTSTEsIEkyUywKKy8vISAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQSwgVUFSVDEsIEkyQzEKKy8vISAtIFxiIFBSQ01fRE9NQUlOX1ZJTVMgICA6IFNSQU0sIEZMQVNILCBST00KKy8vISAtIFxiIFBSQ01fRE9NQUlOX1NZU0JVUworLy8hIC0gXGIgUFJDTV9ET01BSU5fQ1BVCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQUkNNUG93ZXJEb21haW5PZmYodWludDMyX3QgdWkzMkRvbWFpbnMpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgUkYgY29yZSB0byBwb3dlciBkb3duIHdoZW4gaWRsZS4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgUkYgY29yZSB0byBwb3dlciBkb3duIHdoZW4gSWRsZS4gVGhpcworLy8hIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBpbiBoYXJkd2FyZSBpZiB0aGUgUkYgQ29yZSByZXBvcnRzIHRoYXQgaXQgaXMKKy8vISBpZGxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01SZlBvd2VyRG93bldoZW5JZGxlKHZvaWQpCit7CisgICAgLy8gQ29uZmlndXJlIHRoZSBSRiBwb3dlciBkb21haW4uCisgICAgSFdSRUdCSVRXKFBSQ01fQkFTRSArIFBSQ01fT19QRENUTDBSRkMsIFBSQ01fUERDVEwwUkZDX09OX0JJVE4pID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBhIHBlcmlwaGVyYWwgaW4gUnVuIG1vZGUuCisvLyEKKy8vISBQZXJpcGhlcmFscyBhcmUgZW5hYmxlZCB3aXRoIHRoaXMgZnVuY3Rpb24uICBBdCBwb3dlci11cCwgc29tZSBwZXJpcGhlcmFscworLy8hIGFyZSBkaXNhYmxlZDsgdGhleSBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gb3BlcmF0ZSBvciByZXNwb25kIHRvCisvLyEgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzLgorLy8hCisvLyEgXG5vdGUgVGhlIGFjdHVhbCBlbmFibGluZyBvZiB0aGUgcGVyaXBoZXJhbCBtYXkgYmUgZGVsYXllZCB1bnRpbCBzb21lCisvLyEgdGltZSBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuIENhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IHRoZQorLy8hIHBlcmlwaGVyYWwgaXMgbm90IGFjY2Vzc2VkIHVudGlsIGl0IGlzIGVuYWJsZWQuCisvLyEgV2hlbiBlbmFibGluZyBUaW1lcnMgYWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBkaXZpc2lvbiBmYWN0b3IgZm9yIHRoZQorLy8hIFxiIFBFUkJVU0NQVUNMSyBpcyBzZXQuIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCB0aGUgdGltZXJzIHJ1biBhdCBhCisvLyEgY29udGludW91cyByYXRlIGV2ZW4gaWYgdGhlIFxiIFNZU0JVU0NMSyBpcyBnYXRlZC4KKy8vIQorLy8hIFxub3RlIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzZXR1cCB0aGUgc2hhZG93IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBNQ1UgZG9tYWluIGZvciB0aGUgUFJDTSBtb2R1bGUuIEZvciB0aGUgY2hhbmdlcyB0byBwcm9wYWdhdGUgdG8gdGhlIHN5c3RlbQorLy8hIGNvbnRyb2xsZXIgaW4gdGhlIEFPTiBkb21haW4gYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQorLy8hIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBccmVmIFBSQ01Mb2FkU2V0KCkuCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlwaGVyYWwgaXMgdGhlIHBlcmlwaGVyYWwgdG8gZW5hYmxlLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjIKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIzCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfU1NJMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VQVJUMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VQVJUMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyQzEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfQ1JZUFRPCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RSTkcKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVURNQQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9HUElPCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyUworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNTG9hZFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGVzIGEgcGVyaXBoZXJhbCBpbiBSdW4gbW9kZQorLy8hCisvLyEgUGVyaXBoZXJhbHMgYXJlIGRpc2FibGVkIHdpdGggdGhpcyBmdW5jdGlvbi4gT25jZSBkaXNhYmxlZCwgdGhleSB3aWxsIG5vdAorLy8hIG9wZXJhdGUgb3IgcmVzcG9uZCB0byByZWdpc3RlciByZWFkcy93cml0ZXMuCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXG5vdGUgVGhlIGFjdHVhbCBkaXNhYmxpbmcgb2YgdGhlIHBlcmlwaGVyYWwgbWF5IGJlIGRlbGF5ZWQgdW50aWwgc29tZQorLy8hIHRpbWUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLiBDYXJlIHNob3VsZCBiZSB0YWtlbiBieSB0aGUgdXNlciB0bworLy8hIGVuc3VyZSB0aGF0IHRoZSBwZXJpcGhlcmFsIGlzIG5vdCBhY2Nlc3NlZCBpbiB0aGlzIGludGVydmFsIGFzIHRoaXMgbWlnaHQKKy8vISBjYXVzZSB0aGUgc3lzdGVtIHRvIGhhbmcuCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlwaGVyYWwgaXMgdGhlIHBlcmlwaGVyYWwgdG8gZGlzYWJsZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIyCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0NSWVBUTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9UUk5HCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VETUEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfR1BJTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMlMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01QZXJpcGhlcmFsUnVuRGlzYWJsZSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgYSBwZXJpcGhlcmFsIGluIHNsZWVwIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIHBlcmlwaGVyYWwgdG8gY29udGludWUgb3BlcmF0aW5nIHdoZW4gdGhlIHByb2Nlc3NvcgorLy8hIGdvZXMgaW50byBzbGVlcCBtb2RlLiBTaW5jZSB0aGUgY2xvY2tpbmcgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlIGRvZXMKKy8vISBub3QgY2hhbmdlLCBhbnkgcGVyaXBoZXJhbCBjYW4gc2FmZWx5IGNvbnRpbnVlIG9wZXJhdGluZyB3aGlsZSB0aGUKKy8vISBwcm9jZXNzb3IgaXMgaW4gc2xlZXAgbW9kZSwgYW5kIGNhbiB0aGVyZWZvcmUgd2FrZSB0aGUgcHJvY2Vzc29yIGZyb20gc2xlZXAKKy8vISBtb2RlLgorLy8hCisvLyEgXG5vdGUgQSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHNldHVwIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGluIHRoZQorLy8hIE1DVSBkb21haW4gZm9yIHRoZSBQUkNNIG1vZHVsZS4gRm9yIHRoZSBjaGFuZ2VzIHRvIHByb3BhZ2F0ZSB0byB0aGUgc3lzdGVtCisvLyEgY29udHJvbGxlciBpbiB0aGUgQU9OIGRvbWFpbiBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJlCisvLyEgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIFxyZWYgUFJDTUxvYWRTZXQoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUGVyaXBoZXJhbCBpcyB0aGUgcGVyaXBoZXJhbCB0byBlbmFibGUgaW4gc2xlZXAgbW9kZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIyCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0NSWVBUTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9UUk5HCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VETUEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfR1BJTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMlMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBhIHBlcmlwaGVyYWwgaW4gc2xlZXAgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgcGVyaXBoZXJhbCB0byBzdG9wIG9wZXJhdGluZyB3aGVuIHRoZSBwcm9jZXNzb3IgZ29lcworLy8hIGludG8gc2xlZXAgbW9kZS4gRGlzYWJsaW5nIHBlcmlwaGVyYWxzIHdoaWxlIGluIHNsZWVwIG1vZGUgaGVscHMgdG8gbG93ZXIKKy8vISB0aGUgY3VycmVudCBkcmF3IG9mIHRoZSBkZXZpY2UuIElmIGVuYWJsZWQgKHZpYSBccmVmIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKCkpLAorLy8hIHRoZSBwZXJpcGhlcmFsIHdpbGwgYXV0b21hdGljYWxseSByZXN1bWUgb3BlcmF0aW9uIHdoZW4gdGhlIHByb2Nlc3NvcgorLy8hIGxlYXZlcyBzbGVlcCBtb2RlLCBtYWludGFpbmluZyBpdHMgZW50aXJlIHN0YXRlIGZyb20gYmVmb3JlIHNsZWVwIG1vZGUgd2FzCisvLyEgZW50ZXJlZC4KKy8vIQorLy8hIFxub3RlIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzZXR1cCB0aGUgc2hhZG93IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBNQ1UgZG9tYWluIGZvciB0aGUgUFJDTSBtb2R1bGUuIEZvciB0aGUgY2hhbmdlcyB0byBwcm9wYWdhdGUgdG8gdGhlIHN5c3RlbQorLy8hIGNvbnRyb2xsZXIgaW4gdGhlIEFPTiBkb21haW4gYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQorLy8hIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBccmVmIFBSQ01Mb2FkU2V0KCkuCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlwaGVyYWwgaXMgdGhlIHBlcmlwaGVyYWwgdG8gZGlzYWJsZSBpbiBzbGVlcCBtb2RlLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjIKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIzCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfU1NJMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VQVJUMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VQVJUMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyQzEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfQ1JZUFRPCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RSTkcKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVURNQQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9HUElPCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyUworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNTG9hZFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUodWludDMyX3QgdWkzMlBlcmlwaGVyYWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGEgcGVyaXBoZXJhbCBpbiBkZWVwLXNsZWVwIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIHBlcmlwaGVyYWwgdG8gY29udGludWUgb3BlcmF0aW5nIHdoZW4gdGhlIHByb2Nlc3NvcgorLy8hIGdvZXMgaW50byBkZWVwLXNsZWVwIG1vZGUuICBTaW5jZSB0aGUgY2xvY2tpbmcgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlCisvLyEgbWF5IGNoYW5nZSwgbm90IGFsbCBwZXJpcGhlcmFscyBjYW4gc2FmZWx5IGNvbnRpbnVlIG9wZXJhdGluZyB3aGlsZSB0aGUKKy8vISBwcm9jZXNzb3IgaXMgaW4gc2xlZXAgbW9kZS4gVGhpcyBpbiB0dXJuIGRlcGVuZHMgb24gdGhlIGNob3NlbiBwb3dlciBtb2RlLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIG1ha2Ugc2Vuc2libGUgY2hvaWNlcy4KKy8vIQorLy8hIFxub3RlIEEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBzZXR1cCB0aGUgc2hhZG93IHJlZ2lzdGVycyBpbiB0aGUKKy8vISBNQ1UgZG9tYWluIGZvciB0aGUgUFJDTSBtb2R1bGUuIEZvciB0aGUgY2hhbmdlcyB0byBwcm9wYWdhdGUgdG8gdGhlIHN5c3RlbQorLy8hIGNvbnRyb2xsZXIgaW4gdGhlIEFPTiBkb21haW4gYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQorLy8hIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBccmVmIFBSQ01Mb2FkU2V0KCkuCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlwaGVyYWwgaXMgdGhlIHBlcmlwaGVyYWwgdG8gZW5hYmxlIGluIGRlZXAtc2xlZXAgbW9kZS4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIyCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9TU0kwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVUFSVDEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfSTJDMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMxCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0NSWVBUTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9UUk5HCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1VETUEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfR1BJTworLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMlMKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTUxvYWRTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgYSBwZXJpcGhlcmFsIGluIGRlZXAtc2xlZXAgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgcGVyaXBoZXJhbCB0byBzdG9wIG9wZXJhdGluZyB3aGVuIHRoZSBwcm9jZXNzb3IgZ29lcworLy8hIGludG8gZGVlcC1zbGVlcCBtb2RlLiAgRGlzYWJsaW5nIHBlcmlwaGVyYWxzIHdoaWxlIGluIGRlZXAtc2xlZXAgbW9kZSBoZWxwcworLy8hIHRvIGxvd2VyIHRoZSBjdXJyZW50IGRyYXcgb2YgdGhlIGRldmljZSwgYW5kIGNhbiBrZWVwIHBlcmlwaGVyYWxzIHRoYXQKKy8vISByZXF1aXJlIGEgcGFydGljdWxhciBjbG9jayBmcmVxdWVuY3kgZnJvbSBvcGVyYXRpbmcgd2hlbiB0aGUgY2xvY2sgY2hhbmdlcworLy8hIGFzIGEgcmVzdWx0IG9mIGVudGVyaW5nIGRlZXAtc2xlZXAgbW9kZS4gIElmIGVuYWJsZWQgKHZpYQorLy8hIFxyZWYgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUoKSksIHRoZSBwZXJpcGhlcmFsIHdpbGwgYXV0b21hdGljYWxseSByZXN1bWUKKy8vISBvcGVyYXRpb24gd2hlbiB0aGUgcHJvY2Vzc29yIGxlYXZlcyBkZWVwLXNsZWVwIG1vZGUsIG1haW50YWluaW5nIGl0cyBlbnRpcmUKKy8vISBzdGF0ZSBmcm9tIGJlZm9yZSBkZWVwLXNsZWVwIG1vZGUgd2FzIGVudGVyZWQuCisvLyEKKy8vISBcbm90ZSBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgc2V0dXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgaW4gdGhlCisvLyEgTUNVIGRvbWFpbiBmb3IgdGhlIFBSQ00gbW9kdWxlLiBGb3IgdGhlIGNoYW5nZXMgdG8gcHJvcGFnYXRlIHRvIHRoZSBzeXN0ZW0KKy8vISBjb250cm9sbGVyIGluIHRoZSBBT04gZG9tYWluIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKKy8vISBmb2xsb3dlZCBieSBhIGNhbGwgdG8gXHJlZiBQUkNNTG9hZFNldCgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJQZXJpcGhlcmFsIGlzIHRoZSBwZXJpcGhlcmFsIHRvIGRpc2FibGUgaW4gZGVlcC1zbGVlcCBtb2RlLgorLy8hIFRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RJTUVSMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9USU1FUjIKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVElNRVIzCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1NTSTAKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfU1NJMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VQVJUMAorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9VQVJUMQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9JMkMwCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyQzEKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfQ1JZUFRPCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX1RSTkcKKy8vISAtIFxyZWYgUFJDTV9QRVJJUEhfVURNQQorLy8hIC0gXHJlZiBQUkNNX1BFUklQSF9HUElPCisvLyEgLSBccmVmIFBSQ01fUEVSSVBIX0kyUworLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQUkNNTG9hZFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBEaXNhYmxlKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBzdGF0dXMgZm9yIGEgc3BlY2lmaWMgcG93ZXIgZG9tYWluLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgcG93ZXIgc3RhdHVzIG9mIG9uZSBvciBtb3JlCisvLyEgcG93ZXIgZG9tYWlucy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyRG9tYWlucyBkZXRlcm1pbmVzIHdoaWNoIGRvbWFpbiB0byBnZXQgdGhlIHBvd2VyIHN0YXR1cyBmb3IuCisvLyEgVGhlIHBhcmFtZXRlciBtdXN0IGJlIGFuIE9SJ2VkIGNvbWJpbmF0aW9uIG9mIG9uZSBvciBzZXZlcmFsIG9mOgorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9SRkNPUkUgOiBSRiBDb3JlLgorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9TRVJJQUwgOiBTU0kwLCBVQVJUMCwgSTJDMAorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9QRVJJUEggOiBHUFQwLCBHUFQxLCBHUFQyLCBHUFQzLCBHUElPLCBTU0kxLCBJMlMsIERNQSwgVUFSVDEsIEkyQzEKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIHJlcXVlc3RlZCBkb21haW5zOgorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9QT1dFUl9PTiAgOiBUaGUgc3BlY2lmaWVkIGRvbWFpbnMgYXJlIFxiIGFsbCBwb3dlcmVkIHVwLgorLy8hIFRoaXMgc3RhdHVzIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBwb3dlcmVkIHVwIHN0YXR1cyBpcyBndWFyYW50ZWVkLgorLy8hIC0gXHJlZiBQUkNNX0RPTUFJTl9QT1dFUl9PRkYgOiBBbnkgb2YgdGhlIGRvbWFpbnMgYXJlIHBvd2VyZWQgZG93bi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgUFJDTVBvd2VyRG9tYWluU3RhdHVzKHVpbnQzMl90IHVpMzJEb21haW5zKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJuIHRoZSBhY2Nlc3Mgc3RhdHVzIG9mIHRoZSBSRiBDb3JlLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIFJGIENvcmUgaXMgb24gYW5kIHJlYWR5IHRvIGJlIGFjY2Vzc2VkLgorLy8hIEFjY2Vzc2luZyByZWdpc3RlciBvciBtZW1vcmllcyB0aGF0IGFyZSBub3QgcG93ZXJlZCBhbmQgY2xvY2tlZCB3aWxsCisvLyEgY2F1c2UgYSBidXMgZmF1bHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYWNjZXNzIHN0YXR1cyBvZiB0aGUgUkYgQ29yZS4KKy8vISAtIFxjIHRydWUgIDogUkYgQ29yZSBjYW4gYmUgYWNjZXNzZWQuCisvLyEgLSBcYyBmYWxzZSA6IFJGIENvcmUgZG9tYWluIGlzIG5vdCByZWFkeSBmb3IgYWNjZXNzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitQUkNNUmZSZWFkeSh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSByZWFkeSBzdGF0dXMgb2YgdGhlIFJGIENvcmUuCisgICAgLy8KKyAgICByZXR1cm4gKChIV1JFRyhQUkNNX0JBU0UgKyBQUkNNX09fUERTVEFUMVJGQykgJgorICAgICAgICAgICAgIFBSQ01fUERTVEFUMVJGQ19PTikgPyB0cnVlIDogZmFsc2UpOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFB1dCB0aGUgcHJvY2Vzc29yIGludG8gc2xlZXAgbW9kZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcGxhY2VzIHRoZSBwcm9jZXNzb3IgaW50byBzbGVlcCBtb2RlOyBpdCBkb2VzIG5vdCByZXR1cm4KKy8vISB1bnRpbCB0aGUgcHJvY2Vzc29yIHJldHVybnMgdG8gcnVuIG1vZGUuICBUaGUgcGVyaXBoZXJhbHMgdGhhdCBhcmUgZW5hYmxlZAorLy8hIHZpYSBcYnJpZWYgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSgpIGNvbnRpbnVlIHRvIG9wZXJhdGUgYW5kIGNhbiB3YWtlIHVwIHRoZQorLy8hIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01TbGVlcCh2b2lkKQoreworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgYW4gaW50ZXJydXB0LgorICAgIC8vCisgICAgQ1BVd2ZpKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFB1dCB0aGUgcHJvY2Vzc29yIGludG8gZGVlcC1zbGVlcCBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBwbGFjZXMgdGhlIHByb2Nlc3NvciBpbnRvIGRlZXAtc2xlZXAgbW9kZTsgaXQgZG9lcyBub3QgcmV0dXJuCisvLyEgdW50aWwgdGhlIHByb2Nlc3NvciByZXR1cm5zIHRvIHJ1biBtb2RlLiAgVGhlIHBlcmlwaGVyYWxzIHRoYXQgYXJlIGVuYWJsZWQKKy8vISB2aWEgXHJlZiBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZSgpIGNvbnRpbnVlIHRvIG9wZXJhdGUgYW5kIGNhbiB3YWtlIHVwCisvLyEgdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFBSQ01EZWVwU2xlZXAodm9pZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSBDQUNIRSBSQU0gcmV0ZW50aW9uCisvLyEKKy8vISBFbmFibGVzIENBQ0hFIFJBTSByZXRlbnRpb24gb24gYm90aCBWSU1TX1RSQU0gYW5kIFZJTVNfQ1JBTQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1BSQ01DYWNoZVJldGVudGlvbkVuYWJsZSggdm9pZCApCit7CisgICBIV1JFRyggUFJDTV9CQVNFICsgUFJDTV9PX1JBTVJFVEVOICkgfD0gUFJDTV9SQU1SRVRFTl9WSU1TX007Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgQ0FDSEUgUkFNIHJldGVudGlvbgorLy8hCisvLyEgRGlzYWJsZXMgQ0FDSEUgUkFNIHJldGVudGlvbiBvbiBib3RoIFZJTVNfVFJBTSBhbmQgVklNU19DUkFNCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUFJDTUNhY2hlUmV0ZW50aW9uRGlzYWJsZSggdm9pZCApCit7CisgICBIV1JFRyggUFJDTV9CQVNFICsgUFJDTV9PX1JBTVJFVEVOICkgJj0gflBSQ01fUkFNUkVURU5fVklNU19NOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldAorICAgICAgICAjdW5kZWYgIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldAorICAgICAgICAjZGVmaW5lIFBSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldCAgICAgICAgUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0CisgICAgICAgICN1bmRlZiAgUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0CisgICAgICAgICNkZWZpbmUgUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0ICAgICAgICBST01fUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNQXVkaW9DbG9ja0NvbmZpZ1NldAorICAgICAgICAjdW5kZWYgIFBSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0CisgICAgICAgICNkZWZpbmUgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQgICAgICAgICBST01fUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01BdWRpb0Nsb2NrQ29uZmlnU2V0T3ZlcnJpZGUKKyAgICAgICAgI3VuZGVmICBQUkNNQXVkaW9DbG9ja0NvbmZpZ1NldE92ZXJyaWRlCisgICAgICAgICNkZWZpbmUgUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZSBST01fUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXRPdmVycmlkZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTVBvd2VyRG9tYWluT24KKyAgICAgICAgI3VuZGVmICBQUkNNUG93ZXJEb21haW5PbgorICAgICAgICAjZGVmaW5lIFBSQ01Qb3dlckRvbWFpbk9uICAgICAgICAgICAgICAgUk9NX1BSQ01Qb3dlckRvbWFpbk9uCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNUG93ZXJEb21haW5PZmYKKyAgICAgICAgI3VuZGVmICBQUkNNUG93ZXJEb21haW5PZmYKKyAgICAgICAgI2RlZmluZSBQUkNNUG93ZXJEb21haW5PZmYgICAgICAgICAgICAgIFJPTV9QUkNNUG93ZXJEb21haW5PZmYKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01QZXJpcGhlcmFsUnVuRW5hYmxlCisgICAgICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxSdW5FbmFibGUKKyAgICAgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZSAgICAgICAgIFJPTV9QUkNNUGVyaXBoZXJhbFJ1bkVuYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlCisgICAgICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlCisgICAgICAgICNkZWZpbmUgUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlICAgICAgICBST01fUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRW5hYmxlCisgICAgICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZQorICAgICAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUgICAgICAgUk9NX1BSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlCisgICAgICAgICN1bmRlZiAgUFJDTVBlcmlwaGVyYWxTbGVlcERpc2FibGUKKyAgICAgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZSAgICAgIFJPTV9QUkNNUGVyaXBoZXJhbFNsZWVwRGlzYWJsZQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUKKyAgICAgICAgI3VuZGVmICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcEVuYWJsZQorICAgICAgICAjZGVmaW5lIFBSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlICAgUk9NX1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUKKyAgICAgICAgI3VuZGVmICBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUKKyAgICAgICAgI2RlZmluZSBQUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUgIFJPTV9QUkNNUGVyaXBoZXJhbERlZXBTbGVlcERpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1BSQ01Qb3dlckRvbWFpblN0YXR1cworICAgICAgICAjdW5kZWYgIFBSQ01Qb3dlckRvbWFpblN0YXR1cworICAgICAgICAjZGVmaW5lIFBSQ01Qb3dlckRvbWFpblN0YXR1cyAgICAgICAgICAgUk9NX1BSQ01Qb3dlckRvbWFpblN0YXR1cworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUFJDTURlZXBTbGVlcAorICAgICAgICAjdW5kZWYgIFBSQ01EZWVwU2xlZXAKKyAgICAgICAgI2RlZmluZSBQUkNNRGVlcFNsZWVwICAgICAgICAgICAgICAgICAgIFJPTV9QUkNNRGVlcFNsZWVwCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX1BSQ01fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3B3cl9jdHJsLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wd3JfY3RybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTc4ODcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wd3JfY3RybC5jCkBAIC0wLDAgKzEsODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBwd3JfY3RybC5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNC0wNSAxNToyOTowMSArMDIwMCAoVHVlLCAwNSBBcHIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk5OQorKgorKiAgRGVzY3JpcHRpb246ICAgIFBvd2VyIENvbnRyb2wgZHJpdmVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9wd3JfY3RybC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgUG93ZXJDdHJsU291cmNlU2V0CisgICAgI2RlZmluZSBQb3dlckN0cmxTb3VyY2VTZXQgICAgICAgICAgICAgIE5PUk9NX1Bvd2VyQ3RybFNvdXJjZVNldAorI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZXQgKFJlcXVlc3QpIHRoZSBtYWluIHBvd2VyIHNvdXJjZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1Bvd2VyQ3RybFNvdXJjZVNldCh1aW50MzJfdCB1aTMyUG93ZXJDb25maWcpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyUG93ZXJDb25maWcgPT0gUFdSQ1RSTF9QV1JTUkNfRENEQykgfHwKKyAgICAgICAgICAgKHVpMzJQb3dlckNvbmZpZyA9PSBQV1JDVFJMX1BXUlNSQ19HTERPKSB8fAorICAgICAgICAgICAodWkzMlBvd2VyQ29uZmlnID09IFBXUkNUUkxfUFdSU1JDX1VMRE8pKTsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBwb3dlci4KKyAgICAvLworICAgIGlmKHVpMzJQb3dlckNvbmZpZyA9PSBQV1JDVFJMX1BXUlNSQ19EQ0RDKSB7CisgICAgICAgIEhXUkVHKEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19QV1JDVEwpIHw9CisgICAgICAgICAgICAoQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTiB8IEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFKTsKKyAgICB9CisgICAgZWxzZSBpZiAodWkzMlBvd2VyQ29uZmlnID09IFBXUkNUUkxfUFdSU1JDX0dMRE8pCisgICAgeworICAgICAgICBIV1JFRyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMKSAmPQorICAgICAgICAgICAgfihBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOIHwgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19BQ1RJVkUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBQUkNNTWN1VWxkb0NvbmZpZ3VyZSh0cnVlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9wd3JfY3RybC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHdyX2N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg4Zjk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcHdyX2N0cmwuaApAQCAtMCwwICsxLDMxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHB3cl9jdHJsLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA0LTA1IDE1OjI5OjAxICswMjAwIChUdWUsIDA1IEFwciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTk5CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIFN5c3RlbSBQb3dlciBDb250cm9sLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgcHdyY3RybF9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1BXUl9DVFJMX0hfXworI2RlZmluZSBfX1BXUl9DVFJMX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3N5c2N0bC5oPgorI2luY2x1ZGUgPGluYy9od19hb25fcnRjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV8yX3JlZnN5cy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvb3NjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NwdS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9wcmNtLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9pb2MuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvYWRpLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFBvd2VyQ3RybFNvdXJjZVNldCAgICAgICAgICAgICAgTk9ST01fUG93ZXJDdHJsU291cmNlU2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIHRoZSBzeXN0ZW0gcG93ZXIgc3RhdGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQV1JDVFJMX0FDVElWRSAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBXUkNUUkxfU1RBTkRCWSAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFdSQ1RSTF9QT1dFUl9ET1dOICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQV1JDVFJMX1NIVVRET1dOICAgICAgICAweDAwMDAwMDA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBEZWZpbmVzIGZvciB0aGUgcG93ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgQU9OIFN5c3RlbSBDb250cm9sIDEuMiBWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQV1JDVFJMX0lPU0VHM19FTkFCTEUgICAweDAwMDAwODAwCisjZGVmaW5lIFBXUkNUUkxfSU9TRUcyX0VOQUJMRSAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUFdSQ1RSTF9JT1NFRzNfRElTQUJMRSAgMHgwMDAwMDIwMAorI2RlZmluZSBQV1JDVFJMX0lPU0VHMl9ESVNBQkxFICAweDAwMDAwMTAwCisjZGVmaW5lIFBXUkNUUkxfUFdSU1JDX0RDREMgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFdSQ1RSTF9QV1JTUkNfR0xETyAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQV1JDVFJMX1BXUlNSQ19VTERPICAgICAweDAwMDAwMDAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgdmFyaW91cyByZXNldCBzb3VyY2UgZm9yIHRoZSBkZXZpY2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBQV1JDVFJMX1JTVF9QT1dFUl9PTiAgICAweDAwMDAwMDAwICAvLyBSZXNldCBieSBwb3dlciBvbgorI2RlZmluZSBQV1JDVFJMX1JTVF9QSU4gICAgICAgICAweDAwMDAwMDAxICAvLyBQaW4gcmVzZXQKKyNkZWZpbmUgUFdSQ1RSTF9SU1RfVkREU19CT0QgICAgMHgwMDAwMDAwMiAgLy8gVkREUyBCcm93biBPdXQgRGV0ZWN0CisjZGVmaW5lIFBXUkNUUkxfUlNUX1ZERF9CT0QgICAgIDB4MDAwMDAwMDMgIC8vIFZERCBCcm93biBPdXQgRGV0ZWN0CisjZGVmaW5lIFBXUkNUUkxfUlNUX1ZERFJfQk9EICAgIDB4MDAwMDAwMDQgIC8vIFZERFIgQnJvd24gT3V0IERldGVjdAorI2RlZmluZSBQV1JDVFJMX1JTVF9DTEtfTE9TUyAgICAweDAwMDAwMDA1ICAvLyBDbG9jayBsb3NzIFJlc2V0CisjZGVmaW5lIFBXUkNUUkxfUlNUX1NXX1BJTiAgICAgIDB4MDAwMDAwMDYgIC8vIFNZU1JFU0VUIG9yIHBpbiByZXNldAorI2RlZmluZSBQV1JDVFJMX1JTVF9XQVJNICAgICAgICAweDAwMDAwMDA3ICAvLyBSZXNldCB2aWEgUFJDTSB3YXJtIHJlc2V0IHJlcXVlc3QKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCAoUmVxdWVzdCkgdGhlIG1haW4gcG93ZXIgc291cmNlLgorLy8hCisvLyEgXG5vdGUgVGhlIHN5c3RlbSB3aWxsIG5ldmVyIGFsbG93IGEgc3dpdGNoIHRvIHRoZSBccmVmIFBXUkNUUkxfUFdSU1JDX1VMRE8KKy8vISB3aGVuIGluIGFjdGl2ZSBtb2RlLiBUaGlzIGlzIG9ubHkgYWxsb3dlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgaW4gbG93ZXIgcG93ZXIKKy8vISBtb2RlIHdoZXJlIG5vIGNvZGUgaXMgZXhlY3V0aW5nIGFuZCBubyBwZXJpcGhlcmFscyBhcmUgYWN0aXZlLgorLy8hIEFzc3VtaW5nIHRoYXQgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgY2FwYWNpdG9yIGF2YWlsYWJsZSBmb3IgdGhlCisvLyEgXHJlZiBQV1JDVFJMX1BXUlNSQ19EQ0RDIHRoZSBzeXN0ZW0gY2FuIGR5bmFtaWNhbGx5IHN3aXRjaCBiYWNrIGFuZCBmb3J0aAorLy8hIGJldHdlZW4gdGhlIHR3byB3aGVuIGluIGFjdGl2ZSBtb2RlLgorLy8hCisvLyEgXG5vdGUgVGhlIHN5c3RlbSB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIHRoZSBHTERPIC8gRENEQyB3aGVuIHdha2luZworLy8hIHVwIGZyb20gYSBsb3cgcG93ZXIgbW9kZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyUG93ZXJDb25maWcgaXMgYSBiaXRtYXNrIGluZGljYXRpbmcgdGhlIHRhcmdldCBwb3dlciBzb3VyY2UuCisvLyEgLSBccmVmIFBXUkNUUkxfUFdSU1JDX0RDREMKKy8vISAtIFxyZWYgUFdSQ1RSTF9QV1JTUkNfR0xETworLy8hIC0gXHJlZiBQV1JDVFJMX1BXUlNSQ19VTERPCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBQb3dlckN0cmxTb3VyY2VTZXQodWludDMyX3QgdWkzMlBvd2VyQ29uZmlnKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBtYWluIHBvd2VyIHNvdXJjZS4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IGFjdGl2ZSBwb3dlciBzb3VyY2UuCisvLyEKKy8vISBXaGVuIHRoZSBTeXN0ZW0gQ1BVIGlzIGFjdGl2ZSBpdCBjYW4gbmV2ZXIgYmUgcG93ZXJlZCBieSB1TERPIGFzIHRoaXMKKy8vISBpcyB0b28gd2VhayBhIHBvd2VyIHNvdXJjZS4KKy8vIQorLy8hIFxub3RlIFVzaW5nIHRoZSBEQ0RDIHBvd2VyIHN1cHBseSByZXF1aXJlcyBhbiBleHRlcm5hbCBpbmR1Y3Rvci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgbWFpbiBwb3dlciBzb3VyY2UuCisvLyEgLSBccmVmIFBXUkNUUkxfUFdSU1JDX0RDREMKKy8vISAtIFxyZWYgUFdSQ1RSTF9QV1JTUkNfR0xETworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorUG93ZXJDdHJsU291cmNlR2V0KHZvaWQpCit7CisgICAgdWludDMyX3QgdWkzMlBvd2VyQ29uZmlnOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgcG93ZXIgc291cmNlCisgICAgLy8KKyAgICB1aTMyUG93ZXJDb25maWcgPSBIV1JFRyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMKTsKKyAgICBpZih1aTMyUG93ZXJDb25maWcgJiBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRSkKKyAgICB7CisgICAgICAgIHJldHVybiAoUFdSQ1RSTF9QV1JTUkNfRENEQyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAoUFdSQ1RSTF9QV1JTUkNfR0xETyk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBPQlNPTEVURTogR2V0IHRoZSBsYXN0IGtub3duIHJlc2V0IHNvdXJjZSBvZiB0aGUgc3lzdGVtLgorLy8hCisvLyEgUmVjb21tZW5kIHVzaW5nIGZ1bmN0aW9uIFxyZWYgU3lzQ3RybFJlc2V0U291cmNlR2V0KCkgaW5zdGVhZCBvZiB0aGlzIG9uZS4KKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmVzZXQgc291cmNlIGJ1dCBkb2VzIG5vdCBjb3ZlciBpZiB3YWtpbmcgdXAgZnJvbSBzaHV0ZG93bi4KKy8vISBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBzZWVuIGFzIGEgc3Vic2V0IG9mIGZ1bmN0aW9uIFxyZWYgU3lzQ3RybFJlc2V0U291cmNlR2V0KCkKKy8vISBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgb25lIG9mIHRoZSBrbm93biByZXNldCB2YWx1ZXMuCisvLyEgVGhlIHBvc3NpYmxlIHJlc2V0IHNvdXJjZXMgYXJlOgorLy8hIC0gXHJlZiBQV1JDVFJMX1JTVF9QT1dFUl9PTgorLy8hIC0gXHJlZiBQV1JDVFJMX1JTVF9QSU4KKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfVkREU19CT0QKKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfVkREX0JPRAorLy8hIC0gXHJlZiBQV1JDVFJMX1JTVF9WRERSX0JPRAorLy8hIC0gXHJlZiBQV1JDVFJMX1JTVF9DTEtfTE9TUworLy8hIC0gXHJlZiBQV1JDVFJMX1JTVF9TV19QSU4KKy8vISAtIFxyZWYgUFdSQ1RSTF9SU1RfV0FSTQorLy8hCisvLyEgXHNhIFxyZWYgU3lzQ3RybFJlc2V0U291cmNlR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1Bvd2VyQ3RybFJlc2V0U291cmNlR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyAgR2V0IHRoZSByZXNldCBzb3VyY2UuCisgICAgLy8KKyAgICByZXR1cm4gKCggSFdSRUcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19SRVNFVENUTCApICYKKyAgICAgICAgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfTSApID4+CisgICAgICAgIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsb3NlIHRoZSBsYXRjaGVzIGluIHRoZSBBT04gSU9DIGludGVyZmFjZSBhbmQgaW4gcGFkcmluZy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHVuZnJlZXplIHRoZSBjdXJyZW50IHZhbHVlIHJldGFpbmVkIG9uIHRoZSBJT3MgZHJpdmVuCisvLyEgYnkgdGhlIGRldmljZS4gVGhpcyBpcyByZXF1aXJlZCBpZiBpdCBpcyBkZXNpcmVkIHRvIG1haW50YWluIHRoZSBsZXZlbCBvZgorLy8hIGFueSBJTyBkcml2ZW4gd2hlbiBnb2luZyB0aHJvdWdoIGEgc2h1dGRvd24vcG93ZXJkb3duIGN5Y2xlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBQb3dlckN0cmxJT0ZyZWV6ZURpc2FibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQb3dlckN0cmxJT0ZyZWV6ZUVuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gQ2xvc2UgdGhlIElPIGxhdGNoZXMgYXQgQU9OX0lPQyBsZXZlbCBhbmQgaW4gdGhlIHBhZHJpbmcuCisgICAgLy8KKyAgICBBT05JT0NGcmVlemVFbmFibGUoKTsKKyAgICBIV1JFRyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fU0xFRVBDVEwpID0gMDsKKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU1lOQyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgT3BlbiB0aGUgbGF0Y2hlcyBpbiB0aGUgQU9OIElPQyBpbnRlcmZhY2UgYW5kIGluIHBhZHJpbmcuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byB1bmZyZWV6ZSB0aGUgbGF0Y2hlcyB0aGF0IHJldGFpbmVkIG9uIHRoZSBJT3MgZHJpdmVuCisvLyEgYnkgdGhlIGRldmljZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGFwcGxpY2F0aW9uCisvLyEgaGFzIHJlaW5pdGlhbGl6ZWQgdGhlIElPIGNvbmZpZ3VyYXRpb24gdGhhdCB3aWxsIGRyaXZlIHRoZSBJT3MgdG8gdGhlCisvLyEgZGVzaXJlZCBsZXZlbC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgUG93ZXJDdHJsSU9GcmVlemVFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitQb3dlckN0cmxJT0ZyZWV6ZURpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIE9wZW4gdGhlIElPIGxhdGNoZXMgYXQgQU9OX0lPQyBsZXZlbCBhbmQgaW4gdGhlIHBhZHJpbmcKKyAgICAvLworICAgIEFPTklPQ0ZyZWV6ZURpc2FibGUoKTsKKyAgICBIV1JFRyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fU0xFRVBDVEwpID0gMTsKKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU1lOQyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1Bvd2VyQ3RybFNvdXJjZVNldAorICAgICAgICAjdW5kZWYgIFBvd2VyQ3RybFNvdXJjZVNldAorICAgICAgICAjZGVmaW5lIFBvd2VyQ3RybFNvdXJjZVNldCAgICAgICAgICAgICAgUk9NX1Bvd2VyQ3RybFNvdXJjZVNldAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19QV1JfQ1RSTF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfYmxlX2NtZC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfYmxlX2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmNhMDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9ibGVfY21kLmgKQEAgLTAsMCArMSwxMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfYmxlX2NtZC5oCisqICBSZXZpc2VkOiAgICAgICAgJCAkCisqICBSZXZpc2lvbjogICAgICAgJCAkCisqCisqICBEZXNjcmlwdGlvbjogICAgQ0MyNnh4L0NDMTN4eCBBUEkgZm9yIEJsdWV0b290aCBMb3cgRW5lcmd5IGNvbW1hbmRzCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQkxFX0NNRF9ICisjZGVmaW5lIF9fQkxFX0NNRF9ICisKKyNpZm5kZWYgX19SRkNfU1RSVUNUCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX19SRkNfU1RSVUNUIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpCisjZWxzZQorI2RlZmluZSBfX1JGQ19TVFJVQ1QKKyNlbmRpZgorI2VuZGlmCisKKy8vISBcYWRkdG9ncm91cCByZmMKKy8vISBAeworCisvLyEgXGFkZHRvZ3JvdXAgYmxlX2NtZAorLy8hIEB7CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfbWFpbGJveC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9jb21tb25fY21kLmg+CisKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlUmFkaW9PcF9zIHJmY19ibGVSYWRpb09wX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfU0xBVkVfcyByZmNfQ01EX0JMRV9TTEFWRV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX01BU1RFUl9zIHJmY19DTURfQkxFX01BU1RFUl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9zIHJmY19DTURfQkxFX0FEVl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9ESVJfcyByZmNfQ01EX0JMRV9BRFZfRElSX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfQURWX05DX3MgcmZjX0NNRF9CTEVfQURWX05DX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfQURWX1NDQU5fcyByZmNfQ01EX0JMRV9BRFZfU0NBTl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX1NDQU5ORVJfcyByZmNfQ01EX0JMRV9TQ0FOTkVSX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfSU5JVElBVE9SX3MgcmZjX0NNRF9CTEVfSU5JVElBVE9SX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfR0VORVJJQ19SWF9zIHJmY19DTURfQkxFX0dFTkVSSUNfUlhfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9UWF9URVNUX3MgcmZjX0NNRF9CTEVfVFhfVEVTVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9QQVlMT0FEX3MgcmZjX0NNRF9CTEVfQURWX1BBWUxPQURfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlTWFzdGVyU2xhdmVQYXJfcyByZmNfYmxlTWFzdGVyU2xhdmVQYXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlTWFzdGVyUGFyX3MgcmZjX2JsZU1hc3RlclBhcl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVTbGF2ZVBhcl9zIHJmY19ibGVTbGF2ZVBhcl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVBZHZQYXJfcyByZmNfYmxlQWR2UGFyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVNjYW5uZXJQYXJfcyByZmNfYmxlU2Nhbm5lclBhcl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVJbml0aWF0b3JQYXJfcyByZmNfYmxlSW5pdGlhdG9yUGFyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZUdlbmVyaWNSeFBhcl9zIHJmY19ibGVHZW5lcmljUnhQYXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlVHhUZXN0UGFyX3MgcmZjX2JsZVR4VGVzdFBhcl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVNYXN0ZXJTbGF2ZU91dHB1dF9zIHJmY19ibGVNYXN0ZXJTbGF2ZU91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVBZHZPdXRwdXRfcyByZmNfYmxlQWR2T3V0cHV0X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVNjYW5uZXJPdXRwdXRfcyByZmNfYmxlU2Nhbm5lck91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVJbml0aWF0b3JPdXRwdXRfcyByZmNfYmxlSW5pdGlhdG9yT3V0cHV0X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZUdlbmVyaWNSeE91dHB1dF9zIHJmY19ibGVHZW5lcmljUnhPdXRwdXRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlVHhUZXN0T3V0cHV0X3MgcmZjX2JsZVR4VGVzdE91dHB1dF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVXaGl0ZUxpc3RFbnRyeV9zIHJmY19ibGVXaGl0ZUxpc3RFbnRyeV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVSeFN0YXR1c19zIHJmY19ibGVSeFN0YXR1c190OworCisvLyEgXGFkZHRvZ3JvdXAgYmxlUmFkaW9PcAorLy8hIEB7CitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVSYWRpb09wX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlcgorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB1c2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCZuZGFzaDszOTogQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbCBudW1iZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBDdXN0b20gZnJlcXVlbmN5OyAoMjMwMCArIDxjb2RlPmNoYW5uZWw8L2NvZGU+KSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjU1OiBVc2UgZXhpc3RpbmcgZnJlcXVlbmN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Ojc7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gPSAxIG9yIGN1c3RvbSBmcmVxdWVuY3kgaXMgdXNlZDo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogRG8gbm90IHVzZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXIgdmFsdWU6IEluaXRpYWxpemF0aW9uIGZvciA3LWJpdCBMRlNSIHdoaXRlbmVyCisgICAgICB1aW50OF90IGJPdmVycmlkZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgd2hpdGVuaW5nIGZvciBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPdmVycmlkZSB3aGl0ZW5pbmcgaW5pdGlhbGl6YXRpb24gd2l0aCB2YWx1ZSBvZiBpbml0CisgICB9IHdoaXRlbmluZzsKKyAgIHVpbnQ4X3QqIHBQYXJhbXM7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyIHN0cnVjdHVyZQorICAgdWludDhfdCogcE91dHB1dDsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9CTEVfU0xBVkUKKy8vISBAeworI2RlZmluZSBDTURfQkxFX1NMQVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMQorLy8hIEJMRSBTbGF2ZSBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX1NMQVZFX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDEKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlU2xhdmVQYXJfdCAqcFBhcmFtczsgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVNYXN0ZXJTbGF2ZU91dHB1dF90ICpwT3V0cHV0OyAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX01BU1RFUgorLy8hIEB7CisjZGVmaW5lIENNRF9CTEVfTUFTVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAyCisvLyEgQkxFIE1hc3RlciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX01BU1RFUl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODAyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZU1hc3RlclBhcl90ICpwUGFyYW1zOyAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlTWFzdGVyU2xhdmVPdXRwdXRfdCAqcE91dHB1dDsgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9BRFYKKy8vISBAeworI2RlZmluZSBDTURfQkxFX0FEViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMworLy8hIEJMRSBDb25uZWN0YWJsZSBVbmRpcmVjdGVkIEFkdmVydGlzZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MTgwMworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB1c2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCZuZGFzaDszOTogQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbCBudW1iZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBDdXN0b20gZnJlcXVlbmN5OyAoMjMwMCArIDxjb2RlPmNoYW5uZWw8L2NvZGU+KSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjU1OiBVc2UgZXhpc3RpbmcgZnJlcXVlbmN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Ojc7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gPSAxIG9yIGN1c3RvbSBmcmVxdWVuY3kgaXMgdXNlZDo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogRG8gbm90IHVzZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXIgdmFsdWU6IEluaXRpYWxpemF0aW9uIGZvciA3LWJpdCBMRlNSIHdoaXRlbmVyCisgICAgICB1aW50OF90IGJPdmVycmlkZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgd2hpdGVuaW5nIGZvciBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPdmVycmlkZSB3aGl0ZW5pbmcgaW5pdGlhbGl6YXRpb24gd2l0aCB2YWx1ZSBvZiBpbml0CisgICB9IHdoaXRlbmluZzsKKyAgIHJmY19ibGVBZHZQYXJfdCAqcFBhcmFtczsgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyIHN0cnVjdHVyZQorICAgcmZjX2JsZUFkdk91dHB1dF90ICpwT3V0cHV0OyAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9CTEVfQURWX0RJUgorLy8hIEB7CisjZGVmaW5lIENNRF9CTEVfQURWX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODA0CisvLyEgQkxFIENvbm5lY3RhYmxlIERpcmVjdGVkIEFkdmVydGlzZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9BRFZfRElSX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDQKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlQWR2UGFyX3QgKnBQYXJhbXM7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVBZHZPdXRwdXRfdCAqcE91dHB1dDsgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX0FEVl9OQworLy8hIEB7CisjZGVmaW5lIENNRF9CTEVfQURWX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODA1CisvLyEgQkxFIE5vbi1Db25uZWN0YWJsZSBBZHZlcnRpc2VyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfQURWX05DX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDUKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlQWR2UGFyX3QgKnBQYXJhbXM7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVBZHZPdXRwdXRfdCAqcE91dHB1dDsgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX0FEVl9TQ0FOCisvLyEgQHsKKyNkZWZpbmUgQ01EX0JMRV9BRFZfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDYKKy8vISBCTEUgU2Nhbm5hYmxlIFVuZGlyZWN0ZWQgQWR2ZXJ0aXNlciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9TQ0FOX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDYKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlQWR2UGFyX3QgKnBQYXJhbXM7ICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVBZHZPdXRwdXRfdCAqcE91dHB1dDsgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX1NDQU5ORVIKKy8vISBAeworI2RlZmluZSBDTURfQkxFX1NDQU5ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwNworLy8hIEJMRSBTY2FubmVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CTEVfU0NBTk5FUl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgxODA3CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQ4X3QgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBDaGFubmVsIHRvIHVzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwJm5kYXNoOzM5OiBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsIG51bWJlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEN1c3RvbSBmcmVxdWVuY3k7ICgyMzAwICsgPGNvZGU+Y2hhbm5lbDwvY29kZT4pIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyNTU6IFVzZSBleGlzdGluZyBmcmVxdWVuY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXQ6NzsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiA9IDEgb3IgY3VzdG9tIGZyZXF1ZW5jeSBpcyB1c2VkOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBEbyBub3QgdXNlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlciB2YWx1ZTogSW5pdGlhbGl6YXRpb24gZm9yIDctYml0IExGU1Igd2hpdGVuZXIKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCB3aGl0ZW5pbmcgZm9yIEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWxzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE92ZXJyaWRlIHdoaXRlbmluZyBpbml0aWFsaXphdGlvbiB3aXRoIHZhbHVlIG9mIGluaXQKKyAgIH0gd2hpdGVuaW5nOworICAgcmZjX2JsZVNjYW5uZXJQYXJfdCAqcFBhcmFtczsgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXIgc3RydWN0dXJlCisgICByZmNfYmxlU2Nhbm5lck91dHB1dF90ICpwT3V0cHV0OyAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0JMRV9JTklUSUFUT1IKKy8vISBAeworI2RlZmluZSBDTURfQkxFX0lOSVRJQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwOAorLy8hIEJMRSBJbml0aWF0b3IgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9JTklUSUFUT1JfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MTgwOAorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB1c2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCZuZGFzaDszOTogQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbCBudW1iZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBDdXN0b20gZnJlcXVlbmN5OyAoMjMwMCArIDxjb2RlPmNoYW5uZWw8L2NvZGU+KSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjU1OiBVc2UgZXhpc3RpbmcgZnJlcXVlbmN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Ojc7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gPSAxIG9yIGN1c3RvbSBmcmVxdWVuY3kgaXMgdXNlZDo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogRG8gbm90IHVzZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXIgdmFsdWU6IEluaXRpYWxpemF0aW9uIGZvciA3LWJpdCBMRlNSIHdoaXRlbmVyCisgICAgICB1aW50OF90IGJPdmVycmlkZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgd2hpdGVuaW5nIGZvciBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPdmVycmlkZSB3aGl0ZW5pbmcgaW5pdGlhbGl6YXRpb24gd2l0aCB2YWx1ZSBvZiBpbml0CisgICB9IHdoaXRlbmluZzsKKyAgIHJmY19ibGVJbml0aWF0b3JQYXJfdCAqcFBhcmFtczsgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyIHN0cnVjdHVyZQorICAgcmZjX2JsZUluaXRpYXRvck91dHB1dF90ICpwT3V0cHV0OyAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9CTEVfR0VORVJJQ19SWAorLy8hIEB7CisjZGVmaW5lIENNRF9CTEVfR0VORVJJQ19SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODA5CisvLyEgQkxFIEdlbmVyaWMgUmVjZWl2ZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JMRV9HRU5FUklDX1JYX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDE4MDkKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk6IEJMRSBhZHZlcnRpc2luZy9kYXRhIGNoYW5uZWwgbnVtYmVyPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogQ3VzdG9tIGZyZXF1ZW5jeTsgKDIzMDAgKyA8Y29kZT5jaGFubmVsPC9jb2RlPikgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI1NTogVXNlIGV4aXN0aW5nIGZyZXF1ZW5jeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgaW5pdDo3OyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5iT3ZlcnJpZGU8L2NvZGU+ID0gMSBvciBjdXN0b20gZnJlcXVlbmN5IGlzIHVzZWQ6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IERvIG5vdCB1c2Ugd2hpdGVuaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyIHZhbHVlOiBJbml0aWFsaXphdGlvbiBmb3IgNy1iaXQgTEZTUiB3aGl0ZW5lcgorICAgICAgdWludDhfdCBiT3ZlcnJpZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFVzZSBkZWZhdWx0IHdoaXRlbmluZyBmb3IgQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbHM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgd2hpdGVuaW5nIGluaXRpYWxpemF0aW9uIHdpdGggdmFsdWUgb2YgaW5pdAorICAgfSB3aGl0ZW5pbmc7CisgICByZmNfYmxlR2VuZXJpY1J4UGFyX3QgKnBQYXJhbXM7ICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHNwZWNpZmljIHBhcmFtZXRlciBzdHJ1Y3R1cmUKKyAgIHJmY19ibGVHZW5lcmljUnhPdXRwdXRfdCAqcE91dHB1dDsgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQkxFX1RYX1RFU1QKKy8vISBAeworI2RlZmluZSBDTURfQkxFX1RYX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwQQorLy8hIEJMRSBQSFkgVGVzdCBUcmFuc21pdHRlciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX1RYX1RFU1RfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MTgwQQorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB1c2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCZuZGFzaDszOTogQkxFIGFkdmVydGlzaW5nL2RhdGEgY2hhbm5lbCBudW1iZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgNjAmbmRhc2g7MjA3OiBDdXN0b20gZnJlcXVlbmN5OyAoMjMwMCArIDxjb2RlPmNoYW5uZWw8L2NvZGU+KSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjU1OiBVc2UgZXhpc3RpbmcgZnJlcXVlbmN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBpbml0Ojc7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDxjb2RlPmJPdmVycmlkZTwvY29kZT4gPSAxIG9yIGN1c3RvbSBmcmVxdWVuY3kgaXMgdXNlZDo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogRG8gbm90IHVzZSB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXIgdmFsdWU6IEluaXRpYWxpemF0aW9uIGZvciA3LWJpdCBMRlNSIHdoaXRlbmVyCisgICAgICB1aW50OF90IGJPdmVycmlkZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGRlZmF1bHQgd2hpdGVuaW5nIGZvciBCTEUgYWR2ZXJ0aXNpbmcvZGF0YSBjaGFubmVsczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPdmVycmlkZSB3aGl0ZW5pbmcgaW5pdGlhbGl6YXRpb24gd2l0aCB2YWx1ZSBvZiBpbml0CisgICB9IHdoaXRlbmluZzsKKyAgIHJmY19ibGVUeFRlc3RQYXJfdCAqcFBhcmFtczsgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyIHN0cnVjdHVyZQorICAgcmZjX2JsZVR4VGVzdE91dHB1dF90ICpwT3V0cHV0OyAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gY29tbWFuZCBzcGVjaWZpYyBvdXRwdXQgc3RydWN0dXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9CTEVfQURWX1BBWUxPQUQKKy8vISBAeworI2RlZmluZSBDTURfQkxFX0FEVl9QQVlMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMQorLy8hIEJMRSBVcGRhdGUgQWR2ZXJ0aXNpbmcgUGF5bG9hZCBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQkxFX0FEVl9QQVlMT0FEX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDEwMDEKKyAgIHVpbnQ4X3QgcGF5bG9hZFR5cGU7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBZHZlcnRpc2luZyBkYXRhPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFNjYW4gcmVzcG9uc2UgZGF0YQorICAgdWludDhfdCBuZXdMZW47ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIExlbmd0aCBvZiB0aGUgbmV3IHBheWxvYWQKKyAgIHVpbnQ4X3QqIHBOZXdEYXRhOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgbmV3IGRhdGEKKyAgIHJmY19ibGVBZHZQYXJfdCAqcFBhcmFtczsgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIHRvIHVwZGF0ZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVNYXN0ZXJTbGF2ZVBhcgorLy8hIEB7CitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVNYXN0ZXJTbGF2ZVBhcl9zIHsKKyAgIGRhdGFRdWV1ZV90KiBwUnhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIGRhdGFRdWV1ZV90KiBwVHhROyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRyYW5zbWl0IHF1ZXVlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGlnbm9yZWQgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmNFcnI6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hFbXB0eToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJJbmNsdWRlTGVuQnl0ZToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgbGVuZ3RoIGJ5dGUgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFN0YXR1czoxOyAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBzdGF0dXMgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kVGltZXN0YW1wOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHRpbWVzdGFtcCB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgfSByeENvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmZpZ3VyYXRpb24gYml0cyBmb3IgdGhlIHJlY2VpdmUgcXVldWUgZW50cmllcworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgbGFzdFJ4U246MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgU04gYml0IG9mIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgcGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LCisgICAgICB1aW50OF90IGxhc3RUeFNuOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFNOIGJpdCBvZiB0aGUgaGVhZGVyIG9mIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldAorICAgICAgdWludDhfdCBuZXh0VHhTbjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBTTiBiaXQgb2YgdGhlIGhlYWRlciBvZiB0aGUgbmV4dCBwYWNrZXQgdG8gdHJhbnNtaXQKKyAgICAgIHVpbnQ4X3QgYkZpcnN0UGt0OjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igc2xhdmU6IDAgaWYgYSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgb24gdGhlIGNvbm5lY3Rpb24sIDEgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJBdXRvRW1wdHk6MTsgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgd2FzIGFuIGF1dG8tZW1wdHkgcGFja2V0CisgICAgICB1aW50OF90IGJMbEN0cmxUeDoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgd2FzIGFuIExMIGNvbnRyb2wgcGFja2V0IChMTElEID0gMTEpCisgICAgICB1aW50OF90IGJMbEN0cmxBY2tSeDoxOyAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgd2FzIHRoZSBBQ0sgb2YgYW4gTEwgY29udHJvbCBwYWNrZXQKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybEFja1BlbmRpbmc6MTsgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBwYWNrZXQgd2FzIGFuIExMIGNvbnRyb2wgcGFja2V0IHdoaWNoIGhhcyBub3QgeWV0IGJlZW4gQUNLJ2VkCisgICB9IHNlcVN0YXQ7CisgICB1aW50OF90IG1heE5hY2s7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgTkFDS3MgcmVjZWl2ZWQgYmVmb3JlIG9wZXJhdGlvbiBlbmRzLiAwOiBObyBsaW1pdAorICAgdWludDhfdCBtYXhQa3Q7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQgaW4gdGhlIG9wZXJhdGlvbiBiZWZvcmUgaXQgZW5kcy4gMDogTm8gbGltaXQKKyAgIHVpbnQzMl90IGFjY2Vzc0FkZHJlc3M7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBBY2Nlc3MgYWRkcmVzcyB1c2VkIG9uIHRoZSBjb25uZWN0aW9uCisgICB1aW50OF90IGNyY0luaXQwOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBsZWFzdCBzaWduaWZpY2FudCBieXRlCisgICB1aW50OF90IGNyY0luaXQxOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtaWRkbGUgYnl0ZQorICAgdWludDhfdCBjcmNJbml0MjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENSQyBpbml0aWFsaXphdGlvbiB2YWx1ZSB1c2VkIG9uIHRoZSBjb25uZWN0aW9uICZuZGFzaDsgbW9zdCBzaWduaWZpY2FudCBieXRlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZU1hc3RlclBhcgorLy8hIEB7CisvLyEgUGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgbWFzdGVyIChDTURfQkxFX01BU1RFUikKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlTWFzdGVyUGFyX3MgeworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgZGF0YVF1ZXVlX3QqIHBUeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdHJhbnNtaXQgcXVldWUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ25vcmVkOjE7ICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgaWdub3JlZCBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaENyY0VycjoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaEVtcHR5OjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBlbXB0eSBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVMZW5CeXRlOjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBsZW5ndGggYnl0ZSBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVDcmM6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBDUkMgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJBcHBlbmRSc3NpOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIFJTU0kgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3RhdHVzOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHN0YXR1cyBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICB9IHJ4Q29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBiaXRzIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBlbnRyaWVzCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBsYXN0UnhTbjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBTTiBiaXQgb2YgdGhlIGhlYWRlciBvZiB0aGUgbGFzdCBwYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0sKKyAgICAgIHVpbnQ4X3QgbGFzdFR4U246MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgU04gYml0IG9mIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0CisgICAgICB1aW50OF90IG5leHRUeFNuOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFNOIGJpdCBvZiB0aGUgaGVhZGVyIG9mIHRoZSBuZXh0IHBhY2tldCB0byB0cmFuc21pdAorICAgICAgdWludDhfdCBiRmlyc3RQa3Q6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEZvciBzbGF2ZTogMCBpZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCBvbiB0aGUgY29ubmVjdGlvbiwgMSBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkF1dG9FbXB0eToxOyAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldCB3YXMgYW4gYXV0by1lbXB0eSBwYWNrZXQKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybFR4OjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldCB3YXMgYW4gTEwgY29udHJvbCBwYWNrZXQgKExMSUQgPSAxMSkKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybEFja1J4OjE7ICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCB3YXMgdGhlIEFDSyBvZiBhbiBMTCBjb250cm9sIHBhY2tldAorICAgICAgdWludDhfdCBiTGxDdHJsQWNrUGVuZGluZzoxOyAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIHBhY2tldCB3YXMgYW4gTEwgY29udHJvbCBwYWNrZXQgd2hpY2ggaGFzIG5vdCB5ZXQgYmVlbiBBQ0snZWQKKyAgIH0gc2VxU3RhdDsKKyAgIHVpbnQ4X3QgbWF4TmFjazsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBOQUNLcyByZWNlaXZlZCBiZWZvcmUgb3BlcmF0aW9uIGVuZHMuIDA6IE5vIGxpbWl0CisgICB1aW50OF90IG1heFBrdDsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0cmFuc21pdHRlZCBpbiB0aGUgb3BlcmF0aW9uIGJlZm9yZSBpdCBlbmRzLiAwOiBObyBsaW1pdAorICAgdWludDMyX3QgYWNjZXNzQWRkcmVzczsgICAgICAgICAgICAgIC8vITwgICAgICAgIEFjY2VzcyBhZGRyZXNzIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAgIHVpbnQ4X3QgY3JjSW5pdDA7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IGxlYXN0IHNpZ25pZmljYW50IGJ5dGUKKyAgIHVpbnQ4X3QgY3JjSW5pdDE7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IG1pZGRsZSBieXRlCisgICB1aW50OF90IGNyY0luaXQyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtb3N0IHNpZ25pZmljYW50IGJ5dGUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUgY29ubmVjdGlvbiBldmVudCBhcyBzb29uIGFzIGFsbG93ZWQKKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBjb25uZWN0aW9uIGV2ZW50IGFzIHNvb24gYXMgYWxsb3dlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVTbGF2ZVBhcgorLy8hIEB7CisvLyEgUGFyYW1ldGVyIHN0cnVjdHVyZSBmb3Igc2xhdmUgKENNRF9CTEVfU0xBVkUpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVNsYXZlUGFyX3MgeworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgZGF0YVF1ZXVlX3QqIHBUeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdHJhbnNtaXQgcXVldWUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ25vcmVkOjE7ICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgaWdub3JlZCBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaENyY0VycjoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaEVtcHR5OjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBlbXB0eSBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVMZW5CeXRlOjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBsZW5ndGggYnl0ZSBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVDcmM6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBDUkMgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJBcHBlbmRSc3NpOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIFJTU0kgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3RhdHVzOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHN0YXR1cyBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICB9IHJ4Q29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBiaXRzIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBlbnRyaWVzCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBsYXN0UnhTbjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBTTiBiaXQgb2YgdGhlIGhlYWRlciBvZiB0aGUgbGFzdCBwYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0sKKyAgICAgIHVpbnQ4X3QgbGFzdFR4U246MTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgU04gYml0IG9mIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0CisgICAgICB1aW50OF90IG5leHRUeFNuOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFNOIGJpdCBvZiB0aGUgaGVhZGVyIG9mIHRoZSBuZXh0IHBhY2tldCB0byB0cmFuc21pdAorICAgICAgdWludDhfdCBiRmlyc3RQa3Q6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEZvciBzbGF2ZTogMCBpZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCBvbiB0aGUgY29ubmVjdGlvbiwgMSBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkF1dG9FbXB0eToxOyAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldCB3YXMgYW4gYXV0by1lbXB0eSBwYWNrZXQKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybFR4OjE7ICAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldCB3YXMgYW4gTEwgY29udHJvbCBwYWNrZXQgKExMSUQgPSAxMSkKKyAgICAgIHVpbnQ4X3QgYkxsQ3RybEFja1J4OjE7ICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCB3YXMgdGhlIEFDSyBvZiBhbiBMTCBjb250cm9sIHBhY2tldAorICAgICAgdWludDhfdCBiTGxDdHJsQWNrUGVuZGluZzoxOyAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIHBhY2tldCB3YXMgYW4gTEwgY29udHJvbCBwYWNrZXQgd2hpY2ggaGFzIG5vdCB5ZXQgYmVlbiBBQ0snZWQKKyAgIH0gc2VxU3RhdDsKKyAgIHVpbnQ4X3QgbWF4TmFjazsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBOQUNLcyByZWNlaXZlZCBiZWZvcmUgb3BlcmF0aW9uIGVuZHMuIDA6IE5vIGxpbWl0CisgICB1aW50OF90IG1heFBrdDsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0cmFuc21pdHRlZCBpbiB0aGUgb3BlcmF0aW9uIGJlZm9yZSBpdCBlbmRzLiAwOiBObyBsaW1pdAorICAgdWludDMyX3QgYWNjZXNzQWRkcmVzczsgICAgICAgICAgICAgIC8vITwgICAgICAgIEFjY2VzcyBhZGRyZXNzIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAgIHVpbnQ4X3QgY3JjSW5pdDA7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IGxlYXN0IHNpZ25pZmljYW50IGJ5dGUKKyAgIHVpbnQ4X3QgY3JjSW5pdDE7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IG1pZGRsZSBieXRlCisgICB1aW50OF90IGNyY0luaXQyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtb3N0IHNpZ25pZmljYW50IGJ5dGUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHRpbWVvdXRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGRlZmluZXMgdGltZW91dCBvZiB0aGUgZmlyc3QgcmVjZWl2ZSBvcGVyYXRpb24KKyAgIHJhdG1yX3QgdGltZW91dFRpbWU7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT50aW1lb3V0VHJpZ2dlcjwvY29kZT4gdGhhdCBkZWZpbmVzIHRpbWVvdXQgb2YgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgcmVjZWl2ZSBvcGVyYXRpb24KKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgdWludDhfdCBfX2R1bW15MTsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUgY29ubmVjdGlvbiBldmVudCBhcyBzb29uIGFzIGFsbG93ZWQKKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBjb25uZWN0aW9uIGV2ZW50IGFzIHNvb24gYXMgYWxsb3dlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVBZHZQYXIKKy8vISBAeworLy8hIFBhcmFtZXRlciBzdHJ1Y3R1cmUgZm9yIGFkdmVydGlzZXIgKENNRF9CTEVfQURWKikKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlQWR2UGFyX3MgeworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaElnbm9yZWQ6MTsgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBpZ25vcmVkIHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjRXJyOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBhY2tldHMgd2l0aCBDUkMgZXJyb3IgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoRW1wdHk6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGVtcHR5IHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiSW5jbHVkZUxlbkJ5dGU6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIGxlbmd0aCBieXRlIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTdGF0dXM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgc3RhdHVzIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFRpbWVzdGFtcDoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgIH0gcnhDb25maWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25maWd1cmF0aW9uIGJpdHMgZm9yIHRoZSByZWNlaXZlIHF1ZXVlIGVudHJpZXMKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGFkdkZpbHRlclBvbGljeToyOyAgICAgICAgLy8hPCBcYnJpZWYgQWR2ZXJ0aXNlciBmaWx0ZXIgcG9saWN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFByb2Nlc3Mgc2NhbiBhbmQgY29ubmVjdCByZXF1ZXN0cyBmcm9tIGFsbCBkZXZpY2VzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFByb2Nlc3MgY29ubmVjdCByZXF1ZXN0cyBmcm9tIGFsbCBkZXZpY2VzIGFuZCBvbmx5IHNjYW4gcmVxdWVzdHMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGRldmljZXMgdGhhdCBhcmUgaW4gdGhlIHdoaXRlIGxpc3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUHJvY2VzcyBzY2FuIHJlcXVlc3RzIGZyb20gYWxsIGRldmljZXMgYW5kIG9ubHkgY29ubmVjdCByZXF1ZXN0cyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgZGV2aWNlcyB0aGF0IGFyZSBpbiB0aGUgd2hpdGUgbGlzdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBQcm9jZXNzIHNjYW4gYW5kIGNvbm5lY3QgcmVxdWVzdHMgb25seSBmcm9tIGRldmljZXMgaW4gdGhlIHdoaXRlIGxpc3QKKyAgICAgIHVpbnQ4X3QgZGV2aWNlQWRkclR5cGU6MTsgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZGV2aWNlIGFkZHJlc3MgJm5kYXNoOyBwdWJsaWMgKDApIG9yIHJhbmRvbSAoMSkKKyAgICAgIHVpbnQ4X3QgcGVlckFkZHJUeXBlOjE7ICAgICAgICAgICAvLyE8ICAgICAgICBEaXJlY3RlZCBhZHZlcnRpc2VyOiBUaGUgdHlwZSBvZiB0aGUgcGVlciBhZGRyZXNzICZuZGFzaDsgcHVibGljICgwKSBvciByYW5kb20gKDEpCisgICAgICB1aW50OF90IGJTdHJpY3RMZW5GaWx0ZXI6MTsgICAgICAgLy8hPCBcYnJpZWYgMDogQWNjZXB0IGFueSBwYWNrZXQgd2l0aCBhIHZhbGlkIGFkdmVydGlzaW5nIHBhY2tldCBsZW5ndGg8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRGlzY2FyZCBtZXNzYWdlcyB3aXRoIGlsbGVnYWwgbGVuZ3RoIGZvciB0aGUgZ2l2ZW4gcGFja2V0IHR5cGUKKyAgICAgIHVpbnQ4X3QgOjI7CisgICAgICB1aW50OF90IHJwYU1vZGU6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgUmVzb2x2YWJsZSBwcml2YXRlIGFkZHJlc3MgbW9kZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBOb3JtYWwgb3BlcmF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFVzZSB3aGl0ZSBsaXN0IGZvciBhIHJlY2VpdmVkIFJQQSByZWdhcmRsZXNzIG9mIGZpbHRlciBwb2xpY3kKKyAgIH0gYWR2Q29uZmlnOworICAgdWludDhfdCBhZHZMZW47ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNpemUgb2YgYWR2ZXJ0aXNlciBkYXRhCisgICB1aW50OF90IHNjYW5Sc3BMZW47ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU2l6ZSBvZiBzY2FuIHJlc3BvbnNlIGRhdGEKKyAgIHVpbnQ4X3QqIHBBZHZEYXRhOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIEFEVipfSU5EIGRhdGEKKyAgIHVpbnQ4X3QqIHBTY2FuUnNwRGF0YTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIFNDQU5fUlNQIGRhdGEKKyAgIHVpbnQxNl90KiBwRGV2aWNlQWRkcmVzczsgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGRldmljZSBhZGRyZXNzIHVzZWQgZm9yIHRoaXMgZGV2aWNlCisgICByZmNfYmxlV2hpdGVMaXN0RW50cnlfdCAqcFdoaXRlTGlzdDsgLy8hPCAgICAgICAgUG9pbnRlciB0byB3aGl0ZSBsaXN0IG9yIHBlZXIgYWRkcmVzcyAoZGlyZWN0ZWQgYWR2ZXJ0aXNlcikKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgdWludDhfdCBfX2R1bW15MTsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUgYWR2ZXJ0aXNlciBldmVudCBhcyBzb29uIGFzIGFsbG93ZWQKKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBhZHZlcnRpc2VyIGV2ZW50IGFzIHNvb24gYXMgYWxsb3dlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBibGVTY2FubmVyUGFyCisvLyEgQHsKKy8vISBQYXJhbWV0ZXIgc3RydWN0dXJlIGZvciBzY2FubmVyIChDTURfQkxFX1NDQU5ORVIpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVNjYW5uZXJQYXJfcyB7CisgICBkYXRhUXVldWVfdCogcFJ4UTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byByZWNlaXZlIHF1ZXVlCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGlnbm9yZWQgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmNFcnI6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hFbXB0eToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgcGFja2V0cyBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJJbmNsdWRlTGVuQnl0ZToxOyAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgbGVuZ3RoIGJ5dGUgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFN0YXR1czoxOyAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBzdGF0dXMgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kVGltZXN0YW1wOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHRpbWVzdGFtcCB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgfSByeENvbmZpZzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmZpZ3VyYXRpb24gYml0cyBmb3IgdGhlIHJlY2VpdmUgcXVldWUgZW50cmllcworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3Qgc2NhbkZpbHRlclBvbGljeToxOyAgICAgICAvLyE8IFxicmllZiBTY2FubmluZyBmaWx0ZXIgcG9saWN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IEFjY2VwdCBhbGwgYWR2ZXJ0aXNlbWVudCBwYWNrZXRzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdCBvbmx5IGFkdmVydGlzZW1lbnQgcGFja2V0cyBmcm9tIGRldmljZXMgd2hlcmUgdGhlIGFkdmVydGlzZXIncyBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgaXMgaW4gdGhlIFdoaXRlIGxpc3QuCisgICAgICB1aW50OF90IGJBY3RpdmVTY2FuOjE7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogUGFzc2l2ZSBzY2FuPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjdGl2ZSBzY2FuCisgICAgICB1aW50OF90IGRldmljZUFkZHJUeXBlOjE7ICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdGhlIGRldmljZSBhZGRyZXNzICZuZGFzaDsgcHVibGljICgwKSBvciByYW5kb20gKDEpCisgICAgICB1aW50OF90IDoxOworICAgICAgdWludDhfdCBiU3RyaWN0TGVuRmlsdGVyOjE7ICAgICAgIC8vITwgXGJyaWVmIDA6IEFjY2VwdCBhbnkgcGFja2V0IHdpdGggYSB2YWxpZCBhZHZlcnRpc2luZyBwYWNrZXQgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IERpc2NhcmQgbWVzc2FnZXMgd2l0aCBpbGxlZ2FsIGxlbmd0aCBmb3IgdGhlIGdpdmVuIHBhY2tldCB0eXBlCisgICAgICB1aW50OF90IGJBdXRvV2xJZ25vcmU6MTsgICAgICAgICAgLy8hPCAgICAgICAgMTogQXV0b21hdGljYWxseSBzZXQgaWdub3JlIGJpdCBpbiB3aGl0ZSBsaXN0CisgICAgICB1aW50OF90IGJFbmRPblJwdDoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQ29udGludWUgc2Nhbm5lciBvcGVyYXRpb24gYWZ0ZXIgZWFjaCByZXBvcnRpbmcgQURWKl9JTkQgb3Igc2VuZGluZyBTQ0FOX1JTUDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBFbmQgc2Nhbm5lciBvcGVyYXRpb24gYWZ0ZXIgZWFjaCByZXBvcnRlZCBBRFYqX0lORCBhbmQgcG90ZW50aWFsbHkgU0NBTl9SU1AKKyAgICAgIHVpbnQ4X3QgcnBhTW9kZToxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBSZXNvbHZhYmxlIHByaXZhdGUgYWRkcmVzcyBtb2RlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IE5vcm1hbCBvcGVyYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIHdoaXRlIGxpc3QgZm9yIGEgcmVjZWl2ZWQgUlBBIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHBvbGljeQorICAgfSBzY2FuQ29uZmlnOworICAgdWludDE2X3QgcmFuZG9tU3RhdGU7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFN0YXRlIGZvciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIHVzZWQgaW4gYmFja29mZiBwcm9jZWR1cmUKKyAgIHVpbnQxNl90IGJhY2tvZmZDb3VudDsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQYXJhbWV0ZXIgPGk+YmFja29mZkNvdW50PC9pPiB1c2VkIGluIGJhY2tvZmYgcHJvY2VkdXJlLCBjZi4gQmx1ZXRvb3RoIDQuMCBzcGVjCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBsb2dVcHBlckxpbWl0OjQ7ICAgICAgICAgIC8vITwgICAgICAgIEJpbmFyeSBsb2dhcml0aG0gb2YgcGFyYW1ldGVyIHVwcGVyTGltaXQgdXNlZCBpbiBzY2FubmVyIGJhY2tvZmYgcHJvY2VkdXJlCisgICAgICB1aW50OF90IGJMYXN0U3VjY2VlZGVkOjE7ICAgICAgICAgLy8hPCBcYnJpZWYgMSBpZiB0aGUgbGFzdCBTQ0FOX1JTUCB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGFuZCA8Y29kZT51cHBlckxpbWl0PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIG5vdCBjaGFuZ2VkCisgICAgICB1aW50OF90IGJMYXN0RmFpbGVkOjE7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMSBpZiByZWNlcHRpb24gb2YgdGhlIGxhc3QgU0NBTl9SU1AgZmFpbGVkIGFuZCA8Y29kZT51cHBlckxpbWl0PC9jb2RlPiB3YXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgY2hhbmdlZAorICAgfSBiYWNrb2ZmUGFyOworICAgdWludDhfdCBzY2FuUmVxTGVuOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNpemUgb2Ygc2NhbiByZXF1ZXN0IGRhdGEKKyAgIHVpbnQ4X3QqIHBTY2FuUmVxRGF0YTsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIFNDQU5fUkVRIGRhdGEKKyAgIHVpbnQxNl90KiBwRGV2aWNlQWRkcmVzczsgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGRldmljZSBhZGRyZXNzIHVzZWQgZm9yIHRoaXMgZGV2aWNlCisgICByZmNfYmxlV2hpdGVMaXN0RW50cnlfdCAqcFdoaXRlTGlzdDsgLy8hPCAgICAgICAgUG9pbnRlciB0byB3aGl0ZSBsaXN0CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHRpbWVvdXRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AgcmVjZWl2aW5nIGFzIHNvb24gYXMgYWxsb3dlZAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gc3RvcCByZWNlaXZpbmcgYXMgc29vbiBhcyBhbGxvd2VkCisgICByYXRtcl90IHRpbWVvdXRUaW1lOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+dGltZW91dFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gc3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHJlY2VpdmluZyBhcyBzb29uIGFzIGFsbG93ZWQsIGVuZGluZyB3aXRoIEJMRV9ET05FX1JYVElNRU9VVAorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gc3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHJlY2VpdmluZyBhcyBzb29uIGFzIGFsbG93ZWQsIGVuZGluZyB3aXRoIEJMRV9ET05FX0VOREVECit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZUluaXRpYXRvclBhcgorLy8hIEB7CisvLyEgUGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgaW5pdGlhdG9yIChDTURfQkxFX0lOSVRJQVRPUikKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlSW5pdGlhdG9yUGFyX3MgeworICAgZGF0YVF1ZXVlX3QqIHBSeFE7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaElnbm9yZWQ6MTsgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBpZ25vcmVkIHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjRXJyOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBhY2tldHMgd2l0aCBDUkMgZXJyb3IgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoRW1wdHk6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGVtcHR5IHBhY2tldHMgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiSW5jbHVkZUxlbkJ5dGU6MTsgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIGxlbmd0aCBieXRlIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTdGF0dXM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgc3RhdHVzIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFRpbWVzdGFtcDoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgIH0gcnhDb25maWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25maWd1cmF0aW9uIGJpdHMgZm9yIHRoZSByZWNlaXZlIHF1ZXVlIGVudHJpZXMKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJVc2VXaGl0ZUxpc3Q6MTsgICAgICAgICAgLy8hPCBcYnJpZWYgSW5pdGlhdG9yIGZpbHRlciBwb2xpY3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogVXNlIHNwZWNpZmljIHBlZXIgYWRkcmVzczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2Ugd2hpdGUgbGlzdAorICAgICAgdWludDhfdCBiRHluYW1pY1dpbk9mZnNldDoxOyAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGR5bmFtaWMgV2luT2Zmc2V0IGluc2VydGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2UgZHluYW1pYyBXaW5PZmZzZXQgaW5zZXJ0aW9uCisgICAgICB1aW50OF90IGRldmljZUFkZHJUeXBlOjE7ICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdGhlIGRldmljZSBhZGRyZXNzICZuZGFzaDsgcHVibGljICgwKSBvciByYW5kb20gKDEpCisgICAgICB1aW50OF90IHBlZXJBZGRyVHlwZToxOyAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdGhlIHBlZXIgYWRkcmVzcyAmbmRhc2g7IHB1YmxpYyAoMCkgb3IgcmFuZG9tICgxKQorICAgICAgdWludDhfdCBiU3RyaWN0TGVuRmlsdGVyOjE7ICAgICAgIC8vITwgXGJyaWVmIDA6IEFjY2VwdCBhbnkgcGFja2V0IHdpdGggYSB2YWxpZCBhZHZlcnRpc2luZyBwYWNrZXQgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IERpc2NhcmQgbWVzc2FnZXMgd2l0aCBpbGxlZ2FsIGxlbmd0aCBmb3IgdGhlIGdpdmVuIHBhY2tldCB0eXBlCisgICB9IGluaXRDb25maWc7CisgICB1aW50OF90IF9fZHVtbXkwOworICAgdWludDhfdCBjb25uZWN0UmVxTGVuOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNpemUgb2YgY29ubmVjdCByZXF1ZXN0IGRhdGEKKyAgIHVpbnQ4X3QqIHBDb25uZWN0UmVxRGF0YTsgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIExMRGF0YSB0byBnbyBpbiB0aGUgQ09OTkVDVF9SRVEKKyAgIHVpbnQxNl90KiBwRGV2aWNlQWRkcmVzczsgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGRldmljZSBhZGRyZXNzIHVzZWQgZm9yIHRoaXMgZGV2aWNlCisgICByZmNfYmxlV2hpdGVMaXN0RW50cnlfdCAqcFdoaXRlTGlzdDsgLy8hPCAgICAgICAgUG9pbnRlciB0byB3aGl0ZSBsaXN0IG9yIHBlZXIgYWRkcmVzcworICAgcmF0bXJfdCBjb25uZWN0VGltZTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEluZGljYXRpb24gb2YgdGltZXIgdmFsdWUgb2YgdGhlIGZpcnN0IHBvc3NpYmxlIHN0YXJ0IHRpbWUgb2YgdGhlIGZpcnN0IGNvbm5lY3Rpb24gZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU2V0IHRvIHRoZSBjYWxjdWxhdGVkIHZhbHVlIGlmIGEgY29ubmVjdGlvbiBpcyBtYWRlIGFuZCB0byB0aGUgbmV4dCBwb3NzaWJsZSBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdGltZSBpZiBub3QuCisgICB1aW50MTZfdCBfX2R1bW15MTsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHRpbWVvdXRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIHN0b3AgcmVjZWl2aW5nIGFzIHNvb24gYXMgYWxsb3dlZAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gc3RvcCByZWNlaXZpbmcgYXMgc29vbiBhcyBhbGxvd2VkCisgICByYXRtcl90IHRpbWVvdXRUaW1lOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+dGltZW91dFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gc3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHJlY2VpdmluZyBhcyBzb29uIGFzIGFsbG93ZWQsIGVuZGluZyB3aXRoIEJMRV9ET05FX1JYVElNRU9VVAorICAgcmF0bXJfdCBlbmRUaW1lOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRpbWUgdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmVuZFRyaWdnZXI8L2NvZGU+IHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gc3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHJlY2VpdmluZyBhcyBzb29uIGFzIGFsbG93ZWQsIGVuZGluZyB3aXRoIEJMRV9ET05FX0VOREVECit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZUdlbmVyaWNSeFBhcgorLy8hIEB7CisvLyEgUGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgZ2VuZXJpYyBSeCAoQ01EX0JMRV9HRU5FUklDX1JYKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVHZW5lcmljUnhQYXJfcyB7CisgICBkYXRhUXVldWVfdCogcFJ4UTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byByZWNlaXZlIHF1ZXVlLiBNYXkgYmUgTlVMTDsgaWYgc28sIHJlY2VpdmVkIHBhY2tldHMgYXJlIG5vdCBzdG9yZWQKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ25vcmVkOjE7ICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgaWdub3JlZCBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaENyY0VycjoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkF1dG9GbHVzaEVtcHR5OjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBlbXB0eSBwYWNrZXRzIGZyb20gUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVMZW5CeXRlOjE7ICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBsZW5ndGggYnl0ZSBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVDcmM6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBDUkMgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJBcHBlbmRSc3NpOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIFJTU0kgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiQXBwZW5kU3RhdHVzOjE7ICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhIHN0YXR1cyBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICB9IHJ4Q29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZmlndXJhdGlvbiBiaXRzIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBlbnRyaWVzCisgICB1aW50OF90IGJSZXBlYXQ7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRW5kIG9wZXJhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBwYWNrZXQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVzdGFydCByZWNlaXZlciBhZnRlciByZWNlaXZpbmcgYSBwYWNrZXQKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgdWludDMyX3QgYWNjZXNzQWRkcmVzczsgICAgICAgICAgICAgIC8vITwgICAgICAgIEFjY2VzcyBhZGRyZXNzIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAgIHVpbnQ4X3QgY3JjSW5pdDA7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IGxlYXN0IHNpZ25pZmljYW50IGJ5dGUKKyAgIHVpbnQ4X3QgY3JjSW5pdDE7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDUkMgaW5pdGlhbGl6YXRpb24gdmFsdWUgdXNlZCBvbiB0aGUgY29ubmVjdGlvbiAmbmRhc2g7IG1pZGRsZSBieXRlCisgICB1aW50OF90IGNyY0luaXQyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1JDIGluaXRpYWxpemF0aW9uIHZhbHVlIHVzZWQgb24gdGhlIGNvbm5lY3Rpb24gJm5kYXNoOyBtb3N0IHNpZ25pZmljYW50IGJ5dGUKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUgUnggb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUnggb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZVR4VGVzdFBhcgorLy8hIEB7CisvLyEgUGFyYW1ldGVyIHN0cnVjdHVyZSBmb3IgVHggdGVzdCAoQ01EX0JMRV9UWF9URVNUKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVUeFRlc3RQYXJfcyB7CisgICB1aW50MTZfdCBudW1QYWNrZXRzOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgTnVtYmVyIG9mIHBhY2tldHMgdG8gdHJhbnNtaXQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogVHJhbnNtaXQgdW5saW1pdGVkIG51bWJlciBvZiBwYWNrZXRzCisgICB1aW50OF90IHBheWxvYWRMZW5ndGg7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIG51bWJlciBvZiBwYXlsb2FkIGJ5dGVzIGluIGVhY2ggcGFja2V0LgorICAgdWludDhfdCBwYWNrZXRUeXBlOyAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRoZSBwYWNrZXQgdHlwZSB0byBiZSB1c2VkLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgQmx1ZXRvb3RoIDQuMCBzcGVjLCBWb2x1bWUgMiwgUGFydCBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNlY3Rpb24gNy44LjI5CisgICByYXRtcl90IHBlcmlvZDsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJhZGlvIHRpbWVyIGN5Y2xlcyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHBhY2tldAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYk92ZXJyaWRlRGVmYXVsdDoxOyAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgZGVmYXVsdCBwYWNrZXQgZW5jb2Rpbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT3ZlcnJpZGUgcGFja2V0IGNvbnRlbnRzCisgICAgICB1aW50OF90IGJVc2VQcmJzOToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiBpcyAxOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2UgUFJCUzkgZW5jb2Rpbmcgb2YgcGFja2V0CisgICAgICB1aW50OF90IGJVc2VQcmJzMTU6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgSWYgPGNvZGU+Yk92ZXJyaWRlPC9jb2RlPiBpcyAxOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2UgUFJCUzE1IGVuY29kaW5nIG9mIHBhY2tldAorICAgfSBjb25maWc7CisgICB1aW50OF90IGJ5dGVWYWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgPGNvZGU+Y29uZmlnLmJPdmVycmlkZTwvY29kZT4gaXMgMSwgdmFsdWUgb2YgZWFjaCBieXRlIHRvIGJlIHNlbnQKKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIFRlc3QgVHggb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGVzdCBUeCBvcGVyYXRpb24KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlTWFzdGVyU2xhdmVPdXRwdXQKKy8vISBAeworLy8hIE91dHB1dCBzdHJ1Y3R1cmUgZm9yIG1hc3RlciBhbmQgc2xhdmUgKENNRF9CTEVfTUFTVEVSIGFuZCBDTURfQkxFX1NMQVZFKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVNYXN0ZXJTbGF2ZU91dHB1dF9zIHsKKyAgIHVpbnQ4X3QgblR4OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUb3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGF1dG8tZW1wdHkgYW5kIHJldHJhbnNtaXNzaW9ucykgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB0cmFuc21pdHRlZAorICAgdWludDhfdCBuVHhBY2s7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRvdGFsIG51bWJlciBvZiB0cmFuc21pdHRlZCBwYWNrZXRzIChpbmNsdWRpbmcgYXV0by1lbXB0eSkgdGhhdCBoYXZlIGJlZW4gQUNLJ2VkCisgICB1aW50OF90IG5UeEN0cmw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHVuaXF1ZSBMTCBjb250cm9sIHBhY2tldHMgZnJvbSB0aGUgVHggcXVldWUgdGhhdCBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQKKyAgIHVpbnQ4X3QgblR4Q3RybEFjazsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgTEwgY29udHJvbCBwYWNrZXRzIGZyb20gdGhlIFR4IHF1ZXVlIHRoYXQgaGF2ZSBiZWVuIGZpbmlzaGVkIChBQ0snZWQpCisgICB1aW50OF90IG5UeEN0cmxBY2tBY2s7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgTnVtYmVyIG9mIExMIGNvbnRyb2wgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiBBQ0snZWQgYW5kIHdoZXJlIGFuIEFDSyBoYXMgYmVlbiBzZW50IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgcmVzcG9uc2UKKyAgIHVpbnQ4X3QgblR4UmV0cmFuczsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIHRoYXQgaGFzIGJlZW4gZG9uZQorICAgdWludDhfdCBuVHhFbnRyeURvbmU7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIGZyb20gdGhlIFR4IHF1ZXVlIHRoYXQgaGF2ZSBiZWVuIGZpbmlzaGVkIChBQ0snZWQpCisgICB1aW50OF90IG5SeE9rOyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgd2l0aCBwYXlsb2FkLCBDUkMgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50OF90IG5SeEN0cmw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIExMIGNvbnRyb2wgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgbm90IGlnbm9yZWQKKyAgIHVpbnQ4X3QgblJ4Q3RybEFjazsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBOdW1iZXIgb2YgTEwgY29udHJvbCBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIHdpdGggQ1JDIE9LIGFuZCBub3QgaWdub3JlZCwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdGhlbiBBQ0snZWQKKyAgIHVpbnQ4X3QgblJ4Tm9rOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBlcnJvcgorICAgdWludDhfdCBuUnhJZ25vcmVkOyAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIHdpdGggQ1JDIE9LIGFuZCBpZ25vcmVkIGR1ZSB0byByZXBlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHNlcXVlbmNlIG51bWJlcgorICAgdWludDhfdCBuUnhFbXB0eTsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIHdpdGggQ1JDIE9LIGFuZCBubyBwYXlsb2FkCisgICB1aW50OF90IG5SeEJ1ZkZ1bGw7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYW5kIGRpc2NhcmRlZCBkdWUgdG8gbGFjayBvZiBidWZmZXIgc3BhY2UKKyAgIGludDhfdCBsYXN0UnNzaTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSU1NJIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiVGltZVN0YW1wVmFsaWQ6MTsgICAgICAgIC8vITwgICAgICAgIDEgaWYgYSB2YWxpZCB0aW1lIHN0YW1wIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGltZVN0YW1wOyAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiTGFzdENyY0VycjoxOyAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0IGhhZCBDUkMgZXJyb3I7IDAgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJMYXN0SWdub3JlZDoxOyAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgd2l0aCBDUkMgT0sgd2FzIGlnbm9yZWQ7IDAgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJMYXN0RW1wdHk6MTsgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQgd2l0aCBDUkMgT0sgd2FzIGVtcHR5OyAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiTGFzdEN0cmw6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIE9LIHdhcyBlbXB0eTsgMCBvdGhlcndpc2UKKyAgICAgIHVpbnQ4X3QgYkxhc3RNZDoxOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCB3aXRoIENSQyBPSyBoYWQgTUQgPSAxOyAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiTGFzdEFjazoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDEgaWYgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIE9LIHdhcyBhbiBBQ0sgb2YgYSB0cmFuc21pdHRlZCBwYWNrZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMCBvdGhlcndpc2UKKyAgIH0gcGt0U3RhdHVzOworICAgcmF0bXJfdCB0aW1lU3RhbXA7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNsYXZlIG9wZXJhdGlvbjogVGltZSBzdGFtcCBvZiBmaXJzdCByZWNlaXZlZCBwYWNrZXQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlQWR2T3V0cHV0CisvLyEgQHsKKy8vISBPdXRwdXQgc3RydWN0dXJlIGZvciBhZHZlcnRpc2VyIChDTURfQkxFX0FEViopCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZUFkdk91dHB1dF9zIHsKKyAgIHVpbnQxNl90IG5UeEFkdkluZDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyBjb21wbGV0ZWx5IHRyYW5zbWl0dGVkCisgICB1aW50OF90IG5UeFNjYW5Sc3A7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mICBTQ0FOX1JTUCBwYWNrZXRzIHRyYW5zbWl0dGVkCisgICB1aW50OF90IG5SeFNjYW5SZXE7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIFNDQU5fUkVRIHBhY2tldHMgcmVjZWl2ZWQgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50OF90IG5SeENvbm5lY3RSZXE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIENPTk5FQ1RfUkVRIHBhY2tldHMgcmVjZWl2ZWQgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50OF90IF9fZHVtbXkwOworICAgdWludDE2X3QgblJ4Tm9rOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yCisgICB1aW50MTZfdCBuUnhJZ25vcmVkOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIGJ1dCBpZ25vcmVkCisgICB1aW50OF90IG5SeEJ1ZkZ1bGw7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBkaWQgbm90IGZpdCBpbiBSeCBxdWV1ZQorICAgaW50OF90IGxhc3RSc3NpOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBSU1NJIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldAorICAgcmF0bXJfdCB0aW1lU3RhbXA7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRpbWUgc3RhbXAgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZVNjYW5uZXJPdXRwdXQKKy8vISBAeworLy8hIE91dHB1dCBzdHJ1Y3R1cmUgZm9yIHNjYW5uZXIgKENNRF9CTEVfU0NBTk5FUikKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlU2Nhbm5lck91dHB1dF9zIHsKKyAgIHVpbnQxNl90IG5UeFNjYW5SZXE7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgdHJhbnNtaXR0ZWQgU0NBTl9SRVEgcGFja2V0cworICAgdWludDE2X3QgbkJhY2tlZE9mZlNjYW5SZXE7ICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBTQ0FOX1JFUSBwYWNrZXRzIG5vdCBzZW50IGR1ZSB0byBiYWNrb2ZmIHByb2NlZHVyZQorICAgdWludDE2X3QgblJ4QWR2T2s7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBBRFYqX0lORCBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIE9LIGFuZCBub3QgaWdub3JlZAorICAgdWludDE2X3QgblJ4QWR2SWdub3JlZDsgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBBRFYqX0lORCBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBidXQgaWdub3JlZAorICAgdWludDE2X3QgblJ4QWR2Tm9rOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBBRFYqX0lORCBwYWNrZXRzIHJlY2VpdmVkIHdpdGggQ1JDIGVycm9yCisgICB1aW50MTZfdCBuUnhTY2FuUnNwT2s7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIFNDQU5fUlNQIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgT0sgYW5kIG5vdCBpZ25vcmVkCisgICB1aW50MTZfdCBuUnhTY2FuUnNwSWdub3JlZDsgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIFNDQU5fUlNQIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIGJ1dCBpZ25vcmVkCisgICB1aW50MTZfdCBuUnhTY2FuUnNwTm9rOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIFNDQU5fUlNQIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKKyAgIHVpbnQ4X3QgblJ4QWR2QnVmRnVsbDsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB0aGF0IGRpZCBub3QgZml0IGluIFJ4IHF1ZXVlCisgICB1aW50OF90IG5SeFNjYW5Sc3BCdWZGdWxsOyAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIFNDQU5fUlNQIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCBkaWQgbm90IGZpdCBpbiBSeCBxdWV1ZQorICAgaW50OF90IGxhc3RSc3NpOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBSU1NJIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldAorICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHN0YW1wIG9mIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBBRFYqX0lORCBwYWNrZXQgdGhhdCB3YXMgbm90IGlnbm9yZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlSW5pdGlhdG9yT3V0cHV0CisvLyEgQHsKKy8vISBPdXRwdXQgc3RydWN0dXJlIGZvciBpbml0aWF0b3IgKENNRF9CTEVfSU5JVElBVE9SKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVJbml0aWF0b3JPdXRwdXRfcyB7CisgICB1aW50OF90IG5UeENvbm5lY3RSZXE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHRyYW5zbWl0dGVkIENPTk5FQ1RfUkVRIHBhY2tldHMKKyAgIHVpbnQ4X3QgblJ4QWR2T2s7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBPSyBhbmQgbm90IGlnbm9yZWQKKyAgIHVpbnQxNl90IG5SeEFkdklnbm9yZWQ7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBPSywgYnV0IGlnbm9yZWQKKyAgIHVpbnQxNl90IG5SeEFkdk5vazsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgQURWKl9JTkQgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBlcnJvcgorICAgdWludDhfdCBuUnhBZHZCdWZGdWxsOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBBRFYqX0lORCBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgZGlkIG5vdCBmaXQgaW4gUnggcXVldWUKKyAgIGludDhfdCBsYXN0UnNzaTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgUlNTSSBvZiB0aGUgbGFzdCByZWNlaXZlZCBwYWNrZXQKKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHN0YW1wIG9mIHRoZSByZWNlaXZlZCBBRFYqX0lORCBwYWNrZXQgdGhhdCBjYXVzZWQgdHJhbnNtaXNzaW9uIG9mIENPTk5FQ1RfUkVRCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZUdlbmVyaWNSeE91dHB1dAorLy8hIEB7CisvLyEgT3V0cHV0IHN0cnVjdHVyZSBmb3IgZ2VuZXJpYyBSeCAoQ01EX0JMRV9HRU5FUklDX1JYKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVHZW5lcmljUnhPdXRwdXRfcyB7CisgICB1aW50MTZfdCBuUnhPazsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgd2l0aCBDUkMgT0sKKyAgIHVpbnQxNl90IG5SeE5vazsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB3aXRoIENSQyBlcnJvcgorICAgdWludDE2X3QgblJ4QnVmRnVsbDsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGFuZCBkaXNjYXJkZWQgZHVlIHRvIGxhY2sgb2YgYnVmZmVyIHNwYWNlCisgICBpbnQ4X3QgbGFzdFJzc2k7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFJTU0kgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0CisgICB1aW50OF90IF9fZHVtbXkwOworICAgcmF0bXJfdCB0aW1lU3RhbXA7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRpbWUgc3RhbXAgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZVR4VGVzdE91dHB1dAorLy8hIEB7CisvLyEgT3V0cHV0IHN0cnVjdHVyZSBmb3IgVHggdGVzdCAoQ01EX0JMRV9UWF9URVNUKQorCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19ibGVUeFRlc3RPdXRwdXRfcyB7CisgICB1aW50MTZfdCBuVHg7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgYmxlV2hpdGVMaXN0RW50cnkKKy8vISBAeworLy8hIFdoaXRlIGxpc3QgZW50cnkgc3RydWN0dXJlCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2JsZVdoaXRlTGlzdEVudHJ5X3MgeworICAgdWludDhfdCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiB3aGlsZSBsaXN0IGVudHJpZXMuIFVzZWQgaW4gdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBsaXN0IG9ubHkKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJFbmFibGU6MTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgZW50cnkgaXMgaW4gdXNlLCAwIGlmIHRoZSBlbnRyeSBpcyBub3QgaW4gdXNlCisgICAgICB1aW50OF90IGFkZHJUeXBlOjE7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgYWRkcmVzcyBpbiB0aGUgZW50cnkgJm5kYXNoOyBwdWJsaWMgKDApIG9yIHJhbmRvbSAoMSkKKyAgICAgIHVpbnQ4X3QgYldsSWduOjE7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAxIGlmIHRoZSBlbnRyeSBpcyB0byBiZSBpZ25vcmVkIGJ5IGEgc2Nhbm5lciwgMCBvdGhlcndpc2UuIFVzZWQgdG8gbWFzayBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBlbnRyaWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gc2Nhbm5lZCBhbmQgcmVwb3J0ZWQuCisgICAgICB1aW50OF90IDoxOworICAgICAgdWludDhfdCBiSXJrVmFsaWQ6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDEgaWYgYSB2YWxpZCBJUksgZXhpc3RzLCBzbyB0aGF0IHRoZSBlbnRyeSBpcyB0byBiZSBpZ25vcmVkIGJ5IGFuIGluaXRpYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwIG90aGVyd2lzZQorICAgfSBjb25mOworICAgdWludDE2X3QgYWRkcmVzczsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIExlYXN0IHNpZ25pZmljYW50IDE2IGJpdHMgb2YgdGhlIGFkZHJlc3MgY29udGFpbmVkIGluIHRoZSBlbnRyeQorICAgdWludDMyX3QgYWRkcmVzc0hpOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE1vc3Qgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiB0aGUgYWRkcmVzcyBjb250YWluZWQgaW4gdGhlIGVudHJ5Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGJsZVJ4U3RhdHVzCisvLyEgQHsKKy8vISBSZWNlaXZlIHN0YXR1cyBieXRlIHRoYXQgbWF5IGJlIGFwcGVuZGVkIHRvIG1lc3NhZ2UgaW4gcmVjZWl2ZSBidWZmZXIKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfYmxlUnhTdGF0dXNfcyB7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBjaGFubmVsOjY7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRoZSBjaGFubmVsIG9uIHdoaWNoIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkLCBwcm92aWRlZCBjaGFubmVsIGlzIGluIHRoZSByYW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDAmbmRhc2g7Mzk7IG90aGVyd2lzZSAweDNGCisgICAgICB1aW50OF90IGJJZ25vcmU6MTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgcGFja2V0IGlzIG1hcmtlZCBhcyBpZ25vcmVkLCAwIG90aGVyd2lzZQorICAgICAgdWludDhfdCBiQ3JjRXJyOjE7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDEgaWYgdGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IsIDAgb3RoZXJ3aXNlCisgICB9IHN0YXR1czsKK307CisKKy8vISBAfQorCisvLyEgQH0KKy8vISBAfQorI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9ibGVfbWFpbGJveC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfYmxlX21haWxib3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTIzNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfYmxlX21haWxib3guaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfYmxlX21haWxib3guaAorKiAgUmV2aXNlZDogICAgICAgICQgJAorKiAgUmV2aXNpb246ICAgICAgICQgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluaXRpb25zIGZvciBCTEUgaW50ZXJmYWNlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9CTEVfTUFJTEJPWF9ICisjZGVmaW5lIF9CTEVfTUFJTEJPWF9ICisKKy8vLyBcbmFtZSBSYWRpbyBvcGVyYXRpb24gc3RhdHVzCisvLy9AeworLy8vIFxuYW1lIE9wZXJhdGlvbiBmaW5pc2hlZCBub3JtYWxseQorLy8vQHsKKyNkZWZpbmUgQkxFX0RPTkVfT0sgICAgICAgICAgICAgMHgxNDAwICAvLy88IE9wZXJhdGlvbiBlbmRlZCBub3JtYWxseQorI2RlZmluZSBCTEVfRE9ORV9SWFRJTUVPVVQgICAgICAweDE0MDEgIC8vLzwgVGltZW91dCBvZiBmaXJzdCBSeCBvZiBzbGF2ZSBvcGVyYXRpb24gb3IgZW5kIG9mIHNjYW4gd2luZG93CisjZGVmaW5lIEJMRV9ET05FX05PU1lOQyAgICAgICAgIDB4MTQwMiAgLy8vPCBUaW1lb3V0IG9mIHN1YnNlcXVlbnQgUngKKyNkZWZpbmUgQkxFX0RPTkVfUlhFUlIgICAgICAgICAgMHgxNDAzICAvLy88IE9wZXJhdGlvbiBlbmRlZCBiZWNhdXNlIG9mIHJlY2VpdmUgZXJyb3IgKENSQyBvciBvdGhlcikKKyNkZWZpbmUgQkxFX0RPTkVfQ09OTkVDVCAgICAgICAgMHgxNDA0ICAvLy88IENPTk5FQ1RfUkVRIHJlY2VpdmVkIG9yIHRyYW5zbWl0dGVkCisjZGVmaW5lIEJMRV9ET05FX01BWE5BQ0sgICAgICAgIDB4MTQwNSAgLy8vPCBNYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgZXhjZWVkZWQKKyNkZWZpbmUgQkxFX0RPTkVfRU5ERUQgICAgICAgICAgMHgxNDA2ICAvLy88IE9wZXJhdGlvbiBzdG9wcGVkIGFmdGVyIGVuZCB0cmlnZ2VyCisjZGVmaW5lIEJMRV9ET05FX0FCT1JUICAgICAgICAgIDB4MTQwNyAgLy8vPCBPcGVyYXRpb24gYWJvcnRlZCBieSBjb21tYW5kCisjZGVmaW5lIEJMRV9ET05FX1NUT1BQRUQgICAgICAgIDB4MTQwOCAgLy8vPCBPcGVyYXRpb24gc3RvcHBlZCBhZnRlciBzdG9wIGNvbW1hbmQKKy8vL0B9CisvLy8gXG5hbWUgT3BlcmF0aW9uIGZpbmlzaGVkIHdpdGggZXJyb3IKKy8vL0B7CisjZGVmaW5lIEJMRV9FUlJPUl9QQVIgICAgICAgICAgIDB4MTgwMCAgLy8vPCBJbGxlZ2FsIHBhcmFtZXRlcgorI2RlZmluZSBCTEVfRVJST1JfUlhCVUYgICAgICAgICAweDE4MDEgIC8vLzwgTm8gYXZhaWxhYmxlIFJ4IGJ1ZmZlciAoQWR2ZXJ0aXNlciwgU2Nhbm5lciwgSW5pdGlhdG9yKQorI2RlZmluZSBCTEVfRVJST1JfTk9fU0VUVVAgICAgICAweDE4MDIgIC8vLzwgT3BlcmF0aW9uIHVzaW5nIFJ4IG9yIFR4IGF0dGVtdGVkIHdoZW4gbm90IGluIEJMRSBtb2RlCisjZGVmaW5lIEJMRV9FUlJPUl9OT19GUyAgICAgICAgIDB4MTgwMyAgLy8vPCBPcGVyYXRpb24gdXNpbmcgUnggb3IgVHggYXR0ZW10ZWQgd2l0aG91dCBmcmVxdWVuY3kgc3ludGggY29uZmlndXJlZAorI2RlZmluZSBCTEVfRVJST1JfU1lOVEhfUFJPRyAgICAweDE4MDQgIC8vLzwgU3ludGhlc2l6ZXIgcHJvZ3JhbW1pbmcgZmFpbGVkIHRvIGNvbXBsZXRlIG9uIHRpbWUKKyNkZWZpbmUgQkxFX0VSUk9SX1JYT1ZGICAgICAgICAgMHgxODA1ICAvLy88IFJlY2VpdmVyIG92ZXJmbG93ZWQgZHVyaW5nIG9wZXJhdGlvbgorI2RlZmluZSBCTEVfRVJST1JfVFhVTkYgICAgICAgICAweDE4MDYgIC8vLzwgVHJhbnNtaXR0ZXIgdW5kZXJmbG93ZWQgZHVyaW5nIG9wZXJhdGlvbgorLy8vQH0KKy8vL0B9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfY29tbW9uX2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTdiMzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9jb21tb25fY21kLmgKQEAgLTAsMCArMSw5MjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZl9jb21tb25fY21kLmgKKyogIFJldmlzZWQ6ICAgICAgICAkICQKKyogIFJldmlzaW9uOiAgICAgICAkICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBDQzI2eHggQVBJIGZvciBjb21tb24vZ2VuZXJpYyBjb21tYW5kcworKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0NPTU1PTl9DTURfSAorI2RlZmluZSBfX0NPTU1PTl9DTURfSAorCisjaWZuZGVmIF9fUkZDX1NUUlVDVAorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fUkZDX1NUUlVDVCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKQorI2Vsc2UKKyNkZWZpbmUgX19SRkNfU1RSVUNUCisjZW5kaWYKKyNlbmRpZgorCisvLyEgXGFkZHRvZ3JvdXAgcmZjCisvLyEgQHsKKworLy8hIFxhZGR0b2dyb3VwIGNvbW1vbl9jbWQKKy8vISBAeworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX21haWxib3guaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19jb21tYW5kX3MgcmZjX2NvbW1hbmRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfcmFkaW9PcF9zIHJmY19yYWRpb09wX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9OT1BfcyByZmNfQ01EX05PUF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUkFESU9fU0VUVVBfcyByZmNfQ01EX1JBRElPX1NFVFVQX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9GU19zIHJmY19DTURfRlNfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZTX09GRl9zIHJmY19DTURfRlNfT0ZGX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9SWF9URVNUX3MgcmZjX0NNRF9SWF9URVNUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9UWF9URVNUX3MgcmZjX0NNRF9UWF9URVNUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TWU5DX1NUT1BfUkFUX3MgcmZjX0NNRF9TWU5DX1NUT1BfUkFUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TWU5DX1NUQVJUX1JBVF9zIHJmY19DTURfU1lOQ19TVEFSVF9SQVRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0NPVU5UX3MgcmZjX0NNRF9DT1VOVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRlNfUE9XRVJVUF9zIHJmY19DTURfRlNfUE9XRVJVUF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRlNfUE9XRVJET1dOX3MgcmZjX0NNRF9GU19QT1dFUkRPV05fdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NDSF9JTU1fcyByZmNfQ01EX1NDSF9JTU1fdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0NPVU5UX0JSQU5DSF9zIHJmY19DTURfQ09VTlRfQlJBTkNIX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QQVRURVJOX0NIRUNLX3MgcmZjX0NNRF9QQVRURVJOX0NIRUNLX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9BQk9SVF9zIHJmY19DTURfQUJPUlRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NUT1BfcyByZmNfQ01EX1NUT1BfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0dFVF9SU1NJX3MgcmZjX0NNRF9HRVRfUlNTSV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfVVBEQVRFX1JBRElPX1NFVFVQX3MgcmZjX0NNRF9VUERBVEVfUkFESU9fU0VUVVBfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1RSSUdHRVJfcyByZmNfQ01EX1RSSUdHRVJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0dFVF9GV19JTkZPX3MgcmZjX0NNRF9HRVRfRldfSU5GT190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU1RBUlRfUkFUX3MgcmZjX0NNRF9TVEFSVF9SQVRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BJTkdfcyByZmNfQ01EX1BJTkdfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JFQURfUkZSRUdfcyByZmNfQ01EX1JFQURfUkZSRUdfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0FERF9EQVRBX0VOVFJZX3MgcmZjX0NNRF9BRERfREFUQV9FTlRSWV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUkVNT1ZFX0RBVEFfRU5UUllfcyByZmNfQ01EX1JFTU9WRV9EQVRBX0VOVFJZX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9GTFVTSF9RVUVVRV9zIHJmY19DTURfRkxVU0hfUVVFVUVfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0NMRUFSX1JYX3MgcmZjX0NNRF9DTEVBUl9SWF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUkVNT1ZFX1BFTkRJTkdfRU5UUklFU19zIHJmY19DTURfUkVNT1ZFX1BFTkRJTkdfRU5UUklFU190OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1JBVF9DTVBfcyByZmNfQ01EX1NFVF9SQVRfQ01QX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TRVRfUkFUX0NQVF9zIHJmY19DTURfU0VUX1JBVF9DUFRfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0RJU0FCTEVfUkFUX0NIX3MgcmZjX0NNRF9ESVNBQkxFX1JBVF9DSF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU0VUX1JBVF9PVVRQVVRfcyByZmNfQ01EX1NFVF9SQVRfT1VUUFVUX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9BUk1fUkFUX0NIX3MgcmZjX0NNRF9BUk1fUkFUX0NIX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9ESVNBUk1fUkFUX0NIX3MgcmZjX0NNRF9ESVNBUk1fUkFUX0NIX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TRVRfVFhfUE9XRVJfcyByZmNfQ01EX1NFVF9UWF9QT1dFUl90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfVVBEQVRFX0ZTX3MgcmZjX0NNRF9VUERBVEVfRlNfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0JVU19SRVFVRVNUX3MgcmZjX0NNRF9CVVNfUkVRVUVTVF90OworCisvLyEgXGFkZHRvZ3JvdXAgY29tbWFuZAorLy8hIEB7CitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19jb21tYW5kX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlcgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCByYWRpb09wCisvLyEgQHsKKy8vISBDb21tb24gZGVmaW5pdGlvbiBmb3IgcmFkaW8gb3BlcmF0aW9uIGNvbW1hbmRzCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3JhZGlvT3BfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX05PUAorLy8hIEB7CisjZGVmaW5lIENNRF9OT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAxCisvLyEgTm8gT3BlcmF0aW9uIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9OT1BfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwMQorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9SQURJT19TRVRVUAorLy8hIEB7CisjZGVmaW5lIENNRF9SQURJT19TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAyCisvLyEgUmFkaW8gU2V0dXAgQ29tbWFuZCBmb3IgUHJlLURlZmluZWQgU2NoZW1lcworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JBRElPX1NFVFVQX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MDIKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBtb2RlOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRoZSBtYWluIG1vZGUgdG8gdXNlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDA6IEJMRTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDAxOiBJRUVFIDgwMi4xNS40PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDI6IDIgTWJwcyBHRlNLPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDU6IDUgTWJwcyBjb2RlZCA4LUZTSzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweEZGOiBLZWVwIGV4aXN0aW5nIG1vZGU7IHVwZGF0ZSBvdmVycmlkZXMgb25seTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBmcm9udEVuZE1vZGU6MzsgICAgICAgICAgLy8hPCBcYnJpZWYgMHgwMDogRGlmZmVyZW50aWFsIG1vZGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwMTogU2luZ2xlLWVuZGVkIG1vZGUgUkZQPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDI6IFNpbmdsZS1lbmRlZCBtb2RlIFJGTjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDA1IFNpbmdsZS1lbmRlZCBtb2RlIFJGUCB3aXRoIGV4dGVybmFsIGZyb250ZW5kIGNvbnRyb2wgb24gUkYgcGlucyAoUkZOIGFuZCBSWFRYKTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDA2IFNpbmdsZS1lbmRlZCBtb2RlIFJGTiB3aXRoIGV4dGVybmFsIGZyb250ZW5kIGNvbnRyb2wgb24gUkYgcGlucyAoUkZQIGFuZCBSWFRYKTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDE2X3QgYmlhc01vZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEludGVybmFsIGJpYXM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRXh0ZXJuYWwgYmlhcworICAgICAgdWludDE2X3QgYW5hbG9nQ2ZnTW9kZTo2OyAgICAgICAgIC8vITwgXGJyaWVmIDB4MDA6IFdyaXRlIGFuYWxvZyBjb25maWd1cmF0aW9uLjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSZXF1aXJlZCBmaXJzdCB0aW1lIGFmdGVyIGJvb3QgYW5kIHdoZW4gY2hhbmdpbmcgZnJlcXVlbmN5IGJhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBvciBmcm9udC1lbmQgY29uZmlndXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDJEOiBLZWVwIGFuYWxvZyBjb25maWd1cmF0aW9uLjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBNYXkgYmUgdXNlZCBhZnRlciBzdGFuZGJ5IG9yIHdoZW4gY2hhbmdpbmcgbW9kZSB3aXRoIHRoZSBzYW1lIGZyZXF1ZW5jeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGJhbmQgYW5kIGZyb250LWVuZCBjb25maWd1cmF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCBiTm9Gc1Bvd2VyVXA6MTsgICAgICAgICAgLy8hPCBcYnJpZWYgMDogUG93ZXIgdXAgZnJlcXVlbmN5IHN5bnRoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IERvIG5vdCBwb3dlciB1cCBmcmVxdWVuY3kgc3ludGgKKyAgIH0gY29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25maWd1cmF0aW9uIG9wdGlvbnMKKyAgIHVpbnQxNl90IHR4UG93ZXI7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmFuc21pdCBwb3dlcgorICAgdWludDMyX3QqIHBSZWdPdmVycmlkZTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFBvaW50ZXIgdG8gYSBsaXN0IG9mIGhhcmR3YXJlIGFuZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyB0byBvdmVycmlkZS4gSWYgTlVMTCwgbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBvdmVycmlkZSBpcyB1c2VkLgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfRlMKKy8vISBAeworI2RlZmluZSBDTURfRlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMworLy8hIEZyZXF1ZW5jeSBTeW50aGVzaXplciBQcm9ncmFtbWluZyBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRlNfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwMworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50MTZfdCBmcmVxdWVuY3k7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGZyZXF1ZW5jeSBpbiBNSHogdG8gdHVuZSB0bworICAgdWludDE2X3QgZnJhY3RGcmVxOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZnJlcXVlbmN5IHRvIHR1bmUgdG8KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJUeE1vZGU6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU3RhcnQgc3ludGggaW4gUlggbW9kZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTdGFydCBzeW50aCBpbiBUWCBtb2RlCisgICAgICB1aW50OF90IHJlZkZyZXE6NjsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+CisgICB9IHN5bnRoQ29uZjsKKyAgIHVpbnQ4X3QgX19kdW1teTA7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA8aT5SZXNlcnZlZDwvaT4sIGFsd2F5cyB3cml0ZSAwCisgICB1aW50OF90IF9fZHVtbXkxOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+CisgICB1aW50OF90IF9fZHVtbXkyOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+CisgICB1aW50MTZfdCBfX2R1bW15MzsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgPGk+UmVzZXJ2ZWQ8L2k+Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9GU19PRkYKKy8vISBAeworI2RlZmluZSBDTURfRlNfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwNAorLy8hIENvbW1hbmQgZm9yIFR1cm5pbmcgb2ZmIEZyZXF1ZW5jeSBTeW50aGVzaXplcgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZTX09GRl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODA0CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1JYX1RFU1QKKy8vISBAeworI2RlZmluZSBDTURfUlhfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwNworLy8hIFJlY2VpdmVyIFRlc3QgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1JYX1RFU1RfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwNworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiRW5hRmlmbzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERvIG5vdCBlbmFibGUgRklGTyBpbiBtb2RlbSwgc28gdGhhdCByZWNlaXZlZCBkYXRhIGlzIG5vdCBhdmFpbGFibGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRW5hYmxlIEZJRk8gaW4gbW9kZW0gJm5kYXNoOyB0aGUgZGF0YSBtdXN0IGJlIHJlYWQgb3V0IGJ5IHRoZSBhcHBsaWNhdGlvbgorICAgICAgdWludDhfdCBiRnNPZmY6MTsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEtlZXAgZnJlcXVlbmN5IHN5bnRoIG9uIGFmdGVyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVHVybiBmcmVxdWVuY3kgc3ludGggb2ZmIGFmdGVyIGNvbW1hbmQKKyAgICAgIHVpbnQ4X3QgYk5vU3luYzoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBSdW4gc3luYyBzZWFyY2ggYXMgbm9ybWFsIGZvciB0aGUgY29uZmlndXJlZCBtb2RlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFdyaXRlIGNvcnJlbGF0aW9uIHRocmVzaG9sZHMgdG8gdGhlIG1heGltdW0gdmFsdWUgdG8gYXZvaWQgZ2V0dGluZyBzeW5jCisgICB9IGNvbmZpZzsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciBjbGFzc2lmaWVyIGZvciBlbmRpbmcgdGhlIG9wZXJhdGlvbgorICAgdWludDMyX3Qgc3luY1dvcmQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFN5bmMgd29yZCB0byB1c2UgZm9yIHJlY2VpdmVyCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSB0byBlbmQgdGhlIG9wZXJhdGlvbgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfVFhfVEVTVAorLy8hIEB7CisjZGVmaW5lIENNRF9UWF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODA4CisvLyEgVHJhbnNtaXR0ZXIgVGVzdCBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfVFhfVEVTVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODA4CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJVc2VDdzoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU2VuZCBtb2R1bGF0ZWQgc2lnbmFsPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFNlbmQgY29udGludW91cyB3YXZlCisgICAgICB1aW50OF90IGJGc09mZjoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogS2VlcCBmcmVxdWVuY3kgc3ludGggb24gYWZ0ZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBUdXJuIGZyZXF1ZW5jeSBzeW50aCBvZmYgYWZ0ZXIgY29tbWFuZAorICAgICAgdWludDhfdCB3aGl0ZW5Nb2RlOjI7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBEZWZhdWx0IHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBQUkJTLTE1PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFBSQlMtMzIKKyAgIH0gY29uZmlnOworICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHVpbnQxNl90IHR4V29yZDsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBWYWx1ZSB0byBzZW5kIHRvIHRoZSBtb2RlbSBiZWZvcmUgd2hpdGVuaW5nCisgICB1aW50OF90IF9fZHVtbXkxOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIGNsYXNzaWZpZXIgZm9yIGVuZGluZyB0aGUgb3BlcmF0aW9uCisgICB1aW50MzJfdCBzeW5jV29yZDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU3luYyB3b3JkIHRvIHVzZSBmb3IgdHJhbnNtaXR0ZXIKKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHRvIGVuZCB0aGUgb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9TWU5DX1NUT1BfUkFUCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NZTkNfU1RPUF9SQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDkKKy8vISBTeW5jaHJvbml6ZSBhbmQgU3RvcCBSYWRpbyBUaW1lciBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfU1lOQ19TVE9QX1JBVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODA5CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgcmF0bXJfdCByYXQwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRoZSByZXR1cm5lZCBSQVQgdGltZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgdGhlIFJBVCB3b3VsZCBoYXZlIGhhZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJUQyB3YXMgemVybworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfU1lOQ19TVEFSVF9SQVQKKy8vISBAeworI2RlZmluZSBDTURfU1lOQ19TVEFSVF9SQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwQQorLy8hIFN5bmNocm91c2x5IFN0YXJ0IFJhZGlvIFRpbWVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TWU5DX1NUQVJUX1JBVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODBBCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQxNl90IF9fZHVtbXkwOworICAgcmF0bXJfdCByYXQwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFRoZSBkZXNpcmVkIFJBVCB0aW1lciB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSB0aGUgUkFUIHdvdWxkIGhhdmUgaGFkIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUlRDIHdhcyB6ZXJvLiBUaGlzIHBhcmFtZXRlciBpcyByZXR1cm5lZCBieSBDTURfU1lOQ19TVE9QX1JBVAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQ09VTlQKKy8vISBAeworI2RlZmluZSBDTURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwQgorLy8hIENvdW50ZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0NPVU5UX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MEIKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDE2X3QgY291bnRlcjsgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENvdW50ZXIuIE9uIHN0YXJ0LCB0aGUgcmFkaW8gQ1BVIGRlY3JlbWVudHMgdGhlIHZhbHVlLCBhbmQgdGhlIGVuZCBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGRpZmZlcnMgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9GU19QT1dFUlVQCisvLyEgQHsKKyNkZWZpbmUgQ01EX0ZTX1BPV0VSVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MEMKKy8vISBQb3dlciB1cCBGcmVxdWVuY3kgU3ludGhlc3ppZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0ZTX1BPV0VSVVBfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwQworICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHVpbnQzMl90KiBwUmVnT3ZlcnJpZGU7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGEgbGlzdCBvZiBoYXJkd2FyZSBhbmQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdG8gb3ZlcnJpZGUuIElmIE5VTEwsIG5vIG92ZXJyaWRlIGlzIHVzZWQuCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9GU19QT1dFUkRPV04KKy8vISBAeworI2RlZmluZSBDTURfRlNfUE9XRVJET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwRAorLy8hIFBvd2VyIGRvd24gRnJlcXVlbmN5IFN5bnRoZXN6aWVyIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9GU19QT1dFUkRPV05fcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDgwRAorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgKyAxIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nLiAwOiBzYW1lLCAxOiBuZXh0LCAyOiBza2lwIG5leHQsIC4uLgorICAgfSBjb25kaXRpb247Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9TQ0hfSU1NCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NDSF9JTU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MTAKKy8vISBSdW4gSW1taWRpYXRlIENvbW1hbmQgYXMgUmFkaW8gT3BlcmF0aW9uIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TQ0hfSU1NX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MTAKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDE2X3QgX19kdW1teTA7CisgICB1aW50MzJfdCBjbWRyVmFsOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVmFsdWUgYXMgd291bGQgYmUgd3JpdHRlbiB0byBDTURSCisgICB1aW50MzJfdCBjbWRzdGFWYWw7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVmFsdWUgYXMgd291bGQgYmUgcmV0dXJuZWQgaW4gQ01EU1RBCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9DT1VOVF9CUkFOQ0gKKy8vISBAeworI2RlZmluZSBDTURfQ09VTlRfQlJBTkNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgxMgorLy8hIENvdW50ZXIgQ29tbWFuZCB3aXRoIEJyYW5jaCBvZiBDb21tYW5kIENoYWluCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQ09VTlRfQlJBTkNIX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA4MTIKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgdWludDE2X3QgY291bnRlcjsgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENvdW50ZXIuIE9uIHN0YXJ0LCB0aGUgcmFkaW8gQ1BVIGRlY3JlbWVudHMgdGhlIHZhbHVlLCBhbmQgdGhlIGVuZCBzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGRpZmZlcnMgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wSWZPazsgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBuZXh0IG9wZXJhdGlvbiBpZiBjb3VudGVyIGRpZCBub3QgZXhwaXJlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QQVRURVJOX0NIRUNLCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BBVFRFUk5fQ0hFQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MTMKKy8vISBDb21tYW5kIGZvciBDaGVja2luZyBhIFZhbHVlIGluIE1lbW9yeSBhZ2luc3QgYSBQYXR0ZXJuCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUEFUVEVSTl9DSEVDS19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwODEzCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBvcGVyYXRpb246MjsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgT3BlcmF0aW9uIHRvIHBlcmZvcm08YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogVHJ1ZSBpZiB2YWx1ZSA9PSA8Y29kZT5jb21wYXJlVmFsPC9jb2RlPjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBUcnVlIGlmIHZhbHVlIDwgPGNvZGU+Y29tcGFyZVZhbDwvY29kZT48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogVHJ1ZSBpZiB2YWx1ZSA+IDxjb2RlPmNvbXBhcmVWYWw8L2NvZGU+PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDE2X3QgYkJ5dGVSZXY6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElmIDEsIGludGVyY2hhbmdlIHRoZSBmb3VyIGJ5dGVzIG9mIHRoZSB2YWx1ZSwgc28gdGhhdCB0aGV5IGFyZSByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgbW9zdC1zaWduaWZpY2FudC1ieXRlLWZpcnN0LgorICAgICAgdWludDE2X3QgYkJpdFJldjoxOyAgICAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIHBlcmZvcm0gYml0IHJldmVyc2FsIG9mIHRoZSB2YWx1ZQorICAgICAgdWludDE2X3Qgc2lnbkV4dGVuZDo1OyAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFRyZWF0IHZhbHVlIGFuZCA8Y29kZT5jb21wYXJlVmFsPC9jb2RlPiBhcyB1bnNpZ25lZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxJm5kYXNoOzMxOiBUcmVhdCB2YWx1ZSBhbmQgPGNvZGU+Y29tcGFyZVZhbDwvY29kZT4gYXMgc2lnbmVkLCB3aGVyZSB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBnaXZlcyB0aGUgbnVtYmVyIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgc2lnbmVkIG51bWJlci4KKyAgICAgIHVpbnQxNl90IGJSeFZhbDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgPGNvZGU+cFZhbHVlPC9jb2RlPiBhcyBhIHBvaW50ZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVXNlIDxjb2RlPnBWYWx1ZTwvY29kZT4gYXMgYSBzaWduZWQgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgbGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGNvbW1pdHRlZCBSWCBlbnRyeSBlbGVtZW50CisgICB9IHBhdHRlcm5PcHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3B0aW9ucyBmb3IgY29tcGFyaXNvbgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcElmT2s7ICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbmV4dCBvcGVyYXRpb24gaWYgY29tcGFyaXNvbiByZXN1bHQgd2FzIHRydWUKKyAgIHVpbnQ4X3QqIHBWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlYWQgZnJvbSwgb3Igb2Zmc2V0IGZyb20gbGFzdCBSWCBlbnRyeSBpZiA8Y29kZT5wYXR0ZXJuT3B0LmJSeFZhbDwvY29kZT4gPT0gMQorICAgdWludDMyX3QgbWFzazsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEJpdCBtYXNrIHRvIGFwcGx5IGJlZm9yZSBjb21wYXJpc29uCisgICB1aW50MzJfdCBjb21wYXJlVmFsOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVmFsdWUgdG8gY29tcGFyZSB0bworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQUJPUlQKKy8vISBAeworI2RlZmluZSBDTURfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMQorLy8hIEFib3J0IFJ1bm5pbmcgUmFkaW8gT3BlcmF0aW9uIENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9BQk9SVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNDAxCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9TVE9QCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDIKKy8vISBTdG9wIFJ1bm5pbmcgUmFkaW8gT3BlcmF0aW9uIENvbW1hbmQgR3JhY2VmdWxseQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NUT1BfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwMgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfR0VUX1JTU0kKKy8vISBAeworI2RlZmluZSBDTURfR0VUX1JTU0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMworLy8hIFJlYWQgUlNTSSBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfR0VUX1JTU0lfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwMworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfVVBEQVRFX1JBRElPX1NFVFVQCisvLyEgQHsKKyNkZWZpbmUgQ01EX1VQREFURV9SQURJT19TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKy8vISBVcGRhdGUgUmFkaW8gU2V0dGluZ3MgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1VQREFURV9SQURJT19TRVRVUF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwMDAxCisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHVpbnQzMl90KiBwUmVnT3ZlcnJpZGU7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGEgbGlzdCBvZiBoYXJkd2FyZSBhbmQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdG8gb3ZlcnJpZGUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1RSSUdHRVIKKy8vISBAeworI2RlZmluZSBDTURfVFJJR0dFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorLy8hIEdlbmVyYXRlIENvbW1hbmQgVHJpZ2dlcgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1RSSUdHRVJfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwNAorICAgdWludDhfdCB0cmlnZ2VyTm87ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbW1hbmQgdHJpZ2dlciBudW1iZXIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0dFVF9GV19JTkZPCisvLyEgQHsKKyNkZWZpbmUgQ01EX0dFVF9GV19JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKy8vISBSZXF1ZXN0IEluZm9ybWF0aW9uIG9uIHRoZSBSRiBDb3JlIFJPTSBGaXJtd2FyZQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0dFVF9GV19JTkZPX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDAwMDIKKyAgIHVpbnQxNl90IHZlcnNpb25ObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGaXJtd2FyZSB2ZXJzaW9uIG51bWJlcgorICAgdWludDE2X3Qgc3RhcnRPZmZzZXQ7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBzdGFydCBvZiBmcmVlIFJBTQorICAgdWludDE2X3QgZnJlZVJhbVN6OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBzaXplIG9mIGZyZWUgUkFNCisgICB1aW50MTZfdCBhdmFpbFJhdENoOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQml0bWFwIG9mIGF2YWlsYWJsZSBSQVQgY2hhbm5lbHMKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1NUQVJUX1JBVAorLy8hIEB7CisjZGVmaW5lIENNRF9TVEFSVF9SQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA1CisvLyEgQXN5bmNocm9ub3VzbHkgU3RhcnQgUmFkaW8gVGltZXIgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NUQVJUX1JBVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNDA1Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QSU5HCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDYKKy8vISBSZXNwb25kIHdpdGggQ29tbWFuZCBBQ0sgT25seQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BJTkdfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwNgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUkVBRF9SRlJFRworLy8hIEB7CisjZGVmaW5lIENNRF9SRUFEX1JGUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAxCisvLyEgUmVhZCBSRiBDb3JlIEhhcmR3YXJlIFJlZ2lzdGVyCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUkVBRF9SRlJFR19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNjAxCisgICB1aW50MTZfdCBhZGRyZXNzOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgUkYgY29yZSBIVyByZWdpc3RlciBiYW5rICgweDQwMDQwMDAwKQorICAgdWludDMyX3QgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJldHVybmVkIHZhbHVlIG9mIHRoZSByZWdpc3RlcgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQUREX0RBVEFfRU5UUlkKKy8vISBAeworI2RlZmluZSBDTURfQUREX0RBVEFfRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNQorLy8hIEFkZCBEYXRhIEVudHJ5IHRvIFF1ZXVlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQUREX0RBVEFfRU5UUllfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwNQorICAgdWludDE2X3QgX19kdW1teTA7CisgICBkYXRhUXVldWVfdCogcFF1ZXVlOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgcXVldWUgc3RydWN0dXJlIHRvIHdoaWNoIHRoZSBlbnRyeSB3aWxsIGJlIGFkZGVkCisgICB1aW50OF90KiBwRW50cnk7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgZW50cnkKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1JFTU9WRV9EQVRBX0VOVFJZCisvLyEgQHsKKyNkZWZpbmUgQ01EX1JFTU9WRV9EQVRBX0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYKKy8vISBSZW1vdmUgRmlyc3QgRGF0YSBFbnRyeSBmcm9tIFF1ZXVlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUkVNT1ZFX0RBVEFfRU5UUllfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwNgorICAgdWludDE2X3QgX19kdW1teTA7CisgICBkYXRhUXVldWVfdCogcFF1ZXVlOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgcXVldWUgc3RydWN0dXJlIGZyb20gd2hpY2ggdGhlIGVudHJ5IHdpbGwgYmUgcmVtb3ZlZAorICAgdWludDhfdCogcEVudHJ5OyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIGVudHJ5IHRoYXQgd2FzIHJlbW92ZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0ZMVVNIX1FVRVVFCisvLyEgQHsKKyNkZWZpbmUgQ01EX0ZMVVNIX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcKKy8vISBGbHVzaCBEYXRhIFF1ZXVlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfRkxVU0hfUVVFVUVfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAwNworICAgdWludDE2X3QgX19kdW1teTA7CisgICBkYXRhUXVldWVfdCogcFF1ZXVlOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgcXVldWUgc3RydWN0dXJlIHRvIGJlIGZsdXNoZWQKKyAgIHVpbnQ4X3QqIHBGaXJzdEVudHJ5OyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBmaXJzdCBlbnRyeSB0aGF0IHdhcyByZW1vdmVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9DTEVBUl9SWAorLy8hIEB7CisjZGVmaW5lIENNRF9DTEVBUl9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisvLyEgQ2xlYXIgYWxsIFJYIFF1ZXVlIEVudHJpZXMKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9DTEVBUl9SWF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwMDA4CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIGRhdGFRdWV1ZV90KiBwUXVldWU7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUgdG8gYmUgY2xlYXJlZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUkVNT1ZFX1BFTkRJTkdfRU5UUklFUworLy8hIEB7CisjZGVmaW5lIENNRF9SRU1PVkVfUEVORElOR19FTlRSSUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA5CisvLyEgUmVtb3ZlIFBlbmRpbmcgRW50cmllcyBmcm9tIFF1ZXVlCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUkVNT1ZFX1BFTkRJTkdfRU5UUklFU19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwMDA5CisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIGRhdGFRdWV1ZV90KiBwUXVldWU7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUgdG8gYmUgZmx1c2hlZAorICAgdWludDhfdCogcEZpcnN0RW50cnk7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IGVudHJ5IHRoYXQgd2FzIHJlbW92ZWQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1NFVF9SQVRfQ01QCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NFVF9SQVRfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEEKKy8vISBTZXQgUmFkaW8gVGltZXIgQ2hhbm5lbCBpbiBDb21wYXJlIE1vZGUKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TRVRfUkFUX0NNUF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwMDBBCisgICB1aW50OF90IHJhdENoOyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHJhZGlvIHRpbWVyIGNoYW5uZWwgbnVtYmVyCisgICB1aW50OF90IF9fZHVtbXkwOworICAgcmF0bXJfdCBjb21wYXJlVGltZTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjb21wYXJlIG9jY3VycworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfU0VUX1JBVF9DUFQKKy8vISBAeworI2RlZmluZSBDTURfU0VUX1JBVF9DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMworLy8hIFNldCBSYWRpbyBUaW1lciBDaGFubmVsIGluIENhcHR1cmUgTW9kZQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1NFVF9SQVRfQ1BUX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA2MDMKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCA6MzsKKyAgICAgIHVpbnQxNl90IGlucHV0U3JjOjU7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBJbnB1dCBzb3VyY2UgaW5kaWNhdG9yCisgICAgICB1aW50MTZfdCByYXRDaDo0OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHJhZGlvIHRpbWVyIGNoYW5uZWwgbnVtYmVyCisgICAgICB1aW50MTZfdCBiUmVwZWF0ZWQ6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU2luZ2xlIGNhcHR1cmUgbW9kZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBSZXBlYXRlZCBjYXB0dXJlIG1vZGUKKyAgICAgIHVpbnQxNl90IGlucHV0TW9kZToyOyAgICAgICAgICAgICAvLyE8IFxicmllZiBJbnB1dCBtb2RlOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBDYXB0dXJlIG9uIHJpc2luZyBlZGdlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENhcHR1cmUgb24gZmFsbGluZyBlZGdlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IENhcHR1cmUgb24gYm90aCBlZGdlczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIH0gY29uZmlnOworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfRElTQUJMRV9SQVRfQ0gKKy8vISBAeworI2RlZmluZSBDTURfRElTQUJMRV9SQVRfQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOAorLy8hIERpc2FibGUgUmFkaW8gVGltZXIgQ2hhbm5lbAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0RJU0FCTEVfUkFUX0NIX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDA0MDgKKyAgIHVpbnQ4X3QgcmF0Q2g7ICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgcmFkaW8gdGltZXIgY2hhbm5lbCBudW1iZXIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1NFVF9SQVRfT1VUUFVUCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NFVF9SQVRfT1VUUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDQKKy8vISBTZXQgUmFkaW8gVGltZXIgT3V0cHV0IHRvIGEgU3BlY2lmaWVkIE1vZGUKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TRVRfUkFUX09VVFBVVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNjA0CisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgOjI7CisgICAgICB1aW50MTZfdCBvdXRwdXRTZWw6MzsgICAgICAgICAgICAgLy8hPCAgICAgICAgT3V0cHV0IGV2ZW50IGluZGljYXRvcgorICAgICAgdWludDE2X3Qgb3V0cHV0TW9kZTozOyAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFNldCBvdXRwdXQgbGluZSBsb3cgYXMgZGVmYXVsdDsgYW5kIHB1bHNlIG9uIGV2ZW50LiBEdXJhdGlvbiBvZiBwdWxzZSBpcyBvbmUgUkYgQ29yZSBjbG9jayBwZXJpb2QgKGNhLiA0MS42NyBucykuPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFNldCBvdXRwdXQgbGluZSBoaWdoIG9uIGV2ZW50PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFNldCBvdXRwdXQgbGluZSBsb3cgb24gZXZlbnQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogVG9nZ2xlIChpbnZlcnQpIG91dHB1dCBsaW5lIHN0YXRlIG9uIGV2ZW50PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDQ6IEltbWVkaWF0ZWx5IHNldCBvdXRwdXQgbGluZSB0byBsb3cgKGRvZXMgbm90IGNoYW5nZSB1cG9uIGV2ZW50KTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA1OiBJbW1lZGlhdGVseSBzZXQgb3V0cHV0IGxpbmUgdG8gaGlnaCAoZG9lcyBub3QgY2hhbmdlIHVwb24gZXZlbnQpPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCByYXRDaDo0OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHJhZGlvIHRpbWVyIGNoYW5uZWwgbnVtYmVyCisgICB9IGNvbmZpZzsKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0FSTV9SQVRfQ0gKKy8vISBAeworI2RlZmluZSBDTURfQVJNX1JBVF9DSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOQorLy8hIEFybSBSYWRpbyBUaW1lciBDaGFubmVsCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfQVJNX1JBVF9DSF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNDA5CisgICB1aW50OF90IHJhdENoOyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHJhZGlvIHRpbWVyIGNoYW5uZWwgbnVtYmVyCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9ESVNBUk1fUkFUX0NICisvLyEgQHsKKyNkZWZpbmUgQ01EX0RJU0FSTV9SQVRfQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MEEKKy8vISBEaXNhcm0gUmFkaW8gVGltZXIgQ2hhbm5lbAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0RJU0FSTV9SQVRfQ0hfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDQwQQorICAgdWludDhfdCByYXRDaDsgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSByYWRpbyB0aW1lciBjaGFubmVsIG51bWJlcgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfU0VUX1RYX1BPV0VSCisvLyEgQHsKKyNkZWZpbmUgQ01EX1NFVF9UWF9QT1dFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKy8vISBTZXQgVHJhbnNtaXQgUG93ZXIKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9TRVRfVFhfUE9XRVJfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MDAxMAorICAgdWludDE2X3QgdHhQb3dlcjsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE5ldyBUWCBwb3dlciBzZXR0aW5nCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9VUERBVEVfRlMKKy8vISBAeworI2RlZmluZSBDTURfVVBEQVRFX0ZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMQorLy8hIFNldCBOZXcgU3ludGhlc2l6ZXIgRnJlcXVlbmN5IHdpdGhvdXQgUmVjYWxpYnJhdGlvbgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1VQREFURV9GU19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwMDExCisgICB1aW50MTZfdCBfX2R1bW15MDsKKyAgIHVpbnQzMl90IF9fZHVtbXkxOworICAgdWludDMyX3QgX19kdW1teTI7CisgICB1aW50MTZfdCBfX2R1bW15MzsKKyAgIHVpbnQxNl90IGZyZXF1ZW5jeTsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgZnJlcXVlbmN5IGluIE1IeiB0byB0dW5lIHRvCisgICB1aW50MTZfdCBmcmFjdEZyZXE7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgRnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBmcmVxdWVuY3kgdG8gdHVuZSB0bworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfQlVTX1JFUVVFU1QKKy8vISBAeworI2RlZmluZSBDTURfQlVTX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwRQorLy8hIFJlcXVlc3QgU3lzdGVtIEJ1cyB0byBiZSBBdmFpbGJhbGUKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9CVVNfUkVRVUVTVF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgwNDBFCisgICB1aW50OF90IGJTeXNCdXNOZWVkZWQ7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU3lzdGVtIGJ1cyBtYXkgc2xlZXA8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU3lzdGVtIGJ1cyBhY2Nlc3MgbmVlZGVkCit9OworCisvLyEgQH0KKworLy8hIEB9CisvLyEgQH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfZGF0YV9lbnRyeS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfZGF0YV9lbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjJkNDgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9kYXRhX2VudHJ5LmgKQEAgLTAsMCArMSwyMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZl9kYXRhX2VudHJ5LmgKKyogIFJldmlzZWQ6ICAgICAgICAkICQKKyogIFJldmlzaW9uOiAgICAgICAkICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbml0aW9uIG9mIEFQSSBmb3IgZGF0YSBleGNoYW5nZQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0RBVEFfRU5UUllfSAorI2RlZmluZSBfX0RBVEFfRU5UUllfSAorCisjaWZuZGVmIF9fUkZDX1NUUlVDVAorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fUkZDX1NUUlVDVCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKQorI2Vsc2UKKyNkZWZpbmUgX19SRkNfU1RSVUNUCisjZW5kaWYKKyNlbmRpZgorCisvLyEgXGFkZHRvZ3JvdXAgcmZjCisvLyEgQHsKKworLy8hIFxhZGR0b2dyb3VwIGRhdGFfZW50cnkKKy8vISBAeworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX21haWxib3guaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19kYXRhRW50cnlfcyByZmNfZGF0YUVudHJ5X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeUdlbmVyYWxfcyByZmNfZGF0YUVudHJ5R2VuZXJhbF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19kYXRhRW50cnlNdWx0aV9zIHJmY19kYXRhRW50cnlNdWx0aV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19kYXRhRW50cnlQb2ludGVyX3MgcmZjX2RhdGFFbnRyeVBvaW50ZXJfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5UGFydGlhbF9zIHJmY19kYXRhRW50cnlQYXJ0aWFsX3Q7CisKKy8vISBcYWRkdG9ncm91cCBkYXRhRW50cnkKKy8vISBAeworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5X3MgeworICAgdWludDhfdCogcE5leHRFbnRyeTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbmV4dCBlbnRyeSBpbiB0aGUgcXVldWUsIE5VTEwgaWYgdGhpcyBpcyB0aGUgbGFzdCBlbnRyeQorICAgdWludDhfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEluZGljYXRlcyBzdGF0dXMgb2YgZW50cnksIGluY2x1ZGluZyB3aGV0aGVyIGl0IGlzIGZyZWUgZm9yIHRoZSBzeXN0ZW0gQ1BVIHRvIHdyaXRlIHRvCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0eXBlOjI7ICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFR5cGUgb2YgZGF0YSBlbnRyeSBzdHJ1Y3R1cmU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogR2VuZXJhbCBkYXRhIGVudHJ5IDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBNdWx0aS1lbGVtZW50IFJ4IGVudHJ5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFBvaW50ZXIgZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogUGFydGlhbCByZWFkIFJ4IGVudHJ5CisgICAgICB1aW50OF90IGxlblN6OjI7ICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgU2l6ZSBvZiBsZW5ndGggd29yZCBpbiBzdGFydCBvZiBlYWNoIFJ4IGVudHJ5IGVsZW1lbnQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogTm8gbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBPbmUgYnl0ZSBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFR3byBieXRlcyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDhfdCBpcnFJbnR2OjQ7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwYXJ0aWFsIHJlYWQgUnggZW50cnkgb25seTogVGhlIG51bWJlciBvZiBieXRlcyBiZXR3ZWVuIGludGVycnVwdCBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBieSB0aGUgcmFkaW8gQ1BVICgwOiAxNiBieXRlcykKKyAgIH0gY29uZmlnOworICAgdWludDE2X3QgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEZvciBwb2ludGVyIGVudHJpZXM6IE51bWJlciBvZiBieXRlcyBpbiB0aGUgZGF0YSBidWZmZXIgcG9pbnRlZCB0bzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGb3Igb3RoZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGZvbGxvd2luZyB0aGlzIGxlbmd0aCBmaWVsZAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBkYXRhRW50cnlHZW5lcmFsCisvLyEgQHsKKy8vISBHZW5lcmFsIGRhdGEgZW50cnkgc3RydWN0dXJlICh0eXBlID0gMCkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5R2VuZXJhbF9zIHsKKyAgIHVpbnQ4X3QqIHBOZXh0RW50cnk7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIG5leHQgZW50cnkgaW4gdGhlIHF1ZXVlLCBOVUxMIGlmIHRoaXMgaXMgdGhlIGxhc3QgZW50cnkKKyAgIHVpbnQ4X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJbmRpY2F0ZXMgc3RhdHVzIG9mIGVudHJ5LCBpbmNsdWRpbmcgd2hldGhlciBpdCBpcyBmcmVlIGZvciB0aGUgc3lzdGVtIENQVSB0byB3cml0ZSB0bworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHlwZToyOyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUeXBlIG9mIGRhdGEgZW50cnkgc3RydWN0dXJlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IEdlbmVyYWwgZGF0YSBlbnRyeSA8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogTXVsdGktZWxlbWVudCBSeCBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBQb2ludGVyIGVudHJ5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFBhcnRpYWwgcmVhZCBSeCBlbnRyeQorICAgICAgdWludDhfdCBsZW5TejoyOyAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFNpemUgb2YgbGVuZ3RoIHdvcmQgaW4gc3RhcnQgb2YgZWFjaCBSeCBlbnRyeSBlbGVtZW50PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IE5vIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogT25lIGJ5dGUgbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBUd28gYnl0ZXMgbGVuZ3RoIGluZGljYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQ4X3QgaXJxSW50djo0OyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBGb3IgcGFydGlhbCByZWFkIFJ4IGVudHJ5IG9ubHk6IFRoZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiBpbnRlcnJ1cHQgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgYnkgdGhlIHJhZGlvIENQVSAoMDogMTYgYnl0ZXMpCisgICB9IGNvbmZpZzsKKyAgIHVpbnQxNl90IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBGb3IgcG9pbnRlciBlbnRyaWVzOiBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRhdGEgYnVmZmVyIHBvaW50ZWQgdG88YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgRm9yIG90aGVyIGVudHJpZXM6IE51bWJlciBvZiBieXRlcyBmb2xsb3dpbmcgdGhpcyBsZW5ndGggZmllbGQKKyAgIHVpbnQ4X3QgZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGaXJzdCBieXRlIG9mIHRoZSBkYXRhIGFycmF5IHRvIGJlIHJlY2VpdmVkIG9yIHRyYW5zbWl0dGVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGRhdGFFbnRyeU11bHRpCisvLyEgQHsKKy8vISBNdWx0aS1lbGVtZW50IGRhdGEgZW50cnkgc3RydWN0dXJlICh0eXBlID0gMSkKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfZGF0YUVudHJ5TXVsdGlfcyB7CisgICB1aW50OF90KiBwTmV4dEVudHJ5OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBuZXh0IGVudHJ5IGluIHRoZSBxdWV1ZSwgTlVMTCBpZiB0aGlzIGlzIHRoZSBsYXN0IGVudHJ5CisgICB1aW50OF90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kaWNhdGVzIHN0YXR1cyBvZiBlbnRyeSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgaXMgZnJlZSBmb3IgdGhlIHN5c3RlbSBDUFUgdG8gd3JpdGUgdG8KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHR5cGU6MjsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVHlwZSBvZiBkYXRhIGVudHJ5IHN0cnVjdHVyZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBHZW5lcmFsIGRhdGEgZW50cnkgPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE11bHRpLWVsZW1lbnQgUnggZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUG9pbnRlciBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBQYXJ0aWFsIHJlYWQgUnggZW50cnkKKyAgICAgIHVpbnQ4X3QgbGVuU3o6MjsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBTaXplIG9mIGxlbmd0aCB3b3JkIGluIHN0YXJ0IG9mIGVhY2ggUnggZW50cnkgZWxlbWVudDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBObyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE9uZSBieXRlIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogVHdvIGJ5dGVzIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50OF90IGlycUludHY6NDsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBhcnRpYWwgcmVhZCBSeCBlbnRyeSBvbmx5OiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gaW50ZXJydXB0IGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGJ5IHRoZSByYWRpbyBDUFUgKDA6IDE2IGJ5dGVzKQorICAgfSBjb25maWc7CisgICB1aW50MTZfdCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBvaW50ZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkYXRhIGJ1ZmZlciBwb2ludGVkIHRvPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZvciBvdGhlciBlbnRyaWVzOiBOdW1iZXIgb2YgYnl0ZXMgZm9sbG93aW5nIHRoaXMgbGVuZ3RoIGZpZWxkCisgICB1aW50MTZfdCBudW1FbGVtZW50czsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIGVudHJ5IGVsZW1lbnRzIGNvbW1pdHRlZCBpbiB0aGUgZW50cnkKKyAgIHVpbnQxNl90IG5leHRJbmRleDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJbmRleCB0byB0aGUgYnl0ZSBhZnRlciB0aGUgbGFzdCBieXRlIG9mIHRoZSBsYXN0IGVudHJ5IGVsZW1lbnQgY29tbWl0dGVkIGJ5IHRoZSByYWRpbyBDUFUKKyAgIHVpbnQ4X3QgcnhEYXRhOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBGaXJzdCBieXRlIG9mIHRoZSBkYXRhIGFycmF5IG9mIHJlY2VpdmVkIGRhdGEgZW50cnkgZWxlbWVudHMKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgZGF0YUVudHJ5UG9pbnRlcgorLy8hIEB7CisvLyEgUG9pbnRlciBkYXRhIGVudHJ5IHN0cnVjdHVyZSAodHlwZSA9IDIpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeVBvaW50ZXJfcyB7CisgICB1aW50OF90KiBwTmV4dEVudHJ5OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBuZXh0IGVudHJ5IGluIHRoZSBxdWV1ZSwgTlVMTCBpZiB0aGlzIGlzIHRoZSBsYXN0IGVudHJ5CisgICB1aW50OF90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kaWNhdGVzIHN0YXR1cyBvZiBlbnRyeSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgaXMgZnJlZSBmb3IgdGhlIHN5c3RlbSBDUFUgdG8gd3JpdGUgdG8KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHR5cGU6MjsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVHlwZSBvZiBkYXRhIGVudHJ5IHN0cnVjdHVyZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBHZW5lcmFsIGRhdGEgZW50cnkgPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE11bHRpLWVsZW1lbnQgUnggZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUG9pbnRlciBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBQYXJ0aWFsIHJlYWQgUnggZW50cnkKKyAgICAgIHVpbnQ4X3QgbGVuU3o6MjsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBTaXplIG9mIGxlbmd0aCB3b3JkIGluIHN0YXJ0IG9mIGVhY2ggUnggZW50cnkgZWxlbWVudDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBObyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE9uZSBieXRlIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogVHdvIGJ5dGVzIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50OF90IGlycUludHY6NDsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBhcnRpYWwgcmVhZCBSeCBlbnRyeSBvbmx5OiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gaW50ZXJydXB0IGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGJ5IHRoZSByYWRpbyBDUFUgKDA6IDE2IGJ5dGVzKQorICAgfSBjb25maWc7CisgICB1aW50MTZfdCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBvaW50ZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkYXRhIGJ1ZmZlciBwb2ludGVkIHRvPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZvciBvdGhlciBlbnRyaWVzOiBOdW1iZXIgb2YgYnl0ZXMgZm9sbG93aW5nIHRoaXMgbGVuZ3RoIGZpZWxkCisgICB1aW50OF90KiBwRGF0YTsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkIHJvIHRyYW5zbWl0dGVkCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIGRhdGFFbnRyeVBhcnRpYWwKKy8vISBAeworLy8hIFBhcnRpYWwgcmVhZCBkYXRhIGVudHJ5IHN0cnVjdHVyZSAodHlwZSA9IDMpCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2RhdGFFbnRyeVBhcnRpYWxfcyB7CisgICB1aW50OF90KiBwTmV4dEVudHJ5OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBuZXh0IGVudHJ5IGluIHRoZSBxdWV1ZSwgTlVMTCBpZiB0aGlzIGlzIHRoZSBsYXN0IGVudHJ5CisgICB1aW50OF90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kaWNhdGVzIHN0YXR1cyBvZiBlbnRyeSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgaXMgZnJlZSBmb3IgdGhlIHN5c3RlbSBDUFUgdG8gd3JpdGUgdG8KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHR5cGU6MjsgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVHlwZSBvZiBkYXRhIGVudHJ5IHN0cnVjdHVyZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBHZW5lcmFsIGRhdGEgZW50cnkgPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE11bHRpLWVsZW1lbnQgUnggZW50cnk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogUG9pbnRlciBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBQYXJ0aWFsIHJlYWQgUnggZW50cnkKKyAgICAgIHVpbnQ4X3QgbGVuU3o6MjsgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBTaXplIG9mIGxlbmd0aCB3b3JkIGluIHN0YXJ0IG9mIGVhY2ggUnggZW50cnkgZWxlbWVudDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBObyBsZW5ndGggaW5kaWNhdG9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IE9uZSBieXRlIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogVHdvIGJ5dGVzIGxlbmd0aCBpbmRpY2F0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50OF90IGlycUludHY6NDsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBhcnRpYWwgcmVhZCBSeCBlbnRyeSBvbmx5OiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gaW50ZXJydXB0IGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGJ5IHRoZSByYWRpbyBDUFUgKDA6IDE2IGJ5dGVzKQorICAgfSBjb25maWc7CisgICB1aW50MTZfdCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgRm9yIHBvaW50ZXIgZW50cmllczogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkYXRhIGJ1ZmZlciBwb2ludGVkIHRvPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZvciBvdGhlciBlbnRyaWVzOiBOdW1iZXIgb2YgYnl0ZXMgZm9sbG93aW5nIHRoaXMgbGVuZ3RoIGZpZWxkCisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgbnVtRWxlbWVudHM6MTM7ICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBlbnRyeSBlbGVtZW50cyBjb21taXR0ZWQgaW4gdGhlIGVudHJ5CisgICAgICB1aW50MTZfdCBiRW50cnlPcGVuOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgZW50cnkgY29udGFpbnMgYW4gZWxlbWVudCB0aGF0IGlzIHN0aWxsIG9wZW4gZm9yIGFwcGVuZGluZyBkYXRhCisgICAgICB1aW50MTZfdCBiRmlyc3RDb250OjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgbGFzdCBwYWNrZXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkKKyAgICAgIHVpbnQxNl90IGJMYXN0Q29udDoxOyAgICAgICAgICAgICAvLyE8ICAgICAgICAxIGlmIHRoZSBwYWNrZXQgaW4gdGhlIGxhc3QgZWxlbWVudCBjb250aW51ZXMgaW4gdGhlIG5leHQgZW50cnkKKyAgIH0gcGt0U3RhdHVzOworICAgdWludDE2X3QgbmV4dEluZGV4OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEluZGV4IHRvIHRoZSBieXRlIGFmdGVyIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGxhc3QgZW50cnkgZWxlbWVudCBjb21taXR0ZWQgYnkgdGhlIHJhZGlvIENQVQorICAgdWludDhfdCByeERhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZpcnN0IGJ5dGUgb2YgdGhlIGRhdGEgYXJyYXkgb2YgcmVjZWl2ZWQgZGF0YSBlbnRyeSBlbGVtZW50cworfTsKKworLy8hIEB9CisKKy8vISBAfQorLy8hIEB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2llZWVfY21kLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9pZWVlX2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTY1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9pZWVlX2NtZC5oCkBAIC0wLDAgKzEsNjEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfaWVlZV9jbWQuaAorKiAgUmV2aXNlZDogICAgICAgICQgJAorKiAgUmV2aXNpb246ICAgICAgICQgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIENDMjZ4eC9DQzEzeHggQVBJIGZvciBJRUVFIDgwMi4xNS40IGNvbW1hbmRzCisqCisqICBDb3B5cmlnaHQgKEMpIDIwMTUgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSUVFRV9DTURfSAorI2RlZmluZSBfX0lFRUVfQ01EX0gKKworI2lmbmRlZiBfX1JGQ19TVFJVQ1QKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX1JGQ19TVFJVQ1QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSkKKyNlbHNlCisjZGVmaW5lIF9fUkZDX1NUUlVDVAorI2VuZGlmCisjZW5kaWYKKworLy8hIFxhZGR0b2dyb3VwIHJmYworLy8hIEB7CisKKy8vISBcYWRkdG9ncm91cCBpZWVlX2NtZAorLy8hIEB7CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZfbWFpbGJveC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9jb21tb25fY21kLmg+CisKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfUlhfcyByZmNfQ01EX0lFRUVfUlhfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfRURfU0NBTl9zIHJmY19DTURfSUVFRV9FRF9TQ0FOX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1RYX3MgcmZjX0NNRF9JRUVFX1RYX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0NTTUFfcyByZmNfQ01EX0lFRUVfQ1NNQV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9SWF9BQ0tfcyByZmNfQ01EX0lFRUVfUlhfQUNLX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0FCT1JUX0JHX3MgcmZjX0NNRF9JRUVFX0FCT1JUX0JHX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX01PRF9DQ0FfcyByZmNfQ01EX0lFRUVfTU9EX0NDQV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9NT0RfRklMVF9zIHJmY19DTURfSUVFRV9NT0RfRklMVF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9NT0RfU1JDX01BVENIX3MgcmZjX0NNRF9JRUVFX01PRF9TUkNfTUFUQ0hfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfQUJPUlRfRkdfcyByZmNfQ01EX0lFRUVfQUJPUlRfRkdfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfU1RPUF9GR19zIHJmY19DTURfSUVFRV9TVE9QX0ZHX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX0NDQV9SRVFfcyByZmNfQ01EX0lFRUVfQ0NBX1JFUV90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19pZWVlUnhPdXRwdXRfcyByZmNfaWVlZVJ4T3V0cHV0X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3Nob3J0QWRkckVudHJ5X3MgcmZjX3Nob3J0QWRkckVudHJ5X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2llZWVSeENvcnJDcmNfcyByZmNfaWVlZVJ4Q29yckNyY190OworCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfUlgKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfUlhfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjgwMQorICAgdWludDE2X3Qgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIEFuIGludGVnZXIgdGVsbGluZyB0aGUgc3RhdHVzIG9mIHRoZSBjb21tYW5kLiBUaGlzIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgdXBkYXRlZCBieSB0aGUgcmFkaW8gQ1BVIGR1cmluZyBvcGVyYXRpb24gYW5kIG1heSBiZSByZWFkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHN5c3RlbSBDUFUgYXQgYW55IHRpbWUuCisgICByZmNfcmFkaW9PcF90ICpwTmV4dE9wOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byB0aGUgbmV4dCBvcGVyYXRpb24gdG8gcnVuIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGRvbmUKKyAgIHJhdG1yX3Qgc3RhcnRUaW1lOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBzdGFydCB0aW1lIChkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIDxjb2RlPnN0YXJ0VHJpZ2dlcjwvY29kZT4pCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBzdGFydFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIElkZW50aWZpY2F0aW9uIG9mIHRoZSB0cmlnZ2VyIHRoYXQgc3RhcnRzIHRoZSBvcGVyYXRpb24KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHJ1bGU6NDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ29uZGl0aW9uIGZvciBydW5uaW5nIG5leHQgY29tbWFuZDogUnVsZSBmb3IgaG93IHRvIHByb2NlZWQKKyAgICAgIHVpbnQ4X3QgblNraXA6NDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2Ygc2tpcHMgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcKKyAgIH0gY29uZGl0aW9uOworICAgdWludDhfdCBjaGFubmVsOyAgICAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIENoYW5uZWwgdG8gdHVuZSB0byBpbiB0aGUgc3RhcnQgb2YgdGhlIG9wZXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBVc2UgZXhpc3RpbmcgY2hhbm5lbDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxMSZuZGFzaDsyNjogVXNlIGFzIElFRUUgODAyLjE1LjQgY2hhbm5lbCwgaS5lLiBmcmVxdWVuY3kgaXMgKDI0MDUgKyA1ICZ0aW1lczsgKGNoYW5uZWwgLSAxMSkpIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICA2MCZuZGFzaDsyMDc6IEZyZXF1ZW5jeSBpcyAgKDIzMDAgKyBjaGFubmVsKSBNSHo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB3aXRoIENSQyBlcnJvciBmcm9tIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ246MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSByZW1vdmUgcGFja2V0cyB0aGF0IGNhbiBiZSBpZ25vcmVkIGFjY29yZGluZyB0byBmcmFtZSBmaWx0ZXJpbmcgZnJvbSBSeCBxdWV1ZQorICAgICAgdWludDhfdCBiSW5jbHVkZVBoeUhkcjoxOyAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIFBIWSBoZWFkZXIgZmllbGQgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZENvcnJDcmM6MTsgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBjb3JyZWxhdGlvbiB2YWx1ZSBhbmQgQ1JDIHJlc3VsdCBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTcmNJbmQ6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGFuIGluZGV4IGZyb20gdGhlIHNvdXJjZSBtYXRjaGluZyBhbGdvcml0aG0KKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFRpbWVzdGFtcDoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIHBhY2tldCBpbiB0aGUgUnggcXVldWUKKyAgIH0gcnhDb25maWc7CisgICBkYXRhUXVldWVfdCogcFJ4UTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byByZWNlaXZlIHF1ZXVlCisgICByZmNfaWVlZVJ4T3V0cHV0X3QgKnBPdXRwdXQ7ICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBvdXRwdXQgc3RydWN0dXJlIChOVUxMOiBEbyBub3Qgc3RvcmUgcmVzdWx0cykKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBmcmFtZUZpbHRFbjoxOyAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRGlzYWJsZSBmcmFtZSBmaWx0ZXJpbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRW5hYmxlIGZyYW1lIGZpbHRlcmluZworICAgICAgdWludDE2X3QgZnJhbWVGaWx0U3RvcDoxOyAgICAgICAgIC8vITwgXGJyaWVmIDA6IFJlY2VpdmUgYWxsIHBhY2tldHMgdG8gdGhlIGVuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTdG9wIHJlY2VpdmluZyBmcmFtZSBvbmNlIGZyYW1lIGZpbHRlcmluZyBoYXMgY2F1c2VkIHRoZSBmcmFtZSB0byBiZSByZWplY3RlZC4KKyAgICAgIHVpbnQxNl90IGF1dG9BY2tFbjoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEaXNhYmxlIGF1dG8gQUNLPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEVuYWJsZSBhdXRvIEFDSy4KKyAgICAgIHVpbnQxNl90IHNsb3R0ZWRBY2tFbjoxOyAgICAgICAgICAvLyE8IFxicmllZiAwOiBOb24tc2xvdHRlZCBBQ0s8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU2xvdHRlZCBBQ0suCisgICAgICB1aW50MTZfdCBhdXRvUGVuZEVuOjE7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQXV0by1wZW5kIGRpc2FibGVkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEF1dG8tcGVuZCBlbmFibGVkCisgICAgICB1aW50MTZfdCBkZWZhdWx0UGVuZDoxOyAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSBwZW5kaW5nIGRhdGEgYml0IGluIGF1dG8gQUNLIHBhY2tldHMgdGhhdCBhcmUgbm90IHN1YmplY3QgdG8gYXV0by1wZW5kCisgICAgICB1aW50MTZfdCBiUGVuZERhdGFSZXFPbmx5OjE7ICAgICAgLy8hPCBcYnJpZWYgMDogVXNlIGF1dG8tcGVuZCBmb3IgYW55IHBhY2tldDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBVc2UgYXV0by1wZW5kIGZvciBkYXRhIHJlcXVlc3QgcGFja2V0cyBvbmx5CisgICAgICB1aW50MTZfdCBiUGFuQ29vcmQ6MTsgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRGV2aWNlIGlzIG5vdCBQQU4gY29vcmRpbmF0b3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRGV2aWNlIGlzIFBBTiBjb29yZGluYXRvcgorICAgICAgdWludDE2X3QgbWF4RnJhbWVWZXJzaW9uOjI7ICAgICAgIC8vITwgICAgICAgIFJlamVjdCBmcmFtZXMgd2hlcmUgdGhlIGZyYW1lIHZlcnNpb24gZmllbGQgaW4gdGhlIEZDRiBpcyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZQorICAgICAgdWludDE2X3QgZmNmUmVzZXJ2ZWRNYXNrOjM7ICAgICAgIC8vITwgICAgICAgIFZhbHVlIHRvIGJlIEFORC1lZCB3aXRoIHRoZSByZXNlcnZlZCBwYXJ0IG9mIHRoZSBGQ0Y7IGZyYW1lIHJlamVjdGVkIGlmIHJlc3VsdCBpcyBub24temVybworICAgICAgdWludDE2X3QgbW9kaWZ5RnRGaWx0ZXI6MjsgICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBNU0Igb2YgZnJhbWUgdHlwZSBmaWVsZCBiZWZvcmUgZnJhbWUtdHlwZSBmaWx0ZXJpbmc6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IE5vIG1vZGlmaWNhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBJbnZlcnQgTVNCPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IFNldCBNU0IgdG8gMDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBTZXQgTVNCIHRvIDEKKyAgICAgIHVpbnQxNl90IGJTdHJpY3RMZW5GaWx0ZXI6MTsgICAgICAvLyE8IFxicmllZiAwOiBBY2NlcHQgYWNrbm93bGVkZ2VtZW50IGZyYW1lcyBvZiBhbnkgbGVuZ3RoID49IDU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0IG9ubHkgYWNrbm93bGVkZ2VtZW50IGZyYW1lcyBvZiBsZW5ndGggNQorICAgfSBmcmFtZUZpbHRPcHQ7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZyYW1lIGZpbHRlcmluZyBvcHRpb25zCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQWNjZXB0RnQwQmVhY29uOjE7ICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDAwMCAoYmVhY29uKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQxRGF0YToxOyAgICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDAwMSAoZGF0YSk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0MkFjazoxOyAgICAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAwMTAgKEFDSyk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdCwgdW5sZXNzIHJ1bm5pbmcgQUNLIHJlY2VpdmUgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBbHdheXMgYWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDNNYWNDbWQ6MTsgICAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMDExIChNQUMgY29tbWFuZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0NFJlc2VydmVkOjE7ICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAxMDAgKHJlc2VydmVkKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQ1UmVzZXJ2ZWQ6MTsgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDEwMSAocmVzZXJ2ZWQpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDZSZXNlcnZlZDoxOyAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMTEwIChyZXNlcnZlZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0N1Jlc2VydmVkOjE7ICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAxMTEgKHJlc2VydmVkKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgfSBmcmFtZVR5cGVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEZyYW1lIHR5cGVzIHRvIHJlY2VpdmUgaW4gZnJhbWUgZmlsdGVyaW5nCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBjY2FFbkVuZXJneToxOyAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBlbmVyZ3kgc2NhbiBhcyBDQ0Egc291cmNlCisgICAgICB1aW50OF90IGNjYUVuQ29ycjoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgRW5hYmxlIGNvcnJlbGF0b3IgYmFzZWQgY2FycmllciBzZW5zZSBhcyBDQ0Egc291cmNlCisgICAgICB1aW50OF90IGNjYUVuU3luYzoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgRW5hYmxlIHN5bmMgZm91bmQgYmFzZWQgY2FycmllciBzZW5zZSBhcyBDQ0Egc291cmNlCisgICAgICB1aW50OF90IGNjYUNvcnJPcDoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgT3BlcmF0b3IgdG8gdXNlIGJldHdlZW4gZW5lcmd5IGJhc2VkIGFuZCBjb3JyZWxhdG9yIGJhc2VkIENDQTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZXBvcnQgYnVzeSBjaGFubmVsIGlmIGVpdGhlciBjY2FFbmVyZ3kgb3IgY2NhQ29yciBhcmUgYnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBSZXBvcnQgYnVzeSBjaGFubmVsIGlmIGJvdGggY2NhRW5lcmd5IGFuZCBjY2FDb3JyIGFyZSBidXN5CisgICAgICB1aW50OF90IGNjYVN5bmNPcDoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgT3BlcmF0b3IgdG8gdXNlIGJldHdlZW4gc3luYyBmb3VuZCBiYXNlZCBDQ0EgYW5kIHRoZSBvdGhlcnM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogQWx3YXlzIHJlcG9ydCBidXN5IGNoYW5uZWwgaWYgY2NhU3luYyBpcyBidXN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFsd2F5cyByZXBvcnQgaWRsZSBjaGFubmVsIGlmIGNjYVN5bmMgaXMgaWRsZQorICAgICAgdWludDhfdCBjY2FDb3JyVGhyOjI7ICAgICAgICAgICAgIC8vITwgICAgICAgIFRocmVzaG9sZCBmb3IgbnVtYmVyIG9mIGNvcnJlbGF0aW9uIHBlYWtzIGluIGNvcnJlbGF0b3IgYmFzZWQgY2FycmllciBzZW5zZQorICAgfSBjY2FPcHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENDQSBvcHRpb25zCisgICBpbnQ4X3QgY2NhUnNzaVRocjsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUlNTSSB0aHJlc2hvbGQgZm9yIENDQQorICAgdWludDhfdCBfX2R1bW15MDsKKyAgIHVpbnQ4X3QgbnVtRXh0RW50cmllczsgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgZXh0ZW5kZWQgYWRkcmVzcyBlbnRyaWVzCisgICB1aW50OF90IG51bVNob3J0RW50cmllczsgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNob3J0IGFkZHJlc3MgZW50cmllcworICAgdWludDMyX3QqIHBFeHRFbnRyeUxpc3Q7ICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gbGlzdCBvZiBleHRlbmRlZCBhZGRyZXNzIGVudHJpZXMKKyAgIHVpbnQzMl90KiBwU2hvcnRFbnRyeUxpc3Q7ICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGxpc3Qgb2Ygc2hvcnQgYWRkcmVzcyBlbnRyaWVzCisgICB1aW50NjRfdCBsb2NhbEV4dEFkZHI7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGV4dGVuZGVkIGFkZHJlc3Mgb2YgdGhlIGxvY2FsIGRldmljZQorICAgdWludDE2X3QgbG9jYWxTaG9ydEFkZHI7ICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBsb2NhbCBkZXZpY2UKKyAgIHVpbnQxNl90IGxvY2FsUGFuSUQ7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgUEFOIElEIG9mIHRoZSBsb2NhbCBkZXZpY2UKKyAgIHVpbnQxNl90IF9fZHVtbXkxOworICAgdWludDhfdCBfX2R1bW15MjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUgUnggb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIFJ4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX0VEX1NDQU4KKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9FRF9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfRURfU0NBTl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyODAyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZworICAgfSBjb25kaXRpb247CisgICB1aW50OF90IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQ2hhbm5lbCB0byB0dW5lIHRvIGluIHRoZSBzdGFydCBvZiB0aGUgb3BlcmF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFVzZSBleGlzdGluZyBjaGFubmVsPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDExJm5kYXNoOzI2OiBVc2UgYXMgSUVFRSA4MDIuMTUuNCBjaGFubmVsLCBpLmUuIGZyZXF1ZW5jeSBpcyAoMjQwNSArIDUgJnRpbWVzOyAoY2hhbm5lbCAtIDExKSkgTUh6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDYwJm5kYXNoOzIwNzogRnJlcXVlbmN5IGlzICAoMjMwMCArIGNoYW5uZWwpIE1Iejxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgY2NhRW5FbmVyZ3k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBFbmFibGUgZW5lcmd5IHNjYW4gYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FFbkNvcnI6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UgYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FFblN5bmM6MTsgICAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBzeW5jIGZvdW5kIGJhc2VkIGNhcnJpZXIgc2Vuc2UgYXMgQ0NBIHNvdXJjZQorICAgICAgdWludDhfdCBjY2FDb3JyT3A6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdG9yIHRvIHVzZSBiZXR3ZWVuIGVuZXJneSBiYXNlZCBhbmQgY29ycmVsYXRvciBiYXNlZCBDQ0E8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBlaXRoZXIgY2NhRW5lcmd5IG9yIGNjYUNvcnIgYXJlIGJ1c3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVwb3J0IGJ1c3kgY2hhbm5lbCBpZiBib3RoIGNjYUVuZXJneSBhbmQgY2NhQ29yciBhcmUgYnVzeQorICAgICAgdWludDhfdCBjY2FTeW5jT3A6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIE9wZXJhdG9yIHRvIHVzZSBiZXR3ZWVuIHN5bmMgZm91bmQgYmFzZWQgQ0NBIGFuZCB0aGUgb3RoZXJzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IEFsd2F5cyByZXBvcnQgYnVzeSBjaGFubmVsIGlmIGNjYVN5bmMgaXMgYnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBbHdheXMgcmVwb3J0IGlkbGUgY2hhbm5lbCBpZiBjY2FTeW5jIGlzIGlkbGUKKyAgICAgIHVpbnQ4X3QgY2NhQ29yclRocjoyOyAgICAgICAgICAgICAvLyE8ICAgICAgICBUaHJlc2hvbGQgZm9yIG51bWJlciBvZiBjb3JyZWxhdGlvbiBwZWFrcyBpbiBjb3JyZWxhdG9yIGJhc2VkIGNhcnJpZXIgc2Vuc2UKKyAgIH0gY2NhT3B0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDQ0Egb3B0aW9ucworICAgaW50OF90IGNjYVJzc2lUaHI7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJTU0kgdGhyZXNob2xkIGZvciBDQ0EKKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICBpbnQ4X3QgbWF4UnNzaTsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIG1heGltdW0gUlNTSSByZWNvcmRlZCBkdXJpbmcgdGhlIEVEIHNjYW4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IGVuZFRyaWdnZXI7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVHJpZ2dlciB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvIGVuZCB0aGUgUnggb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIFJ4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgb3BlcmF0aW9uCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX1RYCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJDMDEKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1RYX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDJDMDEKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJJbmNsdWRlUGh5SGRyOjE7ICAgICAgICAgLy8hPCBcYnJpZWYgMDogRmluZCBQSFkgaGVhZGVyIGF1dG9tYXRpY2FsbHk8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogSW5zZXJ0IFBIWSBoZWFkZXIgZnJvbSB0aGUgYnVmZmVyCisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQXBwZW5kIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBDUkM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogSW5zZXJ0IEZDUyAoQ1JDKSBmcm9tIHRoZSBidWZmZXIKKyAgICAgIHVpbnQ4X3QgOjE7CisgICAgICB1aW50OF90IHBheWxvYWRMZW5Nc2I6NTsgICAgICAgICAgLy8hPCBcYnJpZWYgTW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHBheWxvYWQgbGVuZ3RoLiBTaG91bGQgb25seSBiZSBub24temVybyB0byBjcmVhdGUgbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIG5vbi1zdGFuZGFyZCBwYWNrZXRzIGZvciB0ZXN0IHB1cnBvc2VzCisgICB9IHR4T3B0OworICAgdWludDhfdCBwYXlsb2FkTGVuOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcGF5bG9hZAorICAgdWludDhfdCogcFBheWxvYWQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcGF5bG9hZCBidWZmZXIgb2Ygc2l6ZSA8Y29kZT5wYXlsb2FkTGVuPC9jb2RlPgorICAgcmF0bXJfdCB0aW1lU3RhbXA7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRpbWUgc3RhbXAgb2YgdHJhbnNtaXR0ZWQgZnJhbWUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfQ1NNQQorLy8hIEB7CisjZGVmaW5lIENNRF9JRUVFX0NTTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQzAyCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9DU01BX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDJDMDIKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzIGlmIHRoZSBydWxlIGludm9sdmVzIHNraXBwaW5nCisgICB9IGNvbmRpdGlvbjsKKyAgIHVpbnQxNl90IHJhbmRvbVN0YXRlOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIHBzZXVkby1yYW5kb20gZ2VuZXJhdG9yCisgICB1aW50OF90IG1hY01heEJFOyAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIElFRUUgODAyLjE1LjQgTUFDIHBhcmFtZXRlciA8aT5tYWNNYXhCRTwvaT4KKyAgIHVpbnQ4X3QgbWFjTWF4Q1NNQUJhY2tvZmZzOyAgICAgICAgICAvLyE8ICAgICAgICBUaGUgSUVFRSA4MDIuMTUuNCBNQUMgcGFyYW1ldGVyIDxpPm1hY01heENTTUFCYWNrb2ZmczwvaT4KKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGluaXRDVzo1OyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGluaXRpYWxpemF0aW9uIHZhbHVlIGZvciB0aGUgQ1cgcGFyYW1ldGVyCisgICAgICB1aW50OF90IGJTbG90dGVkOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogIG5vbi1zbG90dGVkIENTTUE8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogc2xvdHRlZCBDU01BCisgICAgICB1aW50OF90IHJ4T2ZmTW9kZToyOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogUlggc3RheXMgb24gZHVyaW5nIENTTUEgYmFja29mZnM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVGhlIENTTUEtQ0EgYWxnb3JpdGhtIHdpbGwgc3VzcGVuZCB0aGUgcmVjZWl2ZXIgaWYgbm8gZnJhbWUgaXMgYmVpbmcgcmVjZWl2ZWQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogVGhlIENTTUEtQ0EgYWxnb3JpdGhtIHdpbGwgc3VzcGVuZCB0aGUgcmVjZWl2ZXIgaWYgbm8gZnJhbWUgaXMgYmVpbmcgcmVjZWl2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgb3IgYWZ0ZXIgZmluaXNoaW5nIGl0IChpbmNsdWRpbmcgYXV0byBBQ0spIG90aGVyd2lzZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiBUaGUgQ1NNQS1DQSBhbGdvcml0aG0gd2lsbCBzdXNwZW5kIHRoZSByZWNlaXZlciBpbW1lZGlhdGVseSBkdXJpbmcgYmFjay1vZmZzCisgICB9IGNzbWFDb25maWc7CisgICB1aW50OF90IE5COyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIE5CIHBhcmFtZXRlciBmcm9tIHRoZSBJRUVFIDgwMi4xNS40IENTTUEtQ0EgYWxnb3JpdGhtCisgICB1aW50OF90IEJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIEJFIHBhcmFtZXRlciBmcm9tIHRoZSBJRUVFIDgwMi4xNS40IENTTUEtQ0EgYWxnb3JpdGhtCisgICB1aW50OF90IHJlbWFpbmluZ1BlcmlvZHM7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIG51bWJlciBvZiByZW1haW5pbmcgcGVyaW9kcyBmcm9tIGEgcGF1c2VkIGJhY2tvZmYgY291bnRkb3duCisgICBpbnQ4X3QgbGFzdFJzc2k7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUlNTSSBtZWFzdXJlZCBhdCB0aGUgbGFzdCBDQ0Egb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlIENTTUEtQ0Egb3BlcmF0aW9uCisgICByYXRtcl90IGxhc3RUaW1lU3RhbXA7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSBvZiB0aGUgbGFzdCBDQ0Egb3BlcmF0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQ1NNQS1DQSBvcGVyYXRpb24KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfUlhfQUNLCisvLyEgQHsKKyNkZWZpbmUgQ01EX0lFRUVfUlhfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJDMDMKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9JRUVFX1JYX0FDS19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyQzAzCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZworICAgfSBjb25kaXRpb247CisgICB1aW50OF90IHNlcU5vOyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU2VxdWVuY2UgbnVtYmVyIHRvIGV4cGVjdAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gZW5kVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmlnZ2VyIHRoYXQgY2F1c2VzIHRoZSBkZXZpY2UgdG8gZ2l2ZSB1cCBhY2tub3dsZWRnZW1lbnQgcmVjZXB0aW9uCisgICByYXRtcl90IGVuZFRpbWU7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgVGltZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGNvZGU+ZW5kVHJpZ2dlcjwvY29kZT4gdGhhdCBjYXVzZXMgdGhlIGRldmljZSB0byBnaXZlIHVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgYWNrbm93bGVkZ2VtZW50IHJlY2VwdGlvbgorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9BQk9SVF9CRworLy8hIEB7CisjZGVmaW5lIENNRF9JRUVFX0FCT1JUX0JHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQzA0CitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9BQk9SVF9CR19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyQzA0CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZworICAgfSBjb25kaXRpb247Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX01PRF9DQ0EKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9NT0RfQ0NBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMQorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfTU9EX0NDQV9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyMDAxCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBjY2FFbkVuZXJneToxOyAgICAgICAgICAgIC8vITwgICAgICAgIEVuYWJsZSBlbmVyZ3kgc2NhbiBhcyBDQ0Egc291cmNlCisgICAgICB1aW50OF90IGNjYUVuQ29ycjoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgRW5hYmxlIGNvcnJlbGF0b3IgYmFzZWQgY2FycmllciBzZW5zZSBhcyBDQ0Egc291cmNlCisgICAgICB1aW50OF90IGNjYUVuU3luYzoxOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgRW5hYmxlIHN5bmMgZm91bmQgYmFzZWQgY2FycmllciBzZW5zZSBhcyBDQ0Egc291cmNlCisgICAgICB1aW50OF90IGNjYUNvcnJPcDoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgT3BlcmF0b3IgdG8gdXNlIGJldHdlZW4gZW5lcmd5IGJhc2VkIGFuZCBjb3JyZWxhdG9yIGJhc2VkIENDQTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZXBvcnQgYnVzeSBjaGFubmVsIGlmIGVpdGhlciBjY2FFbmVyZ3kgb3IgY2NhQ29yciBhcmUgYnVzeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBSZXBvcnQgYnVzeSBjaGFubmVsIGlmIGJvdGggY2NhRW5lcmd5IGFuZCBjY2FDb3JyIGFyZSBidXN5CisgICAgICB1aW50OF90IGNjYVN5bmNPcDoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgT3BlcmF0b3IgdG8gdXNlIGJldHdlZW4gc3luYyBmb3VuZCBiYXNlZCBDQ0EgYW5kIHRoZSBvdGhlcnM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogQWx3YXlzIHJlcG9ydCBidXN5IGNoYW5uZWwgaWYgY2NhU3luYyBpcyBidXN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFsd2F5cyByZXBvcnQgaWRsZSBjaGFubmVsIGlmIGNjYVN5bmMgaXMgaWRsZQorICAgICAgdWludDhfdCBjY2FDb3JyVGhyOjI7ICAgICAgICAgICAgIC8vITwgICAgICAgIFRocmVzaG9sZCBmb3IgbnVtYmVyIG9mIGNvcnJlbGF0aW9uIHBlYWtzIGluIGNvcnJlbGF0b3IgYmFzZWQgY2FycmllciBzZW5zZQorICAgfSBuZXdDY2FPcHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE5ldyB2YWx1ZSBvZiA8Y29kZT5jY2FPcHQ8L2NvZGU+IGZvciB0aGUgcnVubmluZyBiYWNrZ3JvdW5kIGxldmVsIG9wZXJhdGlvbgorICAgaW50OF90IG5ld0NjYVJzc2lUaHI7ICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE5ldyB2YWx1ZSBvZiA8Y29kZT5jY2FSc3NpVGhyPC9jb2RlPiBmb3IgdGhlIHJ1bm5pbmcgYmFja2dyb3VuZCBsZXZlbCBvcGVyYXRpb24KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfTU9EX0ZJTFQKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9NT0RfRklMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfTU9EX0ZJTFRfcyB7CisgICB1aW50MTZfdCBjb21tYW5kTm87ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvbW1hbmQgSUQgbnVtYmVyIDB4MjAwMgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQxNl90IGZyYW1lRmlsdEVuOjE7ICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEaXNhYmxlIGZyYW1lIGZpbHRlcmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBFbmFibGUgZnJhbWUgZmlsdGVyaW5nCisgICAgICB1aW50MTZfdCBmcmFtZUZpbHRTdG9wOjE7ICAgICAgICAgLy8hPCBcYnJpZWYgMDogUmVjZWl2ZSBhbGwgcGFja2V0cyB0byB0aGUgZW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFN0b3AgcmVjZWl2aW5nIGZyYW1lIG9uY2UgZnJhbWUgZmlsdGVyaW5nIGhhcyBjYXVzZWQgdGhlIGZyYW1lIHRvIGJlIHJlamVjdGVkLgorICAgICAgdWludDE2X3QgYXV0b0Fja0VuOjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERpc2FibGUgYXV0byBBQ0s8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRW5hYmxlIGF1dG8gQUNLLgorICAgICAgdWludDE2X3Qgc2xvdHRlZEFja0VuOjE7ICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vbi1zbG90dGVkIEFDSzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTbG90dGVkIEFDSy4KKyAgICAgIHVpbnQxNl90IGF1dG9QZW5kRW46MTsgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBdXRvLXBlbmQgZGlzYWJsZWQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQXV0by1wZW5kIGVuYWJsZWQKKyAgICAgIHVpbnQxNl90IGRlZmF1bHRQZW5kOjE7ICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIHBlbmRpbmcgZGF0YSBiaXQgaW4gYXV0byBBQ0sgcGFja2V0cyB0aGF0IGFyZSBub3Qgc3ViamVjdCB0byBhdXRvLXBlbmQKKyAgICAgIHVpbnQxNl90IGJQZW5kRGF0YVJlcU9ubHk6MTsgICAgICAvLyE8IFxicmllZiAwOiBVc2UgYXV0by1wZW5kIGZvciBhbnkgcGFja2V0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFVzZSBhdXRvLXBlbmQgZm9yIGRhdGEgcmVxdWVzdCBwYWNrZXRzIG9ubHkKKyAgICAgIHVpbnQxNl90IGJQYW5Db29yZDoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEZXZpY2UgaXMgbm90IFBBTiBjb29yZGluYXRvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBEZXZpY2UgaXMgUEFOIGNvb3JkaW5hdG9yCisgICAgICB1aW50MTZfdCBtYXhGcmFtZVZlcnNpb246MjsgICAgICAgLy8hPCAgICAgICAgUmVqZWN0IGZyYW1lcyB3aGVyZSB0aGUgZnJhbWUgdmVyc2lvbiBmaWVsZCBpbiB0aGUgRkNGIGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlCisgICAgICB1aW50MTZfdCBmY2ZSZXNlcnZlZE1hc2s6MzsgICAgICAgLy8hPCAgICAgICAgVmFsdWUgdG8gYmUgQU5ELWVkIHdpdGggdGhlIHJlc2VydmVkIHBhcnQgb2YgdGhlIEZDRjsgZnJhbWUgcmVqZWN0ZWQgaWYgcmVzdWx0IGlzIG5vbi16ZXJvCisgICAgICB1aW50MTZfdCBtb2RpZnlGdEZpbHRlcjoyOyAgICAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIE1TQiBvZiBmcmFtZSB0eXBlIGZpZWxkIGJlZm9yZSBmcmFtZS10eXBlIGZpbHRlcmluZzo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogTm8gbW9kaWZpY2F0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEludmVydCBNU0I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogU2V0IE1TQiB0byAwPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFNldCBNU0IgdG8gMQorICAgICAgdWludDE2X3QgYlN0cmljdExlbkZpbHRlcjoxOyAgICAgIC8vITwgXGJyaWVmIDA6IEFjY2VwdCBhY2tub3dsZWRnZW1lbnQgZnJhbWVzIG9mIGFueSBsZW5ndGggPj0gNTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQgb25seSBhY2tub3dsZWRnZW1lbnQgZnJhbWVzIG9mIGxlbmd0aCA1CisgICB9IG5ld0ZyYW1lRmlsdE9wdDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTmV3IHZhbHVlIG9mIDxjb2RlPmZyYW1lRmlsdE9wdDwvY29kZT4gZm9yIHRoZSBydW5uaW5nIGJhY2tncm91bmQgbGV2ZWwgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQWNjZXB0RnQwQmVhY29uOjE7ICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDAwMCAoYmVhY29uKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQxRGF0YToxOyAgICAgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDAwMSAoZGF0YSk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0MkFjazoxOyAgICAgICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAwMTAgKEFDSyk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdCwgdW5sZXNzIHJ1bm5pbmcgQUNLIHJlY2VpdmUgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBbHdheXMgYWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDNNYWNDbWQ6MTsgICAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMDExIChNQUMgY29tbWFuZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0NFJlc2VydmVkOjE7ICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAxMDAgKHJlc2VydmVkKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgICAgdWludDhfdCBiQWNjZXB0RnQ1UmVzZXJ2ZWQ6MTsgICAgIC8vITwgXGJyaWVmIFRyZWF0bWVudCBvZiBmcmFtZXMgd2l0aCBmcmFtZSB0eXBlIDEwMSAocmVzZXJ2ZWQpOjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSZWplY3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWNjZXB0CisgICAgICB1aW50OF90IGJBY2NlcHRGdDZSZXNlcnZlZDoxOyAgICAgLy8hPCBcYnJpZWYgVHJlYXRtZW50IG9mIGZyYW1lcyB3aXRoIGZyYW1lIHR5cGUgMTEwIChyZXNlcnZlZCk6PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFJlamVjdDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBY2NlcHQKKyAgICAgIHVpbnQ4X3QgYkFjY2VwdEZ0N1Jlc2VydmVkOjE7ICAgICAvLyE8IFxicmllZiBUcmVhdG1lbnQgb2YgZnJhbWVzIHdpdGggZnJhbWUgdHlwZSAxMTEgKHJlc2VydmVkKTo8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogUmVqZWN0PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFjY2VwdAorICAgfSBuZXdGcmFtZVR5cGVzOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE5ldyB2YWx1ZSBvZiA8Y29kZT5mcmFtZVR5cGVzPC9jb2RlPiBmb3IgdGhlIHJ1bm5pbmcgYmFja2dyb3VuZCBsZXZlbCBvcGVyYXRpb24KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX0lFRUVfTU9EX1NSQ19NQVRDSAorLy8hIEB7CisjZGVmaW5lIENNRF9JRUVFX01PRF9TUkNfTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAzCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9NT0RfU1JDX01BVENIX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDIwMDMKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJFbmFibGU6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRGlzYWJsZSBlbnRyeTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBFbmFibGUgZW50cnkKKyAgICAgIHVpbnQ4X3Qgc3JjUGVuZDoxOyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOZXcgdmFsdWUgb2YgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgZW50cnkKKyAgICAgIHVpbnQ4X3QgZW50cnlUeXBlOjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBFeHRlbmRlZCBhZGRyZXNzPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFNob3J0IGFkZHJlc3MKKyAgIH0gb3B0aW9uczsKKyAgIHVpbnQ4X3QgZW50cnlObzsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJbmRleCBvZiBlbnRyeSB0byBlbmFibGUgb3IgZGlzYWJsZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfSUVFRV9BQk9SVF9GRworLy8hIEB7CisjZGVmaW5lIENNRF9JRUVFX0FCT1JUX0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNDAxCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfSUVFRV9BQk9SVF9GR19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyNDAxCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX1NUT1BfRkcKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9TVE9QX0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwMgorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfU1RPUF9GR19zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyNDAyCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9JRUVFX0NDQV9SRVEKKy8vISBAeworI2RlZmluZSBDTURfSUVFRV9DQ0FfUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwMworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX0lFRUVfQ0NBX1JFUV9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgyNDAzCisgICBpbnQ4X3QgY3VycmVudFJzc2k7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIFJTU0kgY3VycmVudGx5IG9ic2VydmVkIG9uIHRoZSBjaGFubmVsCisgICBpbnQ4X3QgbWF4UnNzaTsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIG1heGltdW0gUlNTSSBvYnNlcnZlZCBvbiB0aGUgY2hhbm5lbCBzaW5jZSBSeCB3YXMgc3RhcnRlZAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgY2NhU3RhdGU6MjsgICAgICAgICAgICAgICAvLyE8IFxicmllZiBWYWx1ZSBvZiB0aGUgY3VycmVudCBDQ0Egc3RhdGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogSWRsZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBCdXN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IEludmFsaWQKKyAgICAgIHVpbnQ4X3QgY2NhRW5lcmd5OjI7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBWYWx1ZSBvZiB0aGUgY3VycmVudCBlbmVyZ3kgZGV0ZWN0IENDQSBzdGF0ZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBJZGxlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEJ1c3k8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogSW52YWxpZAorICAgICAgdWludDhfdCBjY2FDb3JyOjI7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFZhbHVlIG9mIHRoZSBjdXJyZW50IGNvcnJlbGF0b3IgYmFzZWQgY2FycmllciBzZW5zZSBDQ0Egc3RhdGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogSWRsZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBCdXN5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDI6IEludmFsaWQKKyAgICAgIHVpbnQ4X3QgY2NhU3luYzoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBWYWx1ZSBvZiB0aGUgY3VycmVudCBzeW5jIGZvdW5kIGJhc2VkIGNhcnJpZXIgc2Vuc2UgQ0NBIHN0YXRlPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IElkbGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQnVzeQorICAgfSBjY2FJbmZvOworfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBpZWVlUnhPdXRwdXQKKy8vISBAeworLy8hIE91dHB1dCBzdHJ1Y3R1cmUgZm9yIENNRF9JRUVFX1JYCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX2llZWVSeE91dHB1dF9zIHsKKyAgIHVpbnQ4X3QgblR4QWNrOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUb3RhbCBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgQUNLIGZyYW1lcworICAgdWludDhfdCBuUnhCZWFjb247ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBiZWFjb24gZnJhbWVzCisgICB1aW50OF90IG5SeERhdGE7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJlY2VpdmVkIGRhdGEgZnJhbWVzCisgICB1aW50OF90IG5SeEFjazsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJlY2VpdmVkIGFja25vd2xlZGdlbWVudCBmcmFtZXMKKyAgIHVpbnQ4X3QgblJ4TWFjQ21kOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcmVjZWl2ZWQgTUFDIGNvbW1hbmQgZnJhbWVzCisgICB1aW50OF90IG5SeFJlc2VydmVkOyAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIHJlc2VydmVkIGZyYW1lIHR5cGUKKyAgIHVpbnQ4X3QgblJ4Tm9rOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcmVjZWl2ZWQgZnJhbWVzIHdpdGggQ1JDIGVycm9yCisgICB1aW50OF90IG5SeElnbm9yZWQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCB0aGF0IGFyZSB0byBiZSBpZ25vcmVkCisgICB1aW50OF90IG5SeEJ1ZkZ1bGw7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHJlY2VpdmVkIGZyYW1lcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUgUnggYnVmZmVyIHdhcyBmdWxsCisgICBpbnQ4X3QgbGFzdFJzc2k7ICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUlNTSSBvZiBsYXN0IHJlY2VpdmVkIGZyYW1lCisgICBpbnQ4X3QgbWF4UnNzaTsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSGlnaGVzdCBSU1NJIG9ic2VydmVkIGluIHRoZSBvcGVyYXRpb24KKyAgIHVpbnQ4X3QgX19kdW1teTA7CisgICByYXRtcl90IGJlYWNvblRpbWVTdGFtcDsgICAgICAgICAgICAgLy8hPCAgICAgICAgVGltZSBzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIGJlYWNvbiBmcmFtZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBzaG9ydEFkZHJFbnRyeQorLy8hIEB7CisvLyEgU3RydWN0dXJlIGZvciBzaG9ydCBhZGRyZXNzIGVudHJpZXMKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfc2hvcnRBZGRyRW50cnlfcyB7CisgICB1aW50MTZfdCBzaG9ydEFkZHI7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU2hvcnQgYWRkcmVzcworICAgdWludDE2X3QgcGFuSWQ7ICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBBTiBJRAorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBpZWVlUnhDb3JyQ3JjCisvLyEgQHsKKy8vISBSZWNlaXZlIHN0YXR1cyBieXRlIHRoYXQgbWF5IGJlIGFwcGVuZGVkIHRvIG1lc3NhZ2UgaW4gcmVjZWl2ZSBidWZmZXIKKworc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfaWVlZVJ4Q29yckNyY19zIHsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGNvcnI6NjsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIGNvcnJlbGF0aW9uIHZhbHVlCisgICAgICB1aW50OF90IGJJZ25vcmU6MTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSByZWplY3RlZCBieSBmcmFtZSBmaWx0ZXJpbmcsIDAgb3RoZXJ3aXNlCisgICAgICB1aW50OF90IGJDcmNFcnI6MTsgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMSBpZiB0aGUgcGFja2V0IHdhcyByZWNlaXZlZCB3aXRoIENSQyBlcnJvciwgMCBvdGhlcndpc2UKKyAgIH0gc3RhdHVzOworfTsKKworLy8hIEB9CisKKy8vISBAfQorLy8hIEB9CisjZW5kaWYgLyogX19JRUVFX0NNRF9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9pZWVlX21haWxib3guaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX2llZWVfbWFpbGJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzI3NzMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9pZWVlX21haWxib3guaApAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaWVlZV9tYWlsYm94LmgKKyogIFJldmlzZWQ6ICAgICAgICAkICQKKyogIFJldmlzaW9uOiAgICAgICAkICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbml0aW9ucyBmb3IgSUVFRSA4MDIuMTUuNCBpbnRlcmZhY2UKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lFRUVfTUFJTEJPWF9ICisjZGVmaW5lIF9JRUVFX01BSUxCT1hfSAorCisvLy8gXG5hbWUgUmFkaW8gb3BlcmF0aW9uIHN0YXR1cworLy8vQHsKKy8vLyBcbmFtZSBPcGVyYXRpb24gbm90IGZpbmlzaGVkCisvLy9AeworI2RlZmluZSBJRUVFX1NVU1BFTkRFRCAgICAgICAgICAweDIwMDEgIC8vLzwgT3BlcmF0aW9uIHN1c3BlbmRlZAorLy8vQH0KKy8vLyBcbmFtZSBPcGVyYXRpb24gZmluaXNoZWQgbm9ybWFsbHkKKy8vL0B7CisjZGVmaW5lIElFRUVfRE9ORV9PSyAgICAgICAgICAgIDB4MjQwMCAgLy8vPCBPcGVyYXRpb24gZW5kZWQgbm9ybWFsbHkKKyNkZWZpbmUgSUVFRV9ET05FX0JVU1kgICAgICAgICAgMHgyNDAxICAvLy88IENTTUEtQ0Egb3BlcmF0aW9uIGVuZGVkIHdpdGggZmFpbHVyZQorI2RlZmluZSBJRUVFX0RPTkVfU1RPUFBFRCAgICAgICAweDI0MDIgIC8vLzwgT3BlcmF0aW9uIHN0b3BwZWQgYWZ0ZXIgc3RvcCBjb21tYW5kCisjZGVmaW5lIElFRUVfRE9ORV9BQ0sgICAgICAgICAgIDB4MjQwMyAgLy8vPCBBQ0sgcGFja2V0IHJlY2VpdmVkIHdpdGggcGVuZGluZyBkYXRhIGJpdCBjbGVhcmVkCisjZGVmaW5lIElFRUVfRE9ORV9BQ0tQRU5EICAgICAgIDB4MjQwNCAgLy8vPCBBQ0sgcGFja2V0IHJlY2VpdmVkIHdpdGggcGVuZGluZyBkYXRhIGJpdCBzZXQKKyNkZWZpbmUgSUVFRV9ET05FX1RJTUVPVVQgICAgICAgMHgyNDA1ICAvLy88IE9wZXJhdGlvbiBlbmRlZCBkdWUgdG8gdGltZW91dAorI2RlZmluZSBJRUVFX0RPTkVfQkdFTkQgICAgICAgICAweDI0MDYgIC8vLzwgRkcgb3BlcmF0aW9uIGVuZGVkIGJlY2F1c2UgbmVjZXNzYXJ5IGJhY2tncm91bmQgbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IG9wZXJhdGlvbiBlbmRlZAorI2RlZmluZSBJRUVFX0RPTkVfQUJPUlQgICAgICAgICAweDI0MDcgIC8vLzwgT3BlcmF0aW9uIGFib3J0ZWQgYnkgY29tbWFuZAorLy8vQH0KKy8vLyBcbmFtZSBPcGVyYXRpb24gZmluaXNoZWQgd2l0aCBlcnJvcgorLy8vQHsKKyNkZWZpbmUgSUVFRV9FUlJPUl9QQVIgICAgICAgICAgMHgyODAwICAvLy88IElsbGVnYWwgcGFyYW1ldGVyCisjZGVmaW5lIElFRUVfRVJST1JfTk9fU0VUVVAgICAgIDB4MjgwMSAgLy8vPCBPcGVyYXRpb24gdXNpbmcgUnggb3IgVHggYXR0ZW10ZWQgd2hlbiBub3QgaW4gMTUuNCBtb2RlCisjZGVmaW5lIElFRUVfRVJST1JfTk9fRlMgICAgICAgIDB4MjgwMiAgLy8vPCBPcGVyYXRpb24gdXNpbmcgUnggb3IgVHggYXR0ZW10ZWQgd2l0aG91dCBmcmVxdWVuY3kgc3ludGggY29uZmlndXJlZAorI2RlZmluZSBJRUVFX0VSUk9SX1NZTlRIX1BST0cgICAweDI4MDMgIC8vLzwgU3ludGhlc2l6ZXIgcHJvZ3JhbW1pbmcgZmFpbGVkIHRvIGNvbXBsZXRlIG9uIHRpbWUKKyNkZWZpbmUgSUVFRV9FUlJPUl9SWE9WRiAgICAgICAgMHgyODA0ICAvLy88IFJlY2VpdmVyIG92ZXJmbG93ZWQgZHVyaW5nIG9wZXJhdGlvbgorI2RlZmluZSBJRUVFX0VSUk9SX1RYVU5GICAgICAgICAweDI4MDUgIC8vLzwgVHJhbnNtaXR0ZXIgdW5kZXJmbG93ZWQgZHVyaW5nIG9wZXJhdGlvbgorLy8vQH0KKy8vL0B9CisKKyNlbmRpZiAvKiBfSUVFRV9NQUlMQk9YX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX21haWxib3guaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX21haWxib3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2RjNzQyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfbWFpbGJveC5oCkBAIC0wLDAgKzEsMzQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfbWFpbGJveC5oCisqICBSZXZpc2VkOiAgICAgICAgJCAkCisqICBSZXZpc2lvbjogICAgICAgJCAkCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5pdGlvbnMgZm9yIGludGVyZmFjZSBiZXR3ZWVuIHN5c3RlbSBhbmQgcmFkaW8gQ1BVCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NQUlMQk9YX0gKKyNkZWZpbmUgX01BSUxCT1hfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKworLy8vIFxuYW1lIFJGIG1vZGUgdmFsdWVzCisvLy8gRGVmaW5lcyB1c2VkIHRvIGluZGljYXRlIG1vZGUgb2Ygb3BlcmF0aW9uIHRvIHJhZGlvIGNvcmUuCisvLy9AeworI2RlZmluZSBSRl9NT0RFX0JMRSAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRl9NT0RFX0lFRUVfMTVfNCAgICAgICAgMHgwMgorI2RlZmluZSBSRl9NT0RFX1BST1BSSUVUQVJZXzJfNCAgMHgwMworI2RlZmluZSBSRl9NT0RFX1BST1BSSUVUQVJZICAgICAgUkZfTU9ERV9QUk9QUklFVEFSWV8yXzQKKyNkZWZpbmUgUkZfTU9ERV9NVUxUSVBMRSAgICAgICAgIDB4MDUKKy8vL0B9CisKKworLy8vIFR5cGUgZGVmaW5pdGlvbiBmb3IgUkFUCit0eXBlZGVmIHVpbnQzMl90IHJhdG1yX3Q7CisKKworCisvLy8gVHlwZSBkZWZpbml0aW9uIGZvciBhIGRhdGEgcXVldWUKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQ4X3QgKnBDdXJyRW50cnk7ICAgLy8vPCBQb2ludGVyIHRvIHRoZSBkYXRhIHF1ZXVlIGVudHJ5IHRvIGJlIHVzZWQsIE5VTEwgZm9yIGFuIGVtcHR5IHF1ZXVlCisgICB1aW50OF90ICpwTGFzdEVudHJ5OyAgIC8vLzwgUG9pbnRlciB0byB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgcXVldWUsIE5VTEwgZm9yIGEgY2lyY3VsYXIgcXVldWUKK30gZGF0YVF1ZXVlX3Q7CisKKworCisvLy8gXG5hbWUgQ1BFIGludGVycnVwdCBkZWZpbml0aW9ucworLy8vIEludGVycnVwdCBtYXNrcyBmb3IgdGhlIENQRSBpbnRlcnJ1cHQgaW4gUkRCRUxMLgorLy8vQHsKKyNkZWZpbmUgSVJRTl9DT01NQU5EX0RPTkUgICAgICAgICAgIDAgICAgICAgICAgIC8vLzwgUmFkaW8gb3BlcmF0aW9uIGNvbW1hbmQgZmluaXNoZWQKKyNkZWZpbmUgSVJRTl9MQVNUX0NPTU1BTkRfRE9ORSAgICAgIDEgICAgICAgICAgIC8vLzwgTGFzdCByYWRpbyBvcGVyYXRpb24gY29tbWFuZCBpbiBhIGNoYWluIGZpbmlzaGVkCisjZGVmaW5lIElSUU5fRkdfQ09NTUFORF9ET05FICAgICAgICAyICAgICAgICAgICAvLy88IEZHIGxldmVsIFJhZGlvIG9wZXJhdGlvbiBjb21tYW5kIGZpbmlzaGVkCisjZGVmaW5lIElSUU5fTEFTVF9GR19DT01NQU5EX0RPTkUgICAzICAgICAgICAgICAvLy88IExhc3QgRkcgbGV2ZWwgcmFkaW8gb3BlcmF0aW9uIGNvbW1hbmQgaW4gYSBjaGFpbiBmaW5pc2hlZAorI2RlZmluZSBJUlFOX1RYX0RPTkUgICAgICAgICAgICAgICAgNCAgICAgICAgICAgLy8vPCBQYWNrZXQgdHJhbnNtaXR0ZWQKKyNkZWZpbmUgSVJRTl9UWF9BQ0sgICAgICAgICAgICAgICAgIDUgICAgICAgICAgIC8vLzwgQUNLIHBhY2tldCB0cmFuc21pdHRlZAorI2RlZmluZSBJUlFOX1RYX0NUUkwgICAgICAgICAgICAgICAgNiAgICAgICAgICAgLy8vPCBDb250cm9sIHBhY2tldCB0cmFuc21pdHRlZAorI2RlZmluZSBJUlFOX1RYX0NUUkxfQUNLICAgICAgICAgICAgNyAgICAgICAgICAgLy8vPCBBY2tub3dsZWRnZW1lbnQgcmVjZWl2ZWQgb24gYSB0cmFuc21pdHRlZCBjb250cm9sIHBhY2tldAorI2RlZmluZSBJUlFOX1RYX0NUUkxfQUNLX0FDSyAgICAgICAgOCAgICAgICAgICAgLy8vPCBBY2tub3dsZWRnZW1lbnQgcmVjZWl2ZWQgb24gYSB0cmFuc21pdHRlZCBjb250cm9sIHBhY2tldCwgYW5kIGFja25vd2xlZGdlbWVudCB0cmFuc21pdHRlZCBmb3IgdGhhdCBwYWNrZXQKKyNkZWZpbmUgSVJRTl9UWF9SRVRSQU5TICAgICAgICAgICAgIDkgICAgICAgICAgIC8vLzwgUGFja2V0IHJldHJhbnNtaXR0ZWQKKyNkZWZpbmUgSVJRTl9UWF9FTlRSWV9ET05FICAgICAgICAgIDEwICAgICAgICAgIC8vLzwgVHggcXVldWUgZGF0YSBlbnRyeSBzdGF0ZSBjaGFuZ2VkIHRvIEZpbmlzaGVkCisjZGVmaW5lIElSUU5fVFhfQlVGRkVSX0NIQU5HRUQgICAgICAxMSAgICAgICAgICAvLy88IEEgYnVmZmVyIGNoYW5nZSBpcyBjb21wbGV0ZQorI2RlZmluZSBJUlFOX1JYX09LICAgICAgICAgICAgICAgICAgMTYgICAgICAgICAgLy8vPCBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIHBheWxvYWQsIGFuZCBub3QgdG8gYmUgaWdub3JlZAorI2RlZmluZSBJUlFOX1JYX05PSyAgICAgICAgICAgICAgICAgMTcgICAgICAgICAgLy8vPCBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKKyNkZWZpbmUgSVJRTl9SWF9JR05PUkVEICAgICAgICAgICAgIDE4ICAgICAgICAgIC8vLzwgUGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBidXQgdG8gYmUgaWdub3JlZAorI2RlZmluZSBJUlFOX1JYX0VNUFRZICAgICAgICAgICAgICAgMTkgICAgICAgICAgLy8vPCBQYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssIG5vdCB0byBiZSBpZ25vcmVkLCBubyBwYXlsb2FkCisjZGVmaW5lIElSUU5fUlhfQ1RSTCAgICAgICAgICAgICAgICAyMCAgICAgICAgICAvLy88IENvbnRyb2wgcGFja2V0IHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBub3QgdG8gYmUgaWdub3JlZAorI2RlZmluZSBJUlFOX1JYX0NUUkxfQUNLICAgICAgICAgICAgMjEgICAgICAgICAgLy8vPCBDb250cm9sIHBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBPSywgbm90IHRvIGJlIGlnbm9yZWQsIHRoZW4gQUNLIHNlbnQKKyNkZWZpbmUgSVJRTl9SWF9CVUZfRlVMTCAgICAgICAgICAgIDIyICAgICAgICAgIC8vLzwgUGFja2V0IHJlY2VpdmVkIHRoYXQgZGlkIG5vdCBmaXQgaW4gdGhlIFJ4IHF1ZXVlCisjZGVmaW5lIElSUU5fUlhfRU5UUllfRE9ORSAgICAgICAgICAyMyAgICAgICAgICAvLy88IFJ4IHF1ZXVlIGRhdGEgZW50cnkgY2hhbmdpbmcgc3RhdGUgdG8gRmluaXNoZWQKKyNkZWZpbmUgSVJRTl9SWF9EQVRBX1dSSVRURU4gICAgICAgIDI0ICAgICAgICAgIC8vLzwgRGF0YSB3cml0dGVuIHRvIHBhcnRpYWwgcmVhZCBSeCBidWZmZXIKKyNkZWZpbmUgSVJRTl9SWF9OX0RBVEFfV1JJVFRFTiAgICAgIDI1ICAgICAgICAgIC8vLzwgU3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHBhcnRpYWwgcmVhZCBSeCBidWZmZXIKKyNkZWZpbmUgSVJRTl9SWF9BQk9SVEVEICAgICAgICAgICAgIDI2ICAgICAgICAgIC8vLzwgUGFja2V0IHJlY2VwdGlvbiBzdG9wcGVkIGJlZm9yZSBwYWNrZXQgd2FzIGRvbmUKKyNkZWZpbmUgSVJRTl9SWF9DT0xMSVNJT05fREVURUNURUQgIDI3ICAgICAgICAgIC8vLzwgQSBjb2xsaXNpb24gd2FzIGluZGljYXRlZCBkdXJpbmcgcGFja2V0IHJlY2VwdGlvbgorI2RlZmluZSBJUlFOX1NZTlRIX05PX0xPQ0sgICAgICAgICAgMjggICAgICAgICAgLy8vPCBUaGUgc3ludGggaGFzIGdvbmUgb3V0IG9mIGxvY2sgYWZ0ZXIgY2FsaWJyYXRpb24KKyNkZWZpbmUgSVJRTl9NT0RVTEVTX1VOTE9DS0VEICAgICAgIDI5ICAgICAgICAgIC8vLzwgQXMgcGFydCBvZiB0aGUgYm9vdCBwcm9jZXNzLCB0aGUgQ00wIGhhcyBvcGVuZWQgYWNjZXNzIHRvIFJGIGNvcmUgbW9kdWxlcyBhbmQgbWVtb3JpZXMKKyNkZWZpbmUgSVJRTl9CT09UX0RPTkUgICAgICAgICAgICAgIDMwICAgICAgICAgIC8vLzwgVGhlIFJGIGNvcmUgQ1BVIGJvb3QgaXMgZmluaXNoZWQKKworI2RlZmluZSBJUlFOX0lOVEVSTkFMX0VSUk9SICAgICAgICAgMzEgICAgICAgICAgLy8vPCBJbnRlcm5hbCBlcnJvciBvYnNlcnZlZAorCisjZGVmaW5lIElSUV9DT01NQU5EX0RPTkUgICAgICAgICAgICAoMVUgPDwgSVJRTl9DT01NQU5EX0RPTkUpCisjZGVmaW5lIElSUV9MQVNUX0NPTU1BTkRfRE9ORSAgICAgICAoMVUgPDwgSVJRTl9MQVNUX0NPTU1BTkRfRE9ORSkKKyNkZWZpbmUgSVJRX0ZHX0NPTU1BTkRfRE9ORSAgICAgICAgICgxVSA8PCBJUlFOX0ZHX0NPTU1BTkRfRE9ORSkKKyNkZWZpbmUgSVJRX0xBU1RfRkdfQ09NTUFORF9ET05FICAgICgxVSA8PCBJUlFOX0xBU1RfRkdfQ09NTUFORF9ET05FKQorCisjZGVmaW5lIElSUV9UWF9ET05FICAgICAgICAgICAgICAgICAoMVUgPDwgSVJRTl9UWF9ET05FKQorI2RlZmluZSBJUlFfVFhfQUNLICAgICAgICAgICAgICAgICAgKDFVIDw8IElSUU5fVFhfQUNLKQorI2RlZmluZSBJUlFfVFhfQ1RSTCAgICAgICAgICAgICAgICAgKDFVIDw8IElSUU5fVFhfQ1RSTCkKKyNkZWZpbmUgSVJRX1RYX0NUUkxfQUNLICAgICAgICAgICAgICgxVSA8PCBJUlFOX1RYX0NUUkxfQUNLKQorI2RlZmluZSBJUlFfVFhfQ1RSTF9BQ0tfQUNLICAgICAgICAgKDFVIDw8IElSUU5fVFhfQ1RSTF9BQ0tfQUNLKQorI2RlZmluZSBJUlFfVFhfUkVUUkFOUyAgICAgICAgICAgICAgKDFVIDw8IElSUU5fVFhfUkVUUkFOUykKKworI2RlZmluZSBJUlFfVFhfRU5UUllfRE9ORSAgICAgICAgICAgKDFVIDw8IElSUU5fVFhfRU5UUllfRE9ORSkKKyNkZWZpbmUgSVJRX1RYX0JVRkZFUl9DSEFOR0VEICAgICAgICgxVSA8PCBJUlFOX1RYX0JVRkZFUl9DSEFOR0VEKQorCisjZGVmaW5lIElSUV9SWF9PSyAgICAgICAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9PSykKKyNkZWZpbmUgSVJRX1JYX05PSyAgICAgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1JYX05PSykKKyNkZWZpbmUgSVJRX1JYX0lHTk9SRUQgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1JYX0lHTk9SRUQpCisjZGVmaW5lIElSUV9SWF9FTVBUWSAgICAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9FTVBUWSkKKyNkZWZpbmUgSVJRX1JYX0NUUkwgICAgICAgICAgICAgICAgICgxVSA8PCBJUlFOX1JYX0NUUkwpCisjZGVmaW5lIElSUV9SWF9DVFJMX0FDSyAgICAgICAgICAgICAoMVUgPDwgSVJRTl9SWF9DVFJMX0FDSykKKyNkZWZpbmUgSVJRX1JYX0JVRl9GVUxMICAgICAgICAgICAgICgxVSA8PCBJUlFOX1JYX0JVRl9GVUxMKQorI2RlZmluZSBJUlFfUlhfRU5UUllfRE9ORSAgICAgICAgICAgKDFVIDw8IElSUU5fUlhfRU5UUllfRE9ORSkKKyNkZWZpbmUgSVJRX1JYX0RBVEFfV1JJVFRFTiAgICAgICAgICgxVSA8PCBJUlFOX1JYX0RBVEFfV1JJVFRFTikKKyNkZWZpbmUgSVJRX1JYX05fREFUQV9XUklUVEVOICAgICAgICgxVSA8PCBJUlFOX1JYX05fREFUQV9XUklUVEVOKQorI2RlZmluZSBJUlFfUlhfQUJPUlRFRCAgICAgICAgICAgICAgKDFVIDw8IElSUU5fUlhfQUJPUlRFRCkKKyNkZWZpbmUgSVJRX1JYX0NPTExJU0lPTl9ERVRFQ1RFRCAgICgxVSA8PCBJUlFOX1JYX0NPTExJU0lPTl9ERVRFQ1RFRCkKKyNkZWZpbmUgSVJRX1NZTlRIX05PX0xPQ0sgICAgICAgICAgICgxVSA8PCBJUlFOX1NZTlRIX05PX0xPQ0spCisjZGVmaW5lIElSUV9NT0RVTEVTX1VOTE9DS0VEICAgICAgICAoMVUgPDwgSVJRTl9NT0RVTEVTX1VOTE9DS0VEKQorI2RlZmluZSBJUlFfQk9PVF9ET05FICAgICAgICAgICAgICAgKDFVIDw8IElSUU5fQk9PVF9ET05FKQorI2RlZmluZSBJUlFfSU5URVJOQUxfRVJST1IgICAgICAgICAgKDFVIDw8IElSUU5fSU5URVJOQUxfRVJST1IpCisvLy9AfQorCisKKworLy8vIFxuYW1lIENNRFNUQSB2YWx1ZXMKKy8vLyBWYWx1ZXMgcmV0dXJuZWQgaW4gcmVzdWx0IGJ5dGUgb2YgQ01EU1RBCisvLy9AeworI2RlZmluZSBDTURTVEFfUGVuZGluZyAweDAwICAgICAgICAgICAgICAvLy88IFRoZSBjb21tYW5kIGhhcyBub3QgeWV0IGJlZW4gcGFyc2VkCisjZGVmaW5lIENNRFNUQV9Eb25lIDB4MDEgICAgICAgICAgICAgICAgIC8vLzwgQ29tbWFuZCBzdWNjZXNzZnVsbHkgcGFyc2VkCisKKyNkZWZpbmUgQ01EU1RBX0lsbGVnYWxQb2ludGVyIDB4ODEgICAgICAgLy8vPCBUaGUgcG9pbnRlciBzaWduYWxlZCBpbiBDTURSIGlzIG5vdCB2YWxpZAorI2RlZmluZSBDTURTVEFfVW5rbm93bkNvbW1hbmQgMHg4MiAgICAgICAvLy88IFRoZSBjb21tYW5kIG51bWJlciBpbiB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgaXMgdW5rbm93bgorI2RlZmluZSBDTURTVEFfVW5rbm93bkRpckNvbW1hbmQgMHg4MyAgICAvLy88IFRoZSBjb21tYW5kIG51bWJlciBmb3IgYSBkaXJlY3QgY29tbWFuZCBpcyB1bmtub3duLCBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBjb21tYW5kIGlzIG5vdCBhIGRpcmVjdCBjb21tYW5kCisjZGVmaW5lIENNRFNUQV9Db250ZXh0RXJyb3IgMHg4NSAgICAgICAgIC8vLzwgQW4gaW1tZWRpYXRlIG9yIGRpcmVjdCBjb21tYW5kIHdhcyBpc3N1ZWQgaW4gYSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2hlcmUgaXQgaXMgbm90IHN1cHBvcnRlZAorI2RlZmluZSBDTURTVEFfU2NoZWR1bGluZ0Vycm9yIDB4ODYgICAgICAvLy88IEEgcmFkaW8gb3BlcmF0aW9uIGNvbW1hbmQgd2FzIGF0dGVtcHRlZCB0byBiZSBzY2hlZHVsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB3aGlsZSBhbm90aGVyIG9wZXJhdGlvbiB3YXMgYWxyZWFkeSBydW5uaW5nIGluIHRoZSBSRiBjb3JlCisjZGVmaW5lIENNRFNUQV9QYXJFcnJvciAweDg3ICAgICAgICAgICAgIC8vLzwgVGhlcmUgd2VyZSBlcnJvcnMgaW4gdGhlIGNvbW1hbmQgcGFyYW1ldGVycyB0aGF0IGFyZSBwYXJzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBvbiBzdWJtaXNzaW9uLgorI2RlZmluZSBDTURTVEFfUXVldWVFcnJvciAweDg4ICAgICAgICAgICAvLy88IEFuIG9wZXJhdGlvbiBvbiBhIGRhdGEgZW50cnkgcXVldWUgd2FzIGF0dGVtcHRlZCB0aGF0IHdhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHF1ZXVlIGluIGl0cyBjdXJyZW50IHN0YXRlCisjZGVmaW5lIENNRFNUQV9RdWV1ZUJ1c3kgMHg4OSAgICAgICAgICAgIC8vLzwgQW4gb3BlcmF0aW9uIG9uIGEgZGF0YSBlbnRyeSB3YXMgYXR0ZW1wdGVkIHdoaWxlIHRoYXQgZW50cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB3YXMgYnVzeQorLy8vQH0KKworCisKKy8vLyBcbmFtZSBNYWNyb3MgZm9yIHNlbmRpbmcgZGlyZWN0IGNvbW1hbmRzCisvLy9AeworLy8vIERpcmVjdCBjb21tYW5kIHdpdGggbm8gcGFyYW1ldGVyCisjZGVmaW5lIENNRFJfRElSX0NNRChjbWRJZCkgKCgoY21kSWQpIDw8IDE2KSB8IDEpCisKKy8vLyBEaXJlY3QgY29tbWFuZCB3aXRoIDEtYnl0ZSBwYXJhbWV0ZXIKKyNkZWZpbmUgQ01EUl9ESVJfQ01EXzFCWVRFKGNtZElkLCBwYXIpICgoKGNtZElkKSA8PCAxNikgfCAoKHBhcikgPDwgOCkgfCAxKQorCisvLy8gRGlyZWN0IGNvbW1hbmQgd2l0aCAyLWJ5dGUgcGFyYW1ldGVyCisjZGVmaW5lIENNRFJfRElSX0NNRF8yQllURShjbWRJZCwgcGFyKSAoKChjbWRJZCkgPDwgMTYpIHwgKChwYXIpICYgMHhGRkZDKSB8IDEpCisKKy8vL0B9CisKKworCisvLy8gXG5hbWUgRGVmaW5pdGlvbnMgZm9yIHRyaWdnZXIgdHlwZXMKKy8vL0B7CisjZGVmaW5lIFRSSUdfTk9XIDAgICAgICAgICAgICAvLy88IFRyaWdnZXJzIGltbWVkaWF0ZWx5CisjZGVmaW5lIFRSSUdfTkVWRVIgMSAgICAgICAgICAvLy88IE5ldmVyIHRyaWdzCisjZGVmaW5lIFRSSUdfQUJTVElNRSAyICAgICAgICAvLy88IFRyaWdzIGF0IGFuIGFic29sdXRlIHRpbWUKKyNkZWZpbmUgVFJJR19SRUxfU1VCTUlUIDMgICAgIC8vLzwgVHJpZ3MgYXQgYSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBjb21tYW5kIHdhcyBzdWJtaXR0ZWQKKyNkZWZpbmUgVFJJR19SRUxfU1RBUlQgNCAgICAgIC8vLzwgVHJpZ3MgYXQgYSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBjb21tYW5kIHN0YXJ0ZWQKKyNkZWZpbmUgVFJJR19SRUxfUFJFVlNUQVJUIDUgIC8vLzwgVHJpZ3MgYXQgYSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kIGluIHRoZSBjaGFpbiBzdGFydGVkCisjZGVmaW5lIFRSSUdfUkVMX0ZJUlNUU1RBUlQgNiAvLy88IFRyaWdzIGF0IGEgdGltZSByZWxhdGl2ZSB0byB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgY2hhaW4gc3RhcnRlZAorI2RlZmluZSBUUklHX1JFTF9QUkVWRU5EIDcgICAgLy8vPCBUcmlncyBhdCBhIHRpbWUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIGNvbW1hbmQgaW4gdGhlIGNoYWluIGVuZGVkCisjZGVmaW5lIFRSSUdfUkVMX0VWVDEgOCAgICAgICAvLy88IFRyaWdzIGF0IGEgdGltZSByZWxhdGl2ZSB0byB0aGUgY29udGV4dCBkZWZpbmVkICJFdmVudCAxIgorI2RlZmluZSBUUklHX1JFTF9FVlQyIDkgICAgICAgLy8vPCBUcmlncyBhdCBhIHRpbWUgcmVsYXRpdmUgdG8gdGhlIGNvbnRleHQgZGVmaW5lZCAiRXZlbnQgMiIKKyNkZWZpbmUgVFJJR19FWFRFUk5BTCAxMCAgICAgIC8vLzwgVHJpZ3MgYXQgYW4gZXh0ZXJuYWwgZXZlbnQgdG8gdGhlIHJhZGlvIHRpbWVyCisjZGVmaW5lIFRSSUdfUEFTVF9CTSAweDgwICAgICAvLy88IEJpdG1hc2sgZm9yIHNldHRpbmcgcGFzdFRyaWcgYml0IGluIG9yZGVyIHRvIHRyaWcgaW1tZWRpYXRlbHkgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgdHJpZ2dlciBoYXBwZW5lZCBpbiB0aGUgcGFzdAorLy8vQH0KKworCisvLy8gXG5hbWUgRGVmaW5pdGlvbnMgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbgorLy8vQHsKKyNkZWZpbmUgQ09ORF9BTFdBWVMgMCAgICAgICAgIC8vLzwgQWx3YXlzIHJ1biBuZXh0IGNvbW1hbmQgKGV4Y2VwdCBpbiBjYXNlIG9mIEFib3J0KQorI2RlZmluZSBDT05EX05FVkVSIDEgICAgICAgICAgLy8vPCBOZXZlciBydW4gbmV4dCBjb21tYW5kCisjZGVmaW5lIENPTkRfU1RPUF9PTl9GQUxTRSAyICAvLy88IFJ1biBuZXh0IGNvbW1hbmQgaWYgdGhpcyBjb21tYW5kIHJldHVybmVkIFRydWUsIHN0b3AgaWYgaXQgcmV0dXJuZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgRmFsc2UKKyNkZWZpbmUgQ09ORF9TVE9QX09OX1RSVUUgMyAgIC8vLzwgU3RvcCBpZiB0aGlzIGNvbW1hbmQgcmV0dXJuZWQgVHJ1ZSwgcnVuIG5leHQgY29tbWFuZCBpZiBpdCByZXR1cm5lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBGYWxzZQorI2RlZmluZSBDT05EX1NLSVBfT05fRkFMU0UgNCAgLy8vPCBSdW4gbmV4dCBjb21tYW5kIGlmIHRoaXMgY29tbWFuZCByZXR1cm5lZCBUcnVlLCBza2lwIGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IGNvbW1hbmRzIGlmIGl0IHJldHVybmVkIEZhbHNlCisjZGVmaW5lIENPTkRfU0tJUF9PTl9UUlVFIDUgICAvLy88IFNraXAgYSBudW1iZXIgb2YgY29tbWFuZHMgaWYgdGhpcyBjb21tYW5kIHJldHVybmVkIFRydWUsIHJ1biBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IGNvbW1hbmQgaWYgaXQgcmV0dXJuZWQgRmFsc2UKKy8vL0B9CisKKworCisvLy8gXG5hbWUgUmFkaW8gb3BlcmF0aW9uIHN0YXR1cworLy8vQHsKKy8vLyBcbmFtZSBPcGVyYXRpb24gbm90IGZpbmlzaGVkCisvLy9AeworI2RlZmluZSBJRExFICAgICAgICAgICAgIDB4MDAwMCAgIC8vLzwgT3BlcmF0aW9uIG5vdCBzdGFydGVkCisjZGVmaW5lIFBFTkRJTkcgICAgICAgICAgMHgwMDAxICAgLy8vPCBTdGFydCBvZiBjb21tYW5kIGlzIHBlbmRpbmcKKyNkZWZpbmUgQUNUSVZFICAgICAgICAgICAweDAwMDIgICAvLy88IFJ1bm5pbmcKKyNkZWZpbmUgU0tJUFBFRCAgICAgICAgICAweDAwMDMgICAvLy88IE9wZXJhdGlvbiBza2lwcGVkIGR1ZSB0byBjb25kaXRpb24gaW4gYW5vdGhlciBjb21tYW5kCisvLy9AfQorLy8vIFxuYW1lIE9wZXJhdGlvbiBmaW5pc2hlZCBub3JtYWxseQorLy8vQHsKKyNkZWZpbmUgRE9ORV9PSyAgICAgICAgICAweDA0MDAgICAvLy88IE9wZXJhdGlvbiBlbmRlZCBub3JtYWxseQorI2RlZmluZSBET05FX0NPVU5URE9XTiAgIDB4MDQwMSAgIC8vLzwgQ291bnRlciByZWFjaGVkIHplcm8KKyNkZWZpbmUgRE9ORV9SWEVSUiAgICAgICAweDA0MDIgICAvLy88IE9wZXJhdGlvbiBlbmRlZCB3aXRoIENSQyBlcnJvcgorI2RlZmluZSBET05FX1RJTUVPVVQgICAgIDB4MDQwMyAgIC8vLzwgT3BlcmF0aW9uIGVuZGVkIHdpdGggdGltZW91dAorI2RlZmluZSBET05FX1NUT1BQRUQgICAgIDB4MDQwNCAgIC8vLzwgT3BlcmF0aW9uIHN0b3BwZWQgYWZ0ZXIgQ01EX1NUT1AgY29tbWFuZAorI2RlZmluZSBET05FX0FCT1JUICAgICAgIDB4MDQwNSAgIC8vLzwgT3BlcmF0aW9uIGFib3J0ZWQgYnkgQ01EX0FCT1JUIGNvbW1hbmQKKyNkZWZpbmUgRE9ORV9GQUlMRUQgICAgICAweDA0MDYgICAvLy88IFNjaGVkdWxlZCBpbW1lZGlhdGUgY29tbWFuZCBmYWlsZWQKKy8vL0B9CisvLy8gXG5hbWUgT3BlcmF0aW9uIGZpbmlzaGVkIHdpdGggZXJyb3IKKy8vL0B7CisjZGVmaW5lIEVSUk9SX1BBU1RfU1RBUlQgMHgwODAwICAgLy8vPCBUaGUgc3RhcnQgdHJpZ2dlciBvY2N1cnJlZCBpbiB0aGUgcGFzdAorI2RlZmluZSBFUlJPUl9TVEFSVF9UUklHIDB4MDgwMSAgIC8vLzwgSWxsZWdhbCBzdGFydCB0cmlnZ2VyIHBhcmFtZXRlcgorI2RlZmluZSBFUlJPUl9DT05ESVRJT04gIDB4MDgwMiAgIC8vLzwgSWxsZWdhbCBjb25kaXRpb24gZm9yIG5leHQgb3BlcmF0aW9uCisjZGVmaW5lIEVSUk9SX1BBUiAgICAgICAgMHgwODAzICAgLy8vPCBFcnJvciBpbiBhIGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVyCisjZGVmaW5lIEVSUk9SX1BPSU5URVIgICAgMHgwODA0ICAgLy8vPCBJbnZhbGlkIHBvaW50ZXIgdG8gbmV4dCBvcGVyYXRpb24KKyNkZWZpbmUgRVJST1JfQ01ESUQgICAgICAweDA4MDUgICAvLy88IE5leHQgb3BlcmF0aW9uIGhhcyBhIGNvbW1hbmQgSUQgdGhhdCBpcyB1bmRlZmluZWQgb3Igbm90IGEgcmFkaW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IG9wZXJhdGlvbiBjb21tYW5kCisjZGVmaW5lIEVSUk9SX1dST05HX0JHICAgMHgwODA2ICAgLy8vPCBGRyBsZXZlbCBjb21tYW5kIG5vdCBjb21wYXRpYmxlIHdpdGggcnVubmluZyBCRyBsZXZlbCBjb21tYW5kCisjZGVmaW5lIEVSUk9SX05PX1NFVFVQICAgMHgwODA3ICAgLy8vPCBPcGVyYXRpb24gdXNpbmcgUnggb3IgVHggYXR0ZW10ZWQgd2l0aG91dCBDTURfUkFESU9fU0VUVVAKKyNkZWZpbmUgRVJST1JfTk9fRlMgICAgICAweDA4MDggICAvLy88IE9wZXJhdGlvbiB1c2luZyBSeCBvciBUeCBhdHRlbXRlZCB3aXRob3V0IGZyZXF1ZW5jeSBzeW50aCBjb25maWd1cmVkCisjZGVmaW5lIEVSUk9SX1NZTlRIX1BST0cgMHgwODA5ICAgLy8vPCBTeW50aGVzaXplciBjYWxpYnJhdGlvbiBmYWlsZWQKKyNkZWZpbmUgRVJST1JfVFhVTkYgICAgICAweDA4MEEgICAvLy88IFR4IHVuZGVyZmxvdyBvYnNlcnZlZAorI2RlZmluZSBFUlJPUl9SWE9WRiAgICAgIDB4MDgwQiAgIC8vLzwgUnggb3ZlcmZsb3cgb2JzZXJ2ZWQKKyNkZWZpbmUgRVJST1JfTk9fUlggICAgICAweDA4MEMgICAvLy88IEF0dGVtcHRlZCB0byBhY2Nlc3MgZGF0YSBmcm9tIFJ4IHdoZW4gbm8gc3VjaCBkYXRhIHdhcyB5ZXQgcmVjZWl2ZWQKKyNkZWZpbmUgRVJST1JfUEVORElORyAgICAweDA4MEQgICAvLy88IENvbW1hbmQgc3VibWl0dGVkIGluIHRoZSBmdXR1cmUgd2l0aCBhbm90aGVyIGNvbW1hbmQgYXQgZGlmZmVyZW50IGxldmVsIHBlbmRpbmcKKy8vL0B9CisvLy9AfQorCisKKy8vLyBcbmFtZSBEYXRhIGVudHJ5IHR5cGVzCisvLy9AeworI2RlZmluZSBEQVRBX0VOVFJZX1RZUEVfR0VOIDAgICAgIC8vLzwgR2VuZXJhbCB0eXBlOiBUeCBlbnRyeSBvciBzaW5nbGUgZWxlbWVudCBSeCBlbnRyeQorI2RlZmluZSBEQVRBX0VOVFJZX1RZUEVfTVVMVEkgMSAgIC8vLzwgTXVsdGktZWxlbWVudCBSeCBlbnRyeSB0eXBlCisjZGVmaW5lIERBVEFfRU5UUllfVFlQRV9QVFIgMiAgICAgLy8vPCBQb2ludGVyIGVudHJ5IHR5cGUKKyNkZWZpbmUgREFUQV9FTlRSWV9UWVBFX1BBUlRJQUwgMyAvLy88IFBhcnRpYWwgcmVhZCBlbnRyeSB0eXBlCisvLy9ACisKKworLy8vIFxuYW1lIERhdGEgZW50cnkgc3RhdHVzZXMKKy8vL0B7CisjZGVmaW5lIERBVEFfRU5UUllfUEVORElORyAwICAgICAgLy8vPCBFbnRyeSBub3QgeWV0IHVzZWQKKyNkZWZpbmUgREFUQV9FTlRSWV9BQ1RJVkUgMSAgICAgICAvLy88IEVudHJ5IGluIHVzZSBieSByYWRpbyBDUFUKKyNkZWZpbmUgREFUQV9FTlRSWV9CVVNZIDIgICAgICAgICAvLy88IEVudHJ5IGJlaW5nIHVwZGF0ZWQKKyNkZWZpbmUgREFUQV9FTlRSWV9GSU5JU0hFRCAzICAgICAvLy88IFJhZGlvIENQVSBpcyBmaW5pc2hlZCBhY2Nlc3NpbmcgdGhlIGVudHJ5CisjZGVmaW5lIERBVEFfRU5UUllfVU5GSU5JU0hFRCA0ICAgLy8vPCBSYWRpbyBDUFUgaXMgZmluaXNoZWQgYWNjZXNzaW5nIHRoZSBlbnRyeSwgYnV0IHBhY2tldCBjb3VsZCBub3QgYmUgZmluaXNoZWQKKy8vL0B9CisKKworCisvLy8gXG5hbWUgTWFjcm9zIGZvciBSRiByZWdpc3RlciBvdmVycmlkZQorLy8vQHsKKy8vLyBNYWNybyBmb3IgQURJIGhhbGYtc2l6ZSB2YWx1ZS1tYXNrIGNvbWJpbmF0aW9uCisjZGVmaW5lIEFESV9WQUxfTUFTSyhhZGRyLCBtYXNrLCB2YWx1ZSkgXAorKCgoYWRkcikgJiAxKSA/ICgoKG1hc2spICYgMHgwRikgfCAoKCh2YWx1ZSkgJiAweDBGKSA8PCA0KSkgOiBcCisgKCgoKG1hc2spICYgMHgwRikgPDwgNCkgfCAoKHZhbHVlKSAmIDB4MEYpKSkKKy8vLyAzMi1iaXQgd3JpdGUgb2YgMTYtYml0IHZhbHVlCisjZGVmaW5lIEhXX1JFR19PVkVSUklERShhZGRyLCB2YWwpICgoKCh1aW50cHRyX3QpIChhZGRyKSkgJiAweEZGRkMpIHwgKCh1aW50MzJfdCkodmFsKSA8PCAxNikpCisvLy8gQURJIHJlZ2lzdGVyLCBmdWxsLXNpemUgd3JpdGUKKyNkZWZpbmUgQURJX1JFR19PVkVSUklERShhZGlObywgYWRkciwgdmFsKSAoMiB8ICgodWludDMyX3QpKHZhbCkgPDwgMTYpIHwgXAorKCgoYWRkcikgJiAweDNGKSA8PCAyNCkgfCAoKChhZGlObykgPyAxVSA6IDApIDw8IDMxKSkKKy8vLyAyIEFESSByZWdpc3RlcnMsIGZ1bGwtc2l6ZSB3cml0ZQorI2RlZmluZSBBRElfMlJFR19PVkVSUklERShhZGlObywgYWRkciwgdmFsLCBhZGRyMiwgdmFsMikgXAorKDIgfCAoKHVpbnQzMl90KSh2YWwyKSA8PCAyKSB8ICgoKGFkZHIyKSAmIDB4M0YpIDw8IDEwKSB8ICgodWludDMyX3QpKHZhbCkgPDwgMTYpIHwgXAorKCgoYWRkcikgJiAweDNGKSA8PCAyNCkgfCAoKChhZGlObykgPyAxVSA6IDApIDw8IDMxKSkKKy8vLyBBREkgcmVnaXN0ZXIsIGhhbGYtc2l6ZSByZWFkLW1vZGlmeS13cml0ZQorI2RlZmluZSBBRElfSEFMRlJFR19PVkVSUklERShhZGlObywgYWRkciwgbWFzaywgdmFsKSAoMiB8IChBRElfVkFMX01BU0soYWRkciwgbWFzaywgdmFsKSA8PCAxNikgfCBcCisoKChhZGRyKSAmIDB4M0YpIDw8IDI0KSB8ICgxVSA8PCAzMCkgfCAoKChhZGlObykgPyAxVSA6IDApIDw8IDMxKSkKKy8vLyAyIEFESSByZWdpc3RlcnMsIGhhbGYtc2l6ZSByZWFkLW1vZGlmeS13cml0ZQorI2RlZmluZSBBRElfMkhBTEZSRUdfT1ZFUlJJREUoYWRpTm8sIGFkZHIsIG1hc2ssIHZhbCwgYWRkcjIsIG1hc2syLCB2YWwyKSBcCisoMiB8IChBRElfVkFMX01BU0soYWRkcjIsIG1hc2syLCB2YWwyKSA8PCAyKSB8ICgoKGFkZHIyKSAmIDB4M0YpIDw8IDEwKSB8IFwKKyhBRElfVkFMX01BU0soYWRkciwgbWFzaywgdmFsKSA8PCAxNikgfCAoKChhZGRyKSAmIDB4M0YpIDw8IDI0KSB8ICgxVSA8PCAzMCkgfCAoKChhZGlObykgPyAxVSA6IDApIDw8IDMxKSkKKworLy8vIDE2LWJpdCBTVyByZWdpc3RlciBhcyBkZWZpbmVkIGluIHJhZGlvX3Bhcl9kZWYudHh0CisjZGVmaW5lIFNXX1JFR19PVkVSUklERShjbWQsIGZpZWxkLCB2YWwpICgzIHwgKChfUE9TSVRJT05fIyNjbWQjI18jI2ZpZWxkKSA8PCA0KSB8ICgodWludDMyX3QpKHZhbCkgPDwgMTYpKQorLy8vIFNXIHJlZ2lzdGVyIGFzIGRlZmluZWQgaW4gcmFkaW9fcGFyX2RlZi50eHQgd2l0aCBhZGRlZCBpbmRleCAoZm9yIHVzZSB3aXRoIHJlZ2lzdGVycyA+IDE2IGJpdHMpLgorI2RlZmluZSBTV19SRUdfSU5EX09WRVJSSURFKGNtZCwgZmllbGQsIG9mZnNldCwgdmFsKSAoMyB8IFwKKygoKF9QT1NJVElPTl8jI2NtZCMjXyMjZmllbGQpICsgKChvZmZzZXQpIDw8IDEpKSA8PCA0KSB8ICgodWludDMyX3QpKHZhbCkgPDwgMTYpKQorLy8vIDgtYml0IFNXIHJlZ2lzdGVyIGFzIGRlZmluZWQgaW4gcmFkaW9fcGFyX2RlZi50eHQKKyNkZWZpbmUgU1dfUkVHX0JZVEVfT1ZFUlJJREUoY21kLCBmaWVsZCwgdmFsKSAoMHg4MDAzIHwgKChfUE9TSVRJT05fIyNjbWQjI18jI2ZpZWxkKSA8PCA0KSB8IFwKKygodWludDMyX3QpKHZhbCkgPDwgMTYpKQorLy8vIFR3byA4LWJpdCBTVyByZWdpc3RlcnMgYXMgZGVmaW5lZCBpbiByYWRpb19wYXJfZGVmLnR4dDsgdGhlIG9uZSBnaXZlbiBieSBmaWVsZCBhbmQgdGhlIG5leHQgYnl0ZS4KKyNkZWZpbmUgU1dfUkVHXzJCWVRFX09WRVJSSURFKGNtZCwgZmllbGQsIHZhbDAsIHZhbDEpICgzIHwgKCgoX1BPU0lUSU9OXyMjY21kIyNfIyNmaWVsZCkgJiAweEZGRkUpIDw8IDQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KSh2YWwwKSA8PCAxNikgJiAweDAwRkYwMDAwKSB8ICgodWludDMyX3QpKHZhbDEpIDw8IDI0KSkKKyNkZWZpbmUgSFcxNl9BUlJBWV9PVkVSUklERShhZGRyLCBsZW5ndGgpICgxIHwgKCgodWludHB0cl90KSAoYWRkcikpICYgMHhGRkZDKSB8ICgodWludDMyX3QpKGxlbmd0aCkgPDwgMTYpKQorI2RlZmluZSBIVzMyX0FSUkFZX09WRVJSSURFKGFkZHIsIGxlbmd0aCkgKDEgfCAoKCh1aW50cHRyX3QpIChhZGRyKSkgJiAweEZGRkMpIHwgXAorKCh1aW50MzJfdCkobGVuZ3RoKSA8PCAxNikgfCAoMVUgPDwgMzApKQorI2RlZmluZSBBRElfQVJSQVlfT1ZFUlJJREUoYWRpTm8sIGFkZHIsIGJIYWxmU2l6ZSwgbGVuZ3RoKSAoMSB8ICgoKChhZGRyKSAmIDB4M0YpIDw8IDIpKSB8IFwKKygoISEoYkhhbGZTaXplKSkgPDwgOCkgfCAoKCEhKGFkaU5vKSkgPDwgOSkgfCAoKHVpbnQzMl90KShsZW5ndGgpIDw8IDE2KSB8ICgyVSA8PCAzMCkpCisjZGVmaW5lIFNXX0FSUkFZX09WRVJSSURFKGNtZCwgZmlyc3RmaWVsZCwgbGVuZ3RoKSAoMSB8ICgoKF9QT1NJVElPTl8jI2NtZCMjXyMjZmlyc3RmaWVsZCkpIDw8IDIpIHwgXAorKCh1aW50MzJfdCkobGVuZ3RoKSA8PCAxNikgfCAoM1UgPDwgMzApKQorI2RlZmluZSBNQ0VfUkZFX09WRVJSSURFKGJNY2VSYW0sIG1jZVJvbUJhbmssIG1jZU1vZGUsIGJSZmVSYW0sIHJmZVJvbUJhbmssIHJmZU1vZGUpIFwKKyAgICg3IHwgKCghIShiTWNlUmFtKSkgPDwgOCkgfCAoKChtY2VSb21CYW5rKSAmIDB4MDcpIDw8IDkpIHwgKCghIShiUmZlUmFtKSkgPDwgMTIpIHwgKCgocmZlUm9tQmFuaykgJiAweDA3KSA8PCAxMykgfCBcCisgICAgKCgobWNlTW9kZSkgJiAweDAwRkYpIDw8IDE2KSB8ICgoKHJmZU1vZGUpICYgMHgwMEZGKSA8PCAyNCkpCisjZGVmaW5lIE5FV19PVkVSUklERV9TRUdNRU5UKGFkZHJlc3MpICgoKCgodWludHB0cl90KShhZGRyZXNzKSkgJiAweDAzRkZGRkZDKSA8PCA2KSB8IDB4MDAwRiB8IFwKKyAgICgoKCgodWludHB0cl90KShhZGRyZXNzKSA+PiAyNCkgPT0gMHgyMCkgPyAweDAxIDogXAorICAgICAoKCh1aW50cHRyX3QpKGFkZHJlc3MpID4+IDI0KSA9PSAweDIxKSA/IDB4MDIgOiBcCisgICAgICgoKHVpbnRwdHJfdCkoYWRkcmVzcykgPj4gMjQpID09IDB4QTApID8gMHgwMyA6IFwKKyAgICAgKCgodWludHB0cl90KShhZGRyZXNzKSA+PiAyNCkgPT0gMHgwMCkgPyAweDA0IDogXAorICAgICAoKCh1aW50cHRyX3QpKGFkZHJlc3MpID4+IDI0KSA9PSAweDEwKSA/IDB4MDUgOiBcCisgICAgICgoKHVpbnRwdHJfdCkoYWRkcmVzcykgPj4gMjQpID09IDB4MTEpID8gMHgwNiA6IFwKKyAgICAgKCgodWludHB0cl90KShhZGRyZXNzKSA+PiAyNCkgPT0gMHg0MCkgPyAweDA3IDogXAorICAgICAoKCh1aW50cHRyX3QpKGFkZHJlc3MpID4+IDI0KSA9PSAweDUwKSA/IDB4MDggOiBcCisgICAgIDB4MDkpIDw8IDQpKSAvLyBVc2UgaWxsZWdhbCB2YWx1ZSBmb3IgaWxsZWdhbCBhZGRyZXNzIHJhbmdlCisvLy8gRW5kIG9mIHN0cmluZyBmb3Igb3ZlcnJpZGUgcmVnaXN0ZXIKKyNkZWZpbmUgRU5EX09WRVJSSURFIDB4RkZGRkZGRkYKKworCisvLy8gQURJIGFkZHJlc3MtdmFsdWUgcGFpcgorI2RlZmluZSBBRElfQUREUl9WQUwoYWRkciwgdmFsdWUpICgoKChhZGRyKSAmIDB4N0YpIDw8IDgpIHwgKCh2YWx1ZSkgJiAweEZGKSkKKyNkZWZpbmUgQURJX0FERFJfVkFMX01BU0soYWRkciwgbWFzaywgdmFsdWUpICgoKChhZGRyKSAmIDB4N0YpIDw8IDgpIHwgQURJX1ZBTF9NQVNLKGFkZHIsIG1hc2ssIHZhbHVlKSkKKworLy8vIExvdyBoYWxmLXdvcmQKKyNkZWZpbmUgTE9XT1JEKHZhbHVlKSAoKHZhbHVlKSAmIDB4RkZGRikKKy8vLyBIaWdoIGhhbGYtd29yZAorI2RlZmluZSBISVdPUkQodmFsdWUpICgodmFsdWUpID4+IDE2KQorLy8vQH0KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmX3Byb3BfY21kLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9wcm9wX2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjg1NTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9wcm9wX2NtZC5oCkBAIC0wLDAgKzEsNDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZfcHJvcF9jbWQuaAorKiAgUmV2aXNlZDogICAgICAgICQgJAorKiAgUmV2aXNpb246ICAgICAgICQgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIENDMjZ4eCBBUEkgZm9yIFByb3ByaWV0YXJ5IG1vZGUgY29tbWFuZHMKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19QUk9QX0NNRF9ICisjZGVmaW5lIF9fUFJPUF9DTURfSAorCisjaWZuZGVmIF9fUkZDX1NUUlVDVAorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fUkZDX1NUUlVDVCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKQorI2Vsc2UKKyNkZWZpbmUgX19SRkNfU1RSVUNUCisjZW5kaWYKKyNlbmRpZgorCisvLyEgXGFkZHRvZ3JvdXAgcmZjCisvLyEgQHsKKworLy8hIFxhZGR0b2dyb3VwIHByb3BfY21kCisvLyEgQHsKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9tYWlsYm94Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX2NvbW1vbl9jbWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9UWF9zIHJmY19DTURfUFJPUF9UWF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9SWF9zIHJmY19DTURfUFJPUF9SWF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9UWF9BRFZfcyByZmNfQ01EX1BST1BfVFhfQURWX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1JYX0FEVl9zIHJmY19DTURfUFJPUF9SWF9BRFZfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfUkFESU9fU0VUVVBfcyByZmNfQ01EX1BST1BfUkFESU9fU0VUVVBfdDsKK3R5cGVkZWYgc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfU0VUX0xFTl9zIHJmY19DTURfUFJPUF9TRVRfTEVOX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1JFU1RBUlRfUlhfcyByZmNfQ01EX1BST1BfUkVTVEFSVF9SWF90OwordHlwZWRlZiBzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19wcm9wUnhPdXRwdXRfcyByZmNfcHJvcFJ4T3V0cHV0X3Q7Cit0eXBlZGVmIHN0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3Byb3BSeFN0YXR1c19zIHJmY19wcm9wUnhTdGF0dXNfdDsKKworLy8hIFxhZGR0b2dyb3VwIENNRF9QUk9QX1RYCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BST1BfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM4MDEKKy8vISBQcm9wcmlldGFyeSBNb2RlIFRyYW5zbWl0IENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1RYX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDM4MDEKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkZzT2ZmOjE7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBLZWVwIGZyZXF1ZW5jeSBzeW50aCBvbiBhZnRlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFR1cm4gZnJlcXVlbmN5IHN5bnRoIG9mZiBhZnRlciBjb21tYW5kCisgICAgICB1aW50OF90IDoyOworICAgICAgdWludDhfdCBiVXNlQ3JjOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERvIG5vdCBhcHBlbmQgQ1JDPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEFwcGVuZCBDUkMKKyAgICAgIHVpbnQ4X3QgYlZhckxlbjoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBGaXhlZCBsZW5ndGg8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogVHJhbnNtaXQgbGVuZ3RoIGFzIGZpcnN0IGJ5dGUKKyAgIH0gcGt0Q29uZjsKKyAgIHVpbnQ4X3QgcGt0TGVuOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQYWNrZXQgbGVuZ3RoCisgICB1aW50MzJfdCBzeW5jV29yZDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU3luYyB3b3JkIHRvIHRyYW5zbWl0CisgICB1aW50OF90KiBwUGt0OyAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUG9pbnRlciB0byBwYWNrZXQKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1BST1BfUlgKKy8vISBAeworI2RlZmluZSBDTURfUFJPUF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgwMgorLy8hIFByb3ByaWV0YXJ5IE1vZGUgUmVjZWl2ZSBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9SWF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzODAyCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJGc09mZjoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogS2VlcCBmcmVxdWVuY3kgc3ludGggb24gYWZ0ZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBUdXJuIGZyZXF1ZW5jeSBzeW50aCBvZmYgYWZ0ZXIgY29tbWFuZAorICAgICAgdWludDhfdCBiUmVwZWF0T2s6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEVuZCBvcGVyYXRpb24gYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0IGNvcnJlY3RseTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBHbyBiYWNrIHRvIHN5bmMgc2VhcmNoIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCBjb3JyZWN0bHkKKyAgICAgIHVpbnQ4X3QgYlJlcGVhdE5vazoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBFbmQgb3BlcmF0aW9uIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIENSQyBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBHbyBiYWNrIHRvIHN5bmMgc2VhcmNoIGFmdGVyIHJlY2VpdmluZyBhIHBhY2tldCB3aXRoIENSQyBlcnJvcgorICAgICAgdWludDhfdCBiVXNlQ3JjOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERvIG5vdCBjaGVjayBDUkM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ2hlY2sgQ1JDCisgICAgICB1aW50OF90IGJWYXJMZW46MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRml4ZWQgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFJlY2VpdmUgbGVuZ3RoIGFzIGZpcnN0IGJ5dGUKKyAgICAgIHVpbnQ4X3QgYkNoa0FkZHJlc3M6MTsgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhZGRyZXNzIGNoZWNrPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENoZWNrIGFkZHJlc3MKKyAgICAgIHVpbnQ4X3QgZW5kVHlwZToxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBQYWNrZXQgaXMgcmVjZWl2ZWQgdG8gdGhlIGVuZCBpZiBlbmQgdHJpZ2dlciBoYXBwZW5zIGFmdGVyIHN5bmMgaXMgb2J0YWluZWQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUGFja2V0IHJlY2VwdGlvbiBpcyBzdG9wcGVkIGlmIGVuZCB0cmlnZ2VyIGhhcHBlbnMKKyAgICAgIHVpbnQ4X3QgZmlsdGVyT3A6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBTdG9wIHJlY2VpdmVyIGFuZCByZXN0YXJ0IHN5bmMgc2VhcmNoIG9uIGFkZHJlc3MgbWlzbWF0Y2g8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogUmVjZWl2ZSBwYWNrZXQgYW5kIG1hcmsgaXQgYXMgaWdub3JlZCBvbiBhZGRyZXNzIG1pc21hdGNoCisgICB9IHBrdENvbmY7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBiQXV0b0ZsdXNoSWdub3JlZDoxOyAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgZGlzY2FyZCBpZ25vcmVkIHBhY2tldHMgZnJvbSBSWCBxdWV1ZQorICAgICAgdWludDhfdCBiQXV0b0ZsdXNoQ3JjRXJyOjE7ICAgICAgIC8vITwgICAgICAgIElmIDEsIGF1dG9tYXRpY2FsbHkgZGlzY2FyZCBwYWNrZXRzIHdpdGggQ1JDIGVycm9yIGZyb20gUlggcXVldWUKKyAgICAgIHVpbnQ4X3QgOjE7CisgICAgICB1aW50OF90IGJJbmNsdWRlSGRyOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgaGVhZGVyIG9yIGxlbmd0aCBieXRlIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiSW5jbHVkZUNyYzoxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGluY2x1ZGUgdGhlIHJlY2VpdmVkIENSQyBmaWVsZCBpbiB0aGUgc3RvcmVkIHBhY2tldDsgb3RoZXJ3aXNlIGRpc2NhcmQgaXQKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFJzc2k6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYW4gUlNTSSBieXRlIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJYIHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRUaW1lc3RhbXA6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgdGltZXN0YW1wIHRvIHRoZSBwYWNrZXQgaW4gdGhlIFJYIHF1ZXVlCisgICAgICB1aW50OF90IGJBcHBlbmRTdGF0dXM6MTsgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXBwZW5kIGEgc3RhdHVzIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUlggcXVldWUKKyAgIH0gcnhDb25mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSWCBjb25maWd1cmF0aW9uCisgICB1aW50MzJfdCBzeW5jV29yZDsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgU3luYyB3b3JkIHRvIGxpc3RlbiBmb3IKKyAgIHVpbnQ4X3QgbWF4UGt0TGVuOyAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBQYWNrZXQgbGVuZ3RoIGZvciBmaXhlZCBsZW5ndGgsIG1heGltdW0gcGFja2V0IGxlbmd0aCBmb3IgdmFyaWFibGUgbGVuZ3RoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFVubGltaXRlZCBvciB1bmtub3duIGxlbmd0aAorICAgdWludDhfdCBhZGRyZXNzMDsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFkZHJlc3MKKyAgIHVpbnQ4X3QgYWRkcmVzczE7ICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBZGRyZXNzIChzZXQgZXF1YWwgdG8gPGNvZGU+YWRkcmVzczA8L2NvZGU+IHRvIGFjY2VwdCBvbmx5IG9uZSBhZGRyZXNzLiBJZiAweEZGLCBhY2NlcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDAwIGFzIHdlbGwpCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgY2xhc3NpZmllciBmb3IgZW5kaW5nIHRoZSBvcGVyYXRpb24KKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiBmb3IgZW5kaW5nIHRoZSBvcGVyYXRpb24KKyAgIGRhdGFRdWV1ZV90KiBwUXVldWU7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgcXVldWUKKyAgIHVpbnQ4X3QqIHBPdXRwdXQ7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIG91dHB1dCBzdHJ1Y3R1cmUKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1BST1BfVFhfQURWCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BST1BfVFhfQURWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM4MDMKKy8vISBQcm9wcmlldGFyeSBNb2RlIEFkdmFuY2VkIFRyYW5zbWl0IENvbW1hbmQKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX0NNRF9QUk9QX1RYX0FEVl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzODAzCisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJGc09mZjoxOyAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogS2VlcCBmcmVxdWVuY3kgc3ludGggb24gYWZ0ZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBUdXJuIGZyZXF1ZW5jeSBzeW50aCBvZmYgYWZ0ZXIgY29tbWFuZAorICAgICAgdWludDhfdCA6MjsKKyAgICAgIHVpbnQ4X3QgYlVzZUNyYzoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgYXBwZW5kIENSQzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBcHBlbmQgQ1JDCisgICAgICB1aW50OF90IGJDcmNJbmNTdzoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDpEbyBub3QgaW5jbHVkZSBzeW5jIHdvcmQgaW4gQ1JDIGNhbGN1bGF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEluY2x1ZGUgc3luYyB3b3JkIGluIENSQyBjYWxjdWxhdGlvbgorICAgICAgdWludDhfdCBiQ3JjSW5jSGRyOjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERvIG5vdCBpbmNsdWRlIGhlYWRlciBpbiBDUkMgY2FsY3VsYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogSW5jbHVkZSBoZWFkZXIgaW4gQ1JDIGNhbGN1bGF0aW9uCisgICB9IHBrdENvbmY7CisgICB1aW50OF90IG51bUhkckJpdHM7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIGJpdHMgaW4gaGVhZGVyICgwJm5kYXNoOzMyKQorICAgdWludDE2X3QgcGt0TGVuOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBhY2tldCBsZW5ndGguIDA6IFVubGltaXRlZAorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkV4dFR4VHJpZzoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBTdGFydCBwYWNrZXQgb24gYSBmaXhlZCB0aW1lIGZyb20gdGhlIGNvbW1hbmQgc3RhcnQgdHJpZ2dlcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBTdGFydCBwYWNrZXQgb24gYW4gZXh0ZXJuYWwgdHJpZ2dlciAoaW5wdXQgZXZlbnQgdG8gUkFUKQorICAgICAgdWludDhfdCBpbnB1dE1vZGU6MjsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIElucHV0IG1vZGUgaWYgZXh0ZXJuYWwgdHJpZ2dlciBpcyB1c2VkIGZvciBUWCBzdGFydDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAwOiBSaXNpbmcgZWRnZTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBGYWxsaW5nIGVkZ2U8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogQm90aCBlZGdlczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQ4X3Qgc291cmNlOjU7ICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSQVQgaW5wdXQgZXZlbnQgbnVtYmVyIHVzZWQgZm9yIGNhcHR1cmUgaWYgZXh0ZXJuYWwgdHJpZ2dlciBpcyB1c2VkIGZvciBUWCBzdGFydAorICAgfSBzdGFydENvbmY7CisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBwcmVUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgZm9yIHRyYW5zaXRpb24gZnJvbSBwcmVhbWJsZSB0byBzeW5jIHdvcmQKKyAgIHJhdG1yX3QgcHJlVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5wcmVUcmlnZ2VyPC9jb2RlPiBmb3IgdHJhbnNpdGlvbiBmcm9tIHByZWFtYmxlIHRvIHN5bmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB3b3JkLiBJZiA8Y29kZT5wcmVUcmlnZ2VyLnRyaWdnZXJUeXBlPC9jb2RlPiBpcyBzZXQgdG8gIm5vdyIsIG9uZSBwcmVhbWJsZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGNvbmZpZ3VyZWQgaW4gdGhlIHNldHVwIHdpbGwgYmUgc2VudC4gT3RoZXJ3aXNlLCB0aGUgcHJlYW1ibGUgd2lsbCBiZSByZXBlYXRlZCB1bnRpbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHRoaXMgdHJpZ2dlciBpcyBvYnNlcnZlZC4KKyAgIHVpbnQzMl90IHN5bmNXb3JkOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTeW5jIHdvcmQgdG8gdHJhbnNtaXQKKyAgIHVpbnQ4X3QqIHBQa3Q7ICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHBhY2tldCwgb3IgVFggcXVldWUgZm9yIHVubGltaXRlZCBsZW5ndGgKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1BST1BfUlhfQURWCisvLyEgQHsKKyNkZWZpbmUgQ01EX1BST1BfUlhfQURWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM4MDQKKy8vISBQcm9wcmlldGFyeSBNb2RlIEFkdmFuY2VkIFJlY2VpdmUgQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfUlhfQURWX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDM4MDQKKyAgIHVpbnQxNl90IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiBBbiBpbnRlZ2VyIHRlbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGUgY29tbWFuZC4gVGhpcyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIHVwZGF0ZWQgYnkgdGhlIHJhZGlvIENQVSBkdXJpbmcgb3BlcmF0aW9uIGFuZCBtYXkgYmUgcmVhZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBzeXN0ZW0gQ1BVIGF0IGFueSB0aW1lLgorICAgcmZjX3JhZGlvT3BfdCAqcE5leHRPcDsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgb3BlcmF0aW9uIHRvIHJ1biBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBkb25lCisgICByYXRtcl90IHN0YXJ0VGltZTsgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgQWJzb2x1dGUgb3IgcmVsYXRpdmUgc3RhcnQgdGltZSAoZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8Y29kZT5zdGFydFRyaWdnZXI8L2NvZGU+KQorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlclR5cGU6NDsgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHlwZSBvZiB0cmlnZ2VyCisgICAgICB1aW50OF90IGJFbmFDbWQ6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogTm8gYWx0ZXJuYXRpdmUgdHJpZ2dlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IENNRF9UUklHR0VSIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgdHJpZ2dlck5vOjI7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgdHJpZ2dlciBudW1iZXIgb2YgdGhlIENNRF9UUklHR0VSIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyB0aGlzIGFjdGlvbgorICAgICAgdWludDhfdCBwYXN0VHJpZzoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyBuZXZlciB0cmlnZ2VyZWQsIG9yIGZvciBzdGFydCBvZiBjb21tYW5kcywgZ2l2ZSBhbiBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgdHJpZ2dlcmVkIGFzIHNvb24gYXMgcG9zc2libGUKKyAgIH0gc3RhcnRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBJZGVudGlmaWNhdGlvbiBvZiB0aGUgdHJpZ2dlciB0aGF0IHN0YXJ0cyB0aGUgb3BlcmF0aW9uCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBydWxlOjQ7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIENvbmRpdGlvbiBmb3IgcnVubmluZyBuZXh0IGNvbW1hbmQ6IFJ1bGUgZm9yIGhvdyB0byBwcm9jZWVkCisgICAgICB1aW50OF90IG5Ta2lwOjQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHNraXBzICsgMSBpZiB0aGUgcnVsZSBpbnZvbHZlcyBza2lwcGluZy4gMDogc2FtZSwgMTogbmV4dCwgMjogc2tpcCBuZXh0LCAuLi4KKyAgIH0gY29uZGl0aW9uOworICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgYkZzT2ZmOjE7ICAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBLZWVwIGZyZXF1ZW5jeSBzeW50aCBvbiBhZnRlciBjb21tYW5kPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFR1cm4gZnJlcXVlbmN5IHN5bnRoIG9mZiBhZnRlciBjb21tYW5kCisgICAgICB1aW50OF90IGJSZXBlYXRPazoxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRW5kIG9wZXJhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBwYWNrZXQgY29ycmVjdGx5PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEdvIGJhY2sgdG8gc3luYyBzZWFyY2ggYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0IGNvcnJlY3RseQorICAgICAgdWludDhfdCBiUmVwZWF0Tm9rOjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEVuZCBvcGVyYXRpb24gYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0IHdpdGggQ1JDIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEdvIGJhY2sgdG8gc3luYyBzZWFyY2ggYWZ0ZXIgcmVjZWl2aW5nIGEgcGFja2V0IHdpdGggQ1JDIGVycm9yCisgICAgICB1aW50OF90IGJVc2VDcmM6MTsgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRG8gbm90IGNoZWNrIENSQzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDaGVjayBDUkMKKyAgICAgIHVpbnQ4X3QgYkNyY0luY1N3OjE7ICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBEbyBub3QgaW5jbHVkZSBzeW5jIHdvcmQgaW4gQ1JDIGNhbGN1bGF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEluY2x1ZGUgc3luYyB3b3JkIGluIENSQyBjYWxjdWxhdGlvbgorICAgICAgdWludDhfdCBiQ3JjSW5jSGRyOjE7ICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IERvIG5vdCBpbmNsdWRlIGhlYWRlciBpbiBDUkMgY2FsY3VsYXRpb24gPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEluY2x1ZGUgaGVhZGVyIGluIENSQyBjYWxjdWxhdGlvbgorICAgICAgdWludDhfdCBlbmRUeXBlOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFBhY2tldCBpcyByZWNlaXZlZCB0byB0aGUgZW5kIGlmIGVuZCB0cmlnZ2VyIGhhcHBlbnMgYWZ0ZXIgc3luYyBpcyBvYnRhaW5lZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBQYWNrZXQgcmVjZXB0aW9uIGlzIHN0b3BwZWQgaWYgZW5kIHRyaWdnZXIgaGFwcGVucworICAgICAgdWludDhfdCBmaWx0ZXJPcDoxOyAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFN0b3AgcmVjZWl2ZXIgYW5kIHJlc3RhcnQgc3luYyBzZWFyY2ggb24gYWRkcmVzcyBtaXNtYXRjaDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBSZWNlaXZlIHBhY2tldCBhbmQgbWFyayBpdCBhcyBpZ25vcmVkIG9uIGFkZHJlc3MgbWlzbWF0Y2gKKyAgIH0gcGt0Q29uZjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGJBdXRvRmx1c2hJZ25vcmVkOjE7ICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSBkaXNjYXJkIGlnbm9yZWQgcGFja2V0cyBmcm9tIFJYIHF1ZXVlCisgICAgICB1aW50OF90IGJBdXRvRmx1c2hDcmNFcnI6MTsgICAgICAgLy8hPCAgICAgICAgSWYgMSwgYXV0b21hdGljYWxseSBkaXNjYXJkIHBhY2tldHMgd2l0aCBDUkMgZXJyb3IgZnJvbSBSWCBxdWV1ZQorICAgICAgdWludDhfdCA6MTsKKyAgICAgIHVpbnQ4X3QgYkluY2x1ZGVIZHI6MTsgICAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBpbmNsdWRlIHRoZSByZWNlaXZlZCBoZWFkZXIgb3IgbGVuZ3RoIGJ5dGUgaW4gdGhlIHN0b3JlZCBwYWNrZXQ7IG90aGVyd2lzZSBkaXNjYXJkIGl0CisgICAgICB1aW50OF90IGJJbmNsdWRlQ3JjOjE7ICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgMSwgaW5jbHVkZSB0aGUgcmVjZWl2ZWQgQ1JDIGZpZWxkIGluIHRoZSBzdG9yZWQgcGFja2V0OyBvdGhlcndpc2UgZGlzY2FyZCBpdAorICAgICAgdWludDhfdCBiQXBwZW5kUnNzaToxOyAgICAgICAgICAgIC8vITwgICAgICAgIElmIDEsIGFwcGVuZCBhbiBSU1NJIGJ5dGUgdG8gdGhlIHBhY2tldCBpbiB0aGUgUlggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFRpbWVzdGFtcDoxOyAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIHBhY2tldCBpbiB0aGUgUlggcXVldWUKKyAgICAgIHVpbnQ4X3QgYkFwcGVuZFN0YXR1czoxOyAgICAgICAgICAvLyE8ICAgICAgICBJZiAxLCBhcHBlbmQgYSBzdGF0dXMgYnl0ZSB0byB0aGUgcGFja2V0IGluIHRoZSBSWCBxdWV1ZQorICAgfSByeENvbmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJYIGNvbmZpZ3VyYXRpb24KKyAgIHVpbnQzMl90IHN5bmNXb3JkMDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTeW5jIHdvcmQgdG8gbGlzdGVuIGZvcgorICAgdWludDMyX3Qgc3luY1dvcmQxOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFsdGVybmF0aXZlIHN5bmMgd29yZCBpZiBub24temVybworICAgdWludDE2X3QgbWF4UGt0TGVuOyAgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIFBhY2tldCBsZW5ndGggZm9yIGZpeGVkIGxlbmd0aCwgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIGZvciB2YXJpYWJsZSBsZW5ndGg8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMDogVW5saW1pdGVkIG9yIHVua25vd24gbGVuZ3RoCisgICBzdHJ1Y3QgeworICAgICAgdWludDE2X3QgbnVtSGRyQml0czo2OyAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBiaXRzIGluIGhlYWRlciAoMCZuZGFzaDszMikKKyAgICAgIHVpbnQxNl90IGxlblBvczo1OyAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb3NpdGlvbiBvZiBsZW5ndGggZmllbGQgaW4gaGVhZGVyICgwJm5kYXNoOzMxKQorICAgICAgdWludDE2X3QgbnVtTGVuQml0czo1OyAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBiaXRzIGluIGxlbmd0aCBmaWVsZCAoMCZuZGFzaDsxNikKKyAgIH0gaGRyQ29uZjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBhZGRyVHlwZToxOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQWRkcmVzcyBhZnRlciBoZWFkZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQWRkcmVzcyBpbiBoZWFkZXIKKyAgICAgIHVpbnQxNl90IGFkZHJTaXplOjU7ICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5hZGRyVHlwZTwvY29kZT4gPSAwOiBBZGRyZXNzIHNpemUgaW4gYnl0ZXM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgPGNvZGU+YWRkclR5cGU8L2NvZGU+ID0gMTogQWRkcmVzcyBzaXplIGluIGJpdHMKKyAgICAgIHVpbnQxNl90IGFkZHJQb3M6NTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiBJZiA8Y29kZT5hZGRyVHlwZTwvY29kZT4gPSAxOiBCaXQgcG9zaXRpb24gb2YgYWRkcmVzcyBpbiBoZWFkZXI8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWYgPGNvZGU+YWRkclR5cGU8L2NvZGU+ID0gMDogTm9uLXplcm8gdG8gZXh0ZW5kIGFkZHJlc3Mgd2l0aCBzeW5jIHdvcmQgaWRlbnRpZmllcgorICAgICAgdWludDE2X3QgbnVtQWRkcjo1OyAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBhZGRyZXNzZXMgaW4gYWRkcmVzcyBsaXN0CisgICB9IGFkZHJDb25mOworICAgaW50OF90IGxlbk9mZnNldDsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFNpZ25lZCB2YWx1ZSB0byBhZGQgdG8gbGVuZ3RoIGZpZWxkCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCB0cmlnZ2VyVHlwZTo0OyAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0eXBlIG9mIHRyaWdnZXIKKyAgICAgIHVpbnQ4X3QgYkVuYUNtZDoxOyAgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyBhbHRlcm5hdGl2ZSB0cmlnZ2VyIGNvbW1hbmQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ01EX1RSSUdHRVIgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdHJpZ2dlcgorICAgICAgdWludDhfdCB0cmlnZ2VyTm86MjsgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSB0cmlnZ2VyIG51bWJlciBvZiB0aGUgQ01EX1RSSUdHRVIgY29tbWFuZCB0aGF0IHRyaWdnZXJzIHRoaXMgYWN0aW9uCisgICAgICB1aW50OF90IHBhc3RUcmlnOjE7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIG5ldmVyIHRyaWdnZXJlZCwgb3IgZm9yIHN0YXJ0IG9mIGNvbW1hbmRzLCBnaXZlIGFuIGVycm9yPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEEgdHJpZ2dlciBpbiB0aGUgcGFzdCBpcyB0cmlnZ2VyZWQgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgfSBlbmRUcmlnZ2VyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRyaWdnZXIgY2xhc3NpZmllciBmb3IgZW5kaW5nIHRoZSBvcGVyYXRpb24KKyAgIHJhdG1yX3QgZW5kVGltZTsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHVzZWQgdG9nZXRoZXIgd2l0aCA8Y29kZT5lbmRUcmlnZ2VyPC9jb2RlPiBmb3IgZW5kaW5nIHRoZSBvcGVyYXRpb24KKyAgIHVpbnQ4X3QqIHBBZGRyOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIGFkZHJlc3MgbGlzdAorICAgZGF0YVF1ZXVlX3QqIHBRdWV1ZTsgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSBxdWV1ZQorICAgdWludDhfdCogcE91dHB1dDsgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gb3V0cHV0IHN0cnVjdHVyZQorfTsKKworLy8hIEB9CisKKy8vISBcYWRkdG9ncm91cCBDTURfUFJPUF9SQURJT19TRVRVUAorLy8hIEB7CisjZGVmaW5lIENNRF9QUk9QX1JBRElPX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzODA2CisvLyEgUHJvcHJpZXRhcnkgTW9kZSBSYWRpbyBTZXR1cCBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9SQURJT19TRVRVUF9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzODA2CisgICB1aW50MTZfdCBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgQW4gaW50ZWdlciB0ZWxsaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuIFRoaXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICB1cGRhdGVkIGJ5IHRoZSByYWRpbyBDUFUgZHVyaW5nIG9wZXJhdGlvbiBhbmQgbWF5IGJlIHJlYWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgc3lzdGVtIENQVSBhdCBhbnkgdGltZS4KKyAgIHJmY19yYWRpb09wX3QgKnBOZXh0T3A7ICAgICAgICAgICAgICAvLyE8ICAgICAgICBQb2ludGVyIHRvIHRoZSBuZXh0IG9wZXJhdGlvbiB0byBydW4gYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgZG9uZQorICAgcmF0bXJfdCBzdGFydFRpbWU7ICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIEFic29sdXRlIG9yIHJlbGF0aXZlIHN0YXJ0IHRpbWUgKGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgPGNvZGU+c3RhcnRUcmlnZ2VyPC9jb2RlPikKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IHRyaWdnZXJUeXBlOjQ7ICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHR5cGUgb2YgdHJpZ2dlcgorICAgICAgdWludDhfdCBiRW5hQ21kOjE7ICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IE5vIGFsdGVybmF0aXZlIHRyaWdnZXIgY29tbWFuZDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAxOiBDTURfVFJJR0dFUiBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0cmlnZ2VyCisgICAgICB1aW50OF90IHRyaWdnZXJObzoyOyAgICAgICAgICAgICAgLy8hPCAgICAgICAgVGhlIHRyaWdnZXIgbnVtYmVyIG9mIHRoZSBDTURfVFJJR0dFUiBjb21tYW5kIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24KKyAgICAgIHVpbnQ4X3QgcGFzdFRyaWc6MTsgICAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBBIHRyaWdnZXIgaW4gdGhlIHBhc3QgaXMgbmV2ZXIgdHJpZ2dlcmVkLCBvciBmb3Igc3RhcnQgb2YgY29tbWFuZHMsIGdpdmUgYW4gZXJyb3I8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQSB0cmlnZ2VyIGluIHRoZSBwYXN0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHBvc3NpYmxlCisgICB9IHN0YXJ0VHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgSWRlbnRpZmljYXRpb24gb2YgdGhlIHRyaWdnZXIgdGhhdCBzdGFydHMgdGhlIG9wZXJhdGlvbgorICAgc3RydWN0IHsKKyAgICAgIHVpbnQ4X3QgcnVsZTo0OyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25kaXRpb24gZm9yIHJ1bm5pbmcgbmV4dCBjb21tYW5kOiBSdWxlIGZvciBob3cgdG8gcHJvY2VlZAorICAgICAgdWludDhfdCBuU2tpcDo0OyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBza2lwcyArIDEgaWYgdGhlIHJ1bGUgaW52b2x2ZXMgc2tpcHBpbmcuIDA6IHNhbWUsIDE6IG5leHQsIDI6IHNraXAgbmV4dCwgLi4uCisgICB9IGNvbmRpdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBtb2RUeXBlOjM7ICAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogRlNLPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IEdGU0s8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IGRldmlhdGlvbjoxMzsgICAgICAgICAgICAvLyE8ICAgICAgICBEZXZpYXRpb24gKDI1MCBIeiBzdGVwcykKKyAgIH0gbW9kdWxhdGlvbjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MzJfdCBwcmVTY2FsZTo0OyAgICAgICAgICAgICAgLy8hPCAgICAgICAgUHJlc2NhbGVyIHZhbHVlCisgICAgICB1aW50MzJfdCA6NDsKKyAgICAgIHVpbnQzMl90IHJhdGVXb3JkOjIxOyAgICAgICAgICAgICAvLyE8ICAgICAgICBSYXRlIHdvcmQKKyAgIH0gc3ltYm9sUmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBTeW1ib2wgcmF0ZSBzZXR0aW5nCisgICB1aW50OF90IHJ4Qnc7ICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUmVjZWl2ZXIgYmFuZHdpZHRoCisgICBzdHJ1Y3QgeworICAgICAgdWludDhfdCBuUHJlYW1CeXRlczo2OyAgICAgICAgICAgIC8vITwgXGJyaWVmIDAmbmRhc2g7MzA6IE51bWJlciBvZiBwcmVhbWJsZSBieXRlczxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzMTogNCBwcmVhbWJsZSBiaXRzCisgICAgICB1aW50OF90IHByZWFtTW9kZToyOyAgICAgICAgICAgICAgLy8hPCBcYnJpZWYgMDogU2VuZCAwIGFzIHRoZSBmaXJzdCBwcmVhbWJsZSBiaXQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogU2VuZCAxIGFzIHRoZSBmaXJzdCBwcmVhbWJsZSBiaXQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMjogU2VuZCBzYW1lIGZpcnN0IGJpdCBpbiBwcmVhbWJsZSBhbmQgc3luYyB3b3JkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDM6IFNlbmQgZGlmZmVyZW50IGZpcnN0IGJpdCBpbiBwcmVhbWJsZSBhbmQgc3luYyB3b3JkCisgICB9IHByZWFtQ29uZjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBuU3dCaXRzOjY7ICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHN5bmMgd29yZCBiaXRzICh1cCB0byAzMikKKyAgICAgIHVpbnQxNl90IGJCaXRSZXZlcnNhbDoxOyAgICAgICAgICAvLyE8IFxicmllZiAwOiBVc2UgcG9zaXRpdmUgZGV2aWF0aW9uIGZvciAxPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFVzZSBwb3NpdGl2ZSBkZXZpYXRpb24gZm9yIDAKKyAgICAgIHVpbnQxNl90IGJNc2JGaXJzdDoxOyAgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBMZWFzdCBzaWduaWZpY2FudCBiaXQgdHJhbnNtaXR0ZWQgZmlyc3Q8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogTW9zdCBzaWduaWZpY2FudCBiaXQgdHJhbnNtaXR0ZWQgZmlyc3QKKyAgICAgIHVpbnQxNl90IGZlY01vZGU6NDsgICAgICAgICAgICAgICAvLyE8IFxicmllZiBTZWxlY3QgY29kaW5nPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDA6IFVuY29kZWQgYmluYXJ5IG1vZHVsYXRpb248YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgT3RoZXJzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IGJPdXRlckNvZGU6MTsgICAgICAgICAgICAvLyE8ICAgICAgICA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IHdoaXRlbk1vZGU6MjsgICAgICAgICAgICAvLyE8IFxicmllZiAwOiBObyB3aGl0ZW5pbmc8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogQ0MxMTAxL0NDMjUwMCBjb21wYXRpYmxlIHdoaXRlbmluZzxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBQTjkgd2hpdGVuaW5nIHdpdGhvdXQgYnl0ZSByZXZlcnNhbDxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAzOiA8aT5SZXNlcnZlZDwvaT4KKyAgICAgIHVpbnQxNl90IGJBZ2NEaXNhYmxlOjE7ICAgICAgICAgICAvLyE8ICAgICAgICA8aT5SZXNlcnZlZDwvaT4KKyAgIH0gZm9ybWF0Q29uZjsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50MTZfdCBmcm9udEVuZE1vZGU6MzsgICAgICAgICAgLy8hPCBcYnJpZWYgMHgwMDogRGlmZmVyZW50aWFsIG1vZGU8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMHgwMTogU2luZ2xlLWVuZGVkIG1vZGUgUkZQPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDB4MDI6IFNpbmdsZS1lbmRlZCBtb2RlIFJGTjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDA1IFNpbmdsZS1lbmRlZCBtb2RlIFJGUCB3aXRoIGV4dGVybmFsIGZyb250ZW5kIGNvbnRyb2wgb24gUkYgcGlucyAoUkZOIGFuZCBSWFRYKTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDA2IFNpbmdsZS1lbmRlZCBtb2RlIFJGTiB3aXRoIGV4dGVybmFsIGZyb250ZW5kIGNvbnRyb2wgb24gUkYgcGlucyAoUkZQIGFuZCBSWFRYKTxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBPdGhlcnM6IDxpPlJlc2VydmVkPC9pPgorICAgICAgdWludDE2X3QgYmlhc01vZGU6MTsgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IEludGVybmFsIGJpYXM8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMTogRXh0ZXJuYWwgYmlhcworICAgICAgdWludDE2X3QgYW5hbG9nQ2ZnTW9kZTo2OyAgICAgICAgIC8vITwgXGJyaWVmIDB4MDA6IFdyaXRlIGFuYWxvZyBjb25maWd1cmF0aW9uLjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBSZXF1aXJlZCBmaXJzdCB0aW1lIGFmdGVyIGJvb3QgYW5kIHdoZW4gY2hhbmdpbmcgZnJlcXVlbmN5IGJhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBvciBmcm9udC1lbmQgY29uZmlndXJhdGlvbjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAweDJEOiBLZWVwIGFuYWxvZyBjb25maWd1cmF0aW9uLjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBNYXkgYmUgdXNlZCBhZnRlciBzdGFuZGJ5IG9yIHdoZW4gY2hhbmdpbmcgbW9kZSB3aXRoIHRoZSBzYW1lIGZyZXF1ZW5jeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIGJhbmQgYW5kIGZyb250LWVuZCBjb25maWd1cmF0aW9uPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE90aGVyczogPGk+UmVzZXJ2ZWQ8L2k+CisgICAgICB1aW50MTZfdCBiTm9Gc1Bvd2VyVXA6MTsgICAgICAgICAgLy8hPCBcYnJpZWYgMDogUG93ZXIgdXAgZnJlcXVlbmN5IHN5bnRoPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IERvIG5vdCBwb3dlciB1cCBmcmVxdWVuY3kgc3ludGgKKyAgIH0gY29uZmlnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBDb25maWd1cmF0aW9uIG9wdGlvbnMKKyAgIHVpbnQxNl90IHR4UG93ZXI7ICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUcmFuc21pdCBwb3dlcgorICAgdWludDMyX3QqIHBSZWdPdmVycmlkZTsgICAgICAgICAgICAgIC8vITwgICAgICAgIFBvaW50ZXIgdG8gYSBsaXN0IG9mIGhhcmR3YXJlIGFuZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyB0byBvdmVycmlkZS4gSWYgTlVMTCwgbm8gb3ZlcnJpZGUgaXMgdXNlZC4KK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgQ01EX1BST1BfU0VUX0xFTgorLy8hIEB7CisjZGVmaW5lIENNRF9QUk9QX1NFVF9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNDAxCisvLyEgU2V0IFBhY2tldCBMZW5ndGggQ29tbWFuZAorc3RydWN0IF9fUkZDX1NUUlVDVCByZmNfQ01EX1BST1BfU0VUX0xFTl9zIHsKKyAgIHVpbnQxNl90IGNvbW1hbmRObzsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaGUgY29tbWFuZCBJRCBudW1iZXIgMHgzNDAxCisgICB1aW50MTZfdCByeExlbjsgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgUGF5bG9hZCBsZW5ndGggdG8gdXNlCit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIENNRF9QUk9QX1JFU1RBUlRfUlgKKy8vISBAeworI2RlZmluZSBDTURfUFJPUF9SRVNUQVJUX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzQwMgorLy8hIFJlc3RhcnQgUGFja2V0ICBDb21tYW5kCitzdHJ1Y3QgX19SRkNfU1RSVUNUIHJmY19DTURfUFJPUF9SRVNUQVJUX1JYX3MgeworICAgdWludDE2X3QgY29tbWFuZE5vOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFRoZSBjb21tYW5kIElEIG51bWJlciAweDM0MDIKK307CisKKy8vISBAfQorCisvLyEgXGFkZHRvZ3JvdXAgcHJvcFJ4T3V0cHV0CisvLyEgQHsKKy8vISBPdXRwdXQgc3RydWN0dXJlIGZvciBSWCBvcGVyYXRpb25zCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3Byb3BSeE91dHB1dF9zIHsKKyAgIHVpbnQxNl90IG5SeE9rOyAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIHBheWxvYWQsIENSQyBPSyBhbmQgbm90IGlnbm9yZWQKKyAgIHVpbnQxNl90IG5SeE5vazsgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCB3aXRoIENSQyBlcnJvcgorICAgdWludDhfdCBuUnhJZ25vcmVkOyAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIHdpdGggQ1JDIE9LIGFuZCBpZ25vcmVkIGR1ZSB0byBhZGRyZXNzIG1pc21hdGNoCisgICB1aW50OF90IG5SeFN0b3BwZWQ7ICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgbm90IHJlY2VpdmVkIGR1ZSB0byBpbGxlZ2FsIGxlbmd0aCBvciBhZGRyZXNzIG1pc21hdGNoIHdpdGggcGt0Q29uZi5maWx0ZXJPcCA9IDEKKyAgIHVpbnQ4X3QgblJ4QnVmRnVsbDsgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBhbmQgZGlzY2FyZGVkIGR1ZSB0byBsYWNrIG9mIGJ1ZmZlciBzcGFjZQorICAgaW50OF90IGxhc3RSc3NpOyAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIFJTU0kgb2YgbGFzdCByZWNlaXZlZCBwYWNrZXQKKyAgIHJhdG1yX3QgdGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICBUaW1lIHN0YW1wIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0Cit9OworCisvLyEgQH0KKworLy8hIFxhZGR0b2dyb3VwIHByb3BSeFN0YXR1cworLy8hIEB7CisvLyEgUmVjZWl2ZSBzdGF0dXMgYnl0ZSB0aGF0IG1heSBiZSBhcHBlbmRlZCB0byBtZXNzYWdlIGluIHJlY2VpdmUgYnVmZmVyCisKK3N0cnVjdCBfX1JGQ19TVFJVQ1QgcmZjX3Byb3BSeFN0YXR1c19zIHsKKyAgIHN0cnVjdCB7CisgICAgICB1aW50OF90IGFkZHJlc3NJbmQ6NTsgICAgICAgICAgICAgLy8hPCAgICAgICAgSW5kZXggb2YgYWRkcmVzcyBmb3VuZCAoMCBpZiBub3QgYXBwbGljYWJsZSkKKyAgICAgIHVpbnQ4X3Qgc3luY1dvcmRJZDoxOyAgICAgICAgICAgICAvLyE8ICAgICAgICAwIGZvciBwcmltYXJ5IHN5bmMgd29yZCwgMSBmb3IgYWx0ZXJuYXRlIHN5bmMgd29yZAorICAgICAgdWludDhfdCByZXN1bHQ6MjsgICAgICAgICAgICAgICAgIC8vITwgXGJyaWVmIDA6IFBhY2tldCByZWNlaXZlZCBjb3JyZWN0bHksIG5vdCBpZ25vcmVkPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vITwgICAgICAgIDE6IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBlcnJvcjxicj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyE8ICAgICAgICAyOiBQYWNrZXQgcmVjZWl2ZWQgY29ycmVjdGx5LCBidXQgY2FuIGJlIGlnbm9yZWQ8YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hPCAgICAgICAgMzogUGFja2V0IHJlY2VwdGlvbiB3YXMgYWJvcnRlZAorICAgfSBzdGF0dXM7Cit9OworCisvLyEgQH0KKworLy8hIEB9CisvLyEgQH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfcHJvcF9tYWlsYm94LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZl9wcm9wX21haWxib3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzkwNGEwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZfcHJvcF9tYWlsYm94LmgKQEAgLTAsMCArMSw3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX3Byb3BfbWFpbGJveC5oCisqICBSZXZpc2VkOiAgICAgICAgJCAkCisqICBSZXZpc2lvbjogICAgICAgJCAkCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5pdGlvbnMgZm9yIHByb2JyaWV0YXJ5IG1vZGUgcmFkaW8gaW50ZXJmYWNlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9QUk9QX01BSUxCT1hfSAorI2RlZmluZSBfUFJPUF9NQUlMQk9YX0gKKworLy8vIFxuYW1lIFJhZGlvIG9wZXJhdGlvbiBzdGF0dXMKKy8vL0B7CisvLy8gXG5hbWUgT3BlcmF0aW9uIGZpbmlzaGVkIG5vcm1hbGx5CisvLy9AeworI2RlZmluZSBQUk9QX0RPTkVfT0sgICAgICAgICAgICAweDM0MDAgIC8vLzwgT3BlcmF0aW9uIGVuZGVkIG5vcm1hbGx5CisjZGVmaW5lIFBST1BfRE9ORV9SWFRJTUVPVVQgICAgIDB4MzQwMSAgLy8vPCBPcGVyYXRpb24gc3RvcHBlZCBhZnRlciBlbmQgdHJpZ2dlciB3aGlsZSB3YWl0aW5nIGZvciBzeW5jCisjZGVmaW5lIFBST1BfRE9ORV9CUkVBSyAgICAgICAgIDB4MzQwMiAgLy8vPCBSeCBzdG9wcGVkIGR1ZSB0byB0aW1lb3V0IGluIHRoZSBtaWRkbGUgb2YgYSBwYWNrZXQKKyNkZWZpbmUgUFJPUF9ET05FX0VOREVEICAgICAgICAgMHgzNDAzICAvLy88IE9wZXJhdGlvbiBzdG9wcGVkIGFmdGVyIGVuZCB0cmlnZ2VyIGR1cmluZyByZWNlcHRpb24KKyNkZWZpbmUgUFJPUF9ET05FX1NUT1BQRUQgICAgICAgMHgzNDA0ICAvLy88IE9wZXJhdGlvbiBzdG9wcGVkIGFmdGVyIHN0b3AgY29tbWFuZAorI2RlZmluZSBQUk9QX0RPTkVfQUJPUlQgICAgICAgICAweDM0MDUgIC8vLzwgT3BlcmF0aW9uIGFib3J0ZWQgYnkgYWJvcnQgY29tbWFuZAorI2RlZmluZSBQUk9QX0RPTkVfUlhFUlIgICAgICAgICAweDM0MDYgIC8vLzwgT3BlcmF0aW9uIGVuZGVkIGFmdGVyIHJlY2VpdmluZyBwYWNrZXQgd2l0aCBDUkMgZXJyb3IKKyNkZWZpbmUgUFJPUF9ET05FX0lETEUgICAgICAgICAgMHgzNDA3ICAvLy88IENhcnJpZXIgc2Vuc2Ugb3BlcmF0aW9uIGVuZGVkIGJlY2F1c2Ugb2YgaWRsZSBjaGFubmVsCisjZGVmaW5lIFBST1BfRE9ORV9CVVNZICAgICAgICAgIDB4MzQwOCAgLy8vPCBDYXJyaWVyIHNlbnNlIG9wZXJhdGlvbiBlbmRlZCBiZWNhdXNlIG9mIGJ1c3kgY2hhbm5lbAorI2RlZmluZSBQUk9QX0RPTkVfSURMRVRJTUVPVVQgICAweDM0MDkgIC8vLzwgQ2FycmllciBzZW5zZSBvcGVyYXRpb24gZW5kZWQgYmVjYXVzZSBvZiB0aW1lb3V0IHdpdGggY3NDb25mLnRpbWVvdXRSZXMgPSAxCisjZGVmaW5lIFBST1BfRE9ORV9CVVNZVElNRU9VVCAgIDB4MzQwQSAgLy8vPCBDYXJyaWVyIHNlbnNlIG9wZXJhdGlvbiBlbmRlZCBiZWNhdXNlIG9mIHRpbWVvdXQgd2l0aCBjc0NvbmYudGltZW91dFJlcyA9IDAKKworLy8vQH0KKy8vLyBcbmFtZSBPcGVyYXRpb24gZmluaXNoZWQgd2l0aCBlcnJvcgorLy8vQHsKKyNkZWZpbmUgUFJPUF9FUlJPUl9QQVIgICAgICAgICAgMHgzODAwICAvLy88IElsbGVnYWwgcGFyYW1ldGVyCisjZGVmaW5lIFBST1BfRVJST1JfUlhCVUYgICAgICAgIDB4MzgwMSAgLy8vPCBObyBhdmFpbGFibGUgUnggYnVmZmVyIGF0IHRoZSBzdGFydCBvZiBhIHBhY2tldAorI2RlZmluZSBQUk9QX0VSUk9SX1JYRlVMTCAgICAgICAweDM4MDIgIC8vLzwgT3V0IG9mIFJ4IGJ1ZmZlciBkdXJpbmcgcmVjZXB0aW9uIGluIGEgcGFydGlhbCByZWFkIGJ1ZmZlcgorI2RlZmluZSBQUk9QX0VSUk9SX05PX1NFVFVQICAgICAweDM4MDMgIC8vLzwgUmFkaW8gd2FzIG5vdCBzZXQgdXAgaW4gcHJvcHJpZXRhcnkgbW9kZQorI2RlZmluZSBQUk9QX0VSUk9SX05PX0ZTICAgICAgICAweDM4MDQgIC8vLzwgU3ludGggd2FzIG5vdCBwcm9ncmFtbWVkIHdoZW4gcnVubmluZyBSeCBvciBUeAorI2RlZmluZSBQUk9QX0VSUk9SX1JYT1ZGICAgICAgICAweDM4MDUgIC8vLzwgUnggb3ZlcmZsb3cgb2JzZXJ2ZWQgZHVyaW5nIG9wZXJhdGlvbgorI2RlZmluZSBQUk9QX0VSUk9SX1RYVU5GICAgICAgICAweDM4MDYgIC8vLzwgVHggdW5kZXJmbG93IG9ic2VydmVkIGR1cmluZyBvcGVyYXRpb24KKy8vL0B9CisvLy9AfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmYy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcmZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlMzkxNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmYy5jCkBAIC0wLDAgKzEsMjU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgcmZjLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTI3IDA4OjI3OjQ2ICswMjAwIChGcmksIDI3IE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NTE3CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgUkYgQ29yZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvcmZjLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBSRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICNkZWZpbmUgUkZDQ3BlSW50R2V0QW5kQ2xlYXIgICAgICAgICAgICBOT1JPTV9SRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICN1bmRlZiAgUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAjZGVmaW5lIFJGQ0Rvb3JiZWxsU2VuZFRvICAgICAgICAgICAgICAgTk9ST01fUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAjdW5kZWYgIFJGQ1N5bnRoUG93ZXJEb3duCisgICAgI2RlZmluZSBSRkNTeW50aFBvd2VyRG93biAgICAgICAgICAgICAgIE5PUk9NX1JGQ1N5bnRoUG93ZXJEb3duCisgICAgI3VuZGVmICBSRkNSZlRyaW1SZWFkCisgICAgI2RlZmluZSBSRkNSZlRyaW1SZWFkICAgICAgICAgICAgICAgICAgIE5PUk9NX1JGQ1JmVHJpbVJlYWQKKyAgICAjdW5kZWYgIFJGQ1JmVHJpbVNldAorICAgICNkZWZpbmUgUkZDUmZUcmltU2V0ICAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSZlRyaW1TZXQKKyAgICAjdW5kZWYgIFJGQ1JUcmltCisgICAgI2RlZmluZSBSRkNSVHJpbSAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1JGQ1JUcmltCisgICAgI3VuZGVmICBSRkNDUEVQYXRjaFJlc2V0CisgICAgI2RlZmluZSBSRkNDUEVQYXRjaFJlc2V0ICAgICAgICAgICAgICAgIE5PUk9NX1JGQ0NQRVBhdGNoUmVzZXQKKyAgICAjdW5kZWYgIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZQorICAgICNkZWZpbmUgUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlICAgICAgICBOT1JPTV9SRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUKKyNlbmRpZgorCisjZGVmaW5lIFJGQ19SRVNFUlZFRDAgICAgICAgICAgICAgICAweDQwMDQ0MTA4CisjZGVmaW5lIFJGQ19SRVNFUlZFRDEgICAgICAgICAgICAgICAweDQwMDQ0MTE0CisjZGVmaW5lIFJGQ19SRVNFUlZFRDIgICAgICAgICAgICAgICAweDQwMDQ0MTBDCisjZGVmaW5lIFJGQ19SRVNFUlZFRDMgICAgICAgICAgICAgICAweDQwMDQ0MTAwCisKKy8vIFBvc2l0aW9uIG9mIGRpdmlkZXIgdmFsdWUKKyNkZWZpbmUgQ09ORklHX01JU0NfQURDX0RJVklERVIgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ09ORklHX01JU0NfQURDX0RJVklERVJfQk0gIDB4RjgwMDAwMDBVCisKKyNkZWZpbmUgX0NQRVJBTV9TVEFSVCAweDIxMDAwMDAwCisjZGVmaW5lIF9QQVJTRVJfUEFUQ0hfVEFCX09GRlNFVCAweDAzMzQKKyNkZWZpbmUgX1BBVENIX1RBQl9PRkZTRVQgMHgwMzNDCisjZGVmaW5lIF9JUlFQQVRDSF9PRkZTRVQgMHgwM0FDCisjZGVmaW5lIF9QQVRDSF9WRUNfT0ZGU0VUIDB4MDQwNAorCitzdGF0aWMgY29uc3QgdWludDE2X3QgcmZjX2RlZmF1bHRJcnFBZGRyW10gPQoreworICAgMHgzOThiLAorICAgMHgzODA1LAorICAgMHgzODI1LAorICAgMHgzODM5LAorICAgMHgwYWNmLAorICAgMHgzODU3LAorICAgMHgzOGQ3LAorICAgMHgwOWRkLAorICAgMHg1ODE5LAorICAgMHgwYWIzLAorICAgMHgzOGY3LAorfTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdldCBhbmQgY2xlYXIgQ1BFIGludGVycnVwdCBmbGFncworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitSRkNDcGVJbnRHZXRBbmRDbGVhcih2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJJZmcgPSBIV1JFRyhSRkNfREJFTExfQkFTRStSRkNfREJFTExfT19SRkNQRUlGRyk7CisKKyAgICBkbyB7CisgICAgICAgIEhXUkVHKFJGQ19EQkVMTF9CQVNFK1JGQ19EQkVMTF9PX1JGQ1BFSUZHKSA9IH51aTMySWZnOworICAgIH0gd2hpbGUgKEhXUkVHKFJGQ19EQkVMTF9CQVNFK1JGQ19EQkVMTF9PX1JGQ1BFSUZHKSAmIHVpMzJJZmcpOworCisgICAgcmV0dXJuICh1aTMySWZnKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2VuZCBjb21tYW5kIHRvIGRvb3JiZWxsIGFuZCB3YWl0IGZvciBhY2sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorUkZDRG9vcmJlbGxTZW5kVG8odWludDMyX3QgcE9wKQoreworICAgIHdoaWxlKEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fQ01EUikgIT0gMCk7CisKKyAgICBSRkNBY2tJbnRDbGVhcigpOworCisgICAgSFdSRUcoUkZDX0RCRUxMX0JBU0UrUkZDX0RCRUxMX09fQ01EUikgPSBwT3A7CisKKyAgICB3aGlsZSghSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkFDS0lGRykpOworICAgIFJGQ0Fja0ludENsZWFyKCk7CisKKyAgICByZXR1cm4oSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19DTURTVEEpKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVHVybiBvZmYgc3ludGgsIE5PVEU6IFJhZGlvIHdpbGwgbm8gbG9uZ2VyIHJlc3BvbmQgdG8gY29tbWFuZHMhCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorUkZDU3ludGhQb3dlckRvd24oKQoreworICAvLyBEaXNhYmxlIENQRSBjbG9jaywgZW5hYmxlIEZTQ0EgY2xvY2suIE5PVEU6IFJhZGlvIHdpbGwgbm8gbG9uZ2VyIHJlc3BvbmQgdG8gY29tbWFuZHMhCisgIEhXUkVHKFJGQ19QV1JfTk9OQlVGX0JBU0UgKyBSRkNfUFdSX09fUFdNQ0xLRU4pID0gKEhXUkVHKFJGQ19QV1JfTk9OQlVGX0JBU0UgKyBSRkNfUFdSX09fUFdNQ0xLRU4pICYgflJGQ19QV1JfUFdNQ0xLRU5fQ1BFX00pIHwgUkZDX1BXUl9QV01DTEtFTl9GU0NBX007CisKKyAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoUkZDX1JFU0VSVkVEMCkpKSA9IDM7CisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDEpKSkgPSAweDEwMzA7CisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDIpKSkgPSAxOworICAoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShSRkNfUkVTRVJWRUQxKSkpID0gMHg1MDsKKyAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoUkZDX1JFU0VSVkVEMikpKSA9IDE7CisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDEpKSkgPSAweDY1MDsKKyAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoUkZDX1JFU0VSVkVEMikpKSA9IDE7CisgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKFJGQ19SRVNFUlZFRDMpKSkgPSAxOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWFkIFJGIFRyaW0gZnJvbSBmbGFzaCB1c2luZyB0aGUgQ00zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZCBSRkNSZlRyaW1SZWFkKHJmY19yYWRpb09wX3QgKnBPcFNldHVwLCByZlRyaW1fdCogcFJmVHJpbSkKK3sKKyAgICAodm9pZClwT3BTZXR1cDsKKyAgICAvLyBSZWFkIHRyaW0gZnJvbSBGQ0ZHMQorICAgIHBSZlRyaW0tPmNvbmZpZ0lmQWRjID0gSFdSRUcoRkNGRzFfQkFTRSArIEZDRkcxX09fQ09ORklHX0lGX0FEQyk7CisgICAgcFJmVHJpbS0+Y29uZmlnUmZGcm9udGVuZCA9IEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORCk7CisgICAgcFJmVHJpbS0+Y29uZmlnU3ludGggPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19DT05GSUdfU1lOVEgpOworICAgIC8vIE1ha2Ugc3VyZSBjb25maWdNaXNjQWRjIGlzIG5vdCAwIGJ5IHNldHRpbmcgYW4gdW51c2VkIGJpdCB0byAxCisgICAgcFJmVHJpbS0+Y29uZmlnTWlzY0FkYyA9IChIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19DT05GSUdfTUlTQ19BREMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+Q09ORklHX01JU0NfQURDX0RJVklERVJfQk0pIHwgKDJVIDw8IENPTkZJR19NSVNDX0FEQ19ESVZJREVSKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hlY2sgT3ZlcnJpZGUgUlRyaW0gdnMgRkNGRyBSVHJpbQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgUkZDUlRyaW0ocmZjX3JhZGlvT3BfdCAqcE9wU2V0dXApCit7CisgICAgKHZvaWQpcE9wU2V0dXA7CisgICAgLy8gRnVuY3Rpb24gaXMgbGVmdCBibGFuayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENDMTN4eC4KK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gV3JpdGUgcHJlbG9hZGVkIFJGIHRyaW0gdmFsdWVzIHRvIENNMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgUkZDUmZUcmltU2V0KHJmVHJpbV90KiBwUmZUcmltKQoreworICAgIG1lbWNweSgodm9pZCopJkhXUkVHKDB4MjEwMDAwMTgpLCAodm9pZCopcFJmVHJpbSwgc2l6ZW9mKHJmVHJpbV90KSk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlc2V0IHByZXZpb3VzbHkgcGF0Y2hlZCBDUEUgUkFNIHRvIGEgc3RhdGUgd2hlcmUgaXQgY2FuIGJlIHBhdGNoZWQgYWdhaW4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkIFJGQ0NQRVBhdGNoUmVzZXQodm9pZCkKK3sKKyAgICB1aW50OF90ICpwUGF0Y2hUYWIgPSAodWludDhfdCAqKSAoX0NQRVJBTV9TVEFSVCArIF9QQVJTRVJfUEFUQ0hfVEFCX09GRlNFVCk7CisgICAgdWludDMyX3QgKnBJcnFQYXRjaCA9ICh1aW50MzJfdCAqKSAoX0NQRVJBTV9TVEFSVCArIF9JUlFQQVRDSF9PRkZTRVQpOworCisgICAgbWVtc2V0KHBQYXRjaFRhYiwgMHhGRiwgX0lSUVBBVENIX09GRlNFVCAtIF9QQVJTRVJfUEFUQ0hfVEFCX09GRlNFVCk7CisKKwl1bnNpZ25lZCBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJmY19kZWZhdWx0SXJxQWRkcikvc2l6ZW9mKHJmY19kZWZhdWx0SXJxQWRkclswXSk7IGkrKykKKyAgICB7CisgICAgICAgIHBJcnFQYXRjaFtpICogMiArIDFdID0gcmZjX2RlZmF1bHRJcnFBZGRyW2ldOworICAgIH0KK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRnVuY3Rpb24gdG8gc2V0IFZDT0xETyByZWZlcmVuY2UgdG8gdm9sdGFnZSBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZCBSRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUoYm9vbCBiRW5hYmxlKQoreworICAgICh2b2lkKWJFbmFibGU7CisgICAgLy8gRnVuY3Rpb24gaXMgbGVmdCBibGFuayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENDMTN4eC4KK30KKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBSRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICNkZWZpbmUgUkZDQ3BlSW50R2V0QW5kQ2xlYXIgICAgICAgICAgICBOT1JPTV9SRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICN1bmRlZiAgUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAjZGVmaW5lIFJGQ0Rvb3JiZWxsU2VuZFRvICAgICAgICAgICAgICAgTk9ST01fUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAjdW5kZWYgIFJGQ1N5bnRoUG93ZXJEb3duCisgICAgI2RlZmluZSBSRkNTeW50aFBvd2VyRG93biAgICAgICAgICAgICAgIE5PUk9NX1JGQ1N5bnRoUG93ZXJEb3duCisgICAgI3VuZGVmICBSRkNSZlRyaW1SZWFkCisgICAgI2RlZmluZSBSRkNSZlRyaW1SZWFkICAgICAgICAgICAgICAgICAgIE5PUk9NX1JGQ1JmVHJpbVJlYWQKKyAgICAjdW5kZWYgIFJGQ1JmVHJpbVNldAorICAgICNkZWZpbmUgUkZDUmZUcmltU2V0ICAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSZlRyaW1TZXQKKyAgICAjdW5kZWYgIFJGQ1JUcmltCisgICAgI2RlZmluZSBSRkNSVHJpbSAgICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1JGQ1JUcmltCisgICAgI3VuZGVmICBSRkNDUEVQYXRjaFJlc2V0CisgICAgI2RlZmluZSBSRkNDUEVQYXRjaFJlc2V0ICAgICAgICAgICAgICAgIE5PUk9NX1JGQ0NQRVBhdGNoUmVzZXQKKyAgICAjdW5kZWYgIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZQorICAgICNkZWZpbmUgUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlICAgICAgICBOT1JPTV9SRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUKKyNlbmRpZgorCisvLyBTZWUgcmZjLmggZm9yIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZmMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yZmMuaApAQCAtMCwwICsxLDQ0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0wMiAxNDo0NDoyMyArMDIwMCAoTW9uLCAwMiBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjIzMQorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBSRiBDb3JlLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCByZmNfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19SRkNfSF9fCisjZGVmaW5lIF9fUkZDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19yZmNfcHdyLmg+CisjaW5jbHVkZSA8aW5jL2h3X3JmY19kYmVsbC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9yZl9jb21tb25fY21kLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3JmX3Byb3BfY21kLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV8zX3JlZnN5cy5oPgorI2luY2x1ZGUgPGluYy9od19hZGkuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgdWludDMyX3QgY29uZmlnSWZBZGM7CisgICB1aW50MzJfdCBjb25maWdSZkZyb250ZW5kOworICAgdWludDMyX3QgY29uZmlnU3ludGg7CisgICB1aW50MzJfdCBjb25maWdNaXNjQWRjOworfSByZlRyaW1fdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgUkZDQ3BlSW50R2V0QW5kQ2xlYXIgICAgICAgICAgICBOT1JPTV9SRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICNkZWZpbmUgUkZDRG9vcmJlbGxTZW5kVG8gICAgICAgICAgICAgICBOT1JPTV9SRkNEb29yYmVsbFNlbmRUbworICAgICNkZWZpbmUgUkZDU3ludGhQb3dlckRvd24gICAgICAgICAgICAgICBOT1JPTV9SRkNTeW50aFBvd2VyRG93bgorICAgICNkZWZpbmUgUkZDUmZUcmltUmVhZCAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSZlRyaW1SZWFkCisgICAgI2RlZmluZSBSRkNSZlRyaW1TZXQgICAgICAgICAgICAgICAgICAgIE5PUk9NX1JGQ1JmVHJpbVNldAorICAgICNkZWZpbmUgUkZDUlRyaW0gICAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9SRkNSVHJpbQorICAgICNkZWZpbmUgUkZDQ1BFUGF0Y2hSZXNldCAgICAgICAgICAgICAgICBOT1JPTV9SRkNDUEVQYXRjaFJlc2V0CisgICAgI2RlZmluZSBSRkNBZGkzVmNvTGRvVm9sdGFnZU1vZGUgICAgICAgIE5PUk9NX1JGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgdGhlIFJGIGNvcmUgY2xvY2tzLgorLy8hCisvLyEgQXMgc29vbiBhcyB0aGUgUkYgY29yZSBpcyBzdGFydGVkIGl0IHdpbGwgaGFuZGxlIGNsb2NrIGNvbnRyb2wKKy8vISBhdXRvbm9tb3VzbHkuIE5vIGNoZWNrIHNob3VsZCBiZSBwZXJmb3JtZWQgdG8gY2hlY2sgdGhlIGNsb2Nrcy4gSW5zdGVhZAorLy8hIHRoZSByYWRpbyBjYW4gYmUgcGluZydlZCB0aHJvdWdoIHRoZSBjb21tYW5kIGludGVyZmFjZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNDbG9ja0VuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRW5hYmxlIGFsbCBjbG9ja3MKKyAgICAvLworICAgIEhXUkVHKFJGQ19QV1JfTk9OQlVGX0JBU0UgKyBSRkNfUFdSX09fUFdNQ0xLRU4pID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19QV1JfUFdNQ0xLRU5fUkZDVFJDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19QV1JfUFdNQ0xLRU5fRlNDQSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX1BIQSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX1JBVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX1JGRVJBTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX1JGRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX01ETVJBTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX01ETSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX0NQRVJBTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX0NQRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfUFdSX1BXTUNMS0VOX1JGQzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSB0aGUgUkYgY29yZSBjbG9ja3MuCisvLyEKKy8vISBBcyBzb29uIGFzIHRoZSBSRiBjb3JlIGlzIHN0YXJ0ZWQgaXQgd2lsbCBoYW5kbGUgY2xvY2sgY29udHJvbAorLy8hIGF1dG9ub21vdXNseS4gTm8gY2hlY2sgc2hvdWxkIGJlIHBlcmZvcm1lZCB0byBjaGVjayB0aGUgY2xvY2tzLiBJbnN0ZWFkCisvLyEgdGhlIHJhZGlvIGNhbiBiZSBwaW5nJ2VkIHRocm91Z2ggdGhlIGNvbW1hbmQgaW50ZXJmYWNlLgorLy8hCisvLyEgV2hlbiBkaXNhYmxpbmcgY2xvY2tzIGl0IGlzIHRoZSBwcm9ncmFtbWVycyByZXNwb25zaWJpbGl0eSB0aGF0IHRoZQorLy8hIFJGIGNvcmUgY2xvY2tzIGNhbiBiZSBzYWZlbHkgZ2F0ZWQuIEkuZS4gdGhlIFJGIGNvcmUgc2hvdWxkIGJlIHNhZmVseQorLy8hICdwYXJrZWQnLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0Nsb2NrRGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSBhbGwgY2xvY2tzCisgICAgLy8KKyAgICBIV1JFRyhSRkNfUFdSX05PTkJVRl9CQVNFICsgUkZDX1BXUl9PX1BXTUNMS0VOKSA9IDB4MDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGUgQ1BFMCBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUkZDQ3BlMEludEVuYWJsZSh1aW50MzJfdCB1aTMyTWFzaykKK3sKKyAgLy8KKyAgLy8gTXVsdGlwbGV4IFJGIENvcmUgaW50ZXJydXB0cyB0byBDUEUwIElSUS4KKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlTTCkgJj0gfnVpMzJNYXNrOworCisgIGRvCisgIHsKKyAgICAvLworICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUZHKSA9IDB4MDsKKyAgfXdoaWxlKEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpICE9IDB4MCk7CisKKyAgLy8KKyAgLy8gIEVuYWJsZSB0aGUgbWFza2VkIGludGVycnVwdHMKKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlFTikgfD0gdWkzMk1hc2s7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBFbmFibGUgQ1BFMSBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorUkZDQ3BlMUludEVuYWJsZSh1aW50MzJfdCB1aTMyTWFzaykKK3sKKyAgLy8KKyAgLy8gTXVsdGlwbGV4IFJGIENvcmUgaW50ZXJydXB0cyB0byBDUEUxIElSUS4KKyAgLy8KKyAgSFdSRUcoIFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJU0wpIHw9IHVpMzJNYXNrOworCisgIGRvCisgIHsKKyAgICAvLworICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGQ1BFSUZHKSA9IDB4MDsKKyAgfXdoaWxlKEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZDUEVJRkcpICE9IDB4MCk7CisKKyAgLy8KKyAgLy8gIEVuYWJsZSB0aGUgbWFza2VkIGludGVycnVwdHMKKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlFTikgfD0gdWkzMk1hc2s7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFwIG9ubHkgSFcgaW50ZXJydXB0cywgYW5kCisvLyEgY2xlYXJzL3VubWFza3MgdGhlbS4gVGhlc2UgaW50ZXJydXB0cyBhcmUgdGhlbiBlbmFibGVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNId0ludEVuYWJsZSh1aW50MzJfdCB1aTMyTWFzaykKK3sKKyAgLy8KKyAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4KKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkhXSUZHKSA9IDB4MDsKKworICAvLworICAvLyAgRW5hYmxlIHRoZSBtYXNrZWQgaW50ZXJydXB0cworICAvLworICBIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGSFdJRU4pIHw9IHVpMzJNYXNrOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZSBDUEUgaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0NwZUludERpc2FibGUodWludDMyX3QgdWkzMk1hc2spCit7CisgIC8vCisgIC8vICBEaXNhYmxlIHRoZSBtYXNrZWQgaW50ZXJydXB0cworICAvLworICBIV1JFRyggUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkNQRUlFTiApICY9IH51aTMyTWFzazsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIERpc2FibGUgSFcgaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0h3SW50RGlzYWJsZSh1aW50MzJfdCB1aTMyTWFzaykKK3sKKyAgLy8KKyAgLy8gIERpc2FibGUgdGhlIG1hc2tlZCBpbnRlcnJ1cHRzCisgIC8vCisgIEhXUkVHKFJGQ19EQkVMTF9CQVNFICsgUkZDX0RCRUxMX09fUkZIV0lFTikgJj0gfnVpMzJNYXNrOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0IGFuZCBjbGVhciBDUEUgaW50ZXJydXB0IGZsYWdzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFJGQ0NwZUludEdldEFuZENsZWFyKHZvaWQpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xlYXIgaW50ZXJydXB0IGZsYWdzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0NwZUludENsZWFyKHVpbnQzMl90IHVpMzJNYXNrKQoreworICBkbworICB7CisgICAgLy8KKyAgICAvLyBDbGVhciBpbnRlcnJ1cHRzIHRoYXQgbWF5IG5vdyBiZSBwZW5kaW5nCisgICAgLy8KKyAgICBIV1JFRyhSRkNfREJFTExfQkFTRStSRkNfREJFTExfT19SRkNQRUlGRykgPSB+dWkzMk1hc2s7CisgIH13aGlsZSAoSFdSRUcoUkZDX0RCRUxMX0JBU0UrUkZDX0RCRUxMX09fUkZDUEVJRkcpICYgdWkzMk1hc2spOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xlYXIgaW50ZXJydXB0IGZsYWdzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1JGQ0h3SW50Q2xlYXIodWludDMyX3QgdWkzMk1hc2spCit7CisgIC8vCisgIC8vIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cy4KKyAgLy8KKyAgSFdSRUcoUkZDX0RCRUxMX0JBU0UgKyBSRkNfREJFTExfT19SRkhXSUZHKSA9IH51aTMyTWFzazsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsZWFyIGludGVycnVwdCBmbGFncworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitSRkNBY2tJbnRDbGVhcih2b2lkKQoreworICAvLworICAvLyBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLgorICAvLworICBIV1JFRyhSRkNfREJFTExfQkFTRSArIFJGQ19EQkVMTF9PX1JGQUNLSUZHKSA9IDB4MDsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNlbmQgY29tbWFuZCB0byBkb29yYmVsbCBhbmQgd2FpdCBmb3IgYWNrCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFJGQ0Rvb3JiZWxsU2VuZFRvKHVpbnQzMl90IHBPcCk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUdXJuIG9mZiBzeW50aCwgTk9URTogUmFkaW8gd2lsbCBubyBsb25nZXIgcmVzcG9uZCB0byBjb21tYW5kcyEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBSRkNTeW50aFBvd2VyRG93bih2b2lkKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlYWQgUkYgdHJpbSBmcm9tIGZsYXNoIHVzaW5nIENNMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFJGQ1JmVHJpbVJlYWQocmZjX3JhZGlvT3BfdCAqcE9wU2V0dXAsIHJmVHJpbV90KiByZlRyaW0pOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgV3JpdGUgcHJlbG9hZGVkIFJGIHRyaW0gdmFsdWVzIHRvIENNMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFJGQ1JmVHJpbVNldChyZlRyaW1fdCogcmZUcmltKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENoZWNrIE92ZXJyaWRlIFJUcmltIHZzIEZDRkcgUlRyaW0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBSRkNSVHJpbShyZmNfcmFkaW9PcF90ICpwT3BTZXR1cCk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBSZXNldCBwcmV2aW91c2x5IHBhdGNoZWQgQ1BFIFJBTSB0byBhIHN0YXRlIHdoZXJlIGl0IGNhbiBiZSBwYXRjaGVkIGFnYWluCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgUkZDQ1BFUGF0Y2hSZXNldCh2b2lkKTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEZ1bmN0aW9uIHRvIHNldCBWQ09MRE8gcmVmZXJlbmNlIHRvIHZvbHRhZ2UgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFJGQ0FkaTNWY29MZG9Wb2x0YWdlTW9kZShib29sIGJFbmFibGUpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1JGQ0NwZUludEdldEFuZENsZWFyCisgICAgICAgICN1bmRlZiAgUkZDQ3BlSW50R2V0QW5kQ2xlYXIKKyAgICAgICAgI2RlZmluZSBSRkNDcGVJbnRHZXRBbmRDbGVhciAgICAgICAgICAgIFJPTV9SRkNDcGVJbnRHZXRBbmRDbGVhcgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUkZDRG9vcmJlbGxTZW5kVG8KKyAgICAgICAgI3VuZGVmICBSRkNEb29yYmVsbFNlbmRUbworICAgICAgICAjZGVmaW5lIFJGQ0Rvb3JiZWxsU2VuZFRvICAgICAgICAgICAgICAgUk9NX1JGQ0Rvb3JiZWxsU2VuZFRvCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9SRkNTeW50aFBvd2VyRG93bgorICAgICAgICAjdW5kZWYgIFJGQ1N5bnRoUG93ZXJEb3duCisgICAgICAgICNkZWZpbmUgUkZDU3ludGhQb3dlckRvd24gICAgICAgICAgICAgICBST01fUkZDU3ludGhQb3dlckRvd24KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1JGQ1JmVHJpbVJlYWQKKyAgICAgICAgI3VuZGVmICBSRkNSZlRyaW1SZWFkCisgICAgICAgICNkZWZpbmUgUkZDUmZUcmltUmVhZCAgICAgICAgICAgICAgICAgICBST01fUkZDUmZUcmltUmVhZAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUkZDUmZUcmltU2V0CisgICAgICAgICN1bmRlZiAgUkZDUmZUcmltU2V0CisgICAgICAgICNkZWZpbmUgUkZDUmZUcmltU2V0ICAgICAgICAgICAgICAgICAgICBST01fUkZDUmZUcmltU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9SRkNSVHJpbQorICAgICAgICAjdW5kZWYgIFJGQ1JUcmltCisgICAgICAgICNkZWZpbmUgUkZDUlRyaW0gICAgICAgICAgICAgICAgICAgICAgICBST01fUkZDUlRyaW0KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1JGQ0NQRVBhdGNoUmVzZXQKKyAgICAgICAgI3VuZGVmICBSRkNDUEVQYXRjaFJlc2V0CisgICAgICAgICNkZWZpbmUgUkZDQ1BFUGF0Y2hSZXNldCAgICAgICAgICAgICAgICBST01fUkZDQ1BFUGF0Y2hSZXNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlCisgICAgICAgICN1bmRlZiAgUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlCisgICAgICAgICNkZWZpbmUgUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlICAgICAgICBST01fUkZDQWRpM1Zjb0xkb1ZvbHRhZ2VNb2RlCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19SRkNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb20uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Yjg1MDcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb20uaApAQCAtMCwwICsxLDY3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJvbS5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xOCAxMTowOTowNyArMDEwMCAoRnJpLCAxOCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk0NworKgorKiAgRGVzY3JpcHRpb246ICAgIFByb3RvdHlwZXMgZm9yIHRoZSBST00gdXRpbGl0eSBmdW5jdGlvbnMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUk9NX0hfXworI2RlZmluZSBfX1JPTV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisKKyNpZm5kZWYgX19IQVBJX0hfXworI2RlZmluZSBfX0hBUElfSF9fCisKKy8vCisvLyBTdGFydCBhZGRyZXNzIG9mIHRoZSBST00gaGFyZCBBUEkgYWNjZXNzIHRhYmxlIChsb2NhdGVkIGFmdGVyIHRoZSBST00gRlcgcmV2IGZpZWxkKQorLy8KKyNkZWZpbmUgUk9NX0hBUElfVEFCTEVfQUREUiAweDEwMDAwMDQ4CisKKy8vCisvLyBST00gSGFyZC1BUEkgZnVuY3Rpb24gaW50ZXJmYWNlIHR5cGVzCisvLwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9DUkMzMl9UKSAgICAgICAgICAgICAgKCB1aW50OF90KiAgICAgLyogcHVpOERhdGEgICAgICAgICovLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgIC8qIHVpMzJCeXRlQ291bnQgICAqLyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAvKiB1aTMyUmVwZWF0Q291bnQgKi8pOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX0dFVEZMU0laRV9UKSAgICAgICAgICAoIHZvaWQgKTsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9HRVRDSElQSURfVCkgICAgICAgICAgKCB2b2lkICk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfUkVTRVJWRUQxX1QpICAgICAgICAgICggdWludDMyX3QgKTsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9SRVNFUlZFRDJfVCkgICAgICAgICAgKCB2b2lkICk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfUkVTRVJWRUQzX1QpICAgICAgICAgICggdWludDhfdCogICAgICAgICAgICAgICAgICAgICAgICAgICxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKK3R5cGVkZWYgdm9pZCAgICAgICAgICgqIEZQVFJfUkVTRVRERVZfVCkgICAgICAgICAgICggdm9pZCApOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX0ZMRVRDSEVSMzJfVCkgICAgICAgICAoIHVpbnQxNl90KiAgICAvKiBwdWkxNkRhdGEgICAgICAgKi8sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAgICAgLyogdWkxNldvcmRDb3VudCAgICovLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgICAgIC8qIHVpMTZSZXBlYXRDb3VudCAqLyk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfTUlOVkFMX1QpICAgICAgICAgICAgICggdWludDMyX3QqICAgIC8qIHVscERhdGFCdWZmZXIgICAqLyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAvKiB1aTMyRGF0YUNvdW50ICAgKi8pOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAoKiBGUFRSX01BWFZBTF9UKSAgICAgICAgICAgICAoIHVpbnQzMl90KiAgICAvKiBwdWkzMkRhdGFCdWZmZXIgKi8sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgLyogdWkzMkRhdGFDb3VudCAgICovKTsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgKCogRlBUUl9NRUFOVkFMX1QpICAgICAgICAgICAgKCB1aW50MzJfdCogICAgLyogcHVpMzJEYXRhQnVmZmVyICovLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgIC8qIHVpMzJEYXRhQ291bnQgICAqLyk7CisKK3R5cGVkZWYgdWludDMyX3QgICAgICgqIEZQVFJfU1RERFZBTF9UKSAgICAgICAgICAgICggdWludDMyX3QqICAgIC8qIHB1aTMyRGF0YUJ1ZmZlciAqLyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAvKiB1aTMyRGF0YUNvdW50ICAgKi8pOworCit0eXBlZGVmIHZvaWQgICAgICAgICAoKiBGUFRSX0hGU09VUkNFU0FGRVNXSVRDSF9UKSAoIHZvaWQgKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9SRVNFUlZFRDRfVCkgICAgICAgICAgKCB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9SRVNFUlZFRDVfVCkgICAgICAgICAgKCB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9DT01QQUlOX1QpICAgICAgICAgICAgKCB1aW50OF90ICAgICAgLyogdXQ4U2lnbmFsICAgICAgICovKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9DT01QQVJFRl9UKSAgICAgICAgICAgKCB1aW50OF90ICAgICAgLyogdXQ4U2lnbmFsICAgICAgICovKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9BRENDT01QQklOX1QpICAgICAgICAgKCB1aW50OF90ICAgICAgLyogdXQ4U2lnbmFsICAgICAgICovKTsKKwordHlwZWRlZiB2b2lkICAgICAgICAgKCogRlBUUl9DT01QQlJFRl9UKSAgICAgICAgICAgKCB1aW50OF90ICAgICAgLyogdXQ4U2lnbmFsICAgICAgICovKTsKKworZXh0ZXJuIHVpbnQzMl90IE1lbUJ1c1dya0Fyb3VuZEhhcGlQcm9ncmFtRmxhc2godWludDhfdCAqcHVpOERhdGFCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDb3VudCk7CisKK2V4dGVybiB1aW50MzJfdCBNZW1CdXNXcmtBcm91bmRIYXBpRXJhc2VTZWN0b3IodWludDMyX3QgdWkzMkFkZHJlc3MpOworCisvLworLy8gUk9NIEhhcmQtQVBJIGFjY2VzcyB0YWJsZSB0eXBlCisvLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBGUFRSX0NSQzMyX1QgICAgICAgICAgICAgICAgICAgIENyYzMyOworICAgIEZQVFJfR0VURkxTSVpFX1QgICAgICAgICAgICAgICAgRmxhc2hHZXRTaXplOworICAgIEZQVFJfR0VUQ0hJUElEX1QgICAgICAgICAgICAgICAgR2V0Q2hpcElkOworICAgIEZQVFJfUkVTRVJWRUQxX1QgICAgICAgICAgICAgICAgUmVzZXJ2ZWRMb2NhdGlvbjE7CisgICAgRlBUUl9SRVNFUlZFRDJfVCAgICAgICAgICAgICAgICBSZXNlcnZlZExvY2F0aW9uMjsKKyAgICBGUFRSX1JFU0VSVkVEM19UICAgICAgICAgICAgICAgIFJlc2VydmVkTG9jYXRpb24zOworICAgIEZQVFJfUkVTRVRERVZfVCAgICAgICAgICAgICAgICAgUmVzZXREZXZpY2U7CisgICAgRlBUUl9GTEVUQ0hFUjMyX1QgICAgICAgICAgICAgICBGbGV0Y2hlcjMyOworICAgIEZQVFJfTUlOVkFMX1QgICAgICAgICAgICAgICAgICAgTWluVmFsdWU7CisgICAgRlBUUl9NQVhWQUxfVCAgICAgICAgICAgICAgICAgICBNYXhWYWx1ZTsKKyAgICBGUFRSX01FQU5WQUxfVCAgICAgICAgICAgICAgICAgIE1lYW5WYWx1ZTsKKyAgICBGUFRSX1NURERWQUxfVCAgICAgICAgICAgICAgICAgIFN0YW5kRGV2aWF0aW9uVmFsdWU7CisgICAgRlBUUl9SRVNFUlZFRDRfVCAgICAgICAgICAgICAgICBSZXNlcnZlZExvY2F0aW9uNDsKKyAgICBGUFRSX1JFU0VSVkVENV9UICAgICAgICAgICAgICAgIFJlc2VydmVkTG9jYXRpb241OworICAgIEZQVFJfSEZTT1VSQ0VTQUZFU1dJVENIX1QgICAgICAgSEZTb3VyY2VTYWZlU3dpdGNoOworICAgIEZQVFJfQ09NUEFJTl9UICAgICAgICAgICAgICAgICAgU2VsZWN0Q29tcEFJbnB1dDsKKyAgICBGUFRSX0NPTVBBUkVGX1QgICAgICAgICAgICAgICAgIFNlbGVjdENvbXBBUmVmOworICAgIEZQVFJfQURDQ09NUEJJTl9UICAgICAgICAgICAgICAgU2VsZWN0QURDQ29tcEJJbnB1dDsKKyAgICBGUFRSX0NPTVBCUkVGX1QgICAgICAgICAgICAgICAgIFNlbGVjdENvbXBCUmVmOworfSBIQVJEX0FQSV9UOworCisvLworLy8gUG9pbnRlciB0byB0aGUgUk9NIEhBUEkgdGFibGUKKy8vCisjZGVmaW5lIFBfSEFSRF9BUEkgICAgICAgICAgICAgICAgICAgKChIQVJEX0FQSV9UKikgUk9NX0hBUElfVEFCTEVfQUREUikKKworLy8KKy8vIEFkZCB3cmFwcGVyIGFyb3VuZCB0aGUgSGFwaSBmdW5jdGlvbnMgbmVlZGluZyB0aGUgImJ1cyBhcmJpdHJhdGlvbiBpc3N1ZSIgd29ya2Fyb3VuZAorLy8KK2V4dGVybiB2b2lkIFNhZmVIYXBpVm9pZCggRlBUUl9WT0lEX1ZPSURfVCBmUHRyICk7CitleHRlcm4gdm9pZCBTYWZlSGFwaUF1eEFkaVNlbGVjdCggRlBUUl9WT0lEX1VJTlQ4X1QgZlB0ciwgdWludDhfdCB1dDhTaWduYWwgKTsKKworI2RlZmluZSBIYXBpQ3JjMzIoYSxiLGMpICAgICAgICAgICAgIFBfSEFSRF9BUEktPkNyYzMyKGEsYixjKQorI2RlZmluZSBIYXBpR2V0Rmxhc2hTaXplKCkgICAgICAgICAgIFBfSEFSRF9BUEktPkZsYXNoR2V0U2l6ZSgpCisjZGVmaW5lIEhhcGlHZXRDaGlwSWQoKSAgICAgICAgICAgICAgUF9IQVJEX0FQSS0+R2V0Q2hpcElkKCkKKyNkZWZpbmUgSGFwaVNlY3RvckVyYXNlKGEpICAgICAgICAgICBNZW1CdXNXcmtBcm91bmRIYXBpRXJhc2VTZWN0b3IoYSkKKyNkZWZpbmUgSGFwaVByb2dyYW1GbGFzaChhLGIsYykgICAgICBNZW1CdXNXcmtBcm91bmRIYXBpUHJvZ3JhbUZsYXNoKGEsYixjKQorI2RlZmluZSBIYXBpUmVzZXREZXZpY2UoKSAgICAgICAgICAgIFBfSEFSRF9BUEktPlJlc2V0RGV2aWNlKCkKKyNkZWZpbmUgSGFwaUZsZXRjaGVyMzIoYSxiLGMpICAgICAgICBQX0hBUkRfQVBJLT5GbGV0Y2hlcjMyKGEsYixjKQorI2RlZmluZSBIYXBpTWluVmFsdWUoYSxiKSAgICAgICAgICAgIFBfSEFSRF9BUEktPk1pblZhbHVlKGEsYikKKyNkZWZpbmUgSGFwaU1heFZhbHVlKGEsYikgICAgICAgICAgICBQX0hBUkRfQVBJLT5NYXhWYWx1ZShhLGIpCisjZGVmaW5lIEhhcGlNZWFuVmFsdWUoYSxiKSAgICAgICAgICAgUF9IQVJEX0FQSS0+TWVhblZhbHVlKGEsYikKKyNkZWZpbmUgSGFwaVN0YW5kRGV2aWF0aW9uVmFsdWUoYSxiKSBQX0hBUkRfQVBJLT5TdGFuZERldmlhdGlvblZhbHVlKGEsYikKKyNkZWZpbmUgSGFwaUhGU291cmNlU2FmZVN3aXRjaCgpICAgICBTYWZlSGFwaVZvaWQoIFBfSEFSRF9BUEktPkhGU291cmNlU2FmZVN3aXRjaCApCisjZGVmaW5lIEhhcGlTZWxlY3RDb21wQUlucHV0KGEpICAgICAgU2FmZUhhcGlBdXhBZGlTZWxlY3QoIFBfSEFSRF9BUEktPlNlbGVjdENvbXBBSW5wdXQgICAsIGEgKQorI2RlZmluZSBIYXBpU2VsZWN0Q29tcEFSZWYoYSkgICAgICAgIFNhZmVIYXBpQXV4QWRpU2VsZWN0KCBQX0hBUkRfQVBJLT5TZWxlY3RDb21wQVJlZiAgICAgLCBhICkKKyNkZWZpbmUgSGFwaVNlbGVjdEFEQ0NvbXBCSW5wdXQoYSkgICBTYWZlSGFwaUF1eEFkaVNlbGVjdCggUF9IQVJEX0FQSS0+U2VsZWN0QURDQ29tcEJJbnB1dCwgYSApCisjZGVmaW5lIEhhcGlTZWxlY3RDb21wQlJlZihhKSAgICAgICAgU2FmZUhhcGlBdXhBZGlTZWxlY3QoIFBfSEFSRF9BUEktPlNlbGVjdENvbXBCUmVmICAgICAsIGEgKQorCisvLworLy8gRGVmaW5lcyBmb3IgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBIYXBpU2VsZWN0Q29tcEFJbnB1dCBmdW5jdGlvbi4KKy8vIFRoZSBkZWZpbmUgdmFsdWVzIGNhbiBub3QgYmUgY2hhbmdlZCEKKy8vCisjZGVmaW5lIENPTVBBX0lOX05DICAgICAgICAgICAgMHgwMAorI2RlZmluZSBDT01QQV9JTl9BVVhJTzcgICAgICAgIDB4MDkKKyNkZWZpbmUgQ09NUEFfSU5fQVVYSU82ICAgICAgICAweDBBCisjZGVmaW5lIENPTVBBX0lOX0FVWElPNSAgICAgICAgMHgwQgorI2RlZmluZSBDT01QQV9JTl9BVVhJTzQgICAgICAgIDB4MEMKKyNkZWZpbmUgQ09NUEFfSU5fQVVYSU8zICAgICAgICAweDBECisjZGVmaW5lIENPTVBBX0lOX0FVWElPMiAgICAgICAgMHgwRQorI2RlZmluZSBDT01QQV9JTl9BVVhJTzEgICAgICAgIDB4MEYKKyNkZWZpbmUgQ09NUEFfSU5fQVVYSU8wICAgICAgICAweDEwCisKKy8vCisvLyBEZWZpbmVzIGZvciBpbnB1dCBwYXJhbWV0ZXIgdG8gdGhlIEhhcGlTZWxlY3RDb21wQVJlZiBmdW5jdGlvbi4KKy8vIFRoZSBkZWZpbmUgdmFsdWVzIGNhbiBub3QgYmUgY2hhbmdlZCEKKy8vCisjZGVmaW5lIENPTVBBX1JFRl9OQyAgICAgICAgICAgMHgwMAorI2RlZmluZSBDT01QQV9SRUZfRENPVVBMICAgICAgIDB4MDEKKyNkZWZpbmUgQ09NUEFfUkVGX1ZTUyAgICAgICAgICAweDAyCisjZGVmaW5lIENPTVBBX1JFRl9WRERTICAgICAgICAgMHgwMworI2RlZmluZSBDT01QQV9SRUZfQURDVlJFRlAgICAgIDB4MDQKKyNkZWZpbmUgQ09NUEFfUkVGX0FVWElPNyAgICAgICAweDA5CisjZGVmaW5lIENPTVBBX1JFRl9BVVhJTzYgICAgICAgMHgwQQorI2RlZmluZSBDT01QQV9SRUZfQVVYSU81ICAgICAgIDB4MEIKKyNkZWZpbmUgQ09NUEFfUkVGX0FVWElPNCAgICAgICAweDBDCisjZGVmaW5lIENPTVBBX1JFRl9BVVhJTzMgICAgICAgMHgwRAorI2RlZmluZSBDT01QQV9SRUZfQVVYSU8yICAgICAgIDB4MEUKKyNkZWZpbmUgQ09NUEFfUkVGX0FVWElPMSAgICAgICAweDBGCisjZGVmaW5lIENPTVBBX1JFRl9BVVhJTzAgICAgICAgMHgxMAorCisvLworLy8gRGVmaW5lcyBmb3IgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBIYXBpU2VsZWN0QURDQ29tcEJJbnB1dCBmdW5jdGlvbi4KKy8vIFRoZSBkZWZpbmUgdmFsdWVzIGNhbiBub3QgYmUgY2hhbmdlZCEKKy8vCisjZGVmaW5lIEFEQ19DT01QQl9JTl9OQyAgICAgICAgMHgwMAorI2RlZmluZSBBRENfQ09NUEJfSU5fRENPVVBMICAgIDB4MDMKKyNkZWZpbmUgQURDX0NPTVBCX0lOX1ZTUyAgICAgICAweDA0CisjZGVmaW5lIEFEQ19DT01QQl9JTl9WRERTICAgICAgMHgwNQorI2RlZmluZSBBRENfQ09NUEJfSU5fQVVYSU83ICAgIDB4MDkKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0FVWElPNiAgICAweDBBCisjZGVmaW5lIEFEQ19DT01QQl9JTl9BVVhJTzUgICAgMHgwQgorI2RlZmluZSBBRENfQ09NUEJfSU5fQVVYSU80ICAgIDB4MEMKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0FVWElPMyAgICAweDBECisjZGVmaW5lIEFEQ19DT01QQl9JTl9BVVhJTzIgICAgMHgwRQorI2RlZmluZSBBRENfQ09NUEJfSU5fQVVYSU8xICAgIDB4MEYKKyNkZWZpbmUgQURDX0NPTVBCX0lOX0FVWElPMCAgICAweDEwCisKKy8vCisvLyBEZWZpbmVzIGZvciBpbnB1dCBwYXJhbWV0ZXIgdG8gdGhlIEhhcGlTZWxlY3RDb21wQlJlZiBmdW5jdGlvbi4KKy8vIFRoZSBkZWZpbmUgdmFsdWVzIGNhbiBub3QgYmUgY2hhbmdlZCEKKy8vCisjZGVmaW5lIENPTVBCX1JFRl9OQyAgICAgICAgICAgMHgwMAorI2RlZmluZSBDT01QQl9SRUZfRENPVVBMICAgICAgIDB4MDEKKyNkZWZpbmUgQ09NUEJfUkVGX1ZTUyAgICAgICAgICAweDAyCisjZGVmaW5lIENPTVBCX1JFRl9WRERTICAgICAgICAgMHgwMworCisjZW5kaWYgLy8gX19IQVBJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUG9pbnRlcnMgdG8gdGhlIG1haW4gQVBJIHRhYmxlcy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFJPTV9BUElfVEFCTEUgICAgICAgICAgICgodWludDMyX3QgKikgMHgxMDAwMDE4MCkKKyNkZWZpbmUgUk9NX1ZFUlNJT04gICAgICAgICAgICAgKFJPTV9BUElfVEFCTEVbMF0pCisKKworI2RlZmluZSBST01fQVBJX0FPTl9FVkVOVF9UQUJMRSAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMV0pKQorI2RlZmluZSBST01fQVBJX0FPTl9JT0NfVEFCTEUgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMl0pKQorI2RlZmluZSBST01fQVBJX0FPTl9SVENfVEFCTEUgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbM10pKQorI2RlZmluZSBST01fQVBJX0FPTl9XVUNfVEFCTEUgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbNF0pKQorI2RlZmluZSBST01fQVBJX0FVWF9DVFJMX1RBQkxFICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbNV0pKQorI2RlZmluZSBST01fQVBJX0FVWF9URENfVEFCTEUgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbNl0pKQorI2RlZmluZSBST01fQVBJX0FVWF9USU1FUl9UQUJMRSAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbN10pKQorI2RlZmluZSBST01fQVBJX0FVWF9XVUNfVEFCTEUgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbOF0pKQorI2RlZmluZSBST01fQVBJX0RESV9UQUJMRSAgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbOV0pKQorI2RlZmluZSBST01fQVBJX0ZMQVNIX1RBQkxFICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMTBdKSkKKyNkZWZpbmUgUk9NX0FQSV9JMkNfVEFCTEUgICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzExXSkpCisjZGVmaW5lIFJPTV9BUElfSU5URVJSVVBUX1RBQkxFICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsxMl0pKQorI2RlZmluZSBST01fQVBJX0lPQ19UQUJMRSAgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMTNdKSkKKyNkZWZpbmUgUk9NX0FQSV9QUkNNX1RBQkxFICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzE0XSkpCisjZGVmaW5lIFJPTV9BUElfU01QSF9UQUJMRSAgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsxNV0pKQorI2RlZmluZSBST01fQVBJX1NTSV9UQUJMRSAgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMTddKSkKKyNkZWZpbmUgUk9NX0FQSV9USU1FUl9UQUJMRSAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzE4XSkpCisjZGVmaW5lIFJPTV9BUElfVFJOR19UQUJMRSAgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsxOV0pKQorI2RlZmluZSBST01fQVBJX1VBUlRfVEFCTEUgICAgICAoKHVpbnQzMl90KikgKFJPTV9BUElfVEFCTEVbMjBdKSkKKyNkZWZpbmUgUk9NX0FQSV9VRE1BX1RBQkxFICAgICAgKCh1aW50MzJfdCopIChST01fQVBJX1RBQkxFWzIxXSkpCisjZGVmaW5lIFJPTV9BUElfVklNU19UQUJMRSAgICAgICgodWludDMyX3QqKSAoUk9NX0FQSV9UQUJMRVsyMl0pKQorCisvLyBBT05fRVZFTlQgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9BT05FdmVudE1jdVdha2VVcFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyTUNVV1VFdmVudCwgdWludDMyX3QgdWkzMkV2ZW50U3JjKSkgXAorICAgIFJPTV9BUElfQU9OX0VWRU5UX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV9BT05FdmVudE1jdVdha2VVcEdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMk1DVVdVRXZlbnQpKSBcCisgICAgUk9NX0FQSV9BT05fRVZFTlRfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX0FPTkV2ZW50QXV4V2FrZVVwU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJBVVhXVUV2ZW50LCB1aW50MzJfdCB1aTMyRXZlbnRTcmMpKSBcCisgICAgUk9NX0FQSV9BT05fRVZFTlRfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX0FPTkV2ZW50QXV4V2FrZVVwR2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyQVVYV1VFdmVudCkpIFwKKyAgICBST01fQVBJX0FPTl9FVkVOVF9UQUJMRVszXSkKKworI2RlZmluZSBST01fQU9ORXZlbnRNY3VTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMk1DVUV2ZW50LCB1aW50MzJfdCB1aTMyRXZlbnRTcmMpKSBcCisgICAgUk9NX0FQSV9BT05fRVZFTlRfVEFCTEVbNF0pCisKKyNkZWZpbmUgUk9NX0FPTkV2ZW50TWN1R2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyTUNVRXZlbnQpKSBcCisgICAgUk9NX0FQSV9BT05fRVZFTlRfVEFCTEVbNV0pCisKKworLy8gQU9OX1dVQyBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX0FPTldVQ0F1eFJlc2V0IFwKKyAgICAoKHZvaWQgKCopKHZvaWQpKSBcCisgICAgUk9NX0FQSV9BT05fV1VDX1RBQkxFWzNdKQorCisjZGVmaW5lIFJPTV9BT05XVUNSZWNoYXJnZUN0cmxDb25maWdTZXQgXAorICAgICgodm9pZCAoKikoYm9vbCBiQWRhcHRFbmFibGUsIHVpbnQzMl90IHVpMzJBZGFwdFJhdGUsIHVpbnQzMl90IHVpMzJQZXJpb2QsIHVpbnQzMl90IHVpMzJNYXhQZXJpb2QpKSBcCisgICAgUk9NX0FQSV9BT05fV1VDX1RBQkxFWzRdKQorCisjZGVmaW5lIFJPTV9BT05XVUNPc2NDb25maWcgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMlBlcmlvZCkpIFwKKyAgICBST01fQVBJX0FPTl9XVUNfVEFCTEVbNV0pCisKKworLy8gQVVYX1REQyBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX0FVWFREQ0NvbmZpZ1NldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlN0YXJ0Q29uZGl0aW9uLCB1aW50MzJfdCB1aTMyU3RvcENvbmRpdGlvbikpIFwKKyAgICBST01fQVBJX0FVWF9URENfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX0FVWFREQ01lYXN1cmVtZW50RG9uZSBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMkJhc2UpKSBcCisgICAgUk9NX0FQSV9BVVhfVERDX1RBQkxFWzFdKQorCisKKy8vIEFVWF9XVUMgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9BVVhXVUNDbG9ja0VuYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQ2xvY2tzKSkgXAorICAgIFJPTV9BUElfQVVYX1dVQ19UQUJMRVswXSkKKworI2RlZmluZSBST01fQVVYV1VDQ2xvY2tEaXNhYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJDbG9ja3MpKSBcCisgICAgUk9NX0FQSV9BVVhfV1VDX1RBQkxFWzFdKQorCisjZGVmaW5lIFJPTV9BVVhXVUNDbG9ja1N0YXR1cyBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMkNsb2NrcykpIFwKKyAgICBST01fQVBJX0FVWF9XVUNfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX0FVWFdVQ1Bvd2VyQ3RybCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUG93ZXJNb2RlKSkgXAorICAgIFJPTV9BUElfQVVYX1dVQ19UQUJMRVszXSkKKworCisvLyBGTEFTSCBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX0ZsYXNoUG93ZXJNb2RlR2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh2b2lkKSkgXAorICAgIFJPTV9BUElfRkxBU0hfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX0ZsYXNoUHJvdGVjdGlvblNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyU2VjdG9yQWRkcmVzcywgdWludDMyX3QgdWkzMlByb3RlY3RNb2RlKSkgXAorICAgIFJPTV9BUElfRkxBU0hfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX0ZsYXNoUHJvdGVjdGlvbkdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpKSBcCisgICAgUk9NX0FQSV9GTEFTSF9UQUJMRVszXSkKKworI2RlZmluZSBST01fRmxhc2hQcm90ZWN0aW9uU2F2ZSBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMlNlY3RvckFkZHJlc3MpKSBcCisgICAgUk9NX0FQSV9GTEFTSF9UQUJMRVs0XSkKKworI2RlZmluZSBST01fRmxhc2hFZnVzZVJlYWRSb3cgXAorICAgICgoYm9vbCAoKikodWludDMyX3QgKnB1aTMyRWZ1c2VEYXRhLCB1aW50MzJfdCB1aTMyUm93QWRkcmVzcykpIFwKKyAgICBST01fQVBJX0ZMQVNIX1RBQkxFWzhdKQorCisjZGVmaW5lIFJPTV9GbGFzaERpc2FibGVTZWN0b3JzRm9yV3JpdGUgXAorICAgICgodm9pZCAoKikodm9pZCkpIFwKKyAgICBST01fQVBJX0ZMQVNIX1RBQkxFWzldKQorCisKKy8vIEkyQyBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX0kyQ01hc3RlckluaXRFeHBDbGsgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJMkNDbGssIGJvb2wgYkZhc3QpKSBcCisgICAgUk9NX0FQSV9JMkNfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX0kyQ01hc3RlckVyciBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMkJhc2UpKSBcCisgICAgUk9NX0FQSV9JMkNfVEFCTEVbMV0pCisKKworLy8gSU5URVJSVVBUIEZVTkNUSU9OUworI2RlZmluZSBST01fSW50UHJpb3JpdHlHcm91cGluZ1NldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQml0cykpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVswXSkKKworI2RlZmluZSBST01fSW50UHJpb3JpdHlHcm91cGluZ0dldCBcCisgICAgKCh1aW50MzJfdCAoKikodm9pZCkpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVsxXSkKKworI2RlZmluZSBST01fSW50UHJpb3JpdHlTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkludGVycnVwdCwgdWludDhfdCB1aThQcmlvcml0eSkpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVsyXSkKKworI2RlZmluZSBST01fSW50UHJpb3JpdHlHZXQgXAorICAgICgoaW50MzJfdCAoKikodWludDMyX3QgdWkzMkludGVycnVwdCkpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVszXSkKKworI2RlZmluZSBST01fSW50RW5hYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbNF0pCisKKyNkZWZpbmUgUk9NX0ludERpc2FibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkludGVycnVwdCkpIFwKKyAgICBST01fQVBJX0lOVEVSUlVQVF9UQUJMRVs1XSkKKworI2RlZmluZSBST01fSW50UGVuZFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySW50ZXJydXB0KSkgXAorICAgIFJPTV9BUElfSU5URVJSVVBUX1RBQkxFWzZdKQorCisjZGVmaW5lIFJPTV9JbnRQZW5kR2V0IFwKKyAgICAoKGJvb2wgKCopKHVpbnQzMl90IHVpMzJJbnRlcnJ1cHQpKSBcCisgICAgUk9NX0FQSV9JTlRFUlJVUFRfVEFCTEVbN10pCisKKyNkZWZpbmUgUk9NX0ludFBlbmRDbGVhciBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySW50ZXJydXB0KSkgXAorICAgIFJPTV9BUElfSU5URVJSVVBUX1RBQkxFWzhdKQorCisKKy8vIElPQyBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX0lPQ1BvcnRDb25maWd1cmVTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJQb3J0SWQsIHVpbnQzMl90IHVpMzJJT0NvbmZpZykpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVswXSkKKworI2RlZmluZSBST01fSU9DUG9ydENvbmZpZ3VyZUdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMklPSWQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPU2h1dGRvd25TZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJT1NodXRkb3duKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzJdKQorCisjZGVmaW5lIFJPTV9JT0NJT01vZGVTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJT01vZGUpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbNF0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPSW50U2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMySW50LCB1aW50MzJfdCB1aTMyRWRnZURldCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVs1XSkKKworI2RlZmluZSBST01fSU9DSU9Qb3J0UHVsbFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMlB1bGwpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbNl0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPSHlzdFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMkh5c3RlcmVzaXMpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbN10pCisKKyNkZWZpbmUgUk9NX0lPQ0lPSW5wdXRTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJbnB1dCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVs4XSkKKworI2RlZmluZSBST01fSU9DSU9TbGV3Q3RybFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCwgdWludDMyX3QgdWkzMlNsZXdFbmFibGUpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbOV0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPRHJ2U3RyZW5ndGhTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQsIHVpbnQzMl90IHVpMzJJT0N1cnJlbnQsIHVpbnQzMl90IHVpMzJEcnZTdHJlbmd0aCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxMF0pCisKKyNkZWZpbmUgUk9NX0lPQ0lPUG9ydElkU2V0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkLCB1aW50MzJfdCB1aTMyUG9ydElkKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzExXSkKKworI2RlZmluZSBST01fSU9DSW50RW5hYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJJT0lkKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzEyXSkKKworI2RlZmluZSBST01fSU9DSW50RGlzYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxM10pCisKKyNkZWZpbmUgUk9NX0lPQ1BpblR5cGVHcGlvSW5wdXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMklPSWQpKSBcCisgICAgUk9NX0FQSV9JT0NfVEFCTEVbMTRdKQorCisjZGVmaW5lIFJPTV9JT0NQaW5UeXBlR3Bpb091dHB1dCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxNV0pCisKKyNkZWZpbmUgUk9NX0lPQ1BpblR5cGVVYXJ0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUngsIHVpbnQzMl90IHVpMzJUeCwgdWludDMyX3QgdWkzMkN0cywgdWludDMyX3QgdWkzMlJ0cykpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxNl0pCisKKyNkZWZpbmUgUk9NX0lPQ1BpblR5cGVTc2lNYXN0ZXIgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJSeCwgdWludDMyX3QgdWkzMlR4LCB1aW50MzJfdCB1aTMyRnNzLCB1aW50MzJfdCB1aTMyQ2xrKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzE3XSkKKworI2RlZmluZSBST01fSU9DUGluVHlwZVNzaVNsYXZlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyUngsIHVpbnQzMl90IHVpMzJUeCwgdWludDMyX3QgdWkzMkZzcywgdWludDMyX3QgdWkzMkNsaykpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsxOF0pCisKKyNkZWZpbmUgUk9NX0lPQ1BpblR5cGVJMmMgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJEYXRhLCB1aW50MzJfdCB1aTMyQ2xrKSkgXAorICAgIFJPTV9BUElfSU9DX1RBQkxFWzE5XSkKKworI2RlZmluZSBST01fSU9DUGluVHlwZUF1eCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMySU9JZCkpIFwKKyAgICBST01fQVBJX0lPQ19UQUJMRVsyMV0pCisKKworLy8gUFJDTSBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX1BSQ01JbmZDbG9ja0NvbmZpZ3VyZVNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQ2xrRGl2LCB1aW50MzJfdCB1aTMyUG93ZXJNb2RlKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVswXSkKKworI2RlZmluZSBST01fUFJDTUluZkNsb2NrQ29uZmlndXJlR2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyUG93ZXJNb2RlKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVsxXSkKKworI2RlZmluZSBST01fUFJDTUF1ZGlvQ2xvY2tDb25maWdTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkNsa0NvbmZpZywgdWludDMyX3QgdWkzMlNhbXBsZVJhdGUpKSBcCisgICAgUk9NX0FQSV9QUkNNX1RBQkxFWzRdKQorCisjZGVmaW5lIFJPTV9QUkNNUG93ZXJEb21haW5PbiBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyRG9tYWlucykpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbNV0pCisKKyNkZWZpbmUgUk9NX1BSQ01Qb3dlckRvbWFpbk9mZiBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyRG9tYWlucykpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbNl0pCisKKyNkZWZpbmUgUk9NX1BSQ01QZXJpcGhlcmFsUnVuRW5hYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVs3XSkKKworI2RlZmluZSBST01fUFJDTVBlcmlwaGVyYWxSdW5EaXNhYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVs4XSkKKworI2RlZmluZSBST01fUFJDTVBlcmlwaGVyYWxTbGVlcEVuYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbOV0pCisKKyNkZWZpbmUgUk9NX1BSQ01QZXJpcGhlcmFsU2xlZXBEaXNhYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVsxMF0pCisKKyNkZWZpbmUgUk9NX1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRW5hYmxlIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJQZXJpcGhlcmFsKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVsxMV0pCisKKyNkZWZpbmUgUk9NX1BSQ01QZXJpcGhlcmFsRGVlcFNsZWVwRGlzYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyUGVyaXBoZXJhbCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMTJdKQorCisjZGVmaW5lIFJPTV9QUkNNUG93ZXJEb21haW5TdGF0dXMgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJEb21haW5zKSkgXAorICAgIFJPTV9BUElfUFJDTV9UQUJMRVsxM10pCisKKyNkZWZpbmUgUk9NX1BSQ01EZWVwU2xlZXAgXAorICAgICgodm9pZCAoKikodm9pZCkpIFwKKyAgICBST01fQVBJX1BSQ01fVEFCTEVbMTRdKQorCisKKy8vIFNNUEggRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9TTVBIQWNxdWlyZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKSkgXAorICAgIFJPTV9BUElfU01QSF9UQUJMRVswXSkKKworCisvLyBTU0kgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9TU0lDb25maWdTZXRFeHBDbGsgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJTU0lDbGssIHVpbnQzMl90IHVpMzJQcm90b2NvbCwgdWludDMyX3QgdWkzMk1vZGUsIHVpbnQzMl90IHVpMzJCaXRSYXRlLCB1aW50MzJfdCB1aTMyRGF0YVdpZHRoKSkgXAorICAgIFJPTV9BUElfU1NJX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV9TU0lEYXRhUHV0IFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRGF0YSkpIFwKKyAgICBST01fQVBJX1NTSV9UQUJMRVsxXSkKKworI2RlZmluZSBST01fU1NJRGF0YVB1dE5vbkJsb2NraW5nIFwKKyAgICAoKGludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRGF0YSkpIFwKKyAgICBST01fQVBJX1NTSV9UQUJMRVsyXSkKKworI2RlZmluZSBST01fU1NJRGF0YUdldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyRGF0YSkpIFwKKyAgICBST01fQVBJX1NTSV9UQUJMRVszXSkKKworI2RlZmluZSBST01fU1NJRGF0YUdldE5vbkJsb2NraW5nIFwKKyAgICAoKGludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCAqcHVpMzJEYXRhKSkgXAorICAgIFJPTV9BUElfU1NJX1RBQkxFWzRdKQorCisKKy8vIFRJTUVSIEZVTkNUSU9OUworI2RlZmluZSBST01fVGltZXJDb25maWd1cmUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDb25maWcpKSBcCisgICAgUk9NX0FQSV9USU1FUl9UQUJMRVswXSkKKworI2RlZmluZSBST01fVGltZXJMZXZlbENvbnRyb2wgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgYm9vbCBiSW52ZXJ0KSkgXAorICAgIFJPTV9BUElfVElNRVJfVEFCTEVbMV0pCisKKyNkZWZpbmUgUk9NX1RpbWVyU3RhbGxDb250cm9sIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIGJvb2wgYlN0YWxsKSkgXAorICAgIFJPTV9BUElfVElNRVJfVEFCTEVbM10pCisKKyNkZWZpbmUgUk9NX1RpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgYm9vbCBiV2FpdCkpIFwKKyAgICBST01fQVBJX1RJTUVSX1RBQkxFWzRdKQorCisKKy8vIFRSTkcgRlVOQ1RJT05TCisjZGVmaW5lIFJPTV9UUk5HTnVtYmVyR2V0IFwKKyAgICAoKHVpbnQzMl90ICgqKSh1aW50MzJfdCB1aTMyV29yZCkpIFwKKyAgICBST01fQVBJX1RSTkdfVEFCTEVbMV0pCisKKworLy8gVUFSVCBGVU5DVElPTlMKKyNkZWZpbmUgUk9NX1VBUlRGSUZPTGV2ZWxHZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90ICpwdWkzMlR4TGV2ZWwsIHVpbnQzMl90ICpwdWkzMlJ4TGV2ZWwpKSBcCisgICAgUk9NX0FQSV9VQVJUX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV9VQVJUQ29uZmlnU2V0RXhwQ2xrIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVUFSVENsaywgdWludDMyX3QgdWkzMkJhdWQsIHVpbnQzMl90IHVpMzJDb25maWcpKSBcCisgICAgUk9NX0FQSV9VQVJUX1RBQkxFWzFdKQorCisjZGVmaW5lIFJPTV9VQVJUQ29uZmlnR2V0RXhwQ2xrIFwKKyAgICAoKHZvaWQgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVUFSVENsaywgdWludDMyX3QgKnB1aTMyQmF1ZCwgdWludDMyX3QgKnB1aTMyQ29uZmlnKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVsyXSkKKworI2RlZmluZSBST01fVUFSVERpc2FibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UpKSBcCisgICAgUk9NX0FQSV9VQVJUX1RBQkxFWzNdKQorCisjZGVmaW5lIFJPTV9VQVJUQ2hhckdldE5vbkJsb2NraW5nIFwKKyAgICAoKGludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVs0XSkKKworI2RlZmluZSBST01fVUFSVENoYXJHZXQgXAorICAgICgoaW50MzJfdCAoKikodWludDMyX3QgdWkzMkJhc2UpKSBcCisgICAgUk9NX0FQSV9VQVJUX1RBQkxFWzVdKQorCisjZGVmaW5lIFJPTV9VQVJUQ2hhclB1dE5vbkJsb2NraW5nIFwKKyAgICAoKGJvb2wgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpKSBcCisgICAgUk9NX0FQSV9VQVJUX1RBQkxFWzZdKQorCisjZGVmaW5lIFJPTV9VQVJUQ2hhclB1dCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDhfdCB1aThEYXRhKSkgXAorICAgIFJPTV9BUElfVUFSVF9UQUJMRVs3XSkKKworCisvLyBVRE1BIEZVTkNUSU9OUworI2RlZmluZSBST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLCB1aW50MzJfdCB1aTMyQXR0cikpIFwKKyAgICBST01fQVBJX1VETUFfVEFCTEVbMF0pCisKKyNkZWZpbmUgUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0sIHVpbnQzMl90IHVpMzJBdHRyKSkgXAorICAgIFJPTV9BUElfVURNQV9UQUJMRVsxXSkKKworI2RlZmluZSBST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSkpIFwKKyAgICBST01fQVBJX1VETUFfVEFCTEVbMl0pCisKKyNkZWZpbmUgUk9NX3VETUFDaGFubmVsQ29udHJvbFNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCwgdWludDMyX3QgdWkzMkNvbnRyb2wpKSBcCisgICAgUk9NX0FQSV9VRE1BX1RBQkxFWzNdKQorCisjZGVmaW5lIFJPTV91RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQgXAorICAgICgodm9pZCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLCB1aW50MzJfdCB1aTMyVGFza0NvdW50LCB2b2lkICpwdlRhc2tMaXN0LCB1aW50MzJfdCB1aTMySXNQZXJpcGhTRykpIFwKKyAgICBST01fQVBJX1VETUFfVEFCTEVbNV0pCisKKyNkZWZpbmUgUk9NX3VETUFDaGFubmVsU2l6ZUdldCBcCisgICAgKCh1aW50MzJfdCAoKikodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgpKSBcCisgICAgUk9NX0FQSV9VRE1BX1RBQkxFWzZdKQorCisjZGVmaW5lIFJPTV91RE1BQ2hhbm5lbE1vZGVHZXQgXAorICAgICgodWludDMyX3QgKCopKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4KSkgXAorICAgIFJPTV9BUElfVURNQV9UQUJMRVs3XSkKKworCisvLyBWSU1TIEZVTkNUSU9OUworI2RlZmluZSBST01fVklNU0NvbmZpZ3VyZSBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiUm91bmRSb2JpbiwgYm9vbCBiUHJlZmV0Y2gpKSBcCisgICAgUk9NX0FQSV9WSU1TX1RBQkxFWzBdKQorCisjZGVmaW5lIFJPTV9WSU1TTW9kZVNldCBcCisgICAgKCh2b2lkICgqKSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMk1vZGUpKSBcCisgICAgUk9NX0FQSV9WSU1TX1RBQkxFWzFdKQorCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX1JPTV9IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JvbV9jcnlwdG8uYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JvbV9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI0MjJiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvcm9tX2NyeXB0by5jCkBAIC0wLDAgKzEsMzA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJvbV9jcnlwdG8uYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDktMDkgMTE6NTU6NTkgKzAyMDAgKFdlZCwgMDkgU2VwIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ1MzYKKyoKKyogIERlc2NyaXB0aW9uOiAgICBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIEFQSSB0byB0aGUgQUVTLCBFQ0MgYW5kCisqICAgICAgICAgICAgICAgICAgU0hBMjU2IGZ1bmN0aW9ucyBidWlsdCBpbnRvIFJPTSBvbiB0aGUgQ0MyNnh4LgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tX2NyeXB0by5oPgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyogQUVTLTEyOCAqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKiBBRVMgLSBFQ0IgKi8KK3R5cGVkZWYgdm9pZCgqYWVzX2VjYl9lbmNyeXB0X3QpKHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQ4X3QgKik7CithZXNfZWNiX2VuY3J5cHRfdCBhZXNfZWNiX2VuY3J5cHQgPSAoYWVzX2VjYl9lbmNyeXB0X3QpKDB4MTAwMThhOTkpOworCit0eXBlZGVmIHZvaWQoKmFlc19lY2JfZGVjcnlwdF90KSh1aW50OF90ICosIHVpbnQxNl90LCB1aW50OF90ICopOworYWVzX2VjYl9kZWNyeXB0X3QgYWVzX2VjYl9kZWNyeXB0PSAoYWVzX2VjYl9kZWNyeXB0X3QpKDB4MTAwMThhYzUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBRVNfRUNCX0VuY3J5cHREYXRhCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitBRVNfRUNCX0VuY3J5cHREYXRhKHVpbnQ4X3QgKnRleHQsIHVpbnQxNl90IHRleHRMZW4sIHVpbnQ4X3QgKmFlc0tleSkKK3sKKyAgYWVzX2VjYl9lbmNyeXB0KHRleHQsIHRleHRMZW4sIGFlc0tleSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFFU19FQ0JfRGVjcnlwdERhdGEKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0FFU19FQ0JfRGVjcnlwdERhdGEodWludDhfdCAqdGV4dCwgdWludDE2X3QgdGV4dExlbiwgdWludDhfdCAqYWVzS2V5KQoreworICBhZXNfZWNiX2RlY3J5cHQodGV4dCwgdGV4dExlbiwgYWVzS2V5KTsKK30KKworLyogQUVTIC0gQ0NNICovCit0eXBlZGVmIGludDhfdCgqYWVzX2NjbV9lbmNyeXB0X3QpKHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QgKiwgdWludDhfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCwgdWludDhfdCAqLCB1aW50MTZfdCwgdWludDhfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICosIHVpbnQ4X3QpOworYWVzX2NjbV9lbmNyeXB0X3QgYWVzX2NjbV9lbmNyeXB0ID0gKGFlc19jY21fZW5jcnlwdF90KSgweDEwMDE4YTE5KTsKKwordHlwZWRlZiBpbnQ4X3QoKmFlc19jY21fZGVjcnlwdF90KSh1aW50OF90LCB1aW50OF90LCB1aW50OF90ICosIHVpbnQ4X3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QsIHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQ4X3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqLCB1aW50OF90KTsKK2Flc19jY21fZGVjcnlwdF90IGFlc19jY21fZGVjcnlwdD0gKGFlc19jY21fZGVjcnlwdF90KSgweDEwMDE4YTM1KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQUVTX0NDTV9FbmNyeXB0RGF0YQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50OF90CitBRVNfQ0NNX0VuY3J5cHREYXRhKHVpbnQ4X3QgZW5jcnlwdEZsYWcsIHVpbnQ4X3QgTUFDTGVuLCB1aW50OF90ICpub25jZSwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW5UZXh0LCB1aW50MTZfdCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZGREYXRhQnVmLCB1aW50MTZfdCBhZGRCdWZMZW4sCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFlc0tleSwgdWludDhfdCAqTUFDLCB1aW50OF90IGNjbUxWYWwpCit7CisgIHJldHVybiBhZXNfY2NtX2VuY3J5cHQoZW5jcnlwdEZsYWcsIE1BQ0xlbiwgbm9uY2UsIHBsYWluVGV4dCwgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGREYXRhQnVmLCBhZGRCdWZMZW4sIGFlc0tleSwgTUFDLCBjY21MVmFsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQUVTX0NDTV9EZWNyeXB0RGF0YQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50OF90CitBRVNfQ0NNX0RlY3J5cHREYXRhKHVpbnQ4X3QgZGVjcnlwdEZsYWcsIHVpbnQ4X3QgTUFDTGVuLCB1aW50OF90ICpub25jZSwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY2lwaGVyVGV4dCwgdWludDE2X3QgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWRkRGF0YUJ1ZiwgdWludDE2X3QgYWRkQnVmTGVuLAorICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKk1BQywgdWludDhfdCBjY21MVmFsKQoreworICByZXR1cm4gYWVzX2NjbV9kZWNyeXB0KGRlY3J5cHRGbGFnLCBNQUNMZW4sIG5vbmNlLCBjaXBoZXJUZXh0LCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZERhdGFCdWYsIGFkZEJ1ZkxlbiwgYWVzS2V5LCBNQUMsIGNjbUxWYWwpOworCit9CisKKy8qIEFFUyAtIENUUiAqLwordHlwZWRlZiB1aW50OF90KCphZXNfY3RyX2VuY3J5cHRfdCkodWludDhfdCAqLCB1aW50MTZfdCwgdWludDhfdCAqLCB1aW50OF90ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICopOworYWVzX2N0cl9lbmNyeXB0X3QgYWVzX2N0cl9lbmNyeXB0ID0gKGFlc19jdHJfZW5jcnlwdF90KSgweDEwMDE3NWVkKTsKKwordHlwZWRlZiB1aW50OF90KCphZXNfY3RyX2RlY3J5cHRfdCkodWludDhfdCAqLCB1aW50MTZfdCwgdWludDhfdCAqLCB1aW50OF90ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICopOworYWVzX2N0cl9kZWNyeXB0X3QgYWVzX2N0cl9kZWNyeXB0PSAoYWVzX2N0cl9kZWNyeXB0X3QpKDB4MTAwMTc3NzEpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBRVNfQ1RSX0VuY3J5cHREYXRhCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitBRVNfQ1RSX0VuY3J5cHREYXRhKHVpbnQ4X3QgKnBsYWluVGV4dCwgdWludDE2X3QgdGV4dExlbiwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWVzS2V5LCB1aW50OF90ICpub25jZSwKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaW5pdFZlY3RvcikKK3sKKyAgcmV0dXJuIGFlc19jdHJfZW5jcnlwdChwbGFpblRleHQsIHRleHRMZW4sIGFlc0tleSwgbm9uY2UsIGluaXRWZWN0b3IpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBBRVNfQ1RSX0RlY3J5cHREYXRhCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitBRVNfQ1RSX0RlY3J5cHREYXRhKHVpbnQ4X3QgKmNpcGhlclRleHQsIHVpbnQxNl90IHRleHRMZW4sCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFlc0tleSwgdWludDhfdCAqbm9uY2UsCisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmluaXRWZWN0b3IpCit7CisgIHJldHVybiBhZXNfY3RyX2RlY3J5cHQoY2lwaGVyVGV4dCwgdGV4dExlbiwgYWVzS2V5LCBub25jZSwgaW5pdFZlY3Rvcik7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyogRUNDICovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNpZmRlZiBFQ0NfUFJJTUVfTklTVDI1Nl9DVVJWRQorLy8jZGVmaW5lIFRFU1RfTklTVDI1NgorLy8jZGVmaW5lIFBBUkFNX1AgTklTVDI1Nl9wOworI2RlZmluZSBQQVJBTV9QIDB4MTAwMThiMGM7CisKKy8vI2RlZmluZSBQQVJBTV9SIE5JU1QyNTZfcjsKKyNkZWZpbmUgUEFSQU1fUiAweDEwMDE4YjMwOworCisvLyNkZWZpbmUgUEFSQU1fQSBOSVNUMjU2X2E7CisjZGVmaW5lIFBBUkFNX0EgMHgxMDAxOGI1NDsKKworLy8jZGVmaW5lIFBBUkFNX0IgTklTVDI1Nl9iOworI2RlZmluZSBQQVJBTV9CIDB4MTAwMThiNzg7CisKKy8vI2RlZmluZSBQQVJBTV9HWCBOSVNUMjU2X0d4OworI2RlZmluZSBQQVJBTV9HWCAweDEwMDE4YjljOworCisvLyNkZWZpbmUgUEFSQU1fR1kgTklTVDI1Nl9HeTsKKyNkZWZpbmUgUEFSQU1fR1kgMHgxMDAxOGJjMDsKKworI2VuZGlmCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRUNDX2luaXRpYWxpemUKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK0VDQ19pbml0aWFsaXplKHVpbnQzMl90ICpwV29ya3pvbmUpCit7CisgIC8vIEluaXRpYWxpemUgY3VydmUgcGFyYW1ldGVycworICAvL2RhdGFfcCAgPSAodWludDMyX3QgKilQQVJBTV9QOworICAqKCh1aW50MzJfdCAqKikweDIwMDA0ZjQ4KSA9ICh1aW50MzJfdCAqKVBBUkFNX1A7CisKKyAgLy9kYXRhX3IgID0gKHVpbnQzMl90ICopUEFSQU1fUjsKKyAgKigodWludDMyX3QgKiopMHgyMDAwNGY0YykgPSAodWludDMyX3QgKilQQVJBTV9SOworCisgIC8vZGF0YV9hICA9ICh1aW50MzJfdCAqKVBBUkFNX0E7CisgICooKHVpbnQzMl90ICoqKTB4MjAwMDRmNTApID0gKHVpbnQzMl90ICopUEFSQU1fQTsKKworICAvL2RhdGFfYiAgPSAodWludDMyX3QgKilQQVJBTV9COworICAqKCh1aW50MzJfdCAqKikweDIwMDA0ZmE4KSA9ICh1aW50MzJfdCAqKVBBUkFNX0I7CisKKyAgLy9kYXRhX0d4ID0gKHVpbnQzMl90ICopUEFSQU1fR1g7CisgICooKHVpbnQzMl90ICoqKTB4MjAwMDRmYTApID0gKHVpbnQzMl90ICopUEFSQU1fR1g7CisKKyAgLy9kYXRhX0d5ID0gKHVpbnQzMl90ICopUEFSQU1fR1k7CisgICooKHVpbnQzMl90ICoqKTB4MjAwMDRmYTQpID0gKHVpbnQzMl90ICopUEFSQU1fR1k7CisKKyAgLy8gSW5pdGlhbGl6ZSB3aW5kb3cgc2l6ZQorICAvL3dpbiA9ICh1aW50OF90KSBFQ0NfV0lORE9XX1NJWkU7CisgICooKHVpbnQ4X3QgKikweDIwMDA0ZjQwKSA9ICh1aW50OF90KSBFQ0NfV0lORE9XX1NJWkU7CisKKyAgLy8gSW5pdGlhbGl6ZSB3b3JrIHpvbmUKKyAgLy93b3Jrem9uZSA9ICh1aW50MzJfdCAqKSBwV29ya3pvbmU7CisgICooKHVpbnQzMl90ICoqKTB4MjAwMDRmNDQpID0gKHVpbnQzMl90ICopIHBXb3Jrem9uZTsKK30KKwordHlwZWRlZiB1aW50OF90KCplY2Nfa2V5Z2VuX3QpKHVpbnQzMl90ICosIHVpbnQzMl90ICosdWludDMyX3QgKiwgdWludDMyX3QgKik7CitlY2Nfa2V5Z2VuX3QgZWNjX2dlbmVyYXRla2V5ID0gKGVjY19rZXlnZW5fdCkoMHgxMDAxN2RiZCk7CisKK3R5cGVkZWYgdWludDhfdCgqZWNkc2Ffc2lnbl90KSh1aW50MzJfdCAqLCB1aW50MzJfdCAqLHVpbnQzMl90ICosIHVpbnQzMl90ICosIHVpbnQzMl90ICopOworZWNkc2Ffc2lnbl90IGVjY19lY2RzYV9zaWduID0gKGVjZHNhX3NpZ25fdCkoMHgxMDAxNzk2OSk7CisKK3R5cGVkZWYgdWludDhfdCgqZWNkc2FfdmVyaWZ5X3QpKHVpbnQzMl90ICosIHVpbnQzMl90ICosdWludDMyX3QgKiwgdWludDMyX3QgKiwgdWludDMyX3QgKik7CitlY2RzYV92ZXJpZnlfdCBlY2NfZWNkc2FfdmVyaWZ5ID0gKGVjZHNhX3ZlcmlmeV90KSgweDEwMDE3YjAxKTsKKwordHlwZWRlZiB1aW50OF90KCplY2RoX2NvbXB1dGVTaGFyZWRTZWNyZXRfdCkodWludDMyX3QgKiwgdWludDMyX3QgKix1aW50MzJfdCAqLCB1aW50MzJfdCAqLCB1aW50MzJfdCAqKTsKK2VjZGhfY29tcHV0ZVNoYXJlZFNlY3JldF90IGVjZGhfY29tcHV0ZVNoYXJlZFNlY3JldCA9IChlY2RoX2NvbXB1dGVTaGFyZWRTZWNyZXRfdCkoMHgxMDAxN2RlZCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEVDQ19nZW5lcmF0ZUtleQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDhfdAorRUNDX2dlbmVyYXRlS2V5KHVpbnQzMl90ICpyYW5kU3RyaW5nLCB1aW50MzJfdCAqcHJpdmF0ZUtleSwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVibGljS2V5X3gsIHVpbnQzMl90ICpwdWJsaWNLZXlfeSkKK3sKKyAgcmV0dXJuICh1aW50OF90KWVjY19nZW5lcmF0ZWtleSgodWludDMyX3QqKXJhbmRTdHJpbmcsICh1aW50MzJfdCopcHJpdmF0ZUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QqKXB1YmxpY0tleV94LCAodWludDMyX3QqKXB1YmxpY0tleV95KTsKKworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBFQ0NfRUNEU0Ffc2lnbgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDhfdAorRUNDX0VDRFNBX3NpZ24odWludDMyX3QgKnNlY3JldEtleSwgdWludDMyX3QgKnRleHQsIHVpbnQzMl90ICpyYW5kU3RyaW5nLAorICAgICAgICAgICAgICAgdWludDMyX3QgKnNpZ24xLCB1aW50MzJfdCAqc2lnbjIpCit7CisgIHJldHVybiAodWludDhfdCllY2NfZWNkc2Ffc2lnbigodWludDMyX3QqKXNlY3JldEtleSwgKHVpbnQzMl90Kil0ZXh0LCAodWludDMyX3QqKXJhbmRTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCopc2lnbjEsICh1aW50MzJfdCopc2lnbjIpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBFQ0NfRUNEU0FfdmVyaWZ5CisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitFQ0NfRUNEU0FfdmVyaWZ5KHVpbnQzMl90ICpwdWJsaWNLZXlfeCwgdWludDMyX3QgKnB1YmxpY0tleV95LAorICAgICAgICAgICAgICAgICB1aW50MzJfdCAqdGV4dCwgdWludDMyX3QgKnNpZ24xLCB1aW50MzJfdCAqc2lnbjIpCit7CisgIHJldHVybiAodWludDhfdCllY2NfZWNkc2FfdmVyaWZ5KCh1aW50MzJfdCopcHVibGljS2V5X3gsICh1aW50MzJfdCopcHVibGljS2V5X3ksICh1aW50MzJfdCopdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCopc2lnbjEsICh1aW50MzJfdCopc2lnbjIpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBFQ0NfRUNESF9jb21wdXRlU2hhcmVkU2VjcmV0CisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50OF90CitFQ0NfRUNESF9jb21wdXRlU2hhcmVkU2VjcmV0KHVpbnQzMl90ICpwcml2YXRlS2V5LCB1aW50MzJfdCAqcHVibGljS2V5X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWJsaWNLZXlfeSwgdWludDMyX3QgKnNoYXJlZFNlY3JldF94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc2hhcmVkU2VjcmV0X3kpCit7CisgIHJldHVybiAodWludDhfdCllY2RoX2NvbXB1dGVTaGFyZWRTZWNyZXQoKHVpbnQzMl90Kilwcml2YXRlS2V5LCAodWludDMyX3QqKXB1YmxpY0tleV94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KilwdWJsaWNLZXlfeSwgKHVpbnQzMl90KilzaGFyZWRTZWNyZXRfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCopc2hhcmVkU2VjcmV0X3kpOworfQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qIFNIQS0yNTYgKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3R5cGVkZWYgdWludDhfdCgqc2hhMjU2X2Z1bGxfdCkoU0hBMjU2X21lbW9yeV90ICosIHVpbnQ4X3QgKiwgdWludDhfdCAqLCB1aW50MzJfdCk7CitzaGEyNTZfZnVsbF90IHNoYTI1Nl9ydW5mdWxsYWxnID0gKHNoYTI1Nl9mdWxsX3QpKDB4MTAwMTgxMjkpOworCit0eXBlZGVmIHVpbnQ4X3QoKnNoYTI1Nl9pbml0X3QpKFNIQTI1Nl9tZW1vcnlfdCAqKTsKK3NoYTI1Nl9pbml0X3Qgc2hhMjU2X2luaXRpYWxpemUgPSAoc2hhMjU2X2luaXRfdCkoMHgxMDAxN2ZmZCk7CisKK3R5cGVkZWYgdWludDhfdCgqc2hhMjU2X3Byb2Nlc3NfdCkoU0hBMjU2X21lbW9yeV90ICosIHVpbnQ4X3QgKiwgdWludDMyX3QpOworc2hhMjU2X3Byb2Nlc3NfdCBzaGEyNTZfZXhlY3V0ZSA9IChzaGEyNTZfcHJvY2Vzc190KSgweDEwMDE4MDE5KTsKKwordHlwZWRlZiB1aW50OF90KCpzaGEyNTZfZmluYWxfdCkoU0hBMjU2X21lbW9yeV90ICosIHVpbnQ4X3QgKik7CitzaGEyNTZfZmluYWxfdCBzaGEyNTZfb3V0cHV0ID0gKHNoYTI1Nl9maW5hbF90KSgweDEwMDE4MDg5KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU0hBMjU2X3J1bkZ1bGxBbGdvcml0aG0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQ4X3QKK1NIQTI1Nl9ydW5GdWxsQWxnb3JpdGhtKFNIQTI1Nl9tZW1vcnlfdCAqbWVtb3J5LCB1aW50OF90ICpwQnVmSW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBidWZMZW4sIHVpbnQ4X3QgKnBCdWZPdXQpCit7CisgIHJldHVybiAodWludDhfdClzaGEyNTZfcnVuZnVsbGFsZyhtZW1vcnksIHBCdWZPdXQsIHBCdWZJbiwgYnVmTGVuKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU0hBMjU2X2luaXRpYWxpemUKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQ4X3QKK1NIQTI1Nl9pbml0aWFsaXplKFNIQTI1Nl9tZW1vcnlfdCAqbWVtb3J5KQoreworICByZXR1cm4gKHVpbnQ4X3Qpc2hhMjU2X2luaXRpYWxpemUobWVtb3J5KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU0hBMjU2X2V4ZWN1dGUKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQ4X3QKK1NIQTI1Nl9leGVjdXRlKFNIQTI1Nl9tZW1vcnlfdCAqbWVtb3J5LCB1aW50OF90ICpwQnVmSW4sIHVpbnQzMl90IGJ1ZkxlbikKK3sKKyAgcmV0dXJuICh1aW50OF90KXNoYTI1Nl9leGVjdXRlKG1lbW9yeSxwQnVmSW4sIGJ1Zkxlbik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFNIQTI1Nl9vdXRwdXQKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQ4X3QKK1NIQTI1Nl9vdXRwdXQoU0hBMjU2X21lbW9yeV90ICptZW1vcnksIHVpbnQ4X3QgKnBCdWZPdXQpCit7CisgIHJldHVybiAodWludDhfdClzaGEyNTZfb3V0cHV0KG1lbW9yeSwgcEJ1Zk91dCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb21fY3J5cHRvLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9yb21fY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzN2MzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3JvbV9jcnlwdG8uaApAQCAtMCwwICsxLDM5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJvbV9jcnlwdG8uaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQxNTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBUaGlzIGhlYWRlciBmaWxlIGlzIHRoZSBBUEkgdG8gdGhlIEFFUywgRUNDIGFuZCBTSEEyNTYKKyogICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgYnVpbHQgaW50byBST00gb24gdGhlIENDMjZ4eC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHJvbV9jcnlwdG9fYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgUk9NX0NSWVBUT19ICisjZGVmaW5lIFJPTV9DUllQVE9fSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyogQUVTLTEyOCAqLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBVc2UgYSByYW5kb20gMTI4IGJpdCBrZXkgdG8gZW5jcnlwdCBkYXRhIHdpdGggdGhlIEFFUy4KKyAqCisgKiBccGFyYW0gdGV4dCAgICBQb2ludGVyIHRvIGRhdGEgdG8gZW5jcnlwdC4KKyAqIFxwYXJhbSB0ZXh0TGVuIExlbmd0aCBvZiB0ZXh0LgorICogXHBhcmFtIGFlc0tleSAgUG9pbnRlciB0byAxMjggYml0IGtleSB1c2VkIHRvIGVuY3J5cHQgdGV4dC4KKyAqCisgKiBccmV0dXJuIE5vbmUKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgQUVTX0VDQl9FbmNyeXB0RGF0YSh1aW50OF90ICp0ZXh0LCB1aW50MTZfdCB0ZXh0TGVuLCB1aW50OF90ICphZXNLZXkpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBVc2UgYSByYW5kb20gMTI4IGJpdCBrZXkgdG8gZGVjcnlwdCBkYXRhIHdpdGggdGhlIEFFUy4KKyAqCisgKiBccGFyYW0gdGV4dCAgICBQb2ludGVyIHRvIGRhdGEgdG8gZGVjcnlwdC4KKyAqIFxwYXJhbSB0ZXh0TGVuIExlbmd0aCBvZiB0ZXh0LgorICogXHBhcmFtIGFlc0tleSAgUG9pbnRlciB0byAxMjggYml0IGtleSB1c2VkIHRvIGRlY3J5cHQuIFRoaXMgaXMgdGhlIHNhbWUga2V5CisgKiAgICAgICAgICAgICAgICB0aGF0IHdhcyB1c2VkIHRvIG9yaWdpbmFsbHkgZW5jcnlwdCB0aGlzIGRhdGEuCisgKgorICogXHJldHVybiBOb25lCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIEFFU19FQ0JfRGVjcnlwdERhdGEodWludDhfdCAqdGV4dCwgdWludDE2X3QgdGV4dExlbiwgdWludDhfdCAqYWVzS2V5KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgQXV0aGVudGljYXRlIGFuZCBvcHRpb25hbGx5IGVuY3J5cHQgbWVzc2FnZSBwbGFpblRleHQuCisgKgorICogXHBhcmFtIGVuY3J5cHRGbGFnICBFbmNyeXB0aW9uIGZsYWcuCisgKiAtIHNldCB0byBcYyB0cnVlIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIGVuY3J5cHRpb24uCisgKiAtIHNldCB0byBcYyBmYWxzZSBmb3IgYXV0aGVudGljYXRpb24gb25seS4KKyAqIFxwYXJhbSBNQUNMZW4gICAgICAgTGVuZ3RoIG9mIE1BQyBpbiBieXRlcy4KKyAqIFxwYXJhbSBub25jZSAgICAgICAgUG9pbnRlciB0byByYW5kb20gbm9uY2UuIE5vbmNlIGxlbmd0aCA9IDE1IC0gY2NtTFZhbC4KKyAqIFxwYXJhbSBwbGFpblRleHQgICAgUG9pbnRlciB0byB0ZXh0IHRvIGVuY3J5cHQsIGlucHV0IGFuZCBvdXRwdXQuCisgKiBccGFyYW0gdGV4dExlbiAgICAgIExlbmd0aCBvZiB0ZXh0IHRvIGVuY3J5cHQuCisgKiBccGFyYW0gYWRkRGF0YUJ1ZiAgIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBkYXRhIGZvciBhdXRoZW50aWNhdGlvbgorICogXHBhcmFtIGFkZEJ1ZkxlbiAgICBBZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGJ1ZmZlciBsZW5ndGguCisgKiBccGFyYW0gYWVzS2V5ICAgICAgIFBvaW50ZXIgdG8gdGhlIEFFUyBrZXkgb3Iga2V5IGV4cGFuc2lvbiBidWZmZXIuCisgKiBccGFyYW0gTUFDICAgICAgICAgIFBvaW50ZXIgdG8gMTYgYnl0ZSBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgb3V0cHV0IGJ1ZmZlci4KKyAqIFxwYXJhbSBjY21MVmFsICAgICAgQ0NNIEwgdmFsdWUgdG8gYmUgdXNlZC4gVmFsdWVzIHsyLDN9LgorICoKKyAqIFxyZXR1cm4gWmVybyB3aGVuIHN1Y2Nlc3NmdWwuCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQ4X3QgQUVTX0NDTV9FbmNyeXB0RGF0YSh1aW50OF90IGVuY3J5cHRGbGFnLCB1aW50OF90IE1BQ0xlbiwgdWludDhfdCAqbm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGxhaW5UZXh0LCB1aW50MTZfdCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFkZERhdGFCdWYsIHVpbnQxNl90IGFkZEJ1ZkxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKk1BQywgdWludDhfdCBjY21MVmFsKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgQXV0aGVudGljYXRlIGFuZCBvcHRpb25hbGx5IGRlY3J5cHQgbWVzc2FnZSBjaXBoZXJUZXh0LgorICoKKyAqIFxwYXJhbSBkZWNyeXB0RmxhZyBEZWNyeXB0aW9uIGZsYWcuCisgKiAtIFxjIHRydWUgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggZGVjcnlwdGlvbi4KKyAqIC0gXGMgZmFsc2UgZm9yIGF1dGhlbnRpY2F0aW9uIG9ubHkuCisgKiBccGFyYW0gTUFDTGVuICAgICAgTGVuZ3RoIG9mIE1BQyBpbiBieXRlcy4KKyAqIFxwYXJhbSBub25jZSAgICAgICBQb2ludGVyIHRvIHJhbmRvbSBub25jZS4gTm9uY2UgbGVuZ3RoID0gMTUgLSBjY21MVmFsLgorICogXHBhcmFtIGNpcGhlclRleHQgIFBvaW50ZXIgdG8gdGV4dCB0byBkZWNyeXB0LCBpbnB1dCBhbmQgb3V0cHV0LgorICogXHBhcmFtIHRleHRMZW4gICAgIExlbmd0aCBvZiB0ZXh0IHRvIGRlY3J5cHQuCisgKiBccGFyYW0gYWRkRGF0YUJ1ZiAgUG9pbnRlciB0byBhZGRpdGlvbmFsIGRhdGEgZm9yIGF1dGhlbnRpY2F0aW9uCisgKiBccGFyYW0gYWRkQnVmTGVuICAgQWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBidWZmZXIgbGVuZ3RoLgorICogXHBhcmFtIGFlc0tleSAgICAgIFBvaW50ZXIgdG8gdGhlIEFFUyBrZXkgb3Iga2V5IGV4cGFuc2lvbiBidWZmZXIuCisgKiBccGFyYW0gTUFDICAgICAgICAgUG9pbnRlciB0byAxNiBieXRlIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSBvdXRwdXQgYnVmZmVyLgorICogXHBhcmFtIGNjbUxWYWwgICAgIENDTSBMIHZhbHVlIHRvIGJlIHVzZWQuIFZhbHVlcyB7MiwzfS4KKyAqCisgKiBccmV0dXJuIFplcm8gd2hlbiBTdWNjZXNzZnVsLgorICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50OF90IEFFU19DQ01fRGVjcnlwdERhdGEodWludDhfdCBkZWNyeXB0RmxhZywgdWludDhfdCBNQUNMZW4sIHVpbnQ4X3QgKm5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNpcGhlclRleHQsIHVpbnQxNl90IHRleHRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYWRkRGF0YUJ1ZiwgdWludDE2X3QgYWRkQnVmTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFlc0tleSwgdWludDhfdCAqTUFDLCB1aW50OF90IGNjbUxWYWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBFbmNyeXB0IHBsYWludGV4dCB1c2luZyB0aGUgQUVTIGtleSwgbm9uY2UgYW5kIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAqCisgKiBccGFyYW0gcGxhaW5UZXh0ICBQb2ludGVyIHRvIHRleHQgdG8gZW5jcnlwdC4KKyAqIFxwYXJhbSB0ZXh0TGVuICAgIExlbmd0aCBvZiB0ZXh0LgorICogXHBhcmFtIGFlc0tleSAgICAgUG9pbnRlciB0byAxMjggYml0IGtleSB1c2VkIHRvIGVuY3J5cHQgdGV4dC4KKyAqIFxwYXJhbSBub25jZSAgICAgIFBvaW50ZXIgdG8gNCBieXRlIG5vbmNlLgorICogXHBhcmFtIGluaXRWZWN0b3IgUG9pbnRlciB0byA4IGJ5dGUgcmFuZG9tIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAqCisgKiBccmV0dXJuIE5vbmUKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQ4X3QgQUVTX0NUUl9FbmNyeXB0RGF0YSh1aW50OF90ICpwbGFpblRleHQsIHVpbnQxNl90IHRleHRMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmFlc0tleSwgdWludDhfdCAqbm9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmluaXRWZWN0b3IpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBEZWNyeXB0IGNpcGhlcnRleHQgdXNpbmcgdGhlIEFFUyBrZXksIG5vbmNlIGFuZCBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCisgKgorICogXHBhcmFtIGNpcGhlclRleHQgUG9pbnRlciB0byB0ZXh0IHRvIGRlY3J5cHQKKyAqIFxwYXJhbSB0ZXh0TGVuICAgIExlbmd0aCBvZiB0ZXh0LgorICogXHBhcmFtIGFlc0tleSAgICAgUG9pbnRlciB0byAxMjggYml0IGtleSB1c2VkIHRvIGVuY3J5cHQgdGV4dC4KKyAqIFxwYXJhbSBub25jZSAgICAgIFBvaW50ZXIgdG8gNCBieXRlIG5vbmNlLgorICogXHBhcmFtIGluaXRWZWN0b3IgUG9pbnRlciB0byA4IGJ5dGUgcmFuZG9tIGluaXRpYWxpemF0aW9uIHZlY3Rvci4KKyAqCisgKiBccmV0dXJuIE5vbmUKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQ4X3QgQUVTX0NUUl9EZWNyeXB0RGF0YSh1aW50OF90ICpjaXBoZXJUZXh0LCB1aW50MTZfdCB0ZXh0TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICphZXNLZXksIHVpbnQ4X3QgKm5vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppbml0VmVjdG9yKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vKiBFQ0MgKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyogV2luZG93IHNpemUsIHZhbGlkIHZhbHVlcyBhcmUgMiwzLDQsNS4KKyAqIEhpZ2hlciB0aGUgdmFsdWUsIGZhc3RlciB0aGUgY29tcHV0YXRpb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLgorICoKKyAqIFJlY29tbWVuZGVkIHdvcmt6b25lIHNpemUgKGluIDQtYnl0ZSB3b3JkcykKKyAqIFdpbmRvdyBzaXplOiAzLCBXb3Jrem9uZSBzaXplOiAyNzUKKyAqCisgKi8KKyNkZWZpbmUgRUNDX1dJTkRPV19TSVpFIDMKKworLyoKKyAqIEVDQyBTdXBwb3J0ZWQgQ3VydmVzLCBkZWZpbmUgb25lOgorICogRUNDX1BSSU1FX05JU1QyNTZfQ1VSVkUKKyAqLworI2RlZmluZSBFQ0NfUFJJTUVfTklTVDI1Nl9DVVJWRQorCisvKgorICogRUNDIFJldHVybiBTdGF0dXMgRmxhZ3MuCisgKi8KKy8vIFNjYWxhciBtdWx0aXBsaWNhdGlvbiBzdGF0dXMKKyNkZWZpbmUgRUNDX01PRFVMVVNfRVZFTiAgICAgICAgICAgICAgICAgICAweERDCisjZGVmaW5lIEVDQ19NT0RVTFVTX0xBUkdFUl9USEFOXzI1NV9XT1JEUyAgMHhEMgorI2RlZmluZSBFQ0NfTU9EVUxVU19MRU5HVEhfWkVSTyAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgRUNDX01PRFVMVVNfTVNXX0lTX1pFUk8gICAgICAgICAgICAweDMwCisjZGVmaW5lIEVDQ19TQ0FMQVJfVE9PX0xPTkcgICAgICAgICAgICAgICAgMHgzNQorI2RlZmluZSBFQ0NfU0NBTEFSX0xFTkdUSF9aRVJPICAgICAgICAgICAgIDB4NTMKKyNkZWZpbmUgRUNDX09SREVSX1RPT19MT05HICAgICAgICAgICAgICAgICAweEM2CisjZGVmaW5lIEVDQ19PUkRFUl9MRU5HVEhfWkVSTyAgICAgICAgICAgICAgMHg2QworI2RlZmluZSBFQ0NfWF9DT09SRF9UT09fTE9ORyAgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgRUNDX1hfQ09PUkRfTEVOR1RIX1pFUk8gICAgICAgICAgICAweEMzCisjZGVmaW5lIEVDQ19ZX0NPT1JEX1RPT19MT05HICAgICAgICAgICAgICAgMHg2NQorI2RlZmluZSBFQ0NfWV9DT09SRF9MRU5HVEhfWkVSTyAgICAgICAgICAgIDB4NTYKKyNkZWZpbmUgRUNDX0FfQ09FRl9UT09fTE9ORyAgICAgICAgICAgICAgICAweDVDCisjZGVmaW5lIEVDQ19BX0NPRUZfTEVOR1RIX1pFUk8gICAgICAgICAgICAgMHhDNQorI2RlZmluZSBFQ0NfQkFEX1dJTkRPV19TSVpFICAgICAgICAgICAgICAgIDB4NjYKKyNkZWZpbmUgRUNDX1NDQUxBUl9NVUxfT0sgICAgICAgICAgICAgICAgICAweDk5CisKKy8vIEVDRFNBIGFuZCBFQ0RIIHN0YXR1cworI2RlZmluZSBFQ0NfT1JERVJfTEFSR0VSX1RIQU5fMjU1X1dPUkRTICAgIDB4MjgKKyNkZWZpbmUgRUNDX09SREVSX0VWRU4gICAgICAgICAgICAgICAgICAgICAweDgyCisjZGVmaW5lIEVDQ19PUkRFUl9NU1dfSVNfWkVSTyAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBFQ0NfRUNDX0tFWV9UT09fTE9ORyAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgRUNDX0VDQ19LRVlfTEVOR1RIX1pFUk8gICAgICAgICAgICAweDUyCisjZGVmaW5lIEVDQ19ESUdFU1RfVE9PX0xPTkcgICAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBFQ0NfRElHRVNUX0xFTkdUSF9aRVJPICAgICAgICAgICAgIDB4NzIKKyNkZWZpbmUgRUNDX0VDRFNBX1NJR05fT0sgICAgICAgICAgICAgICAgICAweDMyCisjZGVmaW5lIEVDQ19FQ0RTQV9JTlZBTElEX1NJR05BVFVSRSAgICAgICAgMHg1QQorI2RlZmluZSBFQ0NfRUNEU0FfVkFMSURfU0lHTkFUVVJFICAgICAgICAgIDB4QTUKKyNkZWZpbmUgRUNDX1NJR19QMV9UT09fTE9ORyAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIEVDQ19TSUdfUDFfTEVOR1RIX1pFUk8gICAgICAgICAgICAgMHgxMgorI2RlZmluZSBFQ0NfU0lHX1AyX1RPT19MT05HICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgRUNDX1NJR19QMl9MRU5HVEhfWkVSTyAgICAgICAgICAgICAweDIxCisKKyNkZWZpbmUgRUNDX0VDRFNBX0tFWUdFTl9PSyAgICAgICAgICAgICAgICBFQ0NfU0NBTEFSX01VTF9PSworI2RlZmluZSBFQ0NfRUNESF9LRVlHRU5fT0sgICAgICAgICAgICAgICAgIEVDQ19TQ0FMQVJfTVVMX09LCisjZGVmaW5lIEVDQ19FQ0RIX0NPTU1PTl9LRVlfT0sgICAgICAgICAgICAgRUNDX1NDQUxBUl9NVUxfT0sKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgUGFzcyBwb2ludGVyIHRvIEVDQyBtZW1vcnkgYWxsb2NhdGlvbiB0byBFQ0MgZW5naW5lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBwb2ludCB0aGUgRUNDIHdvcmt6b25lIGF0CisgKiBhIGRpZmZlcmVudCBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFxwYXJhbSBwV29ya3pvbmUgUG9pbnRlciB0byBtZW1vcnkgYWxsb2NhdGVkIGZvciBjb21wdXRhdGlvbnMsIGlucHV0LgorICogICAgICAgICAgICAgICAgICBTZWUgZGVzY3JpcHRpb24gYXQgYmVnaW5uaW5nIG9mIEVDQyBzZWN0aW9uIGZvcgorICogICAgICAgICAgICAgICAgICBtZW1vcnkgcmVxdWlyZW1lbnRzLgorICoKKyAqIFxyZXR1cm4gTm9uZQorICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgZXh0ZXJuIHZvaWQgRUNDX2luaXRpYWxpemUodWludDMyX3QgKnBXb3Jrem9uZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAvKiEKKyAqIFxicmllZiBHZW5lcmF0ZSBhIGtleS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggRUNESCBhbmQgRUNEU0EuCisgKgorICogXHBhcmFtIHJhbmRTdHJpbmcgIFBvaW50ZXIgdG8gcmFuZG9tIHN0cmluZywgaW5wdXQuCisgKiBccGFyYW0gcHJpdmF0ZUtleSAgUG9pbnRlciB0byB0aGUgcHJpdmF0ZSBrZXksIG91dHB1dC4KKyAqIFxwYXJhbSBwdWJsaWNLZXlfeCBQb2ludGVyIHRvIHB1YmxpYyBrZXkgWC1jb29yZGluYXRlLCBvdXRwdXQuCisgKiBccGFyYW0gcHVibGljS2V5X3kgUG9pbnRlciB0byBwdWJsaWMga2V5IFktY29vcmRpbmF0ZSwgb3V0cHV0LgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IEVDQ19nZW5lcmF0ZUtleSh1aW50MzJfdCAqcmFuZFN0cmluZywgdWludDMyX3QgKnByaXZhdGVLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1YmxpY0tleV94LCB1aW50MzJfdCAqcHVibGljS2V5X3kpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBTaWduIGRhdGEuCisgKgorICogXHBhcmFtIHNlY3JldEtleSAgUG9pbnRlciB0byB0aGUgc2VjcmV0IGtleSwgaW5wdXQuCisgKiBccGFyYW0gdGV4dCAgICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlLCBpbnB1dC4KKyAqIFxwYXJhbSByYW5kU3RyaW5nIFBvaW50ZXIgdG8gcmFuZG9tIHN0cmluZywgaW5wdXQuCisgKiBccGFyYW0gc2lnbjEgICAgICBQb2ludGVyIHRvIHNpZ25hdHVyZSBwYXJ0IDEsIG91dHB1dC4KKyAqIFxwYXJhbSBzaWduMiAgICAgIFBvaW50ZXIgdG8gc2lnbmF0dXJlIHBhcnQgMiwgb3V0cHV0LgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IEVDQ19FQ0RTQV9zaWduKHVpbnQzMl90ICpzZWNyZXRLZXksIHVpbnQzMl90ICp0ZXh0LCB1aW50MzJfdCAqcmFuZFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpzaWduMSwgdWludDMyX3QgKnNpZ24yKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgVmVyaWZ5IHNpZ25hdHVyZS4KKyAqCisgKiBccGFyYW0gcHVibGljS2V5X3ggUG9pbnRlciB0byBwdWJsaWMga2V5IFgtY29vcmRpbmF0ZSwgaW5wdXQuCisgKiBccGFyYW0gcHVibGljS2V5X3kgUG9pbnRlciB0byBwdWJsaWMga2V5IFktY29vcmRpbmF0ZSwgaW5wdXQuCisgKiBccGFyYW0gdGV4dCAgICAgICAgUG9pbnRlciB0byBtZXNzYWdlIGRhdGEsIGlucHV0LgorICogXHBhcmFtIHNpZ24xICAgICAgIFBvaW50ZXIgdG8gc2lnbmF0dXJlIHBhcnQgMSwgaW5wdXQuCisgKiBccGFyYW0gc2lnbjIgICAgICAgUG9pbnRlciB0byBzaWduYXR1cmUgcGFydCAyLCBpbnB1dC4KKyAqCisgKiBccmV0dXJuIFN0YXR1cworICovCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDhfdCBFQ0NfRUNEU0FfdmVyaWZ5KHVpbnQzMl90ICpwdWJsaWNLZXlfeCwgdWludDMyX3QgKnB1YmxpY0tleV95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqdGV4dCwgdWludDMyX3QgKnNpZ24xLCB1aW50MzJfdCAqc2lnbjIpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBDb21wdXRlIHRoZSBzaGFyZWQgc2VjcmV0LgorICoKKyAqIFxwYXJhbSBwcml2YXRlS2V5ICAgICBQb2ludGVyIHRvIHByaXZhdGUga2V5LCBpbnB1dC4KKyAqIFxwYXJhbSBwdWJsaWNLZXlfeCAgICBQb2ludGVyIHRvIHB1YmxpYyBrZXkgWC1jb29yZGluYXRlLCBpbnB1dC4KKyAqIFxwYXJhbSBwdWJsaWNLZXlfeSAgICBQb2ludGVyIHRvIHB1YmxpYyBrZXkgWS1jb29yZGluYXRlLCBpbnB1dC4KKyAqIFxwYXJhbSBzaGFyZWRTZWNyZXRfeCBQb2ludGVyIHRvIHNoYXJlZCBzZWNyZXQgWC1jb29yZGluYXRlLCBvdXRwdXQuCisgKiBccGFyYW0gc2hhcmVkU2VjcmV0X3kgUG9pbnRlciB0byBzaGFyZWQgc2VjcmV0IFktY29vcmRpbmF0ZSwgb3V0cHV0LgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IEVDQ19FQ0RIX2NvbXB1dGVTaGFyZWRTZWNyZXQodWludDMyX3QgKnByaXZhdGVLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWJsaWNLZXlfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnB1YmxpY0tleV95LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc2hhcmVkU2VjcmV0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpzaGFyZWRTZWNyZXRfeSk7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8qIFNIQS0yNTYgKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8hIFxicmllZiBBIFNIQTI1Nl9tZW1vcnlfdCB2YXJpYWJsZSBvZiB0aGlzIHR5cGUgbXVzdCBiZSBhbGxvY2F0ZWQgYmVmb3JlIHJ1bm5pbmcgYW55CisvLyEgICAgICAgIFNIQTI1NiBmdW5jdGlvbnMuCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCBzdGF0ZVs4XTsKKyAgdWludDMyX3QgdGV4dExlblsyXTsKKyAgdWludDMyX3QgV1sxNl07Cit9IFNIQTI1Nl9tZW1vcnlfdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyohCisgKiBcYnJpZWYgUGVyZm9ybSBTSEEyNTYgb24gdGhlIHRoZSBpbnB1dCBkYXRhLgorICoKKyAqIFRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlciBjYW4gcG9pbnQgdG8gdGhlIHNhbWUgbWVtb3J5LgorICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBjYWxsaW5nIFxyZWYgU0hBMjU2X2luaXRpYWxpemUoKSwKKyAqIFxyZWYgU0hBMjU2X2V4ZWN1dGUoKSBhbmQgXHJlZiBTSEEyNTZfb3V0cHV0KCkgc2VxdWVudGlhbGx5LgorICoKKyAqIFxwYXJhbSBtZW1vcnkgIFBvaW50ZXIgdG8gbWVtb3J5IGZvciBvcGVyYXRpb25zLCBpbnB1dC4KKyAqIFxwYXJhbSBwQnVmSW4gIFBvaW50ZXIgdG8gaW5wdXQgYnVmZmVyLCBpbnB1dC4KKyAqIFxwYXJhbSBidWZMZW4gIExlbmd0aCBvZiBpbnB1dC4KKyAqIFxwYXJhbSBwQnVmT3V0IFBvaW50ZXIgdG8gb3V0cHV0IGJ1ZmZlciwgb3V0cHV0LgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IFNIQTI1Nl9ydW5GdWxsQWxnb3JpdGhtKFNIQTI1Nl9tZW1vcnlfdCAqbWVtb3J5LCB1aW50OF90ICpwQnVmSW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBidWZMZW4sIHVpbnQ4X3QgKnBCdWZPdXQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBJbnRpYWxpemVzIHRoZSBTSEEyNTYgZW5naW5lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgb25jZSBiZWZvcmUgYWxsIG90aGVyIFNIQTI1NiBmdW5jdGlvbnMgb3RoZXIgdGhhbgorICogXHJlZiBTSEEyNTZfcnVuRnVsbEFsZ29yaXRobSgpLgorICoKKyAqIFxwYXJhbSB3b3JrWm9uZSBQb2ludGVyIHRvIG1lbW9yeSBmb3Igb3BlcmF0aW9ucywgaW5wdXQuCisgKgorICogXHJldHVybiBTdGF0dXMKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQ4X3QgU0hBMjU2X2luaXRpYWxpemUoU0hBMjU2X21lbW9yeV90ICp3b3JrWm9uZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qIQorICogXGJyaWVmIFBlcmZvcm0gU0hBMjU2LgorICoKKyAqIE11c3QgY2FsbCBccmVmIFNIQTI1Nl9vdXRwdXQoKSB0byByZWNlaXZlIG91dHB1dCBmcm9tIHRoaXMgb3BlcmF0aW9uLgorICoKKyAqIFxwYXJhbSBjb25maWcgUG9pbnRlciB0byBtZW1vcnkgZm9yIG9wZXJhdGlvbnMsIGlucHV0LgorICogXHBhcmFtIHBCdWZJbiBQb2ludGVyIHRvIGlucHV0IHRleHQsIGlucHV0LgorICogXHBhcmFtIGJ1ZkxlbiBMZW5ndGggb2YgaW5wdXQsIGlucHV0LgorICoKKyAqIFxyZXR1cm4gU3RhdHVzCisgKi8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50OF90IFNIQTI1Nl9leGVjdXRlKFNIQTI1Nl9tZW1vcnlfdCAqY29uZmlnLCB1aW50OF90ICpwQnVmSW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBidWZMZW4pOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiEKKyAqIFxicmllZiBDb21wbGV0ZSB0aGUgcHJvY2VzcyBieSBwYXNzaW5nIHRoZSBtb2RpZmllZCBkYXRhIGJhY2suCisgKgorICogXHBhcmFtIG1lbW9yeSAgUG9pbnRlciB0byBtZW1vcnkgZm9yIG9wZXJhdGlvbnMsIGlucHV0LgorICogXHBhcmFtIHBCdWZPdXQgUG9pbnRlciB0byBvdXRwdXQgYnVmZmVyLCBvdXRwdXQuIEJ1ZmZlciBtdXN0IGJlIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcuCisgKgorICogXHJldHVybiBTdGF0dXMKKyAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQ4X3QgU0hBMjU2X291dHB1dChTSEEyNTZfbWVtb3J5X3QgKm1lbW9yeSwgdWludDhfdCAqcEJ1Zk91dCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBST01fQ1JZUFRPX0ggKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc2V0dXAuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiNmJiZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NldHVwLmMKQEAgLTAsMCArMSwxMjgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc2V0dXAuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDYtMDMgMTQ6MjM6MjYgKzAyMDAgKEZyaSwgMDMgSnVuIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY1OTMKKyoKKyogIERlc2NyaXB0aW9uOiAgICBTZXR1cCBmaWxlIGZvciBDQzEzeHgvQ0MyNnh4IGRldmljZXMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBIYXJkd2FyZSBoZWFkZXJzCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3NldHVwLmg+CisvLyAjIyMjIyBJTkNMVURFIElOIFJPTSBCRUdJTiAjIyMjIworLy8gV2UgbmVlZCBpbnRyaW5zaWMgZnVuY3Rpb25zIGZvciBJQVIgKGlmIHVzZWQgaW4gc291cmNlIGNvZGUpCisjaWZkZWYgX19JQVJfU1lTVEVNU19JQ0NfXworI2luY2x1ZGUgPGludHJpbnNpY3MuaD4KKyNlbmRpZgorLy8gIyMjIyMgSU5DTFVERSBJTiBST00gRU5EICMjIyMjCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBTZXR1cFRyaW1EZXZpY2UKKyAgICAjZGVmaW5lIFNldHVwVHJpbURldmljZSAgICAgICAgICAgICAgICAgTk9ST01fU2V0dXBUcmltRGV2aWNlCisgICAgI3VuZGVmICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMQorICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEgTk9ST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEKKyAgICAjdW5kZWYgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyCisgICAgI2RlZmluZSBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMiBOT1JPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMgorICAgICN1bmRlZiAgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMKKyAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczIE5PUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbgorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4gICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbgorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4KKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybCAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxICAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEKKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIgICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMgorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbmFieXBhc3NWYWx1ZTEgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMQorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yRGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2UKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlIE5PUk9NX1NldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnICAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvclJhZGNFeHRDZmcKKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0gTk9ST01fU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbQorICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0gTk9ST01fU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JYb3NjSGZDdGwKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkN0bCAgICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmQ3RsCisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JYb3NjSGZGYXN0U3RhcnQKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydCAgTk9ST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0CisgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0KKyAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbworICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbworICAgICN1bmRlZiAgU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZQorICAgICNkZWZpbmUgU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZSAgICBOT1JPTV9TZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlCisgICAgI3VuZGVmICBTZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcKKyAgICAjZGVmaW5lIFNldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZyBOT1JPTV9TZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcKKyAgICAjdW5kZWYgIFNldHVwU2V0QW9uUnRjU3ViU2VjSW5jCisgICAgI2RlZmluZSBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYyAgICAgICAgIE5PUk9NX1NldHVwU2V0QW9uUnRjU3ViU2VjSW5jCisjZW5kaWYKKworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGVmaW5lZCB0aW1lIGRlbGF5IGFzc3VtaW5nIDQ4IE1IeiBjbG9jayBhbmQgcmVzb2x1dGlvbiBvZiAzIGN5Y2xlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgREVMQVlfMjBfVVNFQyAgICAgICAgICAgMHgxNDAKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lZCBDUFUgZGVsYXkgbWFjcm8gd2l0aCBtaWNyb3NlY29uZHMgYXMgaW5wdXQKKy8vIFF1aWNrIGNoZWNrIHNob3dzOiAoVG8gYmUgZnVydGhlciBpbnZlc3RpZ2F0ZWQpCisvLyBBdCA0OCBNSHogUkNPU0MgYW5kIFZJTVMuQ09OVFJPTC5QUkVGRVRDSCA9IDAsIHRoZXJlIGlzIDUgY3ljbGVzCisvLyBBdCA0OCBNSHogUkNPU0MgYW5kIFZJTVMuQ09OVFJPTC5QUkVGRVRDSCA9IDEsIHRoZXJlIGlzIDQgY3ljbGVzCisvLyBBdCAyNCBNSHogUkNPU0MgYW5kIFZJTVMuQ09OVFJPTC5QUkVGRVRDSCA9IDAsIHRoZXJlIGlzIDMgY3ljbGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBDUFVfREVMQVlfTUlDUk9fU0VDT05EUyggeCApIFwKKyAgIENQVWRlbGF5KCgodWludDMyX3QpKCgoIHggKSAqIDQ4LjAgKSAvIDUuMCApKSAtIDEgKQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbnMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZCAgICAgVHJpbUFmdGVyQ29sZFJlc2V0KCB2b2lkICk7CitzdGF0aWMgdm9pZCAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApOworc3RhdGljIHZvaWQgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bldha2V1cEZyb21Qb3dlckRvd24oIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFBlcmZvcm0gdGhlIG5lY2Vzc2FyeSB0cmltIG9mIHRoZSBkZXZpY2Ugd2hpY2ggaXMgbm90IGRvbmUgaW4gYm9vdCBjb2RlCisvLworLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBleGVjdXRlIGNvbWluZyBmcm9tIFJPTSBib290LiBUaGUgY3VycmVudAorLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3QgdGFrZSBzb2Z0IHJlc2V0IGludG8gYWNjb3VudC4gSG93ZXZlciwgaXQgZG9lcyBubworLy8gZGFtYWdlIHRvIGV4ZWN1dGUgaXQgYWdhaW4uIEl0IG9ubHkgY29uc3VtZXMgdGltZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTZXR1cFRyaW1EZXZpY2Uodm9pZCkKK3sKKyAgICB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbjsKKyAgICB1aW50MzJfdCB1aTMyQW9uU3lzUmVzZXRjdGw7CisKKyAgICAvLworICAgIC8vIEdldCBsYXlvdXQgcmV2aXNpb24gb2YgdGhlIGZhY3RvcnkgY29uZmlndXJhdGlvbiBhcmVhCisgICAgLy8gKEhhbmRsZSB1bmRlZmluZWQgcmV2aXNpb24gYXMgcmV2aXNpb24gPSAwKQorICAgIC8vCisgICAgdWkzMkZjZmcxUmV2aXNpb24gPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19GQ0ZHMV9SRVZJU0lPTik7CisgICAgaWYgKCB1aTMyRmNmZzFSZXZpc2lvbiA9PSAweEZGRkZGRkZGICkgeworICAgICAgICB1aTMyRmNmZzFSZXZpc2lvbiA9IDA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBUaGlzIGRyaXZlcmxpYiB2ZXJzaW9uIGFuZCBzZXR1cCBmaWxlIGlzIGZvciBDQzI2eHggUEcyLjIgYW5kIGxhdGVyCisgICAgLy8gSGFsdCBpZiB2aW9sYXRlZAorICAgIC8vCisgICAgVGhpc0NvZGVJc0J1aWx0Rm9yQ0MyNnh4SHdSZXYyMkFuZExhdGVyX0hhbHRJZlZpb2xhdGVkKCk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBzdGFuZGJ5IGluIGZsYXNoIGJhbmsKKyAgICAvLworICAgIEhXUkVHQklUVyggRkxBU0hfQkFTRSArIEZMQVNIX09fQ0ZHLCBGTEFTSF9DRkdfRElTX1NUQU5EQllfQklUTiApID0gMDsKKworICAgIC8vCisgICAgLy8gQ2xvY2sgbXVzdCBhbHdheXMgYmUgZW5hYmxlZCBmb3IgdGhlIHNlbWFwaG9yZSBtb2R1bGUgKGR1ZSB0byBBREkvRERJIEhXIHdvcmthcm91bmQpCisgICAgLy8KKyAgICBIV1JFRyggQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX01PRENMS0VOMSApID0gQVVYX1dVQ19NT0RDTEtFTjFfU01QSDsKKworICAgIC8vCisgICAgLy8gV2FybSByZXNldHMgb24gQ0MyNlhYIGNvbXBsaWNhdGVzIHNvZnR3YXJlIGRlc2lnbiBhcyBtdWNoIG9mIG91ciBzb2Z0d2FyZQorICAgIC8vIGV4cGVjdCB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGRvbmUgZnJvbSBhIGZ1bGwgc3lzdGVtIHJlc2V0LgorICAgIC8vIFRoaXMgaW5jbHVkZXMgUlRDIHNldHVwLCBvc2NpbGxhdG9yIGNvbmZpZ3VyYXRpb24gYW5kIEFVWCBzZXR1cC4KKyAgICAvLyBUbyBlbnN1cmUgYSBmdWxsIHJlc2V0IG9mIHRoZSBkZXZpY2UgaXMgZG9uZSB3aGVuIGN1c3RvbWVycyBnZXQgZS5nLiBhIFdhdGNoZG9nCisgICAgLy8gcmVzZXQsIHRoZSBmb2xsb3dpbmcgaXMgc2V0IGhlcmU6CisgICAgLy8KKyAgICBIV1JFR0JJVFcoIFBSQ01fQkFTRSArIFBSQ01fT19XQVJNUkVTRVQsIFBSQ01fV0FSTVJFU0VUX1dSX1RPX1BJTlJFU0VUX0JJVE4gKSA9IDE7CisKKyAgICAvLworICAgIC8vIFNlbGVjdCBjb3JyZWN0IENBQ0hFIG1vZGUgYW5kIHNldCBjb3JyZWN0IENBQ0hFIGNvbmZpZ3VyYXRpb24KKyAgICAvLworICAgIFNldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZygpOworCisgICAgLy8gMS4gQ2hlY2sgZm9yIHBvd2VyZG93bgorICAgIC8vIDIuIENoZWNrIGZvciBzaHV0ZG93bgorICAgIC8vIDMuIEFzc3VtZSBjb2xkIHJlc2V0IGlmIG5vbmUgb2YgdGhlIGFib3ZlLgorICAgIC8vCisgICAgLy8gSXQgaXMgYWx3YXlzIGFzc3VtZWQgdGhhdCB0aGUgYXBwbGljYXRpb24gd2lsbCBmcmVlemUgdGhlIGxhdGNoZXMgaW4KKyAgICAvLyBBT05fSU9DIHdoZW4gZ29pbmcgdG8gcG93ZXJkb3duIGluIG9yZGVyIHRvIHJldGFpbiB0aGUgdmFsdWVzIG9uIHRoZSBJT3MuCisgICAgLy8KKyAgICAvLyBOQi4gSWYgdGhpcyBiaXQgaXMgbm90IGNsZWFyZWQgYmVmb3JlIHByb2NlZWRpbmcgdG8gcG93ZXJkb3duLCB0aGUgSU9zCisgICAgLy8gICAgIHdpbGwgYWxsIGRlZmF1bHQgdG8gdGhlIHJlc2V0IGNvbmZpZ3VyYXRpb24gd2hlbiByZXN0YXJ0aW5nLgorICAgIGlmKCAhICggSFdSRUdCSVRXKCBBT05fSU9DX0JBU0UgKyBBT05fSU9DX09fSU9DTEFUQ0gsIEFPTl9JT0NfSU9DTEFUQ0hfRU5fQklUTiApKSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE5CLiBUaGlzIHNob3VsZCBiZSBjYWxsaW5nIGEgUk9NIGltcGxlbWVudGF0aW9uIG9mIHJlcXVpcmVkIHRyaW0gYW5kCisgICAgICAgIC8vIGNvbXBlbnNhdGlvbgorICAgICAgICAvLyBlLmcuIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bldha2V1cEZyb21Qb3dlckRvd24oKQorICAgICAgICBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25XYWtldXBGcm9tUG93ZXJEb3duKCk7CisgICAgfQorICAgIC8vIENoZWNrIGZvciBzaHV0ZG93bgorICAgIC8vCisgICAgLy8gV2hlbiBkZXZpY2UgaXMgZ29pbmcgdG8gc2h1dGRvd24gdGhlIGhhcmR3YXJlIHdpbGwgYXV0b21hdGljYWxseSBjbGVhcgorICAgIC8vIHRoZSBTTEVFUERJUyBiaXQgaW4gdGhlIFNMRUVQIHJlZ2lzdGVyIGluIHRoZSBBT05fU1lTQ1RSTDEyIG1vZHVsZS4KKyAgICAvLyBJdCBpcyBsZWZ0IGZvciB0aGUgYXBwbGljYXRpb24gdG8gYXNzZXJ0IHRoaXMgYml0IHdoZW4gd2FraW5nIGJhY2sgdXAsCisgICAgLy8gYnV0IG5vdCBiZWZvcmUgdGhlIGRlc2lyZWQgSU8gY29uZmlndXJhdGlvbiBoYXMgYmVlbiByZS1lc3RhYmxpc2hlZC4KKyAgICBlbHNlIGlmKCAhICggSFdSRUdCSVRXKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fU0xFRVBDVEwsIEFPTl9TWVNDVExfU0xFRVBDVExfSU9fUEFEX1NMRUVQX0RJU19CSVROICkpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTkIuIFRoaXMgc2hvdWxkIGJlIGNhbGxpbmcgYSBST00gaW1wbGVtZW50YXRpb24gb2YgcmVxdWlyZWQgdHJpbSBhbmQKKyAgICAgICAgLy8gY29tcGVuc2F0aW9uCisgICAgICAgIC8vIGUuZy4gVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duKCkgICAgLS0+CisgICAgICAgIC8vICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duV2FrZXVwRnJvbVBvd2VyRG93bigpOworICAgICAgICBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd24odWkzMkZjZmcxUmV2aXNpb24pOworICAgICAgICBUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25XYWtldXBGcm9tUG93ZXJEb3duKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIENvbnNpZGVyIGFkZGluZyBhIGNoZWNrIGZvciBzb2Z0IHJlc2V0IHRvIGFsbG93IGRlYnVnZ2luZyB0byBza2lwCisgICAgICAgIC8vIHRoaXMgc2VjdGlvbiEhIQorICAgICAgICAvLworICAgICAgICAvLyBOQi4gVGhpcyBzaG91bGQgYmUgY2FsbGluZyBhIFJPTSBpbXBsZW1lbnRhdGlvbiBvZiByZXF1aXJlZCB0cmltIGFuZAorICAgICAgICAvLyBjb21wZW5zYXRpb24KKyAgICAgICAgLy8gZS5nLiBUcmltQWZ0ZXJDb2xkUmVzZXQoKSAgIC0tPgorICAgICAgICAvLyAgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bigpICAgIC0tPgorICAgICAgICAvLyAgICAgIFRyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bldha2V1cEZyb21Qb3dlckRvd24oKQorICAgICAgICBUcmltQWZ0ZXJDb2xkUmVzZXQoKTsKKyAgICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duKHVpMzJGY2ZnMVJldmlzaW9uKTsKKyAgICAgICAgVHJpbUFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duV2FrZXVwRnJvbVBvd2VyRG93bigpOworCisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgVklNUyBwb3dlciBkb21haW4gY29udHJvbC4KKyAgICAvLyBQRENUTDFWSU1TID0gMCA9PT4gVklNUyBwb3dlciBkb21haW4gaXMgb25seSBwb3dlcmVkIHdoZW4gQ1BVIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkCisgICAgLy8KKyAgICBIV1JFRyggUFJDTV9CQVNFICsgUFJDTV9PX1BEQ1RMMVZJTVMgKSA9IDA7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSBvcHRpbWFsIHdhaXQgdGltZSBmb3IgZmxhc2ggRlNNIGluIGNhc2VzIHdoZXJlIGZsYXNoIHB1bXAKKyAgICAvLyB3YWtlcyB1cCBmcm9tIHNsZWVwCisgICAgLy8KKyAgICBIV1JFRyhGTEFTSF9CQVNFICsgRkxBU0hfT19GUEFDMSkgPSAoSFdSRUcoRkxBU0hfQkFTRSArIEZMQVNIX09fRlBBQzEpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfkZMQVNIX0ZQQUMxX1BTTEVFUFRESVNfTSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEzOTw8RkxBU0hfRlBBQzFfUFNMRUVQVERJU19TKTsKKworICAgIC8vCisgICAgLy8gQW5kIGZpbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgZmxhc2ggYm9vdCBwcm9jZXNzOgorICAgIC8vIFNFVCBCT09UX0RFVCBiaXRzIGluIEFPTl9TWVNDVEwgdG8gMyBpZiBhbHJlYWR5IGZvdW5kIHRvIGJlIDEKKyAgICAvLyBOb3RlOiBUaGUgQk9PVF9ERVRfeF9DTFIvU0VUIGJpdHMgbXVzdCBiZSBtYW51YWxseSBjbGVhcmVkCisgICAgLy8KKyAgICBpZiAoKCggSFdSRUcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19SRVNFVENUTCApICYKKyAgICAgICAgKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfTSB8IEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9NICkpID4+CisgICAgICAgIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9TICkgPT0gMSApCisgICAgeworICAgICAgICB1aTMyQW9uU3lzUmVzZXRjdGwgPSAoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwgKSAmCisgICAgICAgIH4oIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9DTFJfTSB8IEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9DTFJfTSB8CisgICAgICAgICAgIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9TRVRfTSB8IEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9TRVRfTSApKTsKKyAgICAgICAgSFdSRUcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19SRVNFVENUTCApID0gdWkzMkFvblN5c1Jlc2V0Y3RsIHwgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX1NFVF9NOworICAgICAgICBIV1JFRyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMICkgPSB1aTMyQW9uU3lzUmVzZXRjdGw7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9uZ29pbmcgVklNUyBtb2RlIGNoYW5nZSB3aGVuIGxlYXZpbmcgU2V0dXBUcmltRGV2aWNlKCkKKyAgICAvLyAoVGhlcmUgc2hvdWxkIHR5cGljYWxseSBiZSBubyB3YWl0IHRpbWUgaGVyZSwgYnV0IG5lZWQgdG8gYmUgc3VyZSkKKyAgICAvLworICAgIHdoaWxlICggSFdSRUdCSVRXKCBWSU1TX0JBU0UgKyBWSU1TX09fU1RBVCwgVklNU19TVEFUX01PREVfQ0hBTkdJTkdfQklUTiApKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcgLSB3YWl0IGZvciBhbiBldmVudHVhbCBvbmdvaW5nIG1vZGUgY2hhbmdlIHRvIGNvbXBsZXRlLgorICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHJpbXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbWluZyBmcm9tIFBPV0VSX0RPV04gKGFsc28gY2FsbGVkIHdoZW4KKy8vISBjb21pbmcgZnJvbSBTSFVURE9XTiBhbmQgUElOX1JFU0VUKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitUcmltQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25XYWtldXBGcm9tUG93ZXJEb3duKCB2b2lkICkKK3sKKyAgICAvLworICAgIC8vIEN1cnJlbnRseSBubyBzcGVjaWZpYyB0cmltIGZvciBQb3dlcmRvd24KKyAgICAvLworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUcmltcyB0byBiZSBhcHBsaWVkIHdoZW4gY29taW5nIGZyb20gU0hVVERPV04gKGFsc28gY2FsbGVkIHdoZW4KKy8vISBjb21pbmcgZnJvbSBQSU5fUkVTRVQpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK1RyaW1BZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bih1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbikKK3sKKyAgICB1aW50MzJfdCAgIGNjZmdfTW9kZUNvbmZSZWcgIDsKKyAgICB1aW50MzJfdCAgIG1wMXJldiAgICAgICAgICAgIDsKKworICAgIC8vCisgICAgLy8gRm9yY2UgQVVYIG9uIGFuZCBlbmFibGUgY2xvY2tzCisgICAgLy8KKyAgICAvLyBObyBuZWVkIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwb3dlci9jbG9jayByZWdpc3RlcnMuCisgICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIEFVWCBhbmQgQU9OIHNob3VsZCBoYXZlIGJlZW4gcmVzZXQgdG8gMHgwLgorICAgIC8vCisgICAgSFdSRUcoQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX0FVWENUTCkgPSBBT05fV1VDX0FVWENUTF9BVVhfRk9SQ0VfT047CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIHBvd2VyIG9uIG9uIHRoZSBBVVggZG9tYWluCisgICAgLy8KKyAgICB3aGlsZSggISAoIEhXUkVHQklUVyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1BXUlNUQVQsIEFPTl9XVUNfUFdSU1RBVF9BVVhfUERfT05fQklUTiApKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgY2xvY2tzIGZvciBBVVhfRERJMF9PU0MgYW5kIEFVWF9BREk0CisgICAgLy8KKyAgICBIV1JFRyhBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fTU9EQ0xLRU4wKSA9IEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNDsKKworICAgIC8vCisgICAgLy8gSXQncyBmb3VuZCB0byBiZSBvcHRpbWFsIHRvIG92ZXJyaWRlIHRoZSBGQ0ZHMS4uRENEQ19JUEVBSyBzZXR0aW5nIGFzIGZvbGxvd3M6CisgICAgLy8gaWYgKCBhbHRlcm5hdGl2ZSBEQ0RDIHNldHRpbmcgaW4gQ0NGRyBpcyBlbmFibGVkICkgIEFESTMuLklQRUFLID0gQ0NGRy4uRENEQ19JUEVBSworICAgIC8vIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREkzLi5JUEVBSyA9IDIKKyAgICAvLworICAgIGlmICgoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fU0laRV9BTkRfRElTX0ZMQUdTICkgJiBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORyApID09IDAgKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEFESV8zX1JFRlNZUzpEQ0RDQ1RMNVszXSAgKD1ESVRIRVJfRU4pID0gQ0NGR19NT0RFX0NPTkZfMVsxOV0gICAoPUFMVF9EQ0RDX0RJVEhFUl9FTikKKyAgICAgICAgLy8gQURJXzNfUkVGU1lTOkRDRENDVEw1WzI6MF0oPUlQRUFLICAgICkgPSBDQ0ZHX01PREVfQ09ORl8xWzE4OjE2XSg9QUxUX0RDRENfSVBFQUsgICAgKQorICAgICAgICAvLyBVc2luZyBhIHNpbmdsZSA0LWJpdCBtYXNrZWQgd3JpdGUgc2luY2UgbGF5b3V0IGlzIGVxdWFsIGZvciBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUdCKCBBREkzX0JBU0UgKyBBRElfT19NQVNLNEIgKyAoIEFESV8zX1JFRlNZU19PX0RDRENDVEw1ICogMiApKSA9ICggMHhGMCB8CisgICAgICAgICAgICAoIEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GXzEgKSA+PiBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0lQRUFLX1MgKSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0IoIEFESTNfQkFTRSArIEFESV9PX01BU0s0QiArICggQURJXzNfUkVGU1lTX09fRENEQ0NUTDUgKiAyICkpID0gMHg3MjsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBmb3IgSlRBRyB0byBiZSBwb3dlcmVkIGRvd24gKHdpbGwgc3RpbGwgYmUgcG93ZXJlZCBvbiBpZiBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQpCisgICAgLy8KKyAgICBBT05XVUNKdGFnUG93ZXJPZmYoKTsKKworICAgIC8vCisgICAgLy8gcmVhZCB0aGUgTU9ERV9DT05GIHJlZ2lzdGVyIGluIENDRkcKKyAgICAvLworICAgIGNjZmdfTW9kZUNvbmZSZWcgPSBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX01PREVfQ09ORiApOworCisgICAgLy8KKyAgICAvLyBGaXJzdCBwYXJ0IG9mIHRyaW0gZG9uZSBhZnRlciBjb2xkIHJlc2V0IGFuZCB3YWtldXAgZnJvbSBzaHV0ZG93bjoKKyAgICAvLyAtQWRqdXN0IHRoZSBWRERSX1RSSU1fU0xFRVAgdmFsdWUuCisgICAgLy8gLUNvbmZpZ3VyZSBEQ0RDLgorICAgIC8vCisgICAgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEoIGNjZmdfTW9kZUNvbmZSZWcgKTsKKworICAgIC8vCisgICAgLy8gU2Vjb25kIHBhcnQgb2YgdHJpbSBkb25lIGFmdGVyIGNvbGQgcmVzZXQgYW5kIHdha2V1cCBmcm9tIHNodXRkb3duOgorICAgIC8vIC1Db25maWd1cmUgWE9TQy4KKyAgICAvLworICAgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyKCB1aTMyRmNmZzFSZXZpc2lvbiwgY2NmZ19Nb2RlQ29uZlJlZyApOworCisgICAgLy8KKyAgICAvLyBJbmNyZWFzZWQgbWFyZ2luIGJldHdlZW4gZGlnaXRhbCBzdXBwbHkgdm9sdGFnZSBhbmQgVkREIEJPRCBkdXJpbmcgc3RhbmRieS4KKyAgICAvLyBWVFJJTV9VRElHOiBzaWduZWQgNCBiaXRzIHZhbHVlIHRvIGJlIGluY3JlbWVudGVkIGJ5IDIgKG1heCA9IDcpCisgICAgLy8gVlRSSU1fQk9EOiB1bnNpZ25lZCA0IGJpdHMgdmFsdWUgdG8gYmUgZGVjcmVtZW50ZWQgYnkgMSAobWluID0gMCkKKyAgICAvLyBUaGlzIGFwcGxpZXMgdG8gY2hpcHMgd2l0aCBtcDFyZXYgPCA1NDIgZm9yIGNjMTN4eCBhbmQgZm9yIG1wMXJldiA8IDUyNyBmb3IgY2MyNnh4CisgICAgLy8KKyAgICBtcDFyZXYgPSAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgMHgwMDAwMDMxNCApICYgMHgwMDAwRkZGRiApOworICAgIGlmICggbXAxcmV2IDwgNTI3ICkgeworICAgICAgICB1aW50MzJfdCB2dHJpbV9ib2QgID0gKCggSFdSRUcoIEZDRkcxX0JBU0UgKyAweDAwMDAwMkJDICkgPj4gMjQgKSAmIDB4RiApOyAvLyBiaXRbMjc6MjRdIHVuc2lnbmVkCisgICAgICAgIHVpbnQzMl90IHZ0cmltX3VkaWcgPSAoKCBIV1JFRyggRkNGRzFfQkFTRSArIDB4MDAwMDAyQkMgKSA+PiAxNiApICYgMHhGICk7IC8vIGJpdFsxOToxNl0gc2lnbmVkCisgICAgICAgIGlmICggdnRyaW1fYm9kID4gMCApIHsKKyAgICAgICAgICAgIHZ0cmltX2JvZCAtPSAxOworICAgICAgICB9CisgICAgICAgIGlmICggdnRyaW1fdWRpZyAhPSA3ICkgeworICAgICAgICAgICAgaWYgKCB2dHJpbV91ZGlnID09IDYgKSB7CisgICAgICAgICAgICAgICAgdnRyaW1fdWRpZyA9IDc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZ0cmltX3VkaWcgPSAoKCB2dHJpbV91ZGlnICsgMiApICYgMHhGICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSFdSRUdCKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwwICkgPQorICAgICAgICAgICAgKCB2dHJpbV91ZGlnIDw8IEFESV8yX1JFRlNZU19TT0NMRE9DVEwwX1ZUUklNX1VESUdfUyApIHwKKyAgICAgICAgICAgICggdnRyaW1fYm9kICA8PCBBRElfMl9SRUZTWVNfU09DTERPQ1RMMF9WVFJJTV9CT0RfUyAgKSA7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBUaGlyZCBwYXJ0IG9mIHRyaW0gZG9uZSBhZnRlciBjb2xkIHJlc2V0IGFuZCB3YWtldXAgZnJvbSBzaHV0ZG93bjoKKyAgICAvLyAtQ29uZmlndXJlIEhQT1NDLgorICAgIC8vIC1TZXR1cCB0aGUgTEYgY2xvY2suCisgICAgLy8KKyAgICBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMyggY2NmZ19Nb2RlQ29uZlJlZyApOworCisgICAgLy8KKyAgICAvLyBBbGxvdyBBVVggdG8gcG93ZXIgZG93bgorICAgIC8vCisgICAgQVVYV1VDUG93ZXJDdHJsKCBBVVhfV1VDX1BPV0VSX0RPV04gKTsKKworICAgIC8vCisgICAgLy8gTGVhdmluZyBvbiBBVVggYW5kIGNsb2NrIGZvciBBVVhfRERJMF9PU0Mgb24gYnV0IHR1cm4gb2ZmIGNsb2NrIGZvciBBVVhfQURJNAorICAgIC8vCisgICAgSFdSRUcoIEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19NT0RDTEtFTjAgKSA9IEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQzsKKworICAgIC8vIERpc2FibGUgRUZVU0UgY2xvY2sKKyAgICBIV1JFR0JJVFcoIEZMQVNIX0JBU0UgKyBGTEFTSF9PX0NGRywgRkxBU0hfQ0ZHX0RJU19FRlVTRUNMS19CSVROICkgPSAxOworfQorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFRyaW1zIHRvIGJlIGFwcGxpZWQgd2hlbiBjb21pbmcgZnJvbSBQSU5fUkVTRVQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorVHJpbUFmdGVyQ29sZFJlc2V0KCB2b2lkICkKK3sKKyAgICAvLworICAgIC8vIEN1cnJlbnRseSBubyBzcGVjaWZpYyB0cmltIGZvciBDb2xkIFJlc2V0CisgICAgLy8KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRmlyc3QgcGFydCBvZiBjb25maWd1cmF0aW9uIHJlcXVpcmVkIHdoZW4gd2FraW5nIHVwIGZyb20gc2h1dGRvd24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEoIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKQoreworICAgIGludDMyX3QgICAgaTMyVmRkclNsZWVwVHJpbTsKKyAgICBpbnQzMl90ICAgIGkzMlZkZHJTbGVlcERlbHRhOworCisgICAgeworICAgICAgICBpMzJWZGRyU2xlZXBUcmltID0gU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZSgoCisgICAgICAgICAgICBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fTERPX1RSSU0gKSAmCisgICAgICAgICAgICBGQ0ZHMV9MRE9fVFJJTV9WRERSX1RSSU1fU0xFRVBfTSApID4+CisgICAgICAgICAgICBGQ0ZHMV9MRE9fVFJJTV9WRERSX1RSSU1fU0xFRVBfUyApIDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIEFkanVzdCB0aGUgVkREUl9UUklNX1NMRUVQIHZhbHVlIHdpdGggdmFsdWUgYWRqdXN0YWJsZSBieSBjdXN0b21lciAoQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBKQorICAgIC8vIFJlYWQgYW5kIHNpZ24gZXh0ZW5kIFZkZHJTbGVlcERlbHRhIChpbiByYW5nZSAtOCB0byArNykKKyAgICAvLworICAgIGkzMlZkZHJTbGVlcERlbHRhID0gKCgoKGludDMyX3QpY2NmZ19Nb2RlQ29uZlJlZyApCisgICAgICAgIDw8ICggMzIgLSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfVyAtIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9TICkpCisgICAgICAgID4+ICggMzIgLSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfVyApKTsKKyAgICAvLyBDYWxjdWxhdGUgbmV3IFZERFIgc2xlZXAgdHJpbQorICAgIGkzMlZkZHJTbGVlcFRyaW0gPSAoIGkzMlZkZHJTbGVlcFRyaW0gKyBpMzJWZGRyU2xlZXBEZWx0YSArIDEgKTsKKyAgICBpZiAoIGkzMlZkZHJTbGVlcFRyaW0gPiAgMjEgKSBpMzJWZGRyU2xlZXBUcmltID0gIDIxOworICAgIGlmICggaTMyVmRkclNsZWVwVHJpbSA8IC0xMCApIGkzMlZkZHJTbGVlcFRyaW0gPSAtMTA7CisgICAgLy8gV3JpdGUgYWRqdXN0ZWQgdmFsdWUgdXNpbmcgTUFTS0VEIHdyaXRlIChNQVNLOCkKKyAgICBIV1JFR0goIEFESTNfQkFTRSArIEFESV9PX01BU0s4QiArICggQURJXzNfUkVGU1lTX09fRENEQ0NUTDEgKiAyICkpID0gKCggQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfVFJJTV9TTEVFUF9NIDw8IDggKSB8CisgICAgICAgICgoIGkzMlZkZHJTbGVlcFRyaW0gPDwgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfVFJJTV9TTEVFUF9TICkgJiBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9UUklNX1NMRUVQX00gKSk7CisKKyAgICAvLworICAgIC8vIDEuCisgICAgLy8gRG8gbm90IGFsbG93IERDREMgdG8gYmUgZW5hYmxlZCBpZiBpbiBleHRlcm5hbCByZWd1bGF0b3IgbW9kZS4KKyAgICAvLyBQcmV2ZW50aW5nIHRoaXMgYnkgc2V0dGluZyBib3RoIHRoZSBSRUNIQVJHRSBhbmQgdGhlIEFDVElWRSBiaXRzIGJpdCBpbiB0aGUgQ0NGR19NT0RFX0NPTkYgY29weSByZWdpc3RlciAoY2NmZ19Nb2RlQ29uZlJlZykuCisgICAgLy8KKyAgICAvLyAyLgorICAgIC8vIEFkanVzdGVkIGJhdHRlcnkgbW9uaXRvciBsb3cgbGltaXQgaW4gaW50ZXJuYWwgcmVndWxhdG9yIG1vZGUuCisgICAgLy8gVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9MT1dMSU09MCBpbiBpbnRlcm5hbCByZWd1bGF0b3IgbW9kZS4KKyAgICAvLworICAgIGlmICggSFdSRUcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19QV1JDVEwgKSAmIEFPTl9TWVNDVExfUFdSQ1RMX0VYVF9SRUdfTU9ERSApIHsKKyAgICAgICAgY2NmZ19Nb2RlQ29uZlJlZyB8PSAoIENDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0VfTSB8IENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFX00gKTsKKyAgICB9IGVsc2UgeworICAgICAgICBIV1JFR0JJVFcoIEFPTl9CQVRNT05fQkFTRSArIEFPTl9CQVRNT05fT19GTEFTSFBVTVBQMCwgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9MT1dMSU1fQklUTiApID0gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIHNldCB0aGUgUkVDSEFSR0Ugc291cmNlIGJhc2VkIHVwb24gQ0NGRzpNT0RFX0NPTkY6RENEQ19SRUNIQVJHRQorICAgIC8vIE5vdGU6IEludmVyc2UgcG9sYXJpdHkKKyAgICAvLworICAgIEhXUkVHQklUVyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1BXUkNUTCwgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTl9CSVROICkgPQorICAgICAgICAoKCggY2NmZ19Nb2RlQ29uZlJlZyA+PiBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFX1MgKSAmIDEgKSBeIDEgKTsKKworICAgIC8vCisgICAgLy8gc2V0IHRoZSBBQ1RJVkUgc291cmNlIGJhc2VkIHVwb24gQ0NGRzpNT0RFX0NPTkY6RENEQ19BQ1RJVkUKKyAgICAvLyBOb3RlOiBJbnZlcnNlIHBvbGFyaXR5CisgICAgLy8KKyAgICBIV1JFR0JJVFcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19QV1JDVEwsIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFX0JJVE4gKSA9CisgICAgICAgICgoKCBjY2ZnX01vZGVDb25mUmVnID4+IENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFX1MgKSAmIDEgKSBeIDEgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2Vjb25kIHBhcnQgb2YgY29uZmlndXJhdGlvbiByZXF1aXJlZCB3aGVuIHdha2luZyB1cCBmcm9tIHNodXRkb3duLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiwgdWludDMyX3QgY2NmZ19Nb2RlQ29uZlJlZyApCit7CisgICAgdWludDMyX3QgICB1aTMyVHJpbTsKKworICAgIC8vCisgICAgLy8gRm9sbG93aW5nIHNlcXVlbmNlIGlzIHJlcXVpcmVkIGZvciB1c2luZyBYT1NDSEYsIGlmIG5vdCBpbmNsdWRlZAorICAgIC8vIGRldmljZXMgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBzd2l0Y2ggdG8gWE9TQ0hGLgorICAgIC8vCisgICAgLy8gVHJpbSBDQVAgc2V0dGluZ3MuIEdldCBhbmQgc2V0IHRyaW0gdmFsdWUgZm9yIHRoZSBBTkFCWVBBU1NfVkFMVUUxCisgICAgLy8gcmVnaXN0ZXIKKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMSggY2NmZ19Nb2RlQ29uZlJlZyApOworICAgIERESTMyUmVnV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0FOQUJZUEFTU1ZBTDEsIHVpMzJUcmltKTsKKworICAgIC8vIFRyaW0gUkNPU0NfTEYuIEdldCBhbmQgc2V0IHRyaW0gdmFsdWVzIGZvciB0aGUgUkNPU0NMRl9SVFVORV9UUklNIGFuZAorICAgIC8vIFJDT1NDTEZfQ1RVTkVfVFJJTSBmaWVsZHMgaW4gdGhlIFhPU0NMRl9SQ09TQ0xGX0NUUkwgcmVnaXN0ZXIuCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0oKTsKKyAgICBEREkxNkJpdGZpZWxkV3JpdGUoQVVYX0RESTBfT1NDX0JBU0UsIERESV8wX09TQ19PX0xGT1NDQ1RMLAorICAgICAgICAgICAgICAgICAgICAgICAoRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfQ1RVTkVfVFJJTV9NIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fTSksCisgICAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX0NUVU5FX1RSSU1fUywKKyAgICAgICAgICAgICAgICAgICAgICAgdWkzMlRyaW0pOworCisgICAgLy8gVHJpbSBYT1NDSEYgSUJJQVMgVEhFUk0uIEdldCBhbmQgc2V0IHRyaW0gdmFsdWUgZm9yIHRoZQorICAgIC8vIFhPU0NIRiBJQklBUyBUSEVSTSBiaXQgZmllbGQgaW4gdGhlIEFOQUJZUEFTU19WQUxVRTIgcmVnaXN0ZXIuIE90aGVyCisgICAgLy8gcmVnaXN0ZXIgYml0IGZpZWxkcyBhcmUgc2V0IHRvIDAuCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtKCk7CisgICAgRERJMzJSZWdXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQU5BQllQQVNTVkFMMiwKKyAgICAgICAgICAgICAgICAgIHVpMzJUcmltPDxERElfMF9PU0NfQU5BQllQQVNTVkFMMl9YT1NDX0hGX0lCSUFTVEhFUk1fUyk7CisKKyAgICAvLyBUcmltIEFNUENPTVAgc2V0dGluZ3MgcmVxdWlyZWQgYmVmb3JlIHN3aXRjaCB0byBYT1NDSEYKKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIoKTsKKyAgICBEREkzMlJlZ1dyaXRlKEFVWF9EREkwX09TQ19CQVNFLCBERElfMF9PU0NfT19BTVBDT01QVEgyLCB1aTMyVHJpbSk7CisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxKCk7CisgICAgRERJMzJSZWdXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQU1QQ09NUFRIMSwgdWkzMlRyaW0pOworICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwoIHVpMzJGY2ZnMVJldmlzaW9uICk7CisgICAgRERJMzJSZWdXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fQU1QQ09NUENUTCwgdWkzMlRyaW0pOworCisgICAgLy8KKyAgICAvLyBTZXQgdHJpbSBmb3IgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19TSF9NT0RFX0VOIGluIGFjY29yZGFuY2UgdG8gRkNGRzEgc2V0dGluZworICAgIC8vIFRoaXMgaXMgYml0WzVdIGluIHRoZSBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCByZWdpc3RlcgorICAgIC8vIFVzaW5nIE1BU0s0IHdyaXRlICsgMSA9PiB3cml0aW5nIHRvIGJpdHNbNzo0XQorICAgIC8vCisgICAgdWkzMlRyaW0gPSBTZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbiggdWkzMkZjZmcxUmV2aXNpb24gKTsKKyAgICBIV1JFR0IoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fTUFTSzRCICsgKCBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCAqIDIgKSArIDEgKSA9CisgICAgICAoIDB4MjAgfCAoIHVpMzJUcmltIDw8IDEgKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0cmltIGZvciBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX1NIX1ZCVUZfRU4gaW4gYWNjb3JkYW5jZSB0byBGQ0ZHMSBzZXR0aW5nCisgICAgLy8gVGhpcyBpcyBiaXRbNF0gaW4gdGhlIERESV8wX09TQ19PX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMIHJlZ2lzdGVyCisgICAgLy8gVXNpbmcgTUFTSzQgd3JpdGUgKyAxID0+IHdyaXRpbmcgdG8gYml0c1s3OjRdCisgICAgLy8KKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuKCB1aTMyRmNmZzFSZXZpc2lvbiApOworICAgIEhXUkVHQiggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19NQVNLNEIgKyAoIERESV8wX09TQ19PX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMICogMiApICsgMSApID0KKyAgICAgICggMHgxMCB8ICggdWkzMlRyaW0gKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0cmltIGZvciB0aGUgUEVBS19ERVRfSVRSSU0sIEhQX0JVRl9JVFJJTSBhbmQgTFBfQlVGX0lUUklNIGJpdCBmaWVsZHMKKyAgICAvLyBpbiB0aGUgRERJMF9PU0NfT19YT1NDSEZDVEwgcmVnaXN0ZXIgaW4gYWNjb3JkYW5jZSB0byBGQ0ZHMSBzZXR0aW5nLgorICAgIC8vIFJlbWFpbmluZyByZWdpc3RlciBiaXQgZmllbGRzIGFyZSBzZXQgdG8gdGhlaXIgcmVzZXQgdmFsdWVzIG9mIDAuCisgICAgLy8KKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvclhvc2NIZkN0bCh1aTMyRmNmZzFSZXZpc2lvbik7CisgICAgRERJMzJSZWdXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fWE9TQ0hGQ1RMLCB1aTMyVHJpbSk7CisKKyAgICAvLworICAgIC8vIFNldCB0cmltIGZvciBEQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0UgaW4gYWNjb3JkYW5jZSB0byBGQ0ZHMSBzZXR0aW5nCisgICAgLy8gKFRoaXMgaXMgYml0cyBbMTg6MTddIGluIERESV8wX09TQ19PX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMKQorICAgIC8vIChVc2luZyBNQVNLNCB3cml0ZSArIDQgPT4gd3JpdGluZyB0byBiaXRzWzE5OjE2XSA9PiAoNCo0KSkKKyAgICAvLyAoQXNzdW1pbmc6IERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9EQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0VfUyA9IDE3IGFuZAorICAgIC8vICB0aGF0IERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9EQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0VfTSA9IDB4MDAwNjAwMDApCisgICAgLy8KKyAgICB1aTMyVHJpbSA9IFNldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlKCB1aTMyRmNmZzFSZXZpc2lvbiApOworICAgIEhXUkVHQiggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19NQVNLNEIgKyAoIERESV8wX09TQ19PX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMICogMiApICsgNCApID0KKyAgICAgICggMHg2MCB8ICggdWkzMlRyaW0gPDwgMSApKTsKKworICAgIC8vCisgICAgLy8gVXBkYXRlIERESV8wX09TQ19BVEVTVENUTF9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTSB3aXRoIGRhdGEgZnJvbQorICAgIC8vIEZDRkcxX09TQ19DT05GX0FURVNUTEZfUkNPU0NMRl9JQklBU19UUklNCisgICAgLy8gVGhpcyBpcyBERElfMF9PU0NfT19BVEVTVENUTCBiaXRbN10KKyAgICAvLyAoIERESV8wX09TQ19PX0FURVNUQ1RMIGlzIGN1cnJlbnRseSBoaWRkZW4gKGJ1dD0weDAwMDAwMDIwKSkKKyAgICAvLyBVc2luZyBNQVNLNCB3cml0ZSArIDEgPT4gd3JpdGluZyB0byBiaXRzWzc6NF0KKyAgICAvLworICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbSggdWkzMkZjZmcxUmV2aXNpb24gKTsKKyAgICBIV1JFR0IoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fTUFTSzRCICsgKCAweDAwMDAwMDIwICogMiApICsgMSApID0KKyAgICAgICggMHg4MCB8ICggdWkzMlRyaW0gPDwgMyApKTsKKworICAgIC8vCisgICAgLy8gVXBkYXRlIERESV8wX09TQ19MRk9TQ0NUTF9YT1NDTEZfUkVHVUxBVE9SX1RSSU0gYW5kCisgICAgLy8gICAgICAgIERESV8wX09TQ19MRk9TQ0NUTF9YT1NDTEZfQ01JUlJXUl9SQVRJTyBpbiBvbmUgd3JpdGUKKyAgICAvLyBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHNpbmNlIHRoZSByZWdpc3RlcnMgYXJlIHBhY2tlZCB0b2dldGhlciBpbiB0aGUgc2FtZQorICAgIC8vIG9yZGVyIGJvdGggaW4gRkNGRzEgYW5kIGluIHRoZSBIVyByZWdpc3Rlci4KKyAgICAvLyBUaGlzIHNwYW5zIERESV8wX09TQ19PX0xGT1NDQ1RMIGJpdHNbMjM6MThdCisgICAgLy8gVXNpbmcgTUFTSzggd3JpdGUgKyA0ID0+IHdyaXRpbmcgdG8gYml0c1syMzoxNl0KKyAgICAvLworICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvKCB1aTMyRmNmZzFSZXZpc2lvbiApOworICAgIEhXUkVHSCggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19NQVNLOEIgKyAoIERESV8wX09TQ19PX0xGT1NDQ1RMICogMiApICsgNCApID0KKyAgICAgICggMHhGQzAwIHwgKCB1aTMyVHJpbSA8PCAyICkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdHJpbSB0aGUgSFBNX0lCSUFTX1dBSVRfQ05ULCBMUE1fSUJJQVNfV0FJVF9DTlQgYW5kIElEQUNfU1RFUCBiaXQKKyAgICAvLyBmaWVsZHMgaW4gdGhlIERESTBfT1NDX09fUkFEQ0VYVENGRyByZWdpc3RlciBpbiBhY2NvcmRhbmNlIHRvIEZDRkcxIHNldHRpbmcuCisgICAgLy8gUmVtYWluaW5nIHJlZ2lzdGVyIGJpdCBmaWVsZHMgYXJlIHNldCB0byB0aGVpciByZXNldCB2YWx1ZXMgb2YgMC4KKyAgICAvLworICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZyh1aTMyRmNmZzFSZXZpc2lvbik7CisgICAgRERJMzJSZWdXcml0ZShBVVhfRERJMF9PU0NfQkFTRSwgRERJXzBfT1NDX09fUkFEQ0VYVENGRywgdWkzMlRyaW0pOworCisgICAgLy8gU2V0dGluZyBGT1JDRV9LSUNLU1RBUlRfRU4gKHJlZi4gQ0MyNl9WMV9CVUcwMDI2MSkuIFNob3VsZCBhbHNvIGJlIGRvbmUgZm9yIFBHMgorICAgIC8vIChUaGlzIGlzIGJpdCAyMiBpbiBERElfMF9PU0NfT19DVEwwKQorICAgIEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX1NFVCArIERESV8wX09TQ19PX0NUTDAgKSA9IERESV8wX09TQ19DVEwwX0ZPUkNFX0tJQ0tTVEFSVF9FTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVGhpcmQgcGFydCBvZiBjb25maWd1cmF0aW9uIHJlcXVpcmVkIHdoZW4gd2FraW5nIHVwIGZyb20gc2h1dGRvd24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMoIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKQoreworICAgIHVpbnQzMl90ICAgZmNmZzFPc2NDb25mOworICAgIHVpbnQzMl90ICAgdWkzMlRyaW07CisgICAgdWludDMyX3QgICBjdXJyZW50SGZDbG9jazsKKyAgICB1aW50MzJfdCAgIGNjZmdFeHRMZkNsazsKKworICAgIC8vCisgICAgLy8gRXhhbWluIHRoZSBYT1NDX0ZSRVEgZmllbGQgdG8gc2VsZWN0IDB4MT1IUE9TQywgMHgyPTQ4TUh6IFhPU0MsIDB4Mz0yNE1IeiBYT1NDCisgICAgLy8KKyAgICBzd2l0Y2ggKCggY2NmZ19Nb2RlQ29uZlJlZyAmIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9NICkgPj4gQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX1MgKSB7CisgICAgY2FzZSAyIDoKKyAgICAgICAgLy8gWE9TQyBzb3VyY2UgaXMgYSA0OCBNSHogeHRhbAorICAgICAgICAvLyBEbyBub3RoaW5nIChzaW5jZSB0aGlzIGlzIHRoZSByZXNldCBzZXR0aW5nKQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDEgOgorICAgICAgICAvLyBYT1NDIHNvdXJjZSBpcyBIUE9TQyAodHJpbSB0aGUgSFBPU0MgaWYgdGhpcyBpcyBhIGNoaXAgd2l0aCBIUE9TQywgb3RoZXJ3aXNlIHNraXAgdHJpbW1pbmcgYW5kIGRlZmF1bHQgdG8gMjQgTUh6IFhPU0MpCisKKyAgICAgICAgZmNmZzFPc2NDb25mID0gSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX09TQ19DT05GICk7CisKKyAgICAgICAgaWYgKCggZmNmZzFPc2NDb25mICYgRkNGRzFfT1NDX0NPTkZfSFBPU0NfT1BUSU9OICkgPT0gMCApIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBIUE9TQyBjaGlwLCBhcHBseSBIUE9TQyBzZXR0aW5ncworICAgICAgICAgICAgLy8gU2V0IGJpdCBERElfMF9PU0NfQ1RMMF9IUE9TQ19NT0RFX0VOICh0aGlzIGlzIGJpdCAxNCBpbiBERElfMF9PU0NfT19DVEwwKQorICAgICAgICAgICAgSFdSRUcoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fU0VUICsgRERJXzBfT1NDX09fQ1RMMCApID0gRERJXzBfT1NDX0NUTDBfSFBPU0NfTU9ERV9FTjsKKworICAgICAgICAgICAgLy8gQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9CSUFTX0hPTERfTU9ERV9FTiA9IEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfSE9MRF9NT0RFX0VOICAgKDEgYml0KQorICAgICAgICAgICAgLy8gQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9DVVJSTUlSUl9SQVRJTyAgICA9IEZDRkcxX09TQ19DT05GX0hQT1NDX0NVUlJNSVJSX1JBVElPICAgICAgKDQgYml0cykKKyAgICAgICAgICAgIC8vIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19SRVNfU0VUICAgICAgPSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFU19TRVQgICAgICAgICg0IGJpdHMpCisgICAgICAgICAgICAvLyBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0ZJTFRFUl9FTiAgICAgICAgID0gRkNGRzFfT1NDX0NPTkZfSFBPU0NfRklMVEVSX0VOICAgICAgICAgICAoMSBiaXQpCisgICAgICAgICAgICAvLyBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZID0gRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRUNIQVJHRV9ERUxBWSAoMiBiaXRzKQorICAgICAgICAgICAgLy8gQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9TRVJJRVNfQ0FQICAgICAgICA9IEZDRkcxX09TQ19DT05GX0hQT1NDX1NFUklFU19DQVAgICAgICAgICAgKDIgYml0cykKKyAgICAgICAgICAgIC8vIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1MgICAgICAgPSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19ESVYzX0JZUEFTUyAgICAgICAgICgxIGJpdCkKKworICAgICAgICAgICAgSFdSRUcoIEFESTJfQkFTRSArIEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMiApID0gKCggSFdSRUcoIEFESTJfQkFTRSArIEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMiApICYKKyAgICAgICAgICAgICAgICAgIH4oIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQklBU19IT0xEX01PREVfRU5fTSB8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQ1VSUk1JUlJfUkFUSU9fTSAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8CisgICAgICAgICAgICAgICAgICAgKCgoIGZjZmcxT3NjQ29uZiAmIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfSE9MRF9NT0RFX0VOX00gICApID4+IEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfSE9MRF9NT0RFX0VOX1MgICApIDw8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQklBU19IT0xEX01PREVfRU5fUyAgICkgfAorICAgICAgICAgICAgICAgICAgICgoKCBmY2ZnMU9zY0NvbmYgJiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19DVVJSTUlSUl9SQVRJT19NICAgICAgKSA+PiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19DVVJSTUlSUl9SQVRJT19TICAgICAgKSA8PCBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0NVUlJNSVJSX1JBVElPX1MgICAgICApICAgKTsKKyAgICAgICAgICAgIEhXUkVHKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDEgKSA9ICgoIEhXUkVHKCBBREkyX0JBU0UgKyBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDEgKSAmIH4oIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19SRVNfU0VUX00gKSAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8CisgICAgICAgICAgICAgICAgICAgKCgoIGZjZmcxT3NjQ29uZiAmIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVTX1NFVF9NICAgICAgICApID4+IEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVTX1NFVF9TICAgICAgICApIDw8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19SRVNfU0VUX1MgICAgICAgICkgICApOworICAgICAgICAgICAgSFdSRUcoIEFESTJfQkFTRSArIEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMCApID0gKCggSFdSRUcoIEFESTJfQkFTRSArIEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMCApICYKKyAgICAgICAgICAgICAgICAgIH4oIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRklMVEVSX0VOX00gfCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZX00gfCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1NFUklFU19DQVBfTSB8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1NfTSApKSB8CisgICAgICAgICAgICAgICAgICAgKCgoIGZjZmcxT3NjQ29uZiAmIEZDRkcxX09TQ19DT05GX0hQT1NDX0ZJTFRFUl9FTl9NICAgICAgICAgICApID4+IEZDRkcxX09TQ19DT05GX0hQT1NDX0ZJTFRFUl9FTl9TICAgICAgICAgICApIDw8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRklMVEVSX0VOX1MgICAgICAgICAgICkgfAorICAgICAgICAgICAgICAgICAgICgoKCBmY2ZnMU9zY0NvbmYgJiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFQ0hBUkdFX0RFTEFZX00gKSA+PiBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFQ0hBUkdFX0RFTEFZX1MgKSA8PCBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZX1MgICApIHwKKyAgICAgICAgICAgICAgICAgICAoKCggZmNmZzFPc2NDb25mICYgRkNGRzFfT1NDX0NPTkZfSFBPU0NfU0VSSUVTX0NBUF9NICAgICAgICAgICkgPj4gRkNGRzFfT1NDX0NPTkZfSFBPU0NfU0VSSUVTX0NBUF9TICAgICAgICAgICkgPDwgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9TRVJJRVNfQ0FQX1MgICAgICAgICAgKSB8CisgICAgICAgICAgICAgICAgICAgKCgoIGZjZmcxT3NjQ29uZiAmIEZDRkcxX09TQ19DT05GX0hQT1NDX0RJVjNfQllQQVNTX00gICAgICAgICApID4+IEZDRkcxX09TQ19DT05GX0hQT1NDX0RJVjNfQllQQVNTX1MgICAgICAgICApIDw8IEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1NfUyAgICAgICAgICkgICApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm90IGEgSFBPU0MgY2hpcCAtIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0CisgICAgZGVmYXVsdCA6CisgICAgICAgIC8vIFhPU0Mgc291cmNlIGlzIGEgMjQgTUh6IHh0YWwgKGRlZmF1bHQpCisgICAgICAgIC8vIFNldCBiaXQgRERJXzBfT1NDX0NUTDBfWFRBTF9JU18yNE0gKHRoaXMgaXMgYml0IDMxIGluIERESV8wX09TQ19PX0NUTDApCisgICAgICAgIEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX1NFVCArIERESV8wX09TQ19PX0NUTDAgKSA9IERESV8wX09TQ19DVEwwX1hUQUxfSVNfMjRNOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCBYT1NDX0hGIGluIGJ5cGFzcyBtb2RlIGlmIENDRkcgaXMgY29uZmlndXJlZCBmb3IgZXh0ZXJuYWwgVENYTworICAgIC8vIFBsZWFzZSBub3RlIHRoYXQgaXQgaXMgdXAgdG8gdGhlIGN1c3RvbW1lciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZXh0ZXJuYWwgY2xvY2sgc291cmNlIGlzIHVwIGFuZCBydW5uaW5nIGJlZm9yZSBYT1NDX0hGIGNhbiBiZSB1c2VkLgorICAgIC8vCisgICAgaWYgKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgKSAmIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPICkgPT0gMCApIHsKKyAgICAgICAgSFdSRUcoIEFVWF9EREkwX09TQ19CQVNFICsgRERJX09fU0VUICsgRERJXzBfT1NDX09fWE9TQ0hGQ1RMICkgPSBERElfMF9PU0NfWE9TQ0hGQ1RMX0JZUEFTUzsKKyAgICB9CisKKyAgICAvLyBDbGVhciBERElfMF9PU0NfQ1RMMF9DTEtfTE9TU19FTiAoQ2xvY2tMb3NzRXZlbnRFbmFibGUoKSkuIFRoaXMgaXMgYml0IDkgaW4gRERJXzBfT1NDX09fQ1RMMC4KKyAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBhbHJlYWR5IDAgZXhjZXB0IG9uIExpemFyZCB3aGVyZSBpdCBpcyBzZXQgaW4gUk9NLWJvb3QKKyAgICBIV1JFRyggQVVYX0RESTBfT1NDX0JBU0UgKyBERElfT19DTFIgKyBERElfMF9PU0NfT19DVEwwICkgPSBERElfMF9PU0NfQ1RMMF9DTEtfTE9TU19FTjsKKworICAgIC8vIFNldHRpbmcgRERJXzBfT1NDX0NUTDFfWE9TQ19IRl9GQVNUX1NUQVJUIGFjY29yZGluZyB0byB2YWx1ZSBmb3VuZCBpbiBGQ0ZHMQorICAgIHVpMzJUcmltID0gU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0KCk7CisgICAgSFdSRUdCKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX01BU0s0QiArICggRERJXzBfT1NDX09fQ1RMMSAqIDIgKSkgPSAoIDB4MzAgfCB1aTMyVHJpbSApOworCisgICAgLy8KKyAgICAvLyBzZXR1cCB0aGUgTEYgY2xvY2sgYmFzZWQgdXBvbiBDQ0ZHOk1PREVfQ09ORjpTQ0xLX0xGX09QVElPTgorICAgIC8vCisgICAgc3dpdGNoICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9NICkgPj4gQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUyApIHsKKyAgICBjYXNlIDAgOiAvLyBYT1NDX0hGX0RMRiAoWE9TQ0hGLzE1MzYpIC0+IFNDTEtfTEYgKD0zMTI1MEh6KQorICAgICAgICBPU0NDbG9ja1NvdXJjZVNldCggT1NDX1NSQ19DTEtfTEYsIE9TQ19YT1NDX0hGICk7CisgICAgICAgIFNldHVwU2V0QW9uUnRjU3ViU2VjSW5jKCAweDg2MzdCRCApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDEgOiAvLyBFWFRFUk5BTCBzaWduYWwgLT4gU0NMS19MRiAoZnJlcXVlbmN5PTJeMzgvQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlQpCisgICAgICAgIC8vIFNldCBTQ0xLX0xGIHRvIHVzZSB0aGUgc2FtZSBzb3VyY2UgYXMgU0NMS19IRgorICAgICAgICAvLyBDYW4gYmUgc2ltcGxpZmllZCBhIGJpdCBzaW5jZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGZvciBIRiBtYXRjaGVzIExGIHNldHRpbmdzCisgICAgICAgIGN1cnJlbnRIZkNsb2NrID0gT1NDQ2xvY2tTb3VyY2VHZXQoIE9TQ19TUkNfQ0xLX0hGICk7CisgICAgICAgIE9TQ0Nsb2NrU291cmNlU2V0KCBPU0NfU1JDX0NMS19MRiwgY3VycmVudEhmQ2xvY2sgKTsKKyAgICAgICAgd2hpbGUoIE9TQ0Nsb2NrU291cmNlR2V0KCBPU0NfU1JDX0NMS19MRiApICE9IGN1cnJlbnRIZkNsb2NrICkgeworICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBzd2l0Y2hlZAorICAgICAgICB9CisgICAgICAgIGNjZmdFeHRMZkNsayA9IEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fRVhUX0xGX0NMSyApOworICAgICAgICBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYygoIGNjZmdFeHRMZkNsayAmIENDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UX00gKSA+PiBDQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVF9TICk7CisgICAgICAgIElPQ1BvcnRDb25maWd1cmVTZXQoKCBjY2ZnRXh0TGZDbGsgJiBDQ0ZHX0VYVF9MRl9DTEtfRElPX00gKSA+PiBDQ0ZHX0VYVF9MRl9DTEtfRElPX1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0NfUE9SVF9BT05fQ0xLMzJLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DX1NURF9JTlBVVCB8IElPQ19IWVNUX0VOQUJMRSApOyAgIC8vIFJvdXRlIGV4dGVybmFsIGNsb2NrIHRvIEFPTiBJT0Mgdy9oeXN0ZXJlc2lzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IFhPU0NfTEYgaW4gYnlwYXNzIG1vZGUgdG8gYWxsb3cgZXh0ZXJuYWwgMzJrIGNsb2NrCisgICAgICAgIEhXUkVHKCBBVVhfRERJMF9PU0NfQkFTRSArIERESV9PX1NFVCArIERESV8wX09TQ19PX0NUTDAgKSA9IERESV8wX09TQ19DVEwwX1hPU0NfTEZfRElHX0JZUEFTUzsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNldCBYT1NDX0xGIGFzIFNDTEtfTEYgc291cmNlCisgICAgY2FzZSAyIDogLy8gWE9TQ19MRiAtPiBTTENLX0xGICgzMjc2OCBIeikKKyAgICAgICAgT1NDQ2xvY2tTb3VyY2VTZXQoIE9TQ19TUkNfQ0xLX0xGLCBPU0NfWE9TQ19MRiApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0IDogLy8gKD0zKSBSQ09TQ19MRgorICAgICAgICBPU0NDbG9ja1NvdXJjZVNldCggT1NDX1NSQ19DTEtfTEYsIE9TQ19SQ09TQ19MRiApOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFVwZGF0ZSBBRElfNF9BVVhfQURDUkVGMV9WVFJJTSB3aXRoIHZhbHVlIGZyb20gRkNGRzEKKyAgICAvLworICAgIEhXUkVHQiggQVVYX0FESTRfQkFTRSArIEFESV80X0FVWF9PX0FEQ1JFRjEgKSA9CisgICAgICAoKCggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFQgKSA+PgorICAgICAgRkNGRzFfU09DX0FEQ19SRUZfVFJJTV9BTkRfT0ZGU0VUX0VYVF9TT0NfQURDX1JFRl9WT0xUQUdFX1RSSU1fVEVNUDFfUyApIDw8CisgICAgICBBRElfNF9BVVhfQURDUkVGMV9WVFJJTV9TICkgJgorICAgICAgQURJXzRfQVVYX0FEQ1JFRjFfVlRSSU1fTSApOworCisgICAgLy8KKyAgICAvLyBTZXQgQURJXzRfQVVYOkFEQzAuU01QTF9DWUNMRV9FWFAgdG8gaXQncyBkZWZhdWx0IG1pbmltdW0gdmFsdWUgKD0zKQorICAgIC8vIChOb3RlOiBVc2luZyBNQVNLOEIgcmVxdWlyZXMgdGhhdCB0aGUgYml0cyB0byBiZSBtb2RpZmllZCBtdXN0IGJlIHdpdGhpbiB0aGUgc2FtZQorICAgIC8vICAgICAgICBieXRlIGJvdW5kYXJ5IHdoaWNoIGlzIHRoZSBjYXNlIGZvciB0aGUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFAgZmllbGQpCisgICAgLy8KKyAgICBIV1JFR0goIEFVWF9BREk0X0JBU0UgKyBBRElfT19NQVNLOEIgKyAoIEFESV80X0FVWF9PX0FEQzAgKiAyICkpID0KKyAgICAgICggQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfTSA8PCA4ICkgfCAoIDMgPDwgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfUyApOworCisgICAgLy8KKyAgICAvLyBTeW5jIHdpdGggQU9OCisgICAgLy8KKyAgICBTeXNDdHJsQW9uU3luYygpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBBTkFCWVBBU1NfVkFMVUUxIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMSggdWludDMyX3QgY2NmZ19Nb2RlQ29uZlJlZyApCit7CisgICAgdWludDMyX3QgdWkzMkZjZmcxVmFsdWUgICAgICAgICAgICA7CisgICAgdWludDMyX3QgdWkzMlhvc2NIZlJvdyAgICAgICAgICAgICA7CisgICAgdWludDMyX3QgdWkzMlhvc2NIZkNvbCAgICAgICAgICAgICA7CisgICAgaW50MzJfdCAgaTMyQ3VzdG9tZXJEZWx0YUFkanVzdCAgICA7CisgICAgdWludDMyX3QgdWkzMlRyaW1WYWx1ZSAgICAgICAgICAgICA7CisKKyAgICAvLyBVc2UgZGV2aWNlIHNwZWNpZmljIHRyaW0gdmFsdWVzIGxvY2F0ZWQgaW4gZmFjdG9yeSBjb25maWd1cmF0aW9uCisgICAgLy8gYXJlYSBmb3IgdGhlIFhPU0NfSEZfQ09MVU1OX1ExMiBhbmQgWE9TQ19IRl9ST1dfUTEyIGJpdCBmaWVsZHMgaW4KKyAgICAvLyB0aGUgQU5BQllQQVNTX1ZBTFVFMSByZWdpc3Rlci4gVmFsdWUgZm9yIHRoZSBvdGhlciBiaXQgZmllbGRzCisgICAgLy8gYXJlIHNldCB0byAwLgorCisgICAgdWkzMkZjZmcxVmFsdWUgPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19DT05GSUdfT1NDX1RPUCk7CisgICAgdWkzMlhvc2NIZlJvdyA9ICgoIHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9ST1dfUTEyX00gKSA+PgorICAgICAgICBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9YT1NDX0hGX1JPV19RMTJfUyApOworICAgIHVpMzJYb3NjSGZDb2wgPSAoKCB1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfQ09MVU1OX1ExMl9NICkgPj4KKyAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9DT0xVTU5fUTEyX1MgKTsKKworICAgIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QgPSAwOworICAgIGlmICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0QgKSA9PSAwICkgeworICAgICAgICAvLyBYT1NDX0NBUF9NT0QgPSAwIG1lYW5zOiBDQVBfQVJSQVlfREVMVEEgaXMgaW4gdXNlIC0+IEFwcGx5IGNvbXBlbnNhdGlvbgorICAgICAgICAvLyBYT1NDX0NBUEFSUkFZX0RFTFRBIGlzIGxvY2F0ZWQgaW4gYml0WzE1OjhdIG9mIGNjZmdfTW9kZUNvbmZSZWcKKyAgICAgICAgLy8gTm90ZTogSFdfUkVWX0RFUEVOREVOVF9JTVBMRU1FTlRBVElPTi4gRmllbGQgd2lkdGggaXMgbm90IGdpdmVuIGJ5CisgICAgICAgIC8vIGEgZGVmaW5lIGFuZCBzaWduIGV4dGVuc2lvbiBtdXN0IHRoZXJlZm9yZSBiZSBoYXJkY29kZWQuCisgICAgICAgIC8vICggQSBzbWFsbCB0ZXN0IHByb2dyYW0gaXMgY3JlYXRlZCB2ZXJpZnlpbmcgdGhlIGNvZGUgbGluZXMgYmVsb3c6CisgICAgICAgIC8vICAgUmVmLjogLi5cdGVzdFxzbWFsbF9zdGFuZGFsb25lX3Rlc3RfcHJvZ3JhbXNcQ2FwQXJyYXlEZWx0YUFkanVzdF90ZXN0LmMpCisgICAgICAgIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QgPSAoKGludDMyX3QpY2NmZ19Nb2RlQ29uZlJlZyA8PCAxNiApID4+IDI0OworCisgICAgICAgIHdoaWxlICggaTMyQ3VzdG9tZXJEZWx0YUFkanVzdCA8IDAgKSB7CisgICAgICAgICAgICB1aTMyWG9zY0hmQ29sID4+PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENPTCAxIHN0ZXAgZG93bgorICAgICAgICAgICAgaWYgKCB1aTMyWG9zY0hmQ29sID09IDAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBDT0wgYmVsb3cgbWluaW11bQorICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZDb2wgPSAweEZGRkY7ICAgICAgICAgICAgICAgICAgICAgICAvLyAgIFNldCBDT0wgdG8gbWF4aW11bQorICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZSb3cgPj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIFJPVyAxIHN0ZXAgZG93bgorICAgICAgICAgICAgICAgIGlmICggdWkzMlhvc2NIZlJvdyA9PSAwICkgeyAgICAgICAgICAgICAgICAgICAvLyBpZiBST1cgYmVsb3cgbWluaW11bQorICAgICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZSb3cgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIFNldCBib3RoIFJPVyBhbmQgQ09MCisgICAgICAgICAgICAgICAgICAgdWkzMlhvc2NIZkNvbCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgdG8gbWluaW11bQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QrKzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QgPiAwICkgeworICAgICAgICAgICAgdWkzMlhvc2NIZkNvbCA9ICggdWkzMlhvc2NIZkNvbCA8PCAxICkgfCAxOyAgICAgICAvLyBDT0wgMSBzdGVwIHVwCisgICAgICAgICAgICBpZiAoIHVpMzJYb3NjSGZDb2wgPiAweEZGRkYgKSB7ICAgICAgICAgICAgICAgICAgIC8vIGlmIENPTCBhYm92ZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgdWkzMlhvc2NIZkNvbCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgU2V0IENPTCB0byBtaW5pbXVtCisgICAgICAgICAgICAgICAgdWkzMlhvc2NIZlJvdyA9ICggdWkzMlhvc2NIZlJvdyA8PCAxICkgfCAxOyAgIC8vICAgUk9XIDEgc3RlcCB1cAorICAgICAgICAgICAgICAgIGlmICggdWkzMlhvc2NIZlJvdyA+IDB4RiApIHsgICAgICAgICAgICAgICAgICAvLyBpZiBST1cgYWJvdmUgbWF4aW11bQorICAgICAgICAgICAgICAgICAgIHVpMzJYb3NjSGZSb3cgPSAweEY7ICAgICAgICAgICAgICAgICAgICAgICAvLyAgIFNldCBib3RoIFJPVyBhbmQgQ09MCisgICAgICAgICAgICAgICAgICAgdWkzMlhvc2NIZkNvbCA9IDB4RkZGRjsgICAgICAgICAgICAgICAgICAgIC8vICAgdG8gbWF4aW11bQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkzMkN1c3RvbWVyRGVsdGFBZGp1c3QtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVpMzJUcmltVmFsdWUgPSAoKCB1aTMyWG9zY0hmUm93IDw8IERESV8wX09TQ19BTkFCWVBBU1NWQUwxX1hPU0NfSEZfUk9XX1ExMl9TICAgICkgfAorICAgICAgICAgICAgICAgICAgICAgKCB1aTMyWG9zY0hmQ29sIDw8IERESV8wX09TQ19BTkFCWVBBU1NWQUwxX1hPU0NfSEZfQ09MVU1OX1ExMl9TICkgICApOworCisgICAgcmV0dXJuICh1aTMyVHJpbVZhbHVlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgUkNPU0NMRl9SVFVORV9UUklNIGFuZCB0aGUKKy8vISBSQ09TQ0xGX0NUVU5FX1RSSU0gYml0IGZpZWxkcyBpbiB0aGUgWE9TQ0xGX1JDT1NDTEZfQ1RSTCByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0oIHZvaWQgKQoreworICAgIHVpbnQzMl90IHVpMzJUcmltVmFsdWU7CisKKyAgICAvLyBVc2UgZGV2aWNlIHNwZWNpZmljIHRyaW0gdmFsdWVzIGxvY2F0ZWQgaW4gZmFjdG9yeSBjb25maWd1cmF0aW9uCisgICAgLy8gYXJlYQorICAgIHVpMzJUcmltVmFsdWUgPQorICAgICAgICAoKEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0NPTkZJR19PU0NfVE9QKSAmCisgICAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9DVFVORV9UUklNX00pPj4KKyAgICAgICAgICBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9SQ09TQ0xGX0NUVU5FX1RSSU1fUyk8PAorICAgICAgICAgICAgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfQ1RVTkVfVFJJTV9TOworCisgICAgdWkzMlRyaW1WYWx1ZSB8PQorICAgICAgICAoKEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0NPTkZJR19PU0NfVE9QKSAmCisgICAgICAgICAgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9SVFVORV9UUklNX00pPj4KKyAgICAgICAgICBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9SQ09TQ0xGX1JUVU5FX1RSSU1fUyk8PAorICAgICAgICAgICAgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfUlRVTkVfVFJJTV9TOworCisgICAgcmV0dXJuKHVpMzJUcmltVmFsdWUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBYT1NDX0hGX0lCSUFTVEhFUk0gYml0IGZpZWxkIGluCisvLyEgdGhlIEFOQUJZUEFTU19WQUxVRTIgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybSggdm9pZCApCit7CisgICAgdWludDMyX3QgdWkzMlRyaW1WYWx1ZTsKKworICAgIC8vIFVzZSBkZXZpY2Ugc3BlY2lmaWMgdHJpbSB2YWx1ZSBsb2NhdGVkIGluIGZhY3RvcnkgY29uZmlndXJhdGlvbgorICAgIC8vIGFyZWEKKyAgICB1aTMyVHJpbVZhbHVlID0KKyAgICAgICAgKEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0FOQUJZUEFTU19WQUxVRTIpICYKKyAgICAgICAgIEZDRkcxX0FOQUJZUEFTU19WQUxVRTJfWE9TQ19IRl9JQklBU1RIRVJNX00pPj4KKyAgICAgICAgIEZDRkcxX0FOQUJZUEFTU19WQUxVRTJfWE9TQ19IRl9JQklBU1RIRVJNX1M7CisKKyAgICByZXR1cm4odWkzMlRyaW1WYWx1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIEFNUENPTVBfVEgyIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIoIHZvaWQgKQoreworICAgIHVpbnQzMl90IHVpMzJUcmltVmFsdWU7CisgICAgdWludDMyX3QgdWkzMkZjZmcxVmFsdWU7CisKKyAgICAvLyBVc2UgZGV2aWNlIHNwZWNpZmljIHRyaW0gdmFsdWUgbG9jYXRlZCBpbiBmYWN0b3J5IGNvbmZpZ3VyYXRpb24KKyAgICAvLyBhcmVhLiBBbGwgZGVmaW5lZCByZWdpc3RlciBiaXQgZmllbGRzIGhhdmUgY29ycmVzcG9uZGluZyB0cmltCisgICAgLy8gdmFsdWUgaW4gdGhlIGZhY3RvcnkgY29uZmlndXJhdGlvbiBhcmVhCisgICAgdWkzMkZjZmcxVmFsdWUgPSBIV1JFRyhGQ0ZHMV9CQVNFICsgRkNGRzFfT19BTVBDT01QX1RIMik7CisgICAgdWkzMlRyaW1WYWx1ZSA9ICgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9MVEhfTSk+PgorICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9MVEhfUyk8PAorICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19BTVBDT01QVEgyX0xQTVVQREFURV9MVEhfUzsKKyAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9IVE1fTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDJfTFBNVVBEQVRFX0hUTV9TKTw8CisgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMl9MUE1VUERBVEVfSFRIX1MpOworICAgIHVpMzJUcmltVmFsdWUgfD0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfTFBNX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0xQTV9TKTw8CisgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMl9BRENfQ09NUF9BTVBUSF9MUE1fUyk7CisgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCh1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMl9BRENfQ09NUF9BTVBUSF9IUE1fTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfSFBNX1MpPDwKKyAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19BTVBDT01QVEgyX0FEQ19DT01QX0FNUFRIX0hQTV9TKTsKKworICAgIHJldHVybih1aTMyVHJpbVZhbHVlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgQU1QQ09NUF9USDEgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMSggdm9pZCApCit7CisgICAgdWludDMyX3QgdWkzMlRyaW1WYWx1ZTsKKyAgICB1aW50MzJfdCB1aTMyRmNmZzFWYWx1ZTsKKworICAgIC8vIFVzZSBkZXZpY2Ugc3BlY2lmaWMgdHJpbSB2YWx1ZXMgbG9jYXRlZCBpbiBmYWN0b3J5IGNvbmZpZ3VyYXRpb24KKyAgICAvLyBhcmVhLiBBbGwgZGVmaW5lZCByZWdpc3RlciBiaXQgZmllbGRzIGhhdmUgYSBjb3JyZXNwb25kaW5nIHRyaW0KKyAgICAvLyB2YWx1ZSBpbiB0aGUgZmFjdG9yeSBjb25maWd1cmF0aW9uIGFyZWEKKyAgICB1aTMyRmNmZzFWYWx1ZSA9IEhXUkVHKEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0FNUENPTVBfVEgxKTsKKyAgICB1aTMyVHJpbVZhbHVlID0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfTFRIX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0xUSF9TKTw8CisgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19MVEhfUyk7CisgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCh1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QM19IVEhfTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfSFRIX1MpPDwKKyAgICAgICAgICAgICAgICAgICAgIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0hUSF9TKTsKKyAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfVEgxX0lCSUFTQ0FQX0xQVE9IUF9PTF9DTlRfTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDFfSUJJQVNDQVBfTFBUT0hQX09MX0NOVF9TKTw8CisgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUFRIMV9JQklBU0NBUF9MUFRPSFBfT0xfQ05UX1MpOworICAgIHVpMzJUcmltVmFsdWUgfD0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDFfVEhfTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDFfVEhfUyk8PAorICAgICAgICAgICAgICAgICAgICAgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDFfVEhfUyk7CisKKyAgICByZXR1cm4odWkzMlRyaW1WYWx1ZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIEFNUENPTVBfQ1RSTCByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybCggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKQoreworICAgIHVpbnQzMl90IHVpMzJUcmltVmFsdWUgICAgOworICAgIHVpbnQzMl90IHVpMzJGY2ZnMVZhbHVlICAgOworICAgIHVpbnQzMl90IGliaWFzT2Zmc2V0ICAgICAgOworICAgIHVpbnQzMl90IGliaWFzSW5pdCAgICAgICAgOworICAgIHVpbnQzMl90IG1vZGVDb25mMSAgICAgICAgOworICAgIGludDMyX3QgIGRlbHRhQWRqdXN0ICAgICAgOworCisgICAgLy8gVXNlIGRldmljZSBzcGVjaWZpYyB0cmltIHZhbHVlcyBsb2NhdGVkIGluIGZhY3RvcnkgY29uZmlndXJhdGlvbgorICAgIC8vIGFyZWEuIFJlZ2lzdGVyIGJpdCBmaWVsZHMgd2l0aG91dCB0cmltIHZhbHVlcyBpbiB0aGUgZmFjdG9yeQorICAgIC8vIGNvbmZpZ3VyYXRpb24gYXJlYSB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgMC4KKyAgICB1aTMyRmNmZzFWYWx1ZSA9IEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19BTVBDT01QX0NUUkwxICk7CisKKyAgICBpYmlhc09mZnNldCAgICA9ICggdWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTX09GRlNFVF9NICkgPj4KKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19PRkZTRVRfUyA7CisgICAgaWJpYXNJbml0ICAgICAgPSAoIHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19JTklUX00gKSA+PgorICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTX0lOSVRfUyA7CisKKyAgICBpZiAoKCBIV1JFRyggQ0NGR19CQVNFICsgQ0NGR19PX1NJWkVfQU5EX0RJU19GTEFHUyApICYgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSX00gKSA9PSAwICkgeworICAgICAgICAvLyBBZGp1c3Qgd2l0aCBERUxUQV9JQklBU19PRkZTRVQgYW5kIERFTFRBX0lCSUFTX0lOSVQgZnJvbSBDQ0ZHCisgICAgICAgIG1vZGVDb25mMSAgID0gSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19NT0RFX0NPTkZfMSApOworCisgICAgICAgIC8vIEJvdGggZmllbGRzIGFyZSBzaWduZWQgNC1iaXQgdmFsdWVzLiBUaGlzIGlzIGFuIGFzc3VtcHRpb24gd2hlbiBkb2luZyB0aGUgc2lnbiBleHRlbnNpb24uCisgICAgICAgIGRlbHRhQWRqdXN0ID0gKChpbnQzMl90KW1vZGVDb25mMSA8PCAoIDMyIC0gQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVRfUyAtIDQgKSkgPj4gMjg7CisgICAgICAgIGRlbHRhQWRqdXN0ICs9IChpbnQzMl90KWliaWFzT2Zmc2V0OworICAgICAgICBpZiAoIGRlbHRhQWRqdXN0IDwgMCApIHsKKyAgICAgICAgICAgZGVsdGFBZGp1c3QgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICggZGVsdGFBZGp1c3QgPiAoIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX09GRlNFVF9NID4+IERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX09GRlNFVF9TICkpIHsKKyAgICAgICAgICAgIGRlbHRhQWRqdXN0ICA9ICggRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfT0ZGU0VUX00gPj4gRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfT0ZGU0VUX1MgKTsKKyAgICAgICAgfQorICAgICAgICBpYmlhc09mZnNldCA9ICh1aW50MzJfdClkZWx0YUFkanVzdDsKKworICAgICAgICBkZWx0YUFkanVzdCA9ICgoaW50MzJfdCltb2RlQ29uZjEgPDwgKCAzMiAtIENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVF9TIC0gNCApKSA+PiAyODsKKyAgICAgICAgZGVsdGFBZGp1c3QgKz0gKGludDMyX3QpaWJpYXNJbml0OworICAgICAgICBpZiAoIGRlbHRhQWRqdXN0IDwgMCApIHsKKyAgICAgICAgICAgZGVsdGFBZGp1c3QgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICggZGVsdGFBZGp1c3QgPiAoIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX0lOSVRfTSA+PiBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19JTklUX1MgKSkgeworICAgICAgICAgICAgZGVsdGFBZGp1c3QgID0gKCBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19JTklUX00gPj4gRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfSU5JVF9TICk7CisgICAgICAgIH0KKyAgICAgICAgaWJpYXNJbml0ID0gKHVpbnQzMl90KWRlbHRhQWRqdXN0OworICAgIH0KKyAgICB1aTMyVHJpbVZhbHVlID0gKCBpYmlhc09mZnNldCA8PCBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19PRkZTRVRfUyApIHwKKyAgICAgICAgICAgICAgICAgICAgKCBpYmlhc0luaXQgICA8PCBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19JTklUX1MgICApIDsKKworICAgIHVpMzJUcmltVmFsdWUgfD0gKCgodWkzMkZjZmcxVmFsdWUgJgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfTSk+PgorICAgICAgICAgICAgICAgICAgICAgICAgRkNGRzFfQU1QQ09NUF9DVFJMMV9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfUyk8PAorICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUENUTF9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfUyk7CisgICAgdWkzMlRyaW1WYWx1ZSB8PSAoKCh1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0NBUF9TVEVQX00pPj4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfQ1RSTDFfQ0FQX1NURVBfUyk8PAorICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUENUTF9DQVBfU1RFUF9TKTsKKyAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKHVpMzJGY2ZnMVZhbHVlICYKKyAgICAgICAgICAgICAgICAgICAgICAgIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNDQVBfSFBUT0xQX09MX0NOVF9NKT4+CisgICAgICAgICAgICAgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTQ0FQX0hQVE9MUF9PTF9DTlRfUyk8PAorICAgICAgICAgICAgICAgICAgICAgICBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU0NBUF9IUFRPTFBfT0xfQ05UX1MpOworCisgICAgaWYgKCB1aTMyRmNmZzFSZXZpc2lvbiA+PSAweDAwMDAwMDIyICkgeworICAgICAgICB1aTMyVHJpbVZhbHVlIHw9ICgoKCB1aTMyRmNmZzFWYWx1ZSAmCisgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0FNUENPTVBfUkVRX01PREVfTSApID4+CisgICAgICAgICAgICBGQ0ZHMV9BTVBDT01QX0NUUkwxX0FNUENPTVBfUkVRX01PREVfUyApIDw8CisgICAgICAgICAgIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfUkVRX01PREVfUyApOworICAgIH0KKworICAgIHJldHVybih1aTMyVHJpbVZhbHVlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSBmcm9tIEZDRkcxIHRvIGJlIHVzZWQgYXMgREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFIHNldHRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApCit7CisgICB1aW50MzJfdCBkYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZVZhbHVlID0gMDsgLy8gUmVzZXQgdmFsdWUKKworICAgaWYgKCB1aTMyRmNmZzFSZXZpc2lvbiA+PSAweDAwMDAwMDIwICkgeworICAgICAgZGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2VWYWx1ZSA9ICggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX01JU0NfT1RQX0RBVEFfMSApICYKKyAgICAgICAgIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9EQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0VfTSApID4+CisgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFX1M7CisgICB9CisKKyAgIHJldHVybiAoIGRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlVmFsdWUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSBmcm9tIEZDRkcxIHRvIGJlIHVzZWQgYXMgQURDX1NIX01PREVfRU4gc2V0dGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICkKK3sKKyAgIHVpbnQzMl90IGdldFRyaW1Gb3JBZGNTaE1vZGVFblZhbHVlID0gMTsgLy8gUmVjb21tZW5kZWQgZGVmYXVsdCBzZXR0aW5nCisKKyAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMiApIHsKKyAgICAgIGdldFRyaW1Gb3JBZGNTaE1vZGVFblZhbHVlID0gKCBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fT1NDX0NPTkYgKSAmCisgICAgICAgICBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfTU9ERV9FTl9NICkgPj4KKyAgICAgICAgIEZDRkcxX09TQ19DT05GX0FEQ19TSF9NT0RFX0VOX1M7CisgICB9CisKKyAgIHJldHVybiAoIGdldFRyaW1Gb3JBZGNTaE1vZGVFblZhbHVlICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgZnJvbSBGQ0ZHMSB0byBiZSB1c2VkIGFzIEFEQ19TSF9WQlVGX0VOIHNldHRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApCit7CisgICB1aW50MzJfdCBnZXRUcmltRm9yQWRjU2hWYnVmRW5WYWx1ZSA9IDE7IC8vIFJlY29tbWVuZGVkIGRlZmF1bHQgc2V0dGluZworCisgICBpZiAoIHVpMzJGY2ZnMVJldmlzaW9uID49IDB4MDAwMDAwMjIgKSB7CisgICAgICBnZXRUcmltRm9yQWRjU2hWYnVmRW5WYWx1ZSA9ICggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX09TQ19DT05GICkgJgorICAgICAgICAgRkNGRzFfT1NDX0NPTkZfQURDX1NIX1ZCVUZfRU5fTSApID4+CisgICAgICAgICBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfVkJVRl9FTl9TOworICAgfQorCisgICByZXR1cm4gKCBnZXRUcmltRm9yQWRjU2hWYnVmRW5WYWx1ZSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBYT1NDSEZDVEwgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yWG9zY0hmQ3RsKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApCit7CisgICB1aW50MzJfdCBnZXRUcmltRm9yWG9zY2hmQ3RsVmFsdWUgPSAwOyAvLyBSZWNvbW1lbmRlZCBkZWZhdWx0IHNldHRpbmcKKyAgIHVpbnQzMl90IGZjZmcxRGF0YTsKKworICAgaWYgKCB1aTMyRmNmZzFSZXZpc2lvbiA+PSAweDAwMDAwMDIwICkgeworICAgICAgZmNmZzFEYXRhID0gSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX01JU0NfT1RQX0RBVEFfMSApOworICAgICAgZ2V0VHJpbUZvclhvc2NoZkN0bFZhbHVlID0KKyAgICAgICAgICggKCAoIGZjZmcxRGF0YSAmIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9QRUFLX0RFVF9JVFJJTV9NICkgPj4KKyAgICAgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfUEVBS19ERVRfSVRSSU1fUyApIDw8CisgICAgICAgICAgIERESV8wX09TQ19YT1NDSEZDVExfUEVBS19ERVRfSVRSSU1fUyk7CisKKyAgICAgIGdldFRyaW1Gb3JYb3NjaGZDdGxWYWx1ZSB8PQorICAgICAgICAgKCAoICggZmNmZzFEYXRhICYgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQX0JVRl9JVFJJTV9NICkgPj4KKyAgICAgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSFBfQlVGX0lUUklNX1MgKSA8PAorICAgICAgICAgICBERElfMF9PU0NfWE9TQ0hGQ1RMX0hQX0JVRl9JVFJJTV9TKTsKKworICAgICAgZ2V0VHJpbUZvclhvc2NoZkN0bFZhbHVlIHw9CisgICAgICAgICAoICggKCBmY2ZnMURhdGEgJiBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBfQlVGX0lUUklNX00gKSA+PgorICAgICAgICAgICAgIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUF9CVUZfSVRSSU1fUyApIDw8CisgICAgICAgICAgIERESV8wX09TQ19YT1NDSEZDVExfTFBfQlVGX0lUUklNX1MpOworICAgfQorCisgICByZXR1cm4gKCBnZXRUcmltRm9yWG9zY2hmQ3RsVmFsdWUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGFzIE9TQ19ESUc6Q1RMMS5YT1NDX0hGX0ZBU1RfU1RBUlQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1NldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydCggdm9pZCApCit7CisgICB1aW50MzJfdCB1aTMyWG9zY0hmRmFzdFN0YXJ0VmFsdWUgICA7CisKKyAgIC8vIEdldCB2YWx1ZSBmcm9tIEZDRkcxCisgICB1aTMyWG9zY0hmRmFzdFN0YXJ0VmFsdWUgPSAoIEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19PU0NfQ09ORiApICYKKyAgICAgIEZDRkcxX09TQ19DT05GX1hPU0NfSEZfRkFTVF9TVEFSVF9NICkgPj4KKyAgICAgIEZDRkcxX09TQ19DT05GX1hPU0NfSEZfRkFTVF9TVEFSVF9TOworCisgICByZXR1cm4gKCB1aTMyWG9zY0hmRmFzdFN0YXJ0VmFsdWUgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgUkFEQ0VYVENGRyByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApCit7CisgICB1aW50MzJfdCBnZXRUcmltRm9yUmFkY0V4dENmZ1ZhbHVlID0gMHg0MDNGODAwMDsgLy8gUmVjb21tZW5kZWQgZGVmYXVsdCBzZXR0aW5nCisgICB1aW50MzJfdCBmY2ZnMURhdGE7CisKKyAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMCApIHsKKyAgICAgIGZjZmcxRGF0YSA9IEhXUkVHKCBGQ0ZHMV9CQVNFICsgRkNGRzFfT19NSVNDX09UUF9EQVRBXzEgKTsKKyAgICAgIGdldFRyaW1Gb3JSYWRjRXh0Q2ZnVmFsdWUgPQorICAgICAgICAgKCAoICggZmNmZzFEYXRhICYgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQTV9JQklBU19XQUlUX0NOVF9NICkgPj4KKyAgICAgICAgICAgICBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSFBNX0lCSUFTX1dBSVRfQ05UX1MgKSA8PAorICAgICAgICAgICBERElfMF9PU0NfUkFEQ0VYVENGR19IUE1fSUJJQVNfV0FJVF9DTlRfUyk7CisKKyAgICAgIGdldFRyaW1Gb3JSYWRjRXh0Q2ZnVmFsdWUgfD0KKyAgICAgICAgICggKCAoIGZjZmcxRGF0YSAmIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUE1fSUJJQVNfV0FJVF9DTlRfTSApID4+CisgICAgICAgICAgICAgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0xQTV9JQklBU19XQUlUX0NOVF9TICkgPDwKKyAgICAgICAgICAgRERJXzBfT1NDX1JBRENFWFRDRkdfTFBNX0lCSUFTX1dBSVRfQ05UX1MpOworCisgICAgICBnZXRUcmltRm9yUmFkY0V4dENmZ1ZhbHVlIHw9CisgICAgICAgICAoICggKCBmY2ZnMURhdGEgJiBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSURBQ19TVEVQX00gKSA+PgorICAgICAgICAgICAgIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9JREFDX1NURVBfUyApIDw8CisgICAgICAgICAgIERESV8wX09TQ19SQURDRVhUQ0ZHX0lEQUNfU1RFUF9TKTsKKyAgIH0KKworICAgcmV0dXJuICggZ2V0VHJpbUZvclJhZGNFeHRDZmdWYWx1ZSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSBGQ0ZHMSBPU0NfQ09ORl9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAorU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbSggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKQoreworICAgdWludDMyX3QgdHJpbUZvclJjT3NjTGZJQmlhc1RyaW1WYWx1ZSA9IDA7IC8vIERlZmF1bHQgdmFsdWUKKworICAgaWYgKCB1aTMyRmNmZzFSZXZpc2lvbiA+PSAweDAwMDAwMDIyICkgeworICAgICAgdHJpbUZvclJjT3NjTGZJQmlhc1RyaW1WYWx1ZSA9ICggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX09TQ19DT05GICkgJgorICAgICAgICAgRkNGRzFfT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU1fTSApID4+CisgICAgICAgICBGQ0ZHMV9PU0NfQ09ORl9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTV9TIDsKKyAgIH0KKworICAgcmV0dXJuICggdHJpbUZvclJjT3NjTGZJQmlhc1RyaW1WYWx1ZSApOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIFhPU0NMRl9SRUdVTEFUT1JfVFJJTSBhbmQgWE9TQ0xGX0NNSVJSV1JfUkFUSU8gYXMgb25lIHBhY2tldAorLy8hIHNwYW5uaW5nIGJpdHMgWzU6MF0gaW4gdGhlIHJldHVybmVkIHZhbHVlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitTZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICkKK3sKKyAgIHVpbnQzMl90IHRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW9WYWx1ZSA9IDA7IC8vIERlZmF1bHQgdmFsdWUgZm9yIGJvdGggZmllbGRzCisKKyAgIGlmICggdWkzMkZjZmcxUmV2aXNpb24gPj0gMHgwMDAwMDAyMiApIHsKKyAgICAgIHRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW9WYWx1ZSA9ICggSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX09TQ19DT05GICkgJgorICAgICAgICAgKCBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfUkVHVUxBVE9SX1RSSU1fTSB8CisgICAgICAgICAgIEZDRkcxX09TQ19DT05GX1hPU0NMRl9DTUlSUldSX1JBVElPX00gICkpID4+CisgICAgICAgICAgIEZDRkcxX09TQ19DT05GX1hPU0NMRl9DTUlSUldSX1JBVElPX1MgIDsKKyAgIH0KKworICAgcmV0dXJuICggdHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpb1ZhbHVlICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNpZ24gZXh0ZW5kIHRoZSBWRERSX1RSSU0gc2V0dGluZyAoc3BlY2lhbCBmb3JtYXQgcmFuZ2luZyBmcm9tIC0xMCB0byArMjEpCisvLyEKKy8vISBccmV0dXJuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZSggdWludDMyX3QgdWkzMlZkZHJUcmltVmFsICkKK3sKKyAgICAvLworICAgIC8vIFRoZSBWRERSIHRyaW0gdmFsdWUgaXMgNSBiaXRzIHJlcHJlc2VudGluZyB0aGUgcmFuZ2UgZnJvbSAtMTAgdG8gKzIxCisgICAgLy8gKHdoZXJlIC0xMD0weDE2LCAtMT0weDFGLCAwPTB4MDAsIDE9MHgwMSBhbmQgKzIxPTB4MTUpCisgICAgLy8KKyAgICBpbnQzMl90IGkzMlNpZ25lZFZkZHJWYWwgPSB1aTMyVmRkclRyaW1WYWw7CisgICAgaWYgKCBpMzJTaWduZWRWZGRyVmFsID4gMHgxNSApIHsKKyAgICAgICAgaTMyU2lnbmVkVmRkclZhbCAtPSAweDIwOworICAgIH0KKyAgICByZXR1cm4gKCBpMzJTaWduZWRWZGRyVmFsICk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBjb3JyZWN0IFZJTVNfTU9ERSBhY2NvcmRpbmcgdG8gQ0NGRyBzZXR0aW5nIChDQUNIRSBvciBHUFJBTSkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZyggdm9pZCApCit7CisgICAgLy8KKyAgICAvLyAtIE1ha2Ugc3VyZSB0byBlbmFibGUgYWdncmVzc2l2ZSBWSU1TIGNsb2NrIGdhdGluZyBmb3IgcG93ZXIgb3B0aW1pemF0aW9uCisgICAgLy8gICBPbmx5IGZvciBQRzIgZGV2aWNlcy4KKyAgICAvLyAtIEVuYWJsZSBjYWNoZSBwcmVmZXRjaCBlbmFibGUgYXMgZGVmYXVsdCBzZXR0aW5nCisgICAgLy8gICAoU2xpZ2h0bHkgaGlnaGVyIHBvd2VyIGNvbnN1bXB0aW9uLCBidXQgaGlnaGVyIENQVSBwZXJmb3JtYW5jZSkKKyAgICAvLyAtIElGICggQ0NGR18uLi5fRElTX0dQUkFNID09IDEgKQorICAgIC8vICAgdGhlbjogRW5hYmxlIGNhY2hlIChzZXQgY2FjaGUgbW9kZSA9IDEpLCBldmVuIGlmIHNldCBieSBST00gYm9vdCBjb2RlCisgICAgLy8gICAgICAgICAoVGhpcyBpcyBkb25lIGJlY2F1c2UgaXQncyBub3Qgc2V0IGJ5IGJvb3QgY29kZSB3aGVuIHJ1bm5pbmcgaW5zaWRlCisgICAgLy8gICAgICAgICBhIGRlYnVnZ2VyIHN1cHBvcnRpbmcgdGhlIEhhbHQgSW4gQm9vdCAoSElCKSBmdW5jdGlvbmFsaXR5KS4KKyAgICAvLyAgIGVsc2U6IFNldCBNT0RFX0dQUkFNIGlmIG5vdCBhbHJlYWR5IHNldCAoc2VlIGlubGluZSBjb21tZW50cyBhcyB3ZWxsKQorICAgIC8vCisgICAgdWludDMyX3Qgdmltc0N0bE1vZGUwIDsKKworICAgIHdoaWxlICggSFdSRUdCSVRXKCBWSU1TX0JBU0UgKyBWSU1TX09fU1RBVCwgVklNU19TVEFUX01PREVfQ0hBTkdJTkdfQklUTiApKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcgLSB3YWl0IGZvciBhbiBldmVudHVhbCBvbmdvaW5nIG1vZGUgY2hhbmdlIHRvIGNvbXBsZXRlLgorICAgICAgICAvLyAoVGhlcmUgc2hvdWxkIHR5cGljYWxseSBiZSBubyB3YWl0IHRpbWUgaGVyZSwgYnV0IG5lZWQgdG8gYmUgc3VyZSkKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBNb2RlPTAgaXMgZXF1YWwgdG8gTU9ERV9HUFJBTQorICAgIC8vCisgICAgdmltc0N0bE1vZGUwID0gKCggSFdSRUcoIFZJTVNfQkFTRSArIFZJTVNfT19DVEwgKSAmIH5WSU1TX0NUTF9NT0RFX00gKSB8IFZJTVNfQ1RMX0RZTl9DR19FTl9NIHwgVklNU19DVExfUFJFRl9FTl9NICk7CisKKworICAgIGlmICggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgKSAmIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTSApIHsKKyAgICAgICAgLy8gRW5hYmxlIGNhY2hlIChhbmQgaGVuY2UgZGlzYWJsZSBHUFJBTSkKKyAgICAgICAgSFdSRUcoIFZJTVNfQkFTRSArIFZJTVNfT19DVEwgKSA9ICggdmltc0N0bE1vZGUwIHwgVklNU19DVExfTU9ERV9DQUNIRSApOworICAgIH0gZWxzZSBpZiAoKCBIV1JFRyggVklNU19CQVNFICsgVklNU19PX1NUQVQgKSAmIFZJTVNfU1RBVF9NT0RFX00gKSAhPSBWSU1TX1NUQVRfTU9ERV9HUFJBTSApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gR1BSQU0gaXMgZW5hYmxlZCBpbiBDQ0ZHIGJ1dCBub3Qgc2VsZWN0ZWQKKyAgICAgICAgLy8gTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gZ28gdmlhIE1PREVfT0ZGIHdoZW4gc3dpdGNoaW5nIHRvIE1PREVfR1BSQU0KKyAgICAgICAgLy8KKyAgICAgICAgSFdSRUcoIFZJTVNfQkFTRSArIFZJTVNfT19DVEwgKSA9ICggdmltc0N0bE1vZGUwIHwgVklNU19DVExfTU9ERV9PRkYgKTsKKyAgICAgICAgd2hpbGUgKCggSFdSRUcoIFZJTVNfQkFTRSArIFZJTVNfT19TVEFUICkgJiBWSU1TX1NUQVRfTU9ERV9NICkgIT0gVklNU19TVEFUX01PREVfT0ZGICkgeworICAgICAgICAgICAgLy8gRG8gbm90aGluZyAtIHdhaXQgZm9yIGFuIGV2ZW50dWFsIG1vZGUgY2hhbmdlIHRvIGNvbXBsZXRlIChUaGlzIGdvZXMgZmFzdCkuCisgICAgICAgIH0KKyAgICAgICAgSFdSRUcoIFZJTVNfQkFTRSArIFZJTVNfT19DVEwgKSA9IHZpbXNDdGxNb2RlMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb3JyZWN0IG1vZGUsIGJ1dCBtYWtlIHN1cmUgUFJFRl9FTiBhbmQgRFlOX0NHX0VOIGFsd2F5cyBhcmUgc2V0CisgICAgICAgIEhXUkVHKCBWSU1TX0JBU0UgKyBWSU1TX09fQ1RMICkgPSB2aW1zQ3RsTW9kZTA7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEb2luZyB0aGUgdHJpY2t5IHN0dWZmIG5lZWRlZCB0byBlbnRlciBuZXcgUlRDU1VCU0VDSU5DIHZhbHVlCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTZXR1cFNldEFvblJ0Y1N1YlNlY0luYyggdWludDMyX3Qgc3ViU2VjSW5jICkKK3sKKyAgIC8vCisgICAvLyBMb2FkaW5nIGEgbmV3IFJUQ1NVQlNFQ0lOQyB2YWx1ZSBpcyBkb25lIGluIDUgc3RlcHM6CisgICAvLyAxLiBXcml0ZSBiaXRbMTU6MF0gb2YgbmV3IFNVQlNFQ0lOQyB2YWx1ZSB0byBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMAorICAgLy8gMi4gV3JpdGUgYml0WzIzOjE2XSBvZiBuZXcgU1VCU0VDSU5DIHZhbHVlIHRvIEFVWF9XVUNfT19SVENTVUJTRUNJTkMxCisgICAvLyAzLiBTZXQgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX1JFUQorICAgLy8gNC4gV2FpdCBmb3IgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX0FDSworICAgLy8gNS4gQ2xlYXIgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX1JFUQorICAgLy8KKyAgIEhXUkVHKCBBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMCApID0gKCggc3ViU2VjSW5jICAgICAgICkgJiBBVVhfV1VDX1JUQ1NVQlNFQ0lOQzBfSU5DMTVfMF9NICApOworICAgSFdSRUcoIEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19SVENTVUJTRUNJTkMxICkgPSAoKCBzdWJTZWNJbmMgPj4gMTYgKSAmIEFVWF9XVUNfUlRDU1VCU0VDSU5DMV9JTkMyM18xNl9NICk7CisKKyAgIEhXUkVHKCBBVVhfV1VDX0JBU0UgKyBBVVhfV1VDX09fUlRDU1VCU0VDSU5DQ1RMICkgPSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfUkVROworICAgd2hpbGUoICEgKCBIV1JFR0JJVFcoIEFVWF9XVUNfQkFTRSArIEFVWF9XVUNfT19SVENTVUJTRUNJTkNDVEwsIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9BQ0tfQklUTiApKSk7CisgICBIV1JFRyggQVVYX1dVQ19CQVNFICsgQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQ0NUTCApID0gMDsKK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NldHVwLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDE0NDAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zZXR1cC5oCkBAIC0wLDAgKzEsNDE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc2V0dXAuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMTggMTI6NTE6MjIgKzAyMDAgKFdlZCwgMTggTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYzOTgKKyoKKyogIERlc2NyaXB0aW9uOiAgICBQcm90b3R5cGVzIGFuZCBkZWZpbmVzIGZvciB0aGUgc2V0dXAgQVBJLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY29udHJvbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgc2V0dXBfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19TRVRVUF9IX18KKyNkZWZpbmUgX19TRVRVUF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisvLyBIYXJkd2FyZSBoZWFkZXJzCisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19hZGkuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpXzBfcmYuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpXzFfc3ludGguaD4KKyNpbmNsdWRlIDxpbmMvaHdfYWRpXzJfcmVmc3lzLmg+CisjaW5jbHVkZSA8aW5jL2h3X2FkaV8zX3JlZnN5cy5oPgorI2luY2x1ZGUgPGluYy9od19hZGlfNF9hdXguaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX2lvYy5oPgorI2luY2x1ZGUgPGluYy9od19hb25fc3lzY3RsLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl93dWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYXV4X3d1Yy5oPgorI2luY2x1ZGUgPGluYy9od19jY2ZnLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NoaXBfZGVmLmg+CisjaW5jbHVkZSA8aW5jL2h3X2RkaS5oPgorI2luY2x1ZGUgPGluYy9od19mbGFzaC5oPgorI2luY2x1ZGUgPGluYy9od19mY2ZnMS5oPgorI2luY2x1ZGUgPGluYy9od19kZGlfMF9vc2MuaD4KKyNpbmNsdWRlIDxpbmMvaHdfcHJjbS5oPgorI2luY2x1ZGUgPGluYy9od192aW1zLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9iYXRtb24uaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3J0Yy5oPgorLy8gRHJpdmVybGliIGhlYWRlcnMKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYWRpLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl9iYXRtb24uaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2NoaXBpbmZvLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pb2MuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcHJjbS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zZXR1cC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zeXNfY3RybC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBTZXR1cFRyaW1EZXZpY2UgICAgICAgICAgICAgICAgIE5PUk9NX1NldHVwVHJpbURldmljZQorICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEgTk9ST01fU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEKKyAgICAjZGVmaW5lIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyIE5PUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyCisgICAgI2RlZmluZSBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMyBOT1JPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMworICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4gICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbgorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4gICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbgorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybAorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMSAgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyICAgICAgIE5PUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIKKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFuYWJ5cGFzc1ZhbHVlMSAgTk9ST01fU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZSBOT1JPTV9TZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZQorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZyAgICAgICBOT1JPTV9TZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JSY09zY0xmSUJpYXNUcmltIE5PUk9NX1NldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclJjT3NjTGZSdHVuZUN0dW5lVHJpbSBOT1JPTV9TZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0KKyAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkN0bCAgICAgICAgTk9ST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmQ3RsCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjSGZGYXN0U3RhcnQgIE5PUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydAorICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybSBOT1JPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtCisgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8gTk9ST01fU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvCisgICAgI2RlZmluZSBTZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlICAgIE5PUk9NX1NldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUKKyAgICAjZGVmaW5lIFNldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZyBOT1JPTV9TZXR1cFNldENhY2hlTW9kZUFjY29yZGluZ1RvQ2NmZ1NldHRpbmcKKyAgICAjZGVmaW5lIFNldHVwU2V0QW9uUnRjU3ViU2VjSW5jICAgICAgICAgTk9ST01fU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQZXJmb3JtcyB0aGUgbmVjZXNzYXJ5IHRyaW0gb2YgdGhlIGRldmljZSB3aGljaCBpcyBub3QgZG9uZSBpbiBib290IGNvZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGV4ZWN1dGUgY29taW5nIGZyb20gUk9NIGJvb3QuIFRoZSBjdXJyZW50CisvLyEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgdGFrZSBzb2Z0IHJlc2V0IGludG8gYWNjb3VudC4gSG93ZXZlciwgaXQgZG9lcyBubworLy8hIGRhbWFnZSB0byBleGVjdXRlIGl0IGFnYWluLiBJdCBvbmx5IGNvbnN1bWVzIHRpbWUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTZXR1cFRyaW1EZXZpY2UoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRmlyc3QgcGFydCBvZiBjb25maWd1cmF0aW9uIHJlcXVpcmVkIHdoZW4gd2FraW5nIHVwIGZyb20gc2h1dGRvd24uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEoIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2Vjb25kIHBhcnQgb2YgY29uZmlndXJhdGlvbiByZXF1aXJlZCB3aGVuIHdha2luZyB1cCBmcm9tIHNodXRkb3duLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiwgdWludDMyX3QgY2NmZ19Nb2RlQ29uZlJlZyApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBUaGlyZCBwYXJ0IG9mIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgd2hlbiB3YWtpbmcgdXAgZnJvbSBzaHV0ZG93bi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMyggdWludDMyX3QgY2NmZ19Nb2RlQ29uZlJlZyApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIGZyb20gRkNGRzEgdG8gYmUgdXNlZCBhcyBBRENfU0hfTU9ERV9FTiBzZXR0aW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbiggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSBmcm9tIEZDRkcxIHRvIGJlIHVzZWQgYXMgQURDX1NIX1ZCVUZfRU4gc2V0dGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIEFNUENPTVBfQ1RSTCByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybCggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgQU1QQ09NUF9USDEgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMSggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBBTVBDT01QX1RIMiByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyKCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIEFOQUJZUEFTU19WQUxVRTEgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxKCB1aW50MzJfdCBjY2ZnX01vZGVDb25mUmVnICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJldHVybnMgdGhlIHRyaW0gdmFsdWUgZnJvbSBGQ0ZHMSB0byBiZSB1c2VkIGFzIERCTFJfTE9PUF9GSUxURVJfUkVTRVRfVk9MVEFHRSBzZXR0aW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZSggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgUkFEQ0VYVENGRyByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnKCB1aW50MzJfdCB1aTMyRmNmZzFSZXZpc2lvbiApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSBGQ0ZHMSBPU0NfQ09ORl9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbSggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgUkNPU0NMRl9SVFVORV9UUklNIGFuZCB0aGUKKy8vISBSQ09TQ0xGX0NUVU5FX1RSSU0gYml0IGZpZWxkcyBpbiB0aGUgWE9TQ0xGX1JDT1NDTEZfQ1RSTCByZWdpc3RlciBpbiBPU0NfRElHLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0oIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgWE9TQ0hGQ1RMIHJlZ2lzdGVyIGluIE9TQ19ESUcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvclhvc2NIZkN0bCggdWludDMyX3QgdWkzMkZjZmcxUmV2aXNpb24gKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyB0aGUgdHJpbSB2YWx1ZSB0byBiZSB1c2VkIGFzIE9TQ19ESUc6Q1RMMS5YT1NDX0hGX0ZBU1RfU1RBUlQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFNldHVwR2V0VHJpbUZvclhvc2NIZkZhc3RTdGFydCggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIHRoZSB0cmltIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBYT1NDX0hGX0lCSUFTVEhFUk0gYml0IGZpZWxkIGluCisvLyEgdGhlIEFOQUJZUEFTU19WQUxVRTIgcmVnaXN0ZXIgaW4gT1NDX0RJRy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybSggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZXR1cm5zIFhPU0NMRl9SRUdVTEFUT1JfVFJJTSBhbmQgWE9TQ0xGX0NNSVJSV1JfUkFUSU8gYXMgb25lIHBhY2tldAorLy8hIHNwYW5uaW5nIGJpdHMgWzU6MF0gaW4gdGhlIHJldHVybmVkIHZhbHVlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTZXR1cEdldFRyaW1Gb3JYb3NjTGZSZWd1bGF0b3JBbmRDbWlycndyUmF0aW8oIHVpbnQzMl90IHVpMzJGY2ZnMVJldmlzaW9uICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNpZ24gZXh0ZW5kIHRoZSBWRERSX1RSSU0gc2V0dGluZyAoc3BlY2lhbCBmb3JtYXQgcmFuZ2luZyBmcm9tIC0xMCB0byArMjEpCisvLyEKKy8vISBccmV0dXJuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZSggdWludDMyX3QgdWkzMlZkZHJUcmltVmFsICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBjb3JyZWN0IFZJTVNfTU9ERSBhY2NvcmRpbmcgdG8gQ0NGRyBzZXR0aW5nIChDQUNIRSBvciBHUFJBTSkKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZyggdm9pZCApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEb2luZyB0aGUgdHJpY2t5IHN0dWZmIG5lZWRlZCB0byBlbnRlciBuZXcgUlRDU1VCU0VDSU5DIHZhbHVlCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTZXR1cFNldEFvblJ0Y1N1YlNlY0luYyggdWludDMyX3Qgc3ViU2VjSW5jICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCBWRERSIGJvb3N0IG1vZGUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fU2V0dXBUcmltRGV2aWNlCisgICAgICAgICN1bmRlZiAgU2V0dXBUcmltRGV2aWNlCisgICAgICAgICNkZWZpbmUgU2V0dXBUcmltRGV2aWNlICAgICAgICAgICAgICAgICBST01fU2V0dXBUcmltRGV2aWNlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMQorICAgICAgICAjdW5kZWYgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxCisgICAgICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzEgUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcxCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMgorICAgICAgICAjdW5kZWYgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyCisgICAgICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzIgUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmcyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEFmdGVyQ29sZFJlc2V0V2FrZXVwRnJvbVNodXREb3duQ2ZnMworICAgICAgICAjdW5kZWYgIFNldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczCisgICAgICAgICNkZWZpbmUgU2V0dXBBZnRlckNvbGRSZXNldFdha2V1cEZyb21TaHV0RG93bkNmZzMgUk9NX1NldHVwQWZ0ZXJDb2xkUmVzZXRXYWtldXBGcm9tU2h1dERvd25DZmczCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JBZGNTaE1vZGVFbgorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckFkY1NoTW9kZUVuCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4gICAgICBST01fU2V0dXBHZXRUcmltRm9yQWRjU2hNb2RlRW4KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvckFkY1NoVmJ1ZkVuCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQWRjU2hWYnVmRW4KKyAgICAgICAgI2RlZmluZSBTZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbiAgICAgIFJPTV9TZXR1cEdldFRyaW1Gb3JBZGNTaFZidWZFbgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yQW1wY29tcEN0cmwKKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBbXBjb21wQ3RybAorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsICAgICAgUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBDdHJsCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgxCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMQorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEgICAgICAgUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDEKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvckFtcGNvbXBUaDIKKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JBbXBjb21wVGgyCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMiAgICAgICBST01fU2V0dXBHZXRUcmltRm9yQW1wY29tcFRoMgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxICBST01fU2V0dXBHZXRUcmltRm9yQW5hYnlwYXNzVmFsdWUxCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JEYmxyTG9vcEZpbHRlclJlc2V0Vm9sdGFnZQorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yRGJsckxvb3BGaWx0ZXJSZXNldFZvbHRhZ2UgUk9NX1NldHVwR2V0VHJpbUZvckRibHJMb29wRmlsdGVyUmVzZXRWb2x0YWdlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JSYWRjRXh0Q2ZnCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yUmFkY0V4dENmZworICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclJhZGNFeHRDZmcgICAgICAgUk9NX1NldHVwR2V0VHJpbUZvclJhZGNFeHRDZmcKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvclJjT3NjTGZJQmlhc1RyaW0KKyAgICAgICAgI3VuZGVmICBTZXR1cEdldFRyaW1Gb3JSY09zY0xmSUJpYXNUcmltCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbSBST01fU2V0dXBHZXRUcmltRm9yUmNPc2NMZklCaWFzVHJpbQorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltCisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yUmNPc2NMZlJ0dW5lQ3R1bmVUcmltIFJPTV9TZXR1cEdldFRyaW1Gb3JSY09zY0xmUnR1bmVDdHVuZVRyaW0KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkN0bAorICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclhvc2NIZkN0bAorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkN0bCAgICAgICAgUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkN0bAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0CisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0CisgICAgICAgICNkZWZpbmUgU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0ICBST01fU2V0dXBHZXRUcmltRm9yWG9zY0hmRmFzdFN0YXJ0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cEdldFRyaW1Gb3JYb3NjSGZJYmlhc3RoZXJtCisgICAgICAgICN1bmRlZiAgU2V0dXBHZXRUcmltRm9yWG9zY0hmSWJpYXN0aGVybQorICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0gUk9NX1NldHVwR2V0VHJpbUZvclhvc2NIZkliaWFzdGhlcm0KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbworICAgICAgICAjdW5kZWYgIFNldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbworICAgICAgICAjZGVmaW5lIFNldHVwR2V0VHJpbUZvclhvc2NMZlJlZ3VsYXRvckFuZENtaXJyd3JSYXRpbyBST01fU2V0dXBHZXRUcmltRm9yWG9zY0xmUmVndWxhdG9yQW5kQ21pcnJ3clJhdGlvCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cFNpZ25FeHRlbmRWZGRyVHJpbVZhbHVlCisgICAgICAgICN1bmRlZiAgU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZQorICAgICAgICAjZGVmaW5lIFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUgICAgUk9NX1NldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZworICAgICAgICAjdW5kZWYgIFNldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZworICAgICAgICAjZGVmaW5lIFNldHVwU2V0Q2FjaGVNb2RlQWNjb3JkaW5nVG9DY2ZnU2V0dGluZyBST01fU2V0dXBTZXRDYWNoZU1vZGVBY2NvcmRpbmdUb0NjZmdTZXR0aW5nCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TZXR1cFNldEFvblJ0Y1N1YlNlY0luYworICAgICAgICAjdW5kZWYgIFNldHVwU2V0QW9uUnRjU3ViU2VjSW5jCisgICAgICAgICNkZWZpbmUgU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMgICAgICAgICBST01fU2V0dXBTZXRBb25SdGNTdWJTZWNJbmMKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfX1NFVFVQX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhMDgzNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NtcGguYwpAQCAtMCwwICsxLDEwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHNtcGguYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBNQ1UgU2VtYXBob3JlLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi9zbXBoLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBTTVBIQWNxdWlyZQorICAgICNkZWZpbmUgU01QSEFjcXVpcmUgICAgICAgICAgICAgICAgICAgICBOT1JPTV9TTVBIQWNxdWlyZQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQWNxdWlyZSBhIHNlbWFwaG9yZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1NNUEhBY3F1aXJlKHVpbnQzMl90IHVpMzJTZW1hcGhvcmUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMyU2VtYXBob3JlID09IFNNUEhfMCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF80KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF83KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfOSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xMCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xMSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xMikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xMykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xNCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xNSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xNikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xNykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xOCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8xOSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yMCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yMSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yMikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yMykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yNCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yNSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yNikgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yNykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yOCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yOSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8zMCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8zMSkpOworCisgICAgLy8KKyAgICAvLyBXYWl0IGZvciBzZW1hcGhvcmUgdG8gYmUgcmVsZWFzZSBzdWNoIHRoYXQgaXQgY2FuIGJlIGNsYWltZWQKKyAgICAvLyBTZW1hcGhvcmUgcmVnaXN0ZXIgcmVhZHMgMSB3aGVuIGxvY2sgd2FzIGFjcXVpcmVkIG90aGVyd2lzZSAwCisgICAgLy8gKGkuZS4gU01QSF9DTEFJTUVEKS4KKyAgICAvLworICAgIHdoaWxlKEhXUkVHKFNNUEhfQkFTRSArIFNNUEhfT19TTVBIMCArIDQgKiB1aTMyU2VtYXBob3JlKSA9PQorICAgICAgICAgICAgU01QSF9DTEFJTUVEKQorICAgIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjNDY3NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NtcGguaApAQCAtMCwwICsxLDMyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHNtcGguaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDctMTYgMTI6MTI6MDQgKzAyMDAgKFRodSwgMTYgSnVsIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQxNTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgTUNVIFNlbWFwaG9yZS4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgbWN1c2VtYXBob3JlX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fU01QSF9IX18KKyNkZWZpbmUgX19TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X3NtcGguaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFNNUEhBY3F1aXJlICAgICAgICAgICAgICAgICAgICAgTk9ST01fU01QSEFjcXVpcmUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gR2VuZXJhbCBjb25zdGFudHMgYW5kIGRlZmluZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFNNUEhfRlJFRSAgICAgMHgwMDAwMDAwMSAvLyBNQ1UgU2VtYXBob3JlIGhhcyBub3QgYmVlbiBjbGFpbWVkCisjZGVmaW5lIFNNUEhfQ0xBSU1FRCAgMHgwMDAwMDAwMCAvLyBNQ1UgU2VtYXBob3JlIGhhcyBiZWVuIGNsYWltZWQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gU01QSEFjcXVpcmUsIFNNUEhUcnlBY3F1aXJlIGFuZCBTTVBIUmVsZWFzZQorLy8gYXMgdGhlIHVpMzJTZW1hcGhvcmUgcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgU01QSF8wICAgIDAgLy8gTUNVIFNlbWFwaG9yZSAgMAorI2RlZmluZSBTTVBIXzEgICAgMSAvLyBNQ1UgU2VtYXBob3JlICAxCisjZGVmaW5lIFNNUEhfMiAgICAyIC8vIE1DVSBTZW1hcGhvcmUgIDIKKyNkZWZpbmUgU01QSF8zICAgIDMgLy8gTUNVIFNlbWFwaG9yZSAgMworI2RlZmluZSBTTVBIXzQgICAgNCAvLyBNQ1UgU2VtYXBob3JlICA0CisjZGVmaW5lIFNNUEhfNSAgICA1IC8vIE1DVSBTZW1hcGhvcmUgIDUKKyNkZWZpbmUgU01QSF82ICAgIDYgLy8gTUNVIFNlbWFwaG9yZSAgNgorI2RlZmluZSBTTVBIXzcgICAgNyAvLyBNQ1UgU2VtYXBob3JlICA3CisjZGVmaW5lIFNNUEhfOCAgICA4IC8vIE1DVSBTZW1hcGhvcmUgIDgKKyNkZWZpbmUgU01QSF85ICAgIDkgLy8gTUNVIFNlbWFwaG9yZSAgOQorI2RlZmluZSBTTVBIXzEwICAxMCAvLyBNQ1UgU2VtYXBob3JlIDEwCisjZGVmaW5lIFNNUEhfMTEgIDExIC8vIE1DVSBTZW1hcGhvcmUgMTEKKyNkZWZpbmUgU01QSF8xMiAgMTIgLy8gTUNVIFNlbWFwaG9yZSAxMgorI2RlZmluZSBTTVBIXzEzICAxMyAvLyBNQ1UgU2VtYXBob3JlIDEzCisjZGVmaW5lIFNNUEhfMTQgIDE0IC8vIE1DVSBTZW1hcGhvcmUgMTQKKyNkZWZpbmUgU01QSF8xNSAgMTUgLy8gTUNVIFNlbWFwaG9yZSAxNQorI2RlZmluZSBTTVBIXzE2ICAxNiAvLyBNQ1UgU2VtYXBob3JlIDE2CisjZGVmaW5lIFNNUEhfMTcgIDE3IC8vIE1DVSBTZW1hcGhvcmUgMTcKKyNkZWZpbmUgU01QSF8xOCAgMTggLy8gTUNVIFNlbWFwaG9yZSAxOAorI2RlZmluZSBTTVBIXzE5ICAxOSAvLyBNQ1UgU2VtYXBob3JlIDE5CisjZGVmaW5lIFNNUEhfMjAgIDIwIC8vIE1DVSBTZW1hcGhvcmUgMjAKKyNkZWZpbmUgU01QSF8yMSAgMjEgLy8gTUNVIFNlbWFwaG9yZSAyMQorI2RlZmluZSBTTVBIXzIyICAyMiAvLyBNQ1UgU2VtYXBob3JlIDIyCisjZGVmaW5lIFNNUEhfMjMgIDIzIC8vIE1DVSBTZW1hcGhvcmUgMjMKKyNkZWZpbmUgU01QSF8yNCAgMjQgLy8gTUNVIFNlbWFwaG9yZSAyNAorI2RlZmluZSBTTVBIXzI1ICAyNSAvLyBNQ1UgU2VtYXBob3JlIDI1CisjZGVmaW5lIFNNUEhfMjYgIDI2IC8vIE1DVSBTZW1hcGhvcmUgMjYKKyNkZWZpbmUgU01QSF8yNyAgMjcgLy8gTUNVIFNlbWFwaG9yZSAyNworI2RlZmluZSBTTVBIXzI4ICAyOCAvLyBNQ1UgU2VtYXBob3JlIDI4CisjZGVmaW5lIFNNUEhfMjkgIDI5IC8vIE1DVSBTZW1hcGhvcmUgMjkKKyNkZWZpbmUgU01QSF8zMCAgMzAgLy8gTUNVIFNlbWFwaG9yZSAzMAorI2RlZmluZSBTTVBIXzMxICAzMSAvLyBNQ1UgU2VtYXBob3JlIDMxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBBY3F1aXJlIGEgc2VtYXBob3JlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBhY3F1aXJlcyB0aGUgZ2l2ZW4gc2VtYXBob3JlLCBibG9ja2luZyB0aGUgY2FsbCB1bnRpbAorLy8hIHRoZSBzZW1hcGhvcmUgaXMgYXZhaWxhYmxlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZW1hcGhvcmUgaXMgdGhlIHNlbWFwaG9yZSBudW1iZXIuCisvLyEgLSBccmVmIFNNUEhfMAorLy8hIC0gXHJlZiBTTVBIXzEKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBTTVBIXzMxCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTTVBIQWNxdWlyZSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHJ5IHRvIEFjcXVpcmUgYSBzZW1hcGhvcmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGFjcXVpcmUgdGhlIGdpdmVuIHNlbWFwaG9yZSwgaWYgdGhlIHNlbWFwaG9yZQorLy8hIGNvdWxkIG5vdCBiZSBjbGFpbWVkIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJTZW1hcGhvcmUgaXMgdGhlIHNlbWFwaG9yZSBudW1iZXIuCisvLyEgLSBccmVmIFNNUEhfMAorLy8hIC0gXHJlZiBTTVBIXzEKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBTTVBIXzMxCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgaWYgYSBzZW1hcGhvcmUgd2FzIGFjcXVpcmVkCisvLyEgLSBcYyB0cnVlICA6IFNlbWFwaG9yZSBhY3F1aXJlZC4KKy8vISAtIFxjIGZhbHNlIDogU2VtYXBob3JlIFxiIG5vdCBhY3F1aXJlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorU01QSFRyeUFjcXVpcmUodWludDMyX3QgdWkzMlNlbWFwaG9yZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyU2VtYVJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF81KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF84KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMzEpKTsKKworICAgIC8vCisgICAgLy8gU2VtYXBob3JlIHJlZ2lzdGVyIHJlYWRzIDEgaWYgbG9jayB3YXMgYWNxdWlyZWQKKyAgICAvLyAoaS5lLiBTTVBIX0ZSRUUpLgorICAgIC8vCisgICAgdWkzMlNlbWFSZWcgPSBIV1JFRyhTTVBIX0JBU0UgKyBTTVBIX09fU01QSDAgKyA0ICogdWkzMlNlbWFwaG9yZSk7CisKKyAgICByZXR1cm4gKHVpMzJTZW1hUmVnID09IFNNUEhfRlJFRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlbGVhc2UgYSBzZW1hcGhvcmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBnaXZlbiBzZW1hcGhvcmUuCisvLyEKKy8vISBcbm90ZSBJdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8gcHJvdmlkZSB0aGUgY29udmVudGlvbiBmb3IgY2xlYXJpbmcKKy8vISBzZW1hcGhvcmUuCisvLyEKKy8vISBccGFyYW0gdWkzMlNlbWFwaG9yZSBpcyB0aGUgc2VtYXBob3JlIG51bWJlci4KKy8vISAtIFxyZWYgU01QSF8wCisvLyEgLSBccmVmIFNNUEhfMQorLy8hIC0gLi4uCisvLyEgLSBccmVmIFNNUEhfMzEKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTTVBIUmVsZWFzZSh1aW50MzJfdCB1aTMyU2VtYXBob3JlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMSkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF8yKSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNCkgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF81KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfNykgfHwKKyAgICAgICAgICAgKHVpMzJTZW1hcGhvcmUgPT0gU01QSF84KSB8fAorICAgICAgICAgICAodWkzMlNlbWFwaG9yZSA9PSBTTVBIXzkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMTkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjEpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjIpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjMpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjQpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjUpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjYpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjcpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjgpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMjkpIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMzApIHx8CisgICAgICAgICAgICh1aTMyU2VtYXBob3JlID09IFNNUEhfMzEpKTsKKworICAgIC8vCisgICAgLy8gTm8gY2hlY2sgYmVmb3JlIHJlbGVhc2UsIGl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBwcm92aWRlIHRoZQorICAgIC8vIGNvbnZlbnRpb25zIGZvciB3aG8gYW5kIHdoZW4gYSBzZW1hcGhvcmUgY2FuIGJlIHJlbGVhc2VkLgorICAgIC8vCisgICAgSFdSRUcoU01QSF9CQVNFICsgU01QSF9PX1NNUEgwICsgNCAqIHVpMzJTZW1hcGhvcmUpID0gU01QSF9GUkVFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9TTVBIQWNxdWlyZQorICAgICAgICAjdW5kZWYgIFNNUEhBY3F1aXJlCisgICAgICAgICNkZWZpbmUgU01QSEFjcXVpcmUgICAgICAgICAgICAgICAgICAgICBST01fU01QSEFjcXVpcmUKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfX1NNUEhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NtcGhfZG9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoX2RvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzk1YTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zbXBoX2RvYy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzbXBoX2RvYy5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0zMCAxMzowMzo1OSArMDIwMCAoV2VkLCAzMCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTk3MQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vISBcYWRkdG9ncm91cCBtY3VzZW1hcGhvcmVfYXBpCisvLyEgQHsKKy8vISBcc2VjdGlvbiBzZWNfbWN1c2VtYXBob3JlIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIE1DVSBTZW1hcGhvcmUgb2ZmZXJzIDMyIHNlbWFwaG9yZXMgdGhhdCBlYWNoIGNhbiBiZSBjbGFpbWVkIGFuZCByZWxlYXNlZCBpbiBhbiBhdG9taWMgb3BlcmF0aW9uLgorLy8hIE9uZSBhbmQgb25seSBvbmUgc2VtYXBob3JlIGNhbiBiZSBoYW5kbGVkIGR1cmluZyBhIHRyYW5zYWN0aW9uLgorLy8hCisvLyEgQ2xhaW1pbmcgYSBzZW1hcGhvcmUgY2F1c2VzIHN1YnNlcXVlbnQgY2xhaW1zL3JlYWRzIHRvIHJldHVybiAnMCcgKGkuZS4gIm5vdCBhdmFpbGFibGUiKS4KKy8vISBIb3cgdGhlIHNlbWFwaG9yZXMgYXJlIHVzZWQgYW5kIHJlc3BlY3RlZCBpcyBkZWNpZGVkIGJ5IHNvZnR3YXJlLgorLy8hCisvLyEgXHNlY3Rpb24gc2VjX21jdXNlbWFwaG9yZV9hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBTZW1hcGhvcmUgYWNxdWlyZToKKy8vISAtIFxyZWYgU01QSEFjcXVpcmUoKQorLy8hIC0gXHJlZiBTTVBIVHJ5QWNxdWlyZSgpCisvLyEKKy8vISBTZW1hcGhvcmUgcmVsZWFzZToKKy8vISAtIFxyZWYgU01QSFJlbGVhc2UoKQorLy8hCisvLyEgQH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NzaS5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3NpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwZjQzMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3NzaS5jCkBAIC0wLDAgKzEsMzQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3NpLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE2IDE5OjQxOjQ3ICswMTAwIChNb24sIDE2IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MDk0CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3NzaS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgU1NJQ29uZmlnU2V0RXhwQ2xrCisgICAgI2RlZmluZSBTU0lDb25maWdTZXRFeHBDbGsgICAgICAgICAgICAgIE5PUk9NX1NTSUNvbmZpZ1NldEV4cENsaworICAgICN1bmRlZiAgU1NJRGF0YVB1dAorICAgICNkZWZpbmUgU1NJRGF0YVB1dCAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9TU0lEYXRhUHV0CisgICAgI3VuZGVmICBTU0lEYXRhUHV0Tm9uQmxvY2tpbmcKKyAgICAjZGVmaW5lIFNTSURhdGFQdXROb25CbG9ja2luZyAgICAgICAgICAgTk9ST01fU1NJRGF0YVB1dE5vbkJsb2NraW5nCisgICAgI3VuZGVmICBTU0lEYXRhR2V0CisgICAgI2RlZmluZSBTU0lEYXRhR2V0ICAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1NTSURhdGFHZXQKKyAgICAjdW5kZWYgIFNTSURhdGFHZXROb25CbG9ja2luZworICAgICNkZWZpbmUgU1NJRGF0YUdldE5vbkJsb2NraW5nICAgICAgICAgICBOT1JPTV9TU0lEYXRhR2V0Tm9uQmxvY2tpbmcKKyAgICAjdW5kZWYgIFNTSUludFJlZ2lzdGVyCisgICAgI2RlZmluZSBTU0lJbnRSZWdpc3RlciAgICAgICAgICAgICAgICAgIE5PUk9NX1NTSUludFJlZ2lzdGVyCisgICAgI3VuZGVmICBTU0lJbnRVbnJlZ2lzdGVyCisgICAgI2RlZmluZSBTU0lJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICAgIE5PUk9NX1NTSUludFVucmVnaXN0ZXIKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZXMgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU1NJQ29uZmlnU2V0RXhwQ2xrKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyU1NJQ2xrLAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQcm90b2NvbCwgdWludDMyX3QgdWkzMk1vZGUsCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJpdFJhdGUsIHVpbnQzMl90IHVpMzJEYXRhV2lkdGgpCit7CisgICAgdWludDMyX3QgdWkzMk1heEJpdFJhdGU7CisgICAgdWludDMyX3QgdWkzMlJlZ1ZhbDsKKyAgICB1aW50MzJfdCB1aTMyUHJlRGl2OworICAgIHVpbnQzMl90IHVpMzJTQ1I7CisgICAgdWludDMyX3QgdWkzMlNQSF9TUE87CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyUHJvdG9jb2wgPT0gU1NJX0ZSRl9NT1RPX01PREVfMCkgfHwKKyAgICAgICAgICAgKHVpMzJQcm90b2NvbCA9PSBTU0lfRlJGX01PVE9fTU9ERV8xKSB8fAorICAgICAgICAgICAodWkzMlByb3RvY29sID09IFNTSV9GUkZfTU9UT19NT0RFXzIpIHx8CisgICAgICAgICAgICh1aTMyUHJvdG9jb2wgPT0gU1NJX0ZSRl9NT1RPX01PREVfMykgfHwKKyAgICAgICAgICAgKHVpMzJQcm90b2NvbCA9PSBTU0lfRlJGX1RJKSB8fAorICAgICAgICAgICAodWkzMlByb3RvY29sID09IFNTSV9GUkZfTk1XKSk7CisgICAgQVNTRVJUKCh1aTMyTW9kZSA9PSBTU0lfTU9ERV9NQVNURVIpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBTU0lfTU9ERV9TTEFWRSkgfHwKKyAgICAgICAgICAgKHVpMzJNb2RlID09IFNTSV9NT0RFX1NMQVZFX09EKSk7CisgICAgQVNTRVJUKCgodWkzMk1vZGUgPT0gU1NJX01PREVfTUFTVEVSKSAmJiAodWkzMkJpdFJhdGUgPD0gKHVpMzJTU0lDbGsgLyAyKSkpIHx8CisgICAgICAgICAgICgodWkzMk1vZGUgIT0gU1NJX01PREVfTUFTVEVSKSAmJiAodWkzMkJpdFJhdGUgPD0gKHVpMzJTU0lDbGsgLyAxMikpKSk7CisgICAgQVNTRVJUKCh1aTMyU1NJQ2xrIC8gdWkzMkJpdFJhdGUpIDw9ICgyNTQgKiAyNTYpKTsKKyAgICBBU1NFUlQoKHVpMzJEYXRhV2lkdGggPj0gNCkgJiYgKHVpMzJEYXRhV2lkdGggPD0gMTYpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBtb2RlLgorICAgIC8vCisgICAgdWkzMlJlZ1ZhbCA9ICh1aTMyTW9kZSA9PSBTU0lfTU9ERV9TTEFWRV9PRCkgPyBTU0lfQ1IxX1NPRCA6IDA7CisgICAgdWkzMlJlZ1ZhbCB8PSAodWkzMk1vZGUgPT0gU1NJX01PREVfTUFTVEVSKSA/IDAgOiBTU0lfQ1IxX01TOworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fQ1IxKSA9IHVpMzJSZWdWYWw7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgY2xvY2sgcHJlZGl2aWRlci4KKyAgICAvLworICAgIHVpMzJNYXhCaXRSYXRlID0gdWkzMlNTSUNsayAvIHVpMzJCaXRSYXRlOworICAgIHVpMzJQcmVEaXYgPSAwOworICAgIGRvCisgICAgeworICAgICAgICB1aTMyUHJlRGl2ICs9IDI7CisgICAgICAgIHVpMzJTQ1IgPSAodWkzMk1heEJpdFJhdGUgLyB1aTMyUHJlRGl2KSAtIDE7CisgICAgfQorICAgIHdoaWxlKHVpMzJTQ1IgPiAyNTUpOworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fQ1BTUikgPSB1aTMyUHJlRGl2OworCisgICAgLy8KKyAgICAvLyBTZXQgcHJvdG9jb2wgYW5kIGNsb2NrIHJhdGUuCisgICAgLy8KKyAgICB1aTMyU1BIX1NQTyA9ICh1aTMyUHJvdG9jb2wgJiAzKSA8PCA2OworICAgIHVpMzJQcm90b2NvbCAmPSBTU0lfQ1IwX0ZSRl9NOworICAgIHVpMzJSZWdWYWwgPSAodWkzMlNDUiA8PCA4KSB8IHVpMzJTUEhfU1BPIHwgdWkzMlByb3RvY29sIHwgKHVpMzJEYXRhV2lkdGggLSAxKTsKKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0NSMCkgPSB1aTMyUmVnVmFsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFB1dHMgYSBkYXRhIGVsZW1lbnQgaW50byB0aGUgU1NJIHRyYW5zbWl0IEZJRk8KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitpbnQzMl90CitTU0lEYXRhUHV0Tm9uQmxvY2tpbmcodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJEYXRhKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJEYXRhICYgKDB4ZmZmZmZmZmUgPDwgKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fQ1IwKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0lfQ1IwX0RTU19NKSkpID09IDApOworCisgICAgLy8KKyAgICAvLyBDaGVjayBmb3Igc3BhY2UgdG8gd3JpdGUuCisgICAgLy8KKyAgICBpZihIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1NSKSAmIFNTSV9TUl9UTkYpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0RSKSA9IHVpMzJEYXRhOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBQdXRzIGEgZGF0YSBlbGVtZW50IGludG8gdGhlIFNTSSB0cmFuc21pdCBGSUZPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU1NJRGF0YVB1dCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRhdGEpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMkRhdGEgJiAoMHhmZmZmZmZmZSA8PCAoSFdSRUcodWkzMkJhc2UgKyBTU0lfT19DUjApICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTSV9DUjBfRFNTX00pKSkgPT0gMCk7CisKKyAgICAvLworICAgIC8vIFdhaXQgdW50aWwgdGhlcmUgaXMgc3BhY2UuCisgICAgLy8KKyAgICB3aGlsZSghKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fU1IpICYgU1NJX1NSX1RORikpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIFNTSS4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fRFIpID0gdWkzMkRhdGE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyBhIGRhdGEgZWxlbWVudCBmcm9tIHRoZSBTU0kgcmVjZWl2ZSBGSUZPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU1NJRGF0YUdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyRGF0YSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFdhaXQgdW50aWwgdGhlcmUgaXMgZGF0YSB0byBiZSByZWFkLgorICAgIC8vCisgICAgd2hpbGUoIShIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1NSKSAmIFNTSV9TUl9STkUpKQorICAgIHsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJlYWQgZGF0YSBmcm9tIFNTSS4KKyAgICAvLworICAgICpwdWkzMkRhdGEgPSBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0RSKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXRzIGEgZGF0YSBlbGVtZW50IGZyb20gdGhlIFNTSSByZWNlaXZlIEZJRk8KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSBwdWkzMkRhdGEgaXMgYSBwb2ludGVyIHRvIGEgc3RvcmFnZSBsb2NhdGlvbiBmb3IgZGF0YSB0aGF0IHdhcworLy8hIHJlY2VpdmVkIG92ZXIgdGhlIFNTSSBpbnRlcmZhY2UuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSByZWNlaXZlIEZJRk8gb2YgdGhlIHNwZWNpZmllZCBTU0kKKy8vISBtb2R1bGUgYW5kIHBsYWNlcyB0aGF0IGRhdGEgaW50byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSBcZSB1aTMyRGF0YQorLy8hIHBhcmFtZXRlci4gSWYgdGhlcmUgaXMgbm8gZGF0YSBpbiB0aGUgRklGTywgdGhlbiB0aGlzIGZ1bmN0aW9uICByZXR1cm5zIGEKKy8vISB6ZXJvLgorLy8hCisvLyEgXG5vdGUgT25seSB0aGUgbG93ZXIgTiBiaXRzIG9mIHRoZSB2YWx1ZSB3cml0dGVuIHRvIFxlIHB1aTMyRGF0YSBjb250YWluCisvLyEgdmFsaWQgZGF0YSwgd2hlcmUgTiBpcyB0aGUgZGF0YSB3aWR0aCBhcyBjb25maWd1cmVkIGJ5IFxzYQorLy8hIFNTSUNvbmZpZ1NldEV4cENsaygpLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkIGZvcgorLy8hIDgtYml0IGRhdGEgd2lkdGgsIG9ubHkgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgdmFsdWUgd3JpdHRlbiB0byBcZSBwdWkzMkRhdGEKKy8vISBjb250YWluIHZhbGlkIGRhdGEuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZWFkIGZyb20gdGhlIFNTSSByZWNlaXZlIEZJRk8uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorU1NJRGF0YUdldE5vbkJsb2NraW5nKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCAqcHVpMzJEYXRhKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgZm9yIGRhdGEgdG8gcmVhZC4KKyAgICAvLworICAgIGlmKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fU1IpICYgU1NJX1NSX1JORSkKKyAgICB7CisgICAgICAgICpwdWkzMkRhdGEgPSBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0RSKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0CisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBUaGlzIHNldHMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYW4gU1NJIGludGVycnVwdAorLy8hIG9jY3Vycy4gVGhpcyB3aWxsIGVuYWJsZSB0aGUgZ2xvYmFsIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXI7CisvLyEgc3BlY2lmaWMgU1NJIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHZpYSBTU0lJbnRFbmFibGUoKS4gSWYgbmVjZXNzYXJ5LAorLy8hIGl0IGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlCisvLyEgdmlhIFNTSUludENsZWFyKCkuCisvLyEKKy8vISBcc2EgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU1NJSW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGludGVycnVwdCBudW1iZXIgYmFzZWQgb24gdGhlIFNTSSBwb3J0LgorICAgIC8vCisgICAgdWkzMkludCA9ICh1aTMyQmFzZSA9PSBTU0kwX0JBU0UpID8gSU5UX1NTSTBfQ09NQiA6IElOVF9TU0kxX0NPTUI7CisKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKHVpMzJJbnQsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IGludGVycnVwdC4KKyAgICAvLworICAgIEludEVuYWJsZSh1aTMySW50KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBVbnJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0CisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIFNTSQorLy8hIGludGVycnVwdCBvY2N1cnMuIFRoaXMgd2lsbCBhbHNvIG1hc2sgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdAorLy8hIGNvbnRyb2xsZXIgc28gdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxzYSBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitTU0lJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHVpbnQzMl90IHVpMzJJbnQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIERldGVybWluZSB0aGUgaW50ZXJydXB0IG51bWJlciBiYXNlZCBvbiB0aGUgU1NJIHBvcnQuCisgICAgLy8KKyAgICB1aTMySW50ID0gKHVpMzJCYXNlID09IFNTSTBfQkFTRSkgPyBJTlRfU1NJMF9DT01CIDogSU5UX1NTSTFfQ09NQjsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RGlzYWJsZSh1aTMySW50KTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKHVpMzJJbnQpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3NpLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg2MDUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3NpLmgKQEAgLTAsMCArMSw3MzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzc2kuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDktMjEgMTU6MTk6MzYgKzAyMDAgKE1vbiwgMjEgU2VwIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ2MjkKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBtYWNyb3MgZm9yIHRoZSBTU0kuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHNzaV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1NTSV9IX18KKyNkZWZpbmUgX19TU0lfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfc3NpLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBTU0lDb25maWdTZXRFeHBDbGsgICAgICAgICAgICAgIE5PUk9NX1NTSUNvbmZpZ1NldEV4cENsaworICAgICNkZWZpbmUgU1NJRGF0YVB1dCAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9TU0lEYXRhUHV0CisgICAgI2RlZmluZSBTU0lEYXRhUHV0Tm9uQmxvY2tpbmcgICAgICAgICAgIE5PUk9NX1NTSURhdGFQdXROb25CbG9ja2luZworICAgICNkZWZpbmUgU1NJRGF0YUdldCAgICAgICAgICAgICAgICAgICAgICBOT1JPTV9TU0lEYXRhR2V0CisgICAgI2RlZmluZSBTU0lEYXRhR2V0Tm9uQmxvY2tpbmcgICAgICAgICAgIE5PUk9NX1NTSURhdGFHZXROb25CbG9ja2luZworICAgICNkZWZpbmUgU1NJSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICBOT1JPTV9TU0lJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgU1NJSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICBOT1JPTV9TU0lJbnRVbnJlZ2lzdGVyCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gU1NJSW50RW5hYmxlLCBTU0lJbnREaXNhYmxlLCBhbmQgU1NJSW50Q2xlYXIKKy8vIGFzIHRoZSB1aTMySW50RmxhZ3MgcGFyYW1ldGVyLCBhbmQgcmV0dXJuZWQgYnkgU1NJSW50U3RhdHVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgU1NJX1RYRkYgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gVFggRklGTyBoYWxmIGZ1bGwgb3IgbGVzcworI2RlZmluZSBTU0lfUlhGRiAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBSWCBGSUZPIGhhbGYgZnVsbCBvciBtb3JlCisjZGVmaW5lIFNTSV9SWFRPICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFJYIHRpbWVvdXQKKyNkZWZpbmUgU1NJX1JYT1IgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gUlggb3ZlcnJ1bgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVmFsdWVzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gU1NJU3RhdHVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBTU0lfUlhfRlVMTCAgICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBSZWNlaXZlIEZJRk8gZnVsbAorI2RlZmluZSBTU0lfUlhfTk9UX0VNUFRZICAgICAgICAweDAwMDAwMDA0ICAvLyBSZWNlaXZlIEZJRk8gbm90IGVtcHR5CisjZGVmaW5lIFNTSV9UWF9OT1RfRlVMTCAgICAgICAgIDB4MDAwMDAwMDIgIC8vIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwKKyNkZWZpbmUgU1NJX1RYX0VNUFRZICAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gVHJhbnNtaXQgRklGTyBlbXB0eQorI2RlZmluZSBTU0lfU1RBVFVTX01BU0sgICAgICAgICAweDAwMDAwMDBGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFNTSUNvbmZpZ1NldEV4cENsay4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFNTSV9GUkZfTU9UT19NT0RFXzAgICAgIDB4MDAwMDAwMDAgIC8vIE1vdG8gZm10LCBwb2xhcml0eSAwLCBwaGFzZSAwCisjZGVmaW5lIFNTSV9GUkZfTU9UT19NT0RFXzEgICAgIDB4MDAwMDAwMDIgIC8vIE1vdG8gZm10LCBwb2xhcml0eSAwLCBwaGFzZSAxCisjZGVmaW5lIFNTSV9GUkZfTU9UT19NT0RFXzIgICAgIDB4MDAwMDAwMDEgIC8vIE1vdG8gZm10LCBwb2xhcml0eSAxLCBwaGFzZSAwCisjZGVmaW5lIFNTSV9GUkZfTU9UT19NT0RFXzMgICAgIDB4MDAwMDAwMDMgIC8vIE1vdG8gZm10LCBwb2xhcml0eSAxLCBwaGFzZSAxCisjZGVmaW5lIFNTSV9GUkZfVEkgICAgICAgICAgICAgIDB4MDAwMDAwMTAgIC8vIFRJIGZyYW1lIGZvcm1hdAorI2RlZmluZSBTU0lfRlJGX05NVyAgICAgICAgICAgICAweDAwMDAwMDIwICAvLyBOYXRpb25hbCBNaWNyb1dpcmUgZnJhbWUgZm9ybWF0CisKKyNkZWZpbmUgU1NJX01PREVfTUFTVEVSICAgICAgICAgMHgwMDAwMDAwMCAgLy8gU1NJIG1hc3RlcgorI2RlZmluZSBTU0lfTU9ERV9TTEFWRSAgICAgICAgICAweDAwMDAwMDAxICAvLyBTU0kgc2xhdmUKKyNkZWZpbmUgU1NJX01PREVfU0xBVkVfT0QgICAgICAgMHgwMDAwMDAwMiAgLy8gU1NJIHNsYXZlIHdpdGggb3V0cHV0IGRpc2FibGVkCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFNTSURNQUVuYWJsZSgpIGFuZCBTU0lETUFEaXNhYmxlKCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBTU0lfRE1BX1RYICAgICAgICAgICAgICAweDAwMDAwMDAyICAvLyBFbmFibGUgRE1BIGZvciB0cmFuc21pdAorI2RlZmluZSBTU0lfRE1BX1JYICAgICAgICAgICAgICAweDAwMDAwMDAxICAvLyBFbmFibGUgRE1BIGZvciByZWNlaXZlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZkZWYgRFJJVkVSTElCX0RFQlVHCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxpbnRlcm5hbAorLy8hCisvLyEgXGJyaWVmIENoZWNrcyBhbiBTU0kgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGFuIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgXGMgdHJ1ZSBpZiB0aGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkIGFuZCBcYyBmYWxzZQorLy8hIG90aGVyd2lzZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgYm9vbAorU1NJQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBTU0kwX0JBU0UgfHwgdWkzMkJhc2UgPT0gU1NJMV9CQVNFKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmVzIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuICBJdCBzZXRzCisvLyEgdGhlIFNTSSBwcm90b2NvbCwgbW9kZSBvZiBvcGVyYXRpb24sIGJpdCByYXRlLCBhbmQgZGF0YSB3aWR0aC4KKy8vIQorLy8hIFRoZSBcYyB1aTMyUHJvdG9jb2wgcGFyYW1ldGVyIGRlZmluZXMgdGhlIGRhdGEgZnJhbWUgZm9ybWF0LiBUaGUgTW90b3JvbGEKKy8vISBmcmFtZSBmb3JtYXRzIGltcGx5IHRoZSBmb2xsb3dpbmcgcG9sYXJpdHkgYW5kIHBoYXNlIGNvbmZpZ3VyYXRpb25zOgorLy8hCisvLyEgPHByZT4KKy8vISBQb2xhcml0eSBQaGFzZSAgICAgICBNb2RlCisvLyEgICAwICAgICAgIDAgICBTU0lfRlJGX01PVE9fTU9ERV8wCisvLyEgICAwICAgICAgIDEgICBTU0lfRlJGX01PVE9fTU9ERV8xCisvLyEgICAxICAgICAgIDAgICBTU0lfRlJGX01PVE9fTU9ERV8yCisvLyEgICAxICAgICAgIDEgICBTU0lfRlJGX01PVE9fTU9ERV8zCisvLyEgPC9wcmU+CisvLyEKKy8vISBUaGUgXGMgdWkzMk1vZGUgcGFyYW1ldGVyIGRlZmluZXMgdGhlIG9wZXJhdGluZyBtb2RlIG9mIHRoZSBTU0kgbW9kdWxlLgorLy8hIFRoZSBTU0kgbW9kdWxlIGNhbiBvcGVyYXRlIGFzIGEgbWFzdGVyIG9yIHNsYXZlOyBpZiBhIHNsYXZlLCB0aGUgU1NJIGNhbiBiZQorLy8hIGNvbmZpZ3VyZWQgdG8gZGlzYWJsZSBvdXRwdXQgb24gaXRzIHNlcmlhbCBvdXRwdXQgbGluZS4KKy8vIQorLy8hIFRoZSBcYyB1aTMyQml0UmF0ZSBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgYml0IHJhdGUgZm9yIHRoZSBTU0kuIFRoaXMgYml0CisvLyEgcmF0ZSBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyBjbG9jayByYXRpbyBjcml0ZXJpYToKKy8vISAtIE1hc3RlciBtb2RlIDogRlNTSSA+PSAyICogYml0IHJhdGUKKy8vISAtIFNsYXZlIG1vZGUgIDogRlNTSSA+PSAxMiAqIGJpdCByYXRlCisvLyEKKy8vISB3aGVyZSBGU1NJIGlzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGNsb2NrIHN1cHBsaWVkIHRvIHRoZSBTU0kgbW9kdWxlLgorLy8hCisvLyEgVGhlIFxjIHVpMzJEYXRhV2lkdGggcGFyYW1ldGVyIGRlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBkYXRhIHRyYW5zZmVycywgYW5kCisvLyEgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiA0IGFuZCAxNiwgaW5jbHVzaXZlLgorLy8hCisvLyEgXG5vdGUgVGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBwcm9jZXNzb3IgY2xvY2suCisvLyEgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgcGVyaXBoZXJhbCBjbG9jayBpcyBzZXQgYnkgdGhlIHN5c3RlbSBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJTU0lDbGsgaXMgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIHN1cHBsaWVkIHRvIHRoZSBTU0kgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyUHJvdG9jb2wgc3BlY2lmaWVzIHRoZSBkYXRhIHRyYW5zZmVyIHByb3RvY29sLgorLy8hIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgU1NJX0ZSRl9NT1RPX01PREVfMAorLy8hIC0gXHJlZiBTU0lfRlJGX01PVE9fTU9ERV8xCisvLyEgLSBccmVmIFNTSV9GUkZfTU9UT19NT0RFXzIKKy8vISAtIFxyZWYgU1NJX0ZSRl9NT1RPX01PREVfMworLy8hIC0gXHJlZiBTU0lfRlJGX1RJCisvLyEgLSBccmVmIFNTSV9GUkZfTk1XLgorLy8hIFxwYXJhbSB1aTMyTW9kZSBzcGVjaWZpZXMgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uLgorLy8hIFRoZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgU1NJX01PREVfTUFTVEVSCisvLyEgLSBccmVmIFNTSV9NT0RFX1NMQVZFCisvLyEgLSBccmVmIFNTSV9NT0RFX1NMQVZFX09ECisvLyEgXHBhcmFtIHVpMzJCaXRSYXRlIHNwZWNpZmllcyB0aGUgY2xvY2sgcmF0ZS4KKy8vISBccGFyYW0gdWkzMkRhdGFXaWR0aCBzcGVjaWZpZXMgbnVtYmVyIG9mIGJpdHMgdHJhbnNmZXJyZWQgcGVyIGZyYW1lLgorLy8hIE11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDE2LCBib3RoIGluY2x1ZGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU1NJQ29uZmlnU2V0RXhwQ2xrKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyU1NJQ2xrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJQcm90b2NvbCwgdWludDMyX3QgdWkzMk1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJpdFJhdGUsIHVpbnQzMl90IHVpMzJEYXRhV2lkdGgpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBvcGVyYXRpb24gb2YgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0LiAgVGhlCisvLyEgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSBpdCBpcyBlbmFibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU1NJRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmVhZC1tb2RpZnktd3JpdGUgdGhlIGVuYWJsZSBiaXQuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFNTSV9PX0NSMSkgfD0gU1NJX0NSMV9TU0U7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgb3BlcmF0aW9uIG9mIHRoZSBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1NTSURpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZWFkLW1vZGlmeS13cml0ZSB0aGUgZW5hYmxlIGJpdC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fQ1IxKSAmPSB+KFNTSV9DUjFfU1NFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUHV0cyBhIGRhdGEgZWxlbWVudCBpbnRvIHRoZSBTU0kgdHJhbnNtaXQgRklGTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcGxhY2VzIHRoZSBzdXBwbGllZCBkYXRhIGludG8gdGhlIHRyYW5zbWl0IEZJRk8gb2YgdGhlCisvLyEgc3BlY2lmaWVkIFNTSSBtb2R1bGUuCisvLyEKKy8vISBcbm90ZSBUaGUgdXBwZXIgMzIgLSBOIGJpdHMgb2YgdGhlIFxjIHVpMzJEYXRhIGFyZSBkaXNjYXJkZWQgYnkgdGhlCisvLyEgaGFyZHdhcmUsIHdoZXJlIE4gaXMgdGhlIGRhdGEgd2lkdGggYXMgY29uZmlndXJlZCBieSBccmVmIFNTSUNvbmZpZ1NldEV4cENsaygpLgorLy8hIEZvciBleGFtcGxlLCBpZiB0aGUgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQgZm9yIDgtYml0IGRhdGEgd2lkdGgsIHRoZSB1cHBlcgorLy8hIDI0IGJpdHMgb2YgXGMgdWkzMkRhdGEgYXJlIGRpc2NhcmRlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMyRGF0YSBpcyB0aGUgZGF0YSB0byBiZSB0cmFuc21pdHRlZCBvdmVyIHRoZSBTU0kgaW50ZXJmYWNlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU1NJRGF0YVB1dCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRhdGEpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQdXRzIGEgZGF0YSBlbGVtZW50IGludG8gdGhlIFNTSSB0cmFuc21pdCBGSUZPLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBwbGFjZXMgdGhlIHN1cHBsaWVkIGRhdGEgaW50byB0aGUgdHJhbnNtaXQgRklGTyBvZiB0aGUKKy8vISBzcGVjaWZpZWQgU1NJIG1vZHVsZS4gSWYgdGhlcmUgaXMgbm8gc3BhY2UgaW4gdGhlIEZJRk8sIHRoZW4gdGhpcyBmdW5jdGlvbgorLy8hIHJldHVybnMgYSB6ZXJvLgorLy8hCisvLyEgXG5vdGUgVGhlIHVwcGVyIDMyIC0gTiBiaXRzIG9mIHRoZSBcYyB1aTMyRGF0YSBhcmUgZGlzY2FyZGVkIGJ5IHRoZSBoYXJkd2FyZSwKKy8vISB3aGVyZSBOIGlzIHRoZSBkYXRhIHdpZHRoIGFzIGNvbmZpZ3VyZWQgYnkgXHJlZiBTU0lDb25maWdTZXRFeHBDbGsoKS4gRm9yCisvLyEgZXhhbXBsZSwgaWYgdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkIGZvciA4LWJpdCBkYXRhIHdpZHRoLCB0aGUgdXBwZXIgMjQKKy8vISBiaXRzIG9mIFxjIHVpMzJEYXRhIGFyZSBkaXNjYXJkZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gdWkzMkRhdGEgaXMgdGhlIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgU1NJIGludGVyZmFjZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdyaXR0ZW4gdG8gdGhlIFNTSSB0cmFuc21pdCBGSUZPLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiBpbnQzMl90IFNTSURhdGFQdXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkRhdGEpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIGEgZGF0YSBlbGVtZW50IGZyb20gdGhlIFNTSSByZWNlaXZlIEZJRk8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSByZWNlaXZlIEZJRk8gb2YgdGhlIHNwZWNpZmllZAorLy8hIFNTSSBtb2R1bGUgYW5kIHBsYWNlcyB0aGF0IGRhdGEgaW50byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZQorLy8hIFxjIHB1aTMyRGF0YSBwYXJhbWV0ZXIuCisvLyEKKy8vISBcbm90ZSBPbmx5IHRoZSBsb3dlciBOIGJpdHMgb2YgdGhlIHZhbHVlIHdyaXR0ZW4gdG8gXGMgcHVpMzJEYXRhIGNvbnRhaW4KKy8vISB2YWxpZCBkYXRhLCB3aGVyZSBOIGlzIHRoZSBkYXRhIHdpZHRoIGFzIGNvbmZpZ3VyZWQgYnkKKy8vISBccmVmIFNTSUNvbmZpZ1NldEV4cENsaygpLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkIGZvcgorLy8hIDgtYml0IGRhdGEgd2lkdGgsIG9ubHkgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgdmFsdWUgd3JpdHRlbiB0bworLy8hIFxjIHB1aTMyRGF0YSBjb250YWluIHZhbGlkIGRhdGEuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2Ugc3BlY2lmaWVzIHRoZSBTU0kgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vISBccGFyYW0gcHVpMzJEYXRhIGlzIGEgcG9pbnRlciB0byBhIHN0b3JhZ2UgbG9jYXRpb24gZm9yIGRhdGEgdGhhdCB3YXMKKy8vISByZWNlaXZlZCBvdmVyIHRoZSBTU0kgaW50ZXJmYWNlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgU1NJRGF0YUdldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgKnB1aTMyRGF0YSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgYSBkYXRhIGVsZW1lbnQgZnJvbSB0aGUgU1NJIHJlY2VpdmUgRklGTy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZ2V0cyByZWNlaXZlZCBkYXRhIGZyb20gdGhlIHJlY2VpdmUgRklGTyBvZiB0aGUgc3BlY2lmaWVkIFNTSQorLy8hIG1vZHVsZSBhbmQgcGxhY2VzIHRoYXQgZGF0YSBpbnRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIFxjIHVpMzJEYXRhCisvLyEgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBubyBkYXRhIGluIHRoZSBGSUZPLCB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCisvLyEgemVyby4KKy8vIQorLy8hIFxub3RlIE9ubHkgdGhlIGxvd2VyIE4gYml0cyBvZiB0aGUgdmFsdWUgd3JpdHRlbiB0byBcYyBwdWkzMkRhdGEgY29udGFpbgorLy8hIHZhbGlkIGRhdGEsIHdoZXJlIE4gaXMgdGhlIGRhdGEgd2lkdGggYXMgY29uZmlndXJlZCBieQorLy8hIFxyZWYgU1NJQ29uZmlnU2V0RXhwQ2xrKCkuIEZvciBleGFtcGxlLCBpZiB0aGUgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQgZm9yCisvLyEgOC1iaXQgZGF0YSB3aWR0aCwgb25seSB0aGUgbG93ZXIgOCBiaXRzIG9mIHRoZSB2YWx1ZSB3cml0dGVuIHRvIFxjIHB1aTMyRGF0YQorLy8hIGNvbnRhaW4gdmFsaWQgZGF0YS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSBwdWkzMkRhdGEgaXMgYSBwb2ludGVyIHRvIGEgc3RvcmFnZSBsb2NhdGlvbiBmb3IgZGF0YSB0aGF0IHdhcworLy8hIHJlY2VpdmVkIG92ZXIgdGhlIFNTSSBpbnRlcmZhY2UuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZWFkIGZyb20gdGhlIFNTSSByZWNlaXZlIEZJRk8uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgU1NJRGF0YUdldE5vbkJsb2NraW5nKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCAqcHVpMzJEYXRhKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBTU0kgdHJhbnNtaXR0ZXIgaXMgYnVzeSBvciBub3QuCisvLyEKKy8vISBBbGxvd3MgdGhlIGNhbGxlciB0byBkZXRlcm1pbmUgd2hldGhlciBhbGwgdHJhbnNtaXR0ZWQgYnl0ZXMgaGF2ZSBjbGVhcmVkCisvLyEgdGhlIHRyYW5zbWl0dGVyIGhhcmR3YXJlLiBJZiBcYyBmYWxzZSBpcyByZXR1cm5lZCwgdGhlbiB0aGUgdHJhbnNtaXQgRklGTworLy8hIGlzIGVtcHR5IGFuZCBhbGwgYml0cyBvZiB0aGUgbGFzdCB0cmFuc21pdHRlZCB3b3JkIGhhdmUgbGVmdCB0aGUgaGFyZHdhcmUKKy8vISBzaGlmdCByZWdpc3Rlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBTU0kgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdGhlIFNTSSB0cmFuc21pdCBidWZmZXIuCisvLyEgLSBcYyB0cnVlICA6IFNTSSBpcyB0cmFuc21pdHRpbmcuCisvLyEgLSBcYyBmYWxzZSA6IFNTSSB0cmFuc21pc3Npb25zIGFyZSBjb21wbGV0ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorU1NJQnVzeSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIERldGVybWluZSBpZiB0aGUgU1NJIGlzIGJ1c3kuCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fU1IpICYgU1NJX1NSX0JTWSkgPyB0cnVlIDogZmFsc2UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgU1NJIGRhdGEgYnVmZmVycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwb2xsIHRoZSBzdGF0dXMgb2YgdGhlIGludGVybmFsIEZJRk9zIGluIHRoZSBTU0kKKy8vISBtb2R1bGUuIFRoZSBzdGF0dXMgb2YgYm90aCBUWCBhbmQgUlggRklGTyBpcyByZXR1cm5lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaW50ZXJuYWwgU1NJIGRhdGEgYnVmZmVycy4KKy8vISBUaGUgc3RhdHVzIGlzIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZjoKKy8vISAtIFxyZWYgU1NJX1JYX0ZVTEwgICAgICAgIDogUmVjZWl2ZSBGSUZPIGZ1bGwuCisvLyEgLSBccmVmIFNTSV9SWF9OT1RfRU1QVFkgICA6IFJlY2VpdmUgRklGTyBub3QgZW1wdHkuCisvLyEgLSBccmVmIFNTSV9UWF9OT1RfRlVMTCAgICA6IFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwuCisvLyEgLSBccmVmIFNTSV9UWF9FTVBUWSAgICAgICA6IFRyYW5zbWl0IEZJRk8gZW1wdHkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitTU0lTdGF0dXModWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHN0YXR1cworICAgIC8vCisgICAgcmV0dXJuIChIV1JFRyh1aTMyQmFzZSArIFNTSV9PX1NSKSAmIFNTSV9TVEFUVVNfTUFTSyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0LgorLy8hCisvLyEgVGhpcyBzZXRzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGFuIFNTSSBpbnRlcnJ1cHQKKy8vISBvY2N1cnMuIFRoaXMgd2lsbCBlbmFibGUgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOworLy8hIHNwZWNpZmljIFNTSSBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBTU0lJbnRFbmFibGUoKS4gSWYgbmVjZXNzYXJ5LAorLy8hIGl0IGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlCisvLyEgdmlhIFxyZWYgU1NJSW50Q2xlYXIoKS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFNTSUludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVbnJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgU1NJCisvLyEgaW50ZXJydXB0IG9jY3Vycy4gVGhpcyB3aWxsIGFsc28gbWFzayBvZmYgdGhlIGludGVycnVwdCBpbiB0aGUgaW50ZXJydXB0CisvLyEgY29udHJvbGxlciBzbyB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBubyBsb25nZXIgaXMgY2FsbGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTU0lJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBpbmRpdmlkdWFsIFNTSSBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIEVuYWJsZXMgdGhlIGluZGljYXRlZCBTU0kgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlIHNvdXJjZXMgdGhhdCBhcmUKKy8vISBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7IGRpc2FibGVkIHNvdXJjZXMgaGF2ZQorLy8hIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIC0gXHJlZiBTU0lfVFhGRgorLy8hIC0gXHJlZiBTU0lfUlhGRgorLy8hIC0gXHJlZiBTU0lfUlhUTworLy8hIC0gXHJlZiBTU0lfUlhPUgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1NTSUludEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChTU0lCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fSU1TQykgfD0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBpbmRpdmlkdWFsIFNTSSBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIERpc2FibGVzIHRoZSBpbmRpY2F0ZWQgU1NJIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIHNwZWNpZmllcyB0aGUgU1NJIG1vZHVsZSBiYXNlIGFkZHJlc3MuCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKy8vISAtIFxyZWYgU1NJX1RYRkYKKy8vISAtIFxyZWYgU1NJX1JYRkYKKy8vISAtIFxyZWYgU1NJX1JYVE8KKy8vISAtIFxyZWYgU1NJX1JYT1IKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTU0lJbnREaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fSU1TQykgJj0gfih1aTMySW50RmxhZ3MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgU1NJIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCBTU0kgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCB0aGV5IG5vIGxvbmdlcgorLy8hIGFzc2VydC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCB0aGUKKy8vISBpbnRlcnJ1cHRzIGZyb20gYmVpbmcgcmVjb2duaXplZCBhZ2FpbiBpbW1lZGlhdGVseSB1cG9uIGV4aXQuCisvLyEKKy8vISBcbm90ZSBEdWUgdG8gd3JpdGUgYnVmZmVycyBhbmQgc3luY2hyb25pemVycyBpbiB0aGUgc3lzdGVtIGl0IG1heSB0YWtlIHNldmVyYWwKKy8vISBjbG9jayBjeWNsZXMgZnJvbSBhIHJlZ2lzdGVyIHdyaXRlIGNsZWFyaW5nIGFuIGV2ZW50IGluIGEgbW9kdWxlIGFuZCB1bnRpbCB0aGUKKy8vISBldmVudCBpcyBhY3R1YWxseSBjbGVhcmVkIGluIHRoZSBOVklDIG9mIHRoZSBzeXN0ZW0gQ1BVLiBJdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGNsZWFyIHRoZSBldmVudCBzb3VyY2UgZWFybHkgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKElTUikgdG8gYWxsb3cKKy8vISB0aGUgZXZlbnQgY2xlYXIgdG8gcHJvcGFnYXRlIHRvIHRoZSBOVklDIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSLgorLy8hIEF0IHRoZSBzYW1lIHRpbWUsIGFuIGVhcmx5IGV2ZW50IGNsZWFyIGFsbG93cyBuZXcgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUKKy8vISBwZW5kZWQgaW5zdGVhZCBvZiBpZ25vcmVkIGlmIHRoZSBldmVudCBpcyBjbGVhcmVkIGxhdGVyIGluIHRoZSBJU1IuCisvLyEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCB0aW1lIGhhcyBwYXNzZWQKKy8vISBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUiB0byBhdm9pZCBmYWxzZSByZS10cmlnZ2VyaW5nIG9mIHRoZSBjbGVhcmVkIGV2ZW50LgorLy8hIEEgc2ltcGxlLCBhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgb3B0aW1hbCwgd2F5IG9mIGNsZWFyaW5nIGFuIGV2ZW50IGJlZm9yZQorLy8hIHJldHVybmluZyBmcm9tIHRoZSBJU1IgaXM6CisvLyEgLSMgV3JpdGUgdG8gY2xlYXIgZXZlbnQgKGludGVycnVwdCBzb3VyY2UpLiAoYnVmZmVyZWQgd3JpdGUpCisvLyEgLSMgRHVtbXkgcmVhZCBmcm9tIHRoZSBldmVudCBzb3VyY2UgbW9kdWxlLiAobWFraW5nIHN1cmUgdGhlIHdyaXRlIGhhcyBwcm9wYWdhdGVkKQorLy8hIC0jIFdhaXQgdHdvIHN5c3RlbSBDUFUgY2xvY2sgY3ljbGVzICh1c2VyIGNvZGUgb3IgdHdvIE5PUHMpLiAoYWxsb3dpbmcgY2xlYXJlZCBldmVudCB0byBwcm9wYWdhdGUgdGhyb3VnaCBhbnkgc3luY2hyb25pemVycykKKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgY2xlYXJlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGNhbiBjb25zaXN0IG9mIGVpdGhlciBvciBib3RoIG9mOgorLy8hIC0gXHJlZiBTU0lfUlhUTyA6IFRpbWVvdXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBTU0lfUlhPUiA6IE92ZXJydW4gaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1NTSUludENsZWFyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcmVxdWVzdGVkIGludGVycnVwdCBzb3VyY2VzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBTU0lfT19JQ1IpID0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBTU0kgbW9kdWxlLiAgRWl0aGVyIHRoZQorLy8hIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSBzdGF0dXMgb2YgaW50ZXJydXB0cyB0aGF0IGFyZSBhbGxvd2VkIHRvCisvLyEgcmVmbGVjdCB0byB0aGUgcHJvY2Vzc29yIGNhbiBiZSByZXR1cm5lZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIFNTSSBtb2R1bGUgYmFzZSBhZGRyZXNzLgorLy8hIFxwYXJhbSBiTWFza2VkIHNlbGVjdHMgZWl0aGVyIHJhdyBvciBtYXNrZWQgaW50ZXJydXB0LgorLy8hIFxjIGZhbHNlIDogUmF3IGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWlyZWQuCisvLyEgXGMgdHJ1ZSAgOiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1aXJlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFzIGFuIE9SJ2VkIGNvbWJpbmF0aW9uIG9mOgorLy8hIC0gXHJlZiBTU0lfVFhGRgorLy8hIC0gXHJlZiBTU0lfUlhGRgorLy8hIC0gXHJlZiBTU0lfUlhUTworLy8hIC0gXHJlZiBTU0lfUlhPUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorU1NJSW50U3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJNYXNrZWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJNYXNrZWQpCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyBTU0lfT19NSVMpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgU1NJX09fUklTKSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgU1NJIERNQSBvcGVyYXRpb24uCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIFNTSSBETUEgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFRoZSBTU0kgY2FuIGJlCisvLyEgY29uZmlndXJlZCB0byB1c2UgRE1BIGZvciB0cmFuc21pdCBhbmQvb3IgcmVjZWl2ZSBkYXRhIHRyYW5zZmVycy4KKy8vIQorLy8hIFxub3RlIFRoZSB1RE1BIGNvbnRyb2xsZXIgbXVzdCBhbHNvIGJlIHNldCB1cCBiZWZvcmUgRE1BIGNhbiBiZSB1c2VkCisvLyEgd2l0aCB0aGUgU1NJLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFNTSSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyRE1BRmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgRE1BIGZlYXR1cmVzIHRvIGVuYWJsZS4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgU1NJX0RNQV9SWCA6IEVuYWJsZSBETUEgZm9yIHJlY2VpdmUuCisvLyEgLSBccmVmIFNTSV9ETUFfVFggOiBFbmFibGUgRE1BIGZvciB0cmFuc21pdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTU0lETUFFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJETUFGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoU1NJQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgcmVxdWVzdGVkIGJpdHMgaW4gdGhlIFNTSSBETUEgY29udHJvbCByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fRE1BQ1IpIHw9IHVpMzJETUFGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZSBTU0kgRE1BIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIFNTSSBETUEgZmVhdHVyZXMgdGhhdCB3ZXJlIGVuYWJsZWQKKy8vISBieSBccmVmIFNTSURNQUVuYWJsZSgpLiBUaGUgc3BlY2lmaWVkIFNTSSBETUEgZmVhdHVyZXMgYXJlIGRpc2FibGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFNTSSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyRE1BRmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgRE1BIGZlYXR1cmVzIHRvIGRpc2FibGUuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFNTSV9ETUFfUlggOiBEaXNhYmxlIERNQSBmb3IgcmVjZWl2ZS4KKy8vISAtIFxyZWYgU1NJX0RNQV9UWCA6IERpc2FibGUgRE1BIGZvciB0cmFuc21pdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTU0lETUFEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyRE1BRmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFNTSUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcmVxdWVzdGVkIGJpdHMgaW4gdGhlIFNTSSBETUEgY29udHJvbCByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgU1NJX09fRE1BQ1IpICY9IH51aTMyRE1BRmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1NTSUNvbmZpZ1NldEV4cENsaworICAgICAgICAjdW5kZWYgIFNTSUNvbmZpZ1NldEV4cENsaworICAgICAgICAjZGVmaW5lIFNTSUNvbmZpZ1NldEV4cENsayAgICAgICAgICAgICAgUk9NX1NTSUNvbmZpZ1NldEV4cENsaworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU1NJRGF0YVB1dAorICAgICAgICAjdW5kZWYgIFNTSURhdGFQdXQKKyAgICAgICAgI2RlZmluZSBTU0lEYXRhUHV0ICAgICAgICAgICAgICAgICAgICAgIFJPTV9TU0lEYXRhUHV0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TU0lEYXRhUHV0Tm9uQmxvY2tpbmcKKyAgICAgICAgI3VuZGVmICBTU0lEYXRhUHV0Tm9uQmxvY2tpbmcKKyAgICAgICAgI2RlZmluZSBTU0lEYXRhUHV0Tm9uQmxvY2tpbmcgICAgICAgICAgIFJPTV9TU0lEYXRhUHV0Tm9uQmxvY2tpbmcKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NTSURhdGFHZXQKKyAgICAgICAgI3VuZGVmICBTU0lEYXRhR2V0CisgICAgICAgICNkZWZpbmUgU1NJRGF0YUdldCAgICAgICAgICAgICAgICAgICAgICBST01fU1NJRGF0YUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU1NJRGF0YUdldE5vbkJsb2NraW5nCisgICAgICAgICN1bmRlZiAgU1NJRGF0YUdldE5vbkJsb2NraW5nCisgICAgICAgICNkZWZpbmUgU1NJRGF0YUdldE5vbkJsb2NraW5nICAgICAgICAgICBST01fU1NJRGF0YUdldE5vbkJsb2NraW5nCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9TU0lJbnRSZWdpc3RlcgorICAgICAgICAjdW5kZWYgIFNTSUludFJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgU1NJSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgICBST01fU1NJSW50UmVnaXN0ZXIKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1NTSUludFVucmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBTU0lJbnRVbnJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgU1NJSW50VW5yZWdpc3RlciAgICAgICAgICAgICAgICBST01fU1NJSW50VW5yZWdpc3RlcgorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19TU0lfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c19jdHJsLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXNfY3RybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzQ3MjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXNfY3RybC5jCkBAIC0wLDAgKzEsNTQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3lzX2N0cmwuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMjUgMTQ6NDU6MjYgKzAyMDAgKFdlZCwgMjUgTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDY0OTIKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbC4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEhhcmR3YXJlIGhlYWRlcnMKKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY2NmZy5oPgorLy8gRHJpdmVybGliIGhlYWRlcnMKKyNpbmNsdWRlIDxkcml2ZXJsaWIvYW9uX2JhdG1vbi5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zeXNfY3RybC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9zZXR1cC5oPgorCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBIYW5kbGUgc3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiB3aWxsIHVuZG8gcHJvdG90eXBlIHJlbmFtaW5nIG1hZGUgaW4gdGhlIGhlYWRlciBmaWxlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI3VuZGVmICBTeXNDdHJsUG93ZXJFdmVyeXRoaW5nCisgICAgI2RlZmluZSBTeXNDdHJsUG93ZXJFdmVyeXRoaW5nICAgICAgICAgIE5PUk9NX1N5c0N0cmxQb3dlckV2ZXJ5dGhpbmcKKyAgICAjdW5kZWYgIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93bgorICAgICNkZWZpbmUgU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duIE5PUk9NX1N5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93bgorICAgICN1bmRlZiAgU3lzQ3RybEFkanVzdFJlY2hhcmdlQWZ0ZXJQb3dlckRvd24KKyAgICAjZGVmaW5lIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duIE5PUk9NX1N5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duCisgICAgI3VuZGVmICBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbAorICAgICNkZWZpbmUgU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wgTk9ST01fU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wKKyAgICAjdW5kZWYgIFN5c0N0cmxSZXNldFNvdXJjZUdldAorICAgICNkZWZpbmUgU3lzQ3RybFJlc2V0U291cmNlR2V0ICAgICAgICAgICBOT1JPTV9TeXNDdHJsUmVzZXRTb3VyY2VHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVjaGFyZ2UgY2FsY3VsYXRvciBkZWZpbmVzIGFuZCBnbG9iYWxzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjZGVmaW5lICBQRF9TVEFURV9DQUNIRV9SRVQgICAgICAxCisjZGVmaW5lICBQRF9TVEFURV9SRk1FTV9SRVQgICAgICAyCisjZGVmaW5lICBQRF9TVEFURV9YT1NDX0xQTSAgICAgICA0CisjZGVmaW5lICBQRF9TVEFURV9FWFRfUkVHX01PREUgICA4CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQzMl90ICAgIHBkVGltZSAgICAgICAgICAgICAgIDsKKyAgIHVpbnQxNl90ICAgIHBkUmVjaGFyZ2VQZXJpb2QgICAgIDsKKyAgIHVpbnQ4X3QgICAgIHBkU3RhdGUgICAgICAgICAgICAgIDsKKyAgIGludDhfdCAgICAgIHBkVGVtcCAgICAgICAgICAgICAgIDsKK30gUG93ZXJRdWFsR2xvYmFsc190OworCitzdGF0aWMgUG93ZXJRdWFsR2xvYmFsc190IHBvd2VyUXVhbEdsb2JhbHM7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFycmF5cyB0aGF0IG1hcHMgdGhlICJwZXJpcGhlcmFsIHNldCIgbnVtYmVyICh3aGljaCBpcyBzdG9yZWQgaW4gdGhlCisvLyB0aGlyZCBuaWJibGUgb2YgdGhlIFBSQ01fUEVSSVBIXyogZGVmaW5lcykgdG8gdGhlIFBSQ00gcmVnaXN0ZXIgdGhhdAorLy8gY29udGFpbnMgdGhlIHJlbGV2YW50IGJpdCBmb3IgdGhhdCBwZXJpcGhlcmFsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8gUnVuIG1vZGUgcmVnaXN0ZXJzCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ19wdWkzMk1vZHVsZUNHW10gPQoreworICAgIFBSQ01fUEVSSVBIX1RJTUVSMCwKKyAgICBQUkNNX1BFUklQSF9USU1FUjEsCisgICAgUFJDTV9QRVJJUEhfVElNRVIyLAorICAgIFBSQ01fUEVSSVBIX1RJTUVSMywKKyAgICBQUkNNX1BFUklQSF9TU0kwLAorICAgIFBSQ01fUEVSSVBIX1NTSTEsCisgICAgUFJDTV9QRVJJUEhfVUFSVDAsCisgICAgUFJDTV9QRVJJUEhfSTJDMCwKKyAgICBQUkNNX1BFUklQSF9VRE1BLAorICAgIFBSQ01fUEVSSVBIX1RSTkcsCisgICAgUFJDTV9QRVJJUEhfQ1JZUFRPLAorICAgIFBSQ01fUEVSSVBIX0dQSU8sCisgICAgUFJDTV9QRVJJUEhfSTJTCit9OworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBQb3dlciB1cCBldmVyeXRoaW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU3lzQ3RybFBvd2VyRXZlcnl0aGluZyh2b2lkKQoreworICAgIHVpbnQzMl90IHVpMzJJZHg7CisgICAgdWludDMyX3QgdWkzMkF1eENsb2NrczsKKworICAgIC8vCisgICAgLy8gRm9yY2UgcG93ZXIgb24gQVVYCisgICAgLy8KKyAgICBBT05XVUNBdXhXYWtldXBFdmVudChBT05XVUNfQVVYX1dBS0VVUCk7CisgICAgd2hpbGUoIShBT05XVUNQb3dlclN0YXR1c0dldCgpICYgQU9OV1VDX0FVWF9QT1dFUl9PTikpCisgICAgeyB9CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBhbGwgdGhlIEFVWCBkb21haW4gY2xvY2tzIGFuZCB3YWl0IGZvciB0aGVtIHRvIGJlIHJlYWR5CisgICAgLy8KKyAgICB1aTMyQXV4Q2xvY2tzID0gQVVYX1dVQ19BRElfQ0xPQ0sgfCBBVVhfV1VDX09TQ0NUUkxfQ0xPQ0sgfAorICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX1REQ0lGX0NMT0NLIHwgQVVYX1dVQ19BTkFJRl9DTE9DSyB8CisgICAgICAgICAgICAgICAgICAgIEFVWF9XVUNfVElNRVJfQ0xPQ0sgfCBBVVhfV1VDX0FJT0RJTzBfQ0xPQ0sgfAorICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX0FJT0RJTzFfQ0xPQ0sgfCBBVVhfV1VDX1NNUEhfQ0xPQ0sgfAorICAgICAgICAgICAgICAgICAgICBBVVhfV1VDX1REQ19DTE9DSyB8IEFVWF9XVUNfQURDX0NMT0NLIHwKKyAgICAgICAgICAgICAgICAgICAgQVVYX1dVQ19SRUZfQ0xPQ0s7CisgICAgQVVYV1VDQ2xvY2tFbmFibGUodWkzMkF1eENsb2Nrcyk7CisgICAgd2hpbGUoQVVYV1VDQ2xvY2tTdGF0dXModWkzMkF1eENsb2NrcykgIT0gQVVYX1dVQ19DTE9DS19SRUFEWSkKKyAgICB7IH0KKworICAgIC8vCisgICAgLy8gUmVxdWVzdCB0byBzd2l0Y2ggdG8gdGhlIGNyeXN0YWwgdG8gZW5hYmxlIHJhZGlvIG9wZXJhdGlvbi4KKyAgICAvLyBJdCB0YWtlcyBhIHdoaWxlIGZvciB0aGUgWFRBTCB0byBiZSByZWFkeSBzbyBpdCBpcyBwb3NzaWJsZSB0bworICAgIC8vIHBlcmZvcm0gb3RoZXIgdGFza3Mgd2hpbGUgd2FpdGluZy4KKyAgICBPU0NDbG9ja1NvdXJjZVNldChPU0NfU1JDX0NMS19NRiB8IE9TQ19TUkNfQ0xLX0hGLCBPU0NfWE9TQ19IRik7CisgICAgT1NDQ2xvY2tTb3VyY2VTZXQoT1NDX1NSQ19DTEtfTEYsIE9TQ19YT1NDX0xGKTsKKworICAgIC8vCisgICAgLy8gU3dpdGNoIHRoZSBIRiBzb3VyY2UgdG8gWFRBTCAtIG11c3QgYmUgcGVyZm9ybWVkIHNhZmVseSBvdXQgb2YgUk9NIHRvCisgICAgLy8gYXZvaWQgZmxhc2ggaXNzdWVzIHdoZW4gc3dpdGNoaW5nIHRoZSBjbG9jay4KKyAgICAvLworICAgIC8vIE5CLiBJZiBhbHJlYWR5IHJ1bm5pbmcgWFRBTCBvbiBIRiBjbG9jayBzb3VyY2UgdGhlIFJPTSB3aWxsIHdhaXQgZm9yZXZlcgorICAgIC8vIG9uIGEgZmxhZyB0aGF0IHdpbGwgbmV2ZXIgYmUgc2V0IC0gbmVlZCB0byBjaGVjay4KKyAgICAvLworICAgIGlmKE9TQ0Nsb2NrU291cmNlR2V0KE9TQ19TUkNfQ0xLX0hGKSAhPSBPU0NfWE9TQ19IRikgeworICAgICAgICBPU0NIZlNvdXJjZVN3aXRjaCgpOworICAgIH0KKworICAgIC8vCisgICAgLy8gVHVybiBvbiBhbGwgdGhlIE1DVSBwb3dlciBkb21haW5zCisgICAgLy8gSWYgdGhlIENQVSBpcyBydW5uaW5nIGFuZCBleGVjdXRpbmcgY29kZSB0aGUgU1lTQlVTLCBWSU1TIGFuZCBDUFUgYXJlCisgICAgLy8gYXV0b21hdGljYWxseSBvbiBhcyB3ZWxsLgorICAgIC8vCisgICAgUFJDTVBvd2VyRG9tYWluT24oUFJDTV9ET01BSU5fUkZDT1JFIHwgUFJDTV9ET01BSU5fU0VSSUFMIHwKKyAgICAgICAgICAgICAgICAgICAgICBQUkNNX0RPTUFJTl9QRVJJUEgpOworICAgIC8vCisgICAgLy8gV2FpdCBmb3IgcG93ZXIgdG8gYmUgb24KKyAgICAvLworICAgIHdoaWxlKFBSQ01Qb3dlckRvbWFpblN0YXR1cyhQUkNNX0RPTUFJTl9SRkNPUkUgfCBQUkNNX0RPTUFJTl9TRVJJQUwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkNNX0RPTUFJTl9QRVJJUEgpICE9IFBSQ01fRE9NQUlOX1BPV0VSX09OKTsKKworICAgIFBSQ01Mb2FkU2V0KCk7CisgICAgd2hpbGUoIVBSQ01Mb2FkR2V0KCkpOworCisgICAgLy8KKyAgICAvLyBFbnN1cmUgdGhlIGRvbWFpbiBjbG9ja3MgYXJlIHJ1bm5pbmcgYW5kIHdhaXQgZm9yIHRoZSBjbG9jayBzZXR0aW5ncyB0bworICAgIC8vIHRha2UgZWZmZWN0CisgICAgLy8KKyAgICBQUkNNRG9tYWluRW5hYmxlKFBSQ01fRE9NQUlOX1JGQ09SRSB8IFBSQ01fRE9NQUlOX1ZJTVMpOworICAgIFBSQ01Mb2FkU2V0KCk7CisgICAgd2hpbGUoIVBSQ01Mb2FkR2V0KCkpCisgICAgeyB9CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBhbGwgdGhlIFJGIENvcmUgY2xvY2tzCisgICAgLy8KKyAgICAvLyBEbyBub3QgcmVhZCBiYWNrIHRvIGNoZWNrLCBmb3IgdHdvIHJlYXNvbnM6CisgICAgLy8gMS4gQ1BFIHdpbGwgdXBkYXRlIHRoZSBQV01DTEtFTkFCTEUgcmVnaXN0ZXIgcmlnaHQgYWZ0ZXIgYm9vdAorICAgIC8vIDIuIFRoZSBQV01DTEtFTkFCTEUgcmVnaXN0ZXIgYWx3YXlzIHJlYWRzIGJhY2sgd2hhdCBpcyB3cml0dGVuCisgICAgSFdSRUcoUkZDX1BXUl9OT05CVUZfQkFTRSArIFJGQ19QV1JfT19QV01DTEtFTikgPSAweDdGRjsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIGFsbCBwZXJpcGhlcmFsIGNsb2NrcyBpbiBTeXN0ZW0gQ1BVIHJ1bi9zbGVlcC9kZWVwLXNsZWVwIG1vZGUuCisgICAgLy8KKyAgICBmb3IodWkzMklkeCA9IDA7IHVpMzJJZHggPCBzaXplb2YoZ19wdWkzMk1vZHVsZUNHKSAvIHNpemVvZih1aW50MzJfdCk7CisgICAgICAgIHVpMzJJZHgrKykKKyAgICB7CisgICAgICAgIFBSQ01QZXJpcGhlcmFsUnVuRW5hYmxlKGdfcHVpMzJNb2R1bGVDR1t1aTMySWR4XSk7CisgICAgICAgIFBSQ01QZXJpcGhlcmFsU2xlZXBFbmFibGUoZ19wdWkzMk1vZHVsZUNHW3VpMzJJZHhdKTsKKyAgICAgICAgUFJDTVBlcmlwaGVyYWxEZWVwU2xlZXBFbmFibGUoZ19wdWkzMk1vZHVsZUNHW3VpMzJJZHhdKTsKKyAgICB9CisgICAgUFJDTUxvYWRTZXQoKTsKKyAgICB3aGlsZSghUFJDTUxvYWRHZXQoKSkKKyAgICB7IH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93biggeG9zY1Bvd2VyTW9kZSApCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duKCB1aW50MzJfdCB4b3NjUG93ZXJNb2RlICkKK3sKKyAgIGludDMyX3QgICAgICAgICAgIGN1clRlbXAgICAgICAgICAgICAgICAgIDsKKyAgIGludDMyX3QgICAgICAgICAgIHNoaWZ0ZWRUZW1wICAgICAgICAgICAgIDsKKyAgIGludDMyX3QgICAgICAgICAgIGRlbHRhVmRkclNsZWVwVHJpbSAgICAgIDsKKyAgIGludDMyX3QgICAgICAgICAgIHZkZHJUcmltU2xlZXAgICAgICAgICAgIDsKKyAgIGludDMyX3QgICAgICAgICAgIHZkZHJUcmltQWN0dmUgICAgICAgICAgIDsKKyAgIGludDMyX3QgICAgICAgICAgIGRpZmZWZGRyQWN0aXZlU2xlZXAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGNjZmdfTW9kZUNvbmZSZWcgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGN1clN0YXRlICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIHByY21SYW1SZXRlbnRpb24gICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGRpICAgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGRpaSAgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIHRpICAgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGNkICAgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGNsICAgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGxvYWQgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIGsgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIHZkZHJDYXAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIG5ld1JlY2hhcmdlUGVyaW9kICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIHBlckUgICAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgICAgICAgIHBlck0gICAgICAgICAgICAgICAgICAgIDsKKyAgIGNvbnN0IHVpbnQzMl90ICAqIHBMb29rdXBUYWJsZSAgICAgICAgICAgIDsKKworICAgLy8KKyAgIC8vIElmIGV4dGVybmFsIHJlZ3VsYXRvciBtb2RlIHdlIHNoYWxsOgorICAgLy8gLSBEaXNhYmxlIGFkYXB0aXZlIHJlY2hhcmdlIChiaXRbMzFdPTApIGluIEFPTl9XVUNfT19SRUNIQVJHRUNGRworICAgLy8gLSBTZXQgcmVjaGFyZ2UgcGVyaW9kIHRvIGFwcHJveGltYXRlbHkgNTAwIG1TIChwZXJNPTMxLCBwZXJFPTUgPT4gMHhGRCkKKyAgIC8vIC0gTWFrZSBzdXJlIHlvdSBnZXQgYSByZWNhbGN1bGF0aW9uIGlmIGxlYXZpbmcgZXh0ZXJuYWwgcmVndWxhdG9yIG1vZGUgYnkgc2V0dGluZyBwb3dlclF1YWxHbG9iYWxzLnBkU3RhdGUgYWNjb3JkaW5nbHkKKyAgIC8vCisgICBpZiAoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMICkgJiBBT05fU1lTQ1RMX1BXUkNUTF9FWFRfUkVHX01PREUgKSB7CisgICAgICBwb3dlclF1YWxHbG9iYWxzLnBkU3RhdGUgPSBQRF9TVEFURV9FWFRfUkVHX01PREU7CisgICAgICBIV1JFRyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1JFQ0hBUkdFQ0ZHICApID0gMHgwMEE0RkRGRDsKKyAgICAgIHJldHVybjsKKyAgIH0KKworICAgLy8tLS0gU3BlYy4gcG9pbnQgMSAtLS0KKyAgIGN1clRlbXAgID0gQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCk7CisgICBjdXJTdGF0ZSA9IDA7CisKKyAgIC8vIHJlYWQgdGhlIE1PREVfQ09ORiByZWdpc3RlciBpbiBDQ0ZHCisgICBjY2ZnX01vZGVDb25mUmVnID0gSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19NT0RFX0NPTkYgKTsKKyAgIC8vIEdldCBWRERSX1RSSU1fU0xFRVBfREVMVEEgKyAxIChzaWduIGV4dGVuZGVkKQorICAgZGVsdGFWZGRyU2xlZXBUcmltID0gKCgoKGludDMyX3QpIGNjZmdfTW9kZUNvbmZSZWcgKQorICAgICAgPDwgKCAzMiAtIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9XIC0gQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBX1MgKSkKKyAgICAgID4+ICggMzIgLSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfVyApKSArIDE7CisgICAvLyBEbyB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gaWYgZW5hYmxlZAorICAgaWYgKCggY2NmZ19Nb2RlQ29uZlJlZyAmIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQyApID09IDAgKSB7CisgICAgICBpbnQzMl90IHRjRGVsdGEgPSAoIDYyIC0gY3VyVGVtcCApID4+IDM7CisgICAgICBpZiAoIHRjRGVsdGEgPiA4ICkgdGNEZWx0YSA9IDg7CisgICAgICBpZiAoIHRjRGVsdGEgPiBkZWx0YVZkZHJTbGVlcFRyaW0gKSBkZWx0YVZkZHJTbGVlcFRyaW0gPSB0Y0RlbHRhOworICAgfQorICAgeworICAgICAgdmRkclRyaW1TbGVlcCA9IFNldHVwU2lnbkV4dGVuZFZkZHJUcmltVmFsdWUoKAorICAgICAgICAgSFdSRUcoIEZDRkcxX0JBU0UgKyBGQ0ZHMV9PX0xET19UUklNICkgJgorICAgICAgICAgRkNGRzFfTERPX1RSSU1fVkREUl9UUklNX1NMRUVQX00gKSA+PgorICAgICAgICAgRkNGRzFfTERPX1RSSU1fVkREUl9UUklNX1NMRUVQX1MgKSA7CisgICAgICB2ZGRyVHJpbUFjdHZlID0gU2V0dXBTaWduRXh0ZW5kVmRkclRyaW1WYWx1ZSgoCisgICAgICAgICBIV1JFRyggRkNGRzFfQkFTRSArIEZDRkcxX09fU0hEV19BTkFfVFJJTSApICYKKyAgICAgICAgIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9UUklNX00gKSA+PgorICAgICAgICAgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX1RSSU1fUyApIDsKKyAgIH0KKyAgIHZkZHJUcmltU2xlZXAgKz0gZGVsdGFWZGRyU2xlZXBUcmltOworICAgaWYgKCB2ZGRyVHJpbVNsZWVwID4gIDIxICkgdmRkclRyaW1TbGVlcCA9ICAyMTsKKyAgIGlmICggdmRkclRyaW1TbGVlcCA8IC0xMCApIHZkZHJUcmltU2xlZXAgPSAtMTA7CisgICAvLyBXcml0ZSBhZGp1c3RlZCB2YWx1ZSB1c2luZyBNQVNLRUQgd3JpdGUgKE1BU0s4KQorICAgSFdSRUdIKCBBREkzX0JBU0UgKyBBRElfT19NQVNLOEIgKyAoIEFESV8zX1JFRlNZU19PX0RDRENDVEwxICogMiApKSA9ICgoIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX1RSSU1fU0xFRVBfTSA8PCA4ICkgfAorICAgICAgKCggdmRkclRyaW1TbGVlcCA8PCBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9UUklNX1NMRUVQX1MgKSAmIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX1RSSU1fU0xFRVBfTSApKTsKKworICAgcHJjbVJhbVJldGVudGlvbiA9IEhXUkVHKCBQUkNNX0JBU0UgKyBQUkNNX09fUkFNUkVURU4gKTsKKyAgIGlmICggcHJjbVJhbVJldGVudGlvbiAmIFBSQ01fUkFNUkVURU5fVklNU19NICkgeworICAgICAgY3VyU3RhdGUgfD0gUERfU1RBVEVfQ0FDSEVfUkVUOworICAgfQorICAgaWYgKCBwcmNtUmFtUmV0ZW50aW9uICYgUFJDTV9SQU1SRVRFTl9SRkMgKSB7CisgICAgICBjdXJTdGF0ZSB8PSBQRF9TVEFURV9SRk1FTV9SRVQ7CisgICB9CisgICBpZiAoIHhvc2NQb3dlck1vZGUgIT0gWE9TQ19JTl9ISUdIX1BPV0VSX01PREUgKSB7CisgICAgICBjdXJTdGF0ZSB8PSBQRF9TVEFURV9YT1NDX0xQTTsKKyAgIH0KKworICAgLy8tLS0gU3BlYy4gcG9pbnQgMiAtLS0KKyAgIGlmICgoKCBjdXJUZW1wIC0gcG93ZXJRdWFsR2xvYmFscy5wZFRlbXAgKSA+PSA1ICkgfHwgKCBjdXJTdGF0ZSAhPSBwb3dlclF1YWxHbG9iYWxzLnBkU3RhdGUgKSkgeworICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgMyAtLS0KKyAgICAgIHNoaWZ0ZWRUZW1wID0gY3VyVGVtcCAtIDE1OworCisgICAgICAvLy0tLSBTcGVjIHBvaW50IDQgLS0tCisgICAgICAvLzQuIENoZWNrIGZvciBleHRlcm5hbCBWRERSIGxvYWQgb3B0aW9uIChtYXkgbm90IGJlIHN1cHBvcnRlZCk6IGV4dF9sb2FkID0gKFZERFJfRVhUX0xPQUQ9MCBpbiBDQ0ZHKQorICAgICAgLy8gQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRpbmcgZXh0ZXJuYWwgbG9hZCBoYW5kbGluZworICAgICAgLy8gaWYgKCBfX2NjZmcudWxNb2RlQ29uZmlnICYgTU9ERV9DT05GX1ZERFJfRVhUX0xPQUQgKSB7CisgICAgICAvLyB9CisKKyAgICAgIHBMb29rdXBUYWJsZSA9ICh1aW50MzJfdCAqKSggRkNGRzFfQkFTRSArIEZDRkcxX09fUFdEX0NVUlJfMjBDICk7CisKKyAgICAgIC8vLS0tIFNwZWMgcG9pbnQgNSAtLS0KKyAgICAgIGRpICAgID0gMDsKKyAgICAgIHRpICAgID0gMDsKKyAgICAgIGlmICggc2hpZnRlZFRlbXAgPj0gMCApIHsKKyAgICAgICAgIC8vLS0tIFNwZWMgcG9pbnQgNS5hIC0tLQorICAgICAgICAgc2hpZnRlZFRlbXAgKz0gKCBzaGlmdGVkVGVtcCA8PCA0ICk7CisKKyAgICAgICAgIC8vLS0tIFNwZWMgcG9pbnQgNS5iIC0tLQorICAgICAgICAgdGkgPSAoIHNoaWZ0ZWRUZW1wID4+IDggKTsKKyAgICAgICAgIGlmICggdGkgPiA3ICkgeworICAgICAgICAgICAgdGkgPSA3OworICAgICAgICAgfQorICAgICAgICAgZGlpID0gdGk7CisgICAgICAgICBpZiAoIGRpaSA+IDYgKSB7CisgICAgICAgICAgICBkaWkgPSA2OworICAgICAgICAgfQorCisgICAgICAgICAvLy0tLSBTcGVjIHBvaW50IDUuYyAtLS0KKyAgICAgICAgIGNkID0gcExvb2t1cFRhYmxlWyBkaWkgKyAxIF0gLSBwTG9va3VwVGFibGVbIGRpaSBdOworCisgICAgICAgICAvLy0tLSBTcGVjIHBvaW50IDUuZCAtLS0KKyAgICAgICAgIGRpID0gY2QgJiAweEZGOworCisgICAgICAgICAvLy0tLSBTcGVjIHBvaW50IDUuZSAtLS0KKyAgICAgICAgIGlmICggY3VyU3RhdGUgJiBQRF9TVEFURV9YT1NDX0xQTSApIHsKKyAgICAgICAgICAgIGRpICs9ICgoIGNkID4+IDggKSAmIDB4RkYgKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICggY3VyU3RhdGUgJiBQRF9TVEFURV9SRk1FTV9SRVQgKSB7CisgICAgICAgICAgICBkaSArPSAoKCBjZCA+PiAxNiApICYgMHhGRiApOworICAgICAgICAgfQorICAgICAgICAgaWYgKCBjdXJTdGF0ZSAmIFBEX1NUQVRFX0NBQ0hFX1JFVCApIHsKKyAgICAgICAgICAgIGRpICs9ICgoIGNkID4+IDI0ICkgJiAweEZGICk7CisgICAgICAgICB9CisKKyAgICAgICAgIC8vLS0tIFNwZWMgcG9pbnQgNS5mIC0tLQorICAgICAgICAgLy8gQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRpbmcgZXh0ZXJuYWwgbG9hZCBoYW5kbGluZworICAgICAgfQorCisgICAgICAvLy0tLSBTcGVjLiBwb2ludCA2IC0tLQorICAgICAgY2wgPSBwTG9va3VwVGFibGVbIHRpIF07CisKKyAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDcgLS0tCisgICAgICBsb2FkID0gY2wgJiAweEZGOworCisgICAgICAvLy0tLSBTcGVjLiBwb2ludCA4IC0tLQorICAgICAgaWYgKCBjdXJTdGF0ZSAmIFBEX1NUQVRFX1hPU0NfTFBNICkgeworICAgICAgICAgbG9hZCArPSAoKCBjbCA+PiA4ICkgJiAweEZGICk7CisgICAgICB9CisgICAgICBpZiAoIGN1clN0YXRlICYgUERfU1RBVEVfUkZNRU1fUkVUICkgeworICAgICAgICAgbG9hZCArPSAoKCBjbCA+PiAxNiApICYgMHhGRiApOworICAgICAgfQorICAgICAgaWYgKCBjdXJTdGF0ZSAmIFBEX1NUQVRFX0NBQ0hFX1JFVCApIHsKKyAgICAgICAgIGxvYWQgKz0gKCggY2wgPj4gMjQgKSAmIDB4RkYgKTsKKyAgICAgIH0KKworICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgOSAtLS0KKyAgICAgIGxvYWQgKz0gKCgoIGRpICogKCBzaGlmdGVkVGVtcCAtICggdGkgPDwgOCApKSkgKyAxMjggKSA+PiA4ICk7CisKKyAgICAgIC8vIEN1cnJlbnRseSBub3QgaW1wbGVtZW50aW5nIGV4dGVybmFsIGxvYWQgaGFuZGxpbmcKKyAgICAgIC8vIGlmICggX19jY2ZnLnVsTW9kZUNvbmZpZyAmIE1PREVfQ09ORl9WRERSX0VYVF9MT0FEICkgeworICAgICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgMTAgLS0tCisgICAgICAvLyB9IGVsc2UgeworICAgICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgMTEgLS0tCisgICAgICAgICBkaWZmVmRkckFjdGl2ZVNsZWVwID0gKCB2ZGRyVHJpbUFjdHZlIC0gdmRkclRyaW1TbGVlcCApOworICAgICAgICAgaWYgKCBkaWZmVmRkckFjdGl2ZVNsZWVwIDwgMSApIGRpZmZWZGRyQWN0aXZlU2xlZXAgPSAxOworICAgICAgICAgayA9ICggZGlmZlZkZHJBY3RpdmVTbGVlcCAqIDUyICk7CisgICAgICAvLyB9CisKKyAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDEyIC0tLQorCisgICAgICB2ZGRyQ2FwID0gKCBjY2ZnX01vZGVDb25mUmVnICYgQ0NGR19NT0RFX0NPTkZfVkREUl9DQVBfTSApID4+IENDRkdfTU9ERV9DT05GX1ZERFJfQ0FQX1M7CisgICAgICBuZXdSZWNoYXJnZVBlcmlvZCA9ICggdmRkckNhcCAqIGsgKSAvIGxvYWQ7CisgICAgICBpZiAoIG5ld1JlY2hhcmdlUGVyaW9kID4gMHhGRkZGICkgeworICAgICAgICAgbmV3UmVjaGFyZ2VQZXJpb2QgPSAweEZGRkY7CisgICAgICB9CisgICAgICBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2QgPSBuZXdSZWNoYXJnZVBlcmlvZDsKKworICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgMTMgLS0tCisgICAgICBpZiAoIGN1clRlbXAgPiAgMTI3ICkgY3VyVGVtcCA9ICAxMjc7CisgICAgICBpZiAoIGN1clRlbXAgPCAtMTI4ICkgY3VyVGVtcCA9IC0xMjg7CisgICAgICBwb3dlclF1YWxHbG9iYWxzLnBkVGVtcCAgICA9IGN1clRlbXA7CisgICAgICBwb3dlclF1YWxHbG9iYWxzLnBkU3RhdGUgICA9IGN1clN0YXRlOworICAgfQorCisgICBwb3dlclF1YWxHbG9iYWxzLnBkVGltZSAgICA9IEhXUkVHKCBBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU0VDICk7CisKKyAgIC8vIENhbGN1bGF0ZSBQRVJfRSBhbmQgUEVSX00gKGJhc2VkIG9uIHBvd2VyUXVhbEdsb2JhbHMucGRSZWNoYXJnZVBlcmlvZCkKKyAgIC8vIFJvdW5kIGRvd253YXJkcyBidXQgbWFrZSBzdXJlIFBFUl9FPTAgYW5kIFBFUl9NPTEgaXMgdGhlIG1pbmltdW0gcG9zc2libGUgc2V0dGluZy4KKyAgIC8vIChhc3N1bWluZyB0aGF0IHBvd2VyUXVhbEdsb2JhbHMucGRSZWNoYXJnZVBlcmlvZCBhbHdheXMgYXJlIDw9IDB4RkZGRikKKyAgIHBlckUgPSAwOworICAgcGVyTSA9IHBvd2VyUXVhbEdsb2JhbHMucGRSZWNoYXJnZVBlcmlvZDsKKyAgIGlmICggcGVyTSA8IDMxICkgeworICAgICAgcGVyTSA9IDMxOworICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kID0gMzE7CisgICB9CisgICB3aGlsZSAoIHBlck0gPiA1MTEgKSB7CisgICAgICBwZXJNID4+PSAxOworICAgICAgcGVyRSAgKz0gMTsKKyAgIH0KKyAgIHBlck0gPSAoIHBlck0gLSAxNSApID4+IDQ7CisKKyAgIEhXUkVHKCBBT05fV1VDX0JBU0UgKyBBT05fV1VDX09fUkVDSEFSR0VDRkcgKSA9CisgICAgICAoIDB4ODBBNEU3MDAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfAorICAgICAgKCBwZXJNIDw8IEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fUyApIHwKKyAgICAgICggcGVyRSA8PCBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9FX1MgKSA7CisgICBIV1JFRyggQU9OX1dVQ19CQVNFICsgQU9OX1dVQ19PX1JFQ0hBUkdFU1RBVCApID0gMDsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3lzQ3RybEFkanVzdFJlY2hhcmdlQWZ0ZXJQb3dlckRvd24oKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1N5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duKCB2b2lkICkKK3sKKyAgIGludDMyX3QgICAgIGN1clRlbXAgICAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgIGxvbmdlc3RSZWNoYXJnZVBlcmlvZCAgIDsKKyAgIHVpbnQzMl90ICAgIGRlbHRhVGltZSAgICAgICAgICAgICAgIDsKKyAgIHVpbnQzMl90ICAgIG5ld1JlY2hhcmdlUGVyaW9kICAgICAgIDsKKworICAgLy8tLS0gU3BlYy4gcG9pbnQgMiAtLS0KKyAgIGxvbmdlc3RSZWNoYXJnZVBlcmlvZCA9ICggSFdSRUcoIEFPTl9XVUNfQkFTRSArIEFPTl9XVUNfT19SRUNIQVJHRVNUQVQgKSAmCisgICAgICBBT05fV1VDX1JFQ0hBUkdFU1RBVF9NQVhfVVNFRF9QRVJfTSApID4+CisgICAgICBBT05fV1VDX1JFQ0hBUkdFU1RBVF9NQVhfVVNFRF9QRVJfUyA7CisKKyAgIGlmICggbG9uZ2VzdFJlY2hhcmdlUGVyaW9kICE9IDAgKSB7CisgICAgICAvLy0tLSBTcGVjLiBjaGFuZ2VkIChvcmlnaW5hbHkgcG9pbnQgMSkgLS0tCisgICAgICBjdXJUZW1wID0gQU9OQmF0TW9uVGVtcGVyYXR1cmVHZXREZWdDKCk7CisgICAgICBpZiAoIGN1clRlbXAgPCBwb3dlclF1YWxHbG9iYWxzLnBkVGVtcCApIHsKKyAgICAgICAgIGlmICggY3VyVGVtcCA8IC0xMjggKSB7CisgICAgICAgICAgICBjdXJUZW1wID0gLTEyODsKKyAgICAgICAgIH0KKyAgICAgICAgIHBvd2VyUXVhbEdsb2JhbHMucGRUZW1wID0gY3VyVGVtcDsKKyAgICAgIH0KKworICAgICAgLy8tLS0gU3BlYy4gcG9pbnQgNCAtLS0KKyAgICAgIGlmICggbG9uZ2VzdFJlY2hhcmdlUGVyaW9kIDwgcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kICkgeworICAgICAgICAgcG93ZXJRdWFsR2xvYmFscy5wZFJlY2hhcmdlUGVyaW9kID0gbG9uZ2VzdFJlY2hhcmdlUGVyaW9kOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIC8vLS0tIFNwZWMuIHBvaW50IDUgLS0tCisgICAgICAgICBkZWx0YVRpbWUgPSBIV1JFRyggQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NFQyApIC0gcG93ZXJRdWFsR2xvYmFscy5wZFRpbWUgKyAyOworICAgICAgICAgaWYgKCBkZWx0YVRpbWUgPiAzMSApIHsKKyAgICAgICAgICAgIGRlbHRhVGltZSA9IDMxOworICAgICAgICAgfQorICAgICAgICAgbmV3UmVjaGFyZ2VQZXJpb2QgPSBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2QgKyAoKCBsb25nZXN0UmVjaGFyZ2VQZXJpb2QgLSBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2QgKSA+PiAoZGVsdGFUaW1lPj4xKSk7CisgICAgICAgICBpZiAoIG5ld1JlY2hhcmdlUGVyaW9kID4gMHhGRkZGICkgeworICAgICAgICAgICAgbmV3UmVjaGFyZ2VQZXJpb2QgPSAweEZGRkY7CisgICAgICAgICB9CisgICAgICAgICBwb3dlclF1YWxHbG9iYWxzLnBkUmVjaGFyZ2VQZXJpb2QgPSBuZXdSZWNoYXJnZVBlcmlvZDsKKyAgICAgIH0KKyAgIH0KK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2woKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1N5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sKCB2b2lkICkKK3sKKyAgIHVpbnQzMl90IGJhdFRocmVzaG9sZCAgICAgOyAgLy8gRnJhY3Rpb25hbCBmb3JtYXQgd2l0aCA4IGZyYWN0aW9uYWwgYml0cy4KKyAgIHVpbnQzMl90IGFvbkJhdG1vbkJhdCAgICAgOyAgLy8gRnJhY3Rpb25hbCBmb3JtYXQgd2l0aCA4IGZyYWN0aW9uYWwgYml0cy4KKyAgIHVpbnQzMl90IGNjZmdfTW9kZUNvbmZSZWcgOyAgLy8gSG9sZHMgYSBjb3B5IG9mIHRoZSBDQ0ZHX09fTU9ERV9DT05GIHJlZ2lzdGVyLgorICAgdWludDMyX3QgYW9uU3lzY3RsUHdyY3RsICA7ICAvLyBSZWZsZWN0IHdoYXRzIHJlYWQvd3JpdHRlbiB0byB0aGUgQU9OX1NZU0NUTF9PX1BXUkNUTCByZWdpc3Rlci4KKworICAgLy8KKyAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgYW55IGJhdHRlcnkgdm9sdGFnZSBtZWFzdXJlbWVudAorICAgLy8gaXMgbWFkZS9hdmFpbGFibGUuIEluIHRoYXQgY2FzZSB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCB0dXJuIG9mZiB0aGUgRENEQy4KKyAgIC8vIFRoaXMgY2FuIGJlIGRvbmUgYnkgZG9pbmcgbm90aGluZyBhcyBsb25nIGFzIHRoZSBiYXR0ZXJ5IHZvbHRhZ2UgaXMgMCAoU2luY2UgdGhlCisgICAvLyByZXNldCB2YWx1ZSBvZiB0aGUgYmF0dGVyeSB2b2x0YWdlIHJlZ2lzdGVyIGlzIDApLgorICAgLy8KKyAgIGFvbkJhdG1vbkJhdCA9IEhXUkVHKCBBT05fQkFUTU9OX0JBU0UgKyBBT05fQkFUTU9OX09fQkFUICk7CisgICBpZiAoIGFvbkJhdG1vbkJhdCAhPSAwICkgeworICAgICAgLy8KKyAgICAgIC8vIENoZWNrIGlmIFZvbHRhZ2UgQ29uZGl0aW9uYWwgQ29udHJvbCBpcyBlbmFibGVkCisgICAgICAvLyBJdCBpcyBlbmFibGVkIGlmIGFsbCB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgorICAgICAgLy8gLSBEQ0RDIGluIHVzZSAoZWl0aGVyIGluIGFjdGl2ZSBvciByZWNoYXJnZSBtb2RlKSwgKGluIHVzZSBpZiBvbmUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgQ0NGRyBiaXRzIGFyZSB6ZXJvKS4KKyAgICAgIC8vIC0gQWx0ZXJuYXRpdmUgRENEQyBzZXR0aW5ncyBhcmUgZW5hYmxlZCAoIERJU19BTFRfRENEQ19TRVRUSU5HID09IDAgKQorICAgICAgLy8gLSBOb3QgaW4gZXh0ZXJuYWwgcmVndWxhdG9yIG1vZGUgKCBFWFRfUkVHX01PREUgPT0gMCApCisgICAgICAvLworICAgICAgY2NmZ19Nb2RlQ29uZlJlZyA9IEhXUkVHKCBDQ0ZHX0JBU0UgKyBDQ0ZHX09fTU9ERV9DT05GICk7CisKKyAgICAgIGlmICgoKCggY2NmZ19Nb2RlQ29uZlJlZyAmIENDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0VfTSApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwKKyAgICAgICAgICAgKCggY2NmZ19Nb2RlQ29uZlJlZyAmIENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFX00gICApID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICAgKSAmJgorICAgICAgICAgICgoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMICkgJiBBT05fU1lTQ1RMX1BXUkNUTF9FWFRfUkVHX01PREUgKSAgICAgICAgICAgICAgID09IDAgICAgICApICYmCisgICAgICAgICAgKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MgKSAmIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HICkgPT0gMCAgICAgICkgICAgKQorICAgICAgeworICAgICAgICAgYW9uU3lzY3RsUHdyY3RsID0gSFdSRUcoIEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19QV1JDVEwgKTsKKyAgICAgICAgIGJhdFRocmVzaG9sZCAgICA9ICgoKCggSFdSRUcoIENDRkdfQkFTRSArIENDRkdfT19NT0RFX0NPTkZfMSApICYKKyAgICAgICAgICAgIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTl9NICkgPj4KKyAgICAgICAgICAgIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTl9TICkgKyAyOCApIDw8IDQgKTsKKworICAgICAgICAgaWYgKCBhb25TeXNjdGxQd3JjdGwgJiAoIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfRU5fTSB8IEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFX00gKSkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIERDREMgaXMgT04sIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBzd2l0Y2hlZCBvZmYKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAoIGFvbkJhdG1vbkJhdCA8IGJhdFRocmVzaG9sZCApIHsKKyAgICAgICAgICAgICAgIGFvblN5c2N0bFB3cmN0bCAmPSB+KCBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOX00gfCBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRV9NICk7CisKKyAgICAgICAgICAgICAgIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMICkgPSBhb25TeXNjdGxQd3JjdGw7CisgICAgICAgICAgICB9CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIERDREMgaXMgT0ZGLCBjaGVjayBpZiBpdCBzaG91bGQgYmUgc3dpdGNoZWQgb24KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBpZiAoIGFvbkJhdG1vbkJhdCA+IGJhdFRocmVzaG9sZCApIHsKKyAgICAgICAgICAgICAgIGlmICgoIGNjZmdfTW9kZUNvbmZSZWcgJiBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFX00gKSA9PSAwICkgYW9uU3lzY3RsUHdyY3RsIHw9IEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfRU5fTSAgICAgOworICAgICAgICAgICAgICAgaWYgKCggY2NmZ19Nb2RlQ29uZlJlZyAmIENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFX00gICApID09IDAgKSBhb25TeXNjdGxQd3JjdGwgfD0gQU9OX1NZU0NUTF9QV1JDVExfRENEQ19BQ1RJVkVfTSA7CisKKyAgICAgICAgICAgICAgIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUFdSQ1RMICkgPSBhb25TeXNjdGxQd3JjdGw7CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9CisgICB9Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN5c0N0cmxSZXNldFNvdXJjZUdldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordWludDMyX3QKK1N5c0N0cmxSZXNldFNvdXJjZUdldCggdm9pZCApCit7CisgICBpZiAoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwgKSAmIEFPTl9TWVNDVExfUkVTRVRDVExfV1VfRlJPTV9TRF9NICkgeworICAgICAgcmV0dXJuICggUlNUU1JDX1dBS0VVUF9GUk9NX1NIVVRET1dOICk7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuICgoIEhXUkVHKCBBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwgKSAmCisgICAgICAgICAgICAgICAgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfTSApID4+CisgICAgICAgICAgICAgICAgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApIDsKKyAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3N5c19jdHJsLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXNfY3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMDhkYjcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXNfY3RybC5oCkBAIC0wLDAgKzEsNDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3lzX2N0cmwuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDUtMTggMTE6MDk6MTAgKzAyMDAgKFdlZCwgMTggTWF5IDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDYzOTYKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgU3lzdGVtIENvbnRyb2xsZXIuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHN5c3RlbV9jb250cm9sX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBzeXNjdHJsX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fU1lTQ1RSTF9IX18KKyNkZWZpbmUgX19TWVNDVFJMX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X3N5c2N0bC5oPgorI2luY2x1ZGUgPGluYy9od19wcmNtLmg+CisjaW5jbHVkZSA8aW5jL2h3X252aWMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3d1Yy5oPgorI2luY2x1ZGUgPGluYy9od19hdXhfd3VjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2Fvbl9pb2MuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZGRpXzBfb3NjLmg+CisjaW5jbHVkZSA8aW5jL2h3X3JmY19wd3IuaD4KKyNpbmNsdWRlIDxpbmMvaHdfcHJjbS5oPgorI2luY2x1ZGUgPGluYy9od19hZGlfM19yZWZzeXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfYW9uX3N5c2N0bC5oPgorI2luY2x1ZGUgPGluYy9od19hb25fcnRjLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ZjZmcxLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9wd3JfY3RybC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9vc2MuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvcHJjbS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9hdXhfd3VjLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2Fvbl93dWMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvYWRpLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RkaS5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9jcHUuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvdmltcy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBTeXNDdHJsUG93ZXJFdmVyeXRoaW5nICAgICAgICAgIE5PUk9NX1N5c0N0cmxQb3dlckV2ZXJ5dGhpbmcKKyAgICAjZGVmaW5lIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93biBOT1JPTV9TeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24KKyAgICAjZGVmaW5lIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duIE5PUk9NX1N5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duCisgICAgI2RlZmluZSBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCBOT1JPTV9TeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbAorICAgICNkZWZpbmUgU3lzQ3RybFJlc2V0U291cmNlR2V0ICAgICAgICAgICBOT1JPTV9TeXNDdHJsUmVzZXRTb3VyY2VHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIHNldHRpbmdzIG9mIHRoZSBtYWluIFhPU0MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFNZU0NUUkxfU1lTQlVTX09OICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1lTQ1RSTF9TWVNCVVNfT0ZGICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRGVmaW5lcyBmb3IgdGhlIGRpZmZlcmVudCBwb3dlciBtb2RlcyBvZiB0aGUgU3lzdGVtIENQVQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQ1BVX1JVTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDUFVfU0xFRVAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ERUVQX1NMRUVQICAgICAgICAgIDB4MDAwMDAwMDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZXMgZm9yIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93bgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgWE9TQ19JTl9ISUdIX1BPV0VSX01PREUgMCAvLyBXaGVuIHhvc2NfaGYgaXMgaW4gSElHSF9QT1dFUl9YT1NDCisjZGVmaW5lIFhPU0NfSU5fTE9XX1BPV0VSX01PREUgIDEgLy8gV2hlbiB4b3NjX2hmIGlzIGluIExPV19QT1dFUl9YT1NDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBQb3dlciB1cCBldmVyeXRoaW5nLgorLy8hCisvLyEgXG5vdGUgVGhlIHNlcXVlbmNpbmcgaW4gdGhpcyBmdW5jdGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgaG93IHlvdSB3b3VsZAorLy8hIHdhbnQgdG8gc2VxdWVuY2UgYWN0aXZlIG1vZGUgaW4gYSByZWFsIGFwcGxpY2F0aW9uLiBUaGVyZSBtaWdodCBiZQorLy8hIGFwcGxpY2F0aW9uIHNwZWNpZmljIHByZXJlcXVpc2l0ZXMgb3IgaGFyZHdhcmUgcmVzdHJpY3Rpb25zIHlvdSB3b3VsZCB3YW50CisvLyEgdG8gY29uc2lkZXIgd2hpY2ggZGV2aWF0ZSBmcm9tIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGRlcHJlY2F0ZWQgaW4gZnV0dXJlIHJlbGVhc2VzCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBTeXNDdHJsUG93ZXJFdmVyeXRoaW5nKHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIENQVSBjb3JlIGNsb2NrIGZyZXF1ZW5jeS4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY3VycmVudCBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBDUFUuCisvLyEKKy8vISBUaGUgQ1BVIGNhbiBydW4gZnJvbSA0OCBNSHogYW5kIGRvd24gdG8gNzUwa0h6LiBUaGUgZnJlcXVlbmN5IGlzIGRlZmluZWQKKy8vISBieSB0aGUgY29tYmluZWQgZGl2aXNpb24gZmFjdG9yIG9mIHRoZSBTWVNCVVMgYW5kIHRoZSBDUFUgY2xvY2sgZGl2aWRlci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCBDUFUgY29yZSBjbG9jayBmcmVxdWVuY3kuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitTeXNDdHJsQ2xvY2tHZXQoIHZvaWQgKQoreworICAgIC8vCisgICAgLy8gUmV0dXJuIGZpeGVkIGNsb2NrIHNwZWVkCisgICAgLy8KKyAgICByZXR1cm4oIEdFVF9NQ1VfQ0xPQ0sgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU3luYyBhbGwgYWNjZXNzZXMgdG8gdGhlIEFPTiByZWdpc3RlciBpbnRlcmZhY2UuCisvLyEKKy8vISBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgYWxsIHdyaXRlcyB0byB0aGUgQU9OIHJlZ2lzdGVyIGludGVyZmFjZSBhcmUKKy8vISBndWFyYW50ZWVkIHRvIGhhdmUgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS4gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisvLyEgaW1tZWRpYXRlbHkgaWYgbm8gQU9OIHdyaXRlcyBhcmUgcGVuZGluZzsgb3RoZXJ3aXNlLCBpdCB3aWxsIHdhaXQgZm9yIHRoZSBuZXh0CisvLyEgQU9OIGNsb2NrIGJlZm9yZSByZXR1cm5pbmcuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFN5c0N0cmxBb25VcGRhdGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNDdHJsQW9uU3luYyh2b2lkKQoreworICAgIC8vCisgICAgLy8gU3luYyB0aGUgQU9OIGludGVyZmFjZQorICAgIC8vCisgICAgSFdSRUcoQU9OX1JUQ19CQVNFICsgQU9OX1JUQ19PX1NZTkMpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBVcGRhdGUgYWxsIGludGVyZmFjZXMgdG8gQU9OLgorLy8hCisvLyEgV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGF0IGxlYXN0IDEgY2xvY2sgY3ljbGUgaGFzIHByb2dyZXNzZWQgb24gdGhlCisvLyEgQU9OIGRvbWFpbiwgc28gdGhhdCBhbnkgb3V0c3RhbmRpbmcgdXBkYXRlcyB0byBhbmQgZnJvbSB0aGUgQU9OIGludGVyZmFjZQorLy8hIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW4gc3luYy4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHByaW1hcmlseSBiZSB1c2VkIGFmdGVyIHdha2V1cCBmcm9tIHNsZWVwIG1vZGVzLAorLy8hIGFzIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYWxsIHNoYWRvdyByZWdpc3RlcnMgb24gdGhlIEFPTiBpbnRlcmZhY2UgYXJlIHVwZGF0ZWQKKy8vISBiZWZvcmUgcmVhZGluZyBhbnkgQU9OIHJlZ2lzdGVycyBmcm9tIHRoZSBNQ1UgZG9tYWluLiBJZiBhIHdyaXRlIGhhcyBiZWVuCisvLyEgZG9uZSB0byB0aGUgQU9OIGludGVyZmFjZSBpdCBpcyBzdWZmaWNpZW50IHRvIGNhbGwgdGhlIFxyZWYgU3lzQ3RybEFvblN5bmMoKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgU3lzQ3RybEFvblN5bmMoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNDdHJsQW9uVXBkYXRlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBGb3JjZSBhIGNsb2NrIGN5Y2xlIG9uIHRoZSBBT04gaW50ZXJmYWNlIHRvIGd1YXJhbnRlZSBhbGwgcmVnaXN0ZXJzIGFyZQorICAgIC8vIGluIHN5bmMuCisgICAgLy8KKyAgICBIV1JFRyhBT05fUlRDX0JBU0UgKyBBT05fUlRDX09fU1lOQykgPSAxOworICAgIEhXUkVHKEFPTl9SVENfQkFTRSArIEFPTl9SVENfT19TWU5DKTsKK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgUmVjaGFyZ2UgdmFsdWVzIGJlZm9yZSBlbnRlcmluZyBQb3dlciBEb3duLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQganVzdCBiZWZvcmUgZW50ZXJpbmcgUG93ZXIgRG93bi4KKy8vISBJdCBjYWxjdWxhdGVzIGFuIG9wdGltYWwgYW5kIHNhZmUgcmVjaGFyZ2Ugc2V0dGluZyBvZiB0aGUgYWRhcHRpdmUgcmVjaGFyZ2UKKy8vISBjb250cm9sbGVyLiBUaGUgcmVzdWx0cyBvZiBwcmV2aW91cyBzZXR0aW5nIGFyZSBhbHNvIHRha2VuIGludG8gYWNjb3VudC4KKy8vIQorLy8hIFxub3RlIEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWdpc3RlciB3cml0ZXMgYXJlIGNvbXBsZXRlZCwgXHJlZiBTeXNDdHJsQW9uU3luYygpCisvLyEgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGVudGVyaW5nIHN0YW5kYnkvcG93ZXIgZG93bi4gVGhpcyBpcyBub3QgZG9uZSBpbnRlcm5hbGx5CisvLyEgaW4gdGhpcyBmdW5jdGlvbiBkdWUgdG8gdHdvIHJlYXNvbnM6CisvLyEgLSAxKSBUaGVyZSBtaWdodCBiZSBvdGhlciByZWdpc3RlciB3cml0ZXMgdGhhdCBtdXN0IGJlIHN5bmNocm9uaXplZCBhcyB3ZWxsLgorLy8hIC0gMikgSXQgaXMgcG9zc2libGUgdG8gc2F2ZSBzb21lIHRpbWUgYnkgZG9pbmcgb3RoZXIgdGhpbmdzIGJlZm9yZSBjYWxsaW5nCisvLyEgXHJlZiBTeXNDdHJsQW9uU3luYygpIHNpbmNlIHRoaXMgY2FsbCB3aWxsIG5vdCByZXR1cm4gYmVmb3JlIHRoZXJlIGFyZSBubworLy8hIG91dHN0YW5kaW5nIHdyaXRlIHJlcXVlc3RzIGJldHdlZW4gTUNVIGFuZCBBT04uCisvLyEKKy8vISBccGFyYW0geG9zY1Bvd2VyTW9kZSAodHlwaWNhbGx5IHJ1bm5pbmcgaW4gWE9TQ19JTl9ISUdIX1BPV0VSX01PREUgYWxsIHRoZSB0aW1lKS4KKy8vISAtIFxyZWYgWE9TQ19JTl9ISUdIX1BPV0VSX01PREUgOiBXaGVuIHhvc2NfaGYgaXMgaW4gSElHSF9QT1dFUl9YT1NDLgorLy8hIC0gXHJlZiBYT1NDX0lOX0xPV19QT1dFUl9NT0RFICA6IFdoZW4geG9zY19oZiBpcyBpbiBMT1dfUE9XRVJfWE9TQy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93biggdWludDMyX3QgeG9zY1Bvd2VyTW9kZSApOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEFkanVzdCBSZWNoYXJnZSBjYWxjdWxhdGlvbnMgdG8gYmUgdXNlZCBuZXh0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQganVzdCBhZnRlciByZXR1cm5pbmcgZnJvbSBQb3dlciBEb3duLgorLy8hCisvLyEgUmVhZHMgdGhlIHJlc3VsdHMgZnJvbSB0aGUgYWRhcHRpdmUgcmVjaGFyZ2UgY29udHJvbGxlciBhbmQgY3VycmVudCBjaGlwCisvLyEgdGVtcGVyYXR1cmUuIFRoaXMgaXMgdXNlZCBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdoZW4gY2FsY3VsYXRpbmcKKy8vISBvcHRpbWFsIHJlY2hhcmdlIGNvbnRyb2xsZXIgc2V0dGluZ3MgbmV4dCB0aW1lIChXaGVuCisvLyEgXHJlZiBTeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24oKSBpcyBjYWxsZWQgbmV4dCB0aW1lKS4KKy8vIQorLy8hIFxub3RlCisvLyEgU3BlY2lhbCBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIEFPTiByZWdpc3RlcnMgcmVhZCBhcmUKKy8vISB1cGRhdGVkIGFmdGVyIHRoZSB3YWtldXAuIFdyaXRpbmcgdG8gYW4gQU9OIHJlZ2lzdGVyIGFuZCB0aGVuIGNhbGxpbmcKKy8vISBccmVmIFN5c0N0cmxBb25TeW5jKCkgd2lsbCBoYW5kbGUgdGhpcy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duKCB2b2lkICk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVHVybnMgRENEQyBvbiBvciBvZmYgZGVwZW5kaW5nIG9mIHdoYXQgaXMgY29uc2lkZXJlZCB0byBiZSBvcHRpbWFsIHVzYWdlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb250cm9scyB0aGUgRENEQyBvbmx5IGlmIGJvdGggdGhlIGZvbGxvd2luZyBDQ0ZHIHNldHRpbmdzIGFyZSBcYyB0cnVlOgorLy8hIC0gRENEQyBpcyBjb25maWd1cmVkIHRvIGJlIHVzZWQuCisvLyEgLSBBbHRlcm5hdGl2ZSBEQ0RDIHNldHRpbmdzIGFyZSBkZWZpbmVkIGFuZCBlbmFibGVkLgorLy8hCisvLyEgVGhlIERDREMgaXMgY29uZmlndXJlZCBpbiBhY2NvcmRhbmNlIHRvIHRoZSBDQ0ZHIHNldHRpbmdzIHdoZW4gdHVybmVkIG9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHBlcmlvZGljYWxseS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFN5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sKCB2b2lkICk7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gXG5hbWUgUmV0dXJuIHZhbHVlcyBmcm9tIGNhbGxpbmcgU3lzQ3RybFJlc2V0U291cmNlR2V0KCkKKy8vQHsKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgUlNUU1JDX1BXUl9PTiAgICAgICAgICAgICAgICgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1BXUl9PTiAgICApID4+ICggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApKQorI2RlZmluZSBSU1RTUkNfUElOX1JFU0VUICAgICAgICAgICAgKCggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUElOX1JFU0VUICkgPj4gKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkpCisjZGVmaW5lIFJTVFNSQ19WRERTX0xPU1MgICAgICAgICAgICAoKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19WRERTX0xPU1MgKSA+PiAoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSkKKyNkZWZpbmUgUlNUU1JDX1ZERF9MT1NTICAgICAgICAgICAgICgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1ZERF9MT1NTICApID4+ICggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApKQorI2RlZmluZSBSU1RTUkNfVkREUl9MT1NTICAgICAgICAgICAgKCggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfVkREUl9MT1NTICkgPj4gKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkpCisjZGVmaW5lIFJTVFNSQ19DTEtfTE9TUyAgICAgICAgICAgICAoKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19DTEtfTE9TUyAgKSA+PiAoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSkKKyNkZWZpbmUgUlNUU1JDX1NZU1JFU0VUICAgICAgICAgICAgICgoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1NZU1JFU0VUICApID4+ICggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUyApKQorI2RlZmluZSBSU1RTUkNfV0FSTVJFU0VUICAgICAgICAgICAgKCggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfV0FSTVJFU0VUICkgPj4gKCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TICkpCisjZGVmaW5lIFJTVFNSQ19XQUtFVVBfRlJPTV9TSFVURE9XTiAoKCggQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfTSAgICAgICAgKSA+PiAoIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgKSkgKyAxICkKKy8vQH0KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJucyBsYXN0IHJlc2V0IHNvdXJjZSAoaW5jbHVkaW5nICJ3YWtldXAgZnJvbSBzaHV0ZG93biIpLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIG9uZSBvZiB0aGUgUlNUU1JDXyBkZWZpbmVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBTeXNDdHJsUmVzZXRTb3VyY2VHZXQoIHZvaWQgKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUGVyZm9ybSBhIGZ1bGwgc3lzdGVtIHJlc2V0LgorLy8hCisvLyEgXHJldHVybiBUaGUgY2hpcCB3aWxsIHJlc2V0IGFuZCBoZW5jZSBuZXZlciByZXR1cm4gZnJvbSB0aGlzIGNhbGwuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c0N0cmxTeXN0ZW1SZXNldCggdm9pZCApCit7CisgICAvLyBEaXNhYmxlIENQVSBpbnRlcnJ1cHRzCisgICBDUFVjcHNpZCgpOworICAgLy8gV3JpdGUgcmVzZXQgcmVnaXN0ZXIKKyAgIEhXUkVHQklUVyggQU9OX1NZU0NUTF9CQVNFICsgQU9OX1NZU0NUTF9PX1JFU0VUQ1RMLCBBT05fU1lTQ1RMX1JFU0VUQ1RMX1NZU1JFU0VUX0JJVE4gKSA9IDE7CisgICAvLyBGaW5hbGx5LCB3YWl0IHVudGlsIHRoZSBhYm92ZSB3cml0ZSBwcm9wYWdhdGVzCisgICB3aGlsZSAoIDEgKSB7CisgICAgICAvLyBEbyBub3RoaW5nLCBqdXN0IHdhaXQgZm9yIHRoZSByZXNldCAoYW5kIG5ldmVyIHJldHVybiBmcm9tIGhlcmUpCisgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgcmVzZXQgaWYgT1NDIGNsb2NrIGxvc3MgZXZlbnQgaXMgYXNzZXJ0ZWQuCisvLyEKKy8vISBDbG9jayBsb3NzIGNpcmN1aXQgaW4gYW5hbG9nIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCBpbiBvcmRlciB0bworLy8hIGFjdHVhbGx5IGVuYWJsZSBmb3IgYSBjbG9jayBsb3NzIHJlc2V0IHRvIG9jY3VyCisvLyEgXHJlZiBPU0NDbG9ja0xvc3NFdmVudEVuYWJsZSgpLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBzaGFsbCB0eXBpY2FsbHkgbm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoZSBjbG9jayBsb3NzCisvLyEgcmVzZXQgZnVuY3Rpb25hbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoZSBib290IGNvZGUgKGEgZmFjdG9yeSBjb25maWd1cmF0aW9uCisvLyEgZGVmaW5lcyB3aGV0aGVyIGl0IGlzIHNldCBvciBub3QpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBTeXNDdHJsQ2xvY2tMb3NzUmVzZXREaXNhYmxlKCksIFxyZWYgT1NDQ2xvY2tMb3NzRXZlbnRFbmFibGUoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNDdHJsQ2xvY2tMb3NzUmVzZXRFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFNldCBjbG9jayBsb3NzIGVuYWJsZSBiaXQgaW4gQU9OX1NZU0NUUkwgdXNpbmcgYml0IGJhbmRpbmcKKyAgICAvLworICAgIEhXUkVHQklUVyhBT05fU1lTQ1RMX0JBU0UgKyBBT05fU1lTQ1RMX09fUkVTRVRDVEwsIEFPTl9TWVNDVExfUkVTRVRDVExfQ0xLX0xPU1NfRU5fQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyByZXNldCBkdWUgdG8gT1NDIGNsb2NrIGxvc3MgZXZlbnQuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIHNoYWxsIHR5cGljYWxseSBub3QgYmUgY2FsbGVkIGJlY2F1c2UgdGhlIGNsb2NrIGxvc3MKKy8vISByZXNldCBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGJvb3QgY29kZSAoYSBmYWN0b3J5IGNvbmZpZ3VyYXRpb24KKy8vISBkZWZpbmVzIHdoZXRoZXIgaXQgaXMgc2V0IG9yIG5vdCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFN5c0N0cmxDbG9ja0xvc3NSZXNldEVuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c0N0cmxDbG9ja0xvc3NSZXNldERpc2FibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIENsZWFyIGNsb2NrIGxvc3MgZW5hYmxlIGJpdCBpbiBBT05fU1lTQ1RSTCB1c2luZyBiaXQgYmFuZGluZworICAgIC8vCisgICAgSFdSRUdCSVRXKEFPTl9TWVNDVExfQkFTRSArIEFPTl9TWVNDVExfT19SRVNFVENUTCwgQU9OX1NZU0NUTF9SRVNFVENUTF9DTEtfTE9TU19FTl9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gUmVkaXJlY3QgdG8gaW1wbGVtZW50YXRpb24gaW4gUk9NIHdoZW4gYXZhaWxhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChEUklWRVJMSUJfTk9ST00pICYmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2luY2x1ZGUgPGRyaXZlcmxpYi9yb20uaD4KKyAgICAjaWZkZWYgUk9NX1N5c0N0cmxQb3dlckV2ZXJ5dGhpbmcKKyAgICAgICAgI3VuZGVmICBTeXNDdHJsUG93ZXJFdmVyeXRoaW5nCisgICAgICAgICNkZWZpbmUgU3lzQ3RybFBvd2VyRXZlcnl0aGluZyAgICAgICAgICBST01fU3lzQ3RybFBvd2VyRXZlcnl0aGluZworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duCisgICAgICAgICN1bmRlZiAgU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duCisgICAgICAgICNkZWZpbmUgU3lzQ3RybFNldFJlY2hhcmdlQmVmb3JlUG93ZXJEb3duIFJPTV9TeXNDdHJsU2V0UmVjaGFyZ2VCZWZvcmVQb3dlckRvd24KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1N5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duCisgICAgICAgICN1bmRlZiAgU3lzQ3RybEFkanVzdFJlY2hhcmdlQWZ0ZXJQb3dlckRvd24KKyAgICAgICAgI2RlZmluZSBTeXNDdHJsQWRqdXN0UmVjaGFyZ2VBZnRlclBvd2VyRG93biBST01fU3lzQ3RybEFkanVzdFJlY2hhcmdlQWZ0ZXJQb3dlckRvd24KKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1N5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sCisgICAgICAgICN1bmRlZiAgU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wKKyAgICAgICAgI2RlZmluZSBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCBST01fU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2wKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1N5c0N0cmxSZXNldFNvdXJjZUdldAorICAgICAgICAjdW5kZWYgIFN5c0N0cmxSZXNldFNvdXJjZUdldAorICAgICAgICAjZGVmaW5lIFN5c0N0cmxSZXNldFNvdXJjZUdldCAgICAgICAgICAgUk9NX1N5c0N0cmxSZXNldFNvdXJjZUdldAorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9fU1lTQ1RSTF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8hIEB9CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGljay5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGljay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTBiMjEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXN0aWNrLmMKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN5c3RpY2suYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBTeXNUaWNrIHRpbWVyIGluIE5WSUMKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvc3lzdGljay5oPgorCisvLyBTZWUgc3lzdGljay5oIGZvciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGljay5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YWIyZWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXN0aWNrLmgKQEAgLTAsMCArMSwzMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzeXN0aWNrLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE2IDE5OjQxOjQ3ICswMTAwIChNb24sIDE2IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MDk0CisqCisqICBEZXNjcmlwdGlvbjogICAgUHJvdG90eXBlcyBmb3IgdGhlIFN5c1RpY2sgZHJpdmVyLgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBzeXN0ZW1fY3B1X2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCBzeXN0aWNrX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fU1lTVElDS19IX18KKyNkZWZpbmUgX19TWVNUSUNLX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbnZpYy5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEFQSSBGdW5jdGlvbnMgYW5kIFByb3RvdHlwZXMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIFN5c1RpY2sgY291bnRlci4KKy8vIQorLy8hIFRoaXMgd2lsbCBzdGFydCB0aGUgU3lzVGljayBjb3VudGVyLiBJZiBhbiBpbnRlcnJ1cHQgaGFuZGxlciBoYXMgYmVlbgorLy8hIHJlZ2lzdGVyZWQsIGl0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIFN5c1RpY2sgY291bnRlciByb2xscyBvdmVyLgorLy8hCisvLyEgXG5vdGUgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgdGhlIFN5c1RpY2sgY291bnRlciB0byAocmUpY29tbWVuY2UKKy8vISBjb3VudGluZyBmcm9tIGl0cyBjdXJyZW50IHZhbHVlLiBUaGUgY291bnRlciBpcyBub3QgYXV0b21hdGljYWxseSByZWxvYWRlZAorLy8hIHdpdGggdGhlIHBlcmlvZCBhcyBzcGVjaWZpZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIFxyZWYgU3lzVGlja1BlcmlvZFNldCgpLiBJZgorLy8hIGFuIGltbWVkaWF0ZSByZWxvYWQgaXMgcmVxdWlyZWQsIHRoZSBOVklDX1NUX0NVUlJFTlQgcmVnaXN0ZXIgbXVzdCBiZQorLy8hIHdyaXR0ZW4gdG8gZm9yY2UgdGhpcy4gQW55IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgY2xlYXJzIHRoZSBTeXNUaWNrCisvLyEgY291bnRlciB0byAwIGFuZCB3aWxsIGNhdXNlIGEgcmVsb2FkIHdpdGggdGhlIHN1cHBsaWVkIHBlcmlvZCBvbiB0aGUgbmV4dAorLy8hIGNsb2NrLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c1RpY2tFbmFibGUodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSBTeXNUaWNrLgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSB8PSBOVklDX1NUX0NUUkxfQ0xLX1NSQyB8IE5WSUNfU1RfQ1RSTF9FTkFCTEU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisvLyEKKy8vISBUaGlzIHdpbGwgc3RvcCB0aGUgU3lzVGljayBjb3VudGVyLiBJZiBhbiBpbnRlcnJ1cHQgaGFuZGxlciBoYXMgYmVlbgorLy8hIHJlZ2lzdGVyZWQsIGl0IHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZCB1bnRpbCBTeXNUaWNrIGlzIHJlc3RhcnRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNUaWNrRGlzYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSBTeXNUaWNrLgorICAgIC8vCisgICAgSFdSRUcoTlZJQ19TVF9DVFJMKSAmPSB+KE5WSUNfU1RfQ1RSTF9FTkFCTEUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBTeXNUaWNrIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgc2V0cyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIFN5c1RpY2sgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgU3lzVGljayBpbnRlcnJ1cHQgb2NjdXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBJbnRSZWdpc3RlcigpIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJpbmcgaW50ZXJydXB0CisvLyEgaGFuZGxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c1RpY2tJbnRSZWdpc3Rlcih2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHJldHVybmluZyBhbiBlcnJvciBpZiBhbiBlcnJvciBvY2N1cnMuCisgICAgLy8KKyAgICBJbnRSZWdpc3RlcihJTlRfU1lTVElDSywgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NUX0NUUkwpIHw9IE5WSUNfU1RfQ1RSTF9JTlRFTjsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSBTeXNUaWNrIGludGVycnVwdAorLy8hIG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitTeXNUaWNrSW50VW5yZWdpc3Rlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NUX0NUUkwpICY9IH4oTlZJQ19TVF9DVFJMX0lOVEVOKTsKKworICAgIC8vCisgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRVbnJlZ2lzdGVyKElOVF9TWVNUSUNLKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlIHRoZSBTeXNUaWNrIGludGVycnVwdCwgYWxsb3dpbmcgaXQgdG8gYmUKKy8vISByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3Nvci4KKy8vIQorLy8hIFxub3RlIFRoZSBTeXNUaWNrIGludGVycnVwdCBoYW5kbGVyIGRvZXMgbm90IG5lZWQgdG8gY2xlYXIgdGhlIFN5c1RpY2sKKy8vISBpbnRlcnJ1cHQgc291cmNlIGFzIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IE5WSUMgd2hlbiB0aGUgaW50ZXJydXB0CisvLyEgaGFuZGxlciBpcyBjYWxsZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzVGlja0ludEVuYWJsZSh2b2lkKQoreworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBTeXNUaWNrIGludGVycnVwdC4KKyAgICAvLworICAgIEhXUkVHKE5WSUNfU1RfQ1RSTCkgfD0gTlZJQ19TVF9DVFJMX0lOVEVOOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgU3lzVGljayBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzYWJsZSB0aGUgU3lzVGljayBpbnRlcnJ1cHQsIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZworLy8hIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1N5c1RpY2tJbnREaXNhYmxlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBTeXNUaWNrIGludGVycnVwdC4KKyAgICAvLworICAgIEhXUkVHKE5WSUNfU1RfQ1RSTCkgJj0gfihOVklDX1NUX0NUUkxfSU5URU4pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBwZXJpb2Qgb2YgdGhlIFN5c1RpY2sgY291bnRlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgU3lzVGljayBjb3VudGVyIHdyYXBzOyB0aGlzCisvLyEgZXF1YWxzIHRvIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29yIGNsb2NrcyBiZXR3ZWVuIGludGVycnVwdHMuCisvLyEKKy8vISBcbm90ZSBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2F1c2UgdGhlIFN5c1RpY2sgY291bnRlciB0byByZWxvYWQKKy8vISBpbW1lZGlhdGVseS4gSWYgYW4gaW1tZWRpYXRlIHJlbG9hZCBpcyByZXF1aXJlZCwgdGhlIE5WSUNfU1RfQ1VSUkVOVAorLy8hIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbi4gQW55IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgY2xlYXJzIHRoZSBTeXNUaWNrCisvLyEgY291bnRlciB0byAwIGFuZCB3aWxsIGNhdXNlIGEgcmVsb2FkIHdpdGggdGhlIFxjIHVpMzJQZXJpb2Qgc3VwcGxpZWQgaGVyZQorLy8hIG9uIHRoZSBuZXh0IGNsb2NrIGFmdGVyIHRoZSBTeXNUaWNrIGlzIGVuYWJsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMlBlcmlvZCBpcyB0aGUgbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGluIGVhY2ggcGVyaW9kIG9mIHRoZQorLy8hIFN5c1RpY2sgY291bnRlcjsgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDE2LDc3NywyMTYgKDB4MTAwMDAwMCksIGJvdGggaW5jbHVkZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorU3lzVGlja1BlcmlvZFNldCh1aW50MzJfdCB1aTMyUGVyaW9kKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCgodWkzMlBlcmlvZCA+IDApICYmICh1aTMyUGVyaW9kIDw9IDE2Nzc3MjE2KSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgcGVyaW9kIG9mIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisgICAgLy8KKyAgICBIV1JFRyhOVklDX1NUX1JFTE9BRCkgPSB1aTMyUGVyaW9kIC0gMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgcGVyaW9kIG9mIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIFN5c1RpY2sgY291bnRlciB3cmFwczsgdGhpcworLy8hIGVxdWFscyB0byB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvciBjbG9ja3MgYmV0d2VlbiBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBwZXJpb2Qgb2YgdGhlIFN5c1RpY2sgY291bnRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1N5c1RpY2tQZXJpb2RHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgcGVyaW9kIG9mIHRoZSBTeXNUaWNrIGNvdW50ZXIuCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcoTlZJQ19TVF9SRUxPQUQpICsgMSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN5c1RpY2sgY291bnRlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgU3lzVGljayBjb3VudGVyOyB0aGlzIHdpbGwKKy8vISBiZSBhIHZhbHVlIGJldHdlZW4gdGhlIChwZXJpb2QgLSAxKSBhbmQgemVybywgYm90aCBpbmNsdWRlZC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgU3lzVGljayBjb3VudGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitTeXNUaWNrVmFsdWVHZXQodm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgU3lzVGljayBjb3VudGVyLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKE5WSUNfU1RfQ1VSUkVOVCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fU1lTVElDS19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cAorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi9zeXN0aWNrX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGlja19kb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE1MDlhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvc3lzdGlja19kb2MuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3lzdGlja19kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGlja19hcGkKKy8vISBAeworLy8hIFxzZWN0aW9uIHNlY19zeXN0aWNrIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIHN5c3RlbSBDUFUgaW5jbHVkZXMgYSBzeXN0ZW0gdGltZXIsIFN5c1RpY2ssIGludGVncmF0ZWQgaW4gdGhlIE5WSUMgd2hpY2ggcHJvdmlkZXMgYSBzaW1wbGUsIDI0LWJpdCwKKy8vISBjbGVhci1vbi13cml0ZSwgZGVjcmVtZW50aW5nLCB3cmFwLW9uLXplcm8gY291bnRlciB3aXRoIGEgZmxleGlibGUgY29udHJvbCBtZWNoYW5pc20uCisvLyEgV2hlbiBlbmFibGVkLCB0aGUgdGltZXIgY291bnRzIGRvd24gb24gZWFjaCBjbG9jayBmcm9tIHRoZSByZWxvYWQgdmFsdWUgdG8gMCwgcmVsb2FkcyAod3JhcHMpIG9uCisvLyEgdGhlIG5leHQgY2xvY2sgZWRnZSwgdGhlbiBkZWNyZW1lbnRzIG9uIHN1YnNlcXVlbnQgY2xvY2tzLgorLy8hCisvLyEgVGhlIFN5c1RpY2sgY291bnRlciBydW5zIG9uIHRoZSBzeXN0ZW0gY2xvY2suIElmIHRoaXMgY2xvY2sgc2lnbmFsIGlzIHN0b3BwZWQgZm9yIGxvdy1wb3dlciBtb2RlLCB0aGUKKy8vISBTeXNUaWNrIGNvdW50ZXIgc3RvcHMuCisvLyEKKy8vISBXaGVuIHRoZSBwcm9jZXNzb3IgaXMgaGFsdGVkIGZvciBkZWJ1Z2dpbmcsIHRoZSBjb3VudGVyIGRvZXMgbm90IGRlY3JlbWVudC4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY19zeXN0aWNrX2FwaSBBUEkKKy8vIQorLy8hIFRoZSBBUEkgZnVuY3Rpb25zIGNhbiBiZSBncm91cGVkIGxpa2UgdGhpczoKKy8vIQorLy8hIENvbmZpZ3VyYXRpb24gYW5kIHN0YXR1czoKKy8vISAtIFxyZWYgU3lzVGlja1BlcmlvZFNldCgpCisvLyEgLSBccmVmIFN5c1RpY2tQZXJpb2RHZXQoKQorLy8hIC0gXHJlZiBTeXNUaWNrVmFsdWVHZXQoKQorLy8hCisvLyEgRW5hYmxlIGFuZCBkaXNhYmxlOgorLy8hIC0gXHJlZiBTeXNUaWNrRW5hYmxlKCkKKy8vISAtIFxyZWYgU3lzVGlja0Rpc2FibGUoKQorLy8hCisvLyEgSW50ZXJydXB0IGNvbmZpZ3VyYXRpb246CisvLyEgLSBccmVmIFN5c1RpY2tJbnRSZWdpc3RlcigpCisvLyEgLSBccmVmIFN5c1RpY2tJbnRVbnJlZ2lzdGVyKCkKKy8vISAtIFxyZWYgU3lzVGlja0ludEVuYWJsZSgpCisvLyEgLSBccmVmIFN5c1RpY2tJbnREaXNhYmxlKCkKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdGltZXIuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2M2NkZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyLmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB0aW1lci5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0zMCAxMjo0ODoxNyArMDIwMCAoTW9uLCAzMCBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjU1MgorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGRyaXZlcmxpYi90aW1lci5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgVGltZXJDb25maWd1cmUKKyAgICAjZGVmaW5lIFRpbWVyQ29uZmlndXJlICAgICAgICAgICAgICAgICAgTk9ST01fVGltZXJDb25maWd1cmUKKyAgICAjdW5kZWYgIFRpbWVyTGV2ZWxDb250cm9sCisgICAgI2RlZmluZSBUaW1lckxldmVsQ29udHJvbCAgICAgICAgICAgICAgIE5PUk9NX1RpbWVyTGV2ZWxDb250cm9sCisgICAgI3VuZGVmICBUaW1lclN0YWxsQ29udHJvbAorICAgICNkZWZpbmUgVGltZXJTdGFsbENvbnRyb2wgICAgICAgICAgICAgICBOT1JPTV9UaW1lclN0YWxsQ29udHJvbAorICAgICN1bmRlZiAgVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbAorICAgICNkZWZpbmUgVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbCAgICAgICBOT1JPTV9UaW1lcldhaXRPblRyaWdnZXJDb250cm9sCisgICAgI3VuZGVmICBUaW1lckludFJlZ2lzdGVyCisgICAgI2RlZmluZSBUaW1lckludFJlZ2lzdGVyICAgICAgICAgICAgICAgIE5PUk9NX1RpbWVySW50UmVnaXN0ZXIKKyAgICAjdW5kZWYgIFRpbWVySW50VW5yZWdpc3RlcgorICAgICNkZWZpbmUgVGltZXJJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICBOT1JPTV9UaW1lckludFVucmVnaXN0ZXIKKyAgICAjdW5kZWYgIFRpbWVyTWF0Y2hVcGRhdGVNb2RlCisgICAgI2RlZmluZSBUaW1lck1hdGNoVXBkYXRlTW9kZSAgICAgICAgICAgIE5PUk9NX1RpbWVyTWF0Y2hVcGRhdGVNb2RlCisgICAgI3VuZGVmICBUaW1lckludGVydmFsTG9hZE1vZGUKKyAgICAjZGVmaW5lIFRpbWVySW50ZXJ2YWxMb2FkTW9kZSAgICAgICAgICAgTk9ST01fVGltZXJJbnRlcnZhbExvYWRNb2RlCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgdGltZXIgaW50ZXJydXB0IG51bWJlci4KKy8vIQorLy8hIEdpdmVuIGEgdGltZXIgYmFzZSBhZGRyZXNzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcKKy8vISBpbnRlcnJ1cHQgbnVtYmVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhIHRpbWVyIGludGVycnVwdCBudW1iZXIsIG9yIC0xIGlmIFxjIHVpMzJCYXNlIGlzIGludmFsaWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHVpbnQzMl90CitUaW1lckludE51bWJlckdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBMb29wIHRocm91Z2ggdGhlIHRhYmxlIHRoYXQgbWFwcyB0aW1lciBiYXNlIGFkZHJlc3NlcyB0byBpbnRlcnJ1cHQKKyAgICAvLyBudW1iZXJzLgorICAgIC8vCisgICAgc3dpdGNoKHVpMzJCYXNlKQorICAgIHsKKyAgICBjYXNlIEdQVDBfQkFTRSA6CisgICAgICAgIHVpMzJJbnQgPSBJTlRfR1BUMEE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1BUMV9CQVNFIDoKKyAgICAgICAgdWkzMkludCA9IElOVF9HUFQxQTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHUFQyX0JBU0UgOgorICAgICAgICB1aTMySW50ID0gSU5UX0dQVDJBOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdQVDNfQkFTRSA6CisgICAgICAgIHVpMzJJbnQgPSBJTlRfR1BUM0E7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQgOgorICAgICAgICB1aTMySW50ID0gMHgwOworICAgIH0KKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG9yICgtMSkgaWYgbm90IGJhc2UgYWRkcmVzcyBpcyBub3QgbWF0Y2hlZC4KKyAgICAvLworICAgIHJldHVybiAodWkzMkludCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ29uZmlndXJlcyB0aGUgdGltZXIocykKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lckNvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNvbmZpZykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJDb25maWcgPT0gVElNRVJfQ0ZHX09ORV9TSE9UKSB8fAorICAgICAgICAgICAodWkzMkNvbmZpZyA9PSBUSU1FUl9DRkdfT05FX1NIT1RfVVApIHx8CisgICAgICAgICAgICh1aTMyQ29uZmlnID09IFRJTUVSX0NGR19QRVJJT0RJQykgfHwKKyAgICAgICAgICAgKHVpMzJDb25maWcgPT0gVElNRVJfQ0ZHX1BFUklPRElDX1VQKSB8fAorICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweEZGMDAwMDAwKSA9PSBUSU1FUl9DRkdfU1BMSVRfUEFJUikpOworICAgIEFTU0VSVCgoKHVpMzJDb25maWcgJiAweEZGMDAwMDAwKSAhPSBUSU1FUl9DRkdfU1BMSVRfUEFJUikgfHwKKyAgICAgICAgICAgKCgoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9PTkVfU0hPVCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9PTkVfU0hPVF9VUCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9QRVJJT0RJQykgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9QRVJJT0RJQ19VUCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDAwMEZGKSA9PSBUSU1FUl9DRkdfQV9DQVBfQ09VTlQpIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwMDBGRikgPT0gVElNRVJfQ0ZHX0FfQ0FQX0NPVU5UX1VQKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwRkYpID09IFRJTUVSX0NGR19BX0NBUF9USU1FKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwRkYpID09IFRJTUVSX0NGR19BX0NBUF9USU1FX1VQKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMDAwRkYpID09IFRJTUVSX0NGR19BX1BXTSkpICYmCisgICAgICAgICAgICAoKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfT05FX1NIT1QpIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfT05FX1NIT1RfVVApIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfUEVSSU9ESUMpIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfUEVSSU9ESUNfVVApIHx8CisgICAgICAgICAgICAgKCh1aTMyQ29uZmlnICYgMHgwMDAwRkYwMCkgPT0gVElNRVJfQ0ZHX0JfQ0FQX0NPVU5UKSB8fAorICAgICAgICAgICAgICgodWkzMkNvbmZpZyAmIDB4MDAwMEZGMDApID09IFRJTUVSX0NGR19CX0NBUF9DT1VOVF9VUCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDBGRjAwKSA9PSBUSU1FUl9DRkdfQl9DQVBfVElNRSkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDBGRjAwKSA9PSBUSU1FUl9DRkdfQl9DQVBfVElNRV9VUCkgfHwKKyAgICAgICAgICAgICAoKHVpMzJDb25maWcgJiAweDAwMDBGRjAwKSA9PSBUSU1FUl9DRkdfQl9QV00pKSkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSB0aW1lcnMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgJj0gfihHUFRfQ1RMX1RBRU4gfCBHUFRfQ1RMX1RCRU4pOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGdsb2JhbCB0aW1lciBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DRkcpID0gdWkzMkNvbmZpZyA+PiAyNDsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBBIGFuZCBCIHRpbWVycy4gTm90ZSB0aGF0IHRoZSBCIHRpbWVyCisgICAgLy8gY29uZmlndXJhdGlvbiBpcyBpZ25vcmVkIGJ5IHRoZSBoYXJkd2FyZSBpbiAzMi1iaXQgbW9kZXMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBTVIpID0gKHVpMzJDb25maWcgJiAweEZGKSB8IEdQVF9UQU1SX1RBUFdNSUU7CisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1SKSA9CisgICAgICAgICgodWkzMkNvbmZpZyA+PiA4KSAmIDB4RkYpIHwgR1BUX1RCTVJfVEJQV01JRTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb250cm9scyB0aGUgb3V0cHV0IGxldmVsCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVGltZXJMZXZlbENvbnRyb2wodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgYm9vbCBiSW52ZXJ0KQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgb3V0cHV0IGxldmVscyBhcyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICB1aTMyVGltZXIgJj0gR1BUX0NUTF9UQVBXTUwgfCBHUFRfQ1RMX1RCUFdNTDsKKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgPSAoYkludmVydCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgfCB1aTMyVGltZXIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQ1RMKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4odWkzMlRpbWVyKSkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbnRyb2xzIHRoZSBzdGFsbCBoYW5kbGluZworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1RpbWVyU3RhbGxDb250cm9sKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIGJvb2wgYlN0YWxsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgc3RhbGwgbW9kZS4KKyAgICAvLworICAgIHVpMzJUaW1lciAmPSBHUFRfQ1RMX1RBU1RBTEwgfCBHUFRfQ1RMX1RCU1RBTEw7CisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19DVEwpID0gKGJTdGFsbCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgfCB1aTMyVGltZXIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQ1RMKSAmIH4odWkzMlRpbWVyKSkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbnRyb2xzIHRoZSB3YWl0IG9uIHRyaWdnZXIgaGFuZGxpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lcldhaXRPblRyaWdnZXJDb250cm9sKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIGJvb2wgYldhaXQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB3YWl0IG9uIHRyaWdnZXIgbW9kZSBmb3IgdGltZXIgQS4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICBpZihiV2FpdCkKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1SKSB8PSBHUFRfVEFNUl9UQVdPVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFNUikgJj0gfihHUFRfVEFNUl9UQVdPVCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgd2FpdCBvbiB0cmlnZ2VyIG1vZGUgZm9yIHRpbWVyIEIuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgaWYoYldhaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJNUikgfD0gR1BUX1RCTVJfVEJXT1Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCTVIpICY9IH4oR1BUX1RCTVJfVEJXT1QpOworICAgICAgICB9CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHRpbWVyIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1RpbWVySW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKQoreworICAgIHVpbnQzMl90IHVpMzJJbnQ7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGludGVycnVwdCBudW1iZXIgZm9yIHRoaXMgdGltZXIgbW9kdWxlLgorICAgIC8vCisgICAgdWkzMkludCA9IFRpbWVySW50TnVtYmVyR2V0KHVpMzJCYXNlKTsKKworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRpbWVyIEEgaWYgcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAgICAgLy8KKyAgICAgICAgSW50UmVnaXN0ZXIodWkzMkludCwgcGZuSGFuZGxlcik7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRW5hYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEludEVuYWJsZSh1aTMySW50KTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aW1lciBCIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0IpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgIC8vCisgICAgICAgIEludFJlZ2lzdGVyKHVpMzJJbnQgKyAxLCBwZm5IYW5kbGVyKTsKKworICAgICAgICAvLworICAgICAgICAvLyBFbmFibGUgdGhlIGludGVycnVwdC4KKyAgICAgICAgLy8KKyAgICAgICAgSW50RW5hYmxlKHVpMzJJbnQgKyAxKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lckludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICB1aW50MzJfdCB1aTMySW50OworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGlzIHRpbWVyIG1vZHVsZS4KKyAgICAvLworICAgIHVpMzJJbnQgPSBUaW1lckludE51bWJlckdldCh1aTMyQmFzZSk7CisKKyAgICAvLworICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aW1lciBBIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgICAgICAgIC8vCisgICAgICAgIEludERpc2FibGUodWkzMkludCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVW5yZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgIC8vCisgICAgICAgIEludFVucmVnaXN0ZXIodWkzMkludCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGltZXIgQiBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAgICAgICAvLworICAgICAgICBJbnREaXNhYmxlKHVpMzJJbnQgKyAxKTsKKworICAgICAgICAvLworICAgICAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAgICAgLy8KKyAgICAgICAgSW50VW5yZWdpc3Rlcih1aTMySW50ICsgMSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU2V0cyB0aGUgTWF0Y2ggUmVnaXN0ZXIgVXBkYXRlIG1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitUaW1lck1hdGNoVXBkYXRlTW9kZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyTW9kZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKyAgICBBU1NFUlQoKHVpMzJNb2RlID09IFRJTUVSX01BVENIVVBEQVRFX05FWFRDWUNMRSkgfHwgKHVpMzJNb2RlID09IFRJTUVSX01BVENIVVBEQVRFX1RJTUVPVVQpKTsKKworICAgIC8vIFNldCBtb2RlIGZvciB0aW1lciBBCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQSkKKyAgICB7CisgICAgICAgIGlmKHVpMzJNb2RlID09IFRJTUVSX01BVENIVVBEQVRFX05FWFRDWUNMRSkKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1SKSAmPSB+KEdQVF9UQU1SX1RBTVJTVSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBTVIpIHw9IEdQVF9UQU1SX1RBTVJTVTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCBtb2RlIGZvciB0aW1lciBCCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQikKKyAgICB7CisgICAgICAgIGlmKHVpMzJNb2RlID09IFRJTUVSX01BVENIVVBEQVRFX05FWFRDWUNMRSkKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1SKSAmPSB+KEdQVF9UQk1SX1RCTVJTVSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCTVIpIHw9IEdQVF9UQk1SX1RCTVJTVTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNldHMgdGhlIEludGVydmFsIExvYWQgbW9kZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1RpbWVySW50ZXJ2YWxMb2FkTW9kZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyTW9kZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKyAgICBBU1NFUlQoKHVpMzJNb2RlID09IFRJTUVSX0lOVEVSVkFMTE9BRF9ORVhUQ1lDTEUpIHx8ICh1aTMyTW9kZSA9PSBUSU1FUl9JTlRFUlZBTExPQURfVElNRU9VVCkpOworCisgICAgLy8gU2V0IG1vZGUgZm9yIHRpbWVyIEEKKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9BKQorICAgIHsKKyAgICAgICAgaWYodWkzMk1vZGUgPT0gVElNRVJfSU5URVJWQUxMT0FEX05FWFRDWUNMRSkKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1SKSAmPSB+KEdQVF9UQU1SX1RBSUxEKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFNUikgfD0gR1BUX1RBTVJfVEFJTEQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgbW9kZSBmb3IgdGltZXIgQgorICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0IpCisgICAgeworICAgICAgICBpZih1aTMyTW9kZSA9PSBUSU1FUl9JTlRFUlZBTExPQURfTkVYVENZQ0xFKQorICAgICAgICB7CisgICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCTVIpICY9IH4oR1BUX1RCTVJfVEJJTEQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1SKSB8PSBHUFRfVEJNUl9UQklMRDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YTdiOTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90aW1lci5oCkBAIC0wLDAgKzEsMTI0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHRpbWVyLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTAzIDA5OjU0OjQ3ICswMTAwIChUdWUsIDAzIE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0OTMzCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgdGltZXJfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX0dQVF9IX18KKyNkZWZpbmUgX19HUFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfZ3B0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSBUaW1lckNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgIE5PUk9NX1RpbWVyQ29uZmlndXJlCisgICAgI2RlZmluZSBUaW1lckxldmVsQ29udHJvbCAgICAgICAgICAgICAgIE5PUk9NX1RpbWVyTGV2ZWxDb250cm9sCisgICAgI2RlZmluZSBUaW1lclN0YWxsQ29udHJvbCAgICAgICAgICAgICAgIE5PUk9NX1RpbWVyU3RhbGxDb250cm9sCisgICAgI2RlZmluZSBUaW1lcldhaXRPblRyaWdnZXJDb250cm9sICAgICAgIE5PUk9NX1RpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wKKyAgICAjZGVmaW5lIFRpbWVySW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgTk9ST01fVGltZXJJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgVGltZXJJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICBOT1JPTV9UaW1lckludFVucmVnaXN0ZXIKKyAgICAjZGVmaW5lIFRpbWVyTWF0Y2hVcGRhdGVNb2RlICAgICAgICAgICAgTk9ST01fVGltZXJNYXRjaFVwZGF0ZU1vZGUKKyAgICAjZGVmaW5lIFRpbWVySW50ZXJ2YWxMb2FkTW9kZSAgICAgICAgICAgTk9ST01fVGltZXJJbnRlcnZhbExvYWRNb2RlCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gVGltZXJDb25maWd1cmUgYXMgdGhlIHVpMzJDb25maWcgcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVElNRVJfQ0ZHX09ORV9TSE9UICAgICAgICAweDAwMDAwMDIxICAvLyBGdWxsLXdpZHRoIG9uZS1zaG90IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19PTkVfU0hPVF9VUCAgICAgMHgwMDAwMDAzMSAgLy8gRnVsbC13aWR0aCBvbmUtc2hvdCB1cC1jb3VudCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfUEVSSU9ESUMgICAgICAgIDB4MDAwMDAwMjIgIC8vIEZ1bGwtd2lkdGggcGVyaW9kaWMgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX1BFUklPRElDX1VQICAgICAweDAwMDAwMDMyICAvLyBGdWxsLXdpZHRoIHBlcmlvZGljIHVwLWNvdW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19TUExJVF9QQUlSICAgICAgMHgwNDAwMDAwMCAgLy8gVHdvIGhhbGYtd2lkdGggdGltZXJzCisjZGVmaW5lIFRJTUVSX0NGR19BX09ORV9TSE9UICAgICAgMHgwMDAwMDAyMSAgLy8gVGltZXIgQSBvbmUtc2hvdCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQV9PTkVfU0hPVF9VUCAgIDB4MDAwMDAwMzEgIC8vIFRpbWVyIEEgb25lLXNob3QgdXAtY291bnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0FfUEVSSU9ESUMgICAgICAweDAwMDAwMDIyICAvLyBUaW1lciBBIHBlcmlvZGljIHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19BX1BFUklPRElDX1VQICAgMHgwMDAwMDAzMiAgLy8gVGltZXIgQSBwZXJpb2RpYyB1cC1jb3VudCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQV9DQVBfQ09VTlQgICAgIDB4MDAwMDAwMDMgIC8vIFRpbWVyIEEgZXZlbnQgY291bnRlcgorI2RlZmluZSBUSU1FUl9DRkdfQV9DQVBfQ09VTlRfVVAgIDB4MDAwMDAwMTMgIC8vIFRpbWVyIEEgZXZlbnQgdXAtY291bnRlcgorI2RlZmluZSBUSU1FUl9DRkdfQV9DQVBfVElNRSAgICAgIDB4MDAwMDAwMDcgIC8vIFRpbWVyIEEgZXZlbnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0FfQ0FQX1RJTUVfVVAgICAweDAwMDAwMDE3ICAvLyBUaW1lciBBIGV2ZW50IHVwLWNvdW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19BX1BXTSAgICAgICAgICAgMHgwMDAwMDAwQSAgLy8gVGltZXIgQSBQV00gb3V0cHV0CisjZGVmaW5lIFRJTUVSX0NGR19CX09ORV9TSE9UICAgICAgMHgwMDAwMjEwMCAgLy8gVGltZXIgQiBvbmUtc2hvdCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQl9PTkVfU0hPVF9VUCAgIDB4MDAwMDMxMDAgIC8vIFRpbWVyIEIgb25lLXNob3QgdXAtY291bnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0JfUEVSSU9ESUMgICAgICAweDAwMDAyMjAwICAvLyBUaW1lciBCIHBlcmlvZGljIHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19CX1BFUklPRElDX1VQICAgMHgwMDAwMzIwMCAgLy8gVGltZXIgQiBwZXJpb2RpYyB1cC1jb3VudCB0aW1lcgorI2RlZmluZSBUSU1FUl9DRkdfQl9DQVBfQ09VTlQgICAgIDB4MDAwMDAzMDAgIC8vIFRpbWVyIEIgZXZlbnQgY291bnRlcgorI2RlZmluZSBUSU1FUl9DRkdfQl9DQVBfQ09VTlRfVVAgIDB4MDAwMDEzMDAgIC8vIFRpbWVyIEIgZXZlbnQgdXAtY291bnRlcgorI2RlZmluZSBUSU1FUl9DRkdfQl9DQVBfVElNRSAgICAgIDB4MDAwMDA3MDAgIC8vIFRpbWVyIEIgZXZlbnQgdGltZXIKKyNkZWZpbmUgVElNRVJfQ0ZHX0JfQ0FQX1RJTUVfVVAgICAweDAwMDAxNzAwICAvLyBUaW1lciBCIGV2ZW50IHVwLWNvdW50IHRpbWVyCisjZGVmaW5lIFRJTUVSX0NGR19CX1BXTSAgICAgICAgICAgMHgwMDAwMEEwMCAgLy8gVGltZXIgQiBQV00gb3V0cHV0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFRpbWVySW50RW5hYmxlLCBUaW1lckludERpc2FibGUsIGFuZAorLy8gVGltZXJJbnRDbGVhciBhcyB0aGUgdWkzMkludEZsYWdzIHBhcmFtZXRlciwgYW5kIHJldHVybmVkIGZyb20KKy8vIFRpbWVySW50U3RhdHVzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVElNRVJfVElNQl9ETUEgICAgICAgICAgICAweDAwMDAyMDAwICAvLyBUaW1lckIgRE1BIERvbmUgaW50ZXJydXB0CisjZGVmaW5lIFRJTUVSX1RJTUJfTUFUQ0ggICAgICAgICAgMHgwMDAwMDgwMCAgLy8gVGltZXJCIG1hdGNoIGludGVycnVwdAorI2RlZmluZSBUSU1FUl9DQVBCX0VWRU5UICAgICAgICAgIDB4MDAwMDA0MDAgIC8vIENhcHR1cmVCIGV2ZW50IGludGVycnVwdAorI2RlZmluZSBUSU1FUl9DQVBCX01BVENIICAgICAgICAgIDB4MDAwMDAyMDAgIC8vIENhcHR1cmVCIG1hdGNoIGludGVycnVwdAorI2RlZmluZSBUSU1FUl9USU1CX1RJTUVPVVQgICAgICAgIDB4MDAwMDAxMDAgIC8vIFRpbWVyQiB0aW1lIG91dCBpbnRlcnJ1cHQKKyNkZWZpbmUgVElNRVJfVElNQV9ETUEgICAgICAgICAgICAweDAwMDAwMDIwICAvLyBUaW1lckEgRE1BIERvbmUgaW50ZXJydXB0CisjZGVmaW5lIFRJTUVSX1RJTUFfTUFUQ0ggICAgICAgICAgMHgwMDAwMDAxMCAgLy8gVGltZXJBIG1hdGNoIGludGVycnVwdAorI2RlZmluZSBUSU1FUl9DQVBBX0VWRU5UICAgICAgICAgIDB4MDAwMDAwMDQgIC8vIENhcHR1cmVBIGV2ZW50IGludGVycnVwdAorI2RlZmluZSBUSU1FUl9DQVBBX01BVENIICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIENhcHR1cmVBIG1hdGNoIGludGVycnVwdAorI2RlZmluZSBUSU1FUl9USU1BX1RJTUVPVVQgICAgICAgIDB4MDAwMDAwMDEgIC8vIFRpbWVyQSB0aW1lIG91dCBpbnRlcnJ1cHQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gVGltZXJDb250cm9sRXZlbnQgYXMgdGhlIHVpMzJFdmVudCBwYXJhbWV0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBUSU1FUl9FVkVOVF9QT1NfRURHRSAgICAgIDB4MDAwMDAwMDAgIC8vIENvdW50IHBvc2l0aXZlIGVkZ2VzCisjZGVmaW5lIFRJTUVSX0VWRU5UX05FR19FREdFICAgICAgMHgwMDAwMDQwNCAgLy8gQ291bnQgbmVnYXRpdmUgZWRnZXMKKyNkZWZpbmUgVElNRVJfRVZFTlRfQk9USF9FREdFUyAgICAweDAwMDAwQzBDICAvLyBDb3VudCBib3RoIGVkZ2VzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIG1vc3Qgb2YgdGhlIHRpbWVyIEFQSXMgYXMgdGhlIHVpMzJUaW1lcgorLy8gcGFyYW1ldGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVElNRVJfQSAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGICAvLyBUaW1lciBBCisjZGVmaW5lIFRJTUVSX0IgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMCAgLy8gVGltZXIgQgorI2RlZmluZSBUSU1FUl9CT1RIICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYgIC8vIFRpbWVyIEJvdGgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gR1BUU3luY2hyb25pemUgYXMgdGhlIHVpMzJUaW1lcnMgcGFyYW1ldGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBUSU1FUl8wQV9TWU5DICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFN5bmNocm9uaXplIFRpbWVyIDBBCisjZGVmaW5lIFRJTUVSXzBCX1NZTkMgICAgICAgICAgICAgMHgwMDAwMDAwMiAgLy8gU3luY2hyb25pemUgVGltZXIgMEIKKyNkZWZpbmUgVElNRVJfMUFfU1lOQyAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBTeW5jaHJvbml6ZSBUaW1lciAxQQorI2RlZmluZSBUSU1FUl8xQl9TWU5DICAgICAgICAgICAgIDB4MDAwMDAwMDggIC8vIFN5bmNocm9uaXplIFRpbWVyIDFCCisjZGVmaW5lIFRJTUVSXzJBX1NZTkMgICAgICAgICAgICAgMHgwMDAwMDAxMCAgLy8gU3luY2hyb25pemUgVGltZXIgMkEKKyNkZWZpbmUgVElNRVJfMkJfU1lOQyAgICAgICAgICAgICAweDAwMDAwMDIwICAvLyBTeW5jaHJvbml6ZSBUaW1lciAyQgorI2RlZmluZSBUSU1FUl8zQV9TWU5DICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8vIFN5bmNocm9uaXplIFRpbWVyIDNBCisjZGVmaW5lIFRJTUVSXzNCX1NZTkMgICAgICAgICAgICAgMHgwMDAwMDA4MCAgLy8gU3luY2hyb25pemUgVGltZXIgM0IKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gVGltZXJNYXRjaFVwZGF0ZU1vZGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFRJTUVSX01BVENIVVBEQVRFX05FWFRDWUNMRSAgMHgwMDAwMDAwMCAvLyBBcHBseSBtYXRjaCByZWdpc3RlciBvbiBuZXh0IGN5Y2xlCisjZGVmaW5lIFRJTUVSX01BVENIVVBEQVRFX1RJTUVPVVQgICAgMHgwMDAwMDAwMSAvLyBBcHBseSBtYXRjaCByZWdpc3RlciBvbiBuZXh0IHRpbWVvdXQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gVGltZXJJbnRlcnZhbExvYWQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFRJTUVSX0lOVEVSVkFMTE9BRF9ORVhUQ1lDTEUgIDB4MDAwMDAwMDAgLy8gTG9hZCBUeFIgcmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgaW4gdGhlIFR4SUxSIHJlZ2lzdGVyIG9uIHRoZSBuZXh0IGNsb2NrIGN5Y2xlCisjZGVmaW5lIFRJTUVSX0lOVEVSVkFMTE9BRF9USU1FT1VUICAgIDB4MDAwMDAwMDEgLy8gTG9hZCBUeFIgcmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgaW4gdGhlIFR4SUxSIHJlZ2lzdGVyIG9uIG5leHQgdGltZW91dAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vIQorLy8hIFxicmllZiBDaGVja3MgYSB0aW1lciBiYXNlIGFkZHJlc3MuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSB0aW1lciBtb2R1bGUgYmFzZSBhZGRyZXNzIGlzIHZhbGlkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitUaW1lckJhc2VWYWxpZCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICByZXR1cm4oKHVpMzJCYXNlID09IEdQVDBfQkFTRSkgfHwgKHVpMzJCYXNlID09IEdQVDFfQkFTRSkgfHwKKyAgICAgICAgICAgKHVpMzJCYXNlID09IEdQVDJfQkFTRSkgfHwgKHVpMzJCYXNlID09IEdQVDNfQkFTRSkpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIHRpbWVyKHMpLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9wZXJhdGlvbiBvZiB0aGUgdGltZXIgbW9kdWxlLiBUaGUgdGltZXIgbXVzdCBiZQorLy8hIGNvbmZpZ3VyZWQgYmVmb3JlIGl0IGlzIGVuYWJsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBlbmFibGUuIE11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSB0aW1lcihzKSBtb2R1bGUuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgfD0gdWkzMlRpbWVyICYgKEdQVF9DVExfVEFFTiB8IEdQVF9DVExfVEJFTik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSB0aW1lcihzKS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgb3BlcmF0aW9uIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBkaXNhYmxlLiBNdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckRpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSB0aW1lciBtb2R1bGUuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgJj0gfih1aTMyVGltZXIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUFRfQ1RMX1RBRU4gfCBHUFRfQ1RMX1RCRU4pKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29uZmlndXJlcyB0aGUgdGltZXIocykuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIG9wZXJhdGluZyBtb2RlIG9mIHRoZSB0aW1lcihzKS4gVGhlIHRpbWVyCisvLyEgbW9kdWxlIGlzIGRpc2FibGVkIGJlZm9yZSBiZWluZyBjb25maWd1cmVkIGFuZCBpcyBsZWZ0IGluIHRoZSBkaXNhYmxlZAorLy8hIHN0YXRlLgorLy8hCisvLyEgVGhlIHRpbWVycyBhcmUgY29tcHJpc2VkIG9mIHR3byAxNi1iaXQgdGltZXJzIHRoYXQgY2FuCisvLyEgb3BlcmF0ZSBpbmRlcGVuZGVudGx5IG9yIGJlIGNvbmNhdGVuYXRlZCB0byBmb3JtIGEgMzItYml0IHRpbWVyLgorLy8hCisvLyEgXG5vdGUgSWYgdGhlIHRpbWVycyBhcmUgdXNlZCBpbmRlcGVuZGVudGx5IHRoZSBsZW5ndGggb2YgdGltZXIgY2FuIGJlCisvLyEgZXh0ZW5kZWQgdG8gMjQgYml0IGJ5IHVzZSBvZiBhbiA4IGJpdCBwcmVzY2FsZSByZWdpc3RlciBzZXQgdXNpbmcKKy8vISBccmVmIFRpbWVyUHJlc2NhbGVTZXQoKS4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJpbmcgZm9yIGZ1bGwtd2lkdGggdGltZXIgXGMgdWkzMkNvbmZpZyBpcyBzZXQKKy8vISBhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBccmVmIFRJTUVSX0NGR19PTkVfU0hPVCAgICA6IEZ1bGwtd2lkdGggb25lLXNob3QgdGltZXIuCisvLyEgLSBccmVmIFRJTUVSX0NGR19PTkVfU0hPVF9VUCA6IEZ1bGwtd2lkdGggb25lLXNob3QgdGltZXIgdGhhdCBjb3VudHMgdXAKKy8vISAgIGluc3RlYWQgb2YgZG93bi4KKy8vISAtIFxyZWYgVElNRVJfQ0ZHX1BFUklPRElDICAgIDogRnVsbC13aWR0aCBwZXJpb2RpYyB0aW1lci4KKy8vISAtIFxyZWYgVElNRVJfQ0ZHX1BFUklPRElDX1VQIDogRnVsbC13aWR0aCBwZXJpb2RpYyB0aW1lciB0aGF0IGNvdW50cyB1cAorLy8hICAgaW5zdGVhZCBvZiBkb3duLgorLy8hCisvLyEgV2hlbiBjb25maWd1cmluZyBmb3IgYSBwYWlyIG9mIGhhbGYtd2lkdGggdGltZXJzLCBlYWNoIHRpbWVyIGlzIHNlcGFyYXRlbHkKKy8vISBjb25maWd1cmVkLiBUaGUgdGltZXJzIGFyZSBjb25maWd1cmVkIGJ5IHNldHRpbmcgXGMgdWkzMkNvbmZpZyB0bworLy8hIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvZiBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWU6CisvLyEgLSBVc2UgaGFsZi13aWR0aCB0aW1lcnM6CisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX1NQTElUX1BBSVIKKy8vISAtIFRpbWVyIEE6CisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX0FfT05FX1NIT1QgICAgIDogSGFsZi13aWR0aCBvbmUtc2hvdCB0aW1lcgorLy8hICAgLSBccmVmIFRJTUVSX0NGR19BX09ORV9TSE9UX1VQICA6IEhhbGYtd2lkdGggb25lLXNob3QgdGltZXIgdGhhdCBjb3VudHMgdXAKKy8vISAgICAgaW5zdGVhZCBvZiBkb3duLgorLy8hICAgLSBccmVmIFRJTUVSX0NGR19BX1BFUklPRElDICAgICA6IEhhbGYtd2lkdGggcGVyaW9kaWMgdGltZXIKKy8vISAgIC0gXHJlZiBUSU1FUl9DRkdfQV9QRVJJT0RJQ19VUCAgOiBIYWxmLXdpZHRoIHBlcmlvZGljIHRpbWVyIHRoYXQgY291bnRzIHVwCisvLyEgICAgIGluc3RlYWQgb2YgZG93bi4KKy8vISAgIC0gXHJlZiBUSU1FUl9DRkdfQV9DQVBfQ09VTlQgICAgOiBIYWxmLXdpZHRoIGVkZ2UgY291bnQgY2FwdHVyZQorLy8hICAgLSBccmVmIFRJTUVSX0NGR19BX0NBUF9DT1VOVF9VUCA6IEhhbGYtd2lkdGggZWRnZSBjb3VudCBjYXB0dXJlIHRoYXQgY291bnRzCisvLyEgICAgIHVwIGluc3RlYWQgb2YgZG93bi4KKy8vISAgIC0gXHJlZiBUSU1FUl9DRkdfQV9DQVBfVElNRSAgICAgOiBIYWxmLXdpZHRoIGVkZ2UgdGltZSBjYXB0dXJlCisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX0FfQ0FQX1RJTUVfVVAgIDogSGFsZi13aWR0aCBlZGdlIHRpbWUgY2FwdHVyZSB0aGF0IGNvdW50cyB1cAorLy8hICAgICBpbnN0ZWFkIG9mIGRvd24uCisvLyEgICAtIFxyZWYgVElNRVJfQ0ZHX0FfUFdNICAgICAgICAgIDogSGFsZi13aWR0aCBQV00gb3V0cHV0CisvLyEgLSBUaW1lciBCOgorLy8hICAgLSBTYW1lIGFzIFRpbWVyIEEgYnV0IHVzaW5nIFRJTUVSX0NGR19CXyogaW5zdGVhZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJDb25maWcgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0aW1lci4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRpbWVyQ29uZmlndXJlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ29uZmlnKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ29udHJvbHMgdGhlIG91dHB1dCBsZXZlbC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgUFdNIG91dHB1dCBsZXZlbCBmb3IgdGhlIHNwZWNpZmllZCB0aW1lci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGFkanVzdC4gTXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEgXHBhcmFtIGJJbnZlcnQgc3BlY2lmaWVzIHRoZSBvdXRwdXQgbGV2ZWwuCisvLyEgLSBcYyB0cnVlICA6IFRpbWVyJ3Mgb3V0cHV0IGlzIGFjdGl2ZSBsb3cuCisvLyEgLSBcYyBmYWxzZSA6IFRpbWVyJ3Mgb3V0cHV0IGlzIGFjdGl2ZSBoaWdoLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVGltZXJMZXZlbENvbnRyb2wodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYkludmVydCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbnRyb2xzIHRoZSBldmVudCB0eXBlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzaWduYWwgZWRnZShzKSB0aGF0IHRyaWdnZXJzIHRoZSB0aW1lciB3aGVuCisvLyEgaW4gY2FwdHVyZSBtb2RlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gYmUgYWRqdXN0ZWQ7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSB1aTMyRXZlbnQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGV2ZW50OyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfRVZFTlRfUE9TX0VER0UKKy8vISAtIFxyZWYgVElNRVJfRVZFTlRfTkVHX0VER0UKKy8vISAtIFxyZWYgVElNRVJfRVZFTlRfQk9USF9FREdFUworLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyRXZlbnRDb250cm9sKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHVpbnQzMl90IHVpMzJFdmVudCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGV2ZW50IHR5cGUuCisgICAgLy8KKyAgICB1aTMyVGltZXIgJj0gR1BUX0NUTF9UQUVWRU5UX00gfCBHUFRfQ1RMX1RCRVZFTlRfTTsKKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0NUTCkgPSAoKEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQ1RMKSAmIH51aTMyVGltZXIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpMzJFdmVudCAmIHVpMzJUaW1lcikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb250cm9scyB0aGUgc3RhbGwgaGFuZGxpbmcuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xzIHRoZSBzdGFsbCByZXNwb25zZSBmb3IgdGhlIHNwZWNpZmllZCB0aW1lci4gSWYgdGhlCisvLyEgXGUgYlN0YWxsIHBhcmFtZXRlciBpcyBcYiB0cnVlLCB0aGVuIHRoZSB0aW1lciBzdG9wcyBjb3VudGluZyBpZiB0aGUKKy8vISBwcm9jZXNzb3IgZW50ZXJzIGRlYnVnIG1vZGU7IG90aGVyd2lzZSB0aGUgdGltZXIga2VlcHMgcnVubmluZyB3aGlsZSBpbgorLy8hIGRlYnVnIG1vZGUuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBiZSBhZGp1c3RlZDsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEgXHBhcmFtIGJTdGFsbCBzcGVjaWZpZXMgdGhlIHJlc3BvbnNlIHRvIGEgc3RhbGwgc2lnbmFsLgorLy8hIC0gXGMgdHJ1ZSAgOiBUaW1lciBzdG9wcyBjb3VudGluZyBpZiB0aGUgcHJvY2Vzc29yIGVudGVycyBkZWJ1ZyBtb2RlLgorLy8hIC0gXGMgZmFsc2UgOiBUaW1lciBrZWVwcyBydW5uaW5nIGlmIHRoZSBwcm9jZXNzb3IgZW50ZXJzIGRlYnVnIG1vZGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBUaW1lclN0YWxsQ29udHJvbCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiU3RhbGwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb250cm9scyB0aGUgd2FpdCBvbiB0cmlnZ2VyIGhhbmRsaW5nLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIHdhaXRzIGZvciBhIHRyaWdnZXIgaW5wdXQgdG8KKy8vISBzdGFydCBjb3VudGluZy4gV2hlbiBlbmFibGVkLCB0aGUgcHJldmlvdXMgdGltZXIgaW4gdGhlIHRyaWdnZXIgY2hhaW4gbXVzdAorLy8hIGNvdW50IHRvIGl0cyB0aW1lb3V0IGluIG9yZGVyIGZvciB0aGlzIHRpbWVyIHRvIHN0YXJ0IGNvdW50aW5nLiBSZWZlciB0bworLy8hIHRoZSBwYXJ0J3MgZGF0YSBzaGVldCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdHJpZ2dlciBjaGFpbi4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBUaW1lciAwQSBvciBXaWRlIFRpbWVyIDBBLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gYmUgYWRqdXN0ZWQ7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSBiV2FpdCBzcGVjaWZpZXMgaWYgdGhlIHRpbWVyIHNob3VsZCB3YWl0IGZvciBhIHRyaWdnZXIgaW5wdXQuCisvLyEgLSBcYyB0cnVlICA6IFdhaXQgZm9yIHRyaWdnZXIuCisvLyEgLSBcYyBmYWxzZSA6IERvIG5vdCB3YWl0IGZvciB0cmlnZ2VyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJXYWl0KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSB0aW1lciBwcmVzY2FsZSB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdmFsdWUgb2YgdGhlIHRpbWVyIGNsb2NrIHByZXNjYWxlci4gVGhlCisvLyEgcHJlc2NhbGVyIGlzIG9ubHkgb3BlcmF0aW9uYWwgd2hlbiBpbiBoYWxmLXdpZHRoIG1vZGUgYW5kIGlzIHVzZWQgdG8gZXh0ZW5kCisvLyEgdGhlIHJhbmdlIG9mIHRoZSBoYWxmLXdpZHRoIHRpbWVyIG1vZGVzLgorLy8hCisvLyEgV2hlbiBpbiBvbmUtc2hvdCBvciBwZXJpb2RpYyBkb3duIGNvdW50IG1vZGVzLCBcYiB1aTMyVmFsdWUgZGVmaW5lcyB0aGUKKy8vISBwcmVzY2FsZXIgZm9yIHRoZSB0aW1lciBjb3VudGVyLiBXaGVuIGFjdGluZyBhcyBhIHRydWUgcHJlc2NhbGVyLCB0aGUKKy8vISBwcmVzY2FsZXIgY291bnRzIGRvd24gdG8gMCBiZWZvcmUgdGhlIHZhbHVlIGluIHRpbWVyIHJlZ2lzdGVycyBhcmUgaW5jcmVtZW50ZWQuCisvLyEKKy8vISBJbiBhbGwgb3RoZXIgaW5kaXZpZHVhbC9zcGxpdCBtb2RlcywgXGIgdWkzMlZhbHVlIGlzIGEgbGluZWFyIGV4dGVuc2lvbiBvZgorLy8hIHRoZSB1cHBlciByYW5nZSBvZiB0aGUgdGltZXIgY291bnRlciwgaG9sZGluZyBiaXRzIDIzOjE2IGluIHRoZSAxNi1iaXQgbW9kZXMKKy8vISBvZiB0aGUgMTYvMzItYml0IHRpbWVyLgorLy8hCisvLyEgXG5vdGUgQmVjYXVzZSB0aGUgcHJlc2NhbGVyIGNvdW50cyBkb3duIHRvIDAgdGhlIHRpbWVyIGRpdmlzaW9uIHJhdGlvIGVxdWFscworLy8hIFxiIHVpMzJWYWx1ZSArIDEuIEUuZy4gYSBwcmVzY2FsZSB2YWx1ZSBvZiAxNSBkaXZpZGVzIHRoZSB0aW1lciByYXRlIGJ5IDE2LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gYWRqdXN0OyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gdWkzMlZhbHVlIGlzIHRoZSB0aW1lciBwcmVzY2FsZSB2YWx1ZSB3aGljaCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1CisvLyEgKGJvdGggaW5jbHVkZWQpLgorLy8hIC0gMCAgIDogVGltZXIgZGl2aXNpb24gcmF0aW8gPSAxIChkaXNhYmxlIHByZXNjYWxpbmcpLgorLy8hIC0gMSAgIDogVGltZXIgZGl2aXNpb24gcmF0aW8gPSAyLgorLy8hIC0gLi4uCisvLyEgLSAyNTUgOiBUaW1lciBkaXZpc2lvbiByYXRpbyA9IDI1Ni4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lclByZXNjYWxlU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHVpbnQzMl90IHVpMzJWYWx1ZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworICAgIEFTU0VSVCh1aTMyVmFsdWUgPCAyNTYpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHRpbWVyIEEgcHJlc2NhbGVyIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBUFIpID0gdWkzMlZhbHVlOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB0aW1lciBCIHByZXNjYWxlciBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQlBSKSA9IHVpMzJWYWx1ZTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgdGltZXIgcHJlc2NhbGUgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHZhbHVlIG9mIHRoZSB0aW1lciBjbG9jayBwcmVzY2FsZXIuIFRoZQorLy8hIHByZXNjYWxlciBpcyBvbmx5IG9wZXJhdGlvbmFsIHdoZW4gaW4gaGFsZi13aWR0aCBtb2RlIGFuZCBpcyB1c2VkIHRvIGV4dGVuZAorLy8hIHRoZSByYW5nZSBvZiB0aGUgaGFsZi13aWR0aCB0aW1lciBtb2Rlcy4KKy8vIQorLy8hIFdoZW4gaW4gb25lLXNob3Qgb3IgcGVyaW9kaWMgZG93biBjb3VudCBtb2RlcywgXGIgdWkzMlZhbHVlIGRlZmluZXMgdGhlCisvLyEgcHJlc2NhbGVyIGZvciB0aGUgdGltZXIgY291bnRlci4gV2hlbiBhY3RpbmcgYXMgYSB0cnVlIHByZXNjYWxlciwgdGhlCisvLyEgcHJlc2NhbGVyIGNvdW50cyBkb3duIHRvIDAgYmVmb3JlIHRoZSB2YWx1ZSBpbiB0aW1lciByZWdpc3RlcnMgYXJlIGluY3JlbWVudGVkLgorLy8hCisvLyEgSW4gYWxsIG90aGVyIGluZGl2aWR1YWwvc3BsaXQgbW9kZXMsIFxiIHVpMzJWYWx1ZSBpcyBhIGxpbmVhciBleHRlbnNpb24gb2YKKy8vISB0aGUgdXBwZXIgcmFuZ2Ugb2YgdGhlIHRpbWVyIGNvdW50ZXIsIGhvbGRpbmcgYml0cyAyMzoxNiBpbiB0aGUgMTYtYml0IG1vZGVzCisvLyEgb2YgdGhlIDE2LzMyLWJpdCB0aW1lci4KKy8vIQorLy8hIFxub3RlIEJlY2F1c2UgdGhlIHByZXNjYWxlciBjb3VudHMgZG93biB0byAwIHRoZSB0aW1lciBkaXZpc2lvbiByYXRpbyBlcXVhbHMKKy8vISBcYiB1aTMyVmFsdWUgKyAxLiBFLmcuIGEgcHJlc2NhbGUgdmFsdWUgb2YgMTUgZGl2aWRlcyB0aGUgdGltZXIgcmF0ZSBieSAxNi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB0aW1lciBwcmVzY2FsZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitUaW1lclByZXNjYWxlR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBwcmVzY2FsZSB2YWx1ZS4KKyAgICAvLworICAgIHJldHVybigodWkzMlRpbWVyID09IFRJTUVSX0EpID8gSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQVBSKSA6CisgICAgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEJQUikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXQgdGhlIHRpbWVyIHByZXNjYWxlIG1hdGNoIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgY2xvY2sgcHJlc2NhbGVyIG1hdGNoCisvLyEgdmFsdWUuIFdoZW4gaW4gYSBoYWxmLXdpZHRoIG1vZGUgdGhhdCB1c2VzIHRoZSBjb3VudGVyIG1hdGNoIGFuZCB0aGUKKy8vISBwcmVzY2FsZXIsIHRoZSBwcmVzY2FsZSBtYXRjaCBlZmZlY3RpdmVseSBleHRlbmRzIHRoZSByYW5nZSBvZiB0aGUgbWF0Y2guCisvLyEgVGhlIHByZXNjYWxlciBwcm92aWRlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyB3aGVuIGNvdW50aW5nIGRvd24gaW4KKy8vISBwZXJpb2RpYyBhbmQgb25lLXNob3QgbW9kZXM7IGluIGFsbCBvdGhlciBtb2RlcywgdGhlIHByZXNjYWxlciBwcm92aWRlcyB0aGUKKy8vISBtb3N0IHNpZ25pZmljYW50IGJpdHMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBhZGp1c3Q7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSB1aTMyVmFsdWUgaXMgdGhlIHRpbWVyIHByZXNjYWxlIG1hdGNoIHZhbHVlIHdoaWNoIG11c3QgYmUgYmV0d2VlbiAwCisvLyEgYW5kIDI1NSAoYm90aCBpbmNsdWRlZCkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJQcmVzY2FsZU1hdGNoU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIsIHVpbnQzMl90IHVpMzJWYWx1ZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpIHx8CisgICAgICAgICAgICh1aTMyVGltZXIgPT0gVElNRVJfQk9USCkpOworICAgIEFTU0VSVCh1aTMyVmFsdWUgPCAyNTYpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHRpbWVyIEEgcHJlc2NhbGUgbWF0Y2ggaWYgcmVxdWVzdGVkLgorICAgIC8vCisgICAgaWYodWkzMlRpbWVyICYgVElNRVJfQSkKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFQTVIpID0gdWkzMlZhbHVlOworICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB0aW1lciBCIHByZXNjYWxlIG1hdGNoIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0IpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCUE1SKSA9IHVpMzJWYWx1ZTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldCB0aGUgdGltZXIgcHJlc2NhbGUgbWF0Y2ggdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBjbG9jayBwcmVzY2FsZXIgbWF0Y2ggdmFsdWUuCisvLyEgV2hlbiBpbiBhIGhhbGYtd2lkdGggbW9kZSB0aGF0IHVzZXMgdGhlIGNvdW50ZXIgbWF0Y2ggYW5kIHByZXNjYWxlciwgdGhlCisvLyEgcHJlc2NhbGUgbWF0Y2ggZWZmZWN0aXZlbHkgZXh0ZW5kcyB0aGUgcmFuZ2Ugb2YgdGhlIG1hdGNoLiBUaGUgcHJlc2NhbGVyCisvLyEgcHJvdmlkZXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgd2hlbiBjb3VudGluZyBkb3duIGluIHBlcmlvZGljIGFuZAorLy8hIG9uZS1zaG90IG1vZGVzOyBpbiBhbGwgb3RoZXIgbW9kZXMsIHRoZSBwcmVzY2FsZXIgcHJvdmlkZXMgdGhlIG1vc3QKKy8vISBzaWduaWZpY2FudCBiaXRzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXI7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHRpbWVyIHByZXNjYWxlIG1hdGNoLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVGltZXJQcmVzY2FsZU1hdGNoR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgcHJlc2NhbGUgbWF0Y2ggdmFsdWUuCisgICAgLy8KKyAgICByZXR1cm4oKHVpMzJUaW1lciA9PSBUSU1FUl9BKSA/IEhXUkVHKHVpMzJCYXNlICsgR1BUX09fVEFQTVIpIDoKKyAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQlBNUikpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSB0aW1lciBsb2FkIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSB0aW1lciBsb2FkIHZhbHVlOyBpZiB0aGUgdGltZXIgaXMgcnVubmluZyB0aGVuCisvLyEgdGhlIHZhbHVlIGlzIGltbWVkaWF0ZWx5IGxvYWRlZCBpbnRvIHRoZSB0aW1lci4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIGJvdGggZnVsbC0gYW5kIGhhbGYtd2lkdGggbW9kZXMgb2YKKy8vISAxNi8zMi1iaXQgdGltZXJzLgorLy8hCisvLyEgXG5vdGUgT25seSBccmVmIFRJTUVSX0Egc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGltZXIgaXMgY29uZmlndXJlZCBmb3IKKy8vISBmdWxsLXdpZHRoIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGFkanVzdDsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEgXHBhcmFtIHVpMzJWYWx1ZSBpcyB0aGUgbG9hZCB2YWx1ZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckxvYWRTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMlZhbHVlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlRpbWVyID09IFRJTUVSX0EpIHx8ICh1aTMyVGltZXIgPT0gVElNRVJfQikgfHwKKyAgICAgICAgICAgKHVpMzJUaW1lciA9PSBUSU1FUl9CT1RIKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdGltZXIgQSBsb2FkIHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBSUxSKSA9IHVpMzJWYWx1ZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdGltZXIgQiBsb2FkIHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0IpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCSUxSKSA9IHVpMzJWYWx1ZTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHRpbWVyIGxvYWQgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnRseSBwcm9ncmFtbWVkIGludGVydmFsIGxvYWQgdmFsdWUgZm9yIHRoZQorLy8hIHNwZWNpZmllZCB0aW1lci4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIGJvdGggZnVsbC0gYW5kIGhhbGYtd2lkdGggbW9kZXMgb2YKKy8vISAxNi8zMi1iaXQgdGltZXJzLgorLy8hCisvLyEgXG5vdGUgT25seSBccmVmIFRJTUVSX0Egc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGltZXIgaXMgY29uZmlndXJlZCBmb3IKKy8vISBmdWxsLXdpZHRoIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGxvYWQgdmFsdWUgZm9yIHRoZSB0aW1lcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorVGltZXJMb2FkR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVGltZXIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbG9hZCB2YWx1ZS4KKyAgICAvLworICAgIHJldHVybigodWkzMlRpbWVyID09IFRJTUVSX0EpID8gSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQUlMUikgOgorICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCSUxSKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGN1cnJlbnQgdGltZXIgdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgdGltZXIuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBib3RoIGZ1bGwtIGFuZCBoYWxmLXdpZHRoIG1vZGVzIG9mCisvLyEgMTYvMzItYml0IHRpbWVycy4KKy8vIQorLy8hIFxub3RlIE9ubHkgXHJlZiBUSU1FUl9BIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRpbWVyIGlzIGNvbmZpZ3VyZWQgZm9yCisvLyEgZnVsbC13aWR0aCBvcGVyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcjsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB0aW1lci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1RpbWVyVmFsdWVHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aW1lciB2YWx1ZS4KKyAgICAvLworICAgIHJldHVybigodWkzMlRpbWVyID09IFRJTUVSX0EpID8gSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQVIpIDoKKyAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQlIpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgdGltZXIgbWF0Y2ggdmFsdWUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIG1hdGNoIHZhbHVlIGZvciBhIHRpbWVyLiBUaGlzIHZhbHVlIGlzIHVzZWQKKy8vISBpbiBjYXB0dXJlIGNvdW50IG1vZGUgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gaW50ZXJydXB0IHRoZSBwcm9jZXNzb3IgYW5kIGluCisvLyEgUFdNIG1vZGUgdG8gZGV0ZXJtaW5lIHRoZSBkdXR5IGN5Y2xlIG9mIHRoZSBvdXRwdXQgc2lnbmFsLiBNYXRjaCBpbnRlcnJ1cHRzCisvLyEgY2FuIGFsc28gYmUgZ2VuZXJhdGVkIGluIHBlcmlvZGljIGFuZCBvbmUtc2hvdCBtb2RlcyB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKy8vISBjb3VudGVyIG1hdGNoZXMgdGhpcyByZWdpc3Rlci4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIGJvdGggZnVsbC0gYW5kIGhhbGYtd2lkdGggbW9kZXMgb2YKKy8vISAxNi8zMi1iaXQgdGltZXJzLgorLy8hCisvLyEgXG5vdGUgT25seSBccmVmIFRJTUVSX0Egc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGltZXIgaXMgY29uZmlndXJlZCBmb3IKKy8vISBmdWxsLXdpZHRoIG9wZXJhdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpIHRvIGFkanVzdDsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEgXHBhcmFtIHVpMzJWYWx1ZSBpcyB0aGUgbWF0Y2ggdmFsdWUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJNYXRjaFNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyLCB1aW50MzJfdCB1aTMyVmFsdWUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKCh1aTMyVGltZXIgPT0gVElNRVJfQSkgfHwgKHVpMzJUaW1lciA9PSBUSU1FUl9CKSB8fAorICAgICAgICAgICAodWkzMlRpbWVyID09IFRJTUVSX0JPVEgpKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB0aW1lciBBIG1hdGNoIHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJUaW1lciAmIFRJTUVSX0EpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RBTUFUQ0hSKSA9IHVpMzJWYWx1ZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgdGltZXIgQiBtYXRjaCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZih1aTMyVGltZXIgJiBUSU1FUl9CKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQk1BVENIUikgPSB1aTMyVmFsdWU7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSB0aW1lciBtYXRjaCB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbWF0Y2ggdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgdGltZXIuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciBib3RoIGZ1bGwtIGFuZCBoYWxmLXdpZHRoIG1vZGVzIG9mCisvLyEgMTYvMzItYml0IHRpbWVycy4KKy8vIQorLy8hIFxub3RlIE9ubHkgXHJlZiBUSU1FUl9BIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRpbWVyIGlzIGNvbmZpZ3VyZWQgZm9yCisvLyEgZnVsbC13aWR0aCBvcGVyYXRpb24uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcjsgbXVzdCBiZSBvbmUgb2Y6CisvLyEgLSBccmVmIFRJTUVSX0EKKy8vISAtIFxyZWYgVElNRVJfQgorLy8hIC0gXHJlZiBUSU1FUl9CT1RICisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIG1hdGNoIHZhbHVlIGZvciB0aGUgdGltZXIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1RpbWVyTWF0Y2hHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lcikKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUaW1lciA9PSBUSU1FUl9BKSB8fCAodWkzMlRpbWVyID09IFRJTUVSX0IpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBtYXRjaCB2YWx1ZS4KKyAgICAvLworICAgIHJldHVybigodWkzMlRpbWVyID09IFRJTUVSX0EpID8gSFdSRUcodWkzMkJhc2UgKyBHUFRfT19UQU1BVENIUikgOgorICAgICAgICAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1RCTUFUQ0hSKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHRpbWVyIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgdGltZXIgaW50ZXJydXB0CisvLyEgb2NjdXJzLiBJbiBhZGRpdGlvbiwgdGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZQorLy8hIGludGVycnVwdCBjb250cm9sbGVyOyBzcGVjaWZpYyB0aW1lciBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB2aWEKKy8vISBccmVmIFRpbWVySW50RW5hYmxlKCkuIEl0IGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFyCisvLyEgdGhlIGludGVycnVwdCBzb3VyY2UgdmlhIFxyZWYgVGltZXJJbnRDbGVhcigpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocyk7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWVyCisvLyEgaW50ZXJydXB0IG9jY3Vycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRpbWVySW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBmbkhhbmRsZXIpKHZvaWQpKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgdGltZXIgaW50ZXJydXB0CisvLyEgb2NjdXJzLiBUaGlzIGZ1bmN0aW9uIGFsc28gbWFza3Mgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdAorLy8hIGNvbnRyb2xsZXIgc28gdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgbm8gbG9uZ2VyIGNhbGxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJUaW1lciBzcGVjaWZpZXMgdGhlIHRpbWVyKHMpOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRpbWVySW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBpbmRpdmlkdWFsIHRpbWVyIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbmRpY2F0ZWQgdGltZXIgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZC4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgdGhlIGJpdHdpc2UgT1Igb2YgYW55IGNvbWJpbmF0aW9uIG9mCisvLyEgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVElNRVJfQ0FQQl9FVkVOVCAgICA6IENhcHR1cmUgQiBldmVudCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEJfTUFUQ0ggICAgOiBDYXB0dXJlIEIgbWF0Y2ggaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9USU1CX1RJTUVPVVQgIDogVGltZXIgQiB0aW1lb3V0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfQ0FQQV9FVkVOVCAgICA6IENhcHR1cmUgQSBldmVudCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfTUFUQ0ggICAgOiBDYXB0dXJlIEEgbWF0Y2ggaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9USU1BX1RJTUVPVVQgIDogVGltZXIgQSB0aW1lb3V0IGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckludEVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19JTVIpIHw9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaW5kaXZpZHVhbCB0aW1lciBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGluZGljYXRlZCB0aW1lciBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgdGhlIGJpdHdpc2UgT1Igb2YgYW55IGNvbWJpbmF0aW9uIG9mCisvLyEgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVElNRVJfQ0FQQl9FVkVOVCAgICA6IENhcHR1cmUgQiBldmVudCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEJfTUFUQ0ggICAgOiBDYXB0dXJlIEIgbWF0Y2ggaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9USU1CX1RJTUVPVVQgIDogVGltZXIgQiB0aW1lb3V0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfQ0FQQV9FVkVOVCAgICA6IENhcHR1cmUgQSBldmVudCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfTUFUQ0ggICAgOiBDYXB0dXJlIEEgbWF0Y2ggaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9USU1BX1RJTUVPVVQgIDogVGltZXIgQSB0aW1lb3V0IGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckludERpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVGltZXJCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0lNUikgJj0gfih1aTMySW50RmxhZ3MpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSB0aW1lciBtb2R1bGUuIEVpdGhlcgorLy8hIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgc3RhdHVzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgYWxsb3dlZCB0bworLy8hIHJlZmxlY3QgdG8gdGhlIHByb2Nlc3NvciBjYW4gYmUgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSBiTWFza2VkIHNlbGVjdHMgZWl0aGVyIHJhdyBvciBtYXNrZWQgaW50ZXJydXB0IHN0YXR1czoKKy8vISAtIFxjIHRydWUgIDogTWFza2VkIGludGVycnVwdC4KKy8vISAtIFxjIGZhbHNlIDogUmF3IGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gVGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cywgZW51bWVyYXRlZCBhcyBhIGJpdCBmaWVsZCBvZiB2YWx1ZXM6CisvLyEgLSBccmVmIFRJTUVSX0NBUEJfRVZFTlQgICAgOiBDYXB0dXJlIEIgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBCX01BVENIICAgIDogQ2FwdHVyZSBCIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQl9USU1FT1VUICA6IFRpbWVyIEIgdGltZW91dCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfRVZFTlQgICAgOiBDYXB0dXJlIEEgZXZlbnQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9DQVBBX01BVENIICAgIDogQ2FwdHVyZSBBIG1hdGNoIGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfVElNQV9USU1FT1VUICA6IFRpbWVyIEEgdGltZW91dCBpbnRlcnJ1cHQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitUaW1lckludFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiTWFza2VkKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChUaW1lckJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIHJldHVybihiTWFza2VkID8gSFdSRUcodWkzMkJhc2UgKyBHUFRfT19NSVMpIDoKKyAgICAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19SSVMpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIHRpbWVyIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhlIHNwZWNpZmllZCB0aW1lciBpbnRlcnJ1cHQgc291cmNlcyBhcmUgY2xlYXJlZCwgc28gdGhhdCB0aGV5IG5vIGxvbmdlcgorLy8hIGFzc2VydC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCB0aGUKKy8vISBpbnRlcnJ1cHQgZnJvbSBiZWluZyB0cmlnZ2VyZWQgYWdhaW4gaW1tZWRpYXRlbHkgdXBvbiBleGl0LgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgY2xlYXJlZC4KKy8vISBUaGUgcGFyYW1ldGVyIG11c3QgYmUgdGhlIGJpdHdpc2UgT1Igb2YgYW55IGNvbWJpbmF0aW9uIG9mCisvLyEgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVElNRVJfQ0FQQl9FVkVOVCAgICA6IENhcHR1cmUgQiBldmVudCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEJfTUFUQ0ggICAgOiBDYXB0dXJlIEIgbWF0Y2ggaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9USU1CX1RJTUVPVVQgIDogVGltZXIgQiB0aW1lb3V0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVElNRVJfQ0FQQV9FVkVOVCAgICA6IENhcHR1cmUgQSBldmVudCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFRJTUVSX0NBUEFfTUFUQ0ggICAgOiBDYXB0dXJlIEEgbWF0Y2ggaW50ZXJydXB0LgorLy8hIC0gXHJlZiBUSU1FUl9USU1BX1RJTUVPVVQgIDogVGltZXIgQSB0aW1lb3V0IGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUaW1lckludENsZWFyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX0lDTFIpID0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTeW5jaHJvbml6ZXMgdGhlIGNvdW50ZXJzIGluIGEgc2V0IG9mIHRpbWVycy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc3luY2hyb25pemVzIHRoZSBjb3VudGVycyBpbiBhIHNwZWNpZmllZCBzZXQgb2YgdGltZXJzLgorLy8hIFdoZW4gYSB0aW1lciBpcyBydW5uaW5nIGluIGhhbGYtd2lkdGggbW9kZSwgZWFjaCBoYWxmIGNhbiBiZSBpbmNsdWRlZCBvcgorLy8hIGV4Y2x1ZGVkIGluIHRoZSBzeW5jaHJvbml6YXRpb24gZXZlbnQuIFdoZW4gYSB0aW1lciBpcyBydW5uaW5nIGluCisvLyEgZnVsbC13aWR0aCBtb2RlLCBvbmx5IHRoZSBBIHRpbWVyIGNhbiBiZSBzeW5jaHJvbml6ZWQgKHNwZWNpZnlpbmcgdGhlIEIKKy8vISB0aW1lciBoYXMgbm8gZWZmZWN0KS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuIFRoaXMgcGFyYW1ldGVyIG11c3QKKy8vISBiZSB0aGUgYmFzZSBhZGRyZXNzIG9mIFRpbWVyMCAoaW4gb3RoZXIgd29yZHMsIFxiIEdQVDBfQkFTRSkuCisvLyEgXHBhcmFtIHVpMzJUaW1lcnMgaXMgdGhlIHNldCBvZiB0aW1lcnMgdG8gc3luY2hyb25pemUuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVElNRVJfMEFfU1lOQworLy8hIC0gXHJlZiBUSU1FUl8wQl9TWU5DCisvLyEgLSBccmVmIFRJTUVSXzFBX1NZTkMKKy8vISAtIFxyZWYgVElNRVJfMUJfU1lOQworLy8hIC0gXHJlZiBUSU1FUl8yQV9TWU5DCisvLyEgLSBccmVmIFRJTUVSXzJCX1NZTkMKKy8vISAtIFxyZWYgVElNRVJfM0FfU1lOQworLy8hIC0gXHJlZiBUSU1FUl8zQl9TWU5DCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJTeW5jaHJvbml6ZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlRpbWVycykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodWkzMkJhc2UgPT0gR1BUMF9CQVNFKTsKKworICAgIC8vCisgICAgLy8gU3luY2hyb25pemUgdGhlIHNwZWNpZmllZCB0aW1lcnMuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIEdQVF9PX1NZTkMpID0gdWkzMlRpbWVyczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBBTkQnaW5nIG9mIHRoZSBDQ1Agb3V0cHV0cyBmcm9tIFRpbWVyIEEgYW5kIFRpbWVyIEIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RpbWVyQ2NwQ29tYmluZUVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLyBTZXQgdGhlIGJpdAorICAgIEhXUkVHKHVpMzJCYXNlICsgR1BUX09fQU5EQ0NQKSB8PSBHUFRfQU5EQ0NQX0NDUF9BTkRfRU47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIEFORCdpbmcgb2YgdGhlIENDUCBvdXRwdXRzIGZyb20gVGltZXIgQSBhbmQgVGltZXIgQi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBtb2R1bGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVGltZXJDY3BDb21iaW5lRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzCisgICAgQVNTRVJUKFRpbWVyQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLyBDbGVhciB0aGUgYml0CisgICAgSFdSRUcodWkzMkJhc2UgKyBHUFRfT19BTkRDQ1ApICY9IH4oR1BUX0FORENDUF9DQ1BfQU5EX0VOKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgTWF0Y2ggUmVnaXN0ZXIgVXBkYXRlIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xzIHdoZW4gdGhlIE1hdGNoIFJlZ2lzdGVyIHZhbHVlIGFuZCBQcmVzY2FsZSBSZWdpc3RlciB2YWx1ZQorLy8hIGFyZSBhcHBsaWVkIGFmdGVyIHdyaXRpbmcgdGhlc2UgcmVnaXN0ZXJzIHdoaWxlIGEgdGltZXIgaXMgZW5hYmxlZC4KKy8vIQorLy8hIFxub3RlIElmIHRoZSB0aW1lciBpcyBkaXNhYmxlZCB3aGVuIHNldHRpbmcgdGhlIHVwZGF0ZSBtb2RlIHRoZSBNYXRjaCBSZWdpc3RlcgorLy8hIGFuZCBQcmVzY2FsZSBSZWdpc3RlciB2YWx1ZXMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkgd2hlbiBlbmFibGluZyB0aGUgdGltZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGltZXIgbW9kdWxlLgorLy8hIFxwYXJhbSB1aTMyVGltZXIgc3BlY2lmaWVzIHRoZSB0aW1lcihzKSB0byBjb25maWd1cmU7IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBUSU1FUl9BCisvLyEgLSBccmVmIFRJTUVSX0IKKy8vISAtIFxyZWYgVElNRVJfQk9USAorLy8hIFxwYXJhbSB1aTMyTW9kZSBzZXRzIHRoZSBtb2RlOgorLy8hIC0gXHJlZiBUSU1FUl9NQVRDSFVQREFURV9ORVhUQ1lDTEUgOiBBcHBseSBNYXRjaCBSZWdpc3RlciBhbmQgUHJlc2NhbGUgUmVnaXN0ZXIgb24gbmV4dCBjbG9jaworLy8hICAgICAgICBjeWNsZSBhZnRlciB3cml0aW5nIGFueSBvZiB0aGVzZSByZWdpc3RlcnMuCisvLyEgLSBccmVmIFRJTUVSX01BVENIVVBEQVRFX1RJTUVPVVQgICA6IEFwcGx5IE1hdGNoIFJlZ2lzdGVyIGFuZCBQcmVzY2FsZSBSZWdpc3RlciBvbiBuZXh0IHRpbWVvdXQKKy8vISAgICAgICAgYWZ0ZXIgd3JpdGluZyBhbnkgb2YgdGhlc2UgcmVnaXN0ZXJzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVGltZXJNYXRjaFVwZGF0ZU1vZGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMk1vZGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBJbnRlcnZhbCBMb2FkIG1vZGUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xzIHdoZW4gdGhlIFRpbWVyIFJlZ2lzdGVyIGFuZCBQcmVzY2FsZSBTbmFwLXNob3QgKGlmIHVzZWQpCisvLyEgYXJlIHVwZGF0ZWQuCisvLyEKKy8vISBUaW1lciBSZWdpc3RlciAoVEFSL1RCUikgaXMgdXBkYXRlZCB3aGVuIEludGVydmFsIExvYWQgUmVnaXN0ZXIgKFRBSUxSL1RCSUxSKSBpcyB3cml0dGVuCisvLyEgYW5kIHRoZSBQcmVzY2FsZSBTbmFwLXNob3QgKFRBUFMvVEJQUykgaXMgdXBkYXRlZCB3aGVuIFByZXNjYWxlIFJlZ2lzdGVyIChUQVBSL1RCUFIpIGlzCisvLyEgd3JpdHRlbiBkZXBlbmRpbmcgb24gdGhlIG1vZGUgb2Ygb3BlcmF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIG1vZHVsZS4KKy8vISBccGFyYW0gdWkzMlRpbWVyIHNwZWNpZmllcyB0aGUgdGltZXIocykgdG8gY29uZmlndXJlOyBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVElNRVJfQQorLy8hIC0gXHJlZiBUSU1FUl9CCisvLyEgLSBccmVmIFRJTUVSX0JPVEgKKy8vISBccGFyYW0gdWkzMk1vZGUgc2V0cyB0aGUgbW9kZToKKy8vISAtIFxyZWYgVElNRVJfSU5URVJWQUxMT0FEX05FWFRDWUNMRSA6IFVwZGF0ZSBUaW1lciBSZWdpc3RlciBhbmQgUHJlc2NhbGUgU25hcC1zaG90IG9uIG5leHQgY2xvY2sKKy8vISAgICAgICAgY3ljbGUgYWZ0ZXIgd3JpdGluZyBJbnRlcnZhbCBMb2FkIFJlZ2lzdGVyIG9yIFByZXNjYWxlIFJlZ2lzdGVyLCByZXNwZWN0aXZlbHkuCisvLyEgLSBccmVmIFRJTUVSX0lOVEVSVkFMTE9BRF9USU1FT1VUICAgOiBVcGRhdGUgVGltZXIgUmVnaXN0ZXIgYW5kIFByZXNjYWxlIFNuYXAtc2hvdCBvbiBuZXh0IHRpbWVvdXQKKy8vISAgICAgICAgYWZ0ZXIgd3JpdGluZyBJbnRlcnZhbCBMb2FkIFJlZ2lzdGVyIG9yIFByZXNjYWxlIFJlZ2lzdGVyLCByZXNwZWN0aXZlbHkuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBUaW1lckludGVydmFsTG9hZE1vZGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJUaW1lciwgdWludDMyX3QgdWkzMk1vZGUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9UaW1lckNvbmZpZ3VyZQorICAgICAgICAjdW5kZWYgIFRpbWVyQ29uZmlndXJlCisgICAgICAgICNkZWZpbmUgVGltZXJDb25maWd1cmUgICAgICAgICAgICAgICAgICBST01fVGltZXJDb25maWd1cmUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1RpbWVyTGV2ZWxDb250cm9sCisgICAgICAgICN1bmRlZiAgVGltZXJMZXZlbENvbnRyb2wKKyAgICAgICAgI2RlZmluZSBUaW1lckxldmVsQ29udHJvbCAgICAgICAgICAgICAgIFJPTV9UaW1lckxldmVsQ29udHJvbAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVGltZXJTdGFsbENvbnRyb2wKKyAgICAgICAgI3VuZGVmICBUaW1lclN0YWxsQ29udHJvbAorICAgICAgICAjZGVmaW5lIFRpbWVyU3RhbGxDb250cm9sICAgICAgICAgICAgICAgUk9NX1RpbWVyU3RhbGxDb250cm9sCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9UaW1lcldhaXRPblRyaWdnZXJDb250cm9sCisgICAgICAgICN1bmRlZiAgVGltZXJXYWl0T25UcmlnZ2VyQ29udHJvbAorICAgICAgICAjZGVmaW5lIFRpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wgICAgICAgUk9NX1RpbWVyV2FpdE9uVHJpZ2dlckNvbnRyb2wKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1RpbWVySW50UmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBUaW1lckludFJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgVGltZXJJbnRSZWdpc3RlciAgICAgICAgICAgICAgICBST01fVGltZXJJbnRSZWdpc3RlcgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVGltZXJJbnRVbnJlZ2lzdGVyCisgICAgICAgICN1bmRlZiAgVGltZXJJbnRVbnJlZ2lzdGVyCisgICAgICAgICNkZWZpbmUgVGltZXJJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICBST01fVGltZXJJbnRVbnJlZ2lzdGVyCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9UaW1lck1hdGNoVXBkYXRlTW9kZQorICAgICAgICAjdW5kZWYgIFRpbWVyTWF0Y2hVcGRhdGVNb2RlCisgICAgICAgICNkZWZpbmUgVGltZXJNYXRjaFVwZGF0ZU1vZGUgICAgICAgICAgICBST01fVGltZXJNYXRjaFVwZGF0ZU1vZGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1RpbWVySW50ZXJ2YWxMb2FkTW9kZQorICAgICAgICAjdW5kZWYgIFRpbWVySW50ZXJ2YWxMb2FkTW9kZQorICAgICAgICAjZGVmaW5lIFRpbWVySW50ZXJ2YWxMb2FkTW9kZSAgICAgICAgICAgUk9NX1RpbWVySW50ZXJ2YWxMb2FkTW9kZQorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19HUFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdGltZXJfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjMTJkMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3RpbWVyX2RvYy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdGltZXJfZG9jLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTMwIDEzOjAzOjU5ICswMjAwIChXZWQsIDMwIE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTcxCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8hIFxhZGR0b2dyb3VwIHRpbWVyX2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX3RpbWVyIEludHJvZHVjdGlvbgorLy8hCisvLyEgVGhlIHRpbWVyIEFQSSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzaW5nIHRoZSBnZW5lcmFsLXB1cnBvc2UgdGltZXIgbW9kdWxlLgorLy8hCisvLyEgVGhlIHRpbWVyIG1vZHVsZSBjb250YWlucyBmb3VyIHRpbWVyIGJsb2NrcyB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbCBvcHRpb25zOgorLy8hIC0gT3BlcmF0aW5nIG1vZGVzOgorLy8hICAgLSAxNi1iaXQgd2l0aCA4LWJpdCBwcmVzY2FsZXIgb3IgMzItYml0IHByb2dyYW1tYWJsZSBvbmUtc2hvdCB0aW1lci4KKy8vISAgIC0gMTYtYml0IHdpdGggOC1iaXQgcHJlc2NhbGVyIG9yIDMyLWJpdCBwcm9ncmFtbWFibGUgcGVyaW9kaWMgdGltZXIuCisvLyEgICAtIFR3byBjYXB0dXJlIGNvbXBhcmUgUFdNIHBpbnMgKENDUCkgZm9yIGVhY2ggMzItYml0IHRpbWVyLgorLy8hICAgLSAyNC1iaXQgaW5wdXQtZWRnZSBjb3VudCBvciAyNC1iaXQgdGltZS1jYXB0dXJlIG1vZGVzLgorLy8hICAgLSAyNC1iaXQgUFdNIG1vZGUgd2l0aCBzb2Z0d2FyZS1wcm9ncmFtbWFibGUgb3V0cHV0IGludmVyc2lvbiBvZiB0aGUgUFdNIHNpZ25hbC4KKy8vISAgIC0gQ291bnQgdXAgb3IgZG93bi4KKy8vISAtIERhaXN5IGNoYWluaW5nIG9mIHRpbWVyIG1vZHVsZXMgYWxsb3dzIGEgc2luZ2xlIHRpbWVyIHRvIGluaXRpYXRlIG11bHRpcGxlIHRpbWluZyBldmVudHMuCisvLyEgLSBUaW1lciBzeW5jaHJvbml6YXRpb24gYWxsb3dzIHNlbGVjdGVkIHRpbWVycyB0byBzdGFydCBjb3VudGluZyBvbiB0aGUgc2FtZSBjbG9jayBjeWNsZS4KKy8vISAtIFVzZXItZW5hYmxlZCBzdGFsbGluZyB3aGVuIHRoZSBTeXN0ZW0gQ1BVIGFzc2VydHMgYSBDUFUgSGFsdCBmbGFnIGR1cmluZyBkZWJ1Zy4KKy8vISAtIEFiaWxpdHkgdG8gZGV0ZXJtaW5lIHRoZSBlbGFwc2VkIHRpbWUgYmV0d2VlbiB0aGUgYXNzZXJ0aW9uIG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgYW5kCisvLyEgICBlbnRyeSBpbnRvIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorLy8hCisvLyEgRWFjaCB0aW1lciBibG9jayBwcm92aWRlcyB0d28gaGFsZi13aWR0aCB0aW1lcnMvY291bnRlcnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZAorLy8hIHRvIG9wZXJhdGUgaW5kZXBlbmRlbnRseSBhcyB0aW1lcnMgb3IgZXZlbnQgY291bnRlcnMgb3IgdG8gb3BlcmF0ZSBhcyBhIGNvbWJpbmVkCisvLyEgZnVsbC13aWR0aCB0aW1lci4KKy8vISBUaGUgdGltZXJzIHByb3ZpZGUgMTYtYml0IGhhbGYtd2lkdGggdGltZXJzIGFuZCBhIDMyLWJpdCBmdWxsLXdpZHRoIHRpbWVyLgorLy8hIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBUEksIHRoZSB0d28KKy8vISBoYWxmLXdpZHRoIHRpbWVycyBwcm92aWRlZCBieSBhIHRpbWVyIGJsb2NrIGFyZSByZWZlcnJlZCB0byBhcyBUaW1lckEgYW5kCisvLyEgVGltZXJCLCBhbmQgdGhlIGZ1bGwtd2lkdGggdGltZXIgaXMgcmVmZXJyZWQgdG8gYXMgVGltZXJBLgorLy8hCisvLyEgV2hlbiBpbiBoYWxmLXdpZHRoIG1vZGUsIHRoZSB0aW1lciBjYW4gYWxzbyBiZSBjb25maWd1cmVkIGZvciBldmVudCBjYXB0dXJlIG9yCisvLyEgYXMgYSBwdWxzZSB3aWR0aCBtb2R1bGF0aW9uIChQV00pIGdlbmVyYXRvci4gV2hlbiBjb25maWd1cmVkIGZvciBldmVudAorLy8hIGNhcHR1cmUsIHRoZSB0aW1lciBhY3RzIGFzIGEgY291bnRlci4gSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gY291bnQgZWl0aGVyIHRoZQorLy8hIHRpbWUgYmV0d2VlbiBldmVudHMgb3IgdGhlIGV2ZW50cyB0aGVtc2VsdmVzLiBUaGUgdHlwZSBvZiBldmVudAorLy8hIGJlaW5nIGNvdW50ZWQgY2FuIGJlIGNvbmZpZ3VyZWQgYXMgYSBwb3NpdGl2ZSBlZGdlLCBhIG5lZ2F0aXZlIGVkZ2UsIG9yIGJvdGgKKy8vISBlZGdlcy4gV2hlbiBhIHRpbWVyIGlzIGNvbmZpZ3VyZWQgYXMgYSBQV00gZ2VuZXJhdG9yLCB0aGUgaW5wdXQgc2lnbmFsIHVzZWQgdG8KKy8vISBjYXB0dXJlIGV2ZW50cyBiZWNvbWVzIGFuIG91dHB1dCBzaWduYWwsIGFuZCB0aGUgdGltZXIgZHJpdmVzIGFuCisvLyEgZWRnZS1hbGlnbmVkIHB1bHNlIG9udG8gdGhhdCBzaWduYWwuCisvLyEKKy8vISBDb250cm9sIGlzIGFsc28gcHJvdmlkZWQgb3ZlciBpbnRlcnJ1cHQgc291cmNlcyBhbmQgZXZlbnRzLiBJbnRlcnJ1cHRzIGNhbiBiZQorLy8hIGdlbmVyYXRlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIGV2ZW50IGhhcyBiZWVuIGNhcHR1cmVkLCBvciB0aGF0IGEgY2VydGFpbiBudW1iZXIKKy8vISBvZiBldmVudHMgaGF2ZSBiZWVuIGNhcHR1cmVkLiBJbnRlcnJ1cHRzIGNhbiBhbHNvIGJlIGdlbmVyYXRlZCB3aGVuIHRoZSB0aW1lcgorLy8hIGhhcyBjb3VudGVkIGRvd24gdG8gMCBvciB3aGVuIHRoZSB0aW1lciBtYXRjaGVzIGEgY2VydGFpbiB2YWx1ZS4KKy8vIQorLy8hIFRpbWVyIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBieSBccmVmIFRpbWVyQ29uZmlndXJlKCksIHdoaWNoIHBlcmZvcm1zIHRoZSBoaWdoCisvLyEgbGV2ZWwgc2V0dXAgb2YgdGhlIHRpbWVyIG1vZHVsZTsgdGhhdCBpcywgaXQgaXMgdXNlZCB0byBzZXQgdXAgZnVsbC0gb3IKKy8vISBoYWxmLXdpZHRoIG1vZGVzLCBhbmQgdG8gc2VsZWN0IGJldHdlZW4gUFdNLCBjYXB0dXJlLCBhbmQgdGltZXIgb3BlcmF0aW9ucy4KKy8vIQorLy8hIFxzZWN0aW9uIHNlY190aW1lcl9hcGkgQVBJCisvLyEKKy8vISBUaGUgQVBJIGZ1bmN0aW9ucyBjYW4gYmUgZ3JvdXBlZCBsaWtlIHRoaXM6CisvLyEKKy8vISBGdW5jdGlvbnMgdG8gcGVyZm9ybSB0aW1lciBjb250cm9sOgorLy8hIC0gXHJlZiBUaW1lckNvbmZpZ3VyZSgpCisvLyEgLSBccmVmIFRpbWVyRW5hYmxlKCkKKy8vISAtIFxyZWYgVGltZXJEaXNhYmxlKCkKKy8vISAtIFxyZWYgVGltZXJMZXZlbENvbnRyb2woKQorLy8hIC0gXHJlZiBUaW1lcldhaXRPblRyaWdnZXJDb250cm9sKCkKKy8vISAtIFxyZWYgVGltZXJFdmVudENvbnRyb2woKQorLy8hIC0gXHJlZiBUaW1lclN0YWxsQ29udHJvbCgpCisvLyEgLSBccmVmIFRpbWVySW50ZXJ2YWxMb2FkTW9kZSgpCisvLyEgLSBccmVmIFRpbWVyTWF0Y2hVcGRhdGVNb2RlKCkKKy8vISAtIFxyZWYgVGltZXJDY3BDb21iaW5lRGlzYWJsZSgpCisvLyEgLSBccmVmIFRpbWVyQ2NwQ29tYmluZUVuYWJsZSgpCisvLyEKKy8vISBGdW5jdGlvbnMgdG8gbWFuYWdlIHRpbWVyIGNvbnRlbnQ6CisvLyEgLSBccmVmIFRpbWVyTG9hZFNldCgpCisvLyEgLSBccmVmIFRpbWVyTG9hZEdldCgpCisvLyEgLSBccmVmIFRpbWVyUHJlc2NhbGVTZXQoKQorLy8hIC0gXHJlZiBUaW1lclByZXNjYWxlR2V0KCkKKy8vISAtIFxyZWYgVGltZXJNYXRjaFNldCgpCisvLyEgLSBccmVmIFRpbWVyTWF0Y2hHZXQoKQorLy8hIC0gXHJlZiBUaW1lclByZXNjYWxlTWF0Y2hTZXQoKQorLy8hIC0gXHJlZiBUaW1lclByZXNjYWxlTWF0Y2hHZXQoKQorLy8hIC0gXHJlZiBUaW1lclZhbHVlR2V0KCkKKy8vISAtIFxyZWYgVGltZXJTeW5jaHJvbml6ZSgpCisvLyEKKy8vISBGdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHRpbWVyIGludGVycnVwdDoKKy8vISAtIFxyZWYgVGltZXJJbnRSZWdpc3RlcigpCisvLyEgLSBccmVmIFRpbWVySW50VW5yZWdpc3RlcigpCisvLyEKKy8vISBUaGUgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgc291cmNlcyB3aXRoaW4gdGhlIHRpbWVyIG1vZHVsZSBhcmUgbWFuYWdlZCB3aXRoOgorLy8hIC0gXHJlZiBUaW1lckludEVuYWJsZSgpCisvLyEgLSBccmVmIFRpbWVySW50RGlzYWJsZSgpCisvLyEgLSBccmVmIFRpbWVySW50U3RhdHVzKCkKKy8vISAtIFxyZWYgVGltZXJJbnRDbGVhcigpCisvLyEKKy8vISBAfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdHJuZy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdHJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzViZWQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90cm5nLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB0cm5nLmMKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTAyLTEwIDIyOjMyOjI4ICswMTAwIChUdWUsIDEwIEZlYiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQyNjQ1CisqCisqICBEZXNjcmlwdGlvbjogICAgRHJpdmVyIGZvciB0aGUgVFJORyBtb2R1bGUKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvdHJuZy5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgVFJOR0NvbmZpZ3VyZQorICAgICNkZWZpbmUgVFJOR0NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICBOT1JPTV9UUk5HQ29uZmlndXJlCisgICAgI3VuZGVmICBUUk5HTnVtYmVyR2V0CisgICAgI2RlZmluZSBUUk5HTnVtYmVyR2V0ICAgICAgICAgICAgICAgICAgIE5PUk9NX1RSTkdOdW1iZXJHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENvbmZpZ3VyZSB0aGUgdHJ1ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1RSTkdDb25maWd1cmUodWludDMyX3QgdWkzMk1pblNhbXBsZXNQZXJDeWNsZSwKKyAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1heFNhbXBsZXNQZXJDeWNsZSwKKyAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNsb2Nrc1BlclNhbXBsZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyVmFsOworCisgICAgLy8KKyAgICAvLyBNYWtlIHN1cmUgdGhlIFRSTkcgaXMgZGlzYWJsZWQuCisgICAgLy8KKyAgICB1aTMyVmFsID0gSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0NUTCkgJiB+VFJOR19DVExfVFJOR19FTjsKKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fQ1RMKSA9IHVpMzJWYWw7CisKKyAgICAvLworICAgIC8vIENvbmZpZ3VyZSB0aGUgc3RhcnR1cCBudW1iZXIgb2Ygc2FtcGxlcy4KKyAgICAvLworICAgIHVpMzJWYWwgJj0gflRSTkdfQ1RMX1NUQVJUVVBfQ1lDTEVTX007CisgICAgdWkzMlZhbCB8PSAoKCggdWkzMk1heFNhbXBsZXNQZXJDeWNsZSA+PiA4ICkgPDwgVFJOR19DVExfU1RBUlRVUF9DWUNMRVNfUyApICYgVFJOR19DVExfU1RBUlRVUF9DWUNMRVNfTSApOworICAgIEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19DVEwpID0gdWkzMlZhbDsKKworICAgIC8vCisgICAgLy8gQ29uZmlndXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIHByIGdlbmVyYXRlZCBudW1iZXIKKyAgICAvLyBhbmQgdGhlIG51bWJlciBvZiBjbG9ja3MgcGVyIHNhbXBsZS4KKyAgICAvLworICAgIEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19DRkcwKSA9ICgKKyAgICAgICAgKCgoIHVpMzJNYXhTYW1wbGVzUGVyQ3ljbGUgPj4gOCApIDw8IFRSTkdfQ0ZHMF9NQVhfUkVGSUxMX0NZQ0xFU19TICkgJiBUUk5HX0NGRzBfTUFYX1JFRklMTF9DWUNMRVNfTSApIHwKKyAgICAgICAgKCgoIHVpMzJDbG9ja3NQZXJTYW1wbGUgICAgICAgICApIDw8IFRSTkdfQ0ZHMF9TTVBMX0RJVl9TICAgICAgICAgICkgJiBUUk5HX0NGRzBfU01QTF9ESVZfTSAgICAgICAgICApIHwKKyAgICAgICAgKCgoIHVpMzJNaW5TYW1wbGVzUGVyQ3ljbGUgPj4gNiApIDw8IFRSTkdfQ0ZHMF9NSU5fUkVGSUxMX0NZQ0xFU19TICkgJiBUUk5HX0NGRzBfTUlOX1JFRklMTF9DWUNMRVNfTSApICAgKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXQgYSByYW5kb20gbnVtYmVyIGZyb20gdGhlIGdlbmVyYXRvcgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitUUk5HTnVtYmVyR2V0KHVpbnQzMl90IHVpMzJXb3JkKQoreworICAgIHVpbnQzMl90IHVpMzJSYW5kb21OdW1iZXI7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJXb3JkID09IFRSTkdfSElfV09SRCkgfHwKKyAgICAgICAgICAgKHVpMzJXb3JkID09IFRSTkdfTE9XX1dPUkQpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSByaWdodCByZXF1ZXN0ZWQgcGFydCBvZiB0aGUgZ2VuZXJhdGVkIG51bWJlci4KKyAgICAvLworICAgIGlmKHVpMzJXb3JkID09IFRSTkdfSElfV09SRCkKKyAgICB7CisgICAgICAgIHVpMzJSYW5kb21OdW1iZXIgPSBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fT1VUMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVpMzJSYW5kb21OdW1iZXIgPSBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fT1VUMCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBJbml0aWF0ZSBnZW5lcmF0aW9uIG9mIG5ldyBudW1iZXIuCisgICAgLy8KKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR0NMUikgPSAweDE7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgcmFuZG9tIG51bWJlci4KKyAgICAvLworICAgIHJldHVybiB1aTMyUmFuZG9tTnVtYmVyOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdHJuZy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdHJuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOWUwNzkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi90cm5nLmgKQEAgLTAsMCArMSw0NzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB0cm5nLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE2IDE5OjQxOjQ3ICswMTAwIChNb24sIDE2IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MDk0CisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIHRydWUgcmFuZG9tIG51bWJlciBnZW4uCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxhZGR0b2dyb3VwIHBlcmlwaGVyYWxfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHRybmdfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19UUk5HX0hfXworI2RlZmluZSBfX1RSTkdfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHJuZy5oPgorI2luY2x1ZGUgPGluYy9od19tZW1tYXAuaD4KKyNpbmNsdWRlIDxpbmMvaHdfaW50cy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRyaXZlcmxpYi9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvY3B1Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFRSTkdDb25maWd1cmUgICAgICAgICAgICAgICAgICAgTk9ST01fVFJOR0NvbmZpZ3VyZQorICAgICNkZWZpbmUgVFJOR051bWJlckdldCAgICAgICAgICAgICAgICAgICBOT1JPTV9UUk5HTnVtYmVyR2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBUUk5HX05VTUJFUl9SRUFEWSAgICAgICAweDAwMDAwMDAxICAvLworI2RlZmluZSBUUk5HX0ZST19TSFVURE9XTiAgICAgICAweDAwMDAwMDAyICAvLworI2RlZmluZSBUUk5HX05FRURfQ0xPQ0sgICAgICAgICAweDgwMDAwMDAwICAvLworCisjZGVmaW5lIFRSTkdfSElfV09SRCAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19MT1dfV09SRCAgICAgICAgICAgMHgwMDAwMDAwMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9uIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmUgdGhlIHRydWUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBzZXQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIHNhbXBsZXMgcmVxdWlyZWQKKy8vISBpbiBlYWNoIGdlbmVyYXRpb24gb2YgYSBuZXcgcmFuZG9tIG51bWJlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTWluU2FtcGxlc1BlckN5Y2xlIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBzYW1wbGVzIHBlciBlYWNoCisvLyEgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIuIENvbnN0cmFpbnRzOgorLy8hIC0gVmFsdWUgbXVzdCBiZSBiaWdnZXIgdGhhbiBvciBlcXVhbCB0byAyXjYgYW5kIGxlc3MgdGhhbiAyXjE0LgorLy8hIC0gVGhlIDYgTFNCcyBvZiB0aGUgYXJndW1lbnQgYXJlIHRydW5jYXRlZC4KKy8vISAtIElmIHRoZSB2YWx1ZSBpcyB6ZXJvLCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgaXMgZml4ZWQgdG8gdGhlIHZhbHVlIGRldGVybWluZWQKKy8vISAgIGJ5IHVpMzJNYXhTYW1wbGVzUGVyQ3ljbGUuIFRvIGVuc3VyZSBzYW1lIGVudHJvcHkgaW4gYWxsIGdlbmVyYXRlZCByYW5kb20KKy8vISAgIG51bWJlcnMgdGhlIHZhbHVlIDAgc2hvdWxkIGJlIHVzZWQuCisvLyEgXHBhcmFtIHVpMzJNYXhTYW1wbGVzUGVyQ3ljbGUgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGVhY2gKKy8vISBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlci4gQ29uc3RyYWludHM6CisvLyEgLSBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMl44IGFuZCAyXjI0IChib3RoIGluY2x1ZGVkKS4KKy8vISAtIFRoZSA4IExTQnMgb2YgdGhlIGFyZ3VtZW50IGFyZSB0cnVuY2F0ZWQuCisvLyEgLSBWYWx1ZSAwIGFuZCAyXjI0IGJvdGggZ2l2ZSB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZS4KKy8vISBccGFyYW0gdWkzMkNsb2Nrc1BlclNhbXBsZSBpcyB0aGUgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcyBmb3IgZWFjaCB0aW1lCisvLyEgYSBuZXcgc2FtcGxlIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBGUk9zLgorLy8hIC0gMCAgOiBFdmVyeSBzYW1wbGUuCisvLyEgLSAxICA6IEV2ZXJ5IHNlY29uZCBzYW1wbGUuCisvLyEgLSAuLi4KKy8vISAtIDE1IDogRXZlcnkgMTYuIHNhbXBsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFRSTkdDb25maWd1cmUodWludDMyX3QgdWkzMk1pblNhbXBsZXNQZXJDeWNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1heFNhbXBsZXNQZXJDeWNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNsb2Nrc1BlclNhbXBsZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZSB0aGUgVFJORy4KKy8vIQorLy8hIEVuYWJsZSB0aGUgVFJORyB0byBzdGFydCBwcmVwYXJpbmcgYSByYW5kb20gbnVtYmVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RSTkdFbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbmFibGUgdGhlIFRSTkcuCisgICAgSFdSRUdCSVRXKFRSTkdfQkFTRSArIFRSTkdfT19DVEwsIFRSTkdfQ1RMX1RSTkdfRU5fQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIHRoZSBUUk5HIG1vZHVsZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HRGlzYWJsZSh2b2lkKQoreworICAgIC8vIEVuYWJsZSB0aGUgVFJORworICAgIEhXUkVHQklUVyhUUk5HX0JBU0UgKyBUUk5HX09fQ1RMLCBUUk5HX0NUTF9UUk5HX0VOX0JJVE4pID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IGEgcmFuZG9tIG51bWJlciBmcm9tIHRoZSBnZW5lcmF0b3IuCisvLyEKKy8vISBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgZWl0aGVyIHRoZSBoaWdoIG9yIGxvdyBwYXJ0IG9mIHRoZSA2NCBiaXQKKy8vISBnZW5lcmF0ZWQgbnVtYmVyLgorLy8hCisvLyEgXG5vdGUgRGF0YSBmcm9tIHRoaXMgcmVnaXN0ZXIgaXMgb25seSB2YWxpZCBpZiB0aGUgVFJORyBoYXMgcHJvZHVjZWQgYQorLy8hIG51bWJlci4gVXNlIFxyZWYgVFJOR1N0YXR1c0dldCgpIHRvIHBvbGwgdGhlIGZvciBzdGF0dXMuIEFmdGVyIGNhbGxpbmcgdGhpcworLy8hIGZ1bmN0aW9uIGEgbmV3IHJhbmRvbSBudW1iZXIgd2lsbCBiZSBnZW5lcmF0ZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMldvcmQgZGV0ZXJtaW5lcyBpZiB3aGV0aGVyIHRvIHJldHVybiB0aGUgaGlnaCBvciBsb3cgMzIgYml0cy4KKy8vISAtIFxyZWYgVFJOR19ISV9XT1JECisvLyEgLSBccmVmIFRSTkdfTE9XX1dPUkQKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJuIGVpdGhlciB0aGUgaGlnaCBvciBsb3cgcGFydCBvZiB0aGUgNjQgYml0IGdlbmVyYXRlZCByYW5kb20KKy8vISBudW1iZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHVpbnQzMl90IFRSTkdOdW1iZXJHZXQodWludDMyX3QgdWkzMldvcmQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgVFJORy4KKy8vIQorLy8hIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgdGhlIFRSTkcuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBUUk5HIG1vZHVsZS4KKy8vISBUaGUgcmV0dXJuZWQgc3RhdHVzIGlzIGEgYml0d2lzZSBPUidlZCBjb21iaW5hdGlvbiBvZjoKKy8vISAtIFxyZWYgVFJOR19OVU1CRVJfUkVBRFkKKy8vISAtIFxyZWYgVFJOR19GUk9fU0hVVERPV04KKy8vISAtIFxyZWYgVFJOR19ORUVEX0NMT0NLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitUUk5HU3RhdHVzR2V0KHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHN0YXR1cy4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0lSUUZMQUdTVEFUKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlc2V0IHRoZSBUUk5HLgorLy8hCisvLyEgVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVzZXQgdGhlIFRSTkcgbW9kdWxlLiBSZXNldCB3aWxsIGJlIGxvdyBmb3IKKy8vISBhcHByb3hpbWF0ZWx5IDUgY2xvY2sgY3ljbGVzLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RSTkdSZXNldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gUmVzZXQgdGhlIFRSTkcuCisgICAgLy8KKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fU1dSRVNFVCkgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGluZGl2aWR1YWwgVFJORyBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaW5kaWNhdGVkIFRSTkcgaW50ZXJydXB0IHNvdXJjZXMuIE9ubHkgdGhlCisvLyEgc291cmNlcyB0aGF0IGFyZSBlbmFibGVkIGNhbiBiZSByZWZsZWN0ZWQgdG8gdGhlIHByb2Nlc3NvciBpbnRlcnJ1cHQ7CisvLyEgZGlzYWJsZWQgc291cmNlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcHJvY2Vzc29yLgorLy8hCisvLyEgXHBhcmFtIHVpMzJJbnRGbGFncyBpcyB0aGUgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVFJOR19OVU1CRVJfUkVBRFkKKy8vISAtIFxyZWYgVFJOR19GUk9fU0hVVERPV04KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HSW50RW5hYmxlKHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoKHVpMzJJbnRGbGFncyAmIFRSTkdfTlVNQkVSX1JFQURZKSB8fAorICAgICAgICAgICAodWkzMkludEZsYWdzICYgVFJOR19GUk9fU0hVVERPV04pKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19JUlFGTEFHTUFTSykgfD0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBpbmRpdmlkdWFsIFRSTkcgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbmRpY2F0ZWQgVFJORyBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIHRoZSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZGlzYWJsZWQuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVFJOR19OVU1CRVJfUkVBRFkKKy8vISAtIFxyZWYgVFJOR19GUk9fU0hVVERPV04KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HSW50RGlzYWJsZSh1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50RmxhZ3MgJiBUUk5HX05VTUJFUl9SRUFEWSkgfHwKKyAgICAgICAgICAgKHVpMzJJbnRGbGFncyAmIFRSTkdfRlJPX1NIVVRET1dOKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0lSUUZMQUdNQVNLKSAmPSB+dWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgb2YgdGhlIFRSTkcgbW9kdWxlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIFRSTkcuIEVpdGhlcgorLy8hIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgc3RhdHVzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgYWxsb3dlZCB0bworLy8hIHJlZmxlY3QgdG8gdGhlIHByb2Nlc3NvciBjYW4gYmUgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gYk1hc2tlZCBzZWxlY3RzIGVpdGhlciByYXcgb3IgbWFza2VkIGludGVycnVwdCBzdGF0dXMuCisvLyEgLSBcYyB0cnVlICA6IE1hc2tlZCBpbnRlcnJ1cHQuCisvLyEgLSBcYyBmYWxzZSA6IFJhdyBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cywgZW51bWVyYXRlZCBhczoKKy8vISAtIFxyZWYgVFJOR19OVU1CRVJfUkVBRFkKKy8vISAtIFxyZWYgVFJOR19GUk9fU0hVVERPV04KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QKK1RSTkdJbnRTdGF0dXMoYm9vbCBiTWFza2VkKQoreworICAgIHVpbnQzMl90IHVpMzJNYXNrOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gZWl0aGVyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIG9yIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBhcworICAgIC8vIHJlcXVlc3RlZC4KKyAgICAvLworICAgIGlmKGJNYXNrZWQpCisgICAgeworICAgICAgICB1aTMyTWFzayA9IEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19JUlFGTEFHTUFTSyk7CisgICAgICAgIHJldHVybih1aTMyTWFzayAmIEhXUkVHKFRSTkdfQkFTRSArIFRSTkdfT19JUlFGTEFHU1RBVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcoVFJOR19CQVNFICsgVFJOR19PX0lSUUZMQUdTVEFUKSAmIDB4MDAwMDAwMDMpOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIFRSTkcgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGUgc3BlY2lmaWVkIFRSTkcgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNsZWFyZWQsIHNvIHRoYXQgdGhleSBubyBsb25nZXIKKy8vISBhc3NlcnQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGtlZXAgdGhlCisvLyEgaW50ZXJydXB0IGZyb20gYmVpbmcgcmVjb2duaXplZCBhZ2FpbiBpbW1lZGlhdGVseSB1cG9uIGV4aXQuCisvLyEKKy8vISBcbm90ZSBEdWUgdG8gd3JpdGUgYnVmZmVycyBhbmQgc3luY2hyb25pemVycyBpbiB0aGUgc3lzdGVtIGl0IG1heSB0YWtlIHNldmVyYWwKKy8vISBjbG9jayBjeWNsZXMgZnJvbSBhIHJlZ2lzdGVyIHdyaXRlIGNsZWFyaW5nIGFuIGV2ZW50IGluIGEgbW9kdWxlIGFuZCB1bnRpbCB0aGUKKy8vISBldmVudCBpcyBhY3R1YWxseSBjbGVhcmVkIGluIHRoZSBOVklDIG9mIHRoZSBzeXN0ZW0gQ1BVLiBJdCBpcyByZWNvbW1lbmRlZCB0bworLy8hIGNsZWFyIHRoZSBldmVudCBzb3VyY2UgZWFybHkgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKElTUikgdG8gYWxsb3cKKy8vISB0aGUgZXZlbnQgY2xlYXIgdG8gcHJvcGFnYXRlIHRvIHRoZSBOVklDIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSLgorLy8hIEF0IHRoZSBzYW1lIHRpbWUsIGFuIGVhcmx5IGV2ZW50IGNsZWFyIGFsbG93cyBuZXcgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUKKy8vISBwZW5kZWQgaW5zdGVhZCBvZiBpZ25vcmVkIGlmIHRoZSBldmVudCBpcyBjbGVhcmVkIGxhdGVyIGluIHRoZSBJU1IuCisvLyEgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyIHRvIG1ha2Ugc3VyZSB0aGF0IGVub3VnaCB0aW1lIGhhcyBwYXNzZWQKKy8vISBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUiB0byBhdm9pZCBmYWxzZSByZS10cmlnZ2VyaW5nIG9mIHRoZSBjbGVhcmVkIGV2ZW50LgorLy8hIEEgc2ltcGxlLCBhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgb3B0aW1hbCwgd2F5IG9mIGNsZWFyaW5nIGFuIGV2ZW50IGJlZm9yZQorLy8hIHJldHVybmluZyBmcm9tIHRoZSBJU1IgaXM6CisvLyEgLSMgV3JpdGUgdG8gY2xlYXIgZXZlbnQgKGludGVycnVwdCBzb3VyY2UpLiAoYnVmZmVyZWQgd3JpdGUpCisvLyEgLSMgRHVtbXkgcmVhZCBmcm9tIHRoZSBldmVudCBzb3VyY2UgbW9kdWxlLiAobWFraW5nIHN1cmUgdGhlIHdyaXRlIGhhcyBwcm9wYWdhdGVkKQorLy8hIC0jIFdhaXQgdHdvIHN5c3RlbSBDUFUgY2xvY2sgY3ljbGVzICh1c2VyIGNvZGUgb3IgdHdvIE5PUHMpLiAoYWxsb3dpbmcgY2xlYXJlZCBldmVudCB0byBwcm9wYWdhdGUgdGhyb3VnaCBhbnkgc3luY2hyb25pemVycykKKy8vIQorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgY2xlYXJlZC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBUUk5HX05VTUJFUl9SRUFEWQorLy8hIC0gXHJlZiBUUk5HX0ZST19TSFVURE9XTgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1RSTkdJbnRDbGVhcih1aW50MzJfdCB1aTMySW50RmxhZ3MpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCh1aTMySW50RmxhZ3MgJiBUUk5HX05VTUJFUl9SRUFEWSkgfHwKKyAgICAgICAgICAgKHVpMzJJbnRGbGFncyAmIFRSTkdfRlJPX1NIVVRET1dOKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSByZXF1ZXN0ZWQgaW50ZXJydXB0IHNvdXJjZXMuCisgICAgLy8KKyAgICBIV1JFRyhUUk5HX0JBU0UgKyBUUk5HX09fSVJRRkxBR0NMUikgPSB1aTMySW50RmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBUUk5HIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcworLy8hIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyOyBzcGVjaWZpYworLy8hIFVBUlQgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQgdmlhIFxyZWYgVFJOR0ludEVuYWJsZSgpLiBJdCBpcyB0aGUgaW50ZXJydXB0CisvLyEgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlLgorLy8hCisvLyEgXHBhcmFtIHBmbkhhbmRsZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUKKy8vISBVQVJUIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVFJOR0ludFJlZ2lzdGVyKHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICAvLworICAgIC8vIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFJlZ2lzdGVyKElOVF9UUk5HX0lSUSwgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgVFJORyBpbnRlcnJ1cHQuCisgICAgLy8KKyAgICBJbnRFbmFibGUoSU5UX1RSTkdfSVJRKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGEgVFJORyBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCB1bnJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gSXQKKy8vISBjbGVhcnMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSBDcnlwdG8gaW50ZXJydXB0IG9jY3Vycy4gVGhpcworLy8hIGZ1bmN0aW9uIGFsc28gbWFza3Mgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHNvIHRoYXQKKy8vISB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitUUk5HSW50VW5yZWdpc3Rlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RGlzYWJsZShJTlRfVFJOR19JUlEpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFVucmVnaXN0ZXIoSU5UX1RSTkdfSVJRKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fVFJOR0NvbmZpZ3VyZQorICAgICAgICAjdW5kZWYgIFRSTkdDb25maWd1cmUKKyAgICAgICAgI2RlZmluZSBUUk5HQ29uZmlndXJlICAgICAgICAgICAgICAgICAgIFJPTV9UUk5HQ29uZmlndXJlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9UUk5HTnVtYmVyR2V0CisgICAgICAgICN1bmRlZiAgVFJOR051bWJlckdldAorICAgICAgICAjZGVmaW5lIFRSTkdOdW1iZXJHZXQgICAgICAgICAgICAgICAgICAgUk9NX1RSTkdOdW1iZXJHZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvLyBfX1RSTkdfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VhcnQuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI2MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWFydC5jCkBAIC0wLDAgKzEsMzcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdWFydC5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNiAxOTo0MTo0NyArMDEwMCAoTW9uLCAxNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTA5NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIFVBUlQuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3VhcnQuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFVBUlRGSUZPTGV2ZWxHZXQKKyAgICAjZGVmaW5lIFVBUlRGSUZPTGV2ZWxHZXQgICAgICAgICAgICAgICAgTk9ST01fVUFSVEZJRk9MZXZlbEdldAorICAgICN1bmRlZiAgVUFSVENvbmZpZ1NldEV4cENsaworICAgICNkZWZpbmUgVUFSVENvbmZpZ1NldEV4cENsayAgICAgICAgICAgICBOT1JPTV9VQVJUQ29uZmlnU2V0RXhwQ2xrCisgICAgI3VuZGVmICBVQVJUQ29uZmlnR2V0RXhwQ2xrCisgICAgI2RlZmluZSBVQVJUQ29uZmlnR2V0RXhwQ2xrICAgICAgICAgICAgIE5PUk9NX1VBUlRDb25maWdHZXRFeHBDbGsKKyAgICAjdW5kZWYgIFVBUlREaXNhYmxlCisgICAgI2RlZmluZSBVQVJURGlzYWJsZSAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlREaXNhYmxlCisgICAgI3VuZGVmICBVQVJUQ2hhckdldE5vbkJsb2NraW5nCisgICAgI2RlZmluZSBVQVJUQ2hhckdldE5vbkJsb2NraW5nICAgICAgICAgIE5PUk9NX1VBUlRDaGFyR2V0Tm9uQmxvY2tpbmcKKyAgICAjdW5kZWYgIFVBUlRDaGFyR2V0CisgICAgI2RlZmluZSBVQVJUQ2hhckdldCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRDaGFyR2V0CisgICAgI3VuZGVmICBVQVJUQ2hhclB1dE5vbkJsb2NraW5nCisgICAgI2RlZmluZSBVQVJUQ2hhclB1dE5vbkJsb2NraW5nICAgICAgICAgIE5PUk9NX1VBUlRDaGFyUHV0Tm9uQmxvY2tpbmcKKyAgICAjdW5kZWYgIFVBUlRDaGFyUHV0CisgICAgI2RlZmluZSBVQVJUQ2hhclB1dCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRDaGFyUHV0CisgICAgI3VuZGVmICBVQVJUSW50UmVnaXN0ZXIKKyAgICAjZGVmaW5lIFVBUlRJbnRSZWdpc3RlciAgICAgICAgICAgICAgICAgTk9ST01fVUFSVEludFJlZ2lzdGVyCisgICAgI3VuZGVmICBVQVJUSW50VW5yZWdpc3RlcgorICAgICNkZWZpbmUgVUFSVEludFVucmVnaXN0ZXIgICAgICAgICAgICAgICBOT1JPTV9VQVJUSW50VW5yZWdpc3RlcgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgRklGTyBsZXZlbCBhdCB3aGljaCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitVQVJURklGT0xldmVsR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCAqcHVpMzJUeExldmVsLAorICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcHVpMzJSeExldmVsKQoreworICAgIHVpbnQzMl90IHVpMzJUZW1wOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgRklGTyBsZXZlbCByZWdpc3Rlci4KKyAgICAvLworICAgIHVpMzJUZW1wID0gSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fSUZMUyk7CisKKyAgICAvLworICAgIC8vIEV4dHJhY3QgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk8gbGV2ZWxzLgorICAgIC8vCisgICAgKnB1aTMyVHhMZXZlbCA9IHVpMzJUZW1wICYgVUFSVF9JRkxTX1RYU0VMX007CisgICAgKnB1aTMyUnhMZXZlbCA9IHVpMzJUZW1wICYgVUFSVF9JRkxTX1JYU0VMX007Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFVBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitVQVJUQ29uZmlnU2V0RXhwQ2xrKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVUFSVENsaywKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJhdWQsIHVpbnQzMl90IHVpMzJDb25maWcpCit7CisgICAgdWludDMyX3QgdWkzMkRpdjsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJCYXVkICE9IDApOworCisgICAgLy8KKyAgICAvLyBTdG9wIHRoZSBVQVJULgorICAgIC8vCisgICAgVUFSVERpc2FibGUodWkzMkJhc2UpOworCisgICAgLy8KKyAgICAvLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFsIGJhdWQgcmF0ZSBkaXZpZGVyLgorICAgIC8vCisgICAgdWkzMkRpdiA9ICgoKHVpMzJVQVJUQ2xrICogOCkgLyB1aTMyQmF1ZCkgKyAxKSAvIDI7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgYmF1ZCByYXRlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fSUJSRCkgPSB1aTMyRGl2IC8gNjQ7CisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRkJSRCkgPSB1aTMyRGl2ICUgNjQ7CisKKyAgICAvLworICAgIC8vIFNldCBwYXJpdHksIGRhdGEgbGVuZ3RoLCBhbmQgbnVtYmVyIG9mIHN0b3AgYml0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpID0gdWkzMkNvbmZpZzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXRzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgYSBVQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVUFSVENvbmZpZ0dldEV4cENsayh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlVBUlRDbGssCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkJhdWQsIHVpbnQzMl90ICpwdWkzMkNvbmZpZykKK3sKKyAgICB1aW50MzJfdCB1aTMySW50LCB1aTMyRnJhYzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENvbXB1dGUgdGhlIGJhdWQgcmF0ZS4KKyAgICAvLworICAgIHVpMzJJbnQgPSBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19JQlJEKTsKKyAgICB1aTMyRnJhYyA9IEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0ZCUkQpOworICAgICpwdWkzMkJhdWQgPSAodWkzMlVBUlRDbGsgKiA0KSAvICgoNjQgKiB1aTMySW50KSArIHVpMzJGcmFjKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBwYXJpdHksIGRhdGEgbGVuZ3RoLCBhbmQgbnVtYmVyIG9mIHN0b3AgYml0cy4KKyAgICAvLworICAgICpwdWkzMkNvbmZpZyA9IChIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSAmCisgICAgICAgICAgICAgICAgICAgIChVQVJUX0xDUkhfU1BTIHwgVUFSVF9MQ1JIX1dMRU5fTSB8IFVBUlRfTENSSF9TVFAyIHwKKyAgICAgICAgICAgICAgICAgICAgIFVBUlRfTENSSF9FUFMgfCBVQVJUX0xDUkhfUEVOKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgRGlzYWJsZXMgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitVQVJURGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGVuZCBvZiBUWC4KKyAgICAvLworICAgIHdoaWxlKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0ZSKSAmIFVBUlRfRlJfQlVTWSkKKyAgICB7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBGSUZPLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgJj0gfihVQVJUX0xDUkhfRkVOKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgVUFSVC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0NUTCkgJj0gfihVQVJUX0NUTF9VQVJURU4gfCBVQVJUX0NUTF9UWEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUX0NUTF9SWEUpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFJlY2VpdmVzIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNwZWNpZmllZCBwb3J0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraW50MzJfdAorVUFSVENoYXJHZXROb25CbG9ja2luZyh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFueSBjaGFyYWN0ZXJzIGluIHRoZSByZWNlaXZlIEZJRk8uCisgICAgLy8KKyAgICBpZighKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0ZSKSAmIFVBUlRfRlJfUlhGRSkpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBSZWFkIGFuZCByZXR1cm4gdGhlIG5leHQgY2hhcmFjdGVyLgorICAgICAgICAvLworICAgICAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRFIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMsIHNvIHJldHVybiBhIGZhaWx1cmUuCisgICAgICAgIC8vCisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFdhaXRzIGZvciBhIGNoYXJhY3RlciBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2ludDMyX3QKK1VBUlRDaGFyR2V0KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFdhaXQgdW50aWwgYSBjaGFyIGlzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIHdoaWxlKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0ZSKSAmIFVBUlRfRlJfUlhGRSkKKyAgICB7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBOb3cgZ2V0IHRoZSBjaGFyYWN0ZXIuCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRFIpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBTZW5kcyBhIGNoYXJhY3RlciB0byB0aGUgc3BlY2lmaWVkIHBvcnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitib29sCitVQVJUQ2hhclB1dE5vbkJsb2NraW5nKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gU2VlIGlmIHRoZXJlIGlzIHNwYWNlIGluIHRoZSB0cmFuc21pdCBGSUZPLgorICAgIC8vCisgICAgaWYoIShIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1RYRkYpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV3JpdGUgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIHRyYW5zbWl0IEZJRk8uCisgICAgICAgIC8vCisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0RSKSA9IHVpOERhdGE7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU3VjY2Vzcy4KKyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuKHRydWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBUaGVyZSBpcyBubyBzcGFjZSBpbiB0aGUgdHJhbnNtaXQgRklGTywgc28gcmV0dXJuIGEgZmFpbHVyZS4KKyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgV2FpdHMgdG8gc2VuZCBhIGNoYXJhY3RlciBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1VBUlRDaGFyUHV0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gV2FpdCB1bnRpbCBzcGFjZSBpcyBhdmFpbGFibGUuCisgICAgLy8KKyAgICB3aGlsZShIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1RYRkYpCisgICAgeworICAgIH0KKworICAgIC8vCisgICAgLy8gU2VuZCB0aGUgY2hhci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0RSKSA9IHVpOERhdGE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIFVBUlQgaW50ZXJydXB0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVUFSVEludFJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlLCB2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICAodm9pZCl1aTMyQmFzZTsKKworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIoSU5UX1VBUlQwX0NPTUIsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIFVBUlQgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RW5hYmxlKElOVF9VQVJUMF9DT01CKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBVbnJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBVQVJUIGludGVycnVwdAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1VBUlRJbnRVbnJlZ2lzdGVyKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX1VBUlQwX0NPTUIpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFVucmVnaXN0ZXIoSU5UX1VBUlQwX0NPTUIpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWFydC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmYzMTkKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91YXJ0LmgKQEAgLTAsMCArMSwxMTY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdWFydC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0yNiAxMzo0ODo1NyArMDEwMCAoVGh1LCAyNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTIxNgorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBVQVJULgorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYWRkdG9ncm91cCBwZXJpcGhlcmFsX2dyb3VwCisvLyEgQHsKKy8vISBcYWRkdG9ncm91cCB1YXJ0X2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fVUFSVF9IX18KKyNkZWZpbmUgX19VQVJUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8aW5jL2h3X3VhcnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X2ludHMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHJlbmFtZXMgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgInN0YXRpYyBpbmxpbmUiLCBzbyB0aGF0CisvLyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gaW1wbGVtZW50YXRpb24gaW4gZmxhc2guIEF0IHRoZSBlbmQKKy8vIG9mIHRoaXMgZmlsZSBhIHNlY29uZCByZW5hbWluZyB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdHMgdG8gaW1wbGVtZW50YXRpb24gaW4KKy8vIFJPTSBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKy8vCisvLyBUbyBmb3JjZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLCBlLmcuIGZvciBkZWJ1Z2dpbmc6CisvLyAtIEdsb2JhbGx5OiBEZWZpbmUgRFJJVkVSTElCX05PUk9NIGF0IHByb2plY3QgbGV2ZWwKKy8vIC0gUGVyIGZ1bmN0aW9uOiBVc2UgcHJlZml4ICJOT1JPTV8iIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjZGVmaW5lIFVBUlRGSUZPTGV2ZWxHZXQgICAgICAgICAgICAgICAgTk9ST01fVUFSVEZJRk9MZXZlbEdldAorICAgICNkZWZpbmUgVUFSVENvbmZpZ1NldEV4cENsayAgICAgICAgICAgICBOT1JPTV9VQVJUQ29uZmlnU2V0RXhwQ2xrCisgICAgI2RlZmluZSBVQVJUQ29uZmlnR2V0RXhwQ2xrICAgICAgICAgICAgIE5PUk9NX1VBUlRDb25maWdHZXRFeHBDbGsKKyAgICAjZGVmaW5lIFVBUlREaXNhYmxlICAgICAgICAgICAgICAgICAgICAgTk9ST01fVUFSVERpc2FibGUKKyAgICAjZGVmaW5lIFVBUlRDaGFyR2V0Tm9uQmxvY2tpbmcgICAgICAgICAgTk9ST01fVUFSVENoYXJHZXROb25CbG9ja2luZworICAgICNkZWZpbmUgVUFSVENoYXJHZXQgICAgICAgICAgICAgICAgICAgICBOT1JPTV9VQVJUQ2hhckdldAorICAgICNkZWZpbmUgVUFSVENoYXJQdXROb25CbG9ja2luZyAgICAgICAgICBOT1JPTV9VQVJUQ2hhclB1dE5vbkJsb2NraW5nCisgICAgI2RlZmluZSBVQVJUQ2hhclB1dCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRDaGFyUHV0CisgICAgI2RlZmluZSBVQVJUSW50UmVnaXN0ZXIgICAgICAgICAgICAgICAgIE5PUk9NX1VBUlRJbnRSZWdpc3RlcgorICAgICNkZWZpbmUgVUFSVEludFVucmVnaXN0ZXIgICAgICAgICAgICAgICBOT1JPTV9VQVJUSW50VW5yZWdpc3RlcgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFVBUlRJbnRFbmFibGUsIFVBUlRJbnREaXNhYmxlLCBhbmQgVUFSVEludENsZWFyCisvLyBhcyB0aGUgdWkzMkludEZsYWdzIHBhcmFtZXRlciwgYW5kIHJldHVybmVkIGZyb20gVUFSVEludFN0YXR1cy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVBUlRfSU5UX09FICAgICAgICAgICAgIDB4NDAwICAgICAgIC8vIE92ZXJydW4gRXJyb3IgSW50ZXJydXB0IE1hc2sKKyNkZWZpbmUgVUFSVF9JTlRfQkUgICAgICAgICAgICAgMHgyMDAgICAgICAgLy8gQnJlYWsgRXJyb3IgSW50ZXJydXB0IE1hc2sKKyNkZWZpbmUgVUFSVF9JTlRfUEUgICAgICAgICAgICAgMHgxMDAgICAgICAgLy8gUGFyaXR5IEVycm9yIEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX0ZFICAgICAgICAgICAgIDB4MDgwICAgICAgIC8vIEZyYW1pbmcgRXJyb3IgSW50ZXJydXB0IE1hc2sKKyNkZWZpbmUgVUFSVF9JTlRfUlQgICAgICAgICAgICAgMHgwNDAgICAgICAgLy8gUmVjZWl2ZSBUaW1lb3V0IEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX1RYICAgICAgICAgICAgIDB4MDIwICAgICAgIC8vIFRyYW5zbWl0IEludGVycnVwdCBNYXNrCisjZGVmaW5lIFVBUlRfSU5UX1JYICAgICAgICAgICAgIDB4MDEwICAgICAgIC8vIFJlY2VpdmUgSW50ZXJydXB0IE1hc2sKKyNkZWZpbmUgVUFSVF9JTlRfQ1RTICAgICAgICAgICAgMHgwMDIgICAgICAgLy8gQ1RTIE1vZGVtIEludGVycnVwdCBNYXNrCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFVBUlRDb25maWdTZXRFeHBDbGsgYXMgdGhlIHVpMzJDb25maWcgcGFyYW1ldGVyCisvLyBhbmQgcmV0dXJuZWQgYnkgVUFSVENvbmZpZ0dldEV4cENsayBpbiB0aGUgcHVpMzJDb25maWcgcGFyYW1ldGVyLgorLy8gQWRkaXRpb25hbGx5LCB0aGUgVUFSVF9DT05GSUdfUEFSXyogc3Vic2V0IGNhbiBiZSBwYXNzZWQgdG8KKy8vIFVBUlRQYXJpdHlNb2RlU2V0IGFzIHRoZSB1aTMyUGFyaXR5IHBhcmFtZXRlciwgYW5kIGFyZSByZXR1cm5lZCBieQorLy8gVUFSVFBhcml0eU1vZGVHZXQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVQVJUX0NPTkZJR19XTEVOX01BU0sgICAweDAwMDAwMDYwICAvLyBNYXNrIGZvciBleHRyYWN0aW5nIHdvcmQgbGVuZ3RoCisjZGVmaW5lIFVBUlRfQ09ORklHX1dMRU5fOCAgICAgIDB4MDAwMDAwNjAgIC8vIDggYml0IGRhdGEKKyNkZWZpbmUgVUFSVF9DT05GSUdfV0xFTl83ICAgICAgMHgwMDAwMDA0MCAgLy8gNyBiaXQgZGF0YQorI2RlZmluZSBVQVJUX0NPTkZJR19XTEVOXzYgICAgICAweDAwMDAwMDIwICAvLyA2IGJpdCBkYXRhCisjZGVmaW5lIFVBUlRfQ09ORklHX1dMRU5fNSAgICAgIDB4MDAwMDAwMDAgIC8vIDUgYml0IGRhdGEKKyNkZWZpbmUgVUFSVF9DT05GSUdfU1RPUF9NQVNLICAgMHgwMDAwMDAwOCAgLy8gTWFzayBmb3IgZXh0cmFjdGluZyBzdG9wIGJpdHMKKyNkZWZpbmUgVUFSVF9DT05GSUdfU1RPUF9PTkUgICAgMHgwMDAwMDAwMCAgLy8gT25lIHN0b3AgYml0CisjZGVmaW5lIFVBUlRfQ09ORklHX1NUT1BfVFdPICAgIDB4MDAwMDAwMDggIC8vIFR3byBzdG9wIGJpdHMKKyNkZWZpbmUgVUFSVF9DT05GSUdfUEFSX01BU0sgICAgMHgwMDAwMDA4NiAgLy8gTWFzayBmb3IgZXh0cmFjdGluZyBwYXJpdHkKKyNkZWZpbmUgVUFSVF9DT05GSUdfUEFSX05PTkUgICAgMHgwMDAwMDAwMCAgLy8gTm8gcGFyaXR5CisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUl9FVkVOICAgIDB4MDAwMDAwMDYgIC8vIEV2ZW4gcGFyaXR5CisjZGVmaW5lIFVBUlRfQ09ORklHX1BBUl9PREQgICAgIDB4MDAwMDAwMDIgIC8vIE9kZCBwYXJpdHkKKyNkZWZpbmUgVUFSVF9DT05GSUdfUEFSX09ORSAgICAgMHgwMDAwMDA4MiAgLy8gUGFyaXR5IGJpdCBpcyBvbmUKKyNkZWZpbmUgVUFSVF9DT05GSUdfUEFSX1pFUk8gICAgMHgwMDAwMDA4NiAgLy8gUGFyaXR5IGJpdCBpcyB6ZXJvCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFVBUlRGSUZPTGV2ZWxTZXQgYXMgdGhlIHVpMzJUeExldmVsIHBhcmFtZXRlcgorLy8gYW5kIHJldHVybmVkIGJ5IFVBUlRGSUZPTGV2ZWxHZXQgaW4gdGhlIHB1aTMyVHhMZXZlbC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVBUlRfRklGT19UWDFfOCAgICAgICAgIDB4MDAwMDAwMDAgIC8vIFRyYW5zbWl0IGludGVycnVwdCBhdCAxLzggRnVsbAorI2RlZmluZSBVQVJUX0ZJRk9fVFgyXzggICAgICAgICAweDAwMDAwMDAxICAvLyBUcmFuc21pdCBpbnRlcnJ1cHQgYXQgMS80IEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1RYNF84ICAgICAgICAgMHgwMDAwMDAwMiAgLy8gVHJhbnNtaXQgaW50ZXJydXB0IGF0IDEvMiBGdWxsCisjZGVmaW5lIFVBUlRfRklGT19UWDZfOCAgICAgICAgIDB4MDAwMDAwMDMgIC8vIFRyYW5zbWl0IGludGVycnVwdCBhdCAzLzQgRnVsbAorI2RlZmluZSBVQVJUX0ZJRk9fVFg3XzggICAgICAgICAweDAwMDAwMDA0ICAvLyBUcmFuc21pdCBpbnRlcnJ1cHQgYXQgNy84IEZ1bGwKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gVUFSVEZJRk9MZXZlbFNldCBhcyB0aGUgdWkzMlJ4TGV2ZWwgcGFyYW1ldGVyCisvLyBhbmQgcmV0dXJuZWQgYnkgVUFSVEZJRk9MZXZlbEdldCBpbiB0aGUgcHVpMzJSeExldmVsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVUFSVF9GSUZPX1JYMV84ICAgICAgICAgMHgwMDAwMDAwMCAgLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgYXQgMS84IEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1JYMl84ICAgICAgICAgMHgwMDAwMDAwOCAgLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgYXQgMS80IEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1JYNF84ICAgICAgICAgMHgwMDAwMDAxMCAgLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgYXQgMS8yIEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1JYNl84ICAgICAgICAgMHgwMDAwMDAxOCAgLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgYXQgMy80IEZ1bGwKKyNkZWZpbmUgVUFSVF9GSUZPX1JYN184ICAgICAgICAgMHgwMDAwMDAyMCAgLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgYXQgNy84IEZ1bGwKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gVUFSVERNQUVuYWJsZSgpIGFuZCBVQVJURE1BRGlzYWJsZSgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVUFSVF9ETUFfRVJSX1JYU1RPUCAgICAgMHgwMDAwMDAwNCAgLy8gU3RvcCBETUEgcmVjZWl2ZSBpZiBVQVJUIGVycm9yCisjZGVmaW5lIFVBUlRfRE1BX1RYICAgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEVuYWJsZSBETUEgZm9yIHRyYW5zbWl0CisjZGVmaW5lIFVBUlRfRE1BX1JYICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEVuYWJsZSBETUEgZm9yIHJlY2VpdmUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFZhbHVlcyByZXR1cm5lZCBmcm9tIFVBUlRSeEVycm9yR2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVQVJUX1JYRVJST1JfT1ZFUlJVTiAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfUlhFUlJPUl9CUkVBSyAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9SWEVSUk9SX1BBUklUWSAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX1JYRVJST1JfRlJBTUlORyAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgcmV0dXJuZWQgZnJvbSB0aGUgVUFSVEJ1c3koKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVBUlRfQlVTWSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9JRExFICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vIQorLy8hIFxicmllZiBDaGVja3MgYSBVQVJUIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhIFVBUlQgcG9ydCBiYXNlIGFkZHJlc3MgaXMgdmFsaWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIFxjIHRydWUgaWYgdGhlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZCBhbmQgXGMgZmFsc2UKKy8vISBvdGhlcndpc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIGJvb2wKK1VBUlRCYXNlVmFsaWQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgcmV0dXJuKHVpMzJCYXNlID09IFVBUlQwX0JBU0UpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHR5cGUgb2YgcGFyaXR5LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB0eXBlIG9mIHBhcml0eSB0byB1c2UgZm9yIHRyYW5zbWl0dGluZyBhbmQgZXhwZWN0CisvLyEgd2hlbiByZWNlaXZpbmcuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMyUGFyaXR5IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBwYXJpdHkgdG8gdXNlLiBUaGUgbGFzdCB0d28gYWxsb3cKKy8vISBkaXJlY3QgY29udHJvbCBvZiB0aGUgcGFyaXR5IGJpdDsgaXQgaXMgYWx3YXlzIGVpdGhlciBvbmUgb3IgemVybyBiYXNlZCBvbgorLy8hIHRoZSBtb2RlLgorLy8hIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfTk9ORQorLy8hIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfRVZFTgorLy8hIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfT0RECisvLyEgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9PTkUKKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX1pFUk8KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJUUGFyaXR5TW9kZVNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlBhcml0eSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMlBhcml0eSA9PSBVQVJUX0NPTkZJR19QQVJfTk9ORSkgfHwKKyAgICAgICAgICAgKHVpMzJQYXJpdHkgPT0gVUFSVF9DT05GSUdfUEFSX0VWRU4pIHx8CisgICAgICAgICAgICh1aTMyUGFyaXR5ID09IFVBUlRfQ09ORklHX1BBUl9PREQpIHx8CisgICAgICAgICAgICh1aTMyUGFyaXR5ID09IFVBUlRfQ09ORklHX1BBUl9PTkUpIHx8CisgICAgICAgICAgICh1aTMyUGFyaXR5ID09IFVBUlRfQ09ORklHX1BBUl9aRVJPKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgcGFyaXR5IG1vZGUuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSA9ICgoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KFVBUlRfTENSSF9TUFMgfCBVQVJUX0xDUkhfRVBTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUX0xDUkhfUEVOKSkgfCB1aTMyUGFyaXR5KTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgdHlwZSBvZiBwYXJpdHkgY3VycmVudGx5IGJlaW5nIHVzZWQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHR5cGUgb2YgcGFyaXR5IHVzZWQgZm9yIHRyYW5zbWl0dGluZyBkYXRhIGFuZAorLy8hIGV4cGVjdGVkIHdoZW4gcmVjZWl2aW5nIGRhdGEuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhcml0eSBzZXR0aW5ncywgc3BlY2lmaWVkIGFzIG9uZSBvZjoKKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX05PTkUKKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX0VWRU4KKy8vISAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX09ERAorLy8hIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfT05FCisvLyEgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9aRVJPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitVQVJUUGFyaXR5TW9kZUdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgcGFyaXR5IHNldHRpbmcKKyAgICAvLworICAgIHJldHVybihIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSAmCisgICAgICAgICAgIChVQVJUX0xDUkhfU1BTIHwgVUFSVF9MQ1JIX0VQUyB8IFVBUlRfTENSSF9QRU4pKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgRklGTyBsZXZlbCBhdCB3aGljaCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIEZJRk8gbGV2ZWwgYXQgd2hpY2ggdHJhbnNtaXQgYW5kIHJlY2VpdmUgaW50ZXJydXB0cworLy8hIGFyZSBnZW5lcmF0ZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMyVHhMZXZlbCBpcyB0aGUgdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQgbGV2ZWwsIHNwZWNpZmllZCBhcyBvbmUgb2Y6CisvLyEgLSBccmVmIFVBUlRfRklGT19UWDFfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFgyXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYNF84CisvLyEgLSBccmVmIFVBUlRfRklGT19UWDZfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFg3XzgKKy8vISBccGFyYW0gdWkzMlJ4TGV2ZWwgaXMgdGhlIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQgbGV2ZWwsIHNwZWNpZmllZCBhcyBvbmUgb2Y6CisvLyEgLSBccmVmIFVBUlRfRklGT19SWDFfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlgyXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1JYNF84CisvLyEgLSBccmVmIFVBUlRfRklGT19SWDZfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlg3XzgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJURklGT0xldmVsU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVHhMZXZlbCwKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlJ4TGV2ZWwpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKHVpMzJUeExldmVsID09IFVBUlRfRklGT19UWDFfOCkgfHwKKyAgICAgICAgICAgKHVpMzJUeExldmVsID09IFVBUlRfRklGT19UWDJfOCkgfHwKKyAgICAgICAgICAgKHVpMzJUeExldmVsID09IFVBUlRfRklGT19UWDRfOCkgfHwKKyAgICAgICAgICAgKHVpMzJUeExldmVsID09IFVBUlRfRklGT19UWDZfOCkgfHwKKyAgICAgICAgICAgKHVpMzJUeExldmVsID09IFVBUlRfRklGT19UWDdfOCkpOworICAgIEFTU0VSVCgodWkzMlJ4TGV2ZWwgPT0gVUFSVF9GSUZPX1JYMV84KSB8fAorICAgICAgICAgICAodWkzMlJ4TGV2ZWwgPT0gVUFSVF9GSUZPX1JYMl84KSB8fAorICAgICAgICAgICAodWkzMlJ4TGV2ZWwgPT0gVUFSVF9GSUZPX1JYNF84KSB8fAorICAgICAgICAgICAodWkzMlJ4TGV2ZWwgPT0gVUFSVF9GSUZPX1JYNl84KSB8fAorICAgICAgICAgICAodWkzMlJ4TGV2ZWwgPT0gVUFSVF9GSUZPX1JYN184KSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgRklGTyBpbnRlcnJ1cHQgbGV2ZWxzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fSUZMUykgPSB1aTMyVHhMZXZlbCB8IHVpMzJSeExldmVsOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBGSUZPIGxldmVsIGF0IHdoaWNoIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgRklGTyBsZXZlbCBhdCB3aGljaCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpbnRlcnJ1cHRzCisvLyEgYXJlIGdlbmVyYXRlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHB1aTMyVHhMZXZlbCBpcyBhIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHRyYW5zbWl0IEZJRk8gbGV2ZWwsCisvLyEgcmV0dXJuZWQgYXMgb25lIG9mOgorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFgxXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYMl84CisvLyEgLSBccmVmIFVBUlRfRklGT19UWDRfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fVFg2XzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1RYN184CisvLyEgXHBhcmFtIHB1aTMyUnhMZXZlbCBpcyBhIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJlY2VpdmUgRklGTyBsZXZlbCwKKy8vISByZXR1cm5lZCBhcyBvbmUgb2Y6CisvLyEgLSBccmVmIFVBUlRfRklGT19SWDFfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlgyXzgKKy8vISAtIFxyZWYgVUFSVF9GSUZPX1JYNF84CisvLyEgLSBccmVmIFVBUlRfRklGT19SWDZfOAorLy8hIC0gXHJlZiBVQVJUX0ZJRk9fUlg3XzgKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFVBUlRGSUZPTGV2ZWxHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90ICpwdWkzMlR4TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMlJ4TGV2ZWwpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZXRzIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgVUFSVC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgVUFSVCBmb3Igb3BlcmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgZGF0YQorLy8hIGZvcm1hdC4KKy8vIQorLy8hIFxub3RlIFRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgcHJvY2Vzc29yCisvLyEgY2xvY2suIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgc2V0IGJ5IHRoZSBzeXN0ZW0gY29udHJvbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJVQVJUQ2xrIGlzIHRoZSByYXRlIG9mIHRoZSBjbG9jayBzdXBwbGllZCB0byB0aGUgVUFSVCBtb2R1bGUuCisvLyEgXHBhcmFtIHVpMzJCYXVkIGlzIHRoZSBkZXNpcmVkIGJhdWQgcmF0ZS4KKy8vISAtIE1pbmltdW0gYmF1ZCByYXRlOiB1aTMyQmF1ZCA+PSBjZWlsKHVpMzJVQVJUQ2xrIC8gMSwwNDgsNTU5Ljg3NSkKKy8vISAtIE1heGltdW0gYmF1ZCByYXRlOiB1aTMyQmF1ZCA8PSBmbG9vcih1aTMyVUFSVENsayAvIDE1Ljg3NSkKKy8vISBccGFyYW0gdWkzMkNvbmZpZyBpcyB0aGUgZGF0YSBmb3JtYXQgZm9yIHRoZSBwb3J0LgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgdGhyZWUgdmFsdWVzOgorLy8hIC0gTnVtYmVyIG9mIGRhdGEgYml0cworLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1dMRU5fOCA6IDggZGF0YSBiaXRzIHBlciBieXRlLgorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1dMRU5fNyA6IDcgZGF0YSBiaXRzIHBlciBieXRlLgorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1dMRU5fNiA6IDYgZGF0YSBiaXRzIHBlciBieXRlLgorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1dMRU5fNSA6IDUgZGF0YSBiaXRzIHBlciBieXRlLgorLy8hIC0gTnVtYmVyIG9mIHN0b3AgYml0cworLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1NUT1BfT05FIDogT25lIHN0b3AgYml0LgorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1NUT1BfVFdPIDogVHdvIHN0b3AgYml0cy4KKy8vISAtIFBhcml0eQorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9OT05FCisvLyEgICAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX0VWRU4KKy8vISAgIC0gXHJlZiBVQVJUX0NPTkZJR19QQVJfT0RECisvLyEgICAtIFxyZWYgVUFSVF9DT05GSUdfUEFSX09ORQorLy8hICAgLSBccmVmIFVBUlRfQ09ORklHX1BBUl9aRVJPCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBVQVJUQ29uZmlnU2V0RXhwQ2xrKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyVUFSVENsaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkJhdWQsIHVpbnQzMl90IHVpMzJDb25maWcpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgYSBVQVJULgorLy8hCisvLyEgVGhlIGJhdWQgcmF0ZSBhbmQgZGF0YSBmb3JtYXQgZm9yIHRoZSBVQVJUIGlzIGRldGVybWluZWQsIGdpdmVuIGFuCisvLyEgZXhwbGljaXRseSBwcm92aWRlZCBwZXJpcGhlcmFsIGNsb2NrIChoZW5jZSB0aGUgRXhwQ2xrIHN1ZmZpeCkuIFRoZQorLy8hIHJldHVybmVkIGJhdWQgcmF0ZSBpcyB0aGUgYWN0dWFsIGJhdWQgcmF0ZTsgaXQgbWF5IG5vdCBiZSB0aGUgZXhhY3QgYmF1ZAorLy8hIHJhdGUgcmVxdWVzdGVkIG9yIGFuICJvZmZpY2lhbCIgYmF1ZCByYXRlLiBUaGUgZGF0YSBmb3JtYXQgcmV0dXJuZWQgaW4KKy8vISBcYyBwdWkzMkNvbmZpZyBpcyBlbnVtZXJhdGVkIHRoZSBzYW1lIGFzIHRoZSBcYyB1aTMyQ29uZmlnIHBhcmFtZXRlciBvZgorLy8hIFxyZWYgVUFSVENvbmZpZ1NldEV4cENsaygpLgorLy8hCisvLyEgXG5vdGUgVGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBwcm9jZXNzb3IKKy8vISBjbG9jay4gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgcGVyaXBoZXJhbCBjbG9jayBpcyBzZXQgYnkgdGhlIHN5c3RlbSBjb250cm9sLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMlVBUlRDbGsgaXMgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIHN1cHBsaWVkIHRvIHRoZSBVQVJUIG1vZHVsZS4KKy8vISBccGFyYW0gcHVpMzJCYXVkIGlzIGEgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgYmF1ZCByYXRlLgorLy8hIFxwYXJhbSBwdWkzMkNvbmZpZyBpcyBhIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGRhdGEgZm9ybWF0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVUFSVENvbmZpZ0dldEV4cENsayh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMlVBUlRDbGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwdWkzMkJhdWQsIHVpbnQzMl90ICpwdWkzMkNvbmZpZyk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFVBUlRFTiwgVFhFLCBhbmQgUlhFIGJpdHMsIGFuZCBlbmFibGVzIHRoZSB0cmFuc21pdAorLy8hIGFuZCByZWNlaXZlIEZJRk9zLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitVQVJURW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgRklGTy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpIHw9IFVBUlRfTENSSF9GRU47CisKKyAgICAvLworICAgIC8vIEVuYWJsZSBSWCwgVFgsIGFuZCB0aGUgVUFSVC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0NUTCkgfD0gKFVBUlRfQ1RMX1VBUlRFTiB8IFVBUlRfQ1RMX1RYRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVF9DVExfUlhFKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgVUFSVEVOLCBUWEUsIGFuZCBSWEUgYml0cywgd2FpdHMgZm9yIHRoZSBlbmQgb2YKKy8vISB0cmFuc21pc3Npb24gb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLCBhbmQgZmx1c2hlcyB0aGUgdHJhbnNtaXQgRklGTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBVQVJURGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk9zLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbnMgZW5hYmxlcyB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgRklGT3MgaW4gdGhlIFVBUlQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRGSUZPRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgRklGTy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpIHw9IFVBUlRfTENSSF9GRU47Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb25zIGRpc2FibGVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPcyBpbiB0aGUgVUFSVC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVEZJRk9EaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIEZJRk8uCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19MQ1JIKSAmPSB+KFVBUlRfTENSSF9GRU4pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEZXRlcm1pbmVzIGlmIHRoZXJlIGFyZSBhbnkgY2hhcmFjdGVycyBpbiB0aGUgcmVjZWl2ZSBGSUZPLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGRhdGEKKy8vISBhdmFpbGFibGUgaW4gdGhlIHJlY2VpdmUgRklGTy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSByZWNlaXZlIEZJRk8uCisvLyEgLSBcYyB0cnVlICA6IFRoZXJlIGlzIGRhdGEgaW4gdGhlIHJlY2VpdmUgRklGTy4KKy8vISAtIFxjIGZhbHNlIDogVGhlcmUgaXMgbm8gZGF0YSBpbiB0aGUgcmVjZWl2ZSBGSUZPLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCitVQVJUQ2hhcnNBdmFpbCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGF2YWlsYWJpbGl0eSBvZiBjaGFyYWN0ZXJzLgorICAgIC8vCisgICAgcmV0dXJuKChIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1JYRkUpID8gZmFsc2UgOiB0cnVlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhbnkgc3BhY2UgaW4gdGhlIHRyYW5zbWl0IEZJRk8uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlcmUgaXMgc3BhY2UKKy8vISBhdmFpbGFibGUgaW4gdGhlIHRyYW5zbWl0IEZJRk8uCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXQgRklGTy4KKy8vISAtIFxjIHRydWUgIDogVGhlcmUgaXMgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSB0cmFuc21pdCBGSUZPLgorLy8hIC0gXGMgZmFsc2UgOiBUaGVyZSBpcyBubyBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIHRyYW5zbWl0IEZJRk8uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK1VBUlRTcGFjZUF2YWlsKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgYXZhaWxhYmlsaXR5IG9mIHNwYWNlLgorICAgIC8vCisgICAgcmV0dXJuKChIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19GUikgJiBVQVJUX0ZSX1RYRkYpID8gZmFsc2UgOiB0cnVlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVjZWl2ZXMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgcmVjZWl2ZSBGSUZPIGZvciB0aGUgc3BlY2lmaWVkCisvLyEgcG9ydC4KKy8vIQorLy8hIFxub3RlIFRoZSBccmVmIFVBUlRDaGFyc0F2YWlsKCkgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKKy8vISBhdHRlbXB0aW5nIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGNoYXJhY3RlciByZWFkIGZyb20gdGhlIHNwZWNpZmllZCBwb3J0LCBjYXN0IGFzIGFuCisvLyEgXGMgaW50MzJfdC4gQSBcYyAtMSBpcyByZXR1cm5lZCBpZiB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZQorLy8hIHJlY2VpdmUgRklGTy4KKy8vIQorLy8hIFxzYSBccmVmIFVBUlRDaGFyc0F2YWlsKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gaW50MzJfdCBVQVJUQ2hhckdldE5vbkJsb2NraW5nKHVpbnQzMl90IHVpMzJCYXNlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgV2FpdHMgZm9yIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNwZWNpZmllZCBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBnZXRzIGEgY2hhcmFjdGVyIGZyb20gdGhlIHJlY2VpdmUgRklGTyBmb3IgdGhlIHNwZWNpZmllZAorLy8hIHBvcnQuIElmIHRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzIGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiB3YWl0cyB1bnRpbCBhCisvLyEgY2hhcmFjdGVyIGlzIHJlY2VpdmVkIGJlZm9yZSByZXR1cm5pbmcuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgcmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydCwgY2FzdCBhcyBhbgorLy8hIFxjIGludDMyX3QuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGludDMyX3QgVUFSVENoYXJHZXQodWludDMyX3QgdWkzMkJhc2UpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBTZW5kcyBhIGNoYXJhY3RlciB0byB0aGUgc3BlY2lmaWVkIHBvcnQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgY2hhcmFjdGVyIFxjIHVpOERhdGEgdG8gdGhlIHRyYW5zbWl0IEZJRk8gZm9yIHRoZQorLy8hIHNwZWNpZmllZCBwb3J0LiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJsb2NrLCBzbyBpZiB0aGVyZSBpcyBubyBzcGFjZQorLy8hIGF2YWlsYWJsZSwgdGhlbiBhIFxjIGZhbHNlIGlzIHJldHVybmVkLCBhbmQgdGhlIGFwcGxpY2F0aW9uIG11c3QgcmV0cnkgdGhlCisvLyEgZnVuY3Rpb24gbGF0ZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aThEYXRhIGlzIHRoZSBjaGFyYWN0ZXIgdG8gYmUgdHJhbnNtaXR0ZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdHVzIG9mIHRoZSBjaGFyYWN0ZXIgdHJhbnNtaXQuCisvLyEgLSBcYyB0cnVlICA6IFRoZSBjaGFyYWN0ZXIgd2FzIHN1Y2Nlc3NmdWxseSBwbGFjZWQgaW4gdGhlIHRyYW5zbWl0IEZJRk8uCisvLyEgLSBcYyBmYWxzZSA6IFRoZXJlIHdhcyBubyBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIHRyYW5zbWl0IEZJRk8uIFRyeSBhZ2FpbiBsYXRlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gYm9vbCBVQVJUQ2hhclB1dE5vbkJsb2NraW5nKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBXYWl0cyB0byBzZW5kIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNwZWNpZmllZCBwb3J0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgY2hhcmFjdGVyIFxjIHVpOERhdGEgdG8gdGhlIHRyYW5zbWl0IEZJRk8gZm9yIHRoZQorLy8hIHNwZWNpZmllZCBwb3J0LiBJZiB0aGVyZSBpcyBubyBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIHRyYW5zbWl0IEZJRk8sIHRoaXMKKy8vISBmdW5jdGlvbiB3YWl0cyB1bnRpbCB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgYmVmb3JlIHJldHVybmluZy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHVpOERhdGEgaXMgdGhlIGNoYXJhY3RlciB0byBiZSB0cmFuc21pdHRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFVBUlRDaGFyUHV0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50OF90IHVpOERhdGEpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFVBUlQgdHJhbnNtaXR0ZXIgaXMgYnVzeSBvciBub3QuCisvLyEKKy8vISBBbGxvd3MgdGhlIGNhbGxlciB0byBkZXRlcm1pbmUgd2hldGhlciBhbGwgdHJhbnNtaXR0ZWQgYnl0ZXMgaGF2ZSBjbGVhcmVkCisvLyEgdGhlIHRyYW5zbWl0dGVyIGhhcmR3YXJlLiBJZiBcYyBmYWxzZSBpcyByZXR1cm5lZCwgdGhlIHRyYW5zbWl0IEZJRk8gaXMKKy8vISBlbXB0eSBhbmQgYWxsIGJpdHMgb2YgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgY2hhcmFjdGVyLCBpbmNsdWRpbmcgYWxsIHN0b3AKKy8vISBiaXRzLCBoYXZlIGxlZnQgdGhlIGhhcmR3YXJlIHNoaWZ0IHJlZ2lzdGVyLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgVUFSVCB0cmFuc21pdHRlci4KKy8vISAtIFxjIHRydWUgIDogVUFSVCBpcyB0cmFuc21pdHRpbmcuCisvLyEgLSBcYyBmYWxzZSA6IEFsbCB0cmFuc21pc3Npb25zIGFyZSBjb21wbGV0ZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgYm9vbAorVUFSVEJ1c3kodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnQuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIFVBUlQgaXMgYnVzeS4KKyAgICAvLworICAgIHJldHVybigoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRlIpICYgVUFSVF9GUl9CVVNZKSA/CisgICAgICAgICAgIFVBUlRfQlVTWSA6IFVBUlRfSURMRSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENhdXNlcyBhIEJSRUFLIHRvIGJlIHNlbnQuCisvLyEKKy8vISBcbm90ZSBGb3IgcHJvcGVyIHRyYW5zbWlzc2lvbiBvZiBhIGJyZWFrCisvLyEgY29tbWFuZCwgdGhlIGJyZWFrIG11c3QgYmUgYXNzZXJ0ZWQgZm9yIGF0IGxlYXN0IHR3byBjb21wbGV0ZSBmcmFtZXMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSBiQnJlYWtTdGF0ZSBjb250cm9scyB0aGUgb3V0cHV0IGxldmVsLgorLy8hIC0gXGMgdHJ1ZSAgOiBBc3NlcnRzIGEgYnJlYWsgY29uZGl0aW9uIG9uIHRoZSBVQVJULgorLy8hIC0gXGMgZmFsc2UgOiBSZW1vdmVzIHRoZSBicmVhayBjb25kaXRpb24uCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVEJyZWFrQ3RsKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJCcmVha1N0YXRlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChVQVJUQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgYnJlYWsgY29uZGl0aW9uIGFzIHJlcXVlc3RlZC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0xDUkgpID0KKyAgICAgICAgIChiQnJlYWtTdGF0ZSA/CisgICAgICAgICAoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgfCBVQVJUX0xDUkhfQlJLKSA6CisgICAgICAgICAoSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fTENSSCkgJiB+KFVBUlRfTENSSF9CUkspKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFJlZ2lzdGVycyBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYSBVQVJUIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoaXMKKy8vISBmdW5jdGlvbiBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgc3BlY2lmaWMKKy8vISBVQVJUIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHZpYSBccmVmIFVBUlRJbnRFbmFibGUoKS4gSXQgaXMgdGhlIGludGVycnVwdAorLy8hIGhhbmRsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHBmbkhhbmRsZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUKKy8vISBVQVJUIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBVQVJUSW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFVucmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciBhIFVBUlQgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgdW5yZWdpc3RlcmluZyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIEl0CisvLyEgY2xlYXJzIHRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgVUFSVCBpbnRlcnJ1cHQgb2NjdXJzLiAgVGhpcworLy8hIGZ1bmN0aW9uIGFsc28gbWFza3Mgb2ZmIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHNvIHRoYXQKKy8vISB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbm8gbG9uZ2VyIGlzIGNhbGxlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBVQVJUSW50VW5yZWdpc3Rlcih1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgaW5kaXZpZHVhbCBVQVJUIGludGVycnVwdCBzb3VyY2VzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBpbmRpY2F0ZWQgVUFSVCBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisvLyEgLSBccmVmIFVBUlRfSU5UX09FICA6IE92ZXJydW4gRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9CRSAgOiBCcmVhayBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1BFICA6IFBhcml0eSBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0ZFICA6IEZyYW1pbmcgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9SVCAgOiBSZWNlaXZlIFRpbWVvdXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9UWCAgOiBUcmFuc21pdCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1JYICA6IFJlY2VpdmUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9DVFMgOiBDVFMgaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRJbnRFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fSU1TQykgfD0gdWkzMkludEZsYWdzOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBpbmRpdmlkdWFsIFVBUlQgaW50ZXJydXB0IHNvdXJjZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbmRpY2F0ZWQgVUFSVCBpbnRlcnJ1cHQgc291cmNlcy4gT25seSB0aGUKKy8vISBzb3VyY2VzIHRoYXQgYXJlIGVuYWJsZWQgY2FuIGJlIHJlZmxlY3RlZCB0byB0aGUgcHJvY2Vzc29yIGludGVycnVwdDsKKy8vISBkaXNhYmxlZCBzb3VyY2VzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBwcm9jZXNzb3IuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50RmxhZ3MgaXMgdGhlIGJpdCBtYXNrIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBkaXNhYmxlZC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfT0UgIDogT3ZlcnJ1biBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0JFICA6IEJyZWFrIEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfUEUgIDogUGFyaXR5IEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfRkUgIDogRnJhbWluZyBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1JUICA6IFJlY2VpdmUgVGltZW91dCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1RYICA6IFRyYW5zbWl0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfUlggIDogUmVjZWl2ZSBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0NUUyA6IENUUyBpbnRlcnJ1cHQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVEludERpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0lNU0MpICY9IH4odWkzMkludEZsYWdzKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgc3BlY2lmaWVkIFVBUlQuIEVpdGhlcgorLy8hIHRoZSByYXcgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgc3RhdHVzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgYWxsb3dlZCB0bworLy8hIHJlZmxlY3QgdG8gdGhlIHByb2Nlc3NvciBjYW4gYmUgcmV0dXJuZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSBiTWFza2VkIHNlbGVjdHMgZWl0aGVyIHJhdyBvciBtYXNrZWQgaW50ZXJydXB0LgorLy8hIC0gXGMgdHJ1ZSAgOiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyBpcyByZXF1aXJlZC4KKy8vISAtIFxjIGZhbHNlIDogUmF3IGludGVycnVwdCBzdGF0dXMgaXMgcmVxdWlyZWQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cywgZW51bWVyYXRlZCBhcyBhIGJpdCBmaWVsZCBvZjoKKy8vISAtIFxyZWYgVUFSVF9JTlRfT0UgIDogT3ZlcnJ1biBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0JFICA6IEJyZWFrIEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfUEUgIDogUGFyaXR5IEVycm9yIGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfRkUgIDogRnJhbWluZyBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1JUICA6IFJlY2VpdmUgVGltZW91dCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1RYICA6IFRyYW5zbWl0IGludGVycnVwdC4KKy8vISAtIFxyZWYgVUFSVF9JTlRfUlggIDogUmVjZWl2ZSBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0NUUyA6IENUUyBpbnRlcnJ1cHQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitVQVJUSW50U3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlLCBib29sIGJNYXNrZWQpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIGVpdGhlciB0aGUgaW50ZXJydXB0IHN0YXR1cyBvciB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgYXMKKyAgICAvLyByZXF1ZXN0ZWQuCisgICAgLy8KKyAgICBpZihiTWFza2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX01JUykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fUklTKSk7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgVUFSVCBpbnRlcnJ1cHQgc291cmNlcy4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgVUFSVCBpbnRlcnJ1cHQgc291cmNlcyBhcmUgY2xlYXJlZCwgc28gdGhhdCB0aGV5IG5vIGxvbmdlcgorLy8hIGFzc2VydC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8ga2VlcCB0aGUKKy8vISBpbnRlcnJ1cHQgZnJvbSBiZWluZyByZWNvZ25pemVkIGFnYWluIGltbWVkaWF0ZWx5IHVwb24gZXhpdC4KKy8vIQorLy8hIFxub3RlIER1ZSB0byB3cml0ZSBidWZmZXJzIGFuZCBzeW5jaHJvbml6ZXJzIGluIHRoZSBzeXN0ZW0gaXQgbWF5IHRha2Ugc2V2ZXJhbAorLy8hIGNsb2NrIGN5Y2xlcyBmcm9tIGEgcmVnaXN0ZXIgd3JpdGUgY2xlYXJpbmcgYW4gZXZlbnQgaW4gYSBtb2R1bGUgYW5kIHVudGlsIHRoZQorLy8hIGV2ZW50IGlzIGFjdHVhbGx5IGNsZWFyZWQgaW4gdGhlIE5WSUMgb2YgdGhlIHN5c3RlbSBDUFUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCisvLyEgY2xlYXIgdGhlIGV2ZW50IHNvdXJjZSBlYXJseSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoSVNSKSB0byBhbGxvdworLy8hIHRoZSBldmVudCBjbGVhciB0byBwcm9wYWdhdGUgdG8gdGhlIE5WSUMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IuCisvLyEgQXQgdGhlIHNhbWUgdGltZSwgYW4gZWFybHkgZXZlbnQgY2xlYXIgYWxsb3dzIG5ldyBldmVudHMgb2YgdGhlIHNhbWUgdHlwZSB0byBiZQorLy8hIHBlbmRlZCBpbnN0ZWFkIG9mIGlnbm9yZWQgaWYgdGhlIGV2ZW50IGlzIGNsZWFyZWQgbGF0ZXIgaW4gdGhlIElTUi4KKy8vISBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHByb2dyYW1tZXIgdG8gbWFrZSBzdXJlIHRoYXQgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZAorLy8hIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIHRvIGF2b2lkIGZhbHNlIHJlLXRyaWdnZXJpbmcgb2YgdGhlIGNsZWFyZWQgZXZlbnQuCisvLyEgQSBzaW1wbGUsIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBvcHRpbWFsLCB3YXkgb2YgY2xlYXJpbmcgYW4gZXZlbnQgYmVmb3JlCisvLyEgcmV0dXJuaW5nIGZyb20gdGhlIElTUiBpczoKKy8vISAtIyBXcml0ZSB0byBjbGVhciBldmVudCAoaW50ZXJydXB0IHNvdXJjZSkuIChidWZmZXJlZCB3cml0ZSkKKy8vISAtIyBEdW1teSByZWFkIGZyb20gdGhlIGV2ZW50IHNvdXJjZSBtb2R1bGUuIChtYWtpbmcgc3VyZSB0aGUgd3JpdGUgaGFzIHByb3BhZ2F0ZWQpCisvLyEgLSMgV2FpdCB0d28gc3lzdGVtIENQVSBjbG9jayBjeWNsZXMgKHVzZXIgY29kZSBvciB0d28gTk9QcykuIChhbGxvd2luZyBjbGVhcmVkIGV2ZW50IHRvIHByb3BhZ2F0ZSB0aHJvdWdoIGFueSBzeW5jaHJvbml6ZXJzKQorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFVBUlQgcG9ydC4KKy8vISBccGFyYW0gdWkzMkludEZsYWdzIGlzIGEgYml0IG1hc2sgb2YgdGhlIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGNsZWFyZWQuCisvLyEgLSBccmVmIFVBUlRfSU5UX09FICA6IE92ZXJydW4gRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9CRSAgOiBCcmVhayBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1BFICA6IFBhcml0eSBFcnJvciBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX0ZFICA6IEZyYW1pbmcgRXJyb3IgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9SVCAgOiBSZWNlaXZlIFRpbWVvdXQgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9UWCAgOiBUcmFuc21pdCBpbnRlcnJ1cHQuCisvLyEgLSBccmVmIFVBUlRfSU5UX1JYICA6IFJlY2VpdmUgaW50ZXJydXB0LgorLy8hIC0gXHJlZiBVQVJUX0lOVF9DVFMgOiBDVFMgaW50ZXJydXB0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRJbnRDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkludEZsYWdzKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cworICAgIC8vCisgICAgQVNTRVJUKFVBUlRCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBpbnRlcnJ1cHQgc291cmNlcworICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fSUNSKSA9IHVpMzJJbnRGbGFnczsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIFVBUlQgRE1BIG9wZXJhdGlvbi4KKy8vIQorLy8hIFRoZSBzcGVjaWZpZWQgVUFSVCBETUEgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFRoZSBVQVJUIGNhbiBiZQorLy8hIGNvbmZpZ3VyZWQgdG8gdXNlIERNQSBmb3IgdHJhbnNtaXQgb3IgcmVjZWl2ZSwgYW5kIHRvIGRpc2FibGUKKy8vISByZWNlaXZlIGlmIGFuIGVycm9yIG9jY3Vycy4KKy8vIQorLy8hIFxub3RlIFRoZSB1RE1BIGNvbnRyb2xsZXIgbXVzdCBhbHNvIGJlIHNldCB1cCBiZWZvcmUgRE1BIGNhbiBiZSB1c2VkCisvLyEgd2l0aCB0aGUgVUFSVC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJETUFGbGFncyBpcyBhIGJpdCBtYXNrIG9mIHRoZSBETUEgZmVhdHVyZXMgdG8gZW5hYmxlLgorLy8hIFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGJpdHdpc2UgT1Igb2YgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gVUFSVF9ETUFfUlggICAgICAgICA6IEVuYWJsZSBETUEgZm9yIHJlY2VpdmUuCisvLyEgLSBVQVJUX0RNQV9UWCAgICAgICAgIDogRW5hYmxlIERNQSBmb3IgdHJhbnNtaXQuCisvLyEgLSBVQVJUX0RNQV9FUlJfUlhTVE9QIDogRGlzYWJsZSBETUEgcmVjZWl2ZSBvbiBVQVJUIGVycm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRETUFFbmFibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJETUFGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIHJlcXVlc3RlZCBiaXRzIGluIHRoZSBVQVJUIERNQSBjb250cm9sIHJlZ2lzdGVyLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVQVJUX09fRE1BQ1RMKSB8PSB1aTMyRE1BRmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGUgVUFSVCBETUEgb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgVUFSVCBETUEgZmVhdHVyZXMgdGhhdCB3ZXJlIGVuYWJsZWQKKy8vISBieSBccmVmIFVBUlRETUFFbmFibGUoKS4gVGhlIHNwZWNpZmllZCBVQVJUIERNQSBmZWF0dXJlcyBhcmUgZGlzYWJsZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hIFxwYXJhbSB1aTMyRE1BRmxhZ3MgaXMgYSBiaXQgbWFzayBvZiB0aGUgRE1BIGZlYXR1cmVzIHRvIGRpc2FibGUuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisvLyEgLSBVQVJUX0RNQV9SWCAgICAgICAgIDogRW5hYmxlIERNQSBmb3IgcmVjZWl2ZS4KKy8vISAtIFVBUlRfRE1BX1RYICAgICAgICAgOiBFbmFibGUgRE1BIGZvciB0cmFuc21pdC4KKy8vISAtIFVBUlRfRE1BX0VSUl9SWFNUT1AgOiBEaXNhYmxlIERNQSByZWNlaXZlIG9uIFVBUlQgZXJyb3IuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVERNQURpc2FibGUodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJETUFGbGFncykKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgcmVxdWVzdGVkIGJpdHMgaW4gdGhlIFVBUlQgRE1BIGNvbnRyb2wgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVBUlRfT19ETUFDVEwpICY9IH51aTMyRE1BRmxhZ3M7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgY3VycmVudCByZWNlaXZlciBlcnJvcnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgZWFjaCBvZiB0aGUgNCByZWNlaXZlciBlcnJvcgorLy8hIHNvdXJjZXMuIFRoZSByZXR1cm5lZCBlcnJvcnMgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIGZvdXIgZXJyb3IgYml0cworLy8hIHJldHVybmVkIHZpYSB0aGUgcHJldmlvdXMgY2FsbCB0byBccmVmIFVBUlRDaGFyR2V0KCkgb3IgXHJlZiBVQVJUQ2hhckdldE5vbkJsb2NraW5nKCkKKy8vISB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgb3ZlcnJ1biBlcnJvciBpcyBzZXQgaW1tZWRpYXRlbHkgdGhlIG92ZXJydW4KKy8vISBvY2N1cnMgcmF0aGVyIHRoYW4gd2hlbiBhIGNoYXJhY3RlciBpcyBuZXh0IHJlYWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIGEgYml0d2lzZSBPUiBjb21iaW5hdGlvbiBvZiB0aGUgcmVjZWl2ZXIgZXJyb3IgZmxhZ3M6CisvLyEgLSBccmVmIFVBUlRfUlhFUlJPUl9GUkFNSU5HCisvLyEgLSBccmVmIFVBUlRfUlhFUlJPUl9QQVJJVFkKKy8vISAtIFxyZWYgVUFSVF9SWEVSUk9SX0JSRUFLCisvLyEgLSBccmVmIFVBUlRfUlhFUlJPUl9PVkVSUlVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitVQVJUUnhFcnJvckdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX1JTUikgJiAweDAwMDAwMDBGKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIGFsbCByZXBvcnRlZCByZWNlaXZlciBlcnJvcnMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYWxsIHJlY2VpdmVyIGVycm9yIGNvbmRpdGlvbnMgcmVwb3J0ZWQgdmlhCisvLyEgXHJlZiBVQVJUUnhFcnJvckdldCgpLiBJZiB1c2luZyB0aGUgb3ZlcnJ1biwgZnJhbWluZyBlcnJvciwgcGFyaXR5IGVycm9yIG9yCisvLyEgYnJlYWsgaW50ZXJydXB0cywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBjbGVhcmluZyB0aGUgaW50ZXJydXB0CisvLyEgdG8gZW5zdXJlIHRoYXQgbGF0ZXIgZXJyb3JzIG9mIHRoZSBzYW1lIHR5cGUgdHJpZ2dlciBhbm90aGVyIGludGVycnVwdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVFJ4RXJyb3JDbGVhcih1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVUFSVEJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBBbnkgd3JpdGUgdG8gdGhlIEVycm9yIENsZWFyIFJlZ2lzdGVyIHdpbGwgY2xlYXIgYWxsIGJpdHMgd2hpY2ggYXJlCisgICAgLy8gY3VycmVudGx5IHNldC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVUFSVF9PX0VDUikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGhhcmR3YXJlIGZsb3cgY29udHJvbCBmb3IgYm90aCBDVFMgYW5kIFJUUworLy8hCisvLyEgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVCBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1VBUlRId0Zsb3dDb250cm9sRW5hYmxlKCB1aW50MzJfdCB1aTMyQmFzZSApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBVQVJUQmFzZVZhbGlkKCB1aTMyQmFzZSApKTsKKworICAgIEhXUkVHKCB1aTMyQmFzZSArIFVBUlRfT19DVEwgKSB8PSAoIFVBUlRfQ1RMX0NUU0VOIHwgVUFSVF9DVExfUlRTRU4gKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgaGFyZHdhcmUgZmxvdyBjb250cm9sIGZvciBib3RoIENUUyBhbmQgUlRTCisvLyEKKy8vISBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorVUFSVEh3Rmxvd0NvbnRyb2xEaXNhYmxlKCB1aW50MzJfdCB1aTMyQmFzZSApCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKCBVQVJUQmFzZVZhbGlkKCB1aTMyQmFzZSApKTsKKworICAgIEhXUkVHKCB1aTMyQmFzZSArIFVBUlRfT19DVEwgKSAmPSB+KCBVQVJUX0NUTF9DVFNFTiB8IFVBUlRfQ1RMX1JUU0VOICk7Cit9CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fVUFSVEZJRk9MZXZlbEdldAorICAgICAgICAjdW5kZWYgIFVBUlRGSUZPTGV2ZWxHZXQKKyAgICAgICAgI2RlZmluZSBVQVJURklGT0xldmVsR2V0ICAgICAgICAgICAgICAgIFJPTV9VQVJURklGT0xldmVsR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9VQVJUQ29uZmlnU2V0RXhwQ2xrCisgICAgICAgICN1bmRlZiAgVUFSVENvbmZpZ1NldEV4cENsaworICAgICAgICAjZGVmaW5lIFVBUlRDb25maWdTZXRFeHBDbGsgICAgICAgICAgICAgUk9NX1VBUlRDb25maWdTZXRFeHBDbGsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1VBUlRDb25maWdHZXRFeHBDbGsKKyAgICAgICAgI3VuZGVmICBVQVJUQ29uZmlnR2V0RXhwQ2xrCisgICAgICAgICNkZWZpbmUgVUFSVENvbmZpZ0dldEV4cENsayAgICAgICAgICAgICBST01fVUFSVENvbmZpZ0dldEV4cENsaworICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVUFSVERpc2FibGUKKyAgICAgICAgI3VuZGVmICBVQVJURGlzYWJsZQorICAgICAgICAjZGVmaW5lIFVBUlREaXNhYmxlICAgICAgICAgICAgICAgICAgICAgUk9NX1VBUlREaXNhYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9VQVJUQ2hhckdldE5vbkJsb2NraW5nCisgICAgICAgICN1bmRlZiAgVUFSVENoYXJHZXROb25CbG9ja2luZworICAgICAgICAjZGVmaW5lIFVBUlRDaGFyR2V0Tm9uQmxvY2tpbmcgICAgICAgICAgUk9NX1VBUlRDaGFyR2V0Tm9uQmxvY2tpbmcKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1VBUlRDaGFyR2V0CisgICAgICAgICN1bmRlZiAgVUFSVENoYXJHZXQKKyAgICAgICAgI2RlZmluZSBVQVJUQ2hhckdldCAgICAgICAgICAgICAgICAgICAgIFJPTV9VQVJUQ2hhckdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVUFSVENoYXJQdXROb25CbG9ja2luZworICAgICAgICAjdW5kZWYgIFVBUlRDaGFyUHV0Tm9uQmxvY2tpbmcKKyAgICAgICAgI2RlZmluZSBVQVJUQ2hhclB1dE5vbkJsb2NraW5nICAgICAgICAgIFJPTV9VQVJUQ2hhclB1dE5vbkJsb2NraW5nCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9VQVJUQ2hhclB1dAorICAgICAgICAjdW5kZWYgIFVBUlRDaGFyUHV0CisgICAgICAgICNkZWZpbmUgVUFSVENoYXJQdXQgICAgICAgICAgICAgICAgICAgICBST01fVUFSVENoYXJQdXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1VBUlRJbnRSZWdpc3RlcgorICAgICAgICAjdW5kZWYgIFVBUlRJbnRSZWdpc3RlcgorICAgICAgICAjZGVmaW5lIFVBUlRJbnRSZWdpc3RlciAgICAgICAgICAgICAgICAgUk9NX1VBUlRJbnRSZWdpc3RlcgorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVUFSVEludFVucmVnaXN0ZXIKKyAgICAgICAgI3VuZGVmICBVQVJUSW50VW5yZWdpc3RlcgorICAgICAgICAjZGVmaW5lIFVBUlRJbnRVbnJlZ2lzdGVyICAgICAgICAgICAgICAgUk9NX1VBUlRJbnRVbnJlZ2lzdGVyCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX19VQVJUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIENsb3NlIHRoZSBEb3h5Z2VuIGdyb3VwLgorLy8hIEB9CisvLyEgQH0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91ZG1hLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91ZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAyZTg2NwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VkbWEuYwpAQCAtMCwwICsxLDU1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHVkbWEuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDQtMDcgMTQ6MTY6MjggKzAyMDAgKFR1ZSwgMDcgQXByIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDMxNjAKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSB1RE1BIGNvbnRyb2xsZXIKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvdWRtYS5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSGFuZGxlIHN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gd2lsbCB1bmRvIHByb3RvdHlwZSByZW5hbWluZyBtYWRlIGluIHRoZSBoZWFkZXIgZmlsZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICN1bmRlZiAgdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlICAgICAgTk9ST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUKKyAgICAjdW5kZWYgIHVETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZQorICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlICAgICBOT1JPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUKKyAgICAjdW5kZWYgIHVETUFDaGFubmVsQXR0cmlidXRlR2V0CisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldCAgICAgICAgIE5PUk9NX3VETUFDaGFubmVsQXR0cmlidXRlR2V0CisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbENvbnRyb2xTZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsQ29udHJvbFNldCAgICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxDb250cm9sU2V0CisgICAgI3VuZGVmICB1RE1BQ2hhbm5lbFRyYW5zZmVyU2V0CisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbFRyYW5zZmVyU2V0ICAgICAgICAgIE5PUk9NX3VETUFDaGFubmVsVHJhbnNmZXJTZXQKKyAgICAjdW5kZWYgIHVETUFDaGFubmVsU2NhdHRlckdhdGhlclNldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0ICAgICBOT1JPTV91RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQKKyAgICAjdW5kZWYgIHVETUFDaGFubmVsU2l6ZUdldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxTaXplR2V0ICAgICAgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbFNpemVHZXQKKyAgICAjdW5kZWYgIHVETUFDaGFubmVsTW9kZUdldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxNb2RlR2V0ICAgICAgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbE1vZGVHZXQKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEVuYWJsZXMgYXR0cmlidXRlcyBvZiBhIHVETUEgY2hhbm5lbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK3VETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJBdHRyKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworICAgIEFTU0VSVCgodWkzMkF0dHIgJiB+KFVETUFfQVRUUl9VU0VCVVJTVCB8IFVETUFfQVRUUl9BTFRTRUxFQ1QgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZIHwgVURNQV9BVFRSX1JFUU1BU0spKSA9PSAwKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB1c2VidXJzdCBiaXQgZm9yIHRoaXMgY2hhbm5lbCBpZiBzZXQgaW4gdWkzMkF0dHIuCisgICAgLy8KKyAgICBpZih1aTMyQXR0ciAmIFVETUFfQVRUUl9VU0VCVVJTVCkKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVEJVUlNUKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGFsdGVybmF0ZSBjb250cm9sIHNlbGVjdCBiaXQgZm9yIHRoaXMgY2hhbm5lbCwKKyAgICAvLyBpZiBzZXQgaW4gdWkzMkF0dHIuCisgICAgLy8KKyAgICBpZih1aTMyQXR0ciAmIFVETUFfQVRUUl9BTFRTRUxFQ1QpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSE5MUFJJQUxUKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGhpZ2ggcHJpb3JpdHkgYml0IGZvciB0aGlzIGNoYW5uZWwsIGlmIHNldCBpbiB1aTMyQXR0ci4KKyAgICAvLworICAgIGlmKHVpMzJBdHRyICYgVURNQV9BVFRSX0hJR0hfUFJJT1JJVFkpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSE5MUFJJT1JJVFkpID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgcmVxdWVzdCBtYXNrIGJpdCBmb3IgdGhpcyBjaGFubmVsLCBpZiBzZXQgaW4gdWkzMkF0dHIuCisgICAgLy8KKyAgICBpZih1aTMyQXR0ciAmIFVETUFfQVRUUl9SRVFNQVNLKQorICAgIHsKKyAgICAgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUUkVRTUFTSykgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBEaXNhYmxlcyBhdHRyaWJ1dGVzIG9mIGFuIHVETUEgY2hhbm5lbAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK3VETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkF0dHIpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisgICAgQVNTRVJUKCh1aTMyQXR0ciAmIH4oVURNQV9BVFRSX1VTRUJVUlNUIHwgVURNQV9BVFRSX0FMVFNFTEVDVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgVURNQV9BVFRSX0hJR0hfUFJJT1JJVFkgfCBVRE1BX0FUVFJfUkVRTUFTSykpID09IDApOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgdXNlYnVyc3QgYml0IGZvciB0aGlzIGNoYW5uZWwgaWYgc2V0IGluIHVpMzJBdHRyLgorICAgIC8vCisgICAgaWYodWkzMkF0dHIgJiBVRE1BX0FUVFJfVVNFQlVSU1QpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DTEVBUkJVUlNUKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgYWx0ZXJuYXRlIGNvbnRyb2wgc2VsZWN0IGJpdCBmb3IgdGhpcyBjaGFubmVsLCBpZiBzZXQgaW4KKyAgICAvLyB1bHVsQXR0ci4KKyAgICAvLworICAgIGlmKHVpMzJBdHRyICYgVURNQV9BVFRSX0FMVFNFTEVDVCkKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NMRUFSQ0hOTFBSSUFMVCkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIGhpZ2ggcHJpb3JpdHkgYml0IGZvciB0aGlzIGNoYW5uZWwsIGlmIHNldCBpbiB1aTMyQXR0ci4KKyAgICAvLworICAgIGlmKHVpMzJBdHRyICYgVURNQV9BVFRSX0hJR0hfUFJJT1JJVFkpCisgICAgeworICAgICAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DTEVBUkNITkxQUklPUklUWSkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3QgbWFzayBiaXQgZm9yIHRoaXMgY2hhbm5lbCwgaWYgc2V0IGluIHVpMzJBdHRyLgorICAgIC8vCisgICAgaWYodWkzMkF0dHIgJiBVRE1BX0FUVFJfUkVRTUFTSykKKyAgICB7CisgICAgICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NMRUFSUkVRTUFTSykgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBHZXRzIHRoZSBlbmFibGVkIGF0dHJpYnV0ZXMgb2YgYSB1RE1BIGNoYW5uZWwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAordURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtKQoreworICAgIHVpbnQzMl90IHVpMzJBdHRyID0gMDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdXNlYnVyc3QgYml0IGlzIHNldCBmb3IgdGhpcyBjaGFubmVsLgorICAgIC8vCisgICAgaWYoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUQlVSU1QpICYgKDEgPDwgdWkzMkNoYW5uZWxOdW0pKQorICAgIHsKKyAgICAgICAgdWkzMkF0dHIgfD0gVURNQV9BVFRSX1VTRUJVUlNUOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBhbHRlcm5hdGUgY29udHJvbCBiaXQgaXMgc2V0IGZvciB0aGlzIGNoYW5uZWwuCisgICAgLy8KKyAgICBpZihIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TRVRDSE5MUFJJQUxUKSAmICgxIDw8IHVpMzJDaGFubmVsTnVtKSkKKyAgICB7CisgICAgICAgIHVpMzJBdHRyIHw9IFVETUFfQVRUUl9BTFRTRUxFQ1Q7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGhpZ2ggcHJpb3JpdHkgYml0IGlzIHNldCBmb3IgdGhpcyBjaGFubmVsLgorICAgIC8vCisgICAgaWYoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUQ0hOTFBSSU9SSVRZKSAmICgxIDw8IHVpMzJDaGFubmVsTnVtKSkKKyAgICB7CisgICAgICAgIHVpMzJBdHRyIHw9IFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSByZXF1ZXN0IG1hc2sgYml0IGlzIHNldCBmb3IgdGhpcyBjaGFubmVsLgorICAgIC8vCisgICAgaWYoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fU0VUUkVRTUFTSykgJiAoMSA8PCB1aTMyQ2hhbm5lbE51bSkpCisgICAgeworICAgICAgICB1aTMyQXR0ciB8PSBVRE1BX0FUVFJfUkVRTUFTSzsKKyAgICB9CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgY29uZmlndXJhdGlvbiBmbGFncy4KKyAgICAvLworICAgIHJldHVybih1aTMyQXR0cik7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgU2V0cyB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIGZvciBhIHVETUEgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK3VETUFDaGFubmVsQ29udHJvbFNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ29udHJvbCkKK3sKKyAgICB0RE1BQ29udHJvbFRhYmxlICpwQ29udHJvbFRhYmxlOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCA8IChVRE1BX05VTV9DSEFOTkVMUyAqIDIpKTsKKyAgICBBU1NFUlQoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCkgIT0gMCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHRhYmxlLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZSA9ICh0RE1BQ29udHJvbFRhYmxlICopSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCk7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgY3VycmVudCBjb250cm9sIHdvcmQgdmFsdWUgYW5kIG1hc2sgb2ZmIHRoZSBmaWVsZHMgdG8gYmUKKyAgICAvLyBjaGFuZ2VkLCB0aGVuIE9SIGluIHRoZSBuZXcgc2V0dGluZ3MuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnVpMzJDb250cm9sID0KKyAgICAgICAgKChwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnVpMzJDb250cm9sICYKKyAgICAgICAgICB+KFVETUFfRFNUX0lOQ19NIHwKKyAgICAgICAgICAgIFVETUFfU1JDX0lOQ19NIHwKKyAgICAgICAgICAgIFVETUFfU0laRV9NIHwKKyAgICAgICAgICAgIFVETUFfQVJCX00gfAorICAgICAgICAgICAgVURNQV9ORVhUX1VTRUJVUlNUKSkgfAorICAgICAgICAgdWkzMkNvbnRyb2wpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFNldHMgdGhlIHRyYW5zZmVyIHBhcmFtZXRlcnMgZm9yIGEgdURNQSBjaGFubmVsIGNvbnRyb2wgc3RydWN0dXJlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAordURNQUNoYW5uZWxUcmFuc2ZlclNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk1vZGUsIHZvaWQgKnB2U3JjQWRkciwgdm9pZCAqcHZEc3RBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVHJhbnNmZXJTaXplKQoreworICAgIHRETUFDb250cm9sVGFibGUgKnBDb250cm9sVGFibGU7CisgICAgdWludDMyX3QgdWkzMkNvbnRyb2w7CisgICAgdWludDMyX3QgdWkzMkluYzsKKyAgICB1aW50MzJfdCB1aTMyQnVmZmVyQnl0ZXM7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbFN0cnVjdEluZGV4IDwgKFVETUFfTlVNX0NIQU5ORUxTICogMikpOworICAgIEFTU0VSVChIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKSAhPSAwKTsKKyAgICBBU1NFUlQodWkzMk1vZGUgPD0gVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUik7CisgICAgQVNTRVJUKCh1aW50MzJfdClwdlNyY0FkZHIgPj0gU1JBTV9CQVNFKTsKKyAgICBBU1NFUlQoKHVpbnQzMl90KXB2RHN0QWRkciA+PSBTUkFNX0JBU0UpOworICAgIEFTU0VSVCgodWkzMlRyYW5zZmVyU2l6ZSAhPSAwKSAmJiAodWkzMlRyYW5zZmVyU2l6ZSA8PSBVRE1BX1hGRVJfU0laRV9NQVgpKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgdGFibGUuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlID0gKHRETUFDb250cm9sVGFibGUgKilIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbnRyb2wgd29yZCB2YWx1ZSBhbmQgbWFzayBvZmYgdGhlIG1vZGUgYW5kIHNpemUKKyAgICAvLyBmaWVsZHMuCisgICAgLy8KKyAgICB1aTMyQ29udHJvbCA9IChwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnVpMzJDb250cm9sICYKKyAgICAgICAgICAgICAgICAgICB+KFVETUFfWEZFUl9TSVpFX00gfCBVRE1BX01PREVfTSkpOworCisgICAgLy8KKyAgICAvLyBBZGp1c3QgdGhlIG1vZGUgaWYgdGhlIGFsdCBjb250cm9sIHN0cnVjdHVyZSBpcyBzZWxlY3RlZC4KKyAgICAvLworICAgIGlmKHVpMzJDaGFubmVsU3RydWN0SW5kZXggJiBVRE1BX0FMVF9TRUxFQ1QpCisgICAgeworICAgICAgICBpZigodWkzMk1vZGUgPT0gVURNQV9NT0RFX01FTV9TQ0FUVEVSX0dBVEhFUikgfHwKKyAgICAgICAgICAgKHVpMzJNb2RlID09IFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIpKQorICAgICAgICB7CisgICAgICAgICAgICB1aTMyTW9kZSB8PSBVRE1BX01PREVfQUxUX1NFTEVDVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gU2V0IHRoZSB0cmFuc2ZlciBzaXplIGFuZCBtb2RlIGluIHRoZSBjb250cm9sIHdvcmQgKGJ1dCBkb24ndCB3cml0ZSB0aGUKKyAgICAvLyBjb250cm9sIHdvcmQgeWV0IGFzIGl0IGNvdWxkIGtpY2sgb2ZmIGEgdHJhbnNmZXIpLgorICAgIC8vCisgICAgdWkzMkNvbnRyb2wgfD0gdWkzMk1vZGUgfCAoKHVpMzJUcmFuc2ZlclNpemUgLSAxKSA8PCBVRE1BX1hGRVJfU0laRV9TKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBhZGRyZXNzIGluY3JlbWVudCB2YWx1ZSBmb3IgdGhlIHNvdXJjZSwgZnJvbSB0aGUgY29udHJvbCB3b3JkLgorICAgIC8vCisgICAgdWkzMkluYyA9ICh1aTMyQ29udHJvbCAmIFVETUFfU1JDX0lOQ19NKTsKKworICAgIC8vCisgICAgLy8gQ29tcHV0ZSB0aGUgZW5kaW5nIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSB0cmFuc2Zlci4gIElmIHRoZSBzb3VyY2UKKyAgICAvLyBpbmNyZW1lbnQgaXMgc2V0IHRvIG5vbmUsIHRoZW4gdGhlIGVuZGluZyBhZGRyZXNzIGlzIHRoZSBzYW1lIGFzIHRoZQorICAgIC8vIGJlZ2lubmluZy4KKyAgICAvLworICAgIGlmKHVpMzJJbmMgIT0gVURNQV9TUkNfSU5DX05PTkUpCisgICAgeworICAgICAgICB1aTMySW5jID0gdWkzMkluYyA+PiBVRE1BX1NSQ19JTkNfUzsKKyAgICAgICAgdWkzMkJ1ZmZlckJ5dGVzID0gdWkzMlRyYW5zZmVyU2l6ZSA8PCB1aTMySW5jOworICAgICAgICBwdlNyY0FkZHIgPSAodm9pZCAqKSgodWludDMyX3QpcHZTcmNBZGRyICsgdWkzMkJ1ZmZlckJ5dGVzIC0gKDEgPDwgdWkzMkluYykpOworICAgIH0KKworICAgIC8vCisgICAgLy8gTG9hZCB0aGUgc291cmNlIGVuZGluZyBhZGRyZXNzIGludG8gdGhlIGNvbnRyb2wgYmxvY2suCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXhdLnB2U3JjRW5kQWRkciA9IHB2U3JjQWRkcjsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBhZGRyZXNzIGluY3JlbWVudCB2YWx1ZSBmb3IgdGhlIGRlc3RpbmF0aW9uLCBmcm9tIHRoZSBjb250cm9sCisgICAgLy8gd29yZC4KKyAgICAvLworICAgIHVpMzJJbmMgPSB1aTMyQ29udHJvbCAmIFVETUFfRFNUX0lOQ19NOworCisgICAgLy8KKyAgICAvLyBDb21wdXRlIHRoZSBlbmRpbmcgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIuICBJZiB0aGUKKyAgICAvLyBkZXN0aW5hdGlvbiBpbmNyZW1lbnQgaXMgc2V0IHRvIG5vbmUsIHRoZW4gdGhlIGVuZGluZyBhZGRyZXNzIGlzIHRoZQorICAgIC8vIHNhbWUgYXMgdGhlIGJlZ2lubmluZy4KKyAgICAvLworICAgIGlmKHVpMzJJbmMgIT0gVURNQV9EU1RfSU5DX05PTkUpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBUaGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBpZiB0aGlzIGlzIHNldHRpbmcgdXAgYSBzY2F0dGVyLWdhdGhlcgorICAgICAgICAvLyB0cmFuc2Zlci4gIFRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIG5lZWRzIHRvIHBvaW50IHRvIHRoZSBlbmQgb2YKKyAgICAgICAgLy8gdGhlIGFsdGVybmF0ZSBzdHJ1Y3R1cmUgZm9yIHRoaXMgY2hhbm5lbCBpbnN0ZWFkIG9mIGNhbGN1bGF0aW5nCisgICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBpbiB0aGUgbm9ybWFsIHdheS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYoKHVpMzJNb2RlID09IFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIpIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBVRE1BX01PREVfUEVSX1NDQVRURVJfR0FUSEVSKSkKKyAgICAgICAgeworICAgICAgICAgICAgcHZEc3RBZGRyID0KKyAgICAgICAgICAgICAgICAodm9pZCAqKSZwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsU3RydWN0SW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURNQV9BTFRfU0VMRUNUXS51aTMyU3BhcmU7CisgICAgICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90IGEgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXIsIGNhbGN1bGF0ZSBlbmQgcG9pbnRlciBub3JtYWxseS4KKyAgICAgICAgLy8KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1aTMySW5jID0gdWkzMkluYyA+PiBVRE1BX0RTVF9JTkNfUzsKKyAgICAgICAgICAgIHVpMzJCdWZmZXJCeXRlcyA9IHVpMzJUcmFuc2ZlclNpemUgPDwgdWkzMkluYzsKKyAgICAgICAgICAgIHB2RHN0QWRkciA9ICh2b2lkICopKCh1aW50MzJfdClwdkRzdEFkZHIgKyB1aTMyQnVmZmVyQnl0ZXMgLSAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gTG9hZCB0aGUgZGVzdGluYXRpb24gZW5kaW5nIGFkZHJlc3MgaW50byB0aGUgY29udHJvbCBibG9jay4KKyAgICAvLworICAgIHBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleF0ucHZEc3RFbmRBZGRyID0gcHZEc3RBZGRyOworCisgICAgLy8KKyAgICAvLyBXcml0ZSB0aGUgbmV3IGNvbnRyb2wgd29yZCB2YWx1ZS4KKyAgICAvLworICAgIHBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleF0udWkzMkNvbnRyb2wgPSB1aTMyQ29udHJvbDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDb25maWd1cmVzIGEgdURNQSBjaGFubmVsIGZvciBzY2F0dGVyLWdhdGhlciBtb2RlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAordURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyVGFza0NvdW50LCB2b2lkICpwdlRhc2tMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJJc1BlcmlwaFNHKQoreworICAgIHRETUFDb250cm9sVGFibGUgKnBDb250cm9sVGFibGU7CisgICAgdERNQUNvbnRyb2xUYWJsZSAqcFRhc2tUYWJsZTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIHBhcmFtZXRlcnMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKyAgICBBU1NFUlQoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCkgIT0gMCk7CisgICAgQVNTRVJUKHB2VGFza0xpc3QgIT0gMCk7CisgICAgQVNTRVJUKHVpMzJUYXNrQ291bnQgPD0gVURNQV9YRkVSX1NJWkVfTUFYKTsKKyAgICBBU1NFUlQodWkzMlRhc2tDb3VudCAhPSAwKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgdGFibGUuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlID0gKHRETUFDb250cm9sVGFibGUgKilIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKTsKKworICAgIC8vCisgICAgLy8gR2V0IGEgaGFuZHkgcG9pbnRlciB0byB0aGUgdGFzayBsaXN0LgorICAgIC8vCisgICAgcFRhc2tUYWJsZSA9ICh0RE1BQ29udHJvbFRhYmxlICopcHZUYXNrTGlzdDsKKworICAgIC8vCisgICAgLy8gQ29tcHV0ZSB0aGUgZW5kaW5nIGFkZHJlc3MgZm9yIHRoZSBzb3VyY2UgcG9pbnRlci4gVGhpcyB3aWxsIGJlIHRoZQorICAgIC8vIGxhc3QgZWxlbWVudCBvZiB0aGUgbGFzdCB0YXNrIGluIHRoZSB0YXNrIHRhYmxlLgorICAgIC8vCisgICAgcENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbE51bV0ucHZTcmNFbmRBZGRyID0KKyAgICAgICAgJnBUYXNrVGFibGVbdWkzMlRhc2tDb3VudCAtIDFdLnVpMzJTcGFyZTsKKworICAgIC8vCisgICAgLy8gQ29tcHV0ZSB0aGUgZW5kaW5nIGFkZHJlc3MgZm9yIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyLiBUaGlzIHdpbGwgYmUKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSBhbHRlcm5hdGUgc3RydWN0dXJlIGZvciB0aGlzIGNoYW5uZWwuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlW3VpMzJDaGFubmVsTnVtXS5wdkRzdEVuZEFkZHIgPQorICAgICAgICAmcENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbE51bSB8IFVETUFfQUxUX1NFTEVDVF0udWkzMlNwYXJlOworCisgICAgLy8KKyAgICAvLyBDb21wdXRlIHRoZSBjb250cm9sIHdvcmQuICBNb3N0IGNvbmZpZ3VyYWJsZSBpdGVtcyBhcmUgZml4ZWQgZm9yCisgICAgLy8gc2NhdHRlci1nYXRoZXIuIEl0ZW0gYW5kIGluY3JlbWVudCBzaXplcyBhcmUgYWxsIDMyLWJpdCBhbmQgYXJiCisgICAgLy8gc2l6ZSBtdXN0IGJlIDQuIFRoZSBjb3VudCBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0YXNrIGxpc3QKKyAgICAvLyB0aW1lcyA0ICg0IHdvcmRzIHBlciB0YXNrKS4KKyAgICAvLworICAgIHBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxOdW1dLnVpMzJDb250cm9sID0KKyAgICAgICAgKFVETUFfRFNUX0lOQ18zMiB8IFVETUFfU1JDX0lOQ18zMiB8CisgICAgICAgICBVRE1BX1NJWkVfMzIgfCBVRE1BX0FSQl80IHwKKyAgICAgICAgICgoKHVpMzJUYXNrQ291bnQgKiA0KSAtIDEpIDw8IFVETUFfWEZFUl9TSVpFX1MpIHwKKyAgICAgICAgICh1aTMySXNQZXJpcGhTRyA/IFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIgOgorICAgICAgICAgIFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIpKTsKKworICAgIC8vCisgICAgLy8gU2NhdHRlci1nYXRoZXIgb3BlcmF0aW9ucyBjYW4gbGVhdmUgdGhlIGFsdCBiaXQgc2V0LiAgU28gaWYgZG9pbmcKKyAgICAvLyBiYWNrIHRvIGJhY2sgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXJzLCB0aGUgc2Vjb25kIGF0dGVtcHQgbWF5IG5vdAorICAgIC8vIHdvcmsgY29ycmVjdGx5IGJlY2F1c2UgdGhlIGFsdCBiaXQgaXMgc2V0LiAgVGhlcmVmb3JlLCBjbGVhciB0aGUKKyAgICAvLyBhbHQgYml0IGhlcmUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYWx3YXlzIGNsZWFyZWQgYmVmb3JlIGEgbmV3IFNHCisgICAgLy8gdHJhbnNmZXIgaXMgc3RhcnRlZC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NMRUFSQ0hOTFBSSUFMVCkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworCit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgY3VycmVudCB0cmFuc2ZlciBzaXplIGZvciBhIHVETUEgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90Cit1RE1BQ2hhbm5lbFNpemVHZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgpCit7CisgICAgdERNQUNvbnRyb2xUYWJsZSAqcENvbnRyb2xUYWJsZTsKKyAgICB1aW50MzJfdCB1aTMyQ29udHJvbDsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsU3RydWN0SW5kZXggPCAoVURNQV9OVU1fQ0hBTk5FTFMgKiAyKSk7CisgICAgQVNTRVJUKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpICE9IDApOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbCB0YWJsZS4KKyAgICAvLworICAgIHBDb250cm9sVGFibGUgPSAodERNQUNvbnRyb2xUYWJsZSAqKUhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpOworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY29udHJvbCB3b3JkIHZhbHVlIGFuZCBtYXNrIG9mZiBhbGwgYnV0IHRoZSBzaXplIGZpZWxkCisgICAgLy8gYW5kIHRoZSBtb2RlIGZpZWxkLgorICAgIC8vCisgICAgdWkzMkNvbnRyb2wgPSAocENvbnRyb2xUYWJsZVt1aTMyQ2hhbm5lbFN0cnVjdEluZGV4XS51aTMyQ29udHJvbCAmCisgICAgICAgICAgICAgICAgICAgKFVETUFfWEZFUl9TSVpFX00gfCBVRE1BX01PREVfTSkpOworCisgICAgLy8KKyAgICAvLyBJZiB0aGUgc2l6ZSBmaWVsZCBhbmQgbW9kZSBmaWVsZCBhcmUgMCB0aGVuIHRoZSB0cmFuc2ZlciBpcyBmaW5pc2hlZAorICAgIC8vIGFuZCB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcyB0byB0cmFuc2Zlci4KKyAgICAvLworICAgIGlmKHVpMzJDb250cm9sID09IDApCisgICAgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UsIGlmIGVpdGhlciB0aGUgc2l6ZSBmaWVsZCBvciBtb3JlIGZpZWxkIGlzIG5vbi16ZXJvLCB0aGVuCisgICAgLy8gbm90IGFsbCB0aGUgaXRlbXMgaGF2ZSBiZWVuIHRyYW5zZmVycmVkLgorICAgIC8vCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2hpZnQgdGhlIHNpemUgZmllbGQgYW5kIGFkZCBvbmUsIHRoZW4gcmV0dXJuIHRvIHVzZXIuCisgICAgICAgIC8vCisgICAgICAgIHJldHVybigodWkzMkNvbnRyb2wgPj4gVURNQV9YRkVSX1NJWkVfUykgKyAxKTsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgR2V0cyB0aGUgdHJhbnNmZXIgbW9kZSBmb3IgYSB1RE1BIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit1aW50MzJfdAordURNQUNoYW5uZWxNb2RlR2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4KQoreworICAgIHRETUFDb250cm9sVGFibGUgKnBDb250cm9sVGFibGU7CisgICAgdWludDMyX3QgdWkzMkNvbnRyb2w7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbFN0cnVjdEluZGV4IDwgKFVETUFfTlVNX0NIQU5ORUxTICogMikpOworICAgIEFTU0VSVChIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKSAhPSAwKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgdGFibGUuCisgICAgLy8KKyAgICBwQ29udHJvbFRhYmxlID0gKHRETUFDb250cm9sVGFibGUgKilIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DVFJMKTsKKworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbnRyb2wgd29yZCB2YWx1ZSBhbmQgbWFzayBvZmYgYWxsIGJ1dCB0aGUgbW9kZSBmaWVsZC4KKyAgICAvLworICAgIHVpMzJDb250cm9sID0gKHBDb250cm9sVGFibGVbdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleF0udWkzMkNvbnRyb2wgJgorICAgICAgICAgICAgICAgICAgIFVETUFfTU9ERV9NKTsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgaWYgc2NhdHRlci9nYXRoZXIgbW9kZSwgYW5kIGlmIHNvLCBtYXNrIG9mZiB0aGUgYWx0IGJpdC4KKyAgICAvLworICAgIGlmKCgodWkzMkNvbnRyb2wgJiB+VURNQV9NT0RFX0FMVF9TRUxFQ1QpID09IFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIpIHx8CisgICAgICAgKCh1aTMyQ29udHJvbCAmIH5VRE1BX01PREVfQUxUX1NFTEVDVCkgPT0gVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUikpCisgICAgeworICAgICAgICB1aTMyQ29udHJvbCAmPSB+VURNQV9NT0RFX0FMVF9TRUxFQ1Q7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIG1vZGUgdG8gdGhlIGNhbGxlci4KKyAgICAvLworICAgIHJldHVybih1aTMyQ29udHJvbCk7Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91ZG1hLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi91ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzZTU3NQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3VkbWEuaApAQCAtMCwwICsxLDEzMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB1ZG1hLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTExLTE3IDA5OjUwOjE0ICswMTAwIChUdWUsIDE3IE5vdiAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MTAxCisqCisqICBEZXNjcmlwdGlvbjogICAgRGVmaW5lcyBhbmQgcHJvdG90eXBlcyBmb3IgdGhlIHVETUEgY29udHJvbGxlci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgdWRtYV9hcGkKKy8vISBAeworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmbmRlZiBfX1VETUFfSF9fCisjZGVmaW5lIF9fVURNQV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od191ZG1hLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2RlYnVnLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL2ludGVycnVwdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFRoaXMgc2VjdGlvbiByZW5hbWVzIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90ICJzdGF0aWMgaW5saW5lIiwgc28gdGhhdAorLy8gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGltcGxlbWVudGF0aW9uIGluIGZsYXNoLiBBdCB0aGUgZW5kCisvLyBvZiB0aGlzIGZpbGUgYSBzZWNvbmQgcmVuYW1pbmcgd2lsbCBjaGFuZ2UgdGhlIGRlZmF1bHRzIHRvIGltcGxlbWVudGF0aW9uIGluCisvLyBST00gZm9yIGF2YWlsYWJsZSBmdW5jdGlvbnMuCisvLworLy8gVG8gZm9yY2UgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaCwgZS5nLiBmb3IgZGVidWdnaW5nOgorLy8gLSBHbG9iYWxseTogRGVmaW5lIERSSVZFUkxJQl9OT1JPTSBhdCBwcm9qZWN0IGxldmVsCisvLyAtIFBlciBmdW5jdGlvbjogVXNlIHByZWZpeCAiTk9ST01fIiB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERPWFlHRU4pCisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZSAgICAgIE5PUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlCisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUgICAgIE5PUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRGlzYWJsZQorICAgICNkZWZpbmUgdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxDb250cm9sU2V0ICAgICAgICAgICBOT1JPTV91RE1BQ2hhbm5lbENvbnRyb2xTZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsVHJhbnNmZXJTZXQgICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxUcmFuc2ZlclNldAorICAgICNkZWZpbmUgdURNQUNoYW5uZWxTY2F0dGVyR2F0aGVyU2V0ICAgICBOT1JPTV91RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQKKyAgICAjZGVmaW5lIHVETUFDaGFubmVsU2l6ZUdldCAgICAgICAgICAgICAgTk9ST01fdURNQUNoYW5uZWxTaXplR2V0CisgICAgI2RlZmluZSB1RE1BQ2hhbm5lbE1vZGVHZXQgICAgICAgICAgICAgIE5PUk9NX3VETUFDaGFubmVsTW9kZUdldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEEgc3RydWN0dXJlIHRoYXQgZGVmaW5lcyBhbiBlbnRyeSBpbiB0aGUgY2hhbm5lbCBjb250cm9sIHRhYmxlLgorLy8hCisvLyEgVGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IHRoZSB1RE1BIGNvbnRyb2xsZXIgYW5kIG5vcm1hbGx5IGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yCisvLyEgc29mdHdhcmUgdG8gZGlyZWN0bHkgcmVhZCBvciB3cml0ZSBmaWVsZHMgaW4gdGhlIHRhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9sYXRpbGUgdm9pZCAqcHZTcmNFbmRBZGRyOyAgIC8vITwgVGhlIGVuZGluZyBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YSB0cmFuc2Zlci4KKyAgICB2b2xhdGlsZSB2b2lkICpwdkRzdEVuZEFkZHI7ICAgLy8hPCBUaGUgZW5kaW5nIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRhdGEgdHJhbnNmZXIuCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWkzMkNvbnRyb2w7IC8vITwgVGhlIGNoYW5uZWwgY29udHJvbCBtb2RlLgorICAgIHZvbGF0aWxlIHVpbnQzMl90IHVpMzJTcGFyZTsgICAvLyE8IEFuIHVudXNlZCBsb2NhdGlvbi4KK30KK3RETUFDb250cm9sVGFibGU7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEEgaGVscGVyIG1hY3JvIGZvciBidWlsZGluZyBzY2F0dGVyLWdhdGhlciB0YXNrIHRhYmxlIGVudHJpZXMuCisvLyEKKy8vISBUaGlzIG1hY3JvIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gaGVscCBwb3B1bGF0ZSBhIHRhYmxlIG9mIHVETUEgdGFza3MKKy8vISBmb3IgYSBzY2F0dGVyLWdhdGhlciB0cmFuc2Zlci4gVGhpcyBtYWNybyB3aWxsIGNhbGN1bGF0ZSB0aGUgdmFsdWVzIGZvcgorLy8hIHRoZSBmaWVsZHMgb2YgYSB0YXNrIHN0cnVjdHVyZSBlbnRyeSBiYXNlZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycy4KKy8vIQorLy8hIFRoZXJlIGFyZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgZm9yIHRoZSB2YWx1ZXMgb2YgZWFjaCBwYXJhbWV0ZXIuICBObworLy8hIGNoZWNraW5nIGlzIGRvbmUgc28gaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBlbnN1cmUgdGhhdCBjb3JyZWN0IHZhbHVlcworLy8hIGFyZSB1c2VkIGZvciB0aGUgcGFyYW1ldGVycy4KKy8vIQorLy8hIFRoaXMgbWFjcm8gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBpbml0aWFsaXplIGluZGl2aWR1YWwgZW50cmllcyBvZgorLy8hIGEgc3RydWN0dXJlIG9mIHRETUFDb250cm9sVGFibGUgdHlwZSwgbGlrZSB0aGlzOgorLy8hCisvKiEKK1x2ZXJiYXRpbQorICB0RE1BQ29udHJvbFRhYmxlIE15VGFza0xpc3RbXSA9CisgIHsKKyAgICAgIHVETUFUYXNrU3RydWN0RW50cnkoVGFzazFDb3VudCwgVURNQV9TSVpFXzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVETUFfU1JDX0lOQ184LCBNeVNvdXJjZUJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVURNQV9EU1RfSU5DXzgsIE15RGVzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVURNQV9BUkJfOCwgVURNQV9NT0RFX01FTV9TQ0FUVEVSX0dBVEhFUiksCisgICAgICB1RE1BVGFza1N0cnVjdEVudHJ5KFRhc2syQ291bnQsIC4uLiApLAorICB9CitcZW5kdmVyYmF0aW0KKyovCisvLyEgXHBhcmFtIHVpMzJUcmFuc2ZlckNvdW50IGlzIHRoZSBjb3VudCBvZiBpdGVtcyB0byB0cmFuc2ZlciBmb3IgdGhpcyB0YXNrLgorLy8hIEl0IG11c3QgYmUgaW4gdGhlIHJhbmdlIDEtMTAyNC4KKy8vISBccGFyYW0gdWkzMkl0ZW1TaXplIGlzIHRoZSBiaXQgc2l6ZSBvZiB0aGUgaXRlbXMgdG8gdHJhbnNmZXIgZm9yIHRoaXMgdGFzay4KKy8vISBJdCBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVURNQV9TSVpFXzgKKy8vISAtIFxyZWYgVURNQV9TSVpFXzE2CisvLyEgLSBccmVmIFVETUFfU0laRV8zMgorLy8hIFxwYXJhbSB1aTMyU3JjSW5jcmVtZW50IGlzIHRoZSBiaXQgc2l6ZSBpbmNyZW1lbnQgZm9yIHNvdXJjZSBkYXRhLgorLy8hIEl0IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBVRE1BX1NSQ19JTkNfOAorLy8hIC0gXHJlZiBVRE1BX1NSQ19JTkNfMTYKKy8vISAtIFxyZWYgVURNQV9TUkNfSU5DXzMyCisvLyEgLSBccmVmIFVETUFfU1JDX0lOQ19OT05FCisvLyEgXHBhcmFtIHB2U3JjQWRkciBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgZGF0YSB0byB0cmFuc2Zlci4KKy8vISBccGFyYW0gdWkzMkRzdEluY3JlbWVudCBpcyB0aGUgYml0IHNpemUgaW5jcmVtZW50IGZvciBkZXN0aW5hdGlvbiBkYXRhLgorLy8hIEl0IG11c3QgYmUgb25lIG9mOgorLy8hIC0gXHJlZiBVRE1BX0RTVF9JTkNfOAorLy8hIC0gXHJlZiBVRE1BX0RTVF9JTkNfMTYKKy8vISAtIFxyZWYgVURNQV9EU1RfSU5DXzMyCisvLyEgLSBccmVmIFVETUFfRFNUX0lOQ19OT05FCisvLyEgXHBhcmFtIHB2RHN0QWRkciBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgZGVzdGluYXRpb24gZGF0YS4KKy8vISBccGFyYW0gdWkzMkFyYlNpemUgaXMgdGhlIGFyYml0cmF0aW9uIHNpemUgdG8gdXNlIGZvciB0aGUgdHJhbnNmZXIgdGFzay4KKy8vISBUaGlzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBhcmJpdHJhdGlvbiBzaXplIGluIHBvd2VycyBvZiAyLCBmcm9tIDEgdG8gMTAyNC4KKy8vISBJdCBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVURNQV9BUkJfMQorLy8hIC0gXHJlZiBVRE1BX0FSQl8yCisvLyEgLSBccmVmIFVETUFfQVJCXzQKKy8vISAtIC4uLgorLy8hIC0gXHJlZiBVRE1BX0FSQl8xMDI0CisvLyEgXHBhcmFtIHVpMzJNb2RlIGlzIHRoZSB0cmFuc2ZlciBtb2RlIGZvciB0aGlzIHRhc2suCisvLyEgTm90ZSB0aGF0IG5vcm1hbGx5IGFsbCB0YXNrcyB3aWxsIGJlIG9uZSBvZiB0aGUgc2NhdHRlci1nYXRoZXIgbW9kZXMgd2hpbGUgdGhlCisvLyEgbGFzdCB0YXNrIGlzIGEgdGFzayBsaXN0IHdpbGwgYmUgQVVUTyBvciBCQVNJQy4KKy8vISBJdCBtdXN0IGJlIG9uZSBvZjoKKy8vISAtIFxyZWYgVURNQV9NT0RFX0JBU0lDCisvLyEgLSBccmVmIFVETUFfTU9ERV9BVVRPCisvLyEgLSBccmVmIFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIKKy8vISAtIFxyZWYgVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUgorLy8hCisvLyEgXHJldHVybiBOb25lICh0aGlzIGlzIG5vdCBhIGZ1bmN0aW9uKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgdURNQVRhc2tTdHJ1Y3RFbnRyeSh1aTMyVHJhbnNmZXJDb3VudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMySXRlbVNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyU3JjSW5jcmVtZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdlNyY0FkZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyRHN0SW5jcmVtZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdkRzdEFkZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyQXJiU2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aTMyTW9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodWkzMlNyY0luY3JlbWVudCkgPT0gVURNQV9TUkNfSU5DX05PTkUpID8gKHB2U3JjQWRkcikgOiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICgodm9pZCAqKSgmKCh1aW50OF90ICopKHB2U3JjQWRkcikpWygodWkzMlRyYW5zZmVyQ291bnQpIDw8ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aTMyU3JjSW5jcmVtZW50KSA+PiAyNikpIC0gMV0pKSksIFwKKyAgICAgICAgKCgodWkzMkRzdEluY3JlbWVudCkgPT0gVURNQV9EU1RfSU5DX05PTkUpID8gKHB2RHN0QWRkcikgOiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICgodm9pZCAqKSgmKCh1aW50OF90ICopKHB2RHN0QWRkcikpWygodWkzMlRyYW5zZmVyQ291bnQpIDw8ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aTMyRHN0SW5jcmVtZW50KSA+PiAzMCkpIC0gMV0pKSksIFwKKyAgICAgICAgKHVpMzJTcmNJbmNyZW1lbnQpIHwgKHVpMzJEc3RJbmNyZW1lbnQpIHwgKHVpMzJJdGVtU2l6ZSkgfCAgICAgICAgICAgIFwKKyAgICAgICAgKHVpMzJBcmJTaXplKSB8ICgoKHVpMzJUcmFuc2ZlckNvdW50KSAtIDEpIDw8IDQpIHwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgoKHVpMzJNb2RlKSA9PSBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSKSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoKHVpMzJNb2RlKSA9PSBVRE1BX01PREVfUEVSX1NDQVRURVJfR0FUSEVSKSkgPyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAodWkzMk1vZGUpIHwgVURNQV9NT0RFX0FMVF9TRUxFQ1QgOiAodWkzMk1vZGUpKSwgMCAgICAgICAgICAgIFwKKyAgICB9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgaGFyZHdhcmUgY29uZmlndXJlZCBudW1iZXIgb2YgdURNQSBjaGFubmVscy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVETUFfTlVNX0NIQU5ORUxTICAgICAgIDIxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgbGV2ZWwgb2YgcHJpb3JpdHkgZm9yIHRoZSB1RE1BIGNoYW5uZWxzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVRE1BX1BSSU9SSVRZX0xPVyAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFVETUFfUFJJT1JJVFlfSElHSCAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEZsYWdzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZSgpLAorLy8gdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlKCksIGFuZCByZXR1cm5lZCBmcm9tIHVETUFDaGFubmVsQXR0cmlidXRlR2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVRE1BX0FUVFJfVVNFQlVSU1QgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVETUFfQVRUUl9BTFRTRUxFQ1QgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVURNQV9BVFRSX0hJR0hfUFJJT1JJVFkgMHgwMDAwMDAwNAorI2RlZmluZSBVRE1BX0FUVFJfUkVRTUFTSyAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVETUFfQVRUUl9BTEwgICAgICAgICAgIDB4MDAwMDAwMEYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERNQSBjb250cm9sIG1vZGVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB1RE1BQ2hhbm5lbE1vZGVTZXQoKSBhbmQgcmV0dXJuZWQKKy8vIHVETUFDaGFubmVsTW9kZUdldCgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVURNQV9NT0RFX1NUT1AgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBVRE1BX01PREVfQkFTSUMgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVETUFfTU9ERV9BVVRPICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVURNQV9NT0RFX1BJTkdQT05HICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVETUFfTU9ERV9QRVJfU0NBVFRFUl9HQVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgVURNQV9NT0RFX00gICAgICAgICAgICAgMHgwMDAwMDAwNyAgLy8gdURNQSBUcmFuc2ZlciBNb2RlCisjZGVmaW5lIFVETUFfTU9ERV9BTFRfU0VMRUNUICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENoYW5uZWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHVETUFDb250cm9sU2V0KCkuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBVRE1BX0RTVF9JTkNfOCAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFVETUFfRFNUX0lOQ18xNiAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVURNQV9EU1RfSU5DXzMyICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBVRE1BX0RTVF9JTkNfTk9ORSAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIFVETUFfRFNUX0lOQ19NICAgICAgICAgIDB4QzAwMDAwMDAgIC8vIERlc3RpbmF0aW9uIEFkZHJlc3MgSW5jcmVtZW50CisjZGVmaW5lIFVETUFfRFNUX0lOQ19TICAgICAgICAgIDMwCisjZGVmaW5lIFVETUFfU1JDX0lOQ184ICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVURNQV9TUkNfSU5DXzE2ICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBVRE1BX1NSQ19JTkNfMzIgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFVETUFfU1JDX0lOQ19OT05FICAgICAgIDB4MGMwMDAwMDAKKyNkZWZpbmUgVURNQV9TUkNfSU5DX00gICAgICAgICAgMHgwQzAwMDAwMCAgLy8gU291cmNlIEFkZHJlc3MgSW5jcmVtZW50CisjZGVmaW5lIFVETUFfU1JDX0lOQ19TICAgICAgICAgIDI2CisjZGVmaW5lIFVETUFfU0laRV84ICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVURNQV9TSVpFXzE2ICAgICAgICAgICAgMHgxMTAwMDAwMAorI2RlZmluZSBVRE1BX1NJWkVfMzIgICAgICAgICAgICAweDIyMDAwMDAwCisjZGVmaW5lIFVETUFfU0laRV9NICAgICAgICAgICAgIDB4MzMwMDAwMDAgIC8vIERhdGEgU2l6ZQorI2RlZmluZSBVRE1BX1NJWkVfUyAgICAgICAgICAgICAyNAorI2RlZmluZSBVRE1BX0FSQl8xICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFVETUFfQVJCXzIgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgVURNQV9BUkJfNCAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBVRE1BX0FSQl84ICAgICAgICAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIFVETUFfQVJCXzE2ICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgVURNQV9BUkJfMzIgICAgICAgICAgICAgMHgwMDAxNDAwMAorI2RlZmluZSBVRE1BX0FSQl82NCAgICAgICAgICAgICAweDAwMDE4MDAwCisjZGVmaW5lIFVETUFfQVJCXzEyOCAgICAgICAgICAgIDB4MDAwMWMwMDAKKyNkZWZpbmUgVURNQV9BUkJfMjU2ICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBVRE1BX0FSQl81MTIgICAgICAgICAgICAweDAwMDI0MDAwCisjZGVmaW5lIFVETUFfQVJCXzEwMjQgICAgICAgICAgIDB4MDAwMjgwMDAKKyNkZWZpbmUgVURNQV9BUkJfTSAgICAgICAgICAgICAgMHgwMDAzQzAwMCAgLy8gQXJiaXRyYXRpb24gU2l6ZQorI2RlZmluZSBVRE1BX0FSQl9TICAgICAgICAgICAgICAxNAorI2RlZmluZSBVRE1BX05FWFRfVVNFQlVSU1QgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVETUFfWEZFUl9TSVpFX01BWCAgICAgIDEwMjQKKyNkZWZpbmUgVURNQV9YRkVSX1NJWkVfTSAgICAgICAgMHgwMDAwM0ZGMCAgLy8gVHJhbnNmZXIgc2l6ZQorI2RlZmluZSBVRE1BX1hGRVJfU0laRV9TICAgICAgICA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGFubmVsIG51bWJlcnMgdG8gYmUgcGFzc2VkIHRvIEFQSSBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIGEgY2hhbm5lbCBudW1iZXIKKy8vIElELgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVURNQV9DSEFOX1NXX0VWVDAgICAgICAgMCAgIC8vIFNvZnR3YXJlIEV2ZW50IENoYW5uZWwgMAorI2RlZmluZSBVRE1BX0NIQU5fVUFSVDBfUlggICAgICAxICAgLy8gVUFSVDAgUlggRGF0YQorI2RlZmluZSBVRE1BX0NIQU5fVUFSVDBfVFggICAgICAyICAgLy8gVUFSVDAgUlggRGF0YQorI2RlZmluZSBVRE1BX0NIQU5fU1NJMF9SWCAgICAgICAzICAgLy8gU1NJMCBSWCBEYXRhCisjZGVmaW5lIFVETUFfQ0hBTl9TU0kwX1RYICAgICAgIDQgICAvLyBTU0kwIFJYIERhdGEKKyNkZWZpbmUgVURNQV9DSEFOX0FVWF9BREMgICAgICAgNyAgIC8vIEFVWCBBREMgZXZlbnQKKyNkZWZpbmUgVURNQV9DSEFOX0FVWF9TVyAgICAgICAgOCAgIC8vIEFVWCBTb2Z0d2FyZSBldmVudAorI2RlZmluZSBVRE1BX0NIQU5fVElNRVIwX0EgICAgICA5ICAgLy8gVGltZXIwIEEgZXZlbnQKKyNkZWZpbmUgVURNQV9DSEFOX1RJTUVSMF9CICAgICAgMTAgIC8vIFRpbWVyMCBCIGV2ZW50CisjZGVmaW5lIFVETUFfQ0hBTl9USU1FUjFfQSAgICAgIDExCisjZGVmaW5lIFVETUFfQ0hBTl9USU1FUjFfQiAgICAgIDEyCisjZGVmaW5lIFVETUFfQ0hBTl9BT05fUFJPRzIgICAgIDEzCisjZGVmaW5lIFVETUFfQ0hBTl9ETUFfUFJPRyAgICAgIDE0CisjZGVmaW5lIFVETUFfQ0hBTl9BT05fUlRDICAgICAgIDE1CisjZGVmaW5lIFVETUFfQ0hBTl9TU0kxX1JYICAgICAgIDE2CisjZGVmaW5lIFVETUFfQ0hBTl9TU0kxX1RYICAgICAgIDE3CisjZGVmaW5lIFVETUFfQ0hBTl9TV19FVlQxICAgICAgIDE4CisjZGVmaW5lIFVETUFfQ0hBTl9TV19FVlQyICAgICAgIDE5CisjZGVmaW5lIFVETUFfQ0hBTl9TV19FVlQzICAgICAgIDIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBGbGFncyB0byBiZSBPUidkIHdpdGggdGhlIGNoYW5uZWwgSUQgdG8gaW5kaWNhdGUgaWYgdGhlIHByaW1hcnkgb3IgYWx0ZXJuYXRlCisvLyBjb250cm9sIHN0cnVjdHVyZSBzaG91bGQgYmUgdXNlZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFVETUFfUFJJX1NFTEVDVCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVURNQV9BTFRfU0VMRUNUICAgICAgICAgMHgwMDAwMDAyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQVBJIEZ1bmN0aW9ucyBhbmQgcHJvdG90eXBlcworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2lmZGVmIERSSVZFUkxJQl9ERUJVRworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcaW50ZXJuYWwKKy8vIQorLy8hIFxicmllZiBDaGVja3MgYSB1RE1BIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhIHVETUEgbW9kdWxlIGJhc2UgYWRkcmVzcyBpcyB2YWxpZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBzcGVjaWZpZXMgdGhlIHVETUEgbW9kdWxlIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCit1RE1BQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBVRE1BMF9CQVNFKTsKK30KKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB1RE1BIGNvbnRyb2xsZXIgZm9yIHVzZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgdURNQSBjb250cm9sbGVyLiBUaGUgdURNQSBjb250cm9sbGVyIG11c3QgYmUKKy8vISBlbmFibGVkIGJlZm9yZSBpdCBjYW4gYmUgY29uZmlndXJlZCBhbmQgdXNlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIG1hc3RlciBlbmFibGUgYml0IGluIHRoZSBjb25maWcgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19DRkcpID0gVURNQV9DRkdfTUFTVEVSRU5BQkxFOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyB0aGUgdURNQSBjb250cm9sbGVyIGZvciB1c2UuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSB1RE1BIGNvbnRyb2xsZXIuICBPbmNlIGRpc2FibGVkLCB0aGUgdURNQQorLy8hIGNvbnRyb2xsZXIgd2lsbCBub3Qgb3BlcmF0ZSB1bnRpbCByZS1lbmFibGVkIHdpdGggXHJlZiB1RE1BRW5hYmxlKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBDbGVhciB0aGUgbWFzdGVyIGVuYWJsZSBiaXQgaW4gdGhlIGNvbmZpZyByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NGRykgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSB1RE1BIGVycm9yIHN0YXR1cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdURNQSBlcnJvciBzdGF0dXMuIEl0IHNob3VsZCBiZSBjYWxsZWQgZnJvbQorLy8hIHdpdGhpbiB0aGUgdURNQSBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlciB0byBkZXRlcm1pbmUgaWYgYSB1RE1BIGVycm9yCisvLyEgb2NjdXJyZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIG5vbi16ZXJvIGlmIGEgdURNQSBlcnJvciBpcyBwZW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAordURNQUVycm9yU3RhdHVzR2V0KHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJldHVybiB0aGUgdURNQSBlcnJvciBzdGF0dXMuCisgICAgLy8KKyAgICByZXR1cm4oSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fRVJST1IpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgQ2xlYXJzIHRoZSB1RE1BIGVycm9yIGludGVycnVwdC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY2xlYXJzIGEgcGVuZGluZyB1RE1BIGVycm9yIGludGVycnVwdC4gSXQgc2hvdWxkIGJlIGNhbGxlZAorLy8hIGZyb20gd2l0aGluIHRoZSB1RE1BIGVycm9yIGludGVycnVwdCBoYW5kbGVyIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFFcnJvclN0YXR1c0NsZWFyKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSB1RE1BIGVycm9yIGludGVycnVwdC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0VSUk9SKSA9IFVETUFfRVJST1JfU1RBVFVTOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIGEgdURNQSBjaGFubmVsIGZvciBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYSBzcGVjaWZpYyB1RE1BIGNoYW5uZWwgZm9yIHVzZS4gVGhpcyBmdW5jdGlvbiBtdXN0CisvLyEgYmUgdXNlZCB0byBlbmFibGUgYSBjaGFubmVsIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGEgdURNQQorLy8hIHRyYW5zZmVyLgorLy8hCisvLyEgV2hlbiBhIHVETUEgdHJhbnNmZXIgaXMgY29tcGxldGVkLCB0aGUgY2hhbm5lbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKy8vISBkaXNhYmxlZCBieSB0aGUgdURNQSBjb250cm9sbGVyLiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZAorLy8hIHByaW9yIHRvIHN0YXJ0aW5nIHVwIGFueSBuZXcgdHJhbnNmZXIuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbE51bSBpcyB0aGUgY2hhbm5lbCBudW1iZXIgdG8gZW5hYmxlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFDaGFubmVsRW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gU2V0IHRoZSBiaXQgZm9yIHRoaXMgY2hhbm5lbCBpbiB0aGUgZW5hYmxlIHNldCByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVENIQU5ORUxFTikgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBhIHVETUEgY2hhbm5lbCBmb3Igb3BlcmF0aW9uLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBhIHNwZWNpZmljIHVETUEgY2hhbm5lbC4gT25jZSBkaXNhYmxlZCwgYSBjaGFubmVsCisvLyEgd2lsbCBub3QgcmVzcG9uZCB0byB1RE1BIHRyYW5zZmVyIHJlcXVlc3RzIHVudGlsIHJlLWVuYWJsZWQgdmlhCisvLyEgXHJlZiB1RE1BQ2hhbm5lbEVuYWJsZSgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gaXMgdGhlIGNoYW5uZWwgbnVtYmVyIHRvIGRpc2FibGUuCisvLyEKKy8vISBccmV0dXJuIE5vbmUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFDaGFubmVsRGlzYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgYml0IGZvciB0aGlzIGNoYW5uZWwgaW4gdGhlIGVuYWJsZSBjbGVhciByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NMRUFSQ0hBTk5FTEVOKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENoZWNrcyBpZiBhIHVETUEgY2hhbm5lbCBpcyBlbmFibGVkIGZvciBvcGVyYXRpb24uCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgYSBzcGVjaWZpYyB1RE1BIGNoYW5uZWwgaXMgZW5hYmxlZC4gIFRoaXMKKy8vISBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGEgdHJhbnNmZXIsIHNpbmNlIHRoZSBjaGFubmVsIHdpbGwKKy8vISBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGF0IHRoZSBlbmQgb2YgYSB0cmFuc2Zlci4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHRoZSBjaGFubmVsIG51bWJlciB0byBjaGVjay4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBzdGF0dXMgb2YgdURNQSBjaGFubmVsLgorLy8hIC0gXGMgdHJ1ZSAgOiBDaGFubmVsIGlzIGVuYWJsZWQuCisvLyEgLSBcYyBmYWxzZSA6IERpc2FibGVkLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCit1RE1BQ2hhbm5lbElzRW5hYmxlZCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIEFORCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgYml0IHdpdGggdGhlIGVuYWJsZSByZWdpc3RlciwgYW5kIHJldHVybiB0aGUKKyAgICAvLyByZXN1bHQuCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVENIQU5ORUxFTikgJiAoMSA8PCB1aTMyQ2hhbm5lbE51bSkpID8KKyAgICAgICAgICAgdHJ1ZSA6IGZhbHNlKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgY2hhbm5lbCBjb250cm9sIHRhYmxlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNoYW5uZWwgY29udHJvbCB0YWJsZS4gVGhpcworLy8hIHRhYmxlIHJlc2lkZXMgaW4gc3lzdGVtIG1lbW9yeSBhbmQgaG9sZHMgY29udHJvbCBpbmZvcm1hdGlvbiBmb3IgZWFjaCB1RE1BCisvLyEgY2hhbm5lbC4gIFRoZSB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSAxMDI0IGJ5dGUgYm91bmRhcnkuIFRoZSBiYXNlCisvLyEgYWRkcmVzcyBtdXN0IGJlIHNldCBiZWZvcmUgYW55IG9mIHRoZSBjaGFubmVsIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZC4KKy8vISBTZXR0aW5nIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHByaW1hcnkgY29udHJvbCB0YWJsZSB3aWxsIGF1dG9tYXRpY2FsbHkKKy8vISBzZXQgdGhlIGFkZHJlc3MgZm9yIHRoZSBhbHRlcm5hdGUgY29udHJvbCB0YWJsZSBhcyB0aGUgbmV4dCBtZW1vcnkKKy8vISBsb2NhdGlvbiBhZnRlciB0aGUgcHJpbWFyeSBjb250cm9sIHRhYmxlLgorLy8hCisvLyEgVGhlIHNpemUgb2YgdGhlIGNoYW5uZWwgY29udHJvbCB0YWJsZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgdURNQQorLy8hIGNoYW5uZWxzLCBhbmQgd2hpY2ggdHJhbnNmZXIgbW9kZXMgYXJlIHVzZWQuICBSZWZlciB0byB0aGUgaW50cm9kdWN0b3J5CisvLyEgdGV4dCBhbmQgdGhlIG1pY3JvY29udHJvbGxlciBkYXRhc2hlZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisvLyEgY2hhbm5lbCBjb250cm9sIHRhYmxlLgorLy8hCisvLyEgXG5vdGUgVGhpcyByZWdpc3RlciBjYW5ub3QgYmUgcmVhZCB3aGVuIHRoZSBjb250cm9sbGVyIGlzIGluIHRoZSByZXNldAorLy8hIHN0YXRlLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gcENvbnRyb2xUYWJsZSBpcyBhIHBvaW50ZXIgdG8gdGhlIDEwMjQgYnl0ZSBhbGlnbmVkIGJhc2UgYWRkcmVzcworLy8hIG9mIHRoZSB1RE1BIGNoYW5uZWwgY29udHJvbCB0YWJsZS4gVGhlIGFkZHJlc3MgbXVzdCBiZSBhbiBhYnNvbHV0ZSBhZGRyZXNzCisvLyEgaW4gc3lzdGVtIG1lbW9yeSBzcGFjZS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BQ29udHJvbEJhc2VTZXQodWludDMyX3QgdWkzMkJhc2UsIHZvaWQgKnBDb250cm9sVGFibGUpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQoKCh1aW50MzJfdClwQ29udHJvbFRhYmxlICYgfjB4M0ZGKSA9PQorICAgICAgICAgICAodWludDMyX3QpcENvbnRyb2xUYWJsZSk7CisgICAgQVNTRVJUKCh1aW50MzJfdClwQ29udHJvbFRhYmxlID49IFNSQU1fQkFTRSk7CisKKyAgICAvLworICAgIC8vIFByb2dyYW0gdGhlIGJhc2UgYWRkcmVzcyBpbnRvIHRoZSByZWdpc3Rlci4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0NUUkwpID0gKHVpbnQzMl90KXBDb250cm9sVGFibGU7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIGNoYW5uZWwgY29udHJvbCB0YWJsZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjaGFubmVsIGNvbnRyb2wgdGFibGUuICBUaGlzCisvLyEgdGFibGUgcmVzaWRlcyBpbiBzeXN0ZW0gbWVtb3J5IGFuZCBob2xkcyBjb250cm9sIGluZm9ybWF0aW9uIGZvciBlYWNoIHVETUEKKy8vISBjaGFubmVsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhbm5lbCBjb250cm9sIHRhYmxlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkICoKK3VETUFDb250cm9sQmFzZUdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgLy8KKyAgICAvLyBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb250cm9sIGJhc2UgcmVnaXN0ZXIsIGFuZCByZXR1cm4gaXQgdG8KKyAgICAvLyB0aGUgY2FsbGVyLgorICAgIC8vCisgICAgcmV0dXJuKCh2b2lkICopSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ1RSTCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoZSBjaGFubmVsIGNvbnRyb2wgdGFibGUgYWx0ZXJuYXRlIHN0cnVjdHVyZXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGNoYW5uZWwKKy8vISBjb250cm9sIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGFsdGVybmF0ZSBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGVhY2ggY2hhbm5lbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHNlY29uZCBoYWxmIG9mIHRoZQorLy8hIGNoYW5uZWwgY29udHJvbCB0YWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZCAqCit1RE1BQ29udHJvbEFsdGVybmF0ZUJhc2VHZXQodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY29udHJvbCBiYXNlIHJlZ2lzdGVyLCBhbmQgcmV0dXJuIGl0IHRvCisgICAgLy8gdGhlIGNhbGxlci4KKyAgICAvLworICAgIHJldHVybigodm9pZCAqKUhXUkVHKHVpMzJCYXNlICsgVURNQV9PX0FMVENUUkwpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVxdWVzdHMgYSB1RE1BIGNoYW5uZWwgdG8gc3RhcnQgYSB0cmFuc2Zlci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHNvZnR3YXJlIHRvIHJlcXVlc3QgYSB1RE1BIGNoYW5uZWwgdG8gYmVnaW4gYQorLy8hIHRyYW5zZmVyLiBUaGlzIGNvdWxkIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBtZW1vcnkgdG8gbWVtb3J5IHRyYW5zZmVyLAorLy8hIG9yIGlmIGZvciBzb21lIHJlYXNvbiBhIHRyYW5zZmVyIG5lZWRzIHRvIGJlIGluaXRpYXRlZCBieSBzb2Z0d2FyZSBpbnN0ZWFkCisvLyEgb2YgdGhlIHBlcmlwaGVyYWwgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY2hhbm5lbC4KKy8vIQorLy8hIFxub3RlIElmIHRoZSBjaGFubmVsIGlzIGEgc29mdHdhcmUgY2hhbm5lbCBhbmQgaW50ZXJydXB0cyBhcmUgdXNlZCwgdGhlbgorLy8hIHRoZSBjb21wbGV0aW9uIHdpbGwgYmUgc2lnbmFsZWQgb24gdGhlIHVETUEgZGVkaWNhdGVkIGludGVycnVwdC4gSWYgYQorLy8hIHBlcmlwaGVyYWwgY2hhbm5lbCBpcyB1c2VkLCB0aGVuIHRoZSBjb21wbGV0aW9uIHdpbGwgYmUgc2lnbmFsZWQgb24gdGhlCisvLyEgcGVyaXBoZXJhbCdzIGludGVycnVwdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHRoZSBjaGFubmVsIG51bWJlciBvbiB3aGljaCB0byByZXF1ZXN0IGEgdURNQQorLy8hIHRyYW5zZmVyLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BQ2hhbm5lbFJlcXVlc3QodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGJpdCBmb3IgdGhpcyBjaGFubmVsIGluIHRoZSBzb2Z0d2FyZSB1RE1BIHJlcXVlc3QgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19TT0ZUUkVRKSA9IDEgPDwgdWkzMkNoYW5uZWxOdW07Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgYXR0cmlidXRlcyBvZiBhIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgYXR0cmlidXRlcyBvZiBhIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZS4KKy8vISBccGFyYW0gdWkzMkF0dHIgaXMgYSBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGVzIGZvciB0aGUgY2hhbm5lbC4KKy8vISBUaGUgcGFyYW1ldGVyIGlzIHRoZSBiaXR3aXNlIE9SIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfVVNFQlVSU1QgaXMgdXNlZCB0byByZXN0cmljdCB0cmFuc2ZlcnMgdG8gdXNlIG9ubHkgYSBidXJzdCBtb2RlLgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfQUxUU0VMRUNUIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBhbHRlcm5hdGUgY29udHJvbCBzdHJ1Y3R1cmUKKy8vISBmb3IgdGhpcyBjaGFubmVsIChpdCBpcyB2ZXJ5IHVubGlrZWx5IHRoYXQgdGhpcyBmbGFnIHNob3VsZCBiZSB1c2VkKS4KKy8vISAtIFxyZWYgVURNQV9BVFRSX0hJR0hfUFJJT1JJVFkgaXMgdXNlZCB0byBzZXQgdGhpcyBjaGFubmVsIHRvIGhpZ2ggcHJpb3JpdHkuCisvLyEgLSBccmVmIFVETUFfQVRUUl9SRVFNQVNLIGlzIHVzZWQgdG8gbWFzayB0aGUgaGFyZHdhcmUgcmVxdWVzdCBzaWduYWwgZnJvbSB0aGUKKy8vISBwZXJpcGhlcmFsIGZvciB0aGlzIGNoYW5uZWwuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkF0dHIpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBhdHRyaWJ1dGVzIG9mIGFuIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGF0dHJpYnV0ZXMgb2YgYSB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMyQ2hhbm5lbE51bSBpcyB0aGUgY2hhbm5lbCB0byBjb25maWd1cmUuCisvLyEgXHBhcmFtIHVpMzJBdHRyIGlzIGEgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyBmb3IgdGhlIGNoYW5uZWwuCisvLyEgVGhlIHBhcmFtZXRlciBpcyB0aGUgYml0d2lzZSBPUiBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVURNQV9BVFRSX1VTRUJVUlNUIGlzIHVzZWQgdG8gcmVzdHJpY3QgdHJhbnNmZXJzIHRvIHVzZSBvbmx5IGEgYnVyc3QgbW9kZS4KKy8vISAtIFxyZWYgVURNQV9BVFRSX0FMVFNFTEVDVCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgYWx0ZXJuYXRlIGNvbnRyb2wgc3RydWN0dXJlCisvLyEgZm9yIHRoaXMgY2hhbm5lbCAoaXQgaXMgdmVyeSB1bmxpa2VseSB0aGF0IHRoaXMgZmxhZyBzaG91bGQgYmUgdXNlZCkuCisvLyEgLSBccmVmIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZIGlzIHVzZWQgdG8gc2V0IHRoaXMgY2hhbm5lbCB0byBoaWdoIHByaW9yaXR5LgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfUkVRTUFTSyBpcyB1c2VkIHRvIG1hc2sgdGhlIGhhcmR3YXJlIHJlcXVlc3Qgc2lnbmFsIGZyb20gdGhlCisvLyEgcGVyaXBoZXJhbCBmb3IgdGhpcyBjaGFubmVsLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgdURNQUNoYW5uZWxBdHRyaWJ1dGVEaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJBdHRyKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgZW5hYmxlZCBhdHRyaWJ1dGVzIG9mIGEgdURNQSBjaGFubmVsLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY29tYmluYXRpb24gb2YgZmxhZ3MgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGVzIG9mCisvLyEgdGhlIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFubmVsTnVtIGlzIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZS4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgYml0d2lzZSBPUiBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgdURNQSBjaGFubmVsLCB3aGljaAorLy8hIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKy8vISAtIFxyZWYgVURNQV9BVFRSX1VTRUJVUlNUIGlzIHVzZWQgdG8gcmVzdHJpY3QgdHJhbnNmZXJzIHRvIHVzZSBvbmx5IGEgYnVyc3QgbW9kZS4KKy8vISAtIFxyZWYgVURNQV9BVFRSX0FMVFNFTEVDVCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgYWx0ZXJuYXRlIGNvbnRyb2wgc3RydWN0dXJlCisvLyEgZm9yIHRoaXMgY2hhbm5lbCAoaXQgaXMgdmVyeSB1bmxpa2VseSB0aGF0IHRoaXMgZmxhZyBzaG91bGQgYmUgdXNlZCkuCisvLyEgLSBccmVmIFVETUFfQVRUUl9ISUdIX1BSSU9SSVRZIGlzIHVzZWQgdG8gc2V0IHRoaXMgY2hhbm5lbCB0byBoaWdoIHByaW9yaXR5LgorLy8hIC0gXHJlZiBVRE1BX0FUVFJfUkVRTUFTSyBpcyB1c2VkIHRvIG1hc2sgdGhlIGhhcmR3YXJlIHJlcXVlc3Qgc2lnbmFsIGZyb20gdGhlCisvLyEgcGVyaXBoZXJhbCBmb3IgdGhpcyBjaGFubmVsLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldCh1aW50MzJfdCB1aTMyQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgYSB1RE1BIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgYSB1RE1BIHRyYW5zZmVyLiAgVGhlc2UKKy8vISBhcmUgdHlwaWNhbGx5IHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IGNoYW5nZWQgb2Z0ZW4uCisvLyEKKy8vISBcbm90ZSBUaGUgYWRkcmVzcyBpbmNyZW1lbnQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgZGF0YSBzaXplLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCBpcyB0aGUgYml0d2lzZSBPUiBvZiB0aGUgdURNQSBjaGFubmVsIG51bWJlciBhbmQ6CisvLyEgLSBccmVmIFVETUFfUFJJX1NFTEVDVCA6IFVzZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlLgorLy8hIC0gXHJlZiBVRE1BX0FMVF9TRUxFQ1QgOiBVc2UgYWx0ZXJuYXRlIGRhdGEgc3RydWN0dXJlLgorLy8hIFxwYXJhbSB1aTMyQ29udHJvbCBpcyB0aGUgYml0d2lzZSBPUiBvZiBmaXZlIHZhbHVlczoKKy8vISAtIERhdGEgc2l6ZQorLy8hICAgLSBccmVmIFVETUFfU0laRV84ICA6IDggYml0cy4KKy8vISAgIC0gXHJlZiBVRE1BX1NJWkVfMTYgOiAxNiBiaXRzLgorLy8hICAgLSBccmVmIFVETUFfU0laRV8zMiA6IDMyIGJpdHMuCisvLyEgLSBTb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQKKy8vISAgIC0gXHJlZiBVRE1BX1NSQ19JTkNfOCAgICA6IDggYml0cy4KKy8vISAgIC0gXHJlZiBVRE1BX1NSQ19JTkNfMTYgICA6IDE2IGJpdHMuCisvLyEgICAtIFxyZWYgVURNQV9TUkNfSU5DXzMyICAgOiAzMiBiaXRzLgorLy8hICAgLSBccmVmIFVETUFfU1JDX0lOQ19OT05FIDogTm9uLWluY3JlbWVudGluZy4KKy8vISAtIERlc3RpbmF0aW9uIGFkZHJlc3MgaW5jcmVtZW50CisvLyEgICAtIFxyZWYgVURNQV9EU1RfSU5DXzggICAgOiA4IGJpdHMuCisvLyEgICAtIFxyZWYgVURNQV9EU1RfSU5DXzE2ICAgOiAxNiBiaXRzLgorLy8hICAgLSBccmVmIFVETUFfRFNUX0lOQ18zMiAgIDogMzIgYml0cy4KKy8vISAgIC0gXHJlZiBVRE1BX0RTVF9JTkNfTk9ORSA6IE5vbi1pbmNyZW1lbnRpbmcuCisvLyEgLSBBcmJpdHJhdGlvbiBzaXplLiBEZXRlcm1pbmVzIGhvdyBtYW55IGl0ZW1zIGFyZSB0cmFuc2ZlcnJlZCBiZWZvcmUKKy8vISB0aGUgdURNQSBjb250cm9sbGVyIHJlLWFyYml0cmF0ZXMgZm9yIHRoZSBidXMuIEluIHBvd2VyIG9mIDIuCisvLyEgICAtIFxyZWYgVURNQV9BUkJfMQorLy8hICAgLSBccmVmIFVETUFfQVJCXzIKKy8vISAgIC0gXHJlZiBVRE1BX0FSQl80CisvLyEgICAtIFxyZWYgVURNQV9BUkJfOAorLy8hICAgLSAuLi4KKy8vISAgIC0gXHJlZiBVRE1BX0FSQl8xMDI0CisvLyEgLSBGb3JjZSB0aGUgY2hhbm5lbCB0byBvbmx5IHJlc3BvbmQgdG8gYnVyc3QgcmVxdWVzdHMgYXQgdGhlIHRhaWwgZW5kIG9mIGEgc2NhdHRlci1nYXRoZXIgdHJhbnNmZXIuCisvLyEgICAtIFxyZWYgVURNQV9ORVhUX1VTRUJVUlNUCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCB1RE1BQ2hhbm5lbENvbnRyb2xTZXQodWludDMyX3QgdWkzMkJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ29udHJvbCk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHRyYW5zZmVyIHBhcmFtZXRlcnMgZm9yIGEgdURNQSBjaGFubmVsIGNvbnRyb2wgc3RydWN0dXJlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgYSB1RE1BIHRyYW5zZmVyLiAgVGhlc2UgYXJlCisvLyEgdHlwaWNhbGx5IHBhcmFtZXRlcnMgdGhhdCBhcmUgY2hhbmdlZCBvZnRlbi4gVGhlIGZ1bmN0aW9uCisvLyEgXHJlZiB1RE1BQ2hhbm5lbENvbnRyb2xTZXQoKSBNVVNUIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGZvciB0aGlzIGNoYW5uZWwgcHJpb3IKKy8vISB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisvLyEKKy8vISBUaGUgXGMgcHZTcmNBZGRyIGFuZCBcYyBwdkRzdEFkZHIgcGFyYW1ldGVycyBhcmUgcG9pbnRlcnMgdG8gdGhlIGZpcnN0CisvLyEgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuIFRoZXNlIGFkZHJlc3NlcyBzaG91bGQgYmUgYWxpZ25lZAorLy8hIGFjY29yZGluZyB0byB0aGUgaXRlbSBzaXplLiBUaGUgY29tcGlsZXIgd2lsbCB0YWtlIGNhcmUgb2YgdGhpcyBpZiB0aGUKKy8vISBwb2ludGVycyBhcmUgcG9pbnRpbmcgdG8gc3RvcmFnZSBvZiB0aGUgYXBwcm9wcmlhdGUgZGF0YSB0eXBlLgorLy8hCisvLyEgVGhlIHR3byBzY2F0dGVyL2dhdGhlciBtb2RlcywgTUVNT1JZIGFuZCBQRVJJUEhFUkFMLCBhcmUgYWN0dWFsbHkgZGlmZmVyZW50CisvLyEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHByaW1hcnkgb3IgYWx0ZXJuYXRlIGNvbnRyb2wgc3RydWN0dXJlIGlzCisvLyEgc2VsZWN0ZWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBsb29rIGZvciB0aGUgXHJlZiBVRE1BX1BSSV9TRUxFQ1QgYW5kCisvLyEgXHJlZiBVRE1BX0FMVF9TRUxFQ1QgZmxhZyBhbG9uZyB3aXRoIHRoZSBjaGFubmVsIG51bWJlciBhbmQgd2lsbCBzZXQgdGhlCisvLyEgc2NhdHRlci9nYXRoZXIgbW9kZSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHByaW1hcnkgb3IgYWx0ZXJuYXRlIGNvbnRyb2wKKy8vISBzdHJ1Y3R1cmUuCisvLyEKKy8vISBUaGUgY2hhbm5lbCBtdXN0IGFsc28gYmUgZW5hYmxlZCB1c2luZyBccmVmIHVETUFDaGFubmVsRW5hYmxlKCkgYWZ0ZXIgY2FsbGluZworLy8hIHRoaXMgZnVuY3Rpb24uIFRoZSB0cmFuc2ZlciB3aWxsIG5vdCBiZWdpbiB1bnRpbCB0aGUgY2hhbm5lbCBoYXMgYmVlbiBzZXQKKy8vISB1cCBhbmQgZW5hYmxlZC4gTm90ZSB0aGF0IHRoZSBjaGFubmVsIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYWZ0ZXIgdGhlCisvLyEgdHJhbnNmZXIgaXMgY29tcGxldGVkLCBtZWFuaW5nIHRoYXQgXHJlZiB1RE1BQ2hhbm5lbEVuYWJsZSgpIG11c3QgYmUgY2FsbGVkCisvLyEgYWdhaW4gYWZ0ZXIgc2V0dGluZyB1cCB0aGUgbmV4dCB0cmFuc2Zlci4KKy8vIQorLy8hIFxub3RlIEdyZWF0IGNhcmUgbXVzdCBiZSB0YWtlbiB0byBub3QgbW9kaWZ5IGEgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZQorLy8hIHRoYXQgaXMgaW4gdXNlIG9yIGVsc2UgdGhlIHJlc3VsdHMgd2lsbCBiZSB1bnByZWRpY3RhYmxlLCBpbmNsdWRpbmcgdGhlCisvLyEgcG9zc2liaWxpdHkgb2YgdW5kZXNpcmVkIGRhdGEgdHJhbnNmZXJzIHRvIG9yIGZyb20gbWVtb3J5IG9yIHBlcmlwaGVyYWxzLgorLy8hIEZvciBCQVNJQyBhbmQgQVVUTyBtb2RlcywgaXQgaXMgc2FmZSB0byBtYWtlIGNoYW5nZXMgd2hlbiB0aGUgY2hhbm5lbCBpcworLy8hIGRpc2FibGVkLCBvciB0aGUgXHJlZiB1RE1BQ2hhbm5lbE1vZGVHZXQoKSByZXR1cm5zIFxyZWYgVURNQV9NT0RFX1NUT1AuIEZvcgorLy8hIFBJTkdQT05HIG9yIG9uZSBvZiB0aGUgU0NBVFRFUl9HQVRIRVIgbW9kZXMsIGl0IGlzIHNhZmUgdG8gbW9kaWZ5IHRoZQorLy8hIHByaW1hcnkgb3IgYWx0ZXJuYXRlIGNvbnRyb2wgc3RydWN0dXJlIG9ubHkgd2hlbiB0aGUgb3RoZXIgaXMgYmVpbmcgdXNlZC4KKy8vISBUaGUgXHJlZiB1RE1BQ2hhbm5lbE1vZGVHZXQoKSBmdW5jdGlvbiB3aWxsIHJldHVybiBccmVmIFVETUFfTU9ERV9TVE9QIHdoZW4gYQorLy8hIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUgaXMgaW5hY3RpdmUgYW5kIHNhZmUgdG8gbW9kaWZ5LgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCBpcyB0aGUgYml0d2lzZSBPUiBvZiB0aGUgdURNQSBjaGFubmVsIG51bWJlciBhbmQ6CisvLyEgLSBccmVmIFVETUFfUFJJX1NFTEVDVCA6IFVzZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlLgorLy8hIC0gXHJlZiBVRE1BX0FMVF9TRUxFQ1QgOiBVc2UgYWx0ZXJuYXRlIGRhdGEgc3RydWN0dXJlLgorLy8hIFxwYXJhbSB1aTMyTW9kZSBpcyB0aGUgdHlwZSBvZiB1RE1BIHRyYW5zZmVyLgorLy8hIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vISAtIFxyZWYgVURNQV9NT0RFX1NUT1AgICAgIDogU3RvcHMgdGhlIHVETUEgdHJhbnNmZXIuIFRoZSBjb250cm9sbGVyIHNldHMgdGhlIG1vZGUKKy8vISB0byB0aGlzIHZhbHVlIGF0IHRoZSBlbmQgb2YgYSB0cmFuc2Zlci4KKy8vISAtIFxyZWYgVURNQV9NT0RFX0JBU0lDICAgIDogUGVyZm9ybSBhIGJhc2ljIHRyYW5zZmVyIGJhc2VkIG9uIHJlcXVlc3QuCisvLyEgLSBccmVmIFVETUFfTU9ERV9BVVRPIHRvIHBlcmZvcm0gYSB0cmFuc2ZlciB0aGF0IHdpbGwgYWx3YXlzIGNvbXBsZXRlIG9uY2UKKy8vISBzdGFydGVkIGV2ZW4gaWYgcmVxdWVzdCBpcyByZW1vdmVkLgorLy8hIC0gXHJlZiBVRE1BX01PREVfUElOR1BPTkcgOiBTZXQgdXAgYSB0cmFuc2ZlciB0aGF0IHN3aXRjaGVzIGJldHdlZW4gdGhlCisvLyEgcHJpbWFyeSBhbmQgYWx0ZXJuYXRlIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgdGhlIGNoYW5uZWwuIFRoaXMgYWxsb3dzCisvLyEgdXNlIG9mIHBpbmctcG9uZyBidWZmZXJpbmcgZm9yIHVETUEgdHJhbnNmZXJzLgorLy8hIC0gXHJlZiBVRE1BX01PREVfTUVNX1NDQVRURVJfR0FUSEVSIDogU2V0IHVwIGEgbWVtb3J5IHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyLgorLy8hIC0gXHJlZiBVRE1BX01PREVfUEVSX1NDQVRURVJfR0FUSEVSIDogU2V0IHVwIGEgcGVyaXBoZXJhbCBzY2F0dGVyLWdhdGhlciB0cmFuc2Zlci4KKy8vISBccGFyYW0gcHZTcmNBZGRyIGlzIHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIHRyYW5zZmVyLgorLy8hIFxwYXJhbSBwdkRzdEFkZHIgaXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSB0cmFuc2Zlci4KKy8vISBccGFyYW0gdWkzMlRyYW5zZmVyU2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGRhdGEgaXRlbXMgdG8gdHJhbnNmZXIgKFxiIE5PVCBieXRlcykuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCB1RE1BQ2hhbm5lbFRyYW5zZmVyU2V0KHVpbnQzMl90IHVpMzJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyTW9kZSwgdm9pZCAqcHZTcmNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdkRzdEFkZHIsIHVpbnQzMl90IHVpMzJUcmFuc2ZlclNpemUpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDb25maWd1cmVzIGEgdURNQSBjaGFubmVsIGZvciBzY2F0dGVyLWdhdGhlciBtb2RlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIGNoYW5uZWwgZm9yIHNjYXR0ZXItZ2F0aGVyIG1vZGUuCisvLyEgVGhlIGNhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBzZXQgdXAgYSB0YXNrIGxpc3QsIGFuZCBwYXNzIGEgcG9pbnRlciB0bworLy8hIHRoZSBzdGFydCBvZiB0aGUgdGFzayBsaXN0IGFzIHRoZSBcYyBwdlRhc2tMaXN0IHBhcmFtZXRlci4KKy8vIQorLy8hIFRoZSBcYyB1aTMyVGFza0NvdW50IHBhcmFtZXRlciBpcyB0aGUgY291bnQgb2YgdGFza3MgaW4gdGhlIHRhc2sgbGlzdCwgbm90IHRoZQorLy8hIHNpemUgb2YgdGhlIHRhc2sgbGlzdC4KKy8vIQorLy8hIFRoZSBmbGFnIFxjIGJJc1BlcmlwaFNHIHNob3VsZCBiZSB1c2VkIHRvIGluZGljYXRlCisvLyEgaWYgdGhlIHNjYXR0ZXItZ2F0aGVyIHNob3VsZCBiZSBjb25maWd1cmVkIGZvciBhIHBlcmlwaGVyYWwgb3IgbWVtb3J5CisvLyEgc2NhdHRlci1nYXRoZXIgb3BlcmF0aW9uLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gaXMgdGhlIHVETUEgY2hhbm5lbCBudW1iZXIuCisvLyEgXHBhcmFtIHVpMzJUYXNrQ291bnQgaXMgdGhlIG51bWJlciBvZiBzY2F0dGVyLWdhdGhlciB0YXNrcyB0byBleGVjdXRlLgorLy8hIFxwYXJhbSBwdlRhc2tMaXN0IGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY2F0dGVyLWdhdGhlcgorLy8hIHRhc2sgbGlzdC4KKy8vISBccGFyYW0gdWkzMklzUGVyaXBoU0cgaXMgYSBmbGFnIHRvIGluZGljYXRlIGl0IGlzIGEgcGVyaXBoZXJhbAorLy8hIHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIChlbHNlIGl0IHdpbGwgYmUgbWVtb3J5IHNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyKQorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiB1RE1BVGFza1N0cnVjdEVudHJ5KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCB1RE1BQ2hhbm5lbFNjYXR0ZXJHYXRoZXJTZXQodWludDMyX3QgdWkzMkJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMlRhc2tDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdlRhc2tMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJJc1BlcmlwaFNHKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCB0cmFuc2ZlciBzaXplIGZvciBhIHVETUEgY2hhbm5lbCBjb250cm9sIHN0cnVjdHVyZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHVETUEgdHJhbnNmZXIgc2l6ZSBmb3IgYSBjaGFubmVsLiBUaGUKKy8vISB0cmFuc2ZlciBzaXplIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gdHJhbnNmZXIsIHdoZXJlIHRoZSBzaXplIG9mIGFuIGl0ZW0KKy8vISBtaWdodCBiZSA4LCAxNiwgb3IgMzIgYml0cy4gSWYgYSBwYXJ0aWFsIHRyYW5zZmVyIGhhcyBhbHJlYWR5IG9jY3VycmVkLAorLy8hIHRoZW4gdGhlIG51bWJlciBvZiByZW1haW5pbmcgaXRlbXMgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIHRyYW5zZmVyIGlzCisvLyEgY29tcGxldGUsIHRoZW4gMCB3aWxsIGJlIHJldHVybmVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCBpcyB0aGUgYml0d2lzZSBPUiBvZiB0aGUgdURNQSBjaGFubmVsIG51bWJlciBhbmQ6CisvLyEgLSBccmVmIFVETUFfUFJJX1NFTEVDVAorLy8hIC0gXHJlZiBVRE1BX0FMVF9TRUxFQ1QKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHJlbWFpbmluZyB0byB0cmFuc2Zlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgdURNQUNoYW5uZWxTaXplR2V0KHVpbnQzMl90IHVpMzJCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB1aTMyQ2hhbm5lbFN0cnVjdEluZGV4KTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgdHJhbnNmZXIgbW9kZSBmb3IgYSB1RE1BIGNoYW5uZWwgY29udHJvbCBzdHJ1Y3R1cmUuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSB0cmFuc2ZlciBtb2RlIGZvciB0aGUgdURNQSBjaGFubmVsLiBJdAorLy8hIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IHRoZSBzdGF0dXMgb2YgYSB0cmFuc2ZlciBvbiBhIGNoYW5uZWwuIFdoZW4gdGhlCisvLyEgdHJhbnNmZXIgaXMgY29tcGxldGUgdGhlIG1vZGUgd2lsbCBiZSBccmVmIFVETUFfTU9ERV9TVE9QLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxTdHJ1Y3RJbmRleCBpcyB0aGUgYml0d2lzZSBPUiBvZiB0aGUgdURNQSBjaGFubmVsIG51bWJlciBhbmQ6CisvLyEgLSBccmVmIFVETUFfUFJJX1NFTEVDVAorLy8hIC0gXHJlZiBVRE1BX0FMVF9TRUxFQ1QKKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyB0aGUgdHJhbnNmZXIgbW9kZSBvZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgYW5kIGNvbnRyb2wKKy8vISBzdHJ1Y3R1cmUsIHdoaWNoIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLy8hIC0gXHJlZiBVRE1BX01PREVfU1RPUAorLy8hIC0gXHJlZiBVRE1BX01PREVfQkFTSUMKKy8vISAtIFxyZWYgVURNQV9NT0RFX0FVVE8KKy8vISAtIFxyZWYgVURNQV9NT0RFX1BJTkdQT05HCisvLyEgLSBccmVmIFVETUFfTU9ERV9NRU1fU0NBVFRFUl9HQVRIRVIKKy8vISAtIFxyZWYgVURNQV9NT0RFX1BFUl9TQ0FUVEVSX0dBVEhFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCB1RE1BQ2hhbm5lbE1vZGVHZXQodWludDMyX3QgdWkzMkJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHVpMzJDaGFubmVsU3RydWN0SW5kZXgpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBSZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB1RE1BIGNvbnRyb2xsZXIuCisvLyEKKy8vISBUaGlzIHNldHMgYW5kIGVuYWJsZXMgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHVETUEgY29udHJvbGxlcgorLy8hIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQuCisvLyEKKy8vISBcbm90ZSBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHVETUEgaXMgZm9yIHRyYW5zZmVyIGNvbXBsZXRpb24gd2hlbiB0aGUKKy8vISBzb2Z0d2FyZSBjaGFubmVsIGlzIHVzZWQsIGFuZCBmb3IgZXJyb3IgaW50ZXJydXB0cy4gVGhlCisvLyEgaW50ZXJydXB0cyBmb3IgZWFjaCBwZXJpcGhlcmFsIGNoYW5uZWwgYXJlIGhhbmRsZWQgdGhyb3VnaCB0aGUgaW5kaXZpZHVhbAorLy8hIHBlcmlwaGVyYWwgaW50ZXJydXB0IGhhbmRsZXJzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkludENoYW5uZWwgaWRlbnRpZmllcyB3aGljaCB1RE1BIGludGVycnVwdCBpcyB0byBiZSByZWdpc3RlcmVkLgorLy8hIC0gXGIgSU5UX0RNQV9ET05FX0NPTUIgOiBSZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlciB0byBwcm9jZXNzIGludGVycnVwdHMKKy8vISAgIGZyb20gdGhlIHVETUEgc29mdHdhcmUgY2hhbm5lbC4KKy8vISAtIFxiIElOVF9ETUFfRVJSIDogUmVnaXN0ZXIgYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gcHJvY2VzcyB1RE1BIGVycm9yCisvLyEgICBpbnRlcnJ1cHRzLgorLy8hIFxwYXJhbSBwZm5IYW5kbGVyIGlzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisvLyEgaW50ZXJydXB0IGlzIGFjdGl2YXRlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCit1RE1BSW50UmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRDaGFubmVsLAorICAgICAgICAgICAgICAgIHZvaWQgKCpwZm5IYW5kbGVyKSh2b2lkKSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgICh2b2lkKXVpMzJCYXNlOworICAgIEFTU0VSVChwZm5IYW5kbGVyKTsKKyAgICBBU1NFUlQoKHVpMzJJbnRDaGFubmVsID09IElOVF9ETUFfRE9ORV9DT01CKSB8fCAodWkzMkludENoYW5uZWwgPT0gSU5UX0RNQV9FUlIpKTsKKworICAgIC8vCisgICAgLy8gUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLgorICAgIC8vCisgICAgSW50UmVnaXN0ZXIodWkzMkludENoYW5uZWwsIHBmbkhhbmRsZXIpOworCisgICAgLy8KKyAgICAvLyBFbmFibGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGZhdWx0LgorICAgIC8vCisgICAgSW50RW5hYmxlKHVpMzJJbnRDaGFubmVsKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB1RE1BIGNvbnRyb2xsZXIuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzYWJsZSBhbmQgY2xlYXIgdGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIGZvciB0aGUKKy8vISBzcGVjaWZpZWQgdURNQSBpbnRlcnJ1cHQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50Q2hhbm5lbCBpZGVudGlmaWVzIHdoaWNoIHVETUEgaW50ZXJydXB0IHRvIHVucmVnaXN0ZXIuCisvLyEgLSBcYiBJTlRfRE1BX0RPTkVfQ09NQiA6IFJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyIHRvIHByb2Nlc3MgaW50ZXJydXB0cworLy8hICAgZnJvbSB0aGUgdURNQSBzb2Z0d2FyZSBjaGFubmVsLgorLy8hIC0gXGIgSU5UX0RNQV9FUlIgOiBSZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlciB0byBwcm9jZXNzIHVETUEgZXJyb3IKKy8vISAgIGludGVycnVwdHMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUludFVucmVnaXN0ZXIodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJJbnRDaGFubmVsKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgKHZvaWQpdWkzMkJhc2U7CisgICAgQVNTRVJUKCh1aTMySW50Q2hhbm5lbCA9PSBJTlRfRE1BX0RPTkVfQ09NQikgfHwgKHVpMzJJbnRDaGFubmVsID09IElOVF9ETUFfRVJSKSk7CisKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUodWkzMkludENoYW5uZWwpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFVucmVnaXN0ZXIodWkzMkludENoYW5uZWwpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDbGVhcnMgdURNQSBpbnRlcnJ1cHQgZG9uZSBzdGF0dXMuCisvLyEKKy8vISBDbGVhcnMgYml0cyBpbiB0aGUgdURNQSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFjY29yZGluZyB0byB3aGljaCBiaXRzCisvLyEgYXJlIHNldCBpbiBcYyB1aTMyQ2hhbk1hc2suIFRoZXJlIGlzIG9uZSBiaXQgZm9yIGVhY2ggY2hhbm5lbC4gSWYgYSBhIGJpdAorLy8hIGlzIHNldCBpbiBcYyB1aTMyQ2hhbk1hc2ssIHRoZW4gdGhhdCBjb3JyZXNwb25kaW5nIGNoYW5uZWwncyBpbnRlcnJ1cHQKKy8vISBzdGF0dXMgd2lsbCBiZSBjbGVhcmVkIChpZiBpdCB3YXMgc2V0KS4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJDaGFuTWFzayBpcyBhIDMyLWJpdCBtYXNrIHdpdGggb25lIGJpdCBmb3IgZWFjaCB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUludENsZWFyKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbk1hc2spCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIHJlcXVlc3RlZCBiaXRzIGluIHRoZSB1RE1BIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyh1aTMyQmFzZSArIFVETUFfT19SRVFET05FKSA9IHVpMzJDaGFuTWFzazsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSB1RE1BIGludGVycnVwdCBzdGF0dXMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMgZm9yIHRoZSBzcGVjaWZpZWQgVURNQS4gVGhpcworLy8hIGZ1bmN0aW9uIGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzb2Z0d2FyZSBvciBoYXJkd2FyZSBhY3RpdmF0ZWQKKy8vISBpbnRlcnJ1cHRzLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAordURNQUludFN0YXR1cyh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworCisgICAgLy8KKyAgICAvLyBSZXR1cm4gdGhlIHVETUEgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKyAgICAvLworICAgIHJldHVybiAoSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fUkVRRE9ORSkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGUgaW50ZXJydXB0IG9uIHNvZnR3YXJlIGV2ZW50IGRyaXZlbiB1RE1BIHRyYW5zZmVycy4KKy8vIQorLy8hIFxub3RlIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBwcmV2ZW50IHByb3BhZ2F0aW9uIG9mIHVETUEKKy8vISBzdGF0dXMgc2lnbmFscyB0byBhIHBlcmlwaGVyYWwsIGlmIGEgcGVyaXBoZXJhbCBhbmQgYSBzb2Z0d2FyZSBldmVudCBpcworLy8hIHNoYXJpbmcgdGhlIHVETUEgY2hhbm5lbC4gSWYgaXQgaXMgZGVzaXJlZCB0byBpbml0aWF0ZSBhIHRyYW5zZmVyIGJ5CisvLyEgd3JpdGluZyB0byBhIHJlZ2lzdGVyIGluc2lkZSB0aGUgdURNQSAodGhpcyBtZWFucyBhIHNvZnR3YXJlIGRyaXZlbgorLy8hIGNoYW5uZWwpLCB0aGVuIHRoZSB1RE1BIHN0YXR1cyBzaWduYWxzIHByb3BhZ2F0aW9uIG5lZWQgdG8gYmUgYmxvY2tlZCB0bworLy8hIHRoZSBoYXJkd2FyZSBwZXJpcGhlcmFscy4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB1RE1BIHBvcnQuCisvLyEgXHBhcmFtIHVpMzJJbnRDaGFubmVsIGlkZW50aWZpZXMgd2hpY2ggdURNQSBpbnRlcnJ1cHQgdG8gZW5hYmxlIHNvZnR3YXJlCisvLyEgICAgICAgIGludGVycnVwdHMgZm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFJbnRTd0V2ZW50RW5hYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50Q2hhbm5lbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMySW50Q2hhbm5lbCA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gRW5hYmxlIHRoZSBjaGFubmVsLgorICAgIC8vCisgICAgSFdSRUdCSVRXKHVpMzJCYXNlICsgVURNQV9PX0RPTkVNQVNLLCB1aTMySW50Q2hhbm5lbCkgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIGludGVycnVwdCBvbiBzb2Z0d2FyZSBldmVudCBkcml2ZW4gdURNQSB0cmFuc2ZlcnMuCisvLyEKKy8vISBUaGlzIHJlZ2lzdGVyIGRpc2FibGVzIHRoZSBibG9ja2luZyBvZiB0aGUgdURNQSBzdGF0dXMgc2lnbmFscyBwcm9wYWdhdGlvbgorLy8hIHRvIHRoZSBoYXJkd2FyZSBwZXJpcGhlcmFsIGNvbm5lY3RlZCB0byB0aGUgdURNQSBvbiB0aGUgXGMgdWkzMkludENoYW5uZWwuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hIFxwYXJhbSB1aTMySW50Q2hhbm5lbCBpZGVudGlmaWVzIHdoaWNoIHVETUEgaW50ZXJydXB0IHRvIGRpc2FibGUgc29mdHdhcmUKKy8vISAgICAgICAgaW50ZXJydXB0cyBmb3IuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIHVETUFJbnRTd0V2ZW50RW5hYmxlKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAordURNQUludFN3RXZlbnREaXNhYmxlKHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMySW50Q2hhbm5lbCkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMySW50Q2hhbm5lbCA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gRGlzYWJsZSB0aGUgU1cgY2hhbm5lbC4KKyAgICAvLworICAgIEhXUkVHQklUVyh1aTMyQmFzZSArIFVETUFfT19ET05FTUFTSywgdWkzMkludENoYW5uZWwpID0gMDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIHVETUEgbW9kdWxlLgorLy8hCisvLyEgXG5vdGUgVGhpcyBzdGF0dXMgcmVnaXN0ZXIgY2Fubm90IGJlIHJlYWQgd2hlbiB0aGUgY29udHJvbGxlciBpcyBpbiB0aGUgcmVzZXQgc3RhdGUuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdURNQSBwb3J0LgorLy8hCisvLyEgXHJldHVybiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgdURNQSBtb2R1bGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90Cit1RE1BR2V0U3RhdHVzKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICAvLworICAgIC8vIFJlYWQgYW5kIHJldHVybiB0aGUgc3RhdHVzIHJlZ2lzdGVyLgorICAgIC8vCisgICAgcmV0dXJuIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NUQVRVUyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgcHJpb3JpdHkgb2YgYSB1RE1BIGNoYW5uZWwuCisvLyEKKy8vISBcbm90ZSBXcml0aW5nIDAgdG8gYSBiaXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgcHJpb3JpdHkuIFRvIHJlc2V0IGEgY2hhbm5lbAorLy8hIHByaW9yaXR5IHRvIHRoZSBkZWZhdWx0IHZhbHVlIHVzZSBccmVmIHVETUFDaGFubmVsUHJpb3JpdHlDbGVhcigpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gaXMgdURNQSBjaGFubmVsIHRvIHNldCB0aGUgcHJpb3JpdHkgZm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFDaGFubmVsUHJpb3JpdHlTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJDaGFubmVsTnVtKQoreworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVCh1RE1BQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisgICAgQVNTRVJUKHVpMzJDaGFubmVsTnVtIDwgVURNQV9OVU1fQ0hBTk5FTFMpOworCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGNoYW5uZWwgcHJpb3JpdHkgdG8gaGlnaC4KKyAgICAvLworICAgIEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVENITkxQUklPUklUWSkgPSAxIDw8IHVpMzJDaGFubmVsTnVtOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXQgdGhlIHByaW9yaXR5IG9mIGEgdURNQSBjaGFubmVsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gVGhlIHVETUEgY2hhbm5lbCB0byBnZXQgdGhlIHByaW9yaXR5IGZvci4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBvbmUgb2Y6CisvLyEgLSBccmVmIFVETUFfUFJJT1JJVFlfSElHSAorLy8hIC0gXHJlZiBVRE1BX1BSSU9SSVRZX0xPVworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSBib29sCit1RE1BQ2hhbm5lbFByaW9yaXR5R2V0KHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyQ2hhbm5lbE51bSkKK3sKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQodURNQUJhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCh1aTMyQ2hhbm5lbE51bSA8IFVETUFfTlVNX0NIQU5ORUxTKTsKKworICAgIC8vCisgICAgLy8gUmV0dXJuIHRoZSBjaGFubmVsIHByaW9yaXR5LgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKHVpMzJCYXNlICsgVURNQV9PX1NFVENITkxQUklPUklUWSkgJiAoMSA8PCB1aTMyQ2hhbm5lbE51bSkgPworICAgICAgICAgICBVRE1BX1BSSU9SSVRZX0hJR0ggOiBVRE1BX1BSSU9SSVRZX0xPVyk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFyIHRoZSBwcmlvcml0eSBvZiBhIHVETUEgY2hhbm5lbC4KKy8vIQorLy8hIFxub3RlIFdyaXRpbmcgMCB0byBhIGJpdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwcmlvcml0eS4gVG8gc2V0IGEgY2hhbm5lbAorLy8hIHByaW9yaXR5IHRvIGhpZ2ggdXNlIFxyZWYgdURNQUNoYW5uZWxQcmlvcml0eVNldCgpLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHVETUEgcG9ydC4KKy8vISBccGFyYW0gdWkzMkNoYW5uZWxOdW0gVGhlIHVETUEgY2hhbm5lbCB0byBjbGVhciB0aGUgcHJpb3JpdHkgZm9yLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK3VETUFDaGFubmVsUHJpb3JpdHlDbGVhcih1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMkNoYW5uZWxOdW0pCit7CisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKHVETUFCYXNlVmFsaWQodWkzMkJhc2UpKTsKKyAgICBBU1NFUlQodWkzMkNoYW5uZWxOdW0gPCBVRE1BX05VTV9DSEFOTkVMUyk7CisKKyAgICAvLworICAgIC8vIENsZWFyIHRoZSBjaGFubmVsIHByaW9yaXR5LgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBVRE1BX09fQ0xFQVJDSE5MUFJJT1JJVFkpID0gMSA8PCB1aTMyQ2hhbm5lbE51bTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBSZWRpcmVjdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBST00gd2hlbiBhdmFpbGFibGUuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICFkZWZpbmVkKERSSVZFUkxJQl9OT1JPTSkgJiYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjaW5jbHVkZSA8ZHJpdmVybGliL3JvbS5oPgorICAgICNpZmRlZiBST01fdURNQUNoYW5uZWxBdHRyaWJ1dGVFbmFibGUKKyAgICAgICAgI3VuZGVmICB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUVuYWJsZQorICAgICAgICAjZGVmaW5lIHVETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlICAgICAgUk9NX3VETUFDaGFubmVsQXR0cmlidXRlRW5hYmxlCisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUKKyAgICAgICAgI3VuZGVmICB1RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUKKyAgICAgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUgICAgIFJPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZURpc2FibGUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX3VETUFDaGFubmVsQXR0cmlidXRlR2V0CisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxBdHRyaWJ1dGVHZXQKKyAgICAgICAgI2RlZmluZSB1RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldCAgICAgICAgIFJPTV91RE1BQ2hhbm5lbEF0dHJpYnV0ZUdldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fdURNQUNoYW5uZWxDb250cm9sU2V0CisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxDb250cm9sU2V0CisgICAgICAgICNkZWZpbmUgdURNQUNoYW5uZWxDb250cm9sU2V0ICAgICAgICAgICBST01fdURNQUNoYW5uZWxDb250cm9sU2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV91RE1BQ2hhbm5lbFRyYW5zZmVyU2V0CisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxUcmFuc2ZlclNldAorICAgICAgICAjZGVmaW5lIHVETUFDaGFubmVsVHJhbnNmZXJTZXQgICAgICAgICAgUk9NX3VETUFDaGFubmVsVHJhbnNmZXJTZXQKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX3VETUFDaGFubmVsU2NhdHRlckdhdGhlclNldAorICAgICAgICAjdW5kZWYgIHVETUFDaGFubmVsU2NhdHRlckdhdGhlclNldAorICAgICAgICAjZGVmaW5lIHVETUFDaGFubmVsU2NhdHRlckdhdGhlclNldCAgICAgUk9NX3VETUFDaGFubmVsU2NhdHRlckdhdGhlclNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fdURNQUNoYW5uZWxTaXplR2V0CisgICAgICAgICN1bmRlZiAgdURNQUNoYW5uZWxTaXplR2V0CisgICAgICAgICNkZWZpbmUgdURNQUNoYW5uZWxTaXplR2V0ICAgICAgICAgICAgICBST01fdURNQUNoYW5uZWxTaXplR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV91RE1BQ2hhbm5lbE1vZGVHZXQKKyAgICAgICAgI3VuZGVmICB1RE1BQ2hhbm5lbE1vZGVHZXQKKyAgICAgICAgI2RlZmluZSB1RE1BQ2hhbm5lbE1vZGVHZXQgICAgICAgICAgICAgIFJPTV91RE1BQ2hhbm5lbE1vZGVHZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfX1VETUFfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ZpbXMuYyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ZpbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTI3NzUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvdmltcy5jCkBAIC0wLDAgKzEsMjEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgdmltcy5jCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wOS0yMSAxNTo0NjoxMSArMDIwMCAoTW9uLCAyMSBTZXAgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NDYzMAorKgorKiAgRGVzY3JpcHRpb246ICAgIERyaXZlciBmb3IgdGhlIFZJTVMuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8ZHJpdmVybGliL3ZpbXMuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEhhbmRsZSBzdXBwb3J0IGZvciBEcml2ZXJMaWIgaW4gUk9NOgorLy8gVGhpcyBzZWN0aW9uIHdpbGwgdW5kbyBwcm90b3R5cGUgcmVuYW1pbmcgbWFkZSBpbiB0aGUgaGVhZGVyIGZpbGUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRE9YWUdFTikKKyAgICAjdW5kZWYgIFZJTVNDb25maWd1cmUKKyAgICAjZGVmaW5lIFZJTVNDb25maWd1cmUgICAgICAgICAgICAgICAgICAgTk9ST01fVklNU0NvbmZpZ3VyZQorICAgICN1bmRlZiAgVklNU01vZGVTZXQKKyAgICAjZGVmaW5lIFZJTVNNb2RlU2V0ICAgICAgICAgICAgICAgICAgICAgTk9ST01fVklNU01vZGVTZXQKKyAgICAjdW5kZWYgIFZJTVNNb2RlR2V0CisgICAgI2RlZmluZSBWSU1TTW9kZUdldCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNNb2RlR2V0CisgICAgI3VuZGVmICBWSU1TTW9kZVNhZmVTZXQKKyAgICAjZGVmaW5lIFZJTVNNb2RlU2FmZVNldCAgICAgICAgICAgICAgICAgTk9ST01fVklNU01vZGVTYWZlU2V0CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmZpZ3VyZXMgdGhlIFZJTVMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZAorVklNU0NvbmZpZ3VyZSh1aW50MzJfdCB1aTMyQmFzZSwgYm9vbCBiUm91bmRSb2JpbiwgYm9vbCBiUHJlZmV0Y2gpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChWSU1TQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICB1aTMyUmVnID0gSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fQ1RMKTsKKyAgICB1aTMyUmVnICY9IH4oVklNU19DVExfUFJFRl9FTiB8IFZJTVNfQ1RMX0FSQl9DRkcpOworICAgIGlmKGJSb3VuZFJvYmluKQorICAgIHsKKyAgICAgICAgdWkzMlJlZyB8PSBWSU1TX0NUTF9BUkJfQ0ZHOworICAgIH0KKyAgICBpZihiUHJlZmV0Y2gpCisgICAgeworICAgICAgICB1aTMyUmVnIHw9IFZJTVNfQ1RMX1BSRUZfRU47CisgICAgfQorCisgICAgLy8KKyAgICAvLyBTZXQgdGhlIEFyYml0cmF0aW9uIGFuZCBwcmVmZXRjaCBtb2RlLgorICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fQ1RMKSA9IHVpMzJSZWc7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXQgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgdGhlIFZJTVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitWSU1TTW9kZVNldCh1aW50MzJfdCB1aTMyQmFzZSwgdWludDMyX3QgdWkzMk1vZGUpCit7CisgICAgdWludDMyX3QgdWkzMlJlZzsKKworICAgIC8vCisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICAvLworICAgIEFTU0VSVChWSU1TQmFzZVZhbGlkKHVpMzJCYXNlKSk7CisKKyAgICBBU1NFUlQoKHVpMzJNb2RlID09IFZJTVNfTU9ERV9ESVNBQkxFRCkgICB8fAorICAgICAgICAgICAodWkzMk1vZGUgPT0gVklNU19NT0RFX0VOQUJMRUQpICAgIHx8CisgICAgICAgICAgICh1aTMyTW9kZSA9PSBWSU1TX01PREVfT0ZGKSk7CisKKyAgICAvLworICAgIC8vIFNldCB0aGUgbW9kZS4KKyAgICAvLworICAgIHVpMzJSZWcgPSBIV1JFRyh1aTMyQmFzZSArIFZJTVNfT19DVEwpOworICAgIHVpMzJSZWcgJj0gflZJTVNfQ1RMX01PREVfTTsKKyAgICB1aTMyUmVnIHw9ICh1aTMyTW9kZSAmIFZJTVNfQ1RMX01PREVfTSk7CisKKyAgICBIV1JFRyh1aTMyQmFzZSArIFZJTVNfT19DVEwpID0gdWkzMlJlZzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIEdldCB0aGUgY3VycmVudCBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3VpbnQzMl90CitWSU1TTW9kZUdldCh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICB1aW50MzJfdCB1aTMyUmVnOworCisgICAgLy8KKyAgICAvLyBDaGVjayB0aGUgYXJndW1lbnRzLgorICAgIC8vCisgICAgQVNTRVJUKFZJTVNCYXNlVmFsaWQodWkzMkJhc2UpKTsKKworICAgIHVpMzJSZWcgPSBIV1JFRyh1aTMyQmFzZSArIFZJTVNfT19TVEFUKTsKKyAgICBpZih1aTMyUmVnICYgVklNU19TVEFUX01PREVfQ0hBTkdJTkcpCisgICAgeworICAgICAgICByZXR1cm4gKFZJTVNfTU9ERV9DSEFOR0lORyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAodWkzMlJlZyAmIFZJTVNfU1RBVF9NT0RFX00pOworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFNhZmUgc2V0dGluZyBvZiBuZXcgVklNUyBtb2RlCisvLyAtIEZ1bmN0aW9uIG1pZ2h0IGJlIGJsb2NraW5nCisvLyAtIENhbiBiZSBjYWxsZWQgZm9yIGFueSBtb2RlIGNoYW5nZSAoYWxzbyBpZiBhY3R1YWxseSBub3QgY2hhbmdpbmcgbW9kZSkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitWSU1TTW9kZVNhZmVTZXQoIHVpbnQzMl90IHVpMzJCYXNlLCB1aW50MzJfdCB1aTMyTmV3TW9kZSwgYm9vbCBibG9ja2luZyApCit7CisgICAgdWludDMyX3QgY3VycmVudE1vZGU7CisKKyAgICAvLworICAgIC8vIENoZWNrIHRoZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBBU1NFUlQoVklNU0Jhc2VWYWxpZCh1aTMyQmFzZSkpOworICAgIEFTU0VSVCgodWkzMk5ld01vZGUgPT0gVklNU19NT0RFX0RJU0FCTEVEKSAgIHx8CisgICAgICAgICAgICh1aTMyTmV3TW9kZSA9PSBWSU1TX01PREVfRU5BQkxFRCkgICAgfHwKKyAgICAgICAgICAgKHVpMzJOZXdNb2RlID09IFZJTVNfTU9ERV9PRkYpKTsKKworICAgIC8vCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgb25seSB0aGUgbW9kZSBiaXRzIGFyZSBzZXQgaW4gdGhlIGlucHV0IHBhcmFtZXRlcgorICAgIC8vIChkb25lIGp1c3QgZm9yIHNlY3VyaXR5IHNpbmNlIGl0IGlzIGNyaXRpY2FsIHRvIHRoZSBjb2RlIGZsb3cpCisgICAgLy8KKyAgICB1aTMyTmV3TW9kZSAmPSBWSU1TX0NUTF9NT0RFX007CisKKyAgICAvLworICAgIC8vIFdhaXQgZm9yIGFueSBwZW5kaW5nIGNoYW5nZSB0byBjb21wbGV0ZSBhbmQgZ2V0IGN1cnJlbnQgVklNUyBtb2RlCisgICAgLy8gKFRoaXMgaXMgYSBibG9ja2luZyBwb2ludCBidXQgd2lsbCB0eXBpY2FsbHkgb25seSBiZSBhIGJsb2NraW5nIHBvaW50CisgICAgLy8gb25seSBpZiBtb2RlIGlzIGNoYW5nZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBibG9ja2luZz0wKQorICAgIC8vCisgICAgZG8geworICAgICAgICBjdXJyZW50TW9kZSA9IFZJTVNNb2RlR2V0KCB1aTMyQmFzZSApOworICAgIH0gd2hpbGUgKCBjdXJyZW50TW9kZSA9PSBWSU1TX01PREVfQ0hBTkdJTkcgKTsKKworICAgIC8vCisgICAgLy8gRmlyc3QgY2hlY2sgdGhhdCBpdCBhY3R1YWxseSBpcyBhIG1vZGUgY2hhbmdlIHJlcXVlc3QKKyAgICAvLworICAgIGlmICggdWkzMk5ld01vZGUgIT0gY3VycmVudE1vZGUgKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIER1ZSB0byBhIGh3LXByb2JsZW0gaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZ28gdmlhIFZJTVNfTU9ERV9PRkYKKyAgICAgICAgLy8gd2hlbiBsZWF2aW5nIFZJTVNfTU9ERV9FTkFCTEVEICg9VklNU19DVExfTU9ERV9DQUNIRSkKKyAgICAgICAgLy8gKEFuZCBubyBuZWVkIHRvIGdvIHZpYSBPRkYsIGlmIE9GRiBpcyB0aGUgZmluYWwgc3RhdGUgYW5kIHdpbGwgYmUgc2V0IGxhdGVyKQorICAgICAgICAvLworICAgICAgICBpZiAoKCBjdXJyZW50TW9kZSA9PSBWSU1TX0NUTF9NT0RFX0NBQ0hFICkgJiYKKyAgICAgICAgICAgICggdWkzMk5ld01vZGUgIT0gVklNU19DVExfTU9ERV9PRkYgICApICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgVklNU01vZGVTZXQoIHVpMzJCYXNlLCBWSU1TX01PREVfT0ZGICk7CisKKyAgICAgICAgICAgIHdoaWxlICggSFdSRUdCSVRXKCBWSU1TX0JBU0UgKyBWSU1TX09fU1RBVCwgVklNU19TVEFUX01PREVfQ0hBTkdJTkdfQklUTiApKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyAtIHdhaXQgZm9yIGNoYW5nZSB0byBjb21wbGV0ZS4KKyAgICAgICAgICAgICAgICAvLyAoTmVlZGVkIGJsb2NraW5nIHBvaW50IGJ1dCBpdCB0YWtlcyBvbmx5IHNvbWUgZmV3IGN5Y2xlcykKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyBTZXQgbmV3IG1vZGUKKyAgICAgICAgLy8KKyAgICAgICAgVklNU01vZGVTZXQoIHVpMzJCYXNlLCB1aTMyTmV3TW9kZSApOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFdhaXQgZm9yIGZpbmFsIG1vZGUgY2hhbmdlIHRvIGNvbXBsZXRlIC0gaWYgYmxvY2tpbmcgaXMgcmVxdWVzdGVkCisgICAgICAgIC8vCisgICAgICAgIGlmICggYmxvY2tpbmcgKSB7CisgICAgICAgICAgICB3aGlsZSAoIEhXUkVHQklUVyggVklNU19CQVNFICsgVklNU19PX1NUQVQsIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HX0JJVE4gKSkgeworICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgLSB3YWl0IGZvciBjaGFuZ2UgdG8gY29tcGxldGUuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi92aW1zLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi92aW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4ZjcwYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3ZpbXMuaApAQCAtMCwwICsxLDM3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHZpbXMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDktMDEgMTA6NDA6MzIgKzAyMDAgKFR1ZSwgMDEgU2VwIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDQ0ODgKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGFuZCBwcm90b3R5cGVzIGZvciB0aGUgVklNUy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgc3lzdGVtX2NvbnRyb2xfZ3JvdXAKKy8vISBAeworLy8hIFxhZGR0b2dyb3VwIHZpbXNfYXBpCisvLyEgQHsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyNpZm5kZWYgX19WSU1TX0hfXworI2RlZmluZSBfX1ZJTVNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbmMvaHdfbWVtbWFwLmg+CisjaW5jbHVkZSA8aW5jL2h3X3ZpbXMuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFN1cHBvcnQgZm9yIERyaXZlckxpYiBpbiBST006CisvLyBUaGlzIHNlY3Rpb24gcmVuYW1lcyBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCAic3RhdGljIGlubGluZSIsIHNvIHRoYXQKKy8vIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmYXVsdCB0byBpbXBsZW1lbnRhdGlvbiBpbiBmbGFzaC4gQXQgdGhlIGVuZAorLy8gb2YgdGhpcyBmaWxlIGEgc2Vjb25kIHJlbmFtaW5nIHdpbGwgY2hhbmdlIHRoZSBkZWZhdWx0cyB0byBpbXBsZW1lbnRhdGlvbiBpbgorLy8gUk9NIGZvciBhdmFpbGFibGUgZnVuY3Rpb25zLgorLy8KKy8vIFRvIGZvcmNlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW4gZmxhc2gsIGUuZy4gZm9yIGRlYnVnZ2luZzoKKy8vIC0gR2xvYmFsbHk6IERlZmluZSBEUklWRVJMSUJfTk9ST00gYXQgcHJvamVjdCBsZXZlbAorLy8gLSBQZXIgZnVuY3Rpb246IFVzZSBwcmVmaXggIk5PUk9NXyIgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiAhZGVmaW5lZChET1hZR0VOKQorICAgICNkZWZpbmUgVklNU0NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICBOT1JPTV9WSU1TQ29uZmlndXJlCisgICAgI2RlZmluZSBWSU1TTW9kZVNldCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNNb2RlU2V0CisgICAgI2RlZmluZSBWSU1TTW9kZUdldCAgICAgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNNb2RlR2V0CisgICAgI2RlZmluZSBWSU1TTW9kZVNhZmVTZXQgICAgICAgICAgICAgICAgIE5PUk9NX1ZJTVNNb2RlU2FmZVNldAorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBWYWx1ZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIFZJTVNNb2RlU2V0KCkgYXMgdGhlIHVpMzJJbnRGbGFncyBwYXJhbWV0ZXIsCisvLyBhbmQgcmV0dXJuZWQgZnJvbSBWSU1TTW9kZUdldCgpLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgVklNU19NT0RFX0NIQU5HSU5HIDB4NCAgICAgICAgICAgICAgICAgICAvLyBWSU1TIG1vZGUgaXMgY2hhbmdpbmcgbm93IGFuZCBWSU1TX01PREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gbm90IGJlIGNoYW5nZWQgYXQgbW9tZW50LgorI2RlZmluZSBWSU1TX01PREVfRElTQUJMRUQgKFZJTVNfQ1RMX01PREVfR1BSQU0pIC8vIERpc2FibGVkIG1vZGUgKEdQUkFNIGVuYWJsZWQpLgorI2RlZmluZSBWSU1TX01PREVfRU5BQkxFRCAgKFZJTVNfQ1RMX01PREVfQ0FDSEUpIC8vIEVuYWJsZWQgbW9kZSwgb25seSBVU0VSQ09ERSBpcyBjYWNoZWQuCisjZGVmaW5lIFZJTVNfTU9ERV9PRkYgICAgICAoVklNU19DVExfTU9ERV9PRkYpICAgLy8gVklNUyBDYWNoZSBSQU0gaXMgb2ZmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZkZWYgRFJJVkVSTElCX0RFQlVHCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBDaGVja3MgYSBWSU1TIGJhc2UgYWRkcmVzcy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiB0aGUgVklNUyBiYXNlIGFkZHJlc3MgaXMgdmFsaWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklNUy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBcYyB0cnVlIGlmIHRoZSBiYXNlIGFkZHJlc3MgaXMgdmFsaWQgYW5kIFxjIGZhbHNlCisvLyEgb3RoZXJ3aXNlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyBib29sCitWSU1TQmFzZVZhbGlkKHVpbnQzMl90IHVpMzJCYXNlKQoreworICAgIHJldHVybih1aTMyQmFzZSA9PSBWSU1TX0JBU0UpOworfQorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENvbmZpZ3VyZXMgdGhlIFZJTVMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgZ2VuZXJhbCBjb250cm9sIHNldHRpbmdzIG9mIHRoZSBWSU1TIHN5c3RlbS4KKy8vIQorLy8hIFxub3RlIFRoZSBWSU1TIG1vZGUgbXVzdCBiZSBzZXQgdXNpbmcgdGhlIFxyZWYgVklNU01vZGVTZXQoKSBjYWxsLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJTVMuCisvLyEgXHBhcmFtIGJSb3VuZFJvYmluIHNwZWNpZmllcyB0aGUgYXJiaXRyYXRpb24gbWV0aG9kLgorLy8hIC0gXGMgdHJ1ZSAgOiBSb3VuZCBSb2JpbiBhcmJpdHJhdGlvbiBiZXR3ZWVuIHRoZSB0d28gYXZhaWxhYmxlIHJlYWQvd3JpdGUgaW50ZXJmYWNlcworLy8hIChpLmUuIEljb2RlL0Rjb2RlIGFuZCBTeXNidXMpIGlzIHRvIGJlIHVzZWQuCisvLyEgLSBcYyBmYWxzZSA6IFN0cmljdCBhcmJpdHJhdGlvbiB3aWxsIGJlIHVzZWQsIHdoZXJlIEljb2RlL0Rjb2RlCisvLyEgaXMgcHJlZmVycmVkIG92ZXIgdGhlIFN5c2J1cy4KKy8vISBccGFyYW0gYlByZWZldGNoIHNwZWNpZmllcyBpZiBwcmVmZXRjaGluZyBpcyB0byBiZSB1c2VkLgorLy8hIC0gXGMgdHJ1ZSAgOiBDYWNoZSBpcyB0byBwcmVmZXRjaCB0YWcgZGF0YSBmb3IgdGhlIGZvbGxvd2luZyBhZGRyZXNzLgorLy8hIC0gXGMgZmFsc2UgOiBObyBwcmVmZXRjaC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgVklNU01vZGVTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFZJTVNDb25maWd1cmUodWludDMyX3QgdWkzMkJhc2UsIGJvb2wgYlJvdW5kUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYlByZWZldGNoKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0IHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBvcGVyYXRpb25hbCBtb2RlIG9mIHRoZSBWSU1TLgorLy8hCisvLyEgVXBvbiByZXNldCB0aGUgVklNUyB3aWxsIGJlIGluIFxyZWYgVklNU19NT0RFX0NIQU5HSU5HIG1vZGUuCisvLyEgICBJbiB0aGlzIG1vZGUgdGhlIFZJTVMgd2lsbCBpbml0aWFsaXplIHRoZSBjYWNoZSAoR1ApIFJBTSAodG8gYWxsIHplcm9zKS4KKy8vISAgIFRoZSBHUCBSQU0gd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwgKHJlYWQvd3JpdGUgd2lsbCByZXN1bHQgaW4gYnVzIGZhdWx0KS4KKy8vISAgIFRoZSBDYWNoZSB3aWxsIG5vdCBiZSBvcGVyYXRpb25hbC4KKy8vISAgIFJlYWRzIGFuZCB3cml0ZXMgdG8gZmxhc2ggd2lsbCBiZSB1bmNhY2hlZC4KKy8vISAgIEFmdGVyIGEgc2hvcnQgZGVsYXkgKGFwcHJveC4gMTAyOSBjbG9jayBjeWNsZXMpIHRoZSBWSU1TIHdpbGwKKy8vISAgIGF1dG9tYXRpY2FsbHkgc3dpdGNoIG1vZGUgdG8gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgKEdQUkFNIGVuYWJsZWQpLgorLy8hCisvLyEgSW4gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgbW9kZSwgdGhlIGNhY2hlIGlzIGRpc2FibGVkIGJ1dCB0aGUgR1AgUkFNIGlzCisvLyEgYWNjZXNzaWJsZToKKy8vISAgIFRoZSBHUCBSQU0gd2lsbCBiZSBhY2Nlc3NpYmxlLgorLy8hICAgVGhlIENhY2hlIHdpbGwgbm90IGJlIG9wZXJhdGlvbmFsLgorLy8hICAgUmVhZHMgZnJvbSBmbGFzaCB3aWxsIGJlIHVuY2FjaGVkLgorLy8hICAgRnJvbSB0aGlzIG1vZGUsIHRoZSBWSU1TIG1heSBiZSBwdXQgaW4gXHJlZiBWSU1TX01PREVfRU5BQkxFRCAoQ0FDSEUgbW9kZSkuCisvLyEKKy8vISBJbiBccmVmIFZJTVNfTU9ERV9FTkFCTEVEIG1vZGUsIHRoZSBjYWNoZSBpcyBlbmFibGVkIGZvciBcYiBVU0VSQ09ERSBzcGFjZS4KKy8vISAgIFRoZSBHUCBSQU0gd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwgKHJlYWQvd3JpdGUgd2lsbCByZXN1bHQgaW4gYnVzIGZhdWx0KS4KKy8vISAgIFRoZSBDYWNoZSB3aWxsIGJlIG9wZXJhdGlvbmFsIGZvciBTWVNDT0RFIHNwYWNlLgorLy8hICAgUmVhZHMgZnJvbSBmbGFzaCBpbiBVU0VSQ09ERSBzcGFjZSB3aWxsIGJlIHVuY2FjaGVkLgorLy8hCisvLyEgSW4gXHJlZiBWSU1TX01PREVfT0ZGIHRoZSBjYWNoZSBSQU0gaXMgb2ZmIHRvIGNvbnNlcnZlIHBvd2VyLgorLy8hCisvLyEgXG5vdGUgVGhlIFZJTVMgbXVzdCBiZSBpbnZhbGlkYXRlZCB3aGVuIHN3aXRjaGluZyBtb2RlLgorLy8hIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIFZJTVNfTU9ERV9PRkYgYmVmb3JlIHNldHRpbmcgYW55IG5ldyBtb2RlLgorLy8hIFRoaXMgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkIGluIFxyZWYgVklNU01vZGVTYWZlU2V0KCkKKy8vIQorLy8hIFxub3RlIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHRoZSBWSU1TIGlzIHB1dCBpbiBkaXNhYmxlZCBtb2RlIGJlZm9yZQorLy8hIFxiIHdyaXRpbmcgdG8gZmxhc2gsIHNpbmNlIHRoZSBjYWNoZSB3aWxsIG5vdCBiZSB1cGRhdGVkIG5vciBpbnZhbGlkYXRlZAorLy8hIGJ5IGZsYXNoIHdyaXRlcy4gVGhlIGxpbmUgYnVmZmVycyBzaG91bGQgYWxzbyBiZSBkaXNhYmxlZCB3aGVuIHVwZGF0aW5nIHRoZQorLy8hIGZsYXNoLiBPbmNlIFxyZWYgVklNU01vZGVTZXQoKSBpcyB1c2VkIHRvIHNldCB0aGUgVklNUyBpbgorLy8hIFxyZWYgVklNU19NT0RFX0NIQU5HSU5HIG1vZGUsIHRoZSB1c2VyIHNob3VsZCBjaGVjayB1c2luZworLy8hIFxyZWYgVklNU01vZGVHZXQoKSB3aGVuIHRoZSBtb2RlIHN3aXRjaGVzIHRvIFxyZWYgVklNU19NT0RFX0RJU0FCTEVELiBPbmx5IHdoZW4KKy8vISB0aGUgbW9kZSBoYXMgY2hhbmdlZCB0aGUgY2FjaGUgaGFzIGJlZW4gY29tcGxldGVseSBpbnZhbGlkYXRlZC4KKy8vIQorLy8hIFxub3RlIEFjY2VzcyBmcm9tIFN5c3RlbSBCdXMgaXMgbmV2ZXIgY2FjaGVkLiBPbmx5IGFjY2VzcyB0aHJvdWdoIElDT0RFCisvLyEgRENPREUgYnVzIGZyb20gdGhlIFN5c3RlbSBDUFUgaXMgY2FjaGVkLgorLy8hCisvLyEgXHBhcmFtIHVpMzJCYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJTVMuCisvLyEgXHBhcmFtIHVpMzJNb2RlIGlzIHRoZSBvcGVyYXRpb25hbCBtb2RlLgorLy8hIC0gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgKEdQUkFNIGVuYWJsZWQpCisvLyEgLSBccmVmIFZJTVNfTU9ERV9FTkFCTEVEICAoQ0FDSEUgbW9kZSkKKy8vISAtIFxyZWYgVklNU19NT0RFX09GRgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBWSU1TTW9kZUdldCgpIGFuZCBccmVmIFZJTVNNb2RlU2FmZVNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIHZvaWQgVklNU01vZGVTZXQodWludDMyX3QgdWkzMkJhc2UsIHVpbnQzMl90IHVpMzJNb2RlKTsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0IHRoZSBjdXJyZW50IG9wZXJhdGlvbmFsIG1vZGUgb2YgdGhlIFZJTVMuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgdGhlIFZJTVMuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklNUy4KKy8vIQorLy8hIFxyZXR1cm4gUmV0dXJucyBvbmUgb2Y6CisvLyEgLSBccmVmIFZJTVNfTU9ERV9DSEFOR0lORworLy8hIC0gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgKEdQUkFNIGVuYWJsZWQpCisvLyEgLSBccmVmIFZJTVNfTU9ERV9FTkFCTEVEICAoQ0FDSEUgbW9kZSkKKy8vISAtIFxyZWYgVklNU19NT0RFX09GRgorLy8hCisvLyEgXHNhIFxyZWYgVklNU01vZGVTZXQoKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1aW50MzJfdCBWSU1TTW9kZUdldCh1aW50MzJfdCB1aTMyQmFzZSk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldCB0aGUgb3BlcmF0aW9uYWwgbW9kZSBvZiB0aGUgVklNUyBpbiBhIHNhZmUgc2VxdWVuY2UuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG9wZXJhdGlvbmFsIG1vZGUgb2YgdGhlIFZJTVMgaW4gYSBzYWZlIHNlcXVlbmNlCisvLyEKKy8vISBVcG9uIHJlc2V0IHRoZSBWSU1TIHdpbGwgYmUgaW4gXHJlZiBWSU1TX01PREVfQ0hBTkdJTkcgbW9kZS4KKy8vISAgIEluIHRoaXMgbW9kZSB0aGUgVklNUyB3aWxsIGluaXRpYWxpemUgdGhlIGNhY2hlIChHUCkgUkFNICh0byBhbGwgemVyb3MpLgorLy8hICAgVGhlIEdQIFJBTSB3aWxsIG5vdCBiZSBvcGVyYXRpb25hbCAocmVhZC93cml0ZSB3aWxsIHJlc3VsdCBpbiBidXMgZmF1bHQpLgorLy8hICAgVGhlIENhY2hlIHdpbGwgbm90IGJlIG9wZXJhdGlvbmFsIChyZWFkL3dyaXRlIHRvIGZsYXNoIHdpbGwgYmUgdW5jYWNoZWQpLgorLy8hICAgQWZ0ZXIgYSBzaG9ydCBkZWxheSAoYXBwcm94LiAxMDI5IGNsb2NrIGN5Y2xlcykgdGhlIFZJTVMgd2lsbAorLy8hICAgYXV0b21hdGljYWxseSBzd2l0Y2ggbW9kZSB0byBccmVmIFZJTVNfTU9ERV9ESVNBQkxFRCAoR1BSQU0gZW5hYmxlZCkuCisvLyEKKy8vISBJbiBccmVmIFZJTVNfTU9ERV9ESVNBQkxFRCBtb2RlLCB0aGUgY2FjaGUgaXMgZGlzYWJsZWQgYnV0IHRoZSBHUCBSQU0gaXMKKy8vISBhY2Nlc3NpYmxlOgorLy8hICAgVGhlIEdQIFJBTSB3aWxsIGJlIGFjY2Vzc2libGUuCisvLyEgICBUaGUgQ2FjaGUgd2lsbCBub3QgYmUgb3BlcmF0aW9uYWwuCisvLyEgICBSZWFkcyBmcm9tIGZsYXNoIHdpbGwgYmUgdW5jYWNoZWQuCisvLyEgICBGcm9tIHRoaXMgbW9kZSwgdGhlIFZJTVMgbWF5IGJlIHB1dCBpbiBccmVmIFZJTVNfTU9ERV9FTkFCTEVEIChDQUNIRSBtb2RlKS4KKy8vIQorLy8hIEluIFxyZWYgVklNU19NT0RFX0VOQUJMRUQgbW9kZSwgdGhlIGNhY2hlIGlzIGVuYWJsZWQgZm9yIFxiIFVTRVJDT0RFIHNwYWNlLgorLy8hICAgVGhlIEdQIFJBTSB3aWxsIG5vdCBiZSBvcGVyYXRpb25hbCAocmVhZC93cml0ZSB3aWxsIHJlc3VsdCBpbiBidXMgZmF1bHQpLgorLy8hICAgVGhlIENhY2hlIHdpbGwgYmUgb3BlcmF0aW9uYWwgZm9yIFNZU0NPREUgc3BhY2UuCisvLyEgICBSZWFkcyBmcm9tIGZsYXNoIGluIFVTRVJDT0RFIHNwYWNlIHdpbGwgYmUgdW5jYWNoZWQuCisvLyEKKy8vISBJbiBccmVmIFZJTVNfTU9ERV9PRkYgdGhlIGNhY2hlIFJBTSBpcyBvZmYgdG8gY29uc2VydmUgcG93ZXIuCisvLyEKKy8vISBcbm90ZSBUaGUgVklNUyBtdXN0IGJlIGludmFsaWRhdGVkIHdoZW4gc3dpdGNoaW5nIG1vZGUuCisvLyEgVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgVklNU19NT0RFX09GRiBiZWZvcmUgc2V0dGluZyBhbnkgbmV3IG1vZGUuCisvLyEgVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4KKy8vIQorLy8hIFxub3RlIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHRoZSBWSU1TIGlzIHB1dCBpbiBkaXNhYmxlZCBtb2RlIGJlZm9yZQorLy8hIFxiIHdyaXRpbmcgdG8gZmxhc2gsIHNpbmNlIHRoZSBjYWNoZSB3aWxsIG5vdCBiZSB1cGRhdGVkIG5vciBpbnZhbGlkYXRlZAorLy8hIGJ5IGZsYXNoIHdyaXRlcy4gVGhlIGxpbmUgYnVmZmVycyBzaG91bGQgYWxzbyBiZSBkaXNhYmxlZCB3aGVuIHVwZGF0aW5nIHRoZQorLy8hIGZsYXNoLgorLy8hCisvLyEgXG5vdGUgQWNjZXNzIGZyb20gU3lzdGVtIEJ1cyBpcyBuZXZlciBjYWNoZWQuIE9ubHkgYWNjZXNzIHRocm91Z2ggSUNPREUKKy8vISBEQ09ERSBidXMgZnJvbSB0aGUgU3lzdGVtIENQVSBpcyBjYWNoZWQuCisvLyEKKy8vISBccGFyYW0gdWkzMkJhc2UgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklNUy4KKy8vISBccGFyYW0gdWkzMk5ld01vZGUgaXMgdGhlIG5ldyBvcGVyYXRpb25hbCBtb2RlOgorLy8hIC0gXHJlZiBWSU1TX01PREVfRElTQUJMRUQgKEdQUkFNIGVuYWJsZWQpCisvLyEgLSBccmVmIFZJTVNfTU9ERV9FTkFCTEVEICAoQ0FDSEUgbW9kZSkKKy8vISAtIFxyZWYgVklNU19NT0RFX09GRgorLy8hIFxwYXJhbSBibG9ja2luZyBzaGFsbCBiZSBzZXQgdG8gVFJVRSBpZiBmdXJ0aGVyIGNvZGUgZXhlY3V0aW9uIHNoYWxsIGJlCisvLyEgYmxvY2tlZCAoZGVsYXllZCkgdW50aWwgbW9kZSBjaGFuZ2UgaXMgY29tcGxldGVkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBWSU1TTW9kZVNldCgpIGFuZCBccmVmIFZJTVNNb2RlR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBWSU1TTW9kZVNhZmVTZXQoIHVpbnQzMl90IHVpMzJCYXNlICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdWkzMk5ld01vZGUgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICAgICBibG9ja2luZyAgICApOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlIFZJTVMgbGluZWJ1ZmZlcnMuCisvLyEKKy8vISBMaW5lYnVmZmVycyBzaG91bGQgb25seSBiZSBkaXNhYmxlZCB3aGVuIGF0dGVtcHRpbmcgdG8gdXBkYXRlIHRoZSBmbGFzaCwgdG8KKy8vISBlbnN1cmUgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVycyBpcyBub3Qgc3RhbGUuIEFzIHNvb24gYXMgZmxhc2ggaXMKKy8vISB1cGRhdGVkIHRoZSBsaW5lYnVmZmVycyBzaG91bGQgYmUgcmVlbmFibGVkLiBGYWlsaW5nIHRvIGVuYWJsZQorLy8hIHdpbGwgaGF2ZSBhIHBlcmZvcm1hbmNlIGltcGFjdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBWSU1TLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitWSU1TTGluZUJ1ZkRpc2FibGUodWludDMyX3QgdWkzMkJhc2UpCit7CisgICAgLy8KKyAgICAvLyBEaXNhYmxlIGxpbmUgYnVmZmVycworICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fQ1RMKSB8PSBWSU1TX0NUTF9JRENPREVfTEJfRElTX00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJTVNfQ1RMX1NZU0JVU19MQl9ESVNfTTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlIFZJTVMgbGluZWJ1ZmZlcnMuCisvLyEKKy8vISBMaW5lYnVmZmVycyBzaG91bGQgb25seSBiZSBkaXNhYmxlZCB3aGVuIGF0dGVtcHRpbmcgdG8gdXBkYXRlIHRoZSBmbGFzaCwgdG8KKy8vISBlbnN1cmUgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVycyBpcyBub3Qgc3RhbGUuIEFzIHNvb24gYXMgZmxhc2ggaXMKKy8vISB1cGRhdGVkIHRoZSBsaW5lYnVmZmVycyBzaG91bGQgYmUgcmVlbmFibGVkLiBGYWlsaW5nIHRvIGVuYWJsZQorLy8hIHdpbGwgaGF2ZSBhIHBlcmZvcm1hbmNlIGltcGFjdC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyQmFzZSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBWSU1TLgorLy8hCisvLyEgXHJldHVybiBOb25lLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitWSU1TTGluZUJ1ZkVuYWJsZSh1aW50MzJfdCB1aTMyQmFzZSkKK3sKKyAgICAvLworICAgIC8vIEVuYWJsZSBsaW5lYnVmZmVycworICAgIC8vCisgICAgSFdSRUcodWkzMkJhc2UgKyBWSU1TX09fQ1RMKSAmPSB+KFZJTVNfQ1RMX0lEQ09ERV9MQl9ESVNfTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU1TX0NUTF9TWVNCVVNfTEJfRElTX00pOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gU3VwcG9ydCBmb3IgRHJpdmVyTGliIGluIFJPTToKKy8vIFJlZGlyZWN0IHRvIGltcGxlbWVudGF0aW9uIGluIFJPTSB3aGVuIGF2YWlsYWJsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIWRlZmluZWQoRFJJVkVSTElCX05PUk9NKSAmJiAhZGVmaW5lZChET1hZR0VOKQorICAgICNpbmNsdWRlIDxkcml2ZXJsaWIvcm9tLmg+CisgICAgI2lmZGVmIFJPTV9WSU1TQ29uZmlndXJlCisgICAgICAgICN1bmRlZiAgVklNU0NvbmZpZ3VyZQorICAgICAgICAjZGVmaW5lIFZJTVNDb25maWd1cmUgICAgICAgICAgICAgICAgICAgUk9NX1ZJTVNDb25maWd1cmUKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgUk9NX1ZJTVNNb2RlU2V0CisgICAgICAgICN1bmRlZiAgVklNU01vZGVTZXQKKyAgICAgICAgI2RlZmluZSBWSU1TTW9kZVNldCAgICAgICAgICAgICAgICAgICAgIFJPTV9WSU1TTW9kZVNldAorICAgICNlbmRpZgorICAgICNpZmRlZiBST01fVklNU01vZGVHZXQKKyAgICAgICAgI3VuZGVmICBWSU1TTW9kZUdldAorICAgICAgICAjZGVmaW5lIFZJTVNNb2RlR2V0ICAgICAgICAgICAgICAgICAgICAgUk9NX1ZJTVNNb2RlR2V0CisgICAgI2VuZGlmCisgICAgI2lmZGVmIFJPTV9WSU1TTW9kZVNhZmVTZXQKKyAgICAgICAgI3VuZGVmICBWSU1TTW9kZVNhZmVTZXQKKyAgICAgICAgI2RlZmluZSBWSU1TTW9kZVNhZmVTZXQgICAgICAgICAgICAgICAgIFJPTV9WSU1TTW9kZVNhZmVTZXQKKyAgICAjZW5kaWYKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFyayB0aGUgZW5kIG9mIHRoZSBDIGJpbmRpbmdzIHNlY3Rpb24gZm9yIEMrKyBjb21waWxlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vICBfX1ZJTVNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3dhdGNoZG9nLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi93YXRjaGRvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDdiOWEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi93YXRjaGRvZy5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB3ZHQuYworKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEcml2ZXIgZm9yIHRoZSBXYXRjaGRvZyBUaW1lci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxkcml2ZXJsaWIvd2F0Y2hkb2cuaD4KKworLy8gU2VlIHdhdGNoZG9nLmggZm9yIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2RyaXZlcmxpYi93YXRjaGRvZy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDgyN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvd2F0Y2hkb2cuaApAQCAtMCwwICsxLDU0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHdkdC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0xMS0xNiAxOTo0MTo0NyArMDEwMCAoTW9uLCAxNiBOb3YgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0NTA5NAorKgorKiAgRGVzY3JpcHRpb246ICAgIERlZmluZXMgYW5kIHByb3RvdHlwZXMgZm9yIHRoZSBXYXRjaGRvZyBUaW1lci4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgcGVyaXBoZXJhbF9ncm91cAorLy8hIEB7CisvLyEgXGFkZHRvZ3JvdXAgd2R0X2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fV0RUX0hfXworI2RlZmluZSBfX1dEVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIElmIGJ1aWxkaW5nIHdpdGggYSBDKysgY29tcGlsZXIsIG1ha2UgYWxsIG9mIHRoZSBkZWZpbml0aW9ucyBpbiB0aGlzIGhlYWRlcgorLy8gaGF2ZSBhIEMgYmluZGluZy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19pbnRzLmg+CisjaW5jbHVkZSA8aW5jL2h3X21lbW1hcC5oPgorI2luY2x1ZGUgPGluYy9od193ZHQuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvZGVidWcuaD4KKyNpbmNsdWRlIDxkcml2ZXJsaWIvaW50ZXJydXB0Lmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgV0RUX09fTE9DSyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFdBVENIRE9HX0xPQ0tfVU5MT0NLRUQgICAgICAgMHgwMDAwMDAwMCAgLy8gVW5sb2NrZWQKKyNkZWZpbmUgV0FUQ0hET0dfTE9DS19MT0NLRUQgICAgICAgICAweDAwMDAwMDAxICAvLyBMb2NrZWQKKyNkZWZpbmUgV0FUQ0hET0dfTE9DS19VTkxPQ0sgICAgICAgICAweDFBQ0NFNTUxICAvLyBVbmxvY2tzIHRoZSBXYXRjaGRvZyBUaW1lcgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIFdEVF9JU1IsIFdEVF9SSVMsIGFuZAorLy8gV0RUX01JUyByZWdpc3RlcnMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBXQVRDSERPR19JTlRfVElNRU9VVCAgICAgICAgIDB4MDAwMDAwMDEgIC8vIFdhdGNoZG9nIHRpbWVyIGV4cGlyZWQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSB0eXBlIG9mIGludGVycnVwdCB0aGF0IGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIHdhdGNoZG9nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgV0FUQ0hET0dfSU5UX1RZUEVfSU5UICAgMHgwMDAwMDAwMAorI2RlZmluZSBXQVRDSERPR19JTlRfVFlQRV9OTUkgICAweDAwMDAwMDA0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBUEkgRnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEZXRlcm1pbmVzIGlmIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBlbmFibGVkLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlmIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBlbmFibGVkLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHN0YXR1cyBvZiBXYXRjaGRvZyBUaW1lcjoKKy8vISAtIFxjIHRydWUgIDogV2F0Y2hkb2cgdGltZXIgaXMgZW5hYmxlZC4KKy8vISAtIFxjIGZhbHNlIDogV2F0Y2hkb2cgdGltZXIgaXMgZGlzYWJsZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK1dhdGNoZG9nUnVubmluZyh2b2lkKQoreworICAgIC8vCisgICAgLy8gU2VlIGlmIHRoZSB3YXRjaGRvZyB0aW1lciBtb2R1bGUgaXMgZW5hYmxlZCwgYW5kIHJldHVybi4KKyAgICAvLworICAgIHJldHVybigoSFdSRUcoV0RUX0JBU0UgKyBXRFRfT19DVEwpICYgV0RUX0NUTF9JTlRFTikgPyB0cnVlIDogZmFsc2UpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB3YXRjaGRvZyB0aW1lci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgd2F0Y2hkb2cgdGltZXIgY291bnRlciBhbmQgaW50ZXJydXB0LgorLy8hCisvLyEgT25jZSBlbmFibGVkLCB0aGUgd2F0Y2hkb2cgaW50ZXJydXB0IGNhbiBvbmx5IGJlIGRpc2FibGVkIGJ5IGEgaGFyZHdhcmUgcmVzZXQuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3QgaWYgdGhlIHdhdGNoZG9nIHRpbWVyIGhhcyBiZWVuIGxvY2tlZC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgV2F0Y2hkb2dMb2NrKCksIFxyZWYgV2F0Y2hkb2dVbmxvY2soKQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ0VuYWJsZSh2b2lkKQoreworICAgIC8vIEVuYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIgbW9kdWxlLgorICAgIEhXUkVHQklUVyhXRFRfQkFTRSArIFdEVF9PX0NUTCwgV0RUX0NUTF9JTlRFTl9CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEVuYWJsZXMgdGhlIHdhdGNoZG9nIHRpbWVyIHJlc2V0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSB3YXRjaGRvZyB0aW1lciB0byBpc3N1ZSBhIHJlc2V0CisvLyEgdG8gdGhlIHByb2Nlc3NvciBhZnRlciBhIHNlY29uZCB0aW1lb3V0IGNvbmRpdGlvbi4KKy8vIQorLy8hIFxub3RlIFRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCBpZiB0aGUgd2F0Y2hkb2cgdGltZXIgaGFzIGJlZW4gbG9ja2VkLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBXYXRjaGRvZ0xvY2soKSwgXHJlZiBXYXRjaGRvZ1VubG9jaygpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nUmVzZXRFbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbmFibGUgdGhlIHdhdGNoZG9nIHJlc2V0LgorICAgIEhXUkVHQklUVyhXRFRfQkFTRSArIFdEVF9PX0NUTCwgV0RUX0NUTF9SRVNFTl9CSVROKSA9IDE7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIERpc2FibGVzIHRoZSB3YXRjaGRvZyB0aW1lciByZXNldC4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIHdhdGNoZG9nIHRpbWVyIHRvIGlzc3VlIGEKKy8vISByZXNldCB0byB0aGUgcHJvY2Vzc29yIGFmdGVyIGEgc2Vjb25kIHRpbWVvdXQgY29uZGl0aW9uLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IGlmIHRoZSB3YXRjaGRvZyB0aW1lciBoYXMgYmVlbiBsb2NrZWQuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIFdhdGNoZG9nTG9jaygpLCBccmVmIFdhdGNoZG9nVW5sb2NrKCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dSZXNldERpc2FibGUodm9pZCkKK3sKKyAgICAvLyBEaXNhYmxlIHRoZSB3YXRjaGRvZyByZXNldC4KKyAgICBIV1JFR0JJVFcoV0RUX0JBU0UgKyBXRFRfT19DVEwsIFdEVF9DVExfUkVTRU5fQklUTikgPSAwOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB3YXRjaGRvZyB0aW1lciBsb2NrIG1lY2hhbmlzbS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gbG9ja3Mgb3V0IHdyaXRlIGFjY2VzcyB0byB0aGUgd2F0Y2hkb2cgdGltZXIgY29uZmlndXJhdGlvbgorLy8hIHJlZ2lzdGVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ0xvY2sodm9pZCkKK3sKKyAgICAvLworICAgIC8vIExvY2sgb3V0IHdhdGNoZG9nIHJlZ2lzdGVyIHdyaXRlcy4gV3JpdGluZyBhbnl0aGluZyB0byB0aGUgV0RUX09fTE9DSworICAgIC8vIHJlZ2lzdGVyIGNhdXNlcyB0aGUgbG9jayB0byBnbyBpbnRvIGVmZmVjdC4KKyAgICAvLworICAgIEhXUkVHKFdEVF9CQVNFICsgV0RUX09fTE9DSykgPSBXQVRDSERPR19MT0NLX0xPQ0tFRDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRGlzYWJsZXMgdGhlIHdhdGNoZG9nIHRpbWVyIGxvY2sgbWVjaGFuaXNtLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHdyaXRlIGFjY2VzcyB0byB0aGUgd2F0Y2hkb2cgdGltZXIgY29uZmlndXJhdGlvbgorLy8hIHJlZ2lzdGVycy4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ1VubG9jayh2b2lkKQoreworICAgIC8vCisgICAgLy8gVW5sb2NrIHdhdGNoZG9nIHJlZ2lzdGVyIHdyaXRlcy4KKyAgICAvLworICAgIEhXUkVHKFdEVF9CQVNFICsgV0RUX09fTE9DSykgPSBXQVRDSERPR19MT0NLX1VOTE9DSzsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgc3RhdGUgb2YgdGhlIHdhdGNoZG9nIHRpbWVyIGxvY2sgbWVjaGFuaXNtLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsb2NrIHN0YXRlIG9mIHRoZSB3YXRjaGRvZyB0aW1lciByZWdpc3RlcnMuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgc3RhdGUgb2YgbG9jayBtZWNoYW5pc20uCisvLyEgLSBcYyB0cnVlICA6IFdhdGNoZG9nIHRpbWVyIHJlZ2lzdGVycyBhcmUgbG9ja2VkLgorLy8hIC0gXGMgZmFsc2UgOiBSZWdpc3RlcnMgYXJlIG5vdCBsb2NrZWQuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIGJvb2wKK1dhdGNoZG9nTG9ja1N0YXRlKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGxvY2sgc3RhdGUuCisgICAgLy8KKyAgICByZXR1cm4oKEhXUkVHKFdEVF9CQVNFICsgV0RUX09fTE9DSykgPT0gV0FUQ0hET0dfTE9DS19MT0NLRUQpID8KKyAgICAgICAgICAgICAgIHRydWUgOiBmYWxzZSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNldHMgdGhlIHdhdGNoZG9nIHRpbWVyIHJlbG9hZCB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgdmFsdWUgdG8gbG9hZCBpbnRvIHRoZSB3YXRjaGRvZyB0aW1lciB3aGVuIHRoZQorLy8hIGNvdW50IHJlYWNoZXMgemVybyBmb3IgdGhlIGZpcnN0IHRpbWU7IGlmIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBydW5uaW5nCisvLyEgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlbiB0aGUgdmFsdWUgaXMgaW1tZWRpYXRlbHkgbG9hZGVkIGludG8gdGhlCisvLyEgd2F0Y2hkb2cgdGltZXIgY291bnRlci4gIElmIHRoZSBcYyB1aTMyTG9hZFZhbCBwYXJhbWV0ZXIgaXMgMCwgdGhlbiBhbgorLy8hIGludGVycnVwdCBpcyBpbW1lZGlhdGVseSBnZW5lcmF0ZWQuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3QgaWYgdGhlIHdhdGNoZG9nIHRpbWVyIGhhcyBiZWVuIGxvY2tlZC4KKy8vIQorLy8hIFxwYXJhbSB1aTMyTG9hZFZhbCBpcyB0aGUgbG9hZCB2YWx1ZSBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBXYXRjaGRvZ0xvY2soKSwgXHJlZiBXYXRjaGRvZ1VubG9jaygpLCBccmVmIFdhdGNoZG9nUmVsb2FkR2V0KCkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dSZWxvYWRTZXQodWludDMyX3QgdWkzMkxvYWRWYWwpCit7CisgICAgLy8KKyAgICAvLyBTZXQgdGhlIGxvYWQgcmVnaXN0ZXIuCisgICAgLy8KKyAgICBIV1JFRyhXRFRfQkFTRSArIFdEVF9PX0xPQUQpID0gdWkzMkxvYWRWYWw7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIEdldHMgdGhlIHdhdGNoZG9nIHRpbWVyIHJlbG9hZCB2YWx1ZS4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBsb2FkZWQgaW50byB0aGUgd2F0Y2hkb2cgdGltZXIgd2hlbgorLy8hIHRoZSBjb3VudCByZWFjaGVzIHplcm8gZm9yIHRoZSBmaXJzdCB0aW1lLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBXYXRjaGRvZ1JlbG9hZFNldCgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90CitXYXRjaGRvZ1JlbG9hZEdldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gR2V0IHRoZSBsb2FkIHJlZ2lzdGVyLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKFdEVF9CQVNFICsgV0RUX09fTE9BRCkpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBHZXRzIHRoZSBjdXJyZW50IHdhdGNoZG9nIHRpbWVyIHZhbHVlLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgd2F0Y2hkb2cgdGltZXIuCisvLyEKKy8vISBccmV0dXJuIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHdhdGNoZG9nIHRpbWVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorV2F0Y2hkb2dWYWx1ZUdldCh2b2lkKQoreworICAgIC8vCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IHdhdGNoZG9nIHRpbWVyIHJlZ2lzdGVyIHZhbHVlLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKFdEVF9CQVNFICsgV0RUX09fVkFMVUUpKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgUmVnaXN0ZXJzIGFuIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0LgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhY3R1YWwgcmVnaXN0ZXJpbmcgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLiBUaGlzCisvLyEgZnVuY3Rpb24gYWxzbyBlbmFibGVzIHRoZSBnbG9iYWwgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcjsgdGhlCisvLyEgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0IG11c3QgYmUgZW5hYmxlZCB2aWEgXHJlZiBXYXRjaGRvZ0ludEVuYWJsZSgpLiBJdCBpcyB0aGUKKy8vISBpbnRlcnJ1cHQgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlIHZpYQorLy8hIFxyZWYgV2F0Y2hkb2dJbnRDbGVhcigpLgorLy8hCisvLyEgXG5vdGUgVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIHN0YW5kYXJkIHdhdGNoZG9nIGludGVycnVwdCBoYW5kbGVyLiBUbworLy8hIHJlZ2lzdGVyIHRoZSBOTUkgd2F0Y2hkb2cgaGFuZGxlciwgdXNlIFxyZWYgSW50UmVnaXN0ZXIoKSB0byByZWdpc3RlciB0aGUKKy8vISBoYW5kbGVyIGZvciB0aGUgXGIgSU5UX05NSV9GQVVMVCBpbnRlcnJ1cHQuCisvLyEKKy8vISBccGFyYW0gcGZuSGFuZGxlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZQorLy8hIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBvY2N1cnMuCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vIQorLy8hIFxzYSBccmVmIEludFJlZ2lzdGVyKCkgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmluZyBpbnRlcnJ1cHQKKy8vISBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dJbnRSZWdpc3Rlcih2b2lkICgqcGZuSGFuZGxlcikodm9pZCkpCit7CisgICAgLy8KKyAgICAvLyBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgLy8KKyAgICBJbnRSZWdpc3RlcihJTlRfV0RUX0lSUSwgcGZuSGFuZGxlcik7CisKKyAgICAvLworICAgIC8vIEVuYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0LgorICAgIC8vCisgICAgSW50RW5hYmxlKElOVF9XRFRfSVJRKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgVW5yZWdpc3RlcnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFjdHVhbCB1bnJlZ2lzdGVyaW5nIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcworLy8hIGZ1bmN0aW9uIGNsZWFycyB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBhIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdAorLy8hIG9jY3Vycy4gVGhpcyBmdW5jdGlvbiBhbHNvIG1hc2tzIG9mZiB0aGUgaW50ZXJydXB0IGluIHRoZSBpbnRlcnJ1cHQKKy8vISBjb250cm9sbGVyIHNvIHRoYXQgdGhlIGludGVycnVwdCBoYW5kbGVyIG5vIGxvbmdlciBpcyBjYWxsZWQuCisvLyEKKy8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgc3RhbmRhcmQgd2F0Y2hkb2cgaW50ZXJydXB0IGhhbmRsZXIuIFRvCisvLyEgcmVnaXN0ZXIgdGhlIE5NSSB3YXRjaGRvZyBoYW5kbGVyLCB1c2UgXHJlZiBJbnRSZWdpc3RlcigpIHRvIHJlZ2lzdGVyIHRoZQorLy8hIGhhbmRsZXIgZm9yIHRoZSBcYiBJTlRfTk1JX0ZBVUxUIGludGVycnVwdC4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFxyZWYgSW50UmVnaXN0ZXIoKSBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyaW5nIGludGVycnVwdAorLy8hIGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ0ludFVucmVnaXN0ZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIERpc2FibGUgdGhlIGludGVycnVwdC4KKyAgICAvLworICAgIEludERpc2FibGUoSU5UX1dEVF9JUlEpOworCisgICAgLy8KKyAgICAvLyBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAvLworICAgIEludFVucmVnaXN0ZXIoSU5UX1dEVF9JUlEpOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBFbmFibGVzIHRoZSB3YXRjaGRvZyB0aW1lci4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0IGJ5IGNhbGxpbmcgXHJlZiBXYXRjaGRvZ0VuYWJsZSgpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLyEKKy8vISBcc2EgXHJlZiBXYXRjaGRvZ0VuYWJsZSgpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nSW50RW5hYmxlKHZvaWQpCit7CisgICAgLy8gRW5hYmxlIHRoZSBXYXRjaGRvZyBpbnRlcnJ1cHQuCisgICAgV2F0Y2hkb2dFbmFibGUoKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgR2V0cyB0aGUgY3VycmVudCB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hCisvLyEgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZvciB0aGUgd2F0Y2hkb2cgdGltZXIgbW9kdWxlLgorLy8hCisvLyEgXHJldHVybiBSZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVzLgorLy8hIC0gMSA6IFdhdGNoZG9nIHRpbWUtb3V0IGhhcyBvY2N1cnJlZC4KKy8vISAtIDAgOiBXYXRjaGRvZyB0aW1lLW91dCBoYXMgbm90IG9jY3VycmVkLgorLy8hCisvLyEgXHNhIFxyZWYgV2F0Y2hkb2dJbnRDbGVhcigpOworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB1aW50MzJfdAorV2F0Y2hkb2dJbnRTdGF0dXModm9pZCkKK3sKKyAgICAvLworICAgIC8vIFJldHVybiBlaXRoZXIgdGhlIGludGVycnVwdCBzdGF0dXMgb3IgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIGFzCisgICAgLy8gcmVxdWVzdGVkLgorICAgIC8vCisgICAgcmV0dXJuKEhXUkVHKFdEVF9CQVNFICsgV0RUX09fUklTKSk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIENsZWFycyB0aGUgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0LgorLy8hCisvLyEgVGhlIHdhdGNoZG9nIHRpbWVyIGludGVycnVwdCBzb3VyY2UgaXMgY2xlYXJlZCwgc28gdGhhdCBpdCBubyBsb25nZXIKKy8vISBhc3NlcnRzLgorLy8hCisvLyEgXG5vdGUgRHVlIHRvIHdyaXRlIGJ1ZmZlcnMgYW5kIHN5bmNocm9uaXplcnMgaW4gdGhlIHN5c3RlbSBpdCBtYXkgdGFrZSBzZXZlcmFsCisvLyEgY2xvY2sgY3ljbGVzIGZyb20gYSByZWdpc3RlciB3cml0ZSBjbGVhcmluZyBhbiBldmVudCBpbiBhIG1vZHVsZSBhbmQgdW50aWwgdGhlCisvLyEgZXZlbnQgaXMgYWN0dWFsbHkgY2xlYXJlZCBpbiB0aGUgTlZJQyBvZiB0aGUgc3lzdGVtIENQVS4gSXQgaXMgcmVjb21tZW5kZWQgdG8KKy8vISBjbGVhciB0aGUgZXZlbnQgc291cmNlIGVhcmx5IGluIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpIHRvIGFsbG93CisvLyEgdGhlIGV2ZW50IGNsZWFyIHRvIHByb3BhZ2F0ZSB0byB0aGUgTlZJQyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIElTUi4KKy8vISBBdCB0aGUgc2FtZSB0aW1lLCBhbiBlYXJseSBldmVudCBjbGVhciBhbGxvd3MgbmV3IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlCisvLyEgcGVuZGVkIGluc3RlYWQgb2YgaWdub3JlZCBpZiB0aGUgZXZlbnQgaXMgY2xlYXJlZCBsYXRlciBpbiB0aGUgSVNSLgorLy8hIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJvZ3JhbW1lciB0byBtYWtlIHN1cmUgdGhhdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCisvLyEgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBJU1IgdG8gYXZvaWQgZmFsc2UgcmUtdHJpZ2dlcmluZyBvZiB0aGUgY2xlYXJlZCBldmVudC4KKy8vISBBIHNpbXBsZSwgYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IG9wdGltYWwsIHdheSBvZiBjbGVhcmluZyBhbiBldmVudCBiZWZvcmUKKy8vISByZXR1cm5pbmcgZnJvbSB0aGUgSVNSIGlzOgorLy8hIC0jIFdyaXRlIHRvIGNsZWFyIGV2ZW50IChpbnRlcnJ1cHQgc291cmNlKS4gKGJ1ZmZlcmVkIHdyaXRlKQorLy8hIC0jIER1bW15IHJlYWQgZnJvbSB0aGUgZXZlbnQgc291cmNlIG1vZHVsZS4gKG1ha2luZyBzdXJlIHRoZSB3cml0ZSBoYXMgcHJvcGFnYXRlZCkKKy8vISAtIyBXYWl0IHR3byBzeXN0ZW0gQ1BVIGNsb2NrIGN5Y2xlcyAodXNlciBjb2RlIG9yIHR3byBOT1BzKS4gKGFsbG93aW5nIGNsZWFyZWQgZXZlbnQgdG8gcHJvcGFnYXRlIHRocm91Z2ggYW55IHN5bmNocm9uaXplcnMpCisvLyEKKy8vISBccmV0dXJuIE5vbmUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX1NUQVRJQ19JTkxJTkUgdm9pZAorV2F0Y2hkb2dJbnRDbGVhcih2b2lkKQoreworICAgIC8vCisgICAgLy8gQ2xlYXIgdGhlIGludGVycnVwdCBzb3VyY2UuCisgICAgLy8KKyAgICBIV1JFRyhXRFRfQkFTRSArIFdEVF9PX0lDUikgPSBXQVRDSERPR19JTlRfVElNRU9VVDsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgU2V0cyB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IHRoZSB3YXRjaGRvZy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgdGhhdCBpcyBnZW5lcmF0ZWQgaWYgdGhlIHdhdGNoZG9nCisvLyEgdGltZXIgZXhwaXJlcy4KKy8vIQorLy8hIFdoZW4gY29uZmlndXJlZCB0byBnZW5lcmF0ZSBhbiBOTUksIHRoZSB3YXRjaGRvZyBpbnRlcnJ1cHQgbXVzdCBzdGlsbCBiZQorLy8hIGVuYWJsZWQgd2l0aCBccmVmIFdhdGNoZG9nSW50RW5hYmxlKCksIGFuZCBpdCBtdXN0IHN0aWxsIGJlIGNsZWFyZWQgaW5zaWRlIHRoZQorLy8hIE5NSSBoYW5kbGVyIHdpdGggXHJlZiBXYXRjaGRvZ0ludENsZWFyKCkuCisvLyEKKy8vISBccGFyYW0gdWkzMlR5cGUgaXMgdGhlIHR5cGUgb2YgaW50ZXJydXB0IHRvIGdlbmVyYXRlLgorLy8hIC0gXHJlZiBXQVRDSERPR19JTlRfVFlQRV9JTlQgOiBHZW5lcmF0ZSBhIHN0YW5kYXJkIGludGVycnVwdCAoZGVmYXVsdCkuCisvLyEgLSBccmVmIFdBVENIRE9HX0lOVF9UWVBFX05NSSA6IEdlbmVyYXRlIGEgbm9uLW1hc2thYmxlIGludGVycnVwdCAoTk1JKS4KKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK19fU1RBVElDX0lOTElORSB2b2lkCitXYXRjaGRvZ0ludFR5cGVTZXQodWludDMyX3QgdWkzMlR5cGUpCit7CisgICAgLy8gQ2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBBU1NFUlQoKHVpMzJUeXBlID09IFdBVENIRE9HX0lOVF9UWVBFX0lOVCkgfHwKKyAgICAgICAgICAgKHVpMzJUeXBlID09IFdBVENIRE9HX0lOVF9UWVBFX05NSSkpOworCisgICAgLy8gU2V0IHRoZSBpbnRlcnJ1cHQgdHlwZS4KKyAgICBIV1JFR0JJVFcoV0RUX0JBU0UgKyBXRFRfT19DVEwsIFdEVF9DVExfSU5UVFlQRV9CSVROKSA9ICh1aTMyVHlwZSA9PSBXQVRDSERPR19JTlRfVFlQRV9JTlQpPyAwIDogMTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBcYnJpZWYgRW5hYmxlcyBzdGFsbGluZyBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgZHVyaW5nIGRlYnVnIGV2ZW50cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSB3YXRjaGRvZyB0aW1lciB0byBzdG9wIGNvdW50aW5nIHdoZW4gdGhlIHByb2Nlc3NvcgorLy8hIGlzIHN0b3BwZWQgYnkgdGhlIGRlYnVnZ2VyLiBCeSBkb2luZyBzbywgdGhlIHdhdGNoZG9nIGlzIHByZXZlbnRlZCBmcm9tCisvLyEgZXhwaXJpbmcgYW5kIHJlc2V0dGluZyB0aGUgc3lzdGVtIChpZiByZXNldCBpcyBlbmFibGVkKS4gVGhlIHdhdGNoZG9nIGluc3RlYWQgZXhwaXJlcworLy8hIGFmdGVyIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgcHJvY2Vzc29yIGN5Y2xlcyBoYXZlIGJlZW4gZXhlY3V0ZWQgd2hpbGUKKy8vISBkZWJ1Z2dpbmcgKG9yIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lIGFmdGVyIHRoZSBwcm9jZXNzb3IgaGFzIGJlZW4KKy8vISByZXN0YXJ0ZWQpLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nU3RhbGxFbmFibGUodm9pZCkKK3sKKyAgICAvLyBFbmFibGUgdGltZXIgc3RhbGxpbmcuCisgICAgSFdSRUdCSVRXKFdEVF9CQVNFICsgV0RUX09fVEVTVCwgV0RUX1RFU1RfU1RBTExfQklUTikgPSAxOworfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFxicmllZiBEaXNhYmxlcyBzdGFsbGluZyBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgZHVyaW5nIGRlYnVnIGV2ZW50cy4KKy8vIQorLy8hIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGRlYnVnIG1vZGUgc3RhbGwgb2YgdGhlIHdhdGNoZG9nIHRpbWVyLiBCeQorLy8hIGRvaW5nIHNvLCB0aGUgd2F0Y2hkb2cgdGltZXIgY29udGludWVzIHRvIGNvdW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHByb2Nlc3NvcgorLy8hIGRlYnVnIHN0YXRlLgorLy8hCisvLyEgXHJldHVybiBOb25lCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19TVEFUSUNfSU5MSU5FIHZvaWQKK1dhdGNoZG9nU3RhbGxEaXNhYmxlKHZvaWQpCit7CisgICAgLy8gRGlzYWJsZSB0aW1lciBzdGFsbGluZy4KKyAgICBIV1JFR0JJVFcoV0RUX0JBU0UgKyBXRFRfT19URVNULCBXRFRfVEVTVF9TVEFMTF9CSVROKSA9IDA7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19XRFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgQ2xvc2UgdGhlIERveHlnZW4gZ3JvdXAuCisvLyEgQH0KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3dhdGNoZG9nX2RvYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9kcml2ZXJsaWIvd2F0Y2hkb2dfZG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczN2U3MgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvZHJpdmVybGliL3dhdGNoZG9nX2RvYy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICB3YXRjaGRvZ19kb2MuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMzAgMTM6MDM6NTkgKzAyMDAgKFdlZCwgMzAgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5NzEKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyEgXGFkZHRvZ3JvdXAgd2R0X2FwaQorLy8hIEB7CisvLyEgXHNlY3Rpb24gc2VjX3dkdCBJbnRyb2R1Y3Rpb24KKy8vIQorLy8hIFRoZSB3YXRjaGRvZyB0aW1lciAoV0RUKSBpcyB1c2VkIHRvIHJlZ2FpbiBjb250cm9sIHdoZW4gdGhlIHN5c3RlbSBoYXMgZmFpbGVkIGR1ZSB0byB1bmV4cGVjdGVkCisvLyEgc29mdHdhcmUgYmVoYXZpb3IuIFRoZSBXRFQgY2FuIGdlbmVyYXRlIGEgbm9uLW1hc2thYmxlIGludGVycnVwdCAoTk1JKSwgYSByZWd1bGFyIGludGVycnVwdCwgb3IgYQorLy8hIHJlc2V0IGlmIHRoZSBzb2Z0d2FyZSBmYWlscyB0byByZWxvYWQgdGhlIHdhdGNoZG9nIGJlZm9yZSBpdCB0aW1lcyBvdXQuCisvLyEKKy8vISBXRFQgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CisvLyEgLSAzMi1iaXQgZG93biBjb3VudGVyIHdpdGggYSBwcm9ncmFtbWFibGUgbG9hZCByZWdpc3Rlci4KKy8vISAtIFByb2dyYW1tYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBsb2dpYyB3aXRoIGludGVycnVwdCBtYXNraW5nIGFuZCBvcHRpb25hbCBOTUkgZnVuY3Rpb24uCisvLyEgLSBPcHRpb25hbCByZXNldCBnZW5lcmF0aW9uLgorLy8hIC0gUmVnaXN0ZXIgcHJvdGVjdGlvbiBmcm9tIHJ1bmF3YXkgc29mdHdhcmUgKGxvY2spLgorLy8hIC0gVXNlci1lbmFibGVkIHN0YWxsaW5nIHdoZW4gdGhlIHN5c3RlbSBDUFUgYXNzZXJ0cyB0aGUgQ1BVIEhhbHQgZmxhZyBkdXJpbmcgZGVidWcuCisvLyEKKy8vISBBZnRlciB0aGUgZmlyc3QgdGltZS1vdXQgZXZlbnQsIHRoZSAzMi1iaXQgY291bnRlciBpcyByZS1sb2FkZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIExvYWQgcmVnaXN0ZXIsCisvLyEgYW5kIHRoZSB0aW1lciByZXN1bWVzIGNvdW50aW5nIGRvd24gZnJvbSB0aGF0IHZhbHVlLgorLy8hIElmIHRoZSB0aW1lciBjb3VudHMgZG93biB0byBpdHMgemVybyBzdGF0ZSBhZ2FpbiBiZWZvcmUgdGhlIGZpcnN0IHRpbWUtb3V0IGludGVycnVwdCBpcyBjbGVhcmVkLAorLy8hIGFuZCB0aGUgcmVzZXQgc2lnbmFsIGhhcyBiZWVuIGVuYWJsZWQsIHRoZSBXRFQgYXNzZXJ0cyBpdHMgcmVzZXQgc2lnbmFsIHRvIHRoZSBzeXN0ZW0uIElmIHRoZSBpbnRlcnJ1cHQKKy8vISBpcyBjbGVhcmVkIGJlZm9yZSB0aGUgMzItYml0IGNvdW50ZXIgcmVhY2hlcyBpdHMgc2Vjb25kIHRpbWUtb3V0LCB0aGUgMzItYml0IGNvdW50ZXIgaXMgbG9hZGVkIHdpdGggdGhlCisvLyEgdmFsdWUgaW4gdGhlIExvYWQgcmVnaXN0ZXIsIGFuZCBjb3VudGluZyByZXN1bWVzIGZyb20gdGhhdCB2YWx1ZS4KKy8vIQorLy8hIElmIExvYWQgcmVnaXN0ZXIgaXMgd3JpdHRlbiB3aXRoIGEgbmV3IHZhbHVlIHdoaWxlIHRoZSBXRFQgY291bnRlciBpcyBjb3VudGluZywgdGhlbiB0aGUgY291bnRlciBpcworLy8hIGxvYWRlZCB3aXRoIHRoZSBuZXcgdmFsdWUgYW5kIGNvbnRpbnVlcyBjb3VudGluZy4KKy8vISBXcml0aW5nIHRvIHRoZSBMb2FkIHJlZ2lzdGVyIGRvZXMgbm90IGNsZWFyIGFuIGFjdGl2ZSBpbnRlcnJ1cHQuIEFuIGludGVycnVwdCBtdXN0IGJlIGV4cGxpY2l0bHkgY2xlYXJlZAorLy8hIGJ5IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQuCisvLyEKKy8vISBUaGUgV0RUIGNvdW50ZXIgcnVucyBhdCBzeXN0ZW0gSEYgY2xvY2sgZGl2aWRlZCBieSAzMjsgaG93ZXZlciwgd2hlbiBpbiBwb3dlcmRvd24gaXQgcnVucyBhdAorLy8hIExGIGNsb2NrICgzMiBrSHopIC0gaWYgdGhlIExGIGNsb2NrIHRvIHRoZSBNQ1UgZG9tYWluIGhhcyBiZWVuIGVuYWJsZWQuCisvLyEKKy8vISBcc2VjdGlvbiBzZWNfd2R0X2FwaSBBUEkKKy8vIQorLy8hIFRoZSBBUEkgZnVuY3Rpb25zIGNhbiBiZSBncm91cGVkIGxpa2UgdGhpczoKKy8vIQorLy8hIFdhdGNoZG9nIGNvbmZpZ3VyYXRpb246CisvLyEgLSBccmVmIFdhdGNoZG9nSW50VHlwZVNldCgpCisvLyEgLSBccmVmIFdhdGNoZG9nUmVzZXRFbmFibGUoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ1Jlc2V0RGlzYWJsZSgpCisvLyEgLSBccmVmIFdhdGNoZG9nUmVsb2FkU2V0KCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dFbmFibGUoKQorLy8hCisvLyEgU3RhdHVzOgorLy8hIC0gXHJlZiBXYXRjaGRvZ1J1bm5pbmcoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ1ZhbHVlR2V0KCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dSZWxvYWRHZXQoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ0ludFN0YXR1cygpCisvLyEKKy8vISBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbjoKKy8vISAtIFxyZWYgV2F0Y2hkb2dJbnRFbmFibGUoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ0ludENsZWFyKCkKKy8vISAtIFxyZWYgV2F0Y2hkb2dJbnRSZWdpc3RlcigpCisvLyEgLSBccmVmIFdhdGNoZG9nSW50VW5yZWdpc3RlcigpCisvLyEKKy8vISBSZWdpc3RlciBwcm90ZWN0aW9uOgorLy8hIC0gXHJlZiBXYXRjaGRvZ0xvY2soKQorLy8hIC0gXHJlZiBXYXRjaGRvZ0xvY2tTdGF0ZSgpCisvLyEgLSBccmVmIFdhdGNoZG9nVW5sb2NrKCkKKy8vIQorLy8hIFN0YWxsIGNvbmZpZ3VyYXRpb24gZm9yIGRlYnVnZ2luZzoKKy8vISAtIFxyZWYgV2F0Y2hkb2dTdGFsbERpc2FibGUoKQorLy8hIC0gXHJlZiBXYXRjaGRvZ1N0YWxsRW5hYmxlKCkKKy8vIQorLy8hIEB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9hc21kZWZzLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9hc21kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwMTc4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2FzbWRlZnMuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGFzbWRlZnMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDYtMDUgMTQ6Mzk6MTAgKzAyMDAgKEZyaSwgMDUgSnVuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDM4MDMKKyoKKyogIERlc2NyaXB0aW9uOiAgICBNYWNyb3MgdG8gYWxsb3cgYXNzZW1ibHkgY29kZSBiZSBwb3J0YWJsZSBhbW9uZyB0b29sIGNoYWlucy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19BU01ERUZTX0hfXworI2RlZmluZSBfX0FTTURFRlNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZGVmaW5lcyByZXF1aXJlZCBmb3IgRVctQVJNLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX0lBUl9TWVNURU1TX0lDQ19fCisKKy8vCisvLyBTZWN0aW9uIGhlYWRlcnMuCisvLworI2RlZmluZSBfX0xJQlJBUllfXyAgICAgICAgICAgICBtb2R1bGUKKyNkZWZpbmUgX19URVhUX18gICAgICAgICAgICAgICAgcnNlZyBDT0RFOkNPREUoMikKKyNkZWZpbmUgX19EQVRBX18gICAgICAgICAgICAgICAgcnNlZyBEQVRBOkRBVEEoMikKKyNkZWZpbmUgX19CU1NfXyAgICAgICAgICAgICAgICAgcnNlZyBEQVRBOkRBVEEoMikKKyNkZWZpbmUgX19URVhUX05PUk9PVF9fICAgICAgICAgcnNlZyBDT0RFOkNPREU6Tk9ST09UKDIpCisKKy8vCisvLyBBc3NlbWJsZXIgbW5lbW9uaWNzLgorLy8KKyNkZWZpbmUgX19BTElHTl9fICAgICAgICAgICAgICAgYWxpZ25yb20gMgorI2RlZmluZSBfX0VORF9fICAgICAgICAgICAgICAgICBlbmQKKyNkZWZpbmUgX19FWFBPUlRfXyAgICAgICAgICAgICAgZXhwb3J0CisjZGVmaW5lIF9fSU1QT1JUX18gICAgICAgICAgICAgIGltcG9ydAorI2RlZmluZSBfX0xBQkVMX18KKyNkZWZpbmUgX19TVFJfXyAgICAgICAgICAgICAgICAgZGNiCisjZGVmaW5lIF9fVEhVTUJfTEFCRUxfXyAgICAgICAgIHRodW1iCisjZGVmaW5lIF9fV09SRF9fICAgICAgICAgICAgICAgIGRjZAorI2RlZmluZSBfX0lOTElORV9EQVRBX18gICAgICAgICBkYXRhCisKKyNlbmRpZiAvLyBfX0lBUl9TWVNURU1TX0lDQ19fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZGVmaW5lcyByZXF1aXJlZCBmb3IgR0NDLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorCisvLworLy8gVGhlIGFzc2VtYmx5IGNvZGUgcHJlYW1ibGUgcmVxdWlyZWQgdG8gcHV0IHRoZSBhc3NlbWJsZXIgaW50byB0aGUgY29ycmVjdAorLy8gY29uZmlndXJhdGlvbi4KKy8vCisgICAgLnN5bnRheCB1bmlmaWVkCisgICAgLnRodW1iCisKKy8vCisvLyBTZWN0aW9uIGhlYWRlcnMuCisvLworI2RlZmluZSBfX0xJQlJBUllfXyAgICAgICAgICAgICBACisjZGVmaW5lIF9fVEVYVF9fICAgICAgICAgICAgICAgIC50ZXh0CisjZGVmaW5lIF9fREFUQV9fICAgICAgICAgICAgICAgIC5kYXRhCisjZGVmaW5lIF9fQlNTX18gICAgICAgICAgICAgICAgIC5ic3MKKyNkZWZpbmUgX19URVhUX05PUk9PVF9fICAgICAgICAgLnRleHQKKworLy8KKy8vIEFzc2VtYmxlciBtbmVtb25pY3MuCisvLworI2RlZmluZSBfX0FMSUdOX18gICAgICAgICAgICAgICAuYmFsaWduIDQKKyNkZWZpbmUgX19FTkRfXyAgICAgICAgICAgICAgICAgLmVuZAorI2RlZmluZSBfX0VYUE9SVF9fICAgICAgICAgICAgICAuZ2xvYmwKKyNkZWZpbmUgX19JTVBPUlRfXyAgICAgICAgICAgICAgLmV4dGVybgorI2RlZmluZSBfX0xBQkVMX18gICAgICAgICAgICAgICA6CisjZGVmaW5lIF9fU1RSX18gICAgICAgICAgICAgICAgIC5hc2NpaQorI2RlZmluZSBfX1RIVU1CX0xBQkVMX18gICAgICAgICAudGh1bWJfZnVuYworI2RlZmluZSBfX1dPUkRfXyAgICAgICAgICAgICAgICAud29yZAorI2RlZmluZSBfX0lOTElORV9EQVRBX18KKworI2VuZGlmIC8vIF9fR05VQ19fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZGVmaW5lcyByZXF1aXJlZCBmb3IgUlYtTURLLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZiBkZWZpbmVkKF9fQ0NfQVJNKQorCisvLworLy8gVGhlIGFzc2VtYmx5IGNvZGUgcHJlYW1ibGUgcmVxdWlyZWQgdG8gcHV0IHRoZSBhc3NlbWJsZXIgaW50byB0aGUgY29ycmVjdAorLy8gY29uZmlndXJhdGlvbi4KKy8vCisgICAgdGh1bWIKKyAgICByZXF1aXJlOAorICAgIHByZXNlcnZlOAorCisvLworLy8gU2VjdGlvbiBoZWFkZXJzLgorLy8KKyNkZWZpbmUgX19MSUJSQVJZX18gICAgICAgICAgICAgOworI2RlZmluZSBfX1RFWFRfXyAgICAgICAgICAgICAgICBhcmVhIHx8LnRleHR8fCwgY29kZSwgcmVhZG9ubHksIGFsaWduPTIKKyNkZWZpbmUgX19EQVRBX18gICAgICAgICAgICAgICAgYXJlYSB8fC5kYXRhfHwsIGRhdGEsIGFsaWduPTIKKyNkZWZpbmUgX19CU1NfXyAgICAgICAgICAgICAgICAgYXJlYSB8fC5ic3N8fCwgbm9pbml0LCBhbGlnbj0yCisjZGVmaW5lIF9fVEVYVF9OT1JPT1RfXyAgICAgICAgIGFyZWEgfHwudGV4dHx8LCBjb2RlLCByZWFkb25seSwgYWxpZ249MgorCisvLworLy8gQXNzZW1ibGVyIG1uZW1vbmljcy4KKy8vCisjZGVmaW5lIF9fQUxJR05fXyAgICAgICAgICAgICAgIGFsaWduIDQKKyNkZWZpbmUgX19FTkRfXyAgICAgICAgICAgICAgICAgZW5kCisjZGVmaW5lIF9fRVhQT1JUX18gICAgICAgICAgICAgIGV4cG9ydAorI2RlZmluZSBfX0lNUE9SVF9fICAgICAgICAgICAgICBpbXBvcnQKKyNkZWZpbmUgX19MQUJFTF9fCisjZGVmaW5lIF9fU1RSX18gICAgICAgICAgICAgICAgIGRjYgorI2RlZmluZSBfX1RIVU1CX0xBQkVMX18KKyNkZWZpbmUgX19XT1JEX18gICAgICAgICAgICAgICAgZGNkCisjZGVmaW5lIF9fSU5MSU5FX0RBVEFfXworCisjZW5kaWYgLy8gX19DQ19BUk0KKworCisjZW5kaWYgLy8gX19BU01ERUZfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGkuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWI1MzEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGkuaApAQCAtMCwwICsxLDExODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hZGkuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BRElfSF9fCisjZGVmaW5lIF9fSFdfQURJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIG1hY3JvcyBmb3IgY29udHJvbGxpbmcgdGhlIEFESSBtYXN0ZXIgYW5kCisvLyBhY2Nlc3NpbmcgQURJIHNsYXZlIHJlZ2lzdGVycyB2aWEgdGhlIEFESSBNYXN0ZXIuCisvLyBUaGVyZSBhcmUgMyBjYXRlZ29yaWVzIG9mIG1hY3JvcyBpbiB0aGlzIGZpbGU6CisvLyAgICAgICAgICAgICAgICAgLSBtYWNyb3MgdGhhdCBwcm92aWRlIGFuIG9mZnNldCB0byBhIHJlZ2lzdGVyCisvLyAgICAgICAgICAgICAgICAgICBsb2NhdGVkIHdpdGhpbiB0aGUgRERJIE1hc3RlciBpdHNlbGYuCisvLyAgICAgICAgICAgICAgICAgLSBtYWNyb3MgdGhhdCBkZWZpbmUgYml0cyBvciBiaXRmaWVsZHMKKy8vICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgRERJIE1hc3RlciBSZWdpc3RlcnMuCisvLyAgICAgICAgICAgICAgICAgLSBtYWNyb3MgdGhhdCBwcm92aWRlIGFuICJpbnN0cnVjdGlvbiBvZmZzZXQiCisvLyAgICAgICAgICAgICAgICAgICB0aGF0IGFyZSB1c2VkIHdoZW4gYWNjZXNzaW5nIGEgQURJIFNsYXZlLgorLy8KKy8vIFRoZSBtYWNyb3MgdGhhdCB0aGF0IHByb3ZpZGUgQURJIE1hc3RlciByZWdpc3RlciBvZmZzZXRzIGFuZAorLy8gZGVmaW5lIGJpdHMgYW5kIGJpdGZpZWxkcyBmb3IgdGhvc2UgcmVnaXN0ZXJzIGFyZSB0aGUgdHlwaWNhbAorLy8gbWFjcm9zIHRoYXQgYXBwZWFyIGluIG1vc3QgaHdfPG1vZHVsZT4uaCBoZWFkZXIgZmlsZXMuICBJbgorLy8gdGhlIGZvbGxvd2luZyBleGFtcGxlIEFESV9PX1NMQVZFQ09ORiBpcyBhIG1hY3JvIGZvciBhCisvLyByZWdpc3RlciBvZmZzZXQgYW5kIEFESV9TTEFWRUNPTkZfV0FJVEZPUkFDSyBpcyBhIG1hY3JvIGZvcgorLy8gYSBiaXQgaW4gdGhhdCByZWdpc3Rlci4gVGhpcyBleGFtcGxlIGNvZGUgd2lsbCBzZXQgdGhlIFdBSVRGT1JBQ0sKKy8vIGJpdCBpbiByZWdpc3RlciBBRElfT19TTEFWRUNPTkYgb2YgdGhlIEFESSBNYXN0ZXIuIChOb3RlOiB0aGlzCisvLyBhY2Nlc3MgdGhlIE1hc3RlciBub3QgdGhlIFNsYXZlKS4KKy8vCisvLyAgICBIV1JFRyhBREkzX0JBU0UgKyBBRElfT19TTEFWRUNPTkYpIHw9IEFESV9TTEFWRUNPTkZfV0FJVEZPUkFDSzsKKy8vCisvLyBUaGUgImluc3RydWN0aW9uIG9mZnNldCIgbWFjcm9zIGFyZSB1c2VkIHRvIHBhc3MgYW4gaW5zdHJ1Y3Rpb24gdG8KKy8vIHRoZSBBREkgTWFzdGVyIHdoZW4gYWNjZXNzaW5nIEFESSBzbGF2ZSByZWdpc3RlcnMuIFRoZXNlIG1hY3JvcyBhcmUKKy8vIG9ubHkgdXNlZCB3aGVuIGFjY2Vzc2luZyBBREkgU2xhdmUgUmVnaXN0ZXJzLiAoUmVtZW1iZXIgQURJCisvLyBNYXN0ZXIgUmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBub3JtYWxseSkuCisvLworLy8gVGhlIGluc3RydWN0aW9ucyBzdXBwb3J0ZWQgd2hlbiBhY2Nlc3NpbmcgYW4gQURJIFNsYXZlIFJlZ2lzdGVyIGZvbGxvdzoKKy8vICAgICAgICAtIERpcmVjdCBBY2Nlc3MgdG8gYW4gQURJIFNsYXZlIHJlZ2lzdGVyLiBJLmUuIHJlYWQgb3IKKy8vICAgICAgICAgIHdyaXRlIHRoZSByZWdpc3Rlci4KKy8vICAgICAgICAtIFNldCB0aGUgc3BlY2lmaWVkIGJpdHMgaW4gYSBBREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBDbGVhciB0aGUgc3BlY2lmaWVkIGJpdHMgaW4gYSBBREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBNYXNrIHdyaXRlIG9mIDQgYml0cyB0byB0aGUgYSBBREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBNYXNrIHdyaXRlIG9mIDggYml0cyB0byB0aGUgYSBBREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBNYXNrIHdyaXRlIG9mIDE2IGJpdHMgdG8gdGhlIGEgQURJIFNsYXZlIHJlZ2lzdGVyLgorLy8KKy8vIE5vdGU6IG9ubHkgdGhlICJEaXJlY3QgQWNjZXNzIiBvZmZzZXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZWFkaW5nCisvLyBhIEFESSBTbGF2ZSByZWdpc3Rlci4gT25seSA0LWJpdCByZWFkcyBhcmUgc3VwcG9ydGVkIGFuZCA4IGJpdHMgd3JpdGUgYXJlCisvLyBzdXBwb3J0ZWQgbmF0aXZlbHkuIElmIGFjY2Vzc2luZyB3aWRlciBiaXRmaWVsZHMsIHRoZSByZWFkL3dyaXRlIG9wZXJhdGlvbgorLy8gd2lsbCBiZSBzcHJlYWQgb3V0IG92ZXIgYSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zLiBUaGlzIGlzIGhpZGRlbiBmb3IgdGhlCisvLyB1c2VyLCBidXQgY2FuIHBvdGVudGlhbGx5IGJlIHZlcnkgdGltZWNvbnN1bWluZy4gRXNwZWNpYWxseSBvZiBydW5uaW5nCisvLyBvbiBhIHNsb3cgY2xvY2suCisvLworLy8gVGhlIGdlbmVyaWMgZm9ybWF0IG9mIHVzaW5nIHRoZXNlIG1hY3JvcyBmb3IgYSByZWFkIGZvbGxvd3M6CisvLyAgICAgICAvLyBSZWFkIGxvdyA4LWJpdHMgaW4gQURJX1NMQVZFX09GRgorLy8gICAgICAgbXl1c2hvcnR2YXIgPSBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUik7CisvLworLy8gICAgICAgLy8gUmVhZCBoaWdoIDgtYml0cyBpbiBBRElfU0xBVkVfT0ZGIChkYXRhWzMxOjE2XSkKKy8vICAgICAgIG15dXNob3J0dmFyID0gSFdSRUdCKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19ESVIpOworLy8KKy8vIE5vdGVzOiBJbiB0aGUgYWJvdmUgZXhhbXBsZToKKy8vICAgICAtIEFESV9NQVNURVJfQkFTRSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBBREkgTWFzdGVyIGRlZmluZWQKKy8vICAgICAgIGluIHRoZSBod19tZW1tYXAuaCBoZWFkZXIgZmlsZS4KKy8vICAgICAtIEFESV9TTEFWRV9PRkYgaXMgdGhlIEFESSBTbGF2ZSBvZmZzZXQgZGVmaW5lZCBpbiB0aGUKKy8vICAgICAgIGh3XzxhZGlfc2xhdmU+LmggaGVhZGVyIGZpbGUgKGUuZy4gaHdfYWRpXzNfcmVmc3lzX3RvcC5oIGZvciB0aGUgcmVmc3lzCisvLyAgICAgICBtb2R1bGUpLgorLy8gICAgIC0gQURJX09fRElSIGlzIHRoZSAiaW5zdHJ1Y3Rpb24gb2Zmc2V0IiBtYWNybyBkZWZpbmVkIGluIHRoaXMKKy8vICAgICAgIGZpbGUgdGhhdCBzcGVjaWZpZXMgdGhlIERpcmVjdCBBY2Nlc3MgaW5zdHJ1Y3Rpb24uCisvLworLy8gV3JpdGVzIGNhbiB1c2UgYW55IG9mIHRoZSAiaW5zdHJ1Y3Rpb24gbWFjcm9zIi4KKy8vIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgZG8gYSAiZGlyZWN0IHdyaXRlIiB0byBhbiBBREkgU2xhdmUgcmVnaXN0ZXIKKy8vIEFESV9TTEFWRV9PRkYgdXNpbmcgZGlmZmVyZW50IHNpemUgb3BlcmFuZHM6CisvLworLy8gICAgIC8vIC0tLS0tLS0tLS0gRElSRUNUIFdSSVRFUyAtLS0tLS0tLS0tCisvLyAgICAgLy8gV3JpdGUgMzItYml0cyBhbGlnbmVkCisvLyAgICAgSFdSRUcoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUikgPSAweDEyMzQ1Njc4OworLy8KKy8vICAgICAvLyBXcml0ZSAxNi1iaXRzIGFsaWduZWQgdG8gaGlnaCAxNi1iaXRzIHRoZW4gbG93IDE2LWJpdHMKKy8vICAgICAvLyBBZGQgMiB0byBnZXQgdG8gaGlnaCAxNi1iaXRzLgorLy8gICAgIEhXUkVHSChBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fRElSICsgMikgPSAweGFiY2Q7CisvLyAgICAgSFdSRUdIKEFESV9NQVNURVJfQkFTRSArIEFESV9TTEFWRV9PRkYgKyBBRElfT19ESVIpID0gMHhlZjAxOworLy8KKy8vICAgICAvLyBXcml0ZSBlYWNoIGJ5dGUgYXQgQURJX1NMQVZFX09GRiwgb25lIGF0IGEgdGltZS4KKy8vICAgICAvLyBBZGQgMSwyLG9yIDMgdG8gZ2V0IHRvIGJ5dGVzIDEsMiwgb3IgMy4KKy8vICAgICBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0RJUikgPSAweDMzOworLy8gICAgIEhXUkVHQihBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fRElSICsgMSkgPSAweDQ0OworLy8gICAgIEhXUkVHQihBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fRElSICsgMikgPSAweDU1OworLy8gICAgIEhXUkVHQihBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fRElSICsgMykgPSAweDY2OworLy8KKy8vICAgICAvLyAtLS0tLS0tLS0tIFNFVC9DTFIgLS0tLS0tLS0tLQorLy8gICAgIFRoZSBzZXQgYW5kIGNsZWFyIGZ1bmN0aW9ucyBiZWhhdmUgc2ltaWxhcmx5IHRvIGVhY2hvdGhlci4gRWFjaAorLy8gICAgIGNhbiBiZSBwZXJmb3JtZWQgb24gYW4gOC0sIDE2LSwgb3IgMzItYml0IG9wZXJhbmQuCisvLyAgICAgRXhhbXBsZXMgZm9sbG93OgorLy8gICAgIC8vIFNldCBhbGwgb2RkIGJpdHMgaW4gYSAzMi1iaXQgd29yZHMKKy8vICAgICBIV1JFRyhBRElfTUFTVEVSX0JBU0UgKyBBRElfU0xBVkVfT0ZGICsgQURJX09fU0VUKSA9IDB4YWFhYWFhYWE7CisvLworLy8gICAgIC8vIENsZWFyIGFsbCBiaXRzIGluIGJ5dGUgMiAoZGF0YVsyMzoxNl0pIHVzaW5nIDMyLWJpdCBvcGVyYW5kCisvLyAgICAgSFdSRUcoRERJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX0NMUikgPSAweDAwZmYwMDAwOworLy8KKy8vICAgICAvLyBTZXQgZXZlbiBiaXRzIGluIGJ5dGUgMiAoZGF0YVsyMzoxNl0pIHVzaW5nIDgtYml0IG9wZXJhbmQKKy8vICAgICBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIDIgKyBBRElfT19DTFIpID0gMHg1NTsKKy8vCisvLyAgICAgLy8gLS0tLS0tLS0tLSBNQVNLRUQgV1JJVEVTIC0tLS0tLS0tLS0KKy8vICAgICBUaGUgbWFzayB3cml0ZXMgYXJlIGEgYml0IGRpZmZlcmVudC4gVGhleSBvcGVyYXRlIG9uIG5pYmJsZXMsCisvLyAgICAgYnl0ZXMsIGFuZCAxNi1iaXQgZWxlbWVudHMuIFR3byBvcGVyYW5kcyBhcmUgcmVxdWlyZWQ7IGEgJ21hc2snCisvLyAgICAgYW5kICdkYXRhJzsgVGhlIG9wZXJhbmRzIGFyZSBjb25jYXRlbmF0ZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIG1hc3Rlci4KKy8vICAgICBlLmcuIHRoZSBtYXNrIGFuZCBkYXRhIGFyZSBjb21iaW5lZCBhcyBmb2xsb3dzIGZvciBhIDE2IGJpdCBtYXNrZWQKKy8vICAgICB3cml0ZToKKy8vICAgICAgICAgICAobWFzayA8PCAxNikgfCBkYXRhOworLy8gICAgIEV4YW1wbGVzIGZvbGxvdzoKKy8vCisvLyAgICAgLy8gRG8gYW4gNCBiaXQgbWFza2VkIHdyaXRlIChOaWJibGUpIG9mIDcgdG8gZGF0YVszOjBdKS4KKy8vICAgICAvLyBCeXRlIHdyaXRlIGlzIG5lZWRlZC4KKy8vICAgICBIV1JFR0IoQURJX01BU1RFUl9CQVNFICsgQURJX1NMQVZFX09GRiArIEFESV9PX01BU0s0QjAxKSA9IDB4Zjc7CisvLworLy8gICAgIC8vIERvIGFuIDQgYml0IG1hc2tlZCB3cml0ZSBvZiA0IHRvIGRhdGFbNzo0XSkuCisvLyAgICAgLy8gQWRkIDEgZm9yIG5leHQgbmliYmxlCisvLyAgICAgSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBBRElfT19NQVNLNEIwMSArIDEpID0gMHhmNDsKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgQURJIG1hc3RlciBpbnN0cnVjdGlvbiBvZmZzZXRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX09fRElSICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8vIE9mZnNldCBmb3IgdGhlIGRpcmVjdCBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc3RydWN0aW9uCisjZGVmaW5lIEFESV9PX1NFVCAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBPZmZzZXQgZm9yICdTZXQnIGluc3RydWN0aW9uLgorI2RlZmluZSBBRElfT19DTFIgICAgICAgICAgICAgMHgwMDAwMDAyMCAgLy8gT2Zmc2V0IGZvciAnQ2xlYXInIGluc3RydWN0aW9uLgorI2RlZmluZSBBRElfT19NQVNLNEIgICAgICAgICAgMHgwMDAwMDA0MCAgLy8gT2Zmc2V0IGZvciA0LWJpdCBtYXNrZWQgYWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBiaXRbbl0gaXMgd3JpdHRlbiBpZiBtYXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRbbl0gaXMgc2V0ICgnMScpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0cyA3OjQgYXJlIG1hc2suIEJpdHMgMzowIGFyZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWlyZXMgJ2J5dGUnIHdyaXRlLgorI2RlZmluZSBBRElfT19NQVNLOEIgICAgICAgICAgMHgwMDAwMDA2MCAgLy8gT2Zmc2V0IGZvciA4LWJpdCBtYXNrZWQgYWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBiaXRbbl0gaXMgd3JpdHRlbiBpZiBtYXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRbbl0gaXMgc2V0ICgnMScpLiBCaXRzIDE1OjggYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXNrLiBCaXRzIDc6MCBhcmUgZGF0YS4gUmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdzaG9ydCcgd3JpdGUuCisjZGVmaW5lIEFESV9PX01BU0sxNkIgICAgICAgICAweDAwMDAwMDgwICAvLyBPZmZzZXQgZm9yIDE2LWJpdCBtYXNrZWQgYWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBiaXRbbl0gaXMgd3JpdHRlbiBpZiBtYXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRbbl0gaXMgc2V0ICgnMScpLiBCaXRzIDMxOjE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgbWFzay4gQml0cyAxNTowIGFyZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWlyZXMgJ2xvbmcnIHdyaXRlLgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIEFESSByZWdpc3RlciBvZmZzZXRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX09fU0xBVkVTVEFUICAgICAgICAgMHgwMDAwMDAzMCAgLy8gQURJIFNsYXZlIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBBRElfT19TTEFWRUNPTkYgICAgICAgICAweDAwMDAwMDM4ICAvLyBBREkgTWFzdGVyIGNvbmZpZ3VyYXRpb24KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fU0xBVkVTVEFUIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9SRVEgICAgMHgwMDAwMDAwMiAgLy8gUmVhZCBjdXJyZW50IHZhbHVlIG9mIERJX1JFUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwuIFdyaXRpbmcgMCB0byB0aGlzIGJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZXMgYSBzeW5jIHdpdGggc2xhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyaW5nIHRoYXQgcmVxIHdpbGwgYmUgMC4gSXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgcmVjb21tZW5kZWQgdG8gd3JpdGUgMCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHJlZ2lzdGVyIGJlZm9yZSBwb3dlciBkb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBtYXN0ZXIuCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfUkVRX00gIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9SRVFfUyAgMQorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX0FDSyAgICAweDAwMDAwMDAxICAvLyBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgRElfQUNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hbAorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX0FDS19NICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfQUNLX1MgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX1NMQVZFQ09ORiByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQ09ORkxPQ0sgIDB4MDAwMDAwODAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2Vzc2libGUgd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh1bmxlc3Mgc3RpY2t5X2JpdF9vdmVyd3JpdGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0ZWQgb24gdG9wIG1vZHVsZSkKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9DT05GTE9DS19NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfU0xBVkVDT05GX0NPTkZMT0NLX1MgNworI2RlZmluZSBBRElfU0xBVkVDT05GX1dBSVRGT1JBQ0sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBBIHRyYW5zYWN0aW9uIG9uIHRoZSBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJmYWNlIGRvZXMgbm90IGVuZCB1bnRpbCBhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9XQUlURk9SQUNLX00gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV9TTEFWRUNPTkZfV0FJVEZPUkFDS19TIDIKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9BRElDTEtTUEVFRF9NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAgLy8gU2V0cyB0aGUgcGVyaW9kIG9mIGFuIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbnMuIEFsbCB0cmFuc2FjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFrZXMgYW4gZXZlbiBudW1iZXIgb2YgY2xvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGVzLC0gQURJIGNsb2NrIHJpc2luZyBlZGdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9jY3VycyBpbiB0aGUgbWlkZGxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwZXJpb2QuIERhdGEgYW5kIGN0cmwgdG8gc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgc2V0IHVwIGluIGJlZ2lubmluZyBvZiBjeWNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRhdGEgZnJvbSBzbGF2ZSBpcyByZWFkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiAwMDogQW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHRha2VzIDIgbWFzdGVyIGNsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xrZXMgMDE6IEFuIEFESSB0cmFuc2FjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YWtlcyA0IG1hc3RlciBjbG9jayBjeWNsZXMgMTA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZCBBREkgVHJhbnNhY3Rpb24gdGFrZXMgOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXN0ZXIgY2xvY2sgY3ljbGVzIDExOiBBbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gdGFrZXMgMTYgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrIGN5Y2xlcworCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQURJQ0xLU1BFRURfUyAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIHBzZXVkby1tYWdpYyBudW1iZXJzIHRoYXQgc2hvdWxkIGdvIGF3YXkuCisvLyBOZXcgY29kZSBzaG91bGQgbm90IHVzZSB0aGVzZSByZWdpc3RlcnMgYW5kIG9sZCBjb2RlIHNob3VsZCBiZSBwb3J0ZWQKKy8vIHRvIG5vdCB1c2UgdGhlc2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfT19ESVIwMyAgICAgICAgICAgICAweDAwMDAwMDAwICAvLyBEaXJlY3QgYWNjZXNzIGZvciBhZGkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDAgdG8gMworI2RlZmluZSBBRElfT19ESVI0NyAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBEaXJlY3QgYWNjZXNzIGZvciBhZGkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDQgdG8gNworI2RlZmluZSBBRElfT19ESVI4MTEgICAgICAgICAgICAweDAwMDAwMDA4ICAvLyBEaXJlY3QgYWNjZXNzIGZvciBhZGkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDggdG8gMTEKKyNkZWZpbmUgQURJX09fRElSMTIxNSAgICAgICAgICAgMHgwMDAwMDAwQyAgLy8gRGlyZWN0IGFjY2VzcyBmb3IgYWRpIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAxMiB0byAxNQorI2RlZmluZSBBRElfT19TRVQwMyAgICAgICAgICAgICAweDAwMDAwMDEwICAvLyBTZXQgcmVnaXN0ZXIgZm9yIEFESSBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgMCB0byAzCisjZGVmaW5lIEFESV9PX1NFVDQ3ICAgICAgICAgICAgIDB4MDAwMDAwMTQgIC8vIFNldCByZWdpc3RlciBmb3IgQURJIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA0IHRvIDcKKyNkZWZpbmUgQURJX09fU0VUODExICAgICAgICAgICAgMHgwMDAwMDAxOCAgLy8gU2V0IHJlZ2lzdGVyIGZvciBBREkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDggdG8gMTEKKyNkZWZpbmUgQURJX09fU0VUMTIxNSAgICAgICAgICAgMHgwMDAwMDAxQyAgLy8gU2V0IHJlZ2lzdGVyIGZvciBBREkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDEyIHRvIDE1CisjZGVmaW5lIEFESV9PX0NMUjAzICAgICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIENsZWFyIHJlZ2lzdGVyIGZvciBBREkgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDAgdG8gMworI2RlZmluZSBBRElfT19DTFI0NyAgICAgICAgICAgICAweDAwMDAwMDI0ICAvLyBDbGVhciByZWdpc3RlciBmb3IgQURJIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA0IHRvIDcKKyNkZWZpbmUgQURJX09fQ0xSODExICAgICAgICAgICAgMHgwMDAwMDAyOCAgLy8gQ2xlYXIgcmVnaXN0ZXIgZm9yIEFESSBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgOCB0byAxMQorI2RlZmluZSBBRElfT19DTFIxMjE1ICAgICAgICAgICAweDAwMDAwMDJDICAvLyBDbGVhciByZWdpc3RlciBmb3IgQURJIGJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAxMiB0byAxNQorI2RlZmluZSBBRElfT19TTEFWRVNUQVQgICAgICAgICAweDAwMDAwMDMwICAvLyBBREkgU2xhdmUgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIEFESV9PX1NMQVZFQ09ORiAgICAgICAgIDB4MDAwMDAwMzggIC8vIEFESSBNYXN0ZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlcgorI2RlZmluZSBBRElfT19NQVNLNEIwMSAgICAgICAgICAweDAwMDAwMDQwICAvLyBNYXNrZWQgYWNjZXNzICg0bS80ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyNkZWZpbmUgQURJX09fTUFTSzRCMjMgICAgICAgICAgMHgwMDAwMDA0NCAgLy8gTWFza2VkIGFjY2VzcyAoNG0vNGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzCisjZGVmaW5lIEFESV9PX01BU0s0QjQ1ICAgICAgICAgIDB4MDAwMDAwNDggIC8vIE1hc2tlZCBhY2Nlc3MgKDRtLzRkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgNCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNQorI2RlZmluZSBBRElfT19NQVNLNEI2NyAgICAgICAgICAweDAwMDAwMDRDICAvLyBNYXNrZWQgYWNjZXNzICg0bS80ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDYgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDcKKyNkZWZpbmUgQURJX09fTUFTSzRCODkgICAgICAgICAgMHgwMDAwMDA1MCAgLy8gTWFza2VkIGFjY2VzcyAoNG0vNGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA4IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA5CisjZGVmaW5lIEFESV9PX01BU0s0QjEwMTEgICAgICAgIDB4MDAwMDAwNTQgIC8vIE1hc2tlZCBhY2Nlc3MgKDRtLzRkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDExCisjZGVmaW5lIEFESV9PX01BU0s0QjEyMTMgICAgICAgIDB4MDAwMDAwNTggIC8vIE1hc2tlZCBhY2Nlc3MgKDRtLzRkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisjZGVmaW5lIEFESV9PX01BU0s0QjE0MTUgICAgICAgIDB4MDAwMDAwNUMgIC8vIE1hc2tlZCBhY2Nlc3MgKDRtLzRkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE1CisjZGVmaW5lIEFESV9PX01BU0s4QjAxICAgICAgICAgIDB4MDAwMDAwNjAgIC8vIE1hc2tlZCBhY2Nlc3MgKDhtLzhkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorI2RlZmluZSBBRElfT19NQVNLOEIyMyAgICAgICAgICAweDAwMDAwMDY0ICAvLyBNYXNrZWQgYWNjZXNzICg4bS84ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMKKyNkZWZpbmUgQURJX09fTUFTSzhCNDUgICAgICAgICAgMHgwMDAwMDA2OCAgLy8gTWFza2VkIGFjY2VzcyAoOG0vOGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyA0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA1CisjZGVmaW5lIEFESV9PX01BU0s4QjY3ICAgICAgICAgIDB4MDAwMDAwNkMgIC8vIE1hc2tlZCBhY2Nlc3MgKDhtLzhkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgNiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNworI2RlZmluZSBBRElfT19NQVNLOEI4OSAgICAgICAgICAweDAwMDAwMDcwICAvLyBNYXNrZWQgYWNjZXNzICg4bS84ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDggYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDkKKyNkZWZpbmUgQURJX09fTUFTSzhCMTAxMSAgICAgICAgMHgwMDAwMDA3NCAgLy8gTWFza2VkIGFjY2VzcyAoOG0vOGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAxMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEKKyNkZWZpbmUgQURJX09fTUFTSzhCMTIxMyAgICAgICAgMHgwMDAwMDA3OCAgLy8gTWFza2VkIGFjY2VzcyAoOG0vOGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAxMiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTMKKyNkZWZpbmUgQURJX09fTUFTSzhCMTQxNSAgICAgICAgMHgwMDAwMDA3QyAgLy8gTWFza2VkIGFjY2VzcyAoOG0vOGQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAxNCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTUKKyNkZWZpbmUgQURJX09fTUFTSzE2QjAxICAgICAgICAgMHgwMDAwMDA4MCAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyNkZWZpbmUgQURJX09fTUFTSzE2QjIzICAgICAgICAgMHgwMDAwMDA4NCAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMKKyNkZWZpbmUgQURJX09fTUFTSzE2QjQ1ICAgICAgICAgMHgwMDAwMDA4OCAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUKKyNkZWZpbmUgQURJX09fTUFTSzE2QjY3ICAgICAgICAgMHgwMDAwMDA4QyAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDYgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDcKKyNkZWZpbmUgQURJX09fTUFTSzE2Qjg5ICAgICAgICAgMHgwMDAwMDA5MCAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDggYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDkKKyNkZWZpbmUgQURJX09fTUFTSzE2QjEwMTEgICAgICAgMHgwMDAwMDA5NCAgLy8gTWFza2VkIGFjY2VzcyAoMTZtLzE2ZCkgZm9yIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYXQgYnl0ZSBvZmZzZXRzIDEwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMQorI2RlZmluZSBBRElfT19NQVNLMTZCMTIxMyAgICAgICAweDAwMDAwMDk4ICAvLyBNYXNrZWQgYWNjZXNzICgxNm0vMTZkKSBmb3IgQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyBhdCBieXRlIG9mZnNldHMgMTIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEzCisjZGVmaW5lIEFESV9PX01BU0sxNkIxNDE1ICAgICAgIDB4MDAwMDAwOUMgIC8vIE1hc2tlZCBhY2Nlc3MgKDE2bS8xNmQpIGZvciBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXJzIGF0IGJ5dGUgb2Zmc2V0cyAxNCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19ESVIwMyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9ESVIwM19CM19NICAgICAgICAgIDB4RkYwMDAwMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDMKKyNkZWZpbmUgQURJX0RJUjAzX0IzX1MgICAgICAgICAgMjQKKyNkZWZpbmUgQURJX0RJUjAzX0IyX00gICAgICAgICAgMHgwMEZGMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgMgorI2RlZmluZSBBRElfRElSMDNfQjJfUyAgICAgICAgICAxNgorI2RlZmluZSBBRElfRElSMDNfQjFfTSAgICAgICAgICAweDAwMDBGRjAwICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlciAxCisjZGVmaW5lIEFESV9ESVIwM19CMV9TICAgICAgICAgIDgKKyNkZWZpbmUgQURJX0RJUjAzX0IwX00gICAgICAgICAgMHgwMDAwMDBGRiAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgMAorI2RlZmluZSBBRElfRElSMDNfQjBfUyAgICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX0RJUjQ3IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX0RJUjQ3X0IzX00gICAgICAgICAgMHhGRjAwMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgNworI2RlZmluZSBBRElfRElSNDdfQjNfUyAgICAgICAgICAyNAorI2RlZmluZSBBRElfRElSNDdfQjJfTSAgICAgICAgICAweDAwRkYwMDAwICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlciA2CisjZGVmaW5lIEFESV9ESVI0N19CMl9TICAgICAgICAgIDE2CisjZGVmaW5lIEFESV9ESVI0N19CMV9NICAgICAgICAgIDB4MDAwMEZGMDAgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDUKKyNkZWZpbmUgQURJX0RJUjQ3X0IxX1MgICAgICAgICAgOAorI2RlZmluZSBBRElfRElSNDdfQjBfTSAgICAgICAgICAweDAwMDAwMEZGICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlciA0CisjZGVmaW5lIEFESV9ESVI0N19CMF9TICAgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fRElSODExIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX0RJUjgxMV9CM19NICAgICAgICAgMHhGRjAwMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEKKyNkZWZpbmUgQURJX0RJUjgxMV9CM19TICAgICAgICAgMjQKKyNkZWZpbmUgQURJX0RJUjgxMV9CMl9NICAgICAgICAgMHgwMEZGMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTAKKyNkZWZpbmUgQURJX0RJUjgxMV9CMl9TICAgICAgICAgMTYKKyNkZWZpbmUgQURJX0RJUjgxMV9CMV9NICAgICAgICAgMHgwMDAwRkYwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIgOQorI2RlZmluZSBBRElfRElSODExX0IxX1MgICAgICAgICA4CisjZGVmaW5lIEFESV9ESVI4MTFfQjBfTSAgICAgICAgIDB4MDAwMDAwRkYgIC8vIERpcmVjdCBhY2Nlc3MgdG8gQURJIHJlZ2lzdGVyIDgKKyNkZWZpbmUgQURJX0RJUjgxMV9CMF9TICAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19ESVIxMjE1IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjNfTSAgICAgICAgMHhGRjAwMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTUKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjNfUyAgICAgICAgMjQKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjJfTSAgICAgICAgMHgwMEZGMDAwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTQKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjJfUyAgICAgICAgMTYKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjFfTSAgICAgICAgMHgwMDAwRkYwMCAgLy8gRGlyZWN0IGFjY2VzcyB0byBBREkgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTMKKyNkZWZpbmUgQURJX0RJUjEyMTVfQjFfUyAgICAgICAgOAorI2RlZmluZSBBRElfRElSMTIxNV9CMF9NICAgICAgICAweDAwMDAwMEZGICAvLyBEaXJlY3QgYWNjZXNzIHRvIEFESSByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMgorI2RlZmluZSBBRElfRElSMTIxNV9CMF9TICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX1NFVDAzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NFVDAzX1MzX00gICAgICAgICAgMHhGRjAwMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDMuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMDNfUzNfUyAgICAgICAgICAyNAorI2RlZmluZSBBRElfU0VUMDNfUzJfTSAgICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMi4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQwM19TMl9TICAgICAgICAgIDE2CisjZGVmaW5lIEFESV9TRVQwM19TMV9NICAgICAgICAgIDB4MDAwMEZGMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxLiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDAzX1MxX1MgICAgICAgICAgOAorI2RlZmluZSBBRElfU0VUMDNfUzBfTSAgICAgICAgICAweDAwMDAwMEZGICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMC4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQwM19TMF9TICAgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fU0VUNDcgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfU0VUNDdfUzNfTSAgICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNy4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQ0N19TM19TICAgICAgICAgIDI0CisjZGVmaW5lIEFESV9TRVQ0N19TMl9NICAgICAgICAgIDB4MDBGRjAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA2LiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDQ3X1MyX1MgICAgICAgICAgMTYKKyNkZWZpbmUgQURJX1NFVDQ3X1MxX00gICAgICAgICAgMHgwMDAwRkYwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDUuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUNDdfUzFfUyAgICAgICAgICA4CisjZGVmaW5lIEFESV9TRVQ0N19TMF9NICAgICAgICAgIDB4MDAwMDAwRkYgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA0LiBSZWFkIHJldHVybnMgMC4KKyNkZWZpbmUgQURJX1NFVDQ3X1MwX1MgICAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19TRVQ4MTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfU0VUODExX1MzX00gICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTEuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUODExX1MzX1MgICAgICAgICAyNAorI2RlZmluZSBBRElfU0VUODExX1MyX00gICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTAuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUODExX1MyX1MgICAgICAgICAxNgorI2RlZmluZSBBRElfU0VUODExX1MxX00gICAgICAgICAweDAwMDBGRjAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOS4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQ4MTFfUzFfUyAgICAgICAgIDgKKyNkZWZpbmUgQURJX1NFVDgxMV9TMF9NICAgICAgICAgMHgwMDAwMDBGRiAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDguIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUODExX1MwX1MgICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX1NFVDEyMTUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfU0VUMTIxNV9TM19NICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTUuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMTIxNV9TM19TICAgICAgICAyNAorI2RlZmluZSBBRElfU0VUMTIxNV9TMl9NICAgICAgICAweDAwRkYwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTQuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMTIxNV9TMl9TICAgICAgICAxNgorI2RlZmluZSBBRElfU0VUMTIxNV9TMV9NICAgICAgICAweDAwMDBGRjAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTMuIFJlYWQgcmV0dXJucyAwLgorI2RlZmluZSBBRElfU0VUMTIxNV9TMV9TICAgICAgICA4CisjZGVmaW5lIEFESV9TRVQxMjE1X1MwX00gICAgICAgIDB4MDAwMDAwRkYgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMi4gUmVhZCByZXR1cm5zIDAuCisjZGVmaW5lIEFESV9TRVQxMjE1X1MwX1MgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fQ0xSMDMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfQ0xSMDNfUzNfTSAgICAgICAgICAweEZGMDAwMDAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAzCisjZGVmaW5lIEFESV9DTFIwM19TM19TICAgICAgICAgIDI0CisjZGVmaW5lIEFESV9DTFIwM19TMl9NICAgICAgICAgIDB4MDBGRjAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDIKKyNkZWZpbmUgQURJX0NMUjAzX1MyX1MgICAgICAgICAgMTYKKyNkZWZpbmUgQURJX0NMUjAzX1MxX00gICAgICAgICAgMHgwMDAwRkYwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMQorI2RlZmluZSBBRElfQ0xSMDNfUzFfUyAgICAgICAgICA4CisjZGVmaW5lIEFESV9DTFIwM19TMF9NICAgICAgICAgIDB4MDAwMDAwRkYgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDAKKyNkZWZpbmUgQURJX0NMUjAzX1MwX1MgICAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19DTFI0NyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9DTFI0N19TM19NICAgICAgICAgIDB4RkYwMDAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDcKKyNkZWZpbmUgQURJX0NMUjQ3X1MzX1MgICAgICAgICAgMjQKKyNkZWZpbmUgQURJX0NMUjQ3X1MyX00gICAgICAgICAgMHgwMEZGMDAwMCAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNgorI2RlZmluZSBBRElfQ0xSNDdfUzJfUyAgICAgICAgICAxNgorI2RlZmluZSBBRElfQ0xSNDdfUzFfTSAgICAgICAgICAweDAwMDBGRjAwICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA1CisjZGVmaW5lIEFESV9DTFI0N19TMV9TICAgICAgICAgIDgKKyNkZWZpbmUgQURJX0NMUjQ3X1MwX00gICAgICAgICAgMHgwMDAwMDBGRiAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNAorI2RlZmluZSBBRElfQ0xSNDdfUzBfUyAgICAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX0NMUjgxMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9DTFI4MTFfUzNfTSAgICAgICAgIDB4RkYwMDAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDExCisjZGVmaW5lIEFESV9DTFI4MTFfUzNfUyAgICAgICAgIDI0CisjZGVmaW5lIEFESV9DTFI4MTFfUzJfTSAgICAgICAgIDB4MDBGRjAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEwCisjZGVmaW5lIEFESV9DTFI4MTFfUzJfUyAgICAgICAgIDE2CisjZGVmaW5lIEFESV9DTFI4MTFfUzFfTSAgICAgICAgIDB4MDAwMEZGMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDkKKyNkZWZpbmUgQURJX0NMUjgxMV9TMV9TICAgICAgICAgOAorI2RlZmluZSBBRElfQ0xSODExX1MwX00gICAgICAgICAweDAwMDAwMEZGICAvLyBBIGhpZ2ggYml0IHZhbHVlIHdpbGwgY2xlYXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0IGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA4CisjZGVmaW5lIEFESV9DTFI4MTFfUzBfUyAgICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fQ0xSMTIxNSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9DTFIxMjE1X1MzX00gICAgICAgIDB4RkYwMDAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE1CisjZGVmaW5lIEFESV9DTFIxMjE1X1MzX1MgICAgICAgIDI0CisjZGVmaW5lIEFESV9DTFIxMjE1X1MyX00gICAgICAgIDB4MDBGRjAwMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE0CisjZGVmaW5lIEFESV9DTFIxMjE1X1MyX1MgICAgICAgIDE2CisjZGVmaW5lIEFESV9DTFIxMjE1X1MxX00gICAgICAgIDB4MDAwMEZGMDAgIC8vIEEgaGlnaCBiaXQgdmFsdWUgd2lsbCBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEzCisjZGVmaW5lIEFESV9DTFIxMjE1X1MxX1MgICAgICAgIDgKKyNkZWZpbmUgQURJX0NMUjEyMTVfUzBfTSAgICAgICAgMHgwMDAwMDBGRiAgLy8gQSBoaWdoIGJpdCB2YWx1ZSB3aWxsIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdCBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTIKKyNkZWZpbmUgQURJX0NMUjEyMTVfUzBfUyAgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fU0xBVkVTVEFUIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9SRVEgICAgMHgwMDAwMDAwMiAgLy8gUmVhZCBjdXJyZW50IHZhbHVlIG9mIERJX1JFUQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwuIFdyaXRpbmcgMCB0byB0aGlzIGJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZXMgYSBzeW5jIHdpdGggc2xhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyaW5nIHRoYXQgcmVxIHdpbGwgYmUgMC4gSXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgcmVjb21tZW5kZWQgdG8gd3JpdGUgMCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHJlZ2lzdGVyIGJlZm9yZSBwb3dlciBkb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBtYXN0ZXIuCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfUkVRX00gIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJX1NMQVZFU1RBVF9ESV9SRVFfUyAgMQorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX0FDSyAgICAweDAwMDAwMDAxICAvLyBSZWFkIGN1cnJlbnQgdmFsdWUgb2YgRElfQUNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hbAorI2RlZmluZSBBRElfU0xBVkVTVEFUX0RJX0FDS19NICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV9TTEFWRVNUQVRfRElfQUNLX1MgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX1NMQVZFQ09ORiByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQ09ORkxPQ0sgIDB4MDAwMDAwODAgIC8vIFRoaXMgcmVnaXN0ZXIgaXMgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2Vzc2libGUgd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh1bmxlc3Mgc3RpY2t5X2JpdF9vdmVyd3JpdGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0ZWQgb24gdG9wIG1vZHVsZSkKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9DT05GTE9DS19NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfU0xBVkVDT05GX0NPTkZMT0NLX1MgNworI2RlZmluZSBBRElfU0xBVkVDT05GX1dBSVRGT1JBQ0sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBBIHRyYW5zYWN0aW9uIG9uIHRoZSBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJmYWNlIGRvZXMgbm90IGVuZCB1bnRpbCBhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9XQUlURk9SQUNLX00gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV9TTEFWRUNPTkZfV0FJVEZPUkFDS19TIDIKKyNkZWZpbmUgQURJX1NMQVZFQ09ORl9BRElDTEtTUEVFRF9NIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAgLy8gU2V0cyB0aGUgcGVyaW9kIG9mIGFuIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbnMuIEFsbCB0cmFuc2FjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFrZXMgYW4gZXZlbiBudW1iZXIgb2YgY2xvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGVzLC0gQURJIGNsb2NrIHJpc2luZyBlZGdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9jY3VycyBpbiB0aGUgbWlkZGxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwZXJpb2QuIERhdGEgYW5kIGN0cmwgdG8gc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgc2V0IHVwIGluIGJlZ2lubmluZyBvZiBjeWNsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRhdGEgZnJvbSBzbGF2ZSBpcyByZWFkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiAwMDogQW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIHRha2VzIDIgbWFzdGVyIGNsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xrZXMgMDE6IEFuIEFESSB0cmFuc2FjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YWtlcyA0IG1hc3RlciBjbG9jayBjeWNsZXMgMTA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZCBBREkgVHJhbnNhY3Rpb24gdGFrZXMgOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXN0ZXIgY2xvY2sgY3ljbGVzIDExOiBBbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24gdGFrZXMgMTYgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrIGN5Y2xlcworCisjZGVmaW5lIEFESV9TTEFWRUNPTkZfQURJQ0xLU1BFRURfUyAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s0QjAxIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s0QjAxX00xSF9NICAgICAgMHhGMDAwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMQorI2RlZmluZSBBRElfTUFTSzRCMDFfTTFIX1MgICAgICAyOAorI2RlZmluZSBBRElfTUFTSzRCMDFfRDFIX00gICAgICAweDBGMDAwMDAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxLCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xSCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMDFfRDFIX1MgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzRCMDFfTTFMX00gICAgICAweDAwRjAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxCisjZGVmaW5lIEFESV9NQVNLNEIwMV9NMUxfUyAgICAgIDIwCisjZGVmaW5lIEFESV9NQVNLNEIwMV9EMUxfTSAgICAgIDB4MDAwRjAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTFMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIwMV9EMUxfUyAgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLNEIwMV9NMEhfTSAgICAgIDB4MDAwMEYwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDAKKyNkZWZpbmUgQURJX01BU0s0QjAxX00wSF9TICAgICAgMTIKKyNkZWZpbmUgQURJX01BU0s0QjAxX0QwSF9NICAgICAgMHgwMDAwMEYwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMCwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMEggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjAxX0QwSF9TICAgICAgOAorI2RlZmluZSBBRElfTUFTSzRCMDFfTTBMX00gICAgICAweDAwMDAwMEYwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAwCisjZGVmaW5lIEFESV9NQVNLNEIwMV9NMExfUyAgICAgIDQKKyNkZWZpbmUgQURJX01BU0s0QjAxX0QwTF9NICAgICAgMHgwMDAwMDAwRiAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMCwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMEwgd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjAxX0QwTF9TICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19NQVNLNEIyMyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLNEIyM19NMUhfTSAgICAgIDB4RjAwMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDMKKyNkZWZpbmUgQURJX01BU0s0QjIzX00xSF9TICAgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0QjIzX0QxSF9NICAgICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMywgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjIzX0QxSF9TICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0QjIzX00xTF9NICAgICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMworI2RlZmluZSBBRElfTUFTSzRCMjNfTTFMX1MgICAgICAyMAorI2RlZmluZSBBRElfTUFTSzRCMjNfRDFMX00gICAgICAweDAwMEYwMDAwICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAzLCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMjNfRDFMX1MgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCMjNfTTBIX00gICAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAyCisjZGVmaW5lIEFESV9NQVNLNEIyM19NMEhfUyAgICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEIyM19EMEhfTSAgICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDIsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIyM19EMEhfUyAgICAgIDgKKyNkZWZpbmUgQURJX01BU0s0QjIzX00wTF9NICAgICAgMHgwMDAwMDBGMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMgorI2RlZmluZSBBRElfTUFTSzRCMjNfTTBMX1MgICAgICA0CisjZGVmaW5lIEFESV9NQVNLNEIyM19EMExfTSAgICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDIsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIyM19EMExfUyAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzRCNDUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzRCNDVfTTFIX00gICAgICAweEYwMDAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA1CisjZGVmaW5lIEFESV9NQVNLNEI0NV9NMUhfUyAgICAgIDI4CisjZGVmaW5lIEFESV9NQVNLNEI0NV9EMUhfTSAgICAgIDB4MEYwMDAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDUsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTFIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI0NV9EMUhfUyAgICAgIDI0CisjZGVmaW5lIEFESV9NQVNLNEI0NV9NMUxfTSAgICAgIDB4MDBGMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDUKKyNkZWZpbmUgQURJX01BU0s0QjQ1X00xTF9TICAgICAgMjAKKyNkZWZpbmUgQURJX01BU0s0QjQ1X0QxTF9NICAgICAgMHgwMDBGMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNSwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUwgd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjQ1X0QxTF9TICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s0QjQ1X00wSF9NICAgICAgMHgwMDAwRjAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNAorI2RlZmluZSBBRElfTUFTSzRCNDVfTTBIX1MgICAgICAxMgorI2RlZmluZSBBRElfTUFTSzRCNDVfRDBIX00gICAgICAweDAwMDAwRjAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA0LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0wSCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCNDVfRDBIX1MgICAgICA4CisjZGVmaW5lIEFESV9NQVNLNEI0NV9NMExfTSAgICAgIDB4MDAwMDAwRjAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDQKKyNkZWZpbmUgQURJX01BU0s0QjQ1X00wTF9TICAgICAgNAorI2RlZmluZSBBRElfTUFTSzRCNDVfRDBMX00gICAgICAweDAwMDAwMDBGICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA0LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0wTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCNDVfRDBMX1MgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEFESV9PX01BU0s0QjY3IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s0QjY3X00xSF9NICAgICAgMHhGMDAwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNworI2RlZmluZSBBRElfTUFTSzRCNjdfTTFIX1MgICAgICAyOAorI2RlZmluZSBBRElfTUFTSzRCNjdfRDFIX00gICAgICAweDBGMDAwMDAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA3LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xSCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCNjdfRDFIX1MgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzRCNjdfTTFMX00gICAgICAweDAwRjAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA3CisjZGVmaW5lIEFESV9NQVNLNEI2N19NMUxfUyAgICAgIDIwCisjZGVmaW5lIEFESV9NQVNLNEI2N19EMUxfTSAgICAgIDB4MDAwRjAwMDAgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDcsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTFMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI2N19EMUxfUyAgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLNEI2N19NMEhfTSAgICAgIDB4MDAwMEYwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDYKKyNkZWZpbmUgQURJX01BU0s0QjY3X00wSF9TICAgICAgMTIKKyNkZWZpbmUgQURJX01BU0s0QjY3X0QwSF9NICAgICAgMHgwMDAwMEYwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNiwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMEggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjY3X0QwSF9TICAgICAgOAorI2RlZmluZSBBRElfTUFTSzRCNjdfTTBMX00gICAgICAweDAwMDAwMEYwICAvLyBNYXNrIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA2CisjZGVmaW5lIEFESV9NQVNLNEI2N19NMExfUyAgICAgIDQKKyNkZWZpbmUgQURJX01BU0s0QjY3X0QwTF9NICAgICAgMHgwMDAwMDAwRiAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgNiwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMEwgd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjY3X0QwTF9TICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBBRElfT19NQVNLNEI4OSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLNEI4OV9NMUhfTSAgICAgIDB4RjAwMDAwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDkKKyNkZWZpbmUgQURJX01BU0s0Qjg5X00xSF9TICAgICAgMjgKKyNkZWZpbmUgQURJX01BU0s0Qjg5X0QxSF9NICAgICAgMHgwRjAwMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbNzo0XSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOSwgLSBvbmx5IGJpdHMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbWFzayBNMUggd2lsbCBiZSBhZmZlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0Qjg5X0QxSF9TICAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0Qjg5X00xTF9NICAgICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOQorI2RlZmluZSBBRElfTUFTSzRCODlfTTFMX1MgICAgICAyMAorI2RlZmluZSBBRElfTUFTSzRCODlfRDFMX00gICAgICAweDAwMEYwMDAwICAvLyBEYXRhIGZvciBiaXRzIFszOjBdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA5LCAtIG9ubHkgYml0cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBtYXNrIE0xTCB3aWxsIGJlIGFmZmVjdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCODlfRDFMX1MgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzRCODlfTTBIX00gICAgICAweDAwMDBGMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciA4CisjZGVmaW5lIEFESV9NQVNLNEI4OV9NMEhfUyAgICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEI4OV9EMEhfTSAgICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDgsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBIIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI4OV9EMEhfUyAgICAgIDgKKyNkZWZpbmUgQURJX01BU0s0Qjg5X00wTF9NICAgICAgMHgwMDAwMDBGMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgOAorI2RlZmluZSBBRElfTUFTSzRCODlfTTBMX1MgICAgICA0CisjZGVmaW5lIEFESV9NQVNLNEI4OV9EMExfTSAgICAgIDB4MDAwMDAwMEYgIC8vIERhdGEgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDgsIC0gb25seSBiaXRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG1hc2sgTTBMIHdpbGwgYmUgYWZmZWN0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEI4OV9EMExfUyAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0s0QjEwMTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9NMUhfTSAgICAweEYwMDAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMQorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9NMUhfUyAgICAyOAorI2RlZmluZSBBRElfTUFTSzRCMTAxMV9EMUhfTSAgICAweDBGMDAwMDAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMSwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNMUggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfRDFIX1MgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfTTFMX00gICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTEKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfTTFMX1MgICAgMjAKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfRDFMX00gICAgMHgwMDBGMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTEsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTFMIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX0QxTF9TICAgIDE2CisjZGVmaW5lIEFESV9NQVNLNEIxMDExX00wSF9NICAgIDB4MDAwMEYwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEwCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX00wSF9TICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX0QwSF9NICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEwLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0wSCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTAxMV9EMEhfUyAgICA4CisjZGVmaW5lIEFESV9NQVNLNEIxMDExX00wTF9NICAgIDB4MDAwMDAwRjAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEwCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX00wTF9TICAgIDQKKyNkZWZpbmUgQURJX01BU0s0QjEwMTFfRDBMX00gICAgMHgwMDAwMDAwRiAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTAsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTBMIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxMDExX0QwTF9TICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0s0QjEyMTMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzRCMTIxM19NMUhfTSAgICAweEYwMDAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMworI2RlZmluZSBBRElfTUFTSzRCMTIxM19NMUhfUyAgICAyOAorI2RlZmluZSBBRElfTUFTSzRCMTIxM19EMUhfTSAgICAweDBGMDAwMDAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxMywgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNMUggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfRDFIX1MgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfTTFMX00gICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTMKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfTTFMX1MgICAgMjAKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfRDFMX00gICAgMHgwMDBGMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTMsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTFMIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX0QxTF9TICAgIDE2CisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX00wSF9NICAgIDB4MDAwMEYwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEyCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX00wSF9TICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX0QwSF9NICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEyLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0wSCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTIxM19EMEhfUyAgICA4CisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX00wTF9NICAgIDB4MDAwMDAwRjAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDEyCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX00wTF9TICAgIDQKKyNkZWZpbmUgQURJX01BU0s0QjEyMTNfRDBMX00gICAgMHgwMDAwMDAwRiAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTIsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTBMIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxMjEzX0QwTF9TICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0s0QjE0MTUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9NMUhfTSAgICAweEYwMDAwMDAwICAvLyBNYXNrIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNQorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9NMUhfUyAgICAyOAorI2RlZmluZSBBRElfTUFTSzRCMTQxNV9EMUhfTSAgICAweDBGMDAwMDAwICAvLyBEYXRhIGZvciBiaXRzIFs3OjRdIGluIEFESQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciAxNSwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNMUggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfRDFIX1MgICAgMjQKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfTTFMX00gICAgMHgwMEYwMDAwMCAgLy8gTWFzayBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTUKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfTTFMX1MgICAgMjAKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfRDFMX00gICAgMHgwMDBGMDAwMCAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTUsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTFMIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X0QxTF9TICAgIDE2CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X00wSF9NICAgIDB4MDAwMEYwMDAgIC8vIE1hc2sgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE0CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X00wSF9TICAgIDEyCisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X0QwSF9NICAgIDB4MDAwMDBGMDAgIC8vIERhdGEgZm9yIGJpdHMgWzc6NF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE0LCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0wSCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzRCMTQxNV9EMEhfUyAgICA4CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X00wTF9NICAgIDB4MDAwMDAwRjAgIC8vIE1hc2sgZm9yIGJpdHMgWzM6MF0gaW4gQURJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIDE0CisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X00wTF9TICAgIDQKKyNkZWZpbmUgQURJX01BU0s0QjE0MTVfRDBMX00gICAgMHgwMDAwMDAwRiAgLy8gRGF0YSBmb3IgYml0cyBbMzowXSBpbiBBREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgMTQsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTTBMIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLNEIxNDE1X0QwTF9TICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzhCMDEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCMDFfTTFfTSAgICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMQorI2RlZmluZSBBRElfTUFTSzhCMDFfTTFfUyAgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCMDFfRDFfTSAgICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMSwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMDFfRDFfUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCMDFfTTBfTSAgICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMAorI2RlZmluZSBBRElfTUFTSzhCMDFfTTBfUyAgICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEIwMV9EMF9NICAgICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciAwLCAtIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEIwMV9EMF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzhCMjMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCMjNfTTFfTSAgICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMworI2RlZmluZSBBRElfTUFTSzhCMjNfTTFfUyAgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCMjNfRDFfTSAgICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMywgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMjNfRDFfUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCMjNfTTBfTSAgICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMgorI2RlZmluZSBBRElfTUFTSzhCMjNfTTBfUyAgICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEIyM19EMF9NICAgICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciAyLCAtIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEIyM19EMF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzhCNDUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCNDVfTTFfTSAgICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgNQorI2RlZmluZSBBRElfTUFTSzhCNDVfTTFfUyAgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCNDVfRDFfTSAgICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgNSwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCNDVfRDFfUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCNDVfTTBfTSAgICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgNAorI2RlZmluZSBBRElfTUFTSzhCNDVfTTBfUyAgICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEI0NV9EMF9NICAgICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciA0LCAtIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEI0NV9EMF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzhCNjcgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCNjdfTTFfTSAgICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgNworI2RlZmluZSBBRElfTUFTSzhCNjdfTTFfUyAgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCNjdfRDFfTSAgICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgNywgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCNjdfRDFfUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCNjdfTTBfTSAgICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgNgorI2RlZmluZSBBRElfTUFTSzhCNjdfTTBfUyAgICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEI2N19EMF9NICAgICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciA2LCAtIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEI2N19EMF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgQURJX09fTUFTSzhCODkgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCODlfTTFfTSAgICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgOQorI2RlZmluZSBBRElfTUFTSzhCODlfTTFfUyAgICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCODlfRDFfTSAgICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgOSwgLSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCODlfRDFfUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCODlfTTBfTSAgICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgOAorI2RlZmluZSBBRElfTUFTSzhCODlfTTBfUyAgICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEI4OV9EMF9NICAgICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciA4LCAtIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEI4OV9EMF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0s4QjEwMTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzhCMTAxMV9NMV9NICAgICAweEZGMDAwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMTEKKyNkZWZpbmUgQURJX01BU0s4QjEwMTFfTTFfUyAgICAgMjQKKyNkZWZpbmUgQURJX01BU0s4QjEwMTFfRDFfTSAgICAgMHgwMEZGMDAwMCAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDExLCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYml0cyBzZWxlY3RlZCBieSBtYXNrIE0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEIxMDExX0QxX1MgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLOEIxMDExX00wX00gICAgIDB4MDAwMEZGMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAxMAorI2RlZmluZSBBRElfTUFTSzhCMTAxMV9NMF9TICAgICA4CisjZGVmaW5lIEFESV9NQVNLOEIxMDExX0QwX00gICAgIDB4MDAwMDAwRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciAxMCwgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMTAxMV9EMF9TICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLOEIxMjEzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0s4QjEyMTNfTTFfTSAgICAgMHhGRjAwMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDEzCisjZGVmaW5lIEFESV9NQVNLOEIxMjEzX00xX1MgICAgIDI0CisjZGVmaW5lIEFESV9NQVNLOEIxMjEzX0QxX00gICAgIDB4MDBGRjAwMDAgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciAxMywgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGJpdHMgc2VsZWN0ZWQgYnkgbWFzayBNMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzhCMTIxM19EMV9TICAgICAxNgorI2RlZmluZSBBRElfTUFTSzhCMTIxM19NMF9NICAgICAweDAwMDBGRjAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMTIKKyNkZWZpbmUgQURJX01BU0s4QjEyMTNfTTBfUyAgICAgOAorI2RlZmluZSBBRElfTUFTSzhCMTIxM19EMF9NICAgICAweDAwMDAwMEZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMTIsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjEyMTNfRDBfUyAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzhCMTQxNSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLOEIxNDE1X00xX00gICAgIDB4RkYwMDAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAxNQorI2RlZmluZSBBRElfTUFTSzhCMTQxNV9NMV9TICAgICAyNAorI2RlZmluZSBBRElfTUFTSzhCMTQxNV9EMV9NICAgICAweDAwRkYwMDAwICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgMTUsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBiaXRzIHNlbGVjdGVkIGJ5IG1hc2sgTTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0s4QjE0MTVfRDFfUyAgICAgMTYKKyNkZWZpbmUgQURJX01BU0s4QjE0MTVfTTBfTSAgICAgMHgwMDAwRkYwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDE0CisjZGVmaW5lIEFESV9NQVNLOEIxNDE1X00wX1MgICAgIDgKKyNkZWZpbmUgQURJX01BU0s4QjE0MTVfRDBfTSAgICAgMHgwMDAwMDBGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIDE0LCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYml0cyBzZWxlY3RlZCBieSBtYXNrIE0wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLOEIxNDE1X0QwX1MgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0sxNkIwMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLMTZCMDFfTV9NICAgICAgIDB4RkZGRjAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAwIGFuZCAxCisjZGVmaW5lIEFESV9NQVNLMTZCMDFfTV9TICAgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLMTZCMDFfRF9NICAgICAgIDB4MDAwMEZGRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDAgYW5kIDEsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzE2QjAxX0RfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLMTZCMjMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzE2QjIzX01fTSAgICAgICAweEZGRkYwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMiBhbmQgMworI2RlZmluZSBBRElfTUFTSzE2QjIzX01fUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzE2QjIzX0RfTSAgICAgICAweDAwMDBGRkZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAyIGFuZCAzLCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0sxNkIyM19EX1MgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzE2QjQ1IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0sxNkI0NV9NX00gICAgICAgMHhGRkZGMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDQgYW5kIDUKKyNkZWZpbmUgQURJX01BU0sxNkI0NV9NX1MgICAgICAgMTYKKyNkZWZpbmUgQURJX01BU0sxNkI0NV9EX00gICAgICAgMHgwMDAwRkZGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgNCBhbmQgNSwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLMTZCNDVfRF9TICAgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0sxNkI2NyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLMTZCNjdfTV9NICAgICAgIDB4RkZGRjAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciA2IGFuZCA3CisjZGVmaW5lIEFESV9NQVNLMTZCNjdfTV9TICAgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLMTZCNjdfRF9NICAgICAgIDB4MDAwMEZGRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDYgYW5kIDcsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzE2QjY3X0RfUyAgICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLMTZCODkgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzE2Qjg5X01fTSAgICAgICAweEZGRkYwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgOCBhbmQgOQorI2RlZmluZSBBRElfTUFTSzE2Qjg5X01fUyAgICAgICAxNgorI2RlZmluZSBBRElfTUFTSzE2Qjg5X0RfTSAgICAgICAweDAwMDBGRkZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyA4IGFuZCA5LCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0sxNkI4OV9EX1MgICAgICAgMAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZQorLy8gQURJX09fTUFTSzE2QjEwMTEgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBRElfTUFTSzE2QjEwMTFfTV9NICAgICAweEZGRkYwMDAwICAvLyBNYXNrIGZvciBBREkgcmVnaXN0ZXIgMTAgYW5kIDExCisjZGVmaW5lIEFESV9NQVNLMTZCMTAxMV9NX1MgICAgIDE2CisjZGVmaW5lIEFESV9NQVNLMTZCMTAxMV9EX00gICAgIDB4MDAwMEZGRkYgIC8vIERhdGEgZm9yIEFESSByZWdpc3RlciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIDEwIGFuZCAxMSwgLSBvbmx5IGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgYnkgbWFzayBNIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZmZWN0ZWQgYnkgYWNjZXNzCisjZGVmaW5lIEFESV9NQVNLMTZCMTAxMV9EX1MgICAgIDAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUKKy8vIEFESV9PX01BU0sxNkIxMjEzIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgQURJX01BU0sxNkIxMjEzX01fTSAgICAgMHhGRkZGMDAwMCAgLy8gTWFzayBmb3IgQURJIHJlZ2lzdGVyIDEyIGFuZCAxMworI2RlZmluZSBBRElfTUFTSzE2QjEyMTNfTV9TICAgICAxNgorI2RlZmluZSBBRElfTUFTSzE2QjEyMTNfRF9NICAgICAweDAwMDBGRkZGICAvLyBEYXRhIGZvciBBREkgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyAxMiBhbmQgMTMsIC0gb25seSBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ5IG1hc2sgTSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmZmVjdGVkIGJ5IGFjY2VzcworI2RlZmluZSBBRElfTUFTSzE2QjEyMTNfRF9TICAgICAwCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlCisvLyBBRElfT19NQVNLMTZCMTQxNSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEFESV9NQVNLMTZCMTQxNV9NX00gICAgIDB4RkZGRjAwMDAgIC8vIE1hc2sgZm9yIEFESSByZWdpc3RlciAxNCBhbmQgMTUKKyNkZWZpbmUgQURJX01BU0sxNkIxNDE1X01fUyAgICAgMTYKKyNkZWZpbmUgQURJX01BU0sxNkIxNDE1X0RfTSAgICAgMHgwMDAwRkZGRiAgLy8gRGF0YSBmb3IgQURJIHJlZ2lzdGVyIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgMTQgYW5kIDE1LCAtIG9ubHkgYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBieSBtYXNrIE0gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBieSBhY2Nlc3MKKyNkZWZpbmUgQURJX01BU0sxNkIxNDE1X0RfUyAgICAgMAorCisjZW5kaWYgLy8gX19IV19BRElfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfMF9yZi5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzBfcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDNhOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzBfcmYuaApAQCAtMCwwICsxLDk5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2FkaV8wX3JmX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FESV8wX1JGX0hfXworI2RlZmluZSBfX0hXX0FESV8wX1JGX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFESV8wX1JGIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fTE5BQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19MTkFDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0xOQUNUTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBTVBDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFNUENUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQU1QQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fUEFDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19QQUNUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX1BBQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fUkZMRE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19SRkxETzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX1JGTERPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBRENDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFEQ0xGQ0ZHMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQURDTEZDRkcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBRENEQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFEQ1FVQU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQURDQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBRENDVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFMRE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGQUxETzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZBTERPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkRMRE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX0lGRExETzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8wX1JGX09fSUZETERPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzBfUkZfT19JRkFNUENUTDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMF9SRl9PX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19MTkFDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gTUlYX0FECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gTUlYX1NFX1JGTiAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSVhfU0VfUkZQICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JWF9ESUZGX01PREUgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX01JWF9BRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTUlYX0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9NSVhfQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX01JWF9BRF9NSVhfU0VfUkZOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEEwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTUlYX0FEX01JWF9TRV9SRlAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9NSVhfQURfTUlYX0RJRkZfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMzoyXSBMTkFfQUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBMTkFfU0VfUkZOICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIExOQV9TRV9SRlAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTE5BX0RJRkZfTU9ERSAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTE5BX0FEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9MTkFfQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0xOQV9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfTE5BX0FEX0xOQV9TRV9SRk4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9MTkFfQURfTE5BX1NFX1JGUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0xOQV9BRF9MTkFfRElGRl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwwX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDBfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0xOQUNUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTo0XSBERVZfQ1RMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9ERVZfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0RFVl9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfREVWX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gR0FJTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzMgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNQVhfTUlOVVNfNiAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU185ICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzEyICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfR0FJTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9HQUlOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0dBSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfR0FJTl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9HQUlOX01BWF9NSU5VU18zICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9MTkFDVEwxX0dBSU5fTUFYX01JTlVTXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDFfR0FJTl9NQVhfTUlOVVNfOSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMV9HQUlOX01BWF9NSU5VU18xMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fTE5BQ1RMMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjZdIFJYVFhfUElOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMl9SWFRYX1BJTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwyX1JYVFhfUElOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDJfUlhUWF9QSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNF0gRVhUX0JJQVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwyX0VYVF9CSUFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDJfRVhUX0JJQVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMl9FWFRfQklBU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBJQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0xOQUNUTDJfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfTE5BQ1RMMl9JQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMF9SRl9MTkFDVEwyX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFNUENUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzozXSBUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBFTl9RCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX1EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9FTl9RX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX1FfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fUV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOX0kKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9FTl9JX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwwX0VOX0lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDBfRU5fSV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMF9FTl9JX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGQU1QQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIEdBSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU18zICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzYgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNQVhfTUlOVVNfOSAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1BWF9NSU5VU18xMiAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUFYX01JTlVTXzE1ICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNQVhfTUlOVVNfMTggICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDFfR0FJTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDFfR0FJTl9NQVhfTUlOVVNfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX01BWF9NSU5VU182ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fTUFYX01JTlVTXzkgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDFfR0FJTl9NQVhfTUlOVVNfMTIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMV9HQUlOX01BWF9NSU5VU18xNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwxX0dBSU5fTUFYX01JTlVTXzE4ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZBTVBDVEwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gQVRUTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIE1JTlVTXzIxICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOVVNfMTggICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSU5VU18xNSAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTlVTXzEyICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOVVNfOSAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSU5VU182ICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTlVTXzMgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX01JTlVTXzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fTUlOVVNfMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9NSU5VU18xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX01JTlVTXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fTUlOVVNfOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDJfQVRUTl9NSU5VU182ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMMl9BVFROX01JTlVTXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwyX0FUVE5fTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fUEFDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6M10gVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFBFQUtERVRfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfUEVBS0RFVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9QRUFLREVUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX1BFQUtERVRfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfUEVBS0RFVF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9QRUFLREVUX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9QQUNUTDBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwwX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fUEFDVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6Nl0gR0FJTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMV9HQUlOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwxX0dBSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBBRElfMF9SRl9QQUNUTDFfR0FJTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIElCCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwxX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDFfSUJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1BBQ1RMMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjVdIFJYVFgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9QQUNUTDJfUlhUWF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMl9SWFRYX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTAKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwyX1JYVFhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDozXSBDTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMl9DTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwyX0NNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBRElfMF9SRl9QQUNUTDJfQ01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjBdIEFECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUEFDVEwyX0FEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9QQUNUTDJfQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8wX1JGX1BBQ1RMMl9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX1JGTERPMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzVdIEFURVNUX0lfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQVRFU1RfSV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9BVEVTVF9JX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0FURVNUX0lfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBVEVTVF9WX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0FURVNUX1ZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQVRFU1RfVl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9BVEVTVF9WX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQllQQVNTX1JFR19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9CWVBBU1NfUkVHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0JZUEFTU19SRUdfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQllQQVNTX1JFR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFJEWV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9SRFlfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX1JEWV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfUkRZX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9SRFlfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX1JEWV9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBCSUFTX0RJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9CSUFTX0RJU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0JJQVNfRElTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9SRkxETzBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8wX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fUkZMRE8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gVFJJTV9PVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzFfVFJJTV9PVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFESV8wX1JGX1JGTERPMV9UUklNX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8xX1RSSU1fT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fUkZMRE8yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6M10gQ09NUF9SRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9SRkxETzJfQ09NUF9SRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMl9DT01QX1JFU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8yX0NPTVBfUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBDT01QX0NBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1JGTERPMl9DT01QX0NBUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfUkZMRE8yX0NPTVBfQ0FQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9SRkxETzJfQ09NUF9DQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo0XSBJTlQyQURKCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0lOVDJBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfSU5UMkFESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9JTlQyQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6Ml0gQUFGQ0FQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0FBRkNBUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfQUFGQ0FQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9BQUZDQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwwX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDBfQklBU19ESVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMF9CSUFTX0RJU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGQURDTEZDRkcwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gRkYxQURKCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzBfRkYxQURKX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMF9GRjFBREpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcwX0ZGMUFESl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gSU5UM0FESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcwX0lOVDNBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzBfSU5UM0FESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMF9JTlQzQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ0xGQ0ZHMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjRdIEZGM0FESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcxX0ZGM0FESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzFfRkYzQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMV9GRjNBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIEZGMkFESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDTEZDRkcxX0ZGMkFESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENMRkNGRzFfRkYyQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0xGQ0ZHMV9GRjJBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ0RBQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIE1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBSVFogICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5SVFogICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0RBQ19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDREFDX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENEQUNfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBRElfMF9SRl9JRkFEQ0RBQ19NT0RFX1JUWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDREFDX01PREVfTlJUWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzY6MV0gVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDREFDX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENEQUNfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RQorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0RBQ19UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ1FVQU5UMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIEFVVE9DQUxfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ1FVQU5UMF9BVVRPQ0FMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQURDUVVBTlQwX0FVVE9DQUxfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENRVUFOVDBfQVVUT0NBTF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDUVVBTlQwX1RIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENRVUFOVDBfVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9JRkFEQ1FVQU5UMF9USF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo1XSBESVRIRVJUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUlRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9ESVRIRVJUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQURDSUVOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ0lFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfQURDSUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENJRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ0lFTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfQURDSUVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIEFEQ1FFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENRRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ1FFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfQURDUUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9BRENRRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0FEQ1FFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMjoxXSBESVRIRVJFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVORyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5TRCAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9ESVRIRVJFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUkVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSRU5fRU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMV9ESVRIRVJFTl9FTlNEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwxX0RJVEhFUkVOX0VOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDFfRElUSEVSRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFEQ0NUTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBSRVNFVE4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfUkVTRVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9SRVNFVE5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX1JFU0VUTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfUkVTRVROX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9SRVNFVE5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gQ0xLR0VORU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQ0xLR0VORU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9DTEtHRU5FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0NMS0dFTkVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQ0xLR0VORU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9DTEtHRU5FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNV0gQURDRElHQ0xLRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQURDRElHQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9BRENESUdDTEtFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0FEQ0RJR0NMS0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfQURDRElHQ0xLRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9BRENESUdDTEtFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gSU5WQ0xLT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0lOVkNMS09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfSU5WQ0xLT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQURDQ1RMMl9JTlZDTEtPVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBRENDVEwyX0lOVkNMS09VVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkFEQ0NUTDJfSU5WQ0xLT1VUX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFMRE8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNF0gRVJSX0FNUF9aRVJPX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FUlJfQU1QX1pFUk9fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VSUl9BTVBfWkVST19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfRVJSX0FNUF9aRVJPX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FUlJfQU1QX1pFUk9fRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VSUl9BTVBfWkVST19FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzNdIEJZUEFTU19SRUdfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0JZUEFTU19SRUdfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfQllQQVNTX1JFR19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9CWVBBU1NfUkVHX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBSRFlfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX1JEWV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfUkRZX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9SRFlfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX1JEWV9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfUkRZX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0JJQVNfRElTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfQklBU19ESVNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8xX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzFfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGQUxETzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo1XSBDT01QX0NBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzJfQ09NUF9DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMl9DT01QX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8yX0NPTVBfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIFRSSU1fT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPMl9UUklNX09VVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8yX1RSSU1fT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzJfVFJJTV9PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGQUxETzMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBBVEVTVF9WX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPM19BVEVTVF9WX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8zX0FURVNUX1ZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzNfQVRFU1RfVl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQVRFU1RfSV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzNfQVRFU1RfSV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPM19BVEVTVF9JX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkFMRE8zX0FURVNUX0lfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgIFsyOjBdIENPTVBfUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTERPM19DT01QX1JFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9JRkFMRE8zX0NPTVBfUkVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8wX1JGX0lGQUxETzNfQ09NUF9SRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMF9SRl9PX0lGRExETzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBCWVBBU1NfUkVHX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CWVBBU1NfUkVHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0JZUEFTU19SRUdfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQllQQVNTX1JFR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CWVBBU1NfUkVHX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0JZUEFTU19SRUdfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIFJEWV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfUkRZX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9SRFlfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX1JEWV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfUkRZX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9SRFlfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBCSUFTX0RJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfQklBU19ESVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9CSUFTX0RJU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8xX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzFfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMV9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZETERPMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjVdIENPTVBfQ0FQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMl9DT01QX0NBUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9JRkRMRE8yX0NPTVBfQ0FQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzJfQ09NUF9DQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6MF0gVFJJTV9PVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8yX1RSSU1fT1VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8wX1JGX0lGRExETzJfVFJJTV9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPMl9UUklNX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fSUZETERPMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIEFURVNUX1ZfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX1ZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfVl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19BVEVTVF9WX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX1ZfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfVl9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gQVRFU1RfSV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfSV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19BVEVTVF9JX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0FURVNUX0lfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQVRFU1RfSV9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19BVEVTVF9JX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMjowXSBDT01QX1JFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX0lGRExETzNfQ09NUF9SRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzBfUkZfSUZETERPM19DT01QX1JFU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfMF9SRl9JRkRMRE8zX0NPTVBfUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzBfUkZfT19JRkFNUENUTDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjo0XSBBQUZfQ0FQX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwzX0FBRl9DQVBfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDNfQUFGX0NBUF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMM19BQUZfQ0FQX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9JRkFNUENUTDNfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8wX1JGX0lGQU1QQ1RMM19JQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQURJXzBfUkZfSUZBTVBDVEwzX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8wX1JGX09fU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjNdIElGQURDX0NBTFZBTF9PVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMF9SRl9TVEFUX0lGQURDX0NBTFZBTF9PVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8wX1JGX1NUQVRfSUZBRENfQ0FMVkFMX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjgKKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9JRkFEQ19DQUxWQUxfT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBJRkFEQ19DQUxET05FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9JRkFEQ19DQUxET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMF9SRl9TVEFUX0lGQURDX0NBTERPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8wX1JGX1NUQVRfSUZBRENfQ0FMRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gSUZMRE9TX1JEWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1NUQVRfSUZMRE9TX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9JRkxET1NfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMF9SRl9TVEFUX0lGTERPU19SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJGX0xETworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8wX1JGX1NUQVRfUkZfTERPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzBfUkZfU1RBVF9SRl9MRE9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMF9SRl9TVEFUX1JGX0xET19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQURJXzBfUkZfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzFfc3ludGguaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8xX3N5bnRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlZWUzNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8xX3N5bnRoLmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hZGlfMV9zeW50aF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BRElfMV9TWU5USF9IX18KKyNkZWZpbmUgX19IV19BRElfMV9TWU5USF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBRElfMV9TWU5USCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMV9TWU5USF9PX1ZDT0xET0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8xX1NZTlRIX09fVkNPTERPQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzFfU1lOVEhfT19WQ09MRE9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMV9TWU5USF9PX1NMRE9DVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8xX1NZTlRIX09fU0xET0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzFfU1lOVEhfT19TWU5USENUTElOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMV9TWU5USF9PX0FURVNUQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8xX1NZTlRIX09fQVRFU1RDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzFfU1lOVEhfT19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8xX1NZTlRIX09fVkNPTERPQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIEFURVNUX1ZfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0FURVNUX1ZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfQVRFU1RfVl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9BVEVTVF9WX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBCWVBBU1NfUkVHX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9CWVBBU1NfUkVHX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0JZUEFTU19SRUdfRU5fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfQllQQVNTX1JFR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUkRZX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9SRFlfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX1JEWV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfUkRZX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0JJQVNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfQklBU19ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9CSUFTX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwwX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19WQ09MRE9DVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNl0gQVRFU1RfSV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDFfQVRFU1RfSV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMV9BVEVTVF9JX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwxX0FURVNUX0lfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFRSSU1fT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ1RMMV9UUklNX09VVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DVEwxX1RSSU1fT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NUTDFfVFJJTV9PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMV9TWU5USF9PX1ZDT0xET0NGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzZdIERJVl9CSUFTX0RJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NGR19ESVZfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ0ZHX0RJVl9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DRkdfRElWX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjNdIENPTVBfUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ0ZHX0NPTVBfUkVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DRkdfQ09NUF9SRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NGR19DT01QX1JFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gQ09NUF9DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9WQ09MRE9DRkdfQ09NUF9DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8xX1NZTlRIX1ZDT0xET0NGR19DT01QX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzFfU1lOVEhfVkNPTERPQ0ZHX0NPTVBfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8xX1NZTlRIX09fU0xET0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs2XSBDT01QX0NBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0NPTVBfQ0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQ09NUF9DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9DT01QX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIEFURVNUX0lfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9BVEVTVF9JX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0FURVNUX0lfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQVRFU1RfSV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBVEVTVF9WX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQVRFU1RfVl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9BVEVTVF9WX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0FURVNUX1ZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMl0gUkRZX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfUkRZX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9SRFlfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX1JEWV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwwX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDBfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19TTERPQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIFRSSU1fT1VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU0xET0NUTDFfVFJJTV9PVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfMV9TWU5USF9TTERPQ1RMMV9UUklNX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFESV8xX1NZTlRIX1NMRE9DVEwxX1RSSU1fT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMV9TWU5USF9PX1NZTlRIQ1RMSU5JVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIENMS19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NZTlRIQ1RMSU5JVF9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1lOVEhDVExJTklUX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMV9TWU5USF9TWU5USENUTElOSVRfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERESV9SRVNFVF9OCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU1lOVEhDVExJTklUX0RESV9SRVNFVF9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9TWU5USENUTElOSVRfRERJX1JFU0VUX05fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8xX1NZTlRIX1NZTlRIQ1RMSU5JVF9ERElfUkVTRVRfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMV9TWU5USF9PX0FURVNUQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRFU1RTRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBQRUFLREVUTl9BMSAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFJYT1VUUU5fQTEgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUlhPVVRJTl9BMSAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBMRE9WX0EwICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIElGQURDUF9BMCAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUEVBS0RFVFBfQTAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBSWE9VVFFQX0EwICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFJYT1VUSVBfQTAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX1BFQUtERVROX0ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfUlhPVVRRTl9BMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9SWE9VVElOX0ExICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX0xET1ZfQTAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfSUZBRENQX0EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9QRUFLREVUUF9BMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMF9URVNUU0VMX1JYT1VUUVBfQTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwwX1RFU1RTRUxfUlhPVVRJUF9BMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDBfVEVTVFNFTF9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzFfU1lOVEhfT19BVEVTVENUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzoyXSBSRVNFUkVWRUQyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwxX1JFU0VSRVZFRDJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDFfUkVTRVJFVkVEMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZDCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMV9SRVNFUkVWRUQyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgWzE6MF0gVEVTVFNFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIExET0lURVNUX0ExICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gSUZBRENURVNUTl9BMSAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwxX1RFU1RTRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDFfVEVTVFNFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMV9URVNUU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzFfU1lOVEhfQVRFU1RDVEwxX1RFU1RTRUxfTERPSVRFU1RfQTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMV9TWU5USF9BVEVTVENUTDFfVEVTVFNFTF9JRkFEQ1RFU1ROX0ExICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV8xX1NZTlRIX0FURVNUQ1RMMV9URVNUU0VMX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMV9TWU5USF9PX1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBTWU5USF9UVU5FX0FDSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NUQVRfU1lOVEhfVFVORV9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1RBVF9TWU5USF9UVU5FX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfMV9TWU5USF9TVEFUX1NZTlRIX1RVTkVfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNMRE9fUkRZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzFfU1lOVEhfU1RBVF9TTERPX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfMV9TWU5USF9TVEFUX1NMRE9fUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8xX1NZTlRIX1NUQVRfU0xET19SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gTERPVkNPX1JEWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8xX1NZTlRIX1NUQVRfTERPVkNPX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzFfU1lOVEhfU1RBVF9MRE9WQ09fUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMV9TWU5USF9TVEFUX0xET1ZDT19SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQURJXzFfU1lOVEhfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzJfcmVmc3lzLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfMl9yZWZzeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzJfcmVmc3lzLmgKQEAgLTAsMCArMSwzNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hZGlfMl9yZWZzeXNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQURJXzJfUkVGU1lTX0hfXworI2RlZmluZSBfX0hXX0FESV8yX1JFRlNZU19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBRElfMl9SRUZTWVMgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fUkVGU1lTQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fU09DTERPQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fU09DTERPQ1RMNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzJfUkVGU1lTX09fSFBPU0NDVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX1JFRlNZU0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNDowXSBUUklNX0lSRUYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfUkVGU1lTQ1RMMF9UUklNX0lSRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8yX1JFRlNZU19SRUZTWVNDVEwwX1RSSU1fSVJFRl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1JFRlNZU0NUTDBfVFJJTV9JUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo0XSBWVFJJTV9VRElHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDBfVlRSSU1fVURJR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMF9WVFJJTV9VRElHX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwwX1ZUUklNX1VESUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gVlRSSU1fQk9ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDBfVlRSSU1fQk9EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMF9WVFJJTV9CT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwwX1ZUUklNX0JPRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gVlRSSU1fQ09BUlNFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDFfVlRSSU1fQ09BUlNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMV9WVFJJTV9DT0FSU0VfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwxX1ZUUklNX0NPQVJTRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gVlRSSU1fRElHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDFfVlRSSU1fRElHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMV9WVFJJTV9ESUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwxX1ZUUklNX0RJR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19TT0NMRE9DVEwyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gVlRSSU1fREVMVEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMMl9WVFJJTV9ERUxUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwyX1ZUUklNX0RFTFRBX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDJfVlRSSU1fREVMVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo2XSBJVFJJTV9ESUdMRE9fTE9BRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX0RJR0xET19MT0FEX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX0xPQURfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fTE9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjNdIElUUklNX0RJR0xETworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEJJQVNfMTIwUCAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQklBU18xMDBQICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBCSUFTXzgwUCAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEJJQVNfNjBQICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX0RJR0xET19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fQklBU18xMjBQICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX0RJR0xET19CSUFTXzEwMFAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fRElHTERPX0JJQVNfODBQICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9ESUdMRE9fQklBU182MFAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsyOjBdIElUUklNX1VESUdMRE8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMM19JVFJJTV9VRElHTERPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEwzX0lUUklNX1VESUdMRE9fTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDNfSVRSSU1fVURJR0xET19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjo1XSBVRElHX0lURVNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfVURJR19JVEVTVF9FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9VRElHX0lURVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X1VESUdfSVRFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6Ml0gRElHX0lURVNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfRElHX0lURVNUX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9ESUdfSVRFU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X0RJR19JVEVTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQklBU19ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBVRElHX0xET19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X1VESUdfTERPX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfVURJR19MRE9fRU5fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNF9VRElHX0xET19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw0X1VESUdfTERPX0VOX0VOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDRfVURJR19MRE9fRU5fRElTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX1NPQ0xET0NUTDUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBJTU9OX0lURVNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfSU1PTl9JVEVTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9JTU9OX0lURVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw1X0lNT05fSVRFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gVEVTVFNFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIFZERF9BT04gICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gVlJFRl9BTVAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBJVEVTVCAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9URVNUU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw1X1RFU1RTRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfVEVTVFNFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9URVNUU0VMX1ZERF9BT04gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8yX1JFRlNZU19TT0NMRE9DVEw1X1RFU1RTRUxfVlJFRl9BTVAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzJfUkVGU1lTX1NPQ0xET0NUTDVfVEVTVFNFTF9JVEVTVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMl9SRUZTWVNfU09DTERPQ1RMNV9URVNUU0VMX05DICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzJfUkVGU1lTX09fSFBPU0NDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gRklMVEVSX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9GSUxURVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0ZJTFRFUl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRklMVEVSX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgWzY6NV0gQklBU19SRUNIQVJHRV9ETFkKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBNSU5fRExZX1g4ICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE1JTl9ETFlfWDQgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTUlOX0RMWV9YMiAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBNSU5fRExZX1gxICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZX00gICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfQklBU19SRUNIQVJHRV9ETFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9NSU5fRExZX1g4ICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0JJQVNfUkVDSEFSR0VfRExZX01JTl9ETFlfWDQgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfQklBU19SRUNIQVJHRV9ETFlfTUlOX0RMWV9YMiAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9CSUFTX1JFQ0hBUkdFX0RMWV9NSU5fRExZX1gxICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNDozXSBUVU5FX0NBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIFNISUZUX00xMDggICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gU0hJRlRfTTcwICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBTSElGVF9NMzUgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFNISUZUXzAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1RVTkVfQ0FQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfVFVORV9DQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9UVU5FX0NBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1RVTkVfQ0FQX1NISUZUX00xMDggICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfVFVORV9DQVBfU0hJRlRfTTcwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9UVU5FX0NBUF9TSElGVF9NMzUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1RVTkVfQ0FQX1NISUZUXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsyOjFdIFNFUklFU19DQVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX1NFUklFU19DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfU0VSSUVTX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9TRVJJRVNfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESVYzX0JZUEFTUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEhQT1NDXzI1MjBNSFogICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gSFBPU0NfODQwTUhaICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9ESVYzX0JZUEFTU19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwwX0RJVjNfQllQQVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDBfRElWM19CWVBBU1NfSFBPU0NfMjUyME1IWiAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMF9ESVYzX0JZUEFTU19IUE9TQ184NDBNSFogICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8yX1JFRlNZU19PX0hQT1NDQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzVdIEJJQVNfRElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMV9CSUFTX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19ESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gUFdSREVUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMV9QV1JERVRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX1BXUkRFVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfUFdSREVUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gQklBU19SRVNfU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMV9CSUFTX1JFU19TRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwxX0JJQVNfUkVTX1NFVF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDFfQklBU19SRVNfU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfMl9SRUZTWVNfT19IUE9TQ0NUTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBCSUFTX0hPTERfTU9ERV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQklBU19IT0xEX01PREVfRU4gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9CSUFTX0hPTERfTU9ERV9FTl9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0JJQVNfSE9MRF9NT0RFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFRFU1RNVVhfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX1RFU1RNVVhfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfVEVTVE1VWF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9URVNUTVVYX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTo0XSBBVEVTVF9TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0FURVNUX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQVRFU1RfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9BVEVTVF9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBDVVJSTUlSUl9SQVRJTworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8yX1JFRlNZU19IUE9TQ0NUTDJfQ1VSUk1JUlJfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQURJXzJfUkVGU1lTX0hQT1NDQ1RMMl9DVVJSTUlSUl9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBRElfMl9SRUZTWVNfSFBPU0NDVEwyX0NVUlJNSVJSX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQURJXzJfUkVGU1lTX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8zX3JlZnN5cy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzNfcmVmc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyZTk1NAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2FkaV8zX3JlZnN5cy5oCkBAIC0wLDAgKzEsNDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYWRpXzNfcmVmc3lzX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FESV8zX1JFRlNZU19IX18KKyNkZWZpbmUgX19IV19BRElfM19SRUZTWVNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQURJXzNfUkVGU1lTIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFuYWxvZyBUZXN0IENvbnRyb2wKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fU1BBUkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfM19SRUZTWVNfT19SRUZTWVNDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX1JFRlNZU0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fUkVGU1lTQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfM19SRUZTWVNfT19SRUZTWVNDVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisKKy8vIERDREMgQ29udHJvbCAwCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX0RDRENDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKworLy8gRENEQyBDb250cm9sIDEKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fRENEQ0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworCisvLyBEQ0RDIENvbnRyb2wgMgorI2RlZmluZSBBRElfM19SRUZTWVNfT19EQ0RDQ1RMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIERDREMgQ29udHJvbCAzCisjZGVmaW5lIEFESV8zX1JFRlNZU19PX0RDRENDVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzNfUkVGU1lTX09fRENEQ0NUTDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfM19SRUZTWVNfT19EQ0RDQ1RMNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fU1BBUkUwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gU1BBUkUwCisvLworLy8gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZQorLy8gdGhhbiB0aGUgcmVzZXQgdmFsdWUgbWF5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIEFESV8zX1JFRlNZU19TUEFSRTBfU1BBUkUwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1NQQVJFMF9TUEFSRTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBRElfM19SRUZTWVNfU1BBUkUwX1NQQVJFMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fUkVGU1lTQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFRFU1RDVEwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBCTUNPTVBPVVQgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFZURU1QICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gVlJFRjBQOFYgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBWQkdVTkJVRkYgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFZCRyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gSVJFRjRVICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBJVlJFRjRVICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIElQVEFUMlUgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfQk1DT01QT1VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9WVEVNUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX1ZSRUYwUDhWICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfVkJHVU5CVUZGICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9WQkcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX0lSRUY0VSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwwX1RFU1RDVExfSVZSRUY0VSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDBfVEVTVENUTF9JUFRBVDJVICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMF9URVNUQ1RMX05DICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fUkVGU1lTQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjNdIFRSSU1fVkREU19CT0QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBQT1NfMjcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18yNiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzI1ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjQgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18zMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzMwICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjkgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18yOCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzE5ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMTggICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xNyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzE2ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjMgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18yMiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzIxICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMjAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzEwICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfOSAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU184ICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzE1ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMTQgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18xMyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzEyICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU18yICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzEgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfMCAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU183ICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gUE9TXzYgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBQT1NfNSAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFBPU180ICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yNyAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzI2ICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjUgICAgICAgICAgICAgICAgMHgwMDAwMDBFOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yNCAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzMxICAgICAgICAgICAgICAgIDB4MDAwMDAwRDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMzAgICAgICAgICAgICAgICAgMHgwMDAwMDBEMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yOSAgICAgICAgICAgICAgICAweDAwMDAwMEM4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzI4ICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTkgICAgICAgICAgICAgICAgMHgwMDAwMDBCOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18xOCAgICAgICAgICAgICAgICAweDAwMDAwMEIwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzE3ICAgICAgICAgICAgICAgIDB4MDAwMDAwQTgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTYgICAgICAgICAgICAgICAgMHgwMDAwMDBBMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yMyAgICAgICAgICAgICAgICAweDAwMDAwMDk4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzIyICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMjEgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18yMCAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzExICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU185ICAgICAgICAgICAgICAgICAweDAwMDAwMDY4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzggICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTUgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18xNCAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzEzICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMTIgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18zICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU18wICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzcgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVFJJTV9WRERTX0JPRF9QT1NfNiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9UUklNX1ZERFNfQk9EX1BPU181ICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RSSU1fVkREU19CT0RfUE9TXzQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gQkFUTU9OX0NPTVBfVEVTVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX0JBVE1PTl9DT01QX1RFU1RfRU4gICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfQkFUTU9OX0NPTVBfVEVTVF9FTl9NICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9CQVRNT05fQ09NUF9URVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX0JBVE1PTl9DT01QX1RFU1RfRU5fRU4gICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfQkFUTU9OX0NPTVBfVEVTVF9FTl9ESVMgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMTowXSBURVNUQ1RMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gSVBUQVQxVSAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBCTUNPTVBJTiAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9URVNUQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RFU1RDVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVEVTVENUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMV9URVNUQ1RMX0lQVEFUMVUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwxX1RFU1RDVExfQk1DT01QSU4gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDFfVEVTVENUTF9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX1JFRlNZU0NUTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo0XSBUUklNX1ZSRUYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMl9UUklNX1ZSRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwyX1RSSU1fVlJFRl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDJfVFJJTV9WUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMTowXSBUUklNX1RTRU5TRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwyX1RSSU1fVFNFTlNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDJfVFJJTV9UU0VOU0VfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMMl9UUklNX1RTRU5TRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fUkVGU1lTQ1RMMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIEJPRF9CR19UUklNX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfQk9EX0JHX1RSSU1fRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19CT0RfQkdfVFJJTV9FTl9NICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX0JPRF9CR19UUklNX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gVlRFTVBfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19WVEVNUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX1ZURU1QX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfVlRFTVBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19WVEVNUF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX1ZURU1QX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gVFJJTV9WQkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfUkVGU1lTQ1RMM19UUklNX1ZCR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFESV8zX1JFRlNZU19SRUZTWVNDVEwzX1RSSU1fVkJHX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQURJXzNfUkVGU1lTX1JFRlNZU0NUTDNfVFJJTV9WQkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX0RDRENDVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NV0gR0xET19JU1JDCisvLworLy8gU2V0IGNoYXJnZSBhbmQgcmUtY2hhcmdlIGN1cnJlbnQgbGV2ZWwuCisvLyAyJ3MgY29tcGxlbWVudCBlbmNvZGluZy4KKy8vCisvLyAweDA6IERlZmF1bHQgMTFtQS4KKy8vIDB4MzogTWF4IDE1bUEuCisvLyAweDQ6IE1heCA1bUEKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwwX0dMRE9fSVNSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDBfR0xET19JU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMF9HTERPX0lTUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6MF0gVkREUl9UUklNCisvLworLy8gU2V0IHRoZSBWRERSIHZvbHRhZ2UuCisvLyBQcm9wcmlldGFyeSBlbmNvZGluZy4KKy8vCisvLyBJbmNyZWFzZSB2b2x0YWdlIHRvIG1heDogMHgwMCwgMHgwMSwgMHgwMiAuLi4gMHgxNS4KKy8vIERlY3JlYXNlIHZvbHRhZ2UgdG8gbWluOiAweDAwLCAweDFGLCAweDFFLCAweDFEIC4uLiAweDE2LgorLy8gU3RlcCBzaXplID0gMTZtVgorLy8KKy8vIDB4MDA6IERlZmF1bHQsIGFib3V0IDEuNjNWLgorLy8gMHgwNTogVHlwaWNhbCB2b2x0YWdlIGFmdGVyIHRyaW0gdm9sdGFnZSAxLjcxVi4KKy8vIDB4MTU6IE1heCB2b2x0YWdlIDEuOTZWLgorLy8gMHgxNjogTWluIHZvbHRhZ2UgMS40N1YuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMF9WRERSX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwwX1ZERFJfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDBfVkREUl9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fRENEQ0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo2XSBJUFRBVF9UUklNCisvLworLy8gVHJpbSBHTERPIGJpYXMgY3VycmVudC4KKy8vIFByb3ByaWV0YXJ5IGVuY29kaW5nLgorLy8KKy8vIDB4MDogRGVmYXVsdAorLy8gMHgxOiBJbmNyZWFzZSBHTERPIGJpYXMgYnkgMS4zeC4KKy8vIDB4MjogSW5jcmVhc2UgR0xETyBiaWFzIGJ5IDEuNnguCisvLyAweDM6IERlY3JlYXNlIEdMRE8gYmlhcyBieSAwLjd4LgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDFfSVBUQVRfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9JUFRBVF9UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwxX0lQVEFUX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBWRERSX09LX0hZU1QKKy8vCisvLyBJbmNyZWFzZSB0aGUgaHlzdGVyZXNpcyBmb3Igd2hlbiBWRERSIGlzIGNvbnNpZGVyZWQgb2suCisvLworLy8gMDogSHlzdGVyZXNpcyA9IDYwbVYKKy8vIDE6IEh5c3RlcmVzaXMgPSA3MG1WCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX09LX0hZU1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfT0tfSFlTVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9PS19IWVNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIFZERFJfVFJJTV9TTEVFUAorLy8KKy8vIFNldCB0aGUgbWluIFZERFIgdm9sdGFnZSB0aHJlc2hvbGQgZHVyaW5nIHNsZWVwIG1vZGUuCisvLyBQcm9wcmlldGFyeSBlbmNvZGluZy4KKy8vCisvLyBJbmNyZWFzZSB2b2x0YWdlIHRvIG1heDogMHgwMCwgMHgwMSwgMHgwMiAuLi4gMHgxNS4KKy8vIERlY3JlYXNlIHZvbHRhZ2UgdG8gbWluOiAweDAwLCAweDFGLCAweDFFLCAweDFEIC4uLiAweDE2LgorLy8gU3RlcCBzaXplID0gMTZtVgorLy8KKy8vIDB4MDA6IERlZmF1bHQsIGFib3V0IDEuNjNWLgorLy8gMHgxOTogVHlwaWNhbCB2b2x0YWdlIGFmdGVyIHRyaW0gdm9sdGFnZSAxLjUyVi4KKy8vIDB4MTU6IE1heCB2b2x0YWdlIDEuOTZWLgorLy8gMHgxNjogTWluIHZvbHRhZ2UgMS40N1YuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMV9WRERSX1RSSU1fU0xFRVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwxX1ZERFJfVFJJTV9TTEVFUF9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDFfVkREUl9UUklNX1NMRUVQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fRENEQ0NUTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs2XSBUVVJOT05fRUFfU1cKKy8vCisvLyBUdXJuIG9uIGVycm9yYW1wIHN3aXRjaAorLy8KKy8vIDA6IEVycm9yYW1wIE9mZiAoRGVmYXVsdCkKKy8vIDE6IEVycm9yYW1wIE9uLiBUdXJucyBvbiBHTERPIGVycm9yIGFtcCBzd2l0Y2guCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9UVVJOT05fRUFfU1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RVUk5PTl9FQV9TV19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVFVSTk9OX0VBX1NXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRFU1RfVkREUgorLy8KKy8vIENvbm5lY3QgVkREUiB0byBBVEVTVCBidXMKKy8vCisvLyAwOiBOb3QgY29ubmVjdGVkLgorLy8gMTogQ29ubmVjdGVkCisvLworLy8gU2V0IFRFU1RTRUwgPSAweDAgZmlyc3QgYmVmb3JlIHNldHRpbmcgdGhpcyBiaXQuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUX1ZERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RfVkREUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVF9WRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEJJQVNfRElTCisvLworLy8gRGlzYWJsZSBkdW1teSBiaWFzIGN1cnJlbnQuCisvLworLy8gMDogRHVtbXkgYmlhcyBjdXJyZW50IG9uIChEZWZhdWx0KQorLy8gMTogRHVtbXkgYmlhcyBjdXJyZW50IG9mZgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfQklBU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9CSUFTX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX0JJQVNfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBURVNUU0VMCisvLworLy8gU2VsZWN0IHNpZ25hbCBmb3IgdGVzdCBidXMsIG9uZSBob3QuCisvLyBFTlVNczoKKy8vIFZERFJPSyAgICAgICAgICAgICAgICAgICBWRERSX09LIGNvbm5lY3RlZCB0byB0ZXN0IGJ1cy4KKy8vIElCMVUgICAgICAgICAgICAgICAgICAgICAxdUEgYmlhcyBjdXJyZW50IGNvbm5lY3RlZCB0byB0ZXN0IGJ1cy4KKy8vIFBBU1NHQVRFICAgICAgICAgICAgICAgICBQYXNzIHRyYW5zaXN0b3IgZ2F0ZSB2b2x0YWdlIGNvbm5lY3RlZCB0byB0ZXN0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLgorLy8gRVJSQU1QX09VVCAgICAgICAgICAgICAgIEVycm9yIGFtcCBvdXRwdXQgdm9sdGFnZSBjb25uZWN0ZWQgdG8gdGVzdCBidXMuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgTm8gc2lnbmFsIGNvbm5lY3RlZCB0byB0ZXN0IGJ1cy4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RTRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVFNFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RTRUxfVkREUk9LICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVFNFTF9JQjFVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMMl9URVNUU0VMX1BBU1NHQVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEwyX1RFU1RTRUxfRVJSQU1QX09VVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDJfVEVTVFNFTF9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fRENEQ0NUTDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV8zX1JFRlNZU19PX0RDRENDVEw0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6Nl0gREVBRFRJTUVfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNF9ERUFEVElNRV9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw0X0RFQURUSU1FX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDRfREVBRFRJTUVfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjNdIExPV19FTl9TRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDRfTE9XX0VOX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNF9MT1dfRU5fU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw0X0xPV19FTl9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBISUdIX0VOX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNF9ISUdIX0VOX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw0X0hJR0hfRU5fU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDRfSElHSF9FTl9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzNfUkVGU1lTX09fRENEQ0NUTDUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBURVNUTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9URVNUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X1RFU1ROX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfVEVTVE5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFRFU1RQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X1RFU1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfVEVTVFBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9URVNUUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRElUSEVSX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X0RJVEhFUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfRElUSEVSX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9ESVRIRVJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X0RJVEhFUl9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfRElUSEVSX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFsyOjBdIElQRUFLCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzNfUkVGU1lTX0RDRENDVEw1X0lQRUFLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBRElfM19SRUZTWVNfRENEQ0NUTDVfSVBFQUtfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFESV8zX1JFRlNZU19EQ0RDQ1RMNV9JUEVBS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BRElfM19SRUZTWVNfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzRfYXV4LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hZGlfNF9hdXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgwNWE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYWRpXzRfYXV4LmgKQEAgLTAsMCArMSw1MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hZGlfNF9hdXhfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQURJXzRfQVVYX0hfXworI2RlZmluZSBfX0hXX0FESV80X0FVWF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBRElfNF9BVVggY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzRfQVVYX09fTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfNF9BVVhfT19NVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFESV80X0FVWF9PX01VWDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQURJXzRfQVVYX09fTVVYMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworCisvLyBDdXJyZW50IFNvdXJjZQorI2RlZmluZSBBRElfNF9BVVhfT19JU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIENvbXBhcmF0b3IKKyNkZWZpbmUgQURJXzRfQVVYX09fQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBRElfNF9BVVhfT19NVVg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisKKy8vIEFEQyBDb250cm9sIDAKKyNkZWZpbmUgQURJXzRfQVVYX09fQURDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBBREMgQ29udHJvbCAxCisjZGVmaW5lIEFESV80X0FVWF9PX0FEQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKworLy8gQURDIFJlZmVyZW5jZSAwCisjZGVmaW5lIEFESV80X0FVWF9PX0FEQ1JFRjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKworLy8gQURDIFJlZmVyZW5jZSAxCisjZGVmaW5lIEFESV80X0FVWF9PX0FEQ1JFRjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19NVVgwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gQ09NUEFfSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBGQ0FQMSAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEZDQVAwICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVRFU1QxICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVEVTVDAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9JTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9JTl9GQ0FQMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX0lOX0ZDQVAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfSU5fQVRFU1QxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9JTl9BVEVTVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX0lOX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzM6MF0gQ09NUEFfUkVGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gQURDVlJFRlAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBWRERTICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFZTUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRENPVVBMICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfUkVGX0FEQ1ZSRUZQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9SRUZfVkREUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV80X0FVWF9NVVgwX0NPTVBBX1JFRl9WU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzRfQVVYX01VWDBfQ09NUEFfUkVGX0RDT1VQTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfTVVYMF9DT01QQV9SRUZfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fTVVYMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIENPTVBBX0lOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIE5DICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfNF9BVVhfTVVYMV9DT01QQV9JTl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFESV80X0FVWF9NVVgxX0NPTVBBX0lOX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX01VWDFfQ09NUEFfSU5fTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX01VWDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzozXSBBRENDT01QQl9JTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIFZERFMgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gVlNTICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBEQ09VUEwgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFURVNUMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVRFU1QwICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQURDQ09NUEJfSU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9BRENDT01QQl9JTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0FEQ0NPTVBCX0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQURDQ09NUEJfSU5fVkREUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9BRENDT01QQl9JTl9WU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0FEQ0NPTVBCX0lOX0RDT1VQTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQURDQ09NUEJfSU5fQVRFU1QxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9BRENDT01QQl9JTl9BVEVTVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0FEQ0NPTVBCX0lOX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzI6MF0gQ09NUEJfUkVGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gVkREUyAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBWU1MgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIERDT1VQTCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0NPTVBCX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQ09NUEJfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBRElfNF9BVVhfTVVYMl9DT01QQl9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0NPTVBCX1JFRl9WRERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzRfQVVYX01VWDJfQ09NUEJfUkVGX1ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfNF9BVVhfTVVYMl9DT01QQl9SRUZfRENPVVBMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9NVVgyX0NPTVBCX1JFRl9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19NVVgzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gQURDQ09NUEJfSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV80X0FVWF9NVVgzX0FEQ0NPTVBCX0lOX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzRfQVVYX01VWDNfQURDQ09NUEJfSU5fQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfTVVYM19BRENDT01QQl9JTl9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fSVNSQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjJdIFRSSU0KKy8vCisvLyBBZGp1c3QgY3VycmVudCBmcm9tIGN1cnJlbnQgc291cmNlLgorLy8KKy8vIE91dHB1dCBjdXJyZW50cyBtYXkgYmUgY29tYmluZWQgdG8gZ2V0IGRlc2lyZWQgdG90YWwgY3VycmVudC4KKy8vIEVOVU1zOgorLy8gMTFQNzVVICAgICAgICAgICAgICAgICAgIDExLjc1IHVBCisvLyA0UDVVICAgICAgICAgICAgICAgICAgICAgNC41IHVBCisvLyAyUDBVICAgICAgICAgICAgICAgICAgICAgMi4wIHVBCisvLyAxUDBVICAgICAgICAgICAgICAgICAgICAgMS4wIHVBCisvLyAwUDVVICAgICAgICAgICAgICAgICAgICAgMC41IHVBCisvLyAwUDI1VSAgICAgICAgICAgICAgICAgICAgMC4yNSB1QQorLy8gTkMgICAgICAgICAgICAgICAgICAgICAgIE5vIGN1cnJlbnQgY29ubmVjdGVkCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGQworI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fMTFQNzVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfVFJJTV80UDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNXzJQMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fMVAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfVFJJTV8wUDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19UUklNXzBQMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFESV80X0FVWF9JU1JDX1RSSU1fTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBDdXJyZW50IHNvdXJjZSBlbmFibGUKKyNkZWZpbmUgQURJXzRfQVVYX0lTUkNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfSVNSQ19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9JU1JDX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19DT01QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gQ09NUEFfUkVGX1JFU19FTgorLy8KKy8vIEVuYWJsZXMgNDAwa29obSByZXNpc3RhbmNlIGZyb20gQ09NUEEgcmVmZXJlbmNlIG5vZGUgdG8gZ3JvdW5kLiBVc2VkIHdpdGgKKy8vIENPTVBBX1JFRl9DVVJSX0VOIHRvIGdlbmVyYXRlIHZvbHRhZ2UgcmVmZXJlbmNlIGZvciBjYXAtc2Vuc2UuCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBBX1JFRl9SRVNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEFfUkVGX1JFU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQV9SRUZfUkVTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIENPTVBBX1JFRl9DVVJSX0VOCisvLworLy8gRW5hYmxlcyAydUEgSVBUQVQgY3VycmVudCBmcm9tIElTUkMgdG8gQ09NUEEgcmVmZXJlbmNlIG5vZGUuIFJlcXVpcmVzCisvLyBJU1JDLkVOID0gMS4gVXNlZCB3aXRoIENPTVBBX1JFRl9SRVNfRU4gdG8gZ2VuZXJhdGUgdm9sdGFnZSByZWZlcmVuY2UgZm9yCisvLyBjYXAtc2Vuc2UuCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBBX1JFRl9DVVJSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEFfUkVGX0NVUlJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQV9SRUZfQ1VSUl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjNdIENPTVBCX1RSSU0KKy8vCisvLyBDT01QQiB2b2x0YWdlIHJlZmVyZW5jZSB0cmltIHRlbXBlcmF0dXJlIGNvZGVkOgorLy8gRU5VTXM6CisvLyBESVY0ICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIHJlZmVyZW5jZSBieSA0CisvLyBESVYzICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIHJlZmVyZW5jZSBieSAzCisvLyBESVYyICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIHJlZmVyZW5jZSBieSAyCisvLyBESVYxICAgICAgICAgICAgICAgICAgICAgTm8gcmVmZXJlbmNlIGRpdmlzaW9uCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEJfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX1RSSU1fRElWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEJfVFJJTV9ESVYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9UUklNX0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX1RSSU1fRElWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gQ09NUEJfRU4KKy8vCisvLyBDb21wYXJhdG9yIEIgZW5hYmxlCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBCX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzBdIENPTVBBX0VOCisvLworLy8gQ09NUEEgZW5hYmxlCisjZGVmaW5lIEFESV80X0FVWF9DT01QX0NPTVBBX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX0NPTVBfQ09NUEFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBRElfNF9BVVhfQ09NUF9DT01QQV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQURJXzRfQVVYX09fTVVYNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIENPTVBBX1JFRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBOQyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQURJXzRfQVVYX01VWDRfQ09NUEFfUkVGX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfNF9BVVhfTVVYNF9DT01QQV9SRUZfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9NVVg0X0NPTVBBX1JFRl9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBRElfNF9BVVhfT19BREMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gU01QTF9NT0RFCisvLworLy8gQURDIFNhbXBsaW5nIG1vZGU6CisvLworLy8gMDogU3luY2hyb25vdXMgbW9kZQorLy8gMTogQXN5bmNocm9ub3VzIG1vZGUKKy8vCisvLyBUaGUgQURDIGRvZXMgYSBzYW1wbGUtYW5kLWhvbGQgYmVmb3JlIGNvbnZlcnNpb24uIEluIHN5bmNocm9ub3VzIG1vZGUgdGhlCisvLyBzYW1wbGluZyBzdGFydHMgd2hlbiB0aGUgQURDIGNsb2NrIGRldGVjdHMgYSByaXNpbmcgZWRnZSBvbiB0aGUgdHJpZ2dlcgorLy8gc2lnbmFsLiBKaXR0ZXIvdW5jZXJ0YWludHkgd2lsbCBiZSBpbmZlcnJlZCBpbiB0aGUgZGV0ZWN0aW9uIGlmIHRoZSB0cmlnZ2VyCisvLyBzaWduYWwgb3JpZ2luYXRlcyBmcm9tIGEgZG9tYWluIHRoYXQgaXMgYXN5bmNocm9ub3VzIHRvIHRoZSBBREMgY2xvY2suCisvLyBTTVBMX0NZQ0xFX0VYUCAgZGV0ZXJtaW5lcyB0aGUgdGhlIGR1cmF0aW9uIG9mIHNhbXBsaW5nLgorLy8gQ29udmVyc2lvbiBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgc2FtcGxpbmcgZW5kcy4KKy8vCisvLyBJbiBhc3luY2hyb25vdXMgbW9kZSB0aGUgc2FtcGxpbmcgaXMgY29udGludW91cyB3aGVuIGVuYWJsZWQuIFNhbXBsaW5nIGVuZHMKKy8vIGFuZCBjb252ZXJzaW9uIHN0YXJ0cyBpbW1lZGlhdGVseSB3aXRoIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgdHJpZ2dlcgorLy8gc2lnbmFsLiBTYW1wbGluZyByZXN0YXJ0cyB3aGVuIHRoZSBjb252ZXJzaW9uIGhhcyBmaW5pc2hlZC4KKy8vIEFzeW5jaHJvbm91cyBtb2RlIGlzIHVzZWZ1bCB3aGVuIGl0IGlzIGltcG9ydGFudCB0byBhdm9pZCBqaXR0ZXIgaW4gdGhlCisvLyBzYW1wbGluZyBpbnN0YW50IG9mIGFuIGV4dGVybmFsbHkgZHJpdmVuIHNpZ25hbAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICBbNjozXSBTTVBMX0NZQ0xFX0VYUAorLy8KKy8vIENvbnRyb2xzIHRoZSBzYW1wbGluZyBkdXJhdGlvbiBiZWZvcmUgY29udmVyc2lvbiB3aGVuIHRoZSBBREMgaXMgb3BlcmF0ZWQgaW4KKy8vIHN5bmNocm9ub3VzIG1vZGUgKFNNUExfTU9ERSA9IDApLiBUaGUgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGluIGFzeW5jaHJvbm91cworLy8gbW9kZS4gVGhlIHNhbXBsaW5nIGR1cmF0aW9uIGlzIGdpdmVuIGFzIDJeKFNNUExfQ1lDTEVfRVhQICsgMSkgLyA2IHVzLgorLy8gRU5VTXM6CisvLyAxMFA5X01TICAgICAgICAgICAgICAgICAgNjU1MzZ4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSAxMC45bXMKKy8vIDVQNDZfTVMgICAgICAgICAgICAgICAgICAzMjc2OHggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDUuNDZtcworLy8gMlA3M19NUyAgICAgICAgICAgICAgICAgIDE2Mzg0eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gMi43M21zCisvLyAxUDM3X01TICAgICAgICAgICAgICAgICAgODE5MnggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDEuMzdtcworLy8gNjgyX1VTICAgICAgICAgICAgICAgICAgIDQwOTZ4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSA2ODJ1cworLy8gMzQxX1VTICAgICAgICAgICAgICAgICAgIDIwNDh4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSAzNDF1cworLy8gMTcwX1VTICAgICAgICAgICAgICAgICAgIDEwMjR4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSAxNzB1cworLy8gODVQM19VUyAgICAgICAgICAgICAgICAgIDUxMnggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDg1LjN1cworLy8gNDJQNl9VUyAgICAgICAgICAgICAgICAgIDI1NnggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDQyLjZ1cworLy8gMjFQM19VUyAgICAgICAgICAgICAgICAgIDEyOHggNiBNSHogY2xvY2sgcGVyaW9kcyA9IDIxLjN1cworLy8gMTBQNl9VUyAgICAgICAgICAgICAgICAgIDY0eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gMTAuNnVzCisvLyA1UDNfVVMgICAgICAgICAgICAgICAgICAgMzJ4IDYgTUh6IGNsb2NrIHBlcmlvZHMgPSA1LjN1cworLy8gMlA3X1VTICAgICAgICAgICAgICAgICAgIDE2eCA2IE1IeiBjbG9jayBwZXJpb2RzID0gMi43dXMKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfMTBQOV9NUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF81UDQ2X01TICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzJQNzNfTVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfMVAzN19NUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF82ODJfVVMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzM0MV9VUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfMTcwX1VTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF84NVAzX1VTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzQyUDZfVVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfMjFQM19VUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBRElfNF9BVVhfQURDMF9TTVBMX0NZQ0xFX0VYUF8xMFA2X1VTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEFESV80X0FVWF9BREMwX1NNUExfQ1lDTEVfRVhQXzVQM19VUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfU01QTF9DWUNMRV9FWFBfMlA3X1VTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBGaWVsZDogICAgIFsxXSBSRVNFVF9OCisvLworLy8gUmVzZXQgQURDIGRpZ2l0YWwgc3ViY2hpcCwgYWN0aXZlIGxvdy4gQURDIG11c3QgYmUgcmVzZXQgZXZlcnkgdGltZSBpdCBpcworLy8gcmVjb25maWd1cmVkLgorLy8KKy8vIDA6IFJlc2V0CisvLyAxOiBOb3JtYWwgb3BlcmF0aW9uCisjZGVmaW5lIEFESV80X0FVWF9BREMwX1JFU0VUX04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfUkVTRVRfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBRElfNF9BVVhfQURDMF9SRVNFVF9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gQURDIEVuYWJsZQorLy8KKy8vIDA6IERpc2FibGUKKy8vIDE6IEVuYWJsZQorI2RlZmluZSBBRElfNF9BVVhfQURDMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9BREMwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX0FEQzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTQ0FMRV9ESVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfQURDMV9TQ0FMRV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9BREMxX1NDQUxFX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX0FEQzFfU0NBTEVfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX0FEQ1JFRjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs2XSBSRUZfT05fSURMRQorLy8KKy8vIEtlZXAgQURDUkVGIHBvd2VyZWQgdXAgaW4gSURMRSBzdGF0ZSB3aGVuIEFEQzAuU01QTF9NT0RFID0gMC4KKy8vCisvLyBTZXQgdG8gMSBpZiBBREMwLlNNUExfQ1lDTEVfRVhQIGlzIGxlc3MgdGhhbiA2ICgyMS4zdXMgc2FtcGxpbmcgdGltZSkKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfUkVGX09OX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9SRUZfT05fSURMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX1JFRl9PTl9JRExFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gSU9NVVgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9JT01VWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX0lPTVVYX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfSU9NVVhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBFWFQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX0VYVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfRVhUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBTUkMKKy8vCisvLyBBREMgcmVmZXJlbmNlIHNvdXJjZToKKy8vCisvLyAwOiBGaXhlZCByZWZlcmVuY2UgPSA0LjNWCisvLyAxOiBSZWxhdGl2ZSByZWZlcmVuY2UgPSBWRERTCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gQURDIHJlZmVyZW5jZSBtb2R1bGUgZW5hYmxlOgorLy8KKy8vIDA6IEFEQyByZWZlcmVuY2UgbW9kdWxlIHBvd2VyZWQgZG93bgorLy8gMTogQURDIHJlZmVyZW5jZSBtb2R1bGUgZW5hYmxlZAorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFESV80X0FVWF9PX0FEQ1JFRjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBWVFJJTQorLy8KKy8vIFRyaW0gb3V0cHV0IHZvbHRhZ2Ugb2YgQURDIGZpeGVkIHJlZmVyZW5jZSAoNjQgc3RlcHMsIDIncyBjb21wbGVtZW50KS4KKy8vIEFwcGxpZXMgb25seSBmb3IgQURDUkVGMC5TUkMgPSAwLgorLy8KKy8vIEV4YW1wbGVzOgorLy8gMHgwMCAtIG5vbWluYWwgdm9sdGFnZSAxLjQzVgorLy8gMHgwMSAtIG5vbWluYWwgKyAwLjQlIDEuNDM1VgorLy8gMHgzRiAtIG5vbWluYWwgLSAwLjQlIDEuNDI1VgorLy8gMHgxRiAtIG1heGltdW0gdm9sdGFnZSAxLjZWCisvLyAweDIwIC0gbWluaW11bSB2b2x0YWdlIDEuM1YKKyNkZWZpbmUgQURJXzRfQVVYX0FEQ1JFRjFfVlRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBRElfNF9BVVhfQURDUkVGMV9WVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFESV80X0FVWF9BRENSRUYxX1ZUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BRElfNF9BVVhfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2JhdG1vbi5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX2JhdG1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTkxMmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fYmF0bW9uLmgKQEAgLTAsMCArMSwzNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hb25fYmF0bW9uX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FPTl9CQVRNT05fSF9fCisjZGVmaW5lIF9fSFdfQU9OX0JBVE1PTl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBT05fQkFUTU9OIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9CQVRNT05fT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX01FQVNDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fQkFUTU9OX09fVEVNUFAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9CQVRNT05fT19URU1QUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX1RFTVBQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fQkFUTU9OX09fQkFUTU9OUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9CQVRNT05fT19CQVRNT05QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX0lPU1RSUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fQkFUTU9OX09fRkxBU0hQVU1QUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIExhc3QgTWVhc3VyZWQgQmF0dGVyeSBWb2x0YWdlCisjZGVmaW5lIEFPTl9CQVRNT05fT19CQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gQmF0dGVyeSBVcGRhdGUKKyNkZWZpbmUgQU9OX0JBVE1PTl9PX0JBVFVQRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBUZW1wZXJhdHVyZQorI2RlZmluZSBBT05fQkFUTU9OX09fVEVNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIFRlbXBlcmF0dXJlIFVwZGF0ZQorI2RlZmluZSBBT05fQkFUTU9OX09fVEVNUFVQRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0JBVE1PTl9PX0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIENBTENfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0NUTF9DQUxDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9CQVRNT05fQ1RMX0NBTENfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQU9OX0JBVE1PTl9DVExfQ0FMQ19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fQkFUTU9OX0NUTF9DQUxDX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIE1FQVNfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0NUTF9NRUFTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9CQVRNT05fQ1RMX01FQVNfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9DVExfTUVBU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fQkFUTU9OX0NUTF9NRUFTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0JBVE1PTl9PX01FQVNDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBQRVIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyAzMkNZQyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIDE2Q1lDICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gOENZQyAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBDT05UICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9NRUFTQ0ZHX1BFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fQkFUTU9OX01FQVNDRkdfUEVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFPTl9CQVRNT05fTUVBU0NGR19QRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9NRUFTQ0ZHX1BFUl8zMkNZQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fQkFUTU9OX01FQVNDRkdfUEVSXzE2Q1lDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9CQVRNT05fTUVBU0NGR19QRVJfOENZQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0JBVE1PTl9NRUFTQ0ZHX1BFUl9DT05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19URU1QUDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBDRkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBQMF9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFAwX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QUDBfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19URU1QUDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNTowXSBDRkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBQMV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFAxX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QUDFfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19URU1QUDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNDowXSBDRkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBQMl9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFAyX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QUDJfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19CQVRNT05QMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIENGRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUTU9OUDBfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRNT05QMF9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fQkFUTU9OX0JBVE1PTlAwX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0JBVE1PTl9PX0JBVE1PTlAxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6MF0gQ0ZHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRNT05QMV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fQkFUTU9OX0JBVE1PTlAxX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUTU9OUDFfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fSU9TVFJQMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjRdIENGRzIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0lPU1RSUDBfQ0ZHMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFPTl9CQVRNT05fSU9TVFJQMF9DRkcyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQU9OX0JBVE1PTl9JT1NUUlAwX0NGRzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBDRkcxCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9JT1NUUlAwX0NGRzFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fQkFUTU9OX0lPU1RSUDBfQ0ZHMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9CQVRNT05fSU9TVFJQMF9DRkcxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fQkFUTU9OX09fRkxBU0hQVU1QUDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBGQUxMQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfRkFMTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9GQUxMQl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0ZBTExCX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfRkFMTEJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6Nl0gSElHSExJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfSElHSExJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9ISUdITElNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0hJR0hMSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIExPV0xJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfTE9XTElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9MT1dMSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0xPV0xJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfTE9XTElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gT1ZSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9PVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX09WUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfT1ZSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9PVlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBDRkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fQkFUTU9OX0ZMQVNIUFVNUFAwX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFPTl9CQVRNT05fRkxBU0hQVU1QUDBfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQU9OX0JBVE1PTl9GTEFTSFBVTVBQMF9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19CQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMDo4XSBJTlQKKy8vCisvLyBJbnRlZ2VyIHBhcnQ6CisvLworLy8gMHgwOiAwViArIGZyYWN0aW9uYWwgcGFydAorLy8gLi4uCisvLyAweDM6IDNWICsgZnJhY3Rpb25hbCBwYXJ0CisvLyAweDQ6IDRWICsgZnJhY3Rpb25hbCBwYXJ0CisjZGVmaW5lIEFPTl9CQVRNT05fQkFUX0lOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRfSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBT05fQkFUTU9OX0JBVF9JTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEZSQUMKKy8vCisvLyBGcmFjdGlvbmFsIHBhcnQsIHN0YW5kYXJkIGJpbmFyeSBmcmFjdGlvbmFsIGVuY29kaW5nLgorLy8KKy8vIDB4MDA6IC4wVgorLy8gLi4uCisvLyAweDIwOiAxLzggPSAuMTI1VgorLy8gMHg0MDogMS80ID0gLjI1VgorLy8gMHg4MDogMS8yID0gLjVWCisvLyAuLi4KKy8vIDB4QTA6IDEvMiArIDEvOCA9IC42MjVWCisvLyAuLi4KKy8vIDB4RkY6IE1heAorI2RlZmluZSBBT05fQkFUTU9OX0JBVF9GUkFDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFPTl9CQVRNT05fQkFUX0ZSQUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRfRlJBQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19CQVRVUEQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8KKy8vIDA6IE5vIHVwZGF0ZSBzaW5jZSBsYXN0IGNsZWFyCisvLyAxOiBOZXcgYmF0dGVyeSB2b2x0YWdlIGlzIHByZXNlbnQuCisvLworLy8gV3JpdGUgMSB0byBjbGVhciB0aGUgc3RhdHVzLgorI2RlZmluZSBBT05fQkFUTU9OX0JBVFVQRF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9CQVRNT05fQkFUVVBEX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVRVUERfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fQkFUTU9OX0JBVFVQRF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0JBVE1PTl9PX1RFTVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNjo4XSBJTlQKKy8vCisvLyBJbnRlZ2VyIHBhcnQgKHNpZ25lZCkgb2YgdGVtcGVyYXR1cmUgdmFsdWUuCisvLyBUb3RhbCB2YWx1ZSA9IElOVEVHRVIgKyBGUkFDVElPTkFMCisvLyAyJ3MgY29tcGxlbWVudCBlbmNvZGluZworLy8KKy8vIDB4MTAwOiBNaW4gdmFsdWUKKy8vIDB4MUQ4OiAtNDBDCisvLyAweDFGRjogLTFDCisvLyAweDAwOiAwQworLy8gMHgxQjogMjdDCisvLyAweDU1OiA4NUMKKy8vIDB4RkY6IE1heCB2YWx1ZQorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBfSU5UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUF9JTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZGMDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QX0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9CQVRNT05fT19URU1QVVBECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vCisvLyAwOiBObyB1cGRhdGUgc2luY2UgbGFzdCBjbGVhcgorLy8gMTogTmV3IHRlbXBlcmF0dXJlIGlzIHByZXNlbnQuCisvLworLy8gV3JpdGUgMSB0byBjbGVhciB0aGUgc3RhdHVzLgorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBVUERfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9CQVRNT05fVEVNUFVQRF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0JBVE1PTl9URU1QVVBEX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fQkFUTU9OX1RFTVBVUERfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQU9OX0JBVE1PTl9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fZXZlbnQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDdkMjIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fZXZlbnQuaApAQCAtMCwwICsxLDE1MzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hb25fZXZlbnRfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQU9OX0VWRU5UX0hfXworI2RlZmluZSBfX0hXX0FPTl9FVkVOVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBT05fRVZFTlQgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gV2FrZS11cCBTZWxlY3RvciBGb3IgTUNVCisjZGVmaW5lIEFPTl9FVkVOVF9PX01DVVdVU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gV2FrZS11cCBTZWxlY3RvciBGb3IgQVVYCisjZGVmaW5lIEFPTl9FVkVOVF9PX0FVWFdVU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRXZlbnQgU2VsZWN0b3IgRm9yIE1DVSBFdmVudCBGYWJyaWMKKyNkZWZpbmUgQU9OX0VWRU5UX09fRVZUT01DVVNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBSVEMgQ2FwdHVyZSBFdmVudCBTZWxlY3RvciBGb3IgQU9OX1JUQworI2RlZmluZSBBT05fRVZFTlRfT19SVENTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0VWRU5UX09fTUNVV1VTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI5OjI0XSBXVTNfRVYKKy8vCisvLyBNQ1UgV2FrZXVwIFNvdXJjZSAjMworLy8KKy8vIEFPTiBFdmVudCBTb3VyY2Ugc2VsZWN0aW5nIDEgb2YgNCBldmVudHMgcm91dGVkIHRvIEFPTl9XVUMgZm9yIHdha2luZyB1cCB0aGUKKy8vIE1DVSBkb21haW4gZnJvbSBQb3dlciBPZmYgb3IgUG93ZXIgRG93bi4KKy8vIE5vdGU6CisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0YwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAgICAgICAgIDB4MzgwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgICAgICAgICAgMHgzNzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgICAgICAgICAweDM2MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgMHgzNDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAweDMzMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MzIwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgzMTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkYwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyRTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAweDJEMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkMwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJBMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgyODAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgICAgICAgICAweDI3MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MjYwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjMwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUIwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEzMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVM19FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UzX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTNfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsyMToxNl0gV1UyX0VWCisvLworLy8gTUNVIFdha2V1cCBTb3VyY2UgIzIKKy8vCisvLyBBT04gRXZlbnQgU291cmNlIHNlbGVjdGluZyAxIG9mIDQgZXZlbnRzIHJvdXRlZCB0byBBT05fV1VDIGZvciB3YWtpbmcgdXAgdGhlCisvLyBNQ1UgZG9tYWluIGZyb20gUG93ZXIgT2ZmIG9yIFBvd2VyIERvd24uCisvLyBOb3RlOgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0YwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgICAgICAgICAweDAwMzgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAgICAgICAgIDB4MDAzNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgICAgICAgICAweDAwMzUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAzNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDMzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMzIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyRTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJEMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyQjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJBMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjkwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMjYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFDMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxQTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE5MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBEMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBBMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDkwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTJfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMl9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UyX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEzOjhdIFdVMV9FVgorLy8KKy8vIE1DVSBXYWtldXAgU291cmNlICMxCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBzZWxlY3RpbmcgMSBvZiA0IGV2ZW50cyByb3V0ZWQgdG8gQU9OX1dVQyBmb3Igd2FraW5nIHVwIHRoZQorLy8gTUNVIGRvbWFpbiBmcm9tIFBvd2VyIE9mZiBvciBQb3dlciBEb3duLgorLy8gTm90ZToKKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM0YwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9DT01QQl9BU1lOQyAgICAgICAgICAgICAgICAgICAweDAwMDAzNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQkFUTU9OX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9CQVRNT05fVEVNUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMDAzNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzIwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkYwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0FVWF9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyRTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJEMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkMwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX0pUQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyQjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJBMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9SVENfQ09NQl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjkwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1JUQ19DSDJfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyODAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUlRDX0NIMV9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI3MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9SVENfQ0gwX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjYwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUlRDX0NIMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9SVENfQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjMwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUIwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTUwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFENyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UxX0VWX1BBRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTFfRVZfUEFEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMV9FVl9QQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBXVTBfRVYKKy8vCisvLyBNQ1UgV2FrZXVwIFNvdXJjZSAjMAorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2Ugc2VsZWN0aW5nIDEgb2YgNCBldmVudHMgcm91dGVkIHRvIEFPTl9XVUMgZm9yIHdha2luZyB1cCB0aGUKKy8vIE1DVSBkb21haW4gZnJvbSBQb3dlciBPZmYgb3IgUG93ZXIgRG93bi4KKy8vIE5vdGU6CisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJECisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJBCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQU9OX0VWRU5UX01DVVdVU0VMX1dVMF9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fRVZFTlRfTUNVV1VTRUxfV1UwX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9FVkVOVF9NQ1VXVVNFTF9XVTBfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fRVZFTlRfT19BVVhXVVNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjE6MTZdIFdVMl9FVgorLy8KKy8vIEFVWCBXYWtldXAgU291cmNlICMyCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBzZWxlY3RpbmcgMSBvZiAzIGV2ZW50cyByb3V0ZWQgdG8gQU9OX1dVQyBmb3Igd2FraW5nIHVwIHRoZQorLy8gQVVYIGRvbWFpbiBmcm9tIFBvd2VyIE9mZiBvciBQb3dlciBEb3duLgorLy8gTm90ZToKKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgICAgICAgICAgMHgwMDM4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9DT01QQl9BU1lOQyAgICAgICAgICAgICAgICAgICAweDAwMzcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQkFUTU9OX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9CQVRNT05fVEVNUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMzQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAzMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDMyMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMzEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0FVWF9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyRDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDJDMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX0pUQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMkIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyQTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9SVENfQ09NQl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDI5MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1JUQ19DSDJfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMjgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUlRDX0NIMV9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9SVENfQ0gwX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUlRDX0NIMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9SVENfQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFFMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxQzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFCMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDE1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEyMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA5MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFENyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2MDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UyX0VWX1BBRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTJfRVZfUEFEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMl9FVl9QQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMzo4XSBXVTFfRVYKKy8vCisvLyBBVVggV2FrZXVwIFNvdXJjZSAjMQorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2Ugc2VsZWN0aW5nIDEgb2YgMyBldmVudHMgcm91dGVkIHRvIEFPTl9XVUMgZm9yIHdha2luZyB1cCB0aGUKKy8vIEFVWCBkb21haW4gZnJvbSBQb3dlciBPZmYgb3IgUG93ZXIgRG93bi4KKy8vIE5vdGU6CisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgICAgICAgICAgMHgwMDAwMzcwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzEwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkUwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDJDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMkIwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjgwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjUwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMV9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UxX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTFfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gV1UwX0VWCisvLworLy8gQVVYIFdha2V1cCBTb3VyY2UgIzAKKy8vCisvLyBBT04gRXZlbnQgU291cmNlIHNlbGVjdGluZyAxIG9mIDMgZXZlbnRzIHJvdXRlZCB0byBBT05fV1VDIGZvciB3YWtpbmcgdXAgdGhlCisvLyBBVVggZG9tYWluIGZyb20gUG93ZXIgT2ZmIG9yIFBvd2VyIERvd24uCisvLyBOb3RlOgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkIKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFPTl9FVkVOVF9BVVhXVVNFTF9XVTBfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX0VWRU5UX0FVWFdVU0VMX1dVMF9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fRVZFTlRfQVVYV1VTRUxfV1UwX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0VWRU5UX09fRVZUT01DVVNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjE6MTZdIEFPTl9QUk9HMl9FVgorLy8KKy8vIEV2ZW50IHNlbGVjdG9yIGZvciBBT05fUFJPRzIgZXZlbnQuCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBpZCMgc2VsZWN0aW5nIGV2ZW50IHJvdXRlZCB0byBFVkVOVCBhcyBBT05fUFJPRzIgZXZlbnQuCisvLyBFTlVNczoKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBldmVudCwgYWx3YXlzIGxvdworLy8gQVVYX0NPTVBCX0FTWU5DX04gICAgICAgIENvbXBhcmF0b3IgQiBub3QgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBVVggQ29tcGFyYXRvciBCIChpbnZlcnRlZCkgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2VkIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVgKKy8vIEFVWF9DT01QQl9BU1lOQyAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkLiBBc3luY2hyb25vdXMgc2lnbmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB0aGUgQVVYIENvbXBhcmF0b3IgQiBhcyBvcHBvc2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbiBBVVgKKy8vIEJBVE1PTl9WT0xUICAgICAgICAgICAgICBCQVRNT04gdm9sdGFnZSB1cGRhdGUgZXZlbnQKKy8vIEJBVE1PTl9URU1QICAgICAgICAgICAgICBCQVRNT04gdGVtcGVyYXR1cmUgdXBkYXRlIGV2ZW50CisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDEgRXZlbnQKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggVGltZXIgMCBFdmVudAorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIFREQyBjb21wbGV0ZWQgb3IgdGltZWQgb3V0CisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQURDIGNvbnZlcnNpb24gY29tcGxldGVkCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQSB0cmlnZ2VyZWQKKy8vIEFVWF9TV0VWMiAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMyLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMgorLy8gQVVYX1NXRVYxICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzEuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxCisvLyBBVVhfU1dFVjAgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMC4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEpUQUcgICAgICAgICAgICAgICAgICAgICBKVEFHIGdlbmVyYXRlZCBldmVudAorLy8gUlRDX1VQRCAgICAgICAgICAgICAgICAgIFJUQyBVcGRhdGUgVGljayAoMTYga0h6IHNpZ25hbCwgaS5lLiBldmVudCBsaW5lCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlcyB2YWx1ZSBldmVyeSAzMiBrSHogY2xvY2sgcGVyaW9kKQorLy8gUlRDX0NPTUJfRExZICAgICAgICAgICAgIFJUQyBjb21iaW5lZCBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDFfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMF9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gyICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMiBldmVudAorLy8gUlRDX0NIMSAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgZXZlbnQKKy8vIFJUQ19DSDAgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIGV2ZW50CisvLyBQQUQgICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gYW55IFBBRAorLy8gUEFEMzEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMxCisvLyBQQUQzMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzAKKy8vIFBBRDI5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOQorLy8gUEFEMjggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI4CisvLyBQQUQyNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjcKKy8vIFBBRDI2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNgorLy8gUEFEMjUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI1CisvLyBQQUQyNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjQKKy8vIFBBRDIzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMworLy8gUEFEMjIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIyCisvLyBQQUQyMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjEKKy8vIFBBRDIwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMAorLy8gUEFEMTkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE5CisvLyBQQUQxOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTgKKy8vIFBBRDE3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNworLy8gUEFEMTYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE2CisvLyBQQUQxNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTUKKy8vIFBBRDE0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNAorLy8gUEFEMTMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEzCisvLyBQQUQxMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTIKKy8vIFBBRDExICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMQorLy8gUEFEMTAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEwCisvLyBQQUQ5ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOQorLy8gUEFEOCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDgKKy8vIFBBRDcgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ3CisvLyBQQUQ2ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENgorLy8gUEFENSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDUKKy8vIFBBRDQgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ0CisvLyBQQUQzICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMworLy8gUEFEMiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIKKy8vIFBBRDEgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxCisvLyBQQUQwICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAweDAwM0YwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgIDB4MDAzODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9DT01QQl9BU1lOQyAgICAgICAgICAgMHgwMDM3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQkFUTU9OX1ZPTFQgICAgICAgICAgICAgICAweDAwMzYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9CQVRNT05fVEVNUCAgICAgICAgICAgICAgIDB4MDAzNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgMHgwMDM0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAweDAwMzMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgIDB4MDAzMjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgMHgwMDMxMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgIDB4MDAyRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0FVWF9TV0VWMiAgICAgICAgICAgICAgICAgMHgwMDJFMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfQVVYX1NXRVYxICAgICAgICAgICAgICAgICAweDAwMkQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9BVVhfU1dFVjAgICAgICAgICAgICAgICAgIDB4MDAyQzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX0pUQUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDJCMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUlRDX1VQRCAgICAgICAgICAgICAgICAgICAweDAwMkEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9SVENfQ09NQl9ETFkgICAgICAgICAgICAgIDB4MDAyOTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1JUQ19DSDJfRExZICAgICAgICAgICAgICAgMHgwMDI4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUlRDX0NIMV9ETFkgICAgICAgICAgICAgICAweDAwMjcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9SVENfQ0gwX0RMWSAgICAgICAgICAgICAgIDB4MDAyNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgMHgwMDI1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUlRDX0NIMSAgICAgICAgICAgICAgICAgICAweDAwMjQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9SVENfQ0gwICAgICAgICAgICAgICAgICAgIDB4MDAyMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMzEgICAgICAgICAgICAgICAgICAgICAweDAwMUYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQzMCAgICAgICAgICAgICAgICAgICAgIDB4MDAxRTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDI5ICAgICAgICAgICAgICAgICAgICAgMHgwMDFEMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMjggICAgICAgICAgICAgICAgICAgICAweDAwMUMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyNyAgICAgICAgICAgICAgICAgICAgIDB4MDAxQjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDI2ICAgICAgICAgICAgICAgICAgICAgMHgwMDFBMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMjUgICAgICAgICAgICAgICAgICAgICAweDAwMTkwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyNCAgICAgICAgICAgICAgICAgICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDIzICAgICAgICAgICAgICAgICAgICAgMHgwMDE3MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMjIgICAgICAgICAgICAgICAgICAgICAweDAwMTYwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQyMSAgICAgICAgICAgICAgICAgICAgIDB4MDAxNTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDIwICAgICAgICAgICAgICAgICAgICAgMHgwMDE0MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTkgICAgICAgICAgICAgICAgICAgICAweDAwMTMwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQxOCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDE3ICAgICAgICAgICAgICAgICAgICAgMHgwMDExMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTYgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQxNSAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDE0ICAgICAgICAgICAgICAgICAgICAgMHgwMDBFMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTMgICAgICAgICAgICAgICAgICAgICAweDAwMEQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQxMiAgICAgICAgICAgICAgICAgICAgIDB4MDAwQzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDExICAgICAgICAgICAgICAgICAgICAgMHgwMDBCMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMTAgICAgICAgICAgICAgICAgICAgICAweDAwMEEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOTAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDggICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFENyAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNjAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDUgICAgICAgICAgICAgICAgICAgICAgMHgwMDA1MDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFENCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cyX0VWX1BBRDIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzJfRVZfUEFEMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMl9FVl9QQUQwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTM6OF0gQU9OX1BST0cxX0VWCisvLworLy8gRXZlbnQgc2VsZWN0b3IgZm9yIEFPTl9QUk9HMSBldmVudC4KKy8vCisvLyBBT04gRXZlbnQgU291cmNlIGlkIyBzZWxlY3RpbmcgZXZlbnQgcm91dGVkIHRvIEVWRU5UIGFzIEFPTl9QUk9HMSBldmVudC4KKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM0YwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9DT01QQl9BU1lOQ19OICAgICAgICAgMHgwMDAwMzgwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX0NPTVBCX0FTWU5DICAgICAgICAgICAweDAwMDAzNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9CQVRNT05fVk9MVCAgICAgICAgICAgICAgIDB4MDAwMDM2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0JBVE1PTl9URU1QICAgICAgICAgICAgICAgMHgwMDAwMzUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAweDAwMDAzNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgIDB4MDAwMDMzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgMHgwMDAwMzIwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAweDAwMDAzMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgMHgwMDAwMkYwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfQVVYX1NXRVYyICAgICAgICAgICAgICAgICAweDAwMDAyRTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgIDB4MDAwMDJEMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgMHgwMDAwMkMwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfSlRBRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyQjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9SVENfVVBEICAgICAgICAgICAgICAgICAgIDB4MDAwMDJBMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1JUQ19DT01CX0RMWSAgICAgICAgICAgICAgMHgwMDAwMjkwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUlRDX0NIMl9ETFkgICAgICAgICAgICAgICAweDAwMDAyODAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9SVENfQ0gxX0RMWSAgICAgICAgICAgICAgIDB4MDAwMDI3MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1JUQ19DSDBfRExZICAgICAgICAgICAgICAgMHgwMDAwMjYwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUlRDX0NIMiAgICAgICAgICAgICAgICAgICAweDAwMDAyNTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9SVENfQ0gxICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1JUQ19DSDAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjMwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQzMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDMwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjkgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQyOCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFDMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDI3ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUIwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjYgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQyNSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE5MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDI0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjMgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNzAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQyMiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE2MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDIxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTUwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMjAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNDAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxOSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDE4ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTcgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxNiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDE1ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxMyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDEyICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMTEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFENSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzFfRVZfUEFEMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMV9FVl9QQUQxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cxX0VWX1BBRDAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBBT05fUFJPRzBfRVYKKy8vCisvLyBFdmVudCBzZWxlY3RvciBmb3IgQU9OX1BST0cwIGV2ZW50LgorLy8KKy8vIEFPTiBFdmVudCBTb3VyY2UgaWQjIHNlbGVjdGluZyBldmVudCByb3V0ZWQgdG8gRVZFTlQgYXMgQU9OX1BST0cwIGV2ZW50LgorLy8gRU5VTXM6CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZXZlbnQsIGFsd2F5cyBsb3cKKy8vIEFVWF9DT01QQl9BU1lOQ19OICAgICAgICBDb21wYXJhdG9yIEIgbm90IHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gQVVYIENvbXBhcmF0b3IgQiAoaW52ZXJ0ZWQpIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3NlZCB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYCisvLyBBVVhfQ09NUEJfQVNZTkMgICAgICAgICAgQ29tcGFyYXRvciBCIHRyaWdnZXJlZC4gQXN5bmNocm9ub3VzIHNpZ25hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIEFVWCBDb21wYXJhdG9yIEIgYXMgb3Bwb3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVWF9DT01QQiB3aGljaCBpcyBzeW5jaHJvbml6ZWQgaW4gQVVYCisvLyBCQVRNT05fVk9MVCAgICAgICAgICAgICAgQkFUTU9OIHZvbHRhZ2UgdXBkYXRlIGV2ZW50CisvLyBCQVRNT05fVEVNUCAgICAgICAgICAgICAgQkFUTU9OIHRlbXBlcmF0dXJlIHVwZGF0ZSBldmVudAorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCBUaW1lciAxIEV2ZW50CisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIFRpbWVyIDAgRXZlbnQKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBUREMgY29tcGxldGVkIG9yIHRpbWVkIG91dAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFEQyBjb252ZXJzaW9uIGNvbXBsZXRlZAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEEgdHJpZ2dlcmVkCisvLyBBVVhfU1dFVjIgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMi4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjIKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMxLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMQorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzAuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBKVEFHICAgICAgICAgICAgICAgICAgICAgSlRBRyBnZW5lcmF0ZWQgZXZlbnQKKy8vIFJUQ19VUEQgICAgICAgICAgICAgICAgICBSVEMgVXBkYXRlIFRpY2sgKDE2IGtIeiBzaWduYWwsIGkuZS4gZXZlbnQgbGluZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXMgdmFsdWUgZXZlcnkgMzIga0h6IGNsb2NrIHBlcmlvZCkKKy8vIFJUQ19DT01CX0RMWSAgICAgICAgICAgICBSVEMgY29tYmluZWQgZGVsYXllZCBldmVudAorLy8gUlRDX0NIMl9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gxX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDBfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAwIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMiAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDIgZXZlbnQKKy8vIFJUQ19DSDEgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAxIGV2ZW50CisvLyBSVENfQ0gwICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCBldmVudAorLy8gUEFEICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIGFueSBQQUQKKy8vIFBBRDMxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMQorLy8gUEFEMzAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMwCisvLyBQQUQyOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjkKKy8vIFBBRDI4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyOAorLy8gUEFEMjcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI3CisvLyBQQUQyNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjYKKy8vIFBBRDI1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNQorLy8gUEFEMjQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI0CisvLyBQQUQyMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjMKKy8vIFBBRDIyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMgorLy8gUEFEMjEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIxCisvLyBQQUQyMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjAKKy8vIFBBRDE5ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOQorLy8gUEFEMTggICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE4CisvLyBQQUQxNyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTcKKy8vIFBBRDE2ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNgorLy8gUEFEMTUgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE1CisvLyBQQUQxNCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTQKKy8vIFBBRDEzICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMworLy8gUEFEMTIgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEyCisvLyBQQUQxMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTEKKy8vIFBBRDEwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMAorLy8gUEFEOSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDkKKy8vIFBBRDggICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ4CisvLyBQQUQ3ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENworLy8gUEFENiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDYKKy8vIFBBRDUgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ1CisvLyBQQUQ0ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENAorLy8gUEFEMyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDMKKy8vIFBBRDIgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyCisvLyBQQUQxICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMQorLy8gUEFEMCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkIKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFPTl9FVkVOVF9FVlRPTUNVU0VMX0FPTl9QUk9HMF9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX0VWRU5UX0VWVE9NQ1VTRUxfQU9OX1BST0cwX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fRVZFTlRfRVZUT01DVVNFTF9BT05fUFJPRzBfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0VWRU5UX09fUlRDU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6MF0gUlRDX0NIMV9DQVBUX0VWCisvLworLy8gQU9OIEV2ZW50IFNvdXJjZSBpZCMgZm9yIFJUQ1NFTCBldmVudCB3aGljaCBpcyBmZWQgdG8gQU9OX1JUQy4gUGxlYXNlIHJlZmVyCisvLyB0byBBT05fUlRDOkNIMUNBUFQKKy8vIEVOVU1zOgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50LCBhbHdheXMgbG93CisvLyBBVVhfQ09NUEJfQVNZTkNfTiAgICAgICAgQ29tcGFyYXRvciBCIG5vdCB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIEFVWCBDb21wYXJhdG9yIEIgKGludmVydGVkKSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zZWQgdG8gQVVYX0NPTVBCIHdoaWNoIGlzIHN5bmNocm9uaXplZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWAorLy8gQVVYX0NPTVBCX0FTWU5DICAgICAgICAgIENvbXBhcmF0b3IgQiB0cmlnZ2VyZWQuIEFzeW5jaHJvbm91cyBzaWduYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoZSBBVVggQ29tcGFyYXRvciBCIGFzIG9wcG9zZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVhfQ09NUEIgd2hpY2ggaXMgc3luY2hyb25pemVkIGluIEFVWAorLy8gQkFUTU9OX1ZPTFQgICAgICAgICAgICAgIEJBVE1PTiB2b2x0YWdlIHVwZGF0ZSBldmVudAorLy8gQkFUTU9OX1RFTVAgICAgICAgICAgICAgIEJBVE1PTiB0ZW1wZXJhdHVyZSB1cGRhdGUgZXZlbnQKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggVGltZXIgMSBFdmVudAorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCBUaW1lciAwIEV2ZW50CisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgVERDIGNvbXBsZXRlZCBvciB0aW1lZCBvdXQKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBREMgY29udmVyc2lvbiBjb21wbGV0ZWQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBDb21wYXJhdG9yIEIgdHJpZ2dlcmVkCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQ29tcGFyYXRvciBBIHRyaWdnZXJlZAorLy8gQVVYX1NXRVYyICAgICAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSB0cmlnZ2VyZWQgZXZlbnQgIzIuIFRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYyCisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIFNvZnR3YXJlIHRyaWdnZXJlZCBldmVudCAjMS4gVHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEKKy8vIEFVWF9TV0VWMCAgICAgICAgICAgICAgICBBVVggU29mdHdhcmUgdHJpZ2dlcmVkIGV2ZW50ICMwLiBUcmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSlRBRyAgICAgICAgICAgICAgICAgICAgIEpUQUcgZ2VuZXJhdGVkIGV2ZW50CisvLyBSVENfVVBEICAgICAgICAgICAgICAgICAgUlRDIFVwZGF0ZSBUaWNrICgxNiBrSHogc2lnbmFsLCBpLmUuIGV2ZW50IGxpbmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVzIHZhbHVlIGV2ZXJ5IDMyIGtIeiBjbG9jayBwZXJpb2QpCisvLyBSVENfQ09NQl9ETFkgICAgICAgICAgICAgUlRDIGNvbWJpbmVkIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDJfRExZICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIC0gZGVsYXllZCBldmVudAorLy8gUlRDX0NIMV9ETFkgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDEgLSBkZWxheWVkIGV2ZW50CisvLyBSVENfQ0gwX0RMWSAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMCAtIGRlbGF5ZWQgZXZlbnQKKy8vIFJUQ19DSDIgICAgICAgICAgICAgICAgICBSVEMgY2hhbm5lbCAyIGV2ZW50CisvLyBSVENfQ0gxICAgICAgICAgICAgICAgICAgUlRDIGNoYW5uZWwgMSBldmVudAorLy8gUlRDX0NIMCAgICAgICAgICAgICAgICAgIFJUQyBjaGFubmVsIDAgZXZlbnQKKy8vIFBBRCAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBhbnkgUEFECisvLyBQQUQzMSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMzEKKy8vIFBBRDMwICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzMAorLy8gUEFEMjkgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI5CisvLyBQQUQyOCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjgKKy8vIFBBRDI3ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNworLy8gUEFEMjYgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDI2CisvLyBQQUQyNSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjUKKy8vIFBBRDI0ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyNAorLy8gUEFEMjMgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIzCisvLyBQQUQyMiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMjIKKy8vIFBBRDIxICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQyMQorLy8gUEFEMjAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDIwCisvLyBQQUQxOSAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTkKKy8vIFBBRDE4ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxOAorLy8gUEFEMTcgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE3CisvLyBQQUQxNiAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTYKKy8vIFBBRDE1ICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxNQorLy8gUEFEMTQgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDE0CisvLyBQQUQxMyAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTMKKy8vIFBBRDEyICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQxMgorLy8gUEFEMTEgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDExCisvLyBQQUQxMCAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMTAKKy8vIFBBRDkgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ5CisvLyBQQUQ4ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEOAorLy8gUEFENyAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDcKKy8vIFBBRDYgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQ2CisvLyBQQUQ1ICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFENQorLy8gUEFENCAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDQKKy8vIFBBRDMgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQzCisvLyBQQUQyICAgICAgICAgICAgICAgICAgICAgRWRnZSBkZXRlY3Qgb24gUEFEMgorLy8gUEFEMSAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IG9uIFBBRDEKKy8vIFBBRDAgICAgICAgICAgICAgICAgICAgICBFZGdlIGRldGVjdCBvbiBQQUQwCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX0NPTVBCX0FTWU5DX04gICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfQ09NUEJfQVNZTkMgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0JBVE1PTl9WT0xUICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQkFUTU9OX1RFTVAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9BVVhfU1dFVjIgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9KVEFHICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJCCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUlRDX0NPTUJfRExZICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9SVENfQ0gyX0RMWSAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1JUQ19DSDFfRExZICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUlRDX0NIMF9ETFkgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1JUQ19DSDEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUlRDX0NIMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDMxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMzAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyOSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDI4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDI1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyMyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDIyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMjEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDE5ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMTggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxNyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMTUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxNCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDEzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMTIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQxMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDEwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEOSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDcgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFENiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fRVZFTlRfUlRDU0VMX1JUQ19DSDFfQ0FQVF9FVl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9FVkVOVF9SVENTRUxfUlRDX0NIMV9DQVBUX0VWX1BBRDEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0VWRU5UX1JUQ1NFTF9SVENfQ0gxX0NBUFRfRVZfUEFEMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisKKyNlbmRpZiAvLyBfX0FPTl9FVkVOVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25faW9jLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25faW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjYjY5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9pb2MuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2Fvbl9pb2NfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQU9OX0lPQ19IX18KKyNkZWZpbmUgX19IV19BT05fSU9DX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFPTl9JT0MgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZXJuYWwKKyNkZWZpbmUgQU9OX0lPQ19PX0lPU1RSTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBT05fSU9DX09fSU9TVFJNRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFPTl9JT0NfT19JT1NUUk1BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gSU8gTGF0Y2ggQ29udHJvbAorI2RlZmluZSBBT05fSU9DX09fSU9DTEFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIFNDTEtfTEYgRXh0ZXJuYWwgT3V0cHV0IENvbnRyb2wKKyNkZWZpbmUgQU9OX0lPQ19PX0NMSzMyS0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9JT0NfT19JT1NUUk1JTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIEdSQVlfQ09ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9JT0NfSU9TVFJNSU5fR1JBWV9DT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX0lPQ19JT1NUUk1JTl9HUkFZX0NPREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fSU9DX0lPU1RSTUlOX0dSQVlfQ09ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0lPQ19PX0lPU1RSTUVECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gR1JBWV9DT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX0lPQ19JT1NUUk1FRF9HUkFZX0NPREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fSU9DX0lPU1RSTUVEX0dSQVlfQ09ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9JT0NfSU9TVFJNRURfR1JBWV9DT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fSU9DX09fSU9TVFJNQVgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBHUkFZX0NPREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fSU9DX0lPU1RSTUFYX0dSQVlfQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9JT0NfSU9TVFJNQVhfR1JBWV9DT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX0lPQ19JT1NUUk1BWF9HUkFZX0NPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9JT0NfT19JT0NMQVRDSAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gQ29udHJvbHMgbGF0Y2hlcyBiZXR3ZWVuIE1DVSBJT0MgYW5kIEFPTl9JT0MuCisvLworLy8gVGhlIGxhdGNoZXMgYXJlIHRyYW5zcGFyZW50IGJ5IGRlZmF1bHQuCisvLworLy8gVGhleSBtdXN0IGJlIGNsb3NlZCBwcmlvciB0byBwb3dlciBvZmYgdGhlIGRvbWFpbihzKSBjb250cm9sbGluZyB0aGUgSU9zIGluCisvLyBvcmRlciB0byBwcmVzZXJ2ZSBJTyB2YWx1ZXMgb24gZXh0ZXJuYWwgcGlucy4KKy8vIEVOVU1zOgorLy8gVFJBTlNQICAgICAgICAgICAgICAgICAgIExhdGNoZXMgYXJlIHRyYW5zcGFyZW50LCBtZWFuaW5nIHRoZSB2YWx1ZSBvZiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJTyBpcyBkaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBHUElPIG9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaXBoZXJhbCB2YWx1ZQorLy8gU1RBVElDICAgICAgICAgICAgICAgICAgIExhdGNoZXMgYXJlIHN0YXRpYywgbWVhbmluZyB0aGUgY3VycmVudCB2YWx1ZSBvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJTyBwaW4gaXMgZnJvemVuIGJ5IGxhdGNoZXMgYW5kIGtlcHQgZXZlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIEdQSU8gbW9kdWxlIG9yIGEgcGVyaXBoZXJhbCBtb2R1bGUgaXMgdHVybmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmCisjZGVmaW5lIEFPTl9JT0NfSU9DTEFUQ0hfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0lPQ19JT0NMQVRDSF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fSU9DX0lPQ0xBVENIX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9JT0NfSU9DTEFUQ0hfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX0lPQ19JT0NMQVRDSF9FTl9UUkFOU1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fSU9DX0lPQ0xBVENIX0VOX1NUQVRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX0lPQ19PX0NMSzMyS0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9FX04KKy8vCisvLyAwOiBPdXRwdXQgZW5hYmxlIGFjdGl2ZS4gU0NMS19MRiBvdXRwdXQgb24gSU8gcGluIHRoYXQgaGFzIFBPUlRfSUQgKGUuZy4KKy8vIElPQzpJT0NGRzAuUE9SVF9JRCkgc2V0IHRvIEFPTl9DTEszMksuCisvLyAxOiBPdXRwdXQgZW5hYmxlIG5vdCBhY3RpdmUKKyNkZWZpbmUgQU9OX0lPQ19DTEszMktDVExfT0VfTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fSU9DX0NMSzMyS0NUTF9PRV9OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9JT0NfQ0xLMzJLQ1RMX09FX05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX0lPQ19DTEszMktDVExfT0VfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FPTl9JT0NfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX3J0Yy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDRiNjUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hb25fcnRjLmgKQEAgLTAsMCArMSw1MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hb25fcnRjX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FPTl9SVENfSF9fCisjZGVmaW5lIF9fSFdfQU9OX1JUQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBT05fUlRDIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIENvbnRyb2wKKyNkZWZpbmUgQU9OX1JUQ19PX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBFdmVudCBGbGFncywgUlRDIFN0YXR1cworI2RlZmluZSBBT05fUlRDX09fRVZGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFNlY29uZCBDb3VudGVyIFZhbHVlLCBJbnRlZ2VyIFBhcnQKKyNkZWZpbmUgQU9OX1JUQ19PX1NFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBTZWNvbmQgQ291bnRlciBWYWx1ZSwgRnJhY3Rpb25hbCBQYXJ0CisjZGVmaW5lIEFPTl9SVENfT19TVUJTRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gU3Vic2Vjb25kcyBJbmNyZW1lbnQKKyNkZWZpbmUgQU9OX1JUQ19PX1NVQlNFQ0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBDaGFubmVsIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQU9OX1JUQ19PX0NIQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBDaGFubmVsIDAgQ29tcGFyZSBWYWx1ZQorI2RlZmluZSBBT05fUlRDX09fQ0gwQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIENoYW5uZWwgMSBDb21wYXJlIFZhbHVlCisjZGVmaW5lIEFPTl9SVENfT19DSDFDTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gQ2hhbm5lbCAyIENvbXBhcmUgVmFsdWUKKyNkZWZpbmUgQU9OX1JUQ19PX0NIMkNNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBDaGFubmVsIDIgQ29tcGFyZSBWYWx1ZSBBdXRvLWluY3JlbWVudAorI2RlZmluZSBBT05fUlRDX09fQ0gyQ01QSU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIENoYW5uZWwgMSBDYXB0dXJlIFZhbHVlCisjZGVmaW5lIEFPTl9SVENfT19DSDFDQVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gQU9OIFN5bmNocm9uaXphdGlvbgorI2RlZmluZSBBT05fUlRDX09fU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1JUQ19PX0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTg6MTZdIENPTUJfRVZfTUFTSworLy8KKy8vIEV2ZW50bWFzayBzZWxlY3Rpbmcgd2hpY2ggZGVsYXllZCBldmVudHMgdGhhdCBmb3JtIHRoZSBjb21iaW5lZCBldmVudC4KKy8vIEVOVU1zOgorLy8gQ0gyICAgICAgICAgICAgICAgICAgICAgIFVzZSBDaGFubmVsIDIgZGVsYXllZCBldmVudCBpbiBjb21iaW5lZCBldmVudAorLy8gQ0gxICAgICAgICAgICAgICAgICAgICAgIFVzZSBDaGFubmVsIDEgZGVsYXllZCBldmVudCBpbiBjb21iaW5lZCBldmVudAorLy8gQ0gwICAgICAgICAgICAgICAgICAgICAgIFVzZSBDaGFubmVsIDAgZGVsYXllZCBldmVudCBpbiBjb21iaW5lZCBldmVudAorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGV2ZW50IGlzIHNlbGVjdGVkIGZvciBjb21iaW5lZCBldmVudC4KKyNkZWZpbmUgQU9OX1JUQ19DVExfQ09NQl9FVl9NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fUlRDX0NUTF9DT01CX0VWX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0NPTUJfRVZfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1JUQ19DVExfQ09NQl9FVl9NQVNLX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBT05fUlRDX0NUTF9DT01CX0VWX01BU0tfQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0NPTUJfRVZfTUFTS19DSDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfQ09NQl9FVl9NQVNLX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMTo4XSBFVl9ERUxBWQorLy8KKy8vIE51bWJlciBvZiBTQ0xLX0xGIGNsb2NrIGN5Y2xlcyB3YWl0ZWQgYmVmb3JlIGdlbmVyYXRpbmcgZGVsYXllZCBldmVudHMuCisvLyAoQ29tbW9uIHNldHRpbmcgZm9yIGFsbCBSVEMgY2FubmVscykgIHRoZSBkZWxheWVkIGV2ZW50IGlzIGRlbGF5ZWQKKy8vIEVOVU1zOgorLy8gRDE0NCAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDE0NCBjbG9jayBjeWNsZXMKKy8vIEQxMjggICAgICAgICAgICAgICAgICAgICBEZWxheSBieSAxMjggY2xvY2sgY3ljbGVzCisvLyBEMTEyICAgICAgICAgICAgICAgICAgICAgRGVsYXkgYnkgMTEyIGNsb2NrIGN5Y2xlcworLy8gRDk2ICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDk2IGNsb2NrIGN5Y2xlcworLy8gRDgwICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDgwIGNsb2NrIGN5Y2xlcworLy8gRDY0ICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDY0IGNsb2NrIGN5Y2xlcworLy8gRDQ4ICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDQ4IGNsb2NrIGN5Y2xlcworLy8gRDMyICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDMyIGNsb2NrIGN5Y2xlcworLy8gRDE2ICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDE2IGNsb2NrIGN5Y2xlcworLy8gRDggICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDggY2xvY2sgY3ljbGVzCisvLyBENCAgICAgICAgICAgICAgICAgICAgICAgRGVsYXkgYnkgNCBjbG9jayBjeWNsZXMKKy8vIEQyICAgICAgICAgICAgICAgICAgICAgICBEZWxheSBieSAyIGNsb2NrIGN5Y2xlcworLy8gRDEgICAgICAgICAgICAgICAgICAgICAgIERlbGF5IGJ5IDEgY2xvY2sgY3ljbGVzCisvLyBEMCAgICAgICAgICAgICAgICAgICAgICAgTm8gZGVsYXkgb24gZGVsYXllZCBldmVudAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EMTQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0QxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EOTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0Q4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9ENDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0QzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0Q0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQU9OX1JUQ19DVExfRVZfREVMQVlfRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fUlRDX0NUTF9FVl9ERUxBWV9EMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VWX0RFTEFZX0QwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbN10gUkVTRVQKKy8vCisvLyBSVEMgQ291bnRlciByZXNldC4KKy8vCisvLyBXcml0aW5nIDEgdG8gdGhpcyBiaXQgd2lsbCByZXNldCB0aGUgUlRDIGNvdW50ZXIuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCB3aGVuIHJlc2V0IHRha2VzIGVmZmVjdAorI2RlZmluZSBBT05fUlRDX0NUTF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFPTl9SVENfQ1RMX1JFU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQU9OX1JUQ19DVExfUkVTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBT05fUlRDX0NUTF9SRVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzJdIFJUQ180S0haX0VOCisvLworLy8gUlRDXzRLSFogaXMgYSA0IEtIeiByZWZlcmVuY2Ugb3V0cHV0LCB0YXBwZWQgZnJvbSAgU1VCU0VDLlZBTFVFICBiaXQgMTkKKy8vIHdoaWNoIGlzIHVzZWQgYnkgQVVYIHRpbWVyLgorLy8KKy8vIDA6IFJUQ180S0haIHNpZ25hbCBpcyBmb3JjZWQgdG8gMAorLy8gMTogUlRDXzRLSFogaXMgZW5hYmxlZCAoIHByb3ZpZWQgdGhhdCBSVEMgaXMgZW5hYmxlZCBFTikKKyNkZWZpbmUgQU9OX1JUQ19DVExfUlRDXzRLSFpfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fUlRDX0NUTF9SVENfNEtIWl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFPTl9SVENfQ1RMX1JUQ180S0haX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1JUQ19DVExfUlRDXzRLSFpfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBSVENfVVBEX0VOCisvLworLy8gUlRDX1VQRCBpcyBhIDE2IEtIeiBzaWduYWwgdXNlZCB0byBzeW5jIHVwIHRoZSByYWRpbyB0aW1lci4gVGhlIDE2IEtoeiBpcworLy8gU0NMS19MRiBkaXZpZGVkIGJ5IDIKKy8vCisvLyAwOiBSVENfVVBEIHNpZ25hbCBpcyBmb3JjZWQgdG8gMAorLy8gMTogUlRDX1VQRCBzaWduYWwgaXMgdG9nZ2xpbmcgQDE2IGtIegorI2RlZmluZSBBT05fUlRDX0NUTF9SVENfVVBEX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9SVENfQ1RMX1JUQ19VUERfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQU9OX1JUQ19DVExfUlRDX1VQRF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fUlRDX0NUTF9SVENfVVBEX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gRW5hYmxlIFJUQyBjb3VudGVyCisvLworLy8gMDogSGFsdGVkIChmcm96ZW4pCisvLyAxOiBSdW5uaW5nCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1JUQ19DVExfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fUlRDX0NUTF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9SVENfQ1RMX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fRVZGTEFHUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTZdIENIMgorLy8KKy8vIENoYW5uZWwgMiBldmVudCBmbGFnLCBzZXQgd2hlbiBDSENUTC5DSDJfRU4gPSAxIGFuZCB0aGUgUlRDIHZhbHVlIG1hdGNoZXMgb3IKKy8vIHBhc3NlcyB0aGUgQ0gyQ01QIHZhbHVlLgorLy8KKy8vIEFuIGV2ZW50IHdpbGwgYmUgc2NoZWR1bGVkIHRvIG9jY3VyIGFzIHNvb24gYXMgcG9zc2libGUgd2hlbiB3cml0aW5nIHRvCisvLyBDSDJDTVAgcHJvdmlkZWQgdGhhdCB0aGUgY2hhbm5lbCBpcyBlbmFibGVkIGFuZCB0aGUgbmV3IHZhbHVlIG1hdGNoZXMgYW55CisvLyB0aW1lIGJldHdlZW4gbmV4dCAgUlRDIHZhbHVlIGFuZCAxIHNlY29uZCBpbiB0aGUgcGFzdAorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgdGhpcyBmbGFnLiBOb3RlIHRoYXQgYSBuZXcgZXZlbnQgY2FuIG5vdCBvY2N1ciBvbiB0aGlzCisvLyBjaGFubmVsIGluIGZpcnN0IDIgU0NMS19MRiBjeWNsZXMgYWZ0ZXIgYSBjbGVhcmFuY2UuCisvLworLy8gQVVYX1NDRSBjYW4gcmVhZCB0aGUgZmxhZyB0aHJvdWdoIEFVWF9XVUM6V1VFVkZMQUdTLkFPTl9SVENfQ0gyIGFuZCBjbGVhciBpdAorLy8gdXNpbmcgQVVYX1dVQzpXVUVWQ0xSLkFPTl9SVENfQ0gyLgorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIENIMQorLy8KKy8vIENoYW5uZWwgMSBldmVudCBmbGFnLCBzZXQgd2hlbiBDSENUTC5DSDFfRU4gPSAxIGFuZCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy8vIC0gQ0hDVEwuQ0gxX0NBUFRfRU4gPSAwIGFuZCB0aGUgUlRDIHZhbHVlIG1hdGNoZXMgb3IgcGFzc2VzIHRoZSBDSDFDTVAKKy8vIHZhbHVlLgorLy8gLSBDSENUTC5DSDFfQ0FQVF9FTiA9IDEgYW5kIGNhcHR1cmUgb2NjdXJzLgorLy8KKy8vIEFuIGV2ZW50IHdpbGwgYmUgc2NoZWR1bGVkIHRvIG9jY3VyIGFzIHNvb24gYXMgcG9zc2libGUgd2hlbiB3cml0aW5nIHRvCisvLyBDSDFDTVAgcHJvdmlkZWQgdGhhdCB0aGUgY2hhbm5lbCBpcyBlbmFibGVkLCBpbiBjb21wYXJlIG1vZGUgYW5kIHRoZSBuZXcKKy8vIHZhbHVlIG1hdGNoZXMgYW55IHRpbWUgYmV0d2VlbiBuZXh0ICBSVEMgdmFsdWUgYW5kIDEgc2Vjb25kIGluIHRoZSBwYXN0LgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgdGhpcyBmbGFnLiBOb3RlIHRoYXQgYSBuZXcgZXZlbnQgY2FuIG5vdCBvY2N1ciBvbiB0aGlzCisvLyBjaGFubmVsIGluIGZpcnN0IDIgU0NMS19MRiBjeWNsZXMgYWZ0ZXIgYSBjbGVhcmFuY2UuCisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gQ0gwCisvLworLy8gQ2hhbm5lbCAwIGV2ZW50IGZsYWcsIHNldCB3aGVuIENIQ1RMLkNIMF9FTiA9IDEgYW5kIHRoZSBSVEMgdmFsdWUgbWF0Y2hlcyBvcgorLy8gcGFzc2VzIHRoZSBDSDBDTVAgdmFsdWUuCisvLworLy8gQW4gZXZlbnQgd2lsbCBiZSBzY2hlZHVsZWQgdG8gb2NjdXIgYXMgc29vbiBhcyBwb3NzaWJsZSB3aGVuIHdyaXRpbmcgdG8KKy8vIENIMENNUCBwcm92aWRlZCB0aGF0IHRoZSBjaGFubmVscyBpcyBlbmFibGVkIGFuZCB0aGUgbmV3IHZhbHVlIG1hdGNoZXMgYW55CisvLyB0aW1lIGJldHdlZW4gbmV4dCAgUlRDIHZhbHVlIGFuZCAxIHNlY29uZCBpbiB0aGUgcGFzdC4KKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIHRoaXMgZmxhZy4gTm90ZSB0aGF0IGEgbmV3IGV2ZW50IGNhbiBub3Qgb2NjdXIgb24gdGhpcworLy8gY2hhbm5lbCBpbiBmaXJzdCAyIFNDTEtfTEYgY3ljbGVzIGFmdGVyIGEgY2xlYXJhbmNlLgorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9SVENfRVZGTEFHU19DSDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1JUQ19FVkZMQUdTX0NIMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fUlRDX0VWRkxBR1NfQ0gwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1JUQ19PX1NFQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTFVFCisvLworLy8gVW5zaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgUmVhbCBUaW1lIENsb2NrIGluIHNlY29uZHMuCisvLworLy8gV2hlbiByZWFkaW5nIHRoaXMgcmVnaXN0ZXIgdGhlIGNvbnRlbnQgb2YgU1VCU0VDLlZBTFVFIGlzIHNpbXVsdGFuZW91c2x5CisvLyBsYXRjaGVkLiBBIGNvbnNpc3RlbnQgcmVhZGluZyBvZiB0aGUgY29tYmluZWQgUmVhbCBUaW1lIENsb2NrIGNhbiBiZQorLy8gb2J0YWluZWQgYnkgZmlyc3QgcmVhZGluZyB0aGlzIHJlZ2lzdGVyLCB0aGVuIHJlYWRpbmcgU1VCU0VDIHJlZ2lzdGVyLgorI2RlZmluZSBBT05fUlRDX1NFQ19WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFPTl9SVENfU0VDX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQU9OX1JUQ19TRUNfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19TVUJTRUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRQorLy8KKy8vIFVuc2lnbmVkIGludGVnZXIgcmVwcmVzZW50aW5nIFJlYWwgVGltZSBDbG9jayBpbiBmcmFjdGlvbnMgb2YgYSBzZWNvbmQKKy8vIChWQUxVRS8yXjMyIHNlY29uZHMpIGF0IHRoZSB0aW1lIHdoZW4gU0VDIHJlZ2lzdGVyIHdhcyByZWFkLgorLy8KKy8vIEV4YW1wbGVzIDoKKy8vIC0gMHgwMDAwXzAwMDAgPSAwLjAgc2VjCisvLyAtIDB4NDAwMF8wMDAwID0gMC4yNSBzZWMKKy8vIC0gMHg4MDAwXzAwMDAgPSAwLjUgc2VjCisvLyAtIDB4QzAwMF8wMDAwID0gMC43NSBzZWMKKyNkZWZpbmUgQU9OX1JUQ19TVUJTRUNfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBBT05fUlRDX1NVQlNFQ19WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfU1VCU0VDX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fU1VCU0VDSU5DCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gVkFMVUVJTkMKKy8vCisvLyBUaGlzIHZhbHVlIGNvbXBlbnNhdGVzIGZvciBhIFNDTEtfTEYgY2xvY2sgd2hpY2ggaGFzIGFuIG9mZnNldCBmcm9tIDMyNzY4CisvLyBIei4KKy8vCisvLyBUaGUgY29tcGVuc2F0aW9uIHZhbHVlIGNhbiBiZSBmb3VuZCBhcyAyXjM4IC8gZnJlcSwgd2hlcmUgZnJlcSBpcyBTQ0xLX0xGCisvLyBjbG9jayBmcmVxdWVuY3kgaW4gSGVydHoKKy8vCisvLyBUaGlzIHZhbHVlIGlzIGFkZGVkIHRvIFNVQlNFQy5WQUxVRSBvbiBldmVyeSBjeWNsZSwgYW5kIGNhcnJ5IG9mIHRoaXMgaXMKKy8vIGFkZGVkIHRvIFNFQy5WQUxVRS4gVG8gcGVyZm9ybSB0aGUgYWRkaXRpb24sIGJpdHMgWzIzOjZdIGFyZSBhbGlnbmVkIHdpdGgKKy8vIFNVQlNFQy5WQUxVRSBiaXRzIFsxNzowXS4gVGhlIHJlbWFpbmluZyBiaXRzIFs1OjBdIGFyZSBhY2N1bXVsYXRlZCBpbiBhCisvLyBoaWRkZW4gNi1iaXQgcmVnaXN0ZXIgdGhhdCBnZW5lcmF0ZXMgYSBjYXJyeSBpbnRvIHRoZSBhYm92ZSBtZW50aW9uZWQKKy8vIGFkZGl0aW9uIG9uIG92ZXJmbG93LgorLy8gVGhlIGRlZmF1bHQgdmFsdWUgY29ycmVzcG9uZHMgdG8gaW5jcmVtZW50aW5nIGJ5IHByZWNpc2VseSAxLzMyNzY4IG9mIGEKKy8vIHNlY29uZC4KKy8vCisvLyBOT1RFOiBUaGlzIHJlZ2lzdGVyIGlzIHJlYWQgb25seS4gTW9kaWZpY2F0aW9uIG9mIHRoZSByZWdpc3RlciB2YWx1ZSBtdXN0IGJlCisvLyBkb25lIHVzaW5nIHJlZ2lzdGVycyBBVVhfV1VDOlJUQ1NVQlNFQ0lOQzEgLCAgQVVYX1dVQzpSVENTVUJTRUNJTkMwIGFuZAorLy8gQVVYX1dVQzpSVENTVUJTRUNJTkNDVEwKKyNkZWZpbmUgQU9OX1JUQ19TVUJTRUNJTkNfVkFMVUVJTkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBBT05fUlRDX1NVQlNFQ0lOQ19WQUxVRUlOQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIEFPTl9SVENfU1VCU0VDSU5DX1ZBTFVFSU5DX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fQ0hDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE4XSBDSDJfQ09OVF9FTgorLy8KKy8vIFNldCB0byBlbmFibGUgY29udGludW91cyBvcGVyYXRpb24gb2YgQ2hhbm5lbCAyCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gyX0NPTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDJfQ09OVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMl9DT05UX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gyX0NPTlRfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxNl0gQ0gyX0VOCisvLworLy8gUlRDIENoYW5uZWwgMiBFbmFibGUKKy8vCisvLyAwOiBEaXNhYmxlIFJUQyBDaGFubmVsIDIKKy8vIDE6IEVuYWJsZSBSVEMgQ2hhbm5lbCAyCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gyX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDJfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gyX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOV0gQ0gxX0NBUFRfRU4KKy8vCisvLyBTZXQgQ2hhbm5lbCAxIG1vZGUKKy8vCisvLyAwOiBDb21wYXJlIG1vZGUgKGRlZmF1bHQpCisvLyAxOiBDYXB0dXJlIG1vZGUKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDFfQ0FQVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMV9DQVBUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gxX0NBUFRfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDFfQ0FQVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBDSDFfRU4KKy8vCisvLyBSVEMgQ2hhbm5lbCAxIEVuYWJsZQorLy8KKy8vIDA6IERpc2FibGUgUlRDIENoYW5uZWwgMQorLy8gMTogRW5hYmxlIFJUQyBDaGFubmVsIDEKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gxX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBDSDBfRU4KKy8vCisvLyBSVEMgQ2hhbm5lbCAwIEVuYWJsZQorLy8KKy8vIDA6IERpc2FibGUgUlRDIENoYW5uZWwgMAorLy8gMTogRW5hYmxlIFJUQyBDaGFubmVsIDAKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fUlRDX0NIQ1RMX0NIMF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9SVENfQ0hDVExfQ0gwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1JUQ19DSENUTF9DSDBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19DSDBDTVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRQorLy8KKy8vIFJUQyBDaGFubmVsIDAgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBCaXQgMzEgdG8gMTYgcmVwcmVzZW50cyBzZWNvbmRzIGFuZCBiaXRzIDE1IHRvIDAgcmVwcmVzZW50cyBzdWJzZWNvbmRzIG9mCisvLyB0aGUgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBUaGUgY29tcGFyZSB2YWx1ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IFNFQy5WQUxVRSAoMTU6MCkgYW5kIFNVQlNFQy5WQUxVRQorLy8gKDMxOjE2KSB2YWx1ZXMgb2YgdGhlIFJlYWwgVGltZSBDbG9jayByZWdpc3Rlci4gQSBDYW5uZWwgMCBldmVudCBpcworLy8gZ2VuZXJhdGVkIHdoZW4ge1NFQy5WQUxVRSgxNTowKSxTVUJTRUMuVkFMVUUgKDMxOjE2KX0gaXMgcmVhY2hpbmcgb3IKKy8vIGV4Y2l0aW5nIHRoZSBjb21wYXJlIHZhbHVlLgorLy8KKy8vIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciBjYW4gdHJpZ2dlciBhbiBpbW1lZGlhdGUqKSBldmVudCBpbiBjYXNlIHRoZSBuZXcKKy8vIGNvbXBhcmUgdmFsdWUgbWF0Y2hlcyBhIFJlYWwgVGltZSBDbG9jayAgdmFsdWUgZnJvbSAxIHNlY29uZCBpbiB0aGUgcGFzdCB1cAorLy8gdGlsbCBjdXJyZW50IFJlYWwgVGltZSBDbG9jayB2YWx1ZS4KKy8vCisvLyBFeGFtcGxlOgorLy8gVG8gZ2VuZXJhdGUgYSBjb21wYXJlICA1LjUgc2Vjb25kcyBSVEMgc3RhcnQsLSBzZXQgdGhpcyB2YWx1ZSA9IDB4MDAwNV84MDAwCisvLworLy8gKikgSXQgY2FuIHRha2UgdXAgdG8gMiBTQ0xLX0xGIGNsb2NrIGN5Y2xlcyBiZWZvcmUgZXZlbnQgb2NjdXJzIGR1ZSB0bworLy8gc3luY2hyb25pemF0aW9uLgorI2RlZmluZSBBT05fUlRDX0NIMENNUF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFPTl9SVENfQ0gwQ01QX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQU9OX1JUQ19DSDBDTVBfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19DSDFDTVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRQorLy8KKy8vIFJUQyBDaGFubmVsIDEgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBCaXQgMzEgdG8gMTYgcmVwcmVzZW50cyBzZWNvbmRzIGFuZCBiaXRzIDE1IHRvIDAgcmVwcmVzZW50cyBzdWJzZWNvbmRzIG9mCisvLyB0aGUgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBUaGUgY29tcGFyZSB2YWx1ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IFNFQy5WQUxVRSAoMTU6MCkgYW5kIFNVQlNFQy5WQUxVRQorLy8gKDMxOjE2KSB2YWx1ZXMgb2YgdGhlIFJlYWwgVGltZSBDbG9jayByZWdpc3Rlci4gQSBDYW5uZWwgMCBldmVudCBpcworLy8gZ2VuZXJhdGVkIHdoZW4ge1NFQy5WQUxVRSgxNTowKSxTVUJTRUMuVkFMVUUgKDMxOjE2KX0gaXMgcmVhY2hpbmcgb3IKKy8vIGV4Y2l0aW5nIHRoZSBjb21wYXJlIHZhbHVlLgorLy8KKy8vIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciBjYW4gdHJpZ2dlciBhbiBpbW1lZGlhdGUqKSBldmVudCBpbiBjYXNlIHRoZSBuZXcKKy8vIGNvbXBhcmUgdmFsdWUgbWF0Y2hlcyBhIFJlYWwgVGltZSBDbG9jayAgdmFsdWUgZnJvbSAxIHNlY29uZCBpbiB0aGUgcGFzdCB1cAorLy8gdGlsbCBjdXJyZW50IFJlYWwgVGltZSBDbG9jayB2YWx1ZS4KKy8vCisvLyBFeGFtcGxlOgorLy8gVG8gZ2VuZXJhdGUgYSBjb21wYXJlICA1LjUgc2Vjb25kcyBSVEMgc3RhcnQsLSBzZXQgdGhpcyB2YWx1ZSA9IDB4MDAwNV84MDAwCisvLworLy8gKikgSXQgY2FuIHRha2UgdXAgdG8gMiBTQ0xLX0xGIGNsb2NrIGN5Y2xlcyBiZWZvcmUgZXZlbnQgb2NjdXJzIGR1ZSB0bworLy8gc3luY2hyb25pemF0aW9uLgorI2RlZmluZSBBT05fUlRDX0NIMUNNUF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFPTl9SVENfQ0gxQ01QX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQU9OX1JUQ19DSDFDTVBfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19DSDJDTVAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRQorLy8KKy8vIFJUQyBDaGFubmVsIDIgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBCaXQgMzEgdG8gMTYgcmVwcmVzZW50cyBzZWNvbmRzIGFuZCBiaXRzIDE1IHRvIDAgcmVwcmVzZW50cyBzdWJzZWNvbmRzIG9mCisvLyB0aGUgY29tcGFyZSB2YWx1ZS4KKy8vCisvLyBUaGUgY29tcGFyZSB2YWx1ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IFNFQy5WQUxVRSAoMTU6MCkgYW5kIFNVQlNFQy5WQUxVRQorLy8gKDMxOjE2KSB2YWx1ZXMgb2YgdGhlIFJlYWwgVGltZSBDbG9jayByZWdpc3Rlci4gQSBDYW5uZWwgMCBldmVudCBpcworLy8gZ2VuZXJhdGVkIHdoZW4ge1NFQy5WQUxVRSgxNTowKSxTVUJTRUMuVkFMVUUgKDMxOjE2KX0gaXMgcmVhY2hpbmcgb3IKKy8vIGV4Y2l0aW5nIHRoZSBjb21wYXJlIHZhbHVlLgorLy8KKy8vIFdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciBjYW4gdHJpZ2dlciBhbiBpbW1lZGlhdGUqKSBldmVudCBpbiBjYXNlIHRoZSBuZXcKKy8vIGNvbXBhcmUgdmFsdWUgbWF0Y2hlcyBhIFJlYWwgVGltZSBDbG9jayAgdmFsdWUgZnJvbSAxIHNlY29uZCBpbiB0aGUgcGFzdCB1cAorLy8gdGlsbCBjdXJyZW50IFJlYWwgVGltZSBDbG9jayB2YWx1ZS4KKy8vCisvLyBFeGFtcGxlOgorLy8gVG8gZ2VuZXJhdGUgYSBjb21wYXJlICA1LjUgc2Vjb25kcyBSVEMgc3RhcnQsLSBzZXQgdGhpcyB2YWx1ZSA9IDB4MDAwNV84MDAwCisvLworLy8gKikgSXQgY2FuIHRha2UgdXAgdG8gMiBTQ0xLX0xGIGNsb2NrIGN5Y2xlcyBiZWZvcmUgZXZlbnQgb2NjdXJzIGR1ZSB0bworLy8gc3luY2hyb25pemF0aW9uLgorI2RlZmluZSBBT05fUlRDX0NIMkNNUF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFPTl9SVENfQ0gyQ01QX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQU9OX1JUQ19DSDJDTVBfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19DSDJDTVBJTkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRQorLy8KKy8vIElmIENIQ1RMLkNIMl9DT05UX0VOIGlzIHNldCwgdGhpcyB2YWx1ZSBpcyBhZGRlZCB0byBDSDJDTVAuVkFMVUUgb24gZXZlcnkKKy8vIGNoYW5uZWwgMiBjb21wYXJlIGV2ZW50LgorI2RlZmluZSBBT05fUlRDX0NIMkNNUElOQ19WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFPTl9SVENfQ0gyQ01QSU5DX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQU9OX1JUQ19DSDJDTVBJTkNfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9SVENfT19DSDFDQVBUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gU0VDCisvLworLy8gVmFsdWUgb2YgU0VDLlZBTFVFIGJpdHMgMTU6MCBhdCBjYXB0dXJlIHRpbWUuCisjZGVmaW5lIEFPTl9SVENfQ0gxQ0FQVF9TRUNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1JUQ19DSDFDQVBUX1NFQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBBT05fUlRDX0NIMUNBUFRfU0VDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFNVQlNFQworLy8KKy8vIFZhbHVlIG9mIFNVQlNFQy5WQUxVRSBiaXRzIDMxOjE2IGF0IGNhcHR1cmUgdGltZS4KKyNkZWZpbmUgQU9OX1JUQ19DSDFDQVBUX1NVQlNFQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBT05fUlRDX0NIMUNBUFRfU1VCU0VDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFPTl9SVENfQ0gxQ0FQVF9TVUJTRUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fUlRDX09fU1lOQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFdCVVNZCisvLworLy8gVGhpcyByZWdpc3RlciB3aWxsIGFsd2F5cyByZXR1cm4gMCwtIGhvd2V2ZXIgaXQgd2lsbCBub3QgcmV0dXJuIHRoZSB2YWx1ZQorLy8gdW50aWwgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHdyaXRlIHJlcXVlc3RzIGJldHdlZW4gTUNVIGFuZCBBT04KKy8vCisvLyBOb3RlOiBXcml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgcHJpb3IgdG8gcmVhZGluZyB3aWxsIGZvcmNlIGEgd2FpdCB1bnRpbCBuZXh0CisvLyBTQ0xLX0xGICBlZGdlLiBUaGlzIGlzIHJlY29tbWVuZGVkIGZvciBzeW5jaW5nIHJlYWQgcmVnaXN0ZXJzIGZyb20gQU9OIHdoZW4KKy8vIHdha2luZyB1cCBmcm9tIHNsZWVwCisvLyBGYWlsdXJlIHRvIGRvIHNvIG1heSByZXN1bHQgaW4gcmVhZGluZyBBT04gdmFsdWVzIGZyb20gcHJpb3IgdG8gZ29pbmcgdG8KKy8vIHNsZWVwCisjZGVmaW5lIEFPTl9SVENfU1lOQ19XQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1JUQ19TWU5DX1dCVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fUlRDX1NZTkNfV0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9SVENfU1lOQ19XQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BT05fUlRDX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9zeXNjdGwuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl9zeXNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y4YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX3N5c2N0bC5oCkBAIC0wLDAgKzEsMzQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYW9uX3N5c2N0bF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BT05fU1lTQ1RMX0hfXworI2RlZmluZSBfX0hXX0FPTl9TWVNDVExfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQU9OX1NZU0NUTCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBQb3dlciBNYW5hZ2VtZW50CisjZGVmaW5lIEFPTl9TWVNDVExfT19QV1JDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gUmVzZXQgTWFuYWdlbWVudAorI2RlZmluZSBBT05fU1lTQ1RMX09fUkVTRVRDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFNsZWVwIE1vZGUKKyNkZWZpbmUgQU9OX1NZU0NUTF9PX1NMRUVQQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9TWVNDVExfT19QV1JDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBEQ0RDX0FDVElWRQorLy8KKy8vIFNlbGVjdCB0byB1c2UgRENEQyByZWd1bGF0b3IgZm9yIFZERFIgaW4gYWN0aXZlIG1vZGUKKy8vCisvLyAwOiBVc2UgR0xETyBmb3IgcmVndWxhdGlvbiBvZiBWRERSaW4gYWN0aXZlIG1vZGUuCisvLyAxOiBVc2UgRENEQyBmb3IgcmVndWxhdGlvbiBvZiBWRERSaW4gYWN0aXZlIG1vZGUuCisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19BQ1RJVkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0FDVElWRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfQUNUSVZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRVhUX1JFR19NT0RFCisvLworLy8gU3RhdHVzIG9mIHNvdXJjZSBmb3IgVkREUnN1cHBseToKKy8vCisvLyAwOiBEQ0RDL0dMRE8gYXJlIGdlbmVyYXRpbmcgVkREUgorLy8gMTogRENEQy9HTERPIGFyZSBieXBhc3NlZCwgZXh0ZXJuYWwgcmVndWxhdG9yIHN1cHBsaWVzIFZERFIKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRVhUX1JFR19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9FWFRfUkVHX01PREVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0VYVF9SRUdfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRVhUX1JFR19NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBEQ0RDX0VOCisvLworLy8gU2VsZWN0IHRvIHVzZSBEQ0RDIHJlZ3VsYXRvciBkdXJpbmcgcmVjaGFyZ2Ugb2YgVkREUgorLy8KKy8vIDA6IFVzZSBHTERPIGZvciByZWNoYXJnZSBvZiBWRERSCisvLyAxOiBVc2UgRENEQyBmb3IgcmVjaGFyZ2Ugb2YgVkREUgorLy8KKy8vIE5vdGU6IFRoaXMgYml0ZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgc2FtZSBhcyBEQ0RDX0FDVElWRQorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9TWVNDVExfUFdSQ1RMX0RDRENfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9QV1JDVExfRENEQ19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fU1lTQ1RMX1BXUkNUTF9EQ0RDX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1NZU0NUTF9PX1JFU0VUQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gU1lTUkVTRVQKKy8vCisvLyBDb2xkIHJlc2V0IHJlZ2lzdGVyLiBXcml0aW5nIDEgdG8gdGhpcyBiaXRmaWVsZCB3aWxsIHJlc2V0IHRoZSBlbnRpcmUgY2hpcAorLy8gYW5kIGNhdXNlIGJvb3QgY29kZSB0byBydW4gYWdhaW4uCisvLworLy8gMDogTm8gZWZmZWN0CisvLyAxOiBHZW5lcmF0ZSBzeXN0ZW0gcmVzZXQuIEFwcGVhcnMgYXMgU1lTUkVTRVQgaW4gUkVTRVRfU1JDLgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1NZU1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfU1lTUkVTRVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9TWVNSRVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1NZU1JFU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMjVdIEJPT1RfREVUXzFfQ0xSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfQ0xSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9DTFJfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX0NMUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBCT09UX0RFVF8wX0NMUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9DTFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX0NMUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9DTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxN10gQk9PVF9ERVRfMV9TRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9TRVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX1NFVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIEJPT1RfREVUXzBfU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9TRVRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX1NFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBXVV9GUk9NX1NECisvLworLy8gQSBXYWtldXAgZnJvbSBTSFVURE9XTiBvbiBhbiBJTyBldmVudCBoYXMgb2NjdXJyZWQsIG9yIGEgd2FrZXVwIGZyb20KKy8vIFNIVVRET1dOIGhhcyBvY2N1cnJlZCBhcyBhIHJlc3VsdCBvZiB0aGUgZGVidWdnZXIgYmVpbmcgYXR0YWNoZWQuLiAoVENLIHBpbgorLy8gYmVpbmcgZm9yY2VkIGxvdykKKy8vCisvLyBQbGVhc2UgcmVmZXIgdG8gW0lPQzpJT0NGR24sLldVX0NGR10gZm9yIGNvbmZpZ3VyaW5nIHRoZSBJTydzIGFzIHdha2V1cAorLy8gc291cmNlcy4KKy8vCisvLyAwOiBXYWtldXAgb2NjdXJyZWQgZnJvbSBjb2xkIHJlc2V0IG9yIGJyb3duIG91dCBhcyBzZWVuIGluIFJFU0VUX1NSQworLy8gMTogQSB3YWtldXAgaGFzIG9jY3VycmVkIGZyb20gU0hVVERPV04KKy8vCisvLyBOb3RlOiBUaGlzIGZsYWcgY2FuIG5vdCBiZSBjbGVhcmVkIGFuZCB3aWxsIHRoZXJlZm9yIHJlbWFpbiB2YWxpZCB1bnRpbGwKKy8vIHBvd2Vyb2ZmL3Jlc2V0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfV1VfRlJPTV9TRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9XVV9GUk9NX1NEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1dVX0ZST01fU0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfV1VfRlJPTV9TRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gR1BJT19XVV9GUk9NX1NECisvLworLy8gQSB3YWtldXAgZnJvbSBTSFVURE9XTiBvbiBhbiBJTyBldmVudCBoYXMgb2NjdXJyZWQKKy8vCisvLyBQbGVhc2UgcmVmZXIgdG8gW0lPQzpJT0NGR24sLldVX0NGR10gZm9yIGNvbmZpZ3VyaW5nIHRoZSBJTydzIGFzIHdha2V1cAorLy8gc291cmNlcy4KKy8vCisvLyAwOiBUaGUgd2FrZXVwIGRpZCBub3Qgb2NjdXIgZnJvbSBTSFVURE9XTiBvbiBhbiBJTyBldmVudAorLy8gMTogQSB3YWtldXAgZnJvbSBTSFVURE9XTiBvY2N1cnJlZCBmcm9tIGFuIElPIGV2ZW50CisvLworLy8gVGhlIGNhc2Ugd2hlcmUgV1VfRlJPTV9TRCBpcyBhc3NlcnRlZCBidXQgdGhpcyBiaXRmaWVsZCBpcyBub3QgYXNzZXJ0ZWQgd2lsbAorLy8gb25seSBvY2N1ciBpbiBhIGRlYnVnIHNlc3Npb24uIFRoZSBib290IGNvZGUgd2lsbCBub3QgcHJvY2VlZCB3aXRoIHdha2V1cAorLy8gZnJvbSBTSFVURE9XTiBwcm9jZWR1cmUgdW50aWwgdGhpcyBiaXRmaWVsZCBpcyBhc3NlcnRlZCBhcyB3ZWxsLgorLy8KKy8vIE5vdGU6IFRoaXMgZmxhZyBjYW4gbm90IGJlIGNsZWFyZWQgYW5kIHdpbGwgdGhlcmVmb3IgcmVtYWluIHZhbGlkIHVudGlsbAorLy8gcG93ZXJvZmYvcmVzZXQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9HUElPX1dVX0ZST01fU0QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0dQSU9fV1VfRlJPTV9TRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfR1BJT19XVV9GUk9NX1NEX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9HUElPX1dVX0ZST01fU0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBCT09UX0RFVF8xCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBCT09UX0RFVF8wCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0JPT1RfREVUXzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQk9PVF9ERVRfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9CT09UX0RFVF8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBWRERTX0xPU1NfRU5fT1ZSCisvLworLy8gT3ZlcnJpZGUgb2YgVkREU19MT1NTX0VOCisvLworLy8gMDogQnJvd24gb3V0IGRldGVjdCBvZiBWRERTIGlzIGlnbm9yZWQsIHVubGVzcyBWRERTX0xPU1NfRU49MQorLy8gMTogQnJvd24gb3V0IGRldGVjdCBvZiBWRERTIGdlbmVyYXRlcyBzeXN0ZW0gcmVzZXQgKHJlZ2FyZGxlc3Mgb2YKKy8vIFZERFNfTE9TU19FTikKKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgbG9ja2VkCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREU19MT1NTX0VOX09WUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERTX0xPU1NfRU5fT1ZSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFNfTE9TU19FTl9PVlJfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREU19MT1NTX0VOX09WUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gVkREUl9MT1NTX0VOX09WUgorLy8KKy8vIE92ZXJyaWRlIG9mIFZERFJfTE9TU19FTgorLy8KKy8vIDA6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUiBpcyBpZ25vcmVkLCB1bmxlc3MgVkREUl9MT1NTX0VOPTEKKy8vIDE6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUiBnZW5lcmF0ZXMgc3lzdGVtIHJlc2V0IChyZWdhcmRsZXNzIG9mCisvLyBWRERSX0xPU1NfRU4pCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIGxvY2tlZAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFJfTE9TU19FTl9PVlIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREUl9MT1NTX0VOX09WUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERSX0xPU1NfRU5fT1ZSX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFJfTE9TU19FTl9PVlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFZERF9MT1NTX0VOX09WUgorLy8KKy8vIE92ZXJyaWRlIG9mIFZERF9MT1NTX0VOCisvLworLy8gMDogQnJvd24gb3V0IGRldGVjdCBvZiBWREQgaXMgaWdub3JlZCwgdW5sZXNzIFZERF9MT1NTX0VOPTEKKy8vIDE6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREIGdlbmVyYXRlcyBzeXN0ZW0gcmVzZXQgKHJlZ2FyZGxlc3Mgb2YKKy8vIFZERF9MT1NTX0VOKQorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSBsb2NrZWQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERfTE9TU19FTl9PVlIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERF9MT1NTX0VOX09WUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREX0xPU1NfRU5fT1ZSX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERfTE9TU19FTl9PVlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs3XSBWRERTX0xPU1NfRU4KKy8vCisvLyBDb250cm9scyByZXNldCBnZW5lcmF0aW9uIGluIGNhc2UgVkREUyBpcyBsb3N0CisvLworLy8gMDogQnJvd24gb3V0IGRldGVjdCBvZiBWRERTIGlzIGlnbm9yZWQsIHVubGVzcyBWRERTX0xPU1NfRU5fT1ZSPTEKKy8vIDE6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUyBnZW5lcmF0ZXMgc3lzdGVtIHJlc2V0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREU19MT1NTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERTX0xPU1NfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFNfTE9TU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREU19MT1NTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gVkREUl9MT1NTX0VOCisvLworLy8gQ29udHJvbHMgcmVzZXQgZ2VuZXJhdGlvbiBpbiBjYXNlIFZERFIgaXMgbG9zdAorLy8KKy8vIDA6IEJyb3duIG91dCBkZXRlY3Qgb2YgVkREUiBpcyBpZ25vcmVkLCB1bmxlc3MgVkREUl9MT1NTX0VOX09WUj0xCisvLyAxOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERFIgZ2VuZXJhdGVzIHN5c3RlbSByZXNldAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFJfTE9TU19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREUl9MT1NTX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERSX0xPU1NfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERFJfTE9TU19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFZERF9MT1NTX0VOCisvLworLy8gQ29udHJvbHMgcmVzZXQgZ2VuZXJhdGlvbiBpbiBjYXNlIFZERCBpcyBsb3N0CisvLworLy8gMDogQnJvd24gb3V0IGRldGVjdCBvZiBWREQgaXMgaWdub3JlZCwgdW5sZXNzIFZERF9MT1NTX0VOX09WUj0xCisvLyAxOiBCcm93biBvdXQgZGV0ZWN0IG9mIFZERCBnZW5lcmF0ZXMgc3lzdGVtIHJlc2V0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREX0xPU1NfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9WRERfTE9TU19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1ZERF9MT1NTX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfVkREX0xPU1NfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQ0xLX0xPU1NfRU4KKy8vCisvLyBDb250cm9scyByZXNldCBnZW5lcmF0aW9uIGluIGNhc2UgU0NMS19MRiBpcyBsb3N0LiAgKHByb3ZpZGVkIHRoYXQgY2xvY2sKKy8vIGxvc3MgZGV0ZWN0aW9uIGlzIGVuYWJsZWQgYnkgRERJXzBfT1NDOkNUTDAuQ0xLX0xPU1NfRU4pCisvLworLy8gTm90ZTogQ2xvY2sgbG9zcyByZXNldCBnZW5lcmF0aW9uIG11c3QgYmUgZGlzYWJsZWQgYmVmb3JlIFNDTEtfTEYgY2xvY2sKKy8vIHNvdXJjZSBpcyBjaGFuZ2VkIGluICBERElfMF9PU0M6Q1RMMC5TQ0xLX0xGX1NSQ19TRUwgYW5kIHJlbWFpbiBkaXNhYmxlZAorLy8gdW50aWxsIHRoZSBjaGFuZ2UgaXMgY29uZmlybWVkIGluIERESV8wX09TQzpTVEFUMC5TQ0xLX0xGX1NSQy4gRmFpbHVyZSB0byBkbworLy8gc28gbWF5IHJlc3VsdCBpbiBhIHNwdXJpb3VzIHN5c3RlbSByZXNldC4gQ2xvY2sgbG9zcyByZXNldCBnZW5lcmF0aW9uIGNhbiBiZQorLy8gZGlzYWJsZWQgdGhyb3VnaCB0aGlzIGJpdGZpZWxkIG9yIGJ5IGNsZWFyaW5nICBERElfMF9PU0M6Q1RMMC5DTEtfTE9TU19FTgorLy8KKy8vIDA6IENsb2NrIGxvc3MgaXMgaWdub3JlZAorLy8gMTogQ2xvY2sgbG9zcyBnZW5lcmF0ZXMgc3lzdGVtIHJlc2V0CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQ0xLX0xPU1NfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9DTEtfTE9TU19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX0NMS19MT1NTX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfQ0xLX0xPU1NfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MV0gUkVTRVRfU1JDCisvLworLy8gU2hvd3MgdGhlIHNvdXJjZSBvZiB0aGUgbGFzdCBzeXN0ZW0gcmVzZXQ6CisvLyBPY2N1cnJlbmNlIG9mIG9uZSBvZiB0aGUgcmVzZXQgc291cmNlcyBtYXkgdHJpZ2dlciBzZXZlcmFsIG90aGVyIHJlc2V0CisvLyBzb3VyY2VzIGFzIGVzc2VudGlhbCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSB1bmRlcmdvaW5nIHJlc2V0LiBUaGlzIGZpZWxkCisvLyB3aWxsIHJlcG9ydCB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgcmVzZXQgKG5vdCB0aGUgb3RoZXIgcmVzZXRzIHRoYXQgYXJlCisvLyBjb25zZXF1ZW5jZSBvZiB0aGUgc3lzdGVtIHJlc2V0KS4KKy8vIFRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlIHRoZSBhY3R1YWwgcmVnaXN0ZXIgaXMgbm90IGNhcHR1cmVkIGJlZm9yZSB0aGUgcmVzZXQKKy8vIHNvdXJjZSBiZWluZyByZWxlYXNlZC4gSWYgYSBuZXcgcmVzZXQgc291cmNlIGlzIHRyaWdnZXJlZCwgaW4gYSB3aW5kb3cgb2YKKy8vIGZvdXIgIDMyIGtIeiBwZXJpb2RzIGFmdGVyIHRoZSBwcmV2aW91cyBoYXMgYmVlbiByZWxlYXNlZCwgIHRoaXMgcmVnaXN0ZXIKKy8vIG1heSBpbmRpY2F0ZSBQb3dlciBvbiByZXNldCBhcyBzb3VyY2UuCisvLyBFTlVNczoKKy8vIFdBUk1SRVNFVCAgICAgICAgICAgICAgICBTb2Z0d2FyZSByZXNldCB2aWEgUFJDTSB3YXJtIHJlc2V0IHJlcXVlc3QKKy8vIFNZU1JFU0VUICAgICAgICAgICAgICAgICBTb2Z0d2FyZSByZXNldCB2aWEgU1lTUkVTRVQgcmVnaXN0ZXIKKy8vIENMS19MT1NTICAgICAgICAgICAgICAgICBDbG9jayBsb3NzIGRldGVjdAorLy8gVkREUl9MT1NTICAgICAgICAgICAgICAgIEJyb3duIG91dCBkZXRlY3Qgb24gVkREUgorLy8gVkREX0xPU1MgICAgICAgICAgICAgICAgIEJyb3duIG91dCBkZXRlY3Qgb24gVkRECisvLyBWRERTX0xPU1MgICAgICAgICAgICAgICAgQnJvd24gb3V0IGRldGVjdCBvbiBWRERTCisvLyBQSU5fUkVTRVQgICAgICAgICAgICAgICAgUmVzZXQgcGluCisvLyBQV1JfT04gICAgICAgICAgICAgICAgICAgUG93ZXIgb24gcmVzZXQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfV0FSTVJFU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19TWVNSRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX0NMS19MT1NTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfVkREUl9MT1NTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19WRERfTE9TUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFPTl9TWVNDVExfUkVTRVRDVExfUkVTRVRfU1JDX1ZERFNfTE9TUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1NZU0NUTF9SRVNFVENUTF9SRVNFVF9TUkNfUElOX1JFU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fU1lTQ1RMX1JFU0VUQ1RMX1JFU0VUX1NSQ19QV1JfT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1NZU0NUTF9PX1NMRUVQQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gSU9fUEFEX1NMRUVQX0RJUworLy8KKy8vIENvbnRyb2xzIHRoZSBJL08gcGFkIHNsZWVwIG1vZGUuIFRoZSBib290IGNvZGUgd2lsbCBzZXQgdGhpcyBiaXRmaWVsZAorLy8gYXV0b21hdGljYWxseSB1bmxlc3Mgd2FraW5nIHVwIGZyb20gYSBTSFVURE9XTiAoIFJFU0VUQ1RMLldVX0ZST01fU0QgaXMgc2V0CisvLyApLgorLy8KKy8vIDA6IEkvTyBwYWQgc2xlZXAgbW9kZSBpcyBlbmFibGVkLCBpZSBhbGwgcGFkcyBhcmUgbGF0Y2hlZCBhbmQgY2FuIG5vdAorLy8gdG9nZ2xlLgorLy8gMTogSS9PIHBhZCBzbGVlcCBtb2RlIGlzIGRpc2FibGVkCisvLworLy8gQXBwbGljYXRpb24gc29mdHdhcmUgbWF5IHdhbnQgdG8gcmVjb25maWd1cmUgdGhlIHN0YXRlIGZvciBhbGwgSU8ncyBiZWZvcmUKKy8vIHNldHRpbmcgdGhpcyBiaXRmaWVsZCB1cG9uIHdha2luZyB1cCBmcm9tIGEgU0hVVERPV04uCisjZGVmaW5lIEFPTl9TWVNDVExfU0xFRVBDVExfSU9fUEFEX1NMRUVQX0RJUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1NZU0NUTF9TTEVFUENUTF9JT19QQURfU0xFRVBfRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fU1lTQ1RMX1NMRUVQQ1RMX0lPX1BBRF9TTEVFUF9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9TWVNDVExfU0xFRVBDVExfSU9fUEFEX1NMRUVQX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BT05fU1lTQ1RMX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl93dWMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2Fvbl93dWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODk4ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYW9uX3d1Yy5oCkBAIC0wLDAgKzEsNjc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYW9uX3d1Y19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BT05fV1VDX0hfXworI2RlZmluZSBfX0hXX0FPTl9XVUNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQU9OX1dVQyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBNQ1UgQ2xvY2sgTWFuYWdlbWVudAorI2RlZmluZSBBT05fV1VDX09fTUNVQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEFVWCBDbG9jayBNYW5hZ2VtZW50CisjZGVmaW5lIEFPTl9XVUNfT19BVVhDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gTUNVIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQU9OX1dVQ19PX01DVUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBBVVggQ29uZmlndXJhdGlvbgorI2RlZmluZSBBT05fV1VDX09fQVVYQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIEFVWCBDb250cm9sCisjZGVmaW5lIEFPTl9XVUNfT19BVVhDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gUG93ZXIgU3RhdHVzCisjZGVmaW5lIEFPTl9XVUNfT19QV1JTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gU2h1dGRvd24gQ29udHJvbAorI2RlZmluZSBBT05fV1VDX09fU0hVVERPV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIENvbnRyb2wgMAorI2RlZmluZSBBT05fV1VDX09fQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIENvbnRyb2wgMQorI2RlZmluZSBBT05fV1VDX09fQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIFJlY2hhcmdlIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbgorI2RlZmluZSBBT05fV1VDX09fUkVDSEFSR0VDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIFJlY2hhcmdlIENvbnRyb2xsZXIgU3RhdHVzCisjZGVmaW5lIEFPTl9XVUNfT19SRUNIQVJHRVNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gT3NjaWxsYXRvciBDb25maWd1cmF0aW9uCisjZGVmaW5lIEFPTl9XVUNfT19PU0NDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gSlRBRyBDb25maWd1cmF0aW9uCisjZGVmaW5lIEFPTl9XVUNfT19KVEFHQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8gSlRBRyBVU0VSQ09ERQorI2RlZmluZSBBT05fV1VDX09fSlRBR1VTRVJDT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX01DVUNMSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFJDT1NDX0hGX0NBTF9ET05FCisvLworLy8gTUNVIGJvb3Rjb2RlIHdpbGwgc2V0IHRoaXMgYml0IHdoZW4gUkNPU0NfSEYgaXMgY2FsaWJyYXRlZC4gIFRoZSBGTEFTSCBjYW4KKy8vIG5vdCBiZSB1c2VkIHVudGlsIHRoaXMgYml0IGlzIHNldC4KKy8vCisvLyAxOiBSQ09TQ19IRiBpcyBjYWxpYnJhdGVkIHRvIDQ4IE1IeiwgYWxsb3dpbmcgRkxBU0ggdG8gcG93ZXIgdXAuCisvLyAwOiBSQ09TQ19IRiBpcyBub3QgeWV0IGNhbGlicmF0ZWQsIGllIEZMQVNIIG11c3Qgbm90IGFzc3VtZSB0aGF0IHRoZSBTQ0xLX0hGCisvLyBpcyBzYWZlCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0xLX1JDT1NDX0hGX0NBTF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDTEtfUkNPU0NfSEZfQ0FMX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fV1VDX01DVUNMS19SQ09TQ19IRl9DQUxfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9XVUNfTUNVQ0xLX1JDT1NDX0hGX0NBTF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgWzE6MF0gUFdSX0RXTl9TUkMKKy8vCisvLyBDb250cm9scyB0aGUgY2xvY2sgc291cmNlIGZvciB0aGUgZW50aXJlIE1DVSBkb21haW4gd2hpbGUgTUNVIGlzIHJlcXVlc3RpbmcKKy8vIHBvd2VyZG93bi4KKy8vCisvLyBXaGVuIE1DVSByZXF1ZXN0cyBwb3dlcmRvd24gd2l0aCBTQ0xLX0hGIGFzIHNvdXJjZSwgdGhlbiBXVUMgd2lsbCBzd2l0Y2gKKy8vIG92ZXIgdG8gdGhpcyBjbG9jayBzb3VyY2UgZHVyaW5nIHBvd2VyZG93biwgYW5kIGF1dG9tYXRpY2FsbHkgc3dpdGNoIGJhY2sgdG8KKy8vIFNDTEtfSEYgd2hlbiBNQ1UgaXMgbm8gbG9uZ2VyIHJlcXVlc3RpbmcgcG93ZXJkb3duIGFuZCBzeXN0ZW0gaXMgYmFjayBpbgorLy8gYWN0aXZlIG1vZGUuCisvLyBFTlVNczoKKy8vIFNDTEtfTEYgICAgICAgICAgICAgICAgICBVc2UgU0NMS19MRiBpbiBQb3dlcmRvd24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBjbG9jayBpbiBQb3dlcmRvd24KKyNkZWZpbmUgQU9OX1dVQ19NQ1VDTEtfUFdSX0RXTl9TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fV1VDX01DVUNMS19QV1JfRFdOX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0xLX1BXUl9EV05fU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDTEtfUFdSX0RXTl9TUkNfU0NMS19MRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX01DVUNMS19QV1JfRFdOX1NSQ19OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX0FVWENMSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTI6MTFdIFBXUl9EV05fU1JDCisvLworLy8gV2hlbiBBVVggcmVxdWVzdHMgcG93ZXJkb3duIHdpdGggU0NMS19IRiBhcyBzb3VyY2UsIHRoZW4gV1VDIHdpbGwgc3dpdGNoCisvLyBvdmVyIHRvIHRoaXMgY2xvY2sgc291cmNlIGR1cmluZyBwb3dlcmRvd24sIGFuZCBhdXRvbWF0aWNhbGx5IHN3aXRjaCBiYWNrIHRvCisvLyBTQ0xLX0hGIHdoZW4gQVVYIHN5c3RlbSBpcyBiYWNrIGluIGFjdGl2ZSBtb2RlCisvLyBFTlVNczoKKy8vIFNDTEtfTEYgICAgICAgICAgICAgICAgICBVc2UgU0NMS19MRiBpbiBQb3dlcmRvd24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBjbG9jayBpbiBQb3dlcmRvd24KKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfUFdSX0RXTl9TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBT05fV1VDX0FVWENMS19QV1JfRFdOX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1BXUl9EV05fU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfUFdSX0RXTl9TUkNfU0NMS19MRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19QV1JfRFdOX1NSQ19OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEwOjhdIFNDTEtfSEZfRElWCisvLworLy8gU2VsZWN0IHRoZSBBVVggY2xvY2sgZGl2aWRlciBmb3IgU0NMS19IRgorLy8KKy8vIE5COiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGNoYW5nZSB0aGUgQVVYIGNsb2NrIGRpdmlkZXIgd2hpbGUgU0NMS19IRiBpcworLy8gYWN0aXZlIHNvdXJjZSBmb3IgQVVYCisvLyBFTlVNczoKKy8vIERJVjI1NiAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMjU2CisvLyBESVYxMjggICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDEyOAorLy8gRElWNjQgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA2NAorLy8gRElWMzIgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAzMgorLy8gRElWMTYgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAxNgorLy8gRElWOCAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA4CisvLyBESVY0ICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDQKKy8vIERJVjIgICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMgorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVYzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU0NMS19IRl9ESVZfRElWOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fV1VDX0FVWENMS19TQ0xLX0hGX0RJVl9ESVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NDTEtfSEZfRElWX0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzI6MF0gU1JDCisvLworLy8gU2VsZWN0cyB0aGUgY2xvY2sgc291cmNlIGZvciBBVVg6CisvLworLy8gTkI6IFN3aXRjaGluZyB0aGUgY2xvY2sgc291cmNlIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ2xpdGNobGVzcworLy8gRU5VTXM6CisvLyBTQ0xLX0xGICAgICAgICAgICAgICAgICAgTEYgQ2xvY2sgKFNDTEtfTEYpCisvLyBTQ0xLX0hGICAgICAgICAgICAgICAgICAgSEYgQ2xvY2sgKFNDTEtfSEYpCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBT05fV1VDX0FVWENMS19TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0xLX1NSQ19TQ0xLX0xGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1dVQ19BVVhDTEtfU1JDX1NDTEtfSEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19NQ1VDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE3XSBWSVJUX09GRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1ZJUlRfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfVklSVF9PRkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBBT05fV1VDX01DVUNGR19WSVJUX09GRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1ZJUlRfT0ZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gRklYRURfV1VfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fV1VDX01DVUNGR19GSVhFRF9XVV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX0ZJWEVEX1dVX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfRklYRURfV1VfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBT05fV1VDX01DVUNGR19GSVhFRF9XVV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFszOjBdIFNSQU1fUkVUX0VOCisvLworLy8gTUNVIFNSQU0gaXMgcGFydGl0aW9uZWQgaW50byA0IGJhbmtzIC4gVGhpcyByZWdpc3RlciBjb250cm9scyB3aGljaCBvZiB0aGUKKy8vIGJhbmtzIHRoYXQgaGFzIHJldGVudGlvbiBkdXJpbmcgTUNVIHBvd2VyIG9mZgorLy8gRU5VTXM6CisvLyBSRVRfRlVMTCAgICAgICAgICAgICAgICAgUmV0ZW50aW9uIG9uIGZvciBhbGwgYmFua3MgKFNSQU06QkFOSzAsIFNSQU06QkFOSzEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAsU1JBTTpCQU5LMiBhbmQgU1JBTTpCQU5LMykKKy8vIFJFVF9MRVZFTDMgICAgICAgICAgICAgICBSZXRlbnRpb24gb24gZm9yIFNSQU06QkFOSzAsIFNSQU06QkFOSzEgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1JBTTpCQU5LMgorLy8gUkVUX0xFVkVMMiAgICAgICAgICAgICAgIFJldGVudGlvbiBvbiBmb3IgU1JBTTpCQU5LMCBhbmQgU1JBTTpCQU5LMQorLy8gUkVUX0xFVkVMMSAgICAgICAgICAgICAgIFJldGVudGlvbiBvbiBmb3IgU1JBTTpCQU5LMAorLy8gUkVUX05PTkUgICAgICAgICAgICAgICAgIFJldGVudGlvbiBpcyBkaXNhYmxlZAorI2RlZmluZSBBT05fV1VDX01DVUNGR19TUkFNX1JFVF9FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1NSQU1fUkVUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfU1JBTV9SRVRfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fV1VDX01DVUNGR19TUkFNX1JFVF9FTl9SRVRfRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1NSQU1fUkVUX0VOX1JFVF9MRVZFTDMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX1dVQ19NQ1VDRkdfU1JBTV9SRVRfRU5fUkVUX0xFVkVMMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBT05fV1VDX01DVUNGR19TUkFNX1JFVF9FTl9SRVRfTEVWRUwxICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfTUNVQ0ZHX1NSQU1fUkVUX0VOX1JFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fQVVYQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUkFNX1JFVF9FTgorLy8KKy8vIFRoaXMgYml0IGNvbnRyb2xzIHJldGVudGlvbiBtb2RlIGZvciB0aGUgQVVYX1JBTTpCQU5LMDoKKy8vCisvLyAwOiBSZXRlbnRpb24gaXMgZGlzYWJsZWQKKy8vIDE6IFJldGVudGlvbiBpcyBlbmFibGVkCisvLworLy8gTkI6IElmIHJldGVudGlvbiBpcyBkaXNhYmxlZCwgdGhlIEFVWF9SQU0gd2lsbCBiZSBwb3dlcmVkIG9mZiB3aGVuIGl0IHdvdWxkCisvLyBvdGhlcndpc2UgYmUgcHV0IGluIHJldGVudGlvbiBtb2RlCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0ZHX1JBTV9SRVRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1dVQ19BVVhDRkdfUkFNX1JFVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fV1VDX0FVWENGR19SQU1fUkVUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfQVVYQ0ZHX1JBTV9SRVRfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fQVVYQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gUkVTRVRfUkVRCisvLworLy8gUmVzZXQgcmVxdWVzdCBmb3IgQVVYLiBXcml0aW5nIDEgdG8gdGhpcyByZWdpc3RlciB3aWxsIGFzc2VydCByZXNldCB0byBBVVguCisvLyBUaGUgcmVzZXQgd2lsbCBiZSBoZWxkIHVudGlsIHRoZSBiaXQgaXMgY2xlYXJlZCBhZ2Fpbi4KKy8vCisvLyAwOiBBVVggcmVzZXQgcGluIHdpbGwgYmUgZGVhc3NlcnRlZAorLy8gMTogQVVYIHJlc2V0IHBpbiB3aWxsIGJlIGFzc2VydGVkCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1JFU0VUX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfUkVTRVRfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBBT05fV1VDX0FVWENUTF9SRVNFVF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1JFU0VUX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgICBbMl0gU0NFX1JVTl9FTgorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBBVVhfU0NFIGV4ZWN1dGlvbi4gQVVYX1NDRSBleGVjdXRpb24gd2lsbCBiZWdpbgorLy8gd2hlbiBBVVggRG9tYWluIGlzIHBvd2VyZWQgYW5kIGVpdGhlciB0aGlzIG9yIEFVWF9TQ0U6Q1RMLkNMS19FTiBpcyBzZXQuCisvLworLy8gU2V0dGluZyB0aGlzIGJpdCB3aWxsIGFzc3VyZSB0aGF0IEFVWF9TQ0UgZXhlY3V0aW9uIHN0YXJ0cyBhcyBzb29uIGFzIEFVWAorLy8gcG93ZXIgZG9tYWluIGlzIHdva2VuIHVwLiAoICBBVVhfU0NFOkNUTC5DTEtfRU4gd2lsbCBiZSByZXNldCB0byAwIGlmIEFVWAorLy8gcG93ZXIgZG9tYWluIGhhcyBiZWVuIG9mZikKKy8vCisvLyAwOiBBVVhfU0NFIGV4ZWN1dGlvbiB3aWxsIGJlIGRpc2FibGVkIGlmIEFVWF9TQ0U6Q1RMLkNMS19FTiBpcyAwCisvLyAxOiBBVVhfU0NFIGV4ZWN1dGlvbiBpcyBlbmFibGVkLgorI2RlZmluZSBBT05fV1VDX0FVWENUTF9TQ0VfUlVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1NDRV9SVU5fRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfU0NFX1JVTl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fV1VDX0FVWENUTF9TQ0VfUlVOX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNXRVYKKy8vCisvLyBXcml0aW5nIDEgc2V0cyB0aGUgc29mdHdhcmUgZXZlbnQgdG8gdGhlIEFVWCBkb21haW4sIHdoaWNoIGNhbiBiZSByZWFkCisvLyB0aHJvdWdoIEFVWF9XVUM6V1VFVkZMQUdTLkFPTl9TVy4KKy8vCisvLyBUaGlzIGV2ZW50IGlzIG5vcm1hbGx5IGNsZWFyZWQgYnkgQVVYX1NDRSB0aHJvdWdoIHRoZQorLy8gQVVYX1dVQzpXVUVWQ0xSLkFPTl9TVy4gSXQgY2FuIGFsc28gYmUgY2xlYXJlZCBieSB3cml0aW5nIDAgdG8gdGhpcworLy8gcmVnaXN0ZXIuCisvLworLy8gUmVhZGluZyAwIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgc29mdHdhcmUgZXZlbnQgZm9yIEFVWC4KKy8vCisvLyBOb3RlIHRoYXQgaXQgY2FuIHRha2UgdXAgdG8gMSw1IFNDTEtfTEYgY2xvY2sgY3ljbGVzIHRvIGNsZWFyIHRoZSBldmVudCBmcm9tCisvLyBBVVguCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1NXRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfU1dFVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBT05fV1VDX0FVWENUTF9TV0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX1NXRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQVVYX0ZPUkNFX09OCisvLworLy8gRm9yY2VzIHRoZSBBVVggZG9tYWluIGludG8gYWN0aXZlIG1vZGUsIG92ZXJyaWRpbmcgdGhlIHJlcXVlc3RzIGZyb20KKy8vIEFVWF9XVUM6UFdST0ZGUkVRLCBBVVhfV1VDOlBXUkRXTlJFUSBhbmQgQVVYX1dVQzpNQ1VCVVNDVEwuCisvLyBOb3RlIHRoYXQgYW4gb25nb2luZyBBVVhfV1VDOlBXUk9GRlJFUSB3aWxsIGNvbXBsZXRlIGJlZm9yZSB0aGlzIGJpdCB3aWxsCisvLyBzZXQgdGhlIEFVWCBkb21haW4gaW50byBhY3RpdmUgbW9kZS4KKy8vCisvLyBNQ1UgbXVzdCBzZXQgdGhpcyBiaXQgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBBVVggcGVyaXBoZXJhbHMuCisvLyBUaGUgQVVYIGRvbWFpbiBzdGF0dXMgY2FuIGJlIHJlYWQgZnJvbSBQV1JTVEFULkFVWF9QRF9PTgorLy8KKy8vIDA6IEFVWCBpcyBhbGxvd2VkIHRvIFBvd2VyIE9mZiwgUG93ZXIgRG93biBvciBEaXNjb25uZWN0LgorLy8gMTogQVVYICBQb3dlciBPRkYsIFBvd2VyIERvd24gb3IgRGlzY29ubmVjdCByZXF1ZXN0cyB3aWxsIGJlIG92ZXJydWxlZAorI2RlZmluZSBBT05fV1VDX0FVWENUTF9BVVhfRk9SQ0VfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfQVVYQ1RMX0FVWF9GT1JDRV9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQU9OX1dVQ19BVVhDVExfQVVYX0ZPUkNFX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX0FVWENUTF9BVVhfRk9SQ0VfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX1BXUlNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs5XSBBVVhfUFdSX0RXTgorLy8KKy8vIEluZGljYXRlcyB0aGUgQVVYIHBvd2VyZG93biBzdGF0ZSB3aGVuIEFVWCBkb21haW4gaXMgcG93ZXJlZCB1cC4KKy8vCisvLyAwOiBBY3RpdmUgbW9kZQorLy8gMTogQVVYIFBvd2VyZG93biByZXF1ZXN0IGhhcyBiZWVuIGdyYW50ZWQKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9QV1JfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1BXUl9EV05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUFdSX0RXTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9QV1JfRFdOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs2XSBKVEFHX1BEX09OCisvLworLy8gSW5kaWNhdGVzIEpUQUcgcG93ZXIgc3RhdGU6CisvLworLy8gMDogSlRBRyBpcyBwb3dlcmVkIG9mZgorLy8gMTogSlRBRyBpcyBwb3dlcmVkIG9uCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9KVEFHX1BEX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0pUQUdfUERfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfSlRBR19QRF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9KVEFHX1BEX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gQVVYX1BEX09OCisvLworLy8gSW5kaWNhdGVzIEFVWCBwb3dlciBzdGF0ZToKKy8vCisvLyAwOiBBVVggaXMgbm90IHJlYWR5IGZvciB1c2UgKCBtYXkgYmUgcG93ZXJlZCBvZmYgb3IgaW4gcG93ZXIgc3RhdGUKKy8vIHRyYW5zaXRpb24gKQorLy8gMTogQVVYIGlzIHBvd2VyZWQgb24sIGNvbm5lY3RlZCB0byBidXMgYW5kIHJlYWR5IGZvciB1c2UsCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUERfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9QRF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1BEX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUERfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gTUNVX1BEX09OCisvLworLy8gSW5kaWNhdGVzIE1DVSBwb3dlciBzdGF0ZToKKy8vCisvLyAwOiBNQ1UgUG93ZXIgc2VxdWVuY2luZyBpcyBub3QgeWV0IGZpbmFsaXplZCBhbmQgTUNVX0FPTklGIHJlZ2lzdGVycyBtYXkgbm90CisvLyBiZSByZWxpYWJsZQorLy8gMTogTUNVIFBvd2VyIHNlcXVlbmNpbmcgaXMgZmluYWxpemVkIGFuZCBhbGwgTUNVX0FPTklGIHJlZ2lzdGVycyBhcmUKKy8vIHJlbGlhYmxlCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9NQ1VfUERfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX01DVV9QRF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfTUNVX1BEX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9NQ1VfUERfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMl0gQVVYX0JVU19DT05ORUNURUQKKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCBBVVggQnVzIGlzIGNvbm5lY3RlZDoKKy8vCisvLyAwOiBBVVggYnVzIGlzIG5vdCBjb25uZWN0ZWQKKy8vIDE6IEFVWCBidXMgaXMgY29ubmVjdGVkICggaWRsZV9hY2sgPSAwICkKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9CVVNfQ09OTkVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX0JVU19DT05ORUNURURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfQlVTX0NPTk5FQ1RFRF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9CVVNfQ09OTkVDVEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBBVVhfUkVTRVRfRE9ORQorLy8KKy8vIEluZGljYXRlcyBSZXNldCBEb25lIGZyb20gQVVYOgorLy8KKy8vIDA6IEFVWCBpcyBiZWluZyByZXNldAorLy8gMTogQVVYIHJlc2V0IGlzIHJlbGVhc2VkCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUkVTRVRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQU9OX1dVQ19QV1JTVEFUX0FVWF9SRVNFVF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBT05fV1VDX1BXUlNUQVRfQVVYX1JFU0VUX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9XVUNfUFdSU1RBVF9BVVhfUkVTRVRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fU0hVVERPV04KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vIFdyaXRpbmcgYSAxIHRvIHRoaXMgYml0IGZvcmNlcyBhIHNodXRkb3duIHJlcXVlc3QgdG8gYmUgcmVnaXN0ZXJlZCBhbmQgYWxsCisvLyBJL08gdmFsdWVzIHRvIGJlIGxhdGNoZWQgLSBpbiB0aGUgUEFEIHJpbmcsIHBvc3NpYmx5IGVuYWJsaW5nIEkvTyB3YWtldXAuCisvLyBXcml0aW5nIDAgd2lsbCBjYW5jZWwgYSByZWdpc3RlcmVkIHNodXRkb3duIHJlcXVlc3QgYW5kIG9wZW4gdGggSS9PIGxhdGNoZXMKKy8vIHJlc2lkaW5nIGluIHRoZSBQQUQgcmluZy4KKy8vCisvLyBBIHJlZ2lzdGVyZWQgc2h1dGRvd24gcmVxdWVzdCB0YWtlcyBlZmZlY3QgdGhlIG5leHQgdGltZSBwb3dlciBkb3duCisvLyBjb25kaXRpb25zIGV4aXN0cy4gQXQgdGhpcyB0aW1lLCB0aGUgd2lsbCBub3QgZW50ZXIgUG93ZXJkb3duIG1vZGUsIGJ1dAorLy8gaW5zdGVhZCBpdCB3aWxsIHR1cm4gb2ZmIGFsbCBpbnRlcm5hbCBwb3dlcnN1cHBsaWVzLCBlZmZlY3RpdmVseSBwdXR0aW5nIHRoZQorLy8gZGV2aWNlIGludG8gU2h1dGRvd24gbW9kZS4KKyNkZWZpbmUgQU9OX1dVQ19TSFVURE9XTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBT05fV1VDX1NIVVRET1dOX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFPTl9XVUNfU0hVVERPV05fRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1dVQ19TSFVURE9XTl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19DVEwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gUFdSX0RXTl9ESVMKKy8vCisvLyBDb250cm9scyB3aGV0aGVyIE1DVSBhbmQgQVVYIHJlcXVlc3RpbmcgdG8gYmUgcG93ZXJlZCBvZmYgd2lsbCBlbmFibGUgYQorLy8gdHJhbnNpdGlvbiB0byBwb3dlcmRvd246CisvLworLy8gMDogRW5hYmxlZAorLy8gMTogRGlzYWJsZWQKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX1BXUl9EV05fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBT05fV1VDX0NUTDBfUFdSX0RXTl9ESVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9QV1JfRFdOX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX1BXUl9EV05fRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFszXSBBVVhfU1JBTV9FUkFTRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9BVVhfU1JBTV9FUkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX0FVWF9TUkFNX0VSQVNFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fV1VDX0NUTDBfQVVYX1NSQU1fRVJBU0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9BVVhfU1JBTV9FUkFTRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gTUNVX1NSQU1fRVJBU0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBT05fV1VDX0NUTDBfTUNVX1NSQU1fRVJBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFPTl9XVUNfQ1RMMF9NQ1VfU1JBTV9FUkFTRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQU9OX1dVQ19DVEwwX01DVV9TUkFNX0VSQVNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBT05fV1VDX0NUTDBfTUNVX1NSQU1fRVJBU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBNQ1VfUkVTRVRfU1JDCisvLworLy8gSW5kaWNhdGVzIHNvdXJjZSBvZiBsYXN0IE1DVSBWb2x0YWdlIERvbWFpbiB3YXJtIHJlc2V0IHJlcXVlc3Q6CisvLworLy8gMDogTUNVIFNXIHJlc2V0CisvLyAxOiBKVEFHIHJlc2V0CisvLworLy8gVGhpcyBiaXQgY2FuIG9ubHkgYmUgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byBpdAorI2RlZmluZSBBT05fV1VDX0NUTDFfTUNVX1JFU0VUX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFPTl9XVUNfQ1RMMV9NQ1VfUkVTRVRfU1JDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQU9OX1dVQ19DVEwxX01DVV9SRVNFVF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBT05fV1VDX0NUTDFfTUNVX1JFU0VUX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIE1DVV9XQVJNX1JFU0VUCisvLworLy8gSW5kaWNhdGVzIHR5cGUgb2YgbGFzdCBNQ1UgVm9sdGFnZSBEb21haW4gcmVzZXQ6CisvLworLy8gMDogTGFzdCBNQ1UgcmVzZXQgd2FzIG5vdCBhIHdhcm0gcmVzZXQKKy8vIDE6IExhc3QgTUNVIHJlc2V0IHdhcyBhIHdhcm0gcmVzZXQgKHJlcXVlc3RlZCBmcm9tIE1DVSBvciBKVEFHIGFzIGluZGljYXRlZAorLy8gaW4gTUNVX1JFU0VUX1NSQykKKy8vCisvLyBUaGlzIGJpdCBjYW4gb25seSBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIGl0CisjZGVmaW5lIEFPTl9XVUNfQ1RMMV9NQ1VfV0FSTV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQU9OX1dVQ19DVEwxX01DVV9XQVJNX1JFU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBT05fV1VDX0NUTDFfTUNVX1dBUk1fUkVTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFPTl9XVUNfQ1RMMV9NQ1VfV0FSTV9SRVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fUkVDSEFSR0VDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBBREFQVElWRV9FTgorLy8KKy8vIEVuYWJsZSBhZGFwdGl2ZSByZWNoYXJnZQorLy8KKy8vIE5vdGU6IFJlY2hhcmdlIGNhbiBiZSB0dXJuZWQgY29tcGxldGVseSBvZiBieSBzZXR0aW5nIE1BWF9QRVJfRT03IGFuZAorLy8gTUFYX1BFUl9NPTMxIGFuZCB0aGlzIGJpdGZpZWxkIHRvIDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19BREFQVElWRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0FEQVBUSVZFX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQURBUFRJVkVfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19BREFQVElWRV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogWzIzOjIwXSBDMgorLy8KKy8vIEdhaW4gZmFjdG9yIGZvciBhZGFwdGl2ZSByZWNoYXJnZSBhbGdvcml0aG0KKy8vCisvLyBwZXJpb2RfbmV3PXBlcmlvZCAqICggMSsvLSgyXi1DMSsyXi1DMikgKQorLy8gVmFsaWQgdmFsdWVzIGZvciBDMiBpcyAyIHRvIDEwCisvLworLy8gTm90ZTogUm91bmRpbmcgbWF5IGNhdXNlIGFkYXB0aXZlIHJlY2hhcmdlIG5vdCB0byBzdGFydCBmb3IgdmVyeSBzbWFsbAorLy8gdmFsdWVzIG9mIGJvdGggR2FpbiBhbmQgSW5pdGlhbCBwZXJpb2QuIENyaXRlcmlhIGZvciBhbGdvcml0aG0gdG8gc3RhcnQgaXMKKy8vIE1BWChQRVJJT0QqMl4tQzEsUEVSSU9EKjJeLUMyKSA+PSAxCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQzJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19DMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIEMxCisvLworLy8gR2FpbiBmYWN0b3IgZm9yIGFkYXB0aXZlIHJlY2hhcmdlIGFsZ29yaXRobQorLy8KKy8vIHBlcmlvZF9uZXc9cGVyaW9kICogKCAxKy8tKDJeLUMxKzJeLUMyKSApCisvLyBWYWxpZCB2YWx1ZXMgZm9yIEMxIGlzIDEgdG8gMTAKKy8vCisvLyBOb3RlOiBSb3VuZGluZyBtYXkgY2F1c2UgYWRhcHRpdmUgcmVjaGFyZ2Ugbm90IHRvIHN0YXJ0IGZvciB2ZXJ5IHNtYWxsCisvLyB2YWx1ZXMgb2YgYm90aCBHYWluIGFuZCBJbml0aWFsIHBlcmlvZC4gQ3JpdGVyaWEgZm9yIGFsZ29yaXRobSB0byBzdGFydCBpcworLy8gTUFYKFBFUklPRCoyXi1DMSxQRVJJT0QqMl4tQzIpID49IDEKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19DMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX0MxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfQzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxMV0gTUFYX1BFUl9NCisvLworLy8gVGhpcyByZWdpc3RlciBkZWZpbmVzIHRoZSBtYXhpbXVtIHBlcmlvZCB0aGF0IHRoZSByZWNoYXJnZSBhbGdvcml0aG0gY2FuCisvLyB0YWtlLCBpLmUuIGl0IGRlZmluZXMgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjeWNsZXMgYmV0d2VlbiAyIHJlY2hhcmdlcy4KKy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjeWNsZXMgaXMgc3BlY2lmaWVkIHdpdGggYSA1IGJpdCBtYW50aXNzYSBhbmQgMyBiaXQKKy8vIGV4cG9uZW50OgorLy8gTUFYQ1lDTEVTPShNQVhfUEVSX00qMTYrMTUpKjJeTUFYX1BFUl9FCisvLyBUaGlzIGZpZWxkIHNldHMgdGhlIG1hbnRpc3NhIG9mIE1BWENZQ0xFUworI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9NX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4MDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogIFsxMDo4XSBNQVhfUEVSX0UKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGRlZmluZXMgdGhlIG1heGltdW0gcGVyaW9kIHRoYXQgdGhlIHJlY2hhcmdlIGFsZ29yaXRobSBjYW4KKy8vIHRha2UsIGkuZS4gaXQgZGVmaW5lcyAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGN5Y2xlcyBiZXR3ZWVuIDIgcmVjaGFyZ2VzLgorLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGN5Y2xlcyBpcyBzcGVjaWZpZWQgd2l0aCBhIDUgYml0IG1hbnRpc3NhIGFuZCAzIGJpdAorLy8gZXhwb25lbnQ6CisvLyBNQVhDWUNMRVM9KE1BWF9QRVJfTSoxNisxNSkqMl5NQVhfUEVSX0UKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgZXhwb25lbnQgTUFYQ1lDTEVTCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfTUFYX1BFUl9FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19NQVhfUEVSX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX01BWF9QRVJfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjNdIFBFUl9NCisvLworLy8gTnVtYmVyIG9mIDMyIEtIeiBjbG9ja3MgYmV0d2VlbiBhY3RpdmF0aW9uIG9mIHJlY2hhcmdlIGNvbnRyb2xsZXIKKy8vIEZvciByZWNoYXJnZSBhbGdvcml0aG0sIFBFUklPRCBpcyB0aGUgaW5pdGlhbCBwZXJpb2Qgd2hlbiBlbnRlcmluZyBwb3dlcmRvd24KKy8vIG1vZGUuIFRoZSBhZGFwdGl2ZSByZWNoYXJnZSBhbGdvcml0aG0gd2lsbCBub3QgY2hhbmdlIHRoaXMgcmVnaXN0ZXIKKy8vIFBFUklPRCB3aWxsIGVmZmVjdGl2ZWx5IGJlIGEgMTYgYml0IHZhbHVlIGNvZGVkIGluIGEgNSBiaXQgbWFudGlzc2EgYW5kIDMKKy8vIGJpdCBleHBvbmVudDoKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgTWFudGlzc2Egb2YgdGhlIFBlcmlvZC4KKy8vIFBFUklPRD0oUEVSX00qMTYrMTUpKjJeUEVSX0UKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9NX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gUEVSX0UKKy8vCisvLyBOdW1iZXIgb2YgMzIgS0h6IGNsb2NrcyBiZXR3ZWVuIGFjdGl2YXRpb24gb2YgcmVjaGFyZ2UgY29udHJvbGxlcgorLy8gRm9yIHJlY2hhcmdlIGFsZ29yaXRobSwgUEVSSU9EIGlzIHRoZSBpbml0aWFsIHBlcmlvZCB3aGVuIGVudGVyaW5nIHBvd2VyZG93bgorLy8gbW9kZS4gVGhlIGFkYXB0aXZlIHJlY2hhcmdlIGFsZ29yaXRobSB3aWxsIG5vdCBjaGFuZ2UgdGhpcyByZWdpc3RlcgorLy8gUEVSSU9EIHdpbGwgZWZmZWN0aXZlbHkgYmUgYSAxNiBiaXQgdmFsdWUgY29kZWQgaW4gYSA1IGJpdCBtYW50aXNzYSBhbmQgMworLy8gYml0IGV4cG9uZW50OgorLy8gVGhpcyBmaWVsZCBzZXRzIHRoZSBFeHBvbmVudCBvZiB0aGUgUGVyaW9kLgorLy8gUEVSSU9EPShQRVJfTSoxNisxNSkqMl5QRVJfRQorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFQ0ZHX1BFUl9FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VDRkdfUEVSX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRUNGR19QRVJfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFPTl9XVUNfT19SRUNIQVJHRVNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE5OjE2XSBWRERSX1NNUExTCisvLworLy8gVGhlIGxhc3QgNCBWRERSIHNhbXBsZXMsIGJpdCAwIGJlaW5nIHRoZSBuZXdlc3QuCisvLworLy8gVGhlIHJlZ2lzdGVyIGlzIGJlaW5nIHVwZGF0ZWQgaW4gZXZlcnkgcmVjaGFyZ2UgcGVyaW9kIHdpdGggYSBzaGlmdCBsZWZ0LAorLy8gYW5kIGJpdCAwIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbGFzdCBWRERSIHNhbXBsZSwgaWUgYSAxIGlzIHNoaWZ0ZXQgaW4gaW4gY2FzZQorLy8gVkREUiA+IFZERFJfdGhyZXNob2xkIGp1c3QgYmVmb3JlIHJlY2hhcmdlIHN0YXJ0cy4gT3RoZXJ3aXNlIGEgMCB3aWxsIGJlCisvLyBzaGlmdGVkIGluLgorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFU1RBVF9WRERSX1NNUExTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VTVEFUX1ZERFJfU01QTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRVNUQVRfVkREUl9TTVBMU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBNQVhfVVNFRF9QRVIKKy8vCisvLyBUaGUgbWF4aW11bSB2YWx1ZSBvZiByZWNoYXJnZSBwZXJpb2Qgc2VlbiB3aXRoIFZERFI+dGhyZXNob2xkLgorLy8KKy8vIFRoZSBWRERSIHZvbHRhZ2UgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgdGhyZXNob2xkIHZvbHRhZ2UgYXQgIGp1c3QgYmVmb3JlCisvLyBlYWNoIHJlY2hhcmdlLiBJZiBWRERSIGlzIGFib3ZlIHRocmVzaG9sZCwgTUFYX1VTRURfUEVSIGlzIHVwZGF0ZWQgd2l0aCBtYXgKKy8vICggY3VycmVudCByZWNoYXJnZSBwZXJpZGU7IE1BWF9VU0VEX1BFUiApICBUaGlzIHdheSBNQVhfVVNFRF9QRVIgY2FuIHRyYWNrCisvLyB0aGUgcmVjaGFyZ2UgcGVyaW9kIHdoZXJlIFZERFIgaXMgZGVjaGFyZ2VkIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWUuIFdlIGNhbgorLy8gdGhlcmVmb3JlIHVzZSB0aGUgdmFsdWUgYXMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbGVha2FnZSBjdXJyZW50IGR1cmluZworLy8gcmVjaGFyZ2UuCisvLworLy8gVGhpcyBiaXRmaWVsZCBpcyBjbGVhcmVkIHRvIDAgd2hlbiB3cml0aW5nIHRoaXMgcmVnaXN0ZXIuCisjZGVmaW5lIEFPTl9XVUNfUkVDSEFSR0VTVEFUX01BWF9VU0VEX1BFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQU9OX1dVQ19SRUNIQVJHRVNUQVRfTUFYX1VTRURfUEVSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBT05fV1VDX1JFQ0hBUkdFU1RBVF9NQVhfVVNFRF9QRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQU9OX1dVQ19PX09TQ0NGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjNdIFBFUl9NCisvLworLy8gTnVtYmVyIG9mIDMyIEtIeiBjbG9ja3MgYmV0d2VlbiBvc2NpbGxhdG9yIGFtcGxpdHVkZSBjYWxpYnJhdGlvbnMuCisvLyBXaGVuIHRoaXMgY291bnRlciBleHBpcmVzLCBhbiBvc2NpbGxhdG9yIGFtcGxpdHVkZSBjb21wZW5zYXRpb24gaXMgdHJpZ2dlcmVkCisvLyBpbW1lZGlhdGVseSBpbiBBY3RpdmUgbW9kZS4gV2hlbiB0aGlzIGNvdW50ZXIgZXhwaXJlcyBpbiBQb3dlcmRvd24gbW9kZSBhbgorLy8gaW50ZXJuYWwgZmxhZyBpcyBzZXQgc3VjaCB0aGF0IHRoZSBhbXBsaXR1ZGUgY29tcGVuc2F0aW9uIGlzIHBvc3Rwb25lZCB1bnRpbAorLy8gdGhlIG5leHQgcmVjaGFyZ2Ugb2NjdXJzLgorLy8KKy8vIFRoZSBQZXJpb2Qgd2lsbCBlZmZlY3RpdmVseSBiZSBhIDE2IGJpdCB2YWx1ZSBjb2RlZCBpbiBhIDUgYml0IG1hbnRpc3NhIGFuZAorLy8gMyBiaXQgZXhwb25lbnQKKy8vIFBFUklPRD0oUEVSX00qMTYrMTUpKjJeUEVSX0UKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgbWFudGlzc2EKKy8vIE5vdGU6IE9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9uIGlzIHR1cm5lZCBvZiB3aGVuIGJvdGggdGhpcyBiaXRmaWVsZAorLy8gYW5kIFBFUl9FIGFyZSBzZXQgdG8gMAorI2RlZmluZSBBT05fV1VDX09TQ0NGR19QRVJfTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFPTl9XVUNfT1NDQ0ZHX1BFUl9NX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjgKKyNkZWZpbmUgQU9OX1dVQ19PU0NDRkdfUEVSX01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBQRVJfRQorLy8KKy8vIE51bWJlciBvZiAzMiBLSHogY2xvY2tzIGJldHdlZW4gb3NjaWxsYXRvciBhbXBsaXR1ZGUgY2FsaWJyYXRpb25zLgorLy8gV2hlbiB0aGlzIGNvdW50ZXIgZXhwaXJlcywgYW4gb3NjaWxsYXRvciBhbXBsaXR1ZGUgY29tcGVuc2F0aW9uIGlzIHRyaWdnZXJlZAorLy8gaW1tZWRpYXRlbHkgaW4gQWN0aXZlIG1vZGUuIFdoZW4gdGhpcyBjb3VudGVyIGV4cGlyZXMgaW4gUG93ZXJkb3duIG1vZGUgYW4KKy8vIGludGVybmFsIGZsYWcgaXMgc2V0IHN1Y2ggdGhhdCB0aGUgYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiBpcyBwb3N0cG9uZWQgdW50aWwKKy8vIHRoZSBuZXh0IHJlY2hhcmdlIG9jY3Vycy4KKy8vIFRoZSBQZXJpb2Qgd2lsbCBlZmZlY3RpdmVseSBiZSBhIDE2IGJpdCB2YWx1ZSBjb2RlZCBpbiBhIDUgYml0IG1hbnRpc3NhIGFuZAorLy8gMyBiaXQgZXhwb25lbnQKKy8vIFBFUklPRD0oUEVSX00qMTYrMTUpKjJeUEVSX0UKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgZXhwb25lbnQKKy8vIE5vdGU6IE9zY2lsbGF0b3IgYW1wbGl0dWRlIGNhbGlicmF0aW9uIGlzIHR1cm5lZCBvZiB3aGVuIGJvdGggIFBFUl9NIGFuZAorLy8gdGhpcyBiaXRmaWVsZCBhcmUgc2V0IHRvIDAKKyNkZWZpbmUgQU9OX1dVQ19PU0NDRkdfUEVSX0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBT05fV1VDX09TQ0NGR19QRVJfRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFPTl9XVUNfT1NDQ0ZHX1BFUl9FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fSlRBR0NGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIEpUQUdfUERfRk9SQ0VfT04KKy8vCisvLyBDb250cm9scyBKVEFHIFBvd2VyRG9tYWluIHBvd2VyIHN0YXRlOgorLy8KKy8vIDA6IENvbnRyb2xsZWQgZXhjbHVzaXZlbHkgYnkgZGVidWcgc3Vic3lzdGVtLiAoSlRBRyBQb3dlcmRvbWFpbiB3aWxsIGJlCisvLyBwb3dlcmVkIG9mZiB1bmxlc3MgYSBkZWJ1Z2dlciBpcyBhdHRhY2hlZCkKKy8vIDE6IEpUQUcgUG93ZXIgRG9tYWluIGlzIGZvcmNlZCBvbiwgaW5kZXBlbmRlbnQgb2YgZGVidWcgc3Vic3lzdGVtLgorLy8KKy8vIE5COiBUaGUgcmVzZXQgdmFsdWUgY2F1c2VzIEpUQUcgUG93ZXIgRG9tYWluIHRvIGJlIHBvd2VyZWQgb24gYnkgZGVmYXVsdC4KKy8vIFNvZnR3YXJlIG11c3QgY2xlYXIgdGhpcyBiaXQgdG8gdHVybiBvZmYgdGhlIEpUQUcgUG93ZXIgRG9tYWluCisjZGVmaW5lIEFPTl9XVUNfSlRBR0NGR19KVEFHX1BEX0ZPUkNFX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQU9OX1dVQ19KVEFHQ0ZHX0pUQUdfUERfRk9SQ0VfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBT05fV1VDX0pUQUdDRkdfSlRBR19QRF9GT1JDRV9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFPTl9XVUNfSlRBR0NGR19KVEFHX1BEX0ZPUkNFX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBT05fV1VDX09fSlRBR1VTRVJDT0RFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVVNFUl9DT0RFCisvLworLy8gMzItYml0IEpUQUcgVVNFUkNPREUgcmVnaXN0ZXIgZmVlZGluZyBtYWluIEpUQUcgVEFQCisvLyBOQjogVGhpcyBmaWVsZCBjYW4gYmUgbG9ja2VkCisjZGVmaW5lIEFPTl9XVUNfSlRBR1VTRVJDT0RFX1VTRVJfQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQU9OX1dVQ19KVEFHVVNFUkNPREVfVVNFUl9DT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBBT05fV1VDX0pUQUdVU0VSQ09ERV9VU0VSX0NPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQU9OX1dVQ19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfYWlvZGlvLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfYWlvZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhOWUzYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9haW9kaW8uaApAQCAtMCwwICsxLDM1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2F1eF9haW9kaW9faAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX0FJT0RJT19IX18KKyNkZWZpbmUgX19IV19BVVhfQUlPRElPX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFVWF9BSU9ESU8gY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gR2VuZXJhbCBQdXJwb3NlIElucHV0L091dHB1dCBEYXRhIE91dAorI2RlZmluZSBBVVhfQUlPRElPX09fR1BJT0RPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIElucHV0IE91dHB1dCBNb2RlCisjZGVmaW5lIEFVWF9BSU9ESU9fT19JT01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBEYXRhIEluCisjZGVmaW5lIEFVWF9BSU9ESU9fT19HUElPRElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBEYXRhIE91dCBTZXQKKyNkZWZpbmUgQVVYX0FJT0RJT19PX0dQSU9ET1VUU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IERhdGEgT3V0IENsZWFyCisjZGVmaW5lIEFVWF9BSU9ESU9fT19HUElPRE9VVENMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBEYXRhIE91dCBUb2dnbGUKKyNkZWZpbmUgQVVYX0FJT0RJT19PX0dQSU9ET1VUVEdMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IElucHV0IEVuYWJsZQorI2RlZmluZSBBVVhfQUlPRElPX09fR1BJT0RJRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FJT0RJT19PX0dQSU9ET1VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSU83XzAKKy8vCisvLyBPdXRwdXQgdmFsdWVzIGZvciBBVVhJTzAgdGhyb3VnaCBBVVhJTzcgKGZvciBBSU9ESU8wKSBvciBBVVhJTzggdGhyb3VnaAorLy8gQVVYSU8xNSAoZm9yIEFJT0RJTzEpLgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUX0lPN18wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRfSU83XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVF9JTzdfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BSU9ESU9fT19JT01PREUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjE0XSBJTzcKKy8vCisvLyBTZWxlY3RzIG1vZGUgZm9yIEFVWElPNyAoZm9yIEFJT0RJTzApIG9yIEFVWElPMTUgKGZvciBBSU9ESU8xKS4KKy8vIEVOVU1zOgorLy8gT1BFTl9TT1VSQ0UgICAgICAgICAgICAgIE9wZW4tc291cmNlOiBUaGUgcGluIGlzIGRyaXZlbiBoaWdoIHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMSwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gT1BFTl9EUkFJTiAgICAgICAgICAgICAgIE9wZW4tZHJhaW46IFRoZSBwaW4gaXMgZHJpdmVuIGxvdyB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDAsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBEaWdpdGFsIGlucHV0IHdpdGggR1BJT0RJRSBiaXQgNyA9IDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgaW5wdXQvb3V0cHV0IHdpdGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRElFIGJpdCA3ID0gMAorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEMwMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzdfT1BFTl9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPN19PUEVOX0RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU83X0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzdfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTM6MTJdIElPNgorLy8KKy8vIFNlbGVjdHMgbW9kZSBmb3IgQVVYSU82IChmb3IgQUlPRElPMCkgb3IgQVVYSU8xNCAoZm9yIEFJT0RJTzEpLgorLy8gRU5VTXM6CisvLyBPUEVOX1NPVVJDRSAgICAgICAgICAgICAgT3Blbi1zb3VyY2U6IFRoZSBwaW4gaXMgZHJpdmVuIGhpZ2ggd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAxLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBPUEVOX0RSQUlOICAgICAgICAgICAgICAgT3Blbi1kcmFpbjogVGhlIHBpbiBpcyBkcml2ZW4gbG93IHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMCwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIERpZ2l0YWwgaW5wdXQgd2l0aCBHUElPRElFIGJpdCA2ID0gMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWxvZyBpbnB1dC9vdXRwdXQgd2l0aAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9ESUUgYml0IDYgPSAwCisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNl9PUEVOX1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU82X09QRU5fRFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzZfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNl9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxMToxMF0gSU81CisvLworLy8gU2VsZWN0cyBtb2RlIGZvciBBVVhJTzUgKGZvciBBSU9ESU8wKSBvciBBVVhJTzEzIChmb3IgQUlPRElPMSkuCisvLyBFTlVNczoKKy8vIE9QRU5fU09VUkNFICAgICAgICAgICAgICBPcGVuLXNvdXJjZTogVGhlIHBpbiBpcyBkcml2ZW4gaGlnaCB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDEsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIE9QRU5fRFJBSU4gICAgICAgICAgICAgICBPcGVuLWRyYWluOiBUaGUgcGluIGlzIGRyaXZlbiBsb3cgd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAwLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgRGlnaXRhbCBpbnB1dCB3aXRoIEdQSU9ESUUgYml0IDUgPSAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbG9nIGlucHV0L291dHB1dCB3aXRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0RJRSBiaXQgNSA9IDAKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU81X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU81X09QRU5fU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzVfT1BFTl9EUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNV9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU81X09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJTzQKKy8vCisvLyBTZWxlY3RzIG1vZGUgZm9yIEFVWElPNCAoZm9yIEFJT0RJTzApIG9yIEFVWElPMTIgKGZvciBBSU9ESU8xKS4KKy8vIEVOVU1zOgorLy8gT1BFTl9TT1VSQ0UgICAgICAgICAgICAgIE9wZW4tc291cmNlOiBUaGUgcGluIGlzIGRyaXZlbiBoaWdoIHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMSwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gT1BFTl9EUkFJTiAgICAgICAgICAgICAgIE9wZW4tZHJhaW46IFRoZSBwaW4gaXMgZHJpdmVuIGxvdyB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDAsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBEaWdpdGFsIGlucHV0IHdpdGggR1BJT0RJRSBiaXQgNCA9IDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgaW5wdXQvb3V0cHV0IHdpdGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRElFIGJpdCA0ID0gMAorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzRfT1BFTl9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPNF9PUEVOX0RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU80X0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzRfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs3OjZdIElPMworLy8KKy8vIFNlbGVjdHMgbW9kZSBmb3IgQVVYSU8zIChmb3IgQUlPRElPMCkgb3IgQVVYSU8xMSAoZm9yIEFJT0RJTzEpLgorLy8gRU5VTXM6CisvLyBPUEVOX1NPVVJDRSAgICAgICAgICAgICAgT3Blbi1zb3VyY2U6IFRoZSBwaW4gaXMgZHJpdmVuIGhpZ2ggd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAxLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBPUEVOX0RSQUlOICAgICAgICAgICAgICAgT3Blbi1kcmFpbjogVGhlIHBpbiBpcyBkcml2ZW4gbG93IHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMCwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIERpZ2l0YWwgaW5wdXQgd2l0aCBHUElPRElFIGJpdCAzID0gMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWxvZyBpbnB1dC9vdXRwdXQgd2l0aAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9ESUUgYml0IDMgPSAwCisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8zX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPM19PUEVOX1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8zX09QRU5fRFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzNfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPM19PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6NF0gSU8yCisvLworLy8gU2VsZWN0cyBtb2RlIGZvciBBVVhJTzIgKGZvciBBSU9ESU8wKSBvciBBVVhJTzEwIChmb3IgQUlPRElPMSkuCisvLyBFTlVNczoKKy8vIE9QRU5fU09VUkNFICAgICAgICAgICAgICBPcGVuLXNvdXJjZTogVGhlIHBpbiBpcyBkcml2ZW4gaGlnaCB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDEsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIE9QRU5fRFJBSU4gICAgICAgICAgICAgICBPcGVuLWRyYWluOiBUaGUgcGluIGlzIGRyaXZlbiBsb3cgd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAwLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgRGlnaXRhbCBpbnB1dCB3aXRoIEdQSU9ESUUgYml0IDIgPSAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbG9nIGlucHV0L291dHB1dCB3aXRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT0RJRSBiaXQgMiA9IDAKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8yX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8yX09QRU5fU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzJfT1BFTl9EUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMl9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8yX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMzoyXSBJTzEKKy8vCisvLyBTZWxlY3RzIG1vZGUgZm9yIEFVWElPMSAoZm9yIEFJT0RJTzApIG9yIEFVWElPOSAoZm9yIEFJT0RJTzEpLgorLy8gRU5VTXM6CisvLyBPUEVOX1NPVVJDRSAgICAgICAgICAgICAgT3Blbi1zb3VyY2U6IFRoZSBwaW4gaXMgZHJpdmVuIGhpZ2ggd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIEdQSU9ET1VUIGJpdCBpcyAxLCBhbmQgb3RoZXJ3aXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLXN0YXRlZCBvciBwdWxsZWQgZGVwZW5kaW5nIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgSU9DIGNvbmZpZ3VyYXRpb24uCisvLyBPUEVOX0RSQUlOICAgICAgICAgICAgICAgT3Blbi1kcmFpbjogVGhlIHBpbiBpcyBkcml2ZW4gbG93IHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMCwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIERpZ2l0YWwgaW5wdXQgd2l0aCBHUElPRElFIGJpdCAxID0gMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWxvZyBpbnB1dC9vdXRwdXQgd2l0aAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9ESUUgYml0IDEgPSAwCisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMV9PUEVOX1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8xX09QRU5fRFJBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzFfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gSU8wCisvLworLy8gU2VsZWN0cyBtb2RlIGZvciBBVVhJTzAgKGZvciBBSU9ESU8wKSBvciBBVVhJTzggKGZvciBBSU9ESU8xKS4KKy8vIEVOVU1zOgorLy8gT1BFTl9TT1VSQ0UgICAgICAgICAgICAgIE9wZW4tc291cmNlOiBUaGUgcGluIGlzIGRyaXZlbiBoaWdoIHdoZW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBHUElPRE9VVCBiaXQgaXMgMSwgYW5kIG90aGVyd2lzZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS1zdGF0ZWQgb3IgcHVsbGVkIGRlcGVuZGluZyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIElPQyBjb25maWd1cmF0aW9uLgorLy8gT1BFTl9EUkFJTiAgICAgICAgICAgICAgIE9wZW4tZHJhaW46IFRoZSBwaW4gaXMgZHJpdmVuIGxvdyB3aGVuIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgR1BJT0RPVVQgYml0IGlzIDAsIGFuZCBvdGhlcndpc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktc3RhdGVkIG9yIHB1bGxlZCBkZXBlbmRpbmcgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgY29uZmlndXJhdGlvbi4KKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBEaWdpdGFsIGlucHV0IHdpdGggR1BJT0RJRSBiaXQgMCA9IDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgaW5wdXQvb3V0cHV0IHdpdGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPRElFIGJpdCAwID0gMAorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzBfT1BFTl9TT1VSQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9BSU9ESU9fSU9NT0RFX0lPMF9PUEVOX0RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0FJT0RJT19JT01PREVfSU8wX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfQUlPRElPX0lPTU9ERV9JTzBfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FJT0RJT19PX0dQSU9ESU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBJTzdfMAorLy8KKy8vIElucHV0IHZhbHVlcyBmb3IgQVVYSU8wIHRocm91Z2ggQVVYSU83IChmb3IgQUlPRElPMCkgb3IgQVVYSU84IHRocm91Z2gKKy8vIEFVWElPMTUgKGZvciBBSU9ESU8xKS4KKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRElOX0lPN18wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ESU5fSU83XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RJTl9JTzdfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfQUlPRElPX09fR1BJT0RPVVRTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBJTzdfMAorLy8KKy8vIFdyaXRpbmcgMShzKSB0byBvbmUgb3IgbW9yZSBiaXQgcG9zaXRpb25zIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0KHMpIGluCisvLyBHUElPRE9VVC4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDB4MDAuCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRTRVRfSU83XzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVFNFVF9JTzdfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUU0VUX0lPN18wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FJT0RJT19PX0dQSU9ET1VUQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSU83XzAKKy8vCisvLyBXcml0aW5nIDEocykgdG8gb25lIG9yIG1vcmUgYml0IHBvc2l0aW9ucyBjbGVhcnMgdGhlIGNvcnJlc3BvbmRpbmcgYml0KHMpIGluCisvLyBHUElPRE9VVC4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDB4MDAuCisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRDTFJfSU83XzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVENMUl9JTzdfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUQ0xSX0lPN18wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FJT0RJT19PX0dQSU9ET1VUVEdMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSU83XzAKKy8vCisvLyBXcml0aW5nIDEocykgdG8gb25lIG9yIG1vcmUgYml0IHBvc2l0aW9ucyB0b2dnbGVzIHRoZSBjb3JyZXNwb25kaW5nIGJpdChzKQorLy8gaW4gR1BJT0RPVVQuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAweDAwLgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ET1VUVEdMX0lPN18wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RPVVRUR0xfSU83XzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRE9VVFRHTF9JTzdfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BSU9ESU9fT19HUElPRElFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSU83XzAKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgZGlnaXRhbCBpbnB1dCBidWZmZXJzIGZvciBlYWNoIEFVWCBJL08gcGluLgorLy8KKy8vIElucHV0IGJ1ZmZlcnMgbXVzdCBiZSBlbmFibGVkIHRvIGFsbG93IHJlYWRpbmcgcGluIHZhbHVlcyB0aHJvdWdoIEdQSU9ESU4uCisvLworLy8gSW5wdXQgYnVmZmVycyBtdXN0IGJlIGRpc2FibGVkIGZvciBhbmFsb2cgaW5wdXQgb3IgZmxvYXRpbmcgcGlucyB0byBhdm9pZAorLy8gY3VycmVudCBsZWFrYWdlLgorI2RlZmluZSBBVVhfQUlPRElPX0dQSU9ESUVfSU83XzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9BSU9ESU9fR1BJT0RJRV9JTzdfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX0FJT0RJT19HUElPRElFX0lPN18wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FVWF9BSU9ESU9fXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X2FuYWlmLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfYW5haWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWYzZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X2FuYWlmLmgKQEAgLTAsMCArMSwyNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfYW5haWZfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX0FOQUlGX0hfXworI2RlZmluZSBfX0hXX0FVWF9BTkFJRl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfQU5BSUYgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQURDIENvbnRyb2wKKyNkZWZpbmUgQVVYX0FOQUlGX09fQURDQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBBREMgRklGTyBTdGF0dXMKKyNkZWZpbmUgQVVYX0FOQUlGX09fQURDRklGT1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBBREMgRklGTworI2RlZmluZSBBVVhfQU5BSUZfT19BRENGSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIEFEQyBUcmlnZ2VyCisjZGVmaW5lIEFVWF9BTkFJRl9PX0FEQ1RSSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gQ3VycmVudCBTb3VyY2UgQ29udHJvbAorI2RlZmluZSBBVVhfQU5BSUZfT19JU1JDQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FOQUlGX09fQURDQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gU1RBUlRfUE9MCisvLworLy8gU2VsZWN0ZWQgYWN0aXZlIGVkZ2UgZm9yIHN0YXJ0IGV2ZW50IC8gU2VsZWN0ZWQgcG9sYXJpdHkgZm9yIHN0YXJ0IGV2ZW50CisvLyBFTlVNczoKKy8vIEZBTEwgICAgICAgICAgICAgICAgICAgICBTdGFydCBvbiBmYWxsaW5nIGVkZ2Ugb2YgZXZlbnQKKy8vIFJJU0UgICAgICAgICAgICAgICAgICAgICBTdGFydCBvbiByaXNpbmcgZWRnZSBvZiBldmVudAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfUE9MX0ZBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9QT0xfUklTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMjo4XSBTVEFSVF9TUkMKKy8vCisvLyBTZWxlY3RlZCBzb3VyY2UgZm9yIEFEQyBjb252ZXJzaW9uIHN0YXJ0IGV2ZW50LiBUaGUgc3RhcnQgc291cmNlIHNlbGVjdGVkIGJ5CisvLyB0aGlzIGZpZWxkIGlzIE9SJ2VkIHdpdGggYW55IHRyaWdnZXIgY29taW5nIGZyb20gd3JpdGVzIHRvIEFEQ1RSSUcuU1RBUlQuIElmCisvLyBpdCBpcyBkZXNpcmVkIHRvIG9ubHkgdHJpZ2dlciBBREMgY29udmVyc2lvbnMgYnkgd3JpdGVzIHRvIEFEQ1RSSUcuU1RBUlQgb25lCisvLyBzaG91bGQgc2VsZWN0IE5PX0VWRU5UPG4+IGhlcmUKKy8vIEVOVU1zOgorLy8gQURDX0lSUSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0lSUSBhcyBzdGFydCBzaWduYWwKKy8vIE1DVV9FViAgICAgICAgICAgICAgICAgICBTZWxlY3RzIE1DVV9FViBhcyBzdGFydCBzaWduYWwKKy8vIEFDTEtfUkVGICAgICAgICAgICAgICAgICBTZWxlY3RzIEFDTEtfUkVGIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNSBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTQgYXMgc3RhcnQgc2lnbmFsCisvLyBBVVhJTzEzICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEzIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMiBhcyBzdGFydCBzaWduYWwKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMTEgYXMgc3RhcnQgc2lnbmFsCisvLyBBVVhJTzEwICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEwIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU85IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU84IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU83IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU82IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU81IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU80IGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8zIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8yIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xIGFzIHN0YXJ0IHNpZ25hbAorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8wIGFzIHN0YXJ0IHNpZ25hbAorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1BST0dfV1UgYXMgc3RhcnQgc2lnbmFsCisvLyBBT05fU1cgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBT05fU1cgYXMgc3RhcnQgc2lnbmFsCisvLyBOT19FVkVOVDEgICAgICAgICAgICAgICAgTm8gZXZlbnQgc2VsZWN0ZWQKKy8vIE5PX0VWRU5UMCAgICAgICAgICAgICAgICBObyBldmVudCBzZWxlY3RlZAorLy8gUkVTRVJWRUQxICAgICAgICAgICAgICAgIFJlc2VydmVkIGRvIG5vdCB1c2UKKy8vIFJFU0VSVkVEMCAgICAgICAgICAgICAgICBSZXNlcnZlZCBkbyBub3QgdXNlCisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU2VsZWN0cyBTTVBIX0FVVE9UQUtFX0RPTkUgYXMgc3RhcnQgc2lnbmFsCisvLyBUSU1FUjFfRVYgICAgICAgICAgICAgICAgU2VsZWN0cyBUSU1FUjFfRVYgYXMgc3RhcnQgc2lnbmFsCisvLyBUSU1FUjBfRVYgICAgICAgICAgICAgICAgU2VsZWN0cyBUSU1FUjBfRVYgYXMgc3RhcnQgc2lnbmFsCisvLyBURENfRE9ORSAgICAgICAgICAgICAgICAgU2VsZWN0cyBURENfRE9ORSBhcyBzdGFydCBzaWduYWwKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQiBhcyBzdGFydCBzaWduYWwKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQSBhcyBzdGFydCBzaWduYWwKKy8vIFJUQ19DSDJfRVYgICAgICAgICAgICAgICBTZWxlY3RzIFJUQ19DSDJfRVYgYXMgc3RhcnQgc2lnbmFsCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUUwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFDMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUIwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE5MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNzAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE2MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTUwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNDAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQjAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX05PX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfTk9fRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19SRVNFUlZFRDEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX1JFU0VSVkVEMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX1NUQVJUX1NSQ19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfU1RBUlRfU1JDX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9TVEFSVF9TUkNfUlRDX0NIMl9FViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMTowXSBDTUQKKy8vCisvLyBBREMgaW50ZXJmYWNlIGNvbnRyb2wgY29tbWFuZAorLy8gRU5VTXM6CisvLyBGTFVTSCAgICAgICAgICAgICAgICAgICAgQURDIEZJRk8gZmx1c2guIE5vdGUgdGhhdCBDTUQgbmVlZHMgdG8gYmUgc2V0IHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VOJyBhZ2FpbiBmb3IgRklGTyB0byBiZSBmdW5jdGlvbmFsIGFmdGVyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaC4gQSBmbHVzaCB0YWtlcyB0d28gY2xvY2sgcGVyaW9kcyBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVggY2xvY2sgdG8gZmluaXNoLgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFEQyBpbnRlcmZhY2UgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEFEQyBpbnRlcmZhY2UgZGlzYWJsZWQKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9DTURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX0NNRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfQ01EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0NUTF9DTURfRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBVVhfQU5BSUZfQURDQ1RMX0NNRF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9BTkFJRl9BRENDVExfQ01EX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfQU5BSUZfT19BRENGSUZPU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIE9WRVJGTE9XCisvLworLy8gRklGTyBvdmVyZmxvdyBmbGFnLgorLy8KKy8vIDA6IEZJRk8gaGFzIG5vdCBvdmVyZmxvd2VkLgorLy8gMTogRklGTyBoYXMgb3ZlcmZsb3dlZCwgdGhpcyBmbGFnIGlzIHN0aWNreSB1bnRpbCBGSUZPIGlzIGZsdXNoZWQuCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX09WRVJGTE9XX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfT1ZFUkZMT1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9PVkVSRkxPV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gVU5ERVJGTE9XCisvLworLy8gRklGTyB1bmRlcmZsb3cgZmxhZy4KKy8vCisvLyAwOiBGSUZPIGhhcyBub3QgdW5kZXJmbG93ZWQKKy8vIDE6IEZJRk8gaGFzIHVuZGVyZmxvd2VkLCB0aGlzIGZsYWcgaXMgc3RpY2t5IHVudGlsIHRoZSBGSUZPIGlzIGZsdXNoZWQKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfVU5ERVJGTE9XX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9VTkRFUkZMT1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX1VOREVSRkxPV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBGVUxMCisvLworLy8gRklGTyBmdWxsIGZsYWcuCisvLworLy8gMDogRklGTyBpcyBub3QgZnVsbCwgaS5lLiB0aGVyZSBpcyBsZXNzIHRoYW4gNCBzYW1wbGVzIGluIHRoZSBGSUZPLgorLy8gMTogRklGTyBpcyBmdWxsLCBpLmUuIHRoZXJlIGFyZSA0IHNhbXBsZXMgaW4gdGhlIEZJRk8KKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9GVUxMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBBTE1PU1RfRlVMTAorLy8KKy8vIEZJRk8gYWxtb3N0IGZ1bGwgZmxhZy4KKy8vCisvLyAwOiBUaGVyZSBpcyBsZXNzIHRoYW4gMyBzYW1wbGVzIGluIHRoZSBGSUZPLCBvciB0aGUgRklGTyBpcyBmdWxsIGluIHdoaWNoCisvLyBjYXNlIHRoZSBGVUxMIGZsYWcgaXMgYXNzZXJ0ZWQKKy8vIDE6IFRoZXJlIGFyZSAzIHNhbXBsZXMgaW4gdGhlIEZJRk8sIGkuZS4gdGhlcmUgaXMgcm9vbSBmb3Igb25lIG1vcmUgc2FtcGxlCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9BTE1PU1RfRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0FMTU9TVF9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfQUxNT1NUX0ZVTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9BTE1PU1RfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU1QVFkKKy8vCisvLyBGSUZPIGVtcHR5IGZsYWcuCisvLworLy8gMDogRklGTyBjb250YWlucyBvbmUgb3IgbW9yZSBzYW1wbGVzCisvLyAxOiBGSUZPIGlzIGVtcHR5CisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9TVEFUX0VNUFRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT1NUQVRfRU1QVFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPU1RBVF9FTVBUWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfQU5BSUZfT19BRENGSUZPCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTE6MF0gREFUQQorLy8KKy8vIEZJRk8gaXMgcG9wcGVkIHdoZW4gcmVhZC4gRGF0YSBpcyBwdXNoZWQgaW50byBGSUZPIHdoZW4gd3JpdHRlbi4gV3JpdGluZyBpcworLy8gaW50ZW5kZWQgZm9yIGRlYnVnZ2luZy9jb2RlIGRldmVsb3BtZW50IHB1cnBvc2VzCisjZGVmaW5lIEFVWF9BTkFJRl9BRENGSUZPX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ0ZJRk9fREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBBVVhfQU5BSUZfQURDRklGT19EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0FOQUlGX09fQURDVFJJRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVJUCisvLworLy8gV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgdHJpZ2dlciBhbiBBREMgY29udmVyc2lvbiBnaXZlbiB0aGF0CisvLyBBRENDVEwuU1RBUlRfU1JDIGlzIHNldCB0byBOT19FVkVOVDAgb3IgTk9fRVZFTlQxLiBJZiBvdGhlciBzZXR0aW5nIGlzIHVzZWQKKy8vIGluIEFEQ0NUTC5TVEFSVF9TUkMgYmVoYXZpb3IgY2FuIGJlIHVucHJlZGljdGFibGUKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ1RSSUdfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfQU5BSUZfQURDVFJJR19TVEFSVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9BTkFJRl9BRENUUklHX1NUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0FOQUlGX0FEQ1RSSUdfU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9BTkFJRl9PX0lTUkNDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSRVNFVF9OCisvLworLy8gQ3VycmVudCBzb3VyY2UgY29udHJvbAorLy8KKy8vIDA6IEN1cnJlbnQgc291cmNlIGlzIGNsYW1wZWQKKy8vIDE6IEN1cnJlbnQgc291cmNlIGlzIGFjdGl2ZS9jaGFyZ2luZworI2RlZmluZSBBVVhfQU5BSUZfSVNSQ0NUTF9SRVNFVF9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9BTkFJRl9JU1JDQ1RMX1JFU0VUX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0FOQUlGX0lTUkNDVExfUkVTRVRfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfQU5BSUZfSVNSQ0NUTF9SRVNFVF9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQVVYX0FOQUlGX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9ldmN0bC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X2V2Y3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2MzExOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9ldmN0bC5oCkBAIC0wLDAgKzEsMTc3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2F1eF9ldmN0bF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19BVVhfRVZDVExfSF9fCisjZGVmaW5lIF9fSFdfQVVYX0VWQ1RMX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFVWF9FVkNUTCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBWZWN0b3IgQ29uZmlndXJhdGlvbiAwCisjZGVmaW5lIEFVWF9FVkNUTF9PX1ZFQ0NGRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gVmVjdG9yIENvbmZpZ3VyYXRpb24gMQorI2RlZmluZSBBVVhfRVZDVExfT19WRUNDRkcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFNlbnNvciBDb250cm9sbGVyIEVuZ2luZSBXYWl0IEV2ZW50IFNlbGVjdGlvbgorI2RlZmluZSBBVVhfRVZDVExfT19TQ0VXRVZTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEV2ZW50cyBUbyBBT04gRG9tYWluIEZsYWdzCisjZGVmaW5lIEFVWF9FVkNUTF9PX0VWVE9BT05GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gRXZlbnRzIFRvIEFPTiBEb21haW4gUG9sYXJpdHkKKyNkZWZpbmUgQVVYX0VWQ1RMX09fRVZUT0FPTlBPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBEaXJlY3QgTWVtb3J5IEFjY2VzcyBDb250cm9sCisjZGVmaW5lIEFVWF9FVkNUTF9PX0RNQUNUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gU29mdHdhcmUgRXZlbnQgU2V0CisjZGVmaW5lIEFVWF9FVkNUTF9PX1NXRVZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gRXZlbnQgU3RhdHVzIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX09fRVZTVEFUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBFdmVudCBTdGF0dXMgMQorI2RlZmluZSBBVVhfRVZDVExfT19FVlNUQVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIEV2ZW50IFRvIE1DVSBEb21haW4gUG9sYXJpdHkKKyNkZWZpbmUgQVVYX0VWQ1RMX09fRVZUT01DVVBPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBFdmVudHMgdG8gTUNVIERvbWFpbiBGbGFncworI2RlZmluZSBBVVhfRVZDVExfT19FVlRPTUNVRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIENvbWJpbmVkIEV2ZW50IFRvIE1DVSBEb21haW4gTWFzaworI2RlZmluZSBBVVhfRVZDVExfT19DT01CRVZUT01DVU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIFZlY3RvciBGbGFncworI2RlZmluZSBBVVhfRVZDVExfT19WRUNGTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIEV2ZW50cyBUbyBNQ1UgRG9tYWluIEZsYWdzIENsZWFyCisjZGVmaW5lIEFVWF9FVkNUTF9PX0VWVE9NQ1VGTEFHU0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gRXZlbnRzIFRvIEFPTiBEb21haW4gQ2xlYXIKKyNkZWZpbmUgQVVYX0VWQ1RMX09fRVZUT0FPTkZMQUdTQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBWZWN0b3IgRmxhZ3MgQ2xlYXIKKyNkZWZpbmUgQVVYX0VWQ1RMX09fVkVDRkxBR1NDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX1ZFQ0NGRzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE0XSBWRUMxX1BPTAorLy8KKy8vIFNlbGVjdHMgdmVjdG9yIDEgdHJpZ2dlciBldmVudCBwb2xhcml0eS4KKy8vCisvLyBUbyBtYW51YWxseSB0cmlnZ2VyIHZlY3RvciAxIGV4ZWN1dGlvbiwgc2V0IFZFQzFfRVYgdG8gYSBrbm93biBzdGF0aWMgdmFsdWUsCisvLyBhbmQgdG9nZ2xlIFZFQzFfUE9MIHR3aWNlLgorLy8gRU5VTXM6CisvLyBGQUxMICAgICAgICAgICAgICAgICAgICAgRmFsbGluZyBlZGdlIHRyaWdnZXJzIGV4ZWN1dGlvbi4KKy8vIFJJU0UgICAgICAgICAgICAgICAgICAgICBSaXNpbmcgZWRnZSB0cmlnZ2VycyBleGVjdXRpb24uCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9QT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX1BPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfUE9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9QT0xfRkFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX1BPTF9SSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTNdIFZFQzFfRU4KKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgdHJpZ2dlcmluZyBvZiB2ZWN0b3IgMSBleGVjdXRpb24uCisvLworLy8gV2hlbiBlbmFibGVkLCB0aGUgZWRnZSBzZWxlY3RlZCBieSBWRUMxX1BPTCBvbiB0aGUgZXZlbnQgc2VsZWN0ZWQgYnkgVkVDMV9FVgorLy8gd2lsbCBzZXQgVkVDRkxBR1MuVkVDMSwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyB2ZWN0b3IgMSBleGVjdXRpb24uCisvLworLy8gTm90ZTogTG93ZXIgdmVjdG9ycyAoMCkgaGF2ZSBwcmlvcml0eS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFuIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzFfRVYgd2l0aCBwb2xhcml0eSBmcm9tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDMV9QT0wgdHJpZ2dlcnMgYSBqdW1wIHRvIHZlY3RvciAjIDEgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaXMgaW4gc2xlZXAKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBFdmVudCBkZXRlY3Rpb24gaXMgZGlzYWJsZWQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTI6OF0gVkVDMV9FVgorLy8KKy8vIFNlbGVjdHMgdmVjdG9yIDEgdHJpZ2dlciBzb3VyY2UgZXZlbnQuCisvLyBFTlVNczoKKy8vIEFEQ19JUlEgICAgICAgICAgICAgICAgICBBRENfSVJRIGV2ZW50CisvLyBNQ1VfRVYgICAgICAgICAgICAgICAgICAgTUNVX0VWIGV2ZW50CisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgQUNMS19SRUYgZXZlbnQKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBBVVhJTzE1IGlucHV0IGRhdGEKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBBVVhJTzE0IGlucHV0IGRhdGEKKy8vIEFVWElPMTMgICAgICAgICAgICAgICAgICBBVVhJTzEzIGlucHV0IGRhdGEKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBBVVhJTzEyIGlucHV0IGRhdGEKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBBVVhJTzExIGlucHV0IGRhdGEKKy8vIEFVWElPMTAgICAgICAgICAgICAgICAgICBBVVhJTzEwIGlucHV0IGRhdGEKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBBVVhJTzkgaW5wdXQgZGF0YQorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIEFVWElPOCBpbnB1dCBkYXRhCisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgQVVYSU83IGlucHV0IGRhdGEKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBBVVhJTzYgaW5wdXQgZGF0YQorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIEFVWElPNSBpbnB1dCBkYXRhCisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgQVVYSU80IGlucHV0IGRhdGEKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBBVVhJTzMgaW5wdXQgZGF0YQorLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIEFVWElPMiBpbnB1dCBkYXRhCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgQVVYSU8xIGlucHV0IGRhdGEKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBBVVhJTzAgaW5wdXQgZGF0YQorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIEFPTl9QUk9HX1dVIGV2ZW50CisvLyBBT05fU1cgICAgICAgICAgICAgICAgICAgQU9OX1NXIGV2ZW50CisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgT0JTTVVYMSBldmVudAorLy8gT0JTTVVYMCAgICAgICAgICAgICAgICAgIE9CU01VWDAgZXZlbnQKKy8vIEFEQ19GSUZPX0FMTU9TVF9GVUxMICAgICBBRENfRklGT19BTE1PU1RfRlVMTCBldmVudAorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIEFEQ19ET05FIGV2ZW50CisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50CisvLyBUSU1FUjFfRVYgICAgICAgICAgICAgICAgVElNRVIxX0VWIGV2ZW50CisvLyBUSU1FUjBfRVYgICAgICAgICAgICAgICAgVElNRVIwX0VWIGV2ZW50CisvLyBURENfRE9ORSAgICAgICAgICAgICAgICAgVERDX0RPTkUgZXZlbnQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVhfQ09NUEIgZXZlbnQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVhfQ09NUEEgZXZlbnQKKy8vIEFPTl9SVENfQ0gyICAgICAgICAgICAgICBBT05fUlRDX0NIMiBldmVudAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMV9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMxX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzFfRVZfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gVkVDMF9QT0wKKy8vCisvLyBTZWxlY3RzIHZlY3RvciAwIHRyaWdnZXIgZXZlbnQgcG9sYXJpdHkuCisvLworLy8gVG8gbWFudWFsbHkgdHJpZ2dlciB2ZWN0b3IgMCBleGVjdXRpb24sIHNldCBWRUMwX0VWIHRvIGEga25vd24gc3RhdGljIHZhbHVlLAorLy8gYW5kIHRvZ2dsZSBWRUMwX1BPTCB0d2ljZS4KKy8vIEVOVU1zOgorLy8gRkFMTCAgICAgICAgICAgICAgICAgICAgIEZhbGxpbmcgZWRnZSB0cmlnZ2VycyBleGVjdXRpb24uCisvLyBSSVNFICAgICAgICAgICAgICAgICAgICAgUmlzaW5nIGVkZ2UgdHJpZ2dlcnMgZXhlY3V0aW9uLgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfUE9MX0ZBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9QT0xfUklTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBWRUMwX0VOCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRyaWdnZXJpbmcgb2YgdmVjdG9yIDAgZXhlY3V0aW9uLgorLy8KKy8vIFdoZW4gZW5hYmxlZCwgdGhlIGVkZ2Ugc2VsZWN0ZWQgYnkgVkVDMF9QT0wgb24gdGhlIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzBfRVYKKy8vIHdpbGwgc2V0IFZFQ0ZMQUdTLlZFQzAsIHdoaWNoIGluIHR1cm4gdHJpZ2dlcnMgdmVjdG9yIDAgZXhlY3V0aW9uLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQW4gZXZlbnQgc2VsZWN0ZWQgYnkgVkVDMF9FViB3aXRoIHBvbGFyaXR5IGZyb20KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBWRUMwX1BPTCB0cmlnZ2VycyBhIGp1bXAgdG8gdmVjdG9yICMwIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGlzIGluIHNsZWVwCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgZGV0ZWN0aW9uIGlzIGRpc2FibGVkCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs0OjBdIFZFQzBfRVYKKy8vCisvLyBTZWxlY3RzIHZlY3RvciAwIHRyaWdnZXIgc291cmNlIGV2ZW50LgorLy8gRU5VTXM6CisvLyBBRENfSVJRICAgICAgICAgICAgICAgICAgQURDX0lSUSBldmVudAorLy8gTUNVX0VWICAgICAgICAgICAgICAgICAgIE1DVV9FViBldmVudAorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIEFDTEtfUkVGIGV2ZW50CisvLyBBVVhJTzE1ICAgICAgICAgICAgICAgICAgQVVYSU8xNSBpbnB1dCBkYXRhCisvLyBBVVhJTzE0ICAgICAgICAgICAgICAgICAgQVVYSU8xNCBpbnB1dCBkYXRhCisvLyBBVVhJTzEzICAgICAgICAgICAgICAgICAgQVVYSU8xMyBpbnB1dCBkYXRhCisvLyBBVVhJTzEyICAgICAgICAgICAgICAgICAgQVVYSU8xMiBpbnB1dCBkYXRhCisvLyBBVVhJTzExICAgICAgICAgICAgICAgICAgQVVYSU8xMSBpbnB1dCBkYXRhCisvLyBBVVhJTzEwICAgICAgICAgICAgICAgICAgQVVYSU8xMCBpbnB1dCBkYXRhCisvLyBBVVhJTzkgICAgICAgICAgICAgICAgICAgQVVYSU85IGlucHV0IGRhdGEKKy8vIEFVWElPOCAgICAgICAgICAgICAgICAgICBBVVhJTzggaW5wdXQgZGF0YQorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIEFVWElPNyBpbnB1dCBkYXRhCisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgQVVYSU82IGlucHV0IGRhdGEKKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBBVVhJTzUgaW5wdXQgZGF0YQorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIEFVWElPNCBpbnB1dCBkYXRhCisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgQVVYSU8zIGlucHV0IGRhdGEKKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBBVVhJTzIgaW5wdXQgZGF0YQorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIEFVWElPMSBpbnB1dCBkYXRhCisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgQVVYSU8wIGlucHV0IGRhdGEKKy8vIEFPTl9QUk9HX1dVICAgICAgICAgICAgICBBT05fUFJPR19XVSBldmVudAorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIEFPTl9TVyBldmVudAorLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIE9CU01VWDEgZXZlbnQKKy8vIE9CU01VWDAgICAgICAgICAgICAgICAgICBPQlNNVVgwIGV2ZW50CisvLyBBRENfRklGT19BTE1PU1RfRlVMTCAgICAgQURDX0ZJRk9fQUxNT1NUX0ZVTEwgZXZlbnQKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBBRENfRE9ORSBldmVudAorLy8gU01QSF9BVVRPVEFLRV9ET05FICAgICAgIFNNUEhfQVVUT1RBS0VfRE9ORSBldmVudAorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFRJTUVSMV9FViBldmVudAorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFRJTUVSMF9FViBldmVudAorLy8gVERDX0RPTkUgICAgICAgICAgICAgICAgIFREQ19ET05FIGV2ZW50CisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYX0NPTVBCIGV2ZW50CisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYX0NPTVBBIGV2ZW50CisvLyBBT05fUlRDX0NIMiAgICAgICAgICAgICAgQU9OX1JUQ19DSDIgZXZlbnQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX01DVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQUNMS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FVWElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9PQlNNVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcwX1ZFQzBfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzBfVkVDMF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMF9WRUMwX0VWX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fVkVDQ0ZHMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTRdIFZFQzNfUE9MCisvLworLy8gU2VsZWN0cyB2ZWN0b3IgMyB0cmlnZ2VyIGV2ZW50IHBvbGFyaXR5LgorLy8KKy8vIFRvIG1hbnVhbGx5IHRyaWdnZXIgdmVjdG9yIDMgZXhlY3V0aW9uLCBzZXQgVkVDM19FViB0byBhIGtub3duIHN0YXRpYyB2YWx1ZSwKKy8vIGFuZCB0b2dnbGUgVkVDM19QT0wgdHdpY2UuCisvLyBFTlVNczoKKy8vIEZBTEwgICAgICAgICAgICAgICAgICAgICBGYWxsaW5nIGVkZ2UgdHJpZ2dlcnMgZXhlY3V0aW9uLgorLy8gUklTRSAgICAgICAgICAgICAgICAgICAgIFJpc2luZyBlZGdlIHRyaWdnZXJzIGV4ZWN1dGlvbi4KKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX1BPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfUE9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19QT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX1BPTF9GQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfUE9MX1JJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxM10gVkVDM19FTgorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSB0cmlnZ2VyaW5nIG9mIHZlY3RvciAzIGV4ZWN1dGlvbi4KKy8vCisvLyBXaGVuIGVuYWJsZWQsIHRoZSBlZGdlIHNlbGVjdGVkIGJ5IFZFQzNfUE9MIG9uIHRoZSBldmVudCBzZWxlY3RlZCBieSBWRUMzX0VWCisvLyB3aWxsIHNldCBWRUNGTEFHUy5WRUMzLCB3aGljaCBpbiB0dXJuIHRyaWdnZXJzIHZlY3RvciAzIGV4ZWN1dGlvbi4KKy8vCisvLyBOb3RlOiBMb3dlciB2ZWN0b3JzICgwLCAxIGFuZCAyKSBoYXZlIHByaW9yaXR5LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQW4gZXZlbnQgc2VsZWN0ZWQgYnkgVkVDM19FViB3aXRoIHBvbGFyaXR5IGZyb20KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBWRUMzX1BPTCB0cmlnZ2VycyBhIGp1bXAgdG8gdmVjdG9yICMgMyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBpcyBpbiBzbGVlcAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEV2ZW50IGRldGVjdGlvbiBpcyBkaXNhYmxlZAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogIFsxMjo4XSBWRUMzX0VWCisvLworLy8gU2VsZWN0cyB2ZWN0b3IgMyB0cmlnZ2VyIHNvdXJjZSBldmVudC4KKy8vIEVOVU1zOgorLy8gQURDX0lSUSAgICAgICAgICAgICAgICAgIEFEQ19JUlEgZXZlbnQKKy8vIE1DVV9FViAgICAgICAgICAgICAgICAgICBNQ1VfRVYgZXZlbnQKKy8vIEFDTEtfUkVGICAgICAgICAgICAgICAgICBBQ0xLX1JFRiBldmVudAorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIEFVWElPMTUgaW5wdXQgZGF0YQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIEFVWElPMTQgaW5wdXQgZGF0YQorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIEFVWElPMTMgaW5wdXQgZGF0YQorLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIEFVWElPMTIgaW5wdXQgZGF0YQorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIEFVWElPMTEgaW5wdXQgZGF0YQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIEFVWElPMTAgaW5wdXQgZGF0YQorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIEFVWElPOSBpbnB1dCBkYXRhCisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgQVVYSU84IGlucHV0IGRhdGEKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBBVVhJTzcgaW5wdXQgZGF0YQorLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIEFVWElPNiBpbnB1dCBkYXRhCisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgQVVYSU81IGlucHV0IGRhdGEKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBBVVhJTzQgaW5wdXQgZGF0YQorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIEFVWElPMyBpbnB1dCBkYXRhCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgQVVYSU8yIGlucHV0IGRhdGEKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBBVVhJTzEgaW5wdXQgZGF0YQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIEFVWElPMCBpbnB1dCBkYXRhCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgQU9OX1BST0dfV1UgZXZlbnQKKy8vIEFPTl9TVyAgICAgICAgICAgICAgICAgICBBT05fU1cgZXZlbnQKKy8vIE9CU01VWDEgICAgICAgICAgICAgICAgICBPQlNNVVgxIGV2ZW50CisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgT0JTTVVYMCBldmVudAorLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgIEFEQ19GSUZPX0FMTU9TVF9GVUxMIGV2ZW50CisvLyBBRENfRE9ORSAgICAgICAgICAgICAgICAgQURDX0RPTkUgZXZlbnQKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTTVBIX0FVVE9UQUtFX0RPTkUgZXZlbnQKKy8vIFRJTUVSMV9FViAgICAgICAgICAgICAgICBUSU1FUjFfRVYgZXZlbnQKKy8vIFRJTUVSMF9FViAgICAgICAgICAgICAgICBUSU1FUjBfRVYgZXZlbnQKKy8vIFREQ19ET05FICAgICAgICAgICAgICAgICBURENfRE9ORSBldmVudAorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWF9DT01QQiBldmVudAorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWF9DT01QQSBldmVudAorLy8gQU9OX1JUQ19DSDIgICAgICAgICAgICAgIEFPTl9SVENfQ0gyIGV2ZW50CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9NQ1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUUwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FDTEtfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFDMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUIwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE5MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNzAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE2MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTUwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfT0JTTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMzX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzNfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDM19FVl9BT05fUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBWRUMyX1BPTAorLy8KKy8vIFNlbGVjdHMgdmVjdG9yIDIgdHJpZ2dlciBldmVudCBwb2xhcml0eS4KKy8vCisvLyBUbyBtYW51YWxseSB0cmlnZ2VyIHZlY3RvciAyIGV4ZWN1dGlvbiwgc2V0IFZFQzJfRVYgdG8gYSBrbm93biBzdGF0aWMgdmFsdWUsCisvLyBhbmQgdG9nZ2xlIFZFQzJfUE9MIHR3aWNlLgorLy8gRU5VTXM6CisvLyBGQUxMICAgICAgICAgICAgICAgICAgICAgRmFsbGluZyBlZGdlIHRyaWdnZXJzIGV4ZWN1dGlvbi4KKy8vIFJJU0UgICAgICAgICAgICAgICAgICAgICBSaXNpbmcgZWRnZSB0cmlnZ2VycyBleGVjdXRpb24uCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9QT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX1BPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfUE9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9QT0xfRkFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX1BPTF9SSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFZFQzJfRU4KKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgdHJpZ2dlcmluZyBvZiB2ZWN0b3IgMiBleGVjdXRpb24uCisvLworLy8gV2hlbiBlbmFibGVkLCB0aGUgZWRnZSBzZWxlY3RlZCBieSBWRUMyX1BPTCBvbiB0aGUgZXZlbnQgc2VsZWN0ZWQgYnkgVkVDMl9FVgorLy8gd2lsbCBzZXQgVkVDRkxBR1MuVkVDMiwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyB2ZWN0b3IgMiBleGVjdXRpb24uCisvLworLy8gTm90ZTogTG93ZXIgdmVjdG9ycyAoMCBhbmQgMSkgaGF2ZSBwcmlvcml0eS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFuIGV2ZW50IHNlbGVjdGVkIGJ5IFZFQzJfRVYgd2l0aCBwb2xhcml0eSBmcm9tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDMl9QT0wgdHJpZ2dlcnMgYSBqdW1wIHRvIHZlY3RvciAjIDIgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaXMgaW4gc2xlZXAKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBFdmVudCBkZXRlY3Rpb24gaXMgZGlzYWJsZWQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzQ6MF0gVkVDMl9FVgorLy8KKy8vIFNlbGVjdHMgdmVjdG9yIDIgdHJpZ2dlciBzb3VyY2UgZXZlbnQuCisvLyBFTlVNczoKKy8vIEFEQ19JUlEgICAgICAgICAgICAgICAgICBBRENfSVJRIGV2ZW50CisvLyBNQ1VfRVYgICAgICAgICAgICAgICAgICAgTUNVX0VWIGV2ZW50CisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgQUNMS19SRUYgZXZlbnQKKy8vIEFVWElPMTUgICAgICAgICAgICAgICAgICBBVVhJTzE1IGlucHV0IGRhdGEKKy8vIEFVWElPMTQgICAgICAgICAgICAgICAgICBBVVhJTzE0IGlucHV0IGRhdGEKKy8vIEFVWElPMTMgICAgICAgICAgICAgICAgICBBVVhJTzEzIGlucHV0IGRhdGEKKy8vIEFVWElPMTIgICAgICAgICAgICAgICAgICBBVVhJTzEyIGlucHV0IGRhdGEKKy8vIEFVWElPMTEgICAgICAgICAgICAgICAgICBBVVhJTzExIGlucHV0IGRhdGEKKy8vIEFVWElPMTAgICAgICAgICAgICAgICAgICBBVVhJTzEwIGlucHV0IGRhdGEKKy8vIEFVWElPOSAgICAgICAgICAgICAgICAgICBBVVhJTzkgaW5wdXQgZGF0YQorLy8gQVVYSU84ICAgICAgICAgICAgICAgICAgIEFVWElPOCBpbnB1dCBkYXRhCisvLyBBVVhJTzcgICAgICAgICAgICAgICAgICAgQVVYSU83IGlucHV0IGRhdGEKKy8vIEFVWElPNiAgICAgICAgICAgICAgICAgICBBVVhJTzYgaW5wdXQgZGF0YQorLy8gQVVYSU81ICAgICAgICAgICAgICAgICAgIEFVWElPNSBpbnB1dCBkYXRhCisvLyBBVVhJTzQgICAgICAgICAgICAgICAgICAgQVVYSU80IGlucHV0IGRhdGEKKy8vIEFVWElPMyAgICAgICAgICAgICAgICAgICBBVVhJTzMgaW5wdXQgZGF0YQorLy8gQVVYSU8yICAgICAgICAgICAgICAgICAgIEFVWElPMiBpbnB1dCBkYXRhCisvLyBBVVhJTzEgICAgICAgICAgICAgICAgICAgQVVYSU8xIGlucHV0IGRhdGEKKy8vIEFVWElPMCAgICAgICAgICAgICAgICAgICBBVVhJTzAgaW5wdXQgZGF0YQorLy8gQU9OX1BST0dfV1UgICAgICAgICAgICAgIEFPTl9QUk9HX1dVIGV2ZW50CisvLyBBT05fU1cgICAgICAgICAgICAgICAgICAgQU9OX1NXIGV2ZW50CisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgT0JTTVVYMSBldmVudAorLy8gT0JTTVVYMCAgICAgICAgICAgICAgICAgIE9CU01VWDAgZXZlbnQKKy8vIEFEQ19GSUZPX0FMTU9TVF9GVUxMICAgICBBRENfRklGT19BTE1PU1RfRlVMTCBldmVudAorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIEFEQ19ET05FIGV2ZW50CisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50CisvLyBUSU1FUjFfRVYgICAgICAgICAgICAgICAgVElNRVIxX0VWIGV2ZW50CisvLyBUSU1FUjBfRVYgICAgICAgICAgICAgICAgVElNRVIwX0VWIGV2ZW50CisvLyBURENfRE9ORSAgICAgICAgICAgICAgICAgVERDX0RPTkUgZXZlbnQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVhfQ09NUEIgZXZlbnQKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVhfQ09NUEEgZXZlbnQKKy8vIEFPTl9SVENfQ0gyICAgICAgICAgICAgICBBT05fUlRDX0NIMiBldmVudAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0NGRzFfVkVDMl9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfVkVDQ0ZHMV9WRUMyX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNDRkcxX1ZFQzJfRVZfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19TQ0VXRVZTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNDowXSBXRVY3X0VWCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIHRvIGJlIG1hcHBlZCB0byBBVVhfU0NFOldVU1RBVC5FVl9TSUdOQUxTIGJpdCA3LgorLy8gRU5VTXM6CisvLyBBRENfSVJRICAgICAgICAgICAgICAgICAgQURDX0lSUSBldmVudAorLy8gTUNVX0VWICAgICAgICAgICAgICAgICAgIE1DVV9FViBldmVudAorLy8gQUNMS19SRUYgICAgICAgICAgICAgICAgIEFDTEtfUkVGIGV2ZW50CisvLyBBVVhJTzE1ICAgICAgICAgICAgICAgICAgQVVYSU8xNSBpbnB1dCBkYXRhCisvLyBBVVhJTzE0ICAgICAgICAgICAgICAgICAgQVVYSU8xNCBpbnB1dCBkYXRhCisvLyBBVVhJTzEzICAgICAgICAgICAgICAgICAgQVVYSU8xMyBpbnB1dCBkYXRhCisvLyBBVVhJTzEyICAgICAgICAgICAgICAgICAgQVVYSU8xMiBpbnB1dCBkYXRhCisvLyBBVVhJTzExICAgICAgICAgICAgICAgICAgQVVYSU8xMSBpbnB1dCBkYXRhCisvLyBBVVhJTzEwICAgICAgICAgICAgICAgICAgQVVYSU8xMCBpbnB1dCBkYXRhCisvLyBBVVhJTzkgICAgICAgICAgICAgICAgICAgQVVYSU85IGlucHV0IGRhdGEKKy8vIEFVWElPOCAgICAgICAgICAgICAgICAgICBBVVhJTzggaW5wdXQgZGF0YQorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIEFVWElPNyBpbnB1dCBkYXRhCisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgQVVYSU82IGlucHV0IGRhdGEKKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBBVVhJTzUgaW5wdXQgZGF0YQorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIEFVWElPNCBpbnB1dCBkYXRhCisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgQVVYSU8zIGlucHV0IGRhdGEKKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBBVVhJTzIgaW5wdXQgZGF0YQorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIEFVWElPMSBpbnB1dCBkYXRhCisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgQVVYSU8wIGlucHV0IGRhdGEKKy8vIEFPTl9QUk9HX1dVICAgICAgICAgICAgICBBT05fUFJPR19XVSBldmVudAorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIEFPTl9TVyBldmVudAorLy8gT0JTTVVYMSAgICAgICAgICAgICAgICAgIE9CU01VWDEgZXZlbnQKKy8vIE9CU01VWDAgICAgICAgICAgICAgICAgICBPQlNNVVgwIGV2ZW50CisvLyBBRENfRklGT19BTE1PU1RfRlVMTCAgICAgQURDX0ZJRk9fQUxNT1NUX0ZVTEwgZXZlbnQKKy8vIEFEQ19ET05FICAgICAgICAgICAgICAgICBBRENfRE9ORSBldmVudAorLy8gU01QSF9BVVRPVEFLRV9ET05FICAgICAgIFNNUEhfQVVUT1RBS0VfRE9ORSBldmVudAorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFRJTUVSMV9FViBldmVudAorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFRJTUVSMF9FViBldmVudAorLy8gVERDX0RPTkUgICAgICAgICAgICAgICAgIFREQ19ET05FIGV2ZW50CisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYX0NPTVBCIGV2ZW50CisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYX0NPTVBBIGV2ZW50CisvLyBBT05fUlRDX0NIMiAgICAgICAgICAgICAgQU9OX1JUQ19DSDIgZXZlbnQKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEFVWF9FVkNUTF9TQ0VXRVZTRUxfV0VWN19FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1NDRVdFVlNFTF9XRVY3X0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfU0NFV0VWU0VMX1dFVjdfRVZfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fRVZUT0FPTkZMQUdTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gVElNRVIxX0VWCisvLworLy8gVElNRVIxX0VWIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gVElNRVIwX0VWCisvLworLy8gVElNRVIwX0VWIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19USU1FUjBfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1RJTUVSMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVElNRVIwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gVERDX0RPTkUKKy8vCisvLyBURENfRE9ORSBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfVERDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19URENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1REQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIEFEQ19ET05FCisvLworLy8gQURDX0RPTkUgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX0FEQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQURDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BRENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBVVhfQ09NUEIKKy8vCisvLyBBVVhfQ09NUEIgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX0FVWF9DT01QQl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQVVYX0NPTVBCX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BVVhfQ09NUEJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBBVVhfQ09NUEEKKy8vCisvLyBBVVhfQ09NUEEgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBTV0VWMgorLy8KKy8vIFNXRVYyIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU1dFVjEKKy8vCisvLyBTV0VWMSBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNXRVYwCisvLworLy8gU1dFVjAgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTX1NXRVYwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NfU1dFVjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU19TV0VWMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0VWVE9BT05QT0wKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBUSU1FUjFfRVYKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9BT05GTEFHUy5USU1FUjFfRVYuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIxX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIxX0VWX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjFfRVZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzddIFRJTUVSMF9FVgorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT0FPTkZMQUdTLlRJTUVSMF9FVi4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjBfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVElNRVIwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9USU1FUjBfRVZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1RJTUVSMF9FVl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gVERDX0RPTkUKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9BT05GTEFHUy5URENfRE9ORS4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9URENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1REQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfVERDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9URENfRE9ORV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX1REQ19ET05FX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNV0gQURDX0RPTkUKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9BT05GTEFHUy5BRENfRE9ORS4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BRENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FEQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQURDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BRENfRE9ORV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FEQ19ET05FX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gQVVYX0NPTVBCCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPQU9ORkxBR1MuQVVYX0NPTVBCLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBCX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBCX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBBVVhfQ09NUEEKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9BT05GTEFHUy5BVVhfQ09NUEEuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9OUE9MX0FVWF9DT01QQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05QT0xfQVVYX0NPTVBBX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTlBPTF9BVVhfQ09NUEFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fRE1BQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gUkVRX01PREUKKy8vCisvLyBETUEgUmVxdWVzdCBtb2RlCisvLyBFTlVNczoKKy8vIFNJTkdMRSAgICAgICAgICAgICAgICAgICBTaW5nbGUgcmVxdWVzdHMgYXJlIGdlbmVyYXRlZCBvbiBETUEgY2hhbm5lbCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgY29uZGl0aW9uIGNvbmZpZ3VyZWQgaW4gU0VMIGlzIG1ldAorLy8gQlVSU1QgICAgICAgICAgICAgICAgICAgIEJ1cnN0IHJlcXVlc3RzIGFyZSBnZW5lcmF0ZWQgb24gRE1BIGNoYW5uZWwgNyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmRpdGlvbiBjb25maWd1cmVkIGluIFNFTCBpcyBtZXQKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9SRVFfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1JFUV9NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfUkVRX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9SRVFfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1JFUV9NT0RFX1NJTkdMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfUkVRX01PREVfQlVSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gRU4KKy8vCisvLyAwOiBETUEgaW50ZXJmYWNlIGlzIGRpc2FibGVkCisvLyAxOiBETUEgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBTRUwKKy8vCisvLyBTZWxlY3Rpb24gb2YgRklGTyB3YXRlcm1hcmsgbGV2ZWwgcmVxdWlyZWQgdG8gdHJpZ2dlciBhbiBBRENfRE1BIHRyYW5zZmVyCisvLyBFTlVNczoKKy8vIEZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICBBRENfRE1BIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhlIEFEQyBGSUZPCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWxtb3N0IGZ1bGwgKDMvNCBmdWxsKQorLy8gRklGT19OT1RfRU1QVFkgICAgICAgICAgIEFEQ19ETUEgZXZlbnQgd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiB0aGVyZSBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBzYW1wbGVzIGluIHRoZSBBREMgRklGTworI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfU0VMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9TRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRE1BQ1RMX1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9ETUFDVExfU0VMX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0RNQUNUTF9TRUxfRklGT19OT1RfRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX1NXRVZTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBTV0VWMgorLy8KKy8vIFdyaXRpbmcgMSBzZXRzIHNvZnR3YXJlIGV2ZW50IDIuCisvLworLy8gRm9yIHRoZSBNQ1UgZG9tYWluLCB0aGUgZXZlbnQgZmxhZyBjYW4gYmUgcmVhZCBmcm9tIEVWVE9BT05GTEFHUy5TV0VWMiBhbmQKKy8vIGNsZWFyZWQgdXNpbmcgRVZUT0FPTkZMQUdTQ0xSLlNXRVYyLgorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNXRVYxCisvLworLy8gV3JpdGluZyAxIHNldHMgc29mdHdhcmUgZXZlbnQgMS4KKy8vCisvLyBGb3IgdGhlIE1DVSBkb21haW4sIHRoZSBldmVudCBmbGFnIGNhbiBiZSByZWFkIGZyb20gRVZUT0FPTkZMQUdTLlNXRVYxIGFuZAorLy8gY2xlYXJlZCB1c2luZyBFVlRPQU9ORkxBR1NDTFIuU1dFVjEuCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU1dFVjAKKy8vCisvLyBXcml0aW5nIDEgc2V0cyBzb2Z0d2FyZSBldmVudCAwLgorLy8KKy8vIEZvciB0aGUgTUNVIGRvbWFpbiwgdGhlIGV2ZW50IGZsYWcgY2FuIGJlIHJlYWQgZnJvbSBFVlRPQU9ORkxBR1MuU1dFVjAgYW5kCisvLyBjbGVhcmVkIHVzaW5nIEVWVE9BT05GTEFHU0NMUi5TV0VWMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfU1dFVlNFVF9TV0VWMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9TV0VWU0VUX1NXRVYwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1NXRVZTRVRfU1dFVjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0VWU1RBVDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE1XSBBVVhJTzIKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMiBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhJTzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBBVVhJTzEKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMSBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBBVVhJTzAKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMCBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYSU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBBT05fUFJPR19XVQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgT0JTTVVYMyBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1BST0dfV1VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fUFJPR19XVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9QUk9HX1dVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gQU9OX1NXCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBPQlNNVVgyIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fU1dfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9TV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1NXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBPQlNNVVgxCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBPQlNNVVgxIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfT0JTTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9PQlNNVVgxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX09CU01VWDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfT0JTTVVYMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBPQlNNVVgwCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBPQlNNVVgwIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9PQlNNVVgwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX09CU01VWDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfT0JTTVVYMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBBRENfRklGT19BTE1PU1RfRlVMTAorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQURDX0ZJRk9fQUxNT1NUX0ZVTEwgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FEQ19GSUZPX0FMTU9TVF9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQURDX0ZJRk9fQUxNT1NUX0ZVTExfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BRENfRklGT19BTE1PU1RfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEFEQ19ET05FCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBRENfRE9ORSBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQURDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BRENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FEQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gU01QSF9BVVRPVEFLRV9ET05FCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBTTVBIX0FVVE9UQUtFX0RPTkUgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1NNUEhfQVVUT1RBS0VfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfU01QSF9BVVRPVEFLRV9ET05FX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9TTVBIX0FVVE9UQUtFX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRJTUVSMV9FVgorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgVElNRVIxX0VWIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUSU1FUjBfRVYKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIFRJTUVSMF9FViBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gVERDX0RPTkUKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIFREQ19ET05FIGV2ZW50IGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9URENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX1REQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfVERDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBVVhfQ09NUEIKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWF9DT01QQiBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYX0NPTVBCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhfQ09NUEJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWF9DT01QQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQVVYX0NPTVBBCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhfQ09NUEEgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFPTl9SVENfQ0gyCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBT05fUlRDX0NIMiBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9SVENfQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDBfQU9OX1JUQ19DSDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMF9BT05fUlRDX0NIMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQwX0FPTl9SVENfQ0gyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19FVlNUQVQxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNV0gQURDX0lSUQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQURDX0lSUSBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQURDX0lSUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BRENfSVJRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FEQ19JUlFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gTUNVX0VWCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBNQ1VfRVYgZXZlbnQgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9NQ1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX01DVV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfTUNVX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9NQ1VfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIEFDTEtfUkVGCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBQ0xLX1JFRiBldmVudCBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FDTEtfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQUNMS19SRUZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BQ0xLX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FDTEtfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gQVVYSU8xNQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU8xNSBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBBVVhJTzE0CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzE0IGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIEFVWElPMTMKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMTMgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQVVYSU8xMgorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgQVVYSU8xMiBpbnB1dCBkYXRhIGxpbmUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBBVVhJTzExCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzExIGlucHV0IGRhdGEgbGluZQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEFVWElPMTAKKy8vCisvLyBDdXJyZW50IHZhbHVlIG9mIEFVWElPMTAgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8xMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gQVVYSU85CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzkgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU85X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gQVVYSU84CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzggaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQVVYSU83CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzcgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU83X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQVVYSU82CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzYgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQVVYSU81CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzUgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQVVYSU80CisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzQgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU80X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQVVYSU8zCisvLworLy8gQ3VycmVudCB2YWx1ZSBvZiBBVVhJTzMgaW5wdXQgZGF0YSBsaW5lCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWU1RBVDFfQVVYSU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRVZTVEFUMV9BVVhJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlNUQVQxX0FVWElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19FVlRPTUNVUE9MCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gQURDX0lSUQorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLkFEQ19JUlEuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0lSUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfSVJRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19JUlFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0lSUV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfSVJRX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzldIE9CU01VWDAKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5PQlNNVVgwLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX09CU01VWDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfT0JTTVVYMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9PQlNNVVgwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX09CU01VWDBfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfT0JTTVVYMF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs4XSBBRENfRklGT19BTE1PU1RfRlVMTAorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19GSUZPX0FMTU9TVF9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0ZJRk9fQUxNT1NUX0ZVTExfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRklGT19BTE1PU1RfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19GSUZPX0FMTU9TVF9GVUxMX0xPVyAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0ZJRk9fQUxNT1NUX0ZVTExfSElHSCAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs3XSBBRENfRE9ORQorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLkFEQ19ET05FLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BRENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FEQ19ET05FX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQURDX0RPTkVfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBTTVBIX0FVVE9UQUtFX0RPTkUKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5TTVBIX0FVVE9UQUtFX0RPTkUuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfU01QSF9BVVRPVEFLRV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9TTVBIX0FVVE9UQUtFX0RPTkVfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1NNUEhfQVVUT1RBS0VfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfU01QSF9BVVRPVEFLRV9ET05FX0xPVyAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9TTVBIX0FVVE9UQUtFX0RPTkVfSElHSCAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFRJTUVSMV9FVgorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLlRJTUVSMV9FVi4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjFfRVZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMV9FVl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gVElNRVIwX0VWCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPTUNVRkxBR1MuVElNRVIwX0VWLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMF9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9USU1FUjBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1RJTUVSMF9FVl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVElNRVIwX0VWX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBURENfRE9ORQorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLlREQ19ET05FLgorLy8gRU5VTXM6CisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgTG93IGxldmVsCisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgSGlnaCBsZXZlbAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1REQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVERDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9URENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX1REQ19ET05FX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfVERDX0RPTkVfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBBVVhfQ09NUEIKKy8vCisvLyBTZWxlY3RzIHRoZSBldmVudCBzb3VyY2UgbGV2ZWwgdGhhdCBzZXRzIEVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIuCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBCX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIEFVWF9DT01QQQorLy8KKy8vIFNlbGVjdHMgdGhlIGV2ZW50IHNvdXJjZSBsZXZlbCB0aGF0IHNldHMgRVZUT01DVUZMQUdTLkFVWF9DT01QQS4KKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIExvdyBsZXZlbAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIEhpZ2ggbGV2ZWwKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQVVYX0NPTVBBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BVVhfQ09NUEFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FVWF9DT01QQV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gQU9OX1dVX0VWCisvLworLy8gU2VsZWN0cyB0aGUgZXZlbnQgc291cmNlIGxldmVsIHRoYXQgc2V0cyBFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBFTlVNczoKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBMb3cgbGV2ZWwKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBIaWdoIGxldmVsCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQU9OX1dVX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BT05fV1VfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVUE9MX0FPTl9XVV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VQT0xfQU9OX1dVX0VWX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVVBPTF9BT05fV1VfRVZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fRVZUT01DVUZMQUdTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gQURDX0lSUQorLy8KKy8vIEFEQ19JUlEgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19JUlFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0lSUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfSVJRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBPQlNNVVgwCisvLworLy8gT0JTTVVYMCBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfT0JTTVVYMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19PQlNNVVgwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX09CU01VWDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIEFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLworLy8gQURDX0ZJRk9fQUxNT1NUX0ZVTEwgZXZlbnQgZmxhZy4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19GSUZPX0FMTU9TVF9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0ZJRk9fQUxNT1NUX0ZVTExfTSAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfRklGT19BTE1PU1RfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBBRENfRE9ORQorLy8KKy8vIEFEQ19ET05FIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BRENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FEQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQURDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gU01QSF9BVVRPVEFLRV9ET05FCisvLworLy8gU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19TTVBIX0FVVE9UQUtFX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1NNUEhfQVVUT1RBS0VfRE9ORV9NICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfU01QSF9BVVRPVEFLRV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVElNRVIxX0VWCisvLworLy8gVElNRVIxX0VWIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19USU1FUjFfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1RJTUVSMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVElNRVIxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVElNRVIwX0VWCisvLworLy8gVElNRVIwX0VWIGV2ZW50IGZsYWcuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19USU1FUjBfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1RJTUVSMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVElNRVIwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gVERDX0RPTkUKKy8vCisvLyBURENfRE9ORSBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfVERDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19URENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX1REQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEFVWF9DT01QQgorLy8KKy8vIEFVWF9DT01QQiBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQVVYX0NPTVBCX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BVVhfQ09NUEJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FVWF9DT01QQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEFVWF9DT01QQQorLy8KKy8vIEFVWF9DT01QQSBldmVudCBmbGFnLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQVVYX0NPTVBBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BVVhfQ09NUEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FVWF9DT01QQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFPTl9XVV9FVgorLy8KKy8vIEFPTl9XVV9FViBldmVudCBmbGFnLgorLy8KKy8vIFRoaXMgaXMgYW4gT1Igb2YgdGhlIEFPTl9SVENfQ0gyLCBBT05fUFJPR19XVSBhbmQgQU9OX1NXIGV2ZW50cy4gVGhlc2UgZXZlbnQKKy8vIHNvdXJjZXMgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSBjbGVhcmluZyBBT05fV1VfRVYuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU19BT05fV1VfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTX0FPTl9XVV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NfQU9OX1dVX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfRVZDVExfT19DT01CRVZUT01DVU1BU0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEwXSBBRENfSVJRCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuQURDX0lSUSBjb250cmlidXRpb24gdG8gdGhlCisvLyBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19JUlFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0lSUV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfSVJRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBPQlNNVVgwCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuT0JTTVVYMCBjb250cmlidXRpb24gdG8gdGhlCisvLyBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX09CU01VWDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfT0JTTVVYMF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19PQlNNVVgwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBBRENfRklGT19BTE1PU1RfRlVMTAorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMIGNvbnRyaWJ1dGlvbgorLy8gdG8gdGhlIEFVWF9DT01CIGV2ZW50LgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0ZJRk9fQUxNT1NUX0ZVTExfQklUTiAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfRklGT19BTE1PU1RfRlVMTF9NICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19GSUZPX0FMTU9TVF9GVUxMX1MgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEFEQ19ET05FCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuQURDX0RPTkUgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BRENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FEQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQURDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gU01QSF9BVVRPVEFLRV9ET05FCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuU01QSF9BVVRPVEFLRV9ET05FIGNvbnRyaWJ1dGlvbiB0bworLy8gdGhlIEFVWF9DT01CIGV2ZW50LgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfU01QSF9BVVRPVEFLRV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19TTVBIX0FVVE9UQUtFX0RPTkVfTSAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1NNUEhfQVVUT1RBS0VfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRJTUVSMV9FVgorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLlRJTUVSMV9FViBjb250cmlidXRpb24gdG8gdGhlCisvLyBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1RJTUVSMV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVElNRVIxX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19USU1FUjFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUSU1FUjBfRVYKKy8vCisvLyBJbmNsdWRlcyAoMSkgb3IgZXhjbHVkZXMgKDApIEVWVE9NQ1VGTEFHUy5USU1FUjBfRVYgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19USU1FUjBfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1RJTUVSMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVElNRVIwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gVERDX0RPTkUKKy8vCisvLyBJbmNsdWRlcyAoMSkgb3IgZXhjbHVkZXMgKDApIEVWVE9NQ1VGTEFHUy5URENfRE9ORSBjb250cmlidXRpb24gdG8gdGhlCisvLyBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX1REQ19ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfVERDX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19URENfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBVVhfQ09NUEIKKy8vCisvLyBJbmNsdWRlcyAoMSkgb3IgZXhjbHVkZXMgKDApIEVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIgY29udHJpYnV0aW9uIHRvIHRoZQorLy8gQVVYX0NPTUIgZXZlbnQuCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BVVhfQ09NUEJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FVWF9DT01QQl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQVVYX0NPTVBCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQVVYX0NPTVBBCisvLworLy8gSW5jbHVkZXMgKDEpIG9yIGV4Y2x1ZGVzICgwKSBFVlRPTUNVRkxBR1MuQVVYX0NPTVBBIGNvbnRyaWJ1dGlvbiB0byB0aGUKKy8vIEFVWF9DT01CIGV2ZW50LgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQVVYX0NPTVBBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BVVhfQ09NUEFfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FVWF9DT01QQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFPTl9XVV9FVgorLy8KKy8vIEluY2x1ZGVzICgxKSBvciBleGNsdWRlcyAoMCkgRVZUT01DVUZMQUdTLkFPTl9XVV9FViBjb250cmlidXRpb24gdG8gdGhlCisvLyBBVVhfQ09NQiBldmVudC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfQ09NQkVWVE9NQ1VNQVNLX0FPTl9XVV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9DT01CRVZUT01DVU1BU0tfQU9OX1dVX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0NPTUJFVlRPTUNVTUFTS19BT05fV1VfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX1ZFQ0ZMQUdTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gVkVDMworLy8KKy8vIFRoZSB2ZWN0b3IgZmxhZyBpcyBzZXQgaWYgdGhlIGVkZ2Ugc2VsZWN0ZWQgVkVDQ0ZHMS5WRUMzX1BPTCBvY2N1cnMgb24gdGhlCisvLyBldmVudCBzZWxlY3RlZCBpbiBWRUNDRkcxLlZFQzNfRVYuCisvLworLy8gVGhlIGZsYWcgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMCB0byB0aGlzIGJpdCwgb3IgKHByZWZlcmFibHkpIGEgMSB0bworLy8gVkVDRkxBR1NDTFIuVkVDMy4KKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBWRUMyCisvLworLy8gVGhlIHZlY3RvciBmbGFnIGlzIHNldCBpZiB0aGUgZWRnZSBzZWxlY3RlZCBWRUNDRkcxLlZFQzJfUE9MIG9jY3VycyBvbiB0aGUKKy8vIGV2ZW50IHNlbGVjdGVkIGluIFZFQ0NGRzEuVkVDMl9FVi4KKy8vCisvLyBUaGUgZmxhZyBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAwIHRvIHRoaXMgYml0LCBvciAocHJlZmVyYWJseSkgYSAxIHRvCisvLyBWRUNGTEFHU0NMUi5WRUMyLgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFZFQzEKKy8vCisvLyBUaGUgdmVjdG9yIGZsYWcgaXMgc2V0IGlmIHRoZSBlZGdlIHNlbGVjdGVkIFZFQ0NGRzAuVkVDMV9QT0wgb2NjdXJzIG9uIHRoZQorLy8gZXZlbnQgc2VsZWN0ZWQgaW4gVkVDQ0ZHMC5WRUMxX0VWLgorLy8KKy8vIFRoZSBmbGFnIGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDAgdG8gdGhpcyBiaXQsIG9yIChwcmVmZXJhYmx5KSBhIDEgdG8KKy8vIFZFQ0ZMQUdTQ0xSLlZFQzEuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVkVDMAorLy8KKy8vIFRoZSB2ZWN0b3IgZmxhZyBpcyBzZXQgaWYgdGhlIGVkZ2Ugc2VsZWN0ZWQgVkVDQ0ZHMC5WRUMwX1BPTCBvY2N1cnMgb24gdGhlCisvLyBldmVudCBzZWxlY3RlZCBpbiBWRUNDRkcwLlZFQzBfRVYuCisvLworLy8gVGhlIGZsYWcgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMCB0byB0aGlzIGJpdCwgb3IgKHByZWZlcmFibHkpIGEgMSB0bworLy8gVkVDRkxBR1NDTFIuVkVDMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NfVkVDMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU19WRUMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTX1ZFQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX0VWVE9NQ1VGTEFHU0NMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTBdIEFEQ19JUlEKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9NQ1VGTEFHUy5BRENfSVJRLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19JUlFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0lSUV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfSVJRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBPQlNNVVgwCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuT0JTTVVYMC4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9PQlNNVVgwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX09CU01VWDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfT0JTTVVYMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTC4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfRklGT19BTE1PU1RfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19GSUZPX0FMTU9TVF9GVUxMX00gICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0ZJRk9fQUxNT1NUX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gQURDX0RPTkUKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9NQ1VGTEFHUy5BRENfRE9ORS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BRENfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FEQ19ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQURDX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gU01QSF9BVVRPVEFLRV9ET05FCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBbRVZUT01DVUZMQUdTLlNNUEhfQVVUT1RBS0VfRE9ORS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9TTVBIX0FVVE9UQUtFX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1NNUEhfQVVUT1RBS0VfRE9ORV9NICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfU01QSF9BVVRPVEFLRV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVElNRVIxX0VWCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuVElNRVIxX0VWLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1RJTUVSMV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVElNRVIxX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9USU1FUjFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUSU1FUjBfRVYKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9NQ1VGTEFHUy5USU1FUjBfRVYuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFREQ19ET05FCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuVERDX0RPTkUuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfVERDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9URENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX1REQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEFVWF9DT01QQgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT01DVUZMQUdTLkFVWF9DT01QQi4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BVVhfQ09NUEJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FVWF9DT01QQl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQVVYX0NPTVBCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQVVYX0NPTVBBCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPTUNVRkxBR1MuQVVYX0NPTVBBLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBT05fV1VfRVYKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9NQ1VGTEFHUy5BT05fV1VfRVYuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPTUNVRkxBR1NDTFJfQU9OX1dVX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9NQ1VGTEFHU0NMUl9BT05fV1VfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT01DVUZMQUdTQ0xSX0FPTl9XVV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX0VWQ1RMX09fRVZUT0FPTkZMQUdTQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gVElNRVIxX0VWCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPQU9ORkxBR1MuVElNRVIxX0VWLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1RJTUVSMV9FVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVElNRVIxX0VWX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9USU1FUjFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBUSU1FUjBfRVYKKy8vCisvLyBXcml0aW5nIDEgY2xlYXJzIEVWVE9BT05GTEFHUy5USU1FUjBfRVYuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVElNRVIwX0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9USU1FUjBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1RJTUVSMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFREQ19ET05FCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPQU9ORkxBR1MuVERDX0RPTkUuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfVERDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9URENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1REQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIEFEQ19ET05FCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPQU9ORkxBR1MuQURDX0RPTkUuCisvLworLy8gUmVhZCB2YWx1ZSBpcyAwLgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQURDX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BRENfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FEQ19ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFVWF9DT01QQgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLkFVWF9DT01QQi4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BVVhfQ09NUEJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FVWF9DT01QQl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQVVYX0NPTVBCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQVVYX0NPTVBBCisvLworLy8gV3JpdGluZyAxIGNsZWFycyBFVlRPQU9ORkxBR1MuQVVYX0NPTVBBLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX0FVWF9DT01QQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfQVVYX0NPTVBBX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9BVVhfQ09NUEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBTV0VWMgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLlNXRVYyLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1NXRVYyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTV0VWMQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLlNXRVYxLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1NXRVYxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBTV0VWMAorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgRVZUT0FPTkZMQUdTLlNXRVYwLgorLy8KKy8vIFJlYWQgdmFsdWUgaXMgMC4KKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfRVZDVExfRVZUT0FPTkZMQUdTQ0xSX1NXRVYwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9FVkNUTF9FVlRPQU9ORkxBR1NDTFJfU1dFVjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX0VWVE9BT05GTEFHU0NMUl9TV0VWMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9FVkNUTF9PX1ZFQ0ZMQUdTQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gVkVDMworLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgVkVDRkxBR1MuVkVDMy4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gVkVDMgorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgVkVDRkxBR1MuVkVDMi4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gVkVDMQorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgVkVDRkxBR1MuVkVDMS4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVkVDMAorLy8KKy8vIFdyaXRpbmcgMSBjbGVhcnMgVkVDRkxBR1MuVkVDMC4KKy8vCisvLyBSZWFkIHZhbHVlIGlzIDAuCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX0VWQ1RMX1ZFQ0ZMQUdTQ0xSX1ZFQzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfRVZDVExfVkVDRkxBR1NDTFJfVkVDMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9FVkNUTF9WRUNGTEFHU0NMUl9WRUMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BVVhfRVZDVExfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3NjZS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3NjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTc5MDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfc2NlLmgKQEAgLTAsMCArMSwzODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfc2NlX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0FVWF9TQ0VfSF9fCisjZGVmaW5lIF9fSFdfQVVYX1NDRV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfU0NFIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQVVYX1NDRV9PX0ZFVENIU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fQ1BVU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19XVVNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQVVYX1NDRV9PX1JFRzFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fUkVHM18yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19SRUc1XzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgQVVYX1NDRV9PX1JFRzdfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBBVVhfU0NFX09fTE9PUEFERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEFVWF9TQ0VfT19MT09QQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gRk9SQ0VfRVZfTE9XCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfRVZfTE9XX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9FVl9MT1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX0VWX0xPV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gRk9SQ0VfRVZfSElHSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX0VWX0hJR0hfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfRVZfSElHSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9FVl9ISUdIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzExOjhdIFJFU0VUX1ZFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1JFU0VUX1ZFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX1NDRV9DVExfUkVTRVRfVkVDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBBVVhfU0NFX0NUTF9SRVNFVF9WRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzZdIERCR19GUkVFWkVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9EQkdfRlJFRVpFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0RCR19GUkVFWkVfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1NDRV9DVExfREJHX0ZSRUVaRV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfU0NFX0NUTF9EQkdfRlJFRVpFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIEZPUkNFX1dVX0xPVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX1dVX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfV1VfTE9XX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9XVV9MT1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX1dVX0xPV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRk9SQ0VfV1VfSElHSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX1dVX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX1NDRV9DVExfRk9SQ0VfV1VfSElHSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfU0NFX0NUTF9GT1JDRV9XVV9ISUdIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0ZPUkNFX1dVX0hJR0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gUkVTVEFSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1JFU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1NDRV9DVExfUkVTVEFSVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfU0NFX0NUTF9SRVNUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1JFU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU0lOR0xFX1NURVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9TSU5HTEVfU1RFUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1NJTkdMRV9TVEVQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX1NDRV9DVExfU0lOR0xFX1NURVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfU0NFX0NUTF9TSU5HTEVfU1RFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNVU1BFTkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NUTF9TVVNQRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX1NVU1BFTkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1NDRV9DVExfU1VTUEVORF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfU0NFX0NUTF9TVVNQRU5EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NDRV9DVExfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU0NFX0NUTF9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TQ0VfQ1RMX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fRkVUQ0hTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gT1BDT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9GRVRDSFNUQVRfT1BDT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX0ZFVENIU1RBVF9PUENPREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFVWF9TQ0VfRkVUQ0hTVEFUX09QQ09ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gUEMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0ZFVENIU1RBVF9QQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfRkVUQ0hTVEFUX1BDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1NDRV9GRVRDSFNUQVRfUENfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9TQ0VfT19DUFVTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMV0gQlVTX0VSUk9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX0JVU19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfQlVTX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9CVVNfRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX0JVU19FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBTTEVFUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1NMRUVQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfU0xFRVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9TTEVFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gV0VWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1dFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfV0VWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9XRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1dFVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBTRUxGX1NUT1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfU0VMRl9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9TRUxGX1NUT1BfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1NFTEZfU1RPUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfU0VMRl9TVE9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzNdIFZfRkxBRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9WX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1ZfRkxBR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfVl9GTEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9WX0ZMQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQ19GTEFHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX0NfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfQ19GTEFHX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9DX0ZMQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX0NfRkxBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBOX0ZMQUcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfTl9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9OX0ZMQUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX05fRkxBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfTl9GTEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFpfRkxBRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9aX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NDRV9DUFVTVEFUX1pfRkxBR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU0NFX0NQVVNUQVRfWl9GTEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TQ0VfQ1BVU1RBVF9aX0ZMQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fV1VTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxNzoxNl0gRVhDX1ZFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX0VYQ19WRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX1NDRV9XVVNUQVRfRVhDX1ZFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9FWENfVkVDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIFdVX1NJR05BTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX1dVX1NJR05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX1NDRV9XVVNUQVRfV1VfU0lHTkFMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9XVV9TSUdOQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX1dVX1NJR05BTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gRVZfU0lHTkFMUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfV1VTVEFUX0VWX1NJR05BTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1NDRV9XVVNUQVRfRVZfU0lHTkFMU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBVVhfU0NFX1dVU1RBVF9FVl9TSUdOQUxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX1JFRzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFJFRzEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1JFRzFfMF9SRUcxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfUkVHMV8wX1JFRzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVVYX1NDRV9SRUcxXzBfUkVHMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBSRUcwCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9SRUcxXzBfUkVHMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX1JFRzFfMF9SRUcwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9TQ0VfUkVHMV8wX1JFRzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fUkVHM18yCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gUkVHMworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfUkVHM18yX1JFRzNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9SRUczXzJfUkVHM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBBVVhfU0NFX1JFRzNfMl9SRUczX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFJFRzIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1JFRzNfMl9SRUcyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfUkVHM18yX1JFRzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1NDRV9SRUczXzJfUkVHMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9TQ0VfT19SRUc1XzQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBSRUc1CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9SRUc1XzRfUkVHNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX1JFRzVfNF9SRUc1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFVWF9TQ0VfUkVHNV80X1JFRzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gUkVHNAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEFVWF9TQ0VfUkVHNV80X1JFRzRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1NDRV9SRUc1XzRfUkVHNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfU0NFX1JFRzVfNF9SRUc0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1NDRV9PX1JFRzdfNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFJFRzcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX1JFRzdfNl9SRUc3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfUkVHN182X1JFRzdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVVYX1NDRV9SRUc3XzZfUkVHN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBSRUc2CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9SRUc3XzZfUkVHNl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX1JFRzdfNl9SRUc2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9TQ0VfUkVHN182X1JFRzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU0NFX09fTE9PUEFERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBTVE9QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9MT09QQUREUl9TVE9QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfU0NFX0xPT1BBRERSX1NUT1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFVWF9TQ0VfTE9PUEFERFJfU1RPUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gU1RBUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBBVVhfU0NFX0xPT1BBRERSX1NUQVJUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9TQ0VfTE9PUEFERFJfU1RBUlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1NDRV9MT09QQUREUl9TVEFSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9TQ0VfT19MT09QQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gSVRFUl9MRUZUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgQVVYX1NDRV9MT09QQ05UX0lURVJfTEVGVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfU0NFX0xPT1BDTlRfSVRFUl9MRUZUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFVWF9TQ0VfTE9PUENOVF9JVEVSX0xFRlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BVVhfU0NFX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF9zbXBoLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfc21waC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmRiZTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfc21waC5oCkBAIC0wLDAgKzEsMjQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfYXV4X3NtcGhfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX1NNUEhfSF9fCisjZGVmaW5lIF9fSFdfQVVYX1NNUEhfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQVVYX1NNUEggY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU2VtYXBob3JlIDAKKyNkZWZpbmUgQVVYX1NNUEhfT19TTVBIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBTZW1hcGhvcmUgMQorI2RlZmluZSBBVVhfU01QSF9PX1NNUEgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFNlbWFwaG9yZSAyCisjZGVmaW5lIEFVWF9TTVBIX09fU01QSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gU2VtYXBob3JlIDMKKyNkZWZpbmUgQVVYX1NNUEhfT19TTVBIMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBTZW1hcGhvcmUgNAorI2RlZmluZSBBVVhfU01QSF9PX1NNUEg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIFNlbWFwaG9yZSA1CisjZGVmaW5lIEFVWF9TTVBIX09fU01QSDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gU2VtYXBob3JlIDYKKyNkZWZpbmUgQVVYX1NNUEhfT19TTVBINiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBTZW1hcGhvcmUgNworI2RlZmluZSBBVVhfU01QSF9PX1NNUEg3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIFN0aWNreSBSZXF1ZXN0IEZvciBTaW5nbGUgU2VtYXBob3JlCisjZGVmaW5lIEFVWF9TTVBIX09fQVVUT1RBS0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEgwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgwX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDBfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBIMF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgwX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEgxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgxX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDFfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBIMV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgxX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEgyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgyX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDJfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBIMl9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgyX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEgzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgzX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDNfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBIM19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEgzX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEg0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg0X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBINF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg0X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEg1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg1X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDVfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBINV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg1X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEg2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg2X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDZfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBINl9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg2X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX1NNUEg3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIHdhcyBhbHJlYWR5IHRha2VuCisvLyAxOiBTZW1hcGhvcmUgd2FzIGF2YWlsYWJsZSBhbmQgaGVuY2UgdGFrZW4gYnkgdGhpcyByZWFkIGFjY2VzcworLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg3X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1NNUEhfU01QSDdfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfU01QSF9TTVBIN19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9TTVBIX1NNUEg3X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfU01QSF9PX0FVVE9UQUtFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gU01QSF9JRAorLy8KKy8vIFJlcXVlc3RpbmcgYSBjZXJ0YWluIHNlbWFwaG9yZSBpcyBkb25lIGJ5IHdyaXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIHNlbWFwaG9yZSBJRCwgMHgwLTB4NywgdG8gU01QSF9JRC4gVGhlIHJlcXVlc3QgaXMgc3RpY2t5IGFuZCBvbmNlIHRoZQorLy8gc2VtYXBob3JlIGJlY29tZXMgYXZhaWxhYmxlIGl0IHdpbGwgYmUgdGFrZW4uIEF0IHRoZSBzYW1lIHRpbWUsCisvLyBTTVBIX0FVVE9UQUtFX0RPTkUgZXZlbnQgaXMgYXNzZXJ0ZWQuIFRoaXMgZXZlbnQgaXMgZGVhc3NlcnRlZCB3aGVuIFNXCisvLyByZWxlYXNlcyB0aGUgc2VtYXBob3JlIG9yIGEgbmV3IElEIGlzIHdyaXR0ZW4gdG8gU01QSF9JRC4KKy8vCisvLyBOb3RlOiBTVyBtdXN0IHdhaXQgdW50aWwgU01QSF9BVVRPVEFLRV9ET05FIGV2ZW50IGlzIHRyaWdnZXJlZCBiZWZvcmUKKy8vIHdyaXRpbmcgYSBuZXcgSUQgdG8gU01QSF9JRCAuIEZhaWxpbmcgdG8gZG8gc28gbWlnaHQgbGVhZCB0byBwZXJtYW5lbnRseQorLy8gbG9zdCBzZW1hcGhvcmVzIGFzIHRoZSBvd25lcnMgbWF5IGJlIHVua25vd24KKyNkZWZpbmUgQVVYX1NNUEhfQVVUT1RBS0VfU01QSF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfU01QSF9BVVRPVEFLRV9TTVBIX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFVWF9TTVBIX0FVVE9UQUtFX1NNUEhfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19BVVhfU01QSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfdGRjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfdGRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3ZWVhNAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF90ZGMuaApAQCAtMCwwICsxLDYyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2F1eF90ZGNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX1REQ19IX18KKyNkZWZpbmUgX19IV19BVVhfVERDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFVWF9UREMgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29udHJvbAorI2RlZmluZSBBVVhfVERDX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFN0YXR1cworI2RlZmluZSBBVVhfVERDX09fU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFJlc3VsdAorI2RlZmluZSBBVVhfVERDX09fUkVTVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFNhdHVyYXRpb24gQ29uZmlndXJhdGlvbgorI2RlZmluZSBBVVhfVERDX09fU0FUQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIFRyaWdnZXIgU291cmNlCisjZGVmaW5lIEFVWF9URENfT19UUklHU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gVHJpZ2dlciBDb3VudGVyCisjZGVmaW5lIEFVWF9URENfT19UUklHQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gVHJpZ2dlciBDb3VudGVyIExvYWQKKyNkZWZpbmUgQVVYX1REQ19PX1RSSUdDTlRMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBUcmlnZ2VyIENvdW50ZXIgQ29uZmlndXJhdGlvbgorI2RlZmluZSBBVVhfVERDX09fVFJJR0NOVENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIFByZXNjYWxlciBDb250cm9sCisjZGVmaW5lIEFVWF9URENfT19QUkVDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gUHJlc2NhbGVyIENvdW50ZXIKKyNkZWZpbmUgQVVYX1REQ19PX1BSRUNOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9URENfT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBDTUQKKy8vCisvLyBUREMgY29tbWFuZCBzdHJvYmVzCisvLyBFTlVNczoKKy8vIEFCT1JUICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZm9yY2VzIHRoZSBUREMgYmFjayB0byBJRExFIHN0YXRlCisvLyBSVU4gICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIG1ha2VzIHRoZSBUREMgRlNNIHN0YXJ0ICBhbmQgc3RvcAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50aW5nIGFzeW5jaHJvbm91c2x5LiBUREMgbWVhc3VyZW1lbnQgbWF5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgaW1tZWRpYXRlbHkgaWYgc3RhcnQgaXMgaGlnaCBhbmQgaGVuY2UgaXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgbm90IGdpdmUgcHJlY2lzZSBlZGdlIHRvIGVkZ2UgbWVhc3VyZW1lbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVjb21tZW5kZWQgd2hlbiBzdGFydCBwdWxzZSBpcyBndWFyYW50ZWVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXJyaXZlIGF0IGxlYXN0IDcgY2xvY2sgcGVyaW9kcyBhZnRlciB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kCisvLyBSVU5fU1lOQ19TVEFSVCAgICAgICAgICAgVGhpcyBjb21tYW5kIG1ha2VzIHRoZSBUREMgRlNNIHN0YXJ0IGNvdW50aW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25vdXNseSB0byB0aGUgZmlyc3QgcmlzaW5nIGVkZ2UgdGhhdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd3MgYSByZXF1aXJlZCBmYWxsaW5nIGVkZ2Ugb2YgdGhlIHN0YXJ0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuIFRoaXMgZ3VhcmFudGVlcyBhbiBlZGdlIHRyaWdnZXJlZCBzdGFydAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyByZWNvbW1lbmRlZCBmb3IgZnJlcXVlbmN5IG1lYXN1cmVtZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBIGZhbGxpbmcgZWRnZSBvZiB0aGUgc3RhcnQgZXZlbnQgbWF5IGJlIG1pc3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBjb21tYW5kIGlzIGlzc3VlZCBjbG9zZSB0byBpdCBpbiB0aW1lLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aGUgVERDIHdpbGwgY2F0Y2ggbGF0ZXIgZmFsbGluZyBlZGdlcyBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBndWFyYW50ZWUgdGhhdCBhIG1lYXN1cmVtZW50IHN0YXJ0cworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9ub3VzbHkgdG8gdGhlIHJpc2luZyBlZGdlIG9mIHRoZSBzdGFydAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50CisvLyBDTFJfUkVTVUxUICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNsZWFycyBTVEFULlNBVCwgU1RBVC5ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuIE5vdGU6IFRoaXMgaXMgbm90IG5lZWRlZCBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXJlcXVpc2l0ZSBmb3IgYSBtZWFzdXJlbWVudC4gUmVsaWFibGUgY2xlYXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbmx5IGd1YXJhbnRlZWQgZnJvbSBJRExFIHN0YXRlCisjZGVmaW5lIEFVWF9URENfQ1RMX0NNRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX1REQ19DVExfQ01EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBBVVhfVERDX0NUTF9DTURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9URENfQ1RMX0NNRF9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX1REQ19DVExfQ01EX1JVTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVERDX0NUTF9DTURfUlVOX1NZTkNfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9URENfQ1RMX0NNRF9DTFJfUkVTVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIFNBVAorLy8KKy8vIFNhdHVyYXRpb24gZmxhZyBmb3IgVERDIG1lYXN1cmVtZW50CisvLworLy8gMDogQ29udmVyc2lvbiBoYXMgbm90IHNhdHVyYXRlZAorLy8gMTogQ29udmVyc2lvbiBzdG9wcGVkIGR1ZSB0byBzYXR1cmF0aW9uCisvLworLy8gVGhpcyBmaWVsZCBpcyBjbGVhcmVkIHdoZW4gc3RhcnRpbmcgbmV3IG1lYXN1cmVtZW50IG9yIHNldHRpbmcgQ1RMLkNNRCB0bworLy8gQ0xSX1JFU1VMVAorI2RlZmluZSBBVVhfVERDX1NUQVRfU0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9URENfU1RBVF9TQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfVERDX1NUQVRfU0FUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIERPTkUKKy8vCisvLyBNZWFzdXJlbWVudCBjb21wbGV0ZSBmbGFnCisvLworLy8gMDogTWVhc3VyZW1lbnQgbm90IHlldCBjb21wbGV0ZQorLy8gMTogTWVhc3VyZW1lbnQgY29tcGxldGUKKy8vCisvLyBUaGlzIGZpZWxkIGlzIGNsZWFyZWQgd2hlbiBzdGFydGluZyBuZXcgbWVhc3VyZW1lbnQgb3Igc2V0dGluZyBDVEwuQ01EIHRvCisvLyBDTFJfUkVTVUxUCisjZGVmaW5lIEFVWF9URENfU1RBVF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1REQ19TVEFUX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfVERDX1NUQVRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9URENfU1RBVF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gU1RBVEUKKy8vCisvLyBUREMgaW50ZXJuYWwgc3RhdGUgbWFjaGluZSBzdGF0dXMKKy8vIEVOVU1zOgorLy8gRk9SQ0VfU1RPUCAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX0ZPUkNFU1RPUAorLy8gU1RBUlRfRkFMTCAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1dBSVRfU1RBUlRGQUxMCisvLyBXQUlUX0NMUl9DTlRfRE9ORSAgICAgICAgQ3VycmVudCBzdGF0ZSBpcyBURENfU1RBVEVfV0FJVF9DTFJDTlRfRE9ORQorLy8gUE9SICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX1BPUgorLy8gR0VUX1JFU1VMVCAgICAgICAgICAgICAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX0dFVFJFU1VMVFMKKy8vIFdBSVRfU1RPUF9DTlREV04gICAgICAgICBDdXJyZW50IHN0YXRlIGlzIFREQ19TVEFURV9XQUlUX1NUT1BDTlRET1dOCisvLyBXQUlUX1NUT1AgICAgICAgICAgICAgICAgQ3VycmVudCBzdGF0ZSBpcyBURENfU1RBVEVfV0FJVF9TVE9QCisvLyBDTFJfQ05UICAgICAgICAgICAgICAgICAgQ3VycmVudCBzdGF0ZSBpcyBURENfU1RBVEVfQ0xSQ05UCisvLyBJRExFICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCBzdGF0ZSBpcyBURENfU1RBVEVfSURMRQorLy8gV0FJVF9TVEFSVF9TVE9QX0NOVF9FTiAgIEN1cnJlbnQgc3RhdGUgaXMgVERDX1NUQVRFX1dBSVRfU1RBUlRTVE9QQ05URU4KKy8vIFdBSVRfU1RBUlQgICAgICAgICAgICAgICBDdXJyZW50IHN0YXRlIGlzIFREQ19TVEFURV9XQUlUX1NUQVJUCisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9GT1JDRV9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX1NUQVJUX0ZBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfV0FJVF9DTFJfQ05UX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9QT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX0dFVF9SRVNVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfV0FJVF9TVE9QX0NOVERXTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9XQUlUX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX0NMUl9DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfVERDX1NUQVRfU1RBVEVfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9URENfU1RBVF9TVEFURV9XQUlUX1NUQVJUX1NUT1BfQ05UX0VOICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1REQ19TVEFUX1NUQVRFX1dBSVRfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9URENfT19SRVNVTFQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsyNDowXSBWQUxVRQorLy8KKy8vIFJlc3VsdCBvZiB0aGUgVERDIGNvbnZlcnNpb24uIFRoZSByZXN1bHQgaXMgaW4gY2xvY2sgZWRnZXMgb2YgdGhlIGNsb2NrCisvLyBzZWxlY3RlZCBpbiBERElfMF9PU0M6Q1RMMC5BQ0xLX1REQ19TUkNfU0VMLiBCb3RoIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlcworLy8gYXJlIGNvdW50ZWQuCisvLworLy8gV2hlbiBzYXR1cmF0aW5nIHRoZSByZXN1bHQgaXMgc2xpZ2h0bHkgaGlnaGVyIHRoYW4gdGhlIHNhdHVyYXRpb24gbGltaXQsCisvLyBzaW5jZSBpdCB0YWtlcyBhIG5vbi16ZXJvIHRpbWUgdG8gc3RvcCB0aGUgbWVhc3VyZW1lbnQuIFRoZSBoaWdoZXN0CisvLyBzYXR1cmF0aW9uIGxpbWl0IGlzIDI0IGJpdHMgKHNlZSBTQVRDRkcuTElNSVQpIHNvIG1heGltdW0gdmFsdWUgb2YgVkFMVUUgaXMKKy8vIGhlbmNlIHNsaWdodGx5IGFib3ZlIDJeMjQuCisjZGVmaW5lIEFVWF9URENfUkVTVUxUX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQVVYX1REQ19SRVNVTFRfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUZGRkZGRgorI2RlZmluZSBBVVhfVERDX1JFU1VMVF9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1NBVENGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIExJTUlUCisvLworLy8gU2VsZWN0IHdoZW4gdGhlIFREQyB0aW1lcyBvdXQuIFZhbHVlcyBub3QgZW51bWVyYXRlZCBhcmUgbm90IHN1cHBvcnRlZAorLy8gRU5VTXM6CisvLyBSMjQgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAyNCA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMjRdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjIzICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMjMgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzIzXSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIyMiAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDIyIDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsyMl0gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMjEgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAyMSA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMjFdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjIwICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMjAgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzIwXSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIxOSAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDE5IDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsxOV0gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMTggICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAxOCA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMThdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjE3ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMTcgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzE3XSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIxNiAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDE2IDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsxNl0gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMTUgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAxNSA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMTVdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorLy8gUjE0ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCBiaXQgMTQgOiBUREMgc2F0dXJhdGVzIGFuZCBzdG9wcyB3aGVuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxULlZBTFVFWzE0XSBpcyBzZXQuIFRoZSBmbGFnIFNUQVQuU0FUIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhlIHRpbWVyIHNhdHVyYXRlcy4KKy8vIFIxMyAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgYml0IDEzIDogVERDIHNhdHVyYXRlcyBhbmQgc3RvcHMgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVC5WQUxVRVsxM10gaXMgc2V0LiBUaGUgZmxhZyBTVEFULlNBVCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB3aGVuIHRoZSB0aW1lciBzYXR1cmF0ZXMuCisvLyBSMTIgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IGJpdCAxMiA6IFREQyBzYXR1cmF0ZXMgYW5kIHN0b3BzIHdoZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFQuVkFMVUVbMTJdIGlzIHNldC4gVGhlIGZsYWcgU1RBVC5TQVQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiB0aGUgdGltZXIgc2F0dXJhdGVzLgorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFVWF9URENfU0FUQ0ZHX0xJTUlUX1IxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQVVYX1REQ19TQVRDRkdfTElNSVRfUjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfVERDX1NBVENGR19MSU1JVF9SMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1RSSUdTUkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEzXSBTVE9QX1BPTAorLy8KKy8vIFBvbGFyaXR5IG9mIHN0b3Agc2lnbmFsLiAgIE5vdGUhIE11c3Qgbm90IGJlIGNoYW5nZWQgaWYgU1RBVC5TVEFURSBpcyBub3QKKy8vIElETEUKKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIFREQyBzdG9wcyB3aGVuIGxvdyBsZXZlbCBpcyBkZXRlY3RlZAorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIFREQyBzdG9wcyB3aGVuIGhpZ2ggbGV2ZWwgaXMgZGV0ZWN0ZWQKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9QT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1BPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfUE9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9QT0xfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1BPTF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTI6OF0gU1RPUF9TUkMKKy8vCisvLyBTZWxlY3RzIHRoZSBhc3luY2hyb25vdXMgc3RvcCBzaWduYWwgIE5vdGUhIE11c3Qgbm90IGJlIGNoYW5nZWQgaWYKKy8vIFNUQVQuU1RBVEUgaXMgbm90IElETEUKKy8vIEVOVU1zOgorLy8gVERDX1BSRSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgVERDX1BSRQorLy8gTUNVX0VWICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgTUNVX0VWCisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgU2VsZWN0cyBBQ0xLX1JFRgorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNAorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMworLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMgorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMAorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU85CisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzgKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNworLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU82CisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzUKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNAorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8zCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzIKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8wCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgU2VsZWN0cyBBT05fUFJPR19XVQorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1NXCisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgxCisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgwCisvLyBBRENfRklGT19BTE1PU1RfRlVMTCAgICAgU2VsZWN0cyBBRENfRklGT19BTE1PU1RfRlVMTAorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0RPTkUKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTZWxlY3RzIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIxX0VWCisvLyBUSU1FUjBfRVYgICAgICAgICAgICAgICAgU2VsZWN0cyBUSU1FUjBfRVYKKy8vIElTUkNfUkVTRVQgICAgICAgICAgICAgICBTZWxlY3RzIElTUkNfUkVTRVQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYX0NPTVBBCisvLyBBT05fUlRDX0NIMiAgICAgICAgICAgICAgU2VsZWN0cyBBT05fUlRDX0NIMgorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfVERDX1BSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19NQ1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FDTEtfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfT0JTTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19JU1JDX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUT1BfU1JDX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RPUF9TUkNfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVE9QX1NSQ19BT05fUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNV0gU1RBUlRfUE9MCisvLworLy8gUG9sYXJpdHkgb2Ygc3RhcnQgc2lnbmFsLiAgIE5vdGUhIE11c3Qgbm90IGJlIGNoYW5nZWQgaWYgU1RBVC5TVEFURSBpcyBub3QKKy8vIElETEUKKy8vIEVOVU1zOgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIFREQyBzdGFydHMgd2hlbiBsb3cgbGV2ZWwgaXMgZGV0ZWN0ZWQKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBUREMgc3RhcnRzIHdoZW4gaGlnaCBsZXZlbCBpcyBkZXRlY3RlZAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9QT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1BPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfUE9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9QT0xfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1BPTF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNDowXSBTVEFSVF9TUkMKKy8vCisvLyBTZWxlY3RzIHRoZSBhc3luY2hyb25vdXMgc3RhcnQgc2lnbmFsIE5vdGUhIE11c3Qgbm90IGJlIGNoYW5nZWQgaWYKKy8vIFNUQVQuU1RBVEUgaXMgbm90IElETEUKKy8vIEVOVU1zOgorLy8gVERDX1BSRSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgVERDX1BSRQorLy8gTUNVX0VWICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgTUNVX0VWCisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgU2VsZWN0cyBBQ0xLX1JFRgorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNAorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMworLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMgorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMAorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU85CisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzgKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNworLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU82CisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzUKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNAorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8zCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzIKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8wCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgU2VsZWN0cyBBT05fUFJPR19XVQorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1NXCisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgxCisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgwCisvLyBBRENfRklGT19BTE1PU1RfRlVMTCAgICAgU2VsZWN0cyBBRENfRklGT19BTE1PU1RfRlVMTAorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0RPTkUKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTZWxlY3RzIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8gVElNRVIxX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIxX0VWCisvLyBUSU1FUjBfRVYgICAgICAgICAgICAgICAgU2VsZWN0cyBUSU1FUjBfRVYKKy8vIElTUkNfUkVTRVQgICAgICAgICAgICAgICBTZWxlY3RzIElTUkNfUkVTRVQKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYX0NPTVBBCisvLyBBT05fUlRDX0NIMiAgICAgICAgICAgICAgU2VsZWN0cyBBT05fUlRDX0NIMgorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX1REQ19QUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfTUNVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfSVNSQ19SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX1REQ19UUklHU1JDX1NUQVJUX1NSQ19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVERDX1RSSUdTUkNfU1RBUlRfU1JDX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9URENfVFJJR1NSQ19TVEFSVF9TUkNfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fVFJJR0NOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENOVAorLy8KKy8vIFJlbWFpbmluZyBudW1iZXIgb2Ygc3RvcCBldmVudHMgdGhhdCB3aWxsIGJlIGlnbm9yZWQuIFdyaXRpbmcgdG8gdGhpcworLy8gcmVnaXN0ZXIgdXBkYXRlcyB0aGUgIHZhbHVlLiBUaGUgQ05UIHdpbGwgYmUgbG9hZGVkIHdpdGggdGhlIHZhbHVlIG9mCisvLyBUUklHQ05UTE9BRC5DTlQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IG1lYXN1cmVtZW50LgorLy8KKy8vIFdoZW4gdGhlIHN0b3AgY291bnRlciBpcyBlbmFibGVkIHRoZSBmaXJzdCBDTlQtMSBzdG9wIGV2ZW50cyBpcyBpZ25vcmVkCisvLyBhZnRlciB3aGljaCB0aGUgVERDIHdpbGwgc3RvcCBtZWFzdXJlbWVudCBvbiBldmVudCBudW1iZXIgQ05UCisvLworLy8gTm90ZSEgTXVzdCBub3QgYmUgY2hhbmdlZCBpZiBTVEFULlNUQVRFIGlzIG5vdCBJRExFCisjZGVmaW5lIEFVWF9URENfVFJJR0NOVF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UX0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfVERDX1RSSUdDTlRfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1REQ19PX1RSSUdDTlRMT0FECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQ05UCisvLworLy8gU2VsZWN0cyB0aGUgbnVtYmVyIG9mIHN0b3AgZXZlbnRzIHRoYXQgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBUREMuIFRoaXMgY2FuCisvLyBiZSB1c2VkIHRvIG1lYXN1cmUgbXVsdGlwbGUgcGVyaW9kcyBvZiBhIGNsb2NrIHNpZ25hbC4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8KKy8vIHRoaXMgZmllbGQgaXMgbG9hZGVkIGludG8gdGhlIHN0b3AgY291bnRlciBhdCB0aGUgc3RhcnQgb2YgZWFjaCBtZWFzdXJlbWVudC4KKy8vCisvLyBOb3RlISBCb3RoIHZhbHVlcyAwIGFuZCAxIHdpbGwgbWFrZSB0aGUgVERDIHN0b3Agb24gdGhlIGZpcnN0IGV2ZW50IGFmdGVyCisvLyB0aGUgc3RhcnQgZXZlbnQKKy8vCisvLyBOb3RlISBNdXN0IG5vdCBiZSBjaGFuZ2VkIGlmIFNUQVQuU1RBVEUgaXMgbm90IElETEUKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UTE9BRF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfVERDX1RSSUdDTlRMT0FEX0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9URENfVFJJR0NOVExPQURfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fVFJJR0NOVENGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gU3RvcCBjb3VudGVyIGVuYWJsZQorLy8KKy8vIDA6IFN0b3AgY291bnRlciBpcyBkaXNhYmxlZAorLy8gMTogU3RvcCBjb3VudGVyIGlzIGVuYWJsZWQKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UQ0ZHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVERDX1RSSUdDTlRDRkdfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9URENfVFJJR0NOVENGR19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1REQ19UUklHQ05UQ0ZHX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9URENfT19QUkVDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBSRVNFVF9OCisvLworLy8gUHJlc2NhbGVyIHJlc2V0IGNvbnRyb2wKKy8vCisvLyAwOiBQcmVzY2FsZXIgaXMgaGVsZCBpbiByZXNldAorLy8gMTogUHJlc2NhbGVyIGlzIG5vdCBoZWxkIGluIHJlc2V0CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JFU0VUX04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfUkVTRVRfTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SRVNFVF9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JFU0VUX05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gUkFUSU8KKy8vCisvLyBQcmVzY2FsZXIgcmF0aW8uIFRoaXMgY29udHJvbHMgaG93IG9mdGVuIGFuIGV2ZW50IGlzIGdlbmVyYXRlZCBvbiB0aGUKKy8vIFREQ19QUkUgbGluZS4gQWZ0ZXIgdGhlIHByZXNjYWxlciBpcyByZXNldCB0aGUgZXZlbnQgb3V0cHV0IFREQ19QUkUgaXMgMC4KKy8vIEVOVU1zOgorLy8gRElWNjQgICAgICAgICAgICAgICAgICAgIFByZXNjYWxlciBkaXZpZGVzIGJ5IDY0LiBBIHJpc2luZyBlZGdlIG9uIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBpcyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IDY0IHJpc2luZyBlZGdlcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBpbnB1dCAodGhlIG91dHB1dCB0b2dnbGVzIG9uIGV2ZXJ5IDMydGgKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByaXNpbmcgZWRnZSBvZiB0aGUgaW5wdXQpLiAuCisvLyBESVYxNiAgICAgICAgICAgICAgICAgICAgUHJlc2NhbGVyIGRpdmlkZXMgYnkgMTYuIEEgcmlzaW5nIGVkZ2Ugb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGlzIGdlbmVyYXRlZCBmb3IgZXZlcnkgMTYgcmlzaW5nIGVkZ2VzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGlucHV0ICh0aGUgb3V0cHV0IHRvZ2dsZXMgb24gZXZlcnkgOHRoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmlzaW5nIGVkZ2Ugb2YgdGhlIGlucHV0KS4KKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfUkFUSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SQVRJT19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JBVElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfUkFUSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9SQVRJT19ESVY2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1JBVElPX0RJVjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzQ6MF0gU1JDCisvLworLy8gU2VsZWN0cyBldmVudCBmb3IgcHJlc2NhbGVyIHRvIHVzZSBhcyBpbnB1dAorLy8gTm90ZSEgT25seSBjaGFuZ2Ugd2hlbiBwcmVzY2FsZXIgaXMgaW4gcmVzZXQKKy8vIEVOVU1zOgorLy8gQURDX0lSUQorLy8gTUNVX0VWCisvLyBBQ0xLX1JFRgorLy8gQVVYSU8xNQorLy8gQVVYSU8xNAorLy8gQVVYSU8xMworLy8gQVVYSU8xMgorLy8gQVVYSU8xMQorLy8gQVVYSU8xMAorLy8gQVVYSU85CisvLyBBVVhJTzgKKy8vIEFVWElPNworLy8gQVVYSU82CisvLyBBVVhJTzUKKy8vIEFVWElPNAorLy8gQVVYSU8zCisvLyBBVVhJTzIKKy8vIEFVWElPMQorLy8gQVVYSU8wCisvLyBBT05fUFJPR19XVQorLy8gQU9OX1NXCisvLyBPQlNNVVgxCisvLyBPQlNNVVgwCisvLyBBRENfRklGT19BTE1PU1RfRlVMTAorLy8gQURDX0RPTkUKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8gVElNRVIxX0VWCisvLyBUSU1FUjBfRVYKKy8vIElTUkNfUkVTRVQKKy8vIEFVWF9DT01QQgorLy8gQVVYX0NPTVBBCisvLyBBT05fUlRDX0NIMgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19NQ1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FDTEtfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfT0JTTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19JU1JDX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVVYX1REQ19QUkVDVExfU1JDX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVERDX1BSRUNUTF9TUkNfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9URENfUFJFQ1RMX1NSQ19BT05fUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVERDX09fUFJFQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQ05UCisvLworLy8gV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgbGF0Y2ggdGhlIGNvbnRlbnRzIG9mIHRoZSAxNiBiaXQgcHJlc2NhbGVyCisvLyBjb3VudGVyIChUaGUgdmFsdWUgd3JpdHRlbiBpcyBkb24ndCBjYXJlKS4KKy8vCisvLyBSZWFkaW5nIHdpbGwgcmV0dXJuIHRoZSBsYXRjaGVkIHZhbHVlLgorI2RlZmluZSBBVVhfVERDX1BSRUNOVF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFVWF9URENfUFJFQ05UX0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQVVYX1REQ19QUkVDTlRfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FVWF9URENfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3RpbWVyLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQwZmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfYXV4X3RpbWVyLmgKQEAgLTAsMCArMSwzODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19hdXhfdGltZXJfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX1RJTUVSX0hfXworI2RlZmluZSBfX0hXX0FVWF9USU1FUl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBBVVhfVElNRVIgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVGltZXIgMCBDb25maWd1cmF0aW9uCisjZGVmaW5lIEFVWF9USU1FUl9PX1QwQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gVGltZXIgMSBDb25maWd1cmF0aW9uCisjZGVmaW5lIEFVWF9USU1FUl9PX1QxQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gVGltZXIgMCBDb250cm9sCisjZGVmaW5lIEFVWF9USU1FUl9PX1QwQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gVGltZXIgMCBUYXJnZXQKKyNkZWZpbmUgQVVYX1RJTUVSX09fVDBUQVJHRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBUaW1lciAxIFRhcmdldAorI2RlZmluZSBBVVhfVElNRVJfT19UMVRBUkdFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIFRpbWVyIDEgQ29udHJvbAorI2RlZmluZSBBVVhfVElNRVJfT19UMUNUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1RJTUVSX09fVDBDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEzXSBUSUNLX1NSQ19QT0wKKy8vCisvLyBTb3VyY2UgY291bnQgcG9sYXJpdHkgZm9yIHRpbWVyIDAKKy8vIEVOVU1zOgorLy8gRkFMTCAgICAgICAgICAgICAgICAgICAgIENvdW50IG9uIGZhbGxpbmcgZWRnZXMgb2YgVElDS19TUkMKKy8vIFJJU0UgICAgICAgICAgICAgICAgICAgICBDb3VudCBvbiByaXNpbmcgZWRnZXMgb2YgVElDS19TUkMKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19QT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1BPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUE9MX0ZBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19QT0xfUklTRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICBbMTI6OF0gVElDS19TUkMKKy8vCisvLyBTZWxlY3RlZCB0aWNrIHNvdXJjZSBmb3IgdGltZXIgMAorLy8gRU5VTXM6CisvLyBBRENfSVJRICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBRENfSVJRCisvLyBNQ1VfRVZFTlQgICAgICAgICAgICAgICAgU2VsZWN0cyBNQ1VfRVYKKy8vIEFDTEtfUkVGICAgICAgICAgICAgICAgICBTZWxlY3RzIEFDTEtfUkVGCisvLyBBVVhJTzE1ICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzE1CisvLyBBVVhJTzE0ICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzE0CisvLyBBVVhJTzEzICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEzCisvLyBBVVhJTzEyICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEyCisvLyBBVVhJTzExICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzExCisvLyBBVVhJTzEwICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzEwCisvLyBBVVhJTzkgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzkKKy8vIEFVWElPOCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPOAorLy8gQVVYSU83ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU83CisvLyBBVVhJTzYgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzYKKy8vIEFVWElPNSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNQorLy8gQVVYSU80ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU80CisvLyBBVVhJTzMgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzMKKy8vIEFVWElPMiAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMgorLy8gQVVYSU8xICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xCisvLyBBVVhJTzAgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzAKKy8vIEFPTl9QUk9HX1dVICAgICAgICAgICAgICBTZWxlY3RzIEFPTl9QUk9HX1dVCisvLyBBT05fU1cgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBT05fU1cKKy8vIE9CU01VWDEgICAgICAgICAgICAgICAgICBTZWxlY3RzIE9CU01VWDEKKy8vIE9CU01VWDAgICAgICAgICAgICAgICAgICBTZWxlY3RzIE9CU01VWDAKKy8vIFJUQ180S0haICAgICAgICAgICAgICAgICBTZWxlY3RzIFJUQ180S0haCisvLyBBRENfRE9ORSAgICAgICAgICAgICAgICAgU2VsZWN0cyBBRENfRE9ORQorLy8gU01QSF9BVVRPVEFLRV9ET05FICAgICAgIFNlbGVjdHMgU01QSF9BVVRPVEFLRV9ET05FCisvLyBUSU1FUjFfRVYgICAgICAgICAgICAgICAgU2VsZWN0cyBUSU1FUjFfRVYKKy8vIFREQ19ET05FICAgICAgICAgICAgICAgICBTZWxlY3RzIFREQ19ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWF9DT01QQQorLy8gUlRDX0NIMl9FViAgICAgICAgICAgICAgIFNlbGVjdHMgUlRDX0NIMl9FVgorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19NQ1VfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FDTEtfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUQwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFCMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUEwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxOTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTcwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE1MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTEwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQVVYSU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BT05fUFJPR19XVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FPTl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEIwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfT0JTTVVYMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1JUQ180S0haICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19USUNLX1NSQ19BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1RJQ0tfU1JDX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfVElDS19TUkNfUlRDX0NIMl9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs3OjRdIFBSRQorLy8KKy8vIFByZXNjYWxlciBkaXZpc2lvbiByYXRpbyBpcyAyXlBSRQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfUFJFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19QUkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1BSRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsxXSBNT0RFCisvLworLy8gVGltZXIgMCBtb2RlCisvLyBFTlVNczoKKy8vIFRJQ0sgICAgICAgICAgICAgICAgICAgICBUaW1lciAwIGNvdW50ZXIgaW5jcmVtZW50cyBvbmx5IG9uIGVkZ2VzIG9mIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IHNldCBieSBUSUNLX1NSQy4gVGhlIGV2ZW50cyBhcmUgZGl2aWRlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBQUkUgc2V0dGluZy4KKy8vIENMSyAgICAgICAgICAgICAgICAgICAgICBUaW1lciAwIGluY3JlbWVudHMgb24gZXZlcnkgMl5QUkUgZWRnZXMgb2YgQVVYCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfTU9ERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfTU9ERV9USUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19NT0RFX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gUkVMT0FECisvLworLy8gVGltZXIgMCByZWxvYWQgc2V0dGluZworLy8gRU5VTXM6CisvLyBDT05UICAgICAgICAgICAgICAgICAgICAgVGltZXIgaXMgYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgd2hlbiB0YXJnZXQgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVkCisvLyBNQU4gICAgICAgICAgICAgICAgICAgICAgVGltZXIgaGFzIHRvIGJlIHJlc3RhcnRlZCBtYW51YWxseQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfUkVMT0FEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19SRUxPQURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVElNRVJfVDBDRkdfUkVMT0FEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENGR19SRUxPQURfQ09OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ0ZHX1JFTE9BRF9NQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9USU1FUl9PX1QxQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxM10gVElDS19TUkNfUE9MCisvLworLy8gU291cmNlIGNvdW50IHBvbGFyaXR5IGZvciB0aW1lciAxCisvLyBFTlVNczoKKy8vIEZBTEwgICAgICAgICAgICAgICAgICAgICBDb3VudCBvbiBmYWxsaW5nIGVkZ2VzIG9mIFRJQ0tfU1JDCisvLyBSSVNFICAgICAgICAgICAgICAgICAgICAgQ291bnQgb24gcmlzaW5nIGVkZ2VzIG9mIFRJQ0tfU1JDCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1BPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUE9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19QT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1BPTF9GQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfUE9MX1JJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEyOjhdIFRJQ0tfU1JDCisvLworLy8gU2VsZWN0ZWQgdGljayBzb3VyY2UgZm9yIHRpbWVyIDEKKy8vIEVOVU1zOgorLy8gQURDX0lSUSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0lSUQorLy8gTUNVX0VWRU5UICAgICAgICAgICAgICAgIFNlbGVjdHMgTUNVX0VWCisvLyBBQ0xLX1JFRiAgICAgICAgICAgICAgICAgU2VsZWN0cyBBQ0xLX1JFRgorLy8gQVVYSU8xNSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNQorLy8gQVVYSU8xNCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xNAorLy8gQVVYSU8xMyAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMworLy8gQVVYSU8xMiAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMgorLy8gQVVYSU8xMSAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMQorLy8gQVVYSU8xMCAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8xMAorLy8gQVVYSU85ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU85CisvLyBBVVhJTzggICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzgKKy8vIEFVWElPNyAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNworLy8gQVVYSU82ICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU82CisvLyBBVVhJTzUgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzUKKy8vIEFVWElPNCAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPNAorLy8gQVVYSU8zICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8zCisvLyBBVVhJTzIgICAgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhJTzIKKy8vIEFVWElPMSAgICAgICAgICAgICAgICAgICBTZWxlY3RzIEFVWElPMQorLy8gQVVYSU8wICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYSU8wCisvLyBBT05fUFJPR19XVSAgICAgICAgICAgICAgU2VsZWN0cyBBT05fUFJPR19XVQorLy8gQU9OX1NXICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgQU9OX1NXCisvLyBPQlNNVVgxICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgxCisvLyBPQlNNVVgwICAgICAgICAgICAgICAgICAgU2VsZWN0cyBPQlNNVVgwCisvLyBSVENfNEtIWiAgICAgICAgICAgICAgICAgU2VsZWN0cyBSVENfNEtIWgorLy8gQURDX0RPTkUgICAgICAgICAgICAgICAgIFNlbGVjdHMgQURDX0RPTkUKKy8vIFNNUEhfQVVUT1RBS0VfRE9ORSAgICAgICBTZWxlY3RzIFNNUEhfQVVUT1RBS0VfRE9ORQorLy8gVElNRVIwX0VWICAgICAgICAgICAgICAgIFNlbGVjdHMgVElNRVIwX0VWCisvLyBURENfRE9ORSAgICAgICAgICAgICAgICAgU2VsZWN0cyBURENfRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIFNlbGVjdHMgQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgU2VsZWN0cyBBVVhfQ09NUEEKKy8vIFJUQ19DSDJfRVYgICAgICAgICAgICAgICBTZWxlY3RzIFJUQ19DSDJfRVYKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfTUNVX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BQ0xLX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFEMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUMwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFBMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTkwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE3MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTYwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxNTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTMwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYSU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FVWElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BT05fU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX09CU01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19SVENfNEtIWiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfVElDS19TUkNfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19USUNLX1NSQ19BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1RJQ0tfU1JDX1JUQ19DSDJfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNzo0XSBQUkUKKy8vCisvLyBQcmVzY2FsZXIgZGl2aXNpb24gcmF0aW8gaXMgMl5QUkUKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1BSRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfUFJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19QUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMV0gTU9ERQorLy8KKy8vIFRpbWVyIDEgbW9kZQorLy8gRU5VTXM6CisvLyBUSUNLICAgICAgICAgICAgICAgICAgICAgVGltZXIgMSBjb3VudGVyIGluY3JlbWVudHMgb25seSBvbiBlZGdlcyBvZiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBzZXQgYnkgVElDS19TUkMuIFRoZSBldmVudHMgYXJlIGRpdmlkZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgUFJFIHNldHRpbmcuCisvLyBDTEsgICAgICAgICAgICAgICAgICAgICAgVGltZXIgMSBpbmNyZW1lbnRzIG9uIGV2ZXJ5IDJeUFJFIGVkZ2VzIG9mIEFVWAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX01PREVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX01PREVfVElDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfTU9ERV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFJFTE9BRAorLy8KKy8vIFRpbWVyIDEgcmVsb2FkIHNldHRpbmcKKy8vIEVOVU1zOgorLy8gQ09OVCAgICAgICAgICAgICAgICAgICAgIFRpbWVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIHdoZW4gdGFyZ2V0IGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZAorLy8gTUFOICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIGhhcyB0byBiZSByZXN0YXJ0ZWQgbWFudWFsbHkKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1JFTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfUkVMT0FEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19SRUxPQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ0ZHX1JFTE9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVElNRVJfVDFDRkdfUkVMT0FEX0NPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMUNGR19SRUxPQURfTUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVElNRVJfT19UMENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gVGltZXIgMCBydW4gZW5hYmxlIGNvbnRyb2wuIFRoZSBjb3VudGVyIHJlc3RhcnRzIHdoZW4gZW5hYmxpbmcgdGhlIHRpbWVyLiBJZgorLy8gVDBDRkcuUkVMT0FEID0gMCwgdGhlIHRpbWVyIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiByZWFjaGluZworLy8gVDBUQVJHRVQuVkFMVUUKKy8vCisvLyAwOiBEaXNhYmxlIHRpbWVyIDAKKy8vIDE6IEVuYWJsZSB0aW1lciAwCisjZGVmaW5lIEFVWF9USU1FUl9UMENUTF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QwQ1RMX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfVElNRVJfVDBDVExfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9USU1FUl9UMENUTF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfVElNRVJfT19UMFRBUkdFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFZBTFVFCisvLworLy8gVGltZXIgMCBjb3VudHMgZnJvbSAwIHRvIFZBTFVFLiBUaGVuIGdpdmVzIGFuIGV2ZW50IGFuZCByZXN0YXJ0cyBpZgorLy8gY29uZmlndXJlZCB0byBkbyB0byBzbyBpbiB0aGUgVDBDRkcuUkVMT0FEIHNldHRpbmcuIElmIFZBTFVFIGlzIGNoYW5nZWQKKy8vIHdoaWxlIHRpbWVyIDAgaXMgcnVubmluZyBzbyB0aGF0IHRoZSBjb3VudCBiZWNvbWVzIGhpZ2hlciB0aGFuIFZBTFVFIHRpbWVyIDAKKy8vIHdpbGwgYWxzbyByZXN0YXJ0IGlmIGNvbmZpZ3VyZWQgdG8gZG8gc28uCisvLworLy8gSWYgVDBDRkcuTU9ERT0wLG5vIHByZXNjYWxlciBpcyB1c2VkLCBhbmQgVkFMVUUgZXF1YWxzIDEsIHRoZSBUSU1FUjBfRVYKKy8vIGV2ZW50IGxpbmUgd2lsbCBiZSBhbHdheXMgc2V0CisjZGVmaW5lIEFVWF9USU1FUl9UMFRBUkdFVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVVYX1RJTUVSX1QwVEFSR0VUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBVVhfVElNRVJfVDBUQVJHRVRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1RJTUVSX09fVDFUQVJHRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBWQUxVRQorLy8KKy8vIFRpbWVyIDEgY291bnRzIGZyb20gMCB0byBWQUxVRS4gVGhlbiBnaXZlcyBhbiBldmVudCBhbmQgcmVzdGFydHMgaWYKKy8vIGNvbmZpZ3VyZWQgdG8gZG8gdG8gc28gaW4gdGhlIFQxQ0ZHLlJFTE9BRCBzZXR0aW5nLiBJZiBWQUxVRSBpcyBjaGFuZ2VkCisvLyB3aGlsZSB0aW1lciAxIGlzIHJ1bm5pbmcgc28gdGhhdCB0aGUgY291bnQgYmVjb21lcyBoaWdoZXIgdGhhbiBWQUxVRSB0aW1lciAxCisvLyB3aWxsIGFsc28gcmVzdGFydCBpZiBjb25maWd1cmVkIHRvIGRvIHNvLgorLy8KKy8vIElmIFQxQ0ZHLk1PREU9MCxubyBwcmVzY2FsZXIgaXMgdXNlZCwgYW5kIFZBTFVFIGVxdWFscyAxLCB0aGUgVElNRVIxX0VWCisvLyBldmVudCBsaW5lIHdpbGwgYmUgYWx3YXlzIHNldAorI2RlZmluZSBBVVhfVElNRVJfVDFUQVJHRVRfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9USU1FUl9UMVRBUkdFVF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX1RJTUVSX1QxVEFSR0VUX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9USU1FUl9PX1QxQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBUaW1lciAxIHJ1biBlbmFibGUgY29udHJvbC4gVGhlIGNvdW50ZXIgcmVzdGFydHMgd2hlbiBlbmFibGluZyB0aGUgdGltZXIuIElmCisvLyBUMUNGRy5SRUxPQUQgPSAwLCB0aGUgdGltZXIgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIHJlYWNoaW5nCisvLyBUMVRBUkdFVC5WQUxVRQorLy8KKy8vIDA6IERpc2FibGUgdGltZXIgMQorLy8gMTogRW5hYmxlIHRpbWVyIDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ1RMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfVElNRVJfVDFDVExfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9USU1FUl9UMUNUTF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1RJTUVSX1QxQ1RMX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0FVWF9USU1FUl9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfd3VjLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19hdXhfd3VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlMjMyMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2F1eF93dWMuaApAQCAtMCwwICsxLDcwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2F1eF93dWNfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQVVYX1dVQ19IX18KKyNkZWZpbmUgX19IV19BVVhfV1VDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEFVWF9XVUMgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTW9kdWxlIENsb2NrIEVuYWJsZQorI2RlZmluZSBBVVhfV1VDX09fTU9EQ0xLRU4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFBvd2VyIE9mZiBSZXF1ZXN0CisjZGVmaW5lIEFVWF9XVUNfT19QV1JPRkZSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gUG93ZXIgRG93biBSZXF1ZXN0CisjZGVmaW5lIEFVWF9XVUNfT19QV1JEV05SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gUG93ZXIgRG93biBBY2tub3dsZWRnbWVudAorI2RlZmluZSBBVVhfV1VDX09fUFdSRFdOQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIExvdyBGcmVxdWVuY3kgQ2xvY2sgUmVxdWVzdAorI2RlZmluZSBBVVhfV1VDX09fQ0xLTEZSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIExvdyBGcmVxdWVuY3kgQ2xvY2sgQWNrbm93bGVkZ21lbnQKKyNkZWZpbmUgQVVYX1dVQ19PX0NMS0xGQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBXYWtlLXVwIEV2ZW50IEZsYWdzCisjZGVmaW5lIEFVWF9XVUNfT19XVUVWRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gV2FrZS11cCBFdmVudCBDbGVhcgorI2RlZmluZSBBVVhfV1VDX09fV1VFVkNMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIEFEQyBDbG9jayBDb250cm9sCisjZGVmaW5lIEFVWF9XVUNfT19BRENDTEtDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gVERDIENsb2NrIENvbnRyb2wKKyNkZWZpbmUgQVVYX1dVQ19PX1REQ0NMS0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBSZWZlcmVuY2UgQ2xvY2sgQ29udHJvbAorI2RlZmluZSBBVVhfV1VDX09fUkVGQ0xLQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIFJlYWwgVGltZSBDb3VudGVyIFN1YiBTZWNvbmQgSW5jcmVtZW50IDAKKyNkZWZpbmUgQVVYX1dVQ19PX1JUQ1NVQlNFQ0lOQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBSZWFsIFRpbWUgQ291bnRlciBTdWIgU2Vjb25kIEluY3JlbWVudCAxCisjZGVmaW5lIEFVWF9XVUNfT19SVENTVUJTRUNJTkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8gUmVhbCBUaW1lIENvdW50ZXIgU3ViIFNlY29uZCBJbmNyZW1lbnQgQ29udHJvbAorI2RlZmluZSBBVVhfV1VDX09fUlRDU1VCU0VDSU5DQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vIE1DVSBCdXMgQ29udHJvbAorI2RlZmluZSBBVVhfV1VDX09fTUNVQlVTQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vIE1DVSBCdXMgU3RhdHVzCisjZGVmaW5lIEFVWF9XVUNfT19NQ1VCVVNTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEMKKworLy8gQU9OIERvbWFpbiBDb250cm9sIFN0YXR1cworI2RlZmluZSBBVVhfV1VDX09fQU9OQ1RMU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisKKy8vIEFVWCBJbnB1dCBPdXRwdXQgTGF0Y2gKKyNkZWZpbmUgQVVYX1dVQ19PX0FVWElPTEFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorCisvLyBNb2R1bGUgQ2xvY2sgRW5hYmxlIDEKKyNkZWZpbmUgQVVYX1dVQ19PX01PRENMS0VOMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19NT0RDTEtFTjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBBVVhfQURJNAorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX0FESTQuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFVWF9BREk0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgQVVYX0FESTQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0FESTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9BREk0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0FESTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfQURJNF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9BREk0X0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gQVVYX0RESTBfT1NDCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfRERJMF9PU0MuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFVWF9EREkwX09TQworLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0RESTBfT1NDCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0RESTBfT1NDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FVWF9EREkwX09TQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQVVYX0RESTBfT1NDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BVVhfRERJMF9PU0NfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFREQworLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX1REQ0lGLgorLy8KKy8vIE5vdGUgdGhhdCB0aGUgVERDIGNvdW50ZXIgYW5kIHJlZmVyZW5jZSBjbG9jayBzb3VyY2VzIG11c3QgYmUgcmVxdWVzdGVkCisvLyBzZXBhcmF0ZWx5IHVzaW5nIFREQ0NMS0NUTCBhbmQgUkVGQ0xLQ1RMLCByZXNwZWN0aXZlbHkuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIFREQworLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIFREQworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9UREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1REQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVERDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9URENfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1REQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVERDX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBBTkFJRgorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX0FOQUlGLgorLy8KKy8vIE5vdGUgdGhhdCB0aGUgQURDIGludGVybmFsIGNsb2NrIG11c3QgYmUgcmVxdWVzdGVkIHNlcGFyYXRlbHkgdXNpbmcKKy8vIEFEQ0NMS0NUTC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQU5BSUYKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBBTkFJRgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BTkFJRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FOQUlGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQU5BSUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BTkFJRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FOQUlGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQU5BSUZfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBUSU1FUgorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX1RJTUVSLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBUSU1FUgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIFRJTUVSCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVElNRVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9USU1FUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1RJTUVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfVElNRVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9USU1FUl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIEFJT0RJTzEKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9BSU9ESU8xLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBBSU9ESU8xCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIENQVSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgQUlPRElPMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBBSU9ESU8wCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfQUlPRElPMC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQUlPRElPMAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSBDUFUgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFJT0RJTzAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfQUlPRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9BSU9ESU8wX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX0FJT0RJTzBfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gU01QSAorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX1NNUEguCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIFNNUEgKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gQ1BVIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBTTVBICisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1NNUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfU01QSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9TTVBIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4wX1NNUEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjBfU01QSF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMF9TTVBIX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1BXUk9GRlJFUQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJFUQorLy8KKy8vIFBvd2VyIG9mZiByZXF1ZXN0CisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBSZXF1ZXN0IHRvIHBvd2VyIGRvd24gQVVYLiBPbmNlIHNldCwgdGhpcyBiaXQgc2hhbGwgbm90IGJlIGNsZWFyZWQuIFRoZQorLy8gYml0IHdpbGwgYmUgcmVzZXQgYWdhaW4gd2hlbiBBVVggaXMgcG93ZXJlZCB1cCBhZ2Fpbi4KKy8vCisvLyBUaGUgcmVxdWVzdCB3aWxsIG9ubHkgaGFwcGVuIGlmIEFPTkNUTFNUQVQuQVVYX0ZPUkNFX09OID0gMCBhbmQKKy8vIE1DVUJVU1NUQVQuRElTQ09OTkVDVEVEPTEuCisjZGVmaW5lIEFVWF9XVUNfUFdST0ZGUkVRX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19QV1JPRkZSRVFfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX1BXUk9GRlJFUV9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUFdST0ZGUkVRX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fUFdSRFdOUkVRCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUkVRCisvLworLy8gUG93ZXIgZG93biByZXF1ZXN0CisvLworLy8gMDogUmVxdWVzdCBmb3Igc3lzdGVtIHRvIGJlIGluIGFjdGl2ZSBtb2RlCisvLyAxOiBSZXF1ZXN0IGZvciBzeXN0ZW0gdG8gYmUgaW4gcG93ZXIgZG93biBtb2RlCisvLworLy8gV2hlbiBSRVEgaXMgMSBvbmUgc2hhbGwgYXNzdW1lIHRoYXQgdGhlIHN5c3RlbSBpcyBpbiBwb3dlciBkb3duLCBhbmQgdGhhdAorLy8gY3VycmVudCBzdXBwbHkgaXMgbGltaXRlZC4gV2hlbiBzZXR0aW5nIFJFUSA9IDAsIG9uZSBzaGFsbCBhc3N1bWUgdGhhdCB0aGUKKy8vIHN5c3RlbSBpcyBpbiBwb3dlciBkb3duIHVudGlsICBQV1JEV05BQ0suQUNLID0gMAorI2RlZmluZSBBVVhfV1VDX1BXUkRXTlJFUV9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUFdSRFdOUkVRX1JFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19QV1JEV05SRVFfUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1BXUkRXTlJFUV9SRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX1BXUkRXTkFDSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEFDSworLy8KKy8vIFBvd2VyIGRvd24gYWNrbm93bGVkZ21lbnQuIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwb3dlciBkb3duIHJlcXVlc3QgZ2l2ZW4gYnkKKy8vIFBXUkRXTlJFUS5SRVEgaXMgY2FwdHVyZWQgYnkgdGhlIEFPTiBkb21haW4gb3Igbm90CisvLworLy8gMDogQVVYIGNhbiBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIGluIGFjdGl2ZSBtb2RlCisvLyAxOiBUaGUgcmVxdWVzdCBmb3IgcG93ZXIgZG93biBpcyBhY2tub3dsZWRnZWQgYW5kIHRoZSBBVVggbXVzdCBhY3QgbGlrZSB0aGUKKy8vIHN5c3RlbSBpcyBpbiBwb3dlciBkb3duIG1vZGUgYW5kIHBvd2VyIHN1cHBseSBpcyBsaW1pdGVkCisvLworLy8gVGhlIHN5c3RlbSBDUFUgY2Fubm90IHVzZSB0aGlzIGJpdCBzaW5jZSB0aGUgYnVzIGJyaWRnZSBiZXR3ZWVuIE1DVSBkb21haW4KKy8vIGFuZCBBVVggZG9tYWluIGlzIGFsd2F5cyBkaXNjb25uZWN0ZWQgd2hlbiB0aGlzIGJpdCBpcyBzZXQuIEZvciBBVVhfU0NFIHVzZQorLy8gb25seQorI2RlZmluZSBBVVhfV1VDX1BXUkRXTkFDS19BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUFdSRFdOQUNLX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19QV1JEV05BQ0tfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1BXUkRXTkFDS19BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX0NMS0xGUkVRCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gUkVRCisvLworLy8gTG93IGZyZXF1ZW5jeSByZXF1ZXN0CisvLworLy8gMDogUmVxdWVzdCBjbG9jayBmcmVxdWVuY3kgdG8gYmUgY29udHJvbGxlZCBieSBBT05fV1VDOkFVWENMSyBhbmQgdGhlIHN5c3RlbQorLy8gc3RhdGUKKy8vIDE6IFJlcXVlc3QgbG93IGZyZXF1ZW5jeSBjbG9jayBTQ0xLX0xGIGFzIHRoZSBjbG9jayBzb3VyY2UgZm9yIEFVWAorLy8KKy8vIFRoaXMgYml0IG11c3Qgbm90IGJlIG1vZGlmaWVkIHVubGVzcyBDTEtMRkFDSy5BQ0sgbWF0Y2hlcyB0aGUgY3VycmVudCB2YWx1ZQorI2RlZmluZSBBVVhfV1VDX0NMS0xGUkVRX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQ0xLTEZSRVFfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19DTEtMRlJFUV9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0NMS0xGUkVRX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX0NMS0xGQUNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQUNLCisvLworLy8gQWNrbm93bGVkZ21lbnQgb2YgQ0xLTEZSRVEuUkVRCisvLworLy8gMDogQWNrbm93bGVkZ2VtZW50IHRoYXQgY2xvY2sgZnJlcXVlbmN5IGlzIGNvbnRyb2xsZWQgYnkgQU9OX1dVQzpBVVhDTEsgYW5kCisvLyB0aGUgc3lzdGVtIHN0YXRlCisvLyAxOiBBY2tub3dsZWRnZW1lbnQgdGhhdCB0aGUgbG93IGZyZXF1ZW5jeSBjbG9jayBTQ0xLX0xGIGlzIHRoZSBjbG9jayBzb3VyY2UKKy8vIGZvciBBVVgKKyNkZWZpbmUgQVVYX1dVQ19DTEtMRkFDS19BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0NMS0xGQUNLX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfQ0xLTEZBQ0tfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19DTEtMRkFDS19BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19XVUVWRkxBR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBBT05fUlRDX0NIMgorLy8KKy8vIEluZGljYXRlcyBwZW5kaW5nIGV2ZW50IGZyb20gQU9OX1JUQ19DSDIgY29tcGFyZS4gTm90ZSB0aGF0IHRoaXMgZmxhZyB3aWxsCisvLyBiZSBzZXQgd2hlbmV2ZXIgdGhlIEFPTl9SVENfQ0gyIGV2ZW50IGhhcHBlbnMsIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdAorLy8gdGhpcyBldmVudCBpcyBhIHdha2UtdXAgZXZlbnQuIFRvIG1ha2UgdGhlIEFPTl9SVENfQ0gyIGEgd2FrZS11cCBldmVudCBmb3IKKy8vIHRoZSBBVVggZG9tYWluIGNvbmZpZ3VyZSBpdCBhcyBhIHdha2UtdXAgZXZlbnQgaW4gQU9OX0VWRU5UOkFVWFdVU0VMLldVMF9FViwKKy8vIEFPTl9FVkVOVDpBVVhXVVNFTC5XVTFfRVYgb3IgQU9OX0VWRU5UOkFVWFdVU0VMLldVMl9FVi4KKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1JUQ19DSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fUlRDX0NIMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9SVENfQ0gyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1JUQ19DSDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBBT05fU1cKKy8vCisvLyBJbmRpY2F0ZXMgcGVuZGluZyBldmVudCB0cmlnZ2VyZWQgYnkgc3lzdGVtIENQVSB3cml0aW5nIGEgMSB0bworLy8gQU9OX1dVQzpBVVhDVEwuU1dFVi4KKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fU1dfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9TV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1NXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBT05fUFJPR19XVQorLy8KKy8vIEluZGljYXRlcyBwZW5kaW5nIGV2ZW50IHRyaWdnZXJlZCBieSB0aGUgc291cmNlcyBzZWxlY3RlZCBpbgorLy8gQU9OX0VWRU5UOkFVWFdVU0VMLldVMF9FViwgQU9OX0VWRU5UOkFVWFdVU0VMLldVMV9FViBhbmQKKy8vIEFPTl9FVkVOVDpBVVhXVVNFTC5XVTJfRVYuCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9QUk9HX1dVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19XVUVWRkxBR1NfQU9OX1BST0dfV1VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX1dVRVZGTEFHU19BT05fUFJPR19XVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfV1VFVkZMQUdTX0FPTl9QUk9HX1dVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fV1VFVkNMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIEFPTl9SVENfQ0gyCisvLworLy8gU2V0IHRvIGNsZWFyIHRoZSBXVUVWRkxBR1MuQU9OX1JUQ19DSDIgd2FrZS11cCBldmVudC4gTm90ZSB0aGF0IGlmIFJUQworLy8gY2hhbm5lbCAyIGlzIGFsc28gc2V0IGFzIHNvdXJjZSBmb3IgQU9OX1BST0dfV1UgdGhpcyBmaWVsZCBjYW4gYWxzbyBjbGVhcgorLy8gV1VFVkZMQUdTLkFPTl9QUk9HX1dVCisvLworLy8gVGhpcyBiaXQgbXVzdCByZW1haW4gc2V0IHVudGlsIFdVRVZGTEFHUy5BT05fUlRDX0NIMiByZXR1cm5zIHRvIDAuCisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fUlRDX0NIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9SVENfQ0gyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1JUQ19DSDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fUlRDX0NIMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQU9OX1NXCisvLworLy8gU2V0IHRvIGNsZWFyIHRoZSBXVUVWRkxBR1MuQU9OX1NXIHdha2UtdXAgZXZlbnQuCisvLworLy8gVGhpcyBiaXQgbXVzdCByZW1haW4gc2V0IHVudGlsIFdVRVZGTEFHUy5BT05fU1cgcmV0dXJucyB0byAwLgorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fU1dfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9TV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1NXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFPTl9QUk9HX1dVCisvLworLy8gU2V0IHRvIGNsZWFyIHRoZSBXVUVWRkxBR1MuQU9OX1BST0dfV1Ugd2FrZS11cCBldmVudC4gTm90ZSBvbmx5IGlmIGFuIElPCisvLyBldmVudCBpcyBzZWxlY3RlZCBhcyB3YWtlLXVwIGV2ZW50LCBpcyBpdCBwb3NzaWJsZSB0byB1c2UgdGhpcyBmaWVsZCB0bworLy8gY2xlYXIgdGhlIHNvdXJjZS4gT3RoZXIgc291cmNlcyBjYW5ub3QgYmUgY2xlYXJlZCB1c2luZyB0aGlzIGZpZWxkLgorLy8KKy8vIFRoZSBJTyBwaW4gbmVlZHMgdG8gYmUgYXNzaWduZWQgdG8gQVVYIGluIHRoZSBJT0MgYW5kIHRoZSBpbnB1dCBlbmFibGUgZm9yCisvLyB0aGUgcGluIG5lZWRzIHRvIGJlIHNldCBpbiBBSU9ESU8wIG9yIEFJT0RJTzEgZm9yIHRoaXMgY2xlYXJpbmcgdG8gdGFrZQorLy8gZWZmZWN0LgorLy8KKy8vIFRoaXMgYml0IG11c3QgcmVtYWluIHNldCB1bnRpbCBXVUVWRkxBR1MuQU9OX1BST0dfV1UgcmV0dXJucyB0byAwLgorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1BST0dfV1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfV1VFVkNMUl9BT05fUFJPR19XVV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19XVUVWQ0xSX0FPTl9QUk9HX1dVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1dVRVZDTFJfQU9OX1BST0dfV1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX0FEQ0NMS0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIEFDSworLy8KKy8vIEFja25vd2xlZGdlcyB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIFJFUS4KKyNkZWZpbmUgQVVYX1dVQ19BRENDTEtDVExfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX0FEQ0NMS0NUTF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9XVUNfQURDQ0xLQ1RMX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19BRENDTEtDVExfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRVEKKy8vCisvLyBFbmFibGVzKDEpIG9yIGRpc2FibGVzICgwKSB0aGUgQURDIGludGVybmFsIGNsb2NrLgorLy8KKy8vIFRoaXMgYml0IG11c3Qgbm90IGJlIG1vZGlmaWVkIHVubGVzcyBBQ0sgbWF0Y2hlcyB0aGUgY3VycmVudCB2YWx1ZS4KKyNkZWZpbmUgQVVYX1dVQ19BRENDTEtDVExfUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0FEQ0NMS0NUTF9SRVFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfQURDQ0xLQ1RMX1JFUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19BRENDTEtDVExfUkVRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19URENDTEtDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBBQ0sKKy8vCisvLyBBY2tub3dsZWRnZXMgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byBSRVEuCisjZGVmaW5lIEFVWF9XVUNfVERDQ0xLQ1RMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19URENDTEtDVExfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX1REQ0NMS0NUTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfVERDQ0xLQ1RMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkVRCisvLworLy8gRW5hYmxlcygxKSBvciBkaXNhYmxlcyAoMCkgdGhlIFREQyBjb3VudGVyIGNsb2NrIHNvdXJjZS4KKy8vCisvLyBUaGlzIGJpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCB1bmxlc3MgQUNLIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUuCisjZGVmaW5lIEFVWF9XVUNfVERDQ0xLQ1RMX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19URENDTEtDVExfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX1REQ0NMS0NUTF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfVERDQ0xLQ1RMX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fUkVGQ0xLQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gQUNLCisvLworLy8gQWNrbm93bGVkZ2VzIHRoZSBsYXN0IHZhbHVlIHdyaXR0ZW4gdG8gUkVRLgorI2RlZmluZSBBVVhfV1VDX1JFRkNMS0NUTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfUkVGQ0xLQ1RMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVYX1dVQ19SRUZDTEtDVExfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX1JFRkNMS0NUTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJFUQorLy8KKy8vIEVuYWJsZXMoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBUREMgcmVmZXJlbmNlIGNsb2NrIHNvdXJjZS4KKy8vCisvLyBUaGlzIGJpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCB1bmxlc3MgQUNLIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUuCisjZGVmaW5lIEFVWF9XVUNfUkVGQ0xLQ1RMX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19SRUZDTEtDVExfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX1JFRkNMS0NUTF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfUkVGQ0xLQ1RMX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIElOQzE1XzAKKy8vCisvLyBCaXRzIDE1OjAgb2YgdGhlIFJUQyBzdWItc2Vjb25kIGluY3JlbWVudCB2YWx1ZS4KKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkMwX0lOQzE1XzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQzBfSU5DMTVfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DMF9JTkMxNV8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fUlRDU1VCU0VDSU5DMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIElOQzIzXzE2CisvLworLy8gQml0cyAyMzoxNiBvZiB0aGUgUlRDIHN1Yi1zZWNvbmQgaW5jcmVtZW50IHZhbHVlLgorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQzFfSU5DMjNfMTZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DMV9JTkMyM18xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkMxX0lOQzIzXzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19SVENTVUJTRUNJTkNDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBVUERfQUNLCisvLworLy8gQWNrbm93bGVkZ21lbnQgb2YgdGhlIFVQRF9SRVEuCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVVBEX1JFUQorLy8KKy8vIFNpZ25hbCB0aGF0IGEgbmV3IHJlYWwgdGltZSBjb3VudGVyIHN1YiBzZWNvbmQgaW5jcmVtZW50IHZhbHVlIGlzIGF2YWlsYWJsZQorLy8KKy8vIDA6IE5ldyBzdWIgc2Vjb25kIGluY3JlbWVudCBpcyBub3QgYXZhaWxhYmxlCisvLyAxOiBOZXcgc3ViIHNlY29uZCBpbmNyZW1lbnQgaXMgYXZhaWxhYmxlCisvLworLy8gVGhpcyBiaXQgbXVzdCBub3QgYmUgbW9kaWZpZWQgdW5sZXNzIFVQRF9BQ0sgbWF0Y2hlcyB0aGUgY3VycmVudCB2YWx1ZS4KKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX1JUQ1NVQlNFQ0lOQ0NUTF9VUERfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfUlRDU1VCU0VDSU5DQ1RMX1VQRF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19SVENTVUJTRUNJTkNDVExfVVBEX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19NQ1VCVVNDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBESVNDT05ORUNUX1JFUQorLy8KKy8vIFJlcXVlc3RzIHRoZSBBVVggZG9tYWluIGJ1cyB0byBiZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgTUNVIGRvbWFpbiBidXMuIFRoZQorLy8gcmVxdWVzdCBoYXMgbm8gZWZmZWN0IHdoZW4gQU9OX1dVQzpBVVhfQ1RMLkFVWF9GT1JDRV9PTiBpcyBzZXQuCisvLworLy8gVGhlIGRpc2Nvbm5lY3Rpb24gc3RhdHVzIGNhbiBiZSBtb25pdG9yZWQgdGhyb3VnaCBNQ1VCVVNTVEFULiBOb3RlIGhvd2V2ZXIKKy8vIHRoYXQgdGhpcyByZWdpc3RlciBjYW5ub3QgYmUgcmVhZCBieSB0aGUgc3lzdGVtIENQVSB3aGlsZSBkaXNjb25uZWN0ZWQuCisvLworLy8gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGJpdCBpcyBzZXQgYW5kIHJlbWFpbnMgc2V0IGFmdGVyIGluaXRpYWwKKy8vIHBvd2VyLXVwLCBhbmQgdGhhdCB0aGUgc3lzdGVtIENQVSB1c2VzIEFPTl9XVUM6QVVYX0NUTC5BVVhfRk9SQ0VfT04gdG8KKy8vIGNvbm5lY3QvZGlzY29ubmVjdCB0aGUgYnVzLgorI2RlZmluZSBBVVhfV1VDX01DVUJVU0NUTF9ESVNDT05ORUNUX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTQ1RMX0RJU0NPTk5FQ1RfUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNDVExfRElTQ09OTkVDVF9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01DVUJVU0NUTF9ESVNDT05ORUNUX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQVVYX1dVQ19PX01DVUJVU1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBESVNDT05ORUNURUQKKy8vCisvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgQVVYIGRvbWFpbiBhbmQgTUNVIGRvbWFpbiBidXNlcyBhcmUgY3VycmVudGx5CisvLyBkaXNjb25uZWN0ZWQgKDEpIG9yIGNvbm5lY3RlZCAoMCkuCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTU1RBVF9ESVNDT05ORUNURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNTVEFUX0RJU0NPTk5FQ1RFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX01DVUJVU1NUQVRfRElTQ09OTkVDVEVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTU1RBVF9ESVNDT05ORUNURURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElTQ09OTkVDVF9BQ0sKKy8vCisvLyBBY2tub3dsZWRnZXMgcmVjZXB0aW9uIG9mIHRoZSBidXMgZGlzY29ubmVjdGlvbiByZXF1ZXN0LCBieSBtYXRjaGluZyB0aGUKKy8vIHZhbHVlIG9mIE1DVUJVU0NUTC5ESVNDT05ORUNUX1JFUS4KKy8vCisvLyBOb3RlIHRoYXQgaWYgQU9OX1dVQzpBVVhDVEwuQVVYX0ZPUkNFX09OID0gMSBhIHJlY29ubmVjdCB0byB0aGUgTUNVIGRvbWFpbgorLy8gYnVzIHdpbGwgYmUgbWFkZSByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiBNQ1VCVVNDVEwuRElTQ09OTkVDVF9SRVEKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNTVEFUX0RJU0NPTk5FQ1RfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01DVUJVU1NUQVRfRElTQ09OTkVDVF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfTUNVQlVTU1RBVF9ESVNDT05ORUNUX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NQ1VCVVNTVEFUX0RJU0NPTk5FQ1RfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19BT05DVExTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gQVVYX0ZPUkNFX09OCisvLworLy8gU3RhdHVzIG9mIEFPTl9XVUM6QVVYX0NUTC5BVVhfRk9SQ0VfT04uCisjZGVmaW5lIEFVWF9XVUNfQU9OQ1RMU1RBVF9BVVhfRk9SQ0VfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19BT05DVExTVEFUX0FVWF9GT1JDRV9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX0FPTkNUTFNUQVRfQVVYX0ZPUkNFX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfQU9OQ1RMU1RBVF9BVVhfRk9SQ0VfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU0NFX1JVTl9FTgorLy8KKy8vIFN0YXR1cyBvZiBBT05fV1VDOkFVWF9DVEwuU0NFX1JVTl9FTi4KKyNkZWZpbmUgQVVYX1dVQ19BT05DVExTVEFUX1NDRV9SVU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0FPTkNUTFNUQVRfU0NFX1JVTl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfQU9OQ1RMU1RBVF9TQ0VfUlVOX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19BT05DVExTVEFUX1NDRV9SVU5fRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEFVWF9XVUNfT19BVVhJT0xBVENICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBPcGVucyAoMSkgb3IgY2xvc2VzICgwKSB0aGUgQVVYX0FJT0RJTzAvQVVYX0FJT0RJTzEgc2lnbmFsIGxhdGNoaW5nLgorLy8KKy8vIEF0IHN0YXJ0dXAsIHNldCBFTiA9IFRSQU5TUCBiZWZvcmUgY29uZmlndXJpbmcgQVVYX0FJT0RJTzAvQVVYX0FJT0RJTzEgYW5kCisvLyBzdWJzZXF1ZW50bHkgc2VsZWN0aW5nIEFVWCBtb2RlIGluIHRoZSBBT05fSU9DLgorLy8KKy8vIFdoZW4gcG93ZXJpbmcgb2ZmIHRoZSBBVVggZG9tYWluICh1c2luZyBQV1JPRkZSRVEuUkVRKSwgc2V0IEVOID0gU1RBVElDIGluCisvLyBhZHZhbmNlIHByZXNlcnZlIHRoZSBjdXJyZW50IHN0YXRlIChtb2RlIGFuZCBvdXRwdXQgdmFsdWUpIG9mIHRoZSBJL08gcGlucy4KKy8vIEVOVU1zOgorLy8gVFJBTlNQICAgICAgICAgICAgICAgICAgIExhdGNoZXMgYXJlIHRyYW5zcGFyZW50ICggb3BlbiApCisvLyBTVEFUSUMgICAgICAgICAgICAgICAgICAgTGF0Y2hlcyBhcmUgc3RhdGljICggY2xvc2VkICkKKyNkZWZpbmUgQVVYX1dVQ19BVVhJT0xBVENIX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX0FVWElPTEFUQ0hfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFVWF9XVUNfQVVYSU9MQVRDSF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19BVVhJT0xBVENIX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX0FVWElPTEFUQ0hfRU5fVFJBTlNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfQVVYSU9MQVRDSF9FTl9TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBBVVhfV1VDX09fTU9EQ0xLRU4xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbN10gQVVYX0FESTQKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9BREk0LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBBVVhfQURJNAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFVWF9BREk0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9BREk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0FESTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfQURJNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9BREk0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0FESTRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfQURJNF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIEFVWF9EREkwX09TQworLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX0RESTBfT1NDLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBBVVhfRERJMF9PU0MKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBBVVhfRERJMF9PU0MKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0RESTBfT1NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfRERJMF9PU0NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9EREkwX09TQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQVVYX0RESTBfT1NDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BVVhfRERJMF9PU0NfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FVWF9EREkwX09TQ19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gQU5BSUYKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9BTkFJRi4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQU5BSUYKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBBTkFJRgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BTkFJRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FOQUlGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQU5BSUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BTkFJRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FOQUlGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQU5BSUZfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBUSU1FUgorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX1RJTUVSLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBUSU1FUgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIFRJTUVSCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfVElNRVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9USU1FUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1RJTUVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfVElNRVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9USU1FUl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIEFJT0RJTzEKKy8vCisvLyBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgY2xvY2sgZm9yIEFVWF9BSU9ESU8xLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgcmVxdWVzdGVkIGNsb2NrIGZvciBBSU9ESU8xCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQVVYX1NDRSBoYXMgbm90IHJlcXVlc3RlZCBjbG9jayBmb3IgQUlPRElPMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBBSU9ESU8wCisvLworLy8gRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIGNsb2NrIGZvciBBVVhfQUlPRElPMC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIHJlcXVlc3RlZCBjbG9jayBmb3IgQUlPRElPMAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEFVWF9TQ0UgaGFzIG5vdCByZXF1ZXN0ZWQgY2xvY2sgZm9yIEFJT0RJTzAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfQUlPRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9BSU9ESU8wX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX0FJT0RJTzBfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gU01QSAorLy8KKy8vIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSBjbG9jayBmb3IgQVVYX1NNUEguCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyByZXF1ZXN0ZWQgY2xvY2sgZm9yIFNNUEgKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBBVVhfU0NFIGhhcyBub3QgcmVxdWVzdGVkIGNsb2NrIGZvciBTTVBICisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1NNUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfU01QSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9TTVBIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFVWF9XVUNfTU9EQ0xLRU4xX1NNUEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVYX1dVQ19NT0RDTEtFTjFfU01QSF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVVhfV1VDX01PRENMS0VOMV9TTVBIX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKworI2VuZGlmIC8vIF9fQVVYX1dVQ19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jY2ZnLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwODY2YwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NjZmcuaApAQCAtMCwwICsxLDE5MTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jY2ZnX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0NDRkdfSF9fCisjZGVmaW5lIF9fSFdfQ0NGR19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBDQ0ZHIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEV4dGVybiBMRiBjbG9jayBjb25maWd1cmF0aW9uCisjZGVmaW5lIENDRkdfT19FWFRfTEZfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQTgKKworLy8gTW9kZSBDb25maWd1cmF0aW9uIDEKKyNkZWZpbmUgQ0NGR19PX01PREVfQ09ORl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZBQworCisvLyBDQ0ZHIFNpemUgYW5kIERpc2FibGUgRmxhZ3MKKyNkZWZpbmUgQ0NGR19PX1NJWkVfQU5EX0RJU19GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZCMAorCisvLyBNb2RlIENvbmZpZ3VyYXRpb24gMAorI2RlZmluZSBDQ0ZHX09fTU9ERV9DT05GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkI0CisKKy8vIFZvbHRhZ2UgTG9hZCAwCisjZGVmaW5lIENDRkdfT19WT0xUX0xPQURfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQjgKKworLy8gVm9sdGFnZSBMb2FkIDEKKyNkZWZpbmUgQ0NGR19PX1ZPTFRfTE9BRF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZCQworCisvLyBSZWFsIFRpbWUgQ2xvY2sgT2Zmc2V0CisjZGVmaW5lIENDRkdfT19SVENfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKworLy8gRnJlcXVlbmN5IE9mZnNldAorI2RlZmluZSBDQ0ZHX09fRlJFUV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkM0CisKKy8vIElFRUUgTUFDIEFkZHJlc3MgMAorI2RlZmluZSBDQ0ZHX09fSUVFRV9NQUNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkM4CisKKy8vIElFRUUgTUFDIEFkZHJlc3MgMQorI2RlZmluZSBDQ0ZHX09fSUVFRV9NQUNfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkNDCisKKy8vIElFRUUgQkxFIEFkZHJlc3MgMAorI2RlZmluZSBDQ0ZHX09fSUVFRV9CTEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkQwCisKKy8vIElFRUUgQkxFIEFkZHJlc3MgMQorI2RlZmluZSBDQ0ZHX09fSUVFRV9CTEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkQ0CisKKy8vIEJvb3Rsb2FkZXIgQ29uZmlndXJhdGlvbgorI2RlZmluZSBDQ0ZHX09fQkxfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkQ4CisKKy8vIEVyYXNlIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQ0NGR19PX0VSQVNFX0NPTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZEQworCisvLyBUSSBPcHRpb25zCisjZGVmaW5lIENDRkdfT19DQ0ZHX1RJX09QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRTAKKworLy8gVGVzdCBBY2Nlc3MgUG9pbnRzIEVuYWJsZSAwCisjZGVmaW5lIENDRkdfT19DQ0ZHX1RBUF9EQVBfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRTQKKworLy8gVGVzdCBBY2Nlc3MgUG9pbnRzIEVuYWJsZSAxCisjZGVmaW5lIENDRkdfT19DQ0ZHX1RBUF9EQVBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRTgKKworLy8gSW1hZ2UgVmFsaWQKKyNkZWZpbmUgQ0NGR19PX0lNQUdFX1ZBTElEX0NPTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZFQworCisvLyBQcm90ZWN0IFNlY3RvcnMgMC0zMQorI2RlZmluZSBDQ0ZHX09fQ0NGR19QUk9UXzMxXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkYwCisKKy8vIFByb3RlY3QgU2VjdG9ycyAzMi02MworI2RlZmluZSBDQ0ZHX09fQ0NGR19QUk9UXzYzXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkY0CisKKy8vIFByb3RlY3QgU2VjdG9ycyA2NC05NQorI2RlZmluZSBDQ0ZHX09fQ0NGR19QUk9UXzk1XzY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkY4CisKKy8vIFByb3RlY3QgU2VjdG9ycyA5Ni0xMjcKKyNkZWZpbmUgQ0NGR19PX0NDRkdfUFJPVF8xMjdfOTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19FWFRfTEZfQ0xLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gRElPCisvLworLy8gVW5zaWduZWQgaW50ZWdlciwgc2VsZWN0aW5nIHRoZSBESU8gdG8gc3VwcGx5IGV4dGVybmFsIDMya0h6IGNsb2NrIGFzCisvLyBTQ0xLX0xGIHdoZW4gTU9ERV9DT05GLlNDTEtfTEZfT1BUSU9OIGlzIHNldCB0byBFWFRFUk5BTC4gVGhlIHNlbGVjdGVkIERJTworLy8gd2lsbCBiZSBtYXJrZWQgYXMgcmVzZXJ2ZWQgYnkgdGhlIHBpbiBkcml2ZXIgKFRJLVJUT1MgZW52aXJvbm1lbnQpIGFuZCBoZW5jZQorLy8gbm90IHNlbGVjdGFibGUgZm9yIG90aGVyIHVzYWdlLgorI2RlZmluZSBDQ0ZHX0VYVF9MRl9DTEtfRElPX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfRVhUX0xGX0NMS19ESU9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ0NGR19FWFRfTEZfQ0xLX0RJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsyMzowXSBSVENfSU5DUkVNRU5UCisvLworLy8gVW5zaWduZWQgaW50ZWdlciwgZGVmaW5pbmcgdGhlIGlucHV0IGZyZXF1ZW5jeSBvZiB0aGUgZXh0ZXJuYWwgY2xvY2sgYW5kIGlzCisvLyB3cml0dGVuIHRvIEFPTl9SVEM6U1VCU0VDSU5DLlZBTFVFSU5DLiBEZWZpbmVkIGFzIGZvbGxvd3M6CisvLyBFWFRfTEZfQ0xLLlJUQ19JTkNSRU1FTlQgPSAyXjM4L0lucHV0Q2xvY2tGcmVxdWVuY3kgaW4gSGVydHogKGUuZy46CisvLyBSVENfSU5DUkVNRU5UPTB4ODAwMDAwIGZvciBJbnB1dENsb2NrRnJlcXVlbmN5PTMyNzY4IEh6KQorI2RlZmluZSBDQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19NT0RFX0NPTkZfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MjBdIEFMVF9EQ0RDX1ZNSU4KKy8vCisvLyBNaW5pbXVtIHZvbHRhZ2UgZm9yIHdoZW4gREMvREMgc2hvdWxkIGJlIHVzZWQgaWYgYWx0ZXJuYXRlIERDL0RDIHNldHRpbmcgaXMKKy8vIGVuYWJsZWQgKFNJWkVfQU5EX0RJU19GTEFHUy5ESVNfQUxUX0RDRENfU0VUVElORz0wKS4KKy8vIFZvbHRhZ2UgPSAoMjggKyBBTFRfRENEQ19WTUlOKSAvIDE2LgorLy8gMDogMS43NVYKKy8vIDE6IDEuODEyNVYKKy8vIC4uLgorLy8gMTQ6IDIuNjI1VgorLy8gMTU6IDIuNjg3NVYKKy8vCisvLyBOT1RFISBUaGUgRHJpdmVyTGliIGZ1bmN0aW9uIFN5c0N0cmxfRENEQ19Wb2x0YWdlQ29uZGl0aW9uYWxDb250cm9sKCkgbXVzdAorLy8gYmUgY2FsbGVkIHJlZ3VsYXJseSB0byBhcHBseSB0aGlzIGZpZWxkIChoYW5kbGVkIGF1dG9tYXRpY2FsbHkgaWYgdXNpbmcgVEkKKy8vIFJUT1MhKS4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19WTUlOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX1ZNSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gQUxUX0RDRENfRElUSEVSX0VOCisvLworLy8gRW5hYmxlIERDL0RDIGRpdGhlcmluZyBpZiBhbHRlcm5hdGUgREMvREMgc2V0dGluZyBpcyBlbmFibGVkCisvLyAoU0laRV9BTkRfRElTX0ZMQUdTLkRJU19BTFRfRENEQ19TRVRUSU5HPTApLgorLy8gMDogRGl0aGVyIGRpc2FibGUKKy8vIDE6IERpdGhlciBlbmFibGUKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0RJVEhFUl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE2XSBBTFRfRENEQ19JUEVBSworLy8KKy8vIEluZHVjdG9yIHBlYWsgY3VycmVudCBpZiBhbHRlcm5hdGUgREMvREMgc2V0dGluZyBpcyBlbmFibGVkCisvLyAoU0laRV9BTkRfRElTX0ZMQUdTLkRJU19BTFRfRENEQ19TRVRUSU5HPTApLiBBc3N1bWluZyAxMHVIIGV4dGVybmFsCisvLyBpbmR1Y3RvciEKKy8vIFBlYWsgY3VycmVudCA9IDMxICsgKCA0ICogQUxUX0RDRENfSVBFQUsgKSA6CisvLyAwOiAzMW1BIChtaW4pCisvLyAuLi4KKy8vIDQ6IDQ3bUEKKy8vIC4uLgorLy8gNzogNTltQSAobWF4KQorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0lQRUFLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfSVBFQUtfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBERUxUQV9JQklBU19JTklUCisvLworLy8gU2lnbmVkIGRlbHRhIHZhbHVlIGZvciBJQklBU19JTklULiBEZWx0YSB2YWx1ZSBvbmx5IGFwcGxpZXMgaWYKKy8vIFNJWkVfQU5EX0RJU19GTEFHUy5ESVNfWE9TQ19PVlI9MC4KKy8vIFNlZSBGQ0ZHMTpBTVBDT01QX0NUUkwxLklCSUFTX0lOSVQKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19JTklUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX0lOSVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6OF0gREVMVEFfSUJJQVNfT0ZGU0VUCisvLworLy8gU2lnbmVkIGRlbHRhIHZhbHVlIGZvciBJQklBU19PRkZTRVQuIERlbHRhIHZhbHVlIG9ubHkgYXBwbGllcyBpZgorLy8gU0laRV9BTkRfRElTX0ZMQUdTLkRJU19YT1NDX09WUj0wLgorLy8gU2VlIEZDRkcxOkFNUENPTVBfQ1RSTDEuSUJJQVNfT0ZGU0VUCisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX09GRlNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFhPU0NfTUFYX1NUQVJUCisvLworLy8gVW5zaWduZWQgdmFsdWUgb2YgbWF4aW11bSBYT1NDIHN0YXJ0dXAgdGltZSAod29yc3QgY2FzZSkgaW4gdW5pdHMgb2YgMTAwdXMuCisvLyBWYWx1ZSBvbmx5IGFwcGxpZXMgaWYgU0laRV9BTkRfRElTX0ZMQUdTLkRJU19YT1NDX09WUj0wLgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfTU9ERV9DT05GXzFfWE9TQ19NQVhfU1RBUlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfMV9YT1NDX01BWF9TVEFSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19TSVpFX0FORF9ESVNfRkxBR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBTSVpFX09GX0NDRkcKKy8vCisvLyBUb3RhbCBzaXplIG9mIENDRkcgaW4gYnl0ZXMuCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX1NJWkVfT0ZfQ0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfU0laRV9PRl9DQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19TSVpFX09GX0NDRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjRdIERJU0FCTEVfRkxBR1MKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTQUJMRV9GTEFHU19NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNBQkxFX0ZMQUdTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJU19UQ1hPCisvLworLy8gRGlzYWJsZSBUQ1hPLgorLy8gMDogVENYTyBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuCisvLyAxOiBUQ1hPIGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWQuCisvLyBOb3RlOgorLy8gQW4gZXh0ZXJuYWwgVENYTyBpcyByZXF1aXJlZCBpZiBESVNfVENYTyA9IDAuCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1RDWE9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYT19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRElTX0dQUkFNCisvLworLy8gRGlzYWJsZSBHUFJBTSAob3IgdXNlIHRoZSA4SyBWSU1TIFJBTSBhcyBDQUNIRSBSQU0pLgorLy8gMDogR1BSQU0gaXMgZW5hYmxlZCBhbmQgaGVuY2UgQ0FDSEUgZGlzYWJsZWQuCisvLyAxOiBHUFJBTSBpcyBkaXNhYmxlZCBhbmQgaW5zdGVhZCBDQUNIRSBpcyBlbmFibGVkIChkZWZhdWx0KS4KKy8vIE5vdGVzOgorLy8gLSBEaXNhYmxpbmcgQ0FDSEUgd2lsbCByZWR1Y2UgQ1BVIGV4ZWN1dGlvbiBzcGVlZCAodXAgdG8gNjAlKS4KKy8vIC0gR1BSQU0gaXMgOCBLLWJ5dGVzIGluIHNpemUgYW5kIGxvY2F0ZWQgYXQgMHgxMTAwMDAwMC0weDExMDAxRkZGIGlmCisvLyBlbmFibGVkLgorLy8gU2VlOgorLy8gVklNUzpDVEwuTU9ERQorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJU19BTFRfRENEQ19TRVRUSU5HCisvLworLy8gRGlzYWJsZSBhbHRlcm5hdGUgREMvREMgc2V0dGluZ3MuCisvLyAwOiBFbmFibGUgYWx0ZXJuYXRlIERDL0RDIHNldHRpbmdzLgorLy8gMTogRGlzYWJsZSBhbHRlcm5hdGUgREMvREMgc2V0dGluZ3MuCisvLyBTZWU6CisvLyBNT0RFX0NPTkZfMS5BTFRfRENEQ19WTUlOCisvLyBNT0RFX0NPTkZfMS5BTFRfRENEQ19ESVRIRVJfRU4KKy8vIE1PREVfQ09ORl8xLkFMVF9EQ0RDX0lQRUFLCisvLworLy8gTk9URSEgVGhlIERyaXZlckxpYiBmdW5jdGlvbiBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCgpIG11c3QKKy8vIGJlIGNhbGxlZCByZWd1bGFybHkgdG8gYXBwbHkgdGhpcyBmaWVsZCAoaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGlmIHVzaW5nIFRJCisvLyBSVE9TISkuCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0FMVF9EQ0RDX1NFVFRJTkdfQklUTiAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElOR19NICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HX1MgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElTX1hPU0NfT1ZSCisvLworLy8gRGlzYWJsZSBYT1NDIG92ZXJyaWRlIGZ1bmN0aW9uYWxpdHkuCisvLyAwOiBFbmFibGUgWE9TQyBvdmVycmlkZSBmdW5jdGlvbmFsaXR5LgorLy8gMTogRGlzYWJsZSBYT1NDIG92ZXJyaWRlIGZ1bmN0aW9uYWxpdHkuCisvLyBTZWU6CisvLyBNT0RFX0NPTkZfMS5ERUxUQV9JQklBU19JTklUCisvLyBNT0RFX0NPTkZfMS5ERUxUQV9JQklBU19PRkZTRVQKKy8vIE1PREVfQ09ORl8xLlhPU0NfTUFYX1NUQVJUCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlJfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fTU9ERV9DT05GCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gVkREUl9UUklNX1NMRUVQX0RFTFRBCisvLworLy8gU2lnbmVkIGRlbHRhIHZhbHVlIHRvIGFwcGx5IHRvIHRoZQorLy8gVkREUl9UUklNX1NMRUVQIHRhcmdldCwgbWludXMgb25lLiBTZWUgRkNGRzE6Vk9MVF9UUklNLlZERFJfVFJJTV9TTEVFUF9ILgorLy8gMHg4ICgtOCkgOiBEZWx0YSA9IC03CisvLyAuLi4KKy8vIDB4RiAoLTEpIDogRGVsdGEgPSAwCisvLyAweDAgKDApIDogRGVsdGEgPSArMQorLy8gLi4uCisvLyAweDcgKDcpIDogRGVsdGEgPSArOAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfREVMVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9NICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBEQ0RDX1JFQ0hBUkdFCisvLworLy8gREMvREMgZHVyaW5nIHJlY2hhcmdlIGluIHBvd2VyZG93bi4KKy8vIDA6IFVzZSB0aGUgREMvREMgZHVyaW5nIHJlY2hhcmdlIGluIHBvd2VyZG93bi4KKy8vIDE6IERvIG5vdCB1c2UgdGhlIERDL0RDIGR1cmluZyByZWNoYXJnZSBpbiBwb3dlcmRvd24gKGRlZmF1bHQpLgorLy8KKy8vIE5PVEUhIFRoZSBEcml2ZXJMaWIgZnVuY3Rpb24gU3lzQ3RybF9EQ0RDX1ZvbHRhZ2VDb25kaXRpb25hbENvbnRyb2woKSBtdXN0CisvLyBiZSBjYWxsZWQgcmVndWxhcmx5IHRvIGFwcGx5IHRoaXMgZmllbGQgKGhhbmRsZWQgYXV0b21hdGljYWxseSBpZiB1c2luZyBUSQorLy8gUlRPUyEpLgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERDRENfQUNUSVZFCisvLworLy8gREMvREMgaW4gYWN0aXZlIG1vZGUuCisvLyAwOiBVc2UgdGhlIERDL0RDIGR1cmluZyBhY3RpdmUgbW9kZS4KKy8vIDE6IERvIG5vdCB1c2UgdGhlIERDL0RDIGR1cmluZyBhY3RpdmUgbW9kZSAoZGVmYXVsdCkuCisvLworLy8gTk9URSEgVGhlIERyaXZlckxpYiBmdW5jdGlvbiBTeXNDdHJsX0RDRENfVm9sdGFnZUNvbmRpdGlvbmFsQ29udHJvbCgpIG11c3QKKy8vIGJlIGNhbGxlZCByZWd1bGFybHkgdG8gYXBwbHkgdGhpcyBmaWVsZCAoaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGlmIHVzaW5nIFRJCisvLyBSVE9TISkuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfRENEQ19BQ1RJVkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gVkREUl9FWFRfTE9BRAorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9FWFRfTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX0VYVF9MT0FEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9FWFRfTE9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBWRERTX0JPRF9MRVZFTAorLy8KKy8vIFZERFMgQk9EIGxldmVsLgorLy8gMDogVkREUyBCT0QgbGV2ZWwgaXMgMi4wViAobmVjZXNzYXJ5IGZvciBleHRlcm5hbCBsb2FkIG1vZGUsIG9yIGZvciBtYXhpbXVtCisvLyBQQSBvdXRwdXQgcG93ZXIgb24gQ0MxM3h4KS4KKy8vIDE6IFZERFMgQk9EIGxldmVsIGlzIDEuOFYgKG9yIDEuNjVWIGZvciBleHRlcm5hbCByZWd1bGF0b3IgbW9kZSkgKGRlZmF1bHQpLgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERTX0JPRF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFNfQk9EX0xFVkVMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERTX0JPRF9MRVZFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MjJdIFNDTEtfTEZfT1BUSU9OCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgU0NMS19MRi4KKy8vIEVOVU1zOgorLy8gUkNPU0NfTEYgICAgICAgICAgICAgICAgIExvdyBmcmVxdWVuY3kgUkNPU0MgKGRlZmF1bHQpCisvLyBYT1NDX0xGICAgICAgICAgICAgICAgICAgMzIuNzY4a0h6IGxvdyBmcmVxdWVuY3kgWE9TQworLy8gRVhURVJOQUxfTEYgICAgICAgICAgICAgIEV4dGVybmFsIGxvdyBmcmVxdWVuY3kgY2xvY2sgb24gRElPIGRlZmluZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRfTEZfQ0xLLkRJTy4gVGhlIFJUQyB0aWNrIHNwZWVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpTVUJTRUNJTkMgaXMgdXBkYXRlZCB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVYVF9MRl9DTEsuUlRDX0lOQ1JFTUVOVCAoZG9uZSBpbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltRGV2aWNlKCkgeHhXYXJlIGJvb3QgZnVuY3Rpb24pLiBFeHRlcm5hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIG11c3QgYWx3YXlzIGJlIHJ1bm5pbmcgd2hlbiB0aGUgY2hpcCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHN0YW5kYnkgZm9yIFZERFIgcmVjaGFyZ2UgdGltaW5nLgorLy8gWE9TQ19IRl9ETEYgICAgICAgICAgICAgIDMxLjI1a0h6IGNsb2NrIGRlcml2ZWQgZnJvbSAyNE1IeiBYT1NDIChkaXZpZGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IDc2OCBpbiBIVykuIFRoZSBSVEMgdGljayBzcGVlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFtBT05fUlRDLlNVQlNFQ0lOQy4qXSBpcyB1cGRhdGVkIHRvIDB4ODYzN0JELAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gYSAzMS4yNWtIeiBjbG9jayAoZG9uZSBpbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltRGV2aWNlKCkgeHhXYXJlIGJvb3QgZnVuY3Rpb24pLiBTdGFuZGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcG93ZXIgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgdGhpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIHNvdXJjZS4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwQzAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fUkNPU0NfTEYgICAgICAgICAgICAgICAgICAgICAgMHgwMEMwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9YT1NDX0xGICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OX0VYVEVSTkFMX0xGICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT05fWE9TQ19IRl9ETEYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzIxXSBWRERSX1RSSU1fU0xFRVBfVEMKKy8vCisvLyAweDE6IFZERFJfVFJJTV9TTEVFUF9ERUxUQSBpcyBub3QgdGVtcGVyYXR1cmUgY29tcGVuc2F0ZWQKKy8vIDB4MDogUlRPUy9kcml2ZXIgdGVtcGVyYXR1cmUgY29tcGVuc2F0ZXMgVkREUl9UUklNX1NMRUVQX0RFTFRBIGV2ZXJ5IHRpbWUKKy8vIHN0YW5kYnkgbW9kZSBpcyBlbnRlcmVkLiBUaGlzIGltcHJvdmVzIGxvdy10ZW1wZXJhdHVyZSBSQ09TQ19MRiBmcmVxdWVuY3kKKy8vIHN0YWJpbGl0eSBpbiBzdGFuZGJ5IG1vZGUuCisvLworLy8gV2hlbiB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gaXMgcGVyZm9ybWVkLCB0aGUgZGVsdGEgaXMgY2FsY3VsYXRlcyB0aGlzCisvLyB3YXk6CisvLyBEZWx0YSA9IG1heCAoZGVsdGEsIG1pbig4LCBmbG9vcig2Mi10ZW1wKS84KSkKKy8vIEhlcmUsIGRlbHRhIGlzIGdpdmVuIGJ5IFZERFJfVFJJTV9TTEVFUF9ERUxUQSwgYW5kIHRlbXAgaXMgdGhlIGN1cnJlbnQKKy8vIHRlbXBlcmF0dXJlIGluIGRlZ3JlZXMgQy4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX1RDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVENfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQ19NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX1RDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBSVENfQ09NUAorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfUlRDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9SVENfQ09NUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1JUQ19DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfUlRDX0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE4XSBYT1NDX0ZSRVEKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIDI0TSAgICAgICAgICAgICAgICAgICAgICAyNCBNSHogWE9TQ19IRgorLy8gNDhNICAgICAgICAgICAgICAgICAgICAgIDQ4IE1IeiBYT1NDX0hGCisvLyBIUE9TQyAgICAgICAgICAgICAgICAgICAgSFBPU0MKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRXzI0TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfNDhNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfRlJFUV9IUE9TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKworLy8gRmllbGQ6ICAgIFsxN10gWE9TQ19DQVBfTU9ECisvLworLy8gRW5hYmxlIG1vZGlmaWNhdGlvbiAoZGVsdGEpIHRvIFhPU0MgY2FwLWFycmF5LiBWYWx1ZSBzcGVjaWZpZWQgaW4KKy8vIFhPU0NfQ0FQQVJSQVlfREVMVEEuCisvLyAwOiBBcHBseSBjYXAtYXJyYXkgZGVsdGEKKy8vIDE6IERvIG5vdCBhcHBseSBjYXAtYXJyYXkgZGVsdGEgKGRlZmF1bHQpCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBfTU9EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUF9NT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gSEZfQ09NUAorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfSEZfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9IRl9DT01QX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENDRkdfTU9ERV9DT05GX0hGX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfSEZfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBYT1NDX0NBUEFSUkFZX0RFTFRBCisvLworLy8gU2lnbmVkIDgtYml0IHZhbHVlLCBkaXJlY3RseSBtb2RpZnlpbmcgdHJpbW1lZCBYT1NDIGNhcC1hcnJheSBzdGVwIHZhbHVlLgorLy8gRW5hYmxlZCBieSBYT1NDX0NBUF9NT0QuCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1hPU0NfQ0FQQVJSQVlfREVMVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBBUlJBWV9ERUxUQV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFZERFJfQ0FQCisvLworLy8gVW5zaWduZWQgOC1iaXQgaW50ZWdlciwgcmVwcmVzZW50aW5nIHRoZSBtaW5pbXVtIGRlY291cGxpbmcgY2FwYWNpdGFuY2UKKy8vICh3b3JzdCBjYXNlKSBvbiBWRERSLCBpbiB1bml0cyBvZiAxMDBuRi4gVGhpcyBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQKKy8vIGNhcGFjaXRvciB0b2xlcmFuY2UgYW5kIHZvbHRhZ2UgZGVwZW5kZW50IGNhcGFjaXRhbmNlIHZhcmlhdGlvbi4gVGhpcyBiaXQKKy8vIGFmZmVjdHMgdGhlIHJlY2hhcmdlIHBlcmlvZCBjYWxjdWxhdGlvbiB3aGVuIGdvaW5nIGludG8gcG93ZXJkb3duIG9yCisvLyBzdGFuZGJ5LgorLy8KKy8vIE5PVEUhIElmIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRoaXMgZmllbGQgbXVzdCBiZSBjb25maWd1cmVkICh1c2VkCisvLyBieSBUSSBSVE9TKToKKy8vIFN5c0N0cmxTZXRSZWNoYXJnZUJlZm9yZVBvd2VyRG93bigpIFN5c0N0cmxBZGp1c3RSZWNoYXJnZUFmdGVyUG93ZXJEb3duKCkKKyNkZWZpbmUgQ0NGR19NT0RFX0NPTkZfVkREUl9DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX01PREVfQ09ORl9WRERSX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfTU9ERV9DT05GX1ZERFJfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fVk9MVF9MT0FEXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBWRERSX0VYVF9UUDQ1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNDVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA0NV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDQ1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBWRERSX0VYVF9UUDI1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQMjVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFAyNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBWRERSX0VYVF9UUDUKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFZERFJfRVhUX1RNMTUKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVE0xNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UTTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RNMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX1ZPTFRfTE9BRF8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gVkREUl9FWFRfVFAxMjUKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMjVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEyNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFZERFJfRVhUX1RQMTA1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTA1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEwNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBWRERSX0VYVF9UUDg1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQODVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA4NV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDg1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBWRERSX0VYVF9UUDY1CisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQNjVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA2NV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDY1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19SVENfT0ZGU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gUlRDX0NPTVBfUDAKKy8vCisvLyBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gU29mdHdhcmUgc2hvdWxkIG5vdCByZWx5IG9uIHRoZSB2YWx1ZSBvZiBhCisvLyByZXNlcnZlZC4gV3JpdGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgcmVzZXQvZGVmYXVsdCB2YWx1ZSBtYXkgcmVzdWx0IGluCisvLyB1bmRlZmluZWQgYmVoYXZpb3IuCisjZGVmaW5lIENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFJUQ19DT01QX1AxCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBSVENfQ09NUF9QMgorLy8KKy8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEKKy8vIHJlc2VydmVkLiBXcml0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSByZXNldC9kZWZhdWx0IHZhbHVlIG1heSByZXN1bHQgaW4KKy8vIHVuZGVmaW5lZCBiZWhhdmlvci4KKyNkZWZpbmUgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fRlJFUV9PRkZTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBIRl9DT01QX1AwCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBIRl9DT01QX1AxCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBIRl9DT01QX1AyCisvLworLy8gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFNvZnR3YXJlIHNob3VsZCBub3QgcmVseSBvbiB0aGUgdmFsdWUgb2YgYQorLy8gcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIHJlc2V0L2RlZmF1bHQgdmFsdWUgbWF5IHJlc3VsdCBpbgorLy8gdW5kZWZpbmVkIGJlaGF2aW9yLgorI2RlZmluZSBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19JRUVFX01BQ18wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQUREUgorLy8KKy8vIEJpdHNbMzE6MF0gb2YgdGhlIDY0LWJpdHMgY3VzdG9tIElFRUUgTUFDIGFkZHJlc3MuCisvLyBJZiBkaWZmZXJlbnQgZnJvbSAweEZGRkZGRkZGIHRoZW4gdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgYXBwbGllZDsKKy8vIG90aGVyd2lzZSB1c2UgdmFsdWUgZnJvbSBGQ0ZHLgorI2RlZmluZSBDQ0ZHX0lFRUVfTUFDXzBfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENDRkdfSUVFRV9NQUNfMF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ0NGR19JRUVFX01BQ18wX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19JRUVFX01BQ18xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQUREUgorLy8KKy8vIEJpdHNbNjM6MzJdIG9mIHRoZSA2NC1iaXRzIGN1c3RvbSBJRUVFIE1BQyBhZGRyZXNzLgorLy8gSWYgZGlmZmVyZW50IGZyb20gMHhGRkZGRkZGRiB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIGFwcGxpZWQ7CisvLyBvdGhlcndpc2UgdXNlIHZhbHVlIGZyb20gRkNGRy4KKyNkZWZpbmUgQ0NGR19JRUVFX01BQ18xX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDQ0ZHX0lFRUVfTUFDXzFfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENDRkdfSUVFRV9NQUNfMV9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fSUVFRV9CTEVfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFIKKy8vCisvLyBCaXRzWzMxOjBdIG9mIHRoZSA2NC1iaXRzIGN1c3RvbSBJRUVFIEJMRSBhZGRyZXNzLgorLy8gSWYgZGlmZmVyZW50IGZyb20gMHhGRkZGRkZGRiB0aGVuIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGlzIGFwcGxpZWQ7CisvLyBvdGhlcndpc2UgdXNlIHZhbHVlIGZyb20gRkNGRy4KKyNkZWZpbmUgQ0NGR19JRUVFX0JMRV8wX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDQ0ZHX0lFRUVfQkxFXzBfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENDRkdfSUVFRV9CTEVfMF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fSUVFRV9CTEVfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFIKKy8vCisvLyBCaXRzWzYzOjMyXSBvZiB0aGUgNjQtYml0cyBjdXN0b20gSUVFRSBCTEUgYWRkcmVzcy4KKy8vIElmIGRpZmZlcmVudCBmcm9tIDB4RkZGRkZGRkYgdGhlbiB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBhcHBsaWVkOworLy8gb3RoZXJ3aXNlIHVzZSB2YWx1ZSBmcm9tIEZDRkcuCisjZGVmaW5lIENDRkdfSUVFRV9CTEVfMV9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ0NGR19JRUVFX0JMRV8xX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDQ0ZHX0lFRUVfQkxFXzFfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0JMX0NPTkZJRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIEJPT1RMT0FERVJfRU5BQkxFCisvLworLy8gQm9vdGxvYWRlciBlbmFibGUuIEJvb3QgbG9hZGVyIGNhbiBiZSBhY2Nlc3NlZCBpZgorLy8gSU1BR0VfVkFMSURfQ09ORi5JTUFHRV9WQUxJRCBpcyBub24temVybyBvciBCTF9FTkFCTEUgaXMgZW5hYmxlZCAoYW5kCisvLyBjb25kaXRpb25zIGZvciBib290IGxvYWRlciBiYWNrZG9vciBhcmUgbWV0KS4KKy8vIDB4QzU6IEJvb3QgbG9hZGVyIGlzIGVuYWJsZWQuCisvLyBBbnkgb3RoZXIgdmFsdWU6IEJvb3QgbG9hZGVyIGlzIGRpc2FibGVkLgorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CT09UTE9BREVSX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQk9PVExPQURFUl9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBCTF9MRVZFTAorLy8KKy8vIFNldHMgdGhlIGFjdGl2ZSBsZXZlbCBvZiB0aGUgc2VsZWN0ZWQgRElPIG51bWJlciBCTF9QSU5fTlVNQkVSIGlmIGJvb3QKKy8vIGxvYWRlciBiYWNrZG9vciBpcyBlbmFibGVkIGJ5IHRoZSBCTF9FTkFCTEUgZmllbGQuCisvLyAwOiBBY3RpdmUgbG93LgorLy8gMTogQWN0aXZlIGhpZ2guCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQkxfTEVWRUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX0xFVkVMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gQkxfUElOX05VTUJFUgorLy8KKy8vIERJTyBudW1iZXIgdGhhdCBpcyBsZXZlbCBjaGVja2VkIGlmIHRoZSBib290IGxvYWRlciBiYWNrZG9vciBpcyBlbmFibGVkIGJ5CisvLyB0aGUgQkxfRU5BQkxFIGZpZWxkLgorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9QSU5fTlVNQkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCTF9FTkFCTEUKKy8vCisvLyBFbmFibGVzIHRoZSBib290IGxvYWRlciBiYWNrZG9vci4KKy8vIDB4QzU6IEJvb3QgbG9hZGVyIGJhY2tkb29yIGlzIGVuYWJsZWQuCisvLyBBbnkgb3RoZXIgdmFsdWU6IEJvb3QgbG9hZGVyIGJhY2tkb29yIGlzIGRpc2FibGVkLgorLy8KKy8vIE5PVEUhIEJvb3QgbG9hZGVyIG11c3QgYmUgZW5hYmxlZCAoc2VlIEJPT1RMT0FERVJfRU5BQkxFKSBpZiBib290IGxvYWRlcgorLy8gYmFja2Rvb3IgaXMgZW5hYmxlZC4KKyNkZWZpbmUgQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0JMX0NPTkZJR19CTF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENDRkdfQkxfQ09ORklHX0JMX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fRVJBU0VfQ09ORgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIENISVBfRVJBU0VfRElTX04KKy8vCisvLyBDaGlwIGVyYXNlLgorLy8gVGhpcyBiaXQgY29udHJvbHMgaWYgYSBjaGlwIGVyYXNlIHJlcXVlc3RlZCB0aHJvdWdoIHRoZSBKVEFHIFdVQyBUQVAgd2lsbCBiZQorLy8gaWdub3JlZCBpbiBhIGZvbGxvd2luZyBib290IGNhdXNlZCBieSBhIHJlc2V0IG9mIHRoZSBNQ1UgVkQuCisvLyBBIHN1Y2Nlc3NmdWwgY2hpcCBlcmFzZSBvcGVyYXRpb24gd2lsbCBmb3JjZSB0aGUgY29udGVudCBvZiB0aGUgZmxhc2ggbWFpbgorLy8gYmFuayBiYWNrIHRvIHRoZSBzdGF0ZSBhcyBpdCB3YXMgd2hlbiBkZWxpdmVyZWQgYnkgVEkuCisvLyAwOiBEaXNhYmxlLiBBbnkgY2hpcCBlcmFzZSByZXF1ZXN0IGRldGVjdGVkIGR1cmluZyBib290IHdpbGwgYmUgaWdub3JlZC4KKy8vIDE6IEVuYWJsZS4gQW55IGNoaXAgZXJhc2UgcmVxdWVzdCBkZXRlY3RlZCBkdXJpbmcgYm9vdCB3aWxsIGJlIHBlcmZvcm1lZCBieQorLy8gdGhlIGJvb3QgRlcuCisjZGVmaW5lIENDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0VSQVNFX0NPTkZfQ0hJUF9FUkFTRV9ESVNfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gQkFOS19FUkFTRV9ESVNfTgorLy8KKy8vIEJhbmsgZXJhc2UuCisvLyBUaGlzIGJpdCBjb250cm9scyBpZiB0aGUgUk9NIHNlcmlhbCBib290IGxvYWRlciB3aWxsIGFjY2VwdCBhIHJlY2VpdmVkIEJhbmsKKy8vIEVyYXNlIGNvbW1hbmQgKENPTU1BTkRfQkFOS19FUkFTRSkuCisvLyBBIHN1Y2Nlc3NmdWwgQmFuayBFcmFzZSBvcGVyYXRpb24gd2lsbCBlcmFzZSBhbGwgbWFpbiBiYW5rIHNlY3RvcnMgbm90CisvLyBwcm90ZWN0ZWQgYnkgd3JpdGUgcHJvdGVjdCBjb25maWd1cmF0aW9uIGJpdHMgaW4gQ0NGRy4KKy8vIDA6IERpc2FibGUgdGhlIGJvb3QgbG9hZGVyIGJhbmsgZXJhc2UgZnVuY3Rpb24uCisvLyAxOiBFbmFibGUgdGhlIGJvb3QgbG9hZGVyIGJhbmsgZXJhc2UgZnVuY3Rpb24uCisjZGVmaW5lIENDRkdfRVJBU0VfQ09ORl9CQU5LX0VSQVNFX0RJU19OICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19FUkFTRV9DT05GX0JBTktfRVJBU0VfRElTX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfRVJBU0VfQ09ORl9CQU5LX0VSQVNFX0RJU19OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fQ0NGR19USV9PUFRJT05TCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVElfRkFfRU5BQkxFCisvLworLy8gVEkgRmFpbHVyZSBBbmFseXNpcy4KKy8vIDB4QzU6IEVuYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB1bmxvY2tpbmcgdGhlIFRJIEZBIChUSSBGYWlsdXJlIEFuYWx5c2lzKQorLy8gb3B0aW9uIHdpdGggdGhlIHVubG9jayBjb2RlLgorLy8gQWxsIG90aGVyIHZhbHVlczogRGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB1bmxvY2tpbmcgdGhlIFRJIEZBIG9wdGlvbgorLy8gd2l0aCB0aGUgdW5sb2NrIGNvZGUuCisjZGVmaW5lIENDRkdfQ0NGR19USV9PUFRJT05TX1RJX0ZBX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDQ0ZHX0NDRkdfVElfT1BUSU9OU19USV9GQV9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0NDRkdfVEFQX0RBUF8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoxNl0gQ1BVX0RBUF9FTkFCTEUKKy8vCisvLyBFbmFibGUgQ1BVIERBUC4KKy8vIDB4QzU6IE1haW4gQ1BVIERBUCBhY2Nlc3MgaXMgZW5hYmxlZCBkdXJpbmcgcG93ZXItdXAvc3lzdGVtLXJlc2V0IGJ5IFJPTQorLy8gYm9vdCBGVy4KKy8vIEFueSBvdGhlciB2YWx1ZTogTWFpbiBDUFUgREFQIGFjY2VzcyB3aWxsIHJlbWFpbiBkaXNhYmxlZCBvdXQgb2YKKy8vIHBvd2VyLXVwL3N5c3RlbS1yZXNldC4KKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9DUFVfREFQX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzBfQ1BVX0RBUF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFJDTV9UQVBfRU5BQkxFCisvLworLy8gRW5hYmxlIFBSQ00gVEFQLgorLy8gMHhDNTogUFJDTSBUQVAgYWNjZXNzIGlzIGVuYWJsZWQgZHVyaW5nIHBvd2VyLXVwL3N5c3RlbS1yZXNldCBieSBST00gYm9vdCBGVworLy8gaWYgZW5hYmxlZCBieSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFsdWUgaW4gRkNGRzEgZGVmaW5lZCBieSBUSS4KKy8vIEFueSBvdGhlciB2YWx1ZTogUFJDTSBUQVAgYWNjZXNzIHdpbGwgcmVtYWluIGRpc2FibGVkIG91dCBvZgorLy8gcG93ZXItdXAvc3lzdGVtLXJlc2V0LgorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8wX1BSQ01fVEFQX0VOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9QUkNNX1RBUF9FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBURVNUX1RBUF9FTkFCTEUKKy8vCisvLyBFbmFibGUgVGVzdCBUQVAuCisvLyAweEM1OiBURVNUIFRBUCBhY2Nlc3MgaXMgZW5hYmxlZCBkdXJpbmcgcG93ZXItdXAvc3lzdGVtLXJlc2V0IGJ5IFJPTSBib290IEZXCisvLyBpZiBlbmFibGVkIGJ5IGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBpbiBGQ0ZHMSBkZWZpbmVkIGJ5IFRJLgorLy8gQW55IG90aGVyIHZhbHVlOiBURVNUIFRBUCBhY2Nlc3Mgd2lsbCByZW1haW4gZGlzYWJsZWQgb3V0IG9mCisvLyBwb3dlci11cC9zeXN0ZW0tcmVzZXQuCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9URVNUX1RBUF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8wX1RFU1RfVEFQX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0NDRkdfVEFQX0RBUF8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoxNl0gUEJJU1QyX1RBUF9FTkFCTEUKKy8vCisvLyBFbmFibGUgUEJJU1QyIFRBUC4KKy8vIDB4QzU6IFBCSVNUMiBUQVAgYWNjZXNzIGlzIGVuYWJsZWQgZHVyaW5nIHBvd2VyLXVwL3N5c3RlbS1yZXNldCBieSBST00gYm9vdAorLy8gRlcgaWYgZW5hYmxlZCBieSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFsdWUgaW4gRkNGRzEgZGVmaW5lZCBieSBUSS4KKy8vIEFueSBvdGhlciB2YWx1ZTogUEJJU1QyIFRBUCBhY2Nlc3Mgd2lsbCByZW1haW4gZGlzYWJsZWQgb3V0IG9mCisvLyBwb3dlci11cC9zeXN0ZW0tcmVzZXQuCisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDJfVEFQX0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMl9UQVBfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBCSVNUMV9UQVBfRU5BQkxFCisvLworLy8gRW5hYmxlIFBCSVNUMSBUQVAuCisvLyAweEM1OiBQQklTVDEgVEFQIGFjY2VzcyBpcyBlbmFibGVkIGR1cmluZyBwb3dlci11cC9zeXN0ZW0tcmVzZXQgYnkgUk9NIGJvb3QKKy8vIEZXIGlmIGVuYWJsZWQgYnkgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhbHVlIGluIEZDRkcxIGRlZmluZWQgYnkgVEkuCisvLyBBbnkgb3RoZXIgdmFsdWU6IFBCSVNUMSBUQVAgYWNjZXNzIHdpbGwgcmVtYWluIGRpc2FibGVkIG91dCBvZgorLy8gcG93ZXItdXAvc3lzdGVtLXJlc2V0LgorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QxX1RBUF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDFfVEFQX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBXVUNfVEFQX0VOQUJMRQorLy8KKy8vIEVuYWJsZSBXVUMgVEFQCisvLyAweEM1OiBXVUMgVEFQIGFjY2VzcyBpcyBlbmFibGVkIGR1cmluZyBwb3dlci11cC9zeXN0ZW0tcmVzZXQgYnkgUk9NIGJvb3QgRlcKKy8vIGlmIGVuYWJsZWQgYnkgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhbHVlIGluIEZDRkcxIGRlZmluZWQgYnkgVEkuCisvLyBBbnkgb3RoZXIgdmFsdWU6IFdVQyBUQVAgYWNjZXNzIHdpbGwgcmVtYWluIGRpc2FibGVkIG91dCBvZgorLy8gcG93ZXItdXAvc3lzdGVtLXJlc2V0LgorI2RlZmluZSBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1dVQ19UQVBfRU5BQkxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9XVUNfVEFQX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19JTUFHRV9WQUxJRF9DT05GCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gSU1BR0VfVkFMSUQKKy8vCisvLyBUaGlzIGZpZWxkIG11c3QgaGF2ZSBhIHZhbHVlIG9mIDB4MDAwMDAwMDAgaW4gb3JkZXIgZm9yIGVuYWJsaW5nIHRoZSBib290CisvLyBzZXF1ZW5jZSB0byB0cmFuc2ZlciBjb250cm9sIHRvIGEgZmxhc2ggaW1hZ2UuCisvLyBBIG5vbi16ZXJvIHZhbHVlIGZvcmNlcyB0aGUgYm9vdCBzZXF1ZW5jZSB0byBjYWxsIHRoZSBib290IGxvYWRlci4KKyNkZWZpbmUgQ0NGR19JTUFHRV9WQUxJRF9DT05GX0lNQUdFX1ZBTElEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENDRkdfSU1BR0VfVkFMSURfQ09ORl9JTUFHRV9WQUxJRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fQ0NGR19QUk9UXzMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBXUlRfUFJPVF9TRUNfMzEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzMxICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zMV9NICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gV1JUX1BST1RfU0VDXzMwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zMCAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMzBfTSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIFdSVF9QUk9UX1NFQ18yOQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjkgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI5X00gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBXUlRfUFJPVF9TRUNfMjgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI4ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yOF9NICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gV1JUX1BST1RfU0VDXzI3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNyAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjdfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFdSVF9QUk9UX1NFQ18yNgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI2X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBXUlRfUFJPVF9TRUNfMjUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI1ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNV9NICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gV1JUX1BST1RfU0VDXzI0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjRfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFdSVF9QUk9UX1NFQ18yMworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIzX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBXUlRfUFJPVF9TRUNfMjIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gV1JUX1BST1RfU0VDXzIxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjFfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFdSVF9QUk9UX1NFQ18yMAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIwX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBXUlRfUFJPVF9TRUNfMTkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE5ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xOV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gV1JUX1BST1RfU0VDXzE4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xOCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMThfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFdSVF9QUk9UX1NFQ18xNworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE3X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBXUlRfUFJPVF9TRUNfMTYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE2ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gV1JUX1BST1RfU0VDXzE1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTVfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIFdSVF9QUk9UX1NFQ18xNAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzE0X00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBXUlRfUFJPVF9TRUNfMTMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEzICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xM19NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gV1JUX1BST1RfU0VDXzEyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTJfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFdSVF9QUk9UX1NFQ18xMQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzExX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBXUlRfUFJPVF9TRUNfMTAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xMF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gV1JUX1BST1RfU0VDXzkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ185X00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gV1JUX1BST1RfU0VDXzgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ184X00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gV1JUX1BST1RfU0VDXzcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ183X00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gV1JUX1BST1RfU0VDXzYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ182X00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gV1JUX1BST1RfU0VDXzUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ181X00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gV1JUX1BST1RfU0VDXzQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ180X00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gV1JUX1BST1RfU0VDXzMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18zX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gV1JUX1BST1RfU0VDXzIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18yX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gV1JUX1BST1RfU0VDXzEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18xX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gV1JUX1BST1RfU0VDXzAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMzFfMF9XUlRfUFJPVF9TRUNfMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8zMV8wX1dSVF9QUk9UX1NFQ18wX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzMxXzBfV1JUX1BST1RfU0VDXzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDQ0ZHX09fQ0NGR19QUk9UXzYzXzMyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gV1JUX1BST1RfU0VDXzYzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjMgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182M19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYzX00gICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFdSVF9QUk9UX1NFQ182MgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYyICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182Ml9NICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBXUlRfUFJPVF9TRUNfNjEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182MSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjFfTSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182MV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gV1JUX1BST1RfU0VDXzYwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ182MF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzYwX00gICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFdSVF9QUk9UX1NFQ181OQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU5ICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181OV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBXUlRfUFJPVF9TRUNfNTgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181OCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNThfTSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181OF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gV1JUX1BST1RfU0VDXzU3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTcgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181N19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU3X00gICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFdSVF9QUk9UX1NFQ181NgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU2ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181Nl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBXUlRfUFJPVF9TRUNfNTUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181NSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gV1JUX1BST1RfU0VDXzU0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTQgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181NF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzU0X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFdSVF9QUk9UX1NFQ181MworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUzICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181M19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBXUlRfUFJPVF9TRUNfNTIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTJfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181Ml9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gV1JUX1BST1RfU0VDXzUxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUxX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFdSVF9QUk9UX1NFQ181MAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ181MF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzUwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBXUlRfUFJPVF9TRUNfNDkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180OSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDlfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180OV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gV1JUX1BST1RfU0VDXzQ4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180OF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ4X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFdSVF9QUk9UX1NFQ180NworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ3ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180N19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBXUlRfUFJPVF9TRUNfNDYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDZfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180Nl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gV1JUX1BST1RfU0VDXzQ1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ1X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFdSVF9QUk9UX1NFQ180NAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ0ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180NF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQ0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBXUlRfUFJPVF9TRUNfNDMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDNfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180M19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gV1JUX1BST1RfU0VDXzQyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180Ml9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQyX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFdSVF9QUk9UX1NFQ180MQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBXUlRfUFJPVF9TRUNfNDAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzQwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfNDBfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ180MF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gV1JUX1BST1RfU0VDXzM5CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM5X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFdSVF9QUk9UX1NFQ18zOAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM4ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zOF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBXUlRfUFJPVF9TRUNfMzcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzdfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gV1JUX1BST1RfU0VDXzM2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM2X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdSVF9QUk9UX1NFQ18zNQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM1ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBXUlRfUFJPVF9TRUNfMzQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzM0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzRfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gV1JUX1BST1RfU0VDXzMzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzMzX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFdSVF9QUk9UX1NFQ18zMgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzMyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF82M18zMl9XUlRfUFJPVF9TRUNfMzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzYzXzMyX1dSVF9QUk9UX1NFQ18zMl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfNjNfMzJfV1JUX1BST1RfU0VDXzMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENDRkdfT19DQ0ZHX1BST1RfOTVfNjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBXUlRfUFJPVF9TRUNfOTUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185NSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzk1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTVfTSAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gV1JUX1BST1RfU0VDXzk0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTQgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185NF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzk0X00gICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIFdSVF9QUk9UX1NFQ185MworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkzICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185M19NICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBXUlRfUFJPVF9TRUNfOTIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTJfTSAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185Ml9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gV1JUX1BST1RfU0VDXzkxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTEgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkxX00gICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIFdSVF9QUk9UX1NFQ185MAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkwICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfOTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ185MF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzkwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBXUlRfUFJPVF9TRUNfODkKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184OSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODlfTSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184OV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gV1JUX1BST1RfU0VDXzg4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODggICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184OF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg4X00gICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFdSVF9QUk9UX1NFQ184NworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg3ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184N19NICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBXUlRfUFJPVF9TRUNfODYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODZfTSAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184Nl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gV1JUX1BST1RfU0VDXzg1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg1X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFdSVF9QUk9UX1NFQ184NAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg0ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184NF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzg0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBXUlRfUFJPVF9TRUNfODMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODNfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184M19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gV1JUX1BST1RfU0VDXzgyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184Ml9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgyX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFdSVF9QUk9UX1NFQ184MQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBXUlRfUFJPVF9TRUNfODAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzgwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfODBfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ184MF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gV1JUX1BST1RfU0VDXzc5CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183OV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc5X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIFdSVF9QUk9UX1NFQ183OAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc4ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183OF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBXUlRfUFJPVF9TRUNfNzcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzdfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183N19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gV1JUX1BST1RfU0VDXzc2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183Nl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc2X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFdSVF9QUk9UX1NFQ183NQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc1ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBXUlRfUFJPVF9TRUNfNzQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzc0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzRfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183NF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gV1JUX1BST1RfU0VDXzczCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183M19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzczX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFdSVF9QUk9UX1NFQ183MgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183Ml9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBXUlRfUFJPVF9TRUNfNzEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183MSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzFfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183MV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gV1JUX1BST1RfU0VDXzcwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ183MF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzcwX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFdSVF9QUk9UX1NFQ182OQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY5ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182OV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBXUlRfUFJPVF9TRUNfNjgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182OCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjhfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182OF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gV1JUX1BST1RfU0VDXzY3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182N19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY3X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFdSVF9QUk9UX1NFQ182NgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY2ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182Nl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBXUlRfUFJPVF9TRUNfNjUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182NSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182NV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gV1JUX1BST1RfU0VDXzY0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzk1XzY0X1dSVF9QUk9UX1NFQ182NF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfOTVfNjRfV1JUX1BST1RfU0VDXzY0X00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF85NV82NF9XUlRfUFJPVF9TRUNfNjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ0NGR19PX0NDRkdfUFJPVF8xMjdfOTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBXUlRfUFJPVF9TRUNfMTI3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjdfTSAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFdSVF9QUk9UX1NFQ18xMjYKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI2ICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNl9NICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gV1JUX1BST1RfU0VDXzEyNQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjUgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI1X00gICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBXUlRfUFJPVF9TRUNfMTI0CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjRfTSAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFdSVF9QUk9UX1NFQ18xMjMKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIzICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyM19NICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gV1JUX1BST1RfU0VDXzEyMgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjIgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIyX00gICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBXUlRfUFJPVF9TRUNfMTIxCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjFfTSAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFdSVF9QUk9UX1NFQ18xMjAKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIwICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEyMF9NICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gV1JUX1BST1RfU0VDXzExOQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTkgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE5X00gICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBXUlRfUFJPVF9TRUNfMTE4CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExOCAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMThfTSAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFdSVF9QUk9UX1NFQ18xMTcKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE3ICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExN19NICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gV1JUX1BST1RfU0VDXzExNgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTYgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE2X00gICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBXUlRfUFJPVF9TRUNfMTE1CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTVfTSAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFdSVF9QUk9UX1NFQ18xMTQKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExNF9NICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gV1JUX1BST1RfU0VDXzExMworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEzX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBXUlRfUFJPVF9TRUNfMTEyCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTJfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFdSVF9QUk9UX1NFQ18xMTEKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTExICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMV9NICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gV1JUX1BST1RfU0VDXzExMAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzExMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTEwX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBXUlRfUFJPVF9TRUNfMTA5CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwOSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDlfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFdSVF9QUk9UX1NFQ18xMDgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwOF9NICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gV1JUX1BST1RfU0VDXzEwNworLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA3X00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBXUlRfUFJPVF9TRUNfMTA2CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDZfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFdSVF9QUk9UX1NFQ18xMDUKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNV9NICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gV1JUX1BST1RfU0VDXzEwNAorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTA0X00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBXUlRfUFJPVF9TRUNfMTAzCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDNfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFdSVF9QUk9UX1NFQ18xMDIKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMl9NICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gV1JUX1BST1RfU0VDXzEwMQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAxX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBXUlRfUFJPVF9TRUNfMTAwCisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfMTAwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ18xMDBfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzEwMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFdSVF9QUk9UX1NFQ185OQorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185OSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTlfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185OV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBXUlRfUFJPVF9TRUNfOTgKKy8vCisvLyAwOiBTZWN0b3IgcHJvdGVjdGVkCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185OF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk4X00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gV1JUX1BST1RfU0VDXzk3CisvLworLy8gMDogU2VjdG9yIHByb3RlY3RlZAorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk3ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185N19NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFdSVF9QUk9UX1NFQ185NgorLy8KKy8vIDA6IFNlY3RvciBwcm90ZWN0ZWQKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185NiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQ0ZHX0NDRkdfUFJPVF8xMjdfOTZfV1JUX1BST1RfU0VDXzk2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENDRkdfQ0NGR19QUk9UXzEyN185Nl9XUlRfUFJPVF9TRUNfOTZfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2X1dSVF9QUk9UX1NFQ185Nl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0NDRkdfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2NmZ19zaW1wbGVfc3RydWN0LmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jY2ZnX3NpbXBsZV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2UzOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY2NmZ19zaW1wbGVfc3RydWN0LmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NjZmdfc2ltcGxlX3N0cnVjdF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19DQ0ZHX1NJTVBMRV9TVFJVQ1RfSF9fCisjZGVmaW5lIF9fSFdfQ0NGR19TSU1QTEVfU1RSVUNUX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ3VzdG9tZXIgY29uZmlndXJhdGlvbiAoY2NmZykgdHlwZWRlZi4KKy8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHN0cnVjdCBpcyByZXF1aXJlZCBieSBkZXZpY2UgUk9NIGJvb3QgY29kZQorLy8gIGFuZCBtdXN0IGJlIHBsYWNlZCBhdCB0aGUgZW5kIG9mIGZsYXNoLiBEbyBub3QgbW9kaWZ5IHRoaXMgc3RydWN0IQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3R5cGVkZWYgc3RydWN0Cit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBNYXBwZWQgdG8gYWRkcmVzcworICAgIHVpbnQzMl90ICAgQ0NGR19FWFRfTEZfQ0xLICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkE4CisgICAgdWludDMyX3QgICBDQ0ZHX01PREVfQ09ORl8xICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGQUMKKyAgICB1aW50MzJfdCAgIENDRkdfU0laRV9BTkRfRElTX0ZMQUdTICAgICAgIDsgLy8gMHg1MDAwM0ZCMAorICAgIHVpbnQzMl90ICAgQ0NGR19NT0RFX0NPTkYgICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkI0CisgICAgdWludDMyX3QgICBDQ0ZHX1ZPTFRfTE9BRF8wICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGQjgKKyAgICB1aW50MzJfdCAgIENDRkdfVk9MVF9MT0FEXzEgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZCQworICAgIHVpbnQzMl90ICAgQ0NGR19SVENfT0ZGU0VUICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkMwCisgICAgdWludDMyX3QgICBDQ0ZHX0ZSRVFfT0ZGU0VUICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGQzQKKyAgICB1aW50MzJfdCAgIENDRkdfSUVFRV9NQUNfMCAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZDOAorICAgIHVpbnQzMl90ICAgQ0NGR19JRUVFX01BQ18xICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkNDCisgICAgdWludDMyX3QgICBDQ0ZHX0lFRUVfQkxFXzAgICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGRDAKKyAgICB1aW50MzJfdCAgIENDRkdfSUVFRV9CTEVfMSAgICAgICAgICAgICAgIDsgLy8gMHg1MDAwM0ZENAorICAgIHVpbnQzMl90ICAgQ0NGR19CTF9DT05GSUcgICAgICAgICAgICAgICAgOyAvLyAweDUwMDAzRkQ4CisgICAgdWludDMyX3QgICBDQ0ZHX0VSQVNFX0NPTkYgICAgICAgICAgICAgICA7IC8vIDB4NTAwMDNGREMKKyAgICB1aW50MzJfdCAgIENDRkdfQ0NGR19USV9PUFRJT05TICAgICAgICAgIDsgLy8gMHg1MDAwM0ZFMAorICAgIHVpbnQzMl90ICAgQ0NGR19DQ0ZHX1RBUF9EQVBfMCAgICAgICAgICAgOyAvLyAweDUwMDAzRkU0CisgICAgdWludDMyX3QgICBDQ0ZHX0NDRkdfVEFQX0RBUF8xICAgICAgICAgICA7IC8vIDB4NTAwMDNGRTgKKyAgICB1aW50MzJfdCAgIENDRkdfSU1BR0VfVkFMSURfQ09ORiAgICAgICAgIDsgLy8gMHg1MDAwM0ZFQworICAgIHVpbnQzMl90ICAgQ0NGR19DQ0ZHX1BST1RfMzFfMCAgICAgICAgICAgOyAvLyAweDUwMDAzRkYwCisgICAgdWludDMyX3QgICBDQ0ZHX0NDRkdfUFJPVF82M18zMiAgICAgICAgICA7IC8vIDB4NTAwMDNGRjQKKyAgICB1aW50MzJfdCAgIENDRkdfQ0NGR19QUk9UXzk1XzY0ICAgICAgICAgIDsgLy8gMHg1MDAwM0ZGOAorICAgIHVpbnQzMl90ICAgQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2ICAgICAgICAgOyAvLyAweDUwMDAzRkZDCit9IGNjZmdfdDsKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSB0aGUgZXh0ZXJuIGNjZmcgc3RydWN0dXJlIChfX2NjZmcpCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZXh0ZXJuIGNvbnN0IGNjZmdfdCBfX2NjZmc7CisKKworI2VuZGlmIC8vIF9fSFdfQ0NGR19TSU1QTEVfU1RSVUNUX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NoaXBfZGVmLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jaGlwX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTlkZmYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jaGlwX2RlZi5oCkBAIC0wLDAgKzEsMTk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY2hpcF9kZWYuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDUtMTIgMTc6NDE6MTkgKzAyMDAgKFR1ZSwgMTIgTWF5IDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDM0OTEKKyoKKyogIERlc2NyaXB0aW9uOiAgICBEZWZpbmVzIGZvciBkZXZpY2UgcHJvcGVydGllcy4KKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGFkZHRvZ3JvdXAgY29uZmlnX2FwaQorLy8hIEB7CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjaWZuZGVmIF9fSFdfQ0hJUF9ERUZfSF9fCisjZGVmaW5lIF9fSFdfQ0hJUF9ERUZfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIERlZmluZSBDQ19DSElQX0lEIGNvZGUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIG1hY3JvcyBkZWZpbmVkIGF0IHRoZSBib3R0b206CisvLyBDQ19HRVRfQ0hJUF9GQU1JTFkvREVWSUNFL1BBQ0tBR0UvSFdSRVYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiBDQzI2MjBGMTI4ICovCisjaWYgICBkZWZpbmVkKENDMjYyMEYxMjhSR1pfUjIwKSB8fCBkZWZpbmVkKENDMjYyMEYxMjhSR1pfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwNzIwCisjZWxpZiBkZWZpbmVkKENDMjYyMEYxMjhSSEJfUjIwKSB8fCBkZWZpbmVkKENDMjYyMEYxMjhSSEJfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwNTIwCisjZWxpZiBkZWZpbmVkKENDMjYyMEYxMjhSU01fUjIwKSB8fCBkZWZpbmVkKENDMjYyMEYxMjhSU01fUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwNDIwCisjZWxpZiBkZWZpbmVkKENDMjYyMEYxMjhfUjIwKSAgICB8fCBkZWZpbmVkKENDMjYyMEYxMjhfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwMDIwCisjZWxpZiBkZWZpbmVkKENDMjYyMEYxMjhSR1pfUjIyKSB8fCBkZWZpbmVkKENDMjYyMEYxMjhSR1opCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYyMDA3MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjIwRjEyOFJIQl9SMjIpIHx8IGRlZmluZWQoQ0MyNjIwRjEyOFJIQikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjIwMDUyMgorI2VsaWYgZGVmaW5lZChDQzI2MjBGMTI4UlNNX1IyMikgfHwgZGVmaW5lZChDQzI2MjBGMTI4UlNNKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MjAwNDIyCisjZWxpZiBkZWZpbmVkKENDMjYyMEYxMjhfUjIyKSAgICB8fCBkZWZpbmVkKENDMjYyMEYxMjgpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYyMDAwMjIKKy8qIENDMjYzMEYxMjggKi8KKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOFJHWl9SMjApIHx8IGRlZmluZWQoQ0MyNjMwRjEyOFJHWl9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDA3MjAKKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOFJIQl9SMjApIHx8IGRlZmluZWQoQ0MyNjMwRjEyOFJIQl9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDA1MjAKKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOFJTTV9SMjApIHx8IGRlZmluZWQoQ0MyNjMwRjEyOFJTTV9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDA0MjAKKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOF9SMjApICAgIHx8IGRlZmluZWQoQ0MyNjMwRjEyOF9SMjEpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDAwMjAKKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOFJHWl9SMjIpIHx8IGRlZmluZWQoQ0MyNjMwRjEyOFJHWikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjMwMDcyMgorI2VsaWYgZGVmaW5lZChDQzI2MzBGMTI4UkhCX1IyMikgfHwgZGVmaW5lZChDQzI2MzBGMTI4UkhCKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2MzAwNTIyCisjZWxpZiBkZWZpbmVkKENDMjYzMEYxMjhSU01fUjIyKSB8fCBkZWZpbmVkKENDMjYzMEYxMjhSU00pCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjYzMDA0MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjMwRjEyOF9SMjIpICAgIHx8IGRlZmluZWQoQ0MyNjMwRjEyOCkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjMwMDAyMgorLyogQ0MyNjQwRjEyOCAqLworI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4UkdaX1IyMCkgfHwgZGVmaW5lZChDQzI2NDBGMTI4UkdaX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDcyMAorI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4UkhCX1IyMCkgfHwgZGVmaW5lZChDQzI2NDBGMTI4UkhCX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDUyMAorI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4UlNNX1IyMCkgfHwgZGVmaW5lZChDQzI2NDBGMTI4UlNNX1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDQyMAorI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4X1IyMCkgICAgfHwgZGVmaW5lZChDQzI2NDBGMTI4X1IyMSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDAyMAorI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4UkdaX1IyMikgfHwgZGVmaW5lZChDQzI2NDBGMTI4UkdaKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NDAwNzIyCisjZWxpZiBkZWZpbmVkKENDMjY0MEYxMjhSSEJfUjIyKSB8fCBkZWZpbmVkKENDMjY0MEYxMjhSSEIpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY0MDA1MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjQwRjEyOFJTTV9SMjIpIHx8IGRlZmluZWQoQ0MyNjQwRjEyOFJTTSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjQwMDQyMgorI2VsaWYgZGVmaW5lZChDQzI2NDBGMTI4X1IyMikgICAgfHwgZGVmaW5lZChDQzI2NDBGMTI4KQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NDAwMDIyCisvKiBDQzI2NTBGMTI4ICovCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhSR1pfUjIwKSB8fCBkZWZpbmVkKENDMjY1MEYxMjhSR1pfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwNzIwCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhSSEJfUjIwKSB8fCBkZWZpbmVkKENDMjY1MEYxMjhSSEJfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwNTIwCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhSU01fUjIwKSB8fCBkZWZpbmVkKENDMjY1MEYxMjhSU01fUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwNDIwCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhfUjIwKSAgICB8fCBkZWZpbmVkKENDMjY1MEYxMjhfUjIxKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwMDIwCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhSR1pfUjIyKSB8fCBkZWZpbmVkKENDMjY1MEYxMjhSR1opCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY1MDA3MjIKKyNlbGlmIGRlZmluZWQoQ0MyNjUwRjEyOFJIQl9SMjIpIHx8IGRlZmluZWQoQ0MyNjUwRjEyOFJIQikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMDUyMgorI2VsaWYgZGVmaW5lZChDQzI2NTBGMTI4UlNNX1IyMikgfHwgZGVmaW5lZChDQzI2NTBGMTI4UlNNKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDI2NTAwNDIyCisjZWxpZiBkZWZpbmVkKENDMjY1MEYxMjhfUjIyKSAgICB8fCBkZWZpbmVkKENDMjY1MEYxMjgpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MjY1MDAwMjIKKy8qIENDMjY1MEwxMjggKE9UUCkgKi8KKyNlbGlmIGRlZmluZWQoQ0MyNjUwTDEyOCkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgyNjUwMTcxMAorLyogQ0MxMzEwRjEyOCAqLworI2VsaWYgZGVmaW5lZChDQzEzMTBGMTI4UkdaX1IyMCkgfHwgZGVmaW5lZChDQzEzMTBGMTI4UkdaKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDEzMTAwNzIwCisjZWxpZiBkZWZpbmVkKENDMTMxMEYxMjhSSEJfUjIwKSB8fCBkZWZpbmVkKENDMTMxMEYxMjhSSEIpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MTMxMDA1MjAKKyNlbGlmIGRlZmluZWQoQ0MxMzEwRjEyOFJTTV9SMjApIHx8IGRlZmluZWQoQ0MxMzEwRjEyOFJTTSkKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgxMzEwMDQyMAorI2VsaWYgZGVmaW5lZChDQzEzMTBGMTI4X1IyMCkgICAgfHwgZGVmaW5lZChDQzEzMTBGMTI4KQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDEzMTAwMDIwCisvKiBDQzEzNTBGMTI4ICovCisjZWxpZiBkZWZpbmVkKENDMTM1MEYxMjhSR1pfUjIwKSB8fCBkZWZpbmVkKENDMTM1MEYxMjhSR1opCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MTM1MDA3MjAKKyNlbGlmIGRlZmluZWQoQ0MxMzUwRjEyOFJIQl9SMjApIHx8IGRlZmluZWQoQ0MxMzUwRjEyOFJIQikKKyAgICAjZGVmaW5lIENDX0NISVBfSUQgMHgxMzUwMDUyMAorI2VsaWYgZGVmaW5lZChDQzEzNTBGMTI4UlNNX1IyMCkgfHwgZGVmaW5lZChDQzEzNTBGMTI4UlNNKQorICAgICNkZWZpbmUgQ0NfQ0hJUF9JRCAweDEzNTAwNDIwCisjZWxpZiBkZWZpbmVkKENDMTM1MEYxMjhfUjIwKSAgICB8fCBkZWZpbmVkKENDMTM1MEYxMjgpCisgICAgI2RlZmluZSBDQ19DSElQX0lEIDB4MTM1MDAwMjAKKyNlbmRpZgorCisjZGVmaW5lIENDX0dFVF9DSElQX0ZBTUlMWSAweDI2CisjZGVmaW5lIENDX0dFVF9DSElQX09QVElPTiAweDAKKyNkZWZpbmUgQ0NfR0VUX0NISVBfSFdSRVYgMHgyMgorCisjaWZkZWYgQ0NfQ0hJUF9JRAorICAgIC8qIERlZmluZSBjaGlwIHBhY2thZ2Ugb25seSBpZiBzcGVjaWZpZWQgKi8KKyAgICAjaWYgKENDX0NISVBfSUQgJiAweDAwMDAwRjAwKSAhPSAwCisgICAgICAgICNkZWZpbmUgQ0NfR0VUX0NISVBfUEFDS0FHRSAoKChDQ19DSElQX0lEKSAmIDB4MDAwMDBGMDApID4+IDgpCisgICAgI2VuZGlmCisKKyAgICAvKiBEZWZpbmUgY2hpcCBkZXZpY2UgKi8KKyAgICAjZGVmaW5lIENDX0dFVF9DSElQX0RFVklDRSAoKChDQ19DSElQX0lEKSAmIDB4RkZGRjAwMDApID4+IDE2KQorCisgICAgLyogVGhlIGNoaXAgZmFtaWx5LCBvcHRpb24gYW5kIHBhY2thZ2Ugc2hhbGwgbWF0Y2ggdGhlIERyaXZlckxpYiByZWxlYXNlICovCisgICAgI2lmIChDQ19HRVRfQ0hJUF9GQU1JTFkgIT0gKChDQ19DSElQX0lEICYgMHhGRjAwMDAwMCkgPj4gMjQpKQorICAgICAgICAjZXJyb3IgIlNwZWNpZmllZCBjaGlwIGZhbWlseSBkb2VzIG5vdCBtYXRjaCBEcml2ZXJMaWIgcmVsZWFzZSIKKyAgICAjZW5kaWYKKyAgICAjaWYgKENDX0dFVF9DSElQX09QVElPTiAhPSAoKENDX0NISVBfSUQgJiAweDAwMDBGMDAwKSA+PiAxMikpCisgICAgICAgICNlcnJvciAiU3BlY2lmaWVkIGNoaXAgb3B0aW9uIChPVFApIGRvZXMgbm90IG1hdGNoIERyaXZlckxpYiByZWxlYXNlIgorICAgICNlbmRpZgorICAgICNpZiAoQ0NfR0VUX0NISVBfSFdSRVYgICE9ICgoQ0NfQ0hJUF9JRCAmIDB4MDAwMDAwRkYpID4+IDApKQorICAgICAgICAjZXJyb3IgIlNwZWNpZmllZCBjaGlwIGhhcmR3YXJlIHJldmlzaW9uIGRvZXMgbm90IG1hdGNoIERyaXZlckxpYiByZWxlYXNlIgorICAgICNlbmRpZgorI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19IV19DSElQX0RFRl9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBDbG9zZSB0aGUgRG94eWdlbiBncm91cC4KKy8vISBAfQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9kd3QuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9kd3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzMzMDVkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X2R3dC5oCkBAIC0wLDAgKzEsODU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY3B1X2R3dF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19DUFVfRFdUX0hfXworI2RlZmluZSBfX0hXX0NQVV9EV1RfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQ1BVX0RXVCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb250cm9sCisjZGVmaW5lIENQVV9EV1RfT19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ3VycmVudCBQQyBTYW1wbGVyIEN5Y2xlIENvdW50CisjZGVmaW5lIENQVV9EV1RfT19DWUNDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gQ1BJIENvdW50CisjZGVmaW5lIENQVV9EV1RfT19DUElDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50CisjZGVmaW5lIENQVV9EV1RfT19FWENDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gU2xlZXAgQ291bnQKKyNkZWZpbmUgQ1BVX0RXVF9PX1NMRUVQQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBMU1UgQ291bnQKKyNkZWZpbmUgQ1BVX0RXVF9PX0xTVUNOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBGb2xkIENvdW50CisjZGVmaW5lIENQVV9EV1RfT19GT0xEQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gUHJvZ3JhbSBDb3VudGVyIFNhbXBsZQorI2RlZmluZSBDUFVfRFdUX09fUENTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIENvbXBhcmF0b3IgMAorI2RlZmluZSBDUFVfRFdUX09fQ09NUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIE1hc2sgMAorI2RlZmluZSBDUFVfRFdUX09fTUFTSzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIEZ1bmN0aW9uIDAKKyNkZWZpbmUgQ1BVX0RXVF9PX0ZVTkNUSU9OMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBDb21wYXJhdG9yIDEKKyNkZWZpbmUgQ1BVX0RXVF9PX0NPTVAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBNYXNrIDEKKyNkZWZpbmUgQ1BVX0RXVF9PX01BU0sxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBGdW5jdGlvbiAxCisjZGVmaW5lIENQVV9EV1RfT19GVU5DVElPTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gQ29tcGFyYXRvciAyCisjZGVmaW5lIENQVV9EV1RfT19DT01QMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8gTWFzayAyCisjZGVmaW5lIENQVV9EV1RfT19NQVNLMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKworLy8gRnVuY3Rpb24gMgorI2RlZmluZSBDUFVfRFdUX09fRlVOQ1RJT04yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vIENvbXBhcmF0b3IgMworI2RlZmluZSBDUFVfRFdUX09fQ09NUDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisKKy8vIE1hc2sgMworI2RlZmluZSBDUFVfRFdUX09fTUFTSzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisKKy8vIEZ1bmN0aW9uIDMKKyNkZWZpbmUgQ1BVX0RXVF9PX0ZVTkNUSU9OMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19DVFJMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNV0gTk9DWUNDTlQKKy8vCisvLyBXaGVuIHNldCwgQ1lDQ05UIGlzIG5vdCBzdXBwb3J0ZWQuCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9OT0NZQ0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX05PQ1lDQ05UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDUFVfRFdUX0NUUkxfTk9DWUNDTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9OT0NZQ0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gTk9QUkZDTlQKKy8vCisvLyBXaGVuIHNldCwgRk9MRENOVCwgTFNVQ05ULCBTTEVFUENOVCwgRVhDQ05ULCBhbmQgQ1BJQ05UIGFyZSBub3Qgc3VwcG9ydGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfTk9QUkZDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9OT1BSRkNOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX05PUFJGQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfTk9QUkZDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjJdIENZQ0VWVEVOQQorLy8KKy8vIEVuYWJsZXMgQ3ljbGUgY291bnQgZXZlbnQuIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIFBPU1RDTlQgY291bnRlciB0cmlnZ2VycworLy8gaXQuIFNlZSBDWUNUQVAgYW5kIFBPU1RQUkVTRVQgZm9yIGRldGFpbHMuIFRoaXMgZXZlbnQgaXMgb25seSBlbWl0dGVkIGlmCisvLyBQQ1NBTVBMRUVOQSBpcyBkaXNhYmxlZC4gUENTQU1QTEVFTkEgb3ZlcnJpZGVzIHRoZSBzZXR0aW5nIG9mIHRoaXMgYml0LgorLy8KKy8vIDA6IEN5Y2xlIGNvdW50IGV2ZW50cyBkaXNhYmxlZAorLy8gMTogQ3ljbGUgY291bnQgZXZlbnRzIGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ0VWVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDRVZURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNFVlRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ0VWVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBGT0xERVZURU5BCisvLworLy8gRW5hYmxlcyBGb2xkZWQgaW5zdHJ1Y3Rpb24gY291bnQgZXZlbnQuIEVtaXRzIGFuIGV2ZW50IHdoZW4gRk9MRENOVAorLy8gb3ZlcmZsb3dzIChldmVyeSAyNTYgY3ljbGVzIG9mIGZvbGRlZCBpbnN0cnVjdGlvbnMpLiBBIGZvbGRlZCBpbnN0cnVjdGlvbiBpcworLy8gb25lIHRoYXQgZG9lcyBub3QgaW5jdXIgZXZlbiBvbmUgY3ljbGUgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIGFuIElUCisvLyBpbnN0cnVjdGlvbiBpcyBmb2xkZWQgYXdheSBhbmQgc28gZG9lcyBub3QgdXNlIHVwIG9uZSBjeWNsZS4KKy8vCisvLyAwOiBGb2xkZWQgaW5zdHJ1Y3Rpb24gY291bnQgZXZlbnRzIGRpc2FibGVkLgorLy8gMTogRm9sZGVkIGluc3RydWN0aW9uIGNvdW50IGV2ZW50cyBlbmFibGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfRk9MREVWVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9GT0xERVZURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0ZPTERFVlRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfRk9MREVWVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIExTVUVWVEVOQQorLy8KKy8vIEVuYWJsZXMgTFNVIGNvdW50IGV2ZW50LiBFbWl0cyBhbiBldmVudCB3aGVuIExTVUNOVCBvdmVyZmxvd3MgKGV2ZXJ5IDI1NgorLy8gY3ljbGVzIG9mIExTVSBvcGVyYXRpb24pLiBMU1UgY291bnRzIGluY2x1ZGUgYWxsIExTVSBjb3N0cyBhZnRlciB0aGUgaW5pdGlhbAorLy8gY3ljbGUgZm9yIHRoZSBpbnN0cnVjdGlvbi4KKy8vCisvLyAwOiBMU1UgY291bnQgZXZlbnRzIGRpc2FibGVkLgorLy8gMTogTFNVIGNvdW50IGV2ZW50cyBlbmFibGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfTFNVRVZURU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9MU1VFVlRFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0xTVUVWVEVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfTFNVRVZURU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFNMRUVQRVZURU5BCisvLworLy8gRW5hYmxlcyBTbGVlcCBjb3VudCBldmVudC4gRW1pdHMgYW4gZXZlbnQgd2hlbiBTTEVFUENOVCBvdmVyZmxvd3MgKGV2ZXJ5IDI1NgorLy8gY3ljbGVzIHRoYXQgdGhlIHByb2Nlc3NvciBpcyBzbGVlcGluZykuCisvLworLy8gMDogU2xlZXAgY291bnQgZXZlbnRzIGRpc2FibGVkLgorLy8gMTogU2xlZXAgY291bnQgZXZlbnRzIGVuYWJsZWQuCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TTEVFUEVWVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NMRUVQRVZURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDUFVfRFdUX0NUUkxfU0xFRVBFVlRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TTEVFUEVWVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gRVhDRVZURU5BCisvLworLy8gRW5hYmxlcyBJbnRlcnJ1cHQgb3ZlcmhlYWQgZXZlbnQuIEVtaXRzIGFuIGV2ZW50IHdoZW4gRVhDQ05UIG92ZXJmbG93cworLy8gKGV2ZXJ5IDI1NiBjeWNsZXMgb2YgaW50ZXJydXB0IG92ZXJoZWFkKS4KKy8vCisvLyAweDA6IEludGVycnVwdCBvdmVyaGVhZCBldmVudCBkaXNhYmxlZC4KKy8vIDB4MTogSW50ZXJydXB0IG92ZXJoZWFkIGV2ZW50IGVuYWJsZWQuCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9FWENFVlRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0VYQ0VWVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfRFdUX0NUUkxfRVhDRVZURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9FWENFVlRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gQ1BJRVZURU5BCisvLworLy8gRW5hYmxlcyBDUEkgY291bnQgZXZlbnQuIEVtaXRzIGFuIGV2ZW50IHdoZW4gQ1BJQ05UIG92ZXJmbG93cyAoZXZlcnkgMjU2CisvLyBjeWNsZXMgb2YgbXVsdGktY3ljbGUgaW5zdHJ1Y3Rpb25zKS4KKy8vCisvLyAwOiBDUEkgY291bnRlciBldmVudHMgZGlzYWJsZWQuCisvLyAxOiBDUEkgY291bnRlciBldmVudHMgZW5hYmxlZC4KKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NQSUVWVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1BJRVZURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DUElFVlRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NQSUVWVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBFWENUUkNFTkEKKy8vCisvLyBFbmFibGVzIEludGVycnVwdCBldmVudCB0cmFjaW5nLgorLy8KKy8vIDA6IEludGVycnVwdCBldmVudCB0cmFjZSBkaXNhYmxlZC4KKy8vIDE6IEludGVycnVwdCBldmVudCB0cmFjZSBlbmFibGVkLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfRVhDVFJDRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9FWENUUkNFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0VYQ1RSQ0VOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfRVhDVFJDRU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTJdIFBDU0FNUExFRU5BCisvLworLy8gRW5hYmxlcyBQQyBTYW1wbGluZyBldmVudC4gQSBQQyBzYW1wbGUgZXZlbnQgaXMgZW1pdHRlZCB3aGVuIHRoZSBQT1NUQ05UCisvLyBjb3VudGVyIHRyaWdnZXJzIGl0LiBTZWUgQ1lDVEFQIGFuZCBQT1NUUFJFU0VUIGZvciBkZXRhaWxzLiBFbmFibGluZyB0aGlzCisvLyBiaXQgb3ZlcnJpZGVzIENZQ0VWVEVOQS4KKy8vCisvLyAwOiBQQyBTYW1wbGluZyBldmVudCBkaXNhYmxlZC4KKy8vIDE6IFNhbXBsaW5nIGV2ZW50IGVuYWJsZWQuCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QQ1NBTVBMRUVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1BDU0FNUExFRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfRFdUX0NUUkxfUENTQU1QTEVFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QQ1NBTVBMRUVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gU1lOQ1RBUAorLy8KKy8vIFNlbGVjdHMgYSBzeW5jaHJvbml6YXRpb24gcGFja2V0IHJhdGUuIENZQ0NOVEVOQSBhbmQgQ1BVX0lUTTpUQ1IuU1lOQ0VOQQorLy8gbXVzdCBhbHNvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZmVhdHVyZS4KKy8vIFN5bmNocm9uaXphdGlvbiBwYWNrZXRzIChpZiBlbmFibGVkKSBhcmUgZ2VuZXJhdGVkIG9uIHRhcCB0cmFuc2l0aW9ucyAoMCB0bzEKKy8vIG9yIDEgdG8gMCkuCisvLyBFTlVNczoKKy8vIEJJVDI4ICAgICAgICAgICAgICAgICAgICBUYXAgYXQgYml0IDI4IG9mIENZQ0NOVAorLy8gQklUMjYgICAgICAgICAgICAgICAgICAgIFRhcCBhdCBiaXQgMjYgb2YgQ1lDQ05UCisvLyBCSVQyNCAgICAgICAgICAgICAgICAgICAgVGFwIGF0IGJpdCAyNCBvZiBDWUNDTlQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZC4gTm8gc3luY2hyb25pemF0aW9uIHBhY2tldHMKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NZTkNUQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRFdUX0NUUkxfU1lOQ1RBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TWU5DVEFQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NZTkNUQVBfQklUMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfU1lOQ1RBUF9CSVQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9TWU5DVEFQX0JJVDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1NZTkNUQVBfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs5XSBDWUNUQVAKKy8vCisvLyBTZWxlY3RzIGEgdGFwIG9uIENZQ0NOVC4gVGhlc2UgYXJlIHNwYWNlZCBhdCBiaXRzIFs2XSBhbmQgWzEwXS4gV2hlbiB0aGUKKy8vIHNlbGVjdGVkIGJpdCBpbiBDWUNDTlQgY2hhbmdlcyBmcm9tIDAgdG8gMSBvciAxIHRvIDAsIGl0IGVtaXRzIGludG8gdGhlCisvLyBQT1NUQ05ULCBwb3N0LXNjYWxhciBjb3VudGVyLiBUaGF0IGNvdW50ZXIgdGhlbiBjb3VudHMgZG93bi4gT24gYSBiaXQgY2hhbmdlCisvLyB3aGVuIHBvc3Qtc2NhbGFyIGlzIDAsIGl0IHRyaWdnZXJzIGFuIGV2ZW50IGZvciBQQyBzYW1wbGluZyBvciBjeWNsZSBjb3VudAorLy8gZXZlbnQgKHNlZSBkZXRhaWxzIGluIENZQ0VWVEVOQSkuCisvLyBFTlVNczoKKy8vIEJJVDEwICAgICAgICAgICAgICAgICAgICBTZWxlY3RzIGJpdCBbMTBdIHRvIHRhcAorLy8gQklUNiAgICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgYml0IFs2XSB0byB0YXAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ1RBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDVEFQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNUQVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ1RBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDVEFQX0JJVDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNUQVBfQklUNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzg6NV0gUE9TVENOVAorLy8KKy8vIFBvc3Qtc2NhbGFyIGNvdW50ZXIgZm9yIENZQ1RBUC4gV2hlbiB0aGUgc2VsZWN0ZWQgdGFwcGVkIGJpdCBjaGFuZ2VzIGZyb20gMAorLy8gdG8gMSBvciAxIHRvIDAsIHRoZSBwb3N0IHNjYWxhciBjb3VudGVyIGlzIGRvd24tY291bnRlZCB3aGVuIG5vdCAwLiBJZiAwLCBpdAorLy8gdHJpZ2dlcnMgYW4gZXZlbnQgZm9yIFBDU0FNUExFRU5BIG9yIENZQ0VWVEVOQSB1c2UuIEl0IGFsc28gcmVsb2FkcyB3aXRoIHRoZQorLy8gdmFsdWUgZnJvbSBQT1NUUFJFU0VULgorI2RlZmluZSBDUFVfRFdUX0NUUkxfUE9TVENOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QT1NUQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxRTAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1BPU1RDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDoxXSBQT1NUUFJFU0VUCisvLworLy8gUmVsb2FkIHZhbHVlIGZvciBwb3N0LXNjYWxhciBjb3VudGVyIFBPU1RDTlQuIFdoZW4gMCwgZXZlbnRzIGFyZSB0cmlnZ2VyZWQKKy8vIG9uIGVhY2ggdGFwIGNoYW5nZSAoYSBwb3dlciBvZiAyKS4gSWYgdGhpcyBmaWVsZCBoYXMgYSBub24tMCB2YWx1ZSwgaXQgZm9ybXMKKy8vIGEgY291bnQtZG93biB2YWx1ZSwgdG8gYmUgcmVsb2FkZWQgaW50byBQT1NUQ05UIGVhY2ggdGltZSBpdCByZWFjaGVzIDAuIEZvcgorLy8gZXhhbXBsZSwgYSB2YWx1ZSAxIGluIHRoaXMgcmVnaXN0ZXIgbWVhbnMgYW4gZXZlbnQgaXMgZm9ybWVkIGV2ZXJ5IG90aGVyIHRhcAorLy8gY2hhbmdlLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfUE9TVFBSRVNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9EV1RfQ1RSTF9QT1NUUFJFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX1BPU1RQUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDWUNDTlRFTkEKKy8vCisvLyBFbmFibGUgQ1lDQ05ULCBhbGxvd2luZyBpdCB0byBpbmNyZW1lbnQgYW5kIGdlbmVyYXRlIHN5bmNocm9uaXphdGlvbiBhbmQKKy8vIGNvdW50IGV2ZW50cy4gSWYgTk9DWUNDTlQgPSAxLCB0aGlzIGJpdCByZWFkcyB6ZXJvIGFuZCBpZ25vcmUgd3JpdGVzLgorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDQ05URU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9EV1RfQ1RSTF9DWUNDTlRFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0RXVF9DVFJMX0NZQ0NOVEVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRFdUX0NUUkxfQ1lDQ05URU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0NZQ0NOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENZQ0NOVAorLy8KKy8vIEN1cnJlbnQgUEMgU2FtcGxlciBDeWNsZSBDb3VudGVyIGNvdW50IHZhbHVlLiBXaGVuIGVuYWJsZWQsIHRoaXMgY291bnRlcgorLy8gY291bnRzIHRoZSBudW1iZXIgb2YgY29yZSBjeWNsZXMsIGV4Y2VwdCB3aGVuIHRoZSBjb3JlIGlzIGhhbHRlZC4gVGhlIGN5Y2xlCisvLyBjb3VudGVyIGlzIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIsIGNvdW50aW5nIHVwd2FyZHMgKHRoaXMgY291bnRlciB3aWxsIG5vdAorLy8gYWR2YW5jZSBpbiBwb3dlciBtb2RlcyB3aGVyZSBmcmVlLXJ1bm5pbmcgY2xvY2sgdG8gQ1BVIHN0b3BzKS4gSXQgd3JhcHMKKy8vIGFyb3VuZCB0byAwIG9uIG92ZXJmbG93LiBUaGUgZGVidWdnZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgdG8gMCB3aGVuIGZpcnN0CisvLyBlbmFibGluZy4KKyNkZWZpbmUgQ1BVX0RXVF9DWUNDTlRfQ1lDQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfRFdUX0NZQ0NOVF9DWUNDTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9EV1RfQ1lDQ05UX0NZQ0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fQ1BJQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gQ1BJQ05UCisvLworLy8gQ3VycmVudCBDUEkgY291bnRlciB2YWx1ZS4gSW5jcmVtZW50cyBvbiB0aGUgYWRkaXRpb25hbCBjeWNsZXMgKHRoZSBmaXJzdAorLy8gY3ljbGUgaXMgbm90IGNvdW50ZWQpIHJlcXVpcmVkIHRvIGV4ZWN1dGUgYWxsIGluc3RydWN0aW9ucyBleGNlcHQgdGhvc2UKKy8vIHJlY29yZGVkIGJ5IExTVUNOVC4gVGhpcyBjb3VudGVyIGFsc28gaW5jcmVtZW50cyBvbiBhbGwgaW5zdHJ1Y3Rpb24gZmV0Y2gKKy8vIHN0YWxscy4gSWYgQ1RSTC5DUElFVlRFTkEgaXMgc2V0LCBhbiBldmVudCBpcyBlbWl0dGVkIHdoZW4gdGhlIGNvdW50ZXIKKy8vIG92ZXJmbG93cy4gVGhpcyBjb3VudGVyIGluaXRpYWxpemVzIHRvIDAgd2hlbiBpdCBpcyBlbmFibGVkIHVzaW5nCisvLyBDVFJMLkNQSUVWVEVOQS4KKyNkZWZpbmUgQ1BVX0RXVF9DUElDTlRfQ1BJQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfRFdUX0NQSUNOVF9DUElDTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9EV1RfQ1BJQ05UX0NQSUNOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fRVhDQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gRVhDQ05UCisvLworLy8gQ3VycmVudCBpbnRlcnJ1cHQgb3ZlcmhlYWQgY291bnRlciB2YWx1ZS4gQ291bnRzIHRoZSB0b3RhbCBjeWNsZXMgc3BlbnQgaW4KKy8vIGludGVycnVwdCBwcm9jZXNzaW5nIChmb3IgZXhhbXBsZSBlbnRyeSBzdGFja2luZywgcmV0dXJuIHVuc3RhY2tpbmcsCisvLyBwcmUtZW1wdGlvbikuIEFuIGV2ZW50IGlzIGVtaXR0ZWQgb24gY291bnRlciBvdmVyZmxvdyAoZXZlcnkgMjU2IGN5Y2xlcykuCisvLyBUaGlzIGNvdW50ZXIgaW5pdGlhbGl6ZXMgdG8gMCB3aGVuIGl0IGlzIGVuYWJsZWQgdXNpbmcgQ1RSTC5FWENFVlRFTkEuCisjZGVmaW5lIENQVV9EV1RfRVhDQ05UX0VYQ0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX0RXVF9FWENDTlRfRVhDQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfRFdUX0VYQ0NOVF9FWENDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX1NMRUVQQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gU0xFRVBDTlQKKy8vCisvLyBTbGVlcCBjb3VudGVyLiBDb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgZHVyaW5nIHdoaWNoIHRoZSBwcm9jZXNzb3IgaXMKKy8vIHNsZWVwaW5nLiBBbiBldmVudCBpcyBlbWl0dGVkIG9uIGNvdW50ZXIgb3ZlcmZsb3cgKGV2ZXJ5IDI1NiBjeWNsZXMpLiBUaGlzCisvLyBjb3VudGVyIGluaXRpYWxpemVzIHRvIDAgd2hlbiBpdCBpcyBlbmFibGVkIHVzaW5nIENUUkwuU0xFRVBFVlRFTkEuIE5vdGUKKy8vIHRoYXQgdGhlIHNsZWVwIGNvdW50ZXIgaXMgY2xvY2tlZCB1c2luZyBDUFUncyBmcmVlLXJ1bm5pbmcgY2xvY2suIEluIHNvbWUKKy8vIHBvd2VyIG1vZGVzIHRoZSBmcmVlLXJ1bm5pbmcgY2xvY2sgdG8gQ1BVIGlzIGdhdGVkIHRvIG1pbmltaXplIHBvd2VyCisvLyBjb25zdW1wdGlvbi4gVGhpcyBtZWFucyB0aGF0IHRoZSBzbGVlcCBjb3VudGVyIHdpbGwgYmUgaW52YWxpZCBpbiB0aGVzZQorLy8gcG93ZXIgbW9kZXMuCisjZGVmaW5lIENQVV9EV1RfU0xFRVBDTlRfU0xFRVBDTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX0RXVF9TTEVFUENOVF9TTEVFUENOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfRFdUX1NMRUVQQ05UX1NMRUVQQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0xTVUNOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIExTVUNOVAorLy8KKy8vIExTVSBjb3VudGVyLiBUaGlzIGNvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIGN5Y2xlcyB0aGF0IHRoZSBwcm9jZXNzb3IgaXMKKy8vIHByb2Nlc3NpbmcgYW4gTFNVIG9wZXJhdGlvbi4gVGhlIGluaXRpYWwgZXhlY3V0aW9uIGNvc3Qgb2YgdGhlIGluc3RydWN0aW9uCisvLyBpcyBub3QgY291bnRlZC4gRm9yIGV4YW1wbGUsIGFuIExEUiB0aGF0IHRha2VzIHR3byBjeWNsZXMgdG8gY29tcGxldGUKKy8vIGluY3JlbWVudHMgdGhpcyBjb3VudGVyIG9uZSBjeWNsZS4gRXF1aXZhbGVudGx5LCBhbiBMRFIgdGhhdCBzdGFsbHMgZm9yIHR3bworLy8gY3ljbGVzIChpLmUuIHRha2VzIGZvdXIgY3ljbGVzIHRvIGV4ZWN1dGUpLCBpbmNyZW1lbnRzIHRoaXMgY291bnRlciB0aHJlZQorLy8gdGltZXMuIEFuIGV2ZW50IGlzIGVtaXR0ZWQgb24gY291bnRlciBvdmVyZmxvdyAoZXZlcnkgMjU2IGN5Y2xlcykuIFRoaXMKKy8vIGNvdW50ZXIgaW5pdGlhbGl6ZXMgdG8gMCB3aGVuIGl0IGlzIGVuYWJsZWQgdXNpbmcgQ1RSTC5MU1VFVlRFTkEuCisjZGVmaW5lIENQVV9EV1RfTFNVQ05UX0xTVUNOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX0RXVF9MU1VDTlRfTFNVQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfRFdUX0xTVUNOVF9MU1VDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0ZPTERDTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBGT0xEQ05UCisvLworLy8gVGhpcyBjb3VudHMgdGhlIHRvdGFsIG51bWJlciBmb2xkZWQgaW5zdHJ1Y3Rpb25zLiBUaGlzIGNvdW50ZXIgaW5pdGlhbGl6ZXMKKy8vIHRvIDAgd2hlbiBpdCBpcyBlbmFibGVkIHVzaW5nIENUUkwuRk9MREVWVEVOQS4KKyNkZWZpbmUgQ1BVX0RXVF9GT0xEQ05UX0ZPTERDTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfRFdUX0ZPTERDTlRfRk9MRENOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9EV1RfRk9MRENOVF9GT0xEQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fUENTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEVJQVNBTVBMRQorLy8KKy8vIEV4ZWN1dGlvbiBpbnN0cnVjdGlvbiBhZGRyZXNzIHNhbXBsZSwgb3IgMHhGRkZGRkZGRiBpZiB0aGUgY29yZSBpcyBoYWx0ZWQuCisjZGVmaW5lIENQVV9EV1RfUENTUl9FSUFTQU1QTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0RXVF9QQ1NSX0VJQVNBTVBMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfRFdUX1BDU1JfRUlBU0FNUExFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0NPTVAwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ09NUAorLy8KKy8vIFJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QgUEMgb3IgdGhlIGRhdGEgYWRkcmVzcyBhcyBnaXZlbiBieQorLy8gRlVOQ1RJT04wLiBDb21wYXJhdG9yIDAgY2FuIGFsc28gY29tcGFyZSBhZ2FpbnN0IHRoZSB2YWx1ZSBvZiB0aGUgUEMgU2FtcGxlcgorLy8gQ291bnRlciAoQ1lDQ05UKS4KKyNkZWZpbmUgQ1BVX0RXVF9DT01QMF9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfRFdUX0NPTVAwX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9EV1RfQ09NUDBfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fTUFTSzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBNQVNLCisvLworLy8gTWFzayBvbiBkYXRhIGFkZHJlc3Mgd2hlbiBtYXRjaGluZyBhZ2FpbnN0IENPTVAwLiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZQorLy8gaWdub3JlIG1hc2suIFRoYXQgaXMsIERXVCBtYXRjaGluZyBpcyBwZXJmb3JtZWQgYXM6KEFERFIgQU5EZWQgd2l0aCAoMHhGRkZGCisvLyBsZWZ0IGJpdC1zaGlmdGVkIGJ5IE1BU0spKSA9PSBDT01QMC4gSG93ZXZlciwgdGhlIGFjdHVhbCBjb21wYXJpc29uIGlzCisvLyBzbGlnaHRseSBtb3JlIGNvbXBsZXggdG8gZW5hYmxlIG1hdGNoaW5nIGFuIGFkZHJlc3Mgd2hlcmV2ZXIgaXQgYXBwZWFycyBvbiBhCisvLyBidXMuIFNvLCBpZiBDT01QMCBpcyAzLCB0aGlzIG1hdGNoZXMgYSB3b3JkIGFjY2VzcyBvZiAwLCBiZWNhdXNlIDMgd291bGQgYmUKKy8vIHdpdGhpbiB0aGUgd29yZC4KKyNkZWZpbmUgQ1BVX0RXVF9NQVNLMF9NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX01BU0swX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfTUFTSzBfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fRlVOQ1RJT04wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gTUFUQ0hFRAorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBjb21wYXJhdG9yIG1hdGNoZXMsIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUKKy8vIG9wZXJhdGlvbiBkZWZpbmVkIGJ5IEZVTkNUSU9OIGhhcyBvY2N1cnJlZCBzaW5jZSB0aGlzIGJpdCB3YXMgbGFzdCByZWFkLgorLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBvbiByZWFkLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9NQVRDSEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX01BVENIRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfTUFUQ0hFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9NQVRDSEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICAgWzddIENZQ01BVENICisvLworLy8gVGhpcyBiaXQgaXMgb25seSBhdmFpbGFibGUgaW4gY29tcGFyYXRvciAwLiBXaGVuIHNldCwgQ09NUDAgd2lsbCBjb21wYXJlCisvLyBhZ2FpbnN0IHRoZSBjeWNsZSBjb3VudGVyIChDWUNDTlQpLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9DWUNNQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0NZQ01BVENIX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfQ1lDTUFUQ0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9DWUNNQVRDSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzVdIEVNSVRSQU5HRQorLy8KKy8vIEVtaXQgcmFuZ2UgZmllbGQuIFRoaXMgYml0IHBlcm1pdHMgZW1pdHRpbmcgb2Zmc2V0IHdoZW4gcmFuZ2UgbWF0Y2ggb2NjdXJzLgorLy8gUEMgc2FtcGxpbmcgaXMgbm90IHN1cHBvcnRlZCB3aGVuIGVtaXQgcmFuZ2UgaXMgZW5hYmxlZC4KKy8vIFRoaXMgZmllbGQgb25seSBhcHBsaWVzIGZvcjogRlVOQ1RJT04gPSAxLCAyLCAzLCAxMiwgMTMsIDE0LCBhbmQgMTUuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0VNSVRSQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfRU1JVFJBTkdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9FTUlUUkFOR0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0VNSVRSQU5HRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzM6MF0gRlVOQ1RJT04KKy8vCisvLyBGdW5jdGlvbiBzZXR0aW5ncy4KKy8vCisvLyAweDA6IERpc2FibGVkCisvLyAweDE6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBhbmQgZW1pdCBQQyB0aHJvdWdoIElUTS4gRU1JVFJBTkdFID0gMSwgZW1pdAorLy8gYWRkcmVzcyBvZmZzZXQgdGhyb3VnaCBJVE0KKy8vIDB4MjogRU1JVFJBTkdFID0gMCwgZW1pdCBkYXRhIHRocm91Z2ggSVRNIG9uIHJlYWQgYW5kIHdyaXRlLiBFTUlUUkFOR0UgPSAxLAorLy8gZW1pdCBkYXRhIGFuZCBhZGRyZXNzIG9mZnNldCB0aHJvdWdoIElUTSBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHgzOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvciB3cml0ZS4KKy8vIEVNSVRSQU5HRSA9IDEsIGVtaXQgYWRkcmVzcyBvZmZzZXQgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvcgorLy8gd3JpdGUuCisvLyAweDQ6IFdhdGNocG9pbnQgb24gUEMgbWF0Y2guCisvLyAweDU6IFdhdGNocG9pbnQgb24gcmVhZC4KKy8vIDB4NjogV2F0Y2hwb2ludCBvbiB3cml0ZS4KKy8vIDB4NzogV2F0Y2hwb2ludCBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHg4OiBFVE0gdHJpZ2dlciBvbiBQQyBtYXRjaAorLy8gMHg5OiBFVE0gdHJpZ2dlciBvbiByZWFkCisvLyAweEE6IEVUTSB0cmlnZ2VyIG9uIHdyaXRlCisvLyAweEI6IEVUTSB0cmlnZ2VyIG9uIHJlYWQgb3Igd3JpdGUKKy8vIDB4QzogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLCBzYW1wbGUKKy8vIERhZGRyIChsb3dlciAxNiBiaXRzKSBmb3IgcmVhZCB0cmFuc2ZlcnMKKy8vIDB4RDogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwgc2FtcGxlCisvLyBEYWRkciAobG93ZXIgMTYgYml0cykgZm9yIHdyaXRlIHRyYW5zZmVycworLy8gMHhFOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwKKy8vIHNhbXBsZSBEYWRkciAobG93ZXIgMTYgYml0cykgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycworLy8gMHhGOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsCisvLyBzYW1wbGUgRGFkZHIgKGxvd2VyIDE2IGJpdHMpICsgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzCisvLworLy8gTm90ZSAxOiBJZiB0aGUgRVRNIGlzIG5vdCBmaXR0ZWQsIHRoZW4gRVRNIHRyaWdnZXIgaXMgbm90IHBvc3NpYmxlLgorLy8gTm90ZSAyOiBEYXRhIHZhbHVlIGlzIG9ubHkgc2FtcGxlZCBmb3IgYWNjZXNzZXMgdGhhdCBkbyBub3QgZmF1bHQgKE1QVSBvcgorLy8gYnVzIGZhdWx0KS4gVGhlIFBDIGlzIHNhbXBsZWQgaXJyZXNwZWN0aXZlIG9mIGFueSBmYXVsdHMuIFRoZSBQQyBpcyBvbmx5CisvLyBzYW1wbGVkIGZvciB0aGUgZmlyc3QgYWRkcmVzcyBvZiBhIGJ1cnN0LgorLy8gTm90ZSAzOiBQQyBtYXRjaCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHdhdGNocG9pbnRzIGJlY2F1c2UgaXQgc3RvcHMgYWZ0ZXIKKy8vIHRoZSBpbnN0cnVjdGlvbi4gSXQgbWFpbmx5IGd1YXJkcyBhbmQgdHJpZ2dlcnMgdGhlIEVUTS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjBfRlVOQ1RJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMF9GVU5DVElPTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04wX0ZVTkNUSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fQ09NUDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDT01QCisvLworLy8gUmVmZXJlbmNlIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdCBQQyBvciB0aGUgZGF0YSBhZGRyZXNzIGFzIGdpdmVuIGJ5CisvLyBGVU5DVElPTjEuCisvLyBDb21wYXJhdG9yIDEgY2FuIGFsc28gY29tcGFyZSBkYXRhIHZhbHVlcy4gU28gdGhpcyByZWdpc3RlciBjYW4gY29udGFpbgorLy8gcmVmZXJlbmNlIHZhbHVlcyBmb3IgZGF0YSBtYXRjaGluZy4KKyNkZWZpbmUgQ1BVX0RXVF9DT01QMV9DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfRFdUX0NPTVAxX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9EV1RfQ09NUDFfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fTUFTSzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBNQVNLCisvLworLy8gTWFzayBvbiBkYXRhIGFkZHJlc3Mgd2hlbiBtYXRjaGluZyBhZ2FpbnN0IENPTVAxLiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZQorLy8gaWdub3JlIG1hc2suIFRoYXQgaXMsIERXVCBtYXRjaGluZyBpcyBwZXJmb3JtZWQgYXM6KEFERFIgQU5EZWQgd2l0aCAoMHhGRkZGCisvLyBsZWZ0IGJpdC1zaGlmdGVkIGJ5IE1BU0spKSA9PSBDT01QMS4gSG93ZXZlciwgdGhlIGFjdHVhbCBjb21wYXJpc29uIGlzCisvLyBzbGlnaHRseSBtb3JlIGNvbXBsZXggdG8gZW5hYmxlIG1hdGNoaW5nIGFuIGFkZHJlc3Mgd2hlcmV2ZXIgaXQgYXBwZWFycyBvbiBhCisvLyBidXMuIFNvLCBpZiBDT01QMSBpcyAzLCB0aGlzIG1hdGNoZXMgYSB3b3JkIGFjY2VzcyBvZiAwLCBiZWNhdXNlIDMgd291bGQgYmUKKy8vIHdpdGhpbiB0aGUgd29yZC4KKyNkZWZpbmUgQ1BVX0RXVF9NQVNLMV9NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX01BU0sxX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfTUFTSzFfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fRlVOQ1RJT04xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gTUFUQ0hFRAorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBjb21wYXJhdG9yIG1hdGNoZXMsIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUKKy8vIG9wZXJhdGlvbiBkZWZpbmVkIGJ5IEZVTkNUSU9OIGhhcyBvY2N1cnJlZCBzaW5jZSB0aGlzIGJpdCB3YXMgbGFzdCByZWFkLgorLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBvbiByZWFkLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9NQVRDSEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX01BVENIRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfTUFUQ0hFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9NQVRDSEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMTk6MTZdIERBVEFWQUREUjEKKy8vCisvLyBJZGVudGl0eSBvZiBhIHNlY29uZCBsaW5rZWQgYWRkcmVzcyBjb21wYXJhdG9yIGZvciBkYXRhIHZhbHVlIG1hdGNoaW5nIHdoZW4KKy8vIERBVEFWTUFUQ0ggPT0gMSBhbmQgTE5LMUVOQSA9PSAxLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVkFERFIxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWQUREUjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZBRERSMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBEQVRBVkFERFIwCisvLworLy8gSWRlbnRpdHkgb2YgYSBsaW5rZWQgYWRkcmVzcyBjb21wYXJhdG9yIGZvciBkYXRhIHZhbHVlIG1hdGNoaW5nIHdoZW4KKy8vIERBVEFWTUFUQ0ggPT0gMS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZBRERSMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVkFERFIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWQUREUjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gREFUQVZTSVpFCisvLworLy8gRGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBpbiB0aGUgQ09NUDEgcmVnaXN0ZXIgdGhhdCBpcyB0byBiZSBtYXRjaGVkOgorLy8KKy8vIDB4MDogQnl0ZQorLy8gMHgxOiBIYWxmd29yZAorLy8gMHgyOiBXb3JkCisvLyAweDM6IFVucHJlZGljdGFibGUuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWU0laRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZTSVpFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVlNJWkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIExOSzFFTkEKKy8vCisvLyBSZWFkIG9ubHkgYml0LWZpZWxkIG9ubHkgc3VwcG9ydGVkIGluIGNvbXBhcmF0b3IgMS4KKy8vCisvLyAwOiBEQVRBVkFERFIxIG5vdCBzdXBwb3J0ZWQKKy8vIDE6IERBVEFWQUREUjEgc3VwcG9ydGVkIChlbmFibGVkKQorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9MTksxRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0xOSzFFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfTE5LMUVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9MTksxRU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIERBVEFWTUFUQ0gKKy8vCisvLyBEYXRhIG1hdGNoIGZlYXR1cmU6CisvLworLy8gMDogUGVyZm9ybSBhZGRyZXNzIGNvbXBhcmlzb24KKy8vIDE6IFBlcmZvcm0gZGF0YSB2YWx1ZSBjb21wYXJlLiBUaGUgY29tcGFyYXRvcnMgZ2l2ZW4gYnkgREFUQVZBRERSMCBhbmQKKy8vIERBVEFWQUREUjEgcHJvdmlkZSB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgY29tcGFyaXNvbi4gVGhlIEZVTkNUSU9OIHNldHRpbmcKKy8vIGZvciB0aGUgY29tcGFyYXRvcnMgZ2l2ZW4gYnkgREFUQVZBRERSMCBhbmQgREFUQVZBRERSMSBhcmUgb3ZlcnJpZGRlbiBhbmQKKy8vIHRob3NlIGNvbXBhcmF0b3JzIG9ubHkgcHJvdmlkZSB0aGUgYWRkcmVzcyBtYXRjaCBmb3IgdGhlIGRhdGEgY29tcGFyaXNvbi4KKy8vCisvLyBUaGlzIGJpdCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBjb21wYXJhdG9yIDEuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfREFUQVZNQVRDSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9EQVRBVk1BVENIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0RBVEFWTUFUQ0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNV0gRU1JVFJBTkdFCisvLworLy8gRW1pdCByYW5nZSBmaWVsZC4gVGhpcyBiaXQgcGVybWl0cyBlbWl0dGluZyBvZmZzZXQgd2hlbiByYW5nZSBtYXRjaCBvY2N1cnMuCisvLyBQQyBzYW1wbGluZyBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gZW1pdCByYW5nZSBpcyBlbmFibGVkLgorLy8gVGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgZm9yOiBGVU5DVElPTiA9IDEsIDIsIDMsIDEyLCAxMywgMTQsIGFuZCAxNS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfRU1JVFJBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9FTUlUUkFOR0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0VNSVRSQU5HRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfRU1JVFJBTkdFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbMzowXSBGVU5DVElPTgorLy8KKy8vIEZ1bmN0aW9uIHNldHRpbmdzOgorLy8KKy8vIDB4MDogRGlzYWJsZWQKKy8vIDB4MTogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGFuZCBlbWl0IFBDIHRocm91Z2ggSVRNLiBFTUlUUkFOR0UgPSAxLCBlbWl0CisvLyBhZGRyZXNzIG9mZnNldCB0aHJvdWdoIElUTQorLy8gMHgyOiBFTUlUUkFOR0UgPSAwLCBlbWl0IGRhdGEgdGhyb3VnaCBJVE0gb24gcmVhZCBhbmQgd3JpdGUuIEVNSVRSQU5HRSA9IDEsCisvLyBlbWl0IGRhdGEgYW5kIGFkZHJlc3Mgb2Zmc2V0IHRocm91Z2ggSVRNIG9uIHJlYWQgb3Igd3JpdGUuCisvLyAweDM6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBQQyBhbmQgZGF0YSB2YWx1ZSB0aHJvdWdoIElUTSBvbiByZWFkIG9yIHdyaXRlLgorLy8gRU1JVFJBTkdFID0gMSwgZW1pdCBhZGRyZXNzIG9mZnNldCBhbmQgZGF0YSB2YWx1ZSB0aHJvdWdoIElUTSBvbiByZWFkIG9yCisvLyB3cml0ZS4KKy8vIDB4NDogV2F0Y2hwb2ludCBvbiBQQyBtYXRjaC4KKy8vIDB4NTogV2F0Y2hwb2ludCBvbiByZWFkLgorLy8gMHg2OiBXYXRjaHBvaW50IG9uIHdyaXRlLgorLy8gMHg3OiBXYXRjaHBvaW50IG9uIHJlYWQgb3Igd3JpdGUuCisvLyAweDg6IEVUTSB0cmlnZ2VyIG9uIFBDIG1hdGNoCisvLyAweDk6IEVUTSB0cmlnZ2VyIG9uIHJlYWQKKy8vIDB4QTogRVRNIHRyaWdnZXIgb24gd3JpdGUKKy8vIDB4QjogRVRNIHRyaWdnZXIgb24gcmVhZCBvciB3cml0ZQorLy8gMHhDOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgZGF0YSBmb3IgcmVhZCB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsIHNhbXBsZQorLy8gRGFkZHIgKGxvd2VyIDE2IGJpdHMpIGZvciByZWFkIHRyYW5zZmVycworLy8gMHhEOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLCBzYW1wbGUKKy8vIERhZGRyIChsb3dlciAxNiBiaXRzKSBmb3Igd3JpdGUgdHJhbnNmZXJzCisvLyAweEU6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBQQyArIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLAorLy8gc2FtcGxlIERhZGRyIChsb3dlciAxNiBiaXRzKSArIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzCisvLyAweEY6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBQQyArIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwKKy8vIHNhbXBsZSBEYWRkciAobG93ZXIgMTYgYml0cykgKyBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMKKy8vCisvLyBOb3RlIDE6IElmIHRoZSBFVE0gaXMgbm90IGZpdHRlZCwgdGhlbiBFVE0gdHJpZ2dlciBpcyBub3QgcG9zc2libGUuCisvLyBOb3RlIDI6IERhdGEgdmFsdWUgaXMgb25seSBzYW1wbGVkIGZvciBhY2Nlc3NlcyB0aGF0IGRvIG5vdCBmYXVsdCAoTVBVIG9yCisvLyBidXMgZmF1bHQpLiBUaGUgUEMgaXMgc2FtcGxlZCBpcnJlc3BlY3RpdmUgb2YgYW55IGZhdWx0cy4gVGhlIFBDIGlzIG9ubHkKKy8vIHNhbXBsZWQgZm9yIHRoZSBmaXJzdCBhZGRyZXNzIG9mIGEgYnVyc3QuCisvLyBOb3RlIDM6IEZVTkNUSU9OIGlzIG92ZXJyaWRkZW4gZm9yIGNvbXBhcmF0b3JzIGdpdmVuIGJ5IERBVEFWQUREUjAgYW5kCisvLyBEQVRBVkFERFIxIGlmIERBVEFWTUFUQ0ggaXMgYWxzbyBzZXQuIFRoZSBjb21wYXJhdG9ycyBnaXZlbiBieSBEQVRBVkFERFIwCisvLyBhbmQgREFUQVZBRERSMSBjYW4gdGhlbiBvbmx5IHBlcmZvcm0gYWRkcmVzcyBjb21wYXJhdG9yIG1hdGNoZXMgZm9yCisvLyBjb21wYXJhdG9yIDEgZGF0YSBtYXRjaGVzLgorLy8gTm90ZSA0OiBJZiB0aGUgZGF0YSBtYXRjaGluZyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBpbmNsdWRlZCBkdXJpbmcKKy8vIGltcGxlbWVudGF0aW9uIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzZXQgREFUQVZBRERSMCwgREFUQVZBRERSMSwgb3IKKy8vIERBVEFWTUFUQ0guIFRoaXMgbWVhbnMgdGhhdCB0aGUgZGF0YSBtYXRjaGluZyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFibGUKKy8vIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGVzdCB0aGUgYXZhaWxhYmlsaXR5IG9mIGRhdGEgbWF0Y2hpbmcgYnkgd3JpdGluZyBhbmQKKy8vIHJlYWRpbmcgREFUQVZNQVRDSC4gSWYgaXQgaXMgbm90IHNldHRhYmxlIHRoZW4gZGF0YSBtYXRjaGluZyBpcyB1bmF2YWlsYWJsZS4KKy8vIE5vdGUgNTogUEMgbWF0Y2ggaXMgbm90IHJlY29tbWVuZGVkIGZvciB3YXRjaHBvaW50cyBiZWNhdXNlIGl0IHN0b3BzIGFmdGVyCisvLyB0aGUgaW5zdHJ1Y3Rpb24uIEl0IG1haW5seSBndWFyZHMgYW5kIHRyaWdnZXJzIHRoZSBFVE0uCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04xX0ZVTkNUSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjFfRlVOQ1RJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMV9GVU5DVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0RXVF9PX0NPTVAyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ09NUAorLy8KKy8vIFJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QgUEMgb3IgdGhlIGRhdGEgYWRkcmVzcyBhcyBnaXZlbiBieQorLy8gRlVOQ1RJT04yLgorI2RlZmluZSBDUFVfRFdUX0NPTVAyX0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9EV1RfQ09NUDJfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0RXVF9DT01QMl9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19NQVNLMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIE1BU0sKKy8vCisvLyBNYXNrIG9uIGRhdGEgYWRkcmVzcyB3aGVuIG1hdGNoaW5nIGFnYWluc3QgQ09NUDIuIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlCisvLyBpZ25vcmUgbWFzay4gVGhhdCBpcywgRFdUIG1hdGNoaW5nIGlzIHBlcmZvcm1lZCBhczooQUREUiBBTkRlZCB3aXRoICgweEZGRkYKKy8vIGxlZnQgYml0LXNoaWZ0ZWQgYnkgTUFTSykpID09IENPTVAyLiBIb3dldmVyLCB0aGUgYWN0dWFsIGNvbXBhcmlzb24gaXMKKy8vIHNsaWdodGx5IG1vcmUgY29tcGxleCB0byBlbmFibGUgbWF0Y2hpbmcgYW4gYWRkcmVzcyB3aGVyZXZlciBpdCBhcHBlYXJzIG9uIGEKKy8vIGJ1cy4gU28sIGlmIENPTVAyIGlzIDMsIHRoaXMgbWF0Y2hlcyBhIHdvcmQgYWNjZXNzIG9mIDAsIGJlY2F1c2UgMyB3b3VsZCBiZQorLy8gd2l0aGluIHRoZSB3b3JkLgorI2RlZmluZSBDUFVfRFdUX01BU0syX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9EV1RfTUFTSzJfTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1BVX0RXVF9NQVNLMl9NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19GVU5DVElPTjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBNQVRDSEVECisvLworLy8gVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGNvbXBhcmF0b3IgbWF0Y2hlcywgYW5kIGluZGljYXRlcyB0aGF0IHRoZQorLy8gb3BlcmF0aW9uIGRlZmluZWQgYnkgRlVOQ1RJT04gaGFzIG9jY3VycmVkIHNpbmNlIHRoaXMgYml0IHdhcyBsYXN0IHJlYWQuCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIG9uIHJlYWQuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX01BVENIRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfTUFUQ0hFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9NQVRDSEVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX01BVENIRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgICBbNV0gRU1JVFJBTkdFCisvLworLy8gRW1pdCByYW5nZSBmaWVsZC4gVGhpcyBiaXQgcGVybWl0cyBlbWl0dGluZyBvZmZzZXQgd2hlbiByYW5nZSBtYXRjaCBvY2N1cnMuCisvLyBQQyBzYW1wbGluZyBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gZW1pdCByYW5nZSBpcyBlbmFibGVkLgorLy8gVGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgZm9yOiBGVU5DVElPTiA9IDEsIDIsIDMsIDEyLCAxMywgMTQsIGFuZCAxNS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfRU1JVFJBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9FTUlUUkFOR0VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX0VNSVRSQU5HRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfRU1JVFJBTkdFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbMzowXSBGVU5DVElPTgorLy8KKy8vIEZ1bmN0aW9uIHNldHRpbmdzLgorLy8KKy8vIDB4MDogRGlzYWJsZWQKKy8vIDB4MTogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGFuZCBlbWl0IFBDIHRocm91Z2ggSVRNLiBFTUlUUkFOR0UgPSAxLCBlbWl0CisvLyBhZGRyZXNzIG9mZnNldCB0aHJvdWdoIElUTQorLy8gMHgyOiBFTUlUUkFOR0UgPSAwLCBlbWl0IGRhdGEgdGhyb3VnaCBJVE0gb24gcmVhZCBhbmQgd3JpdGUuIEVNSVRSQU5HRSA9IDEsCisvLyBlbWl0IGRhdGEgYW5kIGFkZHJlc3Mgb2Zmc2V0IHRocm91Z2ggSVRNIG9uIHJlYWQgb3Igd3JpdGUuCisvLyAweDM6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBQQyBhbmQgZGF0YSB2YWx1ZSB0aHJvdWdoIElUTSBvbiByZWFkIG9yIHdyaXRlLgorLy8gRU1JVFJBTkdFID0gMSwgZW1pdCBhZGRyZXNzIG9mZnNldCBhbmQgZGF0YSB2YWx1ZSB0aHJvdWdoIElUTSBvbiByZWFkIG9yCisvLyB3cml0ZS4KKy8vIDB4NDogV2F0Y2hwb2ludCBvbiBQQyBtYXRjaC4KKy8vIDB4NTogV2F0Y2hwb2ludCBvbiByZWFkLgorLy8gMHg2OiBXYXRjaHBvaW50IG9uIHdyaXRlLgorLy8gMHg3OiBXYXRjaHBvaW50IG9uIHJlYWQgb3Igd3JpdGUuCisvLyAweDg6IEVUTSB0cmlnZ2VyIG9uIFBDIG1hdGNoCisvLyAweDk6IEVUTSB0cmlnZ2VyIG9uIHJlYWQKKy8vIDB4QTogRVRNIHRyaWdnZXIgb24gd3JpdGUKKy8vIDB4QjogRVRNIHRyaWdnZXIgb24gcmVhZCBvciB3cml0ZQorLy8gMHhDOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgZGF0YSBmb3IgcmVhZCB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsIHNhbXBsZQorLy8gRGFkZHIgKGxvd2VyIDE2IGJpdHMpIGZvciByZWFkIHRyYW5zZmVycworLy8gMHhEOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLCBzYW1wbGUKKy8vIERhZGRyIChsb3dlciAxNiBiaXRzKSBmb3Igd3JpdGUgdHJhbnNmZXJzCisvLyAweEU6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBQQyArIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLAorLy8gc2FtcGxlIERhZGRyIChsb3dlciAxNiBiaXRzKSArIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzCisvLyAweEY6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBQQyArIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwKKy8vIHNhbXBsZSBEYWRkciAobG93ZXIgMTYgYml0cykgKyBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMKKy8vCisvLyBOb3RlIDE6IElmIHRoZSBFVE0gaXMgbm90IGZpdHRlZCwgdGhlbiBFVE0gdHJpZ2dlciBpcyBub3QgcG9zc2libGUuCisvLyBOb3RlIDI6IERhdGEgdmFsdWUgaXMgb25seSBzYW1wbGVkIGZvciBhY2Nlc3NlcyB0aGF0IGRvIG5vdCBmYXVsdCAoTVBVIG9yCisvLyBidXMgZmF1bHQpLiBUaGUgUEMgaXMgc2FtcGxlZCBpcnJlc3BlY3RpdmUgb2YgYW55IGZhdWx0cy4gVGhlIFBDIGlzIG9ubHkKKy8vIHNhbXBsZWQgZm9yIHRoZSBmaXJzdCBhZGRyZXNzIG9mIGEgYnVyc3QuCisvLyBOb3RlIDM6IFBDIG1hdGNoIGlzIG5vdCByZWNvbW1lbmRlZCBmb3Igd2F0Y2hwb2ludHMgYmVjYXVzZSBpdCBzdG9wcyBhZnRlcgorLy8gdGhlIGluc3RydWN0aW9uLiBJdCBtYWlubHkgZ3VhcmRzIGFuZCB0cmlnZ2VycyB0aGUgRVRNLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OMl9GVU5DVElPTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04yX0ZVTkNUSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjJfRlVOQ1RJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9EV1RfT19DT01QMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENPTVAKKy8vCisvLyBSZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0IFBDIG9yIHRoZSBkYXRhIGFkZHJlc3MgYXMgZ2l2ZW4gYnkKKy8vIEZVTkNUSU9OMy4KKyNkZWZpbmUgQ1BVX0RXVF9DT01QM19DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfRFdUX0NPTVAzX0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9EV1RfQ09NUDNfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fTUFTSzMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMzowXSBNQVNLCisvLworLy8gTWFzayBvbiBkYXRhIGFkZHJlc3Mgd2hlbiBtYXRjaGluZyBhZ2FpbnN0IENPTVAzLiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZQorLy8gaWdub3JlIG1hc2suIFRoYXQgaXMsIERXVCBtYXRjaGluZyBpcyBwZXJmb3JtZWQgYXM6KEFERFIgQU5EZWQgd2l0aCAoMHhGRkZGCisvLyBsZWZ0IGJpdC1zaGlmdGVkIGJ5IE1BU0spKSA9PSBDT01QMy4gSG93ZXZlciwgdGhlIGFjdHVhbCBjb21wYXJpc29uIGlzCisvLyBzbGlnaHRseSBtb3JlIGNvbXBsZXggdG8gZW5hYmxlIG1hdGNoaW5nIGFuIGFkZHJlc3Mgd2hlcmV2ZXIgaXQgYXBwZWFycyBvbiBhCisvLyBidXMuIFNvLCBpZiBDT01QMyBpcyAzLCB0aGlzIG1hdGNoZXMgYSB3b3JkIGFjY2VzcyBvZiAwLCBiZWNhdXNlIDMgd291bGQgYmUKKy8vIHdpdGhpbiB0aGUgd29yZC4KKyNkZWZpbmUgQ1BVX0RXVF9NQVNLM19NQVNLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX01BU0szX01BU0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfTUFTSzNfTUFTS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRFdUX09fRlVOQ1RJT04zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gTUFUQ0hFRAorLy8KKy8vIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBjb21wYXJhdG9yIG1hdGNoZXMsIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUKKy8vIG9wZXJhdGlvbiBkZWZpbmVkIGJ5IEZVTkNUSU9OIGhhcyBvY2N1cnJlZCBzaW5jZSB0aGlzIGJpdCB3YXMgbGFzdCByZWFkLgorLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBvbiByZWFkLgorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19NQVRDSEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX01BVENIRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfTUFUQ0hFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19NQVRDSEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICAgWzVdIEVNSVRSQU5HRQorLy8KKy8vIEVtaXQgcmFuZ2UgZmllbGQuIFRoaXMgYml0IHBlcm1pdHMgZW1pdHRpbmcgb2Zmc2V0IHdoZW4gcmFuZ2UgbWF0Y2ggb2NjdXJzLgorLy8gUEMgc2FtcGxpbmcgaXMgbm90IHN1cHBvcnRlZCB3aGVuIGVtaXQgcmFuZ2UgaXMgZW5hYmxlZC4KKy8vIFRoaXMgZmllbGQgb25seSBhcHBsaWVzIGZvcjogRlVOQ1RJT04gPSAxLCAyLCAzLCAxMiwgMTMsIDE0LCBhbmQgMTUuCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX0VNSVRSQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfRU1JVFJBTkdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19FTUlUUkFOR0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX0VNSVRSQU5HRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzM6MF0gRlVOQ1RJT04KKy8vCisvLyBGdW5jdGlvbiBzZXR0aW5ncy4KKy8vCisvLyAweDA6IERpc2FibGVkCisvLyAweDE6IEVNSVRSQU5HRSA9IDAsIHNhbXBsZSBhbmQgZW1pdCBQQyB0aHJvdWdoIElUTS4gRU1JVFJBTkdFID0gMSwgZW1pdAorLy8gYWRkcmVzcyBvZmZzZXQgdGhyb3VnaCBJVE0KKy8vIDB4MjogRU1JVFJBTkdFID0gMCwgZW1pdCBkYXRhIHRocm91Z2ggSVRNIG9uIHJlYWQgYW5kIHdyaXRlLiBFTUlUUkFOR0UgPSAxLAorLy8gZW1pdCBkYXRhIGFuZCBhZGRyZXNzIG9mZnNldCB0aHJvdWdoIElUTSBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHgzOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvciB3cml0ZS4KKy8vIEVNSVRSQU5HRSA9IDEsIGVtaXQgYWRkcmVzcyBvZmZzZXQgYW5kIGRhdGEgdmFsdWUgdGhyb3VnaCBJVE0gb24gcmVhZCBvcgorLy8gd3JpdGUuCisvLyAweDQ6IFdhdGNocG9pbnQgb24gUEMgbWF0Y2guCisvLyAweDU6IFdhdGNocG9pbnQgb24gcmVhZC4KKy8vIDB4NjogV2F0Y2hwb2ludCBvbiB3cml0ZS4KKy8vIDB4NzogV2F0Y2hwb2ludCBvbiByZWFkIG9yIHdyaXRlLgorLy8gMHg4OiBFVE0gdHJpZ2dlciBvbiBQQyBtYXRjaAorLy8gMHg5OiBFVE0gdHJpZ2dlciBvbiByZWFkCisvLyAweEE6IEVUTSB0cmlnZ2VyIG9uIHdyaXRlCisvLyAweEI6IEVUTSB0cmlnZ2VyIG9uIHJlYWQgb3Igd3JpdGUKKy8vIDB4QzogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHJlYWQgdHJhbnNmZXJzLiBFTUlUUkFOR0UgPSAxLCBzYW1wbGUKKy8vIERhZGRyIChsb3dlciAxNiBiaXRzKSBmb3IgcmVhZCB0cmFuc2ZlcnMKKy8vIDB4RDogRU1JVFJBTkdFID0gMCwgc2FtcGxlIGRhdGEgZm9yIHdyaXRlIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwgc2FtcGxlCisvLyBEYWRkciAobG93ZXIgMTYgYml0cykgZm9yIHdyaXRlIHRyYW5zZmVycworLy8gMHhFOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycy4gRU1JVFJBTkdFID0gMSwKKy8vIHNhbXBsZSBEYWRkciAobG93ZXIgMTYgYml0cykgKyBkYXRhIGZvciByZWFkIHRyYW5zZmVycworLy8gMHhGOiBFTUlUUkFOR0UgPSAwLCBzYW1wbGUgUEMgKyBkYXRhIGZvciB3cml0ZSB0cmFuc2ZlcnMuIEVNSVRSQU5HRSA9IDEsCisvLyBzYW1wbGUgRGFkZHIgKGxvd2VyIDE2IGJpdHMpICsgZGF0YSBmb3Igd3JpdGUgdHJhbnNmZXJzCisvLworLy8gTm90ZSAxOiBJZiB0aGUgRVRNIGlzIG5vdCBmaXR0ZWQsIHRoZW4gRVRNIHRyaWdnZXIgaXMgbm90IHBvc3NpYmxlLgorLy8gTm90ZSAyOiBEYXRhIHZhbHVlIGlzIG9ubHkgc2FtcGxlZCBmb3IgYWNjZXNzZXMgdGhhdCBkbyBub3QgZmF1bHQgKE1QVSBvcgorLy8gYnVzIGZhdWx0KS4gVGhlIFBDIGlzIHNhbXBsZWQgaXJyZXNwZWN0aXZlIG9mIGFueSBmYXVsdHMuIFRoZSBQQyBpcyBvbmx5CisvLyBzYW1wbGVkIGZvciB0aGUgZmlyc3QgYWRkcmVzcyBvZiBhIGJ1cnN0LgorLy8gTm90ZSAzOiBQQyBtYXRjaCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHdhdGNocG9pbnRzIGJlY2F1c2UgaXQgc3RvcHMgYWZ0ZXIKKy8vIHRoZSBpbnN0cnVjdGlvbi4gSXQgbWFpbmx5IGd1YXJkcyBhbmQgdHJpZ2dlcnMgdGhlIEVUTS4KKyNkZWZpbmUgQ1BVX0RXVF9GVU5DVElPTjNfRlVOQ1RJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRFdUX0ZVTkNUSU9OM19GVU5DVElPTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIENQVV9EV1RfRlVOQ1RJT04zX0ZVTkNUSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DUFVfRFdUX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9mcGIuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9mcGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThkZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X2ZwYi5oCkBAIC0wLDAgKzEsNDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY3B1X2ZwYl9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19DUFVfRlBCX0hfXworI2RlZmluZSBfX0hXX0NQVV9GUEJfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQ1BVX0ZQQiBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb250cm9sCisjZGVmaW5lIENQVV9GUEJfT19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gUmVtYXAKKyNkZWZpbmUgQ1BVX0ZQQl9PX1JFTUFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBDb21wYXJhdG9yIDAKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBDb21wYXJhdG9yIDEKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBDb21wYXJhdG9yIDIKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBDb21wYXJhdG9yIDMKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBDb21wYXJhdG9yIDQKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBDb21wYXJhdG9yIDUKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBDb21wYXJhdG9yIDYKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBDb21wYXJhdG9yIDcKKyNkZWZpbmUgQ1BVX0ZQQl9PX0NPTVA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9GUEJfT19DVFJMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxMzoxMl0gTlVNX0NPREUyCisvLworLy8gTnVtYmVyIG9mIGZ1bGwgYmFua3Mgb2YgY29kZSBjb21wYXJhdG9ycywgc2l4dGVlbiBjb21wYXJhdG9ycyBwZXIgYmFuay4KKy8vIFdoZXJlIGxlc3MgdGhhbiBzaXh0ZWVuIGNvZGUgY29tcGFyYXRvcnMgYXJlIHByb3ZpZGVkLCB0aGUgYmFuayBjb3VudCBpcworLy8gemVybywgYW5kIHRoZSBudW1iZXIgcHJlc2VudCBpbmRpY2F0ZWQgYnkgTlVNX0NPREUxLiBUaGlzIHJlYWQgb25seSBmaWVsZAorLy8gY29udGFpbnMgMydiMDAwIHRvIGluZGljYXRlIDAgYmFua3MgZm9yIENvcnRleC1NIHByb2Nlc3Nvci4KKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX05VTV9DT0RFMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NUUkxfTlVNX0NPREUyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9OVU1fQ09ERTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6OF0gTlVNX0xJVAorLy8KKy8vIE51bWJlciBvZiBsaXRlcmFsIHNsb3RzIGZpZWxkLgorLy8KKy8vIDB4MDogTm8gbGl0ZXJhbCBzbG90cworLy8gMHgyOiBUd28gbGl0ZXJhbCBzbG90cworI2RlZmluZSBDUFVfRlBCX0NUUkxfTlVNX0xJVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9GUEJfQ1RSTF9OVU1fTElUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX05VTV9MSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo0XSBOVU1fQ09ERTEKKy8vCisvLyBOdW1iZXIgb2YgY29kZSBzbG90cyBmaWVsZC4KKy8vCisvLyAweDA6IE5vIGNvZGUgc2xvdHMKKy8vIDB4MjogVHdvIGNvZGUgc2xvdHMKKy8vIDB4NjogU2l4IGNvZGUgc2xvdHMKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX05VTV9DT0RFMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfRlBCX0NUUkxfTlVNX0NPREUxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9OVU1fQ09ERTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMV0gS0VZCisvLworLy8gS2V5IGZpZWxkLiBJbiBvcmRlciB0byB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyLCB0aGlzIGJpdC1maWVsZCBtdXN0IGJlCisvLyB3cml0dGVuIHRvICcxJy4gVGhpcyBiaXQgYWx3YXlzIHJlYWRzIDAuCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX0tFWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfRlBCX0NUUkxfS0VZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9LRVlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gRmxhc2ggcGF0Y2ggdW5pdCBlbmFibGUgYml0CisvLworLy8gMHgwOiBGbGFzaCBwYXRjaCB1bml0IGRpc2FibGVkCisvLyAweDE6IEZsYXNoIHBhdGNoIHVuaXQgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NUUkxfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ1RSTF9FTkFCTEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DVFJMX0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NUUkxfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX1JFTUFQCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjg6NV0gUkVNQVAKKy8vCisvLyBSZW1hcCBiYXNlIGFkZHJlc3MgZmllbGQuCisjZGVmaW5lIENQVV9GUEJfUkVNQVBfUkVNQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX0ZQQl9SRU1BUF9SRU1BUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRkZGRkZFMAorI2RlZmluZSBDUFVfRlBCX1JFTUFQX1JFTUFQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVAwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIEFkZHJlc3MKKy8vIHJlbWFwcGluZyBvbmx5IHRha2VzIHBsYWNlIGZvciB0aGUgMHgwIHNldHRpbmcuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAwX1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDBfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAwX0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDBfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciAwLiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAwIGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDAgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVAwX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDBfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAwX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVAxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIEFkZHJlc3MKKy8vIHJlbWFwcGluZyBvbmx5IHRha2VzIHBsYWNlIGZvciB0aGUgMHgwIHNldHRpbmcuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAxX1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDFfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAxX0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDFfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciAxLiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAxIGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDEgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVAxX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDFfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMV9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAxX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVAyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIEFkZHJlc3MKKy8vIHJlbWFwcGluZyBvbmx5IHRha2VzIHBsYWNlIGZvciB0aGUgMHgwIHNldHRpbmcuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAyX1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDJfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAyX0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDJfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciAyLiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAyIGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDIgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVAyX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDJfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QMl9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAyX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVAzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIEFkZHJlc3MKKy8vIHJlbWFwcGluZyBvbmx5IHRha2VzIHBsYWNlIGZvciB0aGUgMHgwIHNldHRpbmcuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAzX1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDNfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVAzX0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDNfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciAzLiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciAzIGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDMgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVAzX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDNfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QM19FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVAzX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVA0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIEFkZHJlc3MKKy8vIHJlbWFwcGluZyBvbmx5IHRha2VzIHBsYWNlIGZvciB0aGUgMHgwIHNldHRpbmcuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVA0X1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDRfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVA0X0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDRfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciA0LiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciA0IGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDQgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVA0X0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDRfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNF9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVA0X0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVA1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIEFkZHJlc3MKKy8vIHJlbWFwcGluZyBvbmx5IHRha2VzIHBsYWNlIGZvciB0aGUgMHgwIHNldHRpbmcuCisvLworLy8gMHgwOiBSZW1hcCB0byByZW1hcCBhZGRyZXNzLiBTZWUgUkVNQVAuUkVNQVAKKy8vIDB4MTogU2V0IEJLUFQgb24gbG93ZXIgaGFsZndvcmQsIHVwcGVyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MjogU2V0IEJLUFQgb24gdXBwZXIgaGFsZndvcmQsIGxvd2VyIGlzIHVuYWZmZWN0ZWQKKy8vIDB4MzogU2V0IEJLUFQgb24gYm90aCBsb3dlciBhbmQgdXBwZXIgaGFsZndvcmRzLgorI2RlZmluZSBDUFVfRlBCX0NPTVA1X1JFUExBQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9GUEJfQ09NUDVfUkVQTEFDRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9SRVBMQUNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogIFsyODoyXSBDT01QCisvLworLy8gQ29tcGFyaXNvbiBhZGRyZXNzLgorI2RlZmluZSBDUFVfRlBCX0NPTVA1X0NPTVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9GUEJfQ09NUDVfQ09NUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkMKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9DT01QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFswXSBFTkFCTEUKKy8vCisvLyBDb21wYXJlIGFuZCByZW1hcCBlbmFibGUgY29tcGFyYXRvciA1LiBDVFJMLkVOQUJMRSBtdXN0IGFsc28gYmUgc2V0IHRvCisvLyBlbmFibGUgY29tcGFyaXNvbnMuCisvLworLy8gMHgwOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciA1IGRpc2FibGVkCisvLyAweDE6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDUgZW5hYmxlZAorI2RlZmluZSBDUFVfRlBCX0NPTVA1X0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDVfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNV9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVA1X0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0ZQQl9PX0NPTVA2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMTozMF0gUkVQTEFDRQorLy8KKy8vIFRoaXMgc2VsZWN0cyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgQ09NUCBhZGRyZXNzIGlzIG1hdGNoZWQuIENvbXBhcmF0b3IgNiBpcworLy8gYSBsaXRlcmFsIGNvbXBhcmF0b3IgYW5kIHRoZSBvbmx5IHN1cHBvcnRlZCBzZXR0aW5nIGlzIDB4MC4gT3RoZXIgc2V0dGluZ3MKKy8vIHdpbGwgYmUgaWdub3JlZC4KKy8vCisvLyAweDA6IFJlbWFwIHRvIHJlbWFwIGFkZHJlc3MuIFNlZSBSRU1BUC5SRU1BUAorLy8gMHgxOiBTZXQgQktQVCBvbiBsb3dlciBoYWxmd29yZCwgdXBwZXIgaXMgdW5hZmZlY3RlZAorLy8gMHgyOiBTZXQgQktQVCBvbiB1cHBlciBoYWxmd29yZCwgbG93ZXIgaXMgdW5hZmZlY3RlZAorLy8gMHgzOiBTZXQgQktQVCBvbiBib3RoIGxvd2VyIGFuZCB1cHBlciBoYWxmd29yZHMuCisjZGVmaW5lIENQVV9GUEJfQ09NUDZfUkVQTEFDRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNl9SRVBMQUNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBDUFVfRlBCX0NPTVA2X1JFUExBQ0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgWzI4OjJdIENPTVAKKy8vCisvLyBDb21wYXJpc29uIGFkZHJlc3MuCisjZGVmaW5lIENQVV9GUEJfQ09NUDZfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNl9DT01QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRkZGRkZGQworI2RlZmluZSBDUFVfRlBCX0NPTVA2X0NPTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOQUJMRQorLy8KKy8vIENvbXBhcmUgYW5kIHJlbWFwIGVuYWJsZSBjb21wYXJhdG9yIDYuIENUUkwuRU5BQkxFIG11c3QgYWxzbyBiZSBzZXQgdG8KKy8vIGVuYWJsZSBjb21wYXJpc29ucy4KKy8vCisvLyAweDA6IENvbXBhcmUgYW5kIHJlbWFwIGZvciBjb21wYXJhdG9yIDYgZGlzYWJsZWQKKy8vIDB4MTogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgNiBlbmFibGVkCisjZGVmaW5lIENQVV9GUEJfQ09NUDZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QNl9FTkFCTEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfRlBCX0NPTVA2X0VOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9GUEJfQ09NUDZfRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfRlBCX09fQ09NUDcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjMwXSBSRVBMQUNFCisvLworLy8gVGhpcyBzZWxlY3RzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBDT01QIGFkZHJlc3MgaXMgbWF0Y2hlZC4gQ29tcGFyYXRvciA3IGlzCisvLyBhIGxpdGVyYWwgY29tcGFyYXRvciBhbmQgdGhlIG9ubHkgc3VwcG9ydGVkIHNldHRpbmcgaXMgMHgwLiBPdGhlciBzZXR0aW5ncworLy8gd2lsbCBiZSBpZ25vcmVkLgorLy8KKy8vIDB4MDogUmVtYXAgdG8gcmVtYXAgYWRkcmVzcy4gU2VlIFJFTUFQLlJFTUFQCisvLyAweDE6IFNldCBCS1BUIG9uIGxvd2VyIGhhbGZ3b3JkLCB1cHBlciBpcyB1bmFmZmVjdGVkCisvLyAweDI6IFNldCBCS1BUIG9uIHVwcGVyIGhhbGZ3b3JkLCBsb3dlciBpcyB1bmFmZmVjdGVkCisvLyAweDM6IFNldCBCS1BUIG9uIGJvdGggbG93ZXIgYW5kIHVwcGVyIGhhbGZ3b3Jkcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19SRVBMQUNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfRlBCX0NPTVA3X1JFUExBQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfUkVQTEFDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICBbMjg6Ml0gQ09NUAorLy8KKy8vIENvbXBhcmlzb24gYWRkcmVzcy4KKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19DT01QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfRlBCX0NPTVA3X0NPTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGRkZGRkZDCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfQ09NUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gQ29tcGFyZSBhbmQgcmVtYXAgZW5hYmxlIGNvbXBhcmF0b3IgNy4gQ1RSTC5FTkFCTEUgbXVzdCBhbHNvIGJlIHNldCB0bworLy8gZW5hYmxlIGNvbXBhcmlzb25zLgorLy8KKy8vIDB4MDogQ29tcGFyZSBhbmQgcmVtYXAgZm9yIGNvbXBhcmF0b3IgNyBkaXNhYmxlZAorLy8gMHgxOiBDb21wYXJlIGFuZCByZW1hcCBmb3IgY29tcGFyYXRvciA3IGVuYWJsZWQKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfRlBCX0NPTVA3X0VOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9GUEJfQ09NUDdfRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0ZQQl9DT01QN19FTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0NQVV9GUEJfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X2l0bS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X2l0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjZlNGMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfaXRtLmgKQEAgLTAsMCArMSwxMTIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfY3B1X2l0bV9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19DUFVfSVRNX0hfXworI2RlZmluZSBfX0hXX0NQVV9JVE1fSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gQ1BVX0lUTSBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBTdGltdWx1cyBQb3J0IDAKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBTdGltdWx1cyBQb3J0IDEKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTdGltdWx1cyBQb3J0IDIKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBTdGltdWx1cyBQb3J0IDMKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBTdGltdWx1cyBQb3J0IDQKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU00ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBTdGltdWx1cyBQb3J0IDUKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU01ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBTdGltdWx1cyBQb3J0IDYKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU02ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBTdGltdWx1cyBQb3J0IDcKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU03ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBTdGltdWx1cyBQb3J0IDgKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU04ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBTdGltdWx1cyBQb3J0IDkKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU05ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBTdGltdWx1cyBQb3J0IDEwCisjZGVmaW5lIENQVV9JVE1fT19TVElNMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gU3RpbXVsdXMgUG9ydCAxMQorI2RlZmluZSBDUFVfSVRNX09fU1RJTTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIFN0aW11bHVzIFBvcnQgMTIKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBTdGltdWx1cyBQb3J0IDEzCisjZGVmaW5lIENQVV9JVE1fT19TVElNMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gU3RpbXVsdXMgUG9ydCAxNAorI2RlZmluZSBDUFVfSVRNX09fU1RJTTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIFN0aW11bHVzIFBvcnQgMTUKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBTdGltdWx1cyBQb3J0IDE2CisjZGVmaW5lIENQVV9JVE1fT19TVElNMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8gU3RpbXVsdXMgUG9ydCAxNworI2RlZmluZSBDUFVfSVRNX09fU1RJTTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vIFN0aW11bHVzIFBvcnQgMTgKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorCisvLyBTdGltdWx1cyBQb3J0IDE5CisjZGVmaW5lIENQVV9JVE1fT19TVElNMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEMKKworLy8gU3RpbXVsdXMgUG9ydCAyMAorI2RlZmluZSBDUFVfSVRNX09fU1RJTTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisKKy8vIFN0aW11bHVzIFBvcnQgMjEKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorCisvLyBTdGltdWx1cyBQb3J0IDIyCisjZGVmaW5lIENQVV9JVE1fT19TVElNMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKKworLy8gU3RpbXVsdXMgUG9ydCAyMworI2RlZmluZSBDUFVfSVRNX09fU1RJTTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVDCisKKy8vIFN0aW11bHVzIFBvcnQgMjQKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorCisvLyBTdGltdWx1cyBQb3J0IDI1CisjZGVmaW5lIENQVV9JVE1fT19TVElNMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKKworLy8gU3RpbXVsdXMgUG9ydCAyNgorI2RlZmluZSBDUFVfSVRNX09fU1RJTTI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4CisKKy8vIFN0aW11bHVzIFBvcnQgMjcKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworCisvLyBTdGltdWx1cyBQb3J0IDI4CisjZGVmaW5lIENQVV9JVE1fT19TVElNMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKworLy8gU3RpbXVsdXMgUG9ydCAyOQorI2RlZmluZSBDUFVfSVRNX09fU1RJTTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc0CisKKy8vIFN0aW11bHVzIFBvcnQgMzAKKyNkZWZpbmUgQ1BVX0lUTV9PX1NUSU0zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorCisvLyBTdGltdWx1cyBQb3J0IDMxCisjZGVmaW5lIENQVV9JVE1fT19TVElNMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0MKKworLy8gVHJhY2UgRW5hYmxlCisjZGVmaW5lIENQVV9JVE1fT19URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKworLy8gVHJhY2UgUHJpdmlsZWdlCisjZGVmaW5lIENQVV9JVE1fT19UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFNDAKKworLy8gVHJhY2UgQ29udHJvbAorI2RlZmluZSBDUFVfSVRNX09fVENSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRTgwCisKKy8vIExvY2sgQWNjZXNzCisjZGVmaW5lIENQVV9JVE1fT19MQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQjAKKworLy8gTG9jayBTdGF0dXMKKyNkZWZpbmUgQ1BVX0lUTV9PX0xTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZCNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0wCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEwIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTBfU1RJTTBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMF9TVElNMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0wX1NUSU0wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTEKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTEgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMV9TVElNMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xX1NUSU0xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTFfU1RJTTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMgorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMiBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yX1NUSU0yX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTJfU1RJTTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMl9TVElNMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0zCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEzIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTNfU1RJTTNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNM19TVElNM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0zX1NUSU0zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU00CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTQKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTQgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNNF9TVElNNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU00X1NUSU00X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTRfU1RJTTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNNQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BNSBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU01X1NUSU01X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTVfU1RJTTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNNV9TVElNNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU02CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkE2IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTZfU1RJTTZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNNl9TVElNNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU02X1NUSU02X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU03CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTcKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTcgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNN19TVElNN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU03X1NUSU03X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTdfU1RJTTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNOAorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BOCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU04X1NUSU04X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTThfU1RJTThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNOF9TVElNOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU05CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkE5IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTlfU1RJTTlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNOV9TVElNOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU05X1NUSU05X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xMAorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTAgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTBfU1RJTTEwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xMF9TVElNMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTEwX1NUSU0xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTExCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTExCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExMSBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0xMV9TVElNMTFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTExX1NUSU0xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTFfU1RJTTExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTIKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTEyIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTEyX1NUSU0xMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTJfU1RJTTEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xMl9TVElNMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xMworLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTMgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTNfU1RJTTEzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xM19TVElNMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTEzX1NUSU0xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTE0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTE0CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExNCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0xNF9TVElNMTRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTE0X1NUSU0xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTRfU1RJTTE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTUKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTE1IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTE1X1NUSU0xNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTVfU1RJTTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xNV9TVElNMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xNgorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTYgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTZfU1RJTTE2X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xNl9TVElNMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTE2X1NUSU0xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTE3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTE3CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkExNyBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0xN19TVElNMTdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTE3X1NUSU0xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTdfU1RJTTE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMTgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMTgKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTE4IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTE4X1NUSU0xOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMThfU1RJTTE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0xOF9TVElNMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0xOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0xOQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMTkgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMTlfU1RJTTE5X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0xOV9TVElNMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTE5X1NUSU0xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTIwCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyMCBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yMF9TVElNMjBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTIwX1NUSU0yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjBfU1RJTTIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMjEKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTIxIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTIxX1NUSU0yMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjFfU1RJTTIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0yMV9TVElNMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yMgorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjIgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjJfU1RJTTIyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yMl9TVElNMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTIyX1NUSU0yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTIzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTIzCisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyMyBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yM19TVElNMjNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTIzX1NUSU0yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjNfU1RJTTIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMjQKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTI0IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTI0X1NUSU0yNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjRfU1RJTTI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0yNF9TVElNMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yNQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjUgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjVfU1RJTTI1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yNV9TVElNMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTI1X1NUSU0yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTI2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTI2CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyNiBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yNl9TVElNMjZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTI2X1NUSU0yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjZfU1RJTTI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMjcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMjcKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTI3IGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTI3X1NUSU0yN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjdfU1RJTTI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0yN19TVElNMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0yOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0yOAorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMjggaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjhfU1RJTTI4X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0yOF9TVElNMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTI4X1NUSU0yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fU1RJTTI5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU1RJTTI5CisvLworLy8gQSB3cml0ZSB0byB0aGlzIGxvY2F0aW9uIGNhdXNlcyBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgRklGTyBpZgorLy8gVEVSLlNUSU1FTkEyOSBpcyBzZXQuIFJlYWRpbmcgZnJvbSB0aGUgc3RpbXVsdXMgcG9ydCByZXR1cm5zIHRoZSBGSUZPIHN0YXR1cworLy8gaW4gYml0IFswXTogMCA9IGZ1bGwsIDEgPSBub3QgZnVsbC4gVGhlIHBvbGxlZCBGSUZPIGludGVyZmFjZSBkb2VzIG5vdAorLy8gcHJvdmlkZSBhbiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUsIHNvIGl0J3MgdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisvLyBleGNsdXNpdmUgcmVhZC1tb2RpZnktd3JpdGUgaWYgdGhpcyBJVE0gcG9ydCBpcyB1c2VkIGNvbmN1cnJlbnRseSBieQorLy8gaW50ZXJydXB0cyBvciBvdGhlciB0aHJlYWRzLgorI2RlZmluZSBDUFVfSVRNX1NUSU0yOV9TVElNMjlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fU1RJTTI5X1NUSU0yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMjlfU1RJTTI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19TVElNMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVElNMzAKKy8vCisvLyBBIHdyaXRlIHRvIHRoaXMgbG9jYXRpb24gY2F1c2VzIGRhdGEgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBGSUZPIGlmCisvLyBURVIuU1RJTUVOQTMwIGlzIHNldC4gUmVhZGluZyBmcm9tIHRoZSBzdGltdWx1cyBwb3J0IHJldHVybnMgdGhlIEZJRk8gc3RhdHVzCisvLyBpbiBiaXQgWzBdOiAwID0gZnVsbCwgMSA9IG5vdCBmdWxsLiBUaGUgcG9sbGVkIEZJRk8gaW50ZXJmYWNlIGRvZXMgbm90CisvLyBwcm92aWRlIGFuIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSwgc28gaXQncyB1c2VycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUKKy8vIGV4Y2x1c2l2ZSByZWFkLW1vZGlmeS13cml0ZSBpZiB0aGlzIElUTSBwb3J0IGlzIHVzZWQgY29uY3VycmVudGx5IGJ5CisvLyBpbnRlcnJ1cHRzIG9yIG90aGVyIHRocmVhZHMuCisjZGVmaW5lIENQVV9JVE1fU1RJTTMwX1NUSU0zMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX0lUTV9TVElNMzBfU1RJTTMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfSVRNX1NUSU0zMF9TVElNMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1NUSU0zMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFNUSU0zMQorLy8KKy8vIEEgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiBjYXVzZXMgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gaWYKKy8vIFRFUi5TVElNRU5BMzEgaXMgc2V0LiBSZWFkaW5nIGZyb20gdGhlIHN0aW11bHVzIHBvcnQgcmV0dXJucyB0aGUgRklGTyBzdGF0dXMKKy8vIGluIGJpdCBbMF06IDAgPSBmdWxsLCAxID0gbm90IGZ1bGwuIFRoZSBwb2xsZWQgRklGTyBpbnRlcmZhY2UgZG9lcyBub3QKKy8vIHByb3ZpZGUgYW4gYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlLCBzbyBpdCdzIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorLy8gZXhjbHVzaXZlIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHRoaXMgSVRNIHBvcnQgaXMgdXNlZCBjb25jdXJyZW50bHkgYnkKKy8vIGludGVycnVwdHMgb3Igb3RoZXIgdGhyZWFkcy4KKyNkZWZpbmUgQ1BVX0lUTV9TVElNMzFfU1RJTTMxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfSVRNX1NUSU0zMV9TVElNMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9JVE1fU1RJTTMxX1NUSU0zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fVEVSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gU1RJTUVOQTMxCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMzEuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gU1RJTUVOQTMwCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMzAuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gU1RJTUVOQTI5CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjkuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gU1RJTUVOQTI4CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjguCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gU1RJTUVOQTI3CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjcuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gU1RJTUVOQTI2CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjYuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gU1RJTUVOQTI1CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjUuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gU1RJTUVOQTI0CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjQuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gU1RJTUVOQTIzCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjMuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gU1RJTUVOQTIyCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjIuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gU1RJTUVOQTIxCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjEuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gU1RJTUVOQTIwCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMjAuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gU1RJTUVOQTE5CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTkuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gU1RJTUVOQTE4CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTguCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gU1RJTUVOQTE3CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTcuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gU1RJTUVOQTE2CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTYuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gU1RJTUVOQTE1CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTUuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gU1RJTUVOQTE0CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTQuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gU1RJTUVOQTEzCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTMuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gU1RJTUVOQTEyCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTIuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gU1RJTUVOQTExCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTEuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gU1RJTUVOQTEwCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMTAuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gU1RJTUVOQTkKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCA5LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFNUSU1FTkE4CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgOC4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBTVElNRU5BNworLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDcuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gU1RJTUVOQTYKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCA2LgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFNUSU1FTkE1CisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgNS4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBTVElNRU5BNAorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDQuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gU1RJTUVOQTMKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCAzLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFNUSU1FTkEyCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHRyYWNpbmcgb24gSVRNIHN0aW11bHVzIHBvcnQgMi4KKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTVElNRU5BMQorLy8KKy8vIEJpdCBtYXNrIHRvIGVuYWJsZSB0cmFjaW5nIG9uIElUTSBzdGltdWx1cyBwb3J0IDEuCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU1RJTUVOQTAKKy8vCisvLyBCaXQgbWFzayB0byBlbmFibGUgdHJhY2luZyBvbiBJVE0gc3RpbXVsdXMgcG9ydCAwLgorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9JVE1fVEVSX1NUSU1FTkEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0lUTV9URVJfU1RJTUVOQTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfSVRNX1RFUl9TVElNRU5BMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX0lUTV9PX1RQUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIFBSSVZNQVNLCisvLworLy8gQml0IG1hc2sgdG8gZW5hYmxlIHVucHJpdmlsZWdlZCAoVXNlcikgYWNjZXNzIHRvIElUTSBzdGltdWx1cyBwb3J0czoKKy8vCisvLyBCaXQgWzBdIGVuYWJsZXMgc3RpbXVsdXMgcG9ydHMgMCwgMSwgLi4uLCBhbmQgNy4KKy8vIEJpdCBbMV0gZW5hYmxlcyBzdGltdWx1cyBwb3J0cyA4LCA5LCAuLi4sIGFuZCAxNS4KKy8vIEJpdCBbMl0gZW5hYmxlcyBzdGltdWx1cyBwb3J0cyAxNiwgMTcsIC4uLiwgYW5kIDIzLgorLy8gQml0IFszXSBlbmFibGVzIHN0aW11bHVzIHBvcnRzIDI0LCAyNSwgLi4uLCBhbmQgMzEuCisvLworLy8gMDogVXNlciBhY2Nlc3MgYWxsb3dlZCB0byBzdGltdWx1cyBwb3J0cworLy8gMTogUHJpdmlsZWdlZCBhY2Nlc3Mgb25seSB0byBzdGltdWx1cyBwb3J0cworI2RlZmluZSBDUFVfSVRNX1RQUl9QUklWTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9JVE1fVFBSX1BSSVZNQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQ1BVX0lUTV9UUFJfUFJJVk1BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19UQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzIzXSBCVVNZCisvLworLy8gU2V0IHdoZW4gSVRNIGV2ZW50cyBwcmVzZW50IGFuZCBiZWluZyBkcmFpbmVkLgorI2RlZmluZSBDUFVfSVRNX1RDUl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9JVE1fVENSX0JVU1lfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfQlVTWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfSVRNX1RDUl9CVVNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiBbMjI6MTZdIEFUQklECisvLworLy8gVHJhY2UgQnVzIElEIGZvciBDb3JlU2lnaHQgc3lzdGVtLiBPcHRpb25hbCBpZGVudGlmaWVyIGZvciBtdWx0aS1zb3VyY2UKKy8vIHRyYWNlIHN0cmVhbSBmb3JtYXR0aW5nLiBJZiBtdWx0aS1zb3VyY2UgdHJhY2UgaXMgaW4gdXNlLCB0aGlzIGZpZWxkIG11c3QgYmUKKy8vIHdyaXR0ZW4gd2l0aCBhIG5vbi16ZXJvIHZhbHVlLgorI2RlZmluZSBDUFVfSVRNX1RDUl9BVEJJRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9JVE1fVENSX0FUQklEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3RjAwMDAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfQVRCSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICBbOTo4XSBUU1BSRVNDQUxFCisvLworLy8gVGltZXN0YW1wIHByZXNjYWxlcgorLy8gRU5VTXM6CisvLyBESVY2NCAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDY0CisvLyBESVYxNiAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDE2CisvLyBESVY0ICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDQKKy8vIE5PUFJFU0NBTElORyAgICAgICAgICAgICBObyBwcmVzY2FsaW5nCisjZGVmaW5lIENQVV9JVE1fVENSX1RTUFJFU0NBTEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNQUkVTQ0FMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBDUFVfSVRNX1RDUl9UU1BSRVNDQUxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9JVE1fVENSX1RTUFJFU0NBTEVfRElWNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNQUkVTQ0FMRV9ESVYxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfSVRNX1RDUl9UU1BSRVNDQUxFX0RJVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9JVE1fVENSX1RTUFJFU0NBTEVfTk9QUkVTQ0FMSU5HICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gU1dPRU5BCisvLworLy8gRW5hYmxlcyBhc3luY2hyb25vdXMgY2xvY2tpbmcgb2YgdGhlIHRpbWVzdGFtcCBjb3VudGVyICh3aGVuIFRTRU5BID0gMSkuIElmCisvLyBUU0VOQSA9IDAsIHdyaXRpbmcgdGhpcyBiaXQgdG8gMSBkb2VzIG5vdCBlbmFibGUgYXN5bmNocm9ub3VzIGNsb2NraW5nIG9mCisvLyB0aGUgdGltZXN0YW1wIGNvdW50ZXIuCisvLworLy8gMHgwOiBNb2RlIGRpc2FibGVkLiBUaW1lc3RhbXAgY291bnRlciB1c2VzIHN5c3RlbSBjbG9jayBmcm9tIHRoZSBjb3JlIGFuZAorLy8gY291bnRzIGNvbnRpbnVvdXNseS4KKy8vIDB4MTogVGltZXN0YW1wIGNvdW50ZXIgdXNlcyBsaW5lb3V0IChkYXRhIHJlbGF0ZWQpIGNsb2NrIGZyb20gVFBJVQorLy8gaW50ZXJmYWNlLiBUaGUgdGltZXN0YW1wIGNvdW50ZXIgaXMgaGVsZCBpbiByZXNldCB3aGlsZSB0aGUgb3V0cHV0IGxpbmUgaXMKKy8vIGlkbGUuCisjZGVmaW5lIENQVV9JVE1fVENSX1NXT0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfU1dPRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfSVRNX1RDUl9TV09FTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9JVE1fVENSX1NXT0VOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRFdURU5BCisvLworLy8gRW5hYmxlcyB0aGUgRFdUIHN0aW11bHVzIChoYXJkd2FyZSBldmVudCBwYWNrZXQgZW1pc3Npb24gdG8gdGhlIFRQSVUgZnJvbQorLy8gdGhlIERXVCkKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfRFdURU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfSVRNX1RDUl9EV1RFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9JVE1fVENSX0RXVEVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfRFdURU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBTWU5DRU5BCisvLworLy8gRW5hYmxlcyBzeW5jaHJvbml6YXRpb24gcGFja2V0IHRyYW5zbWlzc2lvbiBmb3IgYSBzeW5jaHJvbm91cyBUUElVLgorLy8gQ1BVX0RXVDpDVFJMLlNZTkNUQVAgbXVzdCBiZSBjb25maWd1cmVkIGZvciB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24KKy8vIHNwZWVkLgorI2RlZmluZSBDUFVfSVRNX1RDUl9TWU5DRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9JVE1fVENSX1NZTkNFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfU1lOQ0VOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfSVRNX1RDUl9TWU5DRU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFRTRU5BCisvLworLy8gRW5hYmxlcyBkaWZmZXJlbnRpYWwgdGltZXN0YW1wcy4gRGlmZmVyZW50aWFsIHRpbWVzdGFtcHMgYXJlIGVtaXR0ZWQgd2hlbiBhCisvLyBwYWNrZXQgaXMgd3JpdHRlbiB0byB0aGUgRklGTyB3aXRoIGEgbm9uLXplcm8gdGltZXN0YW1wIGNvdW50ZXIsIGFuZCB3aGVuCisvLyB0aGUgdGltZXN0YW1wIGNvdW50ZXIgb3ZlcmZsb3dzLiBUaW1lc3RhbXBzIGFyZSBlbWl0dGVkIGR1cmluZyBpZGxlIHRpbWVzCisvLyBhZnRlciBhIGZpeGVkIG51bWJlciBvZiB0d28gbWlsbGlvbiBjeWNsZXMuIFRoaXMgcHJvdmlkZXMgYSB0aW1lIHJlZmVyZW5jZQorLy8gZm9yIHBhY2tldHMgYW5kIGludGVyLXBhY2tldCBnYXBzLiBJZiBTV09FTkEgKGJpdCBbNF0pIGlzIHNldCwgdGltZXN0YW1wcworLy8gYXJlIHRyaWdnZXJlZCBieSBhY3Rpdml0eSBvbiB0aGUgaW50ZXJuYWwgdHJhY2UgYnVzIG9ubHkuIEluIHRoaXMgY2FzZSB0aGVyZQorLy8gaXMgbm8gcmVndWxhciB0aW1lc3RhbXAgb3V0cHV0IHdoZW4gdGhlIElUTSBpcyBpZGxlLgorI2RlZmluZSBDUFVfSVRNX1RDUl9UU0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9JVE1fVENSX1RTRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfVFNFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfSVRNX1RDUl9UU0VOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIElUTUVOQQorLy8KKy8vIEVuYWJsZXMgSVRNLiBUaGlzIGlzIHRoZSBtYXN0ZXIgZW5hYmxlLCBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIElUTSBTdGltdWx1cworLy8gYW5kIFRyYWNlIEVuYWJsZSByZWdpc3RlcnMgY2FuIGJlIHdyaXR0ZW4uCisjZGVmaW5lIENQVV9JVE1fVENSX0lUTUVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX0lUTV9UQ1JfSVRNRU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfSVRNX1RDUl9JVE1FTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9JVE1fVENSX0lUTUVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfSVRNX09fTEFSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gTE9DS19BQ0NFU1MKKy8vCisvLyBBIHByaXZpbGVnZWQgd3JpdGUgb2YgMHhDNUFDQ0U1NSBlbmFibGVzIG1vcmUgd3JpdGUgYWNjZXNzIHRvIENvbnRyb2wKKy8vIFJlZ2lzdGVycyBURVIsIFRQUiBhbmQgVENSLiBBbiBpbnZhbGlkIHdyaXRlIHJlbW92ZXMgd3JpdGUgYWNjZXNzLgorI2RlZmluZSBDUFVfSVRNX0xBUl9MT0NLX0FDQ0VTU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9JVE1fTEFSX0xPQ0tfQUNDRVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX0lUTV9MQVJfTE9DS19BQ0NFU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9JVE1fT19MU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBCWVRFQUNDCisvLworLy8gUmVhZHMgMCB3aGljaCBtZWFucyA4LWJpdCBsb2NrIGFjY2VzcyBpcyBub3QgYmUgaW1wbGVtZW50ZWQuCisjZGVmaW5lIENQVV9JVE1fTFNSX0JZVEVBQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX0lUTV9MU1JfQllURUFDQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfSVRNX0xTUl9CWVRFQUNDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9JVE1fTFNSX0JZVEVBQ0NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQUNDRVNTCisvLworLy8gV3JpdGUgYWNjZXNzIHRvIGNvbXBvbmVudCBpcyBibG9ja2VkLiBBbGwgd3JpdGVzIGFyZSBpZ25vcmVkLCByZWFkcyBhcmUKKy8vIHBlcm1pdHRlZC4KKyNkZWZpbmUgQ1BVX0lUTV9MU1JfQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfSVRNX0xTUl9BQ0NFU1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9JVE1fTFNSX0FDQ0VTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX0lUTV9MU1JfQUNDRVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBQUkVTRU5UCisvLworLy8gSW5kaWNhdGVzIHRoYXQgYSBsb2NrIG1lY2hhbmlzbSBleGlzdHMgZm9yIHRoaXMgY29tcG9uZW50LgorI2RlZmluZSBDUFVfSVRNX0xTUl9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9JVE1fTFNSX1BSRVNFTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX0lUTV9MU1JfUFJFU0VOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfSVRNX0xTUl9QUkVTRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQ1BVX0lUTV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfcm9tX3RhYmxlLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfcm9tX3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmODFmOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9yb21fdGFibGUuaApAQCAtMCwwICsxLDIyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NwdV9yb21fdGFibGVfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX1JPTV9UQUJMRV9IX18KKyNkZWZpbmUgX19IV19DUFVfUk9NX1RBQkxFX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIENQVV9ST01fVEFCTEUgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gU3lzdGVtIENvbnRyb2wgU3BhY2UgQ29tcG9uZW50CisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19TQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSBDb21wb25lbnQKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9PX0RXVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBGbGFzaCBQYXRjaCBhbmQgQnJlYWtwb2ludCBDb21wb25lbnQKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9PX0ZQQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBJbnN0cnVtZW50YXRpb24gVHJhY2UgQ29tcG9uZW50CisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19JVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gVHJhY2UgUG9ydCBJbnRlcmZhY2UgQ29tcG9uZW50CisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19UUElVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gRW5oYW5jZWQgVHJhY2UgQ29tcG9uZW50CisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19FVE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gRW5kIE1hcmtlcgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX09fRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIFN5c3RlbSBNZW1vcnkgTWFwIEFjY2VzcyBmb3IgREFQCisjZGVmaW5lIENQVV9ST01fVEFCTEVfT19TWVNURU1fQUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQ0MKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfUk9NX1RBQkxFX09fU0NTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU0NTCisvLworLy8gUG9pbnRzIHRvIHRoZSBTQ1MgYXQgMHhFMDAwRTAwMC4KKy8vIChTQ1MgKyBCYXNlIGFkZHJlc3MgZm9yIFJPTV9UQUJMRSkgJiAweDBGRkZGRkZGMCA9IDB4RTAwMEUwMDAuCisjZGVmaW5lIENQVV9ST01fVEFCTEVfU0NTX1NDU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9TQ1NfU0NTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1NDU19TQ1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX0RXVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjFdIERXVAorLy8KKy8vIFBvaW50cyB0byB0aGUgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSBibG9jayBhdCAweEUwMDAxMDAwLgorLy8gKDIqRFdUICsgQmFzZSBhZGRyZXNzIGZvciBST01fVEFCTEUpICYgMHgwRkZGRkZGRjAgPSAweEUwMDAxMDAwLgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0RXVF9EV1RfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRFdUX0RXVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9EV1RfRFdUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBEV1RfUFJFU0VOVAorLy8KKy8vIDA6IERXVCBpcyBub3QgcHJlc2VudAorLy8gMTogRFdUIGlzIHByZXNlbnQuCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRFdUX0RXVF9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9EV1RfRFdUX1BSRVNFTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0RXVF9EV1RfUFJFU0VOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRFdUX0RXVF9QUkVTRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfUk9NX1RBQkxFX09fRlBCCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MV0gRlBCCisvLworLy8gUG9pbnRzIHRvIHRoZSBGbGFzaCBQYXRjaCBhbmQgQnJlYWtwb2ludCBibG9jayBhdCAweEUwMDAyMDAwLgorLy8gKDIqRlBCICsgQmFzZSBhZGRyZXNzIGZvciBST01fVEFCTEUpICYgMHgwRkZGRkZGRjAgPSAweEUwMDAyMDAwLgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0ZQQl9GUEJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRlBCX0ZQQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9GUEJfRlBCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBGUEJfUFJFU0VOVAorLy8KKy8vIDA6IEZQQiBpcyBub3QgcHJlc2VudAorLy8gMTogRlBCIGlzIHByZXNlbnQuCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRlBCX0ZQQl9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9GUEJfRlBCX1BSRVNFTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0ZQQl9GUEJfUFJFU0VOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRlBCX0ZQQl9QUkVTRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfUk9NX1RBQkxFX09fSVRNCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MV0gSVRNCisvLworLy8gUG9pbnRzIHRvIHRoZSBJbnN0cnVtZW50YXRpb24gVHJhY2UgYmxvY2sgYXQgMHhFMDAwMDAwMC4KKy8vICgyKklUTSArIEJhc2UgYWRkcmVzcyBmb3IgUk9NX1RBQkxFKSAmIDB4MEZGRkZGRkYwID0gMHhFMDAwMDAwMC4KKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9JVE1fSVRNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0lUTV9JVE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIENQVV9ST01fVEFCTEVfSVRNX0lUTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gSVRNX1BSRVNFTlQKKy8vCisvLyAwOiBJVE0gaXMgbm90IHByZXNlbnQKKy8vIDE6IElUTSBpcyBwcmVzZW50LgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0lUTV9JVE1fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfSVRNX0lUTV9QUkVTRU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9JVE1fSVRNX1BSRVNFTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0lUTV9JVE1fUFJFU0VOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1JPTV9UQUJMRV9PX1RQSVUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMToxXSBUUElVCisvLworLy8gUG9pbnRzIHRvIHRoZSBUUElVLiBUUElVIGlzIGF0IDB4RTAwNDAwMDAuCisvLyAoMipUUElVICsgQmFzZSBhZGRyZXNzIGZvciBST01fVEFCTEUpICYgMHgwRkZGRkZGRjAgPSAweEUwMDQwMDAwLgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1RQSVVfVFBJVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfVFBJVV9UUElVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9UUElVX1RQSVVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBUUElVX1BSRVNFTlQKKy8vCisvLyAwOiBUUElVIGlzIG5vdCBwcmVzZW50CisvLyAxOiBUUElVIGlzIHByZXNlbnQuCisjZGVmaW5lIENQVV9ST01fVEFCTEVfVFBJVV9UUElVX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9UUElVX1RQSVVfUFJFU0VOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1RQSVVfVFBJVV9QUkVTRU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfVFBJVV9UUElVX1BSRVNFTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfUk9NX1RBQkxFX09fRVRNCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MV0gRVRNCisvLworLy8gUG9pbnRzIHRvIHRoZSBFVE0uIEVUTSBpcyBhdCAweEUwMDQxMDAwLgorLy8gKDIqRVRNICsgQmFzZSBhZGRyZXNzIGZvciBST01fVEFCTEUpICYgMHgwRkZGRkZGRjAgPSAweEUwMDQxMDAwLgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VUTV9FVE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRVRNX0VUTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9FVE1fRVRNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFVE1fUFJFU0VOVAorLy8KKy8vIDA6IEVUTSBpcyBub3QgcHJlc2VudAorLy8gMTogRVRNIGlzIHByZXNlbnQuCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRVRNX0VUTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9FVE1fRVRNX1BSRVNFTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VUTV9FVE1fUFJFU0VOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRVRNX0VUTV9QUkVTRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfUk9NX1RBQkxFX09fRU5ECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRU5ECisvLworLy8gRW5kIG9mIHRoZSBST00gdGFibGUKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9FTkRfRU5EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0VORF9FTkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9ST01fVEFCTEVfRU5EX0VORF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfUk9NX1RBQkxFX09fU1lTVEVNX0FDQ0VTUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNZU1RFTV9BQ0NFU1MKKy8vCisvLyAxOiBUaGUgc3lzdGVtIG1lbW9yeSBtYXAgaXMgYWNjZXNzaWJsZSB1c2luZyB0aGUgREFQCisvLyAwOiBPbmx5IGRlYnVnIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSB1c2luZyB0aGUgREFQCisjZGVmaW5lIENQVV9ST01fVEFCTEVfU1lTVEVNX0FDQ0VTU19TWVNURU1fQUNDRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1JPTV9UQUJMRV9TWVNURU1fQUNDRVNTX1NZU1RFTV9BQ0NFU1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX1NZU1RFTV9BQ0NFU1NfU1lTVEVNX0FDQ0VTU19NICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9ST01fVEFCTEVfU1lTVEVNX0FDQ0VTU19TWVNURU1fQUNDRVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DUFVfUk9NX1RBQkxFX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9zY3MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV9zY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM4MzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3Njcy5oCkBAIC0wLDAgKzEsMzg4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NwdV9zY3NfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX1NDU19IX18KKyNkZWZpbmUgX19IV19DUFVfU0NTX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIENQVV9TQ1MgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZXJydXB0IENvbnRyb2wgVHlwZQorI2RlZmluZSBDUFVfU0NTX09fSUNUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEF1eGlsaWFyeSBDb250cm9sCisjZGVmaW5lIENQVV9TQ1NfT19BQ1RMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gU3lzVGljayBDb250cm9sIGFuZCBTdGF0dXMKKyNkZWZpbmUgQ1BVX1NDU19PX1NUQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBTeXNUaWNrIFJlbG9hZCBWYWx1ZQorI2RlZmluZSBDUFVfU0NTX09fU1RSVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIFN5c1RpY2sgQ3VycmVudCBWYWx1ZQorI2RlZmluZSBDUFVfU0NTX09fU1RDVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIFN5c1RpY2sgQ2FsaWJyYXRpb24gVmFsdWUKKyNkZWZpbmUgQ1BVX1NDU19PX1NUQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBJcnEgMCB0byAzMSBTZXQgRW5hYmxlCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lTRVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKworLy8gSXJxIDMyIHRvIDYzIFNldCBFbmFibGUKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSVNFUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNAorCisvLyBJcnEgMCB0byAzMSBDbGVhciBFbmFibGUKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSUNFUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAorCisvLyBJcnEgMzIgdG8gNjMgQ2xlYXIgRW5hYmxlCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lDRVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODQKKworLy8gSXJxIDAgdG8gMzEgU2V0IFBlbmRpbmcKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSVNQUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorCisvLyBJcnEgMzIgdG8gNjMgU2V0IFBlbmRpbmcKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSVNQUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwNAorCisvLyBJcnEgMCB0byAzMSBDbGVhciBQZW5kaW5nCisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lDUFIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyODAKKworLy8gSXJxIDMyIHRvIDYzIENsZWFyIFBlbmRpbmcKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSUNQUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4NAorCisvLyBJcnEgMCB0byAzMSBBY3RpdmUgQml0CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lBQlIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKworLy8gSXJxIDMyIHRvIDYzIEFjdGl2ZSBCaXQKKyNkZWZpbmUgQ1BVX1NDU19PX05WSUNfSUFCUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwNAorCisvLyBJcnEgMCB0byAzIFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKworLy8gSXJxIDQgdG8gNyBQcmlvcml0eQorI2RlZmluZSBDUFVfU0NTX09fTlZJQ19JUFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDA0CisKKy8vIElycSA4IHRvIDExIFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDgKKworLy8gSXJxIDEyIHRvIDE1IFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MEMKKworLy8gSXJxIDE2IHRvIDE5IFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTAKKworLy8gSXJxIDIwIHRvIDIzIFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTQKKworLy8gSXJxIDI0IHRvIDI3IFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTgKKworLy8gSXJxIDI4IHRvIDMxIFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MUMKKworLy8gSXJxIDMyIHRvIDM1IFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19OVklDX0lQUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MjAKKworLy8gQ1BVSUQgQmFzZQorI2RlZmluZSBDUFVfU0NTX09fQ1BVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDAwCisKKy8vIEludGVycnVwdCBDb250cm9sIFN0YXRlCisjZGVmaW5lIENQVV9TQ1NfT19JQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMDQKKworLy8gVmVjdG9yIFRhYmxlIE9mZnNldAorI2RlZmluZSBDUFVfU0NTX09fVlRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDA4CisKKy8vIEFwcGxpY2F0aW9uIEludGVycnVwdC9SZXNldCBDb250cm9sCisjZGVmaW5lIENQVV9TQ1NfT19BSVJDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMEMKKworLy8gU3lzdGVtIENvbnRyb2wKKyNkZWZpbmUgQ1BVX1NDU19PX1NDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQxMAorCisvLyBDb25maWd1cmF0aW9uIENvbnRyb2wKKyNkZWZpbmUgQ1BVX1NDU19PX0NDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQxNAorCisvLyBTeXN0ZW0gSGFuZGxlcnMgNC03IFByaW9yaXR5CisjZGVmaW5lIENQVV9TQ1NfT19TSFBSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMTgKKworLy8gU3lzdGVtIEhhbmRsZXJzIDgtMTEgUHJpb3JpdHkKKyNkZWZpbmUgQ1BVX1NDU19PX1NIUFIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQxQworCisvLyBTeXN0ZW0gSGFuZGxlcnMgMTItMTUgUHJpb3JpdHkKKyNkZWZpbmUgQ1BVX1NDU19PX1NIUFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQyMAorCisvLyBTeXN0ZW0gSGFuZGxlciBDb250cm9sIGFuZCBTdGF0ZQorI2RlZmluZSBDUFVfU0NTX09fU0hDU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDI0CisKKy8vIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMKKyNkZWZpbmUgQ1BVX1NDU19PX0NGU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQyOAorCisvLyBIYXJkIEZhdWx0IFN0YXR1cworI2RlZmluZSBDUFVfU0NTX09fSEZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDJDCisKKy8vIERlYnVnIEZhdWx0IFN0YXR1cworI2RlZmluZSBDUFVfU0NTX09fREZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDMwCisKKy8vIE1lbSBNYW5hZ2UgRmF1bHQgQWRkcmVzcworI2RlZmluZSBDUFVfU0NTX09fTU1GQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDM0CisKKy8vIEJ1cyBGYXVsdCBBZGRyZXNzCisjZGVmaW5lIENQVV9TQ1NfT19CRkFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEMzgKKworLy8gQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cworI2RlZmluZSBDUFVfU0NTX09fQUZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDNDCisKKy8vIFByb2Nlc3NvciBGZWF0dXJlIDAKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX1BGUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ0MAorCisvLyBQcm9jZXNzb3IgRmVhdHVyZSAxCisjZGVmaW5lIENQVV9TQ1NfT19JRF9QRlIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENDQKKworLy8gRGVidWcgRmVhdHVyZSAwCisjZGVmaW5lIENQVV9TQ1NfT19JRF9ERlIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENDgKKworLy8gQXV4aWxpYXJ5IEZlYXR1cmUgMAorI2RlZmluZSBDUFVfU0NTX09fSURfQUZSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDRDCisKKy8vIE1lbW9yeSBNb2RlbCBGZWF0dXJlIDAKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX01NRlIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ1MAorCisvLyBNZW1vcnkgTW9kZWwgRmVhdHVyZSAxCisjZGVmaW5lIENQVV9TQ1NfT19JRF9NTUZSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENTQKKworLy8gTWVtb3J5IE1vZGVsIEZlYXR1cmUgMgorI2RlZmluZSBDUFVfU0NTX09fSURfTU1GUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDU4CisKKy8vIE1lbW9yeSBNb2RlbCBGZWF0dXJlIDMKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX01NRlIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ1QworCisvLyBJU0EgRmVhdHVyZSAwCisjZGVmaW5lIENQVV9TQ1NfT19JRF9JU0FSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENjAKKworLy8gSVNBIEZlYXR1cmUgMQorI2RlZmluZSBDUFVfU0NTX09fSURfSVNBUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDY0CisKKy8vIElTQSBGZWF0dXJlIDIKKyNkZWZpbmUgQ1BVX1NDU19PX0lEX0lTQVIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQ2OAorCisvLyBJU0EgRmVhdHVyZSAzCisjZGVmaW5lIENQVV9TQ1NfT19JRF9JU0FSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBENkMKKworLy8gSVNBIEZlYXR1cmUgNAorI2RlZmluZSBDUFVfU0NTX09fSURfSVNBUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRDcwCisKKy8vIENvcHJvY2Vzc29yIEFjY2VzcyBDb250cm9sCisjZGVmaW5lIENQVV9TQ1NfT19DUEFDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBEODgKKworLy8gRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMKKyNkZWZpbmUgQ1BVX1NDU19PX0RIQ1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMERGMAorCisvLyBEZXViZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yCisjZGVmaW5lIENQVV9TQ1NfT19EQ1JTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBERjQKKworLy8gRGVidWcgQ29yZSBSZWdpc3RlciBEYXRhCisjZGVmaW5lIENQVV9TQ1NfT19EQ1JEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBERjgKKworLy8gRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wKKyNkZWZpbmUgQ1BVX1NDU19PX0RFTUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMERGQworCisvLyBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdAorI2RlZmluZSBDUFVfU0NTX09fU1RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lDVFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBJTlRMSU5FU05VTQorLy8KKy8vIFRvdGFsIG51bWJlciBvZiBpbnRlcnJ1cHQgbGluZXMgaW4gZ3JvdXBzIG9mIDMyLgorLy8KKy8vIDA6IDAuLi4zMgorLy8gMTogMzMuLi42NAorLy8gMjogNjUuLi45NgorLy8gMzogOTcuLi4xMjgKKy8vIDQ6IDEyOS4uLjE2MAorLy8gNTogMTYxLi4uMTkyCisvLyA2OiAxOTMuLi4yMjQKKy8vIDc6IDIyNS4uLjI1NgorI2RlZmluZSBDUFVfU0NTX0lDVFJfSU5UTElORVNOVU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfSUNUUl9JTlRMSU5FU05VTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgQ1BVX1NDU19JQ1RSX0lOVExJTkVTTlVNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19BQ1RMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIERJU0ZPTEQKKy8vCisvLyBEaXNhYmxlcyBmb2xkaW5nIG9mIElUIGluc3RydWN0aW9uLgorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU0ZPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTRk9MRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNGT0xEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU0ZPTERfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJU0RFRldCVUYKKy8vCisvLyBEaXNhYmxlcyB3cml0ZSBidWZmZXIgdXNlIGR1cmluZyBkZWZhdWx0IG1lbW9yeSBtYXAgYWNjZXNzZXMuIFRoaXMgY2F1c2VzCisvLyBhbGwgYnVzIGZhdWx0cyB0byBiZSBwcmVjaXNlIGJ1cyBmYXVsdHMgYnV0IGRlY3JlYXNlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlCisvLyBwcm9jZXNzb3IgYmVjYXVzZSB0aGUgc3RvcmVzIHRvIG1lbW9yeSBoYXZlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dAorLy8gaW5zdHJ1Y3Rpb24gY2FuIGJlIGV4ZWN1dGVkLgorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU0RFRldCVUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTREVGV0JVRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNERUZXQlVGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU0RFRldCVUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJU01DWUNJTlQKKy8vCisvLyBEaXNhYmxlcyBpbnRlcnJ1cHRpb24gb2YgbXVsdGktY3ljbGUgaW5zdHJ1Y3Rpb25zLiBUaGlzIGluY3JlYXNlcyB0aGUKKy8vIGludGVycnVwdCBsYXRlbmN5IG9mIHRoZSBwcm9jZXNzb3IgYmVjdWFzZSBMRE0vU1RNIGNvbXBsZXRlcyBiZWZvcmUKKy8vIGludGVycnVwdCBzdGFja2luZyBvY2N1cnMuCisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTTUNZQ0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19BQ1RMUl9ESVNNQ1lDSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX0FDVExSX0RJU01DWUNJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfQUNUTFJfRElTTUNZQ0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fU1RDU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE2XSBDT1VOVEZMQUcKKy8vCisvLyBSZXR1cm5zIDEgaWYgdGltZXIgY291bnRlZCB0byAwIHNpbmNlIGxhc3QgdGltZSB0aGlzIHdhcyByZWFkLiBDbGVhcnMgb24KKy8vIHJlYWQgYnkgYXBwbGljYXRpb24gb2YgYW55IHBhcnQgb2YgdGhlIFN5c1RpY2sgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLgorLy8gSWYgcmVhZCBieSB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIERBUCwgdGhpcyBiaXQgaXMgY2xlYXJlZCBvbiByZWFkLW9ubHkgaWYKKy8vIHRoZSBNYXN0ZXJUeXBlIGJpdCBpbiB0aGUgKipBSEItQVAqKiBDb250cm9sIFJlZ2lzdGVyIGlzIHNldCB0byAwLgorLy8gT3RoZXJ3aXNlLCBDT1VOVEZMQUcgaXMgbm90IGNoYW5nZWQgYnkgdGhlIGRlYnVnZ2VyIHJlYWQuCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfQ09VTlRGTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9DT1VOVEZMQUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0NPVU5URkxBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfQ09VTlRGTEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbMl0gQ0xLU09VUkNFCisvLworLy8gQ2xvY2sgc291cmNlOgorLy8KKy8vIDA6IEV4dGVybmFsIHJlZmVyZW5jZSBjbG9jay4KKy8vIDE6IENvcmUgY2xvY2sKKy8vCisvLyBFeHRlcm5hbCBjbG9jayBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZGV2aWNlLiBXcml0ZXMgdG8gdGhpcyBmaWVsZCB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0NMS1NPVVJDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfQ0xLU09VUkNFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9DTEtTT1VSQ0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0NMS1NPVVJDRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFRJQ0tJTlQKKy8vCisvLyAwOiBDb3VudGluZyBkb3duIHRvIHplcm8gZG9lcyBub3QgcGVuZCB0aGUgU3lzVGljayBoYW5kbGVyLiBTb2Z0d2FyZSBjYW4gdXNlCisvLyBDT1VOVEZMQUcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBTeXNUaWNrIGhhbmRsZXIgaGFzIGV2ZXIgY291bnRlZCB0byB6ZXJvLgorLy8gMTogQ291bnRpbmcgZG93biB0byB6ZXJvIHBlbmRzIHRoZSBTeXNUaWNrIGhhbmRsZXIuCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfVElDS0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9USUNLSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX1RJQ0tJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfVElDS0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRU5BQkxFCisvLworLy8gRW5hYmxlIFN5c1RpY2sgY291bnRlcgorLy8KKy8vIDA6IENvdW50ZXIgZGlzYWJsZWQKKy8vIDE6IENvdW50ZXIgb3BlcmF0ZXMgaW4gYSBtdWx0aS1zaG90IHdheS4gVGhhdCBpcywgY291bnRlciBsb2FkcyB3aXRoIHRoZQorLy8gUmVsb2FkIHZhbHVlIFNUUlZSLlJFTE9BRCBhbmQgdGhlbiBiZWdpbnMgY291bnRpbmcgZG93bi4gT24gcmVhY2hpbmcgMCwgaXQKKy8vIHNldHMgQ09VTlRGTEFHIHRvIDEgYW5kIG9wdGlvbmFsbHkgcGVuZHMgdGhlIFN5c1RpY2sgaGFuZGxlciwgYmFzZWQgb24KKy8vIFRJQ0tJTlQuIEl0IHRoZW4gbG9hZHMgU1RSVlIuUkVMT0FEIGFnYWluLCBhbmQgYmVnaW5zIGNvdW50aW5nLgorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfU1RDU1JfRU5BQkxFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19TVENTUl9FTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX1NUQ1NSX0VOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NUUlZSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gUkVMT0FECisvLworLy8gVmFsdWUgdG8gbG9hZCBpbnRvIHRoZSBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIgU1RDVlIuQ1VSUkVOVCB3aGVuIHRoZQorLy8gY291bnRlciByZWFjaGVzIDAuCisjZGVmaW5lIENQVV9TQ1NfU1RSVlJfUkVMT0FEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19TVFJWUl9SRUxPQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBDUFVfU0NTX1NUUlZSX1JFTE9BRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NUQ1ZSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gQ1VSUkVOVAorLy8KKy8vIEN1cnJlbnQgdmFsdWUgYXQgdGhlIHRpbWUgdGhlIHJlZ2lzdGVyIGlzIGFjY2Vzc2VkLiBObyByZWFkLW1vZGlmeS13cml0ZQorLy8gcHJvdGVjdGlvbiBpcyBwcm92aWRlZCwgc28gY2hhbmdlIHdpdGggY2FyZS4gV3JpdGluZyB0byBpdCB3aXRoIGFueSB2YWx1ZQorLy8gY2xlYXJzIHRoZSByZWdpc3RlciB0byAwLiBDbGVhcmluZyB0aGlzIHJlZ2lzdGVyIGFsc28gY2xlYXJzCisvLyBTVENTUi5DT1VOVEZMQUcuCisjZGVmaW5lIENQVV9TQ1NfU1RDVlJfQ1VSUkVOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19TVENWUl9DVVJSRU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBDUFVfU0NTX1NUQ1ZSX0NVUlJFTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NUQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBOT1JFRgorLy8KKy8vIFJlYWRzIGFzIG9uZS4gSW5kaWNhdGVzIHRoYXQgbm8gc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrIGlzIHByb3ZpZGVkLgorI2RlZmluZSBDUFVfU0NTX1NUQ1JfTk9SRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfU1RDUl9OT1JFRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19TVENSX05PUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX1NUQ1JfTk9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFNLRVcKKy8vCisvLyBSZWFkcyBhcyBvbmUuIFRoZSBjYWxpYnJhdGlvbiB2YWx1ZSBpcyBub3QgZXhhY3RseSAxMG1zIGJlY2F1c2Ugb2YgY2xvY2sKKy8vIGZyZXF1ZW5jeS4gVGhpcyBjb3VsZCBhZmZlY3QgaXRzIHN1aXRhYmlsaXR5IGFzIGEgc29mdHdhcmUgcmVhbCB0aW1lIGNsb2NrLgorI2RlZmluZSBDUFVfU0NTX1NUQ1JfU0tFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfU1RDUl9TS0VXX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1BVX1NDU19TVENSX1NLRVdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX1NUQ1JfU0tFV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgWzIzOjBdIFRFTk1TCisvLworLy8gQW4gb3B0aW9uYWwgUmVsb2FkIHZhbHVlIHRvIGJlIHVzZWQgZm9yIDEwbXMgKDEwMEh6KSB0aW1pbmcsIHN1YmplY3QgdG8KKy8vIHN5c3RlbSBjbG9jayBza2V3IGVycm9ycy4gVGhlIHZhbHVlIHJlYWQgaXMgdmFsaWQgb25seSB3aGVuIGNvcmUgY2xvY2sgaXMgYXQKKy8vIDQ4TUh6LgorI2RlZmluZSBDUFVfU0NTX1NUQ1JfVEVOTVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfU1RDUl9URU5NU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgQ1BVX1NDU19TVENSX1RFTk1TX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lTRVIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gU0VURU5BMzEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFNFVEVOQTMwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDMwLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBTRVRFTkEyOQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjkgKFNlZSBFVkVOVDpDUFVJUlFTRUwyOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gU0VURU5BMjgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFNFVEVOQTI3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDI3LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBTRVRFTkEyNgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjYgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gU0VURU5BMjUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFNFVEVOQTI0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI0LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBTRVRFTkEyMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjMgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gU0VURU5BMjIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDIyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFNFVEVOQTIxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDIxLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBTRVRFTkEyMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjAgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gU0VURU5BMTkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFNFVEVOQTE4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDE4LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBTRVRFTkExNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTcgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gU0VURU5BMTYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFNFVEVOQTE1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE1LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBTRVRFTkExNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTQgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gU0VURU5BMTMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDEzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFNFVEVOQTEyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDEyLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBTRVRFTkExMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gU0VURU5BMTAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDEwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFNFVEVOQTkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDkgKFNlZSBFVkVOVDpDUFVJUlFTRUw5LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBTRVRFTkE4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gU0VURU5BNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNFVEVOQTYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDYgKFNlZSBFVkVOVDpDUFVJUlFTRUw2LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBTRVRFTkE1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gU0VURU5BNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFNFVEVOQTMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMgKFNlZSBFVkVOVDpDUFVJUlFTRUwzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBTRVRFTkEyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU0VURU5BMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZW5hYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNFVEVOQTAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDAgKFNlZSBFVkVOVDpDUFVJUlFTRUwwLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjBfU0VURU5BMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMF9TRVRFTkEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIwX1NFVEVOQTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lTRVIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gU0VURU5BMzMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGVuYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjFfU0VURU5BMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMV9TRVRFTkEzM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIxX1NFVEVOQTMzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjFfU0VURU5BMzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNFVEVOQTMyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBlbmFibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDMyLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IGVuYWJsZSBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIxX1NFVEVOQTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNFUjFfU0VURU5BMzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU0VSMV9TRVRFTkEzMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTRVIxX1NFVEVOQTMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lDRVIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gQ0xSRU5BMzEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMzEgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gQ0xSRU5BMzAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMzAgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gQ0xSRU5BMjkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjkgKFNlZSBFVkVOVDpDUFVJUlFTRUwyOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gQ0xSRU5BMjgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjggKFNlZSBFVkVOVDpDUFVJUlFTRUwyOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gQ0xSRU5BMjcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjcgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gQ0xSRU5BMjYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjYgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gQ0xSRU5BMjUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjUgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gQ0xSRU5BMjQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjQgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gQ0xSRU5BMjMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjMgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gQ0xSRU5BMjIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjIgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gQ0xSRU5BMjEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjEgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gQ0xSRU5BMjAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMjAgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gQ0xSRU5BMTkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTkgKFNlZSBFVkVOVDpDUFVJUlFTRUwxOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gQ0xSRU5BMTgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTggKFNlZSBFVkVOVDpDUFVJUlFTRUwxOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gQ0xSRU5BMTcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTcgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gQ0xSRU5BMTYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTYgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gQ0xSRU5BMTUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTUgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gQ0xSRU5BMTQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTQgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gQ0xSRU5BMTMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTMgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gQ0xSRU5BMTIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTIgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gQ0xSRU5BMTEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQ0xSRU5BMTAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGRpc2FibGVzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAgMTAgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQ0xSRU5BOQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICA5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQ0xSRU5BOAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICA4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gQ0xSRU5BNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICA3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gQ0xSRU5BNgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICA2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gQ0xSRU5BNQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICA1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQ0xSRU5BNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICA0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQ0xSRU5BMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICAzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQ0xSRU5BMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICAyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQ0xSRU5BMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICAxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ0xSRU5BMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgZGlzYWJsZXMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyICAwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBlbmFibGUgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIwX0NMUkVOQTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjBfQ0xSRU5BMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMF9DTFJFTkEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JQ0VSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIENMUkVOQTMzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDMzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjFfQ0xSRU5BMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMV9DTFJFTkEzM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIxX0NMUkVOQTMzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjFfQ0xSRU5BMzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENMUkVOQTMyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBkaXNhYmxlcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgIDMyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgZW5hYmxlIHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjFfQ0xSRU5BMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ0VSMV9DTFJFTkEzMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDRVIxX0NMUkVOQTMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNFUjFfQ0xSRU5BMzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVNQUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBTRVRQRU5EMzEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAzMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDMxLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFNFVFBFTkQzMAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gU0VUUEVORDI5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjkgKFNlZSBFVkVOVDpDUFVJUlFTRUwyOS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBTRVRQRU5EMjgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI4LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIFNFVFBFTkQyNworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjcuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gU0VUUEVORDI2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjYgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBTRVRQRU5EMjUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDI1LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFNFVFBFTkQyNAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDI0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjQuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gU0VUUEVORDIzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjMgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBTRVRQRU5EMjIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIyLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFNFVFBFTkQyMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDIxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjEuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gU0VUUEVORDIwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMjAgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBTRVRQRU5EMTkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE5LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFNFVFBFTkQxOAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTguRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gU0VUUEVORDE3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTcgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNy5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBTRVRQRU5EMTYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDE2LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFNFVFBFTkQxNQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDE1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTUuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gU0VUUEVORDE0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTQgKFNlZSBFVkVOVDpDUFVJUlFTRUwxNC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBTRVRQRU5EMTMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDEzLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFNFVFBFTkQxMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDEyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTIuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gU0VUUEVORDExCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMTEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBTRVRQRU5EMTAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAxMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDEwLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFNFVFBFTkQ5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDkuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gU0VUUEVORDgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMOC5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBTRVRQRU5ENworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDcgKFNlZSBFVkVOVDpDUFVJUlFTRUw3LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNFVFBFTkQ2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDYuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gU0VUUEVORDUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciA1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNS5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBTRVRQRU5ENAorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDQgKFNlZSBFVkVOVDpDUFVJUlFTRUw0LkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5ENF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQ0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFNFVFBFTkQzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gU0VUUEVORDIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IHBlbmRzIHRoZQorLy8gaW50ZXJydXB0IG51bWJlciAyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTRVRQRU5EMQorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxLkVWIGZvciBkZXRhaWxzKS4gUmVhZGluZyB0aGUgYml0CisvLyByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFNFVFBFTkQwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDAuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIwX1NFVFBFTkQwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjBfU0VUUEVORDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMF9TRVRQRU5EMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JU1BSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFNFVFBFTkQzMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgcGVuZHMgdGhlCisvLyBpbnRlcnJ1cHQgbnVtYmVyIDMzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzMuRVYgZm9yIGRldGFpbHMpLiBSZWFkaW5nIHRoZSBiaXQKKy8vIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMV9TRVRQRU5EMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIxX1NFVFBFTkQzM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjFfU0VUUEVORDMzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMV9TRVRQRU5EMzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU0VUUEVORDMyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBwZW5kcyB0aGUKKy8vIGludGVycnVwdCBudW1iZXIgMzIgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMi5FViBmb3IgZGV0YWlscykuIFJlYWRpbmcgdGhlIGJpdAorLy8gcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIxX1NFVFBFTkQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSVNQUjFfU0VUUEVORDMyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JU1BSMV9TRVRQRU5EMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lTUFIxX1NFVFBFTkQzMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lDUFIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gQ0xSUEVORDMxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDMxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzEuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQzMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gQ0xSUEVORDMwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDMwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzAuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQzMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gQ0xSUEVORDI5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDI5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjkuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gQ0xSUEVORDI4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDI4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjguRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gQ0xSUEVORDI3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDI3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjcuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gQ0xSUEVORDI2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDI2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjYuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gQ0xSUEVORDI1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDI1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjUuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gQ0xSUEVORDI0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDI0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjQuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gQ0xSUEVORDIzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDIzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjMuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gQ0xSUEVORDIyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDIyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjIuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gQ0xSUEVORDIxCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDIxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjEuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gQ0xSUEVORDIwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDIwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjAuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gQ0xSUEVORDE5CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDE5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTkuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gQ0xSUEVORDE4CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDE4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTguRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gQ0xSUEVORDE3CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDE3IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTcuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gQ0xSUEVORDE2CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDE2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTYuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gQ0xSUEVORDE1CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDE1IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTUuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gQ0xSUEVORDE0CisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDE0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTQuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gQ0xSUEVORDEzCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDEzIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTMuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gQ0xSUEVORDEyCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDEyIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTIuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gQ0xSUEVORDExCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDExIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTEuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQ0xSUEVORDEwCisvLworLy8gV3JpdGluZyAwIHRvIHRoaXMgYml0IGhhcyBubyBlZmZlY3QsIHdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgdGhlCisvLyBjb3JyZXNwb25kaW5nIHBlbmRpbmcgaW50ZXJydXB0IDEwIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTAuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQ0xSUEVORDkKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDkuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQ0xSUEVORDgKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgOCAoU2VlIEVWRU5UOkNQVUlSUVNFTDguRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gQ0xSUEVORDcKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDcuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gQ0xSUEVORDYKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgNiAoU2VlIEVWRU5UOkNQVUlSUVNFTDYuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gQ0xSUEVORDUKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDUuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQ0xSUEVORDQKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDQuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQ0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5ENF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gQ0xSUEVORDMKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQ0xSUEVORDIKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQ0xSUEVORDEKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgMSAoU2VlIEVWRU5UOkNQVUlSUVNFTDEuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ0xSUEVORDAKKy8vCisvLyBXcml0aW5nIDAgdG8gdGhpcyBiaXQgaGFzIG5vIGVmZmVjdCwgd3JpdGluZyAxIHRvIHRoaXMgYml0IGNsZWFycyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBpbnRlcnJ1cHQgMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDAuRVYgZm9yIGRldGFpbHMpLgorLy8gUmVhZGluZyB0aGUgYml0IHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIwX0NMUlBFTkQwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjBfQ0xSUEVORDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMF9DTFJQRU5EMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JQ1BSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIENMUlBFTkQzMworLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAzMyAoU2VlIEVWRU5UOkNQVUlSUVNFTDMzLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjFfQ0xSUEVORDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMV9DTFJQRU5EMzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIxX0NMUlBFTkQzM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjFfQ0xSUEVORDMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENMUlBFTkQzMgorLy8KKy8vIFdyaXRpbmcgMCB0byB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LCB3cml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIHRoZQorLy8gY29ycmVzcG9uZGluZyBwZW5kaW5nIGludGVycnVwdCAzMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDMyLkVWIGZvciBkZXRhaWxzKS4KKy8vIFJlYWRpbmcgdGhlIGJpdCByZXR1cm5zIGl0cyBjdXJyZW50IHN0YXRlLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjFfQ0xSUEVORDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQ1BSMV9DTFJQRU5EMzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lDUFIxX0NMUlBFTkQzMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUNQUjFfQ0xSUEVORDMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSUFCUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBBQ1RJVkUzMQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAzMSBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAzMSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMzEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIEFDVElWRTMwCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDMwIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDMwIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwzMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gQUNUSVZFMjkKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjkgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjkgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDI5LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBBQ1RJVkUyOAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyOCBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAyOCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMjguRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIEFDVElWRTI3CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDI3IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDI3IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyNy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gQUNUSVZFMjYKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjYgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjYgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDI2LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBBQ1RJVkUyNQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyNSBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAyNSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMjUuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIEFDVElWRTI0CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDI0IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDI0IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyNC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gQUNUSVZFMjMKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjMgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjMgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDIzLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBBQ1RJVkUyMgorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAyMiBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAyMiBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMjIuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIEFDVElWRTIxCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDIxIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDIxIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwyMS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gQUNUSVZFMjAKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMjAgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMjAgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDIwLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBBQ1RJVkUxOQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxOSBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxOSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTkuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIEFDVElWRTE4CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDE4IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDE4IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxOC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gQUNUSVZFMTcKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTcgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTcgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDE3LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBBQ1RJVkUxNgorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxNiBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxNiBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTYuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIEFDVElWRTE1CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDE1IGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDE1IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxNS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gQUNUSVZFMTQKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTQgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTQgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDE0LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBBQ1RJVkUxMworLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxMyBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxMyBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTMuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIEFDVElWRTEyCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDEyIGlzIG5vdCBhY3RpdmUuCisvLyBSZWFkaW5nIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDEyIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwxMi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gQUNUSVZFMTEKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMTEgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMTEgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDExLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBBQ1RJVkUxMAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxMCBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAxMCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMTAuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIEFDVElWRTkKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgOSBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSA5IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUw5LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBBQ1RJVkU4CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDggaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgOCBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMOC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gQUNUSVZFNworLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSA3IGlzIG5vdCBhY3RpdmUuIFJlYWRpbmcKKy8vIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDcgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDcuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIEFDVElWRTYKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgNiBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSA2IGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUw2LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBBQ1RJVkU1CisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDUgaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgNSBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMNS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQUNUSVZFNAorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSA0IGlzIG5vdCBhY3RpdmUuIFJlYWRpbmcKKy8vIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDQgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDQuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkU0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEFDVElWRTMKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMyBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAzIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwzLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBQ1RJVkUyCisvLworLy8gUmVhZGluZyAwIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IGludGVycnVwdCBsaW5lIDIgaXMgbm90IGFjdGl2ZS4gUmVhZGluZworLy8gMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMiBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQUNUSVZFMQorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAxIGlzIG5vdCBhY3RpdmUuIFJlYWRpbmcKKy8vIDEgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgdGhlIGludGVycnVwdCBsaW5lIDEgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEFDVElWRTAKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMCBpcyBub3QgYWN0aXZlLiBSZWFkaW5nCisvLyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAwIGlzIGFjdGl2ZSAoU2VlCisvLyBFVkVOVDpDUFVJUlFTRUwwLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjBfQUNUSVZFMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMF9BQ1RJVkUwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIwX0FDVElWRTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lBQlIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gQUNUSVZFMzMKKy8vCisvLyBSZWFkaW5nIDAgZnJvbSB0aGlzIGJpdCBpbXBsaWVzIHRoYXQgaW50ZXJydXB0IGxpbmUgMzMgaXMgbm90IGFjdGl2ZS4KKy8vIFJlYWRpbmcgMSBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCB0aGUgaW50ZXJydXB0IGxpbmUgMzMgaXMgYWN0aXZlIChTZWUKKy8vIEVWRU5UOkNQVUlSUVNFTDMzLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIxX0FDVElWRTMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjFfQUNUSVZFMzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMV9BQ1RJVkUzM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIxX0FDVElWRTMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBBQ1RJVkUzMgorLy8KKy8vIFJlYWRpbmcgMCBmcm9tIHRoaXMgYml0IGltcGxpZXMgdGhhdCBpbnRlcnJ1cHQgbGluZSAzMiBpcyBub3QgYWN0aXZlLgorLy8gUmVhZGluZyAxIGZyb20gdGhpcyBiaXQgaW1wbGllcyB0aGF0IHRoZSBpbnRlcnJ1cHQgbGluZSAzMiBpcyBhY3RpdmUgKFNlZQorLy8gRVZFTlQ6Q1BVSVJRU0VMMzIuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjFfQUNUSVZFMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JQUJSMV9BQ1RJVkUzMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lBQlIxX0FDVElWRTMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX05WSUNfSUFCUjFfQUNUSVZFMzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVBSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV8zCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDMgKFNlZSBFVkVOVDpDUFVJUlFTRUwzLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzIKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8yX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfMQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8xX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8wCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDAgKFNlZSBFVkVOVDpDUFVJUlFTRUwwLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjBfUFJJXzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMF9QUklfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIwX1BSSV8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JUFIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzcKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDcuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQUklfNgorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCA2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMNi5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV82X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSSV81CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDUgKFNlZSBFVkVOVDpDUFVJUlFTRUw1LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV81X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUFJJXzQKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDQuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMV9QUklfNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIxX1BSSV80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjFfUFJJXzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lQUjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQUklfMTEKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTEgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV8xMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV8xMAorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxMCAoU2VlIEVWRU5UOkNQVUlSUVNFTDEwLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzEwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFJJXzkKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDkuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfOV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV85X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQUklfOAorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCA4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMOC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIyX1BSSV84X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjJfUFJJXzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSMl9QUklfOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVBSMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV8xNQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxNSAoU2VlIEVWRU5UOkNQVUlSUVNFTDE1LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzE1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzE0CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDE0IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTQuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfMTMKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTMgKFNlZSBFVkVOVDpDUFVJUlFTRUwxMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8xMgorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDEyLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjNfUFJJXzEyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSM19QUklfMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFIzX1BSSV8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JUFI0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzE5CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDE5IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTkuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMTlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQUklfMTgKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMTggKFNlZSBFVkVOVDpDUFVJUlFTRUwxOC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSSV8xNworLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAxNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDE3LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUFJJXzE2CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDE2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMTYuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNF9QUklfMTZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI0X1BSSV8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjRfUFJJXzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lQUjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQUklfMjMKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjMgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV8yMgorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDIyLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gUFJJXzIxCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDIxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBQUklfMjAKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjAgKFNlZSBFVkVOVDpDUFVJUlFTRUwyMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI1X1BSSV8yMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjVfUFJJXzIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNV9QUklfMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX05WSUNfSVBSNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBSSV8yNworLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyNyAoU2VlIEVWRU5UOkNQVUlSUVNFTDI3LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzI2CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDI2IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjYuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQUklfMjUKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMjUgKFNlZSBFVkVOVDpDUFVJUlFTRUwyNS5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8yNAorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyNCAoU2VlIEVWRU5UOkNQVUlSUVNFTDI0LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjZfUFJJXzI0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSNl9QUklfMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI2X1BSSV8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fTlZJQ19JUFI3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzMxCisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDMxIChTZWUgRVZFTlQ6Q1BVSVJRU0VMMzEuRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMzFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBQUklfMzAKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMzAgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMC5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8zMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSSV8yOQorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAyOSAoU2VlIEVWRU5UOkNQVUlSUVNFTDI5LkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzI5X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMjlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8yOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUFJJXzI4CisvLworLy8gUHJpb3JpdHkgb2YgaW50ZXJydXB0IDI4IChTZWUgRVZFTlQ6Q1BVSVJRU0VMMjguRVYgZm9yIGRldGFpbHMpLgorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSN19QUklfMjhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI3X1BSSV8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjdfUFJJXzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19OVklDX0lQUjgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBQUklfMzMKKy8vCisvLyBQcmlvcml0eSBvZiBpbnRlcnJ1cHQgMzMgKFNlZSBFVkVOVDpDUFVJUlFTRUwzMy5FViBmb3IgZGV0YWlscykuCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI4X1BSSV8zM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjhfUFJJXzMzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSOF9QUklfMzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8zMgorLy8KKy8vIFByaW9yaXR5IG9mIGludGVycnVwdCAzMiAoU2VlIEVWRU5UOkNQVUlSUVNFTDMyLkVWIGZvciBkZXRhaWxzKS4KKyNkZWZpbmUgQ1BVX1NDU19OVklDX0lQUjhfUFJJXzMyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX05WSUNfSVBSOF9QUklfMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfTlZJQ19JUFI4X1BSSV8zMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQ1BVSUQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBJTVBMRU1FTlRFUgorLy8KKy8vIEltcGxlbWVudG9yIGNvZGUuCisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfSU1QTEVNRU5URVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9JTVBMRU1FTlRFUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0NQVUlEX0lNUExFTUVOVEVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MjBdIFZBUklBTlQKKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHZhcmlhbnQgbnVtYmVyLgorI2RlZmluZSBDUFVfU0NTX0NQVUlEX1ZBUklBTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfVkFSSUFOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9WQVJJQU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBDT05TVEFOVAorLy8KKy8vIFJlYWRzIGFzIDB4RgorI2RlZmluZSBDUFVfU0NTX0NQVUlEX0NPTlNUQU5UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfQ09OU1RBTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9DT05TVEFOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo0XSBQQVJUTk8KKy8vCisvLyBOdW1iZXIgb2YgcHJvY2Vzc29yIHdpdGhpbiBmYW1pbHkuCisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfUEFSVE5PX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9QQVJUTk9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBDUFVfU0NTX0NQVUlEX1BBUlROT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIFJFVklTSU9OCisvLworLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCByZXZpc2lvbiBudW1iZXIuCisjZGVmaW5lIENQVV9TQ1NfQ1BVSURfUkVWSVNJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19DUFVJRF9SRVZJU0lPTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfU0NTX0NQVUlEX1JFVklTSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lDU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBOTUlQRU5EU0VUCisvLworLy8gU2V0IHBlbmRpbmcgTk1JIGJpdC4gU2V0dGluZyB0aGlzIGJpdCBwZW5kcyBhbmQgYWN0aXZhdGVzIGFuIE5NSS4gQmVjYXVzZQorLy8gTk1JIGlzIHRoZSBoaWdoZXN0LXByaW9yaXR5IGludGVycnVwdCwgaXQgdGFrZXMgZWZmZWN0IGFzIHNvb24gYXMgaXQKKy8vIHJlZ2lzdGVycy4KKy8vCisvLyAwOiBObyBhY3Rpb24KKy8vIDE6IFNldCBwZW5kaW5nIE5NSQorI2RlZmluZSBDUFVfU0NTX0lDU1JfTk1JUEVORFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9OTUlQRU5EU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX05NSVBFTkRTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfTk1JUEVORFNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMjhdIFBFTkRTVlNFVAorLy8KKy8vIFNldCBwZW5kaW5nIHBlbmRTViBiaXQuCisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBTZXQgcGVuZGluZyBQZW5kU1YKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNWU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1ZTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVlNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBQRU5EU1ZDTFIKKy8vCisvLyBDbGVhciBwZW5kaW5nIHBlbmRTViBiaXQKKy8vCisvLyAwOiBObyBhY3Rpb24KKy8vIDE6IENsZWFyIHBlbmRpbmcgcGVuZFNWCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1ZDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVkNMUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNWQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1ZDTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gUEVORFNUU0VUCisvLworLy8gU2V0IGEgcGVuZGluZyBTeXNUaWNrIGJpdC4KKy8vCisvLyAwOiBObyBhY3Rpb24KKy8vIDE6IFNldCBwZW5kaW5nIFN5c1RpY2sKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNUU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1RTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVFNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBQRU5EU1RDTFIKKy8vCisvLyBDbGVhciBwZW5kaW5nIFN5c1RpY2sgYml0CisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBDbGVhciBwZW5kaW5nIFN5c1RpY2sKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVENMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfUEVORFNUQ0xSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIENQVV9TQ1NfSUNTUl9QRU5EU1RDTFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1BFTkRTVENMUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzIzXSBJU1JQUkVFTVBUCisvLworLy8gVGhpcyBmaWVsZCBjYW4gb25seSBiZSB1c2VkIGF0IGRlYnVnIHRpbWUuIEl0IGluZGljYXRlcyB0aGF0IGEgcGVuZGluZworLy8gaW50ZXJydXB0IGlzIHRvIGJlIHRha2VuIGluIHRoZSBuZXh0IHJ1bm5pbmcgY3ljbGUuIElmIERIQ1NSLkNfTUFTS0lOVFM9IDAsCisvLyB0aGUgaW50ZXJydXB0IGlzIHNlcnZpY2VkLgorLy8KKy8vIDA6IEEgcGVuZGluZyBleGNlcHRpb24gaXMgbm90IHNlcnZpY2VkLgorLy8gMTogQSBwZW5kaW5nIGV4Y2VwdGlvbiBpcyBzZXJ2aWNlZCBvbiBleGl0IGZyb20gdGhlIGRlYnVnIGhhbHQgc3RhdGUKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX0lTUlBSRUVNUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfSVNSUFJFRU1QVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9JU1JQUkVFTVBUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX0lTUlBSRUVNUFRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBJU1JQRU5ESU5HCisvLworLy8gSW50ZXJydXB0IHBlbmRpbmcgZmxhZy4gRXhjbHVkZXMgTk1JIGFuZCBmYXVsdHMuCisvLworLy8gMHgwOiBJbnRlcnJ1cHQgbm90IHBlbmRpbmcKKy8vIDB4MTogSW50ZXJydXB0IHBlbmRpbmcKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX0lTUlBFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfSVNSUEVORElOR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9JU1JQRU5ESU5HX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX0lTUlBFTkRJTkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogWzE3OjEyXSBWRUNUUEVORElORworLy8KKy8vIFBlbmRpbmcgSVNSIG51bWJlciBmaWVsZC4gVGhpcyBmaWVsZCBjb250YWlucyB0aGUgaW50ZXJydXB0IG51bWJlciBvZiB0aGUKKy8vIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBJU1IuCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9WRUNUUEVORElOR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1ZFQ1RQRU5ESU5HX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzRjAwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfVkVDVFBFTkRJTkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFJFVFRPQkFTRQorLy8KKy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBwcmVlbXB0ZWQgYWN0aXZlIGV4Y2VwdGlvbnM6CisvLworLy8gMDogVGhlcmUgYXJlIHByZWVtcHRlZCBhY3RpdmUgZXhjZXB0aW9ucyB0byBleGVjdXRlCisvLyAxOiBUaGVyZSBhcmUgbm8gYWN0aXZlIGV4Y2VwdGlvbnMsIG9yIHRoZSBjdXJyZW50bHktZXhlY3V0aW5nIGV4Y2VwdGlvbiBpcworLy8gdGhlIG9ubHkgYWN0aXZlIGV4Y2VwdGlvbi4KKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1JFVFRPQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX0lDU1JfUkVUVE9CQVNFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENQVV9TQ1NfSUNTUl9SRVRUT0JBU0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1JFVFRPQkFTRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICBbODowXSBWRUNUQUNUSVZFCisvLworLy8gQWN0aXZlIElTUiBudW1iZXIgZmllbGQuIFJlc2V0IGNsZWFycyB0aGlzIGZpZWxkLgorI2RlZmluZSBDUFVfU0NTX0lDU1JfVkVDVEFDVElWRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9TQ1NfSUNTUl9WRUNUQUNUSVZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxRkYKKyNkZWZpbmUgQ1BVX1NDU19JQ1NSX1ZFQ1RBQ1RJVkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19WVE9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjk6N10gVEJMT0ZGCisvLworLy8gQml0cyAyOSBkb3duIHRvIDcgb2YgdGhlIHZlY3RvciB0YWJsZSBiYXNlIG9mZnNldC4KKyNkZWZpbmUgQ1BVX1NDU19WVE9SX1RCTE9GRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBDUFVfU0NTX1ZUT1JfVEJMT0ZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGRkZGRjgwCisjZGVmaW5lIENQVV9TQ1NfVlRPUl9UQkxPRkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQUlSQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBWRUNUS0VZCisvLworLy8gUmVnaXN0ZXIga2V5LiBXcml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgKEFJUkNSKSByZXF1aXJlcyAweDA1RkEgaW4gVkVDVEtFWS4KKy8vIE90aGVyd2lzZSB0aGUgd3JpdGUgdmFsdWUgaXMgaWdub3JlZC4gUmVhZCBhbHdheXMgcmV0dXJucyAweEZBMDUuCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVEtFWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUS0VZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RLRVlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIEVORElBTkVTUworLy8KKy8vIERhdGEgZW5kaWFubmVzcyBiaXQKKy8vIEVOVU1zOgorLy8gQklHICAgICAgICAgICAgICAgICAgICAgIEJpZyBlbmRpYW4KKy8vIExJVFRMRSAgICAgICAgICAgICAgICAgICBMaXR0bGUgZW5kaWFuCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfRU5ESUFORVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9FTkRJQU5FU1NfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX0FJUkNSX0VORElBTkVTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfRU5ESUFORVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9FTkRJQU5FU1NfQklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX0FJUkNSX0VORElBTkVTU19MSVRUTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzEwOjhdIFBSSUdST1VQCisvLworLy8gSW50ZXJydXB0IHByaW9yaXR5IGdyb3VwaW5nIGZpZWxkLiBUaGlzIGZpZWxkIGlzIGEgYmluYXJ5IHBvaW50IHBvc2l0aW9uCisvLyBpbmRpY2F0b3IgZm9yIGNyZWF0aW5nIHN1YnByaW9yaXRpZXMgZm9yIGV4Y2VwdGlvbnMgdGhhdCBzaGFyZSB0aGUgc2FtZQorLy8gcHJlLWVtcHRpb24gbGV2ZWwuIEl0IGRpdmlkZXMgdGhlIFBSSV9uIGZpZWxkIGluIHRoZSBJbnRlcnJ1cHQgUHJpb3JpdHkKKy8vIFJlZ2lzdGVycyAoTlZJQ19JUFIwLCBOVklDX0lQUjEsLi4uLCBhbmQgIE5WSUNfSVBSOCkgaW50byBhIHByZS1lbXB0aW9uCisvLyBsZXZlbCBhbmQgYSBzdWJwcmlvcml0eSBsZXZlbC4gVGhlIGJpbmFyeSBwb2ludCBpcyBhIGxlZnQtb2YgdmFsdWUuIFRoaXMKKy8vIG1lYW5zIHRoYXQgdGhlIFBSSUdST1VQIHZhbHVlIHJlcHJlc2VudHMgYSBwb2ludCBzdGFydGluZyBhdCB0aGUgbGVmdCBvZiB0aGUKKy8vIExlYXN0IFNpZ25pZmljYW50IEJpdCAoTFNCKS4gVGhlIGxvd2VzdCB2YWx1ZSBtaWdodCBub3QgYmUgMCBkZXBlbmRpbmcgb24KKy8vIHRoZSBudW1iZXIgb2YgYml0cyBhbGxvY2F0ZWQgZm9yIHByaW9yaXRpZXMsIGFuZCBpbXBsZW1lbnRhdGlvbiBjaG9pY2VzLgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1BSSUdST1VQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfUFJJR1JPVVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9QUklHUk9VUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFsyXSBTWVNSRVNFVFJFUQorLy8KKy8vIFJlcXVlc3RzIGEgd2FybSByZXNldC4gU2V0dGluZyB0aGlzIGJpdCBkb2VzIG5vdCBwcmV2ZW50IEhhbHRpbmcgRGVidWcgZnJvbQorLy8gcnVubmluZy4KKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9TWVNSRVNFVFJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1NZU1JFU0VUUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfU1lTUkVTRVRSRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9TWVNSRVNFVFJFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBWRUNUQ0xSQUNUSVZFCisvLworLy8gQ2xlYXJzIGFsbCBhY3RpdmUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIGFjdGl2ZSBOTUksIGZhdWx0LCBhbmQgaW50ZXJydXB0cy4KKy8vIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVpbml0aWFsaXplIHRoZSBzdGFjay4gVGhpcworLy8gYml0IGlzIGZvciByZXR1cm5pbmcgdG8gYSBrbm93biBzdGF0ZSBkdXJpbmcgZGVidWcuIFRoZSBiaXQgc2VsZi1jbGVhcnMuCisvLyBJUFNSIGlzIG5vdCBjbGVhcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBTbywgaWYgdXNlZCBieSBhbiBhcHBsaWNhdGlvbiwgaXQKKy8vIG11c3Qgb25seSBiZSB1c2VkIGF0IHRoZSBiYXNlIGxldmVsIG9mIGFjdGl2YXRpb24sIG9yIHdpdGhpbiBhIHN5c3RlbQorLy8gaGFuZGxlciB3aG9zZSBhY3RpdmUgYml0IGNhbiBiZSBzZXQuCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVENMUkFDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUQ0xSQUNUSVZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVENMUkFDVElWRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVkVDVFJFU0VUCisvLworLy8gU3lzdGVtIFJlc2V0IGJpdC4gUmVzZXRzIHRoZSBzeXN0ZW0sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBkZWJ1ZyBjb21wb25lbnRzLgorLy8gVGhpcyBiaXQgaXMgcmVzZXJ2ZWQgZm9yIGRlYnVnIHVzZSBhbmQgY2FuIGJlIHdyaXR0ZW4gdG8gMSBvbmx5IHdoZW4gdGhlCisvLyBjb3JlIGlzIGhhbHRlZC4gVGhlIGJpdCBzZWxmLWNsZWFycy4gV3JpdGluZyB0aGlzIGJpdCB0byAxIHdoaWxlIGNvcmUgaXMgbm90CisvLyBoYWx0ZWQgbWF5IHJlc3VsdCBpbiB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLgorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfQUlSQ1JfVkVDVFJFU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19BSVJDUl9WRUNUUkVTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0FJUkNSX1ZFQ1RSRVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIFNFVk9OUEVORAorLy8KKy8vIFNlbmQgRXZlbnQgb24gUGVuZGluZyBiaXQ6CisvLworLy8gMDogT25seSBlbmFibGVkIGludGVycnVwdHMgb3IgZXZlbnRzIGNhbiB3YWtldXAgdGhlIHByb2Nlc3NvciwgZGlzYWJsZWQKKy8vIGludGVycnVwdHMgYXJlIGV4Y2x1ZGVkCisvLyAxOiBFbmFibGVkIGV2ZW50cyBhbmQgYWxsIGludGVycnVwdHMsIGluY2x1ZGluZyBkaXNhYmxlZCBpbnRlcnJ1cHRzLCBjYW4KKy8vIHdha2V1cCB0aGUgcHJvY2Vzc29yLgorLy8KKy8vIFdoZW4gYW4gZXZlbnQgb3IgaW50ZXJydXB0IGVudGVycyBwZW5kaW5nIHN0YXRlLCB0aGUgZXZlbnQgc2lnbmFsIHdha2VzIHVwCisvLyB0aGUgcHJvY2Vzc29yIGZyb20gV0ZFLiBJZgorLy8gdGhlIHByb2Nlc3NvciBpcyBub3Qgd2FpdGluZyBmb3IgYW4gZXZlbnQsIHRoZSBldmVudCBpcyByZWdpc3RlcmVkIGFuZAorLy8gYWZmZWN0cyB0aGUgbmV4dCBXRkUuCisvLyBUaGUgcHJvY2Vzc29yIGFsc28gd2FrZXMgdXAgb24gZXhlY3V0aW9uIG9mIGFuIFNFViBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0VWT05QRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX1NDUl9TRVZPTlBFTkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfU0NSX1NFVk9OUEVORF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0VWT05QRU5EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsyXSBTTEVFUERFRVAKKy8vCisvLyBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBzbGVlcCBvciBkZWVwIHNsZWVwIGFzIGl0cyBsb3cgcG93ZXIKKy8vIG1vZGUKKy8vIEVOVU1zOgorLy8gREVFUFNMRUVQICAgICAgICAgICAgICAgIERlZXAgc2xlZXAKKy8vIFNMRUVQICAgICAgICAgICAgICAgICAgICBTbGVlcAorI2RlZmluZSBDUFVfU0NTX1NDUl9TTEVFUERFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQREVFUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBERUVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX1NDUl9TTEVFUERFRVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQREVFUF9ERUVQU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBERUVQX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBTTEVFUE9ORVhJVAorLy8KKy8vIFNsZWVwIG9uIGV4aXQgd2hlbiByZXR1cm5pbmcgZnJvbSBIYW5kbGVyIG1vZGUgdG8gVGhyZWFkIG1vZGUuIEVuYWJsZXMKKy8vIGludGVycnVwdCBkcml2ZW4gYXBwbGljYXRpb25zIHRvIGF2b2lkIHJldHVybmluZyB0byBlbXB0eSBtYWluIGFwcGxpY2F0aW9uLgorLy8KKy8vIDA6IERvIG5vdCBzbGVlcCB3aGVuIHJldHVybmluZyB0byB0aHJlYWQgbW9kZQorLy8gMTogU2xlZXAgb24gSVNSIGV4aXQKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBPTkVYSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX1NDUl9TTEVFUE9ORVhJVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfU0NSX1NMRUVQT05FWElUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19TQ1JfU0xFRVBPTkVYSVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19DQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs5XSBTVEtBTElHTgorLy8KKy8vIFN0YWNrIGFsaWdubWVudCBiaXQuCisvLworLy8gMDogT25seSA0LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgZm9yIHRoZSBTUCB1c2VkIHByaW9yIHRvIHRoZQorLy8gZXhjZXB0aW9uIG9uIGV4Y2VwdGlvbiBlbnRyeS4KKy8vIDE6IE9uIGV4Y2VwdGlvbiBlbnRyeSwgdGhlIFNQIHVzZWQgcHJpb3IgdG8gdGhlIGV4Y2VwdGlvbiBpcyBhZGp1c3RlZCB0byBiZQorLy8gOC1ieXRlIGFsaWduZWQgYW5kIHRoZSBjb250ZXh0IHRvIHJlc3RvcmUgaXQgaXMgc2F2ZWQuIFRoZSBTUCBpcyByZXN0b3JlZCBvbgorLy8gdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uIHJldHVybi4KKyNkZWZpbmUgQ1BVX1NDU19DQ1JfU1RLQUxJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX0NDUl9TVEtBTElHTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9TQ1NfQ0NSX1NUS0FMSUdOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfU1RLQUxJR05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBCRkhGTk1JR04KKy8vCisvLyBFbmFibGVzIGhhbmRsZXJzIHdpdGggcHJpb3JpdHkgLTEgb3IgLTIgdG8gaWdub3JlIGRhdGEgQnVzRmF1bHRzIGNhdXNlZCBieQorLy8gbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zLiBUaGlzIGFwcGxpZXMgdG8gdGhlIEhhcmRGYXVsdCwgTk1JLCBhbmQKKy8vIEZBVUxUTUFTSyBlc2NhbGF0ZWQgaGFuZGxlcnM6CisvLworLy8gMDogRGF0YSBCdXNGYXVsdHMgY2F1c2VkIGJ5IGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucyBjYXVzZSBhIGxvY2stdXAKKy8vIDE6IERhdGEgQnVzRmF1bHRzIGNhdXNlZCBieSBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgYXJlIGlnbm9yZWQuCisvLworLy8gU2V0IHRoaXMgYml0IHRvIDEgb25seSB3aGVuIHRoZSBoYW5kbGVyIGFuZCBpdHMgZGF0YSBhcmUgaW4gYWJzb2x1dGVseSBzYWZlCisvLyBtZW1vcnkuIFRoZSBub3JtYWwgdXNlCisvLyBvZiB0aGlzIGJpdCBpcyB0byBwcm9iZSBzeXN0ZW0gZGV2aWNlcyBhbmQgYnJpZGdlcyB0byBkZXRlY3QgcHJvYmxlbXMuCisjZGVmaW5lIENQVV9TQ1NfQ0NSX0JGSEZOTUlHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfQkZIRk5NSUdOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX0NDUl9CRkhGTk1JR05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfQ0NSX0JGSEZOTUlHTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNF0gRElWXzBfVFJQCisvLworLy8gRW5hYmxlcyBmYXVsdGluZyBvciBoYWx0aW5nIHdoZW4gdGhlIHByb2Nlc3NvciBleGVjdXRlcyBhbiBTRElWIG9yIFVESVYKKy8vIGluc3RydWN0aW9uIHdpdGggYSBkaXZpc29yIG9mIDA6CisvLworLy8gMDogRG8gbm90IHRyYXAgZGl2aWRlIGJ5IDAuIEluIHRoaXMgbW9kZSwgYSBkaXZpZGUgYnkgemVybyByZXR1cm5zIGEKKy8vIHF1b3RpZW50IG9mIDAuCisvLyAxOiBUcmFwIGRpdmlkZSBieSAwLiBUaGUgcmVsZXZhbnQgVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIGJpdCBpcworLy8gQ0ZTUi5ESVZCWVpFUk8uCisjZGVmaW5lIENQVV9TQ1NfQ0NSX0RJVl8wX1RSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfRElWXzBfVFJQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0NDUl9ESVZfMF9UUlBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfQ0NSX0RJVl8wX1RSUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gVU5BTElHTl9UUlAKKy8vCisvLyBFbmFibGVzIHVuYWxpZ25lZCBhY2Nlc3MgdHJhcHM6CisvLworLy8gMDogRG8gbm90IHRyYXAgdW5hbGlnbmVkIGhhbGZ3b3JkIGFuZCB3b3JkIGFjY2Vzc2VzCisvLyAxOiBUcmFwIHVuYWxpZ25lZCBoYWxmd29yZCBhbmQgd29yZCBhY2Nlc3Nlcy4gVGhlIHJlbGV2YW50IFVzYWdlIEZhdWx0CisvLyBTdGF0dXMgUmVnaXN0ZXIgYml0IGlzIENGU1IuVU5BTElHTkVELgorLy8KKy8vIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCBhbiB1bmFsaWduZWQgYWNjZXNzIGdlbmVyYXRlcyBhIFVzYWdlRmF1bHQuCisvLyBVbmFsaWduZWQgTERNLCBTVE0sIExEUkQsIGFuZCBTVFJEIGluc3RydWN0aW9ucyBhbHdheXMgZmF1bHQgcmVnYXJkbGVzcyBvZgorLy8gdGhlIHZhbHVlIGluIFVOQUxJR05fVFJQLgorI2RlZmluZSBDUFVfU0NTX0NDUl9VTkFMSUdOX1RSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfQ0NSX1VOQUxJR05fVFJQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfVU5BTElHTl9UUlBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX0NDUl9VTkFMSUdOX1RSUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzFdIFVTRVJTRVRNUEVORAorLy8KKy8vIEVuYWJsZXMgdW5wcml2aWxlZ2VkIHNvZnR3YXJlIGFjY2VzcyB0byBTVElSOgorLy8KKy8vIDA6IFVzZXIgY29kZSBpcyBub3QgYWxsb3dlZCB0byB3cml0ZSB0byB0aGUgU29mdHdhcmUgVHJpZ2dlciBJbnRlcnJ1cHQKKy8vIHJlZ2lzdGVyIChTVElSKS4KKy8vIDE6IFVzZXIgY29kZSBjYW4gd3JpdGUgdGhlIFNvZnR3YXJlIFRyaWdnZXIgSW50ZXJydXB0IHJlZ2lzdGVyIChTVElSKSB0bworLy8gdHJpZ2dlciAocGVuZCkgYSBNYWluIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYWluIHN0YWNrCisvLyBwb2ludGVyLgorI2RlZmluZSBDUFVfU0NTX0NDUl9VU0VSU0VUTVBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfQ0NSX1VTRVJTRVRNUEVORF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfVVNFUlNFVE1QRU5EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0NDUl9VU0VSU0VUTVBFTkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIE5PTkJBU0VUSFJFREVOQQorLy8KKy8vIEluZGljYXRlcyBob3cgdGhlIHByb2Nlc3NvciBlbnRlcnMgVGhyZWFkIG1vZGU6CisvLworLy8gMDogUHJvY2Vzc29yIGNhbiBlbnRlciBUaHJlYWQgbW9kZSBvbmx5IHdoZW4gbm8gZXhjZXB0aW9uIGlzIGFjdGl2ZS4KKy8vIDE6IFByb2Nlc3NvciBjYW4gZW50ZXIgVGhyZWFkIG1vZGUgZnJvbSBhbnkgbGV2ZWwgdXNpbmcgdGhlIGFwcHJvcHJpYXRlCisvLyByZXR1cm4gdmFsdWUgKEVYQ19SRVRVUk4pLgorLy8KKy8vIEV4Y2VwdGlvbiByZXR1cm5zIG9jY3VyIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGxvYWRzIGEgdmFsdWUKKy8vIG9mIDB4RlhYWFhYWFggaW50byB0aGUgUEMgd2hpbGUgaW4gSGFuZGxlciBtb2RlOgorLy8gLSBQT1AvTERNIHdoaWNoIGluY2x1ZGVzIGxvYWRpbmcgdGhlIFBDLgorLy8gLSBMRFIgd2l0aCBQQyBhcyBhIGRlc3RpbmF0aW9uLgorLy8gLSBCWCB3aXRoIGFueSByZWdpc3Rlci4KKy8vIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQyBpcyBpbnRlcmNlcHRlZCBhbmQgaXMgcmVmZXJyZWQgdG8gYXMgdGhlCisvLyBFWENfUkVUVVJOIHZhbHVlLgorI2RlZmluZSBDUFVfU0NTX0NDUl9OT05CQVNFVEhSRURFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfQ0NSX05PTkJBU0VUSFJFREVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1NDU19DQ1JfTk9OQkFTRVRIUkVERU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0NDUl9OT05CQVNFVEhSRURFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NIUFIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoxNl0gUFJJXzYKKy8vCisvLyBQcmlvcml0eSBvZiBzeXN0ZW0gaGFuZGxlciA2LiBVc2FnZUZhdWx0CisjZGVmaW5lIENQVV9TQ1NfU0hQUjFfUFJJXzZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMV9QUklfNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIUFIxX1BSSV82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBSSV81CisvLworLy8gUHJpb3JpdHkgb2Ygc3lzdGVtIGhhbmRsZXIgNTogQnVzRmF1bHQKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMV9QUklfNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX1NIUFIxX1BSSV81X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIENQVV9TQ1NfU0hQUjFfUFJJXzVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gUFJJXzQKKy8vCisvLyBQcmlvcml0eSBvZiBzeXN0ZW0gaGFuZGxlciA0OiBNZW1NYW5hZ2UKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMV9QUklfNF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfU0NTX1NIUFIxX1BSSV80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENQVV9TQ1NfU0hQUjFfUFJJXzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fU0hQUjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQUklfMTEKKy8vCisvLyBQcmlvcml0eSBvZiBzeXN0ZW0gaGFuZGxlciAxMS4gU1ZDYWxsCisjZGVmaW5lIENQVV9TQ1NfU0hQUjJfUFJJXzExX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSMl9QUklfMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIUFIyX1BSSV8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NIUFIzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUFJJXzE1CisvLworLy8gUHJpb3JpdHkgb2Ygc3lzdGVtIGhhbmRsZXIgMTUuIFN5c1RpY2sgZXhjZXB0aW9uCisjZGVmaW5lIENQVV9TQ1NfU0hQUjNfUFJJXzE1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSM19QUklfMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIUFIzX1BSSV8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBSSV8xNAorLy8KKy8vIFByaW9yaXR5IG9mIHN5c3RlbSBoYW5kbGVyIDE0LiBQZW5kIFNWCisjZGVmaW5lIENQVV9TQ1NfU0hQUjNfUFJJXzE0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSM19QUklfMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIUFIzX1BSSV8xNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBSSV8xMgorLy8KKy8vIFByaW9yaXR5IG9mIHN5c3RlbSBoYW5kbGVyIDEyLiBEZWJ1ZyBNb25pdG9yCisjZGVmaW5lIENQVV9TQ1NfU0hQUjNfUFJJXzEyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSFBSM19QUklfMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUFVfU0NTX1NIUFIzX1BSSV8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX1NIQ1NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxOF0gVVNHRkFVTFRFTkEKKy8vCisvLyBVc2FnZSBmYXVsdCBzeXN0ZW0gaGFuZGxlciBlbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGRpc2FibGVkCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEVOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxURU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEVOQV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxURU5BX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTddIEJVU0ZBVUxURU5BCisvLworLy8gQnVzIGZhdWx0IHN5c3RlbSBoYW5kbGVyIGVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gZGlzYWJsZWQKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEVOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxURU5BX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRFTkFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEVOQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxURU5BX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRFTkFfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxNl0gTUVNRkFVTFRFTkEKKy8vCisvLyBNZW1NYW5hZ2UgZmF1bHQgc3lzdGVtIGhhbmRsZXIgZW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBkaXNhYmxlZAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxURU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRFTkFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEVOQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxURU5BX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRFTkFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEVOQV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE1XSBTVkNBTExQRU5ERUQKKy8vCisvLyBTVkNhbGwgcGVuZGluZworLy8gRU5VTXM6CisvLyBQRU5ESU5HICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIHBlbmRpbmcuCisvLyBOT1RQRU5ESU5HICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExQRU5ERUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTFBFTkRFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMUEVOREVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExQRU5ERURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTFBFTkRFRF9QRU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMUEVOREVEX05PVFBFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxNF0gQlVTRkFVTFRQRU5ERUQKKy8vCisvLyBCdXNGYXVsdCBwZW5kaW5nCisvLyBFTlVNczoKKy8vIFBFTkRJTkcgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgcGVuZGluZy4KKy8vIE5PVFBFTkRJTkcgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgbm90IGFjdGl2ZQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUUEVOREVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRQRU5ERURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVFBFTkRFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRQRU5ERURfUEVORElORyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVFBFTkRFRF9OT1RQRU5ESU5HICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEzXSBNRU1GQVVMVFBFTkRFRAorLy8KKy8vIE1lbU1hbmFnZSBleGNlcHRpb24gcGVuZGluZworLy8gRU5VTXM6CisvLyBQRU5ESU5HICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIHBlbmRpbmcuCisvLyBOT1RQRU5ESU5HICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVFBFTkRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUUEVOREVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRQRU5ERURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVFBFTkRFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRQRU5ERURfTk9UUEVORElORyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gVVNHRkFVTFRQRU5ERUQKKy8vCisvLyBVc2FnZSBmYXVsdCBwZW5kaW5nCisvLyBFTlVNczoKKy8vIFBFTkRJTkcgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgcGVuZGluZy4KKy8vIE5PVFBFTkRJTkcgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgbm90IGFjdGl2ZQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUUEVOREVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRQRU5ERURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVFBFTkRFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUUEVOREVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRQRU5ERURfUEVORElORyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVFBFTkRFRF9OT1RQRU5ESU5HICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzExXSBTWVNUSUNLQUNUCisvLworLy8gU3lzVGljayBhY3RpdmUgZmxhZy4KKy8vCisvLyAweDA6IE5vdCBhY3RpdmUKKy8vIDB4MTogQWN0aXZlCisvLyBFTlVNczoKKy8vIEFDVElWRSAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgYWN0aXZlCisvLyBOT1RBQ1RJVkUgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TWVNUSUNLQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NZU1RJQ0tBQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1lTVElDS0FDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TWVNUSUNLQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NZU1RJQ0tBQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1lTVElDS0FDVF9OT1RBQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMF0gUEVORFNWQUNUCisvLworLy8gUGVuZFNWIGFjdGl2ZQorLy8KKy8vIDB4MDogTm90IGFjdGl2ZQorLy8gMHgxOiBBY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9QRU5EU1ZBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1BFTkRTVkFDVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfUEVORFNWQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9QRU5EU1ZBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs4XSBNT05JVE9SQUNUCisvLworLy8gRGVidWcgbW9uaXRvciBhY3RpdmUKKy8vIEVOVU1zOgorLy8gQUNUSVZFICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBhY3RpdmUKKy8vIE5PVEFDVElWRSAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgbm90IGFjdGl2ZQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01PTklUT1JBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTU9OSVRPUkFDVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NT05JVE9SQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01PTklUT1JBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTU9OSVRPUkFDVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NT05JVE9SQUNUX05PVEFDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs3XSBTVkNBTExBQ1QKKy8vCisvLyBTVkNhbGwgYWN0aXZlCisvLyBFTlVNczoKKy8vIEFDVElWRSAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgYWN0aXZlCisvLyBOT1RBQ1RJVkUgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTEFDVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9TVkNBTExBQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1NWQ0FMTEFDVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfU1ZDQUxMQUNUX05PVEFDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gVVNHRkFVTFRBQ1QKKy8vCisvLyBVc2FnZUZhdWx0IGV4Y2VwdGlvbiBhY3RpdmUKKy8vIEVOVU1zOgorLy8gQUNUSVZFICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBhY3RpdmUKKy8vIE5PVEFDVElWRSAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgbm90IGFjdGl2ZQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRBQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEFDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX1VTR0ZBVUxUQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfVVNHRkFVTFRBQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9VU0dGQVVMVEFDVF9OT1RBQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBCVVNGQVVMVEFDVAorLy8KKy8vIEJ1c0ZhdWx0IGV4Y2VwdGlvbiBhY3RpdmUKKy8vIEVOVU1zOgorLy8gQUNUSVZFICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBpcyBhY3RpdmUKKy8vIE5PVEFDVElWRSAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgbm90IGFjdGl2ZQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRBQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEFDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX0JVU0ZBVUxUQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfQlVTRkFVTFRBQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9CVVNGQVVMVEFDVF9OT1RBQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBNRU1GQVVMVEFDVAorLy8KKy8vIE1lbU1hbmFnZSBleGNlcHRpb24gYWN0aXZlCisvLyBFTlVNczoKKy8vIEFDVElWRSAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gaXMgYWN0aXZlCisvLyBOT1RBQ1RJVkUgICAgICAgICAgICAgICAgRXhjZXB0aW9uIGlzIG5vdCBhY3RpdmUKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEFDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUQUNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19TSENTUl9NRU1GQVVMVEFDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfU0NTX1NIQ1NSX01FTUZBVUxUQUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9TQ1NfU0hDU1JfTUVNRkFVTFRBQ1RfTk9UQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQ0ZTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjVdIERJVkJZWkVSTworLy8KKy8vIFdoZW4gQ0NSLkRJVl8wX1RSUCAoc2VlIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciBvbiBwYWdlIDgtMjYpIGlzCisvLyBlbmFibGVkIGFuZCBhbiBTRElWIG9yIFVESVYgaW5zdHJ1Y3Rpb24gaXMgdXNlZCB3aXRoIGEgZGl2aXNvciBvZiAwLCB0aGlzCisvLyBmYXVsdCBvY2N1cnMgVGhlIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB0aGUgcmV0dXJuIFBDIHBvaW50cyB0byBpdC4gSWYKKy8vIENDUi5ESVZfMF9UUlAgaXMgbm90IHNldCwgdGhlbiB0aGUgZGl2aWRlIHJldHVybnMgYSBxdW90aWVudCBvZiAwLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfRElWQllaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9ESVZCWVpFUk9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0RJVkJZWkVST19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfRElWQllaRVJPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFVOQUxJR05FRAorLy8KKy8vIFdoZW4gQ0NSLlVOQUxJR05fVFJQIGlzIGVuYWJsZWQsIGFuZCB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIG1ha2UgYW4KKy8vIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLCB0aGVuIHRoaXMgZmF1bHQgb2NjdXJzLiBVbmFsaWduZWQgTERNL1NUTS9MRFJEL1NUUkQKKy8vIGluc3RydWN0aW9ucyBhbHdheXMgZmF1bHQgaXJyZXNwZWN0aXZlIG9mIHRoZSBzZXR0aW5nIG9mIENDUi5VTkFMSUdOX1RSUC4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOQUxJR05FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5BTElHTkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTkFMSUdORURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOQUxJR05FRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE5XSBOT0NQCisvLworLy8gQXR0ZW1wdCB0byB1c2UgYSBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbi4gVGhlIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0CisvLyBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9OT0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX05PQ1BfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDUFVfU0NTX0NGU1JfTk9DUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9OT0NQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gSU5WUEMKKy8vCisvLyBBdHRlbXB0IHRvIGxvYWQgRVhDX1JFVFVSTiBpbnRvIFBDIGlsbGVnYWxseS4gSW52YWxpZCBpbnN0cnVjdGlvbiwgaW52YWxpZAorLy8gY29udGV4dCwgaW52YWxpZCB2YWx1ZS4gVGhlIHJldHVybiBQQyBwb2ludHMgdG8gdGhlIGluc3RydWN0aW9uIHRoYXQgdHJpZWQKKy8vIHRvIHNldCB0aGUgUEMuCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTlZQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lOVlBDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU5WUENfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTlZQQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gSU5WU1RBVEUKKy8vCisvLyBJbmRpY2F0ZXMgYW4gYXR0ZW1wdCB0byBleGVjdXRlIGluIGFuIGludmFsaWQgRVBTUiBzdGF0ZSAoZS5nLiBhZnRlciBhIEJYCisvLyB0eXBlIGluc3RydWN0aW9uIGhhcyBjaGFuZ2VkIHN0YXRlKS4gVGhpcyBpbmNsdWRlcyBzdGF0ZSBjaGFuZ2UgYWZ0ZXIgZW50cnkKKy8vIHRvIG9yIHJldHVybiBmcm9tIGV4Y2VwdGlvbiwgYXMgd2VsbCBhcyBmcm9tIGludGVyLXdvcmtpbmcgaW5zdHJ1Y3Rpb25zLgorLy8gUmV0dXJuIFBDIHBvaW50cyB0byBmYXVsdGluZyBpbnN0cnVjdGlvbiwgd2l0aCB0aGUgaW52YWxpZCBzdGF0ZS4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lOVlNUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU5WU1RBVEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTlZTVEFURV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lOVlNUQVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBVTkRFRklOU1RSCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBleGVjdXRlIGFuIHVuZGVmaW5lZAorLy8gaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYW4gaW5zdHJ1Y3Rpb24gdGhhdCB0aGUgcHJvY2Vzc29yIGNhbm5vdCBkZWNvZGUuIFRoZQorLy8gcmV0dXJuIFBDIHBvaW50cyB0byB0aGUgdW5kZWZpbmVkIGluc3RydWN0aW9uLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5ERUZJTlNUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTkRFRklOU1RSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOREVGSU5TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5ERUZJTlNUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIEJGQVJWQUxJRAorLy8KKy8vIFRoaXMgYml0IGlzIHNldCBpZiB0aGUgQnVzIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIgKEJGQVIpIGNvbnRhaW5zIGEgdmFsaWQKKy8vIGFkZHJlc3MuIFRoaXMgaXMgdHJ1ZSBhZnRlciBhIGJ1cyBmYXVsdCB3aGVyZSB0aGUgYWRkcmVzcyBpcyBrbm93bi4gT3RoZXIKKy8vIGZhdWx0cyBjYW4gY2xlYXIgdGhpcyBiaXQsIHN1Y2ggYXMgYSBNZW0gTWFuYWdlIGZhdWx0IG9jY3VycmluZyBsYXRlci4gSWYgYQorLy8gQnVzIGZhdWx0IG9jY3VycyB0aGF0IGlzIGVzY2FsYXRlZCB0byBhIEhhcmQgRmF1bHQgYmVjYXVzZSBvZiBwcmlvcml0eSwgdGhlCisvLyBIYXJkIEZhdWx0IGhhbmRsZXIgbXVzdCBjbGVhciB0aGlzIGJpdC4gVGhpcyBwcmV2ZW50cyBwcm9ibGVtcyBpZiByZXR1cm5pbmcKKy8vIHRvIGEgc3RhY2tlZCBhY3RpdmUgQnVzIGZhdWx0IGhhbmRsZXIgd2hvc2UgQkZBUiB2YWx1ZSBoYXMgYmVlbiBvdmVyd3JpdHRlbi4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0JGQVJWQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfQkZBUlZBTElEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9CRkFSVkFMSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0JGQVJWQUxJRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzEyXSBTVEtFUlIKKy8vCisvLyBTdGFja2luZyBmcm9tIGV4Y2VwdGlvbiBoYXMgY2F1c2VkIG9uZSBvciBtb3JlIGJ1cyBmYXVsdHMuIFRoZSBTUCBpcyBzdGlsbAorLy8gYWRqdXN0ZWQgYW5kIHRoZSB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgYXJlYSBvbiB0aGUgc3RhY2sgbWlnaHQgYmUgaW5jb3JyZWN0LgorLy8gQkZBUiBpcyBub3Qgd3JpdHRlbi4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1NUS0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfU1RLRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9TVEtFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1NUS0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBVTlNUS0VSUgorLy8KKy8vIFVuc3RhY2sgZnJvbSBleGNlcHRpb24gcmV0dXJuIGhhcyBjYXVzZWQgb25lIG9yIG1vcmUgYnVzIGZhdWx0cy4gVGhpcyBpcworLy8gY2hhaW5lZCB0byB0aGUgaGFuZGxlciwgc28gdGhhdCB0aGUgb3JpZ2luYWwgcmV0dXJuIHN0YWNrIGlzIHN0aWxsIHByZXNlbnQuCisvLyBTUCBpcyBub3QgYWRqdXN0ZWQgZnJvbSBmYWlsaW5nIHJldHVybiBhbmQgbmV3IHNhdmUgaXMgbm90IHBlcmZvcm1lZC4gQkZBUgorLy8gaXMgbm90IHdyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTlNUS0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1VOU1RLRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUFVfU0NTX0NGU1JfVU5TVEtFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9VTlNUS0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gSU1QUkVDSVNFUlIKKy8vCisvLyBJbXByZWNpc2UgZGF0YSBidXMgZXJyb3IuIEl0IGlzIGEgQnVzRmF1bHQsIGJ1dCB0aGUgUmV0dXJuIFBDIGlzIG5vdCByZWxhdGVkCisvLyB0byB0aGUgY2F1c2luZyBpbnN0cnVjdGlvbi4gVGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyBmYXVsdC4gU28sIGlmIGRldGVjdGVkCisvLyB3aGVuIHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBhY3RpdmF0aW9uIGlzIGhpZ2hlciB0aGFuIHRoZSBCdXMgRmF1bHQsIGl0CisvLyBvbmx5IHBlbmRzLiBCdXMgZmF1bHQgYWN0aXZhdGVzIHdoZW4gcmV0dXJuaW5nIHRvIGEgbG93ZXIgcHJpb3JpdHkKKy8vIGFjdGl2YXRpb24uIElmIGEgcHJlY2lzZSBmYXVsdCBvY2N1cnMgYmVmb3JlIHJldHVybmluZyB0byBhIGxvd2VyIHByaW9yaXR5CisvLyBleGNlcHRpb24sIHRoZSBoYW5kbGVyIGRldGVjdHMgYm90aCBJTVBSRUNJU0VSUiBzZXQgYW5kIG9uZSBvZiB0aGUgcHJlY2lzZQorLy8gZmF1bHQgc3RhdHVzIGJpdHMgc2V0IGF0IHRoZSBzYW1lIHRpbWUuIEJGQVIgaXMgbm90IHdyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTVBSRUNJU0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lNUFJFQ0lTRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSU1QUkVDSVNFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JTVBSRUNJU0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gUFJFQ0lTRVJSCisvLworLy8gUHJlY2lzZSBkYXRhIGJ1cyBlcnJvciByZXR1cm4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9QUkVDSVNFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX1BSRUNJU0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUFVfU0NTX0NGU1JfUFJFQ0lTRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9QUkVDSVNFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gSUJVU0VSUgorLy8KKy8vIEluc3RydWN0aW9uIGJ1cyBlcnJvciBmbGFnLiBUaGlzIGZsYWcgaXMgc2V0IGJ5IGEgcHJlZmV0Y2ggZXJyb3IuIFRoZSBmYXVsdAorLy8gc3RvcHMgb24gdGhlIGluc3RydWN0aW9uLCBzbyBpZiB0aGUgZXJyb3Igb2NjdXJzIHVuZGVyIGEgYnJhbmNoIHNoYWRvdywgbm8KKy8vIGZhdWx0IG9jY3Vycy4gQkZBUiBpcyBub3Qgd3JpdHRlbi4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lCVVNFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX0NGU1JfSUJVU0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JQlVTRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lCVVNFUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBNTUFSVkFMSUQKKy8vCisvLyBNZW1vcnkgTWFuYWdlIEFkZHJlc3MgUmVnaXN0ZXIgKE1NRkFSKSBhZGRyZXNzIHZhbGlkIGZsYWcuIEEgbGF0ZXItYXJyaXZpbmcKKy8vIGZhdWx0LCBzdWNoIGFzIGEgYnVzIGZhdWx0LCBjYW4gY2xlYXIgYSBtZW1vcnkgbWFuYWdlIGZhdWx0Li4gSWYgYSBNZW1NYW5hZ2UKKy8vIGZhdWx0IG9jY3VycyB0aGF0IGlzIGVzY2FsYXRlZCB0byBhIEhhcmQgRmF1bHQgYmVjYXVzZSBvZiBwcmlvcml0eSwgdGhlIEhhcmQKKy8vIEZhdWx0IGhhbmRsZXIgbXVzdCBjbGVhciB0aGlzIGJpdC4gVGhpcyBwcmV2ZW50cyBwcm9ibGVtcyBvbiByZXR1cm4gdG8gYQorLy8gc3RhY2tlZCBhY3RpdmUgTWVtTWFuYWdlIGhhbmRsZXIgd2hvc2UgTU1GQVIgdmFsdWUgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NTUFSVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01NQVJWQUxJRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUFVfU0NTX0NGU1JfTU1BUlZBTElEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NTUFSVkFMSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNF0gTVNUS0VSUgorLy8KKy8vIFN0YWNraW5nIGZyb20gZXhjZXB0aW9uIGhhcyBjYXVzZWQgb25lIG9yIG1vcmUgYWNjZXNzIHZpb2xhdGlvbnMuIFRoZSBTUCBpcworLy8gc3RpbGwgYWRqdXN0ZWQgYW5kIHRoZSB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgYXJlYSBvbiB0aGUgc3RhY2sgbWlnaHQgYmUKKy8vIGluY29ycmVjdC4gTU1GQVIgaXMgbm90IHdyaXR0ZW4uCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NU1RLRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01TVEtFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0NGU1JfTVNUS0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NU1RLRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gTVVOU1RLRVJSCisvLworLy8gVW5zdGFjayBmcm9tIGV4Y2VwdGlvbiByZXR1cm4gaGFzIGNhdXNlZCBvbmUgb3IgbW9yZSBhY2Nlc3MgdmlvbGF0aW9ucy4gVGhpcworLy8gaXMgY2hhaW5lZCB0byB0aGUgaGFuZGxlciwgc28gdGhhdCB0aGUgb3JpZ2luYWwgcmV0dXJuIHN0YWNrIGlzIHN0aWxsCisvLyBwcmVzZW50LiBTUCBpcyBub3QgYWRqdXN0ZWQgZnJvbSBmYWlsaW5nIHJldHVybiBhbmQgbmV3IHNhdmUgaXMgbm90CisvLyBwZXJmb3JtZWQuIE1NRkFSIGlzIG5vdCB3cml0dGVuLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfTVVOU1RLRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9NVU5TVEtFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX01VTlNUS0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfU0NTX0NGU1JfTVVOU1RLRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzFdIERBQ0NWSU9MCisvLworLy8gRGF0YSBhY2Nlc3MgdmlvbGF0aW9uIGZsYWcuIEF0dGVtcHRpbmcgdG8gbG9hZCBvciBzdG9yZSBhdCBhIGxvY2F0aW9uIHRoYXQKKy8vIGRvZXMgbm90IHBlcm1pdCB0aGUgb3BlcmF0aW9uIHNldHMgdGhpcyBmbGFnLiBUaGUgcmV0dXJuIFBDIHBvaW50cyB0byB0aGUKKy8vIGZhdWx0aW5nIGluc3RydWN0aW9uLiBUaGlzIGVycm9yIGxvYWRzIE1NRkFSIHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlCisvLyBhdHRlbXB0ZWQgYWNjZXNzLgorI2RlZmluZSBDUFVfU0NTX0NGU1JfREFDQ1ZJT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9EQUNDVklPTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0RBQ0NWSU9MX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0NGU1JfREFDQ1ZJT0xfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIElBQ0NWSU9MCisvLworLy8gSW5zdHJ1Y3Rpb24gYWNjZXNzIHZpb2xhdGlvbiBmbGFnLiBBdHRlbXB0aW5nIHRvIGZldGNoIGFuIGluc3RydWN0aW9uIGZyb20gYQorLy8gbG9jYXRpb24gdGhhdCBkb2VzIG5vdCBwZXJtaXQgZXhlY3V0aW9uIHNldHMgdGhpcyBmbGFnLiBUaGlzIG9jY3VycyBvbiBhbnkKKy8vIGFjY2VzcyB0byBhbiBYTiByZWdpb24sIGV2ZW4gd2hlbiB0aGUgTVBVIGlzIGRpc2FibGVkIG9yIG5vdCBwcmVzZW50LiBUaGUKKy8vIHJldHVybiBQQyBwb2ludHMgdG8gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLiBNTUZBUiBpcyBub3Qgd3JpdHRlbi4KKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lBQ0NWSU9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0NGU1JfSUFDQ1ZJT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfQ0ZTUl9JQUNDVklPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19DRlNSX0lBQ0NWSU9MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19IRlNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gREVCVUdFVlQKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgaWYgdGhlcmUgaXMgYSBmYXVsdCByZWxhdGVkIHRvIGRlYnVnLiBUaGlzIGlzIG9ubHkgcG9zc2libGUKKy8vIHdoZW4gaGFsdGluZyBkZWJ1ZyBpcyBub3QgZW5hYmxlZC4gRm9yIG1vbml0b3IgZW5hYmxlZCBkZWJ1ZywgaXQgb25seQorLy8gaGFwcGVucyBmb3IgQktQVCB3aGVuIHRoZSBjdXJyZW50IHByaW9yaXR5IGlzIGhpZ2hlciB0aGFuIHRoZSBtb25pdG9yLiBXaGVuCisvLyBib3RoIGhhbHRpbmcgYW5kIG1vbml0b3IgZGVidWcgYXJlIGRpc2FibGVkLCBpdCBvbmx5IGhhcHBlbnMgZm9yIGRlYnVnCisvLyBldmVudHMgdGhhdCBhcmUgbm90IGlnbm9yZWQgKG1pbmltYWxseSwgQktQVCkuIFRoZSBEZWJ1ZyBGYXVsdCBTdGF0dXMKKy8vIFJlZ2lzdGVyIGlzIHVwZGF0ZWQuCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9ERUJVR0VWVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19IRlNSX0RFQlVHRVZUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUFVfU0NTX0hGU1JfREVCVUdFVlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9ERUJVR0VWVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gRk9SQ0VECisvLworLy8gSGFyZCBGYXVsdCBhY3RpdmF0ZWQgYmVjYXVzZSBhIENvbmZpZ3VyYWJsZSBGYXVsdCB3YXMgcmVjZWl2ZWQgYW5kIGNhbm5vdAorLy8gYWN0aXZhdGUgYmVjYXVzZSBvZiBwcmlvcml0eSBvciBiZWNhdXNlIHRoZSBDb25maWd1cmFibGUgRmF1bHQgaXMgZGlzYWJsZWQuCisvLyBUaGUgSGFyZCBGYXVsdCBoYW5kbGVyIHRoZW4gaGFzIHRvIHJlYWQgdGhlIG90aGVyIGZhdWx0IHN0YXR1cyByZWdpc3RlcnMgdG8KKy8vIGRldGVybWluZSBjYXVzZS4KKyNkZWZpbmUgQ1BVX1NDU19IRlNSX0ZPUkNFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0hGU1JfRk9SQ0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9GT1JDRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19IRlNSX0ZPUkNFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgIFsxXSBWRUNUVEJMCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IGlmIHRoZXJlIGlzIGEgZmF1bHQgYmVjYXVzZSBvZiB2ZWN0b3IgdGFibGUgcmVhZCBvbgorLy8gZXhjZXB0aW9uIHByb2Nlc3NpbmcgKEJ1cyBGYXVsdCkuIFRoaXMgY2FzZSBpcyBhbHdheXMgYSBIYXJkIEZhdWx0LiBUaGUKKy8vIHJldHVybiBQQyBwb2ludHMgdG8gdGhlIHByZS1lbXB0ZWQgaW5zdHJ1Y3Rpb24uCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9WRUNUVEJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19IRlNSX1ZFQ1RUQkxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX0hGU1JfVkVDVFRCTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfSEZTUl9WRUNUVEJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fREZTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzRdIEVYVEVSTkFMCisvLworLy8gRXh0ZXJuYWwgZGVidWcgcmVxdWVzdCBmbGFnLiBUaGUgcHJvY2Vzc29yIHN0b3BzIG9uIG5leHQgaW5zdHJ1Y3Rpb24KKy8vIGJvdW5kYXJ5LgorLy8KKy8vIDB4MDogRXh0ZXJuYWwgZGVidWcgcmVxdWVzdCBzaWduYWwgbm90IGFzc2VydGVkCisvLyAweDE6IEV4dGVybmFsIGRlYnVnIHJlcXVlc3Qgc2lnbmFsIGFzc2VydGVkCisjZGVmaW5lIENQVV9TQ1NfREZTUl9FWFRFUk5BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0VYVEVSTkFMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUFVfU0NTX0RGU1JfRVhURVJOQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfREZTUl9FWFRFUk5BTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gVkNBVENICisvLworLy8gVmVjdG9yIGNhdGNoIGZsYWcuIFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgYSBmbGFnIGluIG9uZSBvZiB0aGUgbG9jYWwgZmF1bHQKKy8vIHN0YXR1cyByZWdpc3RlcnMgaXMgYWxzbyBzZXQgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgZmF1bHQuCisvLworLy8gMHgwOiBObyB2ZWN0b3IgY2F0Y2ggb2NjdXJyZWQKKy8vIDB4MTogVmVjdG9yIGNhdGNoIG9jY3VycmVkCisjZGVmaW5lIENQVV9TQ1NfREZTUl9WQ0FUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX1ZDQVRDSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX0RGU1JfVkNBVENIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfREZTUl9WQ0FUQ0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRFdUVFJBUAorLy8KKy8vIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkgZmxhZy4gVGhlIHByb2Nlc3NvciBzdG9wcyBhdCB0aGUgY3VycmVudAorLy8gaW5zdHJ1Y3Rpb24gb3IgYXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisvLworLy8gMHgwOiBObyBEV1QgbWF0Y2gKKy8vIDB4MTogRFdUIG1hdGNoCisjZGVmaW5lIENQVV9TQ1NfREZTUl9EV1RUUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0RXVFRSQVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUFVfU0NTX0RGU1JfRFdUVFJBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfREZTUl9EV1RUUkFQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQktQVAorLy8KKy8vIEJLUFQgZmxhZy4gVGhlIEJLUFQgZmxhZyBpcyBzZXQgYnkgYSBCS1BUIGluc3RydWN0aW9uIGluIGZsYXNoIHBhdGNoIGNvZGUsCisvLyBhbmQgYWxzbyBieSBub3JtYWwgY29kZS4gUmV0dXJuIFBDIHBvaW50cyB0byBicmVha3BvaW50IGNvbnRhaW5pbmcKKy8vIGluc3RydWN0aW9uLgorLy8KKy8vIDB4MDogTm8gQktQVCBpbnN0cnVjdGlvbiBleGVjdXRpb24KKy8vIDB4MTogQktQVCBpbnN0cnVjdGlvbiBleGVjdXRpb24KKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0JLUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfU0NTX0RGU1JfQktQVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9TQ1NfREZTUl9CS1BUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0JLUFRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBIQUxURUQKKy8vCisvLyBIYWx0IHJlcXVlc3QgZmxhZy4gVGhlIHByb2Nlc3NvciBpcyBoYWx0ZWQgb24gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisvLworLy8gMHgwOiBObyBoYWx0IHJlcXVlc3QKKy8vIDB4MTogSGFsdCByZXF1ZXN0ZWQgYnkgTlZJQywgaW5jbHVkaW5nIHN0ZXAKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0hBTFRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0RGU1JfSEFMVEVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfREZTUl9IQUxURURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19ERlNSX0hBTFRFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19NTUZBUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFJFU1MKKy8vCisvLyBNZW0gTWFuYWdlIGZhdWx0IGFkZHJlc3MgZmllbGQuCisvLyBUaGlzIGZpZWxkIGlzIHRoZSBkYXRhIGFkZHJlc3Mgb2YgYSBmYXVsdGVkIGxvYWQgb3Igc3RvcmUgYXR0ZW1wdC4gV2hlbiBhbgorLy8gdW5hbGlnbmVkIGFjY2VzcyBmYXVsdHMsIHRoZSBhZGRyZXNzIGlzIHRoZSBhY3R1YWwgYWRkcmVzcyB0aGF0IGZhdWx0ZWQuCisvLyBCZWNhdXNlIGFuIGFjY2VzcyBjYW4gYmUgc3BsaXQgaW50byBtdWx0aXBsZSBwYXJ0cywgZWFjaCBhbGlnbmVkLCB0aGlzCisvLyBhZGRyZXNzIGNhbiBiZSBhbnkgb2Zmc2V0IGluIHRoZSByYW5nZSBvZiB0aGUgcmVxdWVzdGVkIHNpemUuIEZsYWdzCisvLyBDRlNSLklBQ0NWSU9MLCBDRlNSLkRBQ0NWSU9MICxDRlNSLk1VTlNUS0VSUiBhbmQgQ0ZTUi5NU1RLRVJSIGluIGNvbWJpbmF0aW9uCisvLyB3aXRoIENGU1IuTU1BUlZBTElEaW5kaWNhdGUgdGhlIGNhdXNlIG9mIHRoZSBmYXVsdC4KKyNkZWZpbmUgQ1BVX1NDU19NTUZBUl9BRERSRVNTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfU0NTX01NRkFSX0FERFJFU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9TQ1NfTU1GQVJfQUREUkVTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQkZBUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFJFU1MKKy8vCisvLyBCdXMgZmF1bHQgYWRkcmVzcyBmaWVsZC4gVGhpcyBmaWVsZCBpcyB0aGUgZGF0YSBhZGRyZXNzIG9mIGEgZmF1bHRlZCBsb2FkIG9yCisvLyBzdG9yZSBhdHRlbXB0LiBXaGVuIGFuIHVuYWxpZ25lZCBhY2Nlc3MgZmF1bHRzLCB0aGUgYWRkcmVzcyBpcyB0aGUgYWRkcmVzcworLy8gcmVxdWVzdGVkIGJ5IHRoZSBpbnN0cnVjdGlvbiwgZXZlbiBpZiB0aGF0IGlzIG5vdCB0aGUgYWRkcmVzcyB0aGF0IGZhdWx0ZWQuCisvLyBGbGFncyBDRlNSLklCVVNFUlIsIENGU1IuUFJFQ0lTRVJSLCBDRlNSLklNUFJFQ0lTRVJSLCBDRlNSLlVOU1RLRVJSIGFuZAorLy8gQ0ZTUi5TVEtFUlIgaW4gY29tYmluYXRpb24gd2l0aCBDRlNSLkJGQVJWQUxJRCBpbmRpY2F0ZSB0aGUgY2F1c2Ugb2YgdGhlCisvLyBmYXVsdC4KKyNkZWZpbmUgQ1BVX1NDU19CRkFSX0FERFJFU1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfU0NTX0JGQVJfQUREUkVTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9TQ1NfQkZBUl9BRERSRVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fQUZTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElNUERFRgorLy8KKy8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQuIFRoZSBiaXRzIG1hcCBkaXJlY3RseSBvbnRvIHRoZSBzaWduYWwgYXNzaWdubWVudCB0bworLy8gdGhlIGF1eGlsaWFyeSBmYXVsdCBpbnB1dHMuIFRpZWQgdG8gMAorI2RlZmluZSBDUFVfU0NTX0FGU1JfSU1QREVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9TQ1NfQUZTUl9JTVBERUZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX1NDU19BRlNSX0lNUERFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9QRlIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6NF0gU1RBVEUxCisvLworLy8gU3RhdGUxIChULWJpdCA9PSAxKQorLy8KKy8vIDB4MDogTi9BCisvLyAweDE6IE4vQQorLy8gMHgyOiBUaHVtYi0yIGVuY29kaW5nIHdpdGggdGhlIDE2LWJpdCBiYXNpYyBpbnN0cnVjdGlvbnMgcGx1cyAzMi1iaXQKKy8vIEJ1bmNvbmQvQkwgYnV0IG5vIG90aGVyIDMyLWJpdCBiYXNpYyBpbnN0cnVjdGlvbnMgKE5vdGUgbm9uLWJhc2ljIDMyLWJpdAorLy8gaW5zdHJ1Y3Rpb25zIGNhbiBiZSBhZGRlZCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgaW5zdHJ1Y3Rpb24gYXR0cmlidXRlLCBidXQKKy8vIG90aGVyIDMyLWJpdCBiYXNpYyBpbnN0cnVjdGlvbnMgY2Fubm90LikKKy8vIDB4MzogVGh1bWItMiBlbmNvZGluZyB3aXRoIGFsbCBUaHVtYi0yIGJhc2ljIGluc3RydWN0aW9ucworI2RlZmluZSBDUFVfU0NTX0lEX1BGUjBfU1RBVEUxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfSURfUEZSMF9TVEFURTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgQ1BVX1NDU19JRF9QRlIwX1NUQVRFMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBTVEFURTAKKy8vCisvLyBTdGF0ZTAgKFQtYml0ID09IDApCisvLworLy8gMHgwOiBObyBBUk0gZW5jb2RpbmcKKy8vIDB4MTogTi9BCisjZGVmaW5lIENQVV9TQ1NfSURfUEZSMF9TVEFURTBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19JRF9QRlIwX1NUQVRFMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUFVfU0NTX0lEX1BGUjBfU1RBVEUwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX1BGUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMTo4XSBNSUNST0NPTlRST0xMRVJfUFJPR1JBTU1FUlNfTU9ERUwKKy8vCisvLyBNaWNyb2NvbnRyb2xsZXIgcHJvZ3JhbW1lcidzIG1vZGVsCisvLworLy8gMHgwOiBOb3Qgc3VwcG9ydGVkCisvLyAweDI6IFR3by1zdGFjayBzdXBwb3J0CisjZGVmaW5lIENQVV9TQ1NfSURfUEZSMV9NSUNST0NPTlRST0xMRVJfUFJPR1JBTU1FUlNfTU9ERUxfVyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19JRF9QRlIxX01JQ1JPQ09OVFJPTExFUl9QUk9HUkFNTUVSU19NT0RFTF9NICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBDUFVfU0NTX0lEX1BGUjFfTUlDUk9DT05UUk9MTEVSX1BST0dSQU1NRVJTX01PREVMX1MgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX0RGUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIzOjIwXSBNSUNST0NPTlRST0xMRVJfREVCVUdfTU9ERUwKKy8vCisvLyBNaWNyb2NvbnRyb2xsZXIgRGVidWcgTW9kZWwgLSBtZW1vcnkgbWFwcGVkCisvLworLy8gMHgwOiBOb3Qgc3VwcG9ydGVkCisvLyAweDE6IE1pY3JvY29udHJvbGxlciBkZWJ1ZyB2MSAoSVRNdjEgYW5kIERXVHYxKQorI2RlZmluZSBDUFVfU0NTX0lEX0RGUjBfTUlDUk9DT05UUk9MTEVSX0RFQlVHX01PREVMX1cgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENQVV9TQ1NfSURfREZSMF9NSUNST0NPTlRST0xMRVJfREVCVUdfTU9ERUxfTSAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JRF9ERlIwX01JQ1JPQ09OVFJPTExFUl9ERUJVR19NT0RFTF9TICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9BRlIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfTU1GUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9NTUZSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX01NRlIyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gV0FJVF9GT1JfSU5URVJSVVBUX1NUQUxMSU5HCisvLworLy8gd2FpdCBmb3IgaW50ZXJydXB0IHN0YWxsaW5nCisvLworLy8gMHgwOiBOb3Qgc3VwcG9ydGVkCisvLyAweDE6IFdhaXQgZm9yIGludGVycnVwdCBzdXBwb3J0ZWQKKyNkZWZpbmUgQ1BVX1NDU19JRF9NTUZSMl9XQUlUX0ZPUl9JTlRFUlJVUFRfU1RBTExJTkcgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0lEX01NRlIyX1dBSVRfRk9SX0lOVEVSUlVQVF9TVEFMTElOR19CSVROICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfSURfTU1GUjJfV0FJVF9GT1JfSU5URVJSVVBUX1NUQUxMSU5HX00gICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19JRF9NTUZSMl9XQUlUX0ZPUl9JTlRFUlJVUFRfU1RBTExJTkdfUyAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9NTUZSMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX0lTQVIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfSVNBUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19JRF9JU0FSMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0lEX0lTQVIzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfU0NTX09fSURfSVNBUjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19DUEFDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0RIQ1NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNV0gU19SRVNFVF9TVAorLy8KKy8vIEluZGljYXRlcyB0aGF0IHRoZSBjb3JlIGhhcyBiZWVuIHJlc2V0LCBvciBpcyBub3cgYmVpbmcgcmVzZXQsIHNpbmNlIHRoZQorLy8gbGFzdCB0aW1lIHRoaXMgYml0IHdhcyByZWFkLiBUaGlzIGEgc3RpY2t5IGJpdCB0aGF0IGNsZWFycyBvbiByZWFkLiBTbywKKy8vIHJlYWRpbmcgdHdpY2UgYW5kIGdldHRpbmcgMSB0aGVuIDAgbWVhbnMgaXQgd2FzIHJlc2V0IGluIHRoZSBwYXN0LiBSZWFkaW5nCisvLyB0d2ljZSBhbmQgZ2V0dGluZyAxIGJvdGggdGltZXMgbWVhbnMgdGhhdCBpdCBpcyBiZWluZyByZXNldCBub3cgKGhlbGQgaW4KKy8vIHJlc2V0IHN0aWxsKS4KKy8vIFdoZW4gd3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyLCAwIG11c3QgYmUgd3JpdHRlbiB0aGlzIGJpdC1maWVsZCwgb3RoZXJ3aXNlCisvLyB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGlnbm9yZWQgYW5kIG5vIGJpdHMgYXJlIHdyaXR0ZW4gaW50byB0aGUgcmVnaXN0ZXIuCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRVNFVF9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFU0VUX1NUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVTRVRfU1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRVNFVF9TVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gU19SRVRJUkVfU1QKKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCBhbiBpbnN0cnVjdGlvbiBoYXMgY29tcGxldGVkIHNpbmNlIGxhc3QgcmVhZC4gVGhpcyBpcyBhCisvLyBzdGlja3kgYml0IHRoYXQgY2xlYXJzIG9uIHJlYWQuIFRoaXMgZGV0ZXJtaW5lcyBpZiB0aGUgY29yZSBpcyBzdGFsbGVkIG9uIGEKKy8vIGxvYWQvc3RvcmUgb3IgZmV0Y2guCisvLyBXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciwgMCBtdXN0IGJlIHdyaXR0ZW4gdGhpcyBiaXQtZmllbGQsIG90aGVyd2lzZQorLy8gdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBpZ25vcmVkIGFuZCBubyBiaXRzIGFyZSB3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVUSVJFX1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRVRJUkVfU1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFVElSRV9TVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVUSVJFX1NUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTldIFNfTE9DS1VQCisvLworLy8gUmVhZHMgYXMgb25lIGlmIHRoZSBjb3JlIGlzIHJ1bm5pbmcgKG5vdCBoYWx0ZWQpIGFuZCBhIGxvY2t1cCBjb25kaXRpb24gaXMKKy8vIHByZXNlbnQuCisvLyBXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciwgMSBtdXN0IGJlIHdyaXR0ZW4gdGhpcyBiaXQtZmllbGQsIG90aGVyd2lzZQorLy8gdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBpZ25vcmVkIGFuZCBubyBiaXRzIGFyZSB3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfTE9DS1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19MT0NLVVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX0xPQ0tVUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfTE9DS1VQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFNfU0xFRVAKKy8vCisvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgY29yZSBpcyBzbGVlcGluZyAoV0ZJLCBXRkUsIG9yICoqU0xFRVAtT04tRVhJVCoqKS4gTXVzdAorLy8gdXNlIENfSEFMVCB0byBnYWluIGNvbnRyb2wgb3Igd2FpdCBmb3IgaW50ZXJydXB0IHRvIHdha2UtdXAuCisvLyBXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciwgMSBtdXN0IGJlIHdyaXR0ZW4gdGhpcyBiaXQtZmllbGQsIG90aGVyd2lzZQorLy8gdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBpZ25vcmVkIGFuZCBubyBiaXRzIGFyZSB3cml0dGVuIGludG8gdGhlIHJlZ2lzdGVyLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19TTEVFUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1NMRUVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfU0xFRVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFNfSEFMVAorLy8KKy8vIFRoZSBjb3JlIGlzIGluIGRlYnVnIHN0YXRlIHdoZW4gdGhpcyBiaXQgaXMgc2V0LgorLy8gV2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIsIDEgbXVzdCBiZSB3cml0dGVuIHRoaXMgYml0LWZpZWxkLCBvdGhlcndpc2UKKy8vIHRoZSB3cml0ZSBvcGVyYXRpb24gaXMgaWdub3JlZCBhbmQgbm8gYml0cyBhcmUgd3JpdHRlbiBpbnRvIHRoZSByZWdpc3Rlci4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfSEFMVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19IQUxUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX0hBTFRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBTX1JFR1JEWQorLy8KKy8vIFJlZ2lzdGVyIFJlYWQvV3JpdGUgb24gdGhlIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgcmVnaXN0ZXIgaXMKKy8vIGF2YWlsYWJsZS4gTGFzdCB0cmFuc2ZlciBpcyBjb21wbGV0ZS4KKy8vIFdoZW4gd3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyLCAxIG11c3QgYmUgd3JpdHRlbiB0aGlzIGJpdC1maWVsZCwgb3RoZXJ3aXNlCisvLyB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGlnbm9yZWQgYW5kIG5vIGJpdHMgYXJlIHdyaXR0ZW4gaW50byB0aGUgcmVnaXN0ZXIuCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRUdSRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9TX1JFR1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX1NfUkVHUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfU19SRUdSRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbNV0gQ19TTkFQU1RBTEwKKy8vCisvLyBJZiB0aGUgY29yZSBpcyBzdGFsbGVkIG9uIGEgbG9hZC9zdG9yZSBvcGVyYXRpb24gdGhlIHN0YWxsIGNlYXNlcyBhbmQgdGhlCisvLyBpbnN0cnVjdGlvbiBpcyBmb3JjZWQgdG8gY29tcGxldGUuIFRoaXMgZW5hYmxlcyBIYWx0aW5nIGRlYnVnIHRvIGdhaW4KKy8vIGNvbnRyb2wgb2YgdGhlIGNvcmUuIEl0IGNhbiBvbmx5IGJlIHNldCBpZjogQ19ERUJVR0VOID0gMSBhbmQgQ19IQUxUID0gMS4KKy8vIFRoZSBjb3JlIHJlYWRzIFNfUkVUSVJFX1NUIGFzIDAuIFRoaXMgaW5kaWNhdGVzIHRoYXQgbm8gaW5zdHJ1Y3Rpb24gaGFzCisvLyBhZHZhbmNlZC4gVGhpcyBwcmV2ZW50cyBtaXN1c2UuIFRoZSBidXMgc3RhdGUgaXMgVW5wcmVkaWN0YWJsZSB3aGVuIHRoaXMgaXMKKy8vIHVzZWQuIFNfUkVUSVJFX1NUIGNhbiBkZXRlY3QgY29yZSBzdGFsbHMgb24gbG9hZC9zdG9yZSBvcGVyYXRpb25zLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfU05BUFNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19TTkFQU1RBTExfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX1NOQVBTVEFMTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfU05BUFNUQUxMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzNdIENfTUFTS0lOVFMKKy8vCisvLyBNYXNrIGludGVycnVwdHMgd2hlbiBzdGVwcGluZyBvciBydW5uaW5nIGluIGhhbHRlZCBkZWJ1Zy4gVGhpcyBtYXNraW5nIGRvZXMKKy8vIG5vdCBhZmZlY3QgTk1JLCBmYXVsdCBleGNlcHRpb25zIGFuZCBTVkMgY2F1c2VkIGJ5IGV4ZWN1dGlvbiBvZiB0aGUKKy8vIGluc3RydWN0aW9ucy4gVGhpcyBiaXQgbXVzdCBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBoYWx0ZWQKKy8vIChTX0hBTFQgPT0gMSkuICBDX01BU0tJTlRTIG11c3QgYmUgc2V0IG9yIGNsZWFyZWQgYmVmb3JlIGhhbHQgaXMgcmVsZWFzZWQKKy8vIChpLmUuLCB0aGUgd3JpdGVzIHRvIHNldCBvciBjbGVhciBDX01BU0tJTlRTIGFuZCB0byBzZXQgb3IgY2xlYXIgQ19IQUxUIG11c3QKKy8vIGJlIHNlcGFyYXRlKS4gTW9kaWZ5aW5nIENfTUFTS0lOVFMgd2hpbGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nIHdpdGggaGFsdGluZworLy8gZGVidWcgc3VwcG9ydCBlbmFibGVkIChDX0RFQlVHRU4gPSAxLCBTX0hBTFQgPSAwKSBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZQorLy8gYmVoYXZpb3IuCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19NQVNLSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX01BU0tJTlRTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfTUFTS0lOVFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19NQVNLSU5UU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQ19TVEVQCisvLworLy8gU3RlcHMgdGhlIGNvcmUgaW4gaGFsdGVkIGRlYnVnLiBXaGVuIENfREVCVUdFTiA9IDAsIHRoaXMgYml0IGhhcyBubyBlZmZlY3QuCisvLyBNdXN0IG9ubHkgYmUgbW9kaWZpZWQgd2hlbiB0aGUgcHJvY2Vzc29yIGlzIGhhbHRlZCAoU19IQUxUID09IDEpLgorLy8gTW9kaWZ5aW5nIENfU1RFUCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgd2l0aCBoYWx0aW5nIGRlYnVnIHN1cHBvcnQKKy8vIGVuYWJsZWQgKENfREVCVUdFTiA9IDEsIFNfSEFMVCA9IDApIG1heSBjYXVzZSB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLgorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfU1RFUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19TVEVQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX1NURVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfU1RFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENfSEFMVAorLy8KKy8vIEhhbHRzIHRoZSBjb3JlLiBUaGlzIGJpdCBpcyBzZXQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb3JlIEhhbHRzLiBGb3IKKy8vIGV4YW1wbGUgQnJlYWtwb2ludC4gVGhpcyBiaXQgY2xlYXJzIG9uIGNvcmUgcmVzZXQuCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX0hBTFRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfSEFMVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19IQUxUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ19ERUJVR0VOCisvLworLy8gRW5hYmxlcyBkZWJ1Zy4gVGhpcyBjYW4gb25seSBiZSB3cml0dGVuIGJ5IEFIQi1BUCBhbmQgbm90IGJ5IHRoZSBjb3JlLiBJdCBpcworLy8gaWdub3JlZCB3aGVuIHdyaXR0ZW4gYnkgdGhlIGNvcmUsIHdoaWNoIGNhbm5vdCBzZXQgb3IgY2xlYXIgaXQuIFRoZSBjb3JlCisvLyBtdXN0IHdyaXRlIGEgMSB0byBpdCB3aGVuIHdyaXRpbmcgQ19IQUxUIHRvIGhhbHQgaXRzZWxmLgorLy8gVGhlIHZhbHVlcyBvZiBDX0hBTFQsIENfU1RFUCBhbmQgQ19NQVNLSU5UUyBhcmUgaWdub3JlZCBieSBoYXJkd2FyZSB3aGVuCisvLyBDX0RFQlVHRU4gPSAwLiBUaGUgcmVhZCB2YWx1ZXMgZm9yIENfSEFMVCwgQ19TVEVQIGFuZCBDX01BU0tJTlRTIGZpZWxkcyB3aWxsCisvLyBiZSB1bmtub3duIHRvIHNvZnR3YXJlIHdoZW4gQ19ERUJVR0VOID0gMC4KKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX0RFQlVHRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0RIQ1NSX0NfREVCVUdFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfREhDU1JfQ19ERUJVR0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19ESENTUl9DX0RFQlVHRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19EQ1JTUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTZdIFJFR1dOUgorLy8KKy8vIDE6IFdyaXRlCisvLyAwOiBSZWFkCisjZGVmaW5lIENQVV9TQ1NfRENSU1JfUkVHV05SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ1BVX1NDU19EQ1JTUl9SRUdXTlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBDUFVfU0NTX0RDUlNSX1JFR1dOUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfRENSU1JfUkVHV05SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzQ6MF0gUkVHU0VMCisvLworLy8gUmVnaXN0ZXIgc2VsZWN0CisvLworLy8gMHgwMDogUjAKKy8vIDB4MDE6IFIxCisvLyAweDAyOiBSMgorLy8gMHgwMzogUjMKKy8vIDB4MDQ6IFI0CisvLyAweDA1OiBSNQorLy8gMHgwNjogUjYKKy8vIDB4MDc6IFI3CisvLyAweDA4OiBSOAorLy8gMHgwOTogUjkKKy8vIDB4MEE6IFIxMAorLy8gMHgwQjogUjExCisvLyAweDBDOiBSMTIKKy8vIDB4MEQ6IEN1cnJlbnQgU1AKKy8vIDB4MEU6IExSCisvLyAweDBGOiBEZWJ1Z1JldHVybkFkZHJlc3MKKy8vIDB4MTA6IFhQU1IvZmxhZ3MsIGV4ZWN1dGlvbiBzdGF0ZSBpbmZvcm1hdGlvbiwgYW5kIGV4Y2VwdGlvbiBudW1iZXIKKy8vIDB4MTE6IE1TUCAoTWFpbiBTUCkKKy8vIDB4MTI6IFBTUCAoUHJvY2VzcyBTUCkKKy8vIDB4MTQ6IENPTlRST0w8PDI0IHwgRkFVTFRNQVNLPDwxNiB8IEJBU0VQUkk8PDggfCBQUklNQVNLCisjZGVmaW5lIENQVV9TQ1NfRENSU1JfUkVHU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1BVX1NDU19EQ1JTUl9SRUdTRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBDUFVfU0NTX0RDUlNSX1JFR1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1NDU19PX0RDUkRSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRENSRFIKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGhvbGRzIGRhdGEgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgcmVnaXN0ZXJzIHRvIGFuZCBmcm9tIHRoZQorLy8gcHJvY2Vzc29yLiBUaGlzIGlzIHRoZSBkYXRhIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVyIHNlbGVjdGVkIGJ5IERDUlNSLgorLy8gV2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGEgcmVxdWVzdCBmcm9tIERDUlNSLCB0aGlzIHJlZ2lzdGVyIGlzIHJlYWQgb3IKKy8vIHdyaXR0ZW4gYnkgdGhlIHByb2Nlc3NvciB1c2luZyBhIG5vcm1hbCBsb2FkLXN0b3JlIHVuaXQgb3BlcmF0aW9uLiBJZiBjb3JlCisvLyByZWdpc3RlciB0cmFuc2ZlcnMgYXJlIG5vdCBiZWluZyBwZXJmb3JtZWQsIHNvZnR3YXJlLWJhc2VkIGRlYnVnIG1vbml0b3JzCisvLyBjYW4gdXNlIHRoaXMgcmVnaXN0ZXIgZm9yIGNvbW11bmljYXRpb24gaW4gbm9uLWhhbHRpbmcgZGVidWcuIFRoaXMgZW5hYmxlcworLy8gZmxhZ3MgYW5kIGJpdHMgdG8gYWNrbm93bGVkZ2Ugc3RhdGUgYW5kIGluZGljYXRlIGlmIGNvbW1hbmRzIGhhdmUgYmVlbgorLy8gYWNjZXB0ZWQgdG8sIHJlcGxpZWQgdG8sIG9yIGFjY2VwdGVkIGFuZCByZXBsaWVkIHRvLgorI2RlZmluZSBDUFVfU0NTX0RDUkRSX0RDUkRSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9TQ1NfRENSRFJfRENSRFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX1NDU19EQ1JEUl9EQ1JEUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19ERU1DUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIFRSQ0VOQQorLy8KKy8vIFRoaXMgYml0IG11c3QgYmUgc2V0IHRvIDEgdG8gZW5hYmxlIHVzZSBvZiB0aGUgdHJhY2UgYW5kIGRlYnVnIGJsb2NrczogRFdULAorLy8gSVRNLCBFVE0gYW5kIFRQSVUuIFRoaXMgZW5hYmxlcyBjb250cm9sIG9mIHBvd2VyIHVzYWdlIHVubGVzcyB0cmFjaW5nIGlzCisvLyByZXF1aXJlZC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBlbmFibGUgdGhpcywgZm9yIElUTSB1c2UsIG9yIHVzZSBieSBhCisvLyBkZWJ1Z2dlci4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9UUkNFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1RSQ0VOQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVFJDRU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9UUkNFTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE5XSBNT05fUkVRCisvLworLy8gVGhpcyBlbmFibGVzIHRoZSBtb25pdG9yIHRvIGlkZW50aWZ5IGhvdyBpdCB3YWtlcyB1cC4gVGhpcyBiaXQgY2xlYXJzIG9uIGEKKy8vIENvcmUgUmVzZXQuCisvLworLy8gMHgwOiBXb2tlbiB1cCBieSBkZWJ1ZyBleGNlcHRpb24uCisvLyAweDE6IFdva2VuIHVwIGJ5IE1PTl9QRU5ECisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fUkVRX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9SRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1JFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gTU9OX1NURVAKKy8vCisvLyBXaGVuIE1PTl9FTiA9IDEsIHRoaXMgc3RlcHMgdGhlIGNvcmUuIFdoZW4gTU9OX0VOID0gMCwgdGhpcyBiaXQgaXMgaWdub3JlZC4KKy8vIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdG8gREhDU1IuQ19TVEVQLiBJbnRlcnJ1cHRzIGFyZSBvbmx5IHN0ZXBwZWQKKy8vIGFjY29yZGluZyB0byB0aGUgcHJpb3JpdHkgb2YgdGhlIG1vbml0b3IgYW5kIHNldHRpbmdzIG9mIFBSSU1BU0ssIEZBVUxUTUFTSywKKy8vIG9yIEJBU0VQUkkuCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1NURVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fU1RFUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9TVEVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1NURVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gTU9OX1BFTkQKKy8vCisvLyBQZW5kIHRoZSBtb25pdG9yIHRvIGFjdGl2YXRlIHdoZW4gcHJpb3JpdHkgcGVybWl0cy4gVGhpcyBjYW4gd2FrZSB1cCB0aGUKKy8vIG1vbml0b3IgdGhyb3VnaCB0aGUgQUhCLUFQIHBvcnQuIEl0IGlzIHRoZSBlcXVpdmFsZW50IHRvIERIQ1NSLkNfSEFMVCBmb3IKKy8vIE1vbml0b3IgZGVidWcuIFRoaXMgcmVnaXN0ZXIgZG9lcyBub3QgcmVzZXQgb24gYSBzeXN0ZW0gcmVzZXQuIEl0IGlzIG9ubHkKKy8vIHJlc2V0IGJ5IGEgcG93ZXItb24gcmVzZXQuIFNvZnR3YXJlIGluIHRoZSByZXNldCBoYW5kbGVyIG9yIGxhdGVyLCBvciBieSB0aGUKKy8vIERBUCBtdXN0IGVuYWJsZSB0aGUgZGVidWcgbW9uaXRvci4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9QRU5EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX1BFTkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fUEVORF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBNT05fRU4KKy8vCisvLyBFbmFibGUgdGhlIGRlYnVnIG1vbml0b3IuCisvLyBXaGVuIGVuYWJsZWQsIHRoZSBTeXN0ZW0gaGFuZGxlciBwcmlvcml0eSByZWdpc3RlciBjb250cm9scyBpdHMgcHJpb3JpdHkKKy8vIGxldmVsLiBJZiBkaXNhYmxlZCwgdGhlbiBhbGwgZGVidWcgZXZlbnRzIGdvIHRvIEhhcmQgZmF1bHQuIERIQ1NSLkNfREVCVUdFTgorLy8gb3ZlcnJpZGVzIHRoaXMgYml0LiBWZWN0b3IgY2F0Y2hpbmcgaXMgc2VtaS1zeW5jaHJvbm91cy4gV2hlbiBhIG1hdGNoaW5nCisvLyBldmVudCBpcyBzZWVuLCBhIEhhbHQgaXMgcmVxdWVzdGVkLiBCZWNhdXNlIHRoZSBwcm9jZXNzb3IgY2FuIG9ubHkgaGFsdCBvbgorLy8gYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnksIGl0IG11c3Qgd2FpdCB1bnRpbCB0aGUgbmV4dCBpbnN0cnVjdGlvbiBib3VuZGFyeS4KKy8vIEFzIGEgcmVzdWx0LCBpdCBzdG9wcyBvbiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgorLy8gSG93ZXZlciwgdHdvIHNwZWNpYWwgY2FzZXMgZXhpc3Qgd2hlbiBhIHZlY3RvciBjYXRjaCBoYXMgdHJpZ2dlcmVkOiAxLiBJZiBhCisvLyBmYXVsdCBpcyB0YWtlbiBkdXJpbmcgdmVjdG9yaW5nLCB2ZWN0b3IgcmVhZCBvciBzdGFjayBwdXNoIGVycm9yLCB0aGUgaGFsdAorLy8gb2NjdXJzIG9uIHRoZSBjb3JyZXNwb25kaW5nIGZhdWx0IGhhbmRsZXIsIGZvciB0aGUgdmVjdG9yIGVycm9yIG9yIHN0YWNrCisvLyBwdXNoLiAyLiBJZiBhIGxhdGUgYXJyaXZpbmcgaW50ZXJydXB0IGNvbWVzIGluIGR1cmluZyB2ZWN0b3JpbmcsIGl0IGlzIG5vdAorLy8gdGFrZW4uIFRoYXQgaXMsIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhlIGxhdGUgYXJyaXZhbAorLy8gb3B0aW1pemF0aW9uIG11c3Qgc3VwcHJlc3MgaXQgaW4gdGhpcyBjYXNlLgorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfTU9OX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9NT05fRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX01PTl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTBdIFZDX0hBUkRFUlIKKy8vCisvLyBEZWJ1ZyB0cmFwIG9uIEhhcmQgRmF1bHQuIElnbm9yZWQgd2hlbiBESENTUi5DX0RFQlVHRU4gaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19IQVJERVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0hBUkRFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfSEFSREVSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19IQVJERVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBWQ19JTlRFUlIKKy8vCisvLyBEZWJ1ZyB0cmFwIG9uIGEgZmF1bHQgb2NjdXJyaW5nIGR1cmluZyBhbiBleGNlcHRpb24gZW50cnkgb3IgcmV0dXJuCisvLyBzZXF1ZW5jZS4gSWdub3JlZCB3aGVuIERIQ1NSLkNfREVCVUdFTiBpcyBjbGVhcmVkLgorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0lOVEVSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfSU5URVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19JTlRFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0lOVEVSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFZDX0JVU0VSUgorLy8KKy8vIERlYnVnIFRyYXAgb24gbm9ybWFsIEJ1cyBlcnJvci4gSWdub3JlZCB3aGVuIERIQ1NSLkNfREVCVUdFTiBpcyBjbGVhcmVkLgorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0JVU0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQlVTRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19CVVNFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0JVU0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFZDX1NUQVRFUlIKKy8vCisvLyBEZWJ1ZyB0cmFwIG9uIFVzYWdlIEZhdWx0IHN0YXRlIGVycm9ycy4gSWdub3JlZCB3aGVuIERIQ1NSLkNfREVCVUdFTiBpcworLy8gY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19TVEFURVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX1NUQVRFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfU1RBVEVSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19TVEFURVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBWQ19DSEtFUlIKKy8vCisvLyBEZWJ1ZyB0cmFwIG9uIFVzYWdlIEZhdWx0IGVuYWJsZWQgY2hlY2tpbmcgZXJyb3JzLiBJZ25vcmVkIHdoZW4KKy8vIERIQ1NSLkNfREVCVUdFTiBpcyBjbGVhcmVkLgorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0NIS0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQ0hLRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19DSEtFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0NIS0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFZDX05PQ1BFUlIKKy8vCisvLyBEZWJ1ZyB0cmFwIG9uIGEgVXNhZ2VGYXVsdCBhY2Nlc3MgdG8gYSBDb3Byb2Nlc3Nvci4gSWdub3JlZCB3aGVuCisvLyBESENTUi5DX0RFQlVHRU4gaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19OT0NQRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX05PQ1BFUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfTk9DUEVSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19OT0NQRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBWQ19NTUVSUgorLy8KKy8vIERlYnVnIHRyYXAgb24gTWVtb3J5IE1hbmFnZW1lbnQgZmF1bHRzLiBJZ25vcmVkIHdoZW4gREhDU1IuQ19ERUJVR0VOIGlzCisvLyBjbGVhcmVkLgorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX01NRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfTU1FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19NTUVSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX01NRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzBdIFZDX0NPUkVSRVNFVAorLy8KKy8vIFJlc2V0IFZlY3RvciBDYXRjaC4gSGFsdCBydW5uaW5nIHN5c3RlbSBpZiBDb3JlIHJlc2V0IG9jY3Vycy4gSWdub3JlZCB3aGVuCisvLyBESENTUi5DX0RFQlVHRU4gaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19DT1JFUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfU0NTX0RFTUNSX1ZDX0NPUkVSRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9TQ1NfREVNQ1JfVkNfQ09SRVJFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1NDU19ERU1DUl9WQ19DT1JFUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9TQ1NfT19TVElSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzg6MF0gSU5USUQKKy8vCisvLyBJbnRlcnJ1cHQgSUQgZmllbGQuIFdyaXRpbmcgYSB2YWx1ZSB0byB0aGlzIGJpdC1maWVsZCBpcyB0aGUgc2FtZSBhcworLy8gbWFudWFsbHkgcGVuZGluZyBhbiBpbnRlcnJ1cHQgYnkgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgYml0IGluCisvLyBhbiBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgaW4gTlZJQ19JU1BSMCBvciBOVklDX0lTUFIxLgorI2RlZmluZSBDUFVfU0NTX1NUSVJfSU5USURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENQVV9TQ1NfU1RJUl9JTlRJRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxRkYKKyNkZWZpbmUgQ1BVX1NDU19TVElSX0lOVElEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0NQVV9TQ1NfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3RpcHJvcC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3RpcHJvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzI2YzgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcHVfdGlwcm9wLmgKQEAgLTAsMCArMSw4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2NwdV90aXByb3BfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1BVX1RJUFJPUF9IX18KKyNkZWZpbmUgX19IV19DUFVfVElQUk9QX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIENQVV9USVBST1AgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZXJuYWwKKyNkZWZpbmUgQ1BVX1RJUFJPUF9PX1RSQUNFQ0xLTVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBDUFVfVElQUk9QX09fRFlOX0NHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RJUFJPUF9PX1RSQUNFQ0xLTVVYCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gVFJBQ0VDTEtfTl9TV1YKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyBUUkFDRUNMSyAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIFNXViAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBDUFVfVElQUk9QX1RSQUNFQ0xLTVVYX1RSQUNFQ0xLX05fU1dWICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9USVBST1BfVFJBQ0VDTEtNVVhfVFJBQ0VDTEtfTl9TV1ZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BVX1RJUFJPUF9UUkFDRUNMS01VWF9UUkFDRUNMS19OX1NXVl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfVElQUk9QX1RSQUNFQ0xLTVVYX1RSQUNFQ0xLX05fU1dWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9USVBST1BfVFJBQ0VDTEtNVVhfVFJBQ0VDTEtfTl9TV1ZfVFJBQ0VDTEsgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1RJUFJPUF9UUkFDRUNMS01VWF9UUkFDRUNMS19OX1NXVl9TV1YgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9USVBST1BfT19EWU5fQ0cKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBEWU5fQ0cKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBDUFVfVElQUk9QX0RZTl9DR19EWU5fQ0dfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9USVBST1BfRFlOX0NHX0RZTl9DR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQ1BVX1RJUFJPUF9EWU5fQ0dfRFlOX0NHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0NQVV9USVBST1BfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfY3B1X3RwaXUuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV90cGl1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYmY3OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NwdV90cGl1LmgKQEAgLTAsMCArMSwzNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jcHVfdHBpdV9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19DUFVfVFBJVV9IX18KKyNkZWZpbmUgX19IV19DUFVfVFBJVV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBDUFVfVFBJVSBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBTdXBwb3J0ZWQgU3luYyBQb3J0IFNpemVzCisjZGVmaW5lIENQVV9UUElVX09fU1NQU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ3VycmVudCBTeW5jIFBvcnQgU2l6ZQorI2RlZmluZSBDUFVfVFBJVV9PX0NTUFNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIEFzeW5jIENsb2NrIFByZXNjYWxlcgorI2RlZmluZSBDUFVfVFBJVV9PX0FDUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIFNlbGVjdGVkIFBpbiBQcm90b2NvbAorI2RlZmluZSBDUFVfVFBJVV9PX1NQUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisKKy8vIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzCisjZGVmaW5lIENQVV9UUElVX09fRkZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKworLy8gRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sCisjZGVmaW5lIENQVV9UUElVX09fRkZDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDQKKworLy8gRm9ybWF0dGVyIFN5bmNocm9uaXphdGlvbiBDb3VudGVyCisjZGVmaW5lIENQVV9UUElVX09fRlNDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDgKKworLy8gQ2xhaW0gVGFnIE1hc2sKKyNkZWZpbmUgQ1BVX1RQSVVfT19DTEFJTU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZBMAorCisvLyBDbGFpbSBUYWcgU2V0CisjZGVmaW5lIENQVV9UUElVX09fQ0xBSU1TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQTAKKworLy8gQ3VycmVudCBDbGFpbSBUYWcKKyNkZWZpbmUgQ1BVX1RQSVVfT19DTEFJTVRBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZBNAorCisvLyBDbGFpbSBUYWcgQ2xlYXIKKyNkZWZpbmUgQ1BVX1RQSVVfT19DTEFJTUNMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZBNAorCisvLyBEZXZpY2UgSUQKKyNkZWZpbmUgQ1BVX1RQSVVfT19ERVZJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZDOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fU1NQU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBGT1VSCisvLworLy8gNC1iaXQgcG9ydCBzaXplIHN1cHBvcnQKKy8vCisvLyAweDA6IE5vdCBzdXBwb3J0ZWQKKy8vIDB4MTogU3VwcG9ydGVkCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX0ZPVVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfRk9VUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9GT1VSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9UUElVX1NTUFNSX0ZPVVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gVEhSRUUKKy8vCisvLyAzLWJpdCBwb3J0IHNpemUgc3VwcG9ydAorLy8KKy8vIDB4MDogTm90IHN1cHBvcnRlZAorLy8gMHgxOiBTdXBwb3J0ZWQKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfVEhSRUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9USFJFRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX1RIUkVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfVEhSRUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUV08KKy8vCisvLyAyLWJpdCBwb3J0IHNpemUgc3VwcG9ydAorLy8KKy8vIDB4MDogTm90IHN1cHBvcnRlZAorLy8gMHgxOiBTdXBwb3J0ZWQKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfVFdPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9UV09fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX1RXT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfVFdPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBPTkUKKy8vCisvLyAxLWJpdCBwb3J0IHNpemUgc3VwcG9ydAorLy8KKy8vIDB4MDogTm90IHN1cHBvcnRlZAorLy8gMHgxOiBTdXBwb3J0ZWQKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfVFBJVV9TU1BTUl9PTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9UUElVX1NTUFNSX09ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1RQSVVfU1NQU1JfT05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fQ1NQU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBGT1VSCisvLworLy8gNC1iaXQgcG9ydCBlbmFibGUKKy8vIFdyaXRpbmcgdmFsdWVzIHdpdGggbW9yZSB0aGFuIG9uZSBiaXQgc2V0IGluIENTUFNSLCBvciBzZXR0aW5nIGEgYml0IHRoYXQgaXMKKy8vIG5vdCBpbmRpY2F0ZWQgYXMgc3VwcG9ydGVkIGluIFNTUFNSIGNhbiBjYXVzZSBVbnByZWRpY3RhYmxlIGJlaGF2aW9yLgorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9GT1VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9UUElVX0NTUFNSX0ZPVVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfRk9VUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9GT1VSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFRIUkVFCisvLworLy8gMy1iaXQgcG9ydCBlbmFibGUKKy8vIFdyaXRpbmcgdmFsdWVzIHdpdGggbW9yZSB0aGFuIG9uZSBiaXQgc2V0IGluIENTUFNSLCBvciBzZXR0aW5nIGEgYml0IHRoYXQgaXMKKy8vIG5vdCBpbmRpY2F0ZWQgYXMgc3VwcG9ydGVkIGluIFNTUFNSIGNhbiBjYXVzZSBVbnByZWRpY3RhYmxlIGJlaGF2aW9yLgorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9USFJFRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENQVV9UUElVX0NTUFNSX1RIUkVFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfVEhSRUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9USFJFRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFRXTworLy8KKy8vIDItYml0IHBvcnQgZW5hYmxlCisvLyBXcml0aW5nIHZhbHVlcyB3aXRoIG1vcmUgdGhhbiBvbmUgYml0IHNldCBpbiBDU1BTUiwgb3Igc2V0dGluZyBhIGJpdCB0aGF0IGlzCisvLyBub3QgaW5kaWNhdGVkIGFzIHN1cHBvcnRlZCBpbiBTU1BTUiBjYW4gY2F1c2UgVW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfVFdPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9UV09fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX1RXT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfVFdPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBPTkUKKy8vCisvLyAxLWJpdCBwb3J0IGVuYWJsZQorLy8gV3JpdGluZyB2YWx1ZXMgd2l0aCBtb3JlIHRoYW4gb25lIGJpdCBzZXQgaW4gQ1NQU1IsIG9yIHNldHRpbmcgYSBiaXQgdGhhdCBpcworLy8gbm90IGluZGljYXRlZCBhcyBzdXBwb3J0ZWQgaW4gU1NQU1IgY2FuIGNhdXNlIFVucHJlZGljdGFibGUgYmVoYXZpb3IuCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX09ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVX1RQSVVfQ1NQU1JfT05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUFVfVFBJVV9DU1BTUl9PTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENQVV9UUElVX0NTUFNSX09ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0FDUFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMjowXSBQUkVTQ0FMRVIKKy8vCisvLyBEaXZpc29yIGZvciBpbnB1dCB0cmFjZSBjbG9jayBpcyAoUFJFU0NBTEVSICsgMSkuCisjZGVmaW5lIENQVV9UUElVX0FDUFJfUFJFU0NBTEVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1BVX1RQSVVfQUNQUl9QUkVTQ0FMRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUZGRgorI2RlZmluZSBDUFVfVFBJVV9BQ1BSX1BSRVNDQUxFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19TUFBSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gUFJPVE9DT0wKKy8vCisvLyBUcmFjZSBvdXRwdXQgcHJvdG9jb2wKKy8vIEVOVU1zOgorLy8gU1dPX05SWiAgICAgICAgICAgICAgICAgIFNlcmlhbFdpcmUgT3V0cHV0IChOUlopCisvLyBTV09fTUFOQ0hFU1RFUiAgICAgICAgICAgU2VyaWFsV2lyZSBPdXRwdXQgKE1hbmNoZXN0ZXIpLiBUaGlzIGlzIHRoZSByZXNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLgorLy8gVFJBQ0VQT1JUICAgICAgICAgICAgICAgIFRyYWNlUG9ydCBtb2RlCisjZGVmaW5lIENQVV9UUElVX1NQUFJfUFJPVE9DT0xfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1BVX1RQSVVfU1BQUl9QUk9UT0NPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDUFVfVFBJVV9TUFBSX1BST1RPQ09MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQVV9UUElVX1NQUFJfUFJPVE9DT0xfU1dPX05SWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVX1RQSVVfU1BQUl9QUk9UT0NPTF9TV09fTUFOQ0hFU1RFUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUFVfVFBJVV9TUFBSX1BST1RPQ09MX1RSQUNFUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19GRlNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gRlROT05TVE9QCisvLworLy8gMDogRm9ybWF0dGVyIGNhbiBiZSBzdG9wcGVkCisvLyAxOiBGb3JtYXR0ZXIgY2Fubm90IGJlIHN0b3BwZWQKKyNkZWZpbmUgQ1BVX1RQSVVfRkZTUl9GVE5PTlNUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUFVfVFBJVV9GRlNSX0ZUTk9OU1RPUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENQVV9UUElVX0ZGU1JfRlROT05TVE9QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1BVX1RQSVVfRkZTUl9GVE5PTlNUT1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fRkZDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIFRSSUdJTgorLy8KKy8vIEluZGljYXRlcyB0aGF0IHRyaWdnZXJzIGFyZSBpbnNlcnRlZCB3aGVuIGEgdHJpZ2dlciBwaW4gaXMgYXNzZXJ0ZWQuCisjZGVmaW5lIENQVV9UUElVX0ZGQ1JfVFJJR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1BVX1RQSVVfRkZDUl9UUklHSU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUFVfVFBJVV9GRkNSX1RSSUdJTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENQVV9UUElVX0ZGQ1JfVFJJR0lOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMV0gRU5GQ09OVAorLy8KKy8vIEVuYWJsZSBjb250aW51b3VzIGZvcm1hdHRpbmc6CisvLworLy8gMDogQ29udGludW91cyBmb3JtYXR0aW5nIGRpc2FibGVkCisvLyAxOiBDb250aW51b3VzIGZvcm1hdHRpbmcgZW5hYmxlZAorI2RlZmluZSBDUFVfVFBJVV9GRkNSX0VORkNPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENQVV9UUElVX0ZGQ1JfRU5GQ09OVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BVX1RQSVVfRkZDUl9FTkZDT05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUFVfVFBJVV9GRkNSX0VORkNPTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19GU0NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRlNDUgorLy8KKy8vIFRoZSBnbG9iYWwgc3luY2hyb25pemF0aW9uIHRyaWdnZXIgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBQcm9ncmFtIENvdW50ZXIgKFBDKQorLy8gU2FtcGxlciBibG9jay4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHN5bmNocm9uaXphdGlvbiBjb3VudGVyIGluIHRoZQorLy8gVFBJVS4KKyNkZWZpbmUgQ1BVX1RQSVVfRlNDUl9GU0NSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfVFBJVV9GU0NSX0ZTQ1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9UUElVX0ZTQ1JfRlNDUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0NMQUlNTUFTSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENMQUlNTUFTSworLy8KKy8vIFRoaXMgcmVnaXN0ZXIgZm9ybXMgb25lIGhhbGYgb2YgdGhlIENsYWltIFRhZyB2YWx1ZS4gV2hlbiByZWFkaW5nIHRoaXMKKy8vIHJlZ2lzdGVyIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIHRoYXQgY2FuIGJlIHNldCAoZWFjaCBiaXQgaXMgY29uc2lkZXJlZAorLy8gc2VwYXJhdGVseSk6CisvLworLy8gMDogVGhpcyBjbGFpbSB0YWcgYml0IGlzIG5vdCBpbXBsZW1lbnRlZAorLy8gMTogVGhpcyBjbGFpbSB0YWcgYml0IGlzIG5vdCBpbXBsZW1lbnRlZAorLy8KKy8vIFRoZSBiZWhhdmlvciB3aGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciBpcyBkZXNjcmliZWQgaW4gQ0xBSU1TRVQuCisjZGVmaW5lIENQVV9UUElVX0NMQUlNTUFTS19DTEFJTU1BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1NQVNLX0NMQUlNTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTU1BU0tfQ0xBSU1NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1BVX1RQSVVfT19DTEFJTVNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENMQUlNU0VUCisvLworLy8gVGhpcyByZWdpc3RlciBmb3JtcyBvbmUgaGFsZiBvZiB0aGUgQ2xhaW0gVGFnIHZhbHVlLiBXcml0aW5nIHRvIHRoaXMKKy8vIGxvY2F0aW9uIGFsbG93cyBpbmRpdmlkdWFsIGJpdHMgdG8gYmUgc2V0IChlYWNoIGJpdCBpcyBjb25zaWRlcmVkCisvLyBzZXBhcmF0ZWx5KToKKy8vCisvLyAwOiBObyBlZmZlY3QKKy8vIDE6IFNldCB0aGlzIGJpdCBpbiB0aGUgY2xhaW0gdGFnCisvLworLy8gVGhlIGJlaGF2aW9yIHdoZW4gcmVhZGluZyBmcm9tIHRoaXMgbG9jYXRpb24gaXMgZGVzY3JpYmVkIGluIENMQUlNTUFTSy4KKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1TRVRfQ0xBSU1TRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTVNFVF9DTEFJTVNFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9UUElVX0NMQUlNU0VUX0NMQUlNU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUFVfVFBJVV9PX0NMQUlNVEFHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0xBSU1UQUcKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGZvcm1zIG9uZSBoYWxmIG9mIHRoZSBDbGFpbSBUYWcgdmFsdWUuIFJlYWRpbmcgdGhpcyByZWdpc3RlcgorLy8gcmV0dXJucyB0aGUgY3VycmVudCBDbGFpbSBUYWcgdmFsdWUuCisvLyBSZWFkaW5nIENMQUlNTUFTSyBkZXRlcm1pbmVzIGhvdyBtYW55IGJpdHMgZnJvbSB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgdXNlZC4KKy8vCisvLyBUaGUgYmVoYXZpb3Igd2hlbiB3cml0aW5nIHRvIHRoaXMgcmVnaXN0ZXIgaXMgZGVzY3JpYmVkIGluIENMQUlNQ0xSLgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTVRBR19DTEFJTVRBR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9UUElVX0NMQUlNVEFHX0NMQUlNVEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1UQUdfQ0xBSU1UQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fQ0xBSU1DTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDTEFJTUNMUgorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgZm9ybXMgb25lIGhhbGYgb2YgdGhlIENsYWltIFRhZyB2YWx1ZS4gV3JpdGluZyB0byB0aGlzCisvLyBsb2NhdGlvbiBlbmFibGVzIGluZGl2aWR1YWwgYml0cyB0byBiZSBjbGVhcmVkIChlYWNoIGJpdCBpcyBjb25zaWRlcmVkCisvLyBzZXBhcmF0ZWx5KToKKy8vCisvLyAwOiBObyBlZmZlY3QKKy8vIDE6IENsZWFyIHRoaXMgYml0IGluIHRoZSBjbGFpbSB0YWcuCisvLworLy8gVGhlIGJlaGF2aW9yIHdoZW4gcmVhZGluZyBmcm9tIHRoaXMgbG9jYXRpb24gaXMgZGVzY3JpYmVkIGluIENMQUlNVEFHLgorI2RlZmluZSBDUFVfVFBJVV9DTEFJTUNMUl9DTEFJTUNMUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENQVV9UUElVX0NMQUlNQ0xSX0NMQUlNQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1BVX1RQSVVfQ0xBSU1DTFJfQ0xBSU1DTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENQVV9UUElVX09fREVWSUQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBERVZJRAorLy8KKy8vIFRoaXMgZmllbGQgcmV0dXJuczogMHhDQTEgaWYgdGhlcmUgaXMgYW4gRVRNIHByZXNlbnQuIDB4Q0EwIGlmIHRoZXJlIGlzIG5vCisvLyBFVE0gcHJlc2VudC4KKyNkZWZpbmUgQ1BVX1RQSVVfREVWSURfREVWSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUFVfVFBJVV9ERVZJRF9ERVZJRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENQVV9UUElVX0RFVklEX0RFVklEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19DUFVfVFBJVV9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcnlwdG8uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2I1N2IKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19jcnlwdG8uaApAQCAtMCwwICsxLDE5MTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19jcnlwdG9faAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfQ1JZUFRPX0hfXworI2RlZmluZSBfX0hXX0NSWVBUT19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBDUllQVE8gY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRE1BIENoYW5uZWwgMCBDb250cm9sCisjZGVmaW5lIENSWVBUT19PX0RNQUNIMENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRE1BIENoYW5uZWwgMCBFeHRlcm5hbCBBZGRyZXNzCisjZGVmaW5lIENSWVBUT19PX0RNQUNIMEVYVEFERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRE1BIENoYW5uZWwgMCBMZW5ndGgKKyNkZWZpbmUgQ1JZUFRPX09fRE1BQ0gwTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBETUEgQ29udHJvbGxlciBTdGF0dXMKKyNkZWZpbmUgQ1JZUFRPX09fRE1BU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBETUEgQ29udHJvbGxlciBTb2Z0d2FyZSBSZXNldAorI2RlZmluZSBDUllQVE9fT19ETUFTV1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIERNQSBDaGFubmVsIDEgQ29udHJvbAorI2RlZmluZSBDUllQVE9fT19ETUFDSDFDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIERNQSBDaGFubmVsIDEgRXh0ZXJuYWwgQWRkcmVzcworI2RlZmluZSBDUllQVE9fT19ETUFDSDFFWFRBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIERNQSBDaGFubmVsIDEgTGVuZ3RoCisjZGVmaW5lIENSWVBUT19PX0RNQUNIMUxFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gRE1BIENvbnRyb2xsZXIgTWFzdGVyIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgQ1JZUFRPX09fRE1BQlVTQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorCisvLyBETUEgQ29udHJvbGxlciBQb3J0IEVycm9yCisjZGVmaW5lIENSWVBUT19PX0RNQVBPUlRFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0MKKworLy8gRE1BIENvbnRyb2xsZXIgVmVyc2lvbgorI2RlZmluZSBDUllQVE9fT19ETUFIV1ZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZDCisKKy8vIEtleSBXcml0ZSBBcmVhCisjZGVmaW5lIENSWVBUT19PX0tFWVdSSVRFQVJFQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKworLy8gS2V5IFdyaXR0ZW4gQXJlYSBTdGF0dXMKKyNkZWZpbmUgQ1JZUFRPX09fS0VZV1JJVFRFTkFSRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAorCisvLyBLZXkgU2l6ZQorI2RlZmluZSBDUllQVE9fT19LRVlTSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDA4CisKKy8vIEtleSBSZWFkIEFyZWEKKyNkZWZpbmUgQ1JZUFRPX09fS0VZUkVBREFSRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwQworCisvLyBDbGVhciBBRVNfS0VZMi9HSEFTSCBLZXkKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwMAorCisvLyBDbGVhciBBRVNfS0VZMi9HSEFTSCBLZXkKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwNAorCisvLyBDbGVhciBBRVNfS0VZMi9HSEFTSCBLZXkKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwOAorCisvLyBDbGVhciBBRVNfS0VZMi9HSEFTSCBLZXkKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwQworCisvLyBDbGVhciBBRVNfS0VZMworI2RlZmluZSBDUllQVE9fT19BRVNLRVkzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTEwCisKKy8vIENsZWFyIEFFU19LRVkzCisjZGVmaW5lIENSWVBUT19PX0FFU0tFWTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MTQKKworLy8gQ2xlYXIgQUVTX0tFWTMKKyNkZWZpbmUgQ1JZUFRPX09fQUVTS0VZMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUxOAorCisvLyBDbGVhciBBRVNfS0VZMworI2RlZmluZSBDUllQVE9fT19BRVNLRVkzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTFDCisKKy8vIEFFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IKKyNkZWZpbmUgQ1JZUFRPX09fQUVTSVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU0MAorCisvLyBBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yCisjZGVmaW5lIENSWVBUT19PX0FFU0lWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NDQKKworLy8gQUVTIEluaXRpYWxpemF0aW9uIFZlY3RvcgorI2RlZmluZSBDUllQVE9fT19BRVNJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQ4CisKKy8vIEFFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IKKyNkZWZpbmUgQ1JZUFRPX09fQUVTSVYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU0QworCisvLyBBRVMgSW5wdXQvT3V0cHV0IEJ1ZmZlciBDb250cm9sCisjZGVmaW5lIENSWVBUT19PX0FFU0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NTAKKworLy8gQ3J5cHRvIERhdGEgTGVuZ3RoIExTVworI2RlZmluZSBDUllQVE9fT19BRVNEQVRBTEVOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTU0CisKKy8vIENyeXB0byBEYXRhIExlbmd0aCBNU1cKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQUxFTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU1OAorCisvLyBBRVMgQXV0aGVudGljYXRpb24gTGVuZ3RoCisjZGVmaW5lIENSWVBUT19PX0FFU0FVVEhMRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NUMKKworLy8gRGF0YSBJbnB1dC9PdXRwdXQKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQU9VVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2MAorCisvLyBBRVMgRGF0YSBJbnB1dC9PdXRwdXQgMAorI2RlZmluZSBDUllQVE9fT19BRVNEQVRBSU4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTYwCisKKy8vIEFFUyBEYXRhIElucHV0L091dHB1dCAzCisjZGVmaW5lIENSWVBUT19PX0FFU0RBVEFPVVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NjQKKworLy8gQUVTIERhdGEgSW5wdXQvT3V0cHV0IDEKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQUlOMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2NAorCisvLyBBRVMgRGF0YSBJbnB1dC9PdXRwdXQgMgorI2RlZmluZSBDUllQVE9fT19BRVNEQVRBT1VUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTY4CisKKy8vIEFFUyBEYXRhIElucHV0L091dHB1dCAyCisjZGVmaW5lIENSWVBUT19PX0FFU0RBVEFJTjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NjgKKworLy8gQUVTIERhdGEgSW5wdXQvT3V0cHV0IDMKKyNkZWZpbmUgQ1JZUFRPX09fQUVTREFUQU9VVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2QworCisvLyBEYXRhIElucHV0L091dHB1dAorI2RlZmluZSBDUllQVE9fT19BRVNEQVRBSU4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTZDCisKKy8vIEFFUyBUYWcgT3V0cHV0CisjZGVmaW5lIENSWVBUT19PX0FFU1RBR09VVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NzAKKworLy8gQUVTIFRhZyBPdXRwdXQKKyNkZWZpbmUgQ1JZUFRPX09fQUVTVEFHT1VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU3NAorCisvLyBBRVMgVGFnIE91dHB1dAorI2RlZmluZSBDUllQVE9fT19BRVNUQUdPVVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTc4CisKKy8vIEFFUyBUYWcgT3V0cHV0CisjZGVmaW5lIENSWVBUT19PX0FFU1RBR09VVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1N0MKKworLy8gTWFzdGVyIEFsZ29yaXRobSBTZWxlY3QKKyNkZWZpbmUgQ1JZUFRPX09fQUxHU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorCisvLyBNYXN0ZXIgUHJvdGVjdGlvbiBDb250cm9sCisjZGVmaW5lIENSWVBUT19PX0RNQVBST1RDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDQKKworLy8gU29mdHdhcmUgUmVzZXQKKyNkZWZpbmUgQ1JZUFRPX09fU1dSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc0MAorCisvLyBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbgorI2RlZmluZSBDUllQVE9fT19JUlFUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzgwCisKKy8vIEludGVycnVwdCBFbmFibGUKKyNkZWZpbmUgQ1JZUFRPX09fSVJRRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc4NAorCisvLyBJbnRlcnJ1cHQgQ2xlYXIKKyNkZWZpbmUgQ1JZUFRPX09fSVJRQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc4OAorCisvLyBJbnRlcnJ1cHQgU2V0CisjZGVmaW5lIENSWVBUT19PX0lSUVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3OEMKKworLy8gSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBDUllQVE9fT19JUlFTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzkwCisKKy8vIENUUkwgTW9kdWxlIFZlcnNpb24KKyNkZWZpbmUgQ1JZUFRPX09fSFdWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdGQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUNIMENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIFBSSU8KKy8vCisvLyBDaGFubmVsIHByaW9yaXR5OgorLy8KKy8vIEEgY2hhbm5lbCB3aXRoIGhpZ2ggcHJpb3JpdHkgd2lsbCBiZSBzZXJ2ZWQgYmVmb3JlIGEgY2hhbm5lbCB3aXRoIGxvdworLy8gcHJpb3JpdHkgaW4gY2FzZXMgd2l0aCBzaW11bHRhbmVvdXMgYWNjZXNzIHJlcXVlc3RzLiBJZiBib3RoIGNoYW5uZWxzIGhhdmUKKy8vIHRoZSBzYW1lIHByaW9yaXR5IGFjY2VzcyBvZiB0aGUgY2hhbm5lbHMgdG8gdGhlIGV4dGVybmFsIHBvcnQgaXMgYXJiaXRyYXRlZAorLy8gdXNpbmcgYSBSb3VuZCBSb2JpbiBzY2hlbWUuCisvLyBFTlVNczoKKy8vIEhJR0ggICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSBoaWdoCisvLyBMT1cgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgbG93CisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfUFJJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9QUklPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX1BSSU9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfUFJJT19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9QUklPX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX1BSSU9fTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gRE1BIENoYW5uZWwgMCBDb250cm9sCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsIGVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsIGRpc2FibGVkCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFDSDBDVExfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMENUTF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BQ0gwQ1RMX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BQ0gwRVhUQUREUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFIKKy8vCisvLyBDaGFubmVsIGV4dGVybmFsIGFkZHJlc3MgdmFsdWUuCisvLyBIb2xkcyB0aGUgbGFzdCB1cGRhdGVkIGV4dGVybmFsIGFkZHJlc3MgYWZ0ZXIgYmVpbmcgc2VudCB0byB0aGUgbWFzdGVyCisvLyBpbnRlcmZhY2UuCisjZGVmaW5lIENSWVBUT19ETUFDSDBFWFRBRERSX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMEVYVEFERFJfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fRE1BQ0gwRVhUQUREUl9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BQ0gwTEVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gTEVOCisvLworLy8gRE1BIHRyYW5zZmVyIGxlbmd0aCBpbiBieXRlcy4KKy8vIER1cmluZyBjb25maWd1cmF0aW9uLCB0aGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBETUEgdHJhbnNmZXIgbGVuZ3RoIGluCisvLyBieXRlcy4gRHVyaW5nIG9wZXJhdGlvbiwgaXQgY29udGFpbnMgdGhlIGxhc3QgdXBkYXRlZCB2YWx1ZSBvZiB0aGUgRE1BCisvLyB0cmFuc2ZlciBsZW5ndGggYWZ0ZXIgYmVpbmcgc2VudCB0byB0aGUgbWFzdGVyIGludGVyZmFjZS4KKy8vIE5vdGU6IFdyaXRpbmcgYSBub24temVybyB2YWx1ZSB0byB0aGlzIHJlZ2lzdGVyIGZpZWxkIHN0YXJ0cyB0aGUgdHJhbnNmZXIgaWYKKy8vIHRoZSBjaGFubmVsIGlzIGVuYWJsZWQgYnkgc2V0dGluZyBETUFDSDBDVEwuRU4uCisjZGVmaW5lIENSWVBUT19ETUFDSDBMRU5fTEVOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMExFTl9MRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBDUllQVE9fRE1BQ0gwTEVOX0xFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTddIFBPUlRfRVJSCisvLworLy8gUmVmbGVjdHMgcG9zc2libGUgdHJhbnNmZXIgZXJyb3JzIG9uIHRoZSBBSEIgcG9ydC4KKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfUE9SVF9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9QT1JUX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIENSWVBUT19ETUFTVEFUX1BPUlRfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfUE9SVF9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgIFsxXSBDSDFfQUNUSVZFCisvLworLy8gVGhpcyByZWdpc3RlciBmaWVsZCBpbmRpY2F0ZXMgaWYgRE1BIGNoYW5uZWwgMSBpcyBhY3RpdmUgb3Igbm90LgorLy8gMDogTm90IGFjdGl2ZQorLy8gMTogQWN0aXZlCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX0NIMV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfQ0gxX0FDVElWRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9DSDFfQUNUSVZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX0NIMV9BQ1RJVkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ0gwX0FDVElWRQorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgZmllbGQgaW5kaWNhdGVzIGlmIERNQSBjaGFubmVsIDAgaXMgYWN0aXZlIG9yIG5vdC4KKy8vIDA6IE5vdCBhY3RpdmUKKy8vIDE6IEFjdGl2ZQorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9DSDBfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFTVEFUX0NIMF9BQ1RJVkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0RNQVNUQVRfQ0gwX0FDVElWRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BU1RBVF9DSDBfQUNUSVZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BU1dSRVNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJFU0VUCisvLworLy8gU29mdHdhcmUgcmVzZXQgZW5hYmxlCisvLworLy8gMDogIERpc2FibGUKKy8vIDE6ICBFbmFibGUgKHNlbGYtY2xlYXJlZCB0byB6ZXJvKS4KKy8vCisvLyBOb3RlOiBDb21wbGV0aW9uIG9mIHRoZSBzb2Z0d2FyZSByZXNldCBtdXN0IGJlIGNoZWNrZWQgaW4gRE1BU1RBVC5DSDBfQUNUSVZFCisvLyBhbmQgRE1BU1RBVC5DSDFfQUNUSVZFLgorI2RlZmluZSBDUllQVE9fRE1BU1dSRVNFVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFTV1JFU0VUX1JFU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0RNQVNXUkVTRVRfUkVTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BU1dSRVNFVF9SRVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BQ0gxQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gUFJJTworLy8KKy8vIENoYW5uZWwgcHJpb3JpdHk6CisvLworLy8gQSBjaGFubmVsIHdpdGggaGlnaCBwcmlvcml0eSB3aWxsIGJlIHNlcnZlZCBiZWZvcmUgYSBjaGFubmVsIHdpdGggbG93CisvLyBwcmlvcml0eSBpbiBjYXNlcyB3aXRoIHNpbXVsdGFuZW91cyBhY2Nlc3MgcmVxdWVzdHMuIElmIGJvdGggY2hhbm5lbHMgaGF2ZQorLy8gdGhlIHNhbWUgcHJpb3JpdHkgYWNjZXNzIG9mIHRoZSBjaGFubmVscyB0byB0aGUgZXh0ZXJuYWwgcG9ydCBpcyBhcmJpdHJhdGVkCisvLyB1c2luZyBhIFJvdW5kIFJvYmluIHNjaGVtZS4KKy8vIEVOVU1zOgorLy8gSElHSCAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5IGhpZ2gKKy8vIExPVyAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSBsb3cKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9QUklPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX1BSSU9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfUFJJT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9QUklPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX1BSSU9fSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfUFJJT19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gRU4KKy8vCisvLyBDaGFubmVsIGVuYWJsZToKKy8vCisvLyBOb3RlOiBEaXNhYmxpbmcgYW4gYWN0aXZlIGNoYW5uZWwgd2lsbCBpbnRlcnJ1cHQgdGhlIERNQSBvcGVyYXRpb24uIFRoZQorLy8gb25nb2luZyBibG9jayB0cmFuc2ZlciB3aWxsIGJlIGNvbXBsZXRlZCwgYnV0IG5vIG5ldyB0cmFuc2ZlcnMgd2lsbCBiZQorLy8gcmVxdWVzdGVkLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbCBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbCBkaXNhYmxlZAorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BQ0gxQ1RMX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19ETUFDSDFDVExfRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUNUTF9FTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUNIMUVYVEFERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBBRERSCisvLworLy8gQ2hhbm5lbCBleHRlcm5hbCBhZGRyZXNzIHZhbHVlLgorLy8gSG9sZHMgdGhlIGxhc3QgdXBkYXRlZCBleHRlcm5hbCBhZGRyZXNzIGFmdGVyIGJlaW5nIHNlbnQgdG8gdGhlIG1hc3RlcgorLy8gaW50ZXJmYWNlLgorI2RlZmluZSBDUllQVE9fRE1BQ0gxRVhUQUREUl9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19ETUFDSDFFWFRBRERSX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUVYVEFERFJfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUNIMUxFTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIExFTgorLy8KKy8vIERNQSB0cmFuc2ZlciBsZW5ndGggaW4gYnl0ZXMuCisvLyBEdXJpbmcgY29uZmlndXJhdGlvbiwgdGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgRE1BIHRyYW5zZmVyIGxlbmd0aCBpbgorLy8gYnl0ZXMuIER1cmluZyBvcGVyYXRpb24sIGl0IGNvbnRhaW5zIHRoZSBsYXN0IHVwZGF0ZWQgdmFsdWUgb2YgdGhlIERNQQorLy8gdHJhbnNmZXIgbGVuZ3RoIGFmdGVyIGJlaW5nIHNlbnQgdG8gdGhlIG1hc3RlciBpbnRlcmZhY2UuCisvLyBOb3RlOiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgdG8gdGhpcyByZWdpc3RlciBmaWVsZCBzdGFydHMgdGhlIHRyYW5zZmVyIGlmCisvLyB0aGUgY2hhbm5lbCBpcyBlbmFibGVkIGJ5IHNldHRpbmcgRE1BQ0gxQ1RMLkVOLgorI2RlZmluZSBDUllQVE9fRE1BQ0gxTEVOX0xFTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIENSWVBUT19ETUFDSDFMRU5fTEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgQ1JZUFRPX0RNQUNIMUxFTl9MRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQUJVU0NGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTU6MTJdIEFIQl9NU1QxX0JVUlNUX1NJWkUKKy8vCisvLyBNYXhpbXVtIGJ1cnN0IHNpemUgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIG9uIHRoZSBBSEIgYnVzCisvLyBFTlVNczoKKy8vIDY0X0JZVEUgICAgICAgICAgICAgICAgICA2NCBieXRlcworLy8gMzJfQllURSAgICAgICAgICAgICAgICAgIDMyIGJ5dGVzCisvLyAxNl9CWVRFICAgICAgICAgICAgICAgICAgMTYgYnl0ZXMKKy8vIDhfQllURSAgICAgICAgICAgICAgICAgICA4IGJ5dGVzCisvLyA0X0JZVEUgICAgICAgICAgICAgICAgICAgNCBieXRlcworI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JVUlNUX1NJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQlVSU1RfU0laRV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CVVJTVF9TSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JVUlNUX1NJWkVfNjRfQllURSAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQlVSU1RfU0laRV8zMl9CWVRFICAgICAgICAgICAgICAgIDB4MDAwMDUwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CVVJTVF9TSVpFXzE2X0JZVEUgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JVUlNUX1NJWkVfOF9CWVRFICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQlVSU1RfU0laRV80X0JZVEUgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMV0gQUhCX01TVDFfSURMRV9FTgorLy8KKy8vIElkbGUgdHJhbnNmZXIgaW5zZXJ0aW9uIGJldHdlZW4gY29uc2VjdXRpdmUgYnVyc3QgdHJhbnNmZXJzIG9uIEFIQgorLy8gRU5VTXM6CisvLyBJRExFICAgICAgICAgICAgICAgICAgICAgSWRsZSB0cmFuc2ZlciBpbnNlcnRpb24gZW5hYmxlZAorLy8gTk9fSURMRSAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnNlcnQgaWRsZSB0cmFuc2ZlcnMuCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSURMRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JRExFX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lETEVfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSURMRV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JRExFX0VOX0lETEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lETEVfRU5fTk9fSURMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTBdIEFIQl9NU1QxX0lOQ1JfRU4KKy8vCisvLyBCdXJzdCBsZW5ndGggdHlwZSBvZiBBSEIgdHJhbnNmZXIKKy8vIEVOVU1zOgorLy8gU1BFQ0lGSUVEICAgICAgICAgICAgICAgIEZpeGVkIGxlbmd0aCBidXJzdHMgb3Igc2luZ2xlIHRyYW5zZmVycworLy8gVU5TUEVDSUZJRUQgICAgICAgICAgICAgIFVuc3BlY2lmaWVkIGxlbmd0aCBidXJzdCB0cmFuc2ZlcnMKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JTkNSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lOQ1JfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSU5DUl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9JTkNSX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0lOQ1JfRU5fU1BFQ0lGSUVEICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfSU5DUl9FTl9VTlNQRUNJRklFRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOV0gQUhCX01TVDFfTE9DS19FTgorLy8KKy8vIExvY2tlZCB0cmFuc2Zvcm0gb24gQUhCCisvLyBFTlVNczoKKy8vIExPQ0tFRCAgICAgICAgICAgICAgICAgICBUcmFuc2ZlcnMgYXJlIGxvY2tlZAorLy8gTk9UX0xPQ0tFRCAgICAgICAgICAgICAgIFRyYW5zZmVycyBhcmUgbm90IGxvY2tlZAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0xPQ0tfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfTE9DS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9MT0NLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0xPQ0tfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfTE9DS19FTl9MT0NLRUQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9MT0NLX0VOX05PVF9MT0NLRUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs4XSBBSEJfTVNUMV9CSUdFTkQKKy8vCisvLyBFbmRpYW5lc3MgZm9yIHRoZSBBSEIgbWFzdGVyCisvLyBFTlVNczoKKy8vIEJJR19FTkRJQU4gICAgICAgICAgICAgICBCaWcgRW5kaWFuCisvLyBMSVRUTEVfRU5ESUFOICAgICAgICAgICAgTGl0dGxlIEVuZGlhbgorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JJR0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQklHRU5EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CSUdFTkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUllQVE9fRE1BQlVTQ0ZHX0FIQl9NU1QxX0JJR0VORF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENSWVBUT19ETUFCVVNDRkdfQUhCX01TVDFfQklHRU5EX0JJR19FTkRJQU4gICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUJVU0NGR19BSEJfTVNUMV9CSUdFTkRfTElUVExFX0VORElBTiAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0RNQVBPUlRFUlIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEyXSBBSEJfRVJSCisvLworLy8gQSAxIGluZGljYXRlcyB0aGF0IHRoZSBDcnlwdG8gcGVyaXBoZXJhbCBoYXMgZGV0ZWN0ZWQgYW4gQUhCIGJ1cyBlcnJvcgorI2RlZmluZSBDUllQVE9fRE1BUE9SVEVSUl9BSEJfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIENSWVBUT19ETUFQT1JURVJSX0FIQl9FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQ1JZUFRPX0RNQVBPUlRFUlJfQUhCX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDUllQVE9fRE1BUE9SVEVSUl9BSEJfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICAgWzldIExBU1RfQ0gKKy8vCisvLyBJbmRpY2F0ZXMgd2hpY2ggY2hhbm5lbCB3YXMgc2VydmljZWQgbGFzdCAoY2hhbm5lbCAwIG9yIGNoYW5uZWwgMSkgYnkgdGhlCisvLyBBSEIgbWFzdGVyIHBvcnQuCisjZGVmaW5lIENSWVBUT19ETUFQT1JURVJSX0xBU1RfQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQVBPUlRFUlJfTEFTVF9DSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBDUllQVE9fRE1BUE9SVEVSUl9MQVNUX0NIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIENSWVBUT19ETUFQT1JURVJSX0xBU1RfQ0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19ETUFIV1ZFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MjRdIEhXX01BSk9SX1ZFUgorLy8KKy8vIE1ham9yIHZlcnNpb24gbnVtYmVyCisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9IV19NQUpPUl9WRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX0hXX01BSk9SX1ZFUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfSFdfTUFKT1JfVkVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MjBdIEhXX01JTk9SX1ZFUgorLy8KKy8vIE1pbm9yIHZlcnNpb24gbnVtYmVyCisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9IV19NSU5PUl9WRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX0hXX01JTk9SX1ZFUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfSFdfTUlOT1JfVkVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIEhXX1BBVENIX0xWTAorLy8KKy8vIFBhdGNoIGxldmVsLgorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfSFdfUEFUQ0hfTFZMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9IV19QQVRDSF9MVkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX0hXX1BBVENIX0xWTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBWRVJfTlVNX0NPTVBMCisvLworLy8gQml0LWJ5LWJpdCBjb21wbGVtZW50IG9mIHRoZSBWRVJfTlVNIGZpZWxkIGJpdHMuCisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9WRVJfTlVNX0NPTVBMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX1ZFUl9OVU1fQ09NUExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfVkVSX05VTV9DT01QTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFZFUl9OVU0KKy8vCisvLyBWZXJzaW9uIG51bWJlciBvZiB0aGUgRE1BIENvbnRyb2xsZXIgKDIwOSkKKyNkZWZpbmUgQ1JZUFRPX0RNQUhXVkVSX1ZFUl9OVU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDUllQVE9fRE1BSFdWRVJfVkVSX05VTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIENSWVBUT19ETUFIV1ZFUl9WRVJfTlVNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19LRVlXUklURUFSRUEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBSQU1fQVJFQTcKKy8vCisvLyBSZXByZXNlbnRzIGFuIGFyZWEgb2YgMTI4IGJpdHMuCisvLyBTZWxlY3QgdGhlIGtleSBzdG9yZSBSQU0gYXJlYShzKSB3aGVyZSB0aGUga2V5KHMpIG5lZWRzIHRvIGJlIHdyaXR0ZW4uCisvLworLy8gV3JpdGluZyB0byBtdWx0aXBsZSBSQU0gbG9jYXRpb25zIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgc2VsZWN0ZWQgUkFNCisvLyBhcmVhcyBhcmUgc2VxdWVudGlhbC4KKy8vIEVOVU1zOgorLy8gU0VMICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorLy8gTk9UX1NFTCAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBN19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE3X05PVF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gUkFNX0FSRUE2CisvLworLy8gUmVwcmVzZW50cyBhbiBhcmVhIG9mIDEyOCBiaXRzLgorLy8gU2VsZWN0IHRoZSBrZXkgc3RvcmUgUkFNIGFyZWEocykgd2hlcmUgdGhlIGtleShzKSBuZWVkcyB0byBiZSB3cml0dGVuLgorLy8KKy8vIFdyaXRpbmcgdG8gbXVsdGlwbGUgUkFNIGxvY2F0aW9ucyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHNlbGVjdGVkIFJBTQorLy8gYXJlYXMgYXJlIHNlcXVlbnRpYWwuCisvLyBFTlVNczoKKy8vIFNFTCAgICAgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKy8vIE5PVF9TRUwgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTZfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNl9OT1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFJBTV9BUkVBNQorLy8KKy8vIFJlcHJlc2VudHMgYW4gYXJlYSBvZiAxMjggYml0cy4KKy8vIFNlbGVjdCB0aGUga2V5IHN0b3JlIFJBTSBhcmVhKHMpIHdoZXJlIHRoZSBrZXkocykgbmVlZHMgdG8gYmUgd3JpdHRlbi4KKy8vCisvLyBXcml0aW5nIHRvIG11bHRpcGxlIFJBTSBsb2NhdGlvbnMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBzZWxlY3RlZCBSQU0KKy8vIGFyZWFzIGFyZSBzZXF1ZW50aWFsLgorLy8gRU5VTXM6CisvLyBTRUwgICAgICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisvLyBOT1RfU0VMICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE1X1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTVfTk9UX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBSQU1fQVJFQTQKKy8vCisvLyBSZXByZXNlbnRzIGFuIGFyZWEgb2YgMTI4IGJpdHMuCisvLyBTZWxlY3QgdGhlIGtleSBzdG9yZSBSQU0gYXJlYShzKSB3aGVyZSB0aGUga2V5KHMpIG5lZWRzIHRvIGJlIHdyaXR0ZW4uCisvLworLy8gV3JpdGluZyB0byBtdWx0aXBsZSBSQU0gbG9jYXRpb25zIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgc2VsZWN0ZWQgUkFNCisvLyBhcmVhcyBhcmUgc2VxdWVudGlhbC4KKy8vIEVOVU1zOgorLy8gU0VMICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorLy8gTk9UX1NFTCAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBNF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUE0X05PVF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gUkFNX0FSRUEzCisvLworLy8gUmVwcmVzZW50cyBhbiBhcmVhIG9mIDEyOCBiaXRzLgorLy8gU2VsZWN0IHRoZSBrZXkgc3RvcmUgUkFNIGFyZWEocykgd2hlcmUgdGhlIGtleShzKSBuZWVkcyB0byBiZSB3cml0dGVuLgorLy8KKy8vIFdyaXRpbmcgdG8gbXVsdGlwbGUgUkFNIGxvY2F0aW9ucyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHNlbGVjdGVkIFJBTQorLy8gYXJlYXMgYXJlIHNlcXVlbnRpYWwuCisvLyBFTlVNczoKKy8vIFNFTCAgICAgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKy8vIE5PVF9TRUwgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBM19OT1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIFJBTV9BUkVBMgorLy8KKy8vIFJlcHJlc2VudHMgYW4gYXJlYSBvZiAxMjggYml0cy4KKy8vIFNlbGVjdCB0aGUga2V5IHN0b3JlIFJBTSBhcmVhKHMpIHdoZXJlIHRoZSBrZXkocykgbmVlZHMgdG8gYmUgd3JpdHRlbi4KKy8vCisvLyBXcml0aW5nIHRvIG11bHRpcGxlIFJBTSBsb2NhdGlvbnMgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBzZWxlY3RlZCBSQU0KKy8vIGFyZWFzIGFyZSBzZXF1ZW50aWFsLgorLy8gRU5VTXM6CisvLyBTRUwgICAgICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisvLyBOT1RfU0VMICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEyX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTJfTk9UX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBSQU1fQVJFQTEKKy8vCisvLyBSZXByZXNlbnRzIGFuIGFyZWEgb2YgMTI4IGJpdHMuCisvLyBTZWxlY3QgdGhlIGtleSBzdG9yZSBSQU0gYXJlYShzKSB3aGVyZSB0aGUga2V5KHMpIG5lZWRzIHRvIGJlIHdyaXR0ZW4uCisvLworLy8gV3JpdGluZyB0byBtdWx0aXBsZSBSQU0gbG9jYXRpb25zIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgc2VsZWN0ZWQgUkFNCisvLyBhcmVhcyBhcmUgc2VxdWVudGlhbC4KKy8vIEVOVU1zOgorLy8gU0VMICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgc2VsZWN0ZWQgdG8gYmUgd3JpdHRlbgorLy8gTk9UX1NFTCAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUExX05PVF9TRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gUkFNX0FSRUEwCisvLworLy8gUmVwcmVzZW50cyBhbiBhcmVhIG9mIDEyOCBiaXRzLgorLy8gU2VsZWN0IHRoZSBrZXkgc3RvcmUgUkFNIGFyZWEocykgd2hlcmUgdGhlIGtleShzKSBuZWVkcyB0byBiZSB3cml0dGVuLgorLy8KKy8vIFdyaXRpbmcgdG8gbXVsdGlwbGUgUkFNIGxvY2F0aW9ucyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIHNlbGVjdGVkIFJBTQorLy8gYXJlYXMgYXJlIHNlcXVlbnRpYWwuCisvLyBFTlVNczoKKy8vIFNFTCAgICAgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHNlbGVjdGVkIHRvIGJlIHdyaXR0ZW4KKy8vIE5PVF9TRUwgICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCBzZWxlY3RlZCB0byBiZSB3cml0dGVuCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19LRVlXUklURUFSRUFfUkFNX0FSRUEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRFQVJFQV9SQU1fQVJFQTBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVEVBUkVBX1JBTV9BUkVBMF9OT1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fS0VZV1JJVFRFTkFSRUEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBSQU1fQVJFQV9XUklUVEVONworLy8KKy8vIE9uIHJlYWQgdGhpcyBiaXQgcmV0dXJucyB0aGUga2V5IGFyZWEgd3JpdHRlbiBzdGF0dXMuCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIHJlc2V0IGJ5IHdyaXRpbmcgYSAxLgorLy8KKy8vIE5vdGU6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCBvbiBhIHNvZnQgcmVzZXQgaW5pdGlhdGVkIGJ5IHdyaXRpbmcgdG8KKy8vIERNQVNXUkVTRVQuUkVTRVQuIEFmdGVyIGEgc29mdCByZXNldCwgYWxsIGtleXMgbXVzdCBiZSByZXdyaXR0ZW4gdG8gdGhlIGtleQorLy8gc3RvcmUgbWVtb3J5LgorLy8gRU5VTXM6CisvLyBXUklUVEVOICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKy8vIE5PVF9XUklUVEVOICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU43ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVON19NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU43X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjdfV1JJVFRFTiAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVON19OT1RfV1JJVFRFTiAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gUkFNX0FSRUFfV1JJVFRFTjYKKy8vCisvLyBPbiByZWFkIHRoaXMgYml0IHJldHVybnMgdGhlIGtleSBhcmVhIHdyaXR0ZW4gc3RhdHVzLgorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSByZXNldCBieSB3cml0aW5nIGEgMS4KKy8vCisvLyBOb3RlOiBUaGlzIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQgb24gYSBzb2Z0IHJlc2V0IGluaXRpYXRlZCBieSB3cml0aW5nIHRvCisvLyBETUFTV1JFU0VULlJFU0VULiBBZnRlciBhIHNvZnQgcmVzZXQsIGFsbCBrZXlzIG11c3QgYmUgcmV3cml0dGVuIHRvIHRoZSBrZXkKKy8vIHN0b3JlIG1lbW9yeS4KKy8vIEVOVU1zOgorLy8gV1JJVFRFTiAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisvLyBOT1RfV1JJVFRFTiAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU42X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjZfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU42X1dSSVRURU4gICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjZfTk9UX1dSSVRURU4gICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFJBTV9BUkVBX1dSSVRURU41CisvLworLy8gT24gcmVhZCB0aGlzIGJpdCByZXR1cm5zIHRoZSBrZXkgYXJlYSB3cml0dGVuIHN0YXR1cy4KKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgcmVzZXQgYnkgd3JpdGluZyBhIDEuCisvLworLy8gTm90ZTogVGhpcyByZWdpc3RlciB3aWxsIGJlIHJlc2V0IG9uIGEgc29mdCByZXNldCBpbml0aWF0ZWQgYnkgd3JpdGluZyB0bworLy8gRE1BU1dSRVNFVC5SRVNFVC4gQWZ0ZXIgYSBzb2Z0IHJlc2V0LCBhbGwga2V5cyBtdXN0IGJlIHJld3JpdHRlbiB0byB0aGUga2V5CisvLyBzdG9yZSBtZW1vcnkuCisvLyBFTlVNczoKKy8vIFdSSVRURU4gICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorLy8gTk9UX1dSSVRURU4gICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU41X00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONV9XUklUVEVOICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU41X05PVF9XUklUVEVOICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBSQU1fQVJFQV9XUklUVEVONAorLy8KKy8vIE9uIHJlYWQgdGhpcyBiaXQgcmV0dXJucyB0aGUga2V5IGFyZWEgd3JpdHRlbiBzdGF0dXMuCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIHJlc2V0IGJ5IHdyaXRpbmcgYSAxLgorLy8KKy8vIE5vdGU6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCBvbiBhIHNvZnQgcmVzZXQgaW5pdGlhdGVkIGJ5IHdyaXRpbmcgdG8KKy8vIERNQVNXUkVTRVQuUkVTRVQuIEFmdGVyIGEgc29mdCByZXNldCwgYWxsIGtleXMgbXVzdCBiZSByZXdyaXR0ZW4gdG8gdGhlIGtleQorLy8gc3RvcmUgbWVtb3J5LgorLy8gRU5VTXM6CisvLyBXUklUVEVOICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKy8vIE5PVF9XUklUVEVOICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU40ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU40X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjRfV1JJVFRFTiAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVONF9OT1RfV1JJVFRFTiAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gUkFNX0FSRUFfV1JJVFRFTjMKKy8vCisvLyBPbiByZWFkIHRoaXMgYml0IHJldHVybnMgdGhlIGtleSBhcmVhIHdyaXR0ZW4gc3RhdHVzLgorLy8KKy8vIFRoaXMgYml0IGNhbiBiZSByZXNldCBieSB3cml0aW5nIGEgMS4KKy8vCisvLyBOb3RlOiBUaGlzIHJlZ2lzdGVyIHdpbGwgYmUgcmVzZXQgb24gYSBzb2Z0IHJlc2V0IGluaXRpYXRlZCBieSB3cml0aW5nIHRvCisvLyBETUFTV1JFU0VULlJFU0VULiBBZnRlciBhIHNvZnQgcmVzZXQsIGFsbCBrZXlzIG11c3QgYmUgcmV3cml0dGVuIHRvIHRoZSBrZXkKKy8vIHN0b3JlIG1lbW9yeS4KKy8vIEVOVU1zOgorLy8gV1JJVFRFTiAgICAgICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisvLyBOT1RfV1JJVFRFTiAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyBub3Qgd3JpdHRlbiB3aXRoIHZhbGlkIGtleQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjNfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4zX1dSSVRURU4gICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjNfTk9UX1dSSVRURU4gICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIFJBTV9BUkVBX1dSSVRURU4yCisvLworLy8gT24gcmVhZCB0aGlzIGJpdCByZXR1cm5zIHRoZSBrZXkgYXJlYSB3cml0dGVuIHN0YXR1cy4KKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgcmVzZXQgYnkgd3JpdGluZyBhIDEuCisvLworLy8gTm90ZTogVGhpcyByZWdpc3RlciB3aWxsIGJlIHJlc2V0IG9uIGEgc29mdCByZXNldCBpbml0aWF0ZWQgYnkgd3JpdGluZyB0bworLy8gRE1BU1dSRVNFVC5SRVNFVC4gQWZ0ZXIgYSBzb2Z0IHJlc2V0LCBhbGwga2V5cyBtdXN0IGJlIHJld3JpdHRlbiB0byB0aGUga2V5CisvLyBzdG9yZSBtZW1vcnkuCisvLyBFTlVNczoKKy8vIFdSSVRURU4gICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorLy8gTk9UX1dSSVRURU4gICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4yX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMl9XUklUVEVOICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4yX05PVF9XUklUVEVOICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBSQU1fQVJFQV9XUklUVEVOMQorLy8KKy8vIE9uIHJlYWQgdGhpcyBiaXQgcmV0dXJucyB0aGUga2V5IGFyZWEgd3JpdHRlbiBzdGF0dXMuCisvLworLy8gVGhpcyBiaXQgY2FuIGJlIHJlc2V0IGJ5IHdyaXRpbmcgYSAxLgorLy8KKy8vIE5vdGU6IFRoaXMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCBvbiBhIHNvZnQgcmVzZXQgaW5pdGlhdGVkIGJ5IHdyaXRpbmcgdG8KKy8vIERNQVNXUkVTRVQuUkVTRVQuIEFmdGVyIGEgc29mdCByZXNldCwgYWxsIGtleXMgbXVzdCBiZSByZXdyaXR0ZW4gdG8gdGhlIGtleQorLy8gc3RvcmUgbWVtb3J5LgorLy8gRU5VTXM6CisvLyBXUklUVEVOICAgICAgICAgICAgICAgICAgVGhpcyBSQU0gYXJlYSBpcyB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKy8vIE5PVF9XUklUVEVOICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIG5vdCB3cml0dGVuIHdpdGggdmFsaWQga2V5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4xICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjFfV1JJVFRFTiAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMV9OT1RfV1JJVFRFTiAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gUkFNX0FSRUFfV1JJVFRFTjAKKy8vCisvLyBPbiByZWFkIHRoaXMgYml0IHJldHVybnMgdGhlIGtleSBhcmVhIHdyaXR0ZW4gc3RhdHVzLgorLy8KKy8vCisvLyBUaGlzIGJpdCBjYW4gYmUgcmVzZXQgYnkgd3JpdGluZyBhIDEuCisvLworLy8gTm90ZTogVGhpcyByZWdpc3RlciB3aWxsIGJlIHJlc2V0IG9uIGEgc29mdCByZXNldCBpbml0aWF0ZWQgYnkgd3JpdGluZyB0bworLy8gRE1BU1dSRVNFVC5SRVNFVC4gQWZ0ZXIgYSBzb2Z0IHJlc2V0LCBhbGwga2V5cyBtdXN0IGJlIHJld3JpdHRlbiB0byB0aGUga2V5CisvLyBzdG9yZSBtZW1vcnkuCisvLyBFTlVNczoKKy8vIFdSSVRURU4gICAgICAgICAgICAgICAgICBUaGlzIFJBTSBhcmVhIGlzIHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorLy8gTk9UX1dSSVRURU4gICAgICAgICAgICAgIFRoaXMgUkFNIGFyZWEgaXMgbm90IHdyaXR0ZW4gd2l0aCB2YWxpZCBrZXkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4wX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fS0VZV1JJVFRFTkFSRUFfUkFNX0FSRUFfV1JJVFRFTjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19LRVlXUklUVEVOQVJFQV9SQU1fQVJFQV9XUklUVEVOMF9XUklUVEVOICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0tFWVdSSVRURU5BUkVBX1JBTV9BUkVBX1dSSVRURU4wX05PVF9XUklUVEVOICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0tFWVNJWkUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBTSVpFCisvLworLy8gS2V5IHNpemUKKy8vCisvLyBXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciwgS0VZV1JJVFRFTkFSRUEgd2lsbCBiZSByZXNldC4KKy8vCisvLyBOb3RlOiBGb3IgdGhlIENyeXB0byBwZXJpcGhlcmFsIHRoaXMgZmllbGQgaXMgZml4ZWQgdG8gMTI4IGJpdHMuIEZvcgorLy8gc29mdHdhcmUgY29tcGF0aWJpbGl0eSBLRVlXUklUVEVOQVJFQSB3aWxsICBiZSByZXNldCB3aGVuIHdyaXRpbmcgdG8gdGhpcworLy8gcmVnaXN0ZXIuCisvLyBFTlVNczoKKy8vIDI1Nl9CSVQgICAgICAgICAgICAgICAgICBOb3Qgc3VwcG9ydGVkCisvLyAxOTJfQklUICAgICAgICAgICAgICAgICAgTm90IHN1cHBvcnRlZAorLy8gMTI4X0JJVCAgICAgICAgICAgICAgICAgIDEyOCBiaXRzCisjZGVmaW5lIENSWVBUT19LRVlTSVpFX1NJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVNJWkVfU0laRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDUllQVE9fS0VZU0laRV9TSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19LRVlTSVpFX1NJWkVfMjU2X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQ1JZUFRPX0tFWVNJWkVfU0laRV8xOTJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fS0VZU0laRV9TSVpFXzEyOF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fS0VZUkVBREFSRUEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBCVVNZCisvLworLy8gS2V5IHN0b3JlIG9wZXJhdGlvbiBidXN5IHN0YXR1cyBmbGFnIChyZWFkIG9ubHkpCisvLworLy8gMDogb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4KKy8vIDE6IG9wZXJhdGlvbiBpcyBub3QgY29tcGxldGVkIGFuZCB0aGUga2V5IHN0b3JlIGlzIGJ1c3kuCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX0JVU1lfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfQlVTWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9CVVNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgWzM6MF0gUkFNX0FSRUEKKy8vCisvLyBTZWxlY3RzIHRoZSBhcmVhIG9mIHRoZSBrZXkgc3RvcmUgUkFNIGZyb20gd2hlcmUgdGhlIGtleSBuZWVkcyB0byBiZSByZWFkCisvLyB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgQUVTIGVuZ2luZS4KKy8vCisvLyBPbmx5IFJBTSBhcmVhcyB0aGF0IGNvbnRhaW4gdmFsaWQgd3JpdHRlbiBrZXlzIGNhbiBiZSBzZWxlY3RlZC4KKy8vIEVOVU1zOgorLy8gTk9fUkFNICAgICAgICAgICAgICAgICAgIE5vIFJBTQorLy8gUkFNX0FSRUE3ICAgICAgICAgICAgICAgIFJBTSBBcmVhIDcKKy8vIFJBTV9BUkVBNiAgICAgICAgICAgICAgICBSQU0gQXJlYSA2CisvLyBSQU1fQVJFQTUgICAgICAgICAgICAgICAgUkFNIEFyZWEgNQorLy8gUkFNX0FSRUE0ICAgICAgICAgICAgICAgIFJBTSBBcmVhIDQKKy8vIFJBTV9BUkVBMyAgICAgICAgICAgICAgICBSQU0gQXJlYSAzCisvLyBSQU1fQVJFQTIgICAgICAgICAgICAgICAgUkFNIEFyZWEgMgorLy8gUkFNX0FSRUExICAgICAgICAgICAgICAgIFJBTSBBcmVhIDEKKy8vIFJBTV9BUkVBMCAgICAgICAgICAgICAgICBSQU0gQXJlYSAwCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9OT19SQU0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1JBTV9BUkVBNyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfUkFNX0FSRUE2ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9SQU1fQVJFQTUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1JBTV9BUkVBNCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfUkFNX0FSRUEzICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIENSWVBUT19LRVlSRUFEQVJFQV9SQU1fQVJFQV9SQU1fQVJFQTIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0tFWVJFQURBUkVBX1JBTV9BUkVBX1JBTV9BUkVBMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fS0VZUkVBREFSRUFfUkFNX0FSRUFfUkFNX0FSRUEwICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkyCisvLworLy8gQUVTS0VZMi4qIGJpdHMgMzEreDowK3ggb3IgQUVTX0dIQVNIX0guKiBiaXRzIDMxK3g6MCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkyMF9LRVkyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIwX0tFWTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjBfS0VZMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkyCisvLworLy8gQUVTS0VZMi4qIGJpdHMgMzEreDowK3ggb3IgQUVTX0dIQVNIX0guKiBiaXRzIDMxK3g6MCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkyMV9LRVkyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIxX0tFWTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjFfS0VZMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkyCisvLworLy8gQUVTS0VZMi4qIGJpdHMgMzEreDowK3ggb3IgQUVTX0dIQVNIX0guKiBiaXRzIDMxK3g6MCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkyMl9LRVkyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIyX0tFWTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjJfS0VZMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMjMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkyCisvLworLy8gQUVTS0VZMi4qIGJpdHMgMzEreDowK3ggb3IgQUVTX0dIQVNIX0guKiBiaXRzIDMxK3g6MCt4LCB3aGVyZSB4ID0gMCwgMzIsIDY0LAorLy8gOTYgb3JkZXJlZCBmcm9tIHRoZSBMU1cgZW50cnkgb2YgdGhpcyA0LWRlZXAgcmVnaXN0ZXIgYXJyYXkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkyM19LRVkyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTIzX0tFWTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMjNfS0VZMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkzCisvLworLy8gQUVTS0VZMy4qIGJpdHMgMzEreDowK3ggb3IgQUVTS0VZMi4qIGJpdHMgMTU5K3g6MTI4K3gsIHdoZXJlIHggPSAwLCAzMiwgNjQsCisvLyA5NiBvcmRlcmVkIGZyb20gdGhlIExTVyBlbnRyeSBvZiB0aGlzIDQtZGVlcCByZWdpc3RlciBhcnJhcnkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkzMF9LRVkzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMwX0tFWTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzBfS0VZM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkzCisvLworLy8gQUVTS0VZMy4qIGJpdHMgMzEreDowK3ggb3IgQUVTS0VZMi4qIGJpdHMgMTU5K3g6MTI4K3gsIHdoZXJlIHggPSAwLCAzMiwgNjQsCisvLyA5NiBvcmRlcmVkIGZyb20gdGhlIExTVyBlbnRyeSBvZiB0aGlzIDQtZGVlcCByZWdpc3RlciBhcnJhcnkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkzMV9LRVkzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMxX0tFWTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzFfS0VZM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkzCisvLworLy8gQUVTS0VZMy4qIGJpdHMgMzEreDowK3ggb3IgQUVTS0VZMi4qIGJpdHMgMTU5K3g6MTI4K3gsIHdoZXJlIHggPSAwLCAzMiwgNjQsCisvLyA5NiBvcmRlcmVkIGZyb20gdGhlIExTVyBlbnRyeSBvZiB0aGlzIDQtZGVlcCByZWdpc3RlciBhcnJhcnkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkzMl9LRVkzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMyX0tFWTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzJfS0VZM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTS0VZMzMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBLRVkzCisvLworLy8gQUVTS0VZMy4qIGJpdHMgMzEreDowK3ggb3IgQUVTS0VZMi4qIGJpdHMgMTU5K3g6MTI4K3gsIHdoZXJlIHggPSAwLCAzMiwgNjQsCisvLyA5NiBvcmRlcmVkIGZyb20gdGhlIExTVyBlbnRyeSBvZiB0aGlzIDQtZGVlcCByZWdpc3RlciBhcnJhcnkuCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNLRVkzM19LRVkzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0tFWTMzX0tFWTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTS0VZMzNfS0VZM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTSVYwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gSVYKKy8vCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNJVjBfSVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWMF9JVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTSVYwX0lWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTSVYxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gSVYKKy8vCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNJVjFfSVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWMV9JVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTSVYxX0lWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTSVYyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gSVYKKy8vCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNJVjJfSVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWMl9JVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTSVYyX0lWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTSVYzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gSVYKKy8vCisvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBjcnlwdG8gb3BlcmF0aW9uIG1vZGUuCisjZGVmaW5lIENSWVBUT19BRVNJVjNfSVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0lWM19JVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTSVYzX0lWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gQ09OVEVYVF9SRFkKKy8vCisvLyBJZiAxLCB0aGlzIHN0YXR1cyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRleHQgZGF0YSByZWdpc3RlcnMgY2FuIGJlCisvLyBvdmVyd3JpdHRlbiBhbmQgdGhlIEhvc3QgaXMgcGVybWl0dGVkIHRvIHdyaXRlIHRoZSBuZXh0IGNvbnRleHQuICBXcml0aW5nIGEKKy8vIGNvbnRleHQgbWVhbnMgd3JpdGluZyBlaXRoZXIgYSBtb2RlLCB0aGUgY3J5cHRvIGxlbmd0aCBvcgorLy8gQUVTREFUQUxFTjEuTEVOX01TVywgQUVTREFUQUxFTjAuTEVOX0xTVyBsZW5ndGggcmVnaXN0ZXJzCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ09OVEVYVF9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DT05URVhUX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NPTlRFWFRfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ09OVEVYVF9SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gU0FWRURfQ09OVEVYVF9SRFkKKy8vCisvLyBJZiByZWFkIGFzIDEsIHRoaXMgc3RhdHVzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhbiBBRVMgYXV0aGVudGljYXRpb24gVEFHCisvLyBhbmQvb3IgSVYgYmxvY2socykgaXMvYXJlIGF2YWlsYWJsZSBmb3IgdGhlIEhvc3QgdG8gcmV0cmlldmUuIFRoaXMgYml0IGlzCisvLyBvbmx5IGFzc2VydGVkIGlmIFNBVkVfQ09OVEVYVCBpcyBzZXQgdG8gMS4gVGhlIGJpdCBpcyBtdXR1YWxseSBleGNsdXNpdmUKKy8vIHdpdGggQ09OVEVYVF9SRFkuCisvLworLy8gV3JpdGluZyAxIGNsZWFycyB0aGUgYml0IHRvIHplcm8sIGluZGljYXRpbmcgdGhlIENyeXB0byBwZXJpcGhlcmFsIGNhbiBzdGFydAorLy8gaXRzIG5leHQgb3BlcmF0aW9uLiBUaGlzIGJpdCBpcyBhbHNvIGNsZWFyZWQgd2hlbiB0aGUgNHRoIHdvcmQgb2YgdGhlIG91dHB1dAorLy8gVEFHIGFuZC9vciBJViBpcyByZWFkLgorLy8KKy8vIE5vdGU6IEFsbCBvdGhlciBtb2RlIGJpdCB3cml0ZXMgd2lsbCBiZSBpZ25vcmVkIHdoZW4gdGhpcyBtb2RlIGJpdCBpcworLy8gd3JpdHRlbiB3aXRoIDEuCisvLworLy8gTm90ZTogVGhpcyBiaXQgaXMgY29udHJvbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDcnlwdG8gcGVyaXBoZXJhbCBmb3IgVEFHCisvLyByZWFkIERNQSBvcGVyYXRpb25zLgorLy8KKy8vIEZvciB0eXBpY2FsIHVzZSwgdGhpcyBiaXQgZG9lcyBOT1QgbmVlZCB0byBiZSB3cml0dGVuLCBidXQgaXMgdXNlZCBmb3IKKy8vIHN0YXR1cyByZWFkaW5nIG9ubHkuIEluIHRoaXMgY2FzZSwgdGhpcyBzdGF0dXMgYml0IGlzIGF1dG9tYXRpY2FsbHkKKy8vIG1haW50YWluZWQgYnkgdGhlIENyeXB0byBwZXJpcGhlcmFsLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX1NBVkVEX0NPTlRFWFRfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfU0FWRURfQ09OVEVYVF9SRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9TQVZFRF9DT05URVhUX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX1NBVkVEX0NPTlRFWFRfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIFNBVkVfQ09OVEVYVAorLy8KKy8vIElWIG11c3QgYmUgcmVhZCBiZWZvcmUgdGhlIEFFUyBlbmdpbmUgY2FuIHN0YXJ0IGEgbmV3IG9wZXJhdGlvbi4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9TQVZFX0NPTlRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX1NBVkVfQ09OVEVYVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENSWVBUT19BRVNDVExfU0FWRV9DT05URVhUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9TQVZFX0NPTlRFWFRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI0OjIyXSBDQ01fTQorLy8KKy8vIERlZmluZXMgTSB0aGF0IGluZGljYXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmaWVsZCBmb3IgQ0NNCisvLyBvcGVyYXRpb25zOyB0aGUgYXV0aGVudGljYXRpb24gZmllbGQgbGVuZ3RoIGVxdWFscyB0d28gdGltZXMgdGhlIHZhbHVlIG9mCisvLyBDQ01fTSBwbHVzIG9uZS4KKy8vIE5vdGU6IFRoZSBDcnlwdG8gcGVyaXBoZXJhbCBhbHdheXMgcmV0dXJucyBhIDEyOC1iaXQgYXV0aGVudGljYXRpb24gZmllbGQsCisvLyBvZiB3aGljaCB0aGUgTSBsZWFzdCBzaWduaWZpY2FudCBieXRlcyBhcmUgdmFsaWQuIEFsbCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQ01fTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTV9NX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxQzAwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNX01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsyMToxOV0gQ0NNX0wKKy8vCisvLyBEZWZpbmVzIEwgdGhhdCBpbmRpY2F0ZXMgdGhlIHdpZHRoIG9mIHRoZSBsZW5ndGggZmllbGQgZm9yIENDTSBvcGVyYXRpb25zOworLy8gdGhlIGxlbmd0aCBmaWVsZCBpbiBieXRlcyBlcXVhbHMgdGhlIHZhbHVlIG9mIENNTV9MIHBsdXMgb25lLiBBbGwgdmFsdWVzIGFyZQorLy8gc3VwcG9ydGVkLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTV9MX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNX0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzODAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQ01fTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBDQ00KKy8vCisvLyBBRVMtQ0NNIG1vZGUgZW5hYmxlLgorLy8gQUVTLUNDTSBpcyBhIGNvbWJpbmVkIG1vZGUsIHVzaW5nIEFFUyBmb3IgYm90aCBhdXRoZW50aWNhdGlvbiBhbmQKKy8vIGVuY3J5cHRpb24uCisvLyBOb3RlOiBTZWxlY3RpbmcgQUVTLUNDTSBtb2RlIHJlcXVpcmVzIHdyaXRpbmcgb2YgQUVTREFUQUxFTjEuTEVOX01TVyBhbmQKKy8vIEFFU0RBVEFMRU4wLkxFTl9MU1cgIGFmdGVyIGFsbCBvdGhlciByZWdpc3RlcnMuCisvLyBOb3RlOiBUaGUgQ1RSIG1vZGUgYml0IGluIHRoaXMgcmVnaXN0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byAxIHRvIGVuYWJsZQorLy8gQUVTLUNUUjsgc2VsZWN0aW5nIG90aGVyIEFFUyBtb2RlcyB0aGFuIENUUiBtb2RlIGlzIGludmFsaWQuCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQ01fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NDTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0NNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxNV0gQ0JDX01BQworLy8KKy8vIE1BQyBtb2RlIGVuYWJsZS4KKy8vIFRoZSBESVIgYml0IG11c3QgYmUgc2V0IHRvIDEgZm9yIHRoaXMgbW9kZS4KKy8vIFNlbGVjdGluZyB0aGlzIG1vZGUgcmVxdWlyZXMgd3JpdGluZyB0aGUgQUVTREFUQUxFTjEuTEVOX01TVyBhbmQKKy8vIEFFU0RBVEFMRU4wLkxFTl9MU1cgcmVnaXN0ZXJzIGFmdGVyIGFsbCBvdGhlciByZWdpc3RlcnMuCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0JDX01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQkNfTUFDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NCQ19NQUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0JDX01BQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgWzg6N10gQ1RSX1dJRFRICisvLworLy8gU3BlY2lmaWVzIHRoZSBjb3VudGVyIHdpZHRoIGZvciBBRVMtQ1RSIG1vZGUKKy8vIEVOVU1zOgorLy8gMTI4X0JJVCAgICAgICAgICAgICAgICAgIDEyOCBiaXRzCisvLyA5Nl9CSVQgICAgICAgICAgICAgICAgICAgOTYgYml0cworLy8gNjRfQklUICAgICAgICAgICAgICAgICAgIDY0IGJpdHMKKy8vIDMyX0JJVCAgICAgICAgICAgICAgICAgICAzMiBiaXRzCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX1dJRFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFJfV0lEVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX1dJRFRIXzEyOF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFJfV0lEVEhfOTZfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9XSURUSF82NF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX1dJRFRIXzMyX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gQ1RSCisvLworLy8gQUVTLUNUUiBtb2RlIGVuYWJsZQorLy8gVGhpcyBiaXQgbXVzdCBhbHNvIGJlIHNldCBmb3IgQ0NNLCB3aGVuIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBpcyByZXF1aXJlZC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NUUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENSWVBUT19BRVNDVExfQ1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBDQkMKKy8vCisvLyBDQkMgbW9kZSBlbmFibGUKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0NCQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIENSWVBUT19BRVNDVExfQ0JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9DQkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDozXSBLRVlfU0laRQorLy8KKy8vIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSBrZXkgc2l6ZS4KKy8vIFRoZSBrZXkgc2l6ZSBpcyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgd2hlbiBhIG5ldyBrZXkgaXMgbG9hZGVkIHZpYSB0aGUKKy8vIGtleSBzdG9yZSBtb2R1bGUuCisvLyAwMCA9IE4vQSAtIHJlc2VydmVkCisvLyAwMSA9IDEyOCBiaXRzCisvLyAxMCA9IE4vQSAtIHJlc2VydmVkCisvLyAxMSA9IE4vQSAtIHJlc2VydmVkCisvLyBGb3IgdGhlIENyeXB0byBwZXJpcGhlcmFsIHRoaXMgZmllbGQgaXMgZml4ZWQgdG8gMTI4IGJpdHMuCisjZGVmaW5lIENSWVBUT19BRVNDVExfS0VZX1NJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9LRVlfU0laRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0tFWV9TSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERJUgorLy8KKy8vIERpcmVjdGlvbi4KKy8vIDAgOiBEZWNyeXB0IG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisvLyAxIDogRW5jcnlwdCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLgorLy8KKy8vIFRoaXMgYml0IG11c3QgYmUgd3JpdHRlbiB3aXRoIGEgMSB3aGVuIENCQy1NQUMgaXMgc2VsZWN0ZWQuCisjZGVmaW5lIENSWVBUT19BRVNDVExfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9ESVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0RJUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19BRVNDVExfRElSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gSU5QVVRfUkRZCisvLworLy8gSWYgcmVhZCBhcyAxLCB0aGlzIHN0YXR1cyBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIDE2LWJ5dGUgQUVTIGlucHV0IGJ1ZmZlciBpcworLy8gZW1wdHkuIFRoZSBIb3N0IGlzIHBlcm1pdHRlZCB0byB3cml0ZSB0aGUgbmV4dCBibG9jayBvZiBkYXRhLgorLy8KKy8vIFdyaXRpbmcgYSAwIGNsZWFycyB0aGUgYml0IHRvIHplcm8gYW5kIGluZGljYXRlcyB0aGF0IHRoZSBBRVMgZW5naW5lIGNhbiB1c2UKKy8vIHRoZSBwcm92aWRlZCBpbnB1dCBkYXRhIGJsb2NrLgorLy8KKy8vIFdyaXRpbmcgYSAxIHRvIHRoaXMgYml0IHdpbGwgYmUgaWdub3JlZC4KKy8vCisvLyBOb3RlOiBGb3IgRE1BIG9wZXJhdGlvbnMsIHRoaXMgYml0IGlzIGF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCBieSB0aGUgQ3J5cHRvCisvLyBwZXJpcGhlcmFsLgorLy8gQWZ0ZXIgcmVzZXQsIHRoaXMgYml0IGlzIDAuIEFmdGVyIHdyaXRpbmcgYSBjb250ZXh0IChub3RlIDEpLCB0aGlzIGJpdCB3aWxsCisvLyBiZWNvbWUgMS4KKy8vCisvLyBGb3IgdHlwaWNhbCB1c2UsIHRoaXMgYml0IGRvZXMgTk9UIG5lZWQgdG8gYmUgd3JpdHRlbiwgYnV0IGlzIHVzZWQgZm9yCisvLyBzdGF0dXMgcmVhZGluZyBvbmx5LiBJbiB0aGlzIGNhc2UsIHRoaXMgc3RhdHVzIGJpdCBpcyBhdXRvbWF0aWNhbGx5CisvLyBtYWludGFpbmVkIGJ5IHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9JTlBVVF9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX0lOUFVUX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19BRVNDVExfSU5QVVRfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9JTlBVVF9SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBPVVRQVVRfUkRZCisvLworLy8gSWYgcmVhZCBhcyAxLCB0aGlzIHN0YXR1cyBiaXQgaW5kaWNhdGVzIHRoYXQgYW4gQUVTIG91dHB1dCBibG9jayBpcworLy8gYXZhaWxhYmxlIHRvIGJlIHJldHJpZXZlZCBieSB0aGUgSG9zdC4KKy8vCisvLyBXcml0aW5nIGEgMCBjbGVhcnMgdGhlIGJpdCB0byB6ZXJvIGFuZCBpbmRpY2F0ZXMgdGhhdCBvdXRwdXQgZGF0YSBpcyByZWFkIGJ5CisvLyB0aGUgSG9zdC4gVGhlIEFFUyBlbmdpbmUgY2FuIHByb3ZpZGUgYSBuZXh0IG91dHB1dCBkYXRhIGJsb2NrLgorLy8KKy8vIFdyaXRpbmcgYSAxIHRvIHRoaXMgYml0IHdpbGwgYmUgaWdub3JlZC4KKy8vCisvLyBOb3RlOiBGb3IgRE1BIG9wZXJhdGlvbnMsIHRoaXMgYml0IGlzIGF1dG9tYXRpY2FsbHkgY29udHJvbGxlZCBieSB0aGUgQ3J5cHRvCisvLyBwZXJpcGhlcmFsLgorLy8KKy8vIEZvciB0eXBpY2FsIHVzZSwgdGhpcyBiaXQgZG9lcyBOT1QgbmVlZCB0byBiZSB3cml0dGVuLCBidXQgaXMgdXNlZCBmb3IKKy8vIHN0YXR1cyByZWFkaW5nIG9ubHkuIEluIHRoaXMgY2FzZSwgdGhpcyBzdGF0dXMgYml0IGlzIGF1dG9tYXRpY2FsbHkKKy8vIG1haW50YWluZWQgYnkgdGhlIENyeXB0byBwZXJpcGhlcmFsLgorI2RlZmluZSBDUllQVE9fQUVTQ1RMX09VVFBVVF9SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19BRVNDVExfT1VUUFVUX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0FFU0NUTF9PVVRQVVRfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fQUVTQ1RMX09VVFBVVF9SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQUxFTjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBMRU5fTFNXCisvLworLy8gVXNlZCB0byB3cml0ZSB0aGUgTGVuZ3RoIHZhbHVlcyB0byB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLworLy8gVGhpcyByZWdpc3RlciBjb250YWlucyBiaXRzIFszMTowXSBvZiB0aGUgY29tYmluZWQgZGF0YSBsZW5ndGguCisjZGVmaW5lIENSWVBUT19BRVNEQVRBTEVOMF9MRU5fTFNXX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFMRU4wX0xFTl9MU1dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQUxFTjBfTEVOX0xTV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQUxFTjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsyODowXSBMRU5fTVNXCisvLworLy8gQml0cyBbNjA6MzJdIG9mIHRoZSBjb21iaW5lZCBkYXRhIGxlbmd0aC4KKy8vCisvLyBCaXRzIFs2MDowXSBvZiB0aGUgY3J5cHRvIGxlbmd0aCByZWdpc3RlcnMgQUVTREFUQUxFTjEgYW5kIEFFU0RBVEFMRU4wIHN0b3JlCisvLyB0aGUgY3J5cHRvZ3JhcGhpYyBkYXRhIGxlbmd0aCBpbiBieXRlcyBmb3IgYWxsIG1vZGVzLiBPbmNlIHByb2Nlc3Npbmcgd2l0aAorLy8gdGhpcyBjb250ZXh0IGlzIHN0YXJ0ZWQsIHRoaXMgbGVuZ3RoIGRlY3JlbWVudHMgdG8gemVyby4gRGF0YSBsZW5ndGhzIHVwIHRvCisvLyAoMl42MSAtIDEpIGJ5dGVzIGFyZSBhbGxvd2VkLgorLy8gRm9yIEdDTSwgYW55IHZhbHVlIHVwIHRvIDJeMzYgLSAzMiBieXRlcyBjYW4gYmUgdXNlZC4gVGhpcyBpcyBiZWNhdXNlIGEKKy8vIDMyLWJpdCBjb3VudGVyIG1vZGUgaXMgdXNlZDsgdGhlIG1heGltdW0gbnVtYmVyIG9mIDEyOC1iaXQgYmxvY2tzIGlzIDJeMzIgLQorLy8gMiwgcmVzdWx0aW5nIGluIGEgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2YgMl4zNiAtIDMyLgorLy8gV3JpdGluZyB0byB0aGlzIHJlZ2lzdGVyIHRyaWdnZXJzIHRoZSBlbmdpbmUgdG8gc3RhcnQgdXNpbmcgdGhpcyBjb250ZXh0LgorLy8gVGhpcyBpcyB2YWxpZCBmb3IgYWxsIG1vZGVzIGV4Y2VwdCBHQ00gYW5kIENDTS4KKy8vIE5vdGU6IEZvciB0aGUgY29tYmluZWQgbW9kZXMgKEdDTSBhbmQgQ0NNKSwgdGhpcyBsZW5ndGggZG9lcyBub3QgaW5jbHVkZSB0aGUKKy8vIGF1dGhlbnRpY2F0aW9uIG9ubHkgZGF0YTsgdGhlIGF1dGhlbnRpY2F0aW9uIGxlbmd0aCBpcyBzcGVjaWZpZWQgaW4gdGhlCisvLyBBRVNBVVRITEVOLkxFTi4KKy8vIEFsbCBtb2RlcyBtdXN0IGhhdmUgYSBsZW5ndGggPiAwLiBGb3IgdGhlIGNvbWJpbmVkIG1vZGVzLCBpdCBpcyBhbGxvd2VkIHRvCisvLyBoYXZlIG9uZSBvZiB0aGUgbGVuZ3RocyBlcXVhbCB0byB6ZXJvLgorLy8gRm9yIHRoZSBiYXNpYyBlbmNyeXB0aW9uIG1vZGVzIChFQ0IvQ0JDL0NUUikgaXQgaXMgYWxsb3dlZCB0byBwcm9ncmFtIHplcm8KKy8vIHRvIHRoZSBsZW5ndGggZmllbGQ7IGluIHRoYXQgY2FzZSB0aGUgbGVuZ3RoIGlzIGFzc3VtZWQgaW5maW5pdGUuCisvLyBBbGwgZGF0YSBtdXN0IGJlIGJ5dGUgKDgtYml0KSBhbGlnbmVkIGZvciBzdHJlYW0gY2lwaGVyIG1vZGVzOyBiaXQgYWxpZ25lZAorLy8gZGF0YSBzdHJlYW1zIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4gRm9yIGJsb2NrIGNpcGhlcgorLy8gbW9kZXMsIHRoZSBkYXRhIGxlbmd0aCBtdXN0IGJlIHByb2dyYW1tZWQgaW4gbXVsdGlwbGVzIG9mIHRoZSBibG9jayBjaXBoZXIKKy8vIHNpemUsIDE2IGJ5dGVzLgorI2RlZmluZSBDUllQVE9fQUVTREFUQUxFTjFfTEVOX01TV19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENSWVBUT19BRVNEQVRBTEVOMV9MRU5fTVNXX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFMRU4xX0xFTl9NU1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0FVVEhMRU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBMRU4KKy8vCisvLyBBdXRoZW50aWNhdGlvbiBkYXRhIGxlbmd0aCBpbiBieXRlcyBmb3IgY29tYmluZWQgbW9kZSwgQ0NNIG9ubHkuCisvLyBTdXBwb3J0ZWQgQUFELWxlbmd0aHMgZm9yIENDTSBhcmUgZnJvbSAwIHRvICgyMTYgLSAyOCkgYnl0ZXMuIE9uY2UKKy8vIHByb2Nlc3Npbmcgd2l0aCB0aGlzIGNvbnRleHQgaXMgc3RhcnRlZCwgdGhpcyBsZW5ndGggZGVjcmVtZW50cyB0byB6ZXJvLgorLy8gV3JpdGluZyB0aGlzIHJlZ2lzdGVyIHRyaWdnZXJzIHRoZSBlbmdpbmUgdG8gc3RhcnQgdXNpbmcgdGhpcyBjb250ZXh0IGZvcgorLy8gQ0NNLgorI2RlZmluZSBDUllQVE9fQUVTQVVUSExFTl9MRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNBVVRITEVOX0xFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0FVVEhMRU5fTEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFPVVQwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gREFUQQorLy8KKy8vIERhdGEgcmVnaXN0ZXIgMCBmb3Igb3V0cHV0IGJsb2NrIGRhdGEgZnJvbSB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyBUaGVzZSBiaXRzID0gQUVTIE91dHB1dCBEYXRhWzMxOjBdIG9mIHsxMjc6MF0KKy8vCisvLyBGb3Igbm9ybWFsIG9wZXJhdGlvbnMsIHRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQsIHNpbmNlIGRhdGEgaW5wdXQgYW5kCisvLyBvdXRwdXQgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIEFFUyBlbmdpbmUgdmlhIERNQS4KKy8vCisvLyBGb3IgYSBIb3N0IHJlYWQgb3BlcmF0aW9uLCB0aGVzZSByZWdpc3RlcnMgY29udGFpbiB0aGUgMTI4LWJpdCBvdXRwdXQgYmxvY2sKKy8vIGZyb20gdGhlIGxhdGVzdCBBRVMgb3BlcmF0aW9uLiBSZWFkaW5nIGZyb20gYSB3b3JkLWFsaWduZWQgb2Zmc2V0IHdpdGhpbgorLy8gdGhpcyBhZGRyZXNzIHJhbmdlIHdpbGwgcmVhZCBvbmUgd29yZCAoNCBieXRlcykgb2YgZGF0YSBvdXQgdGhlIDQtd29yZCBkZWVwCisvLyAoMTYgYnl0ZXMgPSAxMjgtYml0cyBBRVMgYmxvY2spIGRhdGEgb3V0cHV0IGJ1ZmZlci4gVGhlIHdvcmRzICg0IHdvcmRzLCBvbmUKKy8vIGZ1bGwgYmxvY2spIHNob3VsZCBiZSByZWFkIGJlZm9yZSB0aGUgY29yZSB3aWxsIG1vdmUgdGhlIG5leHQgYmxvY2sgdG8gdGhlCisvLyBkYXRhIG91dHB1dCBidWZmZXIuIFRvIGVtcHR5IHRoZSBkYXRhIG91dHB1dCBidWZmZXIsIEFFU0NUTC5PVVRQVVRfUkRZIG11c3QKKy8vIGJlIHdyaXR0ZW4uCisvLyBGb3IgdGhlIG1vZGVzIHdpdGggYXV0aGVudGljYXRpb24gKENCQy1NQUMsIEdDTSBhbmQgQ0NNKSwgdGhlIGludmFsaWQKKy8vIChtZXNzYWdlKSBieXRlcy93b3JkcyBjYW4gYmUgd3JpdHRlbiB3aXRoIGFueSBkYXRhLgorLy8KKy8vIE5vdGU6IFRoZSBBQUQgLyBhdXRoZW50aWNhdGlvbiBvbmx5IGRhdGEgaXMgbm90IGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorLy8gYnV0IG9ubHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUMF9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQwX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDBfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQUlOMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBEYXRhIHJlZ2lzdGVycyBmb3IgaW5wdXQgYmxvY2sgZGF0YSB0byB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyBUaGVzZSBiaXRzID0gQUVTIElucHV0IERhdGFbMzE6MF0gIG9mIFsxMjc6MF0KKy8vCisvLyBGb3Igbm9ybWFsIG9wZXJhdGlvbnMsIHRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQsIHNpbmNlIGRhdGEgaW5wdXQgYW5kCisvLyBvdXRwdXQgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIEFFUyBlbmdpbmUgdmlhIERNQS4KKy8vCisvLyBGb3IgYSBIb3N0IHdyaXRlIG9wZXJhdGlvbiwgdGhlc2UgcmVnaXN0ZXJzIG11c3QgYmUgd3JpdHRlbiB3aXRoIHRoZSAxMjgtYml0CisvLyBpbnB1dCBibG9jayBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4gV3JpdGluZyBhdCBhIHdvcmQtYWxpZ25lZCBvZmZzZXQKKy8vIHdpdGhpbiB0aGlzIGFkZHJlc3MgcmFuZ2Ugd2lsbCBzdG9yZSB0aGUgd29yZCAoNCBieXRlcykgb2YgZGF0YSBpbnRvIHRoZQorLy8gY29ycmVzcG9uZGluZyBwb3NpdGlvbiBvZiA0LXdvcmQgZGVlcCAoMTYgYnl0ZXMgPSAxMjgtYml0IEFFUyBibG9jaykgZGF0YQorLy8gaW5wdXQgYnVmZmVyLiBUaGlzIGJ1ZmZlciBpcyB1c2VkIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLiBJZiB0aGUgbGFzdAorLy8gZGF0YSBibG9jayBpcyBub3QgY29tcGxldGVseSBmaWxsZWQgd2l0aCB2YWxpZCBkYXRhIChzZWUgbm90ZXMgYmVsb3cpLCBpdCBpcworLy8gYWxsb3dlZCB0byB3cml0ZSBvbmx5IHRoZSB3b3JkcyB3aXRoIHZhbGlkIGRhdGEuIE5leHQgQUVTIG9wZXJhdGlvbiBpcworLy8gdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgdG8gQUVTQ1RMLklOUFVUX1JEWS4KKy8vCisvLyBOb3RlOiBBRVMgdHlwaWNhbGx5IG9wZXJhdGVzIG9uIDEyOCBiaXRzIGJsb2NrIG11bHRpcGxlIGlucHV0IGRhdGEuIFRoZSBDVFIsCisvLyBHQ00gYW5kIENDTSBtb2RlcyBmb3JtIGFuIGV4Y2VwdGlvbi4gVGhlIGxhc3QgYmxvY2sgb2YgYSBDVFItbW9kZSBtZXNzYWdlCisvLyBtYXkgY29udGFpbiBsZXNzIHRoYW4gMTI4IGJpdHMgKHJlZmVyIHRvIFtOSVNUIDgwMC0zOEFdKTogMCA8IG4gPD0gMTI4IGJpdHMuCisvLyBGb3IgR0NNL0NDTSwgdGhlIGxhc3QgYmxvY2sgb2YgYm90aCBBQUQgYW5kIG1lc3NhZ2UgZGF0YSBtYXkgY29udGFpbiBsZXNzCisvLyB0aGFuIDEyOCBiaXRzIChyZWZlciB0byBbTklTVCA4MDAtMzhEXSkuIFRoZSBDcnlwdG8gcGVyaXBoZXJhbCBhdXRvbWF0aWNhbGx5CisvLyBwYWRzIG9yIG1hc2tzIG1pc2FsaWduZWQgZW5kaW5nIGRhdGEgYmxvY2tzIHdpdGggemVyb2VzIGZvciBHQ00sIENDTSBhbmQKKy8vIENCQy1NQUMuIEZvciBDVFIgbW9kZSwgdGhlIHJlbWFpbmluZyBkYXRhIGluIGFuIHVuYWxpZ25lZCBkYXRhIGJsb2NrIGlzCisvLyBpZ25vcmVkLgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOMF9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4wX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjBfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFPVVQxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gREFUQQorLy8KKy8vIERhdGEgcmVnaXN0ZXJzIGZvciBvdXRwdXQgYmxvY2sgZGF0YSBmcm9tIHRoZSBDcnlwdG8gcGVyaXBoZXJhbC4KKy8vIFRoZXNlIGJpdHMgPSBBRVMgT3V0cHV0IERhdGFbNjM6MzJdIG9mIFsxMjc6MF0KKy8vCisvLyBGb3Igbm9ybWFsIG9wZXJhdGlvbnMsIHRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQsIHNpbmNlIGRhdGEgaW5wdXQgYW5kCisvLyBvdXRwdXQgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIEFFUyBlbmdpbmUgdmlhIERNQS4KKy8vCisvLyBGb3IgYSBIb3N0IHJlYWQgb3BlcmF0aW9uLCB0aGVzZSByZWdpc3RlcnMgY29udGFpbiB0aGUgMTI4LWJpdCBvdXRwdXQgYmxvY2sKKy8vIGZyb20gdGhlIGxhdGVzdCBBRVMgb3BlcmF0aW9uLiBSZWFkaW5nIGZyb20gYSB3b3JkLWFsaWduZWQgb2Zmc2V0IHdpdGhpbgorLy8gdGhpcyBhZGRyZXNzIHJhbmdlIHdpbGwgcmVhZCBvbmUgd29yZCAoNCBieXRlcykgb2YgZGF0YSBvdXQgdGhlIDQtd29yZCBkZWVwCisvLyAoMTYgYnl0ZXMgPSAxMjgtYml0cyBBRVMgYmxvY2spIGRhdGEgb3V0cHV0IGJ1ZmZlci4gVGhlIHdvcmRzICg0IHdvcmRzLCBvbmUKKy8vIGZ1bGwgYmxvY2spIHNob3VsZCBiZSByZWFkIGJlZm9yZSB0aGUgY29yZSB3aWxsIG1vdmUgdGhlIG5leHQgYmxvY2sgdG8gdGhlCisvLyBkYXRhIG91dHB1dCBidWZmZXIuIFRvIGVtcHR5IHRoZSBkYXRhIG91dHB1dCBidWZmZXIsIEFFU0NUTC5PVVRQVVRfUkRZIG11c3QKKy8vIGJlIHdyaXR0ZW4uCisvLyBGb3IgdGhlIG1vZGVzIHdpdGggYXV0aGVudGljYXRpb24gKENCQy1NQUMsIEdDTSBhbmQgQ0NNKSwgdGhlIGludmFsaWQKKy8vIChtZXNzYWdlKSBieXRlcy93b3JkcyBjYW4gYmUgd3JpdHRlbiB3aXRoIGFueSBkYXRhLgorLy8KKy8vIE5vdGU6IFRoZSBBQUQgLyBhdXRoZW50aWNhdGlvbiBvbmx5IGRhdGEgaXMgbm90IGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorLy8gYnV0IG9ubHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUMV9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQxX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDFfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQUlOMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBEYXRhIHJlZ2lzdGVycyBmb3IgaW5wdXQgYmxvY2sgZGF0YSB0byB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyBUaGVzZSBiaXRzID0gQUVTIElucHV0IERhdGFbNjM6MzJdICBvZiBbMTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCB3cml0ZSBvcGVyYXRpb24sIHRoZXNlIHJlZ2lzdGVycyBtdXN0IGJlIHdyaXR0ZW4gd2l0aCB0aGUgMTI4LWJpdAorLy8gaW5wdXQgYmxvY2sgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uIFdyaXRpbmcgYXQgYSB3b3JkLWFsaWduZWQgb2Zmc2V0CisvLyB3aXRoaW4gdGhpcyBhZGRyZXNzIHJhbmdlIHdpbGwgc3RvcmUgdGhlIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgaW50byB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24gb2YgNC13b3JkIGRlZXAgKDE2IGJ5dGVzID0gMTI4LWJpdCBBRVMgYmxvY2spIGRhdGEKKy8vIGlucHV0IGJ1ZmZlci4gVGhpcyBidWZmZXIgaXMgdXNlZCBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4gSWYgdGhlIGxhc3QKKy8vIGRhdGEgYmxvY2sgaXMgbm90IGNvbXBsZXRlbHkgZmlsbGVkIHdpdGggdmFsaWQgZGF0YSAoc2VlIG5vdGVzIGJlbG93KSwgaXQgaXMKKy8vIGFsbG93ZWQgdG8gd3JpdGUgb25seSB0aGUgd29yZHMgd2l0aCB2YWxpZCBkYXRhLiBOZXh0IEFFUyBvcGVyYXRpb24gaXMKKy8vIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIEFFU0NUTC5JTlBVVF9SRFkuCisvLworLy8gTm90ZTogQUVTIHR5cGljYWxseSBvcGVyYXRlcyBvbiAxMjggYml0cyBibG9jayBtdWx0aXBsZSBpbnB1dCBkYXRhLiBUaGUgQ1RSLAorLy8gR0NNIGFuZCBDQ00gbW9kZXMgZm9ybSBhbiBleGNlcHRpb24uIFRoZSBsYXN0IGJsb2NrIG9mIGEgQ1RSLW1vZGUgbWVzc2FnZQorLy8gbWF5IGNvbnRhaW4gbGVzcyB0aGFuIDEyOCBiaXRzIChyZWZlciB0byBbTklTVCA4MDAtMzhBXSk6IDAgPCBuIDw9IDEyOCBiaXRzLgorLy8gRm9yIEdDTS9DQ00sIHRoZSBsYXN0IGJsb2NrIG9mIGJvdGggQUFEIGFuZCBtZXNzYWdlIGRhdGEgbWF5IGNvbnRhaW4gbGVzcworLy8gdGhhbiAxMjggYml0cyAocmVmZXIgdG8gW05JU1QgODAwLTM4RF0pLiBUaGUgQ3J5cHRvIHBlcmlwaGVyYWwgYXV0b21hdGljYWxseQorLy8gcGFkcyBvciBtYXNrcyBtaXNhbGlnbmVkIGVuZGluZyBkYXRhIGJsb2NrcyB3aXRoIHplcm9lcyBmb3IgR0NNLCBDQ00gYW5kCisvLyBDQkMtTUFDLiBGb3IgQ1RSIG1vZGUsIHRoZSByZW1haW5pbmcgZGF0YSBpbiBhbiB1bmFsaWduZWQgZGF0YSBibG9jayBpcworLy8gaWdub3JlZC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjFfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOMV9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4xX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNEQVRBT1VUMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBEYXRhIHJlZ2lzdGVycyBmb3Igb3V0cHV0IGJsb2NrIGRhdGEgZnJvbSB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyBUaGVzZSBiaXRzID0gQUVTIE91dHB1dCBEYXRhWzk1OjY0XSBvZiBbMTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCByZWFkIG9wZXJhdGlvbiwgdGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIDEyOC1iaXQgb3V0cHV0IGJsb2NrCisvLyBmcm9tIHRoZSBsYXRlc3QgQUVTIG9wZXJhdGlvbi4gUmVhZGluZyBmcm9tIGEgd29yZC1hbGlnbmVkIG9mZnNldCB3aXRoaW4KKy8vIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHJlYWQgb25lIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgb3V0IHRoZSA0LXdvcmQgZGVlcAorLy8gKDE2IGJ5dGVzID0gMTI4LWJpdHMgQUVTIGJsb2NrKSBkYXRhIG91dHB1dCBidWZmZXIuIFRoZSB3b3JkcyAoNCB3b3Jkcywgb25lCisvLyBmdWxsIGJsb2NrKSBzaG91bGQgYmUgcmVhZCBiZWZvcmUgdGhlIGNvcmUgd2lsbCBtb3ZlIHRoZSBuZXh0IGJsb2NrIHRvIHRoZQorLy8gZGF0YSBvdXRwdXQgYnVmZmVyLiBUbyBlbXB0eSB0aGUgZGF0YSBvdXRwdXQgYnVmZmVyLCBBRVNDVEwuT1VUUFVUX1JEWSBtdXN0CisvLyBiZSB3cml0dGVuLgorLy8gRm9yIHRoZSBtb2RlcyB3aXRoIGF1dGhlbnRpY2F0aW9uIChDQkMtTUFDLCBHQ00gYW5kIENDTSksIHRoZSBpbnZhbGlkCisvLyAobWVzc2FnZSkgYnl0ZXMvd29yZHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCBhbnkgZGF0YS4KKy8vCisvLyBOb3RlOiBUaGUgQUFEIC8gYXV0aGVudGljYXRpb24gb25seSBkYXRhIGlzIG5vdCBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIKKy8vIGJ1dCBvbmx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDJfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUMl9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQyX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU0RBVEFJTjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBEQVRBCisvLworLy8gRGF0YSByZWdpc3RlcnMgZm9yIGlucHV0IGJsb2NrIGRhdGEgdG8gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBJbnB1dCBEYXRhWzk1OjY0XSAgb2YgWzEyNzowXQorLy8KKy8vIEZvciBub3JtYWwgb3BlcmF0aW9ucywgdGhpcyByZWdpc3RlciBpcyBub3QgdXNlZCwgc2luY2UgZGF0YSBpbnB1dCBhbmQKKy8vIG91dHB1dCBpcyB0cmFuc2ZlcnJlZCBmcm9tIGFuZCB0byB0aGUgQUVTIGVuZ2luZSB2aWEgRE1BLgorLy8KKy8vIEZvciBhIEhvc3Qgd3JpdGUgb3BlcmF0aW9uLCB0aGVzZSByZWdpc3RlcnMgbXVzdCBiZSB3cml0dGVuIHdpdGggdGhlIDEyOC1iaXQKKy8vIGlucHV0IGJsb2NrIGZvciB0aGUgbmV4dCBBRVMgb3BlcmF0aW9uLiBXcml0aW5nIGF0IGEgd29yZC1hbGlnbmVkIG9mZnNldAorLy8gd2l0aGluIHRoaXMgYWRkcmVzcyByYW5nZSB3aWxsIHN0b3JlIHRoZSB3b3JkICg0IGJ5dGVzKSBvZiBkYXRhIGludG8gdGhlCisvLyBjb3JyZXNwb25kaW5nIHBvc2l0aW9uIG9mIDQtd29yZCBkZWVwICgxNiBieXRlcyA9IDEyOC1iaXQgQUVTIGJsb2NrKSBkYXRhCisvLyBpbnB1dCBidWZmZXIuIFRoaXMgYnVmZmVyIGlzIHVzZWQgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uIElmIHRoZSBsYXN0CisvLyBkYXRhIGJsb2NrIGlzIG5vdCBjb21wbGV0ZWx5IGZpbGxlZCB3aXRoIHZhbGlkIGRhdGEgKHNlZSBub3RlcyBiZWxvdyksIGl0IGlzCisvLyBhbGxvd2VkIHRvIHdyaXRlIG9ubHkgdGhlIHdvcmRzIHdpdGggdmFsaWQgZGF0YS4gTmV4dCBBRVMgb3BlcmF0aW9uIGlzCisvLyB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byBBRVNDVEwuSU5QVVRfUkRZLgorLy8KKy8vIE5vdGU6IEFFUyB0eXBpY2FsbHkgb3BlcmF0ZXMgb24gMTI4IGJpdHMgYmxvY2sgbXVsdGlwbGUgaW5wdXQgZGF0YS4gVGhlIENUUiwKKy8vIEdDTSBhbmQgQ0NNIG1vZGVzIGZvcm0gYW4gZXhjZXB0aW9uLiBUaGUgbGFzdCBibG9jayBvZiBhIENUUi1tb2RlIG1lc3NhZ2UKKy8vIG1heSBjb250YWluIGxlc3MgdGhhbiAxMjggYml0cyAocmVmZXIgdG8gW05JU1QgODAwLTM4QV0pOiAwIDwgbiA8PSAxMjggYml0cy4KKy8vIEZvciBHQ00vQ0NNLCB0aGUgbGFzdCBibG9jayBvZiBib3RoIEFBRCBhbmQgbWVzc2FnZSBkYXRhIG1heSBjb250YWluIGxlc3MKKy8vIHRoYW4gMTI4IGJpdHMgKHJlZmVyIHRvIFtOSVNUIDgwMC0zOERdKS4gVGhlIENyeXB0byBwZXJpcGhlcmFsIGF1dG9tYXRpY2FsbHkKKy8vIHBhZHMgb3IgbWFza3MgbWlzYWxpZ25lZCBlbmRpbmcgZGF0YSBibG9ja3Mgd2l0aCB6ZXJvZXMgZm9yIEdDTSwgQ0NNIGFuZAorLy8gQ0JDLU1BQy4gRm9yIENUUiBtb2RlLCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gYW4gdW5hbGlnbmVkIGRhdGEgYmxvY2sgaXMKKy8vIGlnbm9yZWQuCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4yX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjJfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOMl9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQU9VVDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBEQVRBCisvLworLy8gRGF0YSByZWdpc3RlcnMgZm9yIG91dHB1dCBibG9jayBkYXRhIGZyb20gdGhlIENyeXB0byBwZXJpcGhlcmFsLgorLy8gVGhlc2UgYml0cyA9IEFFUyBPdXRwdXQgRGF0YVsxMjc6OTZdIG9mIFsxMjc6MF0KKy8vCisvLyBGb3Igbm9ybWFsIG9wZXJhdGlvbnMsIHRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQsIHNpbmNlIGRhdGEgaW5wdXQgYW5kCisvLyBvdXRwdXQgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIEFFUyBlbmdpbmUgdmlhIERNQS4KKy8vCisvLyBGb3IgYSBIb3N0IHJlYWQgb3BlcmF0aW9uLCB0aGVzZSByZWdpc3RlcnMgY29udGFpbiB0aGUgMTI4LWJpdCBvdXRwdXQgYmxvY2sKKy8vIGZyb20gdGhlIGxhdGVzdCBBRVMgb3BlcmF0aW9uLiBSZWFkaW5nIGZyb20gYSB3b3JkLWFsaWduZWQgb2Zmc2V0IHdpdGhpbgorLy8gdGhpcyBhZGRyZXNzIHJhbmdlIHdpbGwgcmVhZCBvbmUgd29yZCAoNCBieXRlcykgb2YgZGF0YSBvdXQgdGhlIDQtd29yZCBkZWVwCisvLyAoMTYgYnl0ZXMgPSAxMjgtYml0cyBBRVMgYmxvY2spIGRhdGEgb3V0cHV0IGJ1ZmZlci4gVGhlIHdvcmRzICg0IHdvcmRzLCBvbmUKKy8vIGZ1bGwgYmxvY2spIHNob3VsZCBiZSByZWFkIGJlZm9yZSB0aGUgY29yZSB3aWxsIG1vdmUgdGhlIG5leHQgYmxvY2sgdG8gdGhlCisvLyBkYXRhIG91dHB1dCBidWZmZXIuIFRvIGVtcHR5IHRoZSBkYXRhIG91dHB1dCBidWZmZXIsIEFFU0NUTC5PVVRQVVRfUkRZIG11c3QKKy8vIGJlIHdyaXR0ZW4uCisvLyBGb3IgdGhlIG1vZGVzIHdpdGggYXV0aGVudGljYXRpb24gKENCQy1NQUMsIEdDTSBhbmQgQ0NNKSwgdGhlIGludmFsaWQKKy8vIChtZXNzYWdlKSBieXRlcy93b3JkcyBjYW4gYmUgd3JpdHRlbiB3aXRoIGFueSBkYXRhLgorLy8KKy8vIE5vdGU6IFRoZSBBQUQgLyBhdXRoZW50aWNhdGlvbiBvbmx5IGRhdGEgaXMgbm90IGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlcgorLy8gYnV0IG9ubHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uCisjZGVmaW5lIENSWVBUT19BRVNEQVRBT1VUM19EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFPVVQzX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTREFUQU9VVDNfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTREFUQUlOMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIERBVEEKKy8vCisvLyBEYXRhIHJlZ2lzdGVycyBmb3IgaW5wdXQgYmxvY2sgZGF0YSB0byB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwuCisvLyBUaGVzZSBiaXRzID0gQUVTIElucHV0IERhdGFbMTI3Ojk2XSBvZiBbMTI3OjBdCisvLworLy8gRm9yIG5vcm1hbCBvcGVyYXRpb25zLCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCB1c2VkLCBzaW5jZSBkYXRhIGlucHV0IGFuZAorLy8gb3V0cHV0IGlzIHRyYW5zZmVycmVkIGZyb20gYW5kIHRvIHRoZSBBRVMgZW5naW5lIHZpYSBETUEuCisvLworLy8gRm9yIGEgSG9zdCB3cml0ZSBvcGVyYXRpb24sIHRoZXNlIHJlZ2lzdGVycyBtdXN0IGJlIHdyaXR0ZW4gd2l0aCB0aGUgMTI4LWJpdAorLy8gaW5wdXQgYmxvY2sgZm9yIHRoZSBuZXh0IEFFUyBvcGVyYXRpb24uIFdyaXRpbmcgYXQgYSB3b3JkLWFsaWduZWQgb2Zmc2V0CisvLyB3aXRoaW4gdGhpcyBhZGRyZXNzIHJhbmdlIHdpbGwgc3RvcmUgdGhlIHdvcmQgKDQgYnl0ZXMpIG9mIGRhdGEgaW50byB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24gb2YgNC13b3JkIGRlZXAgKDE2IGJ5dGVzID0gMTI4LWJpdCBBRVMgYmxvY2spIGRhdGEKKy8vIGlucHV0IGJ1ZmZlci4gVGhpcyBidWZmZXIgaXMgdXNlZCBmb3IgdGhlIG5leHQgQUVTIG9wZXJhdGlvbi4gSWYgdGhlIGxhc3QKKy8vIGRhdGEgYmxvY2sgaXMgbm90IGNvbXBsZXRlbHkgZmlsbGVkIHdpdGggdmFsaWQgZGF0YSAoc2VlIG5vdGVzIGJlbG93KSwgaXQgaXMKKy8vIGFsbG93ZWQgdG8gd3JpdGUgb25seSB0aGUgd29yZHMgd2l0aCB2YWxpZCBkYXRhLiBOZXh0IEFFUyBvcGVyYXRpb24gaXMKKy8vIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIEFFU0NUTC5JTlBVVF9SRFkuCisvLworLy8gTm90ZTogQUVTIHR5cGljYWxseSBvcGVyYXRlcyBvbiAxMjggYml0cyBibG9jayBtdWx0aXBsZSBpbnB1dCBkYXRhLiBUaGUgQ1RSLAorLy8gR0NNIGFuZCBDQ00gbW9kZXMgZm9ybSBhbiBleGNlcHRpb24uIFRoZSBsYXN0IGJsb2NrIG9mIGEgQ1RSLW1vZGUgbWVzc2FnZQorLy8gbWF5IGNvbnRhaW4gbGVzcyB0aGFuIDEyOCBiaXRzIChyZWZlciB0byBbTklTVCA4MDAtMzhBXSk6IDAgPCBuIDw9IDEyOCBiaXRzLgorLy8gRm9yIEdDTS9DQ00sIHRoZSBsYXN0IGJsb2NrIG9mIGJvdGggQUFEIGFuZCBtZXNzYWdlIGRhdGEgbWF5IGNvbnRhaW4gbGVzcworLy8gdGhhbiAxMjggYml0cyAocmVmZXIgdG8gW05JU1QgODAwLTM4RF0pLiBUaGUgQ3J5cHRvIHBlcmlwaGVyYWwgYXV0b21hdGljYWxseQorLy8gcGFkcyBvciBtYXNrcyBtaXNhbGlnbmVkIGVuZGluZyBkYXRhIGJsb2NrcyB3aXRoIHplcm9lcyBmb3IgR0NNLCBDQ00gYW5kCisvLyBDQkMtTUFDLiBGb3IgQ1RSIG1vZGUsIHRoZSByZW1haW5pbmcgZGF0YSBpbiBhbiB1bmFsaWduZWQgZGF0YSBibG9jayBpcworLy8gaWdub3JlZC4KKyNkZWZpbmUgQ1JZUFRPX0FFU0RBVEFJTjNfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTREFUQUlOM19EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNEQVRBSU4zX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNUQUdPVVQwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVEFHCisvLworLy8gVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gVEFHIGZvciB0aGUgY29tYmluZWQgYW5kCisvLyBhdXRoZW50aWNhdGlvbi1vbmx5IG1vZGVzLgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUMF9UQUdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQwX1RBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDBfVEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FFU1RBR09VVDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQUcKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBUQUcgZm9yIHRoZSBjb21iaW5lZCBhbmQKKy8vIGF1dGhlbnRpY2F0aW9uLW9ubHkgbW9kZXMuCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQxX1RBR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDFfVEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUMV9UQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fQUVTVEFHT1VUMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRBRworLy8KKy8vIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIFRBRyBmb3IgdGhlIGNvbWJpbmVkIGFuZAorLy8gYXV0aGVudGljYXRpb24tb25seSBtb2Rlcy4KKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDJfVEFHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUMl9UQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQyX1RBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19BRVNUQUdPVVQzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVEFHCisvLworLy8gVGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gVEFHIGZvciB0aGUgY29tYmluZWQgYW5kCisvLyBhdXRoZW50aWNhdGlvbi1vbmx5IG1vZGVzLgorI2RlZmluZSBDUllQVE9fQUVTVEFHT1VUM19UQUdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENSWVBUT19BRVNUQUdPVVQzX1RBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgQ1JZUFRPX0FFU1RBR09VVDNfVEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0FMR1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIFRBRworLy8KKy8vIElmIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gMCwgdGhlIERNQSBvcGVyYXRpb24gaW52b2x2ZXMgb25seSBkYXRhLgorLy8gSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGUgRE1BIG9wZXJhdGlvbiBpbmNsdWRlcyBhIFRBRyAoQXV0aGVudGljYXRpb24gUmVzdWx0CisvLyAvIERpZ2VzdCkuCisjZGVmaW5lIENSWVBUT19BTEdTRUxfVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9UQUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUllQVE9fQUxHU0VMX1RBR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19BTEdTRUxfVEFHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgICBbMV0gQUVTCisvLworLy8gSWYgc2V0IHRvIDEsICB0aGUgQUVTIGRhdGEgaXMgbG9hZGVkIHZpYSBETUEKKy8vIEJvdGggUmVhZCBhbmQgV3JpdGUgbWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIERNQSBlbmdpbmUgaXMgc2V0IHRvIDE2IGJ5dGVzCisjZGVmaW5lIENSWVBUT19BTEdTRUxfQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9BRVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fQUxHU0VMX0FFU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19BTEdTRUxfQUVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gS0VZX1NUT1JFCisvLworLy8gSWYgc2V0IHRvIDEsIHNlbGVjdHMgdGhlIEtleSBTdG9yZSB0byBiZSBsb2FkZWQgdmlhIERNQS4KKy8vIFRoZSBtYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gRE1BIGVuZ2luZSBpcyBzZXQgdG8gMzIgYnl0ZXMgKGhvd2V2ZXIKKy8vIHRyYW5zZmVycyBvZiAxNiwgMjQgYW5kIDMyIGJ5dGVzIGFyZSBhbGxvd2VkKQorI2RlZmluZSBDUllQVE9fQUxHU0VMX0tFWV9TVE9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19BTEdTRUxfS0VZX1NUT1JFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0FMR1NFTF9LRVlfU1RPUkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fQUxHU0VMX0tFWV9TVE9SRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fRE1BUFJPVENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEVOCisvLworLy8gU2VsZWN0IEFIQiB0cmFuc2ZlciBwcm90ZWN0aW9uIGNvbnRyb2wgZm9yIERNQSB0cmFuc2ZlcnMgdXNpbmcgdGhlIGtleSBzdG9yZQorLy8gYXJlYSBhcyBkZXN0aW5hdGlvbi4KKy8vIDAgOiB0cmFuc2ZlcnMgdXNlICdVU0VSJyB0eXBlIGFjY2Vzcy4KKy8vIDEgOiB0cmFuc2ZlcnMgdXNlICdQUklWSUxFR0VEJyB0eXBlIGFjY2Vzcy4KKyNkZWZpbmUgQ1JZUFRPX0RNQVBST1RDVExfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fRE1BUFJPVENUTF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19ETUFQUk9UQ1RMX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0RNQVBST1RDVExfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX1NXUkVTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSRVNFVAorLy8KKy8vIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIHJlc2V0OgorLy8gLSBNYXN0ZXIgY29udHJvbCBpbnRlcm5hbCBzdGF0ZSBpcyByZXNldC4gVGhhdCBpbmNsdWRlcyBpbnRlcnJ1cHQsIGVycm9yCisvLyBzdGF0dXMgcmVnaXN0ZXIgYW5kIHJlc3VsdCBhdmFpbGFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gRlNNLgorLy8gLSBLZXkgc3RvcmUgbW9kdWxlIHN0YXRlIGlzIHJlc2V0LiBUaGF0IGluY2x1ZGVzIGNsZWFyaW5nIHRoZSBXcml0dGVuIEFyZWEKKy8vIGZsYWdzOyB0aGVyZWZvcmUgdGhlIGtleXMgbXVzdCBiZSByZWxvYWRlZCB0byB0aGUga2V5IHN0b3JlIG1vZHVsZS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorLy8gVGhlIGJpdCBpcyBzZWxmIGNsZWFyZWQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSByZXNldC4KKyNkZWZpbmUgQ1JZUFRPX1NXUkVTRVRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fU1dSRVNFVF9SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19TV1JFU0VUX1JFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX1NXUkVTRVRfUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0lSUVRZUEUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBJRU4KKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlLiBUaGlzIGJpdCBtdXN0IGJlIHNldCB0byAxIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gdGhlCisvLyBDcnlwdG8gcGVyaXBoZXJhbC4KKy8vIDAgOiBBbGwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgZW5hYmxlZC4KKy8vIDEgOiBBbGwgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKyNkZWZpbmUgQ1JZUFRPX0lSUVRZUEVfSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRVFlQRV9JRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19JUlFUWVBFX0lFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUVRZUEVfSUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0lSUUVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gRE1BX0lOX0RPTkUKKy8vCisvLyBUaGlzIGJpdCBlbmFibGVzIElSUVNUQVQuRE1BX0lOX0RPTkUgYXMgc291cmNlIGZvciBJUlEuCisjZGVmaW5lIENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUUVOX0RNQV9JTl9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDUllQVE9fSVJRRU5fRE1BX0lOX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENSWVBUT19JUlFFTl9ETUFfSU5fRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkVTVUxUX0FWQUlMCisvLworLy8gVGhpcyBiaXQgZW5hYmxlcyBJUlFTVEFULlJFU1VMVF9BVkFJTCBhcyBzb3VyY2UgZm9yIElSUS4KKyNkZWZpbmUgQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRRU5fUkVTVUxUX0FWQUlMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENSWVBUT19JUlFFTl9SRVNVTFRfQVZBSUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUUVOX1JFU1VMVF9BVkFJTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IENSWVBUT19PX0lSUUNMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERNQV9CVVNfRVJSCisvLworLy8gSWYgMSBpcyB3cml0dGVuIHRvIHRoaXMgYml0LCBJUlFTVEFULkRNQV9CVVNfRVJSIGlzIGNsZWFyZWQuCisjZGVmaW5lIENSWVBUT19JUlFDTFJfRE1BX0JVU19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9ETUFfQlVTX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0RNQV9CVVNfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFDTFJfRE1BX0JVU19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gS0VZX1NUX1dSX0VSUgorLy8KKy8vIElmIDEgaXMgd3JpdHRlbiB0byB0aGlzIGJpdCwgSVJRU1RBVC5LRVlfU1RfV1JfRVJSIGlzIGNsZWFyZWQuCisjZGVmaW5lIENSWVBUT19JUlFDTFJfS0VZX1NUX1dSX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9LRVlfU1RfV1JfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0tFWV9TVF9XUl9FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFDTFJfS0VZX1NUX1dSX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gS0VZX1NUX1JEX0VSUgorLy8KKy8vIElmIDEgaXMgd3JpdHRlbiB0byB0aGlzIGJpdCwgSVJRU1RBVC5LRVlfU1RfUkRfRVJSIGlzIGNsZWFyZWQuCisjZGVmaW5lIENSWVBUT19JUlFDTFJfS0VZX1NUX1JEX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9LRVlfU1RfUkRfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0tFWV9TVF9SRF9FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFDTFJfS0VZX1NUX1JEX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgICBbMV0gRE1BX0lOX0RPTkUKKy8vCisvLyBJZiAxIGlzIHdyaXR0ZW4gdG8gdGhpcyBiaXQsIElSUVNUQVQuRE1BX0lOX0RPTkUgaXMgY2xlYXJlZC4KKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fSVJRQ0xSX0RNQV9JTl9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19JUlFDTFJfRE1BX0lOX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9ETUFfSU5fRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRVNVTFRfQVZBSUwKKy8vCisvLyBJZiAxIGlzIHdyaXR0ZW4gdG8gdGhpcyBiaXQsIElSUVNUQVQuUkVTVUxUX0FWQUlMIGlzIGNsZWFyZWQuCisjZGVmaW5lIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JZUFRPX0lSUUNMUl9SRVNVTFRfQVZBSUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUllQVE9fSVJRQ0xSX1JFU1VMVF9BVkFJTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19JUlFDTFJfUkVTVUxUX0FWQUlMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBDUllQVE9fT19JUlFTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBETUFfSU5fRE9ORQorLy8KKy8vIElmIDEgaXMgd3JpdHRlbiB0byB0aGlzIGJpdCwgSVJRU1RBVC5ETUFfSU5fRE9ORSBpcyBzZXQuCisvLyBXcml0aW5nIDAgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgQ1JZUFRPX0lSUVNFVF9ETUFfSU5fRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fSVJRU0VUX0RNQV9JTl9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19JUlFTRVRfRE1BX0lOX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUVNFVF9ETUFfSU5fRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRVNVTFRfQVZBSUwKKy8vCisvLyBJZiAxIGlzIHdyaXR0ZW4gdG8gdGhpcyBiaXQsIElSUVNUQVQuUkVTVUxUX0FWQUlMIGlzIHNldC4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBDUllQVE9fSVJRU0VUX1JFU1VMVF9BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19JUlFTRVRfUkVTVUxUX0FWQUlMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNFVF9SRVNVTFRfQVZBSUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRU0VUX1JFU1VMVF9BVkFJTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fSVJRU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERNQV9CVVNfRVJSCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IHdoZW4gYSBETUEgYnVzIGVycm9yIGlzIGRldGVjdGVkIGR1cmluZyBhIERNQSBvcGVyYXRpb24uIFRoZQorLy8gdmFsdWUgb2YgdGhpcyByZWdpc3RlciBpcyBoZWxkIHVudGlsIGl0IGlzIGNsZWFyZWQgdmlhIElSUUNMUi5ETUFfQlVTX0VSUgorLy8gTm90ZTogVGhpcyBlcnJvciBpcyBhc3NlcnRlZCBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZCBvbiB0aGUgQUhCIG1hc3RlcgorLy8gaW50ZXJmYWNlIGR1cmluZyBhIERNQSBvcGVyYXRpb24uCisvLyBOb3RlOiBUaGlzIGlzIG5vdCBhbiBpbnRlcnJ1cHQgc291cmNlLgorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9ETUFfQlVTX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0RNQV9CVVNfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfRE1BX0JVU19FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9ETUFfQlVTX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIEtFWV9TVF9XUl9FUlIKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgd2hlbiBhIHdyaXRlIGVycm9yIGlzIGRldGVjdGVkIGR1cmluZyB0aGUgRE1BIHdyaXRlCisvLyBvcGVyYXRpb24gdG8gdGhlIGtleSBzdG9yZSBtZW1vcnkuIFRoZSB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIGlzIGhlbGQgdW50aWwKKy8vIGl0IGlzIGNsZWFyZWQgdmlhIElSUUNMUi5LRVlfU1RfV1JfRVJSCisvLyBOb3RlOiBUaGlzIGVycm9yIGlzIGFzc2VydGVkIGlmIGEgRE1BIG9wZXJhdGlvbiBkb2VzIG5vdCBjb3ZlciBhIGZ1bGwga2V5CisvLyBhcmVhIG9yIG1vcmUgYXJlYXMgYXJlIHdyaXR0ZW4gdGhhbiBleHBlY3RlZC4KKy8vIE5vdGU6IFRoaXMgaXMgbm90IGFuIGludGVycnVwdCBzb3VyY2UuCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0tFWV9TVF9XUl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfS0VZX1NUX1dSX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9LRVlfU1RfV1JfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0tFWV9TVF9XUl9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gS0VZX1NUX1JEX0VSUgorLy8KKy8vIFRoaXMgYml0IHdpbGwgYmUgc2V0IHdoZW4gYSByZWFkIGVycm9yIGlzIGRldGVjdGVkIGR1cmluZyB0aGUgcmVhZCBvZiBhIGtleQorLy8gZnJvbSB0aGUga2V5IHN0b3JlLCB3aGlsZSBjb3B5aW5nIGl0IHRvIHRoZSBBRVMgZW5naW5lLiBUaGUgdmFsdWUgb2YgdGhpcworLy8gcmVnaXN0ZXIgaXMgaGVsZCB1bnRpbCBpdCBpcyBjbGVhcmVkIHZpYSBJUlFDTFIuS0VZX1NUX1JEX0VSUi4KKy8vIE5vdGU6IFRoaXMgZXJyb3IgaXMgYXNzZXJ0ZWQgaWYgYSBrZXkgbG9jYXRpb24gaXMgc2VsZWN0ZWQgaW4gdGhlIGtleSBzdG9yZQorLy8gdGhhdCBpcyBub3QgYXZhaWxhYmxlLgorLy8gTm90ZTogVGhpcyBpcyBub3QgYW4gaW50ZXJydXB0IHNvdXJjZS4KKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfS0VZX1NUX1JEX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9LRVlfU1RfUkRfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0tFWV9TVF9SRF9FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfS0VZX1NUX1JEX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgIFsxXSBETUFfSU5fRE9ORQorLy8KKy8vIFRoaXMgYml0IHJldHVybnMgdGhlIHN0YXR1cyBvZiBETUEgZGF0YSBpbiBkb25lIGludGVycnVwdC4KKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9ETUFfSU5fRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX0RNQV9JTl9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfRE1BX0lOX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRVNVTFRfQVZBSUwKKy8vCisvLyBUaGlzIGJpdCBpcyBzZXQgaGlnaCB3aGVuIHRoZSBDcnlwdG8gcGVyaXBoZXJhbCBoYXMgYSByZXN1bHQgYXZhaWxhYmxlLgorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9SRVNVTFRfQVZBSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENSWVBUT19JUlFTVEFUX1JFU1VMVF9BVkFJTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1JZUFRPX0lSUVNUQVRfUkVTVUxUX0FWQUlMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUllQVE9fSVJRU1RBVF9SRVNVTFRfQVZBSUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogQ1JZUFRPX09fSFdWRVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjI0XSBIV19NQUpPUl9WRVIKKy8vCisvLyBNYWpvciB2ZXJzaW9uIG51bWJlcgorI2RlZmluZSBDUllQVE9fSFdWRVJfSFdfTUFKT1JfVkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19IV1ZFUl9IV19NQUpPUl9WRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX0hXX01BSk9SX1ZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIwXSBIV19NSU5PUl9WRVIKKy8vCisvLyBNaW5vciB2ZXJzaW9uIG51bWJlcgorI2RlZmluZSBDUllQVE9fSFdWRVJfSFdfTUlOT1JfVkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19IV1ZFUl9IV19NSU5PUl9WRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX0hXX01JTk9SX1ZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBIV19QQVRDSF9MVkwKKy8vCisvLyBQYXRjaCBsZXZlbCwgc3RhcnRzIGF0IDAgYXQgZmlyc3QgZGVsaXZlcnkgb2YgdGhpcyB2ZXJzaW9uLgorI2RlZmluZSBDUllQVE9fSFdWRVJfSFdfUEFUQ0hfTFZMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENSWVBUT19IV1ZFUl9IV19QQVRDSF9MVkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX0hXX1BBVENIX0xWTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBWRVJfTlVNX0NPTVBMCisvLworLy8gVGhlc2UgYml0cyBzaW1wbHkgY29udGFpbiB0aGUgY29tcGxlbWVudCBvZiBWRVJfTlVNICgweDg3KSwgdXNlZCBieSBhIGRyaXZlcgorLy8gdG8gYXNjZXJ0YWluIHRoYXQgdGhlIENyeXB0byBwZXJpcGhlcmFsIHJlZ2lzdGVyIGlzIGluZGVlZCByZWFkLgorI2RlZmluZSBDUllQVE9fSFdWRVJfVkVSX05VTV9DT01QTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIENSWVBUT19IV1ZFUl9WRVJfTlVNX0NPTVBMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX1ZFUl9OVU1fQ09NUExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBWRVJfTlVNCisvLworLy8gVGhlIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgQ3J5cHRvIHBlcmlwaGVyYWwsIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIHZhbHVlCisvLyAxMjAgKGRlY2ltYWwpIG9yIDB4NzguCisjZGVmaW5lIENSWVBUT19IV1ZFUl9WRVJfTlVNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1JZUFRPX0hXVkVSX1ZFUl9OVU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBDUllQVE9fSFdWRVJfVkVSX05VTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fQ1JZUFRPX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RkaS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZGRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1OTgxZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RkaS5oCkBAIC0wLDAgKzEsMTk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfZGRpLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA0LTIxIDEyOjE1OjU2ICswMjAwIChUaHUsIDIxIEFwciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2MTE2CisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfRERJX0hfXworI2RlZmluZSBfX0hXX0RESV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyBtYWNyb3MgZm9yIGNvbnRyb2xsaW5nIHRoZSBEREkgbWFzdGVyIGFuZAorLy8gYWNjZXNzaW5nIERESSBTbGF2ZSByZWdpc3RlcnMgdmlhIHRoZSBEREkgTWFzdGVyLgorLy8gVGhlcmUgYXJlIDMgY2F0ZWdvcmllcyBvZiBtYWNyb3MgaW4gdGhpcyBmaWxlOgorLy8gICAgICAgICAgICAgICAgIC0gbWFjcm9zIHRoYXQgcHJvdmlkZSBhbiBvZmZzZXQgdG8gYSByZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgbG9jYXRlZCB3aXRoaW4gdGhlIERESSBNYXN0ZXIgaXRzZWxmLgorLy8gICAgICAgICAgICAgICAgIC0gbWFjcm9zIHRoYXQgZGVmaW5lIGJpdHMgb3IgYml0ZmllbGRzCisvLyAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIERESSBNYXN0ZXIgUmVnaXN0ZXJzLgorLy8gICAgICAgICAgICAgICAgIC0gbWFjcm9zIHRoYXQgcHJvdmlkZSBhbiAiaW5zdHJ1Y3Rpb24gb2Zmc2V0IgorLy8gICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBhIERESSBTbGF2ZS4KKy8vCisvLyBUaGUgbWFjcm9zIHRoYXQgdGhhdCBwcm92aWRlIERESSBNYXN0ZXIgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQKKy8vIGRlZmluZSBiaXRzIGFuZCBiaXRmaWVsZHMgZm9yIHRob3NlIHJlZ2lzdGVycyBhcmUgdGhlIHR5cGljYWwKKy8vIG1hY3JvcyB0aGF0IGFwcGVhciBpbiBtb3N0IGh3Xzxtb2R1bGU+LmggaGVhZGVyIGZpbGVzLiAgSW4KKy8vIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBERElfT19DRkcgaXMgYSBtYWNybyBmb3IgYQorLy8gcmVnaXN0ZXIgb2Zmc2V0IGFuZCBERElfQ0ZHX1dBSVRGT1JBQ0sgaXMgYSBtYWNybyBmb3IKKy8vIGEgYml0IGluIHRoYXQgcmVnaXN0ZXIuIFRoaXMgZXhhbXBsZSBjb2RlIHdpbGwgc2V0IHRoZSBXQUlURk9SQUNLCisvLyBiaXQgaW4gcmVnaXN0ZXIgRERJX09fQ0ZHIG9mIHRoZSBEREkgTWFzdGVyLiAoTm90ZTogdGhpcworLy8gYWNjZXNzIHRoZSBNYXN0ZXIgbm90IHRoZSBTbGF2ZSkuCisvLworLy8gICAgSFdSRUcoQVVYX09TQ0RESV9CQVNFICsgRERJX09fQ0ZHKSB8PSBERElfQ0ZHX1dBSVRGT1JBQ0s7CisvLworLy8KKy8vIFRoZSAiaW5zdHJ1Y3Rpb24gb2Zmc2V0IiBtYWNyb3MgYXJlIHVzZWQgdG8gcGFzcyBhbiBpbnN0cnVjdGlvbiB0bworLy8gdGhlIERESSBNYXN0ZXIgd2hlbiBhY2Nlc3NpbmcgRERJIHNsYXZlIHJlZ2lzdGVycy4gVGhlc2UgbWFjcm9zIGFyZQorLy8gb25seSB1c2VkIHdoZW4gYWNjZXNzaW5nIERESSBTbGF2ZSBSZWdpc3RlcnMuIChSZW1lbWJlciBEREkKKy8vIE1hc3RlciBSZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIG5vcm1hbGx5KS4KKy8vCisvLyBUaGUgaW5zdHJ1Y3Rpb25zIHN1cHBvcnRlZCB3aGVuIGFjY2Vzc2luZyBhIERESSBTbGF2ZSBSZWdzaXRlciBmb2xsb3c6CisvLyAgICAgICAgLSBEaXJlY3QgQWNjZXNzIHRvIGEgRERJIFNsYXZlIHJlZ2lzdGVyLiBJLmUuIHJlYWQgb3IKKy8vICAgICAgICAgIHdyaXRlIHRoZSByZWdpc3Rlci4KKy8vICAgICAgICAtIFNldCB0aGUgc3BlY2lmaWVkIGJpdHMgaW4gYSBEREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBDbGVhciB0aGUgc3BlY2lmaWVkIGJpdHMgaW4gYSBEREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBNYXNrIHdyaXRlIG9mIDQgYml0cyB0byB0aGUgYSBEREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBNYXNrIHdyaXRlIG9mIDggYml0cyB0byB0aGUgYSBEREkgU2xhdmUgcmVnaXN0ZXIuCisvLyAgICAgICAgLSBNYXNrIHdyaXRlIG9mIDE2IGJpdHMgdG8gdGhlIGEgRERJIFNsYXZlIHJlZ2lzdGVyLgorLy8KKy8vIE5vdGU6IG9ubHkgdGhlICJEaXJlY3QgQWNjZXNzIiBvZmZzZXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZWFkaW5nCisvLyBhIERESSBTbGF2ZSByZWdpc3Rlci4gT25seSA4LSBhbmQgMTYtYml0IHJlYWRzIGFyZSBzdXBwb3J0ZWQuCisvLworLy8gVGhlIGdlbmVyaWMgZm9ybWF0IG9mIHVzaW5nIHRoaXMgbWFyY29zIGZvciBhIHJlYWQgZm9sbG93czoKKy8vICAgICAgIC8vIHJlYWQgbG93IDE2LWJpdHMgaW4gRERJX1NMQVZFX09GRgorLy8gICAgICAgbXl1c2hvcnR2YXIgPSBIV1JFR0goRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX0RJUik7CisvLworLy8gICAgICAgLy8gcmVhZCBoaWdoIDE2LWJpdHMgaW4gRERJX1NMQVZFX09GRgorLy8gICAgICAgLy8gYWRkIDIgZm9yIGRhdGFbMzE6MTZdCisvLyAgICAgICBteXVzaG9ydHZhciA9IEhXUkVHSChERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgMiArIERESV9PX0RJUik7CisKKy8vICAgICAgIC8vIHJlYWQgZGF0YVszMToyNF0gYnl0ZSBpbiBERElfU0xBVkVfT0ZGCisvLyAgICAgICAvLyBhZGQgMyBmb3IgZGF0YVszMToyNF0KKy8vICAgICAgIG15dWNoYXIgPSBIV1JFR0IoRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIDMgKyBERElfT19ESVIpOworLy8KKy8vIE5vdGVzOiBJbiB0aGUgYWJvdmUgZXhhbXBsZToKKy8vICAgICAtIERESV9NQVNURVJfQkFTRSBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBEREkgTWFzdGVyIGRlZmluZWQKKy8vICAgICAgIGluIHRoZSBod19tZW1tYXAuaCBoZWFkZXIgZmlsZS4KKy8vICAgICAtIERESV9TTEFWRV9PRkYgaXMgdGhlIERESSBTbGF2ZSBvZmZzZXQgZGVmaW5lZCBpbiB0aGUKKy8vICAgICAgIGh3XzxkZGlfc2xhdmU+LmggaGVhZGVyIGZpbGUgKGUuZy4gaHdfb3NjX3RvcC5oIGZvciB0aGUgb3Njc2MKKy8vICAgICAgIG9zY2lsbGF0b3IgbW9kdWxlcy4KKy8vICAgICAtIERESV9PX0RJUiBpcyB0aGUgImluc3RydWN0aW9uIG9mZnNldCIgbWFjcm8gZGVmaW5lZCBpbiB0aGlzCisvLyAgICAgICBmaWxlIHRoYXQgc3BlY2lmaWVzIHRoZSBEaXJlY3QgQWNjZXNzIGluc3RydWN0aW9uLgorLy8KKy8vIFdyaXRlcyBjYW4gdXNlIGFueSBvZiB0aGUgImluc3RydWN0aW9uIG1hY3JvcyIuCisvLyBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGRvIGEgImRpcmVjdCB3cml0ZSIgdG8gRERJIFNsYXZlIHJlZ2lzdGVyCisvLyBERElfU0xBVkVfT0ZGIHVzaW5nIGRpZmZlcmVudCBzaXplIG9wZXJhbmRzOgorLy8KKy8vICAgICAvLyAtLS0tLS0tLS0tIERJUkVDVCBXUklURVMgLS0tLS0tLS0tLQorLy8gICAgIC8vIFdyaXRlIDMyLWJpdHMgYWxpZ25lZAorLy8gICAgIEhXUkVHKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIpID0gMHgxMjM0NTY3ODsKKworLy8gICAgIC8vIFdyaXRlIDE2LWJpdHMgYWxpZ25lZCB0byBoaWdoIDE2LWJpdHMgdGhlbiBsb3cgMTYtYml0cworLy8gICAgIC8vIEFkZCAyIHRvIGdldCB0byBoaWdoIDE2LWJpdHMuCisvLyAgICAgSFdSRUdIKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIgKyAyKSA9IDB4YWJjZDsKKy8vICAgICBIV1JFR0goRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX0RJUikgPSAweGVmMDE7CisvLworLy8gICAgIC8vIFdyaXRlIGVhY2ggYnl0ZSBhdCBERElfU0xBVkVfT0ZGLCBvbmUgYXQgYSB0aW1lLgorLy8gICAgIC8vIEFkZCAxLDIsb3IgMyB0byBnZXQgdG8gYnl0ZXMgMSwyLCBvciAzLgorLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fRElSKSA9IDB4MzM7CisvLyAgICAgSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIgKyAxKSA9IDB4NDQ7CisvLyAgICAgSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIgKyAyKSA9IDB4NTU7CisvLyAgICAgSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19ESVIgKyAzKSA9IDB4NjY7CisvLworLy8gICAgIC8vIC0tLS0tLS0tLS0gU0VUL0NMUiAtLS0tLS0tLS0tCisvLyAgICAgVGhlIHNldCBhbmQgY2xlYXIgZnVuY3Rpb25zIGJlaGF2ZSBzaW1pbGFybHkgdG8gZWFjaG90aGVyLiBFYWNoCisvLyAgICAgY2FuIGJlIHBlcmZvcm1lZCBvbiBhbiA4LSwgMTYtLCBvciAzMi1iaXQgb3BlcmFuZC4KKy8vICAgICBFeGFtcGxlcyBmb2xsb3c6CisvLyAgICAgLy8gU2V0IGFsbCBvZGQgYml0cyBpbiBhIDMyLWJpdCB3b3JkcworLy8gICAgIEhXUkVHKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19TRVQpID0gMHhhYWFhYWFhYTsKKy8vCisvLyAgICAgLy8gQ2xlYXIgYWxsIGJpdHMgaW4gYnl0ZSAyIChkYXRhWzIzOjE2XSkgdXNpbmcgMzItYml0IG9wZXJhbmQKKy8vICAgICBIV1JFRyhERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICsgRERJX09fQ0xSKSA9IDB4MDBmZjAwMDA7CisvLworLy8gICAgIC8vIFNldCBldmVuIGJpdHMgaW4gYnl0ZSAyIChkYXRhWzIzOjE2XSkgdXNpbmcgOC1iaXQgb3BlcmFuZAorLy8gICAgIEhXUkVHQihERElfTUFTVEVSX0JBU0UgKyBERElfU0xBVkVfT0ZGICArIDIgKyBERElfT19DTFIpID0gMHg1NTsKKy8vCisvLyAgICAgLy8gLS0tLS0tLS0tLSBNQVNLRUQgV1JJVEVTIC0tLS0tLS0tLS0KKy8vICAgICBUaGUgbWFzayB3cml0ZXMgYXJlIGEgYml0IGRpZmZlcmVudC4gVGhleSBvcGVyYXRlIG9uIG5pYmJsZXMsCisvLyAgICAgYnl0ZXMsIGFuZCAxNi1iaXQgZWxlbWVudHMuIFR3byBvcGVyYW5kcyBhcmUgcmVxdWlyZWQ7IGEgJ21hc2snCisvLyAgICAgYW5kICdkYXRhJzsgVGhlIG9wZXJhbmRzIGFyZSBjb25jYXRlbmF0ZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIG1hc3Rlci4KKy8vICAgICBlLmcuIHRoZSBtYXNrIGFuZCBkYXRhIGFyZSBjb21iaW5lZCBhcyBmb2xsb3dzIGZvciBhIDE2IGJpdCBtYXNrZWQKKy8vICAgICB3cml0ZToKKy8vICAgICAgICAgICAobWFzayA8PCAxNikgfCBkYXRhOworLy8gICAgIEV4YW1wbGVzIGZvbGxvdzoKKy8vCisvLyAgICAgLy8gV3JpdGUgNTU1NSB0byBsb3cgMTYtYml0cyBvZiBERElfU0xBVkVfT0ZGIHJlZ2lzdGVyCisvLyAgICAgLy8gYSBsb25nIHdyaXRlIGlzIG5lZWRlZCAoMzItYml0cykuCisvLyAgICAgSFdSRUcoRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX01BU0sxNkIpID0gMHhmZmZmNTU1NTsKKworLy8gICAgIC8vIFdyaXRlIDFBQSB0byBkYXRhIGJpdHMgMjQ6MTYgaW4gaGlnaCAxNi1iaXRzIG9mIERESV9TTEFWRV9PRkYgcmVnaXN0ZXIKKy8vICAgICAvLyBOb3RlIGFkZCA0IGZvciBoaWdoIDE2LWJpdHMgYXQgRERJX1NMQVZFX09GRjsgbWFzayBpcyAxZmYhCisvLyAgICAgSFdSRUcoRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX01BU0sxNkIgKyA0KSA9IDB4MDFmZjAxYWE7CisvLworLy8gICAgIC8vIERvIGFuIDggYml0IG1hc2tlZCB3cml0ZSBvZiAwMCB0byBsb3cgYnl0ZSBvZiByZWdpc3RlciAoZGF0YVs3OjBdKS4KKy8vICAgICAvLyBhIHNob3J0IHdyaXRlIGlzIG5lZWRlZCAoMTYtYml0cykuCisvLyAgICAgSFdSRUdIKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCKSA9IDB4ZmYwMDsKKy8vCisvLyAgICAgLy8gRG8gYW4gOCBiaXQgbWFza2VkIHdyaXRlIG9mIDExIHRvIGJ5dGUgMSBvZiByZWdpc3RlciAoZGF0YVsxNTo4XSkuCisvLyAgICAgLy8gYWRkIDIgdG8gZ2V0IHRvIGJ5dGUgMS4KKy8vICAgICBIV1JFR0goRERJX01BU1RFUl9CQVNFICsgRERJX1NMQVZFX09GRiArIERESV9PX01BU0sxNkIgKyAyKSA9IDB4ZmYxMTsKKy8vCisvLyAgICAgLy8gRG8gYW4gOCBiaXQgbWFza2VkIHdyaXRlIG9mIDMzIHRvIGhpZ2ggYnl0ZSBvZiByZWdpc3RlciAoZGF0YVszMToyNF0pLgorLy8gICAgIC8vIGFkZCA2IHRvIGdldCB0byBieXRlIDMuCisvLyAgICAgSFdSRUdIKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCICsgNikgPSAweGZmMzM7CisvLworLy8gICAgIC8vIERvIGFuIDQgYml0IG1hc2tlZCB3cml0ZSAoTmliYmxlKSBvZiA3IHRvIGRhdGFbMzowXSkuCisvLyAgICAgLy8gQnl0ZSB3cml0ZSBpcyBuZWVkZWQuCisvLyAgICAgSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCKSA9IDB4Zjc7CisvLworLy8gICAgIC8vIERvIGFuIDQgYml0IG1hc2tlZCB3cml0ZSBvZiA0IHRvIGRhdGFbNzo0XSkuCisvLyAgICAgLy8gQWRkIDEgZm9yIG5leHQgbmliYmxlCisvLyAgICAgSFdSRUdCKERESV9NQVNURVJfQkFTRSArIERESV9TTEFWRV9PRkYgKyBERElfT19NQVNLMTZCICsgMSkgPSAweGY0OworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBEREkgbWFzdGVyIGluc3RydWN0aW9uIG9mZnNldHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBERElfT19ESVIgICAgICAgICAgICAgMHgwMDAwMDAwMCAgLy8gT2Zmc2V0IGZvciB0aGUgZGlyZWN0IGFjY2VzcyBpbnN0cnVjdGlvbgorI2RlZmluZSBERElfT19TRVQgICAgICAgICAgICAgMHgwMDAwMDA0MCAgLy8gT2Zmc2V0IGZvciAnU2V0JyBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgRERJX09fQ0xSICAgICAgICAgICAgIDB4MDAwMDAwODAgIC8vIE9mZnNldCBmb3IgJ0NsZWFyJyBpbnN0cnVjdGlvbi4KKyNkZWZpbmUgRERJX09fTUFTSzRCICAgICAgICAgIDB4MDAwMDAxMDAgIC8vIE9mZnNldCBmb3IgNC1iaXQgbWFza2VkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgYml0W25dIGlzIHdyaXR0ZW4gaWYgbWFzayBiaXRbbl0gaXMgc2V0ICgnMScpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0cyA3OjQgYXJlIG1hc2suIEJpdHMgMzowIGFyZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWlyZXMgJ2J5dGUnIHdyaXRlLgorI2RlZmluZSBERElfT19NQVNLOEIgICAgICAgICAgMHgwMDAwMDE4MCAgLy8gT2Zmc2V0IGZvciA4LWJpdCBtYXNrZWQgYWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBiaXRbbl0gaXMgd3JpdHRlbiBpZiBtYXNrIGJpdFtuXSBpcyBzZXQgKCcxJykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXRzIDE1OjggYXJlIG1hc2suIEJpdHMgNzowIGFyZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWlyZXMgJ3Nob3J0JyB3cml0ZS4KKyNkZWZpbmUgRERJX09fTUFTSzE2QiAgICAgICAgIDB4MDAwMDAyMDAgIC8vIE9mZnNldCBmb3IgMTYtYml0IG1hc2tlZCBhY2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIGJpdFtuXSBpcyB3cml0dGVuIGlmIG1hc2sgYml0W25dIGlzIHNldCAoJzEnKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdHMgMzE6MTYgYXJlIG1hc2suIEJpdHMgMTU6MCBhcmUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVpcmVzICdsb25nJyB3cml0ZS4KKworCisKKyNlbmRpZiAvLyBfX0hXX0RESV9IX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RkaV8wX29zYy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZGRpXzBfb3NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhZGRjOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RkaV8wX29zYy5oCkBAIC0wLDAgKzEsMTA2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2RkaV8wX29zY19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wNS0wMyAwOTo1MTo1MyArMDIwMCAoVHVlLCAwMyBNYXkgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NjIzOQorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19ERElfMF9PU0NfSF9fCisjZGVmaW5lIF9fSFdfRERJXzBfT1NDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIERESV8wX09TQyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb250cm9sIDAKKyNkZWZpbmUgRERJXzBfT1NDX09fQ1RMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBDb250cm9sIDEKKyNkZWZpbmUgRERJXzBfT1NDX09fQ1RMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBSQURDIEV4dGVybmFsIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgRERJXzBfT1NDX09fUkFEQ0VYVENGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisvLyBBbXBsaXR1ZGUgQ29tcGVuc2F0aW9uIENvbnRyb2wKKyNkZWZpbmUgRERJXzBfT1NDX09fQU1QQ09NUENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBBbXBsaXR1ZGUgQ29tcGVuc2F0aW9uIFRocmVhc2hvbGQgMQorI2RlZmluZSBERElfMF9PU0NfT19BTVBDT01QVEgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIEFtcGxpdHVkZSBDb21wZW5zYXRpb24gVGhyZWFzaG9sZCAyCisjZGVmaW5lIERESV8wX09TQ19PX0FNUENPTVBUSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gQW5hbG9nIEJ5cGFzcyBWYWx1ZXMgMQorI2RlZmluZSBERElfMF9PU0NfT19BTkFCWVBBU1NWQUwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIERESV8wX09TQ19PX0FOQUJZUEFTU1ZBTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gQW5hbG9nIFRlc3QgQ29udHJvbAorI2RlZmluZSBERElfMF9PU0NfT19BVEVTVENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIEFEQyBEb3VibGVyIE5hbm9hbXAgQ29udHJvbAorI2RlZmluZSBERElfMF9PU0NfT19BRENET1VCTEVSTkFOT0FNUENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIFhPU0NIRiBDb250cm9sCisjZGVmaW5lIERESV8wX09TQ19PX1hPU0NIRkNUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gTG93IEZyZXF1ZW5jeSBPc2NpbGxhdG9yIENvbnRyb2wKKyNkZWZpbmUgRERJXzBfT1NDX09fTEZPU0NDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBSQ09TQ0hGIENvbnRyb2wKKyNkZWZpbmUgRERJXzBfT1NDX09fUkNPU0NIRkNUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBTdGF0dXMgMAorI2RlZmluZSBERElfMF9PU0NfT19TVEFUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIFN0YXR1cyAxCisjZGVmaW5lIERESV8wX09TQ19PX1NUQVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gU3RhdHVzIDIKKyNkZWZpbmUgRERJXzBfT1NDX09fU1RBVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0NUTDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBYVEFMX0lTXzI0TQorLy8KKy8vIFNldCBiYXNlZCBvbiB0aGUgYWNjdXJhdGUgaGlnaCBmcmVxdWVuY3kgWFRBTC4KKy8vIEVOVU1zOgorLy8gMjRNICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyA0OE0gICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWFRBTF9JU18yNE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YVEFMX0lTXzI0TV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hUQUxfSVNfMjRNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWFRBTF9JU18yNE1fMjRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YVEFMX0lTXzI0TV80OE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjldIEJZUEFTU19YT1NDX0xGX0NMS19RVUFMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQllQQVNTX1hPU0NfTEZfQ0xLX1FVQUwgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9CWVBBU1NfWE9TQ19MRl9DTEtfUVVBTF9NICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0JZUEFTU19YT1NDX0xGX0NMS19RVUFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gQllQQVNTX1JDT1NDX0xGX0NMS19RVUFMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQllQQVNTX1JDT1NDX0xGX0NMS19RVUFMICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9CWVBBU1NfUkNPU0NfTEZfQ0xLX1FVQUxfTSAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0JZUEFTU19SQ09TQ19MRl9DTEtfUVVBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNl0gRE9VQkxFUl9TVEFSVF9EVVJBVElPTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0RPVUJMRVJfU1RBUlRfRFVSQVRJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfRE9VQkxFUl9TVEFSVF9EVVJBVElPTl9NICAgICAgICAgICAgICAgICAgICAgMHgwQzAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9ET1VCTEVSX1NUQVJUX0RVUkFUSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERPVUJMRVJfUkVTRVRfRFVSQVRJT04KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9ET1VCTEVSX1JFU0VUX0RVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0RPVUJMRVJfUkVTRVRfRFVSQVRJT05fTSAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfRE9VQkxFUl9SRVNFVF9EVVJBVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzIyXSBGT1JDRV9LSUNLU1RBUlRfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9GT1JDRV9LSUNLU1RBUlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0ZPUkNFX0tJQ0tTVEFSVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfRk9SQ0VfS0lDS1NUQVJUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzE2XSBBTExPV19TQ0xLX0hGX1NXSVRDSElORworLy8KKy8vIDA6IERlZmF1bHQgLSBTd2l0Y2hpbmcgb2YgSEYgY2xvY2sgc291cmNlIGlzIGRpc2FibGVkIC4KKy8vIDE6IEFsbG93cyBzd3RpY2hpbmcgb2Ygc2Nsa19oZiBzb3VyY2UuCisvLworLy8gUHJvdmlkZWQgdG8gcHJldmVudCBzd2l0Y2hpbmcgb2YgdGhlIFNDTEtfSEYgc291cmNlIHdoZW4gcnVubmluZyBmcm9tIGZsYXNoCisvLyAoYSBsb25nIHBlcmlvZCBkdXJpbmcgc3dpdGNoaW5nIGNvdWxkIGNvcnJ1cHQgZmxhc2gpLiBXaGVuIHNjbGtfaGYKKy8vIHN3aXRjaGluZyBpcyBkaXNhYmxlZCwgYSBuZXcgc291cmNlIGNhbiBiZSBzdGFydGVkIHdoZW4gU0NMS19IRl9TUkNfU0VMIGlzCisvLyBjaGFuZ2VkLCBidXQgdGhlIHN3aXRjaCB3aWxsIG5vdCBvY2N1ciB1bnRpbCB0aGlzIGJpdCBpcyBzZXQuICBUaGlzIGJpdAorLy8gc2hvdWxkIGJlIHNldCB0byBlbmFibGUgY2xvY2sgc3dpdGNoaW5nIGFmdGVyIFNUQVQwLlBFTkRJTkdTQ0xLSEZTV0lUQ0hJTkcKKy8vIGluZGljYXRlcyAgdGhlIG5ldyBIRiBjbG9jayBpcyByZWFkeS4gV2hlbiBzd2l0Y2hpbmcgY29tcGxldGVzIChhbHNvCisvLyBpbmRpY2F0ZWQgYnkgU1RBVDAuUEVORElOR1NDTEtIRlNXSVRDSElORykgIHNjbGtfaGYgc3dpdGNoaW5nIHNob3VsZCBiZQorLy8gZGlzYWJsZWQgdG8gcHJldmVudCBmbGFzaCBjb3JydXB0aW9uLiAgU3dpdGNoaW5nIHNob3VsZCBub3QgYmUgZW5hYmxlZCB3aGVuCisvLyBydW5uaW5nIGZyb20gZmxhc2guCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0FMTE9XX1NDTEtfSEZfU1dJVENISU5HICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQUxMT1dfU0NMS19IRl9TV0lUQ0hJTkdfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9BTExPV19TQ0xLX0hGX1NXSVRDSElOR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTRdIEhQT1NDX01PREVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9IUE9TQ19NT0RFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0hQT1NDX01PREVfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfSFBPU0NfTU9ERV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEyXSBSQ09TQ19MRl9UUklNTUVECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfUkNPU0NfTEZfVFJJTU1FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9SQ09TQ19MRl9UUklNTUVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1JDT1NDX0xGX1RSSU1NRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gWE9TQ19IRl9QT1dFUl9NT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWE9TQ19IRl9QT1dFUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YT1NDX0hGX1BPV0VSX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hPU0NfSEZfUE9XRVJfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gWE9TQ19MRl9ESUdfQllQQVNTCisvLworLy8gQnlwYXNzIFhPU0NfTEYgYW5kIHVzZSB0aGUgZGlnaXRhbCBpbnB1dCBjbG9jayBmcm9tIEFPTiBmb3IgdGhlIHhvc2NfbGYKKy8vIGNsb2NrLi4KKy8vCisvLyAwOiBVc2UgMzJrSHogWE9TQyBhcyB4b3NjX2xmIGNsb2NrIHNvdXJjZQorLy8gMTogVXNlIGRpZ2l0YWwgaW5wdXQgKGZyb20gQU9OKSBhcyB4b3NjX2xmIGNsb2NrIHNvdXJjZS4KKy8vCisvLyBUaGlzIGJpdCB3aWxsIG9ubHkgaGF2ZSBlZmZlY3Qgd2hlbiBTQ0xLX0xGX1NSQ19TRUwgaXMgc2VsZWN0aW5nIHRoZSB4b3NjX2xmCisvLyBhcyB0aGUgc2Nsa19sZiBzb3VyY2UuIFRoZSBtdXhpbmcgcGVyZm9ybWVkIGJ5IHRoaXMgYml0IGlzIG5vdCBnbGl0Y2ggZnJlZS4KKy8vIFRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIHNob3VsZCBiZSBmb2xsb3dlZCB3aGVuIGNoYW5naW5nIHRoaXMgZmllbGQgdG8gYXZvaWQKKy8vIGdsaXRjaGVzIG9uIHNjbGtfbGYuLgorLy8KKy8vIDEpIFNldCBTQ0xLX0xGX1NSQ19TRUwgdG8gc2VsZWN0IGFueSBzb3VyY2Ugb3RoZXIgdGhhbiB0aGUgeG9zY19sZiBjbG9jaworLy8gc291cmNlLgorLy8gMikgU2V0IG9yIGNsZWFyIHRoaXMgYml0IHRvIGJ5cGFzcyBvciBub3QgYnlwYXNzIHRoZSB4b3NjX2xmLgorLy8gMykgU2V0IFNDTEtfTEZfU1JDX1NFTCB0byB1c2UgeG9zY19sZi4KKy8vCisvLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGVpdGhlciB0aGUgcmNvc2NfaGYgb3IgeG9zY19oZiAod2hpY2hldmVyIGlzCisvLyBjdXJyZW50bHkgYWN0aXZlKSBiZSBzZWxlY3RlZCBhcyB0aGUgc291cmNlIGluIHN0ZXAgMSBhYm92ZS4gVGhpcyBwcm92aWRlcyBhCisvLyBmYXN0ZXIgY2xvY2sgY2hhbmdlLgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9YT1NDX0xGX0RJR19CWVBBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1hPU0NfTEZfRElHX0JZUEFTU19NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfWE9TQ19MRl9ESUdfQllQQVNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDTEtfTE9TU19FTgorLy8KKy8vIEVuYWJsZSBjbG9jayBsb3NzIGNpcmN1aXQgYW5kIGhlbmNlIHRoZSBpbmRpY2F0b3JzIHRvIHN5c3RlbSBjb250cm9sbGVyLgorLy8gQ2hlY2tzIGJvdGggU0NMS19IRiBhbmQgU0NMS19MRiBjbG9jayBsb3NzIGluZGljYXRvcnMuCisvLworLy8gMDogRGlzYWJsZQorLy8gMTogRW5hYmxlCisvLworLy8gQ2xvY2sgbG9zcyBkZXRlY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gY2hhbmdpbmcgdGhlIHNjbGtfbGYgc291cmNlLgorLy8gU1RBVDAuU0NMS19MRl9TUkMgY2FuIGJlIHBvbGxlZCB0byBkZXRlcm1pbmUgd2hlbiBhIGNoYW5nZSB0byBhIG5ldyBzY2xrX2xmCisvLyBzb3VyY2UgaGFzIGNvbXBsZXRlZC4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQ0xLX0xPU1NfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9DTEtfTE9TU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0NMS19MT1NTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgWzg6N10gQUNMS19URENfU1JDX1NFTAorLy8KKy8vIFNvdXJjZSBzZWxlY3QgZm9yIGFjbGtfdGRjLgorLy8KKy8vIDAwOiBSQ09TQ19IRiAoNDhNSHopCisvLyAwMTogUkNPU0NfSEYgKDI0TUh6KQorLy8gMTA6IFhPU0NfSEYgKDI0TUh6KQorLy8gMTE6IE5vdCB1c2VkCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0FDTEtfVERDX1NSQ19TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQUNMS19URENfU1JDX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9BQ0xLX1REQ19TUkNfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgIFs2OjVdIEFDTEtfUkVGX1NSQ19TRUwKKy8vCisvLyBTb3VyY2Ugc2VsZWN0IGZvciBhY2xrX3JlZgorLy8KKy8vIDAwOiBSQ09TQ19IRiBkZXNpcnZlZCAoMzEuMjVrSHopCisvLyAwMTogWE9TQ19IRiBkZXJpdmVkICgzMS4yNWtIeikKKy8vIDEwOiBSQ09TQ19MRiAoMzJrSHopCisvLyAxMTogWE9TQ19MRiAoMzIuNzY4a0h6KQorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9BQ0xLX1JFRl9TUkNfU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19DVEwwX0FDTEtfUkVGX1NSQ19TRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfQUNMS19SRUZfU1JDX1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbMzoyXSBTQ0xLX0xGX1NSQ19TRUwKKy8vCisvLyBTb3VyY2Ugc2VsZWN0IGZvciBzY2xrX2xmCisvLyBFTlVNczoKKy8vIFhPU0NMRiAgICAgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IFhPU0MKKy8vIFJDT1NDTEYgICAgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IFJDT1NDCisvLyBYT1NDSEZETEYgICAgICAgICAgICAgICAgTG93IGZyZXF1ZW5jeSBjbG9jayBkZXJpdmVkIGZyb20gSGlnaCBGcmVxdWVuY3kKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBYT1NDCisvLyBSQ09TQ0hGRExGICAgICAgICAgICAgICAgTG93IGZyZXF1ZW5jeSBjbG9jayBkZXJpdmVkIGZyb20gSGlnaCBGcmVxdWVuY3kKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSQ09TQworI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0xGX1NSQ19TRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTEZfU1JDX1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19MRl9TUkNfU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0xGX1NSQ19TRUxfWE9TQ0xGICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTEZfU1JDX1NFTF9SQ09TQ0xGICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19MRl9TUkNfU0VMX1hPU0NIRkRMRiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0xGX1NSQ19TRUxfUkNPU0NIRkRMRiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIFNDTEtfTUZfU1JDX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBFTlVNczoKKy8vIFhDT1NDSEZETUYgICAgICAgICAgICAgICBNZWRpdW0gZnJlcXVlbmN5IGNsb2NrIGRlcml2ZWQgZnJvbSBoaWdoIGZyZXF1ZW5jeQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFhPU0MuCisvLyBSQ09TQ0hGRE1GICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19NRl9TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX01GX1NSQ19TRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfTUZfU1JDX1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19NRl9TUkNfU0VMX1hDT1NDSEZETUYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX01GX1NSQ19TRUxfUkNPU0NIRkRNRiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFNDTEtfSEZfU1JDX1NFTAorLy8KKy8vIFNvdXJjZSBzZWxlY3QgZm9yIHNjbGtfaGYKKy8vIEVOVU1zOgorLy8gWE9TQyAgICAgICAgICAgICAgICAgICAgIEhpZ2ggZnJlcXVlbmN5IFhPU0MgY2xrCisvLyBSQ09TQyAgICAgICAgICAgICAgICAgICAgSGlnaCBmcmVxdWVuY3kgUkNPU0MgY2xrCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfSEZfU1JDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19IRl9TUkNfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERElfMF9PU0NfQ1RMMF9TQ0xLX0hGX1NSQ19TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERESV8wX09TQ19DVEwwX1NDTEtfSEZfU1JDX1NFTF9YT1NDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDBfU0NMS19IRl9TUkNfU0VMX1JDT1NDICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIyOjE4XSBSQ09TQ0hGQ1RSSU1GUkFDVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19DVEwxX1JDT1NDSEZDVFJJTUZSQUNUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRERJXzBfT1NDX0NUTDFfUkNPU0NIRkNUUklNRlJBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDdDMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMV9SQ09TQ0hGQ1RSSU1GUkFDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFJDT1NDSEZDVFJJTUZSQUNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDFfUkNPU0NIRkNUUklNRlJBQ1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBERElfMF9PU0NfQ1RMMV9SQ09TQ0hGQ1RSSU1GUkFDVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIERESV8wX09TQ19DVEwxX1JDT1NDSEZDVFJJTUZSQUNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgWzE6MF0gWE9TQ19IRl9GQVNUX1NUQVJUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0NUTDFfWE9TQ19IRl9GQVNUX1NUQVJUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfQ1RMMV9YT1NDX0hGX0ZBU1RfU1RBUlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIERESV8wX09TQ19DVEwxX1hPU0NfSEZfRkFTVF9TVEFSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19SQURDRVhUQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyMl0gSFBNX0lCSUFTX1dBSVRfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfSFBNX0lCSUFTX1dBSVRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19IUE1fSUJJQVNfV0FJVF9DTlRfTSAgICAgICAgICAgICAgICAgICAweEZGQzAwMDAwCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX0hQTV9JQklBU19XQUlUX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsyMToxNl0gTFBNX0lCSUFTX1dBSVRfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfTFBNX0lCSUFTX1dBSVRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19MUE1fSUJJQVNfV0FJVF9DTlRfTSAgICAgICAgICAgICAgICAgICAweDAwM0YwMDAwCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX0xQTV9JQklBU19XQUlUX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxMl0gSURBQ19TVEVQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfSURBQ19TVEVQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19JREFDX1NURVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX0lEQUNfU1RFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6Nl0gUkFEQ19EQUNfVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19SQURDX0RBQ19USF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX1JBRENfREFDX1RIX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfUkFEQ19EQUNfVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBSQURDX01PREVfSVNfU0FSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1JBRENFWFRDRkdfUkFEQ19NT0RFX0lTX1NBUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBERElfMF9PU0NfUkFEQ0VYVENGR19SQURDX01PREVfSVNfU0FSX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERESV8wX09TQ19SQURDRVhUQ0ZHX1JBRENfTU9ERV9JU19TQVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19BTVBDT01QQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gQU1QQ09NUF9SRVFfTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfUkVRX01PREUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9SRVFfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1JFUV9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiBbMjk6MjhdIEFNUENPTVBfRlNNX1VQREFURV9SQVRFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gMjUwS0haICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyA1MDBLSFogICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIDFNSFogICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gMk1IWiAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfRlNNX1VQREFURV9SQVRFX1cgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9GU01fVVBEQVRFX1JBVEVfTSAgICAgICAgICAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX0ZTTV9VUERBVEVfUkFURV9TICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfRlNNX1VQREFURV9SQVRFXzI1MEtIWiAgICAgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9GU01fVVBEQVRFX1JBVEVfNTAwS0haICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX0ZTTV9VUERBVEVfUkFURV8xTUhaICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfRlNNX1VQREFURV9SQVRFXzJNSFogICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyN10gQU1QQ09NUF9TV19DVFJMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9TV19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1NXX0NUUkxfTSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfU1dfQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gQU1QQ09NUF9TV19FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0FNUENPTVBfU1dfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQU1QQ09NUF9TV19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9BTVBDT01QX1NXX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiBbMjM6MjBdIElCSUFTX09GRlNFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIElCSUFTX0lOSVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU19JTklUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTX0lOSVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNfSU5JVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBMUE1fSUJJQVNfV0FJVF9DTlRfRklOQUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfVyAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0xQTV9JQklBU19XQUlUX0NOVF9GSU5BTF9NICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX1MgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo0XSBDQVBfU1RFUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0NBUF9TVEVQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfQ0FQX1NURVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9DQVBfU1RFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIElCSUFTQ0FQX0hQVE9MUF9PTF9DTlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUENUTF9JQklBU0NBUF9IUFRPTFBfT0xfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QQ1RMX0lCSUFTQ0FQX0hQVE9MUF9PTF9DTlRfTSAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBDVExfSUJJQVNDQVBfSFBUT0xQX09MX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0FNUENPTVBUSDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIzOjE4XSBIUE1SQU1QM19MVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19MVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0xUSF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGQzAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfTFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE1OjEwXSBIUE1SQU1QM19IVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QM19IVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAzX0hUSF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZDMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDNfSFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOTo2XSBJQklBU0NBUF9MUFRPSFBfT0xfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSUJJQVNDQVBfTFBUT0hQX09MX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9JQklBU0NBUF9MUFRPSFBfT0xfQ05UX00gICAgICAgICAgICAgICAweDAwMDAwM0MwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0lCSUFTQ0FQX0xQVE9IUF9PTF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gSFBNUkFNUDFfVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMV9IUE1SQU1QMV9USF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgxX0hQTVJBTVAxX1RIX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDFfSFBNUkFNUDFfVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0FNUENPTVBUSDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI2XSBMUE1VUERBVEVfTFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfTFBNVVBEQVRFX0xUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9MUE1VUERBVEVfTFRIX00gICAgICAgICAgICAgICAgICAgICAgICAweEZDMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0xQTVVQREFURV9MVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6IFsyMzoxOF0gTFBNVVBEQVRFX0hUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0xQTVVQREFURV9IVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfTFBNVVBEQVRFX0hUSF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZDMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9MUE1VUERBVEVfSFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTU6MTBdIEFEQ19DT01QX0FNUFRIX0xQTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0FEQ19DT01QX0FNUFRIX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfQURDX0NPTVBfQU1QVEhfTFBNX00gICAgICAgICAgICAgICAgICAgMHgwMDAwRkMwMAorI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9BRENfQ09NUF9BTVBUSF9MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgIFs3OjJdIEFEQ19DT01QX0FNUFRIX0hQTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTVBDT01QVEgyX0FEQ19DT01QX0FNUFRIX0hQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX0FNUENPTVBUSDJfQURDX0NPTVBfQU1QVEhfSFBNX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGQworI2RlZmluZSBERElfMF9PU0NfQU1QQ09NUFRIMl9BRENfQ09NUF9BTVBUSF9IUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fQU5BQllQQVNTVkFMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTk6MTZdIFhPU0NfSEZfUk9XX1ExMgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTkFCWVBBU1NWQUwxX1hPU0NfSEZfUk9XX1ExMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX0FOQUJZUEFTU1ZBTDFfWE9TQ19IRl9ST1dfUTEyX00gICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBERElfMF9PU0NfQU5BQllQQVNTVkFMMV9YT1NDX0hGX1JPV19RMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFhPU0NfSEZfQ09MVU1OX1ExMgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTkFCWVBBU1NWQUwxX1hPU0NfSEZfQ09MVU1OX1ExMl9XICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRERJXzBfT1NDX0FOQUJZUEFTU1ZBTDFfWE9TQ19IRl9DT0xVTU5fUTEyX00gICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBERElfMF9PU0NfQU5BQllQQVNTVkFMMV9YT1NDX0hGX0NPTFVNTl9RMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fQU5BQllQQVNTVkFMMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzEzOjBdIFhPU0NfSEZfSUJJQVNUSEVSTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BTkFCWVBBU1NWQUwyX1hPU0NfSEZfSUJJQVNUSEVSTV9XICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRERJXzBfT1NDX0FOQUJZUEFTU1ZBTDJfWE9TQ19IRl9JQklBU1RIRVJNX00gICAgICAgICAgICAgICAgMHgwMDAwM0ZGRgorI2RlZmluZSBERElfMF9PU0NfQU5BQllQQVNTVkFMMl9YT1NDX0hGX0lCSUFTVEhFUk1fUyAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fQVRFU1RDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI5XSBTQ0xLX0xGX0FVWF9FTgorLy8KKy8vIEVuYWJsZSAzMiBrSHogY2xvY2sgdG8gQVVYX0NPTVBCLgorI2RlZmluZSBERElfMF9PU0NfQVRFU1RDVExfU0NMS19MRl9BVVhfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BVEVTVENUTF9TQ0xLX0xGX0FVWF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FURVNUQ1RMX1NDTEtfTEZfQVVYX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gTkFOT0FNUF9CSUFTX0VOQUJMRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9OQU5PQU1QX0JJQVNfRU5BQkxFICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX05BTk9BTVBfQklBU19FTkFCTEVfTSAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfTkFOT0FNUF9CSUFTX0VOQUJMRV9TICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIFNQQVJFMjMKKy8vCisvLyBTb2Z0d2FyZSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHZhbHVlIG9mIGEgcmVzZXJ2ZWQuIFdyaXRpbmcgYW55IG90aGVyIHZhbHVlCisvLyB0aGFuIHRoZSByZXNldCB2YWx1ZSBtYXkgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvcgorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfU1BBUkUyMyAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9TUEFSRTIzX00gICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX1NQQVJFMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgIFs1XSBBRENfU0hfTU9ERV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfU0hfTU9ERV9FTiAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19TSF9NT0RFX0VOX00gICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX1NIX01PREVfRU5fUyAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFEQ19TSF9WQlVGX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19TSF9WQlVGX0VOICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX1NIX1ZCVUZfRU5fTSAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfU0hfVkJVRl9FTl9TICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzE6MF0gQURDX0lSRUZfQ1RSTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIERESV8wX09TQ19BRENET1VCTEVSTkFOT0FNUENUTF9BRENfSVJFRl9DVFJMX1cgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX0FEQ0RPVUJMRVJOQU5PQU1QQ1RMX0FEQ19JUkVGX0NUUkxfTSAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBERElfMF9PU0NfQURDRE9VQkxFUk5BTk9BTVBDVExfQURDX0lSRUZfQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRERJXzBfT1NDX09fWE9TQ0hGQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzk6OF0gUEVBS19ERVRfSVRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX1BFQUtfREVUX0lUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfUEVBS19ERVRfSVRSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9QRUFLX0RFVF9JVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs2XSBCWVBBU1MKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX0JZUEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfQllQQVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9CWVBBU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNDoyXSBIUF9CVUZfSVRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX0hQX0JVRl9JVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfSFBfQlVGX0lUUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9IUF9CVUZfSVRSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICBbMTowXSBMUF9CVUZfSVRSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfWE9TQ0hGQ1RMX0xQX0JVRl9JVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERESV8wX09TQ19YT1NDSEZDVExfTFBfQlVGX0lUUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRERJXzBfT1NDX1hPU0NIRkNUTF9MUF9CVUZfSVRSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX0xGT1NDQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoyMl0gWE9TQ0xGX1JFR1VMQVRPUl9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1hPU0NMRl9SRUdVTEFUT1JfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfWE9TQ0xGX1JFR1VMQVRPUl9UUklNX00gICAgICAgICAgICAgICAgICAweDAwQzAwMDAwCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9YT1NDTEZfUkVHVUxBVE9SX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsyMToxOF0gWE9TQ0xGX0NNSVJSV1JfUkFUSU8KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfWE9TQ0xGX0NNSVJSV1JfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9YT1NDTEZfQ01JUlJXUl9SQVRJT19NICAgICAgICAgICAgICAgICAgIDB4MDAzQzAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1hPU0NMRl9DTUlSUldSX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICBbOTo4XSBSQ09TQ0xGX1JUVU5FX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gRU5VTXM6CisvLyA2UDBNRUcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIDZQNU1FRyAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorLy8gN1AwTUVHICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyA3UDVNRUcgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfUlRVTkVfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9SVFVORV9UUklNX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfUlRVTkVfVFJJTV82UDBNRUcgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9SVFVORV9UUklNXzZQNU1FRyAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX1JUVU5FX1RSSU1fN1AwTUVHICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfUlRVTkVfVFJJTV83UDVNRUcgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNzowXSBSQ09TQ0xGX0NUVU5FX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBERElfMF9PU0NfTEZPU0NDVExfUkNPU0NMRl9DVFVORV9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIERESV8wX09TQ19MRk9TQ0NUTF9SQ09TQ0xGX0NUVU5FX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRERJXzBfT1NDX0xGT1NDQ1RMX1JDT1NDTEZfQ1RVTkVfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX1JDT1NDSEZDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBSQ09TQ0hGX0NUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRERJXzBfT1NDX1JDT1NDSEZDVExfUkNPU0NIRl9DVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBERElfMF9PU0NfUkNPU0NIRkNUTF9SQ09TQ0hGX0NUUklNX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIERESV8wX09TQ19SQ09TQ0hGQ1RMX1JDT1NDSEZfQ1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19TVEFUMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzA6MjldIFNDTEtfTEZfU1JDCisvLworLy8gSW5kaWNhdGVzIHNvdXJjZSBmb3IgdGhlIHNjbGtfbGYKKy8vIEVOVU1zOgorLy8gWE9TQ0xGICAgICAgICAgICAgICAgICAgIExvdyBmcmVxdWVuY3kgWE9TQworLy8gUkNPU0NMRiAgICAgICAgICAgICAgICAgIExvdyBmcmVxdWVuY3kgUkNPU0MKKy8vIFhPU0NIRkRMRiAgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IGNsb2NrIGRlcml2ZWQgZnJvbSBIaWdoIEZyZXF1ZW5jeQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFhPU0MKKy8vIFJDT1NDSEZETEYgICAgICAgICAgICAgICBMb3cgZnJlcXVlbmN5IGNsb2NrIGRlcml2ZWQgZnJvbSBIaWdoIEZyZXF1ZW5jeQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJDT1NDCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfU1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9TUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19YT1NDTEYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfU1JDX1JDT1NDTEYgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9TUkNfWE9TQ0hGRExGICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX1NSQ19SQ09TQ0hGRExGICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyOF0gU0NMS19IRl9TUkMKKy8vCisvLyBJbmRpY2F0ZXMgc291cmNlIGZvciB0aGUgc2Nsa19oZgorLy8gRU5VTXM6CisvLyBYT1NDICAgICAgICAgICAgICAgICAgICAgSGlnaCBmcmVxdWVuY3kgWE9TQworLy8gUkNPU0MgICAgICAgICAgICAgICAgICAgIEhpZ2ggZnJlcXVlbmN5IFJDT1NDIGNsaworI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0hGX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9TUkNfWE9TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0hGX1NSQ19SQ09TQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyMl0gUkNPU0NfSEZfRU4KKy8vCisvLyBSQ09TQ19IRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfUkNPU0NfSEZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9SQ09TQ19IRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1JDT1NDX0hGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBSQ09TQ19MRl9FTgorLy8KKy8vIFJDT1NDX0xGX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9SQ09TQ19MRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1JDT1NDX0xGX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfUkNPU0NfTEZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIFhPU0NfTEZfRU4KKy8vCisvLyBYT1NDX0xGX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0xGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfTEZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19MRl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIENMS19EQ0RDX1JEWQorLy8KKy8vIENMS19EQ0RDX1JEWQorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQ0xLX0RDRENfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9DTEtfRENEQ19SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0NMS19EQ0RDX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBDTEtfRENEQ19SRFlfQUNLCisvLworLy8gQ0xLX0RDRENfUkRZX0FDSworI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQ0xLX0RDRENfUkRZX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9DTEtfRENEQ19SRFlfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0NMS19EQ0RDX1JEWV9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBTQ0xLX0hGX0xPU1MKKy8vCisvLyBJbmRpY2F0ZXMgc2Nsa19oZiBpcyBsb3N0CisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0hGX0xPU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfSEZfTE9TU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19IRl9MT1NTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFNDTEtfTEZfTE9TUworLy8KKy8vIEluZGljYXRlcyBzY2xrX2xmIGlzIGxvc3QKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1NDTEtfTEZfTE9TUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfU0NMS19MRl9MT1NTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9TQ0xLX0xGX0xPU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gWE9TQ19IRl9FTgorLy8KKy8vIEluZGljYXRlcyB0aGF0IFhPU0NfSEYgaXMgZW5hYmxlZC4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfSEZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19IRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0hGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxM10gWEJfNDhNX0NMS19FTgorLy8KKy8vIEluZGljYXRlcyB0aGF0IHRoZSA0OE1IeiBjbG9jayBmcm9tIHRoZSAgRE9VQkxFUiBpcyBlbmFibGVkLgorLy8KKy8vIEl0IHdpbGwgYmUgZW5hYmxlZCBpZiAyNCBvciA0OCBNSHogY2hyeXN0YWwgaXMgdXNlZCAoZW5hYmxlZCBpbiBkb3VsYmxlcgorLy8gYnlwYXNzIGZvciB0aGUgNDhNSHogY2hyeXN0YWwpLgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWEJfNDhNX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YQl80OE1fQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hCXzQ4TV9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzExXSBYT1NDX0hGX0xQX0JVRl9FTgorLy8KKy8vIFhPU0NfSEZfTFBfQlVGX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0hGX0xQX0JVRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfSEZfTFBfQlVGX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19IRl9MUF9CVUZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFhPU0NfSEZfSFBfQlVGX0VOCisvLworLy8gWE9TQ19IRl9IUF9CVUZfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1hPU0NfSEZfSFBfQlVGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfWE9TQ19IRl9IUF9CVUZfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9YT1NDX0hGX0hQX0JVRl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOF0gQURDX1RITUVUCisvLworLy8gQURDX1RITUVUCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9BRENfVEhNRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0FEQ19USE1FVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQURDX1RITUVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEFEQ19EQVRBX1JFQURZCisvLworLy8gaW5kaWNhdGVzIHdoZW4gYWRjX2RhdGEgaXMgcmVhZHkuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9BRENfREFUQV9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0FEQ19EQVRBX1JFQURZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQURDX0RBVEFfUkVBRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgIFs2OjFdIEFEQ19EQVRBCisvLworLy8gYWRjX2RhdGEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX0FEQ19EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfQURDX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdFCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9BRENfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUEVORElOR1NDTEtIRlNXSVRDSElORworLy8KKy8vIEluZGljYXRlcyB3aGVuIHNjbGtfaGYgaXMgcmVhZHkgdG8gYmUgc3d0aWNoZWQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQwX1BFTkRJTkdTQ0xLSEZTV0lUQ0hJTkcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERElfMF9PU0NfU1RBVDBfUEVORElOR1NDTEtIRlNXSVRDSElOR19NICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV8wX09TQ19TVEFUMF9QRU5ESU5HU0NMS0hGU1dJVENISU5HX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBERElfMF9PU0NfT19TVEFUMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIFJBTVBTVEFURQorLy8KKy8vIEFNUENPTVAgRlNNIFN0YXRlCisvLyBFTlVNczoKKy8vIEZBU1RfU1RBUlRfU0VUVExFICAgICAgICBGQVNUX1NUQVJUX1NFVFRMRQorLy8gRkFTVF9TVEFSVCAgICAgICAgICAgICAgIEZBU1RfU1RBUlQKKy8vIERVTU1ZX1RPX0lOSVRfMSAgICAgICAgICBEVU1NWV9UT19JTklUXzEKKy8vIElEQUNfREVDX1dfTUVBU1VSRSAgICAgICBJREFDX0RFQ1JFTUVOVF9XSVRIX01FQVNVUkUKKy8vIElCSUFTX0lOQyAgICAgICAgICAgICAgICBJQklBU19JTkNSRU1FTlQKKy8vIExQTV9VUERBVEUgICAgICAgICAgICAgICBMUE1fVVBEQVRFCisvLyBJQklBU19ERUNfV19NRUFTVVJFICAgICAgSUJJQVNfREVDUkVNRU5UX1dJVEhfTUVBU1VSRQorLy8gSUJJQVNfQ0FQX1VQREFURSAgICAgICAgIElCSUFTX0NBUF9VUERBVEUKKy8vIElEQUNfSU5DUkVNRU5UICAgICAgICAgICBJREFDX0lOQ1JFTUVOVAorLy8gSFBNX1VQREFURSAgICAgICAgICAgICAgIEhQTV9VUERBVEUKKy8vIEhQTV9SQU1QMyAgICAgICAgICAgICAgICBIUE1fUkFNUDMKKy8vIEhQTV9SQU1QMiAgICAgICAgICAgICAgICBIUE1fUkFNUDIKKy8vIEhQTV9SQU1QMSAgICAgICAgICAgICAgICBIUE1fUkFNUDEKKy8vIElOSVRJQUxJWkFUSU9OICAgICAgICAgICBJTklUSUFMSVpBVElPTgorLy8gUkVTRVQgICAgICAgICAgICAgICAgICAgIFJFU0VUCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfRkFTVF9TVEFSVF9TRVRUTEUgICAgICAgICAgICAgICAgIDB4RTAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9GQVNUX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhEMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0RVTU1ZX1RPX0lOSVRfMSAgICAgICAgICAgICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSURBQ19ERUNfV19NRUFTVVJFICAgICAgICAgICAgICAgIDB4QjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9JQklBU19JTkMgICAgICAgICAgICAgICAgICAgICAgICAgMHhBMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0xQTV9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDkwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSUJJQVNfREVDX1dfTUVBU1VSRSAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9JQklBU19DQVBfVVBEQVRFICAgICAgICAgICAgICAgICAgMHg3MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0lEQUNfSU5DUkVNRU5UICAgICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSFBNX1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9IUE1fUkFNUDMgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX0hQTV9SQU1QMiAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9SQU1QU1RBVEVfSFBNX1JBTVAxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1JBTVBTVEFURV9JTklUSUFMSVpBVElPTiAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfUkFNUFNUQVRFX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMjc6MjJdIEhQTV9VUERBVEVfQU1QCisvLworLy8gT1NDIGFtcGxpdHVkZSBkdXJpbmcgSFBNX1VQREFURSBzdGF0ZS4KKy8vIFdoZW4gYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiBvZiBYT1NDX0hGIGlzIGVuYWJsZWQgaW4gaGlnaCBwZXJmb3JtYW5jZSBtb2RlLAorLy8gdGhpcyB2YWx1ZSBpcyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBjcnlzdGFsIG9zY2lsbGF0aW9ucyBtZWFzdXJlZCBieSB0aGUKKy8vIG9uLWNoaXAgb3NjaWxsYXRvciBBREMsIGRpdmlkZWQgYnkgMTUgbVYuICBGb3IgZXhhbXBsZSwgYSB2YWx1ZSBvZiAweDIwCisvLyB3b3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBjcnlzdGFsJ3MgYW1wbGl0dWRlIGlzIGFwcHJveGltYXRlbHkgNDgwIG1WLiAgVG8KKy8vIGVuYWJsZSBhbXBsaXR1ZGUgY29tcGVuc2F0aW9uLCBBT05fV1VDIE9TQ0NGRyBtdXN0IGJlIHNldCB0byBhIG5vbi16ZXJvCisvLyB2YWx1ZS4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0hQTV9VUERBVEVfQU1QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfSFBNX1VQREFURV9BTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGQzAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9IUE1fVVBEQVRFX0FNUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsyMToxNl0gTFBNX1VQREFURV9BTVAKKy8vCisvLyBPU0MgYW1wbGl0dWRlIGR1cmluZyBMUE1fVVBEQVRFIHN0YXRlCisvLyBXaGVuIGFtcGxpdHVkZSBjb21wZW5zYXRpb24gb2YgWE9TQ19IRiBpcyBlbmFibGVkIGluIGxvdyBwb3dlciAgbW9kZSwgdGhpcworLy8gdmFsdWUgaXMgdGhlIGFtcGxpdHVkZSBvZiB0aGUgY3J5c3RhbCBvc2NpbGxhdGlvbnMgbWVhc3VyZWQgYnkgdGhlIG9uLWNoaXAKKy8vIG9zY2lsbGF0b3IgQURDLCBkaXZpZGVkIGJ5IDE1IG1WLiAgRm9yIGV4YW1wbGUsIGEgdmFsdWUgb2YgMHgyMCB3b3VsZAorLy8gaW5kaWNhdGUgdGhhdCB0aGUgY3J5c3RhbCdzIGFtcGxpdHVkZSBpcyBhcHByb3hpbWF0ZWx5IDQ4MCBtVi4gIFRvIGVuYWJsZQorLy8gYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiwgQU9OX1dVQyBPU0NDRkcgbXVzdCBiZSBzZXQgdG8gYSBub24temVybyB2YWx1ZS4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0xQTV9VUERBVEVfQU1QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfTFBNX1VQREFURV9BTVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0YwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9MUE1fVVBEQVRFX0FNUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gRk9SQ0VfUkNPU0NfSEYKKy8vCisvLyBmb3JjZV9yY29zY19oZgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfRk9SQ0VfUkNPU0NfSEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9GT1JDRV9SQ09TQ19IRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0ZPUkNFX1JDT1NDX0hGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBTQ0xLX0hGX0VOCisvLworLy8gU0NMS19IRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19IRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX0hGX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfSEZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBTQ0xLX01GX0VOCisvLworLy8gU0NMS19NRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19NRl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX01GX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfTUZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBBQ0xLX0FEQ19FTgorLy8KKy8vIEFDTEtfQURDX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX0FEQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfQURDX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19BRENfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIEFDTEtfVERDX0VOCisvLworLy8gQUNMS19URENfRU4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfVERDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19URENfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1REQ19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQUNMS19SRUZfRU4KKy8vCisvLyBBQ0xLX1JFRl9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19SRUZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1JFRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfUkVGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDTEtfQ0hQX0VOCisvLworLy8gQ0xLX0NIUF9FTgorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0NIUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfQ0hQX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19DSFBfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBDTEtfRENEQ19FTgorLy8KKy8vIENMS19EQ0RDX0VOCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfRENEQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19EQ0RDX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0RDRENfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFNDTEtfSEZfR09PRAorLy8KKy8vIFNDTEtfSEZfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19IRl9HT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX0hGX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfSEZfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBTQ0xLX01GX0dPT0QKKy8vCisvLyBTQ0xLX01GX0dPT0QKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfTUZfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19NRl9HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX01GX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gU0NMS19MRl9HT09ECisvLworLy8gU0NMS19MRl9HT09ECisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9TQ0xLX0xGX0dPT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX1NDTEtfTEZfR09PRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfU0NMS19MRl9HT09EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFDTEtfQURDX0dPT0QKKy8vCisvLyBBQ0xLX0FEQ19HT09ECisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX0FEQ19HT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfQURDX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19BRENfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEFDTEtfVERDX0dPT0QKKy8vCisvLyBBQ0xLX1REQ19HT09ECisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1REQ19HT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfVERDX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19URENfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEFDTEtfUkVGX0dPT0QKKy8vCisvLyBBQ0xLX1JFRl9HT09ECisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9BQ0xLX1JFRl9HT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0FDTEtfUkVGX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQUNMS19SRUZfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENMS19DSFBfR09PRAorLy8KKy8vIENMS19DSFBfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0NIUF9HT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfQ0hQX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19DSFBfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDTEtfRENEQ19HT09ECisvLworLy8gQ0xLX0RDRENfR09PRAorI2RlZmluZSBERElfMF9PU0NfU1RBVDFfQ0xLX0RDRENfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERESV8wX09TQ19TVEFUMV9DTEtfRENEQ19HT09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQxX0NMS19EQ0RDX0dPT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IERESV8wX09TQ19PX1NUQVQyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNl0gQURDX0RDQklBUworLy8KKy8vIERDIEJpYXMgcmVhZCBieSBSQURDIGR1cmluZyBTQVIgbW9kZQorLy8gVGhlIHZhdWUgaXMgYW4gdW5zaWduZWQgaW50ZXJnZXIuIEl0IGlzIHVzZWQgZm9yIGRlYnVnIG9ubHkuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9BRENfRENCSUFTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0FEQ19EQ0JJQVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQzAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfQURDX0RDQklBU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIEhQTV9SQU1QMV9USE1FVAorLy8KKy8vIEluZGljYXRpb24gb2YgdGhyZXNoaG9sZCBpcyBtZXQgZm9yIGhwbV9yYW1wMQorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfSFBNX1JBTVAxX1RITUVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9IUE1fUkFNUDFfVEhNRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0hQTV9SQU1QMV9USE1FVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBIUE1fUkFNUDJfVEhNRVQKKy8vCisvLyBJbmRpY2F0aW9uIG9mIHRocmVzaGhvbGQgaXMgbWV0IGZvciBocG1fcmFtcDIKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0hQTV9SQU1QMl9USE1FVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfSFBNX1JBTVAyX1RITUVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9IUE1fUkFNUDJfVEhNRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gSFBNX1JBTVAzX1RITUVUCisvLworLy8gSW5kaWNhdGlvbiBvZiB0aHJlc2hob2xkIGlzIG1ldCBmb3IgaHBtX3JhbXAzCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9IUE1fUkFNUDNfVEhNRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0hQTV9SQU1QM19USE1FVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfSFBNX1JBTVAzX1RITUVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiBbMTU6MTJdIFJBTVBTVEFURQorLy8KKy8vIHhvc2NfaGYgYW1wbGl0dWRlIGNvbXBlbnNhdGlvbiBGU00KKy8vCisvLyBUaGlzIGlzIGlkZW50aWNhbCB0byBTVEFUMS5SQU1QU1RBVEUuIFNlZSB0aGF0IGRlc2NyaXB0aW9uIGZvciBlbmNvZGluZy4KKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1JBTVBTVEFURV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfUkFNUFNUQVRFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9SQU1QU1RBVEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgICBbM10gQU1QQ09NUF9SRVEKKy8vCisvLyBhbXBjb21wX3JlcQorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfQU1QQ09NUF9SRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9BTVBDT01QX1JFUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX0FNUENPTVBfUkVRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBYT1NDX0hGX0FNUEdPT0QKKy8vCisvLyBhbXBsaXR1ZGUgb2YgeG9zY19oZiBpcyB3aXRoaW4gdGhlIHJlcXVpcmVkIHRocmVzaG9sZCAoc2V0IGJ5IERESSkuIE5vdCB1c2VkCisvLyBmb3IgYW55dGhpbmcganVzdCBmb3IgZGVidWcvc3RhdHVzCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9YT1NDX0hGX0FNUEdPT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1hPU0NfSEZfQU1QR09PRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfWE9TQ19IRl9BTVBHT09EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFhPU0NfSEZfRlJFUUdPT0QKKy8vCisvLyBmcmVxdWVuY3kgb2YgeG9zY19oZiBpcyBnb29kIHRvIHVzZSBmb3IgdGhlIGRpZ2l0YWwgY2xvY2tzCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9YT1NDX0hGX0ZSRVFHT09EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1hPU0NfSEZfRlJFUUdPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfWE9TQ19IRl9GUkVRR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFhPU0NfSEZfUkZfRlJFUUdPT0QKKy8vCisvLyBmcmVxdWVuY3kgb2YgeG9zY19oZiBpcyB3aXRoaW4gKy8tIDIwIHBwbSBhbmQgeG9zY19oZiBpcyBnb29kIGZvciByYWRpbworLy8gb3BlcmF0aW9ucy4gVXNlZCBmb3IgU1cgdG8gc3RhcnQgc3ludGhlc2l6ZXIuCisjZGVmaW5lIERESV8wX09TQ19TVEFUMl9YT1NDX0hGX1JGX0ZSRVFHT09EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRERJXzBfT1NDX1NUQVQyX1hPU0NfSEZfUkZfRlJFUUdPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERElfMF9PU0NfU1RBVDJfWE9TQ19IRl9SRl9GUkVRR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fRERJXzBfT1NDX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RldmljZS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZTI4OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2RldmljZS5oCkBAIC0wLDAgKzEsMTY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfZGV2aWNlLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTA5LTIzIDEzOjM1OjI4ICswMjAwIChXZWQsIDIzIFNlcCAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ0NjQ0CisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfREVWSUNFX0hfXworI2RlZmluZSBfX0hXX0RFVklDRV9IX18KKworI2luY2x1ZGUgPGluYy9od19jaGlwX2RlZi5oPgorCisjaWZkZWYgQ0NfR0VUX0NISVBfUEFDS0FHRQorCisjaWYgKCBDQ19HRVRfQ0hJUF9QQUNLQUdFID09IDB4NyApCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgZWRnZSBkZXRlY3Rpb24gb24gd2FrZSB1cCBldmVudHMgZm9yIHRoZQorLy8gQ0MyNnh4IDd4NyBwYWNrYWdlZCBkZXZpY2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05fRVZFTlRfRElPMCAgICAgICAgIDE4CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xICAgICAgICAgMTcKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIgICAgICAgICAxNgorI2RlZmluZSBBT05fRVZFTlRfRElPMyAgICAgICAgIDE1CisjZGVmaW5lIEFPTl9FVkVOVF9ESU80ICAgICAgICAgMTQKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzUgICAgICAgICAxMworI2RlZmluZSBBT05fRVZFTlRfRElPNiAgICAgICAgIDEyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU83ICAgICAgICAgMTEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzggICAgICAgICAxMAorI2RlZmluZSBBT05fRVZFTlRfRElPOSAgICAgICAgIDkKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEwICAgICAgICA4CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMSAgICAgICAgNworI2RlZmluZSBBT05fRVZFTlRfRElPMTIgICAgICAgIDYKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEzICAgICAgICA1CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNCAgICAgICAgNAorI2RlZmluZSBBT05fRVZFTlRfRElPMTUgICAgICAgIDMKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE2ICAgICAgICAyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNyAgICAgICAgMQorI2RlZmluZSBBT05fRVZFTlRfRElPMTggICAgICAgIDMxCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xOSAgICAgICAgMzAKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIwICAgICAgICAyOQorI2RlZmluZSBBT05fRVZFTlRfRElPMjEgICAgICAgIDI4CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMiAgICAgICAgMjcKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIzICAgICAgICAyNgorI2RlZmluZSBBT05fRVZFTlRfRElPMjQgICAgICAgIDI1CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNSAgICAgICAgMjQKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI2ICAgICAgICAyMworI2RlZmluZSBBT05fRVZFTlRfRElPMjcgICAgICAgIDIyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yOCAgICAgICAgMjEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI5ICAgICAgICAyMAorI2RlZmluZSBBT05fRVZFTlRfRElPMzAgICAgICAgIDE5CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgMHgzRgorI2VuZGlmIC8vICggQ0NfR0VUX0NISVBfUEFDS0FHRSA9PSAweDcgKQorCisjaWYgKCBDQ19HRVRfQ0hJUF9QQUNLQUdFID09IDB4NSApCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgZWRnZSBkZXRlY3Rpb24gb24gd2FrZSB1cCBldmVudHMgZm9yIHRoZQorLy8gQ0MyNnh4IDV4NSBwYWNrYWdlZCBkZXZpY2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05fRVZFTlRfRElPMCAgICAgICAgIDE1CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xICAgICAgICAgMTQKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIgICAgICAgICAxMworI2RlZmluZSBBT05fRVZFTlRfRElPMyAgICAgICAgIDEyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU80ICAgICAgICAgMTEKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzUgICAgICAgICAyCisjZGVmaW5lIEFPTl9FVkVOVF9ESU82ICAgICAgICAgMQorI2RlZmluZSBBT05fRVZFTlRfRElPNyAgICAgICAgIDI2CisjZGVmaW5lIEFPTl9FVkVOVF9ESU84ICAgICAgICAgMjUKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzkgICAgICAgICAyMworI2RlZmluZSBBT05fRVZFTlRfRElPMTAgICAgICAgIDI0CisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMSAgICAgICAgMjIKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzEyICAgICAgICAyMQorI2RlZmluZSBBT05fRVZFTlRfRElPMTMgICAgICAgIDIwCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNCAgICAgICAgMTkKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE1ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNiAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTcgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE4ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xOSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjAgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIxICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMiAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjMgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI0ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjYgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI3ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yOCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjkgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzMwICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8zMSAgICAgICAgMHgzRgorI2VuZGlmIC8vICggQ0NfR0VUX0NISVBfUEFDS0FHRSA9PSAweDUgKQorCisjaWYgKCBDQ19HRVRfQ0hJUF9QQUNLQUdFID09IDB4NCApCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgZWRnZSBkZXRlY3Rpb24gb24gd2FrZSB1cCBldmVudHMgZm9yIHRoZQorLy8gQ0MyNnh4IDR4NCBwYWNrYWdlZCBkZXZpY2UuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBBT05fRVZFTlRfRElPMCAgICAgICAgIDEzCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xICAgICAgICAgMTIKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIgICAgICAgICAxMQorI2RlZmluZSBBT05fRVZFTlRfRElPMyAgICAgICAgIDIKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzQgICAgICAgICAxCisjZGVmaW5lIEFPTl9FVkVOVF9ESU81ICAgICAgICAgMjYKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzYgICAgICAgICAyNQorI2RlZmluZSBBT05fRVZFTlRfRElPNyAgICAgICAgIDI0CisjZGVmaW5lIEFPTl9FVkVOVF9ESU84ICAgICAgICAgMjMKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzkgICAgICAgICAyMgorI2RlZmluZSBBT05fRVZFTlRfRElPMTAgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzExICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xMiAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTMgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE0ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xNSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTYgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzE3ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8xOCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMTkgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIwICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yMSAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjIgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzIzICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjUgICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI2ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8yNyAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMjggICAgICAgIDB4M0YKKyNkZWZpbmUgQU9OX0VWRU5UX0RJTzI5ICAgICAgICAweDNGCisjZGVmaW5lIEFPTl9FVkVOVF9ESU8zMCAgICAgICAgMHgzRgorI2RlZmluZSBBT05fRVZFTlRfRElPMzEgICAgICAgIDB4M0YKKyNlbmRpZiAvLyAoIENDX0dFVF9DSElQX1BBQ0tBR0UgPT0gMHg0ICkKKworI2VuZGlmIC8vIGRlZmluZWQoIENDX0dFVF9DSElQX1BBQ0tBR0UgKQorI2VuZGlmIC8vIF9fSFdfREVWSUNFX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZXZlbnQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0MGRkOQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2V2ZW50LmgKQEAgLTAsMCArMSwzMjg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfZXZlbnRfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfRVZFTlRfSF9fCisjZGVmaW5lIF9fSFdfRVZFTlRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gRVZFTlQgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAwCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAzCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCA0CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCA1CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCA2CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCA3CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCA4CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCA5CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxMAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTEKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDEyCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxMworI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTQKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDE1CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxNgorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMTcKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDE4CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAxOQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjAKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDIxCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyMgorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjMKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDI0CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyNQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjYKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDI3CisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAyOAorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMjkKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDMwCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgQ1BVIEludGVycnVwdCAzMQorI2RlZmluZSBFVkVOVF9PX0NQVUlSUVNFTDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIENQVSBJbnRlcnJ1cHQgMzIKKyNkZWZpbmUgRVZFTlRfT19DUFVJUlFTRUwzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBDUFUgSW50ZXJydXB0IDMzCisjZGVmaW5lIEVWRU5UX09fQ1BVSVJRU0VMMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDAKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBSRkMgRXZlbnQgMQorI2RlZmluZSBFVkVOVF9PX1JGQ1NFTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCAyCisjZGVmaW5lIEVWRU5UX09fUkZDU0VMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDMKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBSRkMgRXZlbnQgNAorI2RlZmluZSBFVkVOVF9PX1JGQ1NFTDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTEwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCA1CisjZGVmaW5lIEVWRU5UX09fUkZDU0VMNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDYKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUw2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBSRkMgRXZlbnQgNworI2RlZmluZSBFVkVOVF9PX1JGQ1NFTDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTFDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIFJGQyBFdmVudCA4CisjZGVmaW5lIEVWRU5UX09fUkZDU0VMOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgUkZDIEV2ZW50IDkKKyNkZWZpbmUgRVZFTlRfT19SRkNTRUw5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEyNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQwIDAKKyNkZWZpbmUgRVZFTlRfT19HUFQwQUNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQwIDEKKyNkZWZpbmUgRVZFTlRfT19HUFQwQkNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQxIDAKKyNkZWZpbmUgRVZFTlRfT19HUFQxQUNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQxIDEKKyNkZWZpbmUgRVZFTlRfT19HUFQxQkNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQyIDAKKyNkZWZpbmUgRVZFTlRfT19HUFQyQUNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQyIDEKKyNkZWZpbmUgRVZFTlRfT19HUFQyQkNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxIFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxU1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxIFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDFCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTBDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDIgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDJTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTEwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDIgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMkJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MTQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMyBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIM1NTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MTgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMyBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gzQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUxQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA0IFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g0U1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUyMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA0IFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDRCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTI0CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDUgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDVTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTI4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDUgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNINUJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MkMKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgNiBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNINlNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MzAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgNiBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g2QlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUzNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA3IFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g3U1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUzOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCA3IFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDdCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTNDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDggU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDhTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTQwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDggUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIOEJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NDQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgOSBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIOVNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NDgKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgOSBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0g5QlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU0QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxMCBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTBTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NTAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTAgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTBCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1NTQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTEgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDExU1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTU4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDExIFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDExQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTVDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDEyIFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxMlNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2MAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxMiBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxMkJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2NAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxMyBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxM0JTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU2QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxNCBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxNEJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU3NAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxNSBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gxNUJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDU3QworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAxNiBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTZTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1ODAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTYgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMTZCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1ODQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMTcgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDE3U1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNTg4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDE3IFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDE3QlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNThDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDIxIFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyMVNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDVBOAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyMSBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyMUJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDVBQworCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyMiBTUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMjJTU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1QjAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMjIgUkVRCisjZGVmaW5lIEVWRU5UX09fVURNQUNIMjJCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1QjQKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgRE1BIENoYW5uZWwgMjMgU1JFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDIzU1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNUI4CisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDIzIFJFUQorI2RlZmluZSBFVkVOVF9PX1VETUFDSDIzQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNUJDCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIERNQSBDaGFubmVsIDI0IFNSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyNFNTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDVDMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBETUEgQ2hhbm5lbCAyNCBSRVEKKyNkZWZpbmUgRVZFTlRfT19VRE1BQ0gyNEJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDVDNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQzIDAKKyNkZWZpbmUgRVZFTlRfT19HUFQzQUNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBHUFQzIDEKKyNkZWZpbmUgRVZFTlRfT19HUFQzQkNBUFRTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwNAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBBVVggU3Vic2NyaWJlciAwCisjZGVmaW5lIEVWRU5UX09fQVVYU0VMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKworLy8gT3V0cHV0IFNlbGVjdGlvbiBmb3IgTk1JIFN1YnNjcmliZXIgMAorI2RlZmluZSBFVkVOVF9PX0NNM05NSVNFTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisKKy8vIE91dHB1dCBTZWxlY3Rpb24gZm9yIEkyUyBTdWJzY3JpYmVyIDAKKyNkZWZpbmUgRVZFTlRfT19JMlNTVE1QU0VMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDkwMAorCisvLyBPdXRwdXQgU2VsZWN0aW9uIGZvciBGUlogU3Vic2NyaWJlciAwCisjZGVmaW5lIEVWRU5UX09fRlJaU0VMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDAKKworLy8gU2V0IG9yIENsZWFyIFNvZnR3YXJlIEV2ZW50cworI2RlZmluZSBFVkVOVF9PX1NXRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBJMkNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJDCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDFfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDFfRVZfSTJDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDJfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDRfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMNF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw0X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDRfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDVfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMNV9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw1X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDVfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQVVYX1NXRVYwICAgICAgICAgICAgICAgIEFVWCBzb2Z0d2FyZSBldmVudCAwLCB0cmlnZ2VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMCwgYWxzbyBhdmFpbGFibGUgYXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZFTlQwIEFPTiB3YWtlIHVwIGV2ZW50LgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE1DVSBkb21haW4gd2FrZXVwIGNvbnRyb2wKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6TUNVV1VTRUwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVggZG9tYWluIHdha2V1cCBjb250cm9sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkFVWFdVU0VMCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDZfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMNl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw2X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDZfRVZfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw3X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDdfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMN19FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw3X0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUw4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMOF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw4X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDhfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMOF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMOV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUw5X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDlfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMOV9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTBfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMTEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gUkZDX0NNRF9BQ0sgICAgICAgICAgICAgIFJGQyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1dmlhbGVudCB0byBSRkNfREJFTEw6UkZBQ0tJRkcuQUNLRkxBRworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDExX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMV9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBJMlNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJTCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEyX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTJfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxMl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEyX0VWX0kyU19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDEzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9TV0VWMSAgICAgICAgICAgICAgICBBVVggc29mdHdhcmUgZXZlbnQgMSwgdHJpZ2dlcmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjEsIGFsc28gYXZhaWxhYmxlIGFzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWRU5UMiBBT04gd2FrZSB1cCBldmVudC4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1UgZG9tYWluIHdha2V1cCBjb250cm9sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOk1DVVdVU0VMCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYIGRvbWFpbiB3YWtldXAgY29udHJvbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpBVVhXVVNFTAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxM19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDEzX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTNfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxM19FVl9BVVhfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBXRFRfSVJRICAgICAgICAgICAgICAgICAgV2F0Y2hkb2cgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUOkNUTC5JTlRFTgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE0X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTRfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNF9FVl9XRFRfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQwQSAgICAgICAgICAgICAgICAgICAgR1BUMEEgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDA6VEFNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE1X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTVfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNV9FVl9HUFQwQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQwQiAgICAgICAgICAgICAgICAgICAgR1BUMEIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDA6VEJNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE2X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTZfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxNl9FVl9HUFQwQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQxQSAgICAgICAgICAgICAgICAgICAgR1BUMUEgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDE6VEFNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxN19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE3X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTdfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxN19FVl9HUFQxQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQxQiAgICAgICAgICAgICAgICAgICAgR1BUMUIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDE6VEJNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxOF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE4X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMThfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxOF9FVl9HUFQxQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwxOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQyQSAgICAgICAgICAgICAgICAgICAgR1BUMkEgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDI6VEFNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxOV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDE5X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMTlfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwxOV9FVl9HUFQyQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQyQiAgICAgICAgICAgICAgICAgICAgR1BUMkIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDI6VEJNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMF9FVl9HUFQyQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQzQSAgICAgICAgICAgICAgICAgICAgR1BUM0EgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDM6VEFNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMV9FVl9HUFQzQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQzQiAgICAgICAgICAgICAgICAgICAgR1BUM0IgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDM6VEJNUgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIyX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjJfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyMl9FVl9HUFQzQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBDUllQVE9fUkVTVUxUX0FWQUlMX0lSUSAgQ1JZUFRPIHJlc3VsdCBhdmFpbGFibGUgaW50ZXJ1cHQgZXZlbnQsIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBmb3VuZCBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPOklSUVNUQVQuUkVTVUxUX0FWQUlMLiBDb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPOklSUVNUQVQuUkVTVUxUX0FWQUlMCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIzX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjNfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyM19FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDIzX0VWX0NSWVBUT19SRVNVTFRfQVZBSUxfSVJRICAgICAgICAgICAgICAgIDB4MDAwMDAwNUQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDI0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIERNQV9ET05FX0NPTUIgICAgICAgICAgICBDb21iaW5lZCBETUEgZG9uZSwgY29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVETUEwOlJFUURPTkUKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjRfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI0X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjRfRVZfRE1BX0RPTkVfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gRE1BX0VSUiAgICAgICAgICAgICAgICAgIERNQSBidXMgZXJyb3IsIGNvcnJlc3BvbmRzIHRvIFVETUEwOkVSUk9SLlNUQVRVUworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI1X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjVfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNV9FVl9ETUFfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBGTEFTSCAgICAgICAgICAgICAgICAgICAgRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudCwgIHRoZSBzdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgRkxBU0g6RkVEQUNTVEFULkZTTV9ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIOkZFREFDU1RBVC5SVkZfSU5UCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI2X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjZfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyNl9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI2X0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDI3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYwICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAwLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyN19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI3X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjdfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyN19FVl9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19DUFVJUlFTRUwyOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI4X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjhfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyOF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI4X0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDI5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFPTl9QUk9HMCAgICAgICAgICAgICAgICBBT04gcHJvZ3JhbW1hYmxlIGV2ZW50IDAuIEV2ZW50IHNlbGVjdGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UICBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cwX0VWCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI5X0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMjlfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwyOV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDI5X0VWX0FPTl9QUk9HMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBSRkNfSU5fRVY1ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA1LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDUKKy8vIFJGQ19JTl9FVjQgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDQsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNAorLy8gQ1JZUFRPX0RNQV9ET05FX0lSUSAgICAgIENSWVBUTyBETUEgaW5wdXQgZG9uZSBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmdnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBDUllQVE86SVJRU1RBVC5ETUFfSU5fRE9ORS4gQ29udHJvbGxlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IENSWVBUTzpJUlFFTi5ETUFfSU5fRE9ORQorLy8gRE1BX0NIMThfRE9ORSAgICAgICAgICAgIERNQSBkb25lIGZvciBzb2Z0d2FyZSB0aWdnZXJlZCBVRE1BIGNoYW5uZWwgMTgsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIFVETUEwOlNPRlRSRVEKKy8vIERNQV9DSDBfRE9ORSAgICAgICAgICAgICBETUEgZG9uZSBmb3Igc29mdHdhcmUgdGlnZ2VyZWQgVURNQSBjaGFubmVsIDAsIHNlZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVETUEwOlNPRlRSRVEKKy8vIEFPTl9BVVhfU1dFVjAgICAgICAgICAgICBBVVggU29mdHdhcmUgZXZlbnQgMCwgQVVYX0VWQ1RMOlNXRVZTRVQuU1dFVjAKKy8vIEkyU19JUlEgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMlMKKy8vIEFPTl9QUk9HMiAgICAgICAgICAgICAgICBBT04gcHJvZ3JhbW1hYmxlIGV2ZW50IDIuIEV2ZW50IHNlbGVjdGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UIE1DVSBldmVudCBzZWxlY3RvciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6RVZUT01DVVNFTC5BT05fUFJPRzJfRVYKKy8vIEFPTl9QUk9HMSAgICAgICAgICAgICAgICBBT04gcHJvZ3JhbW1hYmxlIGV2ZW50IDEuIEV2ZW50IHNlbGVjdGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UIE1DVSBldmVudCBzZWxlY3RvciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6RVZUT01DVVNFTC5BT05fUFJPRzFfRVYKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX1JGQ19JTl9FVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfUkZDX0lOX0VWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9DUllQVE9fRE1BX0RPTkVfSVJRICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVFCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0RNQV9DSDE4X0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfRE1BX0NIMF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BT05fQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX0kyU19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzBfRVZfQU9OX1BST0cyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMF9FVl9BT05fUFJPRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMwX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDMxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMxX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzFfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMV9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMxX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0NQVUlSUVNFTDMyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzJfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzMl9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMyX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzJfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ1BVSVJRU0VMMzMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gVFJOR19JUlEgICAgICAgICAgICAgICAgIFRSTkcgSW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IFRSTkc6SVJRRU4uRU4KKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzNfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9DUFVJUlFTRUwzM19FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0NQVUlSUVNFTDMzX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQ1BVSVJRU0VMMzNfRVZfVFJOR19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUwwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUwxX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDFfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMV9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQxQV9DTVAgICAgICAgICAgICAgICAgR1BUMUEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRBTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUwyX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDJfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMMl9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMM19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUwzX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDNfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMM19FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUw0X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDRfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQyQl9DTVAgICAgICAgICAgICAgICAgR1BUMkIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRCTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUw1X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDVfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNV9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNl9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUw2X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDZfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMNl9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKyNkZWZpbmUgRVZFTlRfUkZDU0VMN19FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUw3X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDdfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMN19FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fUkZDU0VMOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDhfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9SRkNTRUw4X0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDhfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1JGQ1NFTDkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFVWF9PQlNNVVgwICAgICAgICAgICAgICBMb29wYmFjayBvZiBPQlNNVVgwIHRocm91Z2ggQVVYLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuT0JTTVVYMAorLy8gQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMIEFVWCBBREMgRklGTyB3YXRlcm1hcmsgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFVWCBBREMgZG9uZSwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19ET05FCisvLyBBVVhfU01QSF9BVVRPVEFLRV9ET05FICAgQXV0b3Rha2UgZXZlbnQgZnJvbSBBVVggc2VtYXBob3JlLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NNUEg6QVVUT1RBS0UKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggdGltZXIgMSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMV9FVgorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCB0aW1lciAwIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIwX0VWCisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgQVVYIFREQyBtZWFzdXJlbWVudCBkb25lIGV2ZW50LCBjb3JyZXNwb25kcyB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVERDX0RPTkUgYW5kIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9UREMgc3RhdHVzIEFVWF9UREM6U1RBVC5ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQiBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBTV0VWMSAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMSwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjEKKy8vIFNXRVYwICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAwLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMAorLy8gQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEgIENSWVBUTyByZXN1bHQgYXZhaWxhYmxlIGludGVydXB0IGV2ZW50LCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZm91bmQgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUTzpJUlFTVEFULlJFU1VMVF9BVkFJTC4gQ29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUTzpJUlFTVEFULlJFU1VMVF9BVkFJTAorLy8gRE1BX0RPTkVfQ09NQiAgICAgICAgICAgIENvbWJpbmVkIERNQSBkb25lLCBjb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVURNQTA6UkVRRE9ORQorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBXRFRfSVJRICAgICAgICAgICAgICAgICAgV2F0Y2hkb2cgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgV0RUOkNUTC5JTlRFTgorLy8gQU9OX0FVWF9TV0VWMCAgICAgICAgICAgIEFVWCBTb2Z0d2FyZSBldmVudCAwLCBBVVhfRVZDVEw6U1dFVlNFVC5TV0VWMAorLy8gSTJTX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyUworLy8gQU9OX1BST0cxICAgICAgICAgICAgICAgIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMS4gRXZlbnQgc2VsZWN0ZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQgTUNVIGV2ZW50IHNlbGVjdG9yLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpFVlRPTUNVU0VMLkFPTl9QUk9HMV9FVgorLy8gQU9OX1BST0cwICAgICAgICAgICAgICAgIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMC4gRXZlbnQgc2VsZWN0ZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQgIE1DVSBldmVudCBzZWxlY3RvciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6RVZUT01DVVNFTC5BT05fUFJPRzBfRVYKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NQorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUQKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9ETUFfRE9ORV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX1dEVF9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQU9OX0FVWF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9JMlNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFVkVOVF9SRkNTRUw5X0VWX0FPTl9QUk9HMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVWRU5UX1JGQ1NFTDlfRVZfQU9OX1BST0cwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVZFTlRfUkZDU0VMOV9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fR1BUMEFDQVBUU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gUkZDX0lOX0VWNSAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNSwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ1CisvLyBSRkNfSU5fRVY0ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA0LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDQKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQxIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQwIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIEdQVDNCX0NNUCAgICAgICAgICAgICAgICBHUFQzQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEJNUi5UQ0FDVAorLy8gR1BUM0FfQ01QICAgICAgICAgICAgICAgIEdQVDNBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQU1SLlRDQUNUCisvLyBHUFQyQl9DTVAgICAgICAgICAgICAgICAgR1BUMkIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRCTVIuVENBQ1QKKy8vIEdQVDJBX0NNUCAgICAgICAgICAgICAgICBHUFQyQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEFNUi5UQ0FDVAorLy8gR1BUMUJfQ01QICAgICAgICAgICAgICAgIEdQVDFCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQk1SLlRDQUNUCisvLyBHUFQxQV9DTVAgICAgICAgICAgICAgICAgR1BUMUEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRBTVIuVENBQ1QKKy8vIEdQVDBCX0NNUCAgICAgICAgICAgICAgICBHUFQwQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEJNUi5UQ0FDVAorLy8gR1BUMEFfQ01QICAgICAgICAgICAgICAgIEdQVDBBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQU1SLlRDQUNUCisvLyBVQVJUMF9DT01CICAgICAgICAgICAgICAgVUFSVDAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaGVyZSBVQVJUMDpNSVMKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorLy8gUkZDX0NQRV8wICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUwIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8wIGV2ZW50CisvLyBSRkNfSFdfQ09NQiAgICAgICAgICAgICAgQ29tYmluZWQgUkNGIGhhcmR3YXJlIGludGVycnVwdCwgY29ycmVzcG9uZGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgaGVyZSBSRkNfREJFTEw6UkZIV0lGRworLy8gUkZDX0NNRF9BQ0sgICAgICAgICAgICAgIFJGQyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1dmlhbGVudCB0byBSRkNfREJFTEw6UkZBQ0tJRkcuQUNLRkxBRworLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gSTJDX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyQworLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworLy8gQU9OX0dQSU9fRURHRSAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IGV2ZW50IGZyb20gSU9DLiBDb25maWd1cmVkZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5FREdFX0lSUV9FTiBhbmQgIElPQzpJT0NGR24uRURHRV9ERVQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncworLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9SRkNfSU5fRVY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1JGQ19JTl9FVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU2CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTUKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0dQVDNCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0dQVDJBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0dQVDBCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNECisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9SRkNfQ1BFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9JMkNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgRVZFTlRfR1BUMEFDQVBUU0VMX0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBFVkVOVF9HUFQwQUNBUFRTRUxfRVZfQU9OX0dQSU9fRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVWRU5UX0dQVDBBQ0FQVFNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0dQVDBCQ0FQVFNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFJGQ19JTl9FVjUgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDUsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNQorLy8gUkZDX0lOX0VWNCAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNCwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ0CisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UMSB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UMCB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBSRkNfQ1BFXzEgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTEgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzEgZXZlbnQKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIEFVWF9DT01CICAgICAgICAgICAgICAgICBBVVggY29tYmluZWQgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpcyBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEkyQ19JUlEgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMkMKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDcxCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA2RgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZFCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkQKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZCCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUkZDX0lOX0VWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9SRkNfSU5fRVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUYKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU1CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0dQVDNBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0dQVDFCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0dQVDBBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfSTJDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEVWRU5UX0dQVDBCQ0FQVFNFTF9FVl9BT05fUlRDX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRVZFTlRfR1BUMEJDQVBUU0VMX0VWX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9HUFQwQkNBUFRTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19HUFQxQUNBUFRTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEFPTl9SVENfVVBEICAgICAgICAgICAgICBSVEMgcGVyaW9kaWMgZXZlbnQgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLlJUQ19VUERfRU4KKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFVWF9PQlNNVVgwICAgICAgICAgICAgICBMb29wYmFjayBvZiBPQlNNVVgwIHRocm91Z2ggQVVYLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuT0JTTVVYMAorLy8gQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMIEFVWCBBREMgRklGTyB3YXRlcm1hcmsgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFVWCBBREMgZG9uZSwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19ET05FCisvLyBBVVhfU01QSF9BVVRPVEFLRV9ET05FICAgQXV0b3Rha2UgZXZlbnQgZnJvbSBBVVggc2VtYXBob3JlLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NNUEg6QVVUT1RBS0UKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggdGltZXIgMSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMV9FVgorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCB0aW1lciAwIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIwX0VWCisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgQVVYIFREQyBtZWFzdXJlbWVudCBkb25lIGV2ZW50LCBjb3JyZXNwb25kcyB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVERDX0RPTkUgYW5kIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9UREMgc3RhdHVzIEFVWF9UREM6U1RBVC5ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQiBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBSRkNfSU5fRVY1ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA1LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDUKKy8vIFJGQ19JTl9FVjQgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDQsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNAorLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDMgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDIgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKy8vIEdQVDJCX0NNUCAgICAgICAgICAgICAgICBHUFQyQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEJNUi5UQ0FDVAorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKy8vIEdQVDFBX0NNUCAgICAgICAgICAgICAgICBHUFQxQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEFNUi5UQ0FDVAorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisvLyBSRkNfQ01EX0FDSyAgICAgICAgICAgICAgUkZDIERvb3JiZWxsIENvbW1hbmQgQWNrbm93bGVkZ2VtZW50IEludGVycnVwdCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlcXV2aWFsZW50IHRvIFJGQ19EQkVMTDpSRkFDS0lGRy5BQ0tGTEFHCisvLyBGTEFTSCAgICAgICAgICAgICAgICAgICAgRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudCwgIHRoZSBzdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgRkxBU0g6RkVEQUNTVEFULkZTTV9ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIOkZFREFDU1RBVC5SVkZfSU5UCisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBJMkNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJDCisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1JGQ19JTl9FVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfUkZDX0lOX0VWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVGCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NworI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0dQVDJCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0dQVDFBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNFCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9SRkNfSFdfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BVVhfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBFVkVOVF9HUFQxQUNBUFRTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0dQVDFBQ0FQVFNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfR1BUMUFDQVBUU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fR1BUMUJDQVBUU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gUkZDX0lOX0VWNSAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNSwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ1CisvLyBSRkNfSU5fRVY0ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA0LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDQKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQzIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQyIHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIEdQVDNCX0NNUCAgICAgICAgICAgICAgICBHUFQzQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEJNUi5UQ0FDVAorLy8gR1BUM0FfQ01QICAgICAgICAgICAgICAgIEdQVDNBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQU1SLlRDQUNUCisvLyBHUFQyQl9DTVAgICAgICAgICAgICAgICAgR1BUMkIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRCTVIuVENBQ1QKKy8vIEdQVDJBX0NNUCAgICAgICAgICAgICAgICBHUFQyQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEFNUi5UQ0FDVAorLy8gR1BUMUJfQ01QICAgICAgICAgICAgICAgIEdQVDFCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQk1SLlRDQUNUCisvLyBHUFQxQV9DTVAgICAgICAgICAgICAgICAgR1BUMUEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRBTVIuVENBQ1QKKy8vIEdQVDBCX0NNUCAgICAgICAgICAgICAgICBHUFQwQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEJNUi5UQ0FDVAorLy8gR1BUMEFfQ01QICAgICAgICAgICAgICAgIEdQVDBBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQU1SLlRDQUNUCisvLyBVQVJUMF9DT01CICAgICAgICAgICAgICAgVUFSVDAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaGVyZSBVQVJUMDpNSVMKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorLy8gUkZDX0NQRV8wICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUwIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8wIGV2ZW50CisvLyBSRkNfSFdfQ09NQiAgICAgICAgICAgICAgQ29tYmluZWQgUkNGIGhhcmR3YXJlIGludGVycnVwdCwgY29ycmVzcG9uZGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgaGVyZSBSRkNfREJFTEw6UkZIV0lGRworLy8gUkZDX0NNRF9BQ0sgICAgICAgICAgICAgIFJGQyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1dmlhbGVudCB0byBSRkNfREJFTEw6UkZBQ0tJRkcuQUNLRkxBRworLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gSTJDX0lSUSAgICAgICAgICAgICAgICAgIEludGVycnVwdCBldmVudCBmcm9tIEkyQworLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworLy8gQU9OX0dQSU9fRURHRSAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IGV2ZW50IGZyb20gSU9DLiBDb25maWd1cmVkZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5FREdFX0lSUV9FTiBhbmQgIElPQzpJT0NGR24uRURHRV9ERVQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncworLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9SRkNfSU5fRVY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1JGQ19JTl9FVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RgorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTcKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0dQVDNCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0dQVDJBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0dQVDBCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNECisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9SRkNfQ1BFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9JMkNfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgRVZFTlRfR1BUMUJDQVBUU0VMX0VWX0FPTl9SVENfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBFVkVOVF9HUFQxQkNBUFRTRUxfRVZfQU9OX0dQSU9fRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVWRU5UX0dQVDFCQ0FQVFNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0dQVDJBQ0FQVFNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFJGQ19JTl9FVjcgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDcsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNworLy8gUkZDX0lOX0VWNiAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNiwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ2CisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UNCB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UNCB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBSRkNfQ1BFXzEgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTEgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzEgZXZlbnQKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIEFVWF9DT01CICAgICAgICAgICAgICAgICBBVVggY29tYmluZWQgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpcyBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEkyQ19JUlEgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMkMKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDcxCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA2RgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZFCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkQKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZCCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUkZDX0lOX0VWNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYyCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9SRkNfSU5fRVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjEKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU5CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0dQVDNBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0dQVDFCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0dQVDBBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfSTJDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEVWRU5UX0dQVDJBQ0FQVFNFTF9FVl9BT05fUlRDX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRVZFTlRfR1BUMkFDQVBUU0VMX0VWX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9HUFQyQUNBUFRTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19HUFQyQkNBUFRTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEFPTl9SVENfVVBEICAgICAgICAgICAgICBSVEMgcGVyaW9kaWMgZXZlbnQgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLlJUQ19VUERfRU4KKy8vIEFVWF9BRENfSVJRICAgICAgICAgICAgICBBVVggQURDIGludGVycnVwdCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19JUlEuIFN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBmb3VuZCBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFVWF9PQlNNVVgwICAgICAgICAgICAgICBMb29wYmFjayBvZiBPQlNNVVgwIHRocm91Z2ggQVVYLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuT0JTTVVYMAorLy8gQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMIEFVWCBBREMgRklGTyB3YXRlcm1hcmsgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRklGT19BTE1PU1RfRlVMTAorLy8gQVVYX0FEQ19ET05FICAgICAgICAgICAgIEFVWCBBREMgZG9uZSwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19ET05FCisvLyBBVVhfU01QSF9BVVRPVEFLRV9ET05FICAgQXV0b3Rha2UgZXZlbnQgZnJvbSBBVVggc2VtYXBob3JlLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1NNUEg6QVVUT1RBS0UKKy8vIEFVWF9USU1FUjFfRVYgICAgICAgICAgICBBVVggdGltZXIgMSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMV9FVgorLy8gQVVYX1RJTUVSMF9FViAgICAgICAgICAgIEFVWCB0aW1lciAwIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIwX0VWCisvLyBBVVhfVERDX0RPTkUgICAgICAgICAgICAgQVVYIFREQyBtZWFzdXJlbWVudCBkb25lIGV2ZW50LCBjb3JyZXNwb25kcyB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVERDX0RPTkUgYW5kIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9UREMgc3RhdHVzIEFVWF9UREM6U1RBVC5ET05FCisvLyBBVVhfQ09NUEIgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQiBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQgorLy8gQVVYX0NPTVBBICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEEKKy8vIEFVWF9BT05fV1VfRVYgICAgICAgICAgICBBT04gd2FrZXVwIGV2ZW50LCBjb3JyZXNwb25kcyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQU9OX1dVX0VWCisvLyBSRkNfSU5fRVY3ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA3LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDcKKy8vIFJGQ19JTl9FVjYgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDYsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNgorLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDQgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDQgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gR1BUM0JfQ01QICAgICAgICAgICAgICAgIEdQVDNCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQk1SLlRDQUNUCisvLyBHUFQzQV9DTVAgICAgICAgICAgICAgICAgR1BUM0EgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRBTVIuVENBQ1QKKy8vIEdQVDJCX0NNUCAgICAgICAgICAgICAgICBHUFQyQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEJNUi5UQ0FDVAorLy8gR1BUMkFfQ01QICAgICAgICAgICAgICAgIEdQVDJBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQU1SLlRDQUNUCisvLyBHUFQxQl9DTVAgICAgICAgICAgICAgICAgR1BUMUIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRCTVIuVENBQ1QKKy8vIEdQVDFBX0NNUCAgICAgICAgICAgICAgICBHUFQxQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEFNUi5UQ0FDVAorLy8gR1BUMEJfQ01QICAgICAgICAgICAgICAgIEdQVDBCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQk1SLlRDQUNUCisvLyBHUFQwQV9DTVAgICAgICAgICAgICAgICAgR1BUMEEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRBTVIuVENBQ1QKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisvLyBSRkNfQ1BFXzAgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTAgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzAgZXZlbnQKKy8vIFJGQ19IV19DT01CICAgICAgICAgICAgICBDb21iaW5lZCBSQ0YgaGFyZHdhcmUgaW50ZXJydXB0LCBjb3JyZXNwb25kaW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBoZXJlIFJGQ19EQkVMTDpSRkhXSUZHCisvLyBSRkNfQ01EX0FDSyAgICAgICAgICAgICAgUkZDIERvb3JiZWxsIENvbW1hbmQgQWNrbm93bGVkZ2VtZW50IEludGVycnVwdCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBlcXV2aWFsZW50IHRvIFJGQ19EQkVMTDpSRkFDS0lGRy5BQ0tGTEFHCisvLyBGTEFTSCAgICAgICAgICAgICAgICAgICAgRkxBU0ggY29udHJvbGxlciBlcnJvciBldmVudCwgIHRoZSBzdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgRkxBU0g6RkVEQUNTVEFULkZTTV9ET05FIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIOkZFREFDU1RBVC5SVkZfSU5UCisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBJMkNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJDCisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1JGQ19JTl9FVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MgorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfUkZDX0lOX0VWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYxCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUEKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0dQVDJCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0dQVDFBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNFCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1VBUlQwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfU1NJMV9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1JGQ19DUEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9SRkNfSFdfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfRkxBU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BVVhfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBFVkVOVF9HUFQyQkNBUFRTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0dQVDJCQ0FQVFNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfR1BUMkJDQVBUU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMVNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gVUFSVDBfUlhfRE1BU1JFUSAgICAgICAgIFVBUlQwIFJYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwOkRNQUNUTC5SWERNQUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMVNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxU1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDFTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMVNTRUxfRVZfVUFSVDBfUlhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMUJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gVUFSVDBfUlhfRE1BQlJFUSAgICAgICAgIFVBUlQwIFJYIERNQSBidXJzdCByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDA6RE1BQ1RMLlJYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDFCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMUJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxQlNFTF9FVl9VQVJUMF9SWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyU1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBVQVJUMF9UWF9ETUFTUkVRICAgICAgICAgVUFSVDAgVFggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDA6RE1BQ1RMLlRYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gyU1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDJTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMlNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyU1NFTF9FVl9VQVJUMF9UWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBVQVJUMF9UWF9ETUFCUkVRICAgICAgICAgVUFSVDAgVFggRE1BIGJ1cnN0IHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMDpETUFDVEwuVFhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDJCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMkJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyQlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDJCU0VMX0VWX1VBUlQwX1RYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDNTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTBfUlhfRE1BU1JFUSAgICAgICAgICBTU0kwIFJYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuUlhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDNTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIM1NTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gzU1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDNTU0VMX0VWX1NTSTBfUlhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDNCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTBfUlhfRE1BQlJFUSAgICAgICAgICBTU0kwIFJYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuUlhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDNCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIM0JTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gzQlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDNCU0VMX0VWX1NTSTBfUlhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDRTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTBfVFhfRE1BU1JFUSAgICAgICAgICBTU0kwIFRYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuVFhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDRTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNINFNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g0U1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDRTU0VMX0VWX1NTSTBfVFhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDRCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTBfVFhfRE1BQlJFUSAgICAgICAgICBTU0kwIFRYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuVFhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDRCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNINEJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g0QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDRCU0VMX0VWX1NTSTBfVFhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDVTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDVCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDZTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDZCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDdTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9ETUFTUkVRICAgICAgICAgICAgICBETUEgc2luZ2xlIHJlcXVlc3QgZXZlbnQgZnJvbSBBVVgsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RE1BQ1RMCisjZGVmaW5lIEVWRU5UX1VETUFDSDdTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIN1NTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g3U1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDdTU0VMX0VWX0FVWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDdCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFVWF9ETUFCUkVRICAgICAgICAgICAgICBETUEgYnVyc3QgcmVxdWVzdCBldmVudCBmcm9tIEFVWCwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpETUFDVEwKKyNkZWZpbmUgRVZFTlRfVURNQUNIN0JTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0g3QlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDdCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIN0JTRUxfRVZfQVVYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIOFNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQVVYX1NXX0RNQUJSRVEgICAgICAgICAgIEFVWCBvYnNlcnZhdGlvbiBsb29wYmFjaworI2RlZmluZSBFVkVOVF9VRE1BQ0g4U1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDhTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIOFNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0g4U1NFTF9FVl9BVVhfU1dfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g4QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBVVhfU1dfRE1BQlJFUSAgICAgICAgICAgQVVYIG9ic2VydmF0aW9uIGxvb3BiYWNrCisjZGVmaW5lIEVWRU5UX1VETUFDSDhCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIOEJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g4QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDhCU0VMX0VWX0FVWF9TV19ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDlTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBHUFQzQl9ETUFCUkVRICAgICAgICAgICAgR1BUM0IgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUM0FfRE1BQlJFUSAgICAgICAgICAgIEdQVDNBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDJCX0RNQUJSRVEgICAgICAgICAgICBHUFQyQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQyQV9ETUFCUkVRICAgICAgICAgICAgR1BUMkEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMUJfRE1BQlJFUSAgICAgICAgICAgIEdQVDFCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDFBX0RNQUJSRVEgICAgICAgICAgICBHUFQxQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQwQl9ETUFCUkVRICAgICAgICAgICAgR1BUMEIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gR1BUMEFfRE1BQlJFUSAgICAgICAgICAgIEdQVDBBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIFRJRV9MT1cgICAgICAgICAgICAgICAgICBOb3QgdXNlZCB0aWVkIHRvIDAKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9HUFQzQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX0dQVDNBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfR1BUMkJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9HUFQyQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUxCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX0dQVDFCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfR1BUMUFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9HUFQwQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRFCisjZGVmaW5lIEVWRU5UX1VETUFDSDlTU0VMX0VWX0dQVDBBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIOVNTRUxfRVZfVElFX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5U1NFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0g5QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUzCisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIOUJTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RQorI2RlZmluZSBFVkVOVF9VRE1BQ0g5QlNFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRECisjZGVmaW5lIEVWRU5UX1VETUFDSDlCU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDEwU1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBUSUVfTE9XICAgICAgICAgICAgICAgICAgTm90IHVzZWQgdGllZCB0byAwCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX0dQVDNCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfR1BUM0FfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUzCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9HUFQyQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX0dQVDJBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfR1BUMUJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9HUFQxQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX0dQVDBCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMFNTRUxfRVZfR1BUMEFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRECisjZGVmaW5lIEVWRU5UX1VETUFDSDEwU1NFTF9FVl9USUVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBTU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTBCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBHUFQzQl9ETUFCUkVRICAgICAgICAgICAgR1BUM0IgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUM0FfRE1BQlJFUSAgICAgICAgICAgIEdQVDNBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDJCX0RNQUJSRVEgICAgICAgICAgICBHUFQyQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQyQV9ETUFCUkVRICAgICAgICAgICAgR1BUMkEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMUJfRE1BQlJFUSAgICAgICAgICAgIEdQVDFCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDFBX0RNQUJSRVEgICAgICAgICAgICBHUFQxQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQwQl9ETUFCUkVRICAgICAgICAgICAgR1BUMEIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gR1BUMEFfRE1BQlJFUSAgICAgICAgICAgIEdQVDBBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUxCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMEJTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRFCisjZGVmaW5lIEVWRU5UX1VETUFDSDEwQlNFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTBCU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTFTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBHUFQzQl9ETUFCUkVRICAgICAgICAgICAgR1BUM0IgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUM0FfRE1BQlJFUSAgICAgICAgICAgIEdQVDNBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDJCX0RNQUJSRVEgICAgICAgICAgICBHUFQyQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQyQV9ETUFCUkVRICAgICAgICAgICAgR1BUMkEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMUJfRE1BQlJFUSAgICAgICAgICAgIEdQVDFCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDFBX0RNQUJSRVEgICAgICAgICAgICBHUFQxQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQwQl9ETUFCUkVRICAgICAgICAgICAgR1BUMEIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gR1BUMEFfRE1BQlJFUSAgICAgICAgICAgIEdQVDBBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIFRJRV9MT1cgICAgICAgICAgICAgICAgICBOb3QgdXNlZCB0aWVkIHRvIDAKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfR1BUM0JfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9HUFQzQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX0dQVDJCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfR1BUMkFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUxCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9HUFQxQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX0dQVDFBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfR1BUMEJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRFCisjZGVmaW5lIEVWRU5UX1VETUFDSDExU1NFTF9FVl9HUFQwQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFTU0VMX0VWX1RJRV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMVNTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxMUJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEdQVDNCX0RNQUJSRVEgICAgICAgICAgICBHUFQzQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQzQV9ETUFCUkVRICAgICAgICAgICAgR1BUM0EgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUMkJfRE1BQlJFUSAgICAgICAgICAgIEdQVDJCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDJBX0RNQUJSRVEgICAgICAgICAgICBHUFQyQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQxQl9ETUFCUkVRICAgICAgICAgICAgR1BUMUIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMUFfRE1BQlJFUSAgICAgICAgICAgIEdQVDFBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDBCX0RNQUJSRVEgICAgICAgICAgICBHUFQwQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQwQV9ETUFCUkVRICAgICAgICAgICAgR1BUMEEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9HUFQzQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX0dQVDNBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfR1BUMkJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUyCisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9HUFQyQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX0dQVDFCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfR1BUMUFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRGCisjZGVmaW5lIEVWRU5UX1VETUFDSDExQlNFTF9FVl9HUFQwQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTFCU0VMX0VWX0dQVDBBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMUJTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxMlNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQvd3JpdGUgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIEFMV0FZU19BQ1RJVkUgICAgICAgICAgICBBbHdheXMgYXNzZXJ0ZWQKKy8vIEdQVDNCX0RNQUJSRVEgICAgICAgICAgICBHUFQzQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQzQV9ETUFCUkVRICAgICAgICAgICAgR1BUM0EgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpETUFFVgorLy8gR1BUMkJfRE1BQlJFUSAgICAgICAgICAgIEdQVDJCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDJBX0RNQUJSRVEgICAgICAgICAgICBHUFQyQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOkRNQUVWCisvLyBHUFQxQl9ETUFCUkVRICAgICAgICAgICAgR1BUMUIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMUFfRE1BQlJFUSAgICAgICAgICAgIEdQVDFBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6RE1BRVYKKy8vIEdQVDBCX0RNQUJSRVEgICAgICAgICAgICBHUFQwQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQwQV9ETUFCUkVRICAgICAgICAgICAgR1BUMEEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpETUFFVgorLy8gVElFX0xPVyAgICAgICAgICAgICAgICAgIE5vdCB1c2VkIHRpZWQgdG8gMAorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9HUFQzQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX0dQVDNBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfR1BUMkJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUyCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9HUFQyQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX0dQVDFCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfR1BUMUFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRGCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9HUFQwQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJTU0VMX0VWX0dQVDBBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMlNTRUxfRVZfVElFX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisjZGVmaW5lIEVWRU5UX1VETUFDSDEyU1NFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDEyQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX0dQVDNCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfR1BUM0FfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUzCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9HUFQyQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX0dQVDJBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfR1BUMUJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9HUFQxQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTJCU0VMX0VWX0dQVDBCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxMkJTRUxfRVZfR1BUMEFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRECisjZGVmaW5lIEVWRU5UX1VETUFDSDEyQlNFTF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDEzQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBT05fUFJPRzIgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAyLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cyX0VWCisjZGVmaW5lIEVWRU5UX1VETUFDSDEzQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTNCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxM0JTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDEzQlNFTF9FVl9BT05fUFJPRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDE0QlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQ1BVX0hBTFRFRCAgICAgICAgICAgICAgIENQVSBoYWx0ZWQKKy8vIEFPTl9SVENfVVBEICAgICAgICAgICAgICBSVEMgcGVyaW9kaWMgZXZlbnQgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLlJUQ19VUERfRU4KKy8vIEFVWF9ETUFCUkVRICAgICAgICAgICAgICBETUEgYnVyc3QgcmVxdWVzdCBldmVudCBmcm9tIEFVWCwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpETUFDVEwKKy8vIEFVWF9ETUFTUkVRICAgICAgICAgICAgICBETUEgc2luZ2xlIHJlcXVlc3QgZXZlbnQgZnJvbSBBVVgsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RE1BQ1RMCisvLyBBVVhfU1dfRE1BQlJFUSAgICAgICAgICAgQVVYIG9ic2VydmF0aW9uIGxvb3BiYWNrCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gVFJOR19JUlEgICAgICAgICAgICAgICAgIFRSTkcgSW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IFRSTkc6SVJRRU4uRU4KKy8vIFNXRVYzICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAzLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMworLy8gU1dFVjIgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDIsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYyCisvLyBTV0VWMSAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMSwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjEKKy8vIFNXRVYwICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAwLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMAorLy8gV0RUX05NSSAgICAgICAgICAgICAgICAgIFdhdGNoZG9nIG5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBieSBXRFQ6Q1RMLklOVFRZUEUKKy8vIFJGQ19JTl9FVjcgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDcsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNworLy8gUkZDX0lOX0VWNiAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNiwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ2CisvLyBSRkNfSU5fRVY1ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA1LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDUKKy8vIFJGQ19JTl9FVjQgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDQsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNAorLy8gQ1JZUFRPX0RNQV9ET05FX0lSUSAgICAgIENSWVBUTyBETUEgaW5wdXQgZG9uZSBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmdnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBpcyBDUllQVE86SVJRU1RBVC5ETUFfSU5fRE9ORS4gQ29udHJvbGxlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IENSWVBUTzpJUlFFTi5ETUFfSU5fRE9ORQorLy8gQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEgIENSWVBUTyByZXN1bHQgYXZhaWxhYmxlIGludGVydXB0IGV2ZW50LCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZm91bmQgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUTzpJUlFTVEFULlJFU1VMVF9BVkFJTC4gQ29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUTzpJUlFTVEFULlJFU1VMVF9BVkFJTAorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDcgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDYgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDQgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDQgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDMgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDIgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDEgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBvcnQgY2FwdHVyZSBldmVudCBmcm9tIElPQywgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uUE9SVF9JRC4gRXZlbnRzIG9uIHBvcnRzIGNvbmZpZ3VyZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVOVU0gUE9SVF9FVkVOVDAgd2lsIGJlIHJvdXRlZCBoZXJlLgorLy8gR1BUM0JfRE1BQlJFUSAgICAgICAgICAgIEdQVDNCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6RE1BRVYKKy8vIEdQVDNBX0RNQUJSRVEgICAgICAgICAgICBHUFQzQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOkRNQUVWCisvLyBHUFQyQl9ETUFCUkVRICAgICAgICAgICAgR1BUMkIgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpETUFFVgorLy8gR1BUMkFfRE1BQlJFUSAgICAgICAgICAgIEdQVDJBIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6RE1BRVYKKy8vIEdQVDFCX0RNQUJSRVEgICAgICAgICAgICBHUFQxQiBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOkRNQUVWCisvLyBHUFQxQV9ETUFCUkVRICAgICAgICAgICAgR1BUMUEgRE1BIHRyaWdnZXIgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpETUFFVgorLy8gR1BUMEJfRE1BQlJFUSAgICAgICAgICAgIEdQVDBCIERNQSB0cmlnZ2VyIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6RE1BRVYKKy8vIEdQVDBBX0RNQUJSRVEgICAgICAgICAgICBHUFQwQSBETUEgdHJpZ2dlciBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOkRNQUVWCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfVFhfRE1BU1JFUSAgICAgICAgIFVBUlQwIFRYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwOkRNQUNUTC5UWERNQUUKKy8vIFVBUlQwX1RYX0RNQUJSRVEgICAgICAgICBVQVJUMCBUWCBETUEgYnVyc3QgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwOkRNQUNUTC5UWERNQUUKKy8vIFVBUlQwX1JYX0RNQVNSRVEgICAgICAgICBVQVJUMCBSWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMDpETUFDVEwuUlhETUFFCisvLyBVQVJUMF9SWF9ETUFCUkVRICAgICAgICAgVUFSVDAgUlggRE1BIGJ1cnN0IHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMDpETUFDVEwuUlhETUFFCisvLyBTU0kxX1RYX0RNQVNSRVEgICAgICAgICAgU1NJMSBUWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlRYRE1BRQorLy8gU1NJMV9UWF9ETUFCUkVRICAgICAgICAgIFNTSTEgVFggRE1BIGJ1cnN0IHJlcXVlc3QgLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5UWERNQUUKKy8vIFNTSTFfUlhfRE1BU1JFUSAgICAgICAgICBTU0kxIFJYIERNQSBzaW5nbGUgcmVxdWVzdCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuUlhETUFFCisvLyBTU0kxX1JYX0RNQUJSRVEgICAgICAgICAgU1NJMSBSWCBETUEgYnVyc3QgcmVxdWVzdCAsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlJYRE1BRQorLy8gU1NJMF9UWF9ETUFTUkVRICAgICAgICAgIFNTSTAgVFggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5UWERNQUUKKy8vIFNTSTBfVFhfRE1BQlJFUSAgICAgICAgICBTU0kwIFRYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuVFhETUFFCisvLyBTU0kwX1JYX0RNQVNSRVEgICAgICAgICAgU1NJMCBSWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlJYRE1BRQorLy8gU1NJMF9SWF9ETUFCUkVRICAgICAgICAgIFNTSTAgUlggRE1BIGJ1cnN0IHJlcXVlc3QgLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5SWERNQUUKKy8vIERNQV9ET05FX0NPTUIgICAgICAgICAgICBDb21iaW5lZCBETUEgZG9uZSwgY29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFVETUEwOlJFUURPTkUKKy8vIERNQV9FUlIgICAgICAgICAgICAgICAgICBETUEgYnVzIGVycm9yLCBjb3JyZXNwb25kcyB0byBVRE1BMDpFUlJPUi5TVEFUVVMKKy8vIFVBUlQwX0NPTUIgICAgICAgICAgICAgICBVQVJUMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBoZXJlIFVBUlQwOk1JUworLy8gU1NJMV9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kxOk1JUworLy8gU1NJMF9DT01CICAgICAgICAgICAgICAgIFNTSTAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlIGZvdW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZSBTU0kwOk1JUworLy8gUkZDX0NQRV8xICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUxIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8xIGV2ZW50CisvLyBBVVhfU1dFVjEgICAgICAgICAgICAgICAgQVVYIHNvZnR3YXJlIGV2ZW50IDEsIHRyaWdnZXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYxLCBhbHNvIGF2YWlsYWJsZSBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkVOVDIgQU9OIHdha2UgdXAgZXZlbnQuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTUNVIGRvbWFpbiB3YWtldXAgY29udHJvbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpNQ1VXVVNFTAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWCBkb21haW4gd2FrZXVwIGNvbnRyb2wKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fRVZFTlQ6QVVYV1VTRUwKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIFdEVF9JUlEgICAgICAgICAgICAgICAgICBXYXRjaGRvZyBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBXRFQ6Q1RMLklOVEVOCisvLyBETUFfQ0gxOF9ET05FICAgICAgICAgICAgRE1BIGRvbmUgZm9yIHNvZnR3YXJlIHRpZ2dlcmVkIFVETUEgY2hhbm5lbCAxOCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgVURNQTA6U09GVFJFUQorLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorLy8gRE1BX0NIMF9ET05FICAgICAgICAgICAgIERNQSBkb25lIGZvciBzb2Z0d2FyZSB0aWdnZXJlZCBVRE1BIGNoYW5uZWwgMCwgc2VlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVURNQTA6U09GVFJFUQorLy8gR1BUMUIgICAgICAgICAgICAgICAgICAgIEdQVDFCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQxOlRCTVIKKy8vIEdQVDFBICAgICAgICAgICAgICAgICAgICBHUFQxQSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMTpUQU1SCisvLyBHUFQwQiAgICAgICAgICAgICAgICAgICAgR1BUMEIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDA6VEJNUgorLy8gR1BUMEEgICAgICAgICAgICAgICAgICAgIEdQVDBBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQwOlRBTVIKKy8vIEdQVDNCICAgICAgICAgICAgICAgICAgICBHUFQzQiBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMzpUQk1SCisvLyBHUFQzQSAgICAgICAgICAgICAgICAgICAgR1BUM0EgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDM6VEFNUgorLy8gR1BUMkIgICAgICAgICAgICAgICAgICAgIEdQVDJCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQyOlRCTVIKKy8vIEdQVDJBICAgICAgICAgICAgICAgICAgICBHUFQyQSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMjpUQU1SCisvLyBBVVhfQ09NQiAgICAgICAgICAgICAgICAgQVVYIGNvbWJpbmVkIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBmbGFnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBT05fQVVYX1NXRVYwICAgICAgICAgICAgQVVYIFNvZnR3YXJlIGV2ZW50IDAsIEFVWF9FVkNUTDpTV0VWU0VULlNXRVYwCisvLyBJMkNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJDCisvLyBJMlNfSVJRICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGV2ZW50IGZyb20gSTJTCisvLyBBT05fUlRDX0NPTUIgICAgICAgICAgICAgRXZlbnQgZnJvbSBBT05fUlRDLCBjb250cm9sbGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9SVEM6Q1RMLkNPTUJfRVZfTUFTSyBzZXR0aW5nCisvLyBBT05fR1BJT19FREdFICAgICAgICAgICAgRWRnZSBkZXRlY3QgZXZlbnQgZnJvbSBJT0MuIENvbmZpZ3VyZWRlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLkVER0VfSVJRX0VOIGFuZCAgSU9DOklPQ0ZHbi5FREdFX0RFVAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzCisvLyBBT05fUFJPRzIgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAyLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cyX0VWCisvLyBBT05fUFJPRzEgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAxLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCBNQ1UgZXZlbnQgc2VsZWN0b3IsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0VWRU5UOkVWVE9NQ1VTRUwuQU9OX1BST0cxX0VWCisvLyBBT05fUFJPRzAgICAgICAgICAgICAgICAgQU9OIHByb2dyYW1tYWJsZSBldmVudCAwLiBFdmVudCBzZWxlY3RlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVCAgTUNVIGV2ZW50IHNlbGVjdG9yLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9FVkVOVDpFVlRPTUNVU0VMLkFPTl9QUk9HMF9FVgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9DUFVfSEFMVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FPTl9SVENfVVBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc2CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9TV19ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0FEQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDczCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfT0JTTVVYMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9BRENfRklGT19BTE1PU1RfRlVMTCAgICAgICAgICAgICAgMHgwMDAwMDA3MQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0FEQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfU01QSF9BVVRPVEFLRV9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwNkYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9USU1FUjFfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX1RJTUVSMF9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZECisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfVERDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9DT01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZBCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BVVhfQU9OX1dVX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjkKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1RSTkdfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1dFVjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9XRFRfTk1JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1JGQ19JTl9FVjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUkZDX0lOX0VWNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYxCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9SRkNfSU5fRVY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1JGQ19JTl9FVjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQ1JZUFRPX0RNQV9ET05FX0lSUSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9DUllQVE9fUkVTVUxUX0FWQUlMX0lSUSAgICAgICAgICAgICAgIDB4MDAwMDAwNUQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVCCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU1CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQzQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDNBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMkJfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUyCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQyQV9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDFCX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMUFfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQwQl9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDBBX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0RAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUM0JfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQzQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDJCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMkFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQxCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQxQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDFBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMEJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQwQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0QKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1VBUlQwX1RYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfVUFSVDBfVFhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9VQVJUMF9SWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1VBUlQwX1JYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMV9UWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TU0kxX1RYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTFfUlhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMV9SWF9ETUFCUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TU0kwX1RYX0RNQVNSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTBfVFhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMF9SWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9TU0kwX1JYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0RNQV9ET05FX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfRE1BX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9SRkNfQ1BFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9SRkNfSFdfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfV0RUX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9ETUFfQ0gxOF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfRE1BX0NIMF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQxQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUMEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQwQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfR1BUM0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9HUFQyQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0dQVDJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BT05fQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0kyQ19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfSTJTX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BT05fUlRDX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfQU9OX1BST0cyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEVWRU5UX1VETUFDSDE0QlNFTF9FVl9BT05fUFJPRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTRCU0VMX0VWX0FPTl9QUk9HMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNEJTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxNUJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNUJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE1QlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTVCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNUJTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxNlNTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1NJMV9SWF9ETUFTUkVRICAgICAgICAgIFNTSTEgUlggRE1BIHNpbmdsZSByZXF1ZXN0LCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5SWERNQUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTZTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxNlNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE2U1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTZTU0VMX0VWX1NTSTFfUlhfRE1BU1JFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMTZCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNTSTFfUlhfRE1BQlJFUSAgICAgICAgICBTU0kxIFJYIERNQSBidXJzdCByZXF1ZXN0ICwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFNTSTA6RE1BQ1IuUlhETUFFCisjZGVmaW5lIEVWRU5UX1VETUFDSDE2QlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTZCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gxNkJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDE2QlNFTF9FVl9TU0kxX1JYX0RNQUJSRVEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDE3U1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTU0kxX1RYX0RNQVNSRVEgICAgICAgICAgU1NJMSBUWCBETUEgc2luZ2xlIHJlcXVlc3QsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBTU0kwOkRNQUNSLlRYRE1BRQorI2RlZmluZSBFVkVOVF9VRE1BQ0gxN1NTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDE3U1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTdTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gxN1NTRUxfRVZfU1NJMV9UWF9ETUFTUkVRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gxN0JTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1NJMV9UWF9ETUFCUkVRICAgICAgICAgIFNTSTEgVFggRE1BIGJ1cnN0IHJlcXVlc3QgLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NJMDpETUFDUi5UWERNQUUKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTdCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gxN0JTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDE3QlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMTdCU0VMX0VWX1NTSTFfVFhfRE1BQlJFUSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMjFTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYwICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAwLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMVNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDIxU1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjFTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMVNTRUxfRVZfU1dFVjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyMUJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1dFVjAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDAsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYwCisjZGVmaW5lIEVWRU5UX1VETUFDSDIxQlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjFCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMUJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDIxQlNFTF9FVl9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDIyU1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTV0VWMSAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMSwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjEKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjJTU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gyMlNTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDIyU1NFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjJTU0VMX0VWX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMjJCU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYxICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAxLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMQorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMkJTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDIyQlNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjJCU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyMkJTRUxfRVZfU1dFVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyM1NTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1dFVjIgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDIsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYyCisjZGVmaW5lIEVWRU5UX1VETUFDSDIzU1NFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjNTU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyM1NTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDIzU1NFTF9FVl9TV0VWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX1VETUFDSDIzQlNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBTV0VWMiAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgZXZlbnQgMiwgdHJpZ2dlcmVkIGJ5IFNXRVYuU1dFVjIKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjNCU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9VRE1BQ0gyM0JTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX1VETUFDSDIzQlNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjNCU0VMX0VWX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fVURNQUNIMjRTU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkIG9ubHkgc2VsZWN0aW9uIHZhbHVlCisvLyBFTlVNczoKKy8vIFNXRVYzICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBldmVudCAzLCB0cmlnZ2VyZWQgYnkgU1dFVi5TV0VWMworI2RlZmluZSBFVkVOVF9VRE1BQ0gyNFNTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX1VETUFDSDI0U1NFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjRTU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9VRE1BQ0gyNFNTRUxfRVZfU1dFVjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY3CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19VRE1BQ0gyNEJTRUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBFVgorLy8KKy8vIFJlYWQgb25seSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gU1dFVjMgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGV2ZW50IDMsIHRyaWdnZXJlZCBieSBTV0VWLlNXRVYzCisjZGVmaW5lIEVWRU5UX1VETUFDSDI0QlNFTF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfVURNQUNIMjRCU0VMX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9VRE1BQ0gyNEJTRUxfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX1VETUFDSDI0QlNFTF9FVl9TV0VWMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjcKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBFVkVOVF9PX0dQVDNBQ0FQVFNFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gQU9OX1JUQ19VUEQgICAgICAgICAgICAgIFJUQyBwZXJpb2RpYyBldmVudCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuUlRDX1VQRF9FTgorLy8gQVVYX0FEQ19JUlEgICAgICAgICAgICAgIEFVWCBBREMgaW50ZXJydXB0IGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0lSUS4gU3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGZvdW5kIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQVVYX09CU01VWDAgICAgICAgICAgICAgIExvb3BiYWNrIG9mIE9CU01VWDAgdGhyb3VnaCBBVVgsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5PQlNNVVgwCisvLyBBVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgQVVYIEFEQyBGSUZPIHdhdGVybWFyayBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFEQ19GSUZPX0FMTU9TVF9GVUxMCisvLyBBVVhfQURDX0RPTkUgICAgICAgICAgICAgQVVYIEFEQyBkb25lLCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0RPTkUKKy8vIEFVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICBBdXRvdGFrZSBldmVudCBmcm9tIEFVWCBzZW1hcGhvcmUsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfU01QSDpBVVRPVEFLRQorLy8gQVVYX1RJTUVSMV9FViAgICAgICAgICAgIEFVWCB0aW1lciAxIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuVElNRVIxX0VWCisvLyBBVVhfVElNRVIwX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDAgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjBfRVYKKy8vIEFVWF9URENfRE9ORSAgICAgICAgICAgICBBVVggVERDIG1lYXN1cmVtZW50IGRvbmUgZXZlbnQsIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5URENfRE9ORSBhbmQgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX1REQyBzdGF0dXMgQVVYX1REQzpTVEFULkRPTkUKKy8vIEFVWF9DT01QQiAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBCIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBCCisvLyBBVVhfQ09NUEEgICAgICAgICAgICAgICAgQVVYIENvbXBhcmUgQSBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFVWF9DT01QQQorLy8gQVVYX0FPTl9XVV9FViAgICAgICAgICAgIEFPTiB3YWtldXAgZXZlbnQsIGNvcnJlc3BvbmRzIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BT05fV1VfRVYKKy8vIFJGQ19JTl9FVjcgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDcsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNworLy8gUkZDX0lOX0VWNiAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNiwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ2CisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UNyB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUG9ydCBjYXB0dXJlIGV2ZW50IGZyb20gSU9DLCBjb25maWd1cmVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5QT1JUX0lELiBFdmVudHMgb24gcG9ydHMgY29uZmlndXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggRU5VTSBQT1JUX0VWRU5UNiB3aWwgYmUgcm91dGVkIGhlcmUuCisvLyBHUFQzQl9DTVAgICAgICAgICAgICAgICAgR1BUM0IgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQzOlRCTVIuVENBQ1QKKy8vIEdQVDNBX0NNUCAgICAgICAgICAgICAgICBHUFQzQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEFNUi5UQ0FDVAorLy8gR1BUMkJfQ01QICAgICAgICAgICAgICAgIEdQVDJCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMjpUQk1SLlRDQUNUCisvLyBHUFQyQV9DTVAgICAgICAgICAgICAgICAgR1BUMkEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRBTVIuVENBQ1QKKy8vIEdQVDFCX0NNUCAgICAgICAgICAgICAgICBHUFQxQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDE6VEJNUi5UQ0FDVAorLy8gR1BUMUFfQ01QICAgICAgICAgICAgICAgIEdQVDFBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQU1SLlRDQUNUCisvLyBHUFQwQl9DTVAgICAgICAgICAgICAgICAgR1BUMEIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQwOlRCTVIuVENBQ1QKKy8vIEdQVDBBX0NNUCAgICAgICAgICAgICAgICBHUFQwQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEFNUi5UQ0FDVAorLy8gVUFSVDBfQ09NQiAgICAgICAgICAgICAgIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGhlcmUgVUFSVDA6TUlTCisvLyBTU0kxX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTE6TUlTCisvLyBTU0kwX0NPTUIgICAgICAgICAgICAgICAgU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQsIGludGVycnVwdCBmbGFncyBhcmUgZm91bmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlIFNTSTA6TUlTCisvLyBSRkNfQ1BFXzEgICAgICAgICAgICAgICAgQ29tYmluZWQgSW50ZXJydXB0IGZvciBDUEUgR2VuZXJhdGVkIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JyZXNwb25kaW5nIGZsYWdzIGFyZSBoZXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0RCRUxMOlJGQ1BFSUZHLiBPbmx5IGludGVycnVwdHMgc2VsZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIENQRTEgaW4gUkZDX0RCRUxMOlJGQ1BFSUZHIGNhbiB0cmlnZ2VyIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfQ1BFXzEgZXZlbnQKKy8vIFJGQ19DUEVfMCAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMCBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMCBldmVudAorLy8gUkZDX0hXX0NPTUIgICAgICAgICAgICAgIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQsIGNvcnJlc3BvbmRpbmcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIGlzIGhlcmUgUkZDX0RCRUxMOlJGSFdJRkcKKy8vIFJGQ19DTURfQUNLICAgICAgICAgICAgICBSRkMgRG9vcmJlbGwgQ29tbWFuZCBBY2tub3dsZWRnZW1lbnQgSW50ZXJydXB0LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGVxdXZpYWxlbnQgdG8gUkZDX0RCRUxMOlJGQUNLSUZHLkFDS0ZMQUcKKy8vIEZMQVNIICAgICAgICAgICAgICAgICAgICBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50LCAgdGhlIHN0YXR1cyBmbGFncworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBGTEFTSDpGRURBQ1NUQVQuRlNNX0RPTkUgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0g6RkVEQUNTVEFULlJWRl9JTlQKKy8vIEFVWF9DT01CICAgICAgICAgICAgICAgICBBVVggY29tYmluZWQgZXZlbnQsIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpcyBoZXJlIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MKKy8vIEFPTl9SVENfQ09NQiAgICAgICAgICAgICBFdmVudCBmcm9tIEFPTl9SVEMsIGNvbnRyb2xsZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX1JUQzpDVEwuQ09NQl9FVl9NQVNLIHNldHRpbmcKKy8vIEFPTl9HUElPX0VER0UgICAgICAgICAgICBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQy4gQ29uZmlndXJlZGVkIGJ5IHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElPQzpJT0NGR24uRURHRV9JUlFfRU4gYW5kICBJT0M6SU9DRkduLkVER0VfREVUCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQU9OX1JUQ19VUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc3CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfQURDX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzMKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9PQlNNVVgwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX0FEQ19GSUZPX0FMTU9TVF9GVUxMICAgICAgICAgICAgICAweDAwMDAwMDcxCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfQURDX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9TTVBIX0FVVE9UQUtFX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDA2RgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX1RJTUVSMV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZFCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfVElNRVIwX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkQKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9URENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQVVYX0NPTVBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZCCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BVVhfQ09NUEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkEKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9BT05fV1VfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUkZDX0lOX0VWNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYyCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9SRkNfSU5fRVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjEKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVCCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9HUFQzQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0dQVDNBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MworI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfR1BUMkJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9HUFQyQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDEKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0dQVDFCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfR1BUMUFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9HUFQwQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0UKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0dQVDBBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRAorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9TU0kxX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1NTSTBfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9SRkNfQ1BFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX1JGQ19IV19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfUkZDX0NNRF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9GTEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX0FVWF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBFVkVOVF9HUFQzQUNBUFRTRUxfRVZfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0dQVDNBQ0FQVFNFTF9FVl9BT05fR1BJT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfR1BUM0FDQVBUU0VMX0VWX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fR1BUM0JDQVBUU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBBT05fUlRDX1VQRCAgICAgICAgICAgICAgUlRDIHBlcmlvZGljIGV2ZW50IGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5SVENfVVBEX0VOCisvLyBBVVhfQURDX0lSUSAgICAgICAgICAgICAgQVVYIEFEQyBpbnRlcnJ1cHQgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfSVJRLiBTdGF0dXMgZmxhZ3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZm91bmQgaGVyZSBBVVhfRVZDVEw6RVZUT01DVUZMQUdTCisvLyBBVVhfT0JTTVVYMCAgICAgICAgICAgICAgTG9vcGJhY2sgb2YgT0JTTVVYMCB0aHJvdWdoIEFVWCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLk9CU01VWDAKKy8vIEFVWF9BRENfRklGT19BTE1PU1RfRlVMTCBBVVggQURDIEZJRk8gd2F0ZXJtYXJrIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQURDX0ZJRk9fQUxNT1NUX0ZVTEwKKy8vIEFVWF9BRENfRE9ORSAgICAgICAgICAgICBBVVggQURDIGRvbmUsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BRENfRE9ORQorLy8gQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgIEF1dG90YWtlIGV2ZW50IGZyb20gQVVYIHNlbWFwaG9yZSwgY29uZmlndXJlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9TTVBIOkFVVE9UQUtFCisvLyBBVVhfVElNRVIxX0VWICAgICAgICAgICAgQVVYIHRpbWVyIDEgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5USU1FUjFfRVYKKy8vIEFVWF9USU1FUjBfRVYgICAgICAgICAgICBBVVggdGltZXIgMCBldmVudCwgY29ycmVzcG9uZHMgdG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlRJTUVSMF9FVgorLy8gQVVYX1REQ19ET05FICAgICAgICAgICAgIEFVWCBUREMgbWVhc3VyZW1lbnQgZG9uZSBldmVudCwgY29ycmVzcG9uZHMgdG8gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLlREQ19ET05FIGFuZCB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfVERDIHN0YXR1cyBBVVhfVERDOlNUQVQuRE9ORQorLy8gQVVYX0NPTVBCICAgICAgICAgICAgICAgIEFVWCBDb21wYXJlIEIgZXZlbnQsIGNvcnJlc3BvbmRzIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUy5BVVhfQ09NUEIKKy8vIEFVWF9DT01QQSAgICAgICAgICAgICAgICBBVVggQ29tcGFyZSBBIGV2ZW50LCBjb3JyZXNwb25kcyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFVWF9FVkNUTDpFVlRPTUNVRkxBR1MuQVVYX0NPTVBBCisvLyBBVVhfQU9OX1dVX0VWICAgICAgICAgICAgQU9OIHdha2V1cCBldmVudCwgY29ycmVzcG9uZHMgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBVVhfRVZDVEw6RVZUT01DVUZMQUdTLkFPTl9XVV9FVgorLy8gUkZDX0lOX0VWNyAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNywgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ3CisvLyBSRkNfSU5fRVY2ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA2LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDYKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ3IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQb3J0IGNhcHR1cmUgZXZlbnQgZnJvbSBJT0MsIGNvbmZpZ3VyZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJT0M6SU9DRkduLlBPUlRfSUQuIEV2ZW50cyBvbiBwb3J0cyBjb25maWd1cmVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBFTlVNIFBPUlRfRVZFTlQ2IHdpbCBiZSByb3V0ZWQgaGVyZS4KKy8vIEdQVDNCX0NNUCAgICAgICAgICAgICAgICBHUFQzQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDM6VEJNUi5UQ0FDVAorLy8gR1BUM0FfQ01QICAgICAgICAgICAgICAgIEdQVDNBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMzpUQU1SLlRDQUNUCisvLyBHUFQyQl9DTVAgICAgICAgICAgICAgICAgR1BUMkIgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQyOlRCTVIuVENBQ1QKKy8vIEdQVDJBX0NNUCAgICAgICAgICAgICAgICBHUFQyQSBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDI6VEFNUi5UQ0FDVAorLy8gR1BUMUJfQ01QICAgICAgICAgICAgICAgIEdQVDFCIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMTpUQk1SLlRDQUNUCisvLyBHUFQxQV9DTVAgICAgICAgICAgICAgICAgR1BUMUEgY29tcGFyZSBldmVudC4gQ29uZmlndXJlZCBieSBHUFQxOlRBTVIuVENBQ1QKKy8vIEdQVDBCX0NNUCAgICAgICAgICAgICAgICBHUFQwQiBjb21wYXJlIGV2ZW50LiBDb25maWd1cmVkIGJ5IEdQVDA6VEJNUi5UQ0FDVAorLy8gR1BUMEFfQ01QICAgICAgICAgICAgICAgIEdQVDBBIGNvbXBhcmUgZXZlbnQuIENvbmZpZ3VyZWQgYnkgR1BUMDpUQU1SLlRDQUNUCisvLyBVQVJUMF9DT01CICAgICAgICAgICAgICAgVUFSVDAgY29tYmluZWQgaW50ZXJydXB0LCBpbnRlcnJ1cHQgZmxhZ3MgYXJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaGVyZSBVQVJUMDpNSVMKKy8vIFNTSTFfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMTpNSVMKKy8vIFNTSTBfQ09NQiAgICAgICAgICAgICAgICBTU0kwIGNvbWJpbmVkIGludGVycnVwdCwgaW50ZXJydXB0IGZsYWdzIGFyZSBmb3VuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgU1NJMDpNSVMKKy8vIFJGQ19DUEVfMSAgICAgICAgICAgICAgICBDb21iaW5lZCBJbnRlcnJ1cHQgZm9yIENQRSBHZW5lcmF0ZWQgZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmxhZ3MgYXJlIGhlcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBSRkNfREJFTEw6UkZDUEVJRkcuIE9ubHkgaW50ZXJydXB0cyBzZWxlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ1BFMSBpbiBSRkNfREJFTEw6UkZDUEVJRkcgY2FuIHRyaWdnZXIgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19DUEVfMSBldmVudAorLy8gUkZDX0NQRV8wICAgICAgICAgICAgICAgIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFIEdlbmVyYXRlZCBldmVudHMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGluZyBmbGFncyBhcmUgaGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFJGQ19EQkVMTDpSRkNQRUlGRy4gT25seSBpbnRlcnJ1cHRzIHNlbGVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBDUEUwIGluIFJGQ19EQkVMTDpSRkNQRUlGRyBjYW4gdHJpZ2dlciBhCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDX0NQRV8wIGV2ZW50CisvLyBSRkNfSFdfQ09NQiAgICAgICAgICAgICAgQ29tYmluZWQgUkNGIGhhcmR3YXJlIGludGVycnVwdCwgY29ycmVzcG9uZGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgaXMgaGVyZSBSRkNfREJFTEw6UkZIV0lGRworLy8gUkZDX0NNRF9BQ0sgICAgICAgICAgICAgIFJGQyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1dmlhbGVudCB0byBSRkNfREJFTEw6UkZBQ0tJRkcuQUNLRkxBRworLy8gRkxBU0ggICAgICAgICAgICAgICAgICAgIEZMQVNIIGNvbnRyb2xsZXIgZXJyb3IgZXZlbnQsICB0aGUgc3RhdHVzIGZsYWdzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIEZMQVNIOkZFREFDU1RBVC5GU01fRE9ORSBhbmQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSDpGRURBQ1NUQVQuUlZGX0lOVAorLy8gQVVYX0NPTUIgICAgICAgICAgICAgICAgIEFVWCBjb21iaW5lZCBldmVudCwgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlzIGhlcmUgQVVYX0VWQ1RMOkVWVE9NQ1VGTEFHUworLy8gQU9OX1JUQ19DT01CICAgICAgICAgICAgIEV2ZW50IGZyb20gQU9OX1JUQywgY29udHJvbGxlZCBieSB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fUlRDOkNUTC5DT01CX0VWX01BU0sgc2V0dGluZworLy8gQU9OX0dQSU9fRURHRSAgICAgICAgICAgIEVkZ2UgZGV0ZWN0IGV2ZW50IGZyb20gSU9DLiBDb25maWd1cmVkZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU9DOklPQ0ZHbi5FREdFX0lSUV9FTiBhbmQgIElPQzpJT0NGR24uRURHRV9ERVQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncworLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQUxXQVlTX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BT05fUlRDX1VQRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzcKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MworI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX09CU01VWDAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcyCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfQURDX0ZJRk9fQUxNT1NUX0ZVTEwgICAgICAgICAgICAgIDB4MDAwMDAwNzEKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9BRENfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX1NNUEhfQVVUT1RBS0VfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDZGCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfVElNRVIxX0VWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkUKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9USU1FUjBfRVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2RAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX1REQ19ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZDCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BVVhfQ09NUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkIKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FVWF9DT01QQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX0FPTl9XVV9FViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY5CisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9SRkNfSU5fRVY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjIKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1JGQ19JTl9FVjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVDCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUIKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0dQVDNCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfR1BUM0FfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQzCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9HUFQyQl9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0dQVDJBX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfR1BUMUJfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9HUFQxQV9DTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0dQVDBCX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfR1BUMEFfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNECisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9VQVJUMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfU1NJMF9DT01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9SRkNfQ1BFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX1JGQ19DUEVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9SRkNfQ01EX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIEVWRU5UX0dQVDNCQ0FQVFNFTF9FVl9BT05fUlRDX0NPTUIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRVZFTlRfR1BUM0JDQVBUU0VMX0VWX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9HUFQzQkNBUFRTRUxfRVZfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19BVVhTRUwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBHUFQxQiAgICAgICAgICAgICAgICAgICAgR1BUMUIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDE6VEJNUgorLy8gR1BUMUEgICAgICAgICAgICAgICAgICAgIEdQVDFBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQxOlRBTVIKKy8vIEdQVDBCICAgICAgICAgICAgICAgICAgICBHUFQwQiBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMDpUQk1SCisvLyBHUFQwQSAgICAgICAgICAgICAgICAgICAgR1BUMEEgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDA6VEFNUgorLy8gR1BUM0IgICAgICAgICAgICAgICAgICAgIEdQVDNCIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQzOlRCTVIKKy8vIEdQVDNBICAgICAgICAgICAgICAgICAgICBHUFQzQSBpbnRlcnJ1cHQgZXZlbnQsIGNvbnRyb2xsZWQgYnkgR1BUMzpUQU1SCisvLyBHUFQyQiAgICAgICAgICAgICAgICAgICAgR1BUMkIgaW50ZXJydXB0IGV2ZW50LCBjb250cm9sbGVkIGJ5IEdQVDI6VEJNUgorLy8gR1BUMkEgICAgICAgICAgICAgICAgICAgIEdQVDJBIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZCBieSBHUFQyOlRBTVIKKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBBbHdheXMgaW5hY3RpdmUKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9BTFdBWVNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OQorI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX0dQVDFCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfR1BUMUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9HUFQwQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX0dQVDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfR1BUM0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9HUFQzQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBFVkVOVF9BVVhTRUwwX0VWX0dQVDJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIEVWRU5UX0FVWFNFTDBfRVZfR1BUMkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgRVZFTlRfQVVYU0VMMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fQ00zTk1JU0VMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZCBvbmx5IHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBXRFRfTk1JICAgICAgICAgICAgICAgICAgV2F0Y2hkb2cgbm9uIG1hc2thYmxlIGludGVycnVwdCBldmVudCwgY29udHJvbGxlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IFdEVDpDVEwuSU5UVFlQRQorI2RlZmluZSBFVkVOVF9DTTNOTUlTRUwwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0NNM05NSVNFTDBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfQ00zTk1JU0VMMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9DTTNOTUlTRUwwX0VWX1dEVF9OTUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19JMlNTVE1QU0VMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIEVWCisvLworLy8gUmVhZC93cml0ZSBzZWxlY3Rpb24gdmFsdWUKKy8vIEVOVU1zOgorLy8gQUxXQVlTX0FDVElWRSAgICAgICAgICAgIEFsd2F5cyBhc3NlcnRlZAorLy8gUkZDX0lOX0VWNyAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNywgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ3CisvLyBSRkNfSU5fRVY2ICAgICAgICAgICAgICAgUkZDIFJBVCBldmVudCA2LCBjb25maWd1cmVkIGJ5IFJGQ19SQVQ6UkFURVYuT0VWVDYKKy8vIFJGQ19JTl9FVjUgICAgICAgICAgICAgICBSRkMgUkFUIGV2ZW50IDUsIGNvbmZpZ3VyZWQgYnkgUkZDX1JBVDpSQVRFVi5PRVZUNQorLy8gUkZDX0lOX0VWNCAgICAgICAgICAgICAgIFJGQyBSQVQgZXZlbnQgNCwgY29uZmlndXJlZCBieSBSRkNfUkFUOlJBVEVWLk9FVlQ0CisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIGluYWN0aXZlCisjZGVmaW5lIEVWRU5UX0kyU1NUTVBTRUwwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRVZFTlRfSTJTU1RNUFNFTDBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBFVkVOVF9JMlNTVE1QU0VMMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVWRU5UX0kyU1NUTVBTRUwwX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzkKKyNkZWZpbmUgRVZFTlRfSTJTU1RNUFNFTDBfRVZfUkZDX0lOX0VWNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MgorI2RlZmluZSBFVkVOVF9JMlNTVE1QU0VMMF9FVl9SRkNfSU5fRVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYxCisjZGVmaW5lIEVWRU5UX0kyU1NUTVBTRUwwX0VWX1JGQ19JTl9FVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgRVZFTlRfSTJTU1RNUFNFTDBfRVZfUkZDX0lOX0VWNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1RgorI2RlZmluZSBFVkVOVF9JMlNTVE1QU0VMMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRVZFTlRfT19GUlpTRUwwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gRVYKKy8vCisvLyBSZWFkL3dyaXRlIHNlbGVjdGlvbiB2YWx1ZQorLy8gRU5VTXM6CisvLyBBTFdBWVNfQUNUSVZFICAgICAgICAgICAgQWx3YXlzIGFzc2VydGVkCisvLyBDUFVfSEFMVEVEICAgICAgICAgICAgICAgQ1BVIGhhbHRlZAorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBpbmFjdGl2ZQorI2RlZmluZSBFVkVOVF9GUlpTRUwwX0VWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEVWRU5UX0ZSWlNFTDBfRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRVZFTlRfRlJaU0VMMF9FVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFVkVOVF9GUlpTRUwwX0VWX0FMV0FZU19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc5CisjZGVmaW5lIEVWRU5UX0ZSWlNFTDBfRVZfQ1BVX0hBTFRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKyNkZWZpbmUgRVZFTlRfRlJaU0VMMF9FVl9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEVWRU5UX09fU1dFVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIFNXRVYzCisvLworLy8gV3JpdGluZyAiMSIgdG8gdGhpcyBiaXQgd2hlbiB0aGUgdmFsdWUgaXMgIjAiIHRyaWdnZXJzIHRoZSBTb2Z0d2FyZSAzIGV2ZW50LgorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTZdIFNXRVYyCisvLworLy8gV3JpdGluZyAiMSIgdG8gdGhpcyBiaXQgd2hlbiB0aGUgdmFsdWUgaXMgIjAiIHRyaWdnZXJzIHRoZSBTb2Z0d2FyZSAyIGV2ZW50LgorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIFNXRVYxCisvLworLy8gV3JpdGluZyAiMSIgdG8gdGhpcyBiaXQgd2hlbiB0aGUgdmFsdWUgaXMgIjAiIHRyaWdnZXJzIHRoZSBTb2Z0d2FyZSAxIGV2ZW50LgorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIFNXRVYwCisvLworLy8gV3JpdGluZyAiMSIgdG8gdGhpcyBiaXQgd2hlbiB0aGUgdmFsdWUgaXMgIjAiIHRyaWdnZXJzIHRoZSBTb2Z0d2FyZSAwIGV2ZW50LgorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVWRU5UX1NXRVZfU1dFVjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVZFTlRfU1dFVl9TV0VWMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFVkVOVF9TV0VWX1NXRVYwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fRVZFTlRfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZmNmZzEuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ZjZmcxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkNzM4OAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ZjZmcxLmgKQEAgLTAsMCArMSwyODU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfZmNmZzFfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfRkNGRzFfSF9fCisjZGVmaW5lIF9fSFdfRkNGRzFfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gRkNGRzEgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTWlzYyBjb25maWd1cmF0aW9ucworI2RlZmluZSBGQ0ZHMV9PX01JU0NfQ09ORl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEEwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fTUlTQ19DT05GXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEM4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQ0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEQ0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfU1lOVEhfRElWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19TWU5USF9ESVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfU1lOVEhfRElWMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19TWU5USF9ESVYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEVDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDgKKworLy8gU2hhZG93IG9mIEVGVVNFOkRJRV9JRF8wCisjZGVmaW5lIEZDRkcxX09fU0hEV19ESUVfSURfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTgKKworLy8gU2hhZG93IG9mIEVGVVNFOkRJRV9JRF8xCisjZGVmaW5lIEZDRkcxX09fU0hEV19ESUVfSURfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMUMKKworLy8gU2hhZG93IG9mIEVGVVNFOkRJRV9JRF8yCisjZGVmaW5lIEZDRkcxX09fU0hEV19ESUVfSURfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjAKKworLy8gU2hhZG93IG9mIEVGVVNFOkRJRV9JRF8zCisjZGVmaW5lIEZDRkcxX09fU0hEV19ESUVfSURfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19TSERXX09TQ19CSUFTX0xET19UUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEzOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX1NIRFdfQU5BX1RSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTNDCisKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE2NAorCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfQ09PUkRJTkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9FX1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE3MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX0NfRV9QX1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTc0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfUF9SX1BWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNzgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9FSF9TRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE3QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX1ZIVl9FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTgwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9QUk9HX0VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4OAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX0VSQV9QVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMThDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfVkhWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxOTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9WSFZfUFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE5NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZMQVNIX1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTk4CisKKy8vIFVzZXIgSWRlbnRpZmljYXRpb24uCisjZGVmaW5lIEZDRkcxX09fVVNFUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19GTEFTSF9PVFBfREFUQTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJCMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0FOQTJfVFJJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMkI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fTERPX1RSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyQjgKKworLy8gTUFDIEJMRSBBZGRyZXNzIDAKKyNkZWZpbmUgRkNGRzFfT19NQUNfQkxFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJFOAorCisvLyBNQUMgQkxFIEFkZHJlc3MgMQorI2RlZmluZSBGQ0ZHMV9PX01BQ19CTEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMkVDCisKKy8vIE1BQyBJRUVFIDgwMi4xNS40IEFkZHJlc3MgMAorI2RlZmluZSBGQ0ZHMV9PX01BQ18xNV80XzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMkYwCisKKy8vIE1BQyBJRUVFIDgwMi4xNS40IEFkZHJlc3MgMQorI2RlZmluZSBGQ0ZHMV9PX01BQ18xNV80XzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMkY0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fRkxBU0hfT1RQX0RBVEE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDgKKworLy8gTWlzY2VsbGFuZW91cyBUcmltICBQYXJhbWV0ZXJzCisjZGVmaW5lIEZDRkcxX09fTUlTQ19UUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19SQ09TQ19IRl9URU1QQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMxMAorCisvLyBJY2VQaWNrIERldmljZSBJZGVudGlmaWNhdGlvbgorI2RlZmluZSBGQ0ZHMV9PX0lDRVBJQ0tfREVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzE4CisKKy8vIEZhY3RvcnkgQ29uZmlndXJhdGlvbiAoRkNGRzEpIFJldmlzaW9uCisjZGVmaW5lIEZDRkcxX09fRkNGRzFfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMUMKKworLy8gTWlzYyBPVFAgRGF0YQorI2RlZmluZSBGQ0ZHMV9PX01JU0NfT1RQX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzIwCisKKy8vIElPIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgRkNGRzFfT19JT0NPTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM0NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19JRl9BREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzRDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ09ORklHX09TQ19UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM1NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19TWU5USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzU4CisKKy8vIEFVWF9BREMgR2FpbiBpbiBBYnNvbHV0ZSBSZWZlcmVuY2UgTW9kZQorI2RlZmluZSBGQ0ZHMV9PX1NPQ19BRENfQUJTX0dBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzVDCisKKy8vIEFVWF9BREMgR2FpbiBpbiBSZWxhdGl2ZSBSZWZlcmVuY2UgTW9kZQorI2RlZmluZSBGQ0ZHMV9PX1NPQ19BRENfUkVMX0dBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzYwCisKKy8vIEFVWF9BREMgVGVtcGVyYXR1cmUgT2Zmc2V0cyBpbiBBYnNvbHV0ZSBSZWZlcmVuY2UgTW9kZQorI2RlZmluZSBGQ0ZHMV9PX1NPQ19BRENfT0ZGU0VUX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzY4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fU09DX0FEQ19SRUZfVFJJTV9BTkRfT0ZGU0VUX0VYVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19BTVBDT01QX1RIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM3MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0FNUENPTVBfVEgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzc0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQU1QQ09NUF9DVFJMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNzgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19BTkFCWVBBU1NfVkFMVUUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM3QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fVk9MVF9UUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODgKKworLy8gT1NDIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgRkNGRzFfT19PU0NfQ09ORiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGQ0ZHMV9PX0ZSRVFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzkwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZDRkcxX09fQ0FQX1RSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkNGRzFfT19NSVNDX09UUF9EQVRBXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5OAorCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCAyMEMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl8yMEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5QworCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCAzNUMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl8zNUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNBMAorCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCA1MEMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl81MEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNBNAorCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCA2NUMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl82NUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNBOAorCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCA4MEMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl84MEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNBQworCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCA5NUMKKyNkZWZpbmUgRkNGRzFfT19QV0RfQ1VSUl85NUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNCMAorCisvLyBQb3dlciBEb3duIEN1cnJlbnQgQ29udHJvbCAxMTBDCisjZGVmaW5lIEZDRkcxX09fUFdEX0NVUlJfMTEwQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQjQKKworLy8gUG93ZXIgRG93biBDdXJyZW50IENvbnRyb2wgMTI1QworI2RlZmluZSBGQ0ZHMV9PX1BXRF9DVVJSXzEyNUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0I4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19NSVNDX0NPTkZfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIERFVklDRV9NSU5PUl9SRVYKKy8vCisvLyBIVyBtaW5vciByZXZpc2lvbiBudW1iZXIgKGEgdmFsdWUgb2YgMHhGRiBzaGFsbCBiZSB0cmVhdGVkIGVxdWFsbHkgdG8gMHgwMCkuCisvLyBBbnkgdGVzdCBvZiB0aGlzIGZpZWxkIGJ5IFNXIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhICdncmVhdGVyIG9yIGVxdWFsJworLy8gY29tcGFyaXNvbiBhcyBzaWduZWQgaW50ZWdlci4KKy8vIFZhbHVlIG1heSBjaGFuZ2Ugd2l0aG91dCB3YXJuaW5nLgorI2RlZmluZSBGQ0ZHMV9NSVNDX0NPTkZfMV9ERVZJQ0VfTUlOT1JfUkVWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX01JU0NfQ09ORl8xX0RFVklDRV9NSU5PUl9SRVZfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfTUlTQ19DT05GXzFfREVWSUNFX01JTk9SX1JFVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUlTQ19DT05GXzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBIUE9TQ19DT01QX1AzCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTUlTQ19DT05GXzJfSFBPU0NfQ09NUF9QM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9NSVNDX0NPTkZfMl9IUE9TQ19DT01QX1AzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX01JU0NfQ09ORl8yX0hQT1NDX0NPTVBfUDNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9JRkFNUF9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0lGQU1QX0lCX00gICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfSUZBTVBfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9MTkFfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0xOQV9JQl9NICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfTE5BX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfSUZBTVBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9JRkFNUF9UUklNX00gICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0lGQU1QX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfQ1RMX1BBMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9DVExfUEEwX1RSSU1fTSAgICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X0NUTF9QQTBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNV9SRkxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY1X1JGTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjVfUkZMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5EX0RJVjYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBJRkFNUF9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0lGQU1QX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfSUZBTVBfSUJfTSAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9JRkFNUF9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIExOQV9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0xOQV9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfTE5BX0lCX00gICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9MTkFfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTldIElGQU1QX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9JRkFNUF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0lGQU1QX1RSSU1fTSAgICAgICAgICAgICAgICAgIDB4MDBGODAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfSUZBTVBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE0XSBDVExfUEEwX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9DVExfUEEwX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X0NUTF9QQTBfVFJJTV9NICAgICAgICAgICAgICAgIDB4MDAwN0MwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfQ1RMX1BBMF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICBbNjowXSBSRkxET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVY2X1JGTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjZfUkZMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWNl9SRkxET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBJRkFNUF9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9JRkFNUF9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0lGQU1QX0lCX00gICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfSUZBTVBfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIExOQV9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9MTkFfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0xOQV9JQl9NICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfTE5BX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTldIElGQU1QX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfSUZBTVBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9JRkFNUF9UUklNX00gICAgICAgICAgICAgICAgIDB4MDBGODAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0lGQU1QX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE0XSBDVExfUEEwX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfQ1RMX1BBMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9DVExfUEEwX1RSSU1fTSAgICAgICAgICAgICAgIDB4MDAwN0MwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX0NUTF9QQTBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICBbNjowXSBSRkxET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMF9SRkxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEwX1JGTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTBfUkZMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBJRkFNUF9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9JRkFNUF9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0lGQU1QX0lCX00gICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfSUZBTVBfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIExOQV9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9MTkFfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0xOQV9JQl9NICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfTE5BX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTldIElGQU1QX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfSUZBTVBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9JRkFNUF9UUklNX00gICAgICAgICAgICAgICAgIDB4MDBGODAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0lGQU1QX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE0XSBDVExfUEEwX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfQ1RMX1BBMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9DVExfUEEwX1RSSU1fTSAgICAgICAgICAgICAgIDB4MDAwN0MwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX0NUTF9QQTBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICBbNjowXSBSRkxET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxMl9SRkxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjEyX1JGTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTJfUkZMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWMTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBJRkFNUF9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9JRkFNUF9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0lGQU1QX0lCX00gICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfSUZBTVBfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIExOQV9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9MTkFfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0xOQV9JQl9NICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfTE5BX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTldIElGQU1QX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfSUZBTVBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9JRkFNUF9UUklNX00gICAgICAgICAgICAgICAgIDB4MDBGODAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0lGQU1QX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE0XSBDVExfUEEwX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfQ1RMX1BBMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9DVExfUEEwX1RSSU1fTSAgICAgICAgICAgICAgIDB4MDAwN0MwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X0NUTF9QQTBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICBbNjowXSBSRkxET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYxNV9SRkxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjE1X1JGTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMTVfUkZMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfUkZfRlJPTlRFTkRfRElWMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBJRkFNUF9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9JRkFNUF9JQl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0lGQU1QX0lCX00gICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfSUZBTVBfSUJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIExOQV9JQgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9MTkFfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0xOQV9JQl9NICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfTE5BX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTldIElGQU1QX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfSUZBTVBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9JRkFNUF9UUklNX00gICAgICAgICAgICAgICAgIDB4MDBGODAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0lGQU1QX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogWzE4OjE0XSBDVExfUEEwX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfQ1RMX1BBMF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9DVExfUEEwX1RSSU1fTSAgICAgICAgICAgICAgIDB4MDAwN0MwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX0NUTF9QQTBfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICBbNjowXSBSRkxET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9ESVYzMF9SRkxET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0RJVjMwX1JGTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfRElWMzBfUkZMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfU1lOVEhfRElWNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MTJdIFJGQ19NRE1fREVNSVFNQzAKKy8vCisvLyBUcmltIHZhbHVlIGZvciBSRiBDb3JlLgorLy8gVmFsdWUgaXMgcmVhZCBieSBSRiBDb3JlIFJPTSBGVyBkdXJpbmcgUkYgQ29yZSBpbml0aWFsaXphdGlvbi4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjVfUkZDX01ETV9ERU1JUU1DMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNV9SRkNfTURNX0RFTUlRTUMwX00gICAgICAgICAgICAgICAgICAweDBGRkZGMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY1X1JGQ19NRE1fREVNSVFNQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6Nl0gTERPVkNPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjVfTERPVkNPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNV9MRE9WQ09fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAweDAwMDAwRkMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY1X0xET1ZDT19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gU0xET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY1X1NMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjVfU0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNV9TTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfU1lOVEhfRElWNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MTJdIFJGQ19NRE1fREVNSVFNQzAKKy8vCisvLyBUcmltIHZhbHVlIGZvciBSRiBDb3JlLgorLy8gVmFsdWUgaXMgcmVhZCBieSBSRiBDb3JlIFJPTSBGVyBkdXJpbmcgUkYgQ29yZSBpbml0aWFsaXphdGlvbi4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjZfUkZDX01ETV9ERU1JUU1DMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNl9SRkNfTURNX0RFTUlRTUMwX00gICAgICAgICAgICAgICAgICAweDBGRkZGMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY2X1JGQ19NRE1fREVNSVFNQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6Nl0gTERPVkNPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjZfTERPVkNPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNl9MRE9WQ09fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAweDAwMDAwRkMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY2X0xET1ZDT19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gU0xET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVY2X1NMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjZfU0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWNl9TTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfU1lOVEhfRElWMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjEyXSBSRkNfTURNX0RFTUlRTUMwCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgUkYgQ29yZS4KKy8vIFZhbHVlIGlzIHJlYWQgYnkgUkYgQ29yZSBST00gRlcgZHVyaW5nIFJGIENvcmUgaW5pdGlhbGl6YXRpb24uCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMF9SRkNfTURNX0RFTUlRTUMwX1cgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEwX1JGQ19NRE1fREVNSVFNQzBfTSAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTBfUkZDX01ETV9ERU1JUU1DMF9TICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIExET1ZDT19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMF9MRE9WQ09fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEwX0xET1ZDT19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgMHgwMDAwMEZDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTBfTERPVkNPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTBfU0xET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMF9TTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEwX1NMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1NZTlRIX0RJVjEyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoxMl0gUkZDX01ETV9ERU1JUU1DMAorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIFJGIENvcmUuCisvLyBWYWx1ZSBpcyByZWFkIGJ5IFJGIENvcmUgUk9NIEZXIGR1cmluZyBSRiBDb3JlIGluaXRpYWxpemF0aW9uLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTJfUkZDX01ETV9ERU1JUU1DMF9XICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMl9SRkNfTURNX0RFTUlRTUMwX00gICAgICAgICAgICAgICAgIDB4MEZGRkYwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEyX1JGQ19NRE1fREVNSVFNQzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo2XSBMRE9WQ09fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTJfTERPVkNPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMl9MRE9WQ09fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEyX0xET1ZDT19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBTTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjEyX1NMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTJfU0xET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxMl9TTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19TWU5USF9ESVYxNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjc6MTJdIFJGQ19NRE1fREVNSVFNQzAKKy8vCisvLyBUcmltIHZhbHVlIGZvciBSRiBDb3JlLgorLy8gVmFsdWUgaXMgcmVhZCBieSBSRiBDb3JlIFJPTSBGVyBkdXJpbmcgUkYgQ29yZSBpbml0aWFsaXphdGlvbi4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjE1X1JGQ19NRE1fREVNSVFNQzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTVfUkZDX01ETV9ERU1JUU1DMF9NICAgICAgICAgICAgICAgICAweDBGRkZGMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxNV9SRkNfTURNX0RFTUlRTUMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6Nl0gTERPVkNPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjE1X0xET1ZDT19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTVfTERPVkNPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAweDAwMDAwRkMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxNV9MRE9WQ09fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gU0xET19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYxNV9TTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjE1X1NMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMTVfU0xET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfU1lOVEhfRElWMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjEyXSBSRkNfTURNX0RFTUlRTUMwCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgUkYgQ29yZS4KKy8vIFZhbHVlIGlzIHJlYWQgYnkgUkYgQ29yZSBST00gRlcgZHVyaW5nIFJGIENvcmUgaW5pdGlhbGl6YXRpb24uCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYzMF9SRkNfTURNX0RFTUlRTUMwX1cgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjMwX1JGQ19NRE1fREVNSVFNQzBfTSAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMzBfUkZDX01ETV9ERU1JUU1DMF9TICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIExET1ZDT19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYzMF9MRE9WQ09fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjMwX0xET1ZDT19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgMHgwMDAwMEZDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMzBfTERPVkNPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfRElWMzBfU0xET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9ESVYzMF9TTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0RJVjMwX1NMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNjo5XSBSU1NJX09GRlNFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY1X1JTU0lfT0ZGU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjVfUlNTSV9PRkZTRVRfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAxRkUwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNV9SU1NJX09GRlNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjZdIFFVQU5UQ1RMVEhSRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNV9RVUFOVENUTFRIUkVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY1X1FVQU5UQ1RMVEhSRVNfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjVfUVVBTlRDVExUSFJFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBEQUNUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjVfREFDVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNV9EQUNUUklNX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY1X0RBQ1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVY2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTY6OV0gUlNTSV9PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNl9SU1NJX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY2X1JTU0lfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgIDB4MDAwMUZFMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjZfUlNTSV9PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBRVUFOVENUTFRIUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjZfUVVBTlRDVExUSFJFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNl9RVUFOVENUTFRIUkVTX00gICAgICAgICAgICAgICAgICAweDAwMDAwMUMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY2X1FVQU5UQ1RMVEhSRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gREFDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVY2X0RBQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjZfREFDVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWNl9EQUNUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNjo5XSBSU1NJX09GRlNFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMF9SU1NJX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEwX1JTU0lfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgMHgwMDAxRkUwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTBfUlNTSV9PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjZdIFFVQU5UQ1RMVEhSRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTBfUVVBTlRDVExUSFJFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMF9RVUFOVENUTFRIUkVTX00gICAgICAgICAgICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEwX1FVQU5UQ1RMVEhSRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBEQUNUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEwX0RBQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTBfREFDVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMF9EQUNUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19NSVNDX0FEQ19ESVYxMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE2OjldIFJTU0lfT0ZGU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEyX1JTU0lfT0ZGU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTJfUlNTSV9PRkZTRVRfTSAgICAgICAgICAgICAgICAgICAweDAwMDFGRTAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMl9SU1NJX09GRlNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgWzg6Nl0gUVVBTlRDVExUSFJFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMl9RVUFOVENUTFRIUkVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEyX1FVQU5UQ1RMVEhSRVNfTSAgICAgICAgICAgICAgICAgMHgwMDAwMDFDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTJfUVVBTlRDVExUSFJFU19TICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIERBQ1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTJfREFDVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxMl9EQUNUUklNX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjEyX0RBQ1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX01JU0NfQURDX0RJVjE1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTY6OV0gUlNTSV9PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTVfUlNTSV9PRkZTRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxNV9SU1NJX09GRlNFVF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMUZFMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjE1X1JTU0lfT0ZGU0VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODo2XSBRVUFOVENUTFRIUkVTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjE1X1FVQU5UQ1RMVEhSRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTVfUVVBTlRDVExUSFJFU19NICAgICAgICAgICAgICAgICAweDAwMDAwMUMwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxNV9RVUFOVENUTFRIUkVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6MF0gREFDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYxNV9EQUNUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjE1X0RBQ1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMTVfREFDVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19DT05GSUdfTUlTQ19BRENfRElWMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNjo5XSBSU1NJX09GRlNFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYzMF9SU1NJX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjMwX1JTU0lfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgMHgwMDAxRkUwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMzBfUlNTSV9PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjZdIFFVQU5UQ1RMVEhSRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMzBfUVVBTlRDVExUSFJFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYzMF9RVUFOVENUTFRIUkVTX00gICAgICAgICAgICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjMwX1FVQU5UQ1RMVEhSRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBEQUNUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RJVjMwX0RBQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfRElWMzBfREFDVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19ESVYzMF9EQUNUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NIRFdfRElFX0lEXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBJRF8zMV8wCisvLworLy8gU2hhZG93IG9mIERJRV9JRF8wIHJlZ2lzdGVyIGluIGVGdXNlIHJvdyBudW1iZXIgMworI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8wX0lEXzMxXzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzBfSURfMzFfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfMF9JRF8zMV8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU0hEV19ESUVfSURfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElEXzYzXzMyCisvLworLy8gU2hhZG93IG9mIERJRV9JRF8xIHJlZ2lzdGVyIGluIGVGdXNlIHJvdyBudW1iZXIgNAorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8xX0lEXzYzXzMyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzFfSURfNjNfMzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfMV9JRF82M18zMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU0hEV19ESUVfSURfMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElEXzk1XzY0CisvLworLy8gU2hhZG93IG9mIERJRV9JRF8yIHJlZ2lzdGVyIGluIGVGdXNlIHJvdyBudW1iZXIgNQorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8yX0lEXzk1XzY0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzJfSURfOTVfNjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfMl9JRF85NV82NF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU0hEV19ESUVfSURfMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIElEXzEyN185NgorLy8KKy8vIFNoYWRvdyBvZiBESUVfSURfMyByZWdpc3RlciBpbiBlRnVzZSByb3cgbnVtYmVyIDYKKyNkZWZpbmUgRkNGRzFfU0hEV19ESUVfSURfM19JRF8xMjdfOTZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9TSERXX0RJRV9JRF8zX0lEXzEyN185Nl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX1NIRFdfRElFX0lEXzNfSURfMTI3Xzk2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NIRFdfT1NDX0JJQVNfTERPX1RSSU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI4OjI3XSBTRVRfUkNPU0NfSEZfQ09BUlNFX1JFU0lTVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9TRVRfUkNPU0NfSEZfQ09BUlNFX1JFU0lTVE9SX1cgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1NFVF9SQ09TQ19IRl9DT0FSU0VfUkVTSVNUT1JfTSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fU0VUX1JDT1NDX0hGX0NPQVJTRV9SRVNJU1RPUl9TICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyM10gVFJJTU1BRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVFJJTU1BR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9UUklNTUFHX00gICAgICAgICAgICAgICAgICAgICAgMHgwNzgwMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1RSSU1NQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiBbMjI6MThdIFRSSU1JUkVGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9UUklNSVJFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1RSSU1JUkVGX00gICAgICAgICAgICAgICAgICAgICAweDAwN0MwMDAwCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVFJJTUlSRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gSVRSSU1fRElHX0xETworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fSVRSSU1fRElHX0xET19XICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9JVFJJTV9ESUdfTERPX00gICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX0lUUklNX0RJR19MRE9fUyAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIFZUUklNX0RJRworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVlRSSU1fRElHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9WVFJJTV9ESUdfTSAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1ZUUklNX0RJR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjhdIFZUUklNX0NPQVJTRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fVlRSSU1fQ09BUlNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9WVFJJTV9DT0FSU0VfTSAgICAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1ZUUklNX0NPQVJTRV9TICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFJDT1NDSEZfQ1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9TSERXX09TQ19CSUFTX0xET19UUklNX1JDT1NDSEZfQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1NIRFdfT1NDX0JJQVNfTERPX1RSSU1fUkNPU0NIRl9DVFJJTV9NICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfU0hEV19PU0NfQklBU19MRE9fVFJJTV9SQ09TQ0hGX0NUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU0hEV19BTkFfVFJJTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjY6MjVdIEJPRF9CQU5ER0FQX1RSSU1fQ05GCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9CT0RfQkFOREdBUF9UUklNX0NORl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX0JPRF9CQU5ER0FQX1RSSU1fQ05GX00gICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fQk9EX0JBTkRHQVBfVFJJTV9DTkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gVkREUl9FTkFCTEVfUEcxCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX0VOQUJMRV9QRzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfRU5BQkxFX1BHMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9FTkFCTEVfUEcxX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX0VOQUJMRV9QRzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBWRERSX09LX0hZUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9PS19IWVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX09LX0hZU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfT0tfSFlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9PS19IWVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6IFsyMjoyMV0gSVBUQVRfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fSVBUQVRfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9JUFRBVF9UUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX0lQVEFUX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiBbMjA6MTZdIFZERFJfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVkREUl9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9WRERSX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1ZERFJfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTFdIFRSSU1CT0RfSU5UTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVFJJTUJPRF9JTlRNT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9UUklNQk9EX0lOVE1PREVfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjgwMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1RSSU1CT0RfSU5UTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgWzEwOjZdIFRSSU1CT0RfRVhUTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVFJJTUJPRF9FWFRNT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9UUklNQk9EX0VYVE1PREVfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdDMAorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1RSSU1CT0RfRVhUTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFRSSU1URU1QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfU0hEV19BTkFfVFJJTV9UUklNVEVNUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9TSERXX0FOQV9UUklNX1RSSU1URU1QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX1NIRFdfQU5BX1RSSU1fVFJJTVRFTVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0ZMQVNIX05VTUJFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIExPVF9OVU1CRVIKKy8vCisvLyBOdW1iZXIgb2YgdGhlIG1hbnVmYWN0dXJpbmcgbG90IHRoYXQgcHJvZHVjZWQgdGhpcyB1bml0LgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9OVU1CRVJfTE9UX05VTUJFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX05VTUJFUl9MT1RfTlVNQkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfTlVNQkVSX0xPVF9OVU1CRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfQ09PUkRJTkFURQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFhDT09SRElOQVRFCisvLworLy8gWCBjb29yZGluYXRlIG9mIHRoaXMgdW5pdCBvbiB0aGUgd2FmZXIuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NPT1JESU5BVEVfWENPT1JESU5BVEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ09PUkRJTkFURV9YQ09PUkRJTkFURV9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DT09SRElOQVRFX1hDT09SRElOQVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFlDT09SRElOQVRFCisvLworLy8gWSBjb29yZGluYXRlIG9mIHRoaXMgdW5pdCBvbiB0aGUgd2FmZXIuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NPT1JESU5BVEVfWUNPT1JESU5BVEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ09PUkRJTkFURV9ZQ09PUkRJTkFURV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DT09SRElOQVRFX1lDT09SRElOQVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9FX1AKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBQU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfUFNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9QU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX1BTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBFU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfRVNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9FU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX0VTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBQVlNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX1BWU1VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfUFZTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9QVlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gRVZTVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VfUF9FVlNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRV9QX0VWU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FX1BfRVZTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9DX0VfUF9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUlZTVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfUlZTVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9SVlNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX1JWU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIFBWX0FDQ0VTUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfUFZfQUNDRVNTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9QVl9BQ0NFU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX1BWX0FDQ0VTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIEFfRVhFWl9TRVRVUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfQV9FWEVaX1NFVFVQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9BX0VYRVpfU0VUVVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX0FfRVhFWl9TRVRVUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjBdIENWU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9DX0VfUF9SX0NWU1VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0NfRV9QX1JfQ1ZTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfQ19FX1BfUl9DVlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfUF9SX1BWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gUEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9QSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1BIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBSSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9SSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1JIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUkhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFBWSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9QVkhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1BWSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUFZIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFBWSDIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QX1JfUFZfUFZIMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BfUl9QVl9QVkgyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUF9SX1BWX1BWSDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfRUhfU0VRCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gRUgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfRUhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9FSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX0VIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBTRVEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfU0VRX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9TRVFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX1NFUV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjEyXSBWU1RBVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9WU1RBVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX1ZTVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfVlNUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjBdIFNNX0ZSRVFVRU5DWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VIX1NFUV9TTV9GUkVRVUVOQ1lfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRUhfU0VRX1NNX0ZSRVFVRU5DWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FSF9TRVFfU01fRlJFUVVFTkNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9WSFZfRQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIFZIVl9FX1NUQVJUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX0VfVkhWX0VfU1RBUlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfRV9WSFZfRV9TVEFSVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9FX1ZIVl9FX1NUQVJUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6MF0gVkhWX0VfU1RFUF9ISUdIVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9FX1ZIVl9FX1NURVBfSElHSFRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX0VfVkhWX0VfU1RFUF9ISUdIVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfRV9WSFZfRV9TVEVQX0hJR0hUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9QUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIFBVTVBfU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUF9QVU1QX1NVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BQX1BVTVBfU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFBfUFVNUF9TVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsxNTowXSBNQVhfUFAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUF9NQVhfUFBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BQX01BWF9QUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFBfTUFYX1BQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfUFJPR19FUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIE1BWF9FUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BST0dfRVBfTUFYX0VQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFJPR19FUF9NQVhfRVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUk9HX0VQX01BWF9FUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjBdIFBST0dSQU1fUFcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9QUk9HX0VQX1BST0dSQU1fUFdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1BST0dfRVBfUFJPR1JBTV9QV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfUFJPR19FUF9QUk9HUkFNX1BXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfRVJBX1BXCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRVJBU0VfUFcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9FUkFfUFdfRVJBU0VfUFdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX0VSQV9QV19FUkFTRV9QV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfRVJBX1BXX0VSQVNFX1BXX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfVkhWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoyNF0gVFJJTTEzX1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVFJJTTEzX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9UUklNMTNfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1RSSU0xM19QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzE5OjE2XSBWSFZfUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9WSFZfUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1ZIVl9QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVkhWX1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzExOjhdIFRSSU0xM19FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1RSSU0xM19FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVFJJTTEzX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9UUklNMTNfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzM6MF0gVkhWX0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfVkhWX0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9WSFZfRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1ZIVl9FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkxBU0hfVkhWX1BWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoyNF0gVFJJTTEzX1BWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1RSSU0xM19QVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVFJJTTEzX1BWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9UUklNMTNfUFZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsxOToxNl0gVkhWX1BWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1ZIVl9QVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVkhWX1BWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9WSFZfUFZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gVkNHMlA1CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1ZDRzJQNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVkNHMlA1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9WQ0cyUDVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gVklOSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZIVl9QVl9WSU5IX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVkhWX1BWX1ZJTkhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WSFZfUFZfVklOSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9WCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gVlNMX1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WX1ZTTF9QX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZfVlNMX1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVl9WU0xfUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBWV0xfUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZfVldMX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVl9WV0xfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WX1ZXTF9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIFZfUkVBRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX1ZfVl9SRUFEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfVl9WX1JFQURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9WX1ZfUkVBRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19VU0VSX0lECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gUEdfUkVWCisvLworLy8gRmllbGQgdXNlZCB0byBkaXN0aW5ndWlzaCByZXZpc2lvbnMgb2YgdGhlIGRldmljZS4KKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9QR19SRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1BHX1JFVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfUEdfUkVWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNl0gVkVSCisvLworLy8gVmVyc2lvbiBudW1iZXIuCisvLworLy8gMHgwOiBCaXRzIFsyNToxMl0gb2YgdGhpcyByZWdpc3RlciBoYXMgdGhlIHN0YXRlZCBtZWFuaW5nLgorLy8KKy8vIEFueSBvdGhlciBzZXR0aW5nIGluZGljYXRlIGEgZGlmZmVyZW50IGVuY29kaW5nIG9mIHRoZXNlIGJpdHMuCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfVkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9WRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQzAwMDAwMAorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1ZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiBbMjI6MTldIFNFUVVFTkNFCisvLworLy8gU2VxdWVuY2UuCisvLworLy8gVXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbWFya2V0aW5nL29yZGVyYWJsZSBwcm9kdWN0IHdoZXJlIG90aGVyIGZpZWxkcworLy8gb2YgVVNFUl9JRCBpcyB0aGUgc2FtZSAodGVtcCByYW5nZSwgZmxhc2ggc2l6ZSwgdm9sdGFnZSByYW5nZSBldGMpCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfU0VRVUVOQ0VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9TRVFVRU5DRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDc4MDAwMAorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1NFUVVFTkNFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiBbMTg6MTZdIFBLRworLy8KKy8vIFBhY2thZ2UgdHlwZS4KKy8vCisvLyAweDA6IDR4NG1tCisvLyAweDE6IDV4NW1tCisvLyAweDI6IDd4N21tCisvLworLy8gT3RoZXJzIHZhbHVlcyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfUEtHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9QS0dfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1BLR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIFBST1RPQ09MCisvLworLy8gUHJvdG9jb2xzIHN1cHBvcnRlZC4KKy8vCisvLyAweDE6IEJMRQorLy8gMHgyOiBSRjRDRQorLy8gMHg0OiBaaWdiZWUvNmxvd3BhbgorLy8gMHg4OiBQcm9wcmlldGFyeQorLy8KKy8vIE1vcmUgdGhhbiBvbmUgcHJvdG9jb2wgY2FuIGJlIHN1cHBvcnRlZCBvbiBzYW1lIGRldmljZSAtIHZhbHVlcyBhYm92ZSBhcmUKKy8vIHRoZW4gY29tYmluZWQuCisjZGVmaW5lIEZDRkcxX1VTRVJfSURfUFJPVE9DT0xfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfVVNFUl9JRF9QUk9UT0NPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGQ0ZHMV9VU0VSX0lEX1BST1RPQ09MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9PVFBfREFUQTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjIzXSBFQ19TVEVQX1NJWkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfRUNfU1RFUF9TSVpFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19FQ19TVEVQX1NJWkVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0VDX1NURVBfU0laRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBET19QUkVDT05ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0RPX1BSRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfRE9fUFJFQ09ORF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19ET19QUkVDT05EX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0RPX1BSRUNPTkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogWzIxOjE4XSBNQVhfRUNfTEVWRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfTUFYX0VDX0xFVkVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19NQVhfRUNfTEVWRUxfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzQzAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX01BWF9FQ19MRVZFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBUUklNXzFQNworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19UUklNXzFQN19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX1RSSU1fMVA3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfVFJJTV8xUDdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIEZMQVNIX1NJWkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfRkxBU0hfU0laRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19GTEFTSF9TSVpFX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX0ZMQVNIX1NJWkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBXQUlUX1NZU0NPREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTNfV0FJVF9TWVNDT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBM19XQUlUX1NZU0NPREVfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEEzX1dBSVRfU1lTQ09ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQU5BMl9UUklNCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gUkNPU0NIRkNUUklNRlJBQ1RfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fUkNPU0NIRkNUUklNRlJBQ1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9SQ09TQ0hGQ1RSSU1GUkFDVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1JDT1NDSEZDVFJJTUZSQUNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fUkNPU0NIRkNUUklNRlJBQ1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiBbMzA6MjZdIFJDT1NDSEZDVFJJTUZSQUNUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1JDT1NDSEZDVFJJTUZSQUNUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fUkNPU0NIRkNUUklNRlJBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDdDMDAwMDAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9SQ09TQ0hGQ1RSSU1GUkFDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6IFsyNDoyM10gU0VUX1JDT1NDX0hGX0ZJTkVfUkVTSVNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fU0VUX1JDT1NDX0hGX0ZJTkVfUkVTSVNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9TRVRfUkNPU0NfSEZfRklORV9SRVNJU1RPUl9NICAgICAgICAgICAgICAgIDB4MDE4MDAwMDAKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX1NFVF9SQ09TQ19IRl9GSU5FX1JFU0lTVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBBVEVTVExGX1VESUdMRE9fSUJJQVNfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9BVEVTVExGX1VESUdMRE9fSUJJQVNfVFJJTSAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0FURVNUTEZfVURJR0xET19JQklBU19UUklNX0JJVE4gICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fQVRFU1RMRl9VRElHTERPX0lCSUFTX1RSSU1fTSAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9BVEVTVExGX1VESUdMRE9fSUJJQVNfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6IFsyMToxNl0gTkFOT0FNUF9SRVNfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9OQU5PQU1QX1JFU19UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX05BTk9BTVBfUkVTX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fTkFOT0FNUF9SRVNfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTFdIERJVEhFUl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9ESVRIRVJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RJVEhFUl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRElUSEVSX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9ESVRIRVJfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICBbMTA6OF0gRENEQ19JUEVBSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9EQ0RDX0lQRUFLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RDRENfSVBFQUtfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRENEQ19JUEVBS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjZdIERFQURfVElNRV9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RFQURfVElNRV9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fREVBRF9USU1FX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9ERUFEX1RJTUVfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6M10gRENEQ19MT1dfRU5fU0VMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RDRENfTE9XX0VOX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRENEQ19MT1dfRU5fU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9EQ0RDX0xPV19FTl9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MF0gRENEQ19ISUdIX0VOX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FOQTJfVFJJTV9EQ0RDX0hJR0hfRU5fU0VMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfQU5BMl9UUklNX0RDRENfSElHSF9FTl9TRUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBGQ0ZHMV9BTkEyX1RSSU1fRENEQ19ISUdIX0VOX1NFTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19MRE9fVFJJTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjg6MjRdIFZERFJfVFJJTV9TTEVFUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0xET19UUklNX1ZERFJfVFJJTV9TTEVFUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fVkREUl9UUklNX1NMRUVQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9WRERSX1RSSU1fU0xFRVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMTg6MTZdIEdMRE9fQ1VSU1JDCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fR0xET19DVVJTUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9HTERPX0NVUlNSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIEZDRkcxX0xET19UUklNX0dMRE9fQ1VSU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxMjoxMV0gSVRSSU1fRElHTERPX0xPQUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9JVFJJTV9ESUdMRE9fTE9BRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0xET19UUklNX0lUUklNX0RJR0xET19MT0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fSVRSSU1fRElHTERPX0xPQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogIFsxMDo4XSBJVFJJTV9VRElHTERPCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fSVRSSU1fVURJR0xET19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9JVFJJTV9VRElHTERPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEZDRkcxX0xET19UUklNX0lUUklNX1VESUdMRE9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzI6MF0gVlRSSU1fREVMVEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9MRE9fVFJJTV9WVFJJTV9ERUxUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0xET19UUklNX1ZUUklNX0RFTFRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkNGRzFfTERPX1RSSU1fVlRSSU1fREVMVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUFDX0JMRV8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQUREUl8wXzMxCisvLworLy8gVGhlIGZpcnN0IDMyLWJpdHMgb2YgdGhlIDY0LWJpdCBNQUMgQkxFIGFkZHJlc3MKKyNkZWZpbmUgRkNGRzFfTUFDX0JMRV8wX0FERFJfMF8zMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGQ0ZHMV9NQUNfQkxFXzBfQUREUl8wXzMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZDRkcxX01BQ19CTEVfMF9BRERSXzBfMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX01BQ19CTEVfMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEFERFJfMzJfNjMKKy8vCisvLyBUaGUgbGFzdCAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgTUFDIEJMRSBhZGRyZXNzCisjZGVmaW5lIEZDRkcxX01BQ19CTEVfMV9BRERSXzMyXzYzX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkNGRzFfTUFDX0JMRV8xX0FERFJfMzJfNjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGQ0ZHMV9NQUNfQkxFXzFfQUREUl8zMl82M19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19NQUNfMTVfNF8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQUREUl8wXzMxCisvLworLy8gVGhlIGZpcnN0IDMyLWJpdHMgb2YgdGhlIDY0LWJpdCBNQUMgMTUuNCBhZGRyZXNzCisjZGVmaW5lIEZDRkcxX01BQ18xNV80XzBfQUREUl8wXzMxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkNGRzFfTUFDXzE1XzRfMF9BRERSXzBfMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGQ0ZHMV9NQUNfMTVfNF8wX0FERFJfMF8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19NQUNfMTVfNF8xCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQUREUl8zMl82MworLy8KKy8vIFRoZSBsYXN0IDMyLWJpdHMgb2YgdGhlIDY0LWJpdCBNQUMgMTUuNCBhZGRyZXNzCisjZGVmaW5lIEZDRkcxX01BQ18xNV80XzFfQUREUl8zMl82M19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkNGRzFfTUFDXzE1XzRfMV9BRERSXzMyXzYzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGQ0ZHMV9NQUNfMTVfNF8xX0FERFJfMzJfNjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19GTEFTSF9PVFBfREFUQTQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBTVEFOREJZX01PREVfU0VMX0lOVF9XUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9JTlRfV1JUICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9XUlRfQklUTiAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1dSVF9NICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9JTlRfV1JUX1MgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiBbMzA6MjldIFNUQU5EQllfUFdfU0VMX0lOVF9XUlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfSU5UX1dSVF9XICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9JTlRfV1JUX00gICAgICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0lOVF9XUlRfUyAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESVNfU1RBTkRCWV9JTlRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0lOVF9XUlQgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfSU5UX1dSVF9CSVROICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9JTlRfV1JUX00gICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0lOVF9XUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESVNfSURMRV9JTlRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9XUlQgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfSU5UX1dSVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfV1JUX00gICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9XUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBWSU5fQVRfWF9JTlRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0lOVF9XUlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfSU5UX1dSVF9NICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9JTlRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gU1RBTkRCWV9NT0RFX1NFTF9FWFRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1dSVCAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9FWFRfV1JUX0JJVE4gICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9XUlRfTSAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1dSVF9TICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogWzIyOjIxXSBTVEFOREJZX1BXX1NFTF9FWFRfV1JUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0VYVF9XUlRfVyAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfRVhUX1dSVF9NICAgICAgICAgICAgICAweDAwNjAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9FWFRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gRElTX1NUQU5EQllfRVhUX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9FWFRfV1JUICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0VYVF9XUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1dSVF9NICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9FWFRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gRElTX0lETEVfRVhUX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfV1JUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0VYVF9XUlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfRVhUX1dSVF9NICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfV1JUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNl0gVklOX0FUX1hfRVhUX1dSVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9FWFRfV1JUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0VYVF9XUlRfTSAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfRVhUX1dSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFNUQU5EQllfTU9ERV9TRUxfSU5UX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1JEICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9JTlRfUkRfQklUTiAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0lOVF9SRF9NICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfSU5UX1JEX1MgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogWzE0OjEzXSBTVEFOREJZX1BXX1NFTF9JTlRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfSU5UX1JEX1cgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9JTlRfUkRfTSAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0lOVF9SRF9TICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESVNfU1RBTkRCWV9JTlRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfSU5UX1JEICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9JTlRfUkRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0lOVF9SRF9NICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfSU5UX1JEX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJU19JRExFX0lOVF9SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfUkQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0lOVF9SRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfSU5UX1JEX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9JTlRfUkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICBbMTA6OF0gVklOX0FUX1hfSU5UX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0lOVF9SRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfSU5UX1JEX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9JTlRfUkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gU1RBTkRCWV9NT0RFX1NFTF9FWFRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9FWFRfUkQgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX01PREVfU0VMX0VYVF9SRF9CSVROICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfTU9ERV9TRUxfRVhUX1JEX00gICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9NT0RFX1NFTF9FWFRfUkRfUyAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgIFs2OjVdIFNUQU5EQllfUFdfU0VMX0VYVF9SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9TVEFOREJZX1BXX1NFTF9FWFRfUkRfVyAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1NUQU5EQllfUFdfU0VMX0VYVF9SRF9NICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfU1RBTkRCWV9QV19TRUxfRVhUX1JEX1MgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJU19TVEFOREJZX0VYVF9SRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9FWFRfUkQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19TVEFOREJZX0VYVF9SRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX1NUQU5EQllfRVhUX1JEX00gICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfU1RBTkRCWV9FWFRfUkRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRElTX0lETEVfRVhUX1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0VYVF9SRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfRElTX0lETEVfRVhUX1JEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9ESVNfSURMRV9FWFRfUkRfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X0RJU19JRExFX0VYVF9SRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBWSU5fQVRfWF9FWFRfUkQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GTEFTSF9PVFBfREFUQTRfVklOX0FUX1hfRVhUX1JEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0ZMQVNIX09UUF9EQVRBNF9WSU5fQVRfWF9FWFRfUkRfTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkNGRzFfRkxBU0hfT1RQX0RBVEE0X1ZJTl9BVF9YX0VYVF9SRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUlTQ19UUklNCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVEVNUFZTTE9QRQorLy8KKy8vIFNpZ25lZCBieXRlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgVEVNUCBzbG9wZSB3aXRoIGJhdHRlcnkgdm9sdGFnZSwgaW4KKy8vIGRlZ3JlZXMgQyAvIFYsIHdpdGggZm91ciBmcmFjdGlvbmFsIGJpdHMuCisjZGVmaW5lIEZDRkcxX01JU0NfVFJJTV9URU1QVlNMT1BFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfTUlTQ19UUklNX1RFTVBWU0xPUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9NSVNDX1RSSU1fVEVNUFZTTE9QRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19SQ09TQ19IRl9URU1QQ09NUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIEZJTkVfUkVTSVNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9GSU5FX1JFU0lTVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0ZJTkVfUkVTSVNUT1JfTSAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfRklORV9SRVNJU1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBDVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0NUUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfQ1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9DVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIENUUklNRlJBQ1RfUVVBRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0NUUklNRlJBQ1RfUVVBRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfQ1RSSU1GUkFDVF9RVUFEX00gICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9DVFJJTUZSQUNUX1FVQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIENUUklNRlJBQ1RfU0xPUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9SQ09TQ19IRl9URU1QQ09NUF9DVFJJTUZSQUNUX1NMT1BFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1JDT1NDX0hGX1RFTVBDT01QX0NUUklNRlJBQ1RfU0xPUEVfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfUkNPU0NfSEZfVEVNUENPTVBfQ1RSSU1GUkFDVF9TTE9QRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fSUNFUElDS19ERVZJQ0VfSUQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBQR19SRVYKKy8vCisvLyBGaWVsZCB1c2VkIHRvIGRpc3Rpbmd1aXNoIHJldmlzaW9ucyBvZiB0aGUgZGV2aWNlLgorI2RlZmluZSBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9QR19SRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX1BHX1JFVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfUEdfUkVWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjEyXSBXQUZFUl9JRAorLy8KKy8vIEZpZWxkIHVzZWQgdG8gaWRlbnRpZnkgc2lsaWNvbiBkaWUuCisjZGVmaW5lIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX1dBRkVSX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfV0FGRVJfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9XQUZFUl9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjBdIE1BTlVGQUNUVVJFUl9JRAorLy8KKy8vIE1hbnVmYWN0dXJlciBjb2RlLgorLy8KKy8vIDB4MDJGOiBUZXhhcyBJbnN0cnVtZW50cworI2RlZmluZSBGQ0ZHMV9JQ0VQSUNLX0RFVklDRV9JRF9NQU5VRkFDVFVSRVJfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZDRkcxX0lDRVBJQ0tfREVWSUNFX0lEX01BTlVGQUNUVVJFUl9JRF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkNGRzFfSUNFUElDS19ERVZJQ0VfSURfTUFOVUZBQ1RVUkVSX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRkNGRzFfUkVWSVNJT04KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBSRVYKKy8vCisvLyBUaGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBGQ0ZHMSBsYXlvdXQuIFRoaXMgdmFsdWUgd2lsbCBiZSByZWFkIGJ5CisvLyBhcHBsaWNhdGlvbiBTVyBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hpY2ggRkNGRzEgcGFyYW1ldGVycyB0aGF0IGhhdmUgdmFsaWQKKy8vIHZhbHVlcy4gVGhpcyByZXZpc2lvbiBudW1iZXIgbXVzdCBiZSBpbmNyZW1lbnRlZCBieSAxIGJlZm9yZSBhbnkgZGV2aWNlcyBhcmUKKy8vIHRvIGJlIHByb2R1Y2VkIGlmIHRoZSBGQ0ZHMSBsYXlvdXQgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHByb2R1Y3Rpb24KKy8vIG9mIGRldmljZXMuCisvLyBWYWx1ZSBtaWd0aCBjaGFuZ2Ugd2l0aG91dCB3YXJuaW5nLgorI2RlZmluZSBGQ0ZHMV9GQ0ZHMV9SRVZJU0lPTl9SRVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZDRkcxX0ZDRkcxX1JFVklTSU9OX1JFVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkNGRzFfRkNGRzFfUkVWSVNJT05fUkVWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fTUlTQ19PVFBfREFUQQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIFJDT1NDX0hGX0lUVU5FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9SQ09TQ19IRl9JVFVORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1JDT1NDX0hGX0lUVU5FX00gICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUkNPU0NfSEZfSVRVTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyMF0gUkNPU0NfSEZfQ1JJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUkNPU0NfSEZfQ1JJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9SQ09TQ19IRl9DUklNX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkYwMDAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1JDT1NDX0hGX0NSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTVdIFBFUl9NCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9QRVJfTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1BFUl9NX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEY4MDAwCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUEVSX01fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6IFsxNDoxMl0gUEVSX0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1BFUl9FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUEVSX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9QRVJfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo4XSBQT19UQUlMX1JFU19UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9QT19UQUlMX1JFU19UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1BPX1RBSUxfUkVTX1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfUE9fVEFJTF9SRVNfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gVEVTVF9QUk9HUkFNX1JFVgorLy8KKy8vIFRoZSByZXZpc2lvbiBvZiB0aGUgdGVzdCBwcm9ncmFtIHVzZWQgaW4gdGhlIHByb2R1Y3Rpb24gcHJvY2VzcyB3aGVuIEZDRkcxCisvLyB3YXMgcHJvZ3JhbW1lZC4KKy8vIFZhbHVlIG1pZ3RoIGNoYW5nZSB3aXRob3V0IHdhcm5pbmcuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfVEVTVF9QUk9HUkFNX1JFVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV9URVNUX1BST0dSQU1fUkVWX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBX1RFU1RfUFJPR1JBTV9SRVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19JT0NPTkYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNjowXSBHUElPX0NOVAorLy8KKy8vIE51bWJlciBvZiBhdmFpbGFibGUgRElPcy4KKyNkZWZpbmUgRkNGRzFfSU9DT05GX0dQSU9fQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGQ0ZHMV9JT0NPTkZfR1BJT19DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdGCisjZGVmaW5lIEZDRkcxX0lPQ09ORl9HUElPX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0NPTkZJR19JRl9BREMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBGRjJBREoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0ZGMkFESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfRkYyQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19GRjJBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBGRjNBREoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0ZGM0FESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfRkYzQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19GRjNBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIwXSBJTlQzQURKCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JTlQzQURKX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lOVDNBREpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSU5UM0FESl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gRkYxQURKCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19GRjFBREpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0ZGMUFESl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfRkYxQURKX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNToxNF0gQUFGQ0FQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19BQUZDQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0FBRkNBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfQUFGQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6IFsxMzoxMF0gSU5UMkFESgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSU5UMkFESl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JTlQyQURKX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM0MwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lOVDJBREpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgIFs5OjVdIElGRElHTERPX1RSSU1fT1VUUFVUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JRkRJR0xET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lGRElHTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgICAweDAwMDAwM0UwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSUZESUdMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzQ6MF0gSUZBTkFMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfSUZfQURDX0lGQU5BTERPX1RSSU1fT1VUUFVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX0NPTkZJR19JRl9BRENfSUZBTkFMRE9fVFJJTV9PVVRQVVRfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX0lGX0FEQ19JRkFOQUxET19UUklNX09VVFBVVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX09TQ19UT1AKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI5OjI2XSBYT1NDX0hGX1JPV19RMTIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9YT1NDX0hGX1JPV19RMTJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfUk9XX1ExMl9NICAgICAgICAgICAgICAgICAgICAgIDB4M0MwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9ST1dfUTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogWzI1OjEwXSBYT1NDX0hGX0NPTFVNTl9RMTIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9YT1NDX0hGX0NPTFVNTl9RMTJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1hPU0NfSEZfQ09MVU1OX1ExMl9NICAgICAgICAgICAgICAgICAgIDB4MDNGRkZDMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfWE9TQ19IRl9DT0xVTU5fUTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOToyXSBSQ09TQ0xGX0NUVU5FX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9SQ09TQ0xGX0NUVU5FX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1JDT1NDTEZfQ1RVTkVfVFJJTV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkMKKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9DVFVORV9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICBbMTowXSBSQ09TQ0xGX1JUVU5FX1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfT1NDX1RPUF9SQ09TQ0xGX1JUVU5FX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX0NPTkZJR19PU0NfVE9QX1JDT1NDTEZfUlRVTkVfVFJJTV9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgRkNGRzFfQ09ORklHX09TQ19UT1BfUkNPU0NMRl9SVFVORV9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1JGX0ZST05URU5ECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gSUZBTVBfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfSUZBTVBfSUJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9JRkFNUF9JQl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0lGQU1QX0lCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBMTkFfSUIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfTE5BX0lCX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9MTkFfSUJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0xOQV9JQl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE5XSBJRkFNUF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0lGQU1QX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfSUZBTVBfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAweDAwRjgwMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9JRkFNUF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6IFsxODoxNF0gQ1RMX1BBMF9UUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX0NUTF9QQTBfVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfQ1RMX1BBMF9UUklNX00gICAgICAgICAgICAgICAgICAgICAweDAwMDdDMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9DVExfUEEwX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gUEFUUklNQ09NUExFVEVfTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9QQVRSSU1DT01QTEVURV9OICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX1BBVFJJTUNPTVBMRVRFX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfUEFUUklNQ09NUExFVEVfTl9NICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9QQVRSSU1DT01QTEVURV9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgWzY6MF0gUkZMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfUkZfRlJPTlRFTkRfUkZMRE9fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19SRl9GUk9OVEVORF9SRkxET19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1JGX0ZST05URU5EX1JGTERPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX1NZTlRICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoxMl0gUkZDX01ETV9ERU1JUU1DMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9SRkNfTURNX0RFTUlRTUMwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX1JGQ19NRE1fREVNSVFNQzBfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGRjAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfUkZDX01ETV9ERU1JUU1DMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgWzExOjZdIExET1ZDT19UUklNX09VVFBVVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9MRE9WQ09fVFJJTV9PVVRQVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX0xET1ZDT19UUklNX09VVFBVVF9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZDMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfTERPVkNPX1RSSU1fT1VUUFVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjBdIFNMRE9fVFJJTV9PVVRQVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfU1lOVEhfU0xET19UUklNX09VVFBVVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0NPTkZJR19TWU5USF9TTERPX1RSSU1fT1VUUFVUX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkNGRzFfQ09ORklHX1NZTlRIX1NMRE9fVFJJTV9PVVRQVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU09DX0FEQ19BQlNfR0FJTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFNPQ19BRENfQUJTX0dBSU5fVEVNUDEKKy8vCisvLyBTT0NfQURDIGdhaW4gaW4gYWJzb2x1dGUgcmVmZXJlbmNlIG1vZGUgYXQgdGVtcGVyYXR1cmUgMSAoMzBDKS4gQ2FsY3VsYXRlZAorLy8gaW4gcHJvZHVjdGlvbiB0ZXN0Li4KKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19BQlNfR0FJTl9TT0NfQURDX0FCU19HQUlOX1RFTVAxX1cgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX0FCU19HQUlOX1NPQ19BRENfQUJTX0dBSU5fVEVNUDFfTSAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfQUJTX0dBSU5fU09DX0FEQ19BQlNfR0FJTl9URU1QMV9TICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1NPQ19BRENfUkVMX0dBSU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBTT0NfQURDX1JFTF9HQUlOX1RFTVAxCisvLworLy8gU09DX0FEQyBnYWluIGluIHJlbGF0aXZlIHJlZmVyZW5jZSBtb2RlIGF0IHRlbXBlcmF0dXJlIDEgKDMwQykuIENhbGN1bGF0ZWQKKy8vIGluIHByb2R1Y3Rpb24gdGVzdC4uCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfUkVMX0dBSU5fU09DX0FEQ19SRUxfR0FJTl9URU1QMV9XICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19SRUxfR0FJTl9TT0NfQURDX1JFTF9HQUlOX1RFTVAxX00gICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX1JFTF9HQUlOX1NPQ19BRENfUkVMX0dBSU5fVEVNUDFfUyAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19TT0NfQURDX09GRlNFVF9JTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzIzOjE2XSBTT0NfQURDX1JFTF9PRkZTRVRfVEVNUDEKKy8vCisvLyBTT0NfQURDIG9mZnNldCBpbiByZWxhdGl2ZSByZWZlcmVuY2UgbW9kZSBhdCB0ZW1wZXJhdHVyZSAxICgzMEMpLiBTaWduZWQKKy8vIDgtYml0IG51bWJlci4gQ2FsY3VsYXRlZCBpbiBwcm9kdWN0aW9uIHRlc3QuLgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX09GRlNFVF9JTlRfU09DX0FEQ19SRUxfT0ZGU0VUX1RFTVAxX1cgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1NPQ19BRENfT0ZGU0VUX0lOVF9TT0NfQURDX1JFTF9PRkZTRVRfVEVNUDFfTSAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19PRkZTRVRfSU5UX1NPQ19BRENfUkVMX09GRlNFVF9URU1QMV9TICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICBbNzowXSBTT0NfQURDX0FCU19PRkZTRVRfVEVNUDEKKy8vCisvLyBTT0NfQURDIG9mZnNldCBpbiBhYnNvbHV0ZSByZWZlcmVuY2UgbW9kZSBhdCB0ZW1wZXJhdHVyZSAxICgzMEMpLiBTaWduZWQKKy8vIDgtYml0IG51bWJlci4gQ2FsY3VsYXRlZCBpbiBwcm9kdWN0aW9uIHRlc3QuLgorI2RlZmluZSBGQ0ZHMV9TT0NfQURDX09GRlNFVF9JTlRfU09DX0FEQ19BQlNfT0ZGU0VUX1RFTVAxX1cgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1NPQ19BRENfT0ZGU0VUX0lOVF9TT0NfQURDX0FCU19PRkZTRVRfVEVNUDFfTSAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfU09DX0FEQ19PRkZTRVRfSU5UX1NPQ19BRENfQUJTX09GRlNFVF9URU1QMV9TICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fU09DX0FEQ19SRUZfVFJJTV9BTkRfT0ZGU0VUX0VYVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIFNPQ19BRENfUkVGX1ZPTFRBR0VfVFJJTV9URU1QMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFRfU09DX0FEQ19SRUZfVk9MVEFHRV9UUklNX1RFTVAxX1cgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFRfU09DX0FEQ19SRUZfVk9MVEFHRV9UUklNX1RFTVAxX00gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX1NPQ19BRENfUkVGX1RSSU1fQU5EX09GRlNFVF9FWFRfU09DX0FEQ19SRUZfVk9MVEFHRV9UUklNX1RFTVAxX1MgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19BTVBDT01QX1RIMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MThdIEhQTVJBTVAzX0xUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0xUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfTFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZDMDAwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QM19MVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTU6MTBdIEhQTVJBTVAzX0hUSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAzX0hUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDNfSFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkMwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QM19IVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgIFs5OjZdIElCSUFTQ0FQX0xQVE9IUF9PTF9DTlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9JQklBU0NBUF9MUFRPSFBfT0xfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0lCSUFTQ0FQX0xQVE9IUF9PTF9DTlRfTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAzQzAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSUJJQVNDQVBfTFBUT0hQX09MX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBIUE1SQU1QMV9USAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgxX0hQTVJBTVAxX1RIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDFfSFBNUkFNUDFfVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMV9IUE1SQU1QMV9USF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19BTVBDT01QX1RIMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjZdIExQTVVQREFURV9MVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfTFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9MVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkMwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfTFBNVVBEQVRFX0xUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogWzIzOjE4XSBMUE1VUERBVEVfSFRNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfTFBNVVBEQVRFX0hUTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9MUE1VUERBVEVfSFRNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkMwMDAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0xQTVVQREFURV9IVE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNToxMF0gQURDX0NPTVBfQU1QVEhfTFBNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9BRENfQ09NUF9BTVBUSF9MUE1fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGQzAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgWzc6Ml0gQURDX0NPTVBfQU1QVEhfSFBNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9USDJfQURDX0NPTVBfQU1QVEhfSFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX1RIMl9BRENfQ09NUF9BTVBUSF9IUE1fTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZDCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfVEgyX0FEQ19DT01QX0FNUFRIX0hQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0FNUENPTVBfQ1RSTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBBTVBDT01QX1JFUV9NT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9BTVBDT01QX1JFUV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0FNUENPTVBfUkVRX01PREVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfQU1QQ09NUF9SRVFfTU9ERV9NICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9BTVBDT01QX1JFUV9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogWzIzOjIwXSBJQklBU19PRkZTRVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBJQklBU19JTklUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU19JTklUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTX0lOSVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNfSU5JVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9MUE1fSUJJQVNfV0FJVF9DTlRfRklOQUxfVyAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0xQTV9JQklBU19XQUlUX0NOVF9GSU5BTF9NICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfTFBNX0lCSUFTX1dBSVRfQ05UX0ZJTkFMX1MgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6NF0gQ0FQX1NURVAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0NBUF9TVEVQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfQ0FQX1NURVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9DQVBfU1RFUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBJQklBU0NBUF9IUFRPTFBfT0xfQ05UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQU1QQ09NUF9DVFJMMV9JQklBU0NBUF9IUFRPTFBfT0xfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9BTVBDT01QX0NUUkwxX0lCSUFTQ0FQX0hQVE9MUF9PTF9DTlRfTSAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZDRkcxX0FNUENPTVBfQ1RSTDFfSUJJQVNDQVBfSFBUT0xQX09MX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX0FOQUJZUEFTU19WQUxVRTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMzowXSBYT1NDX0hGX0lCSUFTVEhFUk0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9BTkFCWVBBU1NfVkFMVUUyX1hPU0NfSEZfSUJJQVNUSEVSTV9XICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEZDRkcxX0FOQUJZUEFTU19WQUxVRTJfWE9TQ19IRl9JQklBU1RIRVJNX00gICAgICAgICAgICAgICAgIDB4MDAwMDNGRkYKKyNkZWZpbmUgRkNGRzFfQU5BQllQQVNTX1ZBTFVFMl9YT1NDX0hGX0lCSUFTVEhFUk1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ09ORklHX01JU0NfQURDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxN10gUlNTSVRSSU1DT01QTEVURV9OCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1JTU0lUUklNQ09NUExFVEVfTiAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfUlNTSVRSSU1DT01QTEVURV9OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19SU1NJVFJJTUNPTVBMRVRFX05fTSAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1JTU0lUUklNQ09NUExFVEVfTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogIFsxNjo5XSBSU1NJX09GRlNFVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19SU1NJX09GRlNFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1JTU0lfT0ZGU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxRkUwMAorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfUlNTSV9PRkZTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjZdIFFVQU5UQ1RMVEhSRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfUVVBTlRDVExUSFJFU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19RVUFOVENUTFRIUkVTX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQzAKKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX1FVQU5UQ1RMVEhSRVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICBbNTowXSBEQUNUUklNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfQ09ORklHX01JU0NfQURDX0RBQ1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGQ0ZHMV9DT05GSUdfTUlTQ19BRENfREFDVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZDRkcxX0NPTkZJR19NSVNDX0FEQ19EQUNUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1ZPTFRfVFJJTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjg6MjRdIFZERFJfVFJJTV9ISAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9WRERSX1RSSU1fSEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1ZERFJfVFJJTV9ISF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVkREUl9UUklNX0hIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjA6MTZdIFZERFJfVFJJTV9ICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1ZERFJfVFJJTV9IX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVkREUl9UUklNX0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUYwMDAwCisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9WRERSX1RSSU1fSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTI6OF0gVkREUl9UUklNX1NMRUVQX0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVkREUl9UUklNX1NMRUVQX0hfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9WRERSX1RSSU1fU0xFRVBfSF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGMDAKKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1ZERFJfVFJJTV9TTEVFUF9IX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNDowXSBUUklNQk9EX0gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9WT0xUX1RSSU1fVFJJTUJPRF9IX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZDRkcxX1ZPTFRfVFJJTV9UUklNQk9EX0hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgRkNGRzFfVk9MVF9UUklNX1RSSU1CT0RfSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fT1NDX0NPTkYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI5XSBBRENfU0hfVkJVRl9FTgorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIERESV8wX09TQzpBRENET1VCTEVSTkFOT0FNUENUTC5BRENfU0hfVkJVRl9FTi4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQURDX1NIX1ZCVUZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfVkJVRl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FEQ19TSF9WQlVGX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQURDX1NIX1ZCVUZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBBRENfU0hfTU9ERV9FTgorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIERESV8wX09TQzpBRENET1VCTEVSTkFOT0FNUENUTC5BRENfU0hfTU9ERV9FTi4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQURDX1NIX01PREVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9BRENfU0hfTU9ERV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FEQ19TSF9NT0RFX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQURDX1NIX01PREVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBBVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTQorLy8KKy8vIFRyaW0gdmFsdWUgZm9yIERESV8wX09TQzpBVEVTVENUTC5BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU0gICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9BVEVTVExGX1JDT1NDTEZfSUJJQVNfVFJJTV9CSVROICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0FURVNUTEZfUkNPU0NMRl9JQklBU19UUklNX00gICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfQVRFU1RMRl9SQ09TQ0xGX0lCSUFTX1RSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI1XSBYT1NDTEZfUkVHVUxBVE9SX1RSSU0KKy8vCisvLyBUcmltIHZhbHVlIGZvciBERElfMF9PU0M6TEZPU0NDVEwuWE9TQ0xGX1JFR1VMQVRPUl9UUklNLgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfUkVHVUxBVE9SX1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NMRl9SRUdVTEFUT1JfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ0xGX1JFR1VMQVRPUl9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogWzI0OjIxXSBYT1NDTEZfQ01JUlJXUl9SQVRJTworLy8KKy8vIFRyaW0gdmFsdWUgZm9yIERESV8wX09TQzpMRk9TQ0NUTC5YT1NDTEZfQ01JUlJXUl9SQVRJTy4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ0xGX0NNSVJSV1JfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDTEZfQ01JUlJXUl9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAweDAxRTAwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NMRl9DTUlSUldSX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6IFsyMDoxOV0gWE9TQ19IRl9GQVNUX1NUQVJUCisvLworLy8gVHJpbSB2YWx1ZSBmb3IgRERJXzBfT1NDOkNUTDEuWE9TQ19IRl9GQVNUX1NUQVJULgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDX0hGX0ZBU1RfU1RBUlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NfSEZfRkFTVF9TVEFSVF9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ19IRl9GQVNUX1NUQVJUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBYT1NDX09QVElPTgorLy8KKy8vIDA6IFhPU0NfSEYgdW5hdmFpbGFibGUgKG1heSBub3QgYmUgYm9uZGVkIG91dCkKKy8vIDE6IFhPU0NfSEYgYXZhaWxhYmxlIChkZWZhdWx0KQorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDX09QVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX1hPU0NfT1BUSU9OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfWE9TQ19PUFRJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9YT1NDX09QVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIEhQT1NDX09QVElPTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX09QVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfT1BUSU9OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19PUFRJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX09QVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gSFBPU0NfQklBU19IT0xEX01PREVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX0hPTERfTU9ERV9FTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfSE9MRF9NT0RFX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19IT0xEX01PREVfRU5fTSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX0hPTERfTU9ERV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIEhQT1NDX0NVUlJNSVJSX1JBVElPCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQ1VSUk1JUlJfUkFUSU9fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19DVVJSTUlSUl9SQVRJT19NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0NVUlJNSVJSX1JBVElPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6OF0gSFBPU0NfQklBU19SRVNfU0VUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRVNfU0VUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFU19TRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVTX1NFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gSFBPU0NfRklMVEVSX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfRklMVEVSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19GSUxURVJfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0ZJTFRFUl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfRklMVEVSX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICBbNjo1XSBIUE9TQ19CSUFTX1JFQ0hBUkdFX0RFTEFZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfQklBU19SRUNIQVJHRV9ERUxBWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19CSUFTX1JFQ0hBUkdFX0RFTEFZX00gICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0JJQVNfUkVDSEFSR0VfREVMQVlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgWzI6MV0gSFBPU0NfU0VSSUVTX0NBUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX1NFUklFU19DQVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfU0VSSUVTX0NBUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19TRVJJRVNfQ0FQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEhQT1NDX0RJVjNfQllQQVNTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfRElWM19CWVBBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGQ0ZHMV9PU0NfQ09ORl9IUE9TQ19ESVYzX0JZUEFTU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZDRkcxX09TQ19DT05GX0hQT1NDX0RJVjNfQllQQVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkNGRzFfT1NDX0NPTkZfSFBPU0NfRElWM19CWVBBU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fRlJFUV9PRkZTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBIUE9TQ19DT01QX1AwCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gSFBPU0NfQ09NUF9QMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEhQT1NDX0NPTVBfUDIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9GUkVRX09GRlNFVF9IUE9TQ19DT01QX1AyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX0ZSRVFfT0ZGU0VUX0hQT1NDX0NPTVBfUDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfRlJFUV9PRkZTRVRfSFBPU0NfQ09NUF9QMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fQ0FQX1RSSU0KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBGTFVYX0NBUF8wUDI4X1RSSU0KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGQ0ZHMV9DQVBfVFJJTV9GTFVYX0NBUF8wUDI4X1RSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZDRkcxX0NBUF9UUklNX0ZMVVhfQ0FQXzBQMjhfVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgRkNGRzFfQ0FQX1RSSU1fRkxVWF9DQVBfMFAyOF9UUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTowXSBGTFVYX0NBUF8wUDRfVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX0NBUF9UUklNX0ZMVVhfQ0FQXzBQNF9UUklNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkNGRzFfQ0FQX1RSSU1fRkxVWF9DQVBfMFA0X1RSSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGQ0ZHMV9DQVBfVFJJTV9GTFVYX0NBUF8wUDRfVFJJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19NSVNDX09UUF9EQVRBXzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI4OjI3XSBQRUFLX0RFVF9JVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9QRUFLX0RFVF9JVFJJTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX1BFQUtfREVUX0lUUklNX00gICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfUEVBS19ERVRfSVRSSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIEhQX0JVRl9JVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9IUF9CVUZfSVRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQX0JVRl9JVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSFBfQlVGX0lUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MjJdIExQX0JVRl9JVFJJTQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUF9CVUZfSVRSSU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0xQX0JVRl9JVFJJTV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEMwMDAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBfQlVGX0lUUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiBbMjE6MjBdIERCTFJfTE9PUF9GSUxURVJfUkVTRVRfVk9MVEFHRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9EQkxSX0xPT1BfRklMVEVSX1JFU0VUX1ZPTFRBR0VfVyAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0RCTFJfTE9PUF9GSUxURVJfUkVTRVRfVk9MVEFHRV9NICAgICAgMHgwMDMwMDAwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfREJMUl9MT09QX0ZJTFRFUl9SRVNFVF9WT0xUQUdFX1MgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTBdIEhQTV9JQklBU19XQUlUX0NOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9IUE1fSUJJQVNfV0FJVF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0hQTV9JQklBU19XQUlUX0NOVF9NICAgICAgICAgICAgICAgICAgMHgwMDBGRkMwMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSFBNX0lCSUFTX1dBSVRfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgIFs5OjRdIExQTV9JQklBU19XQUlUX0NOVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9MUE1fSUJJQVNfV0FJVF9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0xQTV9JQklBU19XQUlUX0NOVF9NICAgICAgICAgICAgICAgICAgMHgwMDAwMDNGMAorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfTFBNX0lCSUFTX1dBSVRfQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIElEQUNfU1RFUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZDRkcxX01JU0NfT1RQX0RBVEFfMV9JREFDX1NURVBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkNGRzFfTUlTQ19PVFBfREFUQV8xX0lEQUNfU1RFUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGQ0ZHMV9NSVNDX09UUF9EQVRBXzFfSURBQ19TVEVQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19QV0RfQ1VSUl8yMEMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBERUxUQV9DQUNIRV9SRUYKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIGNhY2hlIHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfREVMVEFfQ0FDSEVfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19ERUxUQV9DQUNIRV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0RFTFRBX0NBQ0hFX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBERUxUQV9SRk1FTV9SRVQKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gMXVBIHVuaXRzLCB3aXRoIFJGIG1lbW9yeSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0RFTFRBX1JGTUVNX1JFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfREVMVEFfUkZNRU1fUkVUX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19ERUxUQV9SRk1FTV9SRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gREVMVEFfWE9TQ19MUE0KKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIFhPU0NfSEYgb24gaW4gbG93LXBvd2VyCisvLyBtb2RlCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19ERUxUQV9YT1NDX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0RFTFRBX1hPU0NfTFBNX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfREVMVEFfWE9TQ19MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEJBU0VMSU5FCisvLworLy8gV29yc3QtY2FzZSBiYXNlbGluZSBtYXhpbXVtIHBvd2VyZG93biBjdXJyZW50LCBpbiB1bml0cyBvZiAwLjV1QQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8yMENfQkFTRUxJTkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzIwQ19CQVNFTElORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMjBDX0JBU0VMSU5FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fUFdEX0NVUlJfMzVDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gREVMVEFfQ0FDSEVfUkVGCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBjYWNoZSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0RFTFRBX0NBQ0hFX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfREVMVEFfQ0FDSEVfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19ERUxUQV9DQUNIRV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gREVMVEFfUkZNRU1fUkVUCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIDF1QSB1bml0cywgd2l0aCBSRiBtZW1vcnkgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19ERUxUQV9SRk1FTV9SRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0RFTFRBX1JGTUVNX1JFVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfREVMVEFfUkZNRU1fUkVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIERFTFRBX1hPU0NfTFBNCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBYT1NDX0hGIG9uIGluIGxvdy1wb3dlcgorLy8gbW9kZQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfREVMVEFfWE9TQ19MUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19ERUxUQV9YT1NDX0xQTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0RFTFRBX1hPU0NfTFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCQVNFTElORQorLy8KKy8vIFdvcnN0LWNhc2UgYmFzZWxpbmUgbWF4aW11bSBwb3dlcmRvd24gY3VycmVudCwgaW4gdW5pdHMgb2YgMC41dUEKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMzVDX0JBU0VMSU5FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8zNUNfQkFTRUxJTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzM1Q19CQVNFTElORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1BXRF9DVVJSXzUwQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIERFTFRBX0NBQ0hFX1JFRgorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggY2FjaGUgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19ERUxUQV9DQUNIRV9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0RFTFRBX0NBQ0hFX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfREVMVEFfQ0FDSEVfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIERFTFRBX1JGTUVNX1JFVAorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiAxdUEgdW5pdHMsIHdpdGggUkYgbWVtb3J5IHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfREVMVEFfUkZNRU1fUkVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19ERUxUQV9SRk1FTV9SRVRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0RFTFRBX1JGTUVNX1JFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBERUxUQV9YT1NDX0xQTQorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggWE9TQ19IRiBvbiBpbiBsb3ctcG93ZXIKKy8vIG1vZGUKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0RFTFRBX1hPU0NfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfREVMVEFfWE9TQ19MUE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19ERUxUQV9YT1NDX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkFTRUxJTkUKKy8vCisvLyBXb3JzdC1jYXNlIGJhc2VsaW5lIG1heGltdW0gcG93ZXJkb3duIGN1cnJlbnQsIGluIHVuaXRzIG9mIDAuNXVBCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzUwQ19CQVNFTElORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNTBDX0JBU0VMSU5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl81MENfQkFTRUxJTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19QV0RfQ1VSUl82NUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBERUxUQV9DQUNIRV9SRUYKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIGNhY2hlIHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfREVMVEFfQ0FDSEVfUkVGX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19ERUxUQV9DQUNIRV9SRUZfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0RFTFRBX0NBQ0hFX1JFRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBERUxUQV9SRk1FTV9SRVQKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gMXVBIHVuaXRzLCB3aXRoIFJGIG1lbW9yeSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0RFTFRBX1JGTUVNX1JFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfREVMVEFfUkZNRU1fUkVUX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19ERUxUQV9SRk1FTV9SRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gREVMVEFfWE9TQ19MUE0KKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIFhPU0NfSEYgb24gaW4gbG93LXBvd2VyCisvLyBtb2RlCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19ERUxUQV9YT1NDX0xQTV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0RFTFRBX1hPU0NfTFBNX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfREVMVEFfWE9TQ19MUE1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEJBU0VMSU5FCisvLworLy8gV29yc3QtY2FzZSBiYXNlbGluZSBtYXhpbXVtIHBvd2VyZG93biBjdXJyZW50LCBpbiB1bml0cyBvZiAwLjV1QQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl82NUNfQkFTRUxJTkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzY1Q19CQVNFTElORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfNjVDX0JBU0VMSU5FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZDRkcxX09fUFdEX0NVUlJfODBDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gREVMVEFfQ0FDSEVfUkVGCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBjYWNoZSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0RFTFRBX0NBQ0hFX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfREVMVEFfQ0FDSEVfUkVGX00gICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19ERUxUQV9DQUNIRV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gREVMVEFfUkZNRU1fUkVUCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIDF1QSB1bml0cywgd2l0aCBSRiBtZW1vcnkgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19ERUxUQV9SRk1FTV9SRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0RFTFRBX1JGTUVNX1JFVF9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfREVMVEFfUkZNRU1fUkVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIERFTFRBX1hPU0NfTFBNCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBYT1NDX0hGIG9uIGluIGxvdy1wb3dlcgorLy8gbW9kZQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfREVMVEFfWE9TQ19MUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19ERUxUQV9YT1NDX0xQTV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0RFTFRBX1hPU0NfTFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCQVNFTElORQorLy8KKy8vIFdvcnN0LWNhc2UgYmFzZWxpbmUgbWF4aW11bSBwb3dlcmRvd24gY3VycmVudCwgaW4gdW5pdHMgb2YgMC41dUEKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfODBDX0JBU0VMSU5FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl84MENfQkFTRUxJTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzgwQ19CQVNFTElORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1BXRF9DVVJSXzk1QworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIERFTFRBX0NBQ0hFX1JFRgorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggY2FjaGUgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19ERUxUQV9DQUNIRV9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0RFTFRBX0NBQ0hFX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfREVMVEFfQ0FDSEVfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIERFTFRBX1JGTUVNX1JFVAorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiAxdUEgdW5pdHMsIHdpdGggUkYgbWVtb3J5IHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfREVMVEFfUkZNRU1fUkVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19ERUxUQV9SRk1FTV9SRVRfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0RFTFRBX1JGTUVNX1JFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBERUxUQV9YT1NDX0xQTQorLy8KKy8vIEFkZGl0aW9uYWwgbWF4aW11bSBjdXJyZW50LCBpbiB1bml0cyBvZiAxdUEsIHdpdGggWE9TQ19IRiBvbiBpbiBsb3ctcG93ZXIKKy8vIG1vZGUKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0RFTFRBX1hPU0NfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfREVMVEFfWE9TQ19MUE1fTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19ERUxUQV9YT1NDX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gQkFTRUxJTkUKKy8vCisvLyBXb3JzdC1jYXNlIGJhc2VsaW5lIG1heGltdW0gcG93ZXJkb3duIGN1cnJlbnQsIGluIHVuaXRzIG9mIDAuNXVBCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzk1Q19CQVNFTElORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfOTVDX0JBU0VMSU5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl85NUNfQkFTRUxJTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkNGRzFfT19QV0RfQ1VSUl8xMTBDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gREVMVEFfQ0FDSEVfUkVGCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBjYWNoZSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19ERUxUQV9DQUNIRV9SRUZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0RFTFRBX0NBQ0hFX1JFRl9NICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfREVMVEFfQ0FDSEVfUkVGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMzoxNl0gREVMVEFfUkZNRU1fUkVUCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIDF1QSB1bml0cywgd2l0aCBSRiBtZW1vcnkgcmV0ZW50aW9uCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfREVMVEFfUkZNRU1fUkVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19ERUxUQV9SRk1FTV9SRVRfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0RFTFRBX1JGTUVNX1JFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzE1OjhdIERFTFRBX1hPU0NfTFBNCisvLworLy8gQWRkaXRpb25hbCBtYXhpbXVtIGN1cnJlbnQsIGluIHVuaXRzIG9mIDF1QSwgd2l0aCBYT1NDX0hGIG9uIGluIGxvdy1wb3dlcgorLy8gbW9kZQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0RFTFRBX1hPU0NfTFBNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfREVMVEFfWE9TQ19MUE1fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19ERUxUQV9YT1NDX0xQTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCQVNFTElORQorLy8KKy8vIFdvcnN0LWNhc2UgYmFzZWxpbmUgbWF4aW11bSBwb3dlcmRvd24gY3VycmVudCwgaW4gdW5pdHMgb2YgMC41dUEKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTEwQ19CQVNFTElORV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMTBDX0JBU0VMSU5FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzExMENfQkFTRUxJTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGQ0ZHMV9PX1BXRF9DVVJSXzEyNUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI0XSBERUxUQV9DQUNIRV9SRUYKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIGNhY2hlIHJldGVudGlvbgorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0RFTFRBX0NBQ0hFX1JFRl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfREVMVEFfQ0FDSEVfUkVGX00gICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19ERUxUQV9DQUNIRV9SRUZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjE2XSBERUxUQV9SRk1FTV9SRVQKKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gMXVBIHVuaXRzLCB3aXRoIFJGIG1lbW9yeSByZXRlbnRpb24KKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19ERUxUQV9SRk1FTV9SRVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0RFTFRBX1JGTUVNX1JFVF9NICAgICAgICAgICAgICAgICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfREVMVEFfUkZNRU1fUkVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gREVMVEFfWE9TQ19MUE0KKy8vCisvLyBBZGRpdGlvbmFsIG1heGltdW0gY3VycmVudCwgaW4gdW5pdHMgb2YgMXVBLCB3aXRoIFhPU0NfSEYgb24gaW4gbG93LXBvd2VyCisvLyBtb2RlCisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfREVMVEFfWE9TQ19MUE1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19ERUxUQV9YT1NDX0xQTV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0RFTFRBX1hPU0NfTFBNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEJBU0VMSU5FCisvLworLy8gV29yc3QtY2FzZSBiYXNlbGluZSBtYXhpbXVtIHBvd2VyZG93biBjdXJyZW50LCBpbiB1bml0cyBvZiAwLjV1QQorI2RlZmluZSBGQ0ZHMV9QV0RfQ1VSUl8xMjVDX0JBU0VMSU5FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZDRkcxX1BXRF9DVVJSXzEyNUNfQkFTRUxJTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgRkNGRzFfUFdEX0NVUlJfMTI1Q19CQVNFTElORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0ZDRkcxX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ZsYXNoLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDc5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19mbGFzaC5oCkBAIC0wLDAgKzEsMzQ3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2ZsYXNoX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0ZMQVNIX0hfXworI2RlZmluZSBfX0hXX0ZMQVNIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEZMQVNIIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZNQyBhbmQgRWZ1c2UgU3RhdHVzCisjZGVmaW5lIEZMQVNIX09fU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX1NZU0NPREVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkxBU0hfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRUFERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0RBVEFVUFBFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDA4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fREFUQUxPV0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMEMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAxMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDE0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fQUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMTgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19CT1VOREFSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAxQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDIwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMjQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRVJFTEVBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAyOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFUElOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDJDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VDUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMzAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19FRlVTRVJFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAzNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0VGVVNFUFJPR1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDM4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRUZVU0VFUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwM0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19TSU5HTEVCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTA0MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX1RXT0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDQ0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fU0VMRlRFU1RDWUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwNDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19TRUxGVEVTVFNJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTA0QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZSRENUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNQUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GRURBQ0NUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZFREFDU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDFDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkJQUk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMzAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAzNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZCQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDM4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkJBQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwM0MKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQkZBTExCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA0MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZCUFJEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDQ0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlBBQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwNDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GUEFDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA0QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDUwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRk1TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwNTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA2NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZWUkVBRENUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDgwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlZIVkNUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwODQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GVkhWQ1QyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA4OAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZWSFZDVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDhDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlZOVkNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwOTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GVlNMUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjA5NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZWV0xDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDk4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkVGVVNFQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwOUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GRUZVU0VTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjBBMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZFRlVTRURBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMEE0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNFUVBNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwQTgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQlNUUk9CRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEwMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZQU1RST0JFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTA0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkJNT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMDgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GVENSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEwQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZBRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTEwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlRDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV1BXUklURTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEyMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXUFdSSVRFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldQV1JJVEUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMjgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV1BXUklURTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEyQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXUFdSSVRFNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTMwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldQV1JJVEU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxMzQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GV1BXUklURTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjEzOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZXUFdSSVRFNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTNDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRldQV1JJVEVfRUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIxNDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU1dTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjE0NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9HTEJDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjAwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMDQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIwOAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjBDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1BFX09TVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fVlNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIxNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QRV9WU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0NNUF9WU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fRVhfVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIyMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9SRF9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1BfT0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMjgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fRVJBX09IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjIyQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9TQVZfUFBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjMwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1BFX1ZIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyMzQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fUFJHX1BXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI0MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9FUkFfUFcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjQ0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NBVl9FUkFfUFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI1OAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjVDCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1BHTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNjAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fRVJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI2NAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QUkdfUFVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjY4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0VSQV9QVUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNkMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fU1RFUF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI3MAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9QVUxfQ05UUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjc0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0VDX1NURVBfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyNzgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fU1RfTUFDSElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI3QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9GTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjgwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1dSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyODgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fQUNDX1BQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjI4QworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9BQ0NfRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjkwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyQTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fU0VDVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJBNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZNQ19SRVZfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0VSUl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyQUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fUEdNX01BWFBVTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJCMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9FWEVDVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX1NFQ1RPUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyQzAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fU0VDVE9SMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJDNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9CU0xFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkUwCisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRlNNX0JTTEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIyRTQKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GU01fQlNMUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjJGMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZTTV9CU0xQMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMkY0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CQU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MDAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX1dSQVBQRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQwNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQk5LX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDA4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CMF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MTAKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0IxX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQxNAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQjJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDE4CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CM19TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MUMKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0I0X1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQyMAorCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQjVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDI0CisKKy8vIEludGVybmFsCisjZGVmaW5lIEZMQVNIX09fRkNGR19CNl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI0MjgKKworLy8gSW50ZXJuYWwKKyNkZWZpbmUgRkxBU0hfT19GQ0ZHX0I3X1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQyQworCisvLyBJbnRlcm5hbAorI2RlZmluZSBGTEFTSF9PX0ZDRkdfQjBfU1NJWkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDMwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19TVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNV0gRUZVU0VfQkxBTksKKy8vCisvLyBFZnVzZSBzY2FubmluZyBkZXRlY3RlZCBpZiBmdXNlIFJPTSBpcyBibGFuazoKKy8vIDAgOiBOb3QgYmxhbmsKKy8vIDEgOiBCbGFuaworI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0JMQU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfQkxBTktfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9CTEFOS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0JMQU5LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIEVGVVNFX1RJTUVPVVQKKy8vCisvLyBFZnVzZSBzY2FubmluZyByZXN1bHRlZCBpbiB0aW1lb3V0IGVycm9yLgorLy8gMCA6IE5vIFRpbWVvdXQgZXJyb3IKKy8vIDEgOiBUaW1lb3V0IEVycm9yCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9USU1FT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX1RJTUVPVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfVElNRU9VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gRUZVU0VfQ1JDX0VSUk9SCisvLworLy8gRWZ1c2Ugc2Nhbm5pbmcgcmVzdWx0ZWQgaW4gc2NhbiBjaGFpbiBDUkMgZXJyb3IuCisvLyAwIDogTm8gQ1JDIGVycm9yCisvLyAxIDogQ1JDIEVycm9yCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9DUkNfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0NSQ19FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfQ1JDX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICBbMTI6OF0gRUZVU0VfRVJSQ09ERQorLy8KKy8vIFNhbWUgYXMgRUZVU0VFUlJPUi5DT0RFCisjZGVmaW5lIEZMQVNIX1NUQVRfRUZVU0VfRVJSQ09ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfU1RBVF9FRlVTRV9FUlJDT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBGTEFTSF9TVEFUX0VGVVNFX0VSUkNPREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzJdIFNBTUhPTERfRElTCisvLworLy8gU3RhdHVzIGluZGljYXRvciBvZiBmbGFzaCBzYW1wbGUgYW5kIGhvbGQgc2VxdWVuY2luZyBsb2dpYy4gVGhpcyBiaXQgd2lsbCBnbworLy8gdG8gMSBzb21lIGRlbGF5IGFmdGVyIENGRy5ESVNfSURMRSBpcyBzZXQgdG8gMS4KKy8vIDA6IE5vdCBkaXNhYmxlZAorLy8gMTogU2FtcGxlIGFuZCBob2xkIGRpc2FibGVkIGFuZCBzdGFibGUKKyNkZWZpbmUgRkxBU0hfU1RBVF9TQU1IT0xEX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9TVEFUX1NBTUhPTERfRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX1NUQVRfU0FNSE9MRF9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfU1RBVF9TQU1IT0xEX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBCVVNZCisvLworLy8gRmFzdCB2ZXJzaW9uIG9mIHRoZSBGTUMgRk1TVEFULkJVU1kgYml0LgorLy8gVGhpcyBmbGFnIGlzIHZhbGlkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBvcGVyYXRpb24gc2V0dGluZyBpdCAoRk1TVEFULkJVU1kKKy8vIGlzIGRlbGF5ZWQgc29tZSBjeWNsZXMpCisvLyAwIDogTm90IGJ1c3kKKy8vIDEgOiBCdXN5CisjZGVmaW5lIEZMQVNIX1NUQVRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfU1RBVF9CVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9TVEFUX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX1NUQVRfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUE9XRVJfTU9ERQorLy8KKy8vIFBvd2VyIHN0YXRlIG9mIHRoZSBmbGFzaCBzdWItc3lzdGVtLgorLy8gMCA6IEFjdGl2ZQorLy8gMSA6IExvdyBwb3dlcgorI2RlZmluZSBGTEFTSF9TVEFUX1BPV0VSX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX1NUQVRfUE9XRVJfTU9ERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfU1RBVF9QT1dFUl9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9TVEFUX1BPV0VSX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19DRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBTVEFOREJZX01PREVfU0VMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQ0ZHX1NUQU5EQllfTU9ERV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9DRkdfU1RBTkRCWV9NT0RFX1NFTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0NGR19TVEFOREJZX01PREVfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfQ0ZHX1NUQU5EQllfTU9ERV9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo2XSBTVEFOREJZX1BXX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0NGR19TVEFOREJZX1BXX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfQ0ZHX1NUQU5EQllfUFdfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBGTEFTSF9DRkdfU1RBTkRCWV9QV19TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIERJU19FRlVTRUNMSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfRUZVU0VDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19FRlVTRUNMS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9DRkdfRElTX0VGVVNFQ0xLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfRUZVU0VDTEtfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElTX1JFQURBQ0NFU1MKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9DRkdfRElTX1JFQURBQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfUkVBREFDQ0VTU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19SRUFEQUNDRVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9DRkdfRElTX1JFQURBQ0NFU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEVOQUJMRV9TV0lOVEYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9DRkdfRU5BQkxFX1NXSU5URiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZMQVNIX0NGR19FTkFCTEVfU1dJTlRGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfQ0ZHX0VOQUJMRV9TV0lOVEZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9DRkdfRU5BQkxFX1NXSU5URl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzFdIERJU19TVEFOREJZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19TVEFOREJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9DRkdfRElTX1NUQU5EQllfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfU1RBTkRCWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19TVEFOREJZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESVNfSURMRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfQ0ZHX0RJU19JRExFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9DRkdfRElTX0lETEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0NGR19ESVNfSURMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX1NZU0NPREVfU1RBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNDowXSBTWVNDT0RFX1NUQVJUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfU1lTQ09ERV9TVEFSVF9TWVNDT0RFX1NUQVJUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9TWVNDT0RFX1NUQVJUX1NZU0NPREVfU1RBUlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEZMQVNIX1NZU0NPREVfU1RBUlRfU1lTQ09ERV9TVEFSVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZMQVNIX1NJWkUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBTRUNUT1JTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkxBU0hfU0laRV9TRUNUT1JTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GTEFTSF9TSVpFX1NFQ1RPUlNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZMQVNIX0ZMQVNIX1NJWkVfU0VDVE9SU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXTE9DSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIEZXTE9DSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXTE9DS19GV0xPQ0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRldMT0NLX0ZXTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBGTEFTSF9GV0xPQ0tfRldMT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV0ZMQUcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBGV0ZMQUcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV0ZMQUdfRldGTEFHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZXRkxBR19GV0ZMQUdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkxBU0hfRldGTEFHX0ZXRkxBR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI4OjI0XSBJTlNUUlVDVElPTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFX0lOU1RSVUNUSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRUZVU0VfSU5TVFJVQ1RJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAwMDAwMAorI2RlZmluZSBGTEFTSF9FRlVTRV9JTlNUUlVDVElPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgWzE1OjBdIERVTVBXT1JECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VfRFVNUFdPUkRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9FRlVTRV9EVU1QV09SRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZMQVNIX0VGVVNFX0RVTVBXT1JEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFQUREUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTU6MTFdIEJMT0NLCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VBRERSX0JMT0NLX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9FRlVTRUFERFJfQkxPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGODAwCisjZGVmaW5lIEZMQVNIX0VGVVNFQUREUl9CTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICBbMTA6MF0gUk9XCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VBRERSX1JPV19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBGTEFTSF9FRlVTRUFERFJfUk9XX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwN0ZGCisjZGVmaW5lIEZMQVNIX0VGVVNFQUREUl9ST1dfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0RBVEFVUFBFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjNdIFNQQVJFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX1NQQVJFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfU1BBUkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEY4CisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9TUEFSRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX1BfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRUVOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX0VFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9EQVRBVVBQRVJfRUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0RBVEFVUFBFUl9FRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfREFUQVVQUEVSX0VFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fREFUQUxPV0VSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gREFUQQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0RBVEFMT1dFUl9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfREFUQUxPV0VSX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9EQVRBTE9XRVJfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRUNGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzhdIElETEVHQVRJTkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19JRExFR0FUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0VGVVNFQ0ZHX0lETEVHQVRJTkdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfSURMRUdBVElOR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19JRExFR0FUSU5HX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs0OjNdIFNMQVZFUE9XRVIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19TTEFWRVBPV0VSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0VGVVNFQ0ZHX1NMQVZFUE9XRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfU0xBVkVQT1dFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFswXSBHQVRJTkcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19HQVRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0VGVVNFQ0ZHX0dBVElOR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VDRkdfR0FUSU5HX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9FRlVTRUNGR19HQVRJTkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRVNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSRVNFVERPTkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVNUQVRfUkVTRVRET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0VGVVNFU1RBVF9SRVNFVERPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VTVEFUX1JFU0VURE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9FRlVTRVNUQVRfUkVTRVRET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19BQ0MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsyMzowXSBBQ0NVTVVMQVRPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0FDQ19BQ0NVTVVMQVRPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfQUNDX0FDQ1VNVUxBVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9BQ0NfQUNDVU1VTEFUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19CT1VOREFSWQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjNdIERJU1JPVzAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9ESVNST1cwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0RJU1JPVzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRElTUk9XMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9ESVNST1cwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIFNQQVJFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TUEFSRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NQQVJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1BBUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBFRkNfU0VMRl9URVNUX0VSUk9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX1NFTEZfVEVTVF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfU0VMRl9URVNUX0VSUk9SX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19TRUxGX1RFU1RfRVJST1JfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX1NFTEZfVEVTVF9FUlJPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBFRkNfSU5TVFJVQ1RJT05fSU5GTworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19JTlNUUlVDVElPTl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0lOU1RSVUNUSU9OX0lORk9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfSU5TVFJVQ1RJT05fSU5GT19NICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19JTlNUUlVDVElPTl9JTkZPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gRUZDX0lOU1RSVUNUSU9OX0VSUk9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0lOU1RSVUNUSU9OX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfSU5TVFJVQ1RJT05fRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19JTlNUUlVDVElPTl9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0lOU1RSVUNUSU9OX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBFRkNfQVVUT0xPQURfRVJST1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfQVVUT0xPQURfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19BVVRPTE9BRF9FUlJPUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0FVVE9MT0FEX0VSUk9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfQVVUT0xPQURfRVJST1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTRdIE9VVFBVVEVOQUJMRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX09VVFBVVEVOQUJMRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfT1VUUFVURU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzQzAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9PVVRQVVRFTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIFNZU19FQ0NfU0VMRl9URVNUX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0VDQ19TRUxGX1RFU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRUNDX1NFTEZfVEVTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19FQ0NfU0VMRl9URVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0VDQ19TRUxGX1RFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBTWVNfRUNDX09WRVJSSURFX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0VDQ19PVkVSUklERV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRUNDX09WRVJSSURFX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19FQ0NfT1ZFUlJJREVfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0VDQ19PVkVSUklERV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBFRkNfRkRJCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0ZESSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9FRkNfRkRJX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0VGQ19GRElfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfRUZDX0ZESV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBTWVNfRElFSURfQVVUT0xPQURfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRElFSURfQVVUT0xPQURfRU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19ESUVJRF9BVVRPTE9BRF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX0RJRUlEX0FVVE9MT0FEX0VOX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfRElFSURfQVVUT0xPQURfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgIFs5OjhdIFNZU19SRVBBSVJfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfUkVQQUlSX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19SRVBBSVJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX1JFUEFJUl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzo0XSBTWVNfV1NfUkVBRF9TVEFURVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9TWVNfV1NfUkVBRF9TVEFURVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX1NZU19XU19SRUFEX1NUQVRFU19NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfU1lTX1dTX1JFQURfU1RBVEVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBJTlBVVEVOQUJMRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0JPVU5EQVJZX0lOUFVURU5BQkxFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfQk9VTkRBUllfSU5QVVRFTkFCTEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGTEFTSF9CT1VOREFSWV9JTlBVVEVOQUJMRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRUZMQUcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBLRVkKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRUZMQUdfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0VGVVNFRkxBR19LRVlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VGTEFHX0tFWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9FRlVTRUZMQUdfS0VZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRUtFWQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENPREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRUtFWV9DT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0VGVVNFS0VZX0NPREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRUZVU0VLRVlfQ09ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VSRUxFQVNFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNV0gT0RQWUVBUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9PRFBZRUFSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX09EUFlFQVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRTAwMDAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfT0RQWUVBUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiBbMjQ6MjFdIE9EUE1PTlRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX09EUE1PTlRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfT0RQTU9OVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRTAwMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9PRFBNT05USF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6IFsyMDoxNl0gT0RQREFZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX09EUERBWV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfT0RQREFZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUYwMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9PRFBEQVlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OV0gRUZVU0VZRUFSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX0VGVVNFWUVBUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfRUZVU0VZRUFSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRTAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9FRlVTRVlFQVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgWzg6NV0gRUZVU0VNT05USAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9FRlVTRU1PTlRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX0VGVVNFTU9OVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFFMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfRUZVU0VNT05USF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIEVGVVNFREFZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUxFQVNFX0VGVVNFREFZX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9FRlVTRVJFTEVBU0VfRUZVU0VEQVlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVMRUFTRV9FRlVTRURBWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFUElOUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTVdIEVGQ19TRUxGX1RFU1RfRE9ORQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfU0VMRl9URVNUX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19TRUxGX1RFU1RfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1NFTEZfVEVTVF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfU0VMRl9URVNUX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gRUZDX1NFTEZfVEVTVF9FUlJPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfU0VMRl9URVNUX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19TRUxGX1RFU1RfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1NFTEZfVEVTVF9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfU0VMRl9URVNUX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gU1lTX0VDQ19TRUxGX1RFU1RfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0VDQ19TRUxGX1RFU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRUNDX1NFTEZfVEVTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19FQ0NfU0VMRl9URVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0VDQ19TRUxGX1RFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIEVGQ19JTlNUUlVDVElPTl9JTkZPCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19JTlNUUlVDVElPTl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0lOU1RSVUNUSU9OX0lORk9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfSU5TVFJVQ1RJT05fSU5GT19NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19JTlNUUlVDVElPTl9JTkZPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBFRkNfSU5TVFJVQ1RJT05fRVJST1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0lOU1RSVUNUSU9OX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfSU5TVFJVQ1RJT05fRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19JTlNUUlVDVElPTl9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0lOU1RSVUNUSU9OX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIEVGQ19BVVRPTE9BRF9FUlJPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfQVVUT0xPQURfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19BVVRPTE9BRF9FUlJPUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0FVVE9MT0FEX0VSUk9SX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfQVVUT0xPQURfRVJST1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gU1lTX0VDQ19PVkVSUklERV9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRUNDX09WRVJSSURFX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19FQ0NfT1ZFUlJJREVfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0VDQ19PVkVSUklERV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRUNDX09WRVJSSURFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRUZDX1JFQURZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19SRUFEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX1JFQURZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfUkVBRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19SRUFEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBFRkNfRkNMUloKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0ZDTFJaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19FRkNfRkNMUlpfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX0VGQ19GQ0xSWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfRUZDX0ZDTFJaX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFNZU19ESUVJRF9BVVRPTE9BRF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRElFSURfQVVUT0xPQURfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19ESUVJRF9BVVRPTE9BRF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX0RJRUlEX0FVVE9MT0FEX0VOX00gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfRElFSURfQVVUT0xPQURfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6NF0gU1lTX1JFUEFJUl9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfUkVQQUlSX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19SRVBBSVJfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX1JFUEFJUl9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIFNZU19XU19SRUFEX1NUQVRFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUElOU19TWVNfV1NfUkVBRF9TVEFURVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRUZVU0VQSU5TX1NZU19XU19SRUFEX1NUQVRFU19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGTEFTSF9FRlVTRVBJTlNfU1lTX1dTX1JFQURfU1RBVEVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19FRlVTRUNSQQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIERBVEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRUNSQV9EQVRBX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEZMQVNIX0VGVVNFQ1JBX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgRkxBU0hfRUZVU0VDUkFfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRUZVU0VSRUFECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzk6OF0gREFUQUJJVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9EQVRBQklUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX0RBVEFCSVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfREFUQUJJVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjRdIFJFQURDTE9DSworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9SRUFEQ0xPQ0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX1JFQURDTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfUkVBRENMT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERFQlVHCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfREVCVUdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9ERUJVR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX0RFQlVHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBTUEFSRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9TUEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX1NQQVJFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfU1BBUkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9TUEFSRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgWzE6MF0gTUFSR0lOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VSRUFEX01BUkdJTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9FRlVTRVJFQURfTUFSR0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEZMQVNIX0VGVVNFUkVBRF9NQVJHSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFUFJPR1JBTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIENPTVBBUkVESVNBQkxFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0NPTVBBUkVESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fQ09NUEFSRURJU0FCTEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9DT01QQVJFRElTQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0NPTVBBUkVESVNBQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogWzI5OjE0XSBDTE9DS1NUQUxMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0NMT0NLU1RBTExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fQ0xPQ0tTVEFMTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGRkZDMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9DTE9DS1NUQUxMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gVlBQVE9WREQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fVlBQVE9WREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9WUFBUT1ZERF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX1ZQUFRPVkREX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fVlBQVE9WRERfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgWzEyOjldIElURVJBVElPTlMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fSVRFUkFUSU9OU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9JVEVSQVRJT05TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFFMDAKKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX0lURVJBVElPTlNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICBbODowXSBXUklURUNMT0NLCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VQUk9HUkFNX1dSSVRFQ0xPQ0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGTEFTSF9FRlVTRVBST0dSQU1fV1JJVEVDTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUZGCisjZGVmaW5lIEZMQVNIX0VGVVNFUFJPR1JBTV9XUklURUNMT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0VGVVNFRVJST1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBET05FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VFUlJPUl9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGTEFTSF9FRlVTRUVSUk9SX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0VGVVNFRVJST1JfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRUZVU0VFUlJPUl9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICBbNDowXSBDT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRUZVU0VFUlJPUl9DT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9FRlVTRUVSUk9SX0NPREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEZMQVNIX0VGVVNFRVJST1JfQ09ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX1NJTkdMRUJJVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjFdIEZST01OCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfU0lOR0xFQklUX0ZST01OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBGTEFTSF9TSU5HTEVCSVRfRlJPTU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIEZMQVNIX1NJTkdMRUJJVF9GUk9NTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRlJPTTAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9TSU5HTEVCSVRfRlJPTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX1NJTkdMRUJJVF9GUk9NMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfU0lOR0xFQklUX0ZST00wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9TSU5HTEVCSVRfRlJPTTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19UV09CSVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMToxXSBGUk9NTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX1RXT0JJVF9GUk9NTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgRkxBU0hfVFdPQklUX0ZST01OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSBGTEFTSF9UV09CSVRfRlJPTU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEZST00wCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfVFdPQklUX0ZST00wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9UV09CSVRfRlJPTTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX1RXT0JJVF9GUk9NMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfVFdPQklUX0ZST00wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fU0VMRlRFU1RDWUMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDWUNMRVMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9TRUxGVEVTVENZQ19DWUNMRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX1NFTEZURVNUQ1lDX0NZQ0xFU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfU0VMRlRFU1RDWUNfQ1lDTEVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fU0VMRlRFU1RTSUdOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gU0lHTkFUVVJFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfU0VMRlRFU1RTSUdOX1NJR05BVFVSRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9TRUxGVEVTVFNJR05fU0lHTkFUVVJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX1NFTEZURVNUU0lHTl9TSUdOQVRVUkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZSRENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzExOjhdIFJXQUlUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlJEQ1RMX1JXQUlUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GUkRDVExfUldBSVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEZMQVNIX0ZSRENUTF9SV0FJVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTUFJECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gUk1CU0VNCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk1CU0VNX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU1BSRF9STUJTRU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNQlNFTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMV0gUk0xCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GU1BSRF9STTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk0xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSTTAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU1BSRF9STTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZTUFJEX1JNMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRlNQUkRfUk0wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU1BSRF9STTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GRURBQ0NUTDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBTVVNQX0lHTlIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRURBQ0NUTDFfU1VTUF9JR05SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZFREFDQ1RMMV9TVVNQX0lHTlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkVEQUNDVEwxX1NVU1BfSUdOUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBGTEFTSF9GRURBQ0NUTDFfU1VTUF9JR05SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GRURBQ1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI1XSBSVkZfSU5UCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkVEQUNTVEFUX1JWRl9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBGTEFTSF9GRURBQ1NUQVRfUlZGX0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEZMQVNIX0ZFREFDU1RBVF9SVkZfSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkVEQUNTVEFUX1JWRl9JTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBGU01fRE9ORQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFREFDU1RBVF9GU01fRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkVEQUNTVEFUX0ZTTV9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GRURBQ1NUQVRfRlNNX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZFREFDU1RBVF9GU01fRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZCUFJPVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFBST1RMMURJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCUFJPVF9QUk9UTDFESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRkJQUk9UX1BST1RMMURJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9GQlBST1RfUFJPVEwxRElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZCUFJPVF9QUk9UTDFESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZCU0UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBCU0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQlNFX0JTRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZCU0VfQlNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkxBU0hfRkJTRV9CU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkJCVVNZCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gQlVTWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCQlVTWV9CVVNZX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkJCVVNZX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GQkJVU1lfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQkFDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNl0gT1RQUFJPVERJUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCQUNfT1RQUFJPVERJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRkJBQ19PVFBQUk9URElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GQkFDX09UUFBST1RESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZCQUNfT1RQUFJPVERJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6OF0gQkFHUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCQUNfQkFHUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkJBQ19CQUdQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GQkFDX0JBR1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIFZSRUFEUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCQUNfVlJFQURTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRkJBQ19WUkVBRFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GQkFDX1ZSRUFEU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQkZBTExCQUNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoyNF0gRlNNX1BXUlNBVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfRlNNX1BXUlNBVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19GU01fUFdSU0FWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0ZTTV9QV1JTQVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMTk6MTZdIFJFR19QV1JTQVYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX1JFR19QV1JTQVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfUkVHX1BXUlNBVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19SRUdfUFdSU0FWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjE0XSBCQU5LUFdSNworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiBbMTM6MTJdIEJBTktQV1I2CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSNl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gQkFOS1BXUjUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I1X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICBbOTo4XSBCQU5LUFdSNAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1I0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjZdIEJBTktQV1IzCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSM19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6NF0gQkFOS1BXUjIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzoyXSBCQU5LUFdSMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIEJBTktQV1IwCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJGQUxMQkFDS19CQU5LUFdSMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQkZBTExCQUNLX0JBTktQV1IwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEZMQVNIX0ZCRkFMTEJBQ0tfQkFOS1BXUjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZCUFJEWQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTZdIEJBTktCVVNZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJQUkRZX0JBTktCVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GQlBSRFlfQkFOS0JVU1lfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9CQU5LQlVTWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRkJQUkRZX0JBTktCVVNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBQVU1QUkRZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJQUkRZX1BVTVBSRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGTEFTSF9GQlBSRFlfUFVNUFJEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9QVU1QUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkxBU0hfRkJQUkRZX1BVTVBSRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgIFswXSBCQU5LUkRZCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJQUkRZX0JBTktSRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GQlBSRFlfQkFOS1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZCUFJEWV9CQU5LUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRkJQUkRZX0JBTktSRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlBBQzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjE2XSBQU0xFRVBURElTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlBBQzFfUFNMRUVQVERJU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GUEFDMV9QU0xFRVBURElTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGRkYwMDAwCisjZGVmaW5lIEZMQVNIX0ZQQUMxX1BTTEVFUFRESVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTU6NF0gUFVNUFJFU0VUX1BXCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlBBQzFfUFVNUFJFU0VUX1BXX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GUEFDMV9QVU1QUkVTRVRfUFdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkYwCisjZGVmaW5lIEZMQVNIX0ZQQUMxX1BVTVBSRVNFVF9QV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzE6MF0gUFVNUFBXUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZQQUMxX1BVTVBQV1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRlBBQzFfUFVNUFBXUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBGTEFTSF9GUEFDMV9QVU1QUFdSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GUEFDMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFBBR1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GUEFDMl9QQUdQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZQQUMyX1BBR1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgRkxBU0hfRlBBQzJfUEFHUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRk1BQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIEJBTksKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTUFDX0JBTktfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZNQUNfQkFOS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkxBU0hfRk1BQ19CQU5LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRk1TVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxN10gUlZTVVNQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JWU1VTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUlZTVVNQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SVlNVU1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JWU1VTUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBSRFZFUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SRFZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JEVkVSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUkRWRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SRFZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gUlZGCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JWRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUlZGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9SVkZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1JWRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBJTEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfSUxBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9JTEFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0lMQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfSUxBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERCRgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9EQkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0RCRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBGTEFTSF9GTVNUQVRfREJGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9EQkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gUEdWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BHViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUEdWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QR1ZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BHVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBQQ1YKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUENWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QQ1ZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BDVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUENWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIEVWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfRVZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBDVgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9DViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0NWX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGTEFTSF9GTVNUQVRfQ1ZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9DVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gQlVTWQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0JVU1lfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GTVNUQVRfQlVTWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9CVVNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRVJTCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGTEFTSF9GTVNUQVRfRVJTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FUlNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VSU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBQR00KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfUEdNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QR01fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BHTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGTEFTSF9GTVNUQVRfUEdNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIElOVkRBVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9JTlZEQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0lOVkRBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBGTEFTSF9GTVNUQVRfSU5WREFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9JTlZEQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQ1NUQVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfQ1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9DU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0NTVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GTVNUQVRfQ1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFZPTFNUQVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfVk9MU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9WT0xTVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1ZPTFNUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9GTVNUQVRfVk9MU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEVTVVNQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VTVVNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9GTVNUQVRfRVNVU1BfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9FU1VTUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX0VTVVNQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBQU1VTUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QU1VTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1BTVVNQX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9GTVNUQVRfUFNVU1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9QU1VTUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU0xPQ0sKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GTVNUQVRfU0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZNU1RBVF9TTE9DS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRk1TVEFUX1NMT0NLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GTVNUQVRfU0xPQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GTE9DSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIEVOQ09NCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkxPQ0tfRU5DT01fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GTE9DS19FTkNPTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZMQVNIX0ZMT0NLX0VOQ09NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZWUkVBRENUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gVlJFQURDVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWUkVBRENUX1ZSRUFEQ1RfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZSRUFEQ1RfVlJFQURDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGTEFTSF9GVlJFQURDVF9WUkVBRENUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVkhWQ1QxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyMzoyMF0gVFJJTTEzX0UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1RSSU0xM19FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVFJJTTEzX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9UUklNMTNfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogWzE5OjE2XSBWSFZDVF9FCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9WSFZDVF9FX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1ZIVkNUX0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVkhWQ1RfRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzc6NF0gVFJJTTEzX1BWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9UUklNMTNfUFZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1RSSU0xM19QVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVFJJTTEzX1BWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gVkhWQ1RfUFYKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVkhWQ1QxX1ZIVkNUX1BWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZWSFZDVDFfVkhWQ1RfUFZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMV9WSFZDVF9QVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlZIVkNUMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjM6MjBdIFRSSU0xM19QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZIVkNUMl9UUklNMTNfUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVkhWQ1QyX1RSSU0xM19QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDJfVFJJTTEzX1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gVkhWQ1RfUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDJfVkhWQ1RfUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZIVkNUMl9WSFZDVF9QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GVkhWQ1QyX1ZIVkNUX1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVkhWQ1QzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxOToxNl0gV0NUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZIVkNUM19XQ1RfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVkhWQ1QzX1dDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDNfV0NUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzM6MF0gVkhWQ1RfUkVBRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWSFZDVDNfVkhWQ1RfUkVBRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlZIVkNUM19WSFZDVF9SRUFEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGTEFTSF9GVkhWQ1QzX1ZIVkNUX1JFQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVk5WQ1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMjo4XSBWQ0cyUDVDVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWTlZDVF9WQ0cyUDVDVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRlZOVkNUX1ZDRzJQNUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUYwMAorI2RlZmluZSBGTEFTSF9GVk5WQ1RfVkNHMlA1Q1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs0OjBdIFZJTl9DVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZWTlZDVF9WSU5fQ1RfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRlZOVkNUX1ZJTl9DVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBGTEFTSF9GVk5WQ1RfVklOX0NUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GVlNMUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTU6MTJdIFZTTF9QCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlZTTFBfVlNMX1BfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GVlNMUF9WU0xfUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEZMQVNIX0ZWU0xQX1ZTTF9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZWV0xDVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs0OjBdIFZXTENUX1AKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GVldMQ1RfVldMQ1RfUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0ZWV0xDVF9WV0xDVF9QX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgRkxBU0hfRlZXTENUX1ZXTENUX1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkVGVVNFQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNjoyNF0gQ0hBSU5fU0VMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0NIQUlOX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfQ0hBSU5fU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9DSEFJTl9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxN10gV1JJVEVfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfV1JJVEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9XUklURV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX1dSSVRFX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfV1JJVEVfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIEJQX1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9CUF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0JQX1NFTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfQlBfU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9CUF9TRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOF0gRUZfQ0xSWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRl9DTFJaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0VGX0NMUlpfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZfQ0xSWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRl9DTFJaX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNF0gRUZfVEVTVAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRl9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0VGX1RFU1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZfVEVTVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRl9URVNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgWzM6MF0gRUZVU0VfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VDVExfRUZVU0VfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZFRlVTRUNUTF9FRlVTRV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRkVGVVNFQ1RMX0VGVVNFX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkVGVVNFU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNISUZUX0RPTkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GRUZVU0VTVEFUX1NISUZUX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZFRlVTRVNUQVRfU0hJRlRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRkVGVVNFU1RBVF9TSElGVF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GRUZVU0VTVEFUX1NISUZUX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GRUZVU0VEQVRBCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRkVGVVNFREFUQQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZFRlVTRURBVEFfRkVGVVNFREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRkVGVVNFREFUQV9GRUZVU0VEQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GRUZVU0VEQVRBX0ZFRlVTRURBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU0VRUE1QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoyNF0gVFJJTV8zUDQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1RSSU1fM1A0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVFJJTV8zUDRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9UUklNXzNQNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIxOjIwXSBUUklNXzFQNworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVFJJTV8xUDdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9UUklNXzFQN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMAorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1RSSU1fMVA3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiBbMTk6MTZdIFRSSU1fMFA4CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9UUklNXzBQOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1RSSU1fMFA4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVFJJTV8wUDhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6IFsxNDoxMl0gVklOX0FUX1gKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1ZJTl9BVF9YX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVklOX0FUX1hfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9WSU5fQVRfWF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgIFs4XSBWSU5fQllfUEFTUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVklOX0JZX1BBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRlNFUVBNUF9WSU5fQllfUEFTU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU0VRUE1QX1ZJTl9CWV9QQVNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZTRVFQTVBfVklOX0JZX1BBU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZCU1RST0JFUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIEVDQklUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0VDQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfRUNCSVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19FQ0JJVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0VDQklUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE4XSBSV0FJVDJfRkxDTEsKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUldBSVQyX0ZMQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19SV0FJVDJfRkxDTEtfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1JXQUlUMl9GTENMS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUldBSVQyX0ZMQ0xLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFJXQUlUX0ZMQ0xLCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1JXQUlUX0ZMQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUldBSVRfRkxDTEtfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19SV0FJVF9GTENMS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1JXQUlUX0ZMQ0xLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBGTENMS0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0ZMQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfRkxDTEtFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19GTENMS0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0ZMQ0xLRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBDVFJMRU5aCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0NUUkxFTlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfQ1RSTEVOWl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19DVFJMRU5aX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX0NUUkxFTlpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs2XSBOT0NPTFJFRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19OT0NPTFJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX05PQ09MUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfTk9DT0xSRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19OT0NPTFJFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gUFJFQ09MCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1BSRUNPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfUFJFQ09MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19QUkVDT0xfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1BSRUNPTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUSV9PVFAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfVElfT1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19USV9PVFBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1RJX09UUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfVElfT1RQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIE9UUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19PVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX09UUF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfT1RQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19PVFBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gVEVaCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1RFWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGTEFTSF9GQlNUUk9CRVNfVEVaX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZCU1RST0JFU19URVpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRkJTVFJPQkVTX1RFWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlBTVFJPQkVTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gRVhFQ1VURVoKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfRVhFQ1VURVogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19FWEVDVVRFWl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX0VYRUNVVEVaX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfRVhFQ1VURVpfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzFdIFYzUFdSRE5aCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX1YzUFdSRE5aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfVjNQV1JETlpfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19WM1BXUkROWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX1YzUFdSRE5aX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBWNVBXUkROWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19WNVBXUkROWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlBTVFJPQkVTX1Y1UFdSRE5aX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9GUFNUUk9CRVNfVjVQV1JETlpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZQU1RST0JFU19WNVBXUkROWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZCTU9ERQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsyOjBdIE1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQk1PREVfTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZCTU9ERV9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkxBU0hfRkJNT0RFX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlRDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs2OjBdIFRDUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZUQ1JfVENSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkxBU0hfRlRDUl9UQ1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBGTEFTSF9GVENSX1RDUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQUREUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZBRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkFERFJfRkFERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GQUREUl9GQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZBRERSX0ZBRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZUQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNl0gV0RBVEFfQkxLX0NMUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZUQ1RMX1dEQVRBX0JMS19DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRlRDVExfV0RBVEFfQkxLX0NMUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GVENUTF9XREFUQV9CTEtfQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEZMQVNIX0ZUQ1RMX1dEQVRBX0JMS19DTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbMV0gVEVTVF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZUQ1RMX1RFU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRkxBU0hfRlRDVExfVEVTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBGTEFTSF9GVENUTF9URVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZUQ1RMX1RFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXUFdSSVRFMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZXUFdSSVRFMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFMF9GV1BXUklURTBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUwX0ZXUFdSSVRFMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GV1BXUklURTBfRldQV1JJVEUwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV1BXUklURTEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGV1BXUklURTEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURTFfRldQV1JJVEUxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFMV9GV1BXUklURTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUxX0ZXUFdSSVRFMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldQV1JJVEUyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRldQV1JJVEUyCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUyX0ZXUFdSSVRFMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GV1BXUklURTJfRldQV1JJVEUyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFMl9GV1BXUklURTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXUFdSSVRFMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZXUFdSSVRFMworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFM19GV1BXUklURTNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEUzX0ZXUFdSSVRFM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GV1BXUklURTNfRldQV1JJVEUzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV1BXUklURTQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGV1BXUklURTQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURTRfRldQV1JJVEU0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFNF9GV1BXUklURTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU0X0ZXUFdSSVRFNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldQV1JJVEU1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRldQV1JJVEU1CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU1X0ZXUFdSSVRFNV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GV1BXUklURTVfRldQV1JJVEU1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFNV9GV1BXUklURTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZXUFdSSVRFNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZXUFdSSVRFNgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFNl9GV1BXUklURTZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU2X0ZXUFdSSVRFNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GV1BXUklURTZfRldQV1JJVEU2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GV1BXUklURTcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGV1BXUklURTcKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURTdfRldQV1JJVEU3X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFN19GV1BXUklURTdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEU3X0ZXUFdSSVRFN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRldQV1JJVEVfRUNDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyNF0gRUNDQllURVMwN18wMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzA3XzAwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMDdfMDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMwN18wMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MTZdIEVDQ0JZVEVTMTVfMDgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMxNV8wOF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzE1XzA4X00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMTVfMDhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBFQ0NCWVRFUzIzXzE2CisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMjNfMTZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMyM18xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzIzXzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gRUNDQllURVMzMV8yNAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZXUFdSSVRFX0VDQ19FQ0NCWVRFUzMxXzI0X1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRldQV1JJVEVfRUNDX0VDQ0JZVEVTMzFfMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GV1BXUklURV9FQ0NfRUNDQllURVMzMV8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU1dTVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU0FGRUxWCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNXU1RBVF9TQUZFTFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU1dTVEFUX1NBRkVMVl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZTV1NUQVRfU0FGRUxWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNXU1RBVF9TQUZFTFZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0dMQkNUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS1NFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9HTEJDVExfQ0xLU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNNX0dMQkNUTF9DTEtTRUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGTEFTSF9GU01fR0xCQ1RMX0NMS1NFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZTTV9HTEJDVExfQ0xLU0VMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9TVEFURQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTFdIENUUkxFTloKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfQ1RSTEVOWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9DVFJMRU5aX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0NUUkxFTlpfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfQ1RSTEVOWl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIEVYRUNVVEVaCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0VYRUNVVEVaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfRVhFQ1VURVpfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9FWEVDVVRFWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0VYRUNVVEVaX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs4XSBGU01fQUNUCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0ZTTV9BQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfRlNNX0FDVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9GU01fQUNUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX0ZTTV9BQ1RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBUSU9UUF9BQ1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfVElPVFBfQUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9USU9UUF9BQ1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX1RJT1RQX0FDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfVElPVFBfQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIE9UUF9BQ1QKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfT1RQX0FDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFURV9PVFBfQUNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRFX09UUF9BQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBGTEFTSF9GU01fU1RBVEVfT1RQX0FDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIE5PTl9PUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX05PTl9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfTk9OX09QX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9OT05fT1BfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX05PTl9PUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gT1ZSX1BVTF9DTlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9PVlJfUFVMX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX09WUl9QVUxfQ05UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfT1ZSX1BVTF9DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9PVlJfUFVMX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIElOVl9EQVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9JTlZfREFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZMQVNIX0ZTTV9TVEFUX0lOVl9EQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUQVRfSU5WX0RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU01fU1RBVF9JTlZfREFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fQ01ECisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6MF0gRlNNQ01ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0NNRF9GU01DTURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBGTEFTSF9GU01fQ01EX0ZTTUNNRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEZMQVNIX0ZTTV9DTURfRlNNQ01EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9QRV9PU1UKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBQR01fT1NVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BFX09TVV9QR01fT1NVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fUEVfT1NVX1BHTV9PU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9PU1VfUEdNX09TVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gRVJBX09TVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9PU1VfRVJBX09TVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX1BFX09TVV9FUkFfT1NVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GU01fUEVfT1NVX0VSQV9PU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fVlNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjEyXSBWU1RBVF9DTlQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fVlNUQVRfVlNUQVRfQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9WU1RBVF9WU1RBVF9DTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1ZTVEFUX1ZTVEFUX0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BFX1ZTVQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjhdIFBHTV9WU1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUEVfVlNVX1BHTV9WU1VfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9WU1VfUEdNX1ZTVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1BFX1ZTVV9QR01fVlNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBFUkFfVlNVCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BFX1ZTVV9FUkFfVlNVX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fUEVfVlNVX0VSQV9WU1VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9WU1VfRVJBX1ZTVV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9DTVBfVlNVCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxNToxMl0gQUREX0VYWgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9DTVBfVlNVX0FERF9FWFpfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNNX0NNUF9WU1VfQUREX0VYWl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBGTEFTSF9GU01fQ01QX1ZTVV9BRERfRVhaX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fRVhfVkFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gUkVQX1ZTVQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FWF9WQUxfUkVQX1ZTVV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX0VYX1ZBTF9SRVBfVlNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GU01fRVhfVkFMX1JFUF9WU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjBdIEVYRV9WQUxECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VYX1ZBTF9FWEVfVkFMRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fRVhfVkFMX0VYRV9WQUxEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZMQVNIX0ZTTV9FWF9WQUxfRVhFX1ZBTERfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9SRF9ICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gUkRfSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9SRF9IX1JEX0hfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX1JEX0hfUkRfSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBGTEFTSF9GU01fUkRfSF9SRF9IX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fUF9PSAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjhdIFBHTV9PSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QX09IX1BHTV9PSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX1BfT0hfUEdNX09IX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GU01fUF9PSF9QR01fT0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fRVJBX09ICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gRVJBX09ICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9PSF9FUkFfT0hfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GU01fRVJBX09IX0VSQV9PSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfT0hfRVJBX09IX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9TQVZfUFBVTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzExOjBdIFNBVl9QX1BVTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TQVZfUFBVTF9TQVZfUF9QVUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlNNX1NBVl9QUFVMX1NBVl9QX1BVTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGTEFTSF9GU01fU0FWX1BQVUxfU0FWX1BfUFVMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fUEVfVkgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBQR01fVkgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUEVfVkhfUEdNX1ZIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZMQVNIX0ZTTV9QRV9WSF9QR01fVkhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1BFX1ZIX1BHTV9WSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BSR19QVworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFBST0dfUFVMX1dJRFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BSR19QV19QUk9HX1BVTF9XSURUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGTEFTSF9GU01fUFJHX1BXX1BST0dfUFVMX1dJRFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9QUkdfUFdfUFJPR19QVUxfV0lEVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9FUkFfUFcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fRVJBX1BXCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9QV19GU01fRVJBX1BXX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GU01fRVJBX1BXX0ZTTV9FUkFfUFdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfUFdfRlNNX0VSQV9QV19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9TQVZfRVJBX1BVTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzExOjBdIFNBVl9FUkFfUFVMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NBVl9FUkFfUFVMX1NBVl9FUkFfUFVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GU01fU0FWX0VSQV9QVUxfU0FWX0VSQV9QVUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9TQVZfRVJBX1BVTF9TQVZfRVJBX1BVTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9USU1FUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9USU1FUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9USU1FUl9GU01fVElNRVJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX1RJTUVSX0ZTTV9USU1FUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fVElNRVJfRlNNX1RJTUVSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fTU9ERQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTk6MThdIFJEVl9TVUJNT0RFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfUkRWX1NVQk1PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9SRFZfU1VCTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1JEVl9TVUJNT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gUEdNX1NVQk1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9QR01fU1VCTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1BHTV9TVUJNT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfUEdNX1NVQk1PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogWzE1OjE0XSBFUkFfU1VCTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX0VSQV9TVUJNT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfRVJBX1NVQk1PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9FUkFfU1VCTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiBbMTM6MTJdIFNVQk1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9TVUJNT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1NVQk1PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfU1VCTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo5XSBTQVZfUEdNX0NNRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1NBVl9QR01fQ01EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfU0FWX1BHTV9DTURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEUwMAorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9TQVZfUEdNX0NNRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgIFs4OjZdIFNBVl9FUkFfTU9ERQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX1NBVl9FUkFfTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfU0FWX0VSQV9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFDMAorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9TQVZfRVJBX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgIFs1OjNdIE1PREUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICBbMjowXSBDTUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fTU9ERV9DTURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9NT0RFX0NNRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkxBU0hfRlNNX01PREVfQ01EX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BHTQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjU6MjNdIFBHTV9CQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BHTV9QR01fQkFOS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU01fUEdNX1BHTV9CQU5LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9QR01fUEdNX0JBTktfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICBbMjI6MF0gUEdNX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUEdNX1BHTV9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZMQVNIX0ZTTV9QR01fUEdNX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3RkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1BHTV9QR01fQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VSQQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjU6MjNdIEVSQV9CQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9FUkFfQkFOS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGTEFTSF9GU01fRVJBX0VSQV9CQU5LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfRVJBX0JBTktfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICBbMjI6MF0gRVJBX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRVJBX0VSQV9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfRVJBX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3RkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9FUkFfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BSR19QVUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE5OjE2XSBCRUdfRUNfTEVWRUwKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUFJHX1BVTF9CRUdfRUNfTEVWRUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9QUkdfUFVMX0JFR19FQ19MRVZFTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1BSR19QVUxfQkVHX0VDX0xFVkVMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxMTowXSBNQVhfUFJHX1BVTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QUkdfUFVMX01BWF9QUkdfUFVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlNNX1BSR19QVUxfTUFYX1BSR19QVUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGTEFTSF9GU01fUFJHX1BVTF9NQVhfUFJHX1BVTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fRVJBX1BVTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTk6MTZdIE1BWF9FQ19MRVZFTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfUFVMX01BWF9FQ19MRVZFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9QVUxfTUFYX0VDX0xFVkVMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GU01fRVJBX1BVTF9NQVhfRUNfTEVWRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgWzExOjBdIE1BWF9FUkFfUFVMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VSQV9QVUxfTUFYX0VSQV9QVUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GU01fRVJBX1BVTF9NQVhfRVJBX1BVTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9FUkFfUFVMX01BWF9FUkFfUFVMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9TVEVQX1NJWkUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI0OjE2XSBFQ19TVEVQX1NJWkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RFUF9TSVpFX0VDX1NURVBfU0laRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEZMQVNIX0ZTTV9TVEVQX1NJWkVfRUNfU1RFUF9TSVpFX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFGRjAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NURVBfU0laRV9FQ19TVEVQX1NJWkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BVTF9DTlRSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNDoxNl0gQ1VSX0VDX0xFVkVMCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1BVTF9DTlRSX0NVUl9FQ19MRVZFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGTEFTSF9GU01fUFVMX0NOVFJfQ1VSX0VDX0xFVkVMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9QVUxfQ05UUl9DVVJfRUNfTEVWRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTE6MF0gUFVMX0NOVFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fUFVMX0NOVFJfUFVMX0NOVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZTTV9QVUxfQ05UUl9QVUxfQ05UUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1BVTF9DTlRSX1BVTF9DTlRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0VDX1NURVBfSEVJR0hUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gRUNfU1RFUF9IRUlHSFQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRUNfU1RFUF9IRUlHSFRfRUNfU1RFUF9IRUlHSFRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9FQ19TVEVQX0hFSUdIVF9FQ19TVEVQX0hFSUdIVF9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRlNNX0VDX1NURVBfSEVJR0hUX0VDX1NURVBfSEVJR0hUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1NUX01BQ0hJTkUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzIzXSBET19QUkVDT05ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRE9fUFJFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ET19QUkVDT05EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RPX1BSRUNPTkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRE9fUFJFQ09ORF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBGU01fSU5UX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRlNNX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9GU01fSU5UX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0ZTTV9JTlRfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRlNNX0lOVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBBTExfQkFOS1MKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9BTExfQkFOS1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0FMTF9CQU5LU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQUxMX0JBTktTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9BTExfQkFOS1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIENNUFZfQUxMT1dFRAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0NNUFZfQUxMT1dFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQ01QVl9BTExPV0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9DTVBWX0FMTE9XRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0NNUFZfQUxMT1dFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gUkFORE9NCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUkFORE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SQU5ET01fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JBTkRPTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUkFORE9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBSVl9TRUNfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9TRUNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX1NFQ19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfU0VDX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9TRUNfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIFJWX1JFUworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX1JFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfUkVTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9SRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX1JFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gUlZfSU5UX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9SVl9JTlRfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1JWX0lOVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUlZfSU5UX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE0XSBPTkVfVElNRV9HT09ECisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfT05FX1RJTUVfR09PRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9PTkVfVElNRV9HT09EX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX09ORV9USU1FX0dPT0RfTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfT05FX1RJTUVfR09PRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzExXSBET19SRURVX0NPTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RPX1JFRFVfQ09MICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRE9fUkVEVV9DT0xfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ET19SRURVX0NPTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RPX1JFRFVfQ09MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICBbMTA6N10gREJHX1NIT1JUX1JPVworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RCR19TSE9SVF9ST1dfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfREJHX1NIT1JUX1JPV19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc4MAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9EQkdfU0hPUlRfUk9XX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzVdIFBHTV9TRUNfQ09GX0VOCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUEdNX1NFQ19DT0ZfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9QR01fU0VDX0NPRl9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1BHTV9TRUNfQ09GX0VOX00gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUEdNX1NFQ19DT0ZfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBQUkVDX1NUT1BfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9QUkVDX1NUT1BfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX1BSRUNfU1RPUF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfUFJFQ19TVE9QX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9QUkVDX1NUT1BfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJU19UU1RfRU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ESVNfVFNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0RJU19UU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfRElTX1RTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9ESVNfVFNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIENNRF9FTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0NNRF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfQ01EX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9DTURfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0NNRF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gSU5WX0RBVEEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9JTlZfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX0lOVl9EQVRBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfSU5WX0RBVEFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9JTlZfREFUQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIE9WRVJSSURFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfT1ZFUlJJREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGTEFTSF9GU01fU1RfTUFDSElORV9PVkVSUklERV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZMQVNIX0ZTTV9TVF9NQUNISU5FX09WRVJSSURFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRkxBU0hfRlNNX1NUX01BQ0hJTkVfT1ZFUlJJREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0ZMRVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMTo4XSBCTEtfVElPVFAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRkxFU19CTEtfVElPVFBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9GTEVTX0JMS19USU9UUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX0ZMRVNfQkxLX1RJT1RQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBCTEtfT1RQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0ZMRVNfQkxLX09UUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GU01fRkxFU19CTEtfT1RQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEZMQVNIX0ZTTV9GTEVTX0JMS19PVFBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9XUl9FTkEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMjowXSBXUl9FTkEKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fV1JfRU5BX1dSX0VOQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9XUl9FTkFfV1JfRU5BX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRkxBU0hfRlNNX1dSX0VOQV9XUl9FTkFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0FDQ19QUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9BQ0NfUFAKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQUNDX1BQX0ZTTV9BQ0NfUFBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZTTV9BQ0NfUFBfRlNNX0FDQ19QUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX0FDQ19QUF9GU01fQUNDX1BQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0FDQ19FUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIEFDQ19FUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9BQ0NfRVBfQUNDX0VQX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRkxBU0hfRlNNX0FDQ19FUF9BQ0NfRVBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBGTEFTSF9GU01fQUNDX0VQX0FDQ19FUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fQUREUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzA6MjhdIEJBTksKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fQUREUl9CQU5LX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEZMQVNIX0ZTTV9BRERSX0JBTktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX0FERFJfQkFOS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogIFsyNzowXSBDVVJfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9BRERSX0NVUl9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgRkxBU0hfRlNNX0FERFJfQ1VSX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fQUREUl9DVVJfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU0VDVE9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToxNl0gU0VDVF9FUkFTRUQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX1NFQ1RfRVJBU0VEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfU0VDVF9FUkFTRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9TRUNUX0VSQVNFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBGU01fU0VDVE9SX0VYVEVOU0lPTgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfRlNNX1NFQ1RPUl9FWFRFTlNJT05fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9GU01fU0VDVE9SX0VYVEVOU0lPTl9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX0ZTTV9TRUNUT1JfRVhURU5TSU9OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgIFs3OjRdIFNFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfU0VDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9TRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX1NFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIFNFQ19PVVQKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SX1NFQ19PVVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1JfU0VDX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUl9TRUNfT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRk1DX1JFVl9JRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTJdIE1PRF9WRVJTSU9OCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRk1DX1JFVl9JRF9NT0RfVkVSU0lPTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBGTEFTSF9GTUNfUkVWX0lEX01PRF9WRVJTSU9OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMDAwCisjZGVmaW5lIEZMQVNIX0ZNQ19SRVZfSURfTU9EX1ZFUlNJT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICBbMTE6MF0gQ09ORklHX0NSQworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZNQ19SRVZfSURfQ09ORklHX0NSQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRk1DX1JFVl9JRF9DT05GSUdfQ1JDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGTEFTSF9GTUNfUkVWX0lEX0NPTkZJR19DUkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fRVJSX0FERFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTo4XSBGU01fRVJSX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRVJSX0FERFJfRlNNX0VSUl9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZTTV9FUlJfQUREUl9GU01fRVJSX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGMDAKKyNkZWZpbmUgRkxBU0hfRlNNX0VSUl9BRERSX0ZTTV9FUlJfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbMzowXSBGU01fRVJSX0JBTksKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fRVJSX0FERFJfRlNNX0VSUl9CQU5LX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZTTV9FUlJfQUREUl9GU01fRVJSX0JBTktfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRlNNX0VSUl9BRERSX0ZTTV9FUlJfQkFOS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX1BHTV9NQVhQVUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxMTowXSBGU01fUEdNX01BWFBVTAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9QR01fTUFYUFVMX0ZTTV9QR01fTUFYUFVMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfRlNNX1BHTV9NQVhQVUxfRlNNX1BHTV9NQVhQVUxfTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRgorI2RlZmluZSBGTEFTSF9GU01fUEdNX01BWFBVTF9GU01fUEdNX01BWFBVTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fRVhFQ1VURQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTk6MTZdIFNVU1BFTkRfTk9XCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0VYRUNVVEVfU1VTUEVORF9OT1dfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GU01fRVhFQ1VURV9TVVNQRU5EX05PV19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIEZMQVNIX0ZTTV9FWEVDVVRFX1NVU1BFTkRfTk9XX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzQ6MF0gRlNNRVhFQ1VURQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9FWEVDVVRFX0ZTTUVYRUNVVEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRkxBU0hfRlNNX0VYRUNVVEVfRlNNRVhFQ1VURV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBGTEFTSF9GU01fRVhFQ1VURV9GU01FWEVDVVRFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fU0VDVE9SMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9TRUNUT1IxCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUjFfRlNNX1NFQ1RPUjFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SMV9GU01fU0VDVE9SMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1IxX0ZTTV9TRUNUT1IxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9TRUNUT1IyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRlNNX1NFQ1RPUjIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GU01fU0VDVE9SMl9GU01fU0VDVE9SMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEZMQVNIX0ZTTV9TRUNUT1IyX0ZTTV9TRUNUT1IyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRlNNX1NFQ1RPUjJfRlNNX1NFQ1RPUjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRlNNX0JTTEUwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gRlNNX0JTTEUwCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0JTTEUwX0ZTTV9CU0xFMF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GU01fQlNMRTBfRlNNX0JTTEUwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xFMF9GU01fQlNMRTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9CU0xFMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9CU0wxCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRlNNX0JTTEUxX0ZTTV9CU0wxX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBGTEFTSF9GU01fQlNMRTFfRlNNX0JTTDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xFMV9GU01fQlNMMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZTTV9CU0xQMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIEZTTV9CU0xQMAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xQMF9GU01fQlNMUDBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX0JTTFAwX0ZTTV9CU0xQMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fQlNMUDBfRlNNX0JTTFAwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GU01fQlNMUDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBGU01fQlNMMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZTTV9CU0xQMV9GU01fQlNMMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRkxBU0hfRlNNX0JTTFAxX0ZTTV9CU0wxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBGTEFTSF9GU01fQlNMUDFfRlNNX0JTTDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0JBTksKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjIwXSBFRV9CQU5LX1dJRFRICisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX0VFX0JBTktfV0lEVEhfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfRUVfQkFOS19XSURUSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19FRV9CQU5LX1dJRFRIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gRUVfTlVNX0JBTksKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfRUVfTlVNX0JBTktfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19FRV9OVU1fQkFOS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX0VFX05VTV9CQU5LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo0XSBNQUlOX0JBTktfV0lEVEgKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfTUFJTl9CQU5LX1dJRFRIX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19NQUlOX0JBTktfV0lEVEhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRjAKKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX01BSU5fQkFOS19XSURUSF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICBbMzowXSBNQUlOX05VTV9CQU5LCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CQU5LX01BSU5fTlVNX0JBTktfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JBTktfTUFJTl9OVU1fQkFOS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQkFOS19NQUlOX05VTV9CQU5LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfV1JBUFBFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjRdIEZBTUlMWV9UWVBFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0ZBTUlMWV9UWVBFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRkFNSUxZX1RZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9GQU1JTFlfVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyMF0gTUVNX01BUAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9NRU1fTUFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX01FTV9NQVBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfTUVNX01BUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9NRU1fTUFQX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gQ1BVMgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9DUFUyX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0NQVTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfQ1BVMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIEVFX0lOX01BSU4KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRUVfSU5fTUFJTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9FRV9JTl9NQUlOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0VFX0lOX01BSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBST00KKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9ST01fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1JPTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfUk9NX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIElGTFVTSAorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9JRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0lGTFVTSF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfSUZMVVNIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9JRkxVU0hfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gU0lMMworLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9TSUwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1NJTDNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfU0lMM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9TSUwzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRUNDQQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9FQ0NBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0VDQ0FfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfRUNDQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9FQ0NBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6Nl0gQVVUT19TVVNQCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0FVVE9fU1VTUF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfQVVUT19TVVNQX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9BVVRPX1NVU1BfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgWzU6NF0gVUVSUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9VRVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX1VFUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfVUVSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIENQVV9UWVBFMQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfV1JBUFBFUl9DUFVfVFlQRTFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19XUkFQUEVSX0NQVV9UWVBFMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBGTEFTSF9GQ0ZHX1dSQVBQRVJfQ1BVX1RZUEUxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0JOS19UWVBFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gQjdfVFlQRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjdfVFlQRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CN19UWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I3X1RZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIEI2X1RZUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I2X1RZUEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjZfVFlQRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CNl9UWVBFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogWzIzOjIwXSBCNV9UWVBFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CNV9UWVBFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I1X1RZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjVfVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gQjRfVFlQRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjRfVFlQRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CNF9UWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0I0X1RZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiBbMTU6MTJdIEIzX1RZUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IzX1RZUEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjNfVFlQRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CM19UWVBFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogIFsxMTo4XSBCMl9UWVBFCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CMl9UWVBFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IyX1RZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjJfVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6NF0gQjFfVFlQRQorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjFfVFlQRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CMV9UWVBFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IxX1RZUEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgIFszOjBdIEIwX1RZUEUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0JOS19UWVBFX0IwX1RZUEVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQk5LX1RZUEVfQjBfVFlQRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRkNGR19CTktfVFlQRV9CMF9UWVBFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CMF9TVEFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEIwX01BWF9TRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NUQVJUX0IwX01BWF9TRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1RBUlRfQjBfTUFYX1NFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TVEFSVF9CMF9NQVhfU0VDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCMF9NVVhfRkFDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TVEFSVF9CMF9NVVhfRkFDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NUQVJUX0IwX01VWF9GQUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1RBUlRfQjBfTVVYX0ZBQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gQjBfU1RBUlRfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1RBUlRfQjBfU1RBUlRfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TVEFSVF9CMF9TVEFSVF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NUQVJUX0IwX1NUQVJUX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0IxX1NUQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gQjFfTUFYX1NFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjFfU1RBUlRfQjFfTUFYX1NFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CMV9TVEFSVF9CMV9NQVhfU0VDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IxX1NUQVJUX0IxX01BWF9TRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIEIxX01VWF9GQUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IxX1NUQVJUX0IxX01VWF9GQUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjFfU1RBUlRfQjFfTVVYX0ZBQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CMV9TVEFSVF9CMV9NVVhfRkFDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsyMzowXSBCMV9TVEFSVF9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMV9TVEFSVF9CMV9TVEFSVF9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IxX1NUQVJUX0IxX1NUQVJUX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjFfU1RBUlRfQjFfU1RBUlRfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfQjJfU1RBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBCMl9NQVhfU0VDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CMl9TVEFSVF9CMl9NQVhfU0VDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IyX1NUQVJUX0IyX01BWF9TRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjJfU1RBUlRfQjJfTUFYX1NFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gQjJfTVVYX0ZBQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjJfU1RBUlRfQjJfTVVYX0ZBQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CMl9TVEFSVF9CMl9NVVhfRkFDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IyX1NUQVJUX0IyX01VWF9GQUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgWzIzOjBdIEIyX1NUQVJUX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IyX1NUQVJUX0IyX1NUQVJUX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjJfU1RBUlRfQjJfU1RBUlRfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRkNGR19CMl9TVEFSVF9CMl9TVEFSVF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CM19TVEFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEIzX01BWF9TRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IzX1NUQVJUX0IzX01BWF9TRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjNfU1RBUlRfQjNfTUFYX1NFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CM19TVEFSVF9CM19NQVhfU0VDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCM19NVVhfRkFDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CM19TVEFSVF9CM19NVVhfRkFDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0IzX1NUQVJUX0IzX01VWF9GQUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjNfU1RBUlRfQjNfTVVYX0ZBQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gQjNfU1RBUlRfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjNfU1RBUlRfQjNfU1RBUlRfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkNGR19CM19TVEFSVF9CM19TVEFSVF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IzX1NUQVJUX0IzX1NUQVJUX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0I0X1NUQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gQjRfTUFYX1NFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjRfU1RBUlRfQjRfTUFYX1NFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CNF9TVEFSVF9CNF9NQVhfU0VDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I0X1NUQVJUX0I0X01BWF9TRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIEI0X01VWF9GQUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I0X1NUQVJUX0I0X01VWF9GQUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjRfU1RBUlRfQjRfTVVYX0ZBQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CNF9TVEFSVF9CNF9NVVhfRkFDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsyMzowXSBCNF9TVEFSVF9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CNF9TVEFSVF9CNF9TVEFSVF9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I0X1NUQVJUX0I0X1NUQVJUX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjRfU1RBUlRfQjRfU1RBUlRfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfQjVfU1RBUlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjI4XSBCNV9NQVhfU0VDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CNV9TVEFSVF9CNV9NQVhfU0VDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I1X1NUQVJUX0I1X01BWF9TRUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjVfU1RBUlRfQjVfTUFYX1NFQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6IFsyNzoyNF0gQjVfTVVYX0ZBQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjVfU1RBUlRfQjVfTVVYX0ZBQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CNV9TVEFSVF9CNV9NVVhfRkFDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I1X1NUQVJUX0I1X01VWF9GQUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgWzIzOjBdIEI1X1NUQVJUX0FERFIKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I1X1NUQVJUX0I1X1NUQVJUX0FERFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjVfU1RBUlRfQjVfU1RBUlRfQUREUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgRkxBU0hfRkNGR19CNV9TVEFSVF9CNV9TVEFSVF9BRERSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEZMQVNIX09fRkNGR19CNl9TVEFSVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MjhdIEI2X01BWF9TRUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I2X1NUQVJUX0I2X01BWF9TRUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjZfU1RBUlRfQjZfTUFYX1NFQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CNl9TVEFSVF9CNl9NQVhfU0VDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzI3OjI0XSBCNl9NVVhfRkFDVE9SCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CNl9TVEFSVF9CNl9NVVhfRkFDVE9SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I2X1NUQVJUX0I2X01VWF9GQUNUT1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjZfU1RBUlRfQjZfTVVYX0ZBQ1RPUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICBbMjM6MF0gQjZfU1RBUlRfQUREUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjZfU1RBUlRfQjZfU1RBUlRfQUREUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgRkxBU0hfRkNGR19CNl9TVEFSVF9CNl9TVEFSVF9BRERSX00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I2X1NUQVJUX0I2X1NUQVJUX0FERFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogRkxBU0hfT19GQ0ZHX0I3X1NUQVJUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gQjdfTUFYX1NFQ1RPUgorLy8KKy8vIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjdfU1RBUlRfQjdfTUFYX1NFQ1RPUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRkxBU0hfRkNGR19CN19TVEFSVF9CN19NQVhfU0VDVE9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I3X1NUQVJUX0I3X01BWF9TRUNUT1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiBbMjc6MjRdIEI3X01VWF9GQUNUT1IKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0I3X1NUQVJUX0I3X01VWF9GQUNUT1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjdfU1RBUlRfQjdfTVVYX0ZBQ1RPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CN19TVEFSVF9CN19NVVhfRkFDVE9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogIFsyMzowXSBCN19TVEFSVF9BRERSCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgRkxBU0hfRkNGR19CN19TVEFSVF9CN19TVEFSVF9BRERSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBGTEFTSF9GQ0ZHX0I3X1NUQVJUX0I3X1NUQVJUX0FERFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjdfU1RBUlRfQjdfU1RBUlRfQUREUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBGTEFTSF9PX0ZDRkdfQjBfU1NJWkUwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsyNzoxNl0gQjBfTlVNX1NFQ1RPUlMKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NTSVpFMF9CMF9OVU1fU0VDVE9SU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1NJWkUwX0IwX05VTV9TRUNUT1JTX00gICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRjAwMDAKKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TU0laRTBfQjBfTlVNX1NFQ1RPUlNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICBbMzowXSBCMF9TRUNUX1NJWkUKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBGTEFTSF9GQ0ZHX0IwX1NTSVpFMF9CMF9TRUNUX1NJWkVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEZMQVNIX0ZDRkdfQjBfU1NJWkUwX0IwX1NFQ1RfU0laRV9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRkxBU0hfRkNGR19CMF9TU0laRTBfQjBfU0VDVF9TSVpFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0ZMQVNIX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2dwaW8uaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTM3NDg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfZ3Bpby5oCkBAIC0wLDAgKzEsMjI0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2dwaW9faAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfR1BJT19IX18KKyNkZWZpbmUgX19IV19HUElPX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEdQSU8gY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRGF0YSBPdXQgMCB0byAzCisjZGVmaW5lIEdQSU9fT19ET1VUM18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRGF0YSBPdXQgNCB0byA3CisjZGVmaW5lIEdQSU9fT19ET1VUN180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRGF0YSBPdXQgOCB0byAxMQorI2RlZmluZSBHUElPX09fRE9VVDExXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIERhdGEgT3V0IDEyIHRvIDE1CisjZGVmaW5lIEdQSU9fT19ET1VUMTVfMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gRGF0YSBPdXQgMTYgdG8gMTkKKyNkZWZpbmUgR1BJT19PX0RPVVQxOV8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBEYXRhIE91dCAyMCB0byAyMworI2RlZmluZSBHUElPX09fRE9VVDIzXzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIERhdGEgT3V0IDI0IHRvIDI3CisjZGVmaW5lIEdQSU9fT19ET1VUMjdfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gRGF0YSBPdXQgMjggdG8gMzEKKyNkZWZpbmUgR1BJT19PX0RPVVQzMV8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBEYXRhIE91dHB1dCBmb3IgRElPIDAgdG8gMzEKKyNkZWZpbmUgR1BJT19PX0RPVVQzMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorCisvLyBEYXRhIE91dCBTZXQKKyNkZWZpbmUgR1BJT19PX0RPVVRTRVQzMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAorCisvLyBEYXRhIE91dCBDbGVhcgorI2RlZmluZSBHUElPX09fRE9VVENMUjMxXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEEwCisKKy8vIERhdGEgT3V0IFRvZ2dsZQorI2RlZmluZSBHUElPX09fRE9VVFRHTDMxXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEIwCisKKy8vIERhdGEgSW5wdXQgZnJvbSBESU8gMCB0byAzMQorI2RlZmluZSBHUElPX09fRElOMzFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisKKy8vIERhdGEgT3V0cHV0IEVuYWJsZSBmb3IgRElPIDAgdG8gMzEKKyNkZWZpbmUgR1BJT19PX0RPRTMxXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEMAorCisvLyBFdmVudCBSZWdpc3RlciBmb3IgRElPIDAgdG8gMzEKKyNkZWZpbmUgR1BJT19PX0VWRkxBR1MzMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBFMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUM18wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gRElPMworLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMzLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMgorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOF0gRElPMQorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMAorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMwLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUM18wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVQzXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDNfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVDdfNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzcKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jNywgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU83X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzYKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jNiwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzUKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jNSwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzQKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jNCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDdfNF9ESU80X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUN180X0RJTzRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQ3XzRfRElPNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPVVQxMV84CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gRElPMTEKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTEsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzExX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPMTFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU8xMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBESU8xMAorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxMCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzkKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jOSwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU85X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzgKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jOCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDExXzhfRElPOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUMTFfOF9ESU84X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQxMV84X0RJTzhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPVVQxNV8xMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzE1CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzE1LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMTQKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTQsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBESU8xMworLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxMywgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzEyCisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzEyLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMTVfMTJfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVQxNV8xMl9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDE1XzEyX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVDE5XzE2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gRElPMTkKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTksIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBESU8xOAorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMxOCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzE3CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzE3LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMTYKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMTYsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQxOV8xNl9ESU8xNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVDE5XzE2X0RJTzE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMTlfMTZfRElPMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUMjNfMjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzI0XSBESU8yMworLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyMywgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzIyCisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzIyLCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgICBbOF0gRElPMjEKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMjEsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFswXSBESU8yMAorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyMCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDIzXzIwX0RJTzIwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUMjNfMjBfRElPMjBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQyM18yMF9ESU8yMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RPVVQyN18yNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMjRdIERJTzI3CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzI3LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMjYKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMjYsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgIFs4XSBESU8yNQorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMyNSwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzI0CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzI0LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMjdfMjRfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RPVVQyN18yNF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVDI3XzI0X0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9VVDMxXzI4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsyNF0gRElPMzEKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMzEsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8zMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzE2XSBESU8zMAorLy8KKy8vIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBwaW4gdGhhdCBpcyBjb25maWd1cmVkIGFzIERJTyMzMCwgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKy8vIERPRTMxXzAgYml0ZmllbGQgaXMgc2V0LgorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzI5CisvLworLy8gU2V0cyB0aGUgc3RhdGUgb2YgdGhlIHBpbiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgRElPIzI5LCBpZiB0aGUgY29ycmVzcG9uZGluZworLy8gRE9FMzFfMCBiaXRmaWVsZCBpcyBzZXQuCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMjgKKy8vCisvLyBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGluIHRoYXQgaXMgY29uZmlndXJlZCBhcyBESU8jMjgsIGlmIHRoZSBjb3JyZXNwb25kaW5nCisvLyBET0UzMV8wIGJpdGZpZWxkIGlzIHNldC4KKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQzMV8yOF9ESU8yOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzI4X0RJTzI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMjhfRElPMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUMzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERJTzMxCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAzMQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIERJTzMwCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAzMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERJTzI5CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyOQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIERJTzI4CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyOAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIERJTzI3CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyNworI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERJTzI2CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyNgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERJTzI1CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyNQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIERJTzI0CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyNAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIERJTzIzCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyMworI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIERJTzIyCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyMgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIERJTzIxCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyMQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJTzIwCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJTzE5CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxOQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIERJTzE4CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxOAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIERJTzE3CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxNworI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE2CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxNgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIERJTzE1CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxNQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIERJTzE0CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxNAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERJTzEzCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxMworI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIERJTzEyCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxMgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJTzExCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxMQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIERJTzEwCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAxMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIERJTzkKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDkKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBESU84CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyA4CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRElPNworLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gNworI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIERJTzYKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDYKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESU81CisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyA1CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElPNAorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gNAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJTzMKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDMKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESU8yCisvLworLy8gRGF0YSBvdXRwdXQgZm9yIERJTyAyCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRElPMQorLy8KKy8vIERhdGEgb3V0cHV0IGZvciBESU8gMQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzAKKy8vCisvLyBEYXRhIG91dHB1dCBmb3IgRElPIDAKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVQzMV8wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVDMxXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUMzFfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUU0VUMzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERJTzMxCisvLworLy8gU2V0IGJpdCAzMQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIERJTzMwCisvLworLy8gU2V0IGJpdCAzMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERJTzI5CisvLworLy8gU2V0IGJpdCAyOQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIERJTzI4CisvLworLy8gU2V0IGJpdCAyOAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIERJTzI3CisvLworLy8gU2V0IGJpdCAyNworI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERJTzI2CisvLworLy8gU2V0IGJpdCAyNgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERJTzI1CisvLworLy8gU2V0IGJpdCAyNQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIERJTzI0CisvLworLy8gU2V0IGJpdCAyNAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIERJTzIzCisvLworLy8gU2V0IGJpdCAyMworI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIERJTzIyCisvLworLy8gU2V0IGJpdCAyMgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIERJTzIxCisvLworLy8gU2V0IGJpdCAyMQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJTzIwCisvLworLy8gU2V0IGJpdCAyMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJTzE5CisvLworLy8gU2V0IGJpdCAxOQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIERJTzE4CisvLworLy8gU2V0IGJpdCAxOAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIERJTzE3CisvLworLy8gU2V0IGJpdCAxNworI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE2CisvLworLy8gU2V0IGJpdCAxNgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIERJTzE1CisvLworLy8gU2V0IGJpdCAxNQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIERJTzE0CisvLworLy8gU2V0IGJpdCAxNAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERJTzEzCisvLworLy8gU2V0IGJpdCAxMworI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIERJTzEyCisvLworLy8gU2V0IGJpdCAxMgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJTzExCisvLworLy8gU2V0IGJpdCAxMQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIERJTzEwCisvLworLy8gU2V0IGJpdCAxMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIERJTzkKKy8vCisvLyBTZXQgYml0IDkKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBESU84CisvLworLy8gU2V0IGJpdCA4CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRElPNworLy8KKy8vIFNldCBiaXQgNworI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIERJTzYKKy8vCisvLyBTZXQgYml0IDYKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESU81CisvLworLy8gU2V0IGJpdCA1CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElPNAorLy8KKy8vIFNldCBiaXQgNAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJTzMKKy8vCisvLyBTZXQgYml0IDMKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESU8yCisvLworLy8gU2V0IGJpdCAyCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRElPMQorLy8KKy8vIFNldCBiaXQgMQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzAKKy8vCisvLyBTZXQgYml0IDAKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVRTRVQzMV8wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVFNFVDMxXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUU0VUMzFfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUQ0xSMzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERJTzMxCisvLworLy8gQ2xlYXJzIGJpdCAzMQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIERJTzMwCisvLworLy8gQ2xlYXJzIGJpdCAzMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIERJTzI5CisvLworLy8gQ2xlYXJzIGJpdCAyOQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIERJTzI4CisvLworLy8gQ2xlYXJzIGJpdCAyOAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIERJTzI3CisvLworLy8gQ2xlYXJzIGJpdCAyNworI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiAgICBbMjZdIERJTzI2CisvLworLy8gQ2xlYXJzIGJpdCAyNgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERJTzI1CisvLworLy8gQ2xlYXJzIGJpdCAyNQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIERJTzI0CisvLworLy8gQ2xlYXJzIGJpdCAyNAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiAgICBbMjNdIERJTzIzCisvLworLy8gQ2xlYXJzIGJpdCAyMworI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIERJTzIyCisvLworLy8gQ2xlYXJzIGJpdCAyMgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIERJTzIxCisvLworLy8gQ2xlYXJzIGJpdCAyMQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisKKy8vIEZpZWxkOiAgICBbMjBdIERJTzIwCisvLworLy8gQ2xlYXJzIGJpdCAyMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJTzE5CisvLworLy8gQ2xlYXJzIGJpdCAxOQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIERJTzE4CisvLworLy8gQ2xlYXJzIGJpdCAxOAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiAgICBbMTddIERJTzE3CisvLworLy8gQ2xlYXJzIGJpdCAxNworI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE2CisvLworLy8gQ2xlYXJzIGJpdCAxNgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIERJTzE1CisvLworLy8gQ2xlYXJzIGJpdCAxNQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIERJTzE0CisvLworLy8gQ2xlYXJzIGJpdCAxNAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERJTzEzCisvLworLy8gQ2xlYXJzIGJpdCAxMworI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIERJTzEyCisvLworLy8gQ2xlYXJzIGJpdCAxMgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIERJTzExCisvLworLy8gQ2xlYXJzIGJpdCAxMQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIERJTzEwCisvLworLy8gQ2xlYXJzIGJpdCAxMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIERJTzkKKy8vCisvLyBDbGVhcnMgYml0IDkKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBESU84CisvLworLy8gQ2xlYXJzIGJpdCA4CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRElPNworLy8KKy8vIENsZWFycyBiaXQgNworI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIERJTzYKKy8vCisvLyBDbGVhcnMgYml0IDYKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBESU81CisvLworLy8gQ2xlYXJzIGJpdCA1CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElPNAorLy8KKy8vIENsZWFycyBiaXQgNAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIERJTzMKKy8vCisvLyBDbGVhcnMgYml0IDMKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBESU8yCisvLworLy8gQ2xlYXJzIGJpdCAyCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRElPMQorLy8KKy8vIENsZWFycyBiaXQgMQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIERJTzAKKy8vCisvLyBDbGVhcnMgYml0IDAKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVRDTFIzMV8wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fRE9VVENMUjMxXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ET1VUQ0xSMzFfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQSU9fT19ET1VUVEdMMzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERJTzMxCisvLworLy8gVG9nZ2xlcyBiaXQgMzEKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzMxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBESU8zMAorLy8KKy8vIFRvZ2dsZXMgYml0IDMwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gRElPMjkKKy8vCisvLyBUb2dnbGVzIGJpdCAyOQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIERJTzI4CisvLworLy8gVG9nZ2xlcyBiaXQgMjgKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESU8yNworLy8KKy8vIFRvZ2dsZXMgYml0IDI3CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gRElPMjYKKy8vCisvLyBUb2dnbGVzIGJpdCAyNgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERJTzI1CisvLworLy8gVG9nZ2xlcyBiaXQgMjUKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBESU8yNAorLy8KKy8vIFRvZ2dsZXMgYml0IDI0CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gRElPMjMKKy8vCisvLyBUb2dnbGVzIGJpdCAyMworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIERJTzIyCisvLworLy8gVG9nZ2xlcyBiaXQgMjIKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBESU8yMQorLy8KKy8vIFRvZ2dsZXMgYml0IDIxCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gRElPMjAKKy8vCisvLyBUb2dnbGVzIGJpdCAyMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJTzE5CisvLworLy8gVG9nZ2xlcyBiaXQgMTkKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE5X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBESU8xOAorLy8KKy8vIFRvZ2dsZXMgYml0IDE4CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gRElPMTcKKy8vCisvLyBUb2dnbGVzIGJpdCAxNworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE2CisvLworLy8gVG9nZ2xlcyBiaXQgMTYKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBESU8xNQorLy8KKy8vIFRvZ2dsZXMgYml0IDE1CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gRElPMTQKKy8vCisvLyBUb2dnbGVzIGJpdCAxNAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERJTzEzCisvLworLy8gVG9nZ2xlcyBiaXQgMTMKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESU8xMgorLy8KKy8vIFRvZ2dsZXMgYml0IDEyCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gRElPMTEKKy8vCisvLyBUb2dnbGVzIGJpdCAxMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIERJTzEwCisvLworLy8gVG9nZ2xlcyBiaXQgMTAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzEwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMTBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBESU85CisvLworLy8gVG9nZ2xlcyBiaXQgOQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU85X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzgKKy8vCisvLyBUb2dnbGVzIGJpdCA4CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRElPNworLy8KKy8vIFRvZ2dsZXMgYml0IDcKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU83X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBESU82CisvLworLy8gVG9nZ2xlcyBiaXQgNgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIERJTzUKKy8vCisvLyBUb2dnbGVzIGJpdCA1CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElPNAorLy8KKy8vIFRvZ2dsZXMgYml0IDQKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU80X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESU8zCisvLworLy8gVG9nZ2xlcyBiaXQgMworI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8zX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERJTzIKKy8vCisvLyBUb2dnbGVzIGJpdCAyCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRElPMQorLy8KKy8vIFRvZ2dsZXMgYml0IDEKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8xX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESU8wCisvLworLy8gVG9nZ2xlcyBiaXQgMAorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9VVFRHTDMxXzBfRElPMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET1VUVEdMMzFfMF9ESU8wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPVVRUR0wzMV8wX0RJTzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0RJTjMxXzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBESU8zMQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMzEKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBESU8zMAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMzAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzMwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBESU8yOQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjkKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogICAgWzI4XSBESU8yOAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjgKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESU8yNworLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjcKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBESU8yNgorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjYKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBESU8yNQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjUKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBESU8yNAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjQKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzI0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBESU8yMworLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjMKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBESU8yMgorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjIKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBESU8yMQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjEKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorCisvLyBGaWVsZDogICAgWzIwXSBESU8yMAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMjAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMjBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzIwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBGaWVsZDogICAgWzE5XSBESU8xOQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTkKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBESU8xOAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTgKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMThfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBESU8xNworLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTcKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBESU8xNgorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTYKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBESU8xNQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTUKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBESU8xNAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTQKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBESU8xMworLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTMKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESU8xMgorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTIKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBESU8xMQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTEKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzExX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBESU8xMAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMTAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBESU85CisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyA5CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU85X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gRElPOAorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gOAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU84X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIERJTzcKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDcKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBESU82CisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyA2CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU82X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gRElPNQorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gNQorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU81X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIERJTzQKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDQKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESU8zCisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyAzCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUElPX0RJTjMxXzBfRElPM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8zX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRElPMgorLy8KKy8vIERhdGEgaW5wdXQgZnJvbSBESU8gMgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8yX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIERJTzEKKy8vCisvLyBEYXRhIGlucHV0IGZyb20gRElPIDEKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESU8wCisvLworLy8gRGF0YSBpbnB1dCBmcm9tIERJTyAwCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19ESU4zMV8wX0RJTzBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUElPX0RJTjMxXzBfRElPMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRElOMzFfMF9ESU8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUElPX09fRE9FMzFfMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIERJTzMxCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMzEKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMzFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBESU8zMAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDMwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzMwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gRElPMjkKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyOQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiAgICBbMjhdIERJTzI4CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjgKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI4X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogICAgWzI3XSBESU8yNworLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDI3CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gRElPMjYKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyNgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8vIEZpZWxkOiAgICBbMjVdIERJTzI1CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjUKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorCisvLyBGaWVsZDogICAgWzI0XSBESU8yNAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDI0CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gRElPMjMKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyMworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisKKy8vIEZpZWxkOiAgICBbMjJdIERJTzIyCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMjIKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorCisvLyBGaWVsZDogICAgWzIxXSBESU8yMQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDIxCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gRElPMjAKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIERJTzE5CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTkKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xOV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE5X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBESU8xOAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDE4CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE4X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMThfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xOF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gRElPMTcKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxNworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIERJTzE2CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTYKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBESU8xNQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDE1CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gRElPMTQKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxNAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8vIEZpZWxkOiAgICBbMTNdIERJTzEzCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTMKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBESU8xMgorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDEyCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gRElPMTEKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAxMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIERJTzEwCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMTAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMTBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBESU85CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gOQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU85X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPOV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzgKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyA4CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU84X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRElPNworLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDcKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBESU82CisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gNgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU82X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIERJTzUKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyA1CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU81X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gRElPNAorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDQKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU80X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBESU8zCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMworI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8zX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERJTzIKKy8vCisvLyBEYXRhIG91dHB1dCBlbmFibGUgZm9yIERJTyAyCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gRElPMQorLy8KKy8vIERhdGEgb3V0cHV0IGVuYWJsZSBmb3IgRElPIDEKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8xX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBESU8wCisvLworLy8gRGF0YSBvdXRwdXQgZW5hYmxlIGZvciBESU8gMAorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRE9FMzFfMF9ESU8wX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19ET0UzMV8wX0RJTzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0RPRTMxXzBfRElPMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BJT19PX0VWRkxBR1MzMV8wCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gRElPMzEKKy8vCisvLyBFdmVudCBmb3IgRElPIDMxCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMzFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgIFszMF0gRElPMzAKKy8vCisvLyBFdmVudCBmb3IgRElPIDMwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gRElPMjkKKy8vCisvLyBFdmVudCBmb3IgRElPIDI5CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gRElPMjgKKy8vCisvLyBFdmVudCBmb3IgRElPIDI4CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gRElPMjcKKy8vCisvLyBFdmVudCBmb3IgRElPIDI3CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gRElPMjYKKy8vCisvLyBFdmVudCBmb3IgRElPIDI2CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gRElPMjUKKy8vCisvLyBFdmVudCBmb3IgRElPIDI1CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKworLy8gRmllbGQ6ICAgIFsyNF0gRElPMjQKKy8vCisvLyBFdmVudCBmb3IgRElPIDI0CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzI0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gRElPMjMKKy8vCisvLyBFdmVudCBmb3IgRElPIDIzCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gRElPMjIKKy8vCisvLyBFdmVudCBmb3IgRElPIDIyCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gRElPMjEKKy8vCisvLyBFdmVudCBmb3IgRElPIDIxCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gRElPMjAKKy8vCisvLyBFdmVudCBmb3IgRElPIDIwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzIwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMjBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gRElPMTkKKy8vCisvLyBFdmVudCBmb3IgRElPIDE5CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE5X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKworLy8gRmllbGQ6ICAgIFsxOF0gRElPMTgKKy8vCisvLyBFdmVudCBmb3IgRElPIDE4CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xOF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE4X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMThfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gRElPMTcKKy8vCisvLyBFdmVudCBmb3IgRElPIDE3CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gRElPMTYKKy8vCisvLyBFdmVudCBmb3IgRElPIDE2CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE2X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgIFsxNV0gRElPMTUKKy8vCisvLyBFdmVudCBmb3IgRElPIDE1CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gRElPMTQKKy8vCisvLyBFdmVudCBmb3IgRElPIDE0CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gRElPMTMKKy8vCisvLyBFdmVudCBmb3IgRElPIDEzCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKworLy8gRmllbGQ6ICAgIFsxMl0gRElPMTIKKy8vCisvLyBFdmVudCBmb3IgRElPIDEyCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gRElPMTEKKy8vCisvLyBFdmVudCBmb3IgRElPIDExCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzExX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gRElPMTAKKy8vCisvLyBFdmVudCBmb3IgRElPIDEwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzEwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMTBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gRElPOQorLy8KKy8vIEV2ZW50IGZvciBESU8gOQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPOV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU85X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIERJTzgKKy8vCisvLyBFdmVudCBmb3IgRElPIDgKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPOF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU84X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBESU83CisvLworLy8gRXZlbnQgZm9yIERJTyA3CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU83X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gRElPNgorLy8KKy8vIEV2ZW50IGZvciBESU8gNgorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU82X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIERJTzUKKy8vCisvLyBFdmVudCBmb3IgRElPIDUKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU81X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBESU80CisvLworLy8gRXZlbnQgZm9yIERJTyA0CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU80X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gRElPMworLy8KKy8vIEV2ZW50IGZvciBESU8gMworI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8zX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIERJTzIKKy8vCisvLyBFdmVudCBmb3IgRElPIDIKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8yX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBESU8xCisvLworLy8gRXZlbnQgZm9yIERJTyAxCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8xX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRElPMAorLy8KKy8vIEV2ZW50IGZvciBESU8gMAorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQSU9fRVZGTEFHUzMxXzBfRElPMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BJT19FVkZMQUdTMzFfMF9ESU8wX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUElPX0VWRkxBR1MzMV8wX0RJTzBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fR1BJT19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ncHQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2dwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODJiYTEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19ncHQuaApAQCAtMCwwICsxLDE2ODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19ncHRfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfR1BUX0hfXworI2RlZmluZSBfX0hXX0dQVF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBHUFQgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29uZmlndXJhdGlvbgorI2RlZmluZSBHUFRfT19DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFRpbWVyIEEgTW9kZQorI2RlZmluZSBHUFRfT19UQU1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFRpbWVyIEIgTW9kZQorI2RlZmluZSBHUFRfT19UQk1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIENvbnRyb2wKKyNkZWZpbmUgR1BUX09fQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBTeW5jaCBSZWdpc3RlcgorI2RlZmluZSBHUFRfT19TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIEludGVycnVwdCBNYXNrCisjZGVmaW5lIEdQVF9PX0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gUmF3IEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgR1BUX09fUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworCisvLyBNYXNrZWQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBHUFRfT19NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIEludGVycnVwdCBDbGVhcgorI2RlZmluZSBHUFRfT19JQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIFRpbWVyIEEgSW50ZXJ2YWwgTG9hZCAgUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX09fVEFJTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBUaW1lciBCIEludGVydmFsIExvYWQgIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9PX1RCSUxSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMKKworLy8gVGltZXIgQSBNYXRjaCBSZWdpc3RlcgorI2RlZmluZSBHUFRfT19UQU1BVENIUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIFRpbWVyIEIgTWF0Y2ggUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX09fVEJNQVRDSFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBUaW1lciBBIFByZS1zY2FsZQorI2RlZmluZSBHUFRfT19UQVBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIFRpbWVyIEIgUHJlLXNjYWxlCisjZGVmaW5lIEdQVF9PX1RCUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gVGltZXIgQSBQcmUtc2NhbGUgTWF0Y2gKKyNkZWZpbmUgR1BUX09fVEFQTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisvLyBUaW1lciBCIFByZS1zY2FsZSBNYXRjaAorI2RlZmluZSBHUFRfT19UQlBNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vIFRpbWVyIEEgUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX09fVEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorCisvLyBUaW1lciBCIFJlZ2lzdGVyCisjZGVmaW5lIEdQVF9PX1RCUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEMKKworLy8gVGltZXIgQSBWYWx1ZQorI2RlZmluZSBHUFRfT19UQVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisKKy8vIFRpbWVyIEIgVmFsdWUKKyNkZWZpbmUgR1BUX09fVEJWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorCisvLyBUaW1lciBBIFByZS1zY2FsZSBTbmFwLXNob3QKKyNkZWZpbmUgR1BUX09fVEFQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyBUaW1lciBCIFByZS1zY2FsZSBTbmFwLXNob3QKKyNkZWZpbmUgR1BUX09fVEJQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorCisvLyBUaW1lciBBIFByZS1zY2FsZSBWYWx1ZQorI2RlZmluZSBHUFRfT19UQVBWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIFRpbWVyIEIgUHJlLXNjYWxlIFZhbHVlCisjZGVmaW5lIEdQVF9PX1RCUFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKKworLy8gRE1BIEV2ZW50CisjZGVmaW5lIEdQVF9PX0RNQUVWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKworLy8gUGVyaXBoZXJhbCBWZXJzaW9uCisjZGVmaW5lIEdQVF9PX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQjAKKworLy8gQ29tYmluZWQgQ0NQIE91dHB1dAorI2RlZmluZSBHUFRfT19BTkRDQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gQ0ZHCisvLworLy8gR1BUIENvbmZpZ3VyYXRpb24KKy8vIDB4Mi0gMHgzIC0gUmVzZXJ2ZWQKKy8vIDB4NS0gMHg3IC0gUmVzZXJ2ZWQKKy8vIEVOVU1zOgorLy8gMTZCSVRfVElNRVIgICAgICAgICAgICAgIDE2LWJpdCB0aW1lciBjb25maWd1cmF0aW9uLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZSBmb3IgdHdvIDE2LWJpdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvIHNlZSBUQU1SLlRBTVIgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVEJNUi5UQk1SLgorLy8gMzJCSVRfVElNRVIgICAgICAgICAgICAgIDMyLWJpdCB0aW1lciBjb25maWd1cmF0aW9uCisjZGVmaW5lIEdQVF9DRkdfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BUX0NGR19DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBHUFRfQ0ZHX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9DRkdfQ0ZHXzE2QklUX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0NGR19DRkdfMzJCSVRfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RBTVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzE1OjEzXSBUQ0FDVAorLy8KKy8vIFRpbWVyIENvbXBhcmUgQWN0aW9uIFNlbGVjdAorLy8gRU5VTXM6CisvLyBDTFJTRVRfT05fVE8gICAgICAgICAgICAgQ2xlYXIgQ0NQIG91dHB1dCBwaW4gaW1tZWRpYXRlbHkgYW5kIHNldCBvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUtT3V0CisvLyBTRVRDTFJfT05fVE8gICAgICAgICAgICAgU2V0IENDUCBvdXRwdXQgcGluIGltbWVkaWF0ZWx5IGFuZCBjbGVhciBvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUtT3V0CisvLyBDTFJUT0dfT05fVE8gICAgICAgICAgICAgQ2xlYXIgQ0NQIG91dHB1dCBwaW4gaW1tZWRpYXRlbHkgYW5kIHRvZ2dsZSBvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUtT3V0CisvLyBTRVRUT0dfT05fVE8gICAgICAgICAgICAgU2V0IENDUCBvdXRwdXQgcGluIGltbWVkaWF0ZWx5IGFuZCB0b2dnbGUgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gU0VUX09OX1RPICAgICAgICAgICAgICAgIFNldCBDQ1Agb3V0cHV0IHBpbiBvbiBUaW1lLU91dAorLy8gQ0xSX09OX1RPICAgICAgICAgICAgICAgIENsZWFyIENDUCBvdXRwdXQgcGluIG9uIFRpbWUtT3V0CisvLyBUT0dfT05fVE8gICAgICAgICAgICAgICAgVG9nZ2xlIFN0YXRlIG9uIFRpbWUtT3V0CisvLyBESVNfQ01QICAgICAgICAgICAgICAgICAgRGlzYWJsZSBjb21wYXJlIG9wZXJhdGlvbnMKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBFMDAwCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfQ0xSU0VUX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRTAwMAorI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9TRVRDTFJfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX0NMUlRPR19PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEEwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfU0VUVE9HX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9TRVRfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIEdQVF9UQU1SX1RDQUNUX0NMUl9PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVENBQ1RfVE9HX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfVEFNUl9UQ0FDVF9ESVNfQ01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFRBQ0lOVEQKKy8vCisvLyBPbmUtU2hvdC9QZXJpb2RpYyBJbnRlcnJ1cHQgRGlzYWJsZQorLy8gRU5VTXM6CisvLyBESVNfVE9fSU5UUiAgICAgICAgICAgICAgVGltZS1vdXQgaW50ZXJydXB0IGFyZSBkaXNhYmxlZAorLy8gRU5fVE9fSU5UUiAgICAgICAgICAgICAgIFRpbWUtb3V0IGludGVycnVwdCBmdW5jdGlvbiBhcyBub3JtYWwKKyNkZWZpbmUgR1BUX1RBTVJfVEFDSU5URCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUFRfVEFNUl9UQUNJTlREX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0lOVERfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFDSU5URF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBHUFRfVEFNUl9UQUNJTlREX0RJU19UT19JTlRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0lOVERfRU5fVE9fSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMV0gVEFQTE8KKy8vCisvLyBHUFRNIFRpbWVyIEEgUFdNIExlZ2FjeSBPcGVyYXRpb24KKy8vCisvLyAwICBMZWdhY3kgb3BlcmF0aW9uIHdpdGggQ0NQIHBpbiBkcml2ZW4gTG93IHdoZW4gdGhlIFRBSUxSCisvLyByZWdpc3RlciBpcyByZWxvYWRlZCBhZnRlciB0aGUgdGltZXIgcmVhY2hlcyAwLgorLy8KKy8vIDEgQ0NQIGlzIGRyaXZlbiBIaWdoIHdoZW4gdGhlIFRBSUxSICByZWdpc3RlciBpcyByZWxvYWRlZCBhZnRlciB0aGUgdGltZXIKKy8vIHJlYWNoZXMgMC4KKy8vCisvLyBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIGluIFBXTSBtb2RlLgorLy8gRU5VTXM6CisvLyBDQ1BfT05fVE8gICAgICAgICAgICAgICAgQ0NQIG91dHB1dCBwaW4gaXMgc2V0IHRvIDEgb24gdGltZS1vdXQKKy8vIExFR0FDWSAgICAgICAgICAgICAgICAgICBMZWdhY3kgb3BlcmF0aW9uCisjZGVmaW5lIEdQVF9UQU1SX1RBUExPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFQTE9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfVEFNUl9UQVBMT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9UQU1SX1RBUExPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX1RBTVJfVEFQTE9fQ0NQX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfVEFNUl9UQVBMT19MRUdBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTBdIFRBTVJTVQorLy8KKy8vIFRpbWVyIEEgTWF0Y2ggUmVnaXN0ZXIgVXBkYXRlIG1vZGUKKy8vCisvLyBUaGlzIGJpdCBkZWZpbmVzIHdoZW4gdGhlIFRBTUFUQ0hSIGFuZCBUQVBSIHJlZ2lzdGVycyBhcmUgdXBkYXRlZC4KKy8vCisvLyBJZiB0aGUgdGltZXIgaXMgZGlzYWJsZWQgKENUTC5UQUVOID0gMCkgd2hlbiB0aGlzIGJpdCBpcyBzZXQsIFRBTUFUQ0hSIGFuZAorLy8gVEFQUiBhcmUgdXBkYXRlZCB3aGVuIHRoZSB0aW1lciBpcyBlbmFibGVkLgorLy8gSWYgdGhlIHRpbWVyIGlzIHN0YWxsZWQgKENUTC5UQVNUQUxMID0gMSkgd2hlbiB0aGlzIGJpdCBpcyBzZXQsIFRBTUFUQ0hSIGFuZAorLy8gVEFQUiBhcmUgdXBkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBiaXQuCisvLyBFTlVNczoKKy8vIFRPVVBEQVRFICAgICAgICAgICAgICAgICBVcGRhdGUgVEFNQVRDSFIgYW5kIFRBUFIsIGlmIHVzZWQsIG9uIHRoZSBuZXh0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS1vdXQuCisvLyBDWUNMRVVQREFURSAgICAgICAgICAgICAgVXBkYXRlIFRBTUFUQ0hSIGFuZCBUQVBSLCBpZiB1c2VkLCBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLgorI2RlZmluZSBHUFRfVEFNUl9UQU1SU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJTVV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUlNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfVEFNUl9UQU1SU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJTVV9UT1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUlNVX0NZQ0xFVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs5XSBUQVBXTUlFCisvLworLy8gR1BUTSBUaW1lciBBIFBXTSBJbnRlcnJ1cHQgRW5hYmxlCisvLyBUaGlzIGJpdCBlbmFibGVzIGludGVycnVwdHMgaW4gUFdNIG1vZGUgb24gcmlzaW5nLCBmYWxsaW5nLCBvciBib3RoIGVkZ2VzIG9mCisvLyB0aGUgQ0NQIG91dHB1dCwgYXMgZGVmaW5lZCBieSB0aGUgQ1RMLlRBRVZFTlQKKy8vIEluIGFkZGl0aW9uLCB3aGVuIHRoaXMgYml0IGlzIHNldCBhbmQgYSBjYXB0dXJlIGV2ZW50IG9jY3VycywgVGltZXIgQQorLy8gYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdHJpZ2dlcnMgdG8gdGhlIERNQSBpZiB0aGUgdHJpZ2dlciBjYXBhYmlsaXR5IGlzCisvLyBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIENUTC5UQU9URSBiaXQgYW5kIHRoZSBETUFFVi5DQUVETUFFTiBiaXQKKy8vIHJlc3BlY3RpdmVseS4KKy8vCisvLyAwIENhcHR1cmUgZXZlbnQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorLy8gMSBDYXB0dXJlIGV2ZW50IGludGVycnVwdCBpcyBlbmFibGVkLgorLy8gVGhpcyBiaXQgaXMgb25seSB2YWxpZCBpbiBQV00gbW9kZS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBpcyBlbmFibGVkLiAgVGhpcyBiaXQgaXMgb25seSB2YWxpZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFBXTSBtb2RlLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgR1BUX1RBTVJfVEFQV01JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfVEFNUl9UQVBXTUlFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9UQU1SX1RBUFdNSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFQV01JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfVEFNUl9UQVBXTUlFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9UQU1SX1RBUFdNSUVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gVEFJTEQKKy8vCisvLyBHUFQgVGltZXIgQSBQV00gSW50ZXJ2YWwgTG9hZCBXcml0ZQorLy8gRU5VTXM6CisvLyBUT1VQREFURSAgICAgICAgICAgICAgICAgVXBkYXRlIHRoZSBUQVIgcmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVEFJTFIgcmVnaXN0ZXIgb24gdGhlIG5leHQgdGltZW91dC4gSWYgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2NhbGVyIGlzIHVzZWQsIHVwZGF0ZSB0aGUgVEFQUyByZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHZhbHVlIGluIHRoZSBUQVBSIHJlZ2lzdGVyIG9uIHRoZSBuZXh0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dC4KKy8vIENZQ0xFVVBEQVRFICAgICAgICAgICAgICBVcGRhdGUgdGhlIFRBUiByZWdpc3RlciB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUQUlMUiByZWdpc3RlciBvbiB0aGUgbmV4dCBjbG9jayBjeWNsZS4gSWYgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlLXNjYWxlciBpcyB1c2VkLCB1cGRhdGUgdGhlIFRBUFMgcmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUgVEFQUiByZWdpc3RlciBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGN5Y2xlLgorI2RlZmluZSBHUFRfVEFNUl9UQUlMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9UQU1SX1RBSUxEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RBTVJfVEFJTERfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfVEFNUl9UQUlMRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQU1SX1RBSUxEX1RPVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFJTERfQ1lDTEVVUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs3XSBUQVNOQVBTCisvLworLy8gR1BUIFRpbWVyIEEgU25hcC1TaG90IE1vZGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIElmIFRpbWVyIEEgaXMgY29uZmlndXJlZCBpbiB0aGUgcGVyaW9kaWMgbW9kZSwgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIGZyZWUtcnVubmluZyB2YWx1ZSBvZiBUaW1lciBBIGlzIGxvYWRlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSB0aW1lLW91dCBldmVudCBpbnRvIHRoZSBHUFQgVGltZXIgQQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIChUQVIpIHJlZ2lzdGVyLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFNuYXAtc2hvdCBtb2RlIGlzIGRpc2FibGVkLgorI2RlZmluZSBHUFRfVEFNUl9UQVNOQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQVF9UQU1SX1RBU05BUFNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgR1BUX1RBTVJfVEFTTkFQU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUFRfVEFNUl9UQVNOQVBTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQVF9UQU1SX1RBU05BUFNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BUX1RBTVJfVEFTTkFQU19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBUQVdPVAorLy8KKy8vIEdQVCBUaW1lciBBIFdhaXQtT24tVHJpZ2dlcgorLy8gRU5VTXM6CisvLyBXQUlUICAgICAgICAgICAgICAgICAgICAgSWYgVGltZXIgQSBpcyBlbmFibGVkIChDVEwuVEFFTiA9IDEpLCBUaW1lciBBIGRvZXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVnaW4gY291bnRpbmcgdW50aWwgaXQgcmVjZWl2ZXMgYSB0cmlnZ2VyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgdGltZXIgaW4gdGhlIHByZXZpb3VzIHBvc2l0aW9uIGluIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRhaXN5IGNoYWluLiBUaGlzIGJpdCBtdXN0IGJlIGNsZWFyIGZvciBHUFQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgMCwgVGltZXIgQS4gVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBmb3IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUtc2hvdCwgcGVyaW9kaWMsIGFuZCBQV00gbW9kZXMKKy8vIE5PV0FJVCAgICAgICAgICAgICAgICAgICBUaW1lciBBIGJlZ2lucyBjb3VudGluZyBhcyBzb29uIGFzIGl0IGlzIGVuYWJsZWQuCisjZGVmaW5lIEdQVF9UQU1SX1RBV09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFXT1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUFRfVEFNUl9UQVdPVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9UQU1SX1RBV09UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BUX1RBTVJfVEFXT1RfV0FJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUFRfVEFNUl9UQVdPVF9OT1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFRBTUlFCisvLworLy8gR1BUIFRpbWVyIEEgTWF0Y2ggSW50ZXJydXB0IEVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBtYXRjaCB2YWx1ZSBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFRBTUFUQ0hSIGlzIHJlYWNoZWQgaW4gdGhlIG9uZS1zaG90IGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZGljIG1vZGVzLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRjaCBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgZm9yIG1hdGNoIGV2ZW50cy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIG91dHB1dCB0cmlnZ2VycyBvbiBtYXRjaCBldmVudHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgcHJldmVudGVkLgorI2RlZmluZSBHUFRfVEFNUl9UQU1JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9UQU1SX1RBTUlFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX1RBTVJfVEFNSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfVEFNUl9UQU1JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9UQU1SX1RBTUlFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX1RBTVJfVEFNSUVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBUQUNESVIKKy8vCisvLyBHUFQgVGltZXIgQSBDb3VudCBEaXJlY3Rpb24KKy8vIEVOVU1zOgorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0aW1lciBjb3VudHMgdXAuIFdoZW4gY291bnRpbmcgdXAsIHRoZSB0aW1lcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0cyBmcm9tIGEgdmFsdWUgb2YgMHgwLgorLy8gRE9XTiAgICAgICAgICAgICAgICAgICAgIFRoZSB0aW1lciBjb3VudHMgZG93bi4KKyNkZWZpbmUgR1BUX1RBTVJfVEFDRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfVEFNUl9UQUNESVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQVF9UQU1SX1RBQ0RJUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX1RBTVJfVEFDRElSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfVEFNUl9UQUNESVJfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9UQU1SX1RBQ0RJUl9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gVEFBTVMKKy8vCisvLyBHUFQgVGltZXIgQSBBbHRlcm5hdGUgTW9kZQorLy8KKy8vIE5vdGU6IFRvIGVuYWJsZSBQV00gbW9kZSwgeW91IG11c3QgYWxzbyBjbGVhciBUQUNNIGFuZCB0aGVuIGNvbmZpZ3VyZSBUQU1SCisvLyBmaWVsZCB0byAweDIuCisvLyBFTlVNczoKKy8vIFBXTSAgICAgICAgICAgICAgICAgICAgICBQV00gbW9kZSBpcyBlbmFibGVkCisvLyBDQVBfQ09NUCAgICAgICAgICAgICAgICAgQ2FwdHVyZS9Db21wYXJlIG1vZGUgaXMgZW5hYmxlZC4KKyNkZWZpbmUgR1BUX1RBTVJfVEFBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUFRfVEFNUl9UQUFNU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQVF9UQU1SX1RBQU1TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BUX1RBTVJfVEFBTVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBHUFRfVEFNUl9UQUFNU19QV00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQVF9UQU1SX1RBQU1TX0NBUF9DT01QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMl0gVEFDTQorLy8KKy8vIEdQVCBUaW1lciBBIENhcHR1cmUgTW9kZQorLy8gRU5VTXM6CisvLyBFREdUSU1FICAgICAgICAgICAgICAgICAgRWRnZS1UaW1lIG1vZGUKKy8vIEVER0NOVCAgICAgICAgICAgICAgICAgICBFZGdlLUNvdW50IG1vZGUKKyNkZWZpbmUgR1BUX1RBTVJfVEFDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfVEFNUl9UQUNNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9UQU1SX1RBQ01fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX1RBTVJfVEFDTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfVEFNUl9UQUNNX0VER1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9UQU1SX1RBQ01fRURHQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzE6MF0gVEFNUgorLy8KKy8vIEdQVCBUaW1lciBBIE1vZGUKKy8vCisvLyAweDAgUmVzZXJ2ZWQKKy8vIDB4MSBPbmUtU2hvdCBUaW1lciBtb2RlCisvLyAweDIgUGVyaW9kaWMgVGltZXIgbW9kZQorLy8gMHgzIENhcHR1cmUgbW9kZQorLy8gVGhlIFRpbWVyIG1vZGUgaXMgYmFzZWQgb24gdGhlIHRpbWVyIGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBieSBiaXRzIDI6MCBpbgorLy8gdGhlIENGRyByZWdpc3RlcgorLy8gRU5VTXM6CisvLyBDQVBUVVJFICAgICAgICAgICAgICAgICAgQ2FwdHVyZSBtb2RlCisvLyBQRVJJT0RJQyAgICAgICAgICAgICAgICAgUGVyaW9kaWMgVGltZXIgbW9kZQorLy8gT05FX1NIT1QgICAgICAgICAgICAgICAgIE9uZS1TaG90IFRpbWVyIG1vZGUKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfVEFNUl9UQU1SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR1BUX1RBTVJfVEFNUl9DQVBUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBHUFRfVEFNUl9UQU1SX1BFUklPRElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9UQU1SX1RBTVJfT05FX1NIT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQk1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFsxNToxM10gVENBQ1QKKy8vCisvLyBUaW1lciBDb21wYXJlIEFjdGlvbiBTZWxlY3QKKy8vIEVOVU1zOgorLy8gQ0xSU0VUX09OX1RPICAgICAgICAgICAgIENsZWFyIENDUCBvdXRwdXQgcGluIGltbWVkaWF0ZWx5IGFuZCBzZXQgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gU0VUQ0xSX09OX1RPICAgICAgICAgICAgIFNldCBDQ1Agb3V0cHV0IHBpbiBpbW1lZGlhdGVseSBhbmQgY2xlYXIgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gQ0xSVE9HX09OX1RPICAgICAgICAgICAgIENsZWFyIENDUCBvdXRwdXQgcGluIGltbWVkaWF0ZWx5IGFuZCB0b2dnbGUgb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lLU91dAorLy8gU0VUVE9HX09OX1RPICAgICAgICAgICAgIFNldCBDQ1Agb3V0cHV0IHBpbiBpbW1lZGlhdGVseSBhbmQgdG9nZ2xlIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZS1PdXQKKy8vIFNFVF9PTl9UTyAgICAgICAgICAgICAgICBTZXQgQ0NQIG91dHB1dCBwaW4gb24gVGltZS1PdXQKKy8vIENMUl9PTl9UTyAgICAgICAgICAgICAgICBDbGVhciBDQ1Agb3V0cHV0IHBpbiBvbiBUaW1lLU91dAorLy8gVE9HX09OX1RPICAgICAgICAgICAgICAgIFRvZ2dsZSBTdGF0ZSBvbiBUaW1lLU91dAorLy8gRElTX0NNUCAgICAgICAgICAgICAgICAgIERpc2FibGUgY29tcGFyZSBvcGVyYXRpb25zCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRTAwMAorI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX0NMUlNFVF9PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEUwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfU0VUQ0xSX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQzAwMAorI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9DTFJUT0dfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBBMDAwCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX1NFVFRPR19PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfU0VUX09OX1RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBHUFRfVEJNUl9UQ0FDVF9DTFJfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQVF9UQk1SX1RDQUNUX1RPR19PTl9UTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVENBQ1RfRElTX0NNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEyXSBUQkNJTlRECisvLworLy8gT25lLVNob3QvUGVyaW9kaWMgSW50ZXJydXB0IE1vZGUKKy8vIEVOVU1zOgorLy8gRElTX1RPX0lOVFIgICAgICAgICAgICAgIE1hc2sgVGltZS1PdXQgSW50ZXJydXB0CisvLyBFTl9UT19JTlRSICAgICAgICAgICAgICAgTm9ybWFsIFRpbWUtT3V0IEludGVycnVwdAorI2RlZmluZSBHUFRfVEJNUl9UQkNJTlREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0lOVERfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgR1BUX1RCTVJfVEJDSU5URF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBHUFRfVEJNUl9UQkNJTlREX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0lOVERfRElTX1RPX0lOVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJDSU5URF9FTl9UT19JTlRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzExXSBUQlBMTworLy8KKy8vIEdQVE0gVGltZXIgQiBQV00gTGVnYWN5IE9wZXJhdGlvbgorLy8KKy8vIDAgIExlZ2FjeSBvcGVyYXRpb24gd2l0aCBDQ1AgcGluIGRyaXZlbiBMb3cgd2hlbiB0aGUgVEJJTFIKKy8vIHJlZ2lzdGVyIGlzIHJlbG9hZGVkIGFmdGVyIHRoZSB0aW1lciByZWFjaGVzIDAuCisvLworLy8gMSBDQ1AgaXMgZHJpdmVuIEhpZ2ggd2hlbiB0aGUgVEJJTFIgIHJlZ2lzdGVyIGlzIHJlbG9hZGVkIGFmdGVyIHRoZSB0aW1lcgorLy8gcmVhY2hlcyAwLgorLy8KKy8vIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgaW4gUFdNIG1vZGUuCisvLyBFTlVNczoKKy8vIENDUF9PTl9UTyAgICAgICAgICAgICAgICBDQ1Agb3V0cHV0IHBpbiBpcyBzZXQgdG8gMSBvbiB0aW1lLW91dAorLy8gTEVHQUNZICAgICAgICAgICAgICAgICAgIExlZ2FjeSBvcGVyYXRpb24KKyNkZWZpbmUgR1BUX1RCTVJfVEJQTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfVEJNUl9UQlBMT19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQVF9UQk1SX1RCUExPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJQTE9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfVEJNUl9UQlBMT19DQ1BfT05fVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9UQk1SX1RCUExPX0xFR0FDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMF0gVEJNUlNVCisvLworLy8gVGltZXIgQiBNYXRjaCBSZWdpc3RlciBVcGRhdGUgbW9kZQorLy8KKy8vIFRoaXMgYml0IGRlZmluZXMgd2hlbiB0aGUgVEJNQVRDSFIgYW5kIFRCUFIgcmVnaXN0ZXJzIGFyZSB1cGRhdGVkCisvLworLy8gSWYgdGhlIHRpbWVyIGlzIGRpc2FibGVkIChDVEwuVEJFTiBpcyBjbGVhcikgd2hlbiB0aGlzIGJpdCBpcyBzZXQsIFRCTUFUQ0hSCisvLyBhbmQgVEJQUiBhcmUgdXBkYXRlZCB3aGVuIHRoZSB0aW1lciBpcyBlbmFibGVkLgorLy8gSWYgdGhlIHRpbWVyIGlzIHN0YWxsZWQgKENUTC5UQlNUQUxMIGlzIHNldCkgd2hlbiB0aGlzIGJpdCBpcyBzZXQsIFRCTUFUQ0hSCisvLyBhbmQgVEJQUiBhcmUgdXBkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBiaXQuCisvLyBFTlVNczoKKy8vIFRPVVBEQVRFICAgICAgICAgICAgICAgICBVcGRhdGUgdGhlIFRCTUFUQ0hSIGFuZCB0aGUgVEJQUiwgaWYgdXNlZCBvbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IHRpbWUtb3V0LgorLy8gQ1lDTEVVUERBVEUgICAgICAgICAgICAgIFVwZGF0ZSBUQk1BVENIUiBhbmQgVEJQUiwgaWYgdXNlZCBvbiB0aGUgbmV4dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLgorI2RlZmluZSBHUFRfVEJNUl9UQk1SU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJTVV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUlNVX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfVEJNUl9UQk1SU1VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJTVV9UT1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUlNVX0NZQ0xFVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs5XSBUQlBXTUlFCisvLworLy8gR1BUTSBUaW1lciBCIFBXTSBJbnRlcnJ1cHQgRW5hYmxlCisvLyBUaGlzIGJpdCBlbmFibGVzIGludGVycnVwdHMgaW4gUFdNIG1vZGUgb24gcmlzaW5nLCBmYWxsaW5nLCBvciBib3RoIGVkZ2VzIG9mCisvLyB0aGUgQ0NQIG91dHB1dCwgYXMgZGVmaW5lZCBieSB0aGUgQ1RMLlRCRVZFTlQKKy8vIEluIGFkZGl0aW9uLCB3aGVuIHRoaXMgYml0IGlzIHNldCBhbmQgYSBjYXB0dXJlIGV2ZW50IG9jY3VycywgVGltZXIgQQorLy8gYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdHJpZ2dlcnMgdG8gdGhlIERNQSBpZiB0aGUgdHJpZ2dlciBjYXBhYmlsaXR5IGlzCisvLyBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIENUTC5UQk9URSBiaXQgYW5kIHRoZSBETUFFVi5DQkVETUFFTiBiaXQKKy8vIHJlc3BlY3RpdmVseS4KKy8vCisvLyAwIENhcHR1cmUgZXZlbnQgaW50ZXJydXB0IGlzIGRpc2FibGVkLgorLy8gMSBDYXB0dXJlIGV2ZW50IGludGVycnVwdCBpcyBlbmFibGVkLgorLy8gVGhpcyBiaXQgaXMgb25seSB2YWxpZCBpbiBQV00gbW9kZS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBpcyBlbmFibGVkLiAgVGhpcyBiaXQgaXMgb25seSB2YWxpZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFBXTSBtb2RlLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgR1BUX1RCTVJfVEJQV01JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfVEJNUl9UQlBXTUlFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9UQk1SX1RCUFdNSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJQV01JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfVEJNUl9UQlBXTUlFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9UQk1SX1RCUFdNSUVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gVEJJTEQKKy8vCisvLyBHUFQgVGltZXIgQiBQV00gSW50ZXJ2YWwgTG9hZCBXcml0ZQorLy8gRU5VTXM6CisvLyBUT1VQREFURSAgICAgICAgICAgICAgICAgVXBkYXRlIHRoZSBUQlIgcmVnaXN0ZXIgd2l0aCB0aGUgdmFsdWUgaW4gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgVEJJTFIgcmVnaXN0ZXIgb24gdGhlIG5leHQgdGltZW91dC4gSWYgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2NhbGVyIGlzIHVzZWQsIHVwZGF0ZSB0aGUgVEJQUyByZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHZhbHVlIGluIHRoZSBUQlBSIHJlZ2lzdGVyIG9uIHRoZSBuZXh0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dC4KKy8vIENZQ0xFVVBEQVRFICAgICAgICAgICAgICBVcGRhdGUgdGhlIFRCUiByZWdpc3RlciB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBUQklMUiByZWdpc3RlciBvbiB0aGUgbmV4dCBjbG9jayBjeWNsZS4gSWYgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2NhbGVyIGlzIHVzZWQsIHVwZGF0ZSB0aGUgVEJQUyByZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHZhbHVlIGluIHRoZSBUQlBSIHJlZ2lzdGVyIG9uIHRoZSBuZXh0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dC4KKyNkZWZpbmUgR1BUX1RCTVJfVEJJTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfVEJNUl9UQklMRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQk1SX1RCSUxEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJJTERfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEJNUl9UQklMRF9UT1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9UQk1SX1RCSUxEX0NZQ0xFVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbN10gVEJTTkFQUworLy8KKy8vIEdQVCBUaW1lciBCIFNuYXAtU2hvdCBNb2RlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBJZiBUaW1lciBCIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIHBlcmlvZGljIG1vZGUKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBTbmFwLXNob3QgbW9kZSBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgR1BUX1RCTVJfVEJTTkFQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBHUFRfVEJNUl9UQlNOQVBTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEdQVF9UQk1SX1RCU05BUFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgR1BUX1RCTVJfVEJTTkFQU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBHUFRfVEJNUl9UQlNOQVBTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQVF9UQk1SX1RCU05BUFNfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNl0gVEJXT1QKKy8vCisvLyBHUFQgVGltZXIgQiBXYWl0LU9uLVRyaWdnZXIKKy8vIEVOVU1zOgorLy8gV0FJVCAgICAgICAgICAgICAgICAgICAgIElmIFRpbWVyIEIgaXMgZW5hYmxlZCAoQ1RMLlRCRU4gaXMgc2V0KSwgVGltZXIgQgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGJlZ2luIGNvdW50aW5nIHVudGlsIGl0IHJlY2VpdmVzIGEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIGZyb20gdGhlIHRpbWVyIGluIHRoZSBwcmV2aW91cyBwb3NpdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkYWlzeSBjaGFpbi4gVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBmb3IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUtc2hvdCwgcGVyaW9kaWMsIGFuZCBQV00gbW9kZXMKKy8vIE5PV0FJVCAgICAgICAgICAgICAgICAgICBUaW1lciBCIGJlZ2lucyBjb3VudGluZyBhcyBzb29uIGFzIGl0IGlzIGVuYWJsZWQuCisjZGVmaW5lIEdQVF9UQk1SX1RCV09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX1RCTVJfVEJXT1RfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBHUFRfVEJNUl9UQldPVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9UQk1SX1RCV09UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BUX1RCTVJfVEJXT1RfV0FJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUFRfVEJNUl9UQldPVF9OT1dBSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFRCTUlFCisvLworLy8gR1BUIFRpbWVyIEIgTWF0Y2ggSW50ZXJydXB0IEVuYWJsZS4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgbWF0Y2ggdmFsdWUgaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgVEJNQVRDSFIgcmVnaXN0ZXIgaXMgcmVhY2hlZCBpbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUtc2hvdCBhbmQgcGVyaW9kaWMgbW9kZXMuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdGNoIGludGVycnVwdCBpcyBkaXNhYmxlZCBmb3IgbWF0Y2ggZXZlbnRzLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgb3V0cHV0IHRyaWdnZXJzIG9uIG1hdGNoIGV2ZW50cworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBwcmV2ZW50ZWQuCisjZGVmaW5lIEdQVF9UQk1SX1RCTUlFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX1RCTVJfVEJNSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUFRfVEJNUl9UQk1JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9UQk1SX1RCTUlFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX1RCTVJfVEJNSUVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfVEJNUl9UQk1JRV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIFRCQ0RJUgorLy8KKy8vIGdyZXAKKy8vIEVOVU1zOgorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0aW1lciBjb3VudHMgdXAuIFdoZW4gY291bnRpbmcgdXAsIHRoZSB0aW1lcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0cyBmcm9tIGEgdmFsdWUgb2YgMHgwLgorLy8gRE9XTiAgICAgICAgICAgICAgICAgICAgIFRoZSB0aW1lciBjb3VudHMgZG93bi4KKyNkZWZpbmUgR1BUX1RCTVJfVEJDRElSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfVEJNUl9UQkNESVJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQVF9UQk1SX1RCQ0RJUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX1RCTVJfVEJDRElSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfVEJNUl9UQkNESVJfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9UQk1SX1RCQ0RJUl9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbM10gVEJBTVMKKy8vCisvLyBHUFQgVGltZXIgQiBBbHRlcm5hdGUgTW9kZQorLy8KKy8vIE5vdGU6IFRvIGVuYWJsZSBQV00gbW9kZSwgeW91IG11c3QgYWxzbyBjbGVhciBUQkNNIGJpdCBhbmQgY29uZmlndXJlIFRCTVIKKy8vIGZpZWxkIHRvIDB4Mi4KKy8vIEVOVU1zOgorLy8gUFdNICAgICAgICAgICAgICAgICAgICAgIFBXTSBtb2RlIGlzIGVuYWJsZWQKKy8vIENBUF9DT01QICAgICAgICAgICAgICAgICBDYXB0dXJlL0NvbXBhcmUgbW9kZSBpcyBlbmFibGVkLgorI2RlZmluZSBHUFRfVEJNUl9UQkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQVF9UQk1SX1RCQU1TX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgR1BUX1RCTVJfVEJBTVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBHUFRfVEJNUl9UQkFNU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEdQVF9UQk1SX1RCQU1TX1BXTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgR1BUX1RCTVJfVEJBTVNfQ0FQX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBUQkNNCisvLworLy8gR1BUIFRpbWVyIEIgQ2FwdHVyZSBNb2RlCisvLyBFTlVNczoKKy8vIEVER1RJTUUgICAgICAgICAgICAgICAgICBFZGdlLVRpbWUgbW9kZQorLy8gRURHQ05UICAgICAgICAgICAgICAgICAgIEVkZ2UtQ291bnQgbW9kZQorI2RlZmluZSBHUFRfVEJNUl9UQkNNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9UQk1SX1RCQ01fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1RCTVJfVEJDTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfVEJNUl9UQkNNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9UQk1SX1RCQ01fRURHVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX1RCTVJfVEJDTV9FREdDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMTowXSBUQk1SCisvLworLy8gR1BUIFRpbWVyIEIgTW9kZQorLy8KKy8vIDB4MCBSZXNlcnZlZAorLy8gMHgxIE9uZS1TaG90IFRpbWVyIG1vZGUKKy8vIDB4MiBQZXJpb2RpYyBUaW1lciBtb2RlCisvLyAweDMgQ2FwdHVyZSBtb2RlCisvLyBUaGUgVGltZXIgbW9kZSBpcyBiYXNlZCBvbiB0aGUgdGltZXIgY29uZmlndXJhdGlvbiBkZWZpbmVkIGJ5IGJpdHMgMjowIGluCisvLyB0aGUgQ0ZHIHJlZ2lzdGVyCisvLyBFTlVNczoKKy8vIENBUFRVUkUgICAgICAgICAgICAgICAgICBDYXB0dXJlIG1vZGUKKy8vIFBFUklPRElDICAgICAgICAgICAgICAgICBQZXJpb2RpYyBUaW1lciBtb2RlCisvLyBPTkVfU0hPVCAgICAgICAgICAgICAgICAgT25lLVNob3QgVGltZXIgbW9kZQorI2RlZmluZSBHUFRfVEJNUl9UQk1SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfVEJNUl9UQk1SX0NBUFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEdQVF9UQk1SX1RCTVJfUEVSSU9ESUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX1RCTVJfVEJNUl9PTkVfU0hPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTRdIFRCUFdNTAorLy8KKy8vIEdQVCBUaW1lciBCIFBXTSBPdXRwdXQgTGV2ZWwKKy8vCisvLyAwOiBPdXRwdXQgaXMgdW5hZmZlY3RlZC4KKy8vIDE6IE91dHB1dCBpcyBpbnZlcnRlZC4KKy8vIEVOVU1zOgorLy8gSU5WRVJURUQgICAgICAgICAgICAgICAgIEludmVydGVkCisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm90IGludmVydGVkCisjZGVmaW5lIEdQVF9DVExfVEJQV01MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgR1BUX0NUTF9UQlBXTUxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBHUFRfQ1RMX1RCUFdNTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdQVF9DVExfVEJQV01MX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgR1BUX0NUTF9UQlBXTUxfSU5WRVJURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBHUFRfQ1RMX1RCUFdNTF9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTE6MTBdIFRCRVZFTlQKKy8vCisvLyBHUFQgVGltZXIgQiBFdmVudCBNb2RlCisvLworLy8gVGhlIHZhbHVlcyBpbiB0aGlzIHJlZ2lzdGVyIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisvLyBWYWx1ZSBEZXNjcmlwdGlvbgorLy8gMHgwIFBvc2l0aXZlIGVkZ2UKKy8vIDB4MSBOZWdhdGl2ZSBlZGdlCisvLyAweDIgUmVzZXJ2ZWQKKy8vIDB4MyBCb3RoIGVkZ2VzCisvLyBOb3RlOiBJZiBQV00gb3V0cHV0IGludmVyc2lvbiBpcyBlbmFibGVkLCBlZGdlIGRldGVjdGlvbiBpbnRlcnJ1cHQKKy8vIGJlaGF2aW9yIGlzIHJldmVyc2VkLiBUaHVzLCBpZiBhIHBvc2l0aXZlLWVkZ2UgaW50ZXJydXB0IHRyaWdnZXIKKy8vIGhhcyBiZWVuIHNldCBhbmQgdGhlIFBXTSBpbnZlcnNpb24gZ2VuZXJhdGVzIGEgcG9zdGl2ZQorLy8gZWRnZSwgbm8gZXZlbnQtdHJpZ2dlciBpbnRlcnJ1cHQgYXNzZXJ0cy4gSW5zdGVhZCwgdGhlIGludGVycnVwdAorLy8gaXMgZ2VuZXJhdGVkIG9uIHRoZSBuZWdhdGl2ZSBlZGdlIG9mIHRoZSBQV00gc2lnbmFsLgorLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgQm90aCBlZGdlcworLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UKKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlCisjZGVmaW5lIEdQVF9DVExfVEJFVkVOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX0NUTF9UQkVWRU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBHUFRfQ1RMX1RCRVZFTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9DVExfVEJFVkVOVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgR1BUX0NUTF9UQkVWRU5UX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfQ1RMX1RCRVZFTlRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzldIFRCU1RBTEwKKy8vCisvLyBHUFQgVGltZXIgQiBTdGFsbCBFbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIEIgZnJlZXplcyBjb3VudGluZyB3aGlsZSB0aGUgcHJvY2Vzc29yIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdGVkIGJ5IHRoZSBkZWJ1Z2dlci4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBUaW1lciBCIGNvbnRpbnVlcyBjb3VudGluZyB3aGlsZSB0aGUgcHJvY2Vzc29yIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdGVkIGJ5IHRoZSBkZWJ1Z2dlci4KKyNkZWZpbmUgR1BUX0NUTF9UQlNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfQ1RMX1RCU1RBTExfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9DVExfVEJTVEFMTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0NUTF9UQlNUQUxMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfQ1RMX1RCU1RBTExfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9DVExfVEJTVEFMTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gVEJFTgorLy8KKy8vIEdQVCBUaW1lciBCIEVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgVGltZXIgQiBpcyBlbmFibGVkIGFuZCBiZWdpbnMgY291bnRpbmcgb3IgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZSBsb2dpYyBpcyBlbmFibGVkIGJhc2VkIG9uIENGRyByZWdpc3Rlci4KKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBUaW1lciBCIGlzIGRpc2FibGVkLgorI2RlZmluZSBHUFRfQ1RMX1RCRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9DVExfVEJFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX0NUTF9UQkVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfQ1RMX1RCRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9DVExfVEJFTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0NUTF9UQkVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs2XSBUQVBXTUwKKy8vCisvLyBHUFQgVGltZXIgQSBQV00gT3V0cHV0IExldmVsCisvLyBFTlVNczoKKy8vIElOVkVSVEVEICAgICAgICAgICAgICAgICBJbnZlcnRlZAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vdCBpbnZlcnRlZAorI2RlZmluZSBHUFRfQ1RMX1RBUFdNTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQVF9DVExfVEFQV01MX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BUX0NUTF9UQVBXTUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBHUFRfQ1RMX1RBUFdNTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEdQVF9DVExfVEFQV01MX0lOVkVSVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX0NUTF9UQVBXTUxfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMzoyXSBUQUVWRU5UCisvLworLy8gR1BUIFRpbWVyIEEgRXZlbnQgTW9kZQorLy8KKy8vIFRoZSB2YWx1ZXMgaW4gdGhpcyByZWdpc3RlciBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgorLy8gVmFsdWUgRGVzY3JpcHRpb24KKy8vIDB4MCBQb3NpdGl2ZSBlZGdlCisvLyAweDEgTmVnYXRpdmUgZWRnZQorLy8gMHgyIFJlc2VydmVkCisvLyAweDMgQm90aCBlZGdlcworLy8gTm90ZTogSWYgUFdNIG91dHB1dCBpbnZlcnNpb24gaXMgZW5hYmxlZCwgZWRnZSBkZXRlY3Rpb24gaW50ZXJydXB0CisvLyBiZWhhdmlvciBpcyByZXZlcnNlZC4gVGh1cywgaWYgYSBwb3NpdGl2ZS1lZGdlIGludGVycnVwdCB0cmlnZ2VyCisvLyBoYXMgYmVlbiBzZXQgYW5kIHRoZSBQV00gaW52ZXJzaW9uIGdlbmVyYXRlcyBhIHBvc3RpdmUKKy8vIGVkZ2UsIG5vIGV2ZW50LXRyaWdnZXIgaW50ZXJydXB0IGFzc2VydHMuIEluc3RlYWQsIHRoZSBpbnRlcnJ1cHQKKy8vIGlzIGdlbmVyYXRlZCBvbiB0aGUgbmVnYXRpdmUgZWRnZSBvZiB0aGUgUFdNIHNpZ25hbC4KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIEJvdGggZWRnZXMKKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZQorI2RlZmluZSBHUFRfQ1RMX1RBRVZFTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9DVExfVEFFVkVOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgR1BUX0NUTF9UQUVWRU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfQ1RMX1RBRVZFTlRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEdQVF9DVExfVEFFVkVOVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0NUTF9UQUVWRU5UX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBUQVNUQUxMCisvLworLy8gR1BUIFRpbWVyIEEgU3RhbGwgRW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBUaW1lciBBIGZyZWV6ZXMgY291bnRpbmcgd2hpbGUgdGhlIHByb2Nlc3NvciBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbHRlZCBieSB0aGUgZGVidWdnZXIuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVGltZXIgQSBjb250aW51ZXMgY291bnRpbmcgd2hpbGUgdGhlIHByb2Nlc3NvciBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbHRlZCBieSB0aGUgZGVidWdnZXIuCisjZGVmaW5lIEdQVF9DVExfVEFTVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX0NUTF9UQVNUQUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUFRfQ1RMX1RBU1RBTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9DVExfVEFTVEFMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX0NUTF9UQVNUQUxMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfQ1RMX1RBU1RBTExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIFRBRU4KKy8vCisvLyBHUFQgVGltZXIgQSBFbmFibGUKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFRpbWVyIEEgaXMgZW5hYmxlZCBhbmQgYmVnaW5zIGNvdW50aW5nIG9yIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmUgbG9naWMgaXMgZW5hYmxlZCBiYXNlZCBvbiB0aGUgQ0ZHCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVGltZXIgQSBpcyBkaXNhYmxlZC4KKyNkZWZpbmUgR1BUX0NUTF9UQUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfQ1RMX1RBRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9DVExfVEFFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0NUTF9UQUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfQ1RMX1RBRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9DVExfVEFFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19TWU5DCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6Nl0gU1lOQzMKKy8vCisvLyBTeW5jaHJvbml6ZSBHUFQgVGltZXIgMy4KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgYm90aCBUaW1lciBBIGFuZCBUaW1lciBCIG9mCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BUMyBpcyB0cmlnZ2VyZWQKKy8vIFRJTUVSQiAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIFRpbWVyIEIgb2YgR1BUMyBpcyB0cmlnZ2VyZWQKKy8vIFRJTUVSQSAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIFRpbWVyIEEgb2YgR1BUMyBpcyB0cmlnZ2VyZWQKKy8vIE5PU1lOQyAgICAgICAgICAgICAgICAgICBObyBTeW5jLiBHUFQzIGlzIG5vdCBhZmZlY3RlZC4KKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfU1lOQ19TWU5DM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzNfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMAorI2RlZmluZSBHUFRfU1lOQ19TWU5DM19USU1FUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMzX1RJTUVSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzNfTk9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTo0XSBTWU5DMgorLy8KKy8vIFN5bmNocm9uaXplIEdQVCBUaW1lciAyLgorLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBib3RoIFRpbWVyIEEgYW5kIFRpbWVyIEIgb2YKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHUFQyIGlzIHRyaWdnZXJlZAorLy8gVElNRVJCICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgVGltZXIgQiBvZiBHUFQyIGlzIHRyaWdnZXJlZAorLy8gVElNRVJBICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgVGltZXIgQSBvZiBHUFQyIGlzIHRyaWdnZXJlZAorLy8gTk9TWU5DICAgICAgICAgICAgICAgICAgIE5vIFN5bmMuIEdQVDIgaXMgbm90IGFmZmVjdGVkLgorI2RlZmluZSBHUFRfU1lOQ19TWU5DMl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfU1lOQ19TWU5DMl9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMyX1RJTUVSQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzJfVElNRVJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfU1lOQ19TWU5DMl9OT1NZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFszOjJdIFNZTkMxCisvLworLy8gU3luY2hyb25pemUgR1BUIFRpbWVyIDEKKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIEEgdGltZW91dCBldmVudCBmb3IgYm90aCBUaW1lciBBIGFuZCBUaW1lciBCIG9mCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BUMSBpcyB0cmlnZ2VyZWQKKy8vIFRJTUVSQiAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIFRpbWVyIEIgb2YgR1BUMSBpcyB0cmlnZ2VyZWQKKy8vIFRJTUVSQSAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIFRpbWVyIEEgb2YgR1BUMSBpcyB0cmlnZ2VyZWQKKy8vIE5PU1lOQyAgICAgICAgICAgICAgICAgICBObyBTeW5jLiBHUFQxIGlzIG5vdCBhZmZlY3RlZC4KKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfU1lOQ19TWU5DMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzFfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBHUFRfU1lOQ19TWU5DMV9USU1FUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEdQVF9TWU5DX1NZTkMxX1RJTUVSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzFfTk9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMTowXSBTWU5DMAorLy8KKy8vIFN5bmNocm9uaXplIEdQVCBUaW1lciAwCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBBIHRpbWVvdXQgZXZlbnQgZm9yIGJvdGggVGltZXIgQSBhbmQgVGltZXIgQiBvZgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdQVDAgaXMgdHJpZ2dlcmVkCisvLyBUSU1FUkIgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBUaW1lciBCIG9mIEdQVDAgaXMgdHJpZ2dlcmVkCisvLyBUSU1FUkEgICAgICAgICAgICAgICAgICAgQSB0aW1lb3V0IGV2ZW50IGZvciBUaW1lciBBIG9mIEdQVDAgaXMgdHJpZ2dlcmVkCisvLyBOT1NZTkMgICAgICAgICAgICAgICAgICAgTm8gU3luYy4gR1BUMCBpcyBub3QgYWZmZWN0ZWQuCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBHUFRfU1lOQ19TWU5DMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMwX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgR1BUX1NZTkNfU1lOQzBfVElNRVJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfU1lOQ19TWU5DMF9USU1FUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9TWU5DX1NZTkMwX05PU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19JTVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEzXSBETUFCSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5ETUFCUklTIGludGVycnVwdCBwcm9wYWdhdGUgdG8KKy8vIE1JUy5ETUFCTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9ETUFCSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfSU1SX0RNQUJJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQVF9JTVJfRE1BQklNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX0lNUl9ETUFCSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBHUFRfSU1SX0RNQUJJTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQVF9JTVJfRE1BQklNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMV0gVEJNSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5UQk1SSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0byBNSVMuVEJNTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9UQk1JTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfSU1SX1RCTUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIEdQVF9JTVJfVEJNSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX0lNUl9UQk1JTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfSU1SX1RCTUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9JTVJfVEJNSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMF0gQ0JFSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5DQkVSSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0byBNSVMuQ0JFTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9DQkVJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfSU1SX0NCRUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEdQVF9JTVJfQ0JFSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgR1BUX0lNUl9DQkVJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBHUFRfSU1SX0NCRUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9JTVJfQ0JFSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOV0gQ0JNSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5DQk1SSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0byBNSVMuQ0JNTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9DQk1JTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfSU1SX0NCTUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9JTVJfQ0JNSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0lNUl9DQk1JTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBHUFRfSU1SX0NCTUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9JTVJfQ0JNSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbOF0gVEJUT0lNCisvLworLy8gRW5hYmxpbmcgdGhpcyBiaXQgd2lsbCBtYWtlIHRoZSBSSVMuVEJUT1JJUyBpbnRlcnJ1cHQgcHJvcGFnYXRlIHRvCisvLyBNSVMuVEJUT01JUworLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEludGVycnVwdAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgSW50ZXJydXB0CisjZGVmaW5lIEdQVF9JTVJfVEJUT0lNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0lNUl9UQlRPSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfSU1SX1RCVE9JTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9JTVJfVEJUT0lNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX0lNUl9UQlRPSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfSU1SX1RCVE9JTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIERNQUFJTQorLy8KKy8vIEVuYWJsaW5nIHRoaXMgYml0IHdpbGwgbWFrZSB0aGUgUklTLkRNQUFSSVMgaW50ZXJydXB0IHByb3BhZ2F0ZSB0bworLy8gTUlTLkRNQUFNSVMKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBHUFRfSU1SX0RNQUFJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9JTVJfRE1BQUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX0lNUl9ETUFBSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfSU1SX0RNQUFJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEdQVF9JTVJfRE1BQUlNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX0lNUl9ETUFBSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBUQU1JTQorLy8KKy8vIEVuYWJsaW5nIHRoaXMgYml0IHdpbGwgbWFrZSB0aGUgUklTLlRBTVJJUyBpbnRlcnJ1cHQgcHJvcGFnYXRlIHRvIE1JUy5UQU1NSVMKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBHUFRfSU1SX1RBTUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9JTVJfVEFNSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX0lNUl9UQU1JTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfSU1SX1RBTUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQVF9JTVJfVEFNSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX0lNUl9UQU1JTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBDQUVJTQorLy8KKy8vIEVuYWJsaW5nIHRoaXMgYml0IHdpbGwgbWFrZSB0aGUgUklTLkNBRVJJUyBpbnRlcnJ1cHQgcHJvcGFnYXRlIHRvIE1JUy5DQUVNSVMKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBHUFRfSU1SX0NBRUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9JTVJfQ0FFSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX0lNUl9DQUVJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfSU1SX0NBRUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9JTVJfQ0FFSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0lNUl9DQUVJTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsxXSBDQU1JTQorLy8KKy8vIEVuYWJsaW5nIHRoaXMgYml0IHdpbGwgbWFrZSB0aGUgUklTLkNBTVJJUyBpbnRlcnJ1cHQgcHJvcGFnYXRlIHRvIE1JUy5DQU1NSVMKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBHUFRfSU1SX0NBTUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9JTVJfQ0FNSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX0lNUl9DQU1JTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfSU1SX0NBTUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQVF9JTVJfQ0FNSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX0lNUl9DQU1JTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBUQVRPSU0KKy8vCisvLyBFbmFibGluZyB0aGlzIGJpdCB3aWxsIG1ha2UgdGhlIFJJUy5UQVRPUklTIGludGVycnVwdCBwcm9wYWdhdGUgdG8KKy8vIE1JUy5UQVRPTUlTCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgR1BUX0lNUl9UQVRPSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfSU1SX1RBVE9JTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9JTVJfVEFUT0lNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0lNUl9UQVRPSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfSU1SX1RBVE9JTV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9JTVJfVEFUT0lNX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19SSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEzXSBETUFCUklTCisvLworLy8gR1BUIFRpbWVyIEIgRE1BIERvbmUgUmF3IEludGVycnVwdCBTdGF0dXMKKy8vCisvLyAwOiBUcmFuc2ZlciBoYXMgbm90IGNvbXBsZXRlZAorLy8gMTogVHJhbnNmZXIgaGFzIGNvbXBsZXRlZAorI2RlZmluZSBHUFRfUklTX0RNQUJSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQVF9SSVNfRE1BQlJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BUX1JJU19ETUFCUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfUklTX0RNQUJSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTFdIFRCTVJJUworLy8KKy8vIEdQVCBUaW1lciBCIE1hdGNoIFJhdyAgSW50ZXJydXB0CisvLworLy8gMDogIFRoZSBtYXRjaCB2YWx1ZSBoYXMgbm90IGJlZW4gcmVhY2hlZAorLy8gMTogIFRoZSBtYXRjaCB2YWx1ZSBpcyByZWFjaGVkLgorLy8KKy8vIFRCTVIuVEJNSUUgaXMgc2V0LCBhbmQgdGhlIG1hdGNoIHZhbHVlcyBpbiBUQk1BVENIUiBhbmQgb3B0aW9uYWxseSBUQlBNUgorLy8gaGF2ZSBiZWVuIHJlYWNoZWQgd2hlbiBjb25maWd1cmVkIGluIG9uZS1zaG90IG9yIHBlcmlvZGljIG1vZGUuCisjZGVmaW5lIEdQVF9SSVNfVEJNUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX1JJU19UQk1SSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfUklTX1RCTVJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9SSVNfVEJNUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQ0JFUklTCisvLworLy8gR1BUIFRpbWVyIEIgQ2FwdHVyZSBNb2RlIEV2ZW50IFJhdyBJbnRlcnJ1cHQKKy8vCisvLyAwOiAgVGhlIGV2ZW50IGhhcyBub3Qgb2NjdXJlZC4KKy8vIDE6ICBUaGUgZXZlbnQgaGFzIG9jY3VyZWQuCisvLworLy8gVGhpcyBpbnRlcnJ1cHQgYXNzZXJ0cyB3aGVuIHRoZSBzdWJ0aW1lciBpcyBjb25maWd1cmVkIGluIElucHV0IEVkZ2UtVGltZQorLy8gbW9kZQorI2RlZmluZSBHUFRfUklTX0NCRVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9SSVNfQ0JFUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX1JJU19DQkVSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfUklTX0NCRVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIENCTVJJUworLy8KKy8vIEdQVCBUaW1lciBCIENhcHR1cmUgTW9kZSBNYXRjaCBSYXcgSW50ZXJydXB0CisvLworLy8gMDogIFRoZSBjYXB0dXJlIG1vZGUgbWF0Y2ggZm9yIFRpbWVyIEIgaGFzIG5vdCBvY2N1cnJlZC4KKy8vIDE6ICBBIGNhcHR1cmUgbW9kZSBtYXRjaCBoYXMgb2NjdXJyZWQgZm9yIFRpbWVyIEIuIFRoaXMgaW50ZXJydXB0CisvLyBhc3NlcnRzIHdoZW4gdGhlIHZhbHVlcyBpbiB0aGUgVEJSIGFuZCBUQlBSCisvLyBtYXRjaCB0aGUgdmFsdWVzIGluIHRoZSBUQk1BVENIUiBhbmQgVEJQTVIKKy8vIHdoZW4gY29uZmlndXJlZCBpbiBJbnB1dCBFZGdlLVRpbWUgbW9kZS4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBJQ0xSLkNCTUNJTlQgYml0LgorI2RlZmluZSBHUFRfUklTX0NCTVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9SSVNfQ0JNUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BUX1JJU19DQk1SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfUklTX0NCTVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFRCVE9SSVMKKy8vCisvLyBHUFQgVGltZXIgQiBUaW1lLW91dCBSYXcgSW50ZXJydXB0CisvLworLy8gMDogIFRpbWVyIEIgaGFzIG5vdCB0aW1lZCBvdXQKKy8vIDE6ICBUaW1lciBCIGhhcyB0aW1lZCBvdXQuCisvLworLy8gVGhpcyBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgd2hlbiBhIG9uZS1zaG90IG9yIHBlcmlvZGljIG1vZGUgdGltZXIgcmVhY2hlcworLy8gaXRzIGNvdW50IGxpbWl0LiBUaGUgY291bnQgbGltaXQgaXMgMCBvciB0aGUgdmFsdWUgbG9hZGVkIGludG8gVEJJTFIsCisvLyBkZXBlbmRpbmcgb24gdGhlIGNvdW50IGRpcmVjdGlvbi4KKyNkZWZpbmUgR1BUX1JJU19UQlRPUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfUklTX1RCVE9SSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9SSVNfVEJUT1JJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX1JJU19UQlRPUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs1XSBETUFBUklTCisvLworLy8gR1BUIFRpbWVyIEEgRE1BIERvbmUgUmF3IEludGVycnVwdCBTdGF0dXMKKy8vCisvLyAwOiBUcmFuc2ZlciBoYXMgbm90IGNvbXBsZXRlZAorLy8gMTogVHJhbnNmZXIgaGFzIGNvbXBsZXRlZAorI2RlZmluZSBHUFRfUklTX0RNQUFSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9SSVNfRE1BQVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX1JJU19ETUFBUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfUklTX0RNQUFSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFRBTVJJUworLy8KKy8vIEdQVCBUaW1lciBBIE1hdGNoIFJhdyAgSW50ZXJydXB0CisvLworLy8gMDogIFRoZSBtYXRjaCB2YWx1ZSBoYXMgbm90IGJlZW4gcmVhY2hlZAorLy8gMTogIFRoZSBtYXRjaCB2YWx1ZSBpcyByZWFjaGVkLgorLy8KKy8vIFRBTVIuVEFNSUUgaXMgc2V0LCBhbmQgdGhlIG1hdGNoIHZhbHVlcyBpbiBUQU1BVENIUiBhbmQgb3B0aW9uYWxseSBUQVBNUgorLy8gaGF2ZSBiZWVuIHJlYWNoZWQgd2hlbiBjb25maWd1cmVkIGluIG9uZS1zaG90IG9yIHBlcmlvZGljIG1vZGUuCisjZGVmaW5lIEdQVF9SSVNfVEFNUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX1JJU19UQU1SSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfUklTX1RBTVJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9SSVNfVEFNUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMl0gQ0FFUklTCisvLworLy8gR1BUIFRpbWVyIEEgQ2FwdHVyZSBNb2RlIEV2ZW50IFJhdyBJbnRlcnJ1cHQKKy8vCisvLyAwOiAgVGhlIGV2ZW50IGhhcyBub3Qgb2NjdXJlZC4KKy8vIDE6ICBUaGUgZXZlbnQgaGFzIG9jY3VyZWQuCisvLworLy8gVGhpcyBpbnRlcnJ1cHQgYXNzZXJ0cyB3aGVuIHRoZSBzdWJ0aW1lciBpcyBjb25maWd1cmVkIGluIElucHV0IEVkZ2UtVGltZQorLy8gbW9kZQorI2RlZmluZSBHUFRfUklTX0NBRVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9SSVNfQ0FFUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgR1BUX1JJU19DQUVSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfUklTX0NBRVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENBTVJJUworLy8KKy8vIEdQVCBUaW1lciBBIENhcHR1cmUgTW9kZSBNYXRjaCBSYXcgSW50ZXJydXB0CisvLworLy8gMDogIFRoZSBjYXB0dXJlIG1vZGUgbWF0Y2ggZm9yIFRpbWVyIEEgaGFzIG5vdCBvY2N1cnJlZC4KKy8vIDE6ICBBIGNhcHR1cmUgbW9kZSBtYXRjaCBoYXMgb2NjdXJyZWQgZm9yIFRpbWVyIEEuIFRoaXMgaW50ZXJydXB0CisvLyBhc3NlcnRzIHdoZW4gdGhlIHZhbHVlcyBpbiB0aGUgVEFSIGFuZCBUQVBSCisvLyBtYXRjaCB0aGUgdmFsdWVzIGluIHRoZSBUQU1BVENIUiBhbmQgVEFQTVIKKy8vIHdoZW4gY29uZmlndXJlZCBpbiBJbnB1dCBFZGdlLVRpbWUgbW9kZS4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBJQ0xSLkNBTUNJTlQgYml0LgorI2RlZmluZSBHUFRfUklTX0NBTVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9SSVNfQ0FNUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX1JJU19DQU1SSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfUklTX0NBTVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFRBVE9SSVMKKy8vCisvLyBHUFQgVGltZXIgQSBUaW1lLW91dCBSYXcgSW50ZXJydXB0CisvLworLy8gMDogIFRpbWVyIEEgaGFzIG5vdCB0aW1lZCBvdXQKKy8vIDE6ICBUaW1lciBBIGhhcyB0aW1lZCBvdXQuCisvLworLy8gVGhpcyBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgd2hlbiBhIG9uZS1zaG90IG9yIHBlcmlvZGljIG1vZGUgdGltZXIgcmVhY2hlcworLy8gaXRzIGNvdW50IGxpbWl0LiBUaGUgY291bnQgbGltaXQgaXMgMCBvciB0aGUgdmFsdWUgbG9hZGVkIGludG8gVEFJTFIsCisvLyBkZXBlbmRpbmcgb24gdGhlIGNvdW50IGRpcmVjdGlvbi4KKyNkZWZpbmUgR1BUX1JJU19UQVRPUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfUklTX1RBVE9SSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9SSVNfVEFUT1JJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX1JJU19UQVRPUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX01JUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTNdIERNQUJNSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuRE1BQlJJUyA9IDEgJiYgSU1SLkRNQUJJTSA9IDEKKyNkZWZpbmUgR1BUX01JU19ETUFCTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfTUlTX0RNQUJNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIEdQVF9NSVNfRE1BQk1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgR1BUX01JU19ETUFCTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzExXSBUQk1NSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuVEJNUklTID0gMSAmJiBJTVIuVEJNSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfVEJNTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX01JU19UQk1NSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfTUlTX1RCTU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9NSVNfVEJNTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQ0JFTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLkNCRVJJUyA9IDEgJiYgSU1SLkNCRUlNID0gMQorI2RlZmluZSBHUFRfTUlTX0NCRU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9NSVNfQ0JFTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX01JU19DQkVNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfTUlTX0NCRU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIENCTU1JUworLy8KKy8vIDA6IE5vIGludGVycnVwdCBvciBpbnRlcnJ1cHQgbm90IGVuYWJsZWQKKy8vIDE6IFJJUy5DQk1SSVMgPSAxICYmIElNUi5DQk1JTSA9IDEKKyNkZWZpbmUgR1BUX01JU19DQk1NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfTUlTX0NCTU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9NSVNfQ0JNTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX01JU19DQk1NSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBUQlRPTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLlRCVE9SSVMgPSAxICYmIElNUi5UQlRPSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfVEJUT01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX01JU19UQlRPTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfTUlTX1RCVE9NSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9NSVNfVEJUT01JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbNV0gRE1BQU1JUworLy8KKy8vIDA6IE5vIGludGVycnVwdCBvciBpbnRlcnJ1cHQgbm90IGVuYWJsZWQKKy8vIDE6IFJJUy5ETUFBUklTID0gMSAmJiBJTVIuRE1BQUlNID0gMQorI2RlZmluZSBHUFRfTUlTX0RNQUFNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9NSVNfRE1BQU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR1BUX01JU19ETUFBTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBHUFRfTUlTX0RNQUFNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFRBTU1JUworLy8KKy8vIDA6IE5vIGludGVycnVwdCBvciBpbnRlcnJ1cHQgbm90IGVuYWJsZWQKKy8vIDE6IFJJUy5UQU1SSVMgPSAxICYmIElNUi5UQU1JTSA9IDEKKyNkZWZpbmUgR1BUX01JU19UQU1NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfTUlTX1RBTU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEdQVF9NSVNfVEFNTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX01JU19UQU1NSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsyXSBDQUVNSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuQ0FFUklTID0gMSAmJiBJTVIuQ0FFSU0gPSAxCisjZGVmaW5lIEdQVF9NSVNfQ0FFTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX01JU19DQUVNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfTUlTX0NBRU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9NSVNfQ0FFTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQ0FNTUlTCisvLworLy8gMDogTm8gaW50ZXJydXB0IG9yIGludGVycnVwdCBub3QgZW5hYmxlZAorLy8gMTogUklTLkNBTVJJUyA9IDEgJiYgSU1SLkNBTUlNID0gMQorI2RlZmluZSBHUFRfTUlTX0NBTU1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9NSVNfQ0FNTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BUX01JU19DQU1NSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHUFRfTUlTX0NBTU1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFRBVE9NSVMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgb3IgaW50ZXJydXB0IG5vdCBlbmFibGVkCisvLyAxOiBSSVMuVEFUT1JJUyA9IDEgJiYgSU1SLlRBVE9JTSA9IDEKKyNkZWZpbmUgR1BUX01JU19UQVRPTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfTUlTX1RBVE9NSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9NSVNfVEFUT01JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX01JU19UQVRPTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX0lDTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzEzXSBETUFCSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5ETUFCUklTIGFuZCBNSVMuRE1BQk1JUworI2RlZmluZSBHUFRfSUNMUl9ETUFCSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEdQVF9JQ0xSX0RNQUJJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgR1BUX0lDTFJfRE1BQklOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBHUFRfSUNMUl9ETUFCSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTFdIFRCTUNJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLlRCTVJJUyBhbmQgTUlTLlRCTU1JUworI2RlZmluZSBHUFRfSUNMUl9UQk1DSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9JQ0xSX1RCTUNJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgR1BUX0lDTFJfVEJNQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBHUFRfSUNMUl9UQk1DSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIENCRUNJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLkNCRVJJUyBhbmQgTUlTLkNCRU1JUworI2RlZmluZSBHUFRfSUNMUl9DQkVDSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9JQ0xSX0NCRUNJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX0lDTFJfQ0JFQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfSUNMUl9DQkVDSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIENCTUNJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLkNCTVJJUyBhbmQgTUlTLkNCTU1JUworI2RlZmluZSBHUFRfSUNMUl9DQk1DSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEdQVF9JQ0xSX0NCTUNJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgR1BUX0lDTFJfQ0JNQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfSUNMUl9DQk1DSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFRCVE9DSU5UCisvLworLy8gMDogRG8gbm90aGluZy4KKy8vIDE6IENsZWFyIFJJUy5UQlRPUklTIGFuZCBNSVMuVEJUT01JUworI2RlZmluZSBHUFRfSUNMUl9UQlRPQ0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEdQVF9JQ0xSX1RCVE9DSU5UX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX0lDTFJfVEJUT0NJTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfSUNMUl9UQlRPQ0lOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzVdIERNQUFJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLkRNQUFSSVMgYW5kIE1JUy5ETUFBTUlTCisjZGVmaW5lIEdQVF9JQ0xSX0RNQUFJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BUX0lDTFJfRE1BQUlOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBHUFRfSUNMUl9ETUFBSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEdQVF9JQ0xSX0RNQUFJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gVEFNQ0lOVAorLy8KKy8vIDA6IERvIG5vdGhpbmcuCisvLyAxOiBDbGVhciBSSVMuVEFNUklTIGFuZCBNSVMuVEFNTUlTCisjZGVmaW5lIEdQVF9JQ0xSX1RBTUNJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgR1BUX0lDTFJfVEFNQ0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBHUFRfSUNMUl9UQU1DSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9JQ0xSX1RBTUNJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMl0gQ0FFQ0lOVAorLy8KKy8vIDA6IERvIG5vdGhpbmcuCisvLyAxOiBDbGVhciBSSVMuQ0FFUklTIGFuZCBNSVMuQ0FFTUlTCisjZGVmaW5lIEdQVF9JQ0xSX0NBRUNJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0lDTFJfQ0FFQ0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBHUFRfSUNMUl9DQUVDSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEdQVF9JQ0xSX0NBRUNJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gQ0FNQ0lOVAorLy8KKy8vIDA6IERvIG5vdGhpbmcuCisvLyAxOiBDbGVhciBSSVMuQ0FNUklTIGFuZCBNSVMuQ0FNTUlTCisjZGVmaW5lIEdQVF9JQ0xSX0NBTUNJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX0lDTFJfQ0FNQ0lOVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUFRfSUNMUl9DQU1DSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9JQ0xSX0NBTUNJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVEFUT0NJTlQKKy8vCisvLyAwOiBEbyBub3RoaW5nLgorLy8gMTogQ2xlYXIgUklTLlRBVE9SSVMgYW5kIE1JUy5UQVRPTUlTCisjZGVmaW5lIEdQVF9JQ0xSX1RBVE9DSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0lDTFJfVEFUT0NJTlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfSUNMUl9UQVRPQ0lOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9JQ0xSX1RBVE9DSU5UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQUlMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRBSUxSCisvLworLy8gR1BUIFRpbWVyIEEgSW50ZXJ2YWwgTG9hZCAgUmVnaXN0ZXIKKy8vCisvLyBXcml0aW5nIHRoaXMgZmllbGQgbG9hZHMgdGhlIGNvdW50ZXIgZm9yIFRpbWVyIEEuIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50CisvLyB2YWx1ZSBvZiBUQUlMUi4KKyNkZWZpbmUgR1BUX1RBSUxSX1RBSUxSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBHUFRfVEFJTFJfVEFJTFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEdQVF9UQUlMUl9UQUlMUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQklMUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRCSUxSCisvLworLy8gR1BUIFRpbWVyIEIgSW50ZXJ2YWwgTG9hZCAgUmVnaXN0ZXIKKy8vCisvLyBXcml0aW5nIHRoaXMgZmllbGQgbG9hZHMgdGhlIGNvdW50ZXIgZm9yIFRpbWVyIEIuIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50CisvLyB2YWx1ZSBvZiBUQklMUi4KKyNkZWZpbmUgR1BUX1RCSUxSX1RCSUxSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBHUFRfVEJJTFJfVEJJTFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEdQVF9UQklMUl9UQklMUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQU1BVENIUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRBTUFUQ0hSCisvLworLy8gR1BUIFRpbWVyIEEgTWF0Y2ggUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX1RBTUFUQ0hSX1RBTUFUQ0hSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBHUFRfVEFNQVRDSFJfVEFNQVRDSFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEdQVF9UQU1BVENIUl9UQU1BVENIUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQk1BVENIUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFRCTUFUQ0hSCisvLworLy8gR1BUIFRpbWVyIEIgTWF0Y2ggUmVnaXN0ZXIKKyNkZWZpbmUgR1BUX1RCTUFUQ0hSX1RCTUFUQ0hSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBHUFRfVEJNQVRDSFJfVEJNQVRDSFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEdQVF9UQk1BVENIUl9UQk1BVENIUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQVBSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVEFQU1IKKy8vCisvLyBUaW1lciBBIFByZS1zY2FsZS4KKy8vCisvLyBQcmVzY2FsZXIgcmF0aW8gaW4gb25lLXNob3QgYW5kIHBlcmlvZGljIGNvdW50IG1vZGUgaXMgVEFQU1IgKyAxLCB0aGF0IGlzOgorLy8KKy8vIDA6IFByZXNjYWxlciByYXRpbyA9IDEKKy8vIDE6IFByZXNjYWxlciByYXRpbyA9IDIKKy8vIDI6IFByZXNjYWxlciByYXRpbyA9IDMKKy8vIC4uLgorLy8gMjU1OiBQcmVzY2FsZXIgcmF0aW8gPSAyNTYKKyNkZWZpbmUgR1BUX1RBUFJfVEFQU1JfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEFQUl9UQVBTUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQVBSX1RBUFNSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQlBSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVEJQU1IKKy8vCisvLyBUaW1lciBCIFByZS1zY2FsZS4KKy8vCisvLyBQcmVzY2FsZSByYXRpbyBpbiBvbmUtc2hvdCBhbmQgcGVyaW9kaWMgY291bnQgbW9kZSBpcyBUQlBTUiArIDEsIHRoYXQgaXM6CisvLworLy8gMDogUHJlc2NhbGVyIHJhdGlvID0gMQorLy8gMTogUHJlc2NhbGVyIHJhdGlvID0gMgorLy8gMjogUHJlc2NhbGVyIHJhdGlvID0gMworLy8gLi4uCisvLyAyNTU6IFByZXNjYWxlciByYXRpbyA9IDI1NgorI2RlZmluZSBHUFRfVEJQUl9UQlBTUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQlBSX1RCUFNSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgR1BUX1RCUFJfVEJQU1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RBUE1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVEFQU01SCisvLworLy8gR1BUIFRpbWVyIEEgUHJlLXNjYWxlIE1hdGNoLiAgSW4gMTYgYml0IG1vZGUgdGhpcyBmaWVsZCBob2xkcyBiaXRzIDIzIHRvIDE2LgorI2RlZmluZSBHUFRfVEFQTVJfVEFQU01SX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQVBNUl9UQVBTTVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgR1BUX1RBUE1SX1RBUFNNUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RCUE1SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gVEJQU01SCisvLworLy8gR1BUIFRpbWVyIEIgUHJlLXNjYWxlIE1hdGNoIFJlZ2lzdGVyLiAgSW4gMTYgYml0IG1vZGUgdGhpcyBmaWVsZCBob2xkcyBiaXRzCisvLyAyMyB0byAxNi4KKyNkZWZpbmUgR1BUX1RCUE1SX1RCUFNNUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEJQTVJfVEJQU01SX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQlBNUl9UQlBTTVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBUQVIKKy8vCisvLyBHUFQgVGltZXIgQSBSZWdpc3RlcgorLy8KKy8vIEJhc2VkIG9uIHRoZSB2YWx1ZSBpbiB0aGUgcmVnaXN0ZXIgZmllbGQgVEFNUi5UQUlMRCwgdGhpcyByZWdpc3RlciBpcworLy8gdXBkYXRlZCB3aXRoIHRoZSB2YWx1ZSBmcm9tIFRBSUxSIHJlZ2lzdGVyIGVpdGhlciBvbiB0aGUgbmV4dCBjeWNsZSBvciBvbgorLy8gdGhlIG5leHQgdGltZW91dC4KKy8vCisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgVGltZXIgQSBDb3VudCBSZWdpc3RlciwgaW4gYWxsIGNhc2VzCisvLyBleGNlcHQgZm9yIElucHV0IEVkZ2UgY291bnQgYW5kIFRpbWVyIG1vZGVzLgorLy8gSW4gdGhlIElucHV0IEVkZ2UgQ291bnQgTW9kZSwgdGhpcyByZWdpc3RlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGVkZ2VzCisvLyB0aGF0IGhhdmUgb2NjdXJyZWQuIEluIHRoZSBJbnB1dCBFZGdlIFRpbWUgbW9kZSwgdGhpcyByZWdpc3RlciBjb250YWlucyB0aGUKKy8vIHRpbWUgYXQgd2hpY2ggdGhlIGxhc3QgZWRnZSBldmVudCB0b29rIHBsYWNlLgorI2RlZmluZSBHUFRfVEFSX1RBUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEdQVF9UQVJfVEFSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgR1BUX1RBUl9UQVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RCUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFRCUgorLy8KKy8vIEdQVCBUaW1lciBCIFJlZ2lzdGVyCisvLworLy8gQmFzZWQgb24gdGhlIHZhbHVlIGluIHRoZSByZWdpc3RlciBmaWVsZCBUQk1SLlRCSUxELCB0aGlzIHJlZ2lzdGVyIGlzCisvLyB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIGZyb20gVEJJTFIgcmVnaXN0ZXIgZWl0aGVyIG9uIHRoZSBuZXh0IGN5Y2xlIG9yIG9uCisvLyB0aGUgbmV4dCB0aW1lb3V0LgorLy8KKy8vIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBUaW1lciBCIENvdW50IFJlZ2lzdGVyLCBpbiBhbGwgY2FzZXMKKy8vIGV4Y2VwdCBmb3IgSW5wdXQgRWRnZSBjb3VudCBhbmQgVGltZXIgbW9kZXMuCisvLyBJbiB0aGUgSW5wdXQgRWRnZSBDb3VudCBNb2RlLCB0aGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgZWRnZXMKKy8vIHRoYXQgaGF2ZSBvY2N1cnJlZC4gSW4gdGhlIElucHV0IEVkZ2UgVGltZSBtb2RlLCB0aGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZQorLy8gdGltZSBhdCB3aGljaCB0aGUgbGFzdCBlZGdlIGV2ZW50IHRvb2sgcGxhY2UuCisjZGVmaW5lIEdQVF9UQlJfVEJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgR1BUX1RCUl9UQlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBHUFRfVEJSX1RCUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEFWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVEFWCisvLworLy8gR1BUIFRpbWVyIEEgUmVnaXN0ZXIKKy8vIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50LCBmcmVlLXJ1bm5pbmcgdmFsdWUgb2YgVGltZXIgQSBpbiBhbGwgbW9kZXMuCisvLyBXaGVuIHdyaXR0ZW4sIHRoZSB2YWx1ZSB3cml0dGVuIGludG8gdGhpcyByZWdpc3RlciBpcyBsb2FkZWQgaW50byB0aGUKKy8vIFRBUiByZWdpc3RlciBvbiB0aGUgbmV4dCBjbG9jayBjeWNsZS4KKy8vIE5vdGU6IEluIDE2LWJpdCBtb2RlLCBvbmx5IHRoZSBsb3dlciAxNi1iaXRzIG9mIHRoaXMKKy8vIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuIHdpdGggYSBuZXcgdmFsdWUuIFdyaXRlcyB0byB0aGUgcHJlc2NhbGVyIGJpdHMgaGF2ZQorLy8gbm8gZWZmZWN0CisjZGVmaW5lIEdQVF9UQVZfVEFWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgR1BUX1RBVl9UQVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBHUFRfVEFWX1RBVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVEJWCisvLworLy8gR1BUIFRpbWVyIEIgUmVnaXN0ZXIKKy8vIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50LCBmcmVlLXJ1bm5pbmcgdmFsdWUgb2YgVGltZXIgQiBpbiBhbGwgbW9kZXMuCisvLyBXaGVuIHdyaXR0ZW4sIHRoZSB2YWx1ZSB3cml0dGVuIGludG8gdGhpcyByZWdpc3RlciBpcyBsb2FkZWQgaW50byB0aGUKKy8vIFRCUiByZWdpc3RlciBvbiB0aGUgbmV4dCBjbG9jayBjeWNsZS4KKy8vIE5vdGU6IEluIDE2LWJpdCBtb2RlLCBvbmx5IHRoZSBsb3dlciAxNi1iaXRzIG9mIHRoaXMKKy8vIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuIHdpdGggYSBuZXcgdmFsdWUuIFdyaXRlcyB0byB0aGUgcHJlc2NhbGVyIGJpdHMgaGF2ZQorLy8gbm8gZWZmZWN0CisjZGVmaW5lIEdQVF9UQlZfVEJWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgR1BUX1RCVl9UQlZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBHUFRfVEJWX1RCVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEFQUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFBTUworLy8KKy8vIEdQVCBUaW1lciBBIFByZS1zY2FsZXIKKyNkZWZpbmUgR1BUX1RBUFNfUFNTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEFQU19QU1NfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQVBTX1BTU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19UQlBTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gUFNTCisvLworLy8gR1BUIFRpbWVyIEIgUHJlLXNjYWxlcgorI2RlZmluZSBHUFRfVEJQU19QU1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9UQlBTX1BTU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgR1BUX1RCUFNfUFNTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX1RBUFYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBQU1YKKy8vCisvLyBHUFQgVGltZXIgQSBQcmUtc2NhbGVyIFZhbHVlCisjZGVmaW5lIEdQVF9UQVBWX1BTVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgR1BUX1RBUFZfUFNWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBHUFRfVEFQVl9QU1ZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogR1BUX09fVEJQVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFBTVgorLy8KKy8vIEdQVCBUaW1lciBCIFByZS1zY2FsZXIgVmFsdWUKKyNkZWZpbmUgR1BUX1RCUFZfUFNWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBHUFRfVEJQVl9QU1ZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEdQVF9UQlBWX1BTVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19ETUFFVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMTFdIFRCTURNQUVOCisvLworLy8gR1BUIFRpbWVyIEIgTWF0Y2ggRE1BIFRyaWdnZXIgRW5hYmxlCisjZGVmaW5lIEdQVF9ETUFFVl9UQk1ETUFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgR1BUX0RNQUVWX1RCTURNQUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBHUFRfRE1BRVZfVEJNRE1BRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEdQVF9ETUFFVl9UQk1ETUFFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gQ0JFRE1BRU4KKy8vCisvLyBHUFQgVGltZXIgQiBDYXB0dXJlIEV2ZW50IERNQSBUcmlnZ2VyIEVuYWJsZQorI2RlZmluZSBHUFRfRE1BRVZfQ0JFRE1BRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEdQVF9ETUFFVl9DQkVETUFFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgR1BUX0RNQUVWX0NCRURNQUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHUFRfRE1BRVZfQ0JFRE1BRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIENCTURNQUVOCisvLworLy8gR1BUIFRpbWVyIEIgQ2FwdHVyZSBNYXRjaCBETUEgVHJpZ2dlciBFbmFibGUKKyNkZWZpbmUgR1BUX0RNQUVWX0NCTURNQUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBHUFRfRE1BRVZfQ0JNRE1BRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEdQVF9ETUFFVl9DQk1ETUFFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BUX0RNQUVWX0NCTURNQUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBUQlRPRE1BRU4KKy8vCisvLyBHUFQgVGltZXIgQiBUaW1lLU91dCBETUEgVHJpZ2dlciBFbmFibGUKKyNkZWZpbmUgR1BUX0RNQUVWX1RCVE9ETUFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHUFRfRE1BRVZfVEJUT0RNQUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEdQVF9ETUFFVl9UQlRPRE1BRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR1BUX0RNQUVWX1RCVE9ETUFFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs0XSBUQU1ETUFFTgorLy8KKy8vIEdQVCBUaW1lciBBIE1hdGNoIERNQSBUcmlnZ2VyIEVuYWJsZQorI2RlZmluZSBHUFRfRE1BRVZfVEFNRE1BRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEdQVF9ETUFFVl9UQU1ETUFFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgR1BUX0RNQUVWX1RBTURNQUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBHUFRfRE1BRVZfVEFNRE1BRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzJdIENBRURNQUVOCisvLworLy8gR1BUIFRpbWVyIEEgQ2FwdHVyZSBFdmVudCBETUEgVHJpZ2dlciBFbmFibGUKKyNkZWZpbmUgR1BUX0RNQUVWX0NBRURNQUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBHUFRfRE1BRVZfQ0FFRE1BRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEdQVF9ETUFFVl9DQUVETUFFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgR1BUX0RNQUVWX0NBRURNQUVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDQU1ETUFFTgorLy8KKy8vIEdQVCBUaW1lciBBIENhcHR1cmUgTWF0Y2ggRE1BIFRyaWdnZXIgRW5hYmxlCisjZGVmaW5lIEdQVF9ETUFFVl9DQU1ETUFFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgR1BUX0RNQUVWX0NBTURNQUVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUFRfRE1BRVZfQ0FNRE1BRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEdQVF9ETUFFVl9DQU1ETUFFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVEFUT0RNQUVOCisvLworLy8gR1BUIFRpbWVyIEEgVGltZS1PdXQgRE1BIFRyaWdnZXIgRW5hYmxlCisjZGVmaW5lIEdQVF9ETUFFVl9UQVRPRE1BRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0RNQUVWX1RBVE9ETUFFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHUFRfRE1BRVZfVEFUT0RNQUVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdQVF9ETUFFVl9UQVRPRE1BRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBHUFRfT19WRVJTSU9OCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkVSU0lPTgorLy8KKy8vIFRpbWVyIFJldmlzaW9uLgorI2RlZmluZSBHUFRfVkVSU0lPTl9WRVJTSU9OX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEdQVF9WRVJTSU9OX1ZFUlNJT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgR1BUX1ZFUlNJT05fVkVSU0lPTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEdQVF9PX0FORENDUAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENDUF9BTkRfRU4KKy8vCisvLyBFbmFibGVzIEFORCBvcGVyYXRpb24gb2YgdGhlIENDUCBvdXRwdXRzIGZvciB0aW1lcnMgQSBhbmQgQi4KKy8vCisvLyAwIDogUFdNIG91dHB1dHMgb2YgVGltZXIgQSBhbmQgVGltZXIgQiBhcmUgdGhlIGludGVybmFsIGdlbmVyYXRlZCBQV00KKy8vIHNpZ25hbHMgb2YgdGhlIHJlc3BlY3RpdmUgdGltZXJzLgorLy8gMSA6IFBXTSBvdXRwdXQgb2YgVGltZXIgQSBpcyBBTkRlZCB2ZXJzaW9uIG9mIFRpbWVyIEEgYW5kIFRpbWVyIEIgUFdNCisvLyBzaWduYWxzIGFuZCBUaW1lciBCIFBXTSBvdXB1dCBpcyBUaW1lciBCIFBXTSBzaWduYWwgb25seS4KKyNkZWZpbmUgR1BUX0FORENDUF9DQ1BfQU5EX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHUFRfQU5EQ0NQX0NDUF9BTkRfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQVF9BTkRDQ1BfQ0NQX0FORF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR1BUX0FORENDUF9DQ1BfQU5EX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisKKyNlbmRpZiAvLyBfX0dQVF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pMmMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzEyNWMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pMmMuaApAQCAtMCwwICsxLDcyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X2kyY19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19JMkNfSF9fCisjZGVmaW5lIF9fSFdfSTJDX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIEkyQyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBTbGF2ZSBPd24gQWRkcmVzcworI2RlZmluZSBJMkNfT19TT0FSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIFNsYXZlIFN0YXR1cworI2RlZmluZSBJMkNfT19TU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisKKy8vIFNsYXZlIENvbnRyb2wKKyNkZWZpbmUgSTJDX09fU0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBTbGF2ZSBEYXRhCisjZGVmaW5lIEkyQ19PX1NEUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gU2xhdmUgSW50ZXJydXB0IE1hc2sKKyNkZWZpbmUgSTJDX09fU0lNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBTbGF2ZSBSYXcgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBJMkNfT19TUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIFNsYXZlIE1hc2tlZCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEkyQ19PX1NNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gU2xhdmUgSW50ZXJydXB0IENsZWFyCisjZGVmaW5lIEkyQ19PX1NJQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gTWFzdGVyIFNhbHZlIEFkZHJlc3MKKyNkZWZpbmUgSTJDX09fTVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorCisvLyBNYXN0ZXIgU3RhdHVzCisjZGVmaW5lIEkyQ19PX01TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDQKKworLy8gTWFzdGVyIENvbnRyb2wKKyNkZWZpbmUgSTJDX09fTUNUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwNAorCisvLyBNYXN0ZXIgRGF0YQorI2RlZmluZSBJMkNfT19NRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODA4CisKKy8vIEkyQyBNYXN0ZXIgVGltZXIgUGVyaW9kCisjZGVmaW5lIEkyQ19PX01UUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MEMKKworLy8gTWFzdGVyIEludGVycnVwdCBNYXNrCisjZGVmaW5lIEkyQ19PX01JTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MTAKKworLy8gTWFzdGVyIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEkyQ19PX01SSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MTQKKworLy8gTWFzdGVyIE1hc2tlZCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEkyQ19PX01NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MTgKKworLy8gTWFzdGVyIEludGVycnVwdCBDbGVhcgorI2RlZmluZSBJMkNfT19NSUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODFDCisKKy8vIE1hc3RlciBDb25maWd1cmF0aW9uCisjZGVmaW5lIEkyQ19PX01DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19TT0FSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzY6MF0gT0FSCisvLworLy8gSTJDIHNsYXZlIG93biBhZGRyZXNzCisvLyBUaGlzIGZpZWxkIHNwZWNpZmllcyBiaXRzIGE2IHRocm91Z2ggYTAgb2YgdGhlIHNsYXZlIGFkZHJlc3MuCisjZGVmaW5lIEkyQ19TT0FSX09BUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSTJDX1NPQVJfT0FSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBJMkNfU09BUl9PQVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fU1NUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBGQlIKKy8vCisvLyBGaXJzdCBieXRlIHJlY2VpdmVkCisvLworLy8gMDogVGhlIGZpcnN0IGJ5dGUgaGFzIG5vdCBiZWVuIHJlY2VpdmVkLgorLy8gMTogVGhlIGZpcnN0IGJ5dGUgZm9sbG93aW5nIHRoZSBzbGF2ZSdzIG93biBhZGRyZXNzIGhhcyBiZWVuIHJlY2VpdmVkLgorLy8KKy8vIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgUlJFUSBiaXQgaXMgc2V0IGFuZCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQKKy8vIHdoZW4gZGF0YSBoYXMgYmVlbiByZWFkIGZyb20gdGhlIFNEUiByZWdpc3Rlci4KKy8vIE5vdGU6IFRoaXMgYml0IGlzIG5vdCB1c2VkIGZvciBzbGF2ZSB0cmFuc21pdCBvcGVyYXRpb25zLgorI2RlZmluZSBJMkNfU1NUQVRfRkJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TU1RBVF9GQlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJDX1NTVEFUX0ZCUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU1NUQVRfRkJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFRSRVEKKy8vCisvLyBUcmFuc21pdCByZXF1ZXN0CisvLworLy8gMDogTm8gb3V0c3RhbmRpbmcgdHJhbnNtaXQgcmVxdWVzdC4KKy8vIDE6IFRoZSBJMkMgY29udHJvbGxlciBoYXMgYmVlbiBhZGRyZXNzZWQgYXMgYSBzbGF2ZSB0cmFuc21pdHRlciBhbmQgaXMgdXNpbmcKKy8vIGNsb2NrIHN0cmV0Y2hpbmcgdG8gZGVsYXkgdGhlIG1hc3RlciB1bnRpbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIFNEUgorLy8gcmVnaXN0ZXIuCisjZGVmaW5lIEkyQ19TU1RBVF9UUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NTVEFUX1RSRVFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfU1NUQVRfVFJFUV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TU1RBVF9UUkVRX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUlJFUQorLy8KKy8vIFJlY2VpdmUgcmVxdWVzdAorLy8KKy8vIDA6IE5vIG91dHN0YW5kaW5nIHJlY2VpdmUgZGF0YQorLy8gMTogVGhlIEkyQyBjb250cm9sbGVyIGhhcyBvdXRzdGFuZGluZyByZWNlaXZlIGRhdGEgZnJvbSB0aGUgSTJDIG1hc3RlciBhbmQKKy8vIGlzIHVzaW5nIGNsb2NrIHN0cmV0Y2hpbmcgdG8gZGVsYXkgdGhlIG1hc3RlciB1bnRpbCBkYXRhIGhhcyBiZWVuIHJlYWQgZnJvbQorLy8gdGhlIFNEUiByZWdpc3Rlci4KKyNkZWZpbmUgSTJDX1NTVEFUX1JSRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU1NUQVRfUlJFUV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19TU1RBVF9SUkVRX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NTVEFUX1JSRVFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBEQQorLy8KKy8vIERldmljZSBhY3RpdmUKKy8vCisvLyAwOiBEaXNhYmxlcyB0aGUgSTJDIHNsYXZlIG9wZXJhdGlvbgorLy8gMTogRW5hYmxlcyB0aGUgSTJDIHNsYXZlIG9wZXJhdGlvbgorI2RlZmluZSBJMkNfU0NUTF9EQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19TQ1RMX0RBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX1NDVExfREFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU0NUTF9EQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fU0RSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gREFUQQorLy8KKy8vIERhdGEgZm9yIHRyYW5zZmVyCisvLyBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0cmFuc2ZlciBkdXJpbmcgYSBzbGF2ZSByZWNlaXZlIG9yIHRyYW5zbWl0CisvLyBvcGVyYXRpb24uICBXaGVuIHdyaXR0ZW4gdGhlIHJlZ2lzdGVyIGRhdGEgaXMgdXNlZCBhcyB0cmFuc21pdCBkYXRhLiAgV2hlbgorLy8gcmVhZCwgdGhpcyByZWdpc3RlciByZXR1cm5zIHRoZSBsYXN0IGRhdGEgcmVjZWl2ZWQuCisvLyBEYXRhIGlzIHN0b3JlZCB1bnRpbCBuZXh0IHVwZGF0ZSwgZWl0aGVyIGJ5IGEgc3lzdGVtIHdyaXRlIGZvciB0cmFuc21pdCBvcgorLy8gYnkgYW4gZXh0ZXJuYWwgbWFzdGVyIGZvciByZWNlaXZlLgorI2RlZmluZSBJMkNfU0RSX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyQ19TRFJfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgSTJDX1NEUl9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NJTVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBTVE9QSU0KKy8vCisvLyBTdG9wIGNvbmRpdGlvbiBpbnRlcnJ1cHQgbWFzaworLy8KKy8vIDA6IFRoZSBTUklTLlNUT1BSSVMgaW50ZXJydXB0IGlzIHN1cHByZXNzZWQgYW5kIG5vdCBzZW50IHRvIHRoZSBpbnRlcnJ1cHQKKy8vIGNvbnRyb2xsZXIuCisvLyAxOiBUaGUgU1JJUy5TVE9QUklTIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBzZW50IHRvIHRoZSBpbnRlcnJ1cHQKKy8vIGNvbnRyb2xsZXIuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgSW50ZXJydXB0CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgSTJDX1NJTVJfU1RPUElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU0lNUl9TVE9QSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyQ19TSU1SX1NUT1BJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NJTVJfU1RPUElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfU0lNUl9TVE9QSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TSU1SX1NUT1BJTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gU1RBUlRJTQorLy8KKy8vIFN0YXJ0IGNvbmRpdGlvbiBpbnRlcnJ1cHQgbWFzaworLy8KKy8vIDA6IFRoZSBTUklTLlNUQVJUUklTIGludGVycnVwdCBpcyBzdXBwcmVzc2VkIGFuZCBub3Qgc2VudCB0byB0aGUgaW50ZXJydXB0CisvLyBjb250cm9sbGVyLgorLy8gMTogVGhlIFNSSVMuU1RBUlRSSVMgaW50ZXJydXB0IGlzIGVuYWJsZWQgYW5kIHNlbnQgdG8gdGhlIGludGVycnVwdAorLy8gY29udHJvbGxlci4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBJMkNfU0lNUl9TVEFSVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TSU1SX1NUQVJUSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJDX1NJTVJfU1RBUlRJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfU0lNUl9TVEFSVElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyQ19TSU1SX1NUQVJUSU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NJTVJfU1RBUlRJTV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBEQVRBSU0KKy8vCisvLyBEYXRhIGludGVycnVwdCBtYXNrCisvLworLy8gMDogVGhlIFNSSVMuREFUQVJJUyBpbnRlcnJ1cHQgaXMgc3VwcHJlc3NlZCBhbmQgbm90IHNlbnQgdG8gdGhlIGludGVycnVwdAorLy8gY29udHJvbGxlci4KKy8vIDE6IFRoZSBTUklTLkRBVEFSSVMgaW50ZXJydXB0IGlzIGVuYWJsZWQgYW5kIHNlbnQgdG8gdGhlIGludGVycnVwdAorLy8gY29udHJvbGxlci4KKyNkZWZpbmUgSTJDX1NJTVJfREFUQUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU0lNUl9EQVRBSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19TSU1SX0RBVEFJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NJTVJfREFUQUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NSSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBTVE9QUklTCisvLworLy8gU3RvcCBjb25kaXRpb24gcmF3IGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQKKy8vIDE6IEEgU3RvcCBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byBTSUNSLlNUT1BJQy4KKyNkZWZpbmUgSTJDX1NSSVNfU1RPUFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU1JJU19TVE9QUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyQ19TUklTX1NUT1BSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NSSVNfU1RPUFJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTVEFSVFJJUworLy8KKy8vIFN0YXJ0IGNvbmRpdGlvbiByYXcgaW50ZXJydXB0IHN0YXR1cworLy8KKy8vIDA6IE5vIGludGVycnVwdAorLy8gMTogQSBTdGFydCBjb25kaXRpb24gaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byBTSUNSLlNUQVJUSUMuCisjZGVmaW5lIEkyQ19TUklTX1NUQVJUUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NSSVNfU1RBUlRSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfU1JJU19TVEFSVFJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TUklTX1NUQVJUUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gREFUQVJJUworLy8KKy8vIERhdGEgcmF3IGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQKKy8vIDE6IEEgZGF0YSByZWNlaXZlZCBvciBkYXRhIHJlcXVlc3RlZCBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBTSUNSLkRBVEFJQy4KKyNkZWZpbmUgSTJDX1NSSVNfREFUQVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU1JJU19EQVRBUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19TUklTX0RBVEFSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NSSVNfREFUQVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX1NNSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBTVE9QTUlTCisvLworLy8gU3RvcCBjb25kaXRpb24gbWFza2VkIGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBBbiBpbnRlcnJ1cHQgaGFzIG5vdCBvY2N1cnJlZCBvciBpcyBtYXNrZWQvZGlzYWJsZWQuCisvLyAxOiBBbiB1bm1hc2tlZCBTdG9wIGNvbmRpdGlvbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBTSUNSLlNUT1BJQy4KKyNkZWZpbmUgSTJDX1NNSVNfU1RPUE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfU01JU19TVE9QTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyQ19TTUlTX1NUT1BNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NNSVNfU1RPUE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTVEFSVE1JUworLy8KKy8vIFN0YXJ0IGNvbmRpdGlvbiBtYXNrZWQgaW50ZXJydXB0IHN0YXR1cworLy8KKy8vIDA6IEFuIGludGVycnVwdCBoYXMgbm90IG9jY3VycmVkIG9yIGlzIG1hc2tlZC9kaXNhYmxlZC4KKy8vIDE6IEFuIHVubWFza2VkIFN0YXJ0IGNvbmRpdGlvbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKy8vCisvLyBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBTSUNSLlNUQVJUSUMuCisjZGVmaW5lIEkyQ19TTUlTX1NUQVJUTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NNSVNfU1RBUlRNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfU01JU19TVEFSVE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19TTUlTX1NUQVJUTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gREFUQU1JUworLy8KKy8vIERhdGEgbWFza2VkIGludGVycnVwdCBzdGF0dXMKKy8vCisvLyAwOiBBbiBpbnRlcnJ1cHQgaGFzIG5vdCBvY2N1cnJlZCBvciBpcyBtYXNrZWQvZGlzYWJsZWQuCisvLyAxOiBBbiB1bm1hc2tlZCBkYXRhIHJlY2VpdmVkIG9yIGRhdGEgcmVxdWVzdGVkIGludGVycnVwdCBpcyBwZW5kaW5nLgorLy8KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIFNJQ1IuREFUQUlDLgorI2RlZmluZSBJMkNfU01JU19EQVRBTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19TTUlTX0RBVEFNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX1NNSVNfREFUQU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU01JU19EQVRBTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fU0lDUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFNUT1BJQworLy8KKy8vIFN0b3AgY29uZGl0aW9uIGludGVycnVwdCBjbGVhcgorLy8KKy8vIFdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgU1JJUy5TVE9QUklTIGFuZCBTTUlTLlNUT1BNSVMuCisjZGVmaW5lIEkyQ19TSUNSX1NUT1BJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX1NJQ1JfU1RPUElDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfU0lDUl9TVE9QSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19TSUNSX1NUT1BJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gU1RBUlRJQworLy8KKy8vIFN0YXJ0IGNvbmRpdGlvbiBpbnRlcnJ1cHQgY2xlYXIKKy8vCisvLyBXcml0aW5nIDEgdG8gdGhpcyBiaXQgY2xlYXJzIFNSSVMuU1RBUlRSSVMgU01JUy5TVEFSVE1JUy4KKyNkZWZpbmUgSTJDX1NJQ1JfU1RBUlRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfU0lDUl9TVEFSVElDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyQ19TSUNSX1NUQVJUSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX1NJQ1JfU1RBUlRJQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBEQVRBSUMKKy8vCisvLyBEYXRhIGludGVycnVwdCBjbGVhcgorLy8KKy8vIFdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgU1JJUy5EQVRBUklTIFNNSVMuREFUQU1JUy4KKyNkZWZpbmUgSTJDX1NJQ1JfREFUQUlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfU0lDUl9EQVRBSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19TSUNSX0RBVEFJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX1NJQ1JfREFUQUlDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01TQQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjFdIFNBCisvLworLy8gSTJDIG1hc3RlciBzbGF2ZSBhZGRyZXNzCisvLyBEZWZpbmVzIHdoaWNoIHNsYXZlIGlzIGFkZHJlc3NlZCBmb3IgdGhlIHRyYW5zYWN0aW9uIGluIG1hc3RlciBtb2RlCisjZGVmaW5lIEkyQ19NU0FfU0FfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSTJDX01TQV9TQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRQorI2RlZmluZSBJMkNfTVNBX1NBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJTCisvLworLy8gUmVjZWl2ZSBvciBTZW5kCisvLyBUaGlzIGJpdC1maWVsZCBzcGVjaWZpZXMgaWYgdGhlIG5leHQgb3BlcmF0aW9uIGlzIGEgcmVjZWl2ZSAoaGlnaCkgb3IgYQorLy8gdHJhbnNtaXQvc2VuZCAobG93KSBmcm9tIHRoZSBhZGRyZXNzZWQgc2xhdmUgU0EuCisvLyBFTlVNczoKKy8vIFJYICAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlIGRhdGEgZnJvbSBzbGF2ZQorLy8gVFggICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0L3NlbmQgZGF0YSB0byBzbGF2ZQorI2RlZmluZSBJMkNfTVNBX1JTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NU0FfUlNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01TQV9SU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTVNBX1JTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NU0FfUlNfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01TQV9SU19UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01TVEFUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNl0gQlVTQlNZCisvLworLy8gQnVzIGJ1c3kKKy8vCisvLyAwOiBUaGUgSTJDIGJ1cyBpcyBpZGxlLgorLy8gMTogVGhlIEkyQyBidXMgaXMgYnVzeS4KKy8vCisvLyBUaGUgYml0IGNoYW5nZXMgYmFzZWQgb24gdGhlIE1DVFJMLlNUQVJUIGFuZCBNQ1RSTC5TVE9QIGNvbmRpdGlvbnMuCisjZGVmaW5lIEkyQ19NU1RBVF9CVVNCU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSTJDX01TVEFUX0JVU0JTWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJMkNfTVNUQVRfQlVTQlNZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEkyQ19NU1RBVF9CVVNCU1lfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gSURMRQorLy8KKy8vIEkyQyBpZGxlCisvLworLy8gMDogVGhlIEkyQyBjb250cm9sbGVyIGlzIG5vdCBpZGxlLgorLy8gMTogVGhlIEkyQyBjb250cm9sbGVyIGlzIGlkbGUuCisjZGVmaW5lIEkyQ19NU1RBVF9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJDX01TVEFUX0lETEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBJMkNfTVNUQVRfSURMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyQ19NU1RBVF9JRExFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gQVJCTFNUCisvLworLy8gQXJiaXRyYXRpb24gbG9zdAorLy8KKy8vIDA6IFRoZSBJMkMgY29udHJvbGxlciB3b24gYXJiaXRyYXRpb24uCisvLyAxOiBUaGUgSTJDIGNvbnRyb2xsZXIgbG9zdCBhcmJpdHJhdGlvbi4KKyNkZWZpbmUgSTJDX01TVEFUX0FSQkxTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMkNfTVNUQVRfQVJCTFNUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEkyQ19NU1RBVF9BUkJMU1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJDX01TVEFUX0FSQkxTVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBEQVRBQ0tfTgorLy8KKy8vIERhdGEgV2FzIE5vdCBBY2tub3dsZWRnZQorLy8KKy8vIDA6IFRoZSB0cmFuc21pdHRlZCBkYXRhIHdhcyBhY2tub3dsZWRnZWQuCisvLyAxOiBUaGUgdHJhbnNtaXR0ZWQgZGF0YSB3YXMgbm90IGFja25vd2xlZGdlZC4KKyNkZWZpbmUgSTJDX01TVEFUX0RBVEFDS19OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMkNfTVNUQVRfREFUQUNLX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEkyQ19NU1RBVF9EQVRBQ0tfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJDX01TVEFUX0RBVEFDS19OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBBRFJBQ0tfTgorLy8KKy8vIEFkZHJlc3MgV2FzIE5vdCBBY2tub3dsZWRnZQorLy8KKy8vIDA6IFRoZSB0cmFuc21pdHRlZCBhZGRyZXNzIHdhcyBhY2tub3dsZWRnZWQuCisvLyAxOiBUaGUgdHJhbnNtaXR0ZWQgYWRkcmVzcyB3YXMgbm90IGFja25vd2xlZGdlZC4KKyNkZWZpbmUgSTJDX01TVEFUX0FEUkFDS19OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfTVNUQVRfQURSQUNLX05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyQ19NU1RBVF9BRFJBQ0tfTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX01TVEFUX0FEUkFDS19OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBFUlIKKy8vCisvLyBFcnJvcgorLy8KKy8vIDA6IE5vIGVycm9yIHdhcyBkZXRlY3RlZCBvbiB0aGUgbGFzdCBvcGVyYXRpb24uCisvLyAxOiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgbGFzdCBvcGVyYXRpb24uCisjZGVmaW5lIEkyQ19NU1RBVF9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX01TVEFUX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMkNfTVNUQVRfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19NU1RBVF9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQlVTWQorLy8KKy8vIEkyQyBidXN5CisvLworLy8gMDogVGhlIGNvbnRyb2xsZXIgaXMgaWRsZS4KKy8vIDE6IFRoZSBjb250cm9sbGVyIGlzIGJ1c3kuCisvLworLy8gV2hlbiB0aGlzIGJpdC1maWVsZCBpcyBzZXQsIHRoZSBvdGhlciBzdGF0dXMgYml0cyBhcmUgbm90IHZhbGlkLgorLy8KKy8vIE5vdGU6IFRoZSBJMkMgY29udHJvbGxlciByZXF1aXJlcyBmb3VyIFNZU0JVUyBjbG9jayBjeWNsZXMgdG8gYXNzZXJ0IHRoZQorLy8gQlVTWSBzdGF0dXMgYWZ0ZXIgSTJDIG1hc3RlciBvcGVyYXRpb24gaGFzIGJlZW4gaW5pdGlhdGVkIHRocm91Z2ggTUNUUkwKKy8vIHJlZ2lzdGVyLgorLy8gSGVuY2UgYWZ0ZXIgcHJvZ3JhbW1pbmcgTUNUUkwgcmVnaXN0ZXIsIGFwcGxpY2F0aW9uIGlzIHJlcXVlc3RlZCB0byB3YWl0IGZvcgorLy8gZm91ciBTWVNCVVMgY2xvY2sgY3ljbGVzIGJlZm9yZSBpc3N1aW5nIGEgY29udHJvbGxlciBzdGF0dXMgaW5xdWlyeSB0aHJvdWdoCisvLyBNU1RBVCByZWdpc3Rlci4KKy8vIEFueSBwcmlvciBpbnF1aXJ5IHdvdWxkIHJlc3VsdCBpbiB3cm9uZyBzdGF0dXMgYmVpbmcgcmVwb3J0ZWQuCisjZGVmaW5lIEkyQ19NU1RBVF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01TVEFUX0JVU1lfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTVNUQVRfQlVTWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NU1RBVF9CVVNZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NQ1RSTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIEFDSworLy8KKy8vIERhdGEgYWNrbm93bGVkZ2UgZW5hYmxlCisvLworLy8gMDogVGhlIHJlY2VpdmVkIGRhdGEgYnl0ZSBpcyBub3QgYWNrbm93bGVkZ2VkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG1hc3Rlci4KKy8vIDE6IFRoZSByZWNlaXZlZCBkYXRhIGJ5dGUgaXMgYWNrbm93bGVkZ2VkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG1hc3Rlci4KKy8vCisvLyBUaGlzIGJpdC1maWVsZCBtdXN0IGJlIGNsZWFyZWQgd2hlbiB0aGUgSTJDIGJ1cyBjb250cm9sbGVyIHJlcXVpcmVzIG5vCisvLyBmdXJ0aGVyIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgZnJvbSB0aGUgc2xhdmUgdHJhbnNtaXR0ZXIuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgYWNrbm93bGVkZ2UKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIGFja25vd2xlZGdlCisjZGVmaW5lIEkyQ19NQ1RSTF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJDX01DVFJMX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJMkNfTUNUUkxfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyQ19NQ1RSTF9BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSTJDX01DVFJMX0FDS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMkNfTUNUUkxfQUNLX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzJdIFNUT1AKKy8vCisvLyBUaGlzIGJpdC1maWVsZCBkZXRlcm1pbmVzIGlmIHRoZSBjeWNsZSBzdG9wcyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIGN5Y2xlIG9yCisvLyBjb250aW51ZXMgb24gdG8gYSByZXBlYXRlZCBTVEFSVCBjb25kaXRpb24uCisvLworLy8gMDogVGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgZ2VuZXJhdGUgdGhlIFN0b3AgY29uZGl0aW9uLgorLy8gMTogVGhlIGNvbnRyb2xsZXIgZ2VuZXJhdGVzIHRoZSBTdG9wIGNvbmRpdGlvbi4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBTVE9QCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBTVE9QCisjZGVmaW5lIEkyQ19NQ1RSTF9TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX01DVFJMX1NUT1BfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMkNfTUNUUkxfU1RPUF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyQ19NQ1RSTF9TVE9QX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJDX01DVFJMX1NUT1BfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMkNfTUNUUkxfU1RPUF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIFNUQVJUCisvLworLy8gVGhpcyBiaXQtZmllbGQgZ2VuZXJhdGVzIHRoZSBTdGFydCBvciBSZXBlYXRlZCBTdGFydCBjb25kaXRpb24uCisvLworLy8gMDogVGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgZ2VuZXJhdGUgdGhlIFN0YXJ0IGNvbmRpdGlvbi4KKy8vIDE6IFRoZSBjb250cm9sbGVyIGdlbmVyYXRlcyB0aGUgU3RhcnQgY29uZGl0aW9uLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIFNUQVJUCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBTVEFSVAorI2RlZmluZSBJMkNfTUNUUkxfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19NQ1RSTF9TVEFSVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJDX01DVFJMX1NUQVJUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfTUNUUkxfU1RBUlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyQ19NQ1RSTF9TVEFSVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX01DVFJMX1NUQVJUX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBSVU4KKy8vCisvLyBJMkMgbWFzdGVyIGVuYWJsZQorLy8KKy8vIDA6IFRoZSBtYXN0ZXIgaXMgZGlzYWJsZWQuCisvLyAxOiBUaGUgbWFzdGVyIGlzIGVuYWJsZWQgdG8gdHJhbnNtaXQgb3IgcmVjZWl2ZSBkYXRhLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIE1hc3RlcgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgTWFzdGVyCisjZGVmaW5lIEkyQ19NQ1RSTF9SVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01DVFJMX1JVTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTUNUUkxfUlVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NQ1RSTF9SVU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01DVFJMX1JVTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUNUUkxfUlVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fTURSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gREFUQQorLy8KKy8vIFdoZW4gUmVhZDogTGFzdCBSWCBEYXRhIGlzIHJldHVybmVkCisvLyBXaGVuIFdyaXR0ZW46IERhdGEgaXMgdHJhbnNmZXJyZWQgZHVyaW5nIFRYICB0cmFuc2FjdGlvbgorI2RlZmluZSBJMkNfTURSX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyQ19NRFJfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgSTJDX01EUl9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01UUFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBUUFJfNworLy8KKy8vIE11c3QgYmUgc2V0IHRvIDAgdG8gc2V0IFRQUi4gSWYgc2V0IHRvIDEsIGEgd3JpdGUgdG8gVFBSIHdpbGwgYmUgaWdub3JlZC4KKyNkZWZpbmUgSTJDX01UUFJfVFBSXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBJMkNfTVRQUl9UUFJfN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEkyQ19NVFBSX1RQUl83X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSTJDX01UUFJfVFBSXzdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICBbNjowXSBUUFIKKy8vCisvLyBTQ0wgY2xvY2sgcGVyaW9kCisvLyBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgcGVyaW9kIG9mIHRoZSBTQ0wgY2xvY2suCisvLyBTQ0xfUFJEID0gMiooMStUUFIpKihTQ0xfTFAgKyBTQ0xfSFApKkNMS19QUkQKKy8vIHdoZXJlOgorLy8gU0NMX1BSRCBpcyB0aGUgU0NMIGxpbmUgcGVyaW9kIChJMkMgY2xvY2spLgorLy8gVFBSIGlzIHRoZSB0aW1lciBwZXJpb2QgcmVnaXN0ZXIgdmFsdWUgKHJhbmdlIG9mIDEgdG8gMTI3KQorLy8gU0NMX0xQIGlzIHRoZSBTQ0wgbG93IHBlcmlvZCAoZml4ZWQgYXQgNikuCisvLyBTQ0xfSFAgaXMgdGhlIFNDTCBoaWdoIHBlcmlvZCAoZml4ZWQgYXQgNCkuCisvLyBDTEtfUFJEIGlzIHRoZSBzeXN0ZW0gY2xvY2sgcGVyaW9kIGluIG5zLgorI2RlZmluZSBJMkNfTVRQUl9UUFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEkyQ19NVFBSX1RQUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgSTJDX01UUFJfVFBSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01JTVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBJTQorLy8KKy8vIEludGVycnVwdCBtYXNrCisvLworLy8gMDogVGhlIE1SSVMuUklTIGludGVycnVwdCBpcyBzdXBwcmVzc2VkIGFuZCBub3Qgc2VudCB0byB0aGUgaW50ZXJydXB0CisvLyBjb250cm9sbGVyLgorLy8gMTogVGhlIG1hc3RlciBpbnRlcnJ1cHQgaXMgc2VudCB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgd2hlbiB0aGUKKy8vIE1SSVMuUklTIGlzIHNldC4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBJbnRlcnJ1cHQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEludGVycnVwdAorI2RlZmluZSBJMkNfTUlNUl9JTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NSU1SX0lNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01JTVJfSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUlNUl9JTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NSU1SX0lNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01JTVJfSU1fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01SSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBSSVMKKy8vCisvLyBSYXcgaW50ZXJydXB0IHN0YXR1cworLy8KKy8vIDA6IE5vIGludGVycnVwdAorLy8gMTogQSBtYXN0ZXIgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisvLworLy8gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIDEgdG8gdGhlIE1JQ1IuSUMgYml0IC4KKyNkZWZpbmUgSTJDX01SSVNfUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTVJJU19SSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NUklTX1JJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01SSVNfUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyQ19PX01NSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBNSVMKKy8vCisvLyBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cworLy8KKy8vIDA6IEFuIGludGVycnVwdCBoYXMgbm90IG9jY3VycmVkIG9yIGlzIG1hc2tlZC4KKy8vIDE6IEEgbWFzdGVyIGludGVycnVwdCBpcyBwZW5kaW5nLgorLy8KKy8vIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIHRoZSBNSUNSLklDIGJpdCAuCisjZGVmaW5lIEkyQ19NTUlTX01JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01NSVNfTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTU1JU19NSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NTUlTX01JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMkNfT19NSUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gSUMKKy8vCisvLyBJbnRlcnJ1cHQgY2xlYXIKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGJpdCBjbGVhcnMgTVJJUy5SSVMgYW5kICBNTUlTLk1JUyAuCisvLworLy8gUmVhZGluZyB0aGlzIHJlZ2lzdGVyIHJldHVybnMgbm8gbWVhbmluZ2Z1bCBkYXRhLgorI2RlZmluZSBJMkNfTUlDUl9JQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NSUNSX0lDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJDX01JQ1JfSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUlDUl9JQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJDX09fTUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNV0gU0ZFCisvLworLy8gSTJDIHNsYXZlIGZ1bmN0aW9uIGVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgU2xhdmUgbW9kZSBpcyBlbmFibGVkLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFNsYXZlIG1vZGUgaXMgZGlzYWJsZWQuCisjZGVmaW5lIEkyQ19NQ1JfU0ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJDX01DUl9TRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBJMkNfTUNSX1NGRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyQ19NQ1JfU0ZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJDX01DUl9TRkVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMkNfTUNSX1NGRV9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzRdIE1GRQorLy8KKy8vIEkyQyBtYXN0ZXIgZnVuY3Rpb24gZW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBNYXN0ZXIgbW9kZSBpcyBlbmFibGVkLgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE1hc3RlciBtb2RlIGlzIGRpc2FibGVkLgorI2RlZmluZSBJMkNfTUNSX01GRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyQ19NQ1JfTUZFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSTJDX01DUl9NRkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMkNfTUNSX01GRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEkyQ19NQ1JfTUZFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJDX01DUl9NRkVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBMUEJLCisvLworLy8gSTJDIGxvb3BiYWNrCisvLworLy8gMDogTm9ybWFsIG9wZXJhdGlvbgorLy8gMTogTG9vcGJhY2sgb3BlcmF0aW9uICh0ZXN0IG1vZGUpCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgVGVzdCBNb2RlCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBUZXN0IE1vZGUKKyNkZWZpbmUgSTJDX01DUl9MUEJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfTUNSX0xQQktfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19NQ1JfTFBCS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX01DUl9MUEJLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfTUNSX0xQQktfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyQ19NQ1JfTFBCS19ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworCisjZW5kaWYgLy8gX19JMkNfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaTJzLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmY2YjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaTJzLmgKQEAgLTAsMCArMSwxMDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfaTJzX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX0kyU19IX18KKyNkZWZpbmUgX19IV19JMlNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gSTJTIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFdDTEsgU291cmNlIFNlbGVjdGlvbgorI2RlZmluZSBJMlNfT19BSUZXQ0xLU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIERNQSBCdWZmZXIgU2l6ZSBDb25maWd1cmF0aW9uCisjZGVmaW5lIEkyU19PX0FJRkRNQUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gUGluIERpcmVjdGlvbgorI2RlZmluZSBJMlNfT19BSUZESVJDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIFNlcmlhbCBJbnRlcmZhY2UgRm9ybWF0IENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgSTJTX09fQUlGRk1UQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBXb3JkIFNlbGVjdGlvbiBCaXQgTWFzayBmb3IgUGluIDAKKyNkZWZpbmUgSTJTX09fQUlGV01BU0swICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBXb3JkIFNlbGVjdGlvbiBCaXQgTWFzayBmb3IgUGluIDEKKyNkZWZpbmUgSTJTX09fQUlGV01BU0sxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBXb3JkIFNlbGVjdGlvbiBCaXQgTWFzayBmb3IgUGluIDIKKyNkZWZpbmUgSTJTX09fQUlGV01BU0syICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBBdWRpbyBJbnRlcmZhY2UgUFdNIERlYnVnIFZhbHVlCisjZGVmaW5lIEkyU19PX0FJRlBXTVZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gRE1BIElucHV0IEJ1ZmZlciBOZXh0IFBvaW50ZXIKKyNkZWZpbmUgSTJTX09fQUlGSU5QVFJORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvLyBETUEgSW5wdXQgQnVmZmVyIEN1cnJlbnQgUG9pbnRlcgorI2RlZmluZSBJMlNfT19BSUZJTlBUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIERNQSBPdXRwdXQgQnVmZmVyIE5leHQgUG9pbnRlcgorI2RlZmluZSBJMlNfT19BSUZPVVRQVFJORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIERNQSBPdXRwdXQgQnVmZmVyIEN1cnJlbnQgUG9pbnRlcgorI2RlZmluZSBJMlNfT19BSUZPVVRQVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIFNhbXBsZVN0YU1QIEdlbmVyYXRvciBDb250cm9sIFJlZ2lzdGVyCisjZGVmaW5lIEkyU19PX1NUTVBDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gQ2FwdHVyZWQgWE9TQyBDb3VudGVyIFZhbHVlLCBDYXB0dXJlIENoYW5uZWwgMAorI2RlZmluZSBJMlNfT19TVE1QWENOVENBUFQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIFhPU0MgUGVyaW9kIFZhbHVlCisjZGVmaW5lIEkyU19PX1NUTVBYUEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gQ2FwdHVyZWQgV0NMSyBDb3VudGVyIFZhbHVlLCBDYXB0dXJlIENoYW5uZWwgMAorI2RlZmluZSBJMlNfT19TVE1QV0NOVENBUFQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIFdDTEsgQ291bnRlciBQZXJpb2QgVmFsdWUKKyNkZWZpbmUgSTJTX09fU1RNUFdQRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBXQ0xLIENvdW50ZXIgVHJpZ2dlciBWYWx1ZSBmb3IgSW5wdXQgUGlucworI2RlZmluZSBJMlNfT19TVE1QSU5UUklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKy8vIFdDTEsgQ291bnRlciBUcmlnZ2VyIFZhbHVlIGZvciBPdXRwdXQgUGlucworI2RlZmluZSBJMlNfT19TVE1QT1VUVFJJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIFdDTEsgQ291bnRlciBTZXQgT3BlcmF0aW9uCisjZGVmaW5lIEkyU19PX1NUTVBXU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKworLy8gV0NMSyBDb3VudGVyIEFkZCBPcGVyYXRpb24KKyNkZWZpbmUgSTJTX09fU1RNUFdBREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorCisvLyBYT1NDIE1pbmltdW0gUGVyaW9kIFZhbHVlCisjZGVmaW5lIEkyU19PX1NUTVBYUEVSTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKKworLy8gQ3VycmVudCBWYWx1ZSBvZiBXQ05UCisjZGVmaW5lIEkyU19PX1NUTVBXQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNUMKKworLy8gQ3VycmVudCBWYWx1ZSBvZiBYQ05UCisjZGVmaW5lIEkyU19PX1NUTVBYQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKworLy8gQ2FwdHVyZWQgWE9TQyBDb3VudGVyIFZhbHVlLCBDYXB0dXJlIENoYW5uZWwgMQorI2RlZmluZSBJMlNfT19TVE1QWENOVENBUFQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIENhcHR1cmVkIFdDTEsgQ291bnRlciBWYWx1ZSwgQ2FwdHVyZSBDaGFubmVsIDEKKyNkZWZpbmUgSTJTX09fU1RNUFdDTlRDQVBUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyBNYXNrZWQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorI2RlZmluZSBJMlNfT19JUlFNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisKKy8vIFJhdyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisjZGVmaW5lIEkyU19PX0lSUUZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKKworLy8gSW50ZXJydXB0IFNldCBSZWdpc3RlcgorI2RlZmluZSBJMlNfT19JUlFTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisKKy8vIEludGVycnVwdCBDbGVhciBSZWdpc3RlcgorI2RlZmluZSBJMlNfT19JUlFDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGV0NMS1NSQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFdDTEtfSU5WCisvLworLy8gSW52ZXJ0cyBXQ0xLIHNvdXJjZSAocGFkIG9yIGludGVybmFsKSB3aGVuIHNldC4KKy8vCisvLyAwOiBOb3QgaW52ZXJ0ZWQKKy8vIDE6IEludmVydGVkCisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19JTlZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX0lOVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfSU5WX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgWzE6MF0gV0NMS19TUkMKKy8vCisvLyBTZWxlY3RzIFdDTEsgc291cmNlIGZvciBBSUYgKHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgQkNMSyBzb3VyY2UpLiBUaGUKKy8vIEJDTEsgc291cmNlIGlzIGRlZmluZWQgaW4gdGhlIFBSQ006STJTQkNMS1NFTC5TUkMKKy8vIEVOVU1zOgorLy8gUkVTRVJWRUQgICAgICAgICAgICAgICAgIE5vdCBzdXBwb3J0ZWQuIFdpbGwgZ2l2ZSBzYW1lIFdDTEsgYXMgJ05PTkUnCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgKCcwMCcpCisvLyBJTlQgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwgV0NMSyBnZW5lcmF0b3IsIGZyb20gbW9kdWxlIFBSQ00vQ2xrQ3RybAorLy8gRVhUICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIFdDTEsgZ2VuZXJhdG9yLCBmcm9tIHBhZAorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vbmUgKCcwJykKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19TUkNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19TUkNfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJMlNfQUlGV0NMS1NSQ19XQ0xLX1NSQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19BSUZXQ0xLU1JDX1dDTEtfU1JDX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0FJRldDTEtTUkNfV0NMS19TUkNfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRkRNQUNGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIEVORF9GUkFNRV9JRFgKKy8vCisvLyBEZWZpbmVzIHRoZSBsZW5ndGggb2YgdGhlIFdyaXRpbmcgYSBub24temVybyB2YWx1ZSB0byB0aGlzIHJlZ2lzdGVyZmllbGQKKy8vIGVuYWJsZXMgYW5kIGluaXRpYWxpemVzIEFJRi4gTm90ZSB0aGF0IGJlZm9yZSBkb2luZyBzbywgYWxsIG90aGVyCisvLyBjb25maWd1cmF0aW9uIG11c3QgaGF2ZSBiZWVuIGRvbmUsIGFuZCBBSUZJTlBUUi9BSUZPVVRQVFIgbXVzdCBoYXZlIGJlZW4KKy8vIGxvYWRlZC4KKyNkZWZpbmUgSTJTX0FJRkRNQUNGR19FTkRfRlJBTUVfSURYX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJMlNfQUlGRE1BQ0ZHX0VORF9GUkFNRV9JRFhfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEkyU19BSUZETUFDRkdfRU5EX0ZSQU1FX0lEWF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZESVJDRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbOTo4XSBBRDIKKy8vCisvLyBDb25maWd1cmVzIHRoZSBBRDIgYXVkaW8gZGF0YSBwaW4gdXNhZ2UKKy8vCisvLyAweDM6IFJlc2VydmVkCisvLyBFTlVNczoKKy8vIE9VVCAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgbW9kZQorLy8gSU4gICAgICAgICAgICAgICAgICAgICAgIElucHV0IG1vZGUKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBOb3QgaW4gdXNlIChkaXNhYmxlZCkKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDJfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMl9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQyX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6NF0gQUQxCisvLworLy8gQ29uZmlndXJlcyB0aGUgQUQxIGF1ZGlvIGRhdGEgcGluIHVzYWdlOgorLy8KKy8vIDB4MzogUmVzZXJ2ZWQKKy8vIEVOVU1zOgorLy8gT1VUICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBtb2RlCisvLyBJTiAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgbW9kZQorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vdCBpbiB1c2UgKGRpc2FibGVkKQorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQxX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDFfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMTowXSBBRDAKKy8vCisvLyBDb25maWd1cmVzIHRoZSBBRDAgYXVkaW8gZGF0YSBwaW4gdXNhZ2U6CisvLworLy8gMHgzOiBSZXNlcnZlZAorLy8gRU5VTXM6CisvLyBPVVQgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IG1vZGUKKy8vIElOICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCBtb2RlCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm90IGluIHVzZSAoZGlzYWJsZWQpCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQwX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyU19BSUZESVJDRkdfQUQwX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0FJRkRJUkNGR19BRDBfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfQUlGRElSQ0ZHX0FEMF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGRk1UQ0ZHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6OF0gREFUQV9ERUxBWQorLy8KKy8vIFRoZSBudW1iZXIgb2YgQkNMSyBwZXJpb2RzIGJldHdlZW4gYSBXQ0xLIGVkZ2UgYW5kIE1TQiBvZiB0aGUgZmlyc3Qgd29yZCBpbgorLy8gYSBwaGFzZToKKy8vCisvLyAweDAwOiBMSkYgZm9ybWF0CisvLyAweDAxOiBJMlMgYW5kIERTUCBmb3JtYXQKKy8vIDB4MDI6IFJKRiBmb3JtYXQKKy8vIC4uLgorLy8gMHhGRjogUkpGIGZvcm1hdAorLy8KKy8vIE5vdGU6IFdoZW4gMCwgTVNCIG9mIHRoZSBuZXh0IHdvcmQgd2lsbCBiZSBvdXRwdXQgaW4gdGhlIGlkbGUgcGVyaW9kIGJldHdlZW4KKy8vIExTQiBvZiB0aGUgcHJldmlvdXMgd29yZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHdvcmQuIE90aGVyd2lzZSBsb2dpY2FsIDAKKy8vIHdpbGwgYmUgb3V0cHV0IHVudGlsIHRoZSBkYXRhIGRlbGF5IGhhcyBleHBpcmVkLgorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX0RBVEFfREVMQVlfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyU19BSUZGTVRDRkdfREFUQV9ERUxBWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19EQVRBX0RFTEFZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBNRU1fTEVOXzI0CisvLworLy8gVGhlIHNpemUgb2YgZWFjaCB3b3JkIHN0b3JlZCB0byBvciBsb2FkZWQgZnJvbSBtZW1vcnk6CisvLyBFTlVNczoKKy8vIDI0QklUICAgICAgICAgICAgICAgICAgICAyNC1iaXQgKG9uZSA4IGJpdCBhbmQgb25lIDE2IGJpdCBsb2NrZWQgYWNjZXNzIHBlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZSkKKy8vIDE2QklUICAgICAgICAgICAgICAgICAgICAxNi1iaXQgKG9uZSAxNiBiaXQgYWNjZXNzIHBlciBzYW1wbGUpCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfTUVNX0xFTl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19NRU1fTEVOXzI0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX01FTV9MRU5fMjRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfTUVNX0xFTl8yNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19NRU1fTEVOXzI0XzI0QklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX01FTV9MRU5fMjRfMTZCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFNNUExfRURHRQorLy8KKy8vIE9uIHRoZSBzZXJpYWwgYXVkaW8gaW50ZXJmYWNlLCBkYXRhIChhbmQgd2NsaykgaXMgc2FtcGxlZCBhbmQgY2xvY2tlZCBvdXQgb24KKy8vIG9wcG9zaXRlIGVkZ2VzIG9mIEJDTEsuCisvLyBFTlVNczoKKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBEYXRhIGlzIHNhbXBsZWQgb24gdGhlIHBvc2l0aXZlIGVkZ2UgYW5kIGNsb2NrZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgb24gdGhlIG5lZ2F0aXZlIGVkZ2UuCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgRGF0YSBpcyBzYW1wbGVkIG9uIHRoZSBuZWdhdGl2ZSBlZGdlIGFuZCBjbG9ja2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IG9uIHRoZSBwb3NpdGl2ZSBlZGdlLgorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX1NNUExfRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfU01QTF9FREdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19TTVBMX0VER0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX1NNUExfRURHRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEkyU19BSUZGTVRDRkdfU01QTF9FREdFX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19TTVBMX0VER0VfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs1XSBEVUFMX1BIQVNFCisvLworLy8gU2VsZWN0cyBkdWFsLSBvciBzaW5nbGUtcGhhc2UgZm9ybWF0LgorLy8KKy8vIDA6IFNpbmdsZS1waGFzZQorLy8gMTogRHVhbC1waGFzZQorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX0RVQUxfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfRFVBTF9QSEFTRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJTX0FJRkZNVENGR19EVUFMX1BIQVNFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX0RVQUxfUEhBU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgIFs0OjBdIFdPUkRfTEVOCisvLworLy8gTnVtYmVyIG9mIGJpdHMgcGVyIHdvcmQgKDgtMjQpOgorLy8gSW4gc2luZ2xlLXBoYXNlIGZvcm1hdCwgdGhpcyBpcyB0aGUgZXhhY3QgbnVtYmVyIG9mIGJpdHMgcGVyIHdvcmQuCisvLyBJbiBkdWFsLXBoYXNlIGZvcm1hdCwgdGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyBwZXIgd29yZC4KKy8vCisvLyBWYWx1ZXMgYmVsb3cgOCBhbmQgYWJvdmUgMjQgZ2l2ZSB1bmRlZmluZWQgYmVoYXZpb3IuIERhdGEgd3JpdHRlbiB0byBtZW1vcnkKKy8vIGlzIGFsd2F5cyBhbGlnbmVkIHRvIDE2IG9yIDI0IGJpdHMgYXMgZGVmaW5lZCBieSBNRU1fTEVOXzI0LiBCaXQgd2lkdGhzIHRoYXQKKy8vIGRpZmZlciBmcm9tIHRoaXMgYWxpZ25tZW50IHdpbGwgZWl0aGVyIGJlIHRydW5jYXRlZCBvciB6ZXJvIHBhZGRlZC4KKyNkZWZpbmUgSTJTX0FJRkZNVENGR19XT1JEX0xFTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBJMlNfQUlGRk1UQ0ZHX1dPUkRfTEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEkyU19BSUZGTVRDRkdfV09SRF9MRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZXTUFTSzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzowXSBNQVNLCisvLworLy8gQml0LW1hc2sgaW5kaWNhdGluZyB2YWxpZCBjaGFubmVscyBpbiBhIGZyYW1lIG9uIEFEMC4KKy8vCisvLyBJbiBzaW5nbGUtcGhhc2UgbW9kZSwgZWFjaCBiaXQgcmVwcmVzZW50cyBvbmUgY2hhbm5lbCwgc3RhcnRpbmcgd2l0aCBMU0IgZm9yCisvLyB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgZnJhbWUuIEEgZnJhbWUgY2FuIGNvbnRhaW4gdXAgdG8gOCBjaGFubmVscy4gIENoYW5uZWxzCisvLyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIG1hc2sgd2lsbCBub3QgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIGluIG1lbW9yeSwKKy8vIGFuZCBjbG9ja2VkIG91dCBhcyAnMCcuCisvLworLy8gSW4gZHVhbC1waGFzZSBtb2RlLCBvbmx5IHRoZSB0d28gTFNCcyBhcmUgY29uc2lkZXJlZC4gRm9yIGEgc3RlcmVvCisvLyBjb25maWd1cmF0aW9uLCBzZXQgYm90aCBiaXRzLiBGb3IgYSBtb25vIGNvbmZpZ3VyYXRpb24sIHNldCBiaXQgMCBvbmx5LiBJbgorLy8gbW9ubyBtb2RlLCBvbmx5IGNoYW5uZWwgMCB3aWxsIGJlIHNhbXBsZWQgYW5kIHN0b3JlZCB0byBtZW1vcnksIGFuZCBjaGFubmVsCisvLyAwIHdpbGwgYmUgcmVwZWF0ZWQgd2hlbiBjbG9ja2VkIG91dC4KKy8vCisvLyBJbiBtb25vIG1vZGUsIG9ubHkgY2hhbm5lbCAwIHdpbGwgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIHRvIG1lbW9yeSwgYW5kCisvLyBjaGFubmVsIDAgd2lsbCBiZSByZXBlYXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlIHdoZW4gY2xvY2tlZCBvdXQuCisvLworLy8gSWYgYWxsIGJpdHMgYXJlIHplcm8sIG5vIGlucHV0IHdvcmRzIHdpbGwgYmUgc3RvcmVkIHRvIG1lbW9yeSwgYW5kIHRoZQorLy8gb3V0cHV0IGRhdGEgbGluZXMgd2lsbCBiZSBjb25zdGFudCAnMCcuIFRoaXMgY2FuIGJlIHV0aWxpemVkIHdoZW4gUFdNIGRlYnVnCisvLyBvdXRwdXQgaXMgZGVzaXJlZCB3aXRob3V0IGFueSBhY3RpdmVseSB1c2VkIG91dHB1dCBwaW5zLgorI2RlZmluZSBJMlNfQUlGV01BU0swX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyU19BSUZXTUFTSzBfTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgSTJTX0FJRldNQVNLMF9NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRldNQVNLMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIE1BU0sKKy8vCisvLyBCaXQtbWFzayBpbmRpY2F0aW5nIHZhbGlkIGNoYW5uZWxzIGluIGEgZnJhbWUgb24gQUQxLgorLy8KKy8vIEluIHNpbmdsZS1waGFzZSBtb2RlLCBlYWNoIGJpdCByZXByZXNlbnRzIG9uZSBjaGFubmVsLCBzdGFydGluZyB3aXRoIExTQiBmb3IKKy8vIHRoZSBmaXJzdCB3b3JkIGluIHRoZSBmcmFtZS4gQSBmcmFtZSBjYW4gY29udGFpbiB1cCB0byA4IGNoYW5uZWxzLiAgQ2hhbm5lbHMKKy8vIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWFzayB3aWxsIG5vdCBiZSBzYW1wbGVkIGFuZCBzdG9yZWQgaW4gbWVtb3J5LAorLy8gYW5kIGNsb2NrZWQgb3V0IGFzICcwJy4KKy8vCisvLyBJbiBkdWFsLXBoYXNlIG1vZGUsIG9ubHkgdGhlIHR3byBMU0JzIGFyZSBjb25zaWRlcmVkLiBGb3IgYSBzdGVyZW8KKy8vIGNvbmZpZ3VyYXRpb24sIHNldCBib3RoIGJpdHMuIEZvciBhIG1vbm8gY29uZmlndXJhdGlvbiwgc2V0IGJpdCAwIG9ubHkuIEluCisvLyBtb25vIG1vZGUsIG9ubHkgY2hhbm5lbCAwIHdpbGwgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIHRvIG1lbW9yeSwgYW5kIGNoYW5uZWwKKy8vIDAgd2lsbCBiZSByZXBlYXRlZCB3aGVuIGNsb2NrZWQgb3V0LgorLy8KKy8vIEluIG1vbm8gbW9kZSwgb25seSBjaGFubmVsIDAgd2lsbCBiZSBzYW1wbGVkIGFuZCBzdG9yZWQgdG8gbWVtb3J5LCBhbmQKKy8vIGNoYW5uZWwgMCB3aWxsIGJlIHJlcGVhdGVkIGluIHRoZSBzZWNvbmQgcGhhc2Ugd2hlbiBjbG9ja2VkIG91dC4KKy8vCisvLyBJZiBhbGwgYml0cyBhcmUgemVybywgbm8gaW5wdXQgd29yZHMgd2lsbCBiZSBzdG9yZWQgdG8gbWVtb3J5LCBhbmQgdGhlCisvLyBvdXRwdXQgZGF0YSBsaW5lcyB3aWxsIGJlIGNvbnN0YW50ICcwJy4gVGhpcyBjYW4gYmUgdXRpbGl6ZWQgd2hlbiBQV00gZGVidWcKKy8vIG91dHB1dCBpcyBkZXNpcmVkIHdpdGhvdXQgYW55IGFjdGl2ZWx5IHVzZWQgb3V0cHV0IHBpbnMuCisjZGVmaW5lIEkyU19BSUZXTUFTSzFfTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSTJTX0FJRldNQVNLMV9NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBJMlNfQUlGV01BU0sxX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGV01BU0syCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gTUFTSworLy8KKy8vIEJpdC1tYXNrIGluZGljYXRpbmcgdmFsaWQgY2hhbm5lbHMgaW4gYSBmcmFtZSBvbiBBRDIKKy8vCisvLyBJbiBzaW5nbGUtcGhhc2UgbW9kZSwgZWFjaCBiaXQgcmVwcmVzZW50cyBvbmUgY2hhbm5lbCwgc3RhcnRpbmcgd2l0aCBMU0IgZm9yCisvLyB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgZnJhbWUuIEEgZnJhbWUgY2FuIGNvbnRhaW4gdXAgdG8gOCBjaGFubmVscy4gIENoYW5uZWxzCisvLyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIG1hc2sgd2lsbCBub3QgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIGluIG1lbW9yeSwKKy8vIGFuZCBjbG9ja2VkIG91dCBhcyAnMCcuCisvLworLy8gSW4gZHVhbC1waGFzZSBtb2RlLCBvbmx5IHRoZSB0d28gTFNCcyBhcmUgY29uc2lkZXJlZC4gRm9yIGEgc3RlcmVvCisvLyBjb25maWd1cmF0aW9uLCBzZXQgYm90aCBiaXRzLiBGb3IgYSBtb25vIGNvbmZpZ3VyYXRpb24sIHNldCBiaXQgMCBvbmx5LiBJbgorLy8gbW9ubyBtb2RlLCBvbmx5IGNoYW5uZWwgMCB3aWxsIGJlIHNhbXBsZWQgYW5kIHN0b3JlZCB0byBtZW1vcnksIGFuZCBjaGFubmVsCisvLyAwIHdpbGwgYmUgcmVwZWF0ZWQgd2hlbiBjbG9ja2VkIG91dC4KKy8vCisvLyBJbiBtb25vIG1vZGUsIG9ubHkgY2hhbm5lbCAwIHdpbGwgYmUgc2FtcGxlZCBhbmQgc3RvcmVkIHRvIG1lbW9yeSwgYW5kCisvLyBjaGFubmVsIDAgd2lsbCBiZSByZXBlYXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlIHdoZW4gY2xvY2tlZCBvdXQuCisvLworLy8gSWYgYWxsIGJpdHMgYXJlIHplcm8sIG5vIGlucHV0IHdvcmRzIHdpbGwgYmUgc3RvcmVkIHRvIG1lbW9yeSwgYW5kIHRoZQorLy8gb3V0cHV0IGRhdGEgbGluZXMgd2lsbCBiZSBjb25zdGFudCAnMCcuIFRoaXMgY2FuIGJlIHV0aWxpemVkIHdoZW4gUFdNIGRlYnVnCisvLyBvdXRwdXQgaXMgZGVzaXJlZCB3aXRob3V0IGFueSBhY3RpdmVseSB1c2VkIG91dHB1dCBwaW5zLgorI2RlZmluZSBJMlNfQUlGV01BU0syX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEkyU19BSUZXTUFTSzJfTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgSTJTX0FJRldNQVNLMl9NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0FJRlBXTVZBTFVFCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gUFVMU0VfV0lEVEgKKy8vCisvLyBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIGRldGVybWluZXMgdGhlIHdpZHRoIG9mIHRoZSBhY3RpdmUgaGlnaAorLy8gUFdNIHB1bHNlIChwd21fZGVidWcpLCB3aGljaCBzdGFydHMgdG9nZXRoZXIgd2l0aCBNU0Igb2YgdGhlIGZpcnN0IG91dHB1dAorLy8gd29yZCBpbiBhIERNQSBidWZmZXI6CisvLworLy8gMHgwMDAwOiBDb25zdGFudCBsb3cKKy8vIDB4MDAwMTogV2lkdGggb2YgdGhlIHB1bHNlIChudW1iZXIgb2YgQkNMSyBjeWNsZXMsIGhlcmUgMSkuCisvLyAuLi4KKy8vIDB4RkZGRTogV2lkdGggb2YgdGhlIHB1bHNlIChudW1iZXIgb2YgQkNMSyBjeWNsZXMsIGhlcmUgNjU1MzQpLgorLy8gMHhGRkZGOiBDb25zdGFudCBoaWdoCisjZGVmaW5lIEkyU19BSUZQV01WQUxVRV9QVUxTRV9XSURUSF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX0FJRlBXTVZBTFVFX1BVTFNFX1dJRFRIX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfQUlGUFdNVkFMVUVfUFVMU0VfV0lEVEhfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGSU5QVFJORVhUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gUFRSCisvLworLy8gUG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgbmV4dCBETUEgaW5wdXQgYnVmZmVyLgorLy8KKy8vIFRoZSByZWFkIHZhbHVlIGVxdWFscyB0aGUgbGFzdCB3cml0dGVuIHZhbHVlIHVudGlsIHRoZSBjdXJyZW50bHkgdXNlZCBETUEKKy8vIGlucHV0IGJ1ZmZlciBpcyBjb21wbGV0ZWQsIGFuZCB0aGVuIGJlY29tZXMgbnVsbCB3aGVuIHRoZSBsYXN0IHdyaXR0ZW4gdmFsdWUKKy8vIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBETUEgY29udHJvbGxlciB0byBzdGFydCBvbiB0aGUgbmV4dCBidWZmZXIuIFRoaXMgZXZlbnQKKy8vIGlzIHNpZ25hbGl6ZWQgYnkgYWlmX2RtYV9pbl9pcnEuCisvLworLy8gQXQgc3RhcnR1cCwgdGhlIHZhbHVlIG11c3QgYmUgd3JpdHRlbiBvbmNlIGJlZm9yZSBhbmQgb25jZSBhZnRlciBjb25maWd1cmluZworLy8gdGhlIERNQSBidWZmZXIgc2l6ZSBpbiBBSUZETUFDRkcuCisvLworLy8gVGhlIG5leHQgcG9pbnRlciBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhpcyByZWdpc3RlciB3aGlsZSB0aGUgRE1BIGZ1bmN0aW9uCisvLyB1c2VzIHRoZSBwcmV2aW91c2x5IHdyaXR0ZW4gcG9pbnRlci4gSWYgbm90IHdyaXR0ZW4gaW4gdGltZSwKKy8vIElSUUZMQUdTLlBUUl9FUlIgd2lsbCBiZSByYWlzZWQgYW5kIGFsbCBpbnB1dCBwaW5zIHdpbGwgYmUgZGlzYWJsZWQuCisvLworLy8gTm90ZSB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOgorLy8gLSAgQWRkcmVzcyBzcGFjZSB3cmFwcGluZyBpcyBub3Qgc3VwcG9ydGVkLiBUaGF0IG1lYW5zIGFkZHJlc3MobGFzdCBzYW1wbGUpCisvLyBtdXN0IGJlIGhpZ2hlciB0aGFuIGFkZHJlc3MoZmlyc3Qgc2FtcGxlLgorLy8gLSAgQSBETUEgYmxvY2sgY2Fubm90IGJlIGFsaWduZWQgd2l0aCB0aGUgZW5kIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCB0aGF0CisvLyBtZWFucyBhIGJsb2NrIGNhbm5vdCBjb250YWluIHRoZSBhZGRyZXNzIDB4RkZGRi4KKyNkZWZpbmUgSTJTX0FJRklOUFRSTkVYVF9QVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBJMlNfQUlGSU5QVFJORVhUX1BUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEkyU19BSUZJTlBUUk5FWFRfUFRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZJTlBUUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFBUUgorLy8KKy8vIFZhbHVlIG9mIHRoZSBETUEgaW5wdXQgYnVmZmVyIHBvaW50ZXIgY3VycmVudGx5IHVzZWQgYnkgdGhlIERNQSBjb250cm9sbGVyLgorLy8gSW5jcmVtZW50ZWQgYnkgMSAoYnl0ZSkgb3IgMiAod29yZCkgZm9yIGVhY2ggQUhCIGFjY2Vzcy4KKyNkZWZpbmUgSTJTX0FJRklOUFRSX1BUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBJMlNfQUlGSU5QVFJfUFRSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIEkyU19BSUZJTlBUUl9QVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19BSUZPVVRQVFJORVhUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gUFRSCisvLworLy8gUG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgbmV4dCBETUEgb3V0cHV0IGJ1ZmZlci4KKy8vCisvLyBUaGUgcmVhZCB2YWx1ZSBlcXVhbHMgdGhlIGxhc3Qgd3JpdHRlbiB2YWx1ZSB1bnRpbCB0aGUgY3VycmVudGx5IHVzZWQgRE1BCisvLyBvdXRwdXQgYnVmZmVyIGlzIGNvbXBsZXRlZCwgYW5kIHRoZW4gYmVjb21lcyBudWxsIHdoZW4gdGhlIGxhc3Qgd3JpdHRlbgorLy8gdmFsdWUgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIERNQSBjb250cm9sbGVyIHRvIHN0YXJ0IG9uIHRoZSBuZXh0IGJ1ZmZlci4gVGhpcworLy8gZXZlbnQgaXMgc2lnbmFsaXplZCBieSBhaWZfZG1hX291dF9pcnEuCisvLworLy8gQXQgc3RhcnR1cCwgdGhlIHZhbHVlIG11c3QgYmUgd3JpdHRlbiBvbmNlIGJlZm9yZSBhbmQgb25jZSBhZnRlciBjb25maWd1cmluZworLy8gdGhlIERNQSBidWZmZXIgc2l6ZSBpbiBBSUZETUFDRkcuIEF0IHRoaXMgdGltZSwgdGhlIGZpcnN0IHR3byBzYW1wbGVzIHdpbGwKKy8vIGJlIGZldGNoZWQgZnJvbSBtZW1vcnkuCisvLworLy8gVGhlIG5leHQgcG9pbnRlciBtdXN0IGJlIHdyaXR0ZW4gdG8gdGhpcyByZWdpc3RlciB3aGlsZSB0aGUgRE1BIGZ1bmN0aW9uCisvLyB1c2VzIHRoZSBwcmV2aW91c2x5IHdyaXR0ZW4gcG9pbnRlci4gSWYgbm90IHdyaXR0ZW4gaW4gdGltZSwKKy8vIElSUUZMQUdTLlBUUl9FUlIgd2lsbCBiZSByYWlzZWQgYW5kIGFsbCBvdXRwdXQgcGlucyB3aWxsIGJlIGRpc2FibGVkLgorLy8KKy8vIE5vdGUgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczoKKy8vIC0gIEFkZHJlc3Mgc3BhY2Ugd3JhcHBpbmcgaXMgbm90IHN1cHBvcnRlZC4gVGhhdCBtZWFucyBhZGRyZXNzKGxhc3Qgc2FtcGxlKQorLy8gbXVzdCBiZSBoaWdoZXIgdGhhbiBhZGRyZXNzKGZpcnN0IHNhbXBsZS4KKy8vIC0gIEEgRE1BIGJsb2NrIGNhbm5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGVuZCBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgdGhhdAorLy8gbWVhbnMgYSBibG9jayBjYW5ub3QgY29udGFpbiB0aGUgYWRkcmVzcyAweEZGRkYuCisjZGVmaW5lIEkyU19BSUZPVVRQVFJORVhUX1BUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgSTJTX0FJRk9VVFBUUk5FWFRfUFRSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBJMlNfQUlGT1VUUFRSTkVYVF9QVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fQUlGT1VUUFRSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gUFRSCisvLworLy8gVmFsdWUgb2YgdGhlIERNQSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIgY3VycmVudGx5IHVzZWQgYnkgdGhlIERNQSBjb250cm9sbGVyCisvLyBJbmNyZW1lbnRlZCBieSAxIChieXRlKSBvciAyICh3b3JkKSBmb3IgZWFjaCBBSEIgYWNjZXNzLgorI2RlZmluZSBJMlNfQUlGT1VUUFRSX1BUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEkyU19BSUZPVVRQVFJfUFRSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgSTJTX0FJRk9VVFBUUl9QVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBPVVRfUkRZCisvLworLy8gTG93IHVudGlsIHRoZSBvdXRwdXQgcGlucyBhcmUgcmVhZHkgdG8gYmUgc3RhcnRlZCBieSB0aGUgc2FtcGxlc3RhbXAKKy8vIGdlbmVyYXRvci4gV2hlbiBzdGFydGVkICh0aGF0IGlzIFNUTVBPVVRUUklHIGVxdWFscyB0aGUgV0NMSyBjb3VudGVyKSB0aGUKKy8vIGJpdCBnb2VzIGJhY2sgbG93LgorI2RlZmluZSBJMlNfU1RNUENUTF9PVVRfUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19TVE1QQ1RMX09VVF9SRFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX1NUTVBDVExfT1VUX1JEWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfU1RNUENUTF9PVVRfUkRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIElOX1JEWQorLy8KKy8vIExvdyB1bnRpbCB0aGUgaW5wdXQgcGlucyBhcmUgcmVhZHkgdG8gYmUgc3RhcnRlZCBieSB0aGUgc2FtcGxlc3RhbXAKKy8vIGdlbmVyYXRvci4gV2hlbiBzdGFydGVkICh0aGF0IGlzIFNUTVBJTlRSSUcgZXF1YWxzIHRoZSBXQ0xLIGNvdW50ZXIpIHRoZSBiaXQKKy8vIGdvZXMgYmFjayBsb3cuCisjZGVmaW5lIEkyU19TVE1QQ1RMX0lOX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX1NUTVBDVExfSU5fUkRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMlNfU1RNUENUTF9JTl9SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19TVE1QQ1RMX0lOX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gU1RNUF9FTgorLy8KKy8vIEVuYWJsZXMgdGhlIHNhbXBsZXN0YW1wIGdlbmVyYXRvci4gVGhlIHNhbXBsZXN0YW1wIGdlbmVyYXRvciBtdXN0IG9ubHkgYmUKKy8vIGVuYWJsZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gcHJvcGVybHkgY29uZmlndXJlZC4KKy8vIFdoZW4gY2xlYXJlZCwgYWxsIHNhbXBsZXN0YW1wIGdlbmVyYXRvciBjb3VudGVycyBhbmQgY2FwdHVyZSB2YWx1ZXMgYXJlCisvLyBjbGVhcmVkLgorI2RlZmluZSBJMlNfU1RNUENUTF9TVE1QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19TVE1QQ1RMX1NUTVBfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJTX1NUTVBDVExfU1RNUF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfU1RNUENUTF9TVE1QX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFhDTlRDQVBUMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENBUFRfVkFMVUUKKy8vCisvLyBUaGUgdmFsdWUgb2YgdGhlIHNhbXBsZXN0YW1wIFhPU0MgY291bnRlciAoU1RNUFhDTlQuQ1VSUl9WQUxVRSkgbGFzdCB0aW1lIGFuCisvLyBldmVudCB3YXMgcHVsc2VkIChldmVudCBzb3VyY2Ugc2VsZWN0ZWQgaW4gW0VWRU5ULkkyU1NUTVBTRUwwLkVWXSBmb3IKKy8vIGNoYW5uZWwgMCkuIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgMjQgTUh6IGNsb2NrIGN5Y2xlcworLy8gc2luY2UgdGhlIGxhc3QgcG9zaXRpdmUgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgV0NMSy4KKy8vIFRoZSB2YWx1ZSBpcyBjbGVhcmVkIHdoZW4gU1RNUENUTC5TVE1QX0VOID0gMC4KKy8vIE5vdGU6IER1ZSB0byBidWZmZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgV0NMSyBpcyBkZWxheWVkIGJ5IGEgc21hbGwKKy8vIG51bWJlciBvZiBCQ0xLIHBlcmlvZHMgYW5kIGNsayBwZXJpb2RzLgorLy8gTm90ZTogV2hlbiBjYWxjdWxhdGluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBzYW1wbGUgc3RhbXAsIFNUTVBYUEVSIG1heQorLy8gYmUgbGVzcyB0aGFuIHRoaXMgYml0IGZpZWxkLgorI2RlZmluZSBJMlNfU1RNUFhDTlRDQVBUMF9DQVBUX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QWENOVENBUFQwX0NBUFRfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBYQ05UQ0FQVDBfQ0FQVF9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBYUEVSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gVkFMVUUKKy8vCisvLyBUaGUgbnVtYmVyIG9mIDI0IE1IeiBjbG9jayBjeWNsZXMgaW4gdGhlIHByZXZpb3VzIFdDTEsgcGVyaW9kICh0aGF0IGlzIC0KKy8vIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBYT1NDIGNvdW50ZXIgYXQgdGhlIHBvc2l0aXZlIFdDTEsgZWRnZSwgaGFkIGl0IG5vdAorLy8gYmVlbiByZXNldCB0byAwKS4KKy8vIFRoZSB2YWx1ZSBpcyBjbGVhcmVkIHdoZW4gU1RNUENUTC5TVE1QX0VOID0gMC4KKyNkZWZpbmUgSTJTX1NUTVBYUEVSX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFhQRVJfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QWFBFUl9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QV0NOVENBUFQwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQ0FQVF9WQUxVRQorLy8KKy8vIFRoZSB2YWx1ZSBvZiB0aGUgc2FtcGxlc3RhbXAgV0NMSyBjb3VudGVyIChTVE1QV0NOVC5DVVJSX1ZBTFVFKSBsYXN0IHRpbWUgYW4KKy8vIGV2ZW50IHdhcyBwdWxzZWQgKGV2ZW50IHNvdXJjZSBzZWxlY3RlZCBpbiBFVkVOVDpJMlNTVE1QU0VMMC5FViBmb3IgY2hhbm5lbAorLy8gMCkuIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgcG9zaXRpdmUgV0NMSyBlZGdlcyBzaW5jZSB0aGUKKy8vIHNhbXBsZXN0YW1wIGdlbmVyYXRvciB3YXMgZW5hYmxlZCAobm90IHRha2luZyBtb2RpZmljYXRpb24gdGhyb3VnaAorLy8gU1RNUFdBREQvU1RNUFdTRVQgaW50byBhY2NvdW50KS4KKy8vIFRoZSB2YWx1ZSBpcyBjbGVhcmVkIHdoZW4gU1RNUENUTC5TVE1QX0VOID0gMC4KKyNkZWZpbmUgSTJTX1NUTVBXQ05UQ0FQVDBfQ0FQVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFdDTlRDQVBUMF9DQVBUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QV0NOVENBUFQwX0NBUFRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QV1BFUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFZBTFVFCisvLworLy8gVXNlZCB0byBkZWZpbmUgd2hlbiBTVE1QV0NOVCBpcyB0byBiZSByZXNldCBzbyBudW1iZXIgb2YgV0NMSyBlZGdlcyBhcmUKKy8vIGZvdW5kIGZvciB0aGUgc2l6ZSBvZiB0aGUgc2FtcGxlIGJ1ZmZlci4gVGhpcyBpcyB0aHVzIGEgbW9kdWxvIHZhbHVlIGZvciB0aGUKKy8vIFdDTEsgY291bnRlci4gVGhpcyBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBzaXplIG9mIHRoZSBzYW1wbGUgYnVmZmVyCisvLyB1c2VkIGJ5IHRoZSBzeXN0ZW0gKHRoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHNhbXBsZSBwbHVzIDEpLgorI2RlZmluZSBJMlNfU1RNUFdQRVJfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QV1BFUl9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBXUEVSX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBJTlRSSUcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBJTl9TVEFSVF9XQ05UCisvLworLy8gQ29tcGFyZSB2YWx1ZSB1c2VkIHRvIHN0YXJ0IHRoZSBpbmNvbWluZyBhdWRpbyBzdHJlYW1zLgorLy8gVGhpcyBiaXQgZmllbGQgc2hhbGwgZXF1YWwgdGhlIFdDTEsgY291bnRlciB2YWx1ZSBkdXJpbmcgdGhlIFdDTEsgcGVyaW9kIGluCisvLyB3aGljaCB0aGUgZmlyc3QgaW5wdXQgd29yZChzKSBhcmUgc2FtcGxlZCBhbmQgc3RvcmVkIHRvIG1lbW9yeSAodGhhdCBpcyB0aGUKKy8vIHNhbXBsZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHZlcnkgZmlyc3QgRE1BIGlucHV0IGJ1ZmZlcikuCisvLworLy8gVGhlIHZhbHVlIG9mIHRoaXMgcmVnaXN0ZXIgdGFrZXMgZWZmZWN0IHdoZW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8gLSBPbmUgb3IgbW9yZSBwaW5zIGFyZSBjb25maWd1cmVkIGFzIGlucHV0cyBpbiBBSUZESVJDRkcuCisvLyAtIEFJRkRNQUNGRyBoYXMgYmVlbiBjb25maWd1cmVkIGZvciB0aGUgY29ycmVjdCBidWZmZXIgc2l6ZSwgYW5kIGF0IGxlYXN0IDMyCisvLyBCQ0xLIGN5Y2xlIHRpY2tzIGhhdmUgaGFwcGVuZWQuCisvLworLy8gTm90ZTogVG8gYXZvaWQgZmFsc2UgdHJpZ2dlcnMsIHRoaXMgYml0IGZpZWxkIHNob3VsZCBiZSBzZXQgaGlnaGVyIHRoYW4KKy8vIFNUTVBXUEVSLlZBTFVFLgorI2RlZmluZSBJMlNfU1RNUElOVFJJR19JTl9TVEFSVF9XQ05UX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QSU5UUklHX0lOX1NUQVJUX1dDTlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBJTlRSSUdfSU5fU1RBUlRfV0NOVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBPVVRUUklHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gT1VUX1NUQVJUX1dDTlQKKy8vCisvLyBDb21wYXJlIHZhbHVlIHVzZWQgdG8gc3RhcnQgdGhlIG91dGdvaW5nIGF1ZGlvIHN0cmVhbXMuCisvLworLy8gVGhpcyBiaXQgZmllbGQgbXVzdCBlcXVhbCB0aGUgV0NMSyBjb3VudGVyIHZhbHVlIGR1cmluZyB0aGUgV0NMSyBwZXJpb2QgaW4KKy8vIHdoaWNoIHRoZSBmaXJzdCBvdXRwdXQgd29yZChzKSByZWFkIGZyb20gbWVtb3J5IGFyZSBjbG9ja2VkIG91dCAodGhhdCBpcyB0aGUKKy8vIHNhbXBsZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHZlcnkgZmlyc3QgRE1BIG91dHB1dCBidWZmZXIpLgorLy8KKy8vIFRoZSB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIHRha2VzIGVmZmVjdCB3aGVuIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vIC0gT25lIG9yIG1vcmUgcGlucyBhcmUgY29uZmlndXJlZCBhcyBvdXRwdXRzIGluIEFJRkRJUkNGRy4KKy8vIC0gQUlGRE1BQ0ZHIGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplLCBhbmQgMzIgQkNMSworLy8gY3ljbGUgdGlja3MgaGF2ZSBoYXBwZW5lZC4KKy8vIC0gMiBzYW1wbGVzIGhhdmUgYmVlbiBwcmVsb2FkZWQgZnJvbSBtZW1vcnkgKGV4YW1pbmUgdGhlIEFJRk9VVFBUUiByZWdpc3RlcgorLy8gaWYgbmVjZXNzYXJ5KS4KKy8vIE5vdGU6IFRoZSBtZW1vcnkgcmVhZCBhY2Nlc3MgaXMgb25seSBwZXJmb3JtZWQgd2hlbiByZXF1aXJlZCwgdGhhdCBpcworLy8gY2hhbm5lbHMgMC8xIG11c3QgYmUgc2VsZWN0ZWQgaW4gQUlGV01BU0swL0FJRldNQVNLMS4KKy8vCisvLyBOb3RlOiBUbyBhdm9pZCBmYWxzZSB0cmlnZ2VycywgdGhpcyBiaXQgZmllbGQgc2hvdWxkIGJlIHNldCBoaWdoZXIgdGhhbgorLy8gU1RNUFdQRVIuVkFMVUUuCisjZGVmaW5lIEkyU19TVE1QT1VUVFJJR19PVVRfU1RBUlRfV0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBPVVRUUklHX09VVF9TVEFSVF9XQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUE9VVFRSSUdfT1VUX1NUQVJUX1dDTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFdTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBWQUxVRQorLy8KKy8vIFdDTEsgY291bnRlciBtb2RpZmljYXRpb246IFNldHMgdGhlIHJ1bm5pbmcgV0NMSyBjb3VudGVyIGVxdWFsIHRvIHRoZQorLy8gd3JpdHRlbiB2YWx1ZS4KKyNkZWZpbmUgSTJTX1NUTVBXU0VUX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFdTRVRfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QV1NFVF9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QV0FERAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFZBTFVFX0lOQworLy8KKy8vIFdDTEsgY291bnRlciBtb2RpZmljYXRpb246IEFkZHMgdGhlIHdyaXR0ZW4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgV0NMSworLy8gY291bnRlci4gSWYgYSBwb3NpdGl2ZSBlZGdlIG9mIFdDTEsgb2NjdXJzIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisvLyBvcGVyYXRpb24sIHRoaXMgd2lsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQuCisvLyBUbyBhZGQgYSBuZWdhdGl2ZSB2YWx1ZSwgd3JpdGUgIlNUTVBXUEVSLlZBTFVFIC0gdmFsdWUiLgorLy8KKyNkZWZpbmUgSTJTX1NUTVBXQUREX1ZBTFVFX0lOQ19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFdBRERfVkFMVUVfSU5DX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QV0FERF9WQUxVRV9JTkNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QWFBFUk1JTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIFZBTFVFCisvLworLy8gRWFjaCB0aW1lIFNUTVBYUEVSIGlzIHVwZGF0ZWQsIHRoZSB2YWx1ZSBpcyBhbHNvIGxvYWRlZCBpbnRvIHRoaXMgcmVnaXN0ZXIsCisvLyBwcm92aWRlZCB0aGF0IHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhpcyByZWdpc3Rlci4KKy8vIFdoZW4gd3JpdHRlbiwgdGhlIHJlZ2lzdGVyIGlzIHJlc2V0IHRvIDB4RkZGRiAoNjU1MzUpLCByZWdhcmRsZXNzIG9mIHRoZQorLy8gdmFsdWUgd3JpdHRlbi4KKy8vIFRoZSBtaW5pbXVtIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBleHRyYSBXQ0xLIHB1bHNlcyAodGhpcyByZWdpc3RlcnMKKy8vIHZhbHVlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBzbWFsbGVyIHRoYW4gU1RNUFhQRVIuVkFMVUUpLgorI2RlZmluZSBJMlNfU1RNUFhQRVJNSU5fVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QWFBFUk1JTl9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBYUEVSTUlOX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBXQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQ1VSUl9WQUxVRQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgdGhlIFdDTEsgY291bnRlcgorI2RlZmluZSBJMlNfU1RNUFdDTlRfQ1VSUl9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QV0NOVF9DVVJSX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBXQ05UX0NVUlJfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX1NUTVBYQ05UCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQ1VSUl9WQUxVRQorLy8KKy8vIEN1cnJlbnQgdmFsdWUgb2YgdGhlIFhPU0MgY291bnRlciwgbGF0Y2hlZCB3aGVuIHJlYWRpbmcgU1RNUFdDTlQuCisjZGVmaW5lIEkyU19TVE1QWENOVF9DVVJSX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSTJTX1NUTVBYQ05UX0NVUlJfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBJMlNfU1RNUFhDTlRfQ1VSUl9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSTJTX09fU1RNUFhDTlRDQVBUMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE1OjBdIENBUFRfVkFMVUUKKy8vCisvLyBDaGFubmVsIDEgaXMgaWRsZSBhbmQgY2FuIG5vdCBiZSBzYW1wbGVkIGZyb20gYW4gZXh0ZXJuYWwgcHVsc2UgYXMgd2l0aAorLy8gQ2hhbm5lbCAwIFNUTVBYQ05UQ0FQVDAKKyNkZWZpbmUgSTJTX1NUTVBYQ05UQ0FQVDFfQ0FQVF9WQUxVRV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJMlNfU1RNUFhDTlRDQVBUMV9DQVBUX1ZBTFVFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEkyU19TVE1QWENOVENBUFQxX0NBUFRfVkFMVUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19TVE1QV0NOVENBUFQxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gQ0FQVF9WQUxVRQorLy8KKy8vIENoYW5uZWwgMSBpcyBpZGxlIGFuZCBjYW4gbm90IGJlIHNhbXBsZWQgZnJvbSBhbiBleHRlcm5hbCBldmVudCBhcyB3aXRoCisvLyBDaGFubmVsIDAgU1RNUFdDTlRDQVBUMAorI2RlZmluZSBJMlNfU1RNUFdDTlRDQVBUMV9DQVBUX1ZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEkyU19TVE1QV0NOVENBUFQxX0NBUFRfVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgSTJTX1NUTVBXQ05UQ0FQVDFfQ0FQVF9WQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0lSUU1BU0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBBSUZfRE1BX0lOCisvLworLy8gRGVmaW5lcyB0aGUgbWFza3Mgc3RhdGUgZm9yIHRoZSBpbnRlcnJ1cHQgIG9mIElSUUZMQUdTLkFJRl9ETUFfSU4KKy8vCisvLyAwOiBEaXNhYmxlCisvLyAxOiBFbmFibGUKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQUlGX0RNQV9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfSVJRTUFTS19BSUZfRE1BX0lOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEkyU19JUlFNQVNLX0FJRl9ETUFfSU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQUlGX0RNQV9JTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBSUZfRE1BX09VVAorLy8KKy8vIERlZmluZXMgdGhlIG1hc2tzIHN0YXRlIGZvciB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkFJRl9ETUFfT1VUCisvLworLy8gMDogRGlzYWJsZQorLy8gMTogRW5hYmxlCisjZGVmaW5lIEkyU19JUlFNQVNLX0FJRl9ETUFfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQUlGX0RNQV9PVVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMlNfSVJRTUFTS19BSUZfRE1BX09VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFNQVNLX0FJRl9ETUFfT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gV0NMS19USU1FT1VUCisvLworLy8gRGVmaW5lcyB0aGUgbWFza3Mgc3RhdGUgZm9yIHRoZSBpbnRlcnJ1cHQgIG9mIElSUUZMQUdTLldDTEtfVElNRU9VVAorLy8KKy8vIDA6IERpc2FibGUKKy8vIDE6IEVuYWJsZQorI2RlZmluZSBJMlNfSVJRTUFTS19XQ0xLX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyU19JUlFNQVNLX1dDTEtfVElNRU9VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSTJTX0lSUU1BU0tfV0NMS19USU1FT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRTUFTS19XQ0xLX1RJTUVPVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEJVU19FUlIKKy8vCisvLyBEZWZpbmVzIHRoZSBtYXNrcyBzdGF0ZSBmb3IgdGhlIGludGVycnVwdCAgb2YgSVJRRkxBR1MuQlVTX0VSUgorLy8KKy8vIDA6IERpc2FibGUKKy8vIDE6IEVuYWJsZQorI2RlZmluZSBJMlNfSVJRTUFTS19CVVNfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19JUlFNQVNLX0JVU19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0lSUU1BU0tfQlVTX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRTUFTS19CVVNfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdDTEtfRVJSCisvLworLy8gRGVmaW5lcyB0aGUgbWFza3Mgc3RhdGUgZm9yIHRoZSBpbnRlcnJ1cHQgIG9mIElSUUZMQUdTLldDTEtfRVJSCisvLworLy8gMDogRGlzYWJsZQorLy8gMTogRW5hYmxlCisjZGVmaW5lIEkyU19JUlFNQVNLX1dDTEtfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0lSUU1BU0tfV0NMS19FUlJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMlNfSVJRTUFTS19XQ0xLX0VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19JUlFNQVNLX1dDTEtfRVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUFRSX0VSUgorLy8KKy8vIERlZmluZXMgdGhlIG1hc2tzIHN0YXRlIGZvciB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLlBUUl9FUlIKKy8vCisvLyAwOiBEaXNhYmxlCisvLyAxOiBFbmFibGUKKyNkZWZpbmUgSTJTX0lSUU1BU0tfUFRSX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfSVJRTUFTS19QVFJfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyU19JUlFNQVNLX1BUUl9FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lSUU1BU0tfUFRSX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0lSUUZMQUdTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNV0gQUlGX0RNQV9JTgorLy8KKy8vIFNldCB3aGVuIGNvbmRpdGlvbiBmb3IgdGhpcyBiaXQgZmllbGQgZXZlbnQgb2NjdXJzIChhdXRvIGNsZWFyZWQgd2hlbiBpbnB1dAorLy8gcG9pbnRlciBpcyB1cGRhdGVkIC0gQUlGSU5QVFIpLCBzZWUgZGVzY3JpcHRpb24gb2YgQUlGSU5QVFIgcmVnaXN0ZXIKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0FJRl9ETUFfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfSVJRRkxBR1NfQUlGX0RNQV9JTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEkyU19JUlFGTEFHU19BSUZfRE1BX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0FJRl9ETUFfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBBSUZfRE1BX09VVAorLy8KKy8vIFNldCB3aGVuIGNvbmRpdGlvbiBmb3IgdGhpcyBiaXQgZmllbGQgZXZlbnQgb2NjdXJzIChhdXRvIGNsZWFyZWQgd2hlbiBvdXRwdXQKKy8vIHBvaW50ZXIgaXMgdXBkYXRlZCAtIEFJRk9VVFBUUiksIHNlZSBkZXNjcmlwdGlvbiBvZiBBSUZPVVRQVFIgcmVnaXN0ZXIgZm9yCisvLyBkZXRhaWxzCisjZGVmaW5lIEkyU19JUlFGTEFHU19BSUZfRE1BX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0FJRl9ETUFfT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMlNfSVJRRkxBR1NfQUlGX0RNQV9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFGTEFHU19BSUZfRE1BX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gV0NMS19USU1FT1VUCisvLworLy8gU2V0IHdoZW4gdGhlIHNhbXBsZSBzdGFtcCBnZW5lcmF0b3IgZG9lcyBub3QgZGV0ZWN0IGEgcG9zaXRpdmUgV0NMSyBlZGdlIGZvcgorLy8gIDY1NTM1IGNsayBwZXJpb2RzLiBUaGlzIHNpZ25hbGl6ZXMgdGhhdCB0aGUgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgQkNMSyBhbmQKKy8vIFdDTEsgZ2VuZXJhdG9yIHNvdXJjZSBoYXMgYmVlbiBkaXNhYmxlZC4KKy8vCisvLyBUaGUgYml0IGlzIHN0aWNreSBhbmQgbWF5IG9ubHkgYmUgY2xlYXJlZCBieSBzb2Z0d2FyZSAoYnkgd3JpdGluZyAnMScgdG8KKy8vIElSUUNMUi5XQ0xLX1RJTUVPVVQpLgorI2RlZmluZSBJMlNfSVJRRkxBR1NfV0NMS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyU19JUlFGTEFHU19XQ0xLX1RJTUVPVVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1dDTEtfVElNRU9VVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRRkxBR1NfV0NMS19USU1FT1VUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEJVU19FUlIKKy8vCisvLyBTZXQgd2hlbiBhIERNQSBvcGVyYXRpb24gaXMgbm90IGNvbXBsZXRlZCBpbiB0aW1lICh0aGF0IGlzIGF1ZGlvIG91dHB1dAorLy8gYnVmZmVyIHVuZGVyZmxvdywgb3IgYXVkaW8gaW5wdXQgYnVmZmVyIG92ZXJmbG93KS4KKy8vIFRoaXMgZXJyb3IgcmVxdWlyZXMgYSBjb21wbGV0ZSByZXN0YXJ0IHNpbmNlIHdvcmQgc3luY2hyb25pemF0aW9uIGhhcyBiZWVuCisvLyBsb3N0LiBUaGUgYml0IGlzIHN0aWNreSBhbmQgbWF5IG9ubHkgYmUgY2xlYXJlZCBieSBzb2Z0d2FyZSAoYnkgd3JpdGluZyAnMScKKy8vIHRvIElSUUNMUi5CVVNfRVJSKS4KKy8vCisvLyBOb3RlIHRoYXQgRE1BIGluaXRpYXRlZCB0cmFuc2FjdGlvbnMgdG8gaWxsZWdhbCBhZGRyZXNzZXMgd2lsbCBub3QgdHJpZ2dlcgorLy8gYW4gaW50ZXJydXB0LiBUaGUgcmVzcG9uc2UgdG8gc3VjaCB0cmFuc2FjdGlvbnMgaXMgdW5kZWZpbmVkLgorI2RlZmluZSBJMlNfSVJRRkxBR1NfQlVTX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19JUlFGTEFHU19CVVNfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX0JVU19FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRRkxBR1NfQlVTX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdDTEtfRVJSCisvLworLy8gU2V0IHdoZW46CisvLyAtIEFuIHVuZXhwZWN0ZWQgV0NMSyBlZGdlIG9jY3VycyBkdXJpbmcgdGhlIGRhdGEgZGVsYXkgcGVyaW9kIG9mIGEgcGhhc2UuCisvLyBOb3RlIHVuZXhwZWN0ZWQgV0NMSyBlZGdlcyBkdXJpbmcgdGhlIHdvcmQgYW5kIGlkbGUgcGVyaW9kcyBvZiB0aGUgcGhhc2UgYXJlCisvLyBub3QgZGV0ZWN0ZWQuCisvLyAtICBJbiBkdWFsLXBoYXNlIG1vZGUsIHdoZW4gdHdvIFdDTEsgZWRnZXMgYXJlIGxlc3MgdGhhbiA0IEJDTEsgY3ljbGVzCisvLyBhcGFydC4KKy8vIC0gIEluIHNpbmdsZS1waGFzZSBtb2RlLCB3aGVuIGEgV0NMSyBwdWxzZSBvY2N1cnMgYmVmb3JlIHRoZSBsYXN0IGNoYW5uZWwuCisvLyBUaGlzIGVycm9yIHJlcXVpcmVzIGEgY29tcGxldGUgcmVzdGFydCBzaW5jZSB3b3JkIHN5bmNocm9uaXphdGlvbiBoYXMgYmVlbgorLy8gbG9zdC4gVGhlIGJpdCBpcyBzdGlja3kgYW5kIG1heSBvbmx5IGJlIGNsZWFyZWQgYnkgc29mdHdhcmUgKGJ5IHdyaXRpbmcgJzEnCisvLyB0byBJUlFDTFIuV0NMS19FUlIpLgorI2RlZmluZSBJMlNfSVJRRkxBR1NfV0NMS19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19JUlFGTEFHU19XQ0xLX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1dDTEtfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfSVJRRkxBR1NfV0NMS19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFBUUl9FUlIKKy8vCisvLyBTZXQgd2hlbiBBSUZJTlBUUk5FWFQgb3IgQUlGT1VUUFRSTkVYVCBoYXMgbm90IGJlZW4gbG9hZGVkIHdpdGggdGhlIG5leHQKKy8vIGJsb2NrIGFkZHJlc3MgaW4gdGltZS4KKy8vIFRoaXMgZXJyb3IgcmVxdWlyZXMgYSBjb21wbGV0ZSByZXN0YXJ0IHNpbmNlIHdvcmQgc3luY2hyb25pemF0aW9uIGhhcyBiZWVuCisvLyBsb3N0LiBUaGUgYml0IGlzIHN0aWNreSBhbmQgbWF5IG9ubHkgYmUgY2xlYXJlZCBieSBzb2Z0d2FyZSAoYnkgd3JpdGluZyAnMScKKy8vIHRvIElSUUNMUi5QVFJfRVJSKS4KKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1BUUl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfSVJRRkxBR1NfUFRSX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyU19JUlFGTEFHU19QVFJfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lSUUZMQUdTX1BUUl9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IEkyU19PX0lSUVNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzVdIEFJRl9ETUFfSU4KKy8vCisvLyAxOiBTZXRzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuQUlGX0RNQV9JTiAodW5sZXNzIGEgYXV0byBjbGVhciBjcml0ZXJpYQorLy8gd2FzIGdpdmVuIGF0IHRoZSBzYW1lIHRpbWUsIGluIHdoaWNoIHRoZSBzZXQgd2lsbCBiZSBpZ25vcmVkKQorI2RlZmluZSBJMlNfSVJRU0VUX0FJRl9ETUFfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyU19JUlFTRVRfQUlGX0RNQV9JTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJTX0lSUVNFVF9BSUZfRE1BX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfSVJRU0VUX0FJRl9ETUFfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFJRl9ETUFfT1VUCisvLworLy8gMTogU2V0cyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLkFJRl9ETUFfT1VUICh1bmxlc3MgYSBhdXRvIGNsZWFyIGNyaXRlcmlhCisvLyB3YXMgZ2l2ZW4gYXQgdGhlIHNhbWUgdGltZSwgaW4gd2hpY2ggdGhlIHNldCB3aWxsIGJlIGlnbm9yZWQpCisjZGVmaW5lIEkyU19JUlFTRVRfQUlGX0RNQV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJTX0lSUVNFVF9BSUZfRE1BX09VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBJMlNfSVJRU0VUX0FJRl9ETUFfT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEkyU19JUlFTRVRfQUlGX0RNQV9PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gV0NMS19USU1FT1VUCisvLworLy8gMTogU2V0cyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLldDTEtfVElNRU9VVAorI2RlZmluZSBJMlNfSVJRU0VUX1dDTEtfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEkyU19JUlFTRVRfV0NMS19USU1FT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSTJTX0lSUVNFVF9XQ0xLX1RJTUVPVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRU0VUX1dDTEtfVElNRU9VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEJVU19FUlIKKy8vCisvLyAxOiBTZXRzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuQlVTX0VSUgorI2RlZmluZSBJMlNfSVJRU0VUX0JVU19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19JUlFTRVRfQlVTX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0lSUVNFVF9CVVNfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRU0VUX0JVU19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdDTEtfRVJSCisvLworLy8gMTogU2V0cyB0aGUgaW50ZXJydXB0IG9mIElSUUZMQUdTLldDTEtfRVJSCisjZGVmaW5lIEkyU19JUlFTRVRfV0NMS19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0lSUVNFVF9XQ0xLX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJMlNfSVJRU0VUX1dDTEtfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEkyU19JUlFTRVRfV0NMS19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUFRSX0VSUgorLy8KKy8vIDE6IFNldHMgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5QVFJfRVJSCisjZGVmaW5lIEkyU19JUlFTRVRfUFRSX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJTX0lSUVNFVF9QVFJfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMlNfSVJRU0VUX1BUUl9FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19JUlFTRVRfUFRSX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJMlNfT19JUlFDTFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs1XSBBSUZfRE1BX0lOCisvLworLy8gMTogQ2xlYXJzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuQUlGX0RNQV9JTiAodW5sZXNzIGEgc2V0IGNyaXRlcmlhIHdhcworLy8gZ2l2ZW4gYXQgdGhlIHNhbWUgdGltZSBpbiB3aGljaCB0aGUgY2xlYXIgd2lsbCBiZSBpZ25vcmVkKQorI2RlZmluZSBJMlNfSVJRQ0xSX0FJRl9ETUFfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEkyU19JUlFDTFJfQUlGX0RNQV9JTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgSTJTX0lSUUNMUl9BSUZfRE1BX0lOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJMlNfSVJRQ0xSX0FJRl9ETUFfSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIEFJRl9ETUFfT1VUCisvLworLy8gMTogQ2xlYXJzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuQUlGX0RNQV9PVVQgKHVubGVzcyBhIHNldCBjcml0ZXJpYSB3YXMKKy8vIGdpdmVuIGF0IHRoZSBzYW1lIHRpbWUgaW4gd2hpY2ggdGhlIGNsZWFyIHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUUNMUl9BSUZfRE1BX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJMlNfSVJRQ0xSX0FJRl9ETUFfT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEkyU19JUlFDTFJfQUlGX0RNQV9PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSTJTX0lSUUNMUl9BSUZfRE1BX09VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBXQ0xLX1RJTUVPVVQKKy8vCisvLyAxOiBDbGVhcnMgdGhlIGludGVycnVwdCBvZiBJUlFGTEFHUy5XQ0xLX1RJTUVPVVQgKHVubGVzcyBhIHNldCBjcml0ZXJpYSB3YXMKKy8vIGdpdmVuIGF0IHRoZSBzYW1lIHRpbWUgaW4gd2hpY2ggdGhlIGNsZWFyIHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUUNMUl9XQ0xLX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJMlNfSVJRQ0xSX1dDTEtfVElNRU9VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEkyU19JUlFDTFJfV0NMS19USU1FT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSTJTX0lSUUNMUl9XQ0xLX1RJTUVPVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBCVVNfRVJSCisvLworLy8gMTogQ2xlYXJzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuQlVTX0VSUiAodW5sZXNzIGEgc2V0IGNyaXRlcmlhIHdhcyBnaXZlbgorLy8gYXQgdGhlIHNhbWUgdGltZSBpbiB3aGljaCB0aGUgY2xlYXIgd2lsbCBiZSBpZ25vcmVkKQorI2RlZmluZSBJMlNfSVJRQ0xSX0JVU19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEkyU19JUlFDTFJfQlVTX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSTJTX0lSUUNMUl9CVVNfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJMlNfSVJRQ0xSX0JVU19FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFdDTEtfRVJSCisvLworLy8gMTogQ2xlYXJzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuV0NMS19FUlIgKHVubGVzcyBhIHNldCBjcml0ZXJpYSB3YXMKKy8vIGdpdmVuIGF0IHRoZSBzYW1lIHRpbWUgaW4gd2hpY2ggdGhlIGNsZWFyIHdpbGwgYmUgaWdub3JlZCkKKyNkZWZpbmUgSTJTX0lSUUNMUl9XQ0xLX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJMlNfSVJRQ0xSX1dDTEtfRVJSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEkyU19JUlFDTFJfV0NMS19FUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJTX0lSUUNMUl9XQ0xLX0VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBQVFJfRVJSCisvLworLy8gMTogQ2xlYXJzIHRoZSBpbnRlcnJ1cHQgb2YgSVJRRkxBR1MuUFRSX0VSUiAodW5sZXNzIGEgc2V0IGNyaXRlcmlhIHdhcyBnaXZlbgorLy8gYXQgdGhlIHNhbWUgdGltZSBpbiB3aGljaCB0aGUgY2xlYXIgd2lsbCBiZSBpZ25vcmVkKQorI2RlZmluZSBJMlNfSVJRQ0xSX1BUUl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEkyU19JUlFDTFJfUFRSX0VSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSTJTX0lSUUNMUl9QVFJfRVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJMlNfSVJRQ0xSX1BUUl9FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fSTJTX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ludHMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2ludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBkZjVmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfaW50cy5oCkBAIC0wLDAgKzEsMTEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfaW50c19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19JTlRTX0hfXworI2RlZmluZSBfX0hXX0lOVFNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgaW50ZXJydXB0IGFzc2lnbm1lbnRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSU5UX05NSV9GQVVMVCAgICAgICAgICAgICAgICAgICAgMiAvLyBOTUkgRmF1bHQKKyNkZWZpbmUgSU5UX0hBUkRfRkFVTFQgICAgICAgICAgICAgICAgICAgMyAvLyBIYXJkIEZhdWx0CisjZGVmaW5lIElOVF9NRU1NQU5BR0VfRkFVTFQgICAgICAgICAgICAgIDQgLy8gTWVtb3J5IE1hbmFnZW1lbnQgKE1lbU1hbmFnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXVsdAorI2RlZmluZSBJTlRfQlVTX0ZBVUxUICAgICAgICAgICAgICAgICAgICA1IC8vIEJ1cyBGYXVsdAorI2RlZmluZSBJTlRfVVNBR0VfRkFVTFQgICAgICAgICAgICAgICAgICA2IC8vIFVzYWdlIEZhdWx0CisjZGVmaW5lIElOVF9TVkNBTEwgICAgICAgICAgICAgICAgICAgICAgMTEgLy8gU3VwZXJ2aXNvciBDYWxsIChTVkNhbGwpCisjZGVmaW5lIElOVF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgMTIgLy8gRGVidWcgTW9uaXRvcgorI2RlZmluZSBJTlRfUEVORFNWICAgICAgICAgICAgICAgICAgICAgIDE0IC8vIFBlbmRpbmcgU2VydmljZSBDYWxsIChQZW5kU1YpCisjZGVmaW5lIElOVF9TWVNUSUNLICAgICAgICAgICAgICAgICAgICAgMTUgLy8gU3lzVGljayBJbnRlcnJ1cHQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gVGltZXIgaW4gTlZJQy4KKyNkZWZpbmUgSU5UX0FPTl9HUElPX0VER0UgICAgICAgICAgICAgICAxNiAvLyBFZGdlIGRldGVjdCBldmVudCBmcm9tIElPQworI2RlZmluZSBJTlRfSTJDX0lSUSAgICAgICAgICAgICAgICAgICAgIDE3IC8vIEludGVycnVwdCBldmVudCBmcm9tIEkyQworI2RlZmluZSBJTlRfUkZDX0NQRV8xICAgICAgICAgICAgICAgICAgIDE4IC8vIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGVkIGV2ZW50cworI2RlZmluZSBJTlRfQU9OX1JUQ19DT01CICAgICAgICAgICAgICAgIDIwIC8vIEV2ZW50IGZyb20gQU9OX1JUQworI2RlZmluZSBJTlRfVUFSVDBfQ09NQiAgICAgICAgICAgICAgICAgIDIxIC8vIFVBUlQwIGNvbWJpbmVkIGludGVycnVwdAorI2RlZmluZSBJTlRfQVVYX1NXRVYwICAgICAgICAgICAgICAgICAgIDIyIC8vIEFVWCBzb2Z0d2FyZSBldmVudCAwCisjZGVmaW5lIElOVF9TU0kwX0NPTUIgICAgICAgICAgICAgICAgICAgMjMgLy8gU1NJMCBjb21iaW5lZCBpbnRlcnJ1cHQKKyNkZWZpbmUgSU5UX1NTSTFfQ09NQiAgICAgICAgICAgICAgICAgICAyNCAvLyBTU0kwIGNvbWJpbmVkIGludGVycnVwdAorI2RlZmluZSBJTlRfUkZDX0NQRV8wICAgICAgICAgICAgICAgICAgIDI1IC8vIENvbWJpbmVkIEludGVycnVwdCBmb3IgQ1BFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGVkIGV2ZW50cworI2RlZmluZSBJTlRfUkZDX0hXX0NPTUIgICAgICAgICAgICAgICAgIDI2IC8vIENvbWJpbmVkIFJDRiBoYXJkd2FyZSBpbnRlcnJ1cHQKKyNkZWZpbmUgSU5UX1JGQ19DTURfQUNLICAgICAgICAgICAgICAgICAyNyAvLyBSRkMgRG9vcmJlbGwgQ29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQKKyNkZWZpbmUgSU5UX0kyU19JUlEgICAgICAgICAgICAgICAgICAgICAyOCAvLyBJbnRlcnJ1cHQgZXZlbnQgZnJvbSBJMlMKKyNkZWZpbmUgSU5UX0FVWF9TV0VWMSAgICAgICAgICAgICAgICAgICAyOSAvLyBBVVggc29mdHdhcmUgZXZlbnQgMQorI2RlZmluZSBJTlRfV0RUX0lSUSAgICAgICAgICAgICAgICAgICAgIDMwIC8vIFdhdGNoZG9nIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUMEEgICAgICAgICAgICAgICAgICAgICAgIDMxIC8vIEdQVDBBIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUMEIgICAgICAgICAgICAgICAgICAgICAgIDMyIC8vIEdQVDBCIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUMUEgICAgICAgICAgICAgICAgICAgICAgIDMzIC8vIEdQVDFBIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUMUIgICAgICAgICAgICAgICAgICAgICAgIDM0IC8vIEdQVDFCIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUMkEgICAgICAgICAgICAgICAgICAgICAgIDM1IC8vIEdQVDJBIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUMkIgICAgICAgICAgICAgICAgICAgICAgIDM2IC8vIEdQVDJCIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUM0EgICAgICAgICAgICAgICAgICAgICAgIDM3IC8vIEdQVDNBIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfR1BUM0IgICAgICAgICAgICAgICAgICAgICAgIDM4IC8vIEdQVDNCIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfQ1JZUFRPX1JFU1VMVF9BVkFJTF9JUlEgICAgIDM5IC8vIENSWVBUTyByZXN1bHQgYXZhaWxhYmxlIGludGVydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnQKKyNkZWZpbmUgSU5UX0RNQV9ET05FX0NPTUIgICAgICAgICAgICAgICA0MCAvLyBDb21iaW5lZCBETUEgZG9uZQorI2RlZmluZSBJTlRfRE1BX0VSUiAgICAgICAgICAgICAgICAgICAgIDQxIC8vIERNQSBidXMgZXJyb3IKKyNkZWZpbmUgSU5UX0ZMQVNIICAgICAgICAgICAgICAgICAgICAgICA0MiAvLyBGTEFTSCBjb250cm9sbGVyIGVycm9yIGV2ZW50CisjZGVmaW5lIElOVF9TV0VWMCAgICAgICAgICAgICAgICAgICAgICAgNDMgLy8gU29mdHdhcmUgZXZlbnQgMAorI2RlZmluZSBJTlRfQVVYX0NPTUIgICAgICAgICAgICAgICAgICAgIDQ0IC8vIEFVWCBjb21iaW5lZCBldmVudAorI2RlZmluZSBJTlRfQU9OX1BST0cwICAgICAgICAgICAgICAgICAgIDQ1IC8vIEFPTiBwcm9ncmFtbWFibGUgZXZlbnQgMAorI2RlZmluZSBJTlRfUFJPRzAgICAgICAgICAgICAgICAgICAgICAgIDQ2IC8vIFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgMAorI2RlZmluZSBJTlRfQVVYX0NPTVBBICAgICAgICAgICAgICAgICAgIDQ3IC8vIEFVWCBDb21wYXJlIEEgZXZlbnQKKyNkZWZpbmUgSU5UX0FVWF9BRENfSVJRICAgICAgICAgICAgICAgICA0OCAvLyBBVVggQURDIGludGVycnVwdCBldmVudAorI2RlZmluZSBJTlRfVFJOR19JUlEgICAgICAgICAgICAgICAgICAgIDQ5IC8vIFRSTkcgSW50ZXJydXB0IGV2ZW50CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciBudW1iZXIgb2YgaW50ZXJydXB0cyBhbmQgcHJpb3JpdHkgbGV2ZWxzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlVNX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgICA1MCAvLyBOdW1iZXIgb2YgaW50ZXJydXB0cworI2RlZmluZSBOVU1fUFJJT1JJVFlfQklUUyAgICAgICAgICAgICAgICAzIC8vIE51bWJlciBvZiBQcmlvcml0eSBiaXRzCisjZGVmaW5lIE5VTV9QUklPUklUWSAgICAgICAgICAgICAgICAgICAgIDggLy8gTnVtYmVyIG9mIHByaW9yaXR5IGxldmVscworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBBbGlhc2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFNlbnNvciBDb250cm9sbGVyIFN0dWRpbyAxLjEuMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworI2RlZmluZSBJTlRfQU9OX0FVWF9TV0VWMCAgICBJTlRfQVVYX1NXRVYwCisjZGVmaW5lIElOVF9BT05fQVVYX1NXRVYxICAgIElOVF9BVVhfU1dFVjEKKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pb2MuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTIyNDUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19pb2MuaApAQCAtMCwwICsxLDk4MzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19pb2NfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfSU9DX0hfXworI2RlZmluZSBfX0hXX0lPQ19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBJT0MgY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gQ29uZmlndXJhdGlvbiBvZiBESU8wCisjZGVmaW5lIElPQ19PX0lPQ0ZHMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xCisjZGVmaW5lIElPQ19PX0lPQ0ZHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yCisjZGVmaW5lIElPQ19PX0lPQ0ZHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8zCisjZGVmaW5lIElPQ19PX0lPQ0ZHMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU80CisjZGVmaW5lIElPQ19PX0lPQ0ZHNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU81CisjZGVmaW5lIElPQ19PX0lPQ0ZHNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU82CisjZGVmaW5lIElPQ19PX0lPQ0ZHNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU83CisjZGVmaW5lIElPQ19PX0lPQ0ZHNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU84CisjZGVmaW5lIElPQ19PX0lPQ0ZHOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU85CisjZGVmaW5lIElPQ19PX0lPQ0ZHOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xMAorI2RlZmluZSBJT0NfT19JT0NGRzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTEKKyNkZWZpbmUgSU9DX09fSU9DRkcxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzEyCisjZGVmaW5lIElPQ19PX0lPQ0ZHMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xMworI2RlZmluZSBJT0NfT19JT0NGRzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTQKKyNkZWZpbmUgSU9DX09fSU9DRkcxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzE1CisjZGVmaW5lIElPQ19PX0lPQ0ZHMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xNgorI2RlZmluZSBJT0NfT19JT0NGRzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMTcKKyNkZWZpbmUgSU9DX09fSU9DRkcxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzE4CisjZGVmaW5lIElPQ19PX0lPQ0ZHMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8xOQorI2RlZmluZSBJT0NfT19JT0NGRzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjAKKyNkZWZpbmUgSU9DX09fSU9DRkcyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzIxCisjZGVmaW5lIElPQ19PX0lPQ0ZHMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yMgorI2RlZmluZSBJT0NfT19JT0NGRzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjMKKyNkZWZpbmUgSU9DX09fSU9DRkcyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzI0CisjZGVmaW5lIElPQ19PX0lPQ0ZHMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yNQorI2RlZmluZSBJT0NfT19JT0NGRzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjYKKyNkZWZpbmUgSU9DX09fSU9DRkcyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzI3CisjZGVmaW5lIElPQ19PX0lPQ0ZHMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8yOAorI2RlZmluZSBJT0NfT19JT0NGRzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisKKy8vIENvbmZpZ3VyYXRpb24gb2YgRElPMjkKKyNkZWZpbmUgSU9DX09fSU9DRkcyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorCisvLyBDb25maWd1cmF0aW9uIG9mIERJTzMwCisjZGVmaW5lIElPQ19PX0lPQ0ZHMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKworLy8gQ29uZmlndXJhdGlvbiBvZiBESU8zMQorI2RlZmluZSBJT0NfT19JT0NGRzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzBfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzBfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcwX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzBfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0L291dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0dXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcwX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcwX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcwX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcwX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzBfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcwX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzBfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzBfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcwX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzBfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcwX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcwX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzBfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcwX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzBfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcwX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8wCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzBfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcwX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzFfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzFfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzFfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzFfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzFfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzFfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzFfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzFfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzFfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzFfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzJfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzJfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzJfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzJfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzJfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzJfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzJfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzJfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzJfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzJfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMl9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkczCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHM19IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzNfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHM19JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzNfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkczX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzNfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkczX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkczX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHM19QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzNfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkczX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzNfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzNfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkczX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzNfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkczX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzNfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkczX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzNfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHM19JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkczX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8zCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzNfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHM19QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkczX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkc0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzRfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzRfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkc0X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzRfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkc0X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc0X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc0X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc0X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzRfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc0X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzRfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzRfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkc0X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzRfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc0X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkc0X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzRfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkc0X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzRfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkc0X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU80CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzRfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHNF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkc0X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkc1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzVfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzVfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkc1X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzVfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkc1X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc1X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc1X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc1X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzVfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc1X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzVfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzVfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkc1X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzVfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc1X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkc1X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzVfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkc1X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzVfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkc1X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU81CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzVfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHNV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkc1X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkc2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzZfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzZfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkc2X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzZfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkc2X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc2X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc2X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc2X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzZfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc2X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzZfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzZfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkc2X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzZfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc2X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkc2X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzZfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkc2X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzZfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkc2X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU82CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzZfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHNl9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkc2X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkc3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHN19IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzdfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHN19JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzdfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkc3X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzdfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkc3X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc3X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc3X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHN19QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc3X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzdfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc3X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzdfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzdfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkc3X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzdfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc3X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkc3X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzdfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkc3X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzdfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHN19JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkc3X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU83CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzdfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHN19QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkc3X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkc4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzhfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzhfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkc4X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzhfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkc4X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc4X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc4X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc4X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzhfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc4X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzhfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzhfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkc4X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzhfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc4X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkc4X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzhfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkc4X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzhfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkc4X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU84CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzhfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHOF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkc4X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkc5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzlfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzlfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkc5X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzlfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkc5X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc5X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkc5X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc5X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzlfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkc5X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzlfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzlfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkc5X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzlfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkc5X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkc5X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzlfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkc5X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzlfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkc5X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU85CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzlfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHOV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkc5X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzEwX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxMF9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzEwX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxMF9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMF9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzEwX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzEwX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzEwX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzEwX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxMF9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzEwX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMF9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxMF9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzEwX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTAKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTBfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxMF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzEwX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzExCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzExX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzExX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxMV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzExX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxMV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzExX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzExX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzExX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxMV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzExX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxMV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxMV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzExX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzExX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxMV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xMQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxMV9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzExX1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTFfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxMl9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxMl9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzEyX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEyX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxMl9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEyX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxMl9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzEyX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzEyX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxMl9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzEyX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxMl9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzEyX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzEyCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzEyX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTJfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxMl9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzEzX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxM19IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzEzX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxM19JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxM19XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzEzX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzEzX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzEzX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzEzX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxM19TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzEzX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxM19TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxM19JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxM19JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzEzX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTMKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTNfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxM19QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzEzX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzE0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzE0X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzE0X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxNF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE0X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxNF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzE0X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxNF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxNF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE0X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxNF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xNAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxNF9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzE0X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTRfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxNV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxNV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzE1X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE1X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxNV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE1X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxNV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE1X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzE1X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxNV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzE1X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxNV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzE1X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzE1CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzE1X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTVfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxNV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzE2X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxNl9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzE2X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxNl9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNl9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzE2X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzE2X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzE2X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzE2X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxNl9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE2X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxNl9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxNl9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzE2X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTYKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTZfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxNl9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzE2X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzE3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzE3X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzE3X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcxN19XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE3X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcxN19JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxN19FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxN19QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxN19QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzE3X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcxN19TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxN19JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcxN19JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcxN19JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE3X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcxN19JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8xNworLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcxN19QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzE3X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMTdfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMTgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcxOF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcxOF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzE4X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE4X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcxOF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE4X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcxOF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzE4X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMThfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzE4X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcxOF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzE4X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcxOF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzE4X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzE4CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzE4X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMThfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcxOF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcxOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzE5X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcxOV9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzE5X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcxOV9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxOV9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzE5X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzE5X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzE5X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzE5X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcxOV9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzE5X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcxOV9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcxOV9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzE5X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMTkKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMTlfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcxOV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzE5X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzIwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzIwX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzIwX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyMF9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIwX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyMF9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMF9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMF9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzIwX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyMF9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMF9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyMF9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzIwX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyMF9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yMAorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyMF9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzIwX1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjBfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcyMV9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcyMV9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzIxX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIxX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcyMV9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIxX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcyMV9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzIxX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzIxX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcyMV9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzIxX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcyMV9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzIxX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzIxCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzIxX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjFfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyMV9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzIyX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyMl9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzIyX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyMl9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMl9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzIyX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzIyX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzIyX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzIyX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyMl9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzIyX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyMl9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyMl9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzIyX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjIKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjJfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyMl9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzIyX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzIzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzIzX0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzIzX0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyM19XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIzX1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyM19JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyM19FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyM19QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyM19QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzIzX1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyM19TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyM19JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyM19JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyM19JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzIzX0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyM19JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yMworLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyM19QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzIzX1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjNfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMjQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcyNF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcyNF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzI0X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI0X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcyNF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI0X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcyNF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI0X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzI0X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcyNF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzI0X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcyNF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzI0X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzI0CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzI0X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjRfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyNF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzI1X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyNV9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzI1X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyNV9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNV9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzI1X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzI1X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzI1X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzI1X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyNV9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI1X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNV9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyNV9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzI1X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjUKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjVfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyNV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzI1X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzI2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzI2X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzI2X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyNl9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI2X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyNl9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNl9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNl9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzI2X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyNl9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyNl9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyNl9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI2X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyNl9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yNgorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyNl9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzI2X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjZfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMjcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkcyN19IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkcyN19JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzI3X1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkcyN19JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkcyN19JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI3X0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkcyN19QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI3X1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkcyN19QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI3X1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyN19TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzI3X1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkcyN19JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzI3X0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkcyN19JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzI3X0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzI3CisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzI3X1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjdfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkcyN19QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkcyOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzI4X0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkcyOF9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzI4X0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkcyOF9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOF9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzI4X0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzI4X0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzI4X1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzI4X1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkcyOF9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI4X1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOF9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkcyOF9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzI4X0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMjgKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjhfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkcyOF9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzI4X1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBJT0NfT19JT0NGRzI5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMF0gSFlTVF9FTgorLy8KKy8vIDA6IElucHV0IGh5c3RlcmVzaXMgZGlzYWJsZQorLy8gMTogSW5wdXQgaHlzdGVyZXNpcyBlbmFibGUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSFlTVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9IWVNUX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElPQ19JT0NGRzI5X0hZU1RfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSFlTVF9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorCisvLyBGaWVsZDogICAgWzI5XSBJRQorLy8KKy8vIDA6IElucHV0IGRpc2FibGVkCisvLyAxOiBJbnB1dCBlbmFibGVkCisvLworLy8gTm90ZTogSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQVVYICBpZS4gUE9SVF9JRCA9IDB4MDgsIHRoZSBlbmFibGUgd2lsbCBiZQorLy8gaWdub3JlZC4KKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIElPQ19JT0NGRzI5X0lFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorCisvLyBGaWVsZDogWzI4OjI3XSBXVV9DRkcKKy8vCisvLyBJZiBESU8gaXMgY29uZmlndXJlZCBHUElPIG9yIG5vbi1BT04gcGVyaXBoZXJhbCBzaWduYWxzLCBpLmUuIFBPUlRfSUQgMHgwMAorLy8gb3IgPjB4MDg6CisvLworLy8gMDA6IE5vIHdha2UtdXAKKy8vIDAxOiBObyB3YWtlLXVwCisvLyAxMDogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBsb3cuCisvLyAxMTogV2FrZXMgdXAgZnJvbSBzaHV0ZG93biBpZiB0aGlzIHBhZCBpcyBnb2luZyBoaWdoLgorLy8KKy8vIElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGhlcmFsIHNpZ25hbHMgb3IgQVVYICBpZS4gUE9SVF9JRAorLy8gMHgwMS0weDA4LCB0aGlzIHJlZ2lzdGVyIG9ubHkgc2V0cyB3YWtldXAgZW5hYmxlIG9yIG5vdC4KKy8vCisvLyAwMCwgMDE6IFdha2V1cCBkaXNhYmxlZAorLy8gMTAsIDExOiBXYWtldXAgZW5hYmxlZAorLy8KKy8vIFBvbGFyaXR5IGlzIGNvbnRyb2xsZWQgZnJvbSBBT04gcmVnaXN0ZXJzLgorLy8KKy8vIE5vdGU6V2hlbiB0aGUgTVNCIGlzIHNldCwgdGhlIElPQyB3aWxsIGRlYWN0aXZhdGUgdGhlIG91dHB1dCBlbmFibGUgZm9yIHRoZQorLy8gRElPLgorI2RlZmluZSBJT0NfSU9DRkcyOV9XVV9DRkdfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI5X1dVX0NGR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfV1VfQ0ZHX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogWzI2OjI0XSBJT01PREUKKy8vCisvLyBJTyBNb2RlCisvLyBOL0EgZm9yIElPIGNvbmZpZ3VyZWQgZm9yIEFPTiBwZXJpcGguIHNpZ25hbHMgYW5kIEFVWCAgaWUuIFBPUlRfSUQgMHgwMS0weDA4CisvLyBBVVggaGFzIGl0cyBvd24gb3Blbl9zb3VyY2UvZHJhaW4gY29uZmlndXJhdGlvbi4KKy8vCisvLyAweDI6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyAweDM6IFJlc2VydmVkLiBVbmRlZmluZWQgYmVoYXZpb3IuCisvLyBFTlVNczoKKy8vIE9QRU5TUkNfSU5WICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVOU1JDICAgICAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUl9JTlYgICAgICAgICAgICAgICBPcGVuIERyYWluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5EUiAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gSU5WICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3VwdXQKKy8vIE5PUk1BTCAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9NT0RFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBJT0NfSU9DRkcyOV9JT01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9NT0RFX09QRU5TUkNfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT01PREVfT1BFTlNSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPTU9ERV9PUEVORFJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9NT0RFX09QRU5EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT01PREVfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gRURHRV9JUlFfRU4KKy8vCisvLyAwOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLy8gMTogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uIGZvciB0aGlzIElPIChPbmx5IGVmZmVjdGl2ZSBpZiBFREdFX0RFVCBpcworLy8gZW5hYmxlZCkKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9JUlFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9FREdFX0lSUV9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfSVJRX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9JUlFfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogWzE3OjE2XSBFREdFX0RFVAorLy8KKy8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGVkZ2UgZGV0ZWN0aW9uIGV2ZW50cyBvbiB0aGlzIElPCisvLyBFTlVNczoKKy8vIEJPVEggICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIFBPUyAgICAgICAgICAgICAgICAgICAgICBQb3NpdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTkVHICAgICAgICAgICAgICAgICAgICAgIE5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBOT05FICAgICAgICAgICAgICAgICAgICAgTm8gZWRnZSBkZXRlY3Rpb24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9ERVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOV9FREdFX0RFVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfREVUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9ERVRfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9FREdFX0RFVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0VER0VfREVUX05FRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfRURHRV9ERVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogWzE0OjEzXSBQVUxMX0NUTAorLy8KKy8vIFB1bGwgY29udHJvbAorLy8gRU5VTXM6CisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgTm8gcHVsbAorLy8gVVAgICAgICAgICAgICAgICAgICAgICAgIFB1bGwgdXAKKy8vIERXTiAgICAgICAgICAgICAgICAgICAgICBQdWxsIGRvd24KKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUFVMTF9DVExfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOV9QVUxMX0NUTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X1BVTExfQ1RMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUFVMTF9DVExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9QVUxMX0NUTF9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X1BVTExfQ1RMX0RXTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKworLy8gRmllbGQ6ICAgIFsxMl0gU0xFV19SRUQKKy8vCisvLyAwOiBOb3JtYWwgc2xldyByYXRlCisvLyAxOiBFbmFibGVzIHJlZHVjZWQgc2xldyByYXRlIGluIG91dHB1dCBkcml2ZXIuCisjZGVmaW5lIElPQ19JT0NGRzI5X1NMRVdfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfU0xFV19SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBJT0NfSU9DRkcyOV9TTEVXX1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X1NMRVdfUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6IFsxMToxMF0gSU9DVVJSCisvLworLy8gU2VsZWN0cyBJTyBjdXJyZW50IG1vZGUgb2YgdGhpcyBJTy4KKy8vIEVOVU1zOgorLy8gNF84TUEgICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkLUN1cnJlbnQgKEVDKSBtb2RlOiBNaW4gOCBtQSBmb3IgZG91YmxlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUgc3RyZW5ndGggSU9zIChtaW4gNCBtQSBmb3Igbm9ybWFsIElPcykKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIElPU1RSIGlzIHNldCB0byBBVVRPCisvLyA0TUEgICAgICAgICAgICAgICAgICAgICAgSGlnaC1DdXJyZW50IChIQykgbW9kZTogTWluIDQgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisvLyAyTUEgICAgICAgICAgICAgICAgICAgICAgTG93LUN1cnJlbnQgKExDKSBtb2RlOiBNaW4gMiBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkcyOV9JT0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9DVVJSXzRfOE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT0NVUlJfNE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPQ1VSUl8yTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzk6OF0gSU9TVFIKKy8vCisvLyBTZWxlY3Qgc291cmNlIGZvciBkcml2ZSBzdHJlbmd0aCBjb250cm9sIG9mIHRoaXMgSU8uCisvLyBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRyaXZlIHN0cmVuZ3RoIG9mIHRoZSBMb3ctQ3VycmVudCAoTEMpIG1vZGUuCisvLyBIaWdoZXIgZHJpdmUgc3RyZW5ndGggY2FuIGJlIHNlbGVjdGVkIGluIElPQ1VSUgorLy8gRU5VTXM6CisvLyBNQVggICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNQVggKG1pbiAyIG1BIEAxLjhWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1FRCAgICAgICAgICAgICAgICAgICAgICBNZWRpdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUVEIChtaW4gMiBtQSBAMi41ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNSU4gICAgICAgICAgICAgICAgICAgICAgTWluaW11bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNSU4gKG1pbiAyIG1BIEAzLjNWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIEFVVE8gICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkgQU9OIEJBVE1PTgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGJhdHRlcnkgdm9sdGFnZS4gKG1pbiAyIG1BIEBWRERTKQorI2RlZmluZSBJT0NfSU9DRkcyOV9JT1NUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPU1RSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9TVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT1NUUl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzI5X0lPU1RSX01FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfSU9TVFJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJT0NfSU9DRkcyOV9JT1NUUl9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjBdIFBPUlRfSUQKKy8vCisvLyBTZWxlY3RzIHVzYWdlIGZvciBESU8yOQorLy8gRU5VTXM6CisvLyBSRkNfU01JX0NMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIEluCisvLyBSRkNfU01JX0NMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgQ29tbWFuZCBMaW5rIE91dAorLy8gUkZDX1NNSV9ETF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBJbgorLy8gUkZDX1NNSV9ETF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIERhdGEgTGluayBPdXQKKy8vIFJGQ19HUEkxICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMQorLy8gUkZDX0dQSTAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAwCisvLyBSRkNfR1BPMyAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAzCisvLyBSRkNfR1BPMiAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAyCisvLyBSRkNfR1BPMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAxCisvLyBSRkNfR1BPMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIE91dCAwCisvLyBSRkNfVFJDICAgICAgICAgICAgICAgICAgUkYgQ29yZSBUcmFjZQorLy8gSTJTX01DTEsgICAgICAgICAgICAgICAgIEkyUyBNQ0xLCisvLyBJMlNfQkNMSyAgICAgICAgICAgICAgICAgSTJTIEJDTEsKKy8vIEkyU19XQ0xLICAgICAgICAgICAgICAgICBJMlMgV0NMSworLy8gSTJTX0FEMSAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDEKKy8vIEkyU19BRDAgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAwCisvLyBTU0kxX0NMSyAgICAgICAgICAgICAgICAgU1NJMSBDTEsKKy8vIFNTSTFfRlNTICAgICAgICAgICAgICAgICBTU0kxIEZTUworLy8gU1NJMV9UWCAgICAgICAgICAgICAgICAgIFNTSTEgVFgKKy8vIFNTSTFfUlggICAgICAgICAgICAgICAgICBTU0kxIFJYCisvLyBDUFVfU1dWICAgICAgICAgICAgICAgICAgQ1BVIFNXVgorLy8gUE9SVF9FVkVOVDcgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNiAgICAgICAgICAgICAgUE9SVCBFVkVOVCA2CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ1ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDQgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMyAgICAgICAgICAgICAgUE9SVCBFVkVOVCAzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQyICAgICAgICAgICAgICBQT1JUIEVWRU5UIDIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDEgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMCAgICAgICAgICAgICAgUE9SVCBFVkVOVCAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFVBUlQwX1JUUyAgICAgICAgICAgICAgICBVQVJUMCBSVFMKKy8vIFVBUlQwX0NUUyAgICAgICAgICAgICAgICBVQVJUMCBDVFMKKy8vIFVBUlQwX1RYICAgICAgICAgICAgICAgICBVQVJUMCBUWAorLy8gVUFSVDBfUlggICAgICAgICAgICAgICAgIFVBUlQwIFJYCisvLyBJMkNfTVNTQ0wgICAgICAgICAgICAgICAgSTJDIENsb2NrCisvLyBJMkNfTVNTREEgICAgICAgICAgICAgICAgSTJDIERhdGEKKy8vIFNTSTBfQ0xLICAgICAgICAgICAgICAgICBTU0kwIENMSworLy8gU1NJMF9GU1MgICAgICAgICAgICAgICAgIFNTSTAgRlNTCisvLyBTU0kwX1RYICAgICAgICAgICAgICAgICAgU1NJMCBUWAorLy8gU1NJMF9SWCAgICAgICAgICAgICAgICAgIFNTSTAgUlgKKy8vIEFVWF9JTyAgICAgICAgICAgICAgICAgICBBVVggSU8KKy8vIEFPTl9DTEszMksgICAgICAgICAgICAgICBBT04gMzIgS0h6IGNsb2NrIChTQ0xLX0xGKQorLy8gR1BJTyAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgUHVycG9zZSBJTworI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19TTUlfQ0xfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX1NNSV9DTF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfU01JX0RMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19TTUlfRExfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX0dQSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfR1BJMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMworI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19HUE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX0dQTzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9SRkNfR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1JGQ19HUE8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJGCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUkZDX1RSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkUKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9JMlNfTUNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0kyU19CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfSTJTX1dDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9JMlNfQUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0kyU19BRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfU1NJMV9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9TU0kxX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMworI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1NTSTFfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIyCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfU1NJMV9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9DUFVfU1dWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1BPUlRfRVZFTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFFCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUE9SVF9FVkVOVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9QT1JUX0VWRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQworI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1BPUlRfRVZFTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFCCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUE9SVF9FVkVOVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9QT1JUX0VWRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1BPUlRfRVZFTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfUE9SVF9FVkVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9VQVJUMF9SVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1VBUlQwX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfVUFSVDBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9VQVJUMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0kyQ19NU1NDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfSTJDX01TU0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9TU0kwX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX1NTSTBfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfU1NJMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9TU0kwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBJT0NfSU9DRkcyOV9QT1JUX0lEX0FVWF9JTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIElPQ19JT0NGRzI5X1BPUlRfSURfQU9OX0NMSzMySyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9DX0lPQ0ZHMjlfUE9SVF9JRF9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IElPQ19PX0lPQ0ZHMzAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMwXSBIWVNUX0VOCisvLworLy8gMDogSW5wdXQgaHlzdGVyZXNpcyBkaXNhYmxlCisvLyAxOiBJbnB1dCBoeXN0ZXJlc2lzIGVuYWJsZQorI2RlZmluZSBJT0NfSU9DRkczMF9IWVNUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0hZU1RfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSFlTVF9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9IWVNUX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisKKy8vIEZpZWxkOiAgICBbMjldIElFCisvLworLy8gMDogSW5wdXQgZGlzYWJsZWQKKy8vIDE6IElucHV0IGVuYWJsZWQKKy8vCisvLyBOb3RlOiBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBVVggIGllLiBQT1JUX0lEID0gMHgwOCwgdGhlIGVuYWJsZSB3aWxsIGJlCisvLyBpZ25vcmVkLgorI2RlZmluZSBJT0NfSU9DRkczMF9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisKKy8vIEZpZWxkOiBbMjg6MjddIFdVX0NGRworLy8KKy8vIElmIERJTyBpcyBjb25maWd1cmVkIEdQSU8gb3Igbm9uLUFPTiBwZXJpcGhlcmFsIHNpZ25hbHMsIGkuZS4gUE9SVF9JRCAweDAwCisvLyBvciA+MHgwODoKKy8vCisvLyAwMDogTm8gd2FrZS11cAorLy8gMDE6IE5vIHdha2UtdXAKKy8vIDEwOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGxvdy4KKy8vIDExOiBXYWtlcyB1cCBmcm9tIHNodXRkb3duIGlmIHRoaXMgcGFkIGlzIGdvaW5nIGhpZ2guCisvLworLy8gSWYgSU8gaXMgY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaGVyYWwgc2lnbmFscyBvciBBVVggIGllLiBQT1JUX0lECisvLyAweDAxLTB4MDgsIHRoaXMgcmVnaXN0ZXIgb25seSBzZXRzIHdha2V1cCBlbmFibGUgb3Igbm90LgorLy8KKy8vIDAwLCAwMTogV2FrZXVwIGRpc2FibGVkCisvLyAxMCwgMTE6IFdha2V1cCBlbmFibGVkCisvLworLy8gUG9sYXJpdHkgaXMgY29udHJvbGxlZCBmcm9tIEFPTiByZWdpc3RlcnMuCisvLworLy8gTm90ZTpXaGVuIHRoZSBNU0IgaXMgc2V0LCB0aGUgSU9DIHdpbGwgZGVhY3RpdmF0ZSB0aGUgb3V0cHV0IGVuYWJsZSBmb3IgdGhlCisvLyBESU8uCisjZGVmaW5lIElPQ19JT0NGRzMwX1dVX0NGR19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfV1VfQ0ZHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9XVV9DRkdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisKKy8vIEZpZWxkOiBbMjY6MjRdIElPTU9ERQorLy8KKy8vIElPIE1vZGUKKy8vIE4vQSBmb3IgSU8gY29uZmlndXJlZCBmb3IgQU9OIHBlcmlwaC4gc2lnbmFscyBhbmQgQVVYICBpZS4gUE9SVF9JRCAweDAxLTB4MDgKKy8vIEFVWCBoYXMgaXRzIG93biBvcGVuX3NvdXJjZS9kcmFpbiBjb25maWd1cmF0aW9uLgorLy8KKy8vIDB4MjogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIDB4MzogUmVzZXJ2ZWQuIFVuZGVmaW5lZCBiZWhhdmlvci4KKy8vIEVOVU1zOgorLy8gT1BFTlNSQ19JTlYgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXRwdXQKKy8vIE9QRU5TUkMgICAgICAgICAgICAgICAgICBPcGVuIFNvdXJjZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSX0lOViAgICAgICAgICAgICAgIE9wZW4gRHJhaW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTkRSICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBJTlYgICAgICAgICAgICAgICAgICAgICAgSW52ZXJ0ZWQgaW5wdXQgLyBvdXB1dAorLy8gTk9STUFMICAgICAgICAgICAgICAgICAgIE5vcm1hbCBpbnB1dCAvIG91dHB1dAorI2RlZmluZSBJT0NfSU9DRkczMF9JT01PREVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPTU9ERV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9NT0RFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBJT0NfSU9DRkczMF9JT01PREVfT1BFTlNSQ19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPTU9ERV9PUEVOU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9NT0RFX09QRU5EUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT01PREVfT1BFTkRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPTU9ERV9JTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9NT0RFX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE4XSBFREdFX0lSUV9FTgorLy8KKy8vIDA6IE5vIGludGVycnVwdCBnZW5lcmF0aW9uCisvLyAxOiBFbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yIHRoaXMgSU8gKE9ubHkgZWZmZWN0aXZlIGlmIEVER0VfREVUIGlzCisvLyBlbmFibGVkKQorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0lSUV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0VER0VfSVJRX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9JUlFfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0lSUV9FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisKKy8vIEZpZWxkOiBbMTc6MTZdIEVER0VfREVUCisvLworLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZWRnZSBkZXRlY3Rpb24gZXZlbnRzIG9uIHRoaXMgSU8KKy8vIEVOVU1zOgorLy8gQk9USCAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gUE9TICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBORUcgICAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5PTkUgICAgICAgICAgICAgICAgICAgICBObyBlZGdlIGRldGVjdGlvbgorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0RFVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMwX0VER0VfREVUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9ERVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0RFVF9CT1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0VER0VfREVUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfRURHRV9ERVRfTkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9FREdFX0RFVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiBbMTQ6MTNdIFBVTExfQ1RMCisvLworLy8gUHVsbCBjb250cm9sCisvLyBFTlVNczoKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBObyBwdWxsCisvLyBVUCAgICAgICAgICAgICAgICAgICAgICAgUHVsbCB1cAorLy8gRFdOICAgICAgICAgICAgICAgICAgICAgIFB1bGwgZG93bgorI2RlZmluZSBJT0NfSU9DRkczMF9QVUxMX0NUTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMwX1BVTExfQ1RMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUFVMTF9DVExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBJT0NfSU9DRkczMF9QVUxMX0NUTF9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIElPQ19JT0NGRzMwX1BVTExfQ1RMX1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUFVMTF9DVExfRFdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorCisvLyBGaWVsZDogICAgWzEyXSBTTEVXX1JFRAorLy8KKy8vIDA6IE5vcm1hbCBzbGV3IHJhdGUKKy8vIDE6IEVuYWJsZXMgcmVkdWNlZCBzbGV3IHJhdGUgaW4gb3V0cHV0IGRyaXZlci4KKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfU0xFV19SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkczMF9TTEVXX1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIElPQ19JT0NGRzMwX1NMRVdfUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfU0xFV19SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogWzExOjEwXSBJT0NVUlIKKy8vCisvLyBTZWxlY3RzIElPIGN1cnJlbnQgbW9kZSBvZiB0aGlzIElPLgorLy8gRU5VTXM6CisvLyA0XzhNQSAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQtQ3VycmVudCAoRUMpIG1vZGU6IE1pbiA4IG1BIGZvciBkb3VibGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZSBzdHJlbmd0aCBJT3MgKG1pbiA0IG1BIGZvciBub3JtYWwgSU9zKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gSU9TVFIgaXMgc2V0IHRvIEFVVE8KKy8vIDRNQSAgICAgICAgICAgICAgICAgICAgICBIaWdoLUN1cnJlbnQgKEhDKSBtb2RlOiBNaW4gNCBtQSB3aGVuIElPU1RSIGlzIHNldAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIEFVVE8KKy8vIDJNQSAgICAgICAgICAgICAgICAgICAgICBMb3ctQ3VycmVudCAoTEMpIG1vZGU6IE1pbiAyIG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworI2RlZmluZSBJT0NfSU9DRkczMF9JT0NVUlJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPQ1VSUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBDMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9DVVJSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT0NVUlJfNF84TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPQ1VSUl80TUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9DVVJSXzJNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbOTo4XSBJT1NUUgorLy8KKy8vIFNlbGVjdCBzb3VyY2UgZm9yIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgb2YgdGhpcyBJTy4KKy8vIFRoaXMgc2V0dGluZyBjb250cm9scyB0aGUgZHJpdmUgc3RyZW5ndGggb2YgdGhlIExvdy1DdXJyZW50IChMQykgbW9kZS4KKy8vIEhpZ2hlciBkcml2ZSBzdHJlbmd0aCBjYW4gYmUgc2VsZWN0ZWQgaW4gSU9DVVJSCisvLyBFTlVNczoKKy8vIE1BWCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1BWCAobWluIDIgbUEgQDEuOFYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUVEICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bSBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFPTl9JT0M6SU9TVFJNRUQgKG1pbiAyIG1BIEAyLjVWIHdpdGggZGVmYXVsdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKy8vIE1JTiAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1JTiAobWluIDIgbUEgQDMuM1Ygd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gQVVUTyAgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyBkcml2ZSBzdHJlbmd0aCwgY29udHJvbGxlZCBieSBBT04gQkFUTU9OCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gYmF0dGVyeSB2b2x0YWdlLiAobWluIDIgbUEgQFZERFMpCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9TVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT1NUUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIElPQ19JT0NGRzMwX0lPU1RSX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfSU9TVFJfTUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJT0NfSU9DRkczMF9JT1NUUl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIElPQ19JT0NGRzMwX0lPU1RSX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzU6MF0gUE9SVF9JRAorLy8KKy8vIFNlbGVjdHMgdXNhZ2UgZm9yIERJTzMwCisvLyBFTlVNczoKKy8vIFJGQ19TTUlfQ0xfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgSW4KKy8vIFJGQ19TTUlfQ0xfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBDb21tYW5kIExpbmsgT3V0CisvLyBSRkNfU01JX0RMX0lOICAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIEluCisvLyBSRkNfU01JX0RMX09VVCAgICAgICAgICAgUkYgQ29yZSBTTUkgRGF0YSBMaW5rIE91dAorLy8gUkZDX0dQSTEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBJbiAxCisvLyBSRkNfR1BJMCAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDAKKy8vIFJGQ19HUE8zICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDMKKy8vIFJGQ19HUE8yICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDIKKy8vIFJGQ19HUE8xICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDEKKy8vIFJGQ19HUE8wICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgT3V0IDAKKy8vIFJGQ19UUkMgICAgICAgICAgICAgICAgICBSRiBDb3JlIFRyYWNlCisvLyBJMlNfTUNMSyAgICAgICAgICAgICAgICAgSTJTIE1DTEsKKy8vIEkyU19CQ0xLICAgICAgICAgICAgICAgICBJMlMgQkNMSworLy8gSTJTX1dDTEsgICAgICAgICAgICAgICAgIEkyUyBXQ0xLCisvLyBJMlNfQUQxICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMQorLy8gSTJTX0FEMCAgICAgICAgICAgICAgICAgIEkyUyBEYXRhIDAKKy8vIFNTSTFfQ0xLICAgICAgICAgICAgICAgICBTU0kxIENMSworLy8gU1NJMV9GU1MgICAgICAgICAgICAgICAgIFNTSTEgRlNTCisvLyBTU0kxX1RYICAgICAgICAgICAgICAgICAgU1NJMSBUWAorLy8gU1NJMV9SWCAgICAgICAgICAgICAgICAgIFNTSTEgUlgKKy8vIENQVV9TV1YgICAgICAgICAgICAgICAgICBDUFUgU1dWCisvLyBQT1JUX0VWRU5UNyAgICAgICAgICAgICAgUE9SVCBFVkVOVCA3CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ2ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDYKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDUgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNCAgICAgICAgICAgICAgUE9SVCBFVkVOVCA0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQzICAgICAgICAgICAgICBQT1JUIEVWRU5UIDMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDIgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMSAgICAgICAgICAgICAgUE9SVCBFVkVOVCAxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQwICAgICAgICAgICAgICBQT1JUIEVWRU5UIDAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gVUFSVDBfUlRTICAgICAgICAgICAgICAgIFVBUlQwIFJUUworLy8gVUFSVDBfQ1RTICAgICAgICAgICAgICAgIFVBUlQwIENUUworLy8gVUFSVDBfVFggICAgICAgICAgICAgICAgIFVBUlQwIFRYCisvLyBVQVJUMF9SWCAgICAgICAgICAgICAgICAgVUFSVDAgUlgKKy8vIEkyQ19NU1NDTCAgICAgICAgICAgICAgICBJMkMgQ2xvY2sKKy8vIEkyQ19NU1NEQSAgICAgICAgICAgICAgICBJMkMgRGF0YQorLy8gU1NJMF9DTEsgICAgICAgICAgICAgICAgIFNTSTAgQ0xLCisvLyBTU0kwX0ZTUyAgICAgICAgICAgICAgICAgU1NJMCBGU1MKKy8vIFNTSTBfVFggICAgICAgICAgICAgICAgICBTU0kwIFRYCisvLyBTU0kwX1JYICAgICAgICAgICAgICAgICAgU1NJMCBSWAorLy8gQVVYX0lPICAgICAgICAgICAgICAgICAgIEFVWCBJTworLy8gQU9OX0NMSzMySyAgICAgICAgICAgICAgIEFPTiAzMiBLSHogY2xvY2sgKFNDTEtfTEYpCisvLyBHUElPICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElPCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX1NNSV9DTF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfU01JX0NMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19TTUlfRExfSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX1NNSV9ETF9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfR1BJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19HUEkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX0dQTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1JGQ19HUE8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUkZDX0dQTzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9SRkNfVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0kyU19NQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfSTJTX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9JMlNfV0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0kyU19BRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfSTJTX0FEMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TU0kxX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1NTSTFfRlNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfU1NJMV9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TU0kxX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0NQVV9TV1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUE9SVF9FVkVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9QT1JUX0VWRU5UNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1BPUlRfRVZFTlQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUE9SVF9FVkVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9QT1JUX0VWRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1BPUlRfRVZFTlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfUE9SVF9FVkVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9QT1JUX0VWRU5UMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1VBUlQwX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfVUFSVDBfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9VQVJUMF9UWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1VBUlQwX1JYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfSTJDX01TU0NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9JMkNfTVNTREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1NTSTBfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfU1NJMF9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9TU0kwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX1NTSTBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIElPQ19JT0NGRzMwX1BPUlRfSURfQVVYX0lPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzBfUE9SVF9JRF9BT05fQ0xLMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBJT0NfSU9DRkczMF9QT1JUX0lEX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogSU9DX09fSU9DRkczMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzBdIEhZU1RfRU4KKy8vCisvLyAwOiBJbnB1dCBoeXN0ZXJlc2lzIGRpc2FibGUKKy8vIDE6IElucHV0IGh5c3RlcmVzaXMgZW5hYmxlCisjZGVmaW5lIElPQ19JT0NGRzMxX0hZU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSFlTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJT0NfSU9DRkczMV9IWVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0hZU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gSUUKKy8vCisvLyAwOiBJbnB1dCBkaXNhYmxlZAorLy8gMTogSW5wdXQgZW5hYmxlZAorLy8KKy8vIE5vdGU6IElmIElPIGlzIGNvbmZpZ3VyZWQgZm9yIEFVWCAgaWUuIFBPUlRfSUQgPSAweDA4LCB0aGUgZW5hYmxlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIElPQ19JT0NGRzMxX0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBJT0NfSU9DRkczMV9JRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6IFsyODoyN10gV1VfQ0ZHCisvLworLy8gSWYgRElPIGlzIGNvbmZpZ3VyZWQgR1BJTyBvciBub24tQU9OIHBlcmlwaGVyYWwgc2lnbmFscywgaS5lLiBQT1JUX0lEIDB4MDAKKy8vIG9yID4weDA4OgorLy8KKy8vIDAwOiBObyB3YWtlLXVwCisvLyAwMTogTm8gd2FrZS11cAorLy8gMTA6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgbG93LgorLy8gMTE6IFdha2VzIHVwIGZyb20gc2h1dGRvd24gaWYgdGhpcyBwYWQgaXMgZ29pbmcgaGlnaC4KKy8vCisvLyBJZiBJTyBpcyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoZXJhbCBzaWduYWxzIG9yIEFVWCAgaWUuIFBPUlRfSUQKKy8vIDB4MDEtMHgwOCwgdGhpcyByZWdpc3RlciBvbmx5IHNldHMgd2FrZXVwIGVuYWJsZSBvciBub3QuCisvLworLy8gMDAsIDAxOiBXYWtldXAgZGlzYWJsZWQKKy8vIDEwLCAxMTogV2FrZXVwIGVuYWJsZWQKKy8vCisvLyBQb2xhcml0eSBpcyBjb250cm9sbGVkIGZyb20gQU9OIHJlZ2lzdGVycy4KKy8vCisvLyBOb3RlOldoZW4gdGhlIE1TQiBpcyBzZXQsIHRoZSBJT0Mgd2lsbCBkZWFjdGl2YXRlIHRoZSBvdXRwdXQgZW5hYmxlIGZvciB0aGUKKy8vIERJTy4KKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfV1VfQ0ZHX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczMV9XVV9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX1dVX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6IFsyNjoyNF0gSU9NT0RFCisvLworLy8gSU8gTW9kZQorLy8gTi9BIGZvciBJTyBjb25maWd1cmVkIGZvciBBT04gcGVyaXBoLiBzaWduYWxzIGFuZCBBVVggIGllLiBQT1JUX0lEIDB4MDEtMHgwOAorLy8gQVVYIGhhcyBpdHMgb3duIG9wZW5fc291cmNlL2RyYWluIGNvbmZpZ3VyYXRpb24uCisvLworLy8gMHgyOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gMHgzOiBSZXNlcnZlZC4gVW5kZWZpbmVkIGJlaGF2aW9yLgorLy8gRU5VTXM6CisvLyBPUEVOU1JDX0lOViAgICAgICAgICAgICAgT3BlbiBTb3VyY2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91dHB1dAorLy8gT1BFTlNSQyAgICAgICAgICAgICAgICAgIE9wZW4gU291cmNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFJfSU5WICAgICAgICAgICAgICAgT3BlbiBEcmFpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEludmVydGVkIGlucHV0IC8gb3V0cHV0CisvLyBPUEVORFIgICAgICAgICAgICAgICAgICAgT3BlbiBEcmFpbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgaW5wdXQgLyBvdXRwdXQKKy8vIElOViAgICAgICAgICAgICAgICAgICAgICBJbnZlcnRlZCBpbnB1dCAvIG91cHV0CisvLyBOT1JNQUwgICAgICAgICAgICAgICAgICAgTm9ybWFsIGlucHV0IC8gb3V0cHV0CisjZGVmaW5lIElPQ19JT0NGRzMxX0lPTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIElPQ19JT0NGRzMxX0lPTU9ERV9PUEVOU1JDX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9NT0RFX09QRU5TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT01PREVfT1BFTkRSX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPTU9ERV9PUEVORFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9NT0RFX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT01PREVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMThdIEVER0VfSVJRX0VOCisvLworLy8gMDogTm8gaW50ZXJydXB0IGdlbmVyYXRpb24KKy8vIDE6IEVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBJTyAoT25seSBlZmZlY3RpdmUgaWYgRURHRV9ERVQgaXMKKy8vIGVuYWJsZWQpCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfSVJRX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfRURHRV9JUlFfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0lSUV9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfSVJRX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6IFsxNzoxNl0gRURHRV9ERVQKKy8vCisvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBlZGdlIGRldGVjdGlvbiBldmVudHMgb24gdGhpcyBJTworLy8gRU5VTXM6CisvLyBCT1RIICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGVkZ2UgZGV0ZWN0aW9uCisvLyBQT1MgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpdmUgZWRnZSBkZXRlY3Rpb24KKy8vIE5FRyAgICAgICAgICAgICAgICAgICAgICBOZWdhdGl2ZSBlZGdlIGRldGVjdGlvbgorLy8gTk9ORSAgICAgICAgICAgICAgICAgICAgIE5vIGVkZ2UgZGV0ZWN0aW9uCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfREVUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfRURHRV9ERVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0RFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfREVUX0JPVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfRURHRV9ERVRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9FREdFX0RFVF9ORUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0VER0VfREVUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6IFsxNDoxM10gUFVMTF9DVEwKKy8vCisvLyBQdWxsIGNvbnRyb2wKKy8vIEVOVU1zOgorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIE5vIHB1bGwKKy8vIFVQICAgICAgICAgICAgICAgICAgICAgICBQdWxsIHVwCisvLyBEV04gICAgICAgICAgICAgICAgICAgICAgUHVsbCBkb3duCisjZGVmaW5lIElPQ19JT0NGRzMxX1BVTExfQ1RMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUFVMTF9DVExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9QVUxMX0NUTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIElPQ19JT0NGRzMxX1BVTExfQ1RMX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUFVMTF9DVExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9QVUxMX0NUTF9EV04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIFNMRVdfUkVECisvLworLy8gMDogTm9ybWFsIHNsZXcgcmF0ZQorLy8gMTogRW5hYmxlcyByZWR1Y2VkIHNsZXcgcmF0ZSBpbiBvdXRwdXQgZHJpdmVyLgorI2RlZmluZSBJT0NfSU9DRkczMV9TTEVXX1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElPQ19JT0NGRzMxX1NMRVdfUkVEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfU0xFV19SRURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJT0NfSU9DRkczMV9TTEVXX1JFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiBbMTE6MTBdIElPQ1VSUgorLy8KKy8vIFNlbGVjdHMgSU8gY3VycmVudCBtb2RlIG9mIHRoaXMgSU8uCisvLyBFTlVNczoKKy8vIDRfOE1BICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZC1DdXJyZW50IChFQykgbW9kZTogTWluIDggbUEgZm9yIGRvdWJsZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlIHN0cmVuZ3RoIElPcyAobWluIDQgbUEgZm9yIG5vcm1hbCBJT3MpCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBJT1NUUiBpcyBzZXQgdG8gQVVUTworLy8gNE1BICAgICAgICAgICAgICAgICAgICAgIEhpZ2gtQ3VycmVudCAoSEMpIG1vZGU6IE1pbiA0IG1BIHdoZW4gSU9TVFIgaXMgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gQVVUTworLy8gMk1BICAgICAgICAgICAgICAgICAgICAgIExvdy1DdXJyZW50IChMQykgbW9kZTogTWluIDIgbUEgd2hlbiBJT1NUUiBpcyBzZXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB0byBBVVRPCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPQ1VSUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9DVVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEMwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT0NVUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPQ1VSUl80XzhNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9DVVJSXzRNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT0NVUlJfMk1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs5OjhdIElPU1RSCisvLworLy8gU2VsZWN0IHNvdXJjZSBmb3IgZHJpdmUgc3RyZW5ndGggY29udHJvbCBvZiB0aGlzIElPLgorLy8gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkcml2ZSBzdHJlbmd0aCBvZiB0aGUgTG93LUN1cnJlbnQgKExDKSBtb2RlLgorLy8gSGlnaGVyIGRyaXZlIHN0cmVuZ3RoIGNhbiBiZSBzZWxlY3RlZCBpbiBJT0NVUlIKKy8vIEVOVU1zOgorLy8gTUFYICAgICAgICAgICAgICAgICAgICAgIE1heGltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUFYIChtaW4gMiBtQSBAMS44ViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBNRUQgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQU9OX0lPQzpJT1NUUk1FRCAobWluIDIgbUEgQDIuNVYgd2l0aCBkZWZhdWx0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKQorLy8gTUlOICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gZHJpdmUgc3RyZW5ndGgsIGNvbnRyb2xsZWQgYnkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBBT05fSU9DOklPU1RSTUlOIChtaW4gMiBtQSBAMy4zViB3aXRoIGRlZmF1bHQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisvLyBBVVRPICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIGRyaXZlIHN0cmVuZ3RoLCBjb250cm9sbGVkIGJ5IEFPTiBCQVRNT04KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBiYXR0ZXJ5IHZvbHRhZ2UuIChtaW4gMiBtQSBAVkREUykKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9TVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJT0NfSU9DRkczMV9JT1NUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPU1RSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9TVFJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBJT0NfSU9DRkczMV9JT1NUUl9NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElPQ19JT0NGRzMxX0lPU1RSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfSU9TVFJfQVVUTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbNTowXSBQT1JUX0lECisvLworLy8gU2VsZWN0cyB1c2FnZSBmb3IgRElPMzEKKy8vIEVOVU1zOgorLy8gUkZDX1NNSV9DTF9JTiAgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBJbgorLy8gUkZDX1NNSV9DTF9PVVQgICAgICAgICAgIFJGIENvcmUgU01JIENvbW1hbmQgTGluayBPdXQKKy8vIFJGQ19TTUlfRExfSU4gICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgSW4KKy8vIFJGQ19TTUlfRExfT1VUICAgICAgICAgICBSRiBDb3JlIFNNSSBEYXRhIExpbmsgT3V0CisvLyBSRkNfR1BJMSAgICAgICAgICAgICAgICAgUkYgQ29yZSBEYXRhIEluIDEKKy8vIFJGQ19HUEkwICAgICAgICAgICAgICAgICBSRiBDb3JlIERhdGEgSW4gMAorLy8gUkZDX0dQTzMgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMworLy8gUkZDX0dQTzIgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMgorLy8gUkZDX0dQTzEgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMQorLy8gUkZDX0dQTzAgICAgICAgICAgICAgICAgIFJGIENvcmUgRGF0YSBPdXQgMAorLy8gUkZDX1RSQyAgICAgICAgICAgICAgICAgIFJGIENvcmUgVHJhY2UKKy8vIEkyU19NQ0xLICAgICAgICAgICAgICAgICBJMlMgTUNMSworLy8gSTJTX0JDTEsgICAgICAgICAgICAgICAgIEkyUyBCQ0xLCisvLyBJMlNfV0NMSyAgICAgICAgICAgICAgICAgSTJTIFdDTEsKKy8vIEkyU19BRDEgICAgICAgICAgICAgICAgICBJMlMgRGF0YSAxCisvLyBJMlNfQUQwICAgICAgICAgICAgICAgICAgSTJTIERhdGEgMAorLy8gU1NJMV9DTEsgICAgICAgICAgICAgICAgIFNTSTEgQ0xLCisvLyBTU0kxX0ZTUyAgICAgICAgICAgICAgICAgU1NJMSBGU1MKKy8vIFNTSTFfVFggICAgICAgICAgICAgICAgICBTU0kxIFRYCisvLyBTU0kxX1JYICAgICAgICAgICAgICAgICAgU1NJMSBSWAorLy8gQ1BVX1NXViAgICAgICAgICAgICAgICAgIENQVSBTV1YKKy8vIFBPUlRfRVZFTlQ3ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDYgICAgICAgICAgICAgIFBPUlQgRVZFTlQgNgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UNSAgICAgICAgICAgICAgUE9SVCBFVkVOVCA1CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQ0ICAgICAgICAgICAgICBQT1JUIEVWRU5UIDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDMgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBQT1JUX0VWRU5UMiAgICAgICAgICAgICAgUE9SVCBFVkVOVCAyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBnZW5lcmFsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZSBJTyBldmVudCBieSBzZWxlY3RpbmcgaXQgdmlhIHJlZ2lzdGVycworLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBFVkVOVCBtb2R1bGUsIGUuZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVDpHUFQwQUNBUFRTRUwuRVYsIEVWRU5UOlVETUFDSDE0QlNFTC5FViwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldGMKKy8vIFBPUlRfRVZFTlQxICAgICAgICAgICAgICBQT1JUIEVWRU5UIDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGdlbmVyYWwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlIElPIGV2ZW50IGJ5IHNlbGVjdGluZyBpdCB2aWEgcmVnaXN0ZXJzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEVWRU5UIG1vZHVsZSwgZS5nLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UOkdQVDBBQ0FQVFNFTC5FViwgRVZFTlQ6VURNQUNIMTRCU0VMLkVWLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGV0YworLy8gUE9SVF9FVkVOVDAgICAgICAgICAgICAgIFBPUlQgRVZFTlQgMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGFzIGEgZ2VuZXJhbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2UgSU8gZXZlbnQgYnkgc2VsZWN0aW5nIGl0IHZpYSByZWdpc3RlcnMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgRVZFTlQgbW9kdWxlLCBlLmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRVZFTlQ6R1BUMEFDQVBUU0VMLkVWLCBFVkVOVDpVRE1BQ0gxNEJTRUwuRVYsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgZXRjCisvLyBVQVJUMF9SVFMgICAgICAgICAgICAgICAgVUFSVDAgUlRTCisvLyBVQVJUMF9DVFMgICAgICAgICAgICAgICAgVUFSVDAgQ1RTCisvLyBVQVJUMF9UWCAgICAgICAgICAgICAgICAgVUFSVDAgVFgKKy8vIFVBUlQwX1JYICAgICAgICAgICAgICAgICBVQVJUMCBSWAorLy8gSTJDX01TU0NMICAgICAgICAgICAgICAgIEkyQyBDbG9jaworLy8gSTJDX01TU0RBICAgICAgICAgICAgICAgIEkyQyBEYXRhCisvLyBTU0kwX0NMSyAgICAgICAgICAgICAgICAgU1NJMCBDTEsKKy8vIFNTSTBfRlNTICAgICAgICAgICAgICAgICBTU0kwIEZTUworLy8gU1NJMF9UWCAgICAgICAgICAgICAgICAgIFNTSTAgVFgKKy8vIFNTSTBfUlggICAgICAgICAgICAgICAgICBTU0kwIFJYCisvLyBBVVhfSU8gICAgICAgICAgICAgICAgICAgQVVYIElPCisvLyBBT05fQ0xLMzJLICAgICAgICAgICAgICAgQU9OIDMyIEtIeiBjbG9jayAoU0NMS19MRikKKy8vIEdQSU8gICAgICAgICAgICAgICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSU8KKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfU01JX0NMX0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19TTUlfQ0xfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM3CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX1NNSV9ETF9JTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfU01JX0RMX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19HUEkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX0dQSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19HUE8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMxCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUkZDX0dQTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9SRkNfR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1JGQ19UUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfSTJTX01DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9JMlNfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0kyU19XQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfSTJTX0FEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9JMlNfQUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1NTSTFfQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfU1NJMV9GU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9TU0kxX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1NTSTFfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfQ1BVX1NXViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9QT1JUX0VWRU5UNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1BPUlRfRVZFTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUE9SVF9FVkVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9QT1JUX0VWRU5UNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1BPUlRfRVZFTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfUE9SVF9FVkVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9QT1JUX0VWRU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1BPUlRfRVZFTlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfVUFSVDBfUlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9VQVJUMF9DVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1VBUlQwX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfVUFSVDBfUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9JMkNfTVNTQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0kyQ19NU1NEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfU1NJMF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9TU0kwX0ZTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX1NTSTBfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfU1NJMF9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgSU9DX0lPQ0ZHMzFfUE9SVF9JRF9BVVhfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJT0NfSU9DRkczMV9QT1JUX0lEX0FPTl9DTEszMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElPQ19JT0NGRzMxX1BPUlRfSURfR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworCisjZW5kaWYgLy8gX19JT0NfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfbWVtbWFwLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19tZW1tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2VmM2RhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfbWVtbWFwLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19tZW1tYXBfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfTUVNTUFQX0hfXworI2RlZmluZSBfX0hXX01FTU1BUF9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yaWVzIGFuZAorLy8gcGVyaXBoZXJhbHMgb24gdGhlIENQVV9NTUFQIGludGVyZmFjZQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgRkxBU0hNRU1fQkFTRSAgICAgICAgICAgMHgwMDAwMDAwMCAvLyBGTEFTSE1FTQorI2RlZmluZSBCUk9NX0JBU0UgICAgICAgICAgICAgICAweDEwMDAwMDAwIC8vIEJST00KKyNkZWZpbmUgR1BSQU1fQkFTRSAgICAgICAgICAgICAgMHgxMTAwMDAwMCAvLyBHUFJBTQorI2RlZmluZSBTUkFNX0JBU0UgICAgICAgICAgICAgICAweDIwMDAwMDAwIC8vIFNSQU0KKyNkZWZpbmUgUkZDX1JBTV9CQVNFICAgICAgICAgICAgMHgyMTAwMDAwMCAvLyBSRlJBTQorI2RlZmluZSBTU0kwX0JBU0UgICAgICAgICAgICAgICAweDQwMDAwMDAwIC8vIFNTSQorI2RlZmluZSBVQVJUMF9CQVNFICAgICAgICAgICAgICAweDQwMDAxMDAwIC8vIFVBUlQKKyNkZWZpbmUgSTJDMF9CQVNFICAgICAgICAgICAgICAgMHg0MDAwMjAwMCAvLyBJMkMKKyNkZWZpbmUgU1NJMV9CQVNFICAgICAgICAgICAgICAgMHg0MDAwODAwMCAvLyBTU0kKKyNkZWZpbmUgR1BUMF9CQVNFICAgICAgICAgICAgICAgMHg0MDAxMDAwMCAvLyBHUFQKKyNkZWZpbmUgR1BUMV9CQVNFICAgICAgICAgICAgICAgMHg0MDAxMTAwMCAvLyBHUFQKKyNkZWZpbmUgR1BUMl9CQVNFICAgICAgICAgICAgICAgMHg0MDAxMjAwMCAvLyBHUFQKKyNkZWZpbmUgR1BUM19CQVNFICAgICAgICAgICAgICAgMHg0MDAxMzAwMCAvLyBHUFQKKyNkZWZpbmUgVURNQTBfQkFTRSAgICAgICAgICAgICAgMHg0MDAyMDAwMCAvLyBVRE1BCisjZGVmaW5lIEkyUzBfQkFTRSAgICAgICAgICAgICAgIDB4NDAwMjEwMDAgLy8gSTJTCisjZGVmaW5lIEdQSU9fQkFTRSAgICAgICAgICAgICAgIDB4NDAwMjIwMDAgLy8gR1BJTworI2RlZmluZSBDUllQVE9fQkFTRSAgICAgICAgICAgICAweDQwMDI0MDAwIC8vIENSWVBUTworI2RlZmluZSBUUk5HX0JBU0UgICAgICAgICAgICAgICAweDQwMDI4MDAwIC8vIFRSTkcKKyNkZWZpbmUgRkxBU0hfQkFTRSAgICAgICAgICAgICAgMHg0MDAzMDAwMCAvLyBGTEFTSAorI2RlZmluZSBWSU1TX0JBU0UgICAgICAgICAgICAgICAweDQwMDM0MDAwIC8vIFZJTVMKKyNkZWZpbmUgUkZDX1BXUl9CQVNFICAgICAgICAgICAgMHg0MDA0MDAwMCAvLyBSRkNfUFdSCisjZGVmaW5lIFJGQ19EQkVMTF9CQVNFICAgICAgICAgIDB4NDAwNDEwMDAgLy8gUkZDX0RCRUxMCisjZGVmaW5lIFJGQ19SQVRfQkFTRSAgICAgICAgICAgIDB4NDAwNDMwMDAgLy8gUkZDX1JBVAorI2RlZmluZSBSRkNfRlNDQV9CQVNFICAgICAgICAgICAweDQwMDQ0MDAwIC8vIFJGQ19GU0NBCisjZGVmaW5lIFdEVF9CQVNFICAgICAgICAgICAgICAgIDB4NDAwODAwMDAgLy8gV0RUCisjZGVmaW5lIElPQ19CQVNFICAgICAgICAgICAgICAgIDB4NDAwODEwMDAgLy8gSU9DCisjZGVmaW5lIFBSQ01fQkFTRSAgICAgICAgICAgICAgIDB4NDAwODIwMDAgLy8gUFJDTQorI2RlZmluZSBFVkVOVF9CQVNFICAgICAgICAgICAgICAweDQwMDgzMDAwIC8vIEVWRU5UCisjZGVmaW5lIFNNUEhfQkFTRSAgICAgICAgICAgICAgIDB4NDAwODQwMDAgLy8gU01QSAorI2RlZmluZSBBREkyX0JBU0UgICAgICAgICAgICAgICAweDQwMDg2MDAwIC8vIEFESQorI2RlZmluZSBBREkzX0JBU0UgICAgICAgICAgICAgICAweDQwMDg2MjAwIC8vIEFESQorI2RlZmluZSBBT05fU1lTQ1RMX0JBU0UgICAgICAgICAweDQwMDkwMDAwIC8vIEFPTl9TWVNDVEwKKyNkZWZpbmUgQU9OX1dVQ19CQVNFICAgICAgICAgICAgMHg0MDA5MTAwMCAvLyBBT05fV1VDCisjZGVmaW5lIEFPTl9SVENfQkFTRSAgICAgICAgICAgIDB4NDAwOTIwMDAgLy8gQU9OX1JUQworI2RlZmluZSBBT05fRVZFTlRfQkFTRSAgICAgICAgICAweDQwMDkzMDAwIC8vIEFPTl9FVkVOVAorI2RlZmluZSBBT05fSU9DX0JBU0UgICAgICAgICAgICAweDQwMDk0MDAwIC8vIEFPTl9JT0MKKyNkZWZpbmUgQU9OX0JBVE1PTl9CQVNFICAgICAgICAgMHg0MDA5NTAwMCAvLyBBT05fQkFUTU9OCisjZGVmaW5lIEFVWF9BSU9ESU8wX0JBU0UgICAgICAgIDB4NDAwQzEwMDAgLy8gQVVYX0FJT0RJTworI2RlZmluZSBBVVhfQUlPRElPMV9CQVNFICAgICAgICAweDQwMEMyMDAwIC8vIEFVWF9BSU9ESU8KKyNkZWZpbmUgQVVYX1REQ19CQVNFICAgICAgICAgICAgMHg0MDBDNDAwMCAvLyBBVVhfVERDCisjZGVmaW5lIEFVWF9FVkNUTF9CQVNFICAgICAgICAgIDB4NDAwQzUwMDAgLy8gQVVYX0VWQ1RMCisjZGVmaW5lIEFVWF9XVUNfQkFTRSAgICAgICAgICAgIDB4NDAwQzYwMDAgLy8gQVVYX1dVQworI2RlZmluZSBBVVhfVElNRVJfQkFTRSAgICAgICAgICAweDQwMEM3MDAwIC8vIEFVWF9USU1FUgorI2RlZmluZSBBVVhfU01QSF9CQVNFICAgICAgICAgICAweDQwMEM4MDAwIC8vIEFVWF9TTVBICisjZGVmaW5lIEFVWF9BTkFJRl9CQVNFICAgICAgICAgIDB4NDAwQzkwMDAgLy8gQVVYX0FOQUlGCisjZGVmaW5lIEFVWF9EREkwX09TQ19CQVNFICAgICAgIDB4NDAwQ0EwMDAgLy8gRERJCisjZGVmaW5lIEFVWF9BREk0X0JBU0UgICAgICAgICAgIDB4NDAwQ0IwMDAgLy8gQURJCisjZGVmaW5lIEFVWF9SQU1fQkFTRSAgICAgICAgICAgIDB4NDAwRTAwMDAgLy8gQVVYX1JBTQorI2RlZmluZSBBVVhfU0NFX0JBU0UgICAgICAgICAgICAweDQwMEUxMDAwIC8vIEFVWF9TQ0UKKyNkZWZpbmUgRkxBU0hfQ0ZHX0JBU0UgICAgICAgICAgMHg1MDAwMDAwMCAvLyBDQzI2X0RVTU1ZX0NPTVAKKyNkZWZpbmUgRkNGRzFfQkFTRSAgICAgICAgICAgICAgMHg1MDAwMTAwMCAvLyBGQ0ZHMQorI2RlZmluZSBGQ0ZHMl9CQVNFICAgICAgICAgICAgICAweDUwMDAyMDAwIC8vIEZDRkcyCisjaWZuZGVmIENDRkdfQkFTRQorI2RlZmluZSBDQ0ZHX0JBU0UgICAgICAgICAgICAgICAweDUwMDAzMDAwIC8vIENDRkcKKyNlbmRpZgorI2RlZmluZSBTU0kwX05PTkJVRl9CQVNFICAgICAgICAweDYwMDAwMDAwIC8vIFNTSSBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgVUFSVDBfTk9OQlVGX0JBU0UgICAgICAgMHg2MDAwMTAwMCAvLyBVQVJUIENQVSBub25idWYgYmFzZQorI2RlZmluZSBJMkMwX05PTkJVRl9CQVNFICAgICAgICAweDYwMDAyMDAwIC8vIEkyQyBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgU1NJMV9OT05CVUZfQkFTRSAgICAgICAgMHg2MDAwODAwMCAvLyBTU0kgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEdQVDBfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwMTAwMDAgLy8gR1BUIENQVSBub25idWYgYmFzZQorI2RlZmluZSBHUFQxX05PTkJVRl9CQVNFICAgICAgICAweDYwMDExMDAwIC8vIEdQVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgR1BUMl9OT05CVUZfQkFTRSAgICAgICAgMHg2MDAxMjAwMCAvLyBHUFQgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEdQVDNfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwMTMwMDAgLy8gR1BUIENQVSBub25idWYgYmFzZQorI2RlZmluZSBVRE1BMF9OT05CVUZfQkFTRSAgICAgICAweDYwMDIwMDAwIC8vIFVETUEgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEkyUzBfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwMjEwMDAgLy8gSTJTIENQVSBub25idWYgYmFzZQorI2RlZmluZSBHUElPX05PTkJVRl9CQVNFICAgICAgICAweDYwMDIyMDAwIC8vIEdQSU8gQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIENSWVBUT19OT05CVUZfQkFTRSAgICAgIDB4NjAwMjQwMDAgLy8gQ1JZUFRPIENQVSBub25idWYgYmFzZQorI2RlZmluZSBUUk5HX05PTkJVRl9CQVNFICAgICAgICAweDYwMDI4MDAwIC8vIFRSTkcgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEZMQVNIX05PTkJVRl9CQVNFICAgICAgIDB4NjAwMzAwMDAgLy8gRkxBU0ggQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFZJTVNfTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwMzQwMDAgLy8gVklNUyBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgUkZDX1BXUl9OT05CVUZfQkFTRSAgICAgMHg2MDA0MDAwMCAvLyBSRkNfUFdSIENQVSBub25idWYgYmFzZQorI2RlZmluZSBSRkNfREJFTExfTk9OQlVGX0JBU0UgICAweDYwMDQxMDAwIC8vIFJGQ19EQkVMTCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgUkZDX1JBVF9OT05CVUZfQkFTRSAgICAgMHg2MDA0MzAwMCAvLyBSRkNfUkFUIENQVSBub25idWYgYmFzZQorI2RlZmluZSBSRkNfRlNDQV9OT05CVUZfQkFTRSAgICAweDYwMDQ0MDAwIC8vIFJGQ19GU0NBIENQVSBub25idWYgYmFzZQorI2RlZmluZSBXRFRfTk9OQlVGX0JBU0UgICAgICAgICAweDYwMDgwMDAwIC8vIFdEVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgSU9DX05PTkJVRl9CQVNFICAgICAgICAgMHg2MDA4MTAwMCAvLyBJT0MgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIFBSQ01fTk9OQlVGX0JBU0UgICAgICAgIDB4NjAwODIwMDAgLy8gUFJDTSBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgRVZFTlRfTk9OQlVGX0JBU0UgICAgICAgMHg2MDA4MzAwMCAvLyBFVkVOVCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgU01QSF9OT05CVUZfQkFTRSAgICAgICAgMHg2MDA4NDAwMCAvLyBTTVBIIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBREkyX05PTkJVRl9CQVNFICAgICAgICAweDYwMDg2MDAwIC8vIEFESSBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQURJM19OT05CVUZfQkFTRSAgICAgICAgMHg2MDA4NjIwMCAvLyBBREkgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFPTl9TWVNDVExfTk9OQlVGX0JBU0UgIDB4NjAwOTAwMDAgLy8gQU9OX1NZU0NUTCBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQU9OX1dVQ19OT05CVUZfQkFTRSAgICAgMHg2MDA5MTAwMCAvLyBBT05fV1VDIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBT05fUlRDX05PTkJVRl9CQVNFICAgICAweDYwMDkyMDAwIC8vIEFPTl9SVEMgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFPTl9FVkVOVF9OT05CVUZfQkFTRSAgIDB4NjAwOTMwMDAgLy8gQU9OX0VWRU5UIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBT05fSU9DX05PTkJVRl9CQVNFICAgICAweDYwMDk0MDAwIC8vIEFPTl9JT0MgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFPTl9CQVRNT05fTk9OQlVGX0JBU0UgIDB4NjAwOTUwMDAgLy8gQU9OX0JBVE1PTiBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX0FJT0RJTzBfTk9OQlVGX0JBU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwMEMxMDAwIC8vIEFVWF9BSU9ESU8gQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9BSU9ESU8xX05PTkJVRl9CQVNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MDBDMjAwMCAvLyBBVVhfQUlPRElPIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfVERDX05PTkJVRl9CQVNFICAgICAweDYwMEM0MDAwIC8vIEFVWF9UREMgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9FVkNUTF9OT05CVUZfQkFTRSAgIDB4NjAwQzUwMDAgLy8gQVVYX0VWQ1RMIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfV1VDX05PTkJVRl9CQVNFICAgICAweDYwMEM2MDAwIC8vIEFVWF9XVUMgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9USU1FUl9OT05CVUZfQkFTRSAgIDB4NjAwQzcwMDAgLy8gQVVYX1RJTUVSIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfU01QSF9OT05CVUZfQkFTRSAgICAweDYwMEM4MDAwIC8vIEFVWF9TTVBIIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfQU5BSUZfTk9OQlVGX0JBU0UgICAweDYwMEM5MDAwIC8vIEFVWF9BTkFJRiBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgQVVYX0RESTBfT1NDX05PTkJVRl9CQVNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MDBDQTAwMCAvLyBEREkgQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9BREk0X05PTkJVRl9CQVNFICAgIDB4NjAwQ0IwMDAgLy8gQURJIENQVSBub25idWYgYmFzZQorI2RlZmluZSBBVVhfUkFNX05PTkJVRl9CQVNFICAgICAweDYwMEUwMDAwIC8vIEFVWF9SQU0gQ1BVIG5vbmJ1ZiBiYXNlCisjZGVmaW5lIEFVWF9TQ0VfTk9OQlVGX0JBU0UgICAgIDB4NjAwRTEwMDAgLy8gQVVYX1NDRSBDUFUgbm9uYnVmIGJhc2UKKyNkZWZpbmUgRkxBU0hNRU1fQUxJQVNfQkFTRSAgICAgMHhBMDAwMDAwMCAvLyBGTEFTSE1FTSBBbGlhcyBiYXNlCisjZGVmaW5lIENQVV9JVE1fQkFTRSAgICAgICAgICAgIDB4RTAwMDAwMDAgLy8gQ1BVX0lUTQorI2RlZmluZSBDUFVfRFdUX0JBU0UgICAgICAgICAgICAweEUwMDAxMDAwIC8vIENQVV9EV1QKKyNkZWZpbmUgQ1BVX0ZQQl9CQVNFICAgICAgICAgICAgMHhFMDAwMjAwMCAvLyBDUFVfRlBCCisjZGVmaW5lIENQVV9TQ1NfQkFTRSAgICAgICAgICAgIDB4RTAwMEUwMDAgLy8gQ1BVX1NDUworI2RlZmluZSBDUFVfVFBJVV9CQVNFICAgICAgICAgICAweEUwMDQwMDAwIC8vIENQVV9UUElVCisjZGVmaW5lIENQVV9USVBST1BfQkFTRSAgICAgICAgIDB4RTAwRkUwMDAgLy8gQ1BVX1RJUFJPUAorI2RlZmluZSBDUFVfUk9NX1RBQkxFX0JBU0UgICAgICAweEUwMEZGMDAwIC8vIENQVV9ST01fVEFCTEUKKworI2VuZGlmIC8vIF9fSFdfTUVNTUFQX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X252aWMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X252aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTFiY2EzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfbnZpYy5oCkBAIC0wLDAgKzEsMTAyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X252aWMuaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTUtMDEtMTMgMTY6NTk6NTUgKzAxMDAgKFR1ZSwgMTMgSmFuIDIwMTUpCisqICBSZXZpc2lvbjogICAgICAgNDIzNjUKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19OVklDX0hfXworI2RlZmluZSBfX0hXX05WSUNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgTlZJQyByZWdpc3RlciBhZGRyZXNzZXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0lOVF9UWVBFICAgICAgICAgICAweEUwMDBFMDA0ICAvLyBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZworI2RlZmluZSBOVklDX0FDVExSICAgICAgICAgICAgICAweEUwMDBFMDA4ICAvLyBBdXhpbGlhcnkgQ29udHJvbAorI2RlZmluZSBOVklDX1NUX0NUUkwgICAgICAgICAgICAweEUwMDBFMDEwICAvLyBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcgorI2RlZmluZSBOVklDX1NUX1JFTE9BRCAgICAgICAgICAweEUwMDBFMDE0ICAvLyBTeXNUaWNrIFJlbG9hZCBWYWx1ZSBSZWdpc3RlcgorI2RlZmluZSBOVklDX1NUX0NVUlJFTlQgICAgICAgICAweEUwMDBFMDE4ICAvLyBTeXNUaWNrIEN1cnJlbnQgVmFsdWUgUmVnaXN0ZXIKKyNkZWZpbmUgTlZJQ19TVF9DQUwgICAgICAgICAgICAgMHhFMDAwRTAxQyAgLy8gU3lzVGljayBDYWxpYnJhdGlvbiBWYWx1ZSBSZWcKKyNkZWZpbmUgTlZJQ19FTjAgICAgICAgICAgICAgICAgMHhFMDAwRTEwMCAgLy8gSW50ZXJydXB0IDAtMzEgU2V0IEVuYWJsZQorI2RlZmluZSBOVklDX0VOMSAgICAgICAgICAgICAgICAweEUwMDBFMTA0ICAvLyBJbnRlcnJ1cHQgMzItNTQgU2V0IEVuYWJsZQorI2RlZmluZSBOVklDX0RJUzAgICAgICAgICAgICAgICAweEUwMDBFMTgwICAvLyBJbnRlcnJ1cHQgMC0zMSBDbGVhciBFbmFibGUKKyNkZWZpbmUgTlZJQ19ESVMxICAgICAgICAgICAgICAgMHhFMDAwRTE4NCAgLy8gSW50ZXJydXB0IDMyLTU0IENsZWFyIEVuYWJsZQorI2RlZmluZSBOVklDX1BFTkQwICAgICAgICAgICAgICAweEUwMDBFMjAwICAvLyBJbnRlcnJ1cHQgMC0zMSBTZXQgUGVuZGluZworI2RlZmluZSBOVklDX1BFTkQxICAgICAgICAgICAgICAweEUwMDBFMjA0ICAvLyBJbnRlcnJ1cHQgMzItNTQgU2V0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19VTlBFTkQwICAgICAgICAgICAgMHhFMDAwRTI4MCAgLy8gSW50ZXJydXB0IDAtMzEgQ2xlYXIgUGVuZGluZworI2RlZmluZSBOVklDX1VOUEVORDEgICAgICAgICAgICAweEUwMDBFMjg0ICAvLyBJbnRlcnJ1cHQgMzItNTQgQ2xlYXIgUGVuZGluZworI2RlZmluZSBOVklDX0FDVElWRTAgICAgICAgICAgICAweEUwMDBFMzAwICAvLyBJbnRlcnJ1cHQgMC0zMSBBY3RpdmUgQml0CisjZGVmaW5lIE5WSUNfQUNUSVZFMSAgICAgICAgICAgIDB4RTAwMEUzMDQgIC8vIEludGVycnVwdCAzMi01NCBBY3RpdmUgQml0CisjZGVmaW5lIE5WSUNfUFJJMCAgICAgICAgICAgICAgIDB4RTAwMEU0MDAgIC8vIEludGVycnVwdCAwLTMgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkkxICAgICAgICAgICAgICAgMHhFMDAwRTQwNCAgLy8gSW50ZXJydXB0IDQtNyBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTIgICAgICAgICAgICAgICAweEUwMDBFNDA4ICAvLyBJbnRlcnJ1cHQgOC0xMSBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTMgICAgICAgICAgICAgICAweEUwMDBFNDBDICAvLyBJbnRlcnJ1cHQgMTItMTUgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkk0ICAgICAgICAgICAgICAgMHhFMDAwRTQxMCAgLy8gSW50ZXJydXB0IDE2LTE5IFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJNSAgICAgICAgICAgICAgIDB4RTAwMEU0MTQgIC8vIEludGVycnVwdCAyMC0yMyBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTYgICAgICAgICAgICAgICAweEUwMDBFNDE4ICAvLyBJbnRlcnJ1cHQgMjQtMjcgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkk3ICAgICAgICAgICAgICAgMHhFMDAwRTQxQyAgLy8gSW50ZXJydXB0IDI4LTMxIFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJOCAgICAgICAgICAgICAgIDB4RTAwMEU0MjAgIC8vIEludGVycnVwdCAzMi0zNSBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTkgICAgICAgICAgICAgICAweEUwMDBFNDI0ICAvLyBJbnRlcnJ1cHQgMzYtMzkgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkkxMCAgICAgICAgICAgICAgMHhFMDAwRTQyOCAgLy8gSW50ZXJydXB0IDQwLTQzIFByaW9yaXR5CisjZGVmaW5lIE5WSUNfUFJJMTEgICAgICAgICAgICAgIDB4RTAwMEU0MkMgIC8vIEludGVycnVwdCA0NC00NyBQcmlvcml0eQorI2RlZmluZSBOVklDX1BSSTEyICAgICAgICAgICAgICAweEUwMDBFNDMwICAvLyBJbnRlcnJ1cHQgNDgtNTEgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19QUkkxMyAgICAgICAgICAgICAgMHhFMDAwRTQzNCAgLy8gSW50ZXJydXB0IDUyLTU1IFByaW9yaXR5CisjZGVmaW5lIE5WSUNfQ1BVSUQgICAgICAgICAgICAgIDB4RTAwMEVEMDAgIC8vIENQVSBJRCBCYXNlCisjZGVmaW5lIE5WSUNfSU5UX0NUUkwgICAgICAgICAgIDB4RTAwMEVEMDQgIC8vIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZQorI2RlZmluZSBOVklDX1ZUQUJMRSAgICAgICAgICAgICAweEUwMDBFRDA4ICAvLyBWZWN0b3IgVGFibGUgT2Zmc2V0CisjZGVmaW5lIE5WSUNfQVBJTlQgICAgICAgICAgICAgIDB4RTAwMEVEMEMgIC8vIEFwcGxpY2F0aW9uIEludGVycnVwdCBhbmQgUmVzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbAorI2RlZmluZSBOVklDX1NZU19DVFJMICAgICAgICAgICAweEUwMDBFRDEwICAvLyBTeXN0ZW0gQ29udHJvbAorI2RlZmluZSBOVklDX0NGR19DVFJMICAgICAgICAgICAweEUwMDBFRDE0ICAvLyBDb25maWd1cmF0aW9uIGFuZCBDb250cm9sCisjZGVmaW5lIE5WSUNfU1lTX1BSSTEgICAgICAgICAgIDB4RTAwMEVEMTggIC8vIFN5c3RlbSBIYW5kbGVyIFByaW9yaXR5IDEKKyNkZWZpbmUgTlZJQ19TWVNfUFJJMiAgICAgICAgICAgMHhFMDAwRUQxQyAgLy8gU3lzdGVtIEhhbmRsZXIgUHJpb3JpdHkgMgorI2RlZmluZSBOVklDX1NZU19QUkkzICAgICAgICAgICAweEUwMDBFRDIwICAvLyBTeXN0ZW0gSGFuZGxlciBQcmlvcml0eSAzCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMICAgICAgIDB4RTAwMEVEMjQgIC8vIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVCAgICAgICAgIDB4RTAwMEVEMjggIC8vIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMKKyNkZWZpbmUgTlZJQ19IRkFVTFRfU1RBVCAgICAgICAgMHhFMDAwRUQyQyAgLy8gSGFyZCBGYXVsdCBTdGF0dXMKKyNkZWZpbmUgTlZJQ19ERUJVR19TVEFUICAgICAgICAgMHhFMDAwRUQzMCAgLy8gRGVidWcgU3RhdHVzIFJlZ2lzdGVyCisjZGVmaW5lIE5WSUNfTU1fQUREUiAgICAgICAgICAgIDB4RTAwMEVEMzQgIC8vIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IEFkZHJlc3MKKyNkZWZpbmUgTlZJQ19GQVVMVF9BRERSICAgICAgICAgMHhFMDAwRUQzOCAgLy8gQnVzIEZhdWx0IEFkZHJlc3MKKyNkZWZpbmUgTlZJQ19NUFVfVFlQRSAgICAgICAgICAgMHhFMDAwRUQ5MCAgLy8gTVBVIFR5cGUKKyNkZWZpbmUgTlZJQ19NUFVfQ1RSTCAgICAgICAgICAgMHhFMDAwRUQ5NCAgLy8gTVBVIENvbnRyb2wKKyNkZWZpbmUgTlZJQ19NUFVfTlVNQkVSICAgICAgICAgMHhFMDAwRUQ5OCAgLy8gTVBVIFJlZ2lvbiBOdW1iZXIKKyNkZWZpbmUgTlZJQ19NUFVfQkFTRSAgICAgICAgICAgMHhFMDAwRUQ5QyAgLy8gTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MKKyNkZWZpbmUgTlZJQ19NUFVfQVRUUiAgICAgICAgICAgMHhFMDAwRURBMCAgLy8gTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUKKyNkZWZpbmUgTlZJQ19NUFVfQkFTRTEgICAgICAgICAgMHhFMDAwRURBNCAgLy8gTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgQWxpYXMgMQorI2RlZmluZSBOVklDX01QVV9BVFRSMSAgICAgICAgICAweEUwMDBFREE4ICAvLyBNUFUgUmVnaW9uIEF0dHJpYnV0ZSBhbmQgU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGlhcyAxCisjZGVmaW5lIE5WSUNfTVBVX0JBU0UyICAgICAgICAgIDB4RTAwMEVEQUMgIC8vIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIEFsaWFzIDIKKyNkZWZpbmUgTlZJQ19NUFVfQVRUUjIgICAgICAgICAgMHhFMDAwRURCMCAgLy8gTVBVIFJlZ2lvbiBBdHRyaWJ1dGUgYW5kIFNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxpYXMgMgorI2RlZmluZSBOVklDX01QVV9CQVNFMyAgICAgICAgICAweEUwMDBFREI0ICAvLyBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBBbGlhcyAzCisjZGVmaW5lIE5WSUNfTVBVX0FUVFIzICAgICAgICAgIDB4RTAwMEVEQjggIC8vIE1QVSBSZWdpb24gQXR0cmlidXRlIGFuZCBTaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsaWFzIDMKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTCAgICAgICAgICAgMHhFMDAwRURGMCAgLy8gRGVidWcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZworI2RlZmluZSBOVklDX0RCR19YRkVSICAgICAgICAgICAweEUwMDBFREY0ICAvLyBEZWJ1ZyBDb3JlIFJlZy4gVHJhbnNmZXIgU2VsZWN0CisjZGVmaW5lIE5WSUNfREJHX0RBVEEgICAgICAgICAgIDB4RTAwMEVERjggIC8vIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YQorI2RlZmluZSBOVklDX0RCR19JTlQgICAgICAgICAgICAweEUwMDBFREZDICAvLyBEZWJ1ZyBSZXNldCBJbnRlcnJ1cHQgQ29udHJvbAorI2RlZmluZSBOVklDX1NXX1RSSUcgICAgICAgICAgICAweEUwMDBFRjAwICAvLyBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfSU5UX1RZUEUgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0lOVF9UWVBFX0xJTkVTX00gICAweDAwMDAwMDFGICAvLyBOdW1iZXIgb2YgaW50ZXJydXB0IGxpbmVzICh4MzIpCisjZGVmaW5lIE5WSUNfSU5UX1RZUEVfTElORVNfUyAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0FDVExSIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19BQ1RMUl9ESVNGT0xEICAgICAgMHgwMDAwMDAwNCAgLy8gRGlzYWJsZSBJVCBGb2xkaW5nCisjZGVmaW5lIE5WSUNfQUNUTFJfRElTV0JVRiAgICAgIDB4MDAwMDAwMDIgIC8vIERpc2FibGUgV3JpdGUgQnVmZmVyCisjZGVmaW5lIE5WSUNfQUNUTFJfRElTTUNZQyAgICAgIDB4MDAwMDAwMDEgIC8vIERpc2FibGUgSW50ZXJydXB0cyBvZiBNdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDeWNsZSBJbnN0cnVjdGlvbnMKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1NUX0NUUkwgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NUX0NUUkxfQ09VTlQgICAgICAweDAwMDEwMDAwICAvLyBDb3VudCBGbGFnCisjZGVmaW5lIE5WSUNfU1RfQ1RSTF9DTEtfU1JDICAgIDB4MDAwMDAwMDQgIC8vIENsb2NrIFNvdXJjZQorI2RlZmluZSBOVklDX1NUX0NUUkxfSU5URU4gICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgRW5hYmxlCisjZGVmaW5lIE5WSUNfU1RfQ1RSTF9FTkFCTEUgICAgIDB4MDAwMDAwMDEgIC8vIEVuYWJsZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1RfUkVMT0FEIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19TVF9SRUxPQURfTSAgICAgICAgMHgwMEZGRkZGRiAgLy8gUmVsb2FkIFZhbHVlCisjZGVmaW5lIE5WSUNfU1RfUkVMT0FEX1MgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1NUX0NVUlJFTlQKKy8vIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19TVF9DVVJSRU5UX00gICAgICAgMHgwMEZGRkZGRiAgLy8gQ3VycmVudCBWYWx1ZQorI2RlZmluZSBOVklDX1NUX0NVUlJFTlRfUyAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19TVF9DQUwgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NUX0NBTF9OT1JFRiAgICAgICAweDgwMDAwMDAwICAvLyBObyByZWZlcmVuY2UgY2xvY2sKKyNkZWZpbmUgTlZJQ19TVF9DQUxfU0tFVyAgICAgICAgMHg0MDAwMDAwMCAgLy8gQ2xvY2sgc2tldworI2RlZmluZSBOVklDX1NUX0NBTF9PTkVNU19NICAgICAweDAwRkZGRkZGICAvLyAxbXMgcmVmZXJlbmNlIHZhbHVlCisjZGVmaW5lIE5WSUNfU1RfQ0FMX09ORU1TX1MgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0VOMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfRU4wX0lOVF9NICAgICAgICAgIDB4RkZGRkZGRkYgIC8vIEludGVycnVwdCBFbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMCAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDAgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDEgICAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEludGVycnVwdCAxIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyICAgICAgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMyAgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDMgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDQgICAgICAgICAgIDB4MDAwMDAwMTAgIC8vIEludGVycnVwdCA0IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQ1ICAgICAgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgNSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UNiAgICAgICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDYgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDcgICAgICAgICAgIDB4MDAwMDAwODAgIC8vIEludGVycnVwdCA3IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQ4ICAgICAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgOCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UOSAgICAgICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDkgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDEwICAgICAgICAgIDB4MDAwMDA0MDAgIC8vIEludGVycnVwdCAxMCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMTEgICAgICAgICAgMHgwMDAwMDgwMCAgLy8gSW50ZXJydXB0IDExIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxMiAgICAgICAgICAweDAwMDAxMDAwICAvLyBJbnRlcnJ1cHQgMTIgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDEzICAgICAgICAgIDB4MDAwMDIwMDAgIC8vIEludGVycnVwdCAxMyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMTQgICAgICAgICAgMHgwMDAwNDAwMCAgLy8gSW50ZXJydXB0IDE0IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxNSAgICAgICAgICAweDAwMDA4MDAwICAvLyBJbnRlcnJ1cHQgMTUgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDE2ICAgICAgICAgIDB4MDAwMTAwMDAgIC8vIEludGVycnVwdCAxNiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMTcgICAgICAgICAgMHgwMDAyMDAwMCAgLy8gSW50ZXJydXB0IDE3IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQxOCAgICAgICAgICAweDAwMDQwMDAwICAvLyBJbnRlcnJ1cHQgMTggZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDE5ICAgICAgICAgIDB4MDAwODAwMDAgIC8vIEludGVycnVwdCAxOSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjAgICAgICAgICAgMHgwMDEwMDAwMCAgLy8gSW50ZXJydXB0IDIwIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyMSAgICAgICAgICAweDAwMjAwMDAwICAvLyBJbnRlcnJ1cHQgMjEgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDIyICAgICAgICAgIDB4MDA0MDAwMDAgIC8vIEludGVycnVwdCAyMiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjMgICAgICAgICAgMHgwMDgwMDAwMCAgLy8gSW50ZXJydXB0IDIzIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyNCAgICAgICAgICAweDAxMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjQgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDI1ICAgICAgICAgIDB4MDIwMDAwMDAgIC8vIEludGVycnVwdCAyNSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjYgICAgICAgICAgMHgwNDAwMDAwMCAgLy8gSW50ZXJydXB0IDI2IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQyNyAgICAgICAgICAweDA4MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjcgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDI4ICAgICAgICAgIDB4MTAwMDAwMDAgIC8vIEludGVycnVwdCAyOCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjBfSU5UMjkgICAgICAgICAgMHgyMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI5IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMF9JTlQzMCAgICAgICAgICAweDQwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzAgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4wX0lOVDMxICAgICAgICAgIDB4ODAwMDAwMDAgIC8vIEludGVycnVwdCAzMSBlbmFibGUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0VOMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfRU4xX0lOVF9NICAgICAgICAgIDB4MDA3RkZGRkYgIC8vIEludGVycnVwdCBFbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UMzIgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDMyIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQzMyAgICAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMzMgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDM0ICAgICAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAzNCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UMzUgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDM1IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQzNiAgICAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgMzYgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDM3ICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCAzNyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UMzggICAgICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDM4IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQzOSAgICAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgMzkgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQwICAgICAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA0MCBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNDEgICAgICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDQxIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0MiAgICAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgNDIgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQzICAgICAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCA0MyBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNDQgICAgICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDQ0IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0NSAgICAgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgNDUgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQ2ICAgICAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCA0NiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNDcgICAgICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDQ3IGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ0OCAgICAgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgNDggZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDQ5ICAgICAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCA0OSBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNTAgICAgICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDUwIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ1MSAgICAgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgNTEgZW5hYmxlCisjZGVmaW5lIE5WSUNfRU4xX0lOVDUyICAgICAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCA1MiBlbmFibGUKKyNkZWZpbmUgTlZJQ19FTjFfSU5UNTMgICAgICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDUzIGVuYWJsZQorI2RlZmluZSBOVklDX0VOMV9JTlQ1NCAgICAgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgNTQgZW5hYmxlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19ESVMwIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVF9NICAgICAgICAgMHhGRkZGRkZGRiAgLy8gSW50ZXJydXB0IERpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDAgICAgICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDAgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMSAgICAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQyICAgICAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAyIGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDMgICAgICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDMgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UNCAgICAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgNCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQ1ICAgICAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCA1IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDYgICAgICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDYgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UNyAgICAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgNyBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMF9JTlQ4ICAgICAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA4IGRpc2FibGUKKyNkZWZpbmUgTlZJQ19ESVMwX0lOVDkgICAgICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDkgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTAgICAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgMTAgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTEgICAgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgMTEgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTIgICAgICAgICAweDAwMDAxMDAwICAvLyBJbnRlcnJ1cHQgMTIgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTMgICAgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgMTMgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTQgICAgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgMTQgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTUgICAgICAgICAweDAwMDA4MDAwICAvLyBJbnRlcnJ1cHQgMTUgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTYgICAgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgMTYgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTcgICAgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgMTcgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTggICAgICAgICAweDAwMDQwMDAwICAvLyBJbnRlcnJ1cHQgMTggZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMTkgICAgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgMTkgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjAgICAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgMjAgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjEgICAgICAgICAweDAwMjAwMDAwICAvLyBJbnRlcnJ1cHQgMjEgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjIgICAgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgMjIgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjMgICAgICAgICAweDAwODAwMDAwICAvLyBJbnRlcnJ1cHQgMjMgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjQgICAgICAgICAweDAxMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjQgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjUgICAgICAgICAweDAyMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjUgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjYgICAgICAgICAweDA0MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjYgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjcgICAgICAgICAweDA4MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjcgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjggICAgICAgICAweDEwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjggZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMjkgICAgICAgICAweDIwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjkgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMzAgICAgICAgICAweDQwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzAgZGlzYWJsZQorI2RlZmluZSBOVklDX0RJUzBfSU5UMzEgICAgICAgICAweDgwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzEgZGlzYWJsZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfRElTMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfRElTMV9JTlRfTSAgICAgICAgIDB4MDA3RkZGRkYgIC8vIEludGVycnVwdCBEaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzMiAgICAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAzMiBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzMyAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEludGVycnVwdCAzMyBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzNCAgICAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAzNCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzNSAgICAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzNSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzNiAgICAgICAgIDB4MDAwMDAwMTAgIC8vIEludGVycnVwdCAzNiBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzNyAgICAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCAzNyBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzOCAgICAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCAzOCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQzOSAgICAgICAgIDB4MDAwMDAwODAgIC8vIEludGVycnVwdCAzOSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0MCAgICAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA0MCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0MSAgICAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA0MSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0MiAgICAgICAgIDB4MDAwMDA0MDAgIC8vIEludGVycnVwdCA0MiBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0MyAgICAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCA0MyBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0NCAgICAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCA0NCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0NSAgICAgICAgIDB4MDAwMDIwMDAgIC8vIEludGVycnVwdCA0NSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0NiAgICAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCA0NiBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0NyAgICAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCA0NyBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0OCAgICAgICAgIDB4MDAwMTAwMDAgIC8vIEludGVycnVwdCA0OCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ0OSAgICAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCA0OSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ1MCAgICAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCA1MCBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ1MSAgICAgICAgIDB4MDAwODAwMDAgIC8vIEludGVycnVwdCA1MSBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ1MiAgICAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCA1MiBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ1MyAgICAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCA1MyBkaXNhYmxlCisjZGVmaW5lIE5WSUNfRElTMV9JTlQ1NCAgICAgICAgIDB4MDA0MDAwMDAgIC8vIEludGVycnVwdCA1NCBkaXNhYmxlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QRU5EMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UX00gICAgICAgIDB4RkZGRkZGRkYgIC8vIEludGVycnVwdCBTZXQgUGVuZGluZworI2RlZmluZSBOVklDX1BFTkQwX0lOVDAgICAgICAgICAweDAwMDAwMDAxICAvLyBJbnRlcnJ1cHQgMCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMSAgICAgICAgIDB4MDAwMDAwMDIgIC8vIEludGVycnVwdCAxIHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQyICAgICAgICAgMHgwMDAwMDAwNCAgLy8gSW50ZXJydXB0IDIgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDMgICAgICAgICAweDAwMDAwMDA4ICAvLyBJbnRlcnJ1cHQgMyBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UNCAgICAgICAgIDB4MDAwMDAwMTAgIC8vIEludGVycnVwdCA0IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQ1ICAgICAgICAgMHgwMDAwMDAyMCAgLy8gSW50ZXJydXB0IDUgcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDYgICAgICAgICAweDAwMDAwMDQwICAvLyBJbnRlcnJ1cHQgNiBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UNyAgICAgICAgIDB4MDAwMDAwODAgIC8vIEludGVycnVwdCA3IHBlbmQKKyNkZWZpbmUgTlZJQ19QRU5EMF9JTlQ4ICAgICAgICAgMHgwMDAwMDEwMCAgLy8gSW50ZXJydXB0IDggcGVuZAorI2RlZmluZSBOVklDX1BFTkQwX0lOVDkgICAgICAgICAweDAwMDAwMjAwICAvLyBJbnRlcnJ1cHQgOSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTAgICAgICAgIDB4MDAwMDA0MDAgIC8vIEludGVycnVwdCAxMCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTEgICAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCAxMSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTIgICAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCAxMiBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTMgICAgICAgIDB4MDAwMDIwMDAgIC8vIEludGVycnVwdCAxMyBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTQgICAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCAxNCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTUgICAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCAxNSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTYgICAgICAgIDB4MDAwMTAwMDAgIC8vIEludGVycnVwdCAxNiBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTcgICAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCAxNyBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTggICAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCAxOCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMTkgICAgICAgIDB4MDAwODAwMDAgIC8vIEludGVycnVwdCAxOSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjAgICAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCAyMCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjEgICAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCAyMSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjIgICAgICAgIDB4MDA0MDAwMDAgIC8vIEludGVycnVwdCAyMiBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjMgICAgICAgIDB4MDA4MDAwMDAgIC8vIEludGVycnVwdCAyMyBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjQgICAgICAgIDB4MDEwMDAwMDAgIC8vIEludGVycnVwdCAyNCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjUgICAgICAgIDB4MDIwMDAwMDAgIC8vIEludGVycnVwdCAyNSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjYgICAgICAgIDB4MDQwMDAwMDAgIC8vIEludGVycnVwdCAyNiBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjcgICAgICAgIDB4MDgwMDAwMDAgIC8vIEludGVycnVwdCAyNyBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjggICAgICAgIDB4MTAwMDAwMDAgIC8vIEludGVycnVwdCAyOCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMjkgICAgICAgIDB4MjAwMDAwMDAgIC8vIEludGVycnVwdCAyOSBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMzAgICAgICAgIDB4NDAwMDAwMDAgIC8vIEludGVycnVwdCAzMCBwZW5kCisjZGVmaW5lIE5WSUNfUEVORDBfSU5UMzEgICAgICAgIDB4ODAwMDAwMDAgIC8vIEludGVycnVwdCAzMSBwZW5kCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QRU5EMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUEVORDFfSU5UX00gICAgICAgIDB4MDA3RkZGRkYgIC8vIEludGVycnVwdCBTZXQgUGVuZGluZworI2RlZmluZSBOVklDX1BFTkQxX0lOVDMyICAgICAgICAweDAwMDAwMDAxICAvLyBJbnRlcnJ1cHQgMzIgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDMzICAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMzMgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDM0ICAgICAgICAweDAwMDAwMDA0ICAvLyBJbnRlcnJ1cHQgMzQgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDM1ICAgICAgICAweDAwMDAwMDA4ICAvLyBJbnRlcnJ1cHQgMzUgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDM2ICAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgMzYgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDM3ICAgICAgICAweDAwMDAwMDIwICAvLyBJbnRlcnJ1cHQgMzcgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDM4ICAgICAgICAweDAwMDAwMDQwICAvLyBJbnRlcnJ1cHQgMzggcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDM5ICAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgMzkgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQwICAgICAgICAweDAwMDAwMTAwICAvLyBJbnRlcnJ1cHQgNDAgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQxICAgICAgICAweDAwMDAwMjAwICAvLyBJbnRlcnJ1cHQgNDEgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQyICAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgNDIgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQzICAgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgNDMgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQ0ICAgICAgICAweDAwMDAxMDAwICAvLyBJbnRlcnJ1cHQgNDQgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQ1ICAgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgNDUgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQ2ICAgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgNDYgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQ3ICAgICAgICAweDAwMDA4MDAwICAvLyBJbnRlcnJ1cHQgNDcgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQ4ICAgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgNDggcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDQ5ICAgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgNDkgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDUwICAgICAgICAweDAwMDQwMDAwICAvLyBJbnRlcnJ1cHQgNTAgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDUxICAgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgNTEgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDUyICAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgNTIgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDUzICAgICAgICAweDAwMjAwMDAwICAvLyBJbnRlcnJ1cHQgNTMgcGVuZAorI2RlZmluZSBOVklDX1BFTkQxX0lOVDU0ICAgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgNTQgcGVuZAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfVU5QRU5EMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlRfTSAgICAgIDB4RkZGRkZGRkYgIC8vIEludGVycnVwdCBDbGVhciBQZW5kaW5nCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQwICAgICAgIDB4MDAwMDAwMDEgIC8vIEludGVycnVwdCAwIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMSAgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDIgICAgICAgMHgwMDAwMDAwNCAgLy8gSW50ZXJydXB0IDIgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQzICAgICAgIDB4MDAwMDAwMDggIC8vIEludGVycnVwdCAzIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UNCAgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgNCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDUgICAgICAgMHgwMDAwMDAyMCAgLy8gSW50ZXJydXB0IDUgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQ2ICAgICAgIDB4MDAwMDAwNDAgIC8vIEludGVycnVwdCA2IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UNyAgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgNyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDggICAgICAgMHgwMDAwMDEwMCAgLy8gSW50ZXJydXB0IDggdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQ5ICAgICAgIDB4MDAwMDAyMDAgIC8vIEludGVycnVwdCA5IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTAgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgMTAgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQxMSAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCAxMSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDEyICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDEyIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTMgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgMTMgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQxNCAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCAxNCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDE1ICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDE1IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTYgICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgMTYgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQxNyAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCAxNyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDE4ICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDE4IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMTkgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgMTkgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyMCAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCAyMCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDIxICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDIxIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjIgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgMjIgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyMyAgICAgIDB4MDA4MDAwMDAgIC8vIEludGVycnVwdCAyMyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDI0ICAgICAgMHgwMTAwMDAwMCAgLy8gSW50ZXJydXB0IDI0IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjUgICAgICAweDAyMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjUgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyNiAgICAgIDB4MDQwMDAwMDAgIC8vIEludGVycnVwdCAyNiB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDI3ICAgICAgMHgwODAwMDAwMCAgLy8gSW50ZXJydXB0IDI3IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMjggICAgICAweDEwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjggdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMF9JTlQyOSAgICAgIDB4MjAwMDAwMDAgIC8vIEludGVycnVwdCAyOSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQwX0lOVDMwICAgICAgMHg0MDAwMDAwMCAgLy8gSW50ZXJydXB0IDMwIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDBfSU5UMzEgICAgICAweDgwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzEgdW5wZW5kCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19VTlBFTkQxIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVF9NICAgICAgMHgwMDdGRkZGRiAgLy8gSW50ZXJydXB0IENsZWFyIFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDMyICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDMyIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UMzMgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMzMgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQzNCAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAzNCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDM1ICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDM1IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UMzYgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgMzYgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQzNyAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCAzNyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDM4ICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDM4IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UMzkgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgMzkgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0MCAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA0MCB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDQxICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDQxIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDIgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgNDIgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0MyAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCA0MyB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDQ0ICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDQ0IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDUgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgNDUgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0NiAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCA0NiB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDQ3ICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDQ3IHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNDggICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgNDggdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ0OSAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCA0OSB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDUwICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDUwIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNTEgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgNTEgdW5wZW5kCisjZGVmaW5lIE5WSUNfVU5QRU5EMV9JTlQ1MiAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCA1MiB1bnBlbmQKKyNkZWZpbmUgTlZJQ19VTlBFTkQxX0lOVDUzICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDUzIHVucGVuZAorI2RlZmluZSBOVklDX1VOUEVORDFfSU5UNTQgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgNTQgdW5wZW5kCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19BQ1RJVkUwIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVF9NICAgICAgMHhGRkZGRkZGRiAgLy8gSW50ZXJydXB0IEFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMCAgICAgICAweDAwMDAwMDAxICAvLyBJbnRlcnJ1cHQgMCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDEgICAgICAgMHgwMDAwMDAwMiAgLy8gSW50ZXJydXB0IDEgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyICAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAyIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMyAgICAgICAweDAwMDAwMDA4ICAvLyBJbnRlcnJ1cHQgMyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDQgICAgICAgMHgwMDAwMDAxMCAgLy8gSW50ZXJydXB0IDQgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQ1ICAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCA1IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UNiAgICAgICAweDAwMDAwMDQwICAvLyBJbnRlcnJ1cHQgNiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDcgICAgICAgMHgwMDAwMDA4MCAgLy8gSW50ZXJydXB0IDcgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQ4ICAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA4IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UOSAgICAgICAweDAwMDAwMjAwICAvLyBJbnRlcnJ1cHQgOSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDEwICAgICAgMHgwMDAwMDQwMCAgLy8gSW50ZXJydXB0IDEwIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMTEgICAgICAweDAwMDAwODAwICAvLyBJbnRlcnJ1cHQgMTEgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxMiAgICAgIDB4MDAwMDEwMDAgIC8vIEludGVycnVwdCAxMiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDEzICAgICAgMHgwMDAwMjAwMCAgLy8gSW50ZXJydXB0IDEzIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMTQgICAgICAweDAwMDA0MDAwICAvLyBJbnRlcnJ1cHQgMTQgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxNSAgICAgIDB4MDAwMDgwMDAgIC8vIEludGVycnVwdCAxNSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDE2ICAgICAgMHgwMDAxMDAwMCAgLy8gSW50ZXJydXB0IDE2IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMTcgICAgICAweDAwMDIwMDAwICAvLyBJbnRlcnJ1cHQgMTcgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQxOCAgICAgIDB4MDAwNDAwMDAgIC8vIEludGVycnVwdCAxOCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDE5ICAgICAgMHgwMDA4MDAwMCAgLy8gSW50ZXJydXB0IDE5IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjAgICAgICAweDAwMTAwMDAwICAvLyBJbnRlcnJ1cHQgMjAgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyMSAgICAgIDB4MDAyMDAwMDAgIC8vIEludGVycnVwdCAyMSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDIyICAgICAgMHgwMDQwMDAwMCAgLy8gSW50ZXJydXB0IDIyIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjMgICAgICAweDAwODAwMDAwICAvLyBJbnRlcnJ1cHQgMjMgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyNCAgICAgIDB4MDEwMDAwMDAgIC8vIEludGVycnVwdCAyNCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDI1ICAgICAgMHgwMjAwMDAwMCAgLy8gSW50ZXJydXB0IDI1IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjYgICAgICAweDA0MDAwMDAwICAvLyBJbnRlcnJ1cHQgMjYgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQyNyAgICAgIDB4MDgwMDAwMDAgIC8vIEludGVycnVwdCAyNyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDI4ICAgICAgMHgxMDAwMDAwMCAgLy8gSW50ZXJydXB0IDI4IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTBfSU5UMjkgICAgICAweDIwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjkgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMF9JTlQzMCAgICAgIDB4NDAwMDAwMDAgIC8vIEludGVycnVwdCAzMCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUwX0lOVDMxICAgICAgMHg4MDAwMDAwMCAgLy8gSW50ZXJydXB0IDMxIGFjdGl2ZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfQUNUSVZFMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlRfTSAgICAgIDB4MDA3RkZGRkYgIC8vIEludGVycnVwdCBBY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDMyICAgICAgMHgwMDAwMDAwMSAgLy8gSW50ZXJydXB0IDMyIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UMzMgICAgICAweDAwMDAwMDAyICAvLyBJbnRlcnJ1cHQgMzMgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQzNCAgICAgIDB4MDAwMDAwMDQgIC8vIEludGVycnVwdCAzNCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDM1ICAgICAgMHgwMDAwMDAwOCAgLy8gSW50ZXJydXB0IDM1IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UMzYgICAgICAweDAwMDAwMDEwICAvLyBJbnRlcnJ1cHQgMzYgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQzNyAgICAgIDB4MDAwMDAwMjAgIC8vIEludGVycnVwdCAzNyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDM4ICAgICAgMHgwMDAwMDA0MCAgLy8gSW50ZXJydXB0IDM4IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UMzkgICAgICAweDAwMDAwMDgwICAvLyBJbnRlcnJ1cHQgMzkgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0MCAgICAgIDB4MDAwMDAxMDAgIC8vIEludGVycnVwdCA0MCBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDQxICAgICAgMHgwMDAwMDIwMCAgLy8gSW50ZXJydXB0IDQxIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDIgICAgICAweDAwMDAwNDAwICAvLyBJbnRlcnJ1cHQgNDIgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0MyAgICAgIDB4MDAwMDA4MDAgIC8vIEludGVycnVwdCA0MyBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDQ0ICAgICAgMHgwMDAwMTAwMCAgLy8gSW50ZXJydXB0IDQ0IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDUgICAgICAweDAwMDAyMDAwICAvLyBJbnRlcnJ1cHQgNDUgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0NiAgICAgIDB4MDAwMDQwMDAgIC8vIEludGVycnVwdCA0NiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDQ3ICAgICAgMHgwMDAwODAwMCAgLy8gSW50ZXJydXB0IDQ3IGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNDggICAgICAweDAwMDEwMDAwICAvLyBJbnRlcnJ1cHQgNDggYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ0OSAgICAgIDB4MDAwMjAwMDAgIC8vIEludGVycnVwdCA0OSBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDUwICAgICAgMHgwMDA0MDAwMCAgLy8gSW50ZXJydXB0IDUwIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNTEgICAgICAweDAwMDgwMDAwICAvLyBJbnRlcnJ1cHQgNTEgYWN0aXZlCisjZGVmaW5lIE5WSUNfQUNUSVZFMV9JTlQ1MiAgICAgIDB4MDAxMDAwMDAgIC8vIEludGVycnVwdCA1MiBhY3RpdmUKKyNkZWZpbmUgTlZJQ19BQ1RJVkUxX0lOVDUzICAgICAgMHgwMDIwMDAwMCAgLy8gSW50ZXJydXB0IDUzIGFjdGl2ZQorI2RlZmluZSBOVklDX0FDVElWRTFfSU5UNTQgICAgICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgNTQgYWN0aXZlCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkwIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDNfTSAgICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDMgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTBfSU5UMl9NICAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgMiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMF9JTlQxX00gICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCAxIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkwX0lOVDBfTSAgICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDAgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTBfSU5UM19TICAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTBfSU5UMl9TICAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTBfSU5UMV9TICAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTBfSU5UMF9TICAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkxIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDdfTSAgICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDcgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTFfSU5UNl9NICAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgNiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMV9JTlQ1X00gICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCA1IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxX0lOVDRfTSAgICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDQgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTFfSU5UN19TICAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTFfSU5UNl9TICAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTFfSU5UNV9TICAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTFfSU5UNF9TICAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkyIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkkyX0lOVDExX00gICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDExIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkyX0lOVDEwX00gICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDEwIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkyX0lOVDlfTSAgICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDkgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTJfSU5UOF9NICAgICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgOCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMl9JTlQxMV9TICAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJMl9JTlQxMF9TICAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJMl9JTlQ5X1MgICAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJMl9JTlQ4X1MgICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTNfSU5UMTVfTSAgICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMTUgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTNfSU5UMTRfTSAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgMTQgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTNfSU5UMTNfTSAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgMTMgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTNfSU5UMTJfTSAgICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgMTIgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTNfSU5UMTVfUyAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTNfSU5UMTRfUyAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTNfSU5UMTNfUyAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTNfSU5UMTJfUyAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkk0IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE5X00gICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDE5IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE4X00gICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDE4IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE3X00gICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDE3IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE2X00gICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDE2IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE5X1MgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE4X1MgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE3X1MgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkk0X0lOVDE2X1MgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJNSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyM19NICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCAyMyBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyMl9NICAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCAyMiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyMV9NICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCAyMSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyMF9NICAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCAyMCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyM19TICAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyMl9TICAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyMV9TICAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJNV9JTlQyMF9TICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTYgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTZfSU5UMjdfTSAgICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMjcgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTZfSU5UMjZfTSAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgMjYgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTZfSU5UMjVfTSAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgMjUgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTZfSU5UMjRfTSAgICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgMjQgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTZfSU5UMjdfUyAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTZfSU5UMjZfUyAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTZfSU5UMjVfUyAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTZfSU5UMjRfUyAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkk3IHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDMxX00gICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDMxIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDMwX00gICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDMwIFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDI5X00gICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDI5IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDI4X00gICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDI4IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDMxX1MgICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDMwX1MgICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDI5X1MgICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkk3X0lOVDI4X1MgICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJOCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzNV9NICAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCAzNSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzNF9NICAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCAzNCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzM19NICAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCAzMyBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzMl9NICAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCAzMiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzNV9TICAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzNF9TICAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzM19TICAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJOF9JTlQzMl9TICAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTkgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTlfSU5UMzlfTSAgICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgMzkgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTlfSU5UMzhfTSAgICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgMzggUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTlfSU5UMzdfTSAgICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgMzcgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTlfSU5UMzZfTSAgICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgMzYgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTlfSU5UMzlfUyAgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTlfSU5UMzhfUyAgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTlfSU5UMzdfUyAgICAgICAxMworI2RlZmluZSBOVklDX1BSSTlfSU5UMzZfUyAgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkxMCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDNfTSAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCA0MyBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDJfTSAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCA0MiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDFfTSAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCA0MSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDBfTSAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCA0MCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDNfUyAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDJfUyAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDFfUyAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJMTBfSU5UNDBfUyAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1BSSTExIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0N19NICAgICAgMHhFMDAwMDAwMCAgLy8gSW50ZXJydXB0IDQ3IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0Nl9NICAgICAgMHgwMEUwMDAwMCAgLy8gSW50ZXJydXB0IDQ2IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0NV9NICAgICAgMHgwMDAwRTAwMCAgLy8gSW50ZXJydXB0IDQ1IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0NF9NICAgICAgMHgwMDAwMDBFMCAgLy8gSW50ZXJydXB0IDQ0IFByaW9yaXR5IE1hc2sKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0N19TICAgICAgMjkKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0Nl9TICAgICAgMjEKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0NV9TICAgICAgMTMKKyNkZWZpbmUgTlZJQ19QUkkxMV9JTlQ0NF9TICAgICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfUFJJMTIgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1BSSTEyX0lOVDUxX00gICAgICAweEUwMDAwMDAwICAvLyBJbnRlcnJ1cHQgNTEgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEyX0lOVDUwX00gICAgICAweDAwRTAwMDAwICAvLyBJbnRlcnJ1cHQgNTAgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEyX0lOVDQ5X00gICAgICAweDAwMDBFMDAwICAvLyBJbnRlcnJ1cHQgNDkgUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEyX0lOVDQ4X00gICAgICAweDAwMDAwMEUwICAvLyBJbnRlcnJ1cHQgNDggUHJpb3JpdHkgTWFzaworI2RlZmluZSBOVklDX1BSSTEyX0lOVDUxX1MgICAgICAyOQorI2RlZmluZSBOVklDX1BSSTEyX0lOVDUwX1MgICAgICAyMQorI2RlZmluZSBOVklDX1BSSTEyX0lOVDQ5X1MgICAgICAxMworI2RlZmluZSBOVklDX1BSSTEyX0lOVDQ4X1MgICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19QUkkxMyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTVfTSAgICAgIDB4RTAwMDAwMDAgIC8vIEludGVycnVwdCA1NSBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTRfTSAgICAgIDB4MDBFMDAwMDAgIC8vIEludGVycnVwdCA1NCBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTNfTSAgICAgIDB4MDAwMEUwMDAgIC8vIEludGVycnVwdCA1MyBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTJfTSAgICAgIDB4MDAwMDAwRTAgIC8vIEludGVycnVwdCA1MiBQcmlvcml0eSBNYXNrCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTVfUyAgICAgIDI5CisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTRfUyAgICAgIDIxCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTNfUyAgICAgIDEzCisjZGVmaW5lIE5WSUNfUFJJMTNfSU5UNTJfUyAgICAgIDUKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0NQVUlEIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19DUFVJRF9JTVBfTSAgICAgICAgMHhGRjAwMDAwMCAgLy8gSW1wbGVtZW50ZXIgQ29kZQorI2RlZmluZSBOVklDX0NQVUlEX0lNUF9BUk0gICAgICAweDQxMDAwMDAwICAvLyBBUk0KKyNkZWZpbmUgTlZJQ19DUFVJRF9WQVJfTSAgICAgICAgMHgwMEYwMDAwMCAgLy8gVmFyaWFudCBOdW1iZXIKKyNkZWZpbmUgTlZJQ19DUFVJRF9DT05fTSAgICAgICAgMHgwMDBGMDAwMCAgLy8gQ29uc3RhbnQKKyNkZWZpbmUgTlZJQ19DUFVJRF9QQVJUTk9fTSAgICAgMHgwMDAwRkZGMCAgLy8gUGFydCBOdW1iZXIKKyNkZWZpbmUgTlZJQ19DUFVJRF9QQVJUTk9fQ00zICAgMHgwMDAwQzIzMCAgLy8gQ29ydGV4LU0zIHByb2Nlc3NvcgorI2RlZmluZSBOVklDX0NQVUlEX1BBUlROT19DTTQgICAweDAwMDBDMjQwICAvLyBDb3J0ZXgtTTQgcHJvY2Vzc29yCisjZGVmaW5lIE5WSUNfQ1BVSURfUkVWX00gICAgICAgIDB4MDAwMDAwMEYgIC8vIFJldmlzaW9uIE51bWJlcgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfSU5UX0NUUkwgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0lOVF9DVFJMX05NSV9TRVQgICAweDgwMDAwMDAwICAvLyBOTUkgU2V0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9QRU5EX1NWICAgMHgxMDAwMDAwMCAgLy8gUGVuZFNWIFNldCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVU5QRU5EX1NWIDB4MDgwMDAwMDAgIC8vIFBlbmRTViBDbGVhciBQZW5kaW5nCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfUEVORFNUU0VUIDB4MDQwMDAwMDAgIC8vIFN5c1RpY2sgU2V0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9QRU5EU1RDTFIgMHgwMjAwMDAwMCAgLy8gU3lzVGljayBDbGVhciBQZW5kaW5nCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfSVNSX1BSRSAgIDB4MDA4MDAwMDAgIC8vIERlYnVnIEludGVycnVwdCBIYW5kbGluZworI2RlZmluZSBOVklDX0lOVF9DVFJMX0lTUl9QRU5EICAweDAwNDAwMDAwICAvLyBJbnRlcnJ1cHQgUGVuZGluZworI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fTSAweDAwMDdGMDAwICAvLyBJbnRlcnJ1cHQgUGVuZGluZyBWZWN0b3IgTnVtYmVyCisjdW5kZWYgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX00KKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX00gMHgwMDBGRjAwMCAgLy8gSW50ZXJydXB0IFBlbmRpbmcgVmVjdG9yIE51bWJlcgorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fTk1JIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMCAgLy8gTk1JCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9IQVJEIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMCAgLy8gSGFyZCBmYXVsdAorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fTUVNIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMCAgLy8gTWVtb3J5IG1hbmFnZW1lbnQgZmF1bHQKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX0JVUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDUwMDAgIC8vIEJ1cyBmYXVsdAorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fVVNHIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjAwMCAgLy8gVXNhZ2UgZmF1bHQKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX1NWQyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEIwMDAgIC8vIFNWQ2FsbAorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19QRU5fUE5EU1YgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBFMDAwICAvLyBQZW5kU1YKKyNkZWZpbmUgTlZJQ19JTlRfQ1RSTF9WRUNfUEVOX1RJQ0sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwICAvLyBTeXNUaWNrCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfUkVUX0JBU0UgIDB4MDAwMDA4MDAgIC8vIFJldHVybiB0byBCYXNlCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX0FDVF9NIDB4MDAwMDAwN0YgIC8vIEludGVycnVwdCBQZW5kaW5nIFZlY3RvciBOdW1iZXIKKyN1bmRlZiBOVklDX0lOVF9DVFJMX1ZFQ19BQ1RfTQorI2RlZmluZSBOVklDX0lOVF9DVFJMX1ZFQ19BQ1RfTSAweDAwMDAwMEZGICAvLyBJbnRlcnJ1cHQgUGVuZGluZyBWZWN0b3IgTnVtYmVyCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX1BFTl9TIDEyCisjZGVmaW5lIE5WSUNfSU5UX0NUUkxfVkVDX0FDVF9TIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX1ZUQUJMRSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfVlRBQkxFX0JBU0UgICAgICAgIDB4MjAwMDAwMDAgIC8vIFZlY3RvciBUYWJsZSBCYXNlCisjZGVmaW5lIE5WSUNfVlRBQkxFX09GRlNFVF9NICAgIDB4MUZGRkZFMDAgIC8vIFZlY3RvciBUYWJsZSBPZmZzZXQKKyN1bmRlZiBOVklDX1ZUQUJMRV9PRkZTRVRfTQorI2RlZmluZSBOVklDX1ZUQUJMRV9PRkZTRVRfTSAgICAweDFGRkZGQzAwICAvLyBWZWN0b3IgVGFibGUgT2Zmc2V0CisjZGVmaW5lIE5WSUNfVlRBQkxFX09GRlNFVF9TICAgIDkKKyN1bmRlZiBOVklDX1ZUQUJMRV9PRkZTRVRfUworI2RlZmluZSBOVklDX1ZUQUJMRV9PRkZTRVRfUyAgICAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfQVBJTlQgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0FQSU5UX1ZFQ1RLRVlfTSAgICAweEZGRkYwMDAwICAvLyBSZWdpc3RlciBLZXkKKyNkZWZpbmUgTlZJQ19BUElOVF9WRUNUS0VZICAgICAgMHgwNUZBMDAwMCAgLy8gVmVjdG9yIGtleQorI2RlZmluZSBOVklDX0FQSU5UX0VORElBTkVTUyAgICAweDAwMDA4MDAwICAvLyBEYXRhIEVuZGlhbmVzcworI2RlZmluZSBOVklDX0FQSU5UX1BSSUdST1VQX00gICAweDAwMDAwNzAwICAvLyBJbnRlcnJ1cHQgUHJpb3JpdHkgR3JvdXBpbmcKKyNkZWZpbmUgTlZJQ19BUElOVF9QUklHUk9VUF83XzEgMHgwMDAwMDAwMCAgLy8gUHJpb3JpdHkgZ3JvdXAgNy4xIHNwbGl0CisjZGVmaW5lIE5WSUNfQVBJTlRfUFJJR1JPVVBfNl8yIDB4MDAwMDAxMDAgIC8vIFByaW9yaXR5IGdyb3VwIDYuMiBzcGxpdAorI2RlZmluZSBOVklDX0FQSU5UX1BSSUdST1VQXzVfMyAweDAwMDAwMjAwICAvLyBQcmlvcml0eSBncm91cCA1LjMgc3BsaXQKKyNkZWZpbmUgTlZJQ19BUElOVF9QUklHUk9VUF80XzQgMHgwMDAwMDMwMCAgLy8gUHJpb3JpdHkgZ3JvdXAgNC40IHNwbGl0CisjZGVmaW5lIE5WSUNfQVBJTlRfUFJJR1JPVVBfM181IDB4MDAwMDA0MDAgIC8vIFByaW9yaXR5IGdyb3VwIDMuNSBzcGxpdAorI2RlZmluZSBOVklDX0FQSU5UX1BSSUdST1VQXzJfNiAweDAwMDAwNTAwICAvLyBQcmlvcml0eSBncm91cCAyLjYgc3BsaXQKKyNkZWZpbmUgTlZJQ19BUElOVF9QUklHUk9VUF8xXzcgMHgwMDAwMDYwMCAgLy8gUHJpb3JpdHkgZ3JvdXAgMS43IHNwbGl0CisjZGVmaW5lIE5WSUNfQVBJTlRfUFJJR1JPVVBfMF84IDB4MDAwMDA3MDAgIC8vIFByaW9yaXR5IGdyb3VwIDAuOCBzcGxpdAorI2RlZmluZSBOVklDX0FQSU5UX1NZU1JFU0VUUkVRICAweDAwMDAwMDA0ICAvLyBTeXN0ZW0gUmVzZXQgUmVxdWVzdAorI2RlZmluZSBOVklDX0FQSU5UX1ZFQ1RfQ0xSX0FDVCAweDAwMDAwMDAyICAvLyBDbGVhciBBY3RpdmUgTk1JIC8gRmF1bHQKKyNkZWZpbmUgTlZJQ19BUElOVF9WRUNUX1JFU0VUICAgMHgwMDAwMDAwMSAgLy8gU3lzdGVtIFJlc2V0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19TWVNfQ1RSTCByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1lTX0NUUkxfU0VWT05QRU5EIDB4MDAwMDAwMTAgIC8vIFdha2UgVXAgb24gUGVuZGluZworI2RlZmluZSBOVklDX1NZU19DVFJMX1NMRUVQREVFUCAweDAwMDAwMDA0ICAvLyBEZWVwIFNsZWVwIEVuYWJsZQorI2RlZmluZSBOVklDX1NZU19DVFJMX1NMRUVQRVhJVCAweDAwMDAwMDAyICAvLyBTbGVlcCBvbiBJU1IgRXhpdAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfQ0ZHX0NUUkwgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0NGR19DVFJMX1NUS0FMSUdOICAweDAwMDAwMjAwICAvLyBTdGFjayBBbGlnbm1lbnQgb24gRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVudHJ5CisjZGVmaW5lIE5WSUNfQ0ZHX0NUUkxfQkZIRk5NSUdOIDB4MDAwMDAxMDAgIC8vIElnbm9yZSBCdXMgRmF1bHQgaW4gTk1JIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXVsdAorI2RlZmluZSBOVklDX0NGR19DVFJMX0RJVjAgICAgICAweDAwMDAwMDEwICAvLyBUcmFwIG9uIERpdmlkZSBieSAwCisjZGVmaW5lIE5WSUNfQ0ZHX0NUUkxfVU5BTElHTkVEIDB4MDAwMDAwMDggIC8vIFRyYXAgb24gVW5hbGlnbmVkIEFjY2VzcworI2RlZmluZSBOVklDX0NGR19DVFJMX01BSU5fUEVORCAweDAwMDAwMDAyICAvLyBBbGxvdyBNYWluIEludGVycnVwdCBUcmlnZ2VyCisjZGVmaW5lIE5WSUNfQ0ZHX0NUUkxfQkFTRV9USFIgIDB4MDAwMDAwMDEgIC8vIFRocmVhZCBTdGF0ZSBDb250cm9sCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19TWVNfUFJJMSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1lTX1BSSTFfVVNBR0VfTSAgIDB4MDBFMDAwMDAgIC8vIFVzYWdlIEZhdWx0IFByaW9yaXR5CisjZGVmaW5lIE5WSUNfU1lTX1BSSTFfQlVTX00gICAgIDB4MDAwMEUwMDAgIC8vIEJ1cyBGYXVsdCBQcmlvcml0eQorI2RlZmluZSBOVklDX1NZU19QUkkxX01FTV9NICAgICAweDAwMDAwMEUwICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBQcmlvcml0eQorI2RlZmluZSBOVklDX1NZU19QUkkxX1VTQUdFX1MgICAyMQorI2RlZmluZSBOVklDX1NZU19QUkkxX0JVU19TICAgICAxMworI2RlZmluZSBOVklDX1NZU19QUkkxX01FTV9TICAgICA1CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19TWVNfUFJJMiByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1lTX1BSSTJfU1ZDX00gICAgIDB4RTAwMDAwMDAgIC8vIFNWQ2FsbCBQcmlvcml0eQorI2RlZmluZSBOVklDX1NZU19QUkkyX1NWQ19TICAgICAyOQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1lTX1BSSTMgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX1NZU19QUkkzX1RJQ0tfTSAgICAweEUwMDAwMDAwICAvLyBTeXNUaWNrIEV4Y2VwdGlvbiBQcmlvcml0eQorI2RlZmluZSBOVklDX1NZU19QUkkzX1BFTkRTVl9NICAweDAwRTAwMDAwICAvLyBQZW5kU1YgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJM19ERUJVR19NICAgMHgwMDAwMDBFMCAgLy8gRGVidWcgUHJpb3JpdHkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJM19USUNLX1MgICAgMjkKKyNkZWZpbmUgTlZJQ19TWVNfUFJJM19QRU5EU1ZfUyAgMjEKKyNkZWZpbmUgTlZJQ19TWVNfUFJJM19ERUJVR19TICAgNQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1lTX0hORF9DVFJMCisvLyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX1VTQUdFIDB4MDAwNDAwMDAgIC8vIFVzYWdlIEZhdWx0IEVuYWJsZQorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9CVVMgICAweDAwMDIwMDAwICAvLyBCdXMgRmF1bHQgRW5hYmxlCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX01FTSAgIDB4MDAwMTAwMDAgIC8vIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IEVuYWJsZQorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9TVkMgICAweDAwMDA4MDAwICAvLyBTVkMgQ2FsbCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX0JVU1AgIDB4MDAwMDQwMDAgIC8vIEJ1cyBGYXVsdCBQZW5kaW5nCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX01FTVAgIDB4MDAwMDIwMDAgIC8vIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IFBlbmRpbmcKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfVVNBR0VQIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMCAgLy8gVXNhZ2UgRmF1bHQgUGVuZGluZworI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9USUNLICAweDAwMDAwODAwICAvLyBTeXNUaWNrIEV4Y2VwdGlvbiBBY3RpdmUKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfUE5EU1YgMHgwMDAwMDQwMCAgLy8gUGVuZFNWIEV4Y2VwdGlvbiBBY3RpdmUKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfTU9OICAgMHgwMDAwMDEwMCAgLy8gRGVidWcgTW9uaXRvciBBY3RpdmUKKyNkZWZpbmUgTlZJQ19TWVNfSE5EX0NUUkxfU1ZDQSAgMHgwMDAwMDA4MCAgLy8gU1ZDIENhbGwgQWN0aXZlCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX1VTR0EgIDB4MDAwMDAwMDggIC8vIFVzYWdlIEZhdWx0IEFjdGl2ZQorI2RlZmluZSBOVklDX1NZU19ITkRfQ1RSTF9CVVNBICAweDAwMDAwMDAyICAvLyBCdXMgRmF1bHQgQWN0aXZlCisjZGVmaW5lIE5WSUNfU1lTX0hORF9DVFJMX01FTUEgIDB4MDAwMDAwMDEgIC8vIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IEFjdGl2ZQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfRkFVTFRfU1RBVAorLy8gcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfRElWMCAgICAweDAyMDAwMDAwICAvLyBEaXZpZGUtYnktWmVybyBVc2FnZSBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfVU5BTElHTiAweDAxMDAwMDAwICAvLyBVbmFsaWduZWQgQWNjZXNzIFVzYWdlIEZhdWx0CisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9OT0NQICAgIDB4MDAwODAwMDAgIC8vIE5vIENvcHJvY2Vzc29yIFVzYWdlIEZhdWx0CisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9JTlZQQyAgIDB4MDAwNDAwMDAgIC8vIEludmFsaWQgUEMgTG9hZCBVc2FnZSBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfSU5WU1RBVCAweDAwMDIwMDAwICAvLyBJbnZhbGlkIFN0YXRlIFVzYWdlIEZhdWx0CisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9VTkRFRiAgIDB4MDAwMTAwMDAgIC8vIFVuZGVmaW5lZCBJbnN0cnVjdGlvbiBVc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXVsdAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfQkZBUlYgICAweDAwMDA4MDAwICAvLyBCdXMgRmF1bHQgQWRkcmVzcyBSZWdpc3RlciBWYWxpZAorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfQkxTUEVSUiAweDAwMDAyMDAwICAvLyBCdXMgRmF1bHQgb24gRmxvYXRpbmctUG9pbnQgTGF6eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGF0ZSBQcmVzZXJ2YXRpb24KKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX0JTVEtFICAgMHgwMDAwMTAwMCAgLy8gU3RhY2sgQnVzIEZhdWx0CisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9CVVNUS0UgIDB4MDAwMDA4MDAgIC8vIFVuc3RhY2sgQnVzIEZhdWx0CisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9JTVBSRSAgIDB4MDAwMDA0MDAgIC8vIEltcHJlY2lzZSBEYXRhIEJ1cyBFcnJvcgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfUFJFQ0lTRSAweDAwMDAwMjAwICAvLyBQcmVjaXNlIERhdGEgQnVzIEVycm9yCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9JQlVTICAgIDB4MDAwMDAxMDAgIC8vIEluc3RydWN0aW9uIEJ1cyBFcnJvcgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfTU1BUlYgICAweDAwMDAwMDgwICAvLyBNZW1vcnkgTWFuYWdlbWVudCBGYXVsdCBBZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIFZhbGlkCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9NTFNQRVJSIDB4MDAwMDAwMjAgIC8vIE1lbW9yeSBNYW5hZ2VtZW50IEZhdWx0IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZsb2F0aW5nLVBvaW50IExhenkgU3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmF0aW9uCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9NU1RLRSAgIDB4MDAwMDAwMTAgIC8vIFN0YWNrIEFjY2VzcyBWaW9sYXRpb24KKyNkZWZpbmUgTlZJQ19GQVVMVF9TVEFUX01VU1RLRSAgMHgwMDAwMDAwOCAgLy8gVW5zdGFjayBBY2Nlc3MgVmlvbGF0aW9uCisjZGVmaW5lIE5WSUNfRkFVTFRfU1RBVF9ERVJSICAgIDB4MDAwMDAwMDIgIC8vIERhdGEgQWNjZXNzIFZpb2xhdGlvbgorI2RlZmluZSBOVklDX0ZBVUxUX1NUQVRfSUVSUiAgICAweDAwMDAwMDAxICAvLyBJbnN0cnVjdGlvbiBBY2Nlc3MgVmlvbGF0aW9uCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19IRkFVTFRfU1RBVAorLy8gcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0hGQVVMVF9TVEFUX0RCRyAgICAweDgwMDAwMDAwICAvLyBEZWJ1ZyBFdmVudAorI2RlZmluZSBOVklDX0hGQVVMVF9TVEFUX0ZPUkNFRCAweDQwMDAwMDAwICAvLyBGb3JjZWQgSGFyZCBGYXVsdAorI2RlZmluZSBOVklDX0hGQVVMVF9TVEFUX1ZFQ1QgICAweDAwMDAwMDAyICAvLyBWZWN0b3IgVGFibGUgUmVhZCBGYXVsdAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfREVCVUdfU1RBVAorLy8gcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0RFQlVHX1NUQVRfRVhUUk5MICAweDAwMDAwMDEwICAvLyBFREJHUlEgYXNzZXJ0ZWQKKyNkZWZpbmUgTlZJQ19ERUJVR19TVEFUX1ZDQVRDSCAgMHgwMDAwMDAwOCAgLy8gVmVjdG9yIGNhdGNoCisjZGVmaW5lIE5WSUNfREVCVUdfU1RBVF9EV1RUUkFQIDB4MDAwMDAwMDQgIC8vIERXVCBtYXRjaAorI2RlZmluZSBOVklDX0RFQlVHX1NUQVRfQktQVCAgICAweDAwMDAwMDAyICAvLyBCcmVha3BvaW50IGluc3RydWN0aW9uCisjZGVmaW5lIE5WSUNfREVCVUdfU1RBVF9IQUxURUQgIDB4MDAwMDAwMDEgIC8vIEhhbHQgcmVxdWVzdAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfTU1fQUREUiByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfTU1fQUREUl9NICAgICAgICAgIDB4RkZGRkZGRkYgIC8vIEZhdWx0IEFkZHJlc3MKKyNkZWZpbmUgTlZJQ19NTV9BRERSX1MgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfRkFVTFRfQUREUgorLy8gcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0ZBVUxUX0FERFJfTSAgICAgICAweEZGRkZGRkZGICAvLyBGYXVsdCBBZGRyZXNzCisjZGVmaW5lIE5WSUNfRkFVTFRfQUREUl9TICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0RCR19DVFJMIHJlZ2lzdGVyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9EQkdLRVlfTSAgMHhGRkZGMDAwMCAgLy8gRGVidWcga2V5IG1hc2sKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9EQkdLRVkgICAgMHhBMDVGMDAwMCAgLy8gRGVidWcga2V5CisjZGVmaW5lIE5WSUNfREJHX0NUUkxfU19SRVNFVF9TVCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAgIC8vIENvcmUgaGFzIHJlc2V0IHNpbmNlIGxhc3QgcmVhZAorI2RlZmluZSBOVklDX0RCR19DVFJMX1NfUkVUSVJFX1NUIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLy8gQ29yZSBoYXMgZXhlY3V0ZWQgaW5zcnVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBsYXN0IHJlYWQKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9TX0xPQ0tVUCAgMHgwMDA4MDAwMCAgLy8gQ29yZSBpcyBsb2NrZWQgdXAKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9TX1NMRUVQICAgMHgwMDA0MDAwMCAgLy8gQ29yZSBpcyBzbGVlcGluZworI2RlZmluZSBOVklDX0RCR19DVFJMX1NfSEFMVCAgICAweDAwMDIwMDAwICAvLyBDb3JlIHN0YXR1cyBvbiBoYWx0CisjZGVmaW5lIE5WSUNfREJHX0NUUkxfU19SRUdSRFkgIDB4MDAwMTAwMDAgIC8vIFJlZ2lzdGVyIHJlYWQvd3JpdGUgYXZhaWxhYmxlCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfQ19TTkFQU1RBTEwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwICAvLyBCcmVha3MgYSBzdGFsbGVkIGxvYWQvc3RvcmUKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9DX01BU0tJTlQgMHgwMDAwMDAwOCAgLy8gTWFzayBpbnRlcnJ1cHRzIHdoZW4gc3RlcHBpbmcKKyNkZWZpbmUgTlZJQ19EQkdfQ1RSTF9DX1NURVAgICAgMHgwMDAwMDAwNCAgLy8gU3RlcCB0aGUgY29yZQorI2RlZmluZSBOVklDX0RCR19DVFJMX0NfSEFMVCAgICAweDAwMDAwMDAyICAvLyBIYWx0IHRoZSBjb3JlCisjZGVmaW5lIE5WSUNfREJHX0NUUkxfQ19ERUJVR0VOIDB4MDAwMDAwMDEgIC8vIEVuYWJsZSBkZWJ1ZworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfREJHX1hGRVIgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19XTlIgICAweDAwMDEwMDAwICAvLyBXcml0ZSBvciBub3QgcmVhZAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19TRUxfTSAweDAwMDAwMDFGICAvLyBSZWdpc3RlcgorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMCAgICAweDAwMDAwMDAwICAvLyBSZWdpc3RlciBSMAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMSAgICAweDAwMDAwMDAxICAvLyBSZWdpc3RlciBSMQorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMiAgICAweDAwMDAwMDAyICAvLyBSZWdpc3RlciBSMgorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMyAgICAweDAwMDAwMDAzICAvLyBSZWdpc3RlciBSMworI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SNCAgICAweDAwMDAwMDA0ICAvLyBSZWdpc3RlciBSNAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SNSAgICAweDAwMDAwMDA1ICAvLyBSZWdpc3RlciBSNQorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SNiAgICAweDAwMDAwMDA2ICAvLyBSZWdpc3RlciBSNgorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SNyAgICAweDAwMDAwMDA3ICAvLyBSZWdpc3RlciBSNworI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SOCAgICAweDAwMDAwMDA4ICAvLyBSZWdpc3RlciBSOAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SOSAgICAweDAwMDAwMDA5ICAvLyBSZWdpc3RlciBSOQorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMTAgICAweDAwMDAwMDBBICAvLyBSZWdpc3RlciBSMTAKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjExICAgMHgwMDAwMDAwQiAgLy8gUmVnaXN0ZXIgUjExCisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX1IxMiAgIDB4MDAwMDAwMEMgIC8vIFJlZ2lzdGVyIFIxMgorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19SMTMgICAweDAwMDAwMDBEICAvLyBSZWdpc3RlciBSMTMKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUjE0ICAgMHgwMDAwMDAwRSAgLy8gUmVnaXN0ZXIgUjE0CisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX1IxNSAgIDB4MDAwMDAwMEYgIC8vIFJlZ2lzdGVyIFIxNQorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19GTEFHUyAweDAwMDAwMDEwICAvLyB4UFNSL0ZsYWdzIHJlZ2lzdGVyCisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX01TUCAgIDB4MDAwMDAwMTEgIC8vIE1haW4gU1AKKyNkZWZpbmUgTlZJQ19EQkdfWEZFUl9SRUdfUFNQICAgMHgwMDAwMDAxMiAgLy8gUHJvY2VzcyBTUAorI2RlZmluZSBOVklDX0RCR19YRkVSX1JFR19EU1AgICAweDAwMDAwMDEzICAvLyBEZWVwIFNQCisjZGVmaW5lIE5WSUNfREJHX1hGRVJfUkVHX0NGQlAgIDB4MDAwMDAwMTQgIC8vIENvbnRyb2wvRmF1bHQvQmFzZVByaS9QcmlNYXNrCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVzIGZvciB0aGUgYml0IGZpZWxkcyBpbiB0aGUgTlZJQ19EQkdfREFUQSByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfREJHX0RBVEFfTSAgICAgICAgIDB4RkZGRkZGRkYgIC8vIERhdGEgdGVtcG9yYXJ5IGNhY2hlCisjZGVmaW5lIE5WSUNfREJHX0RBVEFfUyAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZXMgZm9yIHRoZSBiaXQgZmllbGRzIGluIHRoZSBOVklDX0RCR19JTlQgcmVnaXN0ZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBOVklDX0RCR19JTlRfSEFSREVSUiAgICAweDAwMDAwNDAwICAvLyBEZWJ1ZyB0cmFwIG9uIGhhcmQgZmF1bHQKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX0lOVEVSUiAgICAgMHgwMDAwMDIwMCAgLy8gRGVidWcgdHJhcCBvbiBpbnRlcnJ1cHQgZXJyb3JzCisjZGVmaW5lIE5WSUNfREJHX0lOVF9CVVNFUlIgICAgIDB4MDAwMDAxMDAgIC8vIERlYnVnIHRyYXAgb24gYnVzIGVycm9yCisjZGVmaW5lIE5WSUNfREJHX0lOVF9TVEFURVJSICAgIDB4MDAwMDAwODAgIC8vIERlYnVnIHRyYXAgb24gdXNhZ2UgZmF1bHQgc3RhdGUKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX0NIS0VSUiAgICAgMHgwMDAwMDA0MCAgLy8gRGVidWcgdHJhcCBvbiB1c2FnZSBmYXVsdCBjaGVjaworI2RlZmluZSBOVklDX0RCR19JTlRfTk9DUEVSUiAgICAweDAwMDAwMDIwICAvLyBEZWJ1ZyB0cmFwIG9uIGNvcHJvY2Vzc29yIGVycm9yCisjZGVmaW5lIE5WSUNfREJHX0lOVF9NTUVSUiAgICAgIDB4MDAwMDAwMTAgIC8vIERlYnVnIHRyYXAgb24gbWVtIG1hbmFnZSBmYXVsdAorI2RlZmluZSBOVklDX0RCR19JTlRfUkVTRVQgICAgICAweDAwMDAwMDA4ICAvLyBDb3JlIHJlc2V0IHN0YXR1cworI2RlZmluZSBOVklDX0RCR19JTlRfUlNUUEVORENMUiAweDAwMDAwMDA0ICAvLyBDbGVhciBwZW5kaW5nIGNvcmUgcmVzZXQKKyNkZWZpbmUgTlZJQ19EQkdfSU5UX1JTVFBFTkRJTkcgMHgwMDAwMDAwMiAgLy8gQ29yZSByZXNldCBpcyBwZW5kaW5nCisjZGVmaW5lIE5WSUNfREJHX0lOVF9SU1RWQ0FUQ0ggIDB4MDAwMDAwMDEgIC8vIFJlc2V0IHZlY3RvciBjYXRjaAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhlIGZvbGxvd2luZyBhcmUgZGVmaW5lcyBmb3IgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIE5WSUNfU1dfVFJJRyByZWdpc3Rlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIE5WSUNfU1dfVFJJR19JTlRJRF9NICAgIDB4MDAwMDAwM0YgIC8vIEludGVycnVwdCBJRAorI2RlZmluZSBOVklDX1NXX1RSSUdfSU5USURfUyAgICAwCisKKyNlbmRpZiAvLyBfX0hXX05WSUNfSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19wcmNtLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19wcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxYzA5NgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3ByY20uaApAQCAtMCwwICsxLDE1ODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod19wcmNtX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTA1LTIwIDIwOjMyOjUzICswMjAwIChGcmksIDIwIE1heSAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ2NDI5CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX1BSQ01fSF9fCisjZGVmaW5lIF9fSFdfUFJDTV9IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBQUkNNIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEluZnJhc3RydWN0dXJlIENsb2NrIERpdmlzaW9uIEZhY3RvciBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0lORlJDTEtESVZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBJbmZyYXN0cnVjdHVyZSBDbG9jayBEaXZpc2lvbiBGYWN0b3IgRm9yIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0lORlJDTEtESVZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbmZyYXN0cnVjdHVyZSBDbG9jayBEaXZpc2lvbiBGYWN0b3IgRm9yIERlZXBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19JTkZSQ0xLRElWRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gTUNVIFZvbHRhZ2UgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1ZEQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBDbG9jayBMb2FkIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX0NMS0xPQURDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBSRkMgQ2xvY2sgR2F0ZQorI2RlZmluZSBQUkNNX09fUkZDQ0xLRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJDCisKKy8vIFZJTVMgQ2xvY2sgR2F0ZQorI2RlZmluZSBQUkNNX09fVklNU0NMS0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIFRSTkcsIENSWVBUTyBBbmQgVURNQSBDbG9jayBHYXRlIEZvciBSdW4gTW9kZQorI2RlZmluZSBQUkNNX09fU0VDRE1BQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNDCisKKy8vIFRSTkcsIENSWVBUTyBBbmQgVURNQSBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19TRUNETUFDTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKworLy8gVFJORywgQ1JZUFRPIEFuZCBVRE1BIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fU0VDRE1BQ0xLR0RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vIEdQSU8gQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0dQSU9DTEtHUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorCisvLyBHUElPIENsb2NrIEdhdGUgRm9yIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX0dQSU9DTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0QworCisvLyBHUElPIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fR1BJT0NMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCisKKy8vIEdQVCBDbG9jayBHYXRlIEZvciBSdW4gTW9kZQorI2RlZmluZSBQUkNNX09fR1BUQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisKKy8vIEdQVCBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19HUFRDTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKKworLy8gR1BUIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fR1BUQ0xLR0RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVDCisKKy8vIEkyQyBDbG9jayBHYXRlIEZvciBSdW4gTW9kZQorI2RlZmluZSBQUkNNX09fSTJDQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisKKy8vIEkyQyBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19JMkNDTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKKworLy8gSTJDIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fSTJDQ0xLR0RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4CisKKy8vIFVBUlQgQ2xvY2sgR2F0ZSBGb3IgUnVuIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1VBUlRDTEtHUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2QworCisvLyBVQVJUIENsb2NrIEdhdGUgRm9yIFNsZWVwIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1VBUlRDTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorCisvLyBVQVJUIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fVUFSVENMS0dEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc0CisKKy8vIFNTSSBDbG9jayBHYXRlIEZvciBSdW4gTW9kZQorI2RlZmluZSBQUkNNX09fU1NJQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4CisKKy8vIFNTSSBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19TU0lDTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0MKKworLy8gU1NJIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fU1NJQ0xLR0RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8vIEkyUyBDbG9jayBHYXRlIEZvciBSdW4gTW9kZQorI2RlZmluZSBQUkNNX09fSTJTQ0xLR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg0CisKKy8vIEkyUyBDbG9jayBHYXRlIEZvciBTbGVlcCBNb2RlCisjZGVmaW5lIFBSQ01fT19JMlNDTEtHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKKworLy8gSTJTIENsb2NrIEdhdGUgRm9yIERlZXAgU2xlZXAgTW9kZQorI2RlZmluZSBQUkNNX09fSTJTQ0xLR0RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhDCisKKy8vIEludGVybmFsCisjZGVmaW5lIFBSQ01fT19DUFVDTEtESVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQjgKKworLy8gSTJTIENsb2NrIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX0kyU0JDTEtTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDOAorCisvLyBHUFQgU2NhbGFyCisjZGVmaW5lIFBSQ01fT19HUFRDTEtESVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQ0MKKworLy8gSTJTIENsb2NrIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX0kyU0NMS0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEMAorCisvLyBNQ0xLIERpdmlzaW9uIFJhdGlvCisjZGVmaW5lIFBSQ01fT19JMlNNQ0xLRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRDQKKworLy8gQkNMSyBEaXZpc2lvbiBSYXRpbworI2RlZmluZSBQUkNNX09fSTJTQkNMS0RJViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEQ4CisKKy8vIFdDTEsgRGl2aXNpb24gUmF0aW8KKyNkZWZpbmUgUFJDTV9PX0kyU1dDTEtESVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEQworCisvLyBTVyBJbml0aWF0ZWQgUmVzZXRzCisjZGVmaW5lIFBSQ01fT19TV1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMEMKKworLy8gV0FSTSBSZXNldCBDb250cm9sIEFuZCBTdGF0dXMKKyNkZWZpbmUgUFJDTV9PX1dBUk1SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExMAorCisvLyBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTJDCisKKy8vIFJGQyBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwwUkZDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTMwCisKKy8vIFNFUklBTCBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwwU0VSSUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTM0CisKKy8vIFBFUklQSCBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwwUEVSSVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTM4CisKKy8vIFBvd2VyIERvbWFpbiBTdGF0dXMKKyNkZWZpbmUgUFJDTV9PX1BEU1RBVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE0MAorCisvLyBSRkMgUG93ZXIgRG9tYWluIFN0YXR1cworI2RlZmluZSBQUkNNX09fUERTVEFUMFJGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQ0CisKKy8vIFNFUklBTCBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQwU0VSSUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDgKKworLy8gUEVSSVBIIFBvd2VyIERvbWFpbiBTdGF0dXMKKyNkZWZpbmUgUFJDTV9PX1BEU1RBVDBQRVJJUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE0QworCisvLyBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTdDCisKKy8vIENQVSBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwxQ1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTg0CisKKy8vIFJGQyBQb3dlciBEb21haW4gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUERDVEwxUkZDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTg4CisKKy8vIFZJTVMgUG93ZXIgRG9tYWluIENvbnRyb2wKKyNkZWZpbmUgUFJDTV9PX1BEQ1RMMVZJTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4QworCisvLyBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxOTQKKworLy8gQlVTIFBvd2VyIERvbWFpbiBTdGF0dXMKKyNkZWZpbmUgUFJDTV9PX1BEU1RBVDFCVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE5OAorCisvLyBSRkMgUG93ZXIgRG9tYWluIFN0YXR1cworI2RlZmluZSBQUkNNX09fUERTVEFUMVJGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTlDCisKKy8vIENQVSBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQxQ1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQTAKKworLy8gVklNUyBQb3dlciBEb21haW4gU3RhdHVzCisjZGVmaW5lIFBSQ01fT19QRFNUQVQxVklNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQTQKKworLy8gU2VsZWN0ZWQgUkZDIE1vZGUKKyNkZWZpbmUgUFJDTV9PX1JGQ01PREVTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFEMAorCisvLyBQb3dlciBQcm9maWxlciBSZWdpc3RlcgorI2RlZmluZSBQUkNNX09fUFdSUFJPRlNUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMUUwCisKKy8vIE1lbW9yeSBSZXRlbnRpb24gQ29udHJvbAorI2RlZmluZSBQUkNNX09fUkFNUkVURU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjI0CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0lORlJDTEtESVZSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzE6MF0gUkFUSU8KKy8vCisvLyBEaXZpc2lvbiByYXRlIGZvciBjbG9ja3MgZHJpdmluZyBtb2R1bGVzIGluIHRoZSBNQ1VfQU9OIGRvbWFpbiB3aGVuIHN5c3RlbQorLy8gQ1BVIGlzIGluIHJ1biBtb2RlLiBEaXZpc2lvbiByYXRpbyBhZmZlY3RzIGJvdGggaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgYW5kCisvLyBwZXJidXN1bGwgY2xvY2suCisvLyBFTlVNczoKKy8vIERJVjMyICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMzIKKy8vIERJVjggICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgOAorLy8gRElWMiAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAyCisvLyBESVYxICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDEKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWUl9SQVRJT19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX0lORlJDTEtESVZSX1JBVElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlJfUkFUSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWUl9SQVRJT19ESVYzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX0lORlJDTEtESVZSX1JBVElPX0RJVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlJfUkFUSU9fRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWUl9SQVRJT19ESVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JTkZSQ0xLRElWUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsxOjBdIFJBVElPCisvLworLy8gRGl2aXNpb24gcmF0ZSBmb3IgY2xvY2tzIGRyaXZpbmcgbW9kdWxlcyBpbiB0aGUgTUNVX0FPTiBkb21haW4gd2hlbiBzeXN0ZW0KKy8vIENQVSBpcyBpbiBzbGVlcCBtb2RlLiBEaXZpc2lvbiByYXRpbyBhZmZlY3RzIGJvdGggaW5mcmFzdHJ1Y3R1cmUgY2xvY2sgYW5kCisvLyBwZXJidXN1bGwgY2xvY2suCisvLyBFTlVNczoKKy8vIERJVjMyICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMzIKKy8vIERJVjggICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgOAorLy8gRElWMiAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAyCisvLyBESVYxICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDEKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWU19SQVRJT19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX0lORlJDTEtESVZTX1JBVElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlNfUkFUSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWU19SQVRJT19ESVYzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX0lORlJDTEtESVZTX1JBVElPX0RJVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVlNfUkFUSU9fRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWU19SQVRJT19ESVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JTkZSQ0xLRElWRFMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBSQVRJTworLy8KKy8vIERpdmlzaW9uIHJhdGUgZm9yIGNsb2NrcyBkcml2aW5nIG1vZHVsZXMgaW4gdGhlIE1DVV9BT04gZG9tYWluIHdoZW4gc3lzdGVtCisvLyBDUFUgaXMgaW4gc2VlcHNsZWVwIG1vZGUuIERpdmlzaW9uIHJhdGlvIGFmZmVjdHMgYm90aCBpbmZyYXN0cnVjdHVyZSBjbG9jaworLy8gYW5kIHBlcmJ1c3VsbCBjbG9jay4KKy8vIEVOVU1zOgorLy8gRElWMzIgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAzMgorLy8gRElWOCAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA4CisvLyBESVYyICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDIKKy8vIERJVjEgICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMQorI2RlZmluZSBQUkNNX0lORlJDTEtESVZEU19SQVRJT19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVkRTX1JBVElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWRFNfUkFUSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0lORlJDTEtESVZEU19SQVRJT19ESVYzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fSU5GUkNMS0RJVkRTX1JBVElPX0RJVjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9JTkZSQ0xLRElWRFNfUkFUSU9fRElWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0lORlJDTEtESVZEU19SQVRJT19ESVYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1ZEQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gTUNVX1ZECisvLworLy8gUmVxdWVzdCBXVUMgdG8gcG93ZXIgZG93biB0aGUgTUNVIHZvbHRhZ2UgZG9tYWluCisvLworLy8gMDogTm8gcmVxdWVzdAorLy8gMTogQXNzZXJ0IHJlcXVlc3Qgd2hlbiBwb3NzaWJsZS4gQW4gYXNzZXJ0ZWQgcG93ZXIgZG93biByZXF1ZXN0IHdpbGwgcmVzdWx0CisvLyBpbiBhIGJvb3Qgb2YgdGhlIE1DVSBzeXN0ZW0gd2hlbiBwb3dlcmVkIHVwIGFnYWluLgorLy8KKy8vIFRoZSBiaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBiZWZvcmUgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgYXJlIG1ldDoKKy8vIDEuIFBEQ1RMMS5DUFVfT04gPSAwCisvLyAyLiBQRENUTDEuVklNU19NT0RFID0gMAorLy8gMy4gU0VDRE1BQ0xLR0RTLkRNQV9DTEtfRU4gPSAwIChOb3RlOiBTZXR0aW5nIG11c3QgYmUgbG9hZGVkIHdpdGgKKy8vIENMS0xPQURDVEwuTE9BRCkKKy8vIDQuIFNFQ0RNQUNMS0dEUy5DUllQVE9fQ0xLX0VOID0gMCAoTm90ZTogU2V0dGluZyBtdXN0IGJlIGxvYWRlZCB3aXRoCisvLyBDTEtMT0FEQ1RMLkxPQUQpCisvLyA1LiBSRkMgZG8gbm8gcmVxdWVzdCBhY2Nlc3MgdG8gQlVTCisvLyA2LiBTeXN0ZW0gQ1BVIGluIGRlZXBzbGVlcAorI2RlZmluZSBQUkNNX1ZEQ1RMX01DVV9WRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fVkRDVExfTUNVX1ZEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9WRENUTF9NQ1VfVkRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1ZEQ1RMX01DVV9WRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzBdIFVMRE8KKy8vCisvLyBSZXF1ZXN0IFdVQyB0byBzd2l0Y2ggdG8gdUxETy4KKy8vCisvLyAwOiBObyByZXF1ZXN0CisvLyAxOiBBc3NlcnQgcmVxdWVzdCB3aGVuIHBvc3NpYmxlCisvLworLy8gVGhlIGJpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IGJlZm9yZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50cyBhcmUgbWV0OgorLy8gMS4gUERDVEwxLkNQVV9PTiA9IDAKKy8vIDIuIFBEQ1RMMS5WSU1TX01PREUgPSAwCisvLyAzLiBTRUNETUFDTEtHRFMuRE1BX0NMS19FTiA9IDAgKE5vdGU6IFNldHRpbmcgbXVzdCBiZSBsb2FkZWQgd2l0aAorLy8gQ0xLTE9BRENUTC5MT0FEKQorLy8gNC4gU0VDRE1BQ0xLR0RTLkNSWVBUT19DTEtfRU4gPSAwIChOb3RlOiBTZXR0aW5nIG11c3QgYmUgbG9hZGVkIHdpdGgKKy8vIENMS0xPQURDVEwuTE9BRCkKKy8vIDUuIFJGQyBkbyBubyByZXF1ZXN0IGFjY2VzcyB0byBCVVMKKy8vIDYuIFN5c3RlbSBDUFUgaW4gZGVlcHNsZWVwCisjZGVmaW5lIFBSQ01fVkRDVExfVUxETyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9WRENUTF9VTERPX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1ZEQ1RMX1VMRE9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fVkRDVExfVUxET19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fQ0xLTE9BRENUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzFdIExPQURfRE9ORQorLy8KKy8vIFN0YXR1cyBvZiBMT0FELgorLy8gV2lsbCBiZSBjbGVhcmVkIHRvIDAgd2hlbiBhbnkgb2YgdGhlIHJlZ2lzdGVycyByZXF1aXJpbmcgYSBMT0FEIGlzIHdyaXR0ZW4KKy8vIHRvLCBhbmQgYmUgc2V0IHRvIDEgd2hlbiBhIExPQUQgaXMgZG9uZS4KKy8vIE5vdGUgdGhhdCB3cml0aW5nIG5vIGNoYW5nZSB0byBhIHJlZ2lzdGVyIHdpbGwgcmVzdWx0IGluIHRoZSBMT0FEX0RPTkUgYmVpbmcKKy8vIGNsZWFyZWQuCisvLworLy8gMCA6IE9uZSBvciBtb3JlIHJlZ2lzdGVycyBoYXZlIGJlZW4gd3JpdGUgYWNjZXNzZWQgYWZ0ZXIgbGFzdCBMT0FECisvLyAxIDogTm8gcmVnaXN0ZXJzIGFyZSB3cml0ZSBhY2Nlc3NlZCBhZnRlciBsYXN0IExPQUQKKyNkZWZpbmUgUFJDTV9DTEtMT0FEQ1RMX0xPQURfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0NMS0xPQURDVExfTE9BRF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fQ0xLTE9BRENUTF9MT0FEX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9DTEtMT0FEQ1RMX0xPQURfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBMT0FECisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBMb2FkIHNldHRpbmdzIHRvIENMS0NUUkwuIEJpdCBpcyBIVyBjbGVhcmVkLgorLy8KKy8vIE11bHRpcGxlIGNoYW5nZXMgdG8gc2V0dGluZ3MgbWF5IGJlIGRvbmUgYmVmb3JlIExPQUQgaXMgd3JpdHRlbiBvbmNlIHNvIGFsbAorLy8gY2hhbmdlcyB0YWtlcyBwbGFjZSBhdCB0aGUgc2FtZSB0aW1lLiBMT0FEIGNhbiBhbHNvIGJlIGRvbmUgYWZ0ZXIgc2luZ2xlCisvLyBzZXR0aW5nIHVwZGF0ZXMuCisvLworLy8gUmVnaXN0ZXJzIHRoYXQgbmVlZHMgdG8gYmUgZm9sbG93ZWQgYnkgTE9BRCBiZWZvcmUgc2V0dGluZ3MgYmVpbmcgYXBwbGllZAorLy8gYXJlOgorLy8gLSBSRkNDTEtHCisvLyAtIFZJTVNDTEtHCisvLyAtIFNFQ0RNQUNMS0dSCisvLyAtIFNFQ0RNQUNMS0dTCisvLyAtIFNFQ0RNQUNMS0dEUworLy8gLSBHUElPQ0xLR1IKKy8vIC0gR1BJT0NMS0dTCisvLyAtIEdQSU9DTEtHRFMKKy8vIC0gR1BUQ0xLR1IKKy8vIC0gR1BUQ0xLR1MKKy8vIC0gR1BUQ0xLR0RTCisvLyAtIEdQVENMS0RJVgorLy8gLSBJMkNDTEtHUgorLy8gLSBJMkNDTEtHUworLy8gLSBJMkNDTEtHRFMKKy8vIC0gU1NJQ0xLR1IKKy8vIC0gU1NJQ0xLR1MKKy8vIC0gU1NJQ0xLR0RTCisvLyAtIFVBUlRDTEtHUgorLy8gLSBVQVJUQ0xLR1MKKy8vIC0gVUFSVENMS0dEUworLy8gLSBJMlNDTEtHUgorLy8gLSBJMlNDTEtHUworLy8gLSBJMlNDTEtHRFMKKy8vIC0gSTJTQkNMS1NFTAorLy8gLSBJMlNDTEtDVEwKKy8vIC0gSTJTTUNMS0RJVgorLy8gLSBJMlNCQ0xLRElWCisvLyAtIEkyU1dDTEtESVYKKyNkZWZpbmUgUFJDTV9DTEtMT0FEQ1RMX0xPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0NMS0xPQURDVExfTE9BRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fQ0xLTE9BRENUTF9MT0FEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9DTEtMT0FEQ1RMX0xPQURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19SRkNDTEtHCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jayBpZiBSRkMgcG93ZXIgZG9tYWluIGlzIG9uCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fUkZDQ0xLR19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9SRkNDTEtHX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1JGQ0NMS0dfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUkZDQ0xLR19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fVklNU0NMS0cKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBDTEtfRU4KKy8vCisvLyAwMDogRGlzYWJsZSBjbG9jaworLy8gMDE6IERpc2FibGUgY2xvY2sgd2hlbiBTWVNCVVMgY2xvY2sgaXMgZGlzYWJsZWQKKy8vIDExOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9WSU1TQ0xLR19DTEtfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1ZJTVNDTEtHX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fVklNU0NMS0dfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fU0VDRE1BQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBETUFfQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX0RNQV9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfRE1BX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9ETUFfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX0RNQV9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzFdIFRSTkdfQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX1RSTkdfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfVFJOR19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9UUk5HX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX1RSTkdfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENSWVBUT19DTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfQ1JZUFRPX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHUl9DUllQVE9fQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dSX0NSWVBUT19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1JfQ1JZUFRPX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fU0VDRE1BQ0xLR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBETUFfQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX0RNQV9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfRE1BX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19ETUFfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX0RNQV9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzFdIFRSTkdfQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX1RSTkdfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfVFJOR19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19UUk5HX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX1RSTkdfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENSWVBUT19DTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfQ1JZUFRPX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHU19DUllQVE9fQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dTX0NSWVBUT19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR1NfQ1JZUFRPX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fU0VDRE1BQ0xLR0RTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbOF0gRE1BX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfRE1BX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19ETUFfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX0RNQV9DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfRE1BX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFsxXSBUUk5HX0NMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfVFJOR19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19UUk5HX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX1RSTkdfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfVFJOR19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBDUllQVE9fQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19DUllQVE9fQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fU0VDRE1BQ0xLR0RTX0NSWVBUT19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9TRUNETUFDTEtHRFNfQ1JZUFRPX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1NFQ0RNQUNMS0dEU19DUllQVE9fQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0dQSU9DTEtHUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9HUElPQ0xLR1JfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0dQSU9DTEtHUl9DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dSX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9HUElPQ0xLR1JfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19HUElPQ0xLR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dTX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9HUElPQ0xLR1NfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQSU9DTEtHU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fR1BJT0NMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9HUElPQ0xLR0RTX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0dQSU9DTEtHRFNfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fR1BJT0NMS0dEU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9HUElPQ0xLR0RTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19HUFRDTEtHUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIENMS19FTgorLy8KKy8vIEVhY2ggYml0IGJlbG93IGhhcyB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRU5VTXMgY2FuIGJlIGNvbWJpbmVkCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKy8vIEVOVU1zOgorLy8gR1BUMyAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMworLy8gR1BUMiAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMgorLy8gR1BUMSAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMQorLy8gR1BUMCAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgR1BUMAorI2RlZmluZSBQUkNNX0dQVENMS0dSX0NMS19FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFBSQ01fR1BUQ0xLR1JfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgUFJDTV9HUFRDTEtHUl9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQVENMS0dSX0NMS19FTl9HUFQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fR1BUQ0xLR1JfQ0xLX0VOX0dQVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9HUFRDTEtHUl9DTEtfRU5fR1BUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX0dQVENMS0dSX0NMS19FTl9HUFQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0dQVENMS0dTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gQ0xLX0VOCisvLworLy8gRWFjaCBiaXQgYmVsb3cgaGFzIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBFTlVNcyBjYW4gYmUgY29tYmluZWQKKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorLy8gRU5VTXM6CisvLyBHUFQzICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQzCisvLyBHUFQyICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQyCisvLyBHUFQxICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQxCisvLyBHUFQwICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQwCisjZGVmaW5lIFBSQ01fR1BUQ0xLR1NfQ0xLX0VOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUFJDTV9HUFRDTEtHU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBQUkNNX0dQVENMS0dTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fR1BUQ0xLR1NfQ0xLX0VOX0dQVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9HUFRDTEtHU19DTEtfRU5fR1BUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX0dQVENMS0dTX0NMS19FTl9HUFQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fR1BUQ0xLR1NfQ0xLX0VOX0dQVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fR1BUQ0xLR0RTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzM6MF0gQ0xLX0VOCisvLworLy8gRWFjaCBiaXQgYmVsb3cgaGFzIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBFTlVNcyBjYW4gYmUgY29tYmluZWQKKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorLy8gRU5VTXM6CisvLyBHUFQzICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQzCisvLyBHUFQyICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQyCisvLyBHUFQxICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQxCisvLyBHUFQwICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNsb2NrIGZvciBHUFQwCisjZGVmaW5lIFBSQ01fR1BUQ0xLR0RTX0NMS19FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUFJDTV9HUFRDTEtHRFNfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBQUkNNX0dQVENMS0dEU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fR1BUQ0xLR0RTX0NMS19FTl9HUFQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9HUFRDTEtHRFNfQ0xLX0VOX0dQVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX0dQVENMS0dEU19DTEtfRU5fR1BUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fR1BUQ0xLR0RTX0NMS19FTl9HUFQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJDQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJDQ0xLR1JfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMkNDTEtHUl9DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0kyQ0NMS0dSX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJDQ0xLR1JfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJDQ0xLR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJDQ0xLR1NfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMkNDTEtHU19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0kyQ0NMS0dTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJDQ0xLR1NfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJDQ0xLR0RTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyQ0NMS0dEU19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJDQ0xLR0RTX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMkNDTEtHRFNfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyQ0NMS0dEU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1VBUlRDTEtHUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR1JfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1VBUlRDTEtHUl9DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fVUFSVENMS0dSX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR1JfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19VQVJUQ0xLR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fVUFSVENMS0dTX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR1NfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1VBUlRDTEtHU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fVUFSVENMS0dTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fVUFSVENMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR0RTX0NMS19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1VBUlRDTEtHRFNfQ0xLX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fVUFSVENMS0dEU19DTEtfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9VQVJUQ0xLR0RTX0NMS19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19TU0lDTEtHUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsxOjBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKy8vIEVOVU1zOgorLy8gU1NJMSAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgU1NJMQorLy8gU1NJMCAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgU1NJMAorI2RlZmluZSBQUkNNX1NTSUNMS0dSX0NMS19FTl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fU1NJQ0xLR1JfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9TU0lDTEtHUl9DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1NTSUNMS0dSX0NMS19FTl9TU0kxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fU1NJQ0xLR1JfQ0xLX0VOX1NTSTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fU1NJQ0xLR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbMTowXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisvLyBFTlVNczoKKy8vIFNTSTEgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIFNTSTEKKy8vIFNTSTAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY2xvY2sgZm9yIFNTSTAKKyNkZWZpbmUgUFJDTV9TU0lDTEtHU19DTEtfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1NTSUNMS0dTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fU1NJQ0xLR1NfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9TU0lDTEtHU19DTEtfRU5fU1NJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1NTSUNMS0dTX0NMS19FTl9TU0kwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1NTSUNMS0dEUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFsxOjBdIENMS19FTgorLy8KKy8vCisvLyAwOiBEaXNhYmxlIGNsb2NrCisvLyAxOiBFbmFibGUgY2xvY2sKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKy8vIEVOVU1zOgorLy8gU1NJMSAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgU1NJMQorLy8gU1NJMCAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBjbG9jayBmb3IgU1NJMAorI2RlZmluZSBQUkNNX1NTSUNMS0dEU19DTEtfRU5fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fU1NJQ0xLR0RTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUFJDTV9TU0lDTEtHRFNfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1NTSUNMS0dEU19DTEtfRU5fU1NJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fU1NJQ0xLR0RTX0NMS19FTl9TU0kwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTQ0xLR1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJTQ0xLR1JfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMlNDTEtHUl9DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0kyU0NMS0dSX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQ0xLR1JfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTQ0xLR1MKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBDTEtfRU4KKy8vCisvLworLy8gMDogRGlzYWJsZSBjbG9jaworLy8gMTogRW5hYmxlIGNsb2NrCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJTQ0xLR1NfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMlNDTEtHU19DTEtfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0kyU0NMS0dTX0NMS19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQ0xLR1NfQ0xLX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTQ0xLR0RTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gQ0xLX0VOCisvLworLy8KKy8vIDA6IERpc2FibGUgY2xvY2sKKy8vIDE6IEVuYWJsZSBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0NMS0dEU19DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQ0xLR0RTX0NMS19FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMlNDTEtHRFNfQ0xLX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0NMS0dEU19DTEtfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0NQVUNMS0RJVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJBVElPCisvLworLy8gSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKy8vIEVOVU1zOgorLy8gRElWMiAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLiBPbmx5IHRvIGJlIHVzZWQgdGhyb3VnaCBUSSBwcm92aWRlZCBBUEkuCisvLyBESVYxICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwuIE9ubHkgdG8gYmUgdXNlZCB0aHJvdWdoIFRJIHByb3ZpZGVkIEFQSS4KKyNkZWZpbmUgUFJDTV9DUFVDTEtESVZfUkFUSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0NQVUNMS0RJVl9SQVRJT19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fQ1BVQ0xLRElWX1JBVElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9DUFVDTEtESVZfUkFUSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0NQVUNMS0RJVl9SQVRJT19ESVYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fQ1BVQ0xLRElWX1JBVElPX0RJVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fSTJTQkNMS1NFTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNSQworLy8KKy8vIEJDTEsgc291cmNlIHNlbGVjdG9yCisvLworLy8gMDogVXNlIGV4dGVybmFsIEJDTEsKKy8vIDE6IFVzZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBjbG9jaworLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0JDTEtTRUxfU1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fSTJTQkNMS1NFTF9TUkNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9JMlNCQ0xLU0VMX1NSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0JDTEtTRUxfU1JDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX0dQVENMS0RJVgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFszOjBdIFJBVElPCisvLworLy8gU2NhbGFyIHVzZWQgZm9yIEdQVHMuIFRoZSBkaXZpc2lvbiByYXRlIHdpbGwgYmUgY29uc3RhbnQgYW5kIHVuZ2F0ZWQgZm9yIFJ1bgorLy8gLyBTbGVlcCAvIERlZXBTbGVlcCBtb2RlLgorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorLy8gT3RoZXIgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkLgorLy8gRU5VTXM6CisvLyBESVYyNTYgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDI1NgorLy8gRElWMTI4ICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSAxMjgKKy8vIERJVjY0ICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgNjQKKy8vIERJVjMyICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMzIKKy8vIERJVjE2ICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMTYKKy8vIERJVjggICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgOAorLy8gRElWNCAgICAgICAgICAgICAgICAgICAgIERpdmlkZSBieSA0CisvLyBESVYyICAgICAgICAgICAgICAgICAgICAgRGl2aWRlIGJ5IDIKKy8vIERJVjEgICAgICAgICAgICAgICAgICAgICBEaXZpZGUgYnkgMQorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVYzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX0dQVENMS0RJVl9SQVRJT19ESVY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fR1BUQ0xLRElWX1JBVElPX0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9HUFRDTEtESVZfUkFUSU9fRElWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JMlNDTEtDVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBTTVBMX09OX1BPU0VER0UKKy8vCisvLyBPbiB0aGUgSTJTIHNlcmlhbCBpbnRlcmZhY2UsIGRhdGEgYW5kIFdDTEsgaXMgc2FtcGxlZCBhbmQgY2xvY2tlZCBvdXQgb24KKy8vIG9wcG9zaXRlIGVkZ2VzIG9mIEJDTEsuCisvLworLy8gMCAtIGRhdGEgYW5kIFdDTEsgYXJlIHNhbXBsZWQgb24gdGhlIG5lZ2F0aXZlIGVkZ2UgYW5kIGNsb2NrZWQgb3V0IG9uIHRoZQorLy8gcG9zaXRpdmUgZWRnZS4KKy8vIDEgLSBkYXRhIGFuZCBXQ0xLIGFyZSBzYW1wbGVkIG9uIHRoZSBwb3NpdGl2ZSBlZGdlIGFuZCBjbG9ja2VkIG91dCBvbiB0aGUKKy8vIG5lZ2F0aXZlIGVkZ2UuCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX1NNUExfT05fUE9TRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfU01QTF9PTl9QT1NFREdFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9TTVBMX09OX1BPU0VER0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX1NNUExfT05fUE9TRURHRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgWzI6MV0gV0NMS19QSEFTRQorLy8KKy8vIERlY2lkZXMgaG93IHRoZSBXQ0xLIGRpdmlzaW9uIHJhdGlvIGlzIGNhbGN1bGF0ZWQgYW5kIHVzZWQgdG8gZ2VuZXJhdGUKKy8vIGRpZmZlcmVudCBkdXR5IGN5Y2xlcyAoU2VlIEkyU1dDTEtESVYuV0RJVikuCisvLworLy8gMDogU2luZ2xlIHBoYXNlCisvLyAxOiBEdWFsIHBoYXNlCisvLyAyOiBVc2VyIERlZmluZWQKKy8vIDM6IFJlc2VydmVkL1VuZGVmaW5lZAorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9XQ0xLX1BIQVNFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX1dDTEtfUEhBU0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfV0NMS19QSEFTRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBFTgorLy8KKy8vCisvLyAwOiBNQ0xLLCBCQ0xLIGFuZCAqKldDTEsqKiB3aWxsIGJlIHN0YXRpYyBsb3cKKy8vIDE6IEVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgIE1DTEssIEJDTEsgYW5kIFdDTEsKKy8vCisvLyBGb3IgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCwgQ0xLTE9BRENUTC5MT0FEIG5lZWRzIHRvIGJlIHdyaXR0ZW4KKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX0kyU0NMS0NUTF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fSTJTQ0xLQ1RMX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9JMlNDTEtDVExfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JMlNNQ0xLRElWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzk6MF0gTURJVgorLy8KKy8vIEFuIHVuc2lnbmVkIGZhY3RvciBvZiB0aGUgZGl2aXNpb24gcmF0aW8gdXNlZCB0byBnZW5lcmF0ZSBNQ0xLIFsyLTEwMjRdOgorLy8KKy8vIE1DTEsgPSBNQ1VDTEsvTURJVltIel0KKy8vIE1DVUNMSyBpcyA0OE1IeiBpbiBub3JtYWwgbW9kZS4gRm9yIHBvd2VyZG93biBtb2RlIHRoZSBmcmVxdWVuY3kgaXMgZGVmaW5lZAorLy8gYnkgQU9OX1dVQzpNQ1VDTEsuUFdSX0RXTl9TUkMKKy8vCisvLyBBIHZhbHVlIG9mIDAgaXMgaW50ZXJwcmV0ZWQgYXMgMTAyNC4KKy8vIEEgdmFsdWUgb2YgMSBpcyBpbnZhbGlkLgorLy8gSWYgTURJViBpcyBvZGQgdGhlIGxvdyBwaGFzZSBvZiB0aGUgY2xvY2sgaXMgb25lIE1DVUNMSyBwZXJpb2QgbG9uZ2VyIHRoYW4KKy8vIHRoZSBoaWdoIHBoYXNlLgorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU01DTEtESVZfTURJVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFBSQ01fSTJTTUNMS0RJVl9NRElWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkYKKyNkZWZpbmUgUFJDTV9JMlNNQ0xLRElWX01ESVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JMlNCQ0xLRElWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzk6MF0gQkRJVgorLy8KKy8vIEFuIHVuc2lnbmVkIGZhY3RvciBvZiB0aGUgZGl2aXNpb24gcmF0aW8gdXNlZCB0byBnZW5lcmF0ZSBJMlMgQkNMSyBbMi0xMDI0XToKKy8vCisvLyBCQ0xLID0gTUNVQ0xLL0JESVZbSHpdCisvLyBNQ1VDTEsgaXMgNDhNSHogaW4gbm9ybWFsIG1vZGUuIEZvciBwb3dlcmRvd24gbW9kZSB0aGUgZnJlcXVlbmN5IGlzIGRlZmluZWQKKy8vIGJ5IEFPTl9XVUM6TUNVQ0xLLlBXUl9EV05fU1JDCisvLworLy8gQSB2YWx1ZSBvZiAwIGlzIGludGVycHJldGVkIGFzIDEwMjQuCisvLyBBIHZhbHVlIG9mIDEgaXMgaW52YWxpZC4KKy8vIElmIEJESVYgaXMgb2RkIGFuZCBJMlNDTEtDVEwuU01QTF9PTl9QT1NFREdFID0gMCwgdGhlIGxvdyBwaGFzZSBvZiB0aGUgY2xvY2sKKy8vIGlzIG9uZSBNQ1VDTEsgcGVyaW9kIGxvbmdlciB0aGFuIHRoZSBoaWdoIHBoYXNlLgorLy8gSWYgQkRJViBpcyBvZGQgYW5kIEkyU0NMS0NUTC5TTVBMX09OX1BPU0VER0UgPSAxICwgdGhlIGhpZ2ggcGhhc2Ugb2YgdGhlCisvLyBjbG9jayBpcyBvbmUgTUNVQ0xLIHBlcmlvZCBsb25nZXIgdGhhbiB0aGUgbG93IHBoYXNlLgorLy8KKy8vIEZvciBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LCBDTEtMT0FEQ1RMLkxPQUQgbmVlZHMgdG8gYmUgd3JpdHRlbgorI2RlZmluZSBQUkNNX0kyU0JDTEtESVZfQkRJVl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFBSQ01fSTJTQkNMS0RJVl9CRElWX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkYKKyNkZWZpbmUgUFJDTV9JMlNCQ0xLRElWX0JESVZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19JMlNXQ0xLRElWCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTU6MF0gV0RJVgorLy8KKy8vIElmIEkyU0NMS0NUTC5XQ0xLX1BIQVNFID0gMCwgU2luZ2xlIHBoYXNlLgorLy8gV0NMSyBpcyBoaWdoIG9uZSBCQ0xLIHBlcmlvZCBhbmQgbG93IFdESVZbOTowXSAodW5zaWduZWQsIFsxLTEwMjNdKSBCQ0xLCisvLyBwZXJpb2RzLgorLy8KKy8vIFdDTEsgPSBNQ1VDTEsgLyBCRElWKihXRElWWzk6MF0gKyAxKSBbSHpdCisvLyBNQ1VDTEsgaXMgNDhNSHogaW4gbm9ybWFsIG1vZGUuIEZvciBwb3dlcmRvd24gbW9kZSB0aGUgZnJlcXVlbmN5IGlzIGRlZmluZWQKKy8vIGJ5IEFPTl9XVUM6TUNVQ0xLLlBXUl9EV05fU1JDCisvLworLy8gSWYgSTJTQ0xLQ1RMLldDTEtfUEhBU0UgPSAxLCBEdWFsIHBoYXNlLgorLy8gRWFjaCBwaGFzZSBvbiBXQ0xLICg1MCUgZHV0eSBjeWNsZSkgaXMgV0RJVls5OjBdICh1bnNpZ25lZCwgWzEtMTAyM10pIEJDTEsKKy8vIHBlcmlvZHMuCisvLworLy8gV0NMSyA9IE1DVUNMSyAvIEJESVYqKDIqV0RJVls5OjBdKSBbSHpdCisvLworLy8gSWYgSTJTQ0xLQ1RMLldDTEtfUEhBU0UgPSAyLCBVc2VyIGRlZmluZWQuCisvLyBXQ0xLIGlzIGhpZ2ggV0RJVls3OjBdICh1bnNpZ25lZCwgWzEtMjU1XSkgQkNMSyBwZXJpb2RzIGFuZCBsb3cgV0RJVlsxNTo4XQorLy8gKHVuc2lnbmVkLCBbMS0yNTVdKSBCQ0xLIHBlcmlvZHMuCisvLworLy8gV0NMSyA9IE1DVUNMSyAvIChCRElWKihXRElWWzc6MF0gKyBXRElWWzE1OjhdKSBbSHpdCisvLworLy8gRm9yIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QsIENMS0xPQURDVEwuTE9BRCBuZWVkcyB0byBiZSB3cml0dGVuCisjZGVmaW5lIFBSQ01fSTJTV0NMS0RJVl9XRElWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUFJDTV9JMlNXQ0xLRElWX1dESVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBQUkNNX0kyU1dDTEtESVZfV0RJVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1NXUkVTRVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBNQ1UKKy8vCisvLyBJbnRlcm5hbC4gT25seSB0byBiZSB1c2VkIHRocm91Z2ggVEkgcHJvdmlkZWQgQVBJLgorI2RlZmluZSBQUkNNX1NXUkVTRVRfTUNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fU1dSRVNFVF9NQ1VfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9TV1JFU0VUX01DVV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1NXUkVTRVRfTUNVX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1dBUk1SRVNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFdSX1RPX1BJTlJFU0VUCisvLworLy8gMDogTm8gYWN0aW9uCisvLyAxOiBBIHdhcm0gc3lzdGVtIHJlc2V0IGV2ZW50IHRyaWdnZXJlZCBieSB0aGUgYmVsb3cgbGlzdGVkIHNvdXJjZXMgd2lsbAorLy8gcmVzdWx0IGluIGFuIGVtdWxhdGVkIHBpbiByZXNldC4KKy8vCisvLyBXYXJtIHJlc2V0IHNvdXJjZXMgaW5jbHVkZWQ6CisvLyBJQ0VQaWNrIHN5c3Jlc2V0CisvLyBTeXN0ZW0gQ1BVIHJlc2V0IHJlcXVlc3QsIENQVV9TQ1M6QUlSQ1IuU1lTUkVTRVRSRVEKKy8vIFN5c3RlbSBDUFUgTG9ja3VwCisvLyBXRFQgdGltZW91dAorLy8KKy8vIEFuIGFjdGl2ZSBJQ0VQaWNrIGJsb2NrIHN5c3RlbSByZXNldCB3aWxsIGdhdGUgYWxsIHNvdXJjZXMgZXhjZXB0IElDRVBpY2sKKy8vIHN5c3Jlc2V0CisvLworLy8gU1cgY2FuIHJlYWQgQU9OX1NZU0NUTDpSRVNFVENUTC5SRVNFVF9TUkMgdG8gZmluZCB0aGUgc291cmNlIG9mIHRoZSBsYXN0CisvLyByZXNldCByZXN1bHRpbmcgaW4gYSBmdWxsIHBvd2VyIHVwIHNlcXVlbmNlLiBXQVJNUkVTRVQgaW4gdGhpcyByZWdpc3RlciBpcworLy8gc2V0IGluIHRoZSBzY2VuYXJpbyB0aGF0IFdSX1RPX1BJTlJFU0VUPTEgYW5kIG9uZSBvZiB0aGUgYWJvdmUgbGlzdGVkCisvLyBzb3VyY2VzIGlzIHRyaWdnZXJlZC4KKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfV1JfVE9fUElOUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9XUl9UT19QSU5SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX1dSX1RPX1BJTlJFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfV1JfVE9fUElOUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBMT0NLVVBfU1RBVAorLy8KKy8vCisvLyAwOiBObyByZWdpc3RyZWQgZXZlbnQKKy8vIDE6IEEgc3lzdGVtIENQVSBMT0NLVVAgZXZlbnQgaGFzIG9jY3VyZWQgc2luY2UgbGFzdCBTVyBjbGVhciBvZiB0aGUKKy8vIHJlZ2lzdGVyLgorLy8KKy8vIEEgcmVhZCBvZiB0aGlzIHJlZ2lzdGVyIGNsZWFycyBib3RoICBXRFRfU1RBVCBhbmQgTE9DS1VQX1NUQVQuCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX0xPQ0tVUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfTE9DS1VQX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9MT0NLVVBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX0xPQ0tVUF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gV0RUX1NUQVQKKy8vCisvLworLy8gMDogTm8gcmVnaXN0ZXJlZCBldmVudAorLy8gMTogQSBXRFQgZXZlbnQgaGFzIG9jY3VyZWQgc2luY2UgbGFzdCBTVyBjbGVhciBvZiB0aGUgcmVnaXN0ZXIuCisvLworLy8gQSByZWFkIG9mIHRoaXMgcmVnaXN0ZXIgY2xlYXJzIGJvdGggV0RUX1NUQVQgYW5kIExPQ0tVUF9TVEFULgorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9XRFRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fV0FSTVJFU0VUX1dEVF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9XQVJNUkVTRVRfV0RUX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1dBUk1SRVNFVF9XRFRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzJdIFBFUklQSF9PTgorLy8KKy8vIFBFUklQSCBQb3dlciBkb21haW4uCisvLworLy8gMDogUEVSSVBIIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkIGRvd24KKy8vIDE6IFBFUklQSCBwb3dlciBkb21haW4gaXMgcG93ZXJlZCB1cAorI2RlZmluZSBQUkNNX1BEQ1RMMF9QRVJJUEhfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fUERDVEwwX1BFUklQSF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9QRENUTDBfUEVSSVBIX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEQ1RMMF9QRVJJUEhfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFNFUklBTF9PTgorLy8KKy8vIFNFUklBTCBQb3dlciBkb21haW4uCisvLworLy8gMDogU0VSSUFMIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkIGRvd24KKy8vIDE6IFNFUklBTCBwb3dlciBkb21haW4gaXMgcG93ZXJlZCB1cAorI2RlZmluZSBQUkNNX1BEQ1RMMF9TRVJJQUxfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fUERDVEwwX1NFUklBTF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFJDTV9QRENUTDBfU0VSSUFMX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1BEQ1RMMF9TRVJJQUxfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJGQ19PTgorLy8KKy8vCisvLyAwOiBSRkMgcG93ZXIgZG9tYWluIHBvd2VyZWQgb2ZmIGlmIGFsc28gUERDVEwxLlJGQ19PTiA9IDAKKy8vIDE6IFJGQyBwb3dlciBkb21haW4gcG93ZXJlZCBvbgorI2RlZmluZSBQUkNNX1BEQ1RMMF9SRkNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwwX1JGQ19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRENUTDBfUkZDX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMF9SRkNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMFJGQworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gQWxpYXMgZm9yIFBEQ1RMMC5SRkNfT04KKyNkZWZpbmUgUFJDTV9QRENUTDBSRkNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMFJGQ19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERDVEwwUkZDX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDBSRkNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRENUTDBTRVJJQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIEFsaWFzIGZvciBQRENUTDAuU0VSSUFMX09OCisjZGVmaW5lIFBSQ01fUERDVEwwU0VSSUFMX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDBTRVJJQUxfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEQ1RMMFNFUklBTF9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwwU0VSSUFMX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERDVEwwUEVSSVBICisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBBbGlhcyBmb3IgUERDVEwwLlBFUklQSF9PTgorI2RlZmluZSBQUkNNX1BEQ1RMMFBFUklQSF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwwUEVSSVBIX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRENUTDBQRVJJUEhfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMFBFUklQSF9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBQRVJJUEhfT04KKy8vCisvLyBQRVJJUEggUG93ZXIgZG9tYWluLgorLy8KKy8vIDA6IERvbWFpbiBtYXkgYmUgcG93ZXJlZCBkb3duCisvLyAxOiBEb21haW4gcG93ZXJlZCB1cCAoZ3VhcmFudGVlZCkKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1BFUklQSF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEU1RBVDBfUEVSSVBIX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBSQ01fUERTVEFUMF9QRVJJUEhfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1BFUklQSF9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBTRVJJQUxfT04KKy8vCisvLyBTRVJJQUwgUG93ZXIgZG9tYWluLgorLy8KKy8vIDA6IERvbWFpbiBtYXkgYmUgcG93ZXJlZCBkb3duCisvLyAxOiBEb21haW4gcG93ZXJlZCB1cCAoZ3VhcmFudGVlZCkKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1NFUklBTF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1BEU1RBVDBfU0VSSUFMX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fUERTVEFUMF9TRVJJQUxfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1NFUklBTF9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRkNfT04KKy8vCisvLyBSRkMgUG93ZXIgZG9tYWluCisvLworLy8gMDogRG9tYWluIG1heSBiZSBwb3dlcmVkIGRvd24KKy8vIDE6IERvbWFpbiBwb3dlcmVkIHVwIChndWFyYW50ZWVkKQorI2RlZmluZSBQUkNNX1BEU1RBVDBfUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMF9SRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRFNUQVQwX1JGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBfUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDBSRkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIEFsaWFzIGZvciBQRFNUQVQwLlJGQ19PTgorI2RlZmluZSBQUkNNX1BEU1RBVDBSRkNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMFJGQ19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRFNUQVQwUkZDX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBSRkNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDBTRVJJQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIEFsaWFzIGZvciBQRFNUQVQwLlNFUklBTF9PTgorI2RlZmluZSBQUkNNX1BEU1RBVDBTRVJJQUxfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMFNFUklBTF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRFNUQVQwU0VSSUFMX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBTRVJJQUxfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDBQRVJJUEgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIEFsaWFzIGZvciBQRFNUQVQwLlBFUklQSF9PTgorI2RlZmluZSBQUkNNX1BEU1RBVDBQRVJJUEhfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMFBFUklQSF9PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRFNUQVQwUEVSSVBIX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDBQRVJJUEhfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEQ1RMMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzNdIFZJTVNfTU9ERQorLy8KKy8vCisvLyAwOiBWSU1TIHBvd2VyIGRvbWFpbiBpcyBvbmx5IHBvd2VyZWQgd2hlbiBDUFUgcG93ZXIgZG9tYWluIGlzIHBvd2VyZWQuCisvLyAxOiBWSU1TIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkIHdoZW5ldmVyIHRoZSBCVVMgcG93ZXIgZG9tYWluIGlzIHBvd2VyZWQuCisjZGVmaW5lIFBSQ01fUERDVEwxX1ZJTVNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9QRENUTDFfVklNU19NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQUkNNX1BEQ1RMMV9WSU1TX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFBSQ01fUERDVEwxX1ZJTVNfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUkZDX09OCisvLworLy8KKy8vIDA6IFJGQyBwb3dlciBkb21haW4gcG93ZXJlZCBvZmYgaWYgYWxzbyBQRENUTDAuUkZDX09OID0gMAorLy8gMTogUkZDIHBvd2VyIGRvbWFpbiBwb3dlcmVkIG9uCisvLworLy8gQml0IHNoYWxsIGJlIHVzZWQgYnkgUkZDIGluIGF1dG9ub211cyBtb2RlIGJ1dCB0aGVyZSBpcyBubyBIVyByZXN0cmljdGlvbnMKKy8vIGZvbSBzeXN0ZW0gQ1BVIHRvIGFjY2VzcyB0aGUgYml0LgorI2RlZmluZSBQUkNNX1BEQ1RMMV9SRkNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fUERDVEwxX1JGQ19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9QRENUTDFfUkZDX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEQ1RMMV9SRkNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENQVV9PTgorLy8KKy8vCisvLyAwOiBDYXVzZXMgYSBwb3dlciBkb3duIG9mIHRoZSBDUFUgcG93ZXIgZG9tYWluIHdoZW4gc3lzdGVtIENQVSBpbmRpY2F0ZXMgaXQKKy8vIGlzIGlkbGUuCisvLyAxOiBJbml0aWF0ZXMgcG93ZXItb24gb2YgdGhlIENQVSBwb3dlciBkb21haW4uCisvLworLy8gVGhpcyBiaXQgaXMgYXV0b21hdGljYWxseSBzZXQgYnkgYSBXSUMgcG93ZXItb24gZXZlbnQuCisjZGVmaW5lIFBSQ01fUERDVEwxX0NQVV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9QRENUTDFfQ1BVX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQUkNNX1BEQ1RMMV9DUFVfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fUERDVEwxX0NQVV9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERDVEwxQ1BVCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciBQRENUTDEuQ1BVX09OCisjZGVmaW5lIFBSQ01fUERDVEwxQ1BVX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDFDUFVfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEQ1RMMUNQVV9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwxQ1BVX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERDVEwxUkZDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciBQRENUTDEuUkZDX09OCisjZGVmaW5lIFBSQ01fUERDVEwxUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRENUTDFSRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEQ1RMMVJGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwxUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERDVEwxVklNUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgUERDVEwxLlZJTVNfTU9ERQorI2RlZmluZSBQUkNNX1BEQ1RMMVZJTVNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERDVEwxVklNU19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRENUTDFWSU1TX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEQ1RMMVZJTVNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs0XSBCVVNfT04KKy8vCisvLworLy8gMDogQlVTIGRvbWFpbiBub3QgYWNjZXNzaWJsZQorLy8gMTogQlVTIGRvbWFpbiBpcyBjdXJyZW50bHkgYWNjZXNzaWJsZQorI2RlZmluZSBQUkNNX1BEU1RBVDFfQlVTX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFBSQ01fUERTVEFUMV9CVVNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX0JVU19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBQUkNNX1BEU1RBVDFfQlVTX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIFZJTVNfTU9ERQorLy8KKy8vCisvLyAwOiBWSU1TIGRvbWFpbiBub3QgYWNjZXNzaWJsZQorLy8gMTogVklNUyBkb21haW4gaXMgY3VycmVudGx5IGFjY2Vzc2libGUKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX1ZJTVNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBQUkNNX1BEU1RBVDFfVklNU19NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFBSQ01fUERTVEFUMV9WSU1TX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX1ZJTVNfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBSRkNfT04KKy8vCisvLworLy8gMDogUkZDIGRvbWFpbiBub3QgYWNjZXNzaWJsZQorLy8gMTogUkZDIGRvbWFpbiBpcyBjdXJyZW50bHkgYWNjZXNzaWJsZQorI2RlZmluZSBQUkNNX1BEU1RBVDFfUkZDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fUERTVEFUMV9SRkNfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX1JGQ19PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1BEU1RBVDFfUkZDX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIENQVV9PTgorLy8KKy8vCisvLyAwOiBDUFUgYW5kIEJVUyBkb21haW4gbm90IGFjY2Vzc2libGUKKy8vIDE6IENQVSBhbmQgQlVTIGRvbWFpbnMgYXJlIGJvdGggY3VycmVudGx5IGFjY2Vzc2libGUKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX0NQVV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBQUkNNX1BEU1RBVDFfQ1BVX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBSQ01fUERTVEFUMV9DUFVfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUFJDTV9QRFNUQVQxX0NQVV9PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQxQlVTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gT04KKy8vCisvLyBUaGlzIGlzIGFuIGFsaWFzIGZvciBQRFNUQVQxLkJVU19PTgorI2RlZmluZSBQUkNNX1BEU1RBVDFCVVNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMUJVU19PTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJDTV9QRFNUQVQxQlVTX09OX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDFCVVNfT05fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1BEU1RBVDFSRkMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBPTgorLy8KKy8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIFBEU1RBVDEuUkZDX09OCisjZGVmaW5lIFBSQ01fUERTVEFUMVJGQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQxUkZDX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQUkNNX1BEU1RBVDFSRkNfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFBSQ01fUERTVEFUMVJGQ19PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBQUkNNX09fUERTVEFUMUNQVQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgUERTVEFUMS5DUFVfT04KKyNkZWZpbmUgUFJDTV9QRFNUQVQxQ1BVX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDFDUFVfT05fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMUNQVV9PTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQxQ1BVX09OX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QRFNUQVQxVklNUworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIE9OCisvLworLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgUERTVEFUMS5WSU1TX01PREUKKyNkZWZpbmUgUFJDTV9QRFNUQVQxVklNU19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQUkNNX1BEU1RBVDFWSU1TX09OX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUERTVEFUMVZJTVNfT05fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9QRFNUQVQxVklNU19PTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19SRkNNT0RFU0VMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzI6MF0gQ1VSUgorLy8KKy8vIFdyaXR0ZW4gYnkgTUNVIC0gT3V0cHV0cyB0byBSRkMuIE9ubHkgbW9kZXMgcGVybWl0dGVkIGJ5IFJGQ01PREVIV09QVC5BVkFJTAorLy8gYXJlIHdyaXRlYWJsZS4KKy8vIEVOVU1zOgorLy8gTU9ERTcgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBNb2RlIDcKKy8vIE1PREU2ICAgICAgICAgICAgICAgICAgICBTZWxlY3QgTW9kZSA2CisvLyBNT0RFNSAgICAgICAgICAgICAgICAgICAgU2VsZWN0IE1vZGUgNQorLy8gTU9ERTQgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBNb2RlIDQKKy8vIE1PREUzICAgICAgICAgICAgICAgICAgICBTZWxlY3QgTW9kZSAzCisvLyBNT0RFMiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IE1vZGUgMgorLy8gTU9ERTEgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBNb2RlIDEKKy8vIE1PREUwICAgICAgICAgICAgICAgICAgICBTZWxlY3QgTW9kZSAwCisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9NT0RFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREU0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBQUkNNX1JGQ01PREVTRUxfQ1VSUl9NT0RFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBSQ01fUkZDTU9ERVNFTF9DVVJSX01PREUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFJDTV9SRkNNT0RFU0VMX0NVUlJfTU9ERTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFBSQ01fT19QV1JQUk9GU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFZBTFVFCisvLworLy8gU1cgY2FuIHVzZSB0aGVzZSBiaXRzIHRvIHRpbWVzdGFtcCB0aGUgYXBwbGljYXRpb24uIFRoZXNlIGJpdHMgYXJlIGFsc28KKy8vIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB0ZXN0dGFwIGFuZCBjYW4gdGh1cyBiZSB1c2VkIGJ5IHRoZSBlbXVsYXRvciB0bworLy8gcHJvZmlsZSBpbiByZWFsIHRpbWUuCisjZGVmaW5lIFBSQ01fUFdSUFJPRlNUQVRfVkFMVUVfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUFJDTV9QV1JQUk9GU1RBVF9WQUxVRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBQUkNNX1BXUlBST0ZTVEFUX1ZBTFVFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUFJDTV9PX1JBTVJFVEVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gUkZDCisvLworLy8KKy8vIDA6IFJldGVudGlvbiBmb3IgUkZDIFNSQU0gZGlzYWJsZWQKKy8vIDE6IFJldGVudGlvbiBmb3IgUkZDIFNSQU0gZW5hYmxlZAorI2RlZmluZSBQUkNNX1JBTVJFVEVOX1JGQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFBSQ01fUkFNUkVURU5fUkZDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUFJDTV9SQU1SRVRFTl9SRkNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBQUkNNX1JBTVJFVEVOX1JGQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIFZJTVMKKy8vCisvLworLy8gMDogTWVtb3J5IHJldGVudGlvbiBkaXNhYmxlZAorLy8gMTogTWVtb3J5IHJldGVudGlvbiBlbmFibGVkCisvLworLy8gQml0IDA6IFZJTVNfVFJBTQorLy8gQml0IDE6IFZJTVNfQ1JBTQorLy8KKy8vIExlZ2FsIG1vZGVzIGRlcGVuZCBvbiBzZXR0aW5ncyBpbiBWSU1TOkNUTC5NT0RFCisvLworLy8gMDA6IFZJTVM6Q1RMLk1PREUgbXVzdCBiZSBPRkYgYmVmb3JlIERFRVBTTEVFUCBpcyBhc3NlcnRlZCAtIG11c3QgYmUgc2V0IHRvCisvLyBDQUNIRSBvciBTUExJVCBtb2RlIGFmdGVyIHdha2luZyB1cCBhZ2FpbgorLy8gMDE6IFZJTVM6Q1RMLk1PREUgbXVzdCBiZSBHUFJBTSBiZWZvcmUgREVFUFNMRUVQIGlzIGFzc2VydGVkLiBNdXN0IHJlbWFpbiBpbgorLy8gR1BSQU0gbW9kZSBhZnRlciB3YWtlIHVwLCBhbHRlcm5hdGl2ZWx5IHNlbGVjdCBPRkYgbW9kZSBmaXJzdCBhbmQgdGhlbiBDQUNIRQorLy8gb3IgU1BJTFQgbW9kZS4KKy8vIDEwOiBJbGxlZ2FsIG1vZGUKKy8vIDExOiBObyByZXN0cmljdGlvbnMKKyNkZWZpbmUgUFJDTV9SQU1SRVRFTl9WSU1TX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUkNNX1JBTVJFVEVOX1ZJTVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFBSQ01fUkFNUkVURU5fVklNU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19QUkNNX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19kYmVsbC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfcmZjX2RiZWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzM2JjNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19kYmVsbC5oCkBAIC0wLDAgKzEsMTY3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3JmY19kYmVsbF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19SRkNfREJFTExfSF9fCisjZGVmaW5lIF9fSFdfUkZDX0RCRUxMX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFJGQ19EQkVMTCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBEb29yYmVsbCBDb21tYW5kIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19EQkVMTF9PX0NNRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRG9vcmJlbGwgQ29tbWFuZCBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX0RCRUxMX09fQ01EU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcnJ1cHQgRmxhZ3MgRnJvbSBSRiBIYXJkd2FyZSBNb2R1bGVzCisjZGVmaW5lIFJGQ19EQkVMTF9PX1JGSFdJRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gSW50ZXJydXB0IEVuYWJsZSBGb3IgUkYgSGFyZHdhcmUgTW9kdWxlcworI2RlZmluZSBSRkNfREJFTExfT19SRkhXSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIEludGVycnVwdCBGbGFncyBGb3IgQ29tbWFuZCBhbmQgUGFja2V0IEVuZ2luZSBHZW5lcmF0ZWQgSW50ZXJydXB0cworI2RlZmluZSBSRkNfREJFTExfT19SRkNQRUlGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIEludGVycnVwdCBFbmFibGUgRm9yIENvbW1hbmQgYW5kIFBhY2tldCBFbmdpbmUgR2VuZXJhdGVkIEludGVycnVwdHMKKyNkZWZpbmUgUkZDX0RCRUxMX09fUkZDUEVJRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBJbnRlcnJ1cHQgVmVjdG9yIFNlbGVjdGlvbiBGb3IgQ29tbWFuZCBhbmQgUGFja2V0IEVuZ2luZSBHZW5lcmF0ZWQKKy8vIEludGVycnVwdHMKKyNkZWZpbmUgUkZDX0RCRUxMX09fUkZDUEVJU0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBEb29yYmVsbCBDb21tYW5kIEFja25vd2xlZGdlbWVudCBJbnRlcnJ1cHQgRmxhZworI2RlZmluZSBSRkNfREJFTExfT19SRkFDS0lGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIFJGIENvcmUgR2VuZXJhbCBQdXJwb3NlIE91dHB1dCBDb250cm9sCisjZGVmaW5lIFJGQ19EQkVMTF9PX1NZU0dQT0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19DTURSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ01ECisvLworLy8gQ29tbWFuZCByZWdpc3Rlci4gUmFpc2VzIGFuIGludGVycnVwdCB0byB0aGUgQ29tbWFuZCBhbmQgcGFja2V0IGVuZ2luZSAoQ1BFKQorLy8gdXBvbiB3cml0ZS4KKyNkZWZpbmUgUkZDX0RCRUxMX0NNRFJfQ01EX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfREJFTExfQ01EUl9DTURfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19EQkVMTF9DTURSX0NNRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19DTURTVEEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBTVEFUCisvLworLy8gU3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgdXNlZAorI2RlZmluZSBSRkNfREJFTExfQ01EU1RBX1NUQVRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19EQkVMTF9DTURTVEFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX0RCRUxMX0NNRFNUQV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19EQkVMTF9PX1JGSFdJRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE5XSBSQVRDSDcKKy8vCisvLyBSYWRpbyB0aW1lciBjaGFubmVsIDcgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFJBVENINgorLy8KKy8vIFJhZGlvIHRpbWVyIGNoYW5uZWwgNiBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g2X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gUkFUQ0g1CisvLworLy8gUmFkaW8gdGltZXIgY2hhbm5lbCA1IGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZQorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBSQVRDSDQKKy8vCisvLyBSYWRpbyB0aW1lciBjaGFubmVsIDQgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENINF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0g0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIFJBVENIMworLy8KKy8vIFJhZGlvIHRpbWVyIGNoYW5uZWwgMyBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gUkFUQ0gyCisvLworLy8gUmFkaW8gdGltZXIgY2hhbm5lbCAyIGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZQorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBSQVRDSDEKKy8vCisvLyBSYWRpbyB0aW1lciBjaGFubmVsIDEgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gxX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIFJBVENIMAorLy8KKy8vIFJhZGlvIHRpbWVyIGNoYW5uZWwgMCBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkFUQ0gwX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SQVRDSDBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JBVENIMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gUkZFU09GVDIKKy8vCisvLyBSRiBlbmdpbmUgc29mdHdhcmUgZGVmaW5lZCBpbnRlcnJ1cHQgMiBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlCisvLyB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBSRkVTT0ZUMQorLy8KKy8vIFJGIGVuZ2luZSBzb2Z0d2FyZSBkZWZpbmVkIGludGVycnVwdCAxIGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUKKy8vIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFJGRVNPRlQwCisvLworLy8gUkYgZW5naW5lIHNvZnR3YXJlIGRlZmluZWQgaW50ZXJydXB0IDAgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZQorLy8gdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFU09GVDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVTT0ZUMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRVNPRlQwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gUkZFRE9ORQorLy8KKy8vIFJGIGVuZ2luZSBjb21tYW5kIGRvbmUgaW50ZXJydXB0IGZsYWcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8KKy8vIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1JGRURPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfUkZFRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19SRkVET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzZdIFRSQ1RLCisvLworLy8gRGVidWcgdHJhY2VyIHN5c3RlbSB0aWNrIGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvCisvLyBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfVFJDVEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19UUkNUS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX1RSQ1RLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfVFJDVEtfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBNRE1TT0ZUCisvLworLy8gTW9kZW0gc3luY2hyb25pemF0aW9uIHdvcmQgZGV0ZWN0aW9uIGludGVycnVwdCBmbGFnLiBUaGlzIGludGVycnVwdCB3aWxsIGJlCisvLyByYWlzZWQgYnkgbW9kZW0gd2hlbiB0aGUgc3luY2hyb25pemF0aW9uIHdvcmQgaXMgcmVjZWl2ZWQuIFRoZSBDUEUgbWF5CisvLyBkZWNpZGUgdG8gcmVqZWN0IHRoZSBwYWNrZXQgYmFzZWQgb24gaXRzIGhlYWRlciAocHJvdG9jb2wgc3BlY2lmaWMpLiBXcml0ZQorLy8gemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNU09GVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1TT0ZUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETVNPRlRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNU09GVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBNRE1PVVQKKy8vCisvLyBNb2RlbSBGSUZPIG91dHB1dCBpbnRlcnJ1cHQgZmxhZy4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzCisvLyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNT1VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1PVVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETU9VVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gTURNSU4KKy8vCisvLyBNb2RlbSBGSUZPIGlucHV0IGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMKKy8vIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1JTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETUlOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBNRE1ET05FCisvLworLy8gTW9kZW0gY29tbWFuZCBkb25lIGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZQorLy8gaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19NRE1ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX01ETURPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfTURNRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBGU0NBCisvLworLy8gRnJlcXVlbmN5IHN5bnRoZXNpemVyIGNhbGlicmF0aW9uIGFjY2VsZXJhdG9yIGludGVycnVwdCBmbGFnLiBXcml0ZSB6ZXJvIHRvCisvLyBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfRlNDQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lGR19GU0NBX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUZHX0ZTQ0FfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRkdfRlNDQV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19EQkVMTF9PX1JGSFdJRU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzE5XSBSQVRDSDcKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENINy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBSQVRDSDYKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENINi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g2X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBSQVRDSDUKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENINS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworCisvLyBGaWVsZDogICAgWzE2XSBSQVRDSDQKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENINC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENINF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0g0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBSQVRDSDMKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENIMy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorCisvLyBGaWVsZDogICAgWzE0XSBSQVRDSDIKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENIMi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBSQVRDSDEKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENIMS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDFfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBSQVRDSDAKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJBVENIMC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SQVRDSDBfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JBVENIMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkFUQ0gwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorCisvLyBGaWVsZDogICAgWzExXSBSRkVTT0ZUMgorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuUkZFU09GVDIuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gUkZFU09GVDEKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLlJGRVNPRlQxLgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQxX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDFfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIFJGRVNPRlQwCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SRkVTT0ZUMC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVTT0ZUMF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRVNPRlQwX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFU09GVDBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBSRkVET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5SRkVET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1JGRURPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fUkZFRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9SRkVET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzZdIFRSQ1RLCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5UUkNUSy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fVFJDVEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9UUkNUS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX1RSQ1RLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fVFJDVEtfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBNRE1TT0ZUCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5NRE1TT0ZULgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1TT0ZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETVNPRlRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNU09GVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1TT0ZUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIE1ETU9VVAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGSFdJRkcuTURNT1VULgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETU9VVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNT1VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1PVVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIE1ETUlOCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5NRE1JTi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1JTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETUlOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNSU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBNRE1ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZIV0lGRy5NRE1ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX01ETURPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fTURNRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9NRE1ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIEZTQ0EKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkhXSUZHLkZTQ0EuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX0ZTQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGSFdJRU5fRlNDQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRkNfREJFTExfUkZIV0lFTl9GU0NBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkhXSUVOX0ZTQ0FfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19SRkNQRUlGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIElOVEVSTkFMX0VSUk9SCisvLworLy8gSW50ZXJydXB0IGZsYWcgMzEuIFRoZSBjb21tYW5kIGFuZCBwYWNrZXQgZW5naW5lIChDUEUpIGhhcyBvYnNlcnZlZCBhbgorLy8gdW5leHBlY3RlZCBlcnJvci4gQSByZXNldCBvZiB0aGUgQ1BFIGlzIG5lZWRlZC4gVGhpcyBjYW4gYmUgZG9uZSBieQorLy8gc3dpdGNoaW5nIHRoZSBSRiBDb3JlIHBvd2VyIGRvbWFpbiBvZmYgYW5kIG9uIGluIFBSQ006UERDVEwxUkZDLiBXcml0ZSB6ZXJvCisvLyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSU5URVJOQUxfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JTlRFUk5BTF9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lOVEVSTkFMX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBCT09UX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAzMC4gVGhlIGNvbW1hbmQgYW5kIHBhY2tldCBlbmdpbmUgKENQRSkgYm9vdCBpcyBmaW5pc2hlZC4KKy8vIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19CT09UX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0JPT1RfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfQk9PVF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19CT09UX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gTU9EVUxFU19VTkxPQ0tFRAorLy8KKy8vIEludGVycnVwdCBmbGFnIDI5LiBBcyBwYXJ0IG9mIGNvbW1hbmQgYW5kIHBhY2tldCBlbmdpbmUgKENQRSkgYm9vdCBwcm9jZXNzLAorLy8gaXQgaGFzIG9wZW5lZCBhY2Nlc3MgdG8gUkYgQ29yZSBtb2R1bGVzIGFuZCBtZW1vcmllcy4gV3JpdGUgemVybyB0byBjbGVhcgorLy8gZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19NT0RVTEVTX1VOTE9DS0VEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX01PRFVMRVNfVU5MT0NLRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTU9EVUxFU19VTkxPQ0tFRF9NICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19NT0RVTEVTX1VOTE9DS0VEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gU1lOVEhfTk9fTE9DSworLy8KKy8vIEludGVycnVwdCBmbGFnIDI4LiBUaGUgcGhhc2UtbG9ja2VkIGxvb3AgaW4gZnJlcXVlbmN5IHN5bnRoZXNpemVyIGhhcworLy8gcmVwb3J0ZWQgbG9zcyBvZiBsb2NrLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfU1lOVEhfTk9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19TWU5USF9OT19MT0NLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1NZTlRIX05PX0xPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfU1lOVEhfTk9fTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisKKy8vIEZpZWxkOiAgICBbMjddIElSUTI3CisvLworLy8gSW50ZXJydXB0IGZsYWcgMjcuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTI3X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMjdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlEyN19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKworLy8gRmllbGQ6ICAgIFsyNl0gUlhfQUJPUlRFRAorLy8KKy8vIEludGVycnVwdCBmbGFnIDI2LiBQYWNrZXQgcmVjZXB0aW9uIHN0b3BwZWQgYmVmb3JlIHBhY2tldCB3YXMgZG9uZS4gV3JpdGUKKy8vIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9BQk9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0FCT1JURURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQUJPUlRFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9BQk9SVEVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLy8gRmllbGQ6ICAgIFsyNV0gUlhfTl9EQVRBX1dSSVRURU4KKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyNS4gU3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHBhcnRpYWwgcmVhZCBSeAorLy8gYnVmZmVyLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfTl9EQVRBX1dSSVRURU4gICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9OX0RBVEFfV1JJVFRFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX05fREFUQV9XUklUVEVOX00gICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfTl9EQVRBX1dSSVRURU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFJYX0RBVEFfV1JJVFRFTgorLy8KKy8vIEludGVycnVwdCBmbGFnIDI0LiBEYXRhIHdyaXR0ZW4gdG8gcGFydGlhbCByZWFkIFJ4IGJ1ZmZlci4gV3JpdGUgemVybyB0bworLy8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9EQVRBX1dSSVRURU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0RBVEFfV1JJVFRFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfREFUQV9XUklUVEVOX00gICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9EQVRBX1dSSVRURU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6ICAgIFsyM10gUlhfRU5UUllfRE9ORQorLy8KKy8vIEludGVycnVwdCBmbGFnIDIzLiBSeCBxdWV1ZSBkYXRhIGVudHJ5IGNoYW5naW5nIHN0YXRlIHRvIGZpbmlzaGVkLiAgV3JpdGUKKy8vIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9FTlRSWV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0VOVFJZX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfRU5UUllfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9FTlRSWV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKworLy8gRmllbGQ6ICAgIFsyMl0gUlhfQlVGX0ZVTEwKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyMi4gUGFja2V0IHJlY2VpdmVkIHRoYXQgZGlkIG5vdCBmaXQgaW4gUnggcXVldWUuIEJMRSBtb2RlOgorLy8gUGFja2V0IHJlY2VpdmVkIHRoYXQgZGlkIG5vdCBmaXQgaW4gdGhlIFJ4IHF1ZXVlLiBJRUVFIDgwMi4xNS40IG1vZGU6IEZyYW1lCisvLyByZWNlaXZlZCB0aGF0IGRpZCBub3QgZml0IGluIHRoZSBSeCBxdWV1ZS4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZQorLy8gdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9CVUZfRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0JVRl9GVUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQlVGX0ZVTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9CVUZfRlVMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKworLy8gRmllbGQ6ICAgIFsyMV0gUlhfQ1RSTF9BQ0sKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAyMS4gQkxFIG1vZGUgb25seTogTEwgY29udHJvbCBwYWNrZXQgcmVjZWl2ZWQgd2l0aCBDUkMgT0ssCisvLyBub3QgdG8gYmUgaWdub3JlZCwgdGhlbiBhY2tub3dsZWRnZW1lbnQgc2VudC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLgorLy8gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9DVFJMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0NUUkxfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQ1RSTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9DVFJMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gUlhfQ1RSTAorLy8KKy8vIEludGVycnVwdCBmbGFnIDIwLiBCTEUgbW9kZSBvbmx5OiBMTCBjb250cm9sIHBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBPSywKKy8vIG5vdCB0byBiZSBpZ25vcmVkLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9DVFJMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0NUUkxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfQ1RSTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisKKy8vIEZpZWxkOiAgICBbMTldIFJYX0VNUFRZCisvLworLy8gSW50ZXJydXB0IGZsYWcgMTkuIEJMRSBtb2RlIG9ubHk6IFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBPSywgbm90IHRvIGJlCisvLyBpZ25vcmVkLCBubyBwYXlsb2FkLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9FTVBUWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0VNUFRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfRU1QVFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisKKy8vIEZpZWxkOiAgICBbMThdIFJYX0lHTk9SRUQKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAxOC4gUGFja2V0IHJlY2VpdmVkLCBidXQgY2FuIGJlIGlnbm9yZWQuIEJMRSBtb2RlOiBQYWNrZXQKKy8vIHJlY2VpdmVkIHdpdGggQ1JDIE9LLCBidXQgdG8gYmUgaWdub3JlZC4gSUVFRSA4MDIuMTUuNCBtb2RlOiBGcmFtZSByZWNlaXZlZAorLy8gd2l0aCBpZ25vcmUgZmxhZyBzZXQuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9JR05PUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX0lHTk9SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfSUdOT1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9JR05PUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKworLy8gRmllbGQ6ICAgIFsxN10gUlhfTk9LCisvLworLy8gSW50ZXJydXB0IGZsYWcgMTcuIFBhY2tldCByZWNlaXZlZCB3aXRoIENSQyBlcnJvci4gQkxFIG1vZGU6IFBhY2tldCByZWNlaXZlZAorLy8gd2l0aCBDUkMgZXJyb3IuIElFRUUgODAyLjE1LjQgbW9kZTogRnJhbWUgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IuIFdyaXRlCisvLyB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfTk9LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9OT0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX05PS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfTk9LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisKKy8vIEZpZWxkOiAgICBbMTZdIFJYX09LCisvLworLy8gSW50ZXJydXB0IGZsYWcgMTYuIFBhY2tldCByZWNlaXZlZCBjb3JyZWN0bHkuIEJMRSBtb2RlOiBQYWNrZXQgcmVjZWl2ZWQgd2l0aAorLy8gQ1JDIE9LLCBwYXlsb2FkLCBhbmQgbm90IHRvIGJlIGlnbm9yZWQuIElFRUUgODAyLjE1LjQgbW9kZTogRnJhbWUgcmVjZWl2ZWQKKy8vIHdpdGggQ1JDIE9LLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19SWF9PS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1JYX09LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfUlhfT0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTVdIElSUTE1CisvLworLy8gSW50ZXJydXB0IGZsYWcgMTUuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTE1X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExNV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKworLy8gRmllbGQ6ICAgIFsxNF0gSVJRMTQKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAxNC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExNF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTE0X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorCisvLyBGaWVsZDogICAgWzEzXSBJUlExMworLy8KKy8vIEludGVycnVwdCBmbGFnIDEzLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExM19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTEzX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisKKy8vIEZpZWxkOiAgICBbMTJdIElSUTEyCisvLworLy8gSW50ZXJydXB0IGZsYWcgMTIuIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0lSUTEyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfSVJRMTJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19JUlExMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKworLy8gRmllbGQ6ICAgIFsxMV0gVFhfQlVGRkVSX0NIQU5HRUQKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAxMS4gQkxFIG1vZGUgb25seTogQSBidWZmZXIgY2hhbmdlIGlzIGNvbXBsZXRlIGFmdGVyCisvLyBDTURfQkxFX0FEVl9QQVlMT0FELiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQlVGRkVSX0NIQU5HRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9CVUZGRVJfQ0hBTkdFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0JVRkZFUl9DSEFOR0VEX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQlVGRkVSX0NIQU5HRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8vIEZpZWxkOiAgICBbMTBdIFRYX0VOVFJZX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyAxMC4gVHggcXVldWUgZGF0YSBlbnRyeSBzdGF0ZSBjaGFuZ2VkIHRvIGZpbmlzaGVkLiBXcml0ZSB6ZXJvCisvLyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0VOVFJZX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfRU5UUllfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9FTlRSWV9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0VOVFJZX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBUWF9SRVRSQU5TCisvLworLy8gSW50ZXJydXB0IGZsYWcgOS4gQkxFIG1vZGUgb25seTogUGFja2V0IHJldHJhbnNtaXR0ZWQuIFdyaXRlIHplcm8gdG8gY2xlYXIKKy8vIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfUkVUUkFOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9SRVRSQU5TX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX1JFVFJBTlNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfUkVUUkFOU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFRYX0NUUkxfQUNLX0FDSworLy8KKy8vIEludGVycnVwdCBmbGFnIDguIEJMRSBtb2RlIG9ubHk6IEFja25vd2xlZGdlbWVudCByZWNlaXZlZCBvbiBhIHRyYW5zbWl0dGVkCisvLyBMTCBjb250cm9sIHBhY2tldCwgYW5kIGFja25vd2xlZGdlbWVudCB0cmFuc21pdHRlZCBmb3IgdGhhdCBwYWNrZXQuIFdyaXRlCisvLyB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9BQ0tfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX0FDS19BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQUNLX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9BQ0tfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFRYX0NUUkxfQUNLCisvLworLy8gSW50ZXJydXB0IGZsYWcgNy4gQkxFIG1vZGU6IEFja25vd2xlZGdlbWVudCByZWNlaXZlZCBvbiBhIHRyYW5zbWl0dGVkIExMCisvLyBjb250cm9sIHBhY2tldC4gV3JpdGUgemVybyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBUWF9DVFJMCisvLworLy8gSW50ZXJydXB0IGZsYWcgNi4gQkxFIG1vZGU6IFRyYW5zbWl0dGVkIExMIGNvbnRyb2wgcGFja2V0LiBXcml0ZSB6ZXJvIHRvCisvLyBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQ1RSTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9DVFJMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0NUUkxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBUWF9BQ0sKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyA1LiBCTEUgbW9kZTogQWNrbm93bGVkZ2VtZW50IHJlY2VpdmVkIG9uIGEgdHJhbnNtaXR0ZWQKKy8vIHBhY2tldC4gSUVFRSA4MDIuMTUuNCBtb2RlOiBUcmFuc21pdHRlZCBhdXRvbWF0aWMgQUNLIGZyYW1lLiBXcml0ZSB6ZXJvIHRvCisvLyBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBUWF9ET05FCisvLworLy8gSW50ZXJydXB0IGZsYWcgNC4gUGFja2V0IHRyYW5zbWl0dGVkLiAoQkxFIG1vZGU6IEEgcGFja2V0IGhhcyBiZWVuCisvLyB0cmFuc21pdHRlZC4pIChJRUVFIDgwMi4xNS40IG1vZGU6IEEgZnJhbWUgaGFzIGJlZW4gdHJhbnNtaXR0ZWQpLiBXcml0ZSB6ZXJvCisvLyB0byBjbGVhciBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfVFhfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19UWF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX1RYX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBMQVNUX0ZHX0NPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBmbGFnIDMuIElFRUUgODAyLjE1LjQgbW9kZSBvbmx5OiBUaGUgbGFzdCBmb3JlZ3JvdW5kIHJhZGlvCisvLyBvcGVyYXRpb24gY29tbWFuZCBpbiBhIGNoYWluIG9mIGNvbW1hbmRzIGhhcyBmaW5pc2hlZC4gV3JpdGUgemVybyB0byBjbGVhcgorLy8gZmxhZy4gV3JpdGUgdG8gb25lIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19MQVNUX0ZHX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0xBU1RfRkdfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTEFTVF9GR19DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19MQVNUX0ZHX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRkdfQ09NTUFORF9ET05FCisvLworLy8gSW50ZXJydXB0IGZsYWcgMi4gSUVFRSA4MDIuMTUuNCBtb2RlIG9ubHk6IEEgZm9yZWdyb3VuZCByYWRpbyBvcGVyYXRpb24KKy8vIGNvbW1hbmQgaGFzIGZpbmlzaGVkLiBXcml0ZSB6ZXJvIHRvIGNsZWFyIGZsYWcuIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfRkdfQ09NTUFORF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19GR19DT01NQU5EX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0ZHX0NPTU1BTkRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfRkdfQ09NTUFORF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIExBU1RfQ09NTUFORF9ET05FCisvLworLy8gSW50ZXJydXB0IGZsYWcgMS4gVGhlIGxhc3QgcmFkaW8gb3BlcmF0aW9uIGNvbW1hbmQgaW4gYSBjaGFpbiBvZiBjb21tYW5kcworLy8gaGFzIGZpbmlzaGVkLiAoSUVFRSA4MDIuMTUuNCBtb2RlOiBUaGUgbGFzdCBiYWNrZ3JvdW5kIGxldmVsIHJhZGlvIG9wZXJhdGlvbgorLy8gY29tbWFuZCBpbiBhIGNoYWluIG9mIGNvbW1hbmRzIGhhcyBmaW5pc2hlZC4pIFdyaXRlIHplcm8gdG8gY2xlYXIgZmxhZy4KKy8vIFdyaXRlIHRvIG9uZSBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTEFTVF9DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19MQVNUX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0xBU1RfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfTEFTVF9DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIENPTU1BTkRfRE9ORQorLy8KKy8vIEludGVycnVwdCBmbGFnIDAuIEEgcmFkaW8gb3BlcmF0aW9uIGhhcyBmaW5pc2hlZC4gKElFRUUgODAyLjE1LjQgbW9kZTogQQorLy8gYmFja2dyb3VuZCBsZXZlbCByYWRpbyBvcGVyYXRpb24gY29tbWFuZCBoYXMgZmluaXNoZWQuKSBXcml0ZSB6ZXJvIHRvIGNsZWFyCisvLyBmbGFnLiBXcml0ZSB0byBvbmUgaGFzIG5vIGVmZmVjdC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRkdfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlGR19DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUZHX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19EQkVMTF9PX1JGQ1BFSUVOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFszMV0gSU5URVJOQUxfRVJST1IKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5JTlRFUk5BTF9FUlJPUi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSU5URVJOQUxfRVJST1JfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JTlRFUk5BTF9FUlJPUl9NICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lOVEVSTkFMX0VSUk9SX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisvLyBGaWVsZDogICAgWzMwXSBCT09UX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5CT09UX0RPTkUuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9CT09UX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0JPT1RfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fQk9PVF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9CT09UX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gTU9EVUxFU19VTkxPQ0tFRAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLk1PRFVMRVNfVU5MT0NLRUQuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9NT0RVTEVTX1VOTE9DS0VEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX01PRFVMRVNfVU5MT0NLRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTU9EVUxFU19VTkxPQ0tFRF9NICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9NT0RVTEVTX1VOTE9DS0VEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgIFsyOF0gU1lOVEhfTk9fTE9DSworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlNZTlRIX05PX0xPQ0suCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9TWU5USF9OT19MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1NZTlRIX05PX0xPQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fU1lOVEhfTk9fTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9TWU5USF9OT19MT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKworLy8gRmllbGQ6ICAgIFsyN10gSVJRMjcKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5JUlEyNy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMjdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlEyN19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTI3X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworCisvLyBGaWVsZDogICAgWzI2XSBSWF9BQk9SVEVECisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfQUJPUlRFRC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0FCT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQUJPUlRFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9BQk9SVEVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0FCT1JURURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorCisvLyBGaWVsZDogICAgWzI1XSBSWF9OX0RBVEFfV1JJVFRFTgorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX05fREFUQV9XUklUVEVOLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfTl9EQVRBX1dSSVRURU4gICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9OX0RBVEFfV1JJVFRFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX05fREFUQV9XUklUVEVOX00gICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfTl9EQVRBX1dSSVRURU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisKKy8vIEZpZWxkOiAgICBbMjRdIFJYX0RBVEFfV1JJVFRFTgorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0RBVEFfV1JJVFRFTi4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0RBVEFfV1JJVFRFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfREFUQV9XUklUVEVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9EQVRBX1dSSVRURU5fTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0RBVEFfV1JJVFRFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorCisvLyBGaWVsZDogICAgWzIzXSBSWF9FTlRSWV9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfRU5UUllfRE9ORS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0VOVFJZX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfRU5UUllfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9FTlRSWV9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0VOVFJZX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworCisvLyBGaWVsZDogICAgWzIyXSBSWF9CVUZfRlVMTAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0JVRl9GVUxMLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQlVGX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9CVUZfRlVMTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0JVRl9GVUxMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQlVGX0ZVTExfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisKKy8vIEZpZWxkOiAgICBbMjFdIFJYX0NUUkxfQUNLCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfQ1RSTF9BQ0suCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9DVFJMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0NUUkxfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQ1RSTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9DVFJMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKworLy8gRmllbGQ6ICAgIFsyMF0gUlhfQ1RSTAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlJYX0NUUkwuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0NUUkxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfQ1RSTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9DVFJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6ICAgIFsxOV0gUlhfRU1QVFkKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9FTVBUWS4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfRU1QVFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9FTVBUWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0VNUFRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorCisvLyBGaWVsZDogICAgWzE4XSBSWF9JR05PUkVECisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuUlhfSUdOT1JFRC4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0lHTk9SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfSUdOT1JFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9JR05PUkVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX0lHTk9SRURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorCisvLyBGaWVsZDogICAgWzE3XSBSWF9OT0sKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9OT0suCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9OT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX05PS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfTk9LX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9OT0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKworLy8gRmllbGQ6ICAgIFsxNl0gUlhfT0sKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5SWF9PSy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX09LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fUlhfT0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9SWF9PS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1JYX09LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogICAgWzE1XSBJUlExNQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLklSUTE1LgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExNV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTE1X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisKKy8vIEZpZWxkOiAgICBbMTRdIElSUTE0CisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuSVJRMTQuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTE0X0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExNF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLy8gRmllbGQ6ICAgIFsxM10gSVJRMTMKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5JUlExMy4KKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTEzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworCisvLyBGaWVsZDogICAgWzEyXSBJUlExMgorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLklSUTEyLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9JUlExMl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0lSUTEyX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fSVJRMTJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisKKy8vIEZpZWxkOiAgICBbMTFdIFRYX0JVRkZFUl9DSEFOR0VECisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuVFhfQlVGRkVSX0NIQU5HRUQuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9CVUZGRVJfQ0hBTkdFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0JVRkZFUl9DSEFOR0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQlVGRkVSX0NIQU5HRURfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9CVUZGRVJfQ0hBTkdFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgIFsxMF0gVFhfRU5UUllfRE9ORQorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX0VOVFJZX0RPTkUuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9FTlRSWV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0VOVFJZX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfRU5UUllfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9FTlRSWV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gVFhfUkVUUkFOUworLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX1JFVFJBTlMuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9SRVRSQU5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX1JFVFJBTlNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfUkVUUkFOU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9SRVRSQU5TX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gVFhfQ1RSTF9BQ0tfQUNLCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuVFhfQ1RSTF9BQ0tfQUNLLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9BQ0tfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX0FDS19BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfQUNLX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9BQ0tfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFRYX0NUUkxfQUNLCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuVFhfQ1RSTF9BQ0suCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gVFhfQ1RSTAorLy8KKy8vIEludGVycnVwdCBlbmFibGUgZm9yIFJGQ1BFSUZHLlRYX0NUUkwuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0NUUkxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQ1RSTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9DVFJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVFhfQUNLCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuVFhfQUNLLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFRYX0RPTkUKKy8vCisvLyBJbnRlcnJ1cHQgZW5hYmxlIGZvciBSRkNQRUlGRy5UWF9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9UWF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX1RYX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fVFhfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIExBU1RfRkdfQ09NTUFORF9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuTEFTVF9GR19DT01NQU5EX0RPTkUuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9MQVNUX0ZHX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0xBU1RfRkdfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTEFTVF9GR19DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9MQVNUX0ZHX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gRkdfQ09NTUFORF9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuRkdfQ09NTUFORF9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fRkdfQ09NTUFORF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9GR19DT01NQU5EX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0ZHX0NPTU1BTkRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fRkdfQ09NTUFORF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIExBU1RfQ09NTUFORF9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuTEFTVF9DT01NQU5EX0RPTkUuCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9MQVNUX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0xBU1RfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fTEFTVF9DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9MQVNUX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ09NTUFORF9ET05FCisvLworLy8gSW50ZXJydXB0IGVuYWJsZSBmb3IgUkZDUEVJRkcuQ09NTUFORF9ET05FLgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fQ09NTUFORF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlFTl9DT01NQU5EX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSUVOX0NPTU1BTkRfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJRU5fQ09NTUFORF9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX0RCRUxMX09fUkZDUEVJU0wKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBJTlRFUk5BTF9FUlJPUgorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuSU5URVJOQUxfRVJST1IgaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSU5URVJOQUxfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JTlRFUk5BTF9FUlJPUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lOVEVSTkFMX0VSUk9SX00gICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSU5URVJOQUxfRVJST1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JTlRFUk5BTF9FUlJPUl9DUEUxICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lOVEVSTkFMX0VSUk9SX0NQRTAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzMwXSBCT09UX0RPTkUKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLkJPT1RfRE9ORSBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9CT09UX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0JPT1RfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQk9PVF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9CT09UX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0JPT1RfRE9ORV9DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQk9PVF9ET05FX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMjldIE1PRFVMRVNfVU5MT0NLRUQKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLk1PRFVMRVNfVU5MT0NLRUQgaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTU9EVUxFU19VTkxPQ0tFRCAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9NT0RVTEVTX1VOTE9DS0VEX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX01PRFVMRVNfVU5MT0NLRURfTSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTU9EVUxFU19VTkxPQ0tFRF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9NT0RVTEVTX1VOTE9DS0VEX0NQRTEgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX01PRFVMRVNfVU5MT0NLRURfQ1BFMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzI4XSBTWU5USF9OT19MT0NLCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5TWU5USF9OT19MT0NLIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1NZTlRIX05PX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfU1lOVEhfTk9fTE9DS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9TWU5USF9OT19MT0NLX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1NZTlRIX05PX0xPQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfU1lOVEhfTk9fTE9DS19DUEUxICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9TWU5USF9OT19MT0NLX0NQRTAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyN10gSVJRMjcKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLklSUTI3IGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlEyN19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTI3X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMjdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlEyN19DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTI3X0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzI2XSBSWF9BQk9SVEVECisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9BQk9SVEVEIGludGVycnVwdCBzaG91bGQKKy8vIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0FCT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQUJPUlRFRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9BQk9SVEVEX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0FCT1JURURfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQUJPUlRFRF9DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9BQk9SVEVEX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyNV0gUlhfTl9EQVRBX1dSSVRURU4KKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX05fREFUQV9XUklUVEVOIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05fREFUQV9XUklUVEVOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTl9EQVRBX1dSSVRURU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OX0RBVEFfV1JJVFRFTl9NICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05fREFUQV9XUklUVEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTl9EQVRBX1dSSVRURU5fQ1BFMSAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OX0RBVEFfV1JJVFRFTl9DUEUwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyNF0gUlhfREFUQV9XUklUVEVOCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9EQVRBX1dSSVRURU4gaW50ZXJydXB0CisvLyBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfREFUQV9XUklUVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9EQVRBX1dSSVRURU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0RBVEFfV1JJVFRFTl9NICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfREFUQV9XUklUVEVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9EQVRBX1dSSVRURU5fQ1BFMSAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0RBVEFfV1JJVFRFTl9DUEUwICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzIzXSBSWF9FTlRSWV9ET05FCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5SWF9FTlRSWV9ET05FIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VOVFJZX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU5UUllfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTlRSWV9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VOVFJZX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU5UUllfRE9ORV9DUEUxICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTlRSWV9ET05FX0NQRTAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyMl0gUlhfQlVGX0ZVTEwKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX0JVRl9GVUxMIGludGVycnVwdCBzaG91bGQKKy8vIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0JVRl9GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQlVGX0ZVTExfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9CVUZfRlVMTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0JVRl9GVUxMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQlVGX0ZVTExfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9CVUZfRlVMTF9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyMV0gUlhfQ1RSTF9BQ0sKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX0NUUkxfQUNLIGludGVycnVwdCBzaG91bGQKKy8vIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9BQ0tfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX0FDS19DUEUwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsyMF0gUlhfQ1RSTAorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfQ1RSTCBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0NUUkxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfQ1RSTF9DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9DVFJMX0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOV0gUlhfRU1QVFkKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlJYX0VNUFRZIGludGVycnVwdCBzaG91bGQKKy8vIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU1QVFlfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTVBUWV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0VNUFRZX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfRU1QVFlfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9FTVBUWV9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxOF0gUlhfSUdOT1JFRAorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfSUdOT1JFRCBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9JR05PUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0lHTk9SRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfSUdOT1JFRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9JR05PUkVEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX0lHTk9SRURfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfSUdOT1JFRF9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTddIFJYX05PSworLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfTk9LIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTk9LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OT0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05PS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfTk9LX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9OT0tfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX05PS19DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE2XSBSWF9PSworLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuUlhfT0sgaW50ZXJydXB0IHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9PSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX09LX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfT0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9SWF9PS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1JYX09LX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfUlhfT0tfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTVdIElSUTE1CisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5JUlExNSBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE1X1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTVfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNV9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxNF0gSVJRMTQKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLklSUTE0IGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExNF9DUEUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTE0X0NQRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzEzXSBJUlExMworLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuSVJRMTMgaW50ZXJydXB0IHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEzX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExM19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEzX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTNfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTJdIElSUTEyCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5JUlExMiBpbnRlcnJ1cHQgc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0lSUTEyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfSVJRMTJfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9JUlExMl9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMV0gVFhfQlVGRkVSX0NIQU5HRUQKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlRYX0JVRkZFUl9DSEFOR0VEIGludGVycnVwdAorLy8gc2hvdWxkIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0JVRkZFUl9DSEFOR0VEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQlVGRkVSX0NIQU5HRURfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9CVUZGRVJfQ0hBTkdFRF9NICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0JVRkZFUl9DSEFOR0VEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQlVGRkVSX0NIQU5HRURfQ1BFMSAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9CVUZGRVJfQ0hBTkdFRF9DUEUwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgIFsxMF0gVFhfRU5UUllfRE9ORQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuVFhfRU5UUllfRE9ORSBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9FTlRSWV9ET05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0VOVFJZX0RPTkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRU5UUllfRE9ORV9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9FTlRSWV9ET05FX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0VOVFJZX0RPTkVfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRU5UUllfRE9ORV9DUEUwICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzldIFRYX1JFVFJBTlMKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlRYX1JFVFJBTlMgaW50ZXJydXB0IHNob3VsZAorLy8gdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfUkVUUkFOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9SRVRSQU5TX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX1JFVFJBTlNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfUkVUUkFOU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9SRVRSQU5TX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX1JFVFJBTlNfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs4XSBUWF9DVFJMX0FDS19BQ0sKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlRYX0NUUkxfQUNLX0FDSyBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0FDS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfQUNLX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19BQ0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0FDS19DUEUxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfQUNLX0NQRTAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzddIFRYX0NUUkxfQUNLCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5UWF9DVFJMX0FDSyBpbnRlcnJ1cHQgc2hvdWxkCisvLyB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX0FDS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQUNLX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9BQ0tfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFRYX0NUUkwKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLlRYX0NUUkwgaW50ZXJydXB0IHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9DVFJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0NUUkxfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQ1RSTF9DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzVdIFRYX0FDSworLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuVFhfQUNLIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9BQ0tfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0FDS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfQUNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9BQ0tfQ1BFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0FDS19DUEUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs0XSBUWF9ET05FCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5UWF9ET05FIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfVFhfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9UWF9ET05FX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX1RYX0RPTkVfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBMQVNUX0ZHX0NPTU1BTkRfRE9ORQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuTEFTVF9GR19DT01NQU5EX0RPTkUKKy8vIGludGVycnVwdCBzaG91bGQgdXNlLgorLy8gRU5VTXM6CisvLyBDUEUxICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKy8vIENQRTAgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9GR19DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0ZHX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfRkdfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9GR19DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0ZHX0NPTU1BTkRfRE9ORV9DUEUxICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfRkdfQ09NTUFORF9ET05FX0NQRTAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFsyXSBGR19DT01NQU5EX0RPTkUKKy8vCisvLyBTZWxlY3Qgd2hpY2ggQ1BVIGludGVycnVwdCB2ZWN0b3IgdGhlIFJGQ1BFSUZHLkZHX0NPTU1BTkRfRE9ORSBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9GR19DT01NQU5EX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0ZHX0NPTU1BTkRfRE9ORV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfRkdfQ09NTUFORF9ET05FX00gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9GR19DT01NQU5EX0RPTkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0ZHX0NPTU1BTkRfRE9ORV9DUEUxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfRkdfQ09NTUFORF9ET05FX0NQRTAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIExBU1RfQ09NTUFORF9ET05FCisvLworLy8gU2VsZWN0IHdoaWNoIENQVSBpbnRlcnJ1cHQgdmVjdG9yIHRoZSBSRkNQRUlGRy5MQVNUX0NPTU1BTkRfRE9ORSBpbnRlcnJ1cHQKKy8vIHNob3VsZCB1c2UuCisvLyBFTlVNczoKKy8vIENQRTEgICAgICAgICAgICAgICAgICAgICBBc3NvY2lhdGUgdGhpcyBpbnRlcnJ1cHQgbGluZSB3aXRoIElOVF9SRl9DUEUxCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHZlY3RvcgorLy8gQ1BFMCAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9MQVNUX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0xBU1RfQ09NTUFORF9ET05FX0NQRTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfTEFTVF9DT01NQU5EX0RPTkVfQ1BFMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzBdIENPTU1BTkRfRE9ORQorLy8KKy8vIFNlbGVjdCB3aGljaCBDUFUgaW50ZXJydXB0IHZlY3RvciB0aGUgUkZDUEVJRkcuQ09NTUFORF9ET05FIGludGVycnVwdCBzaG91bGQKKy8vIHVzZS4KKy8vIEVOVU1zOgorLy8gQ1BFMSAgICAgICAgICAgICAgICAgICAgIEFzc29jaWF0ZSB0aGlzIGludGVycnVwdCBsaW5lIHdpdGggSU5UX1JGX0NQRTEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgdmVjdG9yCisvLyBDUEUwICAgICAgICAgICAgICAgICAgICAgQXNzb2NpYXRlIHRoaXMgaW50ZXJydXB0IGxpbmUgd2l0aCBJTlRfUkZfQ1BFMAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCB2ZWN0b3IKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0NPTU1BTkRfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQ09NTUFORF9ET05FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9DT01NQU5EX0RPTkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQ1BFSVNMX0NPTU1BTkRfRE9ORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRkNfREJFTExfUkZDUEVJU0xfQ09NTUFORF9ET05FX0NQRTEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19EQkVMTF9SRkNQRUlTTF9DT01NQU5EX0RPTkVfQ1BFMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfREJFTExfT19SRkFDS0lGRworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIEFDS0ZMQUcKKy8vCisvLyBJbnRlcnJ1cHQgZmxhZyBmb3IgQ29tbWFuZCBBQ0sKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQUNLSUZHX0FDS0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfUkZBQ0tJRkdfQUNLRkxBR19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJGQ19EQkVMTF9SRkFDS0lGR19BQ0tGTEFHX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX0RCRUxMX1JGQUNLSUZHX0FDS0ZMQUdfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19EQkVMTF9PX1NZU0dQT0NUTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMTU6MTJdIEdQT0NUTDMKKy8vCisvLyBSRiBDb3JlIEdQTyBjb250cm9sIGJpdCAzLiBTZWxlY3RzIHdoaWNoIHNpZ25hbCB0byBvdXRwdXQgb24gdGhlIFJGIENvcmUgR1BPCisvLyBsaW5lIDMuCisvLyBFTlVNczoKKy8vIFJBVEdQTzMgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMworLy8gUkFUR1BPMiAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAyCisvLyBSQVRHUE8xICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDEKKy8vIFJBVEdQTzAgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMAorLy8gUkZFR1BPMyAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAzCisvLyBSRkVHUE8yICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDIKKy8vIFJGRUdQTzEgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMQorLy8gUkZFR1BPMCAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAwCisvLyBNQ0VHUE8zICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDMKKy8vIE1DRUdQTzIgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMgorLy8gTUNFR1BPMSAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAxCisvLyBNQ0VHUE8wICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDAKKy8vIENQRUdQTzMgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMworLy8gQ1BFR1BPMiAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAyCisvLyBDUEVHUE8xICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDEKKy8vIENQRUdQTzAgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfUkFUR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19SQVRHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEUwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1JBVEdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRDAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfUkFUR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19SRkVHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX1JGRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwQTAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfUkZFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19SRkVHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX01DRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfTUNFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2MDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19NQ0VHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDUwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX01DRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfQ1BFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMM19DUEVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwzX0NQRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDNfQ1BFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgWzExOjhdIEdQT0NUTDIKKy8vCisvLyBSRiBDb3JlIEdQTyBjb250cm9sIGJpdCAyLiBTZWxlY3RzIHdoaWNoIHNpZ25hbCB0byBvdXRwdXQgb24gdGhlIFJGIENvcmUgR1BPCisvLyBsaW5lIDIuCisvLyBFTlVNczoKKy8vIFJBVEdQTzMgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMworLy8gUkFUR1BPMiAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAyCisvLyBSQVRHUE8xICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDEKKy8vIFJBVEdQTzAgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMAorLy8gUkZFR1BPMyAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAzCisvLyBSRkVHUE8yICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDIKKy8vIFJGRUdQTzEgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMQorLy8gUkZFR1BPMCAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAwCisvLyBNQ0VHUE8zICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDMKKy8vIE1DRUdQTzIgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMgorLy8gTUNFR1BPMSAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAxCisvLyBNQ0VHUE8wICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDAKKy8vIENQRUdQTzMgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMworLy8gQ1BFR1BPMiAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAyCisvLyBDUEVHUE8xICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDEKKy8vIENQRUdQTzAgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfUkFUR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRjAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9SQVRHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1JBVEdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfUkFUR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9SRkVHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBCMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX1JGRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfUkZFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOTAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9SRkVHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX01DRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfTUNFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9NQ0VHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX01DRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfQ1BFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMl9DUEVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwyX0NQRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDJfQ1BFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs3OjRdIEdQT0NUTDEKKy8vCisvLyBSRiBDb3JlIEdQTyBjb250cm9sIGJpdCAxLiBTZWxlY3RzIHdoaWNoIHNpZ25hbCB0byBvdXRwdXQgb24gdGhlIFJGIENvcmUgR1BPCisvLyBsaW5lIDEuCisvLyBFTlVNczoKKy8vIFJBVEdQTzMgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMworLy8gUkFUR1BPMiAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAyCisvLyBSQVRHUE8xICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDEKKy8vIFJBVEdQTzAgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMAorLy8gUkZFR1BPMyAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAzCisvLyBSRkVHUE8yICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDIKKy8vIFJGRUdQTzEgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMQorLy8gUkZFR1BPMCAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAwCisvLyBNQ0VHUE8zICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDMKKy8vIE1DRUdQTzIgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMgorLy8gTUNFR1BPMSAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAxCisvLyBNQ0VHUE8wICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDAKKy8vIENQRUdQTzMgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMworLy8gQ1BFR1BPMiAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAyCisvLyBDUEVHUE8xICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDEKKy8vIENQRUdQTzAgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfUkFUR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9SQVRHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRTAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1JBVEdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBEMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfUkFUR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9SRkVHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQjAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX1JGRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBBMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfUkZFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDkwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9SRkVHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX01DRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfTUNFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9NQ0VHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX01DRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfQ1BFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMV9DUEVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwxX0NQRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDFfQ1BFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFszOjBdIEdQT0NUTDAKKy8vCisvLyBSRiBDb3JlIEdQTyBjb250cm9sIGJpdCAwLiBTZWxlY3RzIHdoaWNoIHNpZ25hbCB0byBvdXRwdXQgb24gdGhlIFJGIENvcmUgR1BPCisvLyBsaW5lIDAuCisvLyBFTlVNczoKKy8vIFJBVEdQTzMgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMworLy8gUkFUR1BPMiAgICAgICAgICAgICAgICAgIFJBVCBHUE8gbGluZSAyCisvLyBSQVRHUE8xICAgICAgICAgICAgICAgICAgUkFUIEdQTyBsaW5lIDEKKy8vIFJBVEdQTzAgICAgICAgICAgICAgICAgICBSQVQgR1BPIGxpbmUgMAorLy8gUkZFR1BPMyAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAzCisvLyBSRkVHUE8yICAgICAgICAgICAgICAgICAgUkZFIEdQTyBsaW5lIDIKKy8vIFJGRUdQTzEgICAgICAgICAgICAgICAgICBSRkUgR1BPIGxpbmUgMQorLy8gUkZFR1BPMCAgICAgICAgICAgICAgICAgIFJGRSBHUE8gbGluZSAwCisvLyBNQ0VHUE8zICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDMKKy8vIE1DRUdQTzIgICAgICAgICAgICAgICAgICBNQ0UgR1BPIGxpbmUgMgorLy8gTUNFR1BPMSAgICAgICAgICAgICAgICAgIE1DRSBHUE8gbGluZSAxCisvLyBNQ0VHUE8wICAgICAgICAgICAgICAgICAgTUNFIEdQTyBsaW5lIDAKKy8vIENQRUdQTzMgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMworLy8gQ1BFR1BPMiAgICAgICAgICAgICAgICAgIENQRSBHUE8gbGluZSAyCisvLyBDUEVHUE8xICAgICAgICAgICAgICAgICAgQ1BFIEdQTyBsaW5lIDEKKy8vIENQRUdQTzAgICAgICAgICAgICAgICAgICBDUEUgR1BPIGxpbmUgMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfUkFUR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9SQVRHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1JBVEdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfUkFUR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9SRkVHUE8zICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX1JGRUdQTzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfUkZFR1BPMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9SRkVHUE8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX01DRUdQTzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfTUNFR1BPMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9NQ0VHUE8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX01DRUdQTzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfQ1BFR1BPMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFJGQ19EQkVMTF9TWVNHUE9DVExfR1BPQ1RMMF9DUEVHUE8yICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUkZDX0RCRUxMX1NZU0dQT0NUTF9HUE9DVEwwX0NQRUdQTzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSRkNfREJFTExfU1lTR1BPQ1RMX0dQT0NUTDBfQ1BFR1BPMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKworI2VuZGlmIC8vIF9fUkZDX0RCRUxMX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19wd3IuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19wd3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTVjZTZjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfcmZjX3B3ci5oCkBAIC0wLDAgKzEsMTUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfcmZjX3B3cl9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19SRkNfUFdSX0hfXworI2RlZmluZSBfX0hXX1JGQ19QV1JfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gUkZDX1BXUiBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBSRiBDb3JlIFBvd2VyIE1hbmFnZW1lbnQgYW5kIENsb2NrIEVuYWJsZQorI2RlZmluZSBSRkNfUFdSX09fUFdNQ0xLRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX1BXUl9PX1BXTUNMS0VOCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gUkZDVFJDCisvLworLy8gRW5hYmxlIGNsb2NrIHRvIHRoZSBSRiBDb3JlIFRyYWNlciAoUkZDVFJDKSBtb2R1bGUuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZDVFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkNUUkNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGQ1RSQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZDVFJDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gRlNDQQorLy8KKy8vIEVuYWJsZSBjbG9jayB0byB0aGUgRnJlcXVlbmN5IFN5bnRoZXNpemVyIENhbGlicmF0aW9uIEFjY2VsZXJhdG9yIChGU0NBKQorLy8gbW9kdWxlLgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0ZTQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fRlNDQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9GU0NBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0ZTQ0FfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFBIQQorLy8KKy8vIEVuYWJsZSBjbG9jayB0byB0aGUgUGFja2V0IEhhbmRsaW5nIEFjY2VsZXJhdG9yIChQSEEpIG1vZHVsZS4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9QSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1BIQV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUEhBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9QSEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBSQVQKKy8vCisvLyBFbmFibGUgY2xvY2sgdG8gdGhlIFJhZGlvIFRpbWVyIChSQVQpIG1vZHVsZS4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBSRkVSQU0KKy8vCisvLyBFbmFibGUgY2xvY2sgdG8gdGhlIFJGIEVuZ2luZSBSQU0gbW9kdWxlLgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGRVJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZFUkFNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkVSQU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGRVJBTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFJGRQorLy8KKy8vIEVuYWJsZSBjbG9jayB0byB0aGUgUkYgRW5naW5lIChSRkUpIG1vZHVsZS4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBNRE1SQU0KKy8vCisvLyBFbmFibGUgY2xvY2sgdG8gdGhlIE1vZGVtIFJBTSBtb2R1bGUuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fTURNUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9NRE1SQU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX01ETVJBTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fTURNUkFNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbM10gTURNCisvLworLy8gRW5hYmxlIGNsb2NrIHRvIHRoZSBNb2RlbSAoTURNKSBtb2R1bGUuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fTURNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9NRE1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX01ETV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fTURNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gQ1BFUkFNCisvLworLy8gRW5hYmxlIGNsb2NrIHRvIHRoZSBDb21tYW5kIGFuZCBQYWNrZXQgRW5naW5lIChDUEUpIFJBTSBtb2R1bGUuIEFzIHBhcnQgb2YKKy8vIFJGIENvcmUgaW5pdGlhbGl6YXRpb24sIHNldCB0aGlzIGJpdCB0b2dldGhlciB3aXRoIENQRSBiaXQgdG8gZW5hYmxlIENQRSB0bworLy8gYm9vdC4KKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9DUEVSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0NQRVJBTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fQ1BFUkFNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9DUEVSQU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBDUEUKKy8vCisvLyBFbmFibGUgcHJvY2Vzc29yIGNsb2NrIChoY2xrKSB0byB0aGUgQ29tbWFuZCBhbmQgUGFja2V0IEVuZ2luZSAoQ1BFKS4gQXMKKy8vIHBhcnQgb2YgUkYgQ29yZSBpbml0aWFsaXphdGlvbiwgc2V0IHRoaXMgYml0IHRvZ2V0aGVyIHdpdGggQ1BFUkFNIGJpdCB0bworLy8gZW5hYmxlIENQRSB0byBib290LgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0NQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fQ1BFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9DUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX0NQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJGQworLy8KKy8vIEVuYWJsZSBlc3NlbnRpYWwgY2xvY2tzIGZvciB0aGUgUkYgQ29yZSBpbnRlcmZhY2UuIFRoaXMgaW5jbHVkZXMgdGhlCisvLyBpbnRlcmNvbm5lY3QsIHRoZSByYWRpbyBkb29yYmVsbCBEQkVMTCBjb21tYW5kIGludGVyZmFjZSwgdGhlIHBvd2VyCisvLyBtYW5hZ2VtZW50IChQV1IpIGNsb2NrIGNvbnRyb2wgbW9kdWxlLCBhbmQgYnVzIGNsb2NrIChzY2xrKSBmb3IgdGhlIENQRS4gVG8KKy8vIHJlbW92ZSBwb3NzaWJpbGl0eSBvZiBsb2NraW5nIHlvdXJzZWxmIG91dCBmcm9tIHRoZSBSRiBDb3JlLCB0aGlzIGJpdCBjYW4KKy8vIG5vdCBiZSBjbGVhcmVkLiBJZiB5b3UgbmVlZCB0byBkaXNhYmxlIGFsbCBjbG9ja3MgdG8gdGhlIFJGIENvcmUsIHNlZSB0aGUKKy8vIFBSQ006UkZDQ0xLRy5DTEtfRU4gcmVnaXN0ZXIuCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUkZDX1BXUl9QV01DTEtFTl9SRkNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRkNfUFdSX1BXTUNMS0VOX1JGQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFJGQ19QV1JfUFdNQ0xLRU5fUkZDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19SRkNfUFdSX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19yYXQuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3JmY19yYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmVkZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfcmZjX3JhdC5oCkBAIC0wLDAgKzEsMTkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfcmZjX3JhdF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19SRkNfUkFUX0hfXworI2RlZmluZSBfX0hXX1JGQ19SQVRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gUkZDX1JBVCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBSYWRpbyBUaW1lciBDb3VudGVyIFZhbHVlCisjZGVmaW5lIFJGQ19SQVRfT19SQVRDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gVGltZXIgQ2hhbm5lbCAwIENhcHR1cmUvQ29tcGFyZSBSZWdpc3RlcgorI2RlZmluZSBSRkNfUkFUX09fUkFUQ0gwVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKy8vIFRpbWVyIENoYW5uZWwgMSBDYXB0dXJlL0NvbXBhcmUgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX1JBVF9PX1JBVENIMVZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAorCisvLyBUaW1lciBDaGFubmVsIDIgQ2FwdHVyZS9Db21wYXJlIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19SQVRfT19SQVRDSDJWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKKworLy8gVGltZXIgQ2hhbm5lbCAzIENhcHR1cmUvQ29tcGFyZSBSZWdpc3RlcgorI2RlZmluZSBSRkNfUkFUX09fUkFUQ0gzVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhDCisKKy8vIFRpbWVyIENoYW5uZWwgNCBDYXB0dXJlL0NvbXBhcmUgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX1JBVF9PX1JBVENINFZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAorCisvLyBUaW1lciBDaGFubmVsIDUgQ2FwdHVyZS9Db21wYXJlIFJlZ2lzdGVyCisjZGVmaW5lIFJGQ19SQVRfT19SQVRDSDVWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTQKKworLy8gVGltZXIgQ2hhbm5lbCA2IENhcHR1cmUvQ29tcGFyZSBSZWdpc3RlcgorI2RlZmluZSBSRkNfUkFUX09fUkFUQ0g2VkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk4CisKKy8vIFRpbWVyIENoYW5uZWwgNyBDYXB0dXJlL0NvbXBhcmUgUmVnaXN0ZXIKKyNkZWZpbmUgUkZDX1JBVF9PX1JBVENIN1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDTlQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDTlQKKy8vCisvLyBDb3VudGVyIHZhbHVlLiBUaGlzIGlzIG5vdCB3cml0YWJsZSB3aGlsZSByYWRpbyB0aW1lciBjb3VudGVyIGlzIGVuYWJsZWQuCisjZGVmaW5lIFJGQ19SQVRfUkFUQ05UX0NOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX1JBVF9SQVRDTlRfQ05UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfUkFUX1JBVENOVF9DTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX1JBVF9PX1JBVENIMFZBTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTAorLy8KKy8vIENhcHR1cmUvY29tcGFyZSB2YWx1ZS4gVGhlIHN5c3RlbSBDUFUgY2FuIHNhZmVseSByZWFkIHRoaXMgcmVnaXN0ZXIsIGJ1dCBpdAorLy8gaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBDUEUgQVBJIGNvbW1hbmRzIHRvIGNvbmZpZ3VyZSBpdCBmb3IgY29tcGFyZSBtb2RlLgorI2RlZmluZSBSRkNfUkFUX1JBVENIMFZBTF9WQUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gwVkFMX1ZBTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDBWQUxfVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDSDFWQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUwKKy8vCisvLyBDYXB0dXJlL2NvbXBhcmUgdmFsdWUuIFRoZSBzeXN0ZW0gQ1BVIGNhbiBzYWZlbHkgcmVhZCB0aGlzIHJlZ2lzdGVyLCBidXQgaXQKKy8vIGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgQ1BFIEFQSSBjb21tYW5kcyB0byBjb25maWd1cmUgaXQgZm9yIGNvbXBhcmUgbW9kZS4KKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDFWQUxfVkFMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfUkFUX1JBVENIMVZBTF9WQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gxVkFMX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfUkFUX09fUkFUQ0gyVkFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMCisvLworLy8gQ2FwdHVyZS9jb21wYXJlIHZhbHVlLiBUaGUgc3lzdGVtIENQVSBjYW4gc2FmZWx5IHJlYWQgdGhpcyByZWdpc3RlciwgYnV0IGl0CisvLyBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIENQRSBBUEkgY29tbWFuZHMgdG8gY29uZmlndXJlIGl0IGZvciBjb21wYXJlIG1vZGUuCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gyVkFMX1ZBTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDJWQUxfVkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfUkFUX1JBVENIMlZBTF9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX1JBVF9PX1JBVENIM1ZBTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTAorLy8KKy8vIENhcHR1cmUvY29tcGFyZSB2YWx1ZS4gVGhlIHN5c3RlbSBDUFUgY2FuIHNhZmVseSByZWFkIHRoaXMgcmVnaXN0ZXIsIGJ1dCBpdAorLy8gaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBDUEUgQVBJIGNvbW1hbmRzIHRvIGNvbmZpZ3VyZSBpdCBmb3IgY29tcGFyZSBtb2RlLgorI2RlZmluZSBSRkNfUkFUX1JBVENIM1ZBTF9WQUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0gzVkFMX1ZBTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDNWQUxfVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDSDRWQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUwKKy8vCisvLyBDYXB0dXJlL2NvbXBhcmUgdmFsdWUuIFRoZSBzeXN0ZW0gQ1BVIGNhbiBzYWZlbHkgcmVhZCB0aGlzIHJlZ2lzdGVyLCBidXQgaXQKKy8vIGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgQ1BFIEFQSSBjb21tYW5kcyB0byBjb25maWd1cmUgaXQgZm9yIGNvbXBhcmUgbW9kZS4KKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDRWQUxfVkFMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfUkFUX1JBVENINFZBTF9WQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g0VkFMX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBSRkNfUkFUX09fUkFUQ0g1VkFMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gVkFMCisvLworLy8gQ2FwdHVyZS9jb21wYXJlIHZhbHVlLiBUaGUgc3lzdGVtIENQVSBjYW4gc2FmZWx5IHJlYWQgdGhpcyByZWdpc3RlciwgYnV0IGl0CisvLyBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIENQRSBBUEkgY29tbWFuZHMgdG8gY29uZmlndXJlIGl0IGZvciBjb21wYXJlIG1vZGUuCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g1VkFMX1ZBTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDVWQUxfVkFMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRkNfUkFUX1JBVENINVZBTF9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogUkZDX1JBVF9PX1JBVENINlZBTAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTAorLy8KKy8vIENhcHR1cmUvY29tcGFyZSB2YWx1ZS4gVGhlIHN5c3RlbSBDUFUgY2FuIHNhZmVseSByZWFkIHRoaXMgcmVnaXN0ZXIsIGJ1dCBpdAorLy8gaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBDUEUgQVBJIGNvbW1hbmRzIHRvIGNvbmZpZ3VyZSBpdCBmb3IgY29tcGFyZSBtb2RlLgorI2RlZmluZSBSRkNfUkFUX1JBVENINlZBTF9WQUxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g2VkFMX1ZBTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDZWQUxfVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFJGQ19SQVRfT19SQVRDSDdWQUwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUwKKy8vCisvLyBDYXB0dXJlL2NvbXBhcmUgdmFsdWUuIFRoZSBzeXN0ZW0gQ1BVIGNhbiBzYWZlbHkgcmVhZCB0aGlzIHJlZ2lzdGVyLCBidXQgaXQKKy8vIGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgQ1BFIEFQSSBjb21tYW5kcyB0byBjb25maWd1cmUgaXQgZm9yIGNvbXBhcmUgbW9kZS4KKyNkZWZpbmUgUkZDX1JBVF9SQVRDSDdWQUxfVkFMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSRkNfUkFUX1JBVENIN1ZBTF9WQUxfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJGQ19SQVRfUkFUQ0g3VkFMX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19SRkNfUkFUX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3NtcGguaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3NtcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDAyMmYzCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfc21waC5oCkBAIC0wLDAgKzEsMTQ1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3NtcGhfaAorKiAgUmV2aXNlZDogICAgICAgIDIwMTYtMDMtMTQgMDk6MjA6NTkgKzAxMDAgKE1vbiwgMTQgTWFyIDIwMTYpCisqICBSZXZpc2lvbjogICAgICAgNDU5MjQKKyoKKyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfU01QSF9IX18KKyNkZWZpbmUgX19IV19TTVBIX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFNNUEggY29tcG9uZW50CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTUNVIFNFTUFQSE9SRSAwCisjZGVmaW5lIFNNUEhfT19TTVBIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gTUNVIFNFTUFQSE9SRSAxCisjZGVmaW5lIFNNUEhfT19TTVBIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gTUNVIFNFTUFQSE9SRSAyCisjZGVmaW5lIFNNUEhfT19TTVBIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gTUNVIFNFTUFQSE9SRSAzCisjZGVmaW5lIFNNUEhfT19TTVBIMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gTUNVIFNFTUFQSE9SRSA0CisjZGVmaW5lIFNNUEhfT19TTVBINCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gTUNVIFNFTUFQSE9SRSA1CisjZGVmaW5lIFNNUEhfT19TTVBINSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gTUNVIFNFTUFQSE9SRSA2CisjZGVmaW5lIFNNUEhfT19TTVBINiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gTUNVIFNFTUFQSE9SRSA3CisjZGVmaW5lIFNNUEhfT19TTVBINyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gTUNVIFNFTUFQSE9SRSA4CisjZGVmaW5lIFNNUEhfT19TTVBIOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKworLy8gTUNVIFNFTUFQSE9SRSA5CisjZGVmaW5lIFNNUEhfT19TTVBIOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gTUNVIFNFTUFQSE9SRSAxMAorI2RlZmluZSBTTVBIX09fU01QSDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisKKy8vIE1DVSBTRU1BUEhPUkUgMTEKKyNkZWZpbmUgU01QSF9PX1NNUEgxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBNQ1UgU0VNQVBIT1JFIDEyCisjZGVmaW5lIFNNUEhfT19TTVBIMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gTUNVIFNFTUFQSE9SRSAxMworI2RlZmluZSBTTVBIX09fU01QSDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisKKy8vIE1DVSBTRU1BUEhPUkUgMTQKKyNkZWZpbmUgU01QSF9PX1NNUEgxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBNQ1UgU0VNQVBIT1JFIDE1CisjZGVmaW5lIFNNUEhfT19TTVBIMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM0MKKworLy8gTUNVIFNFTUFQSE9SRSAxNgorI2RlZmluZSBTTVBIX09fU01QSDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIE1DVSBTRU1BUEhPUkUgMTcKKyNkZWZpbmUgU01QSF9PX1NNUEgxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorCisvLyBNQ1UgU0VNQVBIT1JFIDE4CisjZGVmaW5lIFNNUEhfT19TTVBIMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8gTUNVIFNFTUFQSE9SRSAxOQorI2RlZmluZSBTTVBIX09fU01QSDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDCisKKy8vIE1DVSBTRU1BUEhPUkUgMjAKKyNkZWZpbmUgU01QSF9PX1NNUEgyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorCisvLyBNQ1UgU0VNQVBIT1JFIDIxCisjZGVmaW5lIFNNUEhfT19TTVBIMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKKworLy8gTUNVIFNFTUFQSE9SRSAyMgorI2RlZmluZSBTTVBIX09fU01QSDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4CisKKy8vIE1DVSBTRU1BUEhPUkUgMjMKKyNkZWZpbmUgU01QSF9PX1NNUEgyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1QworCisvLyBNQ1UgU0VNQVBIT1JFIDI0CisjZGVmaW5lIFNNUEhfT19TTVBIMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKworLy8gTUNVIFNFTUFQSE9SRSAyNQorI2RlZmluZSBTTVBIX09fU01QSDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0CisKKy8vIE1DVSBTRU1BUEhPUkUgMjYKKyNkZWZpbmUgU01QSF9PX1NNUEgyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorCisvLyBNQ1UgU0VNQVBIT1JFIDI3CisjZGVmaW5lIFNNUEhfT19TTVBIMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNkMKKworLy8gTUNVIFNFTUFQSE9SRSAyOAorI2RlZmluZSBTTVBIX09fU01QSDI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCisKKy8vIE1DVSBTRU1BUEhPUkUgMjkKKyNkZWZpbmUgU01QSF9PX1NNUEgyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAorCisvLyBNQ1UgU0VNQVBIT1JFIDMwCisjZGVmaW5lIFNNUEhfT19TTVBIMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKworLy8gTUNVIFNFTUFQSE9SRSAzMQorI2RlZmluZSBTTVBIX09fU01QSDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdDCisKKy8vIE1DVSBTRU1BUEhPUkUgMCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisKKy8vIE1DVSBTRU1BUEhPUkUgMSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODA0CisKKy8vIE1DVSBTRU1BUEhPUkUgMiBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODA4CisKKy8vIE1DVSBTRU1BUEhPUkUgMyBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODBDCisKKy8vIE1DVSBTRU1BUEhPUkUgNCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODEwCisKKy8vIE1DVSBTRU1BUEhPUkUgNSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODE0CisKKy8vIE1DVSBTRU1BUEhPUkUgNiBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODE4CisKKy8vIE1DVSBTRU1BUEhPUkUgNyBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODFDCisKKy8vIE1DVSBTRU1BUEhPUkUgOCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODIwCisKKy8vIE1DVSBTRU1BUEhPUkUgOSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODI0CisKKy8vIE1DVSBTRU1BUEhPUkUgMTAgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgyOAorCisvLyBNQ1UgU0VNQVBIT1JFIDExIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MkMKKworLy8gTUNVIFNFTUFQSE9SRSAxMiBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODMwCisKKy8vIE1DVSBTRU1BUEhPUkUgMTMgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgzNAorCisvLyBNQ1UgU0VNQVBIT1JFIDE0IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MzgKKworLy8gTUNVIFNFTUFQSE9SRSAxNSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODNDCisKKy8vIE1DVSBTRU1BUEhPUkUgMTYgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg0MAorCisvLyBNQ1UgU0VNQVBIT1JFIDE3IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NDQKKworLy8gTUNVIFNFTUFQSE9SRSAxOCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODQ4CisKKy8vIE1DVSBTRU1BUEhPUkUgMTkgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg0QworCisvLyBNQ1UgU0VNQVBIT1JFIDIwIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NTAKKworLy8gTUNVIFNFTUFQSE9SRSAyMSBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODU0CisKKy8vIE1DVSBTRU1BUEhPUkUgMjIgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg1OAorCisvLyBNQ1UgU0VNQVBIT1JFIDIzIEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NUMKKworLy8gTUNVIFNFTUFQSE9SRSAyNCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODYwCisKKy8vIE1DVSBTRU1BUEhPUkUgMjUgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg2NAorCisvLyBNQ1UgU0VNQVBIT1JFIDI2IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NjgKKworLy8gTUNVIFNFTUFQSE9SRSAyNyBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODZDCisKKy8vIE1DVSBTRU1BUEhPUkUgMjggQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUsyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg3MAorCisvLyBNQ1UgU0VNQVBIT1JFIDI5IEFMSUFTCisjZGVmaW5lIFNNUEhfT19QRUVLMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4NzQKKworLy8gTUNVIFNFTUFQSE9SRSAzMCBBTElBUworI2RlZmluZSBTTVBIX09fUEVFSzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODc4CisKKy8vIE1DVSBTRU1BUEhPUkUgMzEgQUxJQVMKKyNkZWZpbmUgU01QSF9PX1BFRUszMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg3QworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgwX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDBfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgwX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gUmVhZGluZyB0aGUgcmVnaXN0ZXIgY2F1c2VzIGl0IHRvIGNoYW5nZSB2YWx1ZSB0byAwLiBSZWxlYXNpbmcgdGhlIHNlbWFwaG9yZQorLy8gaXMgZG9uZSBieSB3cml0aW5nIDEuCisjZGVmaW5lIFNNUEhfU01QSDFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1NNUEgxX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIMl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDJfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIMl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgzX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDNfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIM19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgzX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEg0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gUmVhZGluZyB0aGUgcmVnaXN0ZXIgY2F1c2VzIGl0IHRvIGNoYW5nZSB2YWx1ZSB0byAwLiBSZWxlYXNpbmcgdGhlIHNlbWFwaG9yZQorLy8gaXMgZG9uZSBieSB3cml0aW5nIDEuCisjZGVmaW5lIFNNUEhfU01QSDRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBINF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1NNUEg0X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBINV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg1X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDVfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBINV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBINgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEg2X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDZfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBINl9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg2X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEg3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gUmVhZGluZyB0aGUgcmVnaXN0ZXIgY2F1c2VzIGl0IHRvIGNoYW5nZSB2YWx1ZSB0byAwLiBSZWxlYXNpbmcgdGhlIHNlbWFwaG9yZQorLy8gaXMgZG9uZSBieSB3cml0aW5nIDEuCisjZGVmaW5lIFNNUEhfU01QSDdfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIN19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1NNUEg3X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDdfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fU01QSDgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBSZWFkaW5nIHRoZSByZWdpc3RlciBjYXVzZXMgaXQgdG8gY2hhbmdlIHZhbHVlIHRvIDAuIFJlbGVhc2luZyB0aGUgc2VtYXBob3JlCisvLyBpcyBkb25lIGJ5IHdyaXRpbmcgMS4KKyNkZWZpbmUgU01QSF9TTVBIOF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg4X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfU01QSDhfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9TTVBIOF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19TTVBIOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEg5X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDlfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIOV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEg5X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDEwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxMV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDExX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxMV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxMl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDEyX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTJfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxMl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDEzX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxNF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDE0X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTRfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxNF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxNV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDE1X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTVfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxNV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxNl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDE2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxNl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxN19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDE3X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTdfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxN19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxOF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDE4X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMThfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxOF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgxOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgxOV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDE5X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMTlfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgxOV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDIwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyMV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDIxX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyMV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyMl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDIyX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjJfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyMl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDIzX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyNF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDI0X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjRfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyNF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyNQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyNV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDI1X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjVfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyNV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyNl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDI2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyNl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyN19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDI3X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjdfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyN19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyOAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyOF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDI4X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjhfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyOF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgyOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgyOV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDI5X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMjlfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgyOV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgzMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgzMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDMwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMzBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgzMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1NNUEgzMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFJlYWRpbmcgdGhlIHJlZ2lzdGVyIGNhdXNlcyBpdCB0byBjaGFuZ2UgdmFsdWUgdG8gMC4gUmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUKKy8vIGlzIGRvbmUgYnkgd3JpdGluZyAxLgorI2RlZmluZSBTTVBIX1NNUEgzMV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfU01QSDMxX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9TTVBIMzFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1NNUEgzMV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUswCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUswX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzJfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMl9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUszCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUszX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLNF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUs0X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUs1X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzVfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLNV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs1X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUs2CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLNl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLNl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzdfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLN19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUs3X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzdfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUs4X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzhfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLOF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs4X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUs5CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLOV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUs5X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzlfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLOV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxMF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzEwX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTBfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxMF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsxMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzExX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTFfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxMV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzExX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzEyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMTJfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxMl9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzEyX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTJfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxM19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzEzX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTNfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxM19TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsxNAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzE0X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTRfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxNF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE0X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzE1CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMTVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxNV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzE1X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTVfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTYKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxNl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE2X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTZfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxNl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsxNworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzE3X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMTdfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsxN19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE3X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzE4CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMThfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxOF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzE4X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMThfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMTkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsxOV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzE5X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMTlfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsxOV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzIwX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjBfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyMF9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzIwX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzIxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMjFfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyMV9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzIxX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjFfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyMl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzIyX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjJfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyMl9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyMworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzIzX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjNfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyM19TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzIzX1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzI0CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMjRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyNF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzI0X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyNV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI1X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjVfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyNV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyNgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzI2X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjZfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyNl9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI2X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzI3CisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMjdfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyN19TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzI3X1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjdfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMjgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUsyOF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI4X1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMjhfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUsyOF9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU01QSF9PX1BFRUsyOQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFNUQVQKKy8vCisvLyBTdGF0dXMgd2hlbiByZWFkaW5nOgorLy8KKy8vIDA6IFNlbWFwaG9yZSBpcyB0YWtlbgorLy8gMTogU2VtYXBob3JlIGlzIGF2YWlsYWJsZQorLy8KKy8vIFVzZWQgZm9yIHNlbWFwaG9yZSBkZWJ1Z2dpbmcuIEEgcmVhZCBvcGVyYXRpb24gd2lsbCBub3QgY2hhbmdlIHJlZ2lzdGVyCisvLyB2YWx1ZS4gUmVnaXN0ZXIgd3JpdGluZyBpcyBub3QgcG9zc2libGUuCisjZGVmaW5lIFNNUEhfUEVFSzI5X1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMjlfU1RBVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTVBIX1BFRUsyOV9TVEFUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzI5X1NUQVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTTVBIX09fUEVFSzMwCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVAorLy8KKy8vIFN0YXR1cyB3aGVuIHJlYWRpbmc6CisvLworLy8gMDogU2VtYXBob3JlIGlzIHRha2VuCisvLyAxOiBTZW1hcGhvcmUgaXMgYXZhaWxhYmxlCisvLworLy8gVXNlZCBmb3Igc2VtYXBob3JlIGRlYnVnZ2luZy4gQSByZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCBjaGFuZ2UgcmVnaXN0ZXIKKy8vIHZhbHVlLiBSZWdpc3RlciB3cml0aW5nIGlzIG5vdCBwb3NzaWJsZS4KKyNkZWZpbmUgU01QSF9QRUVLMzBfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUszMF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNNUEhfUEVFSzMwX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU01QSF9QRUVLMzBfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNNUEhfT19QRUVLMzEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gU3RhdHVzIHdoZW4gcmVhZGluZzoKKy8vCisvLyAwOiBTZW1hcGhvcmUgaXMgdGFrZW4KKy8vIDE6IFNlbWFwaG9yZSBpcyBhdmFpbGFibGUKKy8vCisvLyBVc2VkIGZvciBzZW1hcGhvcmUgZGVidWdnaW5nLiBBIHJlYWQgb3BlcmF0aW9uIHdpbGwgbm90IGNoYW5nZSByZWdpc3RlcgorLy8gdmFsdWUuIFJlZ2lzdGVyIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLgorI2RlZmluZSBTTVBIX1BFRUszMV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNNUEhfUEVFSzMxX1NUQVRfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU01QSF9QRUVLMzFfU1RBVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTTVBIX1BFRUszMV9TVEFUX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fU01QSF9fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19zc2kuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZGU3MGYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19zc2kuaApAQCAtMCwwICsxLDU0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3NzaV9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19TU0lfSF9fCisjZGVmaW5lIF9fSFdfU1NJX0hfXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzZWN0aW9uIGRlZmluZXMgdGhlIHJlZ2lzdGVyIG9mZnNldHMgb2YKKy8vIFNTSSBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb250cm9sIDAKKyNkZWZpbmUgU1NJX09fQ1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBDb250cm9sIDEKKyNkZWZpbmUgU1NJX09fQ1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBEYXRhCisjZGVmaW5lIFNTSV9PX0RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gU3RhdHVzCisjZGVmaW5lIFNTSV9PX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKworLy8gQ2xvY2sgUHJlc2NhbGUKKyNkZWZpbmUgU1NJX09fQ1BTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorCisvLyBJbnRlcnJ1cHQgTWFzayBTZXQgYW5kIENsZWFyCisjZGVmaW5lIFNTSV9PX0lNU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKworLy8gUmF3IEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgU1NJX09fUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBNYXNrZWQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBTU0lfT19NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIEludGVycnVwdCBDbGVhcgorI2RlZmluZSBTU0lfT19JQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIERNQSBDb250cm9sCisjZGVmaW5lIFNTSV9PX0RNQUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTU0lfT19DUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTo4XSBTQ1IKKy8vCisvLyBTZXJpYWwgY2xvY2sgcmF0ZToKKy8vIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYml0IHJhdGUgb2YgdGhlIFNTSS4gVGhlCisvLyBiaXQgcmF0ZSBpcworLy8gKFNTSSdzIGNsb2NrIGZyZXF1ZW5jeSkvKChTQ1IrMSkqQ1BTUi5DUFNEVlNSKS4KKy8vIFNDUiBpcyBhIHZhbHVlIGZyb20gMC0yNTUuCisjZGVmaW5lIFNTSV9DUjBfU0NSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1NJX0NSMF9TQ1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBTU0lfQ1IwX1NDUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIFNQSAorLy8KKy8vIENMS09VVCBwaGFzZSAoTW90b3JvbGEgU1BJIGZyYW1lIGZvcm1hdCBvbmx5KQorLy8gVGhpcyBiaXQgc2VsZWN0cyB0aGUgY2xvY2sgZWRnZSB0aGF0IGNhcHR1cmVzIGRhdGEgYW5kIGVuYWJsZXMgaXQgdG8gY2hhbmdlCisvLyBzdGF0ZS4gSXQKKy8vIGhhcyB0aGUgbW9zdCBpbXBhY3Qgb24gdGhlIGZpcnN0IGJpdCB0cmFuc21pdHRlZCBieSBlaXRoZXIgcGVybWl0dGluZyBvciBub3QKKy8vIHBlcm1pdHRpbmcgYSBjbG9jayB0cmFuc2l0aW9uIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBjYXB0dXJlIGVkZ2UuCisvLyBFTlVNczoKKy8vIDJORF9DTEtfRURHRSAgICAgICAgICAgICBEYXRhIGlzIGNhcHR1cmVkIG9uIHRoZSBzZWNvbmQgY2xvY2sgZWRnZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uCisvLyAxU1RfQ0xLX0VER0UgICAgICAgICAgICAgRGF0YSBpcyBjYXB0dXJlZCBvbiB0aGUgZmlyc3QgY2xvY2sgZWRnZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uCisjZGVmaW5lIFNTSV9DUjBfU1BIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgU1NJX0NSMF9TUEhfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBTU0lfQ1IwX1NQSF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFNTSV9DUjBfU1BIX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU1NJX0NSMF9TUEhfMk5EX0NMS19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBTU0lfQ1IwX1NQSF8xU1RfQ0xLX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzZdIFNQTworLy8KKy8vIENMS09VVCBwb2xhcml0eSAoTW90b3JvbGEgU1BJIGZyYW1lIGZvcm1hdCBvbmx5KQorLy8gRU5VTXM6CisvLyBISUdIICAgICAgICAgICAgICAgICAgICAgU1NJIHByb2R1Y2VzIGEgc3RlYWR5IHN0YXRlIEhJR0ggdmFsdWUgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xLT1VUIHBpbiB3aGVuIGRhdGEgaXMgbm90IGJlaW5nIHRyYW5zZmVycmVkLgorLy8gTE9XICAgICAgICAgICAgICAgICAgICAgIFNTSSBwcm9kdWNlcyBhIHN0ZWFkeSBzdGF0ZSBMT1cgdmFsdWUgb24gdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xLT1VUIHBpbiB3aGVuIGRhdGEgaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVpbmcgdHJhbnNmZXJyZWQuCisjZGVmaW5lIFNTSV9DUjBfU1BPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgU1NJX0NSMF9TUE9fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBTU0lfQ1IwX1NQT19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFNTSV9DUjBfU1BPX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgU1NJX0NSMF9TUE9fSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBTU0lfQ1IwX1NQT19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgIFs1OjRdIEZSRgorLy8KKy8vIEZyYW1lIGZvcm1hdC4KKy8vIFRoZSBzdXBwb3J0ZWQgZnJhbWUgZm9ybWF0cyBhcmUgTW90b3JvbGEgU1BJLCBUSSBzeW5jaHJvbm91cyBzZXJpYWwgYW5kCisvLyBOYXRpb25hbCBNaWNyb3dpcmUuCisvLyBWYWx1ZSAwJ2IxMSBpcyByZXNlcnZlZCBhbmQgc2hhbGwgbm90IGJlIHVzZWQuCisvLyBFTlVNczoKKy8vIE5BVElPTkFMX01JQ1JPV0lSRSAgICAgICBOYXRpb25hbCBNaWNyb3dpcmUgZnJhbWUgZm9ybWF0CisvLyBUSV9TWU5DX1NFUklBTCAgICAgICAgICAgVEkgc3luY2hyb25vdXMgc2VyaWFsIGZyYW1lIGZvcm1hdAorLy8gTU9UT1JPTEFfU1BJICAgICAgICAgICAgIE1vdG9yb2xhIFNQSSBmcmFtZSBmb3JtYXQKKyNkZWZpbmUgU1NJX0NSMF9GUkZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTU0lfQ1IwX0ZSRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIFNTSV9DUjBfRlJGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU1NJX0NSMF9GUkZfTkFUSU9OQUxfTUlDUk9XSVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBTU0lfQ1IwX0ZSRl9USV9TWU5DX1NFUklBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNTSV9DUjBfRlJGX01PVE9ST0xBX1NQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgWzM6MF0gRFNTCisvLworLy8gRGF0YSBTaXplIFNlbGVjdC4KKy8vIFZhbHVlcyAwYjAwMDAsIDBiMDAwMSwgMGIwMDEwIGFyZSByZXNlcnZlZCBhbmQgc2hhbGwgbm90IGJlIHVzZWQuCisvLyBFTlVNczoKKy8vIDE2X0JJVCAgICAgICAgICAgICAgICAgICAxNi1iaXQgZGF0YQorLy8gMTVfQklUICAgICAgICAgICAgICAgICAgIDE1LWJpdCBkYXRhCisvLyAxNF9CSVQgICAgICAgICAgICAgICAgICAgMTQtYml0IGRhdGEKKy8vIDEzX0JJVCAgICAgICAgICAgICAgICAgICAxMy1iaXQgZGF0YQorLy8gMTJfQklUICAgICAgICAgICAgICAgICAgIDEyLWJpdCBkYXRhCisvLyAxMV9CSVQgICAgICAgICAgICAgICAgICAgMTEtYml0IGRhdGEKKy8vIDEwX0JJVCAgICAgICAgICAgICAgICAgICAxMC1iaXQgZGF0YQorLy8gOV9CSVQgICAgICAgICAgICAgICAgICAgIDktYml0IGRhdGEKKy8vIDhfQklUICAgICAgICAgICAgICAgICAgICA4LWJpdCBkYXRhCisvLyA3X0JJVCAgICAgICAgICAgICAgICAgICAgNy1iaXQgZGF0YQorLy8gNl9CSVQgICAgICAgICAgICAgICAgICAgIDYtYml0IGRhdGEKKy8vIDVfQklUICAgICAgICAgICAgICAgICAgICA1LWJpdCBkYXRhCisvLyA0X0JJVCAgICAgICAgICAgICAgICAgICAgNC1iaXQgZGF0YQorI2RlZmluZSBTU0lfQ1IwX0RTU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNTSV9DUjBfRFNTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgU1NJX0NSMF9EU1NfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTU0lfQ1IwX0RTU18xNl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFNTSV9DUjBfRFNTXzE1X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgU1NJX0NSMF9EU1NfMTRfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAorI2RlZmluZSBTU0lfQ1IwX0RTU18xM19CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIFNTSV9DUjBfRFNTXzEyX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEIKKyNkZWZpbmUgU1NJX0NSMF9EU1NfMTFfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBTU0lfQ1IwX0RTU18xMF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIFNTSV9DUjBfRFNTXzlfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX0NSMF9EU1NfOF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBTU0lfQ1IwX0RTU183X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFNTSV9DUjBfRFNTXzZfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgU1NJX0NSMF9EU1NfNV9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfQ1IwX0RTU180X0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fQ1IxCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gU09ECisvLworLy8gU2xhdmUtbW9kZSBvdXRwdXQgZGlzYWJsZWQKKy8vIFRoaXMgYml0IGlzIHJlbGV2YW50IG9ubHkgaW4gdGhlIHNsYXZlIG1vZGUsIE1TPTEuIEluIG11bHRpcGxlLXNsYXZlCisvLyBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSBmb3IgYW4gU1NJIG1hc3RlciB0byBicm9hZGNhc3QgYSBtZXNzYWdlIHRvIGFsbAorLy8gc2xhdmVzIGluIHRoZSBzeXN0ZW0gd2hpbGUgZW5zdXJpbmcgdGhhdCBvbmx5IG9uZSBzbGF2ZSBkcml2ZXMgZGF0YSBvbnRvIGl0cworLy8gc2VyaWFsIG91dHB1dCBsaW5lLiBJbiBzdWNoIHN5c3RlbXMgdGhlIFJYRCBsaW5lcyBmcm9tIG11bHRpcGxlIHNsYXZlcyBjb3VsZAorLy8gYmUgdGllZCB0b2dldGhlci4gVG8gb3BlcmF0ZSBpbiBzdWNoIHN5c3RlbXMsIHRoaXMgYml0ZmllbGQgY2FuIGJlIHNldCBpZgorLy8gdGhlIFNTSSBzbGF2ZSBpcyBub3Qgc3VwcG9zZWQgdG8gZHJpdmUgdGhlIFRYRCBsaW5lOgorLy8KKy8vIDA6IFNTSSBjYW4gZHJpdmUgdGhlIFRYRCBvdXRwdXQgaW4gc2xhdmUgbW9kZS4KKy8vIDE6IFNTSSBjYW5ub3QgZHJpdmUgdGhlIFRYRCBvdXRwdXQgaW4gc2xhdmUgbW9kZS4KKyNkZWZpbmUgU1NJX0NSMV9TT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTU0lfQ1IxX1NPRF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFNTSV9DUjFfU09EX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX0NSMV9TT0RfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBNUworLy8KKy8vIE1hc3RlciBvciBzbGF2ZSBtb2RlIHNlbGVjdC4gVGhpcyBiaXQgY2FuIGJlIG1vZGlmaWVkIG9ubHkgd2hlbiBTU0kgaXMKKy8vIGRpc2FibGVkLCBTU0U9MC4KKy8vIEVOVU1zOgorLy8gU0xBVkUgICAgICAgICAgICAgICAgICAgIERldmljZSBjb25maWd1cmVkIGFzIHNsYXZlCisvLyBNQVNURVIgICAgICAgICAgICAgICAgICAgRGV2aWNlIGNvbmZpZ3VyZWQgYXMgbWFzdGVyCisjZGVmaW5lIFNTSV9DUjFfTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX0NSMV9NU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTU0lfQ1IxX01TX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9DUjFfTVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NJX0NSMV9NU19TTEFWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfQ1IxX01TX01BU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIFNTRQorLy8KKy8vIFN5bmNocm9ub3VzIHNlcmlhbCBpbnRlcmZhY2UgZW5hYmxlLgorLy8gRU5VTXM6CisvLyBTU0lfRU5BQkxFRCAgICAgICAgICAgICAgT3BlcmF0aW9uIGVuYWJsZWQKKy8vIFNTSV9ESVNBQkxFRCAgICAgICAgICAgICBPcGVyYXRpb24gZGlzYWJsZWQKKyNkZWZpbmUgU1NJX0NSMV9TU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfQ1IxX1NTRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNTSV9DUjFfU1NFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX0NSMV9TU0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTU0lfQ1IxX1NTRV9TU0lfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9DUjFfU1NFX1NTSV9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gTEJNCisvLworLy8gTG9vcCBiYWNrIG1vZGU6CisvLworLy8gMDogTm9ybWFsIHNlcmlhbCBwb3J0IG9wZXJhdGlvbiBlbmFibGVkLgorLy8gMTogT3V0cHV0IG9mIHRyYW5zbWl0IHNlcmlhbCBzaGlmdGVyIGlzIGNvbm5lY3RlZCB0byBpbnB1dCBvZiByZWNlaXZlIHNlcmlhbAorLy8gc2hpZnRlciBpbnRlcm5hbGx5LgorI2RlZmluZSBTU0lfQ1IxX0xCTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9DUjFfTEJNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX0NSMV9MQk1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfQ1IxX0xCTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fRFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBEQVRBCisvLworLy8gVHJhbnNtaXQvcmVjZWl2ZSBkYXRhCisvLyBUaGUgdmFsdWVzIHJlYWQgZnJvbSB0aGlzIGZpZWxkIG9yIHdyaXR0ZW4gdG8gdGhpcyBmaWVsZCBtdXN0IGJlCisvLyByaWdodC1qdXN0aWZpZWQgd2hlbiBTU0kgaXMgcHJvZ3JhbW1lZCBmb3IgYSBkYXRhIHNpemUgdGhhdCBpcyBsZXNzIHRoYW4gMTYKKy8vIGJpdHMgKENSMC5EU1MgIT0gMGIxMTExKS4gVW51c2VkIGJpdHMgYXQgdGhlIHRvcCBhcmUgaWdub3JlZCBieSB0cmFuc21pdAorLy8gbG9naWMuIFRoZSByZWNlaXZlIGxvZ2ljIGF1dG9tYXRpY2FsbHkgcmlnaHQtanVzdGlmaWVzLgorI2RlZmluZSBTU0lfRFJfREFUQV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFNTSV9EUl9EQVRBX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgU1NJX0RSX0RBVEFfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFNTSV9PX1NSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbNF0gQlNZCisvLworLy8gU2VyaWFsIGludGVyZmFjZSBidXN5OgorLy8KKy8vIDA6IFNTSSBpcyBpZGxlCisvLyAxOiBTU0kgaXMgY3VycmVudGx5IHRyYW5zbWl0dGluZyBhbmQvb3IgcmVjZWl2aW5nIGEgZnJhbWUgb3IgdGhlIHRyYW5zbWl0CisvLyBGSUZPIGlzIG5vdCBlbXB0eS4KKyNkZWZpbmUgU1NJX1NSX0JTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBTU0lfU1JfQlNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNTSV9TUl9CU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1NJX1NSX0JTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBSRkYKKy8vCisvLyBSZWNlaXZlIEZJRk8gZnVsbDoKKy8vCisvLyAwOiBSZWNlaXZlIEZJRk8gaXMgbm90IGZ1bGwuCisvLyAxOiBSZWNlaXZlIEZJRk8gaXMgZnVsbC4KKyNkZWZpbmUgU1NJX1NSX1JGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTU0lfU1JfUkZGX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFNTSV9TUl9SRkZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX1NSX1JGRl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBSTkUKKy8vCisvLyBSZWNlaXZlIEZJRk8gbm90IGVtcHR5CisvLworLy8gMDogUmVjZWl2ZSBGSUZPIGlzIGVtcHR5LgorLy8gMTogUmVjZWl2ZSBGSUZPIGlzIG5vdCBlbXB0eS4KKyNkZWZpbmUgU1NJX1NSX1JORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfU1JfUk5FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNTSV9TUl9STkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX1NSX1JORV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUTkYKKy8vCisvLyBUcmFuc21pdCBGSUZPIG5vdCBmdWxsOgorLy8KKy8vIDA6IFRyYW5zbWl0IEZJRk8gaXMgZnVsbC4KKy8vIDE6IFRyYW5zbWl0IEZJRk8gaXMgbm90IGZ1bGwuCisjZGVmaW5lIFNTSV9TUl9UTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX1NSX1RORl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTU0lfU1JfVE5GX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9TUl9UTkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gVEZFCisvLworLy8gVHJhbnNtaXQgRklGTyBlbXB0eToKKy8vCisvLyAwOiBUcmFuc21pdCBGSUZPIGlzIG5vdCBlbXB0eS4KKy8vIDE6IFRyYW5zbWl0IEZJRk8gaXMgZW1wdHkuCisjZGVmaW5lIFNTSV9TUl9URkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX1NSX1RGRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTU0lfU1JfVEZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9TUl9URkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTU0lfT19DUFNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzc6MF0gQ1BTRFZTUgorLy8KKy8vIENsb2NrIHByZXNjYWxlIGRpdmlzb3I6CisvLyBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgZGl2aXNpb24gZmFjdG9yIGJ5IHdoaWNoIHRoZSBpbnB1dCBzeXN0ZW0gY2xvY2sgdG8KKy8vIFNTSSBtdXN0IGJlIGludGVybmFsbHkgZGl2aWRlZCBiZWZvcmUgZnVydGhlciB1c2UuCisvLyBUaGUgdmFsdWUgcHJvZ3JhbW1lZCBpbnRvIHRoaXMgZmllbGQgbXVzdCBiZSBhbiBldmVuIG5vbi16ZXJvIG51bWJlcgorLy8gKDItMjU0KS4gVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgcHJvZ3JhbW1lZCBudW1iZXIgaXMgaGFyZC1jb2RlZCB0bworLy8gemVyby4gSWYgYW4gb2RkIG51bWJlciBpcyB3cml0dGVuIHRvIHRoaXMgcmVnaXN0ZXIsIGRhdGEgcmVhZCBiYWNrIGZyb20KKy8vIHRoaXMgcmVnaXN0ZXIgaGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgYXMgemVyby4KKyNkZWZpbmUgU1NJX0NQU1JfQ1BTRFZTUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBTU0lfQ1BTUl9DUFNEVlNSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIFNTSV9DUFNSX0NQU0RWU1JfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTU0lfT19JTVNDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gVFhJTQorLy8KKy8vIFRyYW5zbWl0IEZJRk8gaW50ZXJydXB0IG1hc2s6CisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrIGZvciB0cmFuc21pdCBGSUZPIGludGVycnVwdC4gT24gYSB3cml0ZSBvZgorLy8gMSwgdGhlIG1hc2sgZm9yIHRyYW5zbWl0IEZJRk8gaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0CisvLyBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbiBNSVMuVFhNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2gKKy8vIG1lYW5zIE1JUy5UWE1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFNTSV9JTVNDX1RYSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX0lNU0NfVFhJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTU0lfSU1TQ19UWElNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9JTVNDX1RYSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gUlhJTQorLy8KKy8vIFJlY2VpdmUgRklGTyBpbnRlcnJ1cHQgbWFzazoKKy8vIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YgMSwKKy8vIHRoZSBtYXNrIGZvciByZWNlaXZlIEZJRk8gaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlCisvLyB3aWxsIGJlIHJlZmxlY3RlZCBpbiBNSVMuUlhNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2ggbWVhbnMKKy8vIE1JUy5SWE1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFNTSV9JTVNDX1JYSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX0lNU0NfUlhJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTU0lfSU1TQ19SWElNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9JTVNDX1JYSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworLy8gRmllbGQ6ICAgICBbMV0gUlRJTQorLy8KKy8vIFJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQgbWFzazoKKy8vIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIHJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YKKy8vIDEsIHRoZSBtYXNrIGZvciByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0CisvLyBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbiBNSVMuUlRNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2gKKy8vIG1lYW5zIE1JUy5SVE1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFNTSV9JTVNDX1JUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX0lNU0NfUlRJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTU0lfSU1TQ19SVElNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9JTVNDX1JUSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUk9SSU0KKy8vCisvLyBSZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0IG1hc2s6CisvLyBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrIGZvciByZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mCisvLyAxLCB0aGUgbWFzayBmb3IgcmVjZWl2ZSBvdmVycnVuIGludGVycnVwdCBpcyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdAorLy8gc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4gTUlTLlJPUk1JUy4gQSB3cml0ZSBvZiAwIGNsZWFycyB0aGUgbWFzayB3aGljaAorLy8gbWVhbnMgTUlTLlJPUk1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFNTSV9JTVNDX1JPUklNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX0lNU0NfUk9SSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTU0lfSU1TQ19ST1JJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9JTVNDX1JPUklNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTU0lfT19SSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBUWFJJUworLy8KKy8vIFJhdyB0cmFuc21pdCBGSUZPIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGUgdHJhbnNtaXQgaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gdGhlcmUgYXJlIGZvdXIgb3IgZmV3ZXIgdmFsaWQKKy8vIGVudHJpZXMgaW4gdGhlIHRyYW5zbWl0IEZJRk8uIFRoZSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgbm90IHF1YWxpZmllZCB3aXRoCisvLyB0aGUgU1NJIGVuYWJsZSBzaWduYWwuIFRoZXJlZm9yZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB3YXlzIGNhbiBiZSB1c2VkOgorLy8gIC0gZGF0YSBjYW4gYmUgd3JpdHRlbiB0byB0aGUgdHJhbnNtaXQgRklGTyBwcmlvciB0byBlbmFibGluZyB0aGUgU1NJIGFuZAorLy8gdGhlCisvLyBpbnRlcnJ1cHRzLgorLy8gIC0gU1NJIGFuZCBpbnRlcnJ1cHRzIGNhbiBiZSBlbmFibGVkIHNvIHRoYXQgZGF0YSBjYW4gYmUgd3JpdHRlbiB0byB0aGUKKy8vIHRyYW5zbWl0IEZJRk8gYnkgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyNkZWZpbmUgU1NJX1JJU19UWFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTU0lfUklTX1RYUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFNTSV9SSVNfVFhSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU1NJX1JJU19UWFJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBSWFJJUworLy8KKy8vIFJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSBGSUZPIGludGVycnVwdDoKKy8vIFRoZSByZWNlaXZlIGludGVycnVwdCBpcyBhc3NlcnRlZCB3aGVuIHRoZXJlIGFyZSBmb3VyIG9yIG1vcmUgdmFsaWQgZW50cmllcworLy8gaW4gdGhlIHJlY2VpdmUgRklGTy4KKyNkZWZpbmUgU1NJX1JJU19SWFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfUklTX1JYUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNTSV9SSVNfUlhSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1NJX1JJU19SWFJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBSVFJJUworLy8KKy8vIFJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSB0aW1lb3V0IGludGVycnVwdDoKKy8vIFRoZSByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gdGhlIHJlY2VpdmUgRklGTyBpcyBub3QgZW1wdHkKKy8vIGFuZCBTU0kgaGFzIHJlbWFpbmVkIGlkbGUgZm9yIGEgZml4ZWQgMzIgYml0IHBlcmlvZC4gVGhpcyBtZWNoYW5pc20gY2FuIGJlCisvLyB1c2VkIHRvIG5vdGlmeSB0aGUgdXNlciB0aGF0IGRhdGEgaXMgc3RpbGwgcHJlc2VudCBpbiB0aGUgcmVjZWl2ZSBGSUZPIGFuZAorLy8gcmVxdWlyZXMgc2VydmljaW5nLiBUaGlzIGludGVycnVwdCBpcyBkZWFzc2VydGVkIGlmIHRoZSByZWNlaXZlIEZJRk8gYmVjb21lcworLy8gZW1wdHkgYnkgc3Vic2VxdWVudCByZWFkcywgb3IgaWYgbmV3IGRhdGEgaXMgcmVjZWl2ZWQgb24gUlhELgorLy8gSXQgY2FuIGFsc28gYmUgY2xlYXJlZCBieSB3cml0aW5nIHRvIElDUi5SVElDLgorI2RlZmluZSBTU0lfUklTX1JUUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9SSVNfUlRSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1NJX1JJU19SVFJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfUklTX1JUUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJPUlJJUworLy8KKy8vIFJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSBvdmVycnVuIGludGVycnVwdDoKKy8vIFRoZSByZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gdGhlIEZJRk8gaXMgYWxyZWFkeSBmdWxsIGFuZAorLy8gYW4gYWRkaXRpb25hbCBkYXRhIGZyYW1lIGlzIHJlY2VpdmVkLCBjYXVzaW5nIGFuIG92ZXJydW4gb2YgdGhlIEZJRk8uIERhdGEKKy8vIGlzIG92ZXItd3JpdHRlbiBpbiB0aGUKKy8vIHJlY2VpdmUgc2hpZnQgcmVnaXN0ZXIsIGJ1dCBub3QgdGhlIEZJRk8gc28gdGhlIEZJRk8gY29udGVudHMgc3RheSB2YWxpZC4KKy8vIEl0IGNhbiBhbHNvIGJlIGNsZWFyZWQgYnkgd3JpdGluZyB0byBJQ1IuUk9SSUMuCisjZGVmaW5lIFNTSV9SSVNfUk9SUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX1JJU19ST1JSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTU0lfUklTX1JPUlJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9SSVNfUk9SUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBTU0lfT19NSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBUWE1JUworLy8KKy8vIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQ6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQKKy8vIHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5UWFJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5UWElNLgorI2RlZmluZSBTU0lfTUlTX1RYTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNTSV9NSVNfVFhNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgU1NJX01JU19UWE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTU0lfTUlTX1RYTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIFJYTUlTCisvLworLy8gTWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiByZWNlaXZlIEZJRk8gaW50ZXJydXB0OgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQKKy8vIHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5SWFJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5SWElNLgorI2RlZmluZSBTU0lfTUlTX1JYTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNTSV9NSVNfUlhNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NJX01JU19SWE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTU0lfTUlTX1JYTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFJUTUlTCisvLworLy8gTWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0OgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQKKy8vIHdoaWNoIGlzIHRoZSBBTkQgcHJvZHVjdCBvZiByYXcgaW50ZXJydXB0IHN0YXRlIFJJUy5SVFJJUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5SVElNLgorI2RlZmluZSBTU0lfTUlTX1JUTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9NSVNfUlRNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1NJX01JU19SVE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfTUlTX1JUTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJPUk1JUworLy8KKy8vIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgcmVjZWl2ZSBvdmVycnVuIGludGVycnVwdDoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiByZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0CisvLyB3aGljaCBpcyB0aGUgQU5EIHByb2R1Y3Qgb2YgcmF3IGludGVycnVwdCBzdGF0ZSBSSVMuUk9SUklTIGFuZCB0aGUgbWFzaworLy8gc2V0dGluZyBJTVNDLlJPUklNLgorI2RlZmluZSBTU0lfTUlTX1JPUk1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9NSVNfUk9STUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX01JU19ST1JNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfTUlTX1JPUk1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fSUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gUlRJQworLy8KKy8vIENsZWFyIHRoZSByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0OgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSB0aW1lb3V0IGludGVycnVwdCAoUklTLlJUUklTKS4gV3JpdGluZyAwCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBTU0lfSUNSX1JUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNTSV9JQ1JfUlRJQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1NJX0lDUl9SVElDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfSUNSX1JUSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJPUklDCisvLworLy8gQ2xlYXIgdGhlIHJlY2VpdmUgb3ZlcnJ1biBpbnRlcnJ1cHQ6CisvLyBXcml0aW5nIDEgdG8gdGhpcyBmaWVsZCBjbGVhcnMgdGhlIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IChSSVMuUk9SUklTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBTU0lfSUNSX1JPUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9JQ1JfUk9SSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1NJX0lDUl9ST1JJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTU0lfSUNSX1JPUklDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogU1NJX09fRE1BQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBUWERNQUUKKy8vCisvLyBUcmFuc21pdCBETUEgZW5hYmxlLiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgRE1BIGZvciB0aGUgdHJhbnNtaXQgRklGTyBpcworLy8gZW5hYmxlZC4KKyNkZWZpbmUgU1NJX0RNQUNSX1RYRE1BRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU0lfRE1BQ1JfVFhETUFFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNTSV9ETUFDUl9UWERNQUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1NJX0RNQUNSX1RYRE1BRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSWERNQUUKKy8vCisvLyBSZWNlaXZlIERNQSBlbmFibGUuIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCBETUEgZm9yIHRoZSByZWNlaXZlIEZJRk8gaXMKKy8vIGVuYWJsZWQuCisjZGVmaW5lIFNTSV9ETUFDUl9SWERNQUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1NJX0RNQUNSX1JYRE1BRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTU0lfRE1BQ1JfUlhETUFFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTSV9ETUFDUl9SWERNQUVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19TU0lfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfc3lzY3RsLmggYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od19zeXNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTczOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfc3lzY3RsLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3N5c2N0bC5oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNS0wMy0xNiAxNDo0Mzo0NSArMDEwMCAoTW9uLCAxNiBNYXIgMjAxNSkKKyogIFJldmlzaW9uOiAgICAgICA0Mjk4OQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNiwgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoKKyogIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqICAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogIDMpIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE9SR0FOSVpBVElPTiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisqICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisqICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisqICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX1NZU0NUTF9IX18KKyNkZWZpbmUgX19IV19TWVNDVExfSF9fCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGluaXRpYWwgZGVmaW5lcyBmb3IgdGhlIE1DVSBjbG9jaworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgR0VUX01DVV9DTE9DSyAgICAgICAgIDQ4MDAwMDAwCisKKworI2VuZGlmIC8vIF9fSFdfU1lTQ1RMX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdHJuZy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdHJuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOTZjZWYKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od190cm5nLmgKQEAgLTAsMCArMSw2MDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBod190cm5nX2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX1RSTkdfSF9fCisjZGVmaW5lIF9fSFdfVFJOR19IX18KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSByZWdpc3RlciBvZmZzZXRzIG9mCisvLyBUUk5HIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFJhbmRvbSBOdW1iZXIgTG93ZXIgV29yZCBSZWFkb3V0IFZhbHVlCisjZGVmaW5lIFRSTkdfT19PVVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gUmFuZG9tIE51bWJlciBVcHBlciBXb3JkIFJlYWRvdXQgVmFsdWUKKyNkZWZpbmUgVFJOR19PX09VVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIFRSTkdfT19JUlFGTEFHU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gSW50ZXJydXB0IE1hc2sKKyNkZWZpbmUgVFJOR19PX0lSUUZMQUdNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworCisvLyBJbnRlcnJ1cHQgRmxhZyBDbGVhcgorI2RlZmluZSBUUk5HX09fSVJRRkxBR0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIENvbnRyb2wKKyNkZWZpbmUgVFJOR19PX0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBDb25maWd1cmF0aW9uIDAKKyNkZWZpbmUgVFJOR19PX0NGRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorCisvLyBBbGFybSBDb250cm9sCisjZGVmaW5lIFRSTkdfT19BTEFSTUNOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKworLy8gRlJPIEVuYWJsZQorI2RlZmluZSBUUk5HX09fRlJPRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIEZSTyBEZS10dW5lIEJpdAorI2RlZmluZSBUUk5HX09fRlJPREVUVU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIEFsYXJtIEV2ZW50CisjZGVmaW5lIFRSTkdfT19BTEFSTU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gQWxhcm0gU2h1dGRvd24KKyNkZWZpbmUgVFJOR19PX0FMQVJNU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBMRlNSIFJlYWRvdXQgVmFsdWUKKyNkZWZpbmUgVFJOR19PX0xGU1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAorCisvLyBMRlNSIFJlYWRvdXQgVmFsdWUKKyNkZWZpbmUgVFJOR19PX0xGU1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBMRlNSIFJlYWRvdXQgVmFsdWUKKyNkZWZpbmUgVFJOR19PX0xGU1IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorCisvLyBUUk5HIEVuZ2luZSBPcHRpb25zIEluZm9ybWF0aW9uCisjZGVmaW5lIFRSTkdfT19IV09QVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKKworLy8gSFcgVmVyc2lvbiAwCisjZGVmaW5lIFRSTkdfT19IV1ZFUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN0MKKworLy8gSW50ZXJydXB0IFN0YXR1cyBBZnRlciBNYXNraW5nCisjZGVmaW5lIFRSTkdfT19JUlFTVEFUTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGRDgKKworLy8gSFcgVmVyc2lvbiAxCisjZGVmaW5lIFRSTkdfT19IV1ZFUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGRTAKKworLy8gSW50ZXJydXB0IFNldAorI2RlZmluZSBUUk5HX09fSVJRU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxRkVDCisKKy8vIFNXIFJlc2V0IENvbnRyb2wKKyNkZWZpbmUgVFJOR19PX1NXUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMUZGMAorCisvLyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIFRSTkdfT19JUlFTVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFGRjgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fT1VUMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFZBTFVFXzMxXzAKKy8vCisvLyBMU1cgb2YgNjQtIGJpdCByYW5kb20gdmFsdWUuIE5ldyB2YWx1ZSByZWFkeSB3aGVuIElSUUZMQUdTVEFULlJEWSA9IDEuCisjZGVmaW5lIFRSTkdfT1VUMF9WQUxVRV8zMV8wX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVFJOR19PVVQwX1ZBTFVFXzMxXzBfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBUUk5HX09VVDBfVkFMVUVfMzFfMF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX09VVDEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBWQUxVRV82M18zMgorLy8KKy8vIE1TVyBvZiA2NC1iaXQgcmFuZG9tIHZhbHVlLiBOZXcgdmFsdWUgcmVhZHkgd2hlbiBJUlFGTEFHU1RBVC5SRFkgPSAxLgorI2RlZmluZSBUUk5HX09VVDFfVkFMVUVfNjNfMzJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFRSTkdfT1VUMV9WQUxVRV82M18zMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVFJOR19PVVQxX1ZBTFVFXzYzXzMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19JUlFGTEFHU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICBbMzFdIE5FRURfQ0xPQ0sKKy8vCisvLyAxOiBJbmRpY2F0ZXMgdGhhdCB0aGUgVFJORyBpcyBidXN5IGdlbmVyYXRpbmcgZW50cm9weSBvciBpcyBpbiBvbmUgb2YgaXRzCisvLyB0ZXN0IG1vZGVzIC0gY2xvY2tzIG1heSBub3QgYmUgdHVybmVkIG9mZiBhbmQgdGhlIHBvd2VyIHN1cHBseSB2b2x0YWdlIG11c3QKKy8vIGJlIGtlcHQgc3RhYmxlLgorLy8gMDogVFJORyBpcyBpZGxlIGFuZCBjYW4gYmUgc2h1dCBkb3duCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfTkVFRF9DTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9ORUVEX0NMT0NLX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX05FRURfQ0xPQ0tfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfTkVFRF9DTE9DS19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKworLy8gRmllbGQ6ICAgICBbMV0gU0hVVERPV05fT1ZGCisvLworLy8gMTogVGhlIG51bWJlciBvZiBGUk9zIHNodXQgZG93biAoaS5lLiB0aGUgbnVtYmVyIG9mICcxJyBiaXRzIGluIHRoZQorLy8gQUxBUk1TVE9QIHJlZ2lzdGVyKSBoYXMgZXhjZWVkZWQgdGhlIHRocmVzaG9sZCBzZXQgYnkgQUxBUk1DTlQuU0hVVERPV05fVEhSCisvLworLy8gV3JpdGluZyAnMScgdG8gSVJRRkxBR0NMUi5TSFVURE9XTl9PVkYgY2xlYXJzIHRoaXMgYml0IHRvICcwJyBhZ2Fpbi4KKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9TSFVURE9XTl9PVkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX1NIVVRET1dOX09WRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfU0hVVERPV05fT1ZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9TSFVURE9XTl9PVkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRFkKKy8vCisvLyAxOiBEYXRhIGFyZSBhdmFpbGFibGUgaW4gT1VUMCBhbmQgT1VUMS4KKy8vCisvLyBBY2tub3dsZWRnaW5nIHRoaXMgc3RhdGUgYnkgd3JpdGluZyAnMScgdG8gSVJRRkxBR0NMUi5SRFkgY2xlYXJzIHRoaXMgYml0IHRvCisvLyAnMCcuCisvLyBJZiBhIG5ldyBudW1iZXIgaXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gdGhlIGludGVybmFsIHJlZ2lzdGVyIG9mIHRoZSBUUk5HLAorLy8gdGhlIG51bWJlciBpcyBkaXJlY3RseSBjbG9ja2VkIGludG8gdGhlIHJlc3VsdCByZWdpc3Rlci4gSW4gdGhpcyBjYXNlIHRoZQorLy8gc3RhdHVzIGJpdCBpcyBhc3NlcnRlZCBhZ2FpbiwgYWZ0ZXIgb25lIGNsb2NrIGN5Y2xlLgorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfSVJRRkxBR1NUQVRfUkRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJOR19JUlFGTEFHU1RBVF9SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUUZMQUdTVEFUX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0lSUUZMQUdNQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gU0hVVERPV05fT1ZGCisvLworLy8gMTogQWxsb3cgSVJRRkxBR1NUQVQuU0hVVERPV05fT1ZGIHRvIGFjdGl2YXRlIHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGlzCisvLyBtb2R1bGUuCisjZGVmaW5lIFRSTkdfSVJRRkxBR01BU0tfU0hVVERPV05fT1ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19JUlFGTEFHTUFTS19TSFVURE9XTl9PVkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUk5HX0lSUUZMQUdNQVNLX1NIVVRET1dOX09WRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfSVJRRkxBR01BU0tfU0hVVERPV05fT1ZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gUkRZCisvLworLy8gMTogQWxsb3cgSVJRRkxBR1NUQVQuUkRZIHRvIGFjdGl2YXRlIHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGlzIG1vZHVsZS4KKyNkZWZpbmUgVFJOR19JUlFGTEFHTUFTS19SRFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUUZMQUdNQVNLX1JEWV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSTkdfSVJRRkxBR01BU0tfUkRZX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHTUFTS19SRFlfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19JUlFGTEFHQ0xSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gU0hVVERPV05fT1ZGCisvLworLy8gMTogQ2xlYXIgSVJRRkxBR1NUQVQuU0hVVERPV05fT1ZGLgorI2RlZmluZSBUUk5HX0lSUUZMQUdDTFJfU0hVVERPV05fT1ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfSVJRRkxBR0NMUl9TSFVURE9XTl9PVkZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHQ0xSX1NIVVRET1dOX09WRl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBUUk5HX0lSUUZMQUdDTFJfU0hVVERPV05fT1ZGX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIFJEWQorLy8KKy8vIDE6IENsZWFyIElSUUZMQUdTVEFULlJEWS4KKyNkZWZpbmUgVFJOR19JUlFGTEFHQ0xSX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUUZMQUdDTFJfUkRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSTkdfSVJRRkxBR0NMUl9SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVFJOR19JUlFGTEFHQ0xSX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjE2XSBTVEFSVFVQX0NZQ0xFUworLy8KKy8vIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgKGJldHdlZW4gMl44IGFuZCAyXjI0KSB0YWtlbiB0bworLy8gZ2F0aGVyIGVudHJvcHkgZnJvbSB0aGUgRlJPcyBkdXJpbmcgc3RhcnR1cC4gSWYgdGhlIHdyaXR0ZW4gdmFsdWUgb2YgdGhpcworLy8gZmllbGQgaXMgemVybywgdGhlIG51bWJlciBvZiBzYW1wbGVzIGlzIDJeMjQsIG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mCisvLyBzYW1wbGVzIGVxdWFscyB0aGUgd3JpdHRlbiB2YWx1ZSB0aW1lcyAyXjguCisvLworLy8gMHgwMDAwOiAyXjI0IHNhbXBsZXMKKy8vIDB4MDAwMTogMSoyXjggc2FtcGxlcworLy8gMHgwMDAyOiAyKjJeOCBzYW1wbGVzCisvLyAweDAwMDM6IDMqMl44IHNhbXBsZXMKKy8vIC4uLgorLy8gMHg4MDAwOiAzMjc2OCoyXjggc2FtcGxlcworLy8gMHhDMDAwOiA0OTE1MioyXjggc2FtcGxlcworLy8gLi4uCisvLyAweEZGRkY6IDY1NTM1KjJeOCBzYW1wbGVzCisvLworLy8gVGhpcyBmaWVsZCBjYW4gb25seSBiZSBtb2RpZmllZCB3aGlsZSBUUk5HX0VOIGlzIDAuIElmIDEgYW4gdXBkYXRlIHdpbGwgYmUKKy8vIGlnbm9yZWQuCisjZGVmaW5lIFRSTkdfQ1RMX1NUQVJUVVBfQ1lDTEVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVFJOR19DVExfU1RBUlRVUF9DWUNMRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBUUk5HX0NUTF9TVEFSVFVQX0NZQ0xFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgICBbMTBdIFRSTkdfRU4KKy8vCisvLyAwOiBGb3JjZXMgYWxsIFRSTkcgbG9naWMgYmFjayBpbnRvIHRoZSBpZGxlIHN0YXRlIGltbWVkaWF0ZWx5LgorLy8gMTogU3RhcnRzIFRSTkcsIGdhdGhlcmluZyBlbnRyb3B5IGZyb20gdGhlIEZST3MgZm9yIHRoZSBudW1iZXIgb2Ygc2FtcGxlcworLy8gZGV0ZXJtaW5lZCBieSBTVEFSVFVQX0NZQ0xFUy4KKyNkZWZpbmUgVFJOR19DVExfVFJOR19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBUUk5HX0NUTF9UUk5HX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFRSTkdfQ1RMX1RSTkdfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVFJOR19DVExfVFJOR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFsyXSBOT19MRlNSX0ZCCisvLworLy8gMTogUmVtb3ZlIFhOT1IgZmVlZGJhY2sgZnJvbSB0aGUgbWFpbiBMRlNSLCBjb252ZXJ0aW5nIGl0IGludG8gYSBub3JtYWwKKy8vIHNoaWZ0IHJlZ2lzdGVyIGZvciB0aGUgWE9SLWVkIG91dHB1dHMgb2YgdGhlIEZST3MgKHNoaWZ0aW5nIGRhdGEgaW4gb24gdGhlCisvLyBMU0Igc2lkZSkuIEEgJzEnIGFsc28gZm9yY2VzIHRoZSBMRlNSIHRvIHNhbXBsZSBjb250aW51b3VzbHkuCisvLworLy8gVGhpcyBiaXQgY2FuIG9ubHkgYmUgc2V0IHRvICcxJyB3aGVuIFRFU1RfTU9ERSBpcyBhbHNvIHNldCB0byAnMScgYW5kIHNob3VsZAorLy8gbm90IGJlIHVzZWQgZm9yIG90aGVyIHRoYW4gdGVzdCBwdXJwb3NlcworI2RlZmluZSBUUk5HX0NUTF9OT19MRlNSX0ZCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFRSTkdfQ1RMX05PX0xGU1JfRkJfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVFJOR19DVExfTk9fTEZTUl9GQl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBUUk5HX0NUTF9OT19MRlNSX0ZCX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFRFU1RfTU9ERQorLy8KKy8vIDE6IEVuYWJsZXMgYWNjZXNzIHRvIHRoZSBURVNUQ05UIGFuZCBMRlNSMC9MRlNSMS9MRlNSMiByZWdpc3RlcnMgKHRoZSBsYXR0ZXIKKy8vIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYmVmb3JlIGVuYWJsaW5nIGFjY2VzcykgIGFuZCBrZWVwcworLy8gSVJRRkxBR1NUQVQuTkVFRF9DTE9DSyBhdCAnMScuCisvLworLy8gVGhpcyBiaXQgc2hhbGwgbm90IGJlIHVzZWQgdW5sZXNzIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgTEZTUiBzZWVkIHByaW9yIHRvCisvLyBjcmVhdGluZyBhIG5ldyByYW5kb20gdmFsdWUuIEFsbCBvdGhlciB0ZXN0aW5nIGlzIGRvbmUgZXh0ZXJuYWwgdG8gcmVnaXN0ZXIKKy8vIGNvbnRyb2wuCisjZGVmaW5lIFRSTkdfQ1RMX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19DVExfVEVTVF9NT0RFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUk5HX0NUTF9URVNUX01PREVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFRSTkdfQ1RMX1RFU1RfTU9ERV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fQ0ZHMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMzE6MTZdIE1BWF9SRUZJTExfQ1lDTEVTCisvLworLy8gVGhpcyBmaWVsZCBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzYW1wbGVzIChiZXR3ZWVuIDJeOCBhbmQgMl4yNCkKKy8vIHRha2VuIHRvIHJlLWdlbmVyYXRlIGVudHJvcHkgZnJvbSB0aGUgRlJPcyBhZnRlciByZWFkaW5nIG91dCBhIDY0IGJpdHMKKy8vIHJhbmRvbSBudW1iZXIuIElmIHRoZSB3cml0dGVuIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgemVybywgdGhlIG51bWJlciBvZgorLy8gc2FtcGxlcyBpcyAyXjI0LCBvdGhlcndpc2UgdGhlIG51bWJlciBvZiBzYW1wbGVzIGVxdWFscyB0aGUgd3JpdHRlbiB2YWx1ZQorLy8gdGltZXMgMl44LgorLy8KKy8vIDB4MDAwMDogMl4yNCBzYW1wbGVzCisvLyAweDAwMDE6IDEqMl44IHNhbXBsZXMKKy8vIDB4MDAwMjogMioyXjggc2FtcGxlcworLy8gMHgwMDAzOiAzKjJeOCBzYW1wbGVzCisvLyAuLi4KKy8vIDB4ODAwMDogMzI3NjgqMl44IHNhbXBsZXMKKy8vIDB4QzAwMDogNDkxNTIqMl44IHNhbXBsZXMKKy8vIC4uLgorLy8gMHhGRkZGOiA2NTUzNSoyXjggc2FtcGxlcworLy8KKy8vIFRoaXMgZmllbGQgY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2hpbGUgQ1RMLlRSTkdfRU4gaXMgMC4KKyNkZWZpbmUgVFJOR19DRkcwX01BWF9SRUZJTExfQ1lDTEVTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBUUk5HX0NGRzBfTUFYX1JFRklMTF9DWUNMRVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFRSTkdfQ0ZHMF9NQVhfUkVGSUxMX0NZQ0xFU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICBbMTE6OF0gU01QTF9ESVYKKy8vCisvLyBUaGlzIGZpZWxkIGRpcmVjdGx5IGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgY2xvY2sgY3ljbGVzIGJldHdlZW4gc2FtcGxlcworLy8gdGFrZW4gZnJvbSB0aGUgRlJPcy4gRGVmYXVsdCB2YWx1ZSAwIGluZGljYXRlcyB0aGF0IHNhbXBsZXMgYXJlIHRha2VuIGV2ZXJ5CisvLyBjbG9jayBjeWNsZSwKKy8vIG1heGltdW0gdmFsdWUgMHhGIHRha2VzIG9uZSBzYW1wbGUgZXZlcnkgMTYgY2xvY2sgY3ljbGVzLgorLy8gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byBhIHZhbHVlIHN1Y2ggdGhhdCB0aGUgc2xvd2VzdCBGUk8gKGV2ZW4gdW5kZXIKKy8vIHdvcnN0LWNhc2UKKy8vIGNvbmRpdGlvbnMpIGhhcyBhIGN5Y2xlIHRpbWUgbGVzcyB0aGFuIHR3aWNlIHRoZSBzYW1wbGUgcGVyaW9kLgorLy8KKy8vIFRoaXMgZmllbGQgY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2hpbGUgQ1RMLlRSTkdfRU4gaXMgJzAnLgorI2RlZmluZSBUUk5HX0NGRzBfU01QTF9ESVZfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFRSTkdfQ0ZHMF9TTVBMX0RJVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgVFJOR19DRkcwX1NNUExfRElWX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBNSU5fUkVGSUxMX0NZQ0xFUworLy8KKy8vIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyAoYmV0d2VlbiAyXjYgYW5kIDJeMTQpCisvLyB0YWtlbiB0byByZS1nZW5lcmF0ZSBlbnRyb3B5IGZyb20gdGhlIEZST3MgYWZ0ZXIgcmVhZGluZyBvdXQgYSA2NCBiaXRzCisvLyByYW5kb20gbnVtYmVyLiBJZiB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyB6ZXJvLCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgaXMKKy8vIGZpeGVkIHRvIHRoZSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSBNQVhfUkVGSUxMX0NZQ0xFUyBmaWVsZCwgb3RoZXJ3aXNlIHRoZQorLy8gbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBlcXVhbHMgdGhlIHdyaXR0ZW4gdmFsdWUgdGltZXMgNjQgKHdoaWNoIGNhbiBiZSB1cAorLy8gdG8gMl4xNCkuIFRvIGVuc3VyZSBzYW1lIGVudHJvcHkgaW4gYWxsIGdlbmVyYXRlZCByYW5kb20gbnVtYmVycyB0aGUgdmFsdWUgMAorLy8gc2hvdWxkIGJlIHVzZWQuIFRoZW4gTUFYX1JFRklMTF9DWUNMRVMgY29udHJvbHMgdGhlIG1pbmltdW0gcmVmaWxsIGludGVydmFsLgorLy8gVGhlIG51bWJlciBvZiBzYW1wbGVzIGRlZmluZWQgaGVyZSBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBkZWZpbmVkCisvLyBieSB0aGUgJ21heF9yZWZpbGxfY3ljbGVzJyBmaWVsZCAoaS5lLiB0aGF0IGZpZWxkIHRha2VzIHByZWNlZGVuY2UpLiBObworLy8gcmFuZG9tIHZhbHVlIHdpbGwgYmUgY3JlYXRlZCBpZiBtaW4gcmVmaWxsID4gbWF4IHJlZmlsbC4KKy8vCisvLyBUaGlzIGZpZWxkIGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoaWxlIENUTC5UUk5HX0VOID0gMC4KKy8vCisvLyAweDAwOiBNaW5pbXVtIHNhbXBsZXMgPSBNQVhfUkVGSUxMX0NZQ0xFUyAoYWxsIG51bWJlcnMgaGF2ZSBzYW1lIGVudHJvcHkpCisvLyAweDAxOiAxKjJeNiBzYW1wbGVzCisvLyAweDAyOiAyKjJeNiBzYW1wbGVzCisvLyAuLi4KKy8vIDB4RkY6IDI1NSoyXjYgc2FtcGxlcworI2RlZmluZSBUUk5HX0NGRzBfTUlOX1JFRklMTF9DWUNMRVNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFRSTkdfQ0ZHMF9NSU5fUkVGSUxMX0NZQ0xFU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgVFJOR19DRkcwX01JTl9SRUZJTExfQ1lDTEVTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19BTEFSTUNOVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiBbMjk6MjRdIFNIVVRET1dOX0NOVAorLy8KKy8vIFJlYWQtb25seSwgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgJzEnIGJpdHMgaW4gQUxBUk1TVE9QIHJlZ2lzdGVyLgorLy8gVGhlIG1heGltdW0gdmFsdWUgZXF1YWxzIHRoZSBudW1iZXIgb2YgRlJPcy4KKyNkZWZpbmUgVFJOR19BTEFSTUNOVF9TSFVURE9XTl9DTlRfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBUUk5HX0FMQVJNQ05UX1NIVVRET1dOX0NOVF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNGMDAwMDAwCisjZGVmaW5lIFRSTkdfQUxBUk1DTlRfU0hVVERPV05fQ05UX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKworLy8gRmllbGQ6IFsyMDoxNl0gU0hVVERPV05fVEhSCisvLworLy8gVGhyZXNob2xkIHNldHRpbmcgZm9yIGdlbmVyYXRpbmcgSVJRRkxBR1NUQVQuU0hVVERPV05fT1ZGIGludGVycnVwdC4gVGhlCisvLyBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkIHdoZW4gU0hVVERPV05fQ05UIHZhbHVlIGV4Y2VlZHMgdGhpcyBiaXQgZmllbGQuCisjZGVmaW5lIFRSTkdfQUxBUk1DTlRfU0hVVERPV05fVEhSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVFJOR19BTEFSTUNOVF9TSFVURE9XTl9USFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGMDAwMAorI2RlZmluZSBUUk5HX0FMQVJNQ05UX1NIVVRET1dOX1RIUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEZpZWxkOiAgIFs3OjBdIEFMQVJNX1RIUgorLy8KKy8vIEFsYXJtIGRldGVjdGlvbiB0aHJlc2hvbGQgZm9yIHRoZSByZXBlYXRpbmcgcGF0dGVybiBkZXRlY3RvcnMgb24gZWFjaCBGUk8uCisvLyBBbiBGUk8gJ2FsYXJtIGV2ZW50JyBpcyBkZWNsYXJlZCB3aGVuIGEgcmVwZWF0aW5nIHBhdHRlcm4gKG9mIHVwIHRvIGZvdXIKKy8vIHNhbXBsZXMgbGVuZ3RoKSBpcyBkZXRlY3RlZCBjb250aW51b3VzbHkgZm9yIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBkZWZpbmVkCisvLyBieSB0aGlzIGZpZWxkJ3MgdmFsdWUuIFJlc2V0IHZhbHVlIDB4RkYgc2hvdWxkIGtlZXAgdGhlIG51bWJlciBvZiAnYWxhcm0KKy8vIGV2ZW50cycgdG8gYSBtYW5hZ2VhYmxlIGxldmVsLgorI2RlZmluZSBUUk5HX0FMQVJNQ05UX0FMQVJNX1RIUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFRSTkdfQUxBUk1DTlRfQUxBUk1fVEhSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgVFJOR19BTEFSTUNOVF9BTEFSTV9USFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19GUk9FTgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzIzOjBdIEZST19NQVNLCisvLworLy8gRW5hYmxlIGJpdHMgZm9yIHRoZSBpbmRpdmlkdWFsIEZST3MuIEEgJzEnIGluIGJpdCBbbl0gZW5hYmxlcyBGUk8gJ24nLgorLy8gRGVmYXVsdCBzdGF0ZSBpcyBhbGwgJzEncyB0byBlbmFibGUgYWxsIEZST3MgYWZ0ZXIgcG93ZXItdXAuIE5vdGUgdGhhdCB0aGV5CisvLyBhcmUgbm90IGFjdHVhbGx5IHN0YXJ0ZWQgdXAgYmVmb3JlIHRoZSBDVEwuVFJOR19FTiBiaXQgIGlzIHNldCB0byAnMScuCisvLworLy8gQml0cyBhcmUgYXV0b21hdGljYWxseSBmb3JjZWQgdG8gJzAnIGhlcmUgKGFuZCBjYW5ub3QgYmUgd3JpdHRlbiB0byAnMScpCisvLyB3aGlsZSB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gIEFMQVJNU1RPUC5GUk9fRkxBR1MgaGFzIHZhbHVlICcxJy4KKyNkZWZpbmUgVFJOR19GUk9FTl9GUk9fTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBUUk5HX0ZST0VOX0ZST19NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFRSTkdfRlJPRU5fRlJPX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fRlJPREVUVU5FCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gRlJPX01BU0sKKy8vCisvLyBEZS10dW5lIGJpdHMgZm9yIHRoZSBpbmRpdmlkdWFsIEZST3MuIEEgJzEnIGluIGJpdCBbbl0gbGV0cyBGUk8gJ24nIHJ1bgorLy8gYXBwcm94aW1hdGVseSA1JSBmYXN0ZXIuIFRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlc2UgYml0cyBtYXkgb25seSBiZSBjaGFuZ2VkCisvLyB3aGlsZSB0aGUgY29ycmVzcG9uZGluZyBGUk8gaXMgdHVybmVkIG9mZiAoYnkgdGVtcG9yYXJpbHkgd3JpdGluZyBhICcwJyBpbgorLy8gdGhlIGNvcnJlc3BvbmRpbmcKKy8vIGJpdCBvZiB0aGUgRlJPRU4uRlJPX01BU0sgcmVnaXN0ZXIpLgorI2RlZmluZSBUUk5HX0ZST0RFVFVORV9GUk9fTUFTS19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFRSTkdfRlJPREVUVU5FX0ZST19NQVNLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgVFJOR19GUk9ERVRVTkVfRlJPX01BU0tfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19BTEFSTU1BU0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsyMzowXSBGUk9fTUFTSworLy8KKy8vIExvZ2dpbmcgYml0cyBmb3IgdGhlICdhbGFybSBldmVudHMnIG9mIGluZGl2aWR1YWwgRlJPcy4gQSAnMScgaW4gYml0IFtuXQorLy8gaW5kaWNhdGVzIEZSTyAnbicgZXhwZXJpZW5jZWQgYW4gJ2FsYXJtIGV2ZW50Jy4KKyNkZWZpbmUgVFJOR19BTEFSTU1BU0tfRlJPX01BU0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBUUk5HX0FMQVJNTUFTS19GUk9fTUFTS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFRSTkdfQUxBUk1NQVNLX0ZST19NQVNLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fQUxBUk1TVE9QCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMjM6MF0gRlJPX0ZMQUdTCisvLworLy8gTG9nZ2luZyBiaXRzIGZvciB0aGUgJ2FsYXJtIGV2ZW50cycgb2YgaW5kaXZpZHVhbCBGUk9zLiBBICcxJyBpbiBiaXQgW25dCisvLyBpbmRpY2F0ZXMgRlJPICduJyBleHBlcmllbmNlZCBtb3JlIHRoYW4gb25lICdhbGFybSBldmVudCcgaW4gcXVpY2sKKy8vIHN1Y2Nlc3Npb24gYW5kIGhhcyBiZWVuIHR1cm5lZCBvZmYuIEEgJzEnIGluIHRoaXMgZmllbGQgZm9yY2VzIHRoZQorLy8gY29ycmVzcG9uZGluZyBiaXQgaW4gRlJPRU4uRlJPX01BU0sgdG8gJzAnLgorI2RlZmluZSBUUk5HX0FMQVJNU1RPUF9GUk9fRkxBR1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFRSTkdfQUxBUk1TVE9QX0ZST19GTEFHU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKyNkZWZpbmUgVFJOR19BTEFSTVNUT1BfRlJPX0ZMQUdTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19MRlNSMAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIExGU1JfMzFfMAorLy8KKy8vIEJpdHMgWzMxOjBdIG9mIHRoZSBtYWluIGVudHJvcHkgYWNjdW11bGF0aW9uIExGU1IuIFJlZ2lzdGVyIGNhbiBvbmx5IGJlCisvLyBhY2Nlc3NlZCB3aGVuIENUTC5URVNUX01PREUgID0gMS4KKy8vIFJlZ2lzdGVyIGNvbnRlbnRzIHdpbGwgYmUgY2xlYXJlZCB0byB6ZXJvIGJlZm9yZSBhY2Nlc3MgaXMgZW5hYmxlZC4KKyNkZWZpbmUgVFJOR19MRlNSMF9MRlNSXzMxXzBfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBUUk5HX0xGU1IwX0xGU1JfMzFfMF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFRSTkdfTEZTUjBfTEZTUl8zMV8wX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fTEZTUjEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBMRlNSXzYzXzMyCisvLworLy8gQml0cyBbNjM6MzJdIG9mIHRoZSBtYWluIGVudHJvcHkgYWNjdW11bGF0aW9uIExGU1IuIFJlZ2lzdGVyIGNhbiBvbmx5IGJlCisvLyBhY2Nlc3NlZCB3aGVuIENUTC5URVNUX01PREUgPSAxLgorLy8gUmVnaXN0ZXIgY29udGVudHMgd2lsbCBiZSBjbGVhcmVkIHRvIHplcm8gYmVmb3JlIGFjY2VzcyBpcyBlbmFibGVkLgorI2RlZmluZSBUUk5HX0xGU1IxX0xGU1JfNjNfMzJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFRSTkdfTEZTUjFfTEZTUl82M18zMl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVFJOR19MRlNSMV9MRlNSXzYzXzMyX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19MRlNSMgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzE2OjBdIExGU1JfODBfNjQKKy8vCisvLyBCaXRzIFs4MDo2NF0gb2YgdGhlIG1haW4gZW50cm9weSBhY2N1bXVsYXRpb24gTEZTUi4gUmVnaXN0ZXIgY2FuIG9ubHkgYmUKKy8vIGFjY2Vzc2VkIHdoZW4gQ1RMLlRFU1RfTU9ERSA9IDEuCisvLyBSZWdpc3RlciBjb250ZW50cyB3aWxsIGJlIGNsZWFyZWQgdG8gemVybyBiZWZvcmUgYWNjZXNzIGlzIGVuYWJsZWQuCisjZGVmaW5lIFRSTkdfTEZTUjJfTEZTUl84MF82NF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgVFJOR19MRlNSMl9MRlNSXzgwXzY0X00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxRkZGRgorI2RlZmluZSBUUk5HX0xGU1IyX0xGU1JfODBfNjRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0hXT1BUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMTE6Nl0gTlJfT0ZfRlJPUworLy8KKy8vIE51bWJlciBvZiBGUk9zIGltcGxlbWVudGVkIGluIHRoaXMgVFJORywgdmFsdWUgMjQgKGRlY2ltYWwpLgorI2RlZmluZSBUUk5HX0hXT1BUX05SX09GX0ZST1NfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFRSTkdfSFdPUFRfTlJfT0ZfRlJPU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBGQzAKKyNkZWZpbmUgVFJOR19IV09QVF9OUl9PRl9GUk9TX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFRSTkdfT19IV1ZFUjAKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzI3OjI0XSBIV19NQUpPUl9WRVIKKy8vCisvLyA0IGJpdHMgYmluYXJ5IGVuY29kaW5nIG9mIHRoZSBtYWpvciBoYXJkd2FyZSByZXZpc2lvbiBudW1iZXIuCisjZGVmaW5lIFRSTkdfSFdWRVIwX0hXX01BSk9SX1ZFUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFJOR19IV1ZFUjBfSFdfTUFKT1JfVkVSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBUUk5HX0hXVkVSMF9IV19NQUpPUl9WRVJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKKy8vIEZpZWxkOiBbMjM6MjBdIEhXX01JTk9SX1ZFUgorLy8KKy8vIDQgYml0cyBiaW5hcnkgZW5jb2Rpbmcgb2YgdGhlIG1pbm9yIGhhcmR3YXJlIHJldmlzaW9uIG51bWJlci4KKyNkZWZpbmUgVFJOR19IV1ZFUjBfSFdfTUlOT1JfVkVSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBUUk5HX0hXVkVSMF9IV19NSU5PUl9WRVJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAwMDAwCisjZGVmaW5lIFRSTkdfSFdWRVIwX0hXX01JTk9SX1ZFUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8gRmllbGQ6IFsxOToxNl0gSFdfUEFUQ0hfTFZMCisvLworLy8gNCBiaXRzIGJpbmFyeSBlbmNvZGluZyBvZiB0aGUgaGFyZHdhcmUgcGF0Y2ggbGV2ZWwsIGluaXRpYWwgcmVsZWFzZSB3aWxsCisvLyBjYXJyeSB2YWx1ZSB6ZXJvLgorI2RlZmluZSBUUk5HX0hXVkVSMF9IV19QQVRDSF9MVkxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFRSTkdfSFdWRVIwX0hXX1BBVENIX0xWTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgVFJOR19IV1ZFUjBfSFdfUEFUQ0hfTFZMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorCisvLyBGaWVsZDogIFsxNTo4XSBFSVBfTlVNX0NPTVBMCisvLworLy8gQml0LWJ5LWJpdCBsb2dpYyBjb21wbGVtZW50IG9mIGJpdHMgWzc6MF0uIFRoaXMgVFJORyBnaXZlcyAweEI0LgorI2RlZmluZSBUUk5HX0hXVkVSMF9FSVBfTlVNX0NPTVBMX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFRSTkdfSFdWRVIwX0VJUF9OVU1fQ09NUExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGMDAKKyNkZWZpbmUgVFJOR19IV1ZFUjBfRUlQX05VTV9DT01QTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICBbNzowXSBFSVBfTlVNCisvLworLy8gOCBiaXRzIGJpbmFyeSBlbmNvZGluZyBvZiB0aGUgbW9kdWxlIG51bWJlci4gVGhpcyBUUk5HIGdpdmVzIDB4NEIuCisjZGVmaW5lIFRSTkdfSFdWRVIwX0VJUF9OVU1fVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVFJOR19IV1ZFUjBfRUlQX05VTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBUUk5HX0hXVkVSMF9FSVBfTlVNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0lSUVNUQVRNQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMV0gU0hVVERPV05fT1ZGCisvLworLy8gU2h1dGRvd24gT3ZlcmZsb3cgKHJlc3VsdCBvZiBJUlFGTEFHU1RBVC5TSFVURE9XTl9PVkYgQU5EJ2VkIHdpdGgKKy8vIElSUUZMQUdNQVNLLlNIVVRET1dOX09WRikKKyNkZWZpbmUgVFJOR19JUlFTVEFUTUFTS19TSFVURE9XTl9PVkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBUUk5HX0lSUVNUQVRNQVNLX1NIVVRET1dOX09WRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSTkdfSVJRU1RBVE1BU0tfU0hVVERPV05fT1ZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVFJOR19JUlFTVEFUTUFTS19TSFVURE9XTl9PVkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSRFkKKy8vCisvLyBOZXcgcmFuZG9tIHZhbHVlIGF2YWlsYWJsZSAocmVzdWx0IG9mIElSUUZMQUdTVEFULlJEWSBBTkQnZWQgd2l0aAorLy8gSVJRRkxBR01BU0suUkRZKQorI2RlZmluZSBUUk5HX0lSUVNUQVRNQVNLX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfSVJRU1RBVE1BU0tfUkRZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJOR19JUlFTVEFUTUFTS19SRFlfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUVNUQVRNQVNLX1JEWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0hXVkVSMQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs3OjBdIFJFVgorLy8KKy8vIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhpcyBtb2R1bGUgaXMgUmV2IDIuMC4KKyNkZWZpbmUgVFJOR19IV1ZFUjFfUkVWX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBUUk5HX0hXVkVSMV9SRVZfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIFRSTkdfSFdWRVIxX1JFVl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fSVJRU0VUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBUUk5HX09fU1dSRVNFVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzBdIFJFU0VUCisvLworLy8gV3JpdGUgJzEnIHRvIHNvZnQgcmVzZXQgLCByZXNldCB3aWxsIGJlIGxvdyBmb3IgNC01IGNsb2NrIGN5Y2xlcy4gUG9sbCB0byAwCisvLyBmb3IgcmVzZXQgdG8gYmUgY29tcGxldGVkLgorI2RlZmluZSBUUk5HX1NXUkVTRVRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfU1dSRVNFVF9SRVNFVF9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJOR19TV1JFU0VUX1JFU0VUX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX1NXUkVTRVRfUkVTRVRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVFJOR19PX0lSUVNUQVQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBTVEFUCisvLworLy8gVFJORyBJbnRlcnJ1cHQgc3RhdHVzLiBPUidlZCB2ZXJzaW9uIG9mIElSUUZMQUdTVEFULlNIVVRET1dOX09WRiBhbmQKKy8vIElSUUZMQUdTVEFULlJEWQorI2RlZmluZSBUUk5HX0lSUVNUQVRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFRSTkdfSVJRU1RBVF9TVEFUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJOR19JUlFTVEFUX1NUQVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBUUk5HX0lSUVNUQVRfU1RBVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fVFJOR19fCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od190eXBlcy5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzEwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdHlwZXMuaApAQCAtMCwwICsxLDEyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGh3X3R5cGVzLmgKKyogIFJldmlzZWQ6ICAgICAgICAyMDE1LTEyLTE1IDEwOjQwOjU2ICswMTAwIChUdWUsIDE1IERlYyAyMDE1KQorKiAgUmV2aXNpb246ICAgICAgIDQ1MzA3CisqCisqICBEZXNjcmlwdGlvbjogICAgQ29tbW9uIHR5cGVzIGFuZCBtYWNyb3MuCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSFdfVFlQRVNfSF9fCisjZGVmaW5lIF9fSFdfVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NoaXBfZGVmLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDb21tb24gZHJpdmVybGliIHR5cGVzCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiB2b2lkICgqIEZQVFJfVk9JRF9WT0lEX1QpICh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKiBGUFRSX1ZPSURfVUlOVDhfVCkgKHVpbnQ4X3QpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gVGhpcyBzeW1ib2wgZm9yY2VzIHNpbXBsZSBkcml2ZXJsaWIgZnVuY3Rpb25zIHRvIGJlIGlubGluZWQgaW4gdGhlIGNvZGUKKy8vIGluc3RlYWQgb2YgdXNpbmcgZnVuY3Rpb24gY2FsbHMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmbmRlZiBfX1NUQVRJQ19JTkxJTkUKKyNkZWZpbmUgX19TVEFUSUNfSU5MSU5FIHN0YXRpYyBpbmxpbmUKKyNlbmRpZgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQzk5IHR5cGVzIG9ubHkgYWxsb3dzIGJpdGZpZWxkIGRlZmludGlvbnMgb24gY2VydGFpbiBkYXRhdHlwZXMuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordHlwZWRlZiB1bnNpZ25lZCBpbnQgIF9fVUlOVDMyOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFjcm9zIGZvciBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzLgorLy8KKy8vIElmIHVzaW5nIHRoZXNlIG1hY3JvcyB0aGUgcHJvZ3JhbW1lciBzaG91bGQgYmUgYXdhcmUgb2YgYW55IGxpbWl0YXRpb25zIHRvCisvLyB0aGUgYWRkcmVzcyBhY2Nlc3NlZCBpLmUuIGlmIGl0IHN1cHBvcnRzIHdvcmQgYW5kL29yIGJ5dGUgYWNjZXNzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFdvcmQgKDMyIGJpdCkgYWNjZXNzIHRvIGFkZHJlc3MgeAorLy8gUmVhZCBleGFtcGxlICA6IG15MzJCaXRWYXIgPSBIV1JFRyhiYXNlX2FkZHIgKyBvZmZzZXQpIDsKKy8vIFdyaXRlIGV4YW1wbGUgOiBIV1JFRyhiYXNlX2FkZHIgKyBvZmZzZXQpID0gbXkzMkJpdFZhciA7CisjZGVmaW5lIEhXUkVHKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKHgpKSkKKworLy8gSGFsZiB3b3JkICgxNiBiaXQpIGFjY2VzcyB0byBhZGRyZXNzIHgKKy8vIFJlYWQgZXhhbXBsZSAgOiBteTE2Qml0VmFyID0gSFdSRUdIKGJhc2VfYWRkciArIG9mZnNldCkgOworLy8gV3JpdGUgZXhhbXBsZSA6IEhXUkVHSChiYXNlX2FkZHIgKyBvZmZzZXQpID0gbXkxNkJpdFZhciA7CisjZGVmaW5lIEhXUkVHSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSh4KSkpCisKKy8vIEJ5dGUgKDggYml0KSBhY2Nlc3MgdG8gYWRkcmVzcyB4CisvLyBSZWFkIGV4YW1wbGUgIDogbXk4Qml0VmFyID0gSFdSRUdCKGJhc2VfYWRkciArIG9mZnNldCkgOworLy8gV3JpdGUgZXhhbXBsZSA6IEhXUkVHQihiYXNlX2FkZHIgKyBvZmZzZXQpID0gbXk4Qml0VmFyIDsKKyNkZWZpbmUgSFdSRUdCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoeCkpKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFjcm9zIGZvciBoYXJkd2FyZSBhY2Nlc3MgdG8gYml0LWJhbmQgc3VwcG9ydGVkIGFkZHJlc3NlcyB2aWEgdGhlIGJpdC1iYW5kIHJlZ2lvbi4KKy8vCisvLyBNYWNyb3MgY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgdG8gYWNjZXNzIGluIHRoZSBiaXQtYmFuZCByZWdpb24KKy8vIGJhc2VkIG9uIHRoZSBhY3R1YWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5L3JlZ2lzdGVyIGFuZCB0aGUgYml0IG51bWJlci4KKy8vCisvLyBEbyBOT1QgdXNlIHRoZXNlIG1hY3JvcyB0byBhY2Nlc3MgdGhlIGJpdC1iYW5kIHJlZ2lvbiBkaXJlY3RseSEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBCaXQtYmFuZCBhY2Nlc3MgdG8gYWRkcmVzcyB4IGJpdCBudW1iZXIgYiB1c2luZyB3b3JkIGFjY2VzcyAoMzIgYml0KQorI2RlZmluZSBIV1JFR0JJVFcoeCwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBIV1JFRygoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHhGMDAwMDAwMCkgfCAweDAyMDAwMDAwIHwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4MDAwRkZGRkYpIDw8IDUpIHwgKChiKSA8PCAyKSkKKworLy8gQml0LWJhbmQgYWNjZXNzIHRvIGFkZHJlc3MgeCBiaXQgbnVtYmVyIGIgdXNpbmcgaGFsZiB3b3JkIGFjY2VzcyAoMTYgYml0KQorI2RlZmluZSBIV1JFR0JJVEgoeCwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBIV1JFR0goKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4RjAwMDAwMDApIHwgMHgwMjAwMDAwMCB8ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKCgodW5zaWduZWQgbG9uZykoeCkgJiAweDAwMEZGRkZGKSA8PCA1KSB8ICgoYikgPDwgMikpCisKKy8vIEJpdC1iYW5kIGFjY2VzcyB0byBhZGRyZXNzIHggYml0IG51bWJlciBiIHVzaW5nIGJ5dGUgYWNjZXNzICg4IGJpdCkKKyNkZWZpbmUgSFdSRUdCSVRCKHgsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgSFdSRUdCKCgodW5zaWduZWQgbG9uZykoeCkgJiAweEYwMDAwMDAwKSB8IDB4MDIwMDAwMDAgfCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHgwMDBGRkZGRikgPDwgNSkgfCAoKGIpIDw8IDIpKQorCisKKyNlbmRpZiAvLyBfX0hXX1RZUEVTX0hfXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdWFydC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OGJhN2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2luYy9od191YXJ0LmgKQEAgLTAsMCArMSwxMDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfdWFydF9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19VQVJUX0hfXworI2RlZmluZSBfX0hXX1VBUlRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gVUFSVCBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBEYXRhCisjZGVmaW5lIFVBUlRfT19EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gU3RhdHVzCisjZGVmaW5lIFVBUlRfT19SU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gRXJyb3IgQ2xlYXIKKyNkZWZpbmUgVUFSVF9PX0VDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorCisvLyBGbGFnCisjZGVmaW5lIFVBUlRfT19GUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gSW50ZWdlciBCYXVkLVJhdGUgRGl2aXNvcgorI2RlZmluZSBVQVJUX09fSUJSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0CisKKy8vIEZyYWN0aW9uYWwgQmF1ZC1SYXRlIERpdmlzb3IKKyNkZWZpbmUgVUFSVF9PX0ZCUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAorCisvLyBMaW5lIENvbnRyb2wKKyNkZWZpbmUgVUFSVF9PX0xDUkggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBDb250cm9sCisjZGVmaW5lIFVBUlRfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKworLy8gSW50ZXJydXB0IEZJRk8gTGV2ZWwgU2VsZWN0CisjZGVmaW5lIFVBUlRfT19JRkxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKworLy8gSW50ZXJydXB0IE1hc2sgU2V0L0NsZWFyCisjZGVmaW5lIFVBUlRfT19JTVNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKKworLy8gUmF3IEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgVUFSVF9PX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBNYXNrZWQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBVQVJUX09fTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisKKy8vIEludGVycnVwdCBDbGVhcgorI2RlZmluZSBVQVJUX09fSUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0CisKKy8vIERNQSBDb250cm9sCisjZGVmaW5lIFVBUlRfT19ETUFDVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fRFIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzExXSBPRQorLy8KKy8vIFVBUlQgT3ZlcnJ1biBFcnJvcjoKKy8vIFRoaXMgYml0IGlzIHNldCB0byAxIGlmIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHRoZSByZWNlaXZlIEZJRk8gaXMgYWxyZWFkeQorLy8gZnVsbC4gVGhlIEZJRk8gY29udGVudHMgcmVtYWluIHZhbGlkIGJlY2F1c2Ugbm8gbW9yZSBkYXRhIGlzIHdyaXR0ZW4gd2hlbgorLy8gdGhlIEZJRk8gaXMgZnVsbCwgLCBvbmx5IHRoZSBjb250ZW50cyBvZiB0aGUgc2hpZnQgcmVnaXN0ZXIgYXJlIG92ZXJ3cml0dGVuLgorLy8gVGhpcyBpcyBjbGVhcmVkIHRvIDAgb25jZSB0aGVyZSBpcyBhbiBlbXB0eSBzcGFjZSBpbiB0aGUgRklGTyBhbmQgYSBuZXcKKy8vIGNoYXJhY3RlciBjYW4gYmUgd3JpdHRlbiB0byBpdC4KKyNkZWZpbmUgVUFSVF9EUl9PRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBVQVJUX0RSX09FX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFVBUlRfRFJfT0VfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgVUFSVF9EUl9PRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvLyBGaWVsZDogICAgWzEwXSBCRQorLy8KKy8vIFVBUlQgQnJlYWsgRXJyb3I6CisvLyBUaGlzIGJpdCBpcyBzZXQgdG8gMSBpZiBhIGJyZWFrIGNvbmRpdGlvbiB3YXMgZGV0ZWN0ZWQsIGluZGljYXRpbmcgdGhhdCB0aGUKKy8vIHJlY2VpdmVkIGRhdGEgaW5wdXQgKFVBUlRSWEQgaW5wdXQgcGluKSB3YXMgaGVsZCBMT1cgZm9yIGxvbmdlciB0aGFuIGEKKy8vIGZ1bGwtd29yZCB0cmFuc21pc3Npb24gdGltZSAoZGVmaW5lZCBhcyBzdGFydCwgZGF0YSwgcGFyaXR5IGFuZCBzdG9wIGJpdHMpLgorLy8gSW4gRklGTyBtb2RlLCB0aGlzIGVycm9yIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhcmFjdGVyIGF0IHRoZSB0b3Agb2YgdGhlCisvLyBGSUZPIChpLmUuLCB0aGUgb2xkZXN0IHJlY2VpdmVkIGRhdGEgY2hhcmFjdGVyIHNpbmNlIGxhc3QgcmVhZCkuIFdoZW4gYQorLy8gYnJlYWsgb2NjdXJzLCBhIDAgY2hhcmFjdGVyIGlzIGxvYWRlZCBpbnRvIHRoZSBGSUZPLiBUaGUgbmV4dCBjaGFyYWN0ZXIgaXMKKy8vIGVuYWJsZWQgYWZ0ZXIgdGhlIHJlY2VpdmUgZGF0YSBpbnB1dCAoVUFSVFJYRCBpbnB1dCBwaW4pIGdvZXMgdG8gYSAxCisvLyAobWFya2luZyBzdGF0ZSksIGFuZCB0aGUgbmV4dCB2YWxpZCBzdGFydCBiaXQgaXMgcmVjZWl2ZWQuCisjZGVmaW5lIFVBUlRfRFJfQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVUFSVF9EUl9CRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBVQVJUX0RSX0JFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfRFJfQkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gUEUKKy8vCisvLyBVQVJUIFBhcml0eSBFcnJvcjoKKy8vIFdoZW4gc2V0IHRvIDEsIGl0IGluZGljYXRlcyB0aGF0IHRoZSBwYXJpdHkgb2YgdGhlIHJlY2VpdmVkIGRhdGEgY2hhcmFjdGVyCisvLyBkb2VzIG5vdCBtYXRjaCB0aGUgcGFyaXR5IHRoYXQgdGhlIExDUkguRVBTIGFuZCBMQ1JILlNQUyBzZWxlY3QuCisvLyBJbiBGSUZPIG1vZGUsIHRoaXMgZXJyb3IgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHRvcCBvZiB0aGUKKy8vIEZJRk8gKGkuZS4sIHRoZSBvbGRlc3QgcmVjZWl2ZWQgZGF0YSBjaGFyYWN0ZXIgc2luY2UgbGFzdCByZWFkKS4KKyNkZWZpbmUgVUFSVF9EUl9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX0RSX1BFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFVBUlRfRFJfUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9EUl9QRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBGRQorLy8KKy8vIFVBUlQgRnJhbWluZyBFcnJvcjoKKy8vIFdoZW4gc2V0IHRvIDEsIGl0IGluZGljYXRlcyB0aGF0IHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZGlkIG5vdCBoYXZlIGEgdmFsaWQKKy8vIHN0b3AgYml0IChhIHZhbGlkIHN0b3AgYml0IGlzIDEpLgorLy8gSW4gRklGTyBtb2RlLCB0aGlzIGVycm9yIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhcmFjdGVyIGF0IHRoZSB0b3Agb2YgdGhlCisvLyBGSUZPIChpLmUuLCB0aGUgb2xkZXN0IHJlY2VpdmVkIGRhdGEgY2hhcmFjdGVyIHNpbmNlIGxhc3QgcmVhZCkuCisjZGVmaW5lIFVBUlRfRFJfRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9EUl9GRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBVQVJUX0RSX0ZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfRFJfRkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgWzc6MF0gREFUQQorLy8KKy8vIERhdGEgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQ6CisvLyBPbiB3cml0ZXMsIHRoZSB0cmFuc21pdCBkYXRhIGNoYXJhY3RlciBpcyBwdXNoZWQgaW50byB0aGUgRklGTy4KKy8vIE9uIHJlYWRzLCB0aGUgb2xkZXN0IHJlY2VpdmVkIGRhdGEgY2hhcmFjdGVyIHNpbmNlIHRoZSBsYXN0IHJlYWQgaXMKKy8vIHJldHVybmVkLgorI2RlZmluZSBVQVJUX0RSX0RBVEFfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFVBUlRfRFJfREFUQV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkYKKyNkZWZpbmUgVUFSVF9EUl9EQVRBX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVBUlRfT19SU1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFszXSBPRQorLy8KKy8vIFVBUlQgT3ZlcnJ1biBFcnJvcjoKKy8vIFRoaXMgYml0IGlzIHNldCB0byAxIGlmIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHRoZSByZWNlaXZlIEZJRk8gaXMgYWxyZWFkeQorLy8gZnVsbC4gVGhlIEZJRk8gY29udGVudHMgcmVtYWluIHZhbGlkIGJlY2F1c2Ugbm8gbW9yZSBkYXRhIGlzIHdyaXR0ZW4gd2hlbgorLy8gdGhlIEZJRk8gaXMgZnVsbCwgLCBvbmx5IHRoZSBjb250ZW50cyBvZiB0aGUgc2hpZnQgcmVnaXN0ZXIgYXJlIG92ZXJ3cml0dGVuLgorLy8gVGhpcyBpcyBjbGVhcmVkIHRvIDAgb25jZSB0aGVyZSBpcyBhbiBlbXB0eSBzcGFjZSBpbiB0aGUgRklGTyBhbmQgYSBuZXcKKy8vIGNoYXJhY3RlciBjYW4gYmUgd3JpdHRlbiB0byBpdC4KKyNkZWZpbmUgVUFSVF9SU1JfT0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVQVJUX1JTUl9PRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVBUlRfUlNSX09FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9SU1JfT0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBCRQorLy8KKy8vIFVBUlQgQnJlYWsgRXJyb3I6CisvLyBUaGlzIGJpdCBpcyBzZXQgdG8gMSBpZiBhIGJyZWFrIGNvbmRpdGlvbiB3YXMgZGV0ZWN0ZWQsIGluZGljYXRpbmcgdGhhdCB0aGUKKy8vIHJlY2VpdmVkIGRhdGEgaW5wdXQgKFVBUlRSWEQgaW5wdXQgcGluKSB3YXMgaGVsZCBMT1cgZm9yIGxvbmdlciB0aGFuIGEKKy8vIGZ1bGwtd29yZCB0cmFuc21pc3Npb24gdGltZSAoZGVmaW5lZCBhcyBzdGFydCwgZGF0YSwgcGFyaXR5IGFuZCBzdG9wIGJpdHMpLgorLy8gV2hlbiBhIGJyZWFrIG9jY3VycywgYSAwIGNoYXJhY3RlciBpcyBsb2FkZWQgaW50byB0aGUgRklGTy4gVGhlIG5leHQKKy8vIGNoYXJhY3RlciBpcyBlbmFibGVkIGFmdGVyIHRoZSByZWNlaXZlIGRhdGEgaW5wdXQgKFVBUlRSWEQgaW5wdXQgcGluKSBnb2VzCisvLyB0byBhIDEgKG1hcmtpbmcgc3RhdGUpLCBhbmQgdGhlIG5leHQgdmFsaWQgc3RhcnQgYml0IGlzIHJlY2VpdmVkLgorI2RlZmluZSBVQVJUX1JTUl9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfUlNSX0JFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVUFSVF9SU1JfQkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX1JTUl9CRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFBFCisvLworLy8gVUFSVCBQYXJpdHkgRXJyb3I6CisvLyBXaGVuIHNldCB0byAxLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyaXR5IG9mIHRoZSByZWNlaXZlZCBkYXRhIGNoYXJhY3RlcgorLy8gZG9lcyBub3QgbWF0Y2ggdGhlIHBhcml0eSB0aGF0IHRoZSBMQ1JILkVQUyBhbmQgTENSSC5TUFMgc2VsZWN0LgorI2RlZmluZSBVQVJUX1JTUl9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfUlNSX1BFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVUFSVF9SU1JfUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX1JTUl9QRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8vIEZpZWxkOiAgICAgWzBdIEZFCisvLworLy8gVUFSVCBGcmFtaW5nIEVycm9yOgorLy8gV2hlbiBzZXQgdG8gMSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBkaWQgbm90IGhhdmUgYSB2YWxpZAorLy8gc3RvcCBiaXQgKGEgdmFsaWQgc3RvcCBiaXQgaXMgMSkuCisjZGVmaW5lIFVBUlRfUlNSX0ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9SU1JfRkVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVQVJUX1JTUl9GRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfUlNSX0ZFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fRUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbM10gT0UKKy8vCisvLyBUaGUgZnJhbWluZyAoRkUpLCBwYXJpdHkgKFBFKSwgYnJlYWsgKEJFKSBhbmQgb3ZlcnJ1biAoT0UpIGVycm9ycyBhcmUKKy8vIGNsZWFyZWQgdG8gMCBieSBhbnkgd3JpdGUgdG8gdGhpcyByZWdpc3Rlci4KKyNkZWZpbmUgVUFSVF9FQ1JfT0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVQVJUX0VDUl9PRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVBUlRfRUNSX09FX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9FQ1JfT0VfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBCRQorLy8KKy8vIFRoZSBmcmFtaW5nIChGRSksIHBhcml0eSAoUEUpLCBicmVhayAoQkUpIGFuZCBvdmVycnVuIChPRSkgZXJyb3JzIGFyZQorLy8gY2xlYXJlZCB0byAwIGJ5IGFueSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyLgorI2RlZmluZSBVQVJUX0VDUl9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfRUNSX0JFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVUFSVF9FQ1JfQkVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX0VDUl9CRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgICAgWzFdIFBFCisvLworLy8gVGhlIGZyYW1pbmcgKEZFKSwgcGFyaXR5IChQRSksIGJyZWFrIChCRSkgYW5kIG92ZXJydW4gKE9FKSBlcnJvcnMgYXJlCisvLyBjbGVhcmVkIHRvIDAgYnkgYW55IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIuCisjZGVmaW5lIFVBUlRfRUNSX1BFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9FQ1JfUEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX0VDUl9QRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfRUNSX1BFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gRkUKKy8vCisvLyBUaGUgZnJhbWluZyAoRkUpLCBwYXJpdHkgKFBFKSwgYnJlYWsgKEJFKSBhbmQgb3ZlcnJ1biAoT0UpIGVycm9ycyBhcmUKKy8vIGNsZWFyZWQgdG8gMCBieSBhbnkgd3JpdGUgdG8gdGhpcyByZWdpc3Rlci4KKyNkZWZpbmUgVUFSVF9FQ1JfRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0VDUl9GRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVBUlRfRUNSX0ZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9FQ1JfRkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVBUlRfT19GUgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzddIFRYRkUKKy8vCisvLyBVQVJUIFRyYW5zbWl0IEZJRk8gRW1wdHk6CisvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGJpdCBkZXBlbmRzIG9uIHRoZSBzdGF0ZSBvZiBMQ1JILkZFTiAuCisvLyAgIC0gSWYgdGhlIEZJRk8gaXMgZGlzYWJsZWQsIHRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSB0cmFuc21pdCBob2xkaW5nCisvLyByZWdpc3RlciBpcyBlbXB0eS4KKy8vICAgLSBJZiB0aGUgRklGTyBpcyBlbmFibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgdHJhbnNtaXQgRklGTyBpcyBlbXB0eS4KKy8vIFRoaXMgYml0IGRvZXMgbm90IGluZGljYXRlIGlmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyLgorI2RlZmluZSBVQVJUX0ZSX1RYRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfRlJfVFhGRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVUFSVF9GUl9UWEZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0ZSX1RYRkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFJYRkYKKy8vCisvLyBVQVJUIFJlY2VpdmUgRklGTyBGdWxsOgorLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBiaXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YgTENSSC5GRU4uCisvLyAgIC0gSWYgdGhlIEZJRk8gaXMgZGlzYWJsZWQsIHRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSByZWNlaXZlIGhvbGRpbmcKKy8vIHJlZ2lzdGVyIGlzIGZ1bGwuCisvLyAgIC0gSWYgdGhlIEZJRk8gaXMgZW5hYmxlZCwgdGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIHJlY2VpdmUgRklGTyBpcyBmdWxsLgorI2RlZmluZSBVQVJUX0ZSX1JYRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfRlJfUlhGRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVUFSVF9GUl9SWEZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX0ZSX1JYRkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRYRkYKKy8vCisvLyBVQVJUIFRyYW5zbWl0IEZJRk8gRnVsbDoKKy8vIFRyYW5zbWl0IEZJRk8gZnVsbC4gVGhlIG1lYW5pbmcgb2YgdGhpcyBiaXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YKKy8vIExDUkguRkVOLgorLy8gICAtIElmIHRoZSBGSUZPIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgdHJhbnNtaXQgaG9sZGluZworLy8gcmVnaXN0ZXIgaXMgZnVsbC4KKy8vICAgLSBJZiB0aGUgRklGTyBpcyBlbmFibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgdHJhbnNtaXQgRklGTyBpcyBmdWxsLgorI2RlZmluZSBVQVJUX0ZSX1RYRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfRlJfVFhGRl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVUFSVF9GUl9UWEZGX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX0ZSX1RYRkZfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIEZpZWxkOiAgICAgWzRdIFJYRkUKKy8vCisvLyBVQVJUIFJlY2VpdmUgRklGTyBFbXB0eToKKy8vIFJlY2VpdmUgRklGTyBlbXB0eS4gVGhlIG1lYW5pbmcgb2YgdGhpcyBiaXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YKKy8vIExDUkguRkVOLgorLy8gICAtIElmIHRoZSBGSUZPIGlzIGRpc2FibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgcmVjZWl2ZSBob2xkaW5nCisvLyByZWdpc3RlciBpcyBlbXB0eS4KKy8vICAgLSBJZiB0aGUgRklGTyBpcyBlbmFibGVkLCB0aGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgcmVjZWl2ZSBGSUZPIGlzIGVtcHR5LgorI2RlZmluZSBVQVJUX0ZSX1JYRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfRlJfUlhGRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVUFSVF9GUl9SWEZFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0ZSX1JYRkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIEJVU1kKKy8vCisvLyBVQVJUIEJ1c3k6CisvLyBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgdGhlIFVBUlQgaXMgYnVzeSB0cmFuc21pdHRpbmcgZGF0YS4gVGhpcyBiaXQKKy8vIHJlbWFpbnMgc2V0IHVudGlsIHRoZSBjb21wbGV0ZSBieXRlLCBpbmNsdWRpbmcgYWxsIHRoZSBzdG9wIGJpdHMsIGhhcyBiZWVuCisvLyBzZW50IGZyb20gdGhlIHNoaWZ0IHJlZ2lzdGVyLgorLy8gVGhpcyBiaXQgaXMgc2V0IGFzIHNvb24gYXMgdGhlIHRyYW5zbWl0IEZJRk8gYmVjb21lcyBub24tZW1wdHksIHJlZ2FyZGxlc3MKKy8vIG9mIHdoZXRoZXIgdGhlIFVBUlQgaXMgZW5hYmxlZCBvciBub3QuCisjZGVmaW5lIFVBUlRfRlJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9GUl9CVVNZX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBVQVJUX0ZSX0JVU1lfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfRlJfQlVTWV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMF0gQ1RTCisvLworLy8gQ2xlYXIgVG8gU2VuZDoKKy8vIFRoaXMgYml0IGlzIHRoZSBjb21wbGVtZW50IG9mIHRoZSBhY3RpdmUtbG93IFVBUlQgQ1RTIGlucHV0IHBpbi4KKy8vIFRoYXQgaXMsIHRoZSBiaXQgaXMgMSB3aGVuIENUUyBpbnB1dCBwaW4gaXMgTE9XLgorI2RlZmluZSBVQVJUX0ZSX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfRlJfQ1RTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVUFSVF9GUl9DVFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0ZSX0NUU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0lCUkQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFsxNTowXSBESVZJTlQKKy8vCisvLyBUaGUgaW50ZWdlciBiYXVkIHJhdGUgZGl2aXNvcjoKKy8vIFRoZSBiYXVkIHJhdGUgZGl2aXNvciBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmb3JtdWxhIGJlbG93OgorLy8gQmF1ZCByYXRlIGRpdmlzb3IgPSAoVUFSVCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5KSAvICgxNiAqIEJhdWQgcmF0ZSkKKy8vIEJhdWQgcmF0ZSBkaXZpc29yIG11c3QgYmUgbWluaW11bSAxIGFuZCBtYXhpbXVtIDY1NTM1LgorLy8gVGhhdCBpcywgRElWSU5UPTAgZG9lcyBub3QgZ2l2ZSBhIHZhbGlkIGJhdWQgcmF0ZS4KKy8vIFNpbWlsYXJseSwgaWYgRElWSU5UPTB4RkZGRiwgYW55IG5vbi16ZXJvIHZhbHVlcyBpbiBGQlJELkRJVkZSQUMgd2lsbCBiZQorLy8gaWxsZWdhbC4KKy8vIEEgdmFsaWQgdmFsdWUgbXVzdCBiZSB3cml0dGVuIHRvIHRoaXMgZmllbGQgYmVmb3JlIHRoZSBVQVJUIGNhbiBiZSB1c2VkIGZvcgorLy8gUlggb3IgVFggb3BlcmF0aW9ucy4KKyNkZWZpbmUgVUFSVF9JQlJEX0RJVklOVF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBVQVJUX0lCUkRfRElWSU5UX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFVBUlRfSUJSRF9ESVZJTlRfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fRkJSRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgIFs1OjBdIERJVkZSQUMKKy8vCisvLyBGcmFjdGlvbmFsIEJhdWQtUmF0ZSBEaXZpc29yOgorLy8gVGhlIGJhdWQgcmF0ZSBkaXZpc29yIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGZvcm11bGEgYmVsb3c6CisvLyBCYXVkIHJhdGUgZGl2aXNvciA9IChVQVJUIHJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kpIC8gKDE2ICogQmF1ZCByYXRlKQorLy8gQmF1ZCByYXRlIGRpdmlzb3IgbXVzdCBiZSBtaW5pbXVtIDEgYW5kIG1heGltdW0gNjU1MzUuCisvLyBUaGF0IGlzLCBJQlJELkRJVklOVD0wIGRvZXMgbm90IGdpdmUgYSB2YWxpZCBiYXVkIHJhdGUuCisvLyBTaW1pbGFybHksIGlmIElCUkQuRElWSU5UPTB4RkZGRiwgYW55IG5vbi16ZXJvIHZhbHVlcyBpbiBESVZGUkFDIHdpbGwgYmUKKy8vIGlsbGVnYWwuCisvLyBBIHZhbGlkIHZhbHVlIG11c3QgYmUgd3JpdHRlbiB0byB0aGlzIGZpZWxkIGJlZm9yZSB0aGUgVUFSVCBjYW4gYmUgdXNlZCBmb3IKKy8vIFJYIG9yIFRYIG9wZXJhdGlvbnMuCisjZGVmaW5lIFVBUlRfRkJSRF9ESVZGUkFDX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVUFSVF9GQlJEX0RJVkZSQUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBVQVJUX0ZCUkRfRElWRlJBQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVUFSVF9PX0xDUkgKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs3XSBTUFMKKy8vCisvLyBVQVJUIFN0aWNrIFBhcml0eSBTZWxlY3Q6CisvLworLy8gMDogU3RpY2sgcGFyaXR5IGlzIGRpc2FibGVkCisvLyAxOiBUaGUgcGFyaXR5IGJpdCBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBhcyBpbnZlcnQgb2YgRVBTIGZpZWxkIChpLmUuCisvLyB0aGUgcGFyaXR5IGJpdCBpcyB0cmFuc21pdHRlZCBhbmQgY2hlY2tlZCBhcyAxIHdoZW4gRVBTID0gMCkuCisvLworLy8gVGhpcyBiaXQgaGFzIG5vIGVmZmVjdCB3aGVuIFBFTiBkaXNhYmxlcyBwYXJpdHkgY2hlY2tpbmcgYW5kIGdlbmVyYXRpb24uCisjZGVmaW5lIFVBUlRfTENSSF9TUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9MQ1JIX1NQU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBVQVJUX0xDUkhfU1BTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfTENSSF9TUFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgWzY6NV0gV0xFTgorLy8KKy8vIFVBUlQgV29yZCBMZW5ndGg6CisvLyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkIGluIGEKKy8vIGZyYW1lLgorLy8gRU5VTXM6CisvLyA4ICAgICAgICAgICAgICAgICAgICAgICAgV29yZCBMZW5ndGggOCBiaXRzCisvLyA3ICAgICAgICAgICAgICAgICAgICAgICAgV29yZCBMZW5ndGggNyBiaXRzCisvLyA2ICAgICAgICAgICAgICAgICAgICAgICAgV29yZCBMZW5ndGggNiBiaXRzCisvLyA1ICAgICAgICAgICAgICAgICAgICAgICAgV29yZCBMZW5ndGggNSBiaXRzCisjZGVmaW5lIFVBUlRfTENSSF9XTEVOX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVUFSVF9MQ1JIX1dMRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBVQVJUX0xDUkhfV0xFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFVBUlRfTENSSF9XTEVOXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgVUFSVF9MQ1JIX1dMRU5fNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX0xDUkhfV0xFTl82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfTENSSF9XTEVOXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbNF0gRkVOCisvLworLy8gVUFSVCBFbmFibGUgRklGT3MKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk8gYnVmZmVycyBhcmUgZW5hYmxlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIChGSUZPIG1vZGUpCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRklGT3MgYXJlIGRpc2FibGVkIChjaGFyYWN0ZXIgbW9kZSkgdGhhdCBpcywgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgRklGT3MgYmVjb21lIDEtYnl0ZS1kZWVwIGhvbGRpbmcgcmVnaXN0ZXJzLgorI2RlZmluZSBVQVJUX0xDUkhfRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfTENSSF9GRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVUFSVF9MQ1JIX0ZFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0xDUkhfRkVOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVBUlRfTENSSF9GRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9MQ1JIX0ZFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFszXSBTVFAyCisvLworLy8gVUFSVCBUd28gU3RvcCBCaXRzIFNlbGVjdDoKKy8vIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB0d28gc3RvcCBiaXRzIGFyZSB0cmFuc21pdHRlZCBhdCB0aGUgZW5kIG9mIHRoZQorLy8gZnJhbWUuIFRoZSByZWNlaXZlIGxvZ2ljIGRvZXMgbm90IGNoZWNrIGZvciB0d28gc3RvcCBiaXRzIGJlaW5nIHJlY2VpdmVkLgorI2RlZmluZSBVQVJUX0xDUkhfU1RQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVBUlRfTENSSF9TVFAyX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVUFSVF9MQ1JIX1NUUDJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBVQVJUX0xDUkhfU1RQMl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8vIEZpZWxkOiAgICAgWzJdIEVQUworLy8KKy8vIFVBUlQgRXZlbiBQYXJpdHkgU2VsZWN0CisvLyBFTlVNczoKKy8vIEVWRU4gICAgICAgICAgICAgICAgICAgICBFdmVuIHBhcml0eTogVGhlIFVBUlQgZ2VuZXJhdGVzIG9yIGNoZWNrcyBmb3IgYW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuIG51bWJlciBvZiAxcyBpbiB0aGUgZGF0YSBhbmQgcGFyaXR5IGJpdHMuCisvLyBPREQgICAgICAgICAgICAgICAgICAgICAgT2RkIHBhcml0eTogVGhlIFVBUlQgZ2VuZXJhdGVzIG9yIGNoZWNrcyBmb3IgYW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQgbnVtYmVyIG9mIDFzIGluIHRoZSBkYXRhIGFuZCBwYXJpdHkgYml0cy4KKyNkZWZpbmUgVUFSVF9MQ1JIX0VQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX0xDUkhfRVBTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFVBUlRfTENSSF9FUFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9MQ1JIX0VQU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBVQVJUX0xDUkhfRVBTX0VWRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVBUlRfTENSSF9FUFNfT0REICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMV0gUEVOCisvLworLy8gVUFSVCBQYXJpdHkgRW5hYmxlCisvLyBUaGlzIGJpdCBjb250cm9scyBnZW5lcmF0aW9uIGFuZCBjaGVja2luZyBvZiBwYXJpdHkgYml0LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgUGFyaXR5IGNoZWNraW5nIGFuZCBnZW5lcmF0aW9uIGlzIGVuYWJsZWQuCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgUGFyaXR5IGlzIGRpc2FibGVkIGFuZCBubyBwYXJpdHkgYml0IGlzIGFkZGVkIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgZnJhbWUKKyNkZWZpbmUgVUFSVF9MQ1JIX1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0xDUkhfUEVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFVBUlRfTENSSF9QRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9MQ1JIX1BFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX0xDUkhfUEVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfTENSSF9QRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8gRmllbGQ6ICAgICBbMF0gQlJLCisvLworLy8gVUFSVCBTZW5kIEJyZWFrCisvLyBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgYSBsb3ctbGV2ZWwgaXMgY29udGludWFsbHkgb3V0cHV0IG9uIHRoZSBVQVJUVFhECisvLyBvdXRwdXQgcGluLCBhZnRlciBjb21wbGV0aW5nIHRyYW5zbWlzc2lvbiBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIEZvciB0aGUKKy8vIHByb3BlciBleGVjdXRpb24gb2YgdGhlIGJyZWFrIGNvbW1hbmQsIHRoZQorLy8gc29mdHdhcmUgbXVzdCBzZXQgdGhpcyBiaXQgZm9yIGF0IGxlYXN0IHR3byBjb21wbGV0ZSBmcmFtZXMuIEZvciBub3JtYWwgdXNlLAorLy8gdGhpcyBiaXQgbXVzdCBiZSBjbGVhcmVkIHRvIDAuCisjZGVmaW5lIFVBUlRfTENSSF9CUksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9MQ1JIX0JSS19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVQVJUX0xDUkhfQlJLX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfTENSSF9CUktfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxNV0gQ1RTRU4KKy8vCisvLyBDVFMgaGFyZHdhcmUgZmxvdyBjb250cm9sIGVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgQ1RTIGhhcmR3YXJlIGZsb3cgY29udHJvbCBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgQ1RTIGhhcmR3YXJlIGZsb3cgY29udHJvbCBkaXNhYmxlZAorI2RlZmluZSBVQVJUX0NUTF9DVFNFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFVBUlRfQ1RMX0NUU0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgVUFSVF9DVExfQ1RTRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBVQVJUX0NUTF9DVFNFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFVBUlRfQ1RMX0NUU0VOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgVUFSVF9DVExfQ1RTRU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgWzE0XSBSVFNFTgorLy8KKy8vIFJUUyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgZW5hYmxlCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBSVFMgaGFyZHdhcmUgZmxvdyBjb250cm9sIGVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBSVFMgaGFyZHdhcmUgZmxvdyBjb250cm9sIGRpc2FibGVkCisjZGVmaW5lIFVBUlRfQ1RMX1JUU0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgVUFSVF9DVExfUlRTRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBVQVJUX0NUTF9SVFNFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFVBUlRfQ1RMX1JUU0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgVUFSVF9DVExfUlRTRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBVQVJUX0NUTF9SVFNFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICBbMTFdIFJUUworLy8KKy8vIFJlcXVlc3QgdG8gU2VuZAorLy8gVGhpcyBiaXQgaXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGFjdGl2ZS1sb3cgVUFSVCBSVFMgb3V0cHV0LiBUaGF0IGlzLCB3aGVuCisvLyB0aGUgYml0IGlzIHByb2dyYW1tZWQgdG8gYSAxIHRoZW4gUlRTIG91dHB1dCBvbiB0aGUgcGlucyBpcyBMT1cuCisjZGVmaW5lIFVBUlRfQ1RMX1JUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgVUFSVF9DVExfUlRTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBVQVJUX0NUTF9SVFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFVBUlRfQ1RMX1JUU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKworLy8gRmllbGQ6ICAgICBbOV0gUlhFCisvLworLy8gVUFSVCBSZWNlaXZlIEVuYWJsZQorLy8gSWYgdGhlIFVBUlQgaXMgZGlzYWJsZWQgaW4gdGhlIG1pZGRsZSBvZiByZWNlcHRpb24sIGl0IGNvbXBsZXRlcyB0aGUgY3VycmVudAorLy8gY2hhcmFjdGVyIGJlZm9yZSBzdG9wcGluZy4KKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFVBUlQgUmVjZWl2ZSBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVUFSVCBSZWNlaXZlIGRpc2FibGVkCisjZGVmaW5lIFVBUlRfQ1RMX1JYRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9DVExfUlhFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBVQVJUX0NUTF9SWEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfQ1RMX1JYRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVUFSVF9DVExfUlhFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX0NUTF9SWEVfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzhdIFRYRQorLy8KKy8vIFVBUlQgVHJhbnNtaXQgRW5hYmxlCisvLyBJZiB0aGUgVUFSVCBpcyBkaXNhYmxlZCBpbiB0aGUgbWlkZGxlIG9mIHRyYW5zbWlzc2lvbiwgaXQgY29tcGxldGVzIHRoZQorLy8gY3VycmVudCBjaGFyYWN0ZXIgYmVmb3JlIHN0b3BwaW5nLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgVUFSVCBUcmFuc21pdCBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVUFSVCBUcmFuc21pdCBkaXNhYmxlZAorI2RlZmluZSBVQVJUX0NUTF9UWEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfQ1RMX1RYRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVUFSVF9DVExfVFhFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX0NUTF9UWEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFVBUlRfQ1RMX1RYRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9DVExfVFhFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFs3XSBMQkUKKy8vCisvLyBVQVJUIExvb3AgQmFjayBFbmFibGU6CisvLyBFbmFibGluZyB0aGUgbG9vcC1iYWNrIG1vZGUgY29ubmVjdHMgdGhlIFVBUlRUWEQgb3V0cHV0IGZyb20gdGhlIFVBUlQgdG8KKy8vIFVBUlRSWEQgaW5wdXQgb2YgdGhlIFVBUlQuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBMb29wIEJhY2sgZW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIExvb3AgQmFjayBkaXNhYmxlZAorI2RlZmluZSBVQVJUX0NUTF9MQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfQ1RMX0xCRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVUFSVF9DVExfTEJFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0NUTF9MQkVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFVBUlRfQ1RMX0xCRV9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9DVExfTEJFX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBVQVJURU4KKy8vCisvLyBVQVJUIEVuYWJsZQorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgVUFSVCBlbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVUFSVCBkaXNhYmxlZAorI2RlZmluZSBVQVJUX0NUTF9VQVJURU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfQ1RMX1VBUlRFTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVUFSVF9DVExfVUFSVEVOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVQVJUX0NUTF9VQVJURU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVBUlRfQ1RMX1VBUlRFTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9DVExfVUFSVEVOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVBUlRfT19JRkxTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgWzU6M10gUlhTRUwKKy8vCisvLyBSZWNlaXZlIGludGVycnVwdCBGSUZPIGxldmVsIHNlbGVjdDoKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgdHJpZ2dlciBwb2ludHMgZm9yIHRoZSByZWNlaXZlIGludGVycnVwdC4gVmFsdWVzCisvLyAwYjEwMS0wYjExMSBhcmUgcmVzZXJ2ZWQuCisvLyBFTlVNczoKKy8vIDdfOCAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlIEZJRk8gYmVjb21lcyA+PSA3LzggZnVsbAorLy8gNl84ICAgICAgICAgICAgICAgICAgICAgIFJlY2VpdmUgRklGTyBiZWNvbWVzID49IDMvNCBmdWxsCisvLyA0XzggICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZSBGSUZPIGJlY29tZXMgPj0gMS8yIGZ1bGwKKy8vIDJfOCAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlIEZJRk8gYmVjb21lcyA+PSAxLzQgZnVsbAorLy8gMV84ICAgICAgICAgICAgICAgICAgICAgIFJlY2VpdmUgRklGTyBiZWNvbWVzID49IDEvOCBmdWxsCisjZGVmaW5lIFVBUlRfSUZMU19SWFNFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVUFSVF9JRkxTX1JYU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBVQVJUX0lGTFNfUlhTRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVBUlRfSUZMU19SWFNFTF83XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9JRkxTX1JYU0VMXzZfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBVQVJUX0lGTFNfUlhTRUxfNF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfSUZMU19SWFNFTF8yXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVUFSVF9JRkxTX1JYU0VMXzFfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICBbMjowXSBUWFNFTAorLy8KKy8vIFRyYW5zbWl0IGludGVycnVwdCBGSUZPIGxldmVsIHNlbGVjdDoKKy8vIFRoaXMgZmllbGQgc2V0cyB0aGUgdHJpZ2dlciBwb2ludHMgZm9yIHRoZSB0cmFuc21pdCBpbnRlcnJ1cHQuIFZhbHVlcworLy8gMGIxMDEtMGIxMTEgYXJlIHJlc2VydmVkLgorLy8gRU5VTXM6CisvLyA3XzggICAgICAgICAgICAgICAgICAgICAgVHJhbnNtaXQgRklGTyBiZWNvbWVzIDw9IDcvOCBmdWxsCisvLyA2XzggICAgICAgICAgICAgICAgICAgICAgVHJhbnNtaXQgRklGTyBiZWNvbWVzIDw9IDMvNCBmdWxsCisvLyA0XzggICAgICAgICAgICAgICAgICAgICAgVHJhbnNtaXQgRklGTyBiZWNvbWVzIDw9IDEvMiBmdWxsCisvLyAyXzggICAgICAgICAgICAgICAgICAgICAgVHJhbnNtaXQgRklGTyBiZWNvbWVzIDw9IDEvNCBmdWxsCisvLyAxXzggICAgICAgICAgICAgICAgICAgICAgVHJhbnNtaXQgRklGTyBiZWNvbWVzIDw9IDEvOCBmdWxsCisjZGVmaW5lIFVBUlRfSUZMU19UWFNFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVUFSVF9JRkxTX1RYU0VMX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBVQVJUX0lGTFNfVFhTRUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVBUlRfSUZMU19UWFNFTF83XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9JRkxTX1RYU0VMXzZfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBVQVJUX0lGTFNfVFhTRUxfNF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfSUZMU19UWFNFTF8yXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9JRkxTX1RYU0VMXzFfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVBUlRfT19JTVNDCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gT0VJTQorLy8KKy8vIE92ZXJydW4gZXJyb3IgaW50ZXJydXB0IG1hc2suIEEgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IG1hc2sgZm9yIFVBUlQncworLy8gb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YgMSwgdGhlIG1hc2sgb2YgdGhlIG92ZXJydW4gZXJyb3IKKy8vIGludGVycnVwdCBpcyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdCBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbgorLy8gTUlTLk9FTUlTLiBBIHdyaXRlIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zIE1JUy5PRU1JUyB3aWxsIG5vdAorLy8gcmVmbGVjdCB0aGUgaW50ZXJydXB0LgorI2RlZmluZSBVQVJUX0lNU0NfT0VJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfSU1TQ19PRUlNX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVUFSVF9JTVNDX09FSU1fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX0lNU0NfT0VJTV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIEJFSU0KKy8vCisvLyBCcmVhayBlcnJvciBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgVUFSVCdzIGJyZWFrCisvLyBlcnJvciBpbnRlcnJ1cHQuIE9uIGEgd3JpdGUgb2YgMSwgdGhlIG1hc2sgb2YgdGhlIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGlzCisvLyBzZXQgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdCBzdGF0ZSB3aWxsIGJlIHJlZmxlY3RlZCBpbiBNSVMuQkVNSVMuIEEgd3JpdGUKKy8vIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zIE1JUy5CRU1JUyB3aWxsIG5vdCByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfSU1TQ19CRUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9JTVNDX0JFSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBVQVJUX0lNU0NfQkVJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfSU1TQ19CRUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKworLy8gRmllbGQ6ICAgICBbOF0gUEVJTQorLy8KKy8vIFBhcml0eSBlcnJvciBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgVUFSVCdzCisvLyBwYXJpdHkgZXJyb3IgaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mIDEsIHRoZSBtYXNrIG9mIHRoZSBvdmVycnVuIGVycm9yCisvLyBpbnRlcnJ1cHQgaXMgc2V0IHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4KKy8vIE1JUy5QRU1JUy4gQSB3cml0ZSBvZiAwIGNsZWFycyB0aGUgbWFzayB3aGljaCBtZWFucyBNSVMuUEVNSVMgd2lsbCBub3QKKy8vIHJlZmxlY3QgdGhlIGludGVycnVwdC4KKyNkZWZpbmUgVUFSVF9JTVNDX1BFSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX0lNU0NfUEVJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFVBUlRfSU1TQ19QRUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9JTVNDX1BFSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorCisvLyBGaWVsZDogICAgIFs3XSBGRUlNCisvLworLy8gRnJhbWluZyBlcnJvciBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgVUFSVCdzCisvLyBmcmFtaW5nIGVycm9yIGludGVycnVwdC4gT24gYSB3cml0ZSBvZiAxLCB0aGUgbWFzayBvZiB0aGUgb3ZlcnJ1biBlcnJvcgorLy8gaW50ZXJydXB0IGlzIHNldCB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluCisvLyBNSVMuRkVNSVMuIEEgd3JpdGUgb2YgMCBjbGVhcnMgdGhlIG1hc2sgd2hpY2ggbWVhbnMgTUlTLkZFTUlTIHdpbGwgbm90CisvLyByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfSU1TQ19GRUlNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9JTVNDX0ZFSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBVQVJUX0lNU0NfRkVJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfSU1TQ19GRUlNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gUlRJTQorLy8KKy8vIFJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgVUFSVCdzCisvLyByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mIDEsIHRoZSBtYXNrIG9mIHRoZSBvdmVycnVuIGVycm9yCisvLyBpbnRlcnJ1cHQgaXMgc2V0IHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4KKy8vIE1JUy5SVE1JUy4gQSB3cml0ZSBvZiAwIGNsZWFycyB0aGUgbWFzayB3aGljaCBtZWFucyB0aGlzIGJpdGZpZWxkIHdpbGwgbm90CisvLyByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisvLyBUaGUgcmF3IGludGVycnVwdCBmb3IgcmVjZWl2ZSB0aW1lb3V0IFJJUy5SVFJJUyBjYW5ub3QgYmUgc2V0IHVubGVzcyB0aGUKKy8vIG1hc2sgaXMgc2V0IChSVElNID0gMSkuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWFzayBhY3RzIGFzIGFuIGVuYWJsZSBmb3IgcG93ZXIKKy8vIHNhdmluZy4gVGhhdCBpcywgdGhlIHNhbWUgc3RhdHVzIGNhbiBiZSByZWFkIGZyb20gTUlTLlJUTUlTIGFuZCBSSVMuUlRSSVMuCisjZGVmaW5lIFVBUlRfSU1TQ19SVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9JTVNDX1JUSU1fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBVQVJUX0lNU0NfUlRJTV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfSU1TQ19SVElNX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVFhJTQorLy8KKy8vIFRyYW5zbWl0IGludGVycnVwdCBtYXNrLiBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrIGZvciBVQVJUJ3MgdHJhbnNtaXQKKy8vIGludGVycnVwdC4gT24gYSB3cml0ZSBvZiAxLCB0aGUgbWFzayBvZiB0aGUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgaXMgc2V0CisvLyB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluIE1JUy5UWE1JUy4gQSB3cml0ZSBvZiAwCisvLyBjbGVhcnMgdGhlIG1hc2sgd2hpY2ggbWVhbnMgTUlTLlRYTUlTIHdpbGwgbm90IHJlZmxlY3QgdGhlIGludGVycnVwdC4KKyNkZWZpbmUgVUFSVF9JTVNDX1RYSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX0lNU0NfVFhJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFVBUlRfSU1TQ19UWElNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9JTVNDX1RYSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBSWElNCisvLworLy8gUmVjZWl2ZSBpbnRlcnJ1cHQgbWFzay4gQSByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgbWFzayBmb3IgVUFSVCdzIHJlY2VpdmUKKy8vIGludGVycnVwdC4gT24gYSB3cml0ZSBvZiAxLCB0aGUgbWFzayBvZiB0aGUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgaXMgc2V0CisvLyB3aGljaCBtZWFucyB0aGUgaW50ZXJydXB0IHN0YXRlIHdpbGwgYmUgcmVmbGVjdGVkIGluIE1JUy5SWE1JUy4gQSB3cml0ZSBvZiAwCisvLyBjbGVhcnMgdGhlIG1hc2sgd2hpY2ggbWVhbnMgTUlTLlJYTUlTIHdpbGwgbm90IHJlZmxlY3QgdGhlIGludGVycnVwdC4KKyNkZWZpbmUgVUFSVF9JTVNDX1JYSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0lNU0NfUlhJTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVBUlRfSU1TQ19SWElNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9JTVNDX1JYSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsxXSBDVFNNSU0KKy8vCisvLyBDbGVhciB0byBTZW5kIChDVFMpIG1vZGVtIGludGVycnVwdCBtYXNrLiBBIHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCBtYXNrCisvLyBmb3IgVUFSVCdzIGNsZWFyIHRvIHNlbmQgaW50ZXJydXB0LiBPbiBhIHdyaXRlIG9mIDEsIHRoZSBtYXNrIG9mIHRoZSBvdmVycnVuCisvLyBlcnJvciBpbnRlcnJ1cHQgaXMgc2V0IHdoaWNoIG1lYW5zIHRoZSBpbnRlcnJ1cHQgc3RhdGUgd2lsbCBiZSByZWZsZWN0ZWQgaW4KKy8vIE1JUy5DVFNNTUlTLiBBIHdyaXRlIG9mIDAgY2xlYXJzIHRoZSBtYXNrIHdoaWNoIG1lYW5zIE1JUy5DVFNNTUlTIHdpbGwgbm90CisvLyByZWZsZWN0IHRoZSBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfSU1TQ19DVFNNSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9JTVNDX0NUU01JTV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX0lNU0NfQ1RTTUlNX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfSU1TQ19DVFNNSU1fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fUklTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gT0VSSVMKKy8vCisvLyBPdmVycnVuIGVycm9yIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgVUFSVCdzIG92ZXJydW4gZXJyb3IKKy8vIGludGVycnVwdC4gT3ZlcnJ1biBlcnJvciBvY2N1cnMgaWYgZGF0YSBpcyByZWNlaXZlZCBhbmQgdGhlIHJlY2VpdmUgRklGTyBpcworLy8gZnVsbC4KKyNkZWZpbmUgVUFSVF9SSVNfT0VSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX1JJU19PRVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFVBUlRfUklTX09FUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVUFSVF9SSVNfT0VSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyBGaWVsZDogICAgIFs5XSBCRVJJUworLy8KKy8vIEJyZWFrIGVycm9yIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgVUFSVCdzIGJyZWFrIGVycm9yIGludGVycnVwdC4KKy8vIEJyZWFrIGVycm9yIGlzIHNldCB3aGVuIGEgYnJlYWsgY29uZGl0aW9uIGlzIGRldGVjdGVkLCBpbmRpY2F0aW5nIHRoYXQgdGhlCisvLyByZWNlaXZlZCBkYXRhIGlucHV0IChVQVJUUlhEIGlucHV0IHBpbikgd2FzIGhlbGQgTE9XIGZvciBsb25nZXIgdGhhbiBhCisvLyBmdWxsLXdvcmQgdHJhbnNtaXNzaW9uIHRpbWUgKGRlZmluZWQgYXMgc3RhcnQsIGRhdGEsIHBhcml0eSBhbmQgc3RvcCBiaXRzKS4KKyNkZWZpbmUgVUFSVF9SSVNfQkVSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX1JJU19CRVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFVBUlRfUklTX0JFUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9SSVNfQkVSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBQRVJJUworLy8KKy8vIFBhcml0eSBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyBwYXJpdHkgZXJyb3IgaW50ZXJydXB0LgorLy8gUGFyaXR5IGVycm9yIGlzIHNldCBpZiB0aGUgcGFyaXR5IG9mIHRoZSByZWNlaXZlZCBkYXRhIGNoYXJhY3RlciBkb2VzIG5vdAorLy8gbWF0Y2ggdGhlIHBhcml0eSB0aGF0IHRoZSBMQ1JILkVQUyBhbmQgTENSSC5TUFMgc2VsZWN0LgorI2RlZmluZSBVQVJUX1JJU19QRVJJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfUklTX1BFUklTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVUFSVF9SSVNfUEVSSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBVQVJUX1JJU19QRVJJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKy8vIEZpZWxkOiAgICAgWzddIEZFUklTCisvLworLy8gRnJhbWluZyBlcnJvciBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyBmcmFtaW5nIGVycm9yCisvLyBpbnRlcnJ1cHQuIEZyYW1pbmcgZXJyb3IgaXMgc2V0IGlmIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaGF2ZSBhCisvLyB2YWxpZCBzdG9wIGJpdCAoYSB2YWxpZCBzdG9wIGJpdCBpcyAxKS4KKyNkZWZpbmUgVUFSVF9SSVNfRkVSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX1JJU19GRVJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFVBUlRfUklTX0ZFUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9SSVNfRkVSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisvLyBGaWVsZDogICAgIFs2XSBSVFJJUworLy8KKy8vIFJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyByZWNlaXZlIHRpbWVvdXQKKy8vIGludGVycnVwdC4gVGhlIHJlY2VpdmUgdGltZW91dCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgd2hlbiB0aGUgcmVjZWl2ZSBGSUZPCisvLyBpcyBub3QgZW1wdHksIGFuZCBubyBtb3JlIGRhdGEgaXMgcmVjZWl2ZWQgZHVyaW5nIGEgMzItYml0IHBlcmlvZC4gVGhlCisvLyByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IGlzIGNsZWFyZWQgZWl0aGVyIHdoZW4gdGhlIEZJRk8gYmVjb21lcyBlbXB0eQorLy8gdGhyb3VnaCByZWFkaW5nIGFsbCB0aGUgZGF0YSwgb3Igd2hlbiBhIDEgaXMgd3JpdHRlbiB0byBJQ1IuUlRJQy4KKy8vIFRoZSByYXcgaW50ZXJydXB0IGZvciByZWNlaXZlIHRpbWVvdXQgY2Fubm90IGJlIHNldCB1bmxlc3MgdGhlIG1hc2sgaXMgc2V0CisvLyAoSU1TQy5SVElNID0gMSkuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWFzayBhY3RzIGFzIGFuIGVuYWJsZSBmb3IgcG93ZXIKKy8vIHNhdmluZy4gVGhhdCBpcywgdGhlIHNhbWUgc3RhdHVzIGNhbiBiZSByZWFkIGZyb20gTUlTLlJUTUlTIGFuZCBSVFJJUy4KKyNkZWZpbmUgVUFSVF9SSVNfUlRSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX1JJU19SVFJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFVBUlRfUklTX1JUUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9SSVNfUlRSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvLyBGaWVsZDogICAgIFs1XSBUWFJJUworLy8KKy8vIFRyYW5zbWl0IGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIHJhdyBpbnRlcnJ1cHQgc3RhdGUgb2YgVUFSVCdzIHRyYW5zbWl0IGludGVycnVwdC4KKy8vIFdoZW4gRklGT3MgYXJlIGVuYWJsZWQgKExDUkguRkVOID0gMSksIHRoZSB0cmFuc21pdCBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgaWYKKy8vIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgRklGTyBpcyBlcXVhbCB0byBvciBsb3dlciB0aGFuIHRoZQorLy8gcHJvZ3JhbW1lZCB0cmlnZ2VyIGxldmVsIChJRkxTLlRYU0VMKS4gVGhlIHRyYW5zbWl0IGludGVycnVwdCBpcyBjbGVhcmVkIGJ5CisvLyB3cml0aW5nIGRhdGEgdG8gdGhlIHRyYW5zbWl0IEZJRk8gdW50aWwgaXQgYmVjb21lcyBncmVhdGVyIHRoYW4gdGhlIHRyaWdnZXIKKy8vIGxldmVsLCBvciBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IHRocm91Z2ggSUNSLlRYSUMuCisvLyBXaGVuIEZJRk9zIGFyZSBkaXNhYmxlZCAoTENSSC5GRU4gPSAwKSwgdGhhdCBpcyB0aGV5IGhhdmUgYSBkZXB0aCBvZiBvbmUKKy8vIGxvY2F0aW9uLCB0aGUgdHJhbnNtaXQgaW50ZXJydXB0IGlzIGFzc2VydGVkIGlmIHRoZXJlIGlzIG5vIGRhdGEgcHJlc2VudCBpbgorLy8gdGhlIHRyYW5zbWl0dGVycyBzaW5nbGUgbG9jYXRpb24uIEl0IGlzIGNsZWFyZWQgYnkgcGVyZm9ybWluZyBhIHNpbmdsZSB3cml0ZQorLy8gdG8gdGhlIHRyYW5zbWl0IEZJRk8sIG9yIGJ5IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgdGhyb3VnaCBJQ1IuVFhJQy4KKyNkZWZpbmUgVUFSVF9SSVNfVFhSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBVQVJUX1JJU19UWFJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFVBUlRfUklTX1RYUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9SSVNfVFhSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBSWFJJUworLy8KKy8vIFJlY2VpdmUgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgcmF3IGludGVycnVwdCBzdGF0ZSBvZiBVQVJUJ3MgcmVjZWl2ZSBpbnRlcnJ1cHQuCisvLyBXaGVuIEZJRk9zIGFyZSBlbmFibGVkIChMQ1JILkZFTiA9IDEpLCB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgaWYKKy8vIHRoZSByZWNlaXZlIEZJRk8gcmVhY2hlcyB0aGUgcHJvZ3JhbW1lZCB0cmlnZ2VyCisvLyBsZXZlbCAoSUZMUy5SWFNFTCkuIFRoZSByZWNlaXZlIGludGVycnVwdCBpcyBjbGVhcmVkIGJ5IHJlYWRpbmcgZGF0YSBmcm9tCisvLyB0aGUgcmVjZWl2ZSBGSUZPIHVudGlsIGl0IGJlY29tZXMgbGVzcyB0aGFuIHRoZSB0cmlnZ2VyIGxldmVsLCBvciBieQorLy8gY2xlYXJpbmcgdGhlIGludGVycnVwdCB0aHJvdWdoIElDUi5SWElDLgorLy8gV2hlbiBGSUZPcyBhcmUgZGlzYWJsZWQgKExDUkguRkVOID0gMCksIHRoYXQgaXMgdGhleSBoYXZlIGEgZGVwdGggb2Ygb25lCisvLyBsb2NhdGlvbiwgdGhlIHJlY2VpdmUgaW50ZXJydXB0IGlzIGFzc2VydGVkIGlmIGRhdGEgaXMgcmVjZWl2ZWQKKy8vIHRoZXJlYnkgZmlsbGluZyB0aGUgbG9jYXRpb24uIFRoZSByZWNlaXZlIGludGVycnVwdCBpcyBjbGVhcmVkIGJ5IHBlcmZvcm1pbmcKKy8vIGEgc2luZ2xlIHJlYWQgb2YgdGhlIHJlY2VpdmUgRklGTywgb3IgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCB0aHJvdWdoCisvLyBJQ1IuUlhJQy4KKyNkZWZpbmUgVUFSVF9SSVNfUlhSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX1JJU19SWFJJU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVBUlRfUklTX1JYUklTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9SSVNfUlhSSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFsxXSBDVFNSTUlTCisvLworLy8gQ2xlYXIgdG8gU2VuZCAoQ1RTKSBtb2RlbSBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIG9mIFVBUlQncyBjbGVhciB0byBzZW5kCisvLyBpbnRlcnJ1cHQuCisjZGVmaW5lIFVBUlRfUklTX0NUU1JNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9SSVNfQ1RTUk1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX1JJU19DVFNSTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfUklTX0NUU1JNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fTUlTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gT0VNSVMKKy8vCisvLyBPdmVycnVuIGVycm9yIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRoZSBvdmVycnVuIGludGVycnVwdCB3aGljaAorLy8gaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLk9FUklTIGFuZCB0aGUgbWFzayBzZXR0aW5nCisvLyBJTVNDLk9FSU0uCisjZGVmaW5lIFVBUlRfTUlTX09FTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgVUFSVF9NSVNfT0VNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBVQVJUX01JU19PRU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfTUlTX09FTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKworLy8gRmllbGQ6ICAgICBbOV0gQkVNSVMKKy8vCisvLyBCcmVhayBlcnJvciBtYXNrZWQgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiB0aGUgYnJlYWsgZXJyb3IgaW50ZXJydXB0CisvLyB3aGljaCBpcyB0aGUgQU5EIHByb2R1Y3Qgb2YgcmF3IGludGVycnVwdCBzdGF0ZSBSSVMuQkVSSVMgYW5kIHRoZSBtYXNrCisvLyBzZXR0aW5nIElNU0MuQkVJTS4KKyNkZWZpbmUgVUFSVF9NSVNfQkVNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX01JU19CRU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFVBUlRfTUlTX0JFTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9NSVNfQkVNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorCisvLyBGaWVsZDogICAgIFs4XSBQRU1JUworLy8KKy8vIFBhcml0eSBlcnJvciBtYXNrZWQgaW50ZXJydXB0IHN0YXR1czoKKy8vIFRoaXMgZmllbGQgcmV0dXJucyB0aGUgbWFza2VkIGludGVycnVwdCBzdGF0ZSBvZiB0aGUgcGFyaXR5IGVycm9yIGludGVycnVwdAorLy8gd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLlBFUklTIGFuZCB0aGUgbWFzaworLy8gc2V0dGluZyBJTVNDLlBFSU0uCisjZGVmaW5lIFVBUlRfTUlTX1BFTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9NSVNfUEVNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBVQVJUX01JU19QRU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfTUlTX1BFTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRkVNSVMKKy8vCisvLyBGcmFtaW5nIGVycm9yIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOiBSZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mCisvLyB0aGUgZnJhbWluZyBlcnJvciBpbnRlcnJ1cHQgd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUKKy8vIFJJUy5GRVJJUyBhbmQgdGhlIG1hc2sgc2V0dGluZyBJTVNDLkZFSU0uCisjZGVmaW5lIFVBUlRfTUlTX0ZFTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgVUFSVF9NSVNfRkVNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBVQVJUX01JU19GRU1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfTUlTX0ZFTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworLy8gRmllbGQ6ICAgICBbNl0gUlRNSVMKKy8vCisvLyBSZWNlaXZlIHRpbWVvdXQgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyBSZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRoZSByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0LgorLy8gVGhlIHJhdyBpbnRlcnJ1cHQgZm9yIHJlY2VpdmUgdGltZW91dCBjYW5ub3QgYmUgc2V0IHVubGVzcyB0aGUgbWFzayBpcyBzZXQKKy8vIChJTVNDLlJUSU0gPSAxKS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBtYXNrIGFjdHMgYXMgYW4gZW5hYmxlIGZvciBwb3dlcgorLy8gc2F2aW5nLiBUaGF0IGlzLCB0aGUgc2FtZSBzdGF0dXMgY2FuIGJlIHJlYWQgZnJvbSBSVE1JUyBhbmQgUklTLlJUUklTLgorI2RlZmluZSBVQVJUX01JU19SVE1JUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfTUlTX1JUTUlTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVUFSVF9NSVNfUlRNSVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBVQVJUX01JU19SVE1JU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisKKy8vIEZpZWxkOiAgICAgWzVdIFRYTUlTCisvLworLy8gVHJhbnNtaXQgbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgdGhlIHRyYW5zbWl0IGludGVycnVwdAorLy8gd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLlRYUklTIGFuZCB0aGUgbWFzaworLy8gc2V0dGluZyBJTVNDLlRYSU0uCisjZGVmaW5lIFVBUlRfTUlTX1RYTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9NSVNfVFhNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBVQVJUX01JU19UWE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfTUlTX1RYTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gUlhNSVMKKy8vCisvLyBSZWNlaXZlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzOgorLy8gVGhpcyBmaWVsZCByZXR1cm5zIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXRlIG9mIHRoZSByZWNlaXZlIGludGVycnVwdAorLy8gd2hpY2ggaXMgdGhlIEFORCBwcm9kdWN0IG9mIHJhdyBpbnRlcnJ1cHQgc3RhdGUgUklTLlJYUklTIGFuZCB0aGUgbWFzaworLy8gc2V0dGluZyBJTVNDLlJYSU0uCisjZGVmaW5lIFVBUlRfTUlTX1JYTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVUFSVF9NSVNfUlhNSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBVQVJUX01JU19SWE1JU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfTUlTX1JYTUlTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworLy8gRmllbGQ6ICAgICBbMV0gQ1RTTU1JUworLy8KKy8vIENsZWFyIHRvIFNlbmQgKENUUykgbW9kZW0gbWFza2VkIGludGVycnVwdCBzdGF0dXM6CisvLyBUaGlzIGZpZWxkIHJldHVybnMgdGhlIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdGUgb2YgdGhlIGNsZWFyIHRvIHNlbmQgaW50ZXJydXB0CisvLyB3aGljaCBpcyB0aGUgQU5EIHByb2R1Y3Qgb2YgcmF3IGludGVycnVwdCBzdGF0ZSBSSVMuQ1RTUk1JUyBhbmQgdGhlIG1hc2sKKy8vIHNldHRpbmcgSU1TQy5DVFNNSU0uCisjZGVmaW5lIFVBUlRfTUlTX0NUU01NSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9NSVNfQ1RTTU1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX01JU19DVFNNTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfTUlTX0NUU01NSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fSUNSCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgIFsxMF0gT0VJQworLy8KKy8vIE92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSBvdmVycnVuIGVycm9yIGludGVycnVwdCAoUklTLk9FUklTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9PRUlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVBUlRfSUNSX09FSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVUFSVF9JQ1JfT0VJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBVQVJUX0lDUl9PRUlDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8vIEZpZWxkOiAgICAgWzldIEJFSUMKKy8vCisvLyBCcmVhayBlcnJvciBpbnRlcnJ1cHQgY2xlYXI6CisvLyBXcml0aW5nIDEgdG8gdGhpcyBmaWVsZCBjbGVhcnMgdGhlIGJyZWFrIGVycm9yIGludGVycnVwdCAoUklTLkJFUklTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9CRUlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVBUlRfSUNSX0JFSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVUFSVF9JQ1JfQkVJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBVQVJUX0lDUl9CRUlDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8vIEZpZWxkOiAgICAgWzhdIFBFSUMKKy8vCisvLyBQYXJpdHkgZXJyb3IgaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0IChSSVMuUEVSSVMpLgorLy8gV3JpdGluZyAwIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFVBUlRfSUNSX1BFSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgVUFSVF9JQ1JfUEVJQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBVQVJUX0lDUl9QRUlDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVBUlRfSUNSX1BFSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKworLy8gRmllbGQ6ICAgICBbN10gRkVJQworLy8KKy8vIEZyYW1pbmcgZXJyb3IgaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSBmcmFtaW5nIGVycm9yIGludGVycnVwdCAoUklTLkZFUklTKS4KKy8vIFdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9GRUlDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVBUlRfSUNSX0ZFSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVUFSVF9JQ1JfRkVJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBVQVJUX0lDUl9GRUlDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKy8vIEZpZWxkOiAgICAgWzZdIFJUSUMKKy8vCisvLyBSZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSByZWNlaXZlIHRpbWVvdXQgaW50ZXJydXB0IChSSVMuUlRSSVMpLgorLy8gV3JpdGluZyAwIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFVBUlRfSUNSX1JUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgVUFSVF9JQ1JfUlRJQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBVQVJUX0lDUl9SVElDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVBUlRfSUNSX1JUSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLy8gRmllbGQ6ICAgICBbNV0gVFhJQworLy8KKy8vIFRyYW5zbWl0IGludGVycnVwdCBjbGVhcjoKKy8vIFdyaXRpbmcgMSB0byB0aGlzIGZpZWxkIGNsZWFycyB0aGUgdHJhbnNtaXQgaW50ZXJydXB0IChSSVMuVFhSSVMpLiBXcml0aW5nIDAKKy8vIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFVBUlRfSUNSX1RYSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVUFSVF9JQ1JfVFhJQ19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBVQVJUX0lDUl9UWElDX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVBUlRfSUNSX1RYSUNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gUlhJQworLy8KKy8vIFJlY2VpdmUgaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSByZWNlaXZlIGludGVycnVwdCAoUklTLlJYUklTKS4gV3JpdGluZyAwCisvLyBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVQVJUX0lDUl9SWElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVBUlRfSUNSX1JYSUNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVUFSVF9JQ1JfUlhJQ19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBVQVJUX0lDUl9SWElDX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzFdIENUU01JQworLy8KKy8vIENsZWFyIHRvIFNlbmQgKENUUykgbW9kZW0gaW50ZXJydXB0IGNsZWFyOgorLy8gV3JpdGluZyAxIHRvIHRoaXMgZmllbGQgY2xlYXJzIHRoZSBjbGVhciB0byBzZW5kIGludGVycnVwdCAoUklTLkNUU1JNSVMpLgorLy8gV3JpdGluZyAwIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFVBUlRfSUNSX0NUU01JQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9JQ1JfQ1RTTUlDX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBVQVJUX0lDUl9DVFNNSUNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVBUlRfSUNSX0NUU01JQ19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVQVJUX09fRE1BQ1RMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMl0gRE1BT05FUlIKKy8vCisvLyBETUEgb24gZXJyb3IuIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCB0aGUgRE1BIHJlY2VpdmUgcmVxdWVzdCBvdXRwdXRzIChmb3IKKy8vIHNpbmdsZSBhbmQgYnVyc3QgcmVxdWVzdHMpIGFyZSBkaXNhYmxlZCB3aGVuIHRoZSBVQVJUIGVycm9yIGludGVycnVwdCBpcworLy8gYXNzZXJ0ZWQgKG1vcmUgc3BlY2lmaWNhbGx5IGlmIGFueSBvZiB0aGUgZXJyb3IgaW50ZXJydXB0cyBSSVMuUEVSSVMsCisvLyBSSVMuQkVSSVMsIFJJUy5GRVJJUyBvciBSSVMuT0VSSVMgYXJlIGFzc2VydGVkKS4KKyNkZWZpbmUgVUFSVF9ETUFDVExfRE1BT05FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVQVJUX0RNQUNUTF9ETUFPTkVSUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFVBUlRfRE1BQ1RMX0RNQU9ORVJSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgVUFSVF9ETUFDVExfRE1BT05FUlJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvLyBGaWVsZDogICAgIFsxXSBUWERNQUUKKy8vCisvLyBUcmFuc21pdCBETUEgZW5hYmxlLiBJZiB0aGlzIGJpdCBpcyBzZXQgdG8gMSwgRE1BIGZvciB0aGUgdHJhbnNtaXQgRklGTyBpcworLy8gZW5hYmxlZC4KKyNkZWZpbmUgVUFSVF9ETUFDVExfVFhETUFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBVQVJUX0RNQUNUTF9UWERNQUVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFVBUlRfRE1BQ1RMX1RYRE1BRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVUFSVF9ETUFDVExfVFhETUFFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvLyBGaWVsZDogICAgIFswXSBSWERNQUUKKy8vCisvLyBSZWNlaXZlIERNQSBlbmFibGUuIElmIHRoaXMgYml0IGlzIHNldCB0byAxLCBETUEgZm9yIHRoZSByZWNlaXZlIEZJRk8gaXMKKy8vIGVuYWJsZWQuCisjZGVmaW5lIFVBUlRfRE1BQ1RMX1JYRE1BRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVUFSVF9ETUFDVExfUlhETUFFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBVQVJUX0RNQUNUTF9SWERNQUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVBUlRfRE1BQ1RMX1JYRE1BRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19VQVJUX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3VkbWEuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3VkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTlhZGUwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdWRtYS5oCkBAIC0wLDAgKzEsNTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfdWRtYV9oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19VRE1BX0hfXworI2RlZmluZSBfX0hXX1VETUFfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gVURNQSBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBTdGF0dXMKKyNkZWZpbmUgVURNQV9PX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBDb25maWd1cmF0aW9uCisjZGVmaW5lIFVETUFfT19DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gQ2hhbm5lbCBDb250cm9sIERhdGEgQmFzZSBQb2ludGVyCisjZGVmaW5lIFVETUFfT19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworLy8gQ2hhbm5lbCBBbHRlcm5hdGUgQ29udHJvbCBEYXRhIEJhc2UgUG9pbnRlcgorI2RlZmluZSBVRE1BX09fQUxUQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIENoYW5uZWwgV2FpdCBPbiBSZXF1ZXN0IFN0YXR1cworI2RlZmluZSBVRE1BX09fV0FJVE9OUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisKKy8vIENoYW5uZWwgU29mdHdhcmUgUmVxdWVzdAorI2RlZmluZSBVRE1BX09fU09GVFJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisKKy8vIENoYW5uZWwgU2V0IFVzZUJ1cnN0CisjZGVmaW5lIFVETUFfT19TRVRCVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKworLy8gQ2hhbm5lbCBDbGVhciBVc2VCdXJzdAorI2RlZmluZSBVRE1BX09fQ0xFQVJCVVJTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFDCisKKy8vIENoYW5uZWwgU2V0IFJlcXVlc3QgTWFzaworI2RlZmluZSBVRE1BX09fU0VUUkVRTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisKKy8vIENsZWFyIENoYW5uZWwgUmVxdWVzdCBNYXNrCisjZGVmaW5lIFVETUFfT19DTEVBUlJFUU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKKworLy8gU2V0IENoYW5uZWwgRW5hYmxlCisjZGVmaW5lIFVETUFfT19TRVRDSEFOTkVMRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKworLy8gQ2xlYXIgQ2hhbm5lbCBFbmFibGUKKyNkZWZpbmUgVURNQV9PX0NMRUFSQ0hBTk5FTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworCisvLyBDaGFubmVsIFNldCBQcmltYXJ5LUFsdGVybmF0ZQorI2RlZmluZSBVRE1BX09fU0VUQ0hOTFBSSUFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKy8vIENoYW5uZWwgQ2xlYXIgUHJpbWFyeS1BbHRlcm5hdGUKKyNkZWZpbmUgVURNQV9PX0NMRUFSQ0hOTFBSSUFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorCisvLyBTZXQgQ2hhbm5lbCBQcmlvcml0eQorI2RlZmluZSBVRE1BX09fU0VUQ0hOTFBSSU9SSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4CisKKy8vIENsZWFyIENoYW5uZWwgUHJpb3JpdHkKKyNkZWZpbmUgVURNQV9PX0NMRUFSQ0hOTFBSSU9SSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzQworCisvLyBFcnJvciBTdGF0dXMgYW5kIENsZWFyCisjZGVmaW5lIFVETUFfT19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNEMKKworLy8gQ2hhbm5lbCBSZXF1ZXN0IERvbmUKKyNkZWZpbmUgVURNQV9PX1JFUURPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUwNAorCisvLyBDaGFubmVsIFJlcXVlc3QgRG9uZSBNYXNrCisjZGVmaW5lIFVETUFfT19ET05FTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA1MjAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fU1RBVFVTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6IFszMToyOF0gVEVTVAorLy8KKy8vCisvLyAweDA6IENvbnRyb2xsZXIgZG9lcyBub3QgaW5jbHVkZSB0aGUgaW50ZWdyYXRpb24gdGVzdCBsb2dpYworLy8gMHgxOiBDb250cm9sbGVyIGluY2x1ZGVzIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGxvZ2ljCisvLyAweDI6IFVuZGVmaW5lZAorLy8gLi4uCisvLyAweEY6IFVuZGVmaW5lZAorI2RlZmluZSBVRE1BX1NUQVRVU19URVNUX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVETUFfU1RBVFVTX1RFU1RfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgVURNQV9TVEFUVVNfVEVTVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorCisvLyBGaWVsZDogWzIwOjE2XSBUT1RBTENIQU5ORUxTCisvLworLy8gUmVnaXN0ZXIgdmFsdWUgcmV0dXJucyBudW1iZXIgb2YgYXZhaWxhYmxlIHVETUEgY2hhbm5lbHMgbWludXMgb25lLiBGb3IKKy8vIGV4YW1wbGUgYSByZWFkIG91dCB2YWx1ZSBvZjoKKy8vCisvLyAweDAwOiBTaG93IHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCB0byB1c2UgMSB1RE1BIGNoYW5uZWwKKy8vIDB4MDE6IFNob3dzIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCB0byB1c2UgMiB1RE1BIGNoYW5uZWxzCisvLyAuLi4KKy8vIDB4MUY6IFNob3dzIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCB0byB1c2UgMzIgdURNQSBjaGFubmVscworLy8gKDMyLTE9MzE9MHgxRikKKyNkZWZpbmUgVURNQV9TVEFUVVNfVE9UQUxDSEFOTkVMU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBVRE1BX1NUQVRVU19UT1RBTENIQU5ORUxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUYwMDAwCisjZGVmaW5lIFVETUFfU1RBVFVTX1RPVEFMQ0hBTk5FTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKworLy8gRmllbGQ6ICAgWzc6NF0gU1RBVEUKKy8vCisvLyBDdXJyZW50IHN0YXRlIG9mIHRoZSBjb250cm9sIHN0YXRlIG1hY2hpbmUuIFN0YXRlIGNhbiBiZSBvbmUgb2YgdGhlCisvLyBmb2xsb3dpbmc6CisvLworLy8gMHgwOiBJZGxlCisvLyAweDE6IFJlYWRpbmcgY2hhbm5lbCBjb250cm9sbGVyIGRhdGEKKy8vIDB4MjogUmVhZGluZyBzb3VyY2UgZGF0YSBlbmQgcG9pbnRlcgorLy8gMHgzOiBSZWFkaW5nIGRlc3RpbmF0aW9uIGRhdGEgZW5kIHBvaW50ZXIKKy8vIDB4NDogUmVhZGluZyBzb3VyY2UgZGF0YQorLy8gMHg1OiBXcml0aW5nIGRlc3RpbmF0aW9uIGRhdGEKKy8vIDB4NjogV2FpdGluZyBmb3IgdURNQSByZXF1ZXN0IHRvIGNsZWFyCisvLyAweDc6IFdyaXRpbmcgY2hhbm5lbCBjb250cm9sbGVyIGRhdGEKKy8vIDB4ODogU3RhbGxlZAorLy8gMHg5OiBEb25lCisvLyAweEE6IFBlcmlwaGVyYWwgc2NhdHRlci1nYXRoZXIgdHJhbnNpdGlvbgorLy8gMHhCOiBVbmRlZmluZWQKKy8vIC4uLgorLy8gMHhGOiBVbmRlZmluZWQuCisjZGVmaW5lIFVETUFfU1RBVFVTX1NUQVRFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVURNQV9TVEFUVVNfU1RBVEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBVRE1BX1NUQVRVU19TVEFURV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzBdIE1BU1RFUkVOQUJMRQorLy8KKy8vIFNob3dzIHRoZSBlbmFibGUgc3RhdHVzIG9mIHRoZSBjb250cm9sbGVyIGFzIGNvbmZpZ3VyZWQgYnkgQ0ZHLk1BU1RFUkVOQUJMRToKKy8vCisvLyAwOiBDb250cm9sbGVyIGlzIGRpc2FibGVkCisvLyAxOiBDb250cm9sbGVyIGlzIGVuYWJsZWQKKyNkZWZpbmUgVURNQV9TVEFUVVNfTUFTVEVSRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX1NUQVRVU19NQVNURVJFTkFCTEVfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVETUFfU1RBVFVTX01BU1RFUkVOQUJMRV9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVURNQV9TVEFUVVNfTUFTVEVSRU5BQkxFX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19DRkcKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICBbNzo1XSBQUlRPQ1RSTAorLy8KKy8vIFNldHMgdGhlIEFIQi1MaXRlIGJ1cyBwcm90b2NvbCBwcm90ZWN0aW9uIHN0YXRlIGJ5IGNvbnRyb2xsaW5nIHRoZSBBSEIKKy8vIHNpZ25hbCBIUHJvdFszOjFdIGFzIGZvbGxvd3M6CisvLworLy8gQml0IFs3XSBDb250cm9scyBIUHJvdFszXSB0byBpbmRpY2F0ZSBpZiBhIGNhY2hlYWJsZSBhY2Nlc3MgaXMgb2NjdXJyaW5nLgorLy8gQml0IFs2XSBDb250cm9scyBIUHJvdFsyXSB0byBpbmRpY2F0ZSBpZiBhIGJ1ZmZlcmFibGUgYWNjZXNzIGlzIG9jY3VycmluZy4KKy8vIEJpdCBbNV0gQ29udHJvbHMgSFByb3RbMV0gdG8gaW5kaWNhdGUgaWYgYSBwcml2aWxlZ2VkIGFjY2VzcyBpcyBvY2N1cnJpbmcuCisvLworLy8gV2hlbiBiaXQgW25dID0gMSB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIEhQcm90IGJpdCBpcyBoaWdoLgorLy8gV2hlbiBiaXQgW25dID0gMCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIEhQcm90IGJpdCBpcyBsb3cuCisvLworLy8gVGhpcyBmaWVsZCBjb250cm9scyBIUHJvdFszOjFdIHNpZ25hbCBmb3IgYWxsIHRyYW5zYWN0aW9ucyBpbml0aWF0ZWQgYnkgdURNQQorLy8gZXhjZXB0IHR3byB0cmFuc2FjdGlvbnMgYmVsb3c6CisvLyAtIHRoZSByZWFkIGZyb20gdGhlIGFkZHJlc3MgaW5kaWNhdGVkIGJ5IHNvdXJjZSBhZGRyZXNzIHBvaW50ZXIKKy8vIC0gdGhlIHdyaXRlIHRvIHRoZSBhZGRyZXNzIGluZGljYXRlZCBieSBkZXN0aW5hdGlvbiBhZGRyZXNzIHBvaW50ZXIKKy8vIEhQcm90WzM6MV0gZm9yIHRoZXNlIHR3byBleGNlcHRpb25zIGNhbiBiZSBjb250cm9sbGVkIGJ5IGRlZGljYXRlZCBmaWVsZHMgaW4KKy8vIHRoZSBjaGFubmVsIGNvbmZpZ3V0YXRpb24gZGVzY3JpcHRvci4KKyNkZWZpbmUgVURNQV9DRkdfUFJUT0NUUkxfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBVRE1BX0NGR19QUlRPQ1RSTF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEUwCisjZGVmaW5lIFVETUFfQ0ZHX1BSVE9DVFJMX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbMF0gTUFTVEVSRU5BQkxFCisvLworLy8gRW5hYmxlcyB0aGUgY29udHJvbGxlcjoKKy8vCisvLyAwOiBEaXNhYmxlcyB0aGUgY29udHJvbGxlcgorLy8gMTogRW5hYmxlcyB0aGUgY29udHJvbGxlcgorI2RlZmluZSBVRE1BX0NGR19NQVNURVJFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVETUFfQ0ZHX01BU1RFUkVOQUJMRV9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVURNQV9DRkdfTUFTVEVSRU5BQkxFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX0NGR19NQVNURVJFTkFCTEVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0NUUkwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogWzMxOjEwXSBCQVNFUFRSCisvLworLy8gVGhpcyByZWdpc3RlciBwb2ludCB0byB0aGUgYmFzZSBhZGRyZXNzIGZvciB0aGUgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZXMgb2YKKy8vIGVhY2ggRE1BIGNoYW5uZWwuIFRoaXMgaXMgbm90IHN0b3JlZCBpbiBtb2R1bGUsIGJ1dCBpbiBzeXN0ZW0gbWVtb3J5LCB0aHVzCisvLyBzcGFjZSBtdXN0IGJlIGFsbG9jYXRlZCBmb3IgdGhpcyB1c2FnZSB3aGVuIERNQSBpcyBpbiB1c2FnZQorI2RlZmluZSBVRE1BX0NUUkxfQkFTRVBUUl9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFVETUFfQ1RSTF9CQVNFUFRSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZDMDAKKyNkZWZpbmUgVURNQV9DVFJMX0JBU0VQVFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19BTFRDVFJMCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQkFTRVBUUgorLy8KKy8vIFRoaXMgcmVnaXN0ZXIgc2hvd3MgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIGFsdGVybmF0ZSBkYXRhIHN0cnVjdHVyZXMgYW5kCisvLyBpcyBjYWxjdWxhdGVkIGJ5IG1vZHVsZSwgdGh1cyByZWFkIG9ubHkKKyNkZWZpbmUgVURNQV9BTFRDVFJMX0JBU0VQVFJfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX0FMVENUUkxfQkFTRVBUUl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfQUxUQ1RSTF9CQVNFUFRSX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fV0FJVE9OUkVRCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFNUQVRVUworLy8KKy8vIENoYW5uZWwgd2FpdCBvbiByZXF1ZXN0IHN0YXR1czoKKy8vCisvLyBCaXQgW0NoXSA9IDA6IE9uY2UgdURNQSByZWNlaXZlcyBhIHNpbmdsZSBvciBidXJzdCByZXF1ZXN0IG9uIGNoYW5uZWwgQ2gsCisvLyB0aGlzIGNoYW5uZWwgbWF5IGNvbWUgb3V0IG9mIGFjdGl2ZSBzdGF0ZSBldmVuIGlmIHJlcXVlc3QgaXMgc3RpbGwgcHJlc2VudC4KKy8vIEJpdCBbQ2hdID0gMTogT25jZSB1RE1BIHJlY2VpdmVzIGEgc2luZ2xlIG9yIGJ1cnN0IHJlcXVlc3Qgb24gY2hhbm5lbCBDaCwgaXQKKy8vIGtlZXBzIGNoYW5uZWwgQ2ggaW4gYWN0aXZlIHN0YXRlIHVudGlsIHRoZSByZXF1ZXN0cyBhcmUgZGVhc3NlcnRlZC4gVGhpcworLy8gaGFuZHNoYWtlIGlzIG5lY2Vzc2FyeSBmb3IgY2hhbm5lbHMgd2hlcmUgdGhlIHJlcXVlc3RlciBpcyBpbiBhbgorLy8gYXN5bmNocm9ub3VzIGRvbWFpbiBvciBjYW4gcnVuIGF0IHNsb3dlciBjbG9jayBzcGVlZCB0aGFuIHVETUEKKyNkZWZpbmUgVURNQV9XQUlUT05SRVFfQ0hOTFNUQVRVU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX1dBSVRPTlJFUV9DSE5MU1RBVFVTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfV0FJVE9OUkVRX0NITkxTVEFUVVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fU09GVFJFUQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTCisvLworLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBiaXQgdG8gZ2VuZXJhdGUgYSBzb2Z0d2FyZSB1RE1BIHJlcXVlc3Qgb24gdGhlCisvLyBjb3JyZXNwb25kaW5nIHVETUEgY2hhbm5lbAorLy8KKy8vIEJpdCBbQ2hdID0gMDogRG9lcyBub3QgY3JlYXRlIGEgdURNQSByZXF1ZXN0IGZvciBjaGFubmVsIENoCisvLyBCaXQgW0NoXSA9IDE6IENyZWF0ZXMgYSB1RE1BIHJlcXVlc3QgZm9yIGNoYW5uZWwgQ2gKKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgdURNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBkb2VzIG5vdCBjcmVhdGUgYQorLy8gdURNQSByZXF1ZXN0IGZvciB0aGF0IGNoYW5uZWwKKyNkZWZpbmUgVURNQV9TT0ZUUkVRX0NITkxTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX1NPRlRSRVFfQ0hOTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfU09GVFJFUV9DSE5MU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fU0VUQlVSU1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFJldHVybnMgdGhlIHVzZWJ1cnN0IHN0YXR1cywgb3IgZGlzYWJsZXMgaW5kaXZpZHVhbCBjaGFubmVscyBmcm9tIGdlbmVyYXRpbmcKKy8vIHNpbmdsZSB1RE1BIHJlcXVlc3RzLiBUaGUgdmFsdWUgUiBpcyB0aGUgYXJiaXRyYXRpb24gcmF0ZSBhbmQgc3RvcmVkIGluIHRoZQorLy8gY29udHJvbGxlciBkYXRhIHN0cnVjdHVyZS4KKy8vCisvLyBSZWFkIGFzOgorLy8KKy8vIEJpdCBbQ2hdID0gMDogdURNQSBjaGFubmVsIENoIHJlc3BvbmRzIHRvIGJvdGggYnVyc3QgYW5kIHNpbmdsZSByZXF1ZXN0cyBvbgorLy8gY2hhbm5lbCBDLiBUaGUgY29udHJvbGxlciBwZXJmb3JtcyAyXlIsIG9yIHNpbmdsZSwgYnVzIHRyYW5zZmVycy4KKy8vCisvLyBCaXQgW0NoXSA9IDE6IHVETUEgY2hhbm5lbCBDaCBkb2VzIG5vdCByZXNwb25kIHRvIHNpbmdsZSB0cmFuc2ZlciByZXF1ZXN0cy4KKy8vIFRoZSBjb250cm9sbGVyIG9ubHkgcmVzcG9uZHMgdG8gYnVyc3QgdHJhbnNmZXIgcmVxdWVzdHMgYW5kIHBlcmZvcm1zIDJeUgorLy8gdHJhbnNmZXJzLgorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuIFVzZSB0aGUgQ0xFQVJCVVJTVC5DSE5MUyB0byBzZXQgYml0IFtDaF0gdG8gMC4KKy8vIEJpdCBbQ2hdID0gMTogRGlzYWJsZXMgc2luZ2xlIHRyYW5zZmVyIHJlcXVlc3RzIG9uIGNoYW5uZWwgQ2guIFRoZQorLy8gY29udHJvbGxlciBwZXJmb3JtcyAyXlIgdHJhbnNmZXJzIGZvciBidXJzdCByZXF1ZXN0cy4KKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgdURNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0CisjZGVmaW5lIFVETUFfU0VUQlVSU1RfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9TRVRCVVJTVF9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1NFVEJVUlNUX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0NMRUFSQlVSU1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFNldCB0aGUgYXBwcm9wcmlhdGUgYml0IHRvIGVuYWJsZSBzaW5nbGUgdHJhbnNmZXIgcmVxdWVzdHMuCisvLworLy8gV3JpdGUgYXM6CisvLworLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuIFVzZSB0aGUgU0VUQlVSU1QuQ0hOTFMgdG8gZGlzYWJsZSBzaW5nbGUgdHJhbnNmZXIKKy8vIHJlcXVlc3RzLgorLy8KKy8vIEJpdCBbQ2hdID0gMTogRW5hYmxlcyBzaW5nbGUgdHJhbnNmZXIgcmVxdWVzdHMgb24gY2hhbm5lbCBDaC4KKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgRE1BIGNoYW5uZWwgaXMgbm90IGltcGxlbWVudGVkIGhhcyBubyBlZmZlY3QuCisjZGVmaW5lIFVETUFfQ0xFQVJCVVJTVF9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9DTEVBUkJVUlNUX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX0NMRUFSQlVSU1RfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX1NFVFJFUU1BU0sKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFJldHVybnMgdGhlIGJ1cnN0IGFuZCBzaW5nbGUgcmVxdWVzdCBtYXNrIHN0YXR1cywgb3IgZGlzYWJsZXMgdGhlCisvLyBjb3JyZXNwb25kaW5nIGNoYW5uZWwgZnJvbSBnZW5lcmF0aW5nIHVETUEgcmVxdWVzdHMuCisvLworLy8gUmVhZCBhczoKKy8vIEJpdCBbQ2hdID0gMDogRXh0ZXJuYWwgcmVxdWVzdHMgYXJlIGVuYWJsZWQgZm9yIGNoYW5uZWwgQ2guCisvLyBCaXQgW0NoXSA9IDE6IEV4dGVybmFsIHJlcXVlc3RzIGFyZSBkaXNhYmxlZCBmb3IgY2hhbm5lbCBDaC4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIENMRUFSUkVRTUFTSy5DSE5MUyB0byBlbmFibGUgdURNQSByZXF1ZXN0cy4KKy8vIEJpdCBbQ2hdID0gMTogRGlzYWJsZXMgdURNQSBidXJzdCByZXF1ZXN0IGNoYW5uZWwgW0NdIGFuZCB1RE1BIHNpbmdsZQorLy8gcmVxdWVzdCBjaGFubmVsIFtDXSBpbnB1dCBmcm9tIGdlbmVyYXRpbmcgdURNQSByZXF1ZXN0cy4KKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgdURNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0CisjZGVmaW5lIFVETUFfU0VUUkVRTUFTS19DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9TRVRSRVFNQVNLX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1NFVFJFUU1BU0tfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0NMRUFSUkVRTUFTSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTCisvLworLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBiaXQgdG8gZW5hYmxlIERNQSByZXF1ZXN0IGZvciB0aGUgY2hhbm5lbC4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIFNFVFJFUU1BU0suQ0hOTFMgdG8gZGlzYWJsZSBjaGFubmVsIEMgZnJvbQorLy8gZ2VuZXJhdGluZyByZXF1ZXN0cy4KKy8vIEJpdCBbQ2hdID0gMTogRW5hYmxlcyBjaGFubmVsIFtDXSB0byBnZW5lcmF0ZSBETUEgcmVxdWVzdHMuCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIERNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0LgorI2RlZmluZSBVRE1BX0NMRUFSUkVRTUFTS19DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfQ0xFQVJSRVFNQVNLX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9DTEVBUlJFUU1BU0tfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19TRVRDSEFOTkVMRU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFJldHVybnMgdGhlIGVuYWJsZSBzdGF0dXMgb2YgdGhlIGNoYW5uZWxzLCBvciBlbmFibGVzIHRoZSBjb3JyZXNwb25kaW5nCisvLyBjaGFubmVscy4KKy8vCisvLyBSZWFkIGFzOgorLy8gQml0IFtDaF0gPSAwOiBDaGFubmVsIENoIGlzIGRpc2FibGVkLgorLy8gQml0IFtDaF0gPSAxOiBDaGFubmVsIENoIGlzIGVuYWJsZWQuCisvLworLy8gV3JpdGUgYXM6CisvLyBCaXQgW0NoXSA9IDA6IE5vIGVmZmVjdC4gVXNlIHRoZSBDTEVBUkNIQU5ORUxFTi5DSE5MUyB0byBkaXNhYmxlIGEgY2hhbm5lbAorLy8gQml0IFtDaF0gPSAxOiBFbmFibGVzIGNoYW5uZWwgQ2gKKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgRE1BIGNoYW5uZWwgaXMgbm90IGltcGxlbWVudGVkIGhhcyBubyBlZmZlY3QKKyNkZWZpbmUgVURNQV9TRVRDSEFOTkVMRU5fQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX1NFVENIQU5ORUxFTl9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfU0VUQ0hBTk5FTEVOX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBVRE1BX09fQ0xFQVJDSEFOTkVMRU4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFNldCB0aGUgYXBwcm9wcmlhdGUgYml0IHRvIGRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcgdURNQSBjaGFubmVsLgorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuIFVzZSB0aGUgU0VUQ0hBTk5FTEVOLkNITkxTIHRvIGVuYWJsZSB1RE1BIGNoYW5uZWxzLgorLy8gQml0IFtDaF0gPSAxOiBEaXNhYmxlcyBjaGFubmVsIENoCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX0NMRUFSQ0hBTk5FTEVOX0NITkxTX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfQ0xFQVJDSEFOTkVMRU5fQ0hOTFNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9DTEVBUkNIQU5ORUxFTl9DSE5MU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19TRVRDSE5MUFJJQUxUCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBSZXR1cm5zIHRoZSBjaGFubmVsIGNvbnRyb2wgZGF0YSBzdHJ1Y3R1cmUgc3RhdHVzLCBvciBzZWxlY3RzIHRoZSBhbHRlcm5hdGUKKy8vIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgY29ycmVzcG9uZGluZyB1RE1BIGNoYW5uZWwuCisvLworLy8gUmVhZCBhczoKKy8vIEJpdCBbQ2hdID0gMDogdURNQSBjaGFubmVsIENoIGlzIHVzaW5nIHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlLgorLy8gQml0IFtDaF0gPSAxOiB1RE1BIGNoYW5uZWwgQ2ggaXMgdXNpbmcgdGhlIGFsdGVybmF0ZSBkYXRhIHN0cnVjdHVyZS4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIENMRUFSQ0hOTFBSSUFMVC5DSE5MUyB0byBkaXNhYmxlIGEgY2hhbm5lbAorLy8gQml0IFtDaF0gPSAxOiBTZWxlY3RzIHRoZSBhbHRlcm5hdGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNoYW5uZWwgQ2gKKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgdURNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0CisjZGVmaW5lIFVETUFfU0VUQ0hOTFBSSUFMVF9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9TRVRDSE5MUFJJQUxUX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1NFVENITkxQUklBTFRfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0NMRUFSQ0hOTFBSSUFMVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTCisvLworLy8gQ2xlYXJzIHRoZSBhcHByb3ByaWF0ZSBiaXQgdG8gc2VsZWN0IHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlIGZvciB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgdURNQSBjaGFubmVsLgorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuIFVzZSB0aGUgU0VUQ0hOTFBSSUFMVC5DSE5MUyB0byBzZWxlY3QgdGhlIGFsdGVybmF0ZQorLy8gZGF0YSBzdHJ1Y3R1cmUuCisvLyBCaXQgW0NoXSA9IDE6IFNlbGVjdHMgdGhlIHByaW1hcnkgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNoYW5uZWwgQ2guCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX0NMRUFSQ0hOTFBSSUFMVF9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfQ0xFQVJDSE5MUFJJQUxUX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9DTEVBUkNITkxQUklBTFRfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19TRVRDSE5MUFJJT1JJVFkKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFJldHVybnMgdGhlIGNoYW5uZWwgcHJpb3JpdHkgbWFzayBzdGF0dXMsIG9yIHNldHMgdGhlIGNoYW5uZWwgcHJpb3JpdHkgdG8KKy8vIGhpZ2guCisvLworLy8gUmVhZCBhczoKKy8vIEJpdCBbQ2hdID0gMDogdURNQSBjaGFubmVsIENoIGlzIHVzaW5nIHRoZSBkZWZhdWx0IHByaW9yaXR5IGxldmVsLgorLy8gQml0IFtDaF0gPSAxOiB1RE1BIGNoYW5uZWwgQ2ggaXMgdXNpbmcgYSBoaWdoIHByaW9yaXR5IGxldmVsLgorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBObyBlZmZlY3QuIFVzZSB0aGUgQ0xFQVJDSE5MUFJJT1JJVFkuQ0hOTFMgdG8gc2V0IGNoYW5uZWwgQ2gKKy8vIHRvIHRoZSBkZWZhdWx0IHByaW9yaXR5IGxldmVsLgorLy8gQml0IFtDaF0gPSAxOiBDaGFubmVsIENoIHVzZXMgdGhlIGhpZ2ggcHJpb3JpdHkgbGV2ZWwuCisvLworLy8gV3JpdGluZyB0byBhIGJpdCB3aGVyZSBhIHVETUEgY2hhbm5lbCBpcyBub3QgaW1wbGVtZW50ZWQgaGFzIG5vIGVmZmVjdAorI2RlZmluZSBVRE1BX1NFVENITkxQUklPUklUWV9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFVETUFfU0VUQ0hOTFBSSU9SSVRZX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgVURNQV9TRVRDSE5MUFJJT1JJVFlfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFVETUFfT19DTEVBUkNITkxQUklPUklUWQorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIENITkxTCisvLworLy8gQ2xlYXIgdGhlIGFwcHJvcHJpYXRlIGJpdCB0byBzZWxlY3QgdGhlIGRlZmF1bHQgcHJpb3JpdHkgbGV2ZWwgZm9yIHRoZQorLy8gc3BlY2lmaWVkIHVETUEgY2hhbm5lbC4KKy8vCisvLyBXcml0ZSBhczoKKy8vIEJpdCBbQ2hdID0gMDogTm8gZWZmZWN0LiBVc2UgdGhlIFNFVENITkxQUklPUklUWS5DSE5MUyB0byBzZXQgY2hhbm5lbCBDaCB0bworLy8gdGhlIGhpZ2ggcHJpb3JpdHkgbGV2ZWwuCisvLyBCaXQgW0NoXSA9IDE6IENoYW5uZWwgQ2ggdXNlcyB0aGUgZGVmYXVsdCBwcmlvcml0eSBsZXZlbC4KKy8vCisvLyBXcml0aW5nIHRvIGEgYml0IHdoZXJlIGEgdURNQSBjaGFubmVsIGlzIG5vdCBpbXBsZW1lbnRlZCBoYXMgbm8gZWZmZWN0CisjZGVmaW5lIFVETUFfQ0xFQVJDSE5MUFJJT1JJVFlfQ0hOTFNfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9DTEVBUkNITkxQUklPUklUWV9DSE5MU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX0NMRUFSQ0hOTFBSSU9SSVRZX0NITkxTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0VSUk9SCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gU1RBVFVTCisvLworLy8gUmV0dXJucyB0aGUgc3RhdHVzIG9mIGJ1cyBlcnJvciBmbGFnIGluIHVETUEsIG9yIGNsZWFycyB0aGlzIGJpdAorLy8KKy8vIFJlYWQgYXM6CisvLworLy8gMDogTm8gYnVzIGVycm9yIGRldGVjdGVkCisvLyAxOiBCdXMgZXJyb3IgZGV0ZWN0ZWQKKy8vCisvLyBXcml0ZSBhczoKKy8vCisvLyAwOiBObyBlZmZlY3QsIHN0YXR1cyBvZiBidXMgZXJyb3IgZmxhZyBpcyB1bmNoYW5nZWQuCisvLyAxOiBDbGVhcnMgdGhlIGJ1cyBlcnJvciBmbGFnLgorI2RlZmluZSBVRE1BX0VSUk9SX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFVETUFfRVJST1JfU1RBVFVTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVURNQV9FUlJPUl9TVEFUVVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBVRE1BX0VSUk9SX1NUQVRVU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX1JFUURPTkUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBDSE5MUworLy8KKy8vIFJlZmxlY3RzIHRoZSB1RE1BIGRvbmUgc3RhdHVzIGZvciB0aGUgZ2l2ZW4gY2hhbm5lbCwgY2hhbm5lbCBbQ2hdLiBJdCdzIGEKKy8vIHN0aWNreSBkb25lIGJpdC4gVW5sZXNzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEsIGl0IGhvbGRzIHRoZSB2YWx1ZSBvZiAxLgorLy8KKy8vIFJlYWQgYXM6CisvLyBCaXQgW0NoXSA9IDA6IFJlcXVlc3QgaGFzIG5vdCBjb21wbGV0ZWQgZm9yIGNoYW5uZWwgQ2gKKy8vIEJpdCBbQ2hdID0gMTogUmVxdWVzdCBoYXMgY29tcGxldGVkIGZvciB0aGUgY2hhbm5lbCBDaAorLy8KKy8vIFdyaXRpbmcgYSAxIHRvIGluZGl2aWR1YWwgYml0cyB3b3VsZCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBiaXQuCisvLworLy8gV3JpdGUgYXM6CisvLyBCaXQgW0NoXSA9IDA6IE5vIGVmZmVjdC4KKy8vIEJpdCBbQ2hdID0gMTogVGhlIGNvcnJlc3BvbmRpbmcgW0NoXSBiaXQgaXMgY2xlYXJlZCAgYW5kIGlzIHNldCB0byAwCisjZGVmaW5lIFVETUFfUkVRRE9ORV9DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVURNQV9SRVFET05FX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBVRE1BX1JFUURPTkVfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogVURNQV9PX0RPTkVNQVNLCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICBbMzE6MF0gQ0hOTFMKKy8vCisvLyBDb250cm9scyB0aGUgcHJvcGFnYXRpb24gb2YgdGhlIHVETUEgZG9uZSBhbmQgYWN0aXZlIHN0YXRlIHRvIHRoZSBhc3NpZ25lZAorLy8gcGVyaXBoZXJhbC4gU3BlY2lmaWNhbGx5IHVzZWQgZm9yIHNvZnR3YXJlIGNoYW5uZWxzLgorLy8KKy8vIFJlYWQgYXM6CisvLyBCaXQgW0NoXSA9IDA6IHVETUEgZG9uZSBhbmQgYWN0aXZlIHN0YXRlIGZvciBjaGFubmVsIENoIGlzIG5vdCBibG9ja2VkIGZyb20KKy8vIHJlYWNoaW5nIHRvIHRoZSBwZXJpcGhlcmFscy4KKy8vIE5vdGUgdGhhdCB0aGUgdURNQSBkb25lIHN0YXRlIGZvciBjaGFubmVsIFtDaF0gaXMgYmxvY2tlZCBmcm9tIGNvbnRyaWJ1dGluZworLy8gdG8gZ2VuZXJhdGlvbiBvZiBjb21iaW5lZCB1RE1BIGRvbmUgc2lnbmFsCisvLworLy8gQml0IFtDaF0gPSAxOiB1RE1BIGRvbmUgYW5kIGFjdGl2ZSBzdGF0ZSBmb3IgY2hhbm5lbCBDaCBpcyBibG9ja2VkIGZyb20KKy8vIHJlYWNoaW5nIHRvIHRoZSBwZXJpcGhlcmFscy4KKy8vIE5vdGUgdGhhdCB0aGUgdURNQSBkb25lIHN0YXRlIGZvciBjaGFubmVsIFtDaF0gaXMgbm90IGJsb2NrZWQgZnJvbQorLy8gY29udHJpYnV0aW5nIHRvIGdlbmVyYXRpb24gb2YgY29tYmluZWQgdURNQSBkb25lIHNpZ25hbAorLy8KKy8vIFdyaXRlIGFzOgorLy8gQml0IFtDaF0gPSAwOiBBbGxvd3MgdURNQSBkb25lIGFuZCBhY3RpdmUgc3RhdCB0byBwcm9wYWdhdGUgdG8gdGhlCisvLyBwZXJpcGhlcmFscy4KKy8vIE5vdGUgdGhhdCB0aGlzIGRpc2FibGVzIHVETUEgZG9uZSBzdGF0ZSBmb3IgY2hhbm5lbCBbQ2hdIGZyb20gY29udHJpYnV0aW5nCisvLyB0byBnZW5lcmF0aW9uIG9mIGNvbWJpbmVkIHVETUEgZG9uZSBzaWduYWwKKy8vCisvLyBCaXQgW0NoXSA9IDE6IEJsb2NrcyB1RE1BIGRvbmUgYW5kIGFjdGl2ZSBzdGF0ZSB0byBwcm9wYWdhdGUgdG8gdGhlCisvLyBwZXJpcGhlcmFscy4KKy8vIE5vdGUgdGhhdCB0aGlzIGVuYWJsZXMgdURNQSBkb25lIGZvciAgY2hhbm5lbCBbQ2hdIHRvIGNvbnRyaWJ1dGUgdG8KKy8vIGdlbmVyYXRpb24gb2YgY29tYmluZWQgdURNQSBkb25lIHNpZ25hbC4KKyNkZWZpbmUgVURNQV9ET05FTUFTS19DSE5MU19XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBVRE1BX0RPTkVNQVNLX0NITkxTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFVETUFfRE9ORU1BU0tfQ0hOTFNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCisjZW5kaWYgLy8gX19VRE1BX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3ZpbXMuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3ZpbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDA2NjhjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfdmltcy5oCkBAIC0wLDAgKzEsMjA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfdmltc19oCisqICBSZXZpc2VkOiAgICAgICAgMjAxNi0wMy0xNCAwOToyMDo1OSArMDEwMCAoTW9uLCAxNCBNYXIgMjAxNikKKyogIFJldmlzaW9uOiAgICAgICA0NTkyNAorKgorKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqCisqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19IV19WSU1TX0hfXworI2RlZmluZSBfX0hXX1ZJTVNfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gVklNUyBjb21wb25lbnQKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBTdGF0dXMKKyNkZWZpbmUgVklNU19PX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBDb250cm9sCisjZGVmaW5lIFZJTVNfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBWSU1TX09fU1RBVAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgICAgWzVdIElEQ09ERV9MQl9ESVMKKy8vCisvLyBJY29kZS9EY29kZSBmbGFzaCBsaW5lIGJ1ZmZlciBzdGF0dXMKKy8vCisvLyAwOiBFbmFibGVkIG9yIGluIHRyYW5zaXRpb24gdG8gZGlzYWJsZWQKKy8vIDE6IERpc2FibGVkIGFuZCBmbHVzaGVkCisjZGVmaW5lIFZJTVNfU1RBVF9JRENPREVfTEJfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVklNU19TVEFUX0lEQ09ERV9MQl9ESVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBWSU1TX1NUQVRfSURDT0RFX0xCX0RJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFZJTVNfU1RBVF9JRENPREVfTEJfRElTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworLy8gRmllbGQ6ICAgICBbNF0gU1lTQlVTX0xCX0RJUworLy8KKy8vIFN5c2J1cyBmbGFzaCBsaW5lIGJ1ZmZlciBjb250cm9sCisvLworLy8gMDogRW5hYmxlZCBvciBpbiB0cmFuc2l0aW9uIHRvIGRpc2FibGVkCisvLyAxOiBEaXNhYmxlZCBhbmQgZmx1c2hlZAorI2RlZmluZSBWSU1TX1NUQVRfU1lTQlVTX0xCX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFZJTVNfU1RBVF9TWVNCVVNfTEJfRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVklNU19TVEFUX1NZU0JVU19MQl9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBWSU1TX1NUQVRfU1lTQlVTX0xCX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisKKy8vIEZpZWxkOiAgICAgWzNdIE1PREVfQ0hBTkdJTkcKKy8vCisvLyBWSU1TIG1vZGUgY2hhbmdlIHN0YXR1cworLy8KKy8vIDA6IFZJTVMgaXMgaW4gdGhlIG1vZGUgZGVmaW5lZCBieSBNT0RFCisvLyAxOiBWSU1TIGlzIGluIHRoZSBwcm9jZXNzIG9mIGNoYW5naW5nIHRvIHRoZSBtb2RlIGdpdmVuIGluIENUTC5NT0RFCisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVklNU19TVEFUX01PREVfQ0hBTkdJTkdfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9DSEFOR0lOR19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX0NIQU5HSU5HX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLy8gRmllbGQ6ICAgICBbMl0gSU5WCisvLworLy8gVGhpcyBiaXQgaXMgc2V0IHdoZW4gaW52YWxpZGF0aW9uIG9mIHRoZSBjYWNoZSBtZW1vcnkgaXMgYWN0aXZlIC8gb25nb2luZworI2RlZmluZSBWSU1TX1NUQVRfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFZJTVNfU1RBVF9JTlZfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVklNU19TVEFUX0lOVl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBWSU1TX1NUQVRfSU5WX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIE1PREUKKy8vCisvLyBDdXJyZW50IFZJTVMgbW9kZQorLy8gRU5VTXM6CisvLyBPRkYgICAgICAgICAgICAgICAgICAgICAgVklNUyBPZmYgbW9kZQorLy8gQ0FDSEUgICAgICAgICAgICAgICAgICAgIFZJTVMgQ2FjaGUgbW9kZQorLy8gR1BSQU0gICAgICAgICAgICAgICAgICAgIFZJTVMgR1BSQU0gbW9kZQorI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgVklNU19TVEFUX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBWSU1TX1NUQVRfTU9ERV9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFZJTVNfU1RBVF9NT0RFX0NBQ0hFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVklNU19TVEFUX01PREVfR1BSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFZJTVNfT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgWzMxXSBTVEFUU19DTFIKKy8vCisvLyBTZXQgdGhpcyBiaXQgdG8gY2xlYXIgc3RhdGlzdGljIGNvdW50ZXJzLgorI2RlZmluZSBWSU1TX0NUTF9TVEFUU19DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFZJTVNfQ1RMX1NUQVRTX0NMUl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgVklNU19DVExfU1RBVFNfQ0xSX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWSU1TX0NUTF9TVEFUU19DTFJfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKy8vIEZpZWxkOiAgICBbMzBdIFNUQVRTX0VOCisvLworLy8gU2V0IHRoaXMgYml0IHRvIGVuYWJsZSBzdGF0aXN0aWMgY291bnRlcnMuCisjZGVmaW5lIFZJTVNfQ1RMX1NUQVRTX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVklNU19DVExfU1RBVFNfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBWSU1TX0NUTF9TVEFUU19FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFZJTVNfQ1RMX1NUQVRTX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKworLy8gRmllbGQ6ICAgIFsyOV0gRFlOX0NHX0VOCisvLworLy8gMDogVGhlIGluLWJ1aWx0IGNsb2NrIGdhdGUgZnVuY3Rpb25hbGl0eSBpcyBieXBhc3NlZC4KKy8vIDE6IFRoZSBpbi1idWlsdCBjbG9jayBnYXRlIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCwgYXV0b21hdGljYWxseSBnYXRpbmcKKy8vIHRoZSBjbG9jayB3aGVuIG5vdCBuZWVkZWQuCisjZGVmaW5lIFZJTVNfQ1RMX0RZTl9DR19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVklNU19DVExfRFlOX0NHX0VOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBWSU1TX0NUTF9EWU5fQ0dfRU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFZJTVNfQ1RMX0RZTl9DR19FTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKworLy8gRmllbGQ6ICAgICBbNV0gSURDT0RFX0xCX0RJUworLy8KKy8vIEljb2RlL0Rjb2RlIGZsYXNoIGxpbmUgYnVmZmVyIGNvbnRyb2wKKy8vCisvLyAwOiBFbmFibGUKKy8vIDE6IERpc2FibGUKKyNkZWZpbmUgVklNU19DVExfSURDT0RFX0xCX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBWSU1TX0NUTF9JRENPREVfTEJfRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFZJTVNfQ1RMX0lEQ09ERV9MQl9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgVklNU19DVExfSURDT0RFX0xCX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisvLyBGaWVsZDogICAgIFs0XSBTWVNCVVNfTEJfRElTCisvLworLy8gU3lzYnVzIGZsYXNoIGxpbmUgYnVmZmVyIGNvbnRyb2wKKy8vCisvLyAwOiBFbmFibGUKKy8vIDE6IERpc2FibGUKKyNkZWZpbmUgVklNU19DVExfU1lTQlVTX0xCX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBWSU1TX0NUTF9TWVNCVVNfTEJfRElTX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFZJTVNfQ1RMX1NZU0JVU19MQl9ESVNfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVklNU19DVExfU1lTQlVTX0xCX0RJU19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisvLyBGaWVsZDogICAgIFszXSBBUkJfQ0ZHCisvLworLy8gSWNvZGUvRGNvZGUgYW5kIHN5c2J1cyBhcmJpdGF0aW9uIHNjaGVtZQorLy8KKy8vIDA6IFN0YXRpYyBhcmJpdHJhdGlvbiAgKGljb2RlL2RvY2RlID4gc3lzYnVzKQorLy8gMTogUm91bmQtcm9iaW4gYXJiaXRyYXRpb24KKyNkZWZpbmUgVklNU19DVExfQVJCX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBWSU1TX0NUTF9BUkJfQ0ZHX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFZJTVNfQ1RMX0FSQl9DRkdfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVklNU19DVExfQVJCX0NGR19TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvLyBGaWVsZDogICAgIFsyXSBQUkVGX0VOCisvLworLy8gVGFnIHByZWZldGNoIGNvbnRyb2wKKy8vCisvLyAwOiBEaXNhYmxlZAorLy8gMTogRW5hYmxlZAorI2RlZmluZSBWSU1TX0NUTF9QUkVGX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFZJTVNfQ1RMX1BSRUZfRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVklNU19DVExfUFJFRl9FTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBWSU1TX0NUTF9QUkVGX0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEZpZWxkOiAgIFsxOjBdIE1PREUKKy8vCisvLyBWSU1TIG1vZGUgcmVxdWVzdC4KKy8vIFdyaXRlIGFjY2Vzc2VzIHRvIHRoaXMgZmllbGQgd2lsbCBiZSBibG9ja2VkIHdoaWxlIFNUQVQuTU9ERV9DSEFOR0lORyBpcyBzZXQKKy8vIHRvIDEuCisvLyBOb3RlOiBUcmFuc2FjdGlvbiBmcm9tIENBQ0hFIG1vZGUgdG8gR1BSQU0gbW9kZSBzaG91bGQgYmUgZG9uZSB0aHJvdWdoIE9GRgorLy8gbW9kZSB0byBtaW5pbWl6ZSBmbGFzaCBibG9jayBkZWxheS4KKy8vIEVOVU1zOgorLy8gT0ZGICAgICAgICAgICAgICAgICAgICAgIFZJTVMgT2ZmIG1vZGUKKy8vIENBQ0hFICAgICAgICAgICAgICAgICAgICBWSU1TIENhY2hlIG1vZGUKKy8vIEdQUkFNICAgICAgICAgICAgICAgICAgICBWSU1TIEdQUkFNIG1vZGUKKyNkZWZpbmUgVklNU19DVExfTU9ERV9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBWSU1TX0NUTF9NT0RFX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFZJTVNfQ1RMX01PREVfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVklNU19DVExfTU9ERV9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBWSU1TX0NUTF9NT0RFX0NBQ0hFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFZJTVNfQ1RMX01PREVfR1BSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworCisjZW5kaWYgLy8gX19WSU1TX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3dkdC5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9pbmMvaHdfd2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMDVjZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvaW5jL2h3X3dkdC5oCkBAIC0wLDAgKzEsMjkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgaHdfd2R0X2gKKyogIFJldmlzZWQ6ICAgICAgICAyMDE2LTAzLTE0IDA5OjIwOjU5ICswMTAwIChNb24sIDE0IE1hciAyMDE2KQorKiAgUmV2aXNpb246ICAgICAgIDQ1OTI0CisqCisqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTYsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0hXX1dEVF9IX18KKyNkZWZpbmUgX19IV19XRFRfSF9fCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBvZgorLy8gV0RUIGNvbXBvbmVudAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIENvbmZpZ3VyYXRpb24KKyNkZWZpbmUgV0RUX09fTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBDdXJyZW50IENvdW50IFZhbHVlCisjZGVmaW5lIFdEVF9PX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLy8gQ29udHJvbAorI2RlZmluZSBXRFRfT19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisKKy8vIEludGVycnVwdCBDbGVhcgorI2RlZmluZSBXRFRfT19JQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCisKKy8vIFJhdyBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIFdEVF9PX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKworLy8gTWFza2VkIEludGVycnVwdCBTdGF0dXMKKyNkZWZpbmUgV0RUX09fTUlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorCisvLyBUZXN0IE1vZGUKKyNkZWZpbmUgV0RUX09fVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQxOAorCisvLyBJbnRlcnJ1cHQgQ2F1c2UgVGVzdCBNb2RlCisjZGVmaW5lIFdEVF9PX0lOVF9DQVVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MUMKKworLy8gTG9jaworI2RlZmluZSBXRFRfT19MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwQzAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fTE9BRAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFdEVExPQUQKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGlzIHRoZSAzMi1iaXQgaW50ZXJ2YWwgdmFsdWUgdXNlZCBieSB0aGUgMzItYml0IGNvdW50ZXIuIFdoZW4KKy8vIHRoaXMgcmVnaXN0ZXIgaXMgd3JpdHRlbiwgdGhlIHZhbHVlIGlzIGltbWVkaWF0ZWx5IGxvYWRlZCBhbmQgdGhlIGNvdW50ZXIgaXMKKy8vIHJlc3RhcnRlZCB0byBjb3VudCBkb3duIGZyb20gdGhlIG5ldyB2YWx1ZS4gSWYgdGhpcyByZWdpc3RlciBpcyBsb2FkZWQgd2l0aAorLy8gMHgwMDAwLjAwMDAsIGFuIGludGVycnVwdCBpcyBpbW1lZGlhdGVseSBnZW5lcmF0ZWQuCisjZGVmaW5lIFdEVF9MT0FEX1dEVExPQURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgV0RUX0xPQURfV0RUTE9BRF9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBXRFRfTE9BRF9XRFRMT0FEX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fVkFMVUUKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBXRFRWQUxVRQorLy8KKy8vICBUaGlzIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBjdXJyZW50IGNvdW50IHZhbHVlIG9mIHRoZSB0aW1lci4KKyNkZWZpbmUgV0RUX1ZBTFVFX1dEVFZBTFVFX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBXRFRfVkFMVUVfV0RUVkFMVUVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFdEVF9WQUxVRV9XRFRWQUxVRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBXRFRfT19DVEwKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsyXSBJTlRUWVBFCisvLworLy8gV0RUIEludGVycnVwdCBUeXBlCisvLworLy8gMDogIFdEVCBpbnRlcnJ1cHQgaXMgYSBzdGFuZGFyZCBpbnRlcnJ1cHQuCisvLyAxOiAgV0RUIGludGVycnVwdCBpcyBhIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQuCisvLyBFTlVNczoKKy8vIE5PTk1BU0tBQkxFICAgICAgICAgICAgICBOb24tbWFza2FibGUgaW50ZXJydXB0CisvLyBNQVNLQUJMRSAgICAgICAgICAgICAgICAgTWFza2FibGUgaW50ZXJydXB0CisjZGVmaW5lIFdEVF9DVExfSU5UVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgV0RUX0NUTF9JTlRUWVBFX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXRFRfQ1RMX0lOVFRZUEVfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFdEVF9DVExfSU5UVFlQRV9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV0RUX0NUTF9JTlRUWVBFX05PTk1BU0tBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBXRFRfQ1RMX0lOVFRZUEVfTUFTS0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vIEZpZWxkOiAgICAgWzFdIFJFU0VOCisvLworLy8gV0RUIFJlc2V0IEVuYWJsZS4gRGVmaW5lcyB0aGUgZnVuY3Rpb24gb2YgdGhlIFdEVCByZXNldCBzb3VyY2UgKHNlZQorLy8gUFJDTTpXQVJNUkVTRVQuV0RUX1NUQVQgaWYgZW5hYmxlZCkKKy8vCisvLyAwOiAgRGlzYWJsZWQuCisvLyAxOiAgRW5hYmxlIHRoZSBXYXRjaGRvZyByZXNldCBvdXRwdXQuCisvLyBFTlVNczoKKy8vIEVOICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBvdXRwdXQgRW5hYmxlZAorLy8gRElTICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IG91dHB1dCBEaXNhYmxlZAorI2RlZmluZSBXRFRfQ1RMX1JFU0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFdEVF9DVExfUkVTRU5fQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV0RUX0NUTF9SRVNFTl9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBXRFRfQ1RMX1JFU0VOX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdEVF9DVExfUkVTRU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgV0RUX0NUTF9SRVNFTl9ESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBJTlRFTgorLy8KKy8vIFdEVCBJbnRlcnJ1cHQgRW5hYmxlCisvLworLy8gMDogSW50ZXJydXB0IGV2ZW50IGRpc2FibGVkLgorLy8gMTogSW50ZXJydXB0IGV2ZW50IGVuYWJsZWQuIE9uY2Ugc2V0LCB0aGlzIGJpdCBjYW4gb25seSBiZSBjbGVhcmVkIGJ5IGEKKy8vIGhhcmR3YXJlIHJlc2V0LgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IEVuYWJsZWQKKy8vIERJUyAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgRGlzYWJsZWQKKyNkZWZpbmUgV0RUX0NUTF9JTlRFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfQ1RMX0lOVEVOX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdEVF9DVExfSU5URU5fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX0NUTF9JTlRFTl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXRFRfQ1RMX0lOVEVOX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9DVExfSU5URU5fRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBXRFRfT19JQ1IKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogIFszMTowXSBXRFRJQ1IKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGlzIHRoZSBpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIuIEEgd3JpdGUgb2YgYW55IHZhbHVlIHRvIHRoaXMKKy8vIHJlZ2lzdGVyIGNsZWFycyB0aGUgV0RUIGludGVycnVwdCBhbmQgcmVsb2FkcyB0aGUgMzItYml0IGNvdW50ZXIgZnJvbSB0aGUKKy8vIExPQUQgcmVnaXN0ZXIuCisjZGVmaW5lIFdEVF9JQ1JfV0RUSUNSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgV0RUX0lDUl9XRFRJQ1JfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBXRFRfSUNSX1dEVElDUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fUklTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gRmllbGQ6ICAgICBbMF0gV0RUUklTCisvLworLy8gVGhpcyByZWdpc3RlciBpcyB0aGUgcmF3IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuIFdEVCBpbnRlcnJ1cHQgZXZlbnRzIGNhbgorLy8gYmUgbW9uaXRvcmVkIHZpYSB0aGlzIHJlZ2lzdGVyIGlmIHRoZSBjb250cm9sbGVyIGludGVycnVwdCBpcyBtYXNrZWQuCisvLworLy8gVmFsdWUgRGVzY3JpcHRpb24KKy8vCisvLyAwOiBUaGUgV0RUIGhhcyBub3QgdGltZWQgb3V0CisvLyAxOiBBIFdEVCB0aW1lLW91dCBldmVudCBoYXMgb2NjdXJyZWQKKy8vCisjZGVmaW5lIFdEVF9SSVNfV0RUUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX1JJU19XRFRSSVNfQklUTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXRFRfUklTX1dEVFJJU19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9SSVNfV0RUUklTX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFJlZ2lzdGVyOiBXRFRfT19NSVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFswXSBXRFRNSVMKKy8vCisvLyBUaGlzIHJlZ2lzdGVyIGlzIHRoZSBtYXNrZWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4gVGhlIHZhbHVlIG9mIHRoaXMKKy8vIHJlZ2lzdGVyIGlzIHRoZSBsb2dpY2FsIEFORCBvZiB0aGUgcmF3IGludGVycnVwdCBiaXQgYW5kIHRoZSBXRFQgaW50ZXJydXB0CisvLyBlbmFibGUgYml0IENUTC5JTlRFTi4KKy8vCisvLyBWYWx1ZSBEZXNjcmlwdGlvbgorLy8KKy8vIDA6IFRoZSBXRFQgaGFzIG5vdCB0aW1lZCBvdXQgb3IgaXMgbWFza2VkLgorLy8gMTogQW4gdW5tYXNrZWQgV0RUIHRpbWUtb3V0IGV2ZW50IGhhcyBvY2N1cnJlZC4KKyNkZWZpbmUgV0RUX01JU19XRFRNSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfTUlTX1dEVE1JU19CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdEVF9NSVNfV0RUTUlTX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX01JU19XRFRNSVNfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gUmVnaXN0ZXI6IFdEVF9PX1RFU1QKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFs4XSBTVEFMTAorLy8KKy8vIFdEVCBTdGFsbCBFbmFibGUKKy8vCisvLyAwOiAgVGhlIFdEVCB0aW1lciBjb250aW51ZXMgY291bnRpbmcgaWYgdGhlIENQVSBpcyBzdG9wcGVkIHdpdGggYSBkZWJ1Z2dlci4KKy8vIDE6ICBJZiB0aGUgQ1BVIGlzIHN0b3BwZWQgd2l0aCBhIGRlYnVnZ2VyLCB0aGUgV0RUIHN0b3BzIGNvdW50aW5nLiBPbmNlIHRoZQorLy8gQ1BVIGlzIHJlc3RhcnRlZCwgdGhlIFdEVCByZXN1bWVzIGNvdW50aW5nLgorLy8gRU5VTXM6CisvLyBFTiAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIFNUQUxMCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBTVEFMTAorI2RlZmluZSBXRFRfVEVTVF9TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFdEVF9URVNUX1NUQUxMX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV0RUX1RFU1RfU1RBTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBXRFRfVEVTVF9TVEFMTF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdEVF9URVNUX1NUQUxMX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgV0RUX1RFU1RfU1RBTExfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorCisvLyBGaWVsZDogICAgIFswXSBURVNUX0VOCisvLworLy8gVGhlIHRlc3QgZW5hYmxlIGJpdAorLy8KKy8vIDA6IEVuYWJsZSBleHRlcm5hbCByZXNldAorLy8gMTogRGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgYW4gZXh0ZXJuYWwgcmVzZXQuIEluc3RlYWQgYml0IDEgb2YgdGhlCisvLyBJTlRfQ0FVUyByZWdpc3RlciBpcyBzZXQgYW5kIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQKKy8vIEVOVU1zOgorLy8gRU4gICAgICAgICAgICAgICAgICAgICAgIFRlc3QgbW9kZSBFbmFibGVkCisvLyBESVMgICAgICAgICAgICAgICAgICAgICAgVGVzdCBtb2RlIERpc2FibGVkCisjZGVmaW5lIFdEVF9URVNUX1RFU1RfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgV0RUX1RFU1RfVEVTVF9FTl9CSVROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXRFRfVEVTVF9URVNUX0VOX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9URVNUX1RFU1RfRU5fUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0RUX1RFU1RfVEVTVF9FTl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfVEVTVF9URVNUX0VOX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fSU5UX0NBVVMKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBGaWVsZDogICAgIFsxXSBDQVVTRV9SRVNFVAorLy8KKy8vIEluZGljYXRlcyB0aGF0IHRoZSBjYXVzZSBvZiBhbiBpbnRlcnJ1cHQgd2FzIGEgcmVzZXQgZ2VuZXJhdGVkIGJ1dCBibG9ja2VkCisvLyBkdWUgdG8gVEVTVC5URVNUX0VOIChvbmx5IHBvc3NpYmxlIHdoZW4gVEVTVC5URVNUX0VOIGlzIHNldCkuCisjZGVmaW5lIFdEVF9JTlRfQ0FVU19DQVVTRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgV0RUX0lOVF9DQVVTX0NBVVNFX1JFU0VUX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXRFRfSU5UX0NBVVNfQ0FVU0VfUkVTRVRfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFdEVF9JTlRfQ0FVU19DQVVTRV9SRVNFVF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLy8gRmllbGQ6ICAgICBbMF0gQ0FVU0VfSU5UUgorLy8KKy8vIFJlcGxpY2Egb2YgUklTLldEVFJJUworI2RlZmluZSBXRFRfSU5UX0NBVVNfQ0FVU0VfSU5UUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFdEVF9JTlRfQ0FVU19DQVVTRV9JTlRSX0JJVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0RUX0lOVF9DQVVTX0NBVVNFX0lOVFJfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBXRFRfSU5UX0NBVVNfQ0FVU0VfSU5UUl9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBSZWdpc3RlcjogV0RUX09fTE9DSworLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEZpZWxkOiAgWzMxOjBdIFdEVExPQ0sKKy8vCisvLyBXRFQgTG9jazogQSB3cml0ZSBvZiB0aGUgdmFsdWUgMHgxQUNDLkU1NTEgdW5sb2NrcyB0aGUgd2F0Y2hkb2cgcmVnaXN0ZXJzCisvLyBmb3Igd3JpdGUgYWNjZXNzLiBBIHdyaXRlIG9mIGFueSBvdGhlciB2YWx1ZSByZWFwcGxpZXMgdGhlIGxvY2ssIHByZXZlbnRpbmcKKy8vIGFueSByZWdpc3RlciB1cGRhdGVzIChOT1RFOiBURVNULlRFU1RfRU4gYml0IGlzIG5vdCBsb2NrYWJsZSkuCisvLworLy8gQSByZWFkIG9mIHRoaXMgcmVnaXN0ZXIgcmV0dXJucyB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy8vCisvLyAweDAwMDAuMDAwMDogVW5sb2NrZWQKKy8vIDB4MDAwMC4wMDAxOiAgTG9ja2VkCisjZGVmaW5lIFdEVF9MT0NLX1dEVExPQ0tfVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgV0RUX0xPQ0tfV0RUTE9DS19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBXRFRfTE9DS19XRFRMT0NLX1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKworI2VuZGlmIC8vIF9fV0RUX18KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguY21kIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiYzdiNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguY21kCkBAIC0wLDAgKzEsMTIzIEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyEgQGZpbGUgICAgICAgY2MyNngwZjEyOC5jbWQKKy8vISBAYnJpZWYgICAgICBDQzI2eDBGMTI4IHJldjIgbGlua2VyIGZpbGUgZm9yIENvZGUgQ29tcG9zZXIgU3R1ZGlvLgorLy8hCisvLyEgUmV2aXNlZCAgICAgJERhdGU6IDIwMTYtMDQtMTMgMTI6MDA6NTkgKzAyMDAgKG9uLCAxMyBhcHIgMjAxNikgJAorLy8hIFJldmlzaW9uICAgICRSZXZpc2lvbjogMTcwMDYgJAorLy8KKy8vICBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQuCisvLworLy8gIENvcHlyaWdodCAoQykgMjAxNiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKy8vCisvLworLy8gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLy8gIGFyZSBtZXQ6CisvLworLy8gICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vCisvLyAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisvLyAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCisvLyAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZXRhaW4gaW50ZXJydXB0IHZlY3RvciB0YWJsZSB2YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistLXJldGFpbj1nX3BmblZlY3RvcnMKKy8qIE92ZXJyaWRlIGRlZmF1bHQgZW50cnkgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0tZW50cnlfcG9pbnQgUmVzZXRJU1IKKy8qIEFsbG93IG1haW4oKSB0byB0YWtlIGFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0tYXJncyAweDgKKy8qIFN1cHByZXNzIHdhcm5pbmdzIGFuZCBlcnJvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0gMTAwNjM6IFdhcm5pbmcgYWJvdXQgZW50cnkgcG9pbnQgbm90IGJlaW5nIF9jX2ludDAwICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0gMTYwMTEsIDE2MDEyOiA4LWJ5dGUgYWxpZ25tZW50IGVycm9ycy4gT2JzZXJ2ZWQgd2hlbiBsaW5raW5nIGluIG9iamVjdCAgKi8KKy8qICAgZmlsZXMgY29tcGlsZWQgdXNpbmcgS2VpbCAoQVJNIGNvbXBpbGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0tZGlhZ19zdXBwcmVzcz0xMDA2MywxNjAxMSwxNjAxMgorCisvKiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZSBzZXQgYXMgcGFydCBvZiB0aGUgQ0NTIHByb2plY3QuICAgICovCisvKiBJZiB5b3UgYXJlIGJ1aWxkaW5nIHVzaW5nIHRoZSBjb21tYW5kIGxpbmUsIG9yIGZvciBzb21lIHJlYXNvbiB3YW50IHRvICAgICovCisvKiBkZWZpbmUgdGhlbSBoZXJlLCB5b3UgY2FuIHVuY29tbWVudCBhbmQgbW9kaWZ5IHRoZXNlIGxpbmVzIGFzIG5lZWRlZC4gICAgICovCisvKiBJZiB5b3UgYXJlIHVzaW5nIENDUyBmb3IgYnVpbGRpbmcsIGl0IGlzIHByb2JhYmx5IGJldHRlciB0byBtYWtlIGFueSBzdWNoICovCisvKiBtb2RpZmljYXRpb25zIGluIHlvdXIgQ0NTIHByb2plY3QgYW5kIGxlYXZlIHRoaXMgZmlsZSBhbG9uZS4gICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLWhlYXBfc2l6ZT0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLXN0YWNrX3NpemU9MjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLWxpYnJhcnk9cnRzdjdNM19UX2xlX2VhYmkubGliICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBhcHBsaWNhdGlvbi4gIE5vcm1hbGx5IHRoZSBpbnRlcnJ1cHQgdmVjdG9ycyAgKi8KKy8qIG11c3QgYmUgbG9jYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcHBsaWNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkxBU0hfQkFTRSAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIEZMQVNIX1NJWkUgICAgICAgICAgICAgIDB4MjAwMDAKKyNkZWZpbmUgUkFNX0JBU0UgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBSQU1fU0laRSAgICAgICAgICAgICAgICAweDUwMDAKKyNkZWZpbmUgR1BSQU1fQkFTRSAgICAgICAgICAgICAgMHgxMTAwMDAwMAorI2RlZmluZSBHUFJBTV9TSVpFICAgICAgICAgICAgICAweDIwMDAKKworCisvKiBTeXN0ZW0gbWVtb3J5IG1hcCAqLworCitNRU1PUlkKK3sKKyAgICAvKiBBcHBsaWNhdGlvbiBzdG9yZWQgaW4gYW5kIGV4ZWN1dGVzIGZyb20gaW50ZXJuYWwgZmxhc2ggKi8KKyAgICBGTEFTSCAoUlgpIDogb3JpZ2luID0gRkxBU0hfQkFTRSwgbGVuZ3RoID0gRkxBU0hfU0laRQorICAgIC8qIEFwcGxpY2F0aW9uIHVzZXMgaW50ZXJuYWwgUkFNIGZvciBkYXRhICovCisgICAgU1JBTSAoUldYKSA6IG9yaWdpbiA9IFJBTV9CQVNFLCBsZW5ndGggPSBSQU1fU0laRQorICAgIC8qIEFwcGxpY2F0aW9uIGNhbiB1c2UgR1BSQU0gcmVnaW9uIGFzIFJBTSBpZiBjYWNoZSBpcyBkaXNhYmxlZCBpbiB0aGUgQ0NGRworICAgIChERUZBVUxUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTLlNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gPSAwKSAqLworICAgIEdQUkFNIChSV1gpOiBvcmlnaW4gPSBHUFJBTV9CQVNFLCBsZW5ndGggPSBHUFJBTV9TSVpFCit9CisKKy8qIFNlY3Rpb24gYWxsb2NhdGlvbiBpbiBtZW1vcnkgKi8KKworU0VDVElPTlMKK3sKKyAgICAuaW50dmVjcyAgICAgICAgOiAgID4gRkxBU0hfQkFTRQorICAgIC50ZXh0ICAgICAgICAgICA6ICAgPiBGTEFTSAorICAgIC5jb25zdCAgICAgICAgICA6ICAgPiBGTEFTSAorICAgIC5jb25zdGRhdGEgICAgICA6ICAgPiBGTEFTSAorICAgIC5yb2RhdGEgICAgICAgICA6ICAgPiBGTEFTSAorICAgIC5iaW5pdCAgICAgICAgICA6ICAgPiBGTEFTSAorICAgIC5jaW5pdCAgICAgICAgICA6ICAgPiBGTEFTSAorICAgIC5waW5pdCAgICAgICAgICA6ICAgPiBGTEFTSAorICAgIC5pbml0X2FycmF5ICAgICA6ICAgPiBGTEFTSAorICAgIC5lbWJfdGV4dCAgICAgICA6ICAgPiBGTEFTSAorICAgIC5jY2ZnICAgICAgICAgICA6ICAgPiBGTEFTSCAoSElHSCkKKworICAgIC52dGFibGUgICAgICAgICA6ICAgPiBTUkFNCisgICAgLnZ0YWJsZV9yYW0gICAgIDogICA+IFNSQU0KKyAgICAgdnRhYmxlX3JhbSAgICAgOiAgID4gU1JBTQorICAgIC5kYXRhICAgICAgICAgICA6ICAgPiBTUkFNCisgICAgLmJzcyAgICAgICAgICAgIDogICA+IFNSQU0KKyAgICAuc3lzbWVtICAgICAgICAgOiAgID4gU1JBTQorICAgIC5zdGFjayAgICAgICAgICA6ICAgPiBTUkFNIChISUdIKQorICAgIC5ub25yZXRlbnZhciAgICA6ICAgPiBTUkFNCisgICAgLmdwcmFtICAgICAgICAgIDogICA+IEdQUkFNCisKKyNpZmRlZiBfX1RJX0NPTVBJTEVSX1ZFUlNJT04KKyNpZiBfX1RJX0NPTVBJTEVSX1ZFUlNJT04gPj0gMTUwMDkwMDAKKy8qICBIaWRlIHNlY3Rpb24gZnJvbSBvbGRlciBjb21waWxlcnMgbm90IHN1cHBvcnRpbmcgdGhlICJyYW1mdW5jIiBhdHRyaWJ1dGUuCisgICAgU2VlIGh0dHA6Ly9wcm9jZXNzb3JzLndpa2kudGkuY29tL2luZGV4LnBocC9QbGFjaW5nX2Z1bmN0aW9uc19pbl9SQU0gKi8KKyAgICAuVEkucmFtZnVuYyA6IHt9IGxvYWQ9RkxBU0gsIHJ1bj1TUkFNLCB0YWJsZShCSU5JVCkKKyNlbmRpZgorI2VuZGlmCit9CisKKy8qIENyZWF0ZSBnbG9iYWwgY29uc3RhbnQgdGhhdCBwb2ludHMgdG8gdG9wIG9mIHN0YWNrICovCisvKiBDQ1M6IENoYW5nZSBzdGFjayBzaXplIHVuZGVyIFByb2plY3QgUHJvcGVydGllcyAgICAqLworX19TVEFDS19UT1AgPSBfX3N0YWNrICsgX19TVEFDS19TSVpFOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5pY2YgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL2xpbmtlcl9maWxlcy9jYzI2eDBmMTI4LmljZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWJkODJkCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5pY2YKQEAgLTAsMCArMSwxNDMgQEAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vISBAZmlsZSAgICAgICBjYzI2eDBmMTI4LmljZgorLy8hIEBicmllZiAgICAgIENDMjZ4MEYxMjggcmV2MiBsaW5rZXIgZmlsZSBmb3IgSUFSIEVXQVJNLgorLy8hCisvLyEgUmV2aXNlZCAgICAgJERhdGU6IDIwMTYtMDQtMTMgMTA6NTk6MTAgKzAyMDAgKG9uLCAxMyBhcHIgMjAxNikgJAorLy8hIFJldmlzaW9uICAgICRSZXZpc2lvbjogMTY5OTkgJAorLy8KKy8vICBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQuCisvLworLy8gIENvcHlyaWdodCAoQykgMjAxNiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKy8vCisvLworLy8gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLy8gIGFyZSBtZXQ6CisvLworLy8gICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vCisvLyAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisvLyAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCisvLyAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIyMjSUNGIyMjIFNlY3Rpb24gaGFuZGxlZCBieSBJQ0YgZWRpdG9yLCBkb24ndCB0b3VjaCEgKioqKi8KKy8qLUVkaXRvciBhbm5vdGF0aW9uIGZpbGUtKi8KKy8qIEljZkVkaXRvckZpbGU9IiRUT09MS0lUX0RJUiRcY29uZmlnXGlkZVxJY2ZFZGl0b3JcY29ydGV4X3YxXzAueG1sIiAqLworLyotU3BlY2lhbHMtKi8KK2RlZmluZSBzeW1ib2wgX19JQ0ZFRElUX2ludHZlY19zdGFydF9fID0gMDsKKy8qLU1lbW9yeSBSZWdpb25zLSovCitkZWZpbmUgc3ltYm9sIF9fSUNGRURJVF9yZWdpb25fUk9NX3N0YXJ0X18gPSAweDAwMDAwMDAwOworZGVmaW5lIHN5bWJvbCBfX0lDRkVESVRfcmVnaW9uX1JPTV9lbmRfXyAgID0gMHgwMDAxRkZGRjsKK2RlZmluZSBzeW1ib2wgX19JQ0ZFRElUX3JlZ2lvbl9SQU1fc3RhcnRfXyA9IDB4MjAwMDAwMDA7CitkZWZpbmUgc3ltYm9sIF9fSUNGRURJVF9yZWdpb25fUkFNX2VuZF9fICAgPSAweDIwMDA0RkZGOworLyotU2l6ZXMtKi8KK2RlZmluZSBzeW1ib2wgX19JQ0ZFRElUX3NpemVfY3N0YWNrX18gPSAweDgwMDsKK2RlZmluZSBzeW1ib2wgX19JQ0ZFRElUX3NpemVfaGVhcF9fICAgPSAweDEwMDA7CisvKioqKiBFbmQgb2YgSUNGIGVkaXRvciBzZWN0aW9uLiAjIyNJQ0YjIyMqLworCitkZWZpbmUgc3ltYm9sIF9fR1BSQU1fU1RBUlRfXyAgID0gMHgxMTAwMDAwMDsKK2RlZmluZSBzeW1ib2wgX19HUFJBTV9FTkRfXyAgICAgPSAweDExMDAxRkZGOworCisvLworLy8gRGVmaW5lIGEgbWVtb3J5IHJlZ2lvbiB0aGF0IGNvdmVycyB0aGUgZW50aXJlIDQgR0IgYWRkcmVzc2FibGUgc3BhY2Ugb2YgdGhlCisvLyBwcm9jZXNzb3IuCisvLworZGVmaW5lIG1lbW9yeSBtZW0gd2l0aCBzaXplID0gNEc7CisKKy8vCisvLyBEZWZpbmUgYSByZWdpb24gZm9yIHRoZSBvbi1jaGlwIGZsYXNoLgorLy8KK2RlZmluZSByZWdpb24gRkxBU0hfcmVnaW9uICAgPSBtZW06W2Zyb20gX19JQ0ZFRElUX3JlZ2lvbl9ST01fc3RhcnRfXyB0byBfX0lDRkVESVRfcmVnaW9uX1JPTV9lbmRfX107CisKKy8vCisvLyBEZWZpbmUgYSByZWdpb24gZm9yIHRoZSBvbi1jaGlwIFNSQU0uCisvLworZGVmaW5lIHJlZ2lvbiBTUkFNX3JlZ2lvbiAgICAgPSBtZW06W2Zyb20gX19JQ0ZFRElUX3JlZ2lvbl9SQU1fc3RhcnRfXyB0byBfX0lDRkVESVRfcmVnaW9uX1JBTV9lbmRfX107CisKKy8vCisvLyBQbGFjZSB0aGUgaW50ZXJydXB0IHZlY3RvcnMgYXQgdGhlIHN0YXJ0IG9mIGZsYXNoLgorLy8KK3BsYWNlIGF0IGFkZHJlc3MgbWVtOl9fSUNGRURJVF9pbnR2ZWNfc3RhcnRfXyB7IHJlYWRvbmx5IHNlY3Rpb24gLmludHZlYyB9Owora2VlcCB7IHNlY3Rpb24gLmludHZlYyB9OworCisvLworLy8gUGxhY2UgdGhlIENDRkcgYXJlYSBhdCB0aGUgZW5kIG9mIGZsYXNoCisvLworcGxhY2UgYXQgZW5kIG9mIEZMQVNIX3JlZ2lvbiB7IHJlYWRvbmx5IHNlY3Rpb24gLmNjZmcgfTsKK2tlZXAgeyBzZWN0aW9uIC5jY2ZnIH07CisKKy8vCisvLyBQbGFjZSByZW1haW5pbmcgJ3JlYWQgb25seScgaW4gRmxhc2gKKy8vCitwbGFjZSBpbiBGTEFTSF9yZWdpb24geyByZWFkb25seSB9OworCisKKy8vCisvLyBQbGFjZSAudnRhYmxlX3JhbSBpbiBzdGFydCBvZiBSQU0KKy8vCitwbGFjZSBhdCBzdGFydCBvZiBTUkFNX3JlZ2lvbiB7IHNlY3Rpb24gLnZ0YWJsZV9yYW0gfTsKKworLy8KKy8vIERlZmluZSBDU1RBQ0sgYmxvY2sgdG8gY29udGFpbiAuc3RhY2sgc2VjdGlvbi4gVGhpcyBlbmFibGVzIHRoZSBJQVIgSURFCisvLyB0byBwcm9wZXJseSBzaG93IHRoZSBzdGFjayBjb250ZW50IGR1cmluZyBkZWJ1Zy4gUGxhY2Ugc3RhY2sgYXQgZW5kIG9mCisvLyByZXRlbnRpb24gUkFNLCBkbyBub3QgaW5pdGlhbGl6ZSAoaW5pdGlhbGl6aW5nIHRoZSBzdGFjayB3aWxsIGRlc3Ryb3kgdGhlCisvLyByZXR1cm4gYWRkcmVzcyBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLCBjYXVzaW5nIHRoZSBwcm9jZXNzb3IgdG8gYnJhbmNoCisvLyB0byB6ZXJvIGFuZCBmYXVsdCkKKy8vCitkZWZpbmUgYmxvY2sgQ1NUQUNLIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IF9fSUNGRURJVF9zaXplX2NzdGFja19fIHsgc2VjdGlvbiAuc3RhY2sgfTsKK3BsYWNlIGF0IGVuZCBvZiBTUkFNX3JlZ2lvbiB7IGJsb2NrIENTVEFDSyB9OworZG8gbm90IGluaXRpYWxpemUgeyBzZWN0aW9uIC5zdGFjaywgc2VjdGlvbiAubm9pbml0fTsKKworLy8KKy8vIEV4cG9ydCBzdGFjayB0b3Agc3ltYm9sLiBVc2VkIGJ5IHN0YXJ0dXAgZmlsZS4KKy8vCitkZWZpbmUgZXhwb3J0ZWQgc3ltYm9sIFNUQUNLX1RPUCA9IF9fSUNGRURJVF9yZWdpb25fUkFNX2VuZF9fICsgMTsKKworLy8KKy8vIERlZmluZSBhIGJsb2NrIGZvciB0aGUgaGVhcC4gIFRoZSBzaXplIHNob3VsZCBiZSBzZXQgdG8gc29tZXRoaW5nIG90aGVyCisvLyB0aGFuIHplcm8gaWYgdGhpbmdzIGluIHRoZSBDIGxpYnJhcnkgdGhhdCByZXF1aXJlIHRoZSBoZWFwIGFyZSB1c2VkLgorLy8KK2RlZmluZSBibG9jayBIRUFQIHdpdGggYWxpZ25tZW50ID0gOCwgc2l6ZSA9IF9fSUNGRURJVF9zaXplX2hlYXBfXyB7IH07CitwbGFjZSBpbiBTUkFNX3JlZ2lvbiB7IGJsb2NrIEhFQVAgfTsKKworLy8KKy8vIFBsYWNlIGFsbCByZWFkL3dyaXRlIGl0ZW1zIGludG8gUkFNLgorLy8KK3BsYWNlIGluIFNSQU1fcmVnaW9uICAgeyByZWFkd3JpdGUgfTsKK2luaXRpYWxpemUgYnkgY29weSB7IHJlYWR3cml0ZSB9OworCisvLworLy8gVGhlIFVTRV9USVJUT1NfUk9NIHN5bWJvbCBpcyBkZWZpbmVkIGludGVybmFsbHkgaW4gdGhlIGJ1aWxkIGZsb3cgKHVzaW5nCisvLyAtLWNvbmZpZ19kZWYgVVNFX1RJUlRPU19ST009MSkgZm9yIFRJLVJUT1MgYXBwbGljYXRpb25zIHdob3NlIGFwcC5jZmcgZmlsZQorLy8gc3BlY2lmaWVzIHRvIHVzZSB0aGUgUk9NLgorLy8KK2lmIChpc2RlZmluZWRzeW1ib2woVVNFX1RJUlRPU19ST00pKSB7CisgICAgaW5jbHVkZSAiVElSVE9TX1JPTS5pY2YiOworfQorCisvLworLy8gRGVmaW5lIGEgcmVnaW9uIGZvciB0aGUgb24tY2hpcCBHUFJBTS9jYWNoZS4KKy8vIEFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyByZWdpb24gYXMgUkFNIGlmIGNhY2hlIGlzIGRpc2FibGVkIGluIHRoZSBDQ0ZHCisvLyAoREVGQVVMVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHUy5TRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNID0gMCkKKy8vCitkZWZpbmUgcmVnaW9uIEdQUkFNX3JlZ2lvbiAgICA9IG1lbTpbZnJvbSBfX0dQUkFNX1NUQVJUX18gdG8gX19HUFJBTV9FTkRfX107CitwbGFjZSBpbiBHUFJBTV9yZWdpb24ge3NlY3Rpb24gLmdwcmFtfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjgubGRzIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2NDg2MAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjgubGRzCkBAIC0wLDAgKzEsMTM3IEBACisvKgorIEBmaWxlICAgICAgY2MyNngwZjEyOC5sZHMKKyBAYnJpZWYgICAgIENDMjZ4MEYxMjggbGlua2VyIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgR05VIGNvbXBpbGVyLgorCisgUmV2aXNlZCAgICAkRGF0ZTogMjAxNi0wNC0xMyAxMDo1OToxMCArMDIwMCAob24sIDEzIGFwciAyMDE2KSAkCisgUmV2aXNpb24gICAkUmV2aXNpb246IDE2OTk5ICQKKworIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZC4KKworICBDb3B5cmlnaHQgKEMpIDIwMTYgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDp3d3cudGkuY29tLworCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogRW50cnkgUG9pbnQgKi8KK0VOVFJZKCBSZXNldElTUiApCisKKy8qIEVuc3VyZSBDdXN0b21lciBDb25maWd1cmF0aW9uIEFyZWEgaXMgYW4gdW5kZWZpbmVkIHN5bWJvbCAqLworRVhURVJOKCBfX2NjZmcgKQorCisvKiBTeXN0ZW0gbWVtb3J5IG1hcCAqLworTUVNT1JZCit7CisgICAgLyogQXBwbGljYXRpb24gaXMgc3RvcmVkIGluIGFuZCBleGVjdXRlcyBmcm9tIGludGVybmFsIGZsYXNoICovCisgICAgRkxBU0ggKFJYKSA6IE9SSUdJTiA9IDB4MCwgTEVOR1RIID0gMHgxRkZBOAorICAgIC8qIEN1c3RvbWVyIENvbmZpZ3VyYXRpb24gQXJlYSAoQ0NGRykgKi8KKyAgICBGTEFTSF9DQ0ZHIChSWCkgOiBPUklHSU4gPSAweDFGRkE4LCBMRU5HVEggPSA4OAorICAgIC8qIEFwcGxpY2F0aW9uIHVzZXMgaW50ZXJuYWwgUkFNIGZvciBkYXRhICovCisgICAgU1JBTSAoUldYKSA6IE9SSUdJTiA9IDB4MjAwMDAwMDAsIExFTkdUSCA9IDB4NTAwMAorICAgIC8qIEFwcGxpY2F0aW9uIGNhbiB1c2UgR1BSQU0gcmVnaW9uIGFzIFJBTSBpZiBjYWNoZSBpcyBkaXNhYmxlZCBpbiB0aGUgQ0NGRworICAgICAgIChERUZBVUxUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTLlNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gPSAwKSAqLworICAgIEdQUkFNIChSV1gpIDogT1JJR0lOID0gMHgxMTAwMDAwMCwgTEVOR1RIID0gMHgyMDAwCit9CisKKy8qLiBIaWdoZXN0IGFkZHJlc3Mgb2YgdGhlIHN0YWNrLiBVc2VkIGluIHN0YXJ0dXAgZmlsZSAuKi8KK19lc3RhY2sgPSBPUklHSU4oU1JBTSkgKyBMRU5HVEgoU1JBTSk7IC8qZW5kIG9mIFNSQU0gLiovCisKKy8qLiBHZW5lcmF0ZSBhIGxpbmsgZXJyb3IgaWYgaGVhcCBhbmQgc3RhY2sgZG9u4oCZdCBmaXQgaW50byBSQU0gLiovCitfTWluX0hlYXBfU2l6ZSA9IDA7CitfTWluX1N0YWNrX1NpemUgPSAweDEwMDsKKworCisvKiBTZWN0aW9uIGFsbG9jYXRpb24gaW4gbWVtb3J5ICovCitTRUNUSU9OUworeworICAgIC50ZXh0IDoKKyAgICB7CisgICAgICAgIF90ZXh0ID0gLjsKKyAgICAgICAgS0VFUCgqKC52ZWN0b3JzKSkKKyAgICAgICAgKigudGV4dCopCisgICAgICAgICooLnJvZGF0YSopCisgICAgICAgICooLmluaXQpCisgICAgICAgICooLmZpbmkqKQorICAgICAgICAqKC5laF9mcmFtZSopCisgICAgICAgIF9ldGV4dCA9IC47CisgICAgfSA+IEZMQVNIID0gMAorCisgICAuQVJNLmV4aWR4IDoKKyAgICB7CisgICAgICAgIF9fZXhpZHhfc3RhcnQgPSAuOworICAgICAgICAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikKKyAgICAgICAgX19leGlkeF9lbmQgPSAuOworICAgIH0gPiBGTEFTSAorCisgICAgLkFSTS5leHRhYiA6CisgICAgeworICAgICAgICAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikKKyAgICB9ID4gRkxBU0gKKworICAgIC5kYXRhIDoKKyAgICB7CisgICAgICAgIF9kYXRhID0gLjsKKyAgICAgICAgKih2dGFibGUpCisgICAgICAgICooLmRhdGEqKQorICAgICAgICBfZWRhdGEgPSAuOworICAgIH0gPiBTUkFNIEFUID4gRkxBU0gKKyAgICBfbGRhdGEgPSBMT0FEQUREUiguZGF0YSk7CisKKyAgICAuYnNzIDoKKyAgICB7CisgICAgICAgIF9fYnNzX3N0YXJ0X18gPSAuOworICAgICAgICBfYnNzID0gLjsKKyAgICAgICAgKiguYnNzKikKKyAgICAgICAgKihDT01NT04pCisgICAgICAgIF9lYnNzID0gLjsKKyAgICAgICAgX19ic3NfZW5kX18gPSAuOworICAgIH0gPiBTUkFNCisKKyAgICAuY2NmZyA6CisgICAgeworICAgICAgICBLRUVQKCooLmNjZmcpKQorICAgIH0gPiBGTEFTSF9DQ0ZHCisKKyAgICAvKiBVc2VyX2hlYXBfc3RhY2sgc2VjdGlvbiwgdXNlZCB0byBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBTUkFNIGxlZnQgKi8KKyAgICAuX3VzZXJfaGVhcF9zdGFjayA6CisgICAgeworICAgICAgLiA9IEFMSUdOKDQpOworCisgICAgICAgIFBST1ZJREUoZW5kID0gLik7CisgICAgICAgIFBST1ZJREUoX2VuZCA9IC4pOworICAgICAgICBQUk9WSURFKF9fZW5kX18gPSAuKTsKKworICAgICAgLiA9IC4gKyBfTWluX0hlYXBfU2l6ZTsKKyAgICAgIC4gPSAuICsgX01pbl9TdGFja19TaXplOworICAgICAgLiA9IEFMSUdOKDQpOworICAgIH0gPiBTUkFNCisKKyAgICAuZ3ByYW0gOgorICAgIHsKKyAgICB9ID4gR1BSQU0KK30KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguc2N0IGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9saW5rZXJfZmlsZXMvY2MyNngwZjEyOC5zY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5MmQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvbGlua2VyX2ZpbGVzL2NjMjZ4MGYxMjguc2N0CkBAIC0wLDAgKzEsNjggQEAKKzsgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzsgKiAgQGZpbGUgICAgICAgICAgIGNjMjZ4MGYxMjguc2N0Cis7ICogIEBicmllZiAgICAgICAgICBDQzI2eDBGMTI4IHJldjIgc2NhdHRlciBsb2FkaW5nIGZpbGUgZm9yIEFSTSBsaW5rZXIuCis7ICoKKzsgKiAgUmV2aXNlZCAgICAgICAgICREYXRlOiAyMDE2LTA0LTEzIDE3OjI1OjA3ICswMjAwIChvbiwgMTMgYXByIDIwMTYpICQKKzsgKiAgUmV2aXNpb24gICAgICAgICRSZXZpc2lvbjogMTcwMTcgJAorOyAqCis7ICogIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZC4KKzsgKgorOyAqICBDb3B5cmlnaHQgKEMpIDIwMTYgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCis7ICoKKzsgKgorOyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKzsgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCis7ICogIGFyZSBtZXQ6Cis7ICoKKzsgKiAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorOyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzsgKgorOyAqICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cis7ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorOyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCis7ICoKKzsgKiAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCis7ICogICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorOyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKzsgKgorOyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCis7ICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCis7ICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorOyAqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorOyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKzsgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorOyAqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKzsgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCis7ICogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKzsgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCis7ICogIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCis7ICoKKzsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFJfSVJPTTEgMHgwMDAwMDAwMCAweDIwMDAwICB7IDsgbG9hZCByZWdpb24gc2l6ZV9yZWdpb24KKyAgICBFUl9JUk9NMSAweDAwMDAwMDAwIDB4MjAwMDAgIHsgOyBsb2FkIGFkZHJlc3MgPSBleGVjdXRpb24gYWRkcmVzcworICAgICAgICAqLm8gKFJFU0VULCArRmlyc3QpCisgICAgICAgICooSW5Sb290JCRTZWN0aW9ucykKKyAgICAgICAgLkFOWSAoK1JPKQorICAgIH0KKworICAgIFJXX0lSQU0xIDB4MjAwMDAwMDAgMHg1MDAwIHsgOyBSVyBkYXRhCisgICAgICAgIC5BTlkgKCtSVyArWkkpCisgICAgfQorCisgICAgOyBEZWZpbmUgYSByZWdpb24gZm9yIHRoZSBvbi1jaGlwIEdQUkFNL2NhY2hlLgorICAgIDsgQXBwbGljYXRpb24gY2FuIHVzZSB0aGlzIHJlZ2lvbiBhcyBSQU0gaWYgY2FjaGUgaXMgZGlzYWJsZWQgaW4gdGhlIENDRkcKKyAgICA7IChERUZBVUxUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTLlNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gPSAwKQorICAgIDtSV19JUkFNMiAweDExMDAwMDAwIDB4MDAwMDIwMDAgeworICAgIDsgICAgKiguZ3ByYW0pCisgICAgO30KK30KKworOyBDdXN0b21lciBjb25maWd1cmF0aW9uIGFyZWEgKENDRkcpIHBsYWNlZCBhdCBlbmQgb2YgZGV2aWNlIGZsYXNoLgorOyBNYWtlIHN1cmUgdGhlIGVudHJ5IGluIHRoaXMgbGlua2VyIGZpbGUgaXMgYWxpZ25lZCB3aXRoIHlvdXIgYXBwbGljYXRpb24ncworOyBDQ0ZHIGFyZWEuCitMUl9DQ0ZHICAgICAoMHgyMDAwMC04OCkgeyA7IGxvYWQgcmVnaW9uIHNpemVfcmVnaW9uCisgICAgRVJfQ0NGRyBJbWFnZUJhc2UoTFJfQ0NGRykgeyA7IGxvYWQgYWRkcmVzcyA9IGV4ZWN1dGlvbiBhZGRyZXNzCisgICAgICAgICooLmNjZmcsICtGaXJzdCkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3JmX3BhdGNoZXMvcmZfcGF0Y2hfY3BlX2JsZS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX2NwZV9ibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmFiZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX2NwZV9ibGUuaApAQCAtMCwwICsxLDIzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX3BhdGNoX2NwZV9ibGUuaAorKiAgUmV2aXNlZDogICAgICAgICREYXRlJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbiQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBSRiBDb3JlIHBhdGNoIGZpbGUgZm9yIENDMjZ4eAorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SRl9QQVRDSF9DUEVfQkxFX0gKKyNkZWZpbmUgX1JGX1BBVENIX0NQRV9CTEVfSAorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBDUEVfUEFUQ0hfVFlQRQorI2RlZmluZSBDUEVfUEFUQ0hfVFlQRSBzdGF0aWMgY29uc3QgdWludDMyX3QKKyNlbmRpZgorCisjaWZuZGVmIFNZU19QQVRDSF9UWVBFCisjZGVmaW5lIFNZU19QQVRDSF9UWVBFIHN0YXRpYyBjb25zdCB1aW50MzJfdAorI2VuZGlmCisKKyNpZm5kZWYgUEFUQ0hfRlVOX1NQRUMKKyNkZWZpbmUgUEFUQ0hfRlVOX1NQRUMgc3RhdGljIGlubGluZQorI2VuZGlmCisKKyNpZm5kZWYgX0FQUExZX1BBVENIX1RBQgorI2RlZmluZSBfQVBQTFlfUEFUQ0hfVEFCCisjZW5kaWYKKworCitDUEVfUEFUQ0hfVFlQRSBwYXRjaEltYWdlQmxlW10gPSB7CisgICAweDIxMDAwNDk5LAorICAgMHgyMTAwMDUxOSwKKyAgIDB4MjEwMDA0NzksCisgICAweDRjMTdiNWYwLAorICAgMHgxODYxMjE0MCwKKyAgIDB4MjgwMjc4YzgsCisgICAweDQ4MDlkMDA1LAorICAgMHg2MDAxMjEwMCwKKyAgIDB4NDc4ODQ5MDgsCisgICAweDZlMjViZGYwLAorICAgMHg2MDM1NGUwNywKKyAgIDB4NDMyODA3NjAsCisgICAweDY4Mjc2NjIwLAorICAgMHg0ODBlNjAyNCwKKyAgIDB4NjAyNzQ3ODAsCisgICAweGJkZjA2MDM1LAorICAgMHg0MDA0MTEyYywKKyAgIDB4MDAwMDY1YTUsCisgICAweDQwMDQ0MDI4LAorICAgMHg0YzA3YjUxMCwKKyAgIDB4MjkwMDdkYTEsCisgICAweDIxMDFkMTA1LAorICAgMHgwMjQ4NzVhMSwKKyAgIDB4MzkzZTQ5MDQsCisgICAweDY4MjA0Nzg4LAorICAgMHhkMDAwMjgwMCwKKyAgIDB4YmQxMDQ3ODAsCisgICAweDIxMDAwMjU0LAorICAgMHgwMDAwMzk4YiwKKyAgIDB4NDkwNWI1MTAsCisgICAweGI2NzI0YTA1LAorICAgMHgyODAxNzhjOCwKKyAgIDB4MjAwMWRjMDIsCisgICAweDFkMTI3MDQ4LAorICAgMHg0NzEwYjY2MiwKKyAgIDB4MjEwMDAyOTQsCisgICAweDAwMDA0NzZkLAorICAgMHg0ZTFhYjVmOCwKKyAgIDB4NmIzMTQ2MDUsCisgICAweDA5Y2M0ODE5LAorICAgMHgyZDAwMDFlNCwKKyAgIDB4NDkxOGQwMTEsCisgICAweDI5MDI3ODA5LAorICAgMHg3YjAwZDAwZiwKKyAgIDB4YjY3MjQzMDQsCisgICAweDRmMTUyMDAxLAorICAgMHg0N2I4MDI0MCwKKyAgIDB4MzgyMDQ4MTEsCisgICAweDA5YzE4ODAwLAorICAgMHhkMDA0MDdjOSwKKyAgIDB4N2FjMGUwMTYsCisgICAweDdiNDBlN2YwLAorICAgMHg0OTBmZTdlZSwKKyAgIDB4NjFjYzYzMzQsCisgICAweDA3YzAwYTQwLAorICAgMHgyMDAxZDAwYywKKyAgIDB4NmFmMTAzODAsCisgICAweGQwMDEyZDAwLAorICAgMHhlMDAwNDMwMSwKKyAgIDB4NDYwODQzODEsCisgICAweDQ5MDc2MmYxLAorICAgMHg2MzQ4Mzk0MCwKKyAgIDB4NDdiODIwMDAsCisgICAweGJkZjhiNjYyLAorICAgMHgyMTAwMDI4MCwKKyAgIDB4MjEwMDAwODgsCisgICAweDIxMDAwMjk2LAorICAgMHgwMDAwM2NkZiwKKyAgIDB4NDAwNDQwNDAsCisgICAweDI4MDA0OTA3LAorICAgMHgyMDA0ZDAwMCwKKyAgIDB4YjY3MjRhMDYsCisgICAweDA3Yzk3ODA5LAorICAgMHg1ODEwZDAwMSwKKyAgIDB4MjA4MGUwMDAsCisgICAweGIyNDBiNjYyLAorICAgMHgwMDAwNDc3MCwKKyAgIDB4MjEwMDAyNmIsCisgICAweDQwMDQ2MDU4LAorfTsKKyNkZWZpbmUgX05XT1JEX1BBVENISU1BR0VfQkxFIDc5CisKKyNkZWZpbmUgX05XT1JEX1BBVENIU1lTX0JMRSAwCisKKyNkZWZpbmUgX0lSUV9QQVRDSF8wIDB4MjEwMDA0MTEKKyNkZWZpbmUgX0lSUV9QQVRDSF8xIDB4MjEwMDA0NTEKKworCisjaWZuZGVmIF9CTEVfU1lTUkFNX1NUQVJUCisjZGVmaW5lIF9CTEVfU1lTUkFNX1NUQVJUIDB4MjAwMDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIF9CTEVfQ1BFUkFNX1NUQVJUCisjZGVmaW5lIF9CTEVfQ1BFUkFNX1NUQVJUIDB4MjEwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIF9CTEVfU1lTX1BBVENIX0ZJWEVEX0FERFIgMHgyMDAwMDAwMAorCisjZGVmaW5lIF9CTEVfUEFSU0VSX1BBVENIX1RBQl9PRkZTRVQgMHgwMzM0CisjZGVmaW5lIF9CTEVfUEFUQ0hfVEFCX09GRlNFVCAweDAzM0MKKyNkZWZpbmUgX0JMRV9JUlFQQVRDSF9PRkZTRVQgMHgwM0FDCisjZGVmaW5lIF9CTEVfUEFUQ0hfVkVDX09GRlNFVCAweDA0MDQKKworUEFUQ0hfRlVOX1NQRUMgdm9pZCBlbnRlckJsZUNwZVBhdGNoKHZvaWQpCit7CisgICB1aW50MzJfdCAqcFBhdGNoVmVjID0gKHVpbnQzMl90ICopIChfQkxFX0NQRVJBTV9TVEFSVCArIF9CTEVfUEFUQ0hfVkVDX09GRlNFVCk7CisKKyNpZiAoX05XT1JEX1BBVENISU1BR0VfQkxFID4gMCkKKyAgIG1lbWNweShwUGF0Y2hWZWMsIHBhdGNoSW1hZ2VCbGUsIHNpemVvZihwYXRjaEltYWdlQmxlKSk7CisjZW5kaWYKK30KKworUEFUQ0hfRlVOX1NQRUMgdm9pZCBlbnRlckJsZVN5c1BhdGNoKHZvaWQpCit7Cit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgY29uZmlndXJlQmxlUGF0Y2godm9pZCkKK3sKKyAgIHVpbnQ4X3QgKnBQYXRjaFRhYiA9ICh1aW50OF90ICopIChfQkxFX0NQRVJBTV9TVEFSVCArIF9CTEVfUEFUQ0hfVEFCX09GRlNFVCk7CisgICB1aW50MzJfdCAqcElycVBhdGNoID0gKHVpbnQzMl90ICopIChfQkxFX0NQRVJBTV9TVEFSVCArIF9CTEVfSVJRUEFUQ0hfT0ZGU0VUKTsKKworCisgICBwUGF0Y2hUYWJbMTAzXSA9IDA7CisgICBwUGF0Y2hUYWJbNjBdID0gMTsKKyAgIHBQYXRjaFRhYls0OF0gPSAyOworCisgICBwSXJxUGF0Y2hbMV0gPSBfSVJRX1BBVENIXzA7CisgICBwSXJxUGF0Y2hbOV0gPSBfSVJRX1BBVENIXzE7Cit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgYXBwbHlCbGVQYXRjaCh2b2lkKQoreworICAgZW50ZXJCbGVTeXNQYXRjaCgpOworICAgZW50ZXJCbGVDcGVQYXRjaCgpOworICAgY29uZmlndXJlQmxlUGF0Y2goKTsKK30KKworUEFUQ0hfRlVOX1NQRUMgdm9pZCByZWZyZXNoQmxlUGF0Y2godm9pZCkKK3sKKyAgIGVudGVyQmxlQ3BlUGF0Y2goKTsKKyAgIGNvbmZpZ3VyZUJsZVBhdGNoKCk7Cit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgcmZfcGF0Y2hfY3BlX2JsZSh2b2lkKQoreworICAgYXBwbHlCbGVQYXRjaCgpOworfQorCisjdW5kZWYgX0lSUV9QQVRDSF8wCisjdW5kZWYgX0lSUV9QQVRDSF8xCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gIF9SRl9QQVRDSF9DUEVfQkxFX0gKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX2NwZV9ibGVfcHJpdl8xXzIuaCBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9jcGVfYmxlX3ByaXZfMV8yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYTg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvcmZfcGF0Y2hlcy9yZl9wYXRjaF9jcGVfYmxlX3ByaXZfMV8yLmgKQEAgLTAsMCArMSwzMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICByZl9wYXRjaF9jcGVfYmxlX3ByaXZfMV8yLmgKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZSQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb24kCisqCisqICBEZXNjcmlwdGlvbjogICAgUkYgQ29yZSBwYXRjaCBmaWxlIGZvciBDQzI2eHggQmx1ZXRvb3RoIExvdyBFbmVyZ3kgd2l0aCBwcml2YWN5IDEuMiBzdXBwb3J0CisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JGX1BBVENIX0NQRV9CTEVfUFJJVl8xXzJfSAorI2RlZmluZSBfUkZfUEFUQ0hfQ1BFX0JMRV9QUklWXzFfMl9ICisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBJZiBidWlsZGluZyB3aXRoIGEgQysrIGNvbXBpbGVyLCBtYWtlIGFsbCBvZiB0aGUgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIKKy8vIGhhdmUgYSBDIGJpbmRpbmcuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIENQRV9QQVRDSF9UWVBFCisjZGVmaW5lIENQRV9QQVRDSF9UWVBFIHN0YXRpYyBjb25zdCB1aW50MzJfdAorI2VuZGlmCisKKyNpZm5kZWYgU1lTX1BBVENIX1RZUEUKKyNkZWZpbmUgU1lTX1BBVENIX1RZUEUgc3RhdGljIGNvbnN0IHVpbnQzMl90CisjZW5kaWYKKworI2lmbmRlZiBQQVRDSF9GVU5fU1BFQworI2RlZmluZSBQQVRDSF9GVU5fU1BFQyBzdGF0aWMgaW5saW5lCisjZW5kaWYKKworI2lmbmRlZiBfQVBQTFlfUEFUQ0hfVEFCCisjZGVmaW5lIF9BUFBMWV9QQVRDSF9UQUIKKyNlbmRpZgorCisKK0NQRV9QQVRDSF9UWVBFIHBhdGNoSW1hZ2VCbGVQcml2MTJbXSA9IHsKKyAgIDB4MjEwMDA1YzUsCisgICAweDIxMDAwNjExLAorICAgMHgyMTAwMDY5MSwKKyAgIDB4MjEwMDA0N2QsCisgICAweDRjMTdiNWYwLAorICAgMHgxODYxMjE0MCwKKyAgIDB4MjgwMjc4YzgsCisgICAweDQ4MDlkMDA1LAorICAgMHg2MDAxMjEwMCwKKyAgIDB4NDc4ODQ5MDgsCisgICAweDZlMjViZGYwLAorICAgMHg2MDM1NGUwNywKKyAgIDB4NDMyODA3NjAsCisgICAweDY4Mjc2NjIwLAorICAgMHg0ODBlNjAyNCwKKyAgIDB4NjAyNzQ3ODAsCisgICAweGJkZjA2MDM1LAorICAgMHg0MDA0MTEyYywKKyAgIDB4MDAwMDY1YTUsCisgICAweDQwMDQ0MDI4LAorICAgMHg0YzA3YjUxMCwKKyAgIDB4MjkwMDdkYTEsCisgICAweDIxMDFkMTA1LAorICAgMHgwMjQ4NzVhMSwKKyAgIDB4MzkzZTQ5MDQsCisgICAweDY4MjA0Nzg4LAorICAgMHhkMDAwMjgwMCwKKyAgIDB4YmQxMDQ3ODAsCisgICAweDIxMDAwMjU0LAorICAgMHgwMDAwMzk4YiwKKyAgIDB4NDkwNWI1MTAsCisgICAweGI2NzI0YTA1LAorICAgMHgyODAxNzhjOCwKKyAgIDB4MjAwMWRjMDIsCisgICAweDFkMTI3MDQ4LAorICAgMHg0NzEwYjY2MiwKKyAgIDB4MjEwMDAyOTQsCisgICAweDAwMDA0NzZkLAorICAgMHg0ZDUzYjVmZSwKKyAgIDB4NDYyYzQ2MjgsCisgICAweDkwMDAzMDQwLAorICAgMHg3ZTAxNDYyNywKKyAgIDB4NzgzODM3NjAsCisgICAweGQwMDIyOTAwLAorICAgMHhkMTA3MDdjMCwKKyAgIDB4MDljMWUwNTAsCisgICAweDA3YzBkMDRlLAorICAgMHg3ZDIwZDE0YywKKyAgIDB4ZDU0OTA2NDAsCisgICAweDMxNzI0NjI5LAorICAgMHgyMDA2NGE0OCwKKyAgIDB4OTgwMDQ3OTAsCisgICAweDI4MDA3ZTAwLAorICAgMHg3ZDIwZDAwNywKKyAgIDB4ZDUwMTA2NDAsCisgICAweGUwMDAyMDAzLAorICAgMHgyNjEzMjAwMSwKKyAgIDB4NmY2OGUwMDgsCisgICAweDI4MDEwZjgwLAorICAgMHgyMDA2ZDAwMiwKKyAgIDB4ZTAwMTQ2MDYsCisgICAweDI2MDcyMDAzLAorICAgMHgwMjMxMjIwMSwKKyAgIDB4MWE4OTA0MTIsCisgICAweDAyMDA4YTdhLAorICAgMHg0MzAyMDQxMiwKKyAgIDB4MzU4MDZmNmIsCisgICAweDY4YTg5NTAxLAorICAgMHg0N2E4NGQzNywKKyAgIDB4MmUwNjIyMDEsCisgICAweDJlMDdkMDAyLAorICAgMHhlMDA3ZDAwMiwKKyAgIDB4ZTAwNTQzYzAsCisgICAweDcwNzk3ODM5LAorICAgMHg3MDM5NDMxMSwKKyAgIDB4NjEwODk5MDEsCisgICAweGRhMDEyODAwLAorICAgMHg1NTAyMjAzOSwKKyAgIDB4N2U4MDk4MDAsCisgICAweGQwMDIyODAwLAorICAgMHgyMDFlMjEwNiwKKyAgIDB4NmE2MWUwMDIsCisgICAweDIwMWYxZjg5LAorICAgMHg2Y2ExNjJhMSwKKyAgIDB4NjRlMDQ3ODgsCisgICAweGJkZmUyMDAwLAorICAgMHg0NzgwNDgyNiwKKyAgIDB4NDgyMmJkZmUsCisgICAweDc4NDEzMDYwLAorICAgMHhkMDAyMjkwMCwKKyAgIDB4MjEwMDcwMDEsCisgICAweDQ4MjE3MDQxLAorICAgMHg0NzAwMzhiMCwKKyAgIDB4NGUxY2I1ZjgsCisgICAweDQ2MzU0ODFmLAorICAgMHg3ZmVjMzU0MCwKKyAgIDB4MDllMTQ2MzcsCisgICAweDZkYjFkMDFhLAorICAgMHhkMDE3MjkwMSwKKyAgIDB4MjkwMDdmNjksCisgICAweDA3YTFkMDAyLAorICAgMHhlMDExZDUwMiwKKyAgIDB4ZDEwZjA3ZTEsCisgICAweDA2NDk3ZDM5LAorICAgMHgyMTAzZDUwYywKKyAgIDB4NzdlOTQzMjEsCisgICAweDZmMzE0NzgwLAorICAgMHgyOTAxMGY4OSwKKyAgIDB4MjEwMGQwMDIsCisgICAweDc2NzkzNzIwLAorICAgMHhiZGY4NzdlYywKKyAgIDB4YmRmODQ3ODAsCisgICAweDMxNDA0OTA5LAorICAgMHgyODE1NzUwOCwKKyAgIDB4MjgxYmQwMDgsCisgICAweDI4MWRkMDA4LAorICAgMHg0OTBhZDAwOCwKKyAgIDB4MTg0MDAwODAsCisgICAweDQ3NzA2OTgwLAorICAgMHg0NzcwNDgwOCwKKyAgIDB4NDc3MDQ4MDgsCisgICAweDQ3NzA0ODA4LAorICAgMHgyMTAwMDE0NCwKKyAgIDB4MDAwMGI4YWYsCisgICAweDAwMDBhMDAxLAorICAgMHgwMDAwYmUwMywKKyAgIDB4MDAwMGI5OGQsCisgICAweDAwMDBjY2MwLAorICAgMHgyMTAwMDU3OSwKKyAgIDB4MjEwMDA1NjMsCisgICAweDIxMDAwNDlkLAorICAgMHg0ZTFhYjVmOCwKKyAgIDB4NmIzMTQ2MDUsCisgICAweDA5Y2M0ODE5LAorICAgMHgyZDAwMDFlNCwKKyAgIDB4NDkxOGQwMTEsCisgICAweDI5MDI3ODA5LAorICAgMHg3YjAwZDAwZiwKKyAgIDB4YjY3MjQzMDQsCisgICAweDRmMTUyMDAxLAorICAgMHg0N2I4MDI0MCwKKyAgIDB4MzgyMDQ4MTEsCisgICAweDA5YzE4ODAwLAorICAgMHhkMDA0MDdjOSwKKyAgIDB4N2FjMGUwMTYsCisgICAweDdiNDBlN2YwLAorICAgMHg0OTBmZTdlZSwKKyAgIDB4NjFjYzYzMzQsCisgICAweDA3YzAwYTQwLAorICAgMHgyMDAxZDAwYywKKyAgIDB4NmFmMTAzODAsCisgICAweGQwMDEyZDAwLAorICAgMHhlMDAwNDMwMSwKKyAgIDB4NDYwODQzODEsCisgICAweDQ5MDc2MmYxLAorICAgMHg2MzQ4Mzk0MCwKKyAgIDB4NDdiODIwMDAsCisgICAweGJkZjhiNjYyLAorICAgMHgyMTAwMDI4MCwKKyAgIDB4MjEwMDAwODgsCisgICAweDIxMDAwMjk2LAorICAgMHgwMDAwM2NkZiwKKyAgIDB4NDAwNDQwNDAsCisgICAweDI4MDA0OTA3LAorICAgMHgyMDA0ZDAwMCwKKyAgIDB4YjY3MjRhMDYsCisgICAweDA3Yzk3ODA5LAorICAgMHg1ODEwZDAwMSwKKyAgIDB4MjA4MGUwMDAsCisgICAweGIyNDBiNjYyLAorICAgMHgwMDAwNDc3MCwKKyAgIDB4MjEwMDAyNmIsCisgICAweDQwMDQ2MDU4LAorfTsKKyNkZWZpbmUgX05XT1JEX1BBVENISU1BR0VfQkxFX1BSSVZfMV8yIDE3MworCisjZGVmaW5lIF9OV09SRF9QQVRDSFNZU19CTEVfUFJJVl8xXzIgMAorCisjZGVmaW5lIF9JUlFfUEFUQ0hfMCAweDIxMDAwNDE1CisjZGVmaW5lIF9JUlFfUEFUQ0hfMSAweDIxMDAwNDU1CisKKworI2lmbmRlZiBfQkxFX1BSSVZfMV8yX1NZU1JBTV9TVEFSVAorI2RlZmluZSBfQkxFX1BSSVZfMV8yX1NZU1JBTV9TVEFSVCAweDIwMDAwMDAwCisjZW5kaWYKKworI2lmbmRlZiBfQkxFX1BSSVZfMV8yX0NQRVJBTV9TVEFSVAorI2RlZmluZSBfQkxFX1BSSVZfMV8yX0NQRVJBTV9TVEFSVCAweDIxMDAwMDAwCisjZW5kaWYKKworI2RlZmluZSBfQkxFX1BSSVZfMV8yX1NZU19QQVRDSF9GSVhFRF9BRERSIDB4MjAwMDAwMDAKKworI2RlZmluZSBfQkxFX1BSSVZfMV8yX1BBUlNFUl9QQVRDSF9UQUJfT0ZGU0VUIDB4MDMzNAorI2RlZmluZSBfQkxFX1BSSVZfMV8yX1BBVENIX1RBQl9PRkZTRVQgMHgwMzNDCisjZGVmaW5lIF9CTEVfUFJJVl8xXzJfSVJRUEFUQ0hfT0ZGU0VUIDB4MDNBQworI2RlZmluZSBfQkxFX1BSSVZfMV8yX1BBVENIX1ZFQ19PRkZTRVQgMHgwNDA0CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgZW50ZXJCbGVQcml2MTJDcGVQYXRjaCh2b2lkKQoreworICAgdWludDMyX3QgKnBQYXRjaFZlYyA9ICh1aW50MzJfdCAqKSAoX0JMRV9QUklWXzFfMl9DUEVSQU1fU1RBUlQgKyBfQkxFX1BSSVZfMV8yX1BBVENIX1ZFQ19PRkZTRVQpOworCisjaWYgKF9OV09SRF9QQVRDSElNQUdFX0JMRV9QUklWXzFfMiA+IDApCisgICBtZW1jcHkocFBhdGNoVmVjLCBwYXRjaEltYWdlQmxlUHJpdjEyLCBzaXplb2YocGF0Y2hJbWFnZUJsZVByaXYxMikpOworI2VuZGlmCit9CisKK1BBVENIX0ZVTl9TUEVDIHZvaWQgZW50ZXJCbGVQcml2MTJTeXNQYXRjaCh2b2lkKQoreworfQorCitQQVRDSF9GVU5fU1BFQyB2b2lkIGNvbmZpZ3VyZUJsZVByaXYxMlBhdGNoKHZvaWQpCit7CisgICB1aW50OF90ICpwUGF0Y2hUYWIgPSAodWludDhfdCAqKSAoX0JMRV9QUklWXzFfMl9DUEVSQU1fU1RBUlQgKyBfQkxFX1BSSVZfMV8yX1BBVENIX1RBQl9PRkZTRVQpOworICAgdWludDMyX3QgKnBJcnFQYXRjaCA9ICh1aW50MzJfdCAqKSAoX0JMRV9QUklWXzFfMl9DUEVSQU1fU1RBUlQgKyBfQkxFX1BSSVZfMV8yX0lSUVBBVENIX09GRlNFVCk7CisKKworICAgcFBhdGNoVGFiWzFdID0gMDsKKyAgIHBQYXRjaFRhYlsxMDNdID0gMTsKKyAgIHBQYXRjaFRhYls2MF0gPSAyOworICAgcFBhdGNoVGFiWzQ4XSA9IDM7CisKKyAgIHBJcnFQYXRjaFsxXSA9IF9JUlFfUEFUQ0hfMDsKKyAgIHBJcnFQYXRjaFs5XSA9IF9JUlFfUEFUQ0hfMTsKK30KKworUEFUQ0hfRlVOX1NQRUMgdm9pZCBhcHBseUJsZVByaXYxMlBhdGNoKHZvaWQpCit7CisgICBlbnRlckJsZVByaXYxMlN5c1BhdGNoKCk7CisgICBlbnRlckJsZVByaXYxMkNwZVBhdGNoKCk7CisgICBjb25maWd1cmVCbGVQcml2MTJQYXRjaCgpOworfQorCitQQVRDSF9GVU5fU1BFQyB2b2lkIHJlZnJlc2hCbGVQcml2MTJQYXRjaCh2b2lkKQoreworICAgZW50ZXJCbGVQcml2MTJDcGVQYXRjaCgpOworICAgY29uZmlndXJlQmxlUHJpdjEyUGF0Y2goKTsKK30KKworUEFUQ0hfRlVOX1NQRUMgdm9pZCByZl9wYXRjaF9jcGVfYmxlX3ByaXZfMV8yKHZvaWQpCit7CisgICBhcHBseUJsZVByaXYxMlBhdGNoKCk7Cit9CisKKyN1bmRlZiBfSVJRX1BBVENIXzAKKyN1bmRlZiBfSVJRX1BBVENIXzEKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIE1hcmsgdGhlIGVuZCBvZiB0aGUgQyBiaW5kaW5ncyBzZWN0aW9uIGZvciBDKysgY29tcGlsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAgX1JGX1BBVENIX0NQRV9CTEVfUFJJVl8xXzJfSAorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3JmX3BhdGNoZXMvcmZfcGF0Y2hfcmZlX2JsZS5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX3JmZV9ibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBlYjJlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9yZl9wYXRjaGVzL3JmX3BhdGNoX3JmZV9ibGUuaApAQCAtMCwwICsxLDQxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHJmX3BhdGNoX3JmZV9ibGUuaAorKiAgUmV2aXNlZDogICAgICAgICREYXRlJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbiQKKyoKKyogIERlc2NyaXB0aW9uOiAKKyoKKyogIENvcHlyaWdodCAoYykgMjAxNS0yMDE2LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX1JGX1BBVENIX1JGRV9CTEVfSAorI2RlZmluZSBfUkZfUEFUQ0hfUkZFX0JMRV9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfdHlwZXMuaD4KKworI2lmbmRlZiBSRkVfUEFUQ0hfVFlQRQorI2RlZmluZSBSRkVfUEFUQ0hfVFlQRSBzdGF0aWMgY29uc3QgdWludDMyX3QKKyNlbmRpZgorCisjaWZuZGVmIFBBVENIX0ZVTl9TUEVDCisjZGVmaW5lIFBBVENIX0ZVTl9TUEVDIHN0YXRpYyBpbmxpbmUKKyNlbmRpZgorCisjaWZuZGVmIFJGQ19SRkVSQU1fQkFTRQorI2RlZmluZSBSRkNfUkZFUkFNX0JBU0UgMHgyMTAwQzAwMAorI2VuZGlmCisKK1JGRV9QQVRDSF9UWVBFIHBhdGNoQmxlUmZlWzMxNV0gPSB7IAorICAgMHgwMDAwNjE1NCwKKyAgIDB4MDAwMjE0N2YsCisgICAweDAwMDUwMDA2LAorICAgMHgwMDA4MDAwZiwKKyAgIDB4MDA1MjAwNDgsCisgICAweDAwM2ZmZjgwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4NDAwMDQwMzAsCisgICAweDQwMDM0MDAxLAorICAgMHg0MDBmNDAwNywKKyAgIDB4NDBjZjQwNGYsCisgICAweDQzY2Y0MWNmLAorICAgMHg0ZmNmNDdjZiwKKyAgIDB4MmZjZjNmY2YsCisgICAweDBmY2YxZmNmLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMGYwMDAwLAorICAgMHgwMDAwMDAwOCwKKyAgIDB4MDAwMDAwM2YsCisgICAweDAwM2YwMDQwLAorICAgMHgwMDA0MDAwMCwKKyAgIDB4MDAwZTAwNjgsCisgICAweDAwMDYwMGRjLAorICAgMHgwMDFhMDA0MywKKyAgIDB4MDAwMDAwMDUsCisgICAweDAwMDIwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwYzAwMDA0LAorICAgMHgwMDA0MDAwMCwKKyAgIDB4MDAwMDAwYzAsCisgICAweDAwMDAwMDA3LAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4OTEwMGMwNTAsCisgICAweGMwNzA3MDAwLAorICAgMHg3MDAwOTEwMCwKKyAgIDB4MDAyMTMxODIsCisgICAweGIxMTA5MTMxLAorICAgMHg4MTAxNzAwMCwKKyAgIDB4YTEwMGIxMDEsCisgICAweDkxMzIzMTgyLAorICAgMHg5MTAxYjExMCwKKyAgIDB4ODE0MTEwMTEsCisgICAweDQwNjMyMjQxLAorICAgMHg3MDAwMDZmMSwKKyAgIDB4OTEwMWMwNTEsCisgICAweDM5MTAxODMwLAorICAgMHhkMDA4MzE4MywKKyAgIDB4NmY0MTMxMTgsCisgICAweDkxMzEwMDMxLAorICAgMHgxNDgzYjExMCwKKyAgIDB4Njg2ZjE2MTQsCisgICAweDEwMjU3MDAwLAorICAgMHg5MTAwYzA1MCwKKyAgIDB4YzE0MGMzZjQsCisgICAweDZmMDMxNDIwLAorICAgMHgwNDQxMTAzMSwKKyAgIDB4MjJmMDgyNTAsCisgICAweDI2NTE0MDg0LAorICAgMHgzMTgyYzAyMiwKKyAgIDB4OTEzMTAwMjEsCisgICAweDM5NjNiMTEwLAorICAgMHgwNDQxMTAzMSwKKyAgIDB4MzE4MmMwODIsCisgICAweDkxMzEwMDIxLAorICAgMHgzOTYzYjExMCwKKyAgIDB4YzBhMjEwMzEsCisgICAweDAwMjEzMTgyLAorICAgMHhiMTEwOTEzMSwKKyAgIDB4MzExNTEwNTAsCisgICAweDkyMDUxNDA1LAorICAgMHg2NDUzNzAwMCwKKyAgIDB4MTAzMWMwNTIsCisgICAweDMxNjEwNjMxLAorICAgMHg2NDU2MDJjMSwKKyAgIDB4MTAzMWMxMTIsCisgICAweDA2NzEzOTIxLAorICAgMHgwMmUxMzE1MSwKKyAgIDB4NzAwMDY0NTYsCisgICAweDkxMDFjMDUxLAorICAgMHhjMGUyY2MwMSwKKyAgIDB4NjQ1MzY0NTYsCisgICAweGMwYzJjMTExLAorICAgMHhiMDU0NjQ1NiwKKyAgIDB4YTA1NDcxMDAsCisgICAweDgwZjBiMDY0LAorICAgMHg0MGI1MjIwMCwKKyAgIDB4YzEyMmMxMTEsCisgICAweGMwNTE2NDU2LAorICAgMHhjMGUyOTEwMSwKKyAgIDB4ODI2MDMxODIsCisgICAweDkxMzIwMDAyLAorICAgMHhjMzAwYjExMCwKKyAgIDB4NjQ1MzY4YzgsCisgICAweDkwYjAxMjQwLAorICAgMHhjMzAwYjAzMiwKKyAgIDB4YzI0MDY4Y2UsCisgICAweDEyODA2OGQwLAorICAgMHhiMDMyOTBiMCwKKyAgIDB4NjQ1MzcwMDAsCisgICAweGMxMjJjMTAxLAorICAgMHhjMTAxNjQ1NiwKKyAgIDB4NjQ1NmMwYzIsCisgICAweDY0OWQ4MjUzLAorICAgMHg5MGIwMTJjMCwKKyAgIDB4NzAwMGIwMzIsCisgICAweGMyNzI2NDUzLAorICAgMHg2NDU2YzA4MSwKKyAgIDB4YzExMWMxMjIsCisgICAweGMwMDI2NDU2LAorICAgMHg2NDU2YzExMSwKKyAgIDB4YzMzMWMwNjIsCisgICAweGMzNjI2NDU2LAorICAgMHg2NDU2YzExMSwKKyAgIDB4YzExMWMzMDIsCisgICAweDgyNTM2NDU2LAorICAgMHg2NDlkMzk1MywKKyAgIDB4NjQ1YmMzZTIsCisgICAweDQwZjgyMjExLAorICAgMHhjODgxYzI0MiwKKyAgIDB4YzI1MjY0NTYsCisgICAweDY0NTZjMTExLAorICAgMHhjZWUxYzI3MiwKKyAgIDB4YzIwMjY0NTYsCisgICAweDY0NTZjODgxLAorICAgMHhjODAxYzIwMiwKKyAgIDB4YzBiMDY0NTYsCisgICAweDcwMDA2OTBjLAorICAgMHhjMjQyNjQ1MywKKyAgIDB4NjQ1NmM4MDEsCisgICAweGMwMTFjMjUyLAorICAgMHhjMjcyNjQ1NiwKKyAgIDB4NjQ1NmMwZTEsCisgICAweGMxMDFjMDAyLAorICAgMHhjMDYyNjQ1NiwKKyAgIDB4NjQ1NmMzMDEsCisgICAweGMxMDFjMTIyLAorICAgMHhjMzYyNjQ1NiwKKyAgIDB4NjQ1NmMxMDEsCisgICAweGMxMDFjMzAyLAorICAgMHg4MjUzNjQ1NiwKKyAgIDB4NzAwMDY0OWQsCisgICAweDMxNjJjMTAyLAorICAgMHg4MGEwYzAwMSwKKyAgIDB4NDEzMjFlMDAsCisgICAweDYxMzQxYTEwLAorICAgMHgxYTEwMTAyMCwKKyAgIDB4NmUyMzZmMTMsCisgICAweDE2MTIxNjExLAorICAgMHg3MDAwNjkzNCwKKyAgIDB4ODJkMDkyZTAsCisgICAweDQ1M2IyMjAwLAorICAgMHg3MDAwYjJjMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDAwMDAwMDAwLAorICAgMHgwMDAwMDAwMCwKKyAgIDB4MDAwMDAwMDAsCisgICAweDcyMDU3MzA2LAorICAgMHg3MjBlNzIwYiwKKyAgIDB4NzEwMGIwNTAsCisgICAweGIwNjA4MDgxLAorICAgMHg4MDkyYTA1MCwKKyAgIDB4OTJmMWVmZjAsCisgICAweDY1M2E5MzAyLAorICAgMHg0NTc4MjI0MSwKKyAgIDB4YzFmMTgwODAsCisgICAweDE2MzAwNDEwLAorICAgMHgxNDAxMTEwMSwKKyAgIDB4NjE4YjZjMDEsCisgICAweDYxOGQ2MThjLAorICAgMHg2MThmNjE4ZSwKKyAgIDB4NjE5MTYxOTAsCisgICAweDYxOTU2MTkzLAorICAgMHg2MTk5NjE5NywKKyAgIDB4NjI3MzYyNzAsCisgICAweGMwZjI4MDkxLAorICAgMHgzMTIxMDQyMSwKKyAgIDB4MmE0MjgwODIsCisgICAweDE2MzIxNDEyLAorICAgMHgxNDIxMTEwMSwKKyAgIDB4NjFhNjZjMDEsCisgICAweDYxYWM2MWM3LAorICAgMHg2MWE2NjI3MywKKyAgIDB4NjFhYzYxYzcsCisgICAweDYxOWI2MjczLAorICAgMHg2MTliNjE5YiwKKyAgIDB4NjE5YjYxOWIsCisgICAweDY0YWM2MTliLAorICAgMHg2NGQ1NjE5YiwKKyAgIDB4NjRlMjYxOWIsCisgICAweDY1MGU2MTliLAorICAgMHg2NTJhNjE5YiwKKyAgIDB4ODA4MjYxOWIsCisgICAweDkyZjJkZmUwLAorICAgMHhiMGIwNjUzYSwKKyAgIDB4YjBiMTYxYTIsCisgICAweDcyMDU3MzA2LAorICAgMHg2MTU4YjAzMCwKKyAgIDB4NjUzYWNmZDAsCisgICAweGMwMDNjMjg0LAorICAgMHg2NDY4YzNjMCwKKyAgIDB4OTE1MDc4OTAsCisgICAweDMxMTA3ODYwLAorICAgMHgxNDEwNzg2MSwKKyAgIDB4Nzg1MDkyMDAsCisgICAweDc4NjEzMTQwLAorICAgMHgzMTQwMDAxMCwKKyAgIDB4MDAxMDc4NzEsCisgICAweDc4YjA5MjEwLAorICAgMHg3ODgxOTI2MCwKKyAgIDB4NzgzMDkyMjEsCisgICAweDc4NDEzMTQwLAorICAgMHg5MjMwMDAxMCwKKyAgIDB4OTFmMGMwMTAsCisgICAweGEwNTQ2MTliLAorICAgMHgyMjUwODBmMCwKKyAgIDB4ODA0MDQ1Y2YsCisgICAweDQ2NjYyMjAwLAorICAgMHhjODAwNjFjNywKKyAgIDB4ODE1OTkxNjAsCisgICAweDgwOTFiMDUwLAorICAgMHg0NjJlMjI0MSwKKyAgIDB4NjUzYWNmYzAsCisgICAweDMxODI4MjEyLAorICAgMHgzOTQyMzk4MiwKKyAgIDB4NjQ3NzEwMjgsCisgICAweDEyZjE4MjEyLAorICAgMHgxMDJmMDQxMiwKKyAgIDB4MTQyZjMxMWYsCisgICAweDE0MjBjMTQwLAorICAgMHgzOTZkNmYwZCwKKyAgIDB4YzNmNDEwZGUsCisgICAweGMwODIwNDRlLAorICAgMHgwMDJlMzE4MiwKKyAgIDB4YzBhMjM5NmQsCisgICAweDAwMmQzMTgyLAorICAgMHgzOThhODIxYSwKKyAgIDB4MzE4MDgyMjAsCisgICAweGMwMGIzOTgwLAorICAgMHg3OGFjMTgwYiwKKyAgIDB4Mzk0MDgyMzAsCisgICAweGMwMTExMDAyLAorICAgMHhjMDEwMzAwMSwKKyAgIDB4MTgwMjE4MDEsCisgICAweDAwMjEzMTgyLAorICAgMHg5MTkxMjZjMSwKKyAgIDB4YjAxM2IwMDMsCisgICAweGIwNTNiMDYzLAorICAgMHgxNDM5ODIwMywKKyAgIDB4MjIwMTgwNDEsCisgICAweDgxYjQ0NjY2LAorICAgMHg4MWQ1OTFjNCwKKyAgIDB4MWNiNTE4OTUsCisgICAweDFjYzU0ZTFjLAorICAgMHg5MTY1NGE1NCwKKyAgIDB4MjIxMDgwZjAsCisgICAweDYyMmM0MjBjLAorICAgMHhiMTEwOTEzZCwKKyAgIDB4YjExMDkxM2UsCisgICAweDkyMGY5MTY1LAorICAgMHgxNGY5ODE1OSwKKyAgIDB4MTBiYzE4YWIsCisgICAweDIyNTA4MGYwLAorICAgMHgyMjEwNDFjNywKKyAgIDB4NjIwYzQ2MmMsCisgICAweDY1M2FjZmIwLAorICAgMHg4MjMwYjA2MywKKyAgIDB4YzBmMjEwMDAsCisgICAweDEwMDIwNDIwLAorICAgMHgzMDAxYzAxMSwKKyAgIDB4MTgwMWMwMTAsCisgICAweDMxODIxODAyLAorICAgMHgyNmMxMDAyMSwKKyAgIDB4OTE5MTkxOTEsCisgICAweGIwMDNiMDEzLAorICAgMHhiMDUzYjA2MywKKyAgIDB4YjA1NGIwNjQsCisgICAweDgwNDE3MTAwLAorICAgMHg0NjY2MjIwMSwKKyAgIDB4YjA2NGIwNjMsCisgICAweDIyNTA4MGYwLAorICAgMHg4MWIxNDFjNywKKyAgIDB4ODFkMTkxYzEsCisgICAweDkxNjExODkxLAorICAgMHg2MjQ0YjAzMSwKKyAgIDB4MzE4MjgyMTIsCisgICAweDM5NDIzOTgyLAorICAgMHg2NDc3MTAyOCwKKyAgIDB4ODIwNTgxNTksCisgICAweDgyMjAxNDU5LAorICAgMHgxODBiYzAwYiwKKyAgIDB4YzA4MDc4YWMsCisgICAweGIwNjM3MTAwLAorICAgMHg2MjBjNmE2MiwKKyAgIDB4ODE2MjgyMDEsCisgICAweDNkODIzMTgyLAorICAgMHg5MmYxZWZhMCwKKyAgIDB4NjUzYTkzMDIsCisgICAweDYxOWJhMDAzLAorICAgMHg2NDc3ODBhMiwKKyAgIDB4YjA1MDYxOWIsCisgICAweDYxOWI3MTAwCit9OworCitQQVRDSF9GVU5fU1BFQyB2b2lkIHJmX3BhdGNoX3JmZV9ibGUodm9pZCkKK3sKKyNpZmRlZiBfX1BBVENIX05PX1VOUk9MTElORworICAgdWludDMyX3QgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAzMTU7IGkrKykgeworICAgICAgSFdSRUcoUkZDX1JGRVJBTV9CQVNFICsgNCAqIGkpID0gcGF0Y2hCbGVSZmVbaV07CisgICB9CisjZWxzZQorICAgY29uc3QgdWludDMyX3QgKnBTID0gcGF0Y2hCbGVSZmU7CisgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwRCA9ICZIV1JFRyhSRkNfUkZFUkFNX0JBU0UpOworICAgdWludDMyX3QgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4OworICAgdWludDMyX3Qgbkl0ZXJhdGlvbnMgPSAzOTsKKworICAgZG8geworICAgICAgdDEgPSAqcFMrKzsKKyAgICAgIHQyID0gKnBTKys7CisgICAgICB0MyA9ICpwUysrOworICAgICAgdDQgPSAqcFMrKzsKKyAgICAgIHQ1ID0gKnBTKys7CisgICAgICB0NiA9ICpwUysrOworICAgICAgdDcgPSAqcFMrKzsKKyAgICAgIHQ4ID0gKnBTKys7CisgICAgICAqcEQrKyA9IHQxOworICAgICAgKnBEKysgPSB0MjsKKyAgICAgICpwRCsrID0gdDM7CisgICAgICAqcEQrKyA9IHQ0OworICAgICAgKnBEKysgPSB0NTsKKyAgICAgICpwRCsrID0gdDY7CisgICAgICAqcEQrKyA9IHQ3OworICAgICAgKnBEKysgPSB0ODsKKyAgIH0gd2hpbGUgKC0tbkl0ZXJhdGlvbnMpOworCisgICB0MSA9ICpwUysrOworICAgdDIgPSAqcFMrKzsKKyAgIHQzID0gKnBTKys7CisgICAqcEQrKyA9IHQxOworICAgKnBEKysgPSB0MjsKKyAgICpwRCsrID0gdDM7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvY2NmZy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL2NjZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2EyOWZhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL2NjZmcuYwpAQCAtMCwwICsxLDQ4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIGNjZmcuYworKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE2LTAzLTE0IDEwOjQ2OjMyICswMTAwIChtYSwgMTQgbWFyIDIwMTYpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDE2ODYyICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBDdXN0b21lciBDb25maWd1cmF0aW9uIGZvciBDQzI2eHggZGV2aWNlIGZhbWlseSAoSFcgcmV2IDIpLgorKgorKiAgQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworKgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogIGFyZSBtZXQ6CisqCisqICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCisqICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGluYy9od190eXBlcy5oPgorI2luY2x1ZGUgPGluYy9od19jY2ZnLmg+CisjaW5jbHVkZSA8aW5jL2h3X2NjZmdfc2ltcGxlX3N0cnVjdC5oPgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSW50cm9kdWN0aW9uCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGZpZWxkcyB1c2VkIGJ5IEJvb3QgUk9NLCBzdGFydHVwIGNvZGUsIGFuZCBTVyByYWRpbyAKKy8vIHN0YWNrcyB0byBjb25maWd1cmUgY2hpcCBiZWhhdmlvci4KKy8vCisvLyBGaWVsZHMgYXJlIGRvY3VtZW50ZWQgaW4gbW9yZSBkZXRhaWxzIGluIGh3X2NjZmcuaCBhbmQgQ0NGRy5odG1sIGluIAorLy8gRHJpdmVyTGliIGRvY3VtZW50YXRpb24gKGRvY19vdmVydmlldy5odG1sIC0+IENQVSBEb21haW4gTWVtb3J5IE1hcCAtPiBDQ0ZHKS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBTZXQgdGhlIHZhbHVlcyBvZiB0aGUgaW5kaXZpZHVhbCBiaXQgZmllbGRzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBBbHRlcm5hdGl2ZSBEQy9EQyBzZXR0aW5ncworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNpZm5kZWYgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HCisjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORyAgICAweDAgICAgLy8gQWx0ZXJuYXRpdmUgREMvREMgc2V0dGluZyBlbmFibGVkCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfQUxUX0RDRENfU0VUVElORyAweDEgICAgLy8gQWx0ZXJuYXRpdmUgREMvREMgc2V0dGluZyBkaXNhYmxlZAorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTgorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19WTUlOICAgICAgICAgICAgICAweDggICAgICAgIC8vIDIuMjVWCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU4KKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfRElUSEVSX0VOICAgICAgICAgMHgwICAgICAgICAvLyBEaXNhYmxlCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0RJVEhFUl9FTiAgICAgIDB4MSAgICAgICAgLy8gRW5hYmxlCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBSworI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19JUEVBSyAgICAgICAgICAgICAweDIgICAgICAgIC8vIDM5bUEKKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIFhPU0Mgb3ZlcnJpZGUgc2V0dGluZ3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaWZuZGVmIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlIKKy8vICNkZWZpbmUgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUiAgICAgMHgwICAgICAgICAvLyBFbmFibGUgb3ZlcnJpZGUKKyNkZWZpbmUgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19YT1NDX09WUiAgICAgICAgMHgxICAgICAgICAvLyBEaXNhYmxlIG92ZXJyaWRlCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19JTklUCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX0lOSVQgICAgICAgICAgIDB4MCAgICAgICAgLy8gRGVsdGEgPSAwCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVQKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfT0ZGU0VUICAgICAgICAgMHgwICAgICAgICAvLyBEZWx0YSA9IDAKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUICAgICAgICAgICAgIDB4MTAgICAgICAgLy8gMTYwMHVzCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBQb3dlciBzZXR0aW5ncworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQQorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBICAgICAgICAweEYgICAgICAgIC8vIFNpZ25lZCBkZWx0YSB2YWx1ZSArMSB0byBhcHBseSB0byB0aGUgVkREUl9UUklNX1NMRUVQIHRhcmdldCAoMHhGPS0xPWRlZmF1bHQ9bm8gY29tcGVuc2F0aW9uKQorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0UKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0UgICAgICAgICAgICAgICAgMHgwICAgICAgICAvLyBVc2UgdGhlIERDL0RDIGR1cmluZyByZWNoYXJnZSBpbiBwb3dlcmRvd24KKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfUkVDSEFSR0UgICAgICAgICAgICAgMHgxICAgICAgICAvLyBEbyBub3QgdXNlIHRoZSBEQy9EQyBkdXJpbmcgcmVjaGFyZ2UgaW4gcG93ZXJkb3duCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19NT0RFX0NPTkZfRENEQ19BQ1RJVkUKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFICAgICAgICAgICAgICAgICAgMHgwICAgICAgICAvLyBVc2UgdGhlIERDL0RDIGR1cmluZyBhY3RpdmUgbW9kZQorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfRENEQ19BQ1RJVkUgICAgICAgICAgICAgICAweDEgICAgICAgIC8vIERvIG5vdCB1c2UgdGhlIERDL0RDIGR1cmluZyBhY3RpdmUgbW9kZQorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFNfQk9EX0xFVkVMCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERTX0JPRF9MRVZFTCAgICAgICAgICAgIDB4MCAgICAgICAgLy8gVkREUyBCT0QgbGV2ZWwgaXMgMi4wVgorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUwgICAgICAgICAgICAgICAweDEgICAgICAgIC8vIFZERFMgQk9EIGxldmVsIGlzIDEuOFYgKG9yIDEuNjVWIGZvciBleHRlcm5hbCByZWd1bGF0b3IgbW9kZSkKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERSX0NBUAorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9DQVAgICAgICAgICAgICAgICAgICAgICAweDNBICAgICAgIC8vIFVuc2lnbmVkIDgtYml0IGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBtaW4uIGRlY291cGxpbmcgY2FwYWNpdGFuY2Ugb24gVkREUiBpbiB1bml0cyBvZiAxMDBuRgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQworI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX1RDICAgICAgICAgICAweDEgICAgICAgIC8vIFRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBvbiBWRERSIHNsZWVwIHRyaW0gZGlzYWJsZWQgKGRlZmF1bHQpCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERSX1RSSU1fU0xFRVBfVEMgICAgICAgIDB4MCAgICAgICAgLy8gVGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIG9uIFZERFIgc2xlZXAgdHJpbSBlbmFibGVkCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBDbG9jayBzZXR0aW5ncworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTiAgICAgICAgICAgIDB4MCAgICAgICAgLy8gTEYgY2xvY2sgZGVyaXZlZCBmcm9tIEhpZ2ggRnJlcXVlbmN5IFhPU0MKKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OICAgICAgICAgICAgMHgxICAgICAgICAvLyBFeHRlcm5hbCBMRiBjbG9jaworI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfU0NMS19MRl9PUFRJT04gICAgICAgICAgICAgICAweDIgICAgICAgIC8vIExGIFhPU0MKKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OICAgICAgICAgICAgMHgzICAgICAgICAvLyBMRiBSQ09TQworI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRAorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBfTU9EICAgICAgICAgICAgICAweDAgICAgICAgIC8vIEFwcGx5IGNhcC1hcnJheSBkZWx0YQorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBfTU9EICAgICAgICAgICAgICAgICAweDEgICAgICAgIC8vIERvbid0IGFwcGx5IGNhcC1hcnJheSBkZWx0YSAKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBICAgICAgICAgIDB4RkYgICAgICAgLy8gU2lnbmVkIDgtYml0IHZhbHVlLCBkaXJlY3RseSBtb2RpZnlpbmcgdHJpbW1lZCBYT1NDIGNhcC1hcnJheSB2YWx1ZQorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfRVhUX0xGX0NMS19ESU8KKyNkZWZpbmUgU0VUX0NDRkdfRVhUX0xGX0NMS19ESU8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAgICAgICAvLyBESU8gbnVtYmVyIGlmIHVzaW5nIGV4dGVybmFsIExGIGNsb2NrCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19FWFRfTEZfQ0xLX1JUQ19JTkNSRU1FTlQKKyNkZWZpbmUgU0VUX0NDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UICAgICAgICAgICAgICAgMHg4MDAwMDAgICAvLyBSVEMgaW5jcmVtZW50IHJlcHJlc2VudGluZyB0aGUgZXh0ZXJuYWwgTEYgY2xvY2sgZnJlcXVlbmN5CisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBTcGVjaWFsIEhGIGNsb2NrIHNvdXJjZSBzZXR0aW5nCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNpZm5kZWYgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfRlJFUQorLy8gI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRICAgICAgICAgICAgICAgICAweDEgICAgICAgIC8vIFVzZSBIUE9TQyBhcyBIRiBzb3VyY2UgKGlmIGV4ZWN1dGluZyBvbiBhIEhQT1NDIGNoaXAsIG90aGVyd2lzZSB1c2luZyBkZWZhdWx0ICg9MHgzKSkKKy8vICNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfRlJFUSAgICAgICAgICAgICAgICAgMHgyICAgICAgICAvLyBIRiBzb3VyY2UgaXMgYSA0OCBNSHogeHRhbAorI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19GUkVRICAgICAgICAgICAgICAgICAgICAweDMgICAgICAgIC8vIEhGIHNvdXJjZSBpcyBhIDI0IE1IeiB4dGFsIChkZWZhdWx0KQorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQm9vdGxvYWRlciBzZXR0aW5ncworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNpZm5kZWYgU0VUX0NDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFCisjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CT09UTE9BREVSX0VOQUJMRSAgICAgICAgICAgIDB4MDAgICAgICAgLy8gRGlzYWJsZSBST00gYm9vdCBsb2FkZXIKKy8vICNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JPT1RMT0FERVJfRU5BQkxFICAgICAgICAgMHhDNSAgICAgICAvLyBFbmFibGUgUk9NIGJvb3QgbG9hZGVyCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19CTF9DT05GSUdfQkxfTEVWRUwKKy8vICNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0xFVkVMICAgICAgICAgICAgICAgICAgMHgwICAgICAgICAvLyBBY3RpdmUgbG93IHRvIG9wZW4gYm9vdCBsb2FkZXIgYmFja2Rvb3IKKyNkZWZpbmUgU0VUX0NDRkdfQkxfQ09ORklHX0JMX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgxICAgICAgICAvLyBBY3RpdmUgaGlnaCB0byBvcGVuIGJvb3QgbG9hZGVyIGJhY2tkb29yCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUgorI2RlZmluZSBTRVRfQ0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUiAgICAgICAgICAgICAgICAweEZGICAgICAgIC8vIERJTyBudW1iZXIgZm9yIGJvb3QgbG9hZGVyIGJhY2tkb29yCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9FTkFCTEUgICAgICAgICAgICAgICAgIDB4QzUgICAgICAgLy8gRW5hYmxlZCBib290IGxvYWRlciBiYWNrZG9vcgorI2RlZmluZSBTRVRfQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFICAgICAgICAgICAgICAgICAgICAweEZGICAgICAgIC8vIERpc2FibGVkIGJvb3QgbG9hZGVyIGJhY2tkb29yCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBEZWJ1ZyBhY2Nlc3Mgc2V0dGluZ3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfVElfT1BUSU9OU19USV9GQV9FTkFCTEUKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19USV9PUFRJT05TX1RJX0ZBX0VOQUJMRSAgICAgICAgICAgMHgwMCAgICAgICAvLyBEaXNhYmxlIHVubG9ja2luZyBvZiBUSSBGQSBvcHRpb24uCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVElfT1BUSU9OU19USV9GQV9FTkFCTEUgICAgICAgIDB4QzUgICAgICAgLy8gRW5hYmxlIHVubG9ja2luZyBvZiBUSSBGQSBvcHRpb24gd2l0aCB0aGUgdW5sb2NrIGNvZGUKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFICAgICAgIDB4MDAgICAgICAgLy8gQWNjZXNzIGRpc2FibGVkCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFICAgICAgICAgIDB4QzUgICAgICAgLy8gQWNjZXNzIGVuYWJsZWQgaWYgYWxzbyBlbmFibGVkIGluIEZDRkcKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX1BSQ01fVEFQX0VOQUJMRQorI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9QUkNNX1RBUF9FTkFCTEUgICAgICAgICAweDAwICAgICAgIC8vIEFjY2VzcyBkaXNhYmxlZAorLy8gI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9QUkNNX1RBUF9FTkFCTEUgICAgICAweEM1ICAgICAgIC8vIEFjY2VzcyBlbmFibGVkIGlmIGFsc28gZW5hYmxlZCBpbiBGQ0ZHCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9URVNUX1RBUF9FTkFCTEUKKy8vICNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFICAgICAgMHgwMCAgICAgICAvLyBBY2Nlc3MgZGlzYWJsZWQKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfVEVTVF9UQVBfRU5BQkxFICAgICAgICAgMHhDNSAgICAgICAvLyBBY2Nlc3MgZW5hYmxlZCBpZiBhbHNvIGVuYWJsZWQgaW4gRkNGRworI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEUKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEUgICAgICAgMHgwMCAgICAgICAvLyBBY2Nlc3MgZGlzYWJsZWQKKy8vICNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QyX1RBUF9FTkFCTEUgICAgMHhDNSAgICAgICAvLyBBY2Nlc3MgZW5hYmxlZCBpZiBhbHNvIGVuYWJsZWQgaW4gRkNGRworI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QxX1RBUF9FTkFCTEUKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QxX1RBUF9FTkFCTEUgICAgICAgMHgwMCAgICAgICAvLyBBY2Nlc3MgZGlzYWJsZWQKKy8vICNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QxX1RBUF9FTkFCTEUgICAgMHhDNSAgICAgICAvLyBBY2Nlc3MgZW5hYmxlZCBpZiBhbHNvIGVuYWJsZWQgaW4gRkNGRworI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEUKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEUgICAgICAgICAgMHgwMCAgICAgICAvLyBBY2Nlc3MgZGlzYWJsZWQKKy8vICNkZWZpbmUgU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEUgICAgICAgMHhDNSAgICAgICAvLyBBY2Nlc3MgZW5hYmxlZCBpZiBhbHNvIGVuYWJsZWQgaW4gRkNGRworI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQWx0ZXJuYXRpdmUgSUVFRSA4MDIuMTUuNCBNQUMgYWRkcmVzcworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjaWZuZGVmIFNFVF9DQ0ZHX0lFRUVfTUFDXzAKKyNkZWZpbmUgU0VUX0NDRkdfSUVFRV9NQUNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRiAvLyBCaXRzIFszMTowXQorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfSUVFRV9NQUNfMQorI2RlZmluZSBTRVRfQ0NGR19JRUVFX01BQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGIC8vIEJpdHMgWzYzOjMyXQorI2VuZGlmCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQWx0ZXJuYXRpdmUgQkxFIGFkZHJlc3MKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI2lmbmRlZiBTRVRfQ0NGR19JRUVFX0JMRV8wCisjZGVmaW5lIFNFVF9DQ0ZHX0lFRUVfQkxFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYgLy8gQml0cyBbMzE6MF0KKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0lFRUVfQkxFXzEKKyNkZWZpbmUgU0VUX0NDRkdfSUVFRV9CTEVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRiAvLyBCaXRzIFs2MzozMl0KKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIEZsYXNoIGVyYXNlIHNldHRpbmdzCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI2lmbmRlZiBTRVRfQ0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX04KKy8vICNkZWZpbmUgU0VUX0NDRkdfRVJBU0VfQ09ORl9DSElQX0VSQVNFX0RJU19OICAgICAgICAgMHgwICAgICAgICAvLyBBbnkgY2hpcCBlcmFzZSByZXF1ZXN0IGRldGVjdGVkIGR1cmluZyBib290IHdpbGwgYmUgaWdub3JlZAorI2RlZmluZSBTRVRfQ0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX04gICAgICAgICAgICAweDEgICAgICAgIC8vIEFueSBjaGlwIGVyYXNlIHJlcXVlc3QgZGV0ZWN0ZWQgZHVyaW5nIGJvb3Qgd2lsbCBiZSBwZXJmb3JtZWQgYnkgdGhlIGJvb3QgRlcKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTgorLy8gI2RlZmluZSBTRVRfQ0NGR19FUkFTRV9DT05GX0JBTktfRVJBU0VfRElTX04gICAgICAgICAweDAgICAgICAgIC8vIERpc2FibGUgdGhlIGJvb3QgbG9hZGVyIGJhbmsgZXJhc2UgZnVuY3Rpb24KKyNkZWZpbmUgU0VUX0NDRkdfRVJBU0VfQ09ORl9CQU5LX0VSQVNFX0RJU19OICAgICAgICAgICAgMHgxICAgICAgICAvLyBFbmFibGUgdGhlIGJvb3QgbG9hZGVyIGJhbmsgZXJhc2UgZnVuY3Rpb24KKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIEZsYXNoIGltYWdlIHZhbGlkCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNpZm5kZWYgU0VUX0NDRkdfSU1BR0VfVkFMSURfQ09ORl9JTUFHRV9WQUxJRAorI2RlZmluZSBTRVRfQ0NGR19JTUFHRV9WQUxJRF9DT05GX0lNQUdFX1ZBTElEICAgICAgICAgICAweDAwMDAwMDAwIC8vIEZsYXNoIGltYWdlIGlzIHZhbGlkCisvLyAjZGVmaW5lIFNFVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSUQgICAgICAgIDxub24temVybz4gLy8gRmxhc2ggaW1hZ2UgaXMgaW52YWxpZCwgY2FsbCBib290bG9hZGVyCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBGbGFzaCBzZWN0b3Igd3JpdGUgcHJvdGVjdGlvbgorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfUFJPVF8zMV8wCisjZGVmaW5lIFNFVF9DQ0ZHX0NDRkdfUFJPVF8zMV8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKyNlbmRpZgorCisjaWZuZGVmIFNFVF9DQ0ZHX0NDRkdfUFJPVF82M18zMgorI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1BST1RfNjNfMzIgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZW5kaWYKKworI2lmbmRlZiBTRVRfQ0NGR19DQ0ZHX1BST1RfOTVfNjQKKyNkZWZpbmUgU0VUX0NDRkdfQ0NGR19QUk9UXzk1XzY0ICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorI2VuZGlmCisKKyNpZm5kZWYgU0VUX0NDRkdfQ0NGR19QUk9UXzEyN185NgorI2RlZmluZSBTRVRfQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2ICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZW5kaWYKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBTZWxlY3QgYmV0d2VlbiBjYWNoZSBvciBHUFJBTQorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjaWZuZGVmIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0KKy8vICNkZWZpbmUgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTSAgICAgICAgMHgwICAgICAgICAvLyBDYWNoZSBpcyBkaXNhYmxlZCBhbmQgR1BSQU0gaXMgYXZhaWxhYmxlIGF0IDB4MTEwMDAwMDAtMHgxMTAwMUZGRgorI2RlZmluZSBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0dQUkFNICAgICAgICAgICAweDEgICAgICAgIC8vIENhY2hlIGlzIGVuYWJsZWQgYW5kIEdQUkFNIGlzIGRpc2FibGVkICh1bmF2YWlsYWJsZSkKKyNlbmRpZgorCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIFNlbGVjdCBUQ1hPCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNpZm5kZWYgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPCisjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYTyAgICAgICAgICAgIDB4MSAgICAvLyBEaXNhYmxlIFRDWE8KKy8vICNkZWZpbmUgU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19UQ1hPICAgICAgICAgMHgwICAgIC8vIEVuYWJsZSBUWENPCisjZW5kaWYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENDRkcgdmFsdWVzIHRoYXQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19TSVpFX09GX0NDRkcgICAgICAgIDB4MDA1OAorI2RlZmluZSBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTQUJMRV9GTEFHUyAgICAgICAoQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTQUJMRV9GTEFHU19NID4+IENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1NfUykKKworI2RlZmluZSBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9FWFRfTE9BRCAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgU0VUX0NDRkdfTU9ERV9DT05GX1JUQ19DT01QICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFNFVF9DQ0ZHX01PREVfQ09ORl9IRl9DT01QICAgICAgICAgICAgICAgICAgICAgIDB4MQorCisjZGVmaW5lIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNDUgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgU0VUX0NDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFAyNSAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBTRVRfQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDUgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RNMTUgICAgICAgICAgICAgIDB4RkYKKworI2RlZmluZSBTRVRfQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEyNSAgICAgICAgICAgICAweEZGCisjZGVmaW5lIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTA1ICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgU0VUX0NDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA4NSAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBTRVRfQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDY1ICAgICAgICAgICAgICAweEZGCisKKyNkZWZpbmUgU0VUX0NDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMCAgICAgICAgICAgICAgICAgMHhGRkZGCisjZGVmaW5lIFNFVF9DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDEgICAgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgU0VUX0NDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMiAgICAgICAgICAgICAgICAgMHhGRgorCisjZGVmaW5lIFNFVF9DQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDAgICAgICAgICAgICAgICAgIDB4RkZGRgorI2RlZmluZSBTRVRfQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AxICAgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lIFNFVF9DQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDIgICAgICAgICAgICAgICAgIDB4RkYKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIENvbmNhdGVuYXRlIGJpdCBmaWVsZHMgdG8gd29yZHMuCisvLyBETyBOT1QgRURJVCEKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIERFRkFVTFRfQ0NGR19FWFRfTEZfQ0xLICAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19FWFRfTEZfQ0xLX0RJTyAgICAgICAgICAgPDwgQ0NGR19FWFRfTEZfQ0xLX0RJT19TICAgICAgICAgICApKSB8IH5DQ0ZHX0VYVF9MRl9DTEtfRElPX00gICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVCA8PCBDQ0ZHX0VYVF9MRl9DTEtfUlRDX0lOQ1JFTUVOVF9TICkpIHwgfkNDRkdfRVhUX0xGX0NMS19SVENfSU5DUkVNRU5UX00gKSApCisgICAgIAorI2RlZmluZSBERUZBVUxUX0NDRkdfTU9ERV9DT05GXzEgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTiAgICAgIDw8IENDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfVk1JTl9TICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19WTUlOX00gICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU4gPDwgQ0NGR19NT0RFX0NPTkZfMV9BTFRfRENEQ19ESVRIRVJfRU5fUyApKSB8IH5DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0RJVEhFUl9FTl9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0lQRUFLICAgICA8PCBDQ0ZHX01PREVfQ09ORl8xX0FMVF9EQ0RDX0lQRUFLX1MgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GXzFfQUxUX0RDRENfSVBFQUtfTSAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVCAgIDw8IENDRkdfTU9ERV9DT05GXzFfREVMVEFfSUJJQVNfSU5JVF9TICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19JTklUX00gICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVQgPDwgQ0NGR19NT0RFX0NPTkZfMV9ERUxUQV9JQklBU19PRkZTRVRfUyApKSB8IH5DQ0ZHX01PREVfQ09ORl8xX0RFTFRBX0lCSUFTX09GRlNFVF9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUICAgICA8PCBDQ0ZHX01PREVfQ09ORl8xX1hPU0NfTUFYX1NUQVJUX1MgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GXzFfWE9TQ19NQVhfU1RBUlRfTSAgICAgKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHUyAgKCBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19TSVpFX09GX0NDRkcgICAgICAgICA8PCBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19TSVpFX09GX0NDRkdfUyAgICAgICAgICkpIHwgfkNDRkdfU0laRV9BTkRfRElTX0ZMQUdTX1NJWkVfT0ZfQ0NGR19NICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1MgICAgICAgIDw8IENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU0FCTEVfRkxBR1NfUyAgICAgICAgKSkgfCB+Q0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTQUJMRV9GTEFHU19NICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1RDWE8gICAgICAgICAgICAgPDwgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1RDWE9fUyAgICAgICAgICAgICApKSB8IH5DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfVENYT19NICAgICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU0gICAgICAgICAgICA8PCBDQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfR1BSQU1fUyAgICAgICAgICAgICkpIHwgfkNDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19HUFJBTV9NICAgICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HIDw8IENDRkdfU0laRV9BTkRfRElTX0ZMQUdTX0RJU19BTFRfRENEQ19TRVRUSU5HX1MgKSkgfCB+Q0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX0FMVF9EQ0RDX1NFVFRJTkdfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSICAgICAgICAgPDwgQ0NGR19TSVpFX0FORF9ESVNfRkxBR1NfRElTX1hPU0NfT1ZSX1MgICAgICAgICApKSB8IH5DQ0ZHX1NJWkVfQU5EX0RJU19GTEFHU19ESVNfWE9TQ19PVlJfTSAgICAgICAgICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19NT0RFX0NPTkYgICAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX0RFTFRBIDw8IENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9TICkpIHwgfkNDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9ERUxUQV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9EQ0RDX1JFQ0hBUkdFICAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRV9TICAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfRENEQ19SRUNIQVJHRV9NICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX0RDRENfQUNUSVZFICAgICAgICAgICA8PCBDQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9TICAgICAgICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9EQ0RDX0FDVElWRV9NICAgICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9FWFRfTE9BRCAgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQURfUyAgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX1ZERFJfRVhUX0xPQURfTSAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9WRERTX0JPRF9MRVZFTCAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUxfUyAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfVkREU19CT0RfTEVWRUxfTSAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1NDTEtfTEZfT1BUSU9OICAgICAgICA8PCBDQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9TICAgICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9TQ0xLX0xGX09QVElPTl9NICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9UUklNX1NMRUVQX1RDICAgIDw8IENDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQ19TICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX1ZERFJfVFJJTV9TTEVFUF9UQ19NICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9SVENfQ09NUCAgICAgICAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfUlRDX0NPTVBfUyAgICAgICAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfUlRDX0NPTVBfTSAgICAgICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfRlJFUSAgICAgICAgICAgICA8PCBDQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfUyAgICAgICAgICAgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9YT1NDX0ZSRVFfTSAgICAgICAgICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfWE9TQ19DQVBfTU9EICAgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRF9TICAgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX1hPU0NfQ0FQX01PRF9NICAgICAgICAgICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX01PREVfQ09ORl9IRl9DT01QICAgICAgICAgICAgICAgPDwgQ0NGR19NT0RFX0NPTkZfSEZfQ09NUF9TICAgICAgICAgICAgICAgKSkgfCB+Q0NGR19NT0RFX0NPTkZfSEZfQ09NUF9NICAgICAgICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfTU9ERV9DT05GX1hPU0NfQ0FQQVJSQVlfREVMVEEgICA8PCBDQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBX1MgICApKSB8IH5DQ0ZHX01PREVfQ09ORl9YT1NDX0NBUEFSUkFZX0RFTFRBX00gICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19NT0RFX0NPTkZfVkREUl9DQVAgICAgICAgICAgICAgIDw8IENDRkdfTU9ERV9DT05GX1ZERFJfQ0FQX1MgICAgICAgICAgICAgICkpIHwgfkNDRkdfTU9ERV9DT05GX1ZERFJfQ0FQX00gICAgICAgICAgICAgICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19WT0xUX0xPQURfMCAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDQ1IDw8IENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA0NV9TICkpIHwgfkNDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA0NV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQMjUgPDwgQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDI1X1MgKSkgfCB+Q0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UUDI1X00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVFA1ICA8PCBDQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNV9TICApKSB8IH5DQ0ZHX1ZPTFRfTE9BRF8wX1ZERFJfRVhUX1RQNV9NICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19WT0xUX0xPQURfMF9WRERSX0VYVF9UTTE1IDw8IENDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVE0xNV9TICkpIHwgfkNDRkdfVk9MVF9MT0FEXzBfVkREUl9FWFRfVE0xNV9NICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19WT0xUX0xPQURfMSAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEyNSA8PCBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTI1X1MgKSkgfCB+Q0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDEyNV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTA1IDw8IENDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFAxMDVfUyApKSB8IH5DQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQMTA1X00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA4NSAgPDwgQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDg1X1MgICkpIHwgfkNDRkdfVk9MVF9MT0FEXzFfVkREUl9FWFRfVFA4NV9NICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDY1ICA8PCBDQ0ZHX1ZPTFRfTE9BRF8xX1ZERFJfRVhUX1RQNjVfUyAgKSkgfCB+Q0NGR19WT0xUX0xPQURfMV9WRERSX0VYVF9UUDY1X00gICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19SVENfT0ZGU0VUICAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AwIDw8IENDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMF9TICkpIHwgfkNDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMF9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDEgPDwgQ0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AxX1MgKSkgfCB+Q0NGR19SVENfT0ZGU0VUX1JUQ19DT01QX1AxX00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfUlRDX09GRlNFVF9SVENfQ09NUF9QMiA8PCBDQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDJfUyApKSB8IH5DQ0ZHX1JUQ19PRkZTRVRfUlRDX0NPTVBfUDJfTSApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfRlJFUV9PRkZTRVQgICAgICAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMCA8PCBDQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDBfUyApKSB8IH5DQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDBfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AxIDw8IENDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMV9TICkpIHwgfkNDRkdfRlJFUV9PRkZTRVRfSEZfQ09NUF9QMV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0ZSRVFfT0ZGU0VUX0hGX0NPTVBfUDIgPDwgQ0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AyX1MgKSkgfCB+Q0NGR19GUkVRX09GRlNFVF9IRl9DT01QX1AyX00gKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0lFRUVfTUFDXzAgICAgICAgICAgU0VUX0NDRkdfSUVFRV9NQUNfMAorI2RlZmluZSBERUZBVUxUX0NDRkdfSUVFRV9NQUNfMSAgICAgICAgICBTRVRfQ0NGR19JRUVFX01BQ18xCisjZGVmaW5lIERFRkFVTFRfQ0NGR19JRUVFX0JMRV8wICAgICAgICAgIFNFVF9DQ0ZHX0lFRUVfQkxFXzAKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0lFRUVfQkxFXzEgICAgICAgICAgU0VUX0NDRkdfSUVFRV9CTEVfMQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19CTF9DT05GSUcgICAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19CTF9DT05GSUdfQk9PVExPQURFUl9FTkFCTEUgPDwgQ0NGR19CTF9DT05GSUdfQk9PVExPQURFUl9FTkFCTEVfUyApKSB8IH5DQ0ZHX0JMX0NPTkZJR19CT09UTE9BREVSX0VOQUJMRV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTCAgICAgICAgICA8PCBDQ0ZHX0JMX0NPTkZJR19CTF9MRVZFTF9TICAgICAgICAgICkpIHwgfkNDRkdfQkxfQ09ORklHX0JMX0xFVkVMX00gICAgICAgICAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVIgICAgIDw8IENDRkdfQkxfQ09ORklHX0JMX1BJTl9OVU1CRVJfUyAgICAgKSkgfCB+Q0NGR19CTF9DT05GSUdfQkxfUElOX05VTUJFUl9NICAgICApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFICAgICAgICAgPDwgQ0NGR19CTF9DT05GSUdfQkxfRU5BQkxFX1MgICAgICAgICApKSB8IH5DQ0ZHX0JMX0NPTkZJR19CTF9FTkFCTEVfTSAgICAgICAgICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19FUkFTRV9DT05GICAgICAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX04gPDwgQ0NGR19FUkFTRV9DT05GX0NISVBfRVJBU0VfRElTX05fUyApKSB8IH5DQ0ZHX0VSQVNFX0NPTkZfQ0hJUF9FUkFTRV9ESVNfTl9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTiA8PCBDQ0ZHX0VSQVNFX0NPTkZfQkFOS19FUkFTRV9ESVNfTl9TICkpIHwgfkNDRkdfRVJBU0VfQ09ORl9CQU5LX0VSQVNFX0RJU19OX00gKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0NDRkdfVElfT1BUSU9OUyAgICAgKCBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0NDRkdfVElfT1BUSU9OU19USV9GQV9FTkFCTEUgPDwgQ0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFX1MgKSkgfCB+Q0NGR19DQ0ZHX1RJX09QVElPTlNfVElfRkFfRU5BQkxFX00gKSApCisKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wICAgICAgKCBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFICA8PCBDQ0ZHX0NDRkdfVEFQX0RBUF8wX0NQVV9EQVBfRU5BQkxFX1MgICkpIHwgfkNDRkdfQ0NGR19UQVBfREFQXzBfQ1BVX0RBUF9FTkFCTEVfTSAgKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFIDw8IENDRkdfQ0NGR19UQVBfREFQXzBfUFJDTV9UQVBfRU5BQkxFX1MgKSkgfCB+Q0NGR19DQ0ZHX1RBUF9EQVBfMF9QUkNNX1RBUF9FTkFCTEVfTSApICYgXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMF9URVNUX1RBUF9FTkFCTEUgPDwgQ0NGR19DQ0ZHX1RBUF9EQVBfMF9URVNUX1RBUF9FTkFCTEVfUyApKSB8IH5DQ0ZHX0NDRkdfVEFQX0RBUF8wX1RFU1RfVEFQX0VOQUJMRV9NICkgKQorCisjZGVmaW5lIERFRkFVTFRfQ0NGR19DQ0ZHX1RBUF9EQVBfMSAgICAgICggXAorCSAoICgodWludDMyX3QpKCBTRVRfQ0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDJfVEFQX0VOQUJMRSA8PCBDQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMl9UQVBfRU5BQkxFX1MgKSkgfCB+Q0NGR19DQ0ZHX1RBUF9EQVBfMV9QQklTVDJfVEFQX0VOQUJMRV9NICkgJiBcCisJICggKCh1aW50MzJfdCkoIFNFVF9DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFIDw8IENDRkdfQ0NGR19UQVBfREFQXzFfUEJJU1QxX1RBUF9FTkFCTEVfUyApKSB8IH5DQ0ZHX0NDRkdfVEFQX0RBUF8xX1BCSVNUMV9UQVBfRU5BQkxFX00gKSAmIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEUgICAgPDwgQ0NGR19DQ0ZHX1RBUF9EQVBfMV9XVUNfVEFQX0VOQUJMRV9TICAgICkpIHwgfkNDRkdfQ0NGR19UQVBfREFQXzFfV1VDX1RBUF9FTkFCTEVfTSAgICApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfSU1BR0VfVkFMSURfQ09ORiAgICAoIFwKKwkgKCAoKHVpbnQzMl90KSggU0VUX0NDRkdfSU1BR0VfVkFMSURfQ09ORl9JTUFHRV9WQUxJRCA8PCBDQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSURfUyApKSB8IH5DQ0ZHX0lNQUdFX1ZBTElEX0NPTkZfSU1BR0VfVkFMSURfTSApICkKKworI2RlZmluZSBERUZBVUxUX0NDRkdfQ0NGR19QUk9UXzMxXzAgICAgICBTRVRfQ0NGR19DQ0ZHX1BST1RfMzFfMCAgCisjZGVmaW5lIERFRkFVTFRfQ0NGR19DQ0ZHX1BST1RfNjNfMzIgICAgIFNFVF9DQ0ZHX0NDRkdfUFJPVF82M18zMiAKKyNkZWZpbmUgREVGQVVMVF9DQ0ZHX0NDRkdfUFJPVF85NV82NCAgICAgU0VUX0NDRkdfQ0NGR19QUk9UXzk1XzY0IAorI2RlZmluZSBERUZBVUxUX0NDRkdfQ0NGR19QUk9UXzEyN185NiAgICBTRVRfQ0NGR19DQ0ZHX1BST1RfMTI3Xzk2CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDdXN0b21lciBDb25maWd1cmF0aW9uIEFyZWEgaW4gTG9jayBQYWdlCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKK19fcm9vdCBjb25zdCBjY2ZnX3QgX19jY2ZnIEAgIi5jY2ZnIiA9CisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKQorI3ByYWdtYSBEQVRBX1NFQ1RJT04oX19jY2ZnLCAiLmNjZmciKQorI3ByYWdtYSBSRVRBSU4oX19jY2ZnKQorY29uc3QgY2NmZ190IF9fY2NmZyA9CisjZWxzZQorX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5jY2ZnIiksIHVzZWQpKQorY29uc3QgY2NmZ190IF9fY2NmZyA9CisjZW5kaWYKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFwcGVkIHRvIGFkZHJlc3MKKyAgICBERUZBVUxUX0NDRkdfRVhUX0xGX0NMSyAgICAgICAgICwgLy8gMHg1MDAwM0ZBOCAoMHg1MDAwM3h4eCBtYXBzIHRvIGxhc3QKKyAgICBERUZBVUxUX0NDRkdfTU9ERV9DT05GXzEgICAgICAgICwgLy8gMHg1MDAwM0ZBQyAgc2VjdG9yIGluIEZMQVNILgorICAgIERFRkFVTFRfQ0NGR19TSVpFX0FORF9ESVNfRkxBR1MgLCAvLyAweDUwMDAzRkIwICBJbmRlcGVuZGVudCBvZiBGTEFTSCBzaXplKQorICAgIERFRkFVTFRfQ0NGR19NT0RFX0NPTkYgICAgICAgICAgLCAvLyAweDUwMDAzRkI0CisgICAgREVGQVVMVF9DQ0ZHX1ZPTFRfTE9BRF8wICAgICAgICAsIC8vIDB4NTAwMDNGQjggCisgICAgREVGQVVMVF9DQ0ZHX1ZPTFRfTE9BRF8xICAgICAgICAsIC8vIDB4NTAwMDNGQkMKKyAgICBERUZBVUxUX0NDRkdfUlRDX09GRlNFVCAgICAgICAgICwgLy8gMHg1MDAwM0ZDMAorICAgIERFRkFVTFRfQ0NGR19GUkVRX09GRlNFVCAgICAgICAgLCAvLyAweDUwMDAzRkM0CisgICAgREVGQVVMVF9DQ0ZHX0lFRUVfTUFDXzAgICAgICAgICAsIC8vIDB4NTAwMDNGQzgKKyAgICBERUZBVUxUX0NDRkdfSUVFRV9NQUNfMSAgICAgICAgICwgLy8gMHg1MDAwM0ZDQworICAgIERFRkFVTFRfQ0NGR19JRUVFX0JMRV8wICAgICAgICAgLCAvLyAweDUwMDAzRkQwCisgICAgREVGQVVMVF9DQ0ZHX0lFRUVfQkxFXzEgICAgICAgICAsIC8vIDB4NTAwMDNGRDQKKyAgICBERUZBVUxUX0NDRkdfQkxfQ09ORklHICAgICAgICAgICwgLy8gMHg1MDAwM0ZEOAorICAgIERFRkFVTFRfQ0NGR19FUkFTRV9DT05GICAgICAgICAgLCAvLyAweDUwMDAzRkRDCisgICAgREVGQVVMVF9DQ0ZHX0NDRkdfVElfT1BUSU9OUyAgICAsIC8vIDB4NTAwMDNGRTAKKyAgICBERUZBVUxUX0NDRkdfQ0NGR19UQVBfREFQXzAgICAgICwgLy8gMHg1MDAwM0ZFNAorICAgIERFRkFVTFRfQ0NGR19DQ0ZHX1RBUF9EQVBfMSAgICAgLCAvLyAweDUwMDAzRkU4CisgICAgREVGQVVMVF9DQ0ZHX0lNQUdFX1ZBTElEX0NPTkYgICAsIC8vIDB4NTAwMDNGRUMKKyAgICBERUZBVUxUX0NDRkdfQ0NGR19QUk9UXzMxXzAgICAgICwgLy8gMHg1MDAwM0ZGMAorICAgIERFRkFVTFRfQ0NGR19DQ0ZHX1BST1RfNjNfMzIgICAgLCAvLyAweDUwMDAzRkY0CisgICAgREVGQVVMVF9DQ0ZHX0NDRkdfUFJPVF85NV82NCAgICAsIC8vIDB4NTAwMDNGRjgKKyAgICBERUZBVUxUX0NDRkdfQ0NGR19QUk9UXzEyN185NiAgICwgLy8gMHg1MDAwM0ZGQworfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2Njcy5jIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfY2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyMmQzZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2Njcy5jCkBAIC0wLDAgKzEsMjI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3RhcnR1cF9jY3MuYworKiAgUmV2aXNlZDogICAgICAgICREYXRlOiAyMDE2LTA1LTE5IDExOjA4OjI2ICswMjAwICh0bywgMTkgbWFpIDIwMTYpICQKKyogIFJldmlzaW9uOiAgICAgICAkUmV2aXNpb246IDE3MTA5ICQKKyoKKyogIERlc2NyaXB0aW9uOiAgICBTdGFydHVwIGNvZGUgZm9yIENDMjZ4eCBQRzIgZGV2aWNlIGZhbWlseSBmb3IgdXNlIHdpdGggQ0NTLgorKgorKiAgQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworKgorKgorKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogIGFyZSBtZXQ6CisqCisqICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCBub3IgdGhlIG5hbWVzIG9mCisqICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hlY2sgaWYgY29tcGlsZXIgaXMgQ0NTCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICEoZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykpCisjZXJyb3IgInN0YXJ0dXBfY2NzLmM6IFVuc3VwcG9ydGVkIGNvbXBpbGVyISIKKyNlbmRpZgorCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3NldHVwLmg+CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSByZXNldCBJU1IgYW5kIHRoZSBkZWZhdWx0IGZhdWx0IGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgICAgICAgIFJlc2V0SVNSKCB2b2lkICk7CitzdGF0aWMgdm9pZCBObWlTUiggdm9pZCApOworc3RhdGljIHZvaWQgRmF1bHRJU1IoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIEludERlZmF1bHRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gaW50ICBtYWluKHZvaWQpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYXBwbGljYXRpb24gc3RhcnR1cCBjb2RlLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIF9jX2ludDAwKHZvaWQpOworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDQ1M6IExpbmtlciB2YXJpYWJsZSB0aGF0IG1hcmtzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fU1RBQ0tfRU5EOworCisKKy8vISBUaGUgdmVjdG9yIHRhYmxlLiBOb3RlIHRoYXQgdGhlIHByb3BlciBjb25zdHJ1Y3RzIG11c3QgYmUgcGxhY2VkIG9uIHRoaXMgdG8KKy8vISBlbnN1cmUgdGhhdCBpdCBlbmRzIHVwIGF0IHBoeXNpY2FsIGFkZHJlc3MgMHgwMDAwLjAwMDAgb3IgYXQgdGhlIHN0YXJ0IG9mCisvLyEgdGhlIHByb2dyYW0gaWYgbG9jYXRlZCBhdCBhIHN0YXJ0IGFkZHJlc3Mgb3RoZXIgdGhhbiAwLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNwcmFnbWEgREFUQV9TRUNUSU9OKGdfcGZuVmVjdG9ycywgIi5pbnR2ZWNzIikKK3ZvaWQgKCogY29uc3QgZ19wZm5WZWN0b3JzW10pKHZvaWQpID0KK3sKKyAgICAodm9pZCAoKikodm9pZCkpKCh1bnNpZ25lZCBsb25nKSZfX1NUQUNLX0VORCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbml0aWFsIHN0YWNrIHBvaW50ZXIKKyAgICBSZXNldElTUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlc2V0IGhhbmRsZXIKKyAgICBObWlTUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIE5NSSBoYW5kbGVyCisgICAgRmF1bHRJU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBoYXJkIGZhdWx0IGhhbmRsZXIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIE1QVSBmYXVsdCBoYW5kbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBidXMgZmF1bHQgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdXNhZ2UgZmF1bHQgaGFuZGxlcgorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNlcnZlZAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBTVkNhbGwgaGFuZGxlcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtb25pdG9yIGhhbmRsZXIKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFBlbmRTViBoYW5kbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBTeXNUaWNrIGhhbmRsZXIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQU9OIGVkZ2UgZGV0ZWN0CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEkyQworICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgJiBQYWNrZXQgRW5naW5lIDEKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQU9OIFNwaVNwbGF2ZSBSeCwgVHggYW5kIENTCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBSVEMKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVUFSVDAgUnggYW5kIFR4CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFVWCBzb2Z0d2FyZSBldmVudCAwCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFNTSTAgUnggYW5kIFR4CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFNTSTEgUnggYW5kIFR4CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFJGIENvcmUgQ29tbWFuZCAmIFBhY2tldCBFbmdpbmUgMAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIEhhcmR3YXJlCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFJGIENvcmUgQ29tbWFuZCBBY2tub3dsZWRnZQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBJMlMKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIHNvZnR3YXJlIGV2ZW50IDEKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gV2F0Y2hkb2cgdGltZXIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMCBzdWJ0aW1lciBBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDAgc3VidGltZXIgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAxIHN1YnRpbWVyIEEKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMSBzdWJ0aW1lciBCCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDIgc3VidGltZXIgQQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAyIHN1YnRpbWVyIEIKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMyBzdWJ0aW1lciBBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDMgc3VidGltZXIgQgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBDcnlwdG8gQ29yZSBSZXN1bHQgYXZhaWxhYmxlCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIHVETUEgU29mdHdhcmUKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gdURNQSBFcnJvcgorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBGbGFzaCBjb250cm9sbGVyCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIEV2ZW50IDAKKyAgICBJbnREZWZhdWx0SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIGNvbWJpbmVkIGV2ZW50CisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBwcm9ncmFtbWFibGUgMAorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBEeW5hbWljIFByb2dyYW1tYWJsZSBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIChEZWZhdWx0OiBQUkNNKQorICAgIEludERlZmF1bHRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBVVggQ29tcGFyYXRvciBBCisgICAgSW50RGVmYXVsdEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIEFVWCBBREMgbmV3IHNhbXBsZSBvciBBREMgRE1BCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbmUsIEFEQyB1bmRlcmZsb3csIEFEQyBvdmVyZmxvdworICAgIEludERlZmF1bHRIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAvLyBUUk5HIGV2ZW50Cit9OworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciBmaXJzdCBzdGFydHMgZXhlY3V0aW9uCisvLyEgZm9sbG93aW5nIGEgcmVzZXQgZXZlbnQuIE9ubHkgdGhlIGFic29sdXRlbHkgbmVjZXNzYXJ5IHNldCBpcyBwZXJmb3JtZWQsCisvLyEgYWZ0ZXIgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIHN1cHBsaWVkIGVudHJ5KCkgcm91dGluZSBpcyBjYWxsZWQuIEFueSBmYW5jeQorLy8hIGFjdGlvbnMgKHN1Y2ggYXMgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB0aGUgcmVzZXQgY2F1c2UgcmVnaXN0ZXIsIGFuZAorLy8hIHJlc2V0dGluZyB0aGUgYml0cyBpbiB0aGF0IHJlZ2lzdGVyKSBhcmUgbGVmdCBzb2xlbHkgaW4gdGhlIGhhbmRzIG9mIHRoZQorLy8hIGFwcGxpY2F0aW9uLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQKK1Jlc2V0SVNSKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBGaW5hbCB0cmltIG9mIGRldmljZQorICAgIC8vCisgICAgU2V0dXBUcmltRGV2aWNlKCk7CisKKyAgICAvLworICAgIC8vIEp1bXAgdG8gdGhlIENDUyBDIEluaXRpYWxpemF0aW9uIFJvdXRpbmUuCisgICAgLy8KKyAgICBfX2FzbSgiICAgIC5nbG9iYWwgX2NfaW50MDBcbiIKKyAgICAgICAgICAgICIgICAgYi53ICAgICBfY19pbnQwMCIpOworCisgICAgLy8KKyAgICAvLyBJZiB3ZSBldmVyIHJldHVybiBzaWduYWwgRXJyb3IKKyAgICAvLworICAgIEZhdWx0SVNSKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciByZWNlaXZlcyBhIE5NSS4gVGhpcworLy8hIHNpbXBseSBlbnRlcnMgYW4gaW5maW5pdGUgbG9vcCwgcHJlc2VydmluZyB0aGUgc3lzdGVtIHN0YXRlIGZvciBleGFtaW5hdGlvbgorLy8hIGJ5IGEgZGVidWdnZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK05taVNSKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbnRlciBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYSBmYXVsdAorLy8hIGludGVycnVwdC4gVGhpcyBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZQorLy8hIGZvciBleGFtaW5hdGlvbiBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitGYXVsdElTUih2b2lkKQoreworICAgIC8vCisgICAgLy8gRW50ZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYW4gdW5leHBlY3RlZAorLy8hIGludGVycnVwdC4gVGhpcyBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZQorLy8hIGZvciBleGFtaW5hdGlvbiBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitJbnREZWZhdWx0SGFuZGxlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gR28gaW50byBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfZ2NjLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9nY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTY0ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfZ2NjLmMKQEAgLTAsMCArMSwzMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzdGFydHVwX2djYy5jCisqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTYtMDUtMTkgMTE6MDg6MjYgKzAyMDAgKHRvLCAxOSBtYWkgMjAxNikgJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbjogMTcxMDkgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIFN0YXJ0dXAgY29kZSBmb3IgQ0MyNnh4IFBHMiBkZXZpY2UgZmFtaWx5IGZvciB1c2Ugd2l0aCBHQ0MuCisqCisqICBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisqCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiAgYXJlIG1ldDoKKyoKKyogICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YKKyogICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gQ2hlY2sgaWYgY29tcGlsZXIgaXMgR05VIENvbXBpbGVyCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2lmICEoZGVmaW5lZChfX0dOVUNfXykpCisjZXJyb3IgInN0YXJ0dXBfZ2NjLmM6IFVuc3VwcG9ydGVkIGNvbXBpbGVyISIKKyNlbmRpZgorCisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3NldHVwLmg+CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYWdpYyBDKysgZnVuY3Rpb25zCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19leHRlbnNpb25fXyB0eXBlZGVmIGludCBfX2d1YXJkIF9fYXR0cmlidXRlX18oKG1vZGUoX19ESV9fKSkpOworaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCAqZykgeyByZXR1cm4gISooY2hhciAqKShnKTsgfQordm9pZCBfX2N4YV9ndWFyZF9yZWxlYXNlKF9fZ3VhcmQgKmcpIHsgKihjaGFyICopZyA9IDE7IH0KK3ZvaWQgX19jeGFfZ3VhcmRfYWJvcnQoX19ndWFyZCAqZykgeyAodm9pZClnOyB9CisvKiBYWFg6IGFsaWFzIHRoaXMgdG8gdGhlIGZhdWx0IElTUiA/Pz8/ICovCit2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCh2b2lkKSB7IHdoaWxlICgxKTsgfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gTWFjcm8gZm9yIHdlYWsgc3ltYm9sIGFsaWFzaW5nCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorI2RlZmluZSBXRUFLX0FMSUFTKHgpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygjeCkpKQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcmVzZXQgSVNSIGFuZCB0aGUgZGVmYXVsdCBmYXVsdCBoYW5kbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkICAgICAgICBSZXNldElTUiggdm9pZCApOworc3RhdGljIHZvaWQgTm1pU1JIYW5kbGVyKCB2b2lkICk7CitzdGF0aWMgdm9pZCBGYXVsdElTUkhhbmRsZXIoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIEludERlZmF1bHRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gaW50ICBtYWluKCB2b2lkICk7CisKKworLy8gRGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlcnMKK3ZvaWQgTm1pU1Iodm9pZCkgV0VBS19BTElBUyhObWlTUkhhbmRsZXIpOwordm9pZCBGYXVsdElTUih2b2lkKSBXRUFLX0FMSUFTKEZhdWx0SVNSSGFuZGxlcik7Cit2b2lkIE1QVUZhdWx0SW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQnVzRmF1bHRJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBVc2FnZUZhdWx0SW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgU1ZDYWxsSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgRGVidWdNb25JbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBQZW5kU1ZJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBTeXNUaWNrSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgR1BJT0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEkyQ0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFJGQ0NQRTFJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBT05JbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBT05SVENJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBVQVJUMEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEFVWFNXRXZlbnQwSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgU1NJMEludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFNTSTFJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBSRkNDUEUwSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgUkZDSGFyZHdhcmVJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBSRkNDbWRBY2tJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBJMlNJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBVVhTV0V2ZW50MUludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFdhdGNoZG9nSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVGltZXIwQUludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRpbWVyMEJJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBUaW1lcjFBSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVGltZXIxQkludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRpbWVyMkFJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBUaW1lcjJCSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVGltZXIzQUludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIFRpbWVyM0JJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBDcnlwdG9JbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCB1RE1BSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgdURNQUVyckludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEZsYXNoSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgU1dFdmVudDBJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBVVhDb21iRXZlbnRJbnRIYW5kbGVyKHZvaWQpIFdFQUtfQUxJQVMoSW50RGVmYXVsdEhhbmRsZXIpOwordm9pZCBBT05Qcm9nSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgRHluUHJvZ0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7Cit2b2lkIEFVWENvbXBBSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgQVVYQURDSW50SGFuZGxlcih2b2lkKSBXRUFLX0FMSUFTKEludERlZmF1bHRIYW5kbGVyKTsKK3ZvaWQgVFJOR0ludEhhbmRsZXIodm9pZCkgV0VBS19BTElBUyhJbnREZWZhdWx0SGFuZGxlcik7CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGNvbnN0cnVjdHMgY3JlYXRlZCBieSB0aGUgbGlua2VyLCBpbmRpY2F0aW5nIHdoZXJlIHRoZQorLy8gdGhlICJkYXRhIiBhbmQgImJzcyIgc2VnbWVudHMgcmVzaWRlIGluIG1lbW9yeS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdWludDMyX3QgX2V0ZXh0OworZXh0ZXJuIHVpbnQzMl90IF9kYXRhOworZXh0ZXJuIHVpbnQzMl90IF9lZGF0YTsKK2V4dGVybiB1aW50MzJfdCBfYnNzOworZXh0ZXJuIHVpbnQzMl90IF9lYnNzOworZXh0ZXJuIHVpbnQzMl90IF9lc3RhY2s7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhlIHZlY3RvciB0YWJsZS4gTm90ZSB0aGF0IHRoZSBwcm9wZXIgY29uc3RydWN0cyBtdXN0IGJlIHBsYWNlZCBvbiB0aGlzIHRvCisvLyEgZW5zdXJlIHRoYXQgaXQgZW5kcyB1cCBhdCBwaHlzaWNhbCBhZGRyZXNzIDB4MDAwMC4wMDAwIG9yIGF0IHRoZSBzdGFydCBvZgorLy8hIHRoZSBwcm9ncmFtIGlmIGxvY2F0ZWQgYXQgYSBzdGFydCBhZGRyZXNzIG90aGVyIHRoYW4gMC4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLnZlY3RvcnMiKSwgdXNlZCkpCit2b2lkICgqIGNvbnN0IGdfcGZuVmVjdG9yc1tdKSh2b2lkKSA9Cit7CisgICAgKHZvaWQgKCopKHZvaWQpKSgodW5zaWduZWQgbG9uZykmX2VzdGFjayksIC8vIFRoZSBpbml0aWFsIHN0YWNrIHBvaW50ZXIgCisgICAgUmVzZXRJU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXNldCBoYW5kbGVyCisgICAgTm1pU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBOTUkgaGFuZGxlcgorICAgIEZhdWx0SVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaGFyZCBmYXVsdCBoYW5kbGVyCisgICAgTVBVRmF1bHRJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBNUFUgZmF1bHQgaGFuZGxlcgorICAgIEJ1c0ZhdWx0SW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYnVzIGZhdWx0IGhhbmRsZXIKKyAgICBVc2FnZUZhdWx0SW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzYWdlIGZhdWx0IGhhbmRsZXIKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICBTVkNhbGxJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gU1ZDYWxsIGhhbmRsZXIKKyAgICBEZWJ1Z01vbkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gRGVidWcgbW9uaXRvciBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgUGVuZFNWSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBQZW5kU1YgaGFuZGxlcgorICAgIFN5c1RpY2tJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgU3lzVGljayBoYW5kbGVyCisgICAgR1BJT0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBlZGdlIGRldGVjdAorICAgIEkyQ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJMkMKKyAgICBSRkNDUEUxSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAxCisgICAgQU9OSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBTcGlTcGxhdmUgUngsIFR4IGFuZCBDUworICAgIEFPTlJUQ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gUlRDCisgICAgVUFSVDBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVBUlQwIFJ4IGFuZCBUeAorICAgIEFVWFNXRXZlbnQwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAvLyBBVVggc29mdHdhcmUgZXZlbnQgMAorICAgIFNTSTBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTU0kwIFJ4IGFuZCBUeAorICAgIFNTSTFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTU0kxIFJ4IGFuZCBUeAorICAgIFJGQ0NQRTBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgJiBQYWNrZXQgRW5naW5lIDAKKyAgICBSRkNIYXJkd2FyZUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBIYXJkd2FyZQorICAgIFJGQ0NtZEFja0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgQWNrbm93bGVkZ2UKKyAgICBJMlNJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSTJTCisgICAgQVVYU1dFdmVudDFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgIC8vIEFVWCBzb2Z0d2FyZSBldmVudCAxCisgICAgV2F0Y2hkb2dJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIFdhdGNoZG9nIHRpbWVyCisgICAgVGltZXIwQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDAgc3VidGltZXIgQQorICAgIFRpbWVyMEJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAwIHN1YnRpbWVyIEIKKyAgICBUaW1lcjFBSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMSBzdWJ0aW1lciBBCisgICAgVGltZXIxQkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDEgc3VidGltZXIgQgorICAgIFRpbWVyMkFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAyIHN1YnRpbWVyIEEKKyAgICBUaW1lcjJCSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMiBzdWJ0aW1lciBCCisgICAgVGltZXIzQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDMgc3VidGltZXIgQQorICAgIFRpbWVyM0JJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAzIHN1YnRpbWVyIEIKKyAgICBDcnlwdG9JbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3J5cHRvIENvcmUgUmVzdWx0IGF2YWlsYWJsZQorICAgIHVETUFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1RE1BIFNvZnR3YXJlCisgICAgdURNQUVyckludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIHVETUEgRXJyb3IKKyAgICBGbGFzaEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxhc2ggY29udHJvbGxlcgorICAgIFNXRXZlbnQwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBFdmVudCAwCisgICAgQVVYQ29tYkV2ZW50SW50SGFuZGxlciwgICAgICAgICAgICAgICAgIC8vIEFVWCBjb21iaW5lZCBldmVudAorICAgIEFPTlByb2dJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gcHJvZ3JhbW1hYmxlIDAKKyAgICBEeW5Qcm9nSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gRHluYW1pYyBQcm9ncmFtbWFibGUgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSAoRGVmYXVsdDogUFJDTSkKKyAgICBBVVhDb21wQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIENvbXBhcmF0b3IgQQorICAgIEFVWEFEQ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyBBVVggQURDIG5ldyBzYW1wbGUgb3IgQURDIERNQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb25lLCBBREMgdW5kZXJmbG93LCBBREMgb3ZlcmZsb3cKKyAgICBUUk5HSW50SGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVFJORyBldmVudAorfTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgZmlyc3Qgc3RhcnRzIGV4ZWN1dGlvbgorLy8hIGZvbGxvd2luZyBhIHJlc2V0IGV2ZW50LiBPbmx5IHRoZSBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBzZXQgaXMgcGVyZm9ybWVkLAorLy8hIGFmdGVyIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllZCBlbnRyeSgpIHJvdXRpbmUgaXMgY2FsbGVkLiBBbnkgZmFuY3kKKy8vISBhY3Rpb25zIChzdWNoIGFzIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHJlc2V0IGNhdXNlIHJlZ2lzdGVyLCBhbmQKKy8vISByZXNldHRpbmcgdGhlIGJpdHMgaW4gdGhhdCByZWdpc3RlcikgYXJlIGxlZnQgc29sZWx5IGluIHRoZSBoYW5kcyBvZiB0aGUKKy8vISBhcHBsaWNhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitSZXNldElTUih2b2lkKQoreworICAgIHVpbnQzMl90ICpwdWkzMlNyYywgKnB1aTMyRGVzdDsKKworICAgIC8vCisgICAgLy8gRmluYWwgdHJpbSBvZiBkZXZpY2UKKyAgICAvLworICAgIFNldHVwVHJpbURldmljZSgpOworICAgIAorICAgIC8vCisgICAgLy8gQ29weSB0aGUgZGF0YSBzZWdtZW50IGluaXRpYWxpemVycyBmcm9tIGZsYXNoIHRvIFNSQU0uCisgICAgLy8KKyAgICBwdWkzMlNyYyA9ICZfZXRleHQ7CisgICAgZm9yKHB1aTMyRGVzdCA9ICZfZGF0YTsgcHVpMzJEZXN0IDwgJl9lZGF0YTsgKQorICAgIHsKKyAgICAgICAgKnB1aTMyRGVzdCsrID0gKnB1aTMyU3JjKys7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBaZXJvIGZpbGwgdGhlIGJzcyBzZWdtZW50LgorICAgIC8vCisgICAgX19hc20oIiAgICBsZHIgICAgIHIwLCA9X2Jzc1xuIgorICAgICAgICAgICIgICAgbGRyICAgICByMSwgPV9lYnNzXG4iCisgICAgICAgICAgIiAgICBtb3YgICAgIHIyLCAjMFxuIgorICAgICAgICAgICIgICAgLnRodW1iX2Z1bmNcbiIKKyAgICAgICAgICAiemVyb19sb29wOlxuIgorICAgICAgICAgICIgICAgICAgIGNtcCAgICAgcjAsIHIxXG4iCisgICAgICAgICAgIiAgICAgICAgaXQgICAgICBsdFxuIgorICAgICAgICAgICIgICAgICAgIHN0cmx0ICAgcjIsIFtyMF0sICM0XG4iCisgICAgICAgICAgIiAgICAgICAgYmx0ICAgICB6ZXJvX2xvb3AiKTsKKworICAgLy8KKyAgIC8vIENhbGwgdGhlIGFwcGxpY2F0aW9uJ3MgZW50cnkgcG9pbnQuCisgICAvLworICAgbWFpbigpOworCisgICAgLy8KKyAgICAvLyBJZiB3ZSBldmVyIHJldHVybiBzaWduYWwgRXJyb3IKKyAgICAvLworICAgIEZhdWx0SVNSKCk7Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciByZWNlaXZlcyBhIE5NSS4gVGhpcworLy8hIHNpbXBseSBlbnRlcnMgYW4gaW5maW5pdGUgbG9vcCwgcHJlc2VydmluZyB0aGUgc3lzdGVtIHN0YXRlIGZvciBleGFtaW5hdGlvbgorLy8hIGJ5IGEgZGVidWdnZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK05taVNSSGFuZGxlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gRW50ZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAvLworICAgIHdoaWxlKDEpCisgICAgeworICAgIH0KK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGEgZmF1bHQKKy8vISBpbnRlcnJ1cHQuIFRoaXMgc2ltcGx5IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLCBwcmVzZXJ2aW5nIHRoZSBzeXN0ZW0gc3RhdGUKKy8vISBmb3IgZXhhbWluYXRpb24gYnkgYSBkZWJ1Z2dlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorRmF1bHRJU1JIYW5kbGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbnRlciBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYW4gdW5leHBlY3RlZAorLy8hIGludGVycnVwdC4gVGhpcyBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZQorLy8hIGZvciBleGFtaW5hdGlvbiBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitJbnREZWZhdWx0SGFuZGxlcih2b2lkKQoreworICAgIC8vCisgICAgLy8gR28gaW50byBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfaWFyLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9pYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUxYmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS9zdGFydHVwX2ZpbGVzL3N0YXJ0dXBfaWFyLmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEZpbGVuYW1lOiAgICAgICBzdGFydHVwX2lhci5jCisqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTYtMDUtMTkgMTE6MDg6MjYgKzAyMDAgKHRvLCAxOSBtYWkgMjAxNikgJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbjogMTcxMDkgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIFN0YXJ0dXAgY29kZSBmb3IgQ0MyNnh4IFBHMiBkZXZpY2UgZmFtaWx5IGZvciB1c2Ugd2l0aCBJQVIuCisqCisqICBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisqCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiAgYXJlIG1ldDoKKyoKKyogICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YKKyogICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisqICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKiAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBDaGVjayBpZiBjb21waWxlciBpcyBJQVIKKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgIShkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pKQorI2Vycm9yICJzdGFydHVwX2lhci5jOiBVbnN1cHBvcnRlZCBjb21waWxlciEiCisjZW5kaWYKKworCisvLyBXZSBuZWVkIGludHJpbnNpYyBmdW5jdGlvbnMgZm9yIElBUiAoaWYgdXNlZCBpbiBzb3VyY2UgY29kZSkKKyNpbmNsdWRlIDxpbnRyaW5zaWNzLmg+CisjaW5jbHVkZSA8aW5jL2h3X3R5cGVzLmg+CisjaW5jbHVkZSA8ZHJpdmVybGliL3NldHVwLmg+CisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSByZXNldCBJU1IgYW5kIHRoZSBkZWZhdWx0IGZhdWx0IGhhbmRsZXJzLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3ZvaWQgICAgICAgIFJlc2V0SVNSKCB2b2lkICk7CitzdGF0aWMgdm9pZCBObWlTUkhhbmRsZXIoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIEZhdWx0SVNSSGFuZGxlciggdm9pZCApOworc3RhdGljIHZvaWQgSW50RGVmYXVsdEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiBpbnQgIG1haW4oIHZvaWQgKTsKKworZXh0ZXJuIHZvaWQgTm1pU1IoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEZhdWx0SVNSKCB2b2lkICk7CitleHRlcm4gdm9pZCBNUFVGYXVsdEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEJ1c0ZhdWx0SW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVXNhZ2VGYXVsdEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFNWQ2FsbEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIERlYnVnTW9uSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgUGVuZFNWSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgU3lzVGlja0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEdQSU9JbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBJMkNJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBSRkNDUEUxSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQU9OSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQU9OUlRDSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVUFSVDBJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBBVVhTV0V2ZW50MEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFNTSTBJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBTU0kxSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgUkZDQ1BFMEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFJGQ0hhcmR3YXJlSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgUkZDQ21kQWNrSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgSTJTSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQVVYU1dFdmVudDFJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBXYXRjaGRvZ0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFRpbWVyMEFJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUaW1lcjBCSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVGltZXIxQUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFRpbWVyMUJJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUaW1lcjJBSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgVGltZXIyQkludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFRpbWVyM0FJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBUaW1lcjNCSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQ3J5cHRvSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgdURNQUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIHVETUFFcnJJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBGbGFzaEludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFNXRXZlbnQwSW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQVVYQ29tYkV2ZW50SW50SGFuZGxlciggdm9pZCApOworZXh0ZXJuIHZvaWQgQU9OUHJvZ0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIER5blByb2dJbnRIYW5kbGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBBVVhDb21wQUludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIEFVWEFEQ0ludEhhbmRsZXIoIHZvaWQgKTsKK2V4dGVybiB2b2lkIFRSTkdJbnRIYW5kbGVyKCB2b2lkICk7CisKKy8vIERlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXJzCisjcHJhZ21hIHdlYWsgTm1pU1IgPSBObWlTUkhhbmRsZXIKKyNwcmFnbWEgd2VhayBGYXVsdElTUiA9IEZhdWx0SVNSSGFuZGxlcgorI3ByYWdtYSB3ZWFrIE1QVUZhdWx0SW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQnVzRmF1bHRJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBVc2FnZUZhdWx0SW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgU1ZDYWxsSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgRGVidWdNb25JbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBQZW5kU1ZJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBTeXNUaWNrSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgR1BJT0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEkyQ0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFJGQ0NQRTFJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBT05JbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBT05SVENJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBVQVJUMEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEFVWFNXRXZlbnQwSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgU1NJMEludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFNTSTFJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBSRkNDUEUwSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgUkZDSGFyZHdhcmVJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBSRkNDbWRBY2tJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBJMlNJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBVVhTV0V2ZW50MUludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFdhdGNoZG9nSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVGltZXIwQUludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRpbWVyMEJJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBUaW1lcjFBSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVGltZXIxQkludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRpbWVyMkFJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBUaW1lcjJCSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVGltZXIzQUludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIFRpbWVyM0JJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBDcnlwdG9JbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayB1RE1BSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgdURNQUVyckludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEZsYXNoSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgU1dFdmVudDBJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBVVhDb21iRXZlbnRJbnRIYW5kbGVyID0gSW50RGVmYXVsdEhhbmRsZXIKKyNwcmFnbWEgd2VhayBBT05Qcm9nSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgRHluUHJvZ0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorI3ByYWdtYSB3ZWFrIEFVWENvbXBBSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgQVVYQURDSW50SGFuZGxlciA9IEludERlZmF1bHRIYW5kbGVyCisjcHJhZ21hIHdlYWsgVFJOR0ludEhhbmRsZXIgPSBJbnREZWZhdWx0SGFuZGxlcgorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uIHN0YXJ0dXAgY29kZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gdm9pZCBfX2lhcl9wcm9ncmFtX3N0YXJ0KHZvaWQpOworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIEdldCBzdGFjayBzdGFydCAoaGlnaGVzdCBhZGRyZXNzKSBzeW1ib2wgZnJvbSBsaW5rZXIgZmlsZS4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitleHRlcm4gY29uc3Qgdm9pZCogU1RBQ0tfVE9QOworCisvLyBJdCBpcyByZXF1aXJlZCB0byBwbGFjZSBzb21ldGhpbmcgaW4gdGhlIENTVEFDSyBzZWdtZW50IHRvIGdldCB0aGUgc3RhY2sKKy8vIGNoZWNrIGZlYXR1cmUgaW4gSUFSIHRvIHdvcmsgYXMgZXhwZWN0ZWQKK19fcm9vdCBzdGF0aWMgdm9pZCogZHVtbXlfc3RhY2sgQCAiLnN0YWNrIjsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoZSB2ZWN0b3IgdGFibGUuIE5vdGUgdGhhdCB0aGUgcHJvcGVyIGNvbnN0cnVjdHMgbXVzdCBiZSBwbGFjZWQgb24gdGhpcyB0bworLy8hIGVuc3VyZSB0aGF0IGl0IGVuZHMgdXAgYXQgcGh5c2ljYWwgYWRkcmVzcyAweDAwMDAuMDAwMCBvciBhdCB0aGUgc3RhcnQgb2YKKy8vISB0aGUgcHJvZ3JhbSBpZiBsb2NhdGVkIGF0IGEgc3RhcnQgYWRkcmVzcyBvdGhlciB0aGFuIDAuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorX19yb290IHZvaWQgKCogY29uc3QgX192ZWN0b3JfdGFibGVbXSkodm9pZCkgQCAiLmludHZlYyIgPQoreworICAgICh2b2lkICgqKSh2b2lkKSkmU1RBQ0tfVE9QLCAgICAgICAgICAgICAvLyBUaGUgaW5pdGlhbCBzdGFjayBwb2ludGVyCisgICAgUmVzZXRJU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXNldCBoYW5kbGVyCisgICAgTm1pU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBOTUkgaGFuZGxlcgorICAgIEZhdWx0SVNSLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaGFyZCBmYXVsdCBoYW5kbGVyCisgICAgTVBVRmF1bHRJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBNUFUgZmF1bHQgaGFuZGxlcgorICAgIEJ1c0ZhdWx0SW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYnVzIGZhdWx0IGhhbmRsZXIKKyAgICBVc2FnZUZhdWx0SW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzYWdlIGZhdWx0IGhhbmRsZXIKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQKKyAgICBTVkNhbGxJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gU1ZDYWxsIGhhbmRsZXIKKyAgICBEZWJ1Z01vbkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gRGVidWcgbW9uaXRvciBoYW5kbGVyCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2VydmVkCisgICAgUGVuZFNWSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBQZW5kU1YgaGFuZGxlcgorICAgIFN5c1RpY2tJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgU3lzVGljayBoYW5kbGVyCisgICAgR1BJT0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBlZGdlIGRldGVjdAorICAgIEkyQ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJMkMKKyAgICBSRkNDUEUxSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBDb21tYW5kICYgUGFja2V0IEVuZ2luZSAxCisgICAgQU9OSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFPTiBTcGlTcGxhdmUgUngsIFR4IGFuZCBDUworICAgIEFPTlJUQ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gUlRDCisgICAgVUFSVDBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVBUlQwIFJ4IGFuZCBUeAorICAgIEFVWFNXRXZlbnQwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAvLyBBVVggc29mdHdhcmUgZXZlbnQgMAorICAgIFNTSTBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTU0kwIFJ4IGFuZCBUeAorICAgIFNTSTFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTU0kxIFJ4IGFuZCBUeAorICAgIFJGQ0NQRTBJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgJiBQYWNrZXQgRW5naW5lIDAKKyAgICBSRkNIYXJkd2FyZUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgLy8gUkYgQ29yZSBIYXJkd2FyZQorICAgIFJGQ0NtZEFja0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAvLyBSRiBDb3JlIENvbW1hbmQgQWNrbm93bGVkZ2UKKyAgICBJMlNJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSTJTCisgICAgQVVYU1dFdmVudDFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgIC8vIEFVWCBzb2Z0d2FyZSBldmVudCAxCisgICAgV2F0Y2hkb2dJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgIC8vIFdhdGNoZG9nIHRpbWVyCisgICAgVGltZXIwQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDAgc3VidGltZXIgQQorICAgIFRpbWVyMEJJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAwIHN1YnRpbWVyIEIKKyAgICBUaW1lcjFBSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMSBzdWJ0aW1lciBBCisgICAgVGltZXIxQkludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDEgc3VidGltZXIgQgorICAgIFRpbWVyMkFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAyIHN1YnRpbWVyIEEKKyAgICBUaW1lcjJCSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZXIgMiBzdWJ0aW1lciBCCisgICAgVGltZXIzQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVyIDMgc3VidGltZXIgQQorICAgIFRpbWVyM0JJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lciAzIHN1YnRpbWVyIEIKKyAgICBDcnlwdG9JbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3J5cHRvIENvcmUgUmVzdWx0IGF2YWlsYWJsZQorICAgIHVETUFJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1RE1BIFNvZnR3YXJlCisgICAgdURNQUVyckludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8vIHVETUEgRXJyb3IKKyAgICBGbGFzaEludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmxhc2ggY29udHJvbGxlcgorICAgIFNXRXZlbnQwSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBFdmVudCAwCisgICAgQVVYQ29tYkV2ZW50SW50SGFuZGxlciwgICAgICAgICAgICAgICAgIC8vIEFVWCBjb21iaW5lZCBldmVudAorICAgIEFPTlByb2dJbnRIYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAvLyBBT04gcHJvZ3JhbW1hYmxlIDAKKyAgICBEeW5Qcm9nSW50SGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgLy8gRHluYW1pYyBQcm9ncmFtbWFibGUgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSAoRGVmYXVsdDogUFJDTSkKKyAgICBBVVhDb21wQUludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgLy8gQVVYIENvbXBhcmF0b3IgQQorICAgIEFVWEFEQ0ludEhhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvLyBBVVggQURDIG5ldyBzYW1wbGUgb3IgQURDIERNQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb25lLCBBREMgdW5kZXJmbG93LCBBREMgb3ZlcmZsb3cKKyAgICBUUk5HSW50SGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVFJORyBldmVudAorfTsKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgZmlyc3Qgc3RhcnRzIGV4ZWN1dGlvbgorLy8hIGZvbGxvd2luZyBhIHJlc2V0IGV2ZW50LiBPbmx5IHRoZSBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBzZXQgaXMgcGVyZm9ybWVkLAorLy8hIGFmdGVyIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllZCBlbnRyeSgpIHJvdXRpbmUgaXMgY2FsbGVkLiBBbnkgZmFuY3kKKy8vISBhY3Rpb25zIChzdWNoIGFzIG1ha2luZyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHJlc2V0IGNhdXNlIHJlZ2lzdGVyLCBhbmQKKy8vISByZXNldHRpbmcgdGhlIGJpdHMgaW4gdGhhdCByZWdpc3RlcikgYXJlIGxlZnQgc29sZWx5IGluIHRoZSBoYW5kcyBvZiB0aGUKKy8vISBhcHBsaWNhdGlvbi4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkCitSZXNldElTUih2b2lkKQoreworICAgIC8vCisgICAgLy8gRmluYWwgdHJpbSBvZiBkZXZpY2UKKyAgICAvLworICAgIFNldHVwVHJpbURldmljZSgpOworCisgICAgLy8KKyAgICAvLyBKdW1wIHRvIElBUiBpbml0aWFsaXphdGlvbiByb3V0aW5lCisgICAgLy8KKyAgICBfX2lhcl9wcm9ncmFtX3N0YXJ0KCk7CisKKyAgICAvLworICAgIC8vIElmIHdlIGV2ZXIgcmV0dXJuIHNpZ25hbCBFcnJvcgorICAgIC8vCisgICAgRmF1bHRJU1IoKTsKK30KKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKy8vISBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvY2Vzc29yIHJlY2VpdmVzIGEgTk1JLiBUaGlzCisvLyEgc2ltcGx5IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLCBwcmVzZXJ2aW5nIHRoZSBzeXN0ZW0gc3RhdGUgZm9yIGV4YW1pbmF0aW9uCisvLyEgYnkgYSBkZWJ1Z2dlci4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdGF0aWMgdm9pZAorTm1pU1JIYW5kbGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBFbnRlciBhbiBpbmZpbml0ZSBsb29wLgorICAgIC8vCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgfQorfQorCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8hIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9jZXNzb3IgcmVjZWl2ZXMgYSBmYXVsdAorLy8hIGludGVycnVwdC4gVGhpcyBzaW1wbHkgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AsIHByZXNlcnZpbmcgdGhlIHN5c3RlbSBzdGF0ZQorLy8hIGZvciBleGFtaW5hdGlvbiBieSBhIGRlYnVnZ2VyLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3N0YXRpYyB2b2lkCitGYXVsdElTUkhhbmRsZXIodm9pZCkKK3sKKyAgICAvLworICAgIC8vIEVudGVyIGFuIGluZmluaXRlIGxvb3AuCisgICAgLy8KKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICB9Cit9CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Nlc3NvciByZWNlaXZlcyBhbiB1bmV4cGVjdGVkCisvLyEgaW50ZXJydXB0LiBUaGlzIHNpbXBseSBlbnRlcnMgYW4gaW5maW5pdGUgbG9vcCwgcHJlc2VydmluZyB0aGUgc3lzdGVtIHN0YXRlCisvLyEgZm9yIGV4YW1pbmF0aW9uIGJ5IGEgZGVidWdnZXIuCisvLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorc3RhdGljIHZvaWQKK0ludERlZmF1bHRIYW5kbGVyKHZvaWQpCit7CisgICAgLy8KKyAgICAvLyBHbyBpbnRvIGFuIGluZmluaXRlIGxvb3AuCisgICAgLy8KKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9rZWlsLnMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3N0YXJ0dXBfZmlsZXMvc3RhcnR1cF9rZWlsLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4YTRmZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvc3RhcnR1cF9maWxlcy9zdGFydHVwX2tlaWwucwpAQCAtMCwwICsxLDI5OCBAQAorOyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7ICogIEZpbGVuYW1lOiAgICAgICBzdGFydHVwX2tlaWwuYworOyAqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTYtMDUtMjAgMTc6MDA6NDAgKzAyMDAgKGZyLCAyMCBtYWkgMjAxNikgJAorOyAqICBSZXZpc2lvbjogICAgICAgJFJldmlzaW9uOiAxNzEzMyAkCis7ICoKKzsgKiAgRGVzY3JpcHRpb246ICAgIFN0YXJ0dXAgY29kZSBmb3IgQ0MyNnh4IGRldmljZSBmYW1pbHkgZm9yIHVzZSB3aXRoIEtFSUwuCis7ICoKKzsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworOyAqCis7ICoKKzsgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cis7ICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworOyAqICBhcmUgbWV0OgorOyAqCis7ICogICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKzsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCis7ICoKKzsgKiAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorOyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKzsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorOyAqCis7ICogICAgTmVpdGhlciB0aGUgbmFtZSBvZiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgbm9yIHRoZSBuYW1lcyBvZgorOyAqICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKzsgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCis7ICoKKzsgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworOyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorOyAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKzsgKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKzsgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCis7ICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKzsgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCis7ICogIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorOyAqICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCis7ICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorOyAqICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorOyAqCis7ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKzsvLyA8PDwgVXNlIENvbmZpZ3VyYXRpb24gV2l6YXJkIGluIENvbnRleHQgTWVudSA+Pj4KKzsqLworCisKKzsgPGg+IFN0YWNrIENvbmZpZ3VyYXRpb24KKzsgICA8bz4gU3RhY2sgU2l6ZSAoaW4gQnl0ZXMpIDwweDAtMHhGRkZGRkZGRjo4PgorOyA8L2g+CitTdGFja19TaXplICAgICAgRVFVICAgICAweDAwMDAwMjAwCisKKyAgICAgICAgICAgICAgICBBUkVBICAgIFNUQUNLLCBOT0lOSVQsIFJFQURXUklURSwgQUxJR049MworU3RhY2tfTWVtICAgICAgIFNQQUNFICAgU3RhY2tfU2l6ZQorX19pbml0aWFsX3NwCisKKworOyA8aD4gSGVhcCBDb25maWd1cmF0aW9uCis7ICAgPG8+ICBIZWFwIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorSGVhcF9TaXplICAgICAgIEVRVSAgICAgMHgwMDAwMDAwMAorCisgICAgICAgICAgICAgICAgQVJFQSAgICBIRUFQLCBOT0lOSVQsIFJFQURXUklURSwgQUxJR049MworX19oZWFwX2Jhc2UKK0hlYXBfTWVtICAgICAgICBTUEFDRSAgIEhlYXBfU2l6ZQorX19oZWFwX2xpbWl0CisKKworICAgICAgICAgICAgICAgIFBSRVNFUlZFOAorICAgICAgICAgICAgICAgIFRIVU1CCis7Ly8gPDw8IGVuZCBvZiBjb25maWd1cmF0aW9uIHNlY3Rpb24gPj4+CisKKzsgVmVjdG9yIFRhYmxlIE1hcHBlZCB0byBBZGRyZXNzIDAgYXQgUmVzZXQKKworICAgICAgICAgICAgICAgIEFSRUEgICAgUkVTRVQsIERBVEEsIFJFQURPTkxZCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX1ZlY3RvcnMKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9yc19FbmQKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fVmVjdG9yc19TaXplCisKK19fVmVjdG9ycyAgICAgICBEQ0QgICAgIF9faW5pdGlhbF9zcCAgICAgICAgICAgICAgOyBUb3Agb2YgU3RhY2sKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJlc2V0SVNSICAgICAgICAgICAgICAgICAgOyBSZXNldCBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBObWlTUiAgICAgICAgICAgICAgICAgICAgIDsgTk1JIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEZhdWx0SVNSICAgICAgICAgICAgICAgICAgOyBIYXJkIEZhdWx0IEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIE1QVUZhdWx0SW50SGFuZGxlciAgICAgICAgOyBUaGUgTVBVIGZhdWx0IGhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEJ1c0ZhdWx0SW50SGFuZGxlciAgICAgICAgOyBUaGUgYnVzIGZhdWx0IGhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFVzYWdlRmF1bHRJbnRIYW5kbGVyICAgICAgOyBUaGUgdXNhZ2UgZmF1bHQgaGFuZGxlcgorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc2VydmVkCisgICAgICAgICAgICAgICAgRENEICAgICBTVkNhbGxJbnRIYW5kbGVyICAgICAgICAgIDsgU1ZDYWxsIEhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIERlYnVnTW9uSW50SGFuZGxlciAgICAgICAgOyBEZWJ1ZyBtb25pdG9yIGhhbmRsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXNlcnZlZAorICAgICAgICAgICAgICAgIERDRCAgICAgUGVuZFNWSW50SGFuZGxlciAgICAgICAgICA7IFBlbmRTViBIYW5kbGVyCisgICAgICAgICAgICAgICAgRENEICAgICBTeXNUaWNrSW50SGFuZGxlciAgICAgICAgIDsgU3lzVGljayBIYW5kbGVyCisKKyAgICAgICAgICAgICAgICA7IEV4dGVybmFsIEludGVycnVwdHMKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEdQSU9JbnRIYW5kbGVyICAgICAgICAgICAgOyAwIEFPTiBlZGdlIGRldGVjdAorICAgICAgICAgICAgICAgIERDRCAgICAgSTJDSW50SGFuZGxlciAgICAgICAgICAgICA7IDEgSTJDCisgICAgICAgICAgICAgICAgRENEICAgICBSRkNDUEUxSW50SGFuZGxlciAgICAgICAgIDsgMiBSRiBDb3JlIENvbW1hbmQgJiBQYWNrZXQgRW5naW5lIDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFPTkludEhhbmRsZXIgICAgICAgICAgICAgOyAzIEFPTiBTcGlTcGxhdmUgUngsIFR4IGFuZCBDUworICAgICAgICAgICAgICAgIERDRCAgICAgQU9OUlRDSW50SGFuZGxlciAgICAgICAgICA7IDQgQU9OIFJUQworICAgICAgICAgICAgICAgIERDRCAgICAgVUFSVDBJbnRIYW5kbGVyICAgICAgICAgICA7IDUgVUFSVDAgUnggYW5kIFR4CisgICAgICAgICAgICAgICAgRENEICAgICBJbnREZWZhdWx0SGFuZGxlciAgICAgICAgIDsgNiBBVVggc29mdHdhcmUgZXZlbnQgMAorICAgICAgICAgICAgICAgIERDRCAgICAgU1NJMEludEhhbmRsZXIgICAgICAgICAgICA7IDcgU1NJMCBSeCBhbmQgVHgKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNTSTFJbnRIYW5kbGVyICAgICAgICAgICAgOyA4IFNTSTEgUnggYW5kIFR4CisgICAgICAgICAgICAgICAgRENEICAgICBSRkNDUEUwSW50SGFuZGxlciAgICAgICAgIDsgOSBSRiBDb3JlIENvbW1hbmQgJiBQYWNrZXQgRW5naW5lIDAKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFJGQ0hhcmR3YXJlSW50SGFuZGxlciAgICAgOyAxMCBSRiBDb3JlIEhhcmR3YXJlCisgICAgICAgICAgICAgICAgRENEICAgICBSRkNDbWRBY2tJbnRIYW5kbGVyICAgICAgIDsgMTEgUkYgQ29yZSBDb21tYW5kIEFja25vd2xlZGdlCisgICAgICAgICAgICAgICAgRENEICAgICBJMlNJbnRIYW5kbGVyICAgICAgICAgICAgIDsgMTIgSTJTCisgICAgICAgICAgICAgICAgRENEICAgICBJbnREZWZhdWx0SGFuZGxlciAgICAgICAgIDsgMTMgQVVYIHNvZnR3YXJlIGV2ZW50IDEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFdhdGNoZG9nSW50SGFuZGxlciAgICAgICAgOyAxNCBXYXRjaGRvZyB0aW1lcgorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIwQUludEhhbmRsZXIgICAgICAgICA7IDE1IFRpbWVyIDAgc3VidGltZXIgQQorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIwQkludEhhbmRsZXIgICAgICAgICA7IDE2IFRpbWVyIDAgc3VidGltZXIgQgorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIxQUludEhhbmRsZXIgICAgICAgICA7IDE3IFRpbWVyIDEgc3VidGltZXIgQQorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIxQkludEhhbmRsZXIgICAgICAgICA7IDE4IFRpbWVyIDEgc3VidGltZXIgQgorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIyQUludEhhbmRsZXIgICAgICAgICA7IDE5IFRpbWVyIDIgc3VidGltZXIgQQorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIyQkludEhhbmRsZXIgICAgICAgICA7IDIwIFRpbWVyIDIgc3VidGltZXIgQgorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIzQUludEhhbmRsZXIgICAgICAgICA7IDIxIFRpbWVyIDMgc3VidGltZXIgQQorICAgICAgICAgICAgICAgIERDRCAgICAgVGltZXIzQkludEhhbmRsZXIgICAgICAgICA7IDIyIFRpbWVyIDMgc3VidGltZXIgQgorICAgICAgICAgICAgICAgIERDRCAgICAgQ3J5cHRvSW50SGFuZGxlciAgICAgICAgICA7IDIzIENyeXB0byBDb3JlIFJlc3VsdCBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBEQ0QgICAgIHVETUFJbnRIYW5kbGVyICAgICAgICAgICAgOyAyNCB1RE1BIFNvZnR3YXJlCisgICAgICAgICAgICAgICAgRENEICAgICB1RE1BRXJySW50SGFuZGxlciAgICAgICAgIDsgMjUgdURNQSBFcnJvcgorICAgICAgICAgICAgICAgIERDRCAgICAgRmxhc2hJbnRIYW5kbGVyICAgICAgICAgICA7IDI2IEZsYXNoIGNvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICBEQ0QgICAgIFNXRXZlbnQwSW50SGFuZGxlciAgICAgICAgOyAyNyBTb2Z0d2FyZSBFdmVudCAwCisgICAgICAgICAgICAgICAgRENEICAgICBBVVhDb21iRXZlbnRJbnRIYW5kbGVyICAgIDsgMjggQVVYIGNvbWJpbmVkIGV2ZW50CisgICAgICAgICAgICAgICAgRENEICAgICBBT05Qcm9nSW50SGFuZGxlciAgICAgICAgIDsgMjkgQU9OIHByb2dyYW1tYWJsZSAwCisgICAgICAgICAgICAgICAgRENEICAgICBEeW5Qcm9nSW50SGFuZGxlciAgICAgICAgIDsgMzAgRHluYW1pYyBQcm9ncmFtbWFibGUgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgc291cmNlIChEZWZhdWx0OiBQUkNNKQorICAgICAgICAgICAgICAgIERDRCAgICAgQVVYQ29tcEFJbnRIYW5kbGVyICAgICAgICA7IDMxIEFVWCBDb21wYXJhdG9yIEEKKyAgICAgICAgICAgICAgICBEQ0QgICAgIEFVWEFEQ0ludEhhbmRsZXIgICAgICAgICAgOyAzMiBBVVggQURDIG5ldyBzYW1wbGUgb3IgQURDIERNQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgIGRvbmUsIEFEQyB1bmRlcmZsb3csIEFEQyBvdmVyZmxvdworICAgICAgICAgICAgICAgIERDRCAgICAgVFJOR0ludEhhbmRsZXIgICAgICAgICAgICA7IDMzIFRSTkcgZXZlbnQKK19fVmVjdG9yc19FbmQKKworX19WZWN0b3JzX1NpemUgIEVRVSAgICAgX19WZWN0b3JzX0VuZCAtIF9fVmVjdG9ycworCisgICAgICAgICAgICAgICAgQVJFQSAgICB8LnRleHR8LCBDT0RFLCBSRUFET05MWQorCisKKzsgUmVzZXQgSGFuZGxlcgorCitSZXNldElTUiAgICAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgUmVzZXRJU1IgICAgICAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBJTVBPUlQgIE5PUk9NX1NldHVwVHJpbURldmljZQorICAgICAgICAgICAgICAgIElNUE9SVCAgX19tYWluCisgICAgICAgICAgICAgICAgOyBGaW5hbCB0cmltIG9mIGRldmljZSAoc2V0dXAuYyBpbiBDQzI2eHhXYXJlKQorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1OT1JPTV9TZXR1cFRyaW1EZXZpY2UKKyAgICAgICAgICAgICAgICBCTFggICAgIFIwCisgICAgICAgICAgICAgICAgOyBKdW1wIHRvIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9X19tYWluCisgICAgICAgICAgICAgICAgQlggICAgICBSMAorICAgICAgICAgICAgICAgIDsgSWYgd2UgZXZlciByZXR1cm4sIHNpZ25hbCBlcnJvcgorICAgICAgICAgICAgICAgIExEUiAgICAgUjAsID1GYXVsdElTUgorICAgICAgICAgICAgICAgIEJYICAgICAgUjAKKyAgICAgICAgICAgICAgICBFTkRQCisKKworOyBEdW1teSBFeGNlcHRpb24gSGFuZGxlcnMgKGluZmluaXRlIGxvb3BzIHdoaWNoIGNhbiBiZSBtb2RpZmllZCkKKworTm1pU1IgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE5taVNSICAgICAgICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorRmF1bHRJU1IgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEZhdWx0SVNSICAgICAgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorTVBVRmF1bHRJbnRIYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIE1QVUZhdWx0SW50SGFuZGxlciAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorQnVzRmF1bHRJbnRIYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIEJ1c0ZhdWx0SW50SGFuZGxlciAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorVXNhZ2VGYXVsdEludEhhbmRsZXJcCisgICAgICAgICAgICAgICAgUFJPQworICAgICAgICAgICAgICAgIEVYUE9SVCAgVXNhZ2VGYXVsdEludEhhbmRsZXIgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCitTVkNhbGxJbnRIYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFNWQ2FsbEludEhhbmRsZXIgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorRGVidWdNb25JbnRIYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIERlYnVnTW9uSW50SGFuZGxlciAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorUGVuZFNWSW50SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBQZW5kU1ZJbnRIYW5kbGVyICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEIgICAgICAgLgorICAgICAgICAgICAgICAgIEVORFAKK1N5c1RpY2tJbnRIYW5kbGVyXAorICAgICAgICAgICAgICAgIFBST0MKKyAgICAgICAgICAgICAgICBFWFBPUlQgIFN5c1RpY2tJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgQiAgICAgICAuCisgICAgICAgICAgICAgICAgRU5EUAorCitJbnREZWZhdWx0SGFuZGxlclwKKyAgICAgICAgICAgICAgICBQUk9DCisgICAgICAgICAgICAgICAgRVhQT1JUICBHUElPSW50SGFuZGxlciAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgSTJDSW50SGFuZGxlciAgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFJGQ0NQRTFJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBBT05JbnRIYW5kbGVyICAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgQU9OUlRDSW50SGFuZGxlciAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFVBUlQwSW50SGFuZGxlciAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBTU0kwSW50SGFuZGxlciAgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1NJMUludEhhbmRsZXIgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFJGQ0NQRTBJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBSRkNIYXJkd2FyZUludEhhbmRsZXIgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgUkZDQ21kQWNrSW50SGFuZGxlciAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIEkyU0ludEhhbmRsZXIgICAgICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBXYXRjaGRvZ0ludEhhbmRsZXIgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVGltZXIwQUludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRpbWVyMEJJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBUaW1lcjFBSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVGltZXIxQkludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRpbWVyMkFJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBUaW1lcjJCSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVGltZXIzQUludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIFRpbWVyM0JJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBDcnlwdG9JbnRIYW5kbGVyICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgdURNQUludEhhbmRsZXIgICAgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIHVETUFFcnJJbnRIYW5kbGVyICAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBGbGFzaEludEhhbmRsZXIgICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgU1dFdmVudDBJbnRIYW5kbGVyICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIEFVWENvbWJFdmVudEludEhhbmRsZXIgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBBT05Qcm9nSW50SGFuZGxlciAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgRHluUHJvZ0ludEhhbmRsZXIgICAgICAgICBbV0VBS10KKyAgICAgICAgICAgICAgICBFWFBPUlQgIEFVWENvbXBBSW50SGFuZGxlciAgICAgICAgW1dFQUtdCisgICAgICAgICAgICAgICAgRVhQT1JUICBBVVhBRENJbnRIYW5kbGVyICAgICAgICAgIFtXRUFLXQorICAgICAgICAgICAgICAgIEVYUE9SVCAgVFJOR0ludEhhbmRsZXIgICAgICAgICAgICBbV0VBS10KK0dQSU9JbnRIYW5kbGVyCitJMkNJbnRIYW5kbGVyCitSRkNDUEUxSW50SGFuZGxlcgorQU9OSW50SGFuZGxlcgorQU9OUlRDSW50SGFuZGxlcgorVUFSVDBJbnRIYW5kbGVyCitTU0kwSW50SGFuZGxlcgorU1NJMUludEhhbmRsZXIKK1JGQ0NQRTBJbnRIYW5kbGVyCitSRkNIYXJkd2FyZUludEhhbmRsZXIKK1JGQ0NtZEFja0ludEhhbmRsZXIKK0kyU0ludEhhbmRsZXIKK1dhdGNoZG9nSW50SGFuZGxlcgorVGltZXIwQUludEhhbmRsZXIKK1RpbWVyMEJJbnRIYW5kbGVyCitUaW1lcjFBSW50SGFuZGxlcgorVGltZXIxQkludEhhbmRsZXIKK1RpbWVyMkFJbnRIYW5kbGVyCitUaW1lcjJCSW50SGFuZGxlcgorVGltZXIzQUludEhhbmRsZXIKK1RpbWVyM0JJbnRIYW5kbGVyCitDcnlwdG9JbnRIYW5kbGVyCit1RE1BSW50SGFuZGxlcgordURNQUVyckludEhhbmRsZXIKK0ZsYXNoSW50SGFuZGxlcgorU1dFdmVudDBJbnRIYW5kbGVyCitBVVhDb21iRXZlbnRJbnRIYW5kbGVyCitBT05Qcm9nSW50SGFuZGxlcgorRHluUHJvZ0ludEhhbmRsZXIKK0FVWENvbXBBSW50SGFuZGxlcgorQVVYQURDSW50SGFuZGxlcgorVFJOR0ludEhhbmRsZXIKKyAgICAgICAgICAgICAgICBCICAgICAgIC4KKyAgICAgICAgICAgICAgICBFTkRQCisKKworICAgICAgICAgICAgICAgIEFMSUdOCisKKworOyBVc2VyIEluaXRpYWwgU3RhY2sgJiBIZWFwCisKKyAgICAgICAgICAgICAgICBJRiAgICAgIDpERUY6X19NSUNST0xJQgorCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX2luaXRpYWxfc3AKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9faGVhcF9iYXNlCisgICAgICAgICAgICAgICAgRVhQT1JUICBfX2hlYXBfbGltaXQKKworICAgICAgICAgICAgICAgIEVMU0UKKworICAgICAgICAgICAgICAgIElNUE9SVCAgX191c2VfdHdvX3JlZ2lvbl9tZW1vcnkKKyAgICAgICAgICAgICAgICBFWFBPUlQgIF9fdXNlcl9pbml0aWFsX3N0YWNraGVhcAorX191c2VyX2luaXRpYWxfc3RhY2toZWFwCisKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIwLCA9ICBIZWFwX01lbQorICAgICAgICAgICAgICAgIExEUiAgICAgUjEsID0oU3RhY2tfTWVtICsgU3RhY2tfU2l6ZSkKKyAgICAgICAgICAgICAgICBMRFIgICAgIFIyLCA9IChIZWFwX01lbSArICBIZWFwX1NpemUpCisgICAgICAgICAgICAgICAgTERSICAgICBSMywgPSBTdGFja19NZW0KKyAgICAgICAgICAgICAgICBCWCAgICAgIExSCisKKyAgICAgICAgICAgICAgICBBTElHTgorCisgICAgICAgICAgICAgICAgRU5ESUYKKworCisgICAgICAgICAgICAgICAgRU5ECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3V0aWxzL3JvbV9jcnlwdG8vc3RhbmRhbG9uZV9yb21fY3J5cHRvLmMgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3V0aWxzL3JvbV9jcnlwdG8vc3RhbmRhbG9uZV9yb21fY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2MzZiZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L3RpL2NjMjZ4eHdhcmUvdXRpbHMvcm9tX2NyeXB0by9zdGFuZGFsb25lX3JvbV9jcnlwdG8uYwpAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBGaWxlbmFtZTogICAgICAgc3RhbmRhbG9uZV9yb21fY3J5cHRvLmgKKyogIFJldmlzZWQ6ICAgICAgICAkRGF0ZTogMjAxNS0wMy0xOSAxNTozNzoxMSArMDEwMCAodG8sIDE5IG1hciAyMDE1KSAkCisqICBSZXZpc2lvbjogICAgICAgJFJldmlzaW9uOiA0MzA1MSAkCisqCisqICBEZXNjcmlwdGlvbjogICAgUHJvdmlkZSBhIHNpbXBsZSBpbml0aWFsaXphdGlvbiB0aGUgY29tbW9uIFJPTS1SQU0gc3lzdGVtCisqICAgICAgICAgICAgICAgICAgbmVlZGVkIHByaW9yIHRvIHVzaW5nIHRoZSBST00gRW5jcnlwdGlvbiBmdW5jdGlvbnMKKyogICAgICAgICAgICAgICAgICAocmVmLiA8ZHJpdmVybGliL1JvbUVuY3J5cHRpb24uaD4pCisqCisqICBDb3B5cmlnaHQgKGMpIDIwMTUsIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKgorKiAgMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqICAzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBPUkdBTklaQVRJT04gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKiAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisqICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorKiAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorKiAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxpbmMvaHdfY2hpcF9kZWYuaD4KKworLy8gTm90ZTogQ29udGVudHMgb2YgdGhlIEhlbHBGdW5jVGFibGVbXSBkaWZmZXIgYmV0d2VlbiB0aGUgQ0MyNnh4IGFuZCBDQzEzeHggY2hpcCBmYW1pbHkKK3VpbnQzMl90IEhlbHBGdW5jVGFibGVbXSA9IHsKKyAgIDAgICAgICAgICAsIC8vIFswXSA9PiBvZmZzZXQgMHgwMAorICAgMCAgICAgICAgICwgLy8gWzFdID0+IG9mZnNldCAweDA0CisgICAwICAgICAgICAgLCAvLyBbMl0gPT4gb2Zmc2V0IDB4MDgKKyAgIDB4MTAwMDQ2ZjcsIC8vIFszXSA9PiBvZmZzZXQgMHgwQworICAgMCAgICAgICAgICwgLy8gWzRdID0+IG9mZnNldCAweDEwCisgICAwICAgICAgICAgICAvLyBbNV0gPT4gb2Zmc2V0IDB4MTQKK307CisKKwordWludDMyX3QgUm9tMlJvbVBhdGNoVGFibGVbXSA9IHsKKyAgIDB4MTAwMTY5NzUsIC8vIFszMl0gPT4gb2Zmc2V0IDB4ODAKKyAgIDB4MTAwMTY5NzksIC8vIFszM10gPT4gb2Zmc2V0IDB4ODQKKyAgIDB4MTAwMTY5ODUsIC8vIFszNF0gPT4gb2Zmc2V0IDB4ODgKKyAgIDB4MTAwMTZhOTksIC8vIFszNV0gPT4gb2Zmc2V0IDB4OEMKKyAgIDB4MTAwMTZhZjUsIC8vIFszNl0gPT4gb2Zmc2V0IDB4OTAKKyAgIDB4MTAwMTZiNzksIC8vIFszN10gPT4gb2Zmc2V0IDB4OTQKKyAgIDB4MTAwMTZjMjksIC8vIFszOF0gPT4gb2Zmc2V0IDB4OTgKKyAgIDB4MTAwMTZjNDUsIC8vIFszOV0gPT4gb2Zmc2V0IDB4OUMKKyAgIDB4MTAwMTZjNzksIC8vIFs0MF0gPT4gb2Zmc2V0IDB4QTAKKyAgIDB4MTAwMTZkMDUsIC8vIFs0MV0gPT4gb2Zmc2V0IDB4QTQKKyAgIDB4MTAwMTZkMjksIC8vIFs0Ml0gPT4gb2Zmc2V0IDB4QTgKKyAgIDB4MTAwMTZkYTEsIC8vIFs0M10gPT4gb2Zmc2V0IDB4QUMKKyAgIDB4MTAwMTZkYzksIC8vIFs0NF0gPT4gb2Zmc2V0IDB4QjAKKyAgIDB4MTAwMTZlOGQsIC8vIFs0NV0gPT4gb2Zmc2V0IDB4QjQKKyAgIDB4MTAwMTZlYTEsIC8vIFs0Nl0gPT4gb2Zmc2V0IDB4QjgKKyAgIDB4MTAwMTZlZDUsIC8vIFs0N10gPT4gb2Zmc2V0IDB4QkMKKyAgIDB4MTAwMTczNjUsIC8vIFs0OF0gPT4gb2Zmc2V0IDB4QzAKKyAgIDB4MTAwMTc0ZmQsIC8vIFs0OV0gPT4gb2Zmc2V0IDB4QzQKKyAgIDB4MTAwMTc2N2QsIC8vIFs1MF0gPT4gb2Zmc2V0IDB4QzgKKyAgIDB4MTAwMTc4MzksIC8vIFs1MV0gPT4gb2Zmc2V0IDB4Q0MKKyAgIDB4MTAwMTc4OTUsIC8vIFs1Ml0gPT4gb2Zmc2V0IDB4RDAKKyAgIDB4MTAwMTc4ZjUsIC8vIFs1M10gPT4gb2Zmc2V0IDB4RDQKKyAgIDB4MTAwMTc3NzEsIC8vIFs1NF0gPT4gb2Zmc2V0IDB4RDgKKyAgIDB4MTAwMTc1ZWQsIC8vIFs1NV0gPT4gb2Zmc2V0IDB4REMKKyAgIDB4MTAwMThiMDksIC8vIFs1Nl0gPT4gb2Zmc2V0IDB4RTAKKyAgIDB4MTAwMThhOTksIC8vIFs1N10gPT4gb2Zmc2V0IDB4RTQKKyAgIDB4MTAwMThhYzUsIC8vIFs1OF0gPT4gb2Zmc2V0IDB4RTgKKyAgIDB4MTAwMThhMTksIC8vIFs1OV0gPT4gb2Zmc2V0IDB4RUMKKyAgIDB4MTAwMThhMzUgIC8vIFs2MF0gPT4gb2Zmc2V0IDB4RjAKK307CisKK3VpbnQzMl90IGNvbW1vblJPTVNjcmF0Y2hBcmVhWyA1MyBdIEAweDIwMDA0RjJDOworCitleHRlcm4gdm9pZCBTdGFuZGFsb25lUm9tQ3J5cHRvSW5pdCggdm9pZCApCit7CisgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgKCBzaXplb2YoIGNvbW1vblJPTVNjcmF0Y2hBcmVhICkgLyBzaXplb2YoIHVpbnQzMl90ICkpIDsgaSsrICkgeworICAgICAgY29tbW9uUk9NU2NyYXRjaEFyZWFbIGkgXSA9IDA7CisgICB9CisgICBjb21tb25ST01TY3JhdGNoQXJlYVsgMyBdID0gKCh1aW50MzJfdClIZWxwRnVuY1RhYmxlKTsKKyAgIGNvbW1vblJPTVNjcmF0Y2hBcmVhWyA0IF0gPSAoKHVpbnQzMl90KVJvbTJSb21QYXRjaFRhYmxlKSAtICggMzIgKiBzaXplb2YoIHVpbnQzMl90ICkpOworfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS91dGlscy9yb21fY3J5cHRvL3N0YW5kYWxvbmVfcm9tX2NyeXB0by5oIGIvdGhpcmRfcGFydHkvdGkvY2MyNnh4d2FyZS91dGlscy9yb21fY3J5cHRvL3N0YW5kYWxvbmVfcm9tX2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NmVhMmIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS90aS9jYzI2eHh3YXJlL3V0aWxzL3JvbV9jcnlwdG8vc3RhbmRhbG9uZV9yb21fY3J5cHRvLmgKQEAgLTAsMCArMSw4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgRmlsZW5hbWU6ICAgICAgIHN0YW5kYWxvbmVfcm9tX2NyeXB0by5oCisqICBSZXZpc2VkOiAgICAgICAgJERhdGU6IDIwMTUtMDMtMTkgMTU6Mzc6MTEgKzAxMDAgKHRvLCAxOSBtYXIgMjAxNSkgJAorKiAgUmV2aXNpb246ICAgICAgICRSZXZpc2lvbjogNDMwNTEgJAorKgorKiAgRGVzY3JpcHRpb246ICAgIFByb3ZpZGUgYSBzaW1wbGUgaW5pdGlhbGl6YXRpb24gdGhlIGNvbW1vbiBST00tUkFNIHN5c3RlbQorKiAgICAgICAgICAgICAgICAgIG5lZWRlZCBwcmlvciB0byB1c2luZyB0aGUgUk9NIEVuY3J5cHRpb24gZnVuY3Rpb25zCisqICAgICAgICAgICAgICAgICAgKHJlZi4gPGRyaXZlcmxpYi9Sb21FbmNyeXB0aW9uLmg+KQorKgorKiAgQ29weXJpZ2h0IChjKSAyMDE1LCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorKgorKiAgMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyoKKyogIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiAgMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT1JHQU5JWkFUSU9OIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyogICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorKiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyogIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyogIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyogIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fU1RBTkRBTE9ORV9ST01fQ1JZUFRPX18KKyNkZWZpbmUgX19TVEFOREFMT05FX1JPTV9DUllQVE9fXworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworLy8gSWYgYnVpbGRpbmcgd2l0aCBhIEMrKyBjb21waWxlciwgbWFrZSBhbGwgb2YgdGhlIGRlZmluaXRpb25zIGluIHRoaXMgaGVhZGVyCisvLyBoYXZlIGEgQyBiaW5kaW5nLgorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyEgXGJyaWVmIFNpbXBsaWZpZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbW1vbiBST00tUkFNIHN5c3RlbSBuZWVkZWQgcHJpb3IgdG8gdXNpbmcgdGhlIFJvbUVuY3J5cHRpb24gZnVuY3Rpb25zLgorLy8hCisvLyEgVGhpcyBzaW1wbGlmaWVkIGluaXRpYWxpemF0aW9uIHNoYWxsIG5vdCBiZSB1c2VkIGlmIHVzaW5nIHRoZSBzdGFjayBzb2Z0d2FyZS4KKy8vISBUaGUgc3RhY2sgc29mdHdhcmUgaW1wbGllcyBjYWxsaW5nIHRoZSBmdW5jdGlvbiBDb21tb25ST01fSW5pdCgpIHJlcGxhY2luZworLy8hIHRoaXMgc2ltcGxpZmllZCBtZXRob2QuCisvLyEKKy8vISBcbm90ZSBTUkFNIGFyZWEgMHgyMDAwNEYyQy0weDIwMDA0RkZGIHdpbGwgYmUgYWxsb2NhdGVkIChDT01NT05fUkFNX0JBU0VfQUREUiByZWdpb24pLgorLy8hCisvLyEgXHBhcmFtIE5vbmUKKy8vIQorLy8hIFxyZXR1cm4gTm9uZQorLy8hCisvLyEgXHNhIFJvbUVuY3J5cHRpb24uaAorLy8KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2V4dGVybiB2b2lkIFN0YW5kYWxvbmVSb21DcnlwdG9Jbml0KCB2b2lkICk7CisKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisvLyBNYXJrIHRoZSBlbmQgb2YgdGhlIEMgYmluZGluZ3Mgc2VjdGlvbiBmb3IgQysrIGNvbXBpbGVycy4KKy8vCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gX19TVEFOREFMT05FX1JPTV9DUllQVE9fXwpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuYW0gYi90b29scy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWVkZWQyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1NSBAQAorIworIyAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3ByZS5hbQorCisjIEFsd2F5cyBwYWNrYWdlIChlLmcuIGZvciAnbWFrZSBkaXN0JykgdGhlc2Ugc3ViZGlyZWN0b3JpZXMuCisKK0RJU1RfU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICBoYXJuZXNzLWF1dG9tYXRpb24gICAgICAgICAgICAgICAgICAgIFwKKyAgICBoYXJuZXNzLXRoY2kgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGktaGRsYy1hZGFwdGVyICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKKyMgQWx3YXlzIGJ1aWxkIChlLmcuIGZvciAnbWFrZSBhbGwnKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworU1VCRElSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9UT09MUworaWYgT1BFTlRIUkVBRF9UQVJHRVRfTElOVVgKK1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IHNwaS1oZGxjLWFkYXB0ZXIKK2VuZGlmCitlbmRpZiAjIE9QRU5USFJFQURfQlVJTERfVE9PTFMKKworIyBBbHdheXMgcHJldHR5IChlLmcuIGZvciAnbWFrZSBwcmV0dHknKSB0aGVzZSBzdWJkaXJlY3Rvcmllcy4KKworUFJFVFRZX1NVQkRJUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wb3N0LmFtCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vTWFrZWZpbGUuYW0gYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkNWNlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQxIEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgICAgICAgICAgICAgID0gXAorICAgIGF1dG90aHJlYWRoYXJuZXNzICAgICBcCisgICAgY2FzZXMgICAgICAgICAgICAgICAgIFwKKyAgICBkb2MgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcXVpcmVtZW50cy50eHQgICAgICBcCisgICAgUkVBRE1FLnJzdCAgICAgICAgICAgIFwKKyAgICBzdGFydC5iYXQgICAgICAgICAgICAgXAorICAgIHN0YXJ0LnNoICAgICAgICAgICAgICBcCisgICAgJChOVUxMKQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9SRUFETUUucnN0IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL1JFQURNRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmZTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9SRUFETUUucnN0CkBAIC0wLDAgKzEsNzAgQEAKKz09PT09PT09PT09PT09PT09PT09PT09CitIYXJuZXNzIEF1dG9tYXRpb24gVG9vbAorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIHRvb2wgdG8gYXV0b21hdGUgdGVzdGluZyBvcGVudGhyZWFkIHdpdGggR1JMIFRocmVhZC1UZXN0LUhhcm5lc3MxLjEtQWxwaGEgdjEuMC1SZWxlYXNlXzQwLjAuCisKKy0tLS0tLS0tLS0tCitRdWljayBTdGFydAorLS0tLS0tLS0tLS0KKworRm9sbG93IHRoZSBgUXVpY2sgU3RhcnQgPGRvYy9xdWlja3N0YXJ0LnJzdD5gXworCistLS0tLS0KK1N5bnRheAorLS0tLS0tCisKKzo6CisKKyAuL3N0YXJ0LnNoIFstaF0gWy0tcGF0dGVybiBQQVRURVJOXSBbLS1kZWxldGUtYmxhY2tsaXN0XSBbLS1za2lwIFNLSVBdCisgICAgICAgICAgICAgICAgIFstLWRyeS1ydW5dIFstLXJlc3VsdC1maWxlIFJFU1VMVF9GSUxFXQorICAgICAgICAgICAgICAgICBbLS1saXN0LWZpbGUgTElTVF9GSUxFXSBbLS1jb250aW51ZS1mcm9tIENPTlRJTlVFX0ZST01dCisgICAgICAgICAgICAgICAgIFstLWF1dG8tcmVib290XSBbLS1tYW51YWwtcmVzZXRdIFstLWxpc3QtZGV2aWNlc10KKyAgICAgICAgICAgICAgICAgW05BTUUgW05BTUUgLi4uXV0KKworLS0tLS0tLQorT3B0aW9ucworLS0tLS0tLQorCitJZiBgYC1sYGAgaXMgZ2l2ZW4sIGBgTkFNRWBgIGlzIHRoZSBzZXJpYWwgcG9ydCBkZXZpY2UgbmFtZS4gT3RoZXJ3aXNlIGBgTkFNRWBgIGlzIHRlc3QgY2FzZSBuYW1lLiBUaGlzIGVuYWJsZXMgcnVubmluZyBzaW5nbGUgb3IgbXVsdGlwbGUgdGVzdCBjYXNlcyBkaXJlY3RseS4KKworT3RoZXIgb3B0aW9uczo6CisKKyAgICAtaCwgLS1oZWxwCisgICAgICAgIFNob3cgaGVscCBtZXNzYWdlIGFuZCBleGl0LgorCisgICAgLS1ibGFja2xpc3QgQkxBQ0tMSVNUX0ZJTEUsIC1iIEJMQUNLTElTVF9GSUxFCisgICAgICAgIHNraXAgdGVzdCBjYXNlcyBsaXN0ZWQgaW4gQkxBQ0tMSVNUX0ZJTEUuCisKKyAgICAtLXBhdHRlcm4gUEFUVEVSTiwgLXAgUEFUVEVSTgorICAgICAgICBGaWxlIG5hbWUgcGF0dGVybiwgRGVmYXVsdCB0byBhbGwgcHl0aG9uIGZpbGVzLgorCisgICAgLS1kZWxldGUtYmxhY2tsaXN0LCAtZAorICAgICAgICBDbGVhciBnb2xkZW4gZGV2aWNlIGJsYWNrbGlzdCBvbiBzdGFydHVwLiBCeSBkZWZhdWx0LCBnb2xkZW4gZGV2aWNlcyBmYWlsZWQgdG8gYmUgY29ubmVjdGVkIGFyZSBrZXB0IGluIGEgYmxhY2tsaXN0IGF1dG9tYXRpY2FsbHkuIEFkZCB0aGlzIG9wdGlvbiB0byBjbGVhciBibGFja2xpc3Qgb24gc3RhcnR1cC4KKworICAgIC0tbmFtZS1ncmVwcyBOQU1FX0dSRVBTLCAtZyBOQU1FX0dSRVBTCisgICAgICAgIEZpbHRlciBjYXNlIGJ5IGl0cyBuYW1lIHVzaW5nIGZpbGVuYW1lIG1hdGNoaW5nIHN5bnRheC4gTXVsdGlwbGUgdGhpcyBvcHRpb25zIGFyZSBPUi1lZCB0byBhbGxvdyBtb3JlIHRlc3RzLgorCisgICAgLS1za2lwIFNLSVAsIC1rIFNLSVAKKyAgICAgICAgVHlwZSBvZiB0ZXN0IGNhc2Ugc3RhdHVzIHRvIHNraXAuIGBgZWBgIGZvciBlcnJvciwgYGBmYGAgZm9yIGZhaWwsIGBgcGBgIGZvciBwYXNzLiBJZiB0ZXN0IGNhc2UgbmFtZXMgYXJlIGdpdmVuIGJ5IGBgTkFNRWBgLCB0aGlzIG9wdGlvbiB3aWxsIG5vdCB3b3JrLgorCisgICAgLS1kcnktcnVuLCAtbgorICAgICAgICBKdXN0IHNob3cgd2hhdCB0ZXN0IGNhc2Ugd2lsbCBiZSBydW4uCisKKyAgICAtLXJlc3VsdC1maWxlIFJFU1VMVF9GSUxFLCAtbyBSRVNVTFRfRklMRQorICAgICAgICBGaWxlIHRvIHN0b3JlIGFuZCByZWFkIGN1cnJlbnQgc3RhdHVzLgorCisgICAgLS1saXN0LWZpbGUgTElTVF9GSUxFLCAtaSBMSVNUX0ZJTEUKKyAgICAgICAgRmlsZSB0byBsaXN0IGNhc2VzIG5hbWVzIHRvIHRlc3QuCisKKyAgICAtLWNvbnRpbnVlLWZyb20gQ09OVElOVUVfRlJPTSwgLWMgQ09OVElOVUVfRlJPTQorICAgICAgICBGaXJzdCBjYXNlIHRvIHRlc3QuCisKKyAgICAtLWF1dG8tcmVib290LCAtYQorICAgICAgICBSZXN0YXJ0IHN5c3RlbSB3aGVuIGhhcm5lc3MgY2Fubm90IHJlY292ZXIuIFRoaXMgaXMgYSB3YWxrIGFyb3VuZCB0byBzb21lIGlzc3Vlcywgc3VjaCBhcyBnb2xkZW4gZGV2aWNlcyBtYXkgbm90IHdvcmsgYWZ0ZXIgbG9uZyB0aW1lIHJ1bm5pbmcgYW5kIGhhdmUgdG8gcmVzdGFydCBzeXN0ZW0uCisKKyAgICAtLW1hbnVhbC1yZXNldCwgLW0KKyAgICAgICAgUmVzZXQgZGV2aWNlcyBtYW51YWxseSwgaW4gY2FzZSBubyBQRFUgYXZhaWxhYmxlIHNvIHRoYXQgcmVzZXQgZ29sZGVuIGRldmljZXMgaGF2ZSB0byBiZSBkb25lIG1hbnVhbGx5LgorCisgICAgLS1saXN0LWRldmljZXMsIC1sCisgICAgICAgIExpc3QgZGV2aWNlcywgaW5jbHVkaW5nIHRoZWlyIHZlcnNpb24gaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvX19pbml0X18ucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwYjViZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvZXhjZXB0aW9ucy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9leGNlcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTljYzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvZXhjZXB0aW9ucy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2NsYXNzIEZhaWxFcnJvcihFeGNlcHRpb24pOgorICAgICIiIlRoaXMgZXJyb3IgY2xhc3MgaXMgdGhlIGJhc2UgZm9yIGFsbCBlcnJvcnMgdGhhdCBjYXVzZSB0aGUgY3VycmVudCB0ZXN0IGNhc2UgZmFpbHMuCisgICAgIiIiCisgICAgcGFzcworCitjbGFzcyBGYXRhbEVycm9yKEZhaWxFcnJvcik6CisgICAgIiIiVGhpcyBlcnJvciBjbGFzcyBpcyB0aGUgYmFzZSBmb3IgYWxsIGVycm9ycyB0aGF0IGNhdXNlIHRoZSB3aG9sZSB0ZXN0IHByb2NlZHVyZSBzdG9wcy4KKyAgICAiIiIKKyAgICBwYXNzCisKK2NsYXNzIEdvbGRlbkRldmljZU5vdEVub3VnaEVycm9yKEZhaWxFcnJvcik6CisgICAgIiIiUmFpc2VkIHdoZW4gbm8gbW9yZSBnb2xkZW4gZGV2aWNlcyBhcmUgYXZhaWxhYmxlIGZvciB0cnlpbmcuCisgICAgIiIiCisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL2hhcm5lc3NfY2FzZS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oYXJuZXNzX2Nhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkYTVkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oYXJuZXNzX2Nhc2UucHkKQEAgLTAsMCArMSw4NjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlciBpbXBvcnQgQWN0aW9uQ2hhaW5zCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LnVpIGltcG9ydCBTZWxlY3QKK2Zyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IFVuZXhwZWN0ZWRBbGVydFByZXNlbnRFeGNlcHRpb24KKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcyBpbXBvcnQgc2V0dGluZ3MKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuZXhjZXB0aW9ucyBpbXBvcnQgRmFpbEVycm9yLCBGYXRhbEVycm9yLCBHb2xkZW5EZXZpY2VOb3RFbm91Z2hFcnJvcgorZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2NvbnRyb2xsZXIgaW1wb3J0IEhhcm5lc3NDb250cm9sbGVyCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhlbHBlcnMgaW1wb3J0IEhpc3RvcnlIZWxwZXIKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3Mub3Blbl90aHJlYWRfY29udHJvbGxlciBpbXBvcnQgT3BlblRocmVhZENvbnRyb2xsZXIKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MucGR1X2NvbnRyb2xsZXJfZmFjdG9yeSBpbXBvcnQgUGR1Q29udHJvbGxlckZhY3RvcnkKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKK1RIUkVBRF9DSEFOTkVMX01BWCA9IDI2CisiIiJNYXhpbXVtIGNoYW5uZWwgbnVtYmVyIG9mIHRocmVhZCBwcm90b2NvbCIiIgorCitUSFJFQURfQ0hBTk5FTF9NSU4gPSAxMQorIiIiTWluaW11bSBjaGFubmVsIG51bWJlciBvZiB0aHJlYWQgcHJvdG9jb2wiIiIKKworREVGQVVMVF9USU1FT1VUID0gMjcwMAorIiIiVGltZW91dCBmb3IgZWFjaCB0ZXN0IGNhc2UgaW4gc2Vjb25kcyIiIgorCitkZWYgd2FpdF91bnRpbCh3aGF0LCB0aW1lcz0tMSk6CisgICAgIiIiV2FpdCB1bnRpbCBgd2hhdGAgcmV0dXJuIFRydWUKKworICAgIEFyZ3M6CisgICAgICAgIHdoYXQgKENhbGxhYmxlW2Jvb2xdKTogQ2FsbCBgd2FpdCgpYCBhZ2FpbiBhbmQgYWdhaW4gdW50aWwgaXQgcmV0dXJucyBUcnVlCisgICAgICAgIHRpbWVzIChpbnQpOiBNYXhpbXVtIHRpbWVzIG9mIHRyaWFscyBiZWZvcmUgZ2l2aW5nIHVwCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUcnVlIGlmIHN1Y2Nlc3MsIEZhbHNlIGlmIHRpbWVzIHRocmVzaG9sZCByZWFjaGVkCisKKyAgICAiIiIKKyAgICB3aGlsZSB0aW1lczoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1dhaXRpbmcgdGltZXMgbGVmdCAlZCcsIHRpbWVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB3aGF0KCkgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdXYWl0IGZhaWxlZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygnVHJpYWxbJWRdIGZhaWxlZCcsIHRpbWVzKQorICAgICAgICB0aW1lcyAtPSAxCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBIYXJuZXNzQ2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGhpcyBpcyB0aGUgY2FzZSBjbGFzcyBvZiBhbGwgYXV0b21hdGlvbiB0ZXN0IGNhc2VzLgorCisgICAgQWxsIHRlc3QgY2FzZSBjbGFzc2VzIE1VU1QgZGVmaW5lIHByb3BlcnRpZXMgYHJvbGVgLCBgY2FzZWAgYW5kIGBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZGAKKyAgICAiIiIKKworICAgIGNoYW5uZWwgPSBzZXR0aW5ncy5USFJFQURfQ0hBTk5FTAorICAgICIiImludDogVGhyZWFkIGNoYW5uZWwuCisKKyAgICBUaHJlYWQgY2hhbm5lbCByYW5nZXMgZnJvbSAxMSB0byAyNi4KKyAgICAiIiIKKworICAgIFJPTEVfTEVBREVSICAgICAgICAgPSAxCisgICAgUk9MRV9ST1VURVIgICAgICAgICA9IDIKKyAgICBST0xFX1NFRCAgICAgICAgICAgID0gNAorICAgIFJPTEVfQk9SREVSICAgICAgICAgPSA4CisgICAgUk9MRV9SRUVEICAgICAgICAgICA9IDE2CisgICAgUk9MRV9FRCAgICAgICAgICAgICA9IDMyCisgICAgUk9MRV9DT01NSVNTSU9ORVIgICA9IDY0CisgICAgUk9MRV9KT0lORVIgICAgICAgICA9IDEyOAorICAgIFJPTEVfRkVEICAgICAgICAgICAgPSA1MTIKKyAgICBST0xFX01FRCAgICAgICAgICAgID0gMTAyNAorCisgICAgcm9sZSA9IE5vbmUKKyAgICAiIiJpbnQ6IHJvbGUgaWQuCisKKyAgICAxCisgICAgICAgIExlYWRlcgorICAgIDIKKyAgICAgICAgUm91dGVyCisgICAgNAorICAgICAgICBTbGVlcHkgZW5kIGRldmljZQorICAgIDE2CisgICAgICAgIFJvdXRlciBlbGlnaWJsZSBlbmQgZGV2aWNlCisgICAgMzIKKyAgICAgICAgRW5kIGRldmljZQorICAgIDY0CisgICAgICAgIENvbW1pc3Npb25lcgorICAgIDEyOAorICAgICAgICBKb2luZXIKKyAgICA1MTIKKyAgICAgICAgRnVsbCBlbmQgZGV2aWNlCisgICAgMTAyNAorICAgICAgICBNaW5pbWFsIGVuZCBkZXZpY2UKKyAgICAiIiIKKworICAgIGNhc2UgPSBOb25lCisgICAgIiIic3RyOiBDYXNlIGlkLCBlLmcuICc2IDUgMScuCisgICAgIiIiCisKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDAKKyAgICAiIiJpbnQ6IEdvbGRlbiBkZXZpY2VzIG5lZWRlZCB0byBmaW5pc2ggdGhlIHRlc3QKKyAgICAiIiIKKworICAgIGNoaWxkX3RpbWVvdXQgPSBzZXR0aW5ncy5USFJFQURfQ0hJTERfVElNRU9VVAorICAgICIiImludDogQ2hpbGQgdGltZW91dCBpbiBzZWNvbmRzCisgICAgIiIiCisKKyAgICBzZWRfcG9sbGluZ19pbnRlcnZhbCA9IHNldHRpbmdzLlRIUkVBRF9TRURfUE9MTElOR19JTlRFUlZBTAorICAgICIiImludDogU0VEIHBvbGxpbmcgaW50ZXJ2YWwgaW4gc2Vjb25kcworICAgICIiIgorCisgICAgYXV0b19kdXQgPSBzZXR0aW5ncy5BVVRPX0RVVAorICAgICIiImJvb2w6IHdoZXRoZXIgdXNlIGhhcm5lc3MgYXV0byBkdXQgZmVhdHVyZSIiIgorCisgICAgdGltZW91dCA9IGhhc2F0dHIoc2V0dGluZ3MsICdUSU1FT1VUJykgYW5kIHNldHRpbmdzLlRJTUVPVVQgb3IgREVGQVVMVF9USU1FT1VUCisgICAgIiIibnVtYmVyOiB0aW1lb3V0IGluIHNlY29uZHMgdG8gc3RvcCBydW5uaW5nIHRoaXMgdGVzdCBjYXNlIiIiCisKKyAgICBzdGFydGVkID0gMAorICAgICIiIm51bWJlcjogdGVzdCBjYXNlIHN0YXJ0ZWQgdGltZXN0YW1wIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5kdXQgPSBOb25lCisgICAgICAgIHNlbGYuX2Jyb3dzZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2hjID0gTm9uZQorICAgICAgICBzZWxmLnJlc3VsdF9kaXIgPSAnJXNcXCVzJyAlIChzZXR0aW5ncy5PVVRQVVRfUEFUSCwgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHNlbGYuaGlzdG9yeSA9IEhpc3RvcnlIZWxwZXIoKQorCisgICAgICAgIHN1cGVyKEhhcm5lc3NDYXNlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX2luaXRfZGV2aWNlcyhzZWxmKToKKyAgICAgICAgIiIiUmVib290IGFsbCB1c2IgZGV2aWNlcy4KKworICAgICAgICBOb3RlOgorICAgICAgICAgICAgSWYgUERVX0NPTlRST0xMRVJfVFlQRSBpcyBub3QgdmFsaWQsIHVzYiBkZXZpY2VzIGlzIG5vdCByZWJvb3RlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9UWVBFOgorICAgICAgICAgICAgaWYgc2V0dGluZ3MuQVVUT19EVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGZvciBkZXZpY2UgaW4gc2V0dGluZ3MuR09MREVOX0RFVklDRVM6CisgICAgICAgICAgICAgICAgcG9ydCwgXyA9IGRldmljZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBPcGVuVGhyZWFkQ29udHJvbGxlcihwb3J0KSBhcyBvdGM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnUmVzZXR0aW5nICVzJywgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG90Yy5yZXNldCgpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gcmVzZXQgZGV2aWNlICVzJywgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oaXN0b3J5Lm1hcmtfYmFkX2dvbGRlbl9kZXZpY2UoZGV2aWNlKQorCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cmllcyA9IDMKKyAgICAgICAgcGR1X2ZhY3RvcnkgPSBQZHVDb250cm9sbGVyRmFjdG9yeSgpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwZHUgPSBwZHVfZmFjdG9yeS5jcmVhdGVfcGR1X2NvbnRyb2xsZXIoc2V0dGluZ3MuUERVX0NPTlRST0xMRVJfVFlQRSkKKyAgICAgICAgICAgICAgICBwZHUub3BlbigqKnNldHRpbmdzLlBEVV9DT05UUk9MTEVSX09QRU5fUEFSQU1TKQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdGYWlsZWQgdG8gY29ubmVjdCB0byB0ZWxuZXQnKQorICAgICAgICAgICAgICAgIHRyaWVzID0gdHJpZXMgLSAxCisgICAgICAgICAgICAgICAgaWYgdHJpZXM6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYXRhbCBlcnJvcjogY2Fubm90IGNvbm5lY3QgdG8gYXBjJykKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGR1LnJlYm9vdCgqKnNldHRpbmdzLlBEVV9DT05UUk9MTEVSX1JFQk9PVF9QQVJBTVMpCisgICAgICAgICAgICAgICAgcGR1LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHRpbWUuc2xlZXAobGVuKHNldHRpbmdzLkdPTERFTl9ERVZJQ0VTKSkKKworICAgIGRlZiBfaW5pdF9oYXJuZXNzKHNlbGYpOgorICAgICAgICAiIiJSZXN0YXJ0IGhhcm5lc3MgYmFja2VuZCBzZXJ2aWNlLgorCisgICAgICAgIFBsZWFzZSBzdGFydCB0aGUgaGFybmVzcyBjb250cm9sbGVyIGJlZm9yZSBydW5uaW5nIHRoZSBjYXNlcywgb3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hjID0gSGFybmVzc0NvbnRyb2xsZXIoc2VsZi5yZXN1bHRfZGlyKQorICAgICAgICBzZWxmLl9oYy5zdG9wKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZWxmLl9oYy5zdGFydCgpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICBoYXJuZXNzX2NvbmZpZyA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICBoYXJuZXNzX2NvbmZpZy5yZWFkKCclc1xcQ29uZmlnXFxDb25maWd1cmF0aW9uLmluaScgJSBzZXR0aW5ncy5IQVJORVNTX0hPTUUpCisgICAgICAgIGlmIGhhcm5lc3NfY29uZmlnLmhhc19vcHRpb24oJ1RIUkVBRF9IQVJORVNTX0NPTkZJRycsICdCcm93c2VyQXV0b05hdmlnYXRlJykgYW5kIFwKKyAgICAgICAgICAgICAgICBoYXJuZXNzX2NvbmZpZy5nZXRib29sZWFuKCdUSFJFQURfSEFSTkVTU19DT05GSUcnLCAnQnJvd3NlckF1dG9OYXZpZ2F0ZScpOgorICAgICAgICAgICAgb3Muc3lzdGVtKCd0YXNra2lsbCAvdCAvZiAvaW0gY2hyb21lLmV4ZScpCisKKyAgICBkZWYgX2Rlc3Ryb3lfaGFybmVzcyhzZWxmKToKKyAgICAgICAgIiIiU3RvcCBoYXJuZXNzIGJhY2tlbmQgc2VydmljZQorCisgICAgICAgIFN0b3AgaGFybmVzcyBzZXJ2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faGMuc3RvcCgpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgIGRlZiBfaW5pdF9kdXQoc2VsZik6CisgICAgICAgICIiIkluaXRpYWxpemUgdGhlIERVVC4KKworICAgICAgICBEVVQgd2lsbCBiZSByZXN0YXJ0ZWQuIGFuZCBvcGVudGhyZWFkIHdpbGwgc3RhcnRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuYXV0b19kdXQ6CisgICAgICAgICAgICBzZWxmLmR1dCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGR1dF9wb3J0ID0gc2V0dGluZ3MuRFVUX0RFVklDRVswXQorICAgICAgICBkdXQgPSBPcGVuVGhyZWFkQ29udHJvbGxlcihkdXRfcG9ydCkKKyAgICAgICAgc2VsZi5kdXQgPSBkdXQKKworICAgIGRlZiBfZGVzdHJveV9kdXQoc2VsZik6CisgICAgICAgIHNlbGYuZHV0ID0gTm9uZQorCisgICAgZGVmIF9pbml0X2Jyb3dzZXIoc2VsZik6CisgICAgICAgICIiIk9wZW4gaGFybmVzcyB3ZWIgcGFnZS4KKworICAgICAgICBPcGVuIGEgcXVpZXQgY2hyb21lIHdoaWNoOgorICAgICAgICAxLiBkaXNhYmxlcyBleHRlbnNpb25zLAorICAgICAgICAyLiBpZ25vcmUgY2VydGlmaWNhdGUgZXJyb3JzIGFuZAorICAgICAgICAzLiBhbHdheXMgYWxsb3cgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGNocm9tZV9vcHRpb25zID0gd2ViZHJpdmVyLkNocm9tZU9wdGlvbnMoKQorICAgICAgICBjaHJvbWVfb3B0aW9ucy5hZGRfYXJndW1lbnQoJy0tZGlzYWJsZS1leHRlbnNpb25zJykKKyAgICAgICAgY2hyb21lX29wdGlvbnMuYWRkX2FyZ3VtZW50KCctLWlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnMnKQorICAgICAgICBjaHJvbWVfb3B0aW9ucy5hZGRfZXhwZXJpbWVudGFsX29wdGlvbigncHJlZnMnLCB7CisgICAgICAgICAgICAncHJvZmlsZS5tYW5hZ2VkX2RlZmF1bHRfY29udGVudF9zZXR0aW5ncy5ub3RpZmljYXRpb25zJzogMQorICAgICAgICB9KQorCisgICAgICAgIGJyb3dzZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKGNocm9tZV9vcHRpb25zPWNocm9tZV9vcHRpb25zKQorICAgICAgICBicm93c2VyLnNldF9wYWdlX2xvYWRfdGltZW91dCgxMCkKKyAgICAgICAgYnJvd3Nlci5pbXBsaWNpdGx5X3dhaXQoMSkKKyAgICAgICAgYnJvd3Nlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBicm93c2VyLmdldChzZXR0aW5ncy5IQVJORVNTX1VSTCkKKyAgICAgICAgc2VsZi5fYnJvd3NlciA9IGJyb3dzZXIKKyAgICAgICAgaWYgbm90IHdhaXRfdW50aWwobGFtYmRhOiAnVGhyZWFkJyBpbiBicm93c2VyLnRpdGxlLCAzMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdUaHJlYWQnLCBicm93c2VyLnRpdGxlKQorCisgICAgZGVmIF9kZXN0cm95X2Jyb3dzZXIoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBicm93c2VyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnJvd3Nlci5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Jyb3dzZXIgPSBOb25lCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIlByZXBhcmUgdG8gcnVuIHRlc3QgY2FzZS4KKworICAgICAgICBTdGFydCBoYXJuZXNzIHNlcnZpY2UsIGluaXQgZ29sZGVuIGRldmljZXMsIHJlc2V0IERVVCBhbmQgb3BlbiBicm93c2VyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgSGFybmVzc0Nhc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsb2dnZXIuaW5mbygnU2V0dGluZyB1cCcpCisgICAgICAgICMgY2xlYXIgZmlsZXMKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0RlbGV0aW5nIGFsbCAucGRmJykKKyAgICAgICAgb3Muc3lzdGVtKCdkZWwgL3EgIiVIT01FRFJJVkUlJUhPTUVQQVRIJVxcRG93bmxvYWRzXFxOZXdQZGZfKi5wZGYiJykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0RlbGV0aW5nIGFsbCAueGxzeCcpCisgICAgICAgIG9zLnN5c3RlbSgnZGVsIC9xICIlSE9NRURSSVZFJSVIT01FUEFUSCVcXERvd25sb2Fkc1xcRXhjZWxSZXBvcnQqLnhsc3giJykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0RlbGV0aW5nIGFsbCAucGNhcG5nJykKKyAgICAgICAgb3Muc3lzdGVtKCdkZWwgL3EgIiVzXFxDYXB0dXJlc1xcKi5wY2FwbmciJyAlIHNldHRpbmdzLkhBUk5FU1NfSE9NRSkKKworICAgICAgICAjIHVzaW5nIHRlbXAgZmlsZXMgdG8gZml4IGV4Y2VsIGRvd25sb2FkaW5nIGZhaWwKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0VtcHR5IGZpbGVzIGluIHRlbXBzJykKKyAgICAgICAgb3Muc3lzdGVtKCdkZWwgL3EgIiVzXFxUaHJlYWRfSGFybmVzc1xcdGVtcFxcKi4qIicgJSBzZXR0aW5ncy5IQVJORVNTX0hPTUUpCisKKyAgICAgICAgIyBjcmVhdGUgZGlyZWN0b3J5CisgICAgICAgIG9zLnN5c3RlbSgnbWtkaXIgJXMnICUgc2VsZi5yZXN1bHRfZGlyKQorICAgICAgICBzZWxmLl9pbml0X2hhcm5lc3MoKQorICAgICAgICBzZWxmLl9pbml0X2RldmljZXMoKQorICAgICAgICBzZWxmLl9pbml0X2R1dCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIkNsZWFuIHVwIGFmdGVyIGVhY2ggY2FzZS4KKworICAgICAgICBTdG9wIGhhcm5lc3Mgc2VydmljZSwgY2xvc2UgYnJvd3NlciBhbmQgY2xvc2UgRFVULgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgSGFybmVzc0Nhc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsb2dnZXIuaW5mbygnVGVhcmluZyBkb3duJykKKyAgICAgICAgc2VsZi5fZGVzdHJveV9oYXJuZXNzKCkKKyAgICAgICAgc2VsZi5fZGVzdHJveV9icm93c2VyKCkKKyAgICAgICAgc2VsZi5fZGVzdHJveV9kdXQoKQorCisgICAgZGVmIF9zZXR1cF9wYWdlKHNlbGYpOgorICAgICAgICAiIiJEbyBzbmlmZmVyIHNldHRpbmdzIGFuZCBnZW5lcmFsIHNldHRpbmdzCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5zdGFydGVkOgorICAgICAgICAgICAgc2VsZi5zdGFydGVkID0gdGltZS50aW1lKCkKKworICAgICAgICBpZiB0aW1lLnRpbWUoKSAtIHNlbGYuc3RhcnRlZCA+IDMwOgorICAgICAgICAgICAgc2VsZi5fYnJvd3Nlci5yZWZyZXNoKCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgRGV0ZWN0IFNuaWZmZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlhbG9nID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2NhcHR1cmUtU2V0dXAtbW9kYWwnKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gZ2V0IGRpYWxvZy4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGlhbG9nIGFuZCBkaWFsb2cuZ2V0X2F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSA9PSAnZmFsc2UnOgorICAgICAgICAgICAgICAgIHRpbWVzID0gNjAKKyAgICAgICAgICAgICAgICB3aGlsZSB0aW1lczoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdzdGF0dXMtbm90aWZ5JykudGV4dAorICAgICAgICAgICAgICAgICAgICBpZiAnU2VhcmNoaW5nJyBpbiBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU3RpbGwgZGV0ZWN0aW5nLi4nKQorICAgICAgICAgICAgICAgICAgICBlbGlmICdOb3QnIGluIHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdTbmlmZmVyIGRldmljZSBub3QgdmVyaWZpZWQhJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ3NuaWZmZXJBdXRvRGV0ZWN0QnRuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGljaygpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgJ1ZlcmlmaWVkJyBpbiBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVmVyaWZpZWQhJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ3NhdmVDYXB0dXJlU2V0dGluZ3MnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnVW5leHBlY3RlZCBzbmlmZmVyIHZlcmlmaWNhdGlvbiBzdGF0dXMnKQorCisgICAgICAgICAgICAgICAgICAgIHRpbWVzID0gdGltZXMgLSAxCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICAgICAgICAgIGlmIG5vdCB0aW1lczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gZGV0ZWN0IHNuaWZmZXIgZGV2aWNlJykKKworICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2tpcF9idXR0b24gPSBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnU2tpcFByZXBhcmVEZXZpY2UnKQorICAgICAgICAgICAgaWYgc2tpcF9idXR0b24uaXNfZW5hYmxlZCgpOgorICAgICAgICAgICAgICAgIHNraXBfYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTdGlsbCBkZXRlY3Rpbmcgc25pZmZlcnMnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRfYnV0dG9uID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ25leHRCdXR0b24nKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gZmluaXNoIHNldHVwJykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBuZXh0X2J1dHRvbi5pc19lbmFibGVkKCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnSGFybmVzcyBpcyBzdGlsbCBub3QgcmVhZHknKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBHZW5lcmFsIFNldHVwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuY2hpbGRfdGltZW91dCBvciBzZWxmLnNlZF9wb2xsaW5nX2ludGVydmFsOgorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdnZW5lcmFsLVNldHVwJykKKyAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICAgICAgICAgIGRpYWxvZyA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdnZW5lcmFsLVNldHVwLW1vZGFsJykKKyAgICAgICAgICAgICAgICBpZiBkaWFsb2cuZ2V0X2F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKSAhPSAnZmFsc2UnOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ01pc3NpbmcgR2VuZXJhbCBTZXR1cCBkaWFsb2cnKQorCisgICAgICAgICAgICAgICAgZmllbGQgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdpbnBfZ2VuZXJhbF9jaGlsZF91cGRhdGVfd2FpdF90aW1lJykKKyAgICAgICAgICAgICAgICBmaWVsZC5jbGVhcigpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5jaGlsZF90aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZW5kX2tleXMoc3RyKHNlbGYuY2hpbGRfdGltZW91dCkpCisKKyAgICAgICAgICAgICAgICBmaWVsZCA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2lucF9nZW5lcmFsX3NlZF9wb2xsaW5nX3JhdGUnKQorICAgICAgICAgICAgICAgIGZpZWxkLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlZF9wb2xsaW5nX2ludGVydmFsOgorICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZW5kX2tleXMoc3RyKHNlbGYuc2VkX3BvbGxpbmdfaW50ZXJ2YWwpKQorCisgICAgICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnc2F2ZUdlbmVyYWxTZXR0aW5ncycpCisgICAgICAgICAgICAgICAgYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIGRvIGdlbmVyYWwgc2V0dXAnKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBGaW5pc2ggdGhpcyBwYWdlCisgICAgICAgIG5leHRfYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgZGVmIF9jb25uZWN0X2RldmljZXMoc2VsZik6CisgICAgICAgIGNvbm5lY3RfYWxsID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCdDb25uZWN0IEFsbCcpCisgICAgICAgIGNvbm5lY3RfYWxsLmNsaWNrKCkKKworICAgIGRlZiBfYWRkX2RldmljZShzZWxmLCBwb3J0LCBkZXZpY2VfdHlwZV9pZCk6CisgICAgICAgIGJyb3dzZXIgPSBzZWxmLl9icm93c2VyCisgICAgICAgIHRlc3RfYmVkID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ3Rlc3QtYmVkJykKKyAgICAgICAgZGV2aWNlID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoZGV2aWNlX3R5cGVfaWQpCisgICAgICAgICMgZHJhZworICAgICAgICBhY3Rpb25fY2hhaW5zID0gQWN0aW9uQ2hhaW5zKGJyb3dzZXIpCisgICAgICAgIGFjdGlvbl9jaGFpbnMuY2xpY2tfYW5kX2hvbGQoZGV2aWNlKQorICAgICAgICBhY3Rpb25fY2hhaW5zLm1vdmVfdG9fZWxlbWVudCh0ZXN0X2JlZCkucGVyZm9ybSgpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICAjIGRyb3AKKyAgICAgICAgZHJvcF9odyA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ2Ryb3AtaHcnKQorICAgICAgICBhY3Rpb25fY2hhaW5zID0gQWN0aW9uQ2hhaW5zKGJyb3dzZXIpCisgICAgICAgIGFjdGlvbl9jaGFpbnMubW92ZV90b19lbGVtZW50KGRyb3BfaHcpCisgICAgICAgIGFjdGlvbl9jaGFpbnMucmVsZWFzZShkcm9wX2h3KS5wZXJmb3JtKCkKKworICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgc2VsZWN0ZWRfaHcgPSBicm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdzZWxlY3RlZC1odycpCisgICAgICAgIGZvcm1faW5wdXRzID0gc2VsZWN0ZWRfaHcuZmluZF9lbGVtZW50c19ieV90YWdfbmFtZSgnaW5wdXQnKQorICAgICAgICBmb3JtX3BvcnQgPSBmb3JtX2lucHV0c1swXQorICAgICAgICBmb3JtX3BvcnQuY2xlYXIoKQorICAgICAgICBmb3JtX3BvcnQuc2VuZF9rZXlzKHBvcnQpCisKKyAgICBkZWYgX3Rlc3RfYmVkKHNlbGYpOgorICAgICAgICAiIiJTZXQgdXAgdGhlIHRlc3QgYmVkLgorCisgICAgICAgIENvbm5lY3QgbnVtYmVyIG9mIGdvbGRlbiBkZXZpY2VzIHJlcXVpcmVkIGJ5IGVhY2ggY2FzZS4KKyAgICAgICAgIiIiCisgICAgICAgIGJyb3dzZXIgPSBzZWxmLl9icm93c2VyCisgICAgICAgIHRlc3RfYmVkID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ3Rlc3QtYmVkJykKKyAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICBzZWxlY3RlZF9od19zZXQgPSB0ZXN0X2JlZC5maW5kX2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoJ3NlbGVjdGVkLWh3JykKKyAgICAgICAgc2VsZWN0ZWRfaHdfbnVtID0gbGVuKHNlbGVjdGVkX2h3X3NldCkKKworICAgICAgICB3aGlsZSBzZWxlY3RlZF9od19udW06CisgICAgICAgICAgICByZW1vdmVfYnV0dG9uID0gc2VsZWN0ZWRfaHdfc2V0W3NlbGVjdGVkX2h3X251bSAtIDFdLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKAorICAgICAgICAgICAgICAgICdyZW1vdmVTZWxlY3RlZERldmljZScpCisgICAgICAgICAgICByZW1vdmVfYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGVjdGVkX2h3X251bSA9IHNlbGVjdGVkX2h3X251bSAtIDEKKworICAgICAgICBkZXZpY2VzID0gW2RldmljZSBmb3IgZGV2aWNlIGluIHNldHRpbmdzLkdPTERFTl9ERVZJQ0VTCisgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaGlzdG9yeS5pc19iYWRfZ29sZGVuX2RldmljZShkZXZpY2VbMF0pIGFuZCBcCisgICAgICAgICAgICAgICAgICAgbm90IChzZXR0aW5ncy5EVVRfREVWSUNFIGFuZCBkZXZpY2VbMF0gPT0gc2V0dGluZ3MuRFVUX0RFVklDRVswXSldCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0F2YWlsYWJsZSBnb2xkZW4gZGV2aWNlczogJXMnLCBqc29uLmR1bXBzKGRldmljZXMsIGluZGVudD0yKSkKKyAgICAgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSBzZWxmLmdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkCisKKyAgICAgICAgaWYgc2VsZi5hdXRvX2R1dCBhbmQgbm90IHNldHRpbmdzLkRVVF9ERVZJQ0U6CisgICAgICAgICAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCArPSAxCisKKyAgICAgICAgaWYgbGVuKGRldmljZXMpIDwgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQ6CisgICAgICAgICAgICByYWlzZSBHb2xkZW5EZXZpY2VOb3RFbm91Z2hFcnJvcigpCisKKyAgICAgICAgIyBhZGQgZ29sZGVuIGRldmljZXMKKyAgICAgICAgd2hpbGUgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQ6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGV2aWNlKCpkZXZpY2VzLnBvcCgpKQorICAgICAgICAgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCAtIDEKKworICAgICAgICAjIGFkZCBEVVQKKyAgICAgICAgaWYgc2V0dGluZ3MuRFVUX0RFVklDRToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXZpY2UoKnNldHRpbmdzLkRVVF9ERVZJQ0UpCisKKyAgICAgICAgIyBlbmFibGUgQVVUTyBEVVQKKyAgICAgICAgaWYgc2VsZi5hdXRvX2R1dDoKKyAgICAgICAgICAgIGNoZWNrYm94X2F1dG9fZHV0ID0gYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ0VuYWJsZUF1dG9EdXRTZWxlY3Rpb24nKQorICAgICAgICAgICAgaWYgbm90IGNoZWNrYm94X2F1dG9fZHV0LmlzX3NlbGVjdGVkKCk6CisgICAgICAgICAgICAgICAgY2hlY2tib3hfYXV0b19kdXQuY2xpY2soKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICAgICAgaWYgc2V0dGluZ3MuRFVUX0RFVklDRToKKyAgICAgICAgICAgICAgICByYWRpb19hdXRvX2R1dCA9IGJyb3dzZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ0F1dG9EVVRfUmFkQnRucycpCisgICAgICAgICAgICAgICAgaWYgbm90IHJhZGlvX2F1dG9fZHV0LmlzX3NlbGVjdGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHJhZGlvX2F1dG9fZHV0LmNsaWNrKCkKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RfZGV2aWNlcygpCisgICAgICAgICAgICAgICAgYnV0dG9uX25leHQgPSBicm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnbmV4dEJ0bicpCisgICAgICAgICAgICAgICAgaWYgbm90IHdhaXRfdW50aWwobGFtYmRhOiAnZGlzYWJsZWQnIG5vdCBpbiBidXR0b25fbmV4dC5nZXRfYXR0cmlidXRlKCdjbGFzcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzPSgzMCArIDQgKiBzZWxmLmdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkKSk6CisgICAgICAgICAgICAgICAgICAgIGJhZF9vbmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRfaHdfc2V0ID0gdGVzdF9iZWQuZmluZF9lbGVtZW50c19ieV9jbGFzc19uYW1lKCdzZWxlY3RlZC1odycpCisgICAgICAgICAgICAgICAgICAgIGZvciBzZWxlY3RlZF9odyBpbiBzZWxlY3RlZF9od19zZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2lucHV0cyA9IHNlbGVjdGVkX2h3LmZpbmRfZWxlbWVudHNfYnlfdGFnX25hbWUoJ2lucHV0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fcG9ydCA9IGZvcm1faW5wdXRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtX3BvcnQuaXNfZW5hYmxlZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZF9vbmVzLmFwcGVuZChzZWxlY3RlZF9odykKKworICAgICAgICAgICAgICAgICAgICBmb3Igc2VsZWN0ZWRfaHcgaW4gYmFkX29uZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2lucHV0cyA9IHNlbGVjdGVkX2h3LmZpbmRfZWxlbWVudHNfYnlfdGFnX25hbWUoJ2lucHV0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fcG9ydCA9IGZvcm1faW5wdXRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gZm9ybV9wb3J0LmdldF9hdHRyaWJ1dGUoJ3ZhbHVlJykuZW5jb2RlKCd1dGY4JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNldHRpbmdzLkRVVF9ERVZJQ0UgYW5kIHBvcnQgPT0gc2V0dGluZ3MuRFVUX0RFVklDRVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9UWVBFIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29ubmVjdGlvbiBlcnJvciBjYW5ub3QgcmVjb3ZlciB3aXRob3V0IHBvd2VyIGN5Y2xpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmF0YWxFcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgdG8gRFVUJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsRXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IHRvIERVVCcpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNldHRpbmdzLlBEVV9DT05UUk9MTEVSX1RZUEUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBvcnQgY2Fubm90IHJlY292ZXIgd2l0aG91dCBwb3dlciBjeWNsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oaXN0b3J5Lm1hcmtfYmFkX2dvbGRlbl9kZXZpY2UocG9ydCkKKworICAgICAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgdGhlIGJhZCBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX2h3LmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdyZW1vdmVTZWxlY3RlZERldmljZScpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZGV2aWNlcyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2RldmljZSgqZGV2aWNlcy5wb3AoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBkZXZpY2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnR29sZGVuIGRldmljZXMgbm90IGVub3VnaCcpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBHb2xkZW5EZXZpY2VOb3RFbm91Z2hFcnJvcigpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVHJ5IGFnYWluIHdpdGggbmV3IGdvbGRlbiBkZXZpY2VzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmF1dG9fZHV0IGFuZCBub3Qgc2V0dGluZ3MuRFVUX0RFVklDRToKKyAgICAgICAgICAgICAgICAgICAgcmFkaW9fYXV0b19kdXQgPSBicm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdBdXRvRFVUX1JhZEJ0bnMnKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmFkaW9fYXV0b19kdXQuaXNfc2VsZWN0ZWQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvX2F1dG9fZHV0LmNsaWNrKCkKKworICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisKKyAgICAgICAgICAgICAgICBidXR0b25fbmV4dC5jbGljaygpCisgICAgICAgICAgICBleGNlcHQgRmFpbEVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5leHBlY3RlZCBlcnJvcicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX3NlbGVjdF9jYXNlKHNlbGYsIHJvbGUsIGNhc2UpOgorICAgICAgICAiIiJTZWxlY3QgdGhlIHRlc3QgY2FzZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgc2VsZWN0IHRoZSBjYXNlCisgICAgICAgIGVsZW0gPSBTZWxlY3Qoc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ3NlbGVjdC1kdXQnKSkKKyAgICAgICAgZWxlbS5zZWxlY3RfYnlfdmFsdWUoc3RyKHJvbGUpKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgY2hlY2tib3ggPSBOb25lCisgICAgICAgIHdhaXRfdW50aWwobGFtYmRhOiBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCcudHJlZS1ub2RlIC50cmVlLXRpdGxlJykgYW5kIFRydWUpCisgICAgICAgIGVsZW1zID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcignLnRyZWUtbm9kZSAudHJlZS10aXRsZScpCisgICAgICAgIGZpbmRlciA9IHJlLmNvbXBpbGUocicuKlxiJyArIGNhc2UgKyByJ1xiJykKKyAgICAgICAgZmluZGVyX2RvdHRlZCA9IHJlLmNvbXBpbGUocicuKlxiJyArIGNhc2UucmVwbGFjZSgnICcsIHInXC4nKSArIHInXGInKQorICAgICAgICBmb3IgZWxlbSBpbiBlbGVtczoKKyAgICAgICAgICAgIGFjdGlvbl9jaGFpbnMgPSBBY3Rpb25DaGFpbnMoc2VsZi5fYnJvd3NlcikKKyAgICAgICAgICAgIGFjdGlvbl9jaGFpbnMubW92ZV90b19lbGVtZW50KGVsZW0pCisgICAgICAgICAgICBhY3Rpb25fY2hhaW5zLnBlcmZvcm0oKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGVsZW0udGV4dCkKKyAgICAgICAgICAgIGlmIGZpbmRlci5tYXRjaChlbGVtLnRleHQpIG9yIGZpbmRlcl9kb3R0ZWQubWF0Y2goZWxlbS50ZXh0KToKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLmZpbmRfZWxlbWVudF9ieV94cGF0aCgnLi4nKQorICAgICAgICAgICAgICAgIGNoZWNrYm94ID0gcGFyZW50LmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCd0cmVlLWNoZWNrYm94JykKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBjaGVja2JveDoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIGZpbmQgdGhlIGNhc2UnKQorCisgICAgICAgIHNlbGYuX2Jyb3dzZXIuZXhlY3V0ZV9zY3JpcHQoIiQoJy5vdmVydmlldycpLmNzcygnbGVmdCcsICcwJykiKQorICAgICAgICBjaGVja2JveC5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBlbGVtID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfaWQoJ3J1blRlc3QnKQorICAgICAgICBlbGVtLmNsaWNrKCkKKyAgICAgICAgaWYgbm90IHdhaXRfdW50aWwobGFtYmRhOiBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnc3RvcFRlc3QnKSBhbmQgVHJ1ZSwgMTApOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgdGVzdCBjYXNlJykKKworICAgIGRlZiBfY29sbGVjdF9yZXN1bHQoc2VsZik6CisgICAgICAgICIiIkNvbGxlY3QgdGVzdCByZXN1bHQuCisKKyAgICAgICAgR2VuZXJhdGUgUERGLCBleGNlbCBhbmQgcGNhcCBmaWxlCisgICAgICAgICIiIgorICAgICAgICAjIGdlbmVyYXRlIHBkZgorICAgICAgICBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdzYXZlLXBkZicpLmNsaWNrKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaWFsb2cgPSBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnVGVzdGluZm8nKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gZ2V0IHRlc3QgaW5mbyBkaWFsb2cuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRpYWxvZy5nZXRfYXR0cmlidXRlKCdhcmlhLWhpZGRlbicpICE9ICdmYWxzZSc6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUZXN0IGluZm9ybWF0aW9uIGRpYWxvZyBub3QgcmVhZHknKQorCisgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5hdXRvX2R1dCBhbmQgc2V0dGluZ3MuRFVUX1ZFUlNJT04gb3Igc2VsZi5kdXQudmVyc2lvbgorICAgICAgICAgICAgZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnaW5wX2R1dF9tYW51ZmFjdHVyZXInKS5zZW5kX2tleXMoc2V0dGluZ3MuRFVUX01BTlVGQUNUVVJFUikKKyAgICAgICAgICAgIGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2lucF9kdXRfZmlybXdhcmVfdmVyc2lvbicpLnNlbmRfa2V5cyh2ZXJzaW9uKQorICAgICAgICAgICAgZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnaW5wX3Rlc3Rlcl9uYW1lJykuc2VuZF9rZXlzKHNldHRpbmdzLlRFU1RFUl9OQU1FKQorICAgICAgICAgICAgZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnaW5wX3JlbWFya3MnKS5zZW5kX2tleXMoc2V0dGluZ3MuVEVTVEVSX1JFTUFSS1MpCisgICAgICAgICAgICBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdnZW5lcmF0ZVBkZicpLmNsaWNrKCkKKworICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIG1haW5fd2luZG93ID0gc2VsZi5fYnJvd3Nlci5jdXJyZW50X3dpbmRvd19oYW5kbGUKKworICAgICAgICAjIGdlbmVyYXRlIGV4Y2VsCisgICAgICAgIHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ3NhdmUtZXhjZWwnKS5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgZm9yIHdpbmRvd19oYW5kbGUgaW4gc2VsZi5fYnJvd3Nlci53aW5kb3dfaGFuZGxlczoKKyAgICAgICAgICAgIGlmIHdpbmRvd19oYW5kbGUgIT0gbWFpbl93aW5kb3c6CisgICAgICAgICAgICAgICAgc2VsZi5fYnJvd3Nlci5zd2l0Y2hfdG8ud2luZG93KHdpbmRvd19oYW5kbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fYnJvd3Nlci5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Jyb3dzZXIuc3dpdGNoX3RvLndpbmRvdyhtYWluX3dpbmRvdykKKworICAgICAgICAjIHNhdmUgcGNhcAorICAgICAgICBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdzYXZlLXdpcmVzaGFyaycpLmNsaWNrKCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBmb3Igd2luZG93X2hhbmRsZSBpbiBzZWxmLl9icm93c2VyLndpbmRvd19oYW5kbGVzOgorICAgICAgICAgICAgaWYgd2luZG93X2hhbmRsZSAhPSBtYWluX3dpbmRvdzoKKyAgICAgICAgICAgICAgICBzZWxmLl9icm93c2VyLnN3aXRjaF90by53aW5kb3cod2luZG93X2hhbmRsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9icm93c2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fYnJvd3Nlci5zd2l0Y2hfdG8ud2luZG93KG1haW5fd2luZG93KQorCisgICAgICAgIG9zLnN5c3RlbSgnY29weSAiJSVIT01FUEFUSCUlXFxEb3dubG9hZHNcXE5ld1BkZl8qLnBkZiIgJXNcXCcKKyAgICAgICAgICAgICAgICAgICUgc2VsZi5yZXN1bHRfZGlyKQorICAgICAgICBvcy5zeXN0ZW0oJ2NvcHkgIiUlSE9NRVBBVEglJVxcRG93bmxvYWRzXFxFeGNlbFJlcG9ydF8qLnhsc3giICVzXFwnCisgICAgICAgICAgICAgICAgICAlIHNlbGYucmVzdWx0X2RpcikKKyAgICAgICAgb3Muc3lzdGVtKCdjb3B5ICIlc1xcQ2FwdHVyZXNcXCoucGNhcG5nIiAlc1xcJworICAgICAgICAgICAgICAgICAgJSAoc2V0dGluZ3MuSEFSTkVTU19IT01FLCBzZWxmLnJlc3VsdF9kaXIpKQorICAgICAgICBvcy5zeXN0ZW0oJ2NvcHkgIiVzXFxUaHJlYWRfSGFybmVzc1xcdGVtcFxcKi4qIiAiJXMiJworICAgICAgICAgICAgICAgICAgJSAoc2V0dGluZ3MuSEFSTkVTU19IT01FLCBzZWxmLnJlc3VsdF9kaXIpKQorCisgICAgZGVmIF93YWl0X2RpYWxvZyhzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3IgZGlhbG9ncyBhbmQgaGFuZGxlIHRoZW0gdW50aWwgZG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1Zygnd2FpdGluZyBmb3IgZGlhbG9nJykKKyAgICAgICAgZG9uZSA9IEZhbHNlCisgICAgICAgIGVycm9yID0gRmFsc2UKKworICAgICAgICB3aGlsZSBub3QgZG9uZSBhbmQgc2VsZi50aW1lb3V0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpYWxvZyA9IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdSZW1vdGVDb25maXJtJykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gZ2V0IGRpYWxvZy4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBkaWFsb2cgYW5kIGRpYWxvZy5nZXRfYXR0cmlidXRlKCdhcmlhLWhpZGRlbicpID09ICdmYWxzZSc6CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdtb2RhbC10aXRsZScpLnRleHQKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnSGFuZGxpbmcgZGlhbG9nWyVzXScsIHRpdGxlKQorCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBzZWxmLl9oYW5kbGVfZGlhbG9nKGRpYWxvZywgdGl0bGUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0Vycm9yIGhhbmRsaW5nIGRpYWxvZzogJXMnLCB0aXRsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIGRvbmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxFcnJvcignVW5leHBlY3RlZCBkaWFsb2cgb2NjdXJyZWQnKQorCisgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ0NvbmZpcm1PaycpLmNsaWNrKCkKKworICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3RvcF9idXR0b24gPSBzZWxmLl9icm93c2VyLmZpbmRfZWxlbWVudF9ieV9pZCgnc3RvcFRlc3QnKQorICAgICAgICAgICAgICAgIGlmIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIHN0b3BfYnV0dG9uLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAgICAgIyB3YWl0IGZvciBzdG9wIHByb2NlZHVyZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdUZXN0IHN0b3BwZWQnKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgICAgICBkb25lID0gVHJ1ZQorCisgICAgICAgICAgICBzZWxmLnRpbWVvdXQgLT0gMQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIGFscmVhZHkgZW5kZWQgY2FwdHVyZQorICAgICAgICAgICAgaWYgc2VsZi50aW1lb3V0ICUgMTAgPT0gMDoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IHNlbGYuX2hjLnRhaWwoKQorICAgICAgICAgICAgICAgIGlmICdTVUNDRVNTOiBUaGUgcHJvY2VzcyAiZHVtcGNhcC5leGUiIHdpdGggUElEICcgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdUc2hhcmsgc2hvdWxkIGJlIGVuZGVkIG5vdywgbGV0cyB3YWl0IGF0IG1vc3QgMzAgc2Vjb25kcy4nKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdF91bnRpbChsYW1iZGE6ICd0c2hhcmsuZXhlJyBub3QgaW4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoJ3Rhc2tsaXN0JyksIDMwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCd0YXNra2lsbCAvdCAvZiAvaW0gdHNoYXJrLmV4ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhyZXMpCisKKyAgICAgICAgIyBXYWl0IHVudGlsIGNhc2UgcmVhbGx5IHN0b3BwZWQKKyAgICAgICAgd2FpdF91bnRpbChsYW1iZGE6IHNlbGYuX2Jyb3dzZXIuZmluZF9lbGVtZW50X2J5X2lkKCdydW5UZXN0JykgYW5kIFRydWUsIDMwKQorCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcmFpc2UgRmFpbEVycm9yKCdGYWlsIGZvciBwcmV2aW91cyBleGNlcHRpb25zJykKKworICAgIGRlZiBfaGFuZGxlX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgIiIiSGFuZGxlIGEgZGlhbG9nLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBib29sIFRydWUgaWYgbm8gbW9yZSBkaWFsb2dzIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICBGYWxzZSBpZiBtb3JlIGRpYWxvZ3MgbmVlZGVkLCBhbmQKKyAgICAgICAgICAgICAgICAgTm9uZSBpZiBub3QgaGFuZGxlZAorICAgICAgICAiIiIKKyAgICAgICAgZG9uZSA9IHNlbGYub25fZGlhbG9nKGRpYWxvZywgdGl0bGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZG9uZSwgYm9vbCk6CisgICAgICAgICAgICByZXR1cm4gZG9uZQorCisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1N0YXJ0IERVVCcpOgorICAgICAgICAgICAgYm9keSA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtTXNnJykudGV4dAorICAgICAgICAgICAgaWYgJ1NsZWVweSBFbmQgRGV2aWNlJyBpbiBib2R5OgorICAgICAgICAgICAgICAgIHNlbGYuZHV0Lm1vZGUgPSAncycKKyAgICAgICAgICAgICAgICBzZWxmLmR1dC5jaGlsZF90aW1lb3V0ID0gc2VsZi5jaGlsZF90aW1lb3V0CisgICAgICAgICAgICBlbGlmICdFbmQgRGV2aWNlJyBpbiBib2R5OgorICAgICAgICAgICAgICAgIHNlbGYuZHV0Lm1vZGUgPSAncnNuJworICAgICAgICAgICAgICAgIHNlbGYuZHV0LmNoaWxkX3RpbWVvdXQgPSBzZWxmLmNoaWxkX3RpbWVvdXQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5kdXQubW9kZSA9ICdyc2RuJworCisgICAgICAgICAgICBpZiAnYXQgY2hhbm5lbCcgaW4gYm9keToKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5uZWwgPSBpbnQoYm9keS5zcGxpdCgnOicpWzFdKQorCisgICAgICAgICAgICBzZWxmLmR1dC5jaGFubmVsID0gc2VsZi5jaGFubmVsCisgICAgICAgICAgICBzZWxmLmR1dC5wYW5pZCA9IHNldHRpbmdzLlRIUkVBRF9QQU5JRAorICAgICAgICAgICAgc2VsZi5kdXQubmV0d29ya25hbWUgPSBzZXR0aW5ncy5USFJFQURfTkVUV09SS05BTUUKKyAgICAgICAgICAgIHNlbGYuZHV0LmV4dHBhbmlkID0gc2V0dGluZ3MuVEhSRUFEX0VYVFBBTklECisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisKKyAgICAgICAgZWxpZiAodGl0bGUuc3RhcnRzd2l0aCgnTUFDIEFkZHJlc3MgUmVxdWlyZWQnKQorICAgICAgICAgICAgICBvciB0aXRsZS5zdGFydHN3aXRoKCdEVVQgUmFuZG9tIEV4dGVuZGVkIE1BQyBBZGRyZXNzIFJlcXVpcmVkJykpOgorICAgICAgICAgICAgbWFjID0gc2VsZi5kdXQubWFjCisgICAgICAgICAgICBpbnAgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybUlucFRleHQnKQorICAgICAgICAgICAgaW5wLmNsZWFyKCkKKyAgICAgICAgICAgIGlucC5zZW5kX2tleXMoJzB4JXMnICUgbWFjKQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnTEw2NCBBZGRyZXNzJyk6CisgICAgICAgICAgICBsbDY0ID0gTm9uZQorICAgICAgICAgICAgZm9yIGFkZHIgaW4gc2VsZi5kdXQuYWRkcnM6CisgICAgICAgICAgICAgICAgYWRkciA9IGFkZHIubG93ZXIoKQorICAgICAgICAgICAgICAgIGlmIGFkZHIuc3RhcnRzd2l0aCgnZmU4MCcpIGFuZCBub3QgcmUubWF0Y2goJy4rZmY6ZmUwMDpbMC05YS1mXXswLDR9JCcsIGFkZHIpOgorICAgICAgICAgICAgICAgICAgICBsbDY0ID0gYWRkcgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3QgbGw2NDoKKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsRXJyb3IoJ05vIGxpbmsgbG9jYWwgYWRkcmVzcyBmb3VuZCcpCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdMaW5rIGxvY2FsIGFkZHJlc3MgaXMgJXMnLCBsbDY0KQorICAgICAgICAgICAgaW5wID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnY25mcm1JbnBUZXh0JykKKyAgICAgICAgICAgIGlucC5jbGVhcigpCisgICAgICAgICAgICBpbnAuc2VuZF9rZXlzKGxsNjQpCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdFbnRlciBDaGFubmVsJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5jaGFubmVsID0gc2VsZi5jaGFubmVsCisgICAgICAgICAgICBpbnAgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybUlucFRleHQnKQorICAgICAgICAgICAgaW5wLmNsZWFyKCkKKyAgICAgICAgICAgIGlucC5zZW5kX2tleXMoc3RyKHNlbGYuZHV0LmNoYW5uZWwpKQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnVXNlciBBY3Rpb24gTmVlZGVkJyk6CisgICAgICAgICAgICBib2R5ID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnY25mcm1Nc2cnKS50ZXh0CisgICAgICAgICAgICBpZiBib2R5LnN0YXJ0c3dpdGgoJ1Bvd2VyIERvd24gdGhlIERVVCcpOgorICAgICAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Nob3J0IEFkZHJlc3MnKToKKyAgICAgICAgICAgIHNob3J0X2FkZHIgPSAnMHglcycgJSBzZWxmLmR1dC5zaG9ydF9hZGRyCisgICAgICAgICAgICBpbnAgPSBkaWFsb2cuZmluZF9lbGVtZW50X2J5X2lkKCdjbmZybUlucFRleHQnKQorICAgICAgICAgICAgaW5wLmNsZWFyKCkKKyAgICAgICAgICAgIGlucC5zZW5kX2tleXMoc2hvcnRfYWRkcikKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ01MNjQgQWRkcmVzcycpOgorICAgICAgICAgICAgbWw2NCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBhZGRyIGluIHNlbGYuZHV0LmFkZHJzOgorICAgICAgICAgICAgICAgIGlmIGFkZHIuc3RhcnRzd2l0aCgnZmQnKSBhbmQgbm90IHJlLm1hdGNoKCcuK2ZmOmZlMDA6WzAtOWEtZl17MCw0fSQnLCBhZGRyKToKKyAgICAgICAgICAgICAgICAgICAgbWw2NCA9IGFkZHIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IG1sNjQ6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdObyBtZXNoIGxvY2FsIGFkZHJlc3MgZm91bmQnKQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnTWVzaCBsb2NhbCBhZGRyZXNzIGlzICVzJywgbWw2NCkKKyAgICAgICAgICAgIGlucCA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtSW5wVGV4dCcpCisgICAgICAgICAgICBpbnAuY2xlYXIoKQorICAgICAgICAgICAgaW5wLnNlbmRfa2V5cyhtbDY0KQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnU2hpZWxkIERldmljZXMnKSBvciB0aXRsZS5zdGFydHN3aXRoKCdTaGVpbGQgRFVUJyk6CisgICAgICAgICAgICBpZiBzZWxmLmR1dCBhbmQgc2V0dGluZ3MuU0hJRUxEX1NJTVVMQVRJT046CisgICAgICAgICAgICAgICAgc2VsZi5kdXQuY2hhbm5lbCA9IChzZWxmLmNoYW5uZWwgPT0gVEhSRUFEX0NIQU5ORUxfTUFYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgVEhSRUFEX0NIQU5ORUxfTUlOKSBvciAoc2VsZi5jaGFubmVsICsgMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmF3X2lucHV0KCdTaGllbGQgRFVUIGFuZCBwcmVzcyBlbnRlciB0byBjb250aW51ZS4uJykKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Vuc2hpZWxkIERldmljZXMnKSBvciB0aXRsZS5zdGFydHN3aXRoKCdCcmluZyBEVVQgQmFjayB0byBuZXR3b3JrJyk6CisgICAgICAgICAgICBpZiBzZWxmLmR1dCBhbmQgc2V0dGluZ3MuU0hJRUxEX1NJTVVMQVRJT046CisgICAgICAgICAgICAgICAgc2VsZi5kdXQuY2hhbm5lbCA9IHNlbGYuY2hhbm5lbAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYXdfaW5wdXQoJ0JyaW5nIERVVCBhbmQgcHJlc3MgZW50ZXIgdG8gY29udGludWUuLicpCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdDb25maWd1cmUgUHJlZml4IG9uIERVVCcpOgorICAgICAgICAgICAgYm9keSA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtTXNnJykudGV4dAorICAgICAgICAgICAgYm9keSA9IGJvZHkuc3BsaXQoJzogJylbMV0KKyAgICAgICAgICAgIHBhcmFtcyA9IHJlZHVjZShsYW1iZGEgcGFyYW1zLCBwYXJhbTogcGFyYW1zLnVwZGF0ZSgoKHBhcmFtWzBdLnN0cmlwKCcgJyksIHBhcmFtWzFdKSwpKSBvciBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0LnNwbGl0KCc9JykgZm9yIGl0IGluIGJvZHkuc3BsaXQoJywgJyldLCB7fSkKKyAgICAgICAgICAgIHByZWZpeCA9IHBhcmFtc1snUF9QcmVmaXgnXS5zdHJpcCgnXDBcclxuXHQgJykKKyAgICAgICAgICAgIGZsYWdzID0gW10KKyAgICAgICAgICAgIGlmIHBhcmFtcy5nZXQoJ1Bfc2xhYWNfcHJlZmVycmVkJywgMCkgPT0gJzEnOgorICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgncCcpCisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ2FvJykKKyAgICAgICAgICAgIGlmIHBhcmFtcy5nZXQoJ1Bfc3RhYmxlJywgMCkgPT0gJzEnOgorICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgncycpCisgICAgICAgICAgICBpZiBwYXJhbXMuZ2V0KCdQX2RlZmF1bHQnLCAwKSA9PSAnMSc6CisgICAgICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdyJykKKyAgICAgICAgICAgIHByZiA9ICdoaWdoJworICAgICAgICAgICAgc2VsZi5kdXQuYWRkX3ByZWZpeChwcmVmaXgsICcnLmpvaW4oZmxhZ3MpLCBwcmYpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2Qgd2lsbCBvbmx5IHN0YXJ0IHRlc3QgY2FzZSBpbiBjaGlsZCBjbGFzcyIiIgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBIYXJuZXNzQ2FzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdTa2lwIHRoaXMgaGFybmVzcyBpdHNlbGYnKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1Rlc3Rpbmcgcm9sZVslZF0gY2FzZVslc10nLCBzZWxmLnJvbGUsIHNlbGYuY2FzZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5faW5pdF9icm93c2VyKCkKKyAgICAgICAgICAgICMgcHJlcGFyZSB0ZXN0IGNhc2UKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdXJsID0gc2VsZi5fYnJvd3Nlci5jdXJyZW50X3VybAorICAgICAgICAgICAgICAgIGlmIHVybC5lbmRzd2l0aCgnU2V0dXBQYWdlLmh0bWwnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2V0dXBfcGFnZSgpCisgICAgICAgICAgICAgICAgZWxpZiB1cmwuZW5kc3dpdGgoJ1Rlc3RCZWQuaHRtbCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2JlZCgpCisgICAgICAgICAgICAgICAgZWxpZiB1cmwuZW5kc3dpdGgoJ1Rlc3RFeGVjdXRpb24uaHRtbCcpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnUmVhZHkgdG8gaGFuZGxlIGRpYWxvZ3MnKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgZXhjZXB0IFVuZXhwZWN0ZWRBbGVydFByZXNlbnRFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gY29ubmVjdCB0byBoYXJuZXNzIHNlcnZlcicpCisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCkKKyAgICAgICAgZXhjZXB0IEZhdGFsRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdUZXN0IHN0b3BwZWQgZm9yIGZhdGFsIGVycm9yJykKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoKQorICAgICAgICBleGNlcHQgRmFpbEVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVGVzdCBmYWlsZWQnKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignU29tZXRoaW5nIHdyb25nJykKKworICAgICAgICBzZWxmLl9zZWxlY3RfY2FzZShzZWxmLnJvbGUsIHNlbGYuY2FzZSkKKworICAgICAgICBzZWxmLl93YWl0X2RpYWxvZygpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY29sbGVjdF9yZXN1bHQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gY29sbGVjdCByZXN1bHRzJykKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBnZXQgY2FzZSByZXN1bHQKKyAgICAgICAgc3RhdHVzID0gc2VsZi5fYnJvd3Nlci5maW5kX2VsZW1lbnRfYnlfY2xhc3NfbmFtZSgndGl0bGUtdGVzdCcpLnRleHQKKyAgICAgICAgbG9nZ2VyLmluZm8oc3RhdHVzKQorICAgICAgICBzdWNjZXNzID0gJ1Bhc3MnIGluIHN0YXR1cworICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oYXJuZXNzX2NvbnRyb2xsZXIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGFybmVzc19jb250cm9sbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGY2OWQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvaGFybmVzc19jb250cm9sbGVyLnB5CkBAIC0wLDAgKzEsMTM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MgaW1wb3J0IHNldHRpbmdzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCitIQVJORVNTX1NWTl9WRVJTSU9OX1I0NCA9IDE0NzEKKyIiImludDogdGhpcyBpcyB0aGUgZmlyc3QgcHVibGlzaGVkIHJlbGVhc2UgdGhhdCBtaW5pd2ViIHdhcyByZW1vdmVkIGZyb20gSGFybmVzcyIiIgorCitkZWYgX3RyeV9raWxsKHByb2MpOgorICAgIGxvZ2dlci5pbmZvKCdUcnkga2lsbCBwcm9jZXNzJykKKyAgICB0aW1lcyA9IDEKKworICAgIHdoaWxlIHByb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgIHByb2Mua2lsbCgpCisKKyAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgICAgIGlmIHByb2MucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1Byb2Nlc3MgaGFzIGJlZW4ga2lsbGVkJykKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1RyaWFsICVkIGZhaWxlZCcsIHRpbWVzKQorICAgICAgICB0aW1lcyArPSAxCisKKyAgICAgICAgaWYgdGltZXMgPiAzOgorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgpCisKK2NsYXNzIEhhcm5lc3NDb250cm9sbGVyKG9iamVjdCk6CisgICAgIiIiSGFybmVzcyBzZXJ2aWNlIGNvbnRyb2wKKworICAgIFRoaXMgY29udHJvbHMgaGFybmVzcyBzZXJ2aWNlLCBpbmNsdWRpbmcgdGhlIGhhcm5lc3MgYmFjay1lbmQgYW5kIGZyb250LWVuZC4KKyAgICAiIiIKKyAgICBoYXJuZXNzID0gTm9uZQorICAgICIiImhhcm5lc3MgYmFjay1lbmQiIiIKKworICAgIG1pbml3ZWIgPSBOb25lCisgICAgIiIiaGFybmVzcyBmcm9udC1lbmQiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHRfZGlyPU5vbmUpOgorICAgICAgICBzZWxmLnJlc3VsdF9kaXIgPSByZXN1bHRfZGlyCisgICAgICAgIHNlbGYuaGFybmVzc19maWxlID0gJycKKworICAgICAgICBoYXJuZXNzX2luZm8gPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgaGFybmVzc19pbmZvLnJlYWQoJyVzXFxpbmZvLmluaScgJSBzZXR0aW5ncy5IQVJORVNTX0hPTUUpCisgICAgICAgIHNlbGYudmVyc2lvbiA9IGhhcm5lc3NfaW5mby5nZXRpbnQoJ1RocmVhZF9IYXJuZXNzX0luZm8nLCAnU1ZOJykKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1N0YXJ0aW5nIGhhcm5lc3Mgc2VydmljZScpCisgICAgICAgIGlmIHNlbGYuaGFybmVzczoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdIYXJuZXNzIGFscmVhZHkgc3RhcnRlZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24sIFBZVEhPTlBBVEg9JyVzXFxUaHJlYWRfSGFybmVzczslc1xcVGhpcmRQYXJ0eVxcaHNkay1weXRob25cXHNyYycKKyAgICAgICAgICAgICAgICAgICAgICAgJSAoc2V0dGluZ3MuSEFSTkVTU19IT01FLCBzZXR0aW5ncy5IQVJORVNTX0hPTUUpKQorCisgICAgICAgICAgICBzZWxmLmhhcm5lc3NfZmlsZSA9ICclc1xcaGFybmVzcy0lcy5sb2cnICUgKHNlbGYucmVzdWx0X2RpciwgdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5oYXJuZXNzX2ZpbGUsICd3JykgYXMgaGFybmVzc19vdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5oYXJuZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc2V0dGluZ3MuSEFSTkVTU19IT01FICsgJ1xcUHl0aG9uMjdcXHB5dGhvbi5leGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLkhBUk5FU1NfSE9NRSArICdcXFRocmVhZF9IYXJuZXNzXFxSdW4ucHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zZXR0aW5ncy5IQVJORVNTX0hPTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9aGFybmVzc19vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9aGFybmVzc19vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorCisgICAgICAgIGlmIHNlbGYudmVyc2lvbiA+PSBIQVJORVNTX1NWTl9WRVJTSU9OX1I0NDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYubWluaXdlYjoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdNaW5pd2ViIGFscmVhZHkgc3RhcnRlZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIG9wZW4oJyVzXFxtaW5pd2ViLSVzLmxvZycgJSAoc2VsZi5yZXN1bHRfZGlyLCB0aW1lLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSksICd3JykgYXMgbWluaXdlYl9vdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5taW5pd2ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc2V0dGluZ3MuSEFSTkVTU19IT01FICsgJ1xcTWluaVdlYlxcbWluaXdlYi5leGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1taW5pd2ViX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1taW5pd2ViX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zZXR0aW5ncy5IQVJORVNTX0hPTUUgKyAnXFxNaW5pV2ViJykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBsb2dnZXIuaW5mbygnU3RvcHBpbmcgaGFybmVzcyBzZXJ2aWNlJykKKworICAgICAgICBpZiBzZWxmLmhhcm5lc3M6CisgICAgICAgICAgICBfdHJ5X2tpbGwoc2VsZi5oYXJuZXNzKQorICAgICAgICAgICAgc2VsZi5oYXJuZXNzID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0hhcm5lc3Mgbm90IHN0YXJ0ZWQgeWV0JykKKworICAgICAgICBpZiBzZWxmLnZlcnNpb24gPj0gSEFSTkVTU19TVk5fVkVSU0lPTl9SNDQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLm1pbml3ZWI6CisgICAgICAgICAgICBfdHJ5X2tpbGwoc2VsZi5taW5pd2ViKQorICAgICAgICAgICAgc2VsZi5taW5pd2ViID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ01pbml3ZWIgbm90IHN0YXJ0ZWQgeWV0JykKKworICAgIGRlZiB0YWlsKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5oYXJuZXNzX2ZpbGUpIGFzIGhhcm5lc3Nfb3V0OgorICAgICAgICAgICAgaGFybmVzc19vdXQuc2VlaygtMTAwLCAyKQorICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oaGFybmVzc19vdXQucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oZWxwZXJzLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL2hlbHBlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0OGNiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9oZWxwZXJzLnB5CkBAIC0wLDAgKzEsNjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKKworCitjbGFzcyBIaXN0b3J5SGVscGVyKG9iamVjdCk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Jy4vaGlzdG9yeS5qc29uJyk6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRhdGEgPSBqc29uLmxvYWQob3BlbihmaWxlbmFtZSwgJ3InKSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmV4Y2VwdGlvbignZmlsZSBtYXkgbm90IGV4aXN0cycpCisgICAgICAgICAgICBzZWxmLmRhdGEgPSB7CisgICAgICAgICAgICAgICAgJ2dvbGRlbl9kZXZpY2VfYmxhY2tfbGlzdCc6IFtdCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLnNhdmUoKQorCisgICAgZGVmIHNhdmUoc2VsZik6CisgICAgICAgIGpzb24uZHVtcChzZWxmLmRhdGEsIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3cnKSwgaW5kZW50PTIpCisKKyAgICBkZWYgbWFya19iYWRfZ29sZGVuX2RldmljZShzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygnbWFyayBzZXJpYWwgcG9ydFslc10gYXMgYmFkJywgcG9ydCkKKyAgICAgICAgc2VsZi5kYXRhWydnb2xkZW5fZGV2aWNlX2JsYWNrX2xpc3QnXS5hcHBlbmQocG9ydCkKKyAgICAgICAgc2VsZi5zYXZlKCkKKworICAgIGRlZiBpc19iYWRfZ29sZGVuX2RldmljZShzZWxmLCBwb3J0KToKKyAgICAgICAgcmV0dXJuIHBvcnQgaW4gc2VsZi5kYXRhWydnb2xkZW5fZGV2aWNlX2JsYWNrX2xpc3QnXQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBqc29uLmR1bXBzKHNlbGYuZGF0YSwgaW5kZW50PTIpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3Mvb3Blbl90aHJlYWRfY29udHJvbGxlci5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9vcGVuX3RocmVhZF9jb250cm9sbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjQ3OWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3Mvb3Blbl90aHJlYWRfY29udHJvbGxlci5weQpAQCAtMCwwICsxLDM4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCBzZXJpYWwKKworZnJvbSAuIGltcG9ydCBzZXR0aW5ncworCitfX2FsbF9fID0gWydPcGVuVGhyZWFkQ29udHJvbGxlciddCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworbGluZXNlcHggPSByZS5jb21waWxlKHInXHJcbnxcbicpCisKK2NsYXNzIE9wZW5UaHJlYWRDb250cm9sbGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIlRoaXMgaXMgYW4gc2ltcGxlIHdyYXBwZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBvcGVudGhyZWFkIiIiCisgICAgX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgdmlld2luZyA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgbG9nPUZhbHNlKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlcgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwb3J0IChzdHIpOiBzZXJpYWwgcG9ydCdzIHBhdGggb3IgbmFtZSh3aW5kb3dzKQorICAgICAgICAiIiIKKyAgICAgICAgc3VwZXIoT3BlblRocmVhZENvbnRyb2xsZXIsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmhhbmRsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lcyA9IFtdCisgICAgICAgIHNlbGYuX2xvZyA9IGxvZworICAgICAgICBzZWxmLl9pc19uZXQgPSBGYWxzZQorICAgICAgICBzZWxmLl9pbml0KCkKKworICAgIGRlZiBfaW5pdChzZWxmKToKKyAgICAgICAgc2VsZi5fY29ubmVjdCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9sb2c6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi52aWV3aW5nID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuam9pbigpCisKKyAgICAgICAgc2VsZi5fY2xvc2UoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX2Nsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmhhbmRsZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gTm9uZQorCisgICAgZGVmIF9jb25uZWN0KHNlbGYpOgorICAgICAgICBsb2dnZXIuZGVidWcoJ015IHBvcnQgaXMgJXMnLCBzZWxmLnBvcnQpCisgICAgICAgIGlmIHNlbGYucG9ydC5zdGFydHN3aXRoKCdORVQnKToKKyAgICAgICAgICAgIHBvcnRudW0gPSBzZXR0aW5ncy5TRVIyTkVUX1BPUlRCQVNFICsgaW50KHNlbGYucG9ydC5zcGxpdCgnTkVUJylbMV0pCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ015IHBvcnQgbnVtIGlzICVkJywgcG9ydG51bSkKKyAgICAgICAgICAgIGFkZHJlc3MgPSAoc2V0dGluZ3MuU0VSMk5FVF9IT1NUTkFNRSwgcG9ydG51bSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MpCisgICAgICAgICAgICBzZWxmLmhhbmRsZS5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc2VsZi5faXNfbmV0ID0gVHJ1ZQorICAgICAgICBlbGlmICc6JyBpbiBzZWxmLnBvcnQ6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5wb3J0LnNwbGl0KCc6JykKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICBzZWxmLl9pc19uZXQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IHNlcmlhbC5TZXJpYWwoc2VsZi5wb3J0LCAxMTUyMDAsIHRpbWVvdXQ9MCwgeG9ueG9mZj1UcnVlKQorICAgICAgICAgICAgc2VsZi5faXNfbmV0ID0gRmFsc2UKKworICAgIGRlZiBfcmVhZChzZWxmLCBzaXplPTUxMik6CisgICAgICAgIGlmIHNlbGYuX2lzX25ldDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZS5yZWN2KHNpemUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGUucmVhZChzaXplKQorCisgICAgZGVmIF93cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgc2VsZi5faXNfbmV0OgorICAgICAgICAgICAgc2VsZi5oYW5kbGUuc2VuZGFsbChkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGUud3JpdGUoZGF0YSkKKworICAgIGRlZiBfZXhwZWN0KHNlbGYsIGV4cGVjdGVkLCB0aW1lcz01MCk6CisgICAgICAgICIiIkZpbmQgdGhlIGBleHBlY3RlZGAgbGluZSB3aXRoaW4gYHRpbWVzYCB0cmlhbHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGV4cGVjdGVkICAgIHN0cjogdGhlIGV4cGVjdGVkIHN0cmluZworICAgICAgICAgICAgdGltZXMgICAgICAgaW50OiBudW1iZXIgb2YgdHJpYWxzCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoJ1slc10gRXhwZWN0aW5nIFslc10nLCBzZWxmLnBvcnQsIGV4cGVjdGVkKQorICAgICAgICByZXRyeV90aW1lcyA9IDEwCisgICAgICAgIHdoaWxlIHRpbWVzOgorICAgICAgICAgICAgaWYgbm90IHJldHJ5X3RpbWVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIHJldHJ5X3RpbWVzIC09IDEKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICAgICAgdGltZXMgLT0gMQorCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignZmFpbGVkIHRvIGZpbmQgZXhwZWN0ZWQgc3RyaW5nWyVzXScgJSBleHBlY3RlZCkKKworICAgIGRlZiBfcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIlJlYWQgZXhhY3RseSBvbmUgbGluZSBmcm9tIHRoZSBkZXZpY2UsIG5vbmJsb2NraW5nLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBOb25lIG9uIG5vIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihzZWxmLmxpbmVzKSA+IDE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5wb3AoMCkKKworICAgICAgICB0YWlsID0gJycKKyAgICAgICAgaWYgbGVuKHNlbGYubGluZXMpOgorICAgICAgICAgICAgdGFpbCA9IHNlbGYubGluZXMucG9wKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWlsICs9IHNlbGYuX3JlYWQoKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ05vIG5ldyBkYXRhJykKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgIHNlbGYubGluZXMgKz0gbGluZXNlcHguc3BsaXQodGFpbCkKKyAgICAgICAgaWYgbGVuKHNlbGYubGluZXMpID4gMToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxpbmVzLnBvcCgwKQorCisgICAgZGVmIF9zZW5kbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiU2VuZCBleGFjdGx5IG9uZSBsaW5lIHRvIHRoZSBkZXZpY2UKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbGluZSBzdHI6IGRhdGEgc2VuZCB0byBkZXZpY2UKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubGluZXMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZWFkKCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ05vdGhpbmcgY2xlYXJlZCcpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdzZW5kaW5nIFslc10nLCBsaW5lKQorICAgICAgICBzZWxmLl93cml0ZShsaW5lICsgJ1xyXG4nKQorCisgICAgICAgICMgd2FpdCBmb3Igd3JpdGUgdG8gY29tcGxldGUKKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisKKyAgICBkZWYgX3JlcShzZWxmLCByZXEpOgorICAgICAgICAiIiJTZW5kIGNvbW1hbmQgYW5kIHdhaXQgZm9yIHJlc3BvbnNlLgorCisgICAgICAgIFRoZSBjb21tYW5kIHdpbGwgYmUgcmVwZWF0ZWQgMyB0aW1lcyBhdCBtb3N0IGluIGNhc2UgZGF0YSBsb3NzIG9mIHNlcmlhbCBwb3J0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXEgKHN0cik6IENvbW1hbmQgdG8gc2VuZCwgcGxlYXNlIGRvIG5vdCBpbmNsdWRlIG5ldyBsaW5lIGluIHRoZSBlbmQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFtzdHJdOiBUaGUgb3V0cHV0IGxpbmVzCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoJ0RVVD4gJXMnLCByZXEpCisgICAgICAgIHNlbGYuX2xvZyBhbmQgc2VsZi5wYXVzZSgpCisgICAgICAgIHRpbWVzID0gMworICAgICAgICByZXMgPSBOb25lCisKKyAgICAgICAgd2hpbGUgdGltZXM6CisgICAgICAgICAgICB0aW1lcyA9IHRpbWVzIC0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRsaW5lKHJlcSkKKyAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3QocmVxKQorCisgICAgICAgICAgICAgICAgbGluZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXMgPSBbXQorCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdHb3QgbGluZSAlcycsIGxpbmUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhaWxlZCB0byBzZW5kIGNvbW1hbmQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX2luaXQoKQorCisgICAgICAgIHNlbGYuX2xvZyBhbmQgc2VsZi5yZXN1bWUoKQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiJUaHJlYWRpbmcgY2FsbGJhY2siIiIKKworICAgICAgICBzZWxmLnZpZXdpbmcgPSBUcnVlCisgICAgICAgIHdoaWxlIHNlbGYudmlld2luZyBhbmQgc2VsZi5fbG9jay5hY3F1aXJlKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRsaW5lKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGxpbmUpCisgICAgICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwKQorCisgICAgZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAgICAgICIiImNoZWNrIGlmIG9wZW50aHJlYWQgaXMgc3RhcnRlZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBib29sOiBzdGFydGVkIG9yIG5vdAorICAgICAgICAiIiIKKyAgICAgICAgc3RhdGUgPSBzZWxmLl9yZXEoJ3N0YXRlJylbMF0KKyAgICAgICAgcmV0dXJuIHN0YXRlICE9ICdkaXNhYmxlZCcKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIiU3RhcnQgb3BlbnRocmVhZAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxKCdpZmNvbmZpZyB1cCcpCisgICAgICAgIHNlbGYuX3JlcSgndGhyZWFkIHN0YXJ0JykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIG9wZW50aHJlYWQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcSgndGhyZWFkIHN0b3AnKQorICAgICAgICBzZWxmLl9yZXEoJ2lmY29uZmlnIGRvd24nKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICAiIiJSZXNldCBvcGVudGhyZWFkIGRldmljZSwgbm90IGVxdWl2YWxlbnQgdG8gc3RvcCBhbmQgc3RhcnQKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnRFVUPiByZXNldCcpCisgICAgICAgIHNlbGYuX2xvZyBhbmQgc2VsZi5wYXVzZSgpCisgICAgICAgIHNlbGYuX3NlbmRsaW5lKCdyZXNldCcpCisgICAgICAgIHNlbGYuX3JlYWQoKQorICAgICAgICBzZWxmLl9sb2cgYW5kIHNlbGYucmVzdW1lKCkKKworCisgICAgZGVmIHJlc3VtZShzZWxmKToKKyAgICAgICAgIiIiU3RhcnQgZHVtcGluZyBsb2dzIiIiCisgICAgICAgIHNlbGYuX2xvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgcGF1c2Uoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IGR1bXBpbmcgbG9ncyIiIgorICAgICAgICBzZWxmLl9sb2NrLmFjcXVpcmUoKQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXR3b3JrbmFtZShzZWxmKToKKyAgICAgICAgIiIic3RyOiBUaHJlYWQgbmV0d29yayBuYW1lLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCduZXR3b3JrbmFtZScpWzBdCisKKyAgICBAbmV0d29ya25hbWUuc2V0dGVyCisgICAgZGVmIG5ldHdvcmtuYW1lKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fcmVxKCduZXR3b3JrbmFtZSAlcycgJSB2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtb2RlKHNlbGYpOgorICAgICAgICAiIiJzdHI6IFRocmVhZCBtb2RlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCdtb2RlJylbMF0KKworICAgIEBtb2RlLnNldHRlcgorICAgIGRlZiBtb2RlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fcmVxKCdtb2RlICVzJyAlIHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1hYyhzZWxmKToKKyAgICAgICAgIiIic3RyOiBNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXEoJ2V4dGFkZHInKVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZHJzKHNlbGYpOgorICAgICAgICAiIiJbc3RyXTogSVAgYWRkcmVzc2VzIG9mIHRoZSBkZXZpY2VzIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXEoJ2lwYWRkcicpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2hvcnRfYWRkcihzZWxmKToKKyAgICAgICAgIiIic3RyOiBTaG9ydCBhZGRyZXNzIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXEoJ3Jsb2MxNicpWzBdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2hhbm5lbChzZWxmKToKKyAgICAgICAgIiIiaW50OiBDaGFubmVsIG51bWJlciBvZiBvcGVudGhyZWFkIiIiCisgICAgICAgIHJldHVybiBpbnQoc2VsZi5fcmVxKCdjaGFubmVsJylbMF0pCisKKyAgICBAY2hhbm5lbC5zZXR0ZXIKKyAgICBkZWYgY2hhbm5lbChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3JlcSgnY2hhbm5lbCAlZCcgJSB2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYW5pZChzZWxmKToKKyAgICAgICAgIiIic3RyOiBUaHJlYWQgcGFuaWQiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcSgncGFuaWQnKVswXQorCisgICAgQHBhbmlkLnNldHRlcgorICAgIGRlZiBwYW5pZChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3JlcSgncGFuaWQgJXMnICUgdmFsdWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZXh0cGFuaWQoc2VsZik6CisgICAgICAgICIiInN0cjogVGhyZWFkIGV4dHBhbmlkIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXEoJ2V4dHBhbmlkJylbMF0KKworICAgIEBleHRwYW5pZC5zZXR0ZXIKKyAgICBkZWYgZXh0cGFuaWQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXEoJ2V4dHBhbmlkICVzJyAlIHZhbHVlKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoaWxkX3RpbWVvdXQoc2VsZik6CisgICAgICAgICIiInN0cjogVGhyZWFkIGNoaWxkIHRpbWVvdXQgaW4gc2Vjb25kcyIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxKCdjaGlsZHRpbWVvdXQnKVswXQorCisgICAgQGNoaWxkX3RpbWVvdXQuc2V0dGVyCisgICAgZGVmIGNoaWxkX3RpbWVvdXQoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXEoJ2NoaWxkdGltZW91dCAlZCcgJSB2YWx1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgICAgICAiIiJzdHI6IE9wZW4gdGhyZWFkIHZlcnNpb24iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcSgndmVyc2lvbicpWzBdCisKKyAgICBkZWYgYWRkX3ByZWZpeChzZWxmLCBwcmVmaXgsIGZsYWdzLCBwcmYpOgorICAgICAgICAiIiJBZGQgbmV0d29yayBwcmVmaXguCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHByZWZpeCAoc3RyKTogbmV0d29yayBwcmVmaXguCisgICAgICAgICAgICBmbGFncyAoc3RyKTogbmV0d29yayBwcmVmaXggZmxhZ3MsIHBsZWFzZSByZWZlciB0aHJlYWQgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscworICAgICAgICAgICAgcHJmIChzdHIpOiBuZXR3b3JrIHByZiwgcGxlYXNlIHJlZmVyIHRocmVhZCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yZXEoJ3ByZWZpeCBhZGQgJXMgJXMgJXMnICUgKHByZWZpeCwgZmxhZ3MsIHByZikpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VsZi5fcmVxKCduZXRkYXRhcmVnaXN0ZXInKQorCisgICAgZGVmIHJlbW92ZV9wcmVmaXgoc2VsZiwgcHJlZml4KToKKyAgICAgICAgIiIiUmVtb3ZlIG5ldHdvcmsgcHJlZml4LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxKCdwcmVmaXggcmVtb3ZlICVzJyAlIHByZWZpeCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBzZWxmLl9yZXEoJ25ldGRhdGFyZWdpc3RlcicpCisKKyAgICBkZWYgZW5hYmxlX2JsYWNrbGlzdChzZWxmKToKKyAgICAgICAgIiIiRW5hYmxlIGJsYWNrbGlzdCBmZWF0dXJlIiIiCisgICAgICAgIHNlbGYuX3JlcSgnYmxhY2tsaXN0IGVuYWJsZScpCisKKyAgICBkZWYgYWRkX2JsYWNrbGlzdChzZWxmLCBtYWMpOgorICAgICAgICAiIiJBZGQgYSBtYWMgYWRkcmVzcyB0byBibGFja2xpc3QiIiIKKyAgICAgICAgc2VsZi5fcmVxKCdibGFja2xpc3QgYWRkICVzJyAlIG1hYykKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9wZHVfY29udHJvbGxlci5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9wZHVfY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTUwY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3BkdV9jb250cm9sbGVyLnB5CkBAIC0wLDAgKzEsMTkyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHRlbG5ldGxpYgoraW1wb3J0IHRpbWUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgUGR1Q29udHJvbGxlcihvYmplY3QpOgorCisgICAgZGVmIG9wZW4oc2VsZiwgKipwYXJhbXMpOgorICAgICAgICAiIiJPcGVuIFBEVSBjb250cm9sbGVyIGNvbm5lY3Rpb24iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlYm9vdChzZWxmLCAqKnBhcmFtcyk6CisgICAgICAgICIiIlJlYm9vdCBhbiBvdXRsZXQgb3IgYSBib2FyZCBwYXNzZWQgYXMgcGFyYW1zIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgUERVIGNvbnRyb2xsZXIgY29ubmVjdGlvbiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgRHVtbXlQZHVDb250cm9sbGVyKFBkdUNvbnRyb2xsZXIpOgorICAgICIiIkR1bW15IGltcGxlbWVudGF0aW9uIHdoaWNoIG9ubHkgc2F5cyB0aGF0IFBEVSBjb250cm9sbGVyIGlzIG5vdCBjb25uZWN0ZWQiIiIKKworICAgIGRlZiBvcGVuKHNlbGYsICoqcGFyYW1zKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJlYm9vdChzZWxmLCAqKnBhcmFtcyk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdObyBQRFUgY29udHJvbGxlciBjb25uZWN0ZWQuJykKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEFwY1BkdUNvbnRyb2xsZXIoUGR1Q29udHJvbGxlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudG4gPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX2luaXQoc2VsZik6CisgICAgICAgICIiIkluaXRpYWxpemUgdGhlIHRlbG5ldCBjb25uZWN0aW9uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnRuID0gdGVsbmV0bGliLlRlbG5ldChzZWxmLmlwLCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYudG4ucmVhZF91bnRpbCgnVXNlciBOYW1lJykKKyAgICAgICAgc2VsZi50bi53cml0ZSgnYXBjXHJcbicpCisgICAgICAgIHNlbGYudG4ucmVhZF91bnRpbCgnUGFzc3dvcmQnKQorICAgICAgICBzZWxmLnRuLndyaXRlKCdhcGNcclxuJykKKyAgICAgICAgc2VsZi51bnRpbF9kb25lKCkKKworICAgIGRlZiBvcGVuKHNlbGYsICoqcGFyYW1zKToKKyAgICAgICAgIiIiT3BlbiB0ZWxuZXQgY29ubmVjdGlvbgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBwYXJhbXMgKGRpY3QpLCBtdXN0IGNvbnRhaW4gdHdvIHBhcmFtZXRlcnMgImlwIiAtIGlwIGFkZHJlc3Mgb3IgaG9zdG5hbWUgYW5kICJwb3J0IiAtIHBvcnQgbnVtYmVyCisKKyAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICAgIHBhcmFtcyA9IHsncG9ydCc6IDIzLCAnaXAnOiAnbG9jYWxob3N0J30KKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5pbmZvKCdvcGVuaW5nIHRlbG5ldCcpCisgICAgICAgIHNlbGYucG9ydCA9IHBhcmFtc1sncG9ydCddCisgICAgICAgIHNlbGYuaXAgPSBwYXJhbXNbJ2lwJ10KKyAgICAgICAgc2VsZi50biA9IE5vbmUKKyAgICAgICAgc2VsZi5faW5pdCgpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRlbG5ldCBjb25uZWN0aW9uIiIiCisgICAgICAgIGxvZ2dlci5pbmZvKCdjbG9zaW5nIHRlbG5ldCcpCisgICAgICAgIGlmIHNlbGYudG46CisgICAgICAgICAgICBzZWxmLnRuLmNsb3NlKCkKKworICAgIGRlZiB1bnRpbF9kb25lKHNlbGYpOgorICAgICAgICAiIiJXYWl0IHVudGlsIHRoZSBwcm9tcHQgZW5jb3VudGVyZWQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudW50aWwocidePicpCisKKyAgICBkZWYgdW50aWwoc2VsZiwgcmVnZXgpOgorICAgICAgICAiIiJXYWl0IHVudGlsIHRoZSByZWdleCBlbmNvdW50ZXJlZAorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCd3YWl0aW5nIGZvciAlcycsIHJlZ2V4KQorICAgICAgICByID0gcmUuY29tcGlsZShyZWdleCwgcmUuTSkKKyAgICAgICAgc2VsZi50bi5leHBlY3QoW3JdKQorCisgICAgZGVmIHJlYm9vdChzZWxmLCAqKnBhcmFtcyk6CisgICAgICAgICIiIlJlYm9vdCBvdXRsZXQKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcGFyYW1zIChkaWN0KSwgbXVzdCBjb250YWluIHBhcmFtZXRlciAib3V0bGV0IiAtIG91dGxldCBudW1iZXIKKworICAgICAgICBFeGFtcGxlOgorICAgICAgICAgICAgcGFyYW1zID0geydvdXRsZXQnOiAxfQorICAgICAgICAiIiIKKyAgICAgICAgb3V0bGV0ID0gcGFyYW1zWydvdXRsZXQnXQorCisgICAgICAgICMgbWFpbiBtZW51CisgICAgICAgIHNlbGYudG4ud3JpdGUoJ1x4MWJcclxuJykKKyAgICAgICAgc2VsZi51bnRpbF9kb25lKCkKKyAgICAgICAgIyBEZXZpY2UgTWFuYWdlcgorICAgICAgICBzZWxmLnRuLndyaXRlKCcxXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisgICAgICAgICMgT3V0bGV0IE1hbmFnZW1lbnQKKyAgICAgICAgc2VsZi50bi53cml0ZSgnMlxyXG4nKQorICAgICAgICBzZWxmLnVudGlsX2RvbmUoKQorICAgICAgICAjIE91dGxldCBDb250cm9sCisgICAgICAgIHNlbGYudG4ud3JpdGUoJzFcclxuJykKKyAgICAgICAgc2VsZi51bnRpbF9kb25lKCkKKyAgICAgICAgIyBTZWxlY3Qgb3V0bGV0CisgICAgICAgIHNlbGYudG4ud3JpdGUoJyVkXHJcbicgJSBvdXRsZXQpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisgICAgICAgICMgQ29udHJvbAorICAgICAgICBzZWxmLnRuLndyaXRlKCcxXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisgICAgICAgICMgb2ZmCisgICAgICAgIHNlbGYudG4ud3JpdGUoJzJcclxuJykKKyAgICAgICAgc2VsZi51bnRpbCgndG8gY2FuY2VsJykKKyAgICAgICAgc2VsZi50bi53cml0ZSgnWUVTXHJcbicpCisgICAgICAgIHNlbGYudW50aWwoJ3RvIGNvbnRpbnVlJykKKyAgICAgICAgc2VsZi50bi53cml0ZSgnXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisKKyAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAjIG9uCisgICAgICAgIHNlbGYudG4ud3JpdGUoJzFcclxuJykKKyAgICAgICAgc2VsZi51bnRpbCgndG8gY2FuY2VsJykKKyAgICAgICAgc2VsZi50bi53cml0ZSgnWUVTXHJcbicpCisgICAgICAgIHNlbGYudW50aWwoJ3RvIGNvbnRpbnVlJykKKyAgICAgICAgc2VsZi50bi53cml0ZSgnXHJcbicpCisgICAgICAgIHNlbGYudW50aWxfZG9uZSgpCisKKworY2xhc3MgTm9yZGljQm9hcmRQZHVDb250cm9sbGVyKFBkdUNvbnRyb2xsZXIpOgorCisgICAgZGVmIG9wZW4oc2VsZiwgKipwYXJhbXMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3Bpbl9yZXNldChzZWxmLCBzZXJpYWxfbnVtYmVyKToKKyAgICAgICAgb3Muc3lzdGVtKCducmZqcHJvZyAtZiBOUkY1MiAtLXNuciB7fSAtcCcuZm9ybWF0KHNlcmlhbF9udW1iZXIpKQorCisgICAgZGVmIHJlYm9vdChzZWxmLCAqKnBhcmFtcyk6CisgICAgICAgIGJvYXJkc19zZXJpYWxfbnVtYmVycyA9IHBhcmFtc1snYm9hcmRzX3NlcmlhbF9udW1iZXJzJ10KKworICAgICAgICBmb3Igc2VyaWFsX251bWJlciBpbiBib2FyZHNfc2VyaWFsX251bWJlcnM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnUmVzZXR0aW5nIGJvYXJkIHdpdGggdGhlIHNlcmlhbCBudW1iZXI6ICVzJywgc2VyaWFsX251bWJlcikKKyAgICAgICAgICAgIHNlbGYuX3Bpbl9yZXNldChzZXJpYWxfbnVtYmVyKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIE1hbnVhbFBkdUNvbnRyb2xsZXIoUGR1Q29udHJvbGxlcik6CisKKyAgICBkZWYgb3BlbihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiByZWJvb3Qoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICByYXdfaW5wdXQoJ1Jlc2V0IGFsbCBkZXZpY2VzIGFuZCBwcmVzcyBlbnRlciB0byBjb250aW51ZS4uJykKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3BkdV9jb250cm9sbGVyX2ZhY3RvcnkucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3MvcGR1X2NvbnRyb2xsZXJfZmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg1YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3BkdV9jb250cm9sbGVyX2ZhY3RvcnkucHkKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworZnJvbSAuIGltcG9ydCBwZHVfY29udHJvbGxlcgorCisKK2NsYXNzIFBkdUNvbnRyb2xsZXJGYWN0b3J5KG9iamVjdCk6CisgICAgIiIiRmFjdG9yeSB0aGF0IGNyZWF0ZXMgUERVIGNvbnRyb2xsZXJzLiIiIgorCisgICAgZGVmIGNyZWF0ZV9wZHVfY29udHJvbGxlcihzZWxmLCBfdHlwZSk6CisgICAgICAgIGlmIF90eXBlID09ICdOT1JESUNfQk9BUkRfUERVX0NPTlRPTExFUic6CisgICAgICAgICAgICByZXR1cm4gcGR1X2NvbnRyb2xsZXIuTm9yZGljQm9hcmRQZHVDb250cm9sbGVyKCkKKyAgICAgICAgZWxpZiBfdHlwZSA9PSAnQVBDX1BEVV9DT05UUk9MTEVSJzoKKyAgICAgICAgICAgIHJldHVybiBwZHVfY29udHJvbGxlci5BcGNQZHVDb250cm9sbGVyKCkKKyAgICAgICAgZWxpZiBfdHlwZSA9PSAnTUFOVUFMX1BEVV9DT05UUk9MTEVSJzoKKyAgICAgICAgICAgIHJldHVybiBwZHVfY29udHJvbGxlci5NYW51YWxQZHVDb250cm9sbGVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwZHVfY29udHJvbGxlci5EdW1teVBkdUNvbnRyb2xsZXIoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2F1dG90aHJlYWRoYXJuZXNzL3J1bm5lci5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0MTdlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9ydW5uZXIucHkKQEAgLTAsMCArMSwzMzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLm9wZW5fdGhyZWFkX2NvbnRyb2xsZXIgaW1wb3J0IE9wZW5UaHJlYWRDb250cm9sbGVyCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzIGltcG9ydCBzZXR0aW5ncworCitsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTykKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorIiIiTG9nZ2VyOiBUaGUgZ2xvYmFsIGxvZ2dlciIiIgorCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorCitSRVNVTUVfU0NSSVBUX1BBVEggPSAnJWFwcGRhdGElXFxNaWNyb3NvZnRcXFdpbmRvd3NcXFN0YXJ0IE1lbnVcXFByb2dyYW1zXFwnIFwKKyAgICAgICAgICAgICAgICAgICAgICdTdGFydHVwXFxjb250aW51ZV9oYXJuZXNzLmJhdCcKKworY2xhc3MgU2ltcGxlVGVzdFJlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgYXV0b19yZWJvb3RfYXJncz1Ob25lKToKKyAgICAgICAgIiIiUmVjb3JkIHRlc3QgcmVzdWx0cyBpbiBqc29uIGZpbGUKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcGF0aCAoc3RyKTogRmlsZSBwYXRoIHRvIHJlY29yZCB0aGUgcmVzdWx0cworICAgICAgICAgICAgYXV0b19yZWJvb3QgKGJvb2wpOiBXaGV0aGVyIHJlYm9vdCB3aGVuIGhhcm5lc3MgZGllCisgICAgICAgICIiIgorICAgICAgICBzdXBlcihTaW1wbGVUZXN0UmVzdWx0LCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5hdXRvX3JlYm9vdF9hcmdzID0gYXV0b19yZWJvb3RfYXJncworICAgICAgICBzZWxmLnJlc3VsdCA9IGpzb24ubG9hZChvcGVuKHNlbGYucGF0aCwgJ3InKSkKKyAgICAgICAgc2VsZi5sb2dfaGFuZGxlciA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGFydGVkID0gTm9uZQorICAgICAgICBsb2dnZXIuaW5mbygnSW5pdGlhbCBzdGF0ZSBpcyAlcycsIGpzb24uZHVtcHMoc2VsZi5yZXN1bHQsIGluZGVudD0yKSkKKworICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiVzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JywgdGVzdC5fX2NsYXNzX18uX19uYW1lX18pCisKKyAgICAgICAgIyBjcmVhdGUgc3RhcnQgdXAgc2NyaXB0IGlmIGF1dG8gcmVib290IGVuYWJsZWQKKyAgICAgICAgaWYgc2VsZi5hdXRvX3JlYm9vdF9hcmdzOgorICAgICAgICAgICAgdGVzdC5hdXRvX3JlYm9vdCA9IFRydWUKKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZWNobyAlcyA+ICIlcyInCisgICAgICAgICAgICAgICAgICAgICAgJSAoJyAnLmpvaW4oc2VsZi5hdXRvX3JlYm9vdF9hcmdzICsgWyctYycsIHRlc3QuX19jbGFzc19fLl9fbmFtZV9fXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVU1FX1NDUklQVF9QQVRIKSkKKworICAgICAgICAjIHJlY29yZCBzdGFydCB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5zdGFydGVkID0gdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMnKQorCisgICAgICAgIG9zLnN5c3RlbSgnbWtkaXIgJXMnICUgdGVzdC5yZXN1bHRfZGlyKQorICAgICAgICBzZWxmLmxvZ19oYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcignJXNcXGF1dG8tJXMubG9nJyAlICh0ZXN0LnJlc3VsdF9kaXIsIHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycpKSkKKyAgICAgICAgc2VsZi5sb2dfaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBzZWxmLmxvZ19oYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycpKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihzZWxmLmxvZ19oYW5kbGVyKQorCisgICAgZGVmIGFkZF9yZXN1bHQoc2VsZiwgdGVzdCwgcGFzc2VkLCBlcnJvcj1Ob25lKToKKyAgICAgICAgIiIiUmVjb3JkIHRlc3QgcmVzdWx0IGludG8ganNvbiBmaWxlCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRlc3QgKFRlc3RDYXNlKTogVGhlIHRlc3QganVzdCBydW4KKyAgICAgICAgICAgIHBhc3NlZCAoYm9vbCk6IFdoZXRoZXIgdGhlIGNhc2UgaXMgcGFzc2VkCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJlc3VsdFt1bmljb2RlKHRlc3QuX19jbGFzc19fLl9fbmFtZV9fKV0gPSB7CisgICAgICAgICAgICAnc3RhcnRlZCc6IHNlbGYuc3RhcnRlZCwKKyAgICAgICAgICAgICdzdG9wcGVkJzogdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVMnKSwKKyAgICAgICAgICAgICdwYXNzZWQnOiBwYXNzZWQsCisgICAgICAgICAgICAnZXJyb3InOiBlcnJvcgorICAgICAgICB9CisgICAgICAgIGlmIHNlbGYuYXV0b19yZWJvb3RfYXJnczoKKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZGVsICIlcyInICUgUkVTVU1FX1NDUklQVF9QQVRIKQorCisgICAgICAgIGpzb24uZHVtcChPcmRlcmVkRGljdChzb3J0ZWQoc2VsZi5yZXN1bHQuaXRlbXMoKSwga2V5PWxhbWJkYSB0OiB0WzBdKSksCisgICAgICAgICAgICAgICAgICBvcGVuKHNlbGYucGF0aCwgJ3cnKSwgaW5kZW50PTIpCisKKyAgICAgICAgIyBzYXZlIGxvZ3MKKyAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5sb2dfaGFuZGxlcikKKyAgICAgICAgc2VsZi5sb2dfaGFuZGxlci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9nX2hhbmRsZXIgPSBOb25lCisgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICAjIGNsb3NlIGV4cGxvcmVycworICAgICAgICBvcy5zeXN0ZW0oJ3Rhc2traWxsIC9mIC9pbSBleHBsb3Jlci5leGUgJiYgc3RhcnQgZXhwbG9yZXIuZXhlJykKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICBsb2dnZXIuaW5mbygnY2FzZVslc10gcGFzcycsIHRlc3QuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzdXBlcihTaW1wbGVUZXN0UmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKHRlc3QpCisgICAgICAgIHNlbGYuYWRkX3Jlc3VsdCh0ZXN0LCBUcnVlKQorCisgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Nhc2VbJXNdIGZhaWwnLCB0ZXN0Ll9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc3VwZXIoU2ltcGxlVGVzdFJlc3VsdCwgc2VsZikuYWRkRmFpbHVyZSh0ZXN0LCBlcnIpCisgICAgICAgIHNlbGYuYWRkX3Jlc3VsdCh0ZXN0LCBGYWxzZSkKKworICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ2Nhc2VbJXNdIGVycm9yJywgdGVzdC5fX2NsYXNzX18uX19uYW1lX18sIGV4Y19pbmZvPWVycikKKworICAgICAgICBpZiBlcnIgYW5kIGVyclswXSBpcyBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgaWYgc2VsZi5hdXRvX3JlYm9vdF9hcmdzOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdyZWJvb3RpbmcuLicpCisgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCdzaHV0ZG93biAvciAvdCAxJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2V4aXRpbmcuLicpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHN1cGVyKFNpbXBsZVRlc3RSZXN1bHQsIHNlbGYpLmFkZEVycm9yKHRlc3QsIGVycikKKyAgICAgICAgc2VsZi5hZGRfcmVzdWx0KHRlc3QsIE5vbmUsIHN0cihlcnJbMV0pKQorCitkZWYgbGlzdF9kZXZpY2VzKG5hbWVzPU5vbmUsIGNvbnRpbnVlX2Zyb209Tm9uZSwgKiprd2FyZ3MpOgorICAgICIiIkxpc3QgZGV2aWNlcyBpbiBzZXR0aW5ncyBmaWxlIGFuZCBwcmludCB2ZXJzaW9ucyIiIgorCisgICAgaWYgbm90IG5hbWVzOgorICAgICAgICBuYW1lcyA9IFtkZXZpY2UgZm9yIGRldmljZSwgX3R5cGUgaW4gc2V0dGluZ3MuR09MREVOX0RFVklDRVMgaWYgX3R5cGUgPT0gJ09wZW5UaHJlYWQnXQorCisgICAgaWYgY29udGludWVfZnJvbToKKyAgICAgICAgY29udGludWVfZnJvbSA9IG5hbWVzLmluZGV4KGNvbnRpbnVlX2Zyb20pCisgICAgZWxzZToKKyAgICAgICAgY29udGludWVfZnJvbSA9IDAKKworICAgIGZvciBwb3J0IGluIG5hbWVzW2NvbnRpbnVlX2Zyb206XToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBPcGVuVGhyZWFkQ29udHJvbGxlcihwb3J0KSBhcyBvdGM6CisgICAgICAgICAgICAgICAgcHJpbnQoJyVzOiAlcycgJSAocG9ydCwgb3RjLnZlcnNpb24pKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdmYWlsZWQgdG8gZ2V0IHZlcnNpb24gb2YgJXMnICUgcG9ydCkKKworZGVmIGRpc2NvdmVyKG5hbWVzPU5vbmUsIHBhdHRlcm49WycqLnB5J10sIHNraXA9J2VmcCcsIGRyeV9ydW49RmFsc2UsIGJsYWNrbGlzdD1Ob25lLCBuYW1lX2dyZXBzPU5vbmUsCisgICAgICAgICAgICAgbWFudWFsX3Jlc2V0PUZhbHNlLCBkZWxldGVfaGlzdG9yeT1GYWxzZSwgbWF4X2RldmljZXM9MCwKKyAgICAgICAgICAgICBjb250aW51ZV9mcm9tPU5vbmUsIHJlc3VsdF9maWxlPScuL3Jlc3VsdC5qc29uJywgYXV0b19yZWJvb3Q9RmFsc2UpOgorICAgICIiIkRpc2NvdmVyIGFsbCB0ZXN0IGNhc2VzIGFuZCBza2lwIHRob3NlIHBhc3NlZAorCisgICAgQXJnczoKKyAgICAgICAgcGF0dGVybiAoc3RyKTogUGF0dGVybiB0byBtYXRjaCBjYXNlIG1vZHVsZXMsIHJlZmVyIHB5dGhvbidzIHVuaXR0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscworICAgICAgICBza2lwIChzdHIpOiB0eXBlcyBjYXNlcyB0byBza2lwCisgICAgIiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNldHRpbmdzLk9VVFBVVF9QQVRIKToKKyAgICAgICAgb3MubWtkaXIoc2V0dGluZ3MuT1VUUFVUX1BBVEgpCisKKyAgICBpZiBkZWxldGVfaGlzdG9yeToKKyAgICAgICAgb3Muc3lzdGVtKCdkZWwgaGlzdG9yeS5qc29uJykKKworICAgIGlmIGJsYWNrbGlzdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhjbHVkZXMgPSBbbGluZS5zdHJpcCgnXG4nKSBmb3IgbGluZSBpbiBvcGVuKGJsYWNrbGlzdCwgJ3InKS5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnIycpXQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYWlsZWQgdG8gb3BlbiB0ZXN0IGNhc2UgYmxhY2sgbGlzdCBmaWxlJykKKyAgICAgICAgICAgIHJhaXNlCisgICAgZWxzZToKKyAgICAgICAgZXhjbHVkZXMgPSBbXQorCisgICAgbG9nID0gTm9uZQorICAgIGlmIG9zLnBhdGguaXNmaWxlKHJlc3VsdF9maWxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nID0ganNvbi5sb2FkKG9wZW4ocmVzdWx0X2ZpbGUsICdyJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhaWxlZCB0byBvcGVuIHJlc3VsdCBmaWxlJykKKworICAgIGlmIG5vdCBsb2c6CisgICAgICAgIGxvZyA9IHt9CisgICAgICAgIGpzb24uZHVtcChsb2csIG9wZW4ocmVzdWx0X2ZpbGUsICd3JyksIGluZGVudD0yKQorCisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGRpc2NvdmVyZWQgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5kaXNjb3ZlcignY2FzZXMnLCBwYXR0ZXJuKQorCisgICAgaWYgbmFtZXMgYW5kIGNvbnRpbnVlX2Zyb206CisgICAgICAgIG5hbWVzID0gbmFtZXNbbmFtZXMuaW5kZXgoY29udGludWVfZnJvbSk6XQorCisgICAgZm9yIHMxIGluIGRpc2NvdmVyZWQ6CisgICAgICAgIGZvciBzMiBpbiBzMToKKyAgICAgICAgICAgIGZvciBjYXNlIGluIHMyOgorICAgICAgICAgICAgICAgIGlmIGNhc2UuX19jbGFzc19fIGlzIEhhcm5lc3NDYXNlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNhc2VfbmFtZSA9IHVuaWNvZGUoY2FzZS5fX2NsYXNzX18uX19uYW1lX18pCisKKyAgICAgICAgICAgICAgICAjIGdyZXAgbmFtZQorICAgICAgICAgICAgICAgIGlmIG5hbWVfZ3JlcHMgYW5kIG5vdCBhbnkoZm5tYXRjaC5mbm1hdGNoKGNhc2VfbmFtZSwgbmFtZV9ncmVwKSBmb3IgbmFtZV9ncmVwIGluIG5hbWVfZ3JlcHMpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnY2FzZVslc10gc2tpcHBlZCBieSBuYW1lIGdyZXBzJywgY2FzZV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyB3aGl0ZWxpc3QKKyAgICAgICAgICAgICAgICBpZiBsZW4obmFtZXMpIGFuZCBjYXNlX25hbWUgbm90IGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnY2FzZVslc10gc2tpcHBlZCcsIGNhc2VfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgc2tpcCBjYXNlcworICAgICAgICAgICAgICAgIGlmIGNhc2VfbmFtZSBpbiBsb2cua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBpZiAobG9nW2Nhc2VfbmFtZV1bJ3Bhc3NlZCddIGFuZCAoJ3AnIGluIHNraXApKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvciAobG9nW2Nhc2VfbmFtZV1bJ3Bhc3NlZCddIGlzIEZhbHNlIGFuZCAoJ2YnIGluIHNraXApKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvciAobG9nW2Nhc2VfbmFtZV1bJ3Bhc3NlZCddIGlzIE5vbmUgYW5kICgnZScgaW4gc2tpcCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Nhc2VbJXNdIHNraXBwZWQgZm9yIGl0cyBzdGF0dXNbJXNdJywgY2FzZV9uYW1lLCBsb2dbY2FzZV9uYW1lXVsncGFzc2VkJ10pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBjb250aW51ZSBmcm9tCisgICAgICAgICAgICAgICAgaWYgY29udGludWVfZnJvbToKKyAgICAgICAgICAgICAgICAgICAgaWYgY29udGludWVfZnJvbSAhPSBjYXNlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnY2FzZVslc10gc2tpcHBlZCBmb3IgY29udGludWUgZnJvbVslc10nLCBjYXNlX25hbWUsIGNvbnRpbnVlX2Zyb20pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVfZnJvbSA9IE5vbmUKKworICAgICAgICAgICAgICAgICMgYmxhY2sgbGlzdAorICAgICAgICAgICAgICAgIGlmIGNhc2VfbmFtZSBpbiBleGNsdWRlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Nhc2VbJXNdIHNraXBwZWQgZm9yIGJsYWNrbGlzdCcsIGNhc2VfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgbWF4IGRldmljZXMKKyAgICAgICAgICAgICAgICBpZiBtYXhfZGV2aWNlcyBhbmQgY2FzZS5nb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA+IG1heF9kZXZpY2VzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnY2FzZVslc10gc2tpcHBlZCBmb3IgZXhjZWVkaW5nIG1heCBnb2xkZW4gZGV2aWNlcyBhbGxvd2VkWyVkXScsIGNhc2VfbmFtZSwgbWF4X2RldmljZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KGNhc2UpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ2Nhc2VbJXNdIGFkZGVkJywgY2FzZV9uYW1lKQorCisgICAgaWYgYXV0b19yZWJvb3Q6CisgICAgICAgIGFyZ3YgPSBbXQorICAgICAgICBhcmd2LmFwcGVuZCgnIiVzIicgJSBvcy5zZXAuam9pbihbb3MuZ2V0Y3dkKCksICdzdGFydC5iYXQnXSkpCisgICAgICAgIGFyZ3YuZXh0ZW5kKFsnLXAnLCBwYXR0ZXJuXSkKKyAgICAgICAgYXJndi5leHRlbmQoWyctaycsIHNraXBdKQorICAgICAgICBhcmd2LmV4dGVuZChbJy1vJywgcmVzdWx0X2ZpbGVdKQorICAgICAgICBhcmd2LmFwcGVuZCgnLWEnKQorCisgICAgICAgIGlmIG1hbnVhbF9yZXNldDoKKyAgICAgICAgICAgIGFyZ3YuYXBwZW5kKCctbScpCisKKyAgICAgICAgaWYgZGVsZXRlX2hpc3Rvcnk6CisgICAgICAgICAgICBhcmd2LmFwcGVuZCgnLWQnKQorCisgICAgICAgIGF1dG9fcmVib290X2FyZ3MgPSBhcmd2ICsgbmFtZXMKKyAgICBlbHNlOgorICAgICAgICBhdXRvX3JlYm9vdF9hcmdzID0gTm9uZQorICAgICAgICBvcy5zeXN0ZW0oJ2RlbCAiJXMiJyAlIFJFU1VNRV9TQ1JJUFRfUEFUSCkKKworICAgICMgbWFudWFsIHJlc2V0CisgICAgaWYgbWFudWFsX3Jlc2V0OgorICAgICAgICBzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9UWVBFID0gJ01BTlVBTF9QRFVfQ09OVFJPTExFUicKKyAgICAgICAgc2V0dGluZ3MuUERVX0NPTlRST0xMRVJfT1BFTl9QQVJBTVMgPSB7fQorICAgICAgICBzZXR0aW5ncy5QRFVfQ09OVFJPTExFUl9SRUJPT1RfUEFSQU1TID0ge30KKworICAgIHJlc3VsdCA9IFNpbXBsZVRlc3RSZXN1bHQocmVzdWx0X2ZpbGUsIGF1dG9fcmVib290X2FyZ3MpCisgICAgZm9yIGNhc2UgaW4gc3VpdGU6CisgICAgICAgIGxvZ2dlci5pbmZvKGNhc2UuX19jbGFzc19fLl9fbmFtZV9fKQorCisgICAgaWYgZHJ5X3J1bjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdUaHJlYWQgaGFybmVzcyB0ZXN0IGNhc2UgcnVubmVyJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWF1dG8tcmVib290JywgJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Jlc3RhcnQgc3lzdGVtIHdoZW4gaGFybmVzcyBzZXJ2aWNlIGRpZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnbmFtZXMnLCBtZXRhdmFyPSdOQU1FJywgdHlwZT1zdHIsIG5hcmdzPScqJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndGVzdCBjYXNlIG5hbWUsIG9taXQgdG8gdGVzdCBhbGwnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmxhY2tsaXN0JywgJy1iJywgbWV0YXZhcj0nQkxBQ0tMSVNUX0ZJTEUnLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgdG8gbGlzdCB0ZXN0IGNhc2VzIHRvIHNraXAnLCBkZWZhdWx0PU5vbmUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb250aW51ZS1mcm9tJywgJy1jJywgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpcnN0IGNhc2UgdG8gdGVzdCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZWxldGUtaGlzdG9yeScsICctZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdjbGVhciBoaXN0b3J5IG9uIHN0YXJ0dXAnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbmFtZS1ncmVwcycsICctZycsIGFjdGlvbj0nYXBwZW5kJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ3JlcCBjYXNlIGJ5IG5hbWVzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxpc3QtZmlsZScsICctaScsIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIHRvIGxpc3QgY2FzZXMgbmFtZXMgdG8gdGVzdCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1za2lwJywgJy1rJywgbWV0YXZhcj0nU0tJUCcsIHR5cGU9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndHlwZSBvZiByZXN1bHRzIHRvIHNraXAuJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAnZSBmb3IgZXJyb3IsIGYgZm9yIGZhaWwsIHAgZm9yIHBhc3MuJywgZGVmYXVsdD0nJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxpc3QtZGV2aWNlcycsICctbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdsaXN0IGRldmljZXMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWFudWFsLXJlc2V0JywgJy1tJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Jlc2V0IGRldmljZXMgbWFudWFsbHknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZHJ5LXJ1bicsICctbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdqdXN0IHNob3cgd2hhdCB0byBydW4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVzdWx0LWZpbGUnLCAnLW8nLCB0eXBlPXN0ciwgZGVmYXVsdD1zZXR0aW5ncy5PVVRQVVRfUEFUSCArICdcXHJlc3VsdC5qc29uJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgdG8gc3RvcmUgYW5kIHJlYWQgY3VycmVudCBzdGF0dXMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcGF0dGVybicsICctcCcsIG1ldGF2YXI9J1BBVFRFUk4nLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgbmFtZSBwYXR0ZXJuLCBkZWZhdWx0IHRvICIqLnB5IicsIGRlZmF1bHQ9JyoucHknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWF4LWRldmljZXMnLCAnLXUnLCB0eXBlPWludCwgZGVmYXVsdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbWF4IGdvbGRlbiBkZXZpY2VzIGFsbG93ZWQnKQorCisgICAgYXJncyA9IHZhcnMocGFyc2VyLnBhcnNlX2FyZ3MoKSkKKworICAgIGlmIGFyZ3NbJ2xpc3RfZmlsZSddOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lcyA9IFtsaW5lLnN0cmlwKCdcbicpIGZvciBsaW5lIGluIG9wZW4oYXJnc1snbGlzdF9maWxlJ10sICdyJykucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKV0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmFpbGVkIHRvIG9wZW4gdGVzdCBjYXNlIGxpc3QgZmlsZScpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnc1snbmFtZXMnXSA9IGFyZ3NbJ25hbWVzJ10gKyBuYW1lcworCisgICAgYXJncy5wb3AoJ2xpc3RfZmlsZScpCisKKyAgICBpZiBhcmdzLnBvcCgnbGlzdF9kZXZpY2VzJywgRmFsc2UpOgorICAgICAgICBsaXN0X2RldmljZXMoKiphcmdzKQorICAgIGVsc2U6CisgICAgICAgIGRpc2NvdmVyKCoqYXJncykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9hdXRvdGhyZWFkaGFybmVzcy9zZXR0aW5nc19zYW1wbGUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3Mvc2V0dGluZ3Nfc2FtcGxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0N2ViMjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vYXV0b3RocmVhZGhhcm5lc3Mvc2V0dGluZ3Nfc2FtcGxlLnB5CkBAIC0wLDAgKzEsMTE4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworQVVUT19EVVQgPSBUcnVlCisiIiJib29sOiBXaGV0aGVyIHVzZSB0aGUgYXV0byBEVVQgZmVhdHVyZSBvZiB0aHJlYWQgaGFybmVzcy4iIiIKKworRFVUX0RFVklDRSA9ICgnQ09NMTYnLCAnT3BlblRocmVhZCcpCisiIiIoc3RyLCBzdHIpOiBUaGUgZmlyc3QgZWxlbWVudCBpcyBzZXJpYWwgcG9ydCBvZiB0aGUgRFVULCBhbmQgdGhlIHNlY29uZCBpcwordGhlIGRldmljZSB0eXBlLiBUaGlzIG11c3QgYmUgc2V0IGlmIEFVVE9fRFVUPUZhbHNlLiIiIgorCitEVVRfVkVSU0lPTiA9ICdnMTIzNDUnCisiIiJzdHI6IFZlcnNpb24gb2YgRFVULCBtdXN0IGJlIHNldCBpZiBBVVRPX0RVVD1GYWxzZS4iIiIKKworRFVUX01BTlVGQUNUVVJFUiA9ICdPcGVuIFRocmVhZCcKKyIiInN0cjogTWFudWZhY3R1cmVyIG9mIHRoZSBEVVQiIiIKKworVEhSRUFEX0NIQU5ORUwgPSAxOAorIiIiaW50OiBUaHJlYWQgY2hhbm5lbCIiIgorCitUSFJFQURfUEFOSUQgPSAnMHhmYWNlJworIiIic3RyOiBUaHJlYWQgUEFOIElEIiIiCisKK1RIUkVBRF9ORVRXT1JLTkFNRSA9ICdHUkwnCisiIiJzdHI6IFRocmVhZCBuZXR3b3JrIG5hbWUiIiIKKworVEhSRUFEX0VYVFBBTklEID0gJzAwMGRiODAwMDAwMDAwMDAnCisiIiJzdHI6IFRocmVhZCBleHRlbmRlZCBQQU4gSUQiIiIKKworVEhSRUFEX0NISUxEX1RJTUVPVVQgPSAwCisiIiJpbnQ6IENoaWxkIHRpbWVvdXQgaW4gc2Vjb25kcy4gU2V0IHRvIDAgdG8gdXNlIEhhcm5lc3MncyBkZWZhdWx0IHZhbHVlLiIiIgorCitUSFJFQURfU0VEX1BPTExJTkdfSU5URVJWQUwgPSAwCisiIiJpbnQ6IFNFRCBwb2xsaW5nIGludGVydmFsIGluIHNlY29uZHMuIFNldCB0byAwIHRvIHVzZSBIYXJuZXNzJ3MgZGVmYXVsdCB2YWx1ZS4iIiIKKworSEFSTkVTU19IT01FID0gJ0M6XFxHUkxcXFRocmVhZDEuMScKKyIiInN0cjogSGFybmVzcyBpbnN0YWxsYXRpb24gcGF0aCwgZS5nLiBgYEM6XEdSTFxUaHJlYWQxLjFgYCIiIgorCitIQVJORVNTX1VSTCA9ICdodHRwOi8vMTI3LjAuMC4xOjgwMDAnCisiIiJzdHI6IEhhcm5lc3MgZnJvbnQtZW5kIHVybCIiIgorCitURVNURVJfTkFNRSA9ICdUaHJlYWQgT3BlbicKKyIiInN0cjogV2hvIGFyZSB5b3UiIiIKKworVEVTVEVSX1JFTUFSS1MgPSAnT3BlblRocmVhZCBpcyBncmVhdCcKKyIiInN0cjogQW55IGNvbW1lbnRzIGluIHRoZSBmaW5hbCBQREYiIiIKKworR09MREVOX0RFVklDRVMgPSBbXQorIiIiWyhzdHIsIHN0cildOiBkZXZpY2VzIGxpc3QuCisKK0l0IHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSBbKCdDT00xJywgJ09wZW5UaHJlYWQnKSwgKCdDT00yJywgJ0FSTScpXSBmb3IgZGV2aWNlcyBjb25uZWN0ZWQgdG8gV2luZG93cy4KKworRm9yIE9wZW5UaHJlYWQgZ29sZGVuIGRldmljZXMsIHNlcjJuZXQgaXMgYWxzbyBzdXBwb3J0ZWQsIGp1c3QgdXNlIElQOlBPUlQgZm9yIHRoZSBuYW1lLiBGb3IgZXhhbXBsZSwKKygnMTkyLjE2OC4xLjI6NTAwMScsICdPcGVuVGhyZWFkJykuCisiIiIKKworT1VUUFVUX1BBVEggPSAnLlxcb3V0cHV0JworIiIic3RyOiBQYXRoIHRvIHN0b3JlIHJlc3VsdHMgYW5kIGxvZ3MsIE1VU1QgYmUgd3JpdGFibGUuIiIiCisKK1NISUVMRF9TSU1VTEFUSU9OID0gRmFsc2UKKyIiImJvb2w6IHdoZXRoZXIgdG8gc2ltdWxhdGUgUkYgc2hpZWxkIGJ5IGNoYW5naW5nIGNoYW5uZWwiIiIKKworUERVX0NPTlRST0xMRVJfVFlQRSA9IE5vbmUKKyIiInN0cjogVHlwZSBvZiBjb25uZWN0ZWQgUERVIGNvbnRyb2xsZXIuCisKK0tlZXAgdGhpcyBOb25lIGlmIG5vIFBEVSBjb250cm9sbGVyIGF2YWlsYWJsZS4KKworVHlwZXMgb2Ygc3VwcG9ydGVkIFBEVSBjb250cm9sbGVyczoKKyAgICAtIE5vbmUgLSB3aGVuIG5vIFBEVSBjb250cm9sbGVyIGNvbm5lY3RlZAorICAgIC0gJ0FQQ19QRFVfQ09OVFJPTExFUicgLSB3aGVuIEFQQyBQRFUgY29udHJvbGxlciBjb25uZWN0ZWQKKyAgICAtICdOT1JESUNfQk9BUkRfUERVX0NPTlRPTExFUicgLSB3aGVuIE5vcmRpYyBib2FyZHMgUERVIGNvbnRyb2xsZXIgY29ubmVjdGVkCisiIiIKKworUERVX0NPTlRST0xMRVJfT1BFTl9QQVJBTVMgPSB7J3BvcnQnOiAyMywgJ2lwJzogJzEyNy4wLjAuMSd9CisiIiJkaWN0OiBQYXJhbWV0ZXJzIHBhc3MgdG8gdGhlICJvcGVuIiBtZXRob2Qgb2YgUERVIGNvbnRyb2xsZXIuCisKK0V4YW1wbGUgcGFyYW1ldGVycyBmb3IgdGhlICdBUENfUERVX0NPTlRST0xMRVInOgorICAgIHsncG9ydCc6IDIzLCAnaXAnOiAnMTI3LjAuMC4xJ30KKworRXhhbXBsZSBwYXJhbWV0ZXJzIGZvciB0aGUgJ05PUkRJQ19CT0FSRF9QRFVfQ09OVE9MTEVSJzoKKyAgICB7fSAtIGVtcHR5IGRpY3Rpb25hcnkKKyIiIgorCitQRFVfQ09OVFJPTExFUl9SRUJPT1RfUEFSQU1TID0geydvdXRsZXQnOiAxfQorIiIiZGljdDogUGFyYW1ldGVycyBwYXNzIHRvIHRoZSAicmVib290IiBtZXRob2Qgb2YgUERVIGNvbnRyb2xsZXIuCisKK0V4YW1wbGUgcGFyYW1ldGVycyBmb3IgdGhlICdBUENfUERVX0NPTlRST0xMRVInOgorICAgIHsnb3V0bGV0JzogMX0KKworRXhhbXBsZSBwYXJhbWV0ZXJzIGZvciB0aGUgJ05PUkRJQ19CT0FSRF9QRFVfQ09OVE9MTEVSJzoKKyAgICB7J2JvYXJkc19zZXJpYWxfbnVtYmVycyc6ICgnMTIzNDUxMjMnLCAuLi4pfQorIiIiCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvX19pbml0X18ucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyZDExYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzFfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8xXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczMmZmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8xXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzhfMV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzggMSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8xXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZDExNjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMV8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl84XzFfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc4IDEgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMV82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzFfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQwOTgwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzFfNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOF8xXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOCAxIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzJfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8yXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmYjlhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8yXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzhfMl8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzggMiAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8yXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMl8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMGM5MDcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMl8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl84XzJfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc4IDIgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzhfMl81LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzJfNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk3NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzJfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOF8yXzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOCAyIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl84XzNfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8zXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjNjY0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOF8zXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzhfM18xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzggMyAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MzIwZmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl85XzJfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc5IDIgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8xNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzE0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjg3MjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8xNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOV8yXzE0KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzkgMiAxNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJiYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBDb21taXNzaW9uZXJfOV8yXzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0NPTU1JU1NJT05FUgorICAgIGNhc2UgPSAnOSAyIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2NvbW1pc3Npb25lcl85XzJfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZmNjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgQ29tbWlzc2lvbmVyXzlfMl8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9DT01NSVNTSU9ORVIKKyAgICBjYXNlID0gJzkgMiAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9jb21taXNzaW9uZXJfOV8yXzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWFjMDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvY29tbWlzc2lvbmVyXzlfMl80LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIENvbW1pc3Npb25lcl85XzJfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfQ09NTUlTU0lPTkVSCisgICAgY2FzZSA9ICc5IDIgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5MzQwZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzFfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgMSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjBjOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfMV8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiAxIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZTcyNzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl8xXzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDEgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhZjEwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzFfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgMSA0JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzFfNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGJhMWNmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV81LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfMV81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiAxIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMV82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMWY4MjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8xXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl8xXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDEgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8yXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8yXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkZTBlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzJfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzJfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgMiAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzJfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzJfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgxNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfMl8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfMl8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiAyIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfM18xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfM18xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjE3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl8zXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl8zXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDMgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl80XzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl80XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMGMwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzRfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzRfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgNCAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzRfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzRfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNkNTUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNF8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfNF8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiA0IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNV8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjIyODEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl81XzEucHkKQEAgLTAsMCArMSw0OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRpbWUKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfNV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiA1IDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVzZXQgRFVUJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5jaGlsZF90aW1lb3V0ICsgMTApCisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmIwOGZiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNV8yLnB5CkBAIC0wLDAgKzEsNTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmUKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzZfNV8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnNiA1IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVzZXQgRFVUJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVqb2luIE5vdycpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzVfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGQzZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNV8zLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzVfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgNSAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlam9pbiBOb3cnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzZfNl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYWE4YjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl82XzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfNl82XzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc2IDYgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl82XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfNl82XzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljOTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF82XzZfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF82XzZfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzYgNiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTAucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZmM1NTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzEwLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzlfMl8xMChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzkgMiAxMCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzExLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzkxNTczCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF85XzJfMTEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0VECisgICAgY2FzZSA9ICc5IDIgMTEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl8xNy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3OGE5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRURfOV8yXzE3KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnOSAyIDE3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfMTgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzE4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTg4NGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzE4LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzlfMl8xOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzkgMiAxOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvZWRfOV8yXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ZmVhMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBFRF85XzJfNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfRUQKKyAgICBjYXNlID0gJzkgMiA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9lZF85XzJfOC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGJiOGZkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2VkXzlfMl84LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEVEXzlfMl84KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9FRAorICAgIGNhc2UgPSAnOSAyIDgnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2ZlZF82XzFfNy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9mZWRfNl8xXzcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0ZmM0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9mZWRfNl8xXzcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgRkVEXzZfMV83KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9GRUQKKyAgICBjYXNlID0gJzYgMSA3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9mZWRfOV8yXzEzLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2ZlZF85XzJfMTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiMDhhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9mZWRfOV8yXzEzLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEZFRF85XzJfMTMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0ZFRAorICAgIGNhc2UgPSAnOSAyIDEzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9qb2luZXJfOF8xXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvam9pbmVyXzhfMV8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZWNjOGEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvam9pbmVyXzhfMV8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIEpvaW5lcl84XzFfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfSk9JTkVSCisgICAgY2FzZSA9ICc4IDEgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvam9pbmVyXzhfMV82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2pvaW5lcl84XzFfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU5M2RlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2pvaW5lcl84XzFfNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBKb2luZXJfOF8xXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0pPSU5FUgorICAgIGNhc2UgPSAnOCAxIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzFfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5ZTFhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzVfMV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgMSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzEzLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzFfMTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhYWNjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzEzLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBMZWFkZXJfNV8xXzEzKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgMSAxMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdVc2VyIElucHV0IFJlcXVpcmVkJyk6CisgICAgICAgICAgICAjYm9keSA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtTXNnJykudGV4dAorICAgICAgICAgICAgI2lmIGJvZHkuc3RhcnRzd2l0aCgnUmVzZXQgTGVhZGVyJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzFfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhNTgyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8xXzUucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIExlYWRlcl81XzFfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDEgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfMl8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzJfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzNhYTNkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzJfMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV8yXzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSAyIDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8zXzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM182LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWIzYTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM182LnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBMZWFkZXJfNV8zXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSAzIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA1CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzNfNy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8zXzcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4MDA1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8zXzcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzVfM183KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgMyA3JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV8zXzgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM184LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTBmY2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfM184LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzNfOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDMgOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY1ZDUyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfMS5weQpAQCAtMCwwICsxLDU1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHJlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV81XzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA1IDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnVXNlciBJbnB1dCBSZXF1aXJlZCcpOgorICAgICAgICAgICAgYm9keSA9IGRpYWxvZy5maW5kX2VsZW1lbnRfYnlfaWQoJ2NuZnJtTXNnJykudGV4dAorICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocicoPzw9TGVhZGVyIFRpbWVvdXRcWylcZCsoPz0gU2Vjb25kc1xdKScsIGJvZHkpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gaW50KG1hdGNoLmdyb3VwKDApKSAvIDIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IDEwCisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCkKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkZDMzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzIucHkKQEAgLTAsMCArMSw0OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzVfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDUgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdVc2VyIElucHV0IFJlcXVpcmVkJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1NjA1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzMucHkKQEAgLTAsMCArMSw1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzVfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDUgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdSZXNldCBEVVQnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdSZWpvaW4nKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzVfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlNWI1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzQucHkKQEAgLTAsMCArMSw1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzVfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDUgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBpZiB0aXRsZS5zdGFydHN3aXRoKCdSZXNldCBEVVQnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZWxpZiB0aXRsZS5zdGFydHN3aXRoKCdSZWpvaW4gTm93Jyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV81XzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV83LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDIxOWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNV83LnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBMZWFkZXJfNV81XzcoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA1IDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVzZXQgRFVUJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVqb2luIE5vdycpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYxYWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfMi5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTGVhZGVyXzVfNl8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgNiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmNlYTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl80LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzZfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDYgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfNl81LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmMzOTMwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfNV82XzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNSA2IDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl81XzZfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNjc5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV82XzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzVfNl82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzUgNiA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfNV84XzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfOF80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMTBlNjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzVfOF80LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl81XzhfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc1IDggNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzdfMV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl83XzFfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFlNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl83XzFfMS5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgTGVhZGVyXzdfMV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzcgMSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfN18xXzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzdfMV8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjY4MDgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzdfMV8zLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBMZWFkZXJfN18xXzMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnNyAxIDMnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl84XzNfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOF8zXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOF8zXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzhfM18xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzggMyAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDQ3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl85XzJfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzExLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMWQ4M2MKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzExKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiAxMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzEyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjU4MWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzEyKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiAxMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzE4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzQwYzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8xOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzE4KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiAxOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl8yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTlmZGJlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnOSAyIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzOGNlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzMucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzQucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl80LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZmNjZmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl80LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl85XzJfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl81LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjAxZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnOSAyIDUnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3NTQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTGVhZGVyXzlfMl82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9MRUFERVIKKyAgICBjYXNlID0gJzkgMiA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9sZWFkZXJfOV8yXzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl83LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2NjMzEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl83LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIExlYWRlcl85XzJfNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfTEVBREVSCisgICAgY2FzZSA9ICc5IDIgNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvbGVhZGVyXzlfMl85LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg3ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL2xlYWRlcl85XzJfOS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBMZWFkZXJfOV8yXzkoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX0xFQURFUgorICAgIGNhc2UgPSAnOSAyIDknCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL21lZF82XzNfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfNl8zXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxOTQ1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfNl8zXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgTUVEXzZfM18yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9NRUQKKyAgICBjYXNlID0gJzYgMyAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfOV8yXzEyLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL21lZF85XzJfMTIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjMTBjYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfOV8yXzEyLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIE1FRF85XzJfMTIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX01FRAorICAgIGNhc2UgPSAnOSAyIDEyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfOV8yXzEzLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL21lZF85XzJfMTMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5YmI1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9tZWRfOV8yXzEzLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIE1FRF85XzJfMTMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX01FRAorICAgIGNhc2UgPSAnOSAyIDEzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfMl80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV8yXzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2MzU4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfMl80LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJFRURfNV8yXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JFRUQKKyAgICBjYXNlID0gJzUgMiA0JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMTgKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzJfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfMl81LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMDVlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzJfNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSRUVEXzVfMl81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9SRUVECisgICAgY2FzZSA9ICc1IDIgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDE3CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV8yXzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzJfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGFhZmRhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV8yXzcucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUkVFRF81XzJfNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUkVFRAorICAgIGNhc2UgPSAnNSAyIDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxNgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfNV81LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JlZWRfNV81XzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2MGI5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfNV81LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJFRURfNV81XzUoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JFRUQKKyAgICBjYXNlID0gJzUgNSA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMTYKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzZfNy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yZWVkXzVfNl83LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDc2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcmVlZF81XzZfNy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSRUVEXzVfNl83KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9SRUVECisgICAgY2FzZSA9ICc1IDYgNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDE2CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwNTUwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEwLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmYmI5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzEwLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMTAoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDEwJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA4ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV8xMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgMTEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmM5MjI0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV8xMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgMTInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8xMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBjMDJlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMTMucHkKQEAgLTAsMCArMSw1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRpbWUKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMTMoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDEzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlam9pbiBOb3cnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4MmY4MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTc3MjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV8zLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTY3OTlkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8xXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAxIDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2YjNkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV83LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTZkOTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV83LnB5CkBAIC0wLDAgKzEsNDcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfNyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDExCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnRW50ZXIgUm91dGVyIE1heCBDaGlsZCBDb3VudCcpOgorICAgICAgICAgICAgaW5wID0gZGlhbG9nLmZpbmRfZWxlbWVudF9ieV9pZCgnY25mcm1JbnBUZXh0JykKKyAgICAgICAgICAgIGlucC5jbGVhcigpCisgICAgICAgICAgICBpbnAuc2VuZF9rZXlzKCc1JykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzFfOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2NTcwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzgucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMV84KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMSA4JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8xXzkucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV85LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNDAzNzQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMV85LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl81XzFfOShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDEgOScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA3NjMzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8yXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAyIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwYmU2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8yXzYucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfMl82KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMiA2JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMjMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfMl83LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfNy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGUwMGYxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzJfNy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfNV8yXzcoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAyIDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxNgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMWFmN2MKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18xLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV8zXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAzIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzEwLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMTAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2MzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzEwLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV8zXzEwKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMyAxMCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMTEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18xMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM4YmFkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMTEucHkKQEAgLTAsMCArMSw0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzNfMTEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSAzIDExJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGIxM2ExCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMi5weQpAQCAtMCwwICsxLDQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfM18yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMyAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM18zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmVlYjAyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfMy5weQpAQCAtMCwwICsxLDQ0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfM18zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMyAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1N0YXJ0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuZW5hYmxlX2JsYWNrbGlzdCgpCisgICAgICAgICAgICBzZWxmLmR1dC5hZGRfYmxhY2tsaXN0KCcxNjZlMGEwMDAwMDAwMDUnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkY2E3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzQucHkKQEAgLTAsMCArMSw0MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzNfNChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDMgNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDYKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0YzBlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV8zXzUucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzNfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDMgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfM185LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ1NGVkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzNfOS5weQpAQCAtMCwwICsxLDQxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfM185KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgMyA5JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDExZjViCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfMS5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfNV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYmRlMDIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV8yLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV81XzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSA1IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkZTdjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzMucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzVfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDUgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFiOTYyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzVfNC5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfNV80KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNSA0JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV81XzcucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV83LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDgxYmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNV83LnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV81XzcoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSA1IDcnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzZfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV82XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2ZDAwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV82XzEucHkKQEAgLTAsMCArMSw0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJvdXRlcl81XzZfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc1IDYgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNl8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzZfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZmYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzZfMy5weQpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUm91dGVyXzVfNl8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNiAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV82XzkucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNl85LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZDQyYTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfNl85LnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBSb3V0ZXJfNV82XzkoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNSA2IDknCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl81XzdfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV83XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzYTE4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV83XzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzVfN18xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgNyAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gNAorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV84XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfOF8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTYyMjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfOF8yLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorY2xhc3MgUm91dGVyXzVfOF8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgOCAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfNV84XzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfOF8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjliYjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzVfOF8zLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKK2ltcG9ydCB1bml0dGVzdAorY2xhc3MgUm91dGVyXzVfOF8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzUgOCAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNWJkNDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl83XzFfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc3IDEgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UzNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfN18xXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnNyAxIDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAzCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl83XzFfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5YjlmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzdfMV81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzcgMSA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfN18xXzgucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV84LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Nzk2NDQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzdfMV84LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl83XzFfOChIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc3IDEgOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzhfMl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl84XzJfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTUyY2NkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl84XzJfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOF8yXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnOCAyIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl84XzJfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOF8yXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1MTYwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOF8yXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzhfMl8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzggMiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOF8yXzUucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzhfMl81LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZWIxNDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzhfMl81LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl84XzJfNShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc4IDIgNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NGJkM2UKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzEwKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxMCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzExLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzQzYzYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzExKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzEyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTdjOGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzEyKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzEzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjA4YTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzEzKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzE0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjdmZDAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzE0KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxNCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzE1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzkzOGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzE1KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxNScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzE2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMWY5M2UKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzE2KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzE4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MjIyYjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl8xOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzE4KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiAxOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZmN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBSb3V0ZXJfOV8yXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1JPVVRFUgorICAgIGNhc2UgPSAnOSAyIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3JvdXRlcl85XzJfOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmZTZkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzgucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgUm91dGVyXzlfMl84KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9ST1VURVIKKyAgICBjYXNlID0gJzkgMiA4JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9yb3V0ZXJfOV8yXzkucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl85LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmYzZTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvcm91dGVyXzlfMl85LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFJvdXRlcl85XzJfOShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfUk9VVEVSCisgICAgY2FzZSA9ICc5IDIgOScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjg0OTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8xXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAxIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwMWZkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfMV8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMSAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzMucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWNhNDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV8zLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzFfMyhIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDEgMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV80LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEyZTdiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfNC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8xXzQoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAxIDQnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzFfNS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1OTQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzUucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfMV81KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMSA1JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8xXzYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV82LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjgxY2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMV82LnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzFfNihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDEgNicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDMKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfMl8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzJfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYThkN2VhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzJfMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8yXzEoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAyIDEnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzJfMi5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8yXzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZDgxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8yXzIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfMl8yKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgMiAyJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMworICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl8zXzEucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfM18xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTg3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfM18xLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzNfMShIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDMgMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfM18yLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzNfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzFiNjAxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzNfMi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl8zXzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiAzIDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAxCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzRfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl80XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmOGY4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl80XzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfNF8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgNCAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl80XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNF8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljM2QyYmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNF8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzRfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDQgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNV8xLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTM5NTgwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMS5weQpAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfNV8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgNSAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgdGltZS5zbGVlcChzZWxmLmNoaWxkX3RpbWVvdXQgKyA1KQorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBzZWxmLmR1dC5zdGFydCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl81XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNV8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTViNjcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNV8yLnB5CkBAIC0wLDAgKzEsNTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfNl81XzIoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnNiA1IDInCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSAyCisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVzZXQgRFVUJyk6CisgICAgICAgICAgICBzZWxmLmR1dC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdGl0bGUuc3RhcnRzd2l0aCgnUmVqb2luIE5vdycpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RhcnQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNV8zLnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY3MjBjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzVfMy5weQpAQCAtMCwwICsxLDUwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfNV8zKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgNSAzJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlc2V0IERVVCcpOgorICAgICAgICAgICAgc2VsZi5kdXQuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRpdGxlLnN0YXJ0c3dpdGgoJ1Jlam9pbiBOb3cnKToKKyAgICAgICAgICAgIHNlbGYuZHV0LnN0YXJ0KCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF82XzZfMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl82XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2MGVlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl82XzEucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzZfNl8xKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzYgNiAxJworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMQorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfNl82XzIucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNl8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMWUxNTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzZfNl8yLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBhdXRvdGhyZWFkaGFybmVzcy5oYXJuZXNzX2Nhc2UgaW1wb3J0IEhhcm5lc3NDYXNlCisKK2NsYXNzIFNFRF82XzZfMihIYXJuZXNzQ2FzZSk6CisgICAgcm9sZSA9IEhhcm5lc3NDYXNlLlJPTEVfU0VECisgICAgY2FzZSA9ICc2IDYgMicKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDEKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Yjk4NTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfOV8yXzEwKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiAxMCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMS5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzExLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjI5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMS5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfOV8yXzExKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiAxMScKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDQKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzEzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDNmMTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xMy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfOV8yXzEzKEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiAxMycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xNy5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzE3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTc1MDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xNy5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfOV8yXzE3KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiAxNycKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDIKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzE4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNDNlZDgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl8xOC5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfOV8yXzE4KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiAxOCcKKyAgICBnb2xkZW5fZGV2aWNlc19yZXF1aXJlZCA9IDUKKyAgICBkZWYgb25fZGlhbG9nKHNlbGYsIGRpYWxvZywgdGl0bGUpOgorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vY2FzZXMvc2VkXzlfMl82LnB5IGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODIwODI1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfNi5weQpAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYXV0b3RocmVhZGhhcm5lc3MuaGFybmVzc19jYXNlIGltcG9ydCBIYXJuZXNzQ2FzZQorCitjbGFzcyBTRURfOV8yXzYoSGFybmVzc0Nhc2UpOgorICAgIHJvbGUgPSBIYXJuZXNzQ2FzZS5ST0xFX1NFRAorICAgIGNhc2UgPSAnOSAyIDYnCisgICAgZ29sZGVuX2RldmljZXNfcmVxdWlyZWQgPSA0CisgICAgZGVmIG9uX2RpYWxvZyhzZWxmLCBkaWFsb2csIHRpdGxlKToKKyAgICAgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2Nhc2VzL3NlZF85XzJfOC5weSBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4ODlkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9jYXNlcy9zZWRfOV8yXzgucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF1dG90aHJlYWRoYXJuZXNzLmhhcm5lc3NfY2FzZSBpbXBvcnQgSGFybmVzc0Nhc2UKKworY2xhc3MgU0VEXzlfMl84KEhhcm5lc3NDYXNlKToKKyAgICByb2xlID0gSGFybmVzc0Nhc2UuUk9MRV9TRUQKKyAgICBjYXNlID0gJzkgMiA4JworICAgIGdvbGRlbl9kZXZpY2VzX3JlcXVpcmVkID0gMgorICAgIGRlZiBvbl9kaWFsb2coc2VsZiwgZGlhbG9nLCB0aXRsZSk6CisgICAgICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvY29tcG9uZW50cy5ndiBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvY29tcG9uZW50cy5ndgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ5YzlmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9jb21wb25lbnRzLmd2CkBAIC0wLDAgKzEsMTggQEAKK2RpZ3JhcGggRyB7CisgIHN1YmdyYXBoIGNsdXN0ZXJfb3MgeworICAgIHN0eWxlPWZpbGxlZDsKKyAgICBjb2xvcj1ncmV5OworICAgIGxhYmVsPSJXaW5kb3dzIjsKKworICAgIHN1YmdyYXBoIGNsdXN0ZXJfcHl0aG9uIHsKKyAgICAgIGxhYmVsPSJBdXRvbWF0aW9uIFRvb2wvUHl0aG9uIjsKKyAgICAgIGNvbG9yPWxpZ2h0Z3JleTsKKyAgICAgIEhhcm5lc3NDYXNlIC0+IEhhcm5lc3NDb250cm9sbGVyOworICAgICAgSGFybmVzc0Nhc2UgLT4gT3BlblRocmVhZENvbnRyb2xsZXI7CisgICAgfQorCisgICAgSGFybmVzc0Nhc2UgLT4gQ2hyb21lIFtsYWJlbD0ic2VsZW5pdW0iXTsKKyAgICBIYXJuZXNzQ29udHJvbGxlciAtPiAiVGhyZWFkIEhhcm5lc3MiOworICB9CisgIE9wZW5UaHJlYWRDb250cm9sbGVyIC0+IERVVCBbbGFiZWw9InNlcmlhbCBwb3J0Il07Cit9CmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2NvbXBvbmVudHMucG5nIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9jb21wb25lbnRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU2YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9jb21wb25lbnRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2NvbmYucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2NvbmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMjA0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvY29uZi5weQpAQCAtMCwwICsxLDM2OCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKKworIworIyBUaHJlYWQgSGFybmVzcyBBdXRvbWF0aW9uIGRvY3VtZW50YXRpb24gYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlLCBjcmVhdGVkIGJ5CisjIHNwaGlueC1xdWlja3N0YXJ0IG9uIFdlZCBKdW4gMjkgMTU6MTg6MjQgMjAxNi4KKyMKKyMgVGhpcyBmaWxlIGlzIGV4ZWNmaWxlKClkIHdpdGggdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNldCB0byBpdHMKKyMgY29udGFpbmluZyBkaXIuCisjCisjIE5vdGUgdGhhdCBub3QgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoaXMKKyMgYXV0b2dlbmVyYXRlZCBmaWxlLgorIworIyBBbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMgaGF2ZSBhIGRlZmF1bHQ7IHZhbHVlcyB0aGF0IGFyZSBjb21tZW50ZWQgb3V0CisjIHNlcnZlIHRvIHNob3cgdGhlIGRlZmF1bHQuCisKKyMgSWYgZXh0ZW5zaW9ucyAob3IgbW9kdWxlcyB0byBkb2N1bWVudCB3aXRoIGF1dG9kb2MpIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeSwKKyMgYWRkIHRoZXNlIGRpcmVjdG9yaWVzIHRvIHN5cy5wYXRoIGhlcmUuIElmIHRoZSBkaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlCisjIGRvY3VtZW50YXRpb24gcm9vdCwgdXNlIG9zLnBhdGguYWJzcGF0aCB0byBtYWtlIGl0IGFic29sdXRlLCBsaWtlIHNob3duIGhlcmUuCisjCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzcGhpbnhfcnRkX3RoZW1lCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmFic3BhdGgoJy4uJykpCisKKyMgLS0gR2VuZXJhbCBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHlvdXIgZG9jdW1lbnRhdGlvbiBuZWVkcyBhIG1pbmltYWwgU3BoaW54IHZlcnNpb24sIHN0YXRlIGl0IGhlcmUuCisjCisjIG5lZWRzX3NwaGlueCA9ICcxLjAnCisKKyMgQWRkIGFueSBTcGhpbnggZXh0ZW5zaW9uIG1vZHVsZSBuYW1lcyBoZXJlLCBhcyBzdHJpbmdzLiBUaGV5IGNhbiBiZQorIyBleHRlbnNpb25zIGNvbWluZyB3aXRoIFNwaGlueCAobmFtZWQgJ3NwaGlueC5leHQuKicpIG9yIHlvdXIgY3VzdG9tCisjIG9uZXMuCitleHRlbnNpb25zID0gWworICAgICdzcGhpbnguZXh0LmF1dG9kb2MnLAorICAgICdzcGhpbnhjb250cmliLm5hcG9sZW9uJworXQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBjb250YWluIHRlbXBsYXRlcyBoZXJlLCByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4KK3RlbXBsYXRlc19wYXRoID0gWydfdGVtcGxhdGVzJ10KKworIyBUaGUgc3VmZml4KGVzKSBvZiBzb3VyY2UgZmlsZW5hbWVzLgorIyBZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgc3VmZml4IGFzIGEgbGlzdCBvZiBzdHJpbmc6CisjCisjIHNvdXJjZV9zdWZmaXggPSBbJy5yc3QnLCAnLm1kJ10KK3NvdXJjZV9zdWZmaXggPSAnLnJzdCcKKworIyBUaGUgZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGVzLgorIworIyBzb3VyY2VfZW5jb2RpbmcgPSAndXRmLTgtc2lnJworCisjIFRoZSBtYXN0ZXIgdG9jdHJlZSBkb2N1bWVudC4KK21hc3Rlcl9kb2MgPSAnaW5kZXgnCisKKyMgR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvamVjdC4KK3Byb2plY3QgPSB1J1RocmVhZCBIYXJuZXNzIEF1dG9tYXRpb24nCitjb3B5cmlnaHQgPSB1JzIwMTYsIFlha3VuIFh1JworYXV0aG9yID0gdSdZYWt1biBYdScKKworIyBUaGUgdmVyc2lvbiBpbmZvIGZvciB0aGUgcHJvamVjdCB5b3UncmUgZG9jdW1lbnRpbmcsIGFjdHMgYXMgcmVwbGFjZW1lbnQgZm9yCisjIHx2ZXJzaW9ufCBhbmQgfHJlbGVhc2V8LCBhbHNvIHVzZWQgaW4gdmFyaW91cyBvdGhlciBwbGFjZXMgdGhyb3VnaG91dCB0aGUKKyMgYnVpbHQgZG9jdW1lbnRzLgorIworIyBUaGUgc2hvcnQgWC5ZIHZlcnNpb24uCit2ZXJzaW9uID0gdScwLjUnCisjIFRoZSBmdWxsIHZlcnNpb24sIGluY2x1ZGluZyBhbHBoYS9iZXRhL3JjIHRhZ3MuCityZWxlYXNlID0gdScwLjUnCisKKyMgVGhlIGxhbmd1YWdlIGZvciBjb250ZW50IGF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54LiBSZWZlciB0byBkb2N1bWVudGF0aW9uCisjIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGxhbmd1YWdlcy4KKyMKKyMgVGhpcyBpcyBhbHNvIHVzZWQgaWYgeW91IGRvIGNvbnRlbnQgdHJhbnNsYXRpb24gdmlhIGdldHRleHQgY2F0YWxvZ3MuCisjIFVzdWFsbHkgeW91IHNldCAibGFuZ3VhZ2UiIGZyb20gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhlc2UgY2FzZXMuCitsYW5ndWFnZSA9IE5vbmUKKworIyBUaGVyZSBhcmUgdHdvIG9wdGlvbnMgZm9yIHJlcGxhY2luZyB8dG9kYXl8OiBlaXRoZXIsIHlvdSBzZXQgdG9kYXkgdG8gc29tZQorIyBub24tZmFsc2UgdmFsdWUsIHRoZW4gaXQgaXMgdXNlZDoKKyMKKyMgdG9kYXkgPSAnJworIworIyBFbHNlLCB0b2RheV9mbXQgaXMgdXNlZCBhcyB0aGUgZm9ybWF0IGZvciBhIHN0cmZ0aW1lIGNhbGwuCisjCisjIHRvZGF5X2ZtdCA9ICclQiAlZCwgJVknCisKKyMgTGlzdCBvZiBwYXR0ZXJucywgcmVsYXRpdmUgdG8gc291cmNlIGRpcmVjdG9yeSwgdGhhdCBtYXRjaCBmaWxlcyBhbmQKKyMgZGlyZWN0b3JpZXMgdG8gaWdub3JlIHdoZW4gbG9va2luZyBmb3Igc291cmNlIGZpbGVzLgorIyBUaGlzIHBhdHRlcm5zIGFsc28gZWZmZWN0IHRvIGh0bWxfc3RhdGljX3BhdGggYW5kIGh0bWxfZXh0cmFfcGF0aAorZXhjbHVkZV9wYXR0ZXJucyA9IFsnX2J1aWxkJywgJ1RodW1icy5kYicsICcuRFNfU3RvcmUnXQorCisjIFRoZSByZVNUIGRlZmF1bHQgcm9sZSAodXNlZCBmb3IgdGhpcyBtYXJrdXA6IGB0ZXh0YCkgdG8gdXNlIGZvciBhbGwKKyMgZG9jdW1lbnRzLgorIworIyBkZWZhdWx0X3JvbGUgPSBOb25lCisKKyMgSWYgdHJ1ZSwgJygpJyB3aWxsIGJlIGFwcGVuZGVkIHRvIDpmdW5jOiBldGMuIGNyb3NzLXJlZmVyZW5jZSB0ZXh0LgorIworIyBhZGRfZnVuY3Rpb25fcGFyZW50aGVzZXMgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgd2lsbCBiZSBwcmVwZW5kZWQgdG8gYWxsIGRlc2NyaXB0aW9uCisjIHVuaXQgdGl0bGVzIChzdWNoIGFzIC4uIGZ1bmN0aW9uOjopLgorIworIyBhZGRfbW9kdWxlX25hbWVzID0gVHJ1ZQorCisjIElmIHRydWUsIHNlY3Rpb25hdXRob3IgYW5kIG1vZHVsZWF1dGhvciBkaXJlY3RpdmVzIHdpbGwgYmUgc2hvd24gaW4gdGhlCisjIG91dHB1dC4gVGhleSBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgorIworIyBzaG93X2F1dGhvcnMgPSBGYWxzZQorCisjIFRoZSBuYW1lIG9mIHRoZSBQeWdtZW50cyAoc3ludGF4IGhpZ2hsaWdodGluZykgc3R5bGUgdG8gdXNlLgorcHlnbWVudHNfc3R5bGUgPSAnc3BoaW54JworCisjIEEgbGlzdCBvZiBpZ25vcmVkIHByZWZpeGVzIGZvciBtb2R1bGUgaW5kZXggc29ydGluZy4KKyMgbW9kaW5kZXhfY29tbW9uX3ByZWZpeCA9IFtdCisKKyMgSWYgdHJ1ZSwga2VlcCB3YXJuaW5ncyBhcyAic3lzdGVtIG1lc3NhZ2UiIHBhcmFncmFwaHMgaW4gdGhlIGJ1aWx0IGRvY3VtZW50cy4KKyMga2VlcF93YXJuaW5ncyA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgYHRvZG9gIGFuZCBgdG9kb0xpc3RgIHByb2R1Y2Ugb3V0cHV0LCBlbHNlIHRoZXkgcHJvZHVjZSBub3RoaW5nLgordG9kb19pbmNsdWRlX3RvZG9zID0gRmFsc2UKKworCisjIC0tIE9wdGlvbnMgZm9yIEhUTUwgb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgdGhlbWUgdG8gdXNlIGZvciBIVE1MIGFuZCBIVE1MIEhlbHAgcGFnZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisjIGEgbGlzdCBvZiBidWlsdGluIHRoZW1lcy4KKyMKKyNodG1sX3RoZW1lID0gJ2FsYWJhc3RlcicKK2h0bWxfdGhlbWUgPSAnc3BoaW54X3J0ZF90aGVtZScKKworIyBUaGVtZSBvcHRpb25zIGFyZSB0aGVtZS1zcGVjaWZpYyBhbmQgY3VzdG9taXplIHRoZSBsb29rIGFuZCBmZWVsIG9mIGEgdGhlbWUKKyMgZnVydGhlci4gIEZvciBhIGxpc3Qgb2Ygb3B0aW9ucyBhdmFpbGFibGUgZm9yIGVhY2ggdGhlbWUsIHNlZSB0aGUKKyMgZG9jdW1lbnRhdGlvbi4KKyMKKyMgaHRtbF90aGVtZV9vcHRpb25zID0ge30KKworIyBBZGQgYW55IHBhdGhzIHRoYXQgY29udGFpbiBjdXN0b20gdGhlbWVzIGhlcmUsIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5LgorIyBodG1sX3RoZW1lX3BhdGggPSBbXQoraHRtbF90aGVtZV9wYXRoID0gW3NwaGlueF9ydGRfdGhlbWUuZ2V0X2h0bWxfdGhlbWVfcGF0aCgpXQorCisjIFRoZSBuYW1lIGZvciB0aGlzIHNldCBvZiBTcGhpbnggZG9jdW1lbnRzLgorIyAiPHByb2plY3Q+IHY8cmVsZWFzZT4gZG9jdW1lbnRhdGlvbiIgYnkgZGVmYXVsdC4KKyMKKyMgaHRtbF90aXRsZSA9IHUnVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbiB2MC41JworCisjIEEgc2hvcnRlciB0aXRsZSBmb3IgdGhlIG5hdmlnYXRpb24gYmFyLiAgRGVmYXVsdCBpcyB0aGUgc2FtZSBhcyBodG1sX3RpdGxlLgorIworIyBodG1sX3Nob3J0X3RpdGxlID0gTm9uZQorCisjIFRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KSB0byBwbGFjZSBhdCB0aGUgdG9wCisjIG9mIHRoZSBzaWRlYmFyLgorIworIyBodG1sX2xvZ28gPSBOb25lCisKKyMgVGhlIG5hbWUgb2YgYW4gaW1hZ2UgZmlsZSAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpIHRvIHVzZSBhcyBhIGZhdmljb24gb2YKKyMgdGhlIGRvY3MuICBUaGlzIGZpbGUgc2hvdWxkIGJlIGEgV2luZG93cyBpY29uIGZpbGUgKC5pY28pIGJlaW5nIDE2eDE2IG9yIDMyeDMyCisjIHBpeGVscyBsYXJnZS4KKyMKKyMgaHRtbF9mYXZpY29uID0gTm9uZQorCisjIEFkZCBhbnkgcGF0aHMgdGhhdCBjb250YWluIGN1c3RvbSBzdGF0aWMgZmlsZXMgKHN1Y2ggYXMgc3R5bGUgc2hlZXRzKSBoZXJlLAorIyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4gVGhleSBhcmUgY29waWVkIGFmdGVyIHRoZSBidWlsdGluIHN0YXRpYyBmaWxlcywKKyMgc28gYSBmaWxlIG5hbWVkICJkZWZhdWx0LmNzcyIgd2lsbCBvdmVyd3JpdGUgdGhlIGJ1aWx0aW4gImRlZmF1bHQuY3NzIi4KK2h0bWxfc3RhdGljX3BhdGggPSBbJ19zdGF0aWMnXQorCisjIEFkZCBhbnkgZXh0cmEgcGF0aHMgdGhhdCBjb250YWluIGN1c3RvbSBmaWxlcyAoc3VjaCBhcyByb2JvdHMudHh0IG9yCisjIC5odGFjY2VzcykgaGVyZSwgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuIFRoZXNlIGZpbGVzIGFyZSBjb3BpZWQKKyMgZGlyZWN0bHkgdG8gdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50YXRpb24uCisjCisjIGh0bWxfZXh0cmFfcGF0aCA9IFtdCisKKyMgSWYgbm90IE5vbmUsIGEgJ0xhc3QgdXBkYXRlZCBvbjonIHRpbWVzdGFtcCBpcyBpbnNlcnRlZCBhdCBldmVyeSBwYWdlCisjIGJvdHRvbSwgdXNpbmcgdGhlIGdpdmVuIHN0cmZ0aW1lIGZvcm1hdC4KKyMgVGhlIGVtcHR5IHN0cmluZyBpcyBlcXVpdmFsZW50IHRvICclYiAlZCwgJVknLgorIworIyBodG1sX2xhc3RfdXBkYXRlZF9mbXQgPSBOb25lCisKKyMgSWYgdHJ1ZSwgU21hcnR5UGFudHMgd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgcXVvdGVzIGFuZCBkYXNoZXMgdG8KKyMgdHlwb2dyYXBoaWNhbGx5IGNvcnJlY3QgZW50aXRpZXMuCisjCisjIGh0bWxfdXNlX3NtYXJ0eXBhbnRzID0gVHJ1ZQorCisjIEN1c3RvbSBzaWRlYmFyIHRlbXBsYXRlcywgbWFwcyBkb2N1bWVudCBuYW1lcyB0byB0ZW1wbGF0ZSBuYW1lcy4KKyMKKyMgaHRtbF9zaWRlYmFycyA9IHt9CisKKyMgQWRkaXRpb25hbCB0ZW1wbGF0ZXMgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgdG8gcGFnZXMsIG1hcHMgcGFnZSBuYW1lcyB0bworIyB0ZW1wbGF0ZSBuYW1lcy4KKyMKKyMgaHRtbF9hZGRpdGlvbmFsX3BhZ2VzID0ge30KKworIyBJZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyMKKyMgaHRtbF9kb21haW5faW5kaWNlcyA9IFRydWUKKworIyBJZiBmYWxzZSwgbm8gaW5kZXggaXMgZ2VuZXJhdGVkLgorIworIyBodG1sX3VzZV9pbmRleCA9IFRydWUKKworIyBJZiB0cnVlLCB0aGUgaW5kZXggaXMgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhZ2VzIGZvciBlYWNoIGxldHRlci4KKyMKKyMgaHRtbF9zcGxpdF9pbmRleCA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgbGlua3MgdG8gdGhlIHJlU1Qgc291cmNlcyBhcmUgYWRkZWQgdG8gdGhlIHBhZ2VzLgorIworIyBodG1sX3Nob3dfc291cmNlbGluayA9IFRydWUKKworIyBJZiB0cnVlLCAiQ3JlYXRlZCB1c2luZyBTcGhpbngiIGlzIHNob3duIGluIHRoZSBIVE1MIGZvb3Rlci4gRGVmYXVsdCBpcyBUcnVlLgorIworIyBodG1sX3Nob3dfc3BoaW54ID0gVHJ1ZQorCisjIElmIHRydWUsICIoQykgQ29weXJpZ2h0IC4uLiIgaXMgc2hvd24gaW4gdGhlIEhUTUwgZm9vdGVyLiBEZWZhdWx0IGlzIFRydWUuCisjCisjIGh0bWxfc2hvd19jb3B5cmlnaHQgPSBUcnVlCisKKyMgSWYgdHJ1ZSwgYW4gT3BlblNlYXJjaCBkZXNjcmlwdGlvbiBmaWxlIHdpbGwgYmUgb3V0cHV0LCBhbmQgYWxsIHBhZ2VzIHdpbGwKKyMgY29udGFpbiBhIDxsaW5rPiB0YWcgcmVmZXJyaW5nIHRvIGl0LiAgVGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIG11c3QgYmUgdGhlCisjIGJhc2UgVVJMIGZyb20gd2hpY2ggdGhlIGZpbmlzaGVkIEhUTUwgaXMgc2VydmVkLgorIworIyBodG1sX3VzZV9vcGVuc2VhcmNoID0gJycKKworIyBUaGlzIGlzIHRoZSBmaWxlIG5hbWUgc3VmZml4IGZvciBIVE1MIGZpbGVzIChlLmcuICIueGh0bWwiKS4KKyMgaHRtbF9maWxlX3N1ZmZpeCA9IE5vbmUKKworIyBMYW5ndWFnZSB0byBiZSB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBIVE1MIGZ1bGwtdGV4dCBzZWFyY2ggaW5kZXguCisjIFNwaGlueCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGxhbmd1YWdlczoKKyMgICAnZGEnLCAnZGUnLCAnZW4nLCAnZXMnLCAnZmknLCAnZnInLCAnaHUnLCAnaXQnLCAnamEnCisjICAgJ25sJywgJ25vJywgJ3B0JywgJ3JvJywgJ3J1JywgJ3N2JywgJ3RyJywgJ3poJworIworIyBodG1sX3NlYXJjaF9sYW5ndWFnZSA9ICdlbicKKworIyBBIGRpY3Rpb25hcnkgd2l0aCBvcHRpb25zIGZvciB0aGUgc2VhcmNoIGxhbmd1YWdlIHN1cHBvcnQsIGVtcHR5IGJ5IGRlZmF1bHQuCisjICdqYScgdXNlcyB0aGlzIGNvbmZpZyB2YWx1ZS4KKyMgJ3poJyB1c2VyIGNhbiBjdXN0b20gY2hhbmdlIGBqaWViYWAgZGljdGlvbmFyeSBwYXRoLgorIworIyBodG1sX3NlYXJjaF9vcHRpb25zID0geyd0eXBlJzogJ2RlZmF1bHQnfQorCisjIFRoZSBuYW1lIG9mIGEgamF2YXNjcmlwdCBmaWxlIChyZWxhdGl2ZSB0byB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkpIHRoYXQKKyMgaW1wbGVtZW50cyBhIHNlYXJjaCByZXN1bHRzIHNjb3Jlci4gSWYgZW1wdHksIHRoZSBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KKyMKKyMgaHRtbF9zZWFyY2hfc2NvcmVyID0gJ3Njb3Jlci5qcycKKworIyBPdXRwdXQgZmlsZSBiYXNlIG5hbWUgZm9yIEhUTUwgaGVscCBidWlsZGVyLgoraHRtbGhlbHBfYmFzZW5hbWUgPSAnVGhyZWFkSGFybmVzc0F1dG9tYXRpb25kb2MnCisKKyMgLS0gT3B0aW9ucyBmb3IgTGFUZVggb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsYXRleF9lbGVtZW50cyA9IHsKKyAgICAgIyBUaGUgcGFwZXIgc2l6ZSAoJ2xldHRlcnBhcGVyJyBvciAnYTRwYXBlcicpLgorICAgICAjCisgICAgICMgJ3BhcGVyc2l6ZSc6ICdsZXR0ZXJwYXBlcicsCisKKyAgICAgIyBUaGUgZm9udCBzaXplICgnMTBwdCcsICcxMXB0JyBvciAnMTJwdCcpLgorICAgICAjCisgICAgICMgJ3BvaW50c2l6ZSc6ICcxMHB0JywKKworICAgICAjIEFkZGl0aW9uYWwgc3R1ZmYgZm9yIHRoZSBMYVRlWCBwcmVhbWJsZS4KKyAgICAgIworICAgICAjICdwcmVhbWJsZSc6ICcnLAorCisgICAgICMgTGF0ZXggZmlndXJlIChmbG9hdCkgYWxpZ25tZW50CisgICAgICMKKyAgICAgIyAnZmlndXJlX2FsaWduJzogJ2h0YnAnLAorfQorCisjIEdyb3VwaW5nIHRoZSBkb2N1bWVudCB0cmVlIGludG8gTGFUZVggZmlsZXMuIExpc3Qgb2YgdHVwbGVzCisjIChzb3VyY2Ugc3RhcnQgZmlsZSwgdGFyZ2V0IG5hbWUsIHRpdGxlLAorIyAgYXV0aG9yLCBkb2N1bWVudGNsYXNzIFtob3d0bywgbWFudWFsLCBvciBvd24gY2xhc3NdKS4KK2xhdGV4X2RvY3VtZW50cyA9IFsKKyAgICAobWFzdGVyX2RvYywgJ1RocmVhZEhhcm5lc3NBdXRvbWF0aW9uLnRleCcsIHUnVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbiBEb2N1bWVudGF0aW9uJywKKyAgICAgdSdZYWt1biBYdScsICdtYW51YWwnKSwKK10KKworIyBUaGUgbmFtZSBvZiBhbiBpbWFnZSBmaWxlIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkgdG8gcGxhY2UgYXQgdGhlIHRvcCBvZgorIyB0aGUgdGl0bGUgcGFnZS4KKyMKKyMgbGF0ZXhfbG9nbyA9IE5vbmUKKworIyBGb3IgIm1hbnVhbCIgZG9jdW1lbnRzLCBpZiB0aGlzIGlzIHRydWUsIHRoZW4gdG9wbGV2ZWwgaGVhZGluZ3MgYXJlIHBhcnRzLAorIyBub3QgY2hhcHRlcnMuCisjCisjIGxhdGV4X3VzZV9wYXJ0cyA9IEZhbHNlCisKKyMgSWYgdHJ1ZSwgc2hvdyBwYWdlIHJlZmVyZW5jZXMgYWZ0ZXIgaW50ZXJuYWwgbGlua3MuCisjCisjIGxhdGV4X3Nob3dfcGFnZXJlZnMgPSBGYWxzZQorCisjIElmIHRydWUsIHNob3cgVVJMIGFkZHJlc3NlcyBhZnRlciBleHRlcm5hbCBsaW5rcy4KKyMKKyMgbGF0ZXhfc2hvd191cmxzID0gRmFsc2UKKworIyBEb2N1bWVudHMgdG8gYXBwZW5kIGFzIGFuIGFwcGVuZGl4IHRvIGFsbCBtYW51YWxzLgorIworIyBsYXRleF9hcHBlbmRpY2VzID0gW10KKworIyBJZiBmYWxzZSwgbm8gbW9kdWxlIGluZGV4IGlzIGdlbmVyYXRlZC4KKyMKKyMgbGF0ZXhfZG9tYWluX2luZGljZXMgPSBUcnVlCisKKworIyAtLSBPcHRpb25zIGZvciBtYW51YWwgcGFnZSBvdXRwdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgT25lIGVudHJ5IHBlciBtYW51YWwgcGFnZS4gTGlzdCBvZiB0dXBsZXMKKyMgKHNvdXJjZSBzdGFydCBmaWxlLCBuYW1lLCBkZXNjcmlwdGlvbiwgYXV0aG9ycywgbWFudWFsIHNlY3Rpb24pLgorbWFuX3BhZ2VzID0gWworICAgIChtYXN0ZXJfZG9jLCAndGhyZWFkaGFybmVzc2F1dG9tYXRpb24nLCB1J1RocmVhZCBIYXJuZXNzIEF1dG9tYXRpb24gRG9jdW1lbnRhdGlvbicsCisgICAgIFthdXRob3JdLCAxKQorXQorCisjIElmIHRydWUsIHNob3cgVVJMIGFkZHJlc3NlcyBhZnRlciBleHRlcm5hbCBsaW5rcy4KKyMKKyMgbWFuX3Nob3dfdXJscyA9IEZhbHNlCisKKworIyAtLSBPcHRpb25zIGZvciBUZXhpbmZvIG91dHB1dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgR3JvdXBpbmcgdGhlIGRvY3VtZW50IHRyZWUgaW50byBUZXhpbmZvIGZpbGVzLiBMaXN0IG9mIHR1cGxlcworIyAoc291cmNlIHN0YXJ0IGZpbGUsIHRhcmdldCBuYW1lLCB0aXRsZSwgYXV0aG9yLAorIyAgZGlyIG1lbnUgZW50cnksIGRlc2NyaXB0aW9uLCBjYXRlZ29yeSkKK3RleGluZm9fZG9jdW1lbnRzID0gWworICAgIChtYXN0ZXJfZG9jLCAnVGhyZWFkSGFybmVzc0F1dG9tYXRpb24nLCB1J1RocmVhZCBIYXJuZXNzIEF1dG9tYXRpb24gRG9jdW1lbnRhdGlvbicsCisgICAgIGF1dGhvciwgJ1RocmVhZEhhcm5lc3NBdXRvbWF0aW9uJywgJ09uZSBsaW5lIGRlc2NyaXB0aW9uIG9mIHByb2plY3QuJywKKyAgICAgJ01pc2NlbGxhbmVvdXMnKSwKK10KKworIyBEb2N1bWVudHMgdG8gYXBwZW5kIGFzIGFuIGFwcGVuZGl4IHRvIGFsbCBtYW51YWxzLgorIworIyB0ZXhpbmZvX2FwcGVuZGljZXMgPSBbXQorCisjIElmIGZhbHNlLCBubyBtb2R1bGUgaW5kZXggaXMgZ2VuZXJhdGVkLgorIworIyB0ZXhpbmZvX2RvbWFpbl9pbmRpY2VzID0gVHJ1ZQorCisjIEhvdyB0byBkaXNwbGF5IFVSTCBhZGRyZXNzZXM6ICdmb290bm90ZScsICdubycsIG9yICdpbmxpbmUnLgorIworIyB0ZXhpbmZvX3Nob3dfdXJscyA9ICdmb290bm90ZScKKworIyBJZiB0cnVlLCBkbyBub3QgZ2VuZXJhdGUgYSBAZGV0YWlsbWVudSBpbiB0aGUgIlRvcCIgbm9kZSdzIG1lbnUuCisjCisjIHRleGluZm9fbm9fZGV0YWlsbWVudSA9IEZhbHNlCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2luZGV4LnJzdCBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvaW5kZXgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOTFkYjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZG9jL2luZGV4LnJzdApAQCAtMCwwICsxLDI1IEBACisuLiBUaHJlYWQgSGFybmVzcyBBdXRvbWF0aW9uIGRvY3VtZW50YXRpb24gbWFzdGVyIGZpbGUsIGNyZWF0ZWQgYnkKKyAgIHNwaGlueC1xdWlja3N0YXJ0IG9uIFdlZCBKdW4gMjkgMTU6MTg6MjQgMjAxNi4KKyAgIFlvdSBjYW4gYWRhcHQgdGhpcyBmaWxlIGNvbXBsZXRlbHkgdG8geW91ciBsaWtpbmcsIGJ1dCBpdCBzaG91bGQgYXQgbGVhc3QKKyAgIGNvbnRhaW4gdGhlIHJvb3QgYHRvY3RyZWVgIGRpcmVjdGl2ZS4KKworV2VsY29tZSB0byBUaHJlYWQgSGFybmVzcyBBdXRvbWF0aW9uJ3MgZG9jdW1lbnRhdGlvbiEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnRlbnRzOgorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMgorCisgICBxdWlja3N0YXJ0CisgICBhcGkvbW9kdWxlcworCisKKworSW5kaWNlcyBhbmQgdGFibGVzCis9PT09PT09PT09PT09PT09PT0KKworKiA6cmVmOmBnZW5pbmRleGAKKyogOnJlZjpgbW9kaW5kZXhgCisqIDpyZWY6YHNlYXJjaGAKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL2RvYy9xdWlja3N0YXJ0LnJzdCBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvcXVpY2tzdGFydC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllZjgzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9kb2MvcXVpY2tzdGFydC5yc3QKQEAgLTAsMCArMSw3OSBAQAorVGhyZWFkIEhhcm5lc3MgQXV0b21hdGlvbiBRdWljayBTdGFydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZXR1cAorLS0tLS0KKworIy4gSW5zdGFsbCBUaHJlYWQtVGVzdC1IYXJuZXNzMS4xLUFscGhhIHYxLjAtUmVsZWFzZV80MC4wCisjLiBJbnN0YWxsIHB5dGhvbiAyLjcKKyMuIEdldCB0aGUgT3BlblRocmVhZCBhbmQgc3dpdGNoIHRvIHRoZSBoYXJuZXNzIGF1dG9tYXRpb24gcGF0aDo6CisKKyAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL29wZW50aHJlYWQvb3BlbnRocmVhZC5naXQKKyAgICBjZCBvcGVudGhyZWFkL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbgorCisjLiBJbnN0YWxsIHB5dGhvbiBsaWJyYXJpZXMgZGVwZW5kZW5jaWVzOjoKKworICAgIHBpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQKKworIy4gVXBkYXRlIHNldHRpbmdzLgorCisgICAgSnVzdCBjb3B5IHRoZSBzYW1wbGUgYW5kIG1vZGlmeSBhY2NvcmRpbmcgdG8gdGhlIGNvbW1lbnRzIGNhcmVmdWxseTo6CisKKyAgICAgICAgY3AgYXV0b3RocmVhZGhhcm5lc3Mvc2V0dGluZ3Nfc2FtcGxlLnB5IGF1dG90aHJlYWRoYXJuZXNzL3NldHRpbmdzLnB5CisKK1J1biBzaW5nbGUgY2FzZQorLS0tLS0tLS0tLS0tLS0tCisKKzo6CisKKyAgICAjIGJhc2gKKyAgICAuL3N0YXJ0LnNoIFJvdXRlcl81XzFfMQorCisgICAgIyB3aW5kb3dzIGNvbW1hbmQgbGluZQorICAgIHN0YXJ0LmJhdCBSb3V0ZXJfNV8xXzEKKworUnVuIGFsbCBjYXNlcworLS0tLS0tLS0tLS0tLQorCis6OgorCisgICAgIyBiYXNoCisgICAgLi9zdGFydC5zaAorCisgICAgIyB3aW5kb3dzIGNvbW1hbmQgbGluZQorICAgIHN0YXJ0LmJhdAorCitUaGlzIHdpbGwgcmVjb3JkIHRoZSByZXN1bHRzIGluIHJlc3VsdC5qc29uLCBzbyB0aGF0IHlvdSBjYW4gY29udGludWUgcnVubmluZyBjYXNlcyBvbmNlIGJyb2tlbi4gWW91IGNhbiBhbHNvIGdldCBoZWxwIGluZm9ybWF0aW9uIHdpdGggYXJndW1lbnQgLWggb3IgLS1oZWxwLgorCitMaXN0IGRldmljZXMKKy0tLS0tLS0tLS0tLQorCis6OgorCisgICAgIyBiYXNoCisgICAgLi9zdGFydC5zaCAtbAorCisgICAgIyB3aW5kb3dzIGNvbW1hbmQgbGluZQorICAgIHN0YXJ0LmJhdCAtbAorCitDaGVjayBzaW5nbGUgZGV2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzo6CisKKyAgICAjIGJhc2gKKyAgICAuL3N0YXJ0LnNoIC1sIENPTTI4CisKKyAgICAjIHdpbmRvd3MgY29tbWFuZCBsaW5lCisgICAgc3RhcnQuYmF0IC1sIENPTTI4CisKK0dldCBIZWxwCistLS0tLS0tLS0KKworOjoKKworICAgICMgYmFzaAorICAgIC4vc3RhcnQuc2ggLWgKKworICAgICMgd2luZG93cyBjb21tYW5kIGxpbmUKKyAgICBzdGFydC5iYXQgLWgKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9nZW5jc3YucHkgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZ2VuY3N2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1ZDE1MmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vZ2VuY3N2LnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGpzb24KK2ltcG9ydCBzeXMKKworCitpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICBmaWxlbmFtZSA9IHN5cy5hcmd2WzFdCitlbHNlOgorICAgIGZpbGVuYW1lID0gJy4vcmVzdWx0Lmpzb24nCisKK2RlZiBnZXRfa2V5KGl0ZW0pOgorICAgIGRzID0gaXRlbVswXS5zcGxpdCgnXycpCisgICAgbm8gPSBpbnQoZHNbMV0pICogMTAwMDAgKyBpbnQoZHNbMl0pICogMTAwICsgaW50KGRzWzNdKQorICAgIHJvID0gZHNbMF0KKyAgICByZXR1cm4gJyVkLSVzJyAlIChubywgcm8pCisKK3Jlc3VsdCA9IGpzb24ubG9hZChvcGVuKGZpbGVuYW1lLCAncicpKQorbyA9IG9wZW4oJy4vcmVzdWx0LmNzdicsICd3JykKK28ud3JpdGUoJ0Nhc2UsU3RhdHVzLFN0YXJ0ZWQsU3RvcHBlZCxSZWFzb25cbicpCitmb3IgaywgdiBpbiBzb3J0ZWQocmVzdWx0Lml0ZW1zKCksIGtleT1nZXRfa2V5KToKKyAgICBvLndyaXRlKCclcywlcywlcywlcywlc1xuJyAlIChrLCAodlsncGFzc2VkJ10gYW5kICdQYXNzJykgb3IgJ0ZhaWwnLCB2WydzdGFydGVkJ10sIHZbJ3N0b3BwZWQnXSwgKHZbJ2Vycm9yJ10gb3IgJycpLnJlcGxhY2UoJ1xuJywgJyAnKSkpCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vcmVxdWlyZW1lbnRzLnR4dCBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9yZXF1aXJlbWVudHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjExN2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDIgQEAKK3B5c2VyaWFsCitzZWxlbml1bQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL3N0YXJ0LmJhdCBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9zdGFydC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhOWVlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hhcm5lc3MtYXV0b21hdGlvbi9zdGFydC5iYXQKQEAgLTAsMCArMSwyIEBACitjZCAlfmRwMAorcHl0aG9uIC11IC1tIGF1dG90aHJlYWRoYXJuZXNzLnJ1bm5lciAlKgpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL3N0YXJ0LnNoIGIvdG9vbHMvaGFybmVzcy1hdXRvbWF0aW9uL3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZDYzOWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLWF1dG9tYXRpb24vc3RhcnQuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2NkICQoZGlybmFtZSAkMCkKK3B5dGhvbiAtdSAtbSBhdXRvdGhyZWFkaGFybmVzcy5ydW5uZXIgJEAKZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtdGhjaS9NYWtlZmlsZS5hbSBiL3Rvb2xzL2hhcm5lc3MtdGhjaS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjdhYTJmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy10aGNpL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzggQEAKKyMKKyMgIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KKyMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlCisjICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworIyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKworaW5jbHVkZSAkKGFic190b3BfbmxidWlsZF9hdXRvdG9vbHNfZGlyKS9hdXRvbWFrZS9wcmUuYW0KKworRVhUUkFfRElTVCAgICAgICAgICAgICAgPSBcCisgICAgT3BlblRocmVhZC5weSAgICAgICAgIFwKKyAgICBPcGVuVGhyZWFkLnBuZyAgICAgICAgXAorICAgIGRldmljZUlucHV0RmllbGRzLnhtbCBcCisgICAgUkVBRE1FLm1kICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcG9zdC5hbQpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy10aGNpL09wZW5UaHJlYWQucG5nIGIvdG9vbHMvaGFybmVzcy10aGNpL09wZW5UaHJlYWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDM5ODAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLXRoY2kvT3BlblRocmVhZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvaGFybmVzcy10aGNpL09wZW5UaHJlYWQucHkgYi90b29scy9oYXJuZXNzLXRoY2kvT3BlblRocmVhZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY4MzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy10aGNpL09wZW5UaHJlYWQucHkKQEAgLTAsMCArMSwyNTkzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyMgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorPj4gVGhyZWFkIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UKKz4+IERldmljZSA6IE9wZW5UaHJlYWQgVEhDSQorPj4gQ2xhc3MgOiBPcGVuVGhyZWFkCisiIiIKKworaW1wb3J0IHJlCitpbXBvcnQgdGltZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gUXVldWUgaW1wb3J0IFF1ZXVlCisKK2ltcG9ydCBzZXJpYWwKK2Zyb20gSVRoY2kgaW1wb3J0IElUaGNpCitmcm9tIEdSTExpYnMuVXRpbGl0eU1vZHVsZXMuVGVzdCBpbXBvcnQgVGhyZWFkX0RldmljZV9Sb2xlLCBEZXZpY2VfRGF0YV9SZXF1aXJlbWVudCwgTWFjVHlwZQorZnJvbSBHUkxMaWJzLlV0aWxpdHlNb2R1bGVzLmVudW1zIGltcG9ydCBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfRGlyZWN0aW9uLCBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfVHlwZQorZnJvbSBHUkxMaWJzLlV0aWxpdHlNb2R1bGVzLk1vZHVsZUhlbHBlciBpbXBvcnQgTW9kdWxlSGVscGVyLCBUaHJlYWRSdW5uZXIKK2Zyb20gR1JMTGlicy5UaHJlYWRQYWNrZXQuUGxhdGZvcm1QYWNrZXRzIGltcG9ydCBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXQsIFBsYXRmb3JtUGFja2V0cworZnJvbSBHUkxMaWJzLlV0aWxpdHlNb2R1bGVzLlBsdWdpbnMuQUVTX0NNQUMgaW1wb3J0IFRocmVhZF9QQktERjIKKworTElORVNFUFggPSByZS5jb21waWxlKHInXHJcbnxcbicpCisiIiJyZWdleDogdXNlZCB0byBzcGxpdCBsaW5lcyIiIgorCitjbGFzcyBPcGVuVGhyZWFkKElUaGNpKToKKyAgICBMT1dFU1RfUE9TU0lCTEVfUEFSVEFUSU9OX0lEID0gMHgxCisgICAgTElOS19RVUFMSVRZX0NIQU5HRV9USU1FID0gMTAwCisKKyAgICAjZGVmIF9faW5pdF9fKHNlbGYsIFNlcmlhbFBvcnQ9Q09NUG9ydE5hbWUsIEVVST1NQUNfQWRkcmVzcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIHBvcnQgYW5kIGRlZmF1bHQgbmV0d29yayBwYXJhbWV0ZXJzCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICAqKmt3YXJnczogQXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgJ0VVSScgYW5kICdTZXJpYWxQb3J0JworICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5VSVN0YXR1c01zZyA9ICcnCisgICAgICAgICAgICBzZWxmLm1hYyA9IGt3YXJncy5nZXQoJ0VVSScpCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBrd2FyZ3MuZ2V0KCdTZXJpYWxQb3J0JykKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5BdXRvRFVURW5hYmxlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX2lzX25ldCA9IEZhbHNlICAgICAgICAgICAgICAgICAgIyB3aGV0aGVyIGRldmljZSBpcyB0aHJvdWdoIHNlcjJuZXQKKyAgICAgICAgICAgIHNlbGYubG9nU3RhdHVzID0geydzdG9wJzonc3RvcCcsICdydW5uaW5nJzoncnVubmluZycsICJwYXVzZVJlcSI6J3BhdXNlUmVxJywgJ3BhdXNlZCc6J3BhdXNlZCd9CisgICAgICAgICAgICBzZWxmLmpvaW5TdGF0dXMgPSB7J25vdHN0YXJ0Jzonbm90c3RhcnQnLCAnb25nb2luZyc6J29uZ29pbmcnLCAnc3VjY2VlZCc6J3N1Y2NlZWQnLCAiZmFpbGVkIjonZmFpbGVkJ30KKyAgICAgICAgICAgIHNlbGYubG9nVGhyZWFkU3RhdHVzID0gc2VsZi5sb2dTdGF0dXNbJ3N0b3AnXQorICAgICAgICAgICAgc2VsZi5pbnRpYWxpemUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJpbml0aWFsaXplKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIiIiY2xvc2UgdGhlIHNlcmlhbCBwb3J0IGNvbm5lY3Rpb24iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jbG9zZUNvbm5lY3Rpb24oKQorICAgICAgICAgICAgc2VsZi5kZXZpY2VDb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJkZWxldGUoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfZXhwZWN0KHNlbGYsIGV4cGVjdGVkLCB0aW1lcz01MCk6CisgICAgICAgICIiIkZpbmQgdGhlIGBleHBlY3RlZGAgbGluZSB3aXRoaW4gYHRpbWVzYCB0cmlhbHMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGV4cGVjdGVkICAgIHN0cjogdGhlIGV4cGVjdGVkIHN0cmluZworICAgICAgICAgICAgdGltZXMgICAgICAgaW50OiBudW1iZXIgb2YgdHJpYWxzCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnWyVzXSBFeHBlY3RpbmcgWyVzXScgJSAoc2VsZi5wb3J0LCBleHBlY3RlZCkKKworICAgICAgICByZXRyeV90aW1lcyA9IDEwCisgICAgICAgIHdoaWxlIHRpbWVzID4gMCBhbmQgcmV0cnlfdGltZXMgPiAwOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRsaW5lKCkKKyAgICAgICAgICAgIHByaW50ICdbJXNdIEdvdCBsaW5lIFslc10nICUgKHNlbGYucG9ydCwgbGluZSkKKworICAgICAgICAgICAgaWYgbGluZSA9PSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICBwcmludCAnWyVzXSBFeHBlY3RlZCBbJXNdJyAlIChzZWxmLnBvcnQsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICByZXRyeV90aW1lcyAtPSAxCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgICAgIHRpbWVzIC09IDEKKworICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2ZhaWxlZCB0byBmaW5kIGV4cGVjdGVkIHN0cmluZ1slc10nICUgZXhwZWN0ZWQpCisKKyAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT01MTIpOgorICAgICAgICBsb2dnaW5nLmluZm8oJyVzOiByZWFkaW5nJywgc2VsZi5wb3J0KQorICAgICAgICBpZiBzZWxmLl9pc19uZXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGUucmVjdihzaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlLnJlYWQoc2l6ZSkKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGxvZ2dpbmcuaW5mbygnJXM6IHdyaXRpbmcnLCBzZWxmLnBvcnQpCisgICAgICAgIGlmIHNlbGYuX2lzX25ldDoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLnNlbmRhbGwoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLndyaXRlKGRhdGEpCisKKyAgICBkZWYgX3JlYWRsaW5lKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGV4YWN0bHkgb25lIGxpbmUgZnJvbSB0aGUgZGV2aWNlCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIE5vbmUgb24gbm8gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2luZy5pbmZvKCclczogcmVhZGluZyBsaW5lJywgc2VsZi5wb3J0KQorICAgICAgICBpZiBsZW4oc2VsZi5fbGluZXMpID4gMToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9saW5lcy5wb3AoMCkKKworICAgICAgICB0YWlsID0gJycKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xpbmVzKToKKyAgICAgICAgICAgIHRhaWwgPSBzZWxmLl9saW5lcy5wb3AoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhaWwgKz0gc2VsZi5fcmVhZCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbignJXM6IE5vIG5ldyBkYXRhJywgc2VsZi5wb3J0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgc2VsZi5fbGluZXMgKz0gTElORVNFUFguc3BsaXQodGFpbCkKKyAgICAgICAgaWYgbGVuKHNlbGYuX2xpbmVzKSA+IDE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbGluZXMucG9wKDApCisKKyAgICBkZWYgX3NlbmRsaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJTZW5kIGV4YWN0bHkgb25lIGxpbmUgdG8gdGhlIGRldmljZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBsaW5lIHN0cjogZGF0YSBzZW5kIHRvIGRldmljZQorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2luZy5pbmZvKCclczogc2VuZGluZyBsaW5lJywgc2VsZi5wb3J0KQorICAgICAgICAjIGNsZWFyIGJ1ZmZlcgorICAgICAgICBzZWxmLl9saW5lcyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JlYWQoKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnJXM6IE5vdGhpbmcgY2xlYXJlZCcsIHNlbGYucG9ydCkKKworICAgICAgICBwcmludCAnc2VuZGluZyBbJXNdJyAlIGxpbmUKKyAgICAgICAgc2VsZi5fd3JpdGUobGluZSArICdcclxuJykKKworICAgICAgICAjIHdhaXQgZm9yIHdyaXRlIHRvIGNvbXBsZXRlCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgZGVmIF9fc2VuZENvbW1hbmQoc2VsZiwgY21kKToKKyAgICAgICAgIiIic2VuZCBzcGVjaWZpYyBjb21tYW5kIHRvIHJlZmVyZW5jZSB1bml0IG92ZXIgc2VyaWFsIHBvcnQKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgY21kOiBPcGVuVGhyZWFkIENMSSBzdHJpbmcKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgRG9uZTogc3VjY2Vzc2Z1bGx5IHNlbmQgdGhlIGNvbW1hbmQgdG8gcmVmZXJlbmNlIHVuaXQgYW5kIHBhcnNlIGl0CisgICAgICAgICAgICBWYWx1ZTogc3VjY2Vzc2Z1bGx5IHJldHJpZXZlIHRoZSBkZXNpcmVkIHZhbHVlIGZyb20gcmVmZXJlbmNlIHVuaXQKKyAgICAgICAgICAgIEVycm9yOiBzb21lIGVycm9ycyBvY2N1ciwgaW5kaWNhdGVzIGJ5IHRoZSBmb2xsb3dlZCBzcGVjaWZpYyBlcnJvciBudW1iZXIKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dpbmcuaW5mbygnJXM6IHNlbmRDb21tYW5kWyVzXScsIHNlbGYucG9ydCwgY21kKQorICAgICAgICBpZiBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9PSBzZWxmLmxvZ1N0YXR1c1sncnVubmluZyddOgorICAgICAgICAgICAgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPSBzZWxmLmxvZ1N0YXR1c1sncGF1c2VSZXEnXQorICAgICAgICAgICAgd2hpbGUgc2VsZi5sb2dUaHJlYWRTdGF0dXMgIT0gc2VsZi5sb2dTdGF0dXNbJ3BhdXNlZCddIGFuZCBzZWxmLmxvZ1RocmVhZFN0YXR1cyAhPSBzZWxmLmxvZ1N0YXR1c1snc3RvcCddOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGNvbW1hbmQgcmV0cmFuc21pdCB0aW1lcworICAgICAgICAgICAgcmV0cnlfdGltZXMgPSAzCisgICAgICAgICAgICB3aGlsZSByZXRyeV90aW1lcyA+IDA6CisgICAgICAgICAgICAgICAgcmV0cnlfdGltZXMgLT0gMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZGxpbmUoY21kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3QoY21kKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJyVzOiBmYWlsZWQgdG8gc2VuZCBjb21tYW5kWyVzXTogJXMnLCBzZWxmLnBvcnQsIGNtZCwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICBpZiByZXRyeV90aW1lcyA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBsaW5lID0gTm9uZQorICAgICAgICAgICAgcmVzcG9uc2UgPSBbXQorICAgICAgICAgICAgcmV0cnlfdGltZXMgPSAxMAorICAgICAgICAgICAgd2hpbGUgcmV0cnlfdGltZXMgPiAwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCclczogdGhlIHJlYWQgbGluZSBpc1slc10nLCBzZWxmLnBvcnQsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXRyeV90aW1lcyAtPSAxCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgaWYgbGluZSAhPSAnRG9uZSc6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCclczogZmFpbGVkIHRvIGZpbmQgZW5kIG9mIHJlc3BvbnNlJyAlIHNlbGYucG9ydCkKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnJXM6IHNlbmQgY29tbWFuZFslc10gZG9uZSEnLCBzZWxmLnBvcnQsIGNtZCkKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZW5kQ29tbWFuZCgpIEVycm9yOiAiICsgc3RyKGUpKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfX2dldElwNkFkZHJlc3Moc2VsZiwgYWRkcmVzc1R5cGUpOgorICAgICAgICAiIiJnZXQgc3BlY2lmaWMgdHlwZSBvZiBJUHY2IGFkZHJlc3MgY29uZmlndXJlZCBvbiB0aHJlYWQgZGV2aWNlCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFkZHJlc3NUeXBlOiB0aGUgc3BlY2lmaWMgdHlwZSBvZiBJUHY2IGFkZHJlc3MKKworICAgICAgICAgICAgbGluayBsb2NhbDogbGluayBsb2NhbCB1bmljYXN0IElQdjYgYWRkcmVzcyB0aGF0J3Mgd2l0aGluIG9uZS1ob3Agc2NvcGUKKyAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsIHVuaWNhc3QgSVB2NiBhZGRyZXNzCisgICAgICAgICAgICBybG9jOiBtZXNoIGxvY2FsIHVuaWNhc3QgSVB2NiBhZGRyZXNzIGZvciByb3V0aW5nIGluIHRocmVhZCBuZXR3b3JrCisgICAgICAgICAgICBtZXNoIEVJRDogbWVzaCBFbmRwb2ludCBJZGVudGlmaWVyCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIElQdjYgYWRkcmVzcyBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGFkZHJUeXBlID0gWydsaW5rIGxvY2FsJywgJ2dsb2JhbCcsICdybG9jJywgJ21lc2ggRUlEJ10KKyAgICAgICAgYWRkcnMgPSBbXQorICAgICAgICBnbG9iYWxBZGRyID0gW10KKyAgICAgICAgbGlua0xvY2FsNjRBZGRyID0gJycKKyAgICAgICAgcmxvY0FkZHIgPSAnJworICAgICAgICBtZXNoRUlEQWRkciA9ICcnCisKKyAgICAgICAgYWRkcnMgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ2lwYWRkcicpCisgICAgICAgIGZvciBpcDZBZGRyIGluIGFkZHJzOgorICAgICAgICAgICAgaWYgaXA2QWRkciA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaXA2QWRkclByZWZpeCA9IGlwNkFkZHIuc3BsaXQoJzonKVswXQorICAgICAgICAgICAgaWYgaXA2QWRkclByZWZpeCA9PSAnZmU4MCc6CisgICAgICAgICAgICAgICAgIyBsaW5rIGxvY2FsIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBpZiBpcDZBZGRyLnNwbGl0KCc6JylbNF0gIT0gJzAnOgorICAgICAgICAgICAgICAgICAgICBsaW5rTG9jYWw2NEFkZHIgPSBpcDZBZGRyCisgICAgICAgICAgICBlbGlmIGlwNkFkZHJQcmVmaXggPT0gJ2ZkMDAnOgorICAgICAgICAgICAgICAgICMgbWVzaCBsb2NhbCBhZGRyZXNzCisgICAgICAgICAgICAgICAgaWYgaXA2QWRkci5zcGxpdCgnOicpWzRdID09ICcwJzoKKyAgICAgICAgICAgICAgICAgICAgIyBybG9jCisgICAgICAgICAgICAgICAgICAgIHJsb2NBZGRyID0gaXA2QWRkcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgbWVzaCBFSUQKKyAgICAgICAgICAgICAgICAgICAgbWVzaEVJREFkZHIgPSBpcDZBZGRyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZ2xvYmFsIGlwdjYgYWRkcmVzcworICAgICAgICAgICAgICAgIGlmIGlwNkFkZHIgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsQWRkci5hcHBlbmQoaXA2QWRkcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgYWRkcmVzc1R5cGUgPT0gYWRkclR5cGVbMF06CisgICAgICAgICAgICByZXR1cm4gbGlua0xvY2FsNjRBZGRyCisgICAgICAgIGVsaWYgYWRkcmVzc1R5cGUgPT0gYWRkclR5cGVbMV06CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsQWRkcgorICAgICAgICBlbGlmIGFkZHJlc3NUeXBlID09IGFkZHJUeXBlWzJdOgorICAgICAgICAgICAgcmV0dXJuIHJsb2NBZGRyCisgICAgICAgIGVsaWYgYWRkcmVzc1R5cGUgPT0gYWRkclR5cGVbM106CisgICAgICAgICAgICByZXR1cm4gbWVzaEVJREFkZHIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfX3NldERldmljZU1vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgICIiInNldCB0aHJlYWQgZGV2aWNlIG1vZGU6CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgbW9kZTogdGhyZWFkIGRldmljZSBtb2RlCisgICAgICAgICAgIHI6IHJ4LW9uLXdoZW4taWRsZQorICAgICAgICAgICBzOiBzZWN1cmUgSUVFRSA4MDIuMTUuNCBkYXRhIHJlcXVlc3QKKyAgICAgICAgICAgZDogZnVsbCBmdW5jdGlvbiBkZXZpY2UKKyAgICAgICAgICAgbjogZnVsbCBuZXR3b3JrIGRhdGEKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgZGV2aWNlIG1vZGUKKyAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBkZXZpY2UgbW9kZQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgX19zZXREZXZpY2VNb2RlJworICAgICAgICBwcmludCBtb2RlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdtb2RlICVzJyAlIG1vZGUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0RGV2aWNlTW9kZSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fc2V0Um91dGVyVXBncmFkZVRocmVzaG9sZChzZWxmLCBpVGhyZXNob2xkKToKKyAgICAgICAgIiIic2V0IHJvdXRlciB1cGdyYWRlIHRocmVzaG9sZAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpVGhyZXNob2xkOiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSByb3V0ZXJzIG9uIHRoZSBUaHJlYWQgbmV0d29yaworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIGJlbG93IHdoaWNoIGEgUkVFRCBtYXkgZGVjaWRlIHRvIGJlY29tZSBhIFJvdXRlci4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgX19zZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkJworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAncm91dGVydXBncmFkZXRocmVzaG9sZCAlcycgJSBzdHIoaVRocmVzaG9sZCkKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19zZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoc2VsZiwgaVRocmVzaG9sZCk6CisgICAgICAgICIiInNldCByb3V0ZXIgZG93bmdyYWRlIHRocmVzaG9sZAorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpVGhyZXNob2xkOiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSByb3V0ZXJzIG9uIHRoZSBUaHJlYWQgbmV0d29yaworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIGFib3ZlIHdoaWNoIGFuIGFjdGl2ZSByb3V0ZXIgbWF5IGRlY2lkZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIGEgY2hpbGQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBST1VURVJfRE9XTkdSQURFX1RIUkVTSE9MRAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IFJPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xECisgICAgICAgICIiIgorICAgICAgICBwcmludCAnY2FsbCBfX3NldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ3JvdXRlcmRvd25ncmFkZXRocmVzaG9sZCAlcycgJSBzdHIoaVRocmVzaG9sZCkKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfX3NldFJvdXRlclNlbGVjdGlvbkppdHRlcihzZWxmLCBpUm91dGVySml0dGVyKToKKyAgICAgICAgIiIic2V0IFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSIHBhcmFtZXRlciBmb3IgUkVFRCB0byB1cGdyYWRlIHRvIFJvdXRlcgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpUm91dGVySml0dGVyOiBhIHJhbmRvbSBwZXJpb2QgcHJpb3IgdG8gcmVxdWVzdCBSb3V0ZXIgSUQgZm9yIFJFRUQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIFJPVVRFUl9TRUxFQ1RJT05fSklUVEVSCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgUk9VVEVSX1NFTEVDVElPTl9KSVRURVIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIF9zZXRSb3V0ZXJTZWxlY3Rpb25KaXR0ZXInCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdyb3V0ZXJzZWxlY3Rpb25qaXR0ZXIgJXMnICUgc3RyKGlSb3V0ZXJKaXR0ZXIpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0Um91dGVyU2VsZWN0aW9uSml0dGVyKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19lbmFibGVXaGl0ZUxpc3Qoc2VsZik6CisgICAgICAgICIiImVuYWJsZSB3aGl0ZSBsaXN0IGZpbHRlcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGVuYWJsZSB3aGl0ZSBsaXN0IGZpbHRlcgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gZW5hYmxlIHdoaXRlIGxpc3QgZmlsdGVyCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnY2FsbCBlbmFibGVXaGl0ZUxpc3QnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnd2hpdGVsaXN0IGVuYWJsZScpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmlzV2hpdGVMaXN0RW5hYmxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiZW5hYmxlV2hpdGVMaXN0KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19lbmFibGVCbGFja0xpc3Qoc2VsZik6CisgICAgICAgICIiImVuYWJsZSBibGFjayBsaXN0IGZpbHRlcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGVuYWJsZSBibGFjayBsaXN0IGZpbHRlcgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gZW5hYmxlIGJsYWNrIGxpc3QgZmlsdGVyCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnY2FsbCBlbmFibGVCbGFja0xpc3QnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnYmxhY2tsaXN0IGVuYWJsZScpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmlzQmxhY2tMaXN0RW5hYmxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiZW5hYmxlQmxhY2tMaXN0KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19kaXNhYmxlV2hpdGVMaXN0KHNlbGYpOgorICAgICAgICAiIiJkaXNhYmxlIHdoaXRlIGxpc3QgZmlsdGVyCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gZGlzYWJsZSB3aGl0ZSBsaXN0IGZpbHRlcgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gZGlzYWJsZSB3aGl0ZSBsaXN0IGZpbHRlcgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgZGlzYWJsZVdoaXRlTGlzdCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCd3aGl0ZWxpc3QgZGlzYWJsZScpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmlzV2hpdGVMaXN0RW5hYmxlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImRpc2FibGVXaGl0ZUxpc3QoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBfX2Rpc2FibGVCbGFja0xpc3Qoc2VsZik6CisgICAgICAgICIiImRpc2FibGUgYmxhY2sgbGlzdCBmaWx0ZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBkaXNhYmxlIGJsYWNrIGxpc3QgZmlsdGVyCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBkaXNhYmxlIGJsYWNrIGxpc3QgZmlsdGVyCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnY2FsbCBkaXNhYmxlQmxhY2tMaXN0JworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ2JsYWNrbGlzdCBkaXNhYmxlJylbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuaXNCbGFja0xpc3RFbmFibGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiZGlzYWJsZUJsYWNrTGlzdCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fc3RhcnRPcGVuVGhyZWFkKHNlbGYpOgorICAgICAgICAiIiJzdGFydCBPcGVuVGhyZWFkIHN0YWNrCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc3RhcnQgT3BlblRocmVhZCBzdGFjayBhbmQgdGhyZWFkIGludGVyZmFjZSB1cAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc3RhcnQgT3BlblRocmVhZCBzdGFjaworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgc3RhcnRPcGVuVGhyZWFkJworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ2RhdGFzZXQgY29tbWl0IGFjdGl2ZScpWzBdICE9ICdEb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdmYWlsZWQgdG8gY29tbWl0IGFjdGl2ZSBkYXRhc2V0JykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IEZhbHNlCisKKyAgICAgICAgICAgICMgcmVzdG9yZSB3aGl0ZWxpc3QgaWYgcmVqb2luIGFmdGVyIHJlc2V0CisgICAgICAgICAgICBpZiBzZWxmLmlzUG93ZXJEb3duIGFuZCBzZWxmLmlzV2hpdGVMaXN0RW5hYmxlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9fZW5hYmxlV2hpdGVMaXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgYWRkciBpbiBzZWxmLl93aGl0ZUxpc3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkQWxsb3dNQUMoYWRkcikKKworICAgICAgICAgICAgIyByZXN0b3JlIGJsYWNrbGlzdCBpZiByZWpvaW4gYWZ0ZXIgcmVzZXQKKyAgICAgICAgICAgIGlmIHNlbGYuaXNQb3dlckRvd24gYW5kIHNlbGYuaXNCbGFja0xpc3RFbmFibGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX19lbmFibGVCbGFja0xpc3QoKQorICAgICAgICAgICAgICAgIGZvciBhZGRyIGluIHNlbGYuX2JsYWNrTGlzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRCbG9ja2VkTUFDKGFkZHIpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgnaWZjb25maWcgdXAnKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5fX3NldFJvdXRlclNlbGVjdGlvbkppdHRlcigxKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZCgndGhyZWFkIHN0YXJ0JylbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmlzUG93ZXJEb3duID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInN0YXJ0T3BlblRocmVhZCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fc3RvcE9wZW5UaHJlYWQoc2VsZik6CisgICAgICAgICIiInN0b3AgT3BlblRocmVhZCBzdGFjaworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHN0b3AgT3BlblRocmVhZCBzdGFjayBhbmQgdGhyZWFkIGludGVyZmFjZSBkb3duCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzdG9wIE9wZW5UaHJlYWQgc3RhY2sKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICdjYWxsIHN0b3BPcGVuVGhyZWFkJworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ3RocmVhZCBzdG9wJylbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ2lmY29uZmlnIGRvd24nKVswXSA9PSAnRG9uZScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInN0b3BPcGVuVGhyZWFkKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19pc09wZW5UaHJlYWRSdW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJjaGVjayB3aGV0aGVyIG9yIG5vdCBPcGVuVGhyZWFkIGlzIHJ1bm5pbmcKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogT3BlblRocmVhZCBpcyBydW5uaW5nCisgICAgICAgICAgICBGYWxzZTogT3BlblRocmVhZCBpcyBub3QgcnVubmluZworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJ2NhbGwgaXNPcGVuVGhyZWFkUnVubmluZycKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgnc3RhdGUnKVswXSAhPSAnZGlzYWJsZWQnCisKKyAgICAjIHJsb2MxNiBtaWdodCBiZSBoZXggc3RyaW5nIG9yIGludGVnZXIsIG5lZWQgdG8gcmV0dXJuIGFjdHVhbCBhbGxvY2F0ZWQgcm91dGVyIGlkCisgICAgZGVmIF9fY29udmVydFJsb2NUb1JvdXRlcklkKHNlbGYsIHhSbG9jMTYpOgorICAgICAgICAiIiJtYXBwaW5nIFJsb2MxNiB0byByb3V0ZXIgaWQKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgeFJsb2MxNjogaGV4IHJsb2MxNiBzaG9ydCBhZGRyZXNzCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGFjdHVhbCByb3V0ZXIgaWQgYWxsb2NhdGVkIGJ5IGxlYWRlcgorICAgICAgICAiIiIKKyAgICAgICAgcm91dGVyTGlzdCA9IFtdCisgICAgICAgIHJvdXRlckxpc3QgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ3JvdXRlciBsaXN0JylbMF0uc3BsaXQoKQorICAgICAgICBwcmludCByb3V0ZXJMaXN0CisgICAgICAgIHByaW50IHhSbG9jMTYKKworICAgICAgICBmb3IgaW5kZXggaW4gcm91dGVyTGlzdDoKKyAgICAgICAgICAgIHJvdXRlciA9IFtdCisgICAgICAgICAgICBjbWQgPSAncm91dGVyICVzJyAlIGluZGV4CisgICAgICAgICAgICByb3V0ZXIgPSBzZWxmLl9fc2VuZENvbW1hbmQoY21kKQorCisgICAgICAgICAgICBmb3IgbGluZSBpbiByb3V0ZXI6CisgICAgICAgICAgICAgICAgaWYgJ0RvbmUnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiAnUm91dGVyIElEJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICByb3V0ZXJpZCA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgICAgIGVsaWYgJ1Jsb2MnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJsb2MxNiA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBwcm9jZXNzIGlucHV0IHJsb2MxNgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4UmxvYzE2LCBzdHIpOgorICAgICAgICAgICAgICAgIHJsb2MxNiA9ICcweCcgKyBybG9jMTYKKyAgICAgICAgICAgICAgICBpZiBybG9jMTYgPT0geFJsb2MxNjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlcmlkCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoeFJsb2MxNiwgaW50KToKKyAgICAgICAgICAgICAgICBpZiBpbnQocmxvYzE2LCAxNikgPT0geFJsb2MxNjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlcmlkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9fY29udmVydElwNlByZWZpeFN0cmluZ1RvSXA2QWRkcmVzcyhzZWxmLCBzdHJJcDZQcmVmaXgpOgorICAgICAgICAiIiJjb252ZXJ0IElQdjYgcHJlZml4IHN0cmluZyB0byBJUHY2IGRvdHRlZC1xdWFkIGZvcm1hdAorICAgICAgICAgICBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgMjAwMTAwMDAwMDAwMDAwMCAtPiAyMDAxOjoKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgc3RySXA2UHJlZml4OiBJUHY2IGFkZHJlc3Mgc3RyaW5nCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIElQdjYgYWRkcmVzcyBkb3R0ZWQtcXVhZCBmb3JtYXQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzdHJJcDZQcmVmaXhbMDo0XSArICc6OicKKworICAgIGRlZiBfX2NvbnZlcnRMb25nVG9TdHJpbmcoc2VsZiwgaVZhbHVlKToKKyAgICAgICAgIiIiY29udmVydCBhIGxvbmcgaGV4IGludGVnZXIgdG8gc3RyaW5nCisgICAgICAgICAgIHJlbW92ZSAnMHgnIGFuZCAnTCcgcmV0dXJuIHN0cmluZworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpVmFsdWU6IGxvbmcgaW50ZWdlciBpbiBoZXggZm9ybWF0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIHN0cmluZyBvZiB0aGlzIGxvbmcgaW50ZWdlciB3aXRob3V0ICIweCIgYW5kICJMIgorICAgICAgICAiIiIKKyAgICAgICAgc3RyaW5nID0gJycKKyAgICAgICAgc3RyVmFsdWUgPSBzdHIoaGV4KGlWYWx1ZSkpCisKKyAgICAgICAgc3RyaW5nID0gc3RyVmFsdWUubHN0cmlwKCcweCcpCisgICAgICAgIHN0cmluZyA9IHN0cmluZy5yc3RyaXAoJ0wnKQorCisgICAgICAgIHJldHVybiBzdHJpbmcKKworICAgIGRlZiBfX3JlYWRDb21taXNzaW9uaW5nTG9ncyhzZWxmLCBkdXJhdGlvbkluU2Vjb25kcyk6CisgICAgICAgICIiInJlYWQgbG9ncyBkdXJpbmcgdGhlIGNvbW1pc3Npb25pbmcgcHJvY2VzcworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkdXJhdGlvbkluU2Vjb25kczogdGltZSBkdXJhdGlvbiBmb3IgcmVhZGluZyBjb21taXNzaW9uaW5nIGxvZ3MKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQ29tbWlzc2lvbmluZyBsb2dzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9IHNlbGYubG9nU3RhdHVzWydydW5uaW5nJ10KKyAgICAgICAgbG9ncyA9IFF1ZXVlKCkKKyAgICAgICAgdF9lbmQgPSB0aW1lLnRpbWUoKSArIGR1cmF0aW9uSW5TZWNvbmRzCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgdF9lbmQ6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMykKKyAgICAgICAgICAgIGlmIHNlbGYubG9nVGhyZWFkU3RhdHVzID09IHNlbGYubG9nU3RhdHVzWydwYXVzZWQnXToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBwcmludCBsaW5lCisgICAgICAgICAgICAgICAgICAgIGxvZ3MucHV0KGxpbmUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgIkpvaW4gc3VjY2VzcyIgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuam9pbkNvbW1pc3Npb25lZFN0YXR1cyA9IHNlbGYuam9pblN0YXR1c1snc3VjY2VlZCddCisgICAgICAgICAgICAgICAgICAgIGVsaWYgIkpvaW4gZmFpbGVkIiBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5qb2luQ29tbWlzc2lvbmVkU3RhdHVzID0gc2VsZi5qb2luU3RhdHVzWydmYWlsZWQnXQorCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgaWYgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPT0gc2VsZi5sb2dTdGF0dXNbJ3BhdXNlUmVxJ106CisgICAgICAgICAgICAgICAgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPSBzZWxmLmxvZ1N0YXR1c1sncGF1c2VkJ10KKworICAgICAgICBzZWxmLmxvZ1RocmVhZFN0YXR1cyA9IHNlbGYubG9nU3RhdHVzWydzdG9wJ10KKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgIGRlZiBfX2NvbnZlcnRDaGFubmVsTWFzayhzZWxmLCBjaGFubmVsc0FycmF5KToKKyAgICAgICAgIiIiY29udmVydCBjaGFubmVsc0FycmF5IHRvIGJpdG1hc2sgZm9ybWF0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGNoYW5uZWxzQXJyYXk6IGNoYW5uZWwgYXJyYXkgKGkuZS4gWzIxLCAyMl0pCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGJpdG1hc2sgZm9ybWF0IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBjaGFubmVsIGFycmF5CisgICAgICAgICIiIgorICAgICAgICBtYXNrU2V0ID0gMAorCisgICAgICAgIGZvciBlYWNoQ2hhbm5lbCBpbiBjaGFubmVsc0FycmF5OgorICAgICAgICAgICAgbWFzayA9IDEgPDwgZWFjaENoYW5uZWwKKyAgICAgICAgICAgIG1hc2tTZXQgPSAobWFza1NldCB8IG1hc2spCisKKyAgICAgICAgcmV0dXJuIG1hc2tTZXQKKworICAgIGRlZiBfX3NldENoYW5uZWxNYXNrKHNlbGYsIGNoYW5uZWxNYXNrKToKKyAgICAgICAgcHJpbnQgJ2NhbGwgX3NldENoYW5uZWxNYXNrJworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBjaGFubmVsbWFzayAlcycgJSBjaGFubmVsTWFzaworICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZCkgPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldENoYW5uZWxNYXNrKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgX19zZXRTZWN1cml0eVBvbGljeShzZWxmLCBzZWN1cml0eVBvbGljeVNlY3MsIHNlY3VyaXR5UG9saWN5RmxhZ3MpOgorICAgICAgICBwcmludCAnY2FsbCBfc2V0U2VjdXJpdHlQb2xpY3knCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IHNlY3VyaXR5cG9saWN5ICVzICVzJyAlIChzdHIoc2VjdXJpdHlQb2xpY3lTZWNzKSwgc2VjdXJpdHlQb2xpY3lGbGFncykKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRTZWN1cml0eVBvbGljeSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIF9fc2V0S2V5U3dpdGNoR3VhcmRUaW1lKHNlbGYsIGlLZXlTd2l0Y2hHdWFyZFRpbWUpOgorICAgICAgICAiIiIgc2V0IHRoZSBLZXkgc3dpdGNoIGd1YXJkIHRpbWUKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaUtleVN3aXRjaEd1YXJkVGltZToga2V5IHN3aXRjaCBndWFyZCB0aW1lCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IGtleSBzd2l0Y2ggZ3VhcmQgdGltZQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IGtleSBzd2l0Y2ggZ3VhcmQgdGltZQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0S2V5U3dpdGNoR3VhcmRUaW1lJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBpS2V5U3dpdGNoR3VhcmRUaW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdrZXlzZXF1ZW5jZSBndWFyZHRpbWUgJXMnICUgc3RyKGlLZXlTd2l0Y2hHdWFyZFRpbWUpCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRLZXlTd2l0Y2hHdWFyZFRpbWUoKSBFcnJvcjsgIiArIHN0cihlKSkKKworICAgIGRlZiBfX2dldENvbW1pc3Npb25lclNlc3Npb25JZChzZWxmKToKKyAgICAgICAgIiIiIGdldCB0aGUgY29tbWlzc2lvbmVyIHNlc3Npb24gaWQgYWxsb2NhdGVkIGZyb20gTGVhZGVyICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRDb21taXNzaW9uZXJTZXNzaW9uSWQnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ2NvbW1pc3Npb25lciBzZXNzaW9uaWQnKVswXQorCisgICAgZGVmIF9jb25uZWN0KHNlbGYpOgorICAgICAgICBwcmludCAnTXkgcG9ydCBpcyAlcycgJSBzZWxmLnBvcnQKKyAgICAgICAgaWYgc2VsZi5wb3J0LnN0YXJ0c3dpdGgoJ0NPTScpOgorICAgICAgICAgICAgc2VsZi5oYW5kbGUgPSBzZXJpYWwuU2VyaWFsKHNlbGYucG9ydCwgMTE1MjAwLCB0aW1lb3V0PTApCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBzZWxmLmhhbmRsZS53cml0ZSgnXHJcbicpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIHNlbGYuX2lzX25ldCA9IEZhbHNlCisgICAgICAgIGVsaWYgJzonIGluIHNlbGYucG9ydDoKKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLnBvcnQuc3BsaXQoJzonKQorICAgICAgICAgICAgc2VsZi5oYW5kbGUgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGUuc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgIHNlbGYuX2lzX25ldCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5rbm93biBwb3J0IHNjaGVtYScpCisgICAgICAgIHNlbGYuVUlTdGF0dXNNc2cgPSBzZWxmLmdldFZlcnNpb25OdW1iZXIoKQorCisgICAgZGVmIGNsb3NlQ29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIiIiY2xvc2UgY3VycmVudCBzZXJpYWwgcG9ydCBjb25uZWN0aW9uIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGNsb3NlQ29ubmVjdGlvbicgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5oYW5kbGU6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gTm9uZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJjbG9zZUNvbm5lY3Rpb24oKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBpbnRpYWxpemUoc2VsZik6CisgICAgICAgICIiImluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0IHdpdGggYmF1ZHJhdGUsIHRpbWVvdXQgcGFyYW1ldGVycyIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBpbnRpYWxpemUnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaW5pdCBzZXJpYWwgcG9ydAorICAgICAgICAgICAgc2VsZi5fY29ubmVjdCgpCisgICAgICAgICAgICBzZWxmLmRldmljZUNvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiaW50aWFsaXplKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisgICAgICAgICAgICBzZWxmLmRldmljZUNvbm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgc2V0TmV0d29ya05hbWUoc2VsZiwgbmV0d29ya05hbWU9J0dSTCcpOgorICAgICAgICAiIiJzZXQgVGhyZWFkIE5ldHdvcmsgbmFtZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBuZXR3b3JrTmFtZTogdGhlIG5ldHdvcmtuYW1lIHN0cmluZyB0byBiZSBzZXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIFRocmVhZCBOZXR3b3JrbmFtZQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBUaHJlYWQgTmV0d29ya25hbWUKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldE5ldHdvcmtOYW1lJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBuZXR3b3JrTmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnbmV0d29ya25hbWUgJXMnICUgbmV0d29ya05hbWUKKyAgICAgICAgICAgIGRhdGFzZXRDbWQgPSAnZGF0YXNldCBuZXR3b3JrbmFtZSAlcycgJSBuZXR3b3JrTmFtZQorICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnIGFuZCBzZWxmLl9fc2VuZENvbW1hbmQoZGF0YXNldENtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldE5ldHdvcmtOYW1lKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TmV0d29ya05hbWUoc2VsZik6CisgICAgICAgICIiImdldCBUaHJlYWQgTmV0d29yayBuYW1lIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE5ldHdvcmtuYW1lJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCduZXR3b3JrbmFtZScpWzBdCisKKyAgICBkZWYgc2V0Q2hhbm5lbChzZWxmLCBjaGFubmVsPTExKToKKyAgICAgICAgIiIic2V0IGNoYW5uZWwgb2YgVGhyZWFkIGRldmljZSBvcGVyYXRlcyBvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgY2hhbm5lbDoKKyAgICAgICAgICAgICAgICAgICAgKDAgIC0gMTA6IFJlc2VydmVkKQorICAgICAgICAgICAgICAgICAgICAoMTEgLSAyNjogMi40R0h6IGNoYW5uZWxzKQorICAgICAgICAgICAgICAgICAgICAoMjcgLSA2NTUzNTogUmVzZXJ2ZWQpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBjaGFubmVsCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgdGhlIGNoYW5uZWwKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldENoYW5uZWwnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGNoYW5uZWwKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2NoYW5uZWwgJXMnICUgY2hhbm5lbAorICAgICAgICAgICAgZGF0YXNldENtZCA9ICdkYXRhc2V0IGNoYW5uZWwgJXMnICUgY2hhbm5lbAorICAgICAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnIGFuZCBzZWxmLl9fc2VuZENvbW1hbmQoZGF0YXNldENtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldENoYW5uZWwoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRDaGFubmVsKHNlbGYpOgorICAgICAgICAiIiJnZXQgY3VycmVudCBjaGFubmVsIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldENoYW5uZWwnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ2NoYW5uZWwnKVswXQorCisgICAgZGVmIHNldE1BQyhzZWxmLCB4RVVJKToKKyAgICAgICAgIiIic2V0IHRoZSBleHRlbmRlZCBhZGRyZXNzcyBvZiBUaHJlYWQgZGV2aWNlCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhFVUk6IGV4dGVuZGVkIGFkZHJlc3MgaW4gaGV4IGZvcm1hdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgZXh0ZW5kZWQgYWRkcmVzcworICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBleHRlbmRlZCBhZGRyZXNzCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRNQUMnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHhFVUkKKyAgICAgICAgYWRkcmVzczY0ID0gJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHhFVUk6CisgICAgICAgICAgICAgICAgYWRkcmVzczY0ID0gc2VsZi5tYWMKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeEVVSSwgc3RyKToKKyAgICAgICAgICAgICAgICBhZGRyZXNzNjQgPSBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyh4RVVJKQorCisgICAgICAgICAgICAgICAgIyBwcmVwZW5kIDAgYXQgdGhlIGJlZ2lubmluZworICAgICAgICAgICAgICAgIGlmIGxlbihhZGRyZXNzNjQpIDwgMTY6CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M2NCA9IGFkZHJlc3M2NC56ZmlsbCgxNikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgYWRkcmVzczY0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFkZHJlc3M2NCA9IHhFVUkKKworICAgICAgICAgICAgY21kID0gJ2V4dGFkZHIgJXMnICUgYWRkcmVzczY0CisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLm1hYyA9IGFkZHJlc3M2NAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRNQUMoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRNQUMoc2VsZiwgYlR5cGU9TWFjVHlwZS5SYW5kb21NYWMpOgorICAgICAgICAiIiJnZXQgb25lIHNwZWNpZmljIHR5cGUgb2YgTUFDIGFkZHJlc3MKKyAgICAgICAgICAgY3VycmVudGx5IE9wZW5UaHJlYWQgb25seSBzdXBwb3J0cyBSYW5kb20gTUFDIGFkZHJlc3MKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYlR5cGU6IGluZGljYXRlIHdoaWNoIGtpbmQgb2YgTUFDIGFkZHJlc3MgaXMgcmVxdWlyZWQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgc3BlY2lmaWMgdHlwZSBvZiBNQUMgYWRkcmVzcworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0TUFDJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBiVHlwZQorICAgICAgICAjIGlmIHBvd2VyIGRvd24gaGFwcGVucywgcmV0dXJuIGV4dGVuZGVkIGFkZHJlc3MgYXNzaWduZWQgcHJldmlvdXNseQorICAgICAgICBpZiBzZWxmLmlzUG93ZXJEb3duOgorICAgICAgICAgICAgbWFjQWRkcjY0ID0gc2VsZi5tYWMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGJUeXBlID09IE1hY1R5cGUuRmFjdG9yeU1hYzoKKyAgICAgICAgICAgICAgICBtYWNBZGRyNjQgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ2V1aTY0JylbMF0KKyAgICAgICAgICAgIGVsaWYgYlR5cGUgPT0gTWFjVHlwZS5IYXNoTWFjOgorICAgICAgICAgICAgICAgIG1hY0FkZHI2NCA9IHNlbGYuX19zZW5kQ29tbWFuZCgnaGFzaG1hY2FkZHInKVswXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYWNBZGRyNjQgPSBzZWxmLl9fc2VuZENvbW1hbmQoJ2V4dGFkZHInKVswXQorICAgICAgICBwcmludCBtYWNBZGRyNjQKKworICAgICAgICByZXR1cm4gaW50KG1hY0FkZHI2NCwgMTYpCisKKyAgICBkZWYgZ2V0TEw2NChzZWxmKToKKyAgICAgICAgIiIiZ2V0IGxpbmsgbG9jYWwgdW5pY2FzdCBJUHY2IGFkZHJlc3MiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0TEw2NCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19nZXRJcDZBZGRyZXNzKCdsaW5rIGxvY2FsJykKKworICAgIGRlZiBnZXRNTEVJRChzZWxmKToKKyAgICAgICAgIiIiZ2V0IG1lc2ggbG9jYWwgZW5kcG9pbnQgaWRlbnRpZmllciBhZGRyZXNzIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE1MRUlEJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX2dldElwNkFkZHJlc3MoJ21lc2ggRUlEJykKKworICAgIGRlZiBnZXRSbG9jMTYoc2VsZik6CisgICAgICAgICIiImdldCBybG9jMTYgc2hvcnQgYWRkcmVzcyIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRSbG9jMTYnICUgc2VsZi5wb3J0CisgICAgICAgIHJsb2MxNiA9IHNlbGYuX19zZW5kQ29tbWFuZCgncmxvYzE2JylbMF0KKyAgICAgICAgcmV0dXJuIGludChybG9jMTYsIDE2KQorCisgICAgZGVmIGdldFJsb2Moc2VsZik6CisgICAgICAgICIiImdldCByb3V0ZXIgbG9jYXRvciB1bmljYXN0IElQdjYgYWRkcmVzcyIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRSbG9jJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX2dldElwNkFkZHJlc3MoJ3Jsb2MnKQorCisgICAgZGVmIGdldEdsb2JhbChzZWxmKToKKyAgICAgICAgIiIiZ2V0IGdsb2JhbCB1bmljYXN0IElQdjYgYWRkcmVzcyBzZXQKKyAgICAgICAgICAgaWYgY29uZmlndXJpbmcgbXVsdGlwbGUgZW50cmllcworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0R2xvYmFsJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5fX2dldElwNkFkZHJlc3MoJ2dsb2JhbCcpCisKKyAgICBkZWYgc2V0TmV0d29ya0tleShzZWxmLCBrZXkpOgorICAgICAgICAiIiJzZXQgVGhyZWFkIE5ldHdvcmsgbWFzdGVyIGtleQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBrZXk6IFRocmVhZCBOZXR3b3JrIG1hc3RlciBrZXkgdXNlZCBpbiBzZWN1cmUgdGhlIE1MRS84MDIuMTUuNCBwYWNrZXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIFRocmVhZCBOZXR3b3JrIG1hc3RlciBrZXkKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgVGhyZWFkIE5ldHdvcmsgbWFzdGVyIGtleQorICAgICAgICAiIiIKKyAgICAgICAgbWFzdGVyS2V5ID0gJycKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0TmV0d29ya0tleScgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQga2V5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICBtYXN0ZXJLZXkgPSBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyhrZXkpCisKKyAgICAgICAgICAgICAgICAjIHBycGVuZCAnMCcgYXQgdGhlIGJlZ2lubmluZworICAgICAgICAgICAgICAgIGlmIGxlbihtYXN0ZXJLZXkpIDwgMzI6CisgICAgICAgICAgICAgICAgICAgIG1hc3RlcktleSA9IG1hc3RlcktleS56ZmlsbCgzMikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgbWFzdGVyS2V5CisKKyAgICAgICAgICAgICAgICBjbWQgPSAnbWFzdGVya2V5ICVzJyAlbWFzdGVyS2V5CisgICAgICAgICAgICAgICAgZGF0YXNldENtZCA9ICdkYXRhc2V0IG1hc3RlcmtleSAlcycgJSBtYXN0ZXJLZXkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWFzdGVyS2V5ID0ga2V5CisgICAgICAgICAgICAgICAgY21kID0gJ21hc3RlcmtleSAlcycgJSBtYXN0ZXJLZXkKKyAgICAgICAgICAgICAgICBkYXRhc2V0Q21kID0gJ2RhdGFzZXQgbWFzdGVya2V5ICVzJyAlIG1hc3RlcktleQorCisgICAgICAgICAgICBzZWxmLm5ldHdvcmtLZXkgPSBtYXN0ZXJLZXkKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJyBhbmQgc2VsZi5fX3NlbmRDb21tYW5kKGRhdGFzZXRDbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXROZXR3b3Jra2V5KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TmV0d29ya0tleShzZWxmKToKKyAgICAgICAgIiIiZ2V0IHRoZSBjdXJyZW50IFRocmVhZCBOZXR3b3JrIG1hc3RlciBrZXkiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0TmV0d29rS2V5JyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5uZXR3b3JrS2V5CisKKyAgICBkZWYgYWRkQmxvY2tlZE1BQyhzZWxmLCB4RVVJKToKKyAgICAgICAgIiIiYWRkIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcyB0byB0aGUgYmxhY2sgbGlzdCBlbnRyeQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB4RVVJOiBleHRlbmRlZCBhZGRyZXNzIGluIGhleCBmb3JtYXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBhZGQgYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSBibGFjayBsaXN0IGVudHJ5CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBhZGQgYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSBibGFjayBsaXN0IGVudHJ5CisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBhZGRCbG9ja2VkTUFDJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCB4RVVJCisgICAgICAgIGlmIGlzaW5zdGFuY2UoeEVVSSwgc3RyKToKKyAgICAgICAgICAgIG1hY0FkZHIgPSB4RVVJCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYWNBZGRyID0gc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoeEVVSSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGlmIGJsb2NrZWQgZGV2aWNlIGlzIGl0c2VsZgorICAgICAgICAgICAgaWYgbWFjQWRkciA9PSBzZWxmLm1hYzoKKyAgICAgICAgICAgICAgICBwcmludCAnYmxvY2sgZGV2aWNlIGl0c2VsZicKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc0JsYWNrTGlzdEVuYWJsZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fX2VuYWJsZUJsYWNrTGlzdCgpCisKKyAgICAgICAgICAgIGNtZCA9ICdibGFja2xpc3QgYWRkICVzJyAlIG1hY0FkZHIKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgc2VsZi5fYmxhY2tMaXN0LmFkZChtYWNBZGRyKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJhZGRCbG9ja2VkTUFDKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgYWRkQWxsb3dNQUMoc2VsZiwgeEVVSSk6CisgICAgICAgICIiImFkZCBhIGdpdmVuIGV4dGVuZGVkIGFkZHJlc3MgdG8gdGhlIHdoaXRlIGxpc3QgZW50cnkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgeEVVSTogYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzIGluIGhleCBmb3JtYXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBhZGQgYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSB3aGl0ZSBsaXN0IGVudHJ5CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBhZGQgYSBnaXZlbiBleHRlbmRlZCBhZGRyZXNzIHRvIHRoZSB3aGl0ZSBsaXN0IGVudHJ5CisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBhZGRBbGxvd01BQycgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgeEVVSQorICAgICAgICBpZiBpc2luc3RhbmNlKHhFVUksIHN0cik6CisgICAgICAgICAgICBtYWNBZGRyID0geEVVSQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFjQWRkciA9IHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHhFVUkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNXaGl0ZUxpc3RFbmFibGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX19lbmFibGVXaGl0ZUxpc3QoKQorCisgICAgICAgICAgICBjbWQgPSAnd2hpdGVsaXN0IGFkZCAlcycgJSBtYWNBZGRyCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHNlbGYuX3doaXRlTGlzdC5hZGQobWFjQWRkcikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiYWRkQWxsb3dNQUMoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBjbGVhckJsb2NrTGlzdChzZWxmKToKKyAgICAgICAgIiIiY2xlYXIgYWxsIGVudHJpZXMgaW4gYmxhY2sgbGlzdCB0YWJsZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGNsZWFyIHRoZSBibGFjayBsaXN0CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBjbGVhciB0aGUgYmxhY2sgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgY2xlYXJCbG9ja0xpc3QnICUgc2VsZi5wb3J0CisKKyAgICAgICAgIyByZW1vdmUgYWxsIGVudHJpZXMgaW4gYmxhY2sgbGlzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoJ2JsYWNrbGlzdCBjbGVhcicpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9fZGlzYWJsZUJsYWNrTGlzdCgpCisgICAgICAgICAgICAgICAgc2VsZi5fYmxhY2tMaXN0LmNsZWFyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiY2xlYXJCbG9ja0xpc3QoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBjbGVhckFsbG93TGlzdChzZWxmKToKKyAgICAgICAgIiIiY2xlYXIgYWxsIGVudHJpZXMgaW4gd2hpdGUgbGlzdCB0YWJsZQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGNsZWFyIHRoZSB3aGl0ZSBsaXN0CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBjbGVhciB0aGUgd2hpdGUgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgY2xlYXJBbGxvd0xpc3QnICUgc2VsZi5wb3J0CisKKyAgICAgICAgIyByZW1vdmUgYWxsIGVudHJpZXMgaW4gd2hpdGUgbGlzdCBhcyB3ZWxsIGFzIGluIGJsYWNrIGxpc3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCd3aGl0ZWxpc3QgY2xlYXInKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5fX2Rpc2FibGVXaGl0ZUxpc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuX3doaXRlTGlzdC5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5jbGVhckJsb2NrTGlzdCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImNsZWFyQWxsb3dMaXN0KCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0RGV2aWNlUm9sZShzZWxmKToKKyAgICAgICAgIiIiZ2V0IGN1cnJlbnQgZGV2aWNlIHJvbGUgaW4gVGhyZWFkIE5ldHdvcmsiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0RGV2aWNlUm9sZScgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgnc3RhdGUnKVswXQorCisgICAgZGVmIGpvaW5OZXR3b3JrKHNlbGYsIGVSb2xlSWQpOgorICAgICAgICAiIiJtYWtlIGRldmljZSByZWFkeSB0byBqb2luIHRoZSBUaHJlYWQgTmV0d29yayB3aXRoIGEgZ2l2ZW4gcm9sZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBlUm9sZUlkOiBhIGdpdmVuIGRldmljZSByb2xlIGlkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHJlYWR5IHRvIHNldCBUaHJlYWQgTmV0d29yayBwYXJhbWV0ZXIgZm9yIGpvaW5pbmcgZGVzaXJlZCBOZXR3b3JrCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBqb2luTmV0d29yaycgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgZVJvbGVJZAorCisgICAgICAgIHNlbGYuZGV2aWNlUm9sZSA9IGVSb2xlSWQKKyAgICAgICAgbW9kZSA9ICcnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIE1vZHVsZUhlbHBlci5MZWFkZXJEdXRDaGFubmVsRm91bmQ6CisgICAgICAgICAgICAgICAgc2VsZi5jaGFubmVsID0gTW9kdWxlSGVscGVyLkRlZmF1bHRfQ2hhbm5lbAorCisgICAgICAgICAgICAjIEZJWE1FOiB3aGVuIEhhcm5lc3MgY2FsbCBzZXROZXR3b3JrRGF0YVJlcXVpcmVtZW50KCk/CisgICAgICAgICAgICAjIG9ubHkgc2xlZXAgZW5kIGRldmljZSByZXF1aXJlcyBzdGFibGUgbmV0d29ya2RhdGEgbm93CisgICAgICAgICAgICBpZiBlUm9sZUlkID09IFRocmVhZF9EZXZpY2VfUm9sZS5MZWFkZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgJ2pvaW4gYXMgbGVhZGVyJworICAgICAgICAgICAgICAgIG1vZGUgPSAncnNkbicKKyAgICAgICAgICAgICAgICBpZiBzZWxmLkF1dG9EVVRFbmFibGUgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICMgc2V0IFJPVVRFUl9ET1dOR1JBREVfVEhSRVNIT0xECisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19zZXRSb3V0ZXJEb3duZ3JhZGVUaHJlc2hvbGQoMzMpCisgICAgICAgICAgICBlbGlmIGVSb2xlSWQgPT0gVGhyZWFkX0RldmljZV9Sb2xlLlJvdXRlcjoKKyAgICAgICAgICAgICAgICBwcmludCAnam9pbiBhcyByb3V0ZXInCisgICAgICAgICAgICAgICAgbW9kZSA9ICdyc2RuJworICAgICAgICAgICAgICAgIGlmIHNlbGYuQXV0b0RVVEVuYWJsZSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBzZXQgUk9VVEVSX0RPV05HUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3NldFJvdXRlckRvd25ncmFkZVRocmVzaG9sZCgzMykKKyAgICAgICAgICAgIGVsaWYgZVJvbGVJZCA9PSBUaHJlYWRfRGV2aWNlX1JvbGUuU0VEOgorICAgICAgICAgICAgICAgIHByaW50ICdqb2luIGFzIHNsZWVweSBlbmQgZGV2aWNlJworICAgICAgICAgICAgICAgIG1vZGUgPSAncycKKyAgICAgICAgICAgICAgICBzZWxmLnNldFBvbGxpbmdSYXRlKHNlbGYuc2VkUG9sbGluZ1JhdGUpCisgICAgICAgICAgICBlbGlmIGVSb2xlSWQgPT0gVGhyZWFkX0RldmljZV9Sb2xlLkVuZERldmljZToKKyAgICAgICAgICAgICAgICBwcmludCAnam9pbiBhcyBlbmQgZGV2aWNlJworICAgICAgICAgICAgICAgIG1vZGUgPSAncnNuJworICAgICAgICAgICAgZWxpZiBlUm9sZUlkID09IFRocmVhZF9EZXZpY2VfUm9sZS5SRUVEOgorICAgICAgICAgICAgICAgIHByaW50ICdqb2luIGFzIFJFRUQnCisgICAgICAgICAgICAgICAgbW9kZSA9ICdyc2RuJworICAgICAgICAgICAgICAgICMgc2V0IFJPVVRFUl9VUEdSQURFX1RIUkVTSE9MRAorICAgICAgICAgICAgICAgIHNlbGYuX19zZXRSb3V0ZXJVcGdyYWRlVGhyZXNob2xkKDApCisgICAgICAgICAgICBlbGlmIGVSb2xlSWQgPT0gVGhyZWFkX0RldmljZV9Sb2xlLkVuZERldmljZV9GRUQ6CisgICAgICAgICAgICAgICAgIyBhbHdheXMgcmVtYWluIGFuIEVELCBuZXZlciByZXF1ZXN0IHRvIGJlIGEgcm91dGVyCisgICAgICAgICAgICAgICAgcHJpbnQgJ2pvaW4gYXMgRkVEJworICAgICAgICAgICAgICAgIG1vZGUgPSAncnNkbicKKyAgICAgICAgICAgICAgICAjIHNldCBST1VURVJfVVBHUkFERV9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICBzZWxmLl9fc2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCgwKQorICAgICAgICAgICAgZWxpZiBlUm9sZUlkID09IFRocmVhZF9EZXZpY2VfUm9sZS5FbmREZXZpY2VfTUVEOgorICAgICAgICAgICAgICAgIHByaW50ICdqb2luIGFzIE1FRCcKKyAgICAgICAgICAgICAgICBtb2RlID0gJ3JzbicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIHNldCBUaHJlYWQgZGV2aWNlIG1vZGUgd2l0aCBhIGdpdmVuIHJvbGUKKyAgICAgICAgICAgIHNlbGYuX19zZXREZXZpY2VNb2RlKG1vZGUpCisgICAgICAgICAgICBzZWxmLl9fc2V0S2V5U3dpdGNoR3VhcmRUaW1lKDApCisKKyAgICAgICAgICAgICMgc3RhcnQgT3BlblRocmVhZAorICAgICAgICAgICAgc2VsZi5fX3N0YXJ0T3BlblRocmVhZCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDMpCisKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImpvaW5OZXR3b3JrKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TmV0d29ya0ZyYWdtZW50SUQoc2VsZik6CisgICAgICAgICIiImdldCBjdXJyZW50IHBhcnRpdGlvbiBpZCBvZiBUaHJlYWQgTmV0d29yayBQYXJ0aXRpb24gZnJvbSBMZWFkZXJEYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRoZSBUaHJlYWQgbmV0d29yayBQYXJ0aXRpb24gSWQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE5ldHdvcmtGcmFnbWVudElEJyAlIHNlbGYucG9ydAorICAgICAgICBpZiBub3Qgc2VsZi5fX2lzT3BlblRocmVhZFJ1bm5pbmcoKToKKyAgICAgICAgICAgIHByaW50ICdPcGVuVGhyZWFkIGlzIG5vdCBydW5uaW5nJworICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBsZWFkZXJEYXRhID0gW10KKyAgICAgICAgbGVhZGVyRGF0YSA9IHNlbGYuX19zZW5kQ29tbWFuZCgnbGVhZGVyZGF0YScpCisgICAgICAgIHJldHVybiBpbnQobGVhZGVyRGF0YVswXS5zcGxpdCgpWzJdLCAxNikKKworICAgIGRlZiBnZXRQYXJlbnRBZGRyZXNzKHNlbGYpOgorICAgICAgICAiIiJnZXQgVGhyZWFkIGRldmljZSdzIHBhcmVudCBleHRlbmRlZCBhZGRyZXNzIGFuZCBybG9jMTYgc2hvcnQgYWRkcmVzcworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgZXh0ZW5kZWQgYWRkcmVzcyBvZiBwYXJlbnQgaW4gaGV4IGZvcm1hdAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0UGFyZW50QWRkcmVzcycgJSBzZWxmLnBvcnQKKyAgICAgICAgcGFyZW50SW5mbyA9IFtdCisgICAgICAgIHBhcmVudEluZm8gPSBzZWxmLl9fc2VuZENvbW1hbmQoJ3BhcmVudCcpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gcGFyZW50SW5mbzoKKyAgICAgICAgICAgIGlmICdEb25lJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmICdFeHQgQWRkcicgaW4gbGluZToKKyAgICAgICAgICAgICAgICBldWkgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICAgICBwcmludCBldWkKKyAgICAgICAgICAgICNlbGlmICdSbG9jJyBpbiBsaW5lOgorICAgICAgICAgICAgIyAgICBybG9jMTYgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICMgICAgcHJpbnQgcmxvYzE2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gaW50KGV1aSwgMTYpCisKKyAgICBkZWYgcG93ZXJEb3duKHNlbGYpOgorICAgICAgICAiIiJwb3dlciBkb3duIHRoZSBUaHJlYWQgZGV2aWNlIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHBvd2VyRG93bicgJSBzZWxmLnBvcnQKKyAgICAgICAgc2VsZi5fc2VuZGxpbmUoJ3Jlc2V0JykKKyAgICAgICAgc2VsZi5pc1Bvd2VyRG93biA9IFRydWUKKworICAgIGRlZiBwb3dlclVwKHNlbGYpOgorICAgICAgICAiIiJwb3dlciB1cCB0aGUgVGhyZWFkIGRldmljZSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBwb3dlclVwJyAlIHNlbGYucG9ydAorICAgICAgICBpZiBub3Qgc2VsZi5oYW5kbGU6CisgICAgICAgICAgICBzZWxmLl9jb25uZWN0KCkKKworICAgICAgICBzZWxmLmlzUG93ZXJEb3duID0gRmFsc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fX2lzT3BlblRocmVhZFJ1bm5pbmcoKToKKyAgICAgICAgICAgIHNlbGYuX19zdGFydE9wZW5UaHJlYWQoKQorCisgICAgZGVmIHJlYm9vdChzZWxmKToKKyAgICAgICAgIiIicmVzZXQgYW5kIHJlam9pbiB0byBUaHJlYWQgTmV0d29yayB3aXRob3V0IGFueSB0aW1lb3V0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gcmVzZXQgYW5kIHJlam9pbiB0aGUgVGhyZWFkIE5ldHdvcmsKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHJlc2V0IGFuZCByZWpvaW4gdGhlIFRocmVhZCBOZXR3b3JrCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCByZWJvb3QnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NlbmRsaW5lKCdyZXNldCcpCisgICAgICAgICAgICBzZWxmLmlzUG93ZXJEb3duID0gVHJ1ZQorICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorCisgICAgICAgICAgICBzZWxmLl9fc3RhcnRPcGVuVGhyZWFkKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCdzdGF0ZScpWzBdID09ICdkaXNhYmxlZCc6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1tGQUlMXSByZWJvb3QnCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInJlYm9vdCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHBpbmcoc2VsZiwgZGVzdGluYXRpb24sIGxlbmd0aD0yMCk6CisgICAgICAgICIiIiBzZW5kIElDTVB2NiBlY2hvIHJlcXVlc3Qgd2l0aCBhIGdpdmVuIGxlbmd0aCB0byBhIHVuaWNhc3QgZGVzdGluYXRpb24KKyAgICAgICAgICAgIGFkZHJlc3MKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGVzdGluYXRpb246IHRoZSB1bmljYXN0IGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgSUNNUHY2IGVjaG8gcmVxdWVzdAorICAgICAgICAgICAgbGVuZ3RoOiB0aGUgc2l6ZSBvZiBJQ01QdjYgZWNobyByZXF1ZXN0IHBheWxvYWQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHBpbmcnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50ICdkZXN0aW5hdGlvbjogJXMnICVkZXN0aW5hdGlvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAncGluZyAlcyAlcycgJSAoZGVzdGluYXRpb24sIHN0cihsZW5ndGgpKQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICBzZWxmLl9zZW5kbGluZShjbWQpCisgICAgICAgICAgICBzZWxmLl9leHBlY3QoY21kKQorICAgICAgICAgICAgIyB3YWl0IGVjaG8gcmVwbHkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigicGluZygpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIG11bHRpY2FzdF9QaW5nKHNlbGYsIGRlc3RpbmF0aW9uLCBsZW5ndGg9MjApOgorICAgICAgICAiIiJzZW5kIElDTVB2NiBlY2hvIHJlcXVlc3Qgd2l0aCBhIGdpdmVuIGxlbmd0aCB0byBhIG11bHRpY2FzdCBkZXN0aW5hdGlvbgorICAgICAgICAgICBhZGRyZXNzCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uOiB0aGUgbXVsdGljYXN0IGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgSUNNUHY2IGVjaG8gcmVxdWVzdAorICAgICAgICAgICAgbGVuZ3RoOiB0aGUgc2l6ZSBvZiBJQ01QdjYgZWNobyByZXF1ZXN0IHBheWxvYWQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIG11bHRpY2FzdF9QaW5nJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCAnZGVzdGluYXRpb246ICVzJyAlIGRlc3RpbmF0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdwaW5nICVzICVzJyAlIChkZXN0aW5hdGlvbiwgc3RyKGxlbmd0aCkpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHNlbGYuX3NlbmRsaW5lKGNtZCkKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdChjbWQpCisgICAgICAgICAgICAjIHdhaXQgZWNobyByZXBseQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJtdWx0aWNhc3RfcGluZygpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldFZlcnNpb25OdW1iZXIoc2VsZik6CisgICAgICAgICIiImdldCBPcGVuVGhyZWFkIHN0YWNrIGZpcm13YXJlIHZlcnNpb24gbnVtYmVyIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldFZlcnNpb25OdW1iZXInICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ3ZlcnNpb24nKVswXQorCisgICAgZGVmIHNldFBBTklEKHNlbGYsIHhQQU4pOgorICAgICAgICAiIiJzZXQgVGhyZWFkIE5ldHdvcmsgUEFOIElECisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhQQU46IGEgZ2l2ZW4gUEFOIElEIGluIGhleCBmb3JtYXQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIFRocmVhZCBOZXR3b3JrIFBBTiBJRAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBUaHJlYWQgTmV0d29yayBQQU4gSUQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldFBBTklEJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCB4UEFOCisgICAgICAgIHBhbmlkID0gJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeFBBTiwgc3RyKToKKyAgICAgICAgICAgICAgICBwYW5pZCA9IHN0cihoZXgoeFBBTikpCisgICAgICAgICAgICAgICAgcHJpbnQgcGFuaWQKKworICAgICAgICAgICAgY21kID0gJ3BhbmlkICVzJyAlIHBhbmlkCisgICAgICAgICAgICBkYXRhc2V0Q21kID0gJ2RhdGFzZXQgcGFuaWQgJXMnICUgcGFuaWQKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJyBhbmQgc2VsZi5fX3NlbmRDb21tYW5kKGRhdGFzZXRDbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRQQU5JRCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldFBBTklEKHNlbGYpOgorICAgICAgICAiIiJnZXQgY3VycmVudCBUaHJlYWQgTmV0d29yayBQQU4gSUQiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0UEFOSUQnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoJ3BhbmlkJylbMF0KKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgIiIiZmFjdG9yeSByZXNldCIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCByZXNldCcgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc2VuZGxpbmUoJ2ZhY3RvcnlyZXNldCcpCisgICAgICAgICAgICBzZWxmLl9yZWFkKCkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJyZXNldCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHJlbW92ZVJvdXRlcihzZWxmLCB4Um91dGVySWQpOgorICAgICAgICAiIiJraWNrb2ZmIHJvdXRlciB3aXRoIGEgZ2l2ZW4gcm91dGVyIGlkIGZyb20gdGhlIFRocmVhZCBOZXR3b3JrCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhSb3V0ZXJJZDogYSBnaXZlbiByb3V0ZXIgaWQgaW4gaGV4IGZvcm1hdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHJlbW92ZSB0aGUgcm91dGVyIGZyb20gdGhlIFRocmVhZCBOZXR3b3JrCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byByZW1vdmUgdGhlIHJvdXRlciBmcm9tIHRoZSBUaHJlYWQgTmV0d29yaworICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgcmVtb3ZlUm91dGVyJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCB4Um91dGVySWQKKyAgICAgICAgcm91dGVySWQgPSAnJworICAgICAgICByb3V0ZXJJZCA9IHNlbGYuX19jb252ZXJ0UmxvY1RvUm91dGVySWQoeFJvdXRlcklkKQorICAgICAgICBwcmludCByb3V0ZXJJZAorCisgICAgICAgIGlmIHJvdXRlcklkID09IE5vbmU6CisgICAgICAgICAgICBwcmludCAnbm8gbWF0Y2hlZCB4Um91dGVySWQnCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAncmVsZWFzZXJvdXRlcmlkICVzJyAlIHJvdXRlcklkCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInJlbW92ZVJvdXRlcigpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHNldERlZmF1bHRWYWx1ZXMoc2VsZik6CisgICAgICAgICIiInNldCBkZWZhdWx0IG1hbmRhdG9yeSBUaHJlYWQgTmV0d29yayBwYXJhbWV0ZXIgdmFsdWUiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0RGVmYXVsdFZhbHVlcycgJSBzZWxmLnBvcnQKKworICAgICAgICAjIGluaXRpYWxpemUgdmFyaWFibGVzCisgICAgICAgIHNlbGYubmV0d29ya05hbWUgPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9Od2tOYW1lCisgICAgICAgIHNlbGYubmV0d29ya0tleSA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X053a0tleQorICAgICAgICBzZWxmLmNoYW5uZWwgPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9DaGFubmVsCisgICAgICAgIHNlbGYuY2hhbm5lbE1hc2sgPSAiMHg3ZmZmODAwIiAjKDB4ZmZmZiA8PCAxMSkKKyAgICAgICAgc2VsZi5wYW5JZCA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X1BhbklkCisgICAgICAgIHNlbGYueHBhbklkID0gTW9kdWxlSGVscGVyLkRlZmF1bHRfWHBhbklkCisgICAgICAgIHNlbGYubG9jYWxwcmVmaXggPSBNb2R1bGVIZWxwZXIuRGVmYXVsdF9NTFByZWZpeAorICAgICAgICBzZWxmLnBza2MgPSAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiICAjIE9UIG9ubHkgYWNjZXB0IGhleCBmb3JtYXQgUFNLYyBmb3Igbm93CisgICAgICAgIHNlbGYuc2VjdXJpdHlQb2xpY3lTZWNzID0gTW9kdWxlSGVscGVyLkRlZmF1bHRfU2VjdXJpdHlQb2xpY3kKKyAgICAgICAgc2VsZi5zZWN1cml0eVBvbGljeUZsYWdzID0gIm9ucmNiIgorICAgICAgICBzZWxmLmFjdGl2ZXRpbWVzdGFtcCA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X0FjdGl2ZVRpbWVzdGFtcAorICAgICAgICAjc2VsZi5zZWRQb2xsaW5nUmF0ZSA9IE1vZHVsZUhlbHBlci5EZWZhdWx0X0hhcm5lc3NfU0VEX1BvbGxpbmdfUmF0ZQorICAgICAgICBzZWxmLnNlZFBvbGxpbmdSYXRlID0gMworICAgICAgICBzZWxmLmRldmljZVJvbGUgPSBOb25lCisgICAgICAgIHNlbGYucHJvdmlzaW9uaW5nVXJsID0gJycKKyAgICAgICAgc2VsZi5oYXNBY3RpdmVEYXRhc2V0VG9Db21taXQgPSBGYWxzZQorICAgICAgICBzZWxmLmxvZ1RocmVhZCA9IFF1ZXVlKCkKKyAgICAgICAgc2VsZi5sb2dUaHJlYWRTdGF0dXMgPSBzZWxmLmxvZ1N0YXR1c1snc3RvcCddCisgICAgICAgIHNlbGYuam9pbkNvbW1pc3Npb25lZFN0YXR1cyA9IHNlbGYuam9pblN0YXR1c1snbm90c3RhcnQnXQorICAgICAgICBzZWxmLm5ldHdvcmtEYXRhUmVxdWlyZW1lbnQgPSAnJyAgICAgICMgaW5kaWNhdGUgVGhyZWFkIGRldmljZSByZXF1ZXN0cyBmdWxsIG9yIHN0YWJsZSBuZXR3b3JrIGRhdGEKKyAgICAgICAgc2VsZi5pc1Bvd2VyRG93biA9IEZhbHNlICAgICAgICAgICAgICAjIGluZGljYXRlIGlmIFRocmVhZCBkZXZpY2UgZXhwZXJpZW5jZXMgYSBwb3dlciBkb3duIGV2ZW50CisgICAgICAgIHNlbGYuaXNXaGl0ZUxpc3RFbmFibGVkID0gRmFsc2UgICAgICAgIyBpbmRpY2F0ZSBpZiBUaHJlYWQgZGV2aWNlIGVuYWJsZXMgd2hpdGUgbGlzdCBmaWx0ZXIKKyAgICAgICAgc2VsZi5pc0JsYWNrTGlzdEVuYWJsZWQgPSBGYWxzZSAgICAgICAjIGluZGljYXRlIGlmIFRocmVhZCBkZXZpY2UgZW5hYmxlcyBibGFjayBsaXN0IGZpbHRlcgorICAgICAgICBzZWxmLl93aGl0ZUxpc3QgPSBzZXQoKSAgICAgICAgICAgICAgICMgY2FjaGUgd2hpdGVsaXN0IGRldmljZXMgd2hlbiB3aGl0ZSBsaXN0IGZpbHRlciBpcyBlbmFibGVkCisgICAgICAgIHNlbGYuX2JsYWNrTGlzdCA9IHNldCgpICAgICAgICAgICAgICAgIyBjYWNoZSBibGFja2xpc3QgZGV2aWNlcyB3aGVuIGJsYWNrIGxpc3QgZmlsdGVyIGlzIGVuYWJsZWQKKyAgICAgICAgc2VsZi5pc0FjdGl2ZUNvbW1pc3Npb25lciA9IEZhbHNlICAgICAjIGluZGljYXRlIGlmIFRocmVhZCBkZXZpY2UgaXMgYW4gYWN0aXZlIGNvbW1pc3Npb25lcgorICAgICAgICBzZWxmLl9saW5lcyA9IE5vbmUgICAgICAgICAgICAgICAgICAgICMgYnVmZmVyZWQgbGluZXMgcmVhZCBmcm9tIGRldmljZQorCisgICAgICAgICMgaW5pdGlhbGl6ZSBkZXZpY2UgY29uZmlndXJhdGlvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldE1BQyhzZWxmLm1hYykKKyAgICAgICAgICAgIHNlbGYuX19zZXRDaGFubmVsTWFzayhzZWxmLmNoYW5uZWxNYXNrKQorICAgICAgICAgICAgc2VsZi5fX3NldFNlY3VyaXR5UG9saWN5KHNlbGYuc2VjdXJpdHlQb2xpY3lTZWNzLCBzZWxmLnNlY3VyaXR5UG9saWN5RmxhZ3MpCisgICAgICAgICAgICBzZWxmLnNldENoYW5uZWwoc2VsZi5jaGFubmVsKQorICAgICAgICAgICAgc2VsZi5zZXRQQU5JRChzZWxmLnBhbklkKQorICAgICAgICAgICAgc2VsZi5zZXRYcGFuSWQoc2VsZi54cGFuSWQpCisgICAgICAgICAgICBzZWxmLnNldE5ldHdvcmtOYW1lKHNlbGYubmV0d29ya05hbWUpCisgICAgICAgICAgICBzZWxmLnNldE5ldHdvcmtLZXkoc2VsZi5uZXR3b3JrS2V5KQorICAgICAgICAgICAgc2VsZi5zZXRNTFByZWZpeChzZWxmLmxvY2FscHJlZml4KQorICAgICAgICAgICAgc2VsZi5zZXRQU0tjKHNlbGYucHNrYykKKyAgICAgICAgICAgIHNlbGYuc2V0QWN0aXZlVGltZXN0YW1wKHNlbGYuYWN0aXZldGltZXN0YW1wKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXREZWZhdWx0VmFsdWUoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXREZXZpY2VDb25uY2V0aW9uU3RhdHVzKHNlbGYpOgorICAgICAgICAiIiJjaGVjayBpZiBzZXJpYWwgcG9ydCBjb25uZWN0aW9uIGlzIHJlYWR5IG9yIG5vdCIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXREZXZpY2VDb25uZWN0aW9uU3RhdHVzJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5kZXZpY2VDb25uZWN0ZWQKKworICAgIGRlZiBnZXRQb2xsaW5nUmF0ZShzZWxmKToKKyAgICAgICAgIiIiZ2V0IGRhdGEgcG9sbGluZyByYXRlIGZvciBzbGVlcHkgZW5kIGRldmljZSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRQb2xsaW5nUmF0ZScgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgncG9sbHBlcmlvZCcpWzBdCisKKyAgICBkZWYgc2V0UG9sbGluZ1JhdGUoc2VsZiwgaVBvbGxpbmdSYXRlKToKKyAgICAgICAgIiIic2V0IGRhdGEgcG9sbGluZyByYXRlIGZvciBzbGVlcHkgZW5kIGRldmljZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpUG9sbGluZ1JhdGU6IGRhdGEgcG9sbCBwZXJpb2Qgb2Ygc2xlZXB5IGVuZCBkZXZpY2UKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgdGhlIGRhdGEgcG9sbGluZyByYXRlIGZvciBzbGVlcHkgZW5kIGRldmljZQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBkYXRhIHBvbGxpbmcgcmF0ZSBmb3Igc2xlZXB5IGVuZCBkZXZpY2UKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldFBvbGxpbmdSYXRlJyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBpUG9sbGluZ1JhdGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ3BvbGxwZXJpb2QgJXMnICUgc3RyKGlQb2xsaW5nUmF0ZSkKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRQb2xsaW5nUmF0ZSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHNldExpbmtRdWFsaXR5KHNlbGYsIEVVSWFkciwgTGlua1F1YWxpdHkpOgorICAgICAgICAiIiJzZXQgY3VzdG9tIGxpbmsgcXVhbGl0eSBvbiBhIGxpbmsgdG8gVGhyZWFkIGRldmljZSB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBFVUlhZHI6IGEgZ2l2ZW4gZXh0ZW5kZWQgYWRkcmVzcworICAgICAgICAgICAgTGlua1F1YWxpdHk6IGEgZ2l2ZW4gY3VzdG9tIGxpbmsgcXVhbGl0eSBmb3IgY2hpbGQgZGV2aWNlcworICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsgcXVhbGl0eS9saW5rIG1hcmdpbiBtYXBwaW5nIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgMzogMjEgLSAyNTUgKGRCKQorICAgICAgICAgICAgICAgICAgICAgICAgIDI6IDExIC0gMjAgKGRCKQorICAgICAgICAgICAgICAgICAgICAgICAgIDE6IDMgLSA5IChkQikKKyAgICAgICAgICAgICAgICAgICAgICAgICAwOiAwIC0gMiAoZEIpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBsaW5rIHF1YWxpdHkgb24gYSBsaW5rIHRvIGEgVGhyZWFkIGRldmljZQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHRoZSBsaW5rIHF1YWxpdHkgb24gYSBsaW5rIHRvIGEgVGhyZWFkIGRldmljZQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0TGlua1F1YWxpdHknICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IEVVSWFkcgorICAgICAgICBwcmludCBMaW5rUXVhbGl0eQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHByb2Nlc3MgRVVJYWRyCisgICAgICAgICAgICBldWlIZXggPSBoZXgoRVVJYWRyKQorICAgICAgICAgICAgZXVpU3RyID0gc3RyKGV1aUhleCkKKyAgICAgICAgICAgIGV1aVN0ciA9IGV1aVN0ci5yc3RyaXAoJ0wnKQorICAgICAgICAgICAgYWRkcmVzczY0ID0gJycKKyAgICAgICAgICAgIGlmICcweCcgaW4gZXVpU3RyOgorICAgICAgICAgICAgICAgIGFkZHJlc3M2NCA9IGV1aVN0ci5sc3RyaXAoJzB4JykKKworICAgICAgICAgICAgICAgICMgcHJlcGVuZCAwIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgICBpZiBsZW4oYWRkcmVzczY0KSA8IDE2OgorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzNjQgPSBhZGRyZXNzNjQuemZpbGwoMTYpCisgICAgICAgICAgICAgICAgICAgIHByaW50IGFkZHJlc3M2NAorCisgICAgICAgICAgICBjbWQgPSAnbGlua3F1YWxpdHkgJXMgJXMnICUgKGFkZHJlc3M2NCwgc3RyKExpbmtRdWFsaXR5KSkKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRMaW5rUXVhbGl0eSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHJlbW92ZVJvdXRlclByZWZpeChzZWxmLCBwcmVmaXhFbnRyeSk6CisgICAgICAgICIiInJlbW92ZSB0aGUgY29uZmlndXJlZCBwcmVmaXggb24gYSBib3JkZXIgcm91dGVyCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHByZWZpeEVudHJ5OiBhIG9uLW1lc2ggcHJlZml4IGVudHJ5CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gcmVtb3ZlIHRoZSBwcmVmaXggZW50cnkgZnJvbSBib3JkZXIgcm91dGVyCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byByZW1vdmUgdGhlIHByZWZpeCBlbnRyeSBmcm9tIGJvcmRlciByb3V0ZXIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHJlbW92ZVJvdXRlclByZWZpeCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgcHJlZml4RW50cnkKKyAgICAgICAgcHJlZml4ID0gc2VsZi5fX2NvbnZlcnRJcDZQcmVmaXhTdHJpbmdUb0lwNkFkZHJlc3Moc3RyKHByZWZpeEVudHJ5KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJlZml4TGVuID0gNjQKKyAgICAgICAgICAgIGNtZCA9ICdwcmVmaXggcmVtb3ZlICVzLyVkJyAlIChwcmVmaXgsIHByZWZpeExlbikKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgICMgc2VuZCBzZXJ2ZXIgZGF0YSBudGYgdG8gbGVhZGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZCgnbmV0ZGF0YXJlZ2lzdGVyJylbMF0gPT0gJ0RvbmUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJyZW1vdmVSb3V0ZXJQcmVmaXgoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiByZXNldEFuZFJlam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgIiIicmVzZXQgYW5kIGpvaW4gYmFjayBUaHJlYWQgTmV0d29yayB3aXRoIGEgZ2l2ZW4gdGltZW91dCBkZWxheQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0aW1lb3V0OiBhIHRpbWVvdXQgaW50ZXJ2YWwgYmVmb3JlIHJlam9pbiBUaHJlYWQgTmV0d29yaworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHJlc2V0IGFuZCByZWpvaW4gVGhyZWFkIE5ldHdvcmsKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHJlc2V0IGFuZCByZWpvaW4gdGhlIFRocmVhZCBOZXR3b3JrCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCByZXNldEFuZFJlam9pbicgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgdGltZW91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zZW5kbGluZSgncmVzZXQnKQorICAgICAgICAgICAgc2VsZi5pc1Bvd2VyRG93biA9IFRydWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCkKKworICAgICAgICAgICAgaWYgc2VsZi5kZXZpY2VSb2xlID09IFRocmVhZF9EZXZpY2VfUm9sZS5TRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRQb2xsaW5nUmF0ZShzZWxmLnNlZFBvbGxpbmdSYXRlKQorCisgICAgICAgICAgICBzZWxmLl9fc3RhcnRPcGVuVGhyZWFkKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMykKKworICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKCdzdGF0ZScpWzBdID09ICdkaXNhYmxlZCc6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1tGQUlMXSByZXNldCBhbmQgcmVqb2luJworICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigicmVzZXRBbmRSZWpvaW4oKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBjb25maWdCb3JkZXJSb3V0ZXIoc2VsZiwgUF9QcmVmaXgsIFBfc3RhYmxlPTEsIFBfZGVmYXVsdD0xLCBQX3NsYWFjX3ByZWZlcnJlZD0wLCBQX0RoY3A9MCwgUF9wcmVmZXJlbmNlPTAsIFBfb25fbWVzaD0xLCBQX25kX2Rucz0wKToKKyAgICAgICAgIiIiY29uZmlndXJlIHRoZSBib3JkZXIgcm91dGVyIHdpdGggYSBnaXZlbiBwcmVmaXggZW50cnkgcGFyYW1ldGVycworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBQX1ByZWZpeDogSVB2NiBwcmVmaXggdGhhdCBpcyBhdmFpbGFibGUgb24gdGhlIFRocmVhZCBOZXR3b3JrCisgICAgICAgICAgICBQX3N0YWJsZTogaXMgdHJ1ZSBpZiB0aGUgZGVmYXVsdCByb3V0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgc3RhYmxlIG5ldHdvcmsgZGF0YQorICAgICAgICAgICAgUF9kZWZhdWx0OiBpcyB0cnVlIGlmIGJvcmRlciByb3V0ZXIgb2ZmZXJzIHRoZSBkZWZhdWx0IHJvdXRlIGZvciBQX1ByZWZpeAorICAgICAgICAgICAgUF9zbGFhY19wcmVmZXJyZWQ6IGlzIHRydWUgaWYgVGhyZWFkIGRldmljZSBpcyBhbGxvd2VkIGF1dG8tY29uZmlndXJlIGFkZHJlc3MgdXNpbmcgUF9QcmVmaXgKKyAgICAgICAgICAgIFBfRGhjcDogaXMgdHJ1ZSBpZiBib3JkZXIgcm91dGVyIGlzIGEgREhDUHY2IEFnZW50CisgICAgICAgICAgICBQX3ByZWZlcmVuY2U6IGlzIHR3by1iaXQgc2lnbmVkIGludGVnZXIgaW5kaWNhdGluZyByb3V0ZXIgcHJlZmVyZW5jZQorICAgICAgICAgICAgUF9vbl9tZXNoOiBpcyB0cnVlIGlmIFBfUHJlZml4IGlzIGNvbnNpZGVyZWQgdG8gYmUgb24tbWVzaAorICAgICAgICAgICAgUF9uZF9kbnM6IGlzIHRydWUgaWYgYm9yZGVyIHJvdXRlciBpcyBhYmxlIHRvIHN1cHBseSBETlMgaW5mb3JtYXRpb24gb2J0YWluZWQgdmlhIE5ECisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gY29uZmlndXJlIHRoZSBib3JkZXIgcm91dGVyIHdpdGggYSBnaXZlbiBwcmVmaXggZW50cnkKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIGNvbmZpZ3VyZSB0aGUgYm9yZGVyIHJvdXRlciB3aXRoIGEgZ2l2ZW4gcHJlZml4IGVudHJ5CisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBjb25maWdCb3JkZXJSb3V0ZXInICUgc2VsZi5wb3J0CisgICAgICAgIHByZWZpeCA9IHNlbGYuX19jb252ZXJ0SXA2UHJlZml4U3RyaW5nVG9JcDZBZGRyZXNzKHN0cihQX1ByZWZpeCkpCisgICAgICAgIHByaW50IHByZWZpeAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJhbWV0ZXIgPSAnJworICAgICAgICAgICAgcHJmID0gJycKKworICAgICAgICAgICAgaWYgUF9zbGFhY19wcmVmZXJyZWQgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgKz0gJ3AnCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyICs9ICdhJworCisgICAgICAgICAgICBpZiBQX3N0YWJsZSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlciArPSAncycKKworICAgICAgICAgICAgaWYgUF9kZWZhdWx0ID09IDE6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyICs9ICdyJworCisgICAgICAgICAgICBpZiBQX0RoY3AgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgKz0gJ2QnCisKKyAgICAgICAgICAgIGlmIFBfb25fbWVzaCA9PSAxOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlciArPSAnbycKKworICAgICAgICAgICAgaWYgUF9wcmVmZXJlbmNlID09IDE6CisgICAgICAgICAgICAgICAgcHJmID0gJ2hpZ2gnCisgICAgICAgICAgICBlbGlmIFBfcHJlZmVyZW5jZSA9PSAwOgorICAgICAgICAgICAgICAgIHByZiA9ICdtZWQnCisgICAgICAgICAgICBlbGlmIFBfcHJlZmVyZW5jZSA9PSAtMToKKyAgICAgICAgICAgICAgICBwcmYgPSAnbG93JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGNtZCA9ICdwcmVmaXggYWRkICVzLzY0ICVzICVzJyAlIChwcmVmaXgsIHBhcmFtZXRlciwgcHJmKQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgIyBpZiBwcmVmaXggY29uZmlndXJlZCBiZWZvcmUgc3RhcnRpbmcgT3BlblRocmVhZCBzdGFjaworICAgICAgICAgICAgICAgICMgZG8gbm90IHNlbmQgb3V0IHNlcnZlciBkYXRhIG50ZiBwcm8tYWN0aXZlbHkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fX2lzT3BlblRocmVhZFJ1bm5pbmcoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHNlbmQgc2VydmVyIGRhdGEgbnRmIHRvIGxlYWRlcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCduZXRkYXRhcmVnaXN0ZXInKVswXSA9PSAnRG9uZScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImNvbmZpZ0JvcmRlclJvdXRlcigpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHNldE5ldHdvcmtJRFRpbWVvdXQoc2VsZiwgaU53a0lEVGltZU91dCk6CisgICAgICAgICIiInNldCBuZXR3b3JraWQgdGltZW91dCBmb3IgVGhyZWFkIGRldmljZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpTndrSURUaW1lT3V0OiBhIGdpdmVuIE5FVFdPUktfSURfVElNRU9VVAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCBORVRXT1JLX0lEX1RJTUVPVVQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCBORVRXT1JLX0lEX1RJTUVPVVQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldE5ldHdvcmtJRFRpbWVvdXQnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGlOd2tJRFRpbWVPdXQKKyAgICAgICAgaU53a0lEVGltZU91dCAvPSAxMDAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICduZXR3b3JraWR0aW1lb3V0ICVzJyAlIHN0cihpTndrSURUaW1lT3V0KQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldE5ldHdvcmtJRFRpbWVvdXQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRLZWVwQWxpdmVUaW1lT3V0KHNlbGYsIGlUaW1lT3V0KToKKyAgICAgICAgIiIic2V0IGtlZXAgYWxpdmUgdGltZW91dCBmb3IgZGV2aWNlCisgICAgICAgICAgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGFsc28gc2V0IFNFRCBwb2xsaW5nIHJhdGUKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgaVRpbWVPdXQ6IGRhdGEgcG9sbCBwZXJpb2QgZm9yIHNsZWVweSBlbmQgZGV2aWNlCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBkYXRhIHBvbGwgcGVyaW9kIGZvciBTRUQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgZGF0YSBwb2xsIHBlcmlvZCBmb3IgU0VECisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRLZWVwQWxpdmVUaW1lT3V0JyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBpVGltZU91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAncG9sbHBlcmlvZCAlcycgJSBzdHIoaVRpbWVPdXQpCisgICAgICAgICAgICBwcmludCBjbWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0S2VlcEFsaXZlVGltZU91dCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHNldEtleVNlcXVlbmNlQ291bnRlcihzZWxmLCBpS2V5U2VxdWVuY2VWYWx1ZSk6CisgICAgICAgICIiIiBzZXQgdGhlIEtleSBzZXF1ZW5jZSBjb3VudGVyIGNvcnJlc3BvbmRpbmcgdG8gVGhyZWFkIE5ldHdvcmsgbWFzdGVyIGtleQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpS2V5U2VxdWVuY2VWYWx1ZToga2V5IHNlcXVlbmNlIHZhbHVlCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBrZXkgc2VxdWVuY2UKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUga2V5IHNlcXVlbmNlCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRLZXlTZXF1ZW5jZUNvdW50ZXInICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGlLZXlTZXF1ZW5jZVZhbHVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdrZXlzZXF1ZW5jZSBjb3VudGVyICVzJyAlIHN0cihpS2V5U2VxdWVuY2VWYWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoInNldEtleVNlcXVlbmNlQ291bnRlcigpIEVycm9yOyAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldEtleVNlcXVlbmNlQ291bnRlcihzZWxmKToKKyAgICAgICAgIiIiZ2V0IGN1cnJlbnQgVGhyZWFkIE5ldHdvcmsga2V5IHNlcXVlbmNlIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldEtleVNlcXVlbmNlQ291bnRlcicgJSBzZWxmLnBvcnQKKyAgICAgICAga2V5U2VxdWVuY2UgPSAnJworICAgICAgICBrZXlTZXF1ZW5jZSA9IHNlbGYuX19zZW5kQ29tbWFuZCgna2V5c2VxdWVuY2UgY291bnRlcicpWzBdCisgICAgICAgIHJldHVybiBrZXlTZXF1ZW5jZQorCisgICAgZGVmIGluY3JlbWVudEtleVNlcXVlbmNlQ291bnRlcihzZWxmLCBpSW5jcmVtZW50VmFsdWU9MSk6CisgICAgICAgICIiImluY3JlbWVudCB0aGUga2V5IHNlcXVlbmNlIHdpdGggYSBnaXZlbiB2YWx1ZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBpSW5jcmVtZW50VmFsdWU6IHNwZWNpZmljIGluY3JlbWVudCB2YWx1ZSB0byBiZSBhZGRlZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGluY3JlbWVudCB0aGUga2V5IHNlcXVlbmNlIHdpdGggYSBnaXZlbiB2YWx1ZQorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gaW5jcmVtZW50IHRoZSBrZXkgc2VxdWVuY2Ugd2l0aCBhIGdpdmVuIHZhbHVlCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBpbmNyZW1lbnRLZXlTZXF1ZW5jZUNvdW50ZXInICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IGlJbmNyZW1lbnRWYWx1ZQorICAgICAgICBjdXJyZW50S2V5U2VxID0gJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VycmVudEtleVNlcSA9IHNlbGYuZ2V0S2V5U2VxdWVuY2VDb3VudGVyKCkKKyAgICAgICAgICAgIGtleVNlcXVlbmNlID0gaW50KGN1cnJlbnRLZXlTZXEsIDEwKSArIGlJbmNyZW1lbnRWYWx1ZQorICAgICAgICAgICAgcHJpbnQga2V5U2VxdWVuY2UKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNldEtleVNlcXVlbmNlQ291bnRlcihrZXlTZXF1ZW5jZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiaW5jcmVtZW50S2V5U2VxdWVuY2VDb3VudGVyKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgc2V0TmV0d29ya0RhdGFSZXF1aXJlbWVudChzZWxmLCBlRGF0YVJlcXVpcmVtZW50KToKKyAgICAgICAgIiIic2V0IHdoZXRoZXIgdGhlIFRocmVhZCBkZXZpY2UgcmVxdWlyZXMgdGhlIGZ1bGwgbmV0d29yayBkYXRhCisgICAgICAgICAgIG9yIG9ubHkgcmVxdWlyZXMgdGhlIHN0YWJsZSBuZXR3b3JrIGRhdGEKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZURhdGFSZXF1aXJlbWVudDogaXMgdHJ1ZSBpZiByZXF1aXJpbmcgdGhlIGZ1bGwgbmV0d29yayBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBuZXR3b3JrIHJlcXVpcmVtZW50CisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXROZXR3b3JrRGF0YVJlcXVpcmVtZW50JyAlIHNlbGYucG9ydAorICAgICAgICBwcmludCBlRGF0YVJlcXVpcmVtZW50CisKKyAgICAgICAgaWYgZURhdGFSZXF1aXJlbWVudCA9PSBEZXZpY2VfRGF0YV9SZXF1aXJlbWVudC5BTExfREFUQToKKyAgICAgICAgICAgIHNlbGYubmV0d29ya0RhdGFSZXF1aXJlbWVudCA9ICduJworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNvbmZpZ0V4dGVybmFsUm91dGVyKHNlbGYsIFBfUHJlZml4LCBQX3N0YWJsZSwgUl9QcmVmZXJlbmNlPTApOgorICAgICAgICAiIiJjb25maWd1cmUgYm9yZGVyIHJvdXRlciB3aXRoIGEgZ2l2ZW4gZXh0ZXJuYWwgcm91dGUgcHJlZml4IGVudHJ5CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIFBfUHJlZml4OiBJUHY2IHByZWZpeCBmb3IgdGhlIHJvdXRlCisgICAgICAgICAgICBQX1N0YWJsZTogaXMgdHJ1ZSBpZiB0aGUgZXh0ZXJuYWwgcm91dGUgcHJlZml4IGlzIHN0YWJsZSBuZXR3b3JrIGRhdGEKKyAgICAgICAgICAgIFJfUHJlZmVyZW5jZTogYSB0d28tYml0IHNpZ25lZCBpbnRlZ2VyIGluZGljYXRpbmcgUm91dGVyIHByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMTogaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBtZWRpdW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAtMTogbG93CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gY29uZmlndXJlIHRoZSBib3JkZXIgcm91dGVyIHdpdGggYSBnaXZlbiBleHRlcm5hbCByb3V0ZSBwcmVmaXgKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIGNvbmZpZ3VyZSB0aGUgYm9yZGVyIHJvdXRlciB3aXRoIGEgZ2l2ZW4gZXh0ZXJuYWwgcm91dGUgcHJlZml4CisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBjb25maWdFeHRlcm5hbFJvdXRlcicgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgUF9QcmVmaXgKKyAgICAgICAgc3RhYmxlID0gJycKKyAgICAgICAgcHJlZml4ID0gc2VsZi5fX2NvbnZlcnRJcDZQcmVmaXhTdHJpbmdUb0lwNkFkZHJlc3Moc3RyKFBfUHJlZml4KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgUl9QcmVmZXJlbmNlID09IDE6CisgICAgICAgICAgICAgICAgcHJmID0gJ2hpZ2gnCisgICAgICAgICAgICBlbGlmIFJfUHJlZmVyZW5jZSA9PSAwOgorICAgICAgICAgICAgICAgIHByZiA9ICdtZWQnCisgICAgICAgICAgICBlbGlmIFJfUHJlZmVyZW5jZSA9PSAtMToKKyAgICAgICAgICAgICAgICBwcmYgPSAnbG93JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmIFBfc3RhYmxlOgorICAgICAgICAgICAgICAgIHN0YWJsZSArPSAncycKKyAgICAgICAgICAgICAgICBjbWQgPSAncm91dGUgYWRkICVzLzY0ICVzICVzJyAlIChwcmVmaXgsIHN0YWJsZSwgcHJmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAncm91dGUgYWRkICVzLzY0ICVzJyAlIChwcmVmaXgsIHByZikKKyAgICAgICAgICAgIHByaW50IGNtZAorCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgIyBzZW5kIHNlcnZlciBkYXRhIG50ZiB0byBsZWFkZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKCduZXRkYXRhcmVnaXN0ZXInKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiY29uZmlnRXh0ZXJuYWxSb3V0ZXIoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXROZWlnaGJvdXJpbmdSb3V0ZXJzKHNlbGYpOgorICAgICAgICAiIiJnZXQgbmVpZ2hib3Jpbmcgcm91dGVycyBpbmZvcm1hdGlvbgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBuZWlnaGJvcmluZyByb3V0ZXJzJyBleHRlbmRlZCBhZGRyZXNzCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXROZWlnaGJvdXJpbmdSb3V0ZXJzJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICByb3V0ZXJJbmZvID0gW10KKyAgICAgICAgICAgIHJvdXRlckxpc3QgPSBbXQorICAgICAgICAgICAgcm91dGVyTGlzdCA9IHNlbGYuX19zZW5kQ29tbWFuZCgncm91dGVyIGxpc3QnKVswXS5zcGxpdCgpCisgICAgICAgICAgICBwcmludCByb3V0ZXJMaXN0CisKKyAgICAgICAgICAgIGlmICdEb25lJyBpbiByb3V0ZXJMaXN0OgorICAgICAgICAgICAgICAgIHByaW50ICdubyBuZWlnaGJvdXJpbmcgcm91dGVycycKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBmb3IgaW5kZXggaW4gcm91dGVyTGlzdDoKKyAgICAgICAgICAgICAgICByb3V0ZXIgPSBbXQorICAgICAgICAgICAgICAgIGNtZCA9ICdyb3V0ZXIgJXMnICUgaW5kZXgKKyAgICAgICAgICAgICAgICByb3V0ZXIgPSBzZWxmLl9fc2VuZENvbW1hbmQoY21kKQorCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcm91dGVyOgorICAgICAgICAgICAgICAgICAgICBpZiAnRG9uZScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICNlbGlmICdSbG9jJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAjICAgIHJsb2MxNiA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgICAgICBlbGlmICdFeHQgQWRkcicgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV1aSA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVySW5mby5hcHBlbmQoaW50KGV1aSwgMTYpKQorICAgICAgICAgICAgICAgICAgICAjZWxpZiAnTFFJIEluJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAjICAgIGxxaV9pbiA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgICAgICAjZWxpZiAnTFFJIE91dCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgIyAgICBscWlfb3V0ID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHByaW50IHJvdXRlckluZm8KKyAgICAgICAgICAgIHJldHVybiByb3V0ZXJJbmZvCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImdldE5laWdoYm91cmluZ0RldmljZSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldENoaWxkcmVuSW5mbyhzZWxmKToKKyAgICAgICAgIiIiZ2V0IGFsbCBjaGlsZHJlbiBpbmZvcm1hdGlvbgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBjaGlsZHJlbidzIGV4dGVuZGVkIGFkZHJlc3MKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldENoaWxkcmVuSW5mbycgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2hpbGRyZW5JbmZvQWxsID0gW10KKyAgICAgICAgICAgIGNoaWxkcmVuSW5mbyA9IHsnRVVJJzogMCwgJ1Jsb2MxNic6IDAsICdNTEVJRCc6ICcnfQorICAgICAgICAgICAgY2hpbGRyZW5MaXN0ID0gc2VsZi5fX3NlbmRDb21tYW5kKCdjaGlsZCBsaXN0JylbMF0uc3BsaXQoKQorICAgICAgICAgICAgcHJpbnQgY2hpbGRyZW5MaXN0CisKKyAgICAgICAgICAgIGlmICdEb25lJyBpbiBjaGlsZHJlbkxpc3Q6CisgICAgICAgICAgICAgICAgcHJpbnQgJ25vIGNoaWxkcmVuJworICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGZvciBpbmRleCBpbiBjaGlsZHJlbkxpc3Q6CisgICAgICAgICAgICAgICAgY21kID0gJ2NoaWxkICVzJyAlIGluZGV4CisgICAgICAgICAgICAgICAgY2hpbGQgPSBbXQorICAgICAgICAgICAgICAgIGNoaWxkID0gc2VsZi5fX3NlbmRDb21tYW5kKGNtZCkKKworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNoaWxkOgorICAgICAgICAgICAgICAgICAgICBpZiAnRG9uZScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsaWYgJ1Jsb2MnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBybG9jMTYgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnRXh0IEFkZHInIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBldWkgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICAgICAgICAgI2VsaWYgJ0NoaWxkIElEJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAjICAgIGNoaWxkX2lkID0gbGluZS5zcGxpdCgpWzJdCisgICAgICAgICAgICAgICAgICAgICNlbGlmICdNb2RlJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAjICAgIG1vZGUgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgIGNoaWxkcmVuSW5mb1snRVVJJ10gPSBpbnQoZXVpLCAxNikKKyAgICAgICAgICAgICAgICBjaGlsZHJlbkluZm9bJ1Jsb2MxNiddID0gaW50KHJsb2MxNiwgMTYpCisgICAgICAgICAgICAgICAgI2NoaWxkcmVuX2luZm9bJ01MRUlEJ10gPSBzZWxmLmdldE1MRUlEKCkKKworICAgICAgICAgICAgICAgIGNoaWxkcmVuSW5mb0FsbC5hcHBlbmQoY2hpbGRyZW5JbmZvWydFVUknXSkKKyAgICAgICAgICAgICAgICAjY2hpbGRyZW5JbmZvQWxsLmFwcGVuZChjaGlsZHJlbkluZm8pCisKKyAgICAgICAgICAgIHByaW50IGNoaWxkcmVuSW5mb0FsbAorICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuSW5mb0FsbAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJnZXRDaGlsZHJlbkluZm8oKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRYcGFuSWQoc2VsZiwgeFBhbklkKToKKyAgICAgICAgIiIic2V0IGV4dGVuZGVkIFBBTiBJRCBvZiBUaHJlYWQgTmV0d29yaworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB4UGFuSWQ6IGV4dGVuZGVkIFBBTiBJRCBpbiBoZXggZm9ybWF0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2V0IHRoZSBleHRlbmRlZCBQQU4gSUQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCB0aGUgZXh0ZW5kZWQgUEFOIElECisgICAgICAgICIiIgorICAgICAgICB4cGFuaWQgPSAnJworICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRYcGFuSWQnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHhQYW5JZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh4UGFuSWQsIHN0cik6CisgICAgICAgICAgICAgICAgeHBhbmlkID0gc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoeFBhbklkKQorCisgICAgICAgICAgICAgICAgIyBwcmVwZW5kICcwJyBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgaWYgbGVuKHhwYW5pZCkgPCAxNjoKKyAgICAgICAgICAgICAgICAgICAgeHBhbmlkID0geHBhbmlkLnpmaWxsKDE2KQorICAgICAgICAgICAgICAgICAgICBwcmludCB4cGFuaWQKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJ2V4dHBhbmlkICVzJyAlIHhwYW5pZAorICAgICAgICAgICAgICAgICAgICBkYXRhc2V0Q21kID0gJ2RhdGFzZXQgZXh0cGFuaWQgJXMnICUgeHBhbmlkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHhwYW5pZCA9IHhQYW5JZAorICAgICAgICAgICAgICAgIGNtZCA9ICdleHRwYW5pZCAlcycgJSB4cGFuaWQKKyAgICAgICAgICAgICAgICBkYXRhc2V0Q21kID0gJ2RhdGFzZXQgZXh0cGFuaWQgJXMnICUgeHBhbmlkCisKKyAgICAgICAgICAgIHNlbGYueHBhbklkID0geHBhbmlkCisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScgYW5kIHNlbGYuX19zZW5kQ29tbWFuZChkYXRhc2V0Q21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0WHBhbklkKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgZ2V0TmVpZ2hib3VyaW5nRGV2aWNlcyhzZWxmKToKKyAgICAgICAgIiIiZ2V0cyB0aGUgbmVpZ2hib3JpbmcgZGV2aWNlcycgZXh0ZW5kZWQgYWRkcmVzcyB0byBjb21wdXRlIHRoZSBEVVQKKyAgICAgICAgICAgZXh0ZW5kZWQgYWRkcmVzcyBhdXRvbWF0aWNhbGx5CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgbGlzdCBpbmNsdWRpbmcgZXh0ZW5kZWQgYWRkcmVzcyBvZiBuZWlnaGJvcmluZyByb3V0ZXJzLCBwYXJlbnQKKyAgICAgICAgICAgIGFzIHdlbGwgYXMgY2hpbGRyZW4KKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE5laWdoYm91cmluZ0RldmljZXMnICUgc2VsZi5wb3J0CisgICAgICAgIG5laWdoYm91ckxpc3QgPSBbXQorCisgICAgICAgICMgZ2V0IHBhcmVudCBpbmZvCisgICAgICAgIHBhcmVudEFkZHIgPSBzZWxmLmdldFBhcmVudEFkZHJlc3MoKQorICAgICAgICBpZiBwYXJlbnRBZGRyICE9IDA6CisgICAgICAgICAgICBuZWlnaGJvdXJMaXN0LmFwcGVuZChwYXJlbnRBZGRyKQorCisgICAgICAgICMgZ2V0IEVEL1NFRCBjaGlsZHJlbiBpbmZvCisgICAgICAgIGNoaWxkTmVpZ2hib3VycyA9IHNlbGYuZ2V0Q2hpbGRyZW5JbmZvKCkKKyAgICAgICAgaWYgY2hpbGROZWlnaGJvdXJzICE9IE5vbmUgYW5kIGxlbihjaGlsZE5laWdoYm91cnMpID4gMDoKKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiBjaGlsZE5laWdoYm91cnM6CisgICAgICAgICAgICAgICAgbmVpZ2hib3VyTGlzdC5hcHBlbmQoZW50cnkpCisKKyAgICAgICAgIyBnZXQgbmVpZ2hib3Jpbmcgcm91dGVycyBpbmZvCisgICAgICAgIHJvdXRlck5laWdoYm91cnMgPSBzZWxmLmdldE5laWdoYm91cmluZ1JvdXRlcnMoKQorICAgICAgICBpZiByb3V0ZXJOZWlnaGJvdXJzICE9IE5vbmUgYW5kIGxlbihyb3V0ZXJOZWlnaGJvdXJzKSA+IDA6CisgICAgICAgICAgICBmb3IgZW50cnkgaW4gcm91dGVyTmVpZ2hib3VyczoKKyAgICAgICAgICAgICAgICBuZWlnaGJvdXJMaXN0LmFwcGVuZChlbnRyeSkKKworICAgICAgICBwcmludCBuZWlnaGJvdXJMaXN0CisgICAgICAgIHJldHVybiBuZWlnaGJvdXJMaXN0CisKKyAgICBkZWYgc2V0UGFydGF0aW9uSWQoc2VsZiwgcGFydGF0aW9uSWQpOgorICAgICAgICAiIiJzZXQgVGhyZWFkIE5ldHdvcmsgUGFydGl0aW9uIElECisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBhcnRpdGlvbklkOiBwYXJ0aXRpb24gaWQgdG8gYmUgc2V0IGJ5IGxlYWRlcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCB0aGUgUGFydGl0aW9uIElECisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgdGhlIFBhcnRpdGlvbiBJRAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0UGFydGF0aW9uSWQnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHBhcnRhdGlvbklkCisKKyAgICAgICAgY21kID0gJ2xlYWRlcnBhcnRpdGlvbmlkICVzJyAlKHN0cihoZXgocGFydGF0aW9uSWQpKS5yc3RyaXAoJ0wnKSkKKyAgICAgICAgcHJpbnQgY21kCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgIGRlZiBnZXRHVUEoc2VsZiwgZmlsdGVyQnlQcmVmaXg9Tm9uZSk6CisgICAgICAgICIiImdldCBleHBlY3RlZCBnbG9iYWwgdW5pY2FzdCBJUHY2IGFkZHJlc3Mgb2YgVGhyZWFkIGRldmljZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWx0ZXJCeVByZWZpeDogYSBnaXZlbiBleHBlY3RlZCBnbG9iYWwgSVB2NiBwcmVmaXggdG8gYmUgbWF0Y2hlZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBhIGdsb2JhbCBJUHY2IGFkZHJlc3MgdGhhdCBtYXRjaGVzIHdpdGggZmlsdGVyQnlQcmVmaXgKKyAgICAgICAgICAgIG9yIE5vbmUgaWYgbm8gbWF0Y2hlZCBHVUEKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldEdVQScgJSBzZWxmLnBvcnQKKyAgICAgICAgcHJpbnQgZmlsdGVyQnlQcmVmaXgKKyAgICAgICAgZ2xvYmFsQWRkcnMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGdldCBnbG9iYWwgYWRkcnMgc2V0IGlmIG11bHRpcGxlCisgICAgICAgICAgICBnbG9iYWxBZGRycyA9IHNlbGYuZ2V0R2xvYmFsKCkKKworICAgICAgICAgICAgaWYgZmlsdGVyQnlQcmVmaXggaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsQWRkcnNbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZ2xvYmFsQWRkcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChmaWx0ZXJCeVByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgICAgIHByaW50ICdubyBnbG9iYWwgYWRkcmVzcyBtYXRjaGVkJworICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImdldEdVQSgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIGdldFNob3J0QWRkcmVzcyhzZWxmKToKKyAgICAgICAgIiIiZ2V0IFJsb2MxNiBzaG9ydCBhZGRyZXNzIG9mIFRocmVhZCBkZXZpY2UiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgZ2V0U2hvcnRBZGRyZXNzJyAlIHNlbGYucG9ydAorICAgICAgICByZXR1cm4gc2VsZi5nZXRSbG9jMTYoKQorCisgICAgZGVmIGdldFVMQTY0KHNlbGYpOgorICAgICAgICAiIiJnZXQgbWVzaCBsb2NhbCBFSUQgb2YgVGhyZWFkIGRldmljZSIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRVTEE2NCcgJSBzZWxmLnBvcnQKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0TUxFSUQoKQorCisgICAgZGVmIHNldE1MUHJlZml4KHNlbGYsIHNNZXNoTG9jYWxQcmVmaXgpOgorICAgICAgICAiIiJzZXQgbWVzaCBsb2NhbCBwcmVmaXgiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0TUxQcmVmaXgnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IG1lc2hsb2NhbHByZWZpeCAlcycgJSBzTWVzaExvY2FsUHJlZml4CisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0TUxQcmVmaXgoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBnZXRNTDE2KHNlbGYpOgorICAgICAgICAiIiJnZXQgbWVzaCBsb2NhbCAxNiB1bmljYXN0IGFkZHJlc3MgKFJsb2MpIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGdldE1MMTYnICUgc2VsZi5wb3J0CisgICAgICAgIHJldHVybiBzZWxmLmdldFJsb2MoKQorCisgICAgZGVmIGRvd25ncmFkZVRvRGV2aWNlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdXBncmFkZVRvUm91dGVyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZm9yY2VTZXRTbGFhYyhzZWxmLCBzbGFhY0FkZHJlc3MpOgorICAgICAgICAiIiJmb3JjZSB0byBzZXQgYSBzbGFhYyBJUHY2IGFkZHJlc3MgdG8gVGhyZWFkIGludGVyZmFjZQorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzbGFhY0FkZHJlc3M6IGEgc2xhYWMgSVB2NiBhZGRyZXNzIHRvIGJlIHNldAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNldCBzbGFhYyBhZGRyZXNzIHRvIFRocmVhZCBpbnRlcmZhY2UKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNldCBzbGFhYyBhZGRyZXNzIHRvIFRocmVhZCBpbnRlcmZhY2UKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGZvcmNlU2V0U2xhYWMnICUgc2VsZi5wb3J0CisgICAgICAgIHByaW50IHNsYWFjQWRkcmVzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnaXBhZGRyIGFkZCAlcycgJSBzdHIoc2xhYWNBZGRyZXNzKQorICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoImZvcmNlU2V0U2xhYWMoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRTbGVlcHlOb2RlUG9sbFRpbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbmFibGVBdXRvRFVUT2JqZWN0RmxhZyhzZWxmKToKKyAgICAgICAgIiIic2V0IEF1dG9EVVRlbmFibGUgZmxhZyIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBlbmFibGVBdXRvRFVUT2JqZWN0RmxhZycgJSBzZWxmLnBvcnQKKyAgICAgICAgc2VsZi5BdXRvRFVURW5hYmxlID0gVHJ1ZQorCisgICAgZGVmIGdldENoaWxkVGltZW91dFZhbHVlKHNlbGYpOgorICAgICAgICAiIiJnZXQgY2hpbGQgdGltZW91dCIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBnZXRDaGlsZFRpbWVvdXRWYWx1ZScgJSBzZWxmLnBvcnQKKyAgICAgICAgY2hpbGRUaW1lb3V0ID0gc2VsZi5fX3NlbmRDb21tYW5kKCdjaGlsZHRpbWVvdXQnKVswXQorICAgICAgICByZXR1cm4gaW50KGNoaWxkVGltZW91dCkKKworICAgIGRlZiBkaWFnbm9zdGljR2V0KHNlbGYsIHN0ckRlc3RpbmF0aW9uQWRkciwgbGlzdFRMVl9pZHM9W10pOgorICAgICAgICBpZiBub3QgbGlzdFRMVl9pZHM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgbGVuKGxpc3RUTFZfaWRzKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICduZXR3b3JrZGlhZ25vc3RpYyBnZXQgJXMgJXMnICUgKHN0ckRlc3RpbmF0aW9uQWRkciwgJyAnLmpvaW4oW3N0cih0bHYpIGZvciB0bHYgaW4gbGlzdFRMVl9pZHNdKSkKKyAgICAgICAgcHJpbnQgY21kCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlbmRsaW5lKGNtZCkKKworICAgIGRlZiBkaWFnbm9zdGljUmVzZXQoc2VsZiwgc3RyRGVzdGluYXRpb25BZGRyLCBsaXN0VExWX2lkcz1bXSk6CisgICAgICAgIGlmIG5vdCBsaXN0VExWX2lkczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBsZW4obGlzdFRMVl9pZHMpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY21kID0gJ25ldHdvcmtkaWFnbm9zdGljIHJlc2V0ICVzICVzJyAlIChzdHJEZXN0aW5hdGlvbkFkZHIsICcgJy5qb2luKFtzdHIodGx2KSBmb3IgdGx2IGluIGxpc3RUTFZfaWRzXSkpCisgICAgICAgIHByaW50IGNtZAorCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKQorCisgICAgZGVmIHN0YXJ0TmF0aXZlQ29tbWlzc2lvbmVyKHNlbGYsIHN0clBTS2M9J0dSTHBhc3NXb3JkJyk6CisgICAgICAgICNUT0RPOiBTdXBwb3J0IHRoZSB3aG9sZSBOYXRpdmUgQ29tbWlzc2lvbmVyIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgIyAgICAgIEN1cnJlbnRseSBpdCBvbmx5IGFpbXMgdG8gdHJpZ2dlciBhIERpc2NvdmVyeSBSZXF1ZXN0IG1lc3NhZ2UgdG8gcGFzcyBDZXJ0aWZpY2F0aW9uIHRlc3QgNS44LjQKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc3RhcnROYXRpdmVDb21taXNzaW9uZXInICUgc2VsZi5wb3J0CisgICAgICAgIHNlbGYuX19zZW5kQ29tbWFuZCgnaWZjb25maWcgdXAnKQorICAgICAgICBjbWQgPSAnam9pbmVyIHN0YXJ0ICVzJyAlKHN0clBTS2MpCisgICAgICAgIHByaW50IGNtZAorICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAiRG9uZSI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc3RhcnRDb2xsYXBzZWRDb21taXNzaW9uZXIoc2VsZik6CisgICAgICAgICIiInN0YXJ0IENvbGxhcHNlZCBDb21taXNzaW9uZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzdGFydCBDb21taXNzaW9uZXIKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHN0YXJ0IENvbW1pc3Npb25lcgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc3RhcnRDb2xsYXBzZWRDb21taXNzaW9uZXInICUgc2VsZi5wb3J0CisgICAgICAgIGlmIHNlbGYuX19zdGFydE9wZW5UaHJlYWQoKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMjApCisgICAgICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIHN0YXJ0JworICAgICAgICAgICAgcHJpbnQgY21kCisgICAgICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5pc0FjdGl2ZUNvbW1pc3Npb25lciA9IFRydWUKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIwKSAjIHRpbWUgZm9yIHBldGl0aW9uIHByb2Nlc3MKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXRKb2luS2V5KHNlbGYsIHN0clBTS2MpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2NhbkpvaW5lcihzZWxmLCB4RVVJPScqJywgc3RyUFNLZD0ndGhyZWFkanBha2V0ZXN0Jyk6CisgICAgICAgICIiInNjYW4gSm9pbmVyCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHhFVUk6IEpvaW5lcidzIEVVSS02NAorICAgICAgICAgICAgc3RyUFNLZDogSm9pbmVyJ3MgUFNLZCBmb3IgY29tbWlzc2lvbmluZworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIGFkZCBKb2luZXIncyBzdGVlcmluZyBkYXRhCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBhZGQgSm9pbmVyJ3Mgc3RlZXJpbmcgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2NhbkpvaW5lcicgJSBzZWxmLnBvcnQKKyAgICAgICAgaWYgeEVVSSA9PSAnKic6CisgICAgICAgICAgICBKb2luZXJIYXNoTWFjID0gJyonCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBKb2luZXJBZGRyID0gTW9kdWxlSGVscGVyLkNhbGN1bGF0ZUhhc2hNYWMoeEVVSSkKKyAgICAgICAgICAgIEpvaW5lckhhc2hNYWMgPSBoZXgoaW50KEpvaW5lckFkZHIpKS5yc3RyaXAoIkwiKS5sc3RyaXAoIjB4IikKKworICAgICAgICAjIGxvbmcgdGltZW91dCB2YWx1ZSB0byBhdm9pZCBhdXRvbWF0aWMgam9pbmVyIHJlbW92YWwgKGluIHNlY29uZHMpCisgICAgICAgIHRpbWVvdXQgPSA1MDAKKworICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIGpvaW5lciBhZGQgJXMgJXMgJXMnICUgKEpvaW5lckhhc2hNYWMsIHN0clBTS2QsIHN0cih0aW1lb3V0KSkKKyAgICAgICAgcHJpbnQgY21kCisgICAgICAgIGlmIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJzoKKyAgICAgICAgICAgIGlmIHNlbGYubG9nVGhyZWFkU3RhdHVzID09IHNlbGYubG9nU3RhdHVzWydzdG9wJ106CisgICAgICAgICAgICAgICAgc2VsZi5sb2dUaHJlYWQgPSBUaHJlYWRSdW5uZXIucnVuKHRhcmdldD1zZWxmLl9fcmVhZENvbW1pc3Npb25pbmdMb2dzLCBhcmdzPSgxMjAsKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXRQcm92aXNpb25pbmdVcmwoc2VsZiwgc3RyVVJMPSdncmwuY29tJyk6CisgICAgICAgICIiInNldCBwcm92aXNpb25pbmcgVXJsCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHN0clVSTDogUHJvdmlzaW9uaW5nIFVybCBzdHJpbmcKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgcHJvdmlzaW9uaW5nIFVybAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2V0IHByb3Zpc2lvbmluZyBVcmwKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHNldFByb3Zpc2lvbmluZ1VybCcgJSBzZWxmLnBvcnQKKyAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBwcm92aXNpb25pbmd1cmwgJXMnICUoc3RyVVJMKQorICAgICAgICBzZWxmLnByb3Zpc2lvbmluZ1VybCA9IHN0clVSTAorICAgICAgICBwcmludCBjbWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICJEb25lIgorCisgICAgZGVmIGFsbG93Q29tbWlzc2lvbihzZWxmKToKKyAgICAgICAgIiIic3RhcnQgY29tbWlzc2lvbmVyIGNhbmRpZGF0ZSBwZXRpdGlvbiBwcm9jZXNzCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc3RhcnQgY29tbWlzc2lvbmVyIGNhbmRpZGF0ZSBwZXRpdGlvbiBwcm9jZXNzCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzdGFydCBjb21taXNzaW9uZXIgY2FuZGlkYXRlIHBldGl0aW9uIHByb2Nlc3MKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGFsbG93Q29tbWlzc2lvbicgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBzdGFydCcKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgaWYgc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuaXNBY3RpdmVDb21taXNzaW9uZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg0MCkgIyB0aW1lIGZvciBwZXRpdGlvbiBwcm9jZXNzIGFuZCBhdCBsZWFzdCBvbmUga2VlcCBhbGl2ZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLndyaXRlaW50b2RlYnVnbG9nZ2VyKCJhbGxvd2NvbW1pc3Npb24oKSBlcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBqb2luQ29tbWlzc2lvbmVkKHNlbGYsIHN0clBTS2Q9J3RocmVhZGpwYWtldGVzdCcsIHdhaXRUaW1lPTIwKToKKyAgICAgICAgIiIic3RhcnQgam9pbmVyCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHN0clBTS2Q6IEpvaW5lcidzIFBTS2QKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzdGFydCBqb2luZXIKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHN0YXJ0IGpvaW5lcgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgam9pbkNvbW1pc3Npb25lZCcgJSBzZWxmLnBvcnQKKyAgICAgICAgc2VsZi5fX3NlbmRDb21tYW5kKCdpZmNvbmZpZyB1cCcpCisgICAgICAgIGNtZCA9ICdqb2luZXIgc3RhcnQgJXMgJXMnICUoc3RyUFNLZCwgc2VsZi5wcm92aXNpb25pbmdVcmwpCisgICAgICAgIHByaW50IGNtZAorICAgICAgICBpZiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAiRG9uZSI6CisgICAgICAgICAgICBtYXhEdXJhdGlvbiA9IDE1MCAjIHNlY29uZHMKKyAgICAgICAgICAgIHNlbGYuam9pbkNvbW1pc3Npb25lZFN0YXR1cyA9IHNlbGYuam9pblN0YXR1c1snb25nb2luZyddCisKKyAgICAgICAgICAgIGlmIHNlbGYubG9nVGhyZWFkU3RhdHVzID09IHNlbGYubG9nU3RhdHVzWydzdG9wJ106CisgICAgICAgICAgICAgICAgc2VsZi5sb2dUaHJlYWQgPSBUaHJlYWRSdW5uZXIucnVuKHRhcmdldD1zZWxmLl9fcmVhZENvbW1pc3Npb25pbmdMb2dzLCBhcmdzPShtYXhEdXJhdGlvbiwpKQorCisgICAgICAgICAgICB0X2VuZCA9IHRpbWUudGltZSgpICsgbWF4RHVyYXRpb24KKyAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgdF9lbmQ6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5qb2luQ29tbWlzc2lvbmVkU3RhdHVzID09IHNlbGYuam9pblN0YXR1c1snc3VjY2VlZCddOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5qb2luQ29tbWlzc2lvbmVkU3RhdHVzID09IHNlbGYuam9pblN0YXR1c1snZmFpbGVkJ106CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgICAgICBzZWxmLl9fc2VuZENvbW1hbmQoJ3RocmVhZCBzdGFydCcpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDMwKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldENvbW1pc3Npb25pbmdMb2dzKHNlbGYpOgorICAgICAgICAiIiJnZXQgQ29tbWlzc2lvbmluZyBsb2dzCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgQ29tbWlzc2lvbmluZyBsb2dzCisgICAgICAgICIiIgorICAgICAgICByYXdMb2dzID0gc2VsZi5sb2dUaHJlYWQuZ2V0KCkKKyAgICAgICAgUHJvY2Vzc2VkTG9ncyA9IFtdCisgICAgICAgIHBheWxvYWQgPSBbXQorICAgICAgICB3aGlsZSBub3QgcmF3TG9ncy5lbXB0eSgpOgorICAgICAgICAgICAgcmF3TG9nRWFjaCA9IHJhd0xvZ3MuZ2V0KCkKKyAgICAgICAgICAgIHByaW50IHJhd0xvZ0VhY2gKKyAgICAgICAgICAgIGlmICJbVEhDSV0iIG5vdCBpbiByYXdMb2dFYWNoOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIEVuY3J5cHRlZFBhY2tldCA9IFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldCgpCisgICAgICAgICAgICBpbmZvTGlzdCA9IHJhd0xvZ0VhY2guc3BsaXQoJ1tUSENJXScpWzFdLnNwbGl0KCddJylbMF0uc3BsaXQoJ3wnKQorICAgICAgICAgICAgZm9yIGVhY2hJbmZvIGluIGluZm9MaXN0OgorICAgICAgICAgICAgICAgIHByaW50IGVhY2hJbmZvCisgICAgICAgICAgICAgICAgaW5mbyA9IGVhY2hJbmZvLnNwbGl0KCI9IikKKyAgICAgICAgICAgICAgICBpbmZvVHlwZSA9IGluZm9bMF0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGluZm9WYWx1ZSA9IGluZm9bMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmICJkaXJlY3Rpb24iIGluIGluZm9UeXBlOgorICAgICAgICAgICAgICAgICAgICBFbmNyeXB0ZWRQYWNrZXQuRGlyZWN0aW9uID0gUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X0RpcmVjdGlvbi5JTiBpZiAncmVjdicgaW4gaW5mb1ZhbHVlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X0RpcmVjdGlvbi5PVVQgaWYgJ3NlbmQnIGluIGluZm9WYWx1ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldF9EaXJlY3Rpb24uVU5LTk9XTgorICAgICAgICAgICAgICAgIGVsaWYgInR5cGUiIGluIGluZm9UeXBlOgorICAgICAgICAgICAgICAgICAgICBFbmNyeXB0ZWRQYWNrZXQuVHlwZSA9IFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldF9UeXBlLkpPSU5fRklOX3JlcSBpZiAnSk9JTl9GSU4ucmVxJyBpbiBpbmZvVmFsdWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfVHlwZS5KT0lOX0ZJTl9yc3AgaWYgJ0pPSU5fRklOLnJzcCcgaW4gaW5mb1ZhbHVlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgUGxhdGZvcm1EaWFnbm9zdGljUGFja2V0X1R5cGUuSk9JTl9FTlRfcmVxIGlmICdKT0lOX0VOVC5udGYnIGluIGluZm9WYWx1ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFBsYXRmb3JtRGlhZ25vc3RpY1BhY2tldF9UeXBlLkpPSU5fRU5UX3JzcCBpZiAnSk9JTl9FTlQucnNwJyBpbiBpbmZvVmFsdWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBQbGF0Zm9ybURpYWdub3N0aWNQYWNrZXRfVHlwZS5VTktOT1dOCisgICAgICAgICAgICAgICAgZWxpZiAibGVuIiBpbiBpbmZvVHlwZToKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXNJbkVhY2hMaW5lID0gMTYKKyAgICAgICAgICAgICAgICAgICAgRW5jcnlwdGVkUGFja2V0LlRMVnNMZW5ndGggPSBpbnQoaW5mb1ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkTGluZUNvdW50ID0gKGludChpbmZvVmFsdWUpICsgYnl0ZXNJbkVhY2hMaW5lIC0gMSkvYnl0ZXNJbkVhY2hMaW5lCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHBheWxvYWRMaW5lQ291bnQgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZExpbmVDb3VudCA9IHBheWxvYWRMaW5lQ291bnQgLSAxCisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkTGluZSA9IHJhd0xvZ3MuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRTcGxpdCA9IHBheWxvYWRMaW5lLnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBibG9jayBpbiByYW5nZSgxLCAzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkQmxvY2sgPSBwYXlsb2FkU3BsaXRbYmxvY2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZFZhbHVlcyA9IHBheWxvYWRCbG9jay5zcGxpdCgnICcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiByYW5nZSgxLCA5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIi4uIiBub3QgaW4gcGF5bG9hZFZhbHVlc1tudW1dOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5hcHBlbmQoaW50KHBheWxvYWRWYWx1ZXNbbnVtXSwgMTYpKQorCisgICAgICAgICAgICAgICAgICAgIEVuY3J5cHRlZFBhY2tldC5UTFZzID0gUGxhdGZvcm1QYWNrZXRzLnJlYWQoRW5jcnlwdGVkUGFja2V0LlR5cGUsIHBheWxvYWQpIGlmIHBheWxvYWQgIT0gW10gZWxzZSBbXQorCisgICAgICAgICAgICBQcm9jZXNzZWRMb2dzLmFwcGVuZChFbmNyeXB0ZWRQYWNrZXQpCisgICAgICAgIHJldHVybiBQcm9jZXNzZWRMb2dzCisKKyAgICBkZWYgTUdNVF9FRF9TQ0FOKHNlbGYsIHNBZGRyLCB4Q29tbWlzc2lvbmVyU2Vzc2lvbklkLCBsaXN0Q2hhbm5lbE1hc2ssIHhDb3VudCwgeFBlcmlvZCwgeFNjYW5EdXJhdGlvbik6CisgICAgICAgICIiInNlbmQgTUdNVF9FRF9TQ0FOIG1lc3NhZ2UgdG8gYSBnaXZlbiBkZXN0aW5haXRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNBZGRyOiBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoaXMgbWVzc2FnZQorICAgICAgICAgICAgeENvbW1pc3Npb25lclNlc3Npb25JZDogY29tbWlzc2lvbmVyIHNlc3Npb24gaWQKKyAgICAgICAgICAgIGxpc3RDaGFubmVsTWFzazogYSBjaGFubmVsIGFycmF5IHRvIGluZGljYXRlIHdoaWNoIGNoYW5uZWxzIHRvIGJlIHNjYW5lZAorICAgICAgICAgICAgeENvdW50OiBudW1iZXIgb2YgSUVFRSA4MDIuMTUuNCBFRCBTY2FucyAobWlsbGlzZWNvbmRzKQorICAgICAgICAgICAgeFBlcmlvZDogUGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBJRUVFODAyLjE1LjQgRUQgU2NhbnMgKG1pbGxpc2Vjb25kcykKKyAgICAgICAgICAgIHhTY2FuRHVyYXRpb246IElFRUUgODAyLjE1LjQgU2NhbkR1cmF0aW9uIHRvIHVzZSB3aGVuIHBlcmZvcm1pbmcgYW4gSUVFRSA4MDIuMTUuNCBFRCBTY2FuIChtaWxsaXNlY29uZHMpCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX0VEX1NDQU4gbWVzc2FnZS4KKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNlbmQgTUdNVF9FRF9TQ0FOIG1lc3NhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfRURfU0NBTicgJSBzZWxmLnBvcnQKKyAgICAgICAgY2hhbm5lbE1hc2sgPSAnJworICAgICAgICBjaGFubmVsTWFzayA9ICcweCcgKyBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyhzZWxmLl9fY29udmVydENoYW5uZWxNYXNrKGxpc3RDaGFubmVsTWFzaykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgZW5lcmd5ICVzICVzICVzICVzICVzJyAlIChjaGFubmVsTWFzaywgeENvdW50LCB4UGVyaW9kLCB4U2NhbkR1cmF0aW9uLCBzQWRkcikKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLndyaXRlaW50b2RlYnVnbG9nZ2VyKCJNR01UX0VEX1NDQU4oKSBlcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBNR01UX1BBTklEX1FVRVJZKHNlbGYsIHNBZGRyLCB4Q29tbWlzc2lvbmVyU2Vzc2lvbklkLCBsaXN0Q2hhbm5lbE1hc2ssIHhQYW5JZCk6CisgICAgICAgICIiInNlbmQgTUdNVF9QQU5JRF9RVUVSWSBtZXNzYWdlIHRvIGEgZ2l2ZW4gZGVzdGluYXRpb24KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgeFBhbklkOiBhIGdpdmVuIFBBTiBJRCB0byBjaGVjayB0aGUgY29uZmxpY3RzCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX1BBTklEX1FVRVJZIG1lc3NhZ2UuCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfUEFOSURfUVVFUlkgbWVzc2FnZS4KKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfUEFOSURfUVVFUlknICUgc2VsZi5wb3J0CisgICAgICAgIHBhbmlkID0gJycKKyAgICAgICAgY2hhbm5lbE1hc2sgPSAnJworICAgICAgICBjaGFubmVsTWFzayA9ICcweCcgKyBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyhzZWxmLl9fY29udmVydENoYW5uZWxNYXNrKGxpc3RDaGFubmVsTWFzaykpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeFBhbklkLCBzdHIpOgorICAgICAgICAgICAgcGFuaWQgPSBzdHIoaGV4KHhQYW5JZCkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBwYW5pZCAlcyAlcyAlcycgJSAocGFuaWQsIGNoYW5uZWxNYXNrLCBzQWRkcikKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLndyaXRlaW50b2RlYnVnbG9nZ2VyKCJNR01UX1BBTklEX1FVRVJZKCkgZXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgTUdNVF9BTk5PVU5DRV9CRUdJTihzZWxmLCBzQWRkciwgeENvbW1pc3Npb25lclNlc3Npb25JZCwgbGlzdENoYW5uZWxNYXNrLCB4Q291bnQsIHhQZXJpb2QpOgorICAgICAgICAiIiJzZW5kIE1HTVRfQU5OT1VOQ0VfQkVHSU4gbWVzc2FnZSB0byBhIGdpdmVuIGRlc3RpbmF0aW9uCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX0FOTk9VTkNFX0JFR0lOIG1lc3NhZ2UuCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfQU5OT1VOQ0VfQkVHSU4gbWVzc2FnZS4KKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfQU5OT1VOQ0VfQkVHSU4nICUgc2VsZi5wb3J0CisgICAgICAgIGNoYW5uZWxNYXNrID0gJycKKyAgICAgICAgY2hhbm5lbE1hc2sgPSAnMHgnICsgc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoc2VsZi5fX2NvbnZlcnRDaGFubmVsTWFzayhsaXN0Q2hhbm5lbE1hc2spKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnY29tbWlzc2lvbmVyIGFubm91bmNlICVzICVzICVzICVzJyAlIChjaGFubmVsTWFzaywgeENvdW50LCB4UGVyaW9kLCBzQWRkcikKKyAgICAgICAgICAgIHByaW50IGNtZAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLndyaXRlaW50b2RlYnVnbG9nZ2VyKCJNR01UX0FOTk9VTkNFX0JFR0lOKCkgZXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgTUdNVF9BQ1RJVkVfR0VUKHNlbGYsIEFkZHI9JycsIFRMVnM9W10pOgorICAgICAgICAiIiJzZW5kIE1HTVRfQUNUSVZFX0dFVCBjb21tYW5kCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX0FDVElWRV9HRVQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNlbmQgTUdNVF9BQ1RJVkVfR0VUCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX0FDVElWRV9HRVQnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IG1nbXRnZXRjb21tYW5kIGFjdGl2ZScKKworICAgICAgICAgICAgaWYgQWRkciAhPSAnJzoKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBhZGRyZXNzICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gQWRkcgorCisgICAgICAgICAgICBpZiBsZW4oVExWcykgIT0gMDoKKyAgICAgICAgICAgICAgICB0bHZzID0gIiIuam9pbihoZXgodGx2KS5sc3RyaXAoIjB4IikuemZpbGwoMikgZm9yIHRsdiBpbiBUTFZzKQorICAgICAgICAgICAgICAgIGNtZCArPSAnIGJpbmFyeSAnCisgICAgICAgICAgICAgICAgY21kICs9IHRsdnMKKworICAgICAgICAgICAgcHJpbnQgY21kCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJNR01UX0FDVElWRV9HRVQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBNR01UX0FDVElWRV9TRVQoc2VsZiwgc0FkZHI9JycsIHhDb21taXNzaW9uaW5nU2Vzc2lvbklkPU5vbmUsIGxpc3RBY3RpdmVUaW1lc3RhbXA9Tm9uZSwgbGlzdENoYW5uZWxNYXNrPU5vbmUsIHhFeHRlbmRlZFBhbklkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzTmV0d29ya05hbWU9Tm9uZSwgc1BTS2M9Tm9uZSwgbGlzdFNlY3VyaXR5UG9saWN5PU5vbmUsIHhDaGFubmVsPU5vbmUsIHNNZXNoTG9jYWxQcmVmaXg9Tm9uZSwgeE1hc3RlcktleT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgeFBhbklkPU5vbmUsIHhUbWZQb3J0PU5vbmUsIHhTdGVlcmluZ0RhdGE9Tm9uZSwgeEJvcmRlclJvdXRlckxvY2F0b3I9Tm9uZSwgQm9ndXNUTFY9Tm9uZSwgeERlbGF5VGltZXI9Tm9uZSk6CisgICAgICAgICIiInNlbmQgTUdNVF9BQ1RJVkVfU0VUIGNvbW1hbmQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZW5kIE1HTVRfQUNUSVZFX1NFVAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2VuZCBNR01UX0FDVElWRV9TRVQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfQUNUSVZFX1NFVCcgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgbWdtdHNldGNvbW1hbmQgYWN0aXZlJworCisgICAgICAgICAgICBpZiBsaXN0QWN0aXZlVGltZXN0YW1wICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgYWN0aXZldGltZXN0YW1wICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKGxpc3RBY3RpdmVUaW1lc3RhbXBbMF0pCisKKyAgICAgICAgICAgIGlmIHhFeHRlbmRlZFBhbklkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgZXh0cGFuaWQgJworICAgICAgICAgICAgICAgIHhwYW5pZCA9IHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHhFeHRlbmRlZFBhbklkKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHhwYW5pZCkgPCAxNjoKKyAgICAgICAgICAgICAgICAgICAgeHBhbmlkID0geHBhbmlkLnpmaWxsKDE2KQorCisgICAgICAgICAgICAgICAgY21kICs9IHhwYW5pZAorCisgICAgICAgICAgICBpZiBzTmV0d29ya05hbWUgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBuZXR3b3JrbmFtZSAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cihzTmV0d29ya05hbWUpCisKKyAgICAgICAgICAgIGlmIHhDaGFubmVsICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgY2hhbm5lbCAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cih4Q2hhbm5lbCkKKworICAgICAgICAgICAgaWYgc01lc2hMb2NhbFByZWZpeCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGxvY2FscHJlZml4ICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHNNZXNoTG9jYWxQcmVmaXgpCisKKyAgICAgICAgICAgIGlmIHhNYXN0ZXJLZXkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBtYXN0ZXJrZXkgJworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX19jb252ZXJ0TG9uZ1RvU3RyaW5nKHhNYXN0ZXJLZXkpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oa2V5KSA8IDMyOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkuemZpbGwoMzIpCisKKyAgICAgICAgICAgICAgICBjbWQgKz0ga2V5CisKKyAgICAgICAgICAgIGlmIHhQYW5JZCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIHBhbmlkICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHhQYW5JZCkKKworICAgICAgICAgICAgaWYgbGlzdENoYW5uZWxNYXNrICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgY2hhbm5lbG1hc2sgJworICAgICAgICAgICAgICAgIGNtZCArPSAnMHgnICsgc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoc2VsZi5fX2NvbnZlcnRDaGFubmVsTWFzayhsaXN0Q2hhbm5lbE1hc2spKQorCisgICAgICAgICAgICBpZiBzUFNLYyAhPSBOb25lIG9yIGxpc3RTZWN1cml0eVBvbGljeSAhPSBOb25lIG9yIFwKKyAgICAgICAgICAgICAgIHhDb21taXNzaW9uaW5nU2Vzc2lvbklkICE9IE5vbmUgb3IgeFRtZlBvcnQgIT0gTm9uZSBvciB4U3RlZXJpbmdEYXRhICE9IE5vbmUgb3IgeEJvcmRlclJvdXRlckxvY2F0b3IgIT0gTm9uZSBvciBcCisgICAgICAgICAgICAgICBCb2d1c1RMViAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIGJpbmFyeSAnCisKKyAgICAgICAgICAgIGlmIHNQU0tjICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcwNDEwJworICAgICAgICAgICAgICAgIHN0cmV0Y2hlZFBza2MgPSBUaHJlYWRfUEJLREYyLmdldChzUFNLYyxNb2R1bGVIZWxwZXIuRGVmYXVsdF9YcGFuSWQsTW9kdWxlSGVscGVyLkRlZmF1bHRfTndrTmFtZSkKKyAgICAgICAgICAgICAgICBwc2tjID0gaGV4KHN0cmV0Y2hlZFBza2MpLnJzdHJpcCgnTCcpLmxzdHJpcCgnMHgnKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHBza2MpIDwgMzI6CisgICAgICAgICAgICAgICAgICAgIHBza2MgPSBwc2tjLnpmaWxsKDMyKQorCisgICAgICAgICAgICAgICAgY21kICs9IHBza2MKKworICAgICAgICAgICAgaWYgbGlzdFNlY3VyaXR5UG9saWN5ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcwYzAzJworCisgICAgICAgICAgICAgICAgcm90YXRpb25UaW1lID0gMAorICAgICAgICAgICAgICAgIHBvbGljeUJpdHMgPSAwCisKKyAgICAgICAgICAgICAgICAjIHByZXZpb3VzIHBhc3Npbmcgd2F5IGxpc3RTZWN1cml0eVBvbGljeT1bVHJ1ZSwgVHJ1ZSwgMzYwMCwgRmFsc2UsIEZhbHNlLCBUcnVlXQorICAgICAgICAgICAgICAgIGlmIChsZW4obGlzdFNlY3VyaXR5UG9saWN5KSA9PSA2KToKKyAgICAgICAgICAgICAgICAgICAgcm90YXRpb25UaW1lID0gbGlzdFNlY3VyaXR5UG9saWN5WzJdCisKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgbGFzdCB0aHJlZSByZXNlcnZlZCBiaXRzIG11c3QgYmUgMQorICAgICAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gMGIwMDAwMDExMQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxpc3RTZWN1cml0eVBvbGljeVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUJpdHMgPSBwb2xpY3lCaXRzIHwgMGIxMDAwMDAwMAorICAgICAgICAgICAgICAgICAgICBpZiBsaXN0U2VjdXJpdHlQb2xpY3lbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gcG9saWN5Qml0cyB8IDBiMDEwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgaWYgbGlzdFNlY3VyaXR5UG9saWN5WzNdOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Qml0cyA9IHBvbGljeUJpdHMgfCAwYjAwMTAwMDAwCisgICAgICAgICAgICAgICAgICAgIGlmIGxpc3RTZWN1cml0eVBvbGljeVs0XToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUJpdHMgPSBwb2xpY3lCaXRzIHwgMGIwMDAxMDAwMAorICAgICAgICAgICAgICAgICAgICBpZiBsaXN0U2VjdXJpdHlQb2xpY3lbNV06CisgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gcG9saWN5Qml0cyB8IDBiMDAwMDEwMDAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIG5ldyBwYXNzaW5nIHdheSBsaXN0U2VjdXJpdHlQb2xpY3k9WzM2MDAsIDBiMTEwMDExMTFdCisgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uVGltZSA9IGxpc3RTZWN1cml0eVBvbGljeVswXQorICAgICAgICAgICAgICAgICAgICBwb2xpY3lCaXRzID0gbGlzdFNlY3VyaXR5UG9saWN5WzFdCisKKyAgICAgICAgICAgICAgICBwb2xpY3kgPSBzdHIoaGV4KHJvdGF0aW9uVGltZSkpWzI6XQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHBvbGljeSkgPCA0OgorICAgICAgICAgICAgICAgICAgICBwb2xpY3kgPSBwb2xpY3kuemZpbGwoNCkKKworICAgICAgICAgICAgICAgIGNtZCArPSBwb2xpY3kKKworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoaGV4KHBvbGljeUJpdHMpKVsyOl0KKworICAgICAgICAgICAgaWYgeENvbW1pc3Npb25pbmdTZXNzaW9uSWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJzBiMDInCisgICAgICAgICAgICAgICAgc2Vzc2lvbmlkID0gc3RyKGhleCh4Q29tbWlzc2lvbmluZ1Nlc3Npb25JZCkpWzI6XQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlc3Npb25pZCkgPCA0OgorICAgICAgICAgICAgICAgICAgICBzZXNzaW9uaWQgPSBzZXNzaW9uaWQuemZpbGwoNCkKKworICAgICAgICAgICAgICAgIGNtZCArPSBzZXNzaW9uaWQKKworICAgICAgICAgICAgaWYgeEJvcmRlclJvdXRlckxvY2F0b3IgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJzA5MDInCisgICAgICAgICAgICAgICAgbG9jYXRvciA9IHN0cihoZXgoeEJvcmRlclJvdXRlckxvY2F0b3IpKVsyOl0KKworICAgICAgICAgICAgICAgIGlmIGxlbihsb2NhdG9yKSA8IDQ6CisgICAgICAgICAgICAgICAgICAgIGxvY2F0b3IgPSBsb2NhdG9yLnpmaWxsKDQpCisKKyAgICAgICAgICAgICAgICBjbWQgKz0gbG9jYXRvcgorCisgICAgICAgICAgICBpZiB4U3RlZXJpbmdEYXRhICE9IE5vbmU6CisgICAgICAgICAgICAgICAgc3RlZXJpbmdEYXRhID0gc2VsZi5fX2NvbnZlcnRMb25nVG9TdHJpbmcoeFN0ZWVyaW5nRGF0YSkKKyAgICAgICAgICAgICAgICBjbWQgKz0gJzA4JyArIHN0cihsZW4oc3RlZXJpbmdEYXRhKS8yKS56ZmlsbCgyKQorICAgICAgICAgICAgICAgIGNtZCArPSBzdGVlcmluZ0RhdGEKKworICAgICAgICAgICAgaWYgQm9ndXNUTFYgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gIjgyMDJhYTU1IgorCisgICAgICAgICAgICBwcmludCBjbWQKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoIk1HTVRfQUNUSVZFX1NFVCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIE1HTVRfUEVORElOR19HRVQoc2VsZiwgQWRkcj0nJywgVExWcz1bXSk6CisgICAgICAgICIiInNlbmQgTUdNVF9QRU5ESU5HX0dFVCBjb21tYW5kCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX1BFTkRJTkdfR0VUCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfUEVORElOR19HRVQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfUEVORElOR19HRVQnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IG1nbXRnZXRjb21tYW5kIHBlbmRpbmcnCisKKyAgICAgICAgICAgIGlmIEFkZHIgIT0gJyc6CisgICAgICAgICAgICAgICAgY21kICs9ICcgYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgY21kICs9IEFkZHIKKworICAgICAgICAgICAgaWYgbGVuKFRMVnMpICE9IDA6CisgICAgICAgICAgICAgICAgdGx2cyA9ICIiLmpvaW4oaGV4KHRsdikubHN0cmlwKCIweCIpLnpmaWxsKDIpIGZvciB0bHYgaW4gVExWcykKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBiaW5hcnkgJworICAgICAgICAgICAgICAgIGNtZCArPSB0bHZzCisKKyAgICAgICAgICAgIHByaW50IGNtZAorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigiTUdNVF9QRU5ESU5HX0dFVCgpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIE1HTVRfUEVORElOR19TRVQoc2VsZiwgc0FkZHI9JycsIHhDb21taXNzaW9uZXJTZXNzaW9uSWQ9Tm9uZSwgbGlzdFBlbmRpbmdUaW1lc3RhbXA9Tm9uZSwgbGlzdEFjdGl2ZVRpbWVzdGFtcD1Ob25lLCB4RGVsYXlUaW1lcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHhDaGFubmVsPU5vbmUsIHhQYW5JZD1Ob25lLCB4TWFzdGVyS2V5PU5vbmUsIHNNZXNoTG9jYWxQcmVmaXg9Tm9uZSwgc05ldHdvcmtOYW1lPU5vbmUpOgorICAgICAgICAiIiJzZW5kIE1HTVRfUEVORElOR19TRVQgY29tbWFuZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlOiBzdWNjZXNzZnVsIHRvIHNlbmQgTUdNVF9QRU5ESU5HX1NFVAorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc2VuZCBNR01UX1BFTkRJTkdfU0VUCisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBNR01UX1BFTkRJTkdfU0VUJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSAnZGF0YXNldCBtZ210c2V0Y29tbWFuZCBwZW5kaW5nJworCisgICAgICAgICAgICBpZiBsaXN0UGVuZGluZ1RpbWVzdGFtcCAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNtZCArPSAnIHBlbmRpbmd0aW1lc3RhbXAgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIobGlzdFBlbmRpbmdUaW1lc3RhbXBbMF0pCisKKyAgICAgICAgICAgIGlmIGxpc3RBY3RpdmVUaW1lc3RhbXAgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBhY3RpdmV0aW1lc3RhbXAgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIobGlzdEFjdGl2ZVRpbWVzdGFtcFswXSkKKworICAgICAgICAgICAgaWYgeERlbGF5VGltZXIgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBkZWxheXRpbWVyICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKHhEZWxheVRpbWVyKQorICAgICAgICAgICAgICAgICNjbWQgKz0gJyBkZWxheXRpbWVyIDMwMDAwMDAnCisKKyAgICAgICAgICAgIGlmIHhDaGFubmVsICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgY2hhbm5lbCAnCisgICAgICAgICAgICAgICAgY21kICs9IHN0cih4Q2hhbm5lbCkKKworICAgICAgICAgICAgaWYgeFBhbklkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgcGFuaWQgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoeFBhbklkKQorCisgICAgICAgICAgICBpZiB4TWFzdGVyS2V5ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgbWFzdGVya2V5ICcKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9fY29udmVydExvbmdUb1N0cmluZyh4TWFzdGVyS2V5KQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGtleSkgPCAzMjoKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnpmaWxsKDMyKQorCisgICAgICAgICAgICAgICAgY21kICs9IGtleQorCisgICAgICAgICAgICBpZiBzTWVzaExvY2FsUHJlZml4ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgbG9jYWxwcmVmaXggJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoc01lc2hMb2NhbFByZWZpeCkKKworICAgICAgICAgICAgaWYgc05ldHdvcmtOYW1lICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgbmV0d29ya25hbWUgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoc05ldHdvcmtOYW1lKQorCisgICAgICAgICAgICBpZiB4Q29tbWlzc2lvbmVyU2Vzc2lvbklkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgYmluYXJ5ICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gJzBiMDInCisgICAgICAgICAgICAgICAgc2Vzc2lvbmlkID0gc3RyKGhleCh4Q29tbWlzc2lvbmVyU2Vzc2lvbklkKSlbMjpdCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2Vzc2lvbmlkKSA8IDQ6CisgICAgICAgICAgICAgICAgICAgIHNlc3Npb25pZCA9IHNlc3Npb25pZC56ZmlsbCg0KQorCisgICAgICAgICAgICAgICAgY21kICs9IHNlc3Npb25pZAorCisgICAgICAgICAgICBwcmludCBjbWQKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoIk1HTVRfUEVORElOR19TRVQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBNR01UX0NPTU1fR0VUKHNlbGYsIEFkZHI9J2ZmMDI6OjEnLCBUTFZzPVtdKToKKyAgICAgICAgIiIic2VuZCBNR01UX0NPTU1fR0VUIGNvbW1hbmQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZW5kIE1HTVRfQ09NTV9HRVQKKyAgICAgICAgICAgIEZhbHNlOiBmYWlsIHRvIHNlbmQgTUdNVF9DT01NX0dFVAorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgTUdNVF9DT01NX0dFVCcgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2NvbW1pc3Npb25lciBtZ210Z2V0JworCisgICAgICAgICAgICBpZiBsZW4oVExWcykgIT0gMDoKKyAgICAgICAgICAgICAgICB0bHZzID0gIiIuam9pbihoZXgodGx2KS5sc3RyaXAoIjB4IikuemZpbGwoMikgZm9yIHRsdiBpbiBUTFZzKQorICAgICAgICAgICAgICAgIGNtZCArPSAnIGJpbmFyeSAnCisgICAgICAgICAgICAgICAgY21kICs9IHRsdnMKKworICAgICAgICAgICAgcHJpbnQgY21kCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJNR01UX0NPTU1fR0VUKCkgRXJyb3I6ICIgKyBzdHIoZSkpCisKKyAgICBkZWYgTUdNVF9DT01NX1NFVChzZWxmLCBBZGRyPSdmZjAyOjoxJywgeENvbW1pc3Npb25lclNlc3Npb25JRD1Ob25lLCB4U3RlZXJpbmdEYXRhPU5vbmUsIHhCb3JkZXJSb3V0ZXJMb2NhdG9yPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgeENoYW5uZWxUbHY9Tm9uZSwgRXhjZWVkTWF4UGF5bG9hZD1GYWxzZSk6CisgICAgICAgICIiInNlbmQgTUdNVF9DT01NX1NFVCBjb21tYW5kCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWU6IHN1Y2Nlc3NmdWwgdG8gc2VuZCBNR01UX0NPTU1fU0VUCisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZW5kIE1HTVRfQ09NTV9TRVQKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIE1HTVRfQ09NTV9TRVQnICUgc2VsZi5wb3J0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgbWdtdHNldCcKKworICAgICAgICAgICAgaWYgeENvbW1pc3Npb25lclNlc3Npb25JRCAhPSBOb25lOgorICAgICAgICAgICAgICAgICMgdXNlIGFzc2lnbmVkIHNlc3Npb24gaWQKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBzZXNzaW9uaWQgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoeENvbW1pc3Npb25lclNlc3Npb25JRCkKKyAgICAgICAgICAgIGVsaWYgeENvbW1pc3Npb25lclNlc3Npb25JRCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgdXNlIG9yaWdpbmFsIHNlc3Npb24gaWQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmlzQWN0aXZlQ29tbWlzc2lvbmVyIGlzIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGNtZCArPSAnIHNlc3Npb25pZCAnCisgICAgICAgICAgICAgICAgICAgIGNtZCArPSBzZWxmLl9fZ2V0Q29tbWlzc2lvbmVyU2Vzc2lvbklkKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmIHhTdGVlcmluZ0RhdGEgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBzdGVlcmluZ2RhdGEgJworICAgICAgICAgICAgICAgIGNtZCArPSBzdHIoaGV4KHhTdGVlcmluZ0RhdGEpWzI6XSkKKworICAgICAgICAgICAgaWYgeEJvcmRlclJvdXRlckxvY2F0b3IgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWQgKz0gJyBsb2NhdG9yICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gc3RyKGhleCh4Qm9yZGVyUm91dGVyTG9jYXRvcikpCisKKyAgICAgICAgICAgIGlmIHhDaGFubmVsVGx2ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgY21kICs9ICcgYmluYXJ5ICcKKyAgICAgICAgICAgICAgICBjbWQgKz0gJzAwMDMwMCcgKyBoZXgoeENoYW5uZWxUbHYpLmxzdHJpcCgnMHgnKS56ZmlsbCg0KQorCisgICAgICAgICAgICBwcmludCBjbWQKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBNb2R1bGVIZWxwZXIuV3JpdGVJbnRvRGVidWdMb2dnZXIoIk1HTVRfQ09NTV9TRVQoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRBY3RpdmVEYXRhc2V0KHNlbGYsIGxpc3RBY3RpdmVEYXRhc2V0PVtdKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0QWN0aXZlRGF0YXNldCcgJSBzZWxmLnBvcnQKKworICAgIGRlZiBzZXRDb21taXNpb25lck1vZGUoc2VsZik6CisgICAgICAgIHByaW50ICclcyBjYWxsIHNldENvbW1pc3Npb25lck1vZGUnICUgc2VsZi5wb3J0CisKKyAgICBkZWYgc2V0UFNLYyhzZWxmLCBzdHJQU0tjKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0UFNLYycgJSBzZWxmLnBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gJ2RhdGFzZXQgcHNrYyAlcycgJSBzdHJQU0tjCisgICAgICAgICAgICBzZWxmLmhhc0FjdGl2ZURhdGFzZXRUb0NvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIE1vZHVsZUhlbHBlci5Xcml0ZUludG9EZWJ1Z0xvZ2dlcigic2V0UFNLYygpIEVycm9yOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHNldEFjdGl2ZVRpbWVzdGFtcChzZWxmLCB4QWN0aXZlVGltZXN0YW1wKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0QWN0aXZlVGltZXN0YW1wJyAlIHNlbGYucG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFjdGl2ZXRpbWVzdGFtcCA9IHhBY3RpdmVUaW1lc3RhbXAKKyAgICAgICAgICAgIGNtZCA9ICdkYXRhc2V0IGFjdGl2ZXRpbWVzdGFtcCAlcycgJSBzdHIoeEFjdGl2ZVRpbWVzdGFtcCkKKyAgICAgICAgICAgIHNlbGYuaGFzQWN0aXZlRGF0YXNldFRvQ29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZW5kQ29tbWFuZChjbWQpWzBdID09ICdEb25lJworICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgTW9kdWxlSGVscGVyLldyaXRlSW50b0RlYnVnTG9nZ2VyKCJzZXRBY3RpdmVUaW1lc3RhbXAoKSBFcnJvcjogIiArIHN0cihlKSkKKworICAgIGRlZiBzZXRVZHBKb2luZXJQb3J0KHNlbGYsIHBvcnROdW1iZXIpOgorICAgICAgICAiIiJzZXQgSm9pbmVyIFVEUCBQb3J0CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBvcnROdW1iZXI6IEpvaW5lciBVRFAgUG9ydCBudW1iZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzZXQgSm9pbmVyIFVEUCBQb3J0CisgICAgICAgICAgICBGYWxzZTogZmFpbCB0byBzZXQgSm9pbmVyIFVEUCBQb3J0CisgICAgICAgICIiIgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZXRVZHBKb2luZXJQb3J0JyAlIHNlbGYucG9ydAorICAgICAgICBjbWQgPSAnam9pbmVycG9ydCAlZCcgJSBwb3J0TnVtYmVyCisgICAgICAgIHByaW50IGNtZAorICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRDb21tYW5kKGNtZClbMF0gPT0gJ0RvbmUnCisKKyAgICBkZWYgY29tbWlzc2lvbmVyVW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgIiIic3RvcCBjb21taXNzaW9uZXIKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVHJ1ZTogc3VjY2Vzc2Z1bCB0byBzdG9wIGNvbW1pc3Npb25lcgorICAgICAgICAgICAgRmFsc2U6IGZhaWwgdG8gc3RvcCBjb21taXNzaW9uZXIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIGNvbW1pc3Npb25lclVucmVnaXN0ZXInICUgc2VsZi5wb3J0CisgICAgICAgIGNtZCA9ICdjb21taXNzaW9uZXIgc3RvcCcKKyAgICAgICAgcHJpbnQgY21kCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgIGRlZiBzZW5kQmVhY29ucyhzZWxmLCBzQWRkciwgeENvbW1pc3Npb25lclNlc3Npb25JZCwgbGlzdENoYW5uZWxNYXNrLCB4UGFuSWQpOgorICAgICAgICBwcmludCAnJXMgY2FsbCBzZW5kQmVhY29ucycgJSBzZWxmLnBvcnQKKyAgICAgICAgc2VsZi5fc2VuZGxpbmUoJ3NjYW4nKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHVwZGF0ZVJvdXRlclN0YXR1cyhzZWxmKToKKyAgICAgICAgIiIiZm9yY2UgdXBkYXRlIHRvIHJvdXRlciBhcyBpZiB0aGVyZSBpcyBjaGlsZCBpZCByZXF1ZXN0IiIiCisgICAgICAgIHByaW50ICclcyBjYWxsIHVwZGF0ZVJvdXRlclN0YXR1cycgJSBzZWxmLnBvcnQKKyAgICAgICAgY21kID0gJ3N0YXRlJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3RhdGUgPSBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXQorICAgICAgICAgICAgaWYgc3RhdGUgPT0gJ2RldGFjaGVkJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSAnY2hpbGQnOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGNtZCA9ICdzdGF0ZSByb3V0ZXInCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgIGRlZiBzZXRSb3V0ZXJUaHJlc2hvbGRWYWx1ZXMoc2VsZiwgdXBncmFkZVRocmVzaG9sZCwgZG93bmdyYWRlVGhyZXNob2xkKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0Um91dGVyVGhyZXNob2xkVmFsdWVzJyAlIHNlbGYucG9ydAorICAgICAgICBzZWxmLl9fc2V0Um91dGVyVXBncmFkZVRocmVzaG9sZCh1cGdyYWRlVGhyZXNob2xkKQorICAgICAgICBzZWxmLl9fc2V0Um91dGVyRG93bmdyYWRlVGhyZXNob2xkKGRvd25ncmFkZVRocmVzaG9sZCkKKworICAgIGRlZiBzZXRNaW5EZWxheVRpbWVyKHNlbGYsIGlTZWNvbmRzKToKKyAgICAgICAgcHJpbnQgJyVzIGNhbGwgc2V0TWluRGVsYXlUaW1lcicgJSBzZWxmLnBvcnQKKyAgICAgICAgY21kID0gJ2RlbGF5dGltZXJtaW4gJXMnICUgaVNlY29uZHMKKyAgICAgICAgcHJpbnQgY21kCisgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZENvbW1hbmQoY21kKVswXSA9PSAnRG9uZScKKworICAgIGRlZiBWYWxpZGF0ZURldmljZUZpcm13YXJlKHNlbGYpOgorICAgICAgICBwcmludCAnJXMgY2FsbCBWYWxpZGF0ZURldmljZUZpcm13YXJlJyAlIHNlbGYucG9ydAorICAgICAgICBpZiAiT1BFTlRIUkVBRCIgaW4gc2VsZi5VSVN0YXR1c01zZzoKKyAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS90b29scy9oYXJuZXNzLXRoY2kvUkVBRE1FLm1kIGIvdG9vbHMvaGFybmVzcy10aGNpL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU4YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaGFybmVzcy10aGNpL1JFQURNRS5tZApAQCAtMCwwICsxLDMwIEBACitPcGVuVGhyZWFkIFRIQ0kKKz09PT09PT09PT09PT09PQorCitPcGVuVGhyZWFkIFRIQ0kgKFRocmVhZCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHl0aG9uIGFic3RyYWN0IGNsYXNzIHRlbXBsYXRlICJJVGhjaSIsCit3aGljaCBpcyB1c2VkIGJ5IFRocmVhZCBUZXN0IEhhcm5lc3MgU29mdHdhcmUgdG8gY29udHJvbCBPcGVuVGhyZWFkLWJhc2VkIHJlZmVyZW5jZSBkZXZpY2VzIGFjY29yZGluZyB0byBlYWNoIHRlc3QKK3NjZW5hcmlvLgorCitUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgQ0MyNTM4IGV4YW1wbGUgcGxhdGZvcm0gYW5kIGlzIGluY2x1ZGVkIGluIHRoZSBjdXJyZW50IFRocmVhZCBUZXN0IEhhcm5lc3MKK1NvZnR3YXJlIHJlbGVhc2UuCisKK1BsYXRmb3JtIGRldmVsb3BlcnMgc2hvdWxkIG1vZGlmeSB0aGUgVEhDSSBpbXBsZW1lbnRhdGlvbiBkaXJlY3RseSB0byBtYXRjaCB0aGVpciBwbGF0Zm9ybSAoZS5nLiBzZXJpYWwgYmF1ZCByYXRlKS4KK0FsdGVybmF0aXZlbHksIHBsYXRmb3JtIGRldmVsb3BlcnMgbWF5IGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93IHRvIGFkZCBhIG5ldyBUSENJIGltcGxlbWVudGF0aW9uIHRvIHRoZSBUZXN0CitIYXJuZXNzLiBBZGRpbmcgYSBuZXcgVEhDSSBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGV4aXN0aW5nIENDMjUzOC1iYXNlZCBUSENJIGltcGxlbWVudGF0aW9uIHRvIGNvZXhpc3Qgd2l0aCB0aGUKK25ldyBUSENJIGltcGxlbWVudGF0aW9uLgorCisjIyBFbnZpcm9ubWVudCBTZXR1cCAjIworCisxLiBDb3B5IHRoZSAiT3BlblRocmVhZC5wbmciIHRvIC9HUkwvVGhyZWFkMS4xL01pbmlXZWIvaHRkb2NzL2ltYWdlcyBmb2xkZXIuCisKKzIuIENvcHkgdGhlICJkZXZpY2VJbnB1dEZpZWxkcy54bWwiIHRvIC9HUkwvVGhyZWFkMS4xL01pbmlXZWIvaHRkb2NzL2RhdGEgZm9sZGVyLgorCiszLiBDb3B5IHRoZSAiT3BlblRocmVhZC5weSIgdG8gL0dSTC9UaHJlYWQxLjEvVGhyZWFkX0hhcm5lc3MvVEhDSSBmb2xkZXIuCisKKzQuIENvbm5lY3QgRFVUKERldmljZSBVbmRlciBUZXN0KSwgc25pZmZlciBhbmQgQ0MyNTM4REsob3IgaGFyZHdhcmUgcnVubmluZyBPcGVuVGhyZWFkKSBhcyByZWZlcmVuY2UgZGV2aWNlIHRvIEhvc3QgUEMuCisKKzUuIExhdW5jaCBUaHJlYWQgVGVzdCBIYXJuZXNzIFNvZnR3YXJlIGFuZCBtb2RpZnkgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBuZWVkZWQgdGhlbiBjbGljayAiU3RhcnQiLgorCis2LiBEcmFnIE9wZW5UaHJlYWQ6IFRJIENDMjUzOERLIHJlZmVyZW5jZSBkZXZpY2UgdG8gVGVzdCBCZWQgbGlzdCB3aXRoIGRlc2lyZWQgbnVtYmVyLgorCis3LiBTZWxlY3Qgb25lIG9yIG11bHRpcGxlIHRlc3QgY2FzZXMgdG8gZXhlY3V0ZS4KZGlmZiAtLWdpdCBhL3Rvb2xzL2hhcm5lc3MtdGhjaS9kZXZpY2VJbnB1dEZpZWxkcy54bWwgYi90b29scy9oYXJuZXNzLXRoY2kvZGV2aWNlSW5wdXRGaWVsZHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODkyMmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9oYXJuZXNzLXRoY2kvZGV2aWNlSW5wdXRGaWVsZHMueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxERVZJQ0VfRklFTERTPgorICAgIDxERVZJQ0UgbmFtZT0iQVJNIiB0aHVtYm5haWw9ImFybS1ib2FyZC5qcGciIGRlc2NyaXB0aW9uID0gIkFSTTogTlhQIEZSRE0tSzY0RiB3aXRoIEZpcmVGbHkgNkxvV1BBTiBTSElFTEQiPgorICAgICAgICA8SVRFTSBsYWJlbD0iU2VyaWFsIExpbmUiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxQb3J0IgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJDT00iCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiBDT00xIj5DT00KKyAgICAgICAgPC9JVEVNPgorICAgICAgICA8SVRFTSBsYWJlbD0iU3BlZWQiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJTZXJpYWxCYXVkUmF0ZSIKKyAgICAgICAgICAgICAgdmFsaWRhdGlvbj0iYmF1ZC1yYXRlIgorICAgICAgICAgICAgICBoaW50PSJlZzogMTE1MjAwIj4xMTUyMDAKKyAgICAgICAgPC9JVEVNPgorICAgIDwvREVWSUNFPgorICAgIDxERVZJQ0UgbmFtZT0iTlhQIiB0aHVtYm5haWw9IlVTQi1LVzI0LmpwZyIgZGVzY3JpcHRpb24gPSAiIE5YUChGcmVlc2NhbGUpOiBVU0ItS1cyNEQ1MTIgRG9uZ2xlcyI+CisgICAgICAgIDxJVEVNIGxhYmVsPSJTZXJpYWwgTGluZSIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlNlcmlhbFBvcnQiCisgICAgICAgICAgICAgIHZhbGlkYXRpb249IkNPTSIKKyAgICAgICAgICAgICAgaGludD0iZWc6IENPTTEiPkNPTQorICAgICAgICA8L0lURU0+CisgICAgICAgIDxJVEVNIGxhYmVsPSJTcGVlZCIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlNlcmlhbEJhdWRSYXRlIgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJiYXVkLXJhdGUiCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiAxMTUyMDAiPjExNTIwMAorICAgICAgICA8L0lURU0+CisgICAgPC9ERVZJQ0U+CisgICAgPCEtLURFVklDRSBuYW1lPSJTaUxhYnNfSVAiIHRodW1ibmFpbD0ic2lsYWJzLWJvYXJkLmJtcCIgZGVzY3JpcHRpb24gPSAiRW1iZXIgRGVidWcgQWRhcHRlciAoSVNBMykgKyBFTTM1eCBJbnRlcmZhY2UgYm9hcmQgKyBNZXNoQ29ubmVjdCBaSUNNMzU4OFNQMC0xIiBUSENJPSJTaUxhYnMiPgorICAgICAgICA8SVRFTSBsYWJlbD0iSVAgYWRkciIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlRlbG5ldElQIgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJpcHY0IgorICAgICAgICAgICAgICBoaW50PSJlZzogMTkyLjE2OC40LjE5NSI+CisgICAgICAgIDwvSVRFTT4KKyAgICAgICAgPElURU0gbGFiZWw9IlBPUlQiCisgICAgICAgICAgICAgIHR5cGU9InRleHQiCisgICAgICAgICAgICAgIGZvclBhcmFtPSJUZWxuZXRQb3J0IgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJwb3J0IgorICAgICAgICAgICAgICBoaW50PSJlZzogNDkwMSI+NDkwMQorICAgICAgICA8L0lURU0+CisgICAgICAgIDxJVEVNIHR5cGU9ImhpZGRlbiIgbGFiZWwgPSAiIgorICAgICAgICAgICAgICBmb3JQYXJhbT0iUGFyYW01Ij5pcAorICAgICAgICA8L0lURU0+CisgICAgPC9ERVZJQ0UtLT4KKworICAgIDxERVZJQ0UgbmFtZT0iU2lMYWJzIiB0aHVtYm5haWw9IlpNMzU3Uy1VU0IuanBnIiBkZXNjcmlwdGlvbiA9ICJTaUxhYnM6IEVNMzU4eCBVU0IgU3RpY2siIFRIQ0k9IlNpTGFicyI+CisgICAgICAgIDxJVEVNIGxhYmVsPSJTZXJpYWwgTGluZSIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlNlcmlhbFBvcnQiCisgICAgICAgICAgICAgIHZhbGlkYXRpb249IkNPTSIKKyAgICAgICAgICAgICAgaGludD0iZWc6IENPTTEiPkNPTQorICAgICAgICA8L0lURU0+CisgICAgICAgIDxJVEVNIGxhYmVsPSJTcGVlZCIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlNlcmlhbEJhdWRSYXRlIgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJiYXVkLXJhdGUiCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiAxMTUyMDAiPjExNTIwMAorICAgICAgICA8L0lURU0+CisgICAgICAgIDxJVEVNIGxhYmVsPSAiIiB0eXBlPSJoaWRkZW4iCisgICAgICAgICAgICAgIGZvclBhcmFtPSJQYXJhbTUiPnVzYgorICAgICAgICA8L0lURU0+CisgICAgPC9ERVZJQ0U+CisgICAgPERFVklDRSBuYW1lPSJPcGVuVGhyZWFkIiB0aHVtYm5haWw9Ik9wZW5UaHJlYWQucG5nIiBkZXNjcmlwdGlvbiA9ICJPcGVuVGhyZWFkOiBUSSBDQzI1MzhESyIgVEhDST0iT3BlblRocmVhZCI+CisgICAgICAgIDxJVEVNIGxhYmVsPSJTZXJpYWwgTGluZSIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlNlcmlhbFBvcnQiCisgICAgICAgICAgICAgIHZhbGlkYXRpb249IkNPTSIKKyAgICAgICAgICAgICAgaGludD0iZWc6IENPTTEiPkNPTQorICAgICAgICA8L0lURU0+CisgICAgICAgIDxJVEVNIGxhYmVsPSJTcGVlZCIKKyAgICAgICAgICAgICAgdHlwZT0idGV4dCIKKyAgICAgICAgICAgICAgZm9yUGFyYW09IlNlcmlhbEJhdWRSYXRlIgorICAgICAgICAgICAgICB2YWxpZGF0aW9uPSJiYXVkLXJhdGUiCisgICAgICAgICAgICAgIGhpbnQ9ImVnOiAxMTUyMDAiPjExNTIwMAorICAgICAgICA8L0lURU0+CisgICAgPC9ERVZJQ0U+Cis8L0RFVklDRV9GSUVMRFM+CmRpZmYgLS1naXQgYS90b29scy9zcGktaGRsYy1hZGFwdGVyL01ha2VmaWxlLmFtIGIvdG9vbHMvc3BpLWhkbGMtYWRhcHRlci9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRkYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvc3BpLWhkbGMtYWRhcHRlci9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDU0IEBACisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTYsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorIyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjCisKK2luY2x1ZGUgJChhYnNfdG9wX25sYnVpbGRfYXV0b3Rvb2xzX2RpcikvYXV0b21ha2UvcHJlLmFtCisKK0VYVFJBX0RJU1QgPSBSRUFETUUubWQgLmdpdGlnbm9yZQorCitiaW5fUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgIHNwaS1oZGxjLWFkYXB0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAkKE5VTEwpCisKK3NwaV9oZGxjX2FkYXB0ZXJfQ1BQRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgJChOVUxMKQorCitzcGlfaGRsY19hZGFwdGVyX0xEQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXAorICAgICQoTlVMTCkKKworc3BpX2hkbGNfYWRhcHRlcl9MREZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwKKyAgICAkKE5VTEwpCisKK3NwaV9oZGxjX2FkYXB0ZXJfU09VUkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcCisgICAgc3BpLWhkbGMtYWRhcHRlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICQoTlVMTCkKKworaWYgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorQ0xFQU5GSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICQod2lsZGNhcmQgKi5nY2RhICouZ2NubykKK2VuZGlmICMgT1BFTlRIUkVBRF9CVUlMRF9DT1ZFUkFHRQorCitpbmNsdWRlICQoYWJzX3RvcF9ubGJ1aWxkX2F1dG90b29sc19kaXIpL2F1dG9tYWtlL3Bvc3QuYW0KZGlmZiAtLWdpdCBhL3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvUkVBRE1FLm1kIGIvdG9vbHMvc3BpLWhkbGMtYWRhcHRlci9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyMmExMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTA1IEBACitTUEkvSERMQyBBZGFwdG9yCis9PT09PT09PT09PT09PT09CisKK2BzcGktaGRsYy1hZGFwdGVyYCBpcyBhbiBhZGFwdGVyIHRvb2wgZm9yIHVzaW5nIGEgU1BJIGludGVyZmFjZSBhcyBpZgoraXQgd2VyZSBhbiBIRExDLWxpdGUgZW5jb2RlZCBiaWRpcmVjdGlvbmFsIGFzeW5jaHJvbm91cyBzZXJpYWwgc3RyZWFtLgorSXQgdXNlcyB0aGUgU1BJIHByb3RvY29sIG91dGxpbmVkIGluIFtBcHBlbmRpeCBBLjJdWzFdIG9mIHRoZSBTcGluZWwKK3Byb3RvY29sIGRvY3VtZW50LgorCitbMV06IGh0dHBzOi8vZ29vLmdsL2d0MThPNAorCisjIyBTeW50YXggIyMKKworICAgIHNwaS1oZGxjLWFkYXB0ZXIgW29wdGlvbnNdIDxzcGktZGV2aWNlLXBhdGg+CisKKyMjIE9wdGlvbnMgIyMKKworKiAgIGAtLXN0ZGlvYDogVXNlIGBzdGRpbmAgYW5kIGBzdGRvdXRgIGZvciBIRExDIGlucHV0L291dHB1dC4gVXNlZnVsCisgICAgd2hlbiBkaXJlY3RseSBzdGFydGVkIGJ5IHRoZSBwcm9ncmFtIHRoYXQgd2lsbCBiZSB1c2luZyBpdC4KKyogICBgLS1wdHlgOiBDcmVhdGUgYSBwc2V1ZG8gdGVybWluYWwgZm9yIEhETEMgaW5wdXQvb3V0cHV0LiBUaGUgcGF0aAorICAgIG9mIHRoZSBuZXdseS1jcmVhdGVkIFBUWSB3aWxsIGJlIHdyaXR0ZW4gdG8gYHN0ZG91dGAsIGZvbGxvd2VkIGJ5CisgICAgYSBuZXdsaW5lLgorKiAgIGAtLXJhd2A6IERvIG5vdCBlbmNvZGUvZGVjb2RlIHBhY2tldHMgdXNpbmcgSERMQy4gSW5zdGVhZCwgd3JpdGUKKyAgICB3aG9sZSwgcmF3IGZyYW1lcyB0byB0aGUgc3BlY2lmaWVkIGlucHV0IGFuZCBvdXRwdXQgRkRzLiBUaGlzIGlzCisgICAgdXNlZnVsIGZvciBlbXVsYXRpbmcgYSBzZXJpYWwgcG9ydCwgb3Igd2hlbiBkYXRhZ3JhbS1iYXNlZCBzb2NrZXRzCisgICAgYXJlIHN1cHBsaWVkIGZvciBgc3RkaW5gIGFuZCBgc3Rkb3V0YCAod2hlbiB1c2VkIHdpdGggYC0tc3RkaW9gKS4KKyogICBgLS1tdHU9W01UVV1gOiBTcGVjaWZ5IHRoZSBNVFUuIEN1cnJlbnRseSBvbmx5IHVzZWQgaW4gcmF3IG1vZGUuCisgICAgRGVmYXVsdCBhbmQgbWF4aW11bSB2YWx1ZSBpcyAyMDQzLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorKiAgIGAtLWdwaW8taW50Wz1ncGlvLXBhdGhdYDogU3BlY2lmeSBhIHBhdGggdG8gdGhlIExpbnV4CisgICAgc3lzZnMtZXhwb3J0ZWQgR1BJTyBkaXJlY3RvcnkgZm9yIHRoZSBgScyFTsyFVMyFYCBwaW4uIElmIG5vdAorICAgIHNwZWNpZmllZCwgYHNwaS1oZGxjLWFkYXB0ZXJgIHdpbGwgZmFsbCBiYWNrIHRvIHBvbGxpbmcsIHdoaWNoIGlzCisgICAgaW5lZmZpY2llbnQuCisqICAgYC0tZ3Bpby1yZXNldFs9Z3Bpby1wYXRoXWA6IFNwZWNpZnkgYSBwYXRoIHRvIHRoZSBMaW51eAorICAgIHN5c2ZzLWV4cG9ydGVkIEdQSU8gZGlyZWN0b3J5IGZvciB0aGUgYFLMhUXMhVPMhWAgcGluLgorKiAgIGAtLXNwaS1tb2RlWz1tb2RlXWA6IFNwZWNpZnkgdGhlIFNQSSBtb2RlIHRvIHVzZSAoMC0zKS4gRGVmYXVsdAorICAgIHZhbHVlIGlzIGAwYC4KKyogICBgLS1zcGktc3BlZWRbPWhlcnR6XWA6IFNwZWNpZnkgdGhlIFNQSSBzcGVlZCBpbiBoZXJ0ei4gRGVmYXVsdAorICAgIHZhbHVlIGlzIGAxMDAwMDAwYCAoMU1IeikuCisqICAgYC0tc3BpLWNzLWRlbGF5Wz11c2VjXWA6IFNwZWNpZnkgdGhlIGRlbGF5IGFmdGVyIEPMhVPMhSBhc3NlcnRpb24sCisgICAgaW4gbWljcm9zZWNvbmRzLiBEZWZhdWx0IGlzIDIwwrVzLiBOb3RlIHRoYXQgdGhpcyBtYXkgbmVlZCB0byBiZQorICAgIHNldCB0byB6ZXJvIGZvciBzcGktaGRsYy1hZGFwdGVyIHRvIHdvcmsgd2l0aCBzb21lIFNQSSBkcml2ZXJzLgorKiAgIGAtLXNwaS1hbGlnbi1hbGxvd2FuY2VbPW5dYDogU3BlY2lmeSB0aGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIDB4RkYKKyAgICBieXRlcyB0byBjbGlwIGZyb20gc3RhcnQgb2YgTUlTTyBmcmFtZS4gVGhpcyBtYWtlcyB0aGlzIHRvb2wgdXNhYmxlCisgICAgd2l0aCBTUEkgc2xhdmVzIHdoaWNoIGhhdmUgYnVnZ3kgU1BJIGJsb2NrcyB0aGF0IHByZXBlbmQgdXAgdG8KKyAgICB0aHJlZSAweEZGIGJ5dGVzIHRvIHRoZSBzdGFydCBvZiBNSVNPIGZyYW1lLiBEZWZhdWx0IHZhbHVlIGlzIGAwYC4KKyAgICBNYXhpbXVtIHZhbHVlIGlzIGA2YC4gKlRoaXMgbXVzdCBiZSBzZXQgdG8gYDRgIGZvciBjaGlwcyBpbiB0aGUKKyAgICBTaUxhYnMgRU0zNXggZmFtaWx5LioKKyogICBgLS1zcGktc21hbGwtcGFja2V0PVtuXWA6IFNwZWNpZnkgdGhlIHNtYWxsZXN0IHBhY2tldCB3ZSBjYW4gcmVjZWl2ZQorICAgIGluIGEgc2luZ2xlIFNQSSB0cmFuc2FjdGlvbi4gUGFja2V0cyBzZW50IGJ5IHRoZSBzbGF2ZSB3aGljaCBhcmUgc21hbGxlcgorICAgIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBzaXplIHdpbGwgcmVxdWlyZSBvbmx5IGEgc2luZ2xlIFNQSSB0cmFuc2FjdGlvbgorICAgIHRvIGJlIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4gSW5jcmVhc2luZyB0aGlzIHZhbHVlIHdpbGwgKHVwIHRvIGEgcG9pbnQpCisgICAgZGVjcmVhc2UgbGF0ZW5jeSBmb3Igc21hbGxlciBwYWNrZXRzIGF0IHRoZSBleHBlbnNlIG9mIG92ZXJhbGwgYmFuZHdpZHRoLgorICAgIERlZmF1bHQgdmFsdWUgaXMgMzIuIFRoZSBtaW5pbXVtIHZhbHVlIGlzIDAuIFRoZSBtYXhpbXVtIHZhbHVlIGlzIDIwNDMuCisqICAgYC0tdmVyYm9zZWA6IEluY3JlYXNlIGRlYnVnIHZlcmJvc2l0eS4KKyogICBgLS1oZWxwYDogUHJpbnQgb3V0IHVzYWdlIGluZm9ybWF0aW9uIHRvIGBzdGRvdXRgIGFuZCBleGl0LgorCitgc3BpLWRldmljZS1wYXRoYCBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50IHNpbmNlIGl0IGluZGljYXRlcyB3aGljaCBTUEkKK2RldmljZSB0byB1c2UuIEFuIGV4YW1wbGUgcGF0aCBtaWdodCBiZSBgL2Rldi9zcGlkZXYxLjBgLgorCitUaGUgR1BJTyBwYXRocyBhcmUgdG8gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIHRoYXQgR1BJTy4gVGhleSBtdXN0CitiZSBhbHJlYWR5IGJlIGV4cG9ydGVkIGJlZm9yZSBgc3BpLWhkbGMtYWRhcHRlcmAgY2FuIHVzZSB0aGVtLgorCisjIyBCZWhhdmlvciAjIworCitJZiBhbiBNQ1UgcmVzZXQgaXMgZGV0ZWN0ZWQgYnkgdGhlIHJlc2V0IGJpdCBiZWluZyBzZXQgb24gYSBTUEkgZnJhbWUsCit0aGUgc3BlY2lhbCB2ZW5kb3Itc3BlY2lmaWMgSERMQy1saXRlIHN5bWJvbCBgMHhGOGAgaXMgZW1pdHRlZC4gSWYKK2AtLWdwaW8tcmVzZXRgIGlzIHNwZWNpZmllZCwgdGhlIEhETEMgY2xpZW50IGNhbiB0cmlnZ2VyIGFuIE1DVSByZXNldAorYnkgc2VuZGluZyB0aGUgc3ltYm9scyBgMHg3RSAweDEzIDB4MTEgMHg3RWAgb3IgYnkgc2VuZGluZyBgU0lHVVNSMWAuCisKK1doZW4gc3RhcnRlZCwgYHNwaS1oZGxjLWFkYXB0ZXJgIHdpbGwgY29uZmlndXJlIHRoZSBmb2xsb3dpbmcKK3Byb3BlcnRpZXMgb24gdGhlIEdQSU9zOgorCisxLiAgU2V0IGBJzIVOzIVUzIUvZGlyZWN0aW9uYCB0byBgaW5gLgorMi4gIFNldCBgScyFTsyFVMyFL2VkZ2VgIHRvIGBmYWxsaW5nYC4KKzMuICBTZXQgYFLMhUXMhVPMhS9kaXJlY3Rpb25gIHRvIGBoaWdoYC4KKworV2hlbiByZXNldHRpbmcgdGhlIHNsYXZlIGRldmljZSwgYHNwaS1oZGxjYCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nCitwcm9jZWR1cmU6CisKKzEuICBTZXQgYFLMhUXMhVPMhS9kaXJlY3Rpb25gIHRvIGBsb3dgLgorMi4gIFNsZWVwIGZvciAzMG1zLgorMy4gIFNldCBgUsyFRcyFU8yFL2RpcmVjdGlvbmAgdG8gYGhpZ2hgLgorCisjIyBTdGF0aXN0aWNzICMjCisKK1NvbWUgc2ltcGxlIHVzYWdlIHN0YXRpc3RpY3MgYXJlIHByaW50ZWQgb3V0IHRvIHN5c2xvZyBhdCBleGl0IGFuZAord2hlbmV2ZXIgdGhlIGBTSUdVU1IxYCBzaWduYWwgaXMgcmVjZWl2ZWQuIFRoZSBlYXNpZXN0IHdheSB0byBzZW5kCit0aGF0IHNpZ25hbCB0byBgc3BpLWhkbGMtYWRhcHRlcmAgaXMgbGlrZSB0aGlzOgorCisgICAgIyBraWxsYWxsIC1zaWd1c3IxIHNwaS1oZGxjLWFkYXB0ZXIKKworQXQgd2hpY2ggcG9pbnQgeW91IHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXMgaW4gdGhlIHN5c2xvZ3M6CisKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc1NsYXZlUmVzZXRDb3VudD0xNgorICAgIHNwaS1oZGxjLWFkYXB0ZXJbMTg0MDhdOiBJTkZPOiBzU3BpRnJhbWVDb3VudD0yNjczCisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNTcGlWYWxpZEZyYW1lQ291bnQ9MjY2OAorICAgIHNwaS1oZGxjLWFkYXB0ZXJbMTg0MDhdOiBJTkZPOiBzU3BpRHVwbGV4RnJhbWVDb3VudD0zCisgICAgc3BpLWhkbGMtYWRhcHRlclsxODQwOF06IElORk86IHNTcGlVbnJlc3BvbnNpdmVGcmFtZUNvdW50PTUKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc1NwaUdhcmJhZ2VGcmFtZUNvdW50PTAKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc0hkbGNUeEZyYW1lQ291bnQ9MTQ1NAorICAgIHNwaS1oZGxjLWFkYXB0ZXJbMTg0MDhdOiBJTkZPOiBzSGRsY1R4RnJhbWVCeXRlQ291bnQ9MjkwOAorICAgIHNwaS1oZGxjLWFkYXB0ZXJbMTg0MDhdOiBJTkZPOiBzSGRsY1J4RnJhbWVDb3VudD04ODQKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc0hkbGNSeEZyYW1lQnl0ZUNvdW50PTM4NzUKKyAgICBzcGktaGRsYy1hZGFwdGVyWzE4NDA4XTogSU5GTzogc0hkbGNSeEJhZENyY0NvdW50PTAKKworU2VuZGluZyBgU0lHVVNSMmAgd2lsbCBjbGVhciB0aGUgY291bnRlcnMuCmRpZmYgLS1naXQgYS90b29scy9zcGktaGRsYy1hZGFwdGVyL3NwaS1oZGxjLWFkYXB0ZXIuYyBiL3Rvb2xzL3NwaS1oZGxjLWFkYXB0ZXIvc3BpLWhkbGMtYWRhcHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjc2MmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9zcGktaGRsYy1hZGFwdGVyL3NwaS1oZGxjLWFkYXB0ZXIuYwpAQCAtMCwwICsxLDE5OTYgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBPcGVuVGhyZWFkIEF1dGhvcnMuCisgKiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiAgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogICAgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqICAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorCisjaWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3Vjb250ZXh0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlkZXYuaD4KKworI2lmIEhBVkVfRVhFQ0lORk9fSAorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjZW5kaWYKKworI2lmIEhBVkVfUFRZX0gKKyNpbmNsdWRlIDxwdHkuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9VVElMX0gKKyNpbmNsdWRlIDx1dGlsLmg+CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogTWFjcm9zIGFuZCBDb25zdGFudHMgKi8KKworI2RlZmluZSBTUElfSERMQ19WRVJTSU9OICAgICAgICAgICAgICAgICIwLjA2IgorCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAgICAgICAgICAgICAgICAgMjA0OAorI2RlZmluZSBIRUFERVJfTEVOICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgU1BJX0hFQURFUl9SRVNFVF9GTEFHICAgICAgICAgICAweDgwCisjZGVmaW5lIFNQSV9IRUFERVJfQ1JDX0ZMQUcgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBTUElfSEVBREVSX1BBVFRFUk5fVkFMVUUgICAgICAgIDB4MDIKKyNkZWZpbmUgU1BJX0hFQURFUl9QQVRURVJOX01BU0sgICAgICAgICAweDAzCisKKyNkZWZpbmUgRVhJVF9RVUlUICAgICAgICAgICAgICAgICAgICAgICA2NTUzNQorCisjaWZuZGVmIE1TRUNfUEVSX1NFQworI2RlZmluZSBNU0VDX1BFUl9TRUMgICAgICAgICAgICAgICAgICAgIDEwMDAKKyNlbmRpZgorCisjaWZuZGVmIFVTRUNfUEVSX01TRUMKKyNkZWZpbmUgVVNFQ19QRVJfTVNFQyAgICAgICAgICAgICAgICAgICAxMDAwCisjZW5kaWYKKworI2lmbmRlZiBVU0VDX1BFUl9TRUMKKyNkZWZpbmUgVVNFQ19QRVJfU0VDICAgICAgICAgICAgICAgICAgICAoVVNFQ19QRVJfTVNFQyAqIE1TRUNfUEVSX1NFQykKKyNlbmRpZgorCisjZGVmaW5lIFNQSV9QT0xMX1BFUklPRF9NU0VDICAgICAgICAgICAgKE1TRUNfUEVSX1NFQy8zMCkKKworI2RlZmluZSBHUElPX0lOVF9BU1NFUlRfU1RBVEUgICAgICAgICAgIDAgLy8gScyFTsyFVMyFIGlzIGFzc2VydGVkIGxvdworI2RlZmluZSBHUElPX1JFU19BU1NFUlRfU1RBVEUgICAgICAgICAgIDAgLy8gUsyFRcyFU8yFIGlzIGFzc2VydGVkIGxvdworCisjZGVmaW5lIFNQSV9SWF9BTElHTl9BTExPV0FOQ0VfTUFYICAgICAgNgorCisjZGVmaW5lIFNPQ0tFVF9ERUJVR19CWVRFU19QRVJfTElORSAgICAgMTYKKworI2lmbmRlZiBBVVRPX1BSSU5UX0JBQ0tUUkFDRQorI2RlZmluZSBBVVRPX1BSSU5UX0JBQ0tUUkFDRSAgICAgICAgICAgIChIQVZFX0VYRUNJTkZPX0gpCisjZW5kaWYKKworI2RlZmluZSBBVVRPX1BSSU5UX0JBQ0tUUkFDRV9TVEFDS19ERVBUSCAgICAgMjAKKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qga0hkbGNSZXNldFNpZ25hbFtdID0geyAweDdFLCAweDEzLCAweDExLCAweDdFIH07CitzdGF0aWMgY29uc3QgdWludDE2X3Qga0hkbGNDcmNDaGVja1ZhbHVlID0gMHhmMGI4Oworc3RhdGljIGNvbnN0IHVpbnQxNl90IGtIZGxjQ3JjUmVzZXRWYWx1ZSA9IDB4ZmZmZjsKKworZW51bSB7CisgICAgTU9ERV9TVERJTyA9IDAsCisgICAgTU9ERV9QVFkgPSAxLAorfTsKKworLy8gSWdub3JlcyByZXR1cm4gdmFsdWUgZnJvbSBmdW5jdGlvbiAncycKKyNkZWZpbmUgSUdOT1JFX1JFVFVSTl9WQUxVRShzKSAgZG8geyBpZiAocyl7fSB9IHdoaWxlICgwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQVJLOiBHbG9iYWwgU3RhdGUgKi8KKworI2lmIEhBVkVfT1BFTlBUWQorc3RhdGljIGludCBzTW9kZSA9IE1PREVfUFRZOworI2Vsc2UKK3N0YXRpYyBpbnQgc01vZGUgPSBNT0RFX1NURElPOworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyKiBzU3BpRGV2UGF0aCAgICAgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIqIHNJbnRHcGlvRGV2UGF0aCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciogc1Jlc0dwaW9EZXZQYXRoID0gTlVMTDsKKworc3RhdGljIGludCBzVmVyYm9zZSAgICAgICAgICAgICA9IExPR19OT1RJQ0U7CisKK3N0YXRpYyBpbnQgc1NwaURldkZkICAgICAgICAgICAgPSAtMTsKK3N0YXRpYyBpbnQgc1Jlc0dwaW9WYWx1ZUZkICAgICAgPSAtMTsKK3N0YXRpYyBpbnQgc0ludEdwaW9WYWx1ZUZkICAgICAgPSAtMTsKKworc3RhdGljIGludCBzSGRsY0lucHV0RmQgICAgICAgICA9IC0xOworc3RhdGljIGludCBzSGRsY091dHB1dEZkICAgICAgICA9IC0xOworCitzdGF0aWMgaW50IHNTcGlTcGVlZCAgICAgICAgICAgID0gMTAwMDAwMDsgLy8gaW4gSHogKGRlZmF1bHQ6IDFNSHopCitzdGF0aWMgdWludDhfdCBzU3BpTW9kZSAgICAgICAgID0gMDsKK3N0YXRpYyBpbnQgc1NwaUNzRGVsYXkgICAgICAgICAgPSAyMDsgICAgICAvLyBpbiBtaWNyb3NlY29uZHMKKworc3RhdGljIHVpbnQxNl90IHNTcGlSeFBheWxvYWRTaXplOworc3RhdGljIHVpbnQ4X3Qgc1NwaVJ4RnJhbWVCdWZmZXJbTUFYX0ZSQU1FX1NJWkUgKyBTUElfUlhfQUxJR05fQUxMT1dBTkNFX01BWF07CisKK3N0YXRpYyB1aW50MTZfdCBzU3BpVHhQYXlsb2FkU2l6ZTsKK3N0YXRpYyBib29sIHNTcGlUeElzUmVhZHkgPSBmYWxzZTsKK3N0YXRpYyBpbnQgc1NwaVR4UmVmdXNlZENvdW50ID0gMDsKK3N0YXRpYyB1aW50OF90IHNTcGlUeEZyYW1lQnVmZmVyW01BWF9GUkFNRV9TSVpFICsgU1BJX1JYX0FMSUdOX0FMTE9XQU5DRV9NQVhdOworCitzdGF0aWMgaW50IHNTcGlSeEFsaWduQWxsb3dhbmNlID0gMDsKK3N0YXRpYyBpbnQgc1NwaVNtYWxsUGFja2V0U2l6ZSAgPSAzMjsgICAgICAvLyBpbiBieXRlcworCitzdGF0aWMgYm9vbCBzU2xhdmVEaWRSZXNldCA9IGZhbHNlOworCisvLyBJZiBzVXNlUmF3RnJhbWVzIGlzIHNldCB0byB0cnVlLCBIRExDIGVuY29kaW5nL2VuY29kaW5nCisvLyBpcyBza2lwcGVkIGFuZCB0aGUgcmF3IGZyYW1lcyBhcmUgcmVhZC1mcm9tL3dyaXR0ZW4tdG8KKy8vIHRoZSBzSGRsY0lucHV0RmQvc0hkbGNPdXRwdXRGZCB3aG9sZS4gU2VlIGAtLXJhd2AuCitzdGF0aWMgYm9vbCBzVXNlUmF3RnJhbWVzID0gZmFsc2U7CisKK3N0YXRpYyBpbnQgc01UVSA9IE1BWF9GUkFNRV9TSVpFIC0gSEVBREVSX0xFTjsKKworc3RhdGljIGludCBzUmV0ID0gMDsKKworc3RhdGljIGJvb2wgc0R1bXBTdGF0cyA9IGZhbHNlOworCitzdGF0aWMgc2lnX3Qgc1ByZXZpb3VzSGFuZGxlckZvclNJR0lOVDsKK3N0YXRpYyBzaWdfdCBzUHJldmlvdXNIYW5kbGVyRm9yU0lHVEVSTTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogU3RhdGlzdGljcyAqLworCitzdGF0aWMgdWludDY0X3Qgc1NsYXZlUmVzZXRDb3VudCA9IDA7CitzdGF0aWMgdWludDY0X3Qgc1NwaUZyYW1lQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNTcGlWYWxpZEZyYW1lQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNTcGlHYXJiYWdlRnJhbWVDb3VudCA9IDA7CitzdGF0aWMgdWludDY0X3Qgc1NwaUR1cGxleEZyYW1lQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNTcGlVbnJlc3BvbnNpdmVGcmFtZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzSGRsY1J4RnJhbWVCeXRlQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNIZGxjVHhGcmFtZUJ5dGVDb3VudCA9IDA7CitzdGF0aWMgdWludDY0X3Qgc0hkbGNSeEZyYW1lQ291bnQgPSAwOworc3RhdGljIHVpbnQ2NF90IHNIZGxjVHhGcmFtZUNvdW50ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBzSGRsY1J4QmFkQ3JjQ291bnQgPSAwOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQVJLOiBTaWduYWwgSGFuZGxlcnMgKi8KKworc3RhdGljIHZvaWQgc2lnbmFsX1NJR0lOVChpbnQgc2lnKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VbXSA9ICJcbkNhdWdodCBTSUdJTlQhXG4iOworCisgICAgc1JldCA9IEVYSVRfUVVJVDsKKworICAgIC8vIENhbid0IHVzZSBzeXNsb2coKSBiZWNhdXNlIGl0IGlzbid0IGFzeW5jIHNpZ25hbCBzYWZlLgorICAgIC8vIFNvIHdlIHdyaXRlIHRvIHN0ZGVycgorICAgIElHTk9SRV9SRVRVUk5fVkFMVUUod3JpdGUoU1RERVJSX0ZJTEVOTywgbWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLTEpKTsKKworICAgIC8vIFJlc3RvcmUgdGhlIHByZXZpb3VzIGhhbmRsZXIgc28gdGhhdCBpZiB3ZSBlbmQgdXAgZ2V0dGluZworICAgIC8vIHRoaXMgc2lnbmFsIGFnYWluIHdlIHBlcmZvcm0gdGhlIHN5c3RlbSBkZWZhdWx0IGFjdGlvbi4KKyAgICBzaWduYWwoU0lHSU5ULCBzUHJldmlvdXNIYW5kbGVyRm9yU0lHSU5UKTsKKyAgICBzUHJldmlvdXNIYW5kbGVyRm9yU0lHSU5UID0gTlVMTDsKKworICAgIC8vIElnbm9yZSBzaWduYWwgYXJndW1lbnQuCisgICAgKHZvaWQpc2lnOworfQorCitzdGF0aWMgdm9pZCBzaWduYWxfU0lHVEVSTShpbnQgc2lnKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VbXSA9ICJcbkNhdWdodCBTSUdURVJNIVxuIjsKKworICAgIHNSZXQgPSBFWElUX1FVSVQ7CisKKyAgICAvLyBDYW4ndCB1c2Ugc3lzbG9nKCkgYmVjYXVzZSBpdCBpc24ndCBhc3luYyBzaWduYWwgc2FmZS4KKyAgICAvLyBTbyB3ZSB3cml0ZSB0byBzdGRlcnIKKyAgICBJR05PUkVfUkVUVVJOX1ZBTFVFKHdyaXRlKFNUREVSUl9GSUxFTk8sIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKS0xKSk7CisKKyAgICAvLyBSZXN0b3JlIHRoZSBwcmV2aW91cyBoYW5kbGVyIHNvIHRoYXQgaWYgd2UgZW5kIHVwIGdldHRpbmcKKyAgICAvLyB0aGlzIHNpZ25hbCBhZ2FpbiB3ZSBwZXJmb3JtIHRoZSBzeXN0ZW0gZGVmYXVsdCBhY3Rpb24uCisgICAgc2lnbmFsKFNJR1RFUk0sIHNQcmV2aW91c0hhbmRsZXJGb3JTSUdURVJNKTsKKyAgICBzUHJldmlvdXNIYW5kbGVyRm9yU0lHVEVSTSA9IE5VTEw7CisKKyAgICAvLyBJZ25vcmUgc2lnbmFsIGFyZ3VtZW50LgorICAgICh2b2lkKXNpZzsKK30KKworc3RhdGljIHZvaWQgc2lnbmFsX1NJR0hVUChpbnQgc2lnKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VbXSA9ICJcbkNhdWdodCBTSUdIVVAhXG4iOworCisgICAgc1JldCA9IEVYSVRfRkFJTFVSRTsKKworICAgIC8vIENhbid0IHVzZSBzeXNsb2coKSBiZWNhdXNlIGl0IGlzbid0IGFzeW5jIHNpZ25hbCBzYWZlLgorICAgIC8vIFNvIHdlIHdyaXRlIHRvIHN0ZGVycgorICAgIElHTk9SRV9SRVRVUk5fVkFMVUUod3JpdGUoU1RERVJSX0ZJTEVOTywgbWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLTEpKTsKKworICAgIC8vIFdlIGRvbid0IHJlc3RvcmUgdGhlICJwcmV2aW91cyBoYW5kbGVyIgorICAgIC8vIGJlY2F1c2Ugd2UgYWx3YXlzIHdhbnQgdG8gbGV0IHRoZSBtYWluCisgICAgLy8gbG9vcCBkZWNpZGUgd2hhdCB0byBkbyBmb3IgaGFuZ3Vwcy4KKworICAgIC8vIElnbm9yZSBzaWduYWwgYXJndW1lbnQuCisgICAgKHZvaWQpc2lnOworfQorCitzdGF0aWMgdm9pZCBzaWduYWxfZHVtcHN0YXRzKGludCBzaWcpCit7CisgICAgc0R1bXBTdGF0cyA9IHRydWU7CisKKyAgICAvLyBJZ25vcmUgc2lnbmFsIGFyZ3VtZW50LgorICAgICh2b2lkKXNpZzsKK30KKworc3RhdGljIHZvaWQgc2lnbmFsX2NsZWFyc3RhdHMoaW50IHNpZykKK3sKKyAgICBzRHVtcFN0YXRzID0gdHJ1ZTsKKyAgICBzU2xhdmVSZXNldENvdW50ID0gMDsKKyAgICBzU3BpRnJhbWVDb3VudCA9IDA7CisgICAgc1NwaVZhbGlkRnJhbWVDb3VudCA9IDA7CisgICAgc1NwaUdhcmJhZ2VGcmFtZUNvdW50ID0gMDsKKyAgICBzU3BpRHVwbGV4RnJhbWVDb3VudCA9IDA7CisgICAgc1NwaVVucmVzcG9uc2l2ZUZyYW1lQ291bnQgPSAwOworICAgIHNIZGxjUnhGcmFtZUJ5dGVDb3VudCA9IDA7CisgICAgc0hkbGNUeEZyYW1lQnl0ZUNvdW50ID0gMDsKKyAgICBzSGRsY1J4RnJhbWVDb3VudCA9IDA7CisgICAgc0hkbGNUeEZyYW1lQ291bnQgPSAwOworICAgIHNIZGxjUnhCYWRDcmNDb3VudCA9IDA7CisKKyAgICAvLyBJZ25vcmUgc2lnbmFsIGFyZ3VtZW50LgorICAgICh2b2lkKXNpZzsKK30KKworI2lmIEFVVE9fUFJJTlRfQkFDS1RSQUNFCitzdGF0aWMgdm9pZCBzaWduYWxfY3JpdGljYWwoaW50IHNpZywgc2lnaW5mb190ICogaW5mbywgdm9pZCAqIHVjb250ZXh0KQoreworICAgIC8vIFRoaXMgaXMgdGhlIGxhc3QgaHVyYWggZm9yIHRoaXMgcHJvY2Vzcy4KKyAgICAvLyBXZSBkdW1wIHRoZSBzdGFjaywgYmVjYXVzZSB0aGF0J3MgYWxsIHdlIGNhbiBkby4KKworICAgIHZvaWQgKnN0YWNrX21lbVtBVVRPX1BSSU5UX0JBQ0tUUkFDRV9TVEFDS19ERVBUSF07CisgICAgdm9pZCAqKnN0YWNrID0gc3RhY2tfbWVtOworICAgIGNoYXIgKipzdGFja19zeW1ib2xzOworICAgIGludCBzdGFja19kZXB0aCwgaTsKKyAgICB1Y29udGV4dF90ICp1YyA9ICh1Y29udGV4dF90Kil1Y29udGV4dDsKKworICAgIC8vIFNodXQgdXAgY29tcGlsZXIgd2FybmluZy4KKyAgICAodm9pZCl1YzsKKyAgICAodm9pZClpbmZvOworCisgICAgLy8gV2UgY2FsbCBzb21lIGZ1bmN0aW9ucyBoZXJlIHdoaWNoIGFyZW4ndCBhc3luYy1zaWduYWwtc2FmZSwKKyAgICAvLyBidXQgdGhpcyBmdW5jdGlvbiBpc24ndCByZWFsbHkgdXNlZnVsIHdpdGhvdXQgdGhvc2UgY2FsbHMuCisgICAgLy8gU2luY2Ugd2UgYXJlIG1ha2luZyBhIGdhbWJsZSAoYW5kIHdlIGRlYWRsb2NrIGlmIHdlIGxvb3NlKSwKKyAgICAvLyB3ZSBhcmUgZ29pbmcgdG8gc2V0IHVwIGEgdHdvLXNlY29uZCB3YXRjaGRvZyB0byBtYWtlIHN1cmUKKyAgICAvLyB3ZSBlbmQgdXAgdGVybWluYXRpbmcgbGlrZSB3ZSBzaG91bGQuIFRoZSBjaG9pY2Ugb2YgYSB0d28KKyAgICAvLyBzZWNvbmQgdGltZW91dCBpcyBlbnRpcmVseSBhcmJpdHJhcnksIGFuZCBtYXkgYmUgY2hhbmdlZAorICAgIC8vIGlmIG5lZWRzIHdhcnJhbnQuCisgICAgYWxhcm0oMik7CisgICAgc2lnbmFsKFNJR0FMUk0sIFNJR19ERkwpOworCisgICAgZnByaW50ZihzdGRlcnIsICIgKioqIEZBVEFMIEVSUk9SOiBDYXVnaHQgc2lnbmFsICVkICglcyk6XG4iLCBzaWcsIHN0cnNpZ25hbChzaWcpKTsKKworICAgIHN0YWNrX2RlcHRoID0gYmFja3RyYWNlKHN0YWNrLCBBVVRPX1BSSU5UX0JBQ0tUUkFDRV9TVEFDS19ERVBUSCk7CisKKyAgICAvLyBIZXJlIGFyZSBhcmUgdHJ5aW5nIHRvIHVwZGF0ZSB0aGUgcG9pbnRlciBpbiB0aGUgYmFja3RyYWNlCisgICAgLy8gdG8gYmUgdGhlIGFjdHVhbCBsb2NhdGlvbiBvZiB0aGUgZmF1bHQuCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgIHN0YWNrWzFdID0gKHZvaWQgKikgdWMtPnVjX21jb250ZXh0LmdyZWdzW1JFR19SSVBdOworI2VsaWYgZGVmaW5lZChfX2kzODZfXykKKyAgICBzdGFja1sxXSA9ICh2b2lkICopIHVjLT51Y19tY29udGV4dC5ncmVnc1tSRUdfRUlQXTsKKyNlbGlmIGRlZmluZWQoX19hcm1fXykKKyAgICBzdGFja1sxXSA9ICh2b2lkICopIHVjLT51Y19tY29udGV4dC5hcm1faXA7CisjZWxzZQorI3dhcm5pbmcgVE9ETzogQWRkIHRoaXMgYXJjaCB0byBzaWduYWxfY3JpdGljYWwKKyNlbmRpZgorCisgICAgLy8gTm93IGR1bXAgdGhlIHN5bWJvbHMgdG8gc3RkZXJyLCBpbiBjYXNlIHN5c2xvZyBiYXJmcy4KKyAgICBiYWNrdHJhY2Vfc3ltYm9sc19mZChzdGFjaywgc3RhY2tfZGVwdGgsIFNUREVSUl9GSUxFTk8pOworCisgICAgLy8gTG9hZCB1cCB0aGUgc3ltYm9scyBpbmRpdmlkdWFsbHksIHNvIHdlIGNhbiBvdXRwdXQgdG8gc3lzbG9nLCB0b28uCisgICAgc3RhY2tfc3ltYm9scyA9IGJhY2t0cmFjZV9zeW1ib2xzKHN0YWNrLCBzdGFja19kZXB0aCk7CisKKyAgICBzeXNsb2coTE9HX0NSSVQsICIgKioqIEZBVEFMIEVSUk9SOiBDYXVnaHQgc2lnbmFsICVkICglcyk6Iiwgc2lnLCBzdHJzaWduYWwoc2lnKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpICE9IHN0YWNrX2RlcHRoOyBpKyspCisgICAgeworICAgICAgICBzeXNsb2coTE9HX0NSSVQsICJbQlRdICUyZDogJXMiLCBpLCBzdGFja19zeW1ib2xzW2ldKTsKKyAgICB9CisKKyAgICBmcmVlKHN0YWNrX3N5bWJvbHMpOworCisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmIC8vIGlmIEFVVE9fUFJJTlRfQkFDS1RSQUNFCisKK3N0YXRpYyB2b2lkIGxvZ19kZWJ1Z19idWZmZXIoY29uc3QgY2hhciogZGVzYywgY29uc3QgdWludDhfdCogYnVmZmVyX3B0ciwgaW50IGJ1ZmZlcl9sZW4sIGJvb2wgZm9yY2UpCit7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKCFmb3JjZSAmJiAoc1ZlcmJvc2UgPCBMT0dfREVCVUcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlIChpIDwgYnVmZmVyX2xlbikKKyAgICB7CisgICAgICAgIGludCBqOworICAgICAgICBjaGFyIGR1bXBfc3RyaW5nW1NPQ0tFVF9ERUJVR19CWVRFU19QRVJfTElORSozKzFdOworCisgICAgICAgIGZvciAoaiA9IDA7IGkgPCBidWZmZXJfbGVuICYmIGogPCBTT0NLRVRfREVCVUdfQllURVNfUEVSX0xJTkU7IGkrKywgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBzcHJpbnRmKGR1bXBfc3RyaW5nK2oqMywgIiUwMlggIiwgYnVmZmVyX3B0cltpXSk7CisgICAgICAgIH0KKworICAgICAgICBzeXNsb2coZm9yY2UgPyBMT0dfV0FSTklORyA6IExPR19ERUJVRywgIiVzOiAlcyVzIiwgZGVzYywgZHVtcF9zdHJpbmcsIChpIDwgYnVmZmVyX2xlbik/IiAuLi4iOiIiKTsKKyAgICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IFNQSSBUcmFuc2ZlciBGdW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKHVpbnQ4X3QgKmhlYWRlciwgdWludDhfdCB2YWx1ZSkKK3sKKyAgICBoZWFkZXJbMF0gPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgc3BpX2hlYWRlcl9zZXRfYWNjZXB0X2xlbih1aW50OF90ICpoZWFkZXIsIHVpbnQxNl90IGxlbikKK3sKKyAgICBoZWFkZXJbMV0gPSAoKGxlbiA+PiAwKSAmIDB4RkYpOworICAgIGhlYWRlclsyXSA9ICgobGVuID4+IDgpICYgMHhGRik7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9oZWFkZXJfc2V0X2RhdGFfbGVuKHVpbnQ4X3QgKmhlYWRlciwgdWludDE2X3QgbGVuKQoreworICAgIGhlYWRlclszXSA9ICgobGVuID4+IDApICYgMHhGRik7CisgICAgaGVhZGVyWzRdID0gKChsZW4gPj4gOCkgJiAweEZGKTsKK30KKworc3RhdGljIHVpbnQ4X3Qgc3BpX2hlYWRlcl9nZXRfZmxhZ19ieXRlKGNvbnN0IHVpbnQ4X3QgKmhlYWRlcikKK3sKKyAgICByZXR1cm4gaGVhZGVyWzBdOworfQorCitzdGF0aWMgdWludDE2X3Qgc3BpX2hlYWRlcl9nZXRfYWNjZXB0X2xlbihjb25zdCB1aW50OF90ICpoZWFkZXIpCit7CisgICAgcmV0dXJuICggaGVhZGVyWzFdICsgKHVpbnQxNl90KShoZWFkZXJbMl0gPDwgOCkgKTsKK30KKworc3RhdGljIHVpbnQxNl90IHNwaV9oZWFkZXJfZ2V0X2RhdGFfbGVuKGNvbnN0IHVpbnQ4X3QgKmhlYWRlcikKK3sKKyAgICByZXR1cm4gKCBoZWFkZXJbM10gKyAodWludDE2X3QpKGhlYWRlcls0XSA8PCA4KSApOworfQorCitzdGF0aWMgdWludDhfdCogZ2V0X3JlYWxfcnhfZnJhbWVfc3RhcnQodm9pZCkKK3sKKyAgICB1aW50OF90KiByZXQgPSBzU3BpUnhGcmFtZUJ1ZmZlcjsKKyAgICBpbnQgaSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc1NwaVJ4QWxpZ25BbGxvd2FuY2U7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChyZXRbMF0gIT0gMHhGRikKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0Kys7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19zcGlfeGZlcihpbnQgbGVuKQorIHsKKyAgICBpbnQgcmV0OworCisgICAgc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIgeGZlclsyXSA9CisgICAgeworICAgICAgICB7ICAgLy8gVGhpcyBwYXJ0IGlzIHRoZSBkZWxheSBiZXR3ZWVuIEPMhVPMhSBiZWluZworICAgICAgICAgICAgLy8gYXNzZXJ0ZWQgYW5kIHRoZSBTUEkgY2xvY2sgc3RhcnRpbmcuIFRoaXMKKyAgICAgICAgICAgIC8vIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIExpbnV4IFNQSSBkcml2ZXJzLgorICAgICAgICAgICAgLnR4X2J1ZiA9IDAsCisgICAgICAgICAgICAucnhfYnVmID0gMCwKKyAgICAgICAgICAgIC5sZW4gPSAwLAorICAgICAgICAgICAgLmRlbGF5X3VzZWNzID0gKHVpbnQxNl90KXNTcGlDc0RlbGF5LAorICAgICAgICAgICAgLnNwZWVkX2h6ID0gKHVpbnQzMl90KXNTcGlTcGVlZCwKKyAgICAgICAgICAgIC5iaXRzX3Blcl93b3JkID0gOCwKKyAgICAgICAgICAgIC5jc19jaGFuZ2UgPSBmYWxzZSwKKyAgICAgICAgfSwKKyAgICAgICAgeyAgIC8vIFRoaXMgcGFydCBpcyB0aGUgYWN0dWFsIFNQSSB0cmFuc2Zlci4KKyAgICAgICAgICAgIC50eF9idWYgPSAodW5zaWduZWQgbG9uZylzU3BpVHhGcmFtZUJ1ZmZlciwKKyAgICAgICAgICAgIC5yeF9idWYgPSAodW5zaWduZWQgbG9uZylzU3BpUnhGcmFtZUJ1ZmZlciwKKyAgICAgICAgICAgIC5sZW4gPSAodWludDMyX3QpKGxlbiArIEhFQURFUl9MRU4gKyBzU3BpUnhBbGlnbkFsbG93YW5jZSksCisgICAgICAgICAgICAuZGVsYXlfdXNlY3MgPSAwLAorICAgICAgICAgICAgLnNwZWVkX2h6ID0gKHVpbnQzMl90KXNTcGlTcGVlZCwKKyAgICAgICAgICAgIC5iaXRzX3Blcl93b3JkID0gOCwKKyAgICAgICAgICAgIC5jc19jaGFuZ2UgPSBmYWxzZSwKKyAgICAgICAgfQorICAgIH07CisKKworCisgICAgaWYgKHNTcGlDc0RlbGF5ID4gMCkKKyAgICB7CisgICAgICAgIC8vIEEgQ8yFU8yFIGRlbGF5IGhhcyBiZWVuIHNwZWNpZmllZC4gU3RhcnQgdHJhbnNhY3Rpb25zCisgICAgICAgIC8vIHdpdGggYm90aCBwYXJ0cy4KKyAgICAgICAgcmV0ID0gaW9jdGwoc1NwaURldkZkLCBTUElfSU9DX01FU1NBR0UoMiksICZ4ZmVyWzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gTm8gQ8yFU8yFIGRlbGF5IGhhcyBiZWVuIHNwZWNpZmllZCwgc28gd2Ugc2tpcCB0aGUgZmlyc3QKKyAgICAgICAgLy8gcGFydCBiZWNhdXNlIGl0IGNhdXNlcyBzb21lIFNQSSBkcml2ZXJzIHRvIGNyb2FrLgorICAgICAgICByZXQgPSBpb2N0bChzU3BpRGV2RmQsIFNQSV9JT0NfTUVTU0FHRSgxKSwgJnhmZXJbMV0pOworICAgIH0KKworICAgIGlmIChyZXQgIT0gLTEpCisgICAgeworICAgICAgICBsb2dfZGVidWdfYnVmZmVyKCJTUEktVFgiLCBzU3BpVHhGcmFtZUJ1ZmZlciwgKGludCl4ZmVyWzFdLmxlbiwgZmFsc2UpOworICAgICAgICBsb2dfZGVidWdfYnVmZmVyKCJTUEktUlgiLCBzU3BpUnhGcmFtZUJ1ZmZlciwgKGludCl4ZmVyWzFdLmxlbiwgZmFsc2UpOworCisgICAgICAgIHNTcGlGcmFtZUNvdW50Kys7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfc3BpX2hlYWRlcihjb25zdCBjaGFyKiBoaW50LCBib29sIGZvcmNlKQoreworICAgIGlmIChmb3JjZSB8fCAoc1ZlcmJvc2UgPj0gTE9HX0RFQlVHKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNwaVJ4RnJhbWVCdWZmZXIgPSBnZXRfcmVhbF9yeF9mcmFtZV9zdGFydCgpOworCisgICAgICAgIHN5c2xvZyhmb3JjZSA/IExPR19XQVJOSU5HIDogTE9HX0RFQlVHLCAiJXMtVFg6IEg6JTAyWCBBQ0NFUFQ6JWQgREFUQTolMGRcbiIsCisgICAgICAgICAgICBoaW50LAorICAgICAgICAgICAgc3BpX2hlYWRlcl9nZXRfZmxhZ19ieXRlKHNTcGlUeEZyYW1lQnVmZmVyKSwKKyAgICAgICAgICAgIHNwaV9oZWFkZXJfZ2V0X2FjY2VwdF9sZW4oc1NwaVR4RnJhbWVCdWZmZXIpLAorICAgICAgICAgICAgc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4oc1NwaVR4RnJhbWVCdWZmZXIpCisgICAgICAgICk7CisKKyAgICAgICAgc3lzbG9nKGZvcmNlID8gTE9HX1dBUk5JTkcgOiBMT0dfREVCVUcsICIlcy1SWDogSDolMDJYIEFDQ0VQVDolZCBEQVRBOiUwZFxuIiwKKyAgICAgICAgICAgIGhpbnQsCisgICAgICAgICAgICBzcGlfaGVhZGVyX2dldF9mbGFnX2J5dGUoc3BpUnhGcmFtZUJ1ZmZlciksCisgICAgICAgICAgICBzcGlfaGVhZGVyX2dldF9hY2NlcHRfbGVuKHNwaVJ4RnJhbWVCdWZmZXIpLAorICAgICAgICAgICAgc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4oc3BpUnhGcmFtZUJ1ZmZlcikKKyAgICAgICAgKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9wdWxsX3NwaSh2b2lkKQoreworICAgIGludCByZXQ7CisgICAgdWludDE2X3Qgc3BpX3hmZXJfYnl0ZXMgPSAwOworICAgIGNvbnN0IHVpbnQ4X3QqIHNwaVJ4RnJhbWVCdWZmZXIgPSBOVUxMOworICAgIHVpbnQ4X3Qgc2xhdmVfaGVhZGVyOworICAgIHVpbnQxNl90IHNsYXZlX21heF9yeDsKKyAgICBpbnQgc3VjY2Vzc2Z1bF9leGNoYW5nZXMgPSAwOworCisgICAgc3RhdGljIHVpbnQxNl90IHNsYXZlX2RhdGFfbGVuOworCisgICAgLy8gRm9yIG5vdywgc1NwaVJ4UGF5bG9hZFNpemUgbXVzdCBiZSB6ZXJvCisgICAgLy8gd2hlbiBlbnRlcmluZyB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1heSBjaGFuZ2UKKyAgICAvLyBhdCBzb21lIHBvaW50LCBmb3Igbm93IHRoaXMgbWFrZXMgdGhpbmdzCisgICAgLy8gbXVjaCBlYXNpZXIuCisgICAgYXNzZXJ0KHNTcGlSeFBheWxvYWRTaXplID09IDApOworCisgICAgaWYgKHNTcGlWYWxpZEZyYW1lQ291bnQgPT0gMCkKKyAgICB7CisgICAgICAgIC8vIFNldCB0aGUgcmVzZXQgZmxhZyB0byBpbmRpY2F0ZSB0byBvdXIgc2xhdmUgdGhhdCB3ZQorICAgICAgICAvLyBhcmUgY29taW5nIHVwIGZyb20gc2NyYXRjaC4KKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKHNTcGlUeEZyYW1lQnVmZmVyLCBTUElfSEVBREVSX1JFU0VUX0ZMQUd8U1BJX0hFQURFUl9QQVRURVJOX1ZBTFVFKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3BpX2hlYWRlcl9zZXRfZmxhZ19ieXRlKHNTcGlUeEZyYW1lQnVmZmVyLCBTUElfSEVBREVSX1BBVFRFUk5fVkFMVUUpOworICAgIH0KKworICAgIC8vIFplcm8gb3V0IG91ciByeF9hY2NlcHQgYW5kIG91ciBkYXRhX2xlbiBmb3Igbm93LgorICAgIHNwaV9oZWFkZXJfc2V0X2FjY2VwdF9sZW4oc1NwaVR4RnJhbWVCdWZmZXIsIDApOworICAgIHNwaV9oZWFkZXJfc2V0X2RhdGFfbGVuKHNTcGlUeEZyYW1lQnVmZmVyLCAwKTsKKworICAgIC8vIFNhbml0eSBjaGVjay4KKyAgICBpZiAoc2xhdmVfZGF0YV9sZW4gPiBNQVhfRlJBTUVfU0laRSkKKyAgICB7CisgICAgICAgIHNsYXZlX2RhdGFfbGVuID0gMDsKKyAgICB9CisKKyAgICBpZiAoc1NwaVR4SXNSZWFkeSkKKyAgICB7CisgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0cnkgdG8gaW1tZWRpYXRlbHkgc2VuZCBhIGZyYW1lIGlmIHdlIGhhdmUgaXQgcXVldWVkIHVwLgorICAgICAgICBzcGlfaGVhZGVyX3NldF9kYXRhX2xlbihzU3BpVHhGcmFtZUJ1ZmZlciwgc1NwaVR4UGF5bG9hZFNpemUpOworCisgICAgICAgIGlmIChzU3BpVHhQYXlsb2FkU2l6ZSA+IHNwaV94ZmVyX2J5dGVzKQorICAgICAgICB7CisgICAgICAgICAgICBzcGlfeGZlcl9ieXRlcyA9IHNTcGlUeFBheWxvYWRTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNTcGlSeFBheWxvYWRTaXplID09IDApCisgICAgeworICAgICAgICBpZiAoc2xhdmVfZGF0YV9sZW4gIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW4gYSBwcmV2aW91cyB0cmFuc2FjdGlvbiB0aGUgc2xhdmUgaW5kaWNhdGVkCisgICAgICAgICAgICAvLyBpdCBoYWQgc29tZXRoaW5nIHRvIHNlbmQgdXMuIE1ha2Ugc3VyZSBvdXIKKyAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIGlzIGxhcmdlIGVub3VnaCB0byBoYW5kbGUgaXQuCisgICAgICAgICAgICBpZiAoc2xhdmVfZGF0YV9sZW4gPiBzcGlfeGZlcl9ieXRlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcGlfeGZlcl9ieXRlcyA9IHNsYXZlX2RhdGFfbGVuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2V0IHVwIGEgbWluaW11bSB0cmFuc2ZlciBzaXplIHRvIGFsbG93IHNtYWxsCisgICAgICAgICAgICAvLyBmcmFtZXMgdGhlIHNsYXZlIHdhbnRzIHRvIHNlbmQgdXMgdG8gYmUgaGFuZGxlZAorICAgICAgICAgICAgLy8gaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uCisgICAgICAgICAgICBpZiAoc1NwaVNtYWxsUGFja2V0U2l6ZSA+IHNwaV94ZmVyX2J5dGVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwaV94ZmVyX2J5dGVzID0gKHVpbnQxNl90KXNTcGlTbWFsbFBhY2tldFNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzcGlfaGVhZGVyX3NldF9hY2NlcHRfbGVuKHNTcGlUeEZyYW1lQnVmZmVyLCBzcGlfeGZlcl9ieXRlcyk7CisgICAgfQorCisgICAgLy8gUGVyZm9ybSB0aGUgU1BJIHRyYW5zYWN0aW9uLgorICAgIHJldCA9IGRvX3NwaV94ZmVyKHNwaV94ZmVyX2J5dGVzKTsKKworICAgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJkb19zcGlfeGZlciIpOworCisgICAgICAgIC8vIFByaW50IG91dCBhIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSBmb3IKKyAgICAgICAgLy8gYSBjb21tb24gZXJyb3IuCisgICAgICAgIGlmICggKHNTcGlDc0RlbGF5ICE9IDApCisgICAgICAgICAgJiYgKGVycm5vID09IEVJTlZBTCkKKyAgICAgICAgKSB7CisgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlNQSSBpb2N0bCBmYWlsZWQgd2l0aCBFSU5WQUwuIFRyeSBhZGRpbmcgYC0tc3BpLWNzLWRlbGF5PTBgIHRvIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIik7CisgICAgICAgIH0KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8vIEFjY291bnQgZm9yIG1pc2FsaWdubWVudCAoMHhGRiBieXRlcyBhdCB0aGUgc3RhcnQpCisgICAgc3BpUnhGcmFtZUJ1ZmZlciA9IGdldF9yZWFsX3J4X2ZyYW1lX3N0YXJ0KCk7CisKKyAgICBkZWJ1Z19zcGlfaGVhZGVyKCJwdXNoX3B1bGwiLCBmYWxzZSk7CisKKyAgICBzbGF2ZV9oZWFkZXIgPSBzcGlfaGVhZGVyX2dldF9mbGFnX2J5dGUoc3BpUnhGcmFtZUJ1ZmZlcik7CisKKyAgICBpZiAoKHNsYXZlX2hlYWRlciA9PSAweEZGKSB8fCAoc2xhdmVfaGVhZGVyID09IDB4MDApKQorICAgIHsKKyAgICAgICAgaWYgKCAoc2xhdmVfaGVhZGVyID09IHNwaVJ4RnJhbWVCdWZmZXJbMV0pCisgICAgICAgICAgJiYgKHNsYXZlX2hlYWRlciA9PSBzcGlSeEZyYW1lQnVmZmVyWzJdKQorICAgICAgICAgICYmIChzbGF2ZV9oZWFkZXIgPT0gc3BpUnhGcmFtZUJ1ZmZlclszXSkKKyAgICAgICAgICAmJiAoc2xhdmVfaGVhZGVyID09IHNwaVJ4RnJhbWVCdWZmZXJbNF0pCisgICAgICAgICkgeworICAgICAgICAgICAgLy8gRGV2aWNlIGlzIG9mZiBvciBpbiBhIGJhZCBzdGF0ZS4KKyAgICAgICAgICAgIC8vIEluIHNvbWUgY2FzZXMgbWF5IGJlIGluZHVjZWQgYnkgZmxvdyBjb250cm9sLgorICAgICAgICAgICAgc3lzbG9nKHNsYXZlX2RhdGFfbGVuID09IDAgPyBMT0dfREVCVUcgOiBMT0dfV0FSTklORywgIlNsYXZlIGRpZCBub3QgcmVzcG9uZCB0byBmcmFtZS4gKEhlYWRlciB3YXMgYWxsIDB4JTAyWCkiLCBzbGF2ZV9oZWFkZXIpOworICAgICAgICAgICAgc1NwaVVucmVzcG9uc2l2ZUZyYW1lQ291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEhlYWRlciBpcyBmdWxsIG9mIGdhcmJhZ2UKKyAgICAgICAgICAgIHN5c2xvZygKKyAgICAgICAgICAgICAgICBMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAiR2FyYmFnZSBpbiBoZWFkZXIgOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgiLAorICAgICAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbMF0sCisgICAgICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlclsxXSwKKyAgICAgICAgICAgICAgICBzcGlSeEZyYW1lQnVmZmVyWzJdLAorICAgICAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbM10sCisgICAgICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlcls0XQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHNTcGlHYXJiYWdlRnJhbWVDb3VudCsrOworICAgICAgICAgICAgaWYgKHNWZXJib3NlIDwgTE9HX0RFQlVHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvZ19kZWJ1Z19idWZmZXIoIlNQSS1UWCIsIHNTcGlUeEZyYW1lQnVmZmVyLCAoaW50KXNwaV94ZmVyX2J5dGVzICsgSEVBREVSX0xFTiArIHNTcGlSeEFsaWduQWxsb3dhbmNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBsb2dfZGVidWdfYnVmZmVyKCJTUEktUlgiLCBzU3BpUnhGcmFtZUJ1ZmZlciwgKGludClzcGlfeGZlcl9ieXRlcyArIEhFQURFUl9MRU4gKyBzU3BpUnhBbGlnbkFsbG93YW5jZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc1NwaVR4UmVmdXNlZENvdW50Kys7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBzbGF2ZV9tYXhfcnggPSBzcGlfaGVhZGVyX2dldF9hY2NlcHRfbGVuKHNwaVJ4RnJhbWVCdWZmZXIpOworICAgIHNsYXZlX2RhdGFfbGVuID0gc3BpX2hlYWRlcl9nZXRfZGF0YV9sZW4oc3BpUnhGcmFtZUJ1ZmZlcik7CisKKyAgICBpZiAoICgoc2xhdmVfaGVhZGVyICYgU1BJX0hFQURFUl9QQVRURVJOX01BU0spICE9IFNQSV9IRUFERVJfUEFUVEVSTl9WQUxVRSkKKyAgICAgIHx8IChzbGF2ZV9tYXhfcnggPiBNQVhfRlJBTUVfU0laRSkKKyAgICAgIHx8IChzbGF2ZV9kYXRhX2xlbiA+IE1BWF9GUkFNRV9TSVpFKQorICAgICkKKyAgICB7CisgICAgICAgIHNTcGlHYXJiYWdlRnJhbWVDb3VudCsrOworICAgICAgICBzU3BpVHhSZWZ1c2VkQ291bnQrKzsKKyAgICAgICAgc2xhdmVfZGF0YV9sZW4gPSAwOworICAgICAgICBzeXNsb2coCisgICAgICAgICAgICBMT0dfV0FSTklORywKKyAgICAgICAgICAgICJHYXJiYWdlIGluIGhlYWRlciA6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCIsCisgICAgICAgICAgICBzcGlSeEZyYW1lQnVmZmVyWzBdLAorICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlclsxXSwKKyAgICAgICAgICAgIHNwaVJ4RnJhbWVCdWZmZXJbMl0sCisgICAgICAgICAgICBzcGlSeEZyYW1lQnVmZmVyWzNdLAorICAgICAgICAgICAgc3BpUnhGcmFtZUJ1ZmZlcls0XQorICAgICAgICApOworICAgICAgICBpZiAoc1ZlcmJvc2UgPCBMT0dfREVCVUcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ19kZWJ1Z19idWZmZXIoIlNQSS1UWCIsIHNTcGlUeEZyYW1lQnVmZmVyLCAoaW50KXNwaV94ZmVyX2J5dGVzICsgSEVBREVSX0xFTiArIHNTcGlSeEFsaWduQWxsb3dhbmNlLCB0cnVlKTsKKyAgICAgICAgICAgIGxvZ19kZWJ1Z19idWZmZXIoIlNQSS1SWCIsIHNTcGlSeEZyYW1lQnVmZmVyLCAoaW50KXNwaV94ZmVyX2J5dGVzICsgSEVBREVSX0xFTiArIHNTcGlSeEFsaWduQWxsb3dhbmNlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgc1NwaVZhbGlkRnJhbWVDb3VudCsrOworCisgICAgaWYgKCAoc2xhdmVfaGVhZGVyICYgU1BJX0hFQURFUl9SRVNFVF9GTEFHKSA9PSBTUElfSEVBREVSX1JFU0VUX0ZMQUcpCisgICAgeworICAgICAgICBzU2xhdmVSZXNldENvdW50Kys7CisgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiU2xhdmUgZGlkIHJlc2V0ICglbGx1IHJlc2V0cyBzbyBmYXIpIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzU2xhdmVSZXNldENvdW50KTsKKyAgICAgICAgc1NsYXZlRGlkUmVzZXQgPSB0cnVlOworICAgICAgICBzRHVtcFN0YXRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0LCBpZiBhbnkuCisgICAgaWYgKCAoc1NwaVJ4UGF5bG9hZFNpemUgPT0gMCkKKyAgICAgICYmIChzbGF2ZV9kYXRhX2xlbiAhPSAwKQorICAgICAgJiYgKHNsYXZlX2RhdGFfbGVuIDw9IHNwaV9oZWFkZXJfZ2V0X2FjY2VwdF9sZW4oc1NwaVR4RnJhbWVCdWZmZXIpKQorICAgICkgeworICAgICAgICAvLyBXZSBoYXZlIHJlY2VpdmVkIGEgcGFja2V0LiBTZXQgc1NwaVJ4UGF5bG9hZFNpemUgc28gdGhhdAorICAgICAgICAvLyB0aGUgcGFja2V0IHdpbGwgZXZlbnR1YWxseSBnZXQgcXVldWVkIHVwIGJ5IHB1c2hfaGRsYygpLgorICAgICAgICBzU3BpUnhQYXlsb2FkU2l6ZSA9IHNsYXZlX2RhdGFfbGVuOworCisgICAgICAgIHNsYXZlX2RhdGFfbGVuID0gMDsKKworICAgICAgICBzdWNjZXNzZnVsX2V4Y2hhbmdlcysrOworICAgIH0KKworICAgIC8vIEhhbmRsZSB0cmFuc21pdHRlZCBwYWNrZXQsIGlmIGFueS4KKyAgICBpZiAoIHNTcGlUeElzUmVhZHkKKyAgICAgICYmIChzU3BpVHhQYXlsb2FkU2l6ZSA9PSBzcGlfaGVhZGVyX2dldF9kYXRhX2xlbihzU3BpVHhGcmFtZUJ1ZmZlcikpCisgICAgKSB7CisgICAgICAgIGlmIChzcGlfaGVhZGVyX2dldF9kYXRhX2xlbihzU3BpVHhGcmFtZUJ1ZmZlcikgPD0gc2xhdmVfbWF4X3J4KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBPdXIgb3V0Ym91bmQgcGFja2V0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4gQ2xlYXIKKyAgICAgICAgICAgIC8vIHNTcGlUeFBheWxvYWRTaXplIGFuZCBzU3BpVHhJc1JlYWR5IHNvIHRoYXQgcHVsbF9oZGxjKCkgY2FuCisgICAgICAgICAgICAvLyBwdWxsIGFub3RoZXIgcGFja2V0IGZvciB1cyB0byBzZW5kLgorICAgICAgICAgICAgc1NwaVR4SXNSZWFkeSA9IGZhbHNlOworICAgICAgICAgICAgc1NwaVR4UGF5bG9hZFNpemUgPSAwOworICAgICAgICAgICAgc1NwaVR4UmVmdXNlZENvdW50ID0gMDsKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWxfZXhjaGFuZ2VzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgc2xhdmUgV2Fzbid0IHJlYWR5IGZvciB3aGF0IHdlIGhhZCB0bworICAgICAgICAgICAgLy8gc2VuZCB0aGVtLiBJbmNyZW1lbnRpbmcgdGhpcyBjb3VudGVyIHdpbGwKKyAgICAgICAgICAgIC8vIHR1cm4gb24gcmF0ZSBsaW1pdGluZyBzbyB0aGF0IHdlCisgICAgICAgICAgICAvLyBkb24ndCB3YXN0ZSBhIHRvbiBvZiBDUFUgYm9tYmFyZGluZyB0aGVtCisgICAgICAgICAgICAvLyB3aXRoIHVzZWxlc3MgU1BJIHRyYW5zZmVycy4KKyAgICAgICAgICAgIHNTcGlUeFJlZnVzZWRDb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzU3BpVHhJc1JlYWR5KQorICAgIHsKKyAgICAgICAgc1NwaVR4UmVmdXNlZENvdW50ID0gMDsKKyAgICB9CisKKyAgICBpZiAoc3VjY2Vzc2Z1bF9leGNoYW5nZXMgPT0gMikKKyAgICB7CisgICAgICAgIHNTcGlEdXBsZXhGcmFtZUNvdW50Kys7CisgICAgfQorYmFpbDoKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBjaGVja19hbmRfY2xlYXJfaW50ZXJydXB0KHZvaWQpCit7CisgICAgaWYgKHNJbnRHcGlvVmFsdWVGZCA+PSAwKQorICAgIHsKKyAgICAgICAgY2hhciB2YWx1ZVs1XSA9ICIiOworICAgICAgICBzc2l6ZV90IGxlbjsKKworICAgICAgICBsc2VlayhzSW50R3Bpb1ZhbHVlRmQsIDAsIFNFRUtfU0VUKTsKKworICAgICAgICBsZW4gPSByZWFkKHNJbnRHcGlvVmFsdWVGZCwgdmFsdWUsIHNpemVvZih2YWx1ZSktMSk7CisKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigiY2hlY2tfYW5kX2NsZWFyX2ludGVycnVwdCIpOworICAgICAgICAgICAgc1JldCA9IEVYSVRfRkFJTFVSRTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBpbnRlcnJ1cHQgcGluIGlzIGFjdGl2ZSBsb3cuCisgICAgICAgIHJldHVybiBHUElPX0lOVF9BU1NFUlRfU1RBVEUgPT0gYXRvaSh2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IEhETEMgVHJhbnNmZXIgRnVuY3Rpb25zICovCisKKyNkZWZpbmUgSERMQ19CWVRFX0ZMQUcgICAgICAgICAgICAgMHg3RQorI2RlZmluZSBIRExDX0JZVEVfRVNDICAgICAgICAgICAgICAweDdECisjZGVmaW5lIEhETENfQllURV9YT04gICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgSERMQ19CWVRFX1hPRkYgICAgICAgICAgICAgMHgxMworI2RlZmluZSBIRExDX0JZVEVfU1BFQ0lBTCAgICAgICAgICAweEY4CisjZGVmaW5lIEhETENfRVNDQVBFX1hGT1JNICAgICAgICAgIDB4MjAKKworc3RhdGljIHVpbnQxNl90IGhkbGNfY3JjMTYodWludDE2X3QgYUZjcywgdWludDhfdCBhQnl0ZSkKK3sKKyNpZiAxCisgICAgLy8gQ1JDLTE2L0NDSVRULCBDUkMtMTYvQ0NJVFQtVFJVRSwgQ1JDLUNDSVRUCisgICAgLy8gd2lkdGg9MTYgcG9seT0weDEwMjEgaW5pdD0weDAwMDAgcmVmaW49dHJ1ZSByZWZvdXQ9dHJ1ZSB4b3JvdXQ9MHgwMDAwIGNoZWNrPTB4MjE4OSBuYW1lPSJLRVJNSVQiCisgICAgLy8gaHR0cDovL3JldmVuZy5zb3VyY2Vmb3JnZS5uZXQvY3JjLWNhdGFsb2d1ZS8xNi5odG0jY3JjLmNhdC5rZXJtaXQKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc0Zjc1RhYmxlWzI1Nl0gPQorICAgIHsKKyAgICAgICAgMHgwMDAwLCAweDExODksIDB4MjMxMiwgMHgzMjliLCAweDQ2MjQsIDB4NTdhZCwgMHg2NTM2LCAweDc0YmYsCisgICAgICAgIDB4OGM0OCwgMHg5ZGMxLCAweGFmNWEsIDB4YmVkMywgMHhjYTZjLCAweGRiZTUsIDB4ZTk3ZSwgMHhmOGY3LAorICAgICAgICAweDEwODEsIDB4MDEwOCwgMHgzMzkzLCAweDIyMWEsIDB4NTZhNSwgMHg0NzJjLCAweDc1YjcsIDB4NjQzZSwKKyAgICAgICAgMHg5Y2M5LCAweDhkNDAsIDB4YmZkYiwgMHhhZTUyLCAweGRhZWQsIDB4Y2I2NCwgMHhmOWZmLCAweGU4NzYsCisgICAgICAgIDB4MjEwMiwgMHgzMDhiLCAweDAyMTAsIDB4MTM5OSwgMHg2NzI2LCAweDc2YWYsIDB4NDQzNCwgMHg1NWJkLAorICAgICAgICAweGFkNGEsIDB4YmNjMywgMHg4ZTU4LCAweDlmZDEsIDB4ZWI2ZSwgMHhmYWU3LCAweGM4N2MsIDB4ZDlmNSwKKyAgICAgICAgMHgzMTgzLCAweDIwMGEsIDB4MTI5MSwgMHgwMzE4LCAweDc3YTcsIDB4NjYyZSwgMHg1NGI1LCAweDQ1M2MsCisgICAgICAgIDB4YmRjYiwgMHhhYzQyLCAweDllZDksIDB4OGY1MCwgMHhmYmVmLCAweGVhNjYsIDB4ZDhmZCwgMHhjOTc0LAorICAgICAgICAweDQyMDQsIDB4NTM4ZCwgMHg2MTE2LCAweDcwOWYsIDB4MDQyMCwgMHgxNWE5LCAweDI3MzIsIDB4MzZiYiwKKyAgICAgICAgMHhjZTRjLCAweGRmYzUsIDB4ZWQ1ZSwgMHhmY2Q3LCAweDg4NjgsIDB4OTllMSwgMHhhYjdhLCAweGJhZjMsCisgICAgICAgIDB4NTI4NSwgMHg0MzBjLCAweDcxOTcsIDB4NjAxZSwgMHgxNGExLCAweDA1MjgsIDB4MzdiMywgMHgyNjNhLAorICAgICAgICAweGRlY2QsIDB4Y2Y0NCwgMHhmZGRmLCAweGVjNTYsIDB4OThlOSwgMHg4OTYwLCAweGJiZmIsIDB4YWE3MiwKKyAgICAgICAgMHg2MzA2LCAweDcyOGYsIDB4NDAxNCwgMHg1MTlkLCAweDI1MjIsIDB4MzRhYiwgMHgwNjMwLCAweDE3YjksCisgICAgICAgIDB4ZWY0ZSwgMHhmZWM3LCAweGNjNWMsIDB4ZGRkNSwgMHhhOTZhLCAweGI4ZTMsIDB4OGE3OCwgMHg5YmYxLAorICAgICAgICAweDczODcsIDB4NjIwZSwgMHg1MDk1LCAweDQxMWMsIDB4MzVhMywgMHgyNDJhLCAweDE2YjEsIDB4MDczOCwKKyAgICAgICAgMHhmZmNmLCAweGVlNDYsIDB4ZGNkZCwgMHhjZDU0LCAweGI5ZWIsIDB4YTg2MiwgMHg5YWY5LCAweDhiNzAsCisgICAgICAgIDB4ODQwOCwgMHg5NTgxLCAweGE3MWEsIDB4YjY5MywgMHhjMjJjLCAweGQzYTUsIDB4ZTEzZSwgMHhmMGI3LAorICAgICAgICAweDA4NDAsIDB4MTljOSwgMHgyYjUyLCAweDNhZGIsIDB4NGU2NCwgMHg1ZmVkLCAweDZkNzYsIDB4N2NmZiwKKyAgICAgICAgMHg5NDg5LCAweDg1MDAsIDB4Yjc5YiwgMHhhNjEyLCAweGQyYWQsIDB4YzMyNCwgMHhmMWJmLCAweGUwMzYsCisgICAgICAgIDB4MThjMSwgMHgwOTQ4LCAweDNiZDMsIDB4MmE1YSwgMHg1ZWU1LCAweDRmNmMsIDB4N2RmNywgMHg2YzdlLAorICAgICAgICAweGE1MGEsIDB4YjQ4MywgMHg4NjE4LCAweDk3OTEsIDB4ZTMyZSwgMHhmMmE3LCAweGMwM2MsIDB4ZDFiNSwKKyAgICAgICAgMHgyOTQyLCAweDM4Y2IsIDB4MGE1MCwgMHgxYmQ5LCAweDZmNjYsIDB4N2VlZiwgMHg0Yzc0LCAweDVkZmQsCisgICAgICAgIDB4YjU4YiwgMHhhNDAyLCAweDk2OTksIDB4ODcxMCwgMHhmM2FmLCAweGUyMjYsIDB4ZDBiZCwgMHhjMTM0LAorICAgICAgICAweDM5YzMsIDB4Mjg0YSwgMHgxYWQxLCAweDBiNTgsIDB4N2ZlNywgMHg2ZTZlLCAweDVjZjUsIDB4NGQ3YywKKyAgICAgICAgMHhjNjBjLCAweGQ3ODUsIDB4ZTUxZSwgMHhmNDk3LCAweDgwMjgsIDB4OTFhMSwgMHhhMzNhLCAweGIyYjMsCisgICAgICAgIDB4NGE0NCwgMHg1YmNkLCAweDY5NTYsIDB4NzhkZiwgMHgwYzYwLCAweDFkZTksIDB4MmY3MiwgMHgzZWZiLAorICAgICAgICAweGQ2OGQsIDB4YzcwNCwgMHhmNTlmLCAweGU0MTYsIDB4OTBhOSwgMHg4MTIwLCAweGIzYmIsIDB4YTIzMiwKKyAgICAgICAgMHg1YWM1LCAweDRiNGMsIDB4NzlkNywgMHg2ODVlLCAweDFjZTEsIDB4MGQ2OCwgMHgzZmYzLCAweDJlN2EsCisgICAgICAgIDB4ZTcwZSwgMHhmNjg3LCAweGM0MWMsIDB4ZDU5NSwgMHhhMTJhLCAweGIwYTMsIDB4ODIzOCwgMHg5M2IxLAorICAgICAgICAweDZiNDYsIDB4N2FjZiwgMHg0ODU0LCAweDU5ZGQsIDB4MmQ2MiwgMHgzY2ViLCAweDBlNzAsIDB4MWZmOSwKKyAgICAgICAgMHhmNzhmLCAweGU2MDYsIDB4ZDQ5ZCwgMHhjNTE0LCAweGIxYWIsIDB4YTAyMiwgMHg5MmI5LCAweDgzMzAsCisgICAgICAgIDB4N2JjNywgMHg2YTRlLCAweDU4ZDUsIDB4NDk1YywgMHgzZGUzLCAweDJjNmEsIDB4MWVmMSwgMHgwZjc4CisgICAgfTsKKyAgICByZXR1cm4gKGFGY3MgPj4gOCkgXiBzRmNzVGFibGVbKGFGY3MgXiBhQnl0ZSkgJiAweGZmXTsKKyNlbHNlCisgICAgLy8gQ1JDLTE2L0NDSVRULUZBTFNFLCBzYW1lIENSQyBhcyA4MDIuMTUuNAorICAgIC8vIHdpZHRoPTE2IHBvbHk9MHgxMDIxIGluaXQ9MHhmZmZmIHJlZmluPWZhbHNlIHJlZm91dD1mYWxzZSB4b3JvdXQ9MHgwMDAwIGNoZWNrPTB4MjliMSBuYW1lPSJDUkMtMTYvQ0NJVFQtRkFMU0UiCisgICAgLy8gaHR0cDovL3JldmVuZy5zb3VyY2Vmb3JnZS5uZXQvY3JjLWNhdGFsb2d1ZS8xNi5odG0jY3JjLmNhdC5jcmMtMTYtY2NpdHQtZmFsc2UKKyAgICBhRmNzID0gKHVpbnQxNl90KSgoYUZjcyA+PiA4KSB8IChhRmNzIDw8IDgpKTsKKyAgICBhRmNzIF49IGFCeXRlOworICAgIGFGY3MgXj0gKChhRmNzICYgMHhmZikgPj4gNCk7CisgICAgYUZjcyBePSAoYUZjcyA8PCAxMik7CisgICAgYUZjcyBePSAoKGFGY3MgJiAweGZmKSA8PCA1KTsKKyAgICByZXR1cm4gYUZjczsKKyNlbmRpZgorfQorCitzdGF0aWMgYm9vbCBoZGxjX2J5dGVfbmVlZHNfZXNjYXBlKHVpbnQ4X3QgYnl0ZSkKK3sKKyAgICBzd2l0Y2goYnl0ZSkKKyAgICB7CisgICAgY2FzZSBIRExDX0JZVEVfU1BFQ0lBTDoKKyAgICBjYXNlIEhETENfQllURV9FU0M6CisgICAgY2FzZSBIRExDX0JZVEVfRkxBRzoKKyAgICBjYXNlIEhETENfQllURV9YT0ZGOgorICAgIGNhc2UgSERMQ19CWVRFX1hPTjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgaW50IHB1c2hfaGRsYyh2b2lkKQoreworICAgIGludCByZXQgPSAwOworICAgIGNvbnN0IHVpbnQ4X3QqIHNwaVJ4RnJhbWVCdWZmZXIgPSBnZXRfcmVhbF9yeF9mcmFtZV9zdGFydCgpOworICAgIHN0YXRpYyB1aW50OF90IGVzY2FwZWRfZnJhbWVfYnVmZmVyW01BWF9GUkFNRV9TSVpFKjJdOworICAgIHN0YXRpYyB1aW50MTZfdCB1bmVzY2FwZWRfZnJhbWVfbGVuOworICAgIHN0YXRpYyB1aW50MTZfdCBlc2NhcGVkX2ZyYW1lX2xlbjsKKyAgICBzdGF0aWMgdWludDE2X3QgZXNjYXBlZF9mcmFtZV9zZW50OworCisgICAgaWYgKGVzY2FwZWRfZnJhbWVfbGVuID09IDApCisgICAgeworICAgICAgICBpZiAoc1NsYXZlRGlkUmVzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluZGljYXRlIGFuIE1DVSByZXNldC4KKyAgICAgICAgICAgIG1lbWNweShlc2NhcGVkX2ZyYW1lX2J1ZmZlciwga0hkbGNSZXNldFNpZ25hbCwgc2l6ZW9mKGtIZGxjUmVzZXRTaWduYWwpKTsKKyAgICAgICAgICAgIGVzY2FwZWRfZnJhbWVfbGVuID0gc2l6ZW9mKGtIZGxjUmVzZXRTaWduYWwpOworICAgICAgICAgICAgc1NsYXZlRGlkUmVzZXQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gU2V0IHRoaXMgdG8gemVybywgc2luY2UgdGhpcyBpc24ndCBhIHJlYWwgZnJhbWUuCisgICAgICAgICAgICB1bmVzY2FwZWRfZnJhbWVfbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzU3BpUnhQYXlsb2FkU2l6ZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFc2NhcGUgdGhlIGZyYW1lLgorICAgICAgICAgICAgdWludDhfdCBjOworICAgICAgICAgICAgdWludDE2X3QgZmNzID0ga0hkbGNDcmNSZXNldFZhbHVlOworICAgICAgICAgICAgdWludDE2X3QgaTsKKworICAgICAgICAgICAgdW5lc2NhcGVkX2ZyYW1lX2xlbiA9IHNTcGlSeFBheWxvYWRTaXplOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc1NwaVJ4UGF5bG9hZFNpemU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjID0gc3BpUnhGcmFtZUJ1ZmZlcltpICsgSEVBREVSX0xFTl07CisgICAgICAgICAgICAgICAgZmNzID0gaGRsY19jcmMxNihmY3MsIGMpOworICAgICAgICAgICAgICAgIGlmIChoZGxjX2J5dGVfbmVlZHNfZXNjYXBlKGMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBIRExDX0JZVEVfRVNDOworICAgICAgICAgICAgICAgICAgICBlc2NhcGVkX2ZyYW1lX2J1ZmZlcltlc2NhcGVkX2ZyYW1lX2xlbisrXSA9IGMgXiBIRExDX0VTQ0FQRV9YRk9STTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBjOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmNzIF49IDB4RkZGRjsKKworICAgICAgICAgICAgYyA9IGZjcyAmIDB4RkY7CisgICAgICAgICAgICBpZiAoaGRsY19ieXRlX25lZWRzX2VzY2FwZShjKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlc2NhcGVkX2ZyYW1lX2J1ZmZlcltlc2NhcGVkX2ZyYW1lX2xlbisrXSA9IEhETENfQllURV9FU0M7CisgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBjIF4gSERMQ19FU0NBUEVfWEZPUk07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBjOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjID0gKGZjcyA+PiA4KSAmIDB4RkY7CisgICAgICAgICAgICBpZiAoaGRsY19ieXRlX25lZWRzX2VzY2FwZShjKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlc2NhcGVkX2ZyYW1lX2J1ZmZlcltlc2NhcGVkX2ZyYW1lX2xlbisrXSA9IEhETENfQllURV9FU0M7CisgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBjIF4gSERMQ19FU0NBUEVfWEZPUk07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9idWZmZXJbZXNjYXBlZF9mcmFtZV9sZW4rK10gPSBjOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlc2NhcGVkX2ZyYW1lX2J1ZmZlcltlc2NhcGVkX2ZyYW1lX2xlbisrXSA9IEhETENfQllURV9GTEFHOworICAgICAgICAgICAgZXNjYXBlZF9mcmFtZV9zZW50ID0gMDsKKyAgICAgICAgICAgIHNTcGlSeFBheWxvYWRTaXplID0gMDsKKworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IChpbnQpd3JpdGUoCisgICAgICAgIHNIZGxjT3V0cHV0RmQsCisgICAgICAgIGVzY2FwZWRfZnJhbWVfYnVmZmVyICsgZXNjYXBlZF9mcmFtZV9zZW50LAorICAgICAgICBlc2NhcGVkX2ZyYW1lX2xlbiAgICAtIGVzY2FwZWRfZnJhbWVfc2VudAorICAgICk7CisKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoInB1c2hfaGRsYzp3cml0ZSIpOworICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJwdXNoX2hkbGM6d3JpdGU6IGVycm5vPSVkICglcykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgZXNjYXBlZF9mcmFtZV9zZW50ICs9IHJldDsKKworICAgIC8vIFJlc2V0IHN0YXRlIG9uY2Ugd2UgaGF2ZSBzZW50IHRoZSBlbnRpcmUgZnJhbWUuCisgICAgaWYgKGVzY2FwZWRfZnJhbWVfbGVuID09IGVzY2FwZWRfZnJhbWVfc2VudCkKKyAgICB7CisgICAgICAgIGVzY2FwZWRfZnJhbWVfbGVuID0gZXNjYXBlZF9mcmFtZV9zZW50ID0gMDsKKworICAgICAgICAvLyBJbmNyZW1lbnQgY291bnRlciBmb3Igc3RhdGlzdGljcworICAgICAgICBzSGRsY1R4RnJhbWVDb3VudCsrOworICAgICAgICBzSGRsY1R4RnJhbWVCeXRlQ291bnQgKz0gdW5lc2NhcGVkX2ZyYW1lX2xlbjsKKyAgICB9CisKKyAgICByZXQgPSAwOworCitiYWlsOgorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHVsbF9oZGxjKHZvaWQpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgc3RhdGljIHVpbnQxNl90IGZjczsKKyAgICBzdGF0aWMgYm9vbCB1bmVzY2FwZV9uZXh0X2J5dGUgPSBmYWxzZTsKKworICAgIGlmICghc1NwaVR4SXNSZWFkeSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYnl0ZTsKKyAgICAgICAgd2hpbGUgKChyZXQgPSAoaW50KXJlYWQoc0hkbGNJbnB1dEZkLCAmYnl0ZSwgMSkpID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzU3BpVHhQYXlsb2FkU2l6ZSA+PSAoTUFYX0ZSQU1FX1NJWkUgLSBIRUFERVJfTEVOKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsICJIRExDIGZyYW1lIHdhcyB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgdW5lc2NhcGVfbmV4dF9ieXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc1NwaVR4UGF5bG9hZFNpemUgPSAwOworICAgICAgICAgICAgICAgIGZjcyA9IGtIZGxjQ3JjUmVzZXRWYWx1ZTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZSA9PSBIRExDX0JZVEVfRkxBRykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc1NwaVR4UGF5bG9hZFNpemUgPD0gMikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlX25leHRfYnl0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzU3BpVHhQYXlsb2FkU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZjcyA9IGtIZGxjQ3JjUmVzZXRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmNzICE9IGtIZGxjQ3JjQ2hlY2tWYWx1ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfV0FSTklORywgIkhETEMgZnJhbWUgd2l0aCBiYWQgQ1JDIChMRU46JWQsIEZDUzoweCUwNFgpIiwgc1NwaVR4UGF5bG9hZFNpemUsIGZjcyk7CisgICAgICAgICAgICAgICAgICAgIHNIZGxjUnhCYWRDcmNDb3VudCsrOworICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZV9uZXh0X2J5dGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc1NwaVR4UGF5bG9hZFNpemUgPSAwOworICAgICAgICAgICAgICAgICAgICBmY3MgPSBrSGRsY0NyY1Jlc2V0VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsaXAgb2ZmIHRoZSBDUkMKKyAgICAgICAgICAgICAgICBzU3BpVHhQYXlsb2FkU2l6ZSAtPSAyOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBhIGZyYW1lIGlzIHJlYWR5IHRvIGdvIG91dAorICAgICAgICAgICAgICAgIHNTcGlUeElzUmVhZHkgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJzIGZvciBzdGF0aXN0aWNzCisgICAgICAgICAgICAgICAgc0hkbGNSeEZyYW1lQ291bnQrKzsKKyAgICAgICAgICAgICAgICBzSGRsY1J4RnJhbWVCeXRlQ291bnQgKz0gc1NwaVR4UGF5bG9hZFNpemU7CisKKyAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBmb3IgdGhlIG5leHQgZnJhbWUKKyAgICAgICAgICAgICAgICB1bmVzY2FwZV9uZXh0X2J5dGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmY3MgPSBrSGRsY0NyY1Jlc2V0VmFsdWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGUgPT0gSERMQ19CWVRFX0VTQykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmVzY2FwZV9uZXh0X2J5dGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChoZGxjX2J5dGVfbmVlZHNfZXNjYXBlKGJ5dGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFNraXAgYWxsIG90aGVyIGNvbnRyb2wgY29kZXMuCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHVuZXNjYXBlX25leHRfYnl0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBieXRlID0gYnl0ZSBeIEhETENfRVNDQVBFX1hGT1JNOworICAgICAgICAgICAgICAgIHVuZXNjYXBlX25leHRfYnl0ZSA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmY3MgPSBoZGxjX2NyYzE2KGZjcywgYnl0ZSk7CisgICAgICAgICAgICBzU3BpVHhGcmFtZUJ1ZmZlcltIRUFERVJfTEVOICsgc1NwaVR4UGF5bG9hZFNpemUrK10gPSBieXRlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJwdWxsX2hkbGM6cmVhZCIpOworICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJwdWxsX2hkbGM6cmVhZDogZXJybm89JWQgKCVzKSIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldCA8IDAKKyAgICAgICAgPyByZXQKKyAgICAgICAgOiAwOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1BUks6IFJhdyBUcmFuc2ZlciBGdW5jdGlvbnMgKi8KKworc3RhdGljIGludCBwdXNoX3Jhdyh2b2lkKQoreworICAgIGludCByZXQgPSAwOworICAgIGNvbnN0IHVpbnQ4X3QqIHNwaVJ4RnJhbWVCdWZmZXIgPSBnZXRfcmVhbF9yeF9mcmFtZV9zdGFydCgpOworICAgIHN0YXRpYyB1aW50OF90IHJhd19mcmFtZV9idWZmZXJbTUFYX0ZSQU1FX1NJWkVdOworICAgIHN0YXRpYyB1aW50MTZfdCByYXdfZnJhbWVfbGVuOworICAgIHN0YXRpYyB1aW50MTZfdCByYXdfZnJhbWVfc2VudDsKKworICAgIGlmIChyYXdfZnJhbWVfbGVuID09IDApCisgICAgeworICAgICAgICBpZiAoc1NsYXZlRGlkUmVzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEluZGljYXRlcyBhbiBNQ1UgcmVzZXQuCisgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIGhlcmUgYmVjYXVzZQorICAgICAgICAgICAgLy8gcmF3IG1vZGUgZG9lc24ndCBoYXZlIGFueSB3YXkgdG8gc2lnbmFsCisgICAgICAgICAgICAvLyByZXNldHMgb3V0LW9mLWJhbmQuCisgICAgICAgICAgICBzU2xhdmVEaWRSZXNldCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNTcGlSeFBheWxvYWRTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVhZCB0aGUgZnJhbWUgaW50byByYXdfZnJhbWVfYnVmZmVyCisgICAgICAgICAgICBhc3NlcnQoc1NwaVJ4UGF5bG9hZFNpemUgPD0gc2l6ZW9mKHJhd19mcmFtZV9idWZmZXIpKTsKKyAgICAgICAgICAgIG1lbWNweShyYXdfZnJhbWVfYnVmZmVyLCAmc3BpUnhGcmFtZUJ1ZmZlcltIRUFERVJfTEVOXSwgc1NwaVJ4UGF5bG9hZFNpemUpOworICAgICAgICAgICAgcmF3X2ZyYW1lX2xlbiA9IHNTcGlSeFBheWxvYWRTaXplOworICAgICAgICAgICAgcmF3X2ZyYW1lX3NlbnQgPSAwOworICAgICAgICAgICAgc1NwaVJ4UGF5bG9hZFNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IChpbnQpd3JpdGUoCisgICAgICAgIHNIZGxjT3V0cHV0RmQsCisgICAgICAgIHJhd19mcmFtZV9idWZmZXIgKyByYXdfZnJhbWVfc2VudCwKKyAgICAgICAgcmF3X2ZyYW1lX2xlbiAgICAtIHJhd19mcmFtZV9zZW50CisgICAgKTsKKworICAgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigicHVzaF9yYXc6d3JpdGUiKTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAicHVzaF9yYXc6d3JpdGU6IGVycm5vPSVkICglcykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgcmF3X2ZyYW1lX3NlbnQgKz0gcmV0OworCisgICAgLy8gUmVzZXQgc3RhdGUgb25jZSB3ZSBoYXZlIHNlbnQgdGhlIGVudGlyZSBmcmFtZS4KKyAgICBpZiAocmF3X2ZyYW1lX2xlbiA9PSByYXdfZnJhbWVfc2VudCkKKyAgICB7CisgICAgICAgIC8vIEluY3JlbWVudCBjb3VudGVyIGZvciBzdGF0aXN0aWNzCisgICAgICAgIHNIZGxjVHhGcmFtZUNvdW50Kys7CisgICAgICAgIHNIZGxjVHhGcmFtZUJ5dGVDb3VudCArPSByYXdfZnJhbWVfbGVuOworCisgICAgICAgIHJhd19mcmFtZV9sZW4gPSByYXdfZnJhbWVfc2VudCA9IDA7CisgICAgfQorCisgICAgcmV0ID0gMDsKKworYmFpbDoKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHB1bGxfcmF3KHZvaWQpCit7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBpZiAoIXNTcGlUeElzUmVhZHkpCisgICAgeworICAgICAgICByZXQgPSAoaW50KXJlYWQoc0hkbGNJbnB1dEZkLCAmc1NwaVR4RnJhbWVCdWZmZXJbSEVBREVSX0xFTl0sIChzaXplX3Qpc01UVSk7CisKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoInB1bGxfcmF3OnJlYWQiKTsKKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgInB1bGxfcmF3OnJlYWQ6IGVycm5vPSVkICglcykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJldCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNTcGlUeFBheWxvYWRTaXplID0gKHVpbnQxNl90KXJldDsKKyAgICAgICAgICAgIHNTcGlUeElzUmVhZHkgPSB0cnVlOworCisgICAgICAgICAgICAvLyBJbmNyZW1lbnQgY291bnRlcnMgZm9yIHN0YXRpc3RpY3MKKyAgICAgICAgICAgIHNIZGxjUnhGcmFtZUNvdW50Kys7CisgICAgICAgICAgICBzSGRsY1J4RnJhbWVCeXRlQ291bnQgKz0gc1NwaVR4UGF5bG9hZFNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0IDwgMAorICAgICAgICA/IHJldAorICAgICAgICA6IDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogU2V0dXAgRnVuY3Rpb25zICovCisKK3N0YXRpYyBib29sIHVwZGF0ZV9zcGlfbW9kZShpbnQgeCkKK3sKKyAgICBzU3BpTW9kZSA9ICh1aW50OF90KXg7CisKKyAgICBpZiAoIChzU3BpRGV2RmQgPj0gMCkKKyAgICAgICYmIChpb2N0bChzU3BpRGV2RmQsIFNQSV9JT0NfV1JfTU9ERSwgJnNTcGlNb2RlKSA8IDApCisgICAgKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJpb2N0bChTUElfSU9DX1dSX01PREUpIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdXBkYXRlX3NwaV9zcGVlZChpbnQgeCkKK3sKKyAgICBzU3BpU3BlZWQgPSB4OworCisgICAgaWYgKCAoc1NwaURldkZkID49IDApCisgICAgICAmJiAoaW9jdGwoc1NwaURldkZkLCBTUElfSU9DX1dSX01BWF9TUEVFRF9IWiwgJnNTcGlTcGVlZCkgPCAwKQorICAgICkKKyAgICB7CisgICAgICAgIHBlcnJvcigiaW9jdGwoU1BJX0lPQ19XUl9NQVhfU1BFRURfSFopIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgYm9vbCBzZXR1cF9zcGlfZGV2KGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgaW50IGZkID0gLTE7CisgICAgY29uc3QgdWludDhfdCBzcGlfd29yZF9iaXRzID0gODsKKyAgICBpbnQgcmV0OworICAgIHNTcGlEZXZQYXRoID0gcGF0aDsKKworICAgIGZkID0gb3BlbihwYXRoLCBPX1JEV1IpOworICAgIGlmIChmZCA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoIm9wZW4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8vIFNldCB0aGUgU1BJIG1vZGUuCisgICAgcmV0ID0gaW9jdGwoZmQsIFNQSV9JT0NfV1JfTU9ERSwgJnNTcGlNb2RlKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiaW9jdGwoU1BJX0lPQ19XUl9NT0RFKSIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBTUEkgY2xvY2sgc3BlZWQuCisgICAgcmV0ID0gaW9jdGwoZmQsIFNQSV9JT0NfV1JfTUFYX1NQRUVEX0haLCAmc1NwaVNwZWVkKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiaW9jdGwoU1BJX0lPQ19XUl9NQVhfU1BFRURfSFopIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIFNQSSB3b3JkIHNpemUuCisgICAgcmV0ID0gaW9jdGwoZmQsIFNQSV9JT0NfV1JfQklUU19QRVJfV09SRCwgJnNwaV93b3JkX2JpdHMpOworICAgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJpb2N0bChTUElfSU9DX1dSX0JJVFNfUEVSX1dPUkQpIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvLyBMb2NrIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICBpZiAoZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKSA8IDApCisgICAgeworICAgICAgICBwZXJyb3IoImZsb2NrIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBzU3BpRGV2RmQgPSBmZDsKKyAgICBmZCA9IC0xOworCitiYWlsOgorICAgIGlmIChmZCA+PSAwKQorICAgIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgIH0KKyAgICByZXR1cm4gc1NwaURldkZkID49IDA7Cit9CisKK3N0YXRpYyBib29sIHNldHVwX3Jlc19ncGlvKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgaW50IHNldHVwX2ZkID0gLTE7CisgICAgY2hhciogZGlyX3BhdGggPSBOVUxMOworICAgIGNoYXIqIHZhbHVlX3BhdGggPSBOVUxMOworICAgIGludCBsZW47CisKKyAgICBzUmVzR3Bpb0RldlBhdGggPSBwYXRoOworCisgICAgbGVuID0gYXNwcmludGYoJmRpcl9wYXRoLCAiJXMvZGlyZWN0aW9uIiwgcGF0aCk7CisKKyAgICBpZiAobGVuIDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGxlbiA9IGFzcHJpbnRmKCZ2YWx1ZV9wYXRoLCAiJXMvdmFsdWUiLCBwYXRoKTsKKworICAgIGlmIChsZW4gPCAwKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJhc3ByaW50ZiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgc2V0dXBfZmQgPSBvcGVuKGRpcl9wYXRoLCBPX1dST05MWSk7CisKKyAgICBpZiAoc2V0dXBfZmQgPj0gMCkKKyAgICB7CisgICAgICAgIGlmICgtMSA9PSB3cml0ZShzZXR1cF9mZCwgImhpZ2hcbiIsIDUpKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoInNldF9yZXNfZGlyZWN0aW9uIik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzUmVzR3Bpb1ZhbHVlRmQgPSBvcGVuKHZhbHVlX3BhdGgsIE9fV1JPTkxZKTsKKworYmFpbDoKKworICAgIGlmIChzZXR1cF9mZCA+PSAwKQorICAgIHsKKyAgICAgICAgY2xvc2Uoc2V0dXBfZmQpOworICAgIH0KKworICAgIGlmIChkaXJfcGF0aCkKKyAgICB7CisgICAgICAgIGZyZWUoZGlyX3BhdGgpOworICAgIH0KKworICAgIGlmICh2YWx1ZV9wYXRoKQorICAgIHsKKyAgICAgICAgZnJlZSh2YWx1ZV9wYXRoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc1Jlc0dwaW9WYWx1ZUZkID49IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRyaWdnZXJfcmVzZXQodm9pZCkKK3sKKyAgICBpZiAoc1Jlc0dwaW9WYWx1ZUZkID49IDApCisgICAgeworICAgICAgICBjaGFyIHN0cltdID0geyAnMCcgKyBHUElPX1JFU19BU1NFUlRfU1RBVEUsICdcbicgfTsKKworICAgICAgICBsc2VlayhzUmVzR3Bpb1ZhbHVlRmQsIDAsIFNFRUtfU0VUKTsKKyAgICAgICAgaWYgKHdyaXRlKHNSZXNHcGlvVmFsdWVGZCwgc3RyLCBzaXplb2Yoc3RyKSkgPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAidHJpZ2dlcl9yZXNldCgpOiBlcnJvciBvbiB3cml0ZTogJWQgKCVzKSIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICB9CisKKyAgICAgICAgdXNsZWVwKDEwICogVVNFQ19QRVJfTVNFQyk7CisKKyAgICAgICAgLy8gU2V0IHRoZSBzdHJpbmcgdG8gc3dpdGNoIHRvIHRoZSBub3QtYXNzZXJ0ZWQgc3RhdGUuCisgICAgICAgIHN0clswXSA9ICcwJyArICFHUElPX1JFU19BU1NFUlRfU1RBVEU7CisKKyAgICAgICAgbHNlZWsoc1Jlc0dwaW9WYWx1ZUZkLCAwLCBTRUVLX1NFVCk7CisgICAgICAgIGlmICh3cml0ZShzUmVzR3Bpb1ZhbHVlRmQsIHN0ciwgc2l6ZW9mKHN0cikpID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgInRyaWdnZXJfcmVzZXQoKTogZXJyb3Igb24gd3JpdGU6ICVkICglcykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiVHJpZ2dlcmVkIGhhcmR3YXJlIHJlc2V0Iik7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzZXR1cF9pbnRfZ3Bpbyhjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGNoYXIqIGVkZ2VfcGF0aCA9IE5VTEw7CisgICAgY2hhciogZGlyX3BhdGggPSBOVUxMOworICAgIGNoYXIqIHZhbHVlX3BhdGggPSBOVUxMOworICAgIHNzaXplX3QgbGVuOworICAgIGludCBzZXR1cF9mZCA9IC0xOworCisgICAgc0ludEdwaW9WYWx1ZUZkID0gLTE7CisKKyAgICBzSW50R3Bpb0RldlBhdGggPSBwYXRoOworCisgICAgbGVuID0gYXNwcmludGYoJmRpcl9wYXRoLCAiJXMvZGlyZWN0aW9uIiwgcGF0aCk7CisKKyAgICBpZiAobGVuIDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGxlbiA9IGFzcHJpbnRmKCZlZGdlX3BhdGgsICIlcy9lZGdlIiwgcGF0aCk7CisKKyAgICBpZiAobGVuIDwgMCkKKyAgICB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGxlbiA9IGFzcHJpbnRmKCZ2YWx1ZV9wYXRoLCAiJXMvdmFsdWUiLCBwYXRoKTsKKworICAgIGlmIChsZW4gPCAwKQorICAgIHsKKyAgICAgICAgcGVycm9yKCJhc3ByaW50ZiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgc2V0dXBfZmQgPSBvcGVuKGRpcl9wYXRoLCBPX1dST05MWSk7CisKKyAgICBpZiAoc2V0dXBfZmQgPj0gMCkKKyAgICB7CisgICAgICAgIGxlbiA9IHdyaXRlKHNldHVwX2ZkLCAiaW4iLCAyKTsKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigid3JpdGUiKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGNsb3NlKHNldHVwX2ZkKTsKKyAgICB9CisKKyAgICBzZXR1cF9mZCA9IG9wZW4oZWRnZV9wYXRoLCBPX1dST05MWSk7CisKKyAgICBpZiAoc2V0dXBfZmQgPj0gMCkKKyAgICB7CisgICAgICAgIGxlbiA9IHdyaXRlKHNldHVwX2ZkLCAiZmFsbGluZyIsIDcpOworCisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoIndyaXRlIik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZShzZXR1cF9mZCk7CisKKyAgICAgICAgc2V0dXBfZmQgPSAtMTsKKyAgICB9CisKKyAgICBzSW50R3Bpb1ZhbHVlRmQgPSBvcGVuKHZhbHVlX3BhdGgsIE9fUkRPTkxZKTsKKworYmFpbDoKKworICAgIGlmIChzZXR1cF9mZCA+PSAwKQorICAgIHsKKyAgICAgICAgY2xvc2Uoc2V0dXBfZmQpOworICAgIH0KKworICAgIGlmIChlZGdlX3BhdGgpCisgICAgeworICAgICAgICBmcmVlKGVkZ2VfcGF0aCk7CisgICAgfQorCisgICAgaWYgKGRpcl9wYXRoKQorICAgIHsKKyAgICAgICAgZnJlZShkaXJfcGF0aCk7CisgICAgfQorCisgICAgaWYgKHZhbHVlX3BhdGgpCisgICAgeworICAgICAgICBmcmVlKHZhbHVlX3BhdGgpOworICAgIH0KKworICAgIHJldHVybiBzSW50R3Bpb1ZhbHVlRmQgPj0gMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNQVJLOiBIZWxwICovCisKK3N0YXRpYyB2b2lkIHByaW50X3ZlcnNpb24odm9pZCkKK3sKKyAgICBwcmludGYoInNwaS1oZGxjLWFkYXB0ZXIgIiBTUElfSERMQ19WRVJTSU9OICIgKCIgX19USU1FX18gIiAiIF9fREFURV9fICIpXG4iKTsKKyAgICBwcmludGYoIkNvcHlyaWdodCAoYykgMjAxNyBUaGUgT3BlblRocmVhZCBBdXRob3JzLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfaGVscCh2b2lkKQoreworICAgIHByaW50X3ZlcnNpb24oKTsKKyAgICBjb25zdCBjaGFyKiBoZWxwID0KKyAgICAiXG4iCisgICAgIlN5bnRheDpcbiIKKyAgICAiXG4iCisgICAgIiAgICBzcGktaGRsYyBbb3B0aW9uc10gPHNwaS1kZXZpY2UtcGF0aD5cbiIKKyAgICAiXG4iCisgICAgIk9wdGlvbnM6XG4iCisgICAgIlxuIgorICAgICIgICAgLS1zdGRpbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFVzZSBgc3RkaW5gIGFuZCBgc3Rkb3V0YCBmb3IgSERMQyBpbnB1dCBhbmRcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuIFVzZWZ1bCB3aGVuIGRpcmVjdGx5IHN0YXJ0ZWQgYnkgdGhlXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgdXNpbmcgaXQuXG4iCisjaWYgSEFWRV9PUEVOUFRZCisgICAgIiAgICAtLXB0eSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gQ3JlYXRlIGEgcHNldWRvdGVybWluYWwgZm9yIEhETEMgaW5wdXQgYW5kXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LiBUaGUgcGF0aCBvZiB0aGUgbmV3bHktY3JlYXRlZCBQVFlcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHdyaXR0ZW4gdG8gYHN0ZG91dGAsIGZvbGxvd2VkIGJ5IGFcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lLlxuIgorI2VuZGlmIC8vIEhBVkVfT1BFTlBUWQorICAgICIgICAgLS1yYXcgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIERvIG5vdCBlbmNvZGUvZGVjb2RlIHBhY2tldHMgdXNpbmcgSERMQy5cbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB3cml0ZSB3aG9sZSwgcmF3IGZyYW1lcyB0byB0aGVcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW5wdXQgYW5kIG91dHB1dCBGRHMuIFRoaXMgaXMgdXNlZnVsXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVtdWxhdGluZyBhIHNlcmlhbCBwb3J0LCBvciB3aGVuIGRhdGFncmFtLVxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIHNvY2tldHMgYXJlIHN1cHBsaWVkIGZvciBzdGRpbiBhbmRcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXRgICh3aGVuIHVzZWQgd2l0aCAtLXN0ZGlvKS5cbiIKKyAgICAiICAgIC0tbXR1PVtNVFVdIC4uLi4uLi4uLi4uLi4uLi4uLiBTcGVjaWZ5IHRoZSBNVFUuIEN1cnJlbnRseSBvbmx5IHVzZWQgaW4gcmF3IG1vZGUuXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBhbmQgbWF4aW11bSB2YWx1ZSBpcyAyMDQzLlxuIgorICAgICIgICAgLWkvLS1ncGlvLWludFs9Z3Bpby1wYXRoXSAuLi4uIFNwZWNpZnkgYSBwYXRoIHRvIHRoZSBMaW51eCBzeXNmcy1leHBvcnRlZFxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU8gZGlyZWN0b3J5IGZvciB0aGUgYEnMhU7MhVTMhWAgcGluLiBJZiBub3RcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGBzcGktaGRsY2Agd2lsbCBmYWxsIGJhY2sgdG9cbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsaW5nLCB3aGljaCBpcyBpbmVmZmljaWVudC5cbiIKKyAgICAiICAgIC1yLy0tZ3Bpby1yZXNldFs9Z3Bpby1wYXRoXSAuLiBTcGVjaWZ5IGEgcGF0aCB0byB0aGUgTGludXggc3lzZnMtZXhwb3J0ZWRcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPIGRpcmVjdG9yeSBmb3IgdGhlIGBSzIVFzIVTzIVgIHBpbi5cbiIKKyAgICAiICAgIC0tc3BpLW1vZGVbPW1vZGVdIC4uLi4uLi4uLi4uLiBTcGVjaWZ5IHRoZSBTUEkgbW9kZSB0byB1c2UgKDAtMykuXG4iCisgICAgIiAgICAtLXNwaS1zcGVlZFs9aGVydHpdIC4uLi4uLi4uLi4gU3BlY2lmeSB0aGUgU1BJIHNwZWVkIGluIGhlcnR6LlxuIgorICAgICIgICAgLS1zcGktY3MtZGVsYXlbPXVzZWNdIC4uLi4uLi4uIFNwZWNpZnkgdGhlIGRlbGF5IGFmdGVyIEPMhVPMhSBhc3NlcnRpb24sIGluIMK1c2VjXG4iCisgICAgIiAgICAtLXNwaS1hbGlnbi1hbGxvd2FuY2VbPW5dIC4uLi4gU3BlY2lmeSB0aGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIEZGIGJ5dGVzIHRvXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcCBmcm9tIHN0YXJ0IG9mIE1JU08gZnJhbWUuIE1heCB2YWx1ZSBpcyAzLlxuIgorICAgICIgICAgLS1zcGktc21hbGwtcGFja2V0PVtuXSAuLi4uLi4uIFNwZWNpZnkgdGhlIHNtYWxsZXN0IHBhY2tldCB3ZSBjYW4gcmVjZWl2ZVxuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uKGxhcmdlciBwYWNrZXRzIHdpbGxcbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlIHR3byB0cmFuc2FjdGlvbnMpLiBEZWZhdWx0IHZhbHVlIGlzIDMyLlxuIgorICAgICIgICAgLXYvLS12ZXJib3NlIC4uLi4uLi4uLi4uLi4uLi4uIEluY3JlYXNlIGRlYnVnIHZlcmJvc2l0eS4gKFJlcGVhdGFibGUpXG4iCisgICAgIiAgICAtaC8tPy8tLWhlbHAgLi4uLi4uLi4uLi4uLi4uLi4gUHJpbnQgb3V0IHVzYWdlIGluZm9ybWF0aW9uIGFuZCBleGl0LlxuIgorICAgICJcbiI7CisKKyAgICBwcmludGYoIiVzIiwgaGVscCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFSSzogTWFpbiBMb29wICovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGkgPSAwOworICAgIGNoYXIgcHJvZ1szMl07CisgICAgc3RhdGljIGZkX3NldCByZWFkX3NldDsKKyAgICBzdGF0aWMgZmRfc2V0IHdyaXRlX3NldDsKKyAgICBzdGF0aWMgZmRfc2V0IGVycm9yX3NldDsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgIGludCBtYXhfZmQgPSAtMTsKKyAgICBib29sIGRpZF9wcmludF9yYXRlX2xpbWl0X2xvZyA9IGZhbHNlOworCisjaWYgQVVUT19QUklOVF9CQUNLVFJBQ0UKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNpZ2FjdDsKKyNlbmRpZiAvLyBpZiBBVVRPX1BSSU5UX0JBQ0tUUkFDRQorCisgICAgZW51bSB7CisgICAgICAgIEFSR19TUElfTU9ERSA9IDEwMDEsCisgICAgICAgIEFSR19TUElfU1BFRUQgPSAxMDAyLAorICAgICAgICBBUkdfVkVSQk9TRSA9IDEwMDMsCisgICAgICAgIEFSR19TUElfQ1NfREVMQVkgPSAxMDA0LAorICAgICAgICBBUkdfU1BJX0FMSUdOX0FMTE9XQU5DRSA9IDEwMDUsCisgICAgICAgIEFSR19SQVcgPSAxMDA2LAorICAgICAgICBBUkdfTVRVID0gMTAwNywKKyAgICAgICAgQVJHX1NQSV9TTUFMTF9QQUNLRVQgPSAxMDA4LAorICAgIH07CisKKyAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgIHsgInN0ZGlvIiwgICAgICBub19hcmd1bWVudCwgICAgICAgJnNNb2RlLCBNT0RFX1NURElPICAgIH0sCisgICAgICAgIHsgInB0eSIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgJnNNb2RlLCBNT0RFX1BUWSAgICAgIH0sCisgICAgICAgIHsgImdwaW8taW50IiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgICAnaScgICAgICAgICAgIH0sCisgICAgICAgIHsgImdwaW8tcmVzIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgICAncicgICAgICAgICAgIH0sCisgICAgICAgIHsgInZlcmJvc2UiLCAgICBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgICBBUkdfVkVSQk9TRSAgIH0sCisgICAgICAgIHsgInZlcnNpb24iLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgICAnVicgICAgICAgICAgIH0sCisgICAgICAgIHsgInJhdyIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgICBBUkdfUkFXICAgICAgIH0sCisgICAgICAgIHsgIm10dSIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgICBBUkdfTVRVICAgICAgIH0sCisgICAgICAgIHsgImhlbHAiLCAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgICAnaCcgICAgICAgICAgIH0sCisgICAgICAgIHsgInNwaS1tb2RlIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgICBBUkdfU1BJX01PREUgIH0sCisgICAgICAgIHsgInNwaS1zcGVlZCIsICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgICBBUkdfU1BJX1NQRUVEIH0sCisgICAgICAgIHsgInNwaS1jcy1kZWxheSIscmVxdWlyZWRfYXJndW1lbnQsTlVMTCwgICBBUkdfU1BJX0NTX0RFTEFZIH0sCisgICAgICAgIHsgInNwaS1hbGlnbi1hbGxvd2FuY2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQVJHX1NQSV9BTElHTl9BTExPV0FOQ0UgfSwKKyAgICAgICAgeyAic3BpLXNtYWxsLXBhY2tldCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBBUkdfU1BJX1NNQUxMX1BBQ0tFVCB9LAorICAgICAgICB7IE5VTEwsICAgICAgICAgMCwgICAgICAgICAgICAgICAgIE5VTEwsICAgMCAgICAgICAgICAgICB9LAorICAgIH07CisKKyAgICBzdHJuY3B5KHByb2csIGFyZ3ZbMF0sIHNpemVvZihwcm9nKSAtIDEpOworICAgIHByb2dbc2l6ZW9mKHByb2cpIC0gMV0gPSAwOworCisgICAgaWYgKGFyZ2MgPCAyKQorICAgIHsKKyAgICAgICAgcHJpbnRfaGVscCgpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBJTklUSUFMSVpBVElPTgorCisgICAgc1ByZXZpb3VzSGFuZGxlckZvclNJR0lOVCA9IHNpZ25hbChTSUdJTlQsICZzaWduYWxfU0lHSU5UKTsKKyAgICBzUHJldmlvdXNIYW5kbGVyRm9yU0lHVEVSTSA9IHNpZ25hbChTSUdURVJNLCAmc2lnbmFsX1NJR1RFUk0pOworICAgIHNpZ25hbChTSUdIVVAsICZzaWduYWxfU0lHSFVQKTsKKyAgICBzaWduYWwoU0lHVVNSMSwgJnNpZ25hbF9kdW1wc3RhdHMpOworICAgIHNpZ25hbChTSUdVU1IyLCAmc2lnbmFsX2NsZWFyc3RhdHMpOworCisjaWYgQVVUT19QUklOVF9CQUNLVFJBQ0UKKyAgICBzaWdhY3Quc2Ffc2lnYWN0aW9uID0gJnNpZ25hbF9jcml0aWNhbDsKKyAgICBzaWdhY3Quc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTyB8IFNBX05PQ0xEV0FJVDsKKworICAgIHNpZ2FjdGlvbihTSUdTRUdWLCAmc2lnYWN0LCAoc3RydWN0IHNpZ2FjdGlvbiAqKU5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdCVVMsICZzaWdhY3QsIChzdHJ1Y3Qgc2lnYWN0aW9uICopTlVMTCk7CisgICAgc2lnYWN0aW9uKFNJR0lMTCwgJnNpZ2FjdCwgKHN0cnVjdCBzaWdhY3Rpb24gKilOVUxMKTsKKyAgICBzaWdhY3Rpb24oU0lHQUJSVCwgJnNpZ2FjdCwgKHN0cnVjdCBzaWdhY3Rpb24gKilOVUxMKTsKKyNlbmRpZiAvLyBpZiBBVVRPX1BSSU5UX0JBQ0tUUkFDRQorCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gQVJHVU1FTlQgUEFSU0lORworCisgICAgb3BlbmxvZyhiYXNlbmFtZShwcm9nKSwgTE9HX1BFUlJPUiB8IExPR19QSUQgfCBMT0dfQ09OUywgTE9HX0RBRU1PTik7CisKKyAgICBzZXRsb2dtYXNrKExPR19VUFRPKHNWZXJib3NlKSk7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIGludCBjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImk6cjp2Vmg/Iiwgb3B0aW9ucywgTlVMTCk7CisgICAgICAgIGlmIChjID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIGlmICghc2V0dXBfaW50X2dwaW8ob3B0YXJnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiVW5hYmxlIHRvIHNldHVwIElOVCBHUElPIFwiJXNcIiwgJXMiLCBvcHRhcmcsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVJHX1NQSV9BTElHTl9BTExPV0FOQ0U6CisgICAgICAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICAgICAgIHNTcGlSeEFsaWduQWxsb3dhbmNlID0gYXRvaShvcHRhcmcpOworCisgICAgICAgICAgICAgICAgaWYgKGVycm5vICE9IDAgfHwgKHNTcGlSeEFsaWduQWxsb3dhbmNlIDwgMCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIkludmFsaWQgU1BJIFJYIEFsaWduIEFsbG93YW5jZSBcIiVzXCIiLCBvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHNTcGlSeEFsaWduQWxsb3dhbmNlID4gU1BJX1JYX0FMSUdOX0FMTE9XQU5DRV9NQVgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX1dBUk5JTkcsICJSZWR1Y2luZyBTUEkgUlggQWxpZ24gQWxsb3dhbmNlIGZyb20gJXMgdG8gJWQiLCBvcHRhcmcsIFNQSV9SWF9BTElHTl9BTExPV0FOQ0VfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgc1NwaVJ4QWxpZ25BbGxvd2FuY2UgPSBTUElfUlhfQUxJR05fQUxMT1dBTkNFX01BWDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBUkdfU1BJX01PREU6CisgICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVfc3BpX21vZGUoYXRvaShvcHRhcmcpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiVW5hYmxlIHRvIHNldCBTUEkgbW9kZSB0byBcIiVzXCIsICVzIiwgb3B0YXJnLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFSR19TUElfU1BFRUQ6CisgICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVfc3BpX3NwZWVkKGF0b2kob3B0YXJnKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlVuYWJsZSB0byBzZXQgU1BJIHNwZWVkIHRvIFwiJXNcIiwgJXMiLCBvcHRhcmcsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVJHX1NQSV9TTUFMTF9QQUNLRVQ6CisgICAgICAgICAgICAgICAgc1NwaVNtYWxsUGFja2V0U2l6ZSA9IGF0b2kob3B0YXJnKTsKKyAgICAgICAgICAgICAgICBpZiAoc1NwaVNtYWxsUGFja2V0U2l6ZSA+IE1BWF9GUkFNRV9TSVpFIC0gSEVBREVSX0xFTikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfV0FSTklORywgIlJlZHVjaW5nIFNQSSBzbWFsbC1wYWNrZXQgc2l6ZSBmcm9tICVzIHRvICVkIiwgb3B0YXJnLCBNQVhfRlJBTUVfU0laRSAtIEhFQURFUl9MRU4pOworICAgICAgICAgICAgICAgICAgICBzU3BpU21hbGxQYWNrZXRTaXplID0gTUFYX0ZSQU1FX1NJWkUgLSBIRUFERVJfTEVOOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc1NwaVNtYWxsUGFja2V0U2l6ZSA8IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlRoZSBhcmd1bWVudCB0byAtLXNwaS1zbWFsbC1wYWNrZXQgY2Fubm90IGJlIG5lZ2F0aXZlLiAoR2l2ZW46IFwiJXNcIikiLCBvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiU1BJIHNtYWxsLXBhY2tldCBzaXplIHNldCB0byAlZCBieXRlcy4iLCBzU3BpU21hbGxQYWNrZXRTaXplKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBUkdfU1BJX0NTX0RFTEFZOgorICAgICAgICAgICAgICAgIHNTcGlDc0RlbGF5ID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgICAgIGlmIChzU3BpQ3NEZWxheSA8IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIk5lZ2F0aXZlIHZhbHVlcyAoJWQpIGZvciAtLXNwaS1jcy1kZWxheSBhcmUgaW52YWxpZC4iLCBzU3BpQ3NEZWxheSk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJTUEkgQ1MgRGVsYXkgc2V0IHRvICVkIHVzZWMiLCBzU3BpQ3NEZWxheSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVJHX1JBVzoKKyAgICAgICAgICAgICAgICBzVXNlUmF3RnJhbWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIkhETEMgZW5jb2RpbmcvZGVjb2RpbmcgZGlzYWJsZWQuIFdpbGwgdXNlIHJhdyBmcmFtZXMgZm9yIGlucHV0L291dHB1dC4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBUkdfTVRVOgorICAgICAgICAgICAgICAgIHNNVFUgPSBhdG9pKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKHNNVFUgPiBNQVhfRlJBTUVfU0laRSAtIEhFQURFUl9MRU4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlNwZWNpZmllZCBNVFUgb2YgJWQgaXMgdG9vIGxhcmdlLCBtYXhpbXVtIGlzICVkIGJ5dGVzLiIsIHNNVFUsIE1BWF9GUkFNRV9TSVpFIC0gSEVBREVSX0xFTik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNNVFUgPCAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJTcGVjaWZpZWQgTVRVIG9mICVkIGlzIHRvbyBzbWFsbCwgbWluaW11bSBpcyAxIGJ5dGUuIiwgc01UVSk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJNVFUgc2V0IHRvICVkIGJ5dGVzIiwgc01UVSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgIGlmICghc2V0dXBfcmVzX2dwaW8ob3B0YXJnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiVW5hYmxlIHRvIHNldHVwIFJFUyBHUElPIFwiJXNcIiwgJXMiLCBvcHRhcmcsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgY2FzZSBBUkdfVkVSQk9TRToKKyAgICAgICAgICAgICAgICBpZiAoc1ZlcmJvc2UgPCBMT0dfREVCVUcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAob3B0YXJnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzVmVyYm9zZSArPSBhdG9pKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzVmVyYm9zZSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNldGxvZ21hc2soc2V0bG9nbWFzaygwKSB8IExPR19VUFRPKHNWZXJib3NlKSk7CisgICAgICAgICAgICAgICAgICAgIHN5c2xvZyhzVmVyYm9zZSwgIlZlcmJvc2l0eSBzZXQgdG8gbGV2ZWwgJWQiLCBzVmVyYm9zZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgICAgICBwcmludF92ZXJzaW9uKCk7CisgICAgICAgICAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgICAgIHByaW50X2hlbHAoKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzeXNsb2coTE9HX05PVElDRSwic3BpLWhkbGMtYWRhcHRlciAiIFNQSV9IRExDX1ZFUlNJT04gIiAoIiBfX1RJTUVfXyAiICIgX19EQVRFX18gIilcbiIpOworCisgICAgYXJnYyAtPSBvcHRpbmQ7CisgICAgYXJndiArPSBvcHRpbmQ7CisKKyAgICBpZiAoYXJnYyA+PSAxKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXR1cF9zcGlfZGV2KGFyZ3ZbMF0pKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFyIHNwaV9wYXRoWzY0XTsKKworICAgICAgICAgICAgc3RybmNweShzcGlfcGF0aCwgYXJndlswXSwgc2l6ZW9mKHNwaV9wYXRoKSAtIDEpOworICAgICAgICAgICAgc3BpX3BhdGhbc2l6ZW9mKHNwaV9wYXRoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiJXM6IFVuYWJsZSB0byBvcGVuIFNQSSBkZXZpY2UgXCIlc1wiLCAlcyIsIHByb2csIHNwaV9wYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIGFyZ2MtLTsKKyAgICAgICAgYXJndisrOworICAgIH0KKworICAgIGlmIChhcmdjID49IDEpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbmV4cGVjdGVkIGFyZ3VtZW50IFwiJXNcIlxuIiwgcHJvZywgYXJndlswXSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBpZiAoc1NwaURldlBhdGggPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IE1pc3NpbmcgU1BJIGRldmljZSBwYXRoXG4iLCBwcm9nKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGlmIChzTW9kZSA9PSBNT0RFX1NURElPKQorICAgIHsKKyAgICAgICAgc0hkbGNJbnB1dEZkID0gZHVwKFNURElOX0ZJTEVOTyk7CisgICAgICAgIHNIZGxjT3V0cHV0RmQgPSBkdXAoU1RET1VUX0ZJTEVOTyk7CisgICAgICAgIGNsb3NlKFNURElOX0ZJTEVOTyk7CisgICAgICAgIGNsb3NlKFNURE9VVF9GSUxFTk8pOworCisgICAgfQorICAgIGVsc2UgaWYgKHNNb2RlID09IE1PREVfUFRZKQorICAgIHsKKyNpZiBIQVZFX09QRU5QVFkKKworICAgICAgICBzdGF0aWMgaW50IHB0eV9zbGF2ZV9mZCA9IC0xOworICAgICAgICBjaGFyIHB0eV9uYW1lWzEwMjRdOworICAgICAgICBzUmV0ID0gb3BlbnB0eSgmc0hkbGNJbnB1dEZkLCAmcHR5X3NsYXZlX2ZkLCBwdHlfbmFtZSwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgaWYgKHNSZXQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcGVycm9yKCJvcGVucHR5Iik7CisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICBzSGRsY091dHB1dEZkID0gZHVwKHNIZGxjSW5wdXRGZCk7CisKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgcHR5X25hbWUpOworCisgICAgICAgIGNsb3NlKFNURE9VVF9GSUxFTk8pOworCisjZWxzZSAvLyBpZiBIQVZFX09QRU5QVFkKKworICAgICAgICBzeXNsb2coTE9HX0VSUiwgIk5vdCBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGAtLXB0eWAuIik7CisgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgIGdvdG8gYmFpbDsKKworI2VuZGlmIC8vIGVsc2UgSEFWRV9PUEVOUFRZCisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc1JldCA9IEVYSVRfRkFJTFVSRTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGlmICgoc0hkbGNJbnB1dEZkIDwgMCkgfHwgKHNIZGxjT3V0cHV0RmQgPCAwKSkKKyAgICB7CisgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvLyBTZXQgdXAgc0hkbGNJbnB1dEZkIGZvciBub24tYmxvY2tpbmcgSS9PCisgICAgaWYgKC0xID09IChpID0gZmNudGwoc0hkbGNJbnB1dEZkLCBGX0dFVEZMLCAwKSkpCisgICAgeworICAgICAgICBpID0gMDsKKyAgICB9CisgICAgSUdOT1JFX1JFVFVSTl9WQUxVRShmY250bChzSGRsY0lucHV0RmQsIEZfU0VURkwsIGkgfCBPX05PTkJMT0NLKSk7CisKKyAgICAvLyBTaW5jZSB0aGVyZSBhcmUgc28gZmV3IGZpbGUgZGVzY3JpcHRvcnMgaW4KKyAgICAvLyB0aGlzIHByb2dyYW0sIHdlIGNhbGN1bGF0ZSBgbWF4X2ZkYCBvbmNlCisgICAgLy8gaW5zdGVhZCBvZiB0cnlpbmcgdG8gb3B0aW1pemUgaXRzIHZhbHVlCisgICAgLy8gYXQgZXZlcnkgaXRlcmF0aW9uLgorICAgIG1heF9mZCA9IHNIZGxjSW5wdXRGZDsKKworICAgIGlmIChtYXhfZmQgPCBzSGRsY091dHB1dEZkKQorICAgIHsKKyAgICAgICAgbWF4X2ZkID0gc0hkbGNPdXRwdXRGZDsKKyAgICB9CisKKyAgICBpZiAobWF4X2ZkIDwgc0ludEdwaW9WYWx1ZUZkKQorICAgIHsKKyAgICAgICAgbWF4X2ZkID0gc0ludEdwaW9WYWx1ZUZkOworICAgIH0KKworICAgIGlmIChzSW50R3Bpb1ZhbHVlRmQgPCAwKQorICAgIHsKKyAgICAgICAgc3lzbG9nKExPR19XQVJOSU5HLCAiSW50ZXJydXB0IHBpbiB3YXMgbm90IHNldCwgbXVzdCBwb2xsIFNQSS4gUGVyZm9ybWFuY2Ugd2lsbCBzdWZmZXIuIik7CisgICAgfQorCisgICAgdHJpZ2dlcl9yZXNldCgpOworCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gTUFJTiBMT09QCisKKyAgICB3aGlsZSAoc1JldCA9PSAwKQorICAgIHsKKyAgICAgICAgaW50IHRpbWVvdXRfbXMgPSBNU0VDX1BFUl9TRUMgKiA2MCAqIDYwICogMjQ7IC8vIDI0IGhvdXJzCisKKyAgICAgICAgRkRfWkVSTygmcmVhZF9zZXQpOworICAgICAgICBGRF9aRVJPKCZ3cml0ZV9zZXQpOworICAgICAgICBGRF9aRVJPKCZlcnJvcl9zZXQpOworCisgICAgICAgIGlmICghc1NwaVR4SXNSZWFkeSkKKyAgICAgICAgeworICAgICAgICAgICAgRkRfU0VUKHNIZGxjSW5wdXRGZCwgJnJlYWRfc2V0KTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBkYXRhIHRvIHNlbmQgdG8gdGhlIHNsYXZlLgorICAgICAgICAgICAgdGltZW91dF9tcyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc1NwaVJ4UGF5bG9hZFNpemUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBkYXRhIHRoYXQgd2UgYXJlIHdhaXRpbmcgdG8gc2VuZCBvdXQKKyAgICAgICAgICAgIC8vIG9mIHRoZSBIRExDIGRlc2NyaXB0b3IsIHNvIHdlIG5lZWQgdG8gd2FpdAorICAgICAgICAgICAgLy8gZm9yIHRoYXQgdG8gY2xlYXIgb3V0IGJlZm9yZSB3ZSBjYW4gZG8gYW55dGhpbmcKKyAgICAgICAgICAgIC8vIGVsc2UuCisgICAgICAgICAgICBGRF9TRVQoc0hkbGNPdXRwdXRGZCwgJndyaXRlX3NldCk7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzSW50R3Bpb1ZhbHVlRmQgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoZWNrX2FuZF9jbGVhcl9pbnRlcnJ1cHQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgcGluIGlzIGFzc2VydGVkLAorICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdGltZW91dCB0byBiZSAwLgorICAgICAgICAgICAgICAgIHRpbWVvdXRfbXMgPSAwOworCisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19ERUJVRywgIkludGVycnVwdC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaW50ZXJydXB0IHBpbiB3YXMgbm90IGFzc2VydGVkLAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIHdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQgcGluIHRvCisgICAgICAgICAgICAgICAgLy8gYmUgYXNzZXJ0ZWQgYnkgYWRkaW5nIGl0IHRvIHRoZSBlcnJvcgorICAgICAgICAgICAgICAgIC8vIHNldC4KKyAgICAgICAgICAgICAgICBGRF9TRVQoc0ludEdwaW9WYWx1ZUZkLCAmZXJyb3Jfc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRpbWVvdXRfbXMgPiBTUElfUE9MTF9QRVJJT0RfTVNFQykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRvbid0IGhhdmUgYW4gaW50ZXJydXB0LCBzbworICAgICAgICAgICAgLy8gd2UgcmV2ZXJ0IHRvIFNQSSBwb2xsaW5nLgorICAgICAgICAgICAgdGltZW91dF9tcyA9IFNQSV9QT0xMX1BFUklPRF9NU0VDOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNEdW1wU3RhdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRpbWVvdXRfbXMgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNTcGlUeFJlZnVzZWRDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgYXJlIGJlaW5nIHJhdGUtbGltaXRlZCBieSB0aGUgc2xhdmUuIFRoaXMgaXMKKyAgICAgICAgICAgIC8vIGZhaXJseSBub3JtYWwgYmVoYXZpb3IuIFdlIHBvbGwgYmVjYXVzZSB3ZQorICAgICAgICAgICAgLy8gd29uJ3QgZ2V0IGFuIGludGVycnVwdCB1bmxlc3MgdGhlIHNsYXZlIGhhcHBlbnMKKyAgICAgICAgICAgIC8vIHRvIGJlIHRyeWluZyB0byBzZW5kIHVzIHNvbWV0aGluZy4KKyAgICAgICAgICAgIGlmICh0aW1lb3V0X21zIDwgU1BJX1BPTExfUEVSSU9EX01TRUMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGltZW91dF9tcyA9IFNQSV9QT0xMX1BFUklPRF9NU0VDOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNTcGlUeElzUmVhZHkKKyAgICAgICAgICAgICAgJiYgIWRpZF9wcmludF9yYXRlX2xpbWl0X2xvZworICAgICAgICAgICAgICAmJiAoc1NwaVR4UmVmdXNlZENvdW50ID4gMSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHByaW50aW5nIG91dCB0aGlzIG1lc3NhZ2Ugb3ZlciBhbmQgb3ZlciwKKyAgICAgICAgICAgICAgICAvLyB3ZSBvbmx5IHByaW50IGl0IG91dCBvbmNlIHRoZSByZWZ1c2VkIGNvdW50IGlzIGF0CisgICAgICAgICAgICAgICAgLy8gdHdvIG9yIGhpZ2hlciB3aGVuIHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIHRvCisgICAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgc2xhdmUuIEFuZCB0aGVuLCB3ZSBvbmx5IHByaW50IGl0IG9uY2UuCisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLCAiU2xhdmUgaXMgcmF0ZSBsaW1pdGluZyB0cmFuc2FjdGlvbnMiKTsKKworICAgICAgICAgICAgICAgIGRpZF9wcmludF9yYXRlX2xpbWl0X2xvZyA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzU3BpVHhSZWZ1c2VkQ291bnQgPT0gMzApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVWEtb2guIFRoZSBzbGF2ZSBoYXNuJ3QgZ2l2ZW4gdXMgYSBjaGFuY2UgdG8gc2VuZAorICAgICAgICAgICAgICAgIC8vIGl0IGFueXRoaW5nIGZvciBvdmVyIHRoaXJ0eSBmcmFtZXMuIElmIHRoaXMgZXZlcgorICAgICAgICAgICAgICAgIC8vIGhhcHBlbnMsIHByaW50IG91dCBhIHdhcm5pbmcgdG8gdGhlIGxvZ3MuCisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19XQVJOSU5HLCAiU2xhdmUgc2VlbXMgc3R1Y2suIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzU3BpVHhSZWZ1c2VkQ291bnQgPT0gMTAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERvdWJsZSB1YS1vaC4gVGhlIHNsYXZlIGhhc24ndCBnaXZlbiB1cyBhIGNoYW5jZQorICAgICAgICAgICAgICAgIC8vIHRvIHNlbmQgaXQgYW55dGhpbmcgZm9yIG92ZXIgYSBodW5kcmVkIGZyYW1lcy4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgdGhhdCB0aGUgc2xhdmUgaGFzCisgICAgICAgICAgICAgICAgLy8gbG9ja2VkIHVwIG9yIGdvdHRlbiBpbnRvIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUuCisgICAgICAgICAgICAgICAgLy8gSXQgaXMgbm90IHNwaS1oZGxjLWFkYXB0ZXIncyBqb2IgdG8gaWRlbnRpZnkgYW5kCisgICAgICAgICAgICAgICAgLy8gcmVzZXQgbWlzYmVoYXZpbmcgZGV2aWNlcyAodGhhdCBpcyBoYW5kbGVkIGF0IGEKKyAgICAgICAgICAgICAgICAvLyBoaWdoZXIgbGV2ZWwpLCBidXQgd2UgZ28gYWhlYWQgYW5kIGxvZyB0aGUgY29uZGl0aW9uCisgICAgICAgICAgICAgICAgLy8gZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIlNsYXZlIHNlZW1zIFJFQUxMWSBzdHVjay4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZF9wcmludF9yYXRlX2xpbWl0X2xvZyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0aW1lb3V0IHZhbHVlLgorICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IHRpbWVvdXRfbXMgLyBNU0VDX1BFUl9TRUM7CisgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9ICh0aW1lb3V0X21zICUgTVNFQ19QRVJfU0VDKSAqIFVTRUNfUEVSX01TRUM7CisKKyAgICAgICAgLy8gV2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbi4KKyAgICAgICAgSUdOT1JFX1JFVFVSTl9WQUxVRShzZWxlY3QobWF4X2ZkICsgMSwgJnJlYWRfc2V0LCAmd3JpdGVfc2V0LCAmZXJyb3Jfc2V0LCAmdGltZW91dCkpOworCisgICAgICAgIGlmIChzRHVtcFN0YXRzIHx8IHNSZXQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc0R1bXBTdGF0cyA9IGZhbHNlOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzU2xhdmVSZXNldENvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNTbGF2ZVJlc2V0Q291bnQpOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzU3BpRnJhbWVDb3VudD0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzU3BpRnJhbWVDb3VudCk7CisgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIklORk86IHNTcGlWYWxpZEZyYW1lQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc1NwaVZhbGlkRnJhbWVDb3VudCk7CisgICAgICAgICAgICBzeXNsb2coTE9HX05PVElDRSwgIklORk86IHNTcGlEdXBsZXhGcmFtZUNvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNTcGlEdXBsZXhGcmFtZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc1NwaVVucmVzcG9uc2l2ZUZyYW1lQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc1NwaVVucmVzcG9uc2l2ZUZyYW1lQ291bnQpOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzU3BpR2FyYmFnZUZyYW1lQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc1NwaUdhcmJhZ2VGcmFtZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc0hkbGNUeEZyYW1lQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc0hkbGNUeEZyYW1lQ291bnQpOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzSGRsY1R4RnJhbWVCeXRlQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc0hkbGNUeEZyYW1lQnl0ZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc0hkbGNSeEZyYW1lQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc0hkbGNSeEZyYW1lQ291bnQpOworICAgICAgICAgICAgc3lzbG9nKExPR19OT1RJQ0UsICJJTkZPOiBzSGRsY1J4RnJhbWVCeXRlQ291bnQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc0hkbGNSeEZyYW1lQnl0ZUNvdW50KTsKKyAgICAgICAgICAgIHN5c2xvZyhMT0dfTk9USUNFLCAiSU5GTzogc0hkbGNSeEJhZENyY0NvdW50PSVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXNIZGxjUnhCYWRDcmNDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgc2VyaWFsIGlucHV0LgorICAgICAgICBpZiAoRkRfSVNTRVQoc0hkbGNJbnB1dEZkLCAmcmVhZF9zZXQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZWFkIGluIHRoZSBkYXRhLgorICAgICAgICAgICAgaWYgKChzVXNlUmF3RnJhbWVzID8gcHVsbF9yYXcoKSA6IHB1bGxfaGRsYygpKSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc1JldCA9IEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBzZXJpYWwgb3V0cHV0LgorICAgICAgICBpZiAoRkRfSVNTRVQoc0hkbGNPdXRwdXRGZCwgJndyaXRlX3NldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdyaXRlIG91dCB0aGUgZGF0YS4KKyAgICAgICAgICAgIGlmICgoc1VzZVJhd0ZyYW1lcyA/IHB1c2hfcmF3KCkgOiBwdXNoX2hkbGMoKSkgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VydmljZSB0aGUgU1BJIHBvcnQgaWYgd2UgY2FuIHJlY2VpdmUKKyAgICAgICAgLy8gYSBwYWNrZXQgb3Igd2UgaGF2ZSBhIHBhY2tldCB0byBiZSBzZW50LgorICAgICAgICBpZiAoIChzU3BpUnhQYXlsb2FkU2l6ZSA9PSAwKQorICAgICAgICAgICYmIChzU3BpVHhJc1JlYWR5IHx8IGNoZWNrX2FuZF9jbGVhcl9pbnRlcnJ1cHQoKSkKKyAgICAgICAgKSB7CisgICAgICAgICAgICAvLyBXZSBndWFyZCB0aGlzIHdpdGggdGhlIGFib3ZlIGNoZWNrIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8gb3ZlcndyaXRlIGFueSBwcmV2aW91c2x5IHJlY2VpdmVkIChidXQgbm90CisgICAgICAgICAgICAvLyB5ZXQgcHVzaGVkIG91dCkgZnJhbWVzLgorICAgICAgICAgICAgaWYgKHB1c2hfcHVsbF9zcGkoKSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc1JldCA9IEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU0hVVERPV04KKworYmFpbDoKKyAgICBzeXNsb2coTE9HX05PVElDRSwgIlNodXRkb3duLiAoc1JldCA9ICVkKSIsIHNSZXQpOworCisgICAgaWYgKHNSZXQgPT0gRVhJVF9RVUlUKQorICAgIHsKKyAgICAgICAgc1JldCA9IEVYSVRfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZSBpZiAoc1JldCA9PSAtMSkKKyAgICB7CisgICAgICAgIHNSZXQgPSBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIHNSZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy93aW5kb3dzL1RocmVhZEV0dy5yZWcgYi90b29scy93aW5kb3dzL1RocmVhZEV0dy5yZWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzODA0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3dpbmRvd3MvVGhyZWFkRXR3LnJlZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy93aW5kb3dzL2FybS9vdGluc3RhbGwuZXhlIGIvdG9vbHMvd2luZG93cy9hcm0vb3RpbnN0YWxsLmV4ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2I0OThhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvd2luZG93cy9hcm0vb3RpbnN0YWxsLmV4ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy93aW5kb3dzL2luc3RhbGxfY2MyNTM4LmNtZCBiL3Rvb2xzL3dpbmRvd3MvaW5zdGFsbF9jYzI1MzguY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzlmNmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy93aW5kb3dzL2luc3RhbGxfY2MyNTM4LmNtZApAQCAtMCwwICsxLDMwIEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK2RldmNvbiB1cGRhdGUgZnRkaWJ1cy5pbmYgIlVTQlxWSURfMDQwMyZQSURfQTZEMSoiCitkZXZjb24gdXBkYXRlIGZ0ZGlwb3J0LmluZiBGVERJQlVTXFZJRF8wNDAzK1BJRF9BNkQxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy9pbnN0YWxsX290bHdmLmNtZCBiL3Rvb2xzL3dpbmRvd3MvaW5zdGFsbF9vdGx3Zi5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwN2M5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3dpbmRvd3MvaW5zdGFsbF9vdGx3Zi5jbWQKQEAgLTAsMCArMSw0MiBAQAorUkVNCitSRU0gIENvcHlyaWdodCAoYykgMjAxNiwgVGhlIE9wZW5UaHJlYWQgQXV0aG9ycy4KK1JFTSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JFTQorUkVNICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK1JFTSAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CitSRU0gIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitSRU0gICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JFTSAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorUkVNICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorUkVNICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUKK1JFTSAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKK1JFTSAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitSRU0KK1JFTSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitSRU0gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK1JFTSAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK1JFTSAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorUkVNICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitSRU0gIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitSRU0gIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworUkVNICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorUkVNICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorUkVNICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUkVNICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1JFTQorCitSRU0gSW5zdGFsbCB0aGUgQVBJCitjb3B5IG90YXBpLmRsbCAlU3lzdGVtUm9vdCVcU3lzdGVtMzIKKworUkVNIEluc3RhbGwgdGhlIGNlcnRpZmljYXRpb25zIHRvIHRoZSBjZXJ0IHN0b3JlcworY2VydHV0aWwgLWFkZHN0b3JlIHJvb3Qgb3RMd2YuY2VyCitjZXJ0dXRpbCAtYWRkc3RvcmUgVHJ1c3RlZFB1Ymxpc2hlciBvdEx3Zi5jZXIKKworUkVNIFN0YXJ0IEVUVyBsb2dnaW5nIChyZXF1aXJlcyByZWJvb3QpCityZWcuZXhlIGltcG9ydCBUaHJlYWRFdHcucmVnCisKK1JFTSBJbnN0YWxsIHRoZSBkcml2ZXIKK2NvcHkgb3Rsd2Yuc3lzICVTeXN0ZW1Sb290JVxTeXN0ZW0zMlxkcml2ZXJzCitzYy5leGUgY3JlYXRlIG90bHdmIGJpblBhdGg9IFxTeXN0ZW1Sb290XHN5c3RlbTMyXGRyaXZlcnNcb3Rsd2Yuc3lzIHR5cGU9IGtlcm5lbCBzdGFydD0gc3lzdGVtIGdyb3VwPSBORElTIGRpc3BsYXluYW1lPSAiT3BlblRocmVhZCBORElTIExpZ2h0V2VpZ2h0IEZpbHRlciIKK290SW5zdGFsbC5leGUgLWkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy93aW5kb3dzL2luc3RhbGxfb3R0bXAuY21kIGIvdG9vbHMvd2luZG93cy9pbnN0YWxsX290dG1wLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzI0ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvd2luZG93cy9pbnN0YWxsX290dG1wLmNtZApAQCAtMCwwICsxLDMzIEBACitSRU0KK1JFTSAgQ29weXJpZ2h0IChjKSAyMDE2LCBUaGUgT3BlblRocmVhZCBBdXRob3JzLgorUkVNICBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNCitSRU0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorUkVNICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1JFTSAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK1JFTSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUkVNICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorUkVNICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitSRU0gICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSRU0gIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZQorUkVNICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworUkVNICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JFTQorUkVNICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK1JFTSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorUkVNICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorUkVNICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCitSRU0gIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK1JFTSAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1JFTSAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitSRU0gIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitSRU0gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitSRU0gIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitSRU0gIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorUkVNCisKK1JFTSBJbnN0YWxsIHRoZSBjZXJ0aWZpY2F0aW9ucyB0byB0aGUgY2VydCBzdG9yZXMKK2NlcnR1dGlsIC1hZGRzdG9yZSByb290IG90dG1wLmNlcgorY2VydHV0aWwgLWFkZHN0b3JlIFRydXN0ZWRQdWJsaXNoZXIgb3R0bXAuY2VyCisKK2RldmNvbiBpbnN0YWxsIG90dG1wLmluZiByb290XG90dG1wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy94NjQvb3RpbnN0YWxsLmV4ZSBiL3Rvb2xzL3dpbmRvd3MveDY0L290aW5zdGFsbC5leGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjY2I0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3dpbmRvd3MveDY0L290aW5zdGFsbC5leGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvd2luZG93cy94ODYvb3RpbnN0YWxsLmV4ZSBiL3Rvb2xzL3dpbmRvd3MveDg2L290aW5zdGFsbC5leGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyZmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3dpbmRvd3MveDg2L290aW5zdGFsbC5leGUKQmluYXJ5IGZpbGVzIGRpZmZlcgo=